commit 6ed3153f36079f3a14b122b1f7ba4bb31868abf1 Author: Przemek Zatorski Date: Thu Sep 3 11:24:19 2026 +0200 Initial commit diff --git a/.buildpath b/.buildpath new file mode 100644 index 0000000..8bcb4b5 --- /dev/null +++ b/.buildpath @@ -0,0 +1,5 @@ + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2df9668 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.env +.env.* +*.log +Thumbs.db +.DS_Store diff --git a/.project b/.project new file mode 100644 index 0000000..ed66ac4 --- /dev/null +++ b/.project @@ -0,0 +1,34 @@ + + + trzeciTestowy + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.dltk.core.scriptbuilder + + + + + + org.eclipse.php.core.PHPNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..4649ef1 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..5624afe --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,97 @@ +eclipse.preferences.version=1 +encoding//export/site203_print.php=UTF-8 +encoding//export/site204_print.php=UTF-8 +encoding//export/site303_print.php=UTF-8 +encoding//export/site303_xls.php=UTF-8 +encoding//export/site304_print.php=UTF-8 +encoding//export/site304_xls.php=UTF-8 +encoding//export/site401pdet_xls.php=UTF-8 +encoding//export/site810_agginOrder_pdf.php=UTF-8 +encoding//js/dynamicForms.js=UTF-8 +encoding//language/polish.php=UTF-8 +encoding//reports/rep_024_print.php=UTF-8 +encoding//sites/backup/site303.php=UTF-8 +encoding//sites/backup/site304.php=UTF-8 +encoding//sites/site201.php=UTF-8 +encoding//sites/site203.php=UTF-8 +encoding//sites/site203inf.php=UTF-8 +encoding//sites/site204.php=UTF-8 +encoding//sites/site204inf.php=UTF-8 +encoding//sites/site205.php=UTF-8 +encoding//sites/site206.php=UTF-8 +encoding//sites/site206A.php=UTF-8 +encoding//sites/site206E.php=UTF-8 +encoding//sites/site206inf.php=UTF-8 +encoding//sites/site207.php=UTF-8 +encoding//sites/site207A.php=UTF-8 +encoding//sites/site207E.php=UTF-8 +encoding//sites/site207inf.php=UTF-8 +encoding//sites/site208.php=UTF-8 +encoding//sites/site208A.php=UTF-8 +encoding//sites/site208inf.php=UTF-8 +encoding//sites/site301.php=UTF-8 +encoding//sites/site301A.php=UTF-8 +encoding//sites/site301Agg.php=UTF-8 +encoding//sites/site301E.php=UTF-8 +encoding//sites/site301Etool.php=UTF-8 +encoding//sites/site301RBI.php=UTF-8 +encoding//sites/site301RBO.php=UTF-8 +encoding//sites/site301inf.php=UTF-8 +encoding//sites/site301infAkbm.php=UTF-8 +encoding//sites/site301infAru.php=UTF-8 +encoding//sites/site301infArum.php=UTF-8 +encoding//sites/site302.php=UTF-8 +encoding//sites/site303.php=UTF-8 +encoding//sites/site303A.php=UTF-8 +encoding//sites/site303Apump.php=UTF-8 +encoding//sites/site303E.php=UTF-8 +encoding//sites/site303inf.php=UTF-8 +encoding//sites/site303list.php=UTF-8 +encoding//sites/site304.php=UTF-8 +encoding//sites/site304Aeng.php=UTF-8 +encoding//sites/site304inf.php=UTF-8 +encoding//sites/site304list.php=UTF-8 +encoding//sites/site306.php=UTF-8 +encoding//sites/site306A.php=UTF-8 +encoding//sites/site306Aeq.php=UTF-8 +encoding//sites/site306E.php=UTF-8 +encoding//sites/site306inf.php=UTF-8 +encoding//sites/site307E.php=UTF-8 +encoding//sites/site307inf.php=UTF-8 +encoding//sites/site308.php=UTF-8 +encoding//sites/site308inf.php=UTF-8 +encoding//sites/site309.php=UTF-8 +encoding//sites/site310.php=UTF-8 +encoding//sites/site401.php=UTF-8 +encoding//sites/site401E.php=UTF-8 +encoding//sites/site401Eonf.php=UTF-8 +encoding//sites/site401ahis.php=UTF-8 +encoding//sites/site401charts.php=UTF-8 +encoding//sites/site401inf.php=UTF-8 +encoding//sites/site401lift.php=UTF-8 +encoding//sites/site401mark.php=UTF-8 +encoding//sites/site401mhis.php=UTF-8 +encoding//sites/site401pdet.php=UTF-8 +encoding//sites/site404E.php=UTF-8 +encoding//sites/site404chart.php=UTF-8 +encoding//sites/site404inf.php=UTF-8 +encoding//sites/site406_5.php=UTF-8 +encoding//sites/site406charts.php=UTF-8 +encoding//sites/site801.php=UTF-8 +encoding//sites/site801A.php=UTF-8 +encoding//sites/site803.php=UTF-8 +encoding//sites/site803inf.php=UTF-8 +encoding//sites/site806.php=UTF-8 +encoding//sites/site810.php=UTF-8 +encoding//sites/site810A_1.php=UTF-8 +encoding//sites/site810A_2.php=UTF-8 +encoding//sites/site810inf.php=UTF-8 +encoding//sms/readWriteToDatabase.php=UTF-8 +encoding//style/forms.css=UTF-8 +encoding//style/style.css=UTF-8 +encoding/=UTF-8 +encoding/ajax_func.php=UTF-8 +encoding/cleaNotrealiableOff.php=UTF-8 +encoding/dbaccess.php=UTF-8 +encoding/func.php=UTF-8 +encoding/pop_selects.php=UTF-8 diff --git a/.settings/org.eclipse.php.core.prefs b/.settings/org.eclipse.php.core.prefs new file mode 100644 index 0000000..59b3c04 --- /dev/null +++ b/.settings/org.eclipse.php.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +include_path=0;/trzeciTestowy +org.eclipse.php.core.phpDoc=true diff --git a/.settings/org.eclipse.php.formatter.core.prefs b/.settings/org.eclipse.php.formatter.core.prefs new file mode 100644 index 0000000..ea2ae29 --- /dev/null +++ b/.settings/org.eclipse.php.formatter.core.prefs @@ -0,0 +1,243 @@ +eclipse.preferences.version=1 +formatterProfile=org.eclipse.php.formatter.ui.default +indentationChar=\t +insert_space_after_opening_paren_in_declare=true +insert_space_before_closing_paren_in_declare=true +insert_space_before_opening_paren_in_declare=true +org.eclipse.php.core.formatter.insert_new_line_in_function_invoke=0 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_allocation_expression_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_allocation_expression_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_allocation_expression_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_attribute_group_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_attribute_group_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_attribute_group_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_match_expression_force_split=true +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_match_expression_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_match_expression_line_wrap_policy=3 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_method_invocation_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_method_invocation_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_arguments_in_method_invocation_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_assignment_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_assignment_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_assignment_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_binary_expression_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_binary_expression_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_binary_expression_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_compact_if_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_compact_if_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_compact_if_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_conditional_expression_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_conditional_expression_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_conditional_expression_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_expressions_in_array_initializer_force_split=true +org.eclipse.php.formatter.core.formatter.alignment_for_expressions_in_array_initializer_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_expressions_in_array_initializer_line_wrap_policy=3 +org.eclipse.php.formatter.core.formatter.alignment_for_parameters_in_method_declaration_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_parameters_in_method_declaration_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_parameters_in_method_declaration_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_superclass_in_type_declaration_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_superclass_in_type_declaration_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_superclass_in_type_declaration_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_superinterfaces_in_type_declaration_force_split=false +org.eclipse.php.formatter.core.formatter.alignment_for_superinterfaces_in_type_declaration_indent_policy=0 +org.eclipse.php.formatter.core.formatter.alignment_for_superinterfaces_in_type_declaration_line_wrap_policy=0 +org.eclipse.php.formatter.core.formatter.blank_lines_before_enum_case=0 +org.eclipse.php.formatter.core.formatter.blank_lines_before_field=0 +org.eclipse.php.formatter.core.formatter.blank_lines_before_member_type=0 +org.eclipse.php.formatter.core.formatter.blank_lines_before_method=0 +org.eclipse.php.formatter.core.formatter.blank_lines_between_type_declarations=0 +org.eclipse.php.formatter.core.formatter.brace_position_for_block=0 +org.eclipse.php.formatter.core.formatter.brace_position_for_lambda_function_declaration=0 +org.eclipse.php.formatter.core.formatter.brace_position_for_match=0 +org.eclipse.php.formatter.core.formatter.brace_position_for_method_declaration=0 +org.eclipse.php.formatter.core.formatter.brace_position_for_switch=0 +org.eclipse.php.formatter.core.formatter.brace_position_for_type_declaration=0 +org.eclipse.php.formatter.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.php.formatter.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.php.formatter.core.formatter.comment.format_block_comments=true +org.eclipse.php.formatter.core.formatter.comment.format_header=false +org.eclipse.php.formatter.core.formatter.comment.format_html=true +org.eclipse.php.formatter.core.formatter.comment.format_javadoc_comments=true +org.eclipse.php.formatter.core.formatter.comment.format_line_comments=true +org.eclipse.php.formatter.core.formatter.comment.format_source_code=true +org.eclipse.php.formatter.core.formatter.comment.indent_parameter_description=true +org.eclipse.php.formatter.core.formatter.comment.indent_root_tags=true +org.eclipse.php.formatter.core.formatter.comment.insert_new_line_before_root_tags=true +org.eclipse.php.formatter.core.formatter.comment.insert_new_line_for_parameter=true +org.eclipse.php.formatter.core.formatter.comment.keep_empty_line_for_empty_description=true +org.eclipse.php.formatter.core.formatter.comment.line_length=9999 +org.eclipse.php.formatter.core.formatter.comment.never_format_unknown_tags=true +org.eclipse.php.formatter.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.php.formatter.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.php.formatter.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false +org.eclipse.php.formatter.core.formatter.continuation_indentation=2 +org.eclipse.php.formatter.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.php.formatter.core.formatter.disabling_tag=@formatter\:off +org.eclipse.php.formatter.core.formatter.enabling_tag=@formatter\:on +org.eclipse.php.formatter.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.php.formatter.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.php.formatter.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.php.formatter.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.php.formatter.core.formatter.indent_empty_lines=false +org.eclipse.php.formatter.core.formatter.indent_heredocs=true +org.eclipse.php.formatter.core.formatter.indent_match_arms_compare_to_match=true +org.eclipse.php.formatter.core.formatter.indent_statements_compare_to_block=true +org.eclipse.php.formatter.core.formatter.indent_statements_compare_to_body=true +org.eclipse.php.formatter.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.php.formatter.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.php.formatter.core.formatter.indentation.size=1 +org.eclipse.php.formatter.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=false +org.eclipse.php.formatter.core.formatter.insert_new_line_before_catch_in_try_statement=false +org.eclipse.php.formatter.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=true +org.eclipse.php.formatter.core.formatter.insert_new_line_before_else_in_if_statement=false +org.eclipse.php.formatter.core.formatter.insert_new_line_before_finally_in_try_statement=false +org.eclipse.php.formatter.core.formatter.insert_new_line_before_while_in_do_statement=false +org.eclipse.php.formatter.core.formatter.insert_new_line_in_empty_block=true +org.eclipse.php.formatter.core.formatter.insert_new_line_in_empty_method_body=true +org.eclipse.php.formatter.core.formatter.insert_new_line_in_empty_type_declaration=true +org.eclipse.php.formatter.core.formatter.insert_space_after_arrow_in_array_creation=true +org.eclipse.php.formatter.core.formatter.insert_space_after_arrow_in_field_access=false +org.eclipse.php.formatter.core.formatter.insert_space_after_arrow_in_foreach=true +org.eclipse.php.formatter.core.formatter.insert_space_after_arrow_in_match_arm=true +org.eclipse.php.formatter.core.formatter.insert_space_after_arrow_in_method_invocation=false +org.eclipse.php.formatter.core.formatter.insert_space_after_arrow_in_yield=true +org.eclipse.php.formatter.core.formatter.insert_space_after_assignment_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_after_attribute_group_start=false +org.eclipse.php.formatter.core.formatter.insert_space_after_binary_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_after_closing_brace_in_block=true +org.eclipse.php.formatter.core.formatter.insert_space_after_closing_paren_in_cast=true +org.eclipse.php.formatter.core.formatter.insert_space_after_colon_in_conditional=true +org.eclipse.php.formatter.core.formatter.insert_space_after_colon_in_enum_type=true +org.eclipse.php.formatter.core.formatter.insert_space_after_colon_in_named_argument=true +org.eclipse.php.formatter.core.formatter.insert_space_after_coloncolon_in_field_access=false +org.eclipse.php.formatter.core.formatter.insert_space_after_coloncolon_in_method_invocation=false +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_array_creation=false +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_attribute_group=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_echo=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_for_inits=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_global=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_list=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_match_arm_conditions=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_match_expressions=false +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_method_declaration_parameters=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_method_invocation_arguments=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_multiple_constant_declarations=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_multiple_field_declarations=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_static=true +org.eclipse.php.formatter.core.formatter.insert_space_after_comma_in_superinterfaces=true +org.eclipse.php.formatter.core.formatter.insert_space_after_concatenation_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_after_equal_in_enum_case=true +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_bracket_in_array_reference=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_array_creation=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_cast=true +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_catch=true +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_for=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_foreach=true +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_if=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_list=true +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_match=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_method_declaration=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_method_invocation=true +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_switch=false +org.eclipse.php.formatter.core.formatter.insert_space_after_opening_paren_in_while=true +org.eclipse.php.formatter.core.formatter.insert_space_after_postfix_operator=false +org.eclipse.php.formatter.core.formatter.insert_space_after_prefix_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_after_question_in_conditional=true +org.eclipse.php.formatter.core.formatter.insert_space_after_reference_symbol_in_referenced_expression=false +org.eclipse.php.formatter.core.formatter.insert_space_after_semicolon_in_for=true +org.eclipse.php.formatter.core.formatter.insert_space_after_unary_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_before_arrow_in_array_creation=true +org.eclipse.php.formatter.core.formatter.insert_space_before_arrow_in_field_access=false +org.eclipse.php.formatter.core.formatter.insert_space_before_arrow_in_foreach=true +org.eclipse.php.formatter.core.formatter.insert_space_before_arrow_in_match_arm=true +org.eclipse.php.formatter.core.formatter.insert_space_before_arrow_in_method_invocation=false +org.eclipse.php.formatter.core.formatter.insert_space_before_arrow_in_yield=true +org.eclipse.php.formatter.core.formatter.insert_space_before_assignment_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_before_attribute_group_end=false +org.eclipse.php.formatter.core.formatter.insert_space_before_binary_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_bracket_in_array_reference=false +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_array_creation=true +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_cast=true +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_catch=true +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_for=false +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_foreach=true +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_if=false +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_list=true +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_match=false +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_method_declaration=false +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_method_invocation=true +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=false +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_switch=false +org.eclipse.php.formatter.core.formatter.insert_space_before_closing_paren_in_while=true +org.eclipse.php.formatter.core.formatter.insert_space_before_colon_in_case=true +org.eclipse.php.formatter.core.formatter.insert_space_before_colon_in_conditional=true +org.eclipse.php.formatter.core.formatter.insert_space_before_colon_in_default=true +org.eclipse.php.formatter.core.formatter.insert_space_before_colon_in_enum_type=false +org.eclipse.php.formatter.core.formatter.insert_space_before_colon_in_named_argument=false +org.eclipse.php.formatter.core.formatter.insert_space_before_coloncolon_in_field_access=false +org.eclipse.php.formatter.core.formatter.insert_space_before_coloncolon_in_method_invocation=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_array_creation=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_attribute_group=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_echo=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_for_inits=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_global=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_list=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_match_arm_conditions=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_match_expressions=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_method_declaration_parameters=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_method_invocation_arguments=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_multiple_constant_declarations=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_multiple_field_declarations=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_static=false +org.eclipse.php.formatter.core.formatter.insert_space_before_comma_in_superinterfaces=false +org.eclipse.php.formatter.core.formatter.insert_space_before_concatenation_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_before_equal_in_enum_case=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_brace_in_block=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_brace_in_match=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_brace_in_method_declaration=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_brace_in_switch=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_brace_in_type_declaration=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_bracket_in_array_reference=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_array_creation=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_catch=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_for=false +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_foreach=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_if=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_list=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_match=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_method_declaration=false +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_method_invocation=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_switch=true +org.eclipse.php.formatter.core.formatter.insert_space_before_opening_paren_in_while=true +org.eclipse.php.formatter.core.formatter.insert_space_before_postfix_operator=true +org.eclipse.php.formatter.core.formatter.insert_space_before_prefix_operator=false +org.eclipse.php.formatter.core.formatter.insert_space_before_question_in_conditional=true +org.eclipse.php.formatter.core.formatter.insert_space_before_semicolon=false +org.eclipse.php.formatter.core.formatter.insert_space_before_semicolon_in_for=false +org.eclipse.php.formatter.core.formatter.insert_space_before_unary_operator=false +org.eclipse.php.formatter.core.formatter.insert_space_between_brackets_in_array_type_reference=false +org.eclipse.php.formatter.core.formatter.insert_space_between_empty_parens_in_method_declaration=false +org.eclipse.php.formatter.core.formatter.insert_space_between_empty_parens_in_method_invocation=false +org.eclipse.php.formatter.core.formatter.join_lines_in_comments=true +org.eclipse.php.formatter.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.php.formatter.core.formatter.keep_elseif_statement_on_same_line=true +org.eclipse.php.formatter.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.php.formatter.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.php.formatter.core.formatter.keep_trailing_comma_in_list=false +org.eclipse.php.formatter.core.formatter.lineSplit=300 +org.eclipse.php.formatter.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.php.formatter.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_after_namespace=1 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_after_use_statements=1 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_at_end_of_class_body=0 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_at_end_of_method_body=0 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_before_namespace=1 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_before_use_statements=0 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_between_namespaces=0 +org.eclipse.php.formatter.core.formatter.number_of_blank_lines_between_use_statements=0 +org.eclipse.php.formatter.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.php.formatter.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.php.formatter.core.formatter.tabulation.size=4 +org.eclipse.php.formatter.core.formatter.use_on_off_tags=false diff --git a/.settings/org.eclipse.php.ui.prefs b/.settings/org.eclipse.php.ui.prefs new file mode 100644 index 0000000..f03bdc2 --- /dev/null +++ b/.settings/org.eclipse.php.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.php.ui.text.custom_code_templates= diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..a34c30d --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/20161228_soap.php b/20161228_soap.php new file mode 100644 index 0000000..20cd3be --- /dev/null +++ b/20161228_soap.php @@ -0,0 +1,207 @@ +client = new SoapClient($url, array('trace' => 1, + 'cache_wsdl' => WSDL_CACHE_NONE) + ); + } + + public function __debug(){ + echo "Request:\n" . $this->client->__getLastRequest() . "\n"; + echo "Response:\n" . $this->client->__getLastResponse() . "\n"; + } + + public function __setLocation($location){ + $this->client->__setLocation($location); + } + + + public function __getFunctions(){ + var_dump($this->client->__getFunctions()); + } + + /** + * + * + */ + public function GetWellData($id) { + if(@function_exists($this->client->GetWellData)) throw new Exception("Provided endpoint does not contain GetWellData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetWellData(array('id' => $id)); + } + + + + /** + * + * + */ + public function GetWellDataAsArray($id) { + return $this->objectToArray($this->GetWellData($id)); + } + + + + /** + * + * + */ + public function GetWellsData($ids = array()) { + if(@function_exists($this->client->GetWellsData)) throw new Exception("Provided endpoint does not contain GetWellsData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetWellsData($idsArray); + } + + + + /** + * + * + */ + public function GetWellsDataAsArray($ids) { + return $this->objectToArray($this->GetWellsData($ids)); + } + + + + /** + * + * + */ + public function GetPiezometerData($id){ + if(@function_exists($this->client->GetPiezometerData)) throw new Exception("Provided endpoint does not contain GetPiezometerData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPiezometerData(array('id' => $id)); + } + + + + /** + * + * + */ + public function GetPiezometerDataAsArray($id) { + return $this->objectToArray($this->GetPiezometerData($id)); + } + + + + /** + * + * + */ + public function GetPiezometersData($ids){ + if(@function_exists($this->client->GetPiezometersData)) throw new Exception("Provided endpoint does not contain GetPiezometersData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetPiezometersData($idsArray); + } + + + + /** + * + * + */ + public function GetPiezometersDataAsArray($ids) { + return $this->objectToArray($this->GetPiezometersData($ids)); + } + + + /** + * + * + */ + public function GetUserInfo($login){ + if(@function_exists($this->client->GetUserInfo)) throw new Exception("Provided endpoint does not contain GetUserInfo function. Please contact with SYNDIS support"); + if(!isset($login) || empty($login)) throw new Exception("login param cannot be null or empty"); + return $this->client->GetUserInfo(array('login' => $login)); + } + + + + /** + * + * + */ + public function GetUserInfoAsArray($ids) { + return $this->objectToArray($this->GetUserInfo($ids)); + } + + + /** + * + * + */ + public function GetUserInfos($logins){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + if(count($logins) < 1) throw new Exception("logins param cannot be empty array"); + + $idsArray = array(); + + foreach($logins as $login){ + $idsArray[] = array('login' => $login); + } + + return $this->client->GetUserInfos($idsArray); + } + + + + /** + * + * + */ + public function GetUserInfosAsArray($ids) { + return $this->objectToArray($this->GetUserInfos($ids)); + } + + + /** + * + * + */ + public function GetFullUserInfos(){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + return $this->client->GetUserInfos(); + } + + + /** + * + * + */ + public function GetFullUserInfosAsArray() { + return $this->objectToArray($this->GetFullUserInfos()); + } +} + +?> diff --git a/20170130_SyndisSpm.wsdl b/20170130_SyndisSpm.wsdl new file mode 100644 index 0000000..3c0ec72 --- /dev/null +++ b/20170130_SyndisSpm.wsdl @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/20170130_soap.php b/20170130_soap.php new file mode 100644 index 0000000..3f631e4 --- /dev/null +++ b/20170130_soap.php @@ -0,0 +1,221 @@ +client = new SoapClient($url, array('trace' => 1, + 'cache_wsdl' => WSDL_CACHE_NONE) + ); + } + + public function __debug(){ + echo "Request:\n" . $this->client->__getLastRequest() . "\n"; + echo "Response:\n" . $this->client->__getLastResponse() . "\n"; + } + + public function __setLocation($location){ + $this->client->__setLocation($location); + } + + + public function __getFunctions(){ + var_dump($this->client->__getFunctions()); + } + + /** + * + * + */ + public function GetWellData($id) { + if(@function_exists($this->client->GetWellData)) throw new Exception("Provided endpoint does not contain GetWellData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetWellData(array('id' => $id)); + } + + + + /** + * + * + */ + public function GetWellDataAsArray($id) { + return $this->objectToArray($this->GetWellData($id)); + } + + + + /** + * + * + */ + public function GetWellsData($ids = array()) { + if(@function_exists($this->client->GetWellsData)) throw new Exception("Provided endpoint does not contain GetWellsData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetWellsData($idsArray); + } + + + + /** + * + * + */ + public function GetWellsDataAsArray($ids) { + return $this->objectToArray($this->GetWellsData($ids)); + } + + + + /** + * + * + */ + public function GetPiezometerData($id){ + if(@function_exists($this->client->GetPiezometerData)) throw new Exception("Provided endpoint does not contain GetPiezometerData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPiezometerData(array('id' => $id)); + } + + + + /** + * + * + */ + public function GetPiezometerDataAsArray($id) { + return $this->objectToArray($this->GetPiezometerData($id)); + } + + + + /** + * + * + */ + public function GetPiezometersData($ids){ + if(@function_exists($this->client->GetPiezometersData)) throw new Exception("Provided endpoint does not contain GetPiezometersData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetPiezometersData($idsArray); + } + + + + /** + * + * + */ + public function GetPiezometersDataAsArray($ids) { + return $this->objectToArray($this->GetPiezometersData($ids)); + } + + + /** + * + * + */ + public function GetUserInfo($login){ + if(@function_exists($this->client->GetUserInfo)) throw new Exception("Provided endpoint does not contain GetUserInfo function. Please contact with SYNDIS support"); + if(!isset($login) || empty($login)) throw new Exception("login param cannot be null or empty"); + return $this->client->GetUserInfo(array('login' => $login)); + } + + + + /** + * + * + */ + public function GetUserInfoAsArray($ids) { + return $this->objectToArray($this->GetUserInfo($ids)); + } + + + /** + * + * + */ + public function GetUserInfos($logins){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + if(count($logins) < 1) throw new Exception("logins param cannot be empty array"); + + $idsArray = array(); + + foreach($logins as $login){ + $idsArray[] = array('login' => $login); + } + + return $this->client->GetUserInfos($idsArray); + } + + + + /** + * + * + */ + public function GetUserInfosAsArray($ids) { + return $this->objectToArray($this->GetUserInfos($ids)); + } + + + /** + * + * + */ + public function GetFullUserInfos(){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + return $this->client->GetUserInfos(); + } + + + /** + * + * + */ + public function GetFullUserInfosAsArray() { + return $this->objectToArray($this->GetFullUserInfos()); + } + + + + // informacja na temat pomiaru sygnałów + public function GetPumpSwitchHistory($id,$dt) { + if(@function_exists($this->client->GetPumpSwitchHistory)) throw new Exception("Provided endpoint does not contain GetPumpSwitchHistory function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPumpSwitchHistory(array('well' => array('id'=>$id),'date'=>$dt)); + } + + + + + +} + +?> diff --git a/20210926_soap.php b/20210926_soap.php new file mode 100644 index 0000000..8dcfbcc --- /dev/null +++ b/20210926_soap.php @@ -0,0 +1,229 @@ +client = new SoapClient($url, array('trace' => 1, + 'cache_wsdl' => WSDL_CACHE_NONE) + ); + } + + public function __debug(){ + echo "Request:\n" . $this->client->__getLastRequest() . "\n"; + echo "Response:\n" . $this->client->__getLastResponse() . "\n"; + } + + public function __setLocation($location){ + $this->client->__setLocation($location); + } + + + public function __getFunctions(){ + var_dump($this->client->__getFunctions()); + } + + /** + * + * + */ + public function GetWellData($id) { + if(@function_exists($this->client->GetWellData)) throw new Exception("Provided endpoint does not contain GetWellData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetWellData(array('id' => $id)); + } + + + + + /** + * + * + */ + public function GetWellDataAsArray($id) { + return $this->objectToArray($this->GetWellData($id)); + } + + + + /** + * + * + */ + public function GetWellsData($ids = array()) { + if(@function_exists($this->client->GetWellsData)) throw new Exception("Provided endpoint does not contain GetWellsData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetWellsData($idsArray); + } + + + + /** + * + * + */ + public function GetWellsDataAsArray($ids) { + return $this->objectToArray($this->GetWellsData($ids)); + } + + + + /** + * + * + */ + public function GetPiezometerData($id){ + if(@function_exists($this->client->GetPiezometerData)) throw new Exception("Provided endpoint does not contain GetPiezometerData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPiezometerData(array('id' => $id)); + } + + + + /** + * + * + */ + public function GetPiezometerDataAsArray($id) { + return $this->objectToArray($this->GetPiezometerData($id)); + } + + + + /** + * + * + */ + public function GetPiezometersData($ids){ + if(@function_exists($this->client->GetPiezometersData)) throw new Exception("Provided endpoint does not contain GetPiezometersData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetPiezometersData($idsArray); + } + + + + /** + * + * + */ + public function GetPiezometersDataAsArray($ids) { + return $this->objectToArray($this->GetPiezometersData($ids)); + } + + + /** + * + * + */ + public function GetUserInfo($login){ + if(@function_exists($this->client->GetUserInfo)) throw new Exception("Provided endpoint does not contain GetUserInfo function. Please contact with SYNDIS support"); + if(!isset($login) || empty($login)) throw new Exception("login param cannot be null or empty"); + return $this->client->GetUserInfo(array('login' => $login)); + } + + + + /** + * + * + */ + public function GetUserInfoAsArray($ids) { + return $this->objectToArray($this->GetUserInfo($ids)); + } + + + /** + * + * + */ + public function GetUserInfos($logins){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + if(count($logins) < 1) throw new Exception("logins param cannot be empty array"); + + $idsArray = array(); + + foreach($logins as $login){ + $idsArray[] = array('login' => $login); + } + + return $this->client->GetUserInfos($idsArray); + } + + + + /** + * + * + */ + public function GetUserInfosAsArray($ids) { + return $this->objectToArray($this->GetUserInfos($ids)); + } + + + /** + * + * + */ + public function GetFullUserInfos(){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + return $this->client->GetUserInfos(); + } + + + /** + * + * + */ + public function GetFullUserInfosAsArray() { + return $this->objectToArray($this->GetFullUserInfos()); + } + + + + // informacja na temat pomiaru sygnałów + public function GetPumpSwitchHistory($id,$dt) { + if(@function_exists($this->client->GetPumpSwitchHistory)) throw new Exception("Provided endpoint does not contain GetPumpSwitchHistory function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPumpSwitchHistory(array('well' => array('id'=>$id),'date'=>$dt)); + } + + // informacja na temat pomiaru sygnałów wraz z powodem wyłączenia + public function GetPumpSwitchAndReasonsHistory($id,$dt) { + if(@function_exists($this->client->GetPumpSwitchAndReasonsHistory)) throw new Exception("Provided endpoint does not contain GetPumpSwitchAndReasonsHistory function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPumpSwitchAndReasonsHistory(array('well' => array('id'=>$id),'filtered'=>1,'date'=>$dt)); + } + + + + + +} + +?> diff --git a/28557a_soap.php b/28557a_soap.php new file mode 100644 index 0000000..a5673d1 --- /dev/null +++ b/28557a_soap.php @@ -0,0 +1,185 @@ + + + +'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...
'; +echo 'Start: '.date("Y-m-d H:i:s").'
'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + +//mysql_query("TRUNCATE table a_getpumpswitchhistory_ins"); +if (!$_SESSION['last_well']) $_SESSION['last_well']=1; + +unset($recArray); +//$recArray = sqlGetResAsArray("select * from rep_onoff_proccessing where W_STATUS=0 limit 1"); +$recArray = sqlGetResAsArray("select WLL_NAME as W_NAME from seg_wells,seg_well_pump_eng_rel left join seg_dev_resources on (DRS_DEV_TYPE=12 and DRS_DEV_ID=RWL_WLL_ID) where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19) and DRS_ID in (select distinct DRD_DRS_ID from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and (DRD_DESCRIPTION is null or DRD_DESCRIPTION=0) and DRD_AUDIT_USR='SYNDIS') and DRS_ID not in (".$_SESSION['last_well'].") limit 1"); +echo("select WLL_NAME as W_NAME from seg_wells,seg_well_pump_eng_rel left join seg_dev_resources on (DRS_DEV_TYPE=12 and DRS_DEV_ID=RWL_WLL_ID) where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19) and DRS_ID in (select distinct DRD_DRS_ID from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and (DRD_DESCRIPTION is null or DRD_DESCRIPTION=0) and DRD_AUDIT_USR='SYNDIS') and DRS_ID not in (".$_SESSION['last_well'].") limit 1"); +echo'

'; + + +unset($wellArray); +unset($devID); $devID=0; + + + +//$recArray[0]['W_NAME'] = '117G-1'; + +//unset($lasArrayOnOff); +//$lasArrayOnOff = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=27229 and DRD_AUDIT_USR='SYNDIS')"); + + +$getCurMonth = (int) date('m'); + +if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; +else + $offset = 60 * 60; + +//echo $offset; +//echo'

'; + +//$utcDate = date('Y-m-d\TH:i:s\Z', strtotime($lasArrayOnOff[0]['DRD_AUDIT_DATE'])- $offset); +//echo $utcDate; + +echo 'LAST: '.$_SESSION['last_well']; +echo'
'; + + +echo'Studnia: '.$recArray[0]['W_NAME']; +echo'

'; + + + +if (!empty($recArray[0]['W_NAME'])) +{ + +// $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($_GET['w'],date('Y-m').'-01T00:00:00Z')); +// $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($recArray[0]['W_NAME'],$utcDate)); + $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($recArray[0]['W_NAME'],'2014-12-01T00:00:00Z')); + + $devID = sqlStringValue("select DRS_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID in (18,19) and WLL_NAME='".$recArray[0]['W_NAME']."'", "DRS_ID"); + $_SESSION['last_well'] = $_SESSION['last_well'] . ','.$devID; + + + + if (count($wellArray['probes'])>0 && $devID>0) + { + for ($i=0; $i0) + { + echo"Pomiar[".$i."] dla stuID=".$devID."
"; + //echo $wellArray['probes'][$i]['value']." ".$wellArray['probes'][$i]['date']." convert>".convertData($wellArray['probes'][$i]['date'])." ".$wellArray['probes'][$i]['flag']." ".$wellArray['probes'][$i]['reason']."
"; + //echo"
"; + echo("UPDATE ".$tbUpName." SET DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_AUDIT_USR='mujobs_28557' WHERE DRD_ID=".$zeroMeas[0]['DRD_ID']); + mysql_query("UPDATE ".$tbUpName." SET DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_AUDIT_USR='mujobs_28557' WHERE DRD_ID=".$zeroMeas[0]['DRD_ID']); + } + + + + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + //echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo'
'; + + } + + } + + echo'
'; + + + + } +} + +//mysql_query("UPDATE rep_onoff_proccessing SET W_STATUS=1 WHERE W_ID=".$recArray[0]['W_ID']); + + +mysql_close($polacz); +echo 'finish processing ...
'; +echo 'Finish: '.date("Y-m-d H:i:s").'
'; + +/** + * + *echo "
---------------------------------
";
+ *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica
+ *
+ *echo "

---------------------------------
Indeksy piezometru
";
+ *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt
+ *
+ *echo "

---------------------------------
"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "
---------------------------------
";
+ *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array
+ *
+ *echo "

---------------------------------
";
+ *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array
+ */
+
+
+?>
\ No newline at end of file
diff --git a/30450_ls.php b/30450_ls.php
new file mode 100644
index 0000000..f0ef4c4
--- /dev/null
+++ b/30450_ls.php
@@ -0,0 +1,60 @@
+
+
+';
+
+$scriptDate = date("Y-m-d H:i:s");
+
+date_default_timezone_set('Europe/Warsaw');
+require_once("func.php");
+require_once("dbaccess.php");
+$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db');
+mysql_select_db($db_name);
+mysql_query("SET NAMES utf8");
+mysql_query("SET CHARACTER_SET utf8_general_ci");
+
+
+function convertData($insertDate)
+{
+	unset($res);
+	//re-contruct to format
+	$res = date('Y-m-d H:i:s', strtotime($insertDate));
+
+	return $res;
+}
+
+
+unset($objArray);
+$objArray = sqlGetResAsArray("select * from seg_dev_resources where DRS_DEV_TYPE in (12,601)");
+for($i=0; $i';
+	
+	
+	if ($curLS[0]['DRD_VALUE']!=$actGlebokosc)
+	{
+		echo("UPDATE seg_dev_resources_det SET DRD_VALUE='".$actGlebokosc."' WHERE DRD_ID=".$curLS[0]['DRD_ID']);
+		mysql_query("UPDATE seg_dev_resources_det SET DRD_VALUE='".$actGlebokosc."' WHERE DRD_ID=".$curLS[0]['DRD_ID']);
+		echo'
'; + echo'RÓŻNICA!!!!

'; + + } + + + +} + + +mysql_close($polacz); +echo 'finish processing ...
'; +echo 'Finish: '.date("Y-m-d H:i:s").'
'; + + +?> \ No newline at end of file diff --git a/30516_onoff.php b/30516_onoff.php new file mode 100644 index 0000000..10188ef --- /dev/null +++ b/30516_onoff.php @@ -0,0 +1,57 @@ + + +'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +unset($objArray); +$objArray = sqlGetResAsArray("select DRD_DRS_ID,DRD_AUDIT_DATE, count(DRD_AUDIT_DATE) ILE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' group by DRD_DRS_ID,DRD_AUDIT_DATE having count(DRD_AUDIT_DATE)>1"); +for($i=0; $i'; + + // pierwszy krok + /* + if ($tb['DRD_AUDIT_USR']=='SYNDIS') + { + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_ID=".$tb['DRD_ID']); + echo("DELETE FROM seg_dev_resources_det WHERE DRD_ID=".$tb['DRD_ID']); + echo'
'; + } + */ + } + for ($j=1; $j'; + + +?> \ No newline at end of file diff --git a/AUDYT.md b/AUDYT.md new file mode 100644 index 0000000..a413e3e --- /dev/null +++ b/AUDYT.md @@ -0,0 +1,125 @@ +# Audyt techniczny — SoftSPM + +**Data:** 2026-06-09 +**Zakres:** analiza kodu źródłowego (PHP) aplikacji SoftSPM +**Środowisko docelowe (niezmienne):** PHP 5.4.35, MariaDB 10.6.23, XAMPP/Apache, Windows +**Bazy danych:** `softspm` (główna), `softspm_rep` (dane historyczne + tabele raportowe), `softspm_his` (archiwum z minionych lat) + +> Uwaga: audyt schematu baz (typy tabel, indeksy, klucze, silnik MyISAM/InnoDB) zostanie uzupełniony po dostarczeniu struktury tabel. Poniżej wyłącznie ustalenia z analizy kodu. + +--- + +## 1. Podsumowanie wykonawcze + +Aplikacja jest sprawnym, rozbudowanym systemem dziedzinowym (monitoring odwodnienia kopalni: studnie, pompy, silniki, piezometry, raporty, integracja SCADA SYNDIS przez SOAP), ale pod względem inżynierskim to **kod podwyższonego ryzyka**: brak warstwy dostępu do danych, masowe składanie zapytań SQL ze stringów z danymi użytkownika, słabe uwierzytelnianie i wiele plików operacyjnych/backupów dostępnych z poziomu sieci. + +Ograniczenie „PHP 5.4 i tak musi zostać" nie blokuje napraw bezpieczeństwa — **`mysqli` z zapytaniami przygotowanymi oraz `mysql_real_escape_string` są dostępne już w PHP 5.4**. Rekomendacje poniżej są w pełni zgodne z tym środowiskiem. + +| Obszar | Ocena | Najważniejszy problem | +|---|---|---| +| Bezpieczeństwo | 🔴 Krytyczne | Powszechny SQL injection, słabe logowanie, LFI w routerze | +| Architektura | 🟠 Wysokie | Brak warstw, `func.php` ~4000 linii, twardo zakodowane nazwy baz | +| Utrzymywalność | 🟠 Wysokie | Brak VCS, brak testów, pliki jednorazowe/backupy w repo | +| Niezawodność/operacje | 🟡 Średnie | Brak transakcji, `echo`/debug w ścieżkach produkcyjnych | +| Zgodność z PHP 5.4 | 🟢 OK | Kod działa, ale `ext/mysql` jest usunięty w PHP 7+ — blokuje aktualizację | + +--- + +## 2. Bezpieczeństwo (priorytet krytyczny) + +### 2.1 SQL Injection — powszechny +- Funkcje-wrappery w [func.php](func.php) (`sqlValue`, `sqlStringValue`, `sqlStringArray`, `sqlGetResAsArray`) **nie wykonują żadnego escapowania** — wykonują przekazany string wprost przez `mysql_query`. +- W całym kodzie **0 wystąpień `mysql_real_escape_string`** (poza bibliotekami vendor) przy **~2441 użyciach `$_GET`/`$_POST`/`$_REQUEST`** i zapytaniach budowanych konkatenacją. +- Parametry tekstowe trafiają do SQL bez filtrowania, np. w [ajax_func.php](ajax_func.php): + - `...WHERE DRS_ID=".$_POST['post_dev']` (wartość liczbowa użyta surowo), + - `...DRS_DEPARTMENT='".$_POST['post_dep']."'` (string surowy), + - `...WLL_NAME='".$_POST['post_well_name']."'` (string surowy). +- `getFloatValue()`/`getFullFloatValue()` dają **częściową** ochronę dla pól liczbowych (usuwają cudzysłowy, rzutują na float), ale są stosowane niekonsekwentnie, a pól tekstowych i identyfikatorów `*_dev`/`*_id` nie chronią. + +**Rekomendacja (zgodna z PHP 5.4):** +1. Przejść z `ext/mysql` na **`mysqli` z zapytaniami przygotowanymi** (`prepare`/`bind_param`). Migrację zacząć od ścieżek przyjmujących dane użytkownika (`ajax_func.php`, `ajax_getdata4well.php`, wyszukiwarki w `sites/*`, importery `soap_*`). +2. Etap przejściowy, gdy pełna migracja jest niemożliwa od razu: rozszerzyć wrappery o escapowanie i wymusić rzutowanie identyfikatorów na `(int)` — natychmiast obcina najczęstszy wektor. + +### 2.2 Uwierzytelnianie i sesje +W [index.php](index.php) i `usrLoginAndSiteAccess()` ([func.php:1340](func.php#L1340)): +- **Hasła w MD5 bez soli** (`USR_PASSWORD = md5($passwd)`) — podatne na tablice tęczowe. +- **SSO z SYNDIS oparty o `md5(USR_USERNAME)`** jako token `?auth=` — token jest **w pełni przewidywalny** dla każdego, kto zna nazwę użytkownika (brak sekretu/HMAC, brak czasu ważności). +- W ścieżce SSO logowanie następuje hasłem `username.".123"` — sugeruje **domyślny, łatwy do odgadnięcia wzorzec haseł**. +- Brak ochrony CSRF na formularzach i akcjach zapisujących (`ajax_func.php`). +- Brak `session_regenerate_id()` po logowaniu (ryzyko session fixation); ciasteczka sesji bez atrybutów `HttpOnly`/`Secure`/`SameSite`. + +**Rekomendacja:** HMAC z sekretem serwerowym + znacznik czasu dla tokenu SSO; wymuszenie zmiany haseł domyślnych; docelowo `password_hash`/`bcrypt` (dostępne od PHP 5.5 — przy 5.4 użyć `crypt()` z solą bcrypt lub biblioteki `password_compat`); token CSRF w formularzach; `session_regenerate_id(true)` po zalogowaniu; twarde atrybuty ciasteczka sesyjnego. + +### 2.3 Local File Inclusion w routerze +[index.php:342-345](index.php#L342) wykonuje `include './sites/'.$_GET['pg'].'.php'` **bez walidacji** `pg`. Pozwala to na directory traversal / dołączenie nieprzewidzianych plików. +**Rekomendacja:** whitelist dozwolonych nazw stron (np. `preg_match('/^site[0-9A-Za-z_]+$/')` + sprawdzenie `is_file`), odrzucanie reszty. + +### 2.4 XSS +Wartości z sesji i parametrów są wypisywane bez `htmlspecialchars` (np. `echo $_SESSION['user']`, etykiety, parametry wyszukiwarek). Przy słabej kontroli wejścia daje to trwały/refleksyjny XSS. +**Rekomendacja:** escapować całe wyjście HTML (`htmlspecialchars(..., ENT_QUOTES, 'UTF-8')`). + +### 2.5 Sekrety i pliki dostępne z sieci +- [dbaccess.php](dbaccess.php) zawiera login i hasło do bazy w repozytorium, plus **zakomentowane dane produkcyjne** (host `91.196.51.170`, użytkownik `softspm`, hash hasła). Należy usunąć z repo i przenieść do konfiguracji poza webrootem. +- W webroocie leżą i są pobieralne: **`error.log` (~170 KB), `custom_log`**, katalog **`sites/backup/`**, liczne pliki jednorazowe/diagnostyczne (`test.php`, `test_dat.php`, `naprawa_20210312.php`, `repair_20210313_data.php`, `rollback.php`, `*_soap.php`, `soap_aaa.php`). To wyciek informacji i dodatkowa powierzchnia ataku. +- Endpointy `soap_*.php` i `ajax_*` — zweryfikować, czy wymagają zalogowania; importery SYNDIS z twardo wpisanymi adresami IP nie powinny być wywoływalne anonimowo. + +**Rekomendacja:** przenieść logi i konfigurację poza katalog publiczny; usunąć/zablokować pliki diagnostyczne i `sites/backup`; dodać reguły dostępu (`.htaccess`/konfiguracja Apache) na pliki nie będące punktami wejścia. + +--- + +## 3. Architektura i utrzymywalność + +- **Brak systemu kontroli wersji** w katalogu projektu (to nie repozytorium git). Historia zmian żyje w nazwach plików (`*_20180426.php`, `backup/`, `naprawa_*`, daty w nazwach). To poważne ryzyko operacyjne. **Rekomendacja: założyć repozytorium git** i wciągnąć stan bazowy. +- **Brak warstw**: logika dostępu do danych, reguły biznesowe i HTML są wymieszane w plikach `sites/*` i w monolitycznym [func.php](func.php) (~4000 linii, ~140 funkcji). Utrudnia testowanie i zmiany. +- **Twardo zakodowane nazwy baz** `softspm_rep.` i `softspm_his.` w zapytaniach (m.in. [func.php](func.php), zapytania `UNION`/podzapytania łączące bazy). Każda zmiana nazwy/serwera bazy wymaga przeszukania całego kodu. **Rekomendacja:** wprowadzić stałe konfiguracyjne (np. `define('DB_REP', 'softspm_rep')`) i składać nazwy z nich. +- **Duplikacja i martwy kod**: wiele wariantów raportów (`rep_002_*_print.php` per miesiąc), `soap_of_while*` w pięciu wersjach, foldery `backup/`. Utrudnia ustalenie, co jest „żywe". +- **Vendored biblioteki przestarzałe i bez menedżera zależności**: `PHPExcel` (projekt zarchiwizowany, następca PhpSpreadsheet), `tcpdf`, `fpdf`, `pChart`, `ckEditor`, `PHPWord`. Brak ścieżki łatania podatności. **Rekomendacja:** spisać wersje, ocenić znane CVE, rozważyć kontrolowaną aktualizację tych zgodnych z PHP 5.4. +- **Brak testów automatycznych** — każda zmiana w `func.php` (używanym niemal wszędzie) jest ryzykowna. **Rekomendacja:** zacząć od testów charakteryzujących krytyczne funkcje obliczeniowe (`wellEvaluation4_*`, `getGlobalPumpedWater*`, `liczCzasu`). + +--- + +## 4. Baza danych i dane (wstępnie, do uzupełnienia po schemacie) + +- **Sharding miesięczny tabel** historycznych w kodzie: nazwy budowane dynamicznie (`getTableNameFrom_everyday_his`, `getTableNameFrom_resources_det`, sufiksy `rep_his_data_everyday_`, `seg_dev_resources_det_`). Ryzyko: zapytania do nieistniejącej tabeli dla brakującego okresu; trudna ewolucja schematu. Zweryfikować obsługę braku tabeli. +- **Zapytania cross-database** (`JOIN`/`UNION` między `softspm`, `softspm_rep`, `softspm_his`, np. [func.php:1729](func.php#L1729)). Wymaga, by wszystkie trzy bazy były na jednym serwerze; utrudnia rozdzielenie/skalowanie. Zwrócić uwagę na wydajność takich `UNION` po dużych tabelach archiwum. +- **Operacje masowe bez transakcji**: `TRUNCATE` + `INSERT ... SELECT` (np. odświeżanie `rep_object_departments` w [ajax_func.php:19](ajax_func.php#L19)). Przy błędzie w połowie tabela zostaje pusta/niespójna. **Rekomendacja:** transakcje (wymaga InnoDB) lub budowanie do tabeli tymczasowej i `RENAME`. +- Do sprawdzenia po dostarczeniu schematu: silnik tabel (MyISAM vs InnoDB — kluczowe dla transakcji i blokad), indeksy pod najczęstsze filtry (`DRD_DRS_ID`, `DRD_RESOURCES_DETAIL`, `DRD_AUDIT_DATE`), typy kolumn dat, spójność kluczy obcych między bazami, kodowanie znaków (kod ustawia `utf8`/`utf8_general_ci`). + +--- + +## 5. Niezawodność i operacje + +- **Debug/echo w ścieżkach produkcyjnych**: `error_reporting(E_ALL)` i `echo 'starting...'` w `soap_update5min.php` (zadanie cykliczne co 5 min); komunikaty `mysql_error()` zwracane do wyjścia w `sqlGetResAsArray`. Ujawnia strukturę i zaśmieca logi. +- **Brak obsługi błędów połączenia** poza `or die('cannot connect to db')` — brak kontrolowanej degradacji. +- **Zadania cykliczne przez `.bat` + `php-cli`** (`reports/rep_003_hours.bat`, poll SYNDIS) z twardo wpisanymi ścieżkami i adresami IP — kruche przy zmianie środowiska; brak centralnej konfiguracji i monitoringu wykonania. +- **`mysql_*` (ext/mysql) jest usunięty w PHP 7+** — to twarda blokada jakiejkolwiek przyszłej aktualizacji PHP. Nawet jeśli teraz pozostajemy na 5.4, migracja do `mysqli` zdejmuje tę blokadę „przy okazji" poprawek bezpieczeństwa. + +--- + +## 6. Plan działania (priorytetyzacja) + +**P0 — natychmiast (bezpieczeństwo, niskie ryzyko regresji):** +1. Whitelist `pg` w [index.php](index.php) (usunięcie LFI). +2. Zablokować dostęp HTTP do `error.log`, `custom_log`, `sites/backup/`, plików `test*/naprawa*/repair*/rollback*/*_soap.php` (konfiguracja Apache/`.htaccess`). +3. Przenieść `dbaccess.php` poza webroot i usunąć zakomentowane dane produkcyjne. +4. Rzutować wszystkie identyfikatory z `$_GET/$_POST` na `(int)` w endpointach zapisujących. + +**P1 — krótki termin:** +5. Migracja `ext/mysql` → `mysqli` z prepared statements, zaczynając od `ajax_func.php`, `ajax_getdata4well.php`, importerów `soap_*` i wyszukiwarek. +6. Token SSO oparty o HMAC+czas; wymuszenie zmiany haseł domyślnych; `session_regenerate_id` i bezpieczne atrybuty ciasteczek; tokeny CSRF. +7. Escapowanie całego wyjścia HTML (XSS). +8. Założenie repozytorium **git** i odcięcie martwego kodu/backupów. + +**P2 — średni termin:** +9. Konfiguracyjne stałe nazw baz; wyłączenie debug/echo z produkcji. +10. Transakcje dla operacji masowych (po potwierdzeniu InnoDB). +11. Testy charakteryzujące krytyczne funkcje obliczeniowe. +12. Inwentaryzacja i ocena CVE bibliotek vendor. + +--- + +## 7. Mocne strony (do zachowania) + +- Spójna konwencja nazewnicza tabel/kolumn (`seg_`/`sys_`/`rep_`/`tst_`, prefiksy kolumn) i stron (`siteNNN` + sufiksy) — łatwo się odnaleźć po opanowaniu wzorca. +- Wydzielone wrappery SQL i słownikowe — dobry punkt zaczepienia do wprowadzenia bezpiecznej warstwy dostępu (zmiana w jednym miejscu obejmie wiele wywołań). +- Czytelny rozdział ról SOAP (klient SYNDIS vs serwer `webservice/`). diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..09ff387 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,181 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## What this is + +**SoftSPM** — a legacy PHP web application for monitoring and reporting on mine-dewatering +infrastructure (wells, pumps, engines, piezometers, reservoirs) for PGE Bełchatów/Szczerców +lignite mines. It ingests live readings from the **SYNDIS** SCADA system over SOAP and presents +dashboards, history, and printable reports. The domain language throughout the code (variables, +comments, UI labels) is **Polish**. + +There is **no build system, no package manager, no test suite, and no dependency manifest**. +Third-party libraries are vendored as folders (`PHPExcel/`, `PHPWord/`, `fpdf/`, `tcpdf/`, +`pChart/`, `ckEditor/`, `libmail/`). Code is edited and served in place. + +## Running / environment + +- Served under **XAMPP** (Apache + MariaDB) from `htdocs/`. Hit `index.php` in a browser. +- Target runtime is **PHP 5.4.35 / MariaDB 10.6.23** and is treated as fixed. The code uses the + **removed `mysql_*` extension** (`mysql_connect`, `mysql_query`), so PHP lives at + `C:\Programy\xampp_old\php\php.exe`. The Eclipse facet claiming PHP 8.2 + (`.settings/...facet.core.xml`) is misleading; do not assume PHP 5.5+ features + (no `password_hash`, no `finally`, no `::class`, no short-array-only shortcuts on old files). +- DB credentials live in `dbaccess.php`. Most scripts open their own connection with the + boilerplate at the top of `index.php`, `soap.php`, and `ajax_func.php` + (`mysql_connect` → `mysql_select_db` → `SET NAMES utf8`). +- Scheduled/cron jobs are run via Windows `.bat` files invoking the CLI, e.g. + `reports/rep_003_hours.bat` calls `php.exe -r "parse_str('dep=B',$_GET); include '...rep_003_hours.php';"` + once per department (`B`/`S`/`D`). `soap_update5min.php` is the SYNDIS poll meant to run every 5 minutes. +- **Parallel deployments:** `htdocs/` holds several copies of this app (`trzeciTestowy`, + `pierwszyPodstawowy`, `newPGE`, `wellsctrl*`, …). `reports/rep_003_hours.bat` in *this* tree + points its `SCRIPT_PATH` at `htdocs\trzeciTestowy\` — check hard-coded paths before assuming a + script here is the one actually running. +- **Not a git repository.** History lives in dated filename copies (`*_20180426.php`, + `naprawa_20210312.php`, `20170130_soap.php`) and in `sites/backup/`. + +## Architecture + +### Front controller + page fragments +`index.php` is the single entry point and template shell. It dispatches on the `pg` query param: +`?pg=siteNNN` simply `include`s `sites/siteNNN.php` (default `site401`). The top menu, auth gate, +and DB connection all live in `index.php`; the `sites/*.php` files are page bodies that assume an +open connection and an active session. + +There are ~200 fragments in `sites/`. The naming is conventional, not arbitrary — a base +`siteNNN.php` has variants by suffix, e.g. for `site401`: `E`=edit, `inf`=info/detail panel, +`his`/`ahis`/`mhis`/`offhis`=various history views, `charts`, `det`/`pdet`=details, `mark`=map +marker view. When adding a feature, follow the existing suffix pattern for that site number. + +### Auth & per-page access control (`usrLoginAndSiteAccess` in `func.php`) +Two login paths in `index.php`: a normal form post, and **SYNDIS single-sign-on** via +`?auth=` (matched against `md5(USR_USERNAME)`), which can deep-link to a specific object and +redirect to its page. After login, the user's accessible pages are loaded from +`sys_user_profiles → sys_profile_site → sys_site_access` and flattened into session flags: +`$_SESSION['siteNNN']` gates menu/page visibility and `$_SESSION['siteNNN_edit']` gates write +actions. **Pages and AJAX handlers must check these flags themselves** — the router does not. +`access_level` is currently hard-coded to `1` (BASIC tier). + +### Shared library (`func.php`, ~3400 lines, ~140 functions) +The catch-all helper file `require`d almost everywhere. Key categories: +- **DB scalar/array wrappers:** `sqlValue()`, `sqlStringValue()`, `sqlStringArray()`, + `sqlGetResAsArray()` — prefer these over raw `mysql_query` for reads. +- **Dictionaries / dropdowns:** `selectFromDictionary()`, `setDicName()`, etc., backed by + `sys_dictionaries` (`DIC_TYPE` + `DIC_NAME`). +- **Domain math:** pump/well evaluation (`wellEvaluation4_*`), polynomial curve fits + (`getPolynomial*`, with the `polynomial/` folder), working-time and pumped-water aggregation + (`getGlobalWorkingTimeInDate`, `getGlobalPumpedWater*`, `liczCzasu`). +- **History access:** `getHistoricalDataFrom_*`, plus the two helpers that resolve which sharded + table a date lives in — see *Three databases and history sharding* below + (`getTableNameFrom_everyday_his`, `getTableNameFrom_resources_det`). + +### AJAX (`ajax_func.php`, `ajax_getdata4well.php`) +POST endpoints dispatched by inspecting `$_POST['action']` / `$_POST['post_site']` / +`$_POST['post_action']`. This is where most dynamic-form writes happen (insert/update into +`rep_his_data_everyday`, `seg_dev_resources_det`, etc.). + +### SOAP — two distinct roles +1. **Client of SYNDIS** (pulling SCADA data *in*): `soap.php` defines `class SyndisConnector` + wrapping a `SoapClient` against `SyndisSpm.wsdl`. The many top-level `soap_*.php` scripts are + one-off or scheduled importers/updaters (`soap_update5min.php`, `soap_importwells.php`, + `soap_importpiezo.php`, `soap_of_while*.php`, etc.). These set the SYNDIS endpoint IP/port near + the top — those are environment-specific and must be updated per deployment. +2. **SOAP server** (exposing data *out* to SYNDIS): the `webservice/` folder. `webservice.php` + boots a `PhpWsdl` server (`lib/`); **business logic goes in `webservice/class.soap.php`** and + types in `class.complextypes.php`. Fetch the WSDL at `webservice.php?WSDL`. The `cache/` folder + needs write permission. See `webservice/readme.txt`. + +### Reporting & export +- `reports/` — report definitions `rep_NNN_{print,pdf,xls}.php` (HTML print, FPDF/TCPDF PDF, PHPExcel XLS). +- `export/` — per-page exports `siteNNN_{print,pdf,xls}.php`, including the large `site810_*` + equipment-order document generators. +- Charts via `pChart/` and `charts/`; generated PNGs are written per-user and cleaned by + `delChartFiles()` on login. + +## Database + +### Three databases and history sharding +The connection opens `softspm`, but queries reach two more by **hard-coded prefix** — ~240 +occurrences of `softspm_rep.` and ~90 of `softspm_his.` across `func.php`, `sites/*`, `reports/*`. +All three must live on the same server; cross-database `JOIN`/`UNION` is normal here. + +- `softspm` — live/operational tables (assets, dictionaries, users, current readings). +- `softspm_rep` — precomputed reporting tables (`rep_002_*` per Polish month abbreviation + `styc…grud`, `rep_003_data`, `rep_015_*`, `*_prev_years` comparatives, `syndis_quality_data`). +- `softspm_his` — archive: **quarterly shards** `rep_his_data_everyday_YYYY_qN` and + `seg_dev_resources_det_YYYY_qN`, plus per-year piezometer tables `rec_dev_resources_piezo_NN`. + +`getTableNameFrom_everyday_his($date)` / `getTableNameFrom_resources_det($date)` +([func.php:3842](func.php#L3842), [func.php:3888](func.php#L3888)) encode the whole routing rule — +**always go through them instead of naming a history table literally**: +1. Date in the current year → base table (`rep_his_data_everyday` / `seg_dev_resources_det`), but + switches to the `_his` suffixed table once the date is **more than 180 days old**. +2. Otherwise → `softspm_his.__q`, with a quirk: a date in the **first 3 days + of a month** is rolled back into the *previous* month (so early-January reads hit the prior + year's Q4). +3. Anything before 2014 is clamped to the `2014_q1` shard. + +### Schema reference +`db_structure/*.sql` holds structure-only dumps of all three databases +(`20260602_softspm_nodata.sql`, `20260604_softspm_rep_nd.sql`, `20260604_softspm_his_nd.sql`) — +grep these instead of guessing at columns. The main DB is ~122 tables, almost all **InnoDB** +(5 MyISAM), so transactions *are* available despite the code never using them. + +### Naming conventions +Table/column prefixes encode the subsystem; columns are uppercase prefixed by an abbreviation of +the table: +- `seg_*` — assets & device data. `seg_wells` (`WLL_*`), `seg_pumps` (`PUP_*`), + `seg_engines` (`ENG_*`), `seg_reservoirs_piezometers` (`SRP_*`). +- `seg_dev_resources` (`DRS_*`) is the central device-instance table. **`DRS_DEV_TYPE` codes:** + `10`=pump, `11`=engine, `12`=well, `601`=piezometer; `DRS_DEV_ID` joins to the typed table above. +- `seg_dev_resources_det` (`DRD_*`) is the time-series readings table: `DRD_RESOURCES_DETAIL` is a + dictionary id selecting the measured quantity, `DRD_VALUE` the value, `DRD_AUDIT_DATE` the + timestamp. `_det_his` and the quarterly shards hold history. +- `sys_*` — system: `sys_users`, `sys_dictionaries`, `sys_setup_parameters`, access tables above. +- `rep_*` — denormalized reporting tables, some rebuilt via `TRUNCATE`+`INSERT…SELECT` + (see the `refresh_departments` action in `ajax_func.php`). +- `tst_*` — pump test results (`tst_tests`). + +Passwords are `md5()` hashes (`USR_PASSWORD`). SYNDIS-imported rows are stamped +`DRD_AUDIT_USR='SYNDIS'`. + +## Working in this codebase + +- Match the surrounding style: queries are built by string concatenation inline; reads go through + the `func.php` SQL wrappers. There is no ORM and no prepared-statement layer. +- New UI pages = add `sites/siteNNN.php`, wire a menu entry / `$_SESSION['siteNNN']` gate + in `index.php`, and (if it writes) a handler branch in `ajax_func.php`. +- UI strings come from `language/{polish,english,german}.php` as `$lab_*` variables, keyed by site + number (e.g. `$lab_SubMenu_401`). `polish.php` is the source of truth and is roughly twice the + size of the other two — expect missing keys in `english.php`/`german.php`. +- `error.log` and `custom_log` at the repo root are runtime logs, not source. + +### Dead code — don't trust every grep hit +A large share of the tree is superseded copies. Before editing a file a search turned up, confirm +it is the live one: +- `sites/backup/` (23 files) — old page versions, still full of matching code. +- Date-stamped duplicates at the root: `20161228_soap.php`, `20170130_soap.php`, + `20210926_soap.php`, `28557a_soap.php`, plus `20170130_SyndisSpm.wsdl` next to the live + `SyndisSpm.wsdl`. +- One-shot repair/diagnostic scripts: `naprawa_20210312.php`, `repair_20210313_data.php`, + `rollback.php`, `test.php`, `test_dat.php`, `clean20Off.php`, `dell_bledne_wylaczenia.php`. +- Five parallel variants of the same importer: `soap_of_while{,_back,_last,_manual,_new}.php`. +- Per-month report clones in `reports/` (e.g. `rep_002_wrze_print.php`). + +## Known hazards + +`AUDYT.md` (Polish) is a technical audit of this code with a prioritized P0/P1/P2 remediation +plan — **read it before proposing any refactor**, and don't re-derive its findings. The headline +items, which you will hit while editing: + +- The `func.php` SQL wrappers do **no escaping**; `mysql_real_escape_string` appears nowhere in + application code. `getFloatValue()`/`getFullFloatValue()` are the only (partial, numeric-only) + guard. New code touching `$_GET`/`$_POST` should at minimum cast ids to `(int)`. +- [index.php:342](index.php#L342) does `include './sites/'.$_GET['pg'].'.php'` unvalidated (LFI). +- SYNDIS SSO tokens are plain `md5(USR_USERNAME)` and the SSO path logs in with the password + pattern `username.".123"` ([index.php:86-102](index.php#L86-L102)). Passwords are unsalted MD5. +- `dbaccess.php` is inside the webroot and contains credentials plus commented-out production hosts. +- Bulk rebuilds use `TRUNCATE` + `INSERT…SELECT` with no transaction (e.g. the + `refresh_departments` action at [ajax_func.php:17](ajax_func.php#L17)) — an error mid-way leaves + the table empty. diff --git a/PHPExcel.php b/PHPExcel.php new file mode 100644 index 0000000..bf6f60f --- /dev/null +++ b/PHPExcel.php @@ -0,0 +1,1139 @@ +_hasMacros; + } + + /** + * Define if a workbook has macros + * + * @param true|false + */ + public function setHasMacros($hasMacros=false){ + $this->_hasMacros=(bool)$hasMacros; + } + + /** + * Set the macros code + * + * @param binary string|null + */ + public function setMacrosCode($MacrosCode){ + $this->_macrosCode=$MacrosCode; + $this->setHasMacros(!is_null($MacrosCode)); + } + + /** + * Return the macros code + * + * @return binary|null + */ + public function getMacrosCode(){ + return $this->_macrosCode; + } + + /** + * Set the macros certificate + * + * @param binary|null + */ + public function setMacrosCertificate($Certificate=NULL){ + $this->_macrosCertificate=$Certificate; + } + + /** + * Is the project signed ? + * + * @return true|false + */ + public function hasMacrosCertificate(){ + return !is_null($this->_macrosCertificate); + } + + /** + * Return the macros certificate + * + * @return binary|null + */ + public function getMacrosCertificate(){ + return $this->_macrosCertificate; + } + + /** + * Remove all macros, certificate from spreadsheet + * + * @param none + * @return void + */ + public function discardMacros(){ + $this->_hasMacros=false; + $this->_macrosCode=NULL; + $this->_macrosCertificate=NULL; + } + + /** + * set ribbon XML data + * + */ + public function setRibbonXMLData($Target=NULL, $XMLData=NULL){ + if(!is_null($Target) && !is_null($XMLData)){ + $this->_ribbonXMLData=array('target'=>$Target, 'data'=>$XMLData); + }else{ + $this->_ribbonXMLData=NULL; + } + } + + /** + * retrieve ribbon XML Data + * + * return string|null|array + */ + public function getRibbonXMLData($What='all'){//we need some constants here... + $ReturnData=NULL; + $What=strtolower($What); + switch($What){ + case 'all': + $ReturnData=$this->_ribbonXMLData; + break; + case 'target': + case 'data': + if(is_array($this->_ribbonXMLData) && array_key_exists($What,$this->_ribbonXMLData)){ + $ReturnData=$this->_ribbonXMLData[$What]; + }//else $ReturnData stay at null + break; + }//default: $ReturnData at null + return $ReturnData; + } + + /** + * store binaries ribbon objects (pictures) + * + */ + public function setRibbonBinObjects($BinObjectsNames=NULL, $BinObjectsData=NULL){ + if(!is_null($BinObjectsNames) && !is_null($BinObjectsData)){ + $this->_ribbonBinObjects=array('names'=>$BinObjectsNames, 'data'=>$BinObjectsData); + }else{ + $this->_ribbonBinObjects=NULL; + } + } + /** + * return the extension of a filename. Internal use for a array_map callback (php<5.3 don't like lambda function) + * + */ + private function _getExtensionOnly($ThePath){ + return pathinfo($ThePath, PATHINFO_EXTENSION); + } + + /** + * retrieve Binaries Ribbon Objects + * + */ + public function getRibbonBinObjects($What='all'){ + $ReturnData=NULL; + $What=strtolower($What); + switch($What){ + case 'all': + return $this->_ribbonBinObjects; + break; + case 'names': + case 'data': + if(is_array($this->_ribbonBinObjects) && array_key_exists($What, $this->_ribbonBinObjects)){ + $ReturnData=$this->_ribbonBinObjects[$What]; + } + break; + case 'types': + if(is_array($this->_ribbonBinObjects) && array_key_exists('data', $this->_ribbonBinObjects) && is_array($this->_ribbonBinObjects['data'])){ + $tmpTypes=array_keys($this->_ribbonBinObjects['data']); + $ReturnData=array_unique(array_map(array($this,'_getExtensionOnly'), $tmpTypes)); + }else + $ReturnData=array();//the caller want an array... not null if empty + break; + } + return $ReturnData; + } + + /** + * This workbook have a custom UI ? + * + * @return true|false + */ + public function hasRibbon(){ + return !is_null($this->_ribbonXMLData); + } + + /** + * This workbook have additionnal object for the ribbon ? + * + * @return true|false + */ + public function hasRibbonBinObjects(){ + return !is_null($this->_ribbonBinObjects); + } + + /** + * Check if a sheet with a specified code name already exists + * + * @param string $pSheetCodeName Name of the worksheet to check + * @return boolean + */ + public function sheetCodeNameExists($pSheetCodeName) + { + return ($this->getSheetByCodeName($pSheetCodeName) !== NULL); + } + + /** + * Get sheet by code name. Warning : sheet don't have always a code name ! + * + * @param string $pName Sheet name + * @return PHPExcel_Worksheet + */ + public function getSheetByCodeName($pName = '') + { + $worksheetCount = count($this->_workSheetCollection); + for ($i = 0; $i < $worksheetCount; ++$i) { + if ($this->_workSheetCollection[$i]->getCodeName() == $pName) { + return $this->_workSheetCollection[$i]; + } + } + + return null; + } + + /** + * Create a new PHPExcel with one Worksheet + */ + public function __construct() + { + $this->_uniqueID = uniqid(); + $this->_calculationEngine = PHPExcel_Calculation::getInstance($this); + + // Initialise worksheet collection and add one worksheet + $this->_workSheetCollection = array(); + $this->_workSheetCollection[] = new PHPExcel_Worksheet($this); + $this->_activeSheetIndex = 0; + + // Create document properties + $this->_properties = new PHPExcel_DocumentProperties(); + + // Create document security + $this->_security = new PHPExcel_DocumentSecurity(); + + // Set named ranges + $this->_namedRanges = array(); + + // Create the cellXf supervisor + $this->_cellXfSupervisor = new PHPExcel_Style(true); + $this->_cellXfSupervisor->bindParent($this); + + // Create the default style + $this->addCellXf(new PHPExcel_Style); + $this->addCellStyleXf(new PHPExcel_Style); + } + + /** + * Code to execute when this worksheet is unset() + * + */ + public function __destruct() { + PHPExcel_Calculation::unsetInstance($this); + $this->disconnectWorksheets(); + } // function __destruct() + + /** + * Disconnect all worksheets from this PHPExcel workbook object, + * typically so that the PHPExcel object can be unset + * + */ + public function disconnectWorksheets() + { + $worksheet = NULL; + foreach($this->_workSheetCollection as $k => &$worksheet) { + $worksheet->disconnectCells(); + $this->_workSheetCollection[$k] = null; + } + unset($worksheet); + $this->_workSheetCollection = array(); + } + + /** + * Return the calculation engine for this worksheet + * + * @return PHPExcel_Calculation + */ + public function getCalculationEngine() + { + return $this->_calculationEngine; + } // function getCellCacheController() + + /** + * Get properties + * + * @return PHPExcel_DocumentProperties + */ + public function getProperties() + { + return $this->_properties; + } + + /** + * Set properties + * + * @param PHPExcel_DocumentProperties $pValue + */ + public function setProperties(PHPExcel_DocumentProperties $pValue) + { + $this->_properties = $pValue; + } + + /** + * Get security + * + * @return PHPExcel_DocumentSecurity + */ + public function getSecurity() + { + return $this->_security; + } + + /** + * Set security + * + * @param PHPExcel_DocumentSecurity $pValue + */ + public function setSecurity(PHPExcel_DocumentSecurity $pValue) + { + $this->_security = $pValue; + } + + /** + * Get active sheet + * + * @return PHPExcel_Worksheet + */ + public function getActiveSheet() + { + return $this->_workSheetCollection[$this->_activeSheetIndex]; + } + + /** + * Create sheet and add it to this workbook + * + * @param int|null $iSheetIndex Index where sheet should go (0,1,..., or null for last) + * @return PHPExcel_Worksheet + * @throws PHPExcel_Exception + */ + public function createSheet($iSheetIndex = NULL) + { + $newSheet = new PHPExcel_Worksheet($this); + $this->addSheet($newSheet, $iSheetIndex); + return $newSheet; + } + + /** + * Check if a sheet with a specified name already exists + * + * @param string $pSheetName Name of the worksheet to check + * @return boolean + */ + public function sheetNameExists($pSheetName) + { + return ($this->getSheetByName($pSheetName) !== NULL); + } + + /** + * Add sheet + * + * @param PHPExcel_Worksheet $pSheet + * @param int|null $iSheetIndex Index where sheet should go (0,1,..., or null for last) + * @return PHPExcel_Worksheet + * @throws PHPExcel_Exception + */ + public function addSheet(PHPExcel_Worksheet $pSheet, $iSheetIndex = NULL) + { + if ($this->sheetNameExists($pSheet->getTitle())) { + throw new PHPExcel_Exception( + "Workbook already contains a worksheet named '{$pSheet->getTitle()}'. Rename this worksheet first." + ); + } + + if($iSheetIndex === NULL) { + if ($this->_activeSheetIndex < 0) { + $this->_activeSheetIndex = 0; + } + $this->_workSheetCollection[] = $pSheet; + } else { + // Insert the sheet at the requested index + array_splice( + $this->_workSheetCollection, + $iSheetIndex, + 0, + array($pSheet) + ); + + // Adjust active sheet index if necessary + if ($this->_activeSheetIndex >= $iSheetIndex) { + ++$this->_activeSheetIndex; + } + } + + if ($pSheet->getParent() === null) { + $pSheet->rebindParent($this); + } + + return $pSheet; + } + + /** + * Remove sheet by index + * + * @param int $pIndex Active sheet index + * @throws PHPExcel_Exception + */ + public function removeSheetByIndex($pIndex = 0) + { + + $numSheets = count($this->_workSheetCollection); + + if ($pIndex > $numSheets - 1) { + throw new PHPExcel_Exception( + "You tried to remove a sheet by the out of bounds index: {$pIndex}. The actual number of sheets is {$numSheets}." + ); + } else { + array_splice($this->_workSheetCollection, $pIndex, 1); + } + // Adjust active sheet index if necessary + if (($this->_activeSheetIndex >= $pIndex) && + ($pIndex > count($this->_workSheetCollection) - 1)) { + --$this->_activeSheetIndex; + } + + } + + /** + * Get sheet by index + * + * @param int $pIndex Sheet index + * @return PHPExcel_Worksheet + * @throws PHPExcel_Exception + */ + public function getSheet($pIndex = 0) + { + + $numSheets = count($this->_workSheetCollection); + + if ($pIndex > $numSheets - 1) { + throw new PHPExcel_Exception( + "Your requested sheet index: {$pIndex} is out of bounds. The actual number of sheets is {$numSheets}." + ); + } else { + return $this->_workSheetCollection[$pIndex]; + } + } + + /** + * Get all sheets + * + * @return PHPExcel_Worksheet[] + */ + public function getAllSheets() + { + return $this->_workSheetCollection; + } + + /** + * Get sheet by name + * + * @param string $pName Sheet name + * @return PHPExcel_Worksheet + */ + public function getSheetByName($pName = '') + { + $worksheetCount = count($this->_workSheetCollection); + for ($i = 0; $i < $worksheetCount; ++$i) { + if ($this->_workSheetCollection[$i]->getTitle() === $pName) { + return $this->_workSheetCollection[$i]; + } + } + + return NULL; + } + + /** + * Get index for sheet + * + * @param PHPExcel_Worksheet $pSheet + * @return Sheet index + * @throws PHPExcel_Exception + */ + public function getIndex(PHPExcel_Worksheet $pSheet) + { + foreach ($this->_workSheetCollection as $key => $value) { + if ($value->getHashCode() == $pSheet->getHashCode()) { + return $key; + } + } + + throw new PHPExcel_Exception("Sheet does not exist."); + } + + /** + * Set index for sheet by sheet name. + * + * @param string $sheetName Sheet name to modify index for + * @param int $newIndex New index for the sheet + * @return New sheet index + * @throws PHPExcel_Exception + */ + public function setIndexByName($sheetName, $newIndex) + { + $oldIndex = $this->getIndex($this->getSheetByName($sheetName)); + $pSheet = array_splice( + $this->_workSheetCollection, + $oldIndex, + 1 + ); + array_splice( + $this->_workSheetCollection, + $newIndex, + 0, + $pSheet + ); + return $newIndex; + } + + /** + * Get sheet count + * + * @return int + */ + public function getSheetCount() + { + return count($this->_workSheetCollection); + } + + /** + * Get active sheet index + * + * @return int Active sheet index + */ + public function getActiveSheetIndex() + { + return $this->_activeSheetIndex; + } + + /** + * Set active sheet index + * + * @param int $pIndex Active sheet index + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setActiveSheetIndex($pIndex = 0) + { + $numSheets = count($this->_workSheetCollection); + + if ($pIndex > $numSheets - 1) { + throw new PHPExcel_Exception( + "You tried to set a sheet active by the out of bounds index: {$pIndex}. The actual number of sheets is {$numSheets}." + ); + } else { + $this->_activeSheetIndex = $pIndex; + } + return $this->getActiveSheet(); + } + + /** + * Set active sheet index by name + * + * @param string $pValue Sheet title + * @return PHPExcel_Worksheet + * @throws PHPExcel_Exception + */ + public function setActiveSheetIndexByName($pValue = '') + { + if (($worksheet = $this->getSheetByName($pValue)) instanceof PHPExcel_Worksheet) { + $this->setActiveSheetIndex($this->getIndex($worksheet)); + return $worksheet; + } + + throw new PHPExcel_Exception('Workbook does not contain sheet:' . $pValue); + } + + /** + * Get sheet names + * + * @return string[] + */ + public function getSheetNames() + { + $returnValue = array(); + $worksheetCount = $this->getSheetCount(); + for ($i = 0; $i < $worksheetCount; ++$i) { + $returnValue[] = $this->getSheet($i)->getTitle(); + } + + return $returnValue; + } + + /** + * Add external sheet + * + * @param PHPExcel_Worksheet $pSheet External sheet to add + * @param int|null $iSheetIndex Index where sheet should go (0,1,..., or null for last) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function addExternalSheet(PHPExcel_Worksheet $pSheet, $iSheetIndex = null) { + if ($this->sheetNameExists($pSheet->getTitle())) { + throw new PHPExcel_Exception("Workbook already contains a worksheet named '{$pSheet->getTitle()}'. Rename the external sheet first."); + } + + // count how many cellXfs there are in this workbook currently, we will need this below + $countCellXfs = count($this->_cellXfCollection); + + // copy all the shared cellXfs from the external workbook and append them to the current + foreach ($pSheet->getParent()->getCellXfCollection() as $cellXf) { + $this->addCellXf(clone $cellXf); + } + + // move sheet to this workbook + $pSheet->rebindParent($this); + + // update the cellXfs + foreach ($pSheet->getCellCollection(false) as $cellID) { + $cell = $pSheet->getCell($cellID); + $cell->setXfIndex( $cell->getXfIndex() + $countCellXfs ); + } + + return $this->addSheet($pSheet, $iSheetIndex); + } + + /** + * Get named ranges + * + * @return PHPExcel_NamedRange[] + */ + public function getNamedRanges() { + return $this->_namedRanges; + } + + /** + * Add named range + * + * @param PHPExcel_NamedRange $namedRange + * @return PHPExcel + */ + public function addNamedRange(PHPExcel_NamedRange $namedRange) { + if ($namedRange->getScope() == null) { + // global scope + $this->_namedRanges[$namedRange->getName()] = $namedRange; + } else { + // local scope + $this->_namedRanges[$namedRange->getScope()->getTitle().'!'.$namedRange->getName()] = $namedRange; + } + return true; + } + + /** + * Get named range + * + * @param string $namedRange + * @param PHPExcel_Worksheet|null $pSheet Scope. Use null for global scope + * @return PHPExcel_NamedRange|null + */ + public function getNamedRange($namedRange, PHPExcel_Worksheet $pSheet = null) { + $returnValue = null; + + if ($namedRange != '' && ($namedRange !== NULL)) { + // first look for global defined name + if (isset($this->_namedRanges[$namedRange])) { + $returnValue = $this->_namedRanges[$namedRange]; + } + + // then look for local defined name (has priority over global defined name if both names exist) + if (($pSheet !== NULL) && isset($this->_namedRanges[$pSheet->getTitle() . '!' . $namedRange])) { + $returnValue = $this->_namedRanges[$pSheet->getTitle() . '!' . $namedRange]; + } + } + + return $returnValue; + } + + /** + * Remove named range + * + * @param string $namedRange + * @param PHPExcel_Worksheet|null $pSheet Scope: use null for global scope. + * @return PHPExcel + */ + public function removeNamedRange($namedRange, PHPExcel_Worksheet $pSheet = null) { + if ($pSheet === NULL) { + if (isset($this->_namedRanges[$namedRange])) { + unset($this->_namedRanges[$namedRange]); + } + } else { + if (isset($this->_namedRanges[$pSheet->getTitle() . '!' . $namedRange])) { + unset($this->_namedRanges[$pSheet->getTitle() . '!' . $namedRange]); + } + } + return $this; + } + + /** + * Get worksheet iterator + * + * @return PHPExcel_WorksheetIterator + */ + public function getWorksheetIterator() { + return new PHPExcel_WorksheetIterator($this); + } + + /** + * Copy workbook (!= clone!) + * + * @return PHPExcel + */ + public function copy() { + $copied = clone $this; + + $worksheetCount = count($this->_workSheetCollection); + for ($i = 0; $i < $worksheetCount; ++$i) { + $this->_workSheetCollection[$i] = $this->_workSheetCollection[$i]->copy(); + $this->_workSheetCollection[$i]->rebindParent($this); + } + + return $copied; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + foreach($this as $key => $val) { + if (is_object($val) || (is_array($val))) { + $this->{$key} = unserialize(serialize($val)); + } + } + } + + /** + * Get the workbook collection of cellXfs + * + * @return PHPExcel_Style[] + */ + public function getCellXfCollection() + { + return $this->_cellXfCollection; + } + + /** + * Get cellXf by index + * + * @param int $pIndex + * @return PHPExcel_Style + */ + public function getCellXfByIndex($pIndex = 0) + { + return $this->_cellXfCollection[$pIndex]; + } + + /** + * Get cellXf by hash code + * + * @param string $pValue + * @return PHPExcel_Style|false + */ + public function getCellXfByHashCode($pValue = '') + { + foreach ($this->_cellXfCollection as $cellXf) { + if ($cellXf->getHashCode() == $pValue) { + return $cellXf; + } + } + return false; + } + + /** + * Check if style exists in style collection + * + * @param PHPExcel_Style $pCellStyle + * @return boolean + */ + public function cellXfExists($pCellStyle = null) + { + return in_array($pCellStyle, $this->_cellXfCollection, true); + } + + /** + * Get default style + * + * @return PHPExcel_Style + * @throws PHPExcel_Exception + */ + public function getDefaultStyle() + { + if (isset($this->_cellXfCollection[0])) { + return $this->_cellXfCollection[0]; + } + throw new PHPExcel_Exception('No default style found for this workbook'); + } + + /** + * Add a cellXf to the workbook + * + * @param PHPExcel_Style $style + */ + public function addCellXf(PHPExcel_Style $style) + { + $this->_cellXfCollection[] = $style; + $style->setIndex(count($this->_cellXfCollection) - 1); + } + + /** + * Remove cellXf by index. It is ensured that all cells get their xf index updated. + * + * @param int $pIndex Index to cellXf + * @throws PHPExcel_Exception + */ + public function removeCellXfByIndex($pIndex = 0) + { + if ($pIndex > count($this->_cellXfCollection) - 1) { + throw new PHPExcel_Exception("CellXf index is out of bounds."); + } else { + // first remove the cellXf + array_splice($this->_cellXfCollection, $pIndex, 1); + + // then update cellXf indexes for cells + foreach ($this->_workSheetCollection as $worksheet) { + foreach ($worksheet->getCellCollection(false) as $cellID) { + $cell = $worksheet->getCell($cellID); + $xfIndex = $cell->getXfIndex(); + if ($xfIndex > $pIndex ) { + // decrease xf index by 1 + $cell->setXfIndex($xfIndex - 1); + } else if ($xfIndex == $pIndex) { + // set to default xf index 0 + $cell->setXfIndex(0); + } + } + } + } + } + + /** + * Get the cellXf supervisor + * + * @return PHPExcel_Style + */ + public function getCellXfSupervisor() + { + return $this->_cellXfSupervisor; + } + + /** + * Get the workbook collection of cellStyleXfs + * + * @return PHPExcel_Style[] + */ + public function getCellStyleXfCollection() + { + return $this->_cellStyleXfCollection; + } + + /** + * Get cellStyleXf by index + * + * @param int $pIndex + * @return PHPExcel_Style + */ + public function getCellStyleXfByIndex($pIndex = 0) + { + return $this->_cellStyleXfCollection[$pIndex]; + } + + /** + * Get cellStyleXf by hash code + * + * @param string $pValue + * @return PHPExcel_Style|false + */ + public function getCellStyleXfByHashCode($pValue = '') + { + foreach ($this->_cellXfStyleCollection as $cellStyleXf) { + if ($cellStyleXf->getHashCode() == $pValue) { + return $cellStyleXf; + } + } + return false; + } + + /** + * Add a cellStyleXf to the workbook + * + * @param PHPExcel_Style $pStyle + */ + public function addCellStyleXf(PHPExcel_Style $pStyle) + { + $this->_cellStyleXfCollection[] = $pStyle; + $pStyle->setIndex(count($this->_cellStyleXfCollection) - 1); + } + + /** + * Remove cellStyleXf by index + * + * @param int $pIndex + * @throws PHPExcel_Exception + */ + public function removeCellStyleXfByIndex($pIndex = 0) + { + if ($pIndex > count($this->_cellStyleXfCollection) - 1) { + throw new PHPExcel_Exception("CellStyleXf index is out of bounds."); + } else { + array_splice($this->_cellStyleXfCollection, $pIndex, 1); + } + } + + /** + * Eliminate all unneeded cellXf and afterwards update the xfIndex for all cells + * and columns in the workbook + */ + public function garbageCollect() + { + // how many references are there to each cellXf ? + $countReferencesCellXf = array(); + foreach ($this->_cellXfCollection as $index => $cellXf) { + $countReferencesCellXf[$index] = 0; + } + + foreach ($this->getWorksheetIterator() as $sheet) { + + // from cells + foreach ($sheet->getCellCollection(false) as $cellID) { + $cell = $sheet->getCell($cellID); + ++$countReferencesCellXf[$cell->getXfIndex()]; + } + + // from row dimensions + foreach ($sheet->getRowDimensions() as $rowDimension) { + if ($rowDimension->getXfIndex() !== null) { + ++$countReferencesCellXf[$rowDimension->getXfIndex()]; + } + } + + // from column dimensions + foreach ($sheet->getColumnDimensions() as $columnDimension) { + ++$countReferencesCellXf[$columnDimension->getXfIndex()]; + } + } + + // remove cellXfs without references and create mapping so we can update xfIndex + // for all cells and columns + $countNeededCellXfs = 0; + foreach ($this->_cellXfCollection as $index => $cellXf) { + if ($countReferencesCellXf[$index] > 0 || $index == 0) { // we must never remove the first cellXf + ++$countNeededCellXfs; + } else { + unset($this->_cellXfCollection[$index]); + } + $map[$index] = $countNeededCellXfs - 1; + } + $this->_cellXfCollection = array_values($this->_cellXfCollection); + + // update the index for all cellXfs + foreach ($this->_cellXfCollection as $i => $cellXf) { + $cellXf->setIndex($i); + } + + // make sure there is always at least one cellXf (there should be) + if (empty($this->_cellXfCollection)) { + $this->_cellXfCollection[] = new PHPExcel_Style(); + } + + // update the xfIndex for all cells, row dimensions, column dimensions + foreach ($this->getWorksheetIterator() as $sheet) { + + // for all cells + foreach ($sheet->getCellCollection(false) as $cellID) { + $cell = $sheet->getCell($cellID); + $cell->setXfIndex( $map[$cell->getXfIndex()] ); + } + + // for all row dimensions + foreach ($sheet->getRowDimensions() as $rowDimension) { + if ($rowDimension->getXfIndex() !== null) { + $rowDimension->setXfIndex( $map[$rowDimension->getXfIndex()] ); + } + } + + // for all column dimensions + foreach ($sheet->getColumnDimensions() as $columnDimension) { + $columnDimension->setXfIndex( $map[$columnDimension->getXfIndex()] ); + } + + // also do garbage collection for all the sheets + $sheet->garbageCollect(); + } + } + + /** + * Return the unique ID value assigned to this spreadsheet workbook + * + * @return string + */ + public function getID() { + return $this->_uniqueID; + } + +} diff --git a/PHPExcel/Autoloader.php b/PHPExcel/Autoloader.php new file mode 100644 index 0000000..a36dfcc --- /dev/null +++ b/PHPExcel/Autoloader.php @@ -0,0 +1,85 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + if (!apc_store($this->_cachePrefix.$this->_currentObjectID.'.cache',serialize($this->_currentObject),$this->_cacheTime)) { + $this->__destruct(); + throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in APC'); + } + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @access public + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + $this->_cellCache[$pCoord] = true; + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? + * + * @access public + * @param string $pCoord Coordinate address of the cell to check + * @return void + * @return boolean + */ + public function isDataSet($pCoord) { + // Check if the requested entry is the current object, or exists in the cache + if (parent::isDataSet($pCoord)) { + if ($this->_currentObjectID == $pCoord) { + return true; + } + // Check if the requested entry still exists in apc + $success = apc_fetch($this->_cachePrefix.$pCoord.'.cache'); + if ($success === FALSE) { + // Entry no longer exists in APC, so clear it from the cache array + parent::deleteCacheData($pCoord); + throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache'); + } + return true; + } + return false; + } // function isDataSet() + + + /** + * Get cell at a specific coordinate + * + * @access public + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + if (parent::isDataSet($pCoord)) { + $obj = apc_fetch($this->_cachePrefix.$pCoord.'.cache'); + if ($obj === FALSE) { + // Entry no longer exists in APC, so clear it from the cache array + parent::deleteCacheData($pCoord); + throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache'); + } + } else { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + $this->_currentObject = unserialize($obj); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Delete a cell in cache identified by coordinate address + * + * @access public + * @param string $pCoord Coordinate address of the cell to delete + * @throws PHPExcel_Exception + */ + public function deleteCacheData($pCoord) { + // Delete the entry from APC + apc_delete($this->_cachePrefix.$pCoord.'.cache'); + + // Delete the entry from our cell address array + parent::deleteCacheData($pCoord); + } // function deleteCacheData() + + + /** + * Clone the cell collection + * + * @access public + * @param PHPExcel_Worksheet $parent The new worksheet + * @throws PHPExcel_Exception + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + parent::copyCellCollection($parent); + // Get a new id for the new file name + $baseUnique = $this->_getUniqueID(); + $newCachePrefix = substr(md5($baseUnique),0,8).'.'; + $cacheList = $this->getCellList(); + foreach($cacheList as $cellID) { + if ($cellID != $this->_currentObjectID) { + $obj = apc_fetch($this->_cachePrefix.$cellID.'.cache'); + if ($obj === FALSE) { + // Entry no longer exists in APC, so clear it from the cache array + parent::deleteCacheData($cellID); + throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in APC'); + } + if (!apc_store($newCachePrefix.$cellID.'.cache',$obj,$this->_cacheTime)) { + $this->__destruct(); + throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in APC'); + } + } + } + $this->_cachePrefix = $newCachePrefix; + } // function copyCellCollection() + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if ($this->_currentObject !== NULL) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + + // Flush the APC cache + $this->__destruct(); + + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + } // function unsetWorksheetCells() + + + /** + * Initialise this new cell collection + * + * @param PHPExcel_Worksheet $parent The worksheet for this cell collection + * @param array of mixed $arguments Additional initialisation arguments + */ + public function __construct(PHPExcel_Worksheet $parent, $arguments) { + $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; + + if ($this->_cachePrefix === NULL) { + $baseUnique = $this->_getUniqueID(); + $this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; + $this->_cacheTime = $cacheTime; + + parent::__construct($parent); + } + } // function __construct() + + + /** + * Destroy this cell collection + */ + public function __destruct() { + $cacheList = $this->getCellList(); + foreach($cacheList as $cellID) { + apc_delete($this->_cachePrefix.$cellID.'.cache'); + } + } // function __destruct() + + + /** + * Identify whether the caching method is currently available + * Some methods are dependent on the availability of certain extensions being enabled in the PHP build + * + * @return boolean + */ + public static function cacheMethodIsAvailable() { + if (!function_exists('apc_store')) { + return FALSE; + } + if (apc_sma_info() === FALSE) { + return FALSE; + } + + return TRUE; + } + +} diff --git a/PHPExcel/CachedObjectStorage/CacheBase.php b/PHPExcel/CachedObjectStorage/CacheBase.php new file mode 100644 index 0000000..84a0416 --- /dev/null +++ b/PHPExcel/CachedObjectStorage/CacheBase.php @@ -0,0 +1,347 @@ +_parent = $parent; + } // function __construct() + + + /** + * Return the parent worksheet for this cell collection + * + * @return PHPExcel_Worksheet + */ + public function getParent() + { + return $this->_parent; + } + + /** + * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? + * + * @param string $pCoord Coordinate address of the cell to check + * @return boolean + */ + public function isDataSet($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return true; + } + // Check if the requested entry exists in the cache + return isset($this->_cellCache[$pCoord]); + } // function isDataSet() + + + /** + * Move a cell object from one address to another + * + * @param string $fromAddress Current address of the cell to move + * @param string $toAddress Destination address of the cell to move + * @return boolean + */ + public function moveCell($fromAddress, $toAddress) { + if ($fromAddress === $this->_currentObjectID) { + $this->_currentObjectID = $toAddress; + } + $this->_currentCellIsDirty = true; + if (isset($this->_cellCache[$fromAddress])) { + $this->_cellCache[$toAddress] = &$this->_cellCache[$fromAddress]; + unset($this->_cellCache[$fromAddress]); + } + + return TRUE; + } // function moveCell() + + + /** + * Add or Update a cell in cache + * + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function updateCacheData(PHPExcel_Cell $cell) { + return $this->addCacheData($cell->getCoordinate(),$cell); + } // function updateCacheData() + + + /** + * Delete a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to delete + * @throws PHPExcel_Exception + */ + public function deleteCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + $this->_currentObject->detach(); + $this->_currentObjectID = $this->_currentObject = null; + } + + if (is_object($this->_cellCache[$pCoord])) { + $this->_cellCache[$pCoord]->detach(); + unset($this->_cellCache[$pCoord]); + } + $this->_currentCellIsDirty = false; + } // function deleteCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + return array_keys($this->_cellCache); + } // function getCellList() + + + /** + * Sort the list of all cell addresses currently held in cache by row and column + * + * @return void + */ + public function getSortedCellList() { + $sortKeys = array(); + foreach ($this->getCellList() as $coord) { + sscanf($coord,'%[A-Z]%d', $column, $row); + $sortKeys[sprintf('%09d%3s',$row,$column)] = $coord; + } + ksort($sortKeys); + + return array_values($sortKeys); + } // function sortCellList() + + + + /** + * Get highest worksheet column and highest row that have cell records + * + * @return array Highest column name and highest row number + */ + public function getHighestRowAndColumn() + { + // Lookup highest column and highest row + $col = array('A' => '1A'); + $row = array(1); + foreach ($this->getCellList() as $coord) { + sscanf($coord,'%[A-Z]%d', $c, $r); + $row[$r] = $r; + $col[$c] = strlen($c).$c; + } + if (!empty($row)) { + // Determine highest column and row + $highestRow = max($row); + $highestColumn = substr(max($col),1); + } + + return array( 'row' => $highestRow, + 'column' => $highestColumn + ); + } + + + /** + * Return the cell address of the currently active cell object + * + * @return string + */ + public function getCurrentAddress() + { + return $this->_currentObjectID; + } + + /** + * Return the column address of the currently active cell object + * + * @return string + */ + public function getCurrentColumn() + { + sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row); + return $column; + } + + /** + * Return the row address of the currently active cell object + * + * @return string + */ + public function getCurrentRow() + { + sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row); + return $row; + } + + /** + * Get highest worksheet column + * + * @param string $row Return the highest column for the specified row, + * or the highest column of any row if no row number is passed + * @return string Highest column name + */ + public function getHighestColumn($row = null) + { + if ($row == null) { + $colRow = $this->getHighestRowAndColumn(); + return $colRow['column']; + } + + $columnList = array(1); + foreach ($this->getCellList() as $coord) { + sscanf($coord,'%[A-Z]%d', $c, $r); + if ($r != $row) { + continue; + } + $columnList[] = PHPExcel_Cell::columnIndexFromString($c); + } + return PHPExcel_Cell::stringFromColumnIndex(max($columnList) - 1); + } + + /** + * Get highest worksheet row + * + * @param string $column Return the highest row for the specified column, + * or the highest row of any column if no column letter is passed + * @return int Highest row number + */ + public function getHighestRow($column = null) + { + if ($column == null) { + $colRow = $this->getHighestRowAndColumn(); + return $colRow['row']; + } + + $rowList = array(0); + foreach ($this->getCellList() as $coord) { + sscanf($coord,'%[A-Z]%d', $c, $r); + if ($c != $column) { + continue; + } + $rowList[] = $r; + } + + return max($rowList); + } + + + /** + * Generate a unique ID for cache referencing + * + * @return string Unique Reference + */ + protected function _getUniqueID() { + if (function_exists('posix_getpid')) { + $baseUnique = posix_getpid(); + } else { + $baseUnique = mt_rand(); + } + return uniqid($baseUnique,true); + } + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + $this->_currentCellIsDirty; + $this->_storeData(); + + $this->_parent = $parent; + if (($this->_currentObject !== NULL) && (is_object($this->_currentObject))) { + $this->_currentObject->attach($this); + } + } // function copyCellCollection() + + + /** + * Identify whether the caching method is currently available + * Some methods are dependent on the availability of certain extensions being enabled in the PHP build + * + * @return boolean + */ + public static function cacheMethodIsAvailable() { + return true; + } + +} diff --git a/PHPExcel/CachedObjectStorage/DiscISAM.php b/PHPExcel/CachedObjectStorage/DiscISAM.php new file mode 100644 index 0000000..492abea --- /dev/null +++ b/PHPExcel/CachedObjectStorage/DiscISAM.php @@ -0,0 +1,219 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + fseek($this->_fileHandle,0,SEEK_END); + $offset = ftell($this->_fileHandle); + fwrite($this->_fileHandle, serialize($this->_currentObject)); + $this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset, + 'sz' => ftell($this->_fileHandle) - $offset + ); + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + if (!isset($this->_cellCache[$pCoord])) { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']); + $this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz'])); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + parent::copyCellCollection($parent); + // Get a new id for the new file name + $baseUnique = $this->_getUniqueID(); + $newFileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache'; + // Copy the existing cell cache file + copy ($this->_fileName,$newFileName); + $this->_fileName = $newFileName; + // Open the copied cell cache file + $this->_fileHandle = fopen($this->_fileName,'a+'); + } // function copyCellCollection() + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + + // Close down the temporary cache file + $this->__destruct(); + } // function unsetWorksheetCells() + + + /** + * Initialise this new cell collection + * + * @param PHPExcel_Worksheet $parent The worksheet for this cell collection + * @param array of mixed $arguments Additional initialisation arguments + */ + public function __construct(PHPExcel_Worksheet $parent, $arguments) { + $this->_cacheDirectory = ((isset($arguments['dir'])) && ($arguments['dir'] !== NULL)) + ? $arguments['dir'] + : PHPExcel_Shared_File::sys_get_temp_dir(); + + parent::__construct($parent); + if (is_null($this->_fileHandle)) { + $baseUnique = $this->_getUniqueID(); + $this->_fileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache'; + $this->_fileHandle = fopen($this->_fileName,'a+'); + } + } // function __construct() + + + /** + * Destroy this cell collection + */ + public function __destruct() { + if (!is_null($this->_fileHandle)) { + fclose($this->_fileHandle); + unlink($this->_fileName); + } + $this->_fileHandle = null; + } // function __destruct() + +} diff --git a/PHPExcel/CachedObjectStorage/ICache.php b/PHPExcel/CachedObjectStorage/ICache.php new file mode 100644 index 0000000..c3f2c14 --- /dev/null +++ b/PHPExcel/CachedObjectStorage/ICache.php @@ -0,0 +1,112 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + $this->_cellCache[$this->_currentObjectID] = igbinary_serialize($this->_currentObject); + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + if (!isset($this->_cellCache[$pCoord])) { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + $this->_currentObject = igbinary_unserialize($this->_cellCache[$pCoord]); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + } // function unsetWorksheetCells() + + + /** + * Identify whether the caching method is currently available + * Some methods are dependent on the availability of certain extensions being enabled in the PHP build + * + * @return boolean + */ + public static function cacheMethodIsAvailable() { + if (!function_exists('igbinary_serialize')) { + return false; + } + + return true; + } + +} diff --git a/PHPExcel/CachedObjectStorage/Memcache.php b/PHPExcel/CachedObjectStorage/Memcache.php new file mode 100644 index 0000000..9061a31 --- /dev/null +++ b/PHPExcel/CachedObjectStorage/Memcache.php @@ -0,0 +1,312 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + $obj = serialize($this->_currentObject); + if (!$this->_memcache->replace($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) { + if (!$this->_memcache->add($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) { + $this->__destruct(); + throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in MemCache'); + } + } + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + $this->_cellCache[$pCoord] = true; + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? + * + * @param string $pCoord Coordinate address of the cell to check + * @return void + * @return boolean + */ + public function isDataSet($pCoord) { + // Check if the requested entry is the current object, or exists in the cache + if (parent::isDataSet($pCoord)) { + if ($this->_currentObjectID == $pCoord) { + return true; + } + // Check if the requested entry still exists in Memcache + $success = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache'); + if ($success === false) { + // Entry no longer exists in Memcache, so clear it from the cache array + parent::deleteCacheData($pCoord); + throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in MemCache'); + } + return true; + } + return false; + } // function isDataSet() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + if (parent::isDataSet($pCoord)) { + $obj = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache'); + if ($obj === false) { + // Entry no longer exists in Memcache, so clear it from the cache array + parent::deleteCacheData($pCoord); + throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in MemCache'); + } + } else { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + $this->_currentObject = unserialize($obj); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Delete a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to delete + * @throws PHPExcel_Exception + */ + public function deleteCacheData($pCoord) { + // Delete the entry from Memcache + $this->_memcache->delete($this->_cachePrefix.$pCoord.'.cache'); + + // Delete the entry from our cell address array + parent::deleteCacheData($pCoord); + } // function deleteCacheData() + + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + parent::copyCellCollection($parent); + // Get a new id for the new file name + $baseUnique = $this->_getUniqueID(); + $newCachePrefix = substr(md5($baseUnique),0,8).'.'; + $cacheList = $this->getCellList(); + foreach($cacheList as $cellID) { + if ($cellID != $this->_currentObjectID) { + $obj = $this->_memcache->get($this->_cachePrefix.$cellID.'.cache'); + if ($obj === false) { + // Entry no longer exists in Memcache, so clear it from the cache array + parent::deleteCacheData($cellID); + throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in MemCache'); + } + if (!$this->_memcache->add($newCachePrefix.$cellID.'.cache',$obj,NULL,$this->_cacheTime)) { + $this->__destruct(); + throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in MemCache'); + } + } + } + $this->_cachePrefix = $newCachePrefix; + } // function copyCellCollection() + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + + // Flush the Memcache cache + $this->__destruct(); + + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + } // function unsetWorksheetCells() + + + /** + * Initialise this new cell collection + * + * @param PHPExcel_Worksheet $parent The worksheet for this cell collection + * @param array of mixed $arguments Additional initialisation arguments + */ + public function __construct(PHPExcel_Worksheet $parent, $arguments) { + $memcacheServer = (isset($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost'; + $memcachePort = (isset($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211; + $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; + + if (is_null($this->_cachePrefix)) { + $baseUnique = $this->_getUniqueID(); + $this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; + + // Set a new Memcache object and connect to the Memcache server + $this->_memcache = new Memcache(); + if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) { + throw new PHPExcel_Exception('Could not connect to MemCache server at '.$memcacheServer.':'.$memcachePort); + } + $this->_cacheTime = $cacheTime; + + parent::__construct($parent); + } + } // function __construct() + + + /** + * Memcache error handler + * + * @param string $host Memcache server + * @param integer $port Memcache port + * @throws PHPExcel_Exception + */ + public function failureCallback($host, $port) { + throw new PHPExcel_Exception('memcache '.$host.':'.$port.' failed'); + } + + + /** + * Destroy this cell collection + */ + public function __destruct() { + $cacheList = $this->getCellList(); + foreach($cacheList as $cellID) { + $this->_memcache->delete($this->_cachePrefix.$cellID.'.cache'); + } + } // function __destruct() + + /** + * Identify whether the caching method is currently available + * Some methods are dependent on the availability of certain extensions being enabled in the PHP build + * + * @return boolean + */ + public static function cacheMethodIsAvailable() { + if (!function_exists('memcache_add')) { + return false; + } + + return true; + } + +} diff --git a/PHPExcel/CachedObjectStorage/Memory.php b/PHPExcel/CachedObjectStorage/Memory.php new file mode 100644 index 0000000..20cd59f --- /dev/null +++ b/PHPExcel/CachedObjectStorage/Memory.php @@ -0,0 +1,125 @@ +_cellCache[$pCoord] = $cell; + + // Set current entry to the new/updated entry + $this->_currentObjectID = $pCoord; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + // Check if the entry that has been requested actually exists + if (!isset($this->_cellCache[$pCoord])) { + $this->_currentObjectID = NULL; + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + + // Return requested entry + return $this->_cellCache[$pCoord]; + } // function getCacheData() + + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + parent::copyCellCollection($parent); + + $newCollection = array(); + foreach($this->_cellCache as $k => &$cell) { + $newCollection[$k] = clone $cell; + $newCollection[$k]->attach($this); + } + + $this->_cellCache = $newCollection; + } + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + // Because cells are all stored as intact objects in memory, we need to detach each one from the parent + foreach($this->_cellCache as $k => &$cell) { + $cell->detach(); + $this->_cellCache[$k] = null; + } + unset($cell); + + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + } // function unsetWorksheetCells() + +} diff --git a/PHPExcel/CachedObjectStorage/MemoryGZip.php b/PHPExcel/CachedObjectStorage/MemoryGZip.php new file mode 100644 index 0000000..692c1bf --- /dev/null +++ b/PHPExcel/CachedObjectStorage/MemoryGZip.php @@ -0,0 +1,137 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + $this->_cellCache[$this->_currentObjectID] = gzdeflate(serialize($this->_currentObject)); + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + if (!isset($this->_cellCache[$pCoord])) { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + $this->_currentObject = unserialize(gzinflate($this->_cellCache[$pCoord])); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + } // function unsetWorksheetCells() + +} diff --git a/PHPExcel/CachedObjectStorage/MemorySerialized.php b/PHPExcel/CachedObjectStorage/MemorySerialized.php new file mode 100644 index 0000000..fdd021a --- /dev/null +++ b/PHPExcel/CachedObjectStorage/MemorySerialized.php @@ -0,0 +1,137 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + $this->_cellCache[$this->_currentObjectID] = serialize($this->_currentObject); + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + if (!isset($this->_cellCache[$pCoord])) { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + $this->_currentObject = unserialize($this->_cellCache[$pCoord]); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + } // function unsetWorksheetCells() + +} diff --git a/PHPExcel/CachedObjectStorage/PHPTemp.php b/PHPExcel/CachedObjectStorage/PHPTemp.php new file mode 100644 index 0000000..b00c19b --- /dev/null +++ b/PHPExcel/CachedObjectStorage/PHPTemp.php @@ -0,0 +1,206 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + fseek($this->_fileHandle,0,SEEK_END); + $offset = ftell($this->_fileHandle); + fwrite($this->_fileHandle, serialize($this->_currentObject)); + $this->_cellCache[$this->_currentObjectID] = array('ptr' => $offset, + 'sz' => ftell($this->_fileHandle) - $offset + ); + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + if (!isset($this->_cellCache[$pCoord])) { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']); + $this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz'])); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + parent::copyCellCollection($parent); + // Open a new stream for the cell cache data + $newFileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+'); + // Copy the existing cell cache data to the new stream + fseek($this->_fileHandle,0); + while (!feof($this->_fileHandle)) { + fwrite($newFileHandle,fread($this->_fileHandle, 1024)); + } + $this->_fileHandle = $newFileHandle; + } // function copyCellCollection() + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + + // Close down the php://temp file + $this->__destruct(); + } // function unsetWorksheetCells() + + + /** + * Initialise this new cell collection + * + * @param PHPExcel_Worksheet $parent The worksheet for this cell collection + * @param array of mixed $arguments Additional initialisation arguments + */ + public function __construct(PHPExcel_Worksheet $parent, $arguments) { + $this->_memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB'; + + parent::__construct($parent); + if (is_null($this->_fileHandle)) { + $this->_fileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+'); + } + } // function __construct() + + + /** + * Destroy this cell collection + */ + public function __destruct() { + if (!is_null($this->_fileHandle)) { + fclose($this->_fileHandle); + } + $this->_fileHandle = null; + } // function __destruct() + +} diff --git a/PHPExcel/CachedObjectStorage/SQLite.php b/PHPExcel/CachedObjectStorage/SQLite.php new file mode 100644 index 0000000..75b99c6 --- /dev/null +++ b/PHPExcel/CachedObjectStorage/SQLite.php @@ -0,0 +1,306 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + if (!$this->_DBHandle->queryExec("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES('".$this->_currentObjectID."','".sqlite_escape_string(serialize($this->_currentObject))."')")) + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + $query = "SELECT value FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'"; + $cellResultSet = $this->_DBHandle->query($query,SQLITE_ASSOC); + if ($cellResultSet === false) { + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + } elseif ($cellResultSet->numRows() == 0) { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + + $cellResult = $cellResultSet->fetchSingle(); + $this->_currentObject = unserialize($cellResult); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Is a value set for an indexed cell? + * + * @param string $pCoord Coordinate address of the cell to check + * @return boolean + */ + public function isDataSet($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return true; + } + + // Check if the requested entry exists in the cache + $query = "SELECT id FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'"; + $cellResultSet = $this->_DBHandle->query($query,SQLITE_ASSOC); + if ($cellResultSet === false) { + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + } elseif ($cellResultSet->numRows() == 0) { + // Return null if requested entry doesn't exist in cache + return false; + } + return true; + } // function isDataSet() + + + /** + * Delete a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to delete + * @throws PHPExcel_Exception + */ + public function deleteCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + $this->_currentObject->detach(); + $this->_currentObjectID = $this->_currentObject = null; + } + + // Check if the requested entry exists in the cache + $query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'"; + if (!$this->_DBHandle->queryExec($query)) + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + + $this->_currentCellIsDirty = false; + } // function deleteCacheData() + + + /** + * Move a cell object from one address to another + * + * @param string $fromAddress Current address of the cell to move + * @param string $toAddress Destination address of the cell to move + * @return boolean + */ + public function moveCell($fromAddress, $toAddress) { + if ($fromAddress === $this->_currentObjectID) { + $this->_currentObjectID = $toAddress; + } + + $query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$toAddress."'"; + $result = $this->_DBHandle->exec($query); + if ($result === false) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + + $query = "UPDATE kvp_".$this->_TableName." SET id='".$toAddress."' WHERE id='".$fromAddress."'"; + $result = $this->_DBHandle->exec($query); + if ($result === false) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + + return TRUE; + } // function moveCell() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + $query = "SELECT id FROM kvp_".$this->_TableName; + $cellIdsResult = $this->_DBHandle->unbufferedQuery($query,SQLITE_ASSOC); + if ($cellIdsResult === false) + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + + $cellKeys = array(); + foreach($cellIdsResult as $row) { + $cellKeys[] = $row['id']; + } + + return $cellKeys; + } // function getCellList() + + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + $this->_currentCellIsDirty; + $this->_storeData(); + + // Get a new id for the new table name + $tableName = str_replace('.','_',$this->_getUniqueID()); + if (!$this->_DBHandle->queryExec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB) + AS SELECT * FROM kvp_'.$this->_TableName)) + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + + // Copy the existing cell cache file + $this->_TableName = $tableName; + } // function copyCellCollection() + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + + // Close down the temporary cache file + $this->__destruct(); + } // function unsetWorksheetCells() + + + /** + * Initialise this new cell collection + * + * @param PHPExcel_Worksheet $parent The worksheet for this cell collection + */ + public function __construct(PHPExcel_Worksheet $parent) { + parent::__construct($parent); + if (is_null($this->_DBHandle)) { + $this->_TableName = str_replace('.','_',$this->_getUniqueID()); + $_DBName = ':memory:'; + + $this->_DBHandle = new SQLiteDatabase($_DBName); + if ($this->_DBHandle === false) + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + if (!$this->_DBHandle->queryExec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) + throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError())); + } + } // function __construct() + + + /** + * Destroy this cell collection + */ + public function __destruct() { + if (!is_null($this->_DBHandle)) { + $this->_DBHandle->queryExec('DROP TABLE kvp_'.$this->_TableName); + } + $this->_DBHandle = null; + } // function __destruct() + + + /** + * Identify whether the caching method is currently available + * Some methods are dependent on the availability of certain extensions being enabled in the PHP build + * + * @return boolean + */ + public static function cacheMethodIsAvailable() { + if (!function_exists('sqlite_open')) { + return false; + } + + return true; + } + +} diff --git a/PHPExcel/CachedObjectStorage/SQLite3.php b/PHPExcel/CachedObjectStorage/SQLite3.php new file mode 100644 index 0000000..bcfe159 --- /dev/null +++ b/PHPExcel/CachedObjectStorage/SQLite3.php @@ -0,0 +1,345 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + $this->_insertQuery->bindValue('id',$this->_currentObjectID,SQLITE3_TEXT); + $this->_insertQuery->bindValue('data',serialize($this->_currentObject),SQLITE3_BLOB); + $result = $this->_insertQuery->execute(); + if ($result === false) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + $this->_currentCellIsDirty = false; + } + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + $this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT); + $cellResult = $this->_selectQuery->execute(); + if ($cellResult === FALSE) { + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + } + $cellData = $cellResult->fetchArray(SQLITE3_ASSOC); + if ($cellData === FALSE) { + // Return null if requested entry doesn't exist in cache + return NULL; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + + $this->_currentObject = unserialize($cellData['value']); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Is a value set for an indexed cell? + * + * @param string $pCoord Coordinate address of the cell to check + * @return boolean + */ + public function isDataSet($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return TRUE; + } + + // Check if the requested entry exists in the cache + $this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT); + $cellResult = $this->_selectQuery->execute(); + if ($cellResult === FALSE) { + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + } + $cellData = $cellResult->fetchArray(SQLITE3_ASSOC); + + return ($cellData === FALSE) ? FALSE : TRUE; + } // function isDataSet() + + + /** + * Delete a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to delete + * @throws PHPExcel_Exception + */ + public function deleteCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + $this->_currentObject->detach(); + $this->_currentObjectID = $this->_currentObject = NULL; + } + + // Check if the requested entry exists in the cache + $this->_deleteQuery->bindValue('id',$pCoord,SQLITE3_TEXT); + $result = $this->_deleteQuery->execute(); + if ($result === FALSE) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + + $this->_currentCellIsDirty = FALSE; + } // function deleteCacheData() + + + /** + * Move a cell object from one address to another + * + * @param string $fromAddress Current address of the cell to move + * @param string $toAddress Destination address of the cell to move + * @return boolean + */ + public function moveCell($fromAddress, $toAddress) { + if ($fromAddress === $this->_currentObjectID) { + $this->_currentObjectID = $toAddress; + } + + $this->_deleteQuery->bindValue('id',$toAddress,SQLITE3_TEXT); + $result = $this->_deleteQuery->execute(); + if ($result === false) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + + $this->_updateQuery->bindValue('toid',$toAddress,SQLITE3_TEXT); + $this->_updateQuery->bindValue('fromid',$fromAddress,SQLITE3_TEXT); + $result = $this->_updateQuery->execute(); + if ($result === false) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + + return TRUE; + } // function moveCell() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + $query = "SELECT id FROM kvp_".$this->_TableName; + $cellIdsResult = $this->_DBHandle->query($query); + if ($cellIdsResult === false) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + + $cellKeys = array(); + while ($row = $cellIdsResult->fetchArray(SQLITE3_ASSOC)) { + $cellKeys[] = $row['id']; + } + + return $cellKeys; + } // function getCellList() + + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + $this->_currentCellIsDirty; + $this->_storeData(); + + // Get a new id for the new table name + $tableName = str_replace('.','_',$this->_getUniqueID()); + if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB) + AS SELECT * FROM kvp_'.$this->_TableName)) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + + // Copy the existing cell cache file + $this->_TableName = $tableName; + } // function copyCellCollection() + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + + // Close down the temporary cache file + $this->__destruct(); + } // function unsetWorksheetCells() + + + /** + * Initialise this new cell collection + * + * @param PHPExcel_Worksheet $parent The worksheet for this cell collection + */ + public function __construct(PHPExcel_Worksheet $parent) { + parent::__construct($parent); + if (is_null($this->_DBHandle)) { + $this->_TableName = str_replace('.','_',$this->_getUniqueID()); + $_DBName = ':memory:'; + + $this->_DBHandle = new SQLite3($_DBName); + if ($this->_DBHandle === false) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)')) + throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg()); + } + + $this->_selectQuery = $this->_DBHandle->prepare("SELECT value FROM kvp_".$this->_TableName." WHERE id = :id"); + $this->_insertQuery = $this->_DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES(:id,:data)"); + $this->_updateQuery = $this->_DBHandle->prepare("UPDATE kvp_".$this->_TableName." SET id=:toId WHERE id=:fromId"); + $this->_deleteQuery = $this->_DBHandle->prepare("DELETE FROM kvp_".$this->_TableName." WHERE id = :id"); + } // function __construct() + + + /** + * Destroy this cell collection + */ + public function __destruct() { + if (!is_null($this->_DBHandle)) { + $this->_DBHandle->exec('DROP TABLE kvp_'.$this->_TableName); + $this->_DBHandle->close(); + } + $this->_DBHandle = null; + } // function __destruct() + + + /** + * Identify whether the caching method is currently available + * Some methods are dependent on the availability of certain extensions being enabled in the PHP build + * + * @return boolean + */ + public static function cacheMethodIsAvailable() { + if (!class_exists('SQLite3',FALSE)) { + return false; + } + + return true; + } + +} diff --git a/PHPExcel/CachedObjectStorage/Wincache.php b/PHPExcel/CachedObjectStorage/Wincache.php new file mode 100644 index 0000000..96dca66 --- /dev/null +++ b/PHPExcel/CachedObjectStorage/Wincache.php @@ -0,0 +1,294 @@ +_currentCellIsDirty && !empty($this->_currentObjectID)) { + $this->_currentObject->detach(); + + $obj = serialize($this->_currentObject); + if (wincache_ucache_exists($this->_cachePrefix.$this->_currentObjectID.'.cache')) { + if (!wincache_ucache_set($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) { + $this->__destruct(); + throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in WinCache'); + } + } else { + if (!wincache_ucache_add($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) { + $this->__destruct(); + throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in WinCache'); + } + } + $this->_currentCellIsDirty = false; + } + + $this->_currentObjectID = $this->_currentObject = null; + } // function _storeData() + + + /** + * Add or Update a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to update + * @param PHPExcel_Cell $cell Cell to update + * @return void + * @throws PHPExcel_Exception + */ + public function addCacheData($pCoord, PHPExcel_Cell $cell) { + if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) { + $this->_storeData(); + } + $this->_cellCache[$pCoord] = true; + + $this->_currentObjectID = $pCoord; + $this->_currentObject = $cell; + $this->_currentCellIsDirty = true; + + return $cell; + } // function addCacheData() + + + /** + * Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell? + * + * @param string $pCoord Coordinate address of the cell to check + * @return boolean + */ + public function isDataSet($pCoord) { + // Check if the requested entry is the current object, or exists in the cache + if (parent::isDataSet($pCoord)) { + if ($this->_currentObjectID == $pCoord) { + return true; + } + // Check if the requested entry still exists in cache + $success = wincache_ucache_exists($this->_cachePrefix.$pCoord.'.cache'); + if ($success === false) { + // Entry no longer exists in Wincache, so clear it from the cache array + parent::deleteCacheData($pCoord); + throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in WinCache'); + } + return true; + } + return false; + } // function isDataSet() + + + /** + * Get cell at a specific coordinate + * + * @param string $pCoord Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found, or null if not found + */ + public function getCacheData($pCoord) { + if ($pCoord === $this->_currentObjectID) { + return $this->_currentObject; + } + $this->_storeData(); + + // Check if the entry that has been requested actually exists + $obj = null; + if (parent::isDataSet($pCoord)) { + $success = false; + $obj = wincache_ucache_get($this->_cachePrefix.$pCoord.'.cache', $success); + if ($success === false) { + // Entry no longer exists in WinCache, so clear it from the cache array + parent::deleteCacheData($pCoord); + throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in WinCache'); + } + } else { + // Return null if requested entry doesn't exist in cache + return null; + } + + // Set current entry to the requested entry + $this->_currentObjectID = $pCoord; + $this->_currentObject = unserialize($obj); + // Re-attach this as the cell's parent + $this->_currentObject->attach($this); + + // Return requested entry + return $this->_currentObject; + } // function getCacheData() + + + /** + * Get a list of all cell addresses currently held in cache + * + * @return array of string + */ + public function getCellList() { + if ($this->_currentObjectID !== null) { + $this->_storeData(); + } + + return parent::getCellList(); + } + + + /** + * Delete a cell in cache identified by coordinate address + * + * @param string $pCoord Coordinate address of the cell to delete + * @throws PHPExcel_Exception + */ + public function deleteCacheData($pCoord) { + // Delete the entry from Wincache + wincache_ucache_delete($this->_cachePrefix.$pCoord.'.cache'); + + // Delete the entry from our cell address array + parent::deleteCacheData($pCoord); + } // function deleteCacheData() + + + /** + * Clone the cell collection + * + * @param PHPExcel_Worksheet $parent The new worksheet + * @return void + */ + public function copyCellCollection(PHPExcel_Worksheet $parent) { + parent::copyCellCollection($parent); + // Get a new id for the new file name + $baseUnique = $this->_getUniqueID(); + $newCachePrefix = substr(md5($baseUnique),0,8).'.'; + $cacheList = $this->getCellList(); + foreach($cacheList as $cellID) { + if ($cellID != $this->_currentObjectID) { + $success = false; + $obj = wincache_ucache_get($this->_cachePrefix.$cellID.'.cache', $success); + if ($success === false) { + // Entry no longer exists in WinCache, so clear it from the cache array + parent::deleteCacheData($cellID); + throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in Wincache'); + } + if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->_cacheTime)) { + $this->__destruct(); + throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in Wincache'); + } + } + } + $this->_cachePrefix = $newCachePrefix; + } // function copyCellCollection() + + + /** + * Clear the cell collection and disconnect from our parent + * + * @return void + */ + public function unsetWorksheetCells() { + if(!is_null($this->_currentObject)) { + $this->_currentObject->detach(); + $this->_currentObject = $this->_currentObjectID = null; + } + + // Flush the WinCache cache + $this->__destruct(); + + $this->_cellCache = array(); + + // detach ourself from the worksheet, so that it can then delete this object successfully + $this->_parent = null; + } // function unsetWorksheetCells() + + + /** + * Initialise this new cell collection + * + * @param PHPExcel_Worksheet $parent The worksheet for this cell collection + * @param array of mixed $arguments Additional initialisation arguments + */ + public function __construct(PHPExcel_Worksheet $parent, $arguments) { + $cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600; + + if (is_null($this->_cachePrefix)) { + $baseUnique = $this->_getUniqueID(); + $this->_cachePrefix = substr(md5($baseUnique),0,8).'.'; + $this->_cacheTime = $cacheTime; + + parent::__construct($parent); + } + } // function __construct() + + + /** + * Destroy this cell collection + */ + public function __destruct() { + $cacheList = $this->getCellList(); + foreach($cacheList as $cellID) { + wincache_ucache_delete($this->_cachePrefix.$cellID.'.cache'); + } + } // function __destruct() + + + /** + * Identify whether the caching method is currently available + * Some methods are dependent on the availability of certain extensions being enabled in the PHP build + * + * @return boolean + */ + public static function cacheMethodIsAvailable() { + if (!function_exists('wincache_ucache_add')) { + return false; + } + + return true; + } + +} diff --git a/PHPExcel/CachedObjectStorageFactory.php b/PHPExcel/CachedObjectStorageFactory.php new file mode 100644 index 0000000..6c3ec15 --- /dev/null +++ b/PHPExcel/CachedObjectStorageFactory.php @@ -0,0 +1,251 @@ + array( + ), + self::cache_in_memory_gzip => array( + ), + self::cache_in_memory_serialized => array( + ), + self::cache_igbinary => array( + ), + self::cache_to_phpTemp => array( 'memoryCacheSize' => '1MB' + ), + self::cache_to_discISAM => array( 'dir' => NULL + ), + self::cache_to_apc => array( 'cacheTime' => 600 + ), + self::cache_to_memcache => array( 'memcacheServer' => 'localhost', + 'memcachePort' => 11211, + 'cacheTime' => 600 + ), + self::cache_to_wincache => array( 'cacheTime' => 600 + ), + self::cache_to_sqlite => array( + ), + self::cache_to_sqlite3 => array( + ), + ); + + + /** + * Arguments for the active cache storage method + * + * @var array of mixed array + */ + private static $_storageMethodParameters = array(); + + + /** + * Return the current cache storage method + * + * @return string|NULL + **/ + public static function getCacheStorageMethod() + { + return self::$_cacheStorageMethod; + } // function getCacheStorageMethod() + + + /** + * Return the current cache storage class + * + * @return PHPExcel_CachedObjectStorage_ICache|NULL + **/ + public static function getCacheStorageClass() + { + return self::$_cacheStorageClass; + } // function getCacheStorageClass() + + + /** + * Return the list of all possible cache storage methods + * + * @return string[] + **/ + public static function getAllCacheStorageMethods() + { + return self::$_storageMethods; + } // function getCacheStorageMethods() + + + /** + * Return the list of all available cache storage methods + * + * @return string[] + **/ + public static function getCacheStorageMethods() + { + $activeMethods = array(); + foreach(self::$_storageMethods as $storageMethod) { + $cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $storageMethod; + if (call_user_func(array($cacheStorageClass, 'cacheMethodIsAvailable'))) { + $activeMethods[] = $storageMethod; + } + } + return $activeMethods; + } // function getCacheStorageMethods() + + + /** + * Identify the cache storage method to use + * + * @param string $method Name of the method to use for cell cacheing + * @param array of mixed $arguments Additional arguments to pass to the cell caching class + * when instantiating + * @return boolean + **/ + public static function initialize($method = self::cache_in_memory, $arguments = array()) + { + if (!in_array($method,self::$_storageMethods)) { + return FALSE; + } + + $cacheStorageClass = 'PHPExcel_CachedObjectStorage_'.$method; + if (!call_user_func(array( $cacheStorageClass, + 'cacheMethodIsAvailable'))) { + return FALSE; + } + + self::$_storageMethodParameters[$method] = self::$_storageMethodDefaultParameters[$method]; + foreach($arguments as $k => $v) { + if (array_key_exists($k, self::$_storageMethodParameters[$method])) { + self::$_storageMethodParameters[$method][$k] = $v; + } + } + + if (self::$_cacheStorageMethod === NULL) { + self::$_cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $method; + self::$_cacheStorageMethod = $method; + } + return TRUE; + } // function initialize() + + + /** + * Initialise the cache storage + * + * @param PHPExcel_Worksheet $parent Enable cell caching for this worksheet + * @return PHPExcel_CachedObjectStorage_ICache + **/ + public static function getInstance(PHPExcel_Worksheet $parent) + { + $cacheMethodIsAvailable = TRUE; + if (self::$_cacheStorageMethod === NULL) { + $cacheMethodIsAvailable = self::initialize(); + } + + if ($cacheMethodIsAvailable) { + $instance = new self::$_cacheStorageClass( $parent, + self::$_storageMethodParameters[self::$_cacheStorageMethod] + ); + if ($instance !== NULL) { + return $instance; + } + } + + return FALSE; + } // function getInstance() + + + /** + * Clear the cache storage + * + **/ + public static function finalize() + { + self::$_cacheStorageMethod = NULL; + self::$_cacheStorageClass = NULL; + self::$_storageMethodParameters = array(); + } + +} diff --git a/PHPExcel/CalcEngine/CyclicReferenceStack.php b/PHPExcel/CalcEngine/CyclicReferenceStack.php new file mode 100644 index 0000000..0259193 --- /dev/null +++ b/PHPExcel/CalcEngine/CyclicReferenceStack.php @@ -0,0 +1,98 @@ +_stack); + } + + /** + * Push a new entry onto the stack + * + * @param mixed $value + */ + public function push($value) { + $this->_stack[] = $value; + } // function push() + + /** + * Pop the last entry from the stack + * + * @return mixed + */ + public function pop() { + return array_pop($this->_stack); + } // function pop() + + /** + * Test to see if a specified entry exists on the stack + * + * @param mixed $value The value to test + */ + public function onStack($value) { + return in_array($value, $this->_stack); + } + + /** + * Clear the stack + */ + public function clear() { + $this->_stack = array(); + } // function push() + + /** + * Return an array of all entries on the stack + * + * @return mixed[] + */ + public function showStack() { + return $this->_stack; + } + +} // class PHPExcel_CalcEngine_CyclicReferenceStack diff --git a/PHPExcel/CalcEngine/Logger.php b/PHPExcel/CalcEngine/Logger.php new file mode 100644 index 0000000..2048df3 --- /dev/null +++ b/PHPExcel/CalcEngine/Logger.php @@ -0,0 +1,153 @@ +_cellStack = $stack; + } + + /** + * Enable/Disable Calculation engine logging + * + * @param boolean $pValue + */ + public function setWriteDebugLog($pValue = FALSE) { + $this->_writeDebugLog = $pValue; + } + + /** + * Return whether calculation engine logging is enabled or disabled + * + * @return boolean + */ + public function getWriteDebugLog() { + return $this->_writeDebugLog; + } + + /** + * Enable/Disable echoing of debug log information + * + * @param boolean $pValue + */ + public function setEchoDebugLog($pValue = FALSE) { + $this->_echoDebugLog = $pValue; + } + + /** + * Return whether echoing of debug log information is enabled or disabled + * + * @return boolean + */ + public function getEchoDebugLog() { + return $this->_echoDebugLog; + } + + /** + * Write an entry to the calculation engine debug log + */ + public function writeDebugLog() { + // Only write the debug log if logging is enabled + if ($this->_writeDebugLog) { + $message = implode(func_get_args()); + $cellReference = implode(' -> ', $this->_cellStack->showStack()); + if ($this->_echoDebugLog) { + echo $cellReference, + ($this->_cellStack->count() > 0 ? ' => ' : ''), + $message, + PHP_EOL; + } + $this->_debugLog[] = $cellReference . + ($this->_cellStack->count() > 0 ? ' => ' : '') . + $message; + } + } // function _writeDebug() + + /** + * Clear the calculation engine debug log + */ + public function clearLog() { + $this->_debugLog = array(); + } // function flushLogger() + + /** + * Return the calculation engine debug log + * + * @return string[] + */ + public function getLog() { + return $this->_debugLog; + } // function flushLogger() + +} // class PHPExcel_CalcEngine_Logger + diff --git a/PHPExcel/Calculation.php b/PHPExcel/Calculation.php new file mode 100644 index 0000000..b609b0d --- /dev/null +++ b/PHPExcel/Calculation.php @@ -0,0 +1,3933 @@ +=-]*)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?([a-z]{1,3})\$?(\d{1,7})'); + // Named Range of cells + define('CALCULATION_REGEXP_NAMEDRANGE','((([^\s,!&%^\/\*\+<>=-]*)|(\'[^\']*\')|(\"[^\"]*\"))!)?([_A-Z][_A-Z0-9\.]*)'); + } else { + // Cell reference (cell or range of cells, with or without a sheet reference) + define('CALCULATION_REGEXP_CELLREF','(((\w*)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?([a-z]{1,3})\$?(\d+)'); + // Named Range of cells + define('CALCULATION_REGEXP_NAMEDRANGE','(((\w*)|(\'.*\')|(\".*\"))!)?([_A-Z][_A-Z0-9\.]*)'); + } +} + + +/** + * PHPExcel_Calculation (Multiton) + * + * @category PHPExcel + * @package PHPExcel_Calculation + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Calculation { + + /** Constants */ + /** Regular Expressions */ + // Numeric operand + const CALCULATION_REGEXP_NUMBER = '[-+]?\d*\.?\d+(e[-+]?\d+)?'; + // String operand + const CALCULATION_REGEXP_STRING = '"(?:[^"]|"")*"'; + // Opening bracket + const CALCULATION_REGEXP_OPENBRACE = '\('; + // Function (allow for the old @ symbol that could be used to prefix a function, but we'll ignore it) + const CALCULATION_REGEXP_FUNCTION = '@?([A-Z][A-Z0-9\.]*)[\s]*\('; + // Cell reference (cell or range of cells, with or without a sheet reference) + const CALCULATION_REGEXP_CELLREF = CALCULATION_REGEXP_CELLREF; + // Named Range of cells + const CALCULATION_REGEXP_NAMEDRANGE = CALCULATION_REGEXP_NAMEDRANGE; + // Error + const CALCULATION_REGEXP_ERROR = '\#[A-Z][A-Z0_\/]*[!\?]?'; + + + /** constants */ + const RETURN_ARRAY_AS_ERROR = 'error'; + const RETURN_ARRAY_AS_VALUE = 'value'; + const RETURN_ARRAY_AS_ARRAY = 'array'; + + private static $returnArrayAsType = self::RETURN_ARRAY_AS_VALUE; + + + /** + * Instance of this class + * + * @access private + * @var PHPExcel_Calculation + */ + private static $_instance; + + + /** + * Instance of the workbook this Calculation Engine is using + * + * @access private + * @var PHPExcel + */ + private $_workbook; + + /** + * List of instances of the calculation engine that we've instantiated for individual workbooks + * + * @access private + * @var PHPExcel_Calculation[] + */ + private static $_workbookSets; + + /** + * Calculation cache + * + * @access private + * @var array + */ + private $_calculationCache = array (); + + + /** + * Calculation cache enabled + * + * @access private + * @var boolean + */ + private $_calculationCacheEnabled = TRUE; + + + /** + * List of operators that can be used within formulae + * The true/false value indicates whether it is a binary operator or a unary operator + * + * @access private + * @var array + */ + private static $_operators = array('+' => TRUE, '-' => TRUE, '*' => TRUE, '/' => TRUE, + '^' => TRUE, '&' => TRUE, '%' => FALSE, '~' => FALSE, + '>' => TRUE, '<' => TRUE, '=' => TRUE, '>=' => TRUE, + '<=' => TRUE, '<>' => TRUE, '|' => TRUE, ':' => TRUE + ); + + + /** + * List of binary operators (those that expect two operands) + * + * @access private + * @var array + */ + private static $_binaryOperators = array('+' => TRUE, '-' => TRUE, '*' => TRUE, '/' => TRUE, + '^' => TRUE, '&' => TRUE, '>' => TRUE, '<' => TRUE, + '=' => TRUE, '>=' => TRUE, '<=' => TRUE, '<>' => TRUE, + '|' => TRUE, ':' => TRUE + ); + + /** + * The debug log generated by the calculation engine + * + * @access private + * @var PHPExcel_CalcEngine_Logger + * + */ + private $debugLog; + + /** + * Flag to determine how formula errors should be handled + * If true, then a user error will be triggered + * If false, then an exception will be thrown + * + * @access public + * @var boolean + * + */ + public $suppressFormulaErrors = FALSE; + + /** + * Error message for any error that was raised/thrown by the calculation engine + * + * @access public + * @var string + * + */ + public $formulaError = NULL; + + /** + * An array of the nested cell references accessed by the calculation engine, used for the debug log + * + * @access private + * @var array of string + * + */ + private $_cyclicReferenceStack; + + /** + * Current iteration counter for cyclic formulae + * If the value is 0 (or less) then cyclic formulae will throw an exception, + * otherwise they will iterate to the limit defined here before returning a result + * + * @var integer + * + */ + private $_cyclicFormulaCount = 0; + + private $_cyclicFormulaCell = ''; + + /** + * Number of iterations for cyclic formulae + * + * @var integer + * + */ + public $cyclicFormulaCount = 0; + + /** + * Precision used for calculations + * + * @var integer + * + */ + private $_savedPrecision = 14; + + + /** + * The current locale setting + * + * @var string + * + */ + private static $_localeLanguage = 'en_us'; // US English (default locale) + + /** + * List of available locale settings + * Note that this is read for the locale subdirectory only when requested + * + * @var string[] + * + */ + private static $_validLocaleLanguages = array( 'en' // English (default language) + ); + /** + * Locale-specific argument separator for function arguments + * + * @var string + * + */ + private static $_localeArgumentSeparator = ','; + private static $_localeFunctions = array(); + + /** + * Locale-specific translations for Excel constants (True, False and Null) + * + * @var string[] + * + */ + public static $_localeBoolean = array( 'TRUE' => 'TRUE', + 'FALSE' => 'FALSE', + 'NULL' => 'NULL' + ); + + + /** + * Excel constant string translations to their PHP equivalents + * Constant conversion from text name/value to actual (datatyped) value + * + * @var string[] + * + */ + private static $_ExcelConstants = array('TRUE' => TRUE, + 'FALSE' => FALSE, + 'NULL' => NULL + ); + + // PHPExcel functions + private static $_PHPExcelFunctions = array( // PHPExcel functions + 'ABS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'abs', + 'argumentCount' => '1' + ), + 'ACCRINT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::ACCRINT', + 'argumentCount' => '4-7' + ), + 'ACCRINTM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::ACCRINTM', + 'argumentCount' => '3-5' + ), + 'ACOS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'acos', + 'argumentCount' => '1' + ), + 'ACOSH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'acosh', + 'argumentCount' => '1' + ), + 'ADDRESS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::CELL_ADDRESS', + 'argumentCount' => '2-5' + ), + 'AMORDEGRC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::AMORDEGRC', + 'argumentCount' => '6,7' + ), + 'AMORLINC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::AMORLINC', + 'argumentCount' => '6,7' + ), + 'AND' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOGICAL, + 'functionCall' => 'PHPExcel_Calculation_Logical::LOGICAL_AND', + 'argumentCount' => '1+' + ), + 'AREAS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'ASC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'ASIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'asin', + 'argumentCount' => '1' + ), + 'ASINH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'asinh', + 'argumentCount' => '1' + ), + 'ATAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'atan', + 'argumentCount' => '1' + ), + 'ATAN2' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::ATAN2', + 'argumentCount' => '2' + ), + 'ATANH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'atanh', + 'argumentCount' => '1' + ), + 'AVEDEV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::AVEDEV', + 'argumentCount' => '1+' + ), + 'AVERAGE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::AVERAGE', + 'argumentCount' => '1+' + ), + 'AVERAGEA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::AVERAGEA', + 'argumentCount' => '1+' + ), + 'AVERAGEIF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::AVERAGEIF', + 'argumentCount' => '2,3' + ), + 'AVERAGEIFS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '3+' + ), + 'BAHTTEXT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'BESSELI' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::BESSELI', + 'argumentCount' => '2' + ), + 'BESSELJ' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::BESSELJ', + 'argumentCount' => '2' + ), + 'BESSELK' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::BESSELK', + 'argumentCount' => '2' + ), + 'BESSELY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::BESSELY', + 'argumentCount' => '2' + ), + 'BETADIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::BETADIST', + 'argumentCount' => '3-5' + ), + 'BETAINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::BETAINV', + 'argumentCount' => '3-5' + ), + 'BIN2DEC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::BINTODEC', + 'argumentCount' => '1' + ), + 'BIN2HEX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::BINTOHEX', + 'argumentCount' => '1,2' + ), + 'BIN2OCT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::BINTOOCT', + 'argumentCount' => '1,2' + ), + 'BINOMDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::BINOMDIST', + 'argumentCount' => '4' + ), + 'CEILING' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::CEILING', + 'argumentCount' => '2' + ), + 'CELL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1,2' + ), + 'CHAR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::CHARACTER', + 'argumentCount' => '1' + ), + 'CHIDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::CHIDIST', + 'argumentCount' => '2' + ), + 'CHIINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::CHIINV', + 'argumentCount' => '2' + ), + 'CHITEST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2' + ), + 'CHOOSE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::CHOOSE', + 'argumentCount' => '2+' + ), + 'CLEAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::TRIMNONPRINTABLE', + 'argumentCount' => '1' + ), + 'CODE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::ASCIICODE', + 'argumentCount' => '1' + ), + 'COLUMN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::COLUMN', + 'argumentCount' => '-1', + 'passByReference' => array(TRUE) + ), + 'COLUMNS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::COLUMNS', + 'argumentCount' => '1' + ), + 'COMBIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::COMBIN', + 'argumentCount' => '2' + ), + 'COMPLEX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::COMPLEX', + 'argumentCount' => '2,3' + ), + 'CONCATENATE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::CONCATENATE', + 'argumentCount' => '1+' + ), + 'CONFIDENCE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::CONFIDENCE', + 'argumentCount' => '3' + ), + 'CONVERT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::CONVERTUOM', + 'argumentCount' => '3' + ), + 'CORREL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::CORREL', + 'argumentCount' => '2' + ), + 'COS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'cos', + 'argumentCount' => '1' + ), + 'COSH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'cosh', + 'argumentCount' => '1' + ), + 'COUNT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::COUNT', + 'argumentCount' => '1+' + ), + 'COUNTA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::COUNTA', + 'argumentCount' => '1+' + ), + 'COUNTBLANK' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::COUNTBLANK', + 'argumentCount' => '1' + ), + 'COUNTIF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::COUNTIF', + 'argumentCount' => '2' + ), + 'COUNTIFS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2' + ), + 'COUPDAYBS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::COUPDAYBS', + 'argumentCount' => '3,4' + ), + 'COUPDAYS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::COUPDAYS', + 'argumentCount' => '3,4' + ), + 'COUPDAYSNC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::COUPDAYSNC', + 'argumentCount' => '3,4' + ), + 'COUPNCD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::COUPNCD', + 'argumentCount' => '3,4' + ), + 'COUPNUM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::COUPNUM', + 'argumentCount' => '3,4' + ), + 'COUPPCD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::COUPPCD', + 'argumentCount' => '3,4' + ), + 'COVAR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::COVAR', + 'argumentCount' => '2' + ), + 'CRITBINOM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::CRITBINOM', + 'argumentCount' => '3' + ), + 'CUBEKPIMEMBER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_CUBE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'CUBEMEMBER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_CUBE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'CUBEMEMBERPROPERTY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_CUBE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'CUBERANKEDMEMBER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_CUBE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'CUBESET' => array('category' => PHPExcel_Calculation_Function::CATEGORY_CUBE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'CUBESETCOUNT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_CUBE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'CUBEVALUE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_CUBE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'CUMIPMT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::CUMIPMT', + 'argumentCount' => '6' + ), + 'CUMPRINC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::CUMPRINC', + 'argumentCount' => '6' + ), + 'DATE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DATE', + 'argumentCount' => '3' + ), + 'DATEDIF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DATEDIF', + 'argumentCount' => '2,3' + ), + 'DATEVALUE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DATEVALUE', + 'argumentCount' => '1' + ), + 'DAVERAGE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DAVERAGE', + 'argumentCount' => '3' + ), + 'DAY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DAYOFMONTH', + 'argumentCount' => '1' + ), + 'DAYS360' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DAYS360', + 'argumentCount' => '2,3' + ), + 'DB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::DB', + 'argumentCount' => '4,5' + ), + 'DCOUNT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DCOUNT', + 'argumentCount' => '3' + ), + 'DCOUNTA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DCOUNTA', + 'argumentCount' => '3' + ), + 'DDB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::DDB', + 'argumentCount' => '4,5' + ), + 'DEC2BIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::DECTOBIN', + 'argumentCount' => '1,2' + ), + 'DEC2HEX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::DECTOHEX', + 'argumentCount' => '1,2' + ), + 'DEC2OCT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::DECTOOCT', + 'argumentCount' => '1,2' + ), + 'DEGREES' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'rad2deg', + 'argumentCount' => '1' + ), + 'DELTA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::DELTA', + 'argumentCount' => '1,2' + ), + 'DEVSQ' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::DEVSQ', + 'argumentCount' => '1+' + ), + 'DGET' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DGET', + 'argumentCount' => '3' + ), + 'DISC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::DISC', + 'argumentCount' => '4,5' + ), + 'DMAX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DMAX', + 'argumentCount' => '3' + ), + 'DMIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DMIN', + 'argumentCount' => '3' + ), + 'DOLLAR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::DOLLAR', + 'argumentCount' => '1,2' + ), + 'DOLLARDE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::DOLLARDE', + 'argumentCount' => '2' + ), + 'DOLLARFR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::DOLLARFR', + 'argumentCount' => '2' + ), + 'DPRODUCT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DPRODUCT', + 'argumentCount' => '3' + ), + 'DSTDEV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DSTDEV', + 'argumentCount' => '3' + ), + 'DSTDEVP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DSTDEVP', + 'argumentCount' => '3' + ), + 'DSUM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DSUM', + 'argumentCount' => '3' + ), + 'DURATION' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '5,6' + ), + 'DVAR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DVAR', + 'argumentCount' => '3' + ), + 'DVARP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATABASE, + 'functionCall' => 'PHPExcel_Calculation_Database::DVARP', + 'argumentCount' => '3' + ), + 'EDATE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::EDATE', + 'argumentCount' => '2' + ), + 'EFFECT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::EFFECT', + 'argumentCount' => '2' + ), + 'EOMONTH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::EOMONTH', + 'argumentCount' => '2' + ), + 'ERF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::ERF', + 'argumentCount' => '1,2' + ), + 'ERFC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::ERFC', + 'argumentCount' => '1' + ), + 'ERROR.TYPE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::ERROR_TYPE', + 'argumentCount' => '1' + ), + 'EVEN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::EVEN', + 'argumentCount' => '1' + ), + 'EXACT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2' + ), + 'EXP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'exp', + 'argumentCount' => '1' + ), + 'EXPONDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::EXPONDIST', + 'argumentCount' => '3' + ), + 'FACT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::FACT', + 'argumentCount' => '1' + ), + 'FACTDOUBLE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::FACTDOUBLE', + 'argumentCount' => '1' + ), + 'FALSE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOGICAL, + 'functionCall' => 'PHPExcel_Calculation_Logical::FALSE', + 'argumentCount' => '0' + ), + 'FDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '3' + ), + 'FIND' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::SEARCHSENSITIVE', + 'argumentCount' => '2,3' + ), + 'FINDB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::SEARCHSENSITIVE', + 'argumentCount' => '2,3' + ), + 'FINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '3' + ), + 'FISHER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::FISHER', + 'argumentCount' => '1' + ), + 'FISHERINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::FISHERINV', + 'argumentCount' => '1' + ), + 'FIXED' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::FIXEDFORMAT', + 'argumentCount' => '1-3' + ), + 'FLOOR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::FLOOR', + 'argumentCount' => '2' + ), + 'FORECAST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::FORECAST', + 'argumentCount' => '3' + ), + 'FREQUENCY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2' + ), + 'FTEST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2' + ), + 'FV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::FV', + 'argumentCount' => '3-5' + ), + 'FVSCHEDULE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::FVSCHEDULE', + 'argumentCount' => '2' + ), + 'GAMMADIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::GAMMADIST', + 'argumentCount' => '4' + ), + 'GAMMAINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::GAMMAINV', + 'argumentCount' => '3' + ), + 'GAMMALN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::GAMMALN', + 'argumentCount' => '1' + ), + 'GCD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::GCD', + 'argumentCount' => '1+' + ), + 'GEOMEAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::GEOMEAN', + 'argumentCount' => '1+' + ), + 'GESTEP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::GESTEP', + 'argumentCount' => '1,2' + ), + 'GETPIVOTDATA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2+' + ), + 'GROWTH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::GROWTH', + 'argumentCount' => '1-4' + ), + 'HARMEAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::HARMEAN', + 'argumentCount' => '1+' + ), + 'HEX2BIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::HEXTOBIN', + 'argumentCount' => '1,2' + ), + 'HEX2DEC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::HEXTODEC', + 'argumentCount' => '1' + ), + 'HEX2OCT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::HEXTOOCT', + 'argumentCount' => '1,2' + ), + 'HLOOKUP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::HLOOKUP', + 'argumentCount' => '3,4' + ), + 'HOUR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::HOUROFDAY', + 'argumentCount' => '1' + ), + 'HYPERLINK' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::HYPERLINK', + 'argumentCount' => '1,2', + 'passCellReference'=> TRUE + ), + 'HYPGEOMDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::HYPGEOMDIST', + 'argumentCount' => '4' + ), + 'IF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOGICAL, + 'functionCall' => 'PHPExcel_Calculation_Logical::STATEMENT_IF', + 'argumentCount' => '1-3' + ), + 'IFERROR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOGICAL, + 'functionCall' => 'PHPExcel_Calculation_Logical::IFERROR', + 'argumentCount' => '2' + ), + 'IMABS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMABS', + 'argumentCount' => '1' + ), + 'IMAGINARY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMAGINARY', + 'argumentCount' => '1' + ), + 'IMARGUMENT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMARGUMENT', + 'argumentCount' => '1' + ), + 'IMCONJUGATE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMCONJUGATE', + 'argumentCount' => '1' + ), + 'IMCOS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMCOS', + 'argumentCount' => '1' + ), + 'IMDIV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMDIV', + 'argumentCount' => '2' + ), + 'IMEXP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMEXP', + 'argumentCount' => '1' + ), + 'IMLN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMLN', + 'argumentCount' => '1' + ), + 'IMLOG10' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMLOG10', + 'argumentCount' => '1' + ), + 'IMLOG2' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMLOG2', + 'argumentCount' => '1' + ), + 'IMPOWER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMPOWER', + 'argumentCount' => '2' + ), + 'IMPRODUCT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMPRODUCT', + 'argumentCount' => '1+' + ), + 'IMREAL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMREAL', + 'argumentCount' => '1' + ), + 'IMSIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMSIN', + 'argumentCount' => '1' + ), + 'IMSQRT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMSQRT', + 'argumentCount' => '1' + ), + 'IMSUB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMSUB', + 'argumentCount' => '2' + ), + 'IMSUM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::IMSUM', + 'argumentCount' => '1+' + ), + 'INDEX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::INDEX', + 'argumentCount' => '1-4' + ), + 'INDIRECT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::INDIRECT', + 'argumentCount' => '1,2', + 'passCellReference'=> TRUE + ), + 'INFO' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'INT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::INT', + 'argumentCount' => '1' + ), + 'INTERCEPT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::INTERCEPT', + 'argumentCount' => '2' + ), + 'INTRATE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::INTRATE', + 'argumentCount' => '4,5' + ), + 'IPMT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::IPMT', + 'argumentCount' => '4-6' + ), + 'IRR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::IRR', + 'argumentCount' => '1,2' + ), + 'ISBLANK' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_BLANK', + 'argumentCount' => '1' + ), + 'ISERR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_ERR', + 'argumentCount' => '1' + ), + 'ISERROR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_ERROR', + 'argumentCount' => '1' + ), + 'ISEVEN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_EVEN', + 'argumentCount' => '1' + ), + 'ISLOGICAL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_LOGICAL', + 'argumentCount' => '1' + ), + 'ISNA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_NA', + 'argumentCount' => '1' + ), + 'ISNONTEXT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_NONTEXT', + 'argumentCount' => '1' + ), + 'ISNUMBER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_NUMBER', + 'argumentCount' => '1' + ), + 'ISODD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_ODD', + 'argumentCount' => '1' + ), + 'ISPMT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::ISPMT', + 'argumentCount' => '4' + ), + 'ISREF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'ISTEXT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::IS_TEXT', + 'argumentCount' => '1' + ), + 'JIS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'KURT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::KURT', + 'argumentCount' => '1+' + ), + 'LARGE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::LARGE', + 'argumentCount' => '2' + ), + 'LCM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::LCM', + 'argumentCount' => '1+' + ), + 'LEFT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::LEFT', + 'argumentCount' => '1,2' + ), + 'LEFTB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::LEFT', + 'argumentCount' => '1,2' + ), + 'LEN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::STRINGLENGTH', + 'argumentCount' => '1' + ), + 'LENB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::STRINGLENGTH', + 'argumentCount' => '1' + ), + 'LINEST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::LINEST', + 'argumentCount' => '1-4' + ), + 'LN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'log', + 'argumentCount' => '1' + ), + 'LOG' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::LOG_BASE', + 'argumentCount' => '1,2' + ), + 'LOG10' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'log10', + 'argumentCount' => '1' + ), + 'LOGEST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::LOGEST', + 'argumentCount' => '1-4' + ), + 'LOGINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::LOGINV', + 'argumentCount' => '3' + ), + 'LOGNORMDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::LOGNORMDIST', + 'argumentCount' => '3' + ), + 'LOOKUP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::LOOKUP', + 'argumentCount' => '2,3' + ), + 'LOWER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::LOWERCASE', + 'argumentCount' => '1' + ), + 'MATCH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::MATCH', + 'argumentCount' => '2,3' + ), + 'MAX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MAX', + 'argumentCount' => '1+' + ), + 'MAXA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MAXA', + 'argumentCount' => '1+' + ), + 'MAXIF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MAXIF', + 'argumentCount' => '2+' + ), + 'MDETERM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::MDETERM', + 'argumentCount' => '1' + ), + 'MDURATION' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '5,6' + ), + 'MEDIAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MEDIAN', + 'argumentCount' => '1+' + ), + 'MEDIANIF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2+' + ), + 'MID' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::MID', + 'argumentCount' => '3' + ), + 'MIDB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::MID', + 'argumentCount' => '3' + ), + 'MIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MIN', + 'argumentCount' => '1+' + ), + 'MINA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MINA', + 'argumentCount' => '1+' + ), + 'MINIF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MINIF', + 'argumentCount' => '2+' + ), + 'MINUTE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::MINUTEOFHOUR', + 'argumentCount' => '1' + ), + 'MINVERSE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::MINVERSE', + 'argumentCount' => '1' + ), + 'MIRR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::MIRR', + 'argumentCount' => '3' + ), + 'MMULT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::MMULT', + 'argumentCount' => '2' + ), + 'MOD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::MOD', + 'argumentCount' => '2' + ), + 'MODE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::MODE', + 'argumentCount' => '1+' + ), + 'MONTH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::MONTHOFYEAR', + 'argumentCount' => '1' + ), + 'MROUND' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::MROUND', + 'argumentCount' => '2' + ), + 'MULTINOMIAL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::MULTINOMIAL', + 'argumentCount' => '1+' + ), + 'N' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::N', + 'argumentCount' => '1' + ), + 'NA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::NA', + 'argumentCount' => '0' + ), + 'NEGBINOMDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::NEGBINOMDIST', + 'argumentCount' => '3' + ), + 'NETWORKDAYS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::NETWORKDAYS', + 'argumentCount' => '2+' + ), + 'NOMINAL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::NOMINAL', + 'argumentCount' => '2' + ), + 'NORMDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::NORMDIST', + 'argumentCount' => '4' + ), + 'NORMINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::NORMINV', + 'argumentCount' => '3' + ), + 'NORMSDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::NORMSDIST', + 'argumentCount' => '1' + ), + 'NORMSINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::NORMSINV', + 'argumentCount' => '1' + ), + 'NOT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOGICAL, + 'functionCall' => 'PHPExcel_Calculation_Logical::NOT', + 'argumentCount' => '1' + ), + 'NOW' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DATETIMENOW', + 'argumentCount' => '0' + ), + 'NPER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::NPER', + 'argumentCount' => '3-5' + ), + 'NPV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::NPV', + 'argumentCount' => '2+' + ), + 'OCT2BIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::OCTTOBIN', + 'argumentCount' => '1,2' + ), + 'OCT2DEC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::OCTTODEC', + 'argumentCount' => '1' + ), + 'OCT2HEX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_ENGINEERING, + 'functionCall' => 'PHPExcel_Calculation_Engineering::OCTTOHEX', + 'argumentCount' => '1,2' + ), + 'ODD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::ODD', + 'argumentCount' => '1' + ), + 'ODDFPRICE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '8,9' + ), + 'ODDFYIELD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '8,9' + ), + 'ODDLPRICE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '7,8' + ), + 'ODDLYIELD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '7,8' + ), + 'OFFSET' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::OFFSET', + 'argumentCount' => '3,5', + 'passCellReference'=> TRUE, + 'passByReference' => array(TRUE) + ), + 'OR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOGICAL, + 'functionCall' => 'PHPExcel_Calculation_Logical::LOGICAL_OR', + 'argumentCount' => '1+' + ), + 'PEARSON' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::CORREL', + 'argumentCount' => '2' + ), + 'PERCENTILE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::PERCENTILE', + 'argumentCount' => '2' + ), + 'PERCENTRANK' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::PERCENTRANK', + 'argumentCount' => '2,3' + ), + 'PERMUT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::PERMUT', + 'argumentCount' => '2' + ), + 'PHONETIC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'PI' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'pi', + 'argumentCount' => '0' + ), + 'PMT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::PMT', + 'argumentCount' => '3-5' + ), + 'POISSON' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::POISSON', + 'argumentCount' => '3' + ), + 'POWER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::POWER', + 'argumentCount' => '2' + ), + 'PPMT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::PPMT', + 'argumentCount' => '4-6' + ), + 'PRICE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::PRICE', + 'argumentCount' => '6,7' + ), + 'PRICEDISC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::PRICEDISC', + 'argumentCount' => '4,5' + ), + 'PRICEMAT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::PRICEMAT', + 'argumentCount' => '5,6' + ), + 'PROB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '3,4' + ), + 'PRODUCT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::PRODUCT', + 'argumentCount' => '1+' + ), + 'PROPER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::PROPERCASE', + 'argumentCount' => '1' + ), + 'PV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::PV', + 'argumentCount' => '3-5' + ), + 'QUARTILE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::QUARTILE', + 'argumentCount' => '2' + ), + 'QUOTIENT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::QUOTIENT', + 'argumentCount' => '2' + ), + 'RADIANS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'deg2rad', + 'argumentCount' => '1' + ), + 'RAND' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::RAND', + 'argumentCount' => '0' + ), + 'RANDBETWEEN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::RAND', + 'argumentCount' => '2' + ), + 'RANK' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::RANK', + 'argumentCount' => '2,3' + ), + 'RATE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::RATE', + 'argumentCount' => '3-6' + ), + 'RECEIVED' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::RECEIVED', + 'argumentCount' => '4-5' + ), + 'REPLACE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::REPLACE', + 'argumentCount' => '4' + ), + 'REPLACEB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::REPLACE', + 'argumentCount' => '4' + ), + 'REPT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'str_repeat', + 'argumentCount' => '2' + ), + 'RIGHT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::RIGHT', + 'argumentCount' => '1,2' + ), + 'RIGHTB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::RIGHT', + 'argumentCount' => '1,2' + ), + 'ROMAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::ROMAN', + 'argumentCount' => '1,2' + ), + 'ROUND' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'round', + 'argumentCount' => '2' + ), + 'ROUNDDOWN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::ROUNDDOWN', + 'argumentCount' => '2' + ), + 'ROUNDUP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::ROUNDUP', + 'argumentCount' => '2' + ), + 'ROW' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::ROW', + 'argumentCount' => '-1', + 'passByReference' => array(TRUE) + ), + 'ROWS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::ROWS', + 'argumentCount' => '1' + ), + 'RSQ' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::RSQ', + 'argumentCount' => '2' + ), + 'RTD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1+' + ), + 'SEARCH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::SEARCHINSENSITIVE', + 'argumentCount' => '2,3' + ), + 'SEARCHB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::SEARCHINSENSITIVE', + 'argumentCount' => '2,3' + ), + 'SECOND' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::SECONDOFMINUTE', + 'argumentCount' => '1' + ), + 'SERIESSUM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SERIESSUM', + 'argumentCount' => '4' + ), + 'SIGN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SIGN', + 'argumentCount' => '1' + ), + 'SIN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'sin', + 'argumentCount' => '1' + ), + 'SINH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'sinh', + 'argumentCount' => '1' + ), + 'SKEW' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::SKEW', + 'argumentCount' => '1+' + ), + 'SLN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::SLN', + 'argumentCount' => '3' + ), + 'SLOPE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::SLOPE', + 'argumentCount' => '2' + ), + 'SMALL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::SMALL', + 'argumentCount' => '2' + ), + 'SQRT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'sqrt', + 'argumentCount' => '1' + ), + 'SQRTPI' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SQRTPI', + 'argumentCount' => '1' + ), + 'STANDARDIZE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::STANDARDIZE', + 'argumentCount' => '3' + ), + 'STDEV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::STDEV', + 'argumentCount' => '1+' + ), + 'STDEVA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::STDEVA', + 'argumentCount' => '1+' + ), + 'STDEVP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::STDEVP', + 'argumentCount' => '1+' + ), + 'STDEVPA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::STDEVPA', + 'argumentCount' => '1+' + ), + 'STEYX' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::STEYX', + 'argumentCount' => '2' + ), + 'SUBSTITUTE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::SUBSTITUTE', + 'argumentCount' => '3,4' + ), + 'SUBTOTAL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUBTOTAL', + 'argumentCount' => '2+' + ), + 'SUM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUM', + 'argumentCount' => '1+' + ), + 'SUMIF' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUMIF', + 'argumentCount' => '2,3' + ), + 'SUMIFS' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '?' + ), + 'SUMPRODUCT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUMPRODUCT', + 'argumentCount' => '1+' + ), + 'SUMSQ' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUMSQ', + 'argumentCount' => '1+' + ), + 'SUMX2MY2' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUMX2MY2', + 'argumentCount' => '2' + ), + 'SUMX2PY2' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUMX2PY2', + 'argumentCount' => '2' + ), + 'SUMXMY2' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::SUMXMY2', + 'argumentCount' => '2' + ), + 'SYD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::SYD', + 'argumentCount' => '4' + ), + 'T' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::RETURNSTRING', + 'argumentCount' => '1' + ), + 'TAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'tan', + 'argumentCount' => '1' + ), + 'TANH' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'tanh', + 'argumentCount' => '1' + ), + 'TBILLEQ' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::TBILLEQ', + 'argumentCount' => '3' + ), + 'TBILLPRICE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::TBILLPRICE', + 'argumentCount' => '3' + ), + 'TBILLYIELD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::TBILLYIELD', + 'argumentCount' => '3' + ), + 'TDIST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::TDIST', + 'argumentCount' => '3' + ), + 'TEXT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::TEXTFORMAT', + 'argumentCount' => '2' + ), + 'TIME' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::TIME', + 'argumentCount' => '3' + ), + 'TIMEVALUE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::TIMEVALUE', + 'argumentCount' => '1' + ), + 'TINV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::TINV', + 'argumentCount' => '2' + ), + 'TODAY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DATENOW', + 'argumentCount' => '0' + ), + 'TRANSPOSE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::TRANSPOSE', + 'argumentCount' => '1' + ), + 'TREND' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::TREND', + 'argumentCount' => '1-4' + ), + 'TRIM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::TRIMSPACES', + 'argumentCount' => '1' + ), + 'TRIMMEAN' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::TRIMMEAN', + 'argumentCount' => '2' + ), + 'TRUE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOGICAL, + 'functionCall' => 'PHPExcel_Calculation_Logical::TRUE', + 'argumentCount' => '0' + ), + 'TRUNC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_MATH_AND_TRIG, + 'functionCall' => 'PHPExcel_Calculation_MathTrig::TRUNC', + 'argumentCount' => '1,2' + ), + 'TTEST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '4' + ), + 'TYPE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::TYPE', + 'argumentCount' => '1' + ), + 'UPPER' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_TextData::UPPERCASE', + 'argumentCount' => '1' + ), + 'USDOLLAR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '2' + ), + 'VALUE' => array('category' => PHPExcel_Calculation_Function::CATEGORY_TEXT_AND_DATA, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '1' + ), + 'VAR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::VARFunc', + 'argumentCount' => '1+' + ), + 'VARA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::VARA', + 'argumentCount' => '1+' + ), + 'VARP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::VARP', + 'argumentCount' => '1+' + ), + 'VARPA' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::VARPA', + 'argumentCount' => '1+' + ), + 'VDB' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '5-7' + ), + 'VERSION' => array('category' => PHPExcel_Calculation_Function::CATEGORY_INFORMATION, + 'functionCall' => 'PHPExcel_Calculation_Functions::VERSION', + 'argumentCount' => '0' + ), + 'VLOOKUP' => array('category' => PHPExcel_Calculation_Function::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => 'PHPExcel_Calculation_LookupRef::VLOOKUP', + 'argumentCount' => '3,4' + ), + 'WEEKDAY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::DAYOFWEEK', + 'argumentCount' => '1,2' + ), + 'WEEKNUM' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::WEEKOFYEAR', + 'argumentCount' => '1,2' + ), + 'WEIBULL' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::WEIBULL', + 'argumentCount' => '4' + ), + 'WORKDAY' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::WORKDAY', + 'argumentCount' => '2+' + ), + 'XIRR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::XIRR', + 'argumentCount' => '2,3' + ), + 'XNPV' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::XNPV', + 'argumentCount' => '3' + ), + 'YEAR' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::YEAR', + 'argumentCount' => '1' + ), + 'YEARFRAC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_DATE_AND_TIME, + 'functionCall' => 'PHPExcel_Calculation_DateTime::YEARFRAC', + 'argumentCount' => '2,3' + ), + 'YIELD' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Functions::DUMMY', + 'argumentCount' => '6,7' + ), + 'YIELDDISC' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::YIELDDISC', + 'argumentCount' => '4,5' + ), + 'YIELDMAT' => array('category' => PHPExcel_Calculation_Function::CATEGORY_FINANCIAL, + 'functionCall' => 'PHPExcel_Calculation_Financial::YIELDMAT', + 'argumentCount' => '5,6' + ), + 'ZTEST' => array('category' => PHPExcel_Calculation_Function::CATEGORY_STATISTICAL, + 'functionCall' => 'PHPExcel_Calculation_Statistical::ZTEST', + 'argumentCount' => '2-3' + ) + ); + + + // Internal functions used for special control purposes + private static $_controlFunctions = array( + 'MKMATRIX' => array('argumentCount' => '*', + 'functionCall' => 'self::_mkMatrix' + ) + ); + + + + + private function __construct(PHPExcel $workbook = NULL) { + $setPrecision = (PHP_INT_SIZE == 4) ? 14 : 16; + $this->_savedPrecision = ini_get('precision'); + if ($this->_savedPrecision < $setPrecision) { + ini_set('precision',$setPrecision); + } + + if ($workbook !== NULL) { + self::$_workbookSets[$workbook->getID()] = $this; + } + + $this->_workbook = $workbook; + $this->_cyclicReferenceStack = new PHPExcel_CalcEngine_CyclicReferenceStack(); + $this->_debugLog = new PHPExcel_CalcEngine_Logger($this->_cyclicReferenceStack); + } // function __construct() + + + public function __destruct() { + if ($this->_savedPrecision != ini_get('precision')) { + ini_set('precision',$this->_savedPrecision); + } + } + + private static function _loadLocales() { + $localeFileDirectory = PHPEXCEL_ROOT.'PHPExcel/locale/'; + foreach (glob($localeFileDirectory.'/*',GLOB_ONLYDIR) as $filename) { + $filename = substr($filename,strlen($localeFileDirectory)+1); + if ($filename != 'en') { + self::$_validLocaleLanguages[] = $filename; + } + } + } + + /** + * Get an instance of this class + * + * @access public + * @param PHPExcel $workbook Injected workbook for working with a PHPExcel object, + * or NULL to create a standalone claculation engine + * @return PHPExcel_Calculation + */ + public static function getInstance(PHPExcel $workbook = NULL) { + if ($workbook !== NULL) { + if (isset(self::$_workbookSets[$workbook->getID()])) { + return self::$_workbookSets[$workbook->getID()]; + } + return new PHPExcel_Calculation($workbook); + } + + if (!isset(self::$_instance) || (self::$_instance === NULL)) { + self::$_instance = new PHPExcel_Calculation(); + } + + return self::$_instance; + } // function getInstance() + + /** + * Unset an instance of this class + * + * @access public + * @param PHPExcel $workbook Injected workbook identifying the instance to unset + */ + public static function unsetInstance(PHPExcel $workbook = NULL) { + if ($workbook !== NULL) { + if (isset(self::$_workbookSets[$workbook->getID()])) { + unset(self::$_workbookSets[$workbook->getID()]); + } + } + } + + /** + * Flush the calculation cache for any existing instance of this class + * but only if a PHPExcel_Calculation instance exists + * + * @access public + * @return null + */ + public function flushInstance() { + $this->clearCalculationCache(); + } // function flushInstance() + + + /** + * Get the debuglog for this claculation engine instance + * + * @access public + * @return PHPExcel_CalcEngine_Logger + */ + public function getDebugLog() { + return $this->_debugLog; + } + + /** + * __clone implementation. Cloning should not be allowed in a Singleton! + * + * @access public + * @throws PHPExcel_Calculation_Exception + */ + public final function __clone() { + throw new PHPExcel_Calculation_Exception ('Cloning the calculation engine is not allowed!'); + } // function __clone() + + + /** + * Return the locale-specific translation of TRUE + * + * @access public + * @return string locale-specific translation of TRUE + */ + public static function getTRUE() { + return self::$_localeBoolean['TRUE']; + } + + /** + * Return the locale-specific translation of FALSE + * + * @access public + * @return string locale-specific translation of FALSE + */ + public static function getFALSE() { + return self::$_localeBoolean['FALSE']; + } + + /** + * Set the Array Return Type (Array or Value of first element in the array) + * + * @access public + * @param string $returnType Array return type + * @return boolean Success or failure + */ + public static function setArrayReturnType($returnType) { + if (($returnType == self::RETURN_ARRAY_AS_VALUE) || + ($returnType == self::RETURN_ARRAY_AS_ERROR) || + ($returnType == self::RETURN_ARRAY_AS_ARRAY)) { + self::$returnArrayAsType = $returnType; + return TRUE; + } + return FALSE; + } // function setArrayReturnType() + + + /** + * Return the Array Return Type (Array or Value of first element in the array) + * + * @access public + * @return string $returnType Array return type + */ + public static function getArrayReturnType() { + return self::$returnArrayAsType; + } // function getArrayReturnType() + + + /** + * Is calculation caching enabled? + * + * @access public + * @return boolean + */ + public function getCalculationCacheEnabled() { + return $this->_calculationCacheEnabled; + } // function getCalculationCacheEnabled() + + /** + * Enable/disable calculation cache + * + * @access public + * @param boolean $pValue + */ + public function setCalculationCacheEnabled($pValue = TRUE) { + $this->_calculationCacheEnabled = $pValue; + $this->clearCalculationCache(); + } // function setCalculationCacheEnabled() + + + /** + * Enable calculation cache + */ + public function enableCalculationCache() { + $this->setCalculationCacheEnabled(TRUE); + } // function enableCalculationCache() + + + /** + * Disable calculation cache + */ + public function disableCalculationCache() { + $this->setCalculationCacheEnabled(FALSE); + } // function disableCalculationCache() + + + /** + * Clear calculation cache + */ + public function clearCalculationCache() { + $this->_calculationCache = array(); + } // function clearCalculationCache() + + /** + * Clear calculation cache for a specified worksheet + * + * @param string $worksheetName + */ + public function clearCalculationCacheForWorksheet($worksheetName) { + if (isset($this->_calculationCache[$worksheetName])) { + unset($this->_calculationCache[$worksheetName]); + } + } // function clearCalculationCacheForWorksheet() + + /** + * Rename calculation cache for a specified worksheet + * + * @param string $fromWorksheetName + * @param string $toWorksheetName + */ + public function renameCalculationCacheForWorksheet($fromWorksheetName, $toWorksheetName) { + if (isset($this->_calculationCache[$fromWorksheetName])) { + $this->_calculationCache[$toWorksheetName] = &$this->_calculationCache[$fromWorksheetName]; + unset($this->_calculationCache[$fromWorksheetName]); + } + } // function renameCalculationCacheForWorksheet() + + + /** + * Get the currently defined locale code + * + * @return string + */ + public function getLocale() { + return self::$_localeLanguage; + } // function getLocale() + + + /** + * Set the locale code + * + * @param string $locale The locale to use for formula translation + * @return boolean + */ + public function setLocale($locale = 'en_us') { + // Identify our locale and language + $language = $locale = strtolower($locale); + if (strpos($locale,'_') !== FALSE) { + list($language) = explode('_',$locale); + } + + if (count(self::$_validLocaleLanguages) == 1) + self::_loadLocales(); + + // Test whether we have any language data for this language (any locale) + if (in_array($language,self::$_validLocaleLanguages)) { + // initialise language/locale settings + self::$_localeFunctions = array(); + self::$_localeArgumentSeparator = ','; + self::$_localeBoolean = array('TRUE' => 'TRUE', 'FALSE' => 'FALSE', 'NULL' => 'NULL'); + // Default is English, if user isn't requesting english, then read the necessary data from the locale files + if ($locale != 'en_us') { + // Search for a file with a list of function names for locale + $functionNamesFile = PHPEXCEL_ROOT . 'PHPExcel'.DIRECTORY_SEPARATOR.'locale'.DIRECTORY_SEPARATOR.str_replace('_',DIRECTORY_SEPARATOR,$locale).DIRECTORY_SEPARATOR.'functions'; + if (!file_exists($functionNamesFile)) { + // If there isn't a locale specific function file, look for a language specific function file + $functionNamesFile = PHPEXCEL_ROOT . 'PHPExcel'.DIRECTORY_SEPARATOR.'locale'.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.'functions'; + if (!file_exists($functionNamesFile)) { + return FALSE; + } + } + // Retrieve the list of locale or language specific function names + $localeFunctions = file($functionNamesFile,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach ($localeFunctions as $localeFunction) { + list($localeFunction) = explode('##',$localeFunction); // Strip out comments + if (strpos($localeFunction,'=') !== FALSE) { + list($fName,$lfName) = explode('=',$localeFunction); + $fName = trim($fName); + $lfName = trim($lfName); + if ((isset(self::$_PHPExcelFunctions[$fName])) && ($lfName != '') && ($fName != $lfName)) { + self::$_localeFunctions[$fName] = $lfName; + } + } + } + // Default the TRUE and FALSE constants to the locale names of the TRUE() and FALSE() functions + if (isset(self::$_localeFunctions['TRUE'])) { self::$_localeBoolean['TRUE'] = self::$_localeFunctions['TRUE']; } + if (isset(self::$_localeFunctions['FALSE'])) { self::$_localeBoolean['FALSE'] = self::$_localeFunctions['FALSE']; } + + $configFile = PHPEXCEL_ROOT . 'PHPExcel'.DIRECTORY_SEPARATOR.'locale'.DIRECTORY_SEPARATOR.str_replace('_',DIRECTORY_SEPARATOR,$locale).DIRECTORY_SEPARATOR.'config'; + if (!file_exists($configFile)) { + $configFile = PHPEXCEL_ROOT . 'PHPExcel'.DIRECTORY_SEPARATOR.'locale'.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.'config'; + } + if (file_exists($configFile)) { + $localeSettings = file($configFile,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach ($localeSettings as $localeSetting) { + list($localeSetting) = explode('##',$localeSetting); // Strip out comments + if (strpos($localeSetting,'=') !== FALSE) { + list($settingName,$settingValue) = explode('=',$localeSetting); + $settingName = strtoupper(trim($settingName)); + switch ($settingName) { + case 'ARGUMENTSEPARATOR' : + self::$_localeArgumentSeparator = trim($settingValue); + break; + } + } + } + } + } + + self::$functionReplaceFromExcel = self::$functionReplaceToExcel = + self::$functionReplaceFromLocale = self::$functionReplaceToLocale = NULL; + self::$_localeLanguage = $locale; + return TRUE; + } + return FALSE; + } // function setLocale() + + + + public static function _translateSeparator($fromSeparator,$toSeparator,$formula,&$inBraces) { + $strlen = mb_strlen($formula); + for ($i = 0; $i < $strlen; ++$i) { + $chr = mb_substr($formula,$i,1); + switch ($chr) { + case '{' : $inBraces = TRUE; + break; + case '}' : $inBraces = FALSE; + break; + case $fromSeparator : + if (!$inBraces) { + $formula = mb_substr($formula,0,$i).$toSeparator.mb_substr($formula,$i+1); + } + } + } + return $formula; + } + + private static function _translateFormula($from,$to,$formula,$fromSeparator,$toSeparator) { + // Convert any Excel function names to the required language + if (self::$_localeLanguage !== 'en_us') { + $inBraces = FALSE; + // If there is the possibility of braces within a quoted string, then we don't treat those as matrix indicators + if (strpos($formula,'"') !== FALSE) { + // So instead we skip replacing in any quoted strings by only replacing in every other array element after we've exploded + // the formula + $temp = explode('"',$formula); + $i = FALSE; + foreach($temp as &$value) { + // Only count/replace in alternating array entries + if ($i = !$i) { + $value = preg_replace($from,$to,$value); + $value = self::_translateSeparator($fromSeparator,$toSeparator,$value,$inBraces); + } + } + unset($value); + // Then rebuild the formula string + $formula = implode('"',$temp); + } else { + // If there's no quoted strings, then we do a simple count/replace + $formula = preg_replace($from,$to,$formula); + $formula = self::_translateSeparator($fromSeparator,$toSeparator,$formula,$inBraces); + } + } + + return $formula; + } + + private static $functionReplaceFromExcel = NULL; + private static $functionReplaceToLocale = NULL; + + public function _translateFormulaToLocale($formula) { + if (self::$functionReplaceFromExcel === NULL) { + self::$functionReplaceFromExcel = array(); + foreach(array_keys(self::$_localeFunctions) as $excelFunctionName) { + self::$functionReplaceFromExcel[] = '/(@?[^\w\.])'.preg_quote($excelFunctionName).'([\s]*\()/Ui'; + } + foreach(array_keys(self::$_localeBoolean) as $excelBoolean) { + self::$functionReplaceFromExcel[] = '/(@?[^\w\.])'.preg_quote($excelBoolean).'([^\w\.])/Ui'; + } + + } + + if (self::$functionReplaceToLocale === NULL) { + self::$functionReplaceToLocale = array(); + foreach(array_values(self::$_localeFunctions) as $localeFunctionName) { + self::$functionReplaceToLocale[] = '$1'.trim($localeFunctionName).'$2'; + } + foreach(array_values(self::$_localeBoolean) as $localeBoolean) { + self::$functionReplaceToLocale[] = '$1'.trim($localeBoolean).'$2'; + } + } + + return self::_translateFormula(self::$functionReplaceFromExcel,self::$functionReplaceToLocale,$formula,',',self::$_localeArgumentSeparator); + } // function _translateFormulaToLocale() + + + private static $functionReplaceFromLocale = NULL; + private static $functionReplaceToExcel = NULL; + + public function _translateFormulaToEnglish($formula) { + if (self::$functionReplaceFromLocale === NULL) { + self::$functionReplaceFromLocale = array(); + foreach(array_values(self::$_localeFunctions) as $localeFunctionName) { + self::$functionReplaceFromLocale[] = '/(@?[^\w\.])'.preg_quote($localeFunctionName).'([\s]*\()/Ui'; + } + foreach(array_values(self::$_localeBoolean) as $excelBoolean) { + self::$functionReplaceFromLocale[] = '/(@?[^\w\.])'.preg_quote($excelBoolean).'([^\w\.])/Ui'; + } + } + + if (self::$functionReplaceToExcel === NULL) { + self::$functionReplaceToExcel = array(); + foreach(array_keys(self::$_localeFunctions) as $excelFunctionName) { + self::$functionReplaceToExcel[] = '$1'.trim($excelFunctionName).'$2'; + } + foreach(array_keys(self::$_localeBoolean) as $excelBoolean) { + self::$functionReplaceToExcel[] = '$1'.trim($excelBoolean).'$2'; + } + } + + return self::_translateFormula(self::$functionReplaceFromLocale,self::$functionReplaceToExcel,$formula,self::$_localeArgumentSeparator,','); + } // function _translateFormulaToEnglish() + + + public static function _localeFunc($function) { + if (self::$_localeLanguage !== 'en_us') { + $functionName = trim($function,'('); + if (isset(self::$_localeFunctions[$functionName])) { + $brace = ($functionName != $function); + $function = self::$_localeFunctions[$functionName]; + if ($brace) { $function .= '('; } + } + } + return $function; + } + + + + + /** + * Wrap string values in quotes + * + * @param mixed $value + * @return mixed + */ + public static function _wrapResult($value) { + if (is_string($value)) { + // Error values cannot be "wrapped" + if (preg_match('/^'.self::CALCULATION_REGEXP_ERROR.'$/i', $value, $match)) { + // Return Excel errors "as is" + return $value; + } + // Return strings wrapped in quotes + return '"'.$value.'"'; + // Convert numeric errors to NaN error + } else if((is_float($value)) && ((is_nan($value)) || (is_infinite($value)))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + return $value; + } // function _wrapResult() + + + /** + * Remove quotes used as a wrapper to identify string values + * + * @param mixed $value + * @return mixed + */ + public static function _unwrapResult($value) { + if (is_string($value)) { + if ((isset($value{0})) && ($value{0} == '"') && (substr($value,-1) == '"')) { + return substr($value,1,-1); + } + // Convert numeric errors to NaN error + } else if((is_float($value)) && ((is_nan($value)) || (is_infinite($value)))) { + return PHPExcel_Calculation_Functions::NaN(); + } + return $value; + } // function _unwrapResult() + + + + + /** + * Calculate cell value (using formula from a cell ID) + * Retained for backward compatibility + * + * @access public + * @param PHPExcel_Cell $pCell Cell to calculate + * @return mixed + * @throws PHPExcel_Calculation_Exception + */ + public function calculate(PHPExcel_Cell $pCell = NULL) { + try { + return $this->calculateCellValue($pCell); + } catch (PHPExcel_Exception $e) { + throw new PHPExcel_Calculation_Exception($e->getMessage()); + } + } // function calculate() + + + /** + * Calculate the value of a cell formula + * + * @access public + * @param PHPExcel_Cell $pCell Cell to calculate + * @param Boolean $resetLog Flag indicating whether the debug log should be reset or not + * @return mixed + * @throws PHPExcel_Calculation_Exception + */ + public function calculateCellValue(PHPExcel_Cell $pCell = NULL, $resetLog = TRUE) { + if ($pCell === NULL) { + return NULL; + } + + $returnArrayAsType = self::$returnArrayAsType; + if ($resetLog) { + // Initialise the logging settings if requested + $this->formulaError = null; + $this->_debugLog->clearLog(); + $this->_cyclicReferenceStack->clear(); + $this->_cyclicFormulaCount = 1; + + self::$returnArrayAsType = self::RETURN_ARRAY_AS_ARRAY; + } + + // Execute the calculation for the cell formula + try { + $result = self::_unwrapResult($this->_calculateFormulaValue($pCell->getValue(), $pCell->getCoordinate(), $pCell)); + } catch (PHPExcel_Exception $e) { + throw new PHPExcel_Calculation_Exception($e->getMessage()); + } + + if ((is_array($result)) && (self::$returnArrayAsType != self::RETURN_ARRAY_AS_ARRAY)) { + self::$returnArrayAsType = $returnArrayAsType; + $testResult = PHPExcel_Calculation_Functions::flattenArray($result); + if (self::$returnArrayAsType == self::RETURN_ARRAY_AS_ERROR) { + return PHPExcel_Calculation_Functions::VALUE(); + } + // If there's only a single cell in the array, then we allow it + if (count($testResult) != 1) { + // If keys are numeric, then it's a matrix result rather than a cell range result, so we permit it + $r = array_keys($result); + $r = array_shift($r); + if (!is_numeric($r)) { return PHPExcel_Calculation_Functions::VALUE(); } + if (is_array($result[$r])) { + $c = array_keys($result[$r]); + $c = array_shift($c); + if (!is_numeric($c)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + } + $result = array_shift($testResult); + } + self::$returnArrayAsType = $returnArrayAsType; + + + if ($result === NULL) { + return 0; + } elseif((is_float($result)) && ((is_nan($result)) || (is_infinite($result)))) { + return PHPExcel_Calculation_Functions::NaN(); + } + return $result; + } // function calculateCellValue( + + + /** + * Validate and parse a formula string + * + * @param string $formula Formula to parse + * @return array + * @throws PHPExcel_Calculation_Exception + */ + public function parseFormula($formula) { + // Basic validation that this is indeed a formula + // We return an empty array if not + $formula = trim($formula); + if ((!isset($formula{0})) || ($formula{0} != '=')) return array(); + $formula = ltrim(substr($formula,1)); + if (!isset($formula{0})) return array(); + + // Parse the formula and return the token stack + return $this->_parseFormula($formula); + } // function parseFormula() + + + /** + * Calculate the value of a formula + * + * @param string $formula Formula to parse + * @param string $cellID Address of the cell to calculate + * @param PHPExcel_Cell $pCell Cell to calculate + * @return mixed + * @throws PHPExcel_Calculation_Exception + */ + public function calculateFormula($formula, $cellID=NULL, PHPExcel_Cell $pCell = NULL) { + // Initialise the logging settings + $this->formulaError = null; + $this->_debugLog->clearLog(); + $this->_cyclicReferenceStack->clear(); + + // Disable calculation cacheing because it only applies to cell calculations, not straight formulae + // But don't actually flush any cache + $resetCache = $this->getCalculationCacheEnabled(); + $this->_calculationCacheEnabled = FALSE; + // Execute the calculation + try { + $result = self::_unwrapResult($this->_calculateFormulaValue($formula, $cellID, $pCell)); + } catch (PHPExcel_Exception $e) { + throw new PHPExcel_Calculation_Exception($e->getMessage()); + } + + // Reset calculation cacheing to its previous state + $this->_calculationCacheEnabled = $resetCache; + + return $result; + } // function calculateFormula() + + + public function getValueFromCache($worksheetName, $cellID, &$cellValue) { + // Is calculation cacheing enabled? + // Is the value present in calculation cache? +//echo 'Test cache for ',$worksheetName,'!',$cellID,PHP_EOL; + $this->_debugLog->writeDebugLog('Testing cache value for cell ', $worksheetName, '!', $cellID); + if (($this->_calculationCacheEnabled) && (isset($this->_calculationCache[$worksheetName][$cellID]))) { +//echo 'Retrieve from cache',PHP_EOL; + $this->_debugLog->writeDebugLog('Retrieving value for cell ', $worksheetName, '!', $cellID, ' from cache'); + // Return the cached result + $cellValue = $this->_calculationCache[$worksheetName][$cellID]; + return TRUE; + } + return FALSE; + } + + public function saveValueToCache($worksheetName, $cellID, $cellValue) { + if ($this->_calculationCacheEnabled) { + $this->_calculationCache[$worksheetName][$cellID] = $cellValue; + } + } + + /** + * Parse a cell formula and calculate its value + * + * @param string $formula The formula to parse and calculate + * @param string $cellID The ID (e.g. A3) of the cell that we are calculating + * @param PHPExcel_Cell $pCell Cell to calculate + * @return mixed + * @throws PHPExcel_Calculation_Exception + */ + public function _calculateFormulaValue($formula, $cellID=null, PHPExcel_Cell $pCell = null) { + $cellValue = ''; + + // Basic validation that this is indeed a formula + // We simply return the cell value if not + $formula = trim($formula); + if ($formula{0} != '=') return self::_wrapResult($formula); + $formula = ltrim(substr($formula,1)); + if (!isset($formula{0})) return self::_wrapResult($formula); + + $pCellParent = ($pCell !== NULL) ? $pCell->getWorksheet() : NULL; + $wsTitle = ($pCellParent !== NULL) ? $pCellParent->getTitle() : "\x00Wrk"; + + if (($cellID !== NULL) && ($this->getValueFromCache($wsTitle, $cellID, $cellValue))) { + return $cellValue; + } + + if (($wsTitle{0} !== "\x00") && ($this->_cyclicReferenceStack->onStack($wsTitle.'!'.$cellID))) { + if ($this->cyclicFormulaCount <= 0) { + return $this->_raiseFormulaError('Cyclic Reference in Formula'); + } elseif (($this->_cyclicFormulaCount >= $this->cyclicFormulaCount) && + ($this->_cyclicFormulaCell == $wsTitle.'!'.$cellID)) { + return $cellValue; + } elseif ($this->_cyclicFormulaCell == $wsTitle.'!'.$cellID) { + ++$this->_cyclicFormulaCount; + if ($this->_cyclicFormulaCount >= $this->cyclicFormulaCount) { + return $cellValue; + } + } elseif ($this->_cyclicFormulaCell == '') { + $this->_cyclicFormulaCell = $wsTitle.'!'.$cellID; + if ($this->_cyclicFormulaCount >= $this->cyclicFormulaCount) { + return $cellValue; + } + } + } + + // Parse the formula onto the token stack and calculate the value + $this->_cyclicReferenceStack->push($wsTitle.'!'.$cellID); + $cellValue = $this->_processTokenStack($this->_parseFormula($formula, $pCell), $cellID, $pCell); + $this->_cyclicReferenceStack->pop(); + + // Save to calculation cache + if ($cellID !== NULL) { + $this->saveValueToCache($wsTitle, $cellID, $cellValue); + } + + // Return the calculated value + return $cellValue; + } // function _calculateFormulaValue() + + + /** + * Ensure that paired matrix operands are both matrices and of the same size + * + * @param mixed &$operand1 First matrix operand + * @param mixed &$operand2 Second matrix operand + * @param integer $resize Flag indicating whether the matrices should be resized to match + * and (if so), whether the smaller dimension should grow or the + * larger should shrink. + * 0 = no resize + * 1 = shrink to fit + * 2 = extend to fit + */ + private static function _checkMatrixOperands(&$operand1,&$operand2,$resize = 1) { + // Examine each of the two operands, and turn them into an array if they aren't one already + // Note that this function should only be called if one or both of the operand is already an array + if (!is_array($operand1)) { + list($matrixRows,$matrixColumns) = self::_getMatrixDimensions($operand2); + $operand1 = array_fill(0,$matrixRows,array_fill(0,$matrixColumns,$operand1)); + $resize = 0; + } elseif (!is_array($operand2)) { + list($matrixRows,$matrixColumns) = self::_getMatrixDimensions($operand1); + $operand2 = array_fill(0,$matrixRows,array_fill(0,$matrixColumns,$operand2)); + $resize = 0; + } + + list($matrix1Rows,$matrix1Columns) = self::_getMatrixDimensions($operand1); + list($matrix2Rows,$matrix2Columns) = self::_getMatrixDimensions($operand2); + if (($matrix1Rows == $matrix2Columns) && ($matrix2Rows == $matrix1Columns)) { + $resize = 1; + } + + if ($resize == 2) { + // Given two matrices of (potentially) unequal size, convert the smaller in each dimension to match the larger + self::_resizeMatricesExtend($operand1,$operand2,$matrix1Rows,$matrix1Columns,$matrix2Rows,$matrix2Columns); + } elseif ($resize == 1) { + // Given two matrices of (potentially) unequal size, convert the larger in each dimension to match the smaller + self::_resizeMatricesShrink($operand1,$operand2,$matrix1Rows,$matrix1Columns,$matrix2Rows,$matrix2Columns); + } + return array( $matrix1Rows,$matrix1Columns,$matrix2Rows,$matrix2Columns); + } // function _checkMatrixOperands() + + + /** + * Read the dimensions of a matrix, and re-index it with straight numeric keys starting from row 0, column 0 + * + * @param mixed &$matrix matrix operand + * @return array An array comprising the number of rows, and number of columns + */ + public static function _getMatrixDimensions(&$matrix) { + $matrixRows = count($matrix); + $matrixColumns = 0; + foreach($matrix as $rowKey => $rowValue) { + $matrixColumns = max(count($rowValue),$matrixColumns); + if (!is_array($rowValue)) { + $matrix[$rowKey] = array($rowValue); + } else { + $matrix[$rowKey] = array_values($rowValue); + } + } + $matrix = array_values($matrix); + return array($matrixRows,$matrixColumns); + } // function _getMatrixDimensions() + + + /** + * Ensure that paired matrix operands are both matrices of the same size + * + * @param mixed &$matrix1 First matrix operand + * @param mixed &$matrix2 Second matrix operand + * @param integer $matrix1Rows Row size of first matrix operand + * @param integer $matrix1Columns Column size of first matrix operand + * @param integer $matrix2Rows Row size of second matrix operand + * @param integer $matrix2Columns Column size of second matrix operand + */ + private static function _resizeMatricesShrink(&$matrix1,&$matrix2,$matrix1Rows,$matrix1Columns,$matrix2Rows,$matrix2Columns) { + if (($matrix2Columns < $matrix1Columns) || ($matrix2Rows < $matrix1Rows)) { + if ($matrix2Rows < $matrix1Rows) { + for ($i = $matrix2Rows; $i < $matrix1Rows; ++$i) { + unset($matrix1[$i]); + } + } + if ($matrix2Columns < $matrix1Columns) { + for ($i = 0; $i < $matrix1Rows; ++$i) { + for ($j = $matrix2Columns; $j < $matrix1Columns; ++$j) { + unset($matrix1[$i][$j]); + } + } + } + } + + if (($matrix1Columns < $matrix2Columns) || ($matrix1Rows < $matrix2Rows)) { + if ($matrix1Rows < $matrix2Rows) { + for ($i = $matrix1Rows; $i < $matrix2Rows; ++$i) { + unset($matrix2[$i]); + } + } + if ($matrix1Columns < $matrix2Columns) { + for ($i = 0; $i < $matrix2Rows; ++$i) { + for ($j = $matrix1Columns; $j < $matrix2Columns; ++$j) { + unset($matrix2[$i][$j]); + } + } + } + } + } // function _resizeMatricesShrink() + + + /** + * Ensure that paired matrix operands are both matrices of the same size + * + * @param mixed &$matrix1 First matrix operand + * @param mixed &$matrix2 Second matrix operand + * @param integer $matrix1Rows Row size of first matrix operand + * @param integer $matrix1Columns Column size of first matrix operand + * @param integer $matrix2Rows Row size of second matrix operand + * @param integer $matrix2Columns Column size of second matrix operand + */ + private static function _resizeMatricesExtend(&$matrix1,&$matrix2,$matrix1Rows,$matrix1Columns,$matrix2Rows,$matrix2Columns) { + if (($matrix2Columns < $matrix1Columns) || ($matrix2Rows < $matrix1Rows)) { + if ($matrix2Columns < $matrix1Columns) { + for ($i = 0; $i < $matrix2Rows; ++$i) { + $x = $matrix2[$i][$matrix2Columns-1]; + for ($j = $matrix2Columns; $j < $matrix1Columns; ++$j) { + $matrix2[$i][$j] = $x; + } + } + } + if ($matrix2Rows < $matrix1Rows) { + $x = $matrix2[$matrix2Rows-1]; + for ($i = 0; $i < $matrix1Rows; ++$i) { + $matrix2[$i] = $x; + } + } + } + + if (($matrix1Columns < $matrix2Columns) || ($matrix1Rows < $matrix2Rows)) { + if ($matrix1Columns < $matrix2Columns) { + for ($i = 0; $i < $matrix1Rows; ++$i) { + $x = $matrix1[$i][$matrix1Columns-1]; + for ($j = $matrix1Columns; $j < $matrix2Columns; ++$j) { + $matrix1[$i][$j] = $x; + } + } + } + if ($matrix1Rows < $matrix2Rows) { + $x = $matrix1[$matrix1Rows-1]; + for ($i = 0; $i < $matrix2Rows; ++$i) { + $matrix1[$i] = $x; + } + } + } + } // function _resizeMatricesExtend() + + + /** + * Format details of an operand for display in the log (based on operand type) + * + * @param mixed $value First matrix operand + * @return mixed + */ + private function _showValue($value) { + if ($this->_debugLog->getWriteDebugLog()) { + $testArray = PHPExcel_Calculation_Functions::flattenArray($value); + if (count($testArray) == 1) { + $value = array_pop($testArray); + } + + if (is_array($value)) { + $returnMatrix = array(); + $pad = $rpad = ', '; + foreach($value as $row) { + if (is_array($row)) { + $returnMatrix[] = implode($pad,array_map(array($this,'_showValue'),$row)); + $rpad = '; '; + } else { + $returnMatrix[] = $this->_showValue($row); + } + } + return '{ '.implode($rpad,$returnMatrix).' }'; + } elseif(is_string($value) && (trim($value,'"') == $value)) { + return '"'.$value.'"'; + } elseif(is_bool($value)) { + return ($value) ? self::$_localeBoolean['TRUE'] : self::$_localeBoolean['FALSE']; + } + } + return PHPExcel_Calculation_Functions::flattenSingleValue($value); + } // function _showValue() + + + /** + * Format type and details of an operand for display in the log (based on operand type) + * + * @param mixed $value First matrix operand + * @return mixed + */ + private function _showTypeDetails($value) { + if ($this->_debugLog->getWriteDebugLog()) { + $testArray = PHPExcel_Calculation_Functions::flattenArray($value); + if (count($testArray) == 1) { + $value = array_pop($testArray); + } + + if ($value === NULL) { + return 'a NULL value'; + } elseif (is_float($value)) { + $typeString = 'a floating point number'; + } elseif(is_int($value)) { + $typeString = 'an integer number'; + } elseif(is_bool($value)) { + $typeString = 'a boolean'; + } elseif(is_array($value)) { + $typeString = 'a matrix'; + } else { + if ($value == '') { + return 'an empty string'; + } elseif ($value{0} == '#') { + return 'a '.$value.' error'; + } else { + $typeString = 'a string'; + } + } + return $typeString.' with a value of '.$this->_showValue($value); + } + } // function _showTypeDetails() + + + private static function _convertMatrixReferences($formula) { + static $matrixReplaceFrom = array('{',';','}'); + static $matrixReplaceTo = array('MKMATRIX(MKMATRIX(','),MKMATRIX(','))'); + + // Convert any Excel matrix references to the MKMATRIX() function + if (strpos($formula,'{') !== FALSE) { + // If there is the possibility of braces within a quoted string, then we don't treat those as matrix indicators + if (strpos($formula,'"') !== FALSE) { + // So instead we skip replacing in any quoted strings by only replacing in every other array element after we've exploded + // the formula + $temp = explode('"',$formula); + // Open and Closed counts used for trapping mismatched braces in the formula + $openCount = $closeCount = 0; + $i = FALSE; + foreach($temp as &$value) { + // Only count/replace in alternating array entries + if ($i = !$i) { + $openCount += substr_count($value,'{'); + $closeCount += substr_count($value,'}'); + $value = str_replace($matrixReplaceFrom,$matrixReplaceTo,$value); + } + } + unset($value); + // Then rebuild the formula string + $formula = implode('"',$temp); + } else { + // If there's no quoted strings, then we do a simple count/replace + $openCount = substr_count($formula,'{'); + $closeCount = substr_count($formula,'}'); + $formula = str_replace($matrixReplaceFrom,$matrixReplaceTo,$formula); + } + // Trap for mismatched braces and trigger an appropriate error + if ($openCount < $closeCount) { + if ($openCount > 0) { + return $this->_raiseFormulaError("Formula Error: Mismatched matrix braces '}'"); + } else { + return $this->_raiseFormulaError("Formula Error: Unexpected '}' encountered"); + } + } elseif ($openCount > $closeCount) { + if ($closeCount > 0) { + return $this->_raiseFormulaError("Formula Error: Mismatched matrix braces '{'"); + } else { + return $this->_raiseFormulaError("Formula Error: Unexpected '{' encountered"); + } + } + } + + return $formula; + } // function _convertMatrixReferences() + + + private static function _mkMatrix() { + return func_get_args(); + } // function _mkMatrix() + + + // Binary Operators + // These operators always work on two values + // Array key is the operator, the value indicates whether this is a left or right associative operator + private static $_operatorAssociativity = array( + '^' => 0, // Exponentiation + '*' => 0, '/' => 0, // Multiplication and Division + '+' => 0, '-' => 0, // Addition and Subtraction + '&' => 0, // Concatenation + '|' => 0, ':' => 0, // Intersect and Range + '>' => 0, '<' => 0, '=' => 0, '>=' => 0, '<=' => 0, '<>' => 0 // Comparison + ); + + // Comparison (Boolean) Operators + // These operators work on two values, but always return a boolean result + private static $_comparisonOperators = array('>' => TRUE, '<' => TRUE, '=' => TRUE, '>=' => TRUE, '<=' => TRUE, '<>' => TRUE); + + // Operator Precedence + // This list includes all valid operators, whether binary (including boolean) or unary (such as %) + // Array key is the operator, the value is its precedence + private static $_operatorPrecedence = array( + ':' => 8, // Range + '|' => 7, // Intersect + '~' => 6, // Negation + '%' => 5, // Percentage + '^' => 4, // Exponentiation + '*' => 3, '/' => 3, // Multiplication and Division + '+' => 2, '-' => 2, // Addition and Subtraction + '&' => 1, // Concatenation + '>' => 0, '<' => 0, '=' => 0, '>=' => 0, '<=' => 0, '<>' => 0 // Comparison + ); + + // Convert infix to postfix notation + private function _parseFormula($formula, PHPExcel_Cell $pCell = NULL) { + if (($formula = self::_convertMatrixReferences(trim($formula))) === FALSE) { + return FALSE; + } + + // If we're using cell caching, then $pCell may well be flushed back to the cache (which detaches the parent worksheet), + // so we store the parent worksheet so that we can re-attach it when necessary + $pCellParent = ($pCell !== NULL) ? $pCell->getWorksheet() : NULL; + + $regexpMatchString = '/^('.self::CALCULATION_REGEXP_FUNCTION. + '|'.self::CALCULATION_REGEXP_CELLREF. + '|'.self::CALCULATION_REGEXP_NUMBER. + '|'.self::CALCULATION_REGEXP_STRING. + '|'.self::CALCULATION_REGEXP_OPENBRACE. + '|'.self::CALCULATION_REGEXP_NAMEDRANGE. + '|'.self::CALCULATION_REGEXP_ERROR. + ')/si'; + + // Start with initialisation + $index = 0; + $stack = new PHPExcel_Calculation_Token_Stack; + $output = array(); + $expectingOperator = FALSE; // We use this test in syntax-checking the expression to determine when a + // - is a negation or + is a positive operator rather than an operation + $expectingOperand = FALSE; // We use this test in syntax-checking the expression to determine whether an operand + // should be null in a function call + // The guts of the lexical parser + // Loop through the formula extracting each operator and operand in turn + while(TRUE) { +//echo 'Assessing Expression '.substr($formula, $index),PHP_EOL; + $opCharacter = $formula{$index}; // Get the first character of the value at the current index position +//echo 'Initial character of expression block is '.$opCharacter,PHP_EOL; + if ((isset(self::$_comparisonOperators[$opCharacter])) && (strlen($formula) > $index) && (isset(self::$_comparisonOperators[$formula{$index+1}]))) { + $opCharacter .= $formula{++$index}; +//echo 'Initial character of expression block is comparison operator '.$opCharacter.PHP_EOL; + } + + // Find out if we're currently at the beginning of a number, variable, cell reference, function, parenthesis or operand + $isOperandOrFunction = preg_match($regexpMatchString, substr($formula, $index), $match); +//echo '$isOperandOrFunction is '.(($isOperandOrFunction) ? 'True' : 'False').PHP_EOL; +//var_dump($match); + + if ($opCharacter == '-' && !$expectingOperator) { // Is it a negation instead of a minus? +//echo 'Element is a Negation operator',PHP_EOL; + $stack->push('Unary Operator','~'); // Put a negation on the stack + ++$index; // and drop the negation symbol + } elseif ($opCharacter == '%' && $expectingOperator) { +//echo 'Element is a Percentage operator',PHP_EOL; + $stack->push('Unary Operator','%'); // Put a percentage on the stack + ++$index; + } elseif ($opCharacter == '+' && !$expectingOperator) { // Positive (unary plus rather than binary operator plus) can be discarded? +//echo 'Element is a Positive number, not Plus operator',PHP_EOL; + ++$index; // Drop the redundant plus symbol + } elseif ((($opCharacter == '~') || ($opCharacter == '|')) && (!$isOperandOrFunction)) { // We have to explicitly deny a tilde or pipe, because they are legal + return $this->_raiseFormulaError("Formula Error: Illegal character '~'"); // on the stack but not in the input expression + + } elseif ((isset(self::$_operators[$opCharacter]) or $isOperandOrFunction) && $expectingOperator) { // Are we putting an operator on the stack? +//echo 'Element with value '.$opCharacter.' is an Operator',PHP_EOL; + while($stack->count() > 0 && + ($o2 = $stack->last()) && + isset(self::$_operators[$o2['value']]) && + @(self::$_operatorAssociativity[$opCharacter] ? self::$_operatorPrecedence[$opCharacter] < self::$_operatorPrecedence[$o2['value']] : self::$_operatorPrecedence[$opCharacter] <= self::$_operatorPrecedence[$o2['value']])) { + $output[] = $stack->pop(); // Swap operands and higher precedence operators from the stack to the output + } + $stack->push('Binary Operator',$opCharacter); // Finally put our current operator onto the stack + ++$index; + $expectingOperator = FALSE; + + } elseif ($opCharacter == ')' && $expectingOperator) { // Are we expecting to close a parenthesis? +//echo 'Element is a Closing bracket',PHP_EOL; + $expectingOperand = FALSE; + while (($o2 = $stack->pop()) && $o2['value'] != '(') { // Pop off the stack back to the last ( + if ($o2 === NULL) return $this->_raiseFormulaError('Formula Error: Unexpected closing brace ")"'); + else $output[] = $o2; + } + $d = $stack->last(2); + if (preg_match('/^'.self::CALCULATION_REGEXP_FUNCTION.'$/i', $d['value'], $matches)) { // Did this parenthesis just close a function? + $functionName = $matches[1]; // Get the function name +//echo 'Closed Function is '.$functionName,PHP_EOL; + $d = $stack->pop(); + $argumentCount = $d['value']; // See how many arguments there were (argument count is the next value stored on the stack) +//if ($argumentCount == 0) { +// echo 'With no arguments',PHP_EOL; +//} elseif ($argumentCount == 1) { +// echo 'With 1 argument',PHP_EOL; +//} else { +// echo 'With '.$argumentCount.' arguments',PHP_EOL; +//} + $output[] = $d; // Dump the argument count on the output + $output[] = $stack->pop(); // Pop the function and push onto the output + if (isset(self::$_controlFunctions[$functionName])) { +//echo 'Built-in function '.$functionName,PHP_EOL; + $expectedArgumentCount = self::$_controlFunctions[$functionName]['argumentCount']; + $functionCall = self::$_controlFunctions[$functionName]['functionCall']; + } elseif (isset(self::$_PHPExcelFunctions[$functionName])) { +//echo 'PHPExcel function '.$functionName,PHP_EOL; + $expectedArgumentCount = self::$_PHPExcelFunctions[$functionName]['argumentCount']; + $functionCall = self::$_PHPExcelFunctions[$functionName]['functionCall']; + } else { // did we somehow push a non-function on the stack? this should never happen + return $this->_raiseFormulaError("Formula Error: Internal error, non-function on stack"); + } + // Check the argument count + $argumentCountError = FALSE; + if (is_numeric($expectedArgumentCount)) { + if ($expectedArgumentCount < 0) { +//echo '$expectedArgumentCount is between 0 and '.abs($expectedArgumentCount),PHP_EOL; + if ($argumentCount > abs($expectedArgumentCount)) { + $argumentCountError = TRUE; + $expectedArgumentCountString = 'no more than '.abs($expectedArgumentCount); + } + } else { +//echo '$expectedArgumentCount is numeric '.$expectedArgumentCount,PHP_EOL; + if ($argumentCount != $expectedArgumentCount) { + $argumentCountError = TRUE; + $expectedArgumentCountString = $expectedArgumentCount; + } + } + } elseif ($expectedArgumentCount != '*') { + $isOperandOrFunction = preg_match('/(\d*)([-+,])(\d*)/',$expectedArgumentCount,$argMatch); +//print_r($argMatch); +//echo PHP_EOL; + switch ($argMatch[2]) { + case '+' : + if ($argumentCount < $argMatch[1]) { + $argumentCountError = TRUE; + $expectedArgumentCountString = $argMatch[1].' or more '; + } + break; + case '-' : + if (($argumentCount < $argMatch[1]) || ($argumentCount > $argMatch[3])) { + $argumentCountError = TRUE; + $expectedArgumentCountString = 'between '.$argMatch[1].' and '.$argMatch[3]; + } + break; + case ',' : + if (($argumentCount != $argMatch[1]) && ($argumentCount != $argMatch[3])) { + $argumentCountError = TRUE; + $expectedArgumentCountString = 'either '.$argMatch[1].' or '.$argMatch[3]; + } + break; + } + } + if ($argumentCountError) { + return $this->_raiseFormulaError("Formula Error: Wrong number of arguments for $functionName() function: $argumentCount given, ".$expectedArgumentCountString." expected"); + } + } + ++$index; + + } elseif ($opCharacter == ',') { // Is this the separator for function arguments? +//echo 'Element is a Function argument separator',PHP_EOL; + while (($o2 = $stack->pop()) && $o2['value'] != '(') { // Pop off the stack back to the last ( + if ($o2 === NULL) return $this->_raiseFormulaError("Formula Error: Unexpected ,"); + else $output[] = $o2; // pop the argument expression stuff and push onto the output + } + // If we've a comma when we're expecting an operand, then what we actually have is a null operand; + // so push a null onto the stack + if (($expectingOperand) || (!$expectingOperator)) { + $output[] = array('type' => 'NULL Value', 'value' => self::$_ExcelConstants['NULL'], 'reference' => NULL); + } + // make sure there was a function + $d = $stack->last(2); + if (!preg_match('/^'.self::CALCULATION_REGEXP_FUNCTION.'$/i', $d['value'], $matches)) + return $this->_raiseFormulaError("Formula Error: Unexpected ,"); + $d = $stack->pop(); + $stack->push($d['type'],++$d['value'],$d['reference']); // increment the argument count + $stack->push('Brace', '('); // put the ( back on, we'll need to pop back to it again + $expectingOperator = FALSE; + $expectingOperand = TRUE; + ++$index; + + } elseif ($opCharacter == '(' && !$expectingOperator) { +// echo 'Element is an Opening Bracket
'; + $stack->push('Brace', '('); + ++$index; + + } elseif ($isOperandOrFunction && !$expectingOperator) { // do we now have a function/variable/number? + $expectingOperator = TRUE; + $expectingOperand = FALSE; + $val = $match[1]; + $length = strlen($val); +// echo 'Element with value '.$val.' is an Operand, Variable, Constant, String, Number, Cell Reference or Function
'; + + if (preg_match('/^'.self::CALCULATION_REGEXP_FUNCTION.'$/i', $val, $matches)) { + $val = preg_replace('/\s/','',$val); +// echo 'Element '.$val.' is a Function
'; + if (isset(self::$_PHPExcelFunctions[strtoupper($matches[1])]) || isset(self::$_controlFunctions[strtoupper($matches[1])])) { // it's a function + $stack->push('Function', strtoupper($val)); + $ax = preg_match('/^\s*(\s*\))/i', substr($formula, $index+$length), $amatch); + if ($ax) { + $stack->push('Operand Count for Function '.strtoupper($val).')', 0); + $expectingOperator = TRUE; + } else { + $stack->push('Operand Count for Function '.strtoupper($val).')', 1); + $expectingOperator = FALSE; + } + $stack->push('Brace', '('); + } else { // it's a var w/ implicit multiplication + $output[] = array('type' => 'Value', 'value' => $matches[1], 'reference' => NULL); + } + } elseif (preg_match('/^'.self::CALCULATION_REGEXP_CELLREF.'$/i', $val, $matches)) { +// echo 'Element '.$val.' is a Cell reference
'; + // Watch for this case-change when modifying to allow cell references in different worksheets... + // Should only be applied to the actual cell column, not the worksheet name + + // If the last entry on the stack was a : operator, then we have a cell range reference + $testPrevOp = $stack->last(1); + if ($testPrevOp['value'] == ':') { + // If we have a worksheet reference, then we're playing with a 3D reference + if ($matches[2] == '') { + // Otherwise, we 'inherit' the worksheet reference from the start cell reference + // The start of the cell range reference should be the last entry in $output + $startCellRef = $output[count($output)-1]['value']; + preg_match('/^'.self::CALCULATION_REGEXP_CELLREF.'$/i', $startCellRef, $startMatches); + if ($startMatches[2] > '') { + $val = $startMatches[2].'!'.$val; + } + } else { + return $this->_raiseFormulaError("3D Range references are not yet supported"); + } + } + + $output[] = array('type' => 'Cell Reference', 'value' => $val, 'reference' => $val); +// $expectingOperator = FALSE; + } else { // it's a variable, constant, string, number or boolean +// echo 'Element is a Variable, Constant, String, Number or Boolean
'; + // If the last entry on the stack was a : operator, then we may have a row or column range reference + $testPrevOp = $stack->last(1); + if ($testPrevOp['value'] == ':') { + $startRowColRef = $output[count($output)-1]['value']; + $rangeWS1 = ''; + if (strpos('!',$startRowColRef) !== FALSE) { + list($rangeWS1,$startRowColRef) = explode('!',$startRowColRef); + } + if ($rangeWS1 != '') $rangeWS1 .= '!'; + $rangeWS2 = $rangeWS1; + if (strpos('!',$val) !== FALSE) { + list($rangeWS2,$val) = explode('!',$val); + } + if ($rangeWS2 != '') $rangeWS2 .= '!'; + if ((is_integer($startRowColRef)) && (ctype_digit($val)) && + ($startRowColRef <= 1048576) && ($val <= 1048576)) { + // Row range + $endRowColRef = ($pCellParent !== NULL) ? $pCellParent->getHighestColumn() : 'XFD'; // Max 16,384 columns for Excel2007 + $output[count($output)-1]['value'] = $rangeWS1.'A'.$startRowColRef; + $val = $rangeWS2.$endRowColRef.$val; + } elseif ((ctype_alpha($startRowColRef)) && (ctype_alpha($val)) && + (strlen($startRowColRef) <= 3) && (strlen($val) <= 3)) { + // Column range + $endRowColRef = ($pCellParent !== NULL) ? $pCellParent->getHighestRow() : 1048576; // Max 1,048,576 rows for Excel2007 + $output[count($output)-1]['value'] = $rangeWS1.strtoupper($startRowColRef).'1'; + $val = $rangeWS2.$val.$endRowColRef; + } + } + + $localeConstant = FALSE; + if ($opCharacter == '"') { +// echo 'Element is a String
'; + // UnEscape any quotes within the string + $val = self::_wrapResult(str_replace('""','"',self::_unwrapResult($val))); + } elseif (is_numeric($val)) { +// echo 'Element is a Number
'; + if ((strpos($val,'.') !== FALSE) || (stripos($val,'e') !== FALSE) || ($val > PHP_INT_MAX) || ($val < -PHP_INT_MAX)) { +// echo 'Casting '.$val.' to float
'; + $val = (float) $val; + } else { +// echo 'Casting '.$val.' to integer
'; + $val = (integer) $val; + } + } elseif (isset(self::$_ExcelConstants[trim(strtoupper($val))])) { + $excelConstant = trim(strtoupper($val)); +// echo 'Element '.$excelConstant.' is an Excel Constant
'; + $val = self::$_ExcelConstants[$excelConstant]; + } elseif (($localeConstant = array_search(trim(strtoupper($val)), self::$_localeBoolean)) !== FALSE) { +// echo 'Element '.$localeConstant.' is an Excel Constant
'; + $val = self::$_ExcelConstants[$localeConstant]; + } + $details = array('type' => 'Value', 'value' => $val, 'reference' => NULL); + if ($localeConstant) { $details['localeValue'] = $localeConstant; } + $output[] = $details; + } + $index += $length; + + } elseif ($opCharacter == '$') { // absolute row or column range + ++$index; + } elseif ($opCharacter == ')') { // miscellaneous error checking + if ($expectingOperand) { + $output[] = array('type' => 'NULL Value', 'value' => self::$_ExcelConstants['NULL'], 'reference' => NULL); + $expectingOperand = FALSE; + $expectingOperator = TRUE; + } else { + return $this->_raiseFormulaError("Formula Error: Unexpected ')'"); + } + } elseif (isset(self::$_operators[$opCharacter]) && !$expectingOperator) { + return $this->_raiseFormulaError("Formula Error: Unexpected operator '$opCharacter'"); + } else { // I don't even want to know what you did to get here + return $this->_raiseFormulaError("Formula Error: An unexpected error occured"); + } + // Test for end of formula string + if ($index == strlen($formula)) { + // Did we end with an operator?. + // Only valid for the % unary operator + if ((isset(self::$_operators[$opCharacter])) && ($opCharacter != '%')) { + return $this->_raiseFormulaError("Formula Error: Operator '$opCharacter' has no operands"); + } else { + break; + } + } + // Ignore white space + while (($formula{$index} == "\n") || ($formula{$index} == "\r")) { + ++$index; + } + if ($formula{$index} == ' ') { + while ($formula{$index} == ' ') { + ++$index; + } + // If we're expecting an operator, but only have a space between the previous and next operands (and both are + // Cell References) then we have an INTERSECTION operator +// echo 'Possible Intersect Operator
'; + if (($expectingOperator) && (preg_match('/^'.self::CALCULATION_REGEXP_CELLREF.'.*/Ui', substr($formula, $index), $match)) && + ($output[count($output)-1]['type'] == 'Cell Reference')) { +// echo 'Element is an Intersect Operator
'; + while($stack->count() > 0 && + ($o2 = $stack->last()) && + isset(self::$_operators[$o2['value']]) && + @(self::$_operatorAssociativity[$opCharacter] ? self::$_operatorPrecedence[$opCharacter] < self::$_operatorPrecedence[$o2['value']] : self::$_operatorPrecedence[$opCharacter] <= self::$_operatorPrecedence[$o2['value']])) { + $output[] = $stack->pop(); // Swap operands and higher precedence operators from the stack to the output + } + $stack->push('Binary Operator','|'); // Put an Intersect Operator on the stack + $expectingOperator = FALSE; + } + } + } + + while (($op = $stack->pop()) !== NULL) { // pop everything off the stack and push onto output + if ((is_array($op) && $op['value'] == '(') || ($op === '(')) + return $this->_raiseFormulaError("Formula Error: Expecting ')'"); // if there are any opening braces on the stack, then braces were unbalanced + $output[] = $op; + } + return $output; + } // function _parseFormula() + + + private static function _dataTestReference(&$operandData) + { + $operand = $operandData['value']; + if (($operandData['reference'] === NULL) && (is_array($operand))) { + $rKeys = array_keys($operand); + $rowKey = array_shift($rKeys); + $cKeys = array_keys(array_keys($operand[$rowKey])); + $colKey = array_shift($cKeys); + if (ctype_upper($colKey)) { + $operandData['reference'] = $colKey.$rowKey; + } + } + return $operand; + } + + // evaluate postfix notation + private function _processTokenStack($tokens, $cellID = NULL, PHPExcel_Cell $pCell = NULL) { + if ($tokens == FALSE) return FALSE; + + // If we're using cell caching, then $pCell may well be flushed back to the cache (which detaches the parent cell collection), + // so we store the parent cell collection so that we can re-attach it when necessary + $pCellWorksheet = ($pCell !== NULL) ? $pCell->getWorksheet() : NULL; + $pCellParent = ($pCell !== NULL) ? $pCell->getParent() : null; + $stack = new PHPExcel_Calculation_Token_Stack; + + // Loop through each token in turn + foreach ($tokens as $tokenData) { +// print_r($tokenData); +// echo '
'; + $token = $tokenData['value']; +// echo 'Token is '.$token.'
'; + // if the token is a binary operator, pop the top two values off the stack, do the operation, and push the result back on the stack + if (isset(self::$_binaryOperators[$token])) { +// echo 'Token is a binary operator
'; + // We must have two operands, error if we don't + if (($operand2Data = $stack->pop()) === NULL) return $this->_raiseFormulaError('Internal error - Operand value missing from stack'); + if (($operand1Data = $stack->pop()) === NULL) return $this->_raiseFormulaError('Internal error - Operand value missing from stack'); + + $operand1 = self::_dataTestReference($operand1Data); + $operand2 = self::_dataTestReference($operand2Data); + + // Log what we're doing + if ($token == ':') { + $this->_debugLog->writeDebugLog('Evaluating Range ', $this->_showValue($operand1Data['reference']), ' ', $token, ' ', $this->_showValue($operand2Data['reference'])); + } else { + $this->_debugLog->writeDebugLog('Evaluating ', $this->_showValue($operand1), ' ', $token, ' ', $this->_showValue($operand2)); + } + + // Process the operation in the appropriate manner + switch ($token) { + // Comparison (Boolean) Operators + case '>' : // Greater than + case '<' : // Less than + case '>=' : // Greater than or Equal to + case '<=' : // Less than or Equal to + case '=' : // Equality + case '<>' : // Inequality + $this->_executeBinaryComparisonOperation($cellID,$operand1,$operand2,$token,$stack); + break; + // Binary Operators + case ':' : // Range + $sheet1 = $sheet2 = ''; + if (strpos($operand1Data['reference'],'!') !== FALSE) { + list($sheet1,$operand1Data['reference']) = explode('!',$operand1Data['reference']); + } else { + $sheet1 = ($pCellParent !== NULL) ? $pCellWorksheet->getTitle() : ''; + } + if (strpos($operand2Data['reference'],'!') !== FALSE) { + list($sheet2,$operand2Data['reference']) = explode('!',$operand2Data['reference']); + } else { + $sheet2 = $sheet1; + } + if ($sheet1 == $sheet2) { + if ($operand1Data['reference'] === NULL) { + if ((trim($operand1Data['value']) != '') && (is_numeric($operand1Data['value']))) { + $operand1Data['reference'] = $pCell->getColumn().$operand1Data['value']; + } elseif (trim($operand1Data['reference']) == '') { + $operand1Data['reference'] = $pCell->getCoordinate(); + } else { + $operand1Data['reference'] = $operand1Data['value'].$pCell->getRow(); + } + } + if ($operand2Data['reference'] === NULL) { + if ((trim($operand2Data['value']) != '') && (is_numeric($operand2Data['value']))) { + $operand2Data['reference'] = $pCell->getColumn().$operand2Data['value']; + } elseif (trim($operand2Data['reference']) == '') { + $operand2Data['reference'] = $pCell->getCoordinate(); + } else { + $operand2Data['reference'] = $operand2Data['value'].$pCell->getRow(); + } + } + + $oData = array_merge(explode(':',$operand1Data['reference']),explode(':',$operand2Data['reference'])); + $oCol = $oRow = array(); + foreach($oData as $oDatum) { + $oCR = PHPExcel_Cell::coordinateFromString($oDatum); + $oCol[] = PHPExcel_Cell::columnIndexFromString($oCR[0]) - 1; + $oRow[] = $oCR[1]; + } + $cellRef = PHPExcel_Cell::stringFromColumnIndex(min($oCol)).min($oRow).':'.PHPExcel_Cell::stringFromColumnIndex(max($oCol)).max($oRow); + if ($pCellParent !== NULL) { + $cellValue = $this->extractCellRange($cellRef, $this->_workbook->getSheetByName($sheet1), FALSE); + } else { + return $this->_raiseFormulaError('Unable to access Cell Reference'); + } + $stack->push('Cell Reference',$cellValue,$cellRef); + } else { + $stack->push('Error',PHPExcel_Calculation_Functions::REF(),NULL); + } + + break; + case '+' : // Addition + $this->_executeNumericBinaryOperation($cellID,$operand1,$operand2,$token,'plusEquals',$stack); + break; + case '-' : // Subtraction + $this->_executeNumericBinaryOperation($cellID,$operand1,$operand2,$token,'minusEquals',$stack); + break; + case '*' : // Multiplication + $this->_executeNumericBinaryOperation($cellID,$operand1,$operand2,$token,'arrayTimesEquals',$stack); + break; + case '/' : // Division + $this->_executeNumericBinaryOperation($cellID,$operand1,$operand2,$token,'arrayRightDivide',$stack); + break; + case '^' : // Exponential + $this->_executeNumericBinaryOperation($cellID,$operand1,$operand2,$token,'power',$stack); + break; + case '&' : // Concatenation + // If either of the operands is a matrix, we need to treat them both as matrices + // (converting the other operand to a matrix if need be); then perform the required + // matrix operation + if (is_bool($operand1)) { + $operand1 = ($operand1) ? self::$_localeBoolean['TRUE'] : self::$_localeBoolean['FALSE']; + } + if (is_bool($operand2)) { + $operand2 = ($operand2) ? self::$_localeBoolean['TRUE'] : self::$_localeBoolean['FALSE']; + } + if ((is_array($operand1)) || (is_array($operand2))) { + // Ensure that both operands are arrays/matrices + self::_checkMatrixOperands($operand1,$operand2,2); + try { + // Convert operand 1 from a PHP array to a matrix + $matrix = new PHPExcel_Shared_JAMA_Matrix($operand1); + // Perform the required operation against the operand 1 matrix, passing in operand 2 + $matrixResult = $matrix->concat($operand2); + $result = $matrixResult->getArray(); + } catch (PHPExcel_Exception $ex) { + $this->_debugLog->writeDebugLog('JAMA Matrix Exception: ', $ex->getMessage()); + $result = '#VALUE!'; + } + } else { + $result = '"'.str_replace('""','"',self::_unwrapResult($operand1,'"').self::_unwrapResult($operand2,'"')).'"'; + } + $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails($result)); + $stack->push('Value',$result); + break; + case '|' : // Intersect + $rowIntersect = array_intersect_key($operand1,$operand2); + $cellIntersect = $oCol = $oRow = array(); + foreach(array_keys($rowIntersect) as $row) { + $oRow[] = $row; + foreach($rowIntersect[$row] as $col => $data) { + $oCol[] = PHPExcel_Cell::columnIndexFromString($col) - 1; + $cellIntersect[$row] = array_intersect_key($operand1[$row],$operand2[$row]); + } + } + $cellRef = PHPExcel_Cell::stringFromColumnIndex(min($oCol)).min($oRow).':'.PHPExcel_Cell::stringFromColumnIndex(max($oCol)).max($oRow); + $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails($cellIntersect)); + $stack->push('Value',$cellIntersect,$cellRef); + break; + } + + // if the token is a unary operator, pop one value off the stack, do the operation, and push it back on + } elseif (($token === '~') || ($token === '%')) { +// echo 'Token is a unary operator
'; + if (($arg = $stack->pop()) === NULL) return $this->_raiseFormulaError('Internal error - Operand value missing from stack'); + $arg = $arg['value']; + if ($token === '~') { +// echo 'Token is a negation operator
'; + $this->_debugLog->writeDebugLog('Evaluating Negation of ', $this->_showValue($arg)); + $multiplier = -1; + } else { +// echo 'Token is a percentile operator
'; + $this->_debugLog->writeDebugLog('Evaluating Percentile of ', $this->_showValue($arg)); + $multiplier = 0.01; + } + if (is_array($arg)) { + self::_checkMatrixOperands($arg,$multiplier,2); + try { + $matrix1 = new PHPExcel_Shared_JAMA_Matrix($arg); + $matrixResult = $matrix1->arrayTimesEquals($multiplier); + $result = $matrixResult->getArray(); + } catch (PHPExcel_Exception $ex) { + $this->_debugLog->writeDebugLog('JAMA Matrix Exception: ', $ex->getMessage()); + $result = '#VALUE!'; + } + $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails($result)); + $stack->push('Value',$result); + } else { + $this->_executeNumericBinaryOperation($cellID,$multiplier,$arg,'*','arrayTimesEquals',$stack); + } + + } elseif (preg_match('/^'.self::CALCULATION_REGEXP_CELLREF.'$/i', $token, $matches)) { + $cellRef = NULL; +// echo 'Element '.$token.' is a Cell reference
'; + if (isset($matches[8])) { +// echo 'Reference is a Range of cells
'; + if ($pCell === NULL) { +// We can't access the range, so return a REF error + $cellValue = PHPExcel_Calculation_Functions::REF(); + } else { + $cellRef = $matches[6].$matches[7].':'.$matches[9].$matches[10]; + if ($matches[2] > '') { + $matches[2] = trim($matches[2],"\"'"); + if ((strpos($matches[2],'[') !== FALSE) || (strpos($matches[2],']') !== FALSE)) { + // It's a Reference to an external workbook (not currently supported) + return $this->_raiseFormulaError('Unable to access External Workbook'); + } + $matches[2] = trim($matches[2],"\"'"); +// echo '$cellRef='.$cellRef.' in worksheet '.$matches[2].'
'; + $this->_debugLog->writeDebugLog('Evaluating Cell Range ', $cellRef, ' in worksheet ', $matches[2]); + if ($pCellParent !== NULL) { + $cellValue = $this->extractCellRange($cellRef, $this->_workbook->getSheetByName($matches[2]), FALSE); + } else { + return $this->_raiseFormulaError('Unable to access Cell Reference'); + } + $this->_debugLog->writeDebugLog('Evaluation Result for cells ', $cellRef, ' in worksheet ', $matches[2], ' is ', $this->_showTypeDetails($cellValue)); +// $cellRef = $matches[2].'!'.$cellRef; + } else { +// echo '$cellRef='.$cellRef.' in current worksheet
'; + $this->_debugLog->writeDebugLog('Evaluating Cell Range ', $cellRef, ' in current worksheet'); + if ($pCellParent !== NULL) { + $cellValue = $this->extractCellRange($cellRef, $pCellWorksheet, FALSE); + } else { + return $this->_raiseFormulaError('Unable to access Cell Reference'); + } + $this->_debugLog->writeDebugLog('Evaluation Result for cells ', $cellRef, ' is ', $this->_showTypeDetails($cellValue)); + } + } + } else { +// echo 'Reference is a single Cell
'; + if ($pCell === NULL) { +// We can't access the cell, so return a REF error + $cellValue = PHPExcel_Calculation_Functions::REF(); + } else { + $cellRef = $matches[6].$matches[7]; + if ($matches[2] > '') { + $matches[2] = trim($matches[2],"\"'"); + if ((strpos($matches[2],'[') !== FALSE) || (strpos($matches[2],']') !== FALSE)) { + // It's a Reference to an external workbook (not currently supported) + return $this->_raiseFormulaError('Unable to access External Workbook'); + } +// echo '$cellRef='.$cellRef.' in worksheet '.$matches[2].'
'; + $this->_debugLog->writeDebugLog('Evaluating Cell ', $cellRef, ' in worksheet ', $matches[2]); + if ($pCellParent !== NULL) { + $cellSheet = $this->_workbook->getSheetByName($matches[2]); + if ($cellSheet && $cellSheet->cellExists($cellRef)) { + $cellValue = $this->extractCellRange($cellRef, $this->_workbook->getSheetByName($matches[2]), FALSE); + $pCell->attach($pCellParent); + } else { + $cellValue = NULL; + } + } else { + return $this->_raiseFormulaError('Unable to access Cell Reference'); + } + $this->_debugLog->writeDebugLog('Evaluation Result for cell ', $cellRef, ' in worksheet ', $matches[2], ' is ', $this->_showTypeDetails($cellValue)); +// $cellRef = $matches[2].'!'.$cellRef; + } else { +// echo '$cellRef='.$cellRef.' in current worksheet
'; + $this->_debugLog->writeDebugLog('Evaluating Cell ', $cellRef, ' in current worksheet'); + if ($pCellParent->isDataSet($cellRef)) { + $cellValue = $this->extractCellRange($cellRef, $pCellWorksheet, FALSE); + $pCell->attach($pCellParent); + } else { + $cellValue = NULL; + } + $this->_debugLog->writeDebugLog('Evaluation Result for cell ', $cellRef, ' is ', $this->_showTypeDetails($cellValue)); + } + } + } + $stack->push('Value',$cellValue,$cellRef); + + // if the token is a function, pop arguments off the stack, hand them to the function, and push the result back on + } elseif (preg_match('/^'.self::CALCULATION_REGEXP_FUNCTION.'$/i', $token, $matches)) { +// echo 'Token is a function
'; + $functionName = $matches[1]; + $argCount = $stack->pop(); + $argCount = $argCount['value']; + if ($functionName != 'MKMATRIX') { + $this->_debugLog->writeDebugLog('Evaluating Function ', self::_localeFunc($functionName), '() with ', (($argCount == 0) ? 'no' : $argCount), ' argument', (($argCount == 1) ? '' : 's')); + } + if ((isset(self::$_PHPExcelFunctions[$functionName])) || (isset(self::$_controlFunctions[$functionName]))) { // function + if (isset(self::$_PHPExcelFunctions[$functionName])) { + $functionCall = self::$_PHPExcelFunctions[$functionName]['functionCall']; + $passByReference = isset(self::$_PHPExcelFunctions[$functionName]['passByReference']); + $passCellReference = isset(self::$_PHPExcelFunctions[$functionName]['passCellReference']); + } elseif (isset(self::$_controlFunctions[$functionName])) { + $functionCall = self::$_controlFunctions[$functionName]['functionCall']; + $passByReference = isset(self::$_controlFunctions[$functionName]['passByReference']); + $passCellReference = isset(self::$_controlFunctions[$functionName]['passCellReference']); + } + // get the arguments for this function +// echo 'Function '.$functionName.' expects '.$argCount.' arguments
'; + $args = $argArrayVals = array(); + for ($i = 0; $i < $argCount; ++$i) { + $arg = $stack->pop(); + $a = $argCount - $i - 1; + if (($passByReference) && + (isset(self::$_PHPExcelFunctions[$functionName]['passByReference'][$a])) && + (self::$_PHPExcelFunctions[$functionName]['passByReference'][$a])) { + if ($arg['reference'] === NULL) { + $args[] = $cellID; + if ($functionName != 'MKMATRIX') { $argArrayVals[] = $this->_showValue($cellID); } + } else { + $args[] = $arg['reference']; + if ($functionName != 'MKMATRIX') { $argArrayVals[] = $this->_showValue($arg['reference']); } + } + } else { + $args[] = self::_unwrapResult($arg['value']); + if ($functionName != 'MKMATRIX') { $argArrayVals[] = $this->_showValue($arg['value']); } + } + } + // Reverse the order of the arguments + krsort($args); + if (($passByReference) && ($argCount == 0)) { + $args[] = $cellID; + $argArrayVals[] = $this->_showValue($cellID); + } +// echo 'Arguments are: '; +// print_r($args); +// echo '
'; + if ($functionName != 'MKMATRIX') { + if ($this->_debugLog->getWriteDebugLog()) { + krsort($argArrayVals); + $this->_debugLog->writeDebugLog('Evaluating ', self::_localeFunc($functionName), '( ', implode(self::$_localeArgumentSeparator.' ',PHPExcel_Calculation_Functions::flattenArray($argArrayVals)), ' )'); + } + } + // Process each argument in turn, building the return value as an array +// if (($argCount == 1) && (is_array($args[1])) && ($functionName != 'MKMATRIX')) { +// $operand1 = $args[1]; +// $this->_debugLog->writeDebugLog('Argument is a matrix: ', $this->_showValue($operand1)); +// $result = array(); +// $row = 0; +// foreach($operand1 as $args) { +// if (is_array($args)) { +// foreach($args as $arg) { +// $this->_debugLog->writeDebugLog('Evaluating ', self::_localeFunc($functionName), '( ', $this->_showValue($arg), ' )'); +// $r = call_user_func_array($functionCall,$arg); +// $this->_debugLog->writeDebugLog('Evaluation Result for ', self::_localeFunc($functionName), '() function call is ', $this->_showTypeDetails($r)); +// $result[$row][] = $r; +// } +// ++$row; +// } else { +// $this->_debugLog->writeDebugLog('Evaluating ', self::_localeFunc($functionName), '( ', $this->_showValue($args), ' )'); +// $r = call_user_func_array($functionCall,$args); +// $this->_debugLog->writeDebugLog('Evaluation Result for ', self::_localeFunc($functionName), '() function call is ', $this->_showTypeDetails($r)); +// $result[] = $r; +// } +// } +// } else { + // Process the argument with the appropriate function call + if ($passCellReference) { + $args[] = $pCell; + } + if (strpos($functionCall,'::') !== FALSE) { + $result = call_user_func_array(explode('::',$functionCall),$args); + } else { + foreach($args as &$arg) { + $arg = PHPExcel_Calculation_Functions::flattenSingleValue($arg); + } + unset($arg); + $result = call_user_func_array($functionCall,$args); + } +// } + if ($functionName != 'MKMATRIX') { + $this->_debugLog->writeDebugLog('Evaluation Result for ', self::_localeFunc($functionName), '() function call is ', $this->_showTypeDetails($result)); + } + $stack->push('Value',self::_wrapResult($result)); + } + + } else { + // if the token is a number, boolean, string or an Excel error, push it onto the stack + if (isset(self::$_ExcelConstants[strtoupper($token)])) { + $excelConstant = strtoupper($token); +// echo 'Token is a PHPExcel constant: '.$excelConstant.'
'; + $stack->push('Constant Value',self::$_ExcelConstants[$excelConstant]); + $this->_debugLog->writeDebugLog('Evaluating Constant ', $excelConstant, ' as ', $this->_showTypeDetails(self::$_ExcelConstants[$excelConstant])); + } elseif ((is_numeric($token)) || ($token === NULL) || (is_bool($token)) || ($token == '') || ($token{0} == '"') || ($token{0} == '#')) { +// echo 'Token is a number, boolean, string, null or an Excel error
'; + $stack->push('Value',$token); + // if the token is a named range, push the named range name onto the stack + } elseif (preg_match('/^'.self::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $token, $matches)) { +// echo 'Token is a named range
'; + $namedRange = $matches[6]; +// echo 'Named Range is '.$namedRange.'
'; + $this->_debugLog->writeDebugLog('Evaluating Named Range ', $namedRange); + $cellValue = $this->extractNamedRange($namedRange, ((NULL !== $pCell) ? $pCellWorksheet : NULL), FALSE); + $pCell->attach($pCellParent); + $this->_debugLog->writeDebugLog('Evaluation Result for named range ', $namedRange, ' is ', $this->_showTypeDetails($cellValue)); + $stack->push('Named Range',$cellValue,$namedRange); + } else { + return $this->_raiseFormulaError("undefined variable '$token'"); + } + } + } + // when we're out of tokens, the stack should have a single element, the final result + if ($stack->count() != 1) return $this->_raiseFormulaError("internal error"); + $output = $stack->pop(); + $output = $output['value']; + +// if ((is_array($output)) && (self::$returnArrayAsType != self::RETURN_ARRAY_AS_ARRAY)) { +// return array_shift(PHPExcel_Calculation_Functions::flattenArray($output)); +// } + return $output; + } // function _processTokenStack() + + + private function _validateBinaryOperand($cellID, &$operand, &$stack) { + if (is_array($operand)) { + if ((count($operand, COUNT_RECURSIVE) - count($operand)) == 1) { + do { + $operand = array_pop($operand); + } while (is_array($operand)); + } + } + // Numbers, matrices and booleans can pass straight through, as they're already valid + if (is_string($operand)) { + // We only need special validations for the operand if it is a string + // Start by stripping off the quotation marks we use to identify true excel string values internally + if ($operand > '' && $operand{0} == '"') { $operand = self::_unwrapResult($operand); } + // If the string is a numeric value, we treat it as a numeric, so no further testing + if (!is_numeric($operand)) { + // If not a numeric, test to see if the value is an Excel error, and so can't be used in normal binary operations + if ($operand > '' && $operand{0} == '#') { + $stack->push('Value', $operand); + $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails($operand)); + return FALSE; + } elseif (!PHPExcel_Shared_String::convertToNumberIfFraction($operand)) { + // If not a numeric or a fraction, then it's a text string, and so can't be used in mathematical binary operations + $stack->push('Value', '#VALUE!'); + $this->_debugLog->writeDebugLog('Evaluation Result is a ', $this->_showTypeDetails('#VALUE!')); + return FALSE; + } + } + } + + // return a true if the value of the operand is one that we can use in normal binary operations + return TRUE; + } // function _validateBinaryOperand() + + + private function _executeBinaryComparisonOperation($cellID, $operand1, $operand2, $operation, &$stack, $recursingArrays=FALSE) { + // If we're dealing with matrix operations, we want a matrix result + if ((is_array($operand1)) || (is_array($operand2))) { + $result = array(); + if ((is_array($operand1)) && (!is_array($operand2))) { + foreach($operand1 as $x => $operandData) { + $this->_debugLog->writeDebugLog('Evaluating Comparison ', $this->_showValue($operandData), ' ', $operation, ' ', $this->_showValue($operand2)); + $this->_executeBinaryComparisonOperation($cellID,$operandData,$operand2,$operation,$stack); + $r = $stack->pop(); + $result[$x] = $r['value']; + } + } elseif ((!is_array($operand1)) && (is_array($operand2))) { + foreach($operand2 as $x => $operandData) { + $this->_debugLog->writeDebugLog('Evaluating Comparison ', $this->_showValue($operand1), ' ', $operation, ' ', $this->_showValue($operandData)); + $this->_executeBinaryComparisonOperation($cellID,$operand1,$operandData,$operation,$stack); + $r = $stack->pop(); + $result[$x] = $r['value']; + } + } else { + if (!$recursingArrays) { self::_checkMatrixOperands($operand1,$operand2,2); } + foreach($operand1 as $x => $operandData) { + $this->_debugLog->writeDebugLog('Evaluating Comparison ', $this->_showValue($operandData), ' ', $operation, ' ', $this->_showValue($operand2[$x])); + $this->_executeBinaryComparisonOperation($cellID,$operandData,$operand2[$x],$operation,$stack,TRUE); + $r = $stack->pop(); + $result[$x] = $r['value']; + } + } + // Log the result details + $this->_debugLog->writeDebugLog('Comparison Evaluation Result is ', $this->_showTypeDetails($result)); + // And push the result onto the stack + $stack->push('Array',$result); + return TRUE; + } + + // Simple validate the two operands if they are string values + if (is_string($operand1) && $operand1 > '' && $operand1{0} == '"') { $operand1 = self::_unwrapResult($operand1); } + if (is_string($operand2) && $operand2 > '' && $operand2{0} == '"') { $operand2 = self::_unwrapResult($operand2); } + + // Use case insensitive comparaison if not OpenOffice mode + if (PHPExcel_Calculation_Functions::getCompatibilityMode() != PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) + { + if (is_string($operand1)) { + $operand1 = strtoupper($operand1); + } + + if (is_string($operand2)) { + $operand2 = strtoupper($operand2); + } + } + + $useLowercaseFirstComparison = is_string($operand1) && is_string($operand2) && PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE; + + // execute the necessary operation + switch ($operation) { + // Greater than + case '>': + if ($useLowercaseFirstComparison) { + $result = $this->strcmpLowercaseFirst($operand1, $operand2) > 0; + } else { + $result = ($operand1 > $operand2); + } + break; + // Less than + case '<': + if ($useLowercaseFirstComparison) { + $result = $this->strcmpLowercaseFirst($operand1, $operand2) < 0; + } else { + $result = ($operand1 < $operand2); + } + break; + // Equality + case '=': + $result = ($operand1 == $operand2); + break; + // Greater than or equal + case '>=': + if ($useLowercaseFirstComparison) { + $result = $this->strcmpLowercaseFirst($operand1, $operand2) >= 0; + } else { + $result = ($operand1 >= $operand2); + } + break; + // Less than or equal + case '<=': + if ($useLowercaseFirstComparison) { + $result = $this->strcmpLowercaseFirst($operand1, $operand2) <= 0; + } else { + $result = ($operand1 <= $operand2); + } + break; + // Inequality + case '<>': + $result = ($operand1 != $operand2); + break; + } + + // Log the result details + $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails($result)); + // And push the result onto the stack + $stack->push('Value',$result); + return TRUE; + } // function _executeBinaryComparisonOperation() + + /** + * Compare two strings in the same way as strcmp() except that lowercase come before uppercase letters + * @param string $str1 + * @param string $str2 + * @return integer + */ + private function strcmpLowercaseFirst($str1, $str2) + { + $from = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; + $to = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $inversedStr1 = strtr($str1, $from, $to); + $inversedStr2 = strtr($str2, $from, $to); + + return strcmp($inversedStr1, $inversedStr2); + } + + private function _executeNumericBinaryOperation($cellID,$operand1,$operand2,$operation,$matrixFunction,&$stack) { + // Validate the two operands + if (!$this->_validateBinaryOperand($cellID,$operand1,$stack)) return FALSE; + if (!$this->_validateBinaryOperand($cellID,$operand2,$stack)) return FALSE; + + // If either of the operands is a matrix, we need to treat them both as matrices + // (converting the other operand to a matrix if need be); then perform the required + // matrix operation + if ((is_array($operand1)) || (is_array($operand2))) { + // Ensure that both operands are arrays/matrices of the same size + self::_checkMatrixOperands($operand1, $operand2, 2); + + try { + // Convert operand 1 from a PHP array to a matrix + $matrix = new PHPExcel_Shared_JAMA_Matrix($operand1); + // Perform the required operation against the operand 1 matrix, passing in operand 2 + $matrixResult = $matrix->$matrixFunction($operand2); + $result = $matrixResult->getArray(); + } catch (PHPExcel_Exception $ex) { + $this->_debugLog->writeDebugLog('JAMA Matrix Exception: ', $ex->getMessage()); + $result = '#VALUE!'; + } + } else { + if ((PHPExcel_Calculation_Functions::getCompatibilityMode() != PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) && + ((is_string($operand1) && !is_numeric($operand1) && strlen($operand1)>0) || + (is_string($operand2) && !is_numeric($operand2) && strlen($operand2)>0))) { + $result = PHPExcel_Calculation_Functions::VALUE(); + } else { + // If we're dealing with non-matrix operations, execute the necessary operation + switch ($operation) { + // Addition + case '+': + $result = $operand1 + $operand2; + break; + // Subtraction + case '-': + $result = $operand1 - $operand2; + break; + // Multiplication + case '*': + $result = $operand1 * $operand2; + break; + // Division + case '/': + if ($operand2 == 0) { + // Trap for Divide by Zero error + $stack->push('Value','#DIV/0!'); + $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails('#DIV/0!')); + return FALSE; + } else { + $result = $operand1 / $operand2; + } + break; + // Power + case '^': + $result = pow($operand1, $operand2); + break; + } + } + } + + // Log the result details + $this->_debugLog->writeDebugLog('Evaluation Result is ', $this->_showTypeDetails($result)); + // And push the result onto the stack + $stack->push('Value',$result); + return TRUE; + } // function _executeNumericBinaryOperation() + + + // trigger an error, but nicely, if need be + protected function _raiseFormulaError($errorMessage) { + $this->formulaError = $errorMessage; + $this->_cyclicReferenceStack->clear(); + if (!$this->suppressFormulaErrors) throw new PHPExcel_Calculation_Exception($errorMessage); + trigger_error($errorMessage, E_USER_ERROR); + } // function _raiseFormulaError() + + + /** + * Extract range values + * + * @param string &$pRange String based range representation + * @param PHPExcel_Worksheet $pSheet Worksheet + * @param boolean $resetLog Flag indicating whether calculation log should be reset or not + * @return mixed Array of values in range if range contains more than one element. Otherwise, a single value is returned. + * @throws PHPExcel_Calculation_Exception + */ + public function extractCellRange(&$pRange = 'A1', PHPExcel_Worksheet $pSheet = NULL, $resetLog = TRUE) { + // Return value + $returnValue = array (); + +// echo 'extractCellRange('.$pRange.')',PHP_EOL; + if ($pSheet !== NULL) { + $pSheetName = $pSheet->getTitle(); +// echo 'Passed sheet name is '.$pSheetName.PHP_EOL; +// echo 'Range reference is '.$pRange.PHP_EOL; + if (strpos ($pRange, '!') !== false) { +// echo '$pRange reference includes sheet reference',PHP_EOL; + list($pSheetName,$pRange) = PHPExcel_Worksheet::extractSheetTitle($pRange, true); +// echo 'New sheet name is '.$pSheetName,PHP_EOL; +// echo 'Adjusted Range reference is '.$pRange,PHP_EOL; + $pSheet = $this->_workbook->getSheetByName($pSheetName); + } + + // Extract range + $aReferences = PHPExcel_Cell::extractAllCellReferencesInRange($pRange); + $pRange = $pSheetName.'!'.$pRange; + if (!isset($aReferences[1])) { + // Single cell in range + sscanf($aReferences[0],'%[A-Z]%d', $currentCol, $currentRow); + $cellValue = NULL; + if ($pSheet->cellExists($aReferences[0])) { + $returnValue[$currentRow][$currentCol] = $pSheet->getCell($aReferences[0])->getCalculatedValue($resetLog); + } else { + $returnValue[$currentRow][$currentCol] = NULL; + } + } else { + // Extract cell data for all cells in the range + foreach ($aReferences as $reference) { + // Extract range + sscanf($reference,'%[A-Z]%d', $currentCol, $currentRow); + $cellValue = NULL; + if ($pSheet->cellExists($reference)) { + $returnValue[$currentRow][$currentCol] = $pSheet->getCell($reference)->getCalculatedValue($resetLog); + } else { + $returnValue[$currentRow][$currentCol] = NULL; + } + } + } + } + + // Return + return $returnValue; + } // function extractCellRange() + + + /** + * Extract range values + * + * @param string &$pRange String based range representation + * @param PHPExcel_Worksheet $pSheet Worksheet + * @return mixed Array of values in range if range contains more than one element. Otherwise, a single value is returned. + * @param boolean $resetLog Flag indicating whether calculation log should be reset or not + * @throws PHPExcel_Calculation_Exception + */ + public function extractNamedRange(&$pRange = 'A1', PHPExcel_Worksheet $pSheet = NULL, $resetLog = TRUE) { + // Return value + $returnValue = array (); + +// echo 'extractNamedRange('.$pRange.')
'; + if ($pSheet !== NULL) { + $pSheetName = $pSheet->getTitle(); +// echo 'Current sheet name is '.$pSheetName.'
'; +// echo 'Range reference is '.$pRange.'
'; + if (strpos ($pRange, '!') !== false) { +// echo '$pRange reference includes sheet reference',PHP_EOL; + list($pSheetName,$pRange) = PHPExcel_Worksheet::extractSheetTitle($pRange, true); +// echo 'New sheet name is '.$pSheetName,PHP_EOL; +// echo 'Adjusted Range reference is '.$pRange,PHP_EOL; + $pSheet = $this->_workbook->getSheetByName($pSheetName); + } + + // Named range? + $namedRange = PHPExcel_NamedRange::resolveRange($pRange, $pSheet); + if ($namedRange !== NULL) { + $pSheet = $namedRange->getWorksheet(); +// echo 'Named Range '.$pRange.' ('; + $pRange = $namedRange->getRange(); + $splitRange = PHPExcel_Cell::splitRange($pRange); + // Convert row and column references + if (ctype_alpha($splitRange[0][0])) { + $pRange = $splitRange[0][0] . '1:' . $splitRange[0][1] . $namedRange->getWorksheet()->getHighestRow(); + } elseif(ctype_digit($splitRange[0][0])) { + $pRange = 'A' . $splitRange[0][0] . ':' . $namedRange->getWorksheet()->getHighestColumn() . $splitRange[0][1]; + } +// echo $pRange.') is in sheet '.$namedRange->getWorksheet()->getTitle().'
'; + +// if ($pSheet->getTitle() != $namedRange->getWorksheet()->getTitle()) { +// if (!$namedRange->getLocalOnly()) { +// $pSheet = $namedRange->getWorksheet(); +// } else { +// return $returnValue; +// } +// } + } else { + return PHPExcel_Calculation_Functions::REF(); + } + + // Extract range + $aReferences = PHPExcel_Cell::extractAllCellReferencesInRange($pRange); +// var_dump($aReferences); + if (!isset($aReferences[1])) { + // Single cell (or single column or row) in range + list($currentCol,$currentRow) = PHPExcel_Cell::coordinateFromString($aReferences[0]); + $cellValue = NULL; + if ($pSheet->cellExists($aReferences[0])) { + $returnValue[$currentRow][$currentCol] = $pSheet->getCell($aReferences[0])->getCalculatedValue($resetLog); + } else { + $returnValue[$currentRow][$currentCol] = NULL; + } + } else { + // Extract cell data for all cells in the range + foreach ($aReferences as $reference) { + // Extract range + list($currentCol,$currentRow) = PHPExcel_Cell::coordinateFromString($reference); +// echo 'NAMED RANGE: $currentCol='.$currentCol.' $currentRow='.$currentRow.'
'; + $cellValue = NULL; + if ($pSheet->cellExists($reference)) { + $returnValue[$currentRow][$currentCol] = $pSheet->getCell($reference)->getCalculatedValue($resetLog); + } else { + $returnValue[$currentRow][$currentCol] = NULL; + } + } + } +// print_r($returnValue); +// echo '
'; + } + + // Return + return $returnValue; + } // function extractNamedRange() + + + /** + * Is a specific function implemented? + * + * @param string $pFunction Function Name + * @return boolean + */ + public function isImplemented($pFunction = '') { + $pFunction = strtoupper ($pFunction); + if (isset(self::$_PHPExcelFunctions[$pFunction])) { + return (self::$_PHPExcelFunctions[$pFunction]['functionCall'] != 'PHPExcel_Calculation_Functions::DUMMY'); + } else { + return FALSE; + } + } // function isImplemented() + + + /** + * Get a list of all implemented functions as an array of function objects + * + * @return array of PHPExcel_Calculation_Function + */ + public function listFunctions() { + // Return value + $returnValue = array(); + // Loop functions + foreach(self::$_PHPExcelFunctions as $functionName => $function) { + if ($function['functionCall'] != 'PHPExcel_Calculation_Functions::DUMMY') { + $returnValue[$functionName] = new PHPExcel_Calculation_Function($function['category'], + $functionName, + $function['functionCall'] + ); + } + } + + // Return + return $returnValue; + } // function listFunctions() + + + /** + * Get a list of all Excel function names + * + * @return array + */ + public function listAllFunctionNames() { + return array_keys(self::$_PHPExcelFunctions); + } // function listAllFunctionNames() + + /** + * Get a list of implemented Excel function names + * + * @return array + */ + public function listFunctionNames() { + // Return value + $returnValue = array(); + // Loop functions + foreach(self::$_PHPExcelFunctions as $functionName => $function) { + if ($function['functionCall'] != 'PHPExcel_Calculation_Functions::DUMMY') { + $returnValue[] = $functionName; + } + } + + // Return + return $returnValue; + } // function listFunctionNames() + +} // class PHPExcel_Calculation + diff --git a/PHPExcel/Calculation/Database.php b/PHPExcel/Calculation/Database.php new file mode 100644 index 0000000..c3e86d7 --- /dev/null +++ b/PHPExcel/Calculation/Database.php @@ -0,0 +1,725 @@ + $criteriaName) { + $testCondition = array(); + $testConditionCount = 0; + foreach($criteria as $row => $criterion) { + if ($criterion[$key] > '') { + $testCondition[] = '[:'.$criteriaName.']'.PHPExcel_Calculation_Functions::_ifCondition($criterion[$key]); + $testConditionCount++; + } + } + if ($testConditionCount > 1) { + $testConditions[] = 'OR('.implode(',',$testCondition).')'; + $testConditionsCount++; + } elseif($testConditionCount == 1) { + $testConditions[] = $testCondition[0]; + $testConditionsCount++; + } + } + + if ($testConditionsCount > 1) { + $testConditionSet = 'AND('.implode(',',$testConditions).')'; + } elseif($testConditionsCount == 1) { + $testConditionSet = $testConditions[0]; + } + + // Loop through each row of the database + foreach($database as $dataRow => $dataValues) { + // Substitute actual values from the database row for our [:placeholders] + $testConditionList = $testConditionSet; + foreach($criteriaNames as $key => $criteriaName) { + $k = array_search($criteriaName,$fieldNames); + if (isset($dataValues[$k])) { + $dataValue = $dataValues[$k]; + $dataValue = (is_string($dataValue)) ? PHPExcel_Calculation::_wrapResult(strtoupper($dataValue)) : $dataValue; + $testConditionList = str_replace('[:'.$criteriaName.']',$dataValue,$testConditionList); + } + } + // evaluate the criteria against the row data + $result = PHPExcel_Calculation::getInstance()->_calculateFormulaValue('='.$testConditionList); + // If the row failed to meet the criteria, remove it from the database + if (!$result) { + unset($database[$dataRow]); + } + } + + return $database; + } + + + /** + * DAVERAGE + * + * Averages the values in a column of a list or database that match conditions you specify. + * + * Excel Function: + * DAVERAGE(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DAVERAGE($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::AVERAGE($colData); + } // function DAVERAGE() + + + /** + * DCOUNT + * + * Counts the cells that contain numbers in a column of a list or database that match conditions + * that you specify. + * + * Excel Function: + * DCOUNT(database,[field],criteria) + * + * Excel Function: + * DAVERAGE(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return integer + * + * @TODO The field argument is optional. If field is omitted, DCOUNT counts all records in the + * database that match the criteria. + * + */ + public static function DCOUNT($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::COUNT($colData); + } // function DCOUNT() + + + /** + * DCOUNTA + * + * Counts the nonblank cells in a column of a list or database that match conditions that you specify. + * + * Excel Function: + * DCOUNTA(database,[field],criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return integer + * + * @TODO The field argument is optional. If field is omitted, DCOUNTA counts all records in the + * database that match the criteria. + * + */ + public static function DCOUNTA($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::COUNTA($colData); + } // function DCOUNTA() + + + /** + * DGET + * + * Extracts a single value from a column of a list or database that matches conditions that you + * specify. + * + * Excel Function: + * DGET(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return mixed + * + */ + public static function DGET($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + if (count($colData) > 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + + return $colData[0]; + } // function DGET() + + + /** + * DMAX + * + * Returns the largest number in a column of a list or database that matches conditions you that + * specify. + * + * Excel Function: + * DMAX(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DMAX($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::MAX($colData); + } // function DMAX() + + + /** + * DMIN + * + * Returns the smallest number in a column of a list or database that matches conditions you that + * specify. + * + * Excel Function: + * DMIN(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DMIN($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::MIN($colData); + } // function DMIN() + + + /** + * DPRODUCT + * + * Multiplies the values in a column of a list or database that match conditions that you specify. + * + * Excel Function: + * DPRODUCT(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DPRODUCT($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_MathTrig::PRODUCT($colData); + } // function DPRODUCT() + + + /** + * DSTDEV + * + * Estimates the standard deviation of a population based on a sample by using the numbers in a + * column of a list or database that match conditions that you specify. + * + * Excel Function: + * DSTDEV(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DSTDEV($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::STDEV($colData); + } // function DSTDEV() + + + /** + * DSTDEVP + * + * Calculates the standard deviation of a population based on the entire population by using the + * numbers in a column of a list or database that match conditions that you specify. + * + * Excel Function: + * DSTDEVP(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DSTDEVP($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::STDEVP($colData); + } // function DSTDEVP() + + + /** + * DSUM + * + * Adds the numbers in a column of a list or database that match conditions that you specify. + * + * Excel Function: + * DSUM(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DSUM($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_MathTrig::SUM($colData); + } // function DSUM() + + + /** + * DVAR + * + * Estimates the variance of a population based on a sample by using the numbers in a column + * of a list or database that match conditions that you specify. + * + * Excel Function: + * DVAR(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DVAR($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::VARFunc($colData); + } // function DVAR() + + + /** + * DVARP + * + * Calculates the variance of a population based on the entire population by using the numbers + * in a column of a list or database that match conditions that you specify. + * + * Excel Function: + * DVARP(database,field,criteria) + * + * @access public + * @category Database Functions + * @param mixed[] $database The range of cells that makes up the list or database. + * A database is a list of related data in which rows of related + * information are records, and columns of data are fields. The + * first row of the list contains labels for each column. + * @param string|integer $field Indicates which column is used in the function. Enter the + * column label enclosed between double quotation marks, such as + * "Age" or "Yield," or a number (without quotation marks) that + * represents the position of the column within the list: 1 for + * the first column, 2 for the second column, and so on. + * @param mixed[] $criteria The range of cells that contains the conditions you specify. + * You can use any range for the criteria argument, as long as it + * includes at least one column label and at least one cell below + * the column label in which you specify a condition for the + * column. + * @return float + * + */ + public static function DVARP($database,$field,$criteria) { + $field = self::__fieldExtract($database,$field); + if (is_null($field)) { + return NULL; + } + + // reduce the database to a set of rows that match all the criteria + $database = self::__filter($database,$criteria); + // extract an array of values for the requested column + $colData = array(); + foreach($database as $row) { + $colData[] = $row[$field]; + } + + // Return + return PHPExcel_Calculation_Statistical::VARP($colData); + } // function DVARP() + + +} // class PHPExcel_Calculation_Database diff --git a/PHPExcel/Calculation/DateTime.php b/PHPExcel/Calculation/DateTime.php new file mode 100644 index 0000000..debd131 --- /dev/null +++ b/PHPExcel/Calculation/DateTime.php @@ -0,0 +1,1475 @@ +format('m'); + $oYear = (int) $PHPDateObject->format('Y'); + + $adjustmentMonthsString = (string) $adjustmentMonths; + if ($adjustmentMonths > 0) { + $adjustmentMonthsString = '+'.$adjustmentMonths; + } + if ($adjustmentMonths != 0) { + $PHPDateObject->modify($adjustmentMonthsString.' months'); + } + $nMonth = (int) $PHPDateObject->format('m'); + $nYear = (int) $PHPDateObject->format('Y'); + + $monthDiff = ($nMonth - $oMonth) + (($nYear - $oYear) * 12); + if ($monthDiff != $adjustmentMonths) { + $adjustDays = (int) $PHPDateObject->format('d'); + $adjustDaysString = '-'.$adjustDays.' days'; + $PHPDateObject->modify($adjustDaysString); + } + return $PHPDateObject; + } // function _adjustDateByMonths() + + + /** + * DATETIMENOW + * + * Returns the current date and time. + * The NOW function is useful when you need to display the current date and time on a worksheet or + * calculate a value based on the current date and time, and have that value updated each time you + * open the worksheet. + * + * NOTE: When used in a Cell Formula, MS Excel changes the cell format so that it matches the date + * and time format of your regional settings. PHPExcel does not change cell formatting in this way. + * + * Excel Function: + * NOW() + * + * @access public + * @category Date/Time Functions + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function DATETIMENOW() { + $saveTimeZone = date_default_timezone_get(); + date_default_timezone_set('UTC'); + $retValue = False; + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + $retValue = (float) PHPExcel_Shared_Date::PHPToExcel(time()); + break; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + $retValue = (integer) time(); + break; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + $retValue = new DateTime(); + break; + } + date_default_timezone_set($saveTimeZone); + + return $retValue; + } // function DATETIMENOW() + + + /** + * DATENOW + * + * Returns the current date. + * The NOW function is useful when you need to display the current date and time on a worksheet or + * calculate a value based on the current date and time, and have that value updated each time you + * open the worksheet. + * + * NOTE: When used in a Cell Formula, MS Excel changes the cell format so that it matches the date + * and time format of your regional settings. PHPExcel does not change cell formatting in this way. + * + * Excel Function: + * TODAY() + * + * @access public + * @category Date/Time Functions + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function DATENOW() { + $saveTimeZone = date_default_timezone_get(); + date_default_timezone_set('UTC'); + $retValue = False; + $excelDateTime = floor(PHPExcel_Shared_Date::PHPToExcel(time())); + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + $retValue = (float) $excelDateTime; + break; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + $retValue = (integer) PHPExcel_Shared_Date::ExcelToPHP($excelDateTime); + break; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + $retValue = PHPExcel_Shared_Date::ExcelToPHPObject($excelDateTime); + break; + } + date_default_timezone_set($saveTimeZone); + + return $retValue; + } // function DATENOW() + + + /** + * DATE + * + * The DATE function returns a value that represents a particular date. + * + * NOTE: When used in a Cell Formula, MS Excel changes the cell format so that it matches the date + * format of your regional settings. PHPExcel does not change cell formatting in this way. + * + * Excel Function: + * DATE(year,month,day) + * + * PHPExcel is a lot more forgiving than MS Excel when passing non numeric values to this function. + * A Month name or abbreviation (English only at this point) such as 'January' or 'Jan' will still be accepted, + * as will a day value with a suffix (e.g. '21st' rather than simply 21); again only English language. + * + * @access public + * @category Date/Time Functions + * @param integer $year The value of the year argument can include one to four digits. + * Excel interprets the year argument according to the configured + * date system: 1900 or 1904. + * If year is between 0 (zero) and 1899 (inclusive), Excel adds that + * value to 1900 to calculate the year. For example, DATE(108,1,2) + * returns January 2, 2008 (1900+108). + * If year is between 1900 and 9999 (inclusive), Excel uses that + * value as the year. For example, DATE(2008,1,2) returns January 2, + * 2008. + * If year is less than 0 or is 10000 or greater, Excel returns the + * #NUM! error value. + * @param integer $month A positive or negative integer representing the month of the year + * from 1 to 12 (January to December). + * If month is greater than 12, month adds that number of months to + * the first month in the year specified. For example, DATE(2008,14,2) + * returns the serial number representing February 2, 2009. + * If month is less than 1, month subtracts the magnitude of that + * number of months, plus 1, from the first month in the year + * specified. For example, DATE(2008,-3,2) returns the serial number + * representing September 2, 2007. + * @param integer $day A positive or negative integer representing the day of the month + * from 1 to 31. + * If day is greater than the number of days in the month specified, + * day adds that number of days to the first day in the month. For + * example, DATE(2008,1,35) returns the serial number representing + * February 4, 2008. + * If day is less than 1, day subtracts the magnitude that number of + * days, plus one, from the first day of the month specified. For + * example, DATE(2008,1,-15) returns the serial number representing + * December 16, 2007. + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function DATE($year = 0, $month = 1, $day = 1) { + $year = PHPExcel_Calculation_Functions::flattenSingleValue($year); + $month = PHPExcel_Calculation_Functions::flattenSingleValue($month); + $day = PHPExcel_Calculation_Functions::flattenSingleValue($day); + + if (($month !== NULL) && (!is_numeric($month))) { + $month = PHPExcel_Shared_Date::monthStringToNumber($month); + } + + if (($day !== NULL) && (!is_numeric($day))) { + $day = PHPExcel_Shared_Date::dayStringToNumber($day); + } + + $year = ($year !== NULL) ? PHPExcel_Shared_String::testStringAsNumeric($year) : 0; + $month = ($month !== NULL) ? PHPExcel_Shared_String::testStringAsNumeric($month) : 0; + $day = ($day !== NULL) ? PHPExcel_Shared_String::testStringAsNumeric($day) : 0; + if ((!is_numeric($year)) || + (!is_numeric($month)) || + (!is_numeric($day))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $year = (integer) $year; + $month = (integer) $month; + $day = (integer) $day; + + $baseYear = PHPExcel_Shared_Date::getExcelCalendar(); + // Validate parameters + if ($year < ($baseYear-1900)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ((($baseYear-1900) != 0) && ($year < $baseYear) && ($year >= 1900)) { + return PHPExcel_Calculation_Functions::NaN(); + } + + if (($year < $baseYear) && ($year >= ($baseYear-1900))) { + $year += 1900; + } + + if ($month < 1) { + // Handle year/month adjustment if month < 1 + --$month; + $year += ceil($month / 12) - 1; + $month = 13 - abs($month % 12); + } elseif ($month > 12) { + // Handle year/month adjustment if month > 12 + $year += floor($month / 12); + $month = ($month % 12); + } + + // Re-validate the year parameter after adjustments + if (($year < $baseYear) || ($year >= 10000)) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + $excelDateValue = PHPExcel_Shared_Date::FormattedPHPToExcel($year, $month, $day); + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + return (float) $excelDateValue; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + return (integer) PHPExcel_Shared_Date::ExcelToPHP($excelDateValue); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + return PHPExcel_Shared_Date::ExcelToPHPObject($excelDateValue); + } + } // function DATE() + + + /** + * TIME + * + * The TIME function returns a value that represents a particular time. + * + * NOTE: When used in a Cell Formula, MS Excel changes the cell format so that it matches the time + * format of your regional settings. PHPExcel does not change cell formatting in this way. + * + * Excel Function: + * TIME(hour,minute,second) + * + * @access public + * @category Date/Time Functions + * @param integer $hour A number from 0 (zero) to 32767 representing the hour. + * Any value greater than 23 will be divided by 24 and the remainder + * will be treated as the hour value. For example, TIME(27,0,0) = + * TIME(3,0,0) = .125 or 3:00 AM. + * @param integer $minute A number from 0 to 32767 representing the minute. + * Any value greater than 59 will be converted to hours and minutes. + * For example, TIME(0,750,0) = TIME(12,30,0) = .520833 or 12:30 PM. + * @param integer $second A number from 0 to 32767 representing the second. + * Any value greater than 59 will be converted to hours, minutes, + * and seconds. For example, TIME(0,0,2000) = TIME(0,33,22) = .023148 + * or 12:33:20 AM + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function TIME($hour = 0, $minute = 0, $second = 0) { + $hour = PHPExcel_Calculation_Functions::flattenSingleValue($hour); + $minute = PHPExcel_Calculation_Functions::flattenSingleValue($minute); + $second = PHPExcel_Calculation_Functions::flattenSingleValue($second); + + if ($hour == '') { $hour = 0; } + if ($minute == '') { $minute = 0; } + if ($second == '') { $second = 0; } + + if ((!is_numeric($hour)) || (!is_numeric($minute)) || (!is_numeric($second))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $hour = (integer) $hour; + $minute = (integer) $minute; + $second = (integer) $second; + + if ($second < 0) { + $minute += floor($second / 60); + $second = 60 - abs($second % 60); + if ($second == 60) { $second = 0; } + } elseif ($second >= 60) { + $minute += floor($second / 60); + $second = $second % 60; + } + if ($minute < 0) { + $hour += floor($minute / 60); + $minute = 60 - abs($minute % 60); + if ($minute == 60) { $minute = 0; } + } elseif ($minute >= 60) { + $hour += floor($minute / 60); + $minute = $minute % 60; + } + + if ($hour > 23) { + $hour = $hour % 24; + } elseif ($hour < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + $date = 0; + $calendar = PHPExcel_Shared_Date::getExcelCalendar(); + if ($calendar != PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900) { + $date = 1; + } + return (float) PHPExcel_Shared_Date::FormattedPHPToExcel($calendar, 1, $date, $hour, $minute, $second); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + return (integer) PHPExcel_Shared_Date::ExcelToPHP(PHPExcel_Shared_Date::FormattedPHPToExcel(1970, 1, 1, $hour, $minute, $second)); // -2147468400; // -2147472000 + 3600 + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + $dayAdjust = 0; + if ($hour < 0) { + $dayAdjust = floor($hour / 24); + $hour = 24 - abs($hour % 24); + if ($hour == 24) { $hour = 0; } + } elseif ($hour >= 24) { + $dayAdjust = floor($hour / 24); + $hour = $hour % 24; + } + $phpDateObject = new DateTime('1900-01-01 '.$hour.':'.$minute.':'.$second); + if ($dayAdjust != 0) { + $phpDateObject->modify($dayAdjust.' days'); + } + return $phpDateObject; + } + } // function TIME() + + + /** + * DATEVALUE + * + * Returns a value that represents a particular date. + * Use DATEVALUE to convert a date represented by a text string to an Excel or PHP date/time stamp + * value. + * + * NOTE: When used in a Cell Formula, MS Excel changes the cell format so that it matches the date + * format of your regional settings. PHPExcel does not change cell formatting in this way. + * + * Excel Function: + * DATEVALUE(dateValue) + * + * @access public + * @category Date/Time Functions + * @param string $dateValue Text that represents a date in a Microsoft Excel date format. + * For example, "1/30/2008" or "30-Jan-2008" are text strings within + * quotation marks that represent dates. Using the default date + * system in Excel for Windows, date_text must represent a date from + * January 1, 1900, to December 31, 9999. Using the default date + * system in Excel for the Macintosh, date_text must represent a date + * from January 1, 1904, to December 31, 9999. DATEVALUE returns the + * #VALUE! error value if date_text is out of this range. + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function DATEVALUE($dateValue = 1) { + $dateValue = trim(PHPExcel_Calculation_Functions::flattenSingleValue($dateValue),'"'); + // Strip any ordinals because they're allowed in Excel (English only) + $dateValue = preg_replace('/(\d)(st|nd|rd|th)([ -\/])/Ui','$1$3',$dateValue); + // Convert separators (/ . or space) to hyphens (should also handle dot used for ordinals in some countries, e.g. Denmark, Germany) + $dateValue = str_replace(array('/','.','-',' '),array(' ',' ',' ',' '),$dateValue); + + $yearFound = false; + $t1 = explode(' ',$dateValue); + foreach($t1 as &$t) { + if ((is_numeric($t)) && ($t > 31)) { + if ($yearFound) { + return PHPExcel_Calculation_Functions::VALUE(); + } else { + if ($t < 100) { $t += 1900; } + $yearFound = true; + } + } + } + if ((count($t1) == 1) && (strpos($t,':') != false)) { + // We've been fed a time value without any date + return 0.0; + } elseif (count($t1) == 2) { + // We only have two parts of the date: either day/month or month/year + if ($yearFound) { + array_unshift($t1,1); + } else { + array_push($t1,date('Y')); + } + } + unset($t); + $dateValue = implode(' ',$t1); + + $PHPDateArray = date_parse($dateValue); + if (($PHPDateArray === False) || ($PHPDateArray['error_count'] > 0)) { + $testVal1 = strtok($dateValue,'- '); + if ($testVal1 !== False) { + $testVal2 = strtok('- '); + if ($testVal2 !== False) { + $testVal3 = strtok('- '); + if ($testVal3 === False) { + $testVal3 = strftime('%Y'); + } + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + $PHPDateArray = date_parse($testVal1.'-'.$testVal2.'-'.$testVal3); + if (($PHPDateArray === False) || ($PHPDateArray['error_count'] > 0)) { + $PHPDateArray = date_parse($testVal2.'-'.$testVal1.'-'.$testVal3); + if (($PHPDateArray === False) || ($PHPDateArray['error_count'] > 0)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + } + + if (($PHPDateArray !== False) && ($PHPDateArray['error_count'] == 0)) { + // Execute function + if ($PHPDateArray['year'] == '') { $PHPDateArray['year'] = strftime('%Y'); } + if ($PHPDateArray['year'] < 1900) + return PHPExcel_Calculation_Functions::VALUE(); + if ($PHPDateArray['month'] == '') { $PHPDateArray['month'] = strftime('%m'); } + if ($PHPDateArray['day'] == '') { $PHPDateArray['day'] = strftime('%d'); } + $excelDateValue = floor(PHPExcel_Shared_Date::FormattedPHPToExcel($PHPDateArray['year'],$PHPDateArray['month'],$PHPDateArray['day'],$PHPDateArray['hour'],$PHPDateArray['minute'],$PHPDateArray['second'])); + + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + return (float) $excelDateValue; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + return (integer) PHPExcel_Shared_Date::ExcelToPHP($excelDateValue); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + return new DateTime($PHPDateArray['year'].'-'.$PHPDateArray['month'].'-'.$PHPDateArray['day'].' 00:00:00'); + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function DATEVALUE() + + + /** + * TIMEVALUE + * + * Returns a value that represents a particular time. + * Use TIMEVALUE to convert a time represented by a text string to an Excel or PHP date/time stamp + * value. + * + * NOTE: When used in a Cell Formula, MS Excel changes the cell format so that it matches the time + * format of your regional settings. PHPExcel does not change cell formatting in this way. + * + * Excel Function: + * TIMEVALUE(timeValue) + * + * @access public + * @category Date/Time Functions + * @param string $timeValue A text string that represents a time in any one of the Microsoft + * Excel time formats; for example, "6:45 PM" and "18:45" text strings + * within quotation marks that represent time. + * Date information in time_text is ignored. + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function TIMEVALUE($timeValue) { + $timeValue = trim(PHPExcel_Calculation_Functions::flattenSingleValue($timeValue),'"'); + $timeValue = str_replace(array('/','.'),array('-','-'),$timeValue); + + $PHPDateArray = date_parse($timeValue); + if (($PHPDateArray !== False) && ($PHPDateArray['error_count'] == 0)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $excelDateValue = PHPExcel_Shared_Date::FormattedPHPToExcel($PHPDateArray['year'],$PHPDateArray['month'],$PHPDateArray['day'],$PHPDateArray['hour'],$PHPDateArray['minute'],$PHPDateArray['second']); + } else { + $excelDateValue = PHPExcel_Shared_Date::FormattedPHPToExcel(1900,1,1,$PHPDateArray['hour'],$PHPDateArray['minute'],$PHPDateArray['second']) - 1; + } + + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + return (float) $excelDateValue; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + return (integer) $phpDateValue = PHPExcel_Shared_Date::ExcelToPHP($excelDateValue+25569) - 3600;; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + return new DateTime('1900-01-01 '.$PHPDateArray['hour'].':'.$PHPDateArray['minute'].':'.$PHPDateArray['second']); + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function TIMEVALUE() + + + /** + * DATEDIF + * + * @param mixed $startDate Excel date serial value, PHP date/time stamp, PHP DateTime object + * or a standard date string + * @param mixed $endDate Excel date serial value, PHP date/time stamp, PHP DateTime object + * or a standard date string + * @param string $unit + * @return integer Interval between the dates + */ + public static function DATEDIF($startDate = 0, $endDate = 0, $unit = 'D') { + $startDate = PHPExcel_Calculation_Functions::flattenSingleValue($startDate); + $endDate = PHPExcel_Calculation_Functions::flattenSingleValue($endDate); + $unit = strtoupper(PHPExcel_Calculation_Functions::flattenSingleValue($unit)); + + if (is_string($startDate = self::_getDateValue($startDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($endDate = self::_getDateValue($endDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Validate parameters + if ($startDate >= $endDate) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + $difference = $endDate - $startDate; + + $PHPStartDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($startDate); + $startDays = $PHPStartDateObject->format('j'); + $startMonths = $PHPStartDateObject->format('n'); + $startYears = $PHPStartDateObject->format('Y'); + + $PHPEndDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($endDate); + $endDays = $PHPEndDateObject->format('j'); + $endMonths = $PHPEndDateObject->format('n'); + $endYears = $PHPEndDateObject->format('Y'); + + $retVal = PHPExcel_Calculation_Functions::NaN(); + switch ($unit) { + case 'D': + $retVal = intval($difference); + break; + case 'M': + $retVal = intval($endMonths - $startMonths) + (intval($endYears - $startYears) * 12); + // We're only interested in full months + if ($endDays < $startDays) { + --$retVal; + } + break; + case 'Y': + $retVal = intval($endYears - $startYears); + // We're only interested in full months + if ($endMonths < $startMonths) { + --$retVal; + } elseif (($endMonths == $startMonths) && ($endDays < $startDays)) { + --$retVal; + } + break; + case 'MD': + if ($endDays < $startDays) { + $retVal = $endDays; + $PHPEndDateObject->modify('-'.$endDays.' days'); + $adjustDays = $PHPEndDateObject->format('j'); + if ($adjustDays > $startDays) { + $retVal += ($adjustDays - $startDays); + } + } else { + $retVal = $endDays - $startDays; + } + break; + case 'YM': + $retVal = intval($endMonths - $startMonths); + if ($retVal < 0) $retVal = 12 + $retVal; + // We're only interested in full months + if ($endDays < $startDays) { + --$retVal; + } + break; + case 'YD': + $retVal = intval($difference); + if ($endYears > $startYears) { + while ($endYears > $startYears) { + $PHPEndDateObject->modify('-1 year'); + $endYears = $PHPEndDateObject->format('Y'); + } + $retVal = $PHPEndDateObject->format('z') - $PHPStartDateObject->format('z'); + if ($retVal < 0) { $retVal += 365; } + } + break; + default: + $retVal = PHPExcel_Calculation_Functions::NaN(); + } + return $retVal; + } // function DATEDIF() + + + /** + * DAYS360 + * + * Returns the number of days between two dates based on a 360-day year (twelve 30-day months), + * which is used in some accounting calculations. Use this function to help compute payments if + * your accounting system is based on twelve 30-day months. + * + * Excel Function: + * DAYS360(startDate,endDate[,method]) + * + * @access public + * @category Date/Time Functions + * @param mixed $startDate Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param mixed $endDate Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param boolean $method US or European Method + * FALSE or omitted: U.S. (NASD) method. If the starting date is + * the last day of a month, it becomes equal to the 30th of the + * same month. If the ending date is the last day of a month and + * the starting date is earlier than the 30th of a month, the + * ending date becomes equal to the 1st of the next month; + * otherwise the ending date becomes equal to the 30th of the + * same month. + * TRUE: European method. Starting dates and ending dates that + * occur on the 31st of a month become equal to the 30th of the + * same month. + * @return integer Number of days between start date and end date + */ + public static function DAYS360($startDate = 0, $endDate = 0, $method = false) { + $startDate = PHPExcel_Calculation_Functions::flattenSingleValue($startDate); + $endDate = PHPExcel_Calculation_Functions::flattenSingleValue($endDate); + + if (is_string($startDate = self::_getDateValue($startDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($endDate = self::_getDateValue($endDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (!is_bool($method)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Execute function + $PHPStartDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($startDate); + $startDay = $PHPStartDateObject->format('j'); + $startMonth = $PHPStartDateObject->format('n'); + $startYear = $PHPStartDateObject->format('Y'); + + $PHPEndDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($endDate); + $endDay = $PHPEndDateObject->format('j'); + $endMonth = $PHPEndDateObject->format('n'); + $endYear = $PHPEndDateObject->format('Y'); + + return self::_dateDiff360($startDay, $startMonth, $startYear, $endDay, $endMonth, $endYear, !$method); + } // function DAYS360() + + + /** + * YEARFRAC + * + * Calculates the fraction of the year represented by the number of whole days between two dates + * (the start_date and the end_date). + * Use the YEARFRAC worksheet function to identify the proportion of a whole year's benefits or + * obligations to assign to a specific term. + * + * Excel Function: + * YEARFRAC(startDate,endDate[,method]) + * + * @access public + * @category Date/Time Functions + * @param mixed $startDate Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param mixed $endDate Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param integer $method Method used for the calculation + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float fraction of the year + */ + public static function YEARFRAC($startDate = 0, $endDate = 0, $method = 0) { + $startDate = PHPExcel_Calculation_Functions::flattenSingleValue($startDate); + $endDate = PHPExcel_Calculation_Functions::flattenSingleValue($endDate); + $method = PHPExcel_Calculation_Functions::flattenSingleValue($method); + + if (is_string($startDate = self::_getDateValue($startDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($endDate = self::_getDateValue($endDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (((is_numeric($method)) && (!is_string($method))) || ($method == '')) { + switch($method) { + case 0 : + return self::DAYS360($startDate,$endDate) / 360; + case 1 : + $days = self::DATEDIF($startDate,$endDate); + $startYear = self::YEAR($startDate); + $endYear = self::YEAR($endDate); + $years = $endYear - $startYear + 1; + $leapDays = 0; + if ($years == 1) { + if (self::_isLeapYear($endYear)) { + $startMonth = self::MONTHOFYEAR($startDate); + $endMonth = self::MONTHOFYEAR($endDate); + $endDay = self::DAYOFMONTH($endDate); + if (($startMonth < 3) || + (($endMonth * 100 + $endDay) >= (2 * 100 + 29))) { + $leapDays += 1; + } + } + } else { + for($year = $startYear; $year <= $endYear; ++$year) { + if ($year == $startYear) { + $startMonth = self::MONTHOFYEAR($startDate); + $startDay = self::DAYOFMONTH($startDate); + if ($startMonth < 3) { + $leapDays += (self::_isLeapYear($year)) ? 1 : 0; + } + } elseif($year == $endYear) { + $endMonth = self::MONTHOFYEAR($endDate); + $endDay = self::DAYOFMONTH($endDate); + if (($endMonth * 100 + $endDay) >= (2 * 100 + 29)) { + $leapDays += (self::_isLeapYear($year)) ? 1 : 0; + } + } else { + $leapDays += (self::_isLeapYear($year)) ? 1 : 0; + } + } + if ($years == 2) { + if (($leapDays == 0) && (self::_isLeapYear($startYear)) && ($days > 365)) { + $leapDays = 1; + } elseif ($days < 366) { + $years = 1; + } + } + $leapDays /= $years; + } + return $days / (365 + $leapDays); + case 2 : + return self::DATEDIF($startDate,$endDate) / 360; + case 3 : + return self::DATEDIF($startDate,$endDate) / 365; + case 4 : + return self::DAYS360($startDate,$endDate,True) / 360; + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function YEARFRAC() + + + /** + * NETWORKDAYS + * + * Returns the number of whole working days between start_date and end_date. Working days + * exclude weekends and any dates identified in holidays. + * Use NETWORKDAYS to calculate employee benefits that accrue based on the number of days + * worked during a specific term. + * + * Excel Function: + * NETWORKDAYS(startDate,endDate[,holidays[,holiday[,...]]]) + * + * @access public + * @category Date/Time Functions + * @param mixed $startDate Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param mixed $endDate Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param mixed $holidays,... Optional series of Excel date serial value (float), PHP date + * timestamp (integer), PHP DateTime object, or a standard date + * strings that will be excluded from the working calendar, such + * as state and federal holidays and floating holidays. + * @return integer Interval between the dates + */ + public static function NETWORKDAYS($startDate,$endDate) { + // Retrieve the mandatory start and end date that are referenced in the function definition + $startDate = PHPExcel_Calculation_Functions::flattenSingleValue($startDate); + $endDate = PHPExcel_Calculation_Functions::flattenSingleValue($endDate); + // Flush the mandatory start and end date that are referenced in the function definition, and get the optional days + $dateArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + array_shift($dateArgs); + array_shift($dateArgs); + + // Validate the start and end dates + if (is_string($startDate = $sDate = self::_getDateValue($startDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $startDate = (float) floor($startDate); + if (is_string($endDate = $eDate = self::_getDateValue($endDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $endDate = (float) floor($endDate); + + if ($sDate > $eDate) { + $startDate = $eDate; + $endDate = $sDate; + } + + // Execute function + $startDoW = 6 - self::DAYOFWEEK($startDate,2); + if ($startDoW < 0) { $startDoW = 0; } + $endDoW = self::DAYOFWEEK($endDate,2); + if ($endDoW >= 6) { $endDoW = 0; } + + $wholeWeekDays = floor(($endDate - $startDate) / 7) * 5; + $partWeekDays = $endDoW + $startDoW; + if ($partWeekDays > 5) { + $partWeekDays -= 5; + } + + // Test any extra holiday parameters + $holidayCountedArray = array(); + foreach ($dateArgs as $holidayDate) { + if (is_string($holidayDate = self::_getDateValue($holidayDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (($holidayDate >= $startDate) && ($holidayDate <= $endDate)) { + if ((self::DAYOFWEEK($holidayDate,2) < 6) && (!in_array($holidayDate,$holidayCountedArray))) { + --$partWeekDays; + $holidayCountedArray[] = $holidayDate; + } + } + } + + if ($sDate > $eDate) { + return 0 - ($wholeWeekDays + $partWeekDays); + } + return $wholeWeekDays + $partWeekDays; + } // function NETWORKDAYS() + + + /** + * WORKDAY + * + * Returns the date that is the indicated number of working days before or after a date (the + * starting date). Working days exclude weekends and any dates identified as holidays. + * Use WORKDAY to exclude weekends or holidays when you calculate invoice due dates, expected + * delivery times, or the number of days of work performed. + * + * Excel Function: + * WORKDAY(startDate,endDays[,holidays[,holiday[,...]]]) + * + * @access public + * @category Date/Time Functions + * @param mixed $startDate Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param integer $endDays The number of nonweekend and nonholiday days before or after + * startDate. A positive value for days yields a future date; a + * negative value yields a past date. + * @param mixed $holidays,... Optional series of Excel date serial value (float), PHP date + * timestamp (integer), PHP DateTime object, or a standard date + * strings that will be excluded from the working calendar, such + * as state and federal holidays and floating holidays. + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function WORKDAY($startDate,$endDays) { + // Retrieve the mandatory start date and days that are referenced in the function definition + $startDate = PHPExcel_Calculation_Functions::flattenSingleValue($startDate); + $endDays = PHPExcel_Calculation_Functions::flattenSingleValue($endDays); + // Flush the mandatory start date and days that are referenced in the function definition, and get the optional days + $dateArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + array_shift($dateArgs); + array_shift($dateArgs); + + if ((is_string($startDate = self::_getDateValue($startDate))) || (!is_numeric($endDays))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $startDate = (float) floor($startDate); + $endDays = (int) floor($endDays); + // If endDays is 0, we always return startDate + if ($endDays == 0) { return $startDate; } + + $decrementing = ($endDays < 0) ? True : False; + + // Adjust the start date if it falls over a weekend + + $startDoW = self::DAYOFWEEK($startDate,3); + if (self::DAYOFWEEK($startDate,3) >= 5) { + $startDate += ($decrementing) ? -$startDoW + 4: 7 - $startDoW; + ($decrementing) ? $endDays++ : $endDays--; + } + + // Add endDays + $endDate = (float) $startDate + (intval($endDays / 5) * 7) + ($endDays % 5); + + // Adjust the calculated end date if it falls over a weekend + $endDoW = self::DAYOFWEEK($endDate,3); + if ($endDoW >= 5) { + $endDate += ($decrementing) ? -$endDoW + 4: 7 - $endDoW; + } + + // Test any extra holiday parameters + if (!empty($dateArgs)) { + $holidayCountedArray = $holidayDates = array(); + foreach ($dateArgs as $holidayDate) { + if (($holidayDate !== NULL) && (trim($holidayDate) > '')) { + if (is_string($holidayDate = self::_getDateValue($holidayDate))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (self::DAYOFWEEK($holidayDate,3) < 5) { + $holidayDates[] = $holidayDate; + } + } + } + if ($decrementing) { + rsort($holidayDates, SORT_NUMERIC); + } else { + sort($holidayDates, SORT_NUMERIC); + } + foreach ($holidayDates as $holidayDate) { + if ($decrementing) { + if (($holidayDate <= $startDate) && ($holidayDate >= $endDate)) { + if (!in_array($holidayDate,$holidayCountedArray)) { + --$endDate; + $holidayCountedArray[] = $holidayDate; + } + } + } else { + if (($holidayDate >= $startDate) && ($holidayDate <= $endDate)) { + if (!in_array($holidayDate,$holidayCountedArray)) { + ++$endDate; + $holidayCountedArray[] = $holidayDate; + } + } + } + // Adjust the calculated end date if it falls over a weekend + $endDoW = self::DAYOFWEEK($endDate,3); + if ($endDoW >= 5) { + $endDate += ($decrementing) ? -$endDoW + 4: 7 - $endDoW; + } + + } + } + + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + return (float) $endDate; + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + return (integer) PHPExcel_Shared_Date::ExcelToPHP($endDate); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + return PHPExcel_Shared_Date::ExcelToPHPObject($endDate); + } + } // function WORKDAY() + + + /** + * DAYOFMONTH + * + * Returns the day of the month, for a specified date. The day is given as an integer + * ranging from 1 to 31. + * + * Excel Function: + * DAY(dateValue) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @return int Day of the month + */ + public static function DAYOFMONTH($dateValue = 1) { + $dateValue = PHPExcel_Calculation_Functions::flattenSingleValue($dateValue); + + if (is_string($dateValue = self::_getDateValue($dateValue))) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($dateValue == 0.0) { + return 0; + } elseif ($dateValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + $PHPDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($dateValue); + + return (int) $PHPDateObject->format('j'); + } // function DAYOFMONTH() + + + /** + * DAYOFWEEK + * + * Returns the day of the week for a specified date. The day is given as an integer + * ranging from 0 to 7 (dependent on the requested style). + * + * Excel Function: + * WEEKDAY(dateValue[,style]) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param int $style A number that determines the type of return value + * 1 or omitted Numbers 1 (Sunday) through 7 (Saturday). + * 2 Numbers 1 (Monday) through 7 (Sunday). + * 3 Numbers 0 (Monday) through 6 (Sunday). + * @return int Day of the week value + */ + public static function DAYOFWEEK($dateValue = 1, $style = 1) { + $dateValue = PHPExcel_Calculation_Functions::flattenSingleValue($dateValue); + $style = PHPExcel_Calculation_Functions::flattenSingleValue($style); + + if (!is_numeric($style)) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif (($style < 1) || ($style > 3)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $style = floor($style); + + if (is_string($dateValue = self::_getDateValue($dateValue))) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($dateValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + $PHPDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($dateValue); + $DoW = $PHPDateObject->format('w'); + + $firstDay = 1; + switch ($style) { + case 1: ++$DoW; + break; + case 2: if ($DoW == 0) { $DoW = 7; } + break; + case 3: if ($DoW == 0) { $DoW = 7; } + $firstDay = 0; + --$DoW; + break; + } + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL) { + // Test for Excel's 1900 leap year, and introduce the error as required + if (($PHPDateObject->format('Y') == 1900) && ($PHPDateObject->format('n') <= 2)) { + --$DoW; + if ($DoW < $firstDay) { + $DoW += 7; + } + } + } + + return (int) $DoW; + } // function DAYOFWEEK() + + + /** + * WEEKOFYEAR + * + * Returns the week of the year for a specified date. + * The WEEKNUM function considers the week containing January 1 to be the first week of the year. + * However, there is a European standard that defines the first week as the one with the majority + * of days (four or more) falling in the new year. This means that for years in which there are + * three days or less in the first week of January, the WEEKNUM function returns week numbers + * that are incorrect according to the European standard. + * + * Excel Function: + * WEEKNUM(dateValue[,style]) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param boolean $method Week begins on Sunday or Monday + * 1 or omitted Week begins on Sunday. + * 2 Week begins on Monday. + * @return int Week Number + */ + public static function WEEKOFYEAR($dateValue = 1, $method = 1) { + $dateValue = PHPExcel_Calculation_Functions::flattenSingleValue($dateValue); + $method = PHPExcel_Calculation_Functions::flattenSingleValue($method); + + if (!is_numeric($method)) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif (($method < 1) || ($method > 2)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $method = floor($method); + + if (is_string($dateValue = self::_getDateValue($dateValue))) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($dateValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + $PHPDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($dateValue); + $dayOfYear = $PHPDateObject->format('z'); + $dow = $PHPDateObject->format('w'); + $PHPDateObject->modify('-'.$dayOfYear.' days'); + $dow = $PHPDateObject->format('w'); + $daysInFirstWeek = 7 - (($dow + (2 - $method)) % 7); + $dayOfYear -= $daysInFirstWeek; + $weekOfYear = ceil($dayOfYear / 7) + 1; + + return (int) $weekOfYear; + } // function WEEKOFYEAR() + + + /** + * MONTHOFYEAR + * + * Returns the month of a date represented by a serial number. + * The month is given as an integer, ranging from 1 (January) to 12 (December). + * + * Excel Function: + * MONTH(dateValue) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @return int Month of the year + */ + public static function MONTHOFYEAR($dateValue = 1) { + $dateValue = PHPExcel_Calculation_Functions::flattenSingleValue($dateValue); + + if (is_string($dateValue = self::_getDateValue($dateValue))) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($dateValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + $PHPDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($dateValue); + + return (int) $PHPDateObject->format('n'); + } // function MONTHOFYEAR() + + + /** + * YEAR + * + * Returns the year corresponding to a date. + * The year is returned as an integer in the range 1900-9999. + * + * Excel Function: + * YEAR(dateValue) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @return int Year + */ + public static function YEAR($dateValue = 1) { + $dateValue = PHPExcel_Calculation_Functions::flattenSingleValue($dateValue); + + if (is_string($dateValue = self::_getDateValue($dateValue))) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($dateValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Execute function + $PHPDateObject = PHPExcel_Shared_Date::ExcelToPHPObject($dateValue); + + return (int) $PHPDateObject->format('Y'); + } // function YEAR() + + + /** + * HOUROFDAY + * + * Returns the hour of a time value. + * The hour is given as an integer, ranging from 0 (12:00 A.M.) to 23 (11:00 P.M.). + * + * Excel Function: + * HOUR(timeValue) + * + * @param mixed $timeValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard time string + * @return int Hour + */ + public static function HOUROFDAY($timeValue = 0) { + $timeValue = PHPExcel_Calculation_Functions::flattenSingleValue($timeValue); + + if (!is_numeric($timeValue)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $testVal = strtok($timeValue,'/-: '); + if (strlen($testVal) < strlen($timeValue)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + $timeValue = self::_getTimeValue($timeValue); + if (is_string($timeValue)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + // Execute function + if ($timeValue >= 1) { + $timeValue = fmod($timeValue,1); + } elseif ($timeValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $timeValue = PHPExcel_Shared_Date::ExcelToPHP($timeValue); + + return (int) gmdate('G',$timeValue); + } // function HOUROFDAY() + + + /** + * MINUTEOFHOUR + * + * Returns the minutes of a time value. + * The minute is given as an integer, ranging from 0 to 59. + * + * Excel Function: + * MINUTE(timeValue) + * + * @param mixed $timeValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard time string + * @return int Minute + */ + public static function MINUTEOFHOUR($timeValue = 0) { + $timeValue = $timeTester = PHPExcel_Calculation_Functions::flattenSingleValue($timeValue); + + if (!is_numeric($timeValue)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $testVal = strtok($timeValue,'/-: '); + if (strlen($testVal) < strlen($timeValue)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + $timeValue = self::_getTimeValue($timeValue); + if (is_string($timeValue)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + // Execute function + if ($timeValue >= 1) { + $timeValue = fmod($timeValue,1); + } elseif ($timeValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $timeValue = PHPExcel_Shared_Date::ExcelToPHP($timeValue); + + return (int) gmdate('i',$timeValue); + } // function MINUTEOFHOUR() + + + /** + * SECONDOFMINUTE + * + * Returns the seconds of a time value. + * The second is given as an integer in the range 0 (zero) to 59. + * + * Excel Function: + * SECOND(timeValue) + * + * @param mixed $timeValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard time string + * @return int Second + */ + public static function SECONDOFMINUTE($timeValue = 0) { + $timeValue = PHPExcel_Calculation_Functions::flattenSingleValue($timeValue); + + if (!is_numeric($timeValue)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $testVal = strtok($timeValue,'/-: '); + if (strlen($testVal) < strlen($timeValue)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + $timeValue = self::_getTimeValue($timeValue); + if (is_string($timeValue)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + // Execute function + if ($timeValue >= 1) { + $timeValue = fmod($timeValue,1); + } elseif ($timeValue < 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $timeValue = PHPExcel_Shared_Date::ExcelToPHP($timeValue); + + return (int) gmdate('s',$timeValue); + } // function SECONDOFMINUTE() + + + /** + * EDATE + * + * Returns the serial number that represents the date that is the indicated number of months + * before or after a specified date (the start_date). + * Use EDATE to calculate maturity dates or due dates that fall on the same day of the month + * as the date of issue. + * + * Excel Function: + * EDATE(dateValue,adjustmentMonths) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param int $adjustmentMonths The number of months before or after start_date. + * A positive value for months yields a future date; + * a negative value yields a past date. + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function EDATE($dateValue = 1, $adjustmentMonths = 0) { + $dateValue = PHPExcel_Calculation_Functions::flattenSingleValue($dateValue); + $adjustmentMonths = PHPExcel_Calculation_Functions::flattenSingleValue($adjustmentMonths); + + if (!is_numeric($adjustmentMonths)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $adjustmentMonths = floor($adjustmentMonths); + + if (is_string($dateValue = self::_getDateValue($dateValue))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Execute function + $PHPDateObject = self::_adjustDateByMonths($dateValue,$adjustmentMonths); + + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + return (float) PHPExcel_Shared_Date::PHPToExcel($PHPDateObject); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + return (integer) PHPExcel_Shared_Date::ExcelToPHP(PHPExcel_Shared_Date::PHPToExcel($PHPDateObject)); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + return $PHPDateObject; + } + } // function EDATE() + + + /** + * EOMONTH + * + * Returns the date value for the last day of the month that is the indicated number of months + * before or after start_date. + * Use EOMONTH to calculate maturity dates or due dates that fall on the last day of the month. + * + * Excel Function: + * EOMONTH(dateValue,adjustmentMonths) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * @param int $adjustmentMonths The number of months before or after start_date. + * A positive value for months yields a future date; + * a negative value yields a past date. + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function EOMONTH($dateValue = 1, $adjustmentMonths = 0) { + $dateValue = PHPExcel_Calculation_Functions::flattenSingleValue($dateValue); + $adjustmentMonths = PHPExcel_Calculation_Functions::flattenSingleValue($adjustmentMonths); + + if (!is_numeric($adjustmentMonths)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $adjustmentMonths = floor($adjustmentMonths); + + if (is_string($dateValue = self::_getDateValue($dateValue))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Execute function + $PHPDateObject = self::_adjustDateByMonths($dateValue,$adjustmentMonths+1); + $adjustDays = (int) $PHPDateObject->format('d'); + $adjustDaysString = '-'.$adjustDays.' days'; + $PHPDateObject->modify($adjustDaysString); + + switch (PHPExcel_Calculation_Functions::getReturnDateType()) { + case PHPExcel_Calculation_Functions::RETURNDATE_EXCEL : + return (float) PHPExcel_Shared_Date::PHPToExcel($PHPDateObject); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC : + return (integer) PHPExcel_Shared_Date::ExcelToPHP(PHPExcel_Shared_Date::PHPToExcel($PHPDateObject)); + case PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT : + return $PHPDateObject; + } + } // function EOMONTH() + +} // class PHPExcel_Calculation_DateTime + diff --git a/PHPExcel/Calculation/Engineering.php b/PHPExcel/Calculation/Engineering.php new file mode 100644 index 0000000..7e32aa8 --- /dev/null +++ b/PHPExcel/Calculation/Engineering.php @@ -0,0 +1,2505 @@ + array( 'Group' => 'Mass', 'Unit Name' => 'Gram', 'AllowPrefix' => True ), + 'sg' => array( 'Group' => 'Mass', 'Unit Name' => 'Slug', 'AllowPrefix' => False ), + 'lbm' => array( 'Group' => 'Mass', 'Unit Name' => 'Pound mass (avoirdupois)', 'AllowPrefix' => False ), + 'u' => array( 'Group' => 'Mass', 'Unit Name' => 'U (atomic mass unit)', 'AllowPrefix' => True ), + 'ozm' => array( 'Group' => 'Mass', 'Unit Name' => 'Ounce mass (avoirdupois)', 'AllowPrefix' => False ), + 'm' => array( 'Group' => 'Distance', 'Unit Name' => 'Meter', 'AllowPrefix' => True ), + 'mi' => array( 'Group' => 'Distance', 'Unit Name' => 'Statute mile', 'AllowPrefix' => False ), + 'Nmi' => array( 'Group' => 'Distance', 'Unit Name' => 'Nautical mile', 'AllowPrefix' => False ), + 'in' => array( 'Group' => 'Distance', 'Unit Name' => 'Inch', 'AllowPrefix' => False ), + 'ft' => array( 'Group' => 'Distance', 'Unit Name' => 'Foot', 'AllowPrefix' => False ), + 'yd' => array( 'Group' => 'Distance', 'Unit Name' => 'Yard', 'AllowPrefix' => False ), + 'ang' => array( 'Group' => 'Distance', 'Unit Name' => 'Angstrom', 'AllowPrefix' => True ), + 'Pica' => array( 'Group' => 'Distance', 'Unit Name' => 'Pica (1/72 in)', 'AllowPrefix' => False ), + 'yr' => array( 'Group' => 'Time', 'Unit Name' => 'Year', 'AllowPrefix' => False ), + 'day' => array( 'Group' => 'Time', 'Unit Name' => 'Day', 'AllowPrefix' => False ), + 'hr' => array( 'Group' => 'Time', 'Unit Name' => 'Hour', 'AllowPrefix' => False ), + 'mn' => array( 'Group' => 'Time', 'Unit Name' => 'Minute', 'AllowPrefix' => False ), + 'sec' => array( 'Group' => 'Time', 'Unit Name' => 'Second', 'AllowPrefix' => True ), + 'Pa' => array( 'Group' => 'Pressure', 'Unit Name' => 'Pascal', 'AllowPrefix' => True ), + 'p' => array( 'Group' => 'Pressure', 'Unit Name' => 'Pascal', 'AllowPrefix' => True ), + 'atm' => array( 'Group' => 'Pressure', 'Unit Name' => 'Atmosphere', 'AllowPrefix' => True ), + 'at' => array( 'Group' => 'Pressure', 'Unit Name' => 'Atmosphere', 'AllowPrefix' => True ), + 'mmHg' => array( 'Group' => 'Pressure', 'Unit Name' => 'mm of Mercury', 'AllowPrefix' => True ), + 'N' => array( 'Group' => 'Force', 'Unit Name' => 'Newton', 'AllowPrefix' => True ), + 'dyn' => array( 'Group' => 'Force', 'Unit Name' => 'Dyne', 'AllowPrefix' => True ), + 'dy' => array( 'Group' => 'Force', 'Unit Name' => 'Dyne', 'AllowPrefix' => True ), + 'lbf' => array( 'Group' => 'Force', 'Unit Name' => 'Pound force', 'AllowPrefix' => False ), + 'J' => array( 'Group' => 'Energy', 'Unit Name' => 'Joule', 'AllowPrefix' => True ), + 'e' => array( 'Group' => 'Energy', 'Unit Name' => 'Erg', 'AllowPrefix' => True ), + 'c' => array( 'Group' => 'Energy', 'Unit Name' => 'Thermodynamic calorie', 'AllowPrefix' => True ), + 'cal' => array( 'Group' => 'Energy', 'Unit Name' => 'IT calorie', 'AllowPrefix' => True ), + 'eV' => array( 'Group' => 'Energy', 'Unit Name' => 'Electron volt', 'AllowPrefix' => True ), + 'ev' => array( 'Group' => 'Energy', 'Unit Name' => 'Electron volt', 'AllowPrefix' => True ), + 'HPh' => array( 'Group' => 'Energy', 'Unit Name' => 'Horsepower-hour', 'AllowPrefix' => False ), + 'hh' => array( 'Group' => 'Energy', 'Unit Name' => 'Horsepower-hour', 'AllowPrefix' => False ), + 'Wh' => array( 'Group' => 'Energy', 'Unit Name' => 'Watt-hour', 'AllowPrefix' => True ), + 'wh' => array( 'Group' => 'Energy', 'Unit Name' => 'Watt-hour', 'AllowPrefix' => True ), + 'flb' => array( 'Group' => 'Energy', 'Unit Name' => 'Foot-pound', 'AllowPrefix' => False ), + 'BTU' => array( 'Group' => 'Energy', 'Unit Name' => 'BTU', 'AllowPrefix' => False ), + 'btu' => array( 'Group' => 'Energy', 'Unit Name' => 'BTU', 'AllowPrefix' => False ), + 'HP' => array( 'Group' => 'Power', 'Unit Name' => 'Horsepower', 'AllowPrefix' => False ), + 'h' => array( 'Group' => 'Power', 'Unit Name' => 'Horsepower', 'AllowPrefix' => False ), + 'W' => array( 'Group' => 'Power', 'Unit Name' => 'Watt', 'AllowPrefix' => True ), + 'w' => array( 'Group' => 'Power', 'Unit Name' => 'Watt', 'AllowPrefix' => True ), + 'T' => array( 'Group' => 'Magnetism', 'Unit Name' => 'Tesla', 'AllowPrefix' => True ), + 'ga' => array( 'Group' => 'Magnetism', 'Unit Name' => 'Gauss', 'AllowPrefix' => True ), + 'C' => array( 'Group' => 'Temperature', 'Unit Name' => 'Celsius', 'AllowPrefix' => False ), + 'cel' => array( 'Group' => 'Temperature', 'Unit Name' => 'Celsius', 'AllowPrefix' => False ), + 'F' => array( 'Group' => 'Temperature', 'Unit Name' => 'Fahrenheit', 'AllowPrefix' => False ), + 'fah' => array( 'Group' => 'Temperature', 'Unit Name' => 'Fahrenheit', 'AllowPrefix' => False ), + 'K' => array( 'Group' => 'Temperature', 'Unit Name' => 'Kelvin', 'AllowPrefix' => False ), + 'kel' => array( 'Group' => 'Temperature', 'Unit Name' => 'Kelvin', 'AllowPrefix' => False ), + 'tsp' => array( 'Group' => 'Liquid', 'Unit Name' => 'Teaspoon', 'AllowPrefix' => False ), + 'tbs' => array( 'Group' => 'Liquid', 'Unit Name' => 'Tablespoon', 'AllowPrefix' => False ), + 'oz' => array( 'Group' => 'Liquid', 'Unit Name' => 'Fluid Ounce', 'AllowPrefix' => False ), + 'cup' => array( 'Group' => 'Liquid', 'Unit Name' => 'Cup', 'AllowPrefix' => False ), + 'pt' => array( 'Group' => 'Liquid', 'Unit Name' => 'U.S. Pint', 'AllowPrefix' => False ), + 'us_pt' => array( 'Group' => 'Liquid', 'Unit Name' => 'U.S. Pint', 'AllowPrefix' => False ), + 'uk_pt' => array( 'Group' => 'Liquid', 'Unit Name' => 'U.K. Pint', 'AllowPrefix' => False ), + 'qt' => array( 'Group' => 'Liquid', 'Unit Name' => 'Quart', 'AllowPrefix' => False ), + 'gal' => array( 'Group' => 'Liquid', 'Unit Name' => 'Gallon', 'AllowPrefix' => False ), + 'l' => array( 'Group' => 'Liquid', 'Unit Name' => 'Litre', 'AllowPrefix' => True ), + 'lt' => array( 'Group' => 'Liquid', 'Unit Name' => 'Litre', 'AllowPrefix' => True ) + ); + + /** + * Details of the Multiplier prefixes that can be used with Units of Measure in CONVERTUOM() + * + * @var mixed[] + */ + private static $_conversionMultipliers = array( 'Y' => array( 'multiplier' => 1E24, 'name' => 'yotta' ), + 'Z' => array( 'multiplier' => 1E21, 'name' => 'zetta' ), + 'E' => array( 'multiplier' => 1E18, 'name' => 'exa' ), + 'P' => array( 'multiplier' => 1E15, 'name' => 'peta' ), + 'T' => array( 'multiplier' => 1E12, 'name' => 'tera' ), + 'G' => array( 'multiplier' => 1E9, 'name' => 'giga' ), + 'M' => array( 'multiplier' => 1E6, 'name' => 'mega' ), + 'k' => array( 'multiplier' => 1E3, 'name' => 'kilo' ), + 'h' => array( 'multiplier' => 1E2, 'name' => 'hecto' ), + 'e' => array( 'multiplier' => 1E1, 'name' => 'deka' ), + 'd' => array( 'multiplier' => 1E-1, 'name' => 'deci' ), + 'c' => array( 'multiplier' => 1E-2, 'name' => 'centi' ), + 'm' => array( 'multiplier' => 1E-3, 'name' => 'milli' ), + 'u' => array( 'multiplier' => 1E-6, 'name' => 'micro' ), + 'n' => array( 'multiplier' => 1E-9, 'name' => 'nano' ), + 'p' => array( 'multiplier' => 1E-12, 'name' => 'pico' ), + 'f' => array( 'multiplier' => 1E-15, 'name' => 'femto' ), + 'a' => array( 'multiplier' => 1E-18, 'name' => 'atto' ), + 'z' => array( 'multiplier' => 1E-21, 'name' => 'zepto' ), + 'y' => array( 'multiplier' => 1E-24, 'name' => 'yocto' ) + ); + + /** + * Details of the Units of measure conversion factors, organised by group + * + * @var mixed[] + */ + private static $_unitConversions = array( 'Mass' => array( 'g' => array( 'g' => 1.0, + 'sg' => 6.85220500053478E-05, + 'lbm' => 2.20462291469134E-03, + 'u' => 6.02217000000000E+23, + 'ozm' => 3.52739718003627E-02 + ), + 'sg' => array( 'g' => 1.45938424189287E+04, + 'sg' => 1.0, + 'lbm' => 3.21739194101647E+01, + 'u' => 8.78866000000000E+27, + 'ozm' => 5.14782785944229E+02 + ), + 'lbm' => array( 'g' => 4.5359230974881148E+02, + 'sg' => 3.10810749306493E-02, + 'lbm' => 1.0, + 'u' => 2.73161000000000E+26, + 'ozm' => 1.60000023429410E+01 + ), + 'u' => array( 'g' => 1.66053100460465E-24, + 'sg' => 1.13782988532950E-28, + 'lbm' => 3.66084470330684E-27, + 'u' => 1.0, + 'ozm' => 5.85735238300524E-26 + ), + 'ozm' => array( 'g' => 2.83495152079732E+01, + 'sg' => 1.94256689870811E-03, + 'lbm' => 6.24999908478882E-02, + 'u' => 1.70725600000000E+25, + 'ozm' => 1.0 + ) + ), + 'Distance' => array( 'm' => array( 'm' => 1.0, + 'mi' => 6.21371192237334E-04, + 'Nmi' => 5.39956803455724E-04, + 'in' => 3.93700787401575E+01, + 'ft' => 3.28083989501312E+00, + 'yd' => 1.09361329797891E+00, + 'ang' => 1.00000000000000E+10, + 'Pica' => 2.83464566929116E+03 + ), + 'mi' => array( 'm' => 1.60934400000000E+03, + 'mi' => 1.0, + 'Nmi' => 8.68976241900648E-01, + 'in' => 6.33600000000000E+04, + 'ft' => 5.28000000000000E+03, + 'yd' => 1.76000000000000E+03, + 'ang' => 1.60934400000000E+13, + 'Pica' => 4.56191999999971E+06 + ), + 'Nmi' => array( 'm' => 1.85200000000000E+03, + 'mi' => 1.15077944802354E+00, + 'Nmi' => 1.0, + 'in' => 7.29133858267717E+04, + 'ft' => 6.07611548556430E+03, + 'yd' => 2.02537182785694E+03, + 'ang' => 1.85200000000000E+13, + 'Pica' => 5.24976377952723E+06 + ), + 'in' => array( 'm' => 2.54000000000000E-02, + 'mi' => 1.57828282828283E-05, + 'Nmi' => 1.37149028077754E-05, + 'in' => 1.0, + 'ft' => 8.33333333333333E-02, + 'yd' => 2.77777777686643E-02, + 'ang' => 2.54000000000000E+08, + 'Pica' => 7.19999999999955E+01 + ), + 'ft' => array( 'm' => 3.04800000000000E-01, + 'mi' => 1.89393939393939E-04, + 'Nmi' => 1.64578833693305E-04, + 'in' => 1.20000000000000E+01, + 'ft' => 1.0, + 'yd' => 3.33333333223972E-01, + 'ang' => 3.04800000000000E+09, + 'Pica' => 8.63999999999946E+02 + ), + 'yd' => array( 'm' => 9.14400000300000E-01, + 'mi' => 5.68181818368230E-04, + 'Nmi' => 4.93736501241901E-04, + 'in' => 3.60000000118110E+01, + 'ft' => 3.00000000000000E+00, + 'yd' => 1.0, + 'ang' => 9.14400000300000E+09, + 'Pica' => 2.59200000085023E+03 + ), + 'ang' => array( 'm' => 1.00000000000000E-10, + 'mi' => 6.21371192237334E-14, + 'Nmi' => 5.39956803455724E-14, + 'in' => 3.93700787401575E-09, + 'ft' => 3.28083989501312E-10, + 'yd' => 1.09361329797891E-10, + 'ang' => 1.0, + 'Pica' => 2.83464566929116E-07 + ), + 'Pica' => array( 'm' => 3.52777777777800E-04, + 'mi' => 2.19205948372629E-07, + 'Nmi' => 1.90484761219114E-07, + 'in' => 1.38888888888898E-02, + 'ft' => 1.15740740740748E-03, + 'yd' => 3.85802469009251E-04, + 'ang' => 3.52777777777800E+06, + 'Pica' => 1.0 + ) + ), + 'Time' => array( 'yr' => array( 'yr' => 1.0, + 'day' => 365.25, + 'hr' => 8766.0, + 'mn' => 525960.0, + 'sec' => 31557600.0 + ), + 'day' => array( 'yr' => 2.73785078713210E-03, + 'day' => 1.0, + 'hr' => 24.0, + 'mn' => 1440.0, + 'sec' => 86400.0 + ), + 'hr' => array( 'yr' => 1.14077116130504E-04, + 'day' => 4.16666666666667E-02, + 'hr' => 1.0, + 'mn' => 60.0, + 'sec' => 3600.0 + ), + 'mn' => array( 'yr' => 1.90128526884174E-06, + 'day' => 6.94444444444444E-04, + 'hr' => 1.66666666666667E-02, + 'mn' => 1.0, + 'sec' => 60.0 + ), + 'sec' => array( 'yr' => 3.16880878140289E-08, + 'day' => 1.15740740740741E-05, + 'hr' => 2.77777777777778E-04, + 'mn' => 1.66666666666667E-02, + 'sec' => 1.0 + ) + ), + 'Pressure' => array( 'Pa' => array( 'Pa' => 1.0, + 'p' => 1.0, + 'atm' => 9.86923299998193E-06, + 'at' => 9.86923299998193E-06, + 'mmHg' => 7.50061707998627E-03 + ), + 'p' => array( 'Pa' => 1.0, + 'p' => 1.0, + 'atm' => 9.86923299998193E-06, + 'at' => 9.86923299998193E-06, + 'mmHg' => 7.50061707998627E-03 + ), + 'atm' => array( 'Pa' => 1.01324996583000E+05, + 'p' => 1.01324996583000E+05, + 'atm' => 1.0, + 'at' => 1.0, + 'mmHg' => 760.0 + ), + 'at' => array( 'Pa' => 1.01324996583000E+05, + 'p' => 1.01324996583000E+05, + 'atm' => 1.0, + 'at' => 1.0, + 'mmHg' => 760.0 + ), + 'mmHg' => array( 'Pa' => 1.33322363925000E+02, + 'p' => 1.33322363925000E+02, + 'atm' => 1.31578947368421E-03, + 'at' => 1.31578947368421E-03, + 'mmHg' => 1.0 + ) + ), + 'Force' => array( 'N' => array( 'N' => 1.0, + 'dyn' => 1.0E+5, + 'dy' => 1.0E+5, + 'lbf' => 2.24808923655339E-01 + ), + 'dyn' => array( 'N' => 1.0E-5, + 'dyn' => 1.0, + 'dy' => 1.0, + 'lbf' => 2.24808923655339E-06 + ), + 'dy' => array( 'N' => 1.0E-5, + 'dyn' => 1.0, + 'dy' => 1.0, + 'lbf' => 2.24808923655339E-06 + ), + 'lbf' => array( 'N' => 4.448222, + 'dyn' => 4.448222E+5, + 'dy' => 4.448222E+5, + 'lbf' => 1.0 + ) + ), + 'Energy' => array( 'J' => array( 'J' => 1.0, + 'e' => 9.99999519343231E+06, + 'c' => 2.39006249473467E-01, + 'cal' => 2.38846190642017E-01, + 'eV' => 6.24145700000000E+18, + 'ev' => 6.24145700000000E+18, + 'HPh' => 3.72506430801000E-07, + 'hh' => 3.72506430801000E-07, + 'Wh' => 2.77777916238711E-04, + 'wh' => 2.77777916238711E-04, + 'flb' => 2.37304222192651E+01, + 'BTU' => 9.47815067349015E-04, + 'btu' => 9.47815067349015E-04 + ), + 'e' => array( 'J' => 1.00000048065700E-07, + 'e' => 1.0, + 'c' => 2.39006364353494E-08, + 'cal' => 2.38846305445111E-08, + 'eV' => 6.24146000000000E+11, + 'ev' => 6.24146000000000E+11, + 'HPh' => 3.72506609848824E-14, + 'hh' => 3.72506609848824E-14, + 'Wh' => 2.77778049754611E-11, + 'wh' => 2.77778049754611E-11, + 'flb' => 2.37304336254586E-06, + 'BTU' => 9.47815522922962E-11, + 'btu' => 9.47815522922962E-11 + ), + 'c' => array( 'J' => 4.18399101363672E+00, + 'e' => 4.18398900257312E+07, + 'c' => 1.0, + 'cal' => 9.99330315287563E-01, + 'eV' => 2.61142000000000E+19, + 'ev' => 2.61142000000000E+19, + 'HPh' => 1.55856355899327E-06, + 'hh' => 1.55856355899327E-06, + 'Wh' => 1.16222030532950E-03, + 'wh' => 1.16222030532950E-03, + 'flb' => 9.92878733152102E+01, + 'BTU' => 3.96564972437776E-03, + 'btu' => 3.96564972437776E-03 + ), + 'cal' => array( 'J' => 4.18679484613929E+00, + 'e' => 4.18679283372801E+07, + 'c' => 1.00067013349059E+00, + 'cal' => 1.0, + 'eV' => 2.61317000000000E+19, + 'ev' => 2.61317000000000E+19, + 'HPh' => 1.55960800463137E-06, + 'hh' => 1.55960800463137E-06, + 'Wh' => 1.16299914807955E-03, + 'wh' => 1.16299914807955E-03, + 'flb' => 9.93544094443283E+01, + 'BTU' => 3.96830723907002E-03, + 'btu' => 3.96830723907002E-03 + ), + 'eV' => array( 'J' => 1.60219000146921E-19, + 'e' => 1.60218923136574E-12, + 'c' => 3.82933423195043E-20, + 'cal' => 3.82676978535648E-20, + 'eV' => 1.0, + 'ev' => 1.0, + 'HPh' => 5.96826078912344E-26, + 'hh' => 5.96826078912344E-26, + 'Wh' => 4.45053000026614E-23, + 'wh' => 4.45053000026614E-23, + 'flb' => 3.80206452103492E-18, + 'BTU' => 1.51857982414846E-22, + 'btu' => 1.51857982414846E-22 + ), + 'ev' => array( 'J' => 1.60219000146921E-19, + 'e' => 1.60218923136574E-12, + 'c' => 3.82933423195043E-20, + 'cal' => 3.82676978535648E-20, + 'eV' => 1.0, + 'ev' => 1.0, + 'HPh' => 5.96826078912344E-26, + 'hh' => 5.96826078912344E-26, + 'Wh' => 4.45053000026614E-23, + 'wh' => 4.45053000026614E-23, + 'flb' => 3.80206452103492E-18, + 'BTU' => 1.51857982414846E-22, + 'btu' => 1.51857982414846E-22 + ), + 'HPh' => array( 'J' => 2.68451741316170E+06, + 'e' => 2.68451612283024E+13, + 'c' => 6.41616438565991E+05, + 'cal' => 6.41186757845835E+05, + 'eV' => 1.67553000000000E+25, + 'ev' => 1.67553000000000E+25, + 'HPh' => 1.0, + 'hh' => 1.0, + 'Wh' => 7.45699653134593E+02, + 'wh' => 7.45699653134593E+02, + 'flb' => 6.37047316692964E+07, + 'BTU' => 2.54442605275546E+03, + 'btu' => 2.54442605275546E+03 + ), + 'hh' => array( 'J' => 2.68451741316170E+06, + 'e' => 2.68451612283024E+13, + 'c' => 6.41616438565991E+05, + 'cal' => 6.41186757845835E+05, + 'eV' => 1.67553000000000E+25, + 'ev' => 1.67553000000000E+25, + 'HPh' => 1.0, + 'hh' => 1.0, + 'Wh' => 7.45699653134593E+02, + 'wh' => 7.45699653134593E+02, + 'flb' => 6.37047316692964E+07, + 'BTU' => 2.54442605275546E+03, + 'btu' => 2.54442605275546E+03 + ), + 'Wh' => array( 'J' => 3.59999820554720E+03, + 'e' => 3.59999647518369E+10, + 'c' => 8.60422069219046E+02, + 'cal' => 8.59845857713046E+02, + 'eV' => 2.24692340000000E+22, + 'ev' => 2.24692340000000E+22, + 'HPh' => 1.34102248243839E-03, + 'hh' => 1.34102248243839E-03, + 'Wh' => 1.0, + 'wh' => 1.0, + 'flb' => 8.54294774062316E+04, + 'BTU' => 3.41213254164705E+00, + 'btu' => 3.41213254164705E+00 + ), + 'wh' => array( 'J' => 3.59999820554720E+03, + 'e' => 3.59999647518369E+10, + 'c' => 8.60422069219046E+02, + 'cal' => 8.59845857713046E+02, + 'eV' => 2.24692340000000E+22, + 'ev' => 2.24692340000000E+22, + 'HPh' => 1.34102248243839E-03, + 'hh' => 1.34102248243839E-03, + 'Wh' => 1.0, + 'wh' => 1.0, + 'flb' => 8.54294774062316E+04, + 'BTU' => 3.41213254164705E+00, + 'btu' => 3.41213254164705E+00 + ), + 'flb' => array( 'J' => 4.21400003236424E-02, + 'e' => 4.21399800687660E+05, + 'c' => 1.00717234301644E-02, + 'cal' => 1.00649785509554E-02, + 'eV' => 2.63015000000000E+17, + 'ev' => 2.63015000000000E+17, + 'HPh' => 1.56974211145130E-08, + 'hh' => 1.56974211145130E-08, + 'Wh' => 1.17055614802000E-05, + 'wh' => 1.17055614802000E-05, + 'flb' => 1.0, + 'BTU' => 3.99409272448406E-05, + 'btu' => 3.99409272448406E-05 + ), + 'BTU' => array( 'J' => 1.05505813786749E+03, + 'e' => 1.05505763074665E+10, + 'c' => 2.52165488508168E+02, + 'cal' => 2.51996617135510E+02, + 'eV' => 6.58510000000000E+21, + 'ev' => 6.58510000000000E+21, + 'HPh' => 3.93015941224568E-04, + 'hh' => 3.93015941224568E-04, + 'Wh' => 2.93071851047526E-01, + 'wh' => 2.93071851047526E-01, + 'flb' => 2.50369750774671E+04, + 'BTU' => 1.0, + 'btu' => 1.0, + ), + 'btu' => array( 'J' => 1.05505813786749E+03, + 'e' => 1.05505763074665E+10, + 'c' => 2.52165488508168E+02, + 'cal' => 2.51996617135510E+02, + 'eV' => 6.58510000000000E+21, + 'ev' => 6.58510000000000E+21, + 'HPh' => 3.93015941224568E-04, + 'hh' => 3.93015941224568E-04, + 'Wh' => 2.93071851047526E-01, + 'wh' => 2.93071851047526E-01, + 'flb' => 2.50369750774671E+04, + 'BTU' => 1.0, + 'btu' => 1.0, + ) + ), + 'Power' => array( 'HP' => array( 'HP' => 1.0, + 'h' => 1.0, + 'W' => 7.45701000000000E+02, + 'w' => 7.45701000000000E+02 + ), + 'h' => array( 'HP' => 1.0, + 'h' => 1.0, + 'W' => 7.45701000000000E+02, + 'w' => 7.45701000000000E+02 + ), + 'W' => array( 'HP' => 1.34102006031908E-03, + 'h' => 1.34102006031908E-03, + 'W' => 1.0, + 'w' => 1.0 + ), + 'w' => array( 'HP' => 1.34102006031908E-03, + 'h' => 1.34102006031908E-03, + 'W' => 1.0, + 'w' => 1.0 + ) + ), + 'Magnetism' => array( 'T' => array( 'T' => 1.0, + 'ga' => 10000.0 + ), + 'ga' => array( 'T' => 0.0001, + 'ga' => 1.0 + ) + ), + 'Liquid' => array( 'tsp' => array( 'tsp' => 1.0, + 'tbs' => 3.33333333333333E-01, + 'oz' => 1.66666666666667E-01, + 'cup' => 2.08333333333333E-02, + 'pt' => 1.04166666666667E-02, + 'us_pt' => 1.04166666666667E-02, + 'uk_pt' => 8.67558516821960E-03, + 'qt' => 5.20833333333333E-03, + 'gal' => 1.30208333333333E-03, + 'l' => 4.92999408400710E-03, + 'lt' => 4.92999408400710E-03 + ), + 'tbs' => array( 'tsp' => 3.00000000000000E+00, + 'tbs' => 1.0, + 'oz' => 5.00000000000000E-01, + 'cup' => 6.25000000000000E-02, + 'pt' => 3.12500000000000E-02, + 'us_pt' => 3.12500000000000E-02, + 'uk_pt' => 2.60267555046588E-02, + 'qt' => 1.56250000000000E-02, + 'gal' => 3.90625000000000E-03, + 'l' => 1.47899822520213E-02, + 'lt' => 1.47899822520213E-02 + ), + 'oz' => array( 'tsp' => 6.00000000000000E+00, + 'tbs' => 2.00000000000000E+00, + 'oz' => 1.0, + 'cup' => 1.25000000000000E-01, + 'pt' => 6.25000000000000E-02, + 'us_pt' => 6.25000000000000E-02, + 'uk_pt' => 5.20535110093176E-02, + 'qt' => 3.12500000000000E-02, + 'gal' => 7.81250000000000E-03, + 'l' => 2.95799645040426E-02, + 'lt' => 2.95799645040426E-02 + ), + 'cup' => array( 'tsp' => 4.80000000000000E+01, + 'tbs' => 1.60000000000000E+01, + 'oz' => 8.00000000000000E+00, + 'cup' => 1.0, + 'pt' => 5.00000000000000E-01, + 'us_pt' => 5.00000000000000E-01, + 'uk_pt' => 4.16428088074541E-01, + 'qt' => 2.50000000000000E-01, + 'gal' => 6.25000000000000E-02, + 'l' => 2.36639716032341E-01, + 'lt' => 2.36639716032341E-01 + ), + 'pt' => array( 'tsp' => 9.60000000000000E+01, + 'tbs' => 3.20000000000000E+01, + 'oz' => 1.60000000000000E+01, + 'cup' => 2.00000000000000E+00, + 'pt' => 1.0, + 'us_pt' => 1.0, + 'uk_pt' => 8.32856176149081E-01, + 'qt' => 5.00000000000000E-01, + 'gal' => 1.25000000000000E-01, + 'l' => 4.73279432064682E-01, + 'lt' => 4.73279432064682E-01 + ), + 'us_pt' => array( 'tsp' => 9.60000000000000E+01, + 'tbs' => 3.20000000000000E+01, + 'oz' => 1.60000000000000E+01, + 'cup' => 2.00000000000000E+00, + 'pt' => 1.0, + 'us_pt' => 1.0, + 'uk_pt' => 8.32856176149081E-01, + 'qt' => 5.00000000000000E-01, + 'gal' => 1.25000000000000E-01, + 'l' => 4.73279432064682E-01, + 'lt' => 4.73279432064682E-01 + ), + 'uk_pt' => array( 'tsp' => 1.15266000000000E+02, + 'tbs' => 3.84220000000000E+01, + 'oz' => 1.92110000000000E+01, + 'cup' => 2.40137500000000E+00, + 'pt' => 1.20068750000000E+00, + 'us_pt' => 1.20068750000000E+00, + 'uk_pt' => 1.0, + 'qt' => 6.00343750000000E-01, + 'gal' => 1.50085937500000E-01, + 'l' => 5.68260698087162E-01, + 'lt' => 5.68260698087162E-01 + ), + 'qt' => array( 'tsp' => 1.92000000000000E+02, + 'tbs' => 6.40000000000000E+01, + 'oz' => 3.20000000000000E+01, + 'cup' => 4.00000000000000E+00, + 'pt' => 2.00000000000000E+00, + 'us_pt' => 2.00000000000000E+00, + 'uk_pt' => 1.66571235229816E+00, + 'qt' => 1.0, + 'gal' => 2.50000000000000E-01, + 'l' => 9.46558864129363E-01, + 'lt' => 9.46558864129363E-01 + ), + 'gal' => array( 'tsp' => 7.68000000000000E+02, + 'tbs' => 2.56000000000000E+02, + 'oz' => 1.28000000000000E+02, + 'cup' => 1.60000000000000E+01, + 'pt' => 8.00000000000000E+00, + 'us_pt' => 8.00000000000000E+00, + 'uk_pt' => 6.66284940919265E+00, + 'qt' => 4.00000000000000E+00, + 'gal' => 1.0, + 'l' => 3.78623545651745E+00, + 'lt' => 3.78623545651745E+00 + ), + 'l' => array( 'tsp' => 2.02840000000000E+02, + 'tbs' => 6.76133333333333E+01, + 'oz' => 3.38066666666667E+01, + 'cup' => 4.22583333333333E+00, + 'pt' => 2.11291666666667E+00, + 'us_pt' => 2.11291666666667E+00, + 'uk_pt' => 1.75975569552166E+00, + 'qt' => 1.05645833333333E+00, + 'gal' => 2.64114583333333E-01, + 'l' => 1.0, + 'lt' => 1.0 + ), + 'lt' => array( 'tsp' => 2.02840000000000E+02, + 'tbs' => 6.76133333333333E+01, + 'oz' => 3.38066666666667E+01, + 'cup' => 4.22583333333333E+00, + 'pt' => 2.11291666666667E+00, + 'us_pt' => 2.11291666666667E+00, + 'uk_pt' => 1.75975569552166E+00, + 'qt' => 1.05645833333333E+00, + 'gal' => 2.64114583333333E-01, + 'l' => 1.0, + 'lt' => 1.0 + ) + ) + ); + + + /** + * _parseComplex + * + * Parses a complex number into its real and imaginary parts, and an I or J suffix + * + * @param string $complexNumber The complex number + * @return string[] Indexed on "real", "imaginary" and "suffix" + */ + public static function _parseComplex($complexNumber) { + $workString = (string) $complexNumber; + + $realNumber = $imaginary = 0; + // Extract the suffix, if there is one + $suffix = substr($workString,-1); + if (!is_numeric($suffix)) { + $workString = substr($workString,0,-1); + } else { + $suffix = ''; + } + + // Split the input into its Real and Imaginary components + $leadingSign = 0; + if (strlen($workString) > 0) { + $leadingSign = (($workString{0} == '+') || ($workString{0} == '-')) ? 1 : 0; + } + $power = ''; + $realNumber = strtok($workString, '+-'); + if (strtoupper(substr($realNumber,-1)) == 'E') { + $power = strtok('+-'); + ++$leadingSign; + } + + $realNumber = substr($workString,0,strlen($realNumber)+strlen($power)+$leadingSign); + + if ($suffix != '') { + $imaginary = substr($workString,strlen($realNumber)); + + if (($imaginary == '') && (($realNumber == '') || ($realNumber == '+') || ($realNumber == '-'))) { + $imaginary = $realNumber.'1'; + $realNumber = '0'; + } else if ($imaginary == '') { + $imaginary = $realNumber; + $realNumber = '0'; + } elseif (($imaginary == '+') || ($imaginary == '-')) { + $imaginary .= '1'; + } + } + + return array( 'real' => $realNumber, + 'imaginary' => $imaginary, + 'suffix' => $suffix + ); + } // function _parseComplex() + + + /** + * Cleans the leading characters in a complex number string + * + * @param string $complexNumber The complex number to clean + * @return string The "cleaned" complex number + */ + private static function _cleanComplex($complexNumber) { + if ($complexNumber{0} == '+') $complexNumber = substr($complexNumber,1); + if ($complexNumber{0} == '0') $complexNumber = substr($complexNumber,1); + if ($complexNumber{0} == '.') $complexNumber = '0'.$complexNumber; + if ($complexNumber{0} == '+') $complexNumber = substr($complexNumber,1); + return $complexNumber; + } + + /** + * Formats a number base string value with leading zeroes + * + * @param string $xVal The "number" to pad + * @param integer $places The length that we want to pad this value + * @return string The padded "number" + */ + private static function _nbrConversionFormat($xVal, $places) { + if (!is_null($places)) { + if (strlen($xVal) <= $places) { + return substr(str_pad($xVal, $places, '0', STR_PAD_LEFT), -10); + } else { + return PHPExcel_Calculation_Functions::NaN(); + } + } + + return substr($xVal, -10); + } // function _nbrConversionFormat() + + /** + * BESSELI + * + * Returns the modified Bessel function In(x), which is equivalent to the Bessel function evaluated + * for purely imaginary arguments + * + * Excel Function: + * BESSELI(x,ord) + * + * @access public + * @category Engineering Functions + * @param float $x The value at which to evaluate the function. + * If x is nonnumeric, BESSELI returns the #VALUE! error value. + * @param integer $ord The order of the Bessel function. + * If ord is not an integer, it is truncated. + * If $ord is nonnumeric, BESSELI returns the #VALUE! error value. + * If $ord < 0, BESSELI returns the #NUM! error value. + * @return float + * + */ + public static function BESSELI($x, $ord) { + $x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x); + $ord = (is_null($ord)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($ord); + + if ((is_numeric($x)) && (is_numeric($ord))) { + $ord = floor($ord); + if ($ord < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + if (abs($x) <= 30) { + $fResult = $fTerm = pow($x / 2, $ord) / PHPExcel_Calculation_MathTrig::FACT($ord); + $ordK = 1; + $fSqrX = ($x * $x) / 4; + do { + $fTerm *= $fSqrX; + $fTerm /= ($ordK * ($ordK + $ord)); + $fResult += $fTerm; + } while ((abs($fTerm) > 1e-12) && (++$ordK < 100)); + } else { + $f_2_PI = 2 * M_PI; + + $fXAbs = abs($x); + $fResult = exp($fXAbs) / sqrt($f_2_PI * $fXAbs); + if (($ord & 1) && ($x < 0)) { + $fResult = -$fResult; + } + } + return (is_nan($fResult)) ? PHPExcel_Calculation_Functions::NaN() : $fResult; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function BESSELI() + + + /** + * BESSELJ + * + * Returns the Bessel function + * + * Excel Function: + * BESSELJ(x,ord) + * + * @access public + * @category Engineering Functions + * @param float $x The value at which to evaluate the function. + * If x is nonnumeric, BESSELJ returns the #VALUE! error value. + * @param integer $ord The order of the Bessel function. If n is not an integer, it is truncated. + * If $ord is nonnumeric, BESSELJ returns the #VALUE! error value. + * If $ord < 0, BESSELJ returns the #NUM! error value. + * @return float + * + */ + public static function BESSELJ($x, $ord) { + $x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x); + $ord = (is_null($ord)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($ord); + + if ((is_numeric($x)) && (is_numeric($ord))) { + $ord = floor($ord); + if ($ord < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $fResult = 0; + if (abs($x) <= 30) { + $fResult = $fTerm = pow($x / 2, $ord) / PHPExcel_Calculation_MathTrig::FACT($ord); + $ordK = 1; + $fSqrX = ($x * $x) / -4; + do { + $fTerm *= $fSqrX; + $fTerm /= ($ordK * ($ordK + $ord)); + $fResult += $fTerm; + } while ((abs($fTerm) > 1e-12) && (++$ordK < 100)); + } else { + $f_PI_DIV_2 = M_PI / 2; + $f_PI_DIV_4 = M_PI / 4; + + $fXAbs = abs($x); + $fResult = sqrt(M_2DIVPI / $fXAbs) * cos($fXAbs - $ord * $f_PI_DIV_2 - $f_PI_DIV_4); + if (($ord & 1) && ($x < 0)) { + $fResult = -$fResult; + } + } + return (is_nan($fResult)) ? PHPExcel_Calculation_Functions::NaN() : $fResult; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function BESSELJ() + + + private static function _Besselk0($fNum) { + if ($fNum <= 2) { + $fNum2 = $fNum * 0.5; + $y = ($fNum2 * $fNum2); + $fRet = -log($fNum2) * self::BESSELI($fNum, 0) + + (-0.57721566 + $y * (0.42278420 + $y * (0.23069756 + $y * (0.3488590e-1 + $y * (0.262698e-2 + $y * + (0.10750e-3 + $y * 0.74e-5)))))); + } else { + $y = 2 / $fNum; + $fRet = exp(-$fNum) / sqrt($fNum) * + (1.25331414 + $y * (-0.7832358e-1 + $y * (0.2189568e-1 + $y * (-0.1062446e-1 + $y * + (0.587872e-2 + $y * (-0.251540e-2 + $y * 0.53208e-3)))))); + } + return $fRet; + } // function _Besselk0() + + + private static function _Besselk1($fNum) { + if ($fNum <= 2) { + $fNum2 = $fNum * 0.5; + $y = ($fNum2 * $fNum2); + $fRet = log($fNum2) * self::BESSELI($fNum, 1) + + (1 + $y * (0.15443144 + $y * (-0.67278579 + $y * (-0.18156897 + $y * (-0.1919402e-1 + $y * + (-0.110404e-2 + $y * (-0.4686e-4))))))) / $fNum; + } else { + $y = 2 / $fNum; + $fRet = exp(-$fNum) / sqrt($fNum) * + (1.25331414 + $y * (0.23498619 + $y * (-0.3655620e-1 + $y * (0.1504268e-1 + $y * (-0.780353e-2 + $y * + (0.325614e-2 + $y * (-0.68245e-3))))))); + } + return $fRet; + } // function _Besselk1() + + + /** + * BESSELK + * + * Returns the modified Bessel function Kn(x), which is equivalent to the Bessel functions evaluated + * for purely imaginary arguments. + * + * Excel Function: + * BESSELK(x,ord) + * + * @access public + * @category Engineering Functions + * @param float $x The value at which to evaluate the function. + * If x is nonnumeric, BESSELK returns the #VALUE! error value. + * @param integer $ord The order of the Bessel function. If n is not an integer, it is truncated. + * If $ord is nonnumeric, BESSELK returns the #VALUE! error value. + * If $ord < 0, BESSELK returns the #NUM! error value. + * @return float + * + */ + public static function BESSELK($x, $ord) { + $x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x); + $ord = (is_null($ord)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($ord); + + if ((is_numeric($x)) && (is_numeric($ord))) { + if (($ord < 0) || ($x == 0.0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + + switch(floor($ord)) { + case 0 : return self::_Besselk0($x); + break; + case 1 : return self::_Besselk1($x); + break; + default : $fTox = 2 / $x; + $fBkm = self::_Besselk0($x); + $fBk = self::_Besselk1($x); + for ($n = 1; $n < $ord; ++$n) { + $fBkp = $fBkm + $n * $fTox * $fBk; + $fBkm = $fBk; + $fBk = $fBkp; + } + } + return (is_nan($fBk)) ? PHPExcel_Calculation_Functions::NaN() : $fBk; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function BESSELK() + + + private static function _Bessely0($fNum) { + if ($fNum < 8.0) { + $y = ($fNum * $fNum); + $f1 = -2957821389.0 + $y * (7062834065.0 + $y * (-512359803.6 + $y * (10879881.29 + $y * (-86327.92757 + $y * 228.4622733)))); + $f2 = 40076544269.0 + $y * (745249964.8 + $y * (7189466.438 + $y * (47447.26470 + $y * (226.1030244 + $y)))); + $fRet = $f1 / $f2 + 0.636619772 * self::BESSELJ($fNum, 0) * log($fNum); + } else { + $z = 8.0 / $fNum; + $y = ($z * $z); + $xx = $fNum - 0.785398164; + $f1 = 1 + $y * (-0.1098628627e-2 + $y * (0.2734510407e-4 + $y * (-0.2073370639e-5 + $y * 0.2093887211e-6))); + $f2 = -0.1562499995e-1 + $y * (0.1430488765e-3 + $y * (-0.6911147651e-5 + $y * (0.7621095161e-6 + $y * (-0.934945152e-7)))); + $fRet = sqrt(0.636619772 / $fNum) * (sin($xx) * $f1 + $z * cos($xx) * $f2); + } + return $fRet; + } // function _Bessely0() + + + private static function _Bessely1($fNum) { + if ($fNum < 8.0) { + $y = ($fNum * $fNum); + $f1 = $fNum * (-0.4900604943e13 + $y * (0.1275274390e13 + $y * (-0.5153438139e11 + $y * (0.7349264551e9 + $y * + (-0.4237922726e7 + $y * 0.8511937935e4))))); + $f2 = 0.2499580570e14 + $y * (0.4244419664e12 + $y * (0.3733650367e10 + $y * (0.2245904002e8 + $y * + (0.1020426050e6 + $y * (0.3549632885e3 + $y))))); + $fRet = $f1 / $f2 + 0.636619772 * ( self::BESSELJ($fNum, 1) * log($fNum) - 1 / $fNum); + } else { + $fRet = sqrt(0.636619772 / $fNum) * sin($fNum - 2.356194491); + } + return $fRet; + } // function _Bessely1() + + + /** + * BESSELY + * + * Returns the Bessel function, which is also called the Weber function or the Neumann function. + * + * Excel Function: + * BESSELY(x,ord) + * + * @access public + * @category Engineering Functions + * @param float $x The value at which to evaluate the function. + * If x is nonnumeric, BESSELK returns the #VALUE! error value. + * @param integer $ord The order of the Bessel function. If n is not an integer, it is truncated. + * If $ord is nonnumeric, BESSELK returns the #VALUE! error value. + * If $ord < 0, BESSELK returns the #NUM! error value. + * + * @return float + */ + public static function BESSELY($x, $ord) { + $x = (is_null($x)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($x); + $ord = (is_null($ord)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($ord); + + if ((is_numeric($x)) && (is_numeric($ord))) { + if (($ord < 0) || ($x == 0.0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + + switch(floor($ord)) { + case 0 : return self::_Bessely0($x); + break; + case 1 : return self::_Bessely1($x); + break; + default: $fTox = 2 / $x; + $fBym = self::_Bessely0($x); + $fBy = self::_Bessely1($x); + for ($n = 1; $n < $ord; ++$n) { + $fByp = $n * $fTox * $fBy - $fBym; + $fBym = $fBy; + $fBy = $fByp; + } + } + return (is_nan($fBy)) ? PHPExcel_Calculation_Functions::NaN() : $fBy; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function BESSELY() + + + /** + * BINTODEC + * + * Return a binary value as decimal. + * + * Excel Function: + * BIN2DEC(x) + * + * @access public + * @category Engineering Functions + * @param string $x The binary number (as a string) that you want to convert. The number + * cannot contain more than 10 characters (10 bits). The most significant + * bit of number is the sign bit. The remaining 9 bits are magnitude bits. + * Negative numbers are represented using two's-complement notation. + * If number is not a valid binary number, or if number contains more than + * 10 characters (10 bits), BIN2DEC returns the #NUM! error value. + * @return string + */ + public static function BINTODEC($x) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + + if (is_bool($x)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $x = (int) $x; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $x = floor($x); + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[01]/',$x,$out)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (strlen($x) > 10) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif (strlen($x) == 10) { + // Two's Complement + $x = substr($x,-9); + return '-'.(512-bindec($x)); + } + return bindec($x); + } // function BINTODEC() + + + /** + * BINTOHEX + * + * Return a binary value as hex. + * + * Excel Function: + * BIN2HEX(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The binary number (as a string) that you want to convert. The number + * cannot contain more than 10 characters (10 bits). The most significant + * bit of number is the sign bit. The remaining 9 bits are magnitude bits. + * Negative numbers are represented using two's-complement notation. + * If number is not a valid binary number, or if number contains more than + * 10 characters (10 bits), BIN2HEX returns the #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, BIN2HEX uses the + * minimum number of characters necessary. Places is useful for padding the + * return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, BIN2HEX returns the #VALUE! error value. + * If places is negative, BIN2HEX returns the #NUM! error value. + * @return string + */ + public static function BINTOHEX($x, $places=NULL) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $x = (int) $x; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $x = floor($x); + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[01]/',$x,$out)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (strlen($x) > 10) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif (strlen($x) == 10) { + // Two's Complement + return str_repeat('F',8).substr(strtoupper(dechex(bindec(substr($x,-9)))),-2); + } + $hexVal = (string) strtoupper(dechex(bindec($x))); + + return self::_nbrConversionFormat($hexVal,$places); + } // function BINTOHEX() + + + /** + * BINTOOCT + * + * Return a binary value as octal. + * + * Excel Function: + * BIN2OCT(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The binary number (as a string) that you want to convert. The number + * cannot contain more than 10 characters (10 bits). The most significant + * bit of number is the sign bit. The remaining 9 bits are magnitude bits. + * Negative numbers are represented using two's-complement notation. + * If number is not a valid binary number, or if number contains more than + * 10 characters (10 bits), BIN2OCT returns the #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, BIN2OCT uses the + * minimum number of characters necessary. Places is useful for padding the + * return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, BIN2OCT returns the #VALUE! error value. + * If places is negative, BIN2OCT returns the #NUM! error value. + * @return string + */ + public static function BINTOOCT($x, $places=NULL) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $x = (int) $x; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $x = floor($x); + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[01]/',$x,$out)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (strlen($x) > 10) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif (strlen($x) == 10) { + // Two's Complement + return str_repeat('7',7).substr(strtoupper(decoct(bindec(substr($x,-9)))),-3); + } + $octVal = (string) decoct(bindec($x)); + + return self::_nbrConversionFormat($octVal,$places); + } // function BINTOOCT() + + + /** + * DECTOBIN + * + * Return a decimal value as binary. + * + * Excel Function: + * DEC2BIN(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The decimal integer you want to convert. If number is negative, + * valid place values are ignored and DEC2BIN returns a 10-character + * (10-bit) binary number in which the most significant bit is the sign + * bit. The remaining 9 bits are magnitude bits. Negative numbers are + * represented using two's-complement notation. + * If number < -512 or if number > 511, DEC2BIN returns the #NUM! error + * value. + * If number is nonnumeric, DEC2BIN returns the #VALUE! error value. + * If DEC2BIN requires more than places characters, it returns the #NUM! + * error value. + * @param integer $places The number of characters to use. If places is omitted, DEC2BIN uses + * the minimum number of characters necessary. Places is useful for + * padding the return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, DEC2BIN returns the #VALUE! error value. + * If places is zero or negative, DEC2BIN returns the #NUM! error value. + * @return string + */ + public static function DECTOBIN($x, $places=NULL) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $x = (int) $x; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[-0123456789.]/',$x,$out)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) floor($x); + $r = decbin($x); + if (strlen($r) == 32) { + // Two's Complement + $r = substr($r,-10); + } elseif (strlen($r) > 11) { + return PHPExcel_Calculation_Functions::NaN(); + } + + return self::_nbrConversionFormat($r,$places); + } // function DECTOBIN() + + + /** + * DECTOHEX + * + * Return a decimal value as hex. + * + * Excel Function: + * DEC2HEX(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The decimal integer you want to convert. If number is negative, + * places is ignored and DEC2HEX returns a 10-character (40-bit) + * hexadecimal number in which the most significant bit is the sign + * bit. The remaining 39 bits are magnitude bits. Negative numbers + * are represented using two's-complement notation. + * If number < -549,755,813,888 or if number > 549,755,813,887, + * DEC2HEX returns the #NUM! error value. + * If number is nonnumeric, DEC2HEX returns the #VALUE! error value. + * If DEC2HEX requires more than places characters, it returns the + * #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, DEC2HEX uses + * the minimum number of characters necessary. Places is useful for + * padding the return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, DEC2HEX returns the #VALUE! error value. + * If places is zero or negative, DEC2HEX returns the #NUM! error value. + * @return string + */ + public static function DECTOHEX($x, $places=null) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $x = (int) $x; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[-0123456789.]/',$x,$out)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) floor($x); + $r = strtoupper(dechex($x)); + if (strlen($r) == 8) { + // Two's Complement + $r = 'FF'.$r; + } + + return self::_nbrConversionFormat($r,$places); + } // function DECTOHEX() + + + /** + * DECTOOCT + * + * Return an decimal value as octal. + * + * Excel Function: + * DEC2OCT(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The decimal integer you want to convert. If number is negative, + * places is ignored and DEC2OCT returns a 10-character (30-bit) + * octal number in which the most significant bit is the sign bit. + * The remaining 29 bits are magnitude bits. Negative numbers are + * represented using two's-complement notation. + * If number < -536,870,912 or if number > 536,870,911, DEC2OCT + * returns the #NUM! error value. + * If number is nonnumeric, DEC2OCT returns the #VALUE! error value. + * If DEC2OCT requires more than places characters, it returns the + * #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, DEC2OCT uses + * the minimum number of characters necessary. Places is useful for + * padding the return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, DEC2OCT returns the #VALUE! error value. + * If places is zero or negative, DEC2OCT returns the #NUM! error value. + * @return string + */ + public static function DECTOOCT($x, $places=null) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $x = (int) $x; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[-0123456789.]/',$x,$out)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) floor($x); + $r = decoct($x); + if (strlen($r) == 11) { + // Two's Complement + $r = substr($r,-10); + } + + return self::_nbrConversionFormat($r,$places); + } // function DECTOOCT() + + + /** + * HEXTOBIN + * + * Return a hex value as binary. + * + * Excel Function: + * HEX2BIN(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x the hexadecimal number you want to convert. Number cannot + * contain more than 10 characters. The most significant bit of + * number is the sign bit (40th bit from the right). The remaining + * 9 bits are magnitude bits. Negative numbers are represented + * using two's-complement notation. + * If number is negative, HEX2BIN ignores places and returns a + * 10-character binary number. + * If number is negative, it cannot be less than FFFFFFFE00, and + * if number is positive, it cannot be greater than 1FF. + * If number is not a valid hexadecimal number, HEX2BIN returns + * the #NUM! error value. + * If HEX2BIN requires more than places characters, it returns + * the #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, + * HEX2BIN uses the minimum number of characters necessary. Places + * is useful for padding the return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, HEX2BIN returns the #VALUE! error value. + * If places is negative, HEX2BIN returns the #NUM! error value. + * @return string + */ + public static function HEXTOBIN($x, $places=null) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[0123456789ABCDEF]/',strtoupper($x),$out)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $binVal = decbin(hexdec($x)); + + return substr(self::_nbrConversionFormat($binVal,$places),-10); + } // function HEXTOBIN() + + + /** + * HEXTODEC + * + * Return a hex value as decimal. + * + * Excel Function: + * HEX2DEC(x) + * + * @access public + * @category Engineering Functions + * @param string $x The hexadecimal number you want to convert. This number cannot + * contain more than 10 characters (40 bits). The most significant + * bit of number is the sign bit. The remaining 39 bits are magnitude + * bits. Negative numbers are represented using two's-complement + * notation. + * If number is not a valid hexadecimal number, HEX2DEC returns the + * #NUM! error value. + * @return string + */ + public static function HEXTODEC($x) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + + if (is_bool($x)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[0123456789ABCDEF]/',strtoupper($x),$out)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return hexdec($x); + } // function HEXTODEC() + + + /** + * HEXTOOCT + * + * Return a hex value as octal. + * + * Excel Function: + * HEX2OCT(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The hexadecimal number you want to convert. Number cannot + * contain more than 10 characters. The most significant bit of + * number is the sign bit. The remaining 39 bits are magnitude + * bits. Negative numbers are represented using two's-complement + * notation. + * If number is negative, HEX2OCT ignores places and returns a + * 10-character octal number. + * If number is negative, it cannot be less than FFE0000000, and + * if number is positive, it cannot be greater than 1FFFFFFF. + * If number is not a valid hexadecimal number, HEX2OCT returns + * the #NUM! error value. + * If HEX2OCT requires more than places characters, it returns + * the #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, HEX2OCT + * uses the minimum number of characters necessary. Places is + * useful for padding the return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, HEX2OCT returns the #VALUE! error + * value. + * If places is negative, HEX2OCT returns the #NUM! error value. + * @return string + */ + public static function HEXTOOCT($x, $places=null) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) $x; + if (strlen($x) > preg_match_all('/[0123456789ABCDEF]/',strtoupper($x),$out)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $octVal = decoct(hexdec($x)); + + return self::_nbrConversionFormat($octVal,$places); + } // function HEXTOOCT() + + + /** + * OCTTOBIN + * + * Return an octal value as binary. + * + * Excel Function: + * OCT2BIN(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The octal number you want to convert. Number may not + * contain more than 10 characters. The most significant + * bit of number is the sign bit. The remaining 29 bits + * are magnitude bits. Negative numbers are represented + * using two's-complement notation. + * If number is negative, OCT2BIN ignores places and returns + * a 10-character binary number. + * If number is negative, it cannot be less than 7777777000, + * and if number is positive, it cannot be greater than 777. + * If number is not a valid octal number, OCT2BIN returns + * the #NUM! error value. + * If OCT2BIN requires more than places characters, it + * returns the #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, + * OCT2BIN uses the minimum number of characters necessary. + * Places is useful for padding the return value with + * leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, OCT2BIN returns the #VALUE! + * error value. + * If places is negative, OCT2BIN returns the #NUM! error + * value. + * @return string + */ + public static function OCTTOBIN($x, $places=null) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) $x; + if (preg_match_all('/[01234567]/',$x,$out) != strlen($x)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $r = decbin(octdec($x)); + + return self::_nbrConversionFormat($r,$places); + } // function OCTTOBIN() + + + /** + * OCTTODEC + * + * Return an octal value as decimal. + * + * Excel Function: + * OCT2DEC(x) + * + * @access public + * @category Engineering Functions + * @param string $x The octal number you want to convert. Number may not contain + * more than 10 octal characters (30 bits). The most significant + * bit of number is the sign bit. The remaining 29 bits are + * magnitude bits. Negative numbers are represented using + * two's-complement notation. + * If number is not a valid octal number, OCT2DEC returns the + * #NUM! error value. + * @return string + */ + public static function OCTTODEC($x) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + + if (is_bool($x)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) $x; + if (preg_match_all('/[01234567]/',$x,$out) != strlen($x)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return octdec($x); + } // function OCTTODEC() + + + /** + * OCTTOHEX + * + * Return an octal value as hex. + * + * Excel Function: + * OCT2HEX(x[,places]) + * + * @access public + * @category Engineering Functions + * @param string $x The octal number you want to convert. Number may not contain + * more than 10 octal characters (30 bits). The most significant + * bit of number is the sign bit. The remaining 29 bits are + * magnitude bits. Negative numbers are represented using + * two's-complement notation. + * If number is negative, OCT2HEX ignores places and returns a + * 10-character hexadecimal number. + * If number is not a valid octal number, OCT2HEX returns the + * #NUM! error value. + * If OCT2HEX requires more than places characters, it returns + * the #NUM! error value. + * @param integer $places The number of characters to use. If places is omitted, OCT2HEX + * uses the minimum number of characters necessary. Places is useful + * for padding the return value with leading 0s (zeros). + * If places is not an integer, it is truncated. + * If places is nonnumeric, OCT2HEX returns the #VALUE! error value. + * If places is negative, OCT2HEX returns the #NUM! error value. + * @return string + */ + public static function OCTTOHEX($x, $places=null) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $places = PHPExcel_Calculation_Functions::flattenSingleValue($places); + + if (is_bool($x)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $x = (string) $x; + if (preg_match_all('/[01234567]/',$x,$out) != strlen($x)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $hexVal = strtoupper(dechex(octdec($x))); + + return self::_nbrConversionFormat($hexVal,$places); + } // function OCTTOHEX() + + + /** + * COMPLEX + * + * Converts real and imaginary coefficients into a complex number of the form x + yi or x + yj. + * + * Excel Function: + * COMPLEX(realNumber,imaginary[,places]) + * + * @access public + * @category Engineering Functions + * @param float $realNumber The real coefficient of the complex number. + * @param float $imaginary The imaginary coefficient of the complex number. + * @param string $suffix The suffix for the imaginary component of the complex number. + * If omitted, the suffix is assumed to be "i". + * @return string + */ + public static function COMPLEX($realNumber=0.0, $imaginary=0.0, $suffix='i') { + $realNumber = (is_null($realNumber)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($realNumber); + $imaginary = (is_null($imaginary)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($imaginary); + $suffix = (is_null($suffix)) ? 'i' : PHPExcel_Calculation_Functions::flattenSingleValue($suffix); + + if (((is_numeric($realNumber)) && (is_numeric($imaginary))) && + (($suffix == 'i') || ($suffix == 'j') || ($suffix == ''))) { + $realNumber = (float) $realNumber; + $imaginary = (float) $imaginary; + + if ($suffix == '') $suffix = 'i'; + if ($realNumber == 0.0) { + if ($imaginary == 0.0) { + return (string) '0'; + } elseif ($imaginary == 1.0) { + return (string) $suffix; + } elseif ($imaginary == -1.0) { + return (string) '-'.$suffix; + } + return (string) $imaginary.$suffix; + } elseif ($imaginary == 0.0) { + return (string) $realNumber; + } elseif ($imaginary == 1.0) { + return (string) $realNumber.'+'.$suffix; + } elseif ($imaginary == -1.0) { + return (string) $realNumber.'-'.$suffix; + } + if ($imaginary > 0) { $imaginary = (string) '+'.$imaginary; } + return (string) $realNumber.$imaginary.$suffix; + } + + return PHPExcel_Calculation_Functions::VALUE(); + } // function COMPLEX() + + + /** + * IMAGINARY + * + * Returns the imaginary coefficient of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMAGINARY(complexNumber) + * + * @access public + * @category Engineering Functions + * @param string $complexNumber The complex number for which you want the imaginary + * coefficient. + * @return float + */ + public static function IMAGINARY($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + return $parsedComplex['imaginary']; + } // function IMAGINARY() + + + /** + * IMREAL + * + * Returns the real coefficient of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMREAL(complexNumber) + * + * @access public + * @category Engineering Functions + * @param string $complexNumber The complex number for which you want the real coefficient. + * @return float + */ + public static function IMREAL($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + return $parsedComplex['real']; + } // function IMREAL() + + + /** + * IMABS + * + * Returns the absolute value (modulus) of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMABS(complexNumber) + * + * @param string $complexNumber The complex number for which you want the absolute value. + * @return float + */ + public static function IMABS($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + return sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary'])); + } // function IMABS() + + + /** + * IMARGUMENT + * + * Returns the argument theta of a complex number, i.e. the angle in radians from the real + * axis to the representation of the number in polar coordinates. + * + * Excel Function: + * IMARGUMENT(complexNumber) + * + * @param string $complexNumber The complex number for which you want the argument theta. + * @return float + */ + public static function IMARGUMENT($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if ($parsedComplex['real'] == 0.0) { + if ($parsedComplex['imaginary'] == 0.0) { + return 0.0; + } elseif($parsedComplex['imaginary'] < 0.0) { + return M_PI / -2; + } else { + return M_PI / 2; + } + } elseif ($parsedComplex['real'] > 0.0) { + return atan($parsedComplex['imaginary'] / $parsedComplex['real']); + } elseif ($parsedComplex['imaginary'] < 0.0) { + return 0 - (M_PI - atan(abs($parsedComplex['imaginary']) / abs($parsedComplex['real']))); + } else { + return M_PI - atan($parsedComplex['imaginary'] / abs($parsedComplex['real'])); + } + } // function IMARGUMENT() + + + /** + * IMCONJUGATE + * + * Returns the complex conjugate of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMCONJUGATE(complexNumber) + * + * @param string $complexNumber The complex number for which you want the conjugate. + * @return string + */ + public static function IMCONJUGATE($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if ($parsedComplex['imaginary'] == 0.0) { + return $parsedComplex['real']; + } else { + return self::_cleanComplex( self::COMPLEX( $parsedComplex['real'], + 0 - $parsedComplex['imaginary'], + $parsedComplex['suffix'] + ) + ); + } + } // function IMCONJUGATE() + + + /** + * IMCOS + * + * Returns the cosine of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMCOS(complexNumber) + * + * @param string $complexNumber The complex number for which you want the cosine. + * @return string|float + */ + public static function IMCOS($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if ($parsedComplex['imaginary'] == 0.0) { + return cos($parsedComplex['real']); + } else { + return self::IMCONJUGATE(self::COMPLEX(cos($parsedComplex['real']) * cosh($parsedComplex['imaginary']),sin($parsedComplex['real']) * sinh($parsedComplex['imaginary']),$parsedComplex['suffix'])); + } + } // function IMCOS() + + + /** + * IMSIN + * + * Returns the sine of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMSIN(complexNumber) + * + * @param string $complexNumber The complex number for which you want the sine. + * @return string|float + */ + public static function IMSIN($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if ($parsedComplex['imaginary'] == 0.0) { + return sin($parsedComplex['real']); + } else { + return self::COMPLEX(sin($parsedComplex['real']) * cosh($parsedComplex['imaginary']),cos($parsedComplex['real']) * sinh($parsedComplex['imaginary']),$parsedComplex['suffix']); + } + } // function IMSIN() + + + /** + * IMSQRT + * + * Returns the square root of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMSQRT(complexNumber) + * + * @param string $complexNumber The complex number for which you want the square root. + * @return string + */ + public static function IMSQRT($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + $theta = self::IMARGUMENT($complexNumber); + $d1 = cos($theta / 2); + $d2 = sin($theta / 2); + $r = sqrt(sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']))); + + if ($parsedComplex['suffix'] == '') { + return self::COMPLEX($d1 * $r,$d2 * $r); + } else { + return self::COMPLEX($d1 * $r,$d2 * $r,$parsedComplex['suffix']); + } + } // function IMSQRT() + + + /** + * IMLN + * + * Returns the natural logarithm of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMLN(complexNumber) + * + * @param string $complexNumber The complex number for which you want the natural logarithm. + * @return string + */ + public static function IMLN($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $logR = log(sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']))); + $t = self::IMARGUMENT($complexNumber); + + if ($parsedComplex['suffix'] == '') { + return self::COMPLEX($logR,$t); + } else { + return self::COMPLEX($logR,$t,$parsedComplex['suffix']); + } + } // function IMLN() + + + /** + * IMLOG10 + * + * Returns the common logarithm (base 10) of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMLOG10(complexNumber) + * + * @param string $complexNumber The complex number for which you want the common logarithm. + * @return string + */ + public static function IMLOG10($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif (($parsedComplex['real'] > 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + return log10($parsedComplex['real']); + } + + return self::IMPRODUCT(log10(EULER),self::IMLN($complexNumber)); + } // function IMLOG10() + + + /** + * IMLOG2 + * + * Returns the base-2 logarithm of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMLOG2(complexNumber) + * + * @param string $complexNumber The complex number for which you want the base-2 logarithm. + * @return string + */ + public static function IMLOG2($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif (($parsedComplex['real'] > 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + return log($parsedComplex['real'],2); + } + + return self::IMPRODUCT(log(EULER,2),self::IMLN($complexNumber)); + } // function IMLOG2() + + + /** + * IMEXP + * + * Returns the exponential of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMEXP(complexNumber) + * + * @param string $complexNumber The complex number for which you want the exponential. + * @return string + */ + public static function IMEXP($complexNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + + $parsedComplex = self::_parseComplex($complexNumber); + + if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + return '1'; + } + + $e = exp($parsedComplex['real']); + $eX = $e * cos($parsedComplex['imaginary']); + $eY = $e * sin($parsedComplex['imaginary']); + + if ($parsedComplex['suffix'] == '') { + return self::COMPLEX($eX,$eY); + } else { + return self::COMPLEX($eX,$eY,$parsedComplex['suffix']); + } + } // function IMEXP() + + + /** + * IMPOWER + * + * Returns a complex number in x + yi or x + yj text format raised to a power. + * + * Excel Function: + * IMPOWER(complexNumber,realNumber) + * + * @param string $complexNumber The complex number you want to raise to a power. + * @param float $realNumber The power to which you want to raise the complex number. + * @return string + */ + public static function IMPOWER($complexNumber,$realNumber) { + $complexNumber = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber); + $realNumber = PHPExcel_Calculation_Functions::flattenSingleValue($realNumber); + + if (!is_numeric($realNumber)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + $parsedComplex = self::_parseComplex($complexNumber); + + $r = sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary'])); + $rPower = pow($r,$realNumber); + $theta = self::IMARGUMENT($complexNumber) * $realNumber; + if ($theta == 0) { + return 1; + } elseif ($parsedComplex['imaginary'] == 0.0) { + return self::COMPLEX($rPower * cos($theta),$rPower * sin($theta),$parsedComplex['suffix']); + } else { + return self::COMPLEX($rPower * cos($theta),$rPower * sin($theta),$parsedComplex['suffix']); + } + } // function IMPOWER() + + + /** + * IMDIV + * + * Returns the quotient of two complex numbers in x + yi or x + yj text format. + * + * Excel Function: + * IMDIV(complexDividend,complexDivisor) + * + * @param string $complexDividend The complex numerator or dividend. + * @param string $complexDivisor The complex denominator or divisor. + * @return string + */ + public static function IMDIV($complexDividend,$complexDivisor) { + $complexDividend = PHPExcel_Calculation_Functions::flattenSingleValue($complexDividend); + $complexDivisor = PHPExcel_Calculation_Functions::flattenSingleValue($complexDivisor); + + $parsedComplexDividend = self::_parseComplex($complexDividend); + $parsedComplexDivisor = self::_parseComplex($complexDivisor); + + if (($parsedComplexDividend['suffix'] != '') && ($parsedComplexDivisor['suffix'] != '') && + ($parsedComplexDividend['suffix'] != $parsedComplexDivisor['suffix'])) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($parsedComplexDividend['suffix'] != '') && ($parsedComplexDivisor['suffix'] == '')) { + $parsedComplexDivisor['suffix'] = $parsedComplexDividend['suffix']; + } + + $d1 = ($parsedComplexDividend['real'] * $parsedComplexDivisor['real']) + ($parsedComplexDividend['imaginary'] * $parsedComplexDivisor['imaginary']); + $d2 = ($parsedComplexDividend['imaginary'] * $parsedComplexDivisor['real']) - ($parsedComplexDividend['real'] * $parsedComplexDivisor['imaginary']); + $d3 = ($parsedComplexDivisor['real'] * $parsedComplexDivisor['real']) + ($parsedComplexDivisor['imaginary'] * $parsedComplexDivisor['imaginary']); + + $r = $d1/$d3; + $i = $d2/$d3; + + if ($i > 0.0) { + return self::_cleanComplex($r.'+'.$i.$parsedComplexDivisor['suffix']); + } elseif ($i < 0.0) { + return self::_cleanComplex($r.$i.$parsedComplexDivisor['suffix']); + } else { + return $r; + } + } // function IMDIV() + + + /** + * IMSUB + * + * Returns the difference of two complex numbers in x + yi or x + yj text format. + * + * Excel Function: + * IMSUB(complexNumber1,complexNumber2) + * + * @param string $complexNumber1 The complex number from which to subtract complexNumber2. + * @param string $complexNumber2 The complex number to subtract from complexNumber1. + * @return string + */ + public static function IMSUB($complexNumber1,$complexNumber2) { + $complexNumber1 = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber1); + $complexNumber2 = PHPExcel_Calculation_Functions::flattenSingleValue($complexNumber2); + + $parsedComplex1 = self::_parseComplex($complexNumber1); + $parsedComplex2 = self::_parseComplex($complexNumber2); + + if ((($parsedComplex1['suffix'] != '') && ($parsedComplex2['suffix'] != '')) && + ($parsedComplex1['suffix'] != $parsedComplex2['suffix'])) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif (($parsedComplex1['suffix'] == '') && ($parsedComplex2['suffix'] != '')) { + $parsedComplex1['suffix'] = $parsedComplex2['suffix']; + } + + $d1 = $parsedComplex1['real'] - $parsedComplex2['real']; + $d2 = $parsedComplex1['imaginary'] - $parsedComplex2['imaginary']; + + return self::COMPLEX($d1,$d2,$parsedComplex1['suffix']); + } // function IMSUB() + + + /** + * IMSUM + * + * Returns the sum of two or more complex numbers in x + yi or x + yj text format. + * + * Excel Function: + * IMSUM(complexNumber[,complexNumber[,...]]) + * + * @param string $complexNumber,... Series of complex numbers to add + * @return string + */ + public static function IMSUM() { + // Return value + $returnValue = self::_parseComplex('0'); + $activeSuffix = ''; + + // Loop through the arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + $parsedComplex = self::_parseComplex($arg); + + if ($activeSuffix == '') { + $activeSuffix = $parsedComplex['suffix']; + } elseif (($parsedComplex['suffix'] != '') && ($activeSuffix != $parsedComplex['suffix'])) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + $returnValue['real'] += $parsedComplex['real']; + $returnValue['imaginary'] += $parsedComplex['imaginary']; + } + + if ($returnValue['imaginary'] == 0.0) { $activeSuffix = ''; } + return self::COMPLEX($returnValue['real'],$returnValue['imaginary'],$activeSuffix); + } // function IMSUM() + + + /** + * IMPRODUCT + * + * Returns the product of two or more complex numbers in x + yi or x + yj text format. + * + * Excel Function: + * IMPRODUCT(complexNumber[,complexNumber[,...]]) + * + * @param string $complexNumber,... Series of complex numbers to multiply + * @return string + */ + public static function IMPRODUCT() { + // Return value + $returnValue = self::_parseComplex('1'); + $activeSuffix = ''; + + // Loop through the arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + $parsedComplex = self::_parseComplex($arg); + + $workValue = $returnValue; + if (($parsedComplex['suffix'] != '') && ($activeSuffix == '')) { + $activeSuffix = $parsedComplex['suffix']; + } elseif (($parsedComplex['suffix'] != '') && ($activeSuffix != $parsedComplex['suffix'])) { + return PHPExcel_Calculation_Functions::NaN(); + } + $returnValue['real'] = ($workValue['real'] * $parsedComplex['real']) - ($workValue['imaginary'] * $parsedComplex['imaginary']); + $returnValue['imaginary'] = ($workValue['real'] * $parsedComplex['imaginary']) + ($workValue['imaginary'] * $parsedComplex['real']); + } + + if ($returnValue['imaginary'] == 0.0) { $activeSuffix = ''; } + return self::COMPLEX($returnValue['real'],$returnValue['imaginary'],$activeSuffix); + } // function IMPRODUCT() + + + /** + * DELTA + * + * Tests whether two values are equal. Returns 1 if number1 = number2; returns 0 otherwise. + * Use this function to filter a set of values. For example, by summing several DELTA + * functions you calculate the count of equal pairs. This function is also known as the + * Kronecker Delta function. + * + * Excel Function: + * DELTA(a[,b]) + * + * @param float $a The first number. + * @param float $b The second number. If omitted, b is assumed to be zero. + * @return int + */ + public static function DELTA($a, $b=0) { + $a = PHPExcel_Calculation_Functions::flattenSingleValue($a); + $b = PHPExcel_Calculation_Functions::flattenSingleValue($b); + + return (int) ($a == $b); + } // function DELTA() + + + /** + * GESTEP + * + * Excel Function: + * GESTEP(number[,step]) + * + * Returns 1 if number >= step; returns 0 (zero) otherwise + * Use this function to filter a set of values. For example, by summing several GESTEP + * functions you calculate the count of values that exceed a threshold. + * + * @param float $number The value to test against step. + * @param float $step The threshold value. + * If you omit a value for step, GESTEP uses zero. + * @return int + */ + public static function GESTEP($number, $step=0) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + $step = PHPExcel_Calculation_Functions::flattenSingleValue($step); + + return (int) ($number >= $step); + } // function GESTEP() + + + // + // Private method to calculate the erf value + // + private static $_two_sqrtpi = 1.128379167095512574; + + public static function _erfVal($x) { + if (abs($x) > 2.2) { + return 1 - self::_erfcVal($x); + } + $sum = $term = $x; + $xsqr = ($x * $x); + $j = 1; + do { + $term *= $xsqr / $j; + $sum -= $term / (2 * $j + 1); + ++$j; + $term *= $xsqr / $j; + $sum += $term / (2 * $j + 1); + ++$j; + if ($sum == 0.0) { + break; + } + } while (abs($term / $sum) > PRECISION); + return self::$_two_sqrtpi * $sum; + } // function _erfVal() + + + /** + * ERF + * + * Returns the error function integrated between the lower and upper bound arguments. + * + * Note: In Excel 2007 or earlier, if you input a negative value for the upper or lower bound arguments, + * the function would return a #NUM! error. However, in Excel 2010, the function algorithm was + * improved, so that it can now calculate the function for both positive and negative ranges. + * PHPExcel follows Excel 2010 behaviour, and accepts nagative arguments. + * + * Excel Function: + * ERF(lower[,upper]) + * + * @param float $lower lower bound for integrating ERF + * @param float $upper upper bound for integrating ERF. + * If omitted, ERF integrates between zero and lower_limit + * @return float + */ + public static function ERF($lower, $upper = NULL) { + $lower = PHPExcel_Calculation_Functions::flattenSingleValue($lower); + $upper = PHPExcel_Calculation_Functions::flattenSingleValue($upper); + + if (is_numeric($lower)) { + if (is_null($upper)) { + return self::_erfVal($lower); + } + if (is_numeric($upper)) { + return self::_erfVal($upper) - self::_erfVal($lower); + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ERF() + + + // + // Private method to calculate the erfc value + // + private static $_one_sqrtpi = 0.564189583547756287; + + private static function _erfcVal($x) { + if (abs($x) < 2.2) { + return 1 - self::_erfVal($x); + } + if ($x < 0) { + return 2 - self::ERFC(-$x); + } + $a = $n = 1; + $b = $c = $x; + $d = ($x * $x) + 0.5; + $q1 = $q2 = $b / $d; + $t = 0; + do { + $t = $a * $n + $b * $x; + $a = $b; + $b = $t; + $t = $c * $n + $d * $x; + $c = $d; + $d = $t; + $n += 0.5; + $q1 = $q2; + $q2 = $b / $d; + } while ((abs($q1 - $q2) / $q2) > PRECISION); + return self::$_one_sqrtpi * exp(-$x * $x) * $q2; + } // function _erfcVal() + + + /** + * ERFC + * + * Returns the complementary ERF function integrated between x and infinity + * + * Note: In Excel 2007 or earlier, if you input a negative value for the lower bound argument, + * the function would return a #NUM! error. However, in Excel 2010, the function algorithm was + * improved, so that it can now calculate the function for both positive and negative x values. + * PHPExcel follows Excel 2010 behaviour, and accepts nagative arguments. + * + * Excel Function: + * ERFC(x) + * + * @param float $x The lower bound for integrating ERFC + * @return float + */ + public static function ERFC($x) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + + if (is_numeric($x)) { + return self::_erfcVal($x); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ERFC() + + + /** + * getConversionGroups + * Returns a list of the different conversion groups for UOM conversions + * + * @return array + */ + public static function getConversionGroups() { + $conversionGroups = array(); + foreach(self::$_conversionUnits as $conversionUnit) { + $conversionGroups[] = $conversionUnit['Group']; + } + return array_merge(array_unique($conversionGroups)); + } // function getConversionGroups() + + + /** + * getConversionGroupUnits + * Returns an array of units of measure, for a specified conversion group, or for all groups + * + * @param string $group The group whose units of measure you want to retrieve + * @return array + */ + public static function getConversionGroupUnits($group = NULL) { + $conversionGroups = array(); + foreach(self::$_conversionUnits as $conversionUnit => $conversionGroup) { + if ((is_null($group)) || ($conversionGroup['Group'] == $group)) { + $conversionGroups[$conversionGroup['Group']][] = $conversionUnit; + } + } + return $conversionGroups; + } // function getConversionGroupUnits() + + + /** + * getConversionGroupUnitDetails + * + * @param string $group The group whose units of measure you want to retrieve + * @return array + */ + public static function getConversionGroupUnitDetails($group = NULL) { + $conversionGroups = array(); + foreach(self::$_conversionUnits as $conversionUnit => $conversionGroup) { + if ((is_null($group)) || ($conversionGroup['Group'] == $group)) { + $conversionGroups[$conversionGroup['Group']][] = array( 'unit' => $conversionUnit, + 'description' => $conversionGroup['Unit Name'] + ); + } + } + return $conversionGroups; + } // function getConversionGroupUnitDetails() + + + /** + * getConversionMultipliers + * Returns an array of the Multiplier prefixes that can be used with Units of Measure in CONVERTUOM() + * + * @return array of mixed + */ + public static function getConversionMultipliers() { + return self::$_conversionMultipliers; + } // function getConversionGroups() + + + /** + * CONVERTUOM + * + * Converts a number from one measurement system to another. + * For example, CONVERT can translate a table of distances in miles to a table of distances + * in kilometers. + * + * Excel Function: + * CONVERT(value,fromUOM,toUOM) + * + * @param float $value The value in fromUOM to convert. + * @param string $fromUOM The units for value. + * @param string $toUOM The units for the result. + * + * @return float + */ + public static function CONVERTUOM($value, $fromUOM, $toUOM) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $fromUOM = PHPExcel_Calculation_Functions::flattenSingleValue($fromUOM); + $toUOM = PHPExcel_Calculation_Functions::flattenSingleValue($toUOM); + + if (!is_numeric($value)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $fromMultiplier = 1.0; + if (isset(self::$_conversionUnits[$fromUOM])) { + $unitGroup1 = self::$_conversionUnits[$fromUOM]['Group']; + } else { + $fromMultiplier = substr($fromUOM,0,1); + $fromUOM = substr($fromUOM,1); + if (isset(self::$_conversionMultipliers[$fromMultiplier])) { + $fromMultiplier = self::$_conversionMultipliers[$fromMultiplier]['multiplier']; + } else { + return PHPExcel_Calculation_Functions::NA(); + } + if ((isset(self::$_conversionUnits[$fromUOM])) && (self::$_conversionUnits[$fromUOM]['AllowPrefix'])) { + $unitGroup1 = self::$_conversionUnits[$fromUOM]['Group']; + } else { + return PHPExcel_Calculation_Functions::NA(); + } + } + $value *= $fromMultiplier; + + $toMultiplier = 1.0; + if (isset(self::$_conversionUnits[$toUOM])) { + $unitGroup2 = self::$_conversionUnits[$toUOM]['Group']; + } else { + $toMultiplier = substr($toUOM,0,1); + $toUOM = substr($toUOM,1); + if (isset(self::$_conversionMultipliers[$toMultiplier])) { + $toMultiplier = self::$_conversionMultipliers[$toMultiplier]['multiplier']; + } else { + return PHPExcel_Calculation_Functions::NA(); + } + if ((isset(self::$_conversionUnits[$toUOM])) && (self::$_conversionUnits[$toUOM]['AllowPrefix'])) { + $unitGroup2 = self::$_conversionUnits[$toUOM]['Group']; + } else { + return PHPExcel_Calculation_Functions::NA(); + } + } + if ($unitGroup1 != $unitGroup2) { + return PHPExcel_Calculation_Functions::NA(); + } + + if (($fromUOM == $toUOM) && ($fromMultiplier == $toMultiplier)) { + // We've already factored $fromMultiplier into the value, so we need + // to reverse it again + return $value / $fromMultiplier; + } elseif ($unitGroup1 == 'Temperature') { + if (($fromUOM == 'F') || ($fromUOM == 'fah')) { + if (($toUOM == 'F') || ($toUOM == 'fah')) { + return $value; + } else { + $value = (($value - 32) / 1.8); + if (($toUOM == 'K') || ($toUOM == 'kel')) { + $value += 273.15; + } + return $value; + } + } elseif ((($fromUOM == 'K') || ($fromUOM == 'kel')) && + (($toUOM == 'K') || ($toUOM == 'kel'))) { + return $value; + } elseif ((($fromUOM == 'C') || ($fromUOM == 'cel')) && + (($toUOM == 'C') || ($toUOM == 'cel'))) { + return $value; + } + if (($toUOM == 'F') || ($toUOM == 'fah')) { + if (($fromUOM == 'K') || ($fromUOM == 'kel')) { + $value -= 273.15; + } + return ($value * 1.8) + 32; + } + if (($toUOM == 'C') || ($toUOM == 'cel')) { + return $value - 273.15; + } + return $value + 273.15; + } + return ($value * self::$_unitConversions[$unitGroup1][$fromUOM][$toUOM]) / $toMultiplier; + } // function CONVERTUOM() + +} // class PHPExcel_Calculation_Engineering diff --git a/PHPExcel/Calculation/Exception.php b/PHPExcel/Calculation/Exception.php new file mode 100644 index 0000000..037f788 --- /dev/null +++ b/PHPExcel/Calculation/Exception.php @@ -0,0 +1,52 @@ +line = $line; + $e->file = $file; + throw $e; + } +} diff --git a/PHPExcel/Calculation/ExceptionHandler.php b/PHPExcel/Calculation/ExceptionHandler.php new file mode 100644 index 0000000..389f647 --- /dev/null +++ b/PHPExcel/Calculation/ExceptionHandler.php @@ -0,0 +1,49 @@ +format('d') == $testDate->format('t')); + } // function _lastDayOfMonth() + + + /** + * _firstDayOfMonth + * + * Returns a boolean TRUE/FALSE indicating if this date is the first date of the month + * + * @param DateTime $testDate The date for testing + * @return boolean + */ + private static function _firstDayOfMonth($testDate) + { + return ($testDate->format('d') == 1); + } // function _firstDayOfMonth() + + + private static function _coupFirstPeriodDate($settlement, $maturity, $frequency, $next) + { + $months = 12 / $frequency; + + $result = PHPExcel_Shared_Date::ExcelToPHPObject($maturity); + $eom = self::_lastDayOfMonth($result); + + while ($settlement < PHPExcel_Shared_Date::PHPToExcel($result)) { + $result->modify('-'.$months.' months'); + } + if ($next) { + $result->modify('+'.$months.' months'); + } + + if ($eom) { + $result->modify('-1 day'); + } + + return PHPExcel_Shared_Date::PHPToExcel($result); + } // function _coupFirstPeriodDate() + + + private static function _validFrequency($frequency) + { + if (($frequency == 1) || ($frequency == 2) || ($frequency == 4)) { + return true; + } + if ((PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) && + (($frequency == 6) || ($frequency == 12))) { + return true; + } + return false; + } // function _validFrequency() + + + /** + * _daysPerYear + * + * Returns the number of days in a specified year, as defined by the "basis" value + * + * @param integer $year The year against which we're testing + * @param integer $basis The type of day count: + * 0 or omitted US (NASD) 360 + * 1 Actual (365 or 366 in a leap year) + * 2 360 + * 3 365 + * 4 European 360 + * @return integer + */ + private static function _daysPerYear($year, $basis=0) + { + switch ($basis) { + case 0 : + case 2 : + case 4 : + $daysPerYear = 360; + break; + case 3 : + $daysPerYear = 365; + break; + case 1 : + $daysPerYear = (PHPExcel_Calculation_DateTime::_isLeapYear($year)) ? 366 : 365; + break; + default : + return PHPExcel_Calculation_Functions::NaN(); + } + return $daysPerYear; + } // function _daysPerYear() + + + private static function _interestAndPrincipal($rate=0, $per=0, $nper=0, $pv=0, $fv=0, $type=0) + { + $pmt = self::PMT($rate, $nper, $pv, $fv, $type); + $capital = $pv; + for ($i = 1; $i<= $per; ++$i) { + $interest = ($type && $i == 1) ? 0 : -$capital * $rate; + $principal = $pmt - $interest; + $capital += $principal; + } + return array($interest, $principal); + } // function _interestAndPrincipal() + + + /** + * ACCRINT + * + * Returns the accrued interest for a security that pays periodic interest. + * + * Excel Function: + * ACCRINT(issue,firstinterest,settlement,rate,par,frequency[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed $issue The security's issue date. + * @param mixed $firstinterest The security's first interest date. + * @param mixed $settlement The security's settlement date. + * The security settlement date is the date after the issue date + * when the security is traded to the buyer. + * @param float $rate The security's annual coupon rate. + * @param float $par The security's par value. + * If you omit par, ACCRINT uses $1,000. + * @param integer $frequency the number of coupon payments per year. + * Valid frequency values are: + * 1 Annual + * 2 Semi-Annual + * 4 Quarterly + * If working in Gnumeric Mode, the following frequency options are + * also available + * 6 Bimonthly + * 12 Monthly + * @param integer $basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function ACCRINT($issue, $firstinterest, $settlement, $rate, $par=1000, $frequency=1, $basis=0) + { + $issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue); + $firstinterest = PHPExcel_Calculation_Functions::flattenSingleValue($firstinterest); + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $par = (is_null($par)) ? 1000 : PHPExcel_Calculation_Functions::flattenSingleValue($par); + $frequency = (is_null($frequency)) ? 1 : PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if ((is_numeric($rate)) && (is_numeric($par))) { + $rate = (float) $rate; + $par = (float) $par; + if (($rate <= 0) || ($par <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysBetweenIssueAndSettlement = PHPExcel_Calculation_DateTime::YEARFRAC($issue, $settlement, $basis); + if (!is_numeric($daysBetweenIssueAndSettlement)) { + // return date error + return $daysBetweenIssueAndSettlement; + } + + return $par * $rate * $daysBetweenIssueAndSettlement; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ACCRINT() + + + /** + * ACCRINTM + * + * Returns the accrued interest for a security that pays interest at maturity. + * + * Excel Function: + * ACCRINTM(issue,settlement,rate[,par[,basis]]) + * + * @access public + * @category Financial Functions + * @param mixed issue The security's issue date. + * @param mixed settlement The security's settlement (or maturity) date. + * @param float rate The security's annual coupon rate. + * @param float par The security's par value. + * If you omit par, ACCRINT uses $1,000. + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function ACCRINTM($issue, $settlement, $rate, $par=1000, $basis=0) { + $issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue); + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $par = (is_null($par)) ? 1000 : PHPExcel_Calculation_Functions::flattenSingleValue($par); + $basis = (is_null($basis)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if ((is_numeric($rate)) && (is_numeric($par))) { + $rate = (float) $rate; + $par = (float) $par; + if (($rate <= 0) || ($par <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysBetweenIssueAndSettlement = PHPExcel_Calculation_DateTime::YEARFRAC($issue, $settlement, $basis); + if (!is_numeric($daysBetweenIssueAndSettlement)) { + // return date error + return $daysBetweenIssueAndSettlement; + } + return $par * $rate * $daysBetweenIssueAndSettlement; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ACCRINTM() + + + /** + * AMORDEGRC + * + * Returns the depreciation for each accounting period. + * This function is provided for the French accounting system. If an asset is purchased in + * the middle of the accounting period, the prorated depreciation is taken into account. + * The function is similar to AMORLINC, except that a depreciation coefficient is applied in + * the calculation depending on the life of the assets. + * This function will return the depreciation until the last period of the life of the assets + * or until the cumulated value of depreciation is greater than the cost of the assets minus + * the salvage value. + * + * Excel Function: + * AMORDEGRC(cost,purchased,firstPeriod,salvage,period,rate[,basis]) + * + * @access public + * @category Financial Functions + * @param float cost The cost of the asset. + * @param mixed purchased Date of the purchase of the asset. + * @param mixed firstPeriod Date of the end of the first period. + * @param mixed salvage The salvage value at the end of the life of the asset. + * @param float period The period. + * @param float rate Rate of depreciation. + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function AMORDEGRC($cost, $purchased, $firstPeriod, $salvage, $period, $rate, $basis=0) { + $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost); + $purchased = PHPExcel_Calculation_Functions::flattenSingleValue($purchased); + $firstPeriod = PHPExcel_Calculation_Functions::flattenSingleValue($firstPeriod); + $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage); + $period = floor(PHPExcel_Calculation_Functions::flattenSingleValue($period)); + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // The depreciation coefficients are: + // Life of assets (1/rate) Depreciation coefficient + // Less than 3 years 1 + // Between 3 and 4 years 1.5 + // Between 5 and 6 years 2 + // More than 6 years 2.5 + $fUsePer = 1.0 / $rate; + if ($fUsePer < 3.0) { + $amortiseCoeff = 1.0; + } elseif ($fUsePer < 5.0) { + $amortiseCoeff = 1.5; + } elseif ($fUsePer <= 6.0) { + $amortiseCoeff = 2.0; + } else { + $amortiseCoeff = 2.5; + } + + $rate *= $amortiseCoeff; + $fNRate = round(PHPExcel_Calculation_DateTime::YEARFRAC($purchased, $firstPeriod, $basis) * $rate * $cost,0); + $cost -= $fNRate; + $fRest = $cost - $salvage; + + for ($n = 0; $n < $period; ++$n) { + $fNRate = round($rate * $cost,0); + $fRest -= $fNRate; + + if ($fRest < 0.0) { + switch ($period - $n) { + case 0 : + case 1 : return round($cost * 0.5, 0); + break; + default : return 0.0; + break; + } + } + $cost -= $fNRate; + } + return $fNRate; + } // function AMORDEGRC() + + + /** + * AMORLINC + * + * Returns the depreciation for each accounting period. + * This function is provided for the French accounting system. If an asset is purchased in + * the middle of the accounting period, the prorated depreciation is taken into account. + * + * Excel Function: + * AMORLINC(cost,purchased,firstPeriod,salvage,period,rate[,basis]) + * + * @access public + * @category Financial Functions + * @param float cost The cost of the asset. + * @param mixed purchased Date of the purchase of the asset. + * @param mixed firstPeriod Date of the end of the first period. + * @param mixed salvage The salvage value at the end of the life of the asset. + * @param float period The period. + * @param float rate Rate of depreciation. + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function AMORLINC($cost, $purchased, $firstPeriod, $salvage, $period, $rate, $basis=0) { + $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost); + $purchased = PHPExcel_Calculation_Functions::flattenSingleValue($purchased); + $firstPeriod = PHPExcel_Calculation_Functions::flattenSingleValue($firstPeriod); + $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage); + $period = PHPExcel_Calculation_Functions::flattenSingleValue($period); + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + $fOneRate = $cost * $rate; + $fCostDelta = $cost - $salvage; + // Note, quirky variation for leap years on the YEARFRAC for this function + $purchasedYear = PHPExcel_Calculation_DateTime::YEAR($purchased); + $yearFrac = PHPExcel_Calculation_DateTime::YEARFRAC($purchased, $firstPeriod, $basis); + + if (($basis == 1) && ($yearFrac < 1) && (PHPExcel_Calculation_DateTime::_isLeapYear($purchasedYear))) { + $yearFrac *= 365 / 366; + } + + $f0Rate = $yearFrac * $rate * $cost; + $nNumOfFullPeriods = intval(($cost - $salvage - $f0Rate) / $fOneRate); + + if ($period == 0) { + return $f0Rate; + } elseif ($period <= $nNumOfFullPeriods) { + return $fOneRate; + } elseif ($period == ($nNumOfFullPeriods + 1)) { + return ($fCostDelta - $fOneRate * $nNumOfFullPeriods - $f0Rate); + } else { + return 0.0; + } + } // function AMORLINC() + + + /** + * COUPDAYBS + * + * Returns the number of days from the beginning of the coupon period to the settlement date. + * + * Excel Function: + * COUPDAYBS(settlement,maturity,frequency[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue + * date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed frequency the number of coupon payments per year. + * Valid frequency values are: + * 1 Annual + * 2 Semi-Annual + * 4 Quarterly + * If working in Gnumeric Mode, the following frequency options are + * also available + * 6 Bimonthly + * 12 Monthly + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function COUPDAYBS($settlement, $maturity, $frequency, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $frequency = (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + if (is_string($settlement = PHPExcel_Calculation_DateTime::_getDateValue($settlement))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (($settlement > $maturity) || + (!self::_validFrequency($frequency)) || + (($basis < 0) || ($basis > 4))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $daysPerYear = self::_daysPerYear(PHPExcel_Calculation_DateTime::YEAR($settlement),$basis); + $prev = self::_coupFirstPeriodDate($settlement, $maturity, $frequency, False); + + return PHPExcel_Calculation_DateTime::YEARFRAC($prev, $settlement, $basis) * $daysPerYear; + } // function COUPDAYBS() + + + /** + * COUPDAYS + * + * Returns the number of days in the coupon period that contains the settlement date. + * + * Excel Function: + * COUPDAYS(settlement,maturity,frequency[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue + * date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed frequency the number of coupon payments per year. + * Valid frequency values are: + * 1 Annual + * 2 Semi-Annual + * 4 Quarterly + * If working in Gnumeric Mode, the following frequency options are + * also available + * 6 Bimonthly + * 12 Monthly + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function COUPDAYS($settlement, $maturity, $frequency, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $frequency = (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + if (is_string($settlement = PHPExcel_Calculation_DateTime::_getDateValue($settlement))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (($settlement > $maturity) || + (!self::_validFrequency($frequency)) || + (($basis < 0) || ($basis > 4))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + switch ($basis) { + case 3: // Actual/365 + return 365 / $frequency; + case 1: // Actual/actual + if ($frequency == 1) { + $daysPerYear = self::_daysPerYear(PHPExcel_Calculation_DateTime::YEAR($maturity),$basis); + return ($daysPerYear / $frequency); + } else { + $prev = self::_coupFirstPeriodDate($settlement, $maturity, $frequency, False); + $next = self::_coupFirstPeriodDate($settlement, $maturity, $frequency, True); + return ($next - $prev); + } + default: // US (NASD) 30/360, Actual/360 or European 30/360 + return 360 / $frequency; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function COUPDAYS() + + + /** + * COUPDAYSNC + * + * Returns the number of days from the settlement date to the next coupon date. + * + * Excel Function: + * COUPDAYSNC(settlement,maturity,frequency[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue + * date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed frequency the number of coupon payments per year. + * Valid frequency values are: + * 1 Annual + * 2 Semi-Annual + * 4 Quarterly + * If working in Gnumeric Mode, the following frequency options are + * also available + * 6 Bimonthly + * 12 Monthly + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function COUPDAYSNC($settlement, $maturity, $frequency, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $frequency = (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + if (is_string($settlement = PHPExcel_Calculation_DateTime::_getDateValue($settlement))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (($settlement > $maturity) || + (!self::_validFrequency($frequency)) || + (($basis < 0) || ($basis > 4))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $daysPerYear = self::_daysPerYear(PHPExcel_Calculation_DateTime::YEAR($settlement),$basis); + $next = self::_coupFirstPeriodDate($settlement, $maturity, $frequency, True); + + return PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $next, $basis) * $daysPerYear; + } // function COUPDAYSNC() + + + /** + * COUPNCD + * + * Returns the next coupon date after the settlement date. + * + * Excel Function: + * COUPNCD(settlement,maturity,frequency[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue + * date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed frequency the number of coupon payments per year. + * Valid frequency values are: + * 1 Annual + * 2 Semi-Annual + * 4 Quarterly + * If working in Gnumeric Mode, the following frequency options are + * also available + * 6 Bimonthly + * 12 Monthly + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function COUPNCD($settlement, $maturity, $frequency, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $frequency = (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + if (is_string($settlement = PHPExcel_Calculation_DateTime::_getDateValue($settlement))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (($settlement > $maturity) || + (!self::_validFrequency($frequency)) || + (($basis < 0) || ($basis > 4))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + return self::_coupFirstPeriodDate($settlement, $maturity, $frequency, True); + } // function COUPNCD() + + + /** + * COUPNUM + * + * Returns the number of coupons payable between the settlement date and maturity date, + * rounded up to the nearest whole coupon. + * + * Excel Function: + * COUPNUM(settlement,maturity,frequency[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue + * date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed frequency the number of coupon payments per year. + * Valid frequency values are: + * 1 Annual + * 2 Semi-Annual + * 4 Quarterly + * If working in Gnumeric Mode, the following frequency options are + * also available + * 6 Bimonthly + * 12 Monthly + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return integer + */ + public static function COUPNUM($settlement, $maturity, $frequency, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $frequency = (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + if (is_string($settlement = PHPExcel_Calculation_DateTime::_getDateValue($settlement))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (($settlement > $maturity) || + (!self::_validFrequency($frequency)) || + (($basis < 0) || ($basis > 4))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $settlement = self::_coupFirstPeriodDate($settlement, $maturity, $frequency, True); + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity, $basis) * 365; + + switch ($frequency) { + case 1: // annual payments + return ceil($daysBetweenSettlementAndMaturity / 360); + case 2: // half-yearly + return ceil($daysBetweenSettlementAndMaturity / 180); + case 4: // quarterly + return ceil($daysBetweenSettlementAndMaturity / 90); + case 6: // bimonthly + return ceil($daysBetweenSettlementAndMaturity / 60); + case 12: // monthly + return ceil($daysBetweenSettlementAndMaturity / 30); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function COUPNUM() + + + /** + * COUPPCD + * + * Returns the previous coupon date before the settlement date. + * + * Excel Function: + * COUPPCD(settlement,maturity,frequency[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue + * date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed frequency the number of coupon payments per year. + * Valid frequency values are: + * 1 Annual + * 2 Semi-Annual + * 4 Quarterly + * If working in Gnumeric Mode, the following frequency options are + * also available + * 6 Bimonthly + * 12 Monthly + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, + * depending on the value of the ReturnDateType flag + */ + public static function COUPPCD($settlement, $maturity, $frequency, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $frequency = (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + if (is_string($settlement = PHPExcel_Calculation_DateTime::_getDateValue($settlement))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (($settlement > $maturity) || + (!self::_validFrequency($frequency)) || + (($basis < 0) || ($basis > 4))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + return self::_coupFirstPeriodDate($settlement, $maturity, $frequency, False); + } // function COUPPCD() + + + /** + * CUMIPMT + * + * Returns the cumulative interest paid on a loan between the start and end periods. + * + * Excel Function: + * CUMIPMT(rate,nper,pv,start,end[,type]) + * + * @access public + * @category Financial Functions + * @param float $rate The Interest rate + * @param integer $nper The total number of payment periods + * @param float $pv Present Value + * @param integer $start The first period in the calculation. + * Payment periods are numbered beginning with 1. + * @param integer $end The last period in the calculation. + * @param integer $type A number 0 or 1 and indicates when payments are due: + * 0 or omitted At the end of the period. + * 1 At the beginning of the period. + * @return float + */ + public static function CUMIPMT($rate, $nper, $pv, $start, $end, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $nper = (int) PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $start = (int) PHPExcel_Calculation_Functions::flattenSingleValue($start); + $end = (int) PHPExcel_Calculation_Functions::flattenSingleValue($end); + $type = (int) PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($start < 1 || $start > $end) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Calculate + $interest = 0; + for ($per = $start; $per <= $end; ++$per) { + $interest += self::IPMT($rate, $per, $nper, $pv, 0, $type); + } + + return $interest; + } // function CUMIPMT() + + + /** + * CUMPRINC + * + * Returns the cumulative principal paid on a loan between the start and end periods. + * + * Excel Function: + * CUMPRINC(rate,nper,pv,start,end[,type]) + * + * @access public + * @category Financial Functions + * @param float $rate The Interest rate + * @param integer $nper The total number of payment periods + * @param float $pv Present Value + * @param integer $start The first period in the calculation. + * Payment periods are numbered beginning with 1. + * @param integer $end The last period in the calculation. + * @param integer $type A number 0 or 1 and indicates when payments are due: + * 0 or omitted At the end of the period. + * 1 At the beginning of the period. + * @return float + */ + public static function CUMPRINC($rate, $nper, $pv, $start, $end, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $nper = (int) PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $start = (int) PHPExcel_Calculation_Functions::flattenSingleValue($start); + $end = (int) PHPExcel_Calculation_Functions::flattenSingleValue($end); + $type = (int) PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($start < 1 || $start > $end) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Calculate + $principal = 0; + for ($per = $start; $per <= $end; ++$per) { + $principal += self::PPMT($rate, $per, $nper, $pv, 0, $type); + } + + return $principal; + } // function CUMPRINC() + + + /** + * DB + * + * Returns the depreciation of an asset for a specified period using the + * fixed-declining balance method. + * This form of depreciation is used if you want to get a higher depreciation value + * at the beginning of the depreciation (as opposed to linear depreciation). The + * depreciation value is reduced with every depreciation period by the depreciation + * already deducted from the initial cost. + * + * Excel Function: + * DB(cost,salvage,life,period[,month]) + * + * @access public + * @category Financial Functions + * @param float cost Initial cost of the asset. + * @param float salvage Value at the end of the depreciation. + * (Sometimes called the salvage value of the asset) + * @param integer life Number of periods over which the asset is depreciated. + * (Sometimes called the useful life of the asset) + * @param integer period The period for which you want to calculate the + * depreciation. Period must use the same units as life. + * @param integer month Number of months in the first year. If month is omitted, + * it defaults to 12. + * @return float + */ + public static function DB($cost, $salvage, $life, $period, $month=12) { + $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost); + $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage); + $life = PHPExcel_Calculation_Functions::flattenSingleValue($life); + $period = PHPExcel_Calculation_Functions::flattenSingleValue($period); + $month = PHPExcel_Calculation_Functions::flattenSingleValue($month); + + // Validate + if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life)) && (is_numeric($period)) && (is_numeric($month))) { + $cost = (float) $cost; + $salvage = (float) $salvage; + $life = (int) $life; + $period = (int) $period; + $month = (int) $month; + if ($cost == 0) { + return 0.0; + } elseif (($cost < 0) || (($salvage / $cost) < 0) || ($life <= 0) || ($period < 1) || ($month < 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + // Set Fixed Depreciation Rate + $fixedDepreciationRate = 1 - pow(($salvage / $cost), (1 / $life)); + $fixedDepreciationRate = round($fixedDepreciationRate, 3); + + // Loop through each period calculating the depreciation + $previousDepreciation = 0; + for ($per = 1; $per <= $period; ++$per) { + if ($per == 1) { + $depreciation = $cost * $fixedDepreciationRate * $month / 12; + } elseif ($per == ($life + 1)) { + $depreciation = ($cost - $previousDepreciation) * $fixedDepreciationRate * (12 - $month) / 12; + } else { + $depreciation = ($cost - $previousDepreciation) * $fixedDepreciationRate; + } + $previousDepreciation += $depreciation; + } + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $depreciation = round($depreciation,2); + } + return $depreciation; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function DB() + + + /** + * DDB + * + * Returns the depreciation of an asset for a specified period using the + * double-declining balance method or some other method you specify. + * + * Excel Function: + * DDB(cost,salvage,life,period[,factor]) + * + * @access public + * @category Financial Functions + * @param float cost Initial cost of the asset. + * @param float salvage Value at the end of the depreciation. + * (Sometimes called the salvage value of the asset) + * @param integer life Number of periods over which the asset is depreciated. + * (Sometimes called the useful life of the asset) + * @param integer period The period for which you want to calculate the + * depreciation. Period must use the same units as life. + * @param float factor The rate at which the balance declines. + * If factor is omitted, it is assumed to be 2 (the + * double-declining balance method). + * @return float + */ + public static function DDB($cost, $salvage, $life, $period, $factor=2.0) { + $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost); + $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage); + $life = PHPExcel_Calculation_Functions::flattenSingleValue($life); + $period = PHPExcel_Calculation_Functions::flattenSingleValue($period); + $factor = PHPExcel_Calculation_Functions::flattenSingleValue($factor); + + // Validate + if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life)) && (is_numeric($period)) && (is_numeric($factor))) { + $cost = (float) $cost; + $salvage = (float) $salvage; + $life = (int) $life; + $period = (int) $period; + $factor = (float) $factor; + if (($cost <= 0) || (($salvage / $cost) < 0) || ($life <= 0) || ($period < 1) || ($factor <= 0.0) || ($period > $life)) { + return PHPExcel_Calculation_Functions::NaN(); + } + // Set Fixed Depreciation Rate + $fixedDepreciationRate = 1 - pow(($salvage / $cost), (1 / $life)); + $fixedDepreciationRate = round($fixedDepreciationRate, 3); + + // Loop through each period calculating the depreciation + $previousDepreciation = 0; + for ($per = 1; $per <= $period; ++$per) { + $depreciation = min( ($cost - $previousDepreciation) * ($factor / $life), ($cost - $salvage - $previousDepreciation) ); + $previousDepreciation += $depreciation; + } + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + $depreciation = round($depreciation,2); + } + return $depreciation; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function DDB() + + + /** + * DISC + * + * Returns the discount rate for a security. + * + * Excel Function: + * DISC(settlement,maturity,price,redemption[,basis]) + * + * @access public + * @category Financial Functions + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue + * date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param integer price The security's price per $100 face value. + * @param integer redemption The security's redemption value per $100 face value. + * @param integer basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function DISC($settlement, $maturity, $price, $redemption, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $price = PHPExcel_Calculation_Functions::flattenSingleValue($price); + $redemption = PHPExcel_Calculation_Functions::flattenSingleValue($redemption); + $basis = PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if ((is_numeric($price)) && (is_numeric($redemption)) && (is_numeric($basis))) { + $price = (float) $price; + $redemption = (float) $redemption; + $basis = (int) $basis; + if (($price <= 0) || ($redemption <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity, $basis); + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + + return ((1 - $price / $redemption) / $daysBetweenSettlementAndMaturity); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function DISC() + + + /** + * DOLLARDE + * + * Converts a dollar price expressed as an integer part and a fraction + * part into a dollar price expressed as a decimal number. + * Fractional dollar numbers are sometimes used for security prices. + * + * Excel Function: + * DOLLARDE(fractional_dollar,fraction) + * + * @access public + * @category Financial Functions + * @param float $fractional_dollar Fractional Dollar + * @param integer $fraction Fraction + * @return float + */ + public static function DOLLARDE($fractional_dollar = Null, $fraction = 0) { + $fractional_dollar = PHPExcel_Calculation_Functions::flattenSingleValue($fractional_dollar); + $fraction = (int)PHPExcel_Calculation_Functions::flattenSingleValue($fraction); + + // Validate parameters + if (is_null($fractional_dollar) || $fraction < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($fraction == 0) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $dollars = floor($fractional_dollar); + $cents = fmod($fractional_dollar,1); + $cents /= $fraction; + $cents *= pow(10,ceil(log10($fraction))); + return $dollars + $cents; + } // function DOLLARDE() + + + /** + * DOLLARFR + * + * Converts a dollar price expressed as a decimal number into a dollar price + * expressed as a fraction. + * Fractional dollar numbers are sometimes used for security prices. + * + * Excel Function: + * DOLLARFR(decimal_dollar,fraction) + * + * @access public + * @category Financial Functions + * @param float $decimal_dollar Decimal Dollar + * @param integer $fraction Fraction + * @return float + */ + public static function DOLLARFR($decimal_dollar = Null, $fraction = 0) { + $decimal_dollar = PHPExcel_Calculation_Functions::flattenSingleValue($decimal_dollar); + $fraction = (int)PHPExcel_Calculation_Functions::flattenSingleValue($fraction); + + // Validate parameters + if (is_null($decimal_dollar) || $fraction < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($fraction == 0) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $dollars = floor($decimal_dollar); + $cents = fmod($decimal_dollar,1); + $cents *= $fraction; + $cents *= pow(10,-ceil(log10($fraction))); + return $dollars + $cents; + } // function DOLLARFR() + + + /** + * EFFECT + * + * Returns the effective interest rate given the nominal rate and the number of + * compounding payments per year. + * + * Excel Function: + * EFFECT(nominal_rate,npery) + * + * @access public + * @category Financial Functions + * @param float $nominal_rate Nominal interest rate + * @param integer $npery Number of compounding payments per year + * @return float + */ + public static function EFFECT($nominal_rate = 0, $npery = 0) { + $nominal_rate = PHPExcel_Calculation_Functions::flattenSingleValue($nominal_rate); + $npery = (int)PHPExcel_Calculation_Functions::flattenSingleValue($npery); + + // Validate parameters + if ($nominal_rate <= 0 || $npery < 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + + return pow((1 + $nominal_rate / $npery), $npery) - 1; + } // function EFFECT() + + + /** + * FV + * + * Returns the Future Value of a cash flow with constant payments and interest rate (annuities). + * + * Excel Function: + * FV(rate,nper,pmt[,pv[,type]]) + * + * @access public + * @category Financial Functions + * @param float $rate The interest rate per period + * @param int $nper Total number of payment periods in an annuity + * @param float $pmt The payment made each period: it cannot change over the + * life of the annuity. Typically, pmt contains principal + * and interest but no other fees or taxes. + * @param float $pv Present Value, or the lump-sum amount that a series of + * future payments is worth right now. + * @param integer $type A number 0 or 1 and indicates when payments are due: + * 0 or omitted At the end of the period. + * 1 At the beginning of the period. + * @return float + */ + public static function FV($rate = 0, $nper = 0, $pmt = 0, $pv = 0, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $nper = PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pmt = PHPExcel_Calculation_Functions::flattenSingleValue($pmt); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $type = PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Calculate + if (!is_null($rate) && $rate != 0) { + return -$pv * pow(1 + $rate, $nper) - $pmt * (1 + $rate * $type) * (pow(1 + $rate, $nper) - 1) / $rate; + } else { + return -$pv - $pmt * $nper; + } + } // function FV() + + + /** + * FVSCHEDULE + * + * Returns the future value of an initial principal after applying a series of compound interest rates. + * Use FVSCHEDULE to calculate the future value of an investment with a variable or adjustable rate. + * + * Excel Function: + * FVSCHEDULE(principal,schedule) + * + * @param float $principal The present value. + * @param float[] $schedule An array of interest rates to apply. + * @return float + */ + public static function FVSCHEDULE($principal, $schedule) { + $principal = PHPExcel_Calculation_Functions::flattenSingleValue($principal); + $schedule = PHPExcel_Calculation_Functions::flattenArray($schedule); + + foreach($schedule as $rate) { + $principal *= 1 + $rate; + } + + return $principal; + } // function FVSCHEDULE() + + + /** + * INTRATE + * + * Returns the interest rate for a fully invested security. + * + * Excel Function: + * INTRATE(settlement,maturity,investment,redemption[,basis]) + * + * @param mixed $settlement The security's settlement date. + * The security settlement date is the date after the issue date when the security is traded to the buyer. + * @param mixed $maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param integer $investment The amount invested in the security. + * @param integer $redemption The amount to be received at maturity. + * @param integer $basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function INTRATE($settlement, $maturity, $investment, $redemption, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $investment = PHPExcel_Calculation_Functions::flattenSingleValue($investment); + $redemption = PHPExcel_Calculation_Functions::flattenSingleValue($redemption); + $basis = PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if ((is_numeric($investment)) && (is_numeric($redemption)) && (is_numeric($basis))) { + $investment = (float) $investment; + $redemption = (float) $redemption; + $basis = (int) $basis; + if (($investment <= 0) || ($redemption <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity, $basis); + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + + return (($redemption / $investment) - 1) / ($daysBetweenSettlementAndMaturity); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function INTRATE() + + + /** + * IPMT + * + * Returns the interest payment for a given period for an investment based on periodic, constant payments and a constant interest rate. + * + * Excel Function: + * IPMT(rate,per,nper,pv[,fv][,type]) + * + * @param float $rate Interest rate per period + * @param int $per Period for which we want to find the interest + * @param int $nper Number of periods + * @param float $pv Present Value + * @param float $fv Future Value + * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period + * @return float + */ + public static function IPMT($rate, $per, $nper, $pv, $fv = 0, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $per = (int) PHPExcel_Calculation_Functions::flattenSingleValue($per); + $nper = (int) PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $fv = PHPExcel_Calculation_Functions::flattenSingleValue($fv); + $type = (int) PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($per <= 0 || $per > $nper) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Calculate + $interestAndPrincipal = self::_interestAndPrincipal($rate, $per, $nper, $pv, $fv, $type); + return $interestAndPrincipal[0]; + } // function IPMT() + + /** + * IRR + * + * Returns the internal rate of return for a series of cash flows represented by the numbers in values. + * These cash flows do not have to be even, as they would be for an annuity. However, the cash flows must occur + * at regular intervals, such as monthly or annually. The internal rate of return is the interest rate received + * for an investment consisting of payments (negative values) and income (positive values) that occur at regular + * periods. + * + * Excel Function: + * IRR(values[,guess]) + * + * @param float[] $values An array or a reference to cells that contain numbers for which you want + * to calculate the internal rate of return. + * Values must contain at least one positive value and one negative value to + * calculate the internal rate of return. + * @param float $guess A number that you guess is close to the result of IRR + * @return float + */ + public static function IRR($values, $guess = 0.1) { + if (!is_array($values)) return PHPExcel_Calculation_Functions::VALUE(); + $values = PHPExcel_Calculation_Functions::flattenArray($values); + $guess = PHPExcel_Calculation_Functions::flattenSingleValue($guess); + + // create an initial range, with a root somewhere between 0 and guess + $x1 = 0.0; + $x2 = $guess; + $f1 = self::NPV($x1, $values); + $f2 = self::NPV($x2, $values); + for ($i = 0; $i < FINANCIAL_MAX_ITERATIONS; ++$i) { + if (($f1 * $f2) < 0.0) break; + if (abs($f1) < abs($f2)) { + $f1 = self::NPV($x1 += 1.6 * ($x1 - $x2), $values); + } else { + $f2 = self::NPV($x2 += 1.6 * ($x2 - $x1), $values); + } + } + if (($f1 * $f2) > 0.0) return PHPExcel_Calculation_Functions::VALUE(); + + $f = self::NPV($x1, $values); + if ($f < 0.0) { + $rtb = $x1; + $dx = $x2 - $x1; + } else { + $rtb = $x2; + $dx = $x1 - $x2; + } + + for ($i = 0; $i < FINANCIAL_MAX_ITERATIONS; ++$i) { + $dx *= 0.5; + $x_mid = $rtb + $dx; + $f_mid = self::NPV($x_mid, $values); + if ($f_mid <= 0.0) + $rtb = $x_mid; + if ((abs($f_mid) < FINANCIAL_PRECISION) || (abs($dx) < FINANCIAL_PRECISION)) + return $x_mid; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function IRR() + + + /** + * ISPMT + * + * Returns the interest payment for an investment based on an interest rate and a constant payment schedule. + * + * Excel Function: + * =ISPMT(interest_rate, period, number_payments, PV) + * + * interest_rate is the interest rate for the investment + * + * period is the period to calculate the interest rate. It must be betweeen 1 and number_payments. + * + * number_payments is the number of payments for the annuity + * + * PV is the loan amount or present value of the payments + */ + public static function ISPMT() { + // Return value + $returnValue = 0; + + // Get the parameters + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + $interestRate = array_shift($aArgs); + $period = array_shift($aArgs); + $numberPeriods = array_shift($aArgs); + $principleRemaining = array_shift($aArgs); + + // Calculate + $principlePayment = ($principleRemaining * 1.0) / ($numberPeriods * 1.0); + for($i=0; $i <= $period; ++$i) { + $returnValue = $interestRate * $principleRemaining * -1; + $principleRemaining -= $principlePayment; + // principle needs to be 0 after the last payment, don't let floating point screw it up + if($i == $numberPeriods) { + $returnValue = 0; + } + } + return($returnValue); + } // function ISPMT() + + + /** + * MIRR + * + * Returns the modified internal rate of return for a series of periodic cash flows. MIRR considers both + * the cost of the investment and the interest received on reinvestment of cash. + * + * Excel Function: + * MIRR(values,finance_rate, reinvestment_rate) + * + * @param float[] $values An array or a reference to cells that contain a series of payments and + * income occurring at regular intervals. + * Payments are negative value, income is positive values. + * @param float $finance_rate The interest rate you pay on the money used in the cash flows + * @param float $reinvestment_rate The interest rate you receive on the cash flows as you reinvest them + * @return float + */ + public static function MIRR($values, $finance_rate, $reinvestment_rate) { + if (!is_array($values)) return PHPExcel_Calculation_Functions::VALUE(); + $values = PHPExcel_Calculation_Functions::flattenArray($values); + $finance_rate = PHPExcel_Calculation_Functions::flattenSingleValue($finance_rate); + $reinvestment_rate = PHPExcel_Calculation_Functions::flattenSingleValue($reinvestment_rate); + $n = count($values); + + $rr = 1.0 + $reinvestment_rate; + $fr = 1.0 + $finance_rate; + + $npv_pos = $npv_neg = 0.0; + foreach($values as $i => $v) { + if ($v >= 0) { + $npv_pos += $v / pow($rr, $i); + } else { + $npv_neg += $v / pow($fr, $i); + } + } + + if (($npv_neg == 0) || ($npv_pos == 0) || ($reinvestment_rate <= -1)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + $mirr = pow((-$npv_pos * pow($rr, $n)) + / ($npv_neg * ($rr)), (1.0 / ($n - 1))) - 1.0; + + return (is_finite($mirr) ? $mirr : PHPExcel_Calculation_Functions::VALUE()); + } // function MIRR() + + + /** + * NOMINAL + * + * Returns the nominal interest rate given the effective rate and the number of compounding payments per year. + * + * @param float $effect_rate Effective interest rate + * @param int $npery Number of compounding payments per year + * @return float + */ + public static function NOMINAL($effect_rate = 0, $npery = 0) { + $effect_rate = PHPExcel_Calculation_Functions::flattenSingleValue($effect_rate); + $npery = (int)PHPExcel_Calculation_Functions::flattenSingleValue($npery); + + // Validate parameters + if ($effect_rate <= 0 || $npery < 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Calculate + return $npery * (pow($effect_rate + 1, 1 / $npery) - 1); + } // function NOMINAL() + + + /** + * NPER + * + * Returns the number of periods for a cash flow with constant periodic payments (annuities), and interest rate. + * + * @param float $rate Interest rate per period + * @param int $pmt Periodic payment (annuity) + * @param float $pv Present Value + * @param float $fv Future Value + * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period + * @return float + */ + public static function NPER($rate = 0, $pmt = 0, $pv = 0, $fv = 0, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $pmt = PHPExcel_Calculation_Functions::flattenSingleValue($pmt); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $fv = PHPExcel_Calculation_Functions::flattenSingleValue($fv); + $type = PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Calculate + if (!is_null($rate) && $rate != 0) { + if ($pmt == 0 && $pv == 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return log(($pmt * (1 + $rate * $type) / $rate - $fv) / ($pv + $pmt * (1 + $rate * $type) / $rate)) / log(1 + $rate); + } else { + if ($pmt == 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return (-$pv -$fv) / $pmt; + } + } // function NPER() + + /** + * NPV + * + * Returns the Net Present Value of a cash flow series given a discount rate. + * + * @return float + */ + public static function NPV() { + // Return value + $returnValue = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + // Calculate + $rate = array_shift($aArgs); + for ($i = 1; $i <= count($aArgs); ++$i) { + // Is it a numeric value? + if (is_numeric($aArgs[$i - 1])) { + $returnValue += $aArgs[$i - 1] / pow(1 + $rate, $i); + } + } + + // Return + return $returnValue; + } // function NPV() + + /** + * PMT + * + * Returns the constant payment (annuity) for a cash flow with a constant interest rate. + * + * @param float $rate Interest rate per period + * @param int $nper Number of periods + * @param float $pv Present Value + * @param float $fv Future Value + * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period + * @return float + */ + public static function PMT($rate = 0, $nper = 0, $pv = 0, $fv = 0, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $nper = PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $fv = PHPExcel_Calculation_Functions::flattenSingleValue($fv); + $type = PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Calculate + if (!is_null($rate) && $rate != 0) { + return (-$fv - $pv * pow(1 + $rate, $nper)) / (1 + $rate * $type) / ((pow(1 + $rate, $nper) - 1) / $rate); + } else { + return (-$pv - $fv) / $nper; + } + } // function PMT() + + + /** + * PPMT + * + * Returns the interest payment for a given period for an investment based on periodic, constant payments and a constant interest rate. + * + * @param float $rate Interest rate per period + * @param int $per Period for which we want to find the interest + * @param int $nper Number of periods + * @param float $pv Present Value + * @param float $fv Future Value + * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period + * @return float + */ + public static function PPMT($rate, $per, $nper, $pv, $fv = 0, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $per = (int) PHPExcel_Calculation_Functions::flattenSingleValue($per); + $nper = (int) PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $fv = PHPExcel_Calculation_Functions::flattenSingleValue($fv); + $type = (int) PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($per <= 0 || $per > $nper) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Calculate + $interestAndPrincipal = self::_interestAndPrincipal($rate, $per, $nper, $pv, $fv, $type); + return $interestAndPrincipal[1]; + } // function PPMT() + + + public static function PRICE($settlement, $maturity, $rate, $yield, $redemption, $frequency, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $rate = (float) PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $yield = (float) PHPExcel_Calculation_Functions::flattenSingleValue($yield); + $redemption = (float) PHPExcel_Calculation_Functions::flattenSingleValue($redemption); + $frequency = (int) PHPExcel_Calculation_Functions::flattenSingleValue($frequency); + $basis = (is_null($basis)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + if (is_string($settlement = PHPExcel_Calculation_DateTime::_getDateValue($settlement))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (($settlement > $maturity) || + (!self::_validFrequency($frequency)) || + (($basis < 0) || ($basis > 4))) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $dsc = self::COUPDAYSNC($settlement, $maturity, $frequency, $basis); + $e = self::COUPDAYS($settlement, $maturity, $frequency, $basis); + $n = self::COUPNUM($settlement, $maturity, $frequency, $basis); + $a = self::COUPDAYBS($settlement, $maturity, $frequency, $basis); + + $baseYF = 1.0 + ($yield / $frequency); + $rfp = 100 * ($rate / $frequency); + $de = $dsc / $e; + + $result = $redemption / pow($baseYF, (--$n + $de)); + for($k = 0; $k <= $n; ++$k) { + $result += $rfp / (pow($baseYF, ($k + $de))); + } + $result -= $rfp * ($a / $e); + + return $result; + } // function PRICE() + + + /** + * PRICEDISC + * + * Returns the price per $100 face value of a discounted security. + * + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param int discount The security's discount rate. + * @param int redemption The security's redemption value per $100 face value. + * @param int basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function PRICEDISC($settlement, $maturity, $discount, $redemption, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $discount = (float) PHPExcel_Calculation_Functions::flattenSingleValue($discount); + $redemption = (float) PHPExcel_Calculation_Functions::flattenSingleValue($redemption); + $basis = (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if ((is_numeric($discount)) && (is_numeric($redemption)) && (is_numeric($basis))) { + if (($discount <= 0) || ($redemption <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity, $basis); + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + + return $redemption * (1 - $discount * $daysBetweenSettlementAndMaturity); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function PRICEDISC() + + + /** + * PRICEMAT + * + * Returns the price per $100 face value of a security that pays interest at maturity. + * + * @param mixed settlement The security's settlement date. + * The security's settlement date is the date after the issue date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed issue The security's issue date. + * @param int rate The security's interest rate at date of issue. + * @param int yield The security's annual yield. + * @param int basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function PRICEMAT($settlement, $maturity, $issue, $rate, $yield, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue); + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $yield = PHPExcel_Calculation_Functions::flattenSingleValue($yield); + $basis = (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if (is_numeric($rate) && is_numeric($yield)) { + if (($rate <= 0) || ($yield <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysPerYear = self::_daysPerYear(PHPExcel_Calculation_DateTime::YEAR($settlement),$basis); + if (!is_numeric($daysPerYear)) { + return $daysPerYear; + } + $daysBetweenIssueAndSettlement = PHPExcel_Calculation_DateTime::YEARFRAC($issue, $settlement, $basis); + if (!is_numeric($daysBetweenIssueAndSettlement)) { + // return date error + return $daysBetweenIssueAndSettlement; + } + $daysBetweenIssueAndSettlement *= $daysPerYear; + $daysBetweenIssueAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($issue, $maturity, $basis); + if (!is_numeric($daysBetweenIssueAndMaturity)) { + // return date error + return $daysBetweenIssueAndMaturity; + } + $daysBetweenIssueAndMaturity *= $daysPerYear; + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity, $basis); + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + $daysBetweenSettlementAndMaturity *= $daysPerYear; + + return ((100 + (($daysBetweenIssueAndMaturity / $daysPerYear) * $rate * 100)) / + (1 + (($daysBetweenSettlementAndMaturity / $daysPerYear) * $yield)) - + (($daysBetweenIssueAndSettlement / $daysPerYear) * $rate * 100)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function PRICEMAT() + + + /** + * PV + * + * Returns the Present Value of a cash flow with constant payments and interest rate (annuities). + * + * @param float $rate Interest rate per period + * @param int $nper Number of periods + * @param float $pmt Periodic payment (annuity) + * @param float $fv Future Value + * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period + * @return float + */ + public static function PV($rate = 0, $nper = 0, $pmt = 0, $fv = 0, $type = 0) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $nper = PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pmt = PHPExcel_Calculation_Functions::flattenSingleValue($pmt); + $fv = PHPExcel_Calculation_Functions::flattenSingleValue($fv); + $type = PHPExcel_Calculation_Functions::flattenSingleValue($type); + + // Validate parameters + if ($type != 0 && $type != 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + + // Calculate + if (!is_null($rate) && $rate != 0) { + return (-$pmt * (1 + $rate * $type) * ((pow(1 + $rate, $nper) - 1) / $rate) - $fv) / pow(1 + $rate, $nper); + } else { + return -$fv - $pmt * $nper; + } + } // function PV() + + + /** + * RATE + * + * Returns the interest rate per period of an annuity. + * RATE is calculated by iteration and can have zero or more solutions. + * If the successive results of RATE do not converge to within 0.0000001 after 20 iterations, + * RATE returns the #NUM! error value. + * + * Excel Function: + * RATE(nper,pmt,pv[,fv[,type[,guess]]]) + * + * @access public + * @category Financial Functions + * @param float nper The total number of payment periods in an annuity. + * @param float pmt The payment made each period and cannot change over the life + * of the annuity. + * Typically, pmt includes principal and interest but no other + * fees or taxes. + * @param float pv The present value - the total amount that a series of future + * payments is worth now. + * @param float fv The future value, or a cash balance you want to attain after + * the last payment is made. If fv is omitted, it is assumed + * to be 0 (the future value of a loan, for example, is 0). + * @param integer type A number 0 or 1 and indicates when payments are due: + * 0 or omitted At the end of the period. + * 1 At the beginning of the period. + * @param float guess Your guess for what the rate will be. + * If you omit guess, it is assumed to be 10 percent. + * @return float + **/ + public static function RATE($nper, $pmt, $pv, $fv = 0.0, $type = 0, $guess = 0.1) { + $nper = (int) PHPExcel_Calculation_Functions::flattenSingleValue($nper); + $pmt = PHPExcel_Calculation_Functions::flattenSingleValue($pmt); + $pv = PHPExcel_Calculation_Functions::flattenSingleValue($pv); + $fv = (is_null($fv)) ? 0.0 : PHPExcel_Calculation_Functions::flattenSingleValue($fv); + $type = (is_null($type)) ? 0 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($type); + $guess = (is_null($guess)) ? 0.1 : PHPExcel_Calculation_Functions::flattenSingleValue($guess); + + $rate = $guess; + if (abs($rate) < FINANCIAL_PRECISION) { + $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv; + } else { + $f = exp($nper * log(1 + $rate)); + $y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv; + } + $y0 = $pv + $pmt * $nper + $fv; + $y1 = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv; + + // find root by secant method + $i = $x0 = 0.0; + $x1 = $rate; + while ((abs($y0 - $y1) > FINANCIAL_PRECISION) && ($i < FINANCIAL_MAX_ITERATIONS)) { + $rate = ($y1 * $x0 - $y0 * $x1) / ($y1 - $y0); + $x0 = $x1; + $x1 = $rate; + if (($nper * abs($pmt)) > ($pv - $fv)) + $x1 = abs($x1); + + if (abs($rate) < FINANCIAL_PRECISION) { + $y = $pv * (1 + $nper * $rate) + $pmt * (1 + $rate * $type) * $nper + $fv; + } else { + $f = exp($nper * log(1 + $rate)); + $y = $pv * $f + $pmt * (1 / $rate + $type) * ($f - 1) + $fv; + } + + $y0 = $y1; + $y1 = $y; + ++$i; + } + return $rate; + } // function RATE() + + + /** + * RECEIVED + * + * Returns the price per $100 face value of a discounted security. + * + * @param mixed settlement The security's settlement date. + * The security settlement date is the date after the issue date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param int investment The amount invested in the security. + * @param int discount The security's discount rate. + * @param int basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function RECEIVED($settlement, $maturity, $investment, $discount, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $investment = (float) PHPExcel_Calculation_Functions::flattenSingleValue($investment); + $discount = (float) PHPExcel_Calculation_Functions::flattenSingleValue($discount); + $basis = (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if ((is_numeric($investment)) && (is_numeric($discount)) && (is_numeric($basis))) { + if (($investment <= 0) || ($discount <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity, $basis); + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + + return $investment / ( 1 - ($discount * $daysBetweenSettlementAndMaturity)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function RECEIVED() + + + /** + * SLN + * + * Returns the straight-line depreciation of an asset for one period + * + * @param cost Initial cost of the asset + * @param salvage Value at the end of the depreciation + * @param life Number of periods over which the asset is depreciated + * @return float + */ + public static function SLN($cost, $salvage, $life) { + $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost); + $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage); + $life = PHPExcel_Calculation_Functions::flattenSingleValue($life); + + // Calculate + if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life))) { + if ($life < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return ($cost - $salvage) / $life; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SLN() + + + /** + * SYD + * + * Returns the sum-of-years' digits depreciation of an asset for a specified period. + * + * @param cost Initial cost of the asset + * @param salvage Value at the end of the depreciation + * @param life Number of periods over which the asset is depreciated + * @param period Period + * @return float + */ + public static function SYD($cost, $salvage, $life, $period) { + $cost = PHPExcel_Calculation_Functions::flattenSingleValue($cost); + $salvage = PHPExcel_Calculation_Functions::flattenSingleValue($salvage); + $life = PHPExcel_Calculation_Functions::flattenSingleValue($life); + $period = PHPExcel_Calculation_Functions::flattenSingleValue($period); + + // Calculate + if ((is_numeric($cost)) && (is_numeric($salvage)) && (is_numeric($life)) && (is_numeric($period))) { + if (($life < 1) || ($period > $life)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return (($cost - $salvage) * ($life - $period + 1) * 2) / ($life * ($life + 1)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SYD() + + + /** + * TBILLEQ + * + * Returns the bond-equivalent yield for a Treasury bill. + * + * @param mixed settlement The Treasury bill's settlement date. + * The Treasury bill's settlement date is the date after the issue date when the Treasury bill is traded to the buyer. + * @param mixed maturity The Treasury bill's maturity date. + * The maturity date is the date when the Treasury bill expires. + * @param int discount The Treasury bill's discount rate. + * @return float + */ + public static function TBILLEQ($settlement, $maturity, $discount) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $discount = PHPExcel_Calculation_Functions::flattenSingleValue($discount); + + // Use TBILLPRICE for validation + $testValue = self::TBILLPRICE($settlement, $maturity, $discount); + if (is_string($testValue)) { + return $testValue; + } + + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + ++$maturity; + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity) * 360; + } else { + $daysBetweenSettlementAndMaturity = (PHPExcel_Calculation_DateTime::_getDateValue($maturity) - PHPExcel_Calculation_DateTime::_getDateValue($settlement)); + } + + return (365 * $discount) / (360 - $discount * $daysBetweenSettlementAndMaturity); + } // function TBILLEQ() + + + /** + * TBILLPRICE + * + * Returns the yield for a Treasury bill. + * + * @param mixed settlement The Treasury bill's settlement date. + * The Treasury bill's settlement date is the date after the issue date when the Treasury bill is traded to the buyer. + * @param mixed maturity The Treasury bill's maturity date. + * The maturity date is the date when the Treasury bill expires. + * @param int discount The Treasury bill's discount rate. + * @return float + */ + public static function TBILLPRICE($settlement, $maturity, $discount) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $discount = PHPExcel_Calculation_Functions::flattenSingleValue($discount); + + if (is_string($maturity = PHPExcel_Calculation_DateTime::_getDateValue($maturity))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // Validate + if (is_numeric($discount)) { + if ($discount <= 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + ++$maturity; + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity) * 360; + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + } else { + $daysBetweenSettlementAndMaturity = (PHPExcel_Calculation_DateTime::_getDateValue($maturity) - PHPExcel_Calculation_DateTime::_getDateValue($settlement)); + } + + if ($daysBetweenSettlementAndMaturity > 360) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $price = 100 * (1 - (($discount * $daysBetweenSettlementAndMaturity) / 360)); + if ($price <= 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return $price; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function TBILLPRICE() + + + /** + * TBILLYIELD + * + * Returns the yield for a Treasury bill. + * + * @param mixed settlement The Treasury bill's settlement date. + * The Treasury bill's settlement date is the date after the issue date when the Treasury bill is traded to the buyer. + * @param mixed maturity The Treasury bill's maturity date. + * The maturity date is the date when the Treasury bill expires. + * @param int price The Treasury bill's price per $100 face value. + * @return float + */ + public static function TBILLYIELD($settlement, $maturity, $price) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $price = PHPExcel_Calculation_Functions::flattenSingleValue($price); + + // Validate + if (is_numeric($price)) { + if ($price <= 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + ++$maturity; + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity) * 360; + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + } else { + $daysBetweenSettlementAndMaturity = (PHPExcel_Calculation_DateTime::_getDateValue($maturity) - PHPExcel_Calculation_DateTime::_getDateValue($settlement)); + } + + if ($daysBetweenSettlementAndMaturity > 360) { + return PHPExcel_Calculation_Functions::NaN(); + } + + return ((100 - $price) / $price) * (360 / $daysBetweenSettlementAndMaturity); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function TBILLYIELD() + + + public static function XIRR($values, $dates, $guess = 0.1) { + if ((!is_array($values)) && (!is_array($dates))) return PHPExcel_Calculation_Functions::VALUE(); + $values = PHPExcel_Calculation_Functions::flattenArray($values); + $dates = PHPExcel_Calculation_Functions::flattenArray($dates); + $guess = PHPExcel_Calculation_Functions::flattenSingleValue($guess); + if (count($values) != count($dates)) return PHPExcel_Calculation_Functions::NaN(); + + // create an initial range, with a root somewhere between 0 and guess + $x1 = 0.0; + $x2 = $guess; + $f1 = self::XNPV($x1, $values, $dates); + $f2 = self::XNPV($x2, $values, $dates); + for ($i = 0; $i < FINANCIAL_MAX_ITERATIONS; ++$i) { + if (($f1 * $f2) < 0.0) break; + if (abs($f1) < abs($f2)) { + $f1 = self::XNPV($x1 += 1.6 * ($x1 - $x2), $values, $dates); + } else { + $f2 = self::XNPV($x2 += 1.6 * ($x2 - $x1), $values, $dates); + } + } + if (($f1 * $f2) > 0.0) return PHPExcel_Calculation_Functions::VALUE(); + + $f = self::XNPV($x1, $values, $dates); + if ($f < 0.0) { + $rtb = $x1; + $dx = $x2 - $x1; + } else { + $rtb = $x2; + $dx = $x1 - $x2; + } + + for ($i = 0; $i < FINANCIAL_MAX_ITERATIONS; ++$i) { + $dx *= 0.5; + $x_mid = $rtb + $dx; + $f_mid = self::XNPV($x_mid, $values, $dates); + if ($f_mid <= 0.0) $rtb = $x_mid; + if ((abs($f_mid) < FINANCIAL_PRECISION) || (abs($dx) < FINANCIAL_PRECISION)) return $x_mid; + } + return PHPExcel_Calculation_Functions::VALUE(); + } + + + /** + * XNPV + * + * Returns the net present value for a schedule of cash flows that is not necessarily periodic. + * To calculate the net present value for a series of cash flows that is periodic, use the NPV function. + * + * Excel Function: + * =XNPV(rate,values,dates) + * + * @param float $rate The discount rate to apply to the cash flows. + * @param array of float $values A series of cash flows that corresponds to a schedule of payments in dates. The first payment is optional and corresponds to a cost or payment that occurs at the beginning of the investment. If the first value is a cost or payment, it must be a negative value. All succeeding payments are discounted based on a 365-day year. The series of values must contain at least one positive value and one negative value. + * @param array of mixed $dates A schedule of payment dates that corresponds to the cash flow payments. The first payment date indicates the beginning of the schedule of payments. All other dates must be later than this date, but they may occur in any order. + * @return float + */ + public static function XNPV($rate, $values, $dates) { + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + if (!is_numeric($rate)) return PHPExcel_Calculation_Functions::VALUE(); + if ((!is_array($values)) || (!is_array($dates))) return PHPExcel_Calculation_Functions::VALUE(); + $values = PHPExcel_Calculation_Functions::flattenArray($values); + $dates = PHPExcel_Calculation_Functions::flattenArray($dates); + $valCount = count($values); + if ($valCount != count($dates)) return PHPExcel_Calculation_Functions::NaN(); + if ((min($values) > 0) || (max($values) < 0)) return PHPExcel_Calculation_Functions::VALUE(); + + $xnpv = 0.0; + for ($i = 0; $i < $valCount; ++$i) { + if (!is_numeric($values[$i])) return PHPExcel_Calculation_Functions::VALUE(); + $xnpv += $values[$i] / pow(1 + $rate, PHPExcel_Calculation_DateTime::DATEDIF($dates[0],$dates[$i],'d') / 365); + } + return (is_finite($xnpv)) ? $xnpv : PHPExcel_Calculation_Functions::VALUE(); + } // function XNPV() + + + /** + * YIELDDISC + * + * Returns the annual yield of a security that pays interest at maturity. + * + * @param mixed settlement The security's settlement date. + * The security's settlement date is the date after the issue date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param int price The security's price per $100 face value. + * @param int redemption The security's redemption value per $100 face value. + * @param int basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function YIELDDISC($settlement, $maturity, $price, $redemption, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $price = PHPExcel_Calculation_Functions::flattenSingleValue($price); + $redemption = PHPExcel_Calculation_Functions::flattenSingleValue($redemption); + $basis = (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if (is_numeric($price) && is_numeric($redemption)) { + if (($price <= 0) || ($redemption <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysPerYear = self::_daysPerYear(PHPExcel_Calculation_DateTime::YEAR($settlement),$basis); + if (!is_numeric($daysPerYear)) { + return $daysPerYear; + } + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity,$basis); + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + $daysBetweenSettlementAndMaturity *= $daysPerYear; + + return (($redemption - $price) / $price) * ($daysPerYear / $daysBetweenSettlementAndMaturity); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function YIELDDISC() + + + /** + * YIELDMAT + * + * Returns the annual yield of a security that pays interest at maturity. + * + * @param mixed settlement The security's settlement date. + * The security's settlement date is the date after the issue date when the security is traded to the buyer. + * @param mixed maturity The security's maturity date. + * The maturity date is the date when the security expires. + * @param mixed issue The security's issue date. + * @param int rate The security's interest rate at date of issue. + * @param int price The security's price per $100 face value. + * @param int basis The type of day count to use. + * 0 or omitted US (NASD) 30/360 + * 1 Actual/actual + * 2 Actual/360 + * 3 Actual/365 + * 4 European 30/360 + * @return float + */ + public static function YIELDMAT($settlement, $maturity, $issue, $rate, $price, $basis=0) { + $settlement = PHPExcel_Calculation_Functions::flattenSingleValue($settlement); + $maturity = PHPExcel_Calculation_Functions::flattenSingleValue($maturity); + $issue = PHPExcel_Calculation_Functions::flattenSingleValue($issue); + $rate = PHPExcel_Calculation_Functions::flattenSingleValue($rate); + $price = PHPExcel_Calculation_Functions::flattenSingleValue($price); + $basis = (int) PHPExcel_Calculation_Functions::flattenSingleValue($basis); + + // Validate + if (is_numeric($rate) && is_numeric($price)) { + if (($rate <= 0) || ($price <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $daysPerYear = self::_daysPerYear(PHPExcel_Calculation_DateTime::YEAR($settlement),$basis); + if (!is_numeric($daysPerYear)) { + return $daysPerYear; + } + $daysBetweenIssueAndSettlement = PHPExcel_Calculation_DateTime::YEARFRAC($issue, $settlement, $basis); + if (!is_numeric($daysBetweenIssueAndSettlement)) { + // return date error + return $daysBetweenIssueAndSettlement; + } + $daysBetweenIssueAndSettlement *= $daysPerYear; + $daysBetweenIssueAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($issue, $maturity, $basis); + if (!is_numeric($daysBetweenIssueAndMaturity)) { + // return date error + return $daysBetweenIssueAndMaturity; + } + $daysBetweenIssueAndMaturity *= $daysPerYear; + $daysBetweenSettlementAndMaturity = PHPExcel_Calculation_DateTime::YEARFRAC($settlement, $maturity, $basis); + if (!is_numeric($daysBetweenSettlementAndMaturity)) { + // return date error + return $daysBetweenSettlementAndMaturity; + } + $daysBetweenSettlementAndMaturity *= $daysPerYear; + + return ((1 + (($daysBetweenIssueAndMaturity / $daysPerYear) * $rate) - (($price / 100) + (($daysBetweenIssueAndSettlement / $daysPerYear) * $rate))) / + (($price / 100) + (($daysBetweenIssueAndSettlement / $daysPerYear) * $rate))) * + ($daysPerYear / $daysBetweenSettlementAndMaturity); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function YIELDMAT() + +} // class PHPExcel_Calculation_Financial diff --git a/PHPExcel/Calculation/FormulaParser.php b/PHPExcel/Calculation/FormulaParser.php new file mode 100644 index 0000000..754a638 --- /dev/null +++ b/PHPExcel/Calculation/FormulaParser.php @@ -0,0 +1,614 @@ +<"; + const OPERATORS_POSTFIX = "%"; + + /** + * Formula + * + * @var string + */ + private $_formula; + + /** + * Tokens + * + * @var PHPExcel_Calculation_FormulaToken[] + */ + private $_tokens = array(); + + /** + * Create a new PHPExcel_Calculation_FormulaParser + * + * @param string $pFormula Formula to parse + * @throws PHPExcel_Calculation_Exception + */ + public function __construct($pFormula = '') + { + // Check parameters + if (is_null($pFormula)) { + throw new PHPExcel_Calculation_Exception("Invalid parameter passed: formula"); + } + + // Initialise values + $this->_formula = trim($pFormula); + // Parse! + $this->_parseToTokens(); + } + + /** + * Get Formula + * + * @return string + */ + public function getFormula() { + return $this->_formula; + } + + /** + * Get Token + * + * @param int $pId Token id + * @return string + * @throws PHPExcel_Calculation_Exception + */ + public function getToken($pId = 0) { + if (isset($this->_tokens[$pId])) { + return $this->_tokens[$pId]; + } else { + throw new PHPExcel_Calculation_Exception("Token with id $pId does not exist."); + } + } + + /** + * Get Token count + * + * @return string + */ + public function getTokenCount() { + return count($this->_tokens); + } + + /** + * Get Tokens + * + * @return PHPExcel_Calculation_FormulaToken[] + */ + public function getTokens() { + return $this->_tokens; + } + + /** + * Parse to tokens + */ + private function _parseToTokens() { + // No attempt is made to verify formulas; assumes formulas are derived from Excel, where + // they can only exist if valid; stack overflows/underflows sunk as nulls without exceptions. + + // Check if the formula has a valid starting = + $formulaLength = strlen($this->_formula); + if ($formulaLength < 2 || $this->_formula{0} != '=') return; + + // Helper variables + $tokens1 = $tokens2 = $stack = array(); + $inString = $inPath = $inRange = $inError = false; + $token = $previousToken = $nextToken = null; + + $index = 1; + $value = ''; + + $ERRORS = array("#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A"); + $COMPARATORS_MULTI = array(">=", "<=", "<>"); + + while ($index < $formulaLength) { + // state-dependent character evaluation (order is important) + + // double-quoted strings + // embeds are doubled + // end marks token + if ($inString) { + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) { + if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE)) { + $value .= PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE; + ++$index; + } else { + $inString = false; + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_TEXT); + $value = ""; + } + } else { + $value .= $this->_formula{$index}; + } + ++$index; + continue; + } + + // single-quoted strings (links) + // embeds are double + // end does not mark a token + if ($inPath) { + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) { + if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE)) { + $value .= PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE; + ++$index; + } else { + $inPath = false; + } + } else { + $value .= $this->_formula{$index}; + } + ++$index; + continue; + } + + // bracked strings (R1C1 range index or linked workbook name) + // no embeds (changed to "()" by Excel) + // end does not mark a token + if ($inRange) { + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_CLOSE) { + $inRange = false; + } + $value .= $this->_formula{$index}; + ++$index; + continue; + } + + // error values + // end marks a token, determined from absolute list of values + if ($inError) { + $value .= $this->_formula{$index}; + ++$index; + if (in_array($value, $ERRORS)) { + $inError = false; + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_ERROR); + $value = ""; + } + continue; + } + + // scientific notation check + if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_SN, $this->_formula{$index}) !== false) { + if (strlen($value) > 1) { + if (preg_match("/^[1-9]{1}(\.[0-9]+)?E{1}$/", $this->_formula{$index}) != 0) { + $value .= $this->_formula{$index}; + ++$index; + continue; + } + } + } + + // independent character evaluation (order not important) + + // establish state-dependent character evaluations + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) { + if (strlen($value > 0)) { // unexpected + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); + $value = ""; + } + $inString = true; + ++$index; + continue; + } + + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) { + if (strlen($value) > 0) { // unexpected + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); + $value = ""; + } + $inPath = true; + ++$index; + continue; + } + + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_OPEN) { + $inRange = true; + $value .= PHPExcel_Calculation_FormulaParser::BRACKET_OPEN; + ++$index; + continue; + } + + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::ERROR_START) { + if (strlen($value) > 0) { // unexpected + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); + $value = ""; + } + $inError = true; + $value .= PHPExcel_Calculation_FormulaParser::ERROR_START; + ++$index; + continue; + } + + // mark start and end of arrays and array rows + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_OPEN) { + if (strlen($value) > 0) { // unexpected + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN); + $value = ""; + } + + $tmp = new PHPExcel_Calculation_FormulaToken("ARRAY", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START); + $tokens1[] = $tmp; + $stack[] = clone $tmp; + + $tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START); + $tokens1[] = $tmp; + $stack[] = clone $tmp; + + ++$index; + continue; + } + + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::SEMICOLON) { + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + + $tmp = array_pop($stack); + $tmp->setValue(""); + $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP); + $tokens1[] = $tmp; + + $tmp = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT); + $tokens1[] = $tmp; + + $tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START); + $tokens1[] = $tmp; + $stack[] = clone $tmp; + + ++$index; + continue; + } + + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_CLOSE) { + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + + $tmp = array_pop($stack); + $tmp->setValue(""); + $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP); + $tokens1[] = $tmp; + + $tmp = array_pop($stack); + $tmp->setValue(""); + $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP); + $tokens1[] = $tmp; + + ++$index; + continue; + } + + // trim white-space + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) { + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + $tokens1[] = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE); + ++$index; + while (($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) && ($index < $formulaLength)) { + ++$index; + } + continue; + } + + // multi-character comparators + if (($index + 2) <= $formulaLength) { + if (in_array(substr($this->_formula, $index, 2), $COMPARATORS_MULTI)) { + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + $tokens1[] = new PHPExcel_Calculation_FormulaToken(substr($this->_formula, $index, 2), PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL); + $index += 2; + continue; + } + } + + // standard infix operators + if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_INFIX, $this->_formula{$index}) !== false) { + if (strlen($value) > 0) { + $tokens1[] =new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + $tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX); + ++$index; + continue; + } + + // standard postfix operators (only one) + if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_POSTFIX, $this->_formula{$index}) !== false) { + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + $tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX); + ++$index; + continue; + } + + // start subexpression or function + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_OPEN) { + if (strlen($value) > 0) { + $tmp = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START); + $tokens1[] = $tmp; + $stack[] = clone $tmp; + $value = ""; + } else { + $tmp = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START); + $tokens1[] = $tmp; + $stack[] = clone $tmp; + } + ++$index; + continue; + } + + // function, subexpression, or array parameters, or operand unions + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::COMMA) { + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + + $tmp = array_pop($stack); + $tmp->setValue(""); + $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP); + $stack[] = $tmp; + + if ($tmp->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_UNION); + } else { + $tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT); + } + ++$index; + continue; + } + + // stop subexpression + if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_CLOSE) { + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + $value = ""; + } + + $tmp = array_pop($stack); + $tmp->setValue(""); + $tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP); + $tokens1[] = $tmp; + + ++$index; + continue; + } + + // token accumulation + $value .= $this->_formula{$index}; + ++$index; + } + + // dump remaining accumulation + if (strlen($value) > 0) { + $tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND); + } + + // move tokenList to new set, excluding unnecessary white-space tokens and converting necessary ones to intersections + $tokenCount = count($tokens1); + for ($i = 0; $i < $tokenCount; ++$i) { + $token = $tokens1[$i]; + if (isset($tokens1[$i - 1])) { + $previousToken = $tokens1[$i - 1]; + } else { + $previousToken = null; + } + if (isset($tokens1[$i + 1])) { + $nextToken = $tokens1[$i + 1]; + } else { + $nextToken = null; + } + + if (is_null($token)) { + continue; + } + + if ($token->getTokenType() != PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE) { + $tokens2[] = $token; + continue; + } + + if (is_null($previousToken)) { + continue; + } + + if (! ( + (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || + (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || + ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) + ) ) { + continue; + } + + if (is_null($nextToken)) { + continue; + } + + if (! ( + (($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) || + (($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) || + ($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) + ) ) { + continue; + } + + $tokens2[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_INTERSECTION); + } + + // move tokens to final list, switching infix "-" operators to prefix when appropriate, switching infix "+" operators + // to noop when appropriate, identifying operand and infix-operator subtypes, and pulling "@" from function names + $this->_tokens = array(); + + $tokenCount = count($tokens2); + for ($i = 0; $i < $tokenCount; ++$i) { + $token = $tokens2[$i]; + if (isset($tokens2[$i - 1])) { + $previousToken = $tokens2[$i - 1]; + } else { + $previousToken = null; + } + if (isset($tokens2[$i + 1])) { + $nextToken = $tokens2[$i + 1]; + } else { + $nextToken = null; + } + + if (is_null($token)) { + continue; + } + + if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "-") { + if ($i == 0) { + $token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX); + } else if ( + (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || + (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || + ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) || + ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) + ) { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH); + } else { + $token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX); + } + + $this->_tokens[] = $token; + continue; + } + + if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "+") { + if ($i == 0) { + continue; + } else if ( + (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || + (($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) || + ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) || + ($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND) + ) { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH); + } else { + continue; + } + + $this->_tokens[] = $token; + continue; + } + + if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) { + if (strpos("<>=", substr($token->getValue(), 0, 1)) !== false) { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL); + } else if ($token->getValue() == "&") { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION); + } else { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH); + } + + $this->_tokens[] = $token; + continue; + } + + if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) { + if (!is_numeric($token->getValue())) { + if (strtoupper($token->getValue()) == "TRUE" || strtoupper($token->getValue() == "FALSE")) { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL); + } else { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_RANGE); + } + } else { + $token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER); + } + + $this->_tokens[] = $token; + continue; + } + + if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) { + if (strlen($token->getValue() > 0)) { + if (substr($token->getValue(), 0, 1) == "@") { + $token->setValue(substr($token->getValue(), 1)); + } + } + } + + $this->_tokens[] = $token; + } + } +} diff --git a/PHPExcel/Calculation/FormulaToken.php b/PHPExcel/Calculation/FormulaToken.php new file mode 100644 index 0000000..fd5e2e5 --- /dev/null +++ b/PHPExcel/Calculation/FormulaToken.php @@ -0,0 +1,176 @@ +_value = $pValue; + $this->_tokenType = $pTokenType; + $this->_tokenSubType = $pTokenSubType; + } + + /** + * Get Value + * + * @return string + */ + public function getValue() { + return $this->_value; + } + + /** + * Set Value + * + * @param string $value + */ + public function setValue($value) { + $this->_value = $value; + } + + /** + * Get Token Type (represented by TOKEN_TYPE_*) + * + * @return string + */ + public function getTokenType() { + return $this->_tokenType; + } + + /** + * Set Token Type + * + * @param string $value + */ + public function setTokenType($value = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN) { + $this->_tokenType = $value; + } + + /** + * Get Token SubType (represented by TOKEN_SUBTYPE_*) + * + * @return string + */ + public function getTokenSubType() { + return $this->_tokenSubType; + } + + /** + * Set Token SubType + * + * @param string $value + */ + public function setTokenSubType($value = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) { + $this->_tokenSubType = $value; + } +} diff --git a/PHPExcel/Calculation/Function.php b/PHPExcel/Calculation/Function.php new file mode 100644 index 0000000..7299834 --- /dev/null +++ b/PHPExcel/Calculation/Function.php @@ -0,0 +1,149 @@ +_category = $pCategory; + $this->_excelName = $pExcelName; + $this->_phpExcelName = $pPHPExcelName; + } else { + throw new PHPExcel_Calculation_Exception("Invalid parameters passed."); + } + } + + /** + * Get Category (represented by CATEGORY_*) + * + * @return string + */ + public function getCategory() { + return $this->_category; + } + + /** + * Set Category (represented by CATEGORY_*) + * + * @param string $value + * @throws PHPExcel_Calculation_Exception + */ + public function setCategory($value = null) { + if (!is_null($value)) { + $this->_category = $value; + } else { + throw new PHPExcel_Calculation_Exception("Invalid parameter passed."); + } + } + + /** + * Get Excel name + * + * @return string + */ + public function getExcelName() { + return $this->_excelName; + } + + /** + * Set Excel name + * + * @param string $value + */ + public function setExcelName($value) { + $this->_excelName = $value; + } + + /** + * Get PHPExcel name + * + * @return string + */ + public function getPHPExcelName() { + return $this->_phpExcelName; + } + + /** + * Set PHPExcel name + * + * @param string $value + */ + public function setPHPExcelName($value) { + $this->_phpExcelName = $value; + } +} diff --git a/PHPExcel/Calculation/Functions.php b/PHPExcel/Calculation/Functions.php new file mode 100644 index 0000000..71bfa19 --- /dev/null +++ b/PHPExcel/Calculation/Functions.php @@ -0,0 +1,726 @@ + '#NULL!', + 'divisionbyzero' => '#DIV/0!', + 'value' => '#VALUE!', + 'reference' => '#REF!', + 'name' => '#NAME?', + 'num' => '#NUM!', + 'na' => '#N/A', + 'gettingdata' => '#GETTING_DATA' + ); + + + /** + * Set the Compatibility Mode + * + * @access public + * @category Function Configuration + * @param string $compatibilityMode Compatibility Mode + * Permitted values are: + * PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL 'Excel' + * PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric' + * PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc' + * @return boolean (Success or Failure) + */ + public static function setCompatibilityMode($compatibilityMode) { + if (($compatibilityMode == self::COMPATIBILITY_EXCEL) || + ($compatibilityMode == self::COMPATIBILITY_GNUMERIC) || + ($compatibilityMode == self::COMPATIBILITY_OPENOFFICE)) { + self::$compatibilityMode = $compatibilityMode; + return True; + } + return False; + } // function setCompatibilityMode() + + + /** + * Return the current Compatibility Mode + * + * @access public + * @category Function Configuration + * @return string Compatibility Mode + * Possible Return values are: + * PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL 'Excel' + * PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric' + * PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc' + */ + public static function getCompatibilityMode() { + return self::$compatibilityMode; + } // function getCompatibilityMode() + + + /** + * Set the Return Date Format used by functions that return a date/time (Excel, PHP Serialized Numeric or PHP Object) + * + * @access public + * @category Function Configuration + * @param string $returnDateType Return Date Format + * Permitted values are: + * PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC 'P' + * PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O' + * PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E' + * @return boolean Success or failure + */ + public static function setReturnDateType($returnDateType) { + if (($returnDateType == self::RETURNDATE_PHP_NUMERIC) || + ($returnDateType == self::RETURNDATE_PHP_OBJECT) || + ($returnDateType == self::RETURNDATE_EXCEL)) { + self::$ReturnDateType = $returnDateType; + return True; + } + return False; + } // function setReturnDateType() + + + /** + * Return the current Return Date Format for functions that return a date/time (Excel, PHP Serialized Numeric or PHP Object) + * + * @access public + * @category Function Configuration + * @return string Return Date Format + * Possible Return values are: + * PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC 'P' + * PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O' + * PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E' + */ + public static function getReturnDateType() { + return self::$ReturnDateType; + } // function getReturnDateType() + + + /** + * DUMMY + * + * @access public + * @category Error Returns + * @return string #Not Yet Implemented + */ + public static function DUMMY() { + return '#Not Yet Implemented'; + } // function DUMMY() + + + /** + * DIV0 + * + * @access public + * @category Error Returns + * @return string #Not Yet Implemented + */ + public static function DIV0() { + return self::$_errorCodes['divisionbyzero']; + } // function DIV0() + + + /** + * NA + * + * Excel Function: + * =NA() + * + * Returns the error value #N/A + * #N/A is the error value that means "no value is available." + * + * @access public + * @category Logical Functions + * @return string #N/A! + */ + public static function NA() { + return self::$_errorCodes['na']; + } // function NA() + + + /** + * NaN + * + * Returns the error value #NUM! + * + * @access public + * @category Error Returns + * @return string #NUM! + */ + public static function NaN() { + return self::$_errorCodes['num']; + } // function NaN() + + + /** + * NAME + * + * Returns the error value #NAME? + * + * @access public + * @category Error Returns + * @return string #NAME? + */ + public static function NAME() { + return self::$_errorCodes['name']; + } // function NAME() + + + /** + * REF + * + * Returns the error value #REF! + * + * @access public + * @category Error Returns + * @return string #REF! + */ + public static function REF() { + return self::$_errorCodes['reference']; + } // function REF() + + + /** + * NULL + * + * Returns the error value #NULL! + * + * @access public + * @category Error Returns + * @return string #NULL! + */ + public static function NULL() { + return self::$_errorCodes['null']; + } // function NULL() + + + /** + * VALUE + * + * Returns the error value #VALUE! + * + * @access public + * @category Error Returns + * @return string #VALUE! + */ + public static function VALUE() { + return self::$_errorCodes['value']; + } // function VALUE() + + + public static function isMatrixValue($idx) { + return ((substr_count($idx,'.') <= 1) || (preg_match('/\.[A-Z]/',$idx) > 0)); + } + + + public static function isValue($idx) { + return (substr_count($idx,'.') == 0); + } + + + public static function isCellValue($idx) { + return (substr_count($idx,'.') > 1); + } + + + public static function _ifCondition($condition) { + $condition = PHPExcel_Calculation_Functions::flattenSingleValue($condition); + if (!isset($condition{0})) + $condition = '=""'; + if (!in_array($condition{0},array('>', '<', '='))) { + if (!is_numeric($condition)) { $condition = PHPExcel_Calculation::_wrapResult(strtoupper($condition)); } + return '='.$condition; + } else { + preg_match('/([<>=]+)(.*)/',$condition,$matches); + list(,$operator,$operand) = $matches; + + if (!is_numeric($operand)) { + $operand = str_replace('"', '""', $operand); + $operand = PHPExcel_Calculation::_wrapResult(strtoupper($operand)); + } + + return $operator.$operand; + } + } // function _ifCondition() + + + /** + * ERROR_TYPE + * + * @param mixed $value Value to check + * @return boolean + */ + public static function ERROR_TYPE($value = '') { + $value = self::flattenSingleValue($value); + + $i = 1; + foreach(self::$_errorCodes as $errorCode) { + if ($value === $errorCode) { + return $i; + } + ++$i; + } + return self::NA(); + } // function ERROR_TYPE() + + + /** + * IS_BLANK + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_BLANK($value = NULL) { + if (!is_null($value)) { + $value = self::flattenSingleValue($value); + } + + return is_null($value); + } // function IS_BLANK() + + + /** + * IS_ERR + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_ERR($value = '') { + $value = self::flattenSingleValue($value); + + return self::IS_ERROR($value) && (!self::IS_NA($value)); + } // function IS_ERR() + + + /** + * IS_ERROR + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_ERROR($value = '') { + $value = self::flattenSingleValue($value); + + if (!is_string($value)) + return false; + return in_array($value, array_values(self::$_errorCodes)); + } // function IS_ERROR() + + + /** + * IS_NA + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_NA($value = '') { + $value = self::flattenSingleValue($value); + + return ($value === self::NA()); + } // function IS_NA() + + + /** + * IS_EVEN + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_EVEN($value = NULL) { + $value = self::flattenSingleValue($value); + + if ($value === NULL) + return self::NAME(); + if ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) + return self::VALUE(); + return ($value % 2 == 0); + } // function IS_EVEN() + + + /** + * IS_ODD + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_ODD($value = NULL) { + $value = self::flattenSingleValue($value); + + if ($value === NULL) + return self::NAME(); + if ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value)))) + return self::VALUE(); + return (abs($value) % 2 == 1); + } // function IS_ODD() + + + /** + * IS_NUMBER + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_NUMBER($value = NULL) { + $value = self::flattenSingleValue($value); + + if (is_string($value)) { + return False; + } + return is_numeric($value); + } // function IS_NUMBER() + + + /** + * IS_LOGICAL + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_LOGICAL($value = NULL) { + $value = self::flattenSingleValue($value); + + return is_bool($value); + } // function IS_LOGICAL() + + + /** + * IS_TEXT + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_TEXT($value = NULL) { + $value = self::flattenSingleValue($value); + + return (is_string($value) && !self::IS_ERROR($value)); + } // function IS_TEXT() + + + /** + * IS_NONTEXT + * + * @param mixed $value Value to check + * @return boolean + */ + public static function IS_NONTEXT($value = NULL) { + return !self::IS_TEXT($value); + } // function IS_NONTEXT() + + + /** + * VERSION + * + * @return string Version information + */ + public static function VERSION() { + return 'PHPExcel 1.8.0, 2014-03-02'; + } // function VERSION() + + + /** + * N + * + * Returns a value converted to a number + * + * @param value The value you want converted + * @return number N converts values listed in the following table + * If value is or refers to N returns + * A number That number + * A date The serial number of that date + * TRUE 1 + * FALSE 0 + * An error value The error value + * Anything else 0 + */ + public static function N($value = NULL) { + while (is_array($value)) { + $value = array_shift($value); + } + + switch (gettype($value)) { + case 'double' : + case 'float' : + case 'integer' : + return $value; + break; + case 'boolean' : + return (integer) $value; + break; + case 'string' : + // Errors + if ((strlen($value) > 0) && ($value{0} == '#')) { + return $value; + } + break; + } + return 0; + } // function N() + + + /** + * TYPE + * + * Returns a number that identifies the type of a value + * + * @param value The value you want tested + * @return number N converts values listed in the following table + * If value is or refers to N returns + * A number 1 + * Text 2 + * Logical Value 4 + * An error value 16 + * Array or Matrix 64 + */ + public static function TYPE($value = NULL) { + $value = self::flattenArrayIndexed($value); + if (is_array($value) && (count($value) > 1)) { + $a = array_keys($value); + $a = array_pop($a); + // Range of cells is an error + if (self::isCellValue($a)) { + return 16; + // Test for Matrix + } elseif (self::isMatrixValue($a)) { + return 64; + } + } elseif(empty($value)) { + // Empty Cell + return 1; + } + $value = self::flattenSingleValue($value); + + if (($value === NULL) || (is_float($value)) || (is_int($value))) { + return 1; + } elseif(is_bool($value)) { + return 4; + } elseif(is_array($value)) { + return 64; + break; + } elseif(is_string($value)) { + // Errors + if ((strlen($value) > 0) && ($value{0} == '#')) { + return 16; + } + return 2; + } + return 0; + } // function TYPE() + + + /** + * Convert a multi-dimensional array to a simple 1-dimensional array + * + * @param array $array Array to be flattened + * @return array Flattened array + */ + public static function flattenArray($array) { + if (!is_array($array)) { + return (array) $array; + } + + $arrayValues = array(); + foreach ($array as $value) { + if (is_array($value)) { + foreach ($value as $val) { + if (is_array($val)) { + foreach ($val as $v) { + $arrayValues[] = $v; + } + } else { + $arrayValues[] = $val; + } + } + } else { + $arrayValues[] = $value; + } + } + + return $arrayValues; + } // function flattenArray() + + + /** + * Convert a multi-dimensional array to a simple 1-dimensional array, but retain an element of indexing + * + * @param array $array Array to be flattened + * @return array Flattened array + */ + public static function flattenArrayIndexed($array) { + if (!is_array($array)) { + return (array) $array; + } + + $arrayValues = array(); + foreach ($array as $k1 => $value) { + if (is_array($value)) { + foreach ($value as $k2 => $val) { + if (is_array($val)) { + foreach ($val as $k3 => $v) { + $arrayValues[$k1.'.'.$k2.'.'.$k3] = $v; + } + } else { + $arrayValues[$k1.'.'.$k2] = $val; + } + } + } else { + $arrayValues[$k1] = $value; + } + } + + return $arrayValues; + } // function flattenArrayIndexed() + + + /** + * Convert an array to a single scalar value by extracting the first element + * + * @param mixed $value Array or scalar value + * @return mixed + */ + public static function flattenSingleValue($value = '') { + while (is_array($value)) { + $value = array_pop($value); + } + + return $value; + } // function flattenSingleValue() + +} // class PHPExcel_Calculation_Functions + + +// +// There are a few mathematical functions that aren't available on all versions of PHP for all platforms +// These functions aren't available in Windows implementations of PHP prior to version 5.3.0 +// So we test if they do exist for this version of PHP/operating platform; and if not we create them +// +if (!function_exists('acosh')) { + function acosh($x) { + return 2 * log(sqrt(($x + 1) / 2) + sqrt(($x - 1) / 2)); + } // function acosh() +} + +if (!function_exists('asinh')) { + function asinh($x) { + return log($x + sqrt(1 + $x * $x)); + } // function asinh() +} + +if (!function_exists('atanh')) { + function atanh($x) { + return (log(1 + $x) - log(1 - $x)) / 2; + } // function atanh() +} + + +// +// Strangely, PHP doesn't have a mb_str_replace multibyte function +// As we'll only ever use this function with UTF-8 characters, we can simply "hard-code" the character set +// +if ((!function_exists('mb_str_replace')) && + (function_exists('mb_substr')) && (function_exists('mb_strlen')) && (function_exists('mb_strpos'))) { + function mb_str_replace($search, $replace, $subject) { + if(is_array($subject)) { + $ret = array(); + foreach($subject as $key => $val) { + $ret[$key] = mb_str_replace($search, $replace, $val); + } + return $ret; + } + + foreach((array) $search as $key => $s) { + if($s == '') { + continue; + } + $r = !is_array($replace) ? $replace : (array_key_exists($key, $replace) ? $replace[$key] : ''); + $pos = mb_strpos($subject, $s, 0, 'UTF-8'); + while($pos !== false) { + $subject = mb_substr($subject, 0, $pos, 'UTF-8') . $r . mb_substr($subject, $pos + mb_strlen($s, 'UTF-8'), 65535, 'UTF-8'); + $pos = mb_strpos($subject, $s, $pos + mb_strlen($r, 'UTF-8'), 'UTF-8'); + } + } + return $subject; + } +} diff --git a/PHPExcel/Calculation/Logical.php b/PHPExcel/Calculation/Logical.php new file mode 100644 index 0000000..bb206a1 --- /dev/null +++ b/PHPExcel/Calculation/Logical.php @@ -0,0 +1,288 @@ + $arg) { + // Is it a boolean value? + if (is_bool($arg)) { + $returnValue = $returnValue && $arg; + } elseif ((is_numeric($arg)) && (!is_string($arg))) { + $returnValue = $returnValue && ($arg != 0); + } elseif (is_string($arg)) { + $arg = strtoupper($arg); + if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) { + $arg = TRUE; + } elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) { + $arg = FALSE; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + $returnValue = $returnValue && ($arg != 0); + } + } + + // Return + if ($argCount < 0) { + return PHPExcel_Calculation_Functions::VALUE(); + } + return $returnValue; + } // function LOGICAL_AND() + + + /** + * LOGICAL_OR + * + * Returns boolean TRUE if any argument is TRUE; returns FALSE if all arguments are FALSE. + * + * Excel Function: + * =OR(logical1[,logical2[, ...]]) + * + * The arguments must evaluate to logical values such as TRUE or FALSE, or the arguments must be arrays + * or references that contain logical values. + * + * Boolean arguments are treated as True or False as appropriate + * Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False + * If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds + * the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value + * + * @access public + * @category Logical Functions + * @param mixed $arg,... Data values + * @return boolean The logical OR of the arguments. + */ + public static function LOGICAL_OR() { + // Return value + $returnValue = FALSE; + + // Loop through the arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + $argCount = -1; + foreach ($aArgs as $argCount => $arg) { + // Is it a boolean value? + if (is_bool($arg)) { + $returnValue = $returnValue || $arg; + } elseif ((is_numeric($arg)) && (!is_string($arg))) { + $returnValue = $returnValue || ($arg != 0); + } elseif (is_string($arg)) { + $arg = strtoupper($arg); + if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) { + $arg = TRUE; + } elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) { + $arg = FALSE; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + $returnValue = $returnValue || ($arg != 0); + } + } + + // Return + if ($argCount < 0) { + return PHPExcel_Calculation_Functions::VALUE(); + } + return $returnValue; + } // function LOGICAL_OR() + + + /** + * NOT + * + * Returns the boolean inverse of the argument. + * + * Excel Function: + * =NOT(logical) + * + * The argument must evaluate to a logical value such as TRUE or FALSE + * + * Boolean arguments are treated as True or False as appropriate + * Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False + * If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds + * the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value + * + * @access public + * @category Logical Functions + * @param mixed $logical A value or expression that can be evaluated to TRUE or FALSE + * @return boolean The boolean inverse of the argument. + */ + public static function NOT($logical=FALSE) { + $logical = PHPExcel_Calculation_Functions::flattenSingleValue($logical); + if (is_string($logical)) { + $logical = strtoupper($logical); + if (($logical == 'TRUE') || ($logical == PHPExcel_Calculation::getTRUE())) { + return FALSE; + } elseif (($logical == 'FALSE') || ($logical == PHPExcel_Calculation::getFALSE())) { + return TRUE; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + + return !$logical; + } // function NOT() + + /** + * STATEMENT_IF + * + * Returns one value if a condition you specify evaluates to TRUE and another value if it evaluates to FALSE. + * + * Excel Function: + * =IF(condition[,returnIfTrue[,returnIfFalse]]) + * + * Condition is any value or expression that can be evaluated to TRUE or FALSE. + * For example, A10=100 is a logical expression; if the value in cell A10 is equal to 100, + * the expression evaluates to TRUE. Otherwise, the expression evaluates to FALSE. + * This argument can use any comparison calculation operator. + * ReturnIfTrue is the value that is returned if condition evaluates to TRUE. + * For example, if this argument is the text string "Within budget" and the condition argument evaluates to TRUE, + * then the IF function returns the text "Within budget" + * If condition is TRUE and ReturnIfTrue is blank, this argument returns 0 (zero). To display the word TRUE, use + * the logical value TRUE for this argument. + * ReturnIfTrue can be another formula. + * ReturnIfFalse is the value that is returned if condition evaluates to FALSE. + * For example, if this argument is the text string "Over budget" and the condition argument evaluates to FALSE, + * then the IF function returns the text "Over budget". + * If condition is FALSE and ReturnIfFalse is omitted, then the logical value FALSE is returned. + * If condition is FALSE and ReturnIfFalse is blank, then the value 0 (zero) is returned. + * ReturnIfFalse can be another formula. + * + * @access public + * @category Logical Functions + * @param mixed $condition Condition to evaluate + * @param mixed $returnIfTrue Value to return when condition is true + * @param mixed $returnIfFalse Optional value to return when condition is false + * @return mixed The value of returnIfTrue or returnIfFalse determined by condition + */ + public static function STATEMENT_IF($condition = TRUE, $returnIfTrue = 0, $returnIfFalse = FALSE) { + $condition = (is_null($condition)) ? TRUE : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($condition); + $returnIfTrue = (is_null($returnIfTrue)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfTrue); + $returnIfFalse = (is_null($returnIfFalse)) ? FALSE : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfFalse); + + return ($condition) ? $returnIfTrue : $returnIfFalse; + } // function STATEMENT_IF() + + + /** + * IFERROR + * + * Excel Function: + * =IFERROR(testValue,errorpart) + * + * @access public + * @category Logical Functions + * @param mixed $testValue Value to check, is also the value returned when no error + * @param mixed $errorpart Value to return when testValue is an error condition + * @return mixed The value of errorpart or testValue determined by error condition + */ + public static function IFERROR($testValue = '', $errorpart = '') { + $testValue = (is_null($testValue)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($testValue); + $errorpart = (is_null($errorpart)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($errorpart); + + return self::STATEMENT_IF(PHPExcel_Calculation_Functions::IS_ERROR($testValue), $errorpart, $testValue); + } // function IFERROR() + +} // class PHPExcel_Calculation_Logical diff --git a/PHPExcel/Calculation/LookupRef.php b/PHPExcel/Calculation/LookupRef.php new file mode 100644 index 0000000..e1285d9 --- /dev/null +++ b/PHPExcel/Calculation/LookupRef.php @@ -0,0 +1,881 @@ + '') { + if (strpos($sheetText,' ') !== False) { $sheetText = "'".$sheetText."'"; } + $sheetText .='!'; + } + if ((!is_bool($referenceStyle)) || $referenceStyle) { + $rowRelative = $columnRelative = '$'; + $column = PHPExcel_Cell::stringFromColumnIndex($column-1); + if (($relativity == 2) || ($relativity == 4)) { $columnRelative = ''; } + if (($relativity == 3) || ($relativity == 4)) { $rowRelative = ''; } + return $sheetText.$columnRelative.$column.$rowRelative.$row; + } else { + if (($relativity == 2) || ($relativity == 4)) { $column = '['.$column.']'; } + if (($relativity == 3) || ($relativity == 4)) { $row = '['.$row.']'; } + return $sheetText.'R'.$row.'C'.$column; + } + } // function CELL_ADDRESS() + + + /** + * COLUMN + * + * Returns the column number of the given cell reference + * If the cell reference is a range of cells, COLUMN returns the column numbers of each column in the reference as a horizontal array. + * If cell reference is omitted, and the function is being called through the calculation engine, then it is assumed to be the + * reference of the cell in which the COLUMN function appears; otherwise this function returns 0. + * + * Excel Function: + * =COLUMN([cellAddress]) + * + * @param cellAddress A reference to a range of cells for which you want the column numbers + * @return integer or array of integer + */ + public static function COLUMN($cellAddress=Null) { + if (is_null($cellAddress) || trim($cellAddress) === '') { return 0; } + + if (is_array($cellAddress)) { + foreach($cellAddress as $columnKey => $value) { + $columnKey = preg_replace('/[^a-z]/i','',$columnKey); + return (integer) PHPExcel_Cell::columnIndexFromString($columnKey); + } + } else { + if (strpos($cellAddress,'!') !== false) { + list($sheet,$cellAddress) = explode('!',$cellAddress); + } + if (strpos($cellAddress,':') !== false) { + list($startAddress,$endAddress) = explode(':',$cellAddress); + $startAddress = preg_replace('/[^a-z]/i','',$startAddress); + $endAddress = preg_replace('/[^a-z]/i','',$endAddress); + $returnValue = array(); + do { + $returnValue[] = (integer) PHPExcel_Cell::columnIndexFromString($startAddress); + } while ($startAddress++ != $endAddress); + return $returnValue; + } else { + $cellAddress = preg_replace('/[^a-z]/i','',$cellAddress); + return (integer) PHPExcel_Cell::columnIndexFromString($cellAddress); + } + } + } // function COLUMN() + + + /** + * COLUMNS + * + * Returns the number of columns in an array or reference. + * + * Excel Function: + * =COLUMNS(cellAddress) + * + * @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of columns + * @return integer The number of columns in cellAddress + */ + public static function COLUMNS($cellAddress=Null) { + if (is_null($cellAddress) || $cellAddress === '') { + return 1; + } elseif (!is_array($cellAddress)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + $x = array_keys($cellAddress); + $x = array_shift($x); + $isMatrix = (is_numeric($x)); + list($columns,$rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress); + + if ($isMatrix) { + return $rows; + } else { + return $columns; + } + } // function COLUMNS() + + + /** + * ROW + * + * Returns the row number of the given cell reference + * If the cell reference is a range of cells, ROW returns the row numbers of each row in the reference as a vertical array. + * If cell reference is omitted, and the function is being called through the calculation engine, then it is assumed to be the + * reference of the cell in which the ROW function appears; otherwise this function returns 0. + * + * Excel Function: + * =ROW([cellAddress]) + * + * @param cellAddress A reference to a range of cells for which you want the row numbers + * @return integer or array of integer + */ + public static function ROW($cellAddress=Null) { + if (is_null($cellAddress) || trim($cellAddress) === '') { return 0; } + + if (is_array($cellAddress)) { + foreach($cellAddress as $columnKey => $rowValue) { + foreach($rowValue as $rowKey => $cellValue) { + return (integer) preg_replace('/[^0-9]/i','',$rowKey); + } + } + } else { + if (strpos($cellAddress,'!') !== false) { + list($sheet,$cellAddress) = explode('!',$cellAddress); + } + if (strpos($cellAddress,':') !== false) { + list($startAddress,$endAddress) = explode(':',$cellAddress); + $startAddress = preg_replace('/[^0-9]/','',$startAddress); + $endAddress = preg_replace('/[^0-9]/','',$endAddress); + $returnValue = array(); + do { + $returnValue[][] = (integer) $startAddress; + } while ($startAddress++ != $endAddress); + return $returnValue; + } else { + list($cellAddress) = explode(':',$cellAddress); + return (integer) preg_replace('/[^0-9]/','',$cellAddress); + } + } + } // function ROW() + + + /** + * ROWS + * + * Returns the number of rows in an array or reference. + * + * Excel Function: + * =ROWS(cellAddress) + * + * @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of rows + * @return integer The number of rows in cellAddress + */ + public static function ROWS($cellAddress=Null) { + if (is_null($cellAddress) || $cellAddress === '') { + return 1; + } elseif (!is_array($cellAddress)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + $i = array_keys($cellAddress); + $isMatrix = (is_numeric(array_shift($i))); + list($columns,$rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress); + + if ($isMatrix) { + return $columns; + } else { + return $rows; + } + } // function ROWS() + + + /** + * HYPERLINK + * + * Excel Function: + * =HYPERLINK(linkURL,displayName) + * + * @access public + * @category Logical Functions + * @param string $linkURL Value to check, is also the value returned when no error + * @param string $displayName Value to return when testValue is an error condition + * @param PHPExcel_Cell $pCell The cell to set the hyperlink in + * @return mixed The value of $displayName (or $linkURL if $displayName was blank) + */ + public static function HYPERLINK($linkURL = '', $displayName = null, PHPExcel_Cell $pCell = null) { + $args = func_get_args(); + $pCell = array_pop($args); + + $linkURL = (is_null($linkURL)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($linkURL); + $displayName = (is_null($displayName)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($displayName); + + if ((!is_object($pCell)) || (trim($linkURL) == '')) { + return PHPExcel_Calculation_Functions::REF(); + } + + if ((is_object($displayName)) || trim($displayName) == '') { + $displayName = $linkURL; + } + + $pCell->getHyperlink()->setUrl($linkURL); + + return $displayName; + } // function HYPERLINK() + + + /** + * INDIRECT + * + * Returns the reference specified by a text string. + * References are immediately evaluated to display their contents. + * + * Excel Function: + * =INDIRECT(cellAddress) + * + * NOTE - INDIRECT() does not yet support the optional a1 parameter introduced in Excel 2010 + * + * @param cellAddress $cellAddress The cell address of the current cell (containing this formula) + * @param PHPExcel_Cell $pCell The current cell (containing this formula) + * @return mixed The cells referenced by cellAddress + * + * @todo Support for the optional a1 parameter introduced in Excel 2010 + * + */ + public static function INDIRECT($cellAddress = NULL, PHPExcel_Cell $pCell = NULL) { + $cellAddress = PHPExcel_Calculation_Functions::flattenSingleValue($cellAddress); + if (is_null($cellAddress) || $cellAddress === '') { + return PHPExcel_Calculation_Functions::REF(); + } + + $cellAddress1 = $cellAddress; + $cellAddress2 = NULL; + if (strpos($cellAddress,':') !== false) { + list($cellAddress1,$cellAddress2) = explode(':',$cellAddress); + } + + if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress1, $matches)) || + ((!is_null($cellAddress2)) && (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress2, $matches)))) { + if (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $cellAddress1, $matches)) { + return PHPExcel_Calculation_Functions::REF(); + } + + if (strpos($cellAddress,'!') !== FALSE) { + list($sheetName, $cellAddress) = explode('!',$cellAddress); + $sheetName = trim($sheetName, "'"); + $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); + } else { + $pSheet = $pCell->getWorksheet(); + } + + return PHPExcel_Calculation::getInstance()->extractNamedRange($cellAddress, $pSheet, FALSE); + } + + if (strpos($cellAddress,'!') !== FALSE) { + list($sheetName,$cellAddress) = explode('!',$cellAddress); + $sheetName = trim($sheetName, "'"); + $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); + } else { + $pSheet = $pCell->getWorksheet(); + } + + return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, FALSE); + } // function INDIRECT() + + + /** + * OFFSET + * + * Returns a reference to a range that is a specified number of rows and columns from a cell or range of cells. + * The reference that is returned can be a single cell or a range of cells. You can specify the number of rows and + * the number of columns to be returned. + * + * Excel Function: + * =OFFSET(cellAddress, rows, cols, [height], [width]) + * + * @param cellAddress The reference from which you want to base the offset. Reference must refer to a cell or + * range of adjacent cells; otherwise, OFFSET returns the #VALUE! error value. + * @param rows The number of rows, up or down, that you want the upper-left cell to refer to. + * Using 5 as the rows argument specifies that the upper-left cell in the reference is + * five rows below reference. Rows can be positive (which means below the starting reference) + * or negative (which means above the starting reference). + * @param cols The number of columns, to the left or right, that you want the upper-left cell of the result + * to refer to. Using 5 as the cols argument specifies that the upper-left cell in the + * reference is five columns to the right of reference. Cols can be positive (which means + * to the right of the starting reference) or negative (which means to the left of the + * starting reference). + * @param height The height, in number of rows, that you want the returned reference to be. Height must be a positive number. + * @param width The width, in number of columns, that you want the returned reference to be. Width must be a positive number. + * @return string A reference to a cell or range of cells + */ + public static function OFFSET($cellAddress=Null,$rows=0,$columns=0,$height=null,$width=null) { + $rows = PHPExcel_Calculation_Functions::flattenSingleValue($rows); + $columns = PHPExcel_Calculation_Functions::flattenSingleValue($columns); + $height = PHPExcel_Calculation_Functions::flattenSingleValue($height); + $width = PHPExcel_Calculation_Functions::flattenSingleValue($width); + if ($cellAddress == Null) { + return 0; + } + + $args = func_get_args(); + $pCell = array_pop($args); + if (!is_object($pCell)) { + return PHPExcel_Calculation_Functions::REF(); + } + + $sheetName = NULL; + if (strpos($cellAddress,"!")) { + list($sheetName,$cellAddress) = explode("!",$cellAddress); + $sheetName = trim($sheetName, "'"); + } + if (strpos($cellAddress,":")) { + list($startCell,$endCell) = explode(":",$cellAddress); + } else { + $startCell = $endCell = $cellAddress; + } + list($startCellColumn,$startCellRow) = PHPExcel_Cell::coordinateFromString($startCell); + list($endCellColumn,$endCellRow) = PHPExcel_Cell::coordinateFromString($endCell); + + $startCellRow += $rows; + $startCellColumn = PHPExcel_Cell::columnIndexFromString($startCellColumn) - 1; + $startCellColumn += $columns; + + if (($startCellRow <= 0) || ($startCellColumn < 0)) { + return PHPExcel_Calculation_Functions::REF(); + } + $endCellColumn = PHPExcel_Cell::columnIndexFromString($endCellColumn) - 1; + if (($width != null) && (!is_object($width))) { + $endCellColumn = $startCellColumn + $width - 1; + } else { + $endCellColumn += $columns; + } + $startCellColumn = PHPExcel_Cell::stringFromColumnIndex($startCellColumn); + + if (($height != null) && (!is_object($height))) { + $endCellRow = $startCellRow + $height - 1; + } else { + $endCellRow += $rows; + } + + if (($endCellRow <= 0) || ($endCellColumn < 0)) { + return PHPExcel_Calculation_Functions::REF(); + } + $endCellColumn = PHPExcel_Cell::stringFromColumnIndex($endCellColumn); + + $cellAddress = $startCellColumn.$startCellRow; + if (($startCellColumn != $endCellColumn) || ($startCellRow != $endCellRow)) { + $cellAddress .= ':'.$endCellColumn.$endCellRow; + } + + if ($sheetName !== NULL) { + $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); + } else { + $pSheet = $pCell->getWorksheet(); + } + + return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, False); + } // function OFFSET() + + + /** + * CHOOSE + * + * Uses lookup_value to return a value from the list of value arguments. + * Use CHOOSE to select one of up to 254 values based on the lookup_value. + * + * Excel Function: + * =CHOOSE(index_num, value1, [value2], ...) + * + * @param index_num Specifies which value argument is selected. + * Index_num must be a number between 1 and 254, or a formula or reference to a cell containing a number + * between 1 and 254. + * @param value1... Value1 is required, subsequent values are optional. + * Between 1 to 254 value arguments from which CHOOSE selects a value or an action to perform based on + * index_num. The arguments can be numbers, cell references, defined names, formulas, functions, or + * text. + * @return mixed The selected value + */ + public static function CHOOSE() { + $chooseArgs = func_get_args(); + $chosenEntry = PHPExcel_Calculation_Functions::flattenArray(array_shift($chooseArgs)); + $entryCount = count($chooseArgs) - 1; + + if(is_array($chosenEntry)) { + $chosenEntry = array_shift($chosenEntry); + } + if ((is_numeric($chosenEntry)) && (!is_bool($chosenEntry))) { + --$chosenEntry; + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + $chosenEntry = floor($chosenEntry); + if (($chosenEntry < 0) || ($chosenEntry > $entryCount)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (is_array($chooseArgs[$chosenEntry])) { + return PHPExcel_Calculation_Functions::flattenArray($chooseArgs[$chosenEntry]); + } else { + return $chooseArgs[$chosenEntry]; + } + } // function CHOOSE() + + + /** + * MATCH + * + * The MATCH function searches for a specified item in a range of cells + * + * Excel Function: + * =MATCH(lookup_value, lookup_array, [match_type]) + * + * @param lookup_value The value that you want to match in lookup_array + * @param lookup_array The range of cells being searched + * @param match_type The number -1, 0, or 1. -1 means above, 0 means exact match, 1 means below. If match_type is 1 or -1, the list has to be ordered. + * @return integer The relative position of the found item + */ + public static function MATCH($lookup_value, $lookup_array, $match_type=1) { + $lookup_array = PHPExcel_Calculation_Functions::flattenArray($lookup_array); + $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); + $match_type = (is_null($match_type)) ? 1 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($match_type); + // MATCH is not case sensitive + $lookup_value = strtolower($lookup_value); + + // lookup_value type has to be number, text, or logical values + if ((!is_numeric($lookup_value)) && (!is_string($lookup_value)) && (!is_bool($lookup_value))) { + return PHPExcel_Calculation_Functions::NA(); + } + + // match_type is 0, 1 or -1 + if (($match_type !== 0) && ($match_type !== -1) && ($match_type !== 1)) { + return PHPExcel_Calculation_Functions::NA(); + } + + // lookup_array should not be empty + $lookupArraySize = count($lookup_array); + if ($lookupArraySize <= 0) { + return PHPExcel_Calculation_Functions::NA(); + } + + // lookup_array should contain only number, text, or logical values, or empty (null) cells + foreach($lookup_array as $i => $lookupArrayValue) { + // check the type of the value + if ((!is_numeric($lookupArrayValue)) && (!is_string($lookupArrayValue)) && + (!is_bool($lookupArrayValue)) && (!is_null($lookupArrayValue))) { + return PHPExcel_Calculation_Functions::NA(); + } + // convert strings to lowercase for case-insensitive testing + if (is_string($lookupArrayValue)) { + $lookup_array[$i] = strtolower($lookupArrayValue); + } + if ((is_null($lookupArrayValue)) && (($match_type == 1) || ($match_type == -1))) { + $lookup_array = array_slice($lookup_array,0,$i-1); + } + } + + // if match_type is 1 or -1, the list has to be ordered + if ($match_type == 1) { + asort($lookup_array); + $keySet = array_keys($lookup_array); + } elseif($match_type == -1) { + arsort($lookup_array); + $keySet = array_keys($lookup_array); + } + + // ** + // find the match + // ** + // loop on the cells +// var_dump($lookup_array); +// echo '
'; + foreach($lookup_array as $i => $lookupArrayValue) { + if (($match_type == 0) && ($lookupArrayValue == $lookup_value)) { + // exact match + return ++$i; + } elseif (($match_type == -1) && ($lookupArrayValue <= $lookup_value)) { +// echo '$i = '.$i.' => '; +// var_dump($lookupArrayValue); +// echo '
'; +// echo 'Keyset = '; +// var_dump($keySet); +// echo '
'; + $i = array_search($i,$keySet); +// echo '$i='.$i.'
'; + // if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value + if ($i < 1){ + // 1st cell was allready smaller than the lookup_value + break; + } else { + // the previous cell was the match + return $keySet[$i-1]+1; + } + } elseif (($match_type == 1) && ($lookupArrayValue >= $lookup_value)) { +// echo '$i = '.$i.' => '; +// var_dump($lookupArrayValue); +// echo '
'; +// echo 'Keyset = '; +// var_dump($keySet); +// echo '
'; + $i = array_search($i,$keySet); +// echo '$i='.$i.'
'; + // if match_type is 1 <=> find the largest value that is less than or equal to lookup_value + if ($i < 1){ + // 1st cell was allready bigger than the lookup_value + break; + } else { + // the previous cell was the match + return $keySet[$i-1]+1; + } + } + } + + // unsuccessful in finding a match, return #N/A error value + return PHPExcel_Calculation_Functions::NA(); + } // function MATCH() + + + /** + * INDEX + * + * Uses an index to choose a value from a reference or array + * + * Excel Function: + * =INDEX(range_array, row_num, [column_num]) + * + * @param range_array A range of cells or an array constant + * @param row_num The row in array from which to return a value. If row_num is omitted, column_num is required. + * @param column_num The column in array from which to return a value. If column_num is omitted, row_num is required. + * @return mixed the value of a specified cell or array of cells + */ + public static function INDEX($arrayValues,$rowNum = 0,$columnNum = 0) { + + if (($rowNum < 0) || ($columnNum < 0)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (!is_array($arrayValues)) { + return PHPExcel_Calculation_Functions::REF(); + } + + $rowKeys = array_keys($arrayValues); + $columnKeys = @array_keys($arrayValues[$rowKeys[0]]); + + if ($columnNum > count($columnKeys)) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($columnNum == 0) { + if ($rowNum == 0) { + return $arrayValues; + } + $rowNum = $rowKeys[--$rowNum]; + $returnArray = array(); + foreach($arrayValues as $arrayColumn) { + if (is_array($arrayColumn)) { + if (isset($arrayColumn[$rowNum])) { + $returnArray[] = $arrayColumn[$rowNum]; + } else { + return $arrayValues[$rowNum]; + } + } else { + return $arrayValues[$rowNum]; + } + } + return $returnArray; + } + $columnNum = $columnKeys[--$columnNum]; + if ($rowNum > count($rowKeys)) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($rowNum == 0) { + return $arrayValues[$columnNum]; + } + $rowNum = $rowKeys[--$rowNum]; + + return $arrayValues[$rowNum][$columnNum]; + } // function INDEX() + + + /** + * TRANSPOSE + * + * @param array $matrixData A matrix of values + * @return array + * + * Unlike the Excel TRANSPOSE function, which will only work on a single row or column, this function will transpose a full matrix. + */ + public static function TRANSPOSE($matrixData) { + $returnMatrix = array(); + if (!is_array($matrixData)) { $matrixData = array(array($matrixData)); } + + $column = 0; + foreach($matrixData as $matrixRow) { + $row = 0; + foreach($matrixRow as $matrixCell) { + $returnMatrix[$row][$column] = $matrixCell; + ++$row; + } + ++$column; + } + return $returnMatrix; + } // function TRANSPOSE() + + + private static function _vlookupSort($a,$b) { + $f = array_keys($a); + $firstColumn = array_shift($f); + if (strtolower($a[$firstColumn]) == strtolower($b[$firstColumn])) { + return 0; + } + return (strtolower($a[$firstColumn]) < strtolower($b[$firstColumn])) ? -1 : 1; + } // function _vlookupSort() + + + /** + * VLOOKUP + * The VLOOKUP function searches for value in the left-most column of lookup_array and returns the value in the same row based on the index_number. + * @param lookup_value The value that you want to match in lookup_array + * @param lookup_array The range of cells being searched + * @param index_number The column number in table_array from which the matching value must be returned. The first column is 1. + * @param not_exact_match Determines if you are looking for an exact match based on lookup_value. + * @return mixed The value of the found cell + */ + public static function VLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match=true) { + $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); + $index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number); + $not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match); + + // index_number must be greater than or equal to 1 + if ($index_number < 1) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // index_number must be less than or equal to the number of columns in lookup_array + if ((!is_array($lookup_array)) || (empty($lookup_array))) { + return PHPExcel_Calculation_Functions::REF(); + } else { + $f = array_keys($lookup_array); + $firstRow = array_pop($f); + if ((!is_array($lookup_array[$firstRow])) || ($index_number > count($lookup_array[$firstRow]))) { + return PHPExcel_Calculation_Functions::REF(); + } else { + $columnKeys = array_keys($lookup_array[$firstRow]); + $returnColumn = $columnKeys[--$index_number]; + $firstColumn = array_shift($columnKeys); + } + } + + if (!$not_exact_match) { + uasort($lookup_array,array('self','_vlookupSort')); + } + + $rowNumber = $rowValue = False; + foreach($lookup_array as $rowKey => $rowData) { + if ((is_numeric($lookup_value) && is_numeric($rowData[$firstColumn]) && ($rowData[$firstColumn] > $lookup_value)) || + (!is_numeric($lookup_value) && !is_numeric($rowData[$firstColumn]) && (strtolower($rowData[$firstColumn]) > strtolower($lookup_value)))) { + break; + } + $rowNumber = $rowKey; + $rowValue = $rowData[$firstColumn]; + } + + if ($rowNumber !== false) { + if ((!$not_exact_match) && ($rowValue != $lookup_value)) { + // if an exact match is required, we have what we need to return an appropriate response + return PHPExcel_Calculation_Functions::NA(); + } else { + // otherwise return the appropriate value + $result = $lookup_array[$rowNumber][$returnColumn]; + if ((is_numeric($lookup_value) && is_numeric($result)) || + (!is_numeric($lookup_value) && !is_numeric($result))) { + return $result; + } + } + } + + return PHPExcel_Calculation_Functions::NA(); + } // function VLOOKUP() + + +/** + * HLOOKUP + * The HLOOKUP function searches for value in the top-most row of lookup_array and returns the value in the same column based on the index_number. + * @param lookup_value The value that you want to match in lookup_array + * @param lookup_array The range of cells being searched + * @param index_number The row number in table_array from which the matching value must be returned. The first row is 1. + * @param not_exact_match Determines if you are looking for an exact match based on lookup_value. + * @return mixed The value of the found cell + */ + public static function HLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match=true) { + $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); + $index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number); + $not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match); + + // index_number must be greater than or equal to 1 + if ($index_number < 1) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + // index_number must be less than or equal to the number of columns in lookup_array + if ((!is_array($lookup_array)) || (empty($lookup_array))) { + return PHPExcel_Calculation_Functions::REF(); + } else { + $f = array_keys($lookup_array); + $firstRow = array_pop($f); + if ((!is_array($lookup_array[$firstRow])) || ($index_number > count($lookup_array[$firstRow]))) { + return PHPExcel_Calculation_Functions::REF(); + } else { + $columnKeys = array_keys($lookup_array[$firstRow]); + $firstkey = $f[0] - 1; + $returnColumn = $firstkey + $index_number; + $firstColumn = array_shift($f); + } + } + + if (!$not_exact_match) { + $firstRowH = asort($lookup_array[$firstColumn]); + } + + $rowNumber = $rowValue = False; + foreach($lookup_array[$firstColumn] as $rowKey => $rowData) { + if ((is_numeric($lookup_value) && is_numeric($rowData) && ($rowData > $lookup_value)) || + (!is_numeric($lookup_value) && !is_numeric($rowData) && (strtolower($rowData) > strtolower($lookup_value)))) { + break; + } + $rowNumber = $rowKey; + $rowValue = $rowData; + } + + if ($rowNumber !== false) { + if ((!$not_exact_match) && ($rowValue != $lookup_value)) { + // if an exact match is required, we have what we need to return an appropriate response + return PHPExcel_Calculation_Functions::NA(); + } else { + // otherwise return the appropriate value + $result = $lookup_array[$returnColumn][$rowNumber]; + return $result; + } + } + + return PHPExcel_Calculation_Functions::NA(); + } // function HLOOKUP() + + + /** + * LOOKUP + * The LOOKUP function searches for value either from a one-row or one-column range or from an array. + * @param lookup_value The value that you want to match in lookup_array + * @param lookup_vector The range of cells being searched + * @param result_vector The column from which the matching value must be returned + * @return mixed The value of the found cell + */ + public static function LOOKUP($lookup_value, $lookup_vector, $result_vector=null) { + $lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value); + + if (!is_array($lookup_vector)) { + return PHPExcel_Calculation_Functions::NA(); + } + $lookupRows = count($lookup_vector); + $l = array_keys($lookup_vector); + $l = array_shift($l); + $lookupColumns = count($lookup_vector[$l]); + if ((($lookupRows == 1) && ($lookupColumns > 1)) || (($lookupRows == 2) && ($lookupColumns != 2))) { + $lookup_vector = self::TRANSPOSE($lookup_vector); + $lookupRows = count($lookup_vector); + $l = array_keys($lookup_vector); + $lookupColumns = count($lookup_vector[array_shift($l)]); + } + + if (is_null($result_vector)) { + $result_vector = $lookup_vector; + } + $resultRows = count($result_vector); + $l = array_keys($result_vector); + $l = array_shift($l); + $resultColumns = count($result_vector[$l]); + if ((($resultRows == 1) && ($resultColumns > 1)) || (($resultRows == 2) && ($resultColumns != 2))) { + $result_vector = self::TRANSPOSE($result_vector); + $resultRows = count($result_vector); + $r = array_keys($result_vector); + $resultColumns = count($result_vector[array_shift($r)]); + } + + if ($lookupRows == 2) { + $result_vector = array_pop($lookup_vector); + $lookup_vector = array_shift($lookup_vector); + } + if ($lookupColumns != 2) { + foreach($lookup_vector as &$value) { + if (is_array($value)) { + $k = array_keys($value); + $key1 = $key2 = array_shift($k); + $key2++; + $dataValue1 = $value[$key1]; + } else { + $key1 = 0; + $key2 = 1; + $dataValue1 = $value; + } + $dataValue2 = array_shift($result_vector); + if (is_array($dataValue2)) { + $dataValue2 = array_shift($dataValue2); + } + $value = array($key1 => $dataValue1, $key2 => $dataValue2); + } + unset($value); + } + + return self::VLOOKUP($lookup_value,$lookup_vector,2); + } // function LOOKUP() + +} // class PHPExcel_Calculation_LookupRef diff --git a/PHPExcel/Calculation/MathTrig.php b/PHPExcel/Calculation/MathTrig.php new file mode 100644 index 0000000..1093055 --- /dev/null +++ b/PHPExcel/Calculation/MathTrig.php @@ -0,0 +1,1373 @@ + 1; --$i) { + if (($value % $i) == 0) { + $factorArray = array_merge($factorArray,self::_factors($value / $i)); + $factorArray = array_merge($factorArray,self::_factors($i)); + if ($i <= sqrt($value)) { + break; + } + } + } + if (!empty($factorArray)) { + rsort($factorArray); + return $factorArray; + } else { + return array((integer) $value); + } + } // function _factors() + + + private static function _romanCut($num, $n) { + return ($num - ($num % $n ) ) / $n; + } // function _romanCut() + + + /** + * ATAN2 + * + * This function calculates the arc tangent of the two variables x and y. It is similar to + * calculating the arc tangent of y ÷ x, except that the signs of both arguments are used + * to determine the quadrant of the result. + * The arctangent is the angle from the x-axis to a line containing the origin (0, 0) and a + * point with coordinates (xCoordinate, yCoordinate). The angle is given in radians between + * -pi and pi, excluding -pi. + * + * Note that the Excel ATAN2() function accepts its arguments in the reverse order to the standard + * PHP atan2() function, so we need to reverse them here before calling the PHP atan() function. + * + * Excel Function: + * ATAN2(xCoordinate,yCoordinate) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $xCoordinate The x-coordinate of the point. + * @param float $yCoordinate The y-coordinate of the point. + * @return float The inverse tangent of the specified x- and y-coordinates. + */ + public static function ATAN2($xCoordinate = NULL, $yCoordinate = NULL) { + $xCoordinate = PHPExcel_Calculation_Functions::flattenSingleValue($xCoordinate); + $yCoordinate = PHPExcel_Calculation_Functions::flattenSingleValue($yCoordinate); + + $xCoordinate = ($xCoordinate !== NULL) ? $xCoordinate : 0.0; + $yCoordinate = ($yCoordinate !== NULL) ? $yCoordinate : 0.0; + + if (((is_numeric($xCoordinate)) || (is_bool($xCoordinate))) && + ((is_numeric($yCoordinate))) || (is_bool($yCoordinate))) { + $xCoordinate = (float) $xCoordinate; + $yCoordinate = (float) $yCoordinate; + + if (($xCoordinate == 0) && ($yCoordinate == 0)) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + return atan2($yCoordinate, $xCoordinate); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ATAN2() + + + /** + * CEILING + * + * Returns number rounded up, away from zero, to the nearest multiple of significance. + * For example, if you want to avoid using pennies in your prices and your product is + * priced at $4.42, use the formula =CEILING(4.42,0.05) to round prices up to the + * nearest nickel. + * + * Excel Function: + * CEILING(number[,significance]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $number The number you want to round. + * @param float $significance The multiple to which you want to round. + * @return float Rounded Number + */ + public static function CEILING($number, $significance = NULL) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + $significance = PHPExcel_Calculation_Functions::flattenSingleValue($significance); + + if ((is_null($significance)) && + (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC)) { + $significance = $number/abs($number); + } + + if ((is_numeric($number)) && (is_numeric($significance))) { + if ($significance == 0.0) { + return 0.0; + } elseif (self::SIGN($number) == self::SIGN($significance)) { + return ceil($number / $significance) * $significance; + } else { + return PHPExcel_Calculation_Functions::NaN(); + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function CEILING() + + + /** + * COMBIN + * + * Returns the number of combinations for a given number of items. Use COMBIN to + * determine the total possible number of groups for a given number of items. + * + * Excel Function: + * COMBIN(numObjs,numInSet) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param int $numObjs Number of different objects + * @param int $numInSet Number of objects in each combination + * @return int Number of combinations + */ + public static function COMBIN($numObjs, $numInSet) { + $numObjs = PHPExcel_Calculation_Functions::flattenSingleValue($numObjs); + $numInSet = PHPExcel_Calculation_Functions::flattenSingleValue($numInSet); + + if ((is_numeric($numObjs)) && (is_numeric($numInSet))) { + if ($numObjs < $numInSet) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif ($numInSet < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return round(self::FACT($numObjs) / self::FACT($numObjs - $numInSet)) / self::FACT($numInSet); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function COMBIN() + + + /** + * EVEN + * + * Returns number rounded up to the nearest even integer. + * You can use this function for processing items that come in twos. For example, + * a packing crate accepts rows of one or two items. The crate is full when + * the number of items, rounded up to the nearest two, matches the crate's + * capacity. + * + * Excel Function: + * EVEN(number) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $number Number to round + * @return int Rounded Number + */ + public static function EVEN($number) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + + if (is_null($number)) { + return 0; + } elseif (is_bool($number)) { + $number = (int) $number; + } + + if (is_numeric($number)) { + $significance = 2 * self::SIGN($number); + return (int) self::CEILING($number,$significance); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function EVEN() + + + /** + * FACT + * + * Returns the factorial of a number. + * The factorial of a number is equal to 1*2*3*...* number. + * + * Excel Function: + * FACT(factVal) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $factVal Factorial Value + * @return int Factorial + */ + public static function FACT($factVal) { + $factVal = PHPExcel_Calculation_Functions::flattenSingleValue($factVal); + + if (is_numeric($factVal)) { + if ($factVal < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $factLoop = floor($factVal); + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + if ($factVal > $factLoop) { + return PHPExcel_Calculation_Functions::NaN(); + } + } + + $factorial = 1; + while ($factLoop > 1) { + $factorial *= $factLoop--; + } + return $factorial ; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function FACT() + + + /** + * FACTDOUBLE + * + * Returns the double factorial of a number. + * + * Excel Function: + * FACTDOUBLE(factVal) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $factVal Factorial Value + * @return int Double Factorial + */ + public static function FACTDOUBLE($factVal) { + $factLoop = PHPExcel_Calculation_Functions::flattenSingleValue($factVal); + + if (is_numeric($factLoop)) { + $factLoop = floor($factLoop); + if ($factVal < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $factorial = 1; + while ($factLoop > 1) { + $factorial *= $factLoop--; + --$factLoop; + } + return $factorial ; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function FACTDOUBLE() + + + /** + * FLOOR + * + * Rounds number down, toward zero, to the nearest multiple of significance. + * + * Excel Function: + * FLOOR(number[,significance]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $number Number to round + * @param float $significance Significance + * @return float Rounded Number + */ + public static function FLOOR($number, $significance = NULL) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + $significance = PHPExcel_Calculation_Functions::flattenSingleValue($significance); + + if ((is_null($significance)) && (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC)) { + $significance = $number/abs($number); + } + + if ((is_numeric($number)) && (is_numeric($significance))) { + if ((float) $significance == 0.0) { + return PHPExcel_Calculation_Functions::DIV0(); + } + if (self::SIGN($number) == self::SIGN($significance)) { + return floor($number / $significance) * $significance; + } else { + return PHPExcel_Calculation_Functions::NaN(); + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function FLOOR() + + + /** + * GCD + * + * Returns the greatest common divisor of a series of numbers. + * The greatest common divisor is the largest integer that divides both + * number1 and number2 without a remainder. + * + * Excel Function: + * GCD(number1[,number2[, ...]]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @return integer Greatest Common Divisor + */ + public static function GCD() { + $returnValue = 1; + $allValuesFactors = array(); + // Loop through arguments + foreach(PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $value) { + if (!is_numeric($value)) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ($value == 0) { + continue; + } elseif($value < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $myFactors = self::_factors($value); + $myCountedFactors = array_count_values($myFactors); + $allValuesFactors[] = $myCountedFactors; + } + $allValuesCount = count($allValuesFactors); + if ($allValuesCount == 0) { + return 0; + } + + $mergedArray = $allValuesFactors[0]; + for ($i=1;$i < $allValuesCount; ++$i) { + $mergedArray = array_intersect_key($mergedArray,$allValuesFactors[$i]); + } + $mergedArrayValues = count($mergedArray); + if ($mergedArrayValues == 0) { + return $returnValue; + } elseif ($mergedArrayValues > 1) { + foreach($mergedArray as $mergedKey => $mergedValue) { + foreach($allValuesFactors as $highestPowerTest) { + foreach($highestPowerTest as $testKey => $testValue) { + if (($testKey == $mergedKey) && ($testValue < $mergedValue)) { + $mergedArray[$mergedKey] = $testValue; + $mergedValue = $testValue; + } + } + } + } + + $returnValue = 1; + foreach($mergedArray as $key => $value) { + $returnValue *= pow($key,$value); + } + return $returnValue; + } else { + $keys = array_keys($mergedArray); + $key = $keys[0]; + $value = $mergedArray[$key]; + foreach($allValuesFactors as $testValue) { + foreach($testValue as $mergedKey => $mergedValue) { + if (($mergedKey == $key) && ($mergedValue < $value)) { + $value = $mergedValue; + } + } + } + return pow($key,$value); + } + } // function GCD() + + + /** + * INT + * + * Casts a floating point value to an integer + * + * Excel Function: + * INT(number) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $number Number to cast to an integer + * @return integer Integer value + */ + public static function INT($number) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + + if (is_null($number)) { + return 0; + } elseif (is_bool($number)) { + return (int) $number; + } + if (is_numeric($number)) { + return (int) floor($number); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function INT() + + + /** + * LCM + * + * Returns the lowest common multiplier of a series of numbers + * The least common multiple is the smallest positive integer that is a multiple + * of all integer arguments number1, number2, and so on. Use LCM to add fractions + * with different denominators. + * + * Excel Function: + * LCM(number1[,number2[, ...]]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @return int Lowest Common Multiplier + */ + public static function LCM() { + $returnValue = 1; + $allPoweredFactors = array(); + // Loop through arguments + foreach(PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $value) { + if (!is_numeric($value)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if ($value == 0) { + return 0; + } elseif ($value < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $myFactors = self::_factors(floor($value)); + $myCountedFactors = array_count_values($myFactors); + $myPoweredFactors = array(); + foreach($myCountedFactors as $myCountedFactor => $myCountedPower) { + $myPoweredFactors[$myCountedFactor] = pow($myCountedFactor,$myCountedPower); + } + foreach($myPoweredFactors as $myPoweredValue => $myPoweredFactor) { + if (array_key_exists($myPoweredValue,$allPoweredFactors)) { + if ($allPoweredFactors[$myPoweredValue] < $myPoweredFactor) { + $allPoweredFactors[$myPoweredValue] = $myPoweredFactor; + } + } else { + $allPoweredFactors[$myPoweredValue] = $myPoweredFactor; + } + } + } + foreach($allPoweredFactors as $allPoweredFactor) { + $returnValue *= (integer) $allPoweredFactor; + } + return $returnValue; + } // function LCM() + + + /** + * LOG_BASE + * + * Returns the logarithm of a number to a specified base. The default base is 10. + * + * Excel Function: + * LOG(number[,base]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param float $number The positive real number for which you want the logarithm + * @param float $base The base of the logarithm. If base is omitted, it is assumed to be 10. + * @return float + */ + public static function LOG_BASE($number = NULL, $base = 10) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + $base = (is_null($base)) ? 10 : (float) PHPExcel_Calculation_Functions::flattenSingleValue($base); + + if ((!is_numeric($base)) || (!is_numeric($number))) + return PHPExcel_Calculation_Functions::VALUE(); + if (($base <= 0) || ($number <= 0)) + return PHPExcel_Calculation_Functions::NaN(); + return log($number, $base); + } // function LOG_BASE() + + + /** + * MDETERM + * + * Returns the matrix determinant of an array. + * + * Excel Function: + * MDETERM(array) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param array $matrixValues A matrix of values + * @return float + */ + public static function MDETERM($matrixValues) { + $matrixData = array(); + if (!is_array($matrixValues)) { $matrixValues = array(array($matrixValues)); } + + $row = $maxColumn = 0; + foreach($matrixValues as $matrixRow) { + if (!is_array($matrixRow)) { $matrixRow = array($matrixRow); } + $column = 0; + foreach($matrixRow as $matrixCell) { + if ((is_string($matrixCell)) || ($matrixCell === null)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $matrixData[$column][$row] = $matrixCell; + ++$column; + } + if ($column > $maxColumn) { $maxColumn = $column; } + ++$row; + } + if ($row != $maxColumn) { return PHPExcel_Calculation_Functions::VALUE(); } + + try { + $matrix = new PHPExcel_Shared_JAMA_Matrix($matrixData); + return $matrix->det(); + } catch (PHPExcel_Exception $ex) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } // function MDETERM() + + + /** + * MINVERSE + * + * Returns the inverse matrix for the matrix stored in an array. + * + * Excel Function: + * MINVERSE(array) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param array $matrixValues A matrix of values + * @return array + */ + public static function MINVERSE($matrixValues) { + $matrixData = array(); + if (!is_array($matrixValues)) { $matrixValues = array(array($matrixValues)); } + + $row = $maxColumn = 0; + foreach($matrixValues as $matrixRow) { + if (!is_array($matrixRow)) { $matrixRow = array($matrixRow); } + $column = 0; + foreach($matrixRow as $matrixCell) { + if ((is_string($matrixCell)) || ($matrixCell === null)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $matrixData[$column][$row] = $matrixCell; + ++$column; + } + if ($column > $maxColumn) { $maxColumn = $column; } + ++$row; + } + if ($row != $maxColumn) { return PHPExcel_Calculation_Functions::VALUE(); } + + try { + $matrix = new PHPExcel_Shared_JAMA_Matrix($matrixData); + return $matrix->inverse()->getArray(); + } catch (PHPExcel_Exception $ex) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } // function MINVERSE() + + + /** + * MMULT + * + * @param array $matrixData1 A matrix of values + * @param array $matrixData2 A matrix of values + * @return array + */ + public static function MMULT($matrixData1,$matrixData2) { + $matrixAData = $matrixBData = array(); + if (!is_array($matrixData1)) { $matrixData1 = array(array($matrixData1)); } + if (!is_array($matrixData2)) { $matrixData2 = array(array($matrixData2)); } + + $rowA = 0; + foreach($matrixData1 as $matrixRow) { + if (!is_array($matrixRow)) { $matrixRow = array($matrixRow); } + $columnA = 0; + foreach($matrixRow as $matrixCell) { + if ((is_string($matrixCell)) || ($matrixCell === null)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $matrixAData[$rowA][$columnA] = $matrixCell; + ++$columnA; + } + ++$rowA; + } + try { + $matrixA = new PHPExcel_Shared_JAMA_Matrix($matrixAData); + $rowB = 0; + foreach($matrixData2 as $matrixRow) { + if (!is_array($matrixRow)) { $matrixRow = array($matrixRow); } + $columnB = 0; + foreach($matrixRow as $matrixCell) { + if ((is_string($matrixCell)) || ($matrixCell === null)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $matrixBData[$rowB][$columnB] = $matrixCell; + ++$columnB; + } + ++$rowB; + } + $matrixB = new PHPExcel_Shared_JAMA_Matrix($matrixBData); + + if (($rowA != $columnB) || ($rowB != $columnA)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + return $matrixA->times($matrixB)->getArray(); + } catch (PHPExcel_Exception $ex) { + return PHPExcel_Calculation_Functions::VALUE(); + } + } // function MMULT() + + + /** + * MOD + * + * @param int $a Dividend + * @param int $b Divisor + * @return int Remainder + */ + public static function MOD($a = 1, $b = 1) { + $a = PHPExcel_Calculation_Functions::flattenSingleValue($a); + $b = PHPExcel_Calculation_Functions::flattenSingleValue($b); + + if ($b == 0.0) { + return PHPExcel_Calculation_Functions::DIV0(); + } elseif (($a < 0.0) && ($b > 0.0)) { + return $b - fmod(abs($a),$b); + } elseif (($a > 0.0) && ($b < 0.0)) { + return $b + fmod($a,abs($b)); + } + + return fmod($a,$b); + } // function MOD() + + + /** + * MROUND + * + * Rounds a number to the nearest multiple of a specified value + * + * @param float $number Number to round + * @param int $multiple Multiple to which you want to round $number + * @return float Rounded Number + */ + public static function MROUND($number,$multiple) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + $multiple = PHPExcel_Calculation_Functions::flattenSingleValue($multiple); + + if ((is_numeric($number)) && (is_numeric($multiple))) { + if ($multiple == 0) { + return 0; + } + if ((self::SIGN($number)) == (self::SIGN($multiple))) { + $multiplier = 1 / $multiple; + return round($number * $multiplier) / $multiplier; + } + return PHPExcel_Calculation_Functions::NaN(); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function MROUND() + + + /** + * MULTINOMIAL + * + * Returns the ratio of the factorial of a sum of values to the product of factorials. + * + * @param array of mixed Data Series + * @return float + */ + public static function MULTINOMIAL() { + $summer = 0; + $divisor = 1; + // Loop through arguments + foreach (PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $arg) { + // Is it a numeric value? + if (is_numeric($arg)) { + if ($arg < 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + $summer += floor($arg); + $divisor *= self::FACT($arg); + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + + // Return + if ($summer > 0) { + $summer = self::FACT($summer); + return $summer / $divisor; + } + return 0; + } // function MULTINOMIAL() + + + /** + * ODD + * + * Returns number rounded up to the nearest odd integer. + * + * @param float $number Number to round + * @return int Rounded Number + */ + public static function ODD($number) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + + if (is_null($number)) { + return 1; + } elseif (is_bool($number)) { + $number = (int) $number; + } + + if (is_numeric($number)) { + $significance = self::SIGN($number); + if ($significance == 0) { + return 1; + } + + $result = self::CEILING($number,$significance); + if ($result == self::EVEN($result)) { + $result += $significance; + } + + return (int) $result; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ODD() + + + /** + * POWER + * + * Computes x raised to the power y. + * + * @param float $x + * @param float $y + * @return float + */ + public static function POWER($x = 0, $y = 2) { + $x = PHPExcel_Calculation_Functions::flattenSingleValue($x); + $y = PHPExcel_Calculation_Functions::flattenSingleValue($y); + + // Validate parameters + if ($x == 0.0 && $y == 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } elseif ($x == 0.0 && $y < 0.0) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + // Return + $result = pow($x, $y); + return (!is_nan($result) && !is_infinite($result)) ? $result : PHPExcel_Calculation_Functions::NaN(); + } // function POWER() + + + /** + * PRODUCT + * + * PRODUCT returns the product of all the values and cells referenced in the argument list. + * + * Excel Function: + * PRODUCT(value1[,value2[, ...]]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function PRODUCT() { + // Return value + $returnValue = null; + + // Loop through arguments + foreach (PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if (is_null($returnValue)) { + $returnValue = $arg; + } else { + $returnValue *= $arg; + } + } + } + + // Return + if (is_null($returnValue)) { + return 0; + } + return $returnValue; + } // function PRODUCT() + + + /** + * QUOTIENT + * + * QUOTIENT function returns the integer portion of a division. Numerator is the divided number + * and denominator is the divisor. + * + * Excel Function: + * QUOTIENT(value1[,value2[, ...]]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function QUOTIENT() { + // Return value + $returnValue = null; + + // Loop through arguments + foreach (PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if (is_null($returnValue)) { + $returnValue = ($arg == 0) ? 0 : $arg; + } else { + if (($returnValue == 0) || ($arg == 0)) { + $returnValue = 0; + } else { + $returnValue /= $arg; + } + } + } + } + + // Return + return intval($returnValue); + } // function QUOTIENT() + + + /** + * RAND + * + * @param int $min Minimal value + * @param int $max Maximal value + * @return int Random number + */ + public static function RAND($min = 0, $max = 0) { + $min = PHPExcel_Calculation_Functions::flattenSingleValue($min); + $max = PHPExcel_Calculation_Functions::flattenSingleValue($max); + + if ($min == 0 && $max == 0) { + return (rand(0,10000000)) / 10000000; + } else { + return rand($min, $max); + } + } // function RAND() + + + public static function ROMAN($aValue, $style=0) { + $aValue = PHPExcel_Calculation_Functions::flattenSingleValue($aValue); + $style = (is_null($style)) ? 0 : (integer) PHPExcel_Calculation_Functions::flattenSingleValue($style); + if ((!is_numeric($aValue)) || ($aValue < 0) || ($aValue >= 4000)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $aValue = (integer) $aValue; + if ($aValue == 0) { + return ''; + } + + $mill = Array('', 'M', 'MM', 'MMM', 'MMMM', 'MMMMM'); + $cent = Array('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'); + $tens = Array('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'); + $ones = Array('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'); + + $roman = ''; + while ($aValue > 5999) { + $roman .= 'M'; + $aValue -= 1000; + } + $m = self::_romanCut($aValue, 1000); $aValue %= 1000; + $c = self::_romanCut($aValue, 100); $aValue %= 100; + $t = self::_romanCut($aValue, 10); $aValue %= 10; + + return $roman.$mill[$m].$cent[$c].$tens[$t].$ones[$aValue]; + } // function ROMAN() + + + /** + * ROUNDUP + * + * Rounds a number up to a specified number of decimal places + * + * @param float $number Number to round + * @param int $digits Number of digits to which you want to round $number + * @return float Rounded Number + */ + public static function ROUNDUP($number,$digits) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + $digits = PHPExcel_Calculation_Functions::flattenSingleValue($digits); + + if ((is_numeric($number)) && (is_numeric($digits))) { + $significance = pow(10,(int) $digits); + if ($number < 0.0) { + return floor($number * $significance) / $significance; + } else { + return ceil($number * $significance) / $significance; + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ROUNDUP() + + + /** + * ROUNDDOWN + * + * Rounds a number down to a specified number of decimal places + * + * @param float $number Number to round + * @param int $digits Number of digits to which you want to round $number + * @return float Rounded Number + */ + public static function ROUNDDOWN($number,$digits) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + $digits = PHPExcel_Calculation_Functions::flattenSingleValue($digits); + + if ((is_numeric($number)) && (is_numeric($digits))) { + $significance = pow(10,(int) $digits); + if ($number < 0.0) { + return ceil($number * $significance) / $significance; + } else { + return floor($number * $significance) / $significance; + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function ROUNDDOWN() + + + /** + * SERIESSUM + * + * Returns the sum of a power series + * + * @param float $x Input value to the power series + * @param float $n Initial power to which you want to raise $x + * @param float $m Step by which to increase $n for each term in the series + * @param array of mixed Data Series + * @return float + */ + public static function SERIESSUM() { + // Return value + $returnValue = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + $x = array_shift($aArgs); + $n = array_shift($aArgs); + $m = array_shift($aArgs); + + if ((is_numeric($x)) && (is_numeric($n)) && (is_numeric($m))) { + // Calculate + $i = 0; + foreach($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $returnValue += $arg * pow($x,$n + ($m * $i++)); + } else { + return PHPExcel_Calculation_Functions::VALUE(); + } + } + // Return + return $returnValue; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SERIESSUM() + + + /** + * SIGN + * + * Determines the sign of a number. Returns 1 if the number is positive, zero (0) + * if the number is 0, and -1 if the number is negative. + * + * @param float $number Number to round + * @return int sign value + */ + public static function SIGN($number) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + + if (is_bool($number)) + return (int) $number; + if (is_numeric($number)) { + if ($number == 0.0) { + return 0; + } + return $number / abs($number); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SIGN() + + + /** + * SQRTPI + * + * Returns the square root of (number * pi). + * + * @param float $number Number + * @return float Square Root of Number * Pi + */ + public static function SQRTPI($number) { + $number = PHPExcel_Calculation_Functions::flattenSingleValue($number); + + if (is_numeric($number)) { + if ($number < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return sqrt($number * M_PI) ; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SQRTPI() + + + /** + * SUBTOTAL + * + * Returns a subtotal in a list or database. + * + * @param int the number 1 to 11 that specifies which function to + * use in calculating subtotals within a list. + * @param array of mixed Data Series + * @return float + */ + public static function SUBTOTAL() { + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + // Calculate + $subtotal = array_shift($aArgs); + + if ((is_numeric($subtotal)) && (!is_string($subtotal))) { + switch($subtotal) { + case 1 : + return PHPExcel_Calculation_Statistical::AVERAGE($aArgs); + break; + case 2 : + return PHPExcel_Calculation_Statistical::COUNT($aArgs); + break; + case 3 : + return PHPExcel_Calculation_Statistical::COUNTA($aArgs); + break; + case 4 : + return PHPExcel_Calculation_Statistical::MAX($aArgs); + break; + case 5 : + return PHPExcel_Calculation_Statistical::MIN($aArgs); + break; + case 6 : + return self::PRODUCT($aArgs); + break; + case 7 : + return PHPExcel_Calculation_Statistical::STDEV($aArgs); + break; + case 8 : + return PHPExcel_Calculation_Statistical::STDEVP($aArgs); + break; + case 9 : + return self::SUM($aArgs); + break; + case 10 : + return PHPExcel_Calculation_Statistical::VARFunc($aArgs); + break; + case 11 : + return PHPExcel_Calculation_Statistical::VARP($aArgs); + break; + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SUBTOTAL() + + + /** + * SUM + * + * SUM computes the sum of all the values and cells referenced in the argument list. + * + * Excel Function: + * SUM(value1[,value2[, ...]]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function SUM() { + // Return value + $returnValue = 0; + + // Loop through the arguments + foreach (PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $returnValue += $arg; + } + } + + // Return + return $returnValue; + } // function SUM() + + + /** + * SUMIF + * + * Counts the number of cells that contain numbers within the list of arguments + * + * Excel Function: + * SUMIF(value1[,value2[, ...]],condition) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @param string $condition The criteria that defines which cells will be summed. + * @return float + */ + public static function SUMIF($aArgs,$condition,$sumArgs = array()) { + // Return value + $returnValue = 0; + + $aArgs = PHPExcel_Calculation_Functions::flattenArray($aArgs); + $sumArgs = PHPExcel_Calculation_Functions::flattenArray($sumArgs); + if (empty($sumArgs)) { + $sumArgs = $aArgs; + } + $condition = PHPExcel_Calculation_Functions::_ifCondition($condition); + // Loop through arguments + foreach ($aArgs as $key => $arg) { + if (!is_numeric($arg)) { + $arg = str_replace('"', '""', $arg); + $arg = PHPExcel_Calculation::_wrapResult(strtoupper($arg)); + } + + $testCondition = '='.$arg.$condition; + if (PHPExcel_Calculation::getInstance()->_calculateFormulaValue($testCondition)) { + // Is it a value within our criteria + $returnValue += $sumArgs[$key]; + } + } + + // Return + return $returnValue; + } // function SUMIF() + + + /** + * SUMPRODUCT + * + * Excel Function: + * SUMPRODUCT(value1[,value2[, ...]]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function SUMPRODUCT() { + $arrayList = func_get_args(); + + $wrkArray = PHPExcel_Calculation_Functions::flattenArray(array_shift($arrayList)); + $wrkCellCount = count($wrkArray); + + for ($i=0; $i< $wrkCellCount; ++$i) { + if ((!is_numeric($wrkArray[$i])) || (is_string($wrkArray[$i]))) { + $wrkArray[$i] = 0; + } + } + + foreach($arrayList as $matrixData) { + $array2 = PHPExcel_Calculation_Functions::flattenArray($matrixData); + $count = count($array2); + if ($wrkCellCount != $count) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + foreach ($array2 as $i => $val) { + if ((!is_numeric($val)) || (is_string($val))) { + $val = 0; + } + $wrkArray[$i] *= $val; + } + } + + return array_sum($wrkArray); + } // function SUMPRODUCT() + + + /** + * SUMSQ + * + * SUMSQ returns the sum of the squares of the arguments + * + * Excel Function: + * SUMSQ(value1[,value2[, ...]]) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function SUMSQ() { + // Return value + $returnValue = 0; + + // Loop through arguments + foreach (PHPExcel_Calculation_Functions::flattenArray(func_get_args()) as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $returnValue += ($arg * $arg); + } + } + + // Return + return $returnValue; + } // function SUMSQ() + + + /** + * SUMX2MY2 + * + * @param mixed[] $matrixData1 Matrix #1 + * @param mixed[] $matrixData2 Matrix #2 + * @return float + */ + public static function SUMX2MY2($matrixData1,$matrixData2) { + $array1 = PHPExcel_Calculation_Functions::flattenArray($matrixData1); + $array2 = PHPExcel_Calculation_Functions::flattenArray($matrixData2); + $count1 = count($array1); + $count2 = count($array2); + if ($count1 < $count2) { + $count = $count1; + } else { + $count = $count2; + } + + $result = 0; + for ($i = 0; $i < $count; ++$i) { + if (((is_numeric($array1[$i])) && (!is_string($array1[$i]))) && + ((is_numeric($array2[$i])) && (!is_string($array2[$i])))) { + $result += ($array1[$i] * $array1[$i]) - ($array2[$i] * $array2[$i]); + } + } + + return $result; + } // function SUMX2MY2() + + + /** + * SUMX2PY2 + * + * @param mixed[] $matrixData1 Matrix #1 + * @param mixed[] $matrixData2 Matrix #2 + * @return float + */ + public static function SUMX2PY2($matrixData1,$matrixData2) { + $array1 = PHPExcel_Calculation_Functions::flattenArray($matrixData1); + $array2 = PHPExcel_Calculation_Functions::flattenArray($matrixData2); + $count1 = count($array1); + $count2 = count($array2); + if ($count1 < $count2) { + $count = $count1; + } else { + $count = $count2; + } + + $result = 0; + for ($i = 0; $i < $count; ++$i) { + if (((is_numeric($array1[$i])) && (!is_string($array1[$i]))) && + ((is_numeric($array2[$i])) && (!is_string($array2[$i])))) { + $result += ($array1[$i] * $array1[$i]) + ($array2[$i] * $array2[$i]); + } + } + + return $result; + } // function SUMX2PY2() + + + /** + * SUMXMY2 + * + * @param mixed[] $matrixData1 Matrix #1 + * @param mixed[] $matrixData2 Matrix #2 + * @return float + */ + public static function SUMXMY2($matrixData1,$matrixData2) { + $array1 = PHPExcel_Calculation_Functions::flattenArray($matrixData1); + $array2 = PHPExcel_Calculation_Functions::flattenArray($matrixData2); + $count1 = count($array1); + $count2 = count($array2); + if ($count1 < $count2) { + $count = $count1; + } else { + $count = $count2; + } + + $result = 0; + for ($i = 0; $i < $count; ++$i) { + if (((is_numeric($array1[$i])) && (!is_string($array1[$i]))) && + ((is_numeric($array2[$i])) && (!is_string($array2[$i])))) { + $result += ($array1[$i] - $array2[$i]) * ($array1[$i] - $array2[$i]); + } + } + + return $result; + } // function SUMXMY2() + + + /** + * TRUNC + * + * Truncates value to the number of fractional digits by number_digits. + * + * @param float $value + * @param int $digits + * @return float Truncated value + */ + public static function TRUNC($value = 0, $digits = 0) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $digits = PHPExcel_Calculation_Functions::flattenSingleValue($digits); + + // Validate parameters + if ((!is_numeric($value)) || (!is_numeric($digits))) + return PHPExcel_Calculation_Functions::VALUE(); + $digits = floor($digits); + + // Truncate + $adjust = pow(10, $digits); + + if (($digits > 0) && (rtrim(intval((abs($value) - abs(intval($value))) * $adjust),'0') < $adjust/10)) + return $value; + + return (intval($value * $adjust)) / $adjust; + } // function TRUNC() + +} // class PHPExcel_Calculation_MathTrig diff --git a/PHPExcel/Calculation/Statistical.php b/PHPExcel/Calculation/Statistical.php new file mode 100644 index 0000000..32b9c78 --- /dev/null +++ b/PHPExcel/Calculation/Statistical.php @@ -0,0 +1,3651 @@ + $value) { + if ((is_bool($value)) || (is_string($value)) || (is_null($value))) { + unset($array1[$key]); + unset($array2[$key]); + } + } + foreach($array2 as $key => $value) { + if ((is_bool($value)) || (is_string($value)) || (is_null($value))) { + unset($array1[$key]); + unset($array2[$key]); + } + } + $array1 = array_merge($array1); + $array2 = array_merge($array2); + + return True; + } // function _checkTrendArrays() + + + /** + * Beta function. + * + * @author Jaco van Kooten + * + * @param p require p>0 + * @param q require q>0 + * @return 0 if p<=0, q<=0 or p+q>2.55E305 to avoid errors and over/underflow + */ + private static function _beta($p, $q) { + if ($p <= 0.0 || $q <= 0.0 || ($p + $q) > LOG_GAMMA_X_MAX_VALUE) { + return 0.0; + } else { + return exp(self::_logBeta($p, $q)); + } + } // function _beta() + + + /** + * Incomplete beta function + * + * @author Jaco van Kooten + * @author Paul Meagher + * + * The computation is based on formulas from Numerical Recipes, Chapter 6.4 (W.H. Press et al, 1992). + * @param x require 0<=x<=1 + * @param p require p>0 + * @param q require q>0 + * @return 0 if x<0, p<=0, q<=0 or p+q>2.55E305 and 1 if x>1 to avoid errors and over/underflow + */ + private static function _incompleteBeta($x, $p, $q) { + if ($x <= 0.0) { + return 0.0; + } elseif ($x >= 1.0) { + return 1.0; + } elseif (($p <= 0.0) || ($q <= 0.0) || (($p + $q) > LOG_GAMMA_X_MAX_VALUE)) { + return 0.0; + } + $beta_gam = exp((0 - self::_logBeta($p, $q)) + $p * log($x) + $q * log(1.0 - $x)); + if ($x < ($p + 1.0) / ($p + $q + 2.0)) { + return $beta_gam * self::_betaFraction($x, $p, $q) / $p; + } else { + return 1.0 - ($beta_gam * self::_betaFraction(1 - $x, $q, $p) / $q); + } + } // function _incompleteBeta() + + + // Function cache for _logBeta function + private static $_logBetaCache_p = 0.0; + private static $_logBetaCache_q = 0.0; + private static $_logBetaCache_result = 0.0; + + /** + * The natural logarithm of the beta function. + * + * @param p require p>0 + * @param q require q>0 + * @return 0 if p<=0, q<=0 or p+q>2.55E305 to avoid errors and over/underflow + * @author Jaco van Kooten + */ + private static function _logBeta($p, $q) { + if ($p != self::$_logBetaCache_p || $q != self::$_logBetaCache_q) { + self::$_logBetaCache_p = $p; + self::$_logBetaCache_q = $q; + if (($p <= 0.0) || ($q <= 0.0) || (($p + $q) > LOG_GAMMA_X_MAX_VALUE)) { + self::$_logBetaCache_result = 0.0; + } else { + self::$_logBetaCache_result = self::_logGamma($p) + self::_logGamma($q) - self::_logGamma($p + $q); + } + } + return self::$_logBetaCache_result; + } // function _logBeta() + + + /** + * Evaluates of continued fraction part of incomplete beta function. + * Based on an idea from Numerical Recipes (W.H. Press et al, 1992). + * @author Jaco van Kooten + */ + private static function _betaFraction($x, $p, $q) { + $c = 1.0; + $sum_pq = $p + $q; + $p_plus = $p + 1.0; + $p_minus = $p - 1.0; + $h = 1.0 - $sum_pq * $x / $p_plus; + if (abs($h) < XMININ) { + $h = XMININ; + } + $h = 1.0 / $h; + $frac = $h; + $m = 1; + $delta = 0.0; + while ($m <= MAX_ITERATIONS && abs($delta-1.0) > PRECISION ) { + $m2 = 2 * $m; + // even index for d + $d = $m * ($q - $m) * $x / ( ($p_minus + $m2) * ($p + $m2)); + $h = 1.0 + $d * $h; + if (abs($h) < XMININ) { + $h = XMININ; + } + $h = 1.0 / $h; + $c = 1.0 + $d / $c; + if (abs($c) < XMININ) { + $c = XMININ; + } + $frac *= $h * $c; + // odd index for d + $d = -($p + $m) * ($sum_pq + $m) * $x / (($p + $m2) * ($p_plus + $m2)); + $h = 1.0 + $d * $h; + if (abs($h) < XMININ) { + $h = XMININ; + } + $h = 1.0 / $h; + $c = 1.0 + $d / $c; + if (abs($c) < XMININ) { + $c = XMININ; + } + $delta = $h * $c; + $frac *= $delta; + ++$m; + } + return $frac; + } // function _betaFraction() + + + /** + * logGamma function + * + * @version 1.1 + * @author Jaco van Kooten + * + * Original author was Jaco van Kooten. Ported to PHP by Paul Meagher. + * + * The natural logarithm of the gamma function.
+ * Based on public domain NETLIB (Fortran) code by W. J. Cody and L. Stoltz
+ * Applied Mathematics Division
+ * Argonne National Laboratory
+ * Argonne, IL 60439
+ *

+ * References: + *

    + *
  1. W. J. Cody and K. E. Hillstrom, 'Chebyshev Approximations for the Natural + * Logarithm of the Gamma Function,' Math. Comp. 21, 1967, pp. 198-203.
  2. + *
  3. K. E. Hillstrom, ANL/AMD Program ANLC366S, DGAMMA/DLGAMA, May, 1969.
  4. + *
  5. Hart, Et. Al., Computer Approximations, Wiley and sons, New York, 1968.
  6. + *
+ *

+ *

+ * From the original documentation: + *

+ *

+ * This routine calculates the LOG(GAMMA) function for a positive real argument X. + * Computation is based on an algorithm outlined in references 1 and 2. + * The program uses rational functions that theoretically approximate LOG(GAMMA) + * to at least 18 significant decimal digits. The approximation for X > 12 is from + * reference 3, while approximations for X < 12.0 are similar to those in reference + * 1, but are unpublished. The accuracy achieved depends on the arithmetic system, + * the compiler, the intrinsic functions, and proper selection of the + * machine-dependent constants. + *

+ *

+ * Error returns:
+ * The program returns the value XINF for X .LE. 0.0 or when overflow would occur. + * The computation is believed to be free of underflow and overflow. + *

+ * @return MAX_VALUE for x < 0.0 or when overflow would occur, i.e. x > 2.55E305 + */ + + // Function cache for logGamma + private static $_logGammaCache_result = 0.0; + private static $_logGammaCache_x = 0.0; + + private static function _logGamma($x) { + // Log Gamma related constants + static $lg_d1 = -0.5772156649015328605195174; + static $lg_d2 = 0.4227843350984671393993777; + static $lg_d4 = 1.791759469228055000094023; + + static $lg_p1 = array( 4.945235359296727046734888, + 201.8112620856775083915565, + 2290.838373831346393026739, + 11319.67205903380828685045, + 28557.24635671635335736389, + 38484.96228443793359990269, + 26377.48787624195437963534, + 7225.813979700288197698961 ); + static $lg_p2 = array( 4.974607845568932035012064, + 542.4138599891070494101986, + 15506.93864978364947665077, + 184793.2904445632425417223, + 1088204.76946882876749847, + 3338152.967987029735917223, + 5106661.678927352456275255, + 3074109.054850539556250927 ); + static $lg_p4 = array( 14745.02166059939948905062, + 2426813.369486704502836312, + 121475557.4045093227939592, + 2663432449.630976949898078, + 29403789566.34553899906876, + 170266573776.5398868392998, + 492612579337.743088758812, + 560625185622.3951465078242 ); + + static $lg_q1 = array( 67.48212550303777196073036, + 1113.332393857199323513008, + 7738.757056935398733233834, + 27639.87074403340708898585, + 54993.10206226157329794414, + 61611.22180066002127833352, + 36351.27591501940507276287, + 8785.536302431013170870835 ); + static $lg_q2 = array( 183.0328399370592604055942, + 7765.049321445005871323047, + 133190.3827966074194402448, + 1136705.821321969608938755, + 5267964.117437946917577538, + 13467014.54311101692290052, + 17827365.30353274213975932, + 9533095.591844353613395747 ); + static $lg_q4 = array( 2690.530175870899333379843, + 639388.5654300092398984238, + 41355999.30241388052042842, + 1120872109.61614794137657, + 14886137286.78813811542398, + 101680358627.2438228077304, + 341747634550.7377132798597, + 446315818741.9713286462081 ); + + static $lg_c = array( -0.001910444077728, + 8.4171387781295e-4, + -5.952379913043012e-4, + 7.93650793500350248e-4, + -0.002777777777777681622553, + 0.08333333333333333331554247, + 0.0057083835261 ); + + // Rough estimate of the fourth root of logGamma_xBig + static $lg_frtbig = 2.25e76; + static $pnt68 = 0.6796875; + + + if ($x == self::$_logGammaCache_x) { + return self::$_logGammaCache_result; + } + $y = $x; + if ($y > 0.0 && $y <= LOG_GAMMA_X_MAX_VALUE) { + if ($y <= EPS) { + $res = -log(y); + } elseif ($y <= 1.5) { + // --------------------- + // EPS .LT. X .LE. 1.5 + // --------------------- + if ($y < $pnt68) { + $corr = -log($y); + $xm1 = $y; + } else { + $corr = 0.0; + $xm1 = $y - 1.0; + } + if ($y <= 0.5 || $y >= $pnt68) { + $xden = 1.0; + $xnum = 0.0; + for ($i = 0; $i < 8; ++$i) { + $xnum = $xnum * $xm1 + $lg_p1[$i]; + $xden = $xden * $xm1 + $lg_q1[$i]; + } + $res = $corr + $xm1 * ($lg_d1 + $xm1 * ($xnum / $xden)); + } else { + $xm2 = $y - 1.0; + $xden = 1.0; + $xnum = 0.0; + for ($i = 0; $i < 8; ++$i) { + $xnum = $xnum * $xm2 + $lg_p2[$i]; + $xden = $xden * $xm2 + $lg_q2[$i]; + } + $res = $corr + $xm2 * ($lg_d2 + $xm2 * ($xnum / $xden)); + } + } elseif ($y <= 4.0) { + // --------------------- + // 1.5 .LT. X .LE. 4.0 + // --------------------- + $xm2 = $y - 2.0; + $xden = 1.0; + $xnum = 0.0; + for ($i = 0; $i < 8; ++$i) { + $xnum = $xnum * $xm2 + $lg_p2[$i]; + $xden = $xden * $xm2 + $lg_q2[$i]; + } + $res = $xm2 * ($lg_d2 + $xm2 * ($xnum / $xden)); + } elseif ($y <= 12.0) { + // ---------------------- + // 4.0 .LT. X .LE. 12.0 + // ---------------------- + $xm4 = $y - 4.0; + $xden = -1.0; + $xnum = 0.0; + for ($i = 0; $i < 8; ++$i) { + $xnum = $xnum * $xm4 + $lg_p4[$i]; + $xden = $xden * $xm4 + $lg_q4[$i]; + } + $res = $lg_d4 + $xm4 * ($xnum / $xden); + } else { + // --------------------------------- + // Evaluate for argument .GE. 12.0 + // --------------------------------- + $res = 0.0; + if ($y <= $lg_frtbig) { + $res = $lg_c[6]; + $ysq = $y * $y; + for ($i = 0; $i < 6; ++$i) + $res = $res / $ysq + $lg_c[$i]; + } + $res /= $y; + $corr = log($y); + $res = $res + log(SQRT2PI) - 0.5 * $corr; + $res += $y * ($corr - 1.0); + } + } else { + // -------------------------- + // Return for bad arguments + // -------------------------- + $res = MAX_VALUE; + } + // ------------------------------ + // Final adjustments and return + // ------------------------------ + self::$_logGammaCache_x = $x; + self::$_logGammaCache_result = $res; + return $res; + } // function _logGamma() + + + // + // Private implementation of the incomplete Gamma function + // + private static function _incompleteGamma($a,$x) { + static $max = 32; + $summer = 0; + for ($n=0; $n<=$max; ++$n) { + $divisor = $a; + for ($i=1; $i<=$n; ++$i) { + $divisor *= ($a + $i); + } + $summer += (pow($x,$n) / $divisor); + } + return pow($x,$a) * exp(0-$x) * $summer; + } // function _incompleteGamma() + + + // + // Private implementation of the Gamma function + // + private static function _gamma($data) { + if ($data == 0.0) return 0; + + static $p0 = 1.000000000190015; + static $p = array ( 1 => 76.18009172947146, + 2 => -86.50532032941677, + 3 => 24.01409824083091, + 4 => -1.231739572450155, + 5 => 1.208650973866179e-3, + 6 => -5.395239384953e-6 + ); + + $y = $x = $data; + $tmp = $x + 5.5; + $tmp -= ($x + 0.5) * log($tmp); + + $summer = $p0; + for ($j=1;$j<=6;++$j) { + $summer += ($p[$j] / ++$y); + } + return exp(0 - $tmp + log(SQRT2PI * $summer / $x)); + } // function _gamma() + + + /*************************************************************************** + * inverse_ncdf.php + * ------------------- + * begin : Friday, January 16, 2004 + * copyright : (C) 2004 Michael Nickerson + * email : nickersonm@yahoo.com + * + ***************************************************************************/ + private static function _inverse_ncdf($p) { + // Inverse ncdf approximation by Peter J. Acklam, implementation adapted to + // PHP by Michael Nickerson, using Dr. Thomas Ziegler's C implementation as + // a guide. http://home.online.no/~pjacklam/notes/invnorm/index.html + // I have not checked the accuracy of this implementation. Be aware that PHP + // will truncate the coeficcients to 14 digits. + + // You have permission to use and distribute this function freely for + // whatever purpose you want, but please show common courtesy and give credit + // where credit is due. + + // Input paramater is $p - probability - where 0 < p < 1. + + // Coefficients in rational approximations + static $a = array( 1 => -3.969683028665376e+01, + 2 => 2.209460984245205e+02, + 3 => -2.759285104469687e+02, + 4 => 1.383577518672690e+02, + 5 => -3.066479806614716e+01, + 6 => 2.506628277459239e+00 + ); + + static $b = array( 1 => -5.447609879822406e+01, + 2 => 1.615858368580409e+02, + 3 => -1.556989798598866e+02, + 4 => 6.680131188771972e+01, + 5 => -1.328068155288572e+01 + ); + + static $c = array( 1 => -7.784894002430293e-03, + 2 => -3.223964580411365e-01, + 3 => -2.400758277161838e+00, + 4 => -2.549732539343734e+00, + 5 => 4.374664141464968e+00, + 6 => 2.938163982698783e+00 + ); + + static $d = array( 1 => 7.784695709041462e-03, + 2 => 3.224671290700398e-01, + 3 => 2.445134137142996e+00, + 4 => 3.754408661907416e+00 + ); + + // Define lower and upper region break-points. + $p_low = 0.02425; //Use lower region approx. below this + $p_high = 1 - $p_low; //Use upper region approx. above this + + if (0 < $p && $p < $p_low) { + // Rational approximation for lower region. + $q = sqrt(-2 * log($p)); + return ((((($c[1] * $q + $c[2]) * $q + $c[3]) * $q + $c[4]) * $q + $c[5]) * $q + $c[6]) / + (((($d[1] * $q + $d[2]) * $q + $d[3]) * $q + $d[4]) * $q + 1); + } elseif ($p_low <= $p && $p <= $p_high) { + // Rational approximation for central region. + $q = $p - 0.5; + $r = $q * $q; + return ((((($a[1] * $r + $a[2]) * $r + $a[3]) * $r + $a[4]) * $r + $a[5]) * $r + $a[6]) * $q / + ((((($b[1] * $r + $b[2]) * $r + $b[3]) * $r + $b[4]) * $r + $b[5]) * $r + 1); + } elseif ($p_high < $p && $p < 1) { + // Rational approximation for upper region. + $q = sqrt(-2 * log(1 - $p)); + return -((((($c[1] * $q + $c[2]) * $q + $c[3]) * $q + $c[4]) * $q + $c[5]) * $q + $c[6]) / + (((($d[1] * $q + $d[2]) * $q + $d[3]) * $q + $d[4]) * $q + 1); + } + // If 0 < p < 1, return a null value + return PHPExcel_Calculation_Functions::NULL(); + } // function _inverse_ncdf() + + + private static function _inverse_ncdf2($prob) { + // Approximation of inverse standard normal CDF developed by + // B. Moro, "The Full Monte," Risk 8(2), Feb 1995, 57-58. + + $a1 = 2.50662823884; + $a2 = -18.61500062529; + $a3 = 41.39119773534; + $a4 = -25.44106049637; + + $b1 = -8.4735109309; + $b2 = 23.08336743743; + $b3 = -21.06224101826; + $b4 = 3.13082909833; + + $c1 = 0.337475482272615; + $c2 = 0.976169019091719; + $c3 = 0.160797971491821; + $c4 = 2.76438810333863E-02; + $c5 = 3.8405729373609E-03; + $c6 = 3.951896511919E-04; + $c7 = 3.21767881768E-05; + $c8 = 2.888167364E-07; + $c9 = 3.960315187E-07; + + $y = $prob - 0.5; + if (abs($y) < 0.42) { + $z = ($y * $y); + $z = $y * ((($a4 * $z + $a3) * $z + $a2) * $z + $a1) / (((($b4 * $z + $b3) * $z + $b2) * $z + $b1) * $z + 1); + } else { + if ($y > 0) { + $z = log(-log(1 - $prob)); + } else { + $z = log(-log($prob)); + } + $z = $c1 + $z * ($c2 + $z * ($c3 + $z * ($c4 + $z * ($c5 + $z * ($c6 + $z * ($c7 + $z * ($c8 + $z * $c9))))))); + if ($y < 0) { + $z = -$z; + } + } + return $z; + } // function _inverse_ncdf2() + + + private static function _inverse_ncdf3($p) { + // ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3. + // Produces the normal deviate Z corresponding to a given lower + // tail area of P; Z is accurate to about 1 part in 10**16. + // + // This is a PHP version of the original FORTRAN code that can + // be found at http://lib.stat.cmu.edu/apstat/ + $split1 = 0.425; + $split2 = 5; + $const1 = 0.180625; + $const2 = 1.6; + + // coefficients for p close to 0.5 + $a0 = 3.3871328727963666080; + $a1 = 1.3314166789178437745E+2; + $a2 = 1.9715909503065514427E+3; + $a3 = 1.3731693765509461125E+4; + $a4 = 4.5921953931549871457E+4; + $a5 = 6.7265770927008700853E+4; + $a6 = 3.3430575583588128105E+4; + $a7 = 2.5090809287301226727E+3; + + $b1 = 4.2313330701600911252E+1; + $b2 = 6.8718700749205790830E+2; + $b3 = 5.3941960214247511077E+3; + $b4 = 2.1213794301586595867E+4; + $b5 = 3.9307895800092710610E+4; + $b6 = 2.8729085735721942674E+4; + $b7 = 5.2264952788528545610E+3; + + // coefficients for p not close to 0, 0.5 or 1. + $c0 = 1.42343711074968357734; + $c1 = 4.63033784615654529590; + $c2 = 5.76949722146069140550; + $c3 = 3.64784832476320460504; + $c4 = 1.27045825245236838258; + $c5 = 2.41780725177450611770E-1; + $c6 = 2.27238449892691845833E-2; + $c7 = 7.74545014278341407640E-4; + + $d1 = 2.05319162663775882187; + $d2 = 1.67638483018380384940; + $d3 = 6.89767334985100004550E-1; + $d4 = 1.48103976427480074590E-1; + $d5 = 1.51986665636164571966E-2; + $d6 = 5.47593808499534494600E-4; + $d7 = 1.05075007164441684324E-9; + + // coefficients for p near 0 or 1. + $e0 = 6.65790464350110377720; + $e1 = 5.46378491116411436990; + $e2 = 1.78482653991729133580; + $e3 = 2.96560571828504891230E-1; + $e4 = 2.65321895265761230930E-2; + $e5 = 1.24266094738807843860E-3; + $e6 = 2.71155556874348757815E-5; + $e7 = 2.01033439929228813265E-7; + + $f1 = 5.99832206555887937690E-1; + $f2 = 1.36929880922735805310E-1; + $f3 = 1.48753612908506148525E-2; + $f4 = 7.86869131145613259100E-4; + $f5 = 1.84631831751005468180E-5; + $f6 = 1.42151175831644588870E-7; + $f7 = 2.04426310338993978564E-15; + + $q = $p - 0.5; + + // computation for p close to 0.5 + if (abs($q) <= split1) { + $R = $const1 - $q * $q; + $z = $q * ((((((($a7 * $R + $a6) * $R + $a5) * $R + $a4) * $R + $a3) * $R + $a2) * $R + $a1) * $R + $a0) / + ((((((($b7 * $R + $b6) * $R + $b5) * $R + $b4) * $R + $b3) * $R + $b2) * $R + $b1) * $R + 1); + } else { + if ($q < 0) { + $R = $p; + } else { + $R = 1 - $p; + } + $R = pow(-log($R),2); + + // computation for p not close to 0, 0.5 or 1. + If ($R <= $split2) { + $R = $R - $const2; + $z = ((((((($c7 * $R + $c6) * $R + $c5) * $R + $c4) * $R + $c3) * $R + $c2) * $R + $c1) * $R + $c0) / + ((((((($d7 * $R + $d6) * $R + $d5) * $R + $d4) * $R + $d3) * $R + $d2) * $R + $d1) * $R + 1); + } else { + // computation for p near 0 or 1. + $R = $R - $split2; + $z = ((((((($e7 * $R + $e6) * $R + $e5) * $R + $e4) * $R + $e3) * $R + $e2) * $R + $e1) * $R + $e0) / + ((((((($f7 * $R + $f6) * $R + $f5) * $R + $f4) * $R + $f3) * $R + $f2) * $R + $f1) * $R + 1); + } + if ($q < 0) { + $z = -$z; + } + } + return $z; + } // function _inverse_ncdf3() + + + /** + * AVEDEV + * + * Returns the average of the absolute deviations of data points from their mean. + * AVEDEV is a measure of the variability in a data set. + * + * Excel Function: + * AVEDEV(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function AVEDEV() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + + // Return value + $returnValue = null; + + $aMean = self::AVERAGE($aArgs); + if ($aMean != PHPExcel_Calculation_Functions::DIV0()) { + $aCount = 0; + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + ((!PHPExcel_Calculation_Functions::isCellValue($k)) || (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE))) { + $arg = (integer) $arg; + } + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if (is_null($returnValue)) { + $returnValue = abs($arg - $aMean); + } else { + $returnValue += abs($arg - $aMean); + } + ++$aCount; + } + } + + // Return + if ($aCount == 0) { + return PHPExcel_Calculation_Functions::DIV0(); + } + return $returnValue / $aCount; + } + return PHPExcel_Calculation_Functions::NaN(); + } // function AVEDEV() + + + /** + * AVERAGE + * + * Returns the average (arithmetic mean) of the arguments + * + * Excel Function: + * AVERAGE(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function AVERAGE() { + $returnValue = $aCount = 0; + + // Loop through arguments + foreach (PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()) as $k => $arg) { + if ((is_bool($arg)) && + ((!PHPExcel_Calculation_Functions::isCellValue($k)) || (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE))) { + $arg = (integer) $arg; + } + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if (is_null($returnValue)) { + $returnValue = $arg; + } else { + $returnValue += $arg; + } + ++$aCount; + } + } + + // Return + if ($aCount > 0) { + return $returnValue / $aCount; + } else { + return PHPExcel_Calculation_Functions::DIV0(); + } + } // function AVERAGE() + + + /** + * AVERAGEA + * + * Returns the average of its arguments, including numbers, text, and logical values + * + * Excel Function: + * AVERAGEA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function AVERAGEA() { + // Return value + $returnValue = null; + + $aCount = 0; + // Loop through arguments + foreach (PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()) as $k => $arg) { + if ((is_bool($arg)) && + (!PHPExcel_Calculation_Functions::isMatrixValue($k))) { + } else { + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) && ($arg != '')))) { + if (is_bool($arg)) { + $arg = (integer) $arg; + } elseif (is_string($arg)) { + $arg = 0; + } + if (is_null($returnValue)) { + $returnValue = $arg; + } else { + $returnValue += $arg; + } + ++$aCount; + } + } + } + + // Return + if ($aCount > 0) { + return $returnValue / $aCount; + } else { + return PHPExcel_Calculation_Functions::DIV0(); + } + } // function AVERAGEA() + + + /** + * AVERAGEIF + * + * Returns the average value from a range of cells that contain numbers within the list of arguments + * + * Excel Function: + * AVERAGEIF(value1[,value2[, ...]],condition) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @param string $condition The criteria that defines which cells will be checked. + * @param mixed[] $averageArgs Data values + * @return float + */ + public static function AVERAGEIF($aArgs,$condition,$averageArgs = array()) { + // Return value + $returnValue = 0; + + $aArgs = PHPExcel_Calculation_Functions::flattenArray($aArgs); + $averageArgs = PHPExcel_Calculation_Functions::flattenArray($averageArgs); + if (empty($averageArgs)) { + $averageArgs = $aArgs; + } + $condition = PHPExcel_Calculation_Functions::_ifCondition($condition); + // Loop through arguments + $aCount = 0; + foreach ($aArgs as $key => $arg) { + if (!is_numeric($arg)) { $arg = PHPExcel_Calculation::_wrapResult(strtoupper($arg)); } + $testCondition = '='.$arg.$condition; + if (PHPExcel_Calculation::getInstance()->_calculateFormulaValue($testCondition)) { + if ((is_null($returnValue)) || ($arg > $returnValue)) { + $returnValue += $arg; + ++$aCount; + } + } + } + + // Return + if ($aCount > 0) { + return $returnValue / $aCount; + } else { + return PHPExcel_Calculation_Functions::DIV0(); + } + } // function AVERAGEIF() + + + /** + * BETADIST + * + * Returns the beta distribution. + * + * @param float $value Value at which you want to evaluate the distribution + * @param float $alpha Parameter to the distribution + * @param float $beta Parameter to the distribution + * @param boolean $cumulative + * @return float + * + */ + public static function BETADIST($value,$alpha,$beta,$rMin=0,$rMax=1) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $alpha = PHPExcel_Calculation_Functions::flattenSingleValue($alpha); + $beta = PHPExcel_Calculation_Functions::flattenSingleValue($beta); + $rMin = PHPExcel_Calculation_Functions::flattenSingleValue($rMin); + $rMax = PHPExcel_Calculation_Functions::flattenSingleValue($rMax); + + if ((is_numeric($value)) && (is_numeric($alpha)) && (is_numeric($beta)) && (is_numeric($rMin)) && (is_numeric($rMax))) { + if (($value < $rMin) || ($value > $rMax) || ($alpha <= 0) || ($beta <= 0) || ($rMin == $rMax)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($rMin > $rMax) { + $tmp = $rMin; + $rMin = $rMax; + $rMax = $tmp; + } + $value -= $rMin; + $value /= ($rMax - $rMin); + return self::_incompleteBeta($value,$alpha,$beta); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function BETADIST() + + + /** + * BETAINV + * + * Returns the inverse of the beta distribution. + * + * @param float $probability Probability at which you want to evaluate the distribution + * @param float $alpha Parameter to the distribution + * @param float $beta Parameter to the distribution + * @param float $rMin Minimum value + * @param float $rMax Maximum value + * @param boolean $cumulative + * @return float + * + */ + public static function BETAINV($probability,$alpha,$beta,$rMin=0,$rMax=1) { + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + $alpha = PHPExcel_Calculation_Functions::flattenSingleValue($alpha); + $beta = PHPExcel_Calculation_Functions::flattenSingleValue($beta); + $rMin = PHPExcel_Calculation_Functions::flattenSingleValue($rMin); + $rMax = PHPExcel_Calculation_Functions::flattenSingleValue($rMax); + + if ((is_numeric($probability)) && (is_numeric($alpha)) && (is_numeric($beta)) && (is_numeric($rMin)) && (is_numeric($rMax))) { + if (($alpha <= 0) || ($beta <= 0) || ($rMin == $rMax) || ($probability <= 0) || ($probability > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($rMin > $rMax) { + $tmp = $rMin; + $rMin = $rMax; + $rMax = $tmp; + } + $a = 0; + $b = 2; + + $i = 0; + while ((($b - $a) > PRECISION) && ($i++ < MAX_ITERATIONS)) { + $guess = ($a + $b) / 2; + $result = self::BETADIST($guess, $alpha, $beta); + if (($result == $probability) || ($result == 0)) { + $b = $a; + } elseif ($result > $probability) { + $b = $guess; + } else { + $a = $guess; + } + } + if ($i == MAX_ITERATIONS) { + return PHPExcel_Calculation_Functions::NA(); + } + return round($rMin + $guess * ($rMax - $rMin),12); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function BETAINV() + + + /** + * BINOMDIST + * + * Returns the individual term binomial distribution probability. Use BINOMDIST in problems with + * a fixed number of tests or trials, when the outcomes of any trial are only success or failure, + * when trials are independent, and when the probability of success is constant throughout the + * experiment. For example, BINOMDIST can calculate the probability that two of the next three + * babies born are male. + * + * @param float $value Number of successes in trials + * @param float $trials Number of trials + * @param float $probability Probability of success on each trial + * @param boolean $cumulative + * @return float + * + * @todo Cumulative distribution function + * + */ + public static function BINOMDIST($value, $trials, $probability, $cumulative) { + $value = floor(PHPExcel_Calculation_Functions::flattenSingleValue($value)); + $trials = floor(PHPExcel_Calculation_Functions::flattenSingleValue($trials)); + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + + if ((is_numeric($value)) && (is_numeric($trials)) && (is_numeric($probability))) { + if (($value < 0) || ($value > $trials)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($probability < 0) || ($probability > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ((is_numeric($cumulative)) || (is_bool($cumulative))) { + if ($cumulative) { + $summer = 0; + for ($i = 0; $i <= $value; ++$i) { + $summer += PHPExcel_Calculation_MathTrig::COMBIN($trials,$i) * pow($probability,$i) * pow(1 - $probability,$trials - $i); + } + return $summer; + } else { + return PHPExcel_Calculation_MathTrig::COMBIN($trials,$value) * pow($probability,$value) * pow(1 - $probability,$trials - $value) ; + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function BINOMDIST() + + + /** + * CHIDIST + * + * Returns the one-tailed probability of the chi-squared distribution. + * + * @param float $value Value for the function + * @param float $degrees degrees of freedom + * @return float + */ + public static function CHIDIST($value, $degrees) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $degrees = floor(PHPExcel_Calculation_Functions::flattenSingleValue($degrees)); + + if ((is_numeric($value)) && (is_numeric($degrees))) { + if ($degrees < 1) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($value < 0) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + return 1; + } + return PHPExcel_Calculation_Functions::NaN(); + } + return 1 - (self::_incompleteGamma($degrees/2,$value/2) / self::_gamma($degrees/2)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function CHIDIST() + + + /** + * CHIINV + * + * Returns the one-tailed probability of the chi-squared distribution. + * + * @param float $probability Probability for the function + * @param float $degrees degrees of freedom + * @return float + */ + public static function CHIINV($probability, $degrees) { + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + $degrees = floor(PHPExcel_Calculation_Functions::flattenSingleValue($degrees)); + + if ((is_numeric($probability)) && (is_numeric($degrees))) { + + $xLo = 100; + $xHi = 0; + + $x = $xNew = 1; + $dx = 1; + $i = 0; + + while ((abs($dx) > PRECISION) && ($i++ < MAX_ITERATIONS)) { + // Apply Newton-Raphson step + $result = self::CHIDIST($x, $degrees); + $error = $result - $probability; + if ($error == 0.0) { + $dx = 0; + } elseif ($error < 0.0) { + $xLo = $x; + } else { + $xHi = $x; + } + // Avoid division by zero + if ($result != 0.0) { + $dx = $error / $result; + $xNew = $x - $dx; + } + // If the NR fails to converge (which for example may be the + // case if the initial guess is too rough) we apply a bisection + // step to determine a more narrow interval around the root. + if (($xNew < $xLo) || ($xNew > $xHi) || ($result == 0.0)) { + $xNew = ($xLo + $xHi) / 2; + $dx = $xNew - $x; + } + $x = $xNew; + } + if ($i == MAX_ITERATIONS) { + return PHPExcel_Calculation_Functions::NA(); + } + return round($x,12); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function CHIINV() + + + /** + * CONFIDENCE + * + * Returns the confidence interval for a population mean + * + * @param float $alpha + * @param float $stdDev Standard Deviation + * @param float $size + * @return float + * + */ + public static function CONFIDENCE($alpha,$stdDev,$size) { + $alpha = PHPExcel_Calculation_Functions::flattenSingleValue($alpha); + $stdDev = PHPExcel_Calculation_Functions::flattenSingleValue($stdDev); + $size = floor(PHPExcel_Calculation_Functions::flattenSingleValue($size)); + + if ((is_numeric($alpha)) && (is_numeric($stdDev)) && (is_numeric($size))) { + if (($alpha <= 0) || ($alpha >= 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($stdDev <= 0) || ($size < 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return self::NORMSINV(1 - $alpha / 2) * $stdDev / sqrt($size); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function CONFIDENCE() + + + /** + * CORREL + * + * Returns covariance, the average of the products of deviations for each data point pair. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @return float + */ + public static function CORREL($yValues,$xValues=null) { + if ((is_null($xValues)) || (!is_array($yValues)) || (!is_array($xValues))) { + return PHPExcel_Calculation_Functions::VALUE(); + } + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues); + return $bestFitLinear->getCorrelation(); + } // function CORREL() + + + /** + * COUNT + * + * Counts the number of cells that contain numbers within the list of arguments + * + * Excel Function: + * COUNT(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return int + */ + public static function COUNT() { + // Return value + $returnValue = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + ((!PHPExcel_Calculation_Functions::isCellValue($k)) || (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE))) { + $arg = (integer) $arg; + } + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + ++$returnValue; + } + } + + // Return + return $returnValue; + } // function COUNT() + + + /** + * COUNTA + * + * Counts the number of cells that are not empty within the list of arguments + * + * Excel Function: + * COUNTA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return int + */ + public static function COUNTA() { + // Return value + $returnValue = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + // Is it a numeric, boolean or string value? + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) && ($arg != '')))) { + ++$returnValue; + } + } + + // Return + return $returnValue; + } // function COUNTA() + + + /** + * COUNTBLANK + * + * Counts the number of empty cells within the list of arguments + * + * Excel Function: + * COUNTBLANK(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return int + */ + public static function COUNTBLANK() { + // Return value + $returnValue = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + // Is it a blank cell? + if ((is_null($arg)) || ((is_string($arg)) && ($arg == ''))) { + ++$returnValue; + } + } + + // Return + return $returnValue; + } // function COUNTBLANK() + + + /** + * COUNTIF + * + * Counts the number of cells that contain numbers within the list of arguments + * + * Excel Function: + * COUNTIF(value1[,value2[, ...]],condition) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @param string $condition The criteria that defines which cells will be counted. + * @return int + */ + public static function COUNTIF($aArgs,$condition) { + // Return value + $returnValue = 0; + + $aArgs = PHPExcel_Calculation_Functions::flattenArray($aArgs); + $condition = PHPExcel_Calculation_Functions::_ifCondition($condition); + // Loop through arguments + foreach ($aArgs as $arg) { + if (!is_numeric($arg)) { $arg = PHPExcel_Calculation::_wrapResult(strtoupper($arg)); } + $testCondition = '='.$arg.$condition; + if (PHPExcel_Calculation::getInstance()->_calculateFormulaValue($testCondition)) { + // Is it a value within our criteria + ++$returnValue; + } + } + + // Return + return $returnValue; + } // function COUNTIF() + + + /** + * COVAR + * + * Returns covariance, the average of the products of deviations for each data point pair. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @return float + */ + public static function COVAR($yValues,$xValues) { + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues); + return $bestFitLinear->getCovariance(); + } // function COVAR() + + + /** + * CRITBINOM + * + * Returns the smallest value for which the cumulative binomial distribution is greater + * than or equal to a criterion value + * + * See http://support.microsoft.com/kb/828117/ for details of the algorithm used + * + * @param float $trials number of Bernoulli trials + * @param float $probability probability of a success on each trial + * @param float $alpha criterion value + * @return int + * + * @todo Warning. This implementation differs from the algorithm detailed on the MS + * web site in that $CumPGuessMinus1 = $CumPGuess - 1 rather than $CumPGuess - $PGuess + * This eliminates a potential endless loop error, but may have an adverse affect on the + * accuracy of the function (although all my tests have so far returned correct results). + * + */ + public static function CRITBINOM($trials, $probability, $alpha) { + $trials = floor(PHPExcel_Calculation_Functions::flattenSingleValue($trials)); + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + $alpha = PHPExcel_Calculation_Functions::flattenSingleValue($alpha); + + if ((is_numeric($trials)) && (is_numeric($probability)) && (is_numeric($alpha))) { + if ($trials < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($probability < 0) || ($probability > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($alpha < 0) || ($alpha > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($alpha <= 0.5) { + $t = sqrt(log(1 / ($alpha * $alpha))); + $trialsApprox = 0 - ($t + (2.515517 + 0.802853 * $t + 0.010328 * $t * $t) / (1 + 1.432788 * $t + 0.189269 * $t * $t + 0.001308 * $t * $t * $t)); + } else { + $t = sqrt(log(1 / pow(1 - $alpha,2))); + $trialsApprox = $t - (2.515517 + 0.802853 * $t + 0.010328 * $t * $t) / (1 + 1.432788 * $t + 0.189269 * $t * $t + 0.001308 * $t * $t * $t); + } + $Guess = floor($trials * $probability + $trialsApprox * sqrt($trials * $probability * (1 - $probability))); + if ($Guess < 0) { + $Guess = 0; + } elseif ($Guess > $trials) { + $Guess = $trials; + } + + $TotalUnscaledProbability = $UnscaledPGuess = $UnscaledCumPGuess = 0.0; + $EssentiallyZero = 10e-12; + + $m = floor($trials * $probability); + ++$TotalUnscaledProbability; + if ($m == $Guess) { ++$UnscaledPGuess; } + if ($m <= $Guess) { ++$UnscaledCumPGuess; } + + $PreviousValue = 1; + $Done = False; + $k = $m + 1; + while ((!$Done) && ($k <= $trials)) { + $CurrentValue = $PreviousValue * ($trials - $k + 1) * $probability / ($k * (1 - $probability)); + $TotalUnscaledProbability += $CurrentValue; + if ($k == $Guess) { $UnscaledPGuess += $CurrentValue; } + if ($k <= $Guess) { $UnscaledCumPGuess += $CurrentValue; } + if ($CurrentValue <= $EssentiallyZero) { $Done = True; } + $PreviousValue = $CurrentValue; + ++$k; + } + + $PreviousValue = 1; + $Done = False; + $k = $m - 1; + while ((!$Done) && ($k >= 0)) { + $CurrentValue = $PreviousValue * $k + 1 * (1 - $probability) / (($trials - $k) * $probability); + $TotalUnscaledProbability += $CurrentValue; + if ($k == $Guess) { $UnscaledPGuess += $CurrentValue; } + if ($k <= $Guess) { $UnscaledCumPGuess += $CurrentValue; } + if ($CurrentValue <= $EssentiallyZero) { $Done = True; } + $PreviousValue = $CurrentValue; + --$k; + } + + $PGuess = $UnscaledPGuess / $TotalUnscaledProbability; + $CumPGuess = $UnscaledCumPGuess / $TotalUnscaledProbability; + +// $CumPGuessMinus1 = $CumPGuess - $PGuess; + $CumPGuessMinus1 = $CumPGuess - 1; + + while (True) { + if (($CumPGuessMinus1 < $alpha) && ($CumPGuess >= $alpha)) { + return $Guess; + } elseif (($CumPGuessMinus1 < $alpha) && ($CumPGuess < $alpha)) { + $PGuessPlus1 = $PGuess * ($trials - $Guess) * $probability / $Guess / (1 - $probability); + $CumPGuessMinus1 = $CumPGuess; + $CumPGuess = $CumPGuess + $PGuessPlus1; + $PGuess = $PGuessPlus1; + ++$Guess; + } elseif (($CumPGuessMinus1 >= $alpha) && ($CumPGuess >= $alpha)) { + $PGuessMinus1 = $PGuess * $Guess * (1 - $probability) / ($trials - $Guess + 1) / $probability; + $CumPGuess = $CumPGuessMinus1; + $CumPGuessMinus1 = $CumPGuessMinus1 - $PGuess; + $PGuess = $PGuessMinus1; + --$Guess; + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function CRITBINOM() + + + /** + * DEVSQ + * + * Returns the sum of squares of deviations of data points from their sample mean. + * + * Excel Function: + * DEVSQ(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function DEVSQ() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + + // Return value + $returnValue = null; + + $aMean = self::AVERAGE($aArgs); + if ($aMean != PHPExcel_Calculation_Functions::DIV0()) { + $aCount = -1; + foreach ($aArgs as $k => $arg) { + // Is it a numeric value? + if ((is_bool($arg)) && + ((!PHPExcel_Calculation_Functions::isCellValue($k)) || (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE))) { + $arg = (integer) $arg; + } + if ((is_numeric($arg)) && (!is_string($arg))) { + if (is_null($returnValue)) { + $returnValue = pow(($arg - $aMean),2); + } else { + $returnValue += pow(($arg - $aMean),2); + } + ++$aCount; + } + } + + // Return + if (is_null($returnValue)) { + return PHPExcel_Calculation_Functions::NaN(); + } else { + return $returnValue; + } + } + return self::NA(); + } // function DEVSQ() + + + /** + * EXPONDIST + * + * Returns the exponential distribution. Use EXPONDIST to model the time between events, + * such as how long an automated bank teller takes to deliver cash. For example, you can + * use EXPONDIST to determine the probability that the process takes at most 1 minute. + * + * @param float $value Value of the function + * @param float $lambda The parameter value + * @param boolean $cumulative + * @return float + */ + public static function EXPONDIST($value, $lambda, $cumulative) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $lambda = PHPExcel_Calculation_Functions::flattenSingleValue($lambda); + $cumulative = PHPExcel_Calculation_Functions::flattenSingleValue($cumulative); + + if ((is_numeric($value)) && (is_numeric($lambda))) { + if (($value < 0) || ($lambda < 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ((is_numeric($cumulative)) || (is_bool($cumulative))) { + if ($cumulative) { + return 1 - exp(0-$value*$lambda); + } else { + return $lambda * exp(0-$value*$lambda); + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function EXPONDIST() + + + /** + * FISHER + * + * Returns the Fisher transformation at x. This transformation produces a function that + * is normally distributed rather than skewed. Use this function to perform hypothesis + * testing on the correlation coefficient. + * + * @param float $value + * @return float + */ + public static function FISHER($value) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + + if (is_numeric($value)) { + if (($value <= -1) || ($value >= 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return 0.5 * log((1+$value)/(1-$value)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function FISHER() + + + /** + * FISHERINV + * + * Returns the inverse of the Fisher transformation. Use this transformation when + * analyzing correlations between ranges or arrays of data. If y = FISHER(x), then + * FISHERINV(y) = x. + * + * @param float $value + * @return float + */ + public static function FISHERINV($value) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + + if (is_numeric($value)) { + return (exp(2 * $value) - 1) / (exp(2 * $value) + 1); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function FISHERINV() + + + /** + * FORECAST + * + * Calculates, or predicts, a future value by using existing values. The predicted value is a y-value for a given x-value. + * + * @param float Value of X for which we want to find Y + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @return float + */ + public static function FORECAST($xValue,$yValues,$xValues) { + $xValue = PHPExcel_Calculation_Functions::flattenSingleValue($xValue); + if (!is_numeric($xValue)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues); + return $bestFitLinear->getValueOfYForX($xValue); + } // function FORECAST() + + + /** + * GAMMADIST + * + * Returns the gamma distribution. + * + * @param float $value Value at which you want to evaluate the distribution + * @param float $a Parameter to the distribution + * @param float $b Parameter to the distribution + * @param boolean $cumulative + * @return float + * + */ + public static function GAMMADIST($value,$a,$b,$cumulative) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $a = PHPExcel_Calculation_Functions::flattenSingleValue($a); + $b = PHPExcel_Calculation_Functions::flattenSingleValue($b); + + if ((is_numeric($value)) && (is_numeric($a)) && (is_numeric($b))) { + if (($value < 0) || ($a <= 0) || ($b <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ((is_numeric($cumulative)) || (is_bool($cumulative))) { + if ($cumulative) { + return self::_incompleteGamma($a,$value / $b) / self::_gamma($a); + } else { + return (1 / (pow($b,$a) * self::_gamma($a))) * pow($value,$a-1) * exp(0-($value / $b)); + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function GAMMADIST() + + + /** + * GAMMAINV + * + * Returns the inverse of the beta distribution. + * + * @param float $probability Probability at which you want to evaluate the distribution + * @param float $alpha Parameter to the distribution + * @param float $beta Parameter to the distribution + * @return float + * + */ + public static function GAMMAINV($probability,$alpha,$beta) { + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + $alpha = PHPExcel_Calculation_Functions::flattenSingleValue($alpha); + $beta = PHPExcel_Calculation_Functions::flattenSingleValue($beta); + + if ((is_numeric($probability)) && (is_numeric($alpha)) && (is_numeric($beta))) { + if (($alpha <= 0) || ($beta <= 0) || ($probability < 0) || ($probability > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $xLo = 0; + $xHi = $alpha * $beta * 5; + + $x = $xNew = 1; + $error = $pdf = 0; + $dx = 1024; + $i = 0; + + while ((abs($dx) > PRECISION) && ($i++ < MAX_ITERATIONS)) { + // Apply Newton-Raphson step + $error = self::GAMMADIST($x, $alpha, $beta, True) - $probability; + if ($error < 0.0) { + $xLo = $x; + } else { + $xHi = $x; + } + $pdf = self::GAMMADIST($x, $alpha, $beta, False); + // Avoid division by zero + if ($pdf != 0.0) { + $dx = $error / $pdf; + $xNew = $x - $dx; + } + // If the NR fails to converge (which for example may be the + // case if the initial guess is too rough) we apply a bisection + // step to determine a more narrow interval around the root. + if (($xNew < $xLo) || ($xNew > $xHi) || ($pdf == 0.0)) { + $xNew = ($xLo + $xHi) / 2; + $dx = $xNew - $x; + } + $x = $xNew; + } + if ($i == MAX_ITERATIONS) { + return PHPExcel_Calculation_Functions::NA(); + } + return $x; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function GAMMAINV() + + + /** + * GAMMALN + * + * Returns the natural logarithm of the gamma function. + * + * @param float $value + * @return float + */ + public static function GAMMALN($value) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + + if (is_numeric($value)) { + if ($value <= 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return log(self::_gamma($value)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function GAMMALN() + + + /** + * GEOMEAN + * + * Returns the geometric mean of an array or range of positive data. For example, you + * can use GEOMEAN to calculate average growth rate given compound interest with + * variable rates. + * + * Excel Function: + * GEOMEAN(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function GEOMEAN() { + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + $aMean = PHPExcel_Calculation_MathTrig::PRODUCT($aArgs); + if (is_numeric($aMean) && ($aMean > 0)) { + $aCount = self::COUNT($aArgs) ; + if (self::MIN($aArgs) > 0) { + return pow($aMean, (1 / $aCount)); + } + } + return PHPExcel_Calculation_Functions::NaN(); + } // GEOMEAN() + + + /** + * GROWTH + * + * Returns values along a predicted emponential trend + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @param array of mixed Values of X for which we want to find Y + * @param boolean A logical value specifying whether to force the intersect to equal 0. + * @return array of float + */ + public static function GROWTH($yValues,$xValues=array(),$newValues=array(),$const=True) { + $yValues = PHPExcel_Calculation_Functions::flattenArray($yValues); + $xValues = PHPExcel_Calculation_Functions::flattenArray($xValues); + $newValues = PHPExcel_Calculation_Functions::flattenArray($newValues); + $const = (is_null($const)) ? True : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($const); + + $bestFitExponential = trendClass::calculate(trendClass::TREND_EXPONENTIAL,$yValues,$xValues,$const); + if (empty($newValues)) { + $newValues = $bestFitExponential->getXValues(); + } + + $returnArray = array(); + foreach($newValues as $xValue) { + $returnArray[0][] = $bestFitExponential->getValueOfYForX($xValue); + } + + return $returnArray; + } // function GROWTH() + + + /** + * HARMEAN + * + * Returns the harmonic mean of a data set. The harmonic mean is the reciprocal of the + * arithmetic mean of reciprocals. + * + * Excel Function: + * HARMEAN(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function HARMEAN() { + // Return value + $returnValue = PHPExcel_Calculation_Functions::NA(); + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + if (self::MIN($aArgs) < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + $aCount = 0; + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if ($arg <= 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (is_null($returnValue)) { + $returnValue = (1 / $arg); + } else { + $returnValue += (1 / $arg); + } + ++$aCount; + } + } + + // Return + if ($aCount > 0) { + return 1 / ($returnValue / $aCount); + } else { + return $returnValue; + } + } // function HARMEAN() + + + /** + * HYPGEOMDIST + * + * Returns the hypergeometric distribution. HYPGEOMDIST returns the probability of a given number of + * sample successes, given the sample size, population successes, and population size. + * + * @param float $sampleSuccesses Number of successes in the sample + * @param float $sampleNumber Size of the sample + * @param float $populationSuccesses Number of successes in the population + * @param float $populationNumber Population size + * @return float + * + */ + public static function HYPGEOMDIST($sampleSuccesses, $sampleNumber, $populationSuccesses, $populationNumber) { + $sampleSuccesses = floor(PHPExcel_Calculation_Functions::flattenSingleValue($sampleSuccesses)); + $sampleNumber = floor(PHPExcel_Calculation_Functions::flattenSingleValue($sampleNumber)); + $populationSuccesses = floor(PHPExcel_Calculation_Functions::flattenSingleValue($populationSuccesses)); + $populationNumber = floor(PHPExcel_Calculation_Functions::flattenSingleValue($populationNumber)); + + if ((is_numeric($sampleSuccesses)) && (is_numeric($sampleNumber)) && (is_numeric($populationSuccesses)) && (is_numeric($populationNumber))) { + if (($sampleSuccesses < 0) || ($sampleSuccesses > $sampleNumber) || ($sampleSuccesses > $populationSuccesses)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($sampleNumber <= 0) || ($sampleNumber > $populationNumber)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($populationSuccesses <= 0) || ($populationSuccesses > $populationNumber)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return PHPExcel_Calculation_MathTrig::COMBIN($populationSuccesses,$sampleSuccesses) * + PHPExcel_Calculation_MathTrig::COMBIN($populationNumber - $populationSuccesses,$sampleNumber - $sampleSuccesses) / + PHPExcel_Calculation_MathTrig::COMBIN($populationNumber,$sampleNumber); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function HYPGEOMDIST() + + + /** + * INTERCEPT + * + * Calculates the point at which a line will intersect the y-axis by using existing x-values and y-values. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @return float + */ + public static function INTERCEPT($yValues,$xValues) { + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues); + return $bestFitLinear->getIntersect(); + } // function INTERCEPT() + + + /** + * KURT + * + * Returns the kurtosis of a data set. Kurtosis characterizes the relative peakedness + * or flatness of a distribution compared with the normal distribution. Positive + * kurtosis indicates a relatively peaked distribution. Negative kurtosis indicates a + * relatively flat distribution. + * + * @param array Data Series + * @return float + */ + public static function KURT() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + $mean = self::AVERAGE($aArgs); + $stdDev = self::STDEV($aArgs); + + if ($stdDev > 0) { + $count = $summer = 0; + // Loop through arguments + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + (!PHPExcel_Calculation_Functions::isMatrixValue($k))) { + } else { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $summer += pow((($arg - $mean) / $stdDev),4) ; + ++$count; + } + } + } + + // Return + if ($count > 3) { + return $summer * ($count * ($count+1) / (($count-1) * ($count-2) * ($count-3))) - (3 * pow($count-1,2) / (($count-2) * ($count-3))); + } + } + return PHPExcel_Calculation_Functions::DIV0(); + } // function KURT() + + + /** + * LARGE + * + * Returns the nth largest value in a data set. You can use this function to + * select a value based on its relative standing. + * + * Excel Function: + * LARGE(value1[,value2[, ...]],entry) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @param int $entry Position (ordered from the largest) in the array or range of data to return + * @return float + * + */ + public static function LARGE() { + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + // Calculate + $entry = floor(array_pop($aArgs)); + + if ((is_numeric($entry)) && (!is_string($entry))) { + $mArgs = array(); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $mArgs[] = $arg; + } + } + $count = self::COUNT($mArgs); + $entry = floor(--$entry); + if (($entry < 0) || ($entry >= $count) || ($count == 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + rsort($mArgs); + return $mArgs[$entry]; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function LARGE() + + + /** + * LINEST + * + * Calculates the statistics for a line by using the "least squares" method to calculate a straight line that best fits your data, + * and then returns an array that describes the line. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @param boolean A logical value specifying whether to force the intersect to equal 0. + * @param boolean A logical value specifying whether to return additional regression statistics. + * @return array + */ + public static function LINEST($yValues, $xValues = NULL, $const = TRUE, $stats = FALSE) { + $const = (is_null($const)) ? TRUE : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($const); + $stats = (is_null($stats)) ? FALSE : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($stats); + if (is_null($xValues)) $xValues = range(1,count(PHPExcel_Calculation_Functions::flattenArray($yValues))); + + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return 0; + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues,$const); + if ($stats) { + return array( array( $bestFitLinear->getSlope(), + $bestFitLinear->getSlopeSE(), + $bestFitLinear->getGoodnessOfFit(), + $bestFitLinear->getF(), + $bestFitLinear->getSSRegression(), + ), + array( $bestFitLinear->getIntersect(), + $bestFitLinear->getIntersectSE(), + $bestFitLinear->getStdevOfResiduals(), + $bestFitLinear->getDFResiduals(), + $bestFitLinear->getSSResiduals() + ) + ); + } else { + return array( $bestFitLinear->getSlope(), + $bestFitLinear->getIntersect() + ); + } + } // function LINEST() + + + /** + * LOGEST + * + * Calculates an exponential curve that best fits the X and Y data series, + * and then returns an array that describes the line. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @param boolean A logical value specifying whether to force the intersect to equal 0. + * @param boolean A logical value specifying whether to return additional regression statistics. + * @return array + */ + public static function LOGEST($yValues,$xValues=null,$const=True,$stats=False) { + $const = (is_null($const)) ? True : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($const); + $stats = (is_null($stats)) ? False : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($stats); + if (is_null($xValues)) $xValues = range(1,count(PHPExcel_Calculation_Functions::flattenArray($yValues))); + + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + foreach($yValues as $value) { + if ($value <= 0.0) { + return PHPExcel_Calculation_Functions::NaN(); + } + } + + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return 1; + } + + $bestFitExponential = trendClass::calculate(trendClass::TREND_EXPONENTIAL,$yValues,$xValues,$const); + if ($stats) { + return array( array( $bestFitExponential->getSlope(), + $bestFitExponential->getSlopeSE(), + $bestFitExponential->getGoodnessOfFit(), + $bestFitExponential->getF(), + $bestFitExponential->getSSRegression(), + ), + array( $bestFitExponential->getIntersect(), + $bestFitExponential->getIntersectSE(), + $bestFitExponential->getStdevOfResiduals(), + $bestFitExponential->getDFResiduals(), + $bestFitExponential->getSSResiduals() + ) + ); + } else { + return array( $bestFitExponential->getSlope(), + $bestFitExponential->getIntersect() + ); + } + } // function LOGEST() + + + /** + * LOGINV + * + * Returns the inverse of the normal cumulative distribution + * + * @param float $probability + * @param float $mean + * @param float $stdDev + * @return float + * + * @todo Try implementing P J Acklam's refinement algorithm for greater + * accuracy if I can get my head round the mathematics + * (as described at) http://home.online.no/~pjacklam/notes/invnorm/ + */ + public static function LOGINV($probability, $mean, $stdDev) { + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + $mean = PHPExcel_Calculation_Functions::flattenSingleValue($mean); + $stdDev = PHPExcel_Calculation_Functions::flattenSingleValue($stdDev); + + if ((is_numeric($probability)) && (is_numeric($mean)) && (is_numeric($stdDev))) { + if (($probability < 0) || ($probability > 1) || ($stdDev <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return exp($mean + $stdDev * self::NORMSINV($probability)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function LOGINV() + + + /** + * LOGNORMDIST + * + * Returns the cumulative lognormal distribution of x, where ln(x) is normally distributed + * with parameters mean and standard_dev. + * + * @param float $value + * @param float $mean + * @param float $stdDev + * @return float + */ + public static function LOGNORMDIST($value, $mean, $stdDev) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $mean = PHPExcel_Calculation_Functions::flattenSingleValue($mean); + $stdDev = PHPExcel_Calculation_Functions::flattenSingleValue($stdDev); + + if ((is_numeric($value)) && (is_numeric($mean)) && (is_numeric($stdDev))) { + if (($value <= 0) || ($stdDev <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return self::NORMSDIST((log($value) - $mean) / $stdDev); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function LOGNORMDIST() + + + /** + * MAX + * + * MAX returns the value of the element of the values passed that has the highest value, + * with negative numbers considered smaller than positive numbers. + * + * Excel Function: + * MAX(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function MAX() { + // Return value + $returnValue = null; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if ((is_null($returnValue)) || ($arg > $returnValue)) { + $returnValue = $arg; + } + } + } + + // Return + if(is_null($returnValue)) { + return 0; + } + return $returnValue; + } // function MAX() + + + /** + * MAXA + * + * Returns the greatest value in a list of arguments, including numbers, text, and logical values + * + * Excel Function: + * MAXA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function MAXA() { + // Return value + $returnValue = null; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) && ($arg != '')))) { + if (is_bool($arg)) { + $arg = (integer) $arg; + } elseif (is_string($arg)) { + $arg = 0; + } + if ((is_null($returnValue)) || ($arg > $returnValue)) { + $returnValue = $arg; + } + } + } + + // Return + if(is_null($returnValue)) { + return 0; + } + return $returnValue; + } // function MAXA() + + + /** + * MAXIF + * + * Counts the maximum value within a range of cells that contain numbers within the list of arguments + * + * Excel Function: + * MAXIF(value1[,value2[, ...]],condition) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @param string $condition The criteria that defines which cells will be checked. + * @return float + */ + public static function MAXIF($aArgs,$condition,$sumArgs = array()) { + // Return value + $returnValue = null; + + $aArgs = PHPExcel_Calculation_Functions::flattenArray($aArgs); + $sumArgs = PHPExcel_Calculation_Functions::flattenArray($sumArgs); + if (empty($sumArgs)) { + $sumArgs = $aArgs; + } + $condition = PHPExcel_Calculation_Functions::_ifCondition($condition); + // Loop through arguments + foreach ($aArgs as $key => $arg) { + if (!is_numeric($arg)) { $arg = PHPExcel_Calculation::_wrapResult(strtoupper($arg)); } + $testCondition = '='.$arg.$condition; + if (PHPExcel_Calculation::getInstance()->_calculateFormulaValue($testCondition)) { + if ((is_null($returnValue)) || ($arg > $returnValue)) { + $returnValue = $arg; + } + } + } + + // Return + return $returnValue; + } // function MAXIF() + + + /** + * MEDIAN + * + * Returns the median of the given numbers. The median is the number in the middle of a set of numbers. + * + * Excel Function: + * MEDIAN(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function MEDIAN() { + // Return value + $returnValue = PHPExcel_Calculation_Functions::NaN(); + + $mArgs = array(); + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $mArgs[] = $arg; + } + } + + $mValueCount = count($mArgs); + if ($mValueCount > 0) { + sort($mArgs,SORT_NUMERIC); + $mValueCount = $mValueCount / 2; + if ($mValueCount == floor($mValueCount)) { + $returnValue = ($mArgs[$mValueCount--] + $mArgs[$mValueCount]) / 2; + } else { + $mValueCount == floor($mValueCount); + $returnValue = $mArgs[$mValueCount]; + } + } + + // Return + return $returnValue; + } // function MEDIAN() + + + /** + * MIN + * + * MIN returns the value of the element of the values passed that has the smallest value, + * with negative numbers considered smaller than positive numbers. + * + * Excel Function: + * MIN(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function MIN() { + // Return value + $returnValue = null; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if ((is_null($returnValue)) || ($arg < $returnValue)) { + $returnValue = $arg; + } + } + } + + // Return + if(is_null($returnValue)) { + return 0; + } + return $returnValue; + } // function MIN() + + + /** + * MINA + * + * Returns the smallest value in a list of arguments, including numbers, text, and logical values + * + * Excel Function: + * MINA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function MINA() { + // Return value + $returnValue = null; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) && ($arg != '')))) { + if (is_bool($arg)) { + $arg = (integer) $arg; + } elseif (is_string($arg)) { + $arg = 0; + } + if ((is_null($returnValue)) || ($arg < $returnValue)) { + $returnValue = $arg; + } + } + } + + // Return + if(is_null($returnValue)) { + return 0; + } + return $returnValue; + } // function MINA() + + + /** + * MINIF + * + * Returns the minimum value within a range of cells that contain numbers within the list of arguments + * + * Excel Function: + * MINIF(value1[,value2[, ...]],condition) + * + * @access public + * @category Mathematical and Trigonometric Functions + * @param mixed $arg,... Data values + * @param string $condition The criteria that defines which cells will be checked. + * @return float + */ + public static function MINIF($aArgs,$condition,$sumArgs = array()) { + // Return value + $returnValue = null; + + $aArgs = PHPExcel_Calculation_Functions::flattenArray($aArgs); + $sumArgs = PHPExcel_Calculation_Functions::flattenArray($sumArgs); + if (empty($sumArgs)) { + $sumArgs = $aArgs; + } + $condition = PHPExcel_Calculation_Functions::_ifCondition($condition); + // Loop through arguments + foreach ($aArgs as $key => $arg) { + if (!is_numeric($arg)) { $arg = PHPExcel_Calculation::_wrapResult(strtoupper($arg)); } + $testCondition = '='.$arg.$condition; + if (PHPExcel_Calculation::getInstance()->_calculateFormulaValue($testCondition)) { + if ((is_null($returnValue)) || ($arg < $returnValue)) { + $returnValue = $arg; + } + } + } + + // Return + return $returnValue; + } // function MINIF() + + + // + // Special variant of array_count_values that isn't limited to strings and integers, + // but can work with floating point numbers as values + // + private static function _modeCalc($data) { + $frequencyArray = array(); + foreach($data as $datum) { + $found = False; + foreach($frequencyArray as $key => $value) { + if ((string) $value['value'] == (string) $datum) { + ++$frequencyArray[$key]['frequency']; + $found = True; + break; + } + } + if (!$found) { + $frequencyArray[] = array('value' => $datum, + 'frequency' => 1 ); + } + } + + foreach($frequencyArray as $key => $value) { + $frequencyList[$key] = $value['frequency']; + $valueList[$key] = $value['value']; + } + array_multisort($frequencyList, SORT_DESC, $valueList, SORT_ASC, SORT_NUMERIC, $frequencyArray); + + if ($frequencyArray[0]['frequency'] == 1) { + return PHPExcel_Calculation_Functions::NA(); + } + return $frequencyArray[0]['value']; + } // function _modeCalc() + + + /** + * MODE + * + * Returns the most frequently occurring, or repetitive, value in an array or range of data + * + * Excel Function: + * MODE(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function MODE() { + // Return value + $returnValue = PHPExcel_Calculation_Functions::NA(); + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + $mArgs = array(); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $mArgs[] = $arg; + } + } + + if (!empty($mArgs)) { + return self::_modeCalc($mArgs); + } + + // Return + return $returnValue; + } // function MODE() + + + /** + * NEGBINOMDIST + * + * Returns the negative binomial distribution. NEGBINOMDIST returns the probability that + * there will be number_f failures before the number_s-th success, when the constant + * probability of a success is probability_s. This function is similar to the binomial + * distribution, except that the number of successes is fixed, and the number of trials is + * variable. Like the binomial, trials are assumed to be independent. + * + * @param float $failures Number of Failures + * @param float $successes Threshold number of Successes + * @param float $probability Probability of success on each trial + * @return float + * + */ + public static function NEGBINOMDIST($failures, $successes, $probability) { + $failures = floor(PHPExcel_Calculation_Functions::flattenSingleValue($failures)); + $successes = floor(PHPExcel_Calculation_Functions::flattenSingleValue($successes)); + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + + if ((is_numeric($failures)) && (is_numeric($successes)) && (is_numeric($probability))) { + if (($failures < 0) || ($successes < 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (($probability < 0) || ($probability > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC) { + if (($failures + $successes - 1) <= 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + } + return (PHPExcel_Calculation_MathTrig::COMBIN($failures + $successes - 1,$successes - 1)) * (pow($probability,$successes)) * (pow(1 - $probability,$failures)) ; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function NEGBINOMDIST() + + + /** + * NORMDIST + * + * Returns the normal distribution for the specified mean and standard deviation. This + * function has a very wide range of applications in statistics, including hypothesis + * testing. + * + * @param float $value + * @param float $mean Mean Value + * @param float $stdDev Standard Deviation + * @param boolean $cumulative + * @return float + * + */ + public static function NORMDIST($value, $mean, $stdDev, $cumulative) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $mean = PHPExcel_Calculation_Functions::flattenSingleValue($mean); + $stdDev = PHPExcel_Calculation_Functions::flattenSingleValue($stdDev); + + if ((is_numeric($value)) && (is_numeric($mean)) && (is_numeric($stdDev))) { + if ($stdDev < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ((is_numeric($cumulative)) || (is_bool($cumulative))) { + if ($cumulative) { + return 0.5 * (1 + PHPExcel_Calculation_Engineering::_erfVal(($value - $mean) / ($stdDev * sqrt(2)))); + } else { + return (1 / (SQRT2PI * $stdDev)) * exp(0 - (pow($value - $mean,2) / (2 * ($stdDev * $stdDev)))); + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function NORMDIST() + + + /** + * NORMINV + * + * Returns the inverse of the normal cumulative distribution for the specified mean and standard deviation. + * + * @param float $value + * @param float $mean Mean Value + * @param float $stdDev Standard Deviation + * @return float + * + */ + public static function NORMINV($probability,$mean,$stdDev) { + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + $mean = PHPExcel_Calculation_Functions::flattenSingleValue($mean); + $stdDev = PHPExcel_Calculation_Functions::flattenSingleValue($stdDev); + + if ((is_numeric($probability)) && (is_numeric($mean)) && (is_numeric($stdDev))) { + if (($probability < 0) || ($probability > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ($stdDev < 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return (self::_inverse_ncdf($probability) * $stdDev) + $mean; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function NORMINV() + + + /** + * NORMSDIST + * + * Returns the standard normal cumulative distribution function. The distribution has + * a mean of 0 (zero) and a standard deviation of one. Use this function in place of a + * table of standard normal curve areas. + * + * @param float $value + * @return float + */ + public static function NORMSDIST($value) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + + return self::NORMDIST($value, 0, 1, True); + } // function NORMSDIST() + + + /** + * NORMSINV + * + * Returns the inverse of the standard normal cumulative distribution + * + * @param float $value + * @return float + */ + public static function NORMSINV($value) { + return self::NORMINV($value, 0, 1); + } // function NORMSINV() + + + /** + * PERCENTILE + * + * Returns the nth percentile of values in a range.. + * + * Excel Function: + * PERCENTILE(value1[,value2[, ...]],entry) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @param float $entry Percentile value in the range 0..1, inclusive. + * @return float + */ + public static function PERCENTILE() { + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + // Calculate + $entry = array_pop($aArgs); + + if ((is_numeric($entry)) && (!is_string($entry))) { + if (($entry < 0) || ($entry > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $mArgs = array(); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $mArgs[] = $arg; + } + } + $mValueCount = count($mArgs); + if ($mValueCount > 0) { + sort($mArgs); + $count = self::COUNT($mArgs); + $index = $entry * ($count-1); + $iBase = floor($index); + if ($index == $iBase) { + return $mArgs[$index]; + } else { + $iNext = $iBase + 1; + $iProportion = $index - $iBase; + return $mArgs[$iBase] + (($mArgs[$iNext] - $mArgs[$iBase]) * $iProportion) ; + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function PERCENTILE() + + + /** + * PERCENTRANK + * + * Returns the rank of a value in a data set as a percentage of the data set. + * + * @param array of number An array of, or a reference to, a list of numbers. + * @param number The number whose rank you want to find. + * @param number The number of significant digits for the returned percentage value. + * @return float + */ + public static function PERCENTRANK($valueSet,$value,$significance=3) { + $valueSet = PHPExcel_Calculation_Functions::flattenArray($valueSet); + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $significance = (is_null($significance)) ? 3 : (integer) PHPExcel_Calculation_Functions::flattenSingleValue($significance); + + foreach($valueSet as $key => $valueEntry) { + if (!is_numeric($valueEntry)) { + unset($valueSet[$key]); + } + } + sort($valueSet,SORT_NUMERIC); + $valueCount = count($valueSet); + if ($valueCount == 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + + $valueAdjustor = $valueCount - 1; + if (($value < $valueSet[0]) || ($value > $valueSet[$valueAdjustor])) { + return PHPExcel_Calculation_Functions::NA(); + } + + $pos = array_search($value,$valueSet); + if ($pos === False) { + $pos = 0; + $testValue = $valueSet[0]; + while ($testValue < $value) { + $testValue = $valueSet[++$pos]; + } + --$pos; + $pos += (($value - $valueSet[$pos]) / ($testValue - $valueSet[$pos])); + } + + return round($pos / $valueAdjustor,$significance); + } // function PERCENTRANK() + + + /** + * PERMUT + * + * Returns the number of permutations for a given number of objects that can be + * selected from number objects. A permutation is any set or subset of objects or + * events where internal order is significant. Permutations are different from + * combinations, for which the internal order is not significant. Use this function + * for lottery-style probability calculations. + * + * @param int $numObjs Number of different objects + * @param int $numInSet Number of objects in each permutation + * @return int Number of permutations + */ + public static function PERMUT($numObjs,$numInSet) { + $numObjs = PHPExcel_Calculation_Functions::flattenSingleValue($numObjs); + $numInSet = PHPExcel_Calculation_Functions::flattenSingleValue($numInSet); + + if ((is_numeric($numObjs)) && (is_numeric($numInSet))) { + $numInSet = floor($numInSet); + if ($numObjs < $numInSet) { + return PHPExcel_Calculation_Functions::NaN(); + } + return round(PHPExcel_Calculation_MathTrig::FACT($numObjs) / PHPExcel_Calculation_MathTrig::FACT($numObjs - $numInSet)); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function PERMUT() + + + /** + * POISSON + * + * Returns the Poisson distribution. A common application of the Poisson distribution + * is predicting the number of events over a specific time, such as the number of + * cars arriving at a toll plaza in 1 minute. + * + * @param float $value + * @param float $mean Mean Value + * @param boolean $cumulative + * @return float + * + */ + public static function POISSON($value, $mean, $cumulative) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $mean = PHPExcel_Calculation_Functions::flattenSingleValue($mean); + + if ((is_numeric($value)) && (is_numeric($mean))) { + if (($value <= 0) || ($mean <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ((is_numeric($cumulative)) || (is_bool($cumulative))) { + if ($cumulative) { + $summer = 0; + for ($i = 0; $i <= floor($value); ++$i) { + $summer += pow($mean,$i) / PHPExcel_Calculation_MathTrig::FACT($i); + } + return exp(0-$mean) * $summer; + } else { + return (exp(0-$mean) * pow($mean,$value)) / PHPExcel_Calculation_MathTrig::FACT($value); + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function POISSON() + + + /** + * QUARTILE + * + * Returns the quartile of a data set. + * + * Excel Function: + * QUARTILE(value1[,value2[, ...]],entry) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @param int $entry Quartile value in the range 1..3, inclusive. + * @return float + */ + public static function QUARTILE() { + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + // Calculate + $entry = floor(array_pop($aArgs)); + + if ((is_numeric($entry)) && (!is_string($entry))) { + $entry /= 4; + if (($entry < 0) || ($entry > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + return self::PERCENTILE($aArgs,$entry); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function QUARTILE() + + + /** + * RANK + * + * Returns the rank of a number in a list of numbers. + * + * @param number The number whose rank you want to find. + * @param array of number An array of, or a reference to, a list of numbers. + * @param mixed Order to sort the values in the value set + * @return float + */ + public static function RANK($value,$valueSet,$order=0) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $valueSet = PHPExcel_Calculation_Functions::flattenArray($valueSet); + $order = (is_null($order)) ? 0 : (integer) PHPExcel_Calculation_Functions::flattenSingleValue($order); + + foreach($valueSet as $key => $valueEntry) { + if (!is_numeric($valueEntry)) { + unset($valueSet[$key]); + } + } + + if ($order == 0) { + rsort($valueSet,SORT_NUMERIC); + } else { + sort($valueSet,SORT_NUMERIC); + } + $pos = array_search($value,$valueSet); + if ($pos === False) { + return PHPExcel_Calculation_Functions::NA(); + } + + return ++$pos; + } // function RANK() + + + /** + * RSQ + * + * Returns the square of the Pearson product moment correlation coefficient through data points in known_y's and known_x's. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @return float + */ + public static function RSQ($yValues,$xValues) { + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues); + return $bestFitLinear->getGoodnessOfFit(); + } // function RSQ() + + + /** + * SKEW + * + * Returns the skewness of a distribution. Skewness characterizes the degree of asymmetry + * of a distribution around its mean. Positive skewness indicates a distribution with an + * asymmetric tail extending toward more positive values. Negative skewness indicates a + * distribution with an asymmetric tail extending toward more negative values. + * + * @param array Data Series + * @return float + */ + public static function SKEW() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + $mean = self::AVERAGE($aArgs); + $stdDev = self::STDEV($aArgs); + + $count = $summer = 0; + // Loop through arguments + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + (!PHPExcel_Calculation_Functions::isMatrixValue($k))) { + } else { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $summer += pow((($arg - $mean) / $stdDev),3) ; + ++$count; + } + } + } + + // Return + if ($count > 2) { + return $summer * ($count / (($count-1) * ($count-2))); + } + return PHPExcel_Calculation_Functions::DIV0(); + } // function SKEW() + + + /** + * SLOPE + * + * Returns the slope of the linear regression line through data points in known_y's and known_x's. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @return float + */ + public static function SLOPE($yValues,$xValues) { + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues); + return $bestFitLinear->getSlope(); + } // function SLOPE() + + + /** + * SMALL + * + * Returns the nth smallest value in a data set. You can use this function to + * select a value based on its relative standing. + * + * Excel Function: + * SMALL(value1[,value2[, ...]],entry) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @param int $entry Position (ordered from the smallest) in the array or range of data to return + * @return float + */ + public static function SMALL() { + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + // Calculate + $entry = array_pop($aArgs); + + if ((is_numeric($entry)) && (!is_string($entry))) { + $mArgs = array(); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $mArgs[] = $arg; + } + } + $count = self::COUNT($mArgs); + $entry = floor(--$entry); + if (($entry < 0) || ($entry >= $count) || ($count == 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + sort($mArgs); + return $mArgs[$entry]; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SMALL() + + + /** + * STANDARDIZE + * + * Returns a normalized value from a distribution characterized by mean and standard_dev. + * + * @param float $value Value to normalize + * @param float $mean Mean Value + * @param float $stdDev Standard Deviation + * @return float Standardized value + */ + public static function STANDARDIZE($value,$mean,$stdDev) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $mean = PHPExcel_Calculation_Functions::flattenSingleValue($mean); + $stdDev = PHPExcel_Calculation_Functions::flattenSingleValue($stdDev); + + if ((is_numeric($value)) && (is_numeric($mean)) && (is_numeric($stdDev))) { + if ($stdDev <= 0) { + return PHPExcel_Calculation_Functions::NaN(); + } + return ($value - $mean) / $stdDev ; + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function STANDARDIZE() + + + /** + * STDEV + * + * Estimates standard deviation based on a sample. The standard deviation is a measure of how + * widely values are dispersed from the average value (the mean). + * + * Excel Function: + * STDEV(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function STDEV() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + + // Return value + $returnValue = null; + + $aMean = self::AVERAGE($aArgs); + if (!is_null($aMean)) { + $aCount = -1; + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + ((!PHPExcel_Calculation_Functions::isCellValue($k)) || (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE))) { + $arg = (integer) $arg; + } + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if (is_null($returnValue)) { + $returnValue = pow(($arg - $aMean),2); + } else { + $returnValue += pow(($arg - $aMean),2); + } + ++$aCount; + } + } + + // Return + if (($aCount > 0) && ($returnValue >= 0)) { + return sqrt($returnValue / $aCount); + } + } + return PHPExcel_Calculation_Functions::DIV0(); + } // function STDEV() + + + /** + * STDEVA + * + * Estimates standard deviation based on a sample, including numbers, text, and logical values + * + * Excel Function: + * STDEVA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function STDEVA() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + + // Return value + $returnValue = null; + + $aMean = self::AVERAGEA($aArgs); + if (!is_null($aMean)) { + $aCount = -1; + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + (!PHPExcel_Calculation_Functions::isMatrixValue($k))) { + } else { + // Is it a numeric value? + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) & ($arg != '')))) { + if (is_bool($arg)) { + $arg = (integer) $arg; + } elseif (is_string($arg)) { + $arg = 0; + } + if (is_null($returnValue)) { + $returnValue = pow(($arg - $aMean),2); + } else { + $returnValue += pow(($arg - $aMean),2); + } + ++$aCount; + } + } + } + + // Return + if (($aCount > 0) && ($returnValue >= 0)) { + return sqrt($returnValue / $aCount); + } + } + return PHPExcel_Calculation_Functions::DIV0(); + } // function STDEVA() + + + /** + * STDEVP + * + * Calculates standard deviation based on the entire population + * + * Excel Function: + * STDEVP(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function STDEVP() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + + // Return value + $returnValue = null; + + $aMean = self::AVERAGE($aArgs); + if (!is_null($aMean)) { + $aCount = 0; + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + ((!PHPExcel_Calculation_Functions::isCellValue($k)) || (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE))) { + $arg = (integer) $arg; + } + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + if (is_null($returnValue)) { + $returnValue = pow(($arg - $aMean),2); + } else { + $returnValue += pow(($arg - $aMean),2); + } + ++$aCount; + } + } + + // Return + if (($aCount > 0) && ($returnValue >= 0)) { + return sqrt($returnValue / $aCount); + } + } + return PHPExcel_Calculation_Functions::DIV0(); + } // function STDEVP() + + + /** + * STDEVPA + * + * Calculates standard deviation based on the entire population, including numbers, text, and logical values + * + * Excel Function: + * STDEVPA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function STDEVPA() { + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + + // Return value + $returnValue = null; + + $aMean = self::AVERAGEA($aArgs); + if (!is_null($aMean)) { + $aCount = 0; + foreach ($aArgs as $k => $arg) { + if ((is_bool($arg)) && + (!PHPExcel_Calculation_Functions::isMatrixValue($k))) { + } else { + // Is it a numeric value? + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) & ($arg != '')))) { + if (is_bool($arg)) { + $arg = (integer) $arg; + } elseif (is_string($arg)) { + $arg = 0; + } + if (is_null($returnValue)) { + $returnValue = pow(($arg - $aMean),2); + } else { + $returnValue += pow(($arg - $aMean),2); + } + ++$aCount; + } + } + } + + // Return + if (($aCount > 0) && ($returnValue >= 0)) { + return sqrt($returnValue / $aCount); + } + } + return PHPExcel_Calculation_Functions::DIV0(); + } // function STDEVPA() + + + /** + * STEYX + * + * Returns the standard error of the predicted y-value for each x in the regression. + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @return float + */ + public static function STEYX($yValues,$xValues) { + if (!self::_checkTrendArrays($yValues,$xValues)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + $yValueCount = count($yValues); + $xValueCount = count($xValues); + + if (($yValueCount == 0) || ($yValueCount != $xValueCount)) { + return PHPExcel_Calculation_Functions::NA(); + } elseif ($yValueCount == 1) { + return PHPExcel_Calculation_Functions::DIV0(); + } + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues); + return $bestFitLinear->getStdevOfResiduals(); + } // function STEYX() + + + /** + * TDIST + * + * Returns the probability of Student's T distribution. + * + * @param float $value Value for the function + * @param float $degrees degrees of freedom + * @param float $tails number of tails (1 or 2) + * @return float + */ + public static function TDIST($value, $degrees, $tails) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $degrees = floor(PHPExcel_Calculation_Functions::flattenSingleValue($degrees)); + $tails = floor(PHPExcel_Calculation_Functions::flattenSingleValue($tails)); + + if ((is_numeric($value)) && (is_numeric($degrees)) && (is_numeric($tails))) { + if (($value < 0) || ($degrees < 1) || ($tails < 1) || ($tails > 2)) { + return PHPExcel_Calculation_Functions::NaN(); + } + // tdist, which finds the probability that corresponds to a given value + // of t with k degrees of freedom. This algorithm is translated from a + // pascal function on p81 of "Statistical Computing in Pascal" by D + // Cooke, A H Craven & G M Clark (1985: Edward Arnold (Pubs.) Ltd: + // London). The above Pascal algorithm is itself a translation of the + // fortran algoritm "AS 3" by B E Cooper of the Atlas Computer + // Laboratory as reported in (among other places) "Applied Statistics + // Algorithms", editied by P Griffiths and I D Hill (1985; Ellis + // Horwood Ltd.; W. Sussex, England). + $tterm = $degrees; + $ttheta = atan2($value,sqrt($tterm)); + $tc = cos($ttheta); + $ts = sin($ttheta); + $tsum = 0; + + if (($degrees % 2) == 1) { + $ti = 3; + $tterm = $tc; + } else { + $ti = 2; + $tterm = 1; + } + + $tsum = $tterm; + while ($ti < $degrees) { + $tterm *= $tc * $tc * ($ti - 1) / $ti; + $tsum += $tterm; + $ti += 2; + } + $tsum *= $ts; + if (($degrees % 2) == 1) { $tsum = M_2DIVPI * ($tsum + $ttheta); } + $tValue = 0.5 * (1 + $tsum); + if ($tails == 1) { + return 1 - abs($tValue); + } else { + return 1 - abs((1 - $tValue) - $tValue); + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function TDIST() + + + /** + * TINV + * + * Returns the one-tailed probability of the chi-squared distribution. + * + * @param float $probability Probability for the function + * @param float $degrees degrees of freedom + * @return float + */ + public static function TINV($probability, $degrees) { + $probability = PHPExcel_Calculation_Functions::flattenSingleValue($probability); + $degrees = floor(PHPExcel_Calculation_Functions::flattenSingleValue($degrees)); + + if ((is_numeric($probability)) && (is_numeric($degrees))) { + $xLo = 100; + $xHi = 0; + + $x = $xNew = 1; + $dx = 1; + $i = 0; + + while ((abs($dx) > PRECISION) && ($i++ < MAX_ITERATIONS)) { + // Apply Newton-Raphson step + $result = self::TDIST($x, $degrees, 2); + $error = $result - $probability; + if ($error == 0.0) { + $dx = 0; + } elseif ($error < 0.0) { + $xLo = $x; + } else { + $xHi = $x; + } + // Avoid division by zero + if ($result != 0.0) { + $dx = $error / $result; + $xNew = $x - $dx; + } + // If the NR fails to converge (which for example may be the + // case if the initial guess is too rough) we apply a bisection + // step to determine a more narrow interval around the root. + if (($xNew < $xLo) || ($xNew > $xHi) || ($result == 0.0)) { + $xNew = ($xLo + $xHi) / 2; + $dx = $xNew - $x; + } + $x = $xNew; + } + if ($i == MAX_ITERATIONS) { + return PHPExcel_Calculation_Functions::NA(); + } + return round($x,12); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function TINV() + + + /** + * TREND + * + * Returns values along a linear trend + * + * @param array of mixed Data Series Y + * @param array of mixed Data Series X + * @param array of mixed Values of X for which we want to find Y + * @param boolean A logical value specifying whether to force the intersect to equal 0. + * @return array of float + */ + public static function TREND($yValues,$xValues=array(),$newValues=array(),$const=True) { + $yValues = PHPExcel_Calculation_Functions::flattenArray($yValues); + $xValues = PHPExcel_Calculation_Functions::flattenArray($xValues); + $newValues = PHPExcel_Calculation_Functions::flattenArray($newValues); + $const = (is_null($const)) ? True : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($const); + + $bestFitLinear = trendClass::calculate(trendClass::TREND_LINEAR,$yValues,$xValues,$const); + if (empty($newValues)) { + $newValues = $bestFitLinear->getXValues(); + } + + $returnArray = array(); + foreach($newValues as $xValue) { + $returnArray[0][] = $bestFitLinear->getValueOfYForX($xValue); + } + + return $returnArray; + } // function TREND() + + + /** + * TRIMMEAN + * + * Returns the mean of the interior of a data set. TRIMMEAN calculates the mean + * taken by excluding a percentage of data points from the top and bottom tails + * of a data set. + * + * Excel Function: + * TRIMEAN(value1[,value2[, ...]],$discard) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @param float $discard Percentage to discard + * @return float + */ + public static function TRIMMEAN() { + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + + // Calculate + $percent = array_pop($aArgs); + + if ((is_numeric($percent)) && (!is_string($percent))) { + if (($percent < 0) || ($percent > 1)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $mArgs = array(); + foreach ($aArgs as $arg) { + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $mArgs[] = $arg; + } + } + $discard = floor(self::COUNT($mArgs) * $percent / 2); + sort($mArgs); + for ($i=0; $i < $discard; ++$i) { + array_pop($mArgs); + array_shift($mArgs); + } + return self::AVERAGE($mArgs); + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function TRIMMEAN() + + + /** + * VARFunc + * + * Estimates variance based on a sample. + * + * Excel Function: + * VAR(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function VARFunc() { + // Return value + $returnValue = PHPExcel_Calculation_Functions::DIV0(); + + $summerA = $summerB = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + $aCount = 0; + foreach ($aArgs as $arg) { + if (is_bool($arg)) { $arg = (integer) $arg; } + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $summerA += ($arg * $arg); + $summerB += $arg; + ++$aCount; + } + } + + // Return + if ($aCount > 1) { + $summerA *= $aCount; + $summerB *= $summerB; + $returnValue = ($summerA - $summerB) / ($aCount * ($aCount - 1)); + } + return $returnValue; + } // function VARFunc() + + + /** + * VARA + * + * Estimates variance based on a sample, including numbers, text, and logical values + * + * Excel Function: + * VARA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function VARA() { + // Return value + $returnValue = PHPExcel_Calculation_Functions::DIV0(); + + $summerA = $summerB = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + $aCount = 0; + foreach ($aArgs as $k => $arg) { + if ((is_string($arg)) && + (PHPExcel_Calculation_Functions::isValue($k))) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ((is_string($arg)) && + (!PHPExcel_Calculation_Functions::isMatrixValue($k))) { + } else { + // Is it a numeric value? + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) & ($arg != '')))) { + if (is_bool($arg)) { + $arg = (integer) $arg; + } elseif (is_string($arg)) { + $arg = 0; + } + $summerA += ($arg * $arg); + $summerB += $arg; + ++$aCount; + } + } + } + + // Return + if ($aCount > 1) { + $summerA *= $aCount; + $summerB *= $summerB; + $returnValue = ($summerA - $summerB) / ($aCount * ($aCount - 1)); + } + return $returnValue; + } // function VARA() + + + /** + * VARP + * + * Calculates variance based on the entire population + * + * Excel Function: + * VARP(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function VARP() { + // Return value + $returnValue = PHPExcel_Calculation_Functions::DIV0(); + + $summerA = $summerB = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + $aCount = 0; + foreach ($aArgs as $arg) { + if (is_bool($arg)) { $arg = (integer) $arg; } + // Is it a numeric value? + if ((is_numeric($arg)) && (!is_string($arg))) { + $summerA += ($arg * $arg); + $summerB += $arg; + ++$aCount; + } + } + + // Return + if ($aCount > 0) { + $summerA *= $aCount; + $summerB *= $summerB; + $returnValue = ($summerA - $summerB) / ($aCount * $aCount); + } + return $returnValue; + } // function VARP() + + + /** + * VARPA + * + * Calculates variance based on the entire population, including numbers, text, and logical values + * + * Excel Function: + * VARPA(value1[,value2[, ...]]) + * + * @access public + * @category Statistical Functions + * @param mixed $arg,... Data values + * @return float + */ + public static function VARPA() { + // Return value + $returnValue = PHPExcel_Calculation_Functions::DIV0(); + + $summerA = $summerB = 0; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArrayIndexed(func_get_args()); + $aCount = 0; + foreach ($aArgs as $k => $arg) { + if ((is_string($arg)) && + (PHPExcel_Calculation_Functions::isValue($k))) { + return PHPExcel_Calculation_Functions::VALUE(); + } elseif ((is_string($arg)) && + (!PHPExcel_Calculation_Functions::isMatrixValue($k))) { + } else { + // Is it a numeric value? + if ((is_numeric($arg)) || (is_bool($arg)) || ((is_string($arg) & ($arg != '')))) { + if (is_bool($arg)) { + $arg = (integer) $arg; + } elseif (is_string($arg)) { + $arg = 0; + } + $summerA += ($arg * $arg); + $summerB += $arg; + ++$aCount; + } + } + } + + // Return + if ($aCount > 0) { + $summerA *= $aCount; + $summerB *= $summerB; + $returnValue = ($summerA - $summerB) / ($aCount * $aCount); + } + return $returnValue; + } // function VARPA() + + + /** + * WEIBULL + * + * Returns the Weibull distribution. Use this distribution in reliability + * analysis, such as calculating a device's mean time to failure. + * + * @param float $value + * @param float $alpha Alpha Parameter + * @param float $beta Beta Parameter + * @param boolean $cumulative + * @return float + * + */ + public static function WEIBULL($value, $alpha, $beta, $cumulative) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $alpha = PHPExcel_Calculation_Functions::flattenSingleValue($alpha); + $beta = PHPExcel_Calculation_Functions::flattenSingleValue($beta); + + if ((is_numeric($value)) && (is_numeric($alpha)) && (is_numeric($beta))) { + if (($value < 0) || ($alpha <= 0) || ($beta <= 0)) { + return PHPExcel_Calculation_Functions::NaN(); + } + if ((is_numeric($cumulative)) || (is_bool($cumulative))) { + if ($cumulative) { + return 1 - exp(0 - pow($value / $beta,$alpha)); + } else { + return ($alpha / pow($beta,$alpha)) * pow($value,$alpha - 1) * exp(0 - pow($value / $beta,$alpha)); + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function WEIBULL() + + + /** + * ZTEST + * + * Returns the Weibull distribution. Use this distribution in reliability + * analysis, such as calculating a device's mean time to failure. + * + * @param float $dataSet + * @param float $m0 Alpha Parameter + * @param float $sigma Beta Parameter + * @param boolean $cumulative + * @return float + * + */ + public static function ZTEST($dataSet, $m0, $sigma = NULL) { + $dataSet = PHPExcel_Calculation_Functions::flattenArrayIndexed($dataSet); + $m0 = PHPExcel_Calculation_Functions::flattenSingleValue($m0); + $sigma = PHPExcel_Calculation_Functions::flattenSingleValue($sigma); + + if (is_null($sigma)) { + $sigma = self::STDEV($dataSet); + } + $n = count($dataSet); + + return 1 - self::NORMSDIST((self::AVERAGE($dataSet) - $m0)/($sigma/SQRT($n))); + } // function ZTEST() + +} // class PHPExcel_Calculation_Statistical diff --git a/PHPExcel/Calculation/TextData.php b/PHPExcel/Calculation/TextData.php new file mode 100644 index 0000000..d1ba272 --- /dev/null +++ b/PHPExcel/Calculation/TextData.php @@ -0,0 +1,590 @@ +=0 && ord($c{0}) <= 127) + return ord($c{0}); + if (ord($c{0}) >= 192 && ord($c{0}) <= 223) + return (ord($c{0})-192)*64 + (ord($c{1})-128); + if (ord($c{0}) >= 224 && ord($c{0}) <= 239) + return (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128); + if (ord($c{0}) >= 240 && ord($c{0}) <= 247) + return (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128); + if (ord($c{0}) >= 248 && ord($c{0}) <= 251) + return (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128); + if (ord($c{0}) >= 252 && ord($c{0}) <= 253) + return (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128); + if (ord($c{0}) >= 254 && ord($c{0}) <= 255) //error + return PHPExcel_Calculation_Functions::VALUE(); + return 0; + } // function _uniord() + + /** + * CHARACTER + * + * @param string $character Value + * @return int + */ + public static function CHARACTER($character) { + $character = PHPExcel_Calculation_Functions::flattenSingleValue($character); + + if ((!is_numeric($character)) || ($character < 0)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (function_exists('mb_convert_encoding')) { + return mb_convert_encoding('&#'.intval($character).';', 'UTF-8', 'HTML-ENTITIES'); + } else { + return chr(intval($character)); + } + } + + + /** + * TRIMNONPRINTABLE + * + * @param mixed $stringValue Value to check + * @return string + */ + public static function TRIMNONPRINTABLE($stringValue = '') { + $stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue); + + if (is_bool($stringValue)) { + return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if (self::$_invalidChars == Null) { + self::$_invalidChars = range(chr(0),chr(31)); + } + + if (is_string($stringValue) || is_numeric($stringValue)) { + return str_replace(self::$_invalidChars,'',trim($stringValue,"\x00..\x1F")); + } + return NULL; + } // function TRIMNONPRINTABLE() + + + /** + * TRIMSPACES + * + * @param mixed $stringValue Value to check + * @return string + */ + public static function TRIMSPACES($stringValue = '') { + $stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue); + + if (is_bool($stringValue)) { + return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if (is_string($stringValue) || is_numeric($stringValue)) { + return trim(preg_replace('/ +/',' ',trim($stringValue,' '))); + } + return NULL; + } // function TRIMSPACES() + + + /** + * ASCIICODE + * + * @param string $characters Value + * @return int + */ + public static function ASCIICODE($characters) { + if (($characters === NULL) || ($characters === '')) + return PHPExcel_Calculation_Functions::VALUE(); + $characters = PHPExcel_Calculation_Functions::flattenSingleValue($characters); + if (is_bool($characters)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $characters = (int) $characters; + } else { + $characters = ($characters) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + } + + $character = $characters; + if ((function_exists('mb_strlen')) && (function_exists('mb_substr'))) { + if (mb_strlen($characters, 'UTF-8') > 1) { $character = mb_substr($characters, 0, 1, 'UTF-8'); } + return self::_uniord($character); + } else { + if (strlen($characters) > 0) { $character = substr($characters, 0, 1); } + return ord($character); + } + } // function ASCIICODE() + + + /** + * CONCATENATE + * + * @return string + */ + public static function CONCATENATE() { + // Return value + $returnValue = ''; + + // Loop through arguments + $aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args()); + foreach ($aArgs as $arg) { + if (is_bool($arg)) { + if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) { + $arg = (int) $arg; + } else { + $arg = ($arg) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + } + $returnValue .= $arg; + } + + // Return + return $returnValue; + } // function CONCATENATE() + + + /** + * DOLLAR + * + * This function converts a number to text using currency format, with the decimals rounded to the specified place. + * The format used is $#,##0.00_);($#,##0.00).. + * + * @param float $value The value to format + * @param int $decimals The number of digits to display to the right of the decimal point. + * If decimals is negative, number is rounded to the left of the decimal point. + * If you omit decimals, it is assumed to be 2 + * @return string + */ + public static function DOLLAR($value = 0, $decimals = 2) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $decimals = is_null($decimals) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($decimals); + + // Validate parameters + if (!is_numeric($value) || !is_numeric($decimals)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $decimals = floor($decimals); + + $mask = '$#,##0'; + if ($decimals > 0) { + $mask .= '.' . str_repeat('0',$decimals); + } else { + $round = pow(10,abs($decimals)); + if ($value < 0) { $round = 0-$round; } + $value = PHPExcel_Calculation_MathTrig::MROUND($value, $round); + } + + return PHPExcel_Style_NumberFormat::toFormattedString($value, $mask); + + } // function DOLLAR() + + + /** + * SEARCHSENSITIVE + * + * @param string $needle The string to look for + * @param string $haystack The string in which to look + * @param int $offset Offset within $haystack + * @return string + */ + public static function SEARCHSENSITIVE($needle,$haystack,$offset=1) { + $needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle); + $haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack); + $offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset); + + if (!is_bool($needle)) { + if (is_bool($haystack)) { + $haystack = ($haystack) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if (($offset > 0) && (PHPExcel_Shared_String::CountCharacters($haystack) > $offset)) { + if (PHPExcel_Shared_String::CountCharacters($needle) == 0) { + return $offset; + } + if (function_exists('mb_strpos')) { + $pos = mb_strpos($haystack, $needle, --$offset, 'UTF-8'); + } else { + $pos = strpos($haystack, $needle, --$offset); + } + if ($pos !== false) { + return ++$pos; + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SEARCHSENSITIVE() + + + /** + * SEARCHINSENSITIVE + * + * @param string $needle The string to look for + * @param string $haystack The string in which to look + * @param int $offset Offset within $haystack + * @return string + */ + public static function SEARCHINSENSITIVE($needle,$haystack,$offset=1) { + $needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle); + $haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack); + $offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset); + + if (!is_bool($needle)) { + if (is_bool($haystack)) { + $haystack = ($haystack) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if (($offset > 0) && (PHPExcel_Shared_String::CountCharacters($haystack) > $offset)) { + if (PHPExcel_Shared_String::CountCharacters($needle) == 0) { + return $offset; + } + if (function_exists('mb_stripos')) { + $pos = mb_stripos($haystack, $needle, --$offset,'UTF-8'); + } else { + $pos = stripos($haystack, $needle, --$offset); + } + if ($pos !== false) { + return ++$pos; + } + } + } + return PHPExcel_Calculation_Functions::VALUE(); + } // function SEARCHINSENSITIVE() + + + /** + * FIXEDFORMAT + * + * @param mixed $value Value to check + * @param integer $decimals + * @param boolean $no_commas + * @return boolean + */ + public static function FIXEDFORMAT($value, $decimals = 2, $no_commas = FALSE) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $decimals = PHPExcel_Calculation_Functions::flattenSingleValue($decimals); + $no_commas = PHPExcel_Calculation_Functions::flattenSingleValue($no_commas); + + // Validate parameters + if (!is_numeric($value) || !is_numeric($decimals)) { + return PHPExcel_Calculation_Functions::NaN(); + } + $decimals = floor($decimals); + + $valueResult = round($value,$decimals); + if ($decimals < 0) { $decimals = 0; } + if (!$no_commas) { + $valueResult = number_format($valueResult,$decimals); + } + + return (string) $valueResult; + } // function FIXEDFORMAT() + + + /** + * LEFT + * + * @param string $value Value + * @param int $chars Number of characters + * @return string + */ + public static function LEFT($value = '', $chars = 1) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); + + if ($chars < 0) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (is_bool($value)) { + $value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if (function_exists('mb_substr')) { + return mb_substr($value, 0, $chars, 'UTF-8'); + } else { + return substr($value, 0, $chars); + } + } // function LEFT() + + + /** + * MID + * + * @param string $value Value + * @param int $start Start character + * @param int $chars Number of characters + * @return string + */ + public static function MID($value = '', $start = 1, $chars = null) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $start = PHPExcel_Calculation_Functions::flattenSingleValue($start); + $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); + + if (($start < 1) || ($chars < 0)) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (is_bool($value)) { + $value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if (function_exists('mb_substr')) { + return mb_substr($value, --$start, $chars, 'UTF-8'); + } else { + return substr($value, --$start, $chars); + } + } // function MID() + + + /** + * RIGHT + * + * @param string $value Value + * @param int $chars Number of characters + * @return string + */ + public static function RIGHT($value = '', $chars = 1) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); + + if ($chars < 0) { + return PHPExcel_Calculation_Functions::VALUE(); + } + + if (is_bool($value)) { + $value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if ((function_exists('mb_substr')) && (function_exists('mb_strlen'))) { + return mb_substr($value, mb_strlen($value, 'UTF-8') - $chars, $chars, 'UTF-8'); + } else { + return substr($value, strlen($value) - $chars); + } + } // function RIGHT() + + + /** + * STRINGLENGTH + * + * @param string $value Value + * @return string + */ + public static function STRINGLENGTH($value = '') { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + + if (is_bool($value)) { + $value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + if (function_exists('mb_strlen')) { + return mb_strlen($value, 'UTF-8'); + } else { + return strlen($value); + } + } // function STRINGLENGTH() + + + /** + * LOWERCASE + * + * Converts a string value to upper case. + * + * @param string $mixedCaseString + * @return string + */ + public static function LOWERCASE($mixedCaseString) { + $mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString); + + if (is_bool($mixedCaseString)) { + $mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + return PHPExcel_Shared_String::StrToLower($mixedCaseString); + } // function LOWERCASE() + + + /** + * UPPERCASE + * + * Converts a string value to upper case. + * + * @param string $mixedCaseString + * @return string + */ + public static function UPPERCASE($mixedCaseString) { + $mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString); + + if (is_bool($mixedCaseString)) { + $mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + return PHPExcel_Shared_String::StrToUpper($mixedCaseString); + } // function UPPERCASE() + + + /** + * PROPERCASE + * + * Converts a string value to upper case. + * + * @param string $mixedCaseString + * @return string + */ + public static function PROPERCASE($mixedCaseString) { + $mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString); + + if (is_bool($mixedCaseString)) { + $mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE(); + } + + return PHPExcel_Shared_String::StrToTitle($mixedCaseString); + } // function PROPERCASE() + + + /** + * REPLACE + * + * @param string $oldText String to modify + * @param int $start Start character + * @param int $chars Number of characters + * @param string $newText String to replace in defined position + * @return string + */ + public static function REPLACE($oldText = '', $start = 1, $chars = null, $newText) { + $oldText = PHPExcel_Calculation_Functions::flattenSingleValue($oldText); + $start = PHPExcel_Calculation_Functions::flattenSingleValue($start); + $chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars); + $newText = PHPExcel_Calculation_Functions::flattenSingleValue($newText); + + $left = self::LEFT($oldText,$start-1); + $right = self::RIGHT($oldText,self::STRINGLENGTH($oldText)-($start+$chars)+1); + + return $left.$newText.$right; + } // function REPLACE() + + + /** + * SUBSTITUTE + * + * @param string $text Value + * @param string $fromText From Value + * @param string $toText To Value + * @param integer $instance Instance Number + * @return string + */ + public static function SUBSTITUTE($text = '', $fromText = '', $toText = '', $instance = 0) { + $text = PHPExcel_Calculation_Functions::flattenSingleValue($text); + $fromText = PHPExcel_Calculation_Functions::flattenSingleValue($fromText); + $toText = PHPExcel_Calculation_Functions::flattenSingleValue($toText); + $instance = floor(PHPExcel_Calculation_Functions::flattenSingleValue($instance)); + + if ($instance == 0) { + if(function_exists('mb_str_replace')) { + return mb_str_replace($fromText,$toText,$text); + } else { + return str_replace($fromText,$toText,$text); + } + } else { + $pos = -1; + while($instance > 0) { + if (function_exists('mb_strpos')) { + $pos = mb_strpos($text, $fromText, $pos+1, 'UTF-8'); + } else { + $pos = strpos($text, $fromText, $pos+1); + } + if ($pos === false) { + break; + } + --$instance; + } + if ($pos !== false) { + if (function_exists('mb_strlen')) { + return self::REPLACE($text,++$pos,mb_strlen($fromText, 'UTF-8'),$toText); + } else { + return self::REPLACE($text,++$pos,strlen($fromText),$toText); + } + } + } + + return $text; + } // function SUBSTITUTE() + + + /** + * RETURNSTRING + * + * @param mixed $testValue Value to check + * @return boolean + */ + public static function RETURNSTRING($testValue = '') { + $testValue = PHPExcel_Calculation_Functions::flattenSingleValue($testValue); + + if (is_string($testValue)) { + return $testValue; + } + return Null; + } // function RETURNSTRING() + + + /** + * TEXTFORMAT + * + * @param mixed $value Value to check + * @param string $format Format mask to use + * @return boolean + */ + public static function TEXTFORMAT($value,$format) { + $value = PHPExcel_Calculation_Functions::flattenSingleValue($value); + $format = PHPExcel_Calculation_Functions::flattenSingleValue($format); + + if ((is_string($value)) && (!is_numeric($value)) && PHPExcel_Shared_Date::isDateTimeFormatCode($format)) { + $value = PHPExcel_Calculation_DateTime::DATEVALUE($value); + } + + return (string) PHPExcel_Style_NumberFormat::toFormattedString($value,$format); + } // function TEXTFORMAT() + +} // class PHPExcel_Calculation_TextData diff --git a/PHPExcel/Calculation/Token/Stack.php b/PHPExcel/Calculation/Token/Stack.php new file mode 100644 index 0000000..821f3bd --- /dev/null +++ b/PHPExcel/Calculation/Token/Stack.php @@ -0,0 +1,115 @@ +_count; + } // function count() + + /** + * Push a new entry onto the stack + * + * @param mixed $type + * @param mixed $value + * @param mixed $reference + */ + public function push($type, $value, $reference = NULL) { + $this->_stack[$this->_count++] = array('type' => $type, + 'value' => $value, + 'reference' => $reference + ); + if ($type == 'Function') { + $localeFunction = PHPExcel_Calculation::_localeFunc($value); + if ($localeFunction != $value) { + $this->_stack[($this->_count - 1)]['localeValue'] = $localeFunction; + } + } + } // function push() + + /** + * Pop the last entry from the stack + * + * @return mixed + */ + public function pop() { + if ($this->_count > 0) { + return $this->_stack[--$this->_count]; + } + return NULL; + } // function pop() + + /** + * Return an entry from the stack without removing it + * + * @param integer $n number indicating how far back in the stack we want to look + * @return mixed + */ + public function last($n = 1) { + if ($this->_count - $n < 0) { + return NULL; + } + return $this->_stack[$this->_count - $n]; + } // function last() + + /** + * Clear the stack + */ + function clear() { + $this->_stack = array(); + $this->_count = 0; + } + +} // class PHPExcel_Calculation_Token_Stack diff --git a/PHPExcel/Calculation/functionlist.txt b/PHPExcel/Calculation/functionlist.txt new file mode 100644 index 0000000..67dbd49 --- /dev/null +++ b/PHPExcel/Calculation/functionlist.txt @@ -0,0 +1,351 @@ +ABS +ACCRINT +ACCRINTM +ACOS +ACOSH +ADDRESS +AMORDEGRC +AMORLINC +AND +AREAS +ASC +ASIN +ASINH +ATAN +ATAN2 +ATANH +AVEDEV +AVERAGE +AVERAGEA +AVERAGEIF +AVERAGEIFS +BAHTTEXT +BESSELI +BESSELJ +BESSELK +BESSELY +BETADIST +BETAINV +BIN2DEC +BIN2HEX +BIN2OCT +BINOMDIST +CEILING +CELL +CHAR +CHIDIST +CHIINV +CHITEST +CHOOSE +CLEAN +CODE +COLUMN +COLUMNS +COMBIN +COMPLEX +CONCATENATE +CONFIDENCE +CONVERT +CORREL +COS +COSH +COUNT +COUNTA +COUNTBLANK +COUNTIF +COUNTIFS +COUPDAYBS +COUPDAYBS +COUPDAYSNC +COUPNCD +COUPNUM +COUPPCD +COVAR +CRITBINOM +CUBEKPIMEMBER +CUBEMEMBER +CUBEMEMBERPROPERTY +CUBERANKEDMEMBER +CUBESET +CUBESETCOUNT +CUBEVALUE +CUMIPMT +CUMPRINC +DATE +DATEDIF +DATEVALUE +DAVERAGE +DAY +DAYS360 +DB +DCOUNT +DCOUNTA +DDB +DEC2BIN +DEC2HEX +DEC2OCT +DEGREES +DELTA +DEVSQ +DGET +DISC +DMAX +DMIN +DOLLAR +DOLLARDE +DOLLARFR +DPRODUCT +DSTDEV +DSTDEVP +DSUM +DURATION +DVAR +DVARP +EDATE +EFFECT +EOMONTH +ERF +ERFC +ERROR.TYPE +EVEN +EXACT +EXP +EXPONDIST +FACT +FACTDOUBLE +FALSE +FDIST +FIND +FINDB +FINV +FISHER +FISHERINV +FIXED +FLOOR +FORECAST +FREQUENCY +FTEST +FV +FVSCHEDULE +GAMAMDIST +GAMMAINV +GAMMALN +GCD +GEOMEAN +GESTEP +GETPIVOTDATA +GROWTH +HARMEAN +HEX2BIN +HEX2OCT +HLOOKUP +HOUR +HYPERLINK +HYPGEOMDIST +IF +IFERROR +IMABS +IMAGINARY +IMARGUMENT +IMCONJUGATE +IMCOS +IMEXP +IMLN +IMLOG10 +IMLOG2 +IMPOWER +IMPRODUCT +IMREAL +IMSIN +IMSQRT +IMSUB +IMSUM +INDEX +INDIRECT +INFO +INT +INTERCEPT +INTRATE +IPMT +IRR +ISBLANK +ISERR +ISERROR +ISEVEN +ISLOGICAL +ISNA +ISNONTEXT +ISNUMBER +ISODD +ISPMT +ISREF +ISTEXT +JIS +KURT +LARGE +LCM +LEFT +LEFTB +LEN +LENB +LINEST +LN +LOG +LOG10 +LOGEST +LOGINV +LOGNORMDIST +LOOKUP +LOWER +MATCH +MAX +MAXA +MDETERM +MDURATION +MEDIAN +MID +MIDB +MIN +MINA +MINUTE +MINVERSE +MIRR +MMULT +MOD +MODE +MONTH +MROUND +MULTINOMIAL +N +NA +NEGBINOMDIST +NETWORKDAYS +NOMINAL +NORMDIST +NORMINV +NORMSDIST +NORMSINV +NOT +NOW +NPER +NPV +OCT2BIN +OCT2DEC +OCT2HEX +ODD +ODDFPRICE +ODDFYIELD +ODDLPRICE +ODDLYIELD +OFFSET +OR +PEARSON +PERCENTILE +PERCENTRANK +PERMUT +PHONETIC +PI +PMT +POISSON +POWER +PPMT +PRICE +PRICEDISC +PRICEMAT +PROB +PRODUCT +PROPER +PV +QUARTILE +QUOTIENT +RADIANS +RAND +RANDBETWEEN +RANK +RATE +RECEIVED +REPLACE +REPLACEB +REPT +RIGHT +RIGHTB +ROMAN +ROUND +ROUNDDOWN +ROUNDUP +ROW +ROWS +RSQ +RTD +SEARCH +SEARCHB +SECOND +SERIESSUM +SIGN +SIN +SINH +SKEW +SLN +SLOPE +SMALL +SQRT +SQRTPI +STANDARDIZE +STDEV +STDEVA +STDEVP +STDEVPA +STEYX +SUBSTITUTE +SUBTOTAL +SUM +SUMIF +SUMIFS +SUMPRODUCT +SUMSQ +SUMX2MY2 +SUMX2PY2 +SUMXMY2 +SYD +T +TAN +TANH +TBILLEQ +TBILLPRICE +TBILLYIELD +TDIST +TEXT +TIME +TIMEVALUE +TINV +TODAY +TRANSPOSE +TREND +TRIM +TRIMMEAN +TRUE +TRUNC +TTEST +TYPE +UPPER +USDOLLAR +VALUE +VAR +VARA +VARP +VARPA +VDB +VERSION +VLOOKUP +WEEKDAY +WEEKNUM +WEIBULL +WORKDAY +XIRR +XNPV +YEAR +YEARFRAC +YIELD +YIELDDISC +YIELDMAT +ZTEST diff --git a/PHPExcel/Cell.php b/PHPExcel/Cell.php new file mode 100644 index 0000000..1788559 --- /dev/null +++ b/PHPExcel/Cell.php @@ -0,0 +1,990 @@ +_parent->updateCacheData($this); + + return $this; + } + + public function detach() { + $this->_parent = NULL; + } + + public function attach(PHPExcel_CachedObjectStorage_CacheBase $parent) { + + + $this->_parent = $parent; + } + + + /** + * Create a new Cell + * + * @param mixed $pValue + * @param string $pDataType + * @param PHPExcel_Worksheet $pSheet + * @throws PHPExcel_Exception + */ + public function __construct($pValue = NULL, $pDataType = NULL, PHPExcel_Worksheet $pSheet = NULL) + { + // Initialise cell value + $this->_value = $pValue; + + // Set worksheet cache + $this->_parent = $pSheet->getCellCacheController(); + + // Set datatype? + if ($pDataType !== NULL) { + if ($pDataType == PHPExcel_Cell_DataType::TYPE_STRING2) + $pDataType = PHPExcel_Cell_DataType::TYPE_STRING; + $this->_dataType = $pDataType; + } else { + if (!self::getValueBinder()->bindValue($this, $pValue)) { + throw new PHPExcel_Exception("Value could not be bound to cell."); + } + } + + // set default index to cellXf + $this->_xfIndex = 0; + } + + /** + * Get cell coordinate column + * + * @return string + */ + public function getColumn() + { + return $this->_parent->getCurrentColumn(); + } + + /** + * Get cell coordinate row + * + * @return int + */ + public function getRow() + { + return $this->_parent->getCurrentRow(); + } + + /** + * Get cell coordinate + * + * @return string + */ + public function getCoordinate() + { + return $this->_parent->getCurrentAddress(); + } + + /** + * Get cell value + * + * @return mixed + */ + public function getValue() + { + return $this->_value; + } + + /** + * Get cell value with formatting + * + * @return string + */ + public function getFormattedValue() + { + return (string) PHPExcel_Style_NumberFormat::toFormattedString( + $this->getCalculatedValue(), + $this->getWorksheet()->getParent()->getCellXfByIndex($this->getXfIndex()) + ->getNumberFormat()->getFormatCode() + ); + } + + /** + * Set cell value + * + * Sets the value for a cell, automatically determining the datatype using the value binder + * + * @param mixed $pValue Value + * @return PHPExcel_Cell + * @throws PHPExcel_Exception + */ + public function setValue($pValue = NULL) + { + if (!self::getValueBinder()->bindValue($this, $pValue)) { + throw new PHPExcel_Exception("Value could not be bound to cell."); + } + return $this; + } + + /** + * Set the value for a cell, with the explicit data type passed to the method (bypassing any use of the value binder) + * + * @param mixed $pValue Value + * @param string $pDataType Explicit data type + * @return PHPExcel_Cell + * @throws PHPExcel_Exception + */ + public function setValueExplicit($pValue = NULL, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING) + { + // set the value according to data type + switch ($pDataType) { + case PHPExcel_Cell_DataType::TYPE_NULL: + $this->_value = $pValue; + break; + case PHPExcel_Cell_DataType::TYPE_STRING2: + $pDataType = PHPExcel_Cell_DataType::TYPE_STRING; + case PHPExcel_Cell_DataType::TYPE_STRING: + case PHPExcel_Cell_DataType::TYPE_INLINE: + $this->_value = PHPExcel_Cell_DataType::checkString($pValue); + break; + case PHPExcel_Cell_DataType::TYPE_NUMERIC: + $this->_value = (float)$pValue; + break; + case PHPExcel_Cell_DataType::TYPE_FORMULA: + $this->_value = (string)$pValue; + break; + case PHPExcel_Cell_DataType::TYPE_BOOL: + $this->_value = (bool)$pValue; + break; + case PHPExcel_Cell_DataType::TYPE_ERROR: + $this->_value = PHPExcel_Cell_DataType::checkErrorCode($pValue); + break; + default: + throw new PHPExcel_Exception('Invalid datatype: ' . $pDataType); + break; + } + + // set the datatype + $this->_dataType = $pDataType; + + return $this->notifyCacheController(); + } + + /** + * Get calculated cell value + * + * @deprecated Since version 1.7.8 for planned changes to cell for array formula handling + * + * @param boolean $resetLog Whether the calculation engine logger should be reset or not + * @return mixed + * @throws PHPExcel_Exception + */ + public function getCalculatedValue($resetLog = TRUE) + { +//echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().PHP_EOL; + if ($this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA) { + try { +//echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value'.PHP_EOL; + $result = PHPExcel_Calculation::getInstance( + $this->getWorksheet()->getParent() + )->calculateCellValue($this,$resetLog); +//echo $this->getCoordinate().' calculation result is '.$result.PHP_EOL; + // We don't yet handle array returns + if (is_array($result)) { + while (is_array($result)) { + $result = array_pop($result); + } + } + } catch ( PHPExcel_Exception $ex ) { + if (($ex->getMessage() === 'Unable to access External Workbook') && ($this->_calculatedValue !== NULL)) { +//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL; + return $this->_calculatedValue; // Fallback for calculations referencing external files. + } +//echo 'Calculation Exception: '.$ex->getMessage().PHP_EOL; + $result = '#N/A'; + throw new PHPExcel_Calculation_Exception( + $this->getWorksheet()->getTitle().'!'.$this->getCoordinate().' -> '.$ex->getMessage() + ); + } + + if ($result === '#Not Yet Implemented') { +//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL; + return $this->_calculatedValue; // Fallback if calculation engine does not support the formula. + } +//echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().PHP_EOL; + return $result; + } elseif($this->_value instanceof PHPExcel_RichText) { +// echo 'Cell value for '.$this->getCoordinate().' is rich text: Returning data value of '.$this->_value.'
'; + return $this->_value->getPlainText(); + } +// echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'
'; + return $this->_value; + } + + /** + * Set old calculated value (cached) + * + * @param mixed $pValue Value + * @return PHPExcel_Cell + */ + public function setCalculatedValue($pValue = NULL) + { + if ($pValue !== NULL) { + $this->_calculatedValue = (is_numeric($pValue)) ? (float) $pValue : $pValue; + } + + return $this->notifyCacheController(); + } + + /** + * Get old calculated value (cached) + * This returns the value last calculated by MS Excel or whichever spreadsheet program was used to + * create the original spreadsheet file. + * Note that this value is not guaranteed to refelect the actual calculated value because it is + * possible that auto-calculation was disabled in the original spreadsheet, and underlying data + * values used by the formula have changed since it was last calculated. + * + * @return mixed + */ + public function getOldCalculatedValue() + { + return $this->_calculatedValue; + } + + /** + * Get cell data type + * + * @return string + */ + public function getDataType() + { + return $this->_dataType; + } + + /** + * Set cell data type + * + * @param string $pDataType + * @return PHPExcel_Cell + */ + public function setDataType($pDataType = PHPExcel_Cell_DataType::TYPE_STRING) + { + if ($pDataType == PHPExcel_Cell_DataType::TYPE_STRING2) + $pDataType = PHPExcel_Cell_DataType::TYPE_STRING; + + $this->_dataType = $pDataType; + + return $this->notifyCacheController(); + } + + /** + * Identify if the cell contains a formula + * + * @return boolean + */ + public function isFormula() + { + return $this->_dataType == PHPExcel_Cell_DataType::TYPE_FORMULA; + } + + /** + * Does this cell contain Data validation rules? + * + * @return boolean + * @throws PHPExcel_Exception + */ + public function hasDataValidation() + { + if (!isset($this->_parent)) { + throw new PHPExcel_Exception('Cannot check for data validation when cell is not bound to a worksheet'); + } + + return $this->getWorksheet()->dataValidationExists($this->getCoordinate()); + } + + /** + * Get Data validation rules + * + * @return PHPExcel_Cell_DataValidation + * @throws PHPExcel_Exception + */ + public function getDataValidation() + { + if (!isset($this->_parent)) { + throw new PHPExcel_Exception('Cannot get data validation for cell that is not bound to a worksheet'); + } + + return $this->getWorksheet()->getDataValidation($this->getCoordinate()); + } + + /** + * Set Data validation rules + * + * @param PHPExcel_Cell_DataValidation $pDataValidation + * @return PHPExcel_Cell + * @throws PHPExcel_Exception + */ + public function setDataValidation(PHPExcel_Cell_DataValidation $pDataValidation = NULL) + { + if (!isset($this->_parent)) { + throw new PHPExcel_Exception('Cannot set data validation for cell that is not bound to a worksheet'); + } + + $this->getWorksheet()->setDataValidation($this->getCoordinate(), $pDataValidation); + + return $this->notifyCacheController(); + } + + /** + * Does this cell contain a Hyperlink? + * + * @return boolean + * @throws PHPExcel_Exception + */ + public function hasHyperlink() + { + if (!isset($this->_parent)) { + throw new PHPExcel_Exception('Cannot check for hyperlink when cell is not bound to a worksheet'); + } + + return $this->getWorksheet()->hyperlinkExists($this->getCoordinate()); + } + + /** + * Get Hyperlink + * + * @return PHPExcel_Cell_Hyperlink + * @throws PHPExcel_Exception + */ + public function getHyperlink() + { + if (!isset($this->_parent)) { + throw new PHPExcel_Exception('Cannot get hyperlink for cell that is not bound to a worksheet'); + } + + return $this->getWorksheet()->getHyperlink($this->getCoordinate()); + } + + /** + * Set Hyperlink + * + * @param PHPExcel_Cell_Hyperlink $pHyperlink + * @return PHPExcel_Cell + * @throws PHPExcel_Exception + */ + public function setHyperlink(PHPExcel_Cell_Hyperlink $pHyperlink = NULL) + { + if (!isset($this->_parent)) { + throw new PHPExcel_Exception('Cannot set hyperlink for cell that is not bound to a worksheet'); + } + + $this->getWorksheet()->setHyperlink($this->getCoordinate(), $pHyperlink); + + return $this->notifyCacheController(); + } + + /** + * Get parent worksheet + * + * @return PHPExcel_CachedObjectStorage_CacheBase + */ + public function getParent() { + return $this->_parent; + } + + /** + * Get parent worksheet + * + * @return PHPExcel_Worksheet + */ + public function getWorksheet() { + return $this->_parent->getParent(); + } + + /** + * Get cell style + * + * @return PHPExcel_Style + */ + public function getStyle() + { + return $this->getWorksheet()->getParent()->getCellXfByIndex($this->getXfIndex()); + } + + /** + * Re-bind parent + * + * @param PHPExcel_Worksheet $parent + * @return PHPExcel_Cell + */ + public function rebindParent(PHPExcel_Worksheet $parent) { + $this->_parent = $parent->getCellCacheController(); + + return $this->notifyCacheController(); + } + + /** + * Is cell in a specific range? + * + * @param string $pRange Cell range (e.g. A1:A1) + * @return boolean + */ + public function isInRange($pRange = 'A1:A1') + { + list($rangeStart,$rangeEnd) = self::rangeBoundaries($pRange); + + // Translate properties + $myColumn = self::columnIndexFromString($this->getColumn()); + $myRow = $this->getRow(); + + // Verify if cell is in range + return (($rangeStart[0] <= $myColumn) && ($rangeEnd[0] >= $myColumn) && + ($rangeStart[1] <= $myRow) && ($rangeEnd[1] >= $myRow) + ); + } + + /** + * Coordinate from string + * + * @param string $pCoordinateString + * @return array Array containing column and row (indexes 0 and 1) + * @throws PHPExcel_Exception + */ + public static function coordinateFromString($pCoordinateString = 'A1') + { + if (preg_match("/^([$]?[A-Z]{1,3})([$]?\d{1,7})$/", $pCoordinateString, $matches)) { + return array($matches[1],$matches[2]); + } elseif ((strpos($pCoordinateString,':') !== FALSE) || (strpos($pCoordinateString,',') !== FALSE)) { + throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); + } elseif ($pCoordinateString == '') { + throw new PHPExcel_Exception('Cell coordinate can not be zero-length string'); + } + + throw new PHPExcel_Exception('Invalid cell coordinate '.$pCoordinateString); + } + + /** + * Make string row, column or cell coordinate absolute + * + * @param string $pCoordinateString e.g. 'A' or '1' or 'A1' + * Note that this value can be a row or column reference as well as a cell reference + * @return string Absolute coordinate e.g. '$A' or '$1' or '$A$1' + * @throws PHPExcel_Exception + */ + public static function absoluteReference($pCoordinateString = 'A1') + { + if (strpos($pCoordinateString,':') === FALSE && strpos($pCoordinateString,',') === FALSE) { + // Split out any worksheet name from the reference + $worksheet = ''; + $cellAddress = explode('!',$pCoordinateString); + if (count($cellAddress) > 1) { + list($worksheet,$pCoordinateString) = $cellAddress; + } + if ($worksheet > '') $worksheet .= '!'; + + // Create absolute coordinate + if (ctype_digit($pCoordinateString)) { + return $worksheet . '$' . $pCoordinateString; + } elseif (ctype_alpha($pCoordinateString)) { + return $worksheet . '$' . strtoupper($pCoordinateString); + } + return $worksheet . self::absoluteCoordinate($pCoordinateString); + } + + throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); + } + + /** + * Make string coordinate absolute + * + * @param string $pCoordinateString e.g. 'A1' + * @return string Absolute coordinate e.g. '$A$1' + * @throws PHPExcel_Exception + */ + public static function absoluteCoordinate($pCoordinateString = 'A1') + { + if (strpos($pCoordinateString,':') === FALSE && strpos($pCoordinateString,',') === FALSE) { + // Split out any worksheet name from the coordinate + $worksheet = ''; + $cellAddress = explode('!',$pCoordinateString); + if (count($cellAddress) > 1) { + list($worksheet,$pCoordinateString) = $cellAddress; + } + if ($worksheet > '') $worksheet .= '!'; + + // Create absolute coordinate + list($column, $row) = self::coordinateFromString($pCoordinateString); + $column = ltrim($column,'$'); + $row = ltrim($row,'$'); + return $worksheet . '$' . $column . '$' . $row; + } + + throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells'); + } + + /** + * Split range into coordinate strings + * + * @param string $pRange e.g. 'B4:D9' or 'B4:D9,H2:O11' or 'B4' + * @return array Array containg one or more arrays containing one or two coordinate strings + * e.g. array('B4','D9') or array(array('B4','D9'),array('H2','O11')) + * or array('B4') + */ + public static function splitRange($pRange = 'A1:A1') + { + // Ensure $pRange is a valid range + if(empty($pRange)) { + $pRange = self::DEFAULT_RANGE; + } + + $exploded = explode(',', $pRange); + $counter = count($exploded); + for ($i = 0; $i < $counter; ++$i) { + $exploded[$i] = explode(':', $exploded[$i]); + } + return $exploded; + } + + /** + * Build range from coordinate strings + * + * @param array $pRange Array containg one or more arrays containing one or two coordinate strings + * @return string String representation of $pRange + * @throws PHPExcel_Exception + */ + public static function buildRange($pRange) + { + // Verify range + if (!is_array($pRange) || empty($pRange) || !is_array($pRange[0])) { + throw new PHPExcel_Exception('Range does not contain any information'); + } + + // Build range + $imploded = array(); + $counter = count($pRange); + for ($i = 0; $i < $counter; ++$i) { + $pRange[$i] = implode(':', $pRange[$i]); + } + $imploded = implode(',', $pRange); + + return $imploded; + } + + /** + * Calculate range boundaries + * + * @param string $pRange Cell range (e.g. A1:A1) + * @return array Range coordinates array(Start Cell, End Cell) + * where Start Cell and End Cell are arrays (Column Number, Row Number) + */ + public static function rangeBoundaries($pRange = 'A1:A1') + { + // Ensure $pRange is a valid range + if(empty($pRange)) { + $pRange = self::DEFAULT_RANGE; + } + + // Uppercase coordinate + $pRange = strtoupper($pRange); + + // Extract range + if (strpos($pRange, ':') === FALSE) { + $rangeA = $rangeB = $pRange; + } else { + list($rangeA, $rangeB) = explode(':', $pRange); + } + + // Calculate range outer borders + $rangeStart = self::coordinateFromString($rangeA); + $rangeEnd = self::coordinateFromString($rangeB); + + // Translate column into index + $rangeStart[0] = self::columnIndexFromString($rangeStart[0]); + $rangeEnd[0] = self::columnIndexFromString($rangeEnd[0]); + + return array($rangeStart, $rangeEnd); + } + + /** + * Calculate range dimension + * + * @param string $pRange Cell range (e.g. A1:A1) + * @return array Range dimension (width, height) + */ + public static function rangeDimension($pRange = 'A1:A1') + { + // Calculate range outer borders + list($rangeStart,$rangeEnd) = self::rangeBoundaries($pRange); + + return array( ($rangeEnd[0] - $rangeStart[0] + 1), ($rangeEnd[1] - $rangeStart[1] + 1) ); + } + + /** + * Calculate range boundaries + * + * @param string $pRange Cell range (e.g. A1:A1) + * @return array Range coordinates array(Start Cell, End Cell) + * where Start Cell and End Cell are arrays (Column ID, Row Number) + */ + public static function getRangeBoundaries($pRange = 'A1:A1') + { + // Ensure $pRange is a valid range + if(empty($pRange)) { + $pRange = self::DEFAULT_RANGE; + } + + // Uppercase coordinate + $pRange = strtoupper($pRange); + + // Extract range + if (strpos($pRange, ':') === FALSE) { + $rangeA = $rangeB = $pRange; + } else { + list($rangeA, $rangeB) = explode(':', $pRange); + } + + return array( self::coordinateFromString($rangeA), self::coordinateFromString($rangeB)); + } + + /** + * Column index from string + * + * @param string $pString + * @return int Column index (base 1 !!!) + */ + public static function columnIndexFromString($pString = 'A') + { + // Using a lookup cache adds a slight memory overhead, but boosts speed + // caching using a static within the method is faster than a class static, + // though it's additional memory overhead + static $_indexCache = array(); + + if (isset($_indexCache[$pString])) + return $_indexCache[$pString]; + + // It's surprising how costly the strtoupper() and ord() calls actually are, so we use a lookup array rather than use ord() + // and make it case insensitive to get rid of the strtoupper() as well. Because it's a static, there's no significant + // memory overhead either + static $_columnLookup = array( + 'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4, 'E' => 5, 'F' => 6, 'G' => 7, 'H' => 8, 'I' => 9, 'J' => 10, 'K' => 11, 'L' => 12, 'M' => 13, + 'N' => 14, 'O' => 15, 'P' => 16, 'Q' => 17, 'R' => 18, 'S' => 19, 'T' => 20, 'U' => 21, 'V' => 22, 'W' => 23, 'X' => 24, 'Y' => 25, 'Z' => 26, + 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6, 'g' => 7, 'h' => 8, 'i' => 9, 'j' => 10, 'k' => 11, 'l' => 12, 'm' => 13, + 'n' => 14, 'o' => 15, 'p' => 16, 'q' => 17, 'r' => 18, 's' => 19, 't' => 20, 'u' => 21, 'v' => 22, 'w' => 23, 'x' => 24, 'y' => 25, 'z' => 26 + ); + + // We also use the language construct isset() rather than the more costly strlen() function to match the length of $pString + // for improved performance + if (isset($pString{0})) { + if (!isset($pString{1})) { + $_indexCache[$pString] = $_columnLookup[$pString]; + return $_indexCache[$pString]; + } elseif(!isset($pString{2})) { + $_indexCache[$pString] = $_columnLookup[$pString{0}] * 26 + $_columnLookup[$pString{1}]; + return $_indexCache[$pString]; + } elseif(!isset($pString{3})) { + $_indexCache[$pString] = $_columnLookup[$pString{0}] * 676 + $_columnLookup[$pString{1}] * 26 + $_columnLookup[$pString{2}]; + return $_indexCache[$pString]; + } + } + throw new PHPExcel_Exception("Column string index can not be " . ((isset($pString{0})) ? "longer than 3 characters" : "empty")); + } + + /** + * String from columnindex + * + * @param int $pColumnIndex Column index (base 0 !!!) + * @return string + */ + public static function stringFromColumnIndex($pColumnIndex = 0) + { + // Using a lookup cache adds a slight memory overhead, but boosts speed + // caching using a static within the method is faster than a class static, + // though it's additional memory overhead + static $_indexCache = array(); + + if (!isset($_indexCache[$pColumnIndex])) { + // Determine column string + if ($pColumnIndex < 26) { + $_indexCache[$pColumnIndex] = chr(65 + $pColumnIndex); + } elseif ($pColumnIndex < 702) { + $_indexCache[$pColumnIndex] = chr(64 + ($pColumnIndex / 26)) . + chr(65 + $pColumnIndex % 26); + } else { + $_indexCache[$pColumnIndex] = chr(64 + (($pColumnIndex - 26) / 676)) . + chr(65 + ((($pColumnIndex - 26) % 676) / 26)) . + chr(65 + $pColumnIndex % 26); + } + } + return $_indexCache[$pColumnIndex]; + } + + /** + * Extract all cell references in range + * + * @param string $pRange Range (e.g. A1 or A1:C10 or A1:E10 A20:E25) + * @return array Array containing single cell references + */ + public static function extractAllCellReferencesInRange($pRange = 'A1') { + // Returnvalue + $returnValue = array(); + + // Explode spaces + $cellBlocks = explode(' ', str_replace('$', '', strtoupper($pRange))); + foreach ($cellBlocks as $cellBlock) { + // Single cell? + if (strpos($cellBlock,':') === FALSE && strpos($cellBlock,',') === FALSE) { + $returnValue[] = $cellBlock; + continue; + } + + // Range... + $ranges = self::splitRange($cellBlock); + foreach($ranges as $range) { + // Single cell? + if (!isset($range[1])) { + $returnValue[] = $range[0]; + continue; + } + + // Range... + list($rangeStart, $rangeEnd) = $range; + sscanf($rangeStart,'%[A-Z]%d', $startCol, $startRow); + sscanf($rangeEnd,'%[A-Z]%d', $endCol, $endRow); + $endCol++; + + // Current data + $currentCol = $startCol; + $currentRow = $startRow; + + // Loop cells + while ($currentCol != $endCol) { + while ($currentRow <= $endRow) { + $returnValue[] = $currentCol.$currentRow; + ++$currentRow; + } + ++$currentCol; + $currentRow = $startRow; + } + } + } + + // Sort the result by column and row + $sortKeys = array(); + foreach (array_unique($returnValue) as $coord) { + sscanf($coord,'%[A-Z]%d', $column, $row); + $sortKeys[sprintf('%3s%09d',$column,$row)] = $coord; + } + ksort($sortKeys); + + // Return value + return array_values($sortKeys); + } + + /** + * Compare 2 cells + * + * @param PHPExcel_Cell $a Cell a + * @param PHPExcel_Cell $b Cell b + * @return int Result of comparison (always -1 or 1, never zero!) + */ + public static function compareCells(PHPExcel_Cell $a, PHPExcel_Cell $b) + { + if ($a->getRow() < $b->getRow()) { + return -1; + } elseif ($a->getRow() > $b->getRow()) { + return 1; + } elseif (self::columnIndexFromString($a->getColumn()) < self::columnIndexFromString($b->getColumn())) { + return -1; + } else { + return 1; + } + } + + /** + * Get value binder to use + * + * @return PHPExcel_Cell_IValueBinder + */ + public static function getValueBinder() { + if (self::$_valueBinder === NULL) { + self::$_valueBinder = new PHPExcel_Cell_DefaultValueBinder(); + } + + return self::$_valueBinder; + } + + /** + * Set value binder to use + * + * @param PHPExcel_Cell_IValueBinder $binder + * @throws PHPExcel_Exception + */ + public static function setValueBinder(PHPExcel_Cell_IValueBinder $binder = NULL) { + if ($binder === NULL) { + throw new PHPExcel_Exception("A PHPExcel_Cell_IValueBinder is required for PHPExcel to function correctly."); + } + + self::$_valueBinder = $binder; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if ((is_object($value)) && ($key != '_parent')) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } + + /** + * Get index to cellXf + * + * @return int + */ + public function getXfIndex() + { + return $this->_xfIndex; + } + + /** + * Set index to cellXf + * + * @param int $pValue + * @return PHPExcel_Cell + */ + public function setXfIndex($pValue = 0) + { + $this->_xfIndex = $pValue; + + return $this->notifyCacheController(); + } + + /** + * @deprecated Since version 1.7.8 for planned changes to cell for array formula handling + */ + public function setFormulaAttributes($pAttributes) + { + $this->_formulaAttributes = $pAttributes; + return $this; + } + + /** + * @deprecated Since version 1.7.8 for planned changes to cell for array formula handling + */ + public function getFormulaAttributes() + { + return $this->_formulaAttributes; + } + + /** + * Convert to string + * + * @return string + */ + public function __toString() + { + return (string) $this->getValue(); + } + +} + diff --git a/PHPExcel/Cell/AdvancedValueBinder.php b/PHPExcel/Cell/AdvancedValueBinder.php new file mode 100644 index 0000000..00a2b57 --- /dev/null +++ b/PHPExcel/Cell/AdvancedValueBinder.php @@ -0,0 +1,192 @@ +setValueExplicit( TRUE, PHPExcel_Cell_DataType::TYPE_BOOL); + return true; + } elseif($value == PHPExcel_Calculation::getFALSE()) { + $cell->setValueExplicit( FALSE, PHPExcel_Cell_DataType::TYPE_BOOL); + return true; + } + + // Check for number in scientific format + if (preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NUMBER.'$/', $value)) { + $cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); + return true; + } + + // Check for fraction + if (preg_match('/^([+-]?)\s*([0-9]+)\s?\/\s*([0-9]+)$/', $value, $matches)) { + // Convert value to number + $value = $matches[2] / $matches[3]; + if ($matches[1] == '-') $value = 0 - $value; + $cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode( '??/??' ); + return true; + } elseif (preg_match('/^([+-]?)([0-9]*) +([0-9]*)\s?\/\s*([0-9]*)$/', $value, $matches)) { + // Convert value to number + $value = $matches[2] + ($matches[3] / $matches[4]); + if ($matches[1] == '-') $value = 0 - $value; + $cell->setValueExplicit( (float) $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode( '# ??/??' ); + return true; + } + + // Check for percentage + if (preg_match('/^\-?[0-9]*\.?[0-9]*\s?\%$/', $value)) { + // Convert value to number + $value = (float) str_replace('%', '', $value) / 100; + $cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00 ); + return true; + } + + // Check for currency + $currencyCode = PHPExcel_Shared_String::getCurrencyCode(); + $decimalSeparator = PHPExcel_Shared_String::getDecimalSeparator(); + $thousandsSeparator = PHPExcel_Shared_String::getThousandsSeparator(); + if (preg_match('/^'.preg_quote($currencyCode).' *(\d{1,3}('.preg_quote($thousandsSeparator).'\d{3})*|(\d+))('.preg_quote($decimalSeparator).'\d{2})?$/', $value)) { + // Convert value to number + $value = (float) trim(str_replace(array($currencyCode, $thousandsSeparator, $decimalSeparator), array('', '', '.'), $value)); + $cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode( + str_replace('$', $currencyCode, PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE ) + ); + return true; + } elseif (preg_match('/^\$ *(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$/', $value)) { + // Convert value to number + $value = (float) trim(str_replace(array('$',','), '', $value)); + $cell->setValueExplicit( $value, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE ); + return true; + } + + // Check for time without seconds e.g. '9:45', '09:45' + if (preg_match('/^(\d|[0-1]\d|2[0-3]):[0-5]\d$/', $value)) { + // Convert value to number + list($h, $m) = explode(':', $value); + $days = $h / 24 + $m / 1440; + $cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3 ); + return true; + } + + // Check for time with seconds '9:45:59', '09:45:59' + if (preg_match('/^(\d|[0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$/', $value)) { + // Convert value to number + list($h, $m, $s) = explode(':', $value); + $days = $h / 24 + $m / 1440 + $s / 86400; + // Convert value to number + $cell->setValueExplicit($days, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4 ); + return true; + } + + // Check for datetime, e.g. '2008-12-31', '2008-12-31 15:59', '2008-12-31 15:59:10' + if (($d = PHPExcel_Shared_Date::stringToExcel($value)) !== false) { + // Convert value to number + $cell->setValueExplicit($d, PHPExcel_Cell_DataType::TYPE_NUMERIC); + // Determine style. Either there is a time part or not. Look for ':' + if (strpos($value, ':') !== false) { + $formatCode = 'yyyy-mm-dd h:mm'; + } else { + $formatCode = 'yyyy-mm-dd'; + } + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getNumberFormat()->setFormatCode($formatCode); + return true; + } + + // Check for newline character "\n" + if (strpos($value, "\n") !== FALSE) { + $value = PHPExcel_Shared_String::SanitizeUTF8($value); + $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING); + // Set style + $cell->getWorksheet()->getStyle( $cell->getCoordinate() ) + ->getAlignment()->setWrapText(TRUE); + return true; + } + } + + // Not bound yet? Use parent... + return parent::bindValue($cell, $value); + } +} diff --git a/PHPExcel/Cell/DataType.php b/PHPExcel/Cell/DataType.php new file mode 100644 index 0000000..8576542 --- /dev/null +++ b/PHPExcel/Cell/DataType.php @@ -0,0 +1,122 @@ + 0, + '#DIV/0!' => 1, + '#VALUE!' => 2, + '#REF!' => 3, + '#NAME?' => 4, + '#NUM!' => 5, + '#N/A' => 6 + ); + + /** + * Get list of error codes + * + * @return array + */ + public static function getErrorCodes() { + return self::$_errorCodes; + } + + /** + * DataType for value + * + * @deprecated Replaced by PHPExcel_Cell_IValueBinder infrastructure, will be removed in version 1.8.0 + * @param mixed $pValue + * @return string + */ + public static function dataTypeForValue($pValue = null) { + return PHPExcel_Cell_DefaultValueBinder::dataTypeForValue($pValue); + } + + /** + * Check a string that it satisfies Excel requirements + * + * @param mixed Value to sanitize to an Excel string + * @return mixed Sanitized value + */ + public static function checkString($pValue = null) + { + if ($pValue instanceof PHPExcel_RichText) { + // TODO: Sanitize Rich-Text string (max. character count is 32,767) + return $pValue; + } + + // string must never be longer than 32,767 characters, truncate if necessary + $pValue = PHPExcel_Shared_String::Substring($pValue, 0, 32767); + + // we require that newline is represented as "\n" in core, not as "\r\n" or "\r" + $pValue = str_replace(array("\r\n", "\r"), "\n", $pValue); + + return $pValue; + } + + /** + * Check a value that it is a valid error code + * + * @param mixed Value to sanitize to an Excel error code + * @return string Sanitized value + */ + public static function checkErrorCode($pValue = null) + { + $pValue = (string) $pValue; + + if ( !array_key_exists($pValue, self::$_errorCodes) ) { + $pValue = '#NULL!'; + } + + return $pValue; + } + +} diff --git a/PHPExcel/Cell/DataValidation.php b/PHPExcel/Cell/DataValidation.php new file mode 100644 index 0000000..3174a3f --- /dev/null +++ b/PHPExcel/Cell/DataValidation.php @@ -0,0 +1,472 @@ +_formula1 = ''; + $this->_formula2 = ''; + $this->_type = PHPExcel_Cell_DataValidation::TYPE_NONE; + $this->_errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP; + $this->_operator = ''; + $this->_allowBlank = FALSE; + $this->_showDropDown = FALSE; + $this->_showInputMessage = FALSE; + $this->_showErrorMessage = FALSE; + $this->_errorTitle = ''; + $this->_error = ''; + $this->_promptTitle = ''; + $this->_prompt = ''; + } + + /** + * Get Formula 1 + * + * @return string + */ + public function getFormula1() { + return $this->_formula1; + } + + /** + * Set Formula 1 + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setFormula1($value = '') { + $this->_formula1 = $value; + return $this; + } + + /** + * Get Formula 2 + * + * @return string + */ + public function getFormula2() { + return $this->_formula2; + } + + /** + * Set Formula 2 + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setFormula2($value = '') { + $this->_formula2 = $value; + return $this; + } + + /** + * Get Type + * + * @return string + */ + public function getType() { + return $this->_type; + } + + /** + * Set Type + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setType($value = PHPExcel_Cell_DataValidation::TYPE_NONE) { + $this->_type = $value; + return $this; + } + + /** + * Get Error style + * + * @return string + */ + public function getErrorStyle() { + return $this->_errorStyle; + } + + /** + * Set Error style + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setErrorStyle($value = PHPExcel_Cell_DataValidation::STYLE_STOP) { + $this->_errorStyle = $value; + return $this; + } + + /** + * Get Operator + * + * @return string + */ + public function getOperator() { + return $this->_operator; + } + + /** + * Set Operator + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setOperator($value = '') { + $this->_operator = $value; + return $this; + } + + /** + * Get Allow Blank + * + * @return boolean + */ + public function getAllowBlank() { + return $this->_allowBlank; + } + + /** + * Set Allow Blank + * + * @param boolean $value + * @return PHPExcel_Cell_DataValidation + */ + public function setAllowBlank($value = false) { + $this->_allowBlank = $value; + return $this; + } + + /** + * Get Show DropDown + * + * @return boolean + */ + public function getShowDropDown() { + return $this->_showDropDown; + } + + /** + * Set Show DropDown + * + * @param boolean $value + * @return PHPExcel_Cell_DataValidation + */ + public function setShowDropDown($value = false) { + $this->_showDropDown = $value; + return $this; + } + + /** + * Get Show InputMessage + * + * @return boolean + */ + public function getShowInputMessage() { + return $this->_showInputMessage; + } + + /** + * Set Show InputMessage + * + * @param boolean $value + * @return PHPExcel_Cell_DataValidation + */ + public function setShowInputMessage($value = false) { + $this->_showInputMessage = $value; + return $this; + } + + /** + * Get Show ErrorMessage + * + * @return boolean + */ + public function getShowErrorMessage() { + return $this->_showErrorMessage; + } + + /** + * Set Show ErrorMessage + * + * @param boolean $value + * @return PHPExcel_Cell_DataValidation + */ + public function setShowErrorMessage($value = false) { + $this->_showErrorMessage = $value; + return $this; + } + + /** + * Get Error title + * + * @return string + */ + public function getErrorTitle() { + return $this->_errorTitle; + } + + /** + * Set Error title + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setErrorTitle($value = '') { + $this->_errorTitle = $value; + return $this; + } + + /** + * Get Error + * + * @return string + */ + public function getError() { + return $this->_error; + } + + /** + * Set Error + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setError($value = '') { + $this->_error = $value; + return $this; + } + + /** + * Get Prompt title + * + * @return string + */ + public function getPromptTitle() { + return $this->_promptTitle; + } + + /** + * Set Prompt title + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setPromptTitle($value = '') { + $this->_promptTitle = $value; + return $this; + } + + /** + * Get Prompt + * + * @return string + */ + public function getPrompt() { + return $this->_prompt; + } + + /** + * Set Prompt + * + * @param string $value + * @return PHPExcel_Cell_DataValidation + */ + public function setPrompt($value = '') { + $this->_prompt = $value; + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_formula1 + . $this->_formula2 + . $this->_type = PHPExcel_Cell_DataValidation::TYPE_NONE + . $this->_errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP + . $this->_operator + . ($this->_allowBlank ? 't' : 'f') + . ($this->_showDropDown ? 't' : 'f') + . ($this->_showInputMessage ? 't' : 'f') + . ($this->_showErrorMessage ? 't' : 'f') + . $this->_errorTitle + . $this->_error + . $this->_promptTitle + . $this->_prompt + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Cell/DefaultValueBinder.php b/PHPExcel/Cell/DefaultValueBinder.php new file mode 100644 index 0000000..f1880fa --- /dev/null +++ b/PHPExcel/Cell/DefaultValueBinder.php @@ -0,0 +1,106 @@ +setValueExplicit( $value, self::dataTypeForValue($value) ); + + // Done! + return TRUE; + } + + /** + * DataType for value + * + * @param mixed $pValue + * @return string + */ + public static function dataTypeForValue($pValue = null) { + // Match the value against a few data types + if (is_null($pValue)) { + return PHPExcel_Cell_DataType::TYPE_NULL; + + } elseif ($pValue === '') { + return PHPExcel_Cell_DataType::TYPE_STRING; + + } elseif ($pValue instanceof PHPExcel_RichText) { + return PHPExcel_Cell_DataType::TYPE_INLINE; + + } elseif ($pValue{0} === '=' && strlen($pValue) > 1) { + return PHPExcel_Cell_DataType::TYPE_FORMULA; + + } elseif (is_bool($pValue)) { + return PHPExcel_Cell_DataType::TYPE_BOOL; + + } elseif (is_float($pValue) || is_int($pValue)) { + return PHPExcel_Cell_DataType::TYPE_NUMERIC; + + } elseif (preg_match('/^\-?([0-9]+\\.?[0-9]*|[0-9]*\\.?[0-9]+)$/', $pValue)) { + return PHPExcel_Cell_DataType::TYPE_NUMERIC; + + } elseif (is_string($pValue) && array_key_exists($pValue, PHPExcel_Cell_DataType::getErrorCodes())) { + return PHPExcel_Cell_DataType::TYPE_ERROR; + + } else { + return PHPExcel_Cell_DataType::TYPE_STRING; + + } + } +} diff --git a/PHPExcel/Cell/Hyperlink.php b/PHPExcel/Cell/Hyperlink.php new file mode 100644 index 0000000..06edfad --- /dev/null +++ b/PHPExcel/Cell/Hyperlink.php @@ -0,0 +1,126 @@ +_url = $pUrl; + $this->_tooltip = $pTooltip; + } + + /** + * Get URL + * + * @return string + */ + public function getUrl() { + return $this->_url; + } + + /** + * Set URL + * + * @param string $value + * @return PHPExcel_Cell_Hyperlink + */ + public function setUrl($value = '') { + $this->_url = $value; + return $this; + } + + /** + * Get tooltip + * + * @return string + */ + public function getTooltip() { + return $this->_tooltip; + } + + /** + * Set tooltip + * + * @param string $value + * @return PHPExcel_Cell_Hyperlink + */ + public function setTooltip($value = '') { + $this->_tooltip = $value; + return $this; + } + + /** + * Is this hyperlink internal? (to another worksheet) + * + * @return boolean + */ + public function isInternal() { + return strpos($this->_url, 'sheet://') !== false; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_url + . $this->_tooltip + . __CLASS__ + ); + } +} diff --git a/PHPExcel/Cell/IValueBinder.php b/PHPExcel/Cell/IValueBinder.php new file mode 100644 index 0000000..bc7b468 --- /dev/null +++ b/PHPExcel/Cell/IValueBinder.php @@ -0,0 +1,46 @@ +_name = $name; + $this->_title = $title; + $this->_legend = $legend; + $this->_xAxisLabel = $xAxisLabel; + $this->_yAxisLabel = $yAxisLabel; + $this->_plotArea = $plotArea; + $this->_plotVisibleOnly = $plotVisibleOnly; + $this->_displayBlanksAs = $displayBlanksAs; + } + + /** + * Get Name + * + * @return string + */ + public function getName() { + return $this->_name; + } + + /** + * Get Worksheet + * + * @return PHPExcel_Worksheet + */ + public function getWorksheet() { + return $this->_worksheet; + } + + /** + * Set Worksheet + * + * @param PHPExcel_Worksheet $pValue + * @throws PHPExcel_Chart_Exception + * @return PHPExcel_Chart + */ + public function setWorksheet(PHPExcel_Worksheet $pValue = null) { + $this->_worksheet = $pValue; + + return $this; + } + + /** + * Get Title + * + * @return PHPExcel_Chart_Title + */ + public function getTitle() { + return $this->_title; + } + + /** + * Set Title + * + * @param PHPExcel_Chart_Title $title + * @return PHPExcel_Chart + */ + public function setTitle(PHPExcel_Chart_Title $title) { + $this->_title = $title; + + return $this; + } + + /** + * Get Legend + * + * @return PHPExcel_Chart_Legend + */ + public function getLegend() { + return $this->_legend; + } + + /** + * Set Legend + * + * @param PHPExcel_Chart_Legend $legend + * @return PHPExcel_Chart + */ + public function setLegend(PHPExcel_Chart_Legend $legend) { + $this->_legend = $legend; + + return $this; + } + + /** + * Get X-Axis Label + * + * @return PHPExcel_Chart_Title + */ + public function getXAxisLabel() { + return $this->_xAxisLabel; + } + + /** + * Set X-Axis Label + * + * @param PHPExcel_Chart_Title $label + * @return PHPExcel_Chart + */ + public function setXAxisLabel(PHPExcel_Chart_Title $label) { + $this->_xAxisLabel = $label; + + return $this; + } + + /** + * Get Y-Axis Label + * + * @return PHPExcel_Chart_Title + */ + public function getYAxisLabel() { + return $this->_yAxisLabel; + } + + /** + * Set Y-Axis Label + * + * @param PHPExcel_Chart_Title $label + * @return PHPExcel_Chart + */ + public function setYAxisLabel(PHPExcel_Chart_Title $label) { + $this->_yAxisLabel = $label; + + return $this; + } + + /** + * Get Plot Area + * + * @return PHPExcel_Chart_PlotArea + */ + public function getPlotArea() { + return $this->_plotArea; + } + + /** + * Get Plot Visible Only + * + * @return boolean + */ + public function getPlotVisibleOnly() { + return $this->_plotVisibleOnly; + } + + /** + * Set Plot Visible Only + * + * @param boolean $plotVisibleOnly + * @return PHPExcel_Chart + */ + public function setPlotVisibleOnly($plotVisibleOnly = true) { + $this->_plotVisibleOnly = $plotVisibleOnly; + + return $this; + } + + /** + * Get Display Blanks as + * + * @return string + */ + public function getDisplayBlanksAs() { + return $this->_displayBlanksAs; + } + + /** + * Set Display Blanks as + * + * @param string $displayBlanksAs + * @return PHPExcel_Chart + */ + public function setDisplayBlanksAs($displayBlanksAs = '0') { + $this->_displayBlanksAs = $displayBlanksAs; + } + + + /** + * Set the Top Left position for the chart + * + * @param string $cell + * @param integer $xOffset + * @param integer $yOffset + * @return PHPExcel_Chart + */ + public function setTopLeftPosition($cell, $xOffset=null, $yOffset=null) { + $this->_topLeftCellRef = $cell; + if (!is_null($xOffset)) + $this->setTopLeftXOffset($xOffset); + if (!is_null($yOffset)) + $this->setTopLeftYOffset($yOffset); + + return $this; + } + + /** + * Get the top left position of the chart + * + * @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell + */ + public function getTopLeftPosition() { + return array( 'cell' => $this->_topLeftCellRef, + 'xOffset' => $this->_topLeftXOffset, + 'yOffset' => $this->_topLeftYOffset + ); + } + + /** + * Get the cell address where the top left of the chart is fixed + * + * @return string + */ + public function getTopLeftCell() { + return $this->_topLeftCellRef; + } + + /** + * Set the Top Left cell position for the chart + * + * @param string $cell + * @return PHPExcel_Chart + */ + public function setTopLeftCell($cell) { + $this->_topLeftCellRef = $cell; + + return $this; + } + + /** + * Set the offset position within the Top Left cell for the chart + * + * @param integer $xOffset + * @param integer $yOffset + * @return PHPExcel_Chart + */ + public function setTopLeftOffset($xOffset=null,$yOffset=null) { + if (!is_null($xOffset)) + $this->setTopLeftXOffset($xOffset); + if (!is_null($yOffset)) + $this->setTopLeftYOffset($yOffset); + + return $this; + } + + /** + * Get the offset position within the Top Left cell for the chart + * + * @return integer[] + */ + public function getTopLeftOffset() { + return array( 'X' => $this->_topLeftXOffset, + 'Y' => $this->_topLeftYOffset + ); + } + + public function setTopLeftXOffset($xOffset) { + $this->_topLeftXOffset = $xOffset; + + return $this; + } + + public function getTopLeftXOffset() { + return $this->_topLeftXOffset; + } + + public function setTopLeftYOffset($yOffset) { + $this->_topLeftYOffset = $yOffset; + + return $this; + } + + public function getTopLeftYOffset() { + return $this->_topLeftYOffset; + } + + /** + * Set the Bottom Right position of the chart + * + * @param string $cell + * @param integer $xOffset + * @param integer $yOffset + * @return PHPExcel_Chart + */ + public function setBottomRightPosition($cell, $xOffset=null, $yOffset=null) { + $this->_bottomRightCellRef = $cell; + if (!is_null($xOffset)) + $this->setBottomRightXOffset($xOffset); + if (!is_null($yOffset)) + $this->setBottomRightYOffset($yOffset); + + return $this; + } + + /** + * Get the bottom right position of the chart + * + * @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell + */ + public function getBottomRightPosition() { + return array( 'cell' => $this->_bottomRightCellRef, + 'xOffset' => $this->_bottomRightXOffset, + 'yOffset' => $this->_bottomRightYOffset + ); + } + + public function setBottomRightCell($cell) { + $this->_bottomRightCellRef = $cell; + + return $this; + } + + /** + * Get the cell address where the bottom right of the chart is fixed + * + * @return string + */ + public function getBottomRightCell() { + return $this->_bottomRightCellRef; + } + + /** + * Set the offset position within the Bottom Right cell for the chart + * + * @param integer $xOffset + * @param integer $yOffset + * @return PHPExcel_Chart + */ + public function setBottomRightOffset($xOffset=null,$yOffset=null) { + if (!is_null($xOffset)) + $this->setBottomRightXOffset($xOffset); + if (!is_null($yOffset)) + $this->setBottomRightYOffset($yOffset); + + return $this; + } + + /** + * Get the offset position within the Bottom Right cell for the chart + * + * @return integer[] + */ + public function getBottomRightOffset() { + return array( 'X' => $this->_bottomRightXOffset, + 'Y' => $this->_bottomRightYOffset + ); + } + + public function setBottomRightXOffset($xOffset) { + $this->_bottomRightXOffset = $xOffset; + + return $this; + } + + public function getBottomRightXOffset() { + return $this->_bottomRightXOffset; + } + + public function setBottomRightYOffset($yOffset) { + $this->_bottomRightYOffset = $yOffset; + + return $this; + } + + public function getBottomRightYOffset() { + return $this->_bottomRightYOffset; + } + + + public function refresh() { + if ($this->_worksheet !== NULL) { + $this->_plotArea->refresh($this->_worksheet); + } + } + + public function render($outputDestination = null) { + $libraryName = PHPExcel_Settings::getChartRendererName(); + if (is_null($libraryName)) { + return false; + } + // Ensure that data series values are up-to-date before we render + $this->refresh(); + + $libraryPath = PHPExcel_Settings::getChartRendererPath(); + $includePath = str_replace('\\','/',get_include_path()); + $rendererPath = str_replace('\\','/',$libraryPath); + if (strpos($rendererPath,$includePath) === false) { + set_include_path(get_include_path() . PATH_SEPARATOR . $libraryPath); + } + + $rendererName = 'PHPExcel_Chart_Renderer_'.$libraryName; + $renderer = new $rendererName($this); + + if ($outputDestination == 'php://output') { + $outputDestination = null; + } + return $renderer->render($outputDestination); + } + +} diff --git a/PHPExcel/Chart/DataSeries.php b/PHPExcel/Chart/DataSeries.php new file mode 100644 index 0000000..f5391aa --- /dev/null +++ b/PHPExcel/Chart/DataSeries.php @@ -0,0 +1,365 @@ +_plotType = $plotType; + $this->_plotGrouping = $plotGrouping; + $this->_plotOrder = $plotOrder; + $keys = array_keys($plotValues); + $this->_plotValues = $plotValues; + if ((count($plotLabel) == 0) || (is_null($plotLabel[$keys[0]]))) { + $plotLabel[$keys[0]] = new PHPExcel_Chart_DataSeriesValues(); + } + + $this->_plotLabel = $plotLabel; + if ((count($plotCategory) == 0) || (is_null($plotCategory[$keys[0]]))) { + $plotCategory[$keys[0]] = new PHPExcel_Chart_DataSeriesValues(); + } + $this->_plotCategory = $plotCategory; + $this->_smoothLine = $smoothLine; + $this->_plotStyle = $plotStyle; + } + + /** + * Get Plot Type + * + * @return string + */ + public function getPlotType() { + return $this->_plotType; + } + + /** + * Set Plot Type + * + * @param string $plotType + * @return PHPExcel_Chart_DataSeries + */ + public function setPlotType($plotType = '') { + $this->_plotType = $plotType; + return $this; + } + + /** + * Get Plot Grouping Type + * + * @return string + */ + public function getPlotGrouping() { + return $this->_plotGrouping; + } + + /** + * Set Plot Grouping Type + * + * @param string $groupingType + * @return PHPExcel_Chart_DataSeries + */ + public function setPlotGrouping($groupingType = null) { + $this->_plotGrouping = $groupingType; + return $this; + } + + /** + * Get Plot Direction + * + * @return string + */ + public function getPlotDirection() { + return $this->_plotDirection; + } + + /** + * Set Plot Direction + * + * @param string $plotDirection + * @return PHPExcel_Chart_DataSeries + */ + public function setPlotDirection($plotDirection = null) { + $this->_plotDirection = $plotDirection; + return $this; + } + + /** + * Get Plot Order + * + * @return string + */ + public function getPlotOrder() { + return $this->_plotOrder; + } + + /** + * Get Plot Labels + * + * @return array of PHPExcel_Chart_DataSeriesValues + */ + public function getPlotLabels() { + return $this->_plotLabel; + } + + /** + * Get Plot Label by Index + * + * @return PHPExcel_Chart_DataSeriesValues + */ + public function getPlotLabelByIndex($index) { + $keys = array_keys($this->_plotLabel); + if (in_array($index,$keys)) { + return $this->_plotLabel[$index]; + } elseif(isset($keys[$index])) { + return $this->_plotLabel[$keys[$index]]; + } + return false; + } + + /** + * Get Plot Categories + * + * @return array of PHPExcel_Chart_DataSeriesValues + */ + public function getPlotCategories() { + return $this->_plotCategory; + } + + /** + * Get Plot Category by Index + * + * @return PHPExcel_Chart_DataSeriesValues + */ + public function getPlotCategoryByIndex($index) { + $keys = array_keys($this->_plotCategory); + if (in_array($index,$keys)) { + return $this->_plotCategory[$index]; + } elseif(isset($keys[$index])) { + return $this->_plotCategory[$keys[$index]]; + } + return false; + } + + /** + * Get Plot Style + * + * @return string + */ + public function getPlotStyle() { + return $this->_plotStyle; + } + + /** + * Set Plot Style + * + * @param string $plotStyle + * @return PHPExcel_Chart_DataSeries + */ + public function setPlotStyle($plotStyle = null) { + $this->_plotStyle = $plotStyle; + return $this; + } + + /** + * Get Plot Values + * + * @return array of PHPExcel_Chart_DataSeriesValues + */ + public function getPlotValues() { + return $this->_plotValues; + } + + /** + * Get Plot Values by Index + * + * @return PHPExcel_Chart_DataSeriesValues + */ + public function getPlotValuesByIndex($index) { + $keys = array_keys($this->_plotValues); + if (in_array($index,$keys)) { + return $this->_plotValues[$index]; + } elseif(isset($keys[$index])) { + return $this->_plotValues[$keys[$index]]; + } + return false; + } + + /** + * Get Number of Plot Series + * + * @return integer + */ + public function getPlotSeriesCount() { + return count($this->_plotValues); + } + + /** + * Get Smooth Line + * + * @return boolean + */ + public function getSmoothLine() { + return $this->_smoothLine; + } + + /** + * Set Smooth Line + * + * @param boolean $smoothLine + * @return PHPExcel_Chart_DataSeries + */ + public function setSmoothLine($smoothLine = TRUE) { + $this->_smoothLine = $smoothLine; + return $this; + } + + public function refresh(PHPExcel_Worksheet $worksheet) { + foreach($this->_plotValues as $plotValues) { + if ($plotValues !== NULL) + $plotValues->refresh($worksheet, TRUE); + } + foreach($this->_plotLabel as $plotValues) { + if ($plotValues !== NULL) + $plotValues->refresh($worksheet, TRUE); + } + foreach($this->_plotCategory as $plotValues) { + if ($plotValues !== NULL) + $plotValues->refresh($worksheet, FALSE); + } + } + +} diff --git a/PHPExcel/Chart/DataSeriesValues.php b/PHPExcel/Chart/DataSeriesValues.php new file mode 100644 index 0000000..930542b --- /dev/null +++ b/PHPExcel/Chart/DataSeriesValues.php @@ -0,0 +1,327 @@ +setDataType($dataType); + $this->_dataSource = $dataSource; + $this->_formatCode = $formatCode; + $this->_pointCount = $pointCount; + $this->_dataValues = $dataValues; + $this->_marker = $marker; + } + + /** + * Get Series Data Type + * + * @return string + */ + public function getDataType() { + return $this->_dataType; + } + + /** + * Set Series Data Type + * + * @param string $dataType Datatype of this data series + * Typical values are: + * PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_STRING + * Normally used for axis point values + * PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_NUMBER + * Normally used for chart data values + * @return PHPExcel_Chart_DataSeriesValues + */ + public function setDataType($dataType = self::DATASERIES_TYPE_NUMBER) { + if (!in_array($dataType, self::$_dataTypeValues)) { + throw new PHPExcel_Chart_Exception('Invalid datatype for chart data series values'); + } + $this->_dataType = $dataType; + + return $this; + } + + /** + * Get Series Data Source (formula) + * + * @return string + */ + public function getDataSource() { + return $this->_dataSource; + } + + /** + * Set Series Data Source (formula) + * + * @param string $dataSource + * @return PHPExcel_Chart_DataSeriesValues + */ + public function setDataSource($dataSource = null, $refreshDataValues = true) { + $this->_dataSource = $dataSource; + + if ($refreshDataValues) { + // TO DO + } + + return $this; + } + + /** + * Get Point Marker + * + * @return string + */ + public function getPointMarker() { + return $this->_marker; + } + + /** + * Set Point Marker + * + * @param string $marker + * @return PHPExcel_Chart_DataSeriesValues + */ + public function setPointMarker($marker = null) { + $this->_marker = $marker; + + return $this; + } + + /** + * Get Series Format Code + * + * @return string + */ + public function getFormatCode() { + return $this->_formatCode; + } + + /** + * Set Series Format Code + * + * @param string $formatCode + * @return PHPExcel_Chart_DataSeriesValues + */ + public function setFormatCode($formatCode = null) { + $this->_formatCode = $formatCode; + + return $this; + } + + /** + * Get Series Point Count + * + * @return integer + */ + public function getPointCount() { + return $this->_pointCount; + } + + /** + * Identify if the Data Series is a multi-level or a simple series + * + * @return boolean + */ + public function isMultiLevelSeries() { + if (count($this->_dataValues) > 0) { + return is_array($this->_dataValues[0]); + } + return null; + } + + /** + * Return the level count of a multi-level Data Series + * + * @return boolean + */ + public function multiLevelCount() { + $levelCount = 0; + foreach($this->_dataValues as $dataValueSet) { + $levelCount = max($levelCount,count($dataValueSet)); + } + return $levelCount; + } + + /** + * Get Series Data Values + * + * @return array of mixed + */ + public function getDataValues() { + return $this->_dataValues; + } + + /** + * Get the first Series Data value + * + * @return mixed + */ + public function getDataValue() { + $count = count($this->_dataValues); + if ($count == 0) { + return null; + } elseif ($count == 1) { + return $this->_dataValues[0]; + } + return $this->_dataValues; + } + + /** + * Set Series Data Values + * + * @param array $dataValues + * @param boolean $refreshDataSource + * TRUE - refresh the value of _dataSource based on the values of $dataValues + * FALSE - don't change the value of _dataSource + * @return PHPExcel_Chart_DataSeriesValues + */ + public function setDataValues($dataValues = array(), $refreshDataSource = TRUE) { + $this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($dataValues); + $this->_pointCount = count($dataValues); + + if ($refreshDataSource) { + // TO DO + } + + return $this; + } + + private function _stripNulls($var) { + return $var !== NULL; + } + + public function refresh(PHPExcel_Worksheet $worksheet, $flatten = TRUE) { + if ($this->_dataSource !== NULL) { + $calcEngine = PHPExcel_Calculation::getInstance($worksheet->getParent()); + $newDataValues = PHPExcel_Calculation::_unwrapResult( + $calcEngine->_calculateFormulaValue( + '='.$this->_dataSource, + NULL, + $worksheet->getCell('A1') + ) + ); + if ($flatten) { + $this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues); + foreach($this->_dataValues as &$dataValue) { + if ((!empty($dataValue)) && ($dataValue[0] == '#')) { + $dataValue = 0.0; + } + } + unset($dataValue); + } else { + $cellRange = explode('!',$this->_dataSource); + if (count($cellRange) > 1) { + list(,$cellRange) = $cellRange; + } + + $dimensions = PHPExcel_Cell::rangeDimension(str_replace('$','',$cellRange)); + if (($dimensions[0] == 1) || ($dimensions[1] == 1)) { + $this->_dataValues = PHPExcel_Calculation_Functions::flattenArray($newDataValues); + } else { + $newArray = array_values(array_shift($newDataValues)); + foreach($newArray as $i => $newDataSet) { + $newArray[$i] = array($newDataSet); + } + + foreach($newDataValues as $newDataSet) { + $i = 0; + foreach($newDataSet as $newDataVal) { + array_unshift($newArray[$i++],$newDataVal); + } + } + $this->_dataValues = $newArray; + } + } + $this->_pointCount = count($this->_dataValues); + } + + } + +} diff --git a/PHPExcel/Chart/Exception.php b/PHPExcel/Chart/Exception.php new file mode 100644 index 0000000..ecf3c43 --- /dev/null +++ b/PHPExcel/Chart/Exception.php @@ -0,0 +1,52 @@ +line = $line; + $e->file = $file; + throw $e; + } +} diff --git a/PHPExcel/Chart/Layout.php b/PHPExcel/Chart/Layout.php new file mode 100644 index 0000000..d749dfe --- /dev/null +++ b/PHPExcel/Chart/Layout.php @@ -0,0 +1,445 @@ +_layoutTarget = $layout['layoutTarget']; } + if (isset($layout['xMode'])) { $this->_xMode = $layout['xMode']; } + if (isset($layout['yMode'])) { $this->_yMode = $layout['yMode']; } + if (isset($layout['x'])) { $this->_xPos = (float) $layout['x']; } + if (isset($layout['y'])) { $this->_yPos = (float) $layout['y']; } + if (isset($layout['w'])) { $this->_width = (float) $layout['w']; } + if (isset($layout['h'])) { $this->_height = (float) $layout['h']; } + } + + /** + * Get Layout Target + * + * @return string + */ + public function getLayoutTarget() { + return $this->_layoutTarget; + } + + /** + * Set Layout Target + * + * @param Layout Target $value + * @return PHPExcel_Chart_Layout + */ + public function setLayoutTarget($value) { + $this->_layoutTarget = $value; + return $this; + } + + /** + * Get X-Mode + * + * @return string + */ + public function getXMode() { + return $this->_xMode; + } + + /** + * Set X-Mode + * + * @param X-Mode $value + * @return PHPExcel_Chart_Layout + */ + public function setXMode($value) { + $this->_xMode = $value; + return $this; + } + + /** + * Get Y-Mode + * + * @return string + */ + public function getYMode() { + return $this->_yMode; + } + + /** + * Set Y-Mode + * + * @param Y-Mode $value + * @return PHPExcel_Chart_Layout + */ + public function setYMode($value) { + $this->_yMode = $value; + return $this; + } + + /** + * Get X-Position + * + * @return number + */ + public function getXPosition() { + return $this->_xPos; + } + + /** + * Set X-Position + * + * @param X-Position $value + * @return PHPExcel_Chart_Layout + */ + public function setXPosition($value) { + $this->_xPos = $value; + return $this; + } + + /** + * Get Y-Position + * + * @return number + */ + public function getYPosition() { + return $this->_yPos; + } + + /** + * Set Y-Position + * + * @param Y-Position $value + * @return PHPExcel_Chart_Layout + */ + public function setYPosition($value) { + $this->_yPos = $value; + return $this; + } + + /** + * Get Width + * + * @return number + */ + public function getWidth() { + return $this->_width; + } + + /** + * Set Width + * + * @param Width $value + * @return PHPExcel_Chart_Layout + */ + public function setWidth($value) { + $this->_width = $value; + return $this; + } + + /** + * Get Height + * + * @return number + */ + public function getHeight() { + return $this->_height; + } + + /** + * Set Height + * + * @param Height $value + * @return PHPExcel_Chart_Layout + */ + public function setHeight($value) { + $this->_height = $value; + return $this; + } + + + /** + * Get show legend key + * + * @return boolean + */ + public function getShowLegendKey() { + return $this->_showLegendKey; + } + + /** + * Set show legend key + * Specifies that legend keys should be shown in data labels. + * + * @param boolean $value Show legend key + * @return PHPExcel_Chart_Layout + */ + public function setShowLegendKey($value) { + $this->_showLegendKey = $value; + return $this; + } + + /** + * Get show value + * + * @return boolean + */ + public function getShowVal() { + return $this->_showVal; + } + + /** + * Set show val + * Specifies that the value should be shown in data labels. + * + * @param boolean $value Show val + * @return PHPExcel_Chart_Layout + */ + public function setShowVal($value) { + $this->_showVal = $value; + return $this; + } + + /** + * Get show category name + * + * @return boolean + */ + public function getShowCatName() { + return $this->_showCatName; + } + + /** + * Set show cat name + * Specifies that the category name should be shown in data labels. + * + * @param boolean $value Show cat name + * @return PHPExcel_Chart_Layout + */ + public function setShowCatName($value) { + $this->_showCatName = $value; + return $this; + } + + /** + * Get show data series name + * + * @return boolean + */ + public function getShowSerName() { + return $this->_showSerName; + } + + /** + * Set show ser name + * Specifies that the series name should be shown in data labels. + * + * @param boolean $value Show series name + * @return PHPExcel_Chart_Layout + */ + public function setShowSerName($value) { + $this->_showSerName = $value; + return $this; + } + + /** + * Get show percentage + * + * @return boolean + */ + public function getShowPercent() { + return $this->_showPercent; + } + + /** + * Set show percentage + * Specifies that the percentage should be shown in data labels. + * + * @param boolean $value Show percentage + * @return PHPExcel_Chart_Layout + */ + public function setShowPercent($value) { + $this->_showPercent = $value; + return $this; + } + + /** + * Get show bubble size + * + * @return boolean + */ + public function getShowBubbleSize() { + return $this->_showBubbleSize; + } + + /** + * Set show bubble size + * Specifies that the bubble size should be shown in data labels. + * + * @param boolean $value Show bubble size + * @return PHPExcel_Chart_Layout + */ + public function setShowBubbleSize($value) { + $this->_showBubbleSize = $value; + return $this; + } + + /** + * Get show leader lines + * + * @return boolean + */ + public function getShowLeaderLines() { + return $this->_showLeaderLines; + } + + /** + * Set show leader lines + * Specifies that leader lines should be shown in data labels. + * + * @param boolean $value Show leader lines + * @return PHPExcel_Chart_Layout + */ + public function setShowLeaderLines($value) { + $this->_showLeaderLines = $value; + return $this; + } + +} diff --git a/PHPExcel/Chart/Legend.php b/PHPExcel/Chart/Legend.php new file mode 100644 index 0000000..4b7c644 --- /dev/null +++ b/PHPExcel/Chart/Legend.php @@ -0,0 +1,171 @@ + self::POSITION_BOTTOM, + self::xlLegendPositionCorner => self::POSITION_TOPRIGHT, + self::xlLegendPositionCustom => '??', + self::xlLegendPositionLeft => self::POSITION_LEFT, + self::xlLegendPositionRight => self::POSITION_RIGHT, + self::xlLegendPositionTop => self::POSITION_TOP + ); + + /** + * Legend position + * + * @var string + */ + private $_position = self::POSITION_RIGHT; + + /** + * Allow overlay of other elements? + * + * @var boolean + */ + private $_overlay = TRUE; + + /** + * Legend Layout + * + * @var PHPExcel_Chart_Layout + */ + private $_layout = NULL; + + + /** + * Create a new PHPExcel_Chart_Legend + */ + public function __construct($position = self::POSITION_RIGHT, PHPExcel_Chart_Layout $layout = NULL, $overlay = FALSE) + { + $this->setPosition($position); + $this->_layout = $layout; + $this->setOverlay($overlay); + } + + /** + * Get legend position as an excel string value + * + * @return string + */ + public function getPosition() { + return $this->_position; + } + + /** + * Get legend position using an excel string value + * + * @param string $position + */ + public function setPosition($position = self::POSITION_RIGHT) { + if (!in_array($position,self::$_positionXLref)) { + return false; + } + + $this->_position = $position; + return true; + } + + /** + * Get legend position as an Excel internal numeric value + * + * @return number + */ + public function getPositionXL() { + return array_search($this->_position,self::$_positionXLref); + } + + /** + * Set legend position using an Excel internal numeric value + * + * @param number $positionXL + */ + public function setPositionXL($positionXL = self::xlLegendPositionRight) { + if (!array_key_exists($positionXL,self::$_positionXLref)) { + return false; + } + + $this->_position = self::$_positionXLref[$positionXL]; + return true; + } + + /** + * Get allow overlay of other elements? + * + * @return boolean + */ + public function getOverlay() { + return $this->_overlay; + } + + /** + * Set allow overlay of other elements? + * + * @param boolean $overlay + * @return boolean + */ + public function setOverlay($overlay = FALSE) { + if (!is_bool($overlay)) { + return false; + } + + $this->_overlay = $overlay; + return true; + } + + /** + * Get Layout + * + * @return PHPExcel_Chart_Layout + */ + public function getLayout() { + return $this->_layout; + } + +} diff --git a/PHPExcel/Chart/PlotArea.php b/PHPExcel/Chart/PlotArea.php new file mode 100644 index 0000000..237d29b --- /dev/null +++ b/PHPExcel/Chart/PlotArea.php @@ -0,0 +1,128 @@ +_layout = $layout; + $this->_plotSeries = $plotSeries; + } + + /** + * Get Layout + * + * @return PHPExcel_Chart_Layout + */ + public function getLayout() { + return $this->_layout; + } + + /** + * Get Number of Plot Groups + * + * @return array of PHPExcel_Chart_DataSeries + */ + public function getPlotGroupCount() { + return count($this->_plotSeries); + } + + /** + * Get Number of Plot Series + * + * @return integer + */ + public function getPlotSeriesCount() { + $seriesCount = 0; + foreach($this->_plotSeries as $plot) { + $seriesCount += $plot->getPlotSeriesCount(); + } + return $seriesCount; + } + + /** + * Get Plot Series + * + * @return array of PHPExcel_Chart_DataSeries + */ + public function getPlotGroup() { + return $this->_plotSeries; + } + + /** + * Get Plot Series by Index + * + * @return PHPExcel_Chart_DataSeries + */ + public function getPlotGroupByIndex($index) { + return $this->_plotSeries[$index]; + } + + /** + * Set Plot Series + * + * @param [PHPExcel_Chart_DataSeries] + * @return PHPExcel_Chart_PlotArea + */ + public function setPlotSeries($plotSeries = array()) { + $this->_plotSeries = $plotSeries; + + return $this; + } + + public function refresh(PHPExcel_Worksheet $worksheet) { + foreach($this->_plotSeries as $plotSeries) { + $plotSeries->refresh($worksheet); + } + } + +} diff --git a/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt b/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt new file mode 100644 index 0000000..faaa61d --- /dev/null +++ b/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt @@ -0,0 +1,17 @@ +ChartDirector + http://www.advsofteng.com/cdphp.html + +GraPHPite + http://graphpite.sourceforge.net/ + +JpGraph + http://www.aditus.nu/jpgraph/ + +LibChart + http://naku.dohcrew.com/libchart/pages/introduction/ + +pChart + http://pchart.sourceforge.net/ + +TeeChart + http://www.steema.com/products/teechart/overview.html diff --git a/PHPExcel/Chart/Renderer/jpgraph.php b/PHPExcel/Chart/Renderer/jpgraph.php new file mode 100644 index 0000000..14ba2a0 --- /dev/null +++ b/PHPExcel/Chart/Renderer/jpgraph.php @@ -0,0 +1,855 @@ + MARK_DIAMOND, + 'square' => MARK_SQUARE, + 'triangle' => MARK_UTRIANGLE, + 'x' => MARK_X, + 'star' => MARK_STAR, + 'dot' => MARK_FILLEDCIRCLE, + 'dash' => MARK_DTRIANGLE, + 'circle' => MARK_CIRCLE, + 'plus' => MARK_CROSS + ); + + + private $_chart = null; + + private $_graph = null; + + private static $_plotColour = 0; + + private static $_plotMark = 0; + + + private function _formatPointMarker($seriesPlot,$markerID) { + $plotMarkKeys = array_keys(self::$_markSet); + if (is_null($markerID)) { + // Use default plot marker (next marker in the series) + self::$_plotMark %= count(self::$_markSet); + $seriesPlot->mark->SetType(self::$_markSet[$plotMarkKeys[self::$_plotMark++]]); + } elseif ($markerID !== 'none') { + // Use specified plot marker (if it exists) + if (isset(self::$_markSet[$markerID])) { + $seriesPlot->mark->SetType(self::$_markSet[$markerID]); + } else { + // If the specified plot marker doesn't exist, use default plot marker (next marker in the series) + self::$_plotMark %= count(self::$_markSet); + $seriesPlot->mark->SetType(self::$_markSet[$plotMarkKeys[self::$_plotMark++]]); + } + } else { + // Hide plot marker + $seriesPlot->mark->Hide(); + } + $seriesPlot->mark->SetColor(self::$_colourSet[self::$_plotColour]); + $seriesPlot->mark->SetFillColor(self::$_colourSet[self::$_plotColour]); + $seriesPlot->SetColor(self::$_colourSet[self::$_plotColour++]); + + return $seriesPlot; + } // function _formatPointMarker() + + + private function _formatDataSetLabels($groupID, $datasetLabels, $labelCount, $rotation = '') { + $datasetLabelFormatCode = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex(0)->getFormatCode(); + if (!is_null($datasetLabelFormatCode)) { + // Retrieve any label formatting code + $datasetLabelFormatCode = stripslashes($datasetLabelFormatCode); + } + + $testCurrentIndex = 0; + foreach($datasetLabels as $i => $datasetLabel) { + if (is_array($datasetLabel)) { + if ($rotation == 'bar') { + $datasetLabels[$i] = implode(" ",$datasetLabel); + } else { + $datasetLabel = array_reverse($datasetLabel); + $datasetLabels[$i] = implode("\n",$datasetLabel); + } + } else { + // Format labels according to any formatting code + if (!is_null($datasetLabelFormatCode)) { + $datasetLabels[$i] = PHPExcel_Style_NumberFormat::toFormattedString($datasetLabel,$datasetLabelFormatCode); + } + } + ++$testCurrentIndex; + } + + return $datasetLabels; + } // function _formatDataSetLabels() + + + private function _percentageSumCalculation($groupID,$seriesCount) { + // Adjust our values to a percentage value across all series in the group + for($i = 0; $i < $seriesCount; ++$i) { + if ($i == 0) { + $sumValues = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getDataValues(); + } else { + $nextValues = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getDataValues(); + foreach($nextValues as $k => $value) { + if (isset($sumValues[$k])) { + $sumValues[$k] += $value; + } else { + $sumValues[$k] = $value; + } + } + } + } + + return $sumValues; + } // function _percentageSumCalculation() + + + private function _percentageAdjustValues($dataValues,$sumValues) { + foreach($dataValues as $k => $dataValue) { + $dataValues[$k] = $dataValue / $sumValues[$k] * 100; + } + + return $dataValues; + } // function _percentageAdjustValues() + + + private function _getCaption($captionElement) { + // Read any caption + $caption = (!is_null($captionElement)) ? $captionElement->getCaption() : NULL; + // Test if we have a title caption to display + if (!is_null($caption)) { + // If we do, it could be a plain string or an array + if (is_array($caption)) { + // Implode an array to a plain string + $caption = implode('',$caption); + } + } + return $caption; + } // function _getCaption() + + + private function _renderTitle() { + $title = $this->_getCaption($this->_chart->getTitle()); + if (!is_null($title)) { + $this->_graph->title->Set($title); + } + } // function _renderTitle() + + + private function _renderLegend() { + $legend = $this->_chart->getLegend(); + if (!is_null($legend)) { + $legendPosition = $legend->getPosition(); + $legendOverlay = $legend->getOverlay(); + switch ($legendPosition) { + case 'r' : + $this->_graph->legend->SetPos(0.01,0.5,'right','center'); // right + $this->_graph->legend->SetColumns(1); + break; + case 'l' : + $this->_graph->legend->SetPos(0.01,0.5,'left','center'); // left + $this->_graph->legend->SetColumns(1); + break; + case 't' : + $this->_graph->legend->SetPos(0.5,0.01,'center','top'); // top + break; + case 'b' : + $this->_graph->legend->SetPos(0.5,0.99,'center','bottom'); // bottom + break; + default : + $this->_graph->legend->SetPos(0.01,0.01,'right','top'); // top-right + $this->_graph->legend->SetColumns(1); + break; + } + } else { + $this->_graph->legend->Hide(); + } + } // function _renderLegend() + + + private function _renderCartesianPlotArea($type='textlin') { + $this->_graph = new Graph(self::$_width,self::$_height); + $this->_graph->SetScale($type); + + $this->_renderTitle(); + + // Rotate for bar rather than column chart + $rotation = $this->_chart->getPlotArea()->getPlotGroupByIndex(0)->getPlotDirection(); + $reverse = ($rotation == 'bar') ? true : false; + + $xAxisLabel = $this->_chart->getXAxisLabel(); + if (!is_null($xAxisLabel)) { + $title = $this->_getCaption($xAxisLabel); + if (!is_null($title)) { + $this->_graph->xaxis->SetTitle($title,'center'); + $this->_graph->xaxis->title->SetMargin(35); + if ($reverse) { + $this->_graph->xaxis->title->SetAngle(90); + $this->_graph->xaxis->title->SetMargin(90); + } + } + } + + $yAxisLabel = $this->_chart->getYAxisLabel(); + if (!is_null($yAxisLabel)) { + $title = $this->_getCaption($yAxisLabel); + if (!is_null($title)) { + $this->_graph->yaxis->SetTitle($title,'center'); + if ($reverse) { + $this->_graph->yaxis->title->SetAngle(0); + $this->_graph->yaxis->title->SetMargin(-55); + } + } + } + } // function _renderCartesianPlotArea() + + + private function _renderPiePlotArea($doughnut = False) { + $this->_graph = new PieGraph(self::$_width,self::$_height); + + $this->_renderTitle(); + } // function _renderPiePlotArea() + + + private function _renderRadarPlotArea() { + $this->_graph = new RadarGraph(self::$_width,self::$_height); + $this->_graph->SetScale('lin'); + + $this->_renderTitle(); + } // function _renderRadarPlotArea() + + + private function _renderPlotLine($groupID, $filled = false, $combination = false, $dimensions = '2d') { + $grouping = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotGrouping(); + + $labelCount = count($this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex(0)->getPointCount()); + if ($labelCount > 0) { + $datasetLabels = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex(0)->getDataValues(); + $datasetLabels = $this->_formatDataSetLabels($groupID, $datasetLabels, $labelCount); + $this->_graph->xaxis->SetTickLabels($datasetLabels); + } + + $seriesCount = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotSeriesCount(); + $seriesPlots = array(); + if ($grouping == 'percentStacked') { + $sumValues = $this->_percentageSumCalculation($groupID,$seriesCount); + } + + // Loop through each data series in turn + for($i = 0; $i < $seriesCount; ++$i) { + $dataValues = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getDataValues(); + $marker = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getPointMarker(); + + if ($grouping == 'percentStacked') { + $dataValues = $this->_percentageAdjustValues($dataValues,$sumValues); + } + + // Fill in any missing values in the $dataValues array + $testCurrentIndex = 0; + foreach($dataValues as $k => $dataValue) { + while($k != $testCurrentIndex) { + $dataValues[$testCurrentIndex] = null; + ++$testCurrentIndex; + } + ++$testCurrentIndex; + } + + $seriesPlot = new LinePlot($dataValues); + if ($combination) { + $seriesPlot->SetBarCenter(); + } + + if ($filled) { + $seriesPlot->SetFilled(true); + $seriesPlot->SetColor('black'); + $seriesPlot->SetFillColor(self::$_colourSet[self::$_plotColour++]); + } else { + // Set the appropriate plot marker + $this->_formatPointMarker($seriesPlot,$marker); + } + $dataLabel = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotLabelByIndex($i)->getDataValue(); + $seriesPlot->SetLegend($dataLabel); + + $seriesPlots[] = $seriesPlot; + } + + if ($grouping == 'standard') { + $groupPlot = $seriesPlots; + } else { + $groupPlot = new AccLinePlot($seriesPlots); + } + $this->_graph->Add($groupPlot); + } // function _renderPlotLine() + + + private function _renderPlotBar($groupID, $dimensions = '2d') { + $rotation = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotDirection(); + // Rotate for bar rather than column chart + if (($groupID == 0) && ($rotation == 'bar')) { + $this->_graph->Set90AndMargin(); + } + $grouping = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotGrouping(); + + $labelCount = count($this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex(0)->getPointCount()); + if ($labelCount > 0) { + $datasetLabels = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex(0)->getDataValues(); + $datasetLabels = $this->_formatDataSetLabels($groupID, $datasetLabels, $labelCount, $rotation); + // Rotate for bar rather than column chart + if ($rotation == 'bar') { + $datasetLabels = array_reverse($datasetLabels); + $this->_graph->yaxis->SetPos('max'); + $this->_graph->yaxis->SetLabelAlign('center','top'); + $this->_graph->yaxis->SetLabelSide(SIDE_RIGHT); + } + $this->_graph->xaxis->SetTickLabels($datasetLabels); + } + + + $seriesCount = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotSeriesCount(); + $seriesPlots = array(); + if ($grouping == 'percentStacked') { + $sumValues = $this->_percentageSumCalculation($groupID,$seriesCount); + } + + // Loop through each data series in turn + for($j = 0; $j < $seriesCount; ++$j) { + $dataValues = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($j)->getDataValues(); + if ($grouping == 'percentStacked') { + $dataValues = $this->_percentageAdjustValues($dataValues,$sumValues); + } + + // Fill in any missing values in the $dataValues array + $testCurrentIndex = 0; + foreach($dataValues as $k => $dataValue) { + while($k != $testCurrentIndex) { + $dataValues[$testCurrentIndex] = null; + ++$testCurrentIndex; + } + ++$testCurrentIndex; + } + + // Reverse the $dataValues order for bar rather than column chart + if ($rotation == 'bar') { + $dataValues = array_reverse($dataValues); + } + $seriesPlot = new BarPlot($dataValues); + $seriesPlot->SetColor('black'); + $seriesPlot->SetFillColor(self::$_colourSet[self::$_plotColour++]); + if ($dimensions == '3d') { + $seriesPlot->SetShadow(); + } + if (!$this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotLabelByIndex($j)) { + $dataLabel = ''; + } else { + $dataLabel = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotLabelByIndex($j)->getDataValue(); + } + $seriesPlot->SetLegend($dataLabel); + + $seriesPlots[] = $seriesPlot; + } + // Reverse the plot order for bar rather than column chart + if (($rotation == 'bar') && (!($grouping == 'percentStacked'))) { + $seriesPlots = array_reverse($seriesPlots); + } + + if ($grouping == 'clustered') { + $groupPlot = new GroupBarPlot($seriesPlots); + } elseif ($grouping == 'standard') { + $groupPlot = new GroupBarPlot($seriesPlots); + } else { + $groupPlot = new AccBarPlot($seriesPlots); + if ($dimensions == '3d') { + $groupPlot->SetShadow(); + } + } + + $this->_graph->Add($groupPlot); + } // function _renderPlotBar() + + + private function _renderPlotScatter($groupID,$bubble) { + $grouping = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotGrouping(); + $scatterStyle = $bubbleSize = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotStyle(); + + $seriesCount = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotSeriesCount(); + $seriesPlots = array(); + + // Loop through each data series in turn + for($i = 0; $i < $seriesCount; ++$i) { + $dataValuesY = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex($i)->getDataValues(); + $dataValuesX = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getDataValues(); + + foreach($dataValuesY as $k => $dataValueY) { + $dataValuesY[$k] = $k; + } + + $seriesPlot = new ScatterPlot($dataValuesX,$dataValuesY); + if ($scatterStyle == 'lineMarker') { + $seriesPlot->SetLinkPoints(); + $seriesPlot->link->SetColor(self::$_colourSet[self::$_plotColour]); + } elseif ($scatterStyle == 'smoothMarker') { + $spline = new Spline($dataValuesY,$dataValuesX); + list($splineDataY,$splineDataX) = $spline->Get(count($dataValuesX) * self::$_width / 20); + $lplot = new LinePlot($splineDataX,$splineDataY); + $lplot->SetColor(self::$_colourSet[self::$_plotColour]); + + $this->_graph->Add($lplot); + } + + if ($bubble) { + $this->_formatPointMarker($seriesPlot,'dot'); + $seriesPlot->mark->SetColor('black'); + $seriesPlot->mark->SetSize($bubbleSize); + } else { + $marker = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getPointMarker(); + $this->_formatPointMarker($seriesPlot,$marker); + } + $dataLabel = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotLabelByIndex($i)->getDataValue(); + $seriesPlot->SetLegend($dataLabel); + + $this->_graph->Add($seriesPlot); + } + } // function _renderPlotScatter() + + + private function _renderPlotRadar($groupID) { + $radarStyle = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotStyle(); + + $seriesCount = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotSeriesCount(); + $seriesPlots = array(); + + // Loop through each data series in turn + for($i = 0; $i < $seriesCount; ++$i) { + $dataValuesY = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex($i)->getDataValues(); + $dataValuesX = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getDataValues(); + $marker = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getPointMarker(); + + $dataValues = array(); + foreach($dataValuesY as $k => $dataValueY) { + $dataValues[$k] = implode(' ',array_reverse($dataValueY)); + } + $tmp = array_shift($dataValues); + $dataValues[] = $tmp; + $tmp = array_shift($dataValuesX); + $dataValuesX[] = $tmp; + + $this->_graph->SetTitles(array_reverse($dataValues)); + + $seriesPlot = new RadarPlot(array_reverse($dataValuesX)); + + $dataLabel = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotLabelByIndex($i)->getDataValue(); + $seriesPlot->SetColor(self::$_colourSet[self::$_plotColour++]); + if ($radarStyle == 'filled') { + $seriesPlot->SetFillColor(self::$_colourSet[self::$_plotColour]); + } + $this->_formatPointMarker($seriesPlot,$marker); + $seriesPlot->SetLegend($dataLabel); + + $this->_graph->Add($seriesPlot); + } + } // function _renderPlotRadar() + + + private function _renderPlotContour($groupID) { + $contourStyle = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotStyle(); + + $seriesCount = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotSeriesCount(); + $seriesPlots = array(); + + $dataValues = array(); + // Loop through each data series in turn + for($i = 0; $i < $seriesCount; ++$i) { + $dataValuesY = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex($i)->getDataValues(); + $dataValuesX = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getDataValues(); + + $dataValues[$i] = $dataValuesX; + } + $seriesPlot = new ContourPlot($dataValues); + + $this->_graph->Add($seriesPlot); + } // function _renderPlotContour() + + + private function _renderPlotStock($groupID) { + $seriesCount = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotSeriesCount(); + $plotOrder = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotOrder(); + + $dataValues = array(); + // Loop through each data series in turn and build the plot arrays + foreach($plotOrder as $i => $v) { + $dataValuesX = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($v)->getDataValues(); + foreach($dataValuesX as $j => $dataValueX) { + $dataValues[$plotOrder[$i]][$j] = $dataValueX; + } + } + if(empty($dataValues)) { + return; + } + + $dataValuesPlot = array(); + // Flatten the plot arrays to a single dimensional array to work with jpgraph + for($j = 0; $j < count($dataValues[0]); $j++) { + for($i = 0; $i < $seriesCount; $i++) { + $dataValuesPlot[] = $dataValues[$i][$j]; + } + } + + // Set the x-axis labels + $labelCount = count($this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex(0)->getPointCount()); + if ($labelCount > 0) { + $datasetLabels = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex(0)->getDataValues(); + $datasetLabels = $this->_formatDataSetLabels($groupID, $datasetLabels, $labelCount); + $this->_graph->xaxis->SetTickLabels($datasetLabels); + } + + $seriesPlot = new StockPlot($dataValuesPlot); + $seriesPlot->SetWidth(20); + + $this->_graph->Add($seriesPlot); + } // function _renderPlotStock() + + + private function _renderAreaChart($groupCount, $dimensions = '2d') { + require_once('jpgraph_line.php'); + + $this->_renderCartesianPlotArea(); + + for($i = 0; $i < $groupCount; ++$i) { + $this->_renderPlotLine($i,True,False,$dimensions); + } + } // function _renderAreaChart() + + + private function _renderLineChart($groupCount, $dimensions = '2d') { + require_once('jpgraph_line.php'); + + $this->_renderCartesianPlotArea(); + + for($i = 0; $i < $groupCount; ++$i) { + $this->_renderPlotLine($i,False,False,$dimensions); + } + } // function _renderLineChart() + + + private function _renderBarChart($groupCount, $dimensions = '2d') { + require_once('jpgraph_bar.php'); + + $this->_renderCartesianPlotArea(); + + for($i = 0; $i < $groupCount; ++$i) { + $this->_renderPlotBar($i,$dimensions); + } + } // function _renderBarChart() + + + private function _renderScatterChart($groupCount) { + require_once('jpgraph_scatter.php'); + require_once('jpgraph_regstat.php'); + require_once('jpgraph_line.php'); + + $this->_renderCartesianPlotArea('linlin'); + + for($i = 0; $i < $groupCount; ++$i) { + $this->_renderPlotScatter($i,false); + } + } // function _renderScatterChart() + + + private function _renderBubbleChart($groupCount) { + require_once('jpgraph_scatter.php'); + + $this->_renderCartesianPlotArea('linlin'); + + for($i = 0; $i < $groupCount; ++$i) { + $this->_renderPlotScatter($i,true); + } + } // function _renderBubbleChart() + + + private function _renderPieChart($groupCount, $dimensions = '2d', $doughnut = False, $multiplePlots = False) { + require_once('jpgraph_pie.php'); + if ($dimensions == '3d') { + require_once('jpgraph_pie3d.php'); + } + + $this->_renderPiePlotArea($doughnut); + + $iLimit = ($multiplePlots) ? $groupCount : 1; + for($groupID = 0; $groupID < $iLimit; ++$groupID) { + $grouping = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotGrouping(); + $exploded = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotStyle(); + if ($groupID == 0) { + $labelCount = count($this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex(0)->getPointCount()); + if ($labelCount > 0) { + $datasetLabels = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotCategoryByIndex(0)->getDataValues(); + $datasetLabels = $this->_formatDataSetLabels($groupID, $datasetLabels, $labelCount); + } + } + + $seriesCount = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotSeriesCount(); + $seriesPlots = array(); + // For pie charts, we only display the first series: doughnut charts generally display all series + $jLimit = ($multiplePlots) ? $seriesCount : 1; + // Loop through each data series in turn + for($j = 0; $j < $jLimit; ++$j) { + $dataValues = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($j)->getDataValues(); + + // Fill in any missing values in the $dataValues array + $testCurrentIndex = 0; + foreach($dataValues as $k => $dataValue) { + while($k != $testCurrentIndex) { + $dataValues[$testCurrentIndex] = null; + ++$testCurrentIndex; + } + ++$testCurrentIndex; + } + + if ($dimensions == '3d') { + $seriesPlot = new PiePlot3D($dataValues); + } else { + if ($doughnut) { + $seriesPlot = new PiePlotC($dataValues); + } else { + $seriesPlot = new PiePlot($dataValues); + } + } + + if ($multiplePlots) { + $seriesPlot->SetSize(($jLimit-$j) / ($jLimit * 4)); + } + + if ($doughnut) { + $seriesPlot->SetMidColor('white'); + } + + $seriesPlot->SetColor(self::$_colourSet[self::$_plotColour++]); + if (count($datasetLabels) > 0) + $seriesPlot->SetLabels(array_fill(0,count($datasetLabels),'')); + if ($dimensions != '3d') { + $seriesPlot->SetGuideLines(false); + } + if ($j == 0) { + if ($exploded) { + $seriesPlot->ExplodeAll(); + } + $seriesPlot->SetLegends($datasetLabels); + } + + $this->_graph->Add($seriesPlot); + } + } + } // function _renderPieChart() + + + private function _renderRadarChart($groupCount) { + require_once('jpgraph_radar.php'); + + $this->_renderRadarPlotArea(); + + for($groupID = 0; $groupID < $groupCount; ++$groupID) { + $this->_renderPlotRadar($groupID); + } + } // function _renderRadarChart() + + + private function _renderStockChart($groupCount) { + require_once('jpgraph_stock.php'); + + $this->_renderCartesianPlotArea('intint'); + + for($groupID = 0; $groupID < $groupCount; ++$groupID) { + $this->_renderPlotStock($groupID); + } + } // function _renderStockChart() + + + private function _renderContourChart($groupCount,$dimensions) { + require_once('jpgraph_contour.php'); + + $this->_renderCartesianPlotArea('intint'); + + for($i = 0; $i < $groupCount; ++$i) { + $this->_renderPlotContour($i); + } + } // function _renderContourChart() + + + private function _renderCombinationChart($groupCount,$dimensions,$outputDestination) { + require_once('jpgraph_line.php'); + require_once('jpgraph_bar.php'); + require_once('jpgraph_scatter.php'); + require_once('jpgraph_regstat.php'); + require_once('jpgraph_line.php'); + + $this->_renderCartesianPlotArea(); + + for($i = 0; $i < $groupCount; ++$i) { + $dimensions = null; + $chartType = $this->_chart->getPlotArea()->getPlotGroupByIndex($i)->getPlotType(); + switch ($chartType) { + case 'area3DChart' : + $dimensions = '3d'; + case 'areaChart' : + $this->_renderPlotLine($i,True,True,$dimensions); + break; + case 'bar3DChart' : + $dimensions = '3d'; + case 'barChart' : + $this->_renderPlotBar($i,$dimensions); + break; + case 'line3DChart' : + $dimensions = '3d'; + case 'lineChart' : + $this->_renderPlotLine($i,False,True,$dimensions); + break; + case 'scatterChart' : + $this->_renderPlotScatter($i,false); + break; + case 'bubbleChart' : + $this->_renderPlotScatter($i,true); + break; + default : + $this->_graph = null; + return false; + } + } + + $this->_renderLegend(); + + $this->_graph->Stroke($outputDestination); + return true; + } // function _renderCombinationChart() + + + public function render($outputDestination) { + self::$_plotColour = 0; + + $groupCount = $this->_chart->getPlotArea()->getPlotGroupCount(); + + $dimensions = null; + if ($groupCount == 1) { + $chartType = $this->_chart->getPlotArea()->getPlotGroupByIndex(0)->getPlotType(); + } else { + $chartTypes = array(); + for($i = 0; $i < $groupCount; ++$i) { + $chartTypes[] = $this->_chart->getPlotArea()->getPlotGroupByIndex($i)->getPlotType(); + } + $chartTypes = array_unique($chartTypes); + if (count($chartTypes) == 1) { + $chartType = array_pop($chartTypes); + } elseif (count($chartTypes) == 0) { + echo 'Chart is not yet implemented
'; + return false; + } else { + return $this->_renderCombinationChart($groupCount,$dimensions,$outputDestination); + } + } + + switch ($chartType) { + case 'area3DChart' : + $dimensions = '3d'; + case 'areaChart' : + $this->_renderAreaChart($groupCount,$dimensions); + break; + case 'bar3DChart' : + $dimensions = '3d'; + case 'barChart' : + $this->_renderBarChart($groupCount,$dimensions); + break; + case 'line3DChart' : + $dimensions = '3d'; + case 'lineChart' : + $this->_renderLineChart($groupCount,$dimensions); + break; + case 'pie3DChart' : + $dimensions = '3d'; + case 'pieChart' : + $this->_renderPieChart($groupCount,$dimensions,False,False); + break; + case 'doughnut3DChart' : + $dimensions = '3d'; + case 'doughnutChart' : + $this->_renderPieChart($groupCount,$dimensions,True,True); + break; + case 'scatterChart' : + $this->_renderScatterChart($groupCount); + break; + case 'bubbleChart' : + $this->_renderBubbleChart($groupCount); + break; + case 'radarChart' : + $this->_renderRadarChart($groupCount); + break; + case 'surface3DChart' : + $dimensions = '3d'; + case 'surfaceChart' : + $this->_renderContourChart($groupCount,$dimensions); + break; + case 'stockChart' : + $this->_renderStockChart($groupCount,$dimensions); + break; + default : + echo $chartType.' is not yet implemented
'; + return false; + } + $this->_renderLegend(); + + $this->_graph->Stroke($outputDestination); + return true; + } // function render() + + + /** + * Create a new PHPExcel_Chart_Renderer_jpgraph + */ + public function __construct(PHPExcel_Chart $chart) + { + $this->_graph = null; + $this->_chart = $chart; + } // function __construct() + +} // PHPExcel_Chart_Renderer_jpgraph diff --git a/PHPExcel/Chart/Title.php b/PHPExcel/Chart/Title.php new file mode 100644 index 0000000..415551b --- /dev/null +++ b/PHPExcel/Chart/Title.php @@ -0,0 +1,92 @@ +_caption = $caption; + $this->_layout = $layout; + } + + /** + * Get caption + * + * @return string + */ + public function getCaption() { + return $this->_caption; + } + + /** + * Set caption + * + * @param string $caption + * @return PHPExcel_Chart_Title + */ + public function setCaption($caption = null) { + $this->_caption = $caption; + + return $this; + } + + /** + * Get Layout + * + * @return PHPExcel_Chart_Layout + */ + public function getLayout() { + return $this->_layout; + } + +} diff --git a/PHPExcel/Comment.php b/PHPExcel/Comment.php new file mode 100644 index 0000000..a2422c6 --- /dev/null +++ b/PHPExcel/Comment.php @@ -0,0 +1,327 @@ +_author = 'Author'; + $this->_text = new PHPExcel_RichText(); + $this->_fillColor = new PHPExcel_Style_Color('FFFFFFE1'); + $this->_alignment = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL; + } + + /** + * Get Author + * + * @return string + */ + public function getAuthor() { + return $this->_author; + } + + /** + * Set Author + * + * @param string $pValue + * @return PHPExcel_Comment + */ + public function setAuthor($pValue = '') { + $this->_author = $pValue; + return $this; + } + + /** + * Get Rich text comment + * + * @return PHPExcel_RichText + */ + public function getText() { + return $this->_text; + } + + /** + * Set Rich text comment + * + * @param PHPExcel_RichText $pValue + * @return PHPExcel_Comment + */ + public function setText(PHPExcel_RichText $pValue) { + $this->_text = $pValue; + return $this; + } + + /** + * Get comment width (CSS style, i.e. XXpx or YYpt) + * + * @return string + */ + public function getWidth() { + return $this->_width; + } + + /** + * Set comment width (CSS style, i.e. XXpx or YYpt) + * + * @param string $value + * @return PHPExcel_Comment + */ + public function setWidth($value = '96pt') { + $this->_width = $value; + return $this; + } + + /** + * Get comment height (CSS style, i.e. XXpx or YYpt) + * + * @return string + */ + public function getHeight() { + return $this->_height; + } + + /** + * Set comment height (CSS style, i.e. XXpx or YYpt) + * + * @param string $value + * @return PHPExcel_Comment + */ + public function setHeight($value = '55.5pt') { + $this->_height = $value; + return $this; + } + + /** + * Get left margin (CSS style, i.e. XXpx or YYpt) + * + * @return string + */ + public function getMarginLeft() { + return $this->_marginLeft; + } + + /** + * Set left margin (CSS style, i.e. XXpx or YYpt) + * + * @param string $value + * @return PHPExcel_Comment + */ + public function setMarginLeft($value = '59.25pt') { + $this->_marginLeft = $value; + return $this; + } + + /** + * Get top margin (CSS style, i.e. XXpx or YYpt) + * + * @return string + */ + public function getMarginTop() { + return $this->_marginTop; + } + + /** + * Set top margin (CSS style, i.e. XXpx or YYpt) + * + * @param string $value + * @return PHPExcel_Comment + */ + public function setMarginTop($value = '1.5pt') { + $this->_marginTop = $value; + return $this; + } + + /** + * Is the comment visible by default? + * + * @return boolean + */ + public function getVisible() { + return $this->_visible; + } + + /** + * Set comment default visibility + * + * @param boolean $value + * @return PHPExcel_Comment + */ + public function setVisible($value = false) { + $this->_visible = $value; + return $this; + } + + /** + * Get fill color + * + * @return PHPExcel_Style_Color + */ + public function getFillColor() { + return $this->_fillColor; + } + + /** + * Set Alignment + * + * @param string $pValue + * @return PHPExcel_Comment + */ + public function setAlignment($pValue = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL) { + $this->_alignment = $pValue; + return $this; + } + + /** + * Get Alignment + * + * @return string + */ + public function getAlignment() { + return $this->_alignment; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_author + . $this->_text->getHashCode() + . $this->_width + . $this->_height + . $this->_marginLeft + . $this->_marginTop + . ($this->_visible ? 1 : 0) + . $this->_fillColor->getHashCode() + . $this->_alignment + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } + + /** + * Convert to string + * + * @return string + */ + public function __toString() { + return $this->_text->getPlainText(); + } + +} diff --git a/PHPExcel/DocumentProperties.php b/PHPExcel/DocumentProperties.php new file mode 100644 index 0000000..2f1fa1e --- /dev/null +++ b/PHPExcel/DocumentProperties.php @@ -0,0 +1,587 @@ +_lastModifiedBy = $this->_creator; + $this->_created = time(); + $this->_modified = time(); + } + + /** + * Get Creator + * + * @return string + */ + public function getCreator() { + return $this->_creator; + } + + /** + * Set Creator + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setCreator($pValue = '') { + $this->_creator = $pValue; + return $this; + } + + /** + * Get Last Modified By + * + * @return string + */ + public function getLastModifiedBy() { + return $this->_lastModifiedBy; + } + + /** + * Set Last Modified By + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setLastModifiedBy($pValue = '') { + $this->_lastModifiedBy = $pValue; + return $this; + } + + /** + * Get Created + * + * @return datetime + */ + public function getCreated() { + return $this->_created; + } + + /** + * Set Created + * + * @param datetime $pValue + * @return PHPExcel_DocumentProperties + */ + public function setCreated($pValue = null) { + if ($pValue === NULL) { + $pValue = time(); + } elseif (is_string($pValue)) { + if (is_numeric($pValue)) { + $pValue = intval($pValue); + } else { + $pValue = strtotime($pValue); + } + } + + $this->_created = $pValue; + return $this; + } + + /** + * Get Modified + * + * @return datetime + */ + public function getModified() { + return $this->_modified; + } + + /** + * Set Modified + * + * @param datetime $pValue + * @return PHPExcel_DocumentProperties + */ + public function setModified($pValue = null) { + if ($pValue === NULL) { + $pValue = time(); + } elseif (is_string($pValue)) { + if (is_numeric($pValue)) { + $pValue = intval($pValue); + } else { + $pValue = strtotime($pValue); + } + } + + $this->_modified = $pValue; + return $this; + } + + /** + * Get Title + * + * @return string + */ + public function getTitle() { + return $this->_title; + } + + /** + * Set Title + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setTitle($pValue = '') { + $this->_title = $pValue; + return $this; + } + + /** + * Get Description + * + * @return string + */ + public function getDescription() { + return $this->_description; + } + + /** + * Set Description + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setDescription($pValue = '') { + $this->_description = $pValue; + return $this; + } + + /** + * Get Subject + * + * @return string + */ + public function getSubject() { + return $this->_subject; + } + + /** + * Set Subject + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setSubject($pValue = '') { + $this->_subject = $pValue; + return $this; + } + + /** + * Get Keywords + * + * @return string + */ + public function getKeywords() { + return $this->_keywords; + } + + /** + * Set Keywords + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setKeywords($pValue = '') { + $this->_keywords = $pValue; + return $this; + } + + /** + * Get Category + * + * @return string + */ + public function getCategory() { + return $this->_category; + } + + /** + * Set Category + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setCategory($pValue = '') { + $this->_category = $pValue; + return $this; + } + + /** + * Get Company + * + * @return string + */ + public function getCompany() { + return $this->_company; + } + + /** + * Set Company + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setCompany($pValue = '') { + $this->_company = $pValue; + return $this; + } + + /** + * Get Manager + * + * @return string + */ + public function getManager() { + return $this->_manager; + } + + /** + * Set Manager + * + * @param string $pValue + * @return PHPExcel_DocumentProperties + */ + public function setManager($pValue = '') { + $this->_manager = $pValue; + return $this; + } + + /** + * Get a List of Custom Property Names + * + * @return array of string + */ + public function getCustomProperties() { + return array_keys($this->_customProperties); + } + + /** + * Check if a Custom Property is defined + * + * @param string $propertyName + * @return boolean + */ + public function isCustomPropertySet($propertyName) { + return isset($this->_customProperties[$propertyName]); + } + + /** + * Get a Custom Property Value + * + * @param string $propertyName + * @return string + */ + public function getCustomPropertyValue($propertyName) { + if (isset($this->_customProperties[$propertyName])) { + return $this->_customProperties[$propertyName]['value']; + } + + } + + /** + * Get a Custom Property Type + * + * @param string $propertyName + * @return string + */ + public function getCustomPropertyType($propertyName) { + if (isset($this->_customProperties[$propertyName])) { + return $this->_customProperties[$propertyName]['type']; + } + + } + + /** + * Set a Custom Property + * + * @param string $propertyName + * @param mixed $propertyValue + * @param string $propertyType + * 'i' : Integer + * 'f' : Floating Point + * 's' : String + * 'd' : Date/Time + * 'b' : Boolean + * @return PHPExcel_DocumentProperties + */ + public function setCustomProperty($propertyName,$propertyValue='',$propertyType=NULL) { + if (($propertyType === NULL) || (!in_array($propertyType,array(self::PROPERTY_TYPE_INTEGER, + self::PROPERTY_TYPE_FLOAT, + self::PROPERTY_TYPE_STRING, + self::PROPERTY_TYPE_DATE, + self::PROPERTY_TYPE_BOOLEAN)))) { + if ($propertyValue === NULL) { + $propertyType = self::PROPERTY_TYPE_STRING; + } elseif (is_float($propertyValue)) { + $propertyType = self::PROPERTY_TYPE_FLOAT; + } elseif(is_int($propertyValue)) { + $propertyType = self::PROPERTY_TYPE_INTEGER; + } elseif (is_bool($propertyValue)) { + $propertyType = self::PROPERTY_TYPE_BOOLEAN; + } else { + $propertyType = self::PROPERTY_TYPE_STRING; + } + } + + $this->_customProperties[$propertyName] = array('value' => $propertyValue, 'type' => $propertyType); + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } + + public static function convertProperty($propertyValue,$propertyType) { + switch ($propertyType) { + case 'empty' : // Empty + return ''; + break; + case 'null' : // Null + return NULL; + break; + case 'i1' : // 1-Byte Signed Integer + case 'i2' : // 2-Byte Signed Integer + case 'i4' : // 4-Byte Signed Integer + case 'i8' : // 8-Byte Signed Integer + case 'int' : // Integer + return (int) $propertyValue; + break; + case 'ui1' : // 1-Byte Unsigned Integer + case 'ui2' : // 2-Byte Unsigned Integer + case 'ui4' : // 4-Byte Unsigned Integer + case 'ui8' : // 8-Byte Unsigned Integer + case 'uint' : // Unsigned Integer + return abs((int) $propertyValue); + break; + case 'r4' : // 4-Byte Real Number + case 'r8' : // 8-Byte Real Number + case 'decimal' : // Decimal + return (float) $propertyValue; + break; + case 'lpstr' : // LPSTR + case 'lpwstr' : // LPWSTR + case 'bstr' : // Basic String + return $propertyValue; + break; + case 'date' : // Date and Time + case 'filetime' : // File Time + return strtotime($propertyValue); + break; + case 'bool' : // Boolean + return ($propertyValue == 'true') ? True : False; + break; + case 'cy' : // Currency + case 'error' : // Error Status Code + case 'vector' : // Vector + case 'array' : // Array + case 'blob' : // Binary Blob + case 'oblob' : // Binary Blob Object + case 'stream' : // Binary Stream + case 'ostream' : // Binary Stream Object + case 'storage' : // Binary Storage + case 'ostorage' : // Binary Storage Object + case 'vstream' : // Binary Versioned Stream + case 'clsid' : // Class ID + case 'cf' : // Clipboard Data + return $propertyValue; + break; + } + return $propertyValue; + } + + public static function convertPropertyType($propertyType) { + switch ($propertyType) { + case 'i1' : // 1-Byte Signed Integer + case 'i2' : // 2-Byte Signed Integer + case 'i4' : // 4-Byte Signed Integer + case 'i8' : // 8-Byte Signed Integer + case 'int' : // Integer + case 'ui1' : // 1-Byte Unsigned Integer + case 'ui2' : // 2-Byte Unsigned Integer + case 'ui4' : // 4-Byte Unsigned Integer + case 'ui8' : // 8-Byte Unsigned Integer + case 'uint' : // Unsigned Integer + return self::PROPERTY_TYPE_INTEGER; + break; + case 'r4' : // 4-Byte Real Number + case 'r8' : // 8-Byte Real Number + case 'decimal' : // Decimal + return self::PROPERTY_TYPE_FLOAT; + break; + case 'empty' : // Empty + case 'null' : // Null + case 'lpstr' : // LPSTR + case 'lpwstr' : // LPWSTR + case 'bstr' : // Basic String + return self::PROPERTY_TYPE_STRING; + break; + case 'date' : // Date and Time + case 'filetime' : // File Time + return self::PROPERTY_TYPE_DATE; + break; + case 'bool' : // Boolean + return self::PROPERTY_TYPE_BOOLEAN; + break; + case 'cy' : // Currency + case 'error' : // Error Status Code + case 'vector' : // Vector + case 'array' : // Array + case 'blob' : // Binary Blob + case 'oblob' : // Binary Blob Object + case 'stream' : // Binary Stream + case 'ostream' : // Binary Stream Object + case 'storage' : // Binary Storage + case 'ostorage' : // Binary Storage Object + case 'vstream' : // Binary Versioned Stream + case 'clsid' : // Class ID + case 'cf' : // Clipboard Data + return self::PROPERTY_TYPE_UNKNOWN; + break; + } + return self::PROPERTY_TYPE_UNKNOWN; + } + +} diff --git a/PHPExcel/DocumentSecurity.php b/PHPExcel/DocumentSecurity.php new file mode 100644 index 0000000..340504e --- /dev/null +++ b/PHPExcel/DocumentSecurity.php @@ -0,0 +1,218 @@ +_lockRevision = false; + $this->_lockStructure = false; + $this->_lockWindows = false; + $this->_revisionsPassword = ''; + $this->_workbookPassword = ''; + } + + /** + * Is some sort of dcument security enabled? + * + * @return boolean + */ + function isSecurityEnabled() { + return $this->_lockRevision || + $this->_lockStructure || + $this->_lockWindows; + } + + /** + * Get LockRevision + * + * @return boolean + */ + function getLockRevision() { + return $this->_lockRevision; + } + + /** + * Set LockRevision + * + * @param boolean $pValue + * @return PHPExcel_DocumentSecurity + */ + function setLockRevision($pValue = false) { + $this->_lockRevision = $pValue; + return $this; + } + + /** + * Get LockStructure + * + * @return boolean + */ + function getLockStructure() { + return $this->_lockStructure; + } + + /** + * Set LockStructure + * + * @param boolean $pValue + * @return PHPExcel_DocumentSecurity + */ + function setLockStructure($pValue = false) { + $this->_lockStructure = $pValue; + return $this; + } + + /** + * Get LockWindows + * + * @return boolean + */ + function getLockWindows() { + return $this->_lockWindows; + } + + /** + * Set LockWindows + * + * @param boolean $pValue + * @return PHPExcel_DocumentSecurity + */ + function setLockWindows($pValue = false) { + $this->_lockWindows = $pValue; + return $this; + } + + /** + * Get RevisionsPassword (hashed) + * + * @return string + */ + function getRevisionsPassword() { + return $this->_revisionsPassword; + } + + /** + * Set RevisionsPassword + * + * @param string $pValue + * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true + * @return PHPExcel_DocumentSecurity + */ + function setRevisionsPassword($pValue = '', $pAlreadyHashed = false) { + if (!$pAlreadyHashed) { + $pValue = PHPExcel_Shared_PasswordHasher::hashPassword($pValue); + } + $this->_revisionsPassword = $pValue; + return $this; + } + + /** + * Get WorkbookPassword (hashed) + * + * @return string + */ + function getWorkbookPassword() { + return $this->_workbookPassword; + } + + /** + * Set WorkbookPassword + * + * @param string $pValue + * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true + * @return PHPExcel_DocumentSecurity + */ + function setWorkbookPassword($pValue = '', $pAlreadyHashed = false) { + if (!$pAlreadyHashed) { + $pValue = PHPExcel_Shared_PasswordHasher::hashPassword($pValue); + } + $this->_workbookPassword = $pValue; + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Exception.php b/PHPExcel/Exception.php new file mode 100644 index 0000000..683e909 --- /dev/null +++ b/PHPExcel/Exception.php @@ -0,0 +1,52 @@ +line = $line; + $e->file = $file; + throw $e; + } +} diff --git a/PHPExcel/HashTable.php b/PHPExcel/HashTable.php new file mode 100644 index 0000000..7a9205e --- /dev/null +++ b/PHPExcel/HashTable.php @@ -0,0 +1,202 @@ +addFromSource($pSource); + } + } + + /** + * Add HashTable items from source + * + * @param PHPExcel_IComparable[] $pSource Source array to create HashTable from + * @throws PHPExcel_Exception + */ + public function addFromSource($pSource = null) { + // Check if an array was passed + if ($pSource == null) { + return; + } else if (!is_array($pSource)) { + throw new PHPExcel_Exception('Invalid array parameter passed.'); + } + + foreach ($pSource as $item) { + $this->add($item); + } + } + + /** + * Add HashTable item + * + * @param PHPExcel_IComparable $pSource Item to add + * @throws PHPExcel_Exception + */ + public function add(PHPExcel_IComparable $pSource = null) { + $hash = $pSource->getHashCode(); + if (!isset($this->_items[$hash])) { + $this->_items[$hash] = $pSource; + $this->_keyMap[count($this->_items) - 1] = $hash; + } + } + + /** + * Remove HashTable item + * + * @param PHPExcel_IComparable $pSource Item to remove + * @throws PHPExcel_Exception + */ + public function remove(PHPExcel_IComparable $pSource = null) { + $hash = $pSource->getHashCode(); + if (isset($this->_items[$hash])) { + unset($this->_items[$hash]); + + $deleteKey = -1; + foreach ($this->_keyMap as $key => $value) { + if ($deleteKey >= 0) { + $this->_keyMap[$key - 1] = $value; + } + + if ($value == $hash) { + $deleteKey = $key; + } + } + unset($this->_keyMap[count($this->_keyMap) - 1]); + } + } + + /** + * Clear HashTable + * + */ + public function clear() { + $this->_items = array(); + $this->_keyMap = array(); + } + + /** + * Count + * + * @return int + */ + public function count() { + return count($this->_items); + } + + /** + * Get index for hash code + * + * @param string $pHashCode + * @return int Index + */ + public function getIndexForHashCode($pHashCode = '') { + return array_search($pHashCode, $this->_keyMap); + } + + /** + * Get by index + * + * @param int $pIndex + * @return PHPExcel_IComparable + * + */ + public function getByIndex($pIndex = 0) { + if (isset($this->_keyMap[$pIndex])) { + return $this->getByHashCode( $this->_keyMap[$pIndex] ); + } + + return null; + } + + /** + * Get by hashcode + * + * @param string $pHashCode + * @return PHPExcel_IComparable + * + */ + public function getByHashCode($pHashCode = '') { + if (isset($this->_items[$pHashCode])) { + return $this->_items[$pHashCode]; + } + + return null; + } + + /** + * HashTable to array + * + * @return PHPExcel_IComparable[] + */ + public function toArray() { + return $this->_items; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } + } + } +} diff --git a/PHPExcel/IComparable.php b/PHPExcel/IComparable.php new file mode 100644 index 0000000..6b1e18a --- /dev/null +++ b/PHPExcel/IComparable.php @@ -0,0 +1,43 @@ + 'IWriter', 'path' => 'PHPExcel/Writer/{0}.php', 'class' => 'PHPExcel_Writer_{0}' ), + array( 'type' => 'IReader', 'path' => 'PHPExcel/Reader/{0}.php', 'class' => 'PHPExcel_Reader_{0}' ) + ); + + /** + * Autoresolve classes + * + * @var array + * @access private + * @static + */ + private static $_autoResolveClasses = array( + 'Excel2007', + 'Excel5', + 'Excel2003XML', + 'OOCalc', + 'SYLK', + 'Gnumeric', + 'HTML', + 'CSV', + ); + + /** + * Private constructor for PHPExcel_IOFactory + */ + private function __construct() { } + + /** + * Get search locations + * + * @static + * @access public + * @return array + */ + public static function getSearchLocations() { + return self::$_searchLocations; + } // function getSearchLocations() + + /** + * Set search locations + * + * @static + * @access public + * @param array $value + * @throws PHPExcel_Reader_Exception + */ + public static function setSearchLocations($value) { + if (is_array($value)) { + self::$_searchLocations = $value; + } else { + throw new PHPExcel_Reader_Exception('Invalid parameter passed.'); + } + } // function setSearchLocations() + + /** + * Add search location + * + * @static + * @access public + * @param string $type Example: IWriter + * @param string $location Example: PHPExcel/Writer/{0}.php + * @param string $classname Example: PHPExcel_Writer_{0} + */ + public static function addSearchLocation($type = '', $location = '', $classname = '') { + self::$_searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname ); + } // function addSearchLocation() + + /** + * Create PHPExcel_Writer_IWriter + * + * @static + * @access public + * @param PHPExcel $phpExcel + * @param string $writerType Example: Excel2007 + * @return PHPExcel_Writer_IWriter + * @throws PHPExcel_Reader_Exception + */ + public static function createWriter(PHPExcel $phpExcel, $writerType = '') { + // Search type + $searchType = 'IWriter'; + + // Include class + foreach (self::$_searchLocations as $searchLocation) { + if ($searchLocation['type'] == $searchType) { + $className = str_replace('{0}', $writerType, $searchLocation['class']); + + $instance = new $className($phpExcel); + if ($instance !== NULL) { + return $instance; + } + } + } + + // Nothing found... + throw new PHPExcel_Reader_Exception("No $searchType found for type $writerType"); + } // function createWriter() + + /** + * Create PHPExcel_Reader_IReader + * + * @static + * @access public + * @param string $readerType Example: Excel2007 + * @return PHPExcel_Reader_IReader + * @throws PHPExcel_Reader_Exception + */ + public static function createReader($readerType = '') { + // Search type + $searchType = 'IReader'; + + // Include class + foreach (self::$_searchLocations as $searchLocation) { + if ($searchLocation['type'] == $searchType) { + $className = str_replace('{0}', $readerType, $searchLocation['class']); + + $instance = new $className(); + if ($instance !== NULL) { + return $instance; + } + } + } + + // Nothing found... + throw new PHPExcel_Reader_Exception("No $searchType found for type $readerType"); + } // function createReader() + + /** + * Loads PHPExcel from file using automatic PHPExcel_Reader_IReader resolution + * + * @static + * @access public + * @param string $pFilename The name of the spreadsheet file + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public static function load($pFilename) { + $reader = self::createReaderForFile($pFilename); + return $reader->load($pFilename); + } // function load() + + /** + * Identify file type using automatic PHPExcel_Reader_IReader resolution + * + * @static + * @access public + * @param string $pFilename The name of the spreadsheet file to identify + * @return string + * @throws PHPExcel_Reader_Exception + */ + public static function identify($pFilename) { + $reader = self::createReaderForFile($pFilename); + $className = get_class($reader); + $classType = explode('_',$className); + unset($reader); + return array_pop($classType); + } // function identify() + + /** + * Create PHPExcel_Reader_IReader for file using automatic PHPExcel_Reader_IReader resolution + * + * @static + * @access public + * @param string $pFilename The name of the spreadsheet file + * @return PHPExcel_Reader_IReader + * @throws PHPExcel_Reader_Exception + */ + public static function createReaderForFile($pFilename) { + + // First, lucky guess by inspecting file extension + $pathinfo = pathinfo($pFilename); + + $extensionType = NULL; + if (isset($pathinfo['extension'])) { + switch (strtolower($pathinfo['extension'])) { + case 'xlsx': // Excel (OfficeOpenXML) Spreadsheet + case 'xlsm': // Excel (OfficeOpenXML) Macro Spreadsheet (macros will be discarded) + case 'xltx': // Excel (OfficeOpenXML) Template + case 'xltm': // Excel (OfficeOpenXML) Macro Template (macros will be discarded) + $extensionType = 'Excel2007'; + break; + case 'xls': // Excel (BIFF) Spreadsheet + case 'xlt': // Excel (BIFF) Template + $extensionType = 'Excel5'; + break; + case 'ods': // Open/Libre Offic Calc + case 'ots': // Open/Libre Offic Calc Template + $extensionType = 'OOCalc'; + break; + case 'slk': + $extensionType = 'SYLK'; + break; + case 'xml': // Excel 2003 SpreadSheetML + $extensionType = 'Excel2003XML'; + break; + case 'gnumeric': + $extensionType = 'Gnumeric'; + break; + case 'htm': + case 'html': + $extensionType = 'HTML'; + break; + case 'csv': + // Do nothing + // We must not try to use CSV reader since it loads + // all files including Excel files etc. + break; + default: + break; + } + + if ($extensionType !== NULL) { + $reader = self::createReader($extensionType); + // Let's see if we are lucky + if (isset($reader) && $reader->canRead($pFilename)) { + return $reader; + } + } + } + + // If we reach here then "lucky guess" didn't give any result + // Try walking through all the options in self::$_autoResolveClasses + foreach (self::$_autoResolveClasses as $autoResolveClass) { + // Ignore our original guess, we know that won't work + if ($autoResolveClass !== $extensionType) { + $reader = self::createReader($autoResolveClass); + if ($reader->canRead($pFilename)) { + return $reader; + } + } + } + + throw new PHPExcel_Reader_Exception('Unable to identify a reader for this file'); + } // function createReaderForFile() +} diff --git a/PHPExcel/NamedRange.php b/PHPExcel/NamedRange.php new file mode 100644 index 0000000..3ad5caa --- /dev/null +++ b/PHPExcel/NamedRange.php @@ -0,0 +1,246 @@ +_worksheet) + * + * @var bool + */ + private $_localOnly; + + /** + * Scope + * + * @var PHPExcel_Worksheet + */ + private $_scope; + + /** + * Create a new NamedRange + * + * @param string $pName + * @param PHPExcel_Worksheet $pWorksheet + * @param string $pRange + * @param bool $pLocalOnly + * @param PHPExcel_Worksheet|null $pScope Scope. Only applies when $pLocalOnly = true. Null for global scope. + * @throws PHPExcel_Exception + */ + public function __construct($pName = null, PHPExcel_Worksheet $pWorksheet, $pRange = 'A1', $pLocalOnly = false, $pScope = null) + { + // Validate data + if (($pName === NULL) || ($pWorksheet === NULL) || ($pRange === NULL)) { + throw new PHPExcel_Exception('Parameters can not be null.'); + } + + // Set local members + $this->_name = $pName; + $this->_worksheet = $pWorksheet; + $this->_range = $pRange; + $this->_localOnly = $pLocalOnly; + $this->_scope = ($pLocalOnly == true) ? + (($pScope == null) ? $pWorksheet : $pScope) : null; + } + + /** + * Get name + * + * @return string + */ + public function getName() { + return $this->_name; + } + + /** + * Set name + * + * @param string $value + * @return PHPExcel_NamedRange + */ + public function setName($value = null) { + if ($value !== NULL) { + // Old title + $oldTitle = $this->_name; + + // Re-attach + if ($this->_worksheet !== NULL) { + $this->_worksheet->getParent()->removeNamedRange($this->_name,$this->_worksheet); + } + $this->_name = $value; + + if ($this->_worksheet !== NULL) { + $this->_worksheet->getParent()->addNamedRange($this); + } + + // New title + $newTitle = $this->_name; + PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->_worksheet->getParent(), $oldTitle, $newTitle); + } + return $this; + } + + /** + * Get worksheet + * + * @return PHPExcel_Worksheet + */ + public function getWorksheet() { + return $this->_worksheet; + } + + /** + * Set worksheet + * + * @param PHPExcel_Worksheet $value + * @return PHPExcel_NamedRange + */ + public function setWorksheet(PHPExcel_Worksheet $value = null) { + if ($value !== NULL) { + $this->_worksheet = $value; + } + return $this; + } + + /** + * Get range + * + * @return string + */ + public function getRange() { + return $this->_range; + } + + /** + * Set range + * + * @param string $value + * @return PHPExcel_NamedRange + */ + public function setRange($value = null) { + if ($value !== NULL) { + $this->_range = $value; + } + return $this; + } + + /** + * Get localOnly + * + * @return bool + */ + public function getLocalOnly() { + return $this->_localOnly; + } + + /** + * Set localOnly + * + * @param bool $value + * @return PHPExcel_NamedRange + */ + public function setLocalOnly($value = false) { + $this->_localOnly = $value; + $this->_scope = $value ? $this->_worksheet : null; + return $this; + } + + /** + * Get scope + * + * @return PHPExcel_Worksheet|null + */ + public function getScope() { + return $this->_scope; + } + + /** + * Set scope + * + * @param PHPExcel_Worksheet|null $value + * @return PHPExcel_NamedRange + */ + public function setScope(PHPExcel_Worksheet $value = null) { + $this->_scope = $value; + $this->_localOnly = ($value == null) ? false : true; + return $this; + } + + /** + * Resolve a named range to a regular cell range + * + * @param string $pNamedRange Named range + * @param PHPExcel_Worksheet|null $pSheet Scope. Use null for global scope + * @return PHPExcel_NamedRange + */ + public static function resolveRange($pNamedRange = '', PHPExcel_Worksheet $pSheet) { + return $pSheet->getParent()->getNamedRange($pNamedRange, $pSheet); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Reader/Abstract.php b/PHPExcel/Reader/Abstract.php new file mode 100644 index 0000000..0d5180c --- /dev/null +++ b/PHPExcel/Reader/Abstract.php @@ -0,0 +1,227 @@ +_readDataOnly; + } + + /** + * Set read data only + * Set to true, to advise the Reader only to read data values for cells, and to ignore any formatting information. + * Set to false (the default) to advise the Reader to read both data and formatting for cells. + * + * @param boolean $pValue + * + * @return PHPExcel_Reader_IReader + */ + public function setReadDataOnly($pValue = FALSE) { + $this->_readDataOnly = $pValue; + return $this; + } + + /** + * Read charts in workbook? + * If this is true, then the Reader will include any charts that exist in the workbook. + * Note that a ReadDataOnly value of false overrides, and charts won't be read regardless of the IncludeCharts value. + * If false (the default) it will ignore any charts defined in the workbook file. + * + * @return boolean + */ + public function getIncludeCharts() { + return $this->_includeCharts; + } + + /** + * Set read charts in workbook + * Set to true, to advise the Reader to include any charts that exist in the workbook. + * Note that a ReadDataOnly value of false overrides, and charts won't be read regardless of the IncludeCharts value. + * Set to false (the default) to discard charts. + * + * @param boolean $pValue + * + * @return PHPExcel_Reader_IReader + */ + public function setIncludeCharts($pValue = FALSE) { + $this->_includeCharts = (boolean) $pValue; + return $this; + } + + /** + * Get which sheets to load + * Returns either an array of worksheet names (the list of worksheets that should be loaded), or a null + * indicating that all worksheets in the workbook should be loaded. + * + * @return mixed + */ + public function getLoadSheetsOnly() + { + return $this->_loadSheetsOnly; + } + + /** + * Set which sheets to load + * + * @param mixed $value + * This should be either an array of worksheet names to be loaded, or a string containing a single worksheet name. + * If NULL, then it tells the Reader to read all worksheets in the workbook + * + * @return PHPExcel_Reader_IReader + */ + public function setLoadSheetsOnly($value = NULL) + { + $this->_loadSheetsOnly = is_array($value) ? + $value : array($value); + return $this; + } + + /** + * Set all sheets to load + * Tells the Reader to load all worksheets from the workbook. + * + * @return PHPExcel_Reader_IReader + */ + public function setLoadAllSheets() + { + $this->_loadSheetsOnly = NULL; + return $this; + } + + /** + * Read filter + * + * @return PHPExcel_Reader_IReadFilter + */ + public function getReadFilter() { + return $this->_readFilter; + } + + /** + * Set read filter + * + * @param PHPExcel_Reader_IReadFilter $pValue + * @return PHPExcel_Reader_IReader + */ + public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue) { + $this->_readFilter = $pValue; + return $this; + } + + /** + * Open file for reading + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + * @return resource + */ + protected function _openFile($pFilename) + { + // Check if file exists + if (!file_exists($pFilename) || !is_readable($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + // Open file + $this->_fileHandle = fopen($pFilename, 'r'); + if ($this->_fileHandle === FALSE) { + throw new PHPExcel_Reader_Exception("Could not open file " . $pFilename . " for reading."); + } + } + + /** + * Can the current PHPExcel_Reader_IReader read the file? + * + * @param string $pFilename + * @return boolean + * @throws PHPExcel_Reader_Exception + */ + public function canRead($pFilename) + { + // Check if file exists + try { + $this->_openFile($pFilename); + } catch (Exception $e) { + return FALSE; + } + + $readable = $this->_isValidFormat(); + fclose ($this->_fileHandle); + return $readable; + } + +} diff --git a/PHPExcel/Reader/CSV.php b/PHPExcel/Reader/CSV.php new file mode 100644 index 0000000..8bf7b84 --- /dev/null +++ b/PHPExcel/Reader/CSV.php @@ -0,0 +1,415 @@ +_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + } + + /** + * Validate that the current file is a CSV file + * + * @return boolean + */ + protected function _isValidFormat() + { + return TRUE; + } + + /** + * Set input encoding + * + * @param string $pValue Input encoding + */ + public function setInputEncoding($pValue = 'UTF-8') + { + $this->_inputEncoding = $pValue; + return $this; + } + + /** + * Get input encoding + * + * @return string + */ + public function getInputEncoding() + { + return $this->_inputEncoding; + } + + /** + * Move filepointer past any BOM marker + * + */ + protected function _skipBOM() + { + rewind($this->_fileHandle); + + switch ($this->_inputEncoding) { + case 'UTF-8': + fgets($this->_fileHandle, 4) == "\xEF\xBB\xBF" ? + fseek($this->_fileHandle, 3) : fseek($this->_fileHandle, 0); + break; + case 'UTF-16LE': + fgets($this->_fileHandle, 3) == "\xFF\xFE" ? + fseek($this->_fileHandle, 2) : fseek($this->_fileHandle, 0); + break; + case 'UTF-16BE': + fgets($this->_fileHandle, 3) == "\xFE\xFF" ? + fseek($this->_fileHandle, 2) : fseek($this->_fileHandle, 0); + break; + case 'UTF-32LE': + fgets($this->_fileHandle, 5) == "\xFF\xFE\x00\x00" ? + fseek($this->_fileHandle, 4) : fseek($this->_fileHandle, 0); + break; + case 'UTF-32BE': + fgets($this->_fileHandle, 5) == "\x00\x00\xFE\xFF" ? + fseek($this->_fileHandle, 4) : fseek($this->_fileHandle, 0); + break; + default: + break; + } + } + + /** + * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetInfo($pFilename) + { + // Open file + $this->_openFile($pFilename); + if (!$this->_isValidFormat()) { + fclose ($this->_fileHandle); + throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); + } + $fileHandle = $this->_fileHandle; + + // Skip BOM, if any + $this->_skipBOM(); + + $escapeEnclosures = array( "\\" . $this->_enclosure, $this->_enclosure . $this->_enclosure ); + + $worksheetInfo = array(); + $worksheetInfo[0]['worksheetName'] = 'Worksheet'; + $worksheetInfo[0]['lastColumnLetter'] = 'A'; + $worksheetInfo[0]['lastColumnIndex'] = 0; + $worksheetInfo[0]['totalRows'] = 0; + $worksheetInfo[0]['totalColumns'] = 0; + + // Loop through each line of the file in turn + while (($rowData = fgetcsv($fileHandle, 0, $this->_delimiter, $this->_enclosure)) !== FALSE) { + $worksheetInfo[0]['totalRows']++; + $worksheetInfo[0]['lastColumnIndex'] = max($worksheetInfo[0]['lastColumnIndex'], count($rowData) - 1); + } + + $worksheetInfo[0]['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($worksheetInfo[0]['lastColumnIndex']); + $worksheetInfo[0]['totalColumns'] = $worksheetInfo[0]['lastColumnIndex'] + 1; + + // Close file + fclose($fileHandle); + + return $worksheetInfo; + } + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Create new PHPExcel + $objPHPExcel = new PHPExcel(); + + // Load into this instance + return $this->loadIntoExisting($pFilename, $objPHPExcel); + } + + /** + * Loads PHPExcel from file into PHPExcel instance + * + * @param string $pFilename + * @param PHPExcel $objPHPExcel + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) + { + $lineEnding = ini_get('auto_detect_line_endings'); + ini_set('auto_detect_line_endings', true); + + // Open file + $this->_openFile($pFilename); + if (!$this->_isValidFormat()) { + fclose ($this->_fileHandle); + throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); + } + $fileHandle = $this->_fileHandle; + + // Skip BOM, if any + $this->_skipBOM(); + + // Create new PHPExcel object + while ($objPHPExcel->getSheetCount() <= $this->_sheetIndex) { + $objPHPExcel->createSheet(); + } + $sheet = $objPHPExcel->setActiveSheetIndex($this->_sheetIndex); + + $escapeEnclosures = array( "\\" . $this->_enclosure, + $this->_enclosure . $this->_enclosure + ); + + // Set our starting row based on whether we're in contiguous mode or not + $currentRow = 1; + if ($this->_contiguous) { + $currentRow = ($this->_contiguousRow == -1) ? $sheet->getHighestRow(): $this->_contiguousRow; + } + + // Loop through each line of the file in turn + while (($rowData = fgetcsv($fileHandle, 0, $this->_delimiter, $this->_enclosure)) !== FALSE) { + $columnLetter = 'A'; + foreach($rowData as $rowDatum) { + if ($rowDatum != '' && $this->_readFilter->readCell($columnLetter, $currentRow)) { + // Unescape enclosures + $rowDatum = str_replace($escapeEnclosures, $this->_enclosure, $rowDatum); + + // Convert encoding if necessary + if ($this->_inputEncoding !== 'UTF-8') { + $rowDatum = PHPExcel_Shared_String::ConvertEncoding($rowDatum, 'UTF-8', $this->_inputEncoding); + } + + // Set cell value + $sheet->getCell($columnLetter . $currentRow)->setValue($rowDatum); + } + ++$columnLetter; + } + ++$currentRow; + } + + // Close file + fclose($fileHandle); + + if ($this->_contiguous) { + $this->_contiguousRow = $currentRow; + } + + ini_set('auto_detect_line_endings', $lineEnding); + + // Return + return $objPHPExcel; + } + + /** + * Get delimiter + * + * @return string + */ + public function getDelimiter() { + return $this->_delimiter; + } + + /** + * Set delimiter + * + * @param string $pValue Delimiter, defaults to , + * @return PHPExcel_Reader_CSV + */ + public function setDelimiter($pValue = ',') { + $this->_delimiter = $pValue; + return $this; + } + + /** + * Get enclosure + * + * @return string + */ + public function getEnclosure() { + return $this->_enclosure; + } + + /** + * Set enclosure + * + * @param string $pValue Enclosure, defaults to " + * @return PHPExcel_Reader_CSV + */ + public function setEnclosure($pValue = '"') { + if ($pValue == '') { + $pValue = '"'; + } + $this->_enclosure = $pValue; + return $this; + } + + /** + * Get line ending + * + * @return string + */ + public function getLineEnding() { + return $this->_lineEnding; + } + + /** + * Set line ending + * + * @param string $pValue Line ending, defaults to OS line ending (PHP_EOL) + * @return PHPExcel_Reader_CSV + */ + public function setLineEnding($pValue = PHP_EOL) { + $this->_lineEnding = $pValue; + return $this; + } + + /** + * Get sheet index + * + * @return integer + */ + public function getSheetIndex() { + return $this->_sheetIndex; + } + + /** + * Set sheet index + * + * @param integer $pValue Sheet index + * @return PHPExcel_Reader_CSV + */ + public function setSheetIndex($pValue = 0) { + $this->_sheetIndex = $pValue; + return $this; + } + + /** + * Set Contiguous + * + * @param boolean $contiguous + */ + public function setContiguous($contiguous = FALSE) + { + $this->_contiguous = (bool) $contiguous; + if (!$contiguous) { + $this->_contiguousRow = -1; + } + + return $this; + } + + /** + * Get Contiguous + * + * @return boolean + */ + public function getContiguous() { + return $this->_contiguous; + } + +} diff --git a/PHPExcel/Reader/DefaultReadFilter.php b/PHPExcel/Reader/DefaultReadFilter.php new file mode 100644 index 0000000..228ed10 --- /dev/null +++ b/PHPExcel/Reader/DefaultReadFilter.php @@ -0,0 +1,58 @@ +_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + } + + + /** + * Can the current PHPExcel_Reader_IReader read the file? + * + * @param string $pFilename + * @return boolean + * @throws PHPExcel_Reader_Exception + */ + public function canRead($pFilename) + { + + // Office xmlns:o="urn:schemas-microsoft-com:office:office" + // Excel xmlns:x="urn:schemas-microsoft-com:office:excel" + // XML Spreadsheet xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" + // Spreadsheet component xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" + // XML schema xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" + // XML data type xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" + // MS-persist recordset xmlns:rs="urn:schemas-microsoft-com:rowset" + // Rowset xmlns:z="#RowsetSchema" + // + + $signature = array( + '' + ); + + // Open file + $this->_openFile($pFilename); + $fileHandle = $this->_fileHandle; + + // Read sample data (first 2 KB will do) + $data = fread($fileHandle, 2048); + fclose($fileHandle); + + $valid = true; + foreach($signature as $match) { + // every part of the signature must be present + if (strpos($data, $match) === false) { + $valid = false; + break; + } + } + + // Retrieve charset encoding + if(preg_match('//um',$data,$matches)) { + $this->_charSet = strtoupper($matches[1]); + } +// echo 'Character Set is ',$this->_charSet,'
'; + + return $valid; + } + + + /** + * Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetNames($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + if (!$this->canRead($pFilename)) { + throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); + } + + $worksheetNames = array(); + + $xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $namespaces = $xml->getNamespaces(true); + + $xml_ss = $xml->children($namespaces['ss']); + foreach($xml_ss->Worksheet as $worksheet) { + $worksheet_ss = $worksheet->attributes($namespaces['ss']); + $worksheetNames[] = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet); + } + + return $worksheetNames; + } + + + /** + * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetInfo($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $worksheetInfo = array(); + + $xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $namespaces = $xml->getNamespaces(true); + + $worksheetID = 1; + $xml_ss = $xml->children($namespaces['ss']); + foreach($xml_ss->Worksheet as $worksheet) { + $worksheet_ss = $worksheet->attributes($namespaces['ss']); + + $tmpInfo = array(); + $tmpInfo['worksheetName'] = ''; + $tmpInfo['lastColumnLetter'] = 'A'; + $tmpInfo['lastColumnIndex'] = 0; + $tmpInfo['totalRows'] = 0; + $tmpInfo['totalColumns'] = 0; + + if (isset($worksheet_ss['Name'])) { + $tmpInfo['worksheetName'] = (string) $worksheet_ss['Name']; + } else { + $tmpInfo['worksheetName'] = "Worksheet_{$worksheetID}"; + } + + if (isset($worksheet->Table->Row)) { + $rowIndex = 0; + + foreach($worksheet->Table->Row as $rowData) { + $columnIndex = 0; + $rowHasData = false; + + foreach($rowData->Cell as $cell) { + if (isset($cell->Data)) { + $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex); + $rowHasData = true; + } + + ++$columnIndex; + } + + ++$rowIndex; + + if ($rowHasData) { + $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex); + } + } + } + + $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']); + $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1; + + $worksheetInfo[] = $tmpInfo; + ++$worksheetID; + } + + return $worksheetInfo; + } + + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Create new PHPExcel + $objPHPExcel = new PHPExcel(); + + // Load into this instance + return $this->loadIntoExisting($pFilename, $objPHPExcel); + } + + + private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) { + $styleAttributeValue = strtolower($styleAttributeValue); + foreach($styleList as $style) { + if ($styleAttributeValue == strtolower($style)) { + $styleAttributeValue = $style; + return true; + } + } + return false; + } + + + /** + * pixel units to excel width units(units of 1/256th of a character width) + * @param pxs + * @return + */ + private static function _pixel2WidthUnits($pxs) { + $UNIT_OFFSET_MAP = array(0, 36, 73, 109, 146, 182, 219); + + $widthUnits = 256 * ($pxs / 7); + $widthUnits += $UNIT_OFFSET_MAP[($pxs % 7)]; + return $widthUnits; + } + + + /** + * excel width units(units of 1/256th of a character width) to pixel units + * @param widthUnits + * @return + */ + private static function _widthUnits2Pixel($widthUnits) { + $pixels = ($widthUnits / 256) * 7; + $offsetWidthUnits = $widthUnits % 256; + $pixels += round($offsetWidthUnits / (256 / 7)); + return $pixels; + } + + + private static function _hex2str($hex) { + return chr(hexdec($hex[1])); + } + + + /** + * Loads PHPExcel from file into PHPExcel instance + * + * @param string $pFilename + * @param PHPExcel $objPHPExcel + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) + { + $fromFormats = array('\-', '\ '); + $toFormats = array('-', ' '); + + $underlineStyles = array ( + PHPExcel_Style_Font::UNDERLINE_NONE, + PHPExcel_Style_Font::UNDERLINE_DOUBLE, + PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING, + PHPExcel_Style_Font::UNDERLINE_SINGLE, + PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING + ); + $verticalAlignmentStyles = array ( + PHPExcel_Style_Alignment::VERTICAL_BOTTOM, + PHPExcel_Style_Alignment::VERTICAL_TOP, + PHPExcel_Style_Alignment::VERTICAL_CENTER, + PHPExcel_Style_Alignment::VERTICAL_JUSTIFY + ); + $horizontalAlignmentStyles = array ( + PHPExcel_Style_Alignment::HORIZONTAL_GENERAL, + PHPExcel_Style_Alignment::HORIZONTAL_LEFT, + PHPExcel_Style_Alignment::HORIZONTAL_RIGHT, + PHPExcel_Style_Alignment::HORIZONTAL_CENTER, + PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS, + PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY + ); + + $timezoneObj = new DateTimeZone('Europe/London'); + $GMT = new DateTimeZone('UTC'); + + + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + if (!$this->canRead($pFilename)) { + throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); + } + + $xml = simplexml_load_file($pFilename, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $namespaces = $xml->getNamespaces(true); + + $docProps = $objPHPExcel->getProperties(); + if (isset($xml->DocumentProperties[0])) { + foreach($xml->DocumentProperties[0] as $propertyName => $propertyValue) { + switch ($propertyName) { + case 'Title' : + $docProps->setTitle(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'Subject' : + $docProps->setSubject(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'Author' : + $docProps->setCreator(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'Created' : + $creationDate = strtotime($propertyValue); + $docProps->setCreated($creationDate); + break; + case 'LastAuthor' : + $docProps->setLastModifiedBy(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'LastSaved' : + $lastSaveDate = strtotime($propertyValue); + $docProps->setModified($lastSaveDate); + break; + case 'Company' : + $docProps->setCompany(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'Category' : + $docProps->setCategory(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'Manager' : + $docProps->setManager(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'Keywords' : + $docProps->setKeywords(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + case 'Description' : + $docProps->setDescription(self::_convertStringEncoding($propertyValue,$this->_charSet)); + break; + } + } + } + if (isset($xml->CustomDocumentProperties)) { + foreach($xml->CustomDocumentProperties[0] as $propertyName => $propertyValue) { + $propertyAttributes = $propertyValue->attributes($namespaces['dt']); + $propertyName = preg_replace_callback('/_x([0-9a-z]{4})_/','PHPExcel_Reader_Excel2003XML::_hex2str',$propertyName); + $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_UNKNOWN; + switch((string) $propertyAttributes) { + case 'string' : + $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING; + $propertyValue = trim($propertyValue); + break; + case 'boolean' : + $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN; + $propertyValue = (bool) $propertyValue; + break; + case 'integer' : + $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_INTEGER; + $propertyValue = intval($propertyValue); + break; + case 'float' : + $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_FLOAT; + $propertyValue = floatval($propertyValue); + break; + case 'dateTime.tz' : + $propertyType = PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE; + $propertyValue = strtotime(trim($propertyValue)); + break; + } + $docProps->setCustomProperty($propertyName,$propertyValue,$propertyType); + } + } + + foreach($xml->Styles[0] as $style) { + $style_ss = $style->attributes($namespaces['ss']); + $styleID = (string) $style_ss['ID']; +// echo 'Style ID = '.$styleID.'
'; + if ($styleID == 'Default') { + $this->_styles['Default'] = array(); + } else { + $this->_styles[$styleID] = $this->_styles['Default']; + } + foreach ($style as $styleType => $styleData) { + $styleAttributes = $styleData->attributes($namespaces['ss']); +// echo $styleType.'
'; + switch ($styleType) { + case 'Alignment' : + foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { +// echo $styleAttributeKey.' = '.$styleAttributeValue.'
'; + $styleAttributeValue = (string) $styleAttributeValue; + switch ($styleAttributeKey) { + case 'Vertical' : + if (self::identifyFixedStyleValue($verticalAlignmentStyles,$styleAttributeValue)) { + $this->_styles[$styleID]['alignment']['vertical'] = $styleAttributeValue; + } + break; + case 'Horizontal' : + if (self::identifyFixedStyleValue($horizontalAlignmentStyles,$styleAttributeValue)) { + $this->_styles[$styleID]['alignment']['horizontal'] = $styleAttributeValue; + } + break; + case 'WrapText' : + $this->_styles[$styleID]['alignment']['wrap'] = true; + break; + } + } + break; + case 'Borders' : + foreach($styleData->Border as $borderStyle) { + $borderAttributes = $borderStyle->attributes($namespaces['ss']); + $thisBorder = array(); + foreach($borderAttributes as $borderStyleKey => $borderStyleValue) { +// echo $borderStyleKey.' = '.$borderStyleValue.'
'; + switch ($borderStyleKey) { + case 'LineStyle' : + $thisBorder['style'] = PHPExcel_Style_Border::BORDER_MEDIUM; +// $thisBorder['style'] = $borderStyleValue; + break; + case 'Weight' : +// $thisBorder['style'] = $borderStyleValue; + break; + case 'Position' : + $borderPosition = strtolower($borderStyleValue); + break; + case 'Color' : + $borderColour = substr($borderStyleValue,1); + $thisBorder['color']['rgb'] = $borderColour; + break; + } + } + if (!empty($thisBorder)) { + if (($borderPosition == 'left') || ($borderPosition == 'right') || ($borderPosition == 'top') || ($borderPosition == 'bottom')) { + $this->_styles[$styleID]['borders'][$borderPosition] = $thisBorder; + } + } + } + break; + case 'Font' : + foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { +// echo $styleAttributeKey.' = '.$styleAttributeValue.'
'; + $styleAttributeValue = (string) $styleAttributeValue; + switch ($styleAttributeKey) { + case 'FontName' : + $this->_styles[$styleID]['font']['name'] = $styleAttributeValue; + break; + case 'Size' : + $this->_styles[$styleID]['font']['size'] = $styleAttributeValue; + break; + case 'Color' : + $this->_styles[$styleID]['font']['color']['rgb'] = substr($styleAttributeValue,1); + break; + case 'Bold' : + $this->_styles[$styleID]['font']['bold'] = true; + break; + case 'Italic' : + $this->_styles[$styleID]['font']['italic'] = true; + break; + case 'Underline' : + if (self::identifyFixedStyleValue($underlineStyles,$styleAttributeValue)) { + $this->_styles[$styleID]['font']['underline'] = $styleAttributeValue; + } + break; + } + } + break; + case 'Interior' : + foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { +// echo $styleAttributeKey.' = '.$styleAttributeValue.'
'; + switch ($styleAttributeKey) { + case 'Color' : + $this->_styles[$styleID]['fill']['color']['rgb'] = substr($styleAttributeValue,1); + break; + } + } + break; + case 'NumberFormat' : + foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { +// echo $styleAttributeKey.' = '.$styleAttributeValue.'
'; + $styleAttributeValue = str_replace($fromFormats,$toFormats,$styleAttributeValue); + switch ($styleAttributeValue) { + case 'Short Date' : + $styleAttributeValue = 'dd/mm/yyyy'; + break; + } + if ($styleAttributeValue > '') { + $this->_styles[$styleID]['numberformat']['code'] = $styleAttributeValue; + } + } + break; + case 'Protection' : + foreach($styleAttributes as $styleAttributeKey => $styleAttributeValue) { +// echo $styleAttributeKey.' = '.$styleAttributeValue.'
'; + } + break; + } + } +// print_r($this->_styles[$styleID]); +// echo '
'; + } +// echo '
'; + + $worksheetID = 0; + $xml_ss = $xml->children($namespaces['ss']); + + foreach($xml_ss->Worksheet as $worksheet) { + $worksheet_ss = $worksheet->attributes($namespaces['ss']); + + if ((isset($this->_loadSheetsOnly)) && (isset($worksheet_ss['Name'])) && + (!in_array($worksheet_ss['Name'], $this->_loadSheetsOnly))) { + continue; + } + +// echo '

Worksheet: ',$worksheet_ss['Name'],'

'; +// + // Create new Worksheet + $objPHPExcel->createSheet(); + $objPHPExcel->setActiveSheetIndex($worksheetID); + if (isset($worksheet_ss['Name'])) { + $worksheetName = self::_convertStringEncoding((string) $worksheet_ss['Name'],$this->_charSet); + // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in + // formula cells... during the load, all formulae should be correct, and we're simply bringing + // the worksheet name in line with the formula, not the reverse + $objPHPExcel->getActiveSheet()->setTitle($worksheetName,false); + } + + $columnID = 'A'; + if (isset($worksheet->Table->Column)) { + foreach($worksheet->Table->Column as $columnData) { + $columnData_ss = $columnData->attributes($namespaces['ss']); + if (isset($columnData_ss['Index'])) { + $columnID = PHPExcel_Cell::stringFromColumnIndex($columnData_ss['Index']-1); + } + if (isset($columnData_ss['Width'])) { + $columnWidth = $columnData_ss['Width']; +// echo 'Setting column width for '.$columnID.' to '.$columnWidth.'
'; + $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setWidth($columnWidth / 5.4); + } + ++$columnID; + } + } + + $rowID = 1; + if (isset($worksheet->Table->Row)) { + foreach($worksheet->Table->Row as $rowData) { + $rowHasData = false; + $row_ss = $rowData->attributes($namespaces['ss']); + if (isset($row_ss['Index'])) { + $rowID = (integer) $row_ss['Index']; + } +// echo 'Row '.$rowID.'
'; + + $columnID = 'A'; + foreach($rowData->Cell as $cell) { + + $cell_ss = $cell->attributes($namespaces['ss']); + if (isset($cell_ss['Index'])) { + $columnID = PHPExcel_Cell::stringFromColumnIndex($cell_ss['Index']-1); + } + $cellRange = $columnID.$rowID; + + if ($this->getReadFilter() !== NULL) { + if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) { + continue; + } + } + + if ((isset($cell_ss['MergeAcross'])) || (isset($cell_ss['MergeDown']))) { + $columnTo = $columnID; + if (isset($cell_ss['MergeAcross'])) { + $columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cell_ss['MergeAcross'] -1); + } + $rowTo = $rowID; + if (isset($cell_ss['MergeDown'])) { + $rowTo = $rowTo + $cell_ss['MergeDown']; + } + $cellRange .= ':'.$columnTo.$rowTo; + $objPHPExcel->getActiveSheet()->mergeCells($cellRange); + } + + $cellIsSet = $hasCalculatedValue = false; + $cellDataFormula = ''; + if (isset($cell_ss['Formula'])) { + $cellDataFormula = $cell_ss['Formula']; + // added this as a check for array formulas + if (isset($cell_ss['ArrayRange'])) { + $cellDataCSEFormula = $cell_ss['ArrayRange']; +// echo "found an array formula at ".$columnID.$rowID."
"; + } + $hasCalculatedValue = true; + } + if (isset($cell->Data)) { + $cellValue = $cellData = $cell->Data; + $type = PHPExcel_Cell_DataType::TYPE_NULL; + $cellData_ss = $cellData->attributes($namespaces['ss']); + if (isset($cellData_ss['Type'])) { + $cellDataType = $cellData_ss['Type']; + switch ($cellDataType) { + /* + const TYPE_STRING = 's'; + const TYPE_FORMULA = 'f'; + const TYPE_NUMERIC = 'n'; + const TYPE_BOOL = 'b'; + const TYPE_NULL = 'null'; + const TYPE_INLINE = 'inlineStr'; + const TYPE_ERROR = 'e'; + */ + case 'String' : + $cellValue = self::_convertStringEncoding($cellValue,$this->_charSet); + $type = PHPExcel_Cell_DataType::TYPE_STRING; + break; + case 'Number' : + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $cellValue = (float) $cellValue; + if (floor($cellValue) == $cellValue) { + $cellValue = (integer) $cellValue; + } + break; + case 'Boolean' : + $type = PHPExcel_Cell_DataType::TYPE_BOOL; + $cellValue = ($cellValue != 0); + break; + case 'DateTime' : + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $cellValue = PHPExcel_Shared_Date::PHPToExcel(strtotime($cellValue)); + break; + case 'Error' : + $type = PHPExcel_Cell_DataType::TYPE_ERROR; + break; + } + } + + if ($hasCalculatedValue) { +// echo 'FORMULA
'; + $type = PHPExcel_Cell_DataType::TYPE_FORMULA; + $columnNumber = PHPExcel_Cell::columnIndexFromString($columnID); + if (substr($cellDataFormula,0,3) == 'of:') { + $cellDataFormula = substr($cellDataFormula,3); +// echo 'Before: ',$cellDataFormula,'
'; + $temp = explode('"',$cellDataFormula); + $key = false; + foreach($temp as &$value) { + // Only replace in alternate array entries (i.e. non-quoted blocks) + if ($key = !$key) { + $value = str_replace(array('[.','.',']'),'',$value); + } + } + } else { + // Convert R1C1 style references to A1 style references (but only when not quoted) +// echo 'Before: ',$cellDataFormula,'
'; + $temp = explode('"',$cellDataFormula); + $key = false; + foreach($temp as &$value) { + // Only replace in alternate array entries (i.e. non-quoted blocks) + if ($key = !$key) { + preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/',$value, $cellReferences,PREG_SET_ORDER+PREG_OFFSET_CAPTURE); + // Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way + // through the formula from left to right. Reversing means that we work right to left.through + // the formula + $cellReferences = array_reverse($cellReferences); + // Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent, + // then modify the formula to use that new reference + foreach($cellReferences as $cellReference) { + $rowReference = $cellReference[2][0]; + // Empty R reference is the current row + if ($rowReference == '') $rowReference = $rowID; + // Bracketed R references are relative to the current row + if ($rowReference{0} == '[') $rowReference = $rowID + trim($rowReference,'[]'); + $columnReference = $cellReference[4][0]; + // Empty C reference is the current column + if ($columnReference == '') $columnReference = $columnNumber; + // Bracketed C references are relative to the current column + if ($columnReference{0} == '[') $columnReference = $columnNumber + trim($columnReference,'[]'); + $A1CellReference = PHPExcel_Cell::stringFromColumnIndex($columnReference-1).$rowReference; + $value = substr_replace($value,$A1CellReference,$cellReference[0][1],strlen($cellReference[0][0])); + } + } + } + } + unset($value); + // Then rebuild the formula string + $cellDataFormula = implode('"',$temp); +// echo 'After: ',$cellDataFormula,'
'; + } + +// echo 'Cell '.$columnID.$rowID.' is a '.$type.' with a value of '.(($hasCalculatedValue) ? $cellDataFormula : $cellValue).'
'; +// + $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $cellValue),$type); + if ($hasCalculatedValue) { +// echo 'Formula result is '.$cellValue.'
'; + $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setCalculatedValue($cellValue); + } + $cellIsSet = $rowHasData = true; + } + + if (isset($cell->Comment)) { +// echo 'comment found
'; + $commentAttributes = $cell->Comment->attributes($namespaces['ss']); + $author = 'unknown'; + if (isset($commentAttributes->Author)) { + $author = (string)$commentAttributes->Author; +// echo 'Author: ',$author,'
'; + } + $node = $cell->Comment->Data->asXML(); +// $annotation = str_replace('html:','',substr($node,49,-10)); +// echo $annotation,'
'; + $annotation = strip_tags($node); +// echo 'Annotation: ',$annotation,'
'; + $objPHPExcel->getActiveSheet()->getComment( $columnID.$rowID ) + ->setAuthor(self::_convertStringEncoding($author ,$this->_charSet)) + ->setText($this->_parseRichText($annotation) ); + } + + if (($cellIsSet) && (isset($cell_ss['StyleID']))) { + $style = (string) $cell_ss['StyleID']; +// echo 'Cell style for '.$columnID.$rowID.' is '.$style.'
'; + if ((isset($this->_styles[$style])) && (!empty($this->_styles[$style]))) { +// echo 'Cell '.$columnID.$rowID.'
'; +// print_r($this->_styles[$style]); +// echo '
'; + if (!$objPHPExcel->getActiveSheet()->cellExists($columnID.$rowID)) { + $objPHPExcel->getActiveSheet()->getCell($columnID.$rowID)->setValue(NULL); + } + $objPHPExcel->getActiveSheet()->getStyle($cellRange)->applyFromArray($this->_styles[$style]); + } + } + ++$columnID; + } + + if ($rowHasData) { + if (isset($row_ss['StyleID'])) { + $rowStyle = $row_ss['StyleID']; + } + if (isset($row_ss['Height'])) { + $rowHeight = $row_ss['Height']; +// echo 'Setting row height to '.$rowHeight.'
'; + $objPHPExcel->getActiveSheet()->getRowDimension($rowID)->setRowHeight($rowHeight); + } + } + + ++$rowID; + } + } + ++$worksheetID; + } + + // Return + return $objPHPExcel; + } + + + private static function _convertStringEncoding($string,$charset) { + if ($charset != 'UTF-8') { + return PHPExcel_Shared_String::ConvertEncoding($string,'UTF-8',$charset); + } + return $string; + } + + + private function _parseRichText($is = '') { + $value = new PHPExcel_RichText(); + + $value->createText(self::_convertStringEncoding($is,$this->_charSet)); + + return $value; + } + +} diff --git a/PHPExcel/Reader/Excel2007.php b/PHPExcel/Reader/Excel2007.php new file mode 100644 index 0000000..d8344ac --- /dev/null +++ b/PHPExcel/Reader/Excel2007.php @@ -0,0 +1,2069 @@ +_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + $this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance(); + } + + + /** + * Can the current PHPExcel_Reader_IReader read the file? + * + * @param string $pFilename + * @return boolean + * @throws PHPExcel_Reader_Exception + */ + public function canRead($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $zipClass = PHPExcel_Settings::getZipClass(); + + // Check if zip class exists +// if (!class_exists($zipClass, FALSE)) { +// throw new PHPExcel_Reader_Exception($zipClass . " library is not enabled"); +// } + + $xl = false; + // Load file + $zip = new $zipClass; + if ($zip->open($pFilename) === true) { + // check if it is an OOXML archive + $rels = simplexml_load_string($this->_getFromZipArchive($zip, "_rels/.rels"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + if ($rels !== false) { + foreach ($rels->Relationship as $rel) { + switch ($rel["Type"]) { + case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument": + if (basename($rel["Target"]) == 'workbook.xml') { + $xl = true; + } + break; + + } + } + } + $zip->close(); + } + + return $xl; + } + + + /** + * Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetNames($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $worksheetNames = array(); + + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; + $zip->open($pFilename); + + // The files we're looking at here are small enough that simpleXML is more efficient than XMLReader + $rels = simplexml_load_string( + $this->_getFromZipArchive($zip, "_rels/.rels", 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()) + ); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + foreach ($rels->Relationship as $rel) { + switch ($rel["Type"]) { + case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument": + $xmlWorkbook = simplexml_load_string( + $this->_getFromZipArchive($zip, "{$rel['Target']}", 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()) + ); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + + if ($xmlWorkbook->sheets) { + foreach ($xmlWorkbook->sheets->sheet as $eleSheet) { + // Check if sheet should be skipped + $worksheetNames[] = (string) $eleSheet["name"]; + } + } + } + } + + $zip->close(); + + return $worksheetNames; + } + + + /** + * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetInfo($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $worksheetInfo = array(); + + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; + $zip->open($pFilename); + + $rels = simplexml_load_string($this->_getFromZipArchive($zip, "_rels/.rels"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + foreach ($rels->Relationship as $rel) { + if ($rel["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument") { + $dir = dirname($rel["Target"]); + $relsWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/_rels/" . basename($rel["Target"]) . ".rels"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + $relsWorkbook->registerXPathNamespace("rel", "http://schemas.openxmlformats.org/package/2006/relationships"); + + $worksheets = array(); + foreach ($relsWorkbook->Relationship as $ele) { + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet") { + $worksheets[(string) $ele["Id"]] = $ele["Target"]; + } + } + + $xmlWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + if ($xmlWorkbook->sheets) { + $dir = dirname($rel["Target"]); + foreach ($xmlWorkbook->sheets->sheet as $eleSheet) { + $tmpInfo = array( + 'worksheetName' => (string) $eleSheet["name"], + 'lastColumnLetter' => 'A', + 'lastColumnIndex' => 0, + 'totalRows' => 0, + 'totalColumns' => 0, + ); + + $fileWorksheet = $worksheets[(string) self::array_item($eleSheet->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "id")]; + + $xml = new XMLReader(); + $res = $xml->open('zip://'.PHPExcel_Shared_File::realpath($pFilename).'#'."$dir/$fileWorksheet", null, PHPExcel_Settings::getLibXmlLoaderOptions()); + $xml->setParserProperty(2,true); + + $currCells = 0; + while ($xml->read()) { + if ($xml->name == 'row' && $xml->nodeType == XMLReader::ELEMENT) { + $row = $xml->getAttribute('r'); + $tmpInfo['totalRows'] = $row; + $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells); + $currCells = 0; + } elseif ($xml->name == 'c' && $xml->nodeType == XMLReader::ELEMENT) { + $currCells++; + } + } + $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells); + $xml->close(); + + $tmpInfo['lastColumnIndex'] = $tmpInfo['totalColumns'] - 1; + $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']); + + $worksheetInfo[] = $tmpInfo; + } + } + } + } + + $zip->close(); + + return $worksheetInfo; + } + + + private static function _castToBool($c) { +// echo 'Initial Cast to Boolean', PHP_EOL; + $value = isset($c->v) ? (string) $c->v : NULL; + if ($value == '0') { + return FALSE; + } elseif ($value == '1') { + return TRUE; + } else { + return (bool)$c->v; + } + return $value; + } // function _castToBool() + + + private static function _castToError($c) { +// echo 'Initial Cast to Error', PHP_EOL; + return isset($c->v) ? (string) $c->v : NULL; + } // function _castToError() + + + private static function _castToString($c) { +// echo 'Initial Cast to String, PHP_EOL; + return isset($c->v) ? (string) $c->v : NULL; + } // function _castToString() + + + private function _castToFormula($c,$r,&$cellDataType,&$value,&$calculatedValue,&$sharedFormulas,$castBaseType) { +// echo 'Formula', PHP_EOL; +// echo '$c->f is ', $c->f, PHP_EOL; + $cellDataType = 'f'; + $value = "={$c->f}"; + $calculatedValue = self::$castBaseType($c); + + // Shared formula? + if (isset($c->f['t']) && strtolower((string)$c->f['t']) == 'shared') { +// echo 'SHARED FORMULA', PHP_EOL; + $instance = (string)$c->f['si']; + +// echo 'Instance ID = ', $instance, PHP_EOL; +// +// echo 'Shared Formula Array:', PHP_EOL; +// print_r($sharedFormulas); + if (!isset($sharedFormulas[(string)$c->f['si']])) { +// echo 'SETTING NEW SHARED FORMULA', PHP_EOL; +// echo 'Master is ', $r, PHP_EOL; +// echo 'Formula is ', $value, PHP_EOL; + $sharedFormulas[$instance] = array( 'master' => $r, + 'formula' => $value + ); +// echo 'New Shared Formula Array:', PHP_EOL; +// print_r($sharedFormulas); + } else { +// echo 'GETTING SHARED FORMULA', PHP_EOL; +// echo 'Master is ', $sharedFormulas[$instance]['master'], PHP_EOL; +// echo 'Formula is ', $sharedFormulas[$instance]['formula'], PHP_EOL; + $master = PHPExcel_Cell::coordinateFromString($sharedFormulas[$instance]['master']); + $current = PHPExcel_Cell::coordinateFromString($r); + + $difference = array(0, 0); + $difference[0] = PHPExcel_Cell::columnIndexFromString($current[0]) - PHPExcel_Cell::columnIndexFromString($master[0]); + $difference[1] = $current[1] - $master[1]; + + $value = $this->_referenceHelper->updateFormulaReferences( $sharedFormulas[$instance]['formula'], + 'A1', + $difference[0], + $difference[1] + ); +// echo 'Adjusted Formula is ', $value, PHP_EOL; + } + } + } + + + public function _getFromZipArchive($archive, $fileName = '') + { + // Root-relative paths + if (strpos($fileName, '//') !== false) + { + $fileName = substr($fileName, strpos($fileName, '//') + 1); + } + $fileName = PHPExcel_Shared_File::realpath($fileName); + + // Apache POI fixes + $contents = $archive->getFromName($fileName); + if ($contents === false) + { + $contents = $archive->getFromName(substr($fileName, 1)); + } + + return $contents; + } + + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + // Initialisations + $excel = new PHPExcel; + $excel->removeSheetByIndex(0); + if (!$this->_readDataOnly) { + $excel->removeCellStyleXfByIndex(0); // remove the default style + $excel->removeCellXfByIndex(0); // remove the default style + } + + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; + $zip->open($pFilename); + + // Read the theme first, because we need the colour scheme when reading the styles + $wbRels = simplexml_load_string($this->_getFromZipArchive($zip, "xl/_rels/workbook.xml.rels"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + foreach ($wbRels->Relationship as $rel) { + switch ($rel["Type"]) { + case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme": + $themeOrderArray = array('lt1','dk1','lt2','dk2'); + $themeOrderAdditional = count($themeOrderArray); + + $xmlTheme = simplexml_load_string($this->_getFromZipArchive($zip, "xl/{$rel['Target']}"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + if (is_object($xmlTheme)) { + $xmlThemeName = $xmlTheme->attributes(); + $xmlTheme = $xmlTheme->children("http://schemas.openxmlformats.org/drawingml/2006/main"); + $themeName = (string)$xmlThemeName['name']; + + $colourScheme = $xmlTheme->themeElements->clrScheme->attributes(); + $colourSchemeName = (string)$colourScheme['name']; + $colourScheme = $xmlTheme->themeElements->clrScheme->children("http://schemas.openxmlformats.org/drawingml/2006/main"); + + $themeColours = array(); + foreach ($colourScheme as $k => $xmlColour) { + $themePos = array_search($k,$themeOrderArray); + if ($themePos === false) { + $themePos = $themeOrderAdditional++; + } + if (isset($xmlColour->sysClr)) { + $xmlColourData = $xmlColour->sysClr->attributes(); + $themeColours[$themePos] = $xmlColourData['lastClr']; + } elseif (isset($xmlColour->srgbClr)) { + $xmlColourData = $xmlColour->srgbClr->attributes(); + $themeColours[$themePos] = $xmlColourData['val']; + } + } + self::$_theme = new PHPExcel_Reader_Excel2007_Theme($themeName,$colourSchemeName,$themeColours); + } + break; + } + } + + $rels = simplexml_load_string($this->_getFromZipArchive($zip, "_rels/.rels"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + foreach ($rels->Relationship as $rel) { + switch ($rel["Type"]) { + case "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties": + $xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + if (is_object($xmlCore)) { + $xmlCore->registerXPathNamespace("dc", "http://purl.org/dc/elements/1.1/"); + $xmlCore->registerXPathNamespace("dcterms", "http://purl.org/dc/terms/"); + $xmlCore->registerXPathNamespace("cp", "http://schemas.openxmlformats.org/package/2006/metadata/core-properties"); + $docProps = $excel->getProperties(); + $docProps->setCreator((string) self::array_item($xmlCore->xpath("dc:creator"))); + $docProps->setLastModifiedBy((string) self::array_item($xmlCore->xpath("cp:lastModifiedBy"))); + $docProps->setCreated(strtotime(self::array_item($xmlCore->xpath("dcterms:created")))); //! respect xsi:type + $docProps->setModified(strtotime(self::array_item($xmlCore->xpath("dcterms:modified")))); //! respect xsi:type + $docProps->setTitle((string) self::array_item($xmlCore->xpath("dc:title"))); + $docProps->setDescription((string) self::array_item($xmlCore->xpath("dc:description"))); + $docProps->setSubject((string) self::array_item($xmlCore->xpath("dc:subject"))); + $docProps->setKeywords((string) self::array_item($xmlCore->xpath("cp:keywords"))); + $docProps->setCategory((string) self::array_item($xmlCore->xpath("cp:category"))); + } + break; + + case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties": + $xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + if (is_object($xmlCore)) { + $docProps = $excel->getProperties(); + if (isset($xmlCore->Company)) + $docProps->setCompany((string) $xmlCore->Company); + if (isset($xmlCore->Manager)) + $docProps->setManager((string) $xmlCore->Manager); + } + break; + + case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties": + $xmlCore = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + if (is_object($xmlCore)) { + $docProps = $excel->getProperties(); + foreach ($xmlCore as $xmlProperty) { + $cellDataOfficeAttributes = $xmlProperty->attributes(); + if (isset($cellDataOfficeAttributes['name'])) { + $propertyName = (string) $cellDataOfficeAttributes['name']; + $cellDataOfficeChildren = $xmlProperty->children('http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); + $attributeType = $cellDataOfficeChildren->getName(); + $attributeValue = (string) $cellDataOfficeChildren->{$attributeType}; + $attributeValue = PHPExcel_DocumentProperties::convertProperty($attributeValue,$attributeType); + $attributeType = PHPExcel_DocumentProperties::convertPropertyType($attributeType); + $docProps->setCustomProperty($propertyName,$attributeValue,$attributeType); + } + } + } + break; + //Ribbon + case "http://schemas.microsoft.com/office/2006/relationships/ui/extensibility": + $customUI = $rel['Target']; + if(!is_null($customUI)){ + $this->_readRibbon($excel, $customUI, $zip); + } + break; + case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument": + $dir = dirname($rel["Target"]); + $relsWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/_rels/" . basename($rel["Target"]) . ".rels"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + $relsWorkbook->registerXPathNamespace("rel", "http://schemas.openxmlformats.org/package/2006/relationships"); + + $sharedStrings = array(); + $xpath = self::array_item($relsWorkbook->xpath("rel:Relationship[@Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings']")); + $xmlStrings = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$xpath[Target]"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + if (isset($xmlStrings) && isset($xmlStrings->si)) { + foreach ($xmlStrings->si as $val) { + if (isset($val->t)) { + $sharedStrings[] = PHPExcel_Shared_String::ControlCharacterOOXML2PHP( (string) $val->t ); + } elseif (isset($val->r)) { + $sharedStrings[] = $this->_parseRichText($val); + } + } + } + + $worksheets = array(); + $macros = $customUI = NULL; + foreach ($relsWorkbook->Relationship as $ele) { + switch($ele['Type']){ + case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet": + $worksheets[(string) $ele["Id"]] = $ele["Target"]; + break; + // a vbaProject ? (: some macros) + case "http://schemas.microsoft.com/office/2006/relationships/vbaProject": + $macros = $ele["Target"]; + break; + } + } + + if(!is_null($macros)){ + $macrosCode = $this->_getFromZipArchive($zip, 'xl/vbaProject.bin');//vbaProject.bin always in 'xl' dir and always named vbaProject.bin + if($macrosCode !== false){ + $excel->setMacrosCode($macrosCode); + $excel->setHasMacros(true); + //short-circuit : not reading vbaProject.bin.rel to get Signature =>allways vbaProjectSignature.bin in 'xl' dir + $Certificate = $this->_getFromZipArchive($zip, 'xl/vbaProjectSignature.bin'); + if($Certificate !== false) + $excel->setMacrosCertificate($Certificate); + } + } + $styles = array(); + $cellStyles = array(); + $xpath = self::array_item($relsWorkbook->xpath("rel:Relationship[@Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles']")); + $xmlStyles = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$xpath[Target]"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + $numFmts = null; + if ($xmlStyles && $xmlStyles->numFmts[0]) { + $numFmts = $xmlStyles->numFmts[0]; + } + if (isset($numFmts) && ($numFmts !== NULL)) { + $numFmts->registerXPathNamespace("sml", "http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + } + if (!$this->_readDataOnly && $xmlStyles) { + foreach ($xmlStyles->cellXfs->xf as $xf) { + $numFmt = PHPExcel_Style_NumberFormat::FORMAT_GENERAL; + + if ($xf["numFmtId"]) { + if (isset($numFmts)) { + $tmpNumFmt = self::array_item($numFmts->xpath("sml:numFmt[@numFmtId=$xf[numFmtId]]")); + + if (isset($tmpNumFmt["formatCode"])) { + $numFmt = (string) $tmpNumFmt["formatCode"]; + } + } + + if ((int)$xf["numFmtId"] < 164) { + $numFmt = PHPExcel_Style_NumberFormat::builtInFormatCode((int)$xf["numFmtId"]); + } + } + $quotePrefix = false; + if (isset($xf["quotePrefix"])) { + $quotePrefix = (boolean) $xf["quotePrefix"]; + } + //$numFmt = str_replace('mm', 'i', $numFmt); + //$numFmt = str_replace('h', 'H', $numFmt); + + $style = (object) array( + "numFmt" => $numFmt, + "font" => $xmlStyles->fonts->font[intval($xf["fontId"])], + "fill" => $xmlStyles->fills->fill[intval($xf["fillId"])], + "border" => $xmlStyles->borders->border[intval($xf["borderId"])], + "alignment" => $xf->alignment, + "protection" => $xf->protection, + "quotePrefix" => $quotePrefix, + ); + $styles[] = $style; + + // add style to cellXf collection + $objStyle = new PHPExcel_Style; + self::_readStyle($objStyle, $style); + $excel->addCellXf($objStyle); + } + + foreach ($xmlStyles->cellStyleXfs->xf as $xf) { + $numFmt = PHPExcel_Style_NumberFormat::FORMAT_GENERAL; + if ($numFmts && $xf["numFmtId"]) { + $tmpNumFmt = self::array_item($numFmts->xpath("sml:numFmt[@numFmtId=$xf[numFmtId]]")); + if (isset($tmpNumFmt["formatCode"])) { + $numFmt = (string) $tmpNumFmt["formatCode"]; + } else if ((int)$xf["numFmtId"] < 165) { + $numFmt = PHPExcel_Style_NumberFormat::builtInFormatCode((int)$xf["numFmtId"]); + } + } + + $cellStyle = (object) array( + "numFmt" => $numFmt, + "font" => $xmlStyles->fonts->font[intval($xf["fontId"])], + "fill" => $xmlStyles->fills->fill[intval($xf["fillId"])], + "border" => $xmlStyles->borders->border[intval($xf["borderId"])], + "alignment" => $xf->alignment, + "protection" => $xf->protection, + "quotePrefix" => $quotePrefix, + ); + $cellStyles[] = $cellStyle; + + // add style to cellStyleXf collection + $objStyle = new PHPExcel_Style; + self::_readStyle($objStyle, $cellStyle); + $excel->addCellStyleXf($objStyle); + } + } + + $dxfs = array(); + if (!$this->_readDataOnly && $xmlStyles) { + // Conditional Styles + if ($xmlStyles->dxfs) { + foreach ($xmlStyles->dxfs->dxf as $dxf) { + $style = new PHPExcel_Style(FALSE, TRUE); + self::_readStyle($style, $dxf); + $dxfs[] = $style; + } + } + // Cell Styles + if ($xmlStyles->cellStyles) { + foreach ($xmlStyles->cellStyles->cellStyle as $cellStyle) { + if (intval($cellStyle['builtinId']) == 0) { + if (isset($cellStyles[intval($cellStyle['xfId'])])) { + // Set default style + $style = new PHPExcel_Style; + self::_readStyle($style, $cellStyles[intval($cellStyle['xfId'])]); + + // normal style, currently not using it for anything + } + } + } + } + } + + $xmlWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + + // Set base date + if ($xmlWorkbook->workbookPr) { + PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900); + if (isset($xmlWorkbook->workbookPr['date1904'])) { + if (self::boolean((string) $xmlWorkbook->workbookPr['date1904'])) { + PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_MAC_1904); + } + } + } + + $sheetId = 0; // keep track of new sheet id in final workbook + $oldSheetId = -1; // keep track of old sheet id in final workbook + $countSkippedSheets = 0; // keep track of number of skipped sheets + $mapSheetId = array(); // mapping of sheet ids from old to new + + + $charts = $chartDetails = array(); + + if ($xmlWorkbook->sheets) { + foreach ($xmlWorkbook->sheets->sheet as $eleSheet) { + ++$oldSheetId; + + // Check if sheet should be skipped + if (isset($this->_loadSheetsOnly) && !in_array((string) $eleSheet["name"], $this->_loadSheetsOnly)) { + ++$countSkippedSheets; + $mapSheetId[$oldSheetId] = null; + continue; + } + + // Map old sheet id in original workbook to new sheet id. + // They will differ if loadSheetsOnly() is being used + $mapSheetId[$oldSheetId] = $oldSheetId - $countSkippedSheets; + + // Load sheet + $docSheet = $excel->createSheet(); + // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet + // references in formula cells... during the load, all formulae should be correct, + // and we're simply bringing the worksheet name in line with the formula, not the + // reverse + $docSheet->setTitle((string) $eleSheet["name"],false); + $fileWorksheet = $worksheets[(string) self::array_item($eleSheet->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "id")]; + $xmlSheet = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$fileWorksheet"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + + $sharedFormulas = array(); + + if (isset($eleSheet["state"]) && (string) $eleSheet["state"] != '') { + $docSheet->setSheetState( (string) $eleSheet["state"] ); + } + + if (isset($xmlSheet->sheetViews) && isset($xmlSheet->sheetViews->sheetView)) { + if (isset($xmlSheet->sheetViews->sheetView['zoomScale'])) { + $docSheet->getSheetView()->setZoomScale( intval($xmlSheet->sheetViews->sheetView['zoomScale']) ); + } + + if (isset($xmlSheet->sheetViews->sheetView['zoomScaleNormal'])) { + $docSheet->getSheetView()->setZoomScaleNormal( intval($xmlSheet->sheetViews->sheetView['zoomScaleNormal']) ); + } + + if (isset($xmlSheet->sheetViews->sheetView['view'])) { + $docSheet->getSheetView()->setView((string) $xmlSheet->sheetViews->sheetView['view']); + } + + if (isset($xmlSheet->sheetViews->sheetView['showGridLines'])) { + $docSheet->setShowGridLines(self::boolean((string)$xmlSheet->sheetViews->sheetView['showGridLines'])); + } + + if (isset($xmlSheet->sheetViews->sheetView['showRowColHeaders'])) { + $docSheet->setShowRowColHeaders(self::boolean((string)$xmlSheet->sheetViews->sheetView['showRowColHeaders'])); + } + + if (isset($xmlSheet->sheetViews->sheetView['rightToLeft'])) { + $docSheet->setRightToLeft(self::boolean((string)$xmlSheet->sheetViews->sheetView['rightToLeft'])); + } + + if (isset($xmlSheet->sheetViews->sheetView->pane)) { + if (isset($xmlSheet->sheetViews->sheetView->pane['topLeftCell'])) { + $docSheet->freezePane( (string)$xmlSheet->sheetViews->sheetView->pane['topLeftCell'] ); + } else { + $xSplit = 0; + $ySplit = 0; + + if (isset($xmlSheet->sheetViews->sheetView->pane['xSplit'])) { + $xSplit = 1 + intval($xmlSheet->sheetViews->sheetView->pane['xSplit']); + } + + if (isset($xmlSheet->sheetViews->sheetView->pane['ySplit'])) { + $ySplit = 1 + intval($xmlSheet->sheetViews->sheetView->pane['ySplit']); + } + + $docSheet->freezePaneByColumnAndRow($xSplit, $ySplit); + } + } + + if (isset($xmlSheet->sheetViews->sheetView->selection)) { + if (isset($xmlSheet->sheetViews->sheetView->selection['sqref'])) { + $sqref = (string)$xmlSheet->sheetViews->sheetView->selection['sqref']; + $sqref = explode(' ', $sqref); + $sqref = $sqref[0]; + $docSheet->setSelectedCells($sqref); + } + } + + } + + if (isset($xmlSheet->sheetPr) && isset($xmlSheet->sheetPr->tabColor)) { + if (isset($xmlSheet->sheetPr->tabColor['rgb'])) { + $docSheet->getTabColor()->setARGB( (string)$xmlSheet->sheetPr->tabColor['rgb'] ); + } + } + if (isset($xmlSheet->sheetPr) && isset($xmlSheet->sheetPr['codeName'])) { + $docSheet->setCodeName((string) $xmlSheet->sheetPr['codeName']); + } + if (isset($xmlSheet->sheetPr) && isset($xmlSheet->sheetPr->outlinePr)) { + if (isset($xmlSheet->sheetPr->outlinePr['summaryRight']) && + !self::boolean((string) $xmlSheet->sheetPr->outlinePr['summaryRight'])) { + $docSheet->setShowSummaryRight(FALSE); + } else { + $docSheet->setShowSummaryRight(TRUE); + } + + if (isset($xmlSheet->sheetPr->outlinePr['summaryBelow']) && + !self::boolean((string) $xmlSheet->sheetPr->outlinePr['summaryBelow'])) { + $docSheet->setShowSummaryBelow(FALSE); + } else { + $docSheet->setShowSummaryBelow(TRUE); + } + } + + if (isset($xmlSheet->sheetPr) && isset($xmlSheet->sheetPr->pageSetUpPr)) { + if (isset($xmlSheet->sheetPr->pageSetUpPr['fitToPage']) && + !self::boolean((string) $xmlSheet->sheetPr->pageSetUpPr['fitToPage'])) { + $docSheet->getPageSetup()->setFitToPage(FALSE); + } else { + $docSheet->getPageSetup()->setFitToPage(TRUE); + } + } + + if (isset($xmlSheet->sheetFormatPr)) { + if (isset($xmlSheet->sheetFormatPr['customHeight']) && + self::boolean((string) $xmlSheet->sheetFormatPr['customHeight']) && + isset($xmlSheet->sheetFormatPr['defaultRowHeight'])) { + $docSheet->getDefaultRowDimension()->setRowHeight( (float)$xmlSheet->sheetFormatPr['defaultRowHeight'] ); + } + if (isset($xmlSheet->sheetFormatPr['defaultColWidth'])) { + $docSheet->getDefaultColumnDimension()->setWidth( (float)$xmlSheet->sheetFormatPr['defaultColWidth'] ); + } + if (isset($xmlSheet->sheetFormatPr['zeroHeight']) && + ((string)$xmlSheet->sheetFormatPr['zeroHeight'] == '1')) { + $docSheet->getDefaultRowDimension()->setzeroHeight(true); + } + } + + if (isset($xmlSheet->cols) && !$this->_readDataOnly) { + foreach ($xmlSheet->cols->col as $col) { + for ($i = intval($col["min"]) - 1; $i < intval($col["max"]); ++$i) { + if ($col["style"] && !$this->_readDataOnly) { + $docSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setXfIndex(intval($col["style"])); + } + if (self::boolean($col["bestFit"])) { + //$docSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setAutoSize(TRUE); + } + if (self::boolean($col["hidden"])) { + // echo PHPExcel_Cell::stringFromColumnIndex($i),': HIDDEN COLUMN',PHP_EOL; + $docSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setVisible(FALSE); + } + if (self::boolean($col["collapsed"])) { + $docSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setCollapsed(TRUE); + } + if ($col["outlineLevel"] > 0) { + $docSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setOutlineLevel(intval($col["outlineLevel"])); + } + $docSheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setWidth(floatval($col["width"])); + + if (intval($col["max"]) == 16384) { + break; + } + } + } + } + + if (isset($xmlSheet->printOptions) && !$this->_readDataOnly) { + if (self::boolean((string) $xmlSheet->printOptions['gridLinesSet'])) { + $docSheet->setShowGridlines(TRUE); + } + + if (self::boolean((string) $xmlSheet->printOptions['gridLines'])) { + $docSheet->setPrintGridlines(TRUE); + } + + if (self::boolean((string) $xmlSheet->printOptions['horizontalCentered'])) { + $docSheet->getPageSetup()->setHorizontalCentered(TRUE); + } + if (self::boolean((string) $xmlSheet->printOptions['verticalCentered'])) { + $docSheet->getPageSetup()->setVerticalCentered(TRUE); + } + } + + if ($xmlSheet && $xmlSheet->sheetData && $xmlSheet->sheetData->row) { + foreach ($xmlSheet->sheetData->row as $row) { + if ($row["ht"] && !$this->_readDataOnly) { + $docSheet->getRowDimension(intval($row["r"]))->setRowHeight(floatval($row["ht"])); + } + if (self::boolean($row["hidden"]) && !$this->_readDataOnly) { + $docSheet->getRowDimension(intval($row["r"]))->setVisible(FALSE); + } + if (self::boolean($row["collapsed"])) { + $docSheet->getRowDimension(intval($row["r"]))->setCollapsed(TRUE); + } + if ($row["outlineLevel"] > 0) { + $docSheet->getRowDimension(intval($row["r"]))->setOutlineLevel(intval($row["outlineLevel"])); + } + if ($row["s"] && !$this->_readDataOnly) { + $docSheet->getRowDimension(intval($row["r"]))->setXfIndex(intval($row["s"])); + } + + foreach ($row->c as $c) { + $r = (string) $c["r"]; + $cellDataType = (string) $c["t"]; + $value = null; + $calculatedValue = null; + + // Read cell? + if ($this->getReadFilter() !== NULL) { + $coordinates = PHPExcel_Cell::coordinateFromString($r); + + if (!$this->getReadFilter()->readCell($coordinates[0], $coordinates[1], $docSheet->getTitle())) { + continue; + } + } + + // echo 'Reading cell ', $coordinates[0], $coordinates[1], PHP_EOL; + // print_r($c); + // echo PHP_EOL; + // echo 'Cell Data Type is ', $cellDataType, ': '; + // + // Read cell! + switch ($cellDataType) { + case "s": + // echo 'String', PHP_EOL; + if ((string)$c->v != '') { + $value = $sharedStrings[intval($c->v)]; + + if ($value instanceof PHPExcel_RichText) { + $value = clone $value; + } + } else { + $value = ''; + } + + break; + case "b": + // echo 'Boolean', PHP_EOL; + if (!isset($c->f)) { + $value = self::_castToBool($c); + } else { + // Formula + $this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToBool'); + if (isset($c->f['t'])) { + $att = array(); + $att = $c->f; + $docSheet->getCell($r)->setFormulaAttributes($att); + } + // echo '$calculatedValue = ', $calculatedValue, PHP_EOL; + } + break; + case "inlineStr": + // echo 'Inline String', PHP_EOL; + $value = $this->_parseRichText($c->is); + + break; + case "e": + // echo 'Error', PHP_EOL; + if (!isset($c->f)) { + $value = self::_castToError($c); + } else { + // Formula + $this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToError'); + // echo '$calculatedValue = ', $calculatedValue, PHP_EOL; + } + + break; + + default: + // echo 'Default', PHP_EOL; + if (!isset($c->f)) { + // echo 'Not a Formula', PHP_EOL; + $value = self::_castToString($c); + } else { + // echo 'Treat as Formula', PHP_EOL; + // Formula + $this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToString'); + // echo '$calculatedValue = ', $calculatedValue, PHP_EOL; + } + + break; + } + // echo 'Value is ', $value, PHP_EOL; + + // Check for numeric values + if (is_numeric($value) && $cellDataType != 's') { + if ($value == (int)$value) $value = (int)$value; + elseif ($value == (float)$value) $value = (float)$value; + elseif ($value == (double)$value) $value = (double)$value; + } + + // Rich text? + if ($value instanceof PHPExcel_RichText && $this->_readDataOnly) { + $value = $value->getPlainText(); + } + + $cell = $docSheet->getCell($r); + // Assign value + if ($cellDataType != '') { + $cell->setValueExplicit($value, $cellDataType); + } else { + $cell->setValue($value); + } + if ($calculatedValue !== NULL) { + $cell->setCalculatedValue($calculatedValue); + } + + // Style information? + if ($c["s"] && !$this->_readDataOnly) { + // no style index means 0, it seems + $cell->setXfIndex(isset($styles[intval($c["s"])]) ? + intval($c["s"]) : 0); + } + } + } + } + + $conditionals = array(); + if (!$this->_readDataOnly && $xmlSheet && $xmlSheet->conditionalFormatting) { + foreach ($xmlSheet->conditionalFormatting as $conditional) { + foreach ($conditional->cfRule as $cfRule) { + if ( + ( + (string)$cfRule["type"] == PHPExcel_Style_Conditional::CONDITION_NONE || + (string)$cfRule["type"] == PHPExcel_Style_Conditional::CONDITION_CELLIS || + (string)$cfRule["type"] == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT || + (string)$cfRule["type"] == PHPExcel_Style_Conditional::CONDITION_EXPRESSION + ) && isset($dxfs[intval($cfRule["dxfId"])]) + ) { + $conditionals[(string) $conditional["sqref"]][intval($cfRule["priority"])] = $cfRule; + } + } + } + + foreach ($conditionals as $ref => $cfRules) { + ksort($cfRules); + $conditionalStyles = array(); + foreach ($cfRules as $cfRule) { + $objConditional = new PHPExcel_Style_Conditional(); + $objConditional->setConditionType((string)$cfRule["type"]); + $objConditional->setOperatorType((string)$cfRule["operator"]); + + if ((string)$cfRule["text"] != '') { + $objConditional->setText((string)$cfRule["text"]); + } + + if (count($cfRule->formula) > 1) { + foreach ($cfRule->formula as $formula) { + $objConditional->addCondition((string)$formula); + } + } else { + $objConditional->addCondition((string)$cfRule->formula); + } + $objConditional->setStyle(clone $dxfs[intval($cfRule["dxfId"])]); + $conditionalStyles[] = $objConditional; + } + + // Extract all cell references in $ref + $aReferences = PHPExcel_Cell::extractAllCellReferencesInRange($ref); + foreach ($aReferences as $reference) { + $docSheet->getStyle($reference)->setConditionalStyles($conditionalStyles); + } + } + } + + $aKeys = array("sheet", "objects", "scenarios", "formatCells", "formatColumns", "formatRows", "insertColumns", "insertRows", "insertHyperlinks", "deleteColumns", "deleteRows", "selectLockedCells", "sort", "autoFilter", "pivotTables", "selectUnlockedCells"); + if (!$this->_readDataOnly && $xmlSheet && $xmlSheet->sheetProtection) { + foreach ($aKeys as $key) { + $method = "set" . ucfirst($key); + $docSheet->getProtection()->$method(self::boolean((string) $xmlSheet->sheetProtection[$key])); + } + } + + if (!$this->_readDataOnly && $xmlSheet && $xmlSheet->sheetProtection) { + $docSheet->getProtection()->setPassword((string) $xmlSheet->sheetProtection["password"], TRUE); + if ($xmlSheet->protectedRanges->protectedRange) { + foreach ($xmlSheet->protectedRanges->protectedRange as $protectedRange) { + $docSheet->protectCells((string) $protectedRange["sqref"], (string) $protectedRange["password"], true); + } + } + } + + if ($xmlSheet && $xmlSheet->autoFilter && !$this->_readDataOnly) { + $autoFilter = $docSheet->getAutoFilter(); + $autoFilter->setRange((string) $xmlSheet->autoFilter["ref"]); + foreach ($xmlSheet->autoFilter->filterColumn as $filterColumn) { + $column = $autoFilter->getColumnByOffset((integer) $filterColumn["colId"]); + // Check for standard filters + if ($filterColumn->filters) { + $column->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER); + $filters = $filterColumn->filters; + if ((isset($filters["blank"])) && ($filters["blank"] == 1)) { + $column->createRule()->setRule( + NULL, // Operator is undefined, but always treated as EQUAL + '' + ) + ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_FILTER); + } + // Standard filters are always an OR join, so no join rule needs to be set + // Entries can be either filter elements + foreach ($filters->filter as $filterRule) { + $column->createRule()->setRule( + NULL, // Operator is undefined, but always treated as EQUAL + (string) $filterRule["val"] + ) + ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_FILTER); + } + // Or Date Group elements + foreach ($filters->dateGroupItem as $dateGroupItem) { + $column->createRule()->setRule( + NULL, // Operator is undefined, but always treated as EQUAL + array( + 'year' => (string) $dateGroupItem["year"], + 'month' => (string) $dateGroupItem["month"], + 'day' => (string) $dateGroupItem["day"], + 'hour' => (string) $dateGroupItem["hour"], + 'minute' => (string) $dateGroupItem["minute"], + 'second' => (string) $dateGroupItem["second"], + ), + (string) $dateGroupItem["dateTimeGrouping"] + ) + ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP); + } + } + // Check for custom filters + if ($filterColumn->customFilters) { + $column->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER); + $customFilters = $filterColumn->customFilters; + // Custom filters can an AND or an OR join; + // and there should only ever be one or two entries + if ((isset($customFilters["and"])) && ($customFilters["and"] == 1)) { + $column->setJoin(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND); + } + foreach ($customFilters->customFilter as $filterRule) { + $column->createRule()->setRule( + (string) $filterRule["operator"], + (string) $filterRule["val"] + ) + ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER); + } + } + // Check for dynamic filters + if ($filterColumn->dynamicFilter) { + $column->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER); + // We should only ever have one dynamic filter + foreach ($filterColumn->dynamicFilter as $filterRule) { + $column->createRule()->setRule( + NULL, // Operator is undefined, but always treated as EQUAL + (string) $filterRule["val"], + (string) $filterRule["type"] + ) + ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER); + if (isset($filterRule["val"])) { + $column->setAttribute('val',(string) $filterRule["val"]); + } + if (isset($filterRule["maxVal"])) { + $column->setAttribute('maxVal',(string) $filterRule["maxVal"]); + } + } + } + // Check for dynamic filters + if ($filterColumn->top10) { + $column->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_TOPTENFILTER); + // We should only ever have one top10 filter + foreach ($filterColumn->top10 as $filterRule) { + $column->createRule()->setRule( + (((isset($filterRule["percent"])) && ($filterRule["percent"] == 1)) + ? PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT + : PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE + ), + (string) $filterRule["val"], + (((isset($filterRule["top"])) && ($filterRule["top"] == 1)) + ? PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP + : PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM + ) + ) + ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_TOPTENFILTER); + } + } + } + } + + if ($xmlSheet && $xmlSheet->mergeCells && $xmlSheet->mergeCells->mergeCell && !$this->_readDataOnly) { + foreach ($xmlSheet->mergeCells->mergeCell as $mergeCell) { + $mergeRef = (string) $mergeCell["ref"]; + if (strpos($mergeRef,':') !== FALSE) { + $docSheet->mergeCells((string) $mergeCell["ref"]); + } + } + } + + if ($xmlSheet && $xmlSheet->pageMargins && !$this->_readDataOnly) { + $docPageMargins = $docSheet->getPageMargins(); + $docPageMargins->setLeft(floatval($xmlSheet->pageMargins["left"])); + $docPageMargins->setRight(floatval($xmlSheet->pageMargins["right"])); + $docPageMargins->setTop(floatval($xmlSheet->pageMargins["top"])); + $docPageMargins->setBottom(floatval($xmlSheet->pageMargins["bottom"])); + $docPageMargins->setHeader(floatval($xmlSheet->pageMargins["header"])); + $docPageMargins->setFooter(floatval($xmlSheet->pageMargins["footer"])); + } + + if ($xmlSheet && $xmlSheet->pageSetup && !$this->_readDataOnly) { + $docPageSetup = $docSheet->getPageSetup(); + + if (isset($xmlSheet->pageSetup["orientation"])) { + $docPageSetup->setOrientation((string) $xmlSheet->pageSetup["orientation"]); + } + if (isset($xmlSheet->pageSetup["paperSize"])) { + $docPageSetup->setPaperSize(intval($xmlSheet->pageSetup["paperSize"])); + } + if (isset($xmlSheet->pageSetup["scale"])) { + $docPageSetup->setScale(intval($xmlSheet->pageSetup["scale"]), FALSE); + } + if (isset($xmlSheet->pageSetup["fitToHeight"]) && intval($xmlSheet->pageSetup["fitToHeight"]) >= 0) { + $docPageSetup->setFitToHeight(intval($xmlSheet->pageSetup["fitToHeight"]), FALSE); + } + if (isset($xmlSheet->pageSetup["fitToWidth"]) && intval($xmlSheet->pageSetup["fitToWidth"]) >= 0) { + $docPageSetup->setFitToWidth(intval($xmlSheet->pageSetup["fitToWidth"]), FALSE); + } + if (isset($xmlSheet->pageSetup["firstPageNumber"]) && isset($xmlSheet->pageSetup["useFirstPageNumber"]) && + self::boolean((string) $xmlSheet->pageSetup["useFirstPageNumber"])) { + $docPageSetup->setFirstPageNumber(intval($xmlSheet->pageSetup["firstPageNumber"])); + } + } + + if ($xmlSheet && $xmlSheet->headerFooter && !$this->_readDataOnly) { + $docHeaderFooter = $docSheet->getHeaderFooter(); + + if (isset($xmlSheet->headerFooter["differentOddEven"]) && + self::boolean((string)$xmlSheet->headerFooter["differentOddEven"])) { + $docHeaderFooter->setDifferentOddEven(TRUE); + } else { + $docHeaderFooter->setDifferentOddEven(FALSE); + } + if (isset($xmlSheet->headerFooter["differentFirst"]) && + self::boolean((string)$xmlSheet->headerFooter["differentFirst"])) { + $docHeaderFooter->setDifferentFirst(TRUE); + } else { + $docHeaderFooter->setDifferentFirst(FALSE); + } + if (isset($xmlSheet->headerFooter["scaleWithDoc"]) && + !self::boolean((string)$xmlSheet->headerFooter["scaleWithDoc"])) { + $docHeaderFooter->setScaleWithDocument(FALSE); + } else { + $docHeaderFooter->setScaleWithDocument(TRUE); + } + if (isset($xmlSheet->headerFooter["alignWithMargins"]) && + !self::boolean((string)$xmlSheet->headerFooter["alignWithMargins"])) { + $docHeaderFooter->setAlignWithMargins(FALSE); + } else { + $docHeaderFooter->setAlignWithMargins(TRUE); + } + + $docHeaderFooter->setOddHeader((string) $xmlSheet->headerFooter->oddHeader); + $docHeaderFooter->setOddFooter((string) $xmlSheet->headerFooter->oddFooter); + $docHeaderFooter->setEvenHeader((string) $xmlSheet->headerFooter->evenHeader); + $docHeaderFooter->setEvenFooter((string) $xmlSheet->headerFooter->evenFooter); + $docHeaderFooter->setFirstHeader((string) $xmlSheet->headerFooter->firstHeader); + $docHeaderFooter->setFirstFooter((string) $xmlSheet->headerFooter->firstFooter); + } + + if ($xmlSheet && $xmlSheet->rowBreaks && $xmlSheet->rowBreaks->brk && !$this->_readDataOnly) { + foreach ($xmlSheet->rowBreaks->brk as $brk) { + if ($brk["man"]) { + $docSheet->setBreak("A$brk[id]", PHPExcel_Worksheet::BREAK_ROW); + } + } + } + if ($xmlSheet && $xmlSheet->colBreaks && $xmlSheet->colBreaks->brk && !$this->_readDataOnly) { + foreach ($xmlSheet->colBreaks->brk as $brk) { + if ($brk["man"]) { + $docSheet->setBreak(PHPExcel_Cell::stringFromColumnIndex((string) $brk["id"]) . "1", PHPExcel_Worksheet::BREAK_COLUMN); + } + } + } + + if ($xmlSheet && $xmlSheet->dataValidations && !$this->_readDataOnly) { + foreach ($xmlSheet->dataValidations->dataValidation as $dataValidation) { + // Uppercase coordinate + $range = strtoupper($dataValidation["sqref"]); + $rangeSet = explode(' ',$range); + foreach($rangeSet as $range) { + $stRange = $docSheet->shrinkRangeToFit($range); + + // Extract all cell references in $range + $aReferences = PHPExcel_Cell::extractAllCellReferencesInRange($stRange); + foreach ($aReferences as $reference) { + // Create validation + $docValidation = $docSheet->getCell($reference)->getDataValidation(); + $docValidation->setType((string) $dataValidation["type"]); + $docValidation->setErrorStyle((string) $dataValidation["errorStyle"]); + $docValidation->setOperator((string) $dataValidation["operator"]); + $docValidation->setAllowBlank($dataValidation["allowBlank"] != 0); + $docValidation->setShowDropDown($dataValidation["showDropDown"] == 0); + $docValidation->setShowInputMessage($dataValidation["showInputMessage"] != 0); + $docValidation->setShowErrorMessage($dataValidation["showErrorMessage"] != 0); + $docValidation->setErrorTitle((string) $dataValidation["errorTitle"]); + $docValidation->setError((string) $dataValidation["error"]); + $docValidation->setPromptTitle((string) $dataValidation["promptTitle"]); + $docValidation->setPrompt((string) $dataValidation["prompt"]); + $docValidation->setFormula1((string) $dataValidation->formula1); + $docValidation->setFormula2((string) $dataValidation->formula2); + } + } + } + } + + // Add hyperlinks + $hyperlinks = array(); + if (!$this->_readDataOnly) { + // Locate hyperlink relations + if ($zip->locateName(dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels")) { + $relsWorksheet = simplexml_load_string($this->_getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels") , 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + foreach ($relsWorksheet->Relationship as $ele) { + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink") { + $hyperlinks[(string)$ele["Id"]] = (string)$ele["Target"]; + } + } + } + + // Loop through hyperlinks + if ($xmlSheet && $xmlSheet->hyperlinks) { + foreach ($xmlSheet->hyperlinks->hyperlink as $hyperlink) { + // Link url + $linkRel = $hyperlink->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + + foreach (PHPExcel_Cell::extractAllCellReferencesInRange($hyperlink['ref']) as $cellReference) { + $cell = $docSheet->getCell( $cellReference ); + if (isset($linkRel['id'])) { + $hyperlinkUrl = $hyperlinks[ (string)$linkRel['id'] ]; + if (isset($hyperlink['location'])) { + $hyperlinkUrl .= '#' . (string) $hyperlink['location']; + } + $cell->getHyperlink()->setUrl($hyperlinkUrl); + } elseif (isset($hyperlink['location'])) { + $cell->getHyperlink()->setUrl( 'sheet://' . (string)$hyperlink['location'] ); + } + + // Tooltip + if (isset($hyperlink['tooltip'])) { + $cell->getHyperlink()->setTooltip( (string)$hyperlink['tooltip'] ); + } + } + } + } + } + + // Add comments + $comments = array(); + $vmlComments = array(); + if (!$this->_readDataOnly) { + // Locate comment relations + if ($zip->locateName(dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels")) { + $relsWorksheet = simplexml_load_string($this->_getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels") , 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + foreach ($relsWorksheet->Relationship as $ele) { + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments") { + $comments[(string)$ele["Id"]] = (string)$ele["Target"]; + } + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing") { + $vmlComments[(string)$ele["Id"]] = (string)$ele["Target"]; + } + } + } + + // Loop through comments + foreach ($comments as $relName => $relPath) { + // Load comments file + $relPath = PHPExcel_Shared_File::realpath(dirname("$dir/$fileWorksheet") . "/" . $relPath); + $commentsFile = simplexml_load_string($this->_getFromZipArchive($zip, $relPath) , 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + + // Utility variables + $authors = array(); + + // Loop through authors + foreach ($commentsFile->authors->author as $author) { + $authors[] = (string)$author; + } + + // Loop through contents + foreach ($commentsFile->commentList->comment as $comment) { + $docSheet->getComment( (string)$comment['ref'] )->setAuthor( $authors[(string)$comment['authorId']] ); + $docSheet->getComment( (string)$comment['ref'] )->setText( $this->_parseRichText($comment->text) ); + } + } + + // Loop through VML comments + foreach ($vmlComments as $relName => $relPath) { + // Load VML comments file + $relPath = PHPExcel_Shared_File::realpath(dirname("$dir/$fileWorksheet") . "/" . $relPath); + $vmlCommentsFile = simplexml_load_string( $this->_getFromZipArchive($zip, $relPath) , 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $vmlCommentsFile->registerXPathNamespace('v', 'urn:schemas-microsoft-com:vml'); + + $shapes = $vmlCommentsFile->xpath('//v:shape'); + foreach ($shapes as $shape) { + $shape->registerXPathNamespace('v', 'urn:schemas-microsoft-com:vml'); + + if (isset($shape['style'])) { + $style = (string)$shape['style']; + $fillColor = strtoupper( substr( (string)$shape['fillcolor'], 1 ) ); + $column = null; + $row = null; + + $clientData = $shape->xpath('.//x:ClientData'); + if (is_array($clientData) && !empty($clientData)) { + $clientData = $clientData[0]; + + if ( isset($clientData['ObjectType']) && (string)$clientData['ObjectType'] == 'Note' ) { + $temp = $clientData->xpath('.//x:Row'); + if (is_array($temp)) $row = $temp[0]; + + $temp = $clientData->xpath('.//x:Column'); + if (is_array($temp)) $column = $temp[0]; + } + } + + if (($column !== NULL) && ($row !== NULL)) { + // Set comment properties + $comment = $docSheet->getCommentByColumnAndRow((string) $column, $row + 1); + $comment->getFillColor()->setRGB( $fillColor ); + + // Parse style + $styleArray = explode(';', str_replace(' ', '', $style)); + foreach ($styleArray as $stylePair) { + $stylePair = explode(':', $stylePair); + + if ($stylePair[0] == 'margin-left') $comment->setMarginLeft($stylePair[1]); + if ($stylePair[0] == 'margin-top') $comment->setMarginTop($stylePair[1]); + if ($stylePair[0] == 'width') $comment->setWidth($stylePair[1]); + if ($stylePair[0] == 'height') $comment->setHeight($stylePair[1]); + if ($stylePair[0] == 'visibility') $comment->setVisible( $stylePair[1] == 'visible' ); + + } + } + } + } + } + + // Header/footer images + if ($xmlSheet && $xmlSheet->legacyDrawingHF && !$this->_readDataOnly) { + if ($zip->locateName(dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels")) { + $relsWorksheet = simplexml_load_string($this->_getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels") , 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + $vmlRelationship = ''; + + foreach ($relsWorksheet->Relationship as $ele) { + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing") { + $vmlRelationship = self::dir_add("$dir/$fileWorksheet", $ele["Target"]); + } + } + + if ($vmlRelationship != '') { + // Fetch linked images + $relsVML = simplexml_load_string($this->_getFromZipArchive($zip, dirname($vmlRelationship) . '/_rels/' . basename($vmlRelationship) . '.rels' ), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + $drawings = array(); + foreach ($relsVML->Relationship as $ele) { + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image") { + $drawings[(string) $ele["Id"]] = self::dir_add($vmlRelationship, $ele["Target"]); + } + } + + // Fetch VML document + $vmlDrawing = simplexml_load_string($this->_getFromZipArchive($zip, $vmlRelationship), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $vmlDrawing->registerXPathNamespace('v', 'urn:schemas-microsoft-com:vml'); + + $hfImages = array(); + + $shapes = $vmlDrawing->xpath('//v:shape'); + foreach ($shapes as $idx => $shape) { + $shape->registerXPathNamespace('v', 'urn:schemas-microsoft-com:vml'); + $imageData = $shape->xpath('//v:imagedata'); + $imageData = $imageData[$idx]; + + $imageData = $imageData->attributes('urn:schemas-microsoft-com:office:office'); + $style = self::toCSSArray( (string)$shape['style'] ); + + $hfImages[ (string)$shape['id'] ] = new PHPExcel_Worksheet_HeaderFooterDrawing(); + if (isset($imageData['title'])) { + $hfImages[ (string)$shape['id'] ]->setName( (string)$imageData['title'] ); + } + + $hfImages[ (string)$shape['id'] ]->setPath("zip://".PHPExcel_Shared_File::realpath($pFilename)."#" . $drawings[(string)$imageData['relid']], false); + $hfImages[ (string)$shape['id'] ]->setResizeProportional(false); + $hfImages[ (string)$shape['id'] ]->setWidth($style['width']); + $hfImages[ (string)$shape['id'] ]->setHeight($style['height']); + if (isset($style['margin-left'])) { + $hfImages[ (string)$shape['id'] ]->setOffsetX($style['margin-left']); + } + $hfImages[ (string)$shape['id'] ]->setOffsetY($style['margin-top']); + $hfImages[ (string)$shape['id'] ]->setResizeProportional(true); + } + + $docSheet->getHeaderFooter()->setImages($hfImages); + } + } + } + + } + + // TODO: Autoshapes from twoCellAnchors! + if ($zip->locateName(dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels")) { + $relsWorksheet = simplexml_load_string($this->_getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . "/_rels/" . basename($fileWorksheet) . ".rels") , 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + $drawings = array(); + foreach ($relsWorksheet->Relationship as $ele) { + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing") { + $drawings[(string) $ele["Id"]] = self::dir_add("$dir/$fileWorksheet", $ele["Target"]); + } + } + if ($xmlSheet->drawing && !$this->_readDataOnly) { + foreach ($xmlSheet->drawing as $drawing) { + $fileDrawing = $drawings[(string) self::array_item($drawing->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "id")]; + $relsDrawing = simplexml_load_string($this->_getFromZipArchive($zip, dirname($fileDrawing) . "/_rels/" . basename($fileDrawing) . ".rels") , 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + $images = array(); + + if ($relsDrawing && $relsDrawing->Relationship) { + foreach ($relsDrawing->Relationship as $ele) { + if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image") { + $images[(string) $ele["Id"]] = self::dir_add($fileDrawing, $ele["Target"]); + } elseif ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart") { + if ($this->_includeCharts) { + $charts[self::dir_add($fileDrawing, $ele["Target"])] = array('id' => (string) $ele["Id"], + 'sheet' => $docSheet->getTitle() + ); + } + } + } + } + $xmlDrawing = simplexml_load_string($this->_getFromZipArchive($zip, $fileDrawing), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions())->children("http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"); + + if ($xmlDrawing->oneCellAnchor) { + foreach ($xmlDrawing->oneCellAnchor as $oneCellAnchor) { + if ($oneCellAnchor->pic->blipFill) { + $blip = $oneCellAnchor->pic->blipFill->children("http://schemas.openxmlformats.org/drawingml/2006/main")->blip; + $xfrm = $oneCellAnchor->pic->spPr->children("http://schemas.openxmlformats.org/drawingml/2006/main")->xfrm; + $outerShdw = $oneCellAnchor->pic->spPr->children("http://schemas.openxmlformats.org/drawingml/2006/main")->effectLst->outerShdw; + $objDrawing = new PHPExcel_Worksheet_Drawing; + $objDrawing->setName((string) self::array_item($oneCellAnchor->pic->nvPicPr->cNvPr->attributes(), "name")); + $objDrawing->setDescription((string) self::array_item($oneCellAnchor->pic->nvPicPr->cNvPr->attributes(), "descr")); + $objDrawing->setPath("zip://".PHPExcel_Shared_File::realpath($pFilename)."#" . $images[(string) self::array_item($blip->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "embed")], false); + $objDrawing->setCoordinates(PHPExcel_Cell::stringFromColumnIndex((string) $oneCellAnchor->from->col) . ($oneCellAnchor->from->row + 1)); + $objDrawing->setOffsetX(PHPExcel_Shared_Drawing::EMUToPixels($oneCellAnchor->from->colOff)); + $objDrawing->setOffsetY(PHPExcel_Shared_Drawing::EMUToPixels($oneCellAnchor->from->rowOff)); + $objDrawing->setResizeProportional(false); + $objDrawing->setWidth(PHPExcel_Shared_Drawing::EMUToPixels(self::array_item($oneCellAnchor->ext->attributes(), "cx"))); + $objDrawing->setHeight(PHPExcel_Shared_Drawing::EMUToPixels(self::array_item($oneCellAnchor->ext->attributes(), "cy"))); + if ($xfrm) { + $objDrawing->setRotation(PHPExcel_Shared_Drawing::angleToDegrees(self::array_item($xfrm->attributes(), "rot"))); + } + if ($outerShdw) { + $shadow = $objDrawing->getShadow(); + $shadow->setVisible(true); + $shadow->setBlurRadius(PHPExcel_Shared_Drawing::EMUTopixels(self::array_item($outerShdw->attributes(), "blurRad"))); + $shadow->setDistance(PHPExcel_Shared_Drawing::EMUTopixels(self::array_item($outerShdw->attributes(), "dist"))); + $shadow->setDirection(PHPExcel_Shared_Drawing::angleToDegrees(self::array_item($outerShdw->attributes(), "dir"))); + $shadow->setAlignment((string) self::array_item($outerShdw->attributes(), "algn")); + $shadow->getColor()->setRGB(self::array_item($outerShdw->srgbClr->attributes(), "val")); + $shadow->setAlpha(self::array_item($outerShdw->srgbClr->alpha->attributes(), "val") / 1000); + } + $objDrawing->setWorksheet($docSheet); + } else { + // ? Can charts be positioned with a oneCellAnchor ? + $coordinates = PHPExcel_Cell::stringFromColumnIndex((string) $oneCellAnchor->from->col) . ($oneCellAnchor->from->row + 1); + $offsetX = PHPExcel_Shared_Drawing::EMUToPixels($oneCellAnchor->from->colOff); + $offsetY = PHPExcel_Shared_Drawing::EMUToPixels($oneCellAnchor->from->rowOff); + $width = PHPExcel_Shared_Drawing::EMUToPixels(self::array_item($oneCellAnchor->ext->attributes(), "cx")); + $height = PHPExcel_Shared_Drawing::EMUToPixels(self::array_item($oneCellAnchor->ext->attributes(), "cy")); + } + } + } + if ($xmlDrawing->twoCellAnchor) { + foreach ($xmlDrawing->twoCellAnchor as $twoCellAnchor) { + if ($twoCellAnchor->pic->blipFill) { + $blip = $twoCellAnchor->pic->blipFill->children("http://schemas.openxmlformats.org/drawingml/2006/main")->blip; + $xfrm = $twoCellAnchor->pic->spPr->children("http://schemas.openxmlformats.org/drawingml/2006/main")->xfrm; + $outerShdw = $twoCellAnchor->pic->spPr->children("http://schemas.openxmlformats.org/drawingml/2006/main")->effectLst->outerShdw; + $objDrawing = new PHPExcel_Worksheet_Drawing; + $objDrawing->setName((string) self::array_item($twoCellAnchor->pic->nvPicPr->cNvPr->attributes(), "name")); + $objDrawing->setDescription((string) self::array_item($twoCellAnchor->pic->nvPicPr->cNvPr->attributes(), "descr")); + $objDrawing->setPath("zip://".PHPExcel_Shared_File::realpath($pFilename)."#" . $images[(string) self::array_item($blip->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "embed")], false); + $objDrawing->setCoordinates(PHPExcel_Cell::stringFromColumnIndex((string) $twoCellAnchor->from->col) . ($twoCellAnchor->from->row + 1)); + $objDrawing->setOffsetX(PHPExcel_Shared_Drawing::EMUToPixels($twoCellAnchor->from->colOff)); + $objDrawing->setOffsetY(PHPExcel_Shared_Drawing::EMUToPixels($twoCellAnchor->from->rowOff)); + $objDrawing->setResizeProportional(false); + + $objDrawing->setWidth(PHPExcel_Shared_Drawing::EMUToPixels(self::array_item($xfrm->ext->attributes(), "cx"))); + $objDrawing->setHeight(PHPExcel_Shared_Drawing::EMUToPixels(self::array_item($xfrm->ext->attributes(), "cy"))); + + if ($xfrm) { + $objDrawing->setRotation(PHPExcel_Shared_Drawing::angleToDegrees(self::array_item($xfrm->attributes(), "rot"))); + } + if ($outerShdw) { + $shadow = $objDrawing->getShadow(); + $shadow->setVisible(true); + $shadow->setBlurRadius(PHPExcel_Shared_Drawing::EMUTopixels(self::array_item($outerShdw->attributes(), "blurRad"))); + $shadow->setDistance(PHPExcel_Shared_Drawing::EMUTopixels(self::array_item($outerShdw->attributes(), "dist"))); + $shadow->setDirection(PHPExcel_Shared_Drawing::angleToDegrees(self::array_item($outerShdw->attributes(), "dir"))); + $shadow->setAlignment((string) self::array_item($outerShdw->attributes(), "algn")); + $shadow->getColor()->setRGB(self::array_item($outerShdw->srgbClr->attributes(), "val")); + $shadow->setAlpha(self::array_item($outerShdw->srgbClr->alpha->attributes(), "val") / 1000); + } + $objDrawing->setWorksheet($docSheet); + } elseif(($this->_includeCharts) && ($twoCellAnchor->graphicFrame)) { + $fromCoordinate = PHPExcel_Cell::stringFromColumnIndex((string) $twoCellAnchor->from->col) . ($twoCellAnchor->from->row + 1); + $fromOffsetX = PHPExcel_Shared_Drawing::EMUToPixels($twoCellAnchor->from->colOff); + $fromOffsetY = PHPExcel_Shared_Drawing::EMUToPixels($twoCellAnchor->from->rowOff); + $toCoordinate = PHPExcel_Cell::stringFromColumnIndex((string) $twoCellAnchor->to->col) . ($twoCellAnchor->to->row + 1); + $toOffsetX = PHPExcel_Shared_Drawing::EMUToPixels($twoCellAnchor->to->colOff); + $toOffsetY = PHPExcel_Shared_Drawing::EMUToPixels($twoCellAnchor->to->rowOff); + $graphic = $twoCellAnchor->graphicFrame->children("http://schemas.openxmlformats.org/drawingml/2006/main")->graphic; + $chartRef = $graphic->graphicData->children("http://schemas.openxmlformats.org/drawingml/2006/chart")->chart; + $thisChart = (string) $chartRef->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"); + + $chartDetails[$docSheet->getTitle().'!'.$thisChart] = + array( 'fromCoordinate' => $fromCoordinate, + 'fromOffsetX' => $fromOffsetX, + 'fromOffsetY' => $fromOffsetY, + 'toCoordinate' => $toCoordinate, + 'toOffsetX' => $toOffsetX, + 'toOffsetY' => $toOffsetY, + 'worksheetTitle' => $docSheet->getTitle() + ); + } + } + } + + } + } + } + + // Loop through definedNames + if ($xmlWorkbook->definedNames) { + foreach ($xmlWorkbook->definedNames->definedName as $definedName) { + // Extract range + $extractedRange = (string)$definedName; + $extractedRange = preg_replace('/\'(\w+)\'\!/', '', $extractedRange); + if (($spos = strpos($extractedRange,'!')) !== false) { + $extractedRange = substr($extractedRange,0,$spos).str_replace('$', '', substr($extractedRange,$spos)); + } else { + $extractedRange = str_replace('$', '', $extractedRange); + } + + // Valid range? + if (stripos((string)$definedName, '#REF!') !== FALSE || $extractedRange == '') { + continue; + } + + // Some definedNames are only applicable if we are on the same sheet... + if ((string)$definedName['localSheetId'] != '' && (string)$definedName['localSheetId'] == $sheetId) { + // Switch on type + switch ((string)$definedName['name']) { + + case '_xlnm._FilterDatabase': + if ((string)$definedName['hidden'] !== '1') { + $docSheet->getAutoFilter()->setRange($extractedRange); + } + break; + + case '_xlnm.Print_Titles': + // Split $extractedRange + $extractedRange = explode(',', $extractedRange); + + // Set print titles + foreach ($extractedRange as $range) { + $matches = array(); + $range = str_replace('$', '', $range); + + // check for repeating columns, e g. 'A:A' or 'A:D' + if (preg_match('/!?([A-Z]+)\:([A-Z]+)$/', $range, $matches)) { + $docSheet->getPageSetup()->setColumnsToRepeatAtLeft(array($matches[1], $matches[2])); + } + // check for repeating rows, e.g. '1:1' or '1:5' + elseif (preg_match('/!?(\d+)\:(\d+)$/', $range, $matches)) { + $docSheet->getPageSetup()->setRowsToRepeatAtTop(array($matches[1], $matches[2])); + } + } + break; + + case '_xlnm.Print_Area': + $rangeSets = explode(',', $extractedRange); // FIXME: what if sheetname contains comma? + $newRangeSets = array(); + foreach($rangeSets as $rangeSet) { + $range = explode('!', $rangeSet); // FIXME: what if sheetname contains exclamation mark? + $rangeSet = isset($range[1]) ? $range[1] : $range[0]; + if (strpos($rangeSet, ':') === FALSE) { + $rangeSet = $rangeSet . ':' . $rangeSet; + } + $newRangeSets[] = str_replace('$', '', $rangeSet); + } + $docSheet->getPageSetup()->setPrintArea(implode(',',$newRangeSets)); + break; + + default: + break; + } + } + } + } + + // Next sheet id + ++$sheetId; + } + + // Loop through definedNames + if ($xmlWorkbook->definedNames) { + foreach ($xmlWorkbook->definedNames->definedName as $definedName) { + // Extract range + $extractedRange = (string)$definedName; + $extractedRange = preg_replace('/\'(\w+)\'\!/', '', $extractedRange); + if (($spos = strpos($extractedRange,'!')) !== false) { + $extractedRange = substr($extractedRange,0,$spos).str_replace('$', '', substr($extractedRange,$spos)); + } else { + $extractedRange = str_replace('$', '', $extractedRange); + } + + // Valid range? + if (stripos((string)$definedName, '#REF!') !== false || $extractedRange == '') { + continue; + } + + // Some definedNames are only applicable if we are on the same sheet... + if ((string)$definedName['localSheetId'] != '') { + // Local defined name + // Switch on type + switch ((string)$definedName['name']) { + + case '_xlnm._FilterDatabase': + case '_xlnm.Print_Titles': + case '_xlnm.Print_Area': + break; + + default: + if ($mapSheetId[(integer) $definedName['localSheetId']] !== null) { + $range = explode('!', (string)$definedName); + if (count($range) == 2) { + $range[0] = str_replace("''", "'", $range[0]); + $range[0] = str_replace("'", "", $range[0]); + if ($worksheet = $docSheet->getParent()->getSheetByName($range[0])) { + $extractedRange = str_replace('$', '', $range[1]); + $scope = $docSheet->getParent()->getSheet($mapSheetId[(integer) $definedName['localSheetId']]); + $excel->addNamedRange( new PHPExcel_NamedRange((string)$definedName['name'], $worksheet, $extractedRange, true, $scope) ); + } + } + } + break; + } + } else if (!isset($definedName['localSheetId'])) { + // "Global" definedNames + $locatedSheet = null; + $extractedSheetName = ''; + if (strpos( (string)$definedName, '!' ) !== false) { + // Extract sheet name + $extractedSheetName = PHPExcel_Worksheet::extractSheetTitle( (string)$definedName, true ); + $extractedSheetName = $extractedSheetName[0]; + + // Locate sheet + $locatedSheet = $excel->getSheetByName($extractedSheetName); + + // Modify range + $range = explode('!', $extractedRange); + $extractedRange = isset($range[1]) ? $range[1] : $range[0]; + } + + if ($locatedSheet !== NULL) { + $excel->addNamedRange( new PHPExcel_NamedRange((string)$definedName['name'], $locatedSheet, $extractedRange, false) ); + } + } + } + } + } + + if ((!$this->_readDataOnly) || (!empty($this->_loadSheetsOnly))) { + // active sheet index + $activeTab = intval($xmlWorkbook->bookViews->workbookView["activeTab"]); // refers to old sheet index + + // keep active sheet index if sheet is still loaded, else first sheet is set as the active + if (isset($mapSheetId[$activeTab]) && $mapSheetId[$activeTab] !== null) { + $excel->setActiveSheetIndex($mapSheetId[$activeTab]); + } else { + if ($excel->getSheetCount() == 0) { + $excel->createSheet(); + } + $excel->setActiveSheetIndex(0); + } + } + break; + } + + } + + + if (!$this->_readDataOnly) { + $contentTypes = simplexml_load_string($this->_getFromZipArchive($zip, "[Content_Types].xml"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + foreach ($contentTypes->Override as $contentType) { + switch ($contentType["ContentType"]) { + case "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": + if ($this->_includeCharts) { + $chartEntryRef = ltrim($contentType['PartName'],'/'); + $chartElements = simplexml_load_string($this->_getFromZipArchive($zip, $chartEntryRef), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $objChart = PHPExcel_Reader_Excel2007_Chart::readChart($chartElements,basename($chartEntryRef,'.xml')); + +// echo 'Chart ',$chartEntryRef,'
'; +// var_dump($charts[$chartEntryRef]); +// + if (isset($charts[$chartEntryRef])) { + $chartPositionRef = $charts[$chartEntryRef]['sheet'].'!'.$charts[$chartEntryRef]['id']; +// echo 'Position Ref ',$chartPositionRef,'
'; + if (isset($chartDetails[$chartPositionRef])) { +// var_dump($chartDetails[$chartPositionRef]); + + $excel->getSheetByName($charts[$chartEntryRef]['sheet'])->addChart($objChart); + $objChart->setWorksheet($excel->getSheetByName($charts[$chartEntryRef]['sheet'])); + $objChart->setTopLeftPosition( $chartDetails[$chartPositionRef]['fromCoordinate'], + $chartDetails[$chartPositionRef]['fromOffsetX'], + $chartDetails[$chartPositionRef]['fromOffsetY'] + ); + $objChart->setBottomRightPosition( $chartDetails[$chartPositionRef]['toCoordinate'], + $chartDetails[$chartPositionRef]['toOffsetX'], + $chartDetails[$chartPositionRef]['toOffsetY'] + ); + } + } + } + } + } + } + + $zip->close(); + + return $excel; + } + + + private static function _readColor($color, $background=FALSE) { + if (isset($color["rgb"])) { + return (string)$color["rgb"]; + } else if (isset($color["indexed"])) { + return PHPExcel_Style_Color::indexedColor($color["indexed"]-7,$background)->getARGB(); + } else if (isset($color["theme"])) { + if (self::$_theme !== NULL) { + $returnColour = self::$_theme->getColourByIndex((int)$color["theme"]); + if (isset($color["tint"])) { + $tintAdjust = (float) $color["tint"]; + $returnColour = PHPExcel_Style_Color::changeBrightness($returnColour, $tintAdjust); + } + return 'FF'.$returnColour; + } + } + + if ($background) { + return 'FFFFFFFF'; + } + return 'FF000000'; + } + + + private static function _readStyle($docStyle, $style) { + // format code +// if (isset($style->numFmt)) { +// if (isset($style->numFmt['formatCode'])) { +// $docStyle->getNumberFormat()->setFormatCode((string) $style->numFmt['formatCode']); +// } else { + $docStyle->getNumberFormat()->setFormatCode($style->numFmt); +// } +// } + + // font + if (isset($style->font)) { + $docStyle->getFont()->setName((string) $style->font->name["val"]); + $docStyle->getFont()->setSize((string) $style->font->sz["val"]); + if (isset($style->font->b)) { + $docStyle->getFont()->setBold(!isset($style->font->b["val"]) || self::boolean((string) $style->font->b["val"])); + } + if (isset($style->font->i)) { + $docStyle->getFont()->setItalic(!isset($style->font->i["val"]) || self::boolean((string) $style->font->i["val"])); + } + if (isset($style->font->strike)) { + $docStyle->getFont()->setStrikethrough(!isset($style->font->strike["val"]) || self::boolean((string) $style->font->strike["val"])); + } + $docStyle->getFont()->getColor()->setARGB(self::_readColor($style->font->color)); + + if (isset($style->font->u) && !isset($style->font->u["val"])) { + $docStyle->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); + } else if (isset($style->font->u) && isset($style->font->u["val"])) { + $docStyle->getFont()->setUnderline((string)$style->font->u["val"]); + } + + if (isset($style->font->vertAlign) && isset($style->font->vertAlign["val"])) { + $vertAlign = strtolower((string)$style->font->vertAlign["val"]); + if ($vertAlign == 'superscript') { + $docStyle->getFont()->setSuperScript(true); + } + if ($vertAlign == 'subscript') { + $docStyle->getFont()->setSubScript(true); + } + } + } + + // fill + if (isset($style->fill)) { + if ($style->fill->gradientFill) { + $gradientFill = $style->fill->gradientFill[0]; + if(!empty($gradientFill["type"])) { + $docStyle->getFill()->setFillType((string) $gradientFill["type"]); + } + $docStyle->getFill()->setRotation(floatval($gradientFill["degree"])); + $gradientFill->registerXPathNamespace("sml", "http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + $docStyle->getFill()->getStartColor()->setARGB(self::_readColor( self::array_item($gradientFill->xpath("sml:stop[@position=0]"))->color) ); + $docStyle->getFill()->getEndColor()->setARGB(self::_readColor( self::array_item($gradientFill->xpath("sml:stop[@position=1]"))->color) ); + } elseif ($style->fill->patternFill) { + $patternType = (string)$style->fill->patternFill["patternType"] != '' ? (string)$style->fill->patternFill["patternType"] : 'solid'; + $docStyle->getFill()->setFillType($patternType); + if ($style->fill->patternFill->fgColor) { + $docStyle->getFill()->getStartColor()->setARGB(self::_readColor($style->fill->patternFill->fgColor,true)); + } else { + $docStyle->getFill()->getStartColor()->setARGB('FF000000'); + } + if ($style->fill->patternFill->bgColor) { + $docStyle->getFill()->getEndColor()->setARGB(self::_readColor($style->fill->patternFill->bgColor,true)); + } + } + } + + // border + if (isset($style->border)) { + $diagonalUp = self::boolean((string) $style->border["diagonalUp"]); + $diagonalDown = self::boolean((string) $style->border["diagonalDown"]); + if (!$diagonalUp && !$diagonalDown) { + $docStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_NONE); + } elseif ($diagonalUp && !$diagonalDown) { + $docStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_UP); + } elseif (!$diagonalUp && $diagonalDown) { + $docStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_DOWN); + } else { + $docStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_BOTH); + } + self::_readBorder($docStyle->getBorders()->getLeft(), $style->border->left); + self::_readBorder($docStyle->getBorders()->getRight(), $style->border->right); + self::_readBorder($docStyle->getBorders()->getTop(), $style->border->top); + self::_readBorder($docStyle->getBorders()->getBottom(), $style->border->bottom); + self::_readBorder($docStyle->getBorders()->getDiagonal(), $style->border->diagonal); + } + + // alignment + if (isset($style->alignment)) { + $docStyle->getAlignment()->setHorizontal((string) $style->alignment["horizontal"]); + $docStyle->getAlignment()->setVertical((string) $style->alignment["vertical"]); + + $textRotation = 0; + if ((int)$style->alignment["textRotation"] <= 90) { + $textRotation = (int)$style->alignment["textRotation"]; + } else if ((int)$style->alignment["textRotation"] > 90) { + $textRotation = 90 - (int)$style->alignment["textRotation"]; + } + + $docStyle->getAlignment()->setTextRotation(intval($textRotation)); + $docStyle->getAlignment()->setWrapText(self::boolean((string) $style->alignment["wrapText"])); + $docStyle->getAlignment()->setShrinkToFit(self::boolean((string) $style->alignment["shrinkToFit"])); + $docStyle->getAlignment()->setIndent( intval((string)$style->alignment["indent"]) > 0 ? intval((string)$style->alignment["indent"]) : 0 ); + } + + // protection + if (isset($style->protection)) { + if (isset($style->protection['locked'])) { + if (self::boolean((string) $style->protection['locked'])) { + $docStyle->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_PROTECTED); + } else { + $docStyle->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED); + } + } + + if (isset($style->protection['hidden'])) { + if (self::boolean((string) $style->protection['hidden'])) { + $docStyle->getProtection()->setHidden(PHPExcel_Style_Protection::PROTECTION_PROTECTED); + } else { + $docStyle->getProtection()->setHidden(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED); + } + } + } + + // top-level style settings + if (isset($style->quotePrefix)) { + $docStyle->setQuotePrefix($style->quotePrefix); + } + } + + + private static function _readBorder($docBorder, $eleBorder) { + if (isset($eleBorder["style"])) { + $docBorder->setBorderStyle((string) $eleBorder["style"]); + } + if (isset($eleBorder->color)) { + $docBorder->getColor()->setARGB(self::_readColor($eleBorder->color)); + } + } + + + private function _parseRichText($is = null) { + $value = new PHPExcel_RichText(); + + if (isset($is->t)) { + $value->createText( PHPExcel_Shared_String::ControlCharacterOOXML2PHP( (string) $is->t ) ); + } else { + foreach ($is->r as $run) { + if (!isset($run->rPr)) { + $objText = $value->createText( PHPExcel_Shared_String::ControlCharacterOOXML2PHP( (string) $run->t ) ); + + } else { + $objText = $value->createTextRun( PHPExcel_Shared_String::ControlCharacterOOXML2PHP( (string) $run->t ) ); + + if (isset($run->rPr->rFont["val"])) { + $objText->getFont()->setName((string) $run->rPr->rFont["val"]); + } + + if (isset($run->rPr->sz["val"])) { + $objText->getFont()->setSize((string) $run->rPr->sz["val"]); + } + + if (isset($run->rPr->color)) { + $objText->getFont()->setColor( new PHPExcel_Style_Color( self::_readColor($run->rPr->color) ) ); + } + + if ((isset($run->rPr->b["val"]) && self::boolean((string) $run->rPr->b["val"])) || + (isset($run->rPr->b) && !isset($run->rPr->b["val"]))) { + $objText->getFont()->setBold(TRUE); + } + + if ((isset($run->rPr->i["val"]) && self::boolean((string) $run->rPr->i["val"])) || + (isset($run->rPr->i) && !isset($run->rPr->i["val"]))) { + $objText->getFont()->setItalic(TRUE); + } + + if (isset($run->rPr->vertAlign) && isset($run->rPr->vertAlign["val"])) { + $vertAlign = strtolower((string)$run->rPr->vertAlign["val"]); + if ($vertAlign == 'superscript') { + $objText->getFont()->setSuperScript(TRUE); + } + if ($vertAlign == 'subscript') { + $objText->getFont()->setSubScript(TRUE); + } + } + + if (isset($run->rPr->u) && !isset($run->rPr->u["val"])) { + $objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); + } else if (isset($run->rPr->u) && isset($run->rPr->u["val"])) { + $objText->getFont()->setUnderline((string)$run->rPr->u["val"]); + } + + if ((isset($run->rPr->strike["val"]) && self::boolean((string) $run->rPr->strike["val"])) || + (isset($run->rPr->strike) && !isset($run->rPr->strike["val"]))) { + $objText->getFont()->setStrikethrough(TRUE); + } + } + } + } + + return $value; + } + + private function _readRibbon($excel, $customUITarget, $zip) + { + $baseDir = dirname($customUITarget); + $nameCustomUI = basename($customUITarget); + // get the xml file (ribbon) + $localRibbon = $this->_getFromZipArchive($zip, $customUITarget); + $customUIImagesNames = array(); + $customUIImagesBinaries = array(); + // something like customUI/_rels/customUI.xml.rels + $pathRels = $baseDir . '/_rels/' . $nameCustomUI . '.rels'; + $dataRels = $this->_getFromZipArchive($zip, $pathRels); + if ($dataRels) { + // exists and not empty if the ribbon have some pictures (other than internal MSO) + $UIRels = simplexml_load_string($dataRels, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + if ($UIRels) { + // we need to save id and target to avoid parsing customUI.xml and "guess" if it's a pseudo callback who load the image + foreach ($UIRels->Relationship as $ele) { + if ($ele["Type"] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image') { + // an image ? + $customUIImagesNames[(string) $ele['Id']] = (string)$ele['Target']; + $customUIImagesBinaries[(string)$ele['Target']] = $this->_getFromZipArchive($zip, $baseDir . '/' . (string) $ele['Target']); + } + } + } + } + if ($localRibbon) { + $excel->setRibbonXMLData($customUITarget, $localRibbon); + if (count($customUIImagesNames) > 0 && count($customUIImagesBinaries) > 0) { + $excel->setRibbonBinObjects($customUIImagesNames, $customUIImagesBinaries); + } else { + $excel->setRibbonBinObjects(NULL); + } + } else { + $excel->setRibbonXMLData(NULL); + $excel->setRibbonBinObjects(NULL); + } + } + + private static function array_item($array, $key = 0) { + return (isset($array[$key]) ? $array[$key] : null); + } + + + private static function dir_add($base, $add) { + return preg_replace('~[^/]+/\.\./~', '', dirname($base) . "/$add"); + } + + + private static function toCSSArray($style) { + $style = str_replace(array("\r","\n"), "", $style); + + $temp = explode(';', $style); + $style = array(); + foreach ($temp as $item) { + $item = explode(':', $item); + + if (strpos($item[1], 'px') !== false) { + $item[1] = str_replace('px', '', $item[1]); + } + if (strpos($item[1], 'pt') !== false) { + $item[1] = str_replace('pt', '', $item[1]); + $item[1] = PHPExcel_Shared_Font::fontSizeToPixels($item[1]); + } + if (strpos($item[1], 'in') !== false) { + $item[1] = str_replace('in', '', $item[1]); + $item[1] = PHPExcel_Shared_Font::inchSizeToPixels($item[1]); + } + if (strpos($item[1], 'cm') !== false) { + $item[1] = str_replace('cm', '', $item[1]); + $item[1] = PHPExcel_Shared_Font::centimeterSizeToPixels($item[1]); + } + + $style[$item[0]] = $item[1]; + } + + return $style; + } + + private static function boolean($value = NULL) + { + if (is_object($value)) { + $value = (string) $value; + } + if (is_numeric($value)) { + return (bool) $value; + } + return ($value === 'true' || $value === 'TRUE'); + } +} diff --git a/PHPExcel/Reader/Excel2007/Chart.php b/PHPExcel/Reader/Excel2007/Chart.php new file mode 100644 index 0000000..0de88ac --- /dev/null +++ b/PHPExcel/Reader/Excel2007/Chart.php @@ -0,0 +1,517 @@ +attributes(); + if (isset($attributes[$name])) { + if ($format == 'string') { + return (string) $attributes[$name]; + } elseif ($format == 'integer') { + return (integer) $attributes[$name]; + } elseif ($format == 'boolean') { + return (boolean) ($attributes[$name] === '0' || $attributes[$name] !== 'true') ? false : true; + } else { + return (float) $attributes[$name]; + } + } + return null; + } // function _getAttribute() + + + private static function _readColor($color,$background=false) { + if (isset($color["rgb"])) { + return (string)$color["rgb"]; + } else if (isset($color["indexed"])) { + return PHPExcel_Style_Color::indexedColor($color["indexed"]-7,$background)->getARGB(); + } + } + + + public static function readChart($chartElements,$chartName) { + $namespacesChartMeta = $chartElements->getNamespaces(true); + $chartElementsC = $chartElements->children($namespacesChartMeta['c']); + + $XaxisLabel = $YaxisLabel = $legend = $title = NULL; + $dispBlanksAs = $plotVisOnly = NULL; + + foreach($chartElementsC as $chartElementKey => $chartElement) { + switch ($chartElementKey) { + case "chart": + foreach($chartElement as $chartDetailsKey => $chartDetails) { + $chartDetailsC = $chartDetails->children($namespacesChartMeta['c']); + switch ($chartDetailsKey) { + case "plotArea": + $plotAreaLayout = $XaxisLable = $YaxisLable = null; + $plotSeries = $plotAttributes = array(); + foreach($chartDetails as $chartDetailKey => $chartDetail) { + switch ($chartDetailKey) { + case "layout": + $plotAreaLayout = self::_chartLayoutDetails($chartDetail,$namespacesChartMeta,'plotArea'); + break; + case "catAx": + if (isset($chartDetail->title)) { + $XaxisLabel = self::_chartTitle($chartDetail->title->children($namespacesChartMeta['c']),$namespacesChartMeta,'cat'); + } + break; + case "dateAx": + if (isset($chartDetail->title)) { + $XaxisLabel = self::_chartTitle($chartDetail->title->children($namespacesChartMeta['c']),$namespacesChartMeta,'cat'); + } + break; + case "valAx": + if (isset($chartDetail->title)) { + $YaxisLabel = self::_chartTitle($chartDetail->title->children($namespacesChartMeta['c']),$namespacesChartMeta,'cat'); + } + break; + case "barChart": + case "bar3DChart": + $barDirection = self::_getAttribute($chartDetail->barDir, 'val', 'string'); + $plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotSer->setPlotDirection($barDirection); + $plotSeries[] = $plotSer; + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "lineChart": + case "line3DChart": + $plotSeries[] = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "areaChart": + case "area3DChart": + $plotSeries[] = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "doughnutChart": + case "pieChart": + case "pie3DChart": + $explosion = isset($chartDetail->ser->explosion); + $plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotSer->setPlotStyle($explosion); + $plotSeries[] = $plotSer; + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "scatterChart": + $scatterStyle = self::_getAttribute($chartDetail->scatterStyle, 'val', 'string'); + $plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotSer->setPlotStyle($scatterStyle); + $plotSeries[] = $plotSer; + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "bubbleChart": + $bubbleScale = self::_getAttribute($chartDetail->bubbleScale, 'val', 'integer'); + $plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotSer->setPlotStyle($bubbleScale); + $plotSeries[] = $plotSer; + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "radarChart": + $radarStyle = self::_getAttribute($chartDetail->radarStyle, 'val', 'string'); + $plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotSer->setPlotStyle($radarStyle); + $plotSeries[] = $plotSer; + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "surfaceChart": + case "surface3DChart": + $wireFrame = self::_getAttribute($chartDetail->wireframe, 'val', 'boolean'); + $plotSer = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotSer->setPlotStyle($wireFrame); + $plotSeries[] = $plotSer; + $plotAttributes = self::_readChartAttributes($chartDetail); + break; + case "stockChart": + $plotSeries[] = self::_chartDataSeries($chartDetail,$namespacesChartMeta,$chartDetailKey); + $plotAttributes = self::_readChartAttributes($plotAreaLayout); + break; + } + } + if ($plotAreaLayout == NULL) { + $plotAreaLayout = new PHPExcel_Chart_Layout(); + } + $plotArea = new PHPExcel_Chart_PlotArea($plotAreaLayout,$plotSeries); + self::_setChartAttributes($plotAreaLayout,$plotAttributes); + break; + case "plotVisOnly": + $plotVisOnly = self::_getAttribute($chartDetails, 'val', 'string'); + break; + case "dispBlanksAs": + $dispBlanksAs = self::_getAttribute($chartDetails, 'val', 'string'); + break; + case "title": + $title = self::_chartTitle($chartDetails,$namespacesChartMeta,'title'); + break; + case "legend": + $legendPos = 'r'; + $legendLayout = null; + $legendOverlay = false; + foreach($chartDetails as $chartDetailKey => $chartDetail) { + switch ($chartDetailKey) { + case "legendPos": + $legendPos = self::_getAttribute($chartDetail, 'val', 'string'); + break; + case "overlay": + $legendOverlay = self::_getAttribute($chartDetail, 'val', 'boolean'); + break; + case "layout": + $legendLayout = self::_chartLayoutDetails($chartDetail,$namespacesChartMeta,'legend'); + break; + } + } + $legend = new PHPExcel_Chart_Legend($legendPos, $legendLayout, $legendOverlay); + break; + } + } + } + } + $chart = new PHPExcel_Chart($chartName,$title,$legend,$plotArea,$plotVisOnly,$dispBlanksAs,$XaxisLabel,$YaxisLabel); + + return $chart; + } // function readChart() + + + private static function _chartTitle($titleDetails,$namespacesChartMeta,$type) { + $caption = array(); + $titleLayout = null; + foreach($titleDetails as $titleDetailKey => $chartDetail) { + switch ($titleDetailKey) { + case "tx": + $titleDetails = $chartDetail->rich->children($namespacesChartMeta['a']); + foreach($titleDetails as $titleKey => $titleDetail) { + switch ($titleKey) { + case "p": + $titleDetailPart = $titleDetail->children($namespacesChartMeta['a']); + $caption[] = self::_parseRichText($titleDetailPart); + } + } + break; + case "layout": + $titleLayout = self::_chartLayoutDetails($chartDetail,$namespacesChartMeta); + break; + } + } + + return new PHPExcel_Chart_Title($caption, $titleLayout); + } // function _chartTitle() + + + private static function _chartLayoutDetails($chartDetail,$namespacesChartMeta) { + if (!isset($chartDetail->manualLayout)) { + return null; + } + $details = $chartDetail->manualLayout->children($namespacesChartMeta['c']); + if (is_null($details)) { + return null; + } + $layout = array(); + foreach($details as $detailKey => $detail) { +// echo $detailKey,' => ',self::_getAttribute($detail, 'val', 'string'),PHP_EOL; + $layout[$detailKey] = self::_getAttribute($detail, 'val', 'string'); + } + return new PHPExcel_Chart_Layout($layout); + } // function _chartLayoutDetails() + + + private static function _chartDataSeries($chartDetail,$namespacesChartMeta,$plotType) { + $multiSeriesType = NULL; + $smoothLine = false; + $seriesLabel = $seriesCategory = $seriesValues = $plotOrder = array(); + + $seriesDetailSet = $chartDetail->children($namespacesChartMeta['c']); + foreach($seriesDetailSet as $seriesDetailKey => $seriesDetails) { + switch ($seriesDetailKey) { + case "grouping": + $multiSeriesType = self::_getAttribute($chartDetail->grouping, 'val', 'string'); + break; + case "ser": + $marker = NULL; + foreach($seriesDetails as $seriesKey => $seriesDetail) { + switch ($seriesKey) { + case "idx": + $seriesIndex = self::_getAttribute($seriesDetail, 'val', 'integer'); + break; + case "order": + $seriesOrder = self::_getAttribute($seriesDetail, 'val', 'integer'); + $plotOrder[$seriesIndex] = $seriesOrder; + break; + case "tx": + $seriesLabel[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta); + break; + case "marker": + $marker = self::_getAttribute($seriesDetail->symbol, 'val', 'string'); + break; + case "smooth": + $smoothLine = self::_getAttribute($seriesDetail, 'val', 'boolean'); + break; + case "cat": + $seriesCategory[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta); + break; + case "val": + $seriesValues[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta,$marker); + break; + case "xVal": + $seriesCategory[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta,$marker); + break; + case "yVal": + $seriesValues[$seriesIndex] = self::_chartDataSeriesValueSet($seriesDetail,$namespacesChartMeta,$marker); + break; + } + } + } + } + return new PHPExcel_Chart_DataSeries($plotType,$multiSeriesType,$plotOrder,$seriesLabel,$seriesCategory,$seriesValues,$smoothLine); + } // function _chartDataSeries() + + + private static function _chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker = null, $smoothLine = false) { + if (isset($seriesDetail->strRef)) { + $seriesSource = (string) $seriesDetail->strRef->f; + $seriesData = self::_chartDataSeriesValues($seriesDetail->strRef->strCache->children($namespacesChartMeta['c']),'s'); + + return new PHPExcel_Chart_DataSeriesValues('String',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); + } elseif (isset($seriesDetail->numRef)) { + $seriesSource = (string) $seriesDetail->numRef->f; + $seriesData = self::_chartDataSeriesValues($seriesDetail->numRef->numCache->children($namespacesChartMeta['c'])); + + return new PHPExcel_Chart_DataSeriesValues('Number',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); + } elseif (isset($seriesDetail->multiLvlStrRef)) { + $seriesSource = (string) $seriesDetail->multiLvlStrRef->f; + $seriesData = self::_chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlStrRef->multiLvlStrCache->children($namespacesChartMeta['c']),'s'); + $seriesData['pointCount'] = count($seriesData['dataValues']); + + return new PHPExcel_Chart_DataSeriesValues('String',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); + } elseif (isset($seriesDetail->multiLvlNumRef)) { + $seriesSource = (string) $seriesDetail->multiLvlNumRef->f; + $seriesData = self::_chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlNumRef->multiLvlNumCache->children($namespacesChartMeta['c']),'s'); + $seriesData['pointCount'] = count($seriesData['dataValues']); + + return new PHPExcel_Chart_DataSeriesValues('String',$seriesSource,$seriesData['formatCode'],$seriesData['pointCount'],$seriesData['dataValues'],$marker,$smoothLine); + } + return null; + } // function _chartDataSeriesValueSet() + + + private static function _chartDataSeriesValues($seriesValueSet,$dataType='n') { + $seriesVal = array(); + $formatCode = ''; + $pointCount = 0; + + foreach($seriesValueSet as $seriesValueIdx => $seriesValue) { + switch ($seriesValueIdx) { + case 'ptCount': + $pointCount = self::_getAttribute($seriesValue, 'val', 'integer'); + break; + case 'formatCode': + $formatCode = (string) $seriesValue; + break; + case 'pt': + $pointVal = self::_getAttribute($seriesValue, 'idx', 'integer'); + if ($dataType == 's') { + $seriesVal[$pointVal] = (string) $seriesValue->v; + } else { + $seriesVal[$pointVal] = (float) $seriesValue->v; + } + break; + } + } + + if (empty($seriesVal)) { + $seriesVal = NULL; + } + + return array( 'formatCode' => $formatCode, + 'pointCount' => $pointCount, + 'dataValues' => $seriesVal + ); + } // function _chartDataSeriesValues() + + + private static function _chartDataSeriesValuesMultiLevel($seriesValueSet,$dataType='n') { + $seriesVal = array(); + $formatCode = ''; + $pointCount = 0; + + foreach($seriesValueSet->lvl as $seriesLevelIdx => $seriesLevel) { + foreach($seriesLevel as $seriesValueIdx => $seriesValue) { + switch ($seriesValueIdx) { + case 'ptCount': + $pointCount = self::_getAttribute($seriesValue, 'val', 'integer'); + break; + case 'formatCode': + $formatCode = (string) $seriesValue; + break; + case 'pt': + $pointVal = self::_getAttribute($seriesValue, 'idx', 'integer'); + if ($dataType == 's') { + $seriesVal[$pointVal][] = (string) $seriesValue->v; + } else { + $seriesVal[$pointVal][] = (float) $seriesValue->v; + } + break; + } + } + } + + return array( 'formatCode' => $formatCode, + 'pointCount' => $pointCount, + 'dataValues' => $seriesVal + ); + } // function _chartDataSeriesValuesMultiLevel() + + private static function _parseRichText($titleDetailPart = null) { + $value = new PHPExcel_RichText(); + + foreach($titleDetailPart as $titleDetailElementKey => $titleDetailElement) { + if (isset($titleDetailElement->t)) { + $objText = $value->createTextRun( (string) $titleDetailElement->t ); + } + if (isset($titleDetailElement->rPr)) { + if (isset($titleDetailElement->rPr->rFont["val"])) { + $objText->getFont()->setName((string) $titleDetailElement->rPr->rFont["val"]); + } + + $fontSize = (self::_getAttribute($titleDetailElement->rPr, 'sz', 'integer')); + if (!is_null($fontSize)) { + $objText->getFont()->setSize(floor($fontSize / 100)); + } + + $fontColor = (self::_getAttribute($titleDetailElement->rPr, 'color', 'string')); + if (!is_null($fontColor)) { + $objText->getFont()->setColor( new PHPExcel_Style_Color( self::_readColor($fontColor) ) ); + } + + $bold = self::_getAttribute($titleDetailElement->rPr, 'b', 'boolean'); + if (!is_null($bold)) { + $objText->getFont()->setBold($bold); + } + + $italic = self::_getAttribute($titleDetailElement->rPr, 'i', 'boolean'); + if (!is_null($italic)) { + $objText->getFont()->setItalic($italic); + } + + $baseline = self::_getAttribute($titleDetailElement->rPr, 'baseline', 'integer'); + if (!is_null($baseline)) { + if ($baseline > 0) { + $objText->getFont()->setSuperScript(true); + } elseif($baseline < 0) { + $objText->getFont()->setSubScript(true); + } + } + + $underscore = (self::_getAttribute($titleDetailElement->rPr, 'u', 'string')); + if (!is_null($underscore)) { + if ($underscore == 'sng') { + $objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); + } elseif($underscore == 'dbl') { + $objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLE); + } else { + $objText->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_NONE); + } + } + + $strikethrough = (self::_getAttribute($titleDetailElement->rPr, 's', 'string')); + if (!is_null($strikethrough)) { + if ($strikethrough == 'noStrike') { + $objText->getFont()->setStrikethrough(false); + } else { + $objText->getFont()->setStrikethrough(true); + } + } + } + } + + return $value; + } + + private static function _readChartAttributes($chartDetail) { + $plotAttributes = array(); + if (isset($chartDetail->dLbls)) { + if (isset($chartDetail->dLbls->howLegendKey)) { + $plotAttributes['showLegendKey'] = self::_getAttribute($chartDetail->dLbls->showLegendKey, 'val', 'string'); + } + if (isset($chartDetail->dLbls->showVal)) { + $plotAttributes['showVal'] = self::_getAttribute($chartDetail->dLbls->showVal, 'val', 'string'); + } + if (isset($chartDetail->dLbls->showCatName)) { + $plotAttributes['showCatName'] = self::_getAttribute($chartDetail->dLbls->showCatName, 'val', 'string'); + } + if (isset($chartDetail->dLbls->showSerName)) { + $plotAttributes['showSerName'] = self::_getAttribute($chartDetail->dLbls->showSerName, 'val', 'string'); + } + if (isset($chartDetail->dLbls->showPercent)) { + $plotAttributes['showPercent'] = self::_getAttribute($chartDetail->dLbls->showPercent, 'val', 'string'); + } + if (isset($chartDetail->dLbls->showBubbleSize)) { + $plotAttributes['showBubbleSize'] = self::_getAttribute($chartDetail->dLbls->showBubbleSize, 'val', 'string'); + } + if (isset($chartDetail->dLbls->showLeaderLines)) { + $plotAttributes['showLeaderLines'] = self::_getAttribute($chartDetail->dLbls->showLeaderLines, 'val', 'string'); + } + } + + return $plotAttributes; + } + + private static function _setChartAttributes($plotArea,$plotAttributes) + { + foreach($plotAttributes as $plotAttributeKey => $plotAttributeValue) { + switch($plotAttributeKey) { + case 'showLegendKey' : + $plotArea->setShowLegendKey($plotAttributeValue); + break; + case 'showVal' : + $plotArea->setShowVal($plotAttributeValue); + break; + case 'showCatName' : + $plotArea->setShowCatName($plotAttributeValue); + break; + case 'showSerName' : + $plotArea->setShowSerName($plotAttributeValue); + break; + case 'showPercent' : + $plotArea->setShowPercent($plotAttributeValue); + break; + case 'showBubbleSize' : + $plotArea->setShowBubbleSize($plotAttributeValue); + break; + case 'showLeaderLines' : + $plotArea->setShowLeaderLines($plotAttributeValue); + break; + } + } + } + +} diff --git a/PHPExcel/Reader/Excel2007/Theme.php b/PHPExcel/Reader/Excel2007/Theme.php new file mode 100644 index 0000000..820fa96 --- /dev/null +++ b/PHPExcel/Reader/Excel2007/Theme.php @@ -0,0 +1,124 @@ +_themeName = $themeName; + $this->_colourSchemeName = $colourSchemeName; + $this->_colourMap = $colourMap; + } + + /** + * Get Theme Name + * + * @return string + */ + public function getThemeName() + { + return $this->_themeName; + } + + /** + * Get colour Scheme Name + * + * @return string + */ + public function getColourSchemeName() { + return $this->_colourSchemeName; + } + + /** + * Get colour Map Value by Position + * + * @return string + */ + public function getColourByIndex($index=0) { + if (isset($this->_colourMap[$index])) { + return $this->_colourMap[$index]; + } + return null; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if ((is_object($value)) && ($key != '_parent')) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Reader/Excel5.php b/PHPExcel/Reader/Excel5.php new file mode 100644 index 0000000..91e0fa0 --- /dev/null +++ b/PHPExcel/Reader/Excel5.php @@ -0,0 +1,7084 @@ +_data + * + * @var int + */ + private $_dataSize; + + /** + * Current position in stream + * + * @var integer + */ + private $_pos; + + /** + * Workbook to be returned by the reader. + * + * @var PHPExcel + */ + private $_phpExcel; + + /** + * Worksheet that is currently being built by the reader. + * + * @var PHPExcel_Worksheet + */ + private $_phpSheet; + + /** + * BIFF version + * + * @var int + */ + private $_version; + + /** + * Codepage set in the Excel file being read. Only important for BIFF5 (Excel 5.0 - Excel 95) + * For BIFF8 (Excel 97 - Excel 2003) this will always have the value 'UTF-16LE' + * + * @var string + */ + private $_codepage; + + /** + * Shared formats + * + * @var array + */ + private $_formats; + + /** + * Shared fonts + * + * @var array + */ + private $_objFonts; + + /** + * Color palette + * + * @var array + */ + private $_palette; + + /** + * Worksheets + * + * @var array + */ + private $_sheets; + + /** + * External books + * + * @var array + */ + private $_externalBooks; + + /** + * REF structures. Only applies to BIFF8. + * + * @var array + */ + private $_ref; + + /** + * External names + * + * @var array + */ + private $_externalNames; + + /** + * Defined names + * + * @var array + */ + private $_definedname; + + /** + * Shared strings. Only applies to BIFF8. + * + * @var array + */ + private $_sst; + + /** + * Panes are frozen? (in sheet currently being read). See WINDOW2 record. + * + * @var boolean + */ + private $_frozen; + + /** + * Fit printout to number of pages? (in sheet currently being read). See SHEETPR record. + * + * @var boolean + */ + private $_isFitToPages; + + /** + * Objects. One OBJ record contributes with one entry. + * + * @var array + */ + private $_objs; + + /** + * Text Objects. One TXO record corresponds with one entry. + * + * @var array + */ + private $_textObjects; + + /** + * Cell Annotations (BIFF8) + * + * @var array + */ + private $_cellNotes; + + /** + * The combined MSODRAWINGGROUP data + * + * @var string + */ + private $_drawingGroupData; + + /** + * The combined MSODRAWING data (per sheet) + * + * @var string + */ + private $_drawingData; + + /** + * Keep track of XF index + * + * @var int + */ + private $_xfIndex; + + /** + * Mapping of XF index (that is a cell XF) to final index in cellXf collection + * + * @var array + */ + private $_mapCellXfIndex; + + /** + * Mapping of XF index (that is a style XF) to final index in cellStyleXf collection + * + * @var array + */ + private $_mapCellStyleXfIndex; + + /** + * The shared formulas in a sheet. One SHAREDFMLA record contributes with one value. + * + * @var array + */ + private $_sharedFormulas; + + /** + * The shared formula parts in a sheet. One FORMULA record contributes with one value if it + * refers to a shared formula. + * + * @var array + */ + private $_sharedFormulaParts; + + /** + * The type of encryption in use + * + * @var int + */ + private $_encryption = 0; + + /** + * The position in the stream after which contents are encrypted + * + * @var int + */ + private $_encryptionStartPos = false; + + /** + * The current RC4 decryption object + * + * @var PHPExcel_Reader_Excel5_RC4 + */ + private $_rc4Key = null; + + /** + * The position in the stream that the RC4 decryption object was left at + * + * @var int + */ + private $_rc4Pos = 0; + + /** + * The current MD5 context state + * + * @var string + */ + private $_md5Ctxt = null; + + /** + * Create a new PHPExcel_Reader_Excel5 instance + */ + public function __construct() { + $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + } + + + /** + * Can the current PHPExcel_Reader_IReader read the file? + * + * @param string $pFilename + * @return boolean + * @throws PHPExcel_Reader_Exception + */ + public function canRead($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + try { + // Use ParseXL for the hard work. + $ole = new PHPExcel_Shared_OLERead(); + + // get excel data + $res = $ole->read($pFilename); + return true; + } catch (PHPExcel_Exception $e) { + return false; + } + } + + + /** + * Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetNames($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $worksheetNames = array(); + + // Read the OLE file + $this->_loadOLE($pFilename); + + // total byte size of Excel data (workbook global substream + sheet substreams) + $this->_dataSize = strlen($this->_data); + + $this->_pos = 0; + $this->_sheets = array(); + + // Parse Workbook Global Substream + while ($this->_pos < $this->_dataSize) { + $code = self::_GetInt2d($this->_data, $this->_pos); + + switch ($code) { + case self::XLS_Type_BOF: $this->_readBof(); break; + case self::XLS_Type_SHEET: $this->_readSheet(); break; + case self::XLS_Type_EOF: $this->_readDefault(); break 2; + default: $this->_readDefault(); break; + } + } + + foreach ($this->_sheets as $sheet) { + if ($sheet['sheetType'] != 0x00) { + // 0x00: Worksheet, 0x02: Chart, 0x06: Visual Basic module + continue; + } + + $worksheetNames[] = $sheet['name']; + } + + return $worksheetNames; + } + + + /** + * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetInfo($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $worksheetInfo = array(); + + // Read the OLE file + $this->_loadOLE($pFilename); + + // total byte size of Excel data (workbook global substream + sheet substreams) + $this->_dataSize = strlen($this->_data); + + // initialize + $this->_pos = 0; + $this->_sheets = array(); + + // Parse Workbook Global Substream + while ($this->_pos < $this->_dataSize) { + $code = self::_GetInt2d($this->_data, $this->_pos); + + switch ($code) { + case self::XLS_Type_BOF: $this->_readBof(); break; + case self::XLS_Type_SHEET: $this->_readSheet(); break; + case self::XLS_Type_EOF: $this->_readDefault(); break 2; + default: $this->_readDefault(); break; + } + } + + // Parse the individual sheets + foreach ($this->_sheets as $sheet) { + + if ($sheet['sheetType'] != 0x00) { + // 0x00: Worksheet + // 0x02: Chart + // 0x06: Visual Basic module + continue; + } + + $tmpInfo = array(); + $tmpInfo['worksheetName'] = $sheet['name']; + $tmpInfo['lastColumnLetter'] = 'A'; + $tmpInfo['lastColumnIndex'] = 0; + $tmpInfo['totalRows'] = 0; + $tmpInfo['totalColumns'] = 0; + + $this->_pos = $sheet['offset']; + + while ($this->_pos <= $this->_dataSize - 4) { + $code = self::_GetInt2d($this->_data, $this->_pos); + + switch ($code) { + case self::XLS_Type_RK: + case self::XLS_Type_LABELSST: + case self::XLS_Type_NUMBER: + case self::XLS_Type_FORMULA: + case self::XLS_Type_BOOLERR: + case self::XLS_Type_LABEL: + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + $rowIndex = self::_GetInt2d($recordData, 0) + 1; + $columnIndex = self::_GetInt2d($recordData, 2); + + $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex); + $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex); + break; + case self::XLS_Type_BOF: $this->_readBof(); break; + case self::XLS_Type_EOF: $this->_readDefault(); break 2; + default: $this->_readDefault(); break; + } + } + + $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']); + $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1; + + $worksheetInfo[] = $tmpInfo; + } + + return $worksheetInfo; + } + + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Read the OLE file + $this->_loadOLE($pFilename); + + // Initialisations + $this->_phpExcel = new PHPExcel; + $this->_phpExcel->removeSheetByIndex(0); // remove 1st sheet + if (!$this->_readDataOnly) { + $this->_phpExcel->removeCellStyleXfByIndex(0); // remove the default style + $this->_phpExcel->removeCellXfByIndex(0); // remove the default style + } + + // Read the summary information stream (containing meta data) + $this->_readSummaryInformation(); + + // Read the Additional document summary information stream (containing application-specific meta data) + $this->_readDocumentSummaryInformation(); + + // total byte size of Excel data (workbook global substream + sheet substreams) + $this->_dataSize = strlen($this->_data); + + // initialize + $this->_pos = 0; + $this->_codepage = 'CP1252'; + $this->_formats = array(); + $this->_objFonts = array(); + $this->_palette = array(); + $this->_sheets = array(); + $this->_externalBooks = array(); + $this->_ref = array(); + $this->_definedname = array(); + $this->_sst = array(); + $this->_drawingGroupData = ''; + $this->_xfIndex = ''; + $this->_mapCellXfIndex = array(); + $this->_mapCellStyleXfIndex = array(); + + // Parse Workbook Global Substream + while ($this->_pos < $this->_dataSize) { + $code = self::_GetInt2d($this->_data, $this->_pos); + + switch ($code) { + case self::XLS_Type_BOF: $this->_readBof(); break; + case self::XLS_Type_FILEPASS: $this->_readFilepass(); break; + case self::XLS_Type_CODEPAGE: $this->_readCodepage(); break; + case self::XLS_Type_DATEMODE: $this->_readDateMode(); break; + case self::XLS_Type_FONT: $this->_readFont(); break; + case self::XLS_Type_FORMAT: $this->_readFormat(); break; + case self::XLS_Type_XF: $this->_readXf(); break; + case self::XLS_Type_XFEXT: $this->_readXfExt(); break; + case self::XLS_Type_STYLE: $this->_readStyle(); break; + case self::XLS_Type_PALETTE: $this->_readPalette(); break; + case self::XLS_Type_SHEET: $this->_readSheet(); break; + case self::XLS_Type_EXTERNALBOOK: $this->_readExternalBook(); break; + case self::XLS_Type_EXTERNNAME: $this->_readExternName(); break; + case self::XLS_Type_EXTERNSHEET: $this->_readExternSheet(); break; + case self::XLS_Type_DEFINEDNAME: $this->_readDefinedName(); break; + case self::XLS_Type_MSODRAWINGGROUP: $this->_readMsoDrawingGroup(); break; + case self::XLS_Type_SST: $this->_readSst(); break; + case self::XLS_Type_EOF: $this->_readDefault(); break 2; + default: $this->_readDefault(); break; + } + } + + // Resolve indexed colors for font, fill, and border colors + // Cannot be resolved already in XF record, because PALETTE record comes afterwards + if (!$this->_readDataOnly) { + foreach ($this->_objFonts as $objFont) { + if (isset($objFont->colorIndex)) { + $color = self::_readColor($objFont->colorIndex,$this->_palette,$this->_version); + $objFont->getColor()->setRGB($color['rgb']); + } + } + + foreach ($this->_phpExcel->getCellXfCollection() as $objStyle) { + // fill start and end color + $fill = $objStyle->getFill(); + + if (isset($fill->startcolorIndex)) { + $startColor = self::_readColor($fill->startcolorIndex,$this->_palette,$this->_version); + $fill->getStartColor()->setRGB($startColor['rgb']); + } + + if (isset($fill->endcolorIndex)) { + $endColor = self::_readColor($fill->endcolorIndex,$this->_palette,$this->_version); + $fill->getEndColor()->setRGB($endColor['rgb']); + } + + // border colors + $top = $objStyle->getBorders()->getTop(); + $right = $objStyle->getBorders()->getRight(); + $bottom = $objStyle->getBorders()->getBottom(); + $left = $objStyle->getBorders()->getLeft(); + $diagonal = $objStyle->getBorders()->getDiagonal(); + + if (isset($top->colorIndex)) { + $borderTopColor = self::_readColor($top->colorIndex,$this->_palette,$this->_version); + $top->getColor()->setRGB($borderTopColor['rgb']); + } + + if (isset($right->colorIndex)) { + $borderRightColor = self::_readColor($right->colorIndex,$this->_palette,$this->_version); + $right->getColor()->setRGB($borderRightColor['rgb']); + } + + if (isset($bottom->colorIndex)) { + $borderBottomColor = self::_readColor($bottom->colorIndex,$this->_palette,$this->_version); + $bottom->getColor()->setRGB($borderBottomColor['rgb']); + } + + if (isset($left->colorIndex)) { + $borderLeftColor = self::_readColor($left->colorIndex,$this->_palette,$this->_version); + $left->getColor()->setRGB($borderLeftColor['rgb']); + } + + if (isset($diagonal->colorIndex)) { + $borderDiagonalColor = self::_readColor($diagonal->colorIndex,$this->_palette,$this->_version); + $diagonal->getColor()->setRGB($borderDiagonalColor['rgb']); + } + } + } + + // treat MSODRAWINGGROUP records, workbook-level Escher + if (!$this->_readDataOnly && $this->_drawingGroupData) { + $escherWorkbook = new PHPExcel_Shared_Escher(); + $reader = new PHPExcel_Reader_Excel5_Escher($escherWorkbook); + $escherWorkbook = $reader->load($this->_drawingGroupData); + + // debug Escher stream + //$debug = new Debug_Escher(new PHPExcel_Shared_Escher()); + //$debug->load($this->_drawingGroupData); + } + + // Parse the individual sheets + foreach ($this->_sheets as $sheet) { + + if ($sheet['sheetType'] != 0x00) { + // 0x00: Worksheet, 0x02: Chart, 0x06: Visual Basic module + continue; + } + + // check if sheet should be skipped + if (isset($this->_loadSheetsOnly) && !in_array($sheet['name'], $this->_loadSheetsOnly)) { + continue; + } + + // add sheet to PHPExcel object + $this->_phpSheet = $this->_phpExcel->createSheet(); + // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula + // cells... during the load, all formulae should be correct, and we're simply bringing the worksheet + // name in line with the formula, not the reverse + $this->_phpSheet->setTitle($sheet['name'],false); + $this->_phpSheet->setSheetState($sheet['sheetState']); + + $this->_pos = $sheet['offset']; + + // Initialize isFitToPages. May change after reading SHEETPR record. + $this->_isFitToPages = false; + + // Initialize drawingData + $this->_drawingData = ''; + + // Initialize objs + $this->_objs = array(); + + // Initialize shared formula parts + $this->_sharedFormulaParts = array(); + + // Initialize shared formulas + $this->_sharedFormulas = array(); + + // Initialize text objs + $this->_textObjects = array(); + + // Initialize cell annotations + $this->_cellNotes = array(); + $this->textObjRef = -1; + + while ($this->_pos <= $this->_dataSize - 4) { + $code = self::_GetInt2d($this->_data, $this->_pos); + + switch ($code) { + case self::XLS_Type_BOF: $this->_readBof(); break; + case self::XLS_Type_PRINTGRIDLINES: $this->_readPrintGridlines(); break; + case self::XLS_Type_DEFAULTROWHEIGHT: $this->_readDefaultRowHeight(); break; + case self::XLS_Type_SHEETPR: $this->_readSheetPr(); break; + case self::XLS_Type_HORIZONTALPAGEBREAKS: $this->_readHorizontalPageBreaks(); break; + case self::XLS_Type_VERTICALPAGEBREAKS: $this->_readVerticalPageBreaks(); break; + case self::XLS_Type_HEADER: $this->_readHeader(); break; + case self::XLS_Type_FOOTER: $this->_readFooter(); break; + case self::XLS_Type_HCENTER: $this->_readHcenter(); break; + case self::XLS_Type_VCENTER: $this->_readVcenter(); break; + case self::XLS_Type_LEFTMARGIN: $this->_readLeftMargin(); break; + case self::XLS_Type_RIGHTMARGIN: $this->_readRightMargin(); break; + case self::XLS_Type_TOPMARGIN: $this->_readTopMargin(); break; + case self::XLS_Type_BOTTOMMARGIN: $this->_readBottomMargin(); break; + case self::XLS_Type_PAGESETUP: $this->_readPageSetup(); break; + case self::XLS_Type_PROTECT: $this->_readProtect(); break; + case self::XLS_Type_SCENPROTECT: $this->_readScenProtect(); break; + case self::XLS_Type_OBJECTPROTECT: $this->_readObjectProtect(); break; + case self::XLS_Type_PASSWORD: $this->_readPassword(); break; + case self::XLS_Type_DEFCOLWIDTH: $this->_readDefColWidth(); break; + case self::XLS_Type_COLINFO: $this->_readColInfo(); break; + case self::XLS_Type_DIMENSION: $this->_readDefault(); break; + case self::XLS_Type_ROW: $this->_readRow(); break; + case self::XLS_Type_DBCELL: $this->_readDefault(); break; + case self::XLS_Type_RK: $this->_readRk(); break; + case self::XLS_Type_LABELSST: $this->_readLabelSst(); break; + case self::XLS_Type_MULRK: $this->_readMulRk(); break; + case self::XLS_Type_NUMBER: $this->_readNumber(); break; + case self::XLS_Type_FORMULA: $this->_readFormula(); break; + case self::XLS_Type_SHAREDFMLA: $this->_readSharedFmla(); break; + case self::XLS_Type_BOOLERR: $this->_readBoolErr(); break; + case self::XLS_Type_MULBLANK: $this->_readMulBlank(); break; + case self::XLS_Type_LABEL: $this->_readLabel(); break; + case self::XLS_Type_BLANK: $this->_readBlank(); break; + case self::XLS_Type_MSODRAWING: $this->_readMsoDrawing(); break; + case self::XLS_Type_OBJ: $this->_readObj(); break; + case self::XLS_Type_WINDOW2: $this->_readWindow2(); break; + case self::XLS_Type_PAGELAYOUTVIEW: $this->_readPageLayoutView(); break; + case self::XLS_Type_SCL: $this->_readScl(); break; + case self::XLS_Type_PANE: $this->_readPane(); break; + case self::XLS_Type_SELECTION: $this->_readSelection(); break; + case self::XLS_Type_MERGEDCELLS: $this->_readMergedCells(); break; + case self::XLS_Type_HYPERLINK: $this->_readHyperLink(); break; + case self::XLS_Type_DATAVALIDATIONS: $this->_readDataValidations(); break; + case self::XLS_Type_DATAVALIDATION: $this->_readDataValidation(); break; + case self::XLS_Type_SHEETLAYOUT: $this->_readSheetLayout(); break; + case self::XLS_Type_SHEETPROTECTION: $this->_readSheetProtection(); break; + case self::XLS_Type_RANGEPROTECTION: $this->_readRangeProtection(); break; + case self::XLS_Type_NOTE: $this->_readNote(); break; + //case self::XLS_Type_IMDATA: $this->_readImData(); break; + case self::XLS_Type_TXO: $this->_readTextObject(); break; + case self::XLS_Type_CONTINUE: $this->_readContinue(); break; + case self::XLS_Type_EOF: $this->_readDefault(); break 2; + default: $this->_readDefault(); break; + } + + } + + // treat MSODRAWING records, sheet-level Escher + if (!$this->_readDataOnly && $this->_drawingData) { + $escherWorksheet = new PHPExcel_Shared_Escher(); + $reader = new PHPExcel_Reader_Excel5_Escher($escherWorksheet); + $escherWorksheet = $reader->load($this->_drawingData); + + // debug Escher stream + //$debug = new Debug_Escher(new PHPExcel_Shared_Escher()); + //$debug->load($this->_drawingData); + + // get all spContainers in one long array, so they can be mapped to OBJ records + $allSpContainers = $escherWorksheet->getDgContainer()->getSpgrContainer()->getAllSpContainers(); + } + + // treat OBJ records + foreach ($this->_objs as $n => $obj) { +// echo '
Object reference is ',$n,'
'; +// var_dump($obj); +// echo '
'; + + // the first shape container never has a corresponding OBJ record, hence $n + 1 + if (isset($allSpContainers[$n + 1]) && is_object($allSpContainers[$n + 1])) { + $spContainer = $allSpContainers[$n + 1]; + + // we skip all spContainers that are a part of a group shape since we cannot yet handle those + if ($spContainer->getNestingLevel() > 1) { + continue; + } + + // calculate the width and height of the shape + list($startColumn, $startRow) = PHPExcel_Cell::coordinateFromString($spContainer->getStartCoordinates()); + list($endColumn, $endRow) = PHPExcel_Cell::coordinateFromString($spContainer->getEndCoordinates()); + + $startOffsetX = $spContainer->getStartOffsetX(); + $startOffsetY = $spContainer->getStartOffsetY(); + $endOffsetX = $spContainer->getEndOffsetX(); + $endOffsetY = $spContainer->getEndOffsetY(); + + $width = PHPExcel_Shared_Excel5::getDistanceX($this->_phpSheet, $startColumn, $startOffsetX, $endColumn, $endOffsetX); + $height = PHPExcel_Shared_Excel5::getDistanceY($this->_phpSheet, $startRow, $startOffsetY, $endRow, $endOffsetY); + + // calculate offsetX and offsetY of the shape + $offsetX = $startOffsetX * PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, $startColumn) / 1024; + $offsetY = $startOffsetY * PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $startRow) / 256; + + switch ($obj['otObjType']) { + case 0x19: + // Note +// echo 'Cell Annotation Object
'; +// echo 'Object ID is ',$obj['idObjID'],'
'; +// + if (isset($this->_cellNotes[$obj['idObjID']])) { + $cellNote = $this->_cellNotes[$obj['idObjID']]; + + if (isset($this->_textObjects[$obj['idObjID']])) { + $textObject = $this->_textObjects[$obj['idObjID']]; + $this->_cellNotes[$obj['idObjID']]['objTextData'] = $textObject; + } + } + break; + + case 0x08: +// echo 'Picture Object
'; + // picture + + // get index to BSE entry (1-based) + $BSEindex = $spContainer->getOPT(0x0104); + $BSECollection = $escherWorkbook->getDggContainer()->getBstoreContainer()->getBSECollection(); + $BSE = $BSECollection[$BSEindex - 1]; + $blipType = $BSE->getBlipType(); + + // need check because some blip types are not supported by Escher reader such as EMF + if ($blip = $BSE->getBlip()) { + $ih = imagecreatefromstring($blip->getData()); + $drawing = new PHPExcel_Worksheet_MemoryDrawing(); + $drawing->setImageResource($ih); + + // width, height, offsetX, offsetY + $drawing->setResizeProportional(false); + $drawing->setWidth($width); + $drawing->setHeight($height); + $drawing->setOffsetX($offsetX); + $drawing->setOffsetY($offsetY); + + switch ($blipType) { + case PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG: + $drawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG); + $drawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_JPEG); + break; + + case PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG: + $drawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG); + $drawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_PNG); + break; + } + + $drawing->setWorksheet($this->_phpSheet); + $drawing->setCoordinates($spContainer->getStartCoordinates()); + } + + break; + + default: + // other object type + break; + + } + } + } + + // treat SHAREDFMLA records + if ($this->_version == self::XLS_BIFF8) { + foreach ($this->_sharedFormulaParts as $cell => $baseCell) { + list($column, $row) = PHPExcel_Cell::coordinateFromString($cell); + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($column, $row, $this->_phpSheet->getTitle()) ) { + $formula = $this->_getFormulaFromStructure($this->_sharedFormulas[$baseCell], $cell); + $this->_phpSheet->getCell($cell)->setValueExplicit('=' . $formula, PHPExcel_Cell_DataType::TYPE_FORMULA); + } + } + } + + if (!empty($this->_cellNotes)) { + foreach($this->_cellNotes as $note => $noteDetails) { + if (!isset($noteDetails['objTextData'])) { + if (isset($this->_textObjects[$note])) { + $textObject = $this->_textObjects[$note]; + $noteDetails['objTextData'] = $textObject; + } else { + $noteDetails['objTextData']['text'] = ''; + } + } +// echo 'Cell annotation ',$note,'
'; +// var_dump($noteDetails); +// echo '
'; + $cellAddress = str_replace('$','',$noteDetails['cellRef']); + $this->_phpSheet->getComment( $cellAddress ) + ->setAuthor( $noteDetails['author'] ) + ->setText($this->_parseRichText($noteDetails['objTextData']['text']) ); + } + } + } + + // add the named ranges (defined names) + foreach ($this->_definedname as $definedName) { + if ($definedName['isBuiltInName']) { + switch ($definedName['name']) { + + case pack('C', 0x06): + // print area + // in general, formula looks like this: Foo!$C$7:$J$66,Bar!$A$1:$IV$2 + $ranges = explode(',', $definedName['formula']); // FIXME: what if sheetname contains comma? + + $extractedRanges = array(); + foreach ($ranges as $range) { + // $range should look like one of these + // Foo!$C$7:$J$66 + // Bar!$A$1:$IV$2 + + $explodes = explode('!', $range); // FIXME: what if sheetname contains exclamation mark? + $sheetName = trim($explodes[0], "'"); + + if (count($explodes) == 2) { + if (strpos($explodes[1], ':') === FALSE) { + $explodes[1] = $explodes[1] . ':' . $explodes[1]; + } + $extractedRanges[] = str_replace('$', '', $explodes[1]); // C7:J66 + } + } + if ($docSheet = $this->_phpExcel->getSheetByName($sheetName)) { + $docSheet->getPageSetup()->setPrintArea(implode(',', $extractedRanges)); // C7:J66,A1:IV2 + } + break; + + case pack('C', 0x07): + // print titles (repeating rows) + // Assuming BIFF8, there are 3 cases + // 1. repeating rows + // formula looks like this: Sheet!$A$1:$IV$2 + // rows 1-2 repeat + // 2. repeating columns + // formula looks like this: Sheet!$A$1:$B$65536 + // columns A-B repeat + // 3. both repeating rows and repeating columns + // formula looks like this: Sheet!$A$1:$B$65536,Sheet!$A$1:$IV$2 + + $ranges = explode(',', $definedName['formula']); // FIXME: what if sheetname contains comma? + + foreach ($ranges as $range) { + // $range should look like this one of these + // Sheet!$A$1:$B$65536 + // Sheet!$A$1:$IV$2 + + $explodes = explode('!', $range); + + if (count($explodes) == 2) { + if ($docSheet = $this->_phpExcel->getSheetByName($explodes[0])) { + + $extractedRange = $explodes[1]; + $extractedRange = str_replace('$', '', $extractedRange); + + $coordinateStrings = explode(':', $extractedRange); + if (count($coordinateStrings) == 2) { + list($firstColumn, $firstRow) = PHPExcel_Cell::coordinateFromString($coordinateStrings[0]); + list($lastColumn, $lastRow) = PHPExcel_Cell::coordinateFromString($coordinateStrings[1]); + + if ($firstColumn == 'A' and $lastColumn == 'IV') { + // then we have repeating rows + $docSheet->getPageSetup()->setRowsToRepeatAtTop(array($firstRow, $lastRow)); + } elseif ($firstRow == 1 and $lastRow == 65536) { + // then we have repeating columns + $docSheet->getPageSetup()->setColumnsToRepeatAtLeft(array($firstColumn, $lastColumn)); + } + } + } + } + } + break; + + } + } else { + // Extract range + $explodes = explode('!', $definedName['formula']); + + if (count($explodes) == 2) { + if (($docSheet = $this->_phpExcel->getSheetByName($explodes[0])) || + ($docSheet = $this->_phpExcel->getSheetByName(trim($explodes[0],"'")))) { + $extractedRange = $explodes[1]; + $extractedRange = str_replace('$', '', $extractedRange); + + $localOnly = ($definedName['scope'] == 0) ? false : true; + + $scope = ($definedName['scope'] == 0) ? + null : $this->_phpExcel->getSheetByName($this->_sheets[$definedName['scope'] - 1]['name']); + + $this->_phpExcel->addNamedRange( new PHPExcel_NamedRange((string)$definedName['name'], $docSheet, $extractedRange, $localOnly, $scope) ); + } + } else { + // Named Value + // TODO Provide support for named values + } + } + } + + return $this->_phpExcel; + } + + /** + * Read record data from stream, decrypting as required + * + * @param string $data Data stream to read from + * @param int $pos Position to start reading from + * @param int $length Record data length + * + * @return string Record data + */ + private function _readRecordData($data, $pos, $len) + { + $data = substr($data, $pos, $len); + + // File not encrypted, or record before encryption start point + if ($this->_encryption == self::MS_BIFF_CRYPTO_NONE || $pos < $this->_encryptionStartPos) { + return $data; + } + + $recordData = ''; + if ($this->_encryption == self::MS_BIFF_CRYPTO_RC4) { + + $oldBlock = floor($this->_rc4Pos / self::REKEY_BLOCK); + $block = floor($pos / self::REKEY_BLOCK); + $endBlock = floor(($pos + $len) / self::REKEY_BLOCK); + + // Spin an RC4 decryptor to the right spot. If we have a decryptor sitting + // at a point earlier in the current block, re-use it as we can save some time. + if ($block != $oldBlock || $pos < $this->_rc4Pos || !$this->_rc4Key) { + $this->_rc4Key = $this->_makeKey($block, $this->_md5Ctxt); + $step = $pos % self::REKEY_BLOCK; + } else { + $step = $pos - $this->_rc4Pos; + } + $this->_rc4Key->RC4(str_repeat("\0", $step)); + + // Decrypt record data (re-keying at the end of every block) + while ($block != $endBlock) { + $step = self::REKEY_BLOCK - ($pos % self::REKEY_BLOCK); + $recordData .= $this->_rc4Key->RC4(substr($data, 0, $step)); + $data = substr($data, $step); + $pos += $step; + $len -= $step; + $block++; + $this->_rc4Key = $this->_makeKey($block, $this->_md5Ctxt); + } + $recordData .= $this->_rc4Key->RC4(substr($data, 0, $len)); + + // Keep track of the position of this decryptor. + // We'll try and re-use it later if we can to speed things up + $this->_rc4Pos = $pos + $len; + + } elseif ($this->_encryption == self::MS_BIFF_CRYPTO_XOR) { + throw new PHPExcel_Reader_Exception('XOr encryption not supported'); + } + return $recordData; + } + + /** + * Use OLE reader to extract the relevant data streams from the OLE file + * + * @param string $pFilename + */ + private function _loadOLE($pFilename) + { + // OLE reader + $ole = new PHPExcel_Shared_OLERead(); + + // get excel data, + $res = $ole->read($pFilename); + // Get workbook data: workbook stream + sheet streams + $this->_data = $ole->getStream($ole->wrkbook); + + // Get summary information data + $this->_summaryInformation = $ole->getStream($ole->summaryInformation); + + // Get additional document summary information data + $this->_documentSummaryInformation = $ole->getStream($ole->documentSummaryInformation); + + // Get user-defined property data +// $this->_userDefinedProperties = $ole->getUserDefinedProperties(); + } + + + /** + * Read summary information + */ + private function _readSummaryInformation() + { + if (!isset($this->_summaryInformation)) { + return; + } + + // offset: 0; size: 2; must be 0xFE 0xFF (UTF-16 LE byte order mark) + // offset: 2; size: 2; + // offset: 4; size: 2; OS version + // offset: 6; size: 2; OS indicator + // offset: 8; size: 16 + // offset: 24; size: 4; section count + $secCount = self::_GetInt4d($this->_summaryInformation, 24); + + // offset: 28; size: 16; first section's class id: e0 85 9f f2 f9 4f 68 10 ab 91 08 00 2b 27 b3 d9 + // offset: 44; size: 4 + $secOffset = self::_GetInt4d($this->_summaryInformation, 44); + + // section header + // offset: $secOffset; size: 4; section length + $secLength = self::_GetInt4d($this->_summaryInformation, $secOffset); + + // offset: $secOffset+4; size: 4; property count + $countProperties = self::_GetInt4d($this->_summaryInformation, $secOffset+4); + + // initialize code page (used to resolve string values) + $codePage = 'CP1252'; + + // offset: ($secOffset+8); size: var + // loop through property decarations and properties + for ($i = 0; $i < $countProperties; ++$i) { + + // offset: ($secOffset+8) + (8 * $i); size: 4; property ID + $id = self::_GetInt4d($this->_summaryInformation, ($secOffset+8) + (8 * $i)); + + // Use value of property id as appropriate + // offset: ($secOffset+12) + (8 * $i); size: 4; offset from beginning of section (48) + $offset = self::_GetInt4d($this->_summaryInformation, ($secOffset+12) + (8 * $i)); + + $type = self::_GetInt4d($this->_summaryInformation, $secOffset + $offset); + + // initialize property value + $value = null; + + // extract property value based on property type + switch ($type) { + case 0x02: // 2 byte signed integer + $value = self::_GetInt2d($this->_summaryInformation, $secOffset + 4 + $offset); + break; + + case 0x03: // 4 byte signed integer + $value = self::_GetInt4d($this->_summaryInformation, $secOffset + 4 + $offset); + break; + + case 0x13: // 4 byte unsigned integer + // not needed yet, fix later if necessary + break; + + case 0x1E: // null-terminated string prepended by dword string length + $byteLength = self::_GetInt4d($this->_summaryInformation, $secOffset + 4 + $offset); + $value = substr($this->_summaryInformation, $secOffset + 8 + $offset, $byteLength); + $value = PHPExcel_Shared_String::ConvertEncoding($value, 'UTF-8', $codePage); + $value = rtrim($value); + break; + + case 0x40: // Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601) + // PHP-time + $value = PHPExcel_Shared_OLE::OLE2LocalDate(substr($this->_summaryInformation, $secOffset + 4 + $offset, 8)); + break; + + case 0x47: // Clipboard format + // not needed yet, fix later if necessary + break; + } + + switch ($id) { + case 0x01: // Code Page + $codePage = PHPExcel_Shared_CodePage::NumberToName($value); + break; + + case 0x02: // Title + $this->_phpExcel->getProperties()->setTitle($value); + break; + + case 0x03: // Subject + $this->_phpExcel->getProperties()->setSubject($value); + break; + + case 0x04: // Author (Creator) + $this->_phpExcel->getProperties()->setCreator($value); + break; + + case 0x05: // Keywords + $this->_phpExcel->getProperties()->setKeywords($value); + break; + + case 0x06: // Comments (Description) + $this->_phpExcel->getProperties()->setDescription($value); + break; + + case 0x07: // Template + // Not supported by PHPExcel + break; + + case 0x08: // Last Saved By (LastModifiedBy) + $this->_phpExcel->getProperties()->setLastModifiedBy($value); + break; + + case 0x09: // Revision + // Not supported by PHPExcel + break; + + case 0x0A: // Total Editing Time + // Not supported by PHPExcel + break; + + case 0x0B: // Last Printed + // Not supported by PHPExcel + break; + + case 0x0C: // Created Date/Time + $this->_phpExcel->getProperties()->setCreated($value); + break; + + case 0x0D: // Modified Date/Time + $this->_phpExcel->getProperties()->setModified($value); + break; + + case 0x0E: // Number of Pages + // Not supported by PHPExcel + break; + + case 0x0F: // Number of Words + // Not supported by PHPExcel + break; + + case 0x10: // Number of Characters + // Not supported by PHPExcel + break; + + case 0x11: // Thumbnail + // Not supported by PHPExcel + break; + + case 0x12: // Name of creating application + // Not supported by PHPExcel + break; + + case 0x13: // Security + // Not supported by PHPExcel + break; + + } + } + } + + + /** + * Read additional document summary information + */ + private function _readDocumentSummaryInformation() + { + if (!isset($this->_documentSummaryInformation)) { + return; + } + + // offset: 0; size: 2; must be 0xFE 0xFF (UTF-16 LE byte order mark) + // offset: 2; size: 2; + // offset: 4; size: 2; OS version + // offset: 6; size: 2; OS indicator + // offset: 8; size: 16 + // offset: 24; size: 4; section count + $secCount = self::_GetInt4d($this->_documentSummaryInformation, 24); +// echo '$secCount = ',$secCount,'
'; + + // offset: 28; size: 16; first section's class id: 02 d5 cd d5 9c 2e 1b 10 93 97 08 00 2b 2c f9 ae + // offset: 44; size: 4; first section offset + $secOffset = self::_GetInt4d($this->_documentSummaryInformation, 44); +// echo '$secOffset = ',$secOffset,'
'; + + // section header + // offset: $secOffset; size: 4; section length + $secLength = self::_GetInt4d($this->_documentSummaryInformation, $secOffset); +// echo '$secLength = ',$secLength,'
'; + + // offset: $secOffset+4; size: 4; property count + $countProperties = self::_GetInt4d($this->_documentSummaryInformation, $secOffset+4); +// echo '$countProperties = ',$countProperties,'
'; + + // initialize code page (used to resolve string values) + $codePage = 'CP1252'; + + // offset: ($secOffset+8); size: var + // loop through property decarations and properties + for ($i = 0; $i < $countProperties; ++$i) { +// echo 'Property ',$i,'
'; + // offset: ($secOffset+8) + (8 * $i); size: 4; property ID + $id = self::_GetInt4d($this->_documentSummaryInformation, ($secOffset+8) + (8 * $i)); +// echo 'ID is ',$id,'
'; + + // Use value of property id as appropriate + // offset: 60 + 8 * $i; size: 4; offset from beginning of section (48) + $offset = self::_GetInt4d($this->_documentSummaryInformation, ($secOffset+12) + (8 * $i)); + + $type = self::_GetInt4d($this->_documentSummaryInformation, $secOffset + $offset); +// echo 'Type is ',$type,', '; + + // initialize property value + $value = null; + + // extract property value based on property type + switch ($type) { + case 0x02: // 2 byte signed integer + $value = self::_GetInt2d($this->_documentSummaryInformation, $secOffset + 4 + $offset); + break; + + case 0x03: // 4 byte signed integer + $value = self::_GetInt4d($this->_documentSummaryInformation, $secOffset + 4 + $offset); + break; + + case 0x0B: // Boolean + $value = self::_GetInt2d($this->_documentSummaryInformation, $secOffset + 4 + $offset); + $value = ($value == 0 ? false : true); + break; + + case 0x13: // 4 byte unsigned integer + // not needed yet, fix later if necessary + break; + + case 0x1E: // null-terminated string prepended by dword string length + $byteLength = self::_GetInt4d($this->_documentSummaryInformation, $secOffset + 4 + $offset); + $value = substr($this->_documentSummaryInformation, $secOffset + 8 + $offset, $byteLength); + $value = PHPExcel_Shared_String::ConvertEncoding($value, 'UTF-8', $codePage); + $value = rtrim($value); + break; + + case 0x40: // Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601) + // PHP-Time + $value = PHPExcel_Shared_OLE::OLE2LocalDate(substr($this->_documentSummaryInformation, $secOffset + 4 + $offset, 8)); + break; + + case 0x47: // Clipboard format + // not needed yet, fix later if necessary + break; + } + + switch ($id) { + case 0x01: // Code Page + $codePage = PHPExcel_Shared_CodePage::NumberToName($value); + break; + + case 0x02: // Category + $this->_phpExcel->getProperties()->setCategory($value); + break; + + case 0x03: // Presentation Target + // Not supported by PHPExcel + break; + + case 0x04: // Bytes + // Not supported by PHPExcel + break; + + case 0x05: // Lines + // Not supported by PHPExcel + break; + + case 0x06: // Paragraphs + // Not supported by PHPExcel + break; + + case 0x07: // Slides + // Not supported by PHPExcel + break; + + case 0x08: // Notes + // Not supported by PHPExcel + break; + + case 0x09: // Hidden Slides + // Not supported by PHPExcel + break; + + case 0x0A: // MM Clips + // Not supported by PHPExcel + break; + + case 0x0B: // Scale Crop + // Not supported by PHPExcel + break; + + case 0x0C: // Heading Pairs + // Not supported by PHPExcel + break; + + case 0x0D: // Titles of Parts + // Not supported by PHPExcel + break; + + case 0x0E: // Manager + $this->_phpExcel->getProperties()->setManager($value); + break; + + case 0x0F: // Company + $this->_phpExcel->getProperties()->setCompany($value); + break; + + case 0x10: // Links up-to-date + // Not supported by PHPExcel + break; + + } + } + } + + + /** + * Reads a general type of BIFF record. Does nothing except for moving stream pointer forward to next record. + */ + private function _readDefault() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); +// $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + } + + + /** + * The NOTE record specifies a comment associated with a particular cell. In Excel 95 (BIFF7) and earlier versions, + * this record stores a note (cell note). This feature was significantly enhanced in Excel 97. + */ + private function _readNote() + { +// echo 'Read Cell Annotation
'; + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly) { + return; + } + + $cellAddress = $this->_readBIFF8CellAddress(substr($recordData, 0, 4)); + if ($this->_version == self::XLS_BIFF8) { + $noteObjID = self::_GetInt2d($recordData, 6); + $noteAuthor = self::_readUnicodeStringLong(substr($recordData, 8)); + $noteAuthor = $noteAuthor['value']; +// echo 'Note Address=',$cellAddress,'
'; +// echo 'Note Object ID=',$noteObjID,'
'; +// echo 'Note Author=',$noteAuthor,'
'; +// + $this->_cellNotes[$noteObjID] = array('cellRef' => $cellAddress, + 'objectID' => $noteObjID, + 'author' => $noteAuthor + ); + } else { + $extension = false; + if ($cellAddress == '$B$65536') { + // If the address row is -1 and the column is 0, (which translates as $B$65536) then this is a continuation + // note from the previous cell annotation. We're not yet handling this, so annotations longer than the + // max 2048 bytes will probably throw a wobbly. + $row = self::_GetInt2d($recordData, 0); + $extension = true; + $cellAddress = array_pop(array_keys($this->_phpSheet->getComments())); + } +// echo 'Note Address=',$cellAddress,'
'; + + $cellAddress = str_replace('$','',$cellAddress); + $noteLength = self::_GetInt2d($recordData, 4); + $noteText = trim(substr($recordData, 6)); +// echo 'Note Length=',$noteLength,'
'; +// echo 'Note Text=',$noteText,'
'; + + if ($extension) { + // Concatenate this extension with the currently set comment for the cell + $comment = $this->_phpSheet->getComment( $cellAddress ); + $commentText = $comment->getText()->getPlainText(); + $comment->setText($this->_parseRichText($commentText.$noteText) ); + } else { + // Set comment for the cell + $this->_phpSheet->getComment( $cellAddress ) +// ->setAuthor( $author ) + ->setText($this->_parseRichText($noteText) ); + } + } + + } + + + /** + * The TEXT Object record contains the text associated with a cell annotation. + */ + private function _readTextObject() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly) { + return; + } + + // recordData consists of an array of subrecords looking like this: + // grbit: 2 bytes; Option Flags + // rot: 2 bytes; rotation + // cchText: 2 bytes; length of the text (in the first continue record) + // cbRuns: 2 bytes; length of the formatting (in the second continue record) + // followed by the continuation records containing the actual text and formatting + $grbitOpts = self::_GetInt2d($recordData, 0); + $rot = self::_GetInt2d($recordData, 2); + $cchText = self::_GetInt2d($recordData, 10); + $cbRuns = self::_GetInt2d($recordData, 12); + $text = $this->_getSplicedRecordData(); + + $this->_textObjects[$this->textObjRef] = array( + 'text' => substr($text["recordData"],$text["spliceOffsets"][0]+1,$cchText), + 'format' => substr($text["recordData"],$text["spliceOffsets"][1],$cbRuns), + 'alignment' => $grbitOpts, + 'rotation' => $rot + ); + +// echo '_readTextObject()
'; +// var_dump($this->_textObjects[$this->textObjRef]); +// echo '
'; + } + + + /** + * Read BOF + */ + private function _readBof() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = substr($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 2; size: 2; type of the following data + $substreamType = self::_GetInt2d($recordData, 2); + + switch ($substreamType) { + case self::XLS_WorkbookGlobals: + $version = self::_GetInt2d($recordData, 0); + if (($version != self::XLS_BIFF8) && ($version != self::XLS_BIFF7)) { + throw new PHPExcel_Reader_Exception('Cannot read this Excel file. Version is too old.'); + } + $this->_version = $version; + break; + + case self::XLS_Worksheet: + // do not use this version information for anything + // it is unreliable (OpenOffice doc, 5.8), use only version information from the global stream + break; + + default: + // substream, e.g. chart + // just skip the entire substream + do { + $code = self::_GetInt2d($this->_data, $this->_pos); + $this->_readDefault(); + } while ($code != self::XLS_Type_EOF && $this->_pos < $this->_dataSize); + break; + } + } + + + /** + * FILEPASS + * + * This record is part of the File Protection Block. It + * contains information about the read/write password of the + * file. All record contents following this record will be + * encrypted. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + * + * The decryption functions and objects used from here on in + * are based on the source of Spreadsheet-ParseExcel: + * http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel/ + */ + private function _readFilepass() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + + if ($length != 54) { + throw new PHPExcel_Reader_Exception('Unexpected file pass record length'); + } + + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_verifyPassword( + 'VelvetSweatshop', + substr($recordData, 6, 16), + substr($recordData, 22, 16), + substr($recordData, 38, 16), + $this->_md5Ctxt + )) { + throw new PHPExcel_Reader_Exception('Decryption password incorrect'); + } + + $this->_encryption = self::MS_BIFF_CRYPTO_RC4; + + // Decryption required from the record after next onwards + $this->_encryptionStartPos = $this->_pos + self::_GetInt2d($this->_data, $this->_pos + 2); + } + + /** + * Make an RC4 decryptor for the given block + * + * @var int $block Block for which to create decrypto + * @var string $valContext MD5 context state + * + * @return PHPExcel_Reader_Excel5_RC4 + */ + private function _makeKey($block, $valContext) + { + $pwarray = str_repeat("\0", 64); + + for ($i = 0; $i < 5; $i++) { + $pwarray[$i] = $valContext[$i]; + } + + $pwarray[5] = chr($block & 0xff); + $pwarray[6] = chr(($block >> 8) & 0xff); + $pwarray[7] = chr(($block >> 16) & 0xff); + $pwarray[8] = chr(($block >> 24) & 0xff); + + $pwarray[9] = "\x80"; + $pwarray[56] = "\x48"; + + $md5 = new PHPExcel_Reader_Excel5_MD5(); + $md5->add($pwarray); + + $s = $md5->getContext(); + return new PHPExcel_Reader_Excel5_RC4($s); + } + + /** + * Verify RC4 file password + * + * @var string $password Password to check + * @var string $docid Document id + * @var string $salt_data Salt data + * @var string $hashedsalt_data Hashed salt data + * @var string &$valContext Set to the MD5 context of the value + * + * @return bool Success + */ + private function _verifyPassword($password, $docid, $salt_data, $hashedsalt_data, &$valContext) + { + $pwarray = str_repeat("\0", 64); + + for ($i = 0; $i < strlen($password); $i++) { + $o = ord(substr($password, $i, 1)); + $pwarray[2 * $i] = chr($o & 0xff); + $pwarray[2 * $i + 1] = chr(($o >> 8) & 0xff); + } + $pwarray[2 * $i] = chr(0x80); + $pwarray[56] = chr(($i << 4) & 0xff); + + $md5 = new PHPExcel_Reader_Excel5_MD5(); + $md5->add($pwarray); + + $mdContext1 = $md5->getContext(); + + $offset = 0; + $keyoffset = 0; + $tocopy = 5; + + $md5->reset(); + + while ($offset != 16) { + if ((64 - $offset) < 5) { + $tocopy = 64 - $offset; + } + + for ($i = 0; $i <= $tocopy; $i++) { + $pwarray[$offset + $i] = $mdContext1[$keyoffset + $i]; + } + + $offset += $tocopy; + + if ($offset == 64) { + $md5->add($pwarray); + $keyoffset = $tocopy; + $tocopy = 5 - $tocopy; + $offset = 0; + continue; + } + + $keyoffset = 0; + $tocopy = 5; + for ($i = 0; $i < 16; $i++) { + $pwarray[$offset + $i] = $docid[$i]; + } + $offset += 16; + } + + $pwarray[16] = "\x80"; + for ($i = 0; $i < 47; $i++) { + $pwarray[17 + $i] = "\0"; + } + $pwarray[56] = "\x80"; + $pwarray[57] = "\x0a"; + + $md5->add($pwarray); + $valContext = $md5->getContext(); + + $key = $this->_makeKey(0, $valContext); + + $salt = $key->RC4($salt_data); + $hashedsalt = $key->RC4($hashedsalt_data); + + $salt .= "\x80" . str_repeat("\0", 47); + $salt[56] = "\x80"; + + $md5->reset(); + $md5->add($salt); + $mdContext2 = $md5->getContext(); + + return $mdContext2 == $hashedsalt; + } + + /** + * CODEPAGE + * + * This record stores the text encoding used to write byte + * strings, stored as MS Windows code page identifier. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readCodepage() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; code page identifier + $codepage = self::_GetInt2d($recordData, 0); + + $this->_codepage = PHPExcel_Shared_CodePage::NumberToName($codepage); + } + + + /** + * DATEMODE + * + * This record specifies the base date for displaying date + * values. All dates are stored as count of days past this + * base date. In BIFF2-BIFF4 this record is part of the + * Calculation Settings Block. In BIFF5-BIFF8 it is + * stored in the Workbook Globals Substream. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readDateMode() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; 0 = base 1900, 1 = base 1904 + PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900); + if (ord($recordData{0}) == 1) { + PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_MAC_1904); + } + } + + + /** + * Read a FONT record + */ + private function _readFont() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + $objFont = new PHPExcel_Style_Font(); + + // offset: 0; size: 2; height of the font (in twips = 1/20 of a point) + $size = self::_GetInt2d($recordData, 0); + $objFont->setSize($size / 20); + + // offset: 2; size: 2; option flags + // bit: 0; mask 0x0001; bold (redundant in BIFF5-BIFF8) + // bit: 1; mask 0x0002; italic + $isItalic = (0x0002 & self::_GetInt2d($recordData, 2)) >> 1; + if ($isItalic) $objFont->setItalic(true); + + // bit: 2; mask 0x0004; underlined (redundant in BIFF5-BIFF8) + // bit: 3; mask 0x0008; strike + $isStrike = (0x0008 & self::_GetInt2d($recordData, 2)) >> 3; + if ($isStrike) $objFont->setStrikethrough(true); + + // offset: 4; size: 2; colour index + $colorIndex = self::_GetInt2d($recordData, 4); + $objFont->colorIndex = $colorIndex; + + // offset: 6; size: 2; font weight + $weight = self::_GetInt2d($recordData, 6); + switch ($weight) { + case 0x02BC: + $objFont->setBold(true); + break; + } + + // offset: 8; size: 2; escapement type + $escapement = self::_GetInt2d($recordData, 8); + switch ($escapement) { + case 0x0001: + $objFont->setSuperScript(true); + break; + case 0x0002: + $objFont->setSubScript(true); + break; + } + + // offset: 10; size: 1; underline type + $underlineType = ord($recordData{10}); + switch ($underlineType) { + case 0x00: + break; // no underline + case 0x01: + $objFont->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE); + break; + case 0x02: + $objFont->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLE); + break; + case 0x21: + $objFont->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING); + break; + case 0x22: + $objFont->setUnderline(PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING); + break; + } + + // offset: 11; size: 1; font family + // offset: 12; size: 1; character set + // offset: 13; size: 1; not used + // offset: 14; size: var; font name + if ($this->_version == self::XLS_BIFF8) { + $string = self::_readUnicodeStringShort(substr($recordData, 14)); + } else { + $string = $this->_readByteStringShort(substr($recordData, 14)); + } + $objFont->setName($string['value']); + + $this->_objFonts[] = $objFont; + } + } + + + /** + * FORMAT + * + * This record contains information about a number format. + * All FORMAT records occur together in a sequential list. + * + * In BIFF2-BIFF4 other records referencing a FORMAT record + * contain a zero-based index into this list. From BIFF5 on + * the FORMAT record contains the index itself that will be + * used by other records. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readFormat() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + $indexCode = self::_GetInt2d($recordData, 0); + + if ($this->_version == self::XLS_BIFF8) { + $string = self::_readUnicodeStringLong(substr($recordData, 2)); + } else { + // BIFF7 + $string = $this->_readByteStringShort(substr($recordData, 2)); + } + + $formatString = $string['value']; + $this->_formats[$indexCode] = $formatString; + } + } + + + /** + * XF - Extended Format + * + * This record contains formatting information for cells, rows, columns or styles. + * According to http://support.microsoft.com/kb/147732 there are always at least 15 cell style XF + * and 1 cell XF. + * Inspection of Excel files generated by MS Office Excel shows that XF records 0-14 are cell style XF + * and XF record 15 is a cell XF + * We only read the first cell style XF and skip the remaining cell style XF records + * We read all cell XF records. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readXf() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + $objStyle = new PHPExcel_Style(); + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; Index to FONT record + if (self::_GetInt2d($recordData, 0) < 4) { + $fontIndex = self::_GetInt2d($recordData, 0); + } else { + // this has to do with that index 4 is omitted in all BIFF versions for some strange reason + // check the OpenOffice documentation of the FONT record + $fontIndex = self::_GetInt2d($recordData, 0) - 1; + } + $objStyle->setFont($this->_objFonts[$fontIndex]); + + // offset: 2; size: 2; Index to FORMAT record + $numberFormatIndex = self::_GetInt2d($recordData, 2); + if (isset($this->_formats[$numberFormatIndex])) { + // then we have user-defined format code + $numberformat = array('code' => $this->_formats[$numberFormatIndex]); + } elseif (($code = PHPExcel_Style_NumberFormat::builtInFormatCode($numberFormatIndex)) !== '') { + // then we have built-in format code + $numberformat = array('code' => $code); + } else { + // we set the general format code + $numberformat = array('code' => 'General'); + } + $objStyle->getNumberFormat()->setFormatCode($numberformat['code']); + + // offset: 4; size: 2; XF type, cell protection, and parent style XF + // bit 2-0; mask 0x0007; XF_TYPE_PROT + $xfTypeProt = self::_GetInt2d($recordData, 4); + // bit 0; mask 0x01; 1 = cell is locked + $isLocked = (0x01 & $xfTypeProt) >> 0; + $objStyle->getProtection()->setLocked($isLocked ? + PHPExcel_Style_Protection::PROTECTION_INHERIT : PHPExcel_Style_Protection::PROTECTION_UNPROTECTED); + + // bit 1; mask 0x02; 1 = Formula is hidden + $isHidden = (0x02 & $xfTypeProt) >> 1; + $objStyle->getProtection()->setHidden($isHidden ? + PHPExcel_Style_Protection::PROTECTION_PROTECTED : PHPExcel_Style_Protection::PROTECTION_UNPROTECTED); + + // bit 2; mask 0x04; 0 = Cell XF, 1 = Cell Style XF + $isCellStyleXf = (0x04 & $xfTypeProt) >> 2; + + // offset: 6; size: 1; Alignment and text break + // bit 2-0, mask 0x07; horizontal alignment + $horAlign = (0x07 & ord($recordData{6})) >> 0; + switch ($horAlign) { + case 0: + $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_GENERAL); + break; + case 1: + $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); + break; + case 2: + $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); + break; + case 3: + $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); + break; + case 4: + $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_FILL); + break; + case 5: + $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY); + break; + case 6: + $objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS); + break; + } + // bit 3, mask 0x08; wrap text + $wrapText = (0x08 & ord($recordData{6})) >> 3; + switch ($wrapText) { + case 0: + $objStyle->getAlignment()->setWrapText(false); + break; + case 1: + $objStyle->getAlignment()->setWrapText(true); + break; + } + // bit 6-4, mask 0x70; vertical alignment + $vertAlign = (0x70 & ord($recordData{6})) >> 4; + switch ($vertAlign) { + case 0: + $objStyle->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP); + break; + case 1: + $objStyle->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); + break; + case 2: + $objStyle->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_BOTTOM); + break; + case 3: + $objStyle->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_JUSTIFY); + break; + } + + if ($this->_version == self::XLS_BIFF8) { + // offset: 7; size: 1; XF_ROTATION: Text rotation angle + $angle = ord($recordData{7}); + $rotation = 0; + if ($angle <= 90) { + $rotation = $angle; + } else if ($angle <= 180) { + $rotation = 90 - $angle; + } else if ($angle == 255) { + $rotation = -165; + } + $objStyle->getAlignment()->setTextRotation($rotation); + + // offset: 8; size: 1; Indentation, shrink to cell size, and text direction + // bit: 3-0; mask: 0x0F; indent level + $indent = (0x0F & ord($recordData{8})) >> 0; + $objStyle->getAlignment()->setIndent($indent); + + // bit: 4; mask: 0x10; 1 = shrink content to fit into cell + $shrinkToFit = (0x10 & ord($recordData{8})) >> 4; + switch ($shrinkToFit) { + case 0: + $objStyle->getAlignment()->setShrinkToFit(false); + break; + case 1: + $objStyle->getAlignment()->setShrinkToFit(true); + break; + } + + // offset: 9; size: 1; Flags used for attribute groups + + // offset: 10; size: 4; Cell border lines and background area + // bit: 3-0; mask: 0x0000000F; left style + if ($bordersLeftStyle = self::_mapBorderStyle((0x0000000F & self::_GetInt4d($recordData, 10)) >> 0)) { + $objStyle->getBorders()->getLeft()->setBorderStyle($bordersLeftStyle); + } + // bit: 7-4; mask: 0x000000F0; right style + if ($bordersRightStyle = self::_mapBorderStyle((0x000000F0 & self::_GetInt4d($recordData, 10)) >> 4)) { + $objStyle->getBorders()->getRight()->setBorderStyle($bordersRightStyle); + } + // bit: 11-8; mask: 0x00000F00; top style + if ($bordersTopStyle = self::_mapBorderStyle((0x00000F00 & self::_GetInt4d($recordData, 10)) >> 8)) { + $objStyle->getBorders()->getTop()->setBorderStyle($bordersTopStyle); + } + // bit: 15-12; mask: 0x0000F000; bottom style + if ($bordersBottomStyle = self::_mapBorderStyle((0x0000F000 & self::_GetInt4d($recordData, 10)) >> 12)) { + $objStyle->getBorders()->getBottom()->setBorderStyle($bordersBottomStyle); + } + // bit: 22-16; mask: 0x007F0000; left color + $objStyle->getBorders()->getLeft()->colorIndex = (0x007F0000 & self::_GetInt4d($recordData, 10)) >> 16; + + // bit: 29-23; mask: 0x3F800000; right color + $objStyle->getBorders()->getRight()->colorIndex = (0x3F800000 & self::_GetInt4d($recordData, 10)) >> 23; + + // bit: 30; mask: 0x40000000; 1 = diagonal line from top left to right bottom + $diagonalDown = (0x40000000 & self::_GetInt4d($recordData, 10)) >> 30 ? + true : false; + + // bit: 31; mask: 0x80000000; 1 = diagonal line from bottom left to top right + $diagonalUp = (0x80000000 & self::_GetInt4d($recordData, 10)) >> 31 ? + true : false; + + if ($diagonalUp == false && $diagonalDown == false) { + $objStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_NONE); + } elseif ($diagonalUp == true && $diagonalDown == false) { + $objStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_UP); + } elseif ($diagonalUp == false && $diagonalDown == true) { + $objStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_DOWN); + } elseif ($diagonalUp == true && $diagonalDown == true) { + $objStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_BOTH); + } + + // offset: 14; size: 4; + // bit: 6-0; mask: 0x0000007F; top color + $objStyle->getBorders()->getTop()->colorIndex = (0x0000007F & self::_GetInt4d($recordData, 14)) >> 0; + + // bit: 13-7; mask: 0x00003F80; bottom color + $objStyle->getBorders()->getBottom()->colorIndex = (0x00003F80 & self::_GetInt4d($recordData, 14)) >> 7; + + // bit: 20-14; mask: 0x001FC000; diagonal color + $objStyle->getBorders()->getDiagonal()->colorIndex = (0x001FC000 & self::_GetInt4d($recordData, 14)) >> 14; + + // bit: 24-21; mask: 0x01E00000; diagonal style + if ($bordersDiagonalStyle = self::_mapBorderStyle((0x01E00000 & self::_GetInt4d($recordData, 14)) >> 21)) { + $objStyle->getBorders()->getDiagonal()->setBorderStyle($bordersDiagonalStyle); + } + + // bit: 31-26; mask: 0xFC000000 fill pattern + if ($fillType = self::_mapFillPattern((0xFC000000 & self::_GetInt4d($recordData, 14)) >> 26)) { + $objStyle->getFill()->setFillType($fillType); + } + // offset: 18; size: 2; pattern and background colour + // bit: 6-0; mask: 0x007F; color index for pattern color + $objStyle->getFill()->startcolorIndex = (0x007F & self::_GetInt2d($recordData, 18)) >> 0; + + // bit: 13-7; mask: 0x3F80; color index for pattern background + $objStyle->getFill()->endcolorIndex = (0x3F80 & self::_GetInt2d($recordData, 18)) >> 7; + } else { + // BIFF5 + + // offset: 7; size: 1; Text orientation and flags + $orientationAndFlags = ord($recordData{7}); + + // bit: 1-0; mask: 0x03; XF_ORIENTATION: Text orientation + $xfOrientation = (0x03 & $orientationAndFlags) >> 0; + switch ($xfOrientation) { + case 0: + $objStyle->getAlignment()->setTextRotation(0); + break; + case 1: + $objStyle->getAlignment()->setTextRotation(-165); + break; + case 2: + $objStyle->getAlignment()->setTextRotation(90); + break; + case 3: + $objStyle->getAlignment()->setTextRotation(-90); + break; + } + + // offset: 8; size: 4; cell border lines and background area + $borderAndBackground = self::_GetInt4d($recordData, 8); + + // bit: 6-0; mask: 0x0000007F; color index for pattern color + $objStyle->getFill()->startcolorIndex = (0x0000007F & $borderAndBackground) >> 0; + + // bit: 13-7; mask: 0x00003F80; color index for pattern background + $objStyle->getFill()->endcolorIndex = (0x00003F80 & $borderAndBackground) >> 7; + + // bit: 21-16; mask: 0x003F0000; fill pattern + $objStyle->getFill()->setFillType(self::_mapFillPattern((0x003F0000 & $borderAndBackground) >> 16)); + + // bit: 24-22; mask: 0x01C00000; bottom line style + $objStyle->getBorders()->getBottom()->setBorderStyle(self::_mapBorderStyle((0x01C00000 & $borderAndBackground) >> 22)); + + // bit: 31-25; mask: 0xFE000000; bottom line color + $objStyle->getBorders()->getBottom()->colorIndex = (0xFE000000 & $borderAndBackground) >> 25; + + // offset: 12; size: 4; cell border lines + $borderLines = self::_GetInt4d($recordData, 12); + + // bit: 2-0; mask: 0x00000007; top line style + $objStyle->getBorders()->getTop()->setBorderStyle(self::_mapBorderStyle((0x00000007 & $borderLines) >> 0)); + + // bit: 5-3; mask: 0x00000038; left line style + $objStyle->getBorders()->getLeft()->setBorderStyle(self::_mapBorderStyle((0x00000038 & $borderLines) >> 3)); + + // bit: 8-6; mask: 0x000001C0; right line style + $objStyle->getBorders()->getRight()->setBorderStyle(self::_mapBorderStyle((0x000001C0 & $borderLines) >> 6)); + + // bit: 15-9; mask: 0x0000FE00; top line color index + $objStyle->getBorders()->getTop()->colorIndex = (0x0000FE00 & $borderLines) >> 9; + + // bit: 22-16; mask: 0x007F0000; left line color index + $objStyle->getBorders()->getLeft()->colorIndex = (0x007F0000 & $borderLines) >> 16; + + // bit: 29-23; mask: 0x3F800000; right line color index + $objStyle->getBorders()->getRight()->colorIndex = (0x3F800000 & $borderLines) >> 23; + } + + // add cellStyleXf or cellXf and update mapping + if ($isCellStyleXf) { + // we only read one style XF record which is always the first + if ($this->_xfIndex == 0) { + $this->_phpExcel->addCellStyleXf($objStyle); + $this->_mapCellStyleXfIndex[$this->_xfIndex] = 0; + } + } else { + // we read all cell XF records + $this->_phpExcel->addCellXf($objStyle); + $this->_mapCellXfIndex[$this->_xfIndex] = count($this->_phpExcel->getCellXfCollection()) - 1; + } + + // update XF index for when we read next record + ++$this->_xfIndex; + } + } + + + /** + * + */ + private function _readXfExt() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; 0x087D = repeated header + + // offset: 2; size: 2 + + // offset: 4; size: 8; not used + + // offset: 12; size: 2; record version + + // offset: 14; size: 2; index to XF record which this record modifies + $ixfe = self::_GetInt2d($recordData, 14); + + // offset: 16; size: 2; not used + + // offset: 18; size: 2; number of extension properties that follow + $cexts = self::_GetInt2d($recordData, 18); + + // start reading the actual extension data + $offset = 20; + while ($offset < $length) { + // extension type + $extType = self::_GetInt2d($recordData, $offset); + + // extension length + $cb = self::_GetInt2d($recordData, $offset + 2); + + // extension data + $extData = substr($recordData, $offset + 4, $cb); + + switch ($extType) { + case 4: // fill start color + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $fill = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getFill(); + $fill->getStartColor()->setRGB($rgb); + unset($fill->startcolorIndex); // normal color index does not apply, discard + } + } + break; + + case 5: // fill end color + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $fill = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getFill(); + $fill->getEndColor()->setRGB($rgb); + unset($fill->endcolorIndex); // normal color index does not apply, discard + } + } + break; + + case 7: // border color top + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $top = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getBorders()->getTop(); + $top->getColor()->setRGB($rgb); + unset($top->colorIndex); // normal color index does not apply, discard + } + } + break; + + case 8: // border color bottom + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $bottom = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getBorders()->getBottom(); + $bottom->getColor()->setRGB($rgb); + unset($bottom->colorIndex); // normal color index does not apply, discard + } + } + break; + + case 9: // border color left + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $left = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getBorders()->getLeft(); + $left->getColor()->setRGB($rgb); + unset($left->colorIndex); // normal color index does not apply, discard + } + } + break; + + case 10: // border color right + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $right = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getBorders()->getRight(); + $right->getColor()->setRGB($rgb); + unset($right->colorIndex); // normal color index does not apply, discard + } + } + break; + + case 11: // border color diagonal + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $diagonal = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getBorders()->getDiagonal(); + $diagonal->getColor()->setRGB($rgb); + unset($diagonal->colorIndex); // normal color index does not apply, discard + } + } + break; + + case 13: // font color + $xclfType = self::_GetInt2d($extData, 0); // color type + $xclrValue = substr($extData, 4, 4); // color value (value based on color type) + + if ($xclfType == 2) { + $rgb = sprintf('%02X%02X%02X', ord($xclrValue{0}), ord($xclrValue{1}), ord($xclrValue{2})); + + // modify the relevant style property + if ( isset($this->_mapCellXfIndex[$ixfe]) ) { + $font = $this->_phpExcel->getCellXfByIndex($this->_mapCellXfIndex[$ixfe])->getFont(); + $font->getColor()->setRGB($rgb); + unset($font->colorIndex); // normal color index does not apply, discard + } + } + break; + } + + $offset += $cb; + } + } + + } + + + /** + * Read STYLE record + */ + private function _readStyle() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; index to XF record and flag for built-in style + $ixfe = self::_GetInt2d($recordData, 0); + + // bit: 11-0; mask 0x0FFF; index to XF record + $xfIndex = (0x0FFF & $ixfe) >> 0; + + // bit: 15; mask 0x8000; 0 = user-defined style, 1 = built-in style + $isBuiltIn = (bool) ((0x8000 & $ixfe) >> 15); + + if ($isBuiltIn) { + // offset: 2; size: 1; identifier for built-in style + $builtInId = ord($recordData{2}); + + switch ($builtInId) { + case 0x00: + // currently, we are not using this for anything + break; + + default: + break; + } + + } else { + // user-defined; not supported by PHPExcel + } + } + } + + + /** + * Read PALETTE record + */ + private function _readPalette() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; number of following colors + $nm = self::_GetInt2d($recordData, 0); + + // list of RGB colors + for ($i = 0; $i < $nm; ++$i) { + $rgb = substr($recordData, 2 + 4 * $i, 4); + $this->_palette[] = self::_readRGB($rgb); + } + } + } + + + /** + * SHEET + * + * This record is located in the Workbook Globals + * Substream and represents a sheet inside the workbook. + * One SHEET record is written for each sheet. It stores the + * sheet name and a stream offset to the BOF record of the + * respective Sheet Substream within the Workbook Stream. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readSheet() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // offset: 0; size: 4; absolute stream position of the BOF record of the sheet + // NOTE: not encrypted + $rec_offset = self::_GetInt4d($this->_data, $this->_pos + 4); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 4; size: 1; sheet state + switch (ord($recordData{4})) { + case 0x00: $sheetState = PHPExcel_Worksheet::SHEETSTATE_VISIBLE; break; + case 0x01: $sheetState = PHPExcel_Worksheet::SHEETSTATE_HIDDEN; break; + case 0x02: $sheetState = PHPExcel_Worksheet::SHEETSTATE_VERYHIDDEN; break; + default: $sheetState = PHPExcel_Worksheet::SHEETSTATE_VISIBLE; break; + } + + // offset: 5; size: 1; sheet type + $sheetType = ord($recordData{5}); + + // offset: 6; size: var; sheet name + if ($this->_version == self::XLS_BIFF8) { + $string = self::_readUnicodeStringShort(substr($recordData, 6)); + $rec_name = $string['value']; + } elseif ($this->_version == self::XLS_BIFF7) { + $string = $this->_readByteStringShort(substr($recordData, 6)); + $rec_name = $string['value']; + } + + $this->_sheets[] = array( + 'name' => $rec_name, + 'offset' => $rec_offset, + 'sheetState' => $sheetState, + 'sheetType' => $sheetType, + ); + } + + + /** + * Read EXTERNALBOOK record + */ + private function _readExternalBook() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset within record data + $offset = 0; + + // there are 4 types of records + if (strlen($recordData) > 4) { + // external reference + // offset: 0; size: 2; number of sheet names ($nm) + $nm = self::_GetInt2d($recordData, 0); + $offset += 2; + + // offset: 2; size: var; encoded URL without sheet name (Unicode string, 16-bit length) + $encodedUrlString = self::_readUnicodeStringLong(substr($recordData, 2)); + $offset += $encodedUrlString['size']; + + // offset: var; size: var; list of $nm sheet names (Unicode strings, 16-bit length) + $externalSheetNames = array(); + for ($i = 0; $i < $nm; ++$i) { + $externalSheetNameString = self::_readUnicodeStringLong(substr($recordData, $offset)); + $externalSheetNames[] = $externalSheetNameString['value']; + $offset += $externalSheetNameString['size']; + } + + // store the record data + $this->_externalBooks[] = array( + 'type' => 'external', + 'encodedUrl' => $encodedUrlString['value'], + 'externalSheetNames' => $externalSheetNames, + ); + + } elseif (substr($recordData, 2, 2) == pack('CC', 0x01, 0x04)) { + // internal reference + // offset: 0; size: 2; number of sheet in this document + // offset: 2; size: 2; 0x01 0x04 + $this->_externalBooks[] = array( + 'type' => 'internal', + ); + } elseif (substr($recordData, 0, 4) == pack('vCC', 0x0001, 0x01, 0x3A)) { + // add-in function + // offset: 0; size: 2; 0x0001 + $this->_externalBooks[] = array( + 'type' => 'addInFunction', + ); + } elseif (substr($recordData, 0, 2) == pack('v', 0x0000)) { + // DDE links, OLE links + // offset: 0; size: 2; 0x0000 + // offset: 2; size: var; encoded source document name + $this->_externalBooks[] = array( + 'type' => 'DDEorOLE', + ); + } + } + + + /** + * Read EXTERNNAME record. + */ + private function _readExternName() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // external sheet references provided for named cells + if ($this->_version == self::XLS_BIFF8) { + // offset: 0; size: 2; options + $options = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; + + // offset: 4; size: 2; not used + + // offset: 6; size: var + $nameString = self::_readUnicodeStringShort(substr($recordData, 6)); + + // offset: var; size: var; formula data + $offset = 6 + $nameString['size']; + $formula = $this->_getFormulaFromStructure(substr($recordData, $offset)); + + $this->_externalNames[] = array( + 'name' => $nameString['value'], + 'formula' => $formula, + ); + } + } + + + /** + * Read EXTERNSHEET record + */ + private function _readExternSheet() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // external sheet references provided for named cells + if ($this->_version == self::XLS_BIFF8) { + // offset: 0; size: 2; number of following ref structures + $nm = self::_GetInt2d($recordData, 0); + for ($i = 0; $i < $nm; ++$i) { + $this->_ref[] = array( + // offset: 2 + 6 * $i; index to EXTERNALBOOK record + 'externalBookIndex' => self::_GetInt2d($recordData, 2 + 6 * $i), + // offset: 4 + 6 * $i; index to first sheet in EXTERNALBOOK record + 'firstSheetIndex' => self::_GetInt2d($recordData, 4 + 6 * $i), + // offset: 6 + 6 * $i; index to last sheet in EXTERNALBOOK record + 'lastSheetIndex' => self::_GetInt2d($recordData, 6 + 6 * $i), + ); + } + } + } + + + /** + * DEFINEDNAME + * + * This record is part of a Link Table. It contains the name + * and the token array of an internal defined name. Token + * arrays of defined names contain tokens with aberrant + * token classes. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readDefinedName() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_version == self::XLS_BIFF8) { + // retrieves named cells + + // offset: 0; size: 2; option flags + $opts = self::_GetInt2d($recordData, 0); + + // bit: 5; mask: 0x0020; 0 = user-defined name, 1 = built-in-name + $isBuiltInName = (0x0020 & $opts) >> 5; + + // offset: 2; size: 1; keyboard shortcut + + // offset: 3; size: 1; length of the name (character count) + $nlen = ord($recordData{3}); + + // offset: 4; size: 2; size of the formula data (it can happen that this is zero) + // note: there can also be additional data, this is not included in $flen + $flen = self::_GetInt2d($recordData, 4); + + // offset: 8; size: 2; 0=Global name, otherwise index to sheet (1-based) + $scope = self::_GetInt2d($recordData, 8); + + // offset: 14; size: var; Name (Unicode string without length field) + $string = self::_readUnicodeString(substr($recordData, 14), $nlen); + + // offset: var; size: $flen; formula data + $offset = 14 + $string['size']; + $formulaStructure = pack('v', $flen) . substr($recordData, $offset); + + try { + $formula = $this->_getFormulaFromStructure($formulaStructure); + } catch (PHPExcel_Exception $e) { + $formula = ''; + } + + $this->_definedname[] = array( + 'isBuiltInName' => $isBuiltInName, + 'name' => $string['value'], + 'formula' => $formula, + 'scope' => $scope, + ); + } + } + + + /** + * Read MSODRAWINGGROUP record + */ + private function _readMsoDrawingGroup() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + + // get spliced record data + $splicedRecordData = $this->_getSplicedRecordData(); + $recordData = $splicedRecordData['recordData']; + + $this->_drawingGroupData .= $recordData; + } + + + /** + * SST - Shared String Table + * + * This record contains a list of all strings used anywhere + * in the workbook. Each string occurs only once. The + * workbook uses indexes into the list to reference the + * strings. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + **/ + private function _readSst() + { + // offset within (spliced) record data + $pos = 0; + + // get spliced record data + $splicedRecordData = $this->_getSplicedRecordData(); + + $recordData = $splicedRecordData['recordData']; + $spliceOffsets = $splicedRecordData['spliceOffsets']; + + // offset: 0; size: 4; total number of strings in the workbook + $pos += 4; + + // offset: 4; size: 4; number of following strings ($nm) + $nm = self::_GetInt4d($recordData, 4); + $pos += 4; + + // loop through the Unicode strings (16-bit length) + for ($i = 0; $i < $nm; ++$i) { + + // number of characters in the Unicode string + $numChars = self::_GetInt2d($recordData, $pos); + $pos += 2; + + // option flags + $optionFlags = ord($recordData{$pos}); + ++$pos; + + // bit: 0; mask: 0x01; 0 = compressed; 1 = uncompressed + $isCompressed = (($optionFlags & 0x01) == 0) ; + + // bit: 2; mask: 0x02; 0 = ordinary; 1 = Asian phonetic + $hasAsian = (($optionFlags & 0x04) != 0); + + // bit: 3; mask: 0x03; 0 = ordinary; 1 = Rich-Text + $hasRichText = (($optionFlags & 0x08) != 0); + + if ($hasRichText) { + // number of Rich-Text formatting runs + $formattingRuns = self::_GetInt2d($recordData, $pos); + $pos += 2; + } + + if ($hasAsian) { + // size of Asian phonetic setting + $extendedRunLength = self::_GetInt4d($recordData, $pos); + $pos += 4; + } + + // expected byte length of character array if not split + $len = ($isCompressed) ? $numChars : $numChars * 2; + + // look up limit position + foreach ($spliceOffsets as $spliceOffset) { + // it can happen that the string is empty, therefore we need + // <= and not just < + if ($pos <= $spliceOffset) { + $limitpos = $spliceOffset; + break; + } + } + + if ($pos + $len <= $limitpos) { + // character array is not split between records + + $retstr = substr($recordData, $pos, $len); + $pos += $len; + + } else { + // character array is split between records + + // first part of character array + $retstr = substr($recordData, $pos, $limitpos - $pos); + + $bytesRead = $limitpos - $pos; + + // remaining characters in Unicode string + $charsLeft = $numChars - (($isCompressed) ? $bytesRead : ($bytesRead / 2)); + + $pos = $limitpos; + + // keep reading the characters + while ($charsLeft > 0) { + + // look up next limit position, in case the string span more than one continue record + foreach ($spliceOffsets as $spliceOffset) { + if ($pos < $spliceOffset) { + $limitpos = $spliceOffset; + break; + } + } + + // repeated option flags + // OpenOffice.org documentation 5.21 + $option = ord($recordData{$pos}); + ++$pos; + + if ($isCompressed && ($option == 0)) { + // 1st fragment compressed + // this fragment compressed + $len = min($charsLeft, $limitpos - $pos); + $retstr .= substr($recordData, $pos, $len); + $charsLeft -= $len; + $isCompressed = true; + + } elseif (!$isCompressed && ($option != 0)) { + // 1st fragment uncompressed + // this fragment uncompressed + $len = min($charsLeft * 2, $limitpos - $pos); + $retstr .= substr($recordData, $pos, $len); + $charsLeft -= $len / 2; + $isCompressed = false; + + } elseif (!$isCompressed && ($option == 0)) { + // 1st fragment uncompressed + // this fragment compressed + $len = min($charsLeft, $limitpos - $pos); + for ($j = 0; $j < $len; ++$j) { + $retstr .= $recordData{$pos + $j} . chr(0); + } + $charsLeft -= $len; + $isCompressed = false; + + } else { + // 1st fragment compressed + // this fragment uncompressed + $newstr = ''; + for ($j = 0; $j < strlen($retstr); ++$j) { + $newstr .= $retstr[$j] . chr(0); + } + $retstr = $newstr; + $len = min($charsLeft * 2, $limitpos - $pos); + $retstr .= substr($recordData, $pos, $len); + $charsLeft -= $len / 2; + $isCompressed = false; + } + + $pos += $len; + } + } + + // convert to UTF-8 + $retstr = self::_encodeUTF16($retstr, $isCompressed); + + // read additional Rich-Text information, if any + $fmtRuns = array(); + if ($hasRichText) { + // list of formatting runs + for ($j = 0; $j < $formattingRuns; ++$j) { + // first formatted character; zero-based + $charPos = self::_GetInt2d($recordData, $pos + $j * 4); + + // index to font record + $fontIndex = self::_GetInt2d($recordData, $pos + 2 + $j * 4); + + $fmtRuns[] = array( + 'charPos' => $charPos, + 'fontIndex' => $fontIndex, + ); + } + $pos += 4 * $formattingRuns; + } + + // read additional Asian phonetics information, if any + if ($hasAsian) { + // For Asian phonetic settings, we skip the extended string data + $pos += $extendedRunLength; + } + + // store the shared sting + $this->_sst[] = array( + 'value' => $retstr, + 'fmtRuns' => $fmtRuns, + ); + } + + // _getSplicedRecordData() takes care of moving current position in data stream + } + + + /** + * Read PRINTGRIDLINES record + */ + private function _readPrintGridlines() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_version == self::XLS_BIFF8 && !$this->_readDataOnly) { + // offset: 0; size: 2; 0 = do not print sheet grid lines; 1 = print sheet gridlines + $printGridlines = (bool) self::_GetInt2d($recordData, 0); + $this->_phpSheet->setPrintGridlines($printGridlines); + } + } + + + /** + * Read DEFAULTROWHEIGHT record + */ + private function _readDefaultRowHeight() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; option flags + // offset: 2; size: 2; default height for unused rows, (twips 1/20 point) + $height = self::_GetInt2d($recordData, 2); + $this->_phpSheet->getDefaultRowDimension()->setRowHeight($height / 20); + } + + + /** + * Read SHEETPR record + */ + private function _readSheetPr() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2 + + // bit: 6; mask: 0x0040; 0 = outline buttons above outline group + $isSummaryBelow = (0x0040 & self::_GetInt2d($recordData, 0)) >> 6; + $this->_phpSheet->setShowSummaryBelow($isSummaryBelow); + + // bit: 7; mask: 0x0080; 0 = outline buttons left of outline group + $isSummaryRight = (0x0080 & self::_GetInt2d($recordData, 0)) >> 7; + $this->_phpSheet->setShowSummaryRight($isSummaryRight); + + // bit: 8; mask: 0x100; 0 = scale printout in percent, 1 = fit printout to number of pages + // this corresponds to radio button setting in page setup dialog in Excel + $this->_isFitToPages = (bool) ((0x0100 & self::_GetInt2d($recordData, 0)) >> 8); + } + + + /** + * Read HORIZONTALPAGEBREAKS record + */ + private function _readHorizontalPageBreaks() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_version == self::XLS_BIFF8 && !$this->_readDataOnly) { + + // offset: 0; size: 2; number of the following row index structures + $nm = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 6 * $nm; list of $nm row index structures + for ($i = 0; $i < $nm; ++$i) { + $r = self::_GetInt2d($recordData, 2 + 6 * $i); + $cf = self::_GetInt2d($recordData, 2 + 6 * $i + 2); + $cl = self::_GetInt2d($recordData, 2 + 6 * $i + 4); + + // not sure why two column indexes are necessary? + $this->_phpSheet->setBreakByColumnAndRow($cf, $r, PHPExcel_Worksheet::BREAK_ROW); + } + } + } + + + /** + * Read VERTICALPAGEBREAKS record + */ + private function _readVerticalPageBreaks() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_version == self::XLS_BIFF8 && !$this->_readDataOnly) { + // offset: 0; size: 2; number of the following column index structures + $nm = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 6 * $nm; list of $nm row index structures + for ($i = 0; $i < $nm; ++$i) { + $c = self::_GetInt2d($recordData, 2 + 6 * $i); + $rf = self::_GetInt2d($recordData, 2 + 6 * $i + 2); + $rl = self::_GetInt2d($recordData, 2 + 6 * $i + 4); + + // not sure why two row indexes are necessary? + $this->_phpSheet->setBreakByColumnAndRow($c, $rf, PHPExcel_Worksheet::BREAK_COLUMN); + } + } + } + + + /** + * Read HEADER record + */ + private function _readHeader() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: var + // realized that $recordData can be empty even when record exists + if ($recordData) { + if ($this->_version == self::XLS_BIFF8) { + $string = self::_readUnicodeStringLong($recordData); + } else { + $string = $this->_readByteStringShort($recordData); + } + + $this->_phpSheet->getHeaderFooter()->setOddHeader($string['value']); + $this->_phpSheet->getHeaderFooter()->setEvenHeader($string['value']); + } + } + } + + + /** + * Read FOOTER record + */ + private function _readFooter() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: var + // realized that $recordData can be empty even when record exists + if ($recordData) { + if ($this->_version == self::XLS_BIFF8) { + $string = self::_readUnicodeStringLong($recordData); + } else { + $string = $this->_readByteStringShort($recordData); + } + $this->_phpSheet->getHeaderFooter()->setOddFooter($string['value']); + $this->_phpSheet->getHeaderFooter()->setEvenFooter($string['value']); + } + } + } + + + /** + * Read HCENTER record + */ + private function _readHcenter() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; 0 = print sheet left aligned, 1 = print sheet centered horizontally + $isHorizontalCentered = (bool) self::_GetInt2d($recordData, 0); + + $this->_phpSheet->getPageSetup()->setHorizontalCentered($isHorizontalCentered); + } + } + + + /** + * Read VCENTER record + */ + private function _readVcenter() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; 0 = print sheet aligned at top page border, 1 = print sheet vertically centered + $isVerticalCentered = (bool) self::_GetInt2d($recordData, 0); + + $this->_phpSheet->getPageSetup()->setVerticalCentered($isVerticalCentered); + } + } + + + /** + * Read LEFTMARGIN record + */ + private function _readLeftMargin() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 8 + $this->_phpSheet->getPageMargins()->setLeft(self::_extractNumber($recordData)); + } + } + + + /** + * Read RIGHTMARGIN record + */ + private function _readRightMargin() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 8 + $this->_phpSheet->getPageMargins()->setRight(self::_extractNumber($recordData)); + } + } + + + /** + * Read TOPMARGIN record + */ + private function _readTopMargin() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 8 + $this->_phpSheet->getPageMargins()->setTop(self::_extractNumber($recordData)); + } + } + + + /** + * Read BOTTOMMARGIN record + */ + private function _readBottomMargin() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 8 + $this->_phpSheet->getPageMargins()->setBottom(self::_extractNumber($recordData)); + } + } + + + /** + * Read PAGESETUP record + */ + private function _readPageSetup() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; paper size + $paperSize = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; scaling factor + $scale = self::_GetInt2d($recordData, 2); + + // offset: 6; size: 2; fit worksheet width to this number of pages, 0 = use as many as needed + $fitToWidth = self::_GetInt2d($recordData, 6); + + // offset: 8; size: 2; fit worksheet height to this number of pages, 0 = use as many as needed + $fitToHeight = self::_GetInt2d($recordData, 8); + + // offset: 10; size: 2; option flags + + // bit: 1; mask: 0x0002; 0=landscape, 1=portrait + $isPortrait = (0x0002 & self::_GetInt2d($recordData, 10)) >> 1; + + // bit: 2; mask: 0x0004; 1= paper size, scaling factor, paper orient. not init + // when this bit is set, do not use flags for those properties + $isNotInit = (0x0004 & self::_GetInt2d($recordData, 10)) >> 2; + + if (!$isNotInit) { + $this->_phpSheet->getPageSetup()->setPaperSize($paperSize); + switch ($isPortrait) { + case 0: $this->_phpSheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); break; + case 1: $this->_phpSheet->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); break; + } + + $this->_phpSheet->getPageSetup()->setScale($scale, false); + $this->_phpSheet->getPageSetup()->setFitToPage((bool) $this->_isFitToPages); + $this->_phpSheet->getPageSetup()->setFitToWidth($fitToWidth, false); + $this->_phpSheet->getPageSetup()->setFitToHeight($fitToHeight, false); + } + + // offset: 16; size: 8; header margin (IEEE 754 floating-point value) + $marginHeader = self::_extractNumber(substr($recordData, 16, 8)); + $this->_phpSheet->getPageMargins()->setHeader($marginHeader); + + // offset: 24; size: 8; footer margin (IEEE 754 floating-point value) + $marginFooter = self::_extractNumber(substr($recordData, 24, 8)); + $this->_phpSheet->getPageMargins()->setFooter($marginFooter); + } + } + + + /** + * PROTECT - Sheet protection (BIFF2 through BIFF8) + * if this record is omitted, then it also means no sheet protection + */ + private function _readProtect() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly) { + return; + } + + // offset: 0; size: 2; + + // bit 0, mask 0x01; 1 = sheet is protected + $bool = (0x01 & self::_GetInt2d($recordData, 0)) >> 0; + $this->_phpSheet->getProtection()->setSheet((bool)$bool); + } + + + /** + * SCENPROTECT + */ + private function _readScenProtect() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly) { + return; + } + + // offset: 0; size: 2; + + // bit: 0, mask 0x01; 1 = scenarios are protected + $bool = (0x01 & self::_GetInt2d($recordData, 0)) >> 0; + + $this->_phpSheet->getProtection()->setScenarios((bool)$bool); + } + + + /** + * OBJECTPROTECT + */ + private function _readObjectProtect() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly) { + return; + } + + // offset: 0; size: 2; + + // bit: 0, mask 0x01; 1 = objects are protected + $bool = (0x01 & self::_GetInt2d($recordData, 0)) >> 0; + + $this->_phpSheet->getProtection()->setObjects((bool)$bool); + } + + + /** + * PASSWORD - Sheet protection (hashed) password (BIFF2 through BIFF8) + */ + private function _readPassword() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; 16-bit hash value of password + $password = strtoupper(dechex(self::_GetInt2d($recordData, 0))); // the hashed password + $this->_phpSheet->getProtection()->setPassword($password, true); + } + } + + + /** + * Read DEFCOLWIDTH record + */ + private function _readDefColWidth() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; default column width + $width = self::_GetInt2d($recordData, 0); + if ($width != 8) { + $this->_phpSheet->getDefaultColumnDimension()->setWidth($width); + } + } + + + /** + * Read COLINFO record + */ + private function _readColInfo() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; index to first column in range + $fc = self::_GetInt2d($recordData, 0); // first column index + + // offset: 2; size: 2; index to last column in range + $lc = self::_GetInt2d($recordData, 2); // first column index + + // offset: 4; size: 2; width of the column in 1/256 of the width of the zero character + $width = self::_GetInt2d($recordData, 4); + + // offset: 6; size: 2; index to XF record for default column formatting + $xfIndex = self::_GetInt2d($recordData, 6); + + // offset: 8; size: 2; option flags + + // bit: 0; mask: 0x0001; 1= columns are hidden + $isHidden = (0x0001 & self::_GetInt2d($recordData, 8)) >> 0; + + // bit: 10-8; mask: 0x0700; outline level of the columns (0 = no outline) + $level = (0x0700 & self::_GetInt2d($recordData, 8)) >> 8; + + // bit: 12; mask: 0x1000; 1 = collapsed + $isCollapsed = (0x1000 & self::_GetInt2d($recordData, 8)) >> 12; + + // offset: 10; size: 2; not used + + for ($i = $fc; $i <= $lc; ++$i) { + if ($lc == 255 || $lc == 256) { + $this->_phpSheet->getDefaultColumnDimension()->setWidth($width / 256); + break; + } + $this->_phpSheet->getColumnDimensionByColumn($i)->setWidth($width / 256); + $this->_phpSheet->getColumnDimensionByColumn($i)->setVisible(!$isHidden); + $this->_phpSheet->getColumnDimensionByColumn($i)->setOutlineLevel($level); + $this->_phpSheet->getColumnDimensionByColumn($i)->setCollapsed($isCollapsed); + $this->_phpSheet->getColumnDimensionByColumn($i)->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + } + } + + + /** + * ROW + * + * This record contains the properties of a single row in a + * sheet. Rows and cells in a sheet are divided into blocks + * of 32 rows. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readRow() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; index of this row + $r = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; index to column of the first cell which is described by a cell record + + // offset: 4; size: 2; index to column of the last cell which is described by a cell record, increased by 1 + + // offset: 6; size: 2; + + // bit: 14-0; mask: 0x7FFF; height of the row, in twips = 1/20 of a point + $height = (0x7FFF & self::_GetInt2d($recordData, 6)) >> 0; + + // bit: 15: mask: 0x8000; 0 = row has custom height; 1= row has default height + $useDefaultHeight = (0x8000 & self::_GetInt2d($recordData, 6)) >> 15; + + if (!$useDefaultHeight) { + $this->_phpSheet->getRowDimension($r + 1)->setRowHeight($height / 20); + } + + // offset: 8; size: 2; not used + + // offset: 10; size: 2; not used in BIFF5-BIFF8 + + // offset: 12; size: 4; option flags and default row formatting + + // bit: 2-0: mask: 0x00000007; outline level of the row + $level = (0x00000007 & self::_GetInt4d($recordData, 12)) >> 0; + $this->_phpSheet->getRowDimension($r + 1)->setOutlineLevel($level); + + // bit: 4; mask: 0x00000010; 1 = outline group start or ends here... and is collapsed + $isCollapsed = (0x00000010 & self::_GetInt4d($recordData, 12)) >> 4; + $this->_phpSheet->getRowDimension($r + 1)->setCollapsed($isCollapsed); + + // bit: 5; mask: 0x00000020; 1 = row is hidden + $isHidden = (0x00000020 & self::_GetInt4d($recordData, 12)) >> 5; + $this->_phpSheet->getRowDimension($r + 1)->setVisible(!$isHidden); + + // bit: 7; mask: 0x00000080; 1 = row has explicit format + $hasExplicitFormat = (0x00000080 & self::_GetInt4d($recordData, 12)) >> 7; + + // bit: 27-16; mask: 0x0FFF0000; only applies when hasExplicitFormat = 1; index to XF record + $xfIndex = (0x0FFF0000 & self::_GetInt4d($recordData, 12)) >> 16; + + if ($hasExplicitFormat) { + $this->_phpSheet->getRowDimension($r + 1)->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + } + } + + + /** + * Read RK record + * This record represents a cell that contains an RK value + * (encoded integer or floating-point value). If a + * floating-point value cannot be encoded to an RK value, + * a NUMBER record will be written. This record replaces the + * record INTEGER written in BIFF2. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readRk() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; index to row + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; index to column + $column = self::_GetInt2d($recordData, 2); + $columnString = PHPExcel_Cell::stringFromColumnIndex($column); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + // offset: 4; size: 2; index to XF record + $xfIndex = self::_GetInt2d($recordData, 4); + + // offset: 6; size: 4; RK value + $rknum = self::_GetInt4d($recordData, 6); + $numValue = self::_GetIEEE754($rknum); + + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + if (!$this->_readDataOnly) { + // add style information + $cell->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + + // add cell + $cell->setValueExplicit($numValue, PHPExcel_Cell_DataType::TYPE_NUMERIC); + } + } + + + /** + * Read LABELSST record + * This record represents a cell that contains a string. It + * replaces the LABEL record and RSTRING record used in + * BIFF2-BIFF5. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readLabelSst() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; index to row + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; index to column + $column = self::_GetInt2d($recordData, 2); + $columnString = PHPExcel_Cell::stringFromColumnIndex($column); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + // offset: 4; size: 2; index to XF record + $xfIndex = self::_GetInt2d($recordData, 4); + + // offset: 6; size: 4; index to SST record + $index = self::_GetInt4d($recordData, 6); + + // add cell + if (($fmtRuns = $this->_sst[$index]['fmtRuns']) && !$this->_readDataOnly) { + // then we should treat as rich text + $richText = new PHPExcel_RichText(); + $charPos = 0; + $sstCount = count($this->_sst[$index]['fmtRuns']); + for ($i = 0; $i <= $sstCount; ++$i) { + if (isset($fmtRuns[$i])) { + $text = PHPExcel_Shared_String::Substring($this->_sst[$index]['value'], $charPos, $fmtRuns[$i]['charPos'] - $charPos); + $charPos = $fmtRuns[$i]['charPos']; + } else { + $text = PHPExcel_Shared_String::Substring($this->_sst[$index]['value'], $charPos, PHPExcel_Shared_String::CountCharacters($this->_sst[$index]['value'])); + } + + if (PHPExcel_Shared_String::CountCharacters($text) > 0) { + if ($i == 0) { // first text run, no style + $richText->createText($text); + } else { + $textRun = $richText->createTextRun($text); + if (isset($fmtRuns[$i - 1])) { + if ($fmtRuns[$i - 1]['fontIndex'] < 4) { + $fontIndex = $fmtRuns[$i - 1]['fontIndex']; + } else { + // this has to do with that index 4 is omitted in all BIFF versions for some strange reason + // check the OpenOffice documentation of the FONT record + $fontIndex = $fmtRuns[$i - 1]['fontIndex'] - 1; + } + $textRun->setFont(clone $this->_objFonts[$fontIndex]); + } + } + } + } + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + $cell->setValueExplicit($richText, PHPExcel_Cell_DataType::TYPE_STRING); + } else { + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + $cell->setValueExplicit($this->_sst[$index]['value'], PHPExcel_Cell_DataType::TYPE_STRING); + } + + if (!$this->_readDataOnly) { + // add style information + $cell->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + } + } + + + /** + * Read MULRK record + * This record represents a cell range containing RK value + * cells. All cells are located in the same row. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readMulRk() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; index to row + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; index to first column + $colFirst = self::_GetInt2d($recordData, 2); + + // offset: var; size: 2; index to last column + $colLast = self::_GetInt2d($recordData, $length - 2); + $columns = $colLast - $colFirst + 1; + + // offset within record data + $offset = 4; + + for ($i = 0; $i < $columns; ++$i) { + $columnString = PHPExcel_Cell::stringFromColumnIndex($colFirst + $i); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + + // offset: var; size: 2; index to XF record + $xfIndex = self::_GetInt2d($recordData, $offset); + + // offset: var; size: 4; RK value + $numValue = self::_GetIEEE754(self::_GetInt4d($recordData, $offset + 2)); + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + if (!$this->_readDataOnly) { + // add style + $cell->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + + // add cell value + $cell->setValueExplicit($numValue, PHPExcel_Cell_DataType::TYPE_NUMERIC); + } + + $offset += 6; + } + } + + + /** + * Read NUMBER record + * This record represents a cell that contains a + * floating-point value. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readNumber() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; index to row + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size 2; index to column + $column = self::_GetInt2d($recordData, 2); + $columnString = PHPExcel_Cell::stringFromColumnIndex($column); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + // offset 4; size: 2; index to XF record + $xfIndex = self::_GetInt2d($recordData, 4); + + $numValue = self::_extractNumber(substr($recordData, 6, 8)); + + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + if (!$this->_readDataOnly) { + // add cell style + $cell->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + + // add cell value + $cell->setValueExplicit($numValue, PHPExcel_Cell_DataType::TYPE_NUMERIC); + } + } + + + /** + * Read FORMULA record + perhaps a following STRING record if formula result is a string + * This record contains the token array and the result of a + * formula cell. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readFormula() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; row index + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; col index + $column = self::_GetInt2d($recordData, 2); + $columnString = PHPExcel_Cell::stringFromColumnIndex($column); + + // offset: 20: size: variable; formula structure + $formulaStructure = substr($recordData, 20); + + // offset: 14: size: 2; option flags, recalculate always, recalculate on open etc. + $options = self::_GetInt2d($recordData, 14); + + // bit: 0; mask: 0x0001; 1 = recalculate always + // bit: 1; mask: 0x0002; 1 = calculate on open + // bit: 2; mask: 0x0008; 1 = part of a shared formula + $isPartOfSharedFormula = (bool) (0x0008 & $options); + + // WARNING: + // We can apparently not rely on $isPartOfSharedFormula. Even when $isPartOfSharedFormula = true + // the formula data may be ordinary formula data, therefore we need to check + // explicitly for the tExp token (0x01) + $isPartOfSharedFormula = $isPartOfSharedFormula && ord($formulaStructure{2}) == 0x01; + + if ($isPartOfSharedFormula) { + // part of shared formula which means there will be a formula with a tExp token and nothing else + // get the base cell, grab tExp token + $baseRow = self::_GetInt2d($formulaStructure, 3); + $baseCol = self::_GetInt2d($formulaStructure, 5); + $this->_baseCell = PHPExcel_Cell::stringFromColumnIndex($baseCol). ($baseRow + 1); + } + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + + if ($isPartOfSharedFormula) { + // formula is added to this cell after the sheet has been read + $this->_sharedFormulaParts[$columnString . ($row + 1)] = $this->_baseCell; + } + + // offset: 16: size: 4; not used + + // offset: 4; size: 2; XF index + $xfIndex = self::_GetInt2d($recordData, 4); + + // offset: 6; size: 8; result of the formula + if ( (ord($recordData{6}) == 0) + && (ord($recordData{12}) == 255) + && (ord($recordData{13}) == 255) ) { + + // String formula. Result follows in appended STRING record + $dataType = PHPExcel_Cell_DataType::TYPE_STRING; + + // read possible SHAREDFMLA record + $code = self::_GetInt2d($this->_data, $this->_pos); + if ($code == self::XLS_Type_SHAREDFMLA) { + $this->_readSharedFmla(); + } + + // read STRING record + $value = $this->_readString(); + + } elseif ((ord($recordData{6}) == 1) + && (ord($recordData{12}) == 255) + && (ord($recordData{13}) == 255)) { + + // Boolean formula. Result is in +2; 0=false, 1=true + $dataType = PHPExcel_Cell_DataType::TYPE_BOOL; + $value = (bool) ord($recordData{8}); + + } elseif ((ord($recordData{6}) == 2) + && (ord($recordData{12}) == 255) + && (ord($recordData{13}) == 255)) { + + // Error formula. Error code is in +2 + $dataType = PHPExcel_Cell_DataType::TYPE_ERROR; + $value = self::_mapErrorCode(ord($recordData{8})); + + } elseif ((ord($recordData{6}) == 3) + && (ord($recordData{12}) == 255) + && (ord($recordData{13}) == 255)) { + + // Formula result is a null string + $dataType = PHPExcel_Cell_DataType::TYPE_NULL; + $value = ''; + + } else { + + // forumla result is a number, first 14 bytes like _NUMBER record + $dataType = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $value = self::_extractNumber(substr($recordData, 6, 8)); + + } + + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + if (!$this->_readDataOnly) { + // add cell style + $cell->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + + // store the formula + if (!$isPartOfSharedFormula) { + // not part of shared formula + // add cell value. If we can read formula, populate with formula, otherwise just used cached value + try { + if ($this->_version != self::XLS_BIFF8) { + throw new PHPExcel_Reader_Exception('Not BIFF8. Can only read BIFF8 formulas'); + } + $formula = $this->_getFormulaFromStructure($formulaStructure); // get formula in human language + $cell->setValueExplicit('=' . $formula, PHPExcel_Cell_DataType::TYPE_FORMULA); + + } catch (PHPExcel_Exception $e) { + $cell->setValueExplicit($value, $dataType); + } + } else { + if ($this->_version == self::XLS_BIFF8) { + // do nothing at this point, formula id added later in the code + } else { + $cell->setValueExplicit($value, $dataType); + } + } + + // store the cached calculated value + $cell->setCalculatedValue($value); + } + } + + + /** + * Read a SHAREDFMLA record. This function just stores the binary shared formula in the reader, + * which usually contains relative references. + * These will be used to construct the formula in each shared formula part after the sheet is read. + */ + private function _readSharedFmla() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0, size: 6; cell range address of the area used by the shared formula, not used for anything + $cellRange = substr($recordData, 0, 6); + $cellRange = $this->_readBIFF5CellRangeAddressFixed($cellRange); // note: even BIFF8 uses BIFF5 syntax + + // offset: 6, size: 1; not used + + // offset: 7, size: 1; number of existing FORMULA records for this shared formula + $no = ord($recordData{7}); + + // offset: 8, size: var; Binary token array of the shared formula + $formula = substr($recordData, 8); + + // at this point we only store the shared formula for later use + $this->_sharedFormulas[$this->_baseCell] = $formula; + + } + + + /** + * Read a STRING record from current stream position and advance the stream pointer to next record + * This record is used for storing result from FORMULA record when it is a string, and + * it occurs directly after the FORMULA record + * + * @return string The string contents as UTF-8 + */ + private function _readString() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_version == self::XLS_BIFF8) { + $string = self::_readUnicodeStringLong($recordData); + $value = $string['value']; + } else { + $string = $this->_readByteStringLong($recordData); + $value = $string['value']; + } + + return $value; + } + + + /** + * Read BOOLERR record + * This record represents a Boolean value or error value + * cell. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readBoolErr() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; row index + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; column index + $column = self::_GetInt2d($recordData, 2); + $columnString = PHPExcel_Cell::stringFromColumnIndex($column); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + // offset: 4; size: 2; index to XF record + $xfIndex = self::_GetInt2d($recordData, 4); + + // offset: 6; size: 1; the boolean value or error value + $boolErr = ord($recordData{6}); + + // offset: 7; size: 1; 0=boolean; 1=error + $isError = ord($recordData{7}); + + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + switch ($isError) { + case 0: // boolean + $value = (bool) $boolErr; + + // add cell value + $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_BOOL); + break; + + case 1: // error type + $value = self::_mapErrorCode($boolErr); + + // add cell value + $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_ERROR); + break; + } + + if (!$this->_readDataOnly) { + // add cell style + $cell->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + } + } + + + /** + * Read MULBLANK record + * This record represents a cell range of empty cells. All + * cells are located in the same row + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readMulBlank() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; index to row + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; index to first column + $fc = self::_GetInt2d($recordData, 2); + + // offset: 4; size: 2 x nc; list of indexes to XF records + // add style information + if (!$this->_readDataOnly) { + for ($i = 0; $i < $length / 2 - 3; ++$i) { + $columnString = PHPExcel_Cell::stringFromColumnIndex($fc + $i); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + $xfIndex = self::_GetInt2d($recordData, 4 + 2 * $i); + $this->_phpSheet->getCell($columnString . ($row + 1))->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + } + } + + // offset: 6; size 2; index to last column (not needed) + } + + + /** + * Read LABEL record + * This record represents a cell that contains a string. In + * BIFF8 it is usually replaced by the LABELSST record. + * Excel still uses this record, if it copies unformatted + * text cells to the clipboard. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readLabel() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; index to row + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; index to column + $column = self::_GetInt2d($recordData, 2); + $columnString = PHPExcel_Cell::stringFromColumnIndex($column); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + // offset: 4; size: 2; XF index + $xfIndex = self::_GetInt2d($recordData, 4); + + // add cell value + // todo: what if string is very long? continue record + if ($this->_version == self::XLS_BIFF8) { + $string = self::_readUnicodeStringLong(substr($recordData, 6)); + $value = $string['value']; + } else { + $string = $this->_readByteStringLong(substr($recordData, 6)); + $value = $string['value']; + } + $cell = $this->_phpSheet->getCell($columnString . ($row + 1)); + $cell->setValueExplicit($value, PHPExcel_Cell_DataType::TYPE_STRING); + + if (!$this->_readDataOnly) { + // add cell style + $cell->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + } + } + + + /** + * Read BLANK record + */ + private function _readBlank() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; row index + $row = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; col index + $col = self::_GetInt2d($recordData, 2); + $columnString = PHPExcel_Cell::stringFromColumnIndex($col); + + // Read cell? + if (($this->getReadFilter() !== NULL) && $this->getReadFilter()->readCell($columnString, $row + 1, $this->_phpSheet->getTitle()) ) { + // offset: 4; size: 2; XF index + $xfIndex = self::_GetInt2d($recordData, 4); + + // add style information + if (!$this->_readDataOnly) { + $this->_phpSheet->getCell($columnString . ($row + 1))->setXfIndex($this->_mapCellXfIndex[$xfIndex]); + } + } + + } + + + /** + * Read MSODRAWING record + */ + private function _readMsoDrawing() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + + // get spliced record data + $splicedRecordData = $this->_getSplicedRecordData(); + $recordData = $splicedRecordData['recordData']; + + $this->_drawingData .= $recordData; + } + + + /** + * Read OBJ record + */ + private function _readObj() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly || $this->_version != self::XLS_BIFF8) { + return; + } + + // recordData consists of an array of subrecords looking like this: + // ft: 2 bytes; ftCmo type (0x15) + // cb: 2 bytes; size in bytes of ftCmo data + // ot: 2 bytes; Object Type + // id: 2 bytes; Object id number + // grbit: 2 bytes; Option Flags + // data: var; subrecord data + + // for now, we are just interested in the second subrecord containing the object type + $ftCmoType = self::_GetInt2d($recordData, 0); + $cbCmoSize = self::_GetInt2d($recordData, 2); + $otObjType = self::_GetInt2d($recordData, 4); + $idObjID = self::_GetInt2d($recordData, 6); + $grbitOpts = self::_GetInt2d($recordData, 6); + + $this->_objs[] = array( + 'ftCmoType' => $ftCmoType, + 'cbCmoSize' => $cbCmoSize, + 'otObjType' => $otObjType, + 'idObjID' => $idObjID, + 'grbitOpts' => $grbitOpts + ); + $this->textObjRef = $idObjID; + +// echo '_readObj()
'; +// var_dump(end($this->_objs)); +// echo '
'; + } + + + /** + * Read WINDOW2 record + */ + private function _readWindow2() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; option flags + $options = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; index to first visible row + $firstVisibleRow = self::_GetInt2d($recordData, 2); + + // offset: 4; size: 2; index to first visible colum + $firstVisibleColumn = self::_GetInt2d($recordData, 4); + if ($this->_version === self::XLS_BIFF8) { + // offset: 8; size: 2; not used + // offset: 10; size: 2; cached magnification factor in page break preview (in percent); 0 = Default (60%) + // offset: 12; size: 2; cached magnification factor in normal view (in percent); 0 = Default (100%) + // offset: 14; size: 4; not used + $zoomscaleInPageBreakPreview = self::_GetInt2d($recordData, 10); + if ($zoomscaleInPageBreakPreview === 0) $zoomscaleInPageBreakPreview = 60; + $zoomscaleInNormalView = self::_GetInt2d($recordData, 12); + if ($zoomscaleInNormalView === 0) $zoomscaleInNormalView = 100; + } + + // bit: 1; mask: 0x0002; 0 = do not show gridlines, 1 = show gridlines + $showGridlines = (bool) ((0x0002 & $options) >> 1); + $this->_phpSheet->setShowGridlines($showGridlines); + + // bit: 2; mask: 0x0004; 0 = do not show headers, 1 = show headers + $showRowColHeaders = (bool) ((0x0004 & $options) >> 2); + $this->_phpSheet->setShowRowColHeaders($showRowColHeaders); + + // bit: 3; mask: 0x0008; 0 = panes are not frozen, 1 = panes are frozen + $this->_frozen = (bool) ((0x0008 & $options) >> 3); + + // bit: 6; mask: 0x0040; 0 = columns from left to right, 1 = columns from right to left + $this->_phpSheet->setRightToLeft((bool)((0x0040 & $options) >> 6)); + + // bit: 10; mask: 0x0400; 0 = sheet not active, 1 = sheet active + $isActive = (bool) ((0x0400 & $options) >> 10); + if ($isActive) { + $this->_phpExcel->setActiveSheetIndex($this->_phpExcel->getIndex($this->_phpSheet)); + } + + // bit: 11; mask: 0x0800; 0 = normal view, 1 = page break view + $isPageBreakPreview = (bool) ((0x0800 & $options) >> 11); + + //FIXME: set $firstVisibleRow and $firstVisibleColumn + + if ($this->_phpSheet->getSheetView()->getView() !== PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_LAYOUT) { + //NOTE: this setting is inferior to page layout view(Excel2007-) + $view = $isPageBreakPreview? PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_BREAK_PREVIEW : + PHPExcel_Worksheet_SheetView::SHEETVIEW_NORMAL; + $this->_phpSheet->getSheetView()->setView($view); + if ($this->_version === self::XLS_BIFF8) { + $zoomScale = $isPageBreakPreview? $zoomscaleInPageBreakPreview : $zoomscaleInNormalView; + $this->_phpSheet->getSheetView()->setZoomScale($zoomScale); + $this->_phpSheet->getSheetView()->setZoomScaleNormal($zoomscaleInNormalView); + } + } + } + + /** + * Read PLV Record(Created by Excel2007 or upper) + */ + private function _readPageLayoutView(){ + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + //var_dump(unpack("vrt/vgrbitFrt/V2reserved/vwScalePLV/vgrbit", $recordData)); + + // offset: 0; size: 2; rt + //->ignore + $rt = self::_GetInt2d($recordData, 0); + // offset: 2; size: 2; grbitfr + //->ignore + $grbitFrt = self::_GetInt2d($recordData, 2); + // offset: 4; size: 8; reserved + //->ignore + + // offset: 12; size 2; zoom scale + $wScalePLV = self::_GetInt2d($recordData, 12); + // offset: 14; size 2; grbit + $grbit = self::_GetInt2d($recordData, 14); + + // decomprise grbit + $fPageLayoutView = $grbit & 0x01; + $fRulerVisible = ($grbit >> 1) & 0x01; //no support + $fWhitespaceHidden = ($grbit >> 3) & 0x01; //no support + + if ($fPageLayoutView === 1) { + $this->_phpSheet->getSheetView()->setView(PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_LAYOUT); + $this->_phpSheet->getSheetView()->setZoomScale($wScalePLV); //set by Excel2007 only if SHEETVIEW_PAGE_LAYOUT + } + //otherwise, we cannot know whether SHEETVIEW_PAGE_LAYOUT or SHEETVIEW_PAGE_BREAK_PREVIEW. + } + + /** + * Read SCL record + */ + private function _readScl() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // offset: 0; size: 2; numerator of the view magnification + $numerator = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; numerator of the view magnification + $denumerator = self::_GetInt2d($recordData, 2); + + // set the zoom scale (in percent) + $this->_phpSheet->getSheetView()->setZoomScale($numerator * 100 / $denumerator); + } + + + /** + * Read PANE record + */ + private function _readPane() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; position of vertical split + $px = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; position of horizontal split + $py = self::_GetInt2d($recordData, 2); + + if ($this->_frozen) { + // frozen panes + $this->_phpSheet->freezePane(PHPExcel_Cell::stringFromColumnIndex($px) . ($py + 1)); + } else { + // unfrozen panes; split windows; not supported by PHPExcel core + } + } + } + + + /** + * Read SELECTION record. There is one such record for each pane in the sheet. + */ + private function _readSelection() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 1; pane identifier + $paneId = ord($recordData{0}); + + // offset: 1; size: 2; index to row of the active cell + $r = self::_GetInt2d($recordData, 1); + + // offset: 3; size: 2; index to column of the active cell + $c = self::_GetInt2d($recordData, 3); + + // offset: 5; size: 2; index into the following cell range list to the + // entry that contains the active cell + $index = self::_GetInt2d($recordData, 5); + + // offset: 7; size: var; cell range address list containing all selected cell ranges + $data = substr($recordData, 7); + $cellRangeAddressList = $this->_readBIFF5CellRangeAddressList($data); // note: also BIFF8 uses BIFF5 syntax + + $selectedCells = $cellRangeAddressList['cellRangeAddresses'][0]; + + // first row '1' + last row '16384' indicates that full column is selected (apparently also in BIFF8!) + if (preg_match('/^([A-Z]+1\:[A-Z]+)16384$/', $selectedCells)) { + $selectedCells = preg_replace('/^([A-Z]+1\:[A-Z]+)16384$/', '${1}1048576', $selectedCells); + } + + // first row '1' + last row '65536' indicates that full column is selected + if (preg_match('/^([A-Z]+1\:[A-Z]+)65536$/', $selectedCells)) { + $selectedCells = preg_replace('/^([A-Z]+1\:[A-Z]+)65536$/', '${1}1048576', $selectedCells); + } + + // first column 'A' + last column 'IV' indicates that full row is selected + if (preg_match('/^(A[0-9]+\:)IV([0-9]+)$/', $selectedCells)) { + $selectedCells = preg_replace('/^(A[0-9]+\:)IV([0-9]+)$/', '${1}XFD${2}', $selectedCells); + } + + $this->_phpSheet->setSelectedCells($selectedCells); + } + } + + + private function _includeCellRangeFiltered($cellRangeAddress) + { + $includeCellRange = true; + if ($this->getReadFilter() !== NULL) { + $includeCellRange = false; + $rangeBoundaries = PHPExcel_Cell::getRangeBoundaries($cellRangeAddress); + $rangeBoundaries[1][0]++; + for ($row = $rangeBoundaries[0][1]; $row <= $rangeBoundaries[1][1]; $row++) { + for ($column = $rangeBoundaries[0][0]; $column != $rangeBoundaries[1][0]; $column++) { + if ($this->getReadFilter()->readCell($column, $row, $this->_phpSheet->getTitle())) { + $includeCellRange = true; + break 2; + } + } + } + } + return $includeCellRange; + } + + + /** + * MERGEDCELLS + * + * This record contains the addresses of merged cell ranges + * in the current sheet. + * + * -- "OpenOffice.org's Documentation of the Microsoft + * Excel File Format" + */ + private function _readMergedCells() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_version == self::XLS_BIFF8 && !$this->_readDataOnly) { + $cellRangeAddressList = $this->_readBIFF8CellRangeAddressList($recordData); + foreach ($cellRangeAddressList['cellRangeAddresses'] as $cellRangeAddress) { + if ((strpos($cellRangeAddress,':') !== FALSE) && + ($this->_includeCellRangeFiltered($cellRangeAddress))) { + $this->_phpSheet->mergeCells($cellRangeAddress); + } + } + } + } + + + /** + * Read HYPERLINK record + */ + private function _readHyperLink() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer forward to next record + $this->_pos += 4 + $length; + + if (!$this->_readDataOnly) { + // offset: 0; size: 8; cell range address of all cells containing this hyperlink + try { + $cellRange = $this->_readBIFF8CellRangeAddressFixed($recordData, 0, 8); + } catch (PHPExcel_Exception $e) { + return; + } + + // offset: 8, size: 16; GUID of StdLink + + // offset: 24, size: 4; unknown value + + // offset: 28, size: 4; option flags + + // bit: 0; mask: 0x00000001; 0 = no link or extant, 1 = file link or URL + $isFileLinkOrUrl = (0x00000001 & self::_GetInt2d($recordData, 28)) >> 0; + + // bit: 1; mask: 0x00000002; 0 = relative path, 1 = absolute path or URL + $isAbsPathOrUrl = (0x00000001 & self::_GetInt2d($recordData, 28)) >> 1; + + // bit: 2 (and 4); mask: 0x00000014; 0 = no description + $hasDesc = (0x00000014 & self::_GetInt2d($recordData, 28)) >> 2; + + // bit: 3; mask: 0x00000008; 0 = no text, 1 = has text + $hasText = (0x00000008 & self::_GetInt2d($recordData, 28)) >> 3; + + // bit: 7; mask: 0x00000080; 0 = no target frame, 1 = has target frame + $hasFrame = (0x00000080 & self::_GetInt2d($recordData, 28)) >> 7; + + // bit: 8; mask: 0x00000100; 0 = file link or URL, 1 = UNC path (inc. server name) + $isUNC = (0x00000100 & self::_GetInt2d($recordData, 28)) >> 8; + + // offset within record data + $offset = 32; + + if ($hasDesc) { + // offset: 32; size: var; character count of description text + $dl = self::_GetInt4d($recordData, 32); + // offset: 36; size: var; character array of description text, no Unicode string header, always 16-bit characters, zero terminated + $desc = self::_encodeUTF16(substr($recordData, 36, 2 * ($dl - 1)), false); + $offset += 4 + 2 * $dl; + } + if ($hasFrame) { + $fl = self::_GetInt4d($recordData, $offset); + $offset += 4 + 2 * $fl; + } + + // detect type of hyperlink (there are 4 types) + $hyperlinkType = null; + + if ($isUNC) { + $hyperlinkType = 'UNC'; + } else if (!$isFileLinkOrUrl) { + $hyperlinkType = 'workbook'; + } else if (ord($recordData{$offset}) == 0x03) { + $hyperlinkType = 'local'; + } else if (ord($recordData{$offset}) == 0xE0) { + $hyperlinkType = 'URL'; + } + + switch ($hyperlinkType) { + case 'URL': + // section 5.58.2: Hyperlink containing a URL + // e.g. http://example.org/index.php + + // offset: var; size: 16; GUID of URL Moniker + $offset += 16; + // offset: var; size: 4; size (in bytes) of character array of the URL including trailing zero word + $us = self::_GetInt4d($recordData, $offset); + $offset += 4; + // offset: var; size: $us; character array of the URL, no Unicode string header, always 16-bit characters, zero-terminated + $url = self::_encodeUTF16(substr($recordData, $offset, $us - 2), false); + $url .= $hasText ? '#' : ''; + $offset += $us; + break; + + case 'local': + // section 5.58.3: Hyperlink to local file + // examples: + // mydoc.txt + // ../../somedoc.xls#Sheet!A1 + + // offset: var; size: 16; GUI of File Moniker + $offset += 16; + + // offset: var; size: 2; directory up-level count. + $upLevelCount = self::_GetInt2d($recordData, $offset); + $offset += 2; + + // offset: var; size: 4; character count of the shortened file path and name, including trailing zero word + $sl = self::_GetInt4d($recordData, $offset); + $offset += 4; + + // offset: var; size: sl; character array of the shortened file path and name in 8.3-DOS-format (compressed Unicode string) + $shortenedFilePath = substr($recordData, $offset, $sl); + $shortenedFilePath = self::_encodeUTF16($shortenedFilePath, true); + $shortenedFilePath = substr($shortenedFilePath, 0, -1); // remove trailing zero + + $offset += $sl; + + // offset: var; size: 24; unknown sequence + $offset += 24; + + // extended file path + // offset: var; size: 4; size of the following file link field including string lenth mark + $sz = self::_GetInt4d($recordData, $offset); + $offset += 4; + + // only present if $sz > 0 + if ($sz > 0) { + // offset: var; size: 4; size of the character array of the extended file path and name + $xl = self::_GetInt4d($recordData, $offset); + $offset += 4; + + // offset: var; size 2; unknown + $offset += 2; + + // offset: var; size $xl; character array of the extended file path and name. + $extendedFilePath = substr($recordData, $offset, $xl); + $extendedFilePath = self::_encodeUTF16($extendedFilePath, false); + $offset += $xl; + } + + // construct the path + $url = str_repeat('..\\', $upLevelCount); + $url .= ($sz > 0) ? + $extendedFilePath : $shortenedFilePath; // use extended path if available + $url .= $hasText ? '#' : ''; + + break; + + + case 'UNC': + // section 5.58.4: Hyperlink to a File with UNC (Universal Naming Convention) Path + // todo: implement + return; + + case 'workbook': + // section 5.58.5: Hyperlink to the Current Workbook + // e.g. Sheet2!B1:C2, stored in text mark field + $url = 'sheet://'; + break; + + default: + return; + + } + + if ($hasText) { + // offset: var; size: 4; character count of text mark including trailing zero word + $tl = self::_GetInt4d($recordData, $offset); + $offset += 4; + // offset: var; size: var; character array of the text mark without the # sign, no Unicode header, always 16-bit characters, zero-terminated + $text = self::_encodeUTF16(substr($recordData, $offset, 2 * ($tl - 1)), false); + $url .= $text; + } + + // apply the hyperlink to all the relevant cells + foreach (PHPExcel_Cell::extractAllCellReferencesInRange($cellRange) as $coordinate) { + $this->_phpSheet->getCell($coordinate)->getHyperLink()->setUrl($url); + } + } + } + + + /** + * Read DATAVALIDATIONS record + */ + private function _readDataValidations() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer forward to next record + $this->_pos += 4 + $length; + } + + + /** + * Read DATAVALIDATION record + */ + private function _readDataValidation() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer forward to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly) { + return; + } + + // offset: 0; size: 4; Options + $options = self::_GetInt4d($recordData, 0); + + // bit: 0-3; mask: 0x0000000F; type + $type = (0x0000000F & $options) >> 0; + switch ($type) { + case 0x00: $type = PHPExcel_Cell_DataValidation::TYPE_NONE; break; + case 0x01: $type = PHPExcel_Cell_DataValidation::TYPE_WHOLE; break; + case 0x02: $type = PHPExcel_Cell_DataValidation::TYPE_DECIMAL; break; + case 0x03: $type = PHPExcel_Cell_DataValidation::TYPE_LIST; break; + case 0x04: $type = PHPExcel_Cell_DataValidation::TYPE_DATE; break; + case 0x05: $type = PHPExcel_Cell_DataValidation::TYPE_TIME; break; + case 0x06: $type = PHPExcel_Cell_DataValidation::TYPE_TEXTLENGTH; break; + case 0x07: $type = PHPExcel_Cell_DataValidation::TYPE_CUSTOM; break; + } + + // bit: 4-6; mask: 0x00000070; error type + $errorStyle = (0x00000070 & $options) >> 4; + switch ($errorStyle) { + case 0x00: $errorStyle = PHPExcel_Cell_DataValidation::STYLE_STOP; break; + case 0x01: $errorStyle = PHPExcel_Cell_DataValidation::STYLE_WARNING; break; + case 0x02: $errorStyle = PHPExcel_Cell_DataValidation::STYLE_INFORMATION; break; + } + + // bit: 7; mask: 0x00000080; 1= formula is explicit (only applies to list) + // I have only seen cases where this is 1 + $explicitFormula = (0x00000080 & $options) >> 7; + + // bit: 8; mask: 0x00000100; 1= empty cells allowed + $allowBlank = (0x00000100 & $options) >> 8; + + // bit: 9; mask: 0x00000200; 1= suppress drop down arrow in list type validity + $suppressDropDown = (0x00000200 & $options) >> 9; + + // bit: 18; mask: 0x00040000; 1= show prompt box if cell selected + $showInputMessage = (0x00040000 & $options) >> 18; + + // bit: 19; mask: 0x00080000; 1= show error box if invalid values entered + $showErrorMessage = (0x00080000 & $options) >> 19; + + // bit: 20-23; mask: 0x00F00000; condition operator + $operator = (0x00F00000 & $options) >> 20; + switch ($operator) { + case 0x00: $operator = PHPExcel_Cell_DataValidation::OPERATOR_BETWEEN ; break; + case 0x01: $operator = PHPExcel_Cell_DataValidation::OPERATOR_NOTBETWEEN ; break; + case 0x02: $operator = PHPExcel_Cell_DataValidation::OPERATOR_EQUAL ; break; + case 0x03: $operator = PHPExcel_Cell_DataValidation::OPERATOR_NOTEQUAL ; break; + case 0x04: $operator = PHPExcel_Cell_DataValidation::OPERATOR_GREATERTHAN ; break; + case 0x05: $operator = PHPExcel_Cell_DataValidation::OPERATOR_LESSTHAN ; break; + case 0x06: $operator = PHPExcel_Cell_DataValidation::OPERATOR_GREATERTHANOREQUAL; break; + case 0x07: $operator = PHPExcel_Cell_DataValidation::OPERATOR_LESSTHANOREQUAL ; break; + } + + // offset: 4; size: var; title of the prompt box + $offset = 4; + $string = self::_readUnicodeStringLong(substr($recordData, $offset)); + $promptTitle = $string['value'] !== chr(0) ? + $string['value'] : ''; + $offset += $string['size']; + + // offset: var; size: var; title of the error box + $string = self::_readUnicodeStringLong(substr($recordData, $offset)); + $errorTitle = $string['value'] !== chr(0) ? + $string['value'] : ''; + $offset += $string['size']; + + // offset: var; size: var; text of the prompt box + $string = self::_readUnicodeStringLong(substr($recordData, $offset)); + $prompt = $string['value'] !== chr(0) ? + $string['value'] : ''; + $offset += $string['size']; + + // offset: var; size: var; text of the error box + $string = self::_readUnicodeStringLong(substr($recordData, $offset)); + $error = $string['value'] !== chr(0) ? + $string['value'] : ''; + $offset += $string['size']; + + // offset: var; size: 2; size of the formula data for the first condition + $sz1 = self::_GetInt2d($recordData, $offset); + $offset += 2; + + // offset: var; size: 2; not used + $offset += 2; + + // offset: var; size: $sz1; formula data for first condition (without size field) + $formula1 = substr($recordData, $offset, $sz1); + $formula1 = pack('v', $sz1) . $formula1; // prepend the length + try { + $formula1 = $this->_getFormulaFromStructure($formula1); + + // in list type validity, null characters are used as item separators + if ($type == PHPExcel_Cell_DataValidation::TYPE_LIST) { + $formula1 = str_replace(chr(0), ',', $formula1); + } + } catch (PHPExcel_Exception $e) { + return; + } + $offset += $sz1; + + // offset: var; size: 2; size of the formula data for the first condition + $sz2 = self::_GetInt2d($recordData, $offset); + $offset += 2; + + // offset: var; size: 2; not used + $offset += 2; + + // offset: var; size: $sz2; formula data for second condition (without size field) + $formula2 = substr($recordData, $offset, $sz2); + $formula2 = pack('v', $sz2) . $formula2; // prepend the length + try { + $formula2 = $this->_getFormulaFromStructure($formula2); + } catch (PHPExcel_Exception $e) { + return; + } + $offset += $sz2; + + // offset: var; size: var; cell range address list with + $cellRangeAddressList = $this->_readBIFF8CellRangeAddressList(substr($recordData, $offset)); + $cellRangeAddresses = $cellRangeAddressList['cellRangeAddresses']; + + foreach ($cellRangeAddresses as $cellRange) { + $stRange = $this->_phpSheet->shrinkRangeToFit($cellRange); + $stRange = PHPExcel_Cell::extractAllCellReferencesInRange($stRange); + foreach ($stRange as $coordinate) { + $objValidation = $this->_phpSheet->getCell($coordinate)->getDataValidation(); + $objValidation->setType($type); + $objValidation->setErrorStyle($errorStyle); + $objValidation->setAllowBlank((bool)$allowBlank); + $objValidation->setShowInputMessage((bool)$showInputMessage); + $objValidation->setShowErrorMessage((bool)$showErrorMessage); + $objValidation->setShowDropDown(!$suppressDropDown); + $objValidation->setOperator($operator); + $objValidation->setErrorTitle($errorTitle); + $objValidation->setError($error); + $objValidation->setPromptTitle($promptTitle); + $objValidation->setPrompt($prompt); + $objValidation->setFormula1($formula1); + $objValidation->setFormula2($formula2); + } + } + + } + + + /** + * Read SHEETLAYOUT record. Stores sheet tab color information. + */ + private function _readSheetLayout() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // local pointer in record data + $offset = 0; + + if (!$this->_readDataOnly) { + // offset: 0; size: 2; repeated record identifier 0x0862 + + // offset: 2; size: 10; not used + + // offset: 12; size: 4; size of record data + // Excel 2003 uses size of 0x14 (documented), Excel 2007 uses size of 0x28 (not documented?) + $sz = self::_GetInt4d($recordData, 12); + + switch ($sz) { + case 0x14: + // offset: 16; size: 2; color index for sheet tab + $colorIndex = self::_GetInt2d($recordData, 16); + $color = self::_readColor($colorIndex,$this->_palette,$this->_version); + $this->_phpSheet->getTabColor()->setRGB($color['rgb']); + break; + + case 0x28: + // TODO: Investigate structure for .xls SHEETLAYOUT record as saved by MS Office Excel 2007 + return; + break; + } + } + } + + + /** + * Read SHEETPROTECTION record (FEATHEADR) + */ + private function _readSheetProtection() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + if ($this->_readDataOnly) { + return; + } + + // offset: 0; size: 2; repeated record header + + // offset: 2; size: 2; FRT cell reference flag (=0 currently) + + // offset: 4; size: 8; Currently not used and set to 0 + + // offset: 12; size: 2; Shared feature type index (2=Enhanced Protetion, 4=SmartTag) + $isf = self::_GetInt2d($recordData, 12); + if ($isf != 2) { + return; + } + + // offset: 14; size: 1; =1 since this is a feat header + + // offset: 15; size: 4; size of rgbHdrSData + + // rgbHdrSData, assume "Enhanced Protection" + // offset: 19; size: 2; option flags + $options = self::_GetInt2d($recordData, 19); + + // bit: 0; mask 0x0001; 1 = user may edit objects, 0 = users must not edit objects + $bool = (0x0001 & $options) >> 0; + $this->_phpSheet->getProtection()->setObjects(!$bool); + + // bit: 1; mask 0x0002; edit scenarios + $bool = (0x0002 & $options) >> 1; + $this->_phpSheet->getProtection()->setScenarios(!$bool); + + // bit: 2; mask 0x0004; format cells + $bool = (0x0004 & $options) >> 2; + $this->_phpSheet->getProtection()->setFormatCells(!$bool); + + // bit: 3; mask 0x0008; format columns + $bool = (0x0008 & $options) >> 3; + $this->_phpSheet->getProtection()->setFormatColumns(!$bool); + + // bit: 4; mask 0x0010; format rows + $bool = (0x0010 & $options) >> 4; + $this->_phpSheet->getProtection()->setFormatRows(!$bool); + + // bit: 5; mask 0x0020; insert columns + $bool = (0x0020 & $options) >> 5; + $this->_phpSheet->getProtection()->setInsertColumns(!$bool); + + // bit: 6; mask 0x0040; insert rows + $bool = (0x0040 & $options) >> 6; + $this->_phpSheet->getProtection()->setInsertRows(!$bool); + + // bit: 7; mask 0x0080; insert hyperlinks + $bool = (0x0080 & $options) >> 7; + $this->_phpSheet->getProtection()->setInsertHyperlinks(!$bool); + + // bit: 8; mask 0x0100; delete columns + $bool = (0x0100 & $options) >> 8; + $this->_phpSheet->getProtection()->setDeleteColumns(!$bool); + + // bit: 9; mask 0x0200; delete rows + $bool = (0x0200 & $options) >> 9; + $this->_phpSheet->getProtection()->setDeleteRows(!$bool); + + // bit: 10; mask 0x0400; select locked cells + $bool = (0x0400 & $options) >> 10; + $this->_phpSheet->getProtection()->setSelectLockedCells(!$bool); + + // bit: 11; mask 0x0800; sort cell range + $bool = (0x0800 & $options) >> 11; + $this->_phpSheet->getProtection()->setSort(!$bool); + + // bit: 12; mask 0x1000; auto filter + $bool = (0x1000 & $options) >> 12; + $this->_phpSheet->getProtection()->setAutoFilter(!$bool); + + // bit: 13; mask 0x2000; pivot tables + $bool = (0x2000 & $options) >> 13; + $this->_phpSheet->getProtection()->setPivotTables(!$bool); + + // bit: 14; mask 0x4000; select unlocked cells + $bool = (0x4000 & $options) >> 14; + $this->_phpSheet->getProtection()->setSelectUnlockedCells(!$bool); + + // offset: 21; size: 2; not used + } + + + /** + * Read RANGEPROTECTION record + * Reading of this record is based on Microsoft Office Excel 97-2000 Binary File Format Specification, + * where it is referred to as FEAT record + */ + private function _readRangeProtection() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // move stream pointer to next record + $this->_pos += 4 + $length; + + // local pointer in record data + $offset = 0; + + if (!$this->_readDataOnly) { + $offset += 12; + + // offset: 12; size: 2; shared feature type, 2 = enhanced protection, 4 = smart tag + $isf = self::_GetInt2d($recordData, 12); + if ($isf != 2) { + // we only read FEAT records of type 2 + return; + } + $offset += 2; + + $offset += 5; + + // offset: 19; size: 2; count of ref ranges this feature is on + $cref = self::_GetInt2d($recordData, 19); + $offset += 2; + + $offset += 6; + + // offset: 27; size: 8 * $cref; list of cell ranges (like in hyperlink record) + $cellRanges = array(); + for ($i = 0; $i < $cref; ++$i) { + try { + $cellRange = $this->_readBIFF8CellRangeAddressFixed(substr($recordData, 27 + 8 * $i, 8)); + } catch (PHPExcel_Exception $e) { + return; + } + $cellRanges[] = $cellRange; + $offset += 8; + } + + // offset: var; size: var; variable length of feature specific data + $rgbFeat = substr($recordData, $offset); + $offset += 4; + + // offset: var; size: 4; the encrypted password (only 16-bit although field is 32-bit) + $wPassword = self::_GetInt4d($recordData, $offset); + $offset += 4; + + // Apply range protection to sheet + if ($cellRanges) { + $this->_phpSheet->protectCells(implode(' ', $cellRanges), strtoupper(dechex($wPassword)), true); + } + } + } + + + /** + * Read IMDATA record + */ + private function _readImData() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + + // get spliced record data + $splicedRecordData = $this->_getSplicedRecordData(); + $recordData = $splicedRecordData['recordData']; + + // UNDER CONSTRUCTION + + // offset: 0; size: 2; image format + $cf = self::_GetInt2d($recordData, 0); + + // offset: 2; size: 2; environment from which the file was written + $env = self::_GetInt2d($recordData, 2); + + // offset: 4; size: 4; length of the image data + $lcb = self::_GetInt4d($recordData, 4); + + // offset: 8; size: var; image data + $iData = substr($recordData, 8); + + switch ($cf) { + case 0x09: // Windows bitmap format + // BITMAPCOREINFO + // 1. BITMAPCOREHEADER + // offset: 0; size: 4; bcSize, Specifies the number of bytes required by the structure + $bcSize = self::_GetInt4d($iData, 0); +// var_dump($bcSize); + + // offset: 4; size: 2; bcWidth, specifies the width of the bitmap, in pixels + $bcWidth = self::_GetInt2d($iData, 4); +// var_dump($bcWidth); + + // offset: 6; size: 2; bcHeight, specifies the height of the bitmap, in pixels. + $bcHeight = self::_GetInt2d($iData, 6); +// var_dump($bcHeight); + $ih = imagecreatetruecolor($bcWidth, $bcHeight); + + // offset: 8; size: 2; bcPlanes, specifies the number of planes for the target device. This value must be 1 + + // offset: 10; size: 2; bcBitCount specifies the number of bits-per-pixel. This value must be 1, 4, 8, or 24 + $bcBitCount = self::_GetInt2d($iData, 10); +// var_dump($bcBitCount); + + $rgbString = substr($iData, 12); + $rgbTriples = array(); + while (strlen($rgbString) > 0) { + $rgbTriples[] = unpack('Cb/Cg/Cr', $rgbString); + $rgbString = substr($rgbString, 3); + } + $x = 0; + $y = 0; + foreach ($rgbTriples as $i => $rgbTriple) { + $color = imagecolorallocate($ih, $rgbTriple['r'], $rgbTriple['g'], $rgbTriple['b']); + imagesetpixel($ih, $x, $bcHeight - 1 - $y, $color); + $x = ($x + 1) % $bcWidth; + $y = $y + floor(($x + 1) / $bcWidth); + } + //imagepng($ih, 'image.png'); + + $drawing = new PHPExcel_Worksheet_Drawing(); + $drawing->setPath($filename); + $drawing->setWorksheet($this->_phpSheet); + + break; + + case 0x02: // Windows metafile or Macintosh PICT format + case 0x0e: // native format + default; + break; + + } + + // _getSplicedRecordData() takes care of moving current position in data stream + } + + + /** + * Read a free CONTINUE record. Free CONTINUE record may be a camouflaged MSODRAWING record + * When MSODRAWING data on a sheet exceeds 8224 bytes, CONTINUE records are used instead. Undocumented. + * In this case, we must treat the CONTINUE record as a MSODRAWING record + */ + private function _readContinue() + { + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $recordData = $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + // check if we are reading drawing data + // this is in case a free CONTINUE record occurs in other circumstances we are unaware of + if ($this->_drawingData == '') { + // move stream pointer to next record + $this->_pos += 4 + $length; + + return; + } + + // check if record data is at least 4 bytes long, otherwise there is no chance this is MSODRAWING data + if ($length < 4) { + // move stream pointer to next record + $this->_pos += 4 + $length; + + return; + } + + // dirty check to see if CONTINUE record could be a camouflaged MSODRAWING record + // look inside CONTINUE record to see if it looks like a part of an Escher stream + // we know that Escher stream may be split at least at + // 0xF003 MsofbtSpgrContainer + // 0xF004 MsofbtSpContainer + // 0xF00D MsofbtClientTextbox + $validSplitPoints = array(0xF003, 0xF004, 0xF00D); // add identifiers if we find more + + $splitPoint = self::_GetInt2d($recordData, 2); + if (in_array($splitPoint, $validSplitPoints)) { + // get spliced record data (and move pointer to next record) + $splicedRecordData = $this->_getSplicedRecordData(); + $this->_drawingData .= $splicedRecordData['recordData']; + + return; + } + + // move stream pointer to next record + $this->_pos += 4 + $length; + + } + + + /** + * Reads a record from current position in data stream and continues reading data as long as CONTINUE + * records are found. Splices the record data pieces and returns the combined string as if record data + * is in one piece. + * Moves to next current position in data stream to start of next record different from a CONtINUE record + * + * @return array + */ + private function _getSplicedRecordData() + { + $data = ''; + $spliceOffsets = array(); + + $i = 0; + $spliceOffsets[0] = 0; + + do { + ++$i; + + // offset: 0; size: 2; identifier + $identifier = self::_GetInt2d($this->_data, $this->_pos); + // offset: 2; size: 2; length + $length = self::_GetInt2d($this->_data, $this->_pos + 2); + $data .= $this->_readRecordData($this->_data, $this->_pos + 4, $length); + + $spliceOffsets[$i] = $spliceOffsets[$i - 1] + $length; + + $this->_pos += 4 + $length; + $nextIdentifier = self::_GetInt2d($this->_data, $this->_pos); + } + while ($nextIdentifier == self::XLS_Type_CONTINUE); + + $splicedData = array( + 'recordData' => $data, + 'spliceOffsets' => $spliceOffsets, + ); + + return $splicedData; + + } + + + /** + * Convert formula structure into human readable Excel formula like 'A3+A5*5' + * + * @param string $formulaStructure The complete binary data for the formula + * @param string $baseCell Base cell, only needed when formula contains tRefN tokens, e.g. with shared formulas + * @return string Human readable formula + */ + private function _getFormulaFromStructure($formulaStructure, $baseCell = 'A1') + { + // offset: 0; size: 2; size of the following formula data + $sz = self::_GetInt2d($formulaStructure, 0); + + // offset: 2; size: sz + $formulaData = substr($formulaStructure, 2, $sz); + + // for debug: dump the formula data + //echo ''; + //echo 'size: ' . $sz . "\n"; + //echo 'the entire formula data: '; + //Debug::dump($formulaData); + //echo "\n----\n"; + + // offset: 2 + sz; size: variable (optional) + if (strlen($formulaStructure) > 2 + $sz) { + $additionalData = substr($formulaStructure, 2 + $sz); + + // for debug: dump the additional data + //echo 'the entire additional data: '; + //Debug::dump($additionalData); + //echo "\n----\n"; + + } else { + $additionalData = ''; + } + + return $this->_getFormulaFromData($formulaData, $additionalData, $baseCell); + } + + + /** + * Take formula data and additional data for formula and return human readable formula + * + * @param string $formulaData The binary data for the formula itself + * @param string $additionalData Additional binary data going with the formula + * @param string $baseCell Base cell, only needed when formula contains tRefN tokens, e.g. with shared formulas + * @return string Human readable formula + */ + private function _getFormulaFromData($formulaData, $additionalData = '', $baseCell = 'A1') + { + // start parsing the formula data + $tokens = array(); + + while (strlen($formulaData) > 0 and $token = $this->_getNextToken($formulaData, $baseCell)) { + $tokens[] = $token; + $formulaData = substr($formulaData, $token['size']); + + // for debug: dump the token + //var_dump($token); + } + + $formulaString = $this->_createFormulaFromTokens($tokens, $additionalData); + + return $formulaString; + } + + + /** + * Take array of tokens together with additional data for formula and return human readable formula + * + * @param array $tokens + * @param array $additionalData Additional binary data going with the formula + * @param string $baseCell Base cell, only needed when formula contains tRefN tokens, e.g. with shared formulas + * @return string Human readable formula + */ + private function _createFormulaFromTokens($tokens, $additionalData) + { + // empty formula? + if (empty($tokens)) { + return ''; + } + + $formulaStrings = array(); + foreach ($tokens as $token) { + // initialize spaces + $space0 = isset($space0) ? $space0 : ''; // spaces before next token, not tParen + $space1 = isset($space1) ? $space1 : ''; // carriage returns before next token, not tParen + $space2 = isset($space2) ? $space2 : ''; // spaces before opening parenthesis + $space3 = isset($space3) ? $space3 : ''; // carriage returns before opening parenthesis + $space4 = isset($space4) ? $space4 : ''; // spaces before closing parenthesis + $space5 = isset($space5) ? $space5 : ''; // carriage returns before closing parenthesis + + switch ($token['name']) { + case 'tAdd': // addition + case 'tConcat': // addition + case 'tDiv': // division + case 'tEQ': // equality + case 'tGE': // greater than or equal + case 'tGT': // greater than + case 'tIsect': // intersection + case 'tLE': // less than or equal + case 'tList': // less than or equal + case 'tLT': // less than + case 'tMul': // multiplication + case 'tNE': // multiplication + case 'tPower': // power + case 'tRange': // range + case 'tSub': // subtraction + $op2 = array_pop($formulaStrings); + $op1 = array_pop($formulaStrings); + $formulaStrings[] = "$op1$space1$space0{$token['data']}$op2"; + unset($space0, $space1); + break; + case 'tUplus': // unary plus + case 'tUminus': // unary minus + $op = array_pop($formulaStrings); + $formulaStrings[] = "$space1$space0{$token['data']}$op"; + unset($space0, $space1); + break; + case 'tPercent': // percent sign + $op = array_pop($formulaStrings); + $formulaStrings[] = "$op$space1$space0{$token['data']}"; + unset($space0, $space1); + break; + case 'tAttrVolatile': // indicates volatile function + case 'tAttrIf': + case 'tAttrSkip': + case 'tAttrChoose': + // token is only important for Excel formula evaluator + // do nothing + break; + case 'tAttrSpace': // space / carriage return + // space will be used when next token arrives, do not alter formulaString stack + switch ($token['data']['spacetype']) { + case 'type0': + $space0 = str_repeat(' ', $token['data']['spacecount']); + break; + case 'type1': + $space1 = str_repeat("\n", $token['data']['spacecount']); + break; + case 'type2': + $space2 = str_repeat(' ', $token['data']['spacecount']); + break; + case 'type3': + $space3 = str_repeat("\n", $token['data']['spacecount']); + break; + case 'type4': + $space4 = str_repeat(' ', $token['data']['spacecount']); + break; + case 'type5': + $space5 = str_repeat("\n", $token['data']['spacecount']); + break; + } + break; + case 'tAttrSum': // SUM function with one parameter + $op = array_pop($formulaStrings); + $formulaStrings[] = "{$space1}{$space0}SUM($op)"; + unset($space0, $space1); + break; + case 'tFunc': // function with fixed number of arguments + case 'tFuncV': // function with variable number of arguments + if ($token['data']['function'] != '') { + // normal function + $ops = array(); // array of operators + for ($i = 0; $i < $token['data']['args']; ++$i) { + $ops[] = array_pop($formulaStrings); + } + $ops = array_reverse($ops); + $formulaStrings[] = "$space1$space0{$token['data']['function']}(" . implode(',', $ops) . ")"; + unset($space0, $space1); + } else { + // add-in function + $ops = array(); // array of operators + for ($i = 0; $i < $token['data']['args'] - 1; ++$i) { + $ops[] = array_pop($formulaStrings); + } + $ops = array_reverse($ops); + $function = array_pop($formulaStrings); + $formulaStrings[] = "$space1$space0$function(" . implode(',', $ops) . ")"; + unset($space0, $space1); + } + break; + case 'tParen': // parenthesis + $expression = array_pop($formulaStrings); + $formulaStrings[] = "$space3$space2($expression$space5$space4)"; + unset($space2, $space3, $space4, $space5); + break; + case 'tArray': // array constant + $constantArray = self::_readBIFF8ConstantArray($additionalData); + $formulaStrings[] = $space1 . $space0 . $constantArray['value']; + $additionalData = substr($additionalData, $constantArray['size']); // bite of chunk of additional data + unset($space0, $space1); + break; + case 'tMemArea': + // bite off chunk of additional data + $cellRangeAddressList = $this->_readBIFF8CellRangeAddressList($additionalData); + $additionalData = substr($additionalData, $cellRangeAddressList['size']); + $formulaStrings[] = "$space1$space0{$token['data']}"; + unset($space0, $space1); + break; + case 'tArea': // cell range address + case 'tBool': // boolean + case 'tErr': // error code + case 'tInt': // integer + case 'tMemErr': + case 'tMemFunc': + case 'tMissArg': + case 'tName': + case 'tNameX': + case 'tNum': // number + case 'tRef': // single cell reference + case 'tRef3d': // 3d cell reference + case 'tArea3d': // 3d cell range reference + case 'tRefN': + case 'tAreaN': + case 'tStr': // string + $formulaStrings[] = "$space1$space0{$token['data']}"; + unset($space0, $space1); + break; + } + } + $formulaString = $formulaStrings[0]; + + // for debug: dump the human readable formula + //echo '----' . "\n"; + //echo 'Formula: ' . $formulaString; + + return $formulaString; + } + + + /** + * Fetch next token from binary formula data + * + * @param string Formula data + * @param string $baseCell Base cell, only needed when formula contains tRefN tokens, e.g. with shared formulas + * @return array + * @throws PHPExcel_Reader_Exception + */ + private function _getNextToken($formulaData, $baseCell = 'A1') + { + // offset: 0; size: 1; token id + $id = ord($formulaData[0]); // token id + $name = false; // initialize token name + + switch ($id) { + case 0x03: $name = 'tAdd'; $size = 1; $data = '+'; break; + case 0x04: $name = 'tSub'; $size = 1; $data = '-'; break; + case 0x05: $name = 'tMul'; $size = 1; $data = '*'; break; + case 0x06: $name = 'tDiv'; $size = 1; $data = '/'; break; + case 0x07: $name = 'tPower'; $size = 1; $data = '^'; break; + case 0x08: $name = 'tConcat'; $size = 1; $data = '&'; break; + case 0x09: $name = 'tLT'; $size = 1; $data = '<'; break; + case 0x0A: $name = 'tLE'; $size = 1; $data = '<='; break; + case 0x0B: $name = 'tEQ'; $size = 1; $data = '='; break; + case 0x0C: $name = 'tGE'; $size = 1; $data = '>='; break; + case 0x0D: $name = 'tGT'; $size = 1; $data = '>'; break; + case 0x0E: $name = 'tNE'; $size = 1; $data = '<>'; break; + case 0x0F: $name = 'tIsect'; $size = 1; $data = ' '; break; + case 0x10: $name = 'tList'; $size = 1; $data = ','; break; + case 0x11: $name = 'tRange'; $size = 1; $data = ':'; break; + case 0x12: $name = 'tUplus'; $size = 1; $data = '+'; break; + case 0x13: $name = 'tUminus'; $size = 1; $data = '-'; break; + case 0x14: $name = 'tPercent'; $size = 1; $data = '%'; break; + case 0x15: // parenthesis + $name = 'tParen'; + $size = 1; + $data = null; + break; + case 0x16: // missing argument + $name = 'tMissArg'; + $size = 1; + $data = ''; + break; + case 0x17: // string + $name = 'tStr'; + // offset: 1; size: var; Unicode string, 8-bit string length + $string = self::_readUnicodeStringShort(substr($formulaData, 1)); + $size = 1 + $string['size']; + $data = self::_UTF8toExcelDoubleQuoted($string['value']); + break; + case 0x19: // Special attribute + // offset: 1; size: 1; attribute type flags: + switch (ord($formulaData[1])) { + case 0x01: + $name = 'tAttrVolatile'; + $size = 4; + $data = null; + break; + case 0x02: + $name = 'tAttrIf'; + $size = 4; + $data = null; + break; + case 0x04: + $name = 'tAttrChoose'; + // offset: 2; size: 2; number of choices in the CHOOSE function ($nc, number of parameters decreased by 1) + $nc = self::_GetInt2d($formulaData, 2); + // offset: 4; size: 2 * $nc + // offset: 4 + 2 * $nc; size: 2 + $size = 2 * $nc + 6; + $data = null; + break; + case 0x08: + $name = 'tAttrSkip'; + $size = 4; + $data = null; + break; + case 0x10: + $name = 'tAttrSum'; + $size = 4; + $data = null; + break; + case 0x40: + case 0x41: + $name = 'tAttrSpace'; + $size = 4; + // offset: 2; size: 2; space type and position + switch (ord($formulaData[2])) { + case 0x00: + $spacetype = 'type0'; + break; + case 0x01: + $spacetype = 'type1'; + break; + case 0x02: + $spacetype = 'type2'; + break; + case 0x03: + $spacetype = 'type3'; + break; + case 0x04: + $spacetype = 'type4'; + break; + case 0x05: + $spacetype = 'type5'; + break; + default: + throw new PHPExcel_Reader_Exception('Unrecognized space type in tAttrSpace token'); + break; + } + // offset: 3; size: 1; number of inserted spaces/carriage returns + $spacecount = ord($formulaData[3]); + + $data = array('spacetype' => $spacetype, 'spacecount' => $spacecount); + break; + default: + throw new PHPExcel_Reader_Exception('Unrecognized attribute flag in tAttr token'); + break; + } + break; + case 0x1C: // error code + // offset: 1; size: 1; error code + $name = 'tErr'; + $size = 2; + $data = self::_mapErrorCode(ord($formulaData[1])); + break; + case 0x1D: // boolean + // offset: 1; size: 1; 0 = false, 1 = true; + $name = 'tBool'; + $size = 2; + $data = ord($formulaData[1]) ? 'TRUE' : 'FALSE'; + break; + case 0x1E: // integer + // offset: 1; size: 2; unsigned 16-bit integer + $name = 'tInt'; + $size = 3; + $data = self::_GetInt2d($formulaData, 1); + break; + case 0x1F: // number + // offset: 1; size: 8; + $name = 'tNum'; + $size = 9; + $data = self::_extractNumber(substr($formulaData, 1)); + $data = str_replace(',', '.', (string)$data); // in case non-English locale + break; + case 0x20: // array constant + case 0x40: + case 0x60: + // offset: 1; size: 7; not used + $name = 'tArray'; + $size = 8; + $data = null; + break; + case 0x21: // function with fixed number of arguments + case 0x41: + case 0x61: + $name = 'tFunc'; + $size = 3; + // offset: 1; size: 2; index to built-in sheet function + switch (self::_GetInt2d($formulaData, 1)) { + case 2: $function = 'ISNA'; $args = 1; break; + case 3: $function = 'ISERROR'; $args = 1; break; + case 10: $function = 'NA'; $args = 0; break; + case 15: $function = 'SIN'; $args = 1; break; + case 16: $function = 'COS'; $args = 1; break; + case 17: $function = 'TAN'; $args = 1; break; + case 18: $function = 'ATAN'; $args = 1; break; + case 19: $function = 'PI'; $args = 0; break; + case 20: $function = 'SQRT'; $args = 1; break; + case 21: $function = 'EXP'; $args = 1; break; + case 22: $function = 'LN'; $args = 1; break; + case 23: $function = 'LOG10'; $args = 1; break; + case 24: $function = 'ABS'; $args = 1; break; + case 25: $function = 'INT'; $args = 1; break; + case 26: $function = 'SIGN'; $args = 1; break; + case 27: $function = 'ROUND'; $args = 2; break; + case 30: $function = 'REPT'; $args = 2; break; + case 31: $function = 'MID'; $args = 3; break; + case 32: $function = 'LEN'; $args = 1; break; + case 33: $function = 'VALUE'; $args = 1; break; + case 34: $function = 'TRUE'; $args = 0; break; + case 35: $function = 'FALSE'; $args = 0; break; + case 38: $function = 'NOT'; $args = 1; break; + case 39: $function = 'MOD'; $args = 2; break; + case 40: $function = 'DCOUNT'; $args = 3; break; + case 41: $function = 'DSUM'; $args = 3; break; + case 42: $function = 'DAVERAGE'; $args = 3; break; + case 43: $function = 'DMIN'; $args = 3; break; + case 44: $function = 'DMAX'; $args = 3; break; + case 45: $function = 'DSTDEV'; $args = 3; break; + case 48: $function = 'TEXT'; $args = 2; break; + case 61: $function = 'MIRR'; $args = 3; break; + case 63: $function = 'RAND'; $args = 0; break; + case 65: $function = 'DATE'; $args = 3; break; + case 66: $function = 'TIME'; $args = 3; break; + case 67: $function = 'DAY'; $args = 1; break; + case 68: $function = 'MONTH'; $args = 1; break; + case 69: $function = 'YEAR'; $args = 1; break; + case 71: $function = 'HOUR'; $args = 1; break; + case 72: $function = 'MINUTE'; $args = 1; break; + case 73: $function = 'SECOND'; $args = 1; break; + case 74: $function = 'NOW'; $args = 0; break; + case 75: $function = 'AREAS'; $args = 1; break; + case 76: $function = 'ROWS'; $args = 1; break; + case 77: $function = 'COLUMNS'; $args = 1; break; + case 83: $function = 'TRANSPOSE'; $args = 1; break; + case 86: $function = 'TYPE'; $args = 1; break; + case 97: $function = 'ATAN2'; $args = 2; break; + case 98: $function = 'ASIN'; $args = 1; break; + case 99: $function = 'ACOS'; $args = 1; break; + case 105: $function = 'ISREF'; $args = 1; break; + case 111: $function = 'CHAR'; $args = 1; break; + case 112: $function = 'LOWER'; $args = 1; break; + case 113: $function = 'UPPER'; $args = 1; break; + case 114: $function = 'PROPER'; $args = 1; break; + case 117: $function = 'EXACT'; $args = 2; break; + case 118: $function = 'TRIM'; $args = 1; break; + case 119: $function = 'REPLACE'; $args = 4; break; + case 121: $function = 'CODE'; $args = 1; break; + case 126: $function = 'ISERR'; $args = 1; break; + case 127: $function = 'ISTEXT'; $args = 1; break; + case 128: $function = 'ISNUMBER'; $args = 1; break; + case 129: $function = 'ISBLANK'; $args = 1; break; + case 130: $function = 'T'; $args = 1; break; + case 131: $function = 'N'; $args = 1; break; + case 140: $function = 'DATEVALUE'; $args = 1; break; + case 141: $function = 'TIMEVALUE'; $args = 1; break; + case 142: $function = 'SLN'; $args = 3; break; + case 143: $function = 'SYD'; $args = 4; break; + case 162: $function = 'CLEAN'; $args = 1; break; + case 163: $function = 'MDETERM'; $args = 1; break; + case 164: $function = 'MINVERSE'; $args = 1; break; + case 165: $function = 'MMULT'; $args = 2; break; + case 184: $function = 'FACT'; $args = 1; break; + case 189: $function = 'DPRODUCT'; $args = 3; break; + case 190: $function = 'ISNONTEXT'; $args = 1; break; + case 195: $function = 'DSTDEVP'; $args = 3; break; + case 196: $function = 'DVARP'; $args = 3; break; + case 198: $function = 'ISLOGICAL'; $args = 1; break; + case 199: $function = 'DCOUNTA'; $args = 3; break; + case 207: $function = 'REPLACEB'; $args = 4; break; + case 210: $function = 'MIDB'; $args = 3; break; + case 211: $function = 'LENB'; $args = 1; break; + case 212: $function = 'ROUNDUP'; $args = 2; break; + case 213: $function = 'ROUNDDOWN'; $args = 2; break; + case 214: $function = 'ASC'; $args = 1; break; + case 215: $function = 'DBCS'; $args = 1; break; + case 221: $function = 'TODAY'; $args = 0; break; + case 229: $function = 'SINH'; $args = 1; break; + case 230: $function = 'COSH'; $args = 1; break; + case 231: $function = 'TANH'; $args = 1; break; + case 232: $function = 'ASINH'; $args = 1; break; + case 233: $function = 'ACOSH'; $args = 1; break; + case 234: $function = 'ATANH'; $args = 1; break; + case 235: $function = 'DGET'; $args = 3; break; + case 244: $function = 'INFO'; $args = 1; break; + case 252: $function = 'FREQUENCY'; $args = 2; break; + case 261: $function = 'ERROR.TYPE'; $args = 1; break; + case 271: $function = 'GAMMALN'; $args = 1; break; + case 273: $function = 'BINOMDIST'; $args = 4; break; + case 274: $function = 'CHIDIST'; $args = 2; break; + case 275: $function = 'CHIINV'; $args = 2; break; + case 276: $function = 'COMBIN'; $args = 2; break; + case 277: $function = 'CONFIDENCE'; $args = 3; break; + case 278: $function = 'CRITBINOM'; $args = 3; break; + case 279: $function = 'EVEN'; $args = 1; break; + case 280: $function = 'EXPONDIST'; $args = 3; break; + case 281: $function = 'FDIST'; $args = 3; break; + case 282: $function = 'FINV'; $args = 3; break; + case 283: $function = 'FISHER'; $args = 1; break; + case 284: $function = 'FISHERINV'; $args = 1; break; + case 285: $function = 'FLOOR'; $args = 2; break; + case 286: $function = 'GAMMADIST'; $args = 4; break; + case 287: $function = 'GAMMAINV'; $args = 3; break; + case 288: $function = 'CEILING'; $args = 2; break; + case 289: $function = 'HYPGEOMDIST'; $args = 4; break; + case 290: $function = 'LOGNORMDIST'; $args = 3; break; + case 291: $function = 'LOGINV'; $args = 3; break; + case 292: $function = 'NEGBINOMDIST'; $args = 3; break; + case 293: $function = 'NORMDIST'; $args = 4; break; + case 294: $function = 'NORMSDIST'; $args = 1; break; + case 295: $function = 'NORMINV'; $args = 3; break; + case 296: $function = 'NORMSINV'; $args = 1; break; + case 297: $function = 'STANDARDIZE'; $args = 3; break; + case 298: $function = 'ODD'; $args = 1; break; + case 299: $function = 'PERMUT'; $args = 2; break; + case 300: $function = 'POISSON'; $args = 3; break; + case 301: $function = 'TDIST'; $args = 3; break; + case 302: $function = 'WEIBULL'; $args = 4; break; + case 303: $function = 'SUMXMY2'; $args = 2; break; + case 304: $function = 'SUMX2MY2'; $args = 2; break; + case 305: $function = 'SUMX2PY2'; $args = 2; break; + case 306: $function = 'CHITEST'; $args = 2; break; + case 307: $function = 'CORREL'; $args = 2; break; + case 308: $function = 'COVAR'; $args = 2; break; + case 309: $function = 'FORECAST'; $args = 3; break; + case 310: $function = 'FTEST'; $args = 2; break; + case 311: $function = 'INTERCEPT'; $args = 2; break; + case 312: $function = 'PEARSON'; $args = 2; break; + case 313: $function = 'RSQ'; $args = 2; break; + case 314: $function = 'STEYX'; $args = 2; break; + case 315: $function = 'SLOPE'; $args = 2; break; + case 316: $function = 'TTEST'; $args = 4; break; + case 325: $function = 'LARGE'; $args = 2; break; + case 326: $function = 'SMALL'; $args = 2; break; + case 327: $function = 'QUARTILE'; $args = 2; break; + case 328: $function = 'PERCENTILE'; $args = 2; break; + case 331: $function = 'TRIMMEAN'; $args = 2; break; + case 332: $function = 'TINV'; $args = 2; break; + case 337: $function = 'POWER'; $args = 2; break; + case 342: $function = 'RADIANS'; $args = 1; break; + case 343: $function = 'DEGREES'; $args = 1; break; + case 346: $function = 'COUNTIF'; $args = 2; break; + case 347: $function = 'COUNTBLANK'; $args = 1; break; + case 350: $function = 'ISPMT'; $args = 4; break; + case 351: $function = 'DATEDIF'; $args = 3; break; + case 352: $function = 'DATESTRING'; $args = 1; break; + case 353: $function = 'NUMBERSTRING'; $args = 2; break; + case 360: $function = 'PHONETIC'; $args = 1; break; + case 368: $function = 'BAHTTEXT'; $args = 1; break; + default: + throw new PHPExcel_Reader_Exception('Unrecognized function in formula'); + break; + } + $data = array('function' => $function, 'args' => $args); + break; + case 0x22: // function with variable number of arguments + case 0x42: + case 0x62: + $name = 'tFuncV'; + $size = 4; + // offset: 1; size: 1; number of arguments + $args = ord($formulaData[1]); + // offset: 2: size: 2; index to built-in sheet function + $index = self::_GetInt2d($formulaData, 2); + switch ($index) { + case 0: $function = 'COUNT'; break; + case 1: $function = 'IF'; break; + case 4: $function = 'SUM'; break; + case 5: $function = 'AVERAGE'; break; + case 6: $function = 'MIN'; break; + case 7: $function = 'MAX'; break; + case 8: $function = 'ROW'; break; + case 9: $function = 'COLUMN'; break; + case 11: $function = 'NPV'; break; + case 12: $function = 'STDEV'; break; + case 13: $function = 'DOLLAR'; break; + case 14: $function = 'FIXED'; break; + case 28: $function = 'LOOKUP'; break; + case 29: $function = 'INDEX'; break; + case 36: $function = 'AND'; break; + case 37: $function = 'OR'; break; + case 46: $function = 'VAR'; break; + case 49: $function = 'LINEST'; break; + case 50: $function = 'TREND'; break; + case 51: $function = 'LOGEST'; break; + case 52: $function = 'GROWTH'; break; + case 56: $function = 'PV'; break; + case 57: $function = 'FV'; break; + case 58: $function = 'NPER'; break; + case 59: $function = 'PMT'; break; + case 60: $function = 'RATE'; break; + case 62: $function = 'IRR'; break; + case 64: $function = 'MATCH'; break; + case 70: $function = 'WEEKDAY'; break; + case 78: $function = 'OFFSET'; break; + case 82: $function = 'SEARCH'; break; + case 100: $function = 'CHOOSE'; break; + case 101: $function = 'HLOOKUP'; break; + case 102: $function = 'VLOOKUP'; break; + case 109: $function = 'LOG'; break; + case 115: $function = 'LEFT'; break; + case 116: $function = 'RIGHT'; break; + case 120: $function = 'SUBSTITUTE'; break; + case 124: $function = 'FIND'; break; + case 125: $function = 'CELL'; break; + case 144: $function = 'DDB'; break; + case 148: $function = 'INDIRECT'; break; + case 167: $function = 'IPMT'; break; + case 168: $function = 'PPMT'; break; + case 169: $function = 'COUNTA'; break; + case 183: $function = 'PRODUCT'; break; + case 193: $function = 'STDEVP'; break; + case 194: $function = 'VARP'; break; + case 197: $function = 'TRUNC'; break; + case 204: $function = 'USDOLLAR'; break; + case 205: $function = 'FINDB'; break; + case 206: $function = 'SEARCHB'; break; + case 208: $function = 'LEFTB'; break; + case 209: $function = 'RIGHTB'; break; + case 216: $function = 'RANK'; break; + case 219: $function = 'ADDRESS'; break; + case 220: $function = 'DAYS360'; break; + case 222: $function = 'VDB'; break; + case 227: $function = 'MEDIAN'; break; + case 228: $function = 'SUMPRODUCT'; break; + case 247: $function = 'DB'; break; + case 255: $function = ''; break; + case 269: $function = 'AVEDEV'; break; + case 270: $function = 'BETADIST'; break; + case 272: $function = 'BETAINV'; break; + case 317: $function = 'PROB'; break; + case 318: $function = 'DEVSQ'; break; + case 319: $function = 'GEOMEAN'; break; + case 320: $function = 'HARMEAN'; break; + case 321: $function = 'SUMSQ'; break; + case 322: $function = 'KURT'; break; + case 323: $function = 'SKEW'; break; + case 324: $function = 'ZTEST'; break; + case 329: $function = 'PERCENTRANK'; break; + case 330: $function = 'MODE'; break; + case 336: $function = 'CONCATENATE'; break; + case 344: $function = 'SUBTOTAL'; break; + case 345: $function = 'SUMIF'; break; + case 354: $function = 'ROMAN'; break; + case 358: $function = 'GETPIVOTDATA'; break; + case 359: $function = 'HYPERLINK'; break; + case 361: $function = 'AVERAGEA'; break; + case 362: $function = 'MAXA'; break; + case 363: $function = 'MINA'; break; + case 364: $function = 'STDEVPA'; break; + case 365: $function = 'VARPA'; break; + case 366: $function = 'STDEVA'; break; + case 367: $function = 'VARA'; break; + default: + throw new PHPExcel_Reader_Exception('Unrecognized function in formula'); + break; + } + $data = array('function' => $function, 'args' => $args); + break; + case 0x23: // index to defined name + case 0x43: + case 0x63: + $name = 'tName'; + $size = 5; + // offset: 1; size: 2; one-based index to definedname record + $definedNameIndex = self::_GetInt2d($formulaData, 1) - 1; + // offset: 2; size: 2; not used + $data = $this->_definedname[$definedNameIndex]['name']; + break; + case 0x24: // single cell reference e.g. A5 + case 0x44: + case 0x64: + $name = 'tRef'; + $size = 5; + $data = $this->_readBIFF8CellAddress(substr($formulaData, 1, 4)); + break; + case 0x25: // cell range reference to cells in the same sheet (2d) + case 0x45: + case 0x65: + $name = 'tArea'; + $size = 9; + $data = $this->_readBIFF8CellRangeAddress(substr($formulaData, 1, 8)); + break; + case 0x26: // Constant reference sub-expression + case 0x46: + case 0x66: + $name = 'tMemArea'; + // offset: 1; size: 4; not used + // offset: 5; size: 2; size of the following subexpression + $subSize = self::_GetInt2d($formulaData, 5); + $size = 7 + $subSize; + $data = $this->_getFormulaFromData(substr($formulaData, 7, $subSize)); + break; + case 0x27: // Deleted constant reference sub-expression + case 0x47: + case 0x67: + $name = 'tMemErr'; + // offset: 1; size: 4; not used + // offset: 5; size: 2; size of the following subexpression + $subSize = self::_GetInt2d($formulaData, 5); + $size = 7 + $subSize; + $data = $this->_getFormulaFromData(substr($formulaData, 7, $subSize)); + break; + case 0x29: // Variable reference sub-expression + case 0x49: + case 0x69: + $name = 'tMemFunc'; + // offset: 1; size: 2; size of the following sub-expression + $subSize = self::_GetInt2d($formulaData, 1); + $size = 3 + $subSize; + $data = $this->_getFormulaFromData(substr($formulaData, 3, $subSize)); + break; + + case 0x2C: // Relative 2d cell reference reference, used in shared formulas and some other places + case 0x4C: + case 0x6C: + $name = 'tRefN'; + $size = 5; + $data = $this->_readBIFF8CellAddressB(substr($formulaData, 1, 4), $baseCell); + break; + + case 0x2D: // Relative 2d range reference + case 0x4D: + case 0x6D: + $name = 'tAreaN'; + $size = 9; + $data = $this->_readBIFF8CellRangeAddressB(substr($formulaData, 1, 8), $baseCell); + break; + + case 0x39: // External name + case 0x59: + case 0x79: + $name = 'tNameX'; + $size = 7; + // offset: 1; size: 2; index to REF entry in EXTERNSHEET record + // offset: 3; size: 2; one-based index to DEFINEDNAME or EXTERNNAME record + $index = self::_GetInt2d($formulaData, 3); + // assume index is to EXTERNNAME record + $data = $this->_externalNames[$index - 1]['name']; + // offset: 5; size: 2; not used + break; + + case 0x3A: // 3d reference to cell + case 0x5A: + case 0x7A: + $name = 'tRef3d'; + $size = 7; + + try { + // offset: 1; size: 2; index to REF entry + $sheetRange = $this->_readSheetRangeByRefIndex(self::_GetInt2d($formulaData, 1)); + // offset: 3; size: 4; cell address + $cellAddress = $this->_readBIFF8CellAddress(substr($formulaData, 3, 4)); + + $data = "$sheetRange!$cellAddress"; + } catch (PHPExcel_Exception $e) { + // deleted sheet reference + $data = '#REF!'; + } + + break; + case 0x3B: // 3d reference to cell range + case 0x5B: + case 0x7B: + $name = 'tArea3d'; + $size = 11; + + try { + // offset: 1; size: 2; index to REF entry + $sheetRange = $this->_readSheetRangeByRefIndex(self::_GetInt2d($formulaData, 1)); + // offset: 3; size: 8; cell address + $cellRangeAddress = $this->_readBIFF8CellRangeAddress(substr($formulaData, 3, 8)); + + $data = "$sheetRange!$cellRangeAddress"; + } catch (PHPExcel_Exception $e) { + // deleted sheet reference + $data = '#REF!'; + } + + break; + // Unknown cases // don't know how to deal with + default: + throw new PHPExcel_Reader_Exception('Unrecognized token ' . sprintf('%02X', $id) . ' in formula'); + break; + } + + return array( + 'id' => $id, + 'name' => $name, + 'size' => $size, + 'data' => $data, + ); + } + + + /** + * Reads a cell address in BIFF8 e.g. 'A2' or '$A$2' + * section 3.3.4 + * + * @param string $cellAddressStructure + * @return string + */ + private function _readBIFF8CellAddress($cellAddressStructure) + { + // offset: 0; size: 2; index to row (0... 65535) (or offset (-32768... 32767)) + $row = self::_GetInt2d($cellAddressStructure, 0) + 1; + + // offset: 2; size: 2; index to column or column offset + relative flags + + // bit: 7-0; mask 0x00FF; column index + $column = PHPExcel_Cell::stringFromColumnIndex(0x00FF & self::_GetInt2d($cellAddressStructure, 2)); + + // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index) + if (!(0x4000 & self::_GetInt2d($cellAddressStructure, 2))) { + $column = '$' . $column; + } + // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index) + if (!(0x8000 & self::_GetInt2d($cellAddressStructure, 2))) { + $row = '$' . $row; + } + + return $column . $row; + } + + + /** + * Reads a cell address in BIFF8 for shared formulas. Uses positive and negative values for row and column + * to indicate offsets from a base cell + * section 3.3.4 + * + * @param string $cellAddressStructure + * @param string $baseCell Base cell, only needed when formula contains tRefN tokens, e.g. with shared formulas + * @return string + */ + private function _readBIFF8CellAddressB($cellAddressStructure, $baseCell = 'A1') + { + list($baseCol, $baseRow) = PHPExcel_Cell::coordinateFromString($baseCell); + $baseCol = PHPExcel_Cell::columnIndexFromString($baseCol) - 1; + + // offset: 0; size: 2; index to row (0... 65535) (or offset (-32768... 32767)) + $rowIndex = self::_GetInt2d($cellAddressStructure, 0); + $row = self::_GetInt2d($cellAddressStructure, 0) + 1; + + // offset: 2; size: 2; index to column or column offset + relative flags + + // bit: 7-0; mask 0x00FF; column index + $colIndex = 0x00FF & self::_GetInt2d($cellAddressStructure, 2); + + // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index) + if (!(0x4000 & self::_GetInt2d($cellAddressStructure, 2))) { + $column = PHPExcel_Cell::stringFromColumnIndex($colIndex); + $column = '$' . $column; + } else { + $colIndex = ($colIndex <= 127) ? $colIndex : $colIndex - 256; + $column = PHPExcel_Cell::stringFromColumnIndex($baseCol + $colIndex); + } + + // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index) + if (!(0x8000 & self::_GetInt2d($cellAddressStructure, 2))) { + $row = '$' . $row; + } else { + $rowIndex = ($rowIndex <= 32767) ? $rowIndex : $rowIndex - 65536; + $row = $baseRow + $rowIndex; + } + + return $column . $row; + } + + + /** + * Reads a cell range address in BIFF5 e.g. 'A2:B6' or 'A1' + * always fixed range + * section 2.5.14 + * + * @param string $subData + * @return string + * @throws PHPExcel_Reader_Exception + */ + private function _readBIFF5CellRangeAddressFixed($subData) + { + // offset: 0; size: 2; index to first row + $fr = self::_GetInt2d($subData, 0) + 1; + + // offset: 2; size: 2; index to last row + $lr = self::_GetInt2d($subData, 2) + 1; + + // offset: 4; size: 1; index to first column + $fc = ord($subData{4}); + + // offset: 5; size: 1; index to last column + $lc = ord($subData{5}); + + // check values + if ($fr > $lr || $fc > $lc) { + throw new PHPExcel_Reader_Exception('Not a cell range address'); + } + + // column index to letter + $fc = PHPExcel_Cell::stringFromColumnIndex($fc); + $lc = PHPExcel_Cell::stringFromColumnIndex($lc); + + if ($fr == $lr and $fc == $lc) { + return "$fc$fr"; + } + return "$fc$fr:$lc$lr"; + } + + + /** + * Reads a cell range address in BIFF8 e.g. 'A2:B6' or 'A1' + * always fixed range + * section 2.5.14 + * + * @param string $subData + * @return string + * @throws PHPExcel_Reader_Exception + */ + private function _readBIFF8CellRangeAddressFixed($subData) + { + // offset: 0; size: 2; index to first row + $fr = self::_GetInt2d($subData, 0) + 1; + + // offset: 2; size: 2; index to last row + $lr = self::_GetInt2d($subData, 2) + 1; + + // offset: 4; size: 2; index to first column + $fc = self::_GetInt2d($subData, 4); + + // offset: 6; size: 2; index to last column + $lc = self::_GetInt2d($subData, 6); + + // check values + if ($fr > $lr || $fc > $lc) { + throw new PHPExcel_Reader_Exception('Not a cell range address'); + } + + // column index to letter + $fc = PHPExcel_Cell::stringFromColumnIndex($fc); + $lc = PHPExcel_Cell::stringFromColumnIndex($lc); + + if ($fr == $lr and $fc == $lc) { + return "$fc$fr"; + } + return "$fc$fr:$lc$lr"; + } + + + /** + * Reads a cell range address in BIFF8 e.g. 'A2:B6' or '$A$2:$B$6' + * there are flags indicating whether column/row index is relative + * section 3.3.4 + * + * @param string $subData + * @return string + */ + private function _readBIFF8CellRangeAddress($subData) + { + // todo: if cell range is just a single cell, should this funciton + // not just return e.g. 'A1' and not 'A1:A1' ? + + // offset: 0; size: 2; index to first row (0... 65535) (or offset (-32768... 32767)) + $fr = self::_GetInt2d($subData, 0) + 1; + + // offset: 2; size: 2; index to last row (0... 65535) (or offset (-32768... 32767)) + $lr = self::_GetInt2d($subData, 2) + 1; + + // offset: 4; size: 2; index to first column or column offset + relative flags + + // bit: 7-0; mask 0x00FF; column index + $fc = PHPExcel_Cell::stringFromColumnIndex(0x00FF & self::_GetInt2d($subData, 4)); + + // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index) + if (!(0x4000 & self::_GetInt2d($subData, 4))) { + $fc = '$' . $fc; + } + + // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index) + if (!(0x8000 & self::_GetInt2d($subData, 4))) { + $fr = '$' . $fr; + } + + // offset: 6; size: 2; index to last column or column offset + relative flags + + // bit: 7-0; mask 0x00FF; column index + $lc = PHPExcel_Cell::stringFromColumnIndex(0x00FF & self::_GetInt2d($subData, 6)); + + // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index) + if (!(0x4000 & self::_GetInt2d($subData, 6))) { + $lc = '$' . $lc; + } + + // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index) + if (!(0x8000 & self::_GetInt2d($subData, 6))) { + $lr = '$' . $lr; + } + + return "$fc$fr:$lc$lr"; + } + + + /** + * Reads a cell range address in BIFF8 for shared formulas. Uses positive and negative values for row and column + * to indicate offsets from a base cell + * section 3.3.4 + * + * @param string $subData + * @param string $baseCell Base cell + * @return string Cell range address + */ + private function _readBIFF8CellRangeAddressB($subData, $baseCell = 'A1') + { + list($baseCol, $baseRow) = PHPExcel_Cell::coordinateFromString($baseCell); + $baseCol = PHPExcel_Cell::columnIndexFromString($baseCol) - 1; + + // TODO: if cell range is just a single cell, should this funciton + // not just return e.g. 'A1' and not 'A1:A1' ? + + // offset: 0; size: 2; first row + $frIndex = self::_GetInt2d($subData, 0); // adjust below + + // offset: 2; size: 2; relative index to first row (0... 65535) should be treated as offset (-32768... 32767) + $lrIndex = self::_GetInt2d($subData, 2); // adjust below + + // offset: 4; size: 2; first column with relative/absolute flags + + // bit: 7-0; mask 0x00FF; column index + $fcIndex = 0x00FF & self::_GetInt2d($subData, 4); + + // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index) + if (!(0x4000 & self::_GetInt2d($subData, 4))) { + // absolute column index + $fc = PHPExcel_Cell::stringFromColumnIndex($fcIndex); + $fc = '$' . $fc; + } else { + // column offset + $fcIndex = ($fcIndex <= 127) ? $fcIndex : $fcIndex - 256; + $fc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $fcIndex); + } + + // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index) + if (!(0x8000 & self::_GetInt2d($subData, 4))) { + // absolute row index + $fr = $frIndex + 1; + $fr = '$' . $fr; + } else { + // row offset + $frIndex = ($frIndex <= 32767) ? $frIndex : $frIndex - 65536; + $fr = $baseRow + $frIndex; + } + + // offset: 6; size: 2; last column with relative/absolute flags + + // bit: 7-0; mask 0x00FF; column index + $lcIndex = 0x00FF & self::_GetInt2d($subData, 6); + $lcIndex = ($lcIndex <= 127) ? $lcIndex : $lcIndex - 256; + $lc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $lcIndex); + + // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index) + if (!(0x4000 & self::_GetInt2d($subData, 6))) { + // absolute column index + $lc = PHPExcel_Cell::stringFromColumnIndex($lcIndex); + $lc = '$' . $lc; + } else { + // column offset + $lcIndex = ($lcIndex <= 127) ? $lcIndex : $lcIndex - 256; + $lc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $lcIndex); + } + + // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index) + if (!(0x8000 & self::_GetInt2d($subData, 6))) { + // absolute row index + $lr = $lrIndex + 1; + $lr = '$' . $lr; + } else { + // row offset + $lrIndex = ($lrIndex <= 32767) ? $lrIndex : $lrIndex - 65536; + $lr = $baseRow + $lrIndex; + } + + return "$fc$fr:$lc$lr"; + } + + + /** + * Read BIFF8 cell range address list + * section 2.5.15 + * + * @param string $subData + * @return array + */ + private function _readBIFF8CellRangeAddressList($subData) + { + $cellRangeAddresses = array(); + + // offset: 0; size: 2; number of the following cell range addresses + $nm = self::_GetInt2d($subData, 0); + + $offset = 2; + // offset: 2; size: 8 * $nm; list of $nm (fixed) cell range addresses + for ($i = 0; $i < $nm; ++$i) { + $cellRangeAddresses[] = $this->_readBIFF8CellRangeAddressFixed(substr($subData, $offset, 8)); + $offset += 8; + } + + return array( + 'size' => 2 + 8 * $nm, + 'cellRangeAddresses' => $cellRangeAddresses, + ); + } + + + /** + * Read BIFF5 cell range address list + * section 2.5.15 + * + * @param string $subData + * @return array + */ + private function _readBIFF5CellRangeAddressList($subData) + { + $cellRangeAddresses = array(); + + // offset: 0; size: 2; number of the following cell range addresses + $nm = self::_GetInt2d($subData, 0); + + $offset = 2; + // offset: 2; size: 6 * $nm; list of $nm (fixed) cell range addresses + for ($i = 0; $i < $nm; ++$i) { + $cellRangeAddresses[] = $this->_readBIFF5CellRangeAddressFixed(substr($subData, $offset, 6)); + $offset += 6; + } + + return array( + 'size' => 2 + 6 * $nm, + 'cellRangeAddresses' => $cellRangeAddresses, + ); + } + + + /** + * Get a sheet range like Sheet1:Sheet3 from REF index + * Note: If there is only one sheet in the range, one gets e.g Sheet1 + * It can also happen that the REF structure uses the -1 (FFFF) code to indicate deleted sheets, + * in which case an PHPExcel_Reader_Exception is thrown + * + * @param int $index + * @return string|false + * @throws PHPExcel_Reader_Exception + */ + private function _readSheetRangeByRefIndex($index) + { + if (isset($this->_ref[$index])) { + + $type = $this->_externalBooks[$this->_ref[$index]['externalBookIndex']]['type']; + + switch ($type) { + case 'internal': + // check if we have a deleted 3d reference + if ($this->_ref[$index]['firstSheetIndex'] == 0xFFFF or $this->_ref[$index]['lastSheetIndex'] == 0xFFFF) { + throw new PHPExcel_Reader_Exception('Deleted sheet reference'); + } + + // we have normal sheet range (collapsed or uncollapsed) + $firstSheetName = $this->_sheets[$this->_ref[$index]['firstSheetIndex']]['name']; + $lastSheetName = $this->_sheets[$this->_ref[$index]['lastSheetIndex']]['name']; + + if ($firstSheetName == $lastSheetName) { + // collapsed sheet range + $sheetRange = $firstSheetName; + } else { + $sheetRange = "$firstSheetName:$lastSheetName"; + } + + // escape the single-quotes + $sheetRange = str_replace("'", "''", $sheetRange); + + // if there are special characters, we need to enclose the range in single-quotes + // todo: check if we have identified the whole set of special characters + // it seems that the following characters are not accepted for sheet names + // and we may assume that they are not present: []*/:\? + if (preg_match("/[ !\"@#£$%&{()}<>=+'|^,;-]/", $sheetRange)) { + $sheetRange = "'$sheetRange'"; + } + + return $sheetRange; + break; + + default: + // TODO: external sheet support + throw new PHPExcel_Reader_Exception('Excel5 reader only supports internal sheets in fomulas'); + break; + } + } + return false; + } + + + /** + * read BIFF8 constant value array from array data + * returns e.g. array('value' => '{1,2;3,4}', 'size' => 40} + * section 2.5.8 + * + * @param string $arrayData + * @return array + */ + private static function _readBIFF8ConstantArray($arrayData) + { + // offset: 0; size: 1; number of columns decreased by 1 + $nc = ord($arrayData[0]); + + // offset: 1; size: 2; number of rows decreased by 1 + $nr = self::_GetInt2d($arrayData, 1); + $size = 3; // initialize + $arrayData = substr($arrayData, 3); + + // offset: 3; size: var; list of ($nc + 1) * ($nr + 1) constant values + $matrixChunks = array(); + for ($r = 1; $r <= $nr + 1; ++$r) { + $items = array(); + for ($c = 1; $c <= $nc + 1; ++$c) { + $constant = self::_readBIFF8Constant($arrayData); + $items[] = $constant['value']; + $arrayData = substr($arrayData, $constant['size']); + $size += $constant['size']; + } + $matrixChunks[] = implode(',', $items); // looks like e.g. '1,"hello"' + } + $matrix = '{' . implode(';', $matrixChunks) . '}'; + + return array( + 'value' => $matrix, + 'size' => $size, + ); + } + + + /** + * read BIFF8 constant value which may be 'Empty Value', 'Number', 'String Value', 'Boolean Value', 'Error Value' + * section 2.5.7 + * returns e.g. array('value' => '5', 'size' => 9) + * + * @param string $valueData + * @return array + */ + private static function _readBIFF8Constant($valueData) + { + // offset: 0; size: 1; identifier for type of constant + $identifier = ord($valueData[0]); + + switch ($identifier) { + case 0x00: // empty constant (what is this?) + $value = ''; + $size = 9; + break; + case 0x01: // number + // offset: 1; size: 8; IEEE 754 floating-point value + $value = self::_extractNumber(substr($valueData, 1, 8)); + $size = 9; + break; + case 0x02: // string value + // offset: 1; size: var; Unicode string, 16-bit string length + $string = self::_readUnicodeStringLong(substr($valueData, 1)); + $value = '"' . $string['value'] . '"'; + $size = 1 + $string['size']; + break; + case 0x04: // boolean + // offset: 1; size: 1; 0 = FALSE, 1 = TRUE + if (ord($valueData[1])) { + $value = 'TRUE'; + } else { + $value = 'FALSE'; + } + $size = 9; + break; + case 0x10: // error code + // offset: 1; size: 1; error code + $value = self::_mapErrorCode(ord($valueData[1])); + $size = 9; + break; + } + return array( + 'value' => $value, + 'size' => $size, + ); + } + + + /** + * Extract RGB color + * OpenOffice.org's Documentation of the Microsoft Excel File Format, section 2.5.4 + * + * @param string $rgb Encoded RGB value (4 bytes) + * @return array + */ + private static function _readRGB($rgb) + { + // offset: 0; size 1; Red component + $r = ord($rgb{0}); + + // offset: 1; size: 1; Green component + $g = ord($rgb{1}); + + // offset: 2; size: 1; Blue component + $b = ord($rgb{2}); + + // HEX notation, e.g. 'FF00FC' + $rgb = sprintf('%02X%02X%02X', $r, $g, $b); + + return array('rgb' => $rgb); + } + + + /** + * Read byte string (8-bit string length) + * OpenOffice documentation: 2.5.2 + * + * @param string $subData + * @return array + */ + private function _readByteStringShort($subData) + { + // offset: 0; size: 1; length of the string (character count) + $ln = ord($subData[0]); + + // offset: 1: size: var; character array (8-bit characters) + $value = $this->_decodeCodepage(substr($subData, 1, $ln)); + + return array( + 'value' => $value, + 'size' => 1 + $ln, // size in bytes of data structure + ); + } + + + /** + * Read byte string (16-bit string length) + * OpenOffice documentation: 2.5.2 + * + * @param string $subData + * @return array + */ + private function _readByteStringLong($subData) + { + // offset: 0; size: 2; length of the string (character count) + $ln = self::_GetInt2d($subData, 0); + + // offset: 2: size: var; character array (8-bit characters) + $value = $this->_decodeCodepage(substr($subData, 2)); + + //return $string; + return array( + 'value' => $value, + 'size' => 2 + $ln, // size in bytes of data structure + ); + } + + + /** + * Extracts an Excel Unicode short string (8-bit string length) + * OpenOffice documentation: 2.5.3 + * function will automatically find out where the Unicode string ends. + * + * @param string $subData + * @return array + */ + private static function _readUnicodeStringShort($subData) + { + $value = ''; + + // offset: 0: size: 1; length of the string (character count) + $characterCount = ord($subData[0]); + + $string = self::_readUnicodeString(substr($subData, 1), $characterCount); + + // add 1 for the string length + $string['size'] += 1; + + return $string; + } + + + /** + * Extracts an Excel Unicode long string (16-bit string length) + * OpenOffice documentation: 2.5.3 + * this function is under construction, needs to support rich text, and Asian phonetic settings + * + * @param string $subData + * @return array + */ + private static function _readUnicodeStringLong($subData) + { + $value = ''; + + // offset: 0: size: 2; length of the string (character count) + $characterCount = self::_GetInt2d($subData, 0); + + $string = self::_readUnicodeString(substr($subData, 2), $characterCount); + + // add 2 for the string length + $string['size'] += 2; + + return $string; + } + + + /** + * Read Unicode string with no string length field, but with known character count + * this function is under construction, needs to support rich text, and Asian phonetic settings + * OpenOffice.org's Documentation of the Microsoft Excel File Format, section 2.5.3 + * + * @param string $subData + * @param int $characterCount + * @return array + */ + private static function _readUnicodeString($subData, $characterCount) + { + $value = ''; + + // offset: 0: size: 1; option flags + + // bit: 0; mask: 0x01; character compression (0 = compressed 8-bit, 1 = uncompressed 16-bit) + $isCompressed = !((0x01 & ord($subData[0])) >> 0); + + // bit: 2; mask: 0x04; Asian phonetic settings + $hasAsian = (0x04) & ord($subData[0]) >> 2; + + // bit: 3; mask: 0x08; Rich-Text settings + $hasRichText = (0x08) & ord($subData[0]) >> 3; + + // offset: 1: size: var; character array + // this offset assumes richtext and Asian phonetic settings are off which is generally wrong + // needs to be fixed + $value = self::_encodeUTF16(substr($subData, 1, $isCompressed ? $characterCount : 2 * $characterCount), $isCompressed); + + return array( + 'value' => $value, + 'size' => $isCompressed ? 1 + $characterCount : 1 + 2 * $characterCount, // the size in bytes including the option flags + ); + } + + + /** + * Convert UTF-8 string to string surounded by double quotes. Used for explicit string tokens in formulas. + * Example: hello"world --> "hello""world" + * + * @param string $value UTF-8 encoded string + * @return string + */ + private static function _UTF8toExcelDoubleQuoted($value) + { + return '"' . str_replace('"', '""', $value) . '"'; + } + + + /** + * Reads first 8 bytes of a string and return IEEE 754 float + * + * @param string $data Binary string that is at least 8 bytes long + * @return float + */ + private static function _extractNumber($data) + { + $rknumhigh = self::_GetInt4d($data, 4); + $rknumlow = self::_GetInt4d($data, 0); + $sign = ($rknumhigh & 0x80000000) >> 31; + $exp = (($rknumhigh & 0x7ff00000) >> 20) - 1023; + $mantissa = (0x100000 | ($rknumhigh & 0x000fffff)); + $mantissalow1 = ($rknumlow & 0x80000000) >> 31; + $mantissalow2 = ($rknumlow & 0x7fffffff); + $value = $mantissa / pow( 2 , (20 - $exp)); + + if ($mantissalow1 != 0) { + $value += 1 / pow (2 , (21 - $exp)); + } + + $value += $mantissalow2 / pow (2 , (52 - $exp)); + if ($sign) { + $value *= -1; + } + + return $value; + } + + + private static function _GetIEEE754($rknum) + { + if (($rknum & 0x02) != 0) { + $value = $rknum >> 2; + } else { + // changes by mmp, info on IEEE754 encoding from + // research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html + // The RK format calls for using only the most significant 30 bits + // of the 64 bit floating point value. The other 34 bits are assumed + // to be 0 so we use the upper 30 bits of $rknum as follows... + $sign = ($rknum & 0x80000000) >> 31; + $exp = ($rknum & 0x7ff00000) >> 20; + $mantissa = (0x100000 | ($rknum & 0x000ffffc)); + $value = $mantissa / pow( 2 , (20- ($exp - 1023))); + if ($sign) { + $value = -1 * $value; + } + //end of changes by mmp + } + if (($rknum & 0x01) != 0) { + $value /= 100; + } + return $value; + } + + + /** + * Get UTF-8 string from (compressed or uncompressed) UTF-16 string + * + * @param string $string + * @param bool $compressed + * @return string + */ + private static function _encodeUTF16($string, $compressed = '') + { + if ($compressed) { + $string = self::_uncompressByteString($string); + } + + return PHPExcel_Shared_String::ConvertEncoding($string, 'UTF-8', 'UTF-16LE'); + } + + + /** + * Convert UTF-16 string in compressed notation to uncompressed form. Only used for BIFF8. + * + * @param string $string + * @return string + */ + private static function _uncompressByteString($string) + { + $uncompressedString = ''; + $strLen = strlen($string); + for ($i = 0; $i < $strLen; ++$i) { + $uncompressedString .= $string[$i] . "\0"; + } + + return $uncompressedString; + } + + + /** + * Convert string to UTF-8. Only used for BIFF5. + * + * @param string $string + * @return string + */ + private function _decodeCodepage($string) + { + return PHPExcel_Shared_String::ConvertEncoding($string, 'UTF-8', $this->_codepage); + } + + + /** + * Read 16-bit unsigned integer + * + * @param string $data + * @param int $pos + * @return int + */ + public static function _GetInt2d($data, $pos) + { + return ord($data[$pos]) | (ord($data[$pos+1]) << 8); + } + + + /** + * Read 32-bit signed integer + * + * @param string $data + * @param int $pos + * @return int + */ + public static function _GetInt4d($data, $pos) + { + // FIX: represent numbers correctly on 64-bit system + // http://sourceforge.net/tracker/index.php?func=detail&aid=1487372&group_id=99160&atid=623334 + // Hacked by Andreas Rehm 2006 to ensure correct result of the <<24 block on 32 and 64bit systems + $_or_24 = ord($data[$pos + 3]); + if ($_or_24 >= 128) { + // negative number + $_ord_24 = -abs((256 - $_or_24) << 24); + } else { + $_ord_24 = ($_or_24 & 127) << 24; + } + return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | $_ord_24; + } + + + /** + * Read color + * + * @param int $color Indexed color + * @param array $palette Color palette + * @return array RGB color value, example: array('rgb' => 'FF0000') + */ + private static function _readColor($color,$palette,$version) + { + if ($color <= 0x07 || $color >= 0x40) { + // special built-in color + return self::_mapBuiltInColor($color); + } elseif (isset($palette) && isset($palette[$color - 8])) { + // palette color, color index 0x08 maps to pallete index 0 + return $palette[$color - 8]; + } else { + // default color table + if ($version == self::XLS_BIFF8) { + return self::_mapColor($color); + } else { + // BIFF5 + return self::_mapColorBIFF5($color); + } + } + + return $color; + } + + + /** + * Map border style + * OpenOffice documentation: 2.5.11 + * + * @param int $index + * @return string + */ + private static function _mapBorderStyle($index) + { + switch ($index) { + case 0x00: return PHPExcel_Style_Border::BORDER_NONE; + case 0x01: return PHPExcel_Style_Border::BORDER_THIN; + case 0x02: return PHPExcel_Style_Border::BORDER_MEDIUM; + case 0x03: return PHPExcel_Style_Border::BORDER_DASHED; + case 0x04: return PHPExcel_Style_Border::BORDER_DOTTED; + case 0x05: return PHPExcel_Style_Border::BORDER_THICK; + case 0x06: return PHPExcel_Style_Border::BORDER_DOUBLE; + case 0x07: return PHPExcel_Style_Border::BORDER_HAIR; + case 0x08: return PHPExcel_Style_Border::BORDER_MEDIUMDASHED; + case 0x09: return PHPExcel_Style_Border::BORDER_DASHDOT; + case 0x0A: return PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT; + case 0x0B: return PHPExcel_Style_Border::BORDER_DASHDOTDOT; + case 0x0C: return PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT; + case 0x0D: return PHPExcel_Style_Border::BORDER_SLANTDASHDOT; + default: return PHPExcel_Style_Border::BORDER_NONE; + } + } + + + /** + * Get fill pattern from index + * OpenOffice documentation: 2.5.12 + * + * @param int $index + * @return string + */ + private static function _mapFillPattern($index) + { + switch ($index) { + case 0x00: return PHPExcel_Style_Fill::FILL_NONE; + case 0x01: return PHPExcel_Style_Fill::FILL_SOLID; + case 0x02: return PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY; + case 0x03: return PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY; + case 0x04: return PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY; + case 0x05: return PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL; + case 0x06: return PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL; + case 0x07: return PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN; + case 0x08: return PHPExcel_Style_Fill::FILL_PATTERN_DARKUP; + case 0x09: return PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID; + case 0x0A: return PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS; + case 0x0B: return PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL; + case 0x0C: return PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL; + case 0x0D: return PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN; + case 0x0E: return PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP; + case 0x0F: return PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID; + case 0x10: return PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS; + case 0x11: return PHPExcel_Style_Fill::FILL_PATTERN_GRAY125; + case 0x12: return PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625; + default: return PHPExcel_Style_Fill::FILL_NONE; + } + } + + + /** + * Map error code, e.g. '#N/A' + * + * @param int $subData + * @return string + */ + private static function _mapErrorCode($subData) + { + switch ($subData) { + case 0x00: return '#NULL!'; break; + case 0x07: return '#DIV/0!'; break; + case 0x0F: return '#VALUE!'; break; + case 0x17: return '#REF!'; break; + case 0x1D: return '#NAME?'; break; + case 0x24: return '#NUM!'; break; + case 0x2A: return '#N/A'; break; + default: return false; + } + } + + + /** + * Map built-in color to RGB value + * + * @param int $color Indexed color + * @return array + */ + private static function _mapBuiltInColor($color) + { + switch ($color) { + case 0x00: return array('rgb' => '000000'); + case 0x01: return array('rgb' => 'FFFFFF'); + case 0x02: return array('rgb' => 'FF0000'); + case 0x03: return array('rgb' => '00FF00'); + case 0x04: return array('rgb' => '0000FF'); + case 0x05: return array('rgb' => 'FFFF00'); + case 0x06: return array('rgb' => 'FF00FF'); + case 0x07: return array('rgb' => '00FFFF'); + case 0x40: return array('rgb' => '000000'); // system window text color + case 0x41: return array('rgb' => 'FFFFFF'); // system window background color + default: return array('rgb' => '000000'); + } + } + + + /** + * Map color array from BIFF5 built-in color index + * + * @param int $subData + * @return array + */ + private static function _mapColorBIFF5($subData) + { + switch ($subData) { + case 0x08: return array('rgb' => '000000'); + case 0x09: return array('rgb' => 'FFFFFF'); + case 0x0A: return array('rgb' => 'FF0000'); + case 0x0B: return array('rgb' => '00FF00'); + case 0x0C: return array('rgb' => '0000FF'); + case 0x0D: return array('rgb' => 'FFFF00'); + case 0x0E: return array('rgb' => 'FF00FF'); + case 0x0F: return array('rgb' => '00FFFF'); + case 0x10: return array('rgb' => '800000'); + case 0x11: return array('rgb' => '008000'); + case 0x12: return array('rgb' => '000080'); + case 0x13: return array('rgb' => '808000'); + case 0x14: return array('rgb' => '800080'); + case 0x15: return array('rgb' => '008080'); + case 0x16: return array('rgb' => 'C0C0C0'); + case 0x17: return array('rgb' => '808080'); + case 0x18: return array('rgb' => '8080FF'); + case 0x19: return array('rgb' => '802060'); + case 0x1A: return array('rgb' => 'FFFFC0'); + case 0x1B: return array('rgb' => 'A0E0F0'); + case 0x1C: return array('rgb' => '600080'); + case 0x1D: return array('rgb' => 'FF8080'); + case 0x1E: return array('rgb' => '0080C0'); + case 0x1F: return array('rgb' => 'C0C0FF'); + case 0x20: return array('rgb' => '000080'); + case 0x21: return array('rgb' => 'FF00FF'); + case 0x22: return array('rgb' => 'FFFF00'); + case 0x23: return array('rgb' => '00FFFF'); + case 0x24: return array('rgb' => '800080'); + case 0x25: return array('rgb' => '800000'); + case 0x26: return array('rgb' => '008080'); + case 0x27: return array('rgb' => '0000FF'); + case 0x28: return array('rgb' => '00CFFF'); + case 0x29: return array('rgb' => '69FFFF'); + case 0x2A: return array('rgb' => 'E0FFE0'); + case 0x2B: return array('rgb' => 'FFFF80'); + case 0x2C: return array('rgb' => 'A6CAF0'); + case 0x2D: return array('rgb' => 'DD9CB3'); + case 0x2E: return array('rgb' => 'B38FEE'); + case 0x2F: return array('rgb' => 'E3E3E3'); + case 0x30: return array('rgb' => '2A6FF9'); + case 0x31: return array('rgb' => '3FB8CD'); + case 0x32: return array('rgb' => '488436'); + case 0x33: return array('rgb' => '958C41'); + case 0x34: return array('rgb' => '8E5E42'); + case 0x35: return array('rgb' => 'A0627A'); + case 0x36: return array('rgb' => '624FAC'); + case 0x37: return array('rgb' => '969696'); + case 0x38: return array('rgb' => '1D2FBE'); + case 0x39: return array('rgb' => '286676'); + case 0x3A: return array('rgb' => '004500'); + case 0x3B: return array('rgb' => '453E01'); + case 0x3C: return array('rgb' => '6A2813'); + case 0x3D: return array('rgb' => '85396A'); + case 0x3E: return array('rgb' => '4A3285'); + case 0x3F: return array('rgb' => '424242'); + default: return array('rgb' => '000000'); + } + } + + + /** + * Map color array from BIFF8 built-in color index + * + * @param int $subData + * @return array + */ + private static function _mapColor($subData) + { + switch ($subData) { + case 0x08: return array('rgb' => '000000'); + case 0x09: return array('rgb' => 'FFFFFF'); + case 0x0A: return array('rgb' => 'FF0000'); + case 0x0B: return array('rgb' => '00FF00'); + case 0x0C: return array('rgb' => '0000FF'); + case 0x0D: return array('rgb' => 'FFFF00'); + case 0x0E: return array('rgb' => 'FF00FF'); + case 0x0F: return array('rgb' => '00FFFF'); + case 0x10: return array('rgb' => '800000'); + case 0x11: return array('rgb' => '008000'); + case 0x12: return array('rgb' => '000080'); + case 0x13: return array('rgb' => '808000'); + case 0x14: return array('rgb' => '800080'); + case 0x15: return array('rgb' => '008080'); + case 0x16: return array('rgb' => 'C0C0C0'); + case 0x17: return array('rgb' => '808080'); + case 0x18: return array('rgb' => '9999FF'); + case 0x19: return array('rgb' => '993366'); + case 0x1A: return array('rgb' => 'FFFFCC'); + case 0x1B: return array('rgb' => 'CCFFFF'); + case 0x1C: return array('rgb' => '660066'); + case 0x1D: return array('rgb' => 'FF8080'); + case 0x1E: return array('rgb' => '0066CC'); + case 0x1F: return array('rgb' => 'CCCCFF'); + case 0x20: return array('rgb' => '000080'); + case 0x21: return array('rgb' => 'FF00FF'); + case 0x22: return array('rgb' => 'FFFF00'); + case 0x23: return array('rgb' => '00FFFF'); + case 0x24: return array('rgb' => '800080'); + case 0x25: return array('rgb' => '800000'); + case 0x26: return array('rgb' => '008080'); + case 0x27: return array('rgb' => '0000FF'); + case 0x28: return array('rgb' => '00CCFF'); + case 0x29: return array('rgb' => 'CCFFFF'); + case 0x2A: return array('rgb' => 'CCFFCC'); + case 0x2B: return array('rgb' => 'FFFF99'); + case 0x2C: return array('rgb' => '99CCFF'); + case 0x2D: return array('rgb' => 'FF99CC'); + case 0x2E: return array('rgb' => 'CC99FF'); + case 0x2F: return array('rgb' => 'FFCC99'); + case 0x30: return array('rgb' => '3366FF'); + case 0x31: return array('rgb' => '33CCCC'); + case 0x32: return array('rgb' => '99CC00'); + case 0x33: return array('rgb' => 'FFCC00'); + case 0x34: return array('rgb' => 'FF9900'); + case 0x35: return array('rgb' => 'FF6600'); + case 0x36: return array('rgb' => '666699'); + case 0x37: return array('rgb' => '969696'); + case 0x38: return array('rgb' => '003366'); + case 0x39: return array('rgb' => '339966'); + case 0x3A: return array('rgb' => '003300'); + case 0x3B: return array('rgb' => '333300'); + case 0x3C: return array('rgb' => '993300'); + case 0x3D: return array('rgb' => '993366'); + case 0x3E: return array('rgb' => '333399'); + case 0x3F: return array('rgb' => '333333'); + default: return array('rgb' => '000000'); + } + } + + + private function _parseRichText($is = '') { + $value = new PHPExcel_RichText(); + + $value->createText($is); + + return $value; + } + +} diff --git a/PHPExcel/Reader/Excel5/Escher.php b/PHPExcel/Reader/Excel5/Escher.php new file mode 100644 index 0000000..3ed82c6 --- /dev/null +++ b/PHPExcel/Reader/Excel5/Escher.php @@ -0,0 +1,640 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Reader_Excel5_Escher + * + * @category PHPExcel + * @package PHPExcel_Reader_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_Excel5_Escher +{ + const DGGCONTAINER = 0xF000; + const BSTORECONTAINER = 0xF001; + const DGCONTAINER = 0xF002; + const SPGRCONTAINER = 0xF003; + const SPCONTAINER = 0xF004; + const DGG = 0xF006; + const BSE = 0xF007; + const DG = 0xF008; + const SPGR = 0xF009; + const SP = 0xF00A; + const OPT = 0xF00B; + const CLIENTTEXTBOX = 0xF00D; + const CLIENTANCHOR = 0xF010; + const CLIENTDATA = 0xF011; + const BLIPJPEG = 0xF01D; + const BLIPPNG = 0xF01E; + const SPLITMENUCOLORS = 0xF11E; + const TERTIARYOPT = 0xF122; + + /** + * Escher stream data (binary) + * + * @var string + */ + private $_data; + + /** + * Size in bytes of the Escher stream data + * + * @var int + */ + private $_dataSize; + + /** + * Current position of stream pointer in Escher stream data + * + * @var int + */ + private $_pos; + + /** + * The object to be returned by the reader. Modified during load. + * + * @var mixed + */ + private $_object; + + /** + * Create a new PHPExcel_Reader_Excel5_Escher instance + * + * @param mixed $object + */ + public function __construct($object) + { + $this->_object = $object; + } + + /** + * Load Escher stream data. May be a partial Escher stream. + * + * @param string $data + */ + public function load($data) + { + $this->_data = $data; + + // total byte size of Excel data (workbook global substream + sheet substreams) + $this->_dataSize = strlen($this->_data); + + $this->_pos = 0; + + // Parse Escher stream + while ($this->_pos < $this->_dataSize) { + + // offset: 2; size: 2: Record Type + $fbt = PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos + 2); + + switch ($fbt) { + case self::DGGCONTAINER: $this->_readDggContainer(); break; + case self::DGG: $this->_readDgg(); break; + case self::BSTORECONTAINER: $this->_readBstoreContainer(); break; + case self::BSE: $this->_readBSE(); break; + case self::BLIPJPEG: $this->_readBlipJPEG(); break; + case self::BLIPPNG: $this->_readBlipPNG(); break; + case self::OPT: $this->_readOPT(); break; + case self::TERTIARYOPT: $this->_readTertiaryOPT(); break; + case self::SPLITMENUCOLORS: $this->_readSplitMenuColors(); break; + case self::DGCONTAINER: $this->_readDgContainer(); break; + case self::DG: $this->_readDg(); break; + case self::SPGRCONTAINER: $this->_readSpgrContainer(); break; + case self::SPCONTAINER: $this->_readSpContainer(); break; + case self::SPGR: $this->_readSpgr(); break; + case self::SP: $this->_readSp(); break; + case self::CLIENTTEXTBOX: $this->_readClientTextbox(); break; + case self::CLIENTANCHOR: $this->_readClientAnchor(); break; + case self::CLIENTDATA: $this->_readClientData(); break; + default: $this->_readDefault(); break; + } + } + + return $this->_object; + } + + /** + * Read a generic record + */ + private function _readDefault() + { + // offset 0; size: 2; recVer and recInstance + $verInstance = PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos); + + // offset: 2; size: 2: Record Type + $fbt = PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos + 2); + + // bit: 0-3; mask: 0x000F; recVer + $recVer = (0x000F & $verInstance) >> 0; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read DggContainer record (Drawing Group Container) + */ + private function _readDggContainer() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + // record is a container, read contents + $dggContainer = new PHPExcel_Shared_Escher_DggContainer(); + $this->_object->setDggContainer($dggContainer); + $reader = new PHPExcel_Reader_Excel5_Escher($dggContainer); + $reader->load($recordData); + } + + /** + * Read Dgg record (Drawing Group) + */ + private function _readDgg() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read BstoreContainer record (Blip Store Container) + */ + private function _readBstoreContainer() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + // record is a container, read contents + $bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer(); + $this->_object->setBstoreContainer($bstoreContainer); + $reader = new PHPExcel_Reader_Excel5_Escher($bstoreContainer); + $reader->load($recordData); + } + + /** + * Read BSE record + */ + private function _readBSE() + { + // offset: 0; size: 2; recVer and recInstance + + // bit: 4-15; mask: 0xFFF0; recInstance + $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + // add BSE to BstoreContainer + $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE(); + $this->_object->addBSE($BSE); + + $BSE->setBLIPType($recInstance); + + // offset: 0; size: 1; btWin32 (MSOBLIPTYPE) + $btWin32 = ord($recordData[0]); + + // offset: 1; size: 1; btWin32 (MSOBLIPTYPE) + $btMacOS = ord($recordData[1]); + + // offset: 2; size: 16; MD4 digest + $rgbUid = substr($recordData, 2, 16); + + // offset: 18; size: 2; tag + $tag = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 18); + + // offset: 20; size: 4; size of BLIP in bytes + $size = PHPExcel_Reader_Excel5::_GetInt4d($recordData, 20); + + // offset: 24; size: 4; number of references to this BLIP + $cRef = PHPExcel_Reader_Excel5::_GetInt4d($recordData, 24); + + // offset: 28; size: 4; MSOFO file offset + $foDelay = PHPExcel_Reader_Excel5::_GetInt4d($recordData, 28); + + // offset: 32; size: 1; unused1 + $unused1 = ord($recordData{32}); + + // offset: 33; size: 1; size of nameData in bytes (including null terminator) + $cbName = ord($recordData{33}); + + // offset: 34; size: 1; unused2 + $unused2 = ord($recordData{34}); + + // offset: 35; size: 1; unused3 + $unused3 = ord($recordData{35}); + + // offset: 36; size: $cbName; nameData + $nameData = substr($recordData, 36, $cbName); + + // offset: 36 + $cbName, size: var; the BLIP data + $blipData = substr($recordData, 36 + $cbName); + + // record is a container, read contents + $reader = new PHPExcel_Reader_Excel5_Escher($BSE); + $reader->load($blipData); + } + + /** + * Read BlipJPEG record. Holds raw JPEG image data + */ + private function _readBlipJPEG() + { + // offset: 0; size: 2; recVer and recInstance + + // bit: 4-15; mask: 0xFFF0; recInstance + $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + $pos = 0; + + // offset: 0; size: 16; rgbUid1 (MD4 digest of) + $rgbUid1 = substr($recordData, 0, 16); + $pos += 16; + + // offset: 16; size: 16; rgbUid2 (MD4 digest), only if $recInstance = 0x46B or 0x6E3 + if (in_array($recInstance, array(0x046B, 0x06E3))) { + $rgbUid2 = substr($recordData, 16, 16); + $pos += 16; + } + + // offset: var; size: 1; tag + $tag = ord($recordData{$pos}); + $pos += 1; + + // offset: var; size: var; the raw image data + $data = substr($recordData, $pos); + + $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip(); + $blip->setData($data); + + $this->_object->setBlip($blip); + } + + /** + * Read BlipPNG record. Holds raw PNG image data + */ + private function _readBlipPNG() + { + // offset: 0; size: 2; recVer and recInstance + + // bit: 4-15; mask: 0xFFF0; recInstance + $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + $pos = 0; + + // offset: 0; size: 16; rgbUid1 (MD4 digest of) + $rgbUid1 = substr($recordData, 0, 16); + $pos += 16; + + // offset: 16; size: 16; rgbUid2 (MD4 digest), only if $recInstance = 0x46B or 0x6E3 + if ($recInstance == 0x06E1) { + $rgbUid2 = substr($recordData, 16, 16); + $pos += 16; + } + + // offset: var; size: 1; tag + $tag = ord($recordData{$pos}); + $pos += 1; + + // offset: var; size: var; the raw image data + $data = substr($recordData, $pos); + + $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip(); + $blip->setData($data); + + $this->_object->setBlip($blip); + } + + /** + * Read OPT record. This record may occur within DggContainer record or SpContainer + */ + private function _readOPT() + { + // offset: 0; size: 2; recVer and recInstance + + // bit: 4-15; mask: 0xFFF0; recInstance + $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + $this->_readOfficeArtRGFOPTE($recordData, $recInstance); + } + + /** + * Read TertiaryOPT record + */ + private function _readTertiaryOPT() + { + // offset: 0; size: 2; recVer and recInstance + + // bit: 4-15; mask: 0xFFF0; recInstance + $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read SplitMenuColors record + */ + private function _readSplitMenuColors() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read DgContainer record (Drawing Container) + */ + private function _readDgContainer() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + // record is a container, read contents + $dgContainer = new PHPExcel_Shared_Escher_DgContainer(); + $this->_object->setDgContainer($dgContainer); + $reader = new PHPExcel_Reader_Excel5_Escher($dgContainer); + $escher = $reader->load($recordData); + } + + /** + * Read Dg record (Drawing) + */ + private function _readDg() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read SpgrContainer record (Shape Group Container) + */ + private function _readSpgrContainer() + { + // context is either context DgContainer or SpgrContainer + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + // record is a container, read contents + $spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer(); + + if ($this->_object instanceof PHPExcel_Shared_Escher_DgContainer) { + // DgContainer + $this->_object->setSpgrContainer($spgrContainer); + } else { + // SpgrContainer + $this->_object->addChild($spgrContainer); + } + + $reader = new PHPExcel_Reader_Excel5_Escher($spgrContainer); + $escher = $reader->load($recordData); + } + + /** + * Read SpContainer record (Shape Container) + */ + private function _readSpContainer() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // add spContainer to spgrContainer + $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer(); + $this->_object->addChild($spContainer); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + // record is a container, read contents + $reader = new PHPExcel_Reader_Excel5_Escher($spContainer); + $escher = $reader->load($recordData); + } + + /** + * Read Spgr record (Shape Group) + */ + private function _readSpgr() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read Sp record (Shape) + */ + private function _readSp() + { + // offset: 0; size: 2; recVer and recInstance + + // bit: 4-15; mask: 0xFFF0; recInstance + $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read ClientTextbox record + */ + private function _readClientTextbox() + { + // offset: 0; size: 2; recVer and recInstance + + // bit: 4-15; mask: 0xFFF0; recInstance + $recInstance = (0xFFF0 & PHPExcel_Reader_Excel5::_GetInt2d($this->_data, $this->_pos)) >> 4; + + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read ClientAnchor record. This record holds information about where the shape is anchored in worksheet + */ + private function _readClientAnchor() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + + // offset: 2; size: 2; upper-left corner column index (0-based) + $c1 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 2); + + // offset: 4; size: 2; upper-left corner horizontal offset in 1/1024 of column width + $startOffsetX = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 4); + + // offset: 6; size: 2; upper-left corner row index (0-based) + $r1 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 6); + + // offset: 8; size: 2; upper-left corner vertical offset in 1/256 of row height + $startOffsetY = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 8); + + // offset: 10; size: 2; bottom-right corner column index (0-based) + $c2 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 10); + + // offset: 12; size: 2; bottom-right corner horizontal offset in 1/1024 of column width + $endOffsetX = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 12); + + // offset: 14; size: 2; bottom-right corner row index (0-based) + $r2 = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 14); + + // offset: 16; size: 2; bottom-right corner vertical offset in 1/256 of row height + $endOffsetY = PHPExcel_Reader_Excel5::_GetInt2d($recordData, 16); + + // set the start coordinates + $this->_object->setStartCoordinates(PHPExcel_Cell::stringFromColumnIndex($c1) . ($r1 + 1)); + + // set the start offsetX + $this->_object->setStartOffsetX($startOffsetX); + + // set the start offsetY + $this->_object->setStartOffsetY($startOffsetY); + + // set the end coordinates + $this->_object->setEndCoordinates(PHPExcel_Cell::stringFromColumnIndex($c2) . ($r2 + 1)); + + // set the end offsetX + $this->_object->setEndOffsetX($endOffsetX); + + // set the end offsetY + $this->_object->setEndOffsetY($endOffsetY); + } + + /** + * Read ClientData record + */ + private function _readClientData() + { + $length = PHPExcel_Reader_Excel5::_GetInt4d($this->_data, $this->_pos + 4); + $recordData = substr($this->_data, $this->_pos + 8, $length); + + // move stream pointer to next record + $this->_pos += 8 + $length; + } + + /** + * Read OfficeArtRGFOPTE table of property-value pairs + * + * @param string $data Binary data + * @param int $n Number of properties + */ + private function _readOfficeArtRGFOPTE($data, $n) { + + $splicedComplexData = substr($data, 6 * $n); + + // loop through property-value pairs + for ($i = 0; $i < $n; ++$i) { + // read 6 bytes at a time + $fopte = substr($data, 6 * $i, 6); + + // offset: 0; size: 2; opid + $opid = PHPExcel_Reader_Excel5::_GetInt2d($fopte, 0); + + // bit: 0-13; mask: 0x3FFF; opid.opid + $opidOpid = (0x3FFF & $opid) >> 0; + + // bit: 14; mask 0x4000; 1 = value in op field is BLIP identifier + $opidFBid = (0x4000 & $opid) >> 14; + + // bit: 15; mask 0x8000; 1 = this is a complex property, op field specifies size of complex data + $opidFComplex = (0x8000 & $opid) >> 15; + + // offset: 2; size: 4; the value for this property + $op = PHPExcel_Reader_Excel5::_GetInt4d($fopte, 2); + + if ($opidFComplex) { + $complexData = substr($splicedComplexData, 0, $op); + $splicedComplexData = substr($splicedComplexData, $op); + + // we store string value with complex data + $value = $complexData; + } else { + // we store integer value + $value = $op; + } + + $this->_object->setOPT($opidOpid, $value); + } + } + +} diff --git a/PHPExcel/Reader/Excel5/MD5.php b/PHPExcel/Reader/Excel5/MD5.php new file mode 100644 index 0000000..946d5a0 --- /dev/null +++ b/PHPExcel/Reader/Excel5/MD5.php @@ -0,0 +1,221 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Reader_Excel5_MD5 + * + * @category PHPExcel + * @package PHPExcel_Reader_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_Excel5_MD5 +{ + // Context + private $a; + private $b; + private $c; + private $d; + + + /** + * MD5 stream constructor + */ + public function __construct() + { + $this->reset(); + } + + + /** + * Reset the MD5 stream context + */ + public function reset() + { + $this->a = 0x67452301; + $this->b = 0xEFCDAB89; + $this->c = 0x98BADCFE; + $this->d = 0x10325476; + } + + + /** + * Get MD5 stream context + * + * @return string + */ + public function getContext() + { + $s = ''; + foreach (array('a', 'b', 'c', 'd') as $i) { + $v = $this->{$i}; + $s .= chr($v & 0xff); + $s .= chr(($v >> 8) & 0xff); + $s .= chr(($v >> 16) & 0xff); + $s .= chr(($v >> 24) & 0xff); + } + + return $s; + } + + + /** + * Add data to context + * + * @param string $data Data to add + */ + public function add($data) + { + $words = array_values(unpack('V16', $data)); + + $A = $this->a; + $B = $this->b; + $C = $this->c; + $D = $this->d; + + $F = array('PHPExcel_Reader_Excel5_MD5','F'); + $G = array('PHPExcel_Reader_Excel5_MD5','G'); + $H = array('PHPExcel_Reader_Excel5_MD5','H'); + $I = array('PHPExcel_Reader_Excel5_MD5','I'); + + /* ROUND 1 */ + self::step($F, $A, $B, $C, $D, $words[0], 7, 0xd76aa478); + self::step($F, $D, $A, $B, $C, $words[1], 12, 0xe8c7b756); + self::step($F, $C, $D, $A, $B, $words[2], 17, 0x242070db); + self::step($F, $B, $C, $D, $A, $words[3], 22, 0xc1bdceee); + self::step($F, $A, $B, $C, $D, $words[4], 7, 0xf57c0faf); + self::step($F, $D, $A, $B, $C, $words[5], 12, 0x4787c62a); + self::step($F, $C, $D, $A, $B, $words[6], 17, 0xa8304613); + self::step($F, $B, $C, $D, $A, $words[7], 22, 0xfd469501); + self::step($F, $A, $B, $C, $D, $words[8], 7, 0x698098d8); + self::step($F, $D, $A, $B, $C, $words[9], 12, 0x8b44f7af); + self::step($F, $C, $D, $A, $B, $words[10], 17, 0xffff5bb1); + self::step($F, $B, $C, $D, $A, $words[11], 22, 0x895cd7be); + self::step($F, $A, $B, $C, $D, $words[12], 7, 0x6b901122); + self::step($F, $D, $A, $B, $C, $words[13], 12, 0xfd987193); + self::step($F, $C, $D, $A, $B, $words[14], 17, 0xa679438e); + self::step($F, $B, $C, $D, $A, $words[15], 22, 0x49b40821); + + /* ROUND 2 */ + self::step($G, $A, $B, $C, $D, $words[1], 5, 0xf61e2562); + self::step($G, $D, $A, $B, $C, $words[6], 9, 0xc040b340); + self::step($G, $C, $D, $A, $B, $words[11], 14, 0x265e5a51); + self::step($G, $B, $C, $D, $A, $words[0], 20, 0xe9b6c7aa); + self::step($G, $A, $B, $C, $D, $words[5], 5, 0xd62f105d); + self::step($G, $D, $A, $B, $C, $words[10], 9, 0x02441453); + self::step($G, $C, $D, $A, $B, $words[15], 14, 0xd8a1e681); + self::step($G, $B, $C, $D, $A, $words[4], 20, 0xe7d3fbc8); + self::step($G, $A, $B, $C, $D, $words[9], 5, 0x21e1cde6); + self::step($G, $D, $A, $B, $C, $words[14], 9, 0xc33707d6); + self::step($G, $C, $D, $A, $B, $words[3], 14, 0xf4d50d87); + self::step($G, $B, $C, $D, $A, $words[8], 20, 0x455a14ed); + self::step($G, $A, $B, $C, $D, $words[13], 5, 0xa9e3e905); + self::step($G, $D, $A, $B, $C, $words[2], 9, 0xfcefa3f8); + self::step($G, $C, $D, $A, $B, $words[7], 14, 0x676f02d9); + self::step($G, $B, $C, $D, $A, $words[12], 20, 0x8d2a4c8a); + + /* ROUND 3 */ + self::step($H, $A, $B, $C, $D, $words[5], 4, 0xfffa3942); + self::step($H, $D, $A, $B, $C, $words[8], 11, 0x8771f681); + self::step($H, $C, $D, $A, $B, $words[11], 16, 0x6d9d6122); + self::step($H, $B, $C, $D, $A, $words[14], 23, 0xfde5380c); + self::step($H, $A, $B, $C, $D, $words[1], 4, 0xa4beea44); + self::step($H, $D, $A, $B, $C, $words[4], 11, 0x4bdecfa9); + self::step($H, $C, $D, $A, $B, $words[7], 16, 0xf6bb4b60); + self::step($H, $B, $C, $D, $A, $words[10], 23, 0xbebfbc70); + self::step($H, $A, $B, $C, $D, $words[13], 4, 0x289b7ec6); + self::step($H, $D, $A, $B, $C, $words[0], 11, 0xeaa127fa); + self::step($H, $C, $D, $A, $B, $words[3], 16, 0xd4ef3085); + self::step($H, $B, $C, $D, $A, $words[6], 23, 0x04881d05); + self::step($H, $A, $B, $C, $D, $words[9], 4, 0xd9d4d039); + self::step($H, $D, $A, $B, $C, $words[12], 11, 0xe6db99e5); + self::step($H, $C, $D, $A, $B, $words[15], 16, 0x1fa27cf8); + self::step($H, $B, $C, $D, $A, $words[2], 23, 0xc4ac5665); + + /* ROUND 4 */ + self::step($I, $A, $B, $C, $D, $words[0], 6, 0xf4292244); + self::step($I, $D, $A, $B, $C, $words[7], 10, 0x432aff97); + self::step($I, $C, $D, $A, $B, $words[14], 15, 0xab9423a7); + self::step($I, $B, $C, $D, $A, $words[5], 21, 0xfc93a039); + self::step($I, $A, $B, $C, $D, $words[12], 6, 0x655b59c3); + self::step($I, $D, $A, $B, $C, $words[3], 10, 0x8f0ccc92); + self::step($I, $C, $D, $A, $B, $words[10], 15, 0xffeff47d); + self::step($I, $B, $C, $D, $A, $words[1], 21, 0x85845dd1); + self::step($I, $A, $B, $C, $D, $words[8], 6, 0x6fa87e4f); + self::step($I, $D, $A, $B, $C, $words[15], 10, 0xfe2ce6e0); + self::step($I, $C, $D, $A, $B, $words[6], 15, 0xa3014314); + self::step($I, $B, $C, $D, $A, $words[13], 21, 0x4e0811a1); + self::step($I, $A, $B, $C, $D, $words[4], 6, 0xf7537e82); + self::step($I, $D, $A, $B, $C, $words[11], 10, 0xbd3af235); + self::step($I, $C, $D, $A, $B, $words[2], 15, 0x2ad7d2bb); + self::step($I, $B, $C, $D, $A, $words[9], 21, 0xeb86d391); + + $this->a = ($this->a + $A) & 0xffffffff; + $this->b = ($this->b + $B) & 0xffffffff; + $this->c = ($this->c + $C) & 0xffffffff; + $this->d = ($this->d + $D) & 0xffffffff; + } + + + private static function F($X, $Y, $Z) + { + return (($X & $Y) | ((~ $X) & $Z)); // X AND Y OR NOT X AND Z + } + + + private static function G($X, $Y, $Z) + { + return (($X & $Z) | ($Y & (~ $Z))); // X AND Z OR Y AND NOT Z + } + + + private static function H($X, $Y, $Z) + { + return ($X ^ $Y ^ $Z); // X XOR Y XOR Z + } + + + private static function I($X, $Y, $Z) + { + return ($Y ^ ($X | (~ $Z))) ; // Y XOR (X OR NOT Z) + } + + + private static function step($func, &$A, $B, $C, $D, $M, $s, $t) + { + $A = ($A + call_user_func($func, $B, $C, $D) + $M + $t) & 0xffffffff; + $A = self::rotate($A, $s); + $A = ($B + $A) & 0xffffffff; + } + + + private static function rotate($decimal, $bits) + { + $binary = str_pad(decbin($decimal), 32, "0", STR_PAD_LEFT); + return bindec(substr($binary, $bits).substr($binary, 0, $bits)); + } +} \ No newline at end of file diff --git a/PHPExcel/Reader/Excel5/RC4.php b/PHPExcel/Reader/Excel5/RC4.php new file mode 100644 index 0000000..dc6327c --- /dev/null +++ b/PHPExcel/Reader/Excel5/RC4.php @@ -0,0 +1,88 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Reader_Excel5_RC4 + * + * @category PHPExcel + * @package PHPExcel_Reader_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_Excel5_RC4 +{ + // Context + var $s = array(); + var $i = 0; + var $j = 0; + + /** + * RC4 stream decryption/encryption constrcutor + * + * @param string $key Encryption key/passphrase + */ + public function __construct($key) + { + $len = strlen($key); + + for ($this->i = 0; $this->i < 256; $this->i++) { + $this->s[$this->i] = $this->i; + } + + $this->j = 0; + for ($this->i = 0; $this->i < 256; $this->i++) { + $this->j = ($this->j + $this->s[$this->i] + ord($key[$this->i % $len])) % 256; + $t = $this->s[$this->i]; + $this->s[$this->i] = $this->s[$this->j]; + $this->s[$this->j] = $t; + } + $this->i = $this->j = 0; + } + + /** + * Symmetric decryption/encryption function + * + * @param string $data Data to encrypt/decrypt + * + * @return string + */ + public function RC4($data) + { + $len = strlen($data); + for ($c = 0; $c < $len; $c++) { + $this->i = ($this->i + 1) % 256; + $this->j = ($this->j + $this->s[$this->i]) % 256; + $t = $this->s[$this->i]; + $this->s[$this->i] = $this->s[$this->j]; + $this->s[$this->j] = $t; + + $t = ($this->s[$this->i] + $this->s[$this->j]) % 256; + + $data[$c] = chr(ord($data[$c]) ^ $this->s[$t]); + } + return $data; + } +} diff --git a/PHPExcel/Reader/Exception.php b/PHPExcel/Reader/Exception.php new file mode 100644 index 0000000..f42a1aa --- /dev/null +++ b/PHPExcel/Reader/Exception.php @@ -0,0 +1,52 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Reader_Exception + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_Exception extends PHPExcel_Exception { + /** + * Error handler callback + * + * @param mixed $code + * @param mixed $string + * @param mixed $file + * @param mixed $line + * @param mixed $context + */ + public static function errorHandlerCallback($code, $string, $file, $line, $context) { + $e = new self($string, $code); + $e->line = $line; + $e->file = $file; + throw $e; + } +} diff --git a/PHPExcel/Reader/Gnumeric.php b/PHPExcel/Reader/Gnumeric.php new file mode 100644 index 0000000..6db7c49 --- /dev/null +++ b/PHPExcel/Reader/Gnumeric.php @@ -0,0 +1,873 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** PHPExcel root directory */ +if (!defined('PHPEXCEL_ROOT')) { + /** + * @ignore + */ + define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../'); + require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); +} + +/** + * PHPExcel_Reader_Gnumeric + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_Gnumeric extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader +{ + /** + * Formats + * + * @var array + */ + private $_styles = array(); + + /** + * Shared Expressions + * + * @var array + */ + private $_expressions = array(); + + private $_referenceHelper = null; + + + /** + * Create a new PHPExcel_Reader_Gnumeric + */ + public function __construct() { + $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + $this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance(); + } + + + /** + * Can the current PHPExcel_Reader_IReader read the file? + * + * @param string $pFilename + * @return boolean + * @throws PHPExcel_Reader_Exception + */ + public function canRead($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + // Check if gzlib functions are available + if (!function_exists('gzread')) { + throw new PHPExcel_Reader_Exception("gzlib library is not enabled"); + } + + // Read signature data (first 3 bytes) + $fh = fopen($pFilename, 'r'); + $data = fread($fh, 2); + fclose($fh); + + if ($data != chr(0x1F).chr(0x8B)) { + return false; + } + + return true; + } + + + /** + * Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetNames($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $xml = new XMLReader(); + $xml->open( + 'compress.zlib://'.realpath($pFilename), null, PHPExcel_Settings::getLibXmlLoaderOptions() + ); + $xml->setParserProperty(2,true); + + $worksheetNames = array(); + while ($xml->read()) { + if ($xml->name == 'gnm:SheetName' && $xml->nodeType == XMLReader::ELEMENT) { + $xml->read(); // Move onto the value node + $worksheetNames[] = (string) $xml->value; + } elseif ($xml->name == 'gnm:Sheets') { + // break out of the loop once we've got our sheet names rather than parse the entire file + break; + } + } + + return $worksheetNames; + } + + + /** + * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetInfo($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $xml = new XMLReader(); + $xml->open( + 'compress.zlib://'.realpath($pFilename), null, PHPExcel_Settings::getLibXmlLoaderOptions() + ); + $xml->setParserProperty(2,true); + + $worksheetInfo = array(); + while ($xml->read()) { + if ($xml->name == 'gnm:Sheet' && $xml->nodeType == XMLReader::ELEMENT) { + $tmpInfo = array( + 'worksheetName' => '', + 'lastColumnLetter' => 'A', + 'lastColumnIndex' => 0, + 'totalRows' => 0, + 'totalColumns' => 0, + ); + + while ($xml->read()) { + if ($xml->name == 'gnm:Name' && $xml->nodeType == XMLReader::ELEMENT) { + $xml->read(); // Move onto the value node + $tmpInfo['worksheetName'] = (string) $xml->value; + } elseif ($xml->name == 'gnm:MaxCol' && $xml->nodeType == XMLReader::ELEMENT) { + $xml->read(); // Move onto the value node + $tmpInfo['lastColumnIndex'] = (int) $xml->value; + $tmpInfo['totalColumns'] = (int) $xml->value + 1; + } elseif ($xml->name == 'gnm:MaxRow' && $xml->nodeType == XMLReader::ELEMENT) { + $xml->read(); // Move onto the value node + $tmpInfo['totalRows'] = (int) $xml->value + 1; + break; + } + } + $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']); + $worksheetInfo[] = $tmpInfo; + } + } + + return $worksheetInfo; + } + + + private function _gzfileGetContents($filename) { + $file = @gzopen($filename, 'rb'); + if ($file !== false) { + $data = ''; + while (!gzeof($file)) { + $data .= gzread($file, 1024); + } + gzclose($file); + } + return $data; + } + + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Create new PHPExcel + $objPHPExcel = new PHPExcel(); + + // Load into this instance + return $this->loadIntoExisting($pFilename, $objPHPExcel); + } + + + /** + * Loads PHPExcel from file into PHPExcel instance + * + * @param string $pFilename + * @param PHPExcel $objPHPExcel + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $timezoneObj = new DateTimeZone('Europe/London'); + $GMT = new DateTimeZone('UTC'); + + $gFileData = $this->_gzfileGetContents($pFilename); + +// echo '<pre>'; +// echo htmlentities($gFileData,ENT_QUOTES,'UTF-8'); +// echo '</pre><hr />'; +// + $xml = simplexml_load_string($gFileData, 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $namespacesMeta = $xml->getNamespaces(true); + +// var_dump($namespacesMeta); +// + $gnmXML = $xml->children($namespacesMeta['gnm']); + + $docProps = $objPHPExcel->getProperties(); + // Document Properties are held differently, depending on the version of Gnumeric + if (isset($namespacesMeta['office'])) { + $officeXML = $xml->children($namespacesMeta['office']); + $officeDocXML = $officeXML->{'document-meta'}; + $officeDocMetaXML = $officeDocXML->meta; + + foreach($officeDocMetaXML as $officePropertyData) { + + $officePropertyDC = array(); + if (isset($namespacesMeta['dc'])) { + $officePropertyDC = $officePropertyData->children($namespacesMeta['dc']); + } + foreach($officePropertyDC as $propertyName => $propertyValue) { + $propertyValue = (string) $propertyValue; + switch ($propertyName) { + case 'title' : + $docProps->setTitle(trim($propertyValue)); + break; + case 'subject' : + $docProps->setSubject(trim($propertyValue)); + break; + case 'creator' : + $docProps->setCreator(trim($propertyValue)); + $docProps->setLastModifiedBy(trim($propertyValue)); + break; + case 'date' : + $creationDate = strtotime(trim($propertyValue)); + $docProps->setCreated($creationDate); + $docProps->setModified($creationDate); + break; + case 'description' : + $docProps->setDescription(trim($propertyValue)); + break; + } + } + $officePropertyMeta = array(); + if (isset($namespacesMeta['meta'])) { + $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']); + } + foreach($officePropertyMeta as $propertyName => $propertyValue) { + $attributes = $propertyValue->attributes($namespacesMeta['meta']); + $propertyValue = (string) $propertyValue; + switch ($propertyName) { + case 'keyword' : + $docProps->setKeywords(trim($propertyValue)); + break; + case 'initial-creator' : + $docProps->setCreator(trim($propertyValue)); + $docProps->setLastModifiedBy(trim($propertyValue)); + break; + case 'creation-date' : + $creationDate = strtotime(trim($propertyValue)); + $docProps->setCreated($creationDate); + $docProps->setModified($creationDate); + break; + case 'user-defined' : + list(,$attrName) = explode(':',$attributes['name']); + switch ($attrName) { + case 'publisher' : + $docProps->setCompany(trim($propertyValue)); + break; + case 'category' : + $docProps->setCategory(trim($propertyValue)); + break; + case 'manager' : + $docProps->setManager(trim($propertyValue)); + break; + } + break; + } + } + } + } elseif (isset($gnmXML->Summary)) { + foreach($gnmXML->Summary->Item as $summaryItem) { + $propertyName = $summaryItem->name; + $propertyValue = $summaryItem->{'val-string'}; + switch ($propertyName) { + case 'title' : + $docProps->setTitle(trim($propertyValue)); + break; + case 'comments' : + $docProps->setDescription(trim($propertyValue)); + break; + case 'keywords' : + $docProps->setKeywords(trim($propertyValue)); + break; + case 'category' : + $docProps->setCategory(trim($propertyValue)); + break; + case 'manager' : + $docProps->setManager(trim($propertyValue)); + break; + case 'author' : + $docProps->setCreator(trim($propertyValue)); + $docProps->setLastModifiedBy(trim($propertyValue)); + break; + case 'company' : + $docProps->setCompany(trim($propertyValue)); + break; + } + } + } + + $worksheetID = 0; + foreach($gnmXML->Sheets->Sheet as $sheet) { + $worksheetName = (string) $sheet->Name; +// echo '<b>Worksheet: ',$worksheetName,'</b><br />'; + if ((isset($this->_loadSheetsOnly)) && (!in_array($worksheetName, $this->_loadSheetsOnly))) { + continue; + } + + $maxRow = $maxCol = 0; + + // Create new Worksheet + $objPHPExcel->createSheet(); + $objPHPExcel->setActiveSheetIndex($worksheetID); + // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula + // cells... during the load, all formulae should be correct, and we're simply bringing the worksheet + // name in line with the formula, not the reverse + $objPHPExcel->getActiveSheet()->setTitle($worksheetName,false); + + if ((!$this->_readDataOnly) && (isset($sheet->PrintInformation))) { + if (isset($sheet->PrintInformation->Margins)) { + foreach($sheet->PrintInformation->Margins->children('gnm',TRUE) as $key => $margin) { + $marginAttributes = $margin->attributes(); + $marginSize = 72 / 100; // Default + switch($marginAttributes['PrefUnit']) { + case 'mm' : + $marginSize = intval($marginAttributes['Points']) / 100; + break; + } + switch($key) { + case 'top' : + $objPHPExcel->getActiveSheet()->getPageMargins()->setTop($marginSize); + break; + case 'bottom' : + $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom($marginSize); + break; + case 'left' : + $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft($marginSize); + break; + case 'right' : + $objPHPExcel->getActiveSheet()->getPageMargins()->setRight($marginSize); + break; + case 'header' : + $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader($marginSize); + break; + case 'footer' : + $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter($marginSize); + break; + } + } + } + } + + foreach($sheet->Cells->Cell as $cell) { + $cellAttributes = $cell->attributes(); + $row = (int) $cellAttributes->Row + 1; + $column = (int) $cellAttributes->Col; + + if ($row > $maxRow) $maxRow = $row; + if ($column > $maxCol) $maxCol = $column; + + $column = PHPExcel_Cell::stringFromColumnIndex($column); + + // Read cell? + if ($this->getReadFilter() !== NULL) { + if (!$this->getReadFilter()->readCell($column, $row, $worksheetName)) { + continue; + } + } + + $ValueType = $cellAttributes->ValueType; + $ExprID = (string) $cellAttributes->ExprID; +// echo 'Cell ',$column,$row,'<br />'; +// echo 'Type is ',$ValueType,'<br />'; +// echo 'Value is ',$cell,'<br />'; + $type = PHPExcel_Cell_DataType::TYPE_FORMULA; + if ($ExprID > '') { + if (((string) $cell) > '') { + + $this->_expressions[$ExprID] = array( 'column' => $cellAttributes->Col, + 'row' => $cellAttributes->Row, + 'formula' => (string) $cell + ); +// echo 'NEW EXPRESSION ',$ExprID,'<br />'; + } else { + $expression = $this->_expressions[$ExprID]; + + $cell = $this->_referenceHelper->updateFormulaReferences( $expression['formula'], + 'A1', + $cellAttributes->Col - $expression['column'], + $cellAttributes->Row - $expression['row'], + $worksheetName + ); +// echo 'SHARED EXPRESSION ',$ExprID,'<br />'; +// echo 'New Value is ',$cell,'<br />'; + } + $type = PHPExcel_Cell_DataType::TYPE_FORMULA; + } else { + switch($ValueType) { + case '10' : // NULL + $type = PHPExcel_Cell_DataType::TYPE_NULL; + break; + case '20' : // Boolean + $type = PHPExcel_Cell_DataType::TYPE_BOOL; + $cell = ($cell == 'TRUE') ? True : False; + break; + case '30' : // Integer + $cell = intval($cell); + case '40' : // Float + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + break; + case '50' : // Error + $type = PHPExcel_Cell_DataType::TYPE_ERROR; + break; + case '60' : // String + $type = PHPExcel_Cell_DataType::TYPE_STRING; + break; + case '70' : // Cell Range + case '80' : // Array + } + } + $objPHPExcel->getActiveSheet()->getCell($column.$row)->setValueExplicit($cell,$type); + } + + if ((!$this->_readDataOnly) && (isset($sheet->Objects))) { + foreach($sheet->Objects->children('gnm',TRUE) as $key => $comment) { + $commentAttributes = $comment->attributes(); + // Only comment objects are handled at the moment + if ($commentAttributes->Text) { + $objPHPExcel->getActiveSheet()->getComment( (string)$commentAttributes->ObjectBound ) + ->setAuthor( (string)$commentAttributes->Author ) + ->setText($this->_parseRichText((string)$commentAttributes->Text) ); + } + } + } +// echo '$maxCol=',$maxCol,'; $maxRow=',$maxRow,'<br />'; +// + foreach($sheet->Styles->StyleRegion as $styleRegion) { + $styleAttributes = $styleRegion->attributes(); + if (($styleAttributes['startRow'] <= $maxRow) && + ($styleAttributes['startCol'] <= $maxCol)) { + + $startColumn = PHPExcel_Cell::stringFromColumnIndex((int) $styleAttributes['startCol']); + $startRow = $styleAttributes['startRow'] + 1; + + $endColumn = ($styleAttributes['endCol'] > $maxCol) ? $maxCol : (int) $styleAttributes['endCol']; + $endColumn = PHPExcel_Cell::stringFromColumnIndex($endColumn); + $endRow = ($styleAttributes['endRow'] > $maxRow) ? $maxRow : $styleAttributes['endRow']; + $endRow += 1; + $cellRange = $startColumn.$startRow.':'.$endColumn.$endRow; +// echo $cellRange,'<br />'; + + $styleAttributes = $styleRegion->Style->attributes(); +// var_dump($styleAttributes); +// echo '<br />'; + + // We still set the number format mask for date/time values, even if _readDataOnly is true + if ((!$this->_readDataOnly) || + (PHPExcel_Shared_Date::isDateTimeFormatCode((string) $styleAttributes['Format']))) { + $styleArray = array(); + $styleArray['numberformat']['code'] = (string) $styleAttributes['Format']; + // If _readDataOnly is false, we set all formatting information + if (!$this->_readDataOnly) { + switch($styleAttributes['HAlign']) { + case '1' : + $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL; + break; + case '2' : + $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_LEFT; + break; + case '4' : + $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_RIGHT; + break; + case '8' : + $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_CENTER; + break; + case '16' : + case '64' : + $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS; + break; + case '32' : + $styleArray['alignment']['horizontal'] = PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY; + break; + } + + switch($styleAttributes['VAlign']) { + case '1' : + $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_TOP; + break; + case '2' : + $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_BOTTOM; + break; + case '4' : + $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_CENTER; + break; + case '8' : + $styleArray['alignment']['vertical'] = PHPExcel_Style_Alignment::VERTICAL_JUSTIFY; + break; + } + + $styleArray['alignment']['wrap'] = ($styleAttributes['WrapText'] == '1') ? True : False; + $styleArray['alignment']['shrinkToFit'] = ($styleAttributes['ShrinkToFit'] == '1') ? True : False; + $styleArray['alignment']['indent'] = (intval($styleAttributes["Indent"]) > 0) ? $styleAttributes["indent"] : 0; + + $RGB = self::_parseGnumericColour($styleAttributes["Fore"]); + $styleArray['font']['color']['rgb'] = $RGB; + $RGB = self::_parseGnumericColour($styleAttributes["Back"]); + $shade = $styleAttributes["Shade"]; + if (($RGB != '000000') || ($shade != '0')) { + $styleArray['fill']['color']['rgb'] = $styleArray['fill']['startcolor']['rgb'] = $RGB; + $RGB2 = self::_parseGnumericColour($styleAttributes["PatternColor"]); + $styleArray['fill']['endcolor']['rgb'] = $RGB2; + switch($shade) { + case '1' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_SOLID; + break; + case '2' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR; + break; + case '3' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_GRADIENT_PATH; + break; + case '4' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN; + break; + case '5' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY; + break; + case '6' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID; + break; + case '7' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL; + break; + case '8' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS; + break; + case '9' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKUP; + break; + case '10' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL; + break; + case '11' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625; + break; + case '12' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_GRAY125; + break; + case '13' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN; + break; + case '14' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY; + break; + case '15' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID; + break; + case '16' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL; + break; + case '17' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS; + break; + case '18' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP; + break; + case '19' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL; + break; + case '20' : + $styleArray['fill']['type'] = PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY; + break; + } + } + + $fontAttributes = $styleRegion->Style->Font->attributes(); +// var_dump($fontAttributes); +// echo '<br />'; + $styleArray['font']['name'] = (string) $styleRegion->Style->Font; + $styleArray['font']['size'] = intval($fontAttributes['Unit']); + $styleArray['font']['bold'] = ($fontAttributes['Bold'] == '1') ? True : False; + $styleArray['font']['italic'] = ($fontAttributes['Italic'] == '1') ? True : False; + $styleArray['font']['strike'] = ($fontAttributes['StrikeThrough'] == '1') ? True : False; + switch($fontAttributes['Underline']) { + case '1' : + $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_SINGLE; + break; + case '2' : + $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_DOUBLE; + break; + case '3' : + $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING; + break; + case '4' : + $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING; + break; + default : + $styleArray['font']['underline'] = PHPExcel_Style_Font::UNDERLINE_NONE; + break; + } + switch($fontAttributes['Script']) { + case '1' : + $styleArray['font']['superScript'] = True; + break; + case '-1' : + $styleArray['font']['subScript'] = True; + break; + } + + if (isset($styleRegion->Style->StyleBorder)) { + if (isset($styleRegion->Style->StyleBorder->Top)) { + $styleArray['borders']['top'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Top->attributes()); + } + if (isset($styleRegion->Style->StyleBorder->Bottom)) { + $styleArray['borders']['bottom'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Bottom->attributes()); + } + if (isset($styleRegion->Style->StyleBorder->Left)) { + $styleArray['borders']['left'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Left->attributes()); + } + if (isset($styleRegion->Style->StyleBorder->Right)) { + $styleArray['borders']['right'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Right->attributes()); + } + if ((isset($styleRegion->Style->StyleBorder->Diagonal)) && (isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'}))) { + $styleArray['borders']['diagonal'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes()); + $styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_BOTH; + } elseif (isset($styleRegion->Style->StyleBorder->Diagonal)) { + $styleArray['borders']['diagonal'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes()); + $styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_UP; + } elseif (isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'})) { + $styleArray['borders']['diagonal'] = self::_parseBorderAttributes($styleRegion->Style->StyleBorder->{'Rev-Diagonal'}->attributes()); + $styleArray['borders']['diagonaldirection'] = PHPExcel_Style_Borders::DIAGONAL_DOWN; + } + } + if (isset($styleRegion->Style->HyperLink)) { + // TO DO + $hyperlink = $styleRegion->Style->HyperLink->attributes(); + } + } +// var_dump($styleArray); +// echo '<br />'; + $objPHPExcel->getActiveSheet()->getStyle($cellRange)->applyFromArray($styleArray); + } + } + } + + if ((!$this->_readDataOnly) && (isset($sheet->Cols))) { + // Column Widths + $columnAttributes = $sheet->Cols->attributes(); + $defaultWidth = $columnAttributes['DefaultSizePts'] / 5.4; + $c = 0; + foreach($sheet->Cols->ColInfo as $columnOverride) { + $columnAttributes = $columnOverride->attributes(); + $column = $columnAttributes['No']; + $columnWidth = $columnAttributes['Unit'] / 5.4; + $hidden = ((isset($columnAttributes['Hidden'])) && ($columnAttributes['Hidden'] == '1')) ? true : false; + $columnCount = (isset($columnAttributes['Count'])) ? $columnAttributes['Count'] : 1; + while ($c < $column) { + $objPHPExcel->getActiveSheet()->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($c))->setWidth($defaultWidth); + ++$c; + } + while (($c < ($column+$columnCount)) && ($c <= $maxCol)) { + $objPHPExcel->getActiveSheet()->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($c))->setWidth($columnWidth); + if ($hidden) { + $objPHPExcel->getActiveSheet()->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($c))->setVisible(false); + } + ++$c; + } + } + while ($c <= $maxCol) { + $objPHPExcel->getActiveSheet()->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($c))->setWidth($defaultWidth); + ++$c; + } + } + + if ((!$this->_readDataOnly) && (isset($sheet->Rows))) { + // Row Heights + $rowAttributes = $sheet->Rows->attributes(); + $defaultHeight = $rowAttributes['DefaultSizePts']; + $r = 0; + + foreach($sheet->Rows->RowInfo as $rowOverride) { + $rowAttributes = $rowOverride->attributes(); + $row = $rowAttributes['No']; + $rowHeight = $rowAttributes['Unit']; + $hidden = ((isset($rowAttributes['Hidden'])) && ($rowAttributes['Hidden'] == '1')) ? true : false; + $rowCount = (isset($rowAttributes['Count'])) ? $rowAttributes['Count'] : 1; + while ($r < $row) { + ++$r; + $objPHPExcel->getActiveSheet()->getRowDimension($r)->setRowHeight($defaultHeight); + } + while (($r < ($row+$rowCount)) && ($r < $maxRow)) { + ++$r; + $objPHPExcel->getActiveSheet()->getRowDimension($r)->setRowHeight($rowHeight); + if ($hidden) { + $objPHPExcel->getActiveSheet()->getRowDimension($r)->setVisible(false); + } + } + } + while ($r < $maxRow) { + ++$r; + $objPHPExcel->getActiveSheet()->getRowDimension($r)->setRowHeight($defaultHeight); + } + } + + // Handle Merged Cells in this worksheet + if (isset($sheet->MergedRegions)) { + foreach($sheet->MergedRegions->Merge as $mergeCells) { + if (strpos($mergeCells,':') !== FALSE) { + $objPHPExcel->getActiveSheet()->mergeCells($mergeCells); + } + } + } + + $worksheetID++; + } + + // Loop through definedNames (global named ranges) + if (isset($gnmXML->Names)) { + foreach($gnmXML->Names->Name as $namedRange) { + $name = (string) $namedRange->name; + $range = (string) $namedRange->value; + if (stripos($range, '#REF!') !== false) { + continue; + } + + $range = explode('!',$range); + $range[0] = trim($range[0],"'");; + if ($worksheet = $objPHPExcel->getSheetByName($range[0])) { + $extractedRange = str_replace('$', '', $range[1]); + $objPHPExcel->addNamedRange( new PHPExcel_NamedRange($name, $worksheet, $extractedRange) ); + } + } + } + + + // Return + return $objPHPExcel; + } + + + private static function _parseBorderAttributes($borderAttributes) + { + $styleArray = array(); + + if (isset($borderAttributes["Color"])) { + $RGB = self::_parseGnumericColour($borderAttributes["Color"]); + $styleArray['color']['rgb'] = $RGB; + } + + switch ($borderAttributes["Style"]) { + case '0' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_NONE; + break; + case '1' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + case '2' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUM; + break; + case '4' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHED; + break; + case '5' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_THICK; + break; + case '6' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_DOUBLE; + break; + case '7' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_DOTTED; + break; + case '9' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHDOT; + break; + case '10' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT; + break; + case '11' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_DASHDOTDOT; + break; + case '12' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT; + break; + case '13' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT; + break; + case '3' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_SLANTDASHDOT; + break; + case '8' : + $styleArray['style'] = PHPExcel_Style_Border::BORDER_MEDIUMDASHED; + break; + } + return $styleArray; + } + + + private function _parseRichText($is = '') { + $value = new PHPExcel_RichText(); + + $value->createText($is); + + return $value; + } + + + private static function _parseGnumericColour($gnmColour) { + list($gnmR,$gnmG,$gnmB) = explode(':',$gnmColour); + $gnmR = substr(str_pad($gnmR,4,'0',STR_PAD_RIGHT),0,2); + $gnmG = substr(str_pad($gnmG,4,'0',STR_PAD_RIGHT),0,2); + $gnmB = substr(str_pad($gnmB,4,'0',STR_PAD_RIGHT),0,2); + $RGB = $gnmR.$gnmG.$gnmB; +// echo 'Excel Colour: ',$RGB,'<br />'; + return $RGB; + } + +} diff --git a/PHPExcel/Reader/HTML.php b/PHPExcel/Reader/HTML.php new file mode 100644 index 0000000..1696471 --- /dev/null +++ b/PHPExcel/Reader/HTML.php @@ -0,0 +1,468 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** PHPExcel root directory */ +if (!defined('PHPEXCEL_ROOT')) { + /** + * @ignore + */ + define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../'); + require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); +} + +/** + * PHPExcel_Reader_HTML + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_HTML extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader +{ + /** + * Input encoding + * + * @var string + */ + private $_inputEncoding = 'ANSI'; + + /** + * Sheet index to read + * + * @var int + */ + private $_sheetIndex = 0; + + /** + * Formats + * + * @var array + */ + private $_formats = array( 'h1' => array( 'font' => array( 'bold' => true, + 'size' => 24, + ), + ), // Bold, 24pt + 'h2' => array( 'font' => array( 'bold' => true, + 'size' => 18, + ), + ), // Bold, 18pt + 'h3' => array( 'font' => array( 'bold' => true, + 'size' => 13.5, + ), + ), // Bold, 13.5pt + 'h4' => array( 'font' => array( 'bold' => true, + 'size' => 12, + ), + ), // Bold, 12pt + 'h5' => array( 'font' => array( 'bold' => true, + 'size' => 10, + ), + ), // Bold, 10pt + 'h6' => array( 'font' => array( 'bold' => true, + 'size' => 7.5, + ), + ), // Bold, 7.5pt + 'a' => array( 'font' => array( 'underline' => true, + 'color' => array( 'argb' => PHPExcel_Style_Color::COLOR_BLUE, + ), + ), + ), // Blue underlined + 'hr' => array( 'borders' => array( 'bottom' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN, + 'color' => array( PHPExcel_Style_Color::COLOR_BLACK, + ), + ), + ), + ), // Bottom border + ); + + + /** + * Create a new PHPExcel_Reader_HTML + */ + public function __construct() { + $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + } + + /** + * Validate that the current file is an HTML file + * + * @return boolean + */ + protected function _isValidFormat() + { + // Reading 2048 bytes should be enough to validate that the format is HTML + $data = fread($this->_fileHandle, 2048); + if ((strpos($data, '<') !== FALSE) && + (strlen($data) !== strlen(strip_tags($data)))) { + return TRUE; + } + + return FALSE; + } + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Create new PHPExcel + $objPHPExcel = new PHPExcel(); + + // Load into this instance + return $this->loadIntoExisting($pFilename, $objPHPExcel); + } + + /** + * Set input encoding + * + * @param string $pValue Input encoding + */ + public function setInputEncoding($pValue = 'ANSI') + { + $this->_inputEncoding = $pValue; + return $this; + } + + /** + * Get input encoding + * + * @return string + */ + public function getInputEncoding() + { + return $this->_inputEncoding; + } + + // Data Array used for testing only, should write to PHPExcel object on completion of tests + private $_dataArray = array(); + + private $_tableLevel = 0; + private $_nestedColumn = array('A'); + + private function _setTableStartColumn($column) { + if ($this->_tableLevel == 0) + $column = 'A'; + ++$this->_tableLevel; + $this->_nestedColumn[$this->_tableLevel] = $column; + + return $this->_nestedColumn[$this->_tableLevel]; + } + + private function _getTableStartColumn() { + return $this->_nestedColumn[$this->_tableLevel]; + } + + private function _releaseTableStartColumn() { + --$this->_tableLevel; + return array_pop($this->_nestedColumn); + } + + private function _flushCell($sheet,$column,$row,&$cellContent) { + if (is_string($cellContent)) { + // Simple String content + if (trim($cellContent) > '') { + // Only actually write it if there's content in the string +// echo 'FLUSH CELL: ' , $column , $row , ' => ' , $cellContent , '<br />'; + // Write to worksheet to be done here... + // ... we return the cell so we can mess about with styles more easily + $cell = $sheet->setCellValue($column.$row,$cellContent,true); + $this->_dataArray[$row][$column] = $cellContent; + } + } else { + // We have a Rich Text run + // TODO + $this->_dataArray[$row][$column] = 'RICH TEXT: ' . $cellContent; + } + $cellContent = (string) ''; + } + + private function _processDomElement(DOMNode $element, $sheet, &$row, &$column, &$cellContent){ + foreach($element->childNodes as $child){ + if ($child instanceof DOMText) { + $domText = preg_replace('/\s+/',' ',trim($child->nodeValue)); + if (is_string($cellContent)) { + // simply append the text if the cell content is a plain text string + $cellContent .= $domText; + } else { + // but if we have a rich text run instead, we need to append it correctly + // TODO + } + } elseif($child instanceof DOMElement) { +// echo '<b>DOM ELEMENT: </b>' , strtoupper($child->nodeName) , '<br />'; + + $attributeArray = array(); + foreach($child->attributes as $attribute) { +// echo '<b>ATTRIBUTE: </b>' , $attribute->name , ' => ' , $attribute->value , '<br />'; + $attributeArray[$attribute->name] = $attribute->value; + } + + switch($child->nodeName) { + case 'meta' : + foreach($attributeArray as $attributeName => $attributeValue) { + switch($attributeName) { + case 'content': + // TODO + // Extract character set, so we can convert to UTF-8 if required + break; + } + } + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); + break; + case 'title' : + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); + $sheet->setTitle($cellContent); + $cellContent = ''; + break; + case 'span' : + case 'div' : + case 'font' : + case 'i' : + case 'em' : + case 'strong': + case 'b' : +// echo 'STYLING, SPAN OR DIV<br />'; + if ($cellContent > '') + $cellContent .= ' '; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); + if ($cellContent > '') + $cellContent .= ' '; +// echo 'END OF STYLING, SPAN OR DIV<br />'; + break; + case 'hr' : + $this->_flushCell($sheet,$column,$row,$cellContent); + ++$row; + if (isset($this->_formats[$child->nodeName])) { + $sheet->getStyle($column.$row)->applyFromArray($this->_formats[$child->nodeName]); + } else { + $cellContent = '----------'; + $this->_flushCell($sheet,$column,$row,$cellContent); + } + ++$row; + case 'br' : + if ($this->_tableLevel > 0) { + // If we're inside a table, replace with a \n + $cellContent .= "\n"; + } else { + // Otherwise flush our existing content and move the row cursor on + $this->_flushCell($sheet,$column,$row,$cellContent); + ++$row; + } +// echo 'HARD LINE BREAK: ' , '<br />'; + break; + case 'a' : +// echo 'START OF HYPERLINK: ' , '<br />'; + foreach($attributeArray as $attributeName => $attributeValue) { + switch($attributeName) { + case 'href': +// echo 'Link to ' , $attributeValue , '<br />'; + $sheet->getCell($column.$row)->getHyperlink()->setUrl($attributeValue); + if (isset($this->_formats[$child->nodeName])) { + $sheet->getStyle($column.$row)->applyFromArray($this->_formats[$child->nodeName]); + } + break; + } + } + $cellContent .= ' '; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF HYPERLINK:' , '<br />'; + break; + case 'h1' : + case 'h2' : + case 'h3' : + case 'h4' : + case 'h5' : + case 'h6' : + case 'ol' : + case 'ul' : + case 'p' : + if ($this->_tableLevel > 0) { + // If we're inside a table, replace with a \n + $cellContent .= "\n"; +// echo 'LIST ENTRY: ' , '<br />'; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF LIST ENTRY:' , '<br />'; + } else { + if ($cellContent > '') { + $this->_flushCell($sheet,$column,$row,$cellContent); + $row += 2; + } +// echo 'START OF PARAGRAPH: ' , '<br />'; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF PARAGRAPH:' , '<br />'; + $this->_flushCell($sheet,$column,$row,$cellContent); + + if (isset($this->_formats[$child->nodeName])) { + $sheet->getStyle($column.$row)->applyFromArray($this->_formats[$child->nodeName]); + } + + $row += 2; + $column = 'A'; + } + break; + case 'li' : + if ($this->_tableLevel > 0) { + // If we're inside a table, replace with a \n + $cellContent .= "\n"; +// echo 'LIST ENTRY: ' , '<br />'; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF LIST ENTRY:' , '<br />'; + } else { + if ($cellContent > '') { + $this->_flushCell($sheet,$column,$row,$cellContent); + } + ++$row; +// echo 'LIST ENTRY: ' , '<br />'; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF LIST ENTRY:' , '<br />'; + $this->_flushCell($sheet,$column,$row,$cellContent); + $column = 'A'; + } + break; + case 'table' : + $this->_flushCell($sheet,$column,$row,$cellContent); + $column = $this->_setTableStartColumn($column); +// echo 'START OF TABLE LEVEL ' , $this->_tableLevel , '<br />'; + if ($this->_tableLevel > 1) + --$row; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF TABLE LEVEL ' , $this->_tableLevel , '<br />'; + $column = $this->_releaseTableStartColumn(); + if ($this->_tableLevel > 1) { + ++$column; + } else { + ++$row; + } + break; + case 'thead' : + case 'tbody' : + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); + break; + case 'tr' : + ++$row; + $column = $this->_getTableStartColumn(); + $cellContent = ''; +// echo 'START OF TABLE ' , $this->_tableLevel , ' ROW<br />'; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF TABLE ' , $this->_tableLevel , ' ROW<br />'; + break; + case 'th' : + case 'td' : +// echo 'START OF TABLE ' , $this->_tableLevel , ' CELL<br />'; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); +// echo 'END OF TABLE ' , $this->_tableLevel , ' CELL<br />'; + $this->_flushCell($sheet,$column,$row,$cellContent); + ++$column; + break; + case 'body' : + $row = 1; + $column = 'A'; + $content = ''; + $this->_tableLevel = 0; + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); + break; + default: + $this->_processDomElement($child,$sheet,$row,$column,$cellContent); + } + } + } + } + + /** + * Loads PHPExcel from file into PHPExcel instance + * + * @param string $pFilename + * @param PHPExcel $objPHPExcel + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) + { + // Open file to validate + $this->_openFile($pFilename); + if (!$this->_isValidFormat()) { + fclose ($this->_fileHandle); + throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid HTML file."); + } + // Close after validating + fclose ($this->_fileHandle); + + // Create new PHPExcel + while ($objPHPExcel->getSheetCount() <= $this->_sheetIndex) { + $objPHPExcel->createSheet(); + } + $objPHPExcel->setActiveSheetIndex( $this->_sheetIndex ); + + // Create a new DOM object + $dom = new domDocument; + // Reload the HTML file into the DOM object + $loaded = $dom->loadHTMLFile($pFilename, PHPExcel_Settings::getLibXmlLoaderOptions()); + if ($loaded === FALSE) { + throw new PHPExcel_Reader_Exception('Failed to load ',$pFilename,' as a DOM Document'); + } + + // Discard white space + $dom->preserveWhiteSpace = false; + + + $row = 0; + $column = 'A'; + $content = ''; + $this->_processDomElement($dom,$objPHPExcel->getActiveSheet(),$row,$column,$content); + +// echo '<hr />'; +// var_dump($this->_dataArray); + + // Return + return $objPHPExcel; + } + + /** + * Get sheet index + * + * @return int + */ + public function getSheetIndex() { + return $this->_sheetIndex; + } + + /** + * Set sheet index + * + * @param int $pValue Sheet index + * @return PHPExcel_Reader_HTML + */ + public function setSheetIndex($pValue = 0) { + $this->_sheetIndex = $pValue; + return $this; + } + +} diff --git a/PHPExcel/Reader/IReadFilter.php b/PHPExcel/Reader/IReadFilter.php new file mode 100644 index 0000000..5a691a5 --- /dev/null +++ b/PHPExcel/Reader/IReadFilter.php @@ -0,0 +1,47 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Reader_IReadFilter + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +interface PHPExcel_Reader_IReadFilter +{ + /** + * Should this cell be read? + * + * @param $column String column index + * @param $row Row index + * @param $worksheetName Optional worksheet name + * @return boolean + */ + public function readCell($column, $row, $worksheetName = ''); +} diff --git a/PHPExcel/Reader/IReader.php b/PHPExcel/Reader/IReader.php new file mode 100644 index 0000000..6c3e878 --- /dev/null +++ b/PHPExcel/Reader/IReader.php @@ -0,0 +1,53 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Reader_IReader + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +interface PHPExcel_Reader_IReader +{ + /** + * Can the current PHPExcel_Reader_IReader read the file? + * + * @param string $pFilename + * @return boolean + */ + public function canRead($pFilename); + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename); +} diff --git a/PHPExcel/Reader/OOCalc.php b/PHPExcel/Reader/OOCalc.php new file mode 100644 index 0000000..8ad7061 --- /dev/null +++ b/PHPExcel/Reader/OOCalc.php @@ -0,0 +1,707 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** PHPExcel root directory */ +if (!defined('PHPEXCEL_ROOT')) { + /** + * @ignore + */ + define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../'); + require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); +} + +/** + * PHPExcel_Reader_OOCalc + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_OOCalc extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader +{ + /** + * Formats + * + * @var array + */ + private $_styles = array(); + + + /** + * Create a new PHPExcel_Reader_OOCalc + */ + public function __construct() { + $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + } + + + /** + * Can the current PHPExcel_Reader_IReader read the file? + * + * @param string $pFilename + * @return boolean + * @throws PHPExcel_Reader_Exception + */ + public function canRead($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $zipClass = PHPExcel_Settings::getZipClass(); + + // Check if zip class exists +// if (!class_exists($zipClass, FALSE)) { +// throw new PHPExcel_Reader_Exception($zipClass . " library is not enabled"); +// } + + $mimeType = 'UNKNOWN'; + // Load file + $zip = new $zipClass; + if ($zip->open($pFilename) === true) { + // check if it is an OOXML archive + $stat = $zip->statName('mimetype'); + if ($stat && ($stat['size'] <= 255)) { + $mimeType = $zip->getFromName($stat['name']); + } elseif($stat = $zip->statName('META-INF/manifest.xml')) { + $xml = simplexml_load_string($zip->getFromName('META-INF/manifest.xml'), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $namespacesContent = $xml->getNamespaces(true); + if (isset($namespacesContent['manifest'])) { + $manifest = $xml->children($namespacesContent['manifest']); + foreach($manifest as $manifestDataSet) { + $manifestAttributes = $manifestDataSet->attributes($namespacesContent['manifest']); + if ($manifestAttributes->{'full-path'} == '/') { + $mimeType = (string) $manifestAttributes->{'media-type'}; + break; + } + } + } + } + + $zip->close(); + + return ($mimeType === 'application/vnd.oasis.opendocument.spreadsheet'); + } + + return FALSE; + } + + + /** + * Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetNames($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; + if (!$zip->open($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file."); + } + + $worksheetNames = array(); + + $xml = new XMLReader(); + $res = $xml->open('zip://'.realpath($pFilename).'#content.xml', null, PHPExcel_Settings::getLibXmlLoaderOptions()); + $xml->setParserProperty(2,true); + + // Step into the first level of content of the XML + $xml->read(); + while ($xml->read()) { + // Quickly jump through to the office:body node + while ($xml->name !== 'office:body') { + if ($xml->isEmptyElement) + $xml->read(); + else + $xml->next(); + } + // Now read each node until we find our first table:table node + while ($xml->read()) { + if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) { + // Loop through each table:table node reading the table:name attribute for each worksheet name + do { + $worksheetNames[] = $xml->getAttribute('table:name'); + $xml->next(); + } while ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT); + } + } + } + + return $worksheetNames; + } + + + /** + * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetInfo($pFilename) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $worksheetInfo = array(); + + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; + if (!$zip->open($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file."); + } + + $xml = new XMLReader(); + $res = $xml->open('zip://'.realpath($pFilename).'#content.xml', null, PHPExcel_Settings::getLibXmlLoaderOptions()); + $xml->setParserProperty(2,true); + + // Step into the first level of content of the XML + $xml->read(); + while ($xml->read()) { + // Quickly jump through to the office:body node + while ($xml->name !== 'office:body') { + if ($xml->isEmptyElement) + $xml->read(); + else + $xml->next(); + } + // Now read each node until we find our first table:table node + while ($xml->read()) { + if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) { + $worksheetNames[] = $xml->getAttribute('table:name'); + + $tmpInfo = array( + 'worksheetName' => $xml->getAttribute('table:name'), + 'lastColumnLetter' => 'A', + 'lastColumnIndex' => 0, + 'totalRows' => 0, + 'totalColumns' => 0, + ); + + // Loop through each child node of the table:table element reading + $currCells = 0; + do { + $xml->read(); + if ($xml->name == 'table:table-row' && $xml->nodeType == XMLReader::ELEMENT) { + $rowspan = $xml->getAttribute('table:number-rows-repeated'); + $rowspan = empty($rowspan) ? 1 : $rowspan; + $tmpInfo['totalRows'] += $rowspan; + $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells); + $currCells = 0; + // Step into the row + $xml->read(); + do { + if ($xml->name == 'table:table-cell' && $xml->nodeType == XMLReader::ELEMENT) { + if (!$xml->isEmptyElement) { + $currCells++; + $xml->next(); + } else { + $xml->read(); + } + } elseif ($xml->name == 'table:covered-table-cell' && $xml->nodeType == XMLReader::ELEMENT) { + $mergeSize = $xml->getAttribute('table:number-columns-repeated'); + $currCells += $mergeSize; + $xml->read(); + } + } while ($xml->name != 'table:table-row'); + } + } while ($xml->name != 'table:table'); + + $tmpInfo['totalColumns'] = max($tmpInfo['totalColumns'],$currCells); + $tmpInfo['lastColumnIndex'] = $tmpInfo['totalColumns'] - 1; + $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']); + $worksheetInfo[] = $tmpInfo; + } + } + +// foreach($workbookData->table as $worksheetDataSet) { +// $worksheetData = $worksheetDataSet->children($namespacesContent['table']); +// $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']); +// +// $rowIndex = 0; +// foreach ($worksheetData as $key => $rowData) { +// switch ($key) { +// case 'table-row' : +// $rowDataTableAttributes = $rowData->attributes($namespacesContent['table']); +// $rowRepeats = (isset($rowDataTableAttributes['number-rows-repeated'])) ? +// $rowDataTableAttributes['number-rows-repeated'] : 1; +// $columnIndex = 0; +// +// foreach ($rowData as $key => $cellData) { +// $cellDataTableAttributes = $cellData->attributes($namespacesContent['table']); +// $colRepeats = (isset($cellDataTableAttributes['number-columns-repeated'])) ? +// $cellDataTableAttributes['number-columns-repeated'] : 1; +// $cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']); +// if (isset($cellDataOfficeAttributes['value-type'])) { +// $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex + $colRepeats - 1); +// $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex + $rowRepeats); +// } +// $columnIndex += $colRepeats; +// } +// $rowIndex += $rowRepeats; +// break; +// } +// } +// +// $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']); +// $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1; +// +// } +// } + } + + return $worksheetInfo; + } + + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Create new PHPExcel + $objPHPExcel = new PHPExcel(); + + // Load into this instance + return $this->loadIntoExisting($pFilename, $objPHPExcel); + } + + + private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) { + $styleAttributeValue = strtolower($styleAttributeValue); + foreach($styleList as $style) { + if ($styleAttributeValue == strtolower($style)) { + $styleAttributeValue = $style; + return true; + } + } + return false; + } + + + /** + * Loads PHPExcel from file into PHPExcel instance + * + * @param string $pFilename + * @param PHPExcel $objPHPExcel + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) + { + // Check if file exists + if (!file_exists($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); + } + + $timezoneObj = new DateTimeZone('Europe/London'); + $GMT = new DateTimeZone('UTC'); + + $zipClass = PHPExcel_Settings::getZipClass(); + + $zip = new $zipClass; + if (!$zip->open($pFilename)) { + throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! Error opening file."); + } + +// echo '<h1>Meta Information</h1>'; + $xml = simplexml_load_string($zip->getFromName("meta.xml"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $namespacesMeta = $xml->getNamespaces(true); +// echo '<pre>'; +// print_r($namespacesMeta); +// echo '</pre><hr />'; + + $docProps = $objPHPExcel->getProperties(); + $officeProperty = $xml->children($namespacesMeta['office']); + foreach($officeProperty as $officePropertyData) { + $officePropertyDC = array(); + if (isset($namespacesMeta['dc'])) { + $officePropertyDC = $officePropertyData->children($namespacesMeta['dc']); + } + foreach($officePropertyDC as $propertyName => $propertyValue) { + $propertyValue = (string) $propertyValue; + switch ($propertyName) { + case 'title' : + $docProps->setTitle($propertyValue); + break; + case 'subject' : + $docProps->setSubject($propertyValue); + break; + case 'creator' : + $docProps->setCreator($propertyValue); + $docProps->setLastModifiedBy($propertyValue); + break; + case 'date' : + $creationDate = strtotime($propertyValue); + $docProps->setCreated($creationDate); + $docProps->setModified($creationDate); + break; + case 'description' : + $docProps->setDescription($propertyValue); + break; + } + } + $officePropertyMeta = array(); + if (isset($namespacesMeta['dc'])) { + $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']); + } + foreach($officePropertyMeta as $propertyName => $propertyValue) { + $propertyValueAttributes = $propertyValue->attributes($namespacesMeta['meta']); + $propertyValue = (string) $propertyValue; + switch ($propertyName) { + case 'initial-creator' : + $docProps->setCreator($propertyValue); + break; + case 'keyword' : + $docProps->setKeywords($propertyValue); + break; + case 'creation-date' : + $creationDate = strtotime($propertyValue); + $docProps->setCreated($creationDate); + break; + case 'user-defined' : + $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING; + foreach ($propertyValueAttributes as $key => $value) { + if ($key == 'name') { + $propertyValueName = (string) $value; + } elseif($key == 'value-type') { + switch ($value) { + case 'date' : + $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'date'); + $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE; + break; + case 'boolean' : + $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'bool'); + $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN; + break; + case 'float' : + $propertyValue = PHPExcel_DocumentProperties::convertProperty($propertyValue,'r4'); + $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_FLOAT; + break; + default : + $propertyValueType = PHPExcel_DocumentProperties::PROPERTY_TYPE_STRING; + } + } + } + $docProps->setCustomProperty($propertyValueName,$propertyValue,$propertyValueType); + break; + } + } + } + + +// echo '<h1>Workbook Content</h1>'; + $xml = simplexml_load_string($zip->getFromName("content.xml"), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); + $namespacesContent = $xml->getNamespaces(true); +// echo '<pre>'; +// print_r($namespacesContent); +// echo '</pre><hr />'; + + $workbook = $xml->children($namespacesContent['office']); + foreach($workbook->body->spreadsheet as $workbookData) { + $workbookData = $workbookData->children($namespacesContent['table']); + $worksheetID = 0; + foreach($workbookData->table as $worksheetDataSet) { + $worksheetData = $worksheetDataSet->children($namespacesContent['table']); +// print_r($worksheetData); +// echo '<br />'; + $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']); +// print_r($worksheetDataAttributes); +// echo '<br />'; + if ((isset($this->_loadSheetsOnly)) && (isset($worksheetDataAttributes['name'])) && + (!in_array($worksheetDataAttributes['name'], $this->_loadSheetsOnly))) { + continue; + } + +// echo '<h2>Worksheet '.$worksheetDataAttributes['name'].'</h2>'; + // Create new Worksheet + $objPHPExcel->createSheet(); + $objPHPExcel->setActiveSheetIndex($worksheetID); + if (isset($worksheetDataAttributes['name'])) { + $worksheetName = (string) $worksheetDataAttributes['name']; + // Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in + // formula cells... during the load, all formulae should be correct, and we're simply + // bringing the worksheet name in line with the formula, not the reverse + $objPHPExcel->getActiveSheet()->setTitle($worksheetName,false); + } + + $rowID = 1; + foreach($worksheetData as $key => $rowData) { +// echo '<b>'.$key.'</b><br />'; + switch ($key) { + case 'table-header-rows': + foreach ($rowData as $key=>$cellData) { + $rowData = $cellData; + break; + } + case 'table-row' : + $rowDataTableAttributes = $rowData->attributes($namespacesContent['table']); + $rowRepeats = (isset($rowDataTableAttributes['number-rows-repeated'])) ? + $rowDataTableAttributes['number-rows-repeated'] : 1; + $columnID = 'A'; + foreach($rowData as $key => $cellData) { + if ($this->getReadFilter() !== NULL) { + if (!$this->getReadFilter()->readCell($columnID, $rowID, $worksheetName)) { + continue; + } + } + +// echo '<b>'.$columnID.$rowID.'</b><br />'; + $cellDataText = (isset($namespacesContent['text'])) ? + $cellData->children($namespacesContent['text']) : + ''; + $cellDataOffice = $cellData->children($namespacesContent['office']); + $cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']); + $cellDataTableAttributes = $cellData->attributes($namespacesContent['table']); + +// echo 'Office Attributes: '; +// print_r($cellDataOfficeAttributes); +// echo '<br />Table Attributes: '; +// print_r($cellDataTableAttributes); +// echo '<br />Cell Data Text'; +// print_r($cellDataText); +// echo '<br />'; +// + $type = $formatting = $hyperlink = null; + $hasCalculatedValue = false; + $cellDataFormula = ''; + if (isset($cellDataTableAttributes['formula'])) { + $cellDataFormula = $cellDataTableAttributes['formula']; + $hasCalculatedValue = true; + } + + if (isset($cellDataOffice->annotation)) { +// echo 'Cell has comment<br />'; + $annotationText = $cellDataOffice->annotation->children($namespacesContent['text']); + $textArray = array(); + foreach($annotationText as $t) { + foreach($t->span as $text) { + $textArray[] = (string)$text; + } + } + $text = implode("\n",$textArray); +// echo $text,'<br />'; + $objPHPExcel->getActiveSheet()->getComment( $columnID.$rowID ) +// ->setAuthor( $author ) + ->setText($this->_parseRichText($text) ); + } + + if (isset($cellDataText->p)) { + // Consolidate if there are multiple p records (maybe with spans as well) + $dataArray = array(); + // Text can have multiple text:p and within those, multiple text:span. + // text:p newlines, but text:span does not. + // Also, here we assume there is no text data is span fields are specified, since + // we have no way of knowing proper positioning anyway. + foreach ($cellDataText->p as $pData) { + if (isset($pData->span)) { + // span sections do not newline, so we just create one large string here + $spanSection = ""; + foreach ($pData->span as $spanData) { + $spanSection .= $spanData; + } + array_push($dataArray, $spanSection); + } else { + array_push($dataArray, $pData); + } + } + $allCellDataText = implode($dataArray, "\n"); + +// echo 'Value Type is '.$cellDataOfficeAttributes['value-type'].'<br />'; + switch ($cellDataOfficeAttributes['value-type']) { + case 'string' : + $type = PHPExcel_Cell_DataType::TYPE_STRING; + $dataValue = $allCellDataText; + if (isset($dataValue->a)) { + $dataValue = $dataValue->a; + $cellXLinkAttributes = $dataValue->attributes($namespacesContent['xlink']); + $hyperlink = $cellXLinkAttributes['href']; + } + break; + case 'boolean' : + $type = PHPExcel_Cell_DataType::TYPE_BOOL; + $dataValue = ($allCellDataText == 'TRUE') ? True : False; + break; + case 'percentage' : + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $dataValue = (float) $cellDataOfficeAttributes['value']; + if (floor($dataValue) == $dataValue) { + $dataValue = (integer) $dataValue; + } + $formatting = PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00; + break; + case 'currency' : + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $dataValue = (float) $cellDataOfficeAttributes['value']; + if (floor($dataValue) == $dataValue) { + $dataValue = (integer) $dataValue; + } + $formatting = PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE; + break; + case 'float' : + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $dataValue = (float) $cellDataOfficeAttributes['value']; + if (floor($dataValue) == $dataValue) { + if ($dataValue == (integer) $dataValue) + $dataValue = (integer) $dataValue; + else + $dataValue = (float) $dataValue; + } + break; + case 'date' : + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $dateObj = new DateTime($cellDataOfficeAttributes['date-value'], $GMT); + $dateObj->setTimeZone($timezoneObj); + list($year,$month,$day,$hour,$minute,$second) = explode(' ',$dateObj->format('Y m d H i s')); + $dataValue = PHPExcel_Shared_Date::FormattedPHPToExcel($year,$month,$day,$hour,$minute,$second); + if ($dataValue != floor($dataValue)) { + $formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15.' '.PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4; + } else { + $formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15; + } + break; + case 'time' : + $type = PHPExcel_Cell_DataType::TYPE_NUMERIC; + $dataValue = PHPExcel_Shared_Date::PHPToExcel(strtotime('01-01-1970 '.implode(':',sscanf($cellDataOfficeAttributes['time-value'],'PT%dH%dM%dS')))); + $formatting = PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4; + break; + } +// echo 'Data value is '.$dataValue.'<br />'; +// if ($hyperlink !== NULL) { +// echo 'Hyperlink is '.$hyperlink.'<br />'; +// } + } else { + $type = PHPExcel_Cell_DataType::TYPE_NULL; + $dataValue = NULL; + } + + if ($hasCalculatedValue) { + $type = PHPExcel_Cell_DataType::TYPE_FORMULA; +// echo 'Formula: ', $cellDataFormula, PHP_EOL; + $cellDataFormula = substr($cellDataFormula,strpos($cellDataFormula,':=')+1); + $temp = explode('"',$cellDataFormula); + $tKey = false; + foreach($temp as &$value) { + // Only replace in alternate array entries (i.e. non-quoted blocks) + if ($tKey = !$tKey) { + $value = preg_replace('/\[([^\.]+)\.([^\.]+):\.([^\.]+)\]/Ui','$1!$2:$3',$value); // Cell range reference in another sheet + $value = preg_replace('/\[([^\.]+)\.([^\.]+)\]/Ui','$1!$2',$value); // Cell reference in another sheet + $value = preg_replace('/\[\.([^\.]+):\.([^\.]+)\]/Ui','$1:$2',$value); // Cell range reference + $value = preg_replace('/\[\.([^\.]+)\]/Ui','$1',$value); // Simple cell reference + $value = PHPExcel_Calculation::_translateSeparator(';',',',$value,$inBraces); + } + } + unset($value); + // Then rebuild the formula string + $cellDataFormula = implode('"',$temp); +// echo 'Adjusted Formula: ', $cellDataFormula, PHP_EOL; + } + + $colRepeats = (isset($cellDataTableAttributes['number-columns-repeated'])) ? + $cellDataTableAttributes['number-columns-repeated'] : 1; + if ($type !== NULL) { + for ($i = 0; $i < $colRepeats; ++$i) { + if ($i > 0) { + ++$columnID; + } + if ($type !== PHPExcel_Cell_DataType::TYPE_NULL) { + for ($rowAdjust = 0; $rowAdjust < $rowRepeats; ++$rowAdjust) { + $rID = $rowID + $rowAdjust; + $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setValueExplicit((($hasCalculatedValue) ? $cellDataFormula : $dataValue),$type); + if ($hasCalculatedValue) { +// echo 'Forumla result is '.$dataValue.'<br />'; + $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->setCalculatedValue($dataValue); + } + if ($formatting !== NULL) { + $objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode($formatting); + } else { + $objPHPExcel->getActiveSheet()->getStyle($columnID.$rID)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_GENERAL); + } + if ($hyperlink !== NULL) { + $objPHPExcel->getActiveSheet()->getCell($columnID.$rID)->getHyperlink()->setUrl($hyperlink); + } + } + } + } + } + + // Merged cells + if ((isset($cellDataTableAttributes['number-columns-spanned'])) || (isset($cellDataTableAttributes['number-rows-spanned']))) { + if (($type !== PHPExcel_Cell_DataType::TYPE_NULL) || (!$this->_readDataOnly)) { + $columnTo = $columnID; + if (isset($cellDataTableAttributes['number-columns-spanned'])) { + $columnTo = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($columnID) + $cellDataTableAttributes['number-columns-spanned'] -2); + } + $rowTo = $rowID; + if (isset($cellDataTableAttributes['number-rows-spanned'])) { + $rowTo = $rowTo + $cellDataTableAttributes['number-rows-spanned'] - 1; + } + $cellRange = $columnID.$rowID.':'.$columnTo.$rowTo; + $objPHPExcel->getActiveSheet()->mergeCells($cellRange); + } + } + + ++$columnID; + } + $rowID += $rowRepeats; + break; + } + } + ++$worksheetID; + } + } + + // Return + return $objPHPExcel; + } + + + private function _parseRichText($is = '') { + $value = new PHPExcel_RichText(); + + $value->createText($is); + + return $value; + } + +} diff --git a/PHPExcel/Reader/SYLK.php b/PHPExcel/Reader/SYLK.php new file mode 100644 index 0000000..cd87ce5 --- /dev/null +++ b/PHPExcel/Reader/SYLK.php @@ -0,0 +1,450 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** PHPExcel root directory */ +if (!defined('PHPEXCEL_ROOT')) { + /** + * @ignore + */ + define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../'); + require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); +} + +/** + * PHPExcel_Reader_SYLK + * + * @category PHPExcel + * @package PHPExcel_Reader + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Reader_SYLK extends PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader +{ + /** + * Input encoding + * + * @var string + */ + private $_inputEncoding = 'ANSI'; + + /** + * Sheet index to read + * + * @var int + */ + private $_sheetIndex = 0; + + /** + * Formats + * + * @var array + */ + private $_formats = array(); + + /** + * Format Count + * + * @var int + */ + private $_format = 0; + + /** + * Create a new PHPExcel_Reader_SYLK + */ + public function __construct() { + $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter(); + } + + /** + * Validate that the current file is a SYLK file + * + * @return boolean + */ + protected function _isValidFormat() + { + // Read sample data (first 2 KB will do) + $data = fread($this->_fileHandle, 2048); + + // Count delimiters in file + $delimiterCount = substr_count($data, ';'); + if ($delimiterCount < 1) { + return FALSE; + } + + // Analyze first line looking for ID; signature + $lines = explode("\n", $data); + if (substr($lines[0],0,4) != 'ID;P') { + return FALSE; + } + + return TRUE; + } + + /** + * Set input encoding + * + * @param string $pValue Input encoding + */ + public function setInputEncoding($pValue = 'ANSI') + { + $this->_inputEncoding = $pValue; + return $this; + } + + /** + * Get input encoding + * + * @return string + */ + public function getInputEncoding() + { + return $this->_inputEncoding; + } + + /** + * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns) + * + * @param string $pFilename + * @throws PHPExcel_Reader_Exception + */ + public function listWorksheetInfo($pFilename) + { + // Open file + $this->_openFile($pFilename); + if (!$this->_isValidFormat()) { + fclose ($this->_fileHandle); + throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); + } + $fileHandle = $this->_fileHandle; + rewind($fileHandle); + + $worksheetInfo = array(); + $worksheetInfo[0]['worksheetName'] = 'Worksheet'; + $worksheetInfo[0]['lastColumnLetter'] = 'A'; + $worksheetInfo[0]['lastColumnIndex'] = 0; + $worksheetInfo[0]['totalRows'] = 0; + $worksheetInfo[0]['totalColumns'] = 0; + + // Loop through file + $rowData = array(); + + // loop through one row (line) at a time in the file + $rowIndex = 0; + while (($rowData = fgets($fileHandle)) !== FALSE) { + $columnIndex = 0; + + // convert SYLK encoded $rowData to UTF-8 + $rowData = PHPExcel_Shared_String::SYLKtoUTF8($rowData); + + // explode each row at semicolons while taking into account that literal semicolon (;) + // is escaped like this (;;) + $rowData = explode("\t",str_replace('¤',';',str_replace(';',"\t",str_replace(';;','¤',rtrim($rowData))))); + + $dataType = array_shift($rowData); + if ($dataType == 'C') { + // Read cell value data + foreach($rowData as $rowDatum) { + switch($rowDatum{0}) { + case 'C' : + case 'X' : + $columnIndex = substr($rowDatum,1) - 1; + break; + case 'R' : + case 'Y' : + $rowIndex = substr($rowDatum,1); + break; + } + + $worksheetInfo[0]['totalRows'] = max($worksheetInfo[0]['totalRows'], $rowIndex); + $worksheetInfo[0]['lastColumnIndex'] = max($worksheetInfo[0]['lastColumnIndex'], $columnIndex); + } + } + } + + $worksheetInfo[0]['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($worksheetInfo[0]['lastColumnIndex']); + $worksheetInfo[0]['totalColumns'] = $worksheetInfo[0]['lastColumnIndex'] + 1; + + // Close file + fclose($fileHandle); + + return $worksheetInfo; + } + + /** + * Loads PHPExcel from file + * + * @param string $pFilename + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function load($pFilename) + { + // Create new PHPExcel + $objPHPExcel = new PHPExcel(); + + // Load into this instance + return $this->loadIntoExisting($pFilename, $objPHPExcel); + } + + /** + * Loads PHPExcel from file into PHPExcel instance + * + * @param string $pFilename + * @param PHPExcel $objPHPExcel + * @return PHPExcel + * @throws PHPExcel_Reader_Exception + */ + public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel) + { + // Open file + $this->_openFile($pFilename); + if (!$this->_isValidFormat()) { + fclose ($this->_fileHandle); + throw new PHPExcel_Reader_Exception($pFilename . " is an Invalid Spreadsheet file."); + } + $fileHandle = $this->_fileHandle; + rewind($fileHandle); + + // Create new PHPExcel + while ($objPHPExcel->getSheetCount() <= $this->_sheetIndex) { + $objPHPExcel->createSheet(); + } + $objPHPExcel->setActiveSheetIndex( $this->_sheetIndex ); + + $fromFormats = array('\-', '\ '); + $toFormats = array('-', ' '); + + // Loop through file + $rowData = array(); + $column = $row = ''; + + // loop through one row (line) at a time in the file + while (($rowData = fgets($fileHandle)) !== FALSE) { + + // convert SYLK encoded $rowData to UTF-8 + $rowData = PHPExcel_Shared_String::SYLKtoUTF8($rowData); + + // explode each row at semicolons while taking into account that literal semicolon (;) + // is escaped like this (;;) + $rowData = explode("\t",str_replace('¤',';',str_replace(';',"\t",str_replace(';;','¤',rtrim($rowData))))); + + $dataType = array_shift($rowData); + // Read shared styles + if ($dataType == 'P') { + $formatArray = array(); + foreach($rowData as $rowDatum) { + switch($rowDatum{0}) { + case 'P' : $formatArray['numberformat']['code'] = str_replace($fromFormats,$toFormats,substr($rowDatum,1)); + break; + case 'E' : + case 'F' : $formatArray['font']['name'] = substr($rowDatum,1); + break; + case 'L' : $formatArray['font']['size'] = substr($rowDatum,1); + break; + case 'S' : $styleSettings = substr($rowDatum,1); + for ($i=0;$i<strlen($styleSettings);++$i) { + switch ($styleSettings{$i}) { + case 'I' : $formatArray['font']['italic'] = true; + break; + case 'D' : $formatArray['font']['bold'] = true; + break; + case 'T' : $formatArray['borders']['top']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + case 'B' : $formatArray['borders']['bottom']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + case 'L' : $formatArray['borders']['left']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + case 'R' : $formatArray['borders']['right']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + } + } + break; + } + } + $this->_formats['P'.$this->_format++] = $formatArray; + // Read cell value data + } elseif ($dataType == 'C') { + $hasCalculatedValue = false; + $cellData = $cellDataFormula = ''; + foreach($rowData as $rowDatum) { + switch($rowDatum{0}) { + case 'C' : + case 'X' : $column = substr($rowDatum,1); + break; + case 'R' : + case 'Y' : $row = substr($rowDatum,1); + break; + case 'K' : $cellData = substr($rowDatum,1); + break; + case 'E' : $cellDataFormula = '='.substr($rowDatum,1); + // Convert R1C1 style references to A1 style references (but only when not quoted) + $temp = explode('"',$cellDataFormula); + $key = false; + foreach($temp as &$value) { + // Only count/replace in alternate array entries + if ($key = !$key) { + preg_match_all('/(R(\[?-?\d*\]?))(C(\[?-?\d*\]?))/',$value, $cellReferences,PREG_SET_ORDER+PREG_OFFSET_CAPTURE); + // Reverse the matches array, otherwise all our offsets will become incorrect if we modify our way + // through the formula from left to right. Reversing means that we work right to left.through + // the formula + $cellReferences = array_reverse($cellReferences); + // Loop through each R1C1 style reference in turn, converting it to its A1 style equivalent, + // then modify the formula to use that new reference + foreach($cellReferences as $cellReference) { + $rowReference = $cellReference[2][0]; + // Empty R reference is the current row + if ($rowReference == '') $rowReference = $row; + // Bracketed R references are relative to the current row + if ($rowReference{0} == '[') $rowReference = $row + trim($rowReference,'[]'); + $columnReference = $cellReference[4][0]; + // Empty C reference is the current column + if ($columnReference == '') $columnReference = $column; + // Bracketed C references are relative to the current column + if ($columnReference{0} == '[') $columnReference = $column + trim($columnReference,'[]'); + $A1CellReference = PHPExcel_Cell::stringFromColumnIndex($columnReference-1).$rowReference; + + $value = substr_replace($value,$A1CellReference,$cellReference[0][1],strlen($cellReference[0][0])); + } + } + } + unset($value); + // Then rebuild the formula string + $cellDataFormula = implode('"',$temp); + $hasCalculatedValue = true; + break; + } + } + $columnLetter = PHPExcel_Cell::stringFromColumnIndex($column-1); + $cellData = PHPExcel_Calculation::_unwrapResult($cellData); + + // Set cell value + $objPHPExcel->getActiveSheet()->getCell($columnLetter.$row)->setValue(($hasCalculatedValue) ? $cellDataFormula : $cellData); + if ($hasCalculatedValue) { + $cellData = PHPExcel_Calculation::_unwrapResult($cellData); + $objPHPExcel->getActiveSheet()->getCell($columnLetter.$row)->setCalculatedValue($cellData); + } + // Read cell formatting + } elseif ($dataType == 'F') { + $formatStyle = $columnWidth = $styleSettings = ''; + $styleData = array(); + foreach($rowData as $rowDatum) { + switch($rowDatum{0}) { + case 'C' : + case 'X' : $column = substr($rowDatum,1); + break; + case 'R' : + case 'Y' : $row = substr($rowDatum,1); + break; + case 'P' : $formatStyle = $rowDatum; + break; + case 'W' : list($startCol,$endCol,$columnWidth) = explode(' ',substr($rowDatum,1)); + break; + case 'S' : $styleSettings = substr($rowDatum,1); + for ($i=0;$i<strlen($styleSettings);++$i) { + switch ($styleSettings{$i}) { + case 'I' : $styleData['font']['italic'] = true; + break; + case 'D' : $styleData['font']['bold'] = true; + break; + case 'T' : $styleData['borders']['top']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + case 'B' : $styleData['borders']['bottom']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + case 'L' : $styleData['borders']['left']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + case 'R' : $styleData['borders']['right']['style'] = PHPExcel_Style_Border::BORDER_THIN; + break; + } + } + break; + } + } + if (($formatStyle > '') && ($column > '') && ($row > '')) { + $columnLetter = PHPExcel_Cell::stringFromColumnIndex($column-1); + if (isset($this->_formats[$formatStyle])) { + $objPHPExcel->getActiveSheet()->getStyle($columnLetter.$row)->applyFromArray($this->_formats[$formatStyle]); + } + } + if ((!empty($styleData)) && ($column > '') && ($row > '')) { + $columnLetter = PHPExcel_Cell::stringFromColumnIndex($column-1); + $objPHPExcel->getActiveSheet()->getStyle($columnLetter.$row)->applyFromArray($styleData); + } + if ($columnWidth > '') { + if ($startCol == $endCol) { + $startCol = PHPExcel_Cell::stringFromColumnIndex($startCol-1); + $objPHPExcel->getActiveSheet()->getColumnDimension($startCol)->setWidth($columnWidth); + } else { + $startCol = PHPExcel_Cell::stringFromColumnIndex($startCol-1); + $endCol = PHPExcel_Cell::stringFromColumnIndex($endCol-1); + $objPHPExcel->getActiveSheet()->getColumnDimension($startCol)->setWidth($columnWidth); + do { + $objPHPExcel->getActiveSheet()->getColumnDimension(++$startCol)->setWidth($columnWidth); + } while ($startCol != $endCol); + } + } + } else { + foreach($rowData as $rowDatum) { + switch($rowDatum{0}) { + case 'C' : + case 'X' : $column = substr($rowDatum,1); + break; + case 'R' : + case 'Y' : $row = substr($rowDatum,1); + break; + } + } + } + } + + // Close file + fclose($fileHandle); + + // Return + return $objPHPExcel; + } + + /** + * Get sheet index + * + * @return int + */ + public function getSheetIndex() { + return $this->_sheetIndex; + } + + /** + * Set sheet index + * + * @param int $pValue Sheet index + * @return PHPExcel_Reader_SYLK + */ + public function setSheetIndex($pValue = 0) { + $this->_sheetIndex = $pValue; + return $this; + } + +} diff --git a/PHPExcel/ReferenceHelper.php b/PHPExcel/ReferenceHelper.php new file mode 100644 index 0000000..402f2b4 --- /dev/null +++ b/PHPExcel/ReferenceHelper.php @@ -0,0 +1,922 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_ReferenceHelper (Singleton) + * + * @category PHPExcel + * @package PHPExcel + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_ReferenceHelper +{ + /** Constants */ + /** Regular Expressions */ + const REFHELPER_REGEXP_CELLREF = '((\w*|\'[^!]*\')!)?(?<![:a-z\$])(\$?[a-z]{1,3}\$?\d+)(?=[^:!\d\'])'; + const REFHELPER_REGEXP_CELLRANGE = '((\w*|\'[^!]*\')!)?(\$?[a-z]{1,3}\$?\d+):(\$?[a-z]{1,3}\$?\d+)'; + const REFHELPER_REGEXP_ROWRANGE = '((\w*|\'[^!]*\')!)?(\$?\d+):(\$?\d+)'; + const REFHELPER_REGEXP_COLRANGE = '((\w*|\'[^!]*\')!)?(\$?[a-z]{1,3}):(\$?[a-z]{1,3})'; + + /** + * Instance of this class + * + * @var PHPExcel_ReferenceHelper + */ + private static $_instance; + + /** + * Get an instance of this class + * + * @return PHPExcel_ReferenceHelper + */ + public static function getInstance() { + if (!isset(self::$_instance) || (self::$_instance === NULL)) { + self::$_instance = new PHPExcel_ReferenceHelper(); + } + + return self::$_instance; + } + + /** + * Create a new PHPExcel_ReferenceHelper + */ + protected function __construct() { + } + + /** + * Compare two column addresses + * Intended for use as a Callback function for sorting column addresses by column + * + * @param string $a First column to test (e.g. 'AA') + * @param string $b Second column to test (e.g. 'Z') + * @return integer + */ + public static function columnSort($a, $b) { + return strcasecmp(strlen($a) . $a, strlen($b) . $b); + } + + /** + * Compare two column addresses + * Intended for use as a Callback function for reverse sorting column addresses by column + * + * @param string $a First column to test (e.g. 'AA') + * @param string $b Second column to test (e.g. 'Z') + * @return integer + */ + public static function columnReverseSort($a, $b) { + return 1 - strcasecmp(strlen($a) . $a, strlen($b) . $b); + } + + /** + * Compare two cell addresses + * Intended for use as a Callback function for sorting cell addresses by column and row + * + * @param string $a First cell to test (e.g. 'AA1') + * @param string $b Second cell to test (e.g. 'Z1') + * @return integer + */ + public static function cellSort($a, $b) { + sscanf($a,'%[A-Z]%d', $ac, $ar); + sscanf($b,'%[A-Z]%d', $bc, $br); + + if ($ar == $br) { + return strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc); + } + return ($ar < $br) ? -1 : 1; + } + + /** + * Compare two cell addresses + * Intended for use as a Callback function for sorting cell addresses by column and row + * + * @param string $a First cell to test (e.g. 'AA1') + * @param string $b Second cell to test (e.g. 'Z1') + * @return integer + */ + public static function cellReverseSort($a, $b) { + sscanf($a,'%[A-Z]%d', $ac, $ar); + sscanf($b,'%[A-Z]%d', $bc, $br); + + if ($ar == $br) { + return 1 - strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc); + } + return ($ar < $br) ? 1 : -1; + } + + /** + * Test whether a cell address falls within a defined range of cells + * + * @param string $cellAddress Address of the cell we're testing + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @return boolean + */ + private static function cellAddressInDeleteRange($cellAddress, $beforeRow, $pNumRows, $beforeColumnIndex, $pNumCols) { + list($cellColumn, $cellRow) = PHPExcel_Cell::coordinateFromString($cellAddress); + $cellColumnIndex = PHPExcel_Cell::columnIndexFromString($cellColumn); + // Is cell within the range of rows/columns if we're deleting + if ($pNumRows < 0 && + ($cellRow >= ($beforeRow + $pNumRows)) && + ($cellRow < $beforeRow)) { + return TRUE; + } elseif ($pNumCols < 0 && + ($cellColumnIndex >= ($beforeColumnIndex + $pNumCols)) && + ($cellColumnIndex < $beforeColumnIndex)) { + return TRUE; + } + return FALSE; + } + + /** + * Update page breaks when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustPageBreaks(PHPExcel_Worksheet $pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aBreaks = $pSheet->getBreaks(); + ($pNumCols > 0 || $pNumRows > 0) ? + uksort($aBreaks, array('PHPExcel_ReferenceHelper','cellReverseSort')) : + uksort($aBreaks, array('PHPExcel_ReferenceHelper','cellSort')); + + foreach ($aBreaks as $key => $value) { + if (self::cellAddressInDeleteRange($key, $beforeRow, $pNumRows, $beforeColumnIndex, $pNumCols)) { + // If we're deleting, then clear any defined breaks that are within the range + // of rows/columns that we're deleting + $pSheet->setBreak($key, PHPExcel_Worksheet::BREAK_NONE); + } else { + // Otherwise update any affected breaks by inserting a new break at the appropriate point + // and removing the old affected break + $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); + if ($key != $newReference) { + $pSheet->setBreak($newReference, $value) + ->setBreak($key, PHPExcel_Worksheet::BREAK_NONE); + } + } + } + } + + /** + * Update cell comments when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustComments($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aComments = $pSheet->getComments(); + $aNewComments = array(); // the new array of all comments + + foreach ($aComments as $key => &$value) { + // Any comments inside a deleted range will be ignored + if (!self::cellAddressInDeleteRange($key, $beforeRow, $pNumRows, $beforeColumnIndex, $pNumCols)) { + // Otherwise build a new array of comments indexed by the adjusted cell reference + $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); + $aNewComments[$newReference] = $value; + } + } + // Replace the comments array with the new set of comments + $pSheet->setComments($aNewComments); + } + + /** + * Update hyperlinks when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustHyperlinks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aHyperlinkCollection = $pSheet->getHyperlinkCollection(); + ($pNumCols > 0 || $pNumRows > 0) ? + uksort($aHyperlinkCollection, array('PHPExcel_ReferenceHelper','cellReverseSort')) : + uksort($aHyperlinkCollection, array('PHPExcel_ReferenceHelper','cellSort')); + + foreach ($aHyperlinkCollection as $key => $value) { + $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); + if ($key != $newReference) { + $pSheet->setHyperlink( $newReference, $value ); + $pSheet->setHyperlink( $key, null ); + } + } + } + + /** + * Update data validations when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustDataValidations($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aDataValidationCollection = $pSheet->getDataValidationCollection(); + ($pNumCols > 0 || $pNumRows > 0) ? + uksort($aDataValidationCollection, array('PHPExcel_ReferenceHelper','cellReverseSort')) : + uksort($aDataValidationCollection, array('PHPExcel_ReferenceHelper','cellSort')); + foreach ($aDataValidationCollection as $key => $value) { + $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); + if ($key != $newReference) { + $pSheet->setDataValidation( $newReference, $value ); + $pSheet->setDataValidation( $key, null ); + } + } + } + + /** + * Update merged cells when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustMergeCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aMergeCells = $pSheet->getMergeCells(); + $aNewMergeCells = array(); // the new array of all merge cells + foreach ($aMergeCells as $key => &$value) { + $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); + $aNewMergeCells[$newReference] = $newReference; + } + $pSheet->setMergeCells($aNewMergeCells); // replace the merge cells array + } + + /** + * Update protected cells when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustProtectedCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aProtectedCells = $pSheet->getProtectedCells(); + ($pNumCols > 0 || $pNumRows > 0) ? + uksort($aProtectedCells, array('PHPExcel_ReferenceHelper','cellReverseSort')) : + uksort($aProtectedCells, array('PHPExcel_ReferenceHelper','cellSort')); + foreach ($aProtectedCells as $key => $value) { + $newReference = $this->updateCellReference($key, $pBefore, $pNumCols, $pNumRows); + if ($key != $newReference) { + $pSheet->protectCells( $newReference, $value, true ); + $pSheet->unprotectCells( $key ); + } + } + } + + /** + * Update column dimensions when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustColumnDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aColumnDimensions = array_reverse($pSheet->getColumnDimensions(), true); + if (!empty($aColumnDimensions)) { + foreach ($aColumnDimensions as $objColumnDimension) { + $newReference = $this->updateCellReference($objColumnDimension->getColumnIndex() . '1', $pBefore, $pNumCols, $pNumRows); + list($newReference) = PHPExcel_Cell::coordinateFromString($newReference); + if ($objColumnDimension->getColumnIndex() != $newReference) { + $objColumnDimension->setColumnIndex($newReference); + } + } + $pSheet->refreshColumnDimensions(); + } + } + + /** + * Update row dimensions when inserting/deleting rows/columns + * + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @param string $pBefore Insert/Delete before this cell address (e.g. 'A1') + * @param integer $beforeColumnIndex Index number of the column we're inserting/deleting before + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $beforeRow Number of the row we're inserting/deleting before + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + */ + protected function _adjustRowDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows) + { + $aRowDimensions = array_reverse($pSheet->getRowDimensions(), true); + if (!empty($aRowDimensions)) { + foreach ($aRowDimensions as $objRowDimension) { + $newReference = $this->updateCellReference('A' . $objRowDimension->getRowIndex(), $pBefore, $pNumCols, $pNumRows); + list(, $newReference) = PHPExcel_Cell::coordinateFromString($newReference); + if ($objRowDimension->getRowIndex() != $newReference) { + $objRowDimension->setRowIndex($newReference); + } + } + $pSheet->refreshRowDimensions(); + + $copyDimension = $pSheet->getRowDimension($beforeRow - 1); + for ($i = $beforeRow; $i <= $beforeRow - 1 + $pNumRows; ++$i) { + $newDimension = $pSheet->getRowDimension($i); + $newDimension->setRowHeight($copyDimension->getRowHeight()); + $newDimension->setVisible($copyDimension->getVisible()); + $newDimension->setOutlineLevel($copyDimension->getOutlineLevel()); + $newDimension->setCollapsed($copyDimension->getCollapsed()); + } + } + } + + /** + * Insert a new column or row, updating all possible related data + * + * @param string $pBefore Insert before this cell address (e.g. 'A1') + * @param integer $pNumCols Number of columns to insert/delete (negative values indicate deletion) + * @param integer $pNumRows Number of rows to insert/delete (negative values indicate deletion) + * @param PHPExcel_Worksheet $pSheet The worksheet that we're editing + * @throws PHPExcel_Exception + */ + public function insertNewBefore($pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, PHPExcel_Worksheet $pSheet = NULL) + { + $remove = ($pNumCols < 0 || $pNumRows < 0); + $aCellCollection = $pSheet->getCellCollection(); + + // Get coordinates of $pBefore + $beforeColumn = 'A'; + $beforeRow = 1; + list($beforeColumn, $beforeRow) = PHPExcel_Cell::coordinateFromString($pBefore); + $beforeColumnIndex = PHPExcel_Cell::columnIndexFromString($beforeColumn); + + // Clear cells if we are removing columns or rows + $highestColumn = $pSheet->getHighestColumn(); + $highestRow = $pSheet->getHighestRow(); + + // 1. Clear column strips if we are removing columns + if ($pNumCols < 0 && $beforeColumnIndex - 2 + $pNumCols > 0) { + for ($i = 1; $i <= $highestRow - 1; ++$i) { + for ($j = $beforeColumnIndex - 1 + $pNumCols; $j <= $beforeColumnIndex - 2; ++$j) { + $coordinate = PHPExcel_Cell::stringFromColumnIndex($j) . $i; + $pSheet->removeConditionalStyles($coordinate); + if ($pSheet->cellExists($coordinate)) { + $pSheet->getCell($coordinate)->setValueExplicit('', PHPExcel_Cell_DataType::TYPE_NULL); + $pSheet->getCell($coordinate)->setXfIndex(0); + } + } + } + } + + // 2. Clear row strips if we are removing rows + if ($pNumRows < 0 && $beforeRow - 1 + $pNumRows > 0) { + for ($i = $beforeColumnIndex - 1; $i <= PHPExcel_Cell::columnIndexFromString($highestColumn) - 1; ++$i) { + for ($j = $beforeRow + $pNumRows; $j <= $beforeRow - 1; ++$j) { + $coordinate = PHPExcel_Cell::stringFromColumnIndex($i) . $j; + $pSheet->removeConditionalStyles($coordinate); + if ($pSheet->cellExists($coordinate)) { + $pSheet->getCell($coordinate)->setValueExplicit('', PHPExcel_Cell_DataType::TYPE_NULL); + $pSheet->getCell($coordinate)->setXfIndex(0); + } + } + } + } + + // Loop through cells, bottom-up, and change cell coordinates + if($remove) { + // It's faster to reverse and pop than to use unshift, especially with large cell collections + $aCellCollection = array_reverse($aCellCollection); + } + while ($cellID = array_pop($aCellCollection)) { + $cell = $pSheet->getCell($cellID); + $cellIndex = PHPExcel_Cell::columnIndexFromString($cell->getColumn()); + + if ($cellIndex-1 + $pNumCols < 0) { + continue; + } + + // New coordinates + $newCoordinates = PHPExcel_Cell::stringFromColumnIndex($cellIndex-1 + $pNumCols) . ($cell->getRow() + $pNumRows); + + // Should the cell be updated? Move value and cellXf index from one cell to another. + if (($cellIndex >= $beforeColumnIndex) && + ($cell->getRow() >= $beforeRow)) { + + // Update cell styles + $pSheet->getCell($newCoordinates)->setXfIndex($cell->getXfIndex()); + + // Insert this cell at its new location + if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) { + // Formula should be adjusted + $pSheet->getCell($newCoordinates) + ->setValue($this->updateFormulaReferences($cell->getValue(), + $pBefore, $pNumCols, $pNumRows, $pSheet->getTitle())); + } else { + // Formula should not be adjusted + $pSheet->getCell($newCoordinates)->setValue($cell->getValue()); + } + + // Clear the original cell + $pSheet->getCellCacheController()->deleteCacheData($cellID); + + } else { + /* We don't need to update styles for rows/columns before our insertion position, + but we do still need to adjust any formulae in those cells */ + if ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA) { + // Formula should be adjusted + $cell->setValue($this->updateFormulaReferences($cell->getValue(), + $pBefore, $pNumCols, $pNumRows, $pSheet->getTitle())); + } + + } + } + + // Duplicate styles for the newly inserted cells + $highestColumn = $pSheet->getHighestColumn(); + $highestRow = $pSheet->getHighestRow(); + + if ($pNumCols > 0 && $beforeColumnIndex - 2 > 0) { + for ($i = $beforeRow; $i <= $highestRow - 1; ++$i) { + + // Style + $coordinate = PHPExcel_Cell::stringFromColumnIndex( $beforeColumnIndex - 2 ) . $i; + if ($pSheet->cellExists($coordinate)) { + $xfIndex = $pSheet->getCell($coordinate)->getXfIndex(); + $conditionalStyles = $pSheet->conditionalStylesExists($coordinate) ? + $pSheet->getConditionalStyles($coordinate) : false; + for ($j = $beforeColumnIndex - 1; $j <= $beforeColumnIndex - 2 + $pNumCols; ++$j) { + $pSheet->getCellByColumnAndRow($j, $i)->setXfIndex($xfIndex); + if ($conditionalStyles) { + $cloned = array(); + foreach ($conditionalStyles as $conditionalStyle) { + $cloned[] = clone $conditionalStyle; + } + $pSheet->setConditionalStyles(PHPExcel_Cell::stringFromColumnIndex($j) . $i, $cloned); + } + } + } + + } + } + + if ($pNumRows > 0 && $beforeRow - 1 > 0) { + for ($i = $beforeColumnIndex - 1; $i <= PHPExcel_Cell::columnIndexFromString($highestColumn) - 1; ++$i) { + + // Style + $coordinate = PHPExcel_Cell::stringFromColumnIndex($i) . ($beforeRow - 1); + if ($pSheet->cellExists($coordinate)) { + $xfIndex = $pSheet->getCell($coordinate)->getXfIndex(); + $conditionalStyles = $pSheet->conditionalStylesExists($coordinate) ? + $pSheet->getConditionalStyles($coordinate) : false; + for ($j = $beforeRow; $j <= $beforeRow - 1 + $pNumRows; ++$j) { + $pSheet->getCell(PHPExcel_Cell::stringFromColumnIndex($i) . $j)->setXfIndex($xfIndex); + if ($conditionalStyles) { + $cloned = array(); + foreach ($conditionalStyles as $conditionalStyle) { + $cloned[] = clone $conditionalStyle; + } + $pSheet->setConditionalStyles(PHPExcel_Cell::stringFromColumnIndex($i) . $j, $cloned); + } + } + } + } + } + + // Update worksheet: column dimensions + $this->_adjustColumnDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: row dimensions + $this->_adjustRowDimensions($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: page breaks + $this->_adjustPageBreaks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: comments + $this->_adjustComments($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: hyperlinks + $this->_adjustHyperlinks($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: data validations + $this->_adjustDataValidations($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: merge cells + $this->_adjustMergeCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: protected cells + $this->_adjustProtectedCells($pSheet, $pBefore, $beforeColumnIndex, $pNumCols, $beforeRow, $pNumRows); + + // Update worksheet: autofilter + $autoFilter = $pSheet->getAutoFilter(); + $autoFilterRange = $autoFilter->getRange(); + if (!empty($autoFilterRange)) { + if ($pNumCols != 0) { + $autoFilterColumns = array_keys($autoFilter->getColumns()); + if (count($autoFilterColumns) > 0) { + sscanf($pBefore,'%[A-Z]%d', $column, $row); + $columnIndex = PHPExcel_Cell::columnIndexFromString($column); + list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($autoFilterRange); + if ($columnIndex <= $rangeEnd[0]) { + if ($pNumCols < 0) { + // If we're actually deleting any columns that fall within the autofilter range, + // then we delete any rules for those columns + $deleteColumn = $columnIndex + $pNumCols - 1; + $deleteCount = abs($pNumCols); + for ($i = 1; $i <= $deleteCount; ++$i) { + if (in_array(PHPExcel_Cell::stringFromColumnIndex($deleteColumn),$autoFilterColumns)) { + $autoFilter->clearColumn(PHPExcel_Cell::stringFromColumnIndex($deleteColumn)); + } + ++$deleteColumn; + } + } + $startCol = ($columnIndex > $rangeStart[0]) ? $columnIndex : $rangeStart[0]; + + // Shuffle columns in autofilter range + if ($pNumCols > 0) { + // For insert, we shuffle from end to beginning to avoid overwriting + $startColID = PHPExcel_Cell::stringFromColumnIndex($startCol-1); + $toColID = PHPExcel_Cell::stringFromColumnIndex($startCol+$pNumCols-1); + $endColID = PHPExcel_Cell::stringFromColumnIndex($rangeEnd[0]); + + $startColRef = $startCol; + $endColRef = $rangeEnd[0]; + $toColRef = $rangeEnd[0]+$pNumCols; + + do { + $autoFilter->shiftColumn(PHPExcel_Cell::stringFromColumnIndex($endColRef-1),PHPExcel_Cell::stringFromColumnIndex($toColRef-1)); + --$endColRef; + --$toColRef; + } while ($startColRef <= $endColRef); + } else { + // For delete, we shuffle from beginning to end to avoid overwriting + $startColID = PHPExcel_Cell::stringFromColumnIndex($startCol-1); + $toColID = PHPExcel_Cell::stringFromColumnIndex($startCol+$pNumCols-1); + $endColID = PHPExcel_Cell::stringFromColumnIndex($rangeEnd[0]); + do { + $autoFilter->shiftColumn($startColID,$toColID); + ++$startColID; + ++$toColID; + } while ($startColID != $endColID); + } + } + } + } + $pSheet->setAutoFilter( $this->updateCellReference($autoFilterRange, $pBefore, $pNumCols, $pNumRows) ); + } + + // Update worksheet: freeze pane + if ($pSheet->getFreezePane() != '') { + $pSheet->freezePane( $this->updateCellReference($pSheet->getFreezePane(), $pBefore, $pNumCols, $pNumRows) ); + } + + // Page setup + if ($pSheet->getPageSetup()->isPrintAreaSet()) { + $pSheet->getPageSetup()->setPrintArea( $this->updateCellReference($pSheet->getPageSetup()->getPrintArea(), $pBefore, $pNumCols, $pNumRows) ); + } + + // Update worksheet: drawings + $aDrawings = $pSheet->getDrawingCollection(); + foreach ($aDrawings as $objDrawing) { + $newReference = $this->updateCellReference($objDrawing->getCoordinates(), $pBefore, $pNumCols, $pNumRows); + if ($objDrawing->getCoordinates() != $newReference) { + $objDrawing->setCoordinates($newReference); + } + } + + // Update workbook: named ranges + if (count($pSheet->getParent()->getNamedRanges()) > 0) { + foreach ($pSheet->getParent()->getNamedRanges() as $namedRange) { + if ($namedRange->getWorksheet()->getHashCode() == $pSheet->getHashCode()) { + $namedRange->setRange( + $this->updateCellReference($namedRange->getRange(), $pBefore, $pNumCols, $pNumRows) + ); + } + } + } + + // Garbage collect + $pSheet->garbageCollect(); + } + + /** + * Update references within formulas + * + * @param string $pFormula Formula to update + * @param int $pBefore Insert before this one + * @param int $pNumCols Number of columns to insert + * @param int $pNumRows Number of rows to insert + * @param string $sheetName Worksheet name/title + * @return string Updated formula + * @throws PHPExcel_Exception + */ + public function updateFormulaReferences($pFormula = '', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0, $sheetName = '') { + // Update cell references in the formula + $formulaBlocks = explode('"',$pFormula); + $i = false; + foreach($formulaBlocks as &$formulaBlock) { + // Ignore blocks that were enclosed in quotes (alternating entries in the $formulaBlocks array after the explode) + if ($i = !$i) { + $adjustCount = 0; + $newCellTokens = $cellTokens = array(); + // Search for row ranges (e.g. 'Sheet1'!3:5 or 3:5) with or without $ absolutes (e.g. $3:5) + $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_ROWRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); + if ($matchCount > 0) { + foreach($matches as $match) { + $fromString = ($match[2] > '') ? $match[2].'!' : ''; + $fromString .= $match[3].':'.$match[4]; + $modified3 = substr($this->updateCellReference('$A'.$match[3],$pBefore,$pNumCols,$pNumRows),2); + $modified4 = substr($this->updateCellReference('$A'.$match[4],$pBefore,$pNumCols,$pNumRows),2); + + if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) { + if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { + $toString = ($match[2] > '') ? $match[2].'!' : ''; + $toString .= $modified3.':'.$modified4; + // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more + $column = 100000; + $row = 10000000+trim($match[3],'$'); + $cellIndex = $column.$row; + + $newCellTokens[$cellIndex] = preg_quote($toString); + $cellTokens[$cellIndex] = '/(?<!\d\$\!)'.preg_quote($fromString).'(?!\d)/i'; + ++$adjustCount; + } + } + } + } + // Search for column ranges (e.g. 'Sheet1'!C:E or C:E) with or without $ absolutes (e.g. $C:E) + $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_COLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); + if ($matchCount > 0) { + foreach($matches as $match) { + $fromString = ($match[2] > '') ? $match[2].'!' : ''; + $fromString .= $match[3].':'.$match[4]; + $modified3 = substr($this->updateCellReference($match[3].'$1',$pBefore,$pNumCols,$pNumRows),0,-2); + $modified4 = substr($this->updateCellReference($match[4].'$1',$pBefore,$pNumCols,$pNumRows),0,-2); + + if ($match[3].':'.$match[4] !== $modified3.':'.$modified4) { + if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { + $toString = ($match[2] > '') ? $match[2].'!' : ''; + $toString .= $modified3.':'.$modified4; + // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more + $column = PHPExcel_Cell::columnIndexFromString(trim($match[3],'$')) + 100000; + $row = 10000000; + $cellIndex = $column.$row; + + $newCellTokens[$cellIndex] = preg_quote($toString); + $cellTokens[$cellIndex] = '/(?<![A-Z\$\!])'.preg_quote($fromString).'(?![A-Z])/i'; + ++$adjustCount; + } + } + } + } + // Search for cell ranges (e.g. 'Sheet1'!A3:C5 or A3:C5) with or without $ absolutes (e.g. $A1:C$5) + $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLRANGE.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); + if ($matchCount > 0) { + foreach($matches as $match) { + $fromString = ($match[2] > '') ? $match[2].'!' : ''; + $fromString .= $match[3].':'.$match[4]; + $modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows); + $modified4 = $this->updateCellReference($match[4],$pBefore,$pNumCols,$pNumRows); + + if ($match[3].$match[4] !== $modified3.$modified4) { + if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { + $toString = ($match[2] > '') ? $match[2].'!' : ''; + $toString .= $modified3.':'.$modified4; + list($column,$row) = PHPExcel_Cell::coordinateFromString($match[3]); + // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more + $column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000; + $row = trim($row,'$') + 10000000; + $cellIndex = $column.$row; + + $newCellTokens[$cellIndex] = preg_quote($toString); + $cellTokens[$cellIndex] = '/(?<![A-Z]\$\!)'.preg_quote($fromString).'(?!\d)/i'; + ++$adjustCount; + } + } + } + } + // Search for cell references (e.g. 'Sheet1'!A3 or C5) with or without $ absolutes (e.g. $A1 or C$5) + $matchCount = preg_match_all('/'.self::REFHELPER_REGEXP_CELLREF.'/i', ' '.$formulaBlock.' ', $matches, PREG_SET_ORDER); + + if ($matchCount > 0) { + foreach($matches as $match) { + $fromString = ($match[2] > '') ? $match[2].'!' : ''; + $fromString .= $match[3]; + + $modified3 = $this->updateCellReference($match[3],$pBefore,$pNumCols,$pNumRows); + if ($match[3] !== $modified3) { + if (($match[2] == '') || (trim($match[2],"'") == $sheetName)) { + $toString = ($match[2] > '') ? $match[2].'!' : ''; + $toString .= $modified3; + list($column,$row) = PHPExcel_Cell::coordinateFromString($match[3]); + // Max worksheet size is 1,048,576 rows by 16,384 columns in Excel 2007, so our adjustments need to be at least one digit more + $column = PHPExcel_Cell::columnIndexFromString(trim($column,'$')) + 100000; + $row = trim($row,'$') + 10000000; + $cellIndex = $row . $column; + + $newCellTokens[$cellIndex] = preg_quote($toString); + $cellTokens[$cellIndex] = '/(?<![A-Z\$\!])'.preg_quote($fromString).'(?!\d)/i'; + ++$adjustCount; + } + } + } + } + if ($adjustCount > 0) { + if ($pNumCols > 0 || $pNumRows > 0) { + krsort($cellTokens); + krsort($newCellTokens); + } else { + ksort($cellTokens); + ksort($newCellTokens); + } // Update cell references in the formula + $formulaBlock = str_replace('\\','',preg_replace($cellTokens,$newCellTokens,$formulaBlock)); + } + } + } + unset($formulaBlock); + + // Then rebuild the formula string + return implode('"',$formulaBlocks); + } + + /** + * Update cell reference + * + * @param string $pCellRange Cell range + * @param int $pBefore Insert before this one + * @param int $pNumCols Number of columns to increment + * @param int $pNumRows Number of rows to increment + * @return string Updated cell range + * @throws PHPExcel_Exception + */ + public function updateCellReference($pCellRange = 'A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) { + // Is it in another worksheet? Will not have to update anything. + if (strpos($pCellRange, "!") !== false) { + return $pCellRange; + // Is it a range or a single cell? + } elseif (strpos($pCellRange, ':') === false && strpos($pCellRange, ',') === false) { + // Single cell + return $this->_updateSingleCellReference($pCellRange, $pBefore, $pNumCols, $pNumRows); + } elseif (strpos($pCellRange, ':') !== false || strpos($pCellRange, ',') !== false) { + // Range + return $this->_updateCellRange($pCellRange, $pBefore, $pNumCols, $pNumRows); + } else { + // Return original + return $pCellRange; + } + } + + /** + * Update named formulas (i.e. containing worksheet references / named ranges) + * + * @param PHPExcel $pPhpExcel Object to update + * @param string $oldName Old name (name to replace) + * @param string $newName New name + */ + public function updateNamedFormulas(PHPExcel $pPhpExcel, $oldName = '', $newName = '') { + if ($oldName == '') { + return; + } + + foreach ($pPhpExcel->getWorksheetIterator() as $sheet) { + foreach ($sheet->getCellCollection(false) as $cellID) { + $cell = $sheet->getCell($cellID); + if (($cell !== NULL) && ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_FORMULA)) { + $formula = $cell->getValue(); + if (strpos($formula, $oldName) !== false) { + $formula = str_replace("'" . $oldName . "'!", "'" . $newName . "'!", $formula); + $formula = str_replace($oldName . "!", $newName . "!", $formula); + $cell->setValueExplicit($formula, PHPExcel_Cell_DataType::TYPE_FORMULA); + } + } + } + } + } + + /** + * Update cell range + * + * @param string $pCellRange Cell range (e.g. 'B2:D4', 'B:C' or '2:3') + * @param int $pBefore Insert before this one + * @param int $pNumCols Number of columns to increment + * @param int $pNumRows Number of rows to increment + * @return string Updated cell range + * @throws PHPExcel_Exception + */ + private function _updateCellRange($pCellRange = 'A1:A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) { + if (strpos($pCellRange,':') !== false || strpos($pCellRange, ',') !== false) { + // Update range + $range = PHPExcel_Cell::splitRange($pCellRange); + $ic = count($range); + for ($i = 0; $i < $ic; ++$i) { + $jc = count($range[$i]); + for ($j = 0; $j < $jc; ++$j) { + if (ctype_alpha($range[$i][$j])) { + $r = PHPExcel_Cell::coordinateFromString($this->_updateSingleCellReference($range[$i][$j].'1', $pBefore, $pNumCols, $pNumRows)); + $range[$i][$j] = $r[0]; + } elseif(ctype_digit($range[$i][$j])) { + $r = PHPExcel_Cell::coordinateFromString($this->_updateSingleCellReference('A'.$range[$i][$j], $pBefore, $pNumCols, $pNumRows)); + $range[$i][$j] = $r[1]; + } else { + $range[$i][$j] = $this->_updateSingleCellReference($range[$i][$j], $pBefore, $pNumCols, $pNumRows); + } + } + } + + // Recreate range string + return PHPExcel_Cell::buildRange($range); + } else { + throw new PHPExcel_Exception("Only cell ranges may be passed to this method."); + } + } + + /** + * Update single cell reference + * + * @param string $pCellReference Single cell reference + * @param int $pBefore Insert before this one + * @param int $pNumCols Number of columns to increment + * @param int $pNumRows Number of rows to increment + * @return string Updated cell reference + * @throws PHPExcel_Exception + */ + private function _updateSingleCellReference($pCellReference = 'A1', $pBefore = 'A1', $pNumCols = 0, $pNumRows = 0) { + if (strpos($pCellReference, ':') === false && strpos($pCellReference, ',') === false) { + // Get coordinates of $pBefore + list($beforeColumn, $beforeRow) = PHPExcel_Cell::coordinateFromString( $pBefore ); + + // Get coordinates of $pCellReference + list($newColumn, $newRow) = PHPExcel_Cell::coordinateFromString( $pCellReference ); + + // Verify which parts should be updated + $updateColumn = (($newColumn{0} != '$') && ($beforeColumn{0} != '$') && + PHPExcel_Cell::columnIndexFromString($newColumn) >= PHPExcel_Cell::columnIndexFromString($beforeColumn)); + $updateRow = (($newRow{0} != '$') && ($beforeRow{0} != '$') && + $newRow >= $beforeRow); + + // Create new column reference + if ($updateColumn) { + $newColumn = PHPExcel_Cell::stringFromColumnIndex( PHPExcel_Cell::columnIndexFromString($newColumn) - 1 + $pNumCols ); + } + + // Create new row reference + if ($updateRow) { + $newRow = $newRow + $pNumRows; + } + + // Return new reference + return $newColumn . $newRow; + } else { + throw new PHPExcel_Exception("Only single cell references may be passed to this method."); + } + } + + /** + * __clone implementation. Cloning should not be allowed in a Singleton! + * + * @throws PHPExcel_Exception + */ + public final function __clone() { + throw new PHPExcel_Exception("Cloning a Singleton is not allowed!"); + } +} diff --git a/PHPExcel/RichText.php b/PHPExcel/RichText.php new file mode 100644 index 0000000..2f172a0 --- /dev/null +++ b/PHPExcel/RichText.php @@ -0,0 +1,199 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_RichText + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_RichText implements PHPExcel_IComparable +{ + /** + * Rich text elements + * + * @var PHPExcel_RichText_ITextElement[] + */ + private $_richTextElements; + + /** + * Create a new PHPExcel_RichText instance + * + * @param PHPExcel_Cell $pCell + * @throws PHPExcel_Exception + */ + public function __construct(PHPExcel_Cell $pCell = null) + { + // Initialise variables + $this->_richTextElements = array(); + + // Rich-Text string attached to cell? + if ($pCell !== NULL) { + // Add cell text and style + if ($pCell->getValue() != "") { + $objRun = new PHPExcel_RichText_Run($pCell->getValue()); + $objRun->setFont(clone $pCell->getParent()->getStyle($pCell->getCoordinate())->getFont()); + $this->addText($objRun); + } + + // Set parent value + $pCell->setValueExplicit($this, PHPExcel_Cell_DataType::TYPE_STRING); + } + } + + /** + * Add text + * + * @param PHPExcel_RichText_ITextElement $pText Rich text element + * @throws PHPExcel_Exception + * @return PHPExcel_RichText + */ + public function addText(PHPExcel_RichText_ITextElement $pText = null) + { + $this->_richTextElements[] = $pText; + return $this; + } + + /** + * Create text + * + * @param string $pText Text + * @return PHPExcel_RichText_TextElement + * @throws PHPExcel_Exception + */ + public function createText($pText = '') + { + $objText = new PHPExcel_RichText_TextElement($pText); + $this->addText($objText); + return $objText; + } + + /** + * Create text run + * + * @param string $pText Text + * @return PHPExcel_RichText_Run + * @throws PHPExcel_Exception + */ + public function createTextRun($pText = '') + { + $objText = new PHPExcel_RichText_Run($pText); + $this->addText($objText); + return $objText; + } + + /** + * Get plain text + * + * @return string + */ + public function getPlainText() + { + // Return value + $returnValue = ''; + + // Loop through all PHPExcel_RichText_ITextElement + foreach ($this->_richTextElements as $text) { + $returnValue .= $text->getText(); + } + + // Return + return $returnValue; + } + + /** + * Convert to string + * + * @return string + */ + public function __toString() + { + return $this->getPlainText(); + } + + /** + * Get Rich Text elements + * + * @return PHPExcel_RichText_ITextElement[] + */ + public function getRichTextElements() + { + return $this->_richTextElements; + } + + /** + * Set Rich Text elements + * + * @param PHPExcel_RichText_ITextElement[] $pElements Array of elements + * @throws PHPExcel_Exception + * @return PHPExcel_RichText + */ + public function setRichTextElements($pElements = null) + { + if (is_array($pElements)) { + $this->_richTextElements = $pElements; + } else { + throw new PHPExcel_Exception("Invalid PHPExcel_RichText_ITextElement[] array passed."); + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() + { + $hashElements = ''; + foreach ($this->_richTextElements as $element) { + $hashElements .= $element->getHashCode(); + } + + return md5( + $hashElements + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() + { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/RichText/ITextElement.php b/PHPExcel/RichText/ITextElement.php new file mode 100644 index 0000000..ec19498 --- /dev/null +++ b/PHPExcel/RichText/ITextElement.php @@ -0,0 +1,64 @@ +<?php +/** + * PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_RichText_ITextElement + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +interface PHPExcel_RichText_ITextElement +{ + /** + * Get text + * + * @return string Text + */ + public function getText(); + + /** + * Set text + * + * @param $pText string Text + * @return PHPExcel_RichText_ITextElement + */ + public function setText($pText = ''); + + /** + * Get font + * + * @return PHPExcel_Style_Font + */ + public function getFont(); + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode(); +} diff --git a/PHPExcel/RichText/Run.php b/PHPExcel/RichText/Run.php new file mode 100644 index 0000000..71545fc --- /dev/null +++ b/PHPExcel/RichText/Run.php @@ -0,0 +1,102 @@ +<?php +/** + * PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_RichText_Run + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_RichText_Run extends PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement +{ + /** + * Font + * + * @var PHPExcel_Style_Font + */ + private $_font; + + /** + * Create a new PHPExcel_RichText_Run instance + * + * @param string $pText Text + */ + public function __construct($pText = '') + { + // Initialise variables + $this->setText($pText); + $this->_font = new PHPExcel_Style_Font(); + } + + /** + * Get font + * + * @return PHPExcel_Style_Font + */ + public function getFont() { + return $this->_font; + } + + /** + * Set font + * + * @param PHPExcel_Style_Font $pFont Font + * @throws PHPExcel_Exception + * @return PHPExcel_RichText_ITextElement + */ + public function setFont(PHPExcel_Style_Font $pFont = null) { + $this->_font = $pFont; + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->getText() + . $this->_font->getHashCode() + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/RichText/TextElement.php b/PHPExcel/RichText/TextElement.php new file mode 100644 index 0000000..3593c6e --- /dev/null +++ b/PHPExcel/RichText/TextElement.php @@ -0,0 +1,108 @@ +<?php +/** + * PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_RichText_TextElement + * + * @category PHPExcel + * @package PHPExcel_RichText + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_RichText_TextElement implements PHPExcel_RichText_ITextElement +{ + /** + * Text + * + * @var string + */ + private $_text; + + /** + * Create a new PHPExcel_RichText_TextElement instance + * + * @param string $pText Text + */ + public function __construct($pText = '') + { + // Initialise variables + $this->_text = $pText; + } + + /** + * Get text + * + * @return string Text + */ + public function getText() { + return $this->_text; + } + + /** + * Set text + * + * @param $pText string Text + * @return PHPExcel_RichText_ITextElement + */ + public function setText($pText = '') { + $this->_text = $pText; + return $this; + } + + /** + * Get font + * + * @return PHPExcel_Style_Font + */ + public function getFont() { + return null; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_text + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Settings.php b/PHPExcel/Settings.php new file mode 100644 index 0000000..b899613 --- /dev/null +++ b/PHPExcel/Settings.php @@ -0,0 +1,387 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Settings + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** PHPExcel root directory */ +if (!defined('PHPEXCEL_ROOT')) { + /** + * @ignore + */ + define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../'); + require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); +} + + +class PHPExcel_Settings +{ + /** constants */ + /** Available Zip library classes */ + const PCLZIP = 'PHPExcel_Shared_ZipArchive'; + const ZIPARCHIVE = 'ZipArchive'; + + /** Optional Chart Rendering libraries */ + const CHART_RENDERER_JPGRAPH = 'jpgraph'; + + /** Optional PDF Rendering libraries */ + const PDF_RENDERER_TCPDF = 'tcPDF'; + const PDF_RENDERER_DOMPDF = 'DomPDF'; + const PDF_RENDERER_MPDF = 'mPDF'; + + + private static $_chartRenderers = array( + self::CHART_RENDERER_JPGRAPH, + ); + + private static $_pdfRenderers = array( + self::PDF_RENDERER_TCPDF, + self::PDF_RENDERER_DOMPDF, + self::PDF_RENDERER_MPDF, + ); + + + /** + * Name of the class used for Zip file management + * e.g. + * ZipArchive + * + * @var string + */ + private static $_zipClass = self::ZIPARCHIVE; + + + /** + * Name of the external Library used for rendering charts + * e.g. + * jpgraph + * + * @var string + */ + private static $_chartRendererName = NULL; + + /** + * Directory Path to the external Library used for rendering charts + * + * @var string + */ + private static $_chartRendererPath = NULL; + + + /** + * Name of the external Library used for rendering PDF files + * e.g. + * mPDF + * + * @var string + */ + private static $_pdfRendererName = NULL; + + /** + * Directory Path to the external Library used for rendering PDF files + * + * @var string + */ + private static $_pdfRendererPath = NULL; + + /** + * Default options for libxml loader + * + * @var int + */ + private static $_libXmlLoaderOptions = null; + + /** + * Set the Zip handler Class that PHPExcel should use for Zip file management (PCLZip or ZipArchive) + * + * @param string $zipClass The Zip handler class that PHPExcel should use for Zip file management + * e.g. PHPExcel_Settings::PCLZip or PHPExcel_Settings::ZipArchive + * @return boolean Success or failure + */ + public static function setZipClass($zipClass) + { + if (($zipClass === self::PCLZIP) || + ($zipClass === self::ZIPARCHIVE)) { + self::$_zipClass = $zipClass; + return TRUE; + } + return FALSE; + } // function setZipClass() + + + /** + * Return the name of the Zip handler Class that PHPExcel is configured to use (PCLZip or ZipArchive) + * or Zip file management + * + * @return string Name of the Zip handler Class that PHPExcel is configured to use + * for Zip file management + * e.g. PHPExcel_Settings::PCLZip or PHPExcel_Settings::ZipArchive + */ + public static function getZipClass() + { + return self::$_zipClass; + } // function getZipClass() + + + /** + * Return the name of the method that is currently configured for cell cacheing + * + * @return string Name of the cacheing method + */ + public static function getCacheStorageMethod() + { + return PHPExcel_CachedObjectStorageFactory::getCacheStorageMethod(); + } // function getCacheStorageMethod() + + + /** + * Return the name of the class that is currently being used for cell cacheing + * + * @return string Name of the class currently being used for cacheing + */ + public static function getCacheStorageClass() + { + return PHPExcel_CachedObjectStorageFactory::getCacheStorageClass(); + } // function getCacheStorageClass() + + + /** + * Set the method that should be used for cell cacheing + * + * @param string $method Name of the cacheing method + * @param array $arguments Optional configuration arguments for the cacheing method + * @return boolean Success or failure + */ + public static function setCacheStorageMethod( + $method = PHPExcel_CachedObjectStorageFactory::cache_in_memory, + $arguments = array() + ) + { + return PHPExcel_CachedObjectStorageFactory::initialize($method, $arguments); + } // function setCacheStorageMethod() + + + /** + * Set the locale code to use for formula translations and any special formatting + * + * @param string $locale The locale code to use (e.g. "fr" or "pt_br" or "en_uk") + * @return boolean Success or failure + */ + public static function setLocale($locale='en_us') + { + return PHPExcel_Calculation::getInstance()->setLocale($locale); + } // function setLocale() + + + /** + * Set details of the external library that PHPExcel should use for rendering charts + * + * @param string $libraryName Internal reference name of the library + * e.g. PHPExcel_Settings::CHART_RENDERER_JPGRAPH + * @param string $libraryBaseDir Directory path to the library's base folder + * + * @return boolean Success or failure + */ + public static function setChartRenderer($libraryName, $libraryBaseDir) + { + if (!self::setChartRendererName($libraryName)) + return FALSE; + return self::setChartRendererPath($libraryBaseDir); + } // function setChartRenderer() + + + /** + * Identify to PHPExcel the external library to use for rendering charts + * + * @param string $libraryName Internal reference name of the library + * e.g. PHPExcel_Settings::CHART_RENDERER_JPGRAPH + * + * @return boolean Success or failure + */ + public static function setChartRendererName($libraryName) + { + if (!in_array($libraryName,self::$_chartRenderers)) { + return FALSE; + } + + self::$_chartRendererName = $libraryName; + + return TRUE; + } // function setChartRendererName() + + + /** + * Tell PHPExcel where to find the external library to use for rendering charts + * + * @param string $libraryBaseDir Directory path to the library's base folder + * @return boolean Success or failure + */ + public static function setChartRendererPath($libraryBaseDir) + { + if ((file_exists($libraryBaseDir) === false) || (is_readable($libraryBaseDir) === false)) { + return FALSE; + } + self::$_chartRendererPath = $libraryBaseDir; + + return TRUE; + } // function setChartRendererPath() + + + /** + * Return the Chart Rendering Library that PHPExcel is currently configured to use (e.g. jpgraph) + * + * @return string|NULL Internal reference name of the Chart Rendering Library that PHPExcel is + * currently configured to use + * e.g. PHPExcel_Settings::CHART_RENDERER_JPGRAPH + */ + public static function getChartRendererName() + { + return self::$_chartRendererName; + } // function getChartRendererName() + + + /** + * Return the directory path to the Chart Rendering Library that PHPExcel is currently configured to use + * + * @return string|NULL Directory Path to the Chart Rendering Library that PHPExcel is + * currently configured to use + */ + public static function getChartRendererPath() + { + return self::$_chartRendererPath; + } // function getChartRendererPath() + + + /** + * Set details of the external library that PHPExcel should use for rendering PDF files + * + * @param string $libraryName Internal reference name of the library + * e.g. PHPExcel_Settings::PDF_RENDERER_TCPDF, + * PHPExcel_Settings::PDF_RENDERER_DOMPDF + * or PHPExcel_Settings::PDF_RENDERER_MPDF + * @param string $libraryBaseDir Directory path to the library's base folder + * + * @return boolean Success or failure + */ + public static function setPdfRenderer($libraryName, $libraryBaseDir) + { + if (!self::setPdfRendererName($libraryName)) + return FALSE; + return self::setPdfRendererPath($libraryBaseDir); + } // function setPdfRenderer() + + + /** + * Identify to PHPExcel the external library to use for rendering PDF files + * + * @param string $libraryName Internal reference name of the library + * e.g. PHPExcel_Settings::PDF_RENDERER_TCPDF, + * PHPExcel_Settings::PDF_RENDERER_DOMPDF + * or PHPExcel_Settings::PDF_RENDERER_MPDF + * + * @return boolean Success or failure + */ + public static function setPdfRendererName($libraryName) + { + if (!in_array($libraryName,self::$_pdfRenderers)) { + return FALSE; + } + + self::$_pdfRendererName = $libraryName; + + return TRUE; + } // function setPdfRendererName() + + + /** + * Tell PHPExcel where to find the external library to use for rendering PDF files + * + * @param string $libraryBaseDir Directory path to the library's base folder + * @return boolean Success or failure + */ + public static function setPdfRendererPath($libraryBaseDir) + { + if ((file_exists($libraryBaseDir) === false) || (is_readable($libraryBaseDir) === false)) { + return FALSE; + } + self::$_pdfRendererPath = $libraryBaseDir; + + return TRUE; + } // function setPdfRendererPath() + + + /** + * Return the PDF Rendering Library that PHPExcel is currently configured to use (e.g. dompdf) + * + * @return string|NULL Internal reference name of the PDF Rendering Library that PHPExcel is + * currently configured to use + * e.g. PHPExcel_Settings::PDF_RENDERER_TCPDF, + * PHPExcel_Settings::PDF_RENDERER_DOMPDF + * or PHPExcel_Settings::PDF_RENDERER_MPDF + */ + public static function getPdfRendererName() + { + return self::$_pdfRendererName; + } // function getPdfRendererName() + + /** + * Return the directory path to the PDF Rendering Library that PHPExcel is currently configured to use + * + * @return string|NULL Directory Path to the PDF Rendering Library that PHPExcel is + * currently configured to use + */ + public static function getPdfRendererPath() + { + return self::$_pdfRendererPath; + } // function getPdfRendererPath() + + /** + * Set default options for libxml loader + * + * @param int $options Default options for libxml loader + */ + public static function setLibXmlLoaderOptions($options = null) + { + if (is_null($options)) { + $options = LIBXML_DTDLOAD | LIBXML_DTDATTR; + } + @libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); + self::$_libXmlLoaderOptions = $options; + } // function setLibXmlLoaderOptions + + /** + * Get default options for libxml loader. + * Defaults to LIBXML_DTDLOAD | LIBXML_DTDATTR when not set explicitly. + * + * @return int Default options for libxml loader + */ + public static function getLibXmlLoaderOptions() + { + if (is_null(self::$_libXmlLoaderOptions)) { + self::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR); + } + @libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); + return self::$_libXmlLoaderOptions; + } // function getLibXmlLoaderOptions +} diff --git a/PHPExcel/Shared/CodePage.php b/PHPExcel/Shared/CodePage.php new file mode 100644 index 0000000..2807ab3 --- /dev/null +++ b/PHPExcel/Shared/CodePage.php @@ -0,0 +1,102 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_CodePage + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_CodePage +{ + /** + * Convert Microsoft Code Page Identifier to Code Page Name which iconv + * and mbstring understands + * + * @param integer $codePage Microsoft Code Page Indentifier + * @return string Code Page Name + * @throws PHPExcel_Exception + */ + public static function NumberToName($codePage = 1252) + { + switch ($codePage) { + case 367: return 'ASCII'; break; // ASCII + case 437: return 'CP437'; break; // OEM US + case 720: throw new PHPExcel_Exception('Code page 720 not supported.'); + break; // OEM Arabic + case 737: return 'CP737'; break; // OEM Greek + case 775: return 'CP775'; break; // OEM Baltic + case 850: return 'CP850'; break; // OEM Latin I + case 852: return 'CP852'; break; // OEM Latin II (Central European) + case 855: return 'CP855'; break; // OEM Cyrillic + case 857: return 'CP857'; break; // OEM Turkish + case 858: return 'CP858'; break; // OEM Multilingual Latin I with Euro + case 860: return 'CP860'; break; // OEM Portugese + case 861: return 'CP861'; break; // OEM Icelandic + case 862: return 'CP862'; break; // OEM Hebrew + case 863: return 'CP863'; break; // OEM Canadian (French) + case 864: return 'CP864'; break; // OEM Arabic + case 865: return 'CP865'; break; // OEM Nordic + case 866: return 'CP866'; break; // OEM Cyrillic (Russian) + case 869: return 'CP869'; break; // OEM Greek (Modern) + case 874: return 'CP874'; break; // ANSI Thai + case 932: return 'CP932'; break; // ANSI Japanese Shift-JIS + case 936: return 'CP936'; break; // ANSI Chinese Simplified GBK + case 949: return 'CP949'; break; // ANSI Korean (Wansung) + case 950: return 'CP950'; break; // ANSI Chinese Traditional BIG5 + case 1200: return 'UTF-16LE'; break; // UTF-16 (BIFF8) + case 1250: return 'CP1250'; break; // ANSI Latin II (Central European) + case 1251: return 'CP1251'; break; // ANSI Cyrillic + case 0: // CodePage is not always correctly set when the xls file was saved by Apple's Numbers program + case 1252: return 'CP1252'; break; // ANSI Latin I (BIFF4-BIFF7) + case 1253: return 'CP1253'; break; // ANSI Greek + case 1254: return 'CP1254'; break; // ANSI Turkish + case 1255: return 'CP1255'; break; // ANSI Hebrew + case 1256: return 'CP1256'; break; // ANSI Arabic + case 1257: return 'CP1257'; break; // ANSI Baltic + case 1258: return 'CP1258'; break; // ANSI Vietnamese + case 1361: return 'CP1361'; break; // ANSI Korean (Johab) + case 10000: return 'MAC'; break; // Apple Roman + case 10006: return 'MACGREEK'; break; // Macintosh Greek + case 10007: return 'MACCYRILLIC'; break; // Macintosh Cyrillic + case 10008: return 'CP936'; break; // Macintosh - Simplified Chinese (GB 2312) + case 10029: return 'MACCENTRALEUROPE'; break; // Macintosh Central Europe + case 10079: return 'MACICELAND'; break; // Macintosh Icelandic + case 10081: return 'MACTURKISH'; break; // Macintosh Turkish + case 32768: return 'MAC'; break; // Apple Roman + case 32769: throw new PHPExcel_Exception('Code page 32769 not supported.'); + break; // ANSI Latin I (BIFF2-BIFF3) + case 65000: return 'UTF-7'; break; // Unicode (UTF-7) + case 65001: return 'UTF-8'; break; // Unicode (UTF-8) + } + + throw new PHPExcel_Exception('Unknown codepage: ' . $codePage); + } + +} diff --git a/PHPExcel/Shared/Date.php b/PHPExcel/Shared/Date.php new file mode 100644 index 0000000..7fe4f42 --- /dev/null +++ b/PHPExcel/Shared/Date.php @@ -0,0 +1,393 @@ +<?php + +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_Date + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Date +{ + /** constants */ + const CALENDAR_WINDOWS_1900 = 1900; // Base date of 1st Jan 1900 = 1.0 + const CALENDAR_MAC_1904 = 1904; // Base date of 2nd Jan 1904 = 1.0 + + /* + * Names of the months of the year, indexed by shortname + * Planned usage for locale settings + * + * @public + * @var string[] + */ + public static $_monthNames = array( 'Jan' => 'January', + 'Feb' => 'February', + 'Mar' => 'March', + 'Apr' => 'April', + 'May' => 'May', + 'Jun' => 'June', + 'Jul' => 'July', + 'Aug' => 'August', + 'Sep' => 'September', + 'Oct' => 'October', + 'Nov' => 'November', + 'Dec' => 'December', + ); + + /* + * Names of the months of the year, indexed by shortname + * Planned usage for locale settings + * + * @public + * @var string[] + */ + public static $_numberSuffixes = array( 'st', + 'nd', + 'rd', + 'th', + ); + + /* + * Base calendar year to use for calculations + * + * @private + * @var int + */ + protected static $_excelBaseDate = self::CALENDAR_WINDOWS_1900; + + /** + * Set the Excel calendar (Windows 1900 or Mac 1904) + * + * @param integer $baseDate Excel base date (1900 or 1904) + * @return boolean Success or failure + */ + public static function setExcelCalendar($baseDate) { + if (($baseDate == self::CALENDAR_WINDOWS_1900) || + ($baseDate == self::CALENDAR_MAC_1904)) { + self::$_excelBaseDate = $baseDate; + return TRUE; + } + return FALSE; + } // function setExcelCalendar() + + + /** + * Return the Excel calendar (Windows 1900 or Mac 1904) + * + * @return integer Excel base date (1900 or 1904) + */ + public static function getExcelCalendar() { + return self::$_excelBaseDate; + } // function getExcelCalendar() + + + /** + * Convert a date from Excel to PHP + * + * @param long $dateValue Excel date/time value + * @param boolean $adjustToTimezone Flag indicating whether $dateValue should be treated as + * a UST timestamp, or adjusted to UST + * @param string $timezone The timezone for finding the adjustment from UST + * @return long PHP serialized date/time + */ + public static function ExcelToPHP($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL) { + if (self::$_excelBaseDate == self::CALENDAR_WINDOWS_1900) { + $my_excelBaseDate = 25569; + // Adjust for the spurious 29-Feb-1900 (Day 60) + if ($dateValue < 60) { + --$my_excelBaseDate; + } + } else { + $my_excelBaseDate = 24107; + } + + // Perform conversion + if ($dateValue >= 1) { + $utcDays = $dateValue - $my_excelBaseDate; + $returnValue = round($utcDays * 86400); + if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) { + $returnValue = (integer) $returnValue; + } + } else { + $hours = round($dateValue * 24); + $mins = round($dateValue * 1440) - round($hours * 60); + $secs = round($dateValue * 86400) - round($hours * 3600) - round($mins * 60); + $returnValue = (integer) gmmktime($hours, $mins, $secs); + } + + $timezoneAdjustment = ($adjustToTimezone) ? + PHPExcel_Shared_TimeZone::getTimezoneAdjustment($timezone, $returnValue) : + 0; + + // Return + return $returnValue + $timezoneAdjustment; + } // function ExcelToPHP() + + + /** + * Convert a date from Excel to a PHP Date/Time object + * + * @param integer $dateValue Excel date/time value + * @return integer PHP date/time object + */ + public static function ExcelToPHPObject($dateValue = 0) { + $dateTime = self::ExcelToPHP($dateValue); + $days = floor($dateTime / 86400); + $time = round((($dateTime / 86400) - $days) * 86400); + $hours = round($time / 3600); + $minutes = round($time / 60) - ($hours * 60); + $seconds = round($time) - ($hours * 3600) - ($minutes * 60); + + $dateObj = date_create('1-Jan-1970+'.$days.' days'); + $dateObj->setTime($hours,$minutes,$seconds); + + return $dateObj; + } // function ExcelToPHPObject() + + + /** + * Convert a date from PHP to Excel + * + * @param mixed $dateValue PHP serialized date/time or date object + * @param boolean $adjustToTimezone Flag indicating whether $dateValue should be treated as + * a UST timestamp, or adjusted to UST + * @param string $timezone The timezone for finding the adjustment from UST + * @return mixed Excel date/time value + * or boolean FALSE on failure + */ + public static function PHPToExcel($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL) { + $saveTimeZone = date_default_timezone_get(); + date_default_timezone_set('UTC'); + $retValue = FALSE; + if ((is_object($dateValue)) && ($dateValue instanceof DateTime)) { + $retValue = self::FormattedPHPToExcel( $dateValue->format('Y'), $dateValue->format('m'), $dateValue->format('d'), + $dateValue->format('H'), $dateValue->format('i'), $dateValue->format('s') + ); + } elseif (is_numeric($dateValue)) { + $retValue = self::FormattedPHPToExcel( date('Y',$dateValue), date('m',$dateValue), date('d',$dateValue), + date('H',$dateValue), date('i',$dateValue), date('s',$dateValue) + ); + } + date_default_timezone_set($saveTimeZone); + + return $retValue; + } // function PHPToExcel() + + + /** + * FormattedPHPToExcel + * + * @param long $year + * @param long $month + * @param long $day + * @param long $hours + * @param long $minutes + * @param long $seconds + * @return long Excel date/time value + */ + public static function FormattedPHPToExcel($year, $month, $day, $hours=0, $minutes=0, $seconds=0) { + if (self::$_excelBaseDate == self::CALENDAR_WINDOWS_1900) { + // + // Fudge factor for the erroneous fact that the year 1900 is treated as a Leap Year in MS Excel + // This affects every date following 28th February 1900 + // + $excel1900isLeapYear = TRUE; + if (($year == 1900) && ($month <= 2)) { $excel1900isLeapYear = FALSE; } + $my_excelBaseDate = 2415020; + } else { + $my_excelBaseDate = 2416481; + $excel1900isLeapYear = FALSE; + } + + // Julian base date Adjustment + if ($month > 2) { + $month -= 3; + } else { + $month += 9; + --$year; + } + + // Calculate the Julian Date, then subtract the Excel base date (JD 2415020 = 31-Dec-1899 Giving Excel Date of 0) + $century = substr($year,0,2); + $decade = substr($year,2,2); + $excelDate = floor((146097 * $century) / 4) + floor((1461 * $decade) / 4) + floor((153 * $month + 2) / 5) + $day + 1721119 - $my_excelBaseDate + $excel1900isLeapYear; + + $excelTime = (($hours * 3600) + ($minutes * 60) + $seconds) / 86400; + + return (float) $excelDate + $excelTime; + } // function FormattedPHPToExcel() + + + /** + * Is a given cell a date/time? + * + * @param PHPExcel_Cell $pCell + * @return boolean + */ + public static function isDateTime(PHPExcel_Cell $pCell) { + return self::isDateTimeFormat( + $pCell->getWorksheet()->getStyle( + $pCell->getCoordinate() + )->getNumberFormat() + ); + } // function isDateTime() + + + /** + * Is a given number format a date/time? + * + * @param PHPExcel_Style_NumberFormat $pFormat + * @return boolean + */ + public static function isDateTimeFormat(PHPExcel_Style_NumberFormat $pFormat) { + return self::isDateTimeFormatCode($pFormat->getFormatCode()); + } // function isDateTimeFormat() + + + private static $possibleDateFormatCharacters = 'eymdHs'; + + /** + * Is a given number format code a date/time? + * + * @param string $pFormatCode + * @return boolean + */ + public static function isDateTimeFormatCode($pFormatCode = '') { + if (strtolower($pFormatCode) === strtolower(PHPExcel_Style_NumberFormat::FORMAT_GENERAL)) + // "General" contains an epoch letter 'e', so we trap for it explicitly here (case-insensitive check) + return FALSE; + if (preg_match('/[0#]E[+-]0/i', $pFormatCode)) + // Scientific format + return FALSE; + // Switch on formatcode + switch ($pFormatCode) { + // Explicitly defined date formats + case PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYMINUS: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_DMMINUS: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_MYMINUS: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME1: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME2: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME5: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME6: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME7: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME8: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX16: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX17: + case PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX22: + return TRUE; + } + + // Typically number, currency or accounting (or occasionally fraction) formats + if ((substr($pFormatCode,0,1) == '_') || (substr($pFormatCode,0,2) == '0 ')) { + return FALSE; + } + // Try checking for any of the date formatting characters that don't appear within square braces + if (preg_match('/(^|\])[^\[]*['.self::$possibleDateFormatCharacters.']/i',$pFormatCode)) { + // We might also have a format mask containing quoted strings... + // we don't want to test for any of our characters within the quoted blocks + if (strpos($pFormatCode,'"') !== FALSE) { + $segMatcher = FALSE; + foreach(explode('"',$pFormatCode) as $subVal) { + // Only test in alternate array entries (the non-quoted blocks) + if (($segMatcher = !$segMatcher) && + (preg_match('/(^|\])[^\[]*['.self::$possibleDateFormatCharacters.']/i',$subVal))) { + return TRUE; + } + } + return FALSE; + } + return TRUE; + } + + // No date... + return FALSE; + } // function isDateTimeFormatCode() + + + /** + * Convert a date/time string to Excel time + * + * @param string $dateValue Examples: '2009-12-31', '2009-12-31 15:59', '2009-12-31 15:59:10' + * @return float|FALSE Excel date/time serial value + */ + public static function stringToExcel($dateValue = '') { + if (strlen($dateValue) < 2) + return FALSE; + if (!preg_match('/^(\d{1,4}[ \.\/\-][A-Z]{3,9}([ \.\/\-]\d{1,4})?|[A-Z]{3,9}[ \.\/\-]\d{1,4}([ \.\/\-]\d{1,4})?|\d{1,4}[ \.\/\-]\d{1,4}([ \.\/\-]\d{1,4})?)( \d{1,2}:\d{1,2}(:\d{1,2})?)?$/iu', $dateValue)) + return FALSE; + + $dateValueNew = PHPExcel_Calculation_DateTime::DATEVALUE($dateValue); + + if ($dateValueNew === PHPExcel_Calculation_Functions::VALUE()) { + return FALSE; + } else { + if (strpos($dateValue, ':') !== FALSE) { + $timeValue = PHPExcel_Calculation_DateTime::TIMEVALUE($dateValue); + if ($timeValue === PHPExcel_Calculation_Functions::VALUE()) { + return FALSE; + } + $dateValueNew += $timeValue; + } + return $dateValueNew; + } + + + } + + public static function monthStringToNumber($month) { + $monthIndex = 1; + foreach(self::$_monthNames as $shortMonthName => $longMonthName) { + if (($month === $longMonthName) || ($month === $shortMonthName)) { + return $monthIndex; + } + ++$monthIndex; + } + return $month; + } + + public static function dayStringToNumber($day) { + $strippedDayValue = (str_replace(self::$_numberSuffixes,'',$day)); + if (is_numeric($strippedDayValue)) { + return $strippedDayValue; + } + return $day; + } + +} diff --git a/PHPExcel/Shared/Drawing.php b/PHPExcel/Shared/Drawing.php new file mode 100644 index 0000000..1d7af16 --- /dev/null +++ b/PHPExcel/Shared/Drawing.php @@ -0,0 +1,272 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_Drawing + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Drawing +{ + /** + * Convert pixels to EMU + * + * @param int $pValue Value in pixels + * @return int Value in EMU + */ + public static function pixelsToEMU($pValue = 0) { + return round($pValue * 9525); + } + + /** + * Convert EMU to pixels + * + * @param int $pValue Value in EMU + * @return int Value in pixels + */ + public static function EMUToPixels($pValue = 0) { + if ($pValue != 0) { + return round($pValue / 9525); + } else { + return 0; + } + } + + /** + * Convert pixels to column width. Exact algorithm not known. + * By inspection of a real Excel file using Calibri 11, one finds 1000px ~ 142.85546875 + * This gives a conversion factor of 7. Also, we assume that pixels and font size are proportional. + * + * @param int $pValue Value in pixels + * @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook + * @return int Value in cell dimension + */ + public static function pixelsToCellDimension($pValue = 0, PHPExcel_Style_Font $pDefaultFont) { + // Font name and size + $name = $pDefaultFont->getName(); + $size = $pDefaultFont->getSize(); + + if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) { + // Exact width can be determined + $colWidth = $pValue + * PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width'] + / PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px']; + } else { + // We don't have data for this particular font and size, use approximation by + // extrapolating from Calibri 11 + $colWidth = $pValue * 11 + * PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width'] + / PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px'] / $size; + } + + return $colWidth; + } + + /** + * Convert column width from (intrinsic) Excel units to pixels + * + * @param float $pValue Value in cell dimension + * @param PHPExcel_Style_Font $pDefaultFont Default font of the workbook + * @return int Value in pixels + */ + public static function cellDimensionToPixels($pValue = 0, PHPExcel_Style_Font $pDefaultFont) { + // Font name and size + $name = $pDefaultFont->getName(); + $size = $pDefaultFont->getSize(); + + if (isset(PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size])) { + // Exact width can be determined + $colWidth = $pValue + * PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['px'] + / PHPExcel_Shared_Font::$defaultColumnWidths[$name][$size]['width']; + + } else { + // We don't have data for this particular font and size, use approximation by + // extrapolating from Calibri 11 + $colWidth = $pValue * $size + * PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['px'] + / PHPExcel_Shared_Font::$defaultColumnWidths['Calibri'][11]['width'] / 11; + } + + // Round pixels to closest integer + $colWidth = (int) round($colWidth); + + return $colWidth; + } + + /** + * Convert pixels to points + * + * @param int $pValue Value in pixels + * @return int Value in points + */ + public static function pixelsToPoints($pValue = 0) { + return $pValue * 0.67777777; + } + + /** + * Convert points to pixels + * + * @param int $pValue Value in points + * @return int Value in pixels + */ + public static function pointsToPixels($pValue = 0) { + if ($pValue != 0) { + return (int) ceil($pValue * 1.333333333); + } else { + return 0; + } + } + + /** + * Convert degrees to angle + * + * @param int $pValue Degrees + * @return int Angle + */ + public static function degreesToAngle($pValue = 0) { + return (int)round($pValue * 60000); + } + + /** + * Convert angle to degrees + * + * @param int $pValue Angle + * @return int Degrees + */ + public static function angleToDegrees($pValue = 0) { + if ($pValue != 0) { + return round($pValue / 60000); + } else { + return 0; + } + } + + /** + * Create a new image from file. By alexander at alexauto dot nl + * + * @link http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214 + * @param string $filename Path to Windows DIB (BMP) image + * @return resource + */ + public static function imagecreatefrombmp($p_sFile) + { + // Load the image into a string + $file = fopen($p_sFile,"rb"); + $read = fread($file,10); + while(!feof($file)&&($read<>"")) + $read .= fread($file,1024); + + $temp = unpack("H*",$read); + $hex = $temp[1]; + $header = substr($hex,0,108); + + // Process the header + // Structure: http://www.fastgraph.com/help/bmp_header_format.html + if (substr($header,0,4)=="424d") + { + // Cut it in parts of 2 bytes + $header_parts = str_split($header,2); + + // Get the width 4 bytes + $width = hexdec($header_parts[19].$header_parts[18]); + + // Get the height 4 bytes + $height = hexdec($header_parts[23].$header_parts[22]); + + // Unset the header params + unset($header_parts); + } + + // Define starting X and Y + $x = 0; + $y = 1; + + // Create newimage + $image = imagecreatetruecolor($width,$height); + + // Grab the body from the image + $body = substr($hex,108); + + // Calculate if padding at the end-line is needed + // Divided by two to keep overview. + // 1 byte = 2 HEX-chars + $body_size = (strlen($body)/2); + $header_size = ($width*$height); + + // Use end-line padding? Only when needed + $usePadding = ($body_size>($header_size*3)+4); + + // Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption + // Calculate the next DWORD-position in the body + for ($i=0;$i<$body_size;$i+=3) + { + // Calculate line-ending and padding + if ($x>=$width) + { + // If padding needed, ignore image-padding + // Shift i to the ending of the current 32-bit-block + if ($usePadding) + $i += $width%4; + + // Reset horizontal position + $x = 0; + + // Raise the height-position (bottom-up) + $y++; + + // Reached the image-height? Break the for-loop + if ($y>$height) + break; + } + + // Calculation of the RGB-pixel (defined as BGR in image-data) + // Define $i_pos as absolute position in the body + $i_pos = $i*2; + $r = hexdec($body[$i_pos+4].$body[$i_pos+5]); + $g = hexdec($body[$i_pos+2].$body[$i_pos+3]); + $b = hexdec($body[$i_pos].$body[$i_pos+1]); + + // Calculate and draw the pixel + $color = imagecolorallocate($image,$r,$g,$b); + imagesetpixel($image,$x,$height-$y,$color); + + // Raise the horizontal position + $x++; + } + + // Unset the body / free the memory + unset($body); + + // Return image-object + return $image; + } + +} diff --git a/PHPExcel/Shared/Escher.php b/PHPExcel/Shared/Escher.php new file mode 100644 index 0000000..983cbda --- /dev/null +++ b/PHPExcel/Shared/Escher.php @@ -0,0 +1,91 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher +{ + /** + * Drawing Group Container + * + * @var PHPExcel_Shared_Escher_DggContainer + */ + private $_dggContainer; + + /** + * Drawing Container + * + * @var PHPExcel_Shared_Escher_DgContainer + */ + private $_dgContainer; + + /** + * Get Drawing Group Container + * + * @return PHPExcel_Shared_Escher_DgContainer + */ + public function getDggContainer() + { + return $this->_dggContainer; + } + + /** + * Set Drawing Group Container + * + * @param PHPExcel_Shared_Escher_DggContainer $dggContainer + */ + public function setDggContainer($dggContainer) + { + return $this->_dggContainer = $dggContainer; + } + + /** + * Get Drawing Container + * + * @return PHPExcel_Shared_Escher_DgContainer + */ + public function getDgContainer() + { + return $this->_dgContainer; + } + + /** + * Set Drawing Container + * + * @param PHPExcel_Shared_Escher_DgContainer $dgContainer + */ + public function setDgContainer($dgContainer) + { + return $this->_dgContainer = $dgContainer; + } + +} diff --git a/PHPExcel/Shared/Escher/DgContainer.php b/PHPExcel/Shared/Escher/DgContainer.php new file mode 100644 index 0000000..3ec564c --- /dev/null +++ b/PHPExcel/Shared/Escher/DgContainer.php @@ -0,0 +1,83 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher_DgContainer + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher_DgContainer +{ + /** + * Drawing index, 1-based. + * + * @var int + */ + private $_dgId; + + /** + * Last shape index in this drawing + * + * @var int + */ + private $_lastSpId; + + private $_spgrContainer = null; + + public function getDgId() + { + return $this->_dgId; + } + + public function setDgId($value) + { + $this->_dgId = $value; + } + + public function getLastSpId() + { + return $this->_lastSpId; + } + + public function setLastSpId($value) + { + $this->_lastSpId = $value; + } + + public function getSpgrContainer() + { + return $this->_spgrContainer; + } + + public function setSpgrContainer($spgrContainer) + { + return $this->_spgrContainer = $spgrContainer; + } + +} diff --git a/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php b/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php new file mode 100644 index 0000000..651eaf0 --- /dev/null +++ b/PHPExcel/Shared/Escher/DgContainer/SpgrContainer.php @@ -0,0 +1,109 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher_DgContainer_SpgrContainer + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher_DgContainer_SpgrContainer +{ + /** + * Parent Shape Group Container + * + * @var PHPExcel_Shared_Escher_DgContainer_SpgrContainer + */ + private $_parent; + + /** + * Shape Container collection + * + * @var array + */ + private $_children = array(); + + /** + * Set parent Shape Group Container + * + * @param PHPExcel_Shared_Escher_DgContainer_SpgrContainer $parent + */ + public function setParent($parent) + { + $this->_parent = $parent; + } + + /** + * Get the parent Shape Group Container if any + * + * @return PHPExcel_Shared_Escher_DgContainer_SpgrContainer|null + */ + public function getParent() + { + return $this->_parent; + } + + /** + * Add a child. This will be either spgrContainer or spContainer + * + * @param mixed $child + */ + public function addChild($child) + { + $this->_children[] = $child; + $child->setParent($this); + } + + /** + * Get collection of Shape Containers + */ + public function getChildren() + { + return $this->_children; + } + + /** + * Recursively get all spContainers within this spgrContainer + * + * @return PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer[] + */ + public function getAllSpContainers() + { + $allSpContainers = array(); + + foreach ($this->_children as $child) { + if ($child instanceof PHPExcel_Shared_Escher_DgContainer_SpgrContainer) { + $allSpContainers = array_merge($allSpContainers, $child->getAllSpContainers()); + } else { + $allSpContainers[] = $child; + } + } + + return $allSpContainers; + } +} diff --git a/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php b/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php new file mode 100644 index 0000000..dde1154 --- /dev/null +++ b/PHPExcel/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php @@ -0,0 +1,395 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer +{ + /** + * Parent Shape Group Container + * + * @var PHPExcel_Shared_Escher_DgContainer_SpgrContainer + */ + private $_parent; + + /** + * Is this a group shape? + * + * @var boolean + */ + private $_spgr = false; + + /** + * Shape type + * + * @var int + */ + private $_spType; + + /** + * Shape flag + * + * @var int + */ + private $_spFlag; + + /** + * Shape index (usually group shape has index 0, and the rest: 1,2,3...) + * + * @var boolean + */ + private $_spId; + + /** + * Array of options + * + * @var array + */ + private $_OPT; + + /** + * Cell coordinates of upper-left corner of shape, e.g. 'A1' + * + * @var string + */ + private $_startCoordinates; + + /** + * Horizontal offset of upper-left corner of shape measured in 1/1024 of column width + * + * @var int + */ + private $_startOffsetX; + + /** + * Vertical offset of upper-left corner of shape measured in 1/256 of row height + * + * @var int + */ + private $_startOffsetY; + + /** + * Cell coordinates of bottom-right corner of shape, e.g. 'B2' + * + * @var string + */ + private $_endCoordinates; + + /** + * Horizontal offset of bottom-right corner of shape measured in 1/1024 of column width + * + * @var int + */ + private $_endOffsetX; + + /** + * Vertical offset of bottom-right corner of shape measured in 1/256 of row height + * + * @var int + */ + private $_endOffsetY; + + /** + * Set parent Shape Group Container + * + * @param PHPExcel_Shared_Escher_DgContainer_SpgrContainer $parent + */ + public function setParent($parent) + { + $this->_parent = $parent; + } + + /** + * Get the parent Shape Group Container + * + * @return PHPExcel_Shared_Escher_DgContainer_SpgrContainer + */ + public function getParent() + { + return $this->_parent; + } + + /** + * Set whether this is a group shape + * + * @param boolean $value + */ + public function setSpgr($value = false) + { + $this->_spgr = $value; + } + + /** + * Get whether this is a group shape + * + * @return boolean + */ + public function getSpgr() + { + return $this->_spgr; + } + + /** + * Set the shape type + * + * @param int $value + */ + public function setSpType($value) + { + $this->_spType = $value; + } + + /** + * Get the shape type + * + * @return int + */ + public function getSpType() + { + return $this->_spType; + } + + /** + * Set the shape flag + * + * @param int $value + */ + public function setSpFlag($value) + { + $this->_spFlag = $value; + } + + /** + * Get the shape flag + * + * @return int + */ + public function getSpFlag() + { + return $this->_spFlag; + } + + /** + * Set the shape index + * + * @param int $value + */ + public function setSpId($value) + { + $this->_spId = $value; + } + + /** + * Get the shape index + * + * @return int + */ + public function getSpId() + { + return $this->_spId; + } + + /** + * Set an option for the Shape Group Container + * + * @param int $property The number specifies the option + * @param mixed $value + */ + public function setOPT($property, $value) + { + $this->_OPT[$property] = $value; + } + + /** + * Get an option for the Shape Group Container + * + * @param int $property The number specifies the option + * @return mixed + */ + public function getOPT($property) + { + if (isset($this->_OPT[$property])) { + return $this->_OPT[$property]; + } + return null; + } + + /** + * Get the collection of options + * + * @return array + */ + public function getOPTCollection() + { + return $this->_OPT; + } + + /** + * Set cell coordinates of upper-left corner of shape + * + * @param string $value + */ + public function setStartCoordinates($value = 'A1') + { + $this->_startCoordinates = $value; + } + + /** + * Get cell coordinates of upper-left corner of shape + * + * @return string + */ + public function getStartCoordinates() + { + return $this->_startCoordinates; + } + + /** + * Set offset in x-direction of upper-left corner of shape measured in 1/1024 of column width + * + * @param int $startOffsetX + */ + public function setStartOffsetX($startOffsetX = 0) + { + $this->_startOffsetX = $startOffsetX; + } + + /** + * Get offset in x-direction of upper-left corner of shape measured in 1/1024 of column width + * + * @return int + */ + public function getStartOffsetX() + { + return $this->_startOffsetX; + } + + /** + * Set offset in y-direction of upper-left corner of shape measured in 1/256 of row height + * + * @param int $startOffsetY + */ + public function setStartOffsetY($startOffsetY = 0) + { + $this->_startOffsetY = $startOffsetY; + } + + /** + * Get offset in y-direction of upper-left corner of shape measured in 1/256 of row height + * + * @return int + */ + public function getStartOffsetY() + { + return $this->_startOffsetY; + } + + /** + * Set cell coordinates of bottom-right corner of shape + * + * @param string $value + */ + public function setEndCoordinates($value = 'A1') + { + $this->_endCoordinates = $value; + } + + /** + * Get cell coordinates of bottom-right corner of shape + * + * @return string + */ + public function getEndCoordinates() + { + return $this->_endCoordinates; + } + + /** + * Set offset in x-direction of bottom-right corner of shape measured in 1/1024 of column width + * + * @param int $startOffsetX + */ + public function setEndOffsetX($endOffsetX = 0) + { + $this->_endOffsetX = $endOffsetX; + } + + /** + * Get offset in x-direction of bottom-right corner of shape measured in 1/1024 of column width + * + * @return int + */ + public function getEndOffsetX() + { + return $this->_endOffsetX; + } + + /** + * Set offset in y-direction of bottom-right corner of shape measured in 1/256 of row height + * + * @param int $endOffsetY + */ + public function setEndOffsetY($endOffsetY = 0) + { + $this->_endOffsetY = $endOffsetY; + } + + /** + * Get offset in y-direction of bottom-right corner of shape measured in 1/256 of row height + * + * @return int + */ + public function getEndOffsetY() + { + return $this->_endOffsetY; + } + + /** + * Get the nesting level of this spContainer. This is the number of spgrContainers between this spContainer and + * the dgContainer. A value of 1 = immediately within first spgrContainer + * Higher nesting level occurs if and only if spContainer is part of a shape group + * + * @return int Nesting level + */ + public function getNestingLevel() + { + $nestingLevel = 0; + + $parent = $this->getParent(); + while ($parent instanceof PHPExcel_Shared_Escher_DgContainer_SpgrContainer) { + ++$nestingLevel; + $parent = $parent->getParent(); + } + + return $nestingLevel; + } +} diff --git a/PHPExcel/Shared/Escher/DggContainer.php b/PHPExcel/Shared/Escher/DggContainer.php new file mode 100644 index 0000000..bf5f61f --- /dev/null +++ b/PHPExcel/Shared/Escher/DggContainer.php @@ -0,0 +1,203 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher_DggContainer + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher_DggContainer +{ + /** + * Maximum shape index of all shapes in all drawings increased by one + * + * @var int + */ + private $_spIdMax; + + /** + * Total number of drawings saved + * + * @var int + */ + private $_cDgSaved; + + /** + * Total number of shapes saved (including group shapes) + * + * @var int + */ + private $_cSpSaved; + + /** + * BLIP Store Container + * + * @var PHPExcel_Shared_Escher_DggContainer_BstoreContainer + */ + private $_bstoreContainer; + + /** + * Array of options for the drawing group + * + * @var array + */ + private $_OPT = array(); + + /** + * Array of identifier clusters containg information about the maximum shape identifiers + * + * @var array + */ + private $_IDCLs = array(); + + /** + * Get maximum shape index of all shapes in all drawings (plus one) + * + * @return int + */ + public function getSpIdMax() + { + return $this->_spIdMax; + } + + /** + * Set maximum shape index of all shapes in all drawings (plus one) + * + * @param int + */ + public function setSpIdMax($value) + { + $this->_spIdMax = $value; + } + + /** + * Get total number of drawings saved + * + * @return int + */ + public function getCDgSaved() + { + return $this->_cDgSaved; + } + + /** + * Set total number of drawings saved + * + * @param int + */ + public function setCDgSaved($value) + { + $this->_cDgSaved = $value; + } + + /** + * Get total number of shapes saved (including group shapes) + * + * @return int + */ + public function getCSpSaved() + { + return $this->_cSpSaved; + } + + /** + * Set total number of shapes saved (including group shapes) + * + * @param int + */ + public function setCSpSaved($value) + { + $this->_cSpSaved = $value; + } + + /** + * Get BLIP Store Container + * + * @return PHPExcel_Shared_Escher_DggContainer_BstoreContainer + */ + public function getBstoreContainer() + { + return $this->_bstoreContainer; + } + + /** + * Set BLIP Store Container + * + * @param PHPExcel_Shared_Escher_DggContainer_BstoreContainer $bstoreContainer + */ + public function setBstoreContainer($bstoreContainer) + { + $this->_bstoreContainer = $bstoreContainer; + } + + /** + * Set an option for the drawing group + * + * @param int $property The number specifies the option + * @param mixed $value + */ + public function setOPT($property, $value) + { + $this->_OPT[$property] = $value; + } + + /** + * Get an option for the drawing group + * + * @param int $property The number specifies the option + * @return mixed + */ + public function getOPT($property) + { + if (isset($this->_OPT[$property])) { + return $this->_OPT[$property]; + } + return null; + } + + /** + * Get identifier clusters + * + * @return array + */ + public function getIDCLs() + { + return $this->_IDCLs; + } + + /** + * Set identifier clusters. array(<drawingId> => <max shape id>, ...) + * + * @param array $pValue + */ + public function setIDCLs($pValue) + { + $this->_IDCLs = $pValue; + } +} diff --git a/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php b/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php new file mode 100644 index 0000000..d16bfc7 --- /dev/null +++ b/PHPExcel/Shared/Escher/DggContainer/BstoreContainer.php @@ -0,0 +1,65 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher_DggContainer_BstoreContainer + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher_DggContainer_BstoreContainer +{ + /** + * BLIP Store Entries. Each of them holds one BLIP (Big Large Image or Picture) + * + * @var array + */ + private $_BSECollection = array(); + + /** + * Add a BLIP Store Entry + * + * @param PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE $BSE + */ + public function addBSE($BSE) + { + $this->_BSECollection[] = $BSE; + $BSE->setParent($this); + } + + /** + * Get the collection of BLIP Store Entries + * + * @return PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE[] + */ + public function getBSECollection() + { + return $this->_BSECollection; + } + +} diff --git a/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php b/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php new file mode 100644 index 0000000..ea3c52a --- /dev/null +++ b/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE.php @@ -0,0 +1,120 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE +{ + const BLIPTYPE_ERROR = 0x00; + const BLIPTYPE_UNKNOWN = 0x01; + const BLIPTYPE_EMF = 0x02; + const BLIPTYPE_WMF = 0x03; + const BLIPTYPE_PICT = 0x04; + const BLIPTYPE_JPEG = 0x05; + const BLIPTYPE_PNG = 0x06; + const BLIPTYPE_DIB = 0x07; + const BLIPTYPE_TIFF = 0x11; + const BLIPTYPE_CMYKJPEG = 0x12; + + /** + * The parent BLIP Store Entry Container + * + * @var PHPExcel_Shared_Escher_DggContainer_BstoreContainer + */ + private $_parent; + + /** + * The BLIP (Big Large Image or Picture) + * + * @var PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip + */ + private $_blip; + + /** + * The BLIP type + * + * @var int + */ + private $_blipType; + + /** + * Set parent BLIP Store Entry Container + * + * @param PHPExcel_Shared_Escher_DggContainer_BstoreContainer $parent + */ + public function setParent($parent) + { + $this->_parent = $parent; + } + + /** + * Get the BLIP + * + * @return PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip + */ + public function getBlip() + { + return $this->_blip; + } + + /** + * Set the BLIP + * + * @param PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip $blip + */ + public function setBlip($blip) + { + $this->_blip = $blip; + $blip->setParent($this); + } + + /** + * Get the BLIP type + * + * @return int + */ + public function getBlipType() + { + return $this->_blipType; + } + + /** + * Set the BLIP type + * + * @param int + */ + public function setBlipType($blipType) + { + $this->_blipType = $blipType; + } + +} diff --git a/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php b/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php new file mode 100644 index 0000000..802ce6d --- /dev/null +++ b/PHPExcel/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php @@ -0,0 +1,91 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip + * + * @category PHPExcel + * @package PHPExcel_Shared_Escher + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip +{ + /** + * The parent BSE + * + * @var PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE + */ + private $_parent; + + /** + * Raw image data + * + * @var string + */ + private $_data; + + /** + * Get the raw image data + * + * @return string + */ + public function getData() + { + return $this->_data; + } + + /** + * Set the raw image data + * + * @param string + */ + public function setData($data) + { + $this->_data = $data; + } + + /** + * Set parent BSE + * + * @param PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE $parent + */ + public function setParent($parent) + { + $this->_parent = $parent; + } + + /** + * Get parent BSE + * + * @return PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE $parent + */ + public function getParent() + { + return $this->_parent; + } + +} diff --git a/PHPExcel/Shared/Excel5.php b/PHPExcel/Shared/Excel5.php new file mode 100644 index 0000000..927dace --- /dev/null +++ b/PHPExcel/Shared/Excel5.php @@ -0,0 +1,317 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_Excel5 + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Excel5 +{ + /** + * Get the width of a column in pixels. We use the relationship y = ceil(7x) where + * x is the width in intrinsic Excel units (measuring width in number of normal characters) + * This holds for Arial 10 + * + * @param PHPExcel_Worksheet $sheet The sheet + * @param string $col The column + * @return integer The width in pixels + */ + public static function sizeCol($sheet, $col = 'A') + { + // default font of the workbook + $font = $sheet->getParent()->getDefaultStyle()->getFont(); + + $columnDimensions = $sheet->getColumnDimensions(); + + // first find the true column width in pixels (uncollapsed and unhidden) + if ( isset($columnDimensions[$col]) and $columnDimensions[$col]->getWidth() != -1 ) { + + // then we have column dimension with explicit width + $columnDimension = $columnDimensions[$col]; + $width = $columnDimension->getWidth(); + $pixelWidth = PHPExcel_Shared_Drawing::cellDimensionToPixels($width, $font); + + } else if ($sheet->getDefaultColumnDimension()->getWidth() != -1) { + + // then we have default column dimension with explicit width + $defaultColumnDimension = $sheet->getDefaultColumnDimension(); + $width = $defaultColumnDimension->getWidth(); + $pixelWidth = PHPExcel_Shared_Drawing::cellDimensionToPixels($width, $font); + + } else { + + // we don't even have any default column dimension. Width depends on default font + $pixelWidth = PHPExcel_Shared_Font::getDefaultColumnWidthByFont($font, true); + } + + // now find the effective column width in pixels + if (isset($columnDimensions[$col]) and !$columnDimensions[$col]->getVisible()) { + $effectivePixelWidth = 0; + } else { + $effectivePixelWidth = $pixelWidth; + } + + return $effectivePixelWidth; + } + + /** + * Convert the height of a cell from user's units to pixels. By interpolation + * the relationship is: y = 4/3x. If the height hasn't been set by the user we + * use the default value. If the row is hidden we use a value of zero. + * + * @param PHPExcel_Worksheet $sheet The sheet + * @param integer $row The row index (1-based) + * @return integer The width in pixels + */ + public static function sizeRow($sheet, $row = 1) + { + // default font of the workbook + $font = $sheet->getParent()->getDefaultStyle()->getFont(); + + $rowDimensions = $sheet->getRowDimensions(); + + // first find the true row height in pixels (uncollapsed and unhidden) + if ( isset($rowDimensions[$row]) and $rowDimensions[$row]->getRowHeight() != -1) { + + // then we have a row dimension + $rowDimension = $rowDimensions[$row]; + $rowHeight = $rowDimension->getRowHeight(); + $pixelRowHeight = (int) ceil(4 * $rowHeight / 3); // here we assume Arial 10 + + } else if ($sheet->getDefaultRowDimension()->getRowHeight() != -1) { + + // then we have a default row dimension with explicit height + $defaultRowDimension = $sheet->getDefaultRowDimension(); + $rowHeight = $defaultRowDimension->getRowHeight(); + $pixelRowHeight = PHPExcel_Shared_Drawing::pointsToPixels($rowHeight); + + } else { + + // we don't even have any default row dimension. Height depends on default font + $pointRowHeight = PHPExcel_Shared_Font::getDefaultRowHeightByFont($font); + $pixelRowHeight = PHPExcel_Shared_Font::fontSizeToPixels($pointRowHeight); + + } + + // now find the effective row height in pixels + if ( isset($rowDimensions[$row]) and !$rowDimensions[$row]->getVisible() ) { + $effectivePixelRowHeight = 0; + } else { + $effectivePixelRowHeight = $pixelRowHeight; + } + + return $effectivePixelRowHeight; + } + + /** + * Get the horizontal distance in pixels between two anchors + * The distanceX is found as sum of all the spanning columns widths minus correction for the two offsets + * + * @param PHPExcel_Worksheet $sheet + * @param string $startColumn + * @param integer $startOffsetX Offset within start cell measured in 1/1024 of the cell width + * @param string $endColumn + * @param integer $endOffsetX Offset within end cell measured in 1/1024 of the cell width + * @return integer Horizontal measured in pixels + */ + public static function getDistanceX(PHPExcel_Worksheet $sheet, $startColumn = 'A', $startOffsetX = 0, $endColumn = 'A', $endOffsetX = 0) + { + $distanceX = 0; + + // add the widths of the spanning columns + $startColumnIndex = PHPExcel_Cell::columnIndexFromString($startColumn) - 1; // 1-based + $endColumnIndex = PHPExcel_Cell::columnIndexFromString($endColumn) - 1; // 1-based + for ($i = $startColumnIndex; $i <= $endColumnIndex; ++$i) { + $distanceX += self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($i)); + } + + // correct for offsetX in startcell + $distanceX -= (int) floor(self::sizeCol($sheet, $startColumn) * $startOffsetX / 1024); + + // correct for offsetX in endcell + $distanceX -= (int) floor(self::sizeCol($sheet, $endColumn) * (1 - $endOffsetX / 1024)); + + return $distanceX; + } + + /** + * Get the vertical distance in pixels between two anchors + * The distanceY is found as sum of all the spanning rows minus two offsets + * + * @param PHPExcel_Worksheet $sheet + * @param integer $startRow (1-based) + * @param integer $startOffsetY Offset within start cell measured in 1/256 of the cell height + * @param integer $endRow (1-based) + * @param integer $endOffsetY Offset within end cell measured in 1/256 of the cell height + * @return integer Vertical distance measured in pixels + */ + public static function getDistanceY(PHPExcel_Worksheet $sheet, $startRow = 1, $startOffsetY = 0, $endRow = 1, $endOffsetY = 0) + { + $distanceY = 0; + + // add the widths of the spanning rows + for ($row = $startRow; $row <= $endRow; ++$row) { + $distanceY += self::sizeRow($sheet, $row); + } + + // correct for offsetX in startcell + $distanceY -= (int) floor(self::sizeRow($sheet, $startRow) * $startOffsetY / 256); + + // correct for offsetX in endcell + $distanceY -= (int) floor(self::sizeRow($sheet, $endRow) * (1 - $endOffsetY / 256)); + + return $distanceY; + } + + /** + * Convert 1-cell anchor coordinates to 2-cell anchor coordinates + * This function is ported from PEAR Spreadsheet_Writer_Excel with small modifications + * + * Calculate the vertices that define the position of the image as required by + * the OBJ record. + * + * +------------+------------+ + * | A | B | + * +-----+------------+------------+ + * | |(x1,y1) | | + * | 1 |(A1)._______|______ | + * | | | | | + * | | | | | + * +-----+----| BITMAP |-----+ + * | | | | | + * | 2 | |______________. | + * | | | (B2)| + * | | | (x2,y2)| + * +---- +------------+------------+ + * + * Example of a bitmap that covers some of the area from cell A1 to cell B2. + * + * Based on the width and height of the bitmap we need to calculate 8 vars: + * $col_start, $row_start, $col_end, $row_end, $x1, $y1, $x2, $y2. + * The width and height of the cells are also variable and have to be taken into + * account. + * The values of $col_start and $row_start are passed in from the calling + * function. The values of $col_end and $row_end are calculated by subtracting + * the width and height of the bitmap from the width and height of the + * underlying cells. + * The vertices are expressed as a percentage of the underlying cell width as + * follows (rhs values are in pixels): + * + * x1 = X / W *1024 + * y1 = Y / H *256 + * x2 = (X-1) / W *1024 + * y2 = (Y-1) / H *256 + * + * Where: X is distance from the left side of the underlying cell + * Y is distance from the top of the underlying cell + * W is the width of the cell + * H is the height of the cell + * + * @param PHPExcel_Worksheet $sheet + * @param string $coordinates E.g. 'A1' + * @param integer $offsetX Horizontal offset in pixels + * @param integer $offsetY Vertical offset in pixels + * @param integer $width Width in pixels + * @param integer $height Height in pixels + * @return array + */ + public static function oneAnchor2twoAnchor($sheet, $coordinates, $offsetX, $offsetY, $width, $height) + { + list($column, $row) = PHPExcel_Cell::coordinateFromString($coordinates); + $col_start = PHPExcel_Cell::columnIndexFromString($column) - 1; + $row_start = $row - 1; + + $x1 = $offsetX; + $y1 = $offsetY; + + // Initialise end cell to the same as the start cell + $col_end = $col_start; // Col containing lower right corner of object + $row_end = $row_start; // Row containing bottom right corner of object + + // Zero the specified offset if greater than the cell dimensions + if ($x1 >= self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($col_start))) { + $x1 = 0; + } + if ($y1 >= self::sizeRow($sheet, $row_start + 1)) { + $y1 = 0; + } + + $width = $width + $x1 -1; + $height = $height + $y1 -1; + + // Subtract the underlying cell widths to find the end cell of the image + while ($width >= self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($col_end))) { + $width -= self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($col_end)); + ++$col_end; + } + + // Subtract the underlying cell heights to find the end cell of the image + while ($height >= self::sizeRow($sheet, $row_end + 1)) { + $height -= self::sizeRow($sheet, $row_end + 1); + ++$row_end; + } + + // Bitmap isn't allowed to start or finish in a hidden cell, i.e. a cell + // with zero height or width. + if (self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($col_start)) == 0) { + return; + } + if (self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($col_end)) == 0) { + return; + } + if (self::sizeRow($sheet, $row_start + 1) == 0) { + return; + } + if (self::sizeRow($sheet, $row_end + 1) == 0) { + return; + } + + // Convert the pixel values to the percentage value expected by Excel + $x1 = $x1 / self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($col_start)) * 1024; + $y1 = $y1 / self::sizeRow($sheet, $row_start + 1) * 256; + $x2 = ($width + 1) / self::sizeCol($sheet, PHPExcel_Cell::stringFromColumnIndex($col_end)) * 1024; // Distance to right side of object + $y2 = ($height + 1) / self::sizeRow($sheet, $row_end + 1) * 256; // Distance to bottom of object + + $startCoordinates = PHPExcel_Cell::stringFromColumnIndex($col_start) . ($row_start + 1); + $endCoordinates = PHPExcel_Cell::stringFromColumnIndex($col_end) . ($row_end + 1); + + $twoAnchor = array( + 'startCoordinates' => $startCoordinates, + 'startOffsetX' => $x1, + 'startOffsetY' => $y1, + 'endCoordinates' => $endCoordinates, + 'endOffsetX' => $x2, + 'endOffsetY' => $y2, + ); + + return $twoAnchor; + } + +} diff --git a/PHPExcel/Shared/File.php b/PHPExcel/Shared/File.php new file mode 100644 index 0000000..70756a0 --- /dev/null +++ b/PHPExcel/Shared/File.php @@ -0,0 +1,178 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_File + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_File +{ + /* + * Use Temp or File Upload Temp for temporary files + * + * @protected + * @var boolean + */ + protected static $_useUploadTempDirectory = FALSE; + + + /** + * Set the flag indicating whether the File Upload Temp directory should be used for temporary files + * + * @param boolean $useUploadTempDir Use File Upload Temporary directory (true or false) + */ + public static function setUseUploadTempDirectory($useUploadTempDir = FALSE) { + self::$_useUploadTempDirectory = (boolean) $useUploadTempDir; + } // function setUseUploadTempDirectory() + + + /** + * Get the flag indicating whether the File Upload Temp directory should be used for temporary files + * + * @return boolean Use File Upload Temporary directory (true or false) + */ + public static function getUseUploadTempDirectory() { + return self::$_useUploadTempDirectory; + } // function getUseUploadTempDirectory() + + + /** + * Verify if a file exists + * + * @param string $pFilename Filename + * @return bool + */ + public static function file_exists($pFilename) { + // Sick construction, but it seems that + // file_exists returns strange values when + // doing the original file_exists on ZIP archives... + if ( strtolower(substr($pFilename, 0, 3)) == 'zip' ) { + // Open ZIP file and verify if the file exists + $zipFile = substr($pFilename, 6, strpos($pFilename, '#') - 6); + $archiveFile = substr($pFilename, strpos($pFilename, '#') + 1); + + $zip = new ZipArchive(); + if ($zip->open($zipFile) === true) { + $returnValue = ($zip->getFromName($archiveFile) !== false); + $zip->close(); + return $returnValue; + } else { + return false; + } + } else { + // Regular file_exists + return file_exists($pFilename); + } + } + + /** + * Returns canonicalized absolute pathname, also for ZIP archives + * + * @param string $pFilename + * @return string + */ + public static function realpath($pFilename) { + // Returnvalue + $returnValue = ''; + + // Try using realpath() + if (file_exists($pFilename)) { + $returnValue = realpath($pFilename); + } + + // Found something? + if ($returnValue == '' || ($returnValue === NULL)) { + $pathArray = explode('/' , $pFilename); + while(in_array('..', $pathArray) && $pathArray[0] != '..') { + for ($i = 0; $i < count($pathArray); ++$i) { + if ($pathArray[$i] == '..' && $i > 0) { + unset($pathArray[$i]); + unset($pathArray[$i - 1]); + break; + } + } + } + $returnValue = implode('/', $pathArray); + } + + // Return + return $returnValue; + } + + /** + * Get the systems temporary directory. + * + * @return string + */ + public static function sys_get_temp_dir() + { + if (self::$_useUploadTempDirectory) { + // use upload-directory when defined to allow running on environments having very restricted + // open_basedir configs + if (ini_get('upload_tmp_dir') !== FALSE) { + if ($temp = ini_get('upload_tmp_dir')) { + if (file_exists($temp)) + return realpath($temp); + } + } + } + + // sys_get_temp_dir is only available since PHP 5.2.1 + // http://php.net/manual/en/function.sys-get-temp-dir.php#94119 + if ( !function_exists('sys_get_temp_dir')) { + if ($temp = getenv('TMP') ) { + if ((!empty($temp)) && (file_exists($temp))) { return realpath($temp); } + } + if ($temp = getenv('TEMP') ) { + if ((!empty($temp)) && (file_exists($temp))) { return realpath($temp); } + } + if ($temp = getenv('TMPDIR') ) { + if ((!empty($temp)) && (file_exists($temp))) { return realpath($temp); } + } + + // trick for creating a file in system's temporary dir + // without knowing the path of the system's temporary dir + $temp = tempnam(__FILE__, ''); + if (file_exists($temp)) { + unlink($temp); + return realpath(dirname($temp)); + } + + return null; + } + + // use ordinary built-in PHP function + // There should be no problem with the 5.2.4 Suhosin realpath() bug, because this line should only + // be called if we're running 5.2.1 or earlier + return realpath(sys_get_temp_dir()); + } + +} diff --git a/PHPExcel/Shared/Font.php b/PHPExcel/Shared/Font.php new file mode 100644 index 0000000..203d4ec --- /dev/null +++ b/PHPExcel/Shared/Font.php @@ -0,0 +1,775 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_Font + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_Font +{ + /* Methods for resolving autosize value */ + const AUTOSIZE_METHOD_APPROX = 'approx'; + const AUTOSIZE_METHOD_EXACT = 'exact'; + + private static $_autoSizeMethods = array( + self::AUTOSIZE_METHOD_APPROX, + self::AUTOSIZE_METHOD_EXACT, + ); + + /** Character set codes used by BIFF5-8 in Font records */ + const CHARSET_ANSI_LATIN = 0x00; + const CHARSET_SYSTEM_DEFAULT = 0x01; + const CHARSET_SYMBOL = 0x02; + const CHARSET_APPLE_ROMAN = 0x4D; + const CHARSET_ANSI_JAPANESE_SHIFTJIS = 0x80; + const CHARSET_ANSI_KOREAN_HANGUL = 0x81; + const CHARSET_ANSI_KOREAN_JOHAB = 0x82; + const CHARSET_ANSI_CHINESE_SIMIPLIFIED = 0x86; // gb2312 + const CHARSET_ANSI_CHINESE_TRADITIONAL = 0x88; // big5 + const CHARSET_ANSI_GREEK = 0xA1; + const CHARSET_ANSI_TURKISH = 0xA2; + const CHARSET_ANSI_VIETNAMESE = 0xA3; + const CHARSET_ANSI_HEBREW = 0xB1; + const CHARSET_ANSI_ARABIC = 0xB2; + const CHARSET_ANSI_BALTIC = 0xBA; + const CHARSET_ANSI_CYRILLIC = 0xCC; + const CHARSET_ANSI_THAI = 0xDD; + const CHARSET_ANSI_LATIN_II = 0xEE; + const CHARSET_OEM_LATIN_I = 0xFF; + + // XXX: Constants created! + /** Font filenames */ + const ARIAL = 'arial.ttf'; + const ARIAL_BOLD = 'arialbd.ttf'; + const ARIAL_ITALIC = 'ariali.ttf'; + const ARIAL_BOLD_ITALIC = 'arialbi.ttf'; + + const CALIBRI = 'CALIBRI.TTF'; + const CALIBRI_BOLD = 'CALIBRIB.TTF'; + const CALIBRI_ITALIC = 'CALIBRII.TTF'; + const CALIBRI_BOLD_ITALIC = 'CALIBRIZ.TTF'; + + const COMIC_SANS_MS = 'comic.ttf'; + const COMIC_SANS_MS_BOLD = 'comicbd.ttf'; + + const COURIER_NEW = 'cour.ttf'; + const COURIER_NEW_BOLD = 'courbd.ttf'; + const COURIER_NEW_ITALIC = 'couri.ttf'; + const COURIER_NEW_BOLD_ITALIC = 'courbi.ttf'; + + const GEORGIA = 'georgia.ttf'; + const GEORGIA_BOLD = 'georgiab.ttf'; + const GEORGIA_ITALIC = 'georgiai.ttf'; + const GEORGIA_BOLD_ITALIC = 'georgiaz.ttf'; + + const IMPACT = 'impact.ttf'; + + const LIBERATION_SANS = 'LiberationSans-Regular.ttf'; + const LIBERATION_SANS_BOLD = 'LiberationSans-Bold.ttf'; + const LIBERATION_SANS_ITALIC = 'LiberationSans-Italic.ttf'; + const LIBERATION_SANS_BOLD_ITALIC = 'LiberationSans-BoldItalic.ttf'; + + const LUCIDA_CONSOLE = 'lucon.ttf'; + const LUCIDA_SANS_UNICODE = 'l_10646.ttf'; + + const MICROSOFT_SANS_SERIF = 'micross.ttf'; + + const PALATINO_LINOTYPE = 'pala.ttf'; + const PALATINO_LINOTYPE_BOLD = 'palab.ttf'; + const PALATINO_LINOTYPE_ITALIC = 'palai.ttf'; + const PALATINO_LINOTYPE_BOLD_ITALIC = 'palabi.ttf'; + + const SYMBOL = 'symbol.ttf'; + + const TAHOMA = 'tahoma.ttf'; + const TAHOMA_BOLD = 'tahomabd.ttf'; + + const TIMES_NEW_ROMAN = 'times.ttf'; + const TIMES_NEW_ROMAN_BOLD = 'timesbd.ttf'; + const TIMES_NEW_ROMAN_ITALIC = 'timesi.ttf'; + const TIMES_NEW_ROMAN_BOLD_ITALIC = 'timesbi.ttf'; + + const TREBUCHET_MS = 'trebuc.ttf'; + const TREBUCHET_MS_BOLD = 'trebucbd.ttf'; + const TREBUCHET_MS_ITALIC = 'trebucit.ttf'; + const TREBUCHET_MS_BOLD_ITALIC = 'trebucbi.ttf'; + + const VERDANA = 'verdana.ttf'; + const VERDANA_BOLD = 'verdanab.ttf'; + const VERDANA_ITALIC = 'verdanai.ttf'; + const VERDANA_BOLD_ITALIC = 'verdanaz.ttf'; + + /** + * AutoSize method + * + * @var string + */ + private static $autoSizeMethod = self::AUTOSIZE_METHOD_APPROX; + + /** + * Path to folder containing TrueType font .ttf files + * + * @var string + */ + private static $trueTypeFontPath = null; + + /** + * How wide is a default column for a given default font and size? + * Empirical data found by inspecting real Excel files and reading off the pixel width + * in Microsoft Office Excel 2007. + * + * @var array + */ + public static $defaultColumnWidths = array( + 'Arial' => array( + 1 => array('px' => 24, 'width' => 12.00000000), + 2 => array('px' => 24, 'width' => 12.00000000), + 3 => array('px' => 32, 'width' => 10.66406250), + 4 => array('px' => 32, 'width' => 10.66406250), + 5 => array('px' => 40, 'width' => 10.00000000), + 6 => array('px' => 48, 'width' => 9.59765625), + 7 => array('px' => 48, 'width' => 9.59765625), + 8 => array('px' => 56, 'width' => 9.33203125), + 9 => array('px' => 64, 'width' => 9.14062500), + 10 => array('px' => 64, 'width' => 9.14062500), + ), + 'Calibri' => array( + 1 => array('px' => 24, 'width' => 12.00000000), + 2 => array('px' => 24, 'width' => 12.00000000), + 3 => array('px' => 32, 'width' => 10.66406250), + 4 => array('px' => 32, 'width' => 10.66406250), + 5 => array('px' => 40, 'width' => 10.00000000), + 6 => array('px' => 48, 'width' => 9.59765625), + 7 => array('px' => 48, 'width' => 9.59765625), + 8 => array('px' => 56, 'width' => 9.33203125), + 9 => array('px' => 56, 'width' => 9.33203125), + 10 => array('px' => 64, 'width' => 9.14062500), + 11 => array('px' => 64, 'width' => 9.14062500), + ), + 'Verdana' => array( + 1 => array('px' => 24, 'width' => 12.00000000), + 2 => array('px' => 24, 'width' => 12.00000000), + 3 => array('px' => 32, 'width' => 10.66406250), + 4 => array('px' => 32, 'width' => 10.66406250), + 5 => array('px' => 40, 'width' => 10.00000000), + 6 => array('px' => 48, 'width' => 9.59765625), + 7 => array('px' => 48, 'width' => 9.59765625), + 8 => array('px' => 64, 'width' => 9.14062500), + 9 => array('px' => 72, 'width' => 9.00000000), + 10 => array('px' => 72, 'width' => 9.00000000), + ), + ); + + /** + * Set autoSize method + * + * @param string $pValue + * @return boolean Success or failure + */ + public static function setAutoSizeMethod($pValue = self::AUTOSIZE_METHOD_APPROX) + { + if (!in_array($pValue,self::$_autoSizeMethods)) { + return FALSE; + } + + self::$autoSizeMethod = $pValue; + + return TRUE; + } + + /** + * Get autoSize method + * + * @return string + */ + public static function getAutoSizeMethod() + { + return self::$autoSizeMethod; + } + + /** + * Set the path to the folder containing .ttf files. There should be a trailing slash. + * Typical locations on variout some platforms: + * <ul> + * <li>C:/Windows/Fonts/</li> + * <li>/usr/share/fonts/truetype/</li> + * <li>~/.fonts/</li> + * </ul> + * + * @param string $pValue + */ + public static function setTrueTypeFontPath($pValue = '') + { + self::$trueTypeFontPath = $pValue; + } + + /** + * Get the path to the folder containing .ttf files. + * + * @return string + */ + public static function getTrueTypeFontPath() + { + return self::$trueTypeFontPath; + } + + /** + * Calculate an (approximate) OpenXML column width, based on font size and text contained + * + * @param PHPExcel_Style_Font $font Font object + * @param PHPExcel_RichText|string $cellText Text to calculate width + * @param integer $rotation Rotation angle + * @param PHPExcel_Style_Font|NULL $defaultFont Font object + * @return integer Column width + */ + public static function calculateColumnWidth(PHPExcel_Style_Font $font, $cellText = '', $rotation = 0, PHPExcel_Style_Font $defaultFont = null) { + + // If it is rich text, use plain text + if ($cellText instanceof PHPExcel_RichText) { + $cellText = $cellText->getPlainText(); + } + + // Special case if there are one or more newline characters ("\n") + if (strpos($cellText, "\n") !== false) { + $lineTexts = explode("\n", $cellText); + $lineWitdhs = array(); + foreach ($lineTexts as $lineText) { + $lineWidths[] = self::calculateColumnWidth($font, $lineText, $rotation = 0, $defaultFont); + } + return max($lineWidths); // width of longest line in cell + } + + // Try to get the exact text width in pixels + try { + // If autosize method is set to 'approx', use approximation + if (self::$autoSizeMethod == self::AUTOSIZE_METHOD_APPROX) { + throw new PHPExcel_Exception('AutoSize method is set to approx'); + } + + // Width of text in pixels excl. padding + $columnWidth = self::getTextWidthPixelsExact($cellText, $font, $rotation); + + // Excel adds some padding, use 1.07 of the width of an 'n' glyph + $columnWidth += ceil(self::getTextWidthPixelsExact('0', $font, 0) * 1.07); // pixels incl. padding + + } catch (PHPExcel_Exception $e) { + // Width of text in pixels excl. padding, approximation + $columnWidth = self::getTextWidthPixelsApprox($cellText, $font, $rotation); + + // Excel adds some padding, just use approx width of 'n' glyph + $columnWidth += self::getTextWidthPixelsApprox('n', $font, 0); + } + + // Convert from pixel width to column width + $columnWidth = PHPExcel_Shared_Drawing::pixelsToCellDimension($columnWidth, $defaultFont); + + // Return + return round($columnWidth, 6); + } + + /** + * Get GD text width in pixels for a string of text in a certain font at a certain rotation angle + * + * @param string $text + * @param PHPExcel_Style_Font + * @param int $rotation + * @return int + * @throws PHPExcel_Exception + */ + public static function getTextWidthPixelsExact($text, PHPExcel_Style_Font $font, $rotation = 0) { + if (!function_exists('imagettfbbox')) { + throw new PHPExcel_Exception('GD library needs to be enabled'); + } + + // font size should really be supplied in pixels in GD2, + // but since GD2 seems to assume 72dpi, pixels and points are the same + $fontFile = self::getTrueTypeFontFileFromFont($font); + $textBox = imagettfbbox($font->getSize(), $rotation, $fontFile, $text); + + // Get corners positions + $lowerLeftCornerX = $textBox[0]; + $lowerLeftCornerY = $textBox[1]; + $lowerRightCornerX = $textBox[2]; + $lowerRightCornerY = $textBox[3]; + $upperRightCornerX = $textBox[4]; + $upperRightCornerY = $textBox[5]; + $upperLeftCornerX = $textBox[6]; + $upperLeftCornerY = $textBox[7]; + + // Consider the rotation when calculating the width + $textWidth = max($lowerRightCornerX - $upperLeftCornerX, $upperRightCornerX - $lowerLeftCornerX); + + return $textWidth; + } + + /** + * Get approximate width in pixels for a string of text in a certain font at a certain rotation angle + * + * @param string $columnText + * @param PHPExcel_Style_Font $font + * @param int $rotation + * @return int Text width in pixels (no padding added) + */ + public static function getTextWidthPixelsApprox($columnText, PHPExcel_Style_Font $font = null, $rotation = 0) + { + $fontName = $font->getName(); + $fontSize = $font->getSize(); + + // Calculate column width in pixels. We assume fixed glyph width. Result varies with font name and size. + switch ($fontName) { + case 'Calibri': + // value 8.26 was found via interpolation by inspecting real Excel files with Calibri 11 font. + $columnWidth = (int) (8.26 * PHPExcel_Shared_String::CountCharacters($columnText)); + $columnWidth = $columnWidth * $fontSize / 11; // extrapolate from font size + break; + + case 'Arial': + // value 7 was found via interpolation by inspecting real Excel files with Arial 10 font. + $columnWidth = (int) (7 * PHPExcel_Shared_String::CountCharacters($columnText)); + $columnWidth = $columnWidth * $fontSize / 10; // extrapolate from font size + break; + + case 'Verdana': + // value 8 was found via interpolation by inspecting real Excel files with Verdana 10 font. + $columnWidth = (int) (8 * PHPExcel_Shared_String::CountCharacters($columnText)); + $columnWidth = $columnWidth * $fontSize / 10; // extrapolate from font size + break; + + default: + // just assume Calibri + $columnWidth = (int) (8.26 * PHPExcel_Shared_String::CountCharacters($columnText)); + $columnWidth = $columnWidth * $fontSize / 11; // extrapolate from font size + break; + } + + // Calculate approximate rotated column width + if ($rotation !== 0) { + if ($rotation == -165) { + // stacked text + $columnWidth = 4; // approximation + } else { + // rotated text + $columnWidth = $columnWidth * cos(deg2rad($rotation)) + + $fontSize * abs(sin(deg2rad($rotation))) / 5; // approximation + } + } + + // pixel width is an integer + $columnWidth = (int) $columnWidth; + return $columnWidth; + } + + /** + * Calculate an (approximate) pixel size, based on a font points size + * + * @param int $fontSizeInPoints Font size (in points) + * @return int Font size (in pixels) + */ + public static function fontSizeToPixels($fontSizeInPoints = 11) { + return (int) ((4 / 3) * $fontSizeInPoints); + } + + /** + * Calculate an (approximate) pixel size, based on inch size + * + * @param int $sizeInInch Font size (in inch) + * @return int Size (in pixels) + */ + public static function inchSizeToPixels($sizeInInch = 1) { + return ($sizeInInch * 96); + } + + /** + * Calculate an (approximate) pixel size, based on centimeter size + * + * @param int $sizeInCm Font size (in centimeters) + * @return int Size (in pixels) + */ + public static function centimeterSizeToPixels($sizeInCm = 1) { + return ($sizeInCm * 37.795275591); + } + + /** + * Returns the font path given the font + * + * @param PHPExcel_Style_Font + * @return string Path to TrueType font file + */ + public static function getTrueTypeFontFileFromFont($font) { + if (!file_exists(self::$trueTypeFontPath) || !is_dir(self::$trueTypeFontPath)) { + throw new PHPExcel_Exception('Valid directory to TrueType Font files not specified'); + } + + $name = $font->getName(); + $bold = $font->getBold(); + $italic = $font->getItalic(); + + // Check if we can map font to true type font file + switch ($name) { + case 'Arial': + $fontFile = ( + $bold ? ($italic ? self::ARIAL_BOLD_ITALIC : self::ARIAL_BOLD) + : ($italic ? self::ARIAL_ITALIC : self::ARIAL) + ); + break; + + case 'Calibri': + $fontFile = ( + $bold ? ($italic ? self::CALIBRI_BOLD_ITALIC : self::CALIBRI_BOLD) + : ($italic ? self::CALIBRI_ITALIC : self::CALIBRI) + ); + break; + + case 'Courier New': + $fontFile = ( + $bold ? ($italic ? self::COURIER_NEW_BOLD_ITALIC : self::COURIER_NEW_BOLD) + : ($italic ? self::COURIER_NEW_ITALIC : self::COURIER_NEW) + ); + break; + + case 'Comic Sans MS': + $fontFile = ( + $bold ? self::COMIC_SANS_MS_BOLD : self::COMIC_SANS_MS + ); + break; + + case 'Georgia': + $fontFile = ( + $bold ? ($italic ? self::GEORGIA_BOLD_ITALIC : self::GEORGIA_BOLD) + : ($italic ? self::GEORGIA_ITALIC : self::GEORGIA) + ); + break; + + case 'Impact': + $fontFile = self::IMPACT; + break; + + case 'Liberation Sans': + $fontFile = ( + $bold ? ($italic ? self::LIBERATION_SANS_BOLD_ITALIC : self::LIBERATION_SANS_BOLD) + : ($italic ? self::LIBERATION_SANS_ITALIC : self::LIBERATION_SANS) + ); + break; + + case 'Lucida Console': + $fontFile = self::LUCIDA_CONSOLE; + break; + + case 'Lucida Sans Unicode': + $fontFile = self::LUCIDA_SANS_UNICODE; + break; + + case 'Microsoft Sans Serif': + $fontFile = self::MICROSOFT_SANS_SERIF; + break; + + case 'Palatino Linotype': + $fontFile = ( + $bold ? ($italic ? self::PALATINO_LINOTYPE_BOLD_ITALIC : self::PALATINO_LINOTYPE_BOLD) + : ($italic ? self::PALATINO_LINOTYPE_ITALIC : self::PALATINO_LINOTYPE) + ); + break; + + case 'Symbol': + $fontFile = self::SYMBOL; + break; + + case 'Tahoma': + $fontFile = ( + $bold ? self::TAHOMA_BOLD : self::TAHOMA + ); + break; + + case 'Times New Roman': + $fontFile = ( + $bold ? ($italic ? self::TIMES_NEW_ROMAN_BOLD_ITALIC : self::TIMES_NEW_ROMAN_BOLD) + : ($italic ? self::TIMES_NEW_ROMAN_ITALIC : self::TIMES_NEW_ROMAN) + ); + break; + + case 'Trebuchet MS': + $fontFile = ( + $bold ? ($italic ? self::TREBUCHET_MS_BOLD_ITALIC : self::TREBUCHET_MS_BOLD) + : ($italic ? self::TREBUCHET_MS_ITALIC : self::TREBUCHET_MS) + ); + break; + + case 'Verdana': + $fontFile = ( + $bold ? ($italic ? self::VERDANA_BOLD_ITALIC : self::VERDANA_BOLD) + : ($italic ? self::VERDANA_ITALIC : self::VERDANA) + ); + break; + + default: + throw new PHPExcel_Exception('Unknown font name "'. $name .'". Cannot map to TrueType font file'); + break; + } + + $fontFile = self::$trueTypeFontPath . $fontFile; + + // Check if file actually exists + if (!file_exists($fontFile)) { + throw New PHPExcel_Exception('TrueType Font file not found'); + } + + return $fontFile; + } + + /** + * Returns the associated charset for the font name. + * + * @param string $name Font name + * @return int Character set code + */ + public static function getCharsetFromFontName($name) + { + switch ($name) { + // Add more cases. Check FONT records in real Excel files. + case 'EucrosiaUPC': return self::CHARSET_ANSI_THAI; + case 'Wingdings': return self::CHARSET_SYMBOL; + case 'Wingdings 2': return self::CHARSET_SYMBOL; + case 'Wingdings 3': return self::CHARSET_SYMBOL; + default: return self::CHARSET_ANSI_LATIN; + } + } + + /** + * Get the effective column width for columns without a column dimension or column with width -1 + * For example, for Calibri 11 this is 9.140625 (64 px) + * + * @param PHPExcel_Style_Font $font The workbooks default font + * @param boolean $pPixels true = return column width in pixels, false = return in OOXML units + * @return mixed Column width + */ + public static function getDefaultColumnWidthByFont(PHPExcel_Style_Font $font, $pPixels = false) + { + if (isset(self::$defaultColumnWidths[$font->getName()][$font->getSize()])) { + // Exact width can be determined + $columnWidth = $pPixels ? + self::$defaultColumnWidths[$font->getName()][$font->getSize()]['px'] + : self::$defaultColumnWidths[$font->getName()][$font->getSize()]['width']; + + } else { + // We don't have data for this particular font and size, use approximation by + // extrapolating from Calibri 11 + $columnWidth = $pPixels ? + self::$defaultColumnWidths['Calibri'][11]['px'] + : self::$defaultColumnWidths['Calibri'][11]['width']; + $columnWidth = $columnWidth * $font->getSize() / 11; + + // Round pixels to closest integer + if ($pPixels) { + $columnWidth = (int) round($columnWidth); + } + } + + return $columnWidth; + } + + /** + * Get the effective row height for rows without a row dimension or rows with height -1 + * For example, for Calibri 11 this is 15 points + * + * @param PHPExcel_Style_Font $font The workbooks default font + * @return float Row height in points + */ + public static function getDefaultRowHeightByFont(PHPExcel_Style_Font $font) + { + switch ($font->getName()) { + case 'Arial': + switch ($font->getSize()) { + case 10: + // inspection of Arial 10 workbook says 12.75pt ~17px + $rowHeight = 12.75; + break; + + case 9: + // inspection of Arial 9 workbook says 12.00pt ~16px + $rowHeight = 12; + break; + + case 8: + // inspection of Arial 8 workbook says 11.25pt ~15px + $rowHeight = 11.25; + break; + + case 7: + // inspection of Arial 7 workbook says 9.00pt ~12px + $rowHeight = 9; + break; + + case 6: + case 5: + // inspection of Arial 5,6 workbook says 8.25pt ~11px + $rowHeight = 8.25; + break; + + case 4: + // inspection of Arial 4 workbook says 6.75pt ~9px + $rowHeight = 6.75; + break; + + case 3: + // inspection of Arial 3 workbook says 6.00pt ~8px + $rowHeight = 6; + break; + + case 2: + case 1: + // inspection of Arial 1,2 workbook says 5.25pt ~7px + $rowHeight = 5.25; + break; + + default: + // use Arial 10 workbook as an approximation, extrapolation + $rowHeight = 12.75 * $font->getSize() / 10; + break; + } + break; + + case 'Calibri': + switch ($font->getSize()) { + case 11: + // inspection of Calibri 11 workbook says 15.00pt ~20px + $rowHeight = 15; + break; + + case 10: + // inspection of Calibri 10 workbook says 12.75pt ~17px + $rowHeight = 12.75; + break; + + case 9: + // inspection of Calibri 9 workbook says 12.00pt ~16px + $rowHeight = 12; + break; + + case 8: + // inspection of Calibri 8 workbook says 11.25pt ~15px + $rowHeight = 11.25; + break; + + case 7: + // inspection of Calibri 7 workbook says 9.00pt ~12px + $rowHeight = 9; + break; + + case 6: + case 5: + // inspection of Calibri 5,6 workbook says 8.25pt ~11px + $rowHeight = 8.25; + break; + + case 4: + // inspection of Calibri 4 workbook says 6.75pt ~9px + $rowHeight = 6.75; + break; + + case 3: + // inspection of Calibri 3 workbook says 6.00pt ~8px + $rowHeight = 6.00; + break; + + case 2: + case 1: + // inspection of Calibri 1,2 workbook says 5.25pt ~7px + $rowHeight = 5.25; + break; + + default: + // use Calibri 11 workbook as an approximation, extrapolation + $rowHeight = 15 * $font->getSize() / 11; + break; + } + break; + + case 'Verdana': + switch ($font->getSize()) { + case 10: + // inspection of Verdana 10 workbook says 12.75pt ~17px + $rowHeight = 12.75; + break; + + case 9: + // inspection of Verdana 9 workbook says 11.25pt ~15px + $rowHeight = 11.25; + break; + + case 8: + // inspection of Verdana 8 workbook says 10.50pt ~14px + $rowHeight = 10.50; + break; + + case 7: + // inspection of Verdana 7 workbook says 9.00pt ~12px + $rowHeight = 9.00; + break; + + case 6: + case 5: + // inspection of Verdana 5,6 workbook says 8.25pt ~11px + $rowHeight = 8.25; + break; + + case 4: + // inspection of Verdana 4 workbook says 6.75pt ~9px + $rowHeight = 6.75; + break; + + case 3: + // inspection of Verdana 3 workbook says 6.00pt ~8px + $rowHeight = 6; + break; + + case 2: + case 1: + // inspection of Verdana 1,2 workbook says 5.25pt ~7px + $rowHeight = 5.25; + break; + + default: + // use Verdana 10 workbook as an approximation, extrapolation + $rowHeight = 12.75 * $font->getSize() / 10; + break; + } + break; + + default: + // just use Calibri as an approximation + $rowHeight = 15 * $font->getSize() / 11; + break; + } + + return $rowHeight; + } + +} diff --git a/PHPExcel/Shared/JAMA/CHANGELOG.TXT b/PHPExcel/Shared/JAMA/CHANGELOG.TXT new file mode 100644 index 0000000..1c18a5d --- /dev/null +++ b/PHPExcel/Shared/JAMA/CHANGELOG.TXT @@ -0,0 +1,16 @@ +Mar 1, 2005 11:15 AST by PM + ++ For consistency, renamed Math.php to Maths.java, utils to util, + tests to test, docs to doc - + ++ Removed conditional logic from top of Matrix class. + ++ Switched to using hypo function in Maths.php for all php-hypot calls. + NOTE TO SELF: Need to make sure that all decompositions have been + switched over to using the bundled hypo. + +Feb 25, 2005 at 10:00 AST by PM + ++ Recommend using simpler Error.php instead of JAMA_Error.php but + can be persuaded otherwise. + diff --git a/PHPExcel/Shared/JAMA/CholeskyDecomposition.php b/PHPExcel/Shared/JAMA/CholeskyDecomposition.php new file mode 100644 index 0000000..cfbaa53 --- /dev/null +++ b/PHPExcel/Shared/JAMA/CholeskyDecomposition.php @@ -0,0 +1,149 @@ +<?php +/** + * @package JAMA + * + * Cholesky decomposition class + * + * For a symmetric, positive definite matrix A, the Cholesky decomposition + * is an lower triangular matrix L so that A = L*L'. + * + * If the matrix is not symmetric or positive definite, the constructor + * returns a partial decomposition and sets an internal flag that may + * be queried by the isSPD() method. + * + * @author Paul Meagher + * @author Michael Bommarito + * @version 1.2 + */ +class CholeskyDecomposition { + + /** + * Decomposition storage + * @var array + * @access private + */ + private $L = array(); + + /** + * Matrix row and column dimension + * @var int + * @access private + */ + private $m; + + /** + * Symmetric positive definite flag + * @var boolean + * @access private + */ + private $isspd = true; + + + /** + * CholeskyDecomposition + * + * Class constructor - decomposes symmetric positive definite matrix + * @param mixed Matrix square symmetric positive definite matrix + */ + public function __construct($A = null) { + if ($A instanceof Matrix) { + $this->L = $A->getArray(); + $this->m = $A->getRowDimension(); + + for($i = 0; $i < $this->m; ++$i) { + for($j = $i; $j < $this->m; ++$j) { + for($sum = $this->L[$i][$j], $k = $i - 1; $k >= 0; --$k) { + $sum -= $this->L[$i][$k] * $this->L[$j][$k]; + } + if ($i == $j) { + if ($sum >= 0) { + $this->L[$i][$i] = sqrt($sum); + } else { + $this->isspd = false; + } + } else { + if ($this->L[$i][$i] != 0) { + $this->L[$j][$i] = $sum / $this->L[$i][$i]; + } + } + } + + for ($k = $i+1; $k < $this->m; ++$k) { + $this->L[$i][$k] = 0.0; + } + } + } else { + throw new PHPExcel_Calculation_Exception(JAMAError(ArgumentTypeException)); + } + } // function __construct() + + + /** + * Is the matrix symmetric and positive definite? + * + * @return boolean + */ + public function isSPD() { + return $this->isspd; + } // function isSPD() + + + /** + * getL + * + * Return triangular factor. + * @return Matrix Lower triangular matrix + */ + public function getL() { + return new Matrix($this->L); + } // function getL() + + + /** + * Solve A*X = B + * + * @param $B Row-equal matrix + * @return Matrix L * L' * X = B + */ + public function solve($B = null) { + if ($B instanceof Matrix) { + if ($B->getRowDimension() == $this->m) { + if ($this->isspd) { + $X = $B->getArrayCopy(); + $nx = $B->getColumnDimension(); + + for ($k = 0; $k < $this->m; ++$k) { + for ($i = $k + 1; $i < $this->m; ++$i) { + for ($j = 0; $j < $nx; ++$j) { + $X[$i][$j] -= $X[$k][$j] * $this->L[$i][$k]; + } + } + for ($j = 0; $j < $nx; ++$j) { + $X[$k][$j] /= $this->L[$k][$k]; + } + } + + for ($k = $this->m - 1; $k >= 0; --$k) { + for ($j = 0; $j < $nx; ++$j) { + $X[$k][$j] /= $this->L[$k][$k]; + } + for ($i = 0; $i < $k; ++$i) { + for ($j = 0; $j < $nx; ++$j) { + $X[$i][$j] -= $X[$k][$j] * $this->L[$k][$i]; + } + } + } + + return new Matrix($X, $this->m, $nx); + } else { + throw new PHPExcel_Calculation_Exception(JAMAError(MatrixSPDException)); + } + } else { + throw new PHPExcel_Calculation_Exception(JAMAError(MatrixDimensionException)); + } + } else { + throw new PHPExcel_Calculation_Exception(JAMAError(ArgumentTypeException)); + } + } // function solve() + +} // class CholeskyDecomposition diff --git a/PHPExcel/Shared/JAMA/EigenvalueDecomposition.php b/PHPExcel/Shared/JAMA/EigenvalueDecomposition.php new file mode 100644 index 0000000..2a696d0 --- /dev/null +++ b/PHPExcel/Shared/JAMA/EigenvalueDecomposition.php @@ -0,0 +1,862 @@ +<?php +/** + * @package JAMA + * + * Class to obtain eigenvalues and eigenvectors of a real matrix. + * + * If A is symmetric, then A = V*D*V' where the eigenvalue matrix D + * is diagonal and the eigenvector matrix V is orthogonal (i.e. + * A = V.times(D.times(V.transpose())) and V.times(V.transpose()) + * equals the identity matrix). + * + * If A is not symmetric, then the eigenvalue matrix D is block diagonal + * with the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, + * lambda + i*mu, in 2-by-2 blocks, [lambda, mu; -mu, lambda]. The + * columns of V represent the eigenvectors in the sense that A*V = V*D, + * i.e. A.times(V) equals V.times(D). The matrix V may be badly + * conditioned, or even singular, so the validity of the equation + * A = V*D*inverse(V) depends upon V.cond(). + * + * @author Paul Meagher + * @license PHP v3.0 + * @version 1.1 + */ +class EigenvalueDecomposition { + + /** + * Row and column dimension (square matrix). + * @var int + */ + private $n; + + /** + * Internal symmetry flag. + * @var int + */ + private $issymmetric; + + /** + * Arrays for internal storage of eigenvalues. + * @var array + */ + private $d = array(); + private $e = array(); + + /** + * Array for internal storage of eigenvectors. + * @var array + */ + private $V = array(); + + /** + * Array for internal storage of nonsymmetric Hessenberg form. + * @var array + */ + private $H = array(); + + /** + * Working storage for nonsymmetric algorithm. + * @var array + */ + private $ort; + + /** + * Used for complex scalar division. + * @var float + */ + private $cdivr; + private $cdivi; + + + /** + * Symmetric Householder reduction to tridiagonal form. + * + * @access private + */ + private function tred2 () { + // This is derived from the Algol procedures tred2 by + // Bowdler, Martin, Reinsch, and Wilkinson, Handbook for + // Auto. Comp., Vol.ii-Linear Algebra, and the corresponding + // Fortran subroutine in EISPACK. + $this->d = $this->V[$this->n-1]; + // Householder reduction to tridiagonal form. + for ($i = $this->n-1; $i > 0; --$i) { + $i_ = $i -1; + // Scale to avoid under/overflow. + $h = $scale = 0.0; + $scale += array_sum(array_map(abs, $this->d)); + if ($scale == 0.0) { + $this->e[$i] = $this->d[$i_]; + $this->d = array_slice($this->V[$i_], 0, $i_); + for ($j = 0; $j < $i; ++$j) { + $this->V[$j][$i] = $this->V[$i][$j] = 0.0; + } + } else { + // Generate Householder vector. + for ($k = 0; $k < $i; ++$k) { + $this->d[$k] /= $scale; + $h += pow($this->d[$k], 2); + } + $f = $this->d[$i_]; + $g = sqrt($h); + if ($f > 0) { + $g = -$g; + } + $this->e[$i] = $scale * $g; + $h = $h - $f * $g; + $this->d[$i_] = $f - $g; + for ($j = 0; $j < $i; ++$j) { + $this->e[$j] = 0.0; + } + // Apply similarity transformation to remaining columns. + for ($j = 0; $j < $i; ++$j) { + $f = $this->d[$j]; + $this->V[$j][$i] = $f; + $g = $this->e[$j] + $this->V[$j][$j] * $f; + for ($k = $j+1; $k <= $i_; ++$k) { + $g += $this->V[$k][$j] * $this->d[$k]; + $this->e[$k] += $this->V[$k][$j] * $f; + } + $this->e[$j] = $g; + } + $f = 0.0; + for ($j = 0; $j < $i; ++$j) { + $this->e[$j] /= $h; + $f += $this->e[$j] * $this->d[$j]; + } + $hh = $f / (2 * $h); + for ($j=0; $j < $i; ++$j) { + $this->e[$j] -= $hh * $this->d[$j]; + } + for ($j = 0; $j < $i; ++$j) { + $f = $this->d[$j]; + $g = $this->e[$j]; + for ($k = $j; $k <= $i_; ++$k) { + $this->V[$k][$j] -= ($f * $this->e[$k] + $g * $this->d[$k]); + } + $this->d[$j] = $this->V[$i-1][$j]; + $this->V[$i][$j] = 0.0; + } + } + $this->d[$i] = $h; + } + + // Accumulate transformations. + for ($i = 0; $i < $this->n-1; ++$i) { + $this->V[$this->n-1][$i] = $this->V[$i][$i]; + $this->V[$i][$i] = 1.0; + $h = $this->d[$i+1]; + if ($h != 0.0) { + for ($k = 0; $k <= $i; ++$k) { + $this->d[$k] = $this->V[$k][$i+1] / $h; + } + for ($j = 0; $j <= $i; ++$j) { + $g = 0.0; + for ($k = 0; $k <= $i; ++$k) { + $g += $this->V[$k][$i+1] * $this->V[$k][$j]; + } + for ($k = 0; $k <= $i; ++$k) { + $this->V[$k][$j] -= $g * $this->d[$k]; + } + } + } + for ($k = 0; $k <= $i; ++$k) { + $this->V[$k][$i+1] = 0.0; + } + } + + $this->d = $this->V[$this->n-1]; + $this->V[$this->n-1] = array_fill(0, $j, 0.0); + $this->V[$this->n-1][$this->n-1] = 1.0; + $this->e[0] = 0.0; + } + + + /** + * Symmetric tridiagonal QL algorithm. + * + * This is derived from the Algol procedures tql2, by + * Bowdler, Martin, Reinsch, and Wilkinson, Handbook for + * Auto. Comp., Vol.ii-Linear Algebra, and the corresponding + * Fortran subroutine in EISPACK. + * + * @access private + */ + private function tql2() { + for ($i = 1; $i < $this->n; ++$i) { + $this->e[$i-1] = $this->e[$i]; + } + $this->e[$this->n-1] = 0.0; + $f = 0.0; + $tst1 = 0.0; + $eps = pow(2.0,-52.0); + + for ($l = 0; $l < $this->n; ++$l) { + // Find small subdiagonal element + $tst1 = max($tst1, abs($this->d[$l]) + abs($this->e[$l])); + $m = $l; + while ($m < $this->n) { + if (abs($this->e[$m]) <= $eps * $tst1) + break; + ++$m; + } + // If m == l, $this->d[l] is an eigenvalue, + // otherwise, iterate. + if ($m > $l) { + $iter = 0; + do { + // Could check iteration count here. + $iter += 1; + // Compute implicit shift + $g = $this->d[$l]; + $p = ($this->d[$l+1] - $g) / (2.0 * $this->e[$l]); + $r = hypo($p, 1.0); + if ($p < 0) + $r *= -1; + $this->d[$l] = $this->e[$l] / ($p + $r); + $this->d[$l+1] = $this->e[$l] * ($p + $r); + $dl1 = $this->d[$l+1]; + $h = $g - $this->d[$l]; + for ($i = $l + 2; $i < $this->n; ++$i) + $this->d[$i] -= $h; + $f += $h; + // Implicit QL transformation. + $p = $this->d[$m]; + $c = 1.0; + $c2 = $c3 = $c; + $el1 = $this->e[$l + 1]; + $s = $s2 = 0.0; + for ($i = $m-1; $i >= $l; --$i) { + $c3 = $c2; + $c2 = $c; + $s2 = $s; + $g = $c * $this->e[$i]; + $h = $c * $p; + $r = hypo($p, $this->e[$i]); + $this->e[$i+1] = $s * $r; + $s = $this->e[$i] / $r; + $c = $p / $r; + $p = $c * $this->d[$i] - $s * $g; + $this->d[$i+1] = $h + $s * ($c * $g + $s * $this->d[$i]); + // Accumulate transformation. + for ($k = 0; $k < $this->n; ++$k) { + $h = $this->V[$k][$i+1]; + $this->V[$k][$i+1] = $s * $this->V[$k][$i] + $c * $h; + $this->V[$k][$i] = $c * $this->V[$k][$i] - $s * $h; + } + } + $p = -$s * $s2 * $c3 * $el1 * $this->e[$l] / $dl1; + $this->e[$l] = $s * $p; + $this->d[$l] = $c * $p; + // Check for convergence. + } while (abs($this->e[$l]) > $eps * $tst1); + } + $this->d[$l] = $this->d[$l] + $f; + $this->e[$l] = 0.0; + } + + // Sort eigenvalues and corresponding vectors. + for ($i = 0; $i < $this->n - 1; ++$i) { + $k = $i; + $p = $this->d[$i]; + for ($j = $i+1; $j < $this->n; ++$j) { + if ($this->d[$j] < $p) { + $k = $j; + $p = $this->d[$j]; + } + } + if ($k != $i) { + $this->d[$k] = $this->d[$i]; + $this->d[$i] = $p; + for ($j = 0; $j < $this->n; ++$j) { + $p = $this->V[$j][$i]; + $this->V[$j][$i] = $this->V[$j][$k]; + $this->V[$j][$k] = $p; + } + } + } + } + + + /** + * Nonsymmetric reduction to Hessenberg form. + * + * This is derived from the Algol procedures orthes and ortran, + * by Martin and Wilkinson, Handbook for Auto. Comp., + * Vol.ii-Linear Algebra, and the corresponding + * Fortran subroutines in EISPACK. + * + * @access private + */ + private function orthes () { + $low = 0; + $high = $this->n-1; + + for ($m = $low+1; $m <= $high-1; ++$m) { + // Scale column. + $scale = 0.0; + for ($i = $m; $i <= $high; ++$i) { + $scale = $scale + abs($this->H[$i][$m-1]); + } + if ($scale != 0.0) { + // Compute Householder transformation. + $h = 0.0; + for ($i = $high; $i >= $m; --$i) { + $this->ort[$i] = $this->H[$i][$m-1] / $scale; + $h += $this->ort[$i] * $this->ort[$i]; + } + $g = sqrt($h); + if ($this->ort[$m] > 0) { + $g *= -1; + } + $h -= $this->ort[$m] * $g; + $this->ort[$m] -= $g; + // Apply Householder similarity transformation + // H = (I -u * u' / h) * H * (I -u * u') / h) + for ($j = $m; $j < $this->n; ++$j) { + $f = 0.0; + for ($i = $high; $i >= $m; --$i) { + $f += $this->ort[$i] * $this->H[$i][$j]; + } + $f /= $h; + for ($i = $m; $i <= $high; ++$i) { + $this->H[$i][$j] -= $f * $this->ort[$i]; + } + } + for ($i = 0; $i <= $high; ++$i) { + $f = 0.0; + for ($j = $high; $j >= $m; --$j) { + $f += $this->ort[$j] * $this->H[$i][$j]; + } + $f = $f / $h; + for ($j = $m; $j <= $high; ++$j) { + $this->H[$i][$j] -= $f * $this->ort[$j]; + } + } + $this->ort[$m] = $scale * $this->ort[$m]; + $this->H[$m][$m-1] = $scale * $g; + } + } + + // Accumulate transformations (Algol's ortran). + for ($i = 0; $i < $this->n; ++$i) { + for ($j = 0; $j < $this->n; ++$j) { + $this->V[$i][$j] = ($i == $j ? 1.0 : 0.0); + } + } + for ($m = $high-1; $m >= $low+1; --$m) { + if ($this->H[$m][$m-1] != 0.0) { + for ($i = $m+1; $i <= $high; ++$i) { + $this->ort[$i] = $this->H[$i][$m-1]; + } + for ($j = $m; $j <= $high; ++$j) { + $g = 0.0; + for ($i = $m; $i <= $high; ++$i) { + $g += $this->ort[$i] * $this->V[$i][$j]; + } + // Double division avoids possible underflow + $g = ($g / $this->ort[$m]) / $this->H[$m][$m-1]; + for ($i = $m; $i <= $high; ++$i) { + $this->V[$i][$j] += $g * $this->ort[$i]; + } + } + } + } + } + + + /** + * Performs complex division. + * + * @access private + */ + private function cdiv($xr, $xi, $yr, $yi) { + if (abs($yr) > abs($yi)) { + $r = $yi / $yr; + $d = $yr + $r * $yi; + $this->cdivr = ($xr + $r * $xi) / $d; + $this->cdivi = ($xi - $r * $xr) / $d; + } else { + $r = $yr / $yi; + $d = $yi + $r * $yr; + $this->cdivr = ($r * $xr + $xi) / $d; + $this->cdivi = ($r * $xi - $xr) / $d; + } + } + + + /** + * Nonsymmetric reduction from Hessenberg to real Schur form. + * + * Code is derived from the Algol procedure hqr2, + * by Martin and Wilkinson, Handbook for Auto. Comp., + * Vol.ii-Linear Algebra, and the corresponding + * Fortran subroutine in EISPACK. + * + * @access private + */ + private function hqr2 () { + // Initialize + $nn = $this->n; + $n = $nn - 1; + $low = 0; + $high = $nn - 1; + $eps = pow(2.0, -52.0); + $exshift = 0.0; + $p = $q = $r = $s = $z = 0; + // Store roots isolated by balanc and compute matrix norm + $norm = 0.0; + + for ($i = 0; $i < $nn; ++$i) { + if (($i < $low) OR ($i > $high)) { + $this->d[$i] = $this->H[$i][$i]; + $this->e[$i] = 0.0; + } + for ($j = max($i-1, 0); $j < $nn; ++$j) { + $norm = $norm + abs($this->H[$i][$j]); + } + } + + // Outer loop over eigenvalue index + $iter = 0; + while ($n >= $low) { + // Look for single small sub-diagonal element + $l = $n; + while ($l > $low) { + $s = abs($this->H[$l-1][$l-1]) + abs($this->H[$l][$l]); + if ($s == 0.0) { + $s = $norm; + } + if (abs($this->H[$l][$l-1]) < $eps * $s) { + break; + } + --$l; + } + // Check for convergence + // One root found + if ($l == $n) { + $this->H[$n][$n] = $this->H[$n][$n] + $exshift; + $this->d[$n] = $this->H[$n][$n]; + $this->e[$n] = 0.0; + --$n; + $iter = 0; + // Two roots found + } else if ($l == $n-1) { + $w = $this->H[$n][$n-1] * $this->H[$n-1][$n]; + $p = ($this->H[$n-1][$n-1] - $this->H[$n][$n]) / 2.0; + $q = $p * $p + $w; + $z = sqrt(abs($q)); + $this->H[$n][$n] = $this->H[$n][$n] + $exshift; + $this->H[$n-1][$n-1] = $this->H[$n-1][$n-1] + $exshift; + $x = $this->H[$n][$n]; + // Real pair + if ($q >= 0) { + if ($p >= 0) { + $z = $p + $z; + } else { + $z = $p - $z; + } + $this->d[$n-1] = $x + $z; + $this->d[$n] = $this->d[$n-1]; + if ($z != 0.0) { + $this->d[$n] = $x - $w / $z; + } + $this->e[$n-1] = 0.0; + $this->e[$n] = 0.0; + $x = $this->H[$n][$n-1]; + $s = abs($x) + abs($z); + $p = $x / $s; + $q = $z / $s; + $r = sqrt($p * $p + $q * $q); + $p = $p / $r; + $q = $q / $r; + // Row modification + for ($j = $n-1; $j < $nn; ++$j) { + $z = $this->H[$n-1][$j]; + $this->H[$n-1][$j] = $q * $z + $p * $this->H[$n][$j]; + $this->H[$n][$j] = $q * $this->H[$n][$j] - $p * $z; + } + // Column modification + for ($i = 0; $i <= n; ++$i) { + $z = $this->H[$i][$n-1]; + $this->H[$i][$n-1] = $q * $z + $p * $this->H[$i][$n]; + $this->H[$i][$n] = $q * $this->H[$i][$n] - $p * $z; + } + // Accumulate transformations + for ($i = $low; $i <= $high; ++$i) { + $z = $this->V[$i][$n-1]; + $this->V[$i][$n-1] = $q * $z + $p * $this->V[$i][$n]; + $this->V[$i][$n] = $q * $this->V[$i][$n] - $p * $z; + } + // Complex pair + } else { + $this->d[$n-1] = $x + $p; + $this->d[$n] = $x + $p; + $this->e[$n-1] = $z; + $this->e[$n] = -$z; + } + $n = $n - 2; + $iter = 0; + // No convergence yet + } else { + // Form shift + $x = $this->H[$n][$n]; + $y = 0.0; + $w = 0.0; + if ($l < $n) { + $y = $this->H[$n-1][$n-1]; + $w = $this->H[$n][$n-1] * $this->H[$n-1][$n]; + } + // Wilkinson's original ad hoc shift + if ($iter == 10) { + $exshift += $x; + for ($i = $low; $i <= $n; ++$i) { + $this->H[$i][$i] -= $x; + } + $s = abs($this->H[$n][$n-1]) + abs($this->H[$n-1][$n-2]); + $x = $y = 0.75 * $s; + $w = -0.4375 * $s * $s; + } + // MATLAB's new ad hoc shift + if ($iter == 30) { + $s = ($y - $x) / 2.0; + $s = $s * $s + $w; + if ($s > 0) { + $s = sqrt($s); + if ($y < $x) { + $s = -$s; + } + $s = $x - $w / (($y - $x) / 2.0 + $s); + for ($i = $low; $i <= $n; ++$i) { + $this->H[$i][$i] -= $s; + } + $exshift += $s; + $x = $y = $w = 0.964; + } + } + // Could check iteration count here. + $iter = $iter + 1; + // Look for two consecutive small sub-diagonal elements + $m = $n - 2; + while ($m >= $l) { + $z = $this->H[$m][$m]; + $r = $x - $z; + $s = $y - $z; + $p = ($r * $s - $w) / $this->H[$m+1][$m] + $this->H[$m][$m+1]; + $q = $this->H[$m+1][$m+1] - $z - $r - $s; + $r = $this->H[$m+2][$m+1]; + $s = abs($p) + abs($q) + abs($r); + $p = $p / $s; + $q = $q / $s; + $r = $r / $s; + if ($m == $l) { + break; + } + if (abs($this->H[$m][$m-1]) * (abs($q) + abs($r)) < + $eps * (abs($p) * (abs($this->H[$m-1][$m-1]) + abs($z) + abs($this->H[$m+1][$m+1])))) { + break; + } + --$m; + } + for ($i = $m + 2; $i <= $n; ++$i) { + $this->H[$i][$i-2] = 0.0; + if ($i > $m+2) { + $this->H[$i][$i-3] = 0.0; + } + } + // Double QR step involving rows l:n and columns m:n + for ($k = $m; $k <= $n-1; ++$k) { + $notlast = ($k != $n-1); + if ($k != $m) { + $p = $this->H[$k][$k-1]; + $q = $this->H[$k+1][$k-1]; + $r = ($notlast ? $this->H[$k+2][$k-1] : 0.0); + $x = abs($p) + abs($q) + abs($r); + if ($x != 0.0) { + $p = $p / $x; + $q = $q / $x; + $r = $r / $x; + } + } + if ($x == 0.0) { + break; + } + $s = sqrt($p * $p + $q * $q + $r * $r); + if ($p < 0) { + $s = -$s; + } + if ($s != 0) { + if ($k != $m) { + $this->H[$k][$k-1] = -$s * $x; + } elseif ($l != $m) { + $this->H[$k][$k-1] = -$this->H[$k][$k-1]; + } + $p = $p + $s; + $x = $p / $s; + $y = $q / $s; + $z = $r / $s; + $q = $q / $p; + $r = $r / $p; + // Row modification + for ($j = $k; $j < $nn; ++$j) { + $p = $this->H[$k][$j] + $q * $this->H[$k+1][$j]; + if ($notlast) { + $p = $p + $r * $this->H[$k+2][$j]; + $this->H[$k+2][$j] = $this->H[$k+2][$j] - $p * $z; + } + $this->H[$k][$j] = $this->H[$k][$j] - $p * $x; + $this->H[$k+1][$j] = $this->H[$k+1][$j] - $p * $y; + } + // Column modification + for ($i = 0; $i <= min($n, $k+3); ++$i) { + $p = $x * $this->H[$i][$k] + $y * $this->H[$i][$k+1]; + if ($notlast) { + $p = $p + $z * $this->H[$i][$k+2]; + $this->H[$i][$k+2] = $this->H[$i][$k+2] - $p * $r; + } + $this->H[$i][$k] = $this->H[$i][$k] - $p; + $this->H[$i][$k+1] = $this->H[$i][$k+1] - $p * $q; + } + // Accumulate transformations + for ($i = $low; $i <= $high; ++$i) { + $p = $x * $this->V[$i][$k] + $y * $this->V[$i][$k+1]; + if ($notlast) { + $p = $p + $z * $this->V[$i][$k+2]; + $this->V[$i][$k+2] = $this->V[$i][$k+2] - $p * $r; + } + $this->V[$i][$k] = $this->V[$i][$k] - $p; + $this->V[$i][$k+1] = $this->V[$i][$k+1] - $p * $q; + } + } // ($s != 0) + } // k loop + } // check convergence + } // while ($n >= $low) + + // Backsubstitute to find vectors of upper triangular form + if ($norm == 0.0) { + return; + } + + for ($n = $nn-1; $n >= 0; --$n) { + $p = $this->d[$n]; + $q = $this->e[$n]; + // Real vector + if ($q == 0) { + $l = $n; + $this->H[$n][$n] = 1.0; + for ($i = $n-1; $i >= 0; --$i) { + $w = $this->H[$i][$i] - $p; + $r = 0.0; + for ($j = $l; $j <= $n; ++$j) { + $r = $r + $this->H[$i][$j] * $this->H[$j][$n]; + } + if ($this->e[$i] < 0.0) { + $z = $w; + $s = $r; + } else { + $l = $i; + if ($this->e[$i] == 0.0) { + if ($w != 0.0) { + $this->H[$i][$n] = -$r / $w; + } else { + $this->H[$i][$n] = -$r / ($eps * $norm); + } + // Solve real equations + } else { + $x = $this->H[$i][$i+1]; + $y = $this->H[$i+1][$i]; + $q = ($this->d[$i] - $p) * ($this->d[$i] - $p) + $this->e[$i] * $this->e[$i]; + $t = ($x * $s - $z * $r) / $q; + $this->H[$i][$n] = $t; + if (abs($x) > abs($z)) { + $this->H[$i+1][$n] = (-$r - $w * $t) / $x; + } else { + $this->H[$i+1][$n] = (-$s - $y * $t) / $z; + } + } + // Overflow control + $t = abs($this->H[$i][$n]); + if (($eps * $t) * $t > 1) { + for ($j = $i; $j <= $n; ++$j) { + $this->H[$j][$n] = $this->H[$j][$n] / $t; + } + } + } + } + // Complex vector + } else if ($q < 0) { + $l = $n-1; + // Last vector component imaginary so matrix is triangular + if (abs($this->H[$n][$n-1]) > abs($this->H[$n-1][$n])) { + $this->H[$n-1][$n-1] = $q / $this->H[$n][$n-1]; + $this->H[$n-1][$n] = -($this->H[$n][$n] - $p) / $this->H[$n][$n-1]; + } else { + $this->cdiv(0.0, -$this->H[$n-1][$n], $this->H[$n-1][$n-1] - $p, $q); + $this->H[$n-1][$n-1] = $this->cdivr; + $this->H[$n-1][$n] = $this->cdivi; + } + $this->H[$n][$n-1] = 0.0; + $this->H[$n][$n] = 1.0; + for ($i = $n-2; $i >= 0; --$i) { + // double ra,sa,vr,vi; + $ra = 0.0; + $sa = 0.0; + for ($j = $l; $j <= $n; ++$j) { + $ra = $ra + $this->H[$i][$j] * $this->H[$j][$n-1]; + $sa = $sa + $this->H[$i][$j] * $this->H[$j][$n]; + } + $w = $this->H[$i][$i] - $p; + if ($this->e[$i] < 0.0) { + $z = $w; + $r = $ra; + $s = $sa; + } else { + $l = $i; + if ($this->e[$i] == 0) { + $this->cdiv(-$ra, -$sa, $w, $q); + $this->H[$i][$n-1] = $this->cdivr; + $this->H[$i][$n] = $this->cdivi; + } else { + // Solve complex equations + $x = $this->H[$i][$i+1]; + $y = $this->H[$i+1][$i]; + $vr = ($this->d[$i] - $p) * ($this->d[$i] - $p) + $this->e[$i] * $this->e[$i] - $q * $q; + $vi = ($this->d[$i] - $p) * 2.0 * $q; + if ($vr == 0.0 & $vi == 0.0) { + $vr = $eps * $norm * (abs($w) + abs($q) + abs($x) + abs($y) + abs($z)); + } + $this->cdiv($x * $r - $z * $ra + $q * $sa, $x * $s - $z * $sa - $q * $ra, $vr, $vi); + $this->H[$i][$n-1] = $this->cdivr; + $this->H[$i][$n] = $this->cdivi; + if (abs($x) > (abs($z) + abs($q))) { + $this->H[$i+1][$n-1] = (-$ra - $w * $this->H[$i][$n-1] + $q * $this->H[$i][$n]) / $x; + $this->H[$i+1][$n] = (-$sa - $w * $this->H[$i][$n] - $q * $this->H[$i][$n-1]) / $x; + } else { + $this->cdiv(-$r - $y * $this->H[$i][$n-1], -$s - $y * $this->H[$i][$n], $z, $q); + $this->H[$i+1][$n-1] = $this->cdivr; + $this->H[$i+1][$n] = $this->cdivi; + } + } + // Overflow control + $t = max(abs($this->H[$i][$n-1]),abs($this->H[$i][$n])); + if (($eps * $t) * $t > 1) { + for ($j = $i; $j <= $n; ++$j) { + $this->H[$j][$n-1] = $this->H[$j][$n-1] / $t; + $this->H[$j][$n] = $this->H[$j][$n] / $t; + } + } + } // end else + } // end for + } // end else for complex case + } // end for + + // Vectors of isolated roots + for ($i = 0; $i < $nn; ++$i) { + if ($i < $low | $i > $high) { + for ($j = $i; $j < $nn; ++$j) { + $this->V[$i][$j] = $this->H[$i][$j]; + } + } + } + + // Back transformation to get eigenvectors of original matrix + for ($j = $nn-1; $j >= $low; --$j) { + for ($i = $low; $i <= $high; ++$i) { + $z = 0.0; + for ($k = $low; $k <= min($j,$high); ++$k) { + $z = $z + $this->V[$i][$k] * $this->H[$k][$j]; + } + $this->V[$i][$j] = $z; + } + } + } // end hqr2 + + + /** + * Constructor: Check for symmetry, then construct the eigenvalue decomposition + * + * @access public + * @param A Square matrix + * @return Structure to access D and V. + */ + public function __construct($Arg) { + $this->A = $Arg->getArray(); + $this->n = $Arg->getColumnDimension(); + + $issymmetric = true; + for ($j = 0; ($j < $this->n) & $issymmetric; ++$j) { + for ($i = 0; ($i < $this->n) & $issymmetric; ++$i) { + $issymmetric = ($this->A[$i][$j] == $this->A[$j][$i]); + } + } + + if ($issymmetric) { + $this->V = $this->A; + // Tridiagonalize. + $this->tred2(); + // Diagonalize. + $this->tql2(); + } else { + $this->H = $this->A; + $this->ort = array(); + // Reduce to Hessenberg form. + $this->orthes(); + // Reduce Hessenberg to real Schur form. + $this->hqr2(); + } + } + + + /** + * Return the eigenvector matrix + * + * @access public + * @return V + */ + public function getV() { + return new Matrix($this->V, $this->n, $this->n); + } + + + /** + * Return the real parts of the eigenvalues + * + * @access public + * @return real(diag(D)) + */ + public function getRealEigenvalues() { + return $this->d; + } + + + /** + * Return the imaginary parts of the eigenvalues + * + * @access public + * @return imag(diag(D)) + */ + public function getImagEigenvalues() { + return $this->e; + } + + + /** + * Return the block diagonal eigenvalue matrix + * + * @access public + * @return D + */ + public function getD() { + for ($i = 0; $i < $this->n; ++$i) { + $D[$i] = array_fill(0, $this->n, 0.0); + $D[$i][$i] = $this->d[$i]; + if ($this->e[$i] == 0) { + continue; + } + $o = ($this->e[$i] > 0) ? $i + 1 : $i - 1; + $D[$i][$o] = $this->e[$i]; + } + return new Matrix($D); + } + +} // class EigenvalueDecomposition diff --git a/PHPExcel/Shared/JAMA/LUDecomposition.php b/PHPExcel/Shared/JAMA/LUDecomposition.php new file mode 100644 index 0000000..08e500c --- /dev/null +++ b/PHPExcel/Shared/JAMA/LUDecomposition.php @@ -0,0 +1,258 @@ +<?php +/** + * @package JAMA + * + * For an m-by-n matrix A with m >= n, the LU decomposition is an m-by-n + * unit lower triangular matrix L, an n-by-n upper triangular matrix U, + * and a permutation vector piv of length m so that A(piv,:) = L*U. + * If m < n, then L is m-by-m and U is m-by-n. + * + * The LU decompostion with pivoting always exists, even if the matrix is + * singular, so the constructor will never fail. The primary use of the + * LU decomposition is in the solution of square systems of simultaneous + * linear equations. This will fail if isNonsingular() returns false. + * + * @author Paul Meagher + * @author Bartosz Matosiuk + * @author Michael Bommarito + * @version 1.1 + * @license PHP v3.0 + */ +class PHPExcel_Shared_JAMA_LUDecomposition { + + const MatrixSingularException = "Can only perform operation on singular matrix."; + const MatrixSquareException = "Mismatched Row dimension"; + + /** + * Decomposition storage + * @var array + */ + private $LU = array(); + + /** + * Row dimension. + * @var int + */ + private $m; + + /** + * Column dimension. + * @var int + */ + private $n; + + /** + * Pivot sign. + * @var int + */ + private $pivsign; + + /** + * Internal storage of pivot vector. + * @var array + */ + private $piv = array(); + + + /** + * LU Decomposition constructor. + * + * @param $A Rectangular matrix + * @return Structure to access L, U and piv. + */ + public function __construct($A) { + if ($A instanceof PHPExcel_Shared_JAMA_Matrix) { + // Use a "left-looking", dot-product, Crout/Doolittle algorithm. + $this->LU = $A->getArray(); + $this->m = $A->getRowDimension(); + $this->n = $A->getColumnDimension(); + for ($i = 0; $i < $this->m; ++$i) { + $this->piv[$i] = $i; + } + $this->pivsign = 1; + $LUrowi = $LUcolj = array(); + + // Outer loop. + for ($j = 0; $j < $this->n; ++$j) { + // Make a copy of the j-th column to localize references. + for ($i = 0; $i < $this->m; ++$i) { + $LUcolj[$i] = &$this->LU[$i][$j]; + } + // Apply previous transformations. + for ($i = 0; $i < $this->m; ++$i) { + $LUrowi = $this->LU[$i]; + // Most of the time is spent in the following dot product. + $kmax = min($i,$j); + $s = 0.0; + for ($k = 0; $k < $kmax; ++$k) { + $s += $LUrowi[$k] * $LUcolj[$k]; + } + $LUrowi[$j] = $LUcolj[$i] -= $s; + } + // Find pivot and exchange if necessary. + $p = $j; + for ($i = $j+1; $i < $this->m; ++$i) { + if (abs($LUcolj[$i]) > abs($LUcolj[$p])) { + $p = $i; + } + } + if ($p != $j) { + for ($k = 0; $k < $this->n; ++$k) { + $t = $this->LU[$p][$k]; + $this->LU[$p][$k] = $this->LU[$j][$k]; + $this->LU[$j][$k] = $t; + } + $k = $this->piv[$p]; + $this->piv[$p] = $this->piv[$j]; + $this->piv[$j] = $k; + $this->pivsign = $this->pivsign * -1; + } + // Compute multipliers. + if (($j < $this->m) && ($this->LU[$j][$j] != 0.0)) { + for ($i = $j+1; $i < $this->m; ++$i) { + $this->LU[$i][$j] /= $this->LU[$j][$j]; + } + } + } + } else { + throw new PHPExcel_Calculation_Exception(PHPExcel_Shared_JAMA_Matrix::ArgumentTypeException); + } + } // function __construct() + + + /** + * Get lower triangular factor. + * + * @return array Lower triangular factor + */ + public function getL() { + for ($i = 0; $i < $this->m; ++$i) { + for ($j = 0; $j < $this->n; ++$j) { + if ($i > $j) { + $L[$i][$j] = $this->LU[$i][$j]; + } elseif ($i == $j) { + $L[$i][$j] = 1.0; + } else { + $L[$i][$j] = 0.0; + } + } + } + return new PHPExcel_Shared_JAMA_Matrix($L); + } // function getL() + + + /** + * Get upper triangular factor. + * + * @return array Upper triangular factor + */ + public function getU() { + for ($i = 0; $i < $this->n; ++$i) { + for ($j = 0; $j < $this->n; ++$j) { + if ($i <= $j) { + $U[$i][$j] = $this->LU[$i][$j]; + } else { + $U[$i][$j] = 0.0; + } + } + } + return new PHPExcel_Shared_JAMA_Matrix($U); + } // function getU() + + + /** + * Return pivot permutation vector. + * + * @return array Pivot vector + */ + public function getPivot() { + return $this->piv; + } // function getPivot() + + + /** + * Alias for getPivot + * + * @see getPivot + */ + public function getDoublePivot() { + return $this->getPivot(); + } // function getDoublePivot() + + + /** + * Is the matrix nonsingular? + * + * @return true if U, and hence A, is nonsingular. + */ + public function isNonsingular() { + for ($j = 0; $j < $this->n; ++$j) { + if ($this->LU[$j][$j] == 0) { + return false; + } + } + return true; + } // function isNonsingular() + + + /** + * Count determinants + * + * @return array d matrix deterninat + */ + public function det() { + if ($this->m == $this->n) { + $d = $this->pivsign; + for ($j = 0; $j < $this->n; ++$j) { + $d *= $this->LU[$j][$j]; + } + return $d; + } else { + throw new PHPExcel_Calculation_Exception(PHPExcel_Shared_JAMA_Matrix::MatrixDimensionException); + } + } // function det() + + + /** + * Solve A*X = B + * + * @param $B A Matrix with as many rows as A and any number of columns. + * @return X so that L*U*X = B(piv,:) + * @PHPExcel_Calculation_Exception IllegalArgumentException Matrix row dimensions must agree. + * @PHPExcel_Calculation_Exception RuntimeException Matrix is singular. + */ + public function solve($B) { + if ($B->getRowDimension() == $this->m) { + if ($this->isNonsingular()) { + // Copy right hand side with pivoting + $nx = $B->getColumnDimension(); + $X = $B->getMatrix($this->piv, 0, $nx-1); + // Solve L*Y = B(piv,:) + for ($k = 0; $k < $this->n; ++$k) { + for ($i = $k+1; $i < $this->n; ++$i) { + for ($j = 0; $j < $nx; ++$j) { + $X->A[$i][$j] -= $X->A[$k][$j] * $this->LU[$i][$k]; + } + } + } + // Solve U*X = Y; + for ($k = $this->n-1; $k >= 0; --$k) { + for ($j = 0; $j < $nx; ++$j) { + $X->A[$k][$j] /= $this->LU[$k][$k]; + } + for ($i = 0; $i < $k; ++$i) { + for ($j = 0; $j < $nx; ++$j) { + $X->A[$i][$j] -= $X->A[$k][$j] * $this->LU[$i][$k]; + } + } + } + return $X; + } else { + throw new PHPExcel_Calculation_Exception(self::MatrixSingularException); + } + } else { + throw new PHPExcel_Calculation_Exception(self::MatrixSquareException); + } + } // function solve() + +} // class PHPExcel_Shared_JAMA_LUDecomposition diff --git a/PHPExcel/Shared/JAMA/Matrix.php b/PHPExcel/Shared/JAMA/Matrix.php new file mode 100644 index 0000000..b893a44 --- /dev/null +++ b/PHPExcel/Shared/JAMA/Matrix.php @@ -0,0 +1,1059 @@ +<?php +/** + * @package JAMA + */ + +/** PHPExcel root directory */ +if (!defined('PHPEXCEL_ROOT')) { + /** + * @ignore + */ + define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../../'); + require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); +} + + +/* + * Matrix class + * + * @author Paul Meagher + * @author Michael Bommarito + * @author Lukasz Karapuda + * @author Bartek Matosiuk + * @version 1.8 + * @license PHP v3.0 + * @see http://math.nist.gov/javanumerics/jama/ + */ +class PHPExcel_Shared_JAMA_Matrix { + + + const PolymorphicArgumentException = "Invalid argument pattern for polymorphic function."; + const ArgumentTypeException = "Invalid argument type."; + const ArgumentBoundsException = "Invalid argument range."; + const MatrixDimensionException = "Matrix dimensions are not equal."; + const ArrayLengthException = "Array length must be a multiple of m."; + + /** + * Matrix storage + * + * @var array + * @access public + */ + public $A = array(); + + /** + * Matrix row dimension + * + * @var int + * @access private + */ + private $m; + + /** + * Matrix column dimension + * + * @var int + * @access private + */ + private $n; + + + /** + * Polymorphic constructor + * + * As PHP has no support for polymorphic constructors, we hack our own sort of polymorphism using func_num_args, func_get_arg, and gettype. In essence, we're just implementing a simple RTTI filter and calling the appropriate constructor. + */ + public function __construct() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + //Rectangular matrix - m x n initialized from 2D array + case 'array': + $this->m = count($args[0]); + $this->n = count($args[0][0]); + $this->A = $args[0]; + break; + //Square matrix - n x n + case 'integer': + $this->m = $args[0]; + $this->n = $args[0]; + $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0)); + break; + //Rectangular matrix - m x n + case 'integer,integer': + $this->m = $args[0]; + $this->n = $args[1]; + $this->A = array_fill(0, $this->m, array_fill(0, $this->n, 0)); + break; + //Rectangular matrix - m x n initialized from packed array + case 'array,integer': + $this->m = $args[1]; + if ($this->m != 0) { + $this->n = count($args[0]) / $this->m; + } else { + $this->n = 0; + } + if (($this->m * $this->n) == count($args[0])) { + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $this->A[$i][$j] = $args[0][$i + $j * $this->m]; + } + } + } else { + throw new PHPExcel_Calculation_Exception(self::ArrayLengthException); + } + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function __construct() + + + /** + * getArray + * + * @return array Matrix array + */ + public function getArray() { + return $this->A; + } // function getArray() + + + /** + * getRowDimension + * + * @return int Row dimension + */ + public function getRowDimension() { + return $this->m; + } // function getRowDimension() + + + /** + * getColumnDimension + * + * @return int Column dimension + */ + public function getColumnDimension() { + return $this->n; + } // function getColumnDimension() + + + /** + * get + * + * Get the i,j-th element of the matrix. + * @param int $i Row position + * @param int $j Column position + * @return mixed Element (int/float/double) + */ + public function get($i = null, $j = null) { + return $this->A[$i][$j]; + } // function get() + + + /** + * getMatrix + * + * Get a submatrix + * @param int $i0 Initial row index + * @param int $iF Final row index + * @param int $j0 Initial column index + * @param int $jF Final column index + * @return Matrix Submatrix + */ + public function getMatrix() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + //A($i0...; $j0...) + case 'integer,integer': + list($i0, $j0) = $args; + if ($i0 >= 0) { $m = $this->m - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + if ($j0 >= 0) { $n = $this->n - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + $R = new PHPExcel_Shared_JAMA_Matrix($m, $n); + for($i = $i0; $i < $this->m; ++$i) { + for($j = $j0; $j < $this->n; ++$j) { + $R->set($i, $j, $this->A[$i][$j]); + } + } + return $R; + break; + //A($i0...$iF; $j0...$jF) + case 'integer,integer,integer,integer': + list($i0, $iF, $j0, $jF) = $args; + if (($iF > $i0) && ($this->m >= $iF) && ($i0 >= 0)) { $m = $iF - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + if (($jF > $j0) && ($this->n >= $jF) && ($j0 >= 0)) { $n = $jF - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + $R = new PHPExcel_Shared_JAMA_Matrix($m+1, $n+1); + for($i = $i0; $i <= $iF; ++$i) { + for($j = $j0; $j <= $jF; ++$j) { + $R->set($i - $i0, $j - $j0, $this->A[$i][$j]); + } + } + return $R; + break; + //$R = array of row indices; $C = array of column indices + case 'array,array': + list($RL, $CL) = $args; + if (count($RL) > 0) { $m = count($RL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + if (count($CL) > 0) { $n = count($CL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + $R = new PHPExcel_Shared_JAMA_Matrix($m, $n); + for($i = 0; $i < $m; ++$i) { + for($j = 0; $j < $n; ++$j) { + $R->set($i - $i0, $j - $j0, $this->A[$RL[$i]][$CL[$j]]); + } + } + return $R; + break; + //$RL = array of row indices; $CL = array of column indices + case 'array,array': + list($RL, $CL) = $args; + if (count($RL) > 0) { $m = count($RL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + if (count($CL) > 0) { $n = count($CL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + $R = new PHPExcel_Shared_JAMA_Matrix($m, $n); + for($i = 0; $i < $m; ++$i) { + for($j = 0; $j < $n; ++$j) { + $R->set($i, $j, $this->A[$RL[$i]][$CL[$j]]); + } + } + return $R; + break; + //A($i0...$iF); $CL = array of column indices + case 'integer,integer,array': + list($i0, $iF, $CL) = $args; + if (($iF > $i0) && ($this->m >= $iF) && ($i0 >= 0)) { $m = $iF - $i0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + if (count($CL) > 0) { $n = count($CL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + $R = new PHPExcel_Shared_JAMA_Matrix($m, $n); + for($i = $i0; $i < $iF; ++$i) { + for($j = 0; $j < $n; ++$j) { + $R->set($i - $i0, $j, $this->A[$RL[$i]][$j]); + } + } + return $R; + break; + //$RL = array of row indices + case 'array,integer,integer': + list($RL, $j0, $jF) = $args; + if (count($RL) > 0) { $m = count($RL); } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + if (($jF >= $j0) && ($this->n >= $jF) && ($j0 >= 0)) { $n = $jF - $j0; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentBoundsException); } + $R = new PHPExcel_Shared_JAMA_Matrix($m, $n+1); + for($i = 0; $i < $m; ++$i) { + for($j = $j0; $j <= $jF; ++$j) { + $R->set($i, $j - $j0, $this->A[$RL[$i]][$j]); + } + } + return $R; + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function getMatrix() + + + /** + * checkMatrixDimensions + * + * Is matrix B the same size? + * @param Matrix $B Matrix B + * @return boolean + */ + public function checkMatrixDimensions($B = null) { + if ($B instanceof PHPExcel_Shared_JAMA_Matrix) { + if (($this->m == $B->getRowDimension()) && ($this->n == $B->getColumnDimension())) { + return true; + } else { + throw new PHPExcel_Calculation_Exception(self::MatrixDimensionException); + } + } else { + throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); + } + } // function checkMatrixDimensions() + + + + /** + * set + * + * Set the i,j-th element of the matrix. + * @param int $i Row position + * @param int $j Column position + * @param mixed $c Int/float/double value + * @return mixed Element (int/float/double) + */ + public function set($i = null, $j = null, $c = null) { + // Optimized set version just has this + $this->A[$i][$j] = $c; + } // function set() + + + /** + * identity + * + * Generate an identity matrix. + * @param int $m Row dimension + * @param int $n Column dimension + * @return Matrix Identity matrix + */ + public function identity($m = null, $n = null) { + return $this->diagonal($m, $n, 1); + } // function identity() + + + /** + * diagonal + * + * Generate a diagonal matrix + * @param int $m Row dimension + * @param int $n Column dimension + * @param mixed $c Diagonal value + * @return Matrix Diagonal matrix + */ + public function diagonal($m = null, $n = null, $c = 1) { + $R = new PHPExcel_Shared_JAMA_Matrix($m, $n); + for($i = 0; $i < $m; ++$i) { + $R->set($i, $i, $c); + } + return $R; + } // function diagonal() + + + /** + * getMatrixByRow + * + * Get a submatrix by row index/range + * @param int $i0 Initial row index + * @param int $iF Final row index + * @return Matrix Submatrix + */ + public function getMatrixByRow($i0 = null, $iF = null) { + if (is_int($i0)) { + if (is_int($iF)) { + return $this->getMatrix($i0, 0, $iF + 1, $this->n); + } else { + return $this->getMatrix($i0, 0, $i0 + 1, $this->n); + } + } else { + throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); + } + } // function getMatrixByRow() + + + /** + * getMatrixByCol + * + * Get a submatrix by column index/range + * @param int $i0 Initial column index + * @param int $iF Final column index + * @return Matrix Submatrix + */ + public function getMatrixByCol($j0 = null, $jF = null) { + if (is_int($j0)) { + if (is_int($jF)) { + return $this->getMatrix(0, $j0, $this->m, $jF + 1); + } else { + return $this->getMatrix(0, $j0, $this->m, $j0 + 1); + } + } else { + throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); + } + } // function getMatrixByCol() + + + /** + * transpose + * + * Tranpose matrix + * @return Matrix Transposed matrix + */ + public function transpose() { + $R = new PHPExcel_Shared_JAMA_Matrix($this->n, $this->m); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $R->set($j, $i, $this->A[$i][$j]); + } + } + return $R; + } // function transpose() + + + /** + * trace + * + * Sum of diagonal elements + * @return float Sum of diagonal elements + */ + public function trace() { + $s = 0; + $n = min($this->m, $this->n); + for($i = 0; $i < $n; ++$i) { + $s += $this->A[$i][$i]; + } + return $s; + } // function trace() + + + /** + * uminus + * + * Unary minus matrix -A + * @return Matrix Unary minus matrix + */ + public function uminus() { + } // function uminus() + + + /** + * plus + * + * A + B + * @param mixed $B Matrix/Array + * @return Matrix Sum + */ + public function plus() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $M->set($i, $j, $M->get($i, $j) + $this->A[$i][$j]); + } + } + return $M; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function plus() + + + /** + * plusEquals + * + * A = A + B + * @param mixed $B Matrix/Array + * @return Matrix Sum + */ + public function plusEquals() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $validValues = True; + $value = $M->get($i, $j); + if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) { + $this->A[$i][$j] = trim($this->A[$i][$j],'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]); + } + if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) { + $value = trim($value,'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value); + } + if ($validValues) { + $this->A[$i][$j] += $value; + } else { + $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN(); + } + } + } + return $this; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function plusEquals() + + + /** + * minus + * + * A - B + * @param mixed $B Matrix/Array + * @return Matrix Sum + */ + public function minus() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $M->set($i, $j, $M->get($i, $j) - $this->A[$i][$j]); + } + } + return $M; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function minus() + + + /** + * minusEquals + * + * A = A - B + * @param mixed $B Matrix/Array + * @return Matrix Sum + */ + public function minusEquals() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $validValues = True; + $value = $M->get($i, $j); + if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) { + $this->A[$i][$j] = trim($this->A[$i][$j],'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]); + } + if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) { + $value = trim($value,'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value); + } + if ($validValues) { + $this->A[$i][$j] -= $value; + } else { + $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN(); + } + } + } + return $this; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function minusEquals() + + + /** + * arrayTimes + * + * Element-by-element multiplication + * Cij = Aij * Bij + * @param mixed $B Matrix/Array + * @return Matrix Matrix Cij + */ + public function arrayTimes() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $M->set($i, $j, $M->get($i, $j) * $this->A[$i][$j]); + } + } + return $M; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function arrayTimes() + + + /** + * arrayTimesEquals + * + * Element-by-element multiplication + * Aij = Aij * Bij + * @param mixed $B Matrix/Array + * @return Matrix Matrix Aij + */ + public function arrayTimesEquals() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $validValues = True; + $value = $M->get($i, $j); + if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) { + $this->A[$i][$j] = trim($this->A[$i][$j],'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]); + } + if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) { + $value = trim($value,'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value); + } + if ($validValues) { + $this->A[$i][$j] *= $value; + } else { + $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN(); + } + } + } + return $this; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function arrayTimesEquals() + + + /** + * arrayRightDivide + * + * Element-by-element right division + * A / B + * @param Matrix $B Matrix B + * @return Matrix Division result + */ + public function arrayRightDivide() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $validValues = True; + $value = $M->get($i, $j); + if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) { + $this->A[$i][$j] = trim($this->A[$i][$j],'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]); + } + if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) { + $value = trim($value,'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value); + } + if ($validValues) { + if ($value == 0) { + // Trap for Divide by Zero error + $M->set($i, $j, '#DIV/0!'); + } else { + $M->set($i, $j, $this->A[$i][$j] / $value); + } + } else { + $M->set($i, $j, PHPExcel_Calculation_Functions::NaN()); + } + } + } + return $M; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function arrayRightDivide() + + + /** + * arrayRightDivideEquals + * + * Element-by-element right division + * Aij = Aij / Bij + * @param mixed $B Matrix/Array + * @return Matrix Matrix Aij + */ + public function arrayRightDivideEquals() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $this->A[$i][$j] = $this->A[$i][$j] / $M->get($i, $j); + } + } + return $M; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function arrayRightDivideEquals() + + + /** + * arrayLeftDivide + * + * Element-by-element Left division + * A / B + * @param Matrix $B Matrix B + * @return Matrix Division result + */ + public function arrayLeftDivide() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $M->set($i, $j, $M->get($i, $j) / $this->A[$i][$j]); + } + } + return $M; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function arrayLeftDivide() + + + /** + * arrayLeftDivideEquals + * + * Element-by-element Left division + * Aij = Aij / Bij + * @param mixed $B Matrix/Array + * @return Matrix Matrix Aij + */ + public function arrayLeftDivideEquals() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $this->A[$i][$j] = $M->get($i, $j) / $this->A[$i][$j]; + } + } + return $M; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function arrayLeftDivideEquals() + + + /** + * times + * + * Matrix multiplication + * @param mixed $n Matrix/Array/Scalar + * @return Matrix Product + */ + public function times() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $B = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + if ($this->n == $B->m) { + $C = new PHPExcel_Shared_JAMA_Matrix($this->m, $B->n); + for($j = 0; $j < $B->n; ++$j) { + for ($k = 0; $k < $this->n; ++$k) { + $Bcolj[$k] = $B->A[$k][$j]; + } + for($i = 0; $i < $this->m; ++$i) { + $Arowi = $this->A[$i]; + $s = 0; + for($k = 0; $k < $this->n; ++$k) { + $s += $Arowi[$k] * $Bcolj[$k]; + } + $C->A[$i][$j] = $s; + } + } + return $C; + } else { + throw new PHPExcel_Calculation_Exception(JAMAError(MatrixDimensionMismatch)); + } + break; + case 'array': + $B = new PHPExcel_Shared_JAMA_Matrix($args[0]); + if ($this->n == $B->m) { + $C = new PHPExcel_Shared_JAMA_Matrix($this->m, $B->n); + for($i = 0; $i < $C->m; ++$i) { + for($j = 0; $j < $C->n; ++$j) { + $s = "0"; + for($k = 0; $k < $C->n; ++$k) { + $s += $this->A[$i][$k] * $B->A[$k][$j]; + } + $C->A[$i][$j] = $s; + } + } + return $C; + } else { + throw new PHPExcel_Calculation_Exception(JAMAError(MatrixDimensionMismatch)); + } + return $M; + break; + case 'integer': + $C = new PHPExcel_Shared_JAMA_Matrix($this->A); + for($i = 0; $i < $C->m; ++$i) { + for($j = 0; $j < $C->n; ++$j) { + $C->A[$i][$j] *= $args[0]; + } + } + return $C; + break; + case 'double': + $C = new PHPExcel_Shared_JAMA_Matrix($this->m, $this->n); + for($i = 0; $i < $C->m; ++$i) { + for($j = 0; $j < $C->n; ++$j) { + $C->A[$i][$j] = $args[0] * $this->A[$i][$j]; + } + } + return $C; + break; + case 'float': + $C = new PHPExcel_Shared_JAMA_Matrix($this->A); + for($i = 0; $i < $C->m; ++$i) { + for($j = 0; $j < $C->n; ++$j) { + $C->A[$i][$j] *= $args[0]; + } + } + return $C; + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function times() + + + /** + * power + * + * A = A ^ B + * @param mixed $B Matrix/Array + * @return Matrix Sum + */ + public function power() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + break; + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $validValues = True; + $value = $M->get($i, $j); + if ((is_string($this->A[$i][$j])) && (strlen($this->A[$i][$j]) > 0) && (!is_numeric($this->A[$i][$j]))) { + $this->A[$i][$j] = trim($this->A[$i][$j],'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($this->A[$i][$j]); + } + if ((is_string($value)) && (strlen($value) > 0) && (!is_numeric($value))) { + $value = trim($value,'"'); + $validValues &= PHPExcel_Shared_String::convertToNumberIfFraction($value); + } + if ($validValues) { + $this->A[$i][$j] = pow($this->A[$i][$j],$value); + } else { + $this->A[$i][$j] = PHPExcel_Calculation_Functions::NaN(); + } + } + } + return $this; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function power() + + + /** + * concat + * + * A = A & B + * @param mixed $B Matrix/Array + * @return Matrix Sum + */ + public function concat() { + if (func_num_args() > 0) { + $args = func_get_args(); + $match = implode(",", array_map('gettype', $args)); + + switch($match) { + case 'object': + if ($args[0] instanceof PHPExcel_Shared_JAMA_Matrix) { $M = $args[0]; } else { throw new PHPExcel_Calculation_Exception(self::ArgumentTypeException); } + case 'array': + $M = new PHPExcel_Shared_JAMA_Matrix($args[0]); + break; + default: + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + break; + } + $this->checkMatrixDimensions($M); + for($i = 0; $i < $this->m; ++$i) { + for($j = 0; $j < $this->n; ++$j) { + $this->A[$i][$j] = trim($this->A[$i][$j],'"').trim($M->get($i, $j),'"'); + } + } + return $this; + } else { + throw new PHPExcel_Calculation_Exception(self::PolymorphicArgumentException); + } + } // function concat() + + + /** + * Solve A*X = B. + * + * @param Matrix $B Right hand side + * @return Matrix ... Solution if A is square, least squares solution otherwise + */ + public function solve($B) { + if ($this->m == $this->n) { + $LU = new PHPExcel_Shared_JAMA_LUDecomposition($this); + return $LU->solve($B); + } else { + $QR = new QRDecomposition($this); + return $QR->solve($B); + } + } // function solve() + + + /** + * Matrix inverse or pseudoinverse. + * + * @return Matrix ... Inverse(A) if A is square, pseudoinverse otherwise. + */ + public function inverse() { + return $this->solve($this->identity($this->m, $this->m)); + } // function inverse() + + + /** + * det + * + * Calculate determinant + * @return float Determinant + */ + public function det() { + $L = new PHPExcel_Shared_JAMA_LUDecomposition($this); + return $L->det(); + } // function det() + + +} // class PHPExcel_Shared_JAMA_Matrix diff --git a/PHPExcel/Shared/JAMA/QRDecomposition.php b/PHPExcel/Shared/JAMA/QRDecomposition.php new file mode 100644 index 0000000..7538462 --- /dev/null +++ b/PHPExcel/Shared/JAMA/QRDecomposition.php @@ -0,0 +1,234 @@ +<?php +/** + * @package JAMA + * + * For an m-by-n matrix A with m >= n, the QR decomposition is an m-by-n + * orthogonal matrix Q and an n-by-n upper triangular matrix R so that + * A = Q*R. + * + * The QR decompostion always exists, even if the matrix does not have + * full rank, so the constructor will never fail. The primary use of the + * QR decomposition is in the least squares solution of nonsquare systems + * of simultaneous linear equations. This will fail if isFullRank() + * returns false. + * + * @author Paul Meagher + * @license PHP v3.0 + * @version 1.1 + */ +class PHPExcel_Shared_JAMA_QRDecomposition { + + const MatrixRankException = "Can only perform operation on full-rank matrix."; + + /** + * Array for internal storage of decomposition. + * @var array + */ + private $QR = array(); + + /** + * Row dimension. + * @var integer + */ + private $m; + + /** + * Column dimension. + * @var integer + */ + private $n; + + /** + * Array for internal storage of diagonal of R. + * @var array + */ + private $Rdiag = array(); + + + /** + * QR Decomposition computed by Householder reflections. + * + * @param matrix $A Rectangular matrix + * @return Structure to access R and the Householder vectors and compute Q. + */ + public function __construct($A) { + if($A instanceof PHPExcel_Shared_JAMA_Matrix) { + // Initialize. + $this->QR = $A->getArrayCopy(); + $this->m = $A->getRowDimension(); + $this->n = $A->getColumnDimension(); + // Main loop. + for ($k = 0; $k < $this->n; ++$k) { + // Compute 2-norm of k-th column without under/overflow. + $nrm = 0.0; + for ($i = $k; $i < $this->m; ++$i) { + $nrm = hypo($nrm, $this->QR[$i][$k]); + } + if ($nrm != 0.0) { + // Form k-th Householder vector. + if ($this->QR[$k][$k] < 0) { + $nrm = -$nrm; + } + for ($i = $k; $i < $this->m; ++$i) { + $this->QR[$i][$k] /= $nrm; + } + $this->QR[$k][$k] += 1.0; + // Apply transformation to remaining columns. + for ($j = $k+1; $j < $this->n; ++$j) { + $s = 0.0; + for ($i = $k; $i < $this->m; ++$i) { + $s += $this->QR[$i][$k] * $this->QR[$i][$j]; + } + $s = -$s/$this->QR[$k][$k]; + for ($i = $k; $i < $this->m; ++$i) { + $this->QR[$i][$j] += $s * $this->QR[$i][$k]; + } + } + } + $this->Rdiag[$k] = -$nrm; + } + } else { + throw new PHPExcel_Calculation_Exception(PHPExcel_Shared_JAMA_Matrix::ArgumentTypeException); + } + } // function __construct() + + + /** + * Is the matrix full rank? + * + * @return boolean true if R, and hence A, has full rank, else false. + */ + public function isFullRank() { + for ($j = 0; $j < $this->n; ++$j) { + if ($this->Rdiag[$j] == 0) { + return false; + } + } + return true; + } // function isFullRank() + + + /** + * Return the Householder vectors + * + * @return Matrix Lower trapezoidal matrix whose columns define the reflections + */ + public function getH() { + for ($i = 0; $i < $this->m; ++$i) { + for ($j = 0; $j < $this->n; ++$j) { + if ($i >= $j) { + $H[$i][$j] = $this->QR[$i][$j]; + } else { + $H[$i][$j] = 0.0; + } + } + } + return new PHPExcel_Shared_JAMA_Matrix($H); + } // function getH() + + + /** + * Return the upper triangular factor + * + * @return Matrix upper triangular factor + */ + public function getR() { + for ($i = 0; $i < $this->n; ++$i) { + for ($j = 0; $j < $this->n; ++$j) { + if ($i < $j) { + $R[$i][$j] = $this->QR[$i][$j]; + } elseif ($i == $j) { + $R[$i][$j] = $this->Rdiag[$i]; + } else { + $R[$i][$j] = 0.0; + } + } + } + return new PHPExcel_Shared_JAMA_Matrix($R); + } // function getR() + + + /** + * Generate and return the (economy-sized) orthogonal factor + * + * @return Matrix orthogonal factor + */ + public function getQ() { + for ($k = $this->n-1; $k >= 0; --$k) { + for ($i = 0; $i < $this->m; ++$i) { + $Q[$i][$k] = 0.0; + } + $Q[$k][$k] = 1.0; + for ($j = $k; $j < $this->n; ++$j) { + if ($this->QR[$k][$k] != 0) { + $s = 0.0; + for ($i = $k; $i < $this->m; ++$i) { + $s += $this->QR[$i][$k] * $Q[$i][$j]; + } + $s = -$s/$this->QR[$k][$k]; + for ($i = $k; $i < $this->m; ++$i) { + $Q[$i][$j] += $s * $this->QR[$i][$k]; + } + } + } + } + /* + for($i = 0; $i < count($Q); ++$i) { + for($j = 0; $j < count($Q); ++$j) { + if(! isset($Q[$i][$j]) ) { + $Q[$i][$j] = 0; + } + } + } + */ + return new PHPExcel_Shared_JAMA_Matrix($Q); + } // function getQ() + + + /** + * Least squares solution of A*X = B + * + * @param Matrix $B A Matrix with as many rows as A and any number of columns. + * @return Matrix Matrix that minimizes the two norm of Q*R*X-B. + */ + public function solve($B) { + if ($B->getRowDimension() == $this->m) { + if ($this->isFullRank()) { + // Copy right hand side + $nx = $B->getColumnDimension(); + $X = $B->getArrayCopy(); + // Compute Y = transpose(Q)*B + for ($k = 0; $k < $this->n; ++$k) { + for ($j = 0; $j < $nx; ++$j) { + $s = 0.0; + for ($i = $k; $i < $this->m; ++$i) { + $s += $this->QR[$i][$k] * $X[$i][$j]; + } + $s = -$s/$this->QR[$k][$k]; + for ($i = $k; $i < $this->m; ++$i) { + $X[$i][$j] += $s * $this->QR[$i][$k]; + } + } + } + // Solve R*X = Y; + for ($k = $this->n-1; $k >= 0; --$k) { + for ($j = 0; $j < $nx; ++$j) { + $X[$k][$j] /= $this->Rdiag[$k]; + } + for ($i = 0; $i < $k; ++$i) { + for ($j = 0; $j < $nx; ++$j) { + $X[$i][$j] -= $X[$k][$j]* $this->QR[$i][$k]; + } + } + } + $X = new PHPExcel_Shared_JAMA_Matrix($X); + return ($X->getMatrix(0, $this->n-1, 0, $nx)); + } else { + throw new PHPExcel_Calculation_Exception(self::MatrixRankException); + } + } else { + throw new PHPExcel_Calculation_Exception(PHPExcel_Shared_JAMA_Matrix::MatrixDimensionException); + } + } // function solve() + +} // PHPExcel_Shared_JAMA_class QRDecomposition diff --git a/PHPExcel/Shared/JAMA/SingularValueDecomposition.php b/PHPExcel/Shared/JAMA/SingularValueDecomposition.php new file mode 100644 index 0000000..a4b096c --- /dev/null +++ b/PHPExcel/Shared/JAMA/SingularValueDecomposition.php @@ -0,0 +1,526 @@ +<?php +/** + * @package JAMA + * + * For an m-by-n matrix A with m >= n, the singular value decomposition is + * an m-by-n orthogonal matrix U, an n-by-n diagonal matrix S, and + * an n-by-n orthogonal matrix V so that A = U*S*V'. + * + * The singular values, sigma[$k] = S[$k][$k], are ordered so that + * sigma[0] >= sigma[1] >= ... >= sigma[n-1]. + * + * The singular value decompostion always exists, so the constructor will + * never fail. The matrix condition number and the effective numerical + * rank can be computed from this decomposition. + * + * @author Paul Meagher + * @license PHP v3.0 + * @version 1.1 + */ +class SingularValueDecomposition { + + /** + * Internal storage of U. + * @var array + */ + private $U = array(); + + /** + * Internal storage of V. + * @var array + */ + private $V = array(); + + /** + * Internal storage of singular values. + * @var array + */ + private $s = array(); + + /** + * Row dimension. + * @var int + */ + private $m; + + /** + * Column dimension. + * @var int + */ + private $n; + + + /** + * Construct the singular value decomposition + * + * Derived from LINPACK code. + * + * @param $A Rectangular matrix + * @return Structure to access U, S and V. + */ + public function __construct($Arg) { + + // Initialize. + $A = $Arg->getArrayCopy(); + $this->m = $Arg->getRowDimension(); + $this->n = $Arg->getColumnDimension(); + $nu = min($this->m, $this->n); + $e = array(); + $work = array(); + $wantu = true; + $wantv = true; + $nct = min($this->m - 1, $this->n); + $nrt = max(0, min($this->n - 2, $this->m)); + + // Reduce A to bidiagonal form, storing the diagonal elements + // in s and the super-diagonal elements in e. + for ($k = 0; $k < max($nct,$nrt); ++$k) { + + if ($k < $nct) { + // Compute the transformation for the k-th column and + // place the k-th diagonal in s[$k]. + // Compute 2-norm of k-th column without under/overflow. + $this->s[$k] = 0; + for ($i = $k; $i < $this->m; ++$i) { + $this->s[$k] = hypo($this->s[$k], $A[$i][$k]); + } + if ($this->s[$k] != 0.0) { + if ($A[$k][$k] < 0.0) { + $this->s[$k] = -$this->s[$k]; + } + for ($i = $k; $i < $this->m; ++$i) { + $A[$i][$k] /= $this->s[$k]; + } + $A[$k][$k] += 1.0; + } + $this->s[$k] = -$this->s[$k]; + } + + for ($j = $k + 1; $j < $this->n; ++$j) { + if (($k < $nct) & ($this->s[$k] != 0.0)) { + // Apply the transformation. + $t = 0; + for ($i = $k; $i < $this->m; ++$i) { + $t += $A[$i][$k] * $A[$i][$j]; + } + $t = -$t / $A[$k][$k]; + for ($i = $k; $i < $this->m; ++$i) { + $A[$i][$j] += $t * $A[$i][$k]; + } + // Place the k-th row of A into e for the + // subsequent calculation of the row transformation. + $e[$j] = $A[$k][$j]; + } + } + + if ($wantu AND ($k < $nct)) { + // Place the transformation in U for subsequent back + // multiplication. + for ($i = $k; $i < $this->m; ++$i) { + $this->U[$i][$k] = $A[$i][$k]; + } + } + + if ($k < $nrt) { + // Compute the k-th row transformation and place the + // k-th super-diagonal in e[$k]. + // Compute 2-norm without under/overflow. + $e[$k] = 0; + for ($i = $k + 1; $i < $this->n; ++$i) { + $e[$k] = hypo($e[$k], $e[$i]); + } + if ($e[$k] != 0.0) { + if ($e[$k+1] < 0.0) { + $e[$k] = -$e[$k]; + } + for ($i = $k + 1; $i < $this->n; ++$i) { + $e[$i] /= $e[$k]; + } + $e[$k+1] += 1.0; + } + $e[$k] = -$e[$k]; + if (($k+1 < $this->m) AND ($e[$k] != 0.0)) { + // Apply the transformation. + for ($i = $k+1; $i < $this->m; ++$i) { + $work[$i] = 0.0; + } + for ($j = $k+1; $j < $this->n; ++$j) { + for ($i = $k+1; $i < $this->m; ++$i) { + $work[$i] += $e[$j] * $A[$i][$j]; + } + } + for ($j = $k + 1; $j < $this->n; ++$j) { + $t = -$e[$j] / $e[$k+1]; + for ($i = $k + 1; $i < $this->m; ++$i) { + $A[$i][$j] += $t * $work[$i]; + } + } + } + if ($wantv) { + // Place the transformation in V for subsequent + // back multiplication. + for ($i = $k + 1; $i < $this->n; ++$i) { + $this->V[$i][$k] = $e[$i]; + } + } + } + } + + // Set up the final bidiagonal matrix or order p. + $p = min($this->n, $this->m + 1); + if ($nct < $this->n) { + $this->s[$nct] = $A[$nct][$nct]; + } + if ($this->m < $p) { + $this->s[$p-1] = 0.0; + } + if ($nrt + 1 < $p) { + $e[$nrt] = $A[$nrt][$p-1]; + } + $e[$p-1] = 0.0; + // If required, generate U. + if ($wantu) { + for ($j = $nct; $j < $nu; ++$j) { + for ($i = 0; $i < $this->m; ++$i) { + $this->U[$i][$j] = 0.0; + } + $this->U[$j][$j] = 1.0; + } + for ($k = $nct - 1; $k >= 0; --$k) { + if ($this->s[$k] != 0.0) { + for ($j = $k + 1; $j < $nu; ++$j) { + $t = 0; + for ($i = $k; $i < $this->m; ++$i) { + $t += $this->U[$i][$k] * $this->U[$i][$j]; + } + $t = -$t / $this->U[$k][$k]; + for ($i = $k; $i < $this->m; ++$i) { + $this->U[$i][$j] += $t * $this->U[$i][$k]; + } + } + for ($i = $k; $i < $this->m; ++$i ) { + $this->U[$i][$k] = -$this->U[$i][$k]; + } + $this->U[$k][$k] = 1.0 + $this->U[$k][$k]; + for ($i = 0; $i < $k - 1; ++$i) { + $this->U[$i][$k] = 0.0; + } + } else { + for ($i = 0; $i < $this->m; ++$i) { + $this->U[$i][$k] = 0.0; + } + $this->U[$k][$k] = 1.0; + } + } + } + + // If required, generate V. + if ($wantv) { + for ($k = $this->n - 1; $k >= 0; --$k) { + if (($k < $nrt) AND ($e[$k] != 0.0)) { + for ($j = $k + 1; $j < $nu; ++$j) { + $t = 0; + for ($i = $k + 1; $i < $this->n; ++$i) { + $t += $this->V[$i][$k]* $this->V[$i][$j]; + } + $t = -$t / $this->V[$k+1][$k]; + for ($i = $k + 1; $i < $this->n; ++$i) { + $this->V[$i][$j] += $t * $this->V[$i][$k]; + } + } + } + for ($i = 0; $i < $this->n; ++$i) { + $this->V[$i][$k] = 0.0; + } + $this->V[$k][$k] = 1.0; + } + } + + // Main iteration loop for the singular values. + $pp = $p - 1; + $iter = 0; + $eps = pow(2.0, -52.0); + + while ($p > 0) { + // Here is where a test for too many iterations would go. + // This section of the program inspects for negligible + // elements in the s and e arrays. On completion the + // variables kase and k are set as follows: + // kase = 1 if s(p) and e[k-1] are negligible and k<p + // kase = 2 if s(k) is negligible and k<p + // kase = 3 if e[k-1] is negligible, k<p, and + // s(k), ..., s(p) are not negligible (qr step). + // kase = 4 if e(p-1) is negligible (convergence). + for ($k = $p - 2; $k >= -1; --$k) { + if ($k == -1) { + break; + } + if (abs($e[$k]) <= $eps * (abs($this->s[$k]) + abs($this->s[$k+1]))) { + $e[$k] = 0.0; + break; + } + } + if ($k == $p - 2) { + $kase = 4; + } else { + for ($ks = $p - 1; $ks >= $k; --$ks) { + if ($ks == $k) { + break; + } + $t = ($ks != $p ? abs($e[$ks]) : 0.) + ($ks != $k + 1 ? abs($e[$ks-1]) : 0.); + if (abs($this->s[$ks]) <= $eps * $t) { + $this->s[$ks] = 0.0; + break; + } + } + if ($ks == $k) { + $kase = 3; + } else if ($ks == $p-1) { + $kase = 1; + } else { + $kase = 2; + $k = $ks; + } + } + ++$k; + + // Perform the task indicated by kase. + switch ($kase) { + // Deflate negligible s(p). + case 1: + $f = $e[$p-2]; + $e[$p-2] = 0.0; + for ($j = $p - 2; $j >= $k; --$j) { + $t = hypo($this->s[$j],$f); + $cs = $this->s[$j] / $t; + $sn = $f / $t; + $this->s[$j] = $t; + if ($j != $k) { + $f = -$sn * $e[$j-1]; + $e[$j-1] = $cs * $e[$j-1]; + } + if ($wantv) { + for ($i = 0; $i < $this->n; ++$i) { + $t = $cs * $this->V[$i][$j] + $sn * $this->V[$i][$p-1]; + $this->V[$i][$p-1] = -$sn * $this->V[$i][$j] + $cs * $this->V[$i][$p-1]; + $this->V[$i][$j] = $t; + } + } + } + break; + // Split at negligible s(k). + case 2: + $f = $e[$k-1]; + $e[$k-1] = 0.0; + for ($j = $k; $j < $p; ++$j) { + $t = hypo($this->s[$j], $f); + $cs = $this->s[$j] / $t; + $sn = $f / $t; + $this->s[$j] = $t; + $f = -$sn * $e[$j]; + $e[$j] = $cs * $e[$j]; + if ($wantu) { + for ($i = 0; $i < $this->m; ++$i) { + $t = $cs * $this->U[$i][$j] + $sn * $this->U[$i][$k-1]; + $this->U[$i][$k-1] = -$sn * $this->U[$i][$j] + $cs * $this->U[$i][$k-1]; + $this->U[$i][$j] = $t; + } + } + } + break; + // Perform one qr step. + case 3: + // Calculate the shift. + $scale = max(max(max(max( + abs($this->s[$p-1]),abs($this->s[$p-2])),abs($e[$p-2])), + abs($this->s[$k])), abs($e[$k])); + $sp = $this->s[$p-1] / $scale; + $spm1 = $this->s[$p-2] / $scale; + $epm1 = $e[$p-2] / $scale; + $sk = $this->s[$k] / $scale; + $ek = $e[$k] / $scale; + $b = (($spm1 + $sp) * ($spm1 - $sp) + $epm1 * $epm1) / 2.0; + $c = ($sp * $epm1) * ($sp * $epm1); + $shift = 0.0; + if (($b != 0.0) || ($c != 0.0)) { + $shift = sqrt($b * $b + $c); + if ($b < 0.0) { + $shift = -$shift; + } + $shift = $c / ($b + $shift); + } + $f = ($sk + $sp) * ($sk - $sp) + $shift; + $g = $sk * $ek; + // Chase zeros. + for ($j = $k; $j < $p-1; ++$j) { + $t = hypo($f,$g); + $cs = $f/$t; + $sn = $g/$t; + if ($j != $k) { + $e[$j-1] = $t; + } + $f = $cs * $this->s[$j] + $sn * $e[$j]; + $e[$j] = $cs * $e[$j] - $sn * $this->s[$j]; + $g = $sn * $this->s[$j+1]; + $this->s[$j+1] = $cs * $this->s[$j+1]; + if ($wantv) { + for ($i = 0; $i < $this->n; ++$i) { + $t = $cs * $this->V[$i][$j] + $sn * $this->V[$i][$j+1]; + $this->V[$i][$j+1] = -$sn * $this->V[$i][$j] + $cs * $this->V[$i][$j+1]; + $this->V[$i][$j] = $t; + } + } + $t = hypo($f,$g); + $cs = $f/$t; + $sn = $g/$t; + $this->s[$j] = $t; + $f = $cs * $e[$j] + $sn * $this->s[$j+1]; + $this->s[$j+1] = -$sn * $e[$j] + $cs * $this->s[$j+1]; + $g = $sn * $e[$j+1]; + $e[$j+1] = $cs * $e[$j+1]; + if ($wantu && ($j < $this->m - 1)) { + for ($i = 0; $i < $this->m; ++$i) { + $t = $cs * $this->U[$i][$j] + $sn * $this->U[$i][$j+1]; + $this->U[$i][$j+1] = -$sn * $this->U[$i][$j] + $cs * $this->U[$i][$j+1]; + $this->U[$i][$j] = $t; + } + } + } + $e[$p-2] = $f; + $iter = $iter + 1; + break; + // Convergence. + case 4: + // Make the singular values positive. + if ($this->s[$k] <= 0.0) { + $this->s[$k] = ($this->s[$k] < 0.0 ? -$this->s[$k] : 0.0); + if ($wantv) { + for ($i = 0; $i <= $pp; ++$i) { + $this->V[$i][$k] = -$this->V[$i][$k]; + } + } + } + // Order the singular values. + while ($k < $pp) { + if ($this->s[$k] >= $this->s[$k+1]) { + break; + } + $t = $this->s[$k]; + $this->s[$k] = $this->s[$k+1]; + $this->s[$k+1] = $t; + if ($wantv AND ($k < $this->n - 1)) { + for ($i = 0; $i < $this->n; ++$i) { + $t = $this->V[$i][$k+1]; + $this->V[$i][$k+1] = $this->V[$i][$k]; + $this->V[$i][$k] = $t; + } + } + if ($wantu AND ($k < $this->m-1)) { + for ($i = 0; $i < $this->m; ++$i) { + $t = $this->U[$i][$k+1]; + $this->U[$i][$k+1] = $this->U[$i][$k]; + $this->U[$i][$k] = $t; + } + } + ++$k; + } + $iter = 0; + --$p; + break; + } // end switch + } // end while + + } // end constructor + + + /** + * Return the left singular vectors + * + * @access public + * @return U + */ + public function getU() { + return new Matrix($this->U, $this->m, min($this->m + 1, $this->n)); + } + + + /** + * Return the right singular vectors + * + * @access public + * @return V + */ + public function getV() { + return new Matrix($this->V); + } + + + /** + * Return the one-dimensional array of singular values + * + * @access public + * @return diagonal of S. + */ + public function getSingularValues() { + return $this->s; + } + + + /** + * Return the diagonal matrix of singular values + * + * @access public + * @return S + */ + public function getS() { + for ($i = 0; $i < $this->n; ++$i) { + for ($j = 0; $j < $this->n; ++$j) { + $S[$i][$j] = 0.0; + } + $S[$i][$i] = $this->s[$i]; + } + return new Matrix($S); + } + + + /** + * Two norm + * + * @access public + * @return max(S) + */ + public function norm2() { + return $this->s[0]; + } + + + /** + * Two norm condition number + * + * @access public + * @return max(S)/min(S) + */ + public function cond() { + return $this->s[0] / $this->s[min($this->m, $this->n) - 1]; + } + + + /** + * Effective numerical matrix rank + * + * @access public + * @return Number of nonnegligible singular values. + */ + public function rank() { + $eps = pow(2.0, -52.0); + $tol = max($this->m, $this->n) * $this->s[0] * $eps; + $r = 0; + for ($i = 0; $i < count($this->s); ++$i) { + if ($this->s[$i] > $tol) { + ++$r; + } + } + return $r; + } + +} // class SingularValueDecomposition diff --git a/PHPExcel/Shared/JAMA/utils/Error.php b/PHPExcel/Shared/JAMA/utils/Error.php new file mode 100644 index 0000000..e73252b --- /dev/null +++ b/PHPExcel/Shared/JAMA/utils/Error.php @@ -0,0 +1,82 @@ +<?php +/** + * @package JAMA + * + * Error handling + * @author Michael Bommarito + * @version 01292005 + */ + +//Language constant +define('JAMALANG', 'EN'); + + +//All errors may be defined by the following format: +//define('ExceptionName', N); +//$error['lang'][ExceptionName] = 'Error message'; +$error = array(); + +/* +I've used Babelfish and a little poor knowledge of Romance/Germanic languages for the translations here. +Feel free to correct anything that looks amiss to you. +*/ + +define('PolymorphicArgumentException', -1); +$error['EN'][PolymorphicArgumentException] = "Invalid argument pattern for polymorphic function."; +$error['FR'][PolymorphicArgumentException] = "Modèle inadmissible d'argument pour la fonction polymorphe.". +$error['DE'][PolymorphicArgumentException] = "Unzulässiges Argumentmuster für polymorphe Funktion."; + +define('ArgumentTypeException', -2); +$error['EN'][ArgumentTypeException] = "Invalid argument type."; +$error['FR'][ArgumentTypeException] = "Type inadmissible d'argument."; +$error['DE'][ArgumentTypeException] = "Unzulässige Argumentart."; + +define('ArgumentBoundsException', -3); +$error['EN'][ArgumentBoundsException] = "Invalid argument range."; +$error['FR'][ArgumentBoundsException] = "Gamme inadmissible d'argument."; +$error['DE'][ArgumentBoundsException] = "Unzulässige Argumentstrecke."; + +define('MatrixDimensionException', -4); +$error['EN'][MatrixDimensionException] = "Matrix dimensions are not equal."; +$error['FR'][MatrixDimensionException] = "Les dimensions de Matrix ne sont pas égales."; +$error['DE'][MatrixDimensionException] = "Matrixmaße sind nicht gleich."; + +define('PrecisionLossException', -5); +$error['EN'][PrecisionLossException] = "Significant precision loss detected."; +$error['FR'][PrecisionLossException] = "Perte significative de précision détectée."; +$error['DE'][PrecisionLossException] = "Bedeutender Präzision Verlust ermittelte."; + +define('MatrixSPDException', -6); +$error['EN'][MatrixSPDException] = "Can only perform operation on symmetric positive definite matrix."; +$error['FR'][MatrixSPDException] = "Perte significative de précision détectée."; +$error['DE'][MatrixSPDException] = "Bedeutender Präzision Verlust ermittelte."; + +define('MatrixSingularException', -7); +$error['EN'][MatrixSingularException] = "Can only perform operation on singular matrix."; + +define('MatrixRankException', -8); +$error['EN'][MatrixRankException] = "Can only perform operation on full-rank matrix."; + +define('ArrayLengthException', -9); +$error['EN'][ArrayLengthException] = "Array length must be a multiple of m."; + +define('RowLengthException', -10); +$error['EN'][RowLengthException] = "All rows must have the same length."; + +/** + * Custom error handler + * @param int $num Error number + */ +function JAMAError($errorNumber = null) { + global $error; + + if (isset($errorNumber)) { + if (isset($error[JAMALANG][$errorNumber])) { + return $error[JAMALANG][$errorNumber]; + } else { + return $error['EN'][$errorNumber]; + } + } else { + return ("Invalid argument to JAMAError()"); + } +} diff --git a/PHPExcel/Shared/JAMA/utils/Maths.php b/PHPExcel/Shared/JAMA/utils/Maths.php new file mode 100644 index 0000000..aa09a8b --- /dev/null +++ b/PHPExcel/Shared/JAMA/utils/Maths.php @@ -0,0 +1,43 @@ +<?php +/** + * @package JAMA + * + * Pythagorean Theorem: + * + * a = 3 + * b = 4 + * r = sqrt(square(a) + square(b)) + * r = 5 + * + * r = sqrt(a^2 + b^2) without under/overflow. + */ +function hypo($a, $b) { + if (abs($a) > abs($b)) { + $r = $b / $a; + $r = abs($a) * sqrt(1 + $r * $r); + } elseif ($b != 0) { + $r = $a / $b; + $r = abs($b) * sqrt(1 + $r * $r); + } else { + $r = 0.0; + } + return $r; +} // function hypo() + + +/** + * Mike Bommarito's version. + * Compute n-dimensional hyotheneuse. + * +function hypot() { + $s = 0; + foreach (func_get_args() as $d) { + if (is_numeric($d)) { + $s += pow($d, 2); + } else { + throw new PHPExcel_Calculation_Exception(JAMAError(ArgumentTypeException)); + } + } + return sqrt($s); +} +*/ diff --git a/PHPExcel/Shared/OLE.php b/PHPExcel/Shared/OLE.php new file mode 100644 index 0000000..9796282 --- /dev/null +++ b/PHPExcel/Shared/OLE.php @@ -0,0 +1,531 @@ +<?php +/* vim: set expandtab tabstop=4 shiftwidth=4: */ +// +----------------------------------------------------------------------+ +// | PHP Version 4 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997-2002 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 2.02 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available at through the world-wide-web at | +// | http://www.php.net/license/2_02.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Author: Xavier Noguer <xnoguer@php.net> | +// | Based on OLE::Storage_Lite by Kawai, Takanori | +// +----------------------------------------------------------------------+ +// +// $Id: OLE.php,v 1.13 2007/03/07 14:38:25 schmidt Exp $ + + +/** +* Array for storing OLE instances that are accessed from +* OLE_ChainedBlockStream::stream_open(). +* @var array +*/ +$GLOBALS['_OLE_INSTANCES'] = array(); + +/** +* OLE package base class. +* +* @author Xavier Noguer <xnoguer@php.net> +* @author Christian Schmidt <schmidt@php.net> +* @category PHPExcel +* @package PHPExcel_Shared_OLE +*/ +class PHPExcel_Shared_OLE +{ + const OLE_PPS_TYPE_ROOT = 5; + const OLE_PPS_TYPE_DIR = 1; + const OLE_PPS_TYPE_FILE = 2; + const OLE_DATA_SIZE_SMALL = 0x1000; + const OLE_LONG_INT_SIZE = 4; + const OLE_PPS_SIZE = 0x80; + + /** + * The file handle for reading an OLE container + * @var resource + */ + public $_file_handle; + + /** + * Array of PPS's found on the OLE container + * @var array + */ + public $_list = array(); + + /** + * Root directory of OLE container + * @var OLE_PPS_Root + */ + public $root; + + /** + * Big Block Allocation Table + * @var array (blockId => nextBlockId) + */ + public $bbat; + + /** + * Short Block Allocation Table + * @var array (blockId => nextBlockId) + */ + public $sbat; + + /** + * Size of big blocks. This is usually 512. + * @var int number of octets per block. + */ + public $bigBlockSize; + + /** + * Size of small blocks. This is usually 64. + * @var int number of octets per block + */ + public $smallBlockSize; + + /** + * Reads an OLE container from the contents of the file given. + * + * @acces public + * @param string $file + * @return mixed true on success, PEAR_Error on failure + */ + public function read($file) + { + $fh = fopen($file, "r"); + if (!$fh) { + throw new PHPExcel_Reader_Exception("Can't open file $file"); + } + $this->_file_handle = $fh; + + $signature = fread($fh, 8); + if ("\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1" != $signature) { + throw new PHPExcel_Reader_Exception("File doesn't seem to be an OLE container."); + } + fseek($fh, 28); + if (fread($fh, 2) != "\xFE\xFF") { + // This shouldn't be a problem in practice + throw new PHPExcel_Reader_Exception("Only Little-Endian encoding is supported."); + } + // Size of blocks and short blocks in bytes + $this->bigBlockSize = pow(2, self::_readInt2($fh)); + $this->smallBlockSize = pow(2, self::_readInt2($fh)); + + // Skip UID, revision number and version number + fseek($fh, 44); + // Number of blocks in Big Block Allocation Table + $bbatBlockCount = self::_readInt4($fh); + + // Root chain 1st block + $directoryFirstBlockId = self::_readInt4($fh); + + // Skip unused bytes + fseek($fh, 56); + // Streams shorter than this are stored using small blocks + $this->bigBlockThreshold = self::_readInt4($fh); + // Block id of first sector in Short Block Allocation Table + $sbatFirstBlockId = self::_readInt4($fh); + // Number of blocks in Short Block Allocation Table + $sbbatBlockCount = self::_readInt4($fh); + // Block id of first sector in Master Block Allocation Table + $mbatFirstBlockId = self::_readInt4($fh); + // Number of blocks in Master Block Allocation Table + $mbbatBlockCount = self::_readInt4($fh); + $this->bbat = array(); + + // Remaining 4 * 109 bytes of current block is beginning of Master + // Block Allocation Table + $mbatBlocks = array(); + for ($i = 0; $i < 109; ++$i) { + $mbatBlocks[] = self::_readInt4($fh); + } + + // Read rest of Master Block Allocation Table (if any is left) + $pos = $this->_getBlockOffset($mbatFirstBlockId); + for ($i = 0; $i < $mbbatBlockCount; ++$i) { + fseek($fh, $pos); + for ($j = 0; $j < $this->bigBlockSize / 4 - 1; ++$j) { + $mbatBlocks[] = self::_readInt4($fh); + } + // Last block id in each block points to next block + $pos = $this->_getBlockOffset(self::_readInt4($fh)); + } + + // Read Big Block Allocation Table according to chain specified by + // $mbatBlocks + for ($i = 0; $i < $bbatBlockCount; ++$i) { + $pos = $this->_getBlockOffset($mbatBlocks[$i]); + fseek($fh, $pos); + for ($j = 0 ; $j < $this->bigBlockSize / 4; ++$j) { + $this->bbat[] = self::_readInt4($fh); + } + } + + // Read short block allocation table (SBAT) + $this->sbat = array(); + $shortBlockCount = $sbbatBlockCount * $this->bigBlockSize / 4; + $sbatFh = $this->getStream($sbatFirstBlockId); + for ($blockId = 0; $blockId < $shortBlockCount; ++$blockId) { + $this->sbat[$blockId] = self::_readInt4($sbatFh); + } + fclose($sbatFh); + + $this->_readPpsWks($directoryFirstBlockId); + + return true; + } + + /** + * @param int block id + * @param int byte offset from beginning of file + * @access public + */ + public function _getBlockOffset($blockId) + { + return 512 + $blockId * $this->bigBlockSize; + } + + /** + * Returns a stream for use with fread() etc. External callers should + * use PHPExcel_Shared_OLE_PPS_File::getStream(). + * @param int|PPS block id or PPS + * @return resource read-only stream + */ + public function getStream($blockIdOrPps) + { + static $isRegistered = false; + if (!$isRegistered) { + stream_wrapper_register('ole-chainedblockstream', + 'PHPExcel_Shared_OLE_ChainedBlockStream'); + $isRegistered = true; + } + + // Store current instance in global array, so that it can be accessed + // in OLE_ChainedBlockStream::stream_open(). + // Object is removed from self::$instances in OLE_Stream::close(). + $GLOBALS['_OLE_INSTANCES'][] = $this; + $instanceId = end(array_keys($GLOBALS['_OLE_INSTANCES'])); + + $path = 'ole-chainedblockstream://oleInstanceId=' . $instanceId; + if ($blockIdOrPps instanceof PHPExcel_Shared_OLE_PPS) { + $path .= '&blockId=' . $blockIdOrPps->_StartBlock; + $path .= '&size=' . $blockIdOrPps->Size; + } else { + $path .= '&blockId=' . $blockIdOrPps; + } + return fopen($path, 'r'); + } + + /** + * Reads a signed char. + * @param resource file handle + * @return int + * @access public + */ + private static function _readInt1($fh) + { + list(, $tmp) = unpack("c", fread($fh, 1)); + return $tmp; + } + + /** + * Reads an unsigned short (2 octets). + * @param resource file handle + * @return int + * @access public + */ + private static function _readInt2($fh) + { + list(, $tmp) = unpack("v", fread($fh, 2)); + return $tmp; + } + + /** + * Reads an unsigned long (4 octets). + * @param resource file handle + * @return int + * @access public + */ + private static function _readInt4($fh) + { + list(, $tmp) = unpack("V", fread($fh, 4)); + return $tmp; + } + + /** + * Gets information about all PPS's on the OLE container from the PPS WK's + * creates an OLE_PPS object for each one. + * + * @access public + * @param integer the block id of the first block + * @return mixed true on success, PEAR_Error on failure + */ + public function _readPpsWks($blockId) + { + $fh = $this->getStream($blockId); + for ($pos = 0; ; $pos += 128) { + fseek($fh, $pos, SEEK_SET); + $nameUtf16 = fread($fh, 64); + $nameLength = self::_readInt2($fh); + $nameUtf16 = substr($nameUtf16, 0, $nameLength - 2); + // Simple conversion from UTF-16LE to ISO-8859-1 + $name = str_replace("\x00", "", $nameUtf16); + $type = self::_readInt1($fh); + switch ($type) { + case self::OLE_PPS_TYPE_ROOT: + $pps = new PHPExcel_Shared_OLE_PPS_Root(null, null, array()); + $this->root = $pps; + break; + case self::OLE_PPS_TYPE_DIR: + $pps = new PHPExcel_Shared_OLE_PPS(null, null, null, null, null, + null, null, null, null, array()); + break; + case self::OLE_PPS_TYPE_FILE: + $pps = new PHPExcel_Shared_OLE_PPS_File($name); + break; + default: + continue; + } + fseek($fh, 1, SEEK_CUR); + $pps->Type = $type; + $pps->Name = $name; + $pps->PrevPps = self::_readInt4($fh); + $pps->NextPps = self::_readInt4($fh); + $pps->DirPps = self::_readInt4($fh); + fseek($fh, 20, SEEK_CUR); + $pps->Time1st = self::OLE2LocalDate(fread($fh, 8)); + $pps->Time2nd = self::OLE2LocalDate(fread($fh, 8)); + $pps->_StartBlock = self::_readInt4($fh); + $pps->Size = self::_readInt4($fh); + $pps->No = count($this->_list); + $this->_list[] = $pps; + + // check if the PPS tree (starting from root) is complete + if (isset($this->root) && + $this->_ppsTreeComplete($this->root->No)) { + + break; + } + } + fclose($fh); + + // Initialize $pps->children on directories + foreach ($this->_list as $pps) { + if ($pps->Type == self::OLE_PPS_TYPE_DIR || $pps->Type == self::OLE_PPS_TYPE_ROOT) { + $nos = array($pps->DirPps); + $pps->children = array(); + while ($nos) { + $no = array_pop($nos); + if ($no != -1) { + $childPps = $this->_list[$no]; + $nos[] = $childPps->PrevPps; + $nos[] = $childPps->NextPps; + $pps->children[] = $childPps; + } + } + } + } + + return true; + } + + /** + * It checks whether the PPS tree is complete (all PPS's read) + * starting with the given PPS (not necessarily root) + * + * @access public + * @param integer $index The index of the PPS from which we are checking + * @return boolean Whether the PPS tree for the given PPS is complete + */ + public function _ppsTreeComplete($index) + { + return isset($this->_list[$index]) && + ($pps = $this->_list[$index]) && + ($pps->PrevPps == -1 || + $this->_ppsTreeComplete($pps->PrevPps)) && + ($pps->NextPps == -1 || + $this->_ppsTreeComplete($pps->NextPps)) && + ($pps->DirPps == -1 || + $this->_ppsTreeComplete($pps->DirPps)); + } + + /** + * Checks whether a PPS is a File PPS or not. + * If there is no PPS for the index given, it will return false. + * + * @access public + * @param integer $index The index for the PPS + * @return bool true if it's a File PPS, false otherwise + */ + public function isFile($index) + { + if (isset($this->_list[$index])) { + return ($this->_list[$index]->Type == self::OLE_PPS_TYPE_FILE); + } + return false; + } + + /** + * Checks whether a PPS is a Root PPS or not. + * If there is no PPS for the index given, it will return false. + * + * @access public + * @param integer $index The index for the PPS. + * @return bool true if it's a Root PPS, false otherwise + */ + public function isRoot($index) + { + if (isset($this->_list[$index])) { + return ($this->_list[$index]->Type == self::OLE_PPS_TYPE_ROOT); + } + return false; + } + + /** + * Gives the total number of PPS's found in the OLE container. + * + * @access public + * @return integer The total number of PPS's found in the OLE container + */ + public function ppsTotal() + { + return count($this->_list); + } + + /** + * Gets data from a PPS + * If there is no PPS for the index given, it will return an empty string. + * + * @access public + * @param integer $index The index for the PPS + * @param integer $position The position from which to start reading + * (relative to the PPS) + * @param integer $length The amount of bytes to read (at most) + * @return string The binary string containing the data requested + * @see OLE_PPS_File::getStream() + */ + public function getData($index, $position, $length) + { + // if position is not valid return empty string + if (!isset($this->_list[$index]) || ($position >= $this->_list[$index]->Size) || ($position < 0)) { + return ''; + } + $fh = $this->getStream($this->_list[$index]); + $data = stream_get_contents($fh, $length, $position); + fclose($fh); + return $data; + } + + /** + * Gets the data length from a PPS + * If there is no PPS for the index given, it will return 0. + * + * @access public + * @param integer $index The index for the PPS + * @return integer The amount of bytes in data the PPS has + */ + public function getDataLength($index) + { + if (isset($this->_list[$index])) { + return $this->_list[$index]->Size; + } + return 0; + } + + /** + * Utility function to transform ASCII text to Unicode + * + * @access public + * @static + * @param string $ascii The ASCII string to transform + * @return string The string in Unicode + */ + public static function Asc2Ucs($ascii) + { + $rawname = ''; + for ($i = 0; $i < strlen($ascii); ++$i) { + $rawname .= $ascii{$i} . "\x00"; + } + return $rawname; + } + + /** + * Utility function + * Returns a string for the OLE container with the date given + * + * @access public + * @static + * @param integer $date A timestamp + * @return string The string for the OLE container + */ + public static function LocalDate2OLE($date = null) + { + if (!isset($date)) { + return "\x00\x00\x00\x00\x00\x00\x00\x00"; + } + + // factor used for separating numbers into 4 bytes parts + $factor = pow(2, 32); + + // days from 1-1-1601 until the beggining of UNIX era + $days = 134774; + // calculate seconds + $big_date = $days*24*3600 + gmmktime(date("H",$date),date("i",$date),date("s",$date), + date("m",$date),date("d",$date),date("Y",$date)); + // multiply just to make MS happy + $big_date *= 10000000; + + $high_part = floor($big_date / $factor); + // lower 4 bytes + $low_part = floor((($big_date / $factor) - $high_part) * $factor); + + // Make HEX string + $res = ''; + + for ($i = 0; $i < 4; ++$i) { + $hex = $low_part % 0x100; + $res .= pack('c', $hex); + $low_part /= 0x100; + } + for ($i = 0; $i < 4; ++$i) { + $hex = $high_part % 0x100; + $res .= pack('c', $hex); + $high_part /= 0x100; + } + return $res; + } + + /** + * Returns a timestamp from an OLE container's date + * + * @access public + * @static + * @param integer $string A binary string with the encoded date + * @return string The timestamp corresponding to the string + */ + public static function OLE2LocalDate($string) + { + if (strlen($string) != 8) { + return new PEAR_Error("Expecting 8 byte string"); + } + + // factor used for separating numbers into 4 bytes parts + $factor = pow(2,32); + list(, $high_part) = unpack('V', substr($string, 4, 4)); + list(, $low_part) = unpack('V', substr($string, 0, 4)); + + $big_date = ($high_part * $factor) + $low_part; + // translate to seconds + $big_date /= 10000000; + + // days from 1-1-1601 until the beggining of UNIX era + $days = 134774; + + // translate to seconds from beggining of UNIX era + $big_date -= $days * 24 * 3600; + return floor($big_date); + } +} diff --git a/PHPExcel/Shared/OLE/ChainedBlockStream.php b/PHPExcel/Shared/OLE/ChainedBlockStream.php new file mode 100644 index 0000000..3dcd7e1 --- /dev/null +++ b/PHPExcel/Shared/OLE/ChainedBlockStream.php @@ -0,0 +1,230 @@ +<?php +/** + * PHPExcel + * + * Copyright (C) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_OLE + * @copyright Copyright (c) 2006 - 2007 Christian Schmidt + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +/** + * PHPExcel_Shared_OLE_ChainedBlockStream + * + * Stream wrapper for reading data stored in an OLE file. Implements methods + * for PHP's stream_wrapper_register(). For creating streams using this + * wrapper, use PHPExcel_Shared_OLE_PPS_File::getStream(). + * + * @category PHPExcel + * @package PHPExcel_Shared_OLE + */ +class PHPExcel_Shared_OLE_ChainedBlockStream +{ + /** + * The OLE container of the file that is being read. + * @var OLE + */ + public $ole; + + /** + * Parameters specified by fopen(). + * @var array + */ + public $params; + + /** + * The binary data of the file. + * @var string + */ + public $data; + + /** + * The file pointer. + * @var int byte offset + */ + public $pos; + + /** + * Implements support for fopen(). + * For creating streams using this wrapper, use OLE_PPS_File::getStream(). + * + * @param string $path resource name including scheme, e.g. + * ole-chainedblockstream://oleInstanceId=1 + * @param string $mode only "r" is supported + * @param int $options mask of STREAM_REPORT_ERRORS and STREAM_USE_PATH + * @param string &$openedPath absolute path of the opened stream (out parameter) + * @return bool true on success + */ + public function stream_open($path, $mode, $options, &$openedPath) + { + if ($mode != 'r') { + if ($options & STREAM_REPORT_ERRORS) { + trigger_error('Only reading is supported', E_USER_WARNING); + } + return false; + } + + // 25 is length of "ole-chainedblockstream://" + parse_str(substr($path, 25), $this->params); + if (!isset($this->params['oleInstanceId'], + $this->params['blockId'], + $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']])) { + + if ($options & STREAM_REPORT_ERRORS) { + trigger_error('OLE stream not found', E_USER_WARNING); + } + return false; + } + $this->ole = $GLOBALS['_OLE_INSTANCES'][$this->params['oleInstanceId']]; + + $blockId = $this->params['blockId']; + $this->data = ''; + if (isset($this->params['size']) && + $this->params['size'] < $this->ole->bigBlockThreshold && + $blockId != $this->ole->root->_StartBlock) { + + // Block id refers to small blocks + $rootPos = $this->ole->_getBlockOffset($this->ole->root->_StartBlock); + while ($blockId != -2) { + $pos = $rootPos + $blockId * $this->ole->bigBlockSize; + $blockId = $this->ole->sbat[$blockId]; + fseek($this->ole->_file_handle, $pos); + $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize); + } + } else { + // Block id refers to big blocks + while ($blockId != -2) { + $pos = $this->ole->_getBlockOffset($blockId); + fseek($this->ole->_file_handle, $pos); + $this->data .= fread($this->ole->_file_handle, $this->ole->bigBlockSize); + $blockId = $this->ole->bbat[$blockId]; + } + } + if (isset($this->params['size'])) { + $this->data = substr($this->data, 0, $this->params['size']); + } + + if ($options & STREAM_USE_PATH) { + $openedPath = $path; + } + + return true; + } + + /** + * Implements support for fclose(). + * + */ + public function stream_close() + { + $this->ole = null; + unset($GLOBALS['_OLE_INSTANCES']); + } + + /** + * Implements support for fread(), fgets() etc. + * + * @param int $count maximum number of bytes to read + * @return string + */ + public function stream_read($count) + { + if ($this->stream_eof()) { + return false; + } + $s = substr($this->data, $this->pos, $count); + $this->pos += $count; + return $s; + } + + /** + * Implements support for feof(). + * + * @return bool TRUE if the file pointer is at EOF; otherwise FALSE + */ + public function stream_eof() + { +// As we don't support below 5.2 anymore, this is simply redundancy and overhead +// $eof = $this->pos >= strlen($this->data); +// // Workaround for bug in PHP 5.0.x: http://bugs.php.net/27508 +// if (version_compare(PHP_VERSION, '5.0', '>=') && +// version_compare(PHP_VERSION, '5.1', '<')) { +// $eof = !$eof; +// } +// return $eof; + return $this->pos >= strlen($this->data); + } + + /** + * Returns the position of the file pointer, i.e. its offset into the file + * stream. Implements support for ftell(). + * + * @return int + */ + public function stream_tell() + { + return $this->pos; + } + + /** + * Implements support for fseek(). + * + * @param int $offset byte offset + * @param int $whence SEEK_SET, SEEK_CUR or SEEK_END + * @return bool + */ + public function stream_seek($offset, $whence) + { + if ($whence == SEEK_SET && $offset >= 0) { + $this->pos = $offset; + } elseif ($whence == SEEK_CUR && -$offset <= $this->pos) { + $this->pos += $offset; + } elseif ($whence == SEEK_END && -$offset <= sizeof($this->data)) { + $this->pos = strlen($this->data) + $offset; + } else { + return false; + } + return true; + } + + /** + * Implements support for fstat(). Currently the only supported field is + * "size". + * @return array + */ + public function stream_stat() + { + return array( + 'size' => strlen($this->data), + ); + } + + // Methods used by stream_wrapper_register() that are not implemented: + // bool stream_flush ( void ) + // int stream_write ( string data ) + // bool rename ( string path_from, string path_to ) + // bool mkdir ( string path, int mode, int options ) + // bool rmdir ( string path, int options ) + // bool dir_opendir ( string path, int options ) + // array url_stat ( string path, int flags ) + // string dir_readdir ( void ) + // bool dir_rewinddir ( void ) + // bool dir_closedir ( void ) +} diff --git a/PHPExcel/Shared/OLE/PPS.php b/PHPExcel/Shared/OLE/PPS.php new file mode 100644 index 0000000..4db0ae4 --- /dev/null +++ b/PHPExcel/Shared/OLE/PPS.php @@ -0,0 +1,230 @@ +<?php +/* vim: set expandtab tabstop=4 shiftwidth=4: */ +// +----------------------------------------------------------------------+ +// | PHP Version 4 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997-2002 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 2.02 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available at through the world-wide-web at | +// | http://www.php.net/license/2_02.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Author: Xavier Noguer <xnoguer@php.net> | +// | Based on OLE::Storage_Lite by Kawai, Takanori | +// +----------------------------------------------------------------------+ +// +// $Id: PPS.php,v 1.7 2007/02/13 21:00:42 schmidt Exp $ + + +/** +* Class for creating PPS's for OLE containers +* +* @author Xavier Noguer <xnoguer@php.net> +* @category PHPExcel +* @package PHPExcel_Shared_OLE +*/ +class PHPExcel_Shared_OLE_PPS +{ + /** + * The PPS index + * @var integer + */ + public $No; + + /** + * The PPS name (in Unicode) + * @var string + */ + public $Name; + + /** + * The PPS type. Dir, Root or File + * @var integer + */ + public $Type; + + /** + * The index of the previous PPS + * @var integer + */ + public $PrevPps; + + /** + * The index of the next PPS + * @var integer + */ + public $NextPps; + + /** + * The index of it's first child if this is a Dir or Root PPS + * @var integer + */ + public $DirPps; + + /** + * A timestamp + * @var integer + */ + public $Time1st; + + /** + * A timestamp + * @var integer + */ + public $Time2nd; + + /** + * Starting block (small or big) for this PPS's data inside the container + * @var integer + */ + public $_StartBlock; + + /** + * The size of the PPS's data (in bytes) + * @var integer + */ + public $Size; + + /** + * The PPS's data (only used if it's not using a temporary file) + * @var string + */ + public $_data; + + /** + * Array of child PPS's (only used by Root and Dir PPS's) + * @var array + */ + public $children = array(); + + /** + * Pointer to OLE container + * @var OLE + */ + public $ole; + + /** + * The constructor + * + * @access public + * @param integer $No The PPS index + * @param string $name The PPS name + * @param integer $type The PPS type. Dir, Root or File + * @param integer $prev The index of the previous PPS + * @param integer $next The index of the next PPS + * @param integer $dir The index of it's first child if this is a Dir or Root PPS + * @param integer $time_1st A timestamp + * @param integer $time_2nd A timestamp + * @param string $data The (usually binary) source data of the PPS + * @param array $children Array containing children PPS for this PPS + */ + public function __construct($No, $name, $type, $prev, $next, $dir, $time_1st, $time_2nd, $data, $children) + { + $this->No = $No; + $this->Name = $name; + $this->Type = $type; + $this->PrevPps = $prev; + $this->NextPps = $next; + $this->DirPps = $dir; + $this->Time1st = $time_1st; + $this->Time2nd = $time_2nd; + $this->_data = $data; + $this->children = $children; + if ($data != '') { + $this->Size = strlen($data); + } else { + $this->Size = 0; + } + } + + /** + * Returns the amount of data saved for this PPS + * + * @access public + * @return integer The amount of data (in bytes) + */ + public function _DataLen() + { + if (!isset($this->_data)) { + return 0; + } + //if (isset($this->_PPS_FILE)) { + // fseek($this->_PPS_FILE, 0); + // $stats = fstat($this->_PPS_FILE); + // return $stats[7]; + //} else { + return strlen($this->_data); + //} + } + + /** + * Returns a string with the PPS's WK (What is a WK?) + * + * @access public + * @return string The binary string + */ + public function _getPpsWk() + { + $ret = str_pad($this->Name,64,"\x00"); + + $ret .= pack("v", strlen($this->Name) + 2) // 66 + . pack("c", $this->Type) // 67 + . pack("c", 0x00) //UK // 68 + . pack("V", $this->PrevPps) //Prev // 72 + . pack("V", $this->NextPps) //Next // 76 + . pack("V", $this->DirPps) //Dir // 80 + . "\x00\x09\x02\x00" // 84 + . "\x00\x00\x00\x00" // 88 + . "\xc0\x00\x00\x00" // 92 + . "\x00\x00\x00\x46" // 96 // Seems to be ok only for Root + . "\x00\x00\x00\x00" // 100 + . PHPExcel_Shared_OLE::LocalDate2OLE($this->Time1st) // 108 + . PHPExcel_Shared_OLE::LocalDate2OLE($this->Time2nd) // 116 + . pack("V", isset($this->_StartBlock)? + $this->_StartBlock:0) // 120 + . pack("V", $this->Size) // 124 + . pack("V", 0); // 128 + return $ret; + } + + /** + * Updates index and pointers to previous, next and children PPS's for this + * PPS. I don't think it'll work with Dir PPS's. + * + * @access public + * @param array &$raList Reference to the array of PPS's for the whole OLE + * container + * @return integer The index for this PPS + */ + public static function _savePpsSetPnt(&$raList, $to_save, $depth = 0) + { + if ( !is_array($to_save) || (empty($to_save)) ) { + return 0xFFFFFFFF; + } elseif( count($to_save) == 1 ) { + $cnt = count($raList); + // If the first entry, it's the root... Don't clone it! + $raList[$cnt] = ( $depth == 0 ) ? $to_save[0] : clone $to_save[0]; + $raList[$cnt]->No = $cnt; + $raList[$cnt]->PrevPps = 0xFFFFFFFF; + $raList[$cnt]->NextPps = 0xFFFFFFFF; + $raList[$cnt]->DirPps = self::_savePpsSetPnt($raList, @$raList[$cnt]->children, $depth++); + } else { + $iPos = floor(count($to_save) / 2); + $aPrev = array_slice($to_save, 0, $iPos); + $aNext = array_slice($to_save, $iPos + 1); + $cnt = count($raList); + // If the first entry, it's the root... Don't clone it! + $raList[$cnt] = ( $depth == 0 ) ? $to_save[$iPos] : clone $to_save[$iPos]; + $raList[$cnt]->No = $cnt; + $raList[$cnt]->PrevPps = self::_savePpsSetPnt($raList, $aPrev, $depth++); + $raList[$cnt]->NextPps = self::_savePpsSetPnt($raList, $aNext, $depth++); + $raList[$cnt]->DirPps = self::_savePpsSetPnt($raList, @$raList[$cnt]->children, $depth++); + + } + return $cnt; + } +} diff --git a/PHPExcel/Shared/OLE/PPS/File.php b/PHPExcel/Shared/OLE/PPS/File.php new file mode 100644 index 0000000..f061f56 --- /dev/null +++ b/PHPExcel/Shared/OLE/PPS/File.php @@ -0,0 +1,84 @@ +<?php +/* vim: set expandtab tabstop=4 shiftwidth=4: */ +// +----------------------------------------------------------------------+ +// | PHP Version 4 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997-2002 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 2.02 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available at through the world-wide-web at | +// | http://www.php.net/license/2_02.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Author: Xavier Noguer <xnoguer@php.net> | +// | Based on OLE::Storage_Lite by Kawai, Takanori | +// +----------------------------------------------------------------------+ +// +// $Id: File.php,v 1.11 2007/02/13 21:00:42 schmidt Exp $ + + +/** +* Class for creating File PPS's for OLE containers +* +* @author Xavier Noguer <xnoguer@php.net> +* @category PHPExcel +* @package PHPExcel_Shared_OLE +*/ +class PHPExcel_Shared_OLE_PPS_File extends PHPExcel_Shared_OLE_PPS + { + /** + * The constructor + * + * @access public + * @param string $name The name of the file (in Unicode) + * @see OLE::Asc2Ucs() + */ + public function __construct($name) + { + parent::__construct( + null, + $name, + PHPExcel_Shared_OLE::OLE_PPS_TYPE_FILE, + null, + null, + null, + null, + null, + '', + array()); + } + + /** + * Initialization method. Has to be called right after OLE_PPS_File(). + * + * @access public + * @return mixed true on success + */ + public function init() + { + return true; + } + + /** + * Append data to PPS + * + * @access public + * @param string $data The data to append + */ + public function append($data) + { + $this->_data .= $data; + } + + /** + * Returns a stream for reading this file using fread() etc. + * @return resource a read-only stream + */ + public function getStream() + { + $this->ole->getStream($this); + } +} diff --git a/PHPExcel/Shared/OLE/PPS/Root.php b/PHPExcel/Shared/OLE/PPS/Root.php new file mode 100644 index 0000000..8c6dcda --- /dev/null +++ b/PHPExcel/Shared/OLE/PPS/Root.php @@ -0,0 +1,467 @@ +<?php +/* vim: set expandtab tabstop=4 shiftwidth=4: */ +// +----------------------------------------------------------------------+ +// | PHP Version 4 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997-2002 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 2.02 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available at through the world-wide-web at | +// | http://www.php.net/license/2_02.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Author: Xavier Noguer <xnoguer@php.net> | +// | Based on OLE::Storage_Lite by Kawai, Takanori | +// +----------------------------------------------------------------------+ +// +// $Id: Root.php,v 1.9 2005/04/23 21:53:49 dufuz Exp $ + + +/** +* Class for creating Root PPS's for OLE containers +* +* @author Xavier Noguer <xnoguer@php.net> +* @category PHPExcel +* @package PHPExcel_Shared_OLE +*/ +class PHPExcel_Shared_OLE_PPS_Root extends PHPExcel_Shared_OLE_PPS + { + + /** + * Directory for temporary files + * @var string + */ + protected $_tmp_dir = NULL; + + /** + * @param integer $time_1st A timestamp + * @param integer $time_2nd A timestamp + */ + public function __construct($time_1st, $time_2nd, $raChild) + { + $this->_tempDir = PHPExcel_Shared_File::sys_get_temp_dir(); + + parent::__construct( + null, + PHPExcel_Shared_OLE::Asc2Ucs('Root Entry'), + PHPExcel_Shared_OLE::OLE_PPS_TYPE_ROOT, + null, + null, + null, + $time_1st, + $time_2nd, + null, + $raChild); + } + + /** + * Method for saving the whole OLE container (including files). + * In fact, if called with an empty argument (or '-'), it saves to a + * temporary file and then outputs it's contents to stdout. + * If a resource pointer to a stream created by fopen() is passed + * it will be used, but you have to close such stream by yourself. + * + * @param string|resource $filename The name of the file or stream where to save the OLE container. + * @access public + * @return mixed true on success + */ + public function save($filename) + { + // Initial Setting for saving + $this->_BIG_BLOCK_SIZE = pow(2, + ((isset($this->_BIG_BLOCK_SIZE))? self::_adjust2($this->_BIG_BLOCK_SIZE) : 9)); + $this->_SMALL_BLOCK_SIZE= pow(2, + ((isset($this->_SMALL_BLOCK_SIZE))? self::_adjust2($this->_SMALL_BLOCK_SIZE): 6)); + + if (is_resource($filename)) { + $this->_FILEH_ = $filename; + } else if ($filename == '-' || $filename == '') { + if ($this->_tmp_dir === NULL) + $this->_tmp_dir = PHPExcel_Shared_File::sys_get_temp_dir(); + $this->_tmp_filename = tempnam($this->_tmp_dir, "OLE_PPS_Root"); + $this->_FILEH_ = fopen($this->_tmp_filename,"w+b"); + if ($this->_FILEH_ == false) { + throw new PHPExcel_Writer_Exception("Can't create temporary file."); + } + } else { + $this->_FILEH_ = fopen($filename, "wb"); + } + if ($this->_FILEH_ == false) { + throw new PHPExcel_Writer_Exception("Can't open $filename. It may be in use or protected."); + } + // Make an array of PPS's (for Save) + $aList = array(); + PHPExcel_Shared_OLE_PPS::_savePpsSetPnt($aList, array($this)); + // calculate values for header + list($iSBDcnt, $iBBcnt, $iPPScnt) = $this->_calcSize($aList); //, $rhInfo); + // Save Header + $this->_saveHeader($iSBDcnt, $iBBcnt, $iPPScnt); + + // Make Small Data string (write SBD) + $this->_data = $this->_makeSmallData($aList); + + // Write BB + $this->_saveBigData($iSBDcnt, $aList); + // Write PPS + $this->_savePps($aList); + // Write Big Block Depot and BDList and Adding Header informations + $this->_saveBbd($iSBDcnt, $iBBcnt, $iPPScnt); + + if (!is_resource($filename)) { + fclose($this->_FILEH_); + } + + return true; + } + + /** + * Calculate some numbers + * + * @access public + * @param array $raList Reference to an array of PPS's + * @return array The array of numbers + */ + public function _calcSize(&$raList) + { + // Calculate Basic Setting + list($iSBDcnt, $iBBcnt, $iPPScnt) = array(0,0,0); + $iSmallLen = 0; + $iSBcnt = 0; + $iCount = count($raList); + for ($i = 0; $i < $iCount; ++$i) { + if ($raList[$i]->Type == PHPExcel_Shared_OLE::OLE_PPS_TYPE_FILE) { + $raList[$i]->Size = $raList[$i]->_DataLen(); + if ($raList[$i]->Size < PHPExcel_Shared_OLE::OLE_DATA_SIZE_SMALL) { + $iSBcnt += floor($raList[$i]->Size / $this->_SMALL_BLOCK_SIZE) + + (($raList[$i]->Size % $this->_SMALL_BLOCK_SIZE)? 1: 0); + } else { + $iBBcnt += (floor($raList[$i]->Size / $this->_BIG_BLOCK_SIZE) + + (($raList[$i]->Size % $this->_BIG_BLOCK_SIZE)? 1: 0)); + } + } + } + $iSmallLen = $iSBcnt * $this->_SMALL_BLOCK_SIZE; + $iSlCnt = floor($this->_BIG_BLOCK_SIZE / PHPExcel_Shared_OLE::OLE_LONG_INT_SIZE); + $iSBDcnt = floor($iSBcnt / $iSlCnt) + (($iSBcnt % $iSlCnt)? 1:0); + $iBBcnt += (floor($iSmallLen / $this->_BIG_BLOCK_SIZE) + + (( $iSmallLen % $this->_BIG_BLOCK_SIZE)? 1: 0)); + $iCnt = count($raList); + $iBdCnt = $this->_BIG_BLOCK_SIZE / PHPExcel_Shared_OLE::OLE_PPS_SIZE; + $iPPScnt = (floor($iCnt/$iBdCnt) + (($iCnt % $iBdCnt)? 1: 0)); + + return array($iSBDcnt, $iBBcnt, $iPPScnt); + } + + /** + * Helper function for caculating a magic value for block sizes + * + * @access public + * @param integer $i2 The argument + * @see save() + * @return integer + */ + private static function _adjust2($i2) + { + $iWk = log($i2)/log(2); + return ($iWk > floor($iWk))? floor($iWk)+1:$iWk; + } + + /** + * Save OLE header + * + * @access public + * @param integer $iSBDcnt + * @param integer $iBBcnt + * @param integer $iPPScnt + */ + public function _saveHeader($iSBDcnt, $iBBcnt, $iPPScnt) + { + $FILE = $this->_FILEH_; + + // Calculate Basic Setting + $iBlCnt = $this->_BIG_BLOCK_SIZE / PHPExcel_Shared_OLE::OLE_LONG_INT_SIZE; + $i1stBdL = ($this->_BIG_BLOCK_SIZE - 0x4C) / PHPExcel_Shared_OLE::OLE_LONG_INT_SIZE; + + $iBdExL = 0; + $iAll = $iBBcnt + $iPPScnt + $iSBDcnt; + $iAllW = $iAll; + $iBdCntW = floor($iAllW / $iBlCnt) + (($iAllW % $iBlCnt)? 1: 0); + $iBdCnt = floor(($iAll + $iBdCntW) / $iBlCnt) + ((($iAllW+$iBdCntW) % $iBlCnt)? 1: 0); + + // Calculate BD count + if ($iBdCnt > $i1stBdL) { + while (1) { + ++$iBdExL; + ++$iAllW; + $iBdCntW = floor($iAllW / $iBlCnt) + (($iAllW % $iBlCnt)? 1: 0); + $iBdCnt = floor(($iAllW + $iBdCntW) / $iBlCnt) + ((($iAllW+$iBdCntW) % $iBlCnt)? 1: 0); + if ($iBdCnt <= ($iBdExL*$iBlCnt+ $i1stBdL)) { + break; + } + } + } + + // Save Header + fwrite($FILE, + "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1" + . "\x00\x00\x00\x00" + . "\x00\x00\x00\x00" + . "\x00\x00\x00\x00" + . "\x00\x00\x00\x00" + . pack("v", 0x3b) + . pack("v", 0x03) + . pack("v", -2) + . pack("v", 9) + . pack("v", 6) + . pack("v", 0) + . "\x00\x00\x00\x00" + . "\x00\x00\x00\x00" + . pack("V", $iBdCnt) + . pack("V", $iBBcnt+$iSBDcnt) //ROOT START + . pack("V", 0) + . pack("V", 0x1000) + . pack("V", $iSBDcnt ? 0 : -2) //Small Block Depot + . pack("V", $iSBDcnt) + ); + // Extra BDList Start, Count + if ($iBdCnt < $i1stBdL) { + fwrite($FILE, + pack("V", -2) // Extra BDList Start + . pack("V", 0) // Extra BDList Count + ); + } else { + fwrite($FILE, pack("V", $iAll+$iBdCnt) . pack("V", $iBdExL)); + } + + // BDList + for ($i = 0; $i < $i1stBdL && $i < $iBdCnt; ++$i) { + fwrite($FILE, pack("V", $iAll+$i)); + } + if ($i < $i1stBdL) { + $jB = $i1stBdL - $i; + for ($j = 0; $j < $jB; ++$j) { + fwrite($FILE, (pack("V", -1))); + } + } + } + + /** + * Saving big data (PPS's with data bigger than PHPExcel_Shared_OLE::OLE_DATA_SIZE_SMALL) + * + * @access public + * @param integer $iStBlk + * @param array &$raList Reference to array of PPS's + */ + public function _saveBigData($iStBlk, &$raList) + { + $FILE = $this->_FILEH_; + + // cycle through PPS's + $iCount = count($raList); + for ($i = 0; $i < $iCount; ++$i) { + if ($raList[$i]->Type != PHPExcel_Shared_OLE::OLE_PPS_TYPE_DIR) { + $raList[$i]->Size = $raList[$i]->_DataLen(); + if (($raList[$i]->Size >= PHPExcel_Shared_OLE::OLE_DATA_SIZE_SMALL) || + (($raList[$i]->Type == PHPExcel_Shared_OLE::OLE_PPS_TYPE_ROOT) && isset($raList[$i]->_data))) + { + // Write Data + //if (isset($raList[$i]->_PPS_FILE)) { + // $iLen = 0; + // fseek($raList[$i]->_PPS_FILE, 0); // To The Top + // while($sBuff = fread($raList[$i]->_PPS_FILE, 4096)) { + // $iLen += strlen($sBuff); + // fwrite($FILE, $sBuff); + // } + //} else { + fwrite($FILE, $raList[$i]->_data); + //} + + if ($raList[$i]->Size % $this->_BIG_BLOCK_SIZE) { + fwrite($FILE, str_repeat("\x00", $this->_BIG_BLOCK_SIZE - ($raList[$i]->Size % $this->_BIG_BLOCK_SIZE))); + } + // Set For PPS + $raList[$i]->_StartBlock = $iStBlk; + $iStBlk += + (floor($raList[$i]->Size / $this->_BIG_BLOCK_SIZE) + + (($raList[$i]->Size % $this->_BIG_BLOCK_SIZE)? 1: 0)); + } + // Close file for each PPS, and unlink it + //if (isset($raList[$i]->_PPS_FILE)) { + // fclose($raList[$i]->_PPS_FILE); + // $raList[$i]->_PPS_FILE = null; + // unlink($raList[$i]->_tmp_filename); + //} + } + } + } + + /** + * get small data (PPS's with data smaller than PHPExcel_Shared_OLE::OLE_DATA_SIZE_SMALL) + * + * @access public + * @param array &$raList Reference to array of PPS's + */ + public function _makeSmallData(&$raList) + { + $sRes = ''; + $FILE = $this->_FILEH_; + $iSmBlk = 0; + + $iCount = count($raList); + for ($i = 0; $i < $iCount; ++$i) { + // Make SBD, small data string + if ($raList[$i]->Type == PHPExcel_Shared_OLE::OLE_PPS_TYPE_FILE) { + if ($raList[$i]->Size <= 0) { + continue; + } + if ($raList[$i]->Size < PHPExcel_Shared_OLE::OLE_DATA_SIZE_SMALL) { + $iSmbCnt = floor($raList[$i]->Size / $this->_SMALL_BLOCK_SIZE) + + (($raList[$i]->Size % $this->_SMALL_BLOCK_SIZE)? 1: 0); + // Add to SBD + $jB = $iSmbCnt - 1; + for ($j = 0; $j < $jB; ++$j) { + fwrite($FILE, pack("V", $j+$iSmBlk+1)); + } + fwrite($FILE, pack("V", -2)); + + //// Add to Data String(this will be written for RootEntry) + //if ($raList[$i]->_PPS_FILE) { + // fseek($raList[$i]->_PPS_FILE, 0); // To The Top + // while ($sBuff = fread($raList[$i]->_PPS_FILE, 4096)) { + // $sRes .= $sBuff; + // } + //} else { + $sRes .= $raList[$i]->_data; + //} + if ($raList[$i]->Size % $this->_SMALL_BLOCK_SIZE) { + $sRes .= str_repeat("\x00",$this->_SMALL_BLOCK_SIZE - ($raList[$i]->Size % $this->_SMALL_BLOCK_SIZE)); + } + // Set for PPS + $raList[$i]->_StartBlock = $iSmBlk; + $iSmBlk += $iSmbCnt; + } + } + } + $iSbCnt = floor($this->_BIG_BLOCK_SIZE / PHPExcel_Shared_OLE::OLE_LONG_INT_SIZE); + if ($iSmBlk % $iSbCnt) { + $iB = $iSbCnt - ($iSmBlk % $iSbCnt); + for ($i = 0; $i < $iB; ++$i) { + fwrite($FILE, pack("V", -1)); + } + } + return $sRes; + } + + /** + * Saves all the PPS's WKs + * + * @access public + * @param array $raList Reference to an array with all PPS's + */ + public function _savePps(&$raList) + { + // Save each PPS WK + $iC = count($raList); + for ($i = 0; $i < $iC; ++$i) { + fwrite($this->_FILEH_, $raList[$i]->_getPpsWk()); + } + // Adjust for Block + $iCnt = count($raList); + $iBCnt = $this->_BIG_BLOCK_SIZE / PHPExcel_Shared_OLE::OLE_PPS_SIZE; + if ($iCnt % $iBCnt) { + fwrite($this->_FILEH_, str_repeat("\x00",($iBCnt - ($iCnt % $iBCnt)) * PHPExcel_Shared_OLE::OLE_PPS_SIZE)); + } + } + + /** + * Saving Big Block Depot + * + * @access public + * @param integer $iSbdSize + * @param integer $iBsize + * @param integer $iPpsCnt + */ + public function _saveBbd($iSbdSize, $iBsize, $iPpsCnt) + { + $FILE = $this->_FILEH_; + // Calculate Basic Setting + $iBbCnt = $this->_BIG_BLOCK_SIZE / PHPExcel_Shared_OLE::OLE_LONG_INT_SIZE; + $i1stBdL = ($this->_BIG_BLOCK_SIZE - 0x4C) / PHPExcel_Shared_OLE::OLE_LONG_INT_SIZE; + + $iBdExL = 0; + $iAll = $iBsize + $iPpsCnt + $iSbdSize; + $iAllW = $iAll; + $iBdCntW = floor($iAllW / $iBbCnt) + (($iAllW % $iBbCnt)? 1: 0); + $iBdCnt = floor(($iAll + $iBdCntW) / $iBbCnt) + ((($iAllW+$iBdCntW) % $iBbCnt)? 1: 0); + // Calculate BD count + if ($iBdCnt >$i1stBdL) { + while (1) { + ++$iBdExL; + ++$iAllW; + $iBdCntW = floor($iAllW / $iBbCnt) + (($iAllW % $iBbCnt)? 1: 0); + $iBdCnt = floor(($iAllW + $iBdCntW) / $iBbCnt) + ((($iAllW+$iBdCntW) % $iBbCnt)? 1: 0); + if ($iBdCnt <= ($iBdExL*$iBbCnt+ $i1stBdL)) { + break; + } + } + } + + // Making BD + // Set for SBD + if ($iSbdSize > 0) { + for ($i = 0; $i < ($iSbdSize - 1); ++$i) { + fwrite($FILE, pack("V", $i+1)); + } + fwrite($FILE, pack("V", -2)); + } + // Set for B + for ($i = 0; $i < ($iBsize - 1); ++$i) { + fwrite($FILE, pack("V", $i+$iSbdSize+1)); + } + fwrite($FILE, pack("V", -2)); + + // Set for PPS + for ($i = 0; $i < ($iPpsCnt - 1); ++$i) { + fwrite($FILE, pack("V", $i+$iSbdSize+$iBsize+1)); + } + fwrite($FILE, pack("V", -2)); + // Set for BBD itself ( 0xFFFFFFFD : BBD) + for ($i = 0; $i < $iBdCnt; ++$i) { + fwrite($FILE, pack("V", 0xFFFFFFFD)); + } + // Set for ExtraBDList + for ($i = 0; $i < $iBdExL; ++$i) { + fwrite($FILE, pack("V", 0xFFFFFFFC)); + } + // Adjust for Block + if (($iAllW + $iBdCnt) % $iBbCnt) { + $iBlock = ($iBbCnt - (($iAllW + $iBdCnt) % $iBbCnt)); + for ($i = 0; $i < $iBlock; ++$i) { + fwrite($FILE, pack("V", -1)); + } + } + // Extra BDList + if ($iBdCnt > $i1stBdL) { + $iN=0; + $iNb=0; + for ($i = $i1stBdL;$i < $iBdCnt; $i++, ++$iN) { + if ($iN >= ($iBbCnt - 1)) { + $iN = 0; + ++$iNb; + fwrite($FILE, pack("V", $iAll+$iBdCnt+$iNb)); + } + fwrite($FILE, pack("V", $iBsize+$iSbdSize+$iPpsCnt+$i)); + } + if (($iBdCnt-$i1stBdL) % ($iBbCnt-1)) { + $iB = ($iBbCnt - 1) - (($iBdCnt - $i1stBdL) % ($iBbCnt - 1)); + for ($i = 0; $i < $iB; ++$i) { + fwrite($FILE, pack("V", -1)); + } + } + fwrite($FILE, pack("V", -2)); + } + } +} diff --git a/PHPExcel/Shared/OLERead.php b/PHPExcel/Shared/OLERead.php new file mode 100644 index 0000000..c4cb7da --- /dev/null +++ b/PHPExcel/Shared/OLERead.php @@ -0,0 +1,317 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +defined('IDENTIFIER_OLE') || + define('IDENTIFIER_OLE', pack('CCCCCCCC', 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1)); + +class PHPExcel_Shared_OLERead { + private $data = ''; + + // OLE identifier + const IDENTIFIER_OLE = IDENTIFIER_OLE; + + // Size of a sector = 512 bytes + const BIG_BLOCK_SIZE = 0x200; + + // Size of a short sector = 64 bytes + const SMALL_BLOCK_SIZE = 0x40; + + // Size of a directory entry always = 128 bytes + const PROPERTY_STORAGE_BLOCK_SIZE = 0x80; + + // Minimum size of a standard stream = 4096 bytes, streams smaller than this are stored as short streams + const SMALL_BLOCK_THRESHOLD = 0x1000; + + // header offsets + const NUM_BIG_BLOCK_DEPOT_BLOCKS_POS = 0x2c; + const ROOT_START_BLOCK_POS = 0x30; + const SMALL_BLOCK_DEPOT_BLOCK_POS = 0x3c; + const EXTENSION_BLOCK_POS = 0x44; + const NUM_EXTENSION_BLOCK_POS = 0x48; + const BIG_BLOCK_DEPOT_BLOCKS_POS = 0x4c; + + // property storage offsets (directory offsets) + const SIZE_OF_NAME_POS = 0x40; + const TYPE_POS = 0x42; + const START_BLOCK_POS = 0x74; + const SIZE_POS = 0x78; + + + + public $wrkbook = null; + public $summaryInformation = null; + public $documentSummaryInformation = null; + + + /** + * Read the file + * + * @param $sFileName string Filename + * @throws PHPExcel_Reader_Exception + */ + public function read($sFileName) + { + // Check if file exists and is readable + if(!is_readable($sFileName)) { + throw new PHPExcel_Reader_Exception("Could not open " . $sFileName . " for reading! File does not exist, or it is not readable."); + } + + // Get the file identifier + // Don't bother reading the whole file until we know it's a valid OLE file + $this->data = file_get_contents($sFileName, FALSE, NULL, 0, 8); + + // Check OLE identifier + if ($this->data != self::IDENTIFIER_OLE) { + throw new PHPExcel_Reader_Exception('The filename ' . $sFileName . ' is not recognised as an OLE file'); + } + + // Get the file data + $this->data = file_get_contents($sFileName); + + // Total number of sectors used for the SAT + $this->numBigBlockDepotBlocks = self::_GetInt4d($this->data, self::NUM_BIG_BLOCK_DEPOT_BLOCKS_POS); + + // SecID of the first sector of the directory stream + $this->rootStartBlock = self::_GetInt4d($this->data, self::ROOT_START_BLOCK_POS); + + // SecID of the first sector of the SSAT (or -2 if not extant) + $this->sbdStartBlock = self::_GetInt4d($this->data, self::SMALL_BLOCK_DEPOT_BLOCK_POS); + + // SecID of the first sector of the MSAT (or -2 if no additional sectors are used) + $this->extensionBlock = self::_GetInt4d($this->data, self::EXTENSION_BLOCK_POS); + + // Total number of sectors used by MSAT + $this->numExtensionBlocks = self::_GetInt4d($this->data, self::NUM_EXTENSION_BLOCK_POS); + + $bigBlockDepotBlocks = array(); + $pos = self::BIG_BLOCK_DEPOT_BLOCKS_POS; + + $bbdBlocks = $this->numBigBlockDepotBlocks; + + if ($this->numExtensionBlocks != 0) { + $bbdBlocks = (self::BIG_BLOCK_SIZE - self::BIG_BLOCK_DEPOT_BLOCKS_POS)/4; + } + + for ($i = 0; $i < $bbdBlocks; ++$i) { + $bigBlockDepotBlocks[$i] = self::_GetInt4d($this->data, $pos); + $pos += 4; + } + + for ($j = 0; $j < $this->numExtensionBlocks; ++$j) { + $pos = ($this->extensionBlock + 1) * self::BIG_BLOCK_SIZE; + $blocksToRead = min($this->numBigBlockDepotBlocks - $bbdBlocks, self::BIG_BLOCK_SIZE / 4 - 1); + + for ($i = $bbdBlocks; $i < $bbdBlocks + $blocksToRead; ++$i) { + $bigBlockDepotBlocks[$i] = self::_GetInt4d($this->data, $pos); + $pos += 4; + } + + $bbdBlocks += $blocksToRead; + if ($bbdBlocks < $this->numBigBlockDepotBlocks) { + $this->extensionBlock = self::_GetInt4d($this->data, $pos); + } + } + + $pos = 0; + $this->bigBlockChain = ''; + $bbs = self::BIG_BLOCK_SIZE / 4; + for ($i = 0; $i < $this->numBigBlockDepotBlocks; ++$i) { + $pos = ($bigBlockDepotBlocks[$i] + 1) * self::BIG_BLOCK_SIZE; + + $this->bigBlockChain .= substr($this->data, $pos, 4*$bbs); + $pos += 4*$bbs; + } + + $pos = 0; + $sbdBlock = $this->sbdStartBlock; + $this->smallBlockChain = ''; + while ($sbdBlock != -2) { + $pos = ($sbdBlock + 1) * self::BIG_BLOCK_SIZE; + + $this->smallBlockChain .= substr($this->data, $pos, 4*$bbs); + $pos += 4*$bbs; + + $sbdBlock = self::_GetInt4d($this->bigBlockChain, $sbdBlock*4); + } + + // read the directory stream + $block = $this->rootStartBlock; + $this->entry = $this->_readData($block); + + $this->_readPropertySets(); + } + + /** + * Extract binary stream data + * + * @return string + */ + public function getStream($stream) + { + if ($stream === NULL) { + return null; + } + + $streamData = ''; + + if ($this->props[$stream]['size'] < self::SMALL_BLOCK_THRESHOLD) { + $rootdata = $this->_readData($this->props[$this->rootentry]['startBlock']); + + $block = $this->props[$stream]['startBlock']; + + while ($block != -2) { + $pos = $block * self::SMALL_BLOCK_SIZE; + $streamData .= substr($rootdata, $pos, self::SMALL_BLOCK_SIZE); + + $block = self::_GetInt4d($this->smallBlockChain, $block*4); + } + + return $streamData; + } else { + $numBlocks = $this->props[$stream]['size'] / self::BIG_BLOCK_SIZE; + if ($this->props[$stream]['size'] % self::BIG_BLOCK_SIZE != 0) { + ++$numBlocks; + } + + if ($numBlocks == 0) return ''; + + $block = $this->props[$stream]['startBlock']; + + while ($block != -2) { + $pos = ($block + 1) * self::BIG_BLOCK_SIZE; + $streamData .= substr($this->data, $pos, self::BIG_BLOCK_SIZE); + $block = self::_GetInt4d($this->bigBlockChain, $block*4); + } + + return $streamData; + } + } + + /** + * Read a standard stream (by joining sectors using information from SAT) + * + * @param int $bl Sector ID where the stream starts + * @return string Data for standard stream + */ + private function _readData($bl) + { + $block = $bl; + $data = ''; + + while ($block != -2) { + $pos = ($block + 1) * self::BIG_BLOCK_SIZE; + $data .= substr($this->data, $pos, self::BIG_BLOCK_SIZE); + $block = self::_GetInt4d($this->bigBlockChain, $block*4); + } + return $data; + } + + /** + * Read entries in the directory stream. + */ + private function _readPropertySets() { + $offset = 0; + + // loop through entires, each entry is 128 bytes + $entryLen = strlen($this->entry); + while ($offset < $entryLen) { + // entry data (128 bytes) + $d = substr($this->entry, $offset, self::PROPERTY_STORAGE_BLOCK_SIZE); + + // size in bytes of name + $nameSize = ord($d[self::SIZE_OF_NAME_POS]) | (ord($d[self::SIZE_OF_NAME_POS+1]) << 8); + + // type of entry + $type = ord($d[self::TYPE_POS]); + + // sectorID of first sector or short sector, if this entry refers to a stream (the case with workbook) + // sectorID of first sector of the short-stream container stream, if this entry is root entry + $startBlock = self::_GetInt4d($d, self::START_BLOCK_POS); + + $size = self::_GetInt4d($d, self::SIZE_POS); + + $name = str_replace("\x00", "", substr($d,0,$nameSize)); + + + $this->props[] = array ( + 'name' => $name, + 'type' => $type, + 'startBlock' => $startBlock, + 'size' => $size); + + // tmp helper to simplify checks + $upName = strtoupper($name); + + // Workbook directory entry (BIFF5 uses Book, BIFF8 uses Workbook) + if (($upName === 'WORKBOOK') || ($upName === 'BOOK')) { + $this->wrkbook = count($this->props) - 1; + } + else if ( $upName === 'ROOT ENTRY' || $upName === 'R') { + // Root entry + $this->rootentry = count($this->props) - 1; + } + + // Summary information + if ($name == chr(5) . 'SummaryInformation') { +// echo 'Summary Information<br />'; + $this->summaryInformation = count($this->props) - 1; + } + + // Additional Document Summary information + if ($name == chr(5) . 'DocumentSummaryInformation') { +// echo 'Document Summary Information<br />'; + $this->documentSummaryInformation = count($this->props) - 1; + } + + $offset += self::PROPERTY_STORAGE_BLOCK_SIZE; + } + + } + + /** + * Read 4 bytes of data at specified position + * + * @param string $data + * @param int $pos + * @return int + */ + private static function _GetInt4d($data, $pos) + { + // FIX: represent numbers correctly on 64-bit system + // http://sourceforge.net/tracker/index.php?func=detail&aid=1487372&group_id=99160&atid=623334 + // Hacked by Andreas Rehm 2006 to ensure correct result of the <<24 block on 32 and 64bit systems + $_or_24 = ord($data[$pos + 3]); + if ($_or_24 >= 128) { + // negative number + $_ord_24 = -abs((256 - $_or_24) << 24); + } else { + $_ord_24 = ($_or_24 & 127) << 24; + } + return ord($data[$pos]) | (ord($data[$pos + 1]) << 8) | (ord($data[$pos + 2]) << 16) | $_ord_24; + } + +} diff --git a/PHPExcel/Shared/PCLZip/gnu-lgpl.txt b/PHPExcel/Shared/PCLZip/gnu-lgpl.txt new file mode 100644 index 0000000..b1e3f5a --- /dev/null +++ b/PHPExcel/Shared/PCLZip/gnu-lgpl.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/PHPExcel/Shared/PCLZip/pclzip.lib.php b/PHPExcel/Shared/PCLZip/pclzip.lib.php new file mode 100644 index 0000000..e7facc1 --- /dev/null +++ b/PHPExcel/Shared/PCLZip/pclzip.lib.php @@ -0,0 +1,5694 @@ +<?php +// -------------------------------------------------------------------------------- +// PhpConcept Library - Zip Module 2.8.2 +// -------------------------------------------------------------------------------- +// License GNU/LGPL - Vincent Blavet - August 2009 +// http://www.phpconcept.net +// -------------------------------------------------------------------------------- +// +// Presentation : +// PclZip is a PHP library that manage ZIP archives. +// So far tests show that archives generated by PclZip are readable by +// WinZip application and other tools. +// +// Description : +// See readme.txt and http://www.phpconcept.net +// +// Warning : +// This library and the associated files are non commercial, non professional +// work. +// It should not have unexpected results. However if any damage is caused by +// this software the author can not be responsible. +// The use of this software is at the risk of the user. +// +// -------------------------------------------------------------------------------- +// $Id: pclzip.lib.php,v 1.60 2009/09/30 21:01:04 vblavet Exp $ +// -------------------------------------------------------------------------------- + + // ----- Constants + if (!defined('PCLZIP_READ_BLOCK_SIZE')) { + define( 'PCLZIP_READ_BLOCK_SIZE', 2048 ); + } + + // ----- File list separator + // In version 1.x of PclZip, the separator for file list is a space + // (which is not a very smart choice, specifically for windows paths !). + // A better separator should be a comma (,). This constant gives you the + // abilty to change that. + // However notice that changing this value, may have impact on existing + // scripts, using space separated filenames. + // Recommanded values for compatibility with older versions : + //define( 'PCLZIP_SEPARATOR', ' ' ); + // Recommanded values for smart separation of filenames. + if (!defined('PCLZIP_SEPARATOR')) { + define( 'PCLZIP_SEPARATOR', ',' ); + } + + // ----- Error configuration + // 0 : PclZip Class integrated error handling + // 1 : PclError external library error handling. By enabling this + // you must ensure that you have included PclError library. + // [2,...] : reserved for futur use + if (!defined('PCLZIP_ERROR_EXTERNAL')) { + define( 'PCLZIP_ERROR_EXTERNAL', 0 ); + } + + // ----- Optional static temporary directory + // By default temporary files are generated in the script current + // path. + // If defined : + // - MUST BE terminated by a '/'. + // - MUST be a valid, already created directory + // Samples : + // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' ); + // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' ); + if (!defined('PCLZIP_TEMPORARY_DIR')) { + define( 'PCLZIP_TEMPORARY_DIR', '' ); + } + + // ----- Optional threshold ratio for use of temporary files + // Pclzip sense the size of the file to add/extract and decide to + // use or not temporary file. The algorythm is looking for + // memory_limit of PHP and apply a ratio. + // threshold = memory_limit * ratio. + // Recommended values are under 0.5. Default 0.47. + // Samples : + // define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.5 ); + if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) { + define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 ); + } + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED ***** +// -------------------------------------------------------------------------------- + + // ----- Global variables + $g_pclzip_version = "2.8.2"; + + // ----- Error codes + // -1 : Unable to open file in binary write mode + // -2 : Unable to open file in binary read mode + // -3 : Invalid parameters + // -4 : File does not exist + // -5 : Filename is too long (max. 255) + // -6 : Not a valid zip file + // -7 : Invalid extracted file size + // -8 : Unable to create directory + // -9 : Invalid archive extension + // -10 : Invalid archive format + // -11 : Unable to delete file (unlink) + // -12 : Unable to rename file (rename) + // -13 : Invalid header checksum + // -14 : Invalid archive size + define( 'PCLZIP_ERR_USER_ABORTED', 2 ); + define( 'PCLZIP_ERR_NO_ERROR', 0 ); + define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 ); + define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 ); + define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 ); + define( 'PCLZIP_ERR_MISSING_FILE', -4 ); + define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 ); + define( 'PCLZIP_ERR_INVALID_ZIP', -6 ); + define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 ); + define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 ); + define( 'PCLZIP_ERR_BAD_EXTENSION', -9 ); + define( 'PCLZIP_ERR_BAD_FORMAT', -10 ); + define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 ); + define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 ); + define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 ); + define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 ); + define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 ); + define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 ); + define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 ); + define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 ); + define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 ); + define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 ); + define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 ); + + // ----- Options values + define( 'PCLZIP_OPT_PATH', 77001 ); + define( 'PCLZIP_OPT_ADD_PATH', 77002 ); + define( 'PCLZIP_OPT_REMOVE_PATH', 77003 ); + define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 ); + define( 'PCLZIP_OPT_SET_CHMOD', 77005 ); + define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 ); + define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 ); + define( 'PCLZIP_OPT_BY_NAME', 77008 ); + define( 'PCLZIP_OPT_BY_INDEX', 77009 ); + define( 'PCLZIP_OPT_BY_EREG', 77010 ); + define( 'PCLZIP_OPT_BY_PREG', 77011 ); + define( 'PCLZIP_OPT_COMMENT', 77012 ); + define( 'PCLZIP_OPT_ADD_COMMENT', 77013 ); + define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 ); + define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 ); + define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 ); + define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 ); + // Having big trouble with crypt. Need to multiply 2 long int + // which is not correctly supported by PHP ... + //define( 'PCLZIP_OPT_CRYPT', 77018 ); + define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 ); + define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 ); + define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias + define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 ); + define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias + define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 ); + define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias + + // ----- File description attributes + define( 'PCLZIP_ATT_FILE_NAME', 79001 ); + define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 ); + define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 ); + define( 'PCLZIP_ATT_FILE_MTIME', 79004 ); + define( 'PCLZIP_ATT_FILE_CONTENT', 79005 ); + define( 'PCLZIP_ATT_FILE_COMMENT', 79006 ); + + // ----- Call backs values + define( 'PCLZIP_CB_PRE_EXTRACT', 78001 ); + define( 'PCLZIP_CB_POST_EXTRACT', 78002 ); + define( 'PCLZIP_CB_PRE_ADD', 78003 ); + define( 'PCLZIP_CB_POST_ADD', 78004 ); + /* For futur use + define( 'PCLZIP_CB_PRE_LIST', 78005 ); + define( 'PCLZIP_CB_POST_LIST', 78006 ); + define( 'PCLZIP_CB_PRE_DELETE', 78007 ); + define( 'PCLZIP_CB_POST_DELETE', 78008 ); + */ + + // -------------------------------------------------------------------------------- + // Class : PclZip + // Description : + // PclZip is the class that represent a Zip archive. + // The public methods allow the manipulation of the archive. + // Attributes : + // Attributes must not be accessed directly. + // Methods : + // PclZip() : Object creator + // create() : Creates the Zip archive + // listContent() : List the content of the Zip archive + // extract() : Extract the content of the archive + // properties() : List the properties of the archive + // -------------------------------------------------------------------------------- + class PclZip + { + // ----- Filename of the zip file + var $zipname = ''; + + // ----- File descriptor of the zip file + var $zip_fd = 0; + + // ----- Internal error handling + var $error_code = 1; + var $error_string = ''; + + // ----- Current status of the magic_quotes_runtime + // This value store the php configuration for magic_quotes + // The class can then disable the magic_quotes and reset it after + var $magic_quotes_status; + + // -------------------------------------------------------------------------------- + // Function : PclZip() + // Description : + // Creates a PclZip object and set the name of the associated Zip archive + // filename. + // Note that no real action is taken, if the archive does not exist it is not + // created. Use create() for that. + // -------------------------------------------------------------------------------- + function PclZip($p_zipname) + { + + // ----- Tests the zlib + if (!function_exists('gzopen')) + { + die('Abort '.basename(__FILE__).' : Missing zlib extensions'); + } + + // ----- Set the attributes + $this->zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; + + // ----- Return + return; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // create($p_filelist, $p_add_dir="", $p_remove_dir="") + // create($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two different synopsis. The first one is historical. + // This method creates a Zip Archive. The Zip file is created in the + // filesystem. The files and directories indicated in $p_filelist + // are added in the archive. See the parameters description for the + // supported format of $p_filelist. + // When a directory is in the list, the directory and its content is added + // in the archive. + // In this synopsis, the function takes an optional variable list of + // options. See bellow the supported options. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function create($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove from the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Invalid number / type of arguments"); + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + if ($v_string != '') { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + else { + } + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // add($p_filelist, $p_add_dir="", $p_remove_dir="") + // add($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two synopsis. The first one is historical. + // This methods add the list of files in an existing archive. + // If a file with the same name already exists, it is added at the end of the + // archive, the first one is still present. + // If the archive does not exist, it is created. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_OPT_ADD_COMMENT : + // PCLZIP_OPT_PREPEND_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function add($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_ADD_COMMENT => 'optional', + PCLZIP_OPT_PREPEND_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : listContent() + // Description : + // This public method, gives the list of the files and directories, with their + // properties. + // The properties of each entries in the list are (used also in other functions) : + // filename : Name of the file. For a create or add action it is the filename + // given by the user. For an extract function it is the filename + // of the extracted file. + // stored_filename : Name of the file / directory stored in the archive. + // size : Size of the stored file. + // compressed_size : Size of the file's data compressed in the archive + // (without the headers overhead) + // mtime : Last known modification date of the file (UNIX timestamp) + // comment : Comment associated with the file + // folder : true | false + // index : index of the file in the archive + // status : status of the action (depending of the action) : + // Values are : + // ok : OK ! + // filtered : the file / dir is not extracted (filtered by user) + // already_a_directory : the file can not be extracted because a + // directory with the same name already exists + // write_protected : the file can not be extracted because a file + // with the same name already exists and is + // write protected + // newer_exist : the file was not extracted because a newer file exists + // path_creation_fail : the file is not extracted because the folder + // does not exist and can not be created + // write_error : the file was not extracted because there was a + // error while writing the file + // read_error : the file was not extracted because there was a error + // while reading the file + // invalid_header : the file was not extracted because of an archive + // format error (bad file header) + // Note that each time a method can continue operating when there + // is an action error on a file, the error is only logged in the file status. + // Return Values : + // 0 on an unrecoverable failure, + // The list of the files in the archive. + // -------------------------------------------------------------------------------- + function listContent() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = $this->privList($p_list)) != 1) + { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // extract($p_path="./", $p_remove_path="") + // extract([$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method extract all the files / directories from the archive to the + // folder indicated in $p_path. + // If you want to ignore the 'root' part of path of the memorized files + // you can indicate this in the optional $p_remove_path parameter. + // By default, if a newer file with the same name already exists, the + // file is not extracted. + // + // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions + // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append + // at the end of the path value of PCLZIP_OPT_PATH. + // Parameters : + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 or a negative value on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function extract() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Trace + + // ----- Call the extracting fct + $p_list = array(); + $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, + $v_remove_all_path, $v_options); + if ($v_result < 1) { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : + // extractByIndex($p_index, $p_path="./", $p_remove_path="") + // extractByIndex($p_index, [$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method is doing a partial extract of the archive. + // The extracted files or folders are identified by their index in the + // archive (from 0 to n). + // Note that if the index identify a folder, only the folder entry is + // extracted, not all the files included in the archive. + // Parameters : + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and + // not as files. + // The resulting content is in a new field 'content' in the file + // structure. + // This option must be used alone (any other options are ignored). + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + //function extractByIndex($p_index, options...) + function extractByIndex($p_index) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + } + else { + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Trace + + // ----- Trick + // Here I want to reuse extractByRule(), so I need to parse the $p_index + // with privParseOptions() + $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index); + $v_options_trick = array(); + $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, + array (PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Call the extracting fct + if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // delete([$p_option, $p_option_value, ...]) + // Description : + // This method removes files from the archive. + // If no parameters are given, then all the archive is emptied. + // Parameters : + // None or optional arguments. + // Options : + // PCLZIP_OPT_BY_INDEX : + // PCLZIP_OPT_BY_NAME : + // PCLZIP_OPT_BY_EREG : + // PCLZIP_OPT_BY_PREG : + // Return Values : + // 0 on failure, + // The list of the files which are still present in the archive. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function delete() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Call the delete fct + $v_list = array(); + if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { + $this->privSwapBackMagicQuotes(); + unset($v_list); + return(0); + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : deleteByIndex() + // Description : + // ***** Deprecated ***** + // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. + // -------------------------------------------------------------------------------- + function deleteByIndex($p_index) + { + + $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : properties() + // Description : + // This method gives the properties of the archive. + // The properties are : + // nb : Number of files in the archive + // comment : Comment associated with the archive file + // status : not_exist, ok + // Parameters : + // None + // Return Values : + // 0 on failure, + // An array with the archive properties. + // -------------------------------------------------------------------------------- + function properties() + { + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + $this->privSwapBackMagicQuotes(); + return(0); + } + + // ----- Default properties + $v_prop = array(); + $v_prop['comment'] = ''; + $v_prop['nb'] = 0; + $v_prop['status'] = 'not_exist'; + + // ----- Look if file exists + if (@is_file($this->zipname)) + { + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return 0; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return 0; + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Set the user attributes + $v_prop['comment'] = $v_central_dir['comment']; + $v_prop['nb'] = $v_central_dir['entries']; + $v_prop['status'] = 'ok'; + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_prop; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : duplicate() + // Description : + // This method creates an archive by copying the content of an other one. If + // the archive already exist, it is replaced by the new one without any warning. + // Parameters : + // $p_archive : The filename of a valid archive, or + // a valid PclZip object. + // Return Values : + // 1 on success. + // 0 or a negative value on error (error code). + // -------------------------------------------------------------------------------- + function duplicate($p_archive) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the $p_archive is a PclZip object + if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) + { + + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive->zipname); + } + + // ----- Look if the $p_archive is a string (so a filename) + else if (is_string($p_archive)) + { + + // ----- Check that $p_archive is a valid zip file + // TBC : Should also check the archive format + if (!is_file($p_archive)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'"); + $v_result = PCLZIP_ERR_MISSING_FILE; + } + else { + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : merge() + // Description : + // This method merge the $p_archive_to_add archive at the end of the current + // one ($this). + // If the archive ($this) does not exist, the merge becomes a duplicate. + // If the $p_archive_to_add archive does not exist, the merge is a success. + // Parameters : + // $p_archive_to_add : It can be directly the filename of a valid zip archive, + // or a PclZip object archive. + // Return Values : + // 1 on success, + // 0 or negative values on error (see below). + // -------------------------------------------------------------------------------- + function merge($p_archive_to_add) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Look if the $p_archive_to_add is a PclZip object + if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) + { + + // ----- Merge the archive + $v_result = $this->privMerge($p_archive_to_add); + } + + // ----- Look if the $p_archive_to_add is a string (so a filename) + else if (is_string($p_archive_to_add)) + { + + // ----- Create a temporary archive + $v_object_archive = new PclZip($p_archive_to_add); + + // ----- Merge the archive + $v_result = $this->privMerge($v_object_archive); + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : errorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorCode() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorCode()); + } + else { + return($this->error_code); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorName() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorName($p_with_code=false) + { + $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', + PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', + PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', + PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', + PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', + PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', + PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', + PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', + PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', + PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', + PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', + PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', + PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', + PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', + PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', + PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', + PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', + PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', + PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION' + ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE' + ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' + ); + + if (isset($v_name[$this->error_code])) { + $v_value = $v_name[$this->error_code]; + } + else { + $v_value = 'NoName'; + } + + if ($p_with_code) { + return($v_value.' ('.$this->error_code.')'); + } + else { + return($v_value); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorInfo() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorInfo($p_full=false) + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorString()); + } + else { + if ($p_full) { + return($this->errorName(true)." : ".$this->error_string); + } + else { + return($this->error_string." [code ".$this->error_code."]"); + } + } + } + // -------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : privCheckFormat() + // Description : + // This method check that the archive exists and is a valid zip archive. + // Several level of check exists. (futur) + // Parameters : + // $p_level : Level of check. Default 0. + // 0 : Check the first bytes (magic codes) (default value)) + // 1 : 0 + Check the central directory (futur) + // 2 : 1 + Check each file header (futur) + // Return Values : + // true on success, + // false on error, the error code is set. + // -------------------------------------------------------------------------------- + function privCheckFormat($p_level=0) + { + $v_result = true; + + // ----- Reset the file system cache + clearstatcache(); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the file exits + if (!is_file($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); + return(false); + } + + // ----- Check that the file is readeable + if (!is_readable($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); + return(false); + } + + // ----- Check the magic code + // TBC + + // ----- Check the central header + // TBC + + // ----- Check each file header + // TBC + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privParseOptions() + // Description : + // This internal methods reads the variable list of arguments ($p_options_list, + // $p_size) and generate an array with the options and values ($v_result_list). + // $v_requested_options contains the options that can be present and those that + // must be present. + // $v_requested_options is an array, with the option value as key, and 'optional', + // or 'mandatory' as value. + // Parameters : + // See above. + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) + { + $v_result=1; + + // ----- Read the options + $i=0; + while ($i<$p_size) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$p_options_list[$i]])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for next option + switch ($p_options_list[$i]) { + // ----- Look for options that request a path value + case PCLZIP_OPT_PATH : + case PCLZIP_OPT_REMOVE_PATH : + case PCLZIP_OPT_ADD_PATH : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_THRESHOLD : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + // ----- Check the value + $v_value = $p_options_list[$i+1]; + if ((!is_integer($v_value)) || ($v_value<0)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Get the value (and convert it in bytes) + $v_result_list[$p_options_list[$i]] = $v_value*1048576; + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_ON : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_TEMP_FILE_OFF : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); + return PclZip::errorCode(); + } + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if ( is_string($p_options_list[$i+1]) + && ($p_options_list[$i+1] != '')) { + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + } + else { + } + break; + + // ----- Look for options that request an array of string for value + case PCLZIP_OPT_BY_NAME : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an EREG or PREG expression + case PCLZIP_OPT_BY_EREG : + // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG + // to PCLZIP_OPT_BY_PREG + $p_options_list[$i] = PCLZIP_OPT_BY_PREG; + case PCLZIP_OPT_BY_PREG : + //case PCLZIP_OPT_CRYPT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that takes a string + case PCLZIP_OPT_COMMENT : + case PCLZIP_OPT_ADD_COMMENT : + case PCLZIP_OPT_PREPEND_COMMENT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, + "Missing parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, + "Wrong parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an array of index + case PCLZIP_OPT_BY_INDEX : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_work_list = array(); + if (is_string($p_options_list[$i+1])) { + + // ----- Remove spaces + $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); + + // ----- Parse items + $v_work_list = explode(",", $p_options_list[$i+1]); + } + else if (is_integer($p_options_list[$i+1])) { + $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_work_list = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Reduce the index list + // each index item in the list must be a couple with a start and + // an end value : [0,3], [5-5], [8-10], ... + // ----- Check the format of each item + $v_sort_flag=false; + $v_sort_value=0; + for ($j=0; $j<sizeof($v_work_list); $j++) { + // ----- Explode the item + $v_item_list = explode("-", $v_work_list[$j]); + $v_size_item_list = sizeof($v_item_list); + + // ----- TBC : Here we might check that each item is a + // real integer ... + + // ----- Look for single value + if ($v_size_item_list == 1) { + // ----- Set the option value + $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; + $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0]; + } + elseif ($v_size_item_list == 2) { + // ----- Set the option value + $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; + $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + + // ----- Look for list sort + if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) { + $v_sort_flag=true; + + // ----- TBC : An automatic sort should be writen ... + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start']; + } + + // ----- Sort the items + if ($v_sort_flag) { + // TBC : To Be Completed + } + + // ----- Next option + $i++; + break; + + // ----- Look for options that request no value + case PCLZIP_OPT_REMOVE_ALL_PATH : + case PCLZIP_OPT_EXTRACT_AS_STRING : + case PCLZIP_OPT_NO_COMPRESSION : + case PCLZIP_OPT_EXTRACT_IN_OUTPUT : + case PCLZIP_OPT_REPLACE_NEWER : + case PCLZIP_OPT_STOP_ON_ERROR : + $v_result_list[$p_options_list[$i]] = true; + break; + + // ----- Look for options that request an octal value + case PCLZIP_OPT_SET_CHMOD : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + $i++; + break; + + // ----- Look for options that request a call-back + case PCLZIP_CB_PRE_EXTRACT : + case PCLZIP_CB_POST_EXTRACT : + case PCLZIP_CB_PRE_ADD : + case PCLZIP_CB_POST_ADD : + /* for futur use + case PCLZIP_CB_PRE_DELETE : + case PCLZIP_CB_POST_DELETE : + case PCLZIP_CB_PRE_LIST : + case PCLZIP_CB_POST_LIST : + */ + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_function_name = $p_options_list[$i+1]; + + // ----- Check that the value is a valid existing function + if (!function_exists($v_function_name)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Set the attribute + $v_result_list[$p_options_list[$i]] = $v_function_name; + $i++; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '" + .$p_options_list[$i]."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Next options + $i++; + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($v_result_list[$key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + + // ----- Return + return PclZip::errorCode(); + } + } + } + } + + // ----- Look for default values + if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOptionDefaultThreshold() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privOptionDefaultThreshold(&$p_options) + { + $v_result=1; + + if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { + return $v_result; + } + + // ----- Get 'memory_limit' configuration value + $v_memory_limit = ini_get('memory_limit'); + $v_memory_limit = trim($v_memory_limit); + $last = strtolower(substr($v_memory_limit, -1)); + + if($last == 'g') + //$v_memory_limit = $v_memory_limit*1024*1024*1024; + $v_memory_limit = $v_memory_limit*1073741824; + if($last == 'm') + //$v_memory_limit = $v_memory_limit*1024*1024; + $v_memory_limit = $v_memory_limit*1048576; + if($last == 'k') + $v_memory_limit = $v_memory_limit*1024; + + $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO); + + + // ----- Sanity check : No threshold if value lower than 1M + if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { + unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrParseAtt() + // Description : + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false) + { + $v_result=1; + + // ----- For each file in the list check the attributes + foreach ($p_file_list as $v_key => $v_value) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$v_key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for attribute + switch ($v_key) { + case PCLZIP_ATT_FILE_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['filename'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + break; + + case PCLZIP_ATT_FILE_NEW_SHORT_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_short_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + case PCLZIP_ATT_FILE_NEW_FULL_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_full_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + // ----- Look for options that takes a string + case PCLZIP_ATT_FILE_COMMENT : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['comment'] = $v_value; + break; + + case PCLZIP_ATT_FILE_MTIME : + if (!is_integer($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['mtime'] = $v_value; + break; + + case PCLZIP_ATT_FILE_CONTENT : + $p_filedescr['content'] = $v_value; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '".$v_key."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($p_file_list[$key])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + return PclZip::errorCode(); + } + } + } + } + + // end foreach + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrExpand() + // Description : + // This method look for each item of the list to see if its a file, a folder + // or a string to be added as file. For any other type of files (link, other) + // just ignore the item. + // Then prepare the information that will be stored for that file. + // When its a folder, expand the folder with all the files that are in that + // folder (recursively). + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrExpand(&$p_filedescr_list, &$p_options) + { + $v_result=1; + + // ----- Create a result list + $v_result_list = array(); + + // ----- Look each entry + for ($i=0; $i<sizeof($p_filedescr_list); $i++) { + + // ----- Get filedescr + $v_descr = $p_filedescr_list[$i]; + + // ----- Reduce the filename + $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false); + $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']); + + // ----- Look for real file or folder + if (file_exists($v_descr['filename'])) { + if (@is_file($v_descr['filename'])) { + $v_descr['type'] = 'file'; + } + else if (@is_dir($v_descr['filename'])) { + $v_descr['type'] = 'folder'; + } + else if (@is_link($v_descr['filename'])) { + // skip + continue; + } + else { + // skip + continue; + } + } + + // ----- Look for string added as file + else if (isset($v_descr['content'])) { + $v_descr['type'] = 'virtual_file'; + } + + // ----- Missing file + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exist"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Calculate the stored filename + $this->privCalculateStoredFilename($v_descr, $p_options); + + // ----- Add the descriptor in result list + $v_result_list[sizeof($v_result_list)] = $v_descr; + + // ----- Look for folder + if ($v_descr['type'] == 'folder') { + // ----- List of items in folder + $v_dirlist_descr = array(); + $v_dirlist_nb = 0; + if ($v_folder_handler = @opendir($v_descr['filename'])) { + while (($v_item_handler = @readdir($v_folder_handler)) !== false) { + + // ----- Skip '.' and '..' + if (($v_item_handler == '.') || ($v_item_handler == '..')) { + continue; + } + + // ----- Compose the full filename + $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler; + + // ----- Look for different stored filename + // Because the name of the folder was changed, the name of the + // files/sub-folders also change + if (($v_descr['stored_filename'] != $v_descr['filename']) + && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { + if ($v_descr['stored_filename'] != '') { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler; + } + else { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; + } + } + + $v_dirlist_nb++; + } + + @closedir($v_folder_handler); + } + else { + // TBC : unable to open folder in read mode + } + + // ----- Expand each element of the list + if ($v_dirlist_nb != 0) { + // ----- Expand + if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { + return $v_result; + } + + // ----- Concat the resulting list + $v_result_list = array_merge($v_result_list, $v_dirlist_descr); + } + else { + } + + // ----- Free local array + unset($v_dirlist_descr); + } + } + + // ----- Get the result list + $p_filedescr_list = $v_result_list; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCreate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCreate($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the file in write mode + if (($v_result = $this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Add the list of files + $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); + + // ----- Close + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAdd() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAdd($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Look if the archive exists or is empty + if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) + { + + // ----- Do a create + $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); + + // ----- Return + return $v_result; + } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Create the Central Dir files header + for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++) + { + // ----- Create the file header + if ($v_header_list[$i]['status'] == 'ok') { + if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = $v_central_dir['comment']; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { + $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOpenFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privOpenFd($p_mode) + { + $v_result=1; + + // ----- Look if already open + if ($this->zip_fd != 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCloseFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privCloseFd() + { + $v_result=1; + + if ($this->zip_fd != 0) + @fclose($this->zip_fd); + $this->zip_fd = 0; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddList() + // Description : + // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is + // different from the real path of the file. This is usefull if you want to have PclTar + // running in any directory, and memorize relative path from an other directory. + // Parameters : + // $p_list : An array containing the file or directory names to add in the tar + // $p_result_list : list of added files with their properties (specially the status field) + // $p_add_dir : Path to add in the filename path archived + // $p_remove_dir : Path to remove in the filename path archived + // Return Values : + // -------------------------------------------------------------------------------- +// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) + function privAddList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Create the Central Dir files header + for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++) + { + // ----- Create the file header + if ($v_header_list[$i]['status'] == 'ok') { + if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileList() + // Description : + // Parameters : + // $p_filedescr_list : An array containing the file description + // or directory names to add in the zip + // $p_result_list : list of added files with their properties (specially the status field) + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_header = array(); + + // ----- Recuperate the current number of elt in list + $v_nb = sizeof($p_result_list); + + // ----- Loop on the files + for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) { + // ----- Format the filename + $p_filedescr_list[$j]['filename'] + = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false); + + + // ----- Skip empty file names + // TBC : Can this be possible ? not checked in DescrParseAtt ? + if ($p_filedescr_list[$j]['filename'] == "") { + continue; + } + + // ----- Check the filename + if ( ($p_filedescr_list[$j]['type'] != 'virtual_file') + && (!file_exists($p_filedescr_list[$j]['filename']))) { + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exist"); + return PclZip::errorCode(); + } + + // ----- Look if it is a file or a dir with no all path remove option + // or a dir with all its path removed +// if ( (is_file($p_filedescr_list[$j]['filename'])) +// || ( is_dir($p_filedescr_list[$j]['filename']) + if ( ($p_filedescr_list[$j]['type'] == 'file') + || ($p_filedescr_list[$j]['type'] == 'virtual_file') + || ( ($p_filedescr_list[$j]['type'] == 'folder') + && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]) + || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) + ) { + + // ----- Add the file + $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header, + $p_options); + if ($v_result != 1) { + return $v_result; + } + + // ----- Store the file infos + $p_result_list[$v_nb++] = $v_header; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=1; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + // TBC : Already done in the fileAtt check ... ? + if ($p_filename == "") { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for a stored different filename + /* TBC : Removed + if (isset($p_filedescr['stored_filename'])) { + $v_stored_filename = $p_filedescr['stored_filename']; + } + else { + $v_stored_filename = $p_filedescr['stored_filename']; + } + */ + + // ----- Set the file properties + clearstatcache(); + $p_header['version'] = 20; + $p_header['version_extracted'] = 10; + $p_header['flag'] = 0; + $p_header['compression'] = 0; + $p_header['crc'] = 0; + $p_header['compressed_size'] = 0; + $p_header['filename_len'] = strlen($p_filename); + $p_header['extra_len'] = 0; + $p_header['disk'] = 0; + $p_header['internal'] = 0; + $p_header['offset'] = 0; + $p_header['filename'] = $p_filename; +// TBC : Removed $p_header['stored_filename'] = $v_stored_filename; + $p_header['stored_filename'] = $p_filedescr['stored_filename']; + $p_header['extra'] = ''; + $p_header['status'] = 'ok'; + $p_header['index'] = -1; + + // ----- Look for regular file + if ($p_filedescr['type']=='file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for regular folder + else if ($p_filedescr['type']=='folder') { + $p_header['external'] = 0x00000010; + $p_header['mtime'] = filemtime($p_filename); + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for virtual file + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = strlen($p_filedescr['content']); + } + + + // ----- Look for filetime + if (isset($p_filedescr['mtime'])) { + $p_header['mtime'] = $p_filedescr['mtime']; + } + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['mtime'] = time(); + } + else { + $p_header['mtime'] = filemtime($p_filename); + } + + // ------ Look for file comment + if (isset($p_filedescr['comment'])) { + $p_header['comment_len'] = strlen($p_filedescr['comment']); + $p_header['comment'] = $p_filedescr['comment']; + } + else { + $p_header['comment_len'] = 0; + $p_header['comment'] = ''; + } + + // ----- Look for pre-add callback + if (isset($p_options[PCLZIP_CB_PRE_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_header['status'] = "skipped"; + $v_result = 1; + } + + // ----- Update the informations + // Only some fields can be modified + if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { + $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); + } + } + + // ----- Look for empty stored filename + if ($p_header['stored_filename'] == "") { + $p_header['status'] = "filtered"; + } + + // ----- Check the path length + if (strlen($p_header['stored_filename']) > 0xFF) { + $p_header['status'] = 'filename_too_long'; + } + + // ----- Look if no error, or file not skipped + if ($p_header['status'] == 'ok') { + + // ----- Look for a file + if ($p_filedescr['type'] == 'file') { + // ----- Look for using temporary file to zip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) { + $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Use "in memory" zip algo + else { + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Read the file content + $v_content = @fread($v_file, $p_header['size']); + + // ----- Close the file + @fclose($v_file); + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + + } + + } + + // ----- Look for a virtual file (a file from string) + else if ($p_filedescr['type'] == 'virtual_file') { + + $v_content = $p_filedescr['content']; + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + } + + // ----- Look for a directory + else if ($p_filedescr['type'] == 'folder') { + // ----- Look for directory last '/' + if (@substr($p_header['stored_filename'], -1) != '/') { + $p_header['stored_filename'] .= '/'; + } + + // ----- Set the file properties + $p_header['size'] = 0; + //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked + $p_header['external'] = 0x00000010; // Value for a folder : to be checked + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) + { + return $v_result; + } + } + } + + // ----- Look for post-add callback + if (isset($p_options[PCLZIP_CB_POST_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Ignored + $v_result = 1; + } + + // ----- Update the informations + // Nothing can be modified + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=PCLZIP_ERR_NO_ERROR; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Creates a compressed temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = filesize($p_filename); + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @gzputs($v_file_compressed, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file); + @gzclose($v_file_compressed); + + // ----- Check the minimum file size + if (filesize($v_gzip_temp_name) < 18) { + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'); + return PclZip::errorCode(); + } + + // ----- Extract the compressed attributes + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the gzip file header + $v_binary_data = @fread($v_file_compressed, 10); + $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); + + // ----- Check some parameters + $v_data_header['os'] = bin2hex($v_data_header['os']); + + // ----- Read the gzip file footer + @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8); + $v_binary_data = @fread($v_file_compressed, 8); + $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); + + // ----- Set the attributes + $p_header['compression'] = ord($v_data_header['cm']); + //$p_header['mtime'] = $v_data_header['mtime']; + $p_header['crc'] = $v_data_footer['crc']; + $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18; + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + return $v_result; + } + + // ----- Add the compressed data + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) + { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + fseek($v_file_compressed, 10); + $v_size = $p_header['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file_compressed, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Unlink the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCalculateStoredFilename() + // Description : + // Based on file descriptor properties and global options, this method + // calculate the filename that will be stored in the archive. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCalculateStoredFilename(&$p_filedescr, &$p_options) + { + $v_result=1; + + // ----- Working variables + $p_filename = $p_filedescr['filename']; + if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { + $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; + } + else { + $p_add_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { + $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; + } + else { + $p_remove_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + else { + $p_remove_all_dir = 0; + } + + + // ----- Look for full name change + if (isset($p_filedescr['new_full_name'])) { + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); + } + + // ----- Look for path and/or short name change + else { + + // ----- Look for short name change + // Its when we cahnge just the filename but not the path + if (isset($p_filedescr['new_short_name'])) { + $v_path_info = pathinfo($p_filename); + $v_dir = ''; + if ($v_path_info['dirname'] != '') { + $v_dir = $v_path_info['dirname'].'/'; + } + $v_stored_filename = $v_dir.$p_filedescr['new_short_name']; + } + else { + // ----- Calculate the stored filename + $v_stored_filename = $p_filename; + } + + // ----- Look for all path to remove + if ($p_remove_all_dir) { + $v_stored_filename = basename($p_filename); + } + // ----- Look for partial path remove + else if ($p_remove_dir != "") { + if (substr($p_remove_dir, -1) != '/') + $p_remove_dir .= "/"; + + if ( (substr($p_filename, 0, 2) == "./") + || (substr($p_remove_dir, 0, 2) == "./")) { + + if ( (substr($p_filename, 0, 2) == "./") + && (substr($p_remove_dir, 0, 2) != "./")) { + $p_remove_dir = "./".$p_remove_dir; + } + if ( (substr($p_filename, 0, 2) != "./") + && (substr($p_remove_dir, 0, 2) == "./")) { + $p_remove_dir = substr($p_remove_dir, 2); + } + } + + $v_compare = PclZipUtilPathInclusion($p_remove_dir, + $v_stored_filename); + if ($v_compare > 0) { + if ($v_compare == 2) { + $v_stored_filename = ""; + } + else { + $v_stored_filename = substr($v_stored_filename, + strlen($p_remove_dir)); + } + } + } + + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); + + // ----- Look for path to add + if ($p_add_dir != "") { + if (substr($p_add_dir, -1) == "/") + $v_stored_filename = $p_add_dir.$v_stored_filename; + else + $v_stored_filename = $p_add_dir."/".$v_stored_filename; + } + } + + // ----- Filename (reduce the path of stored name) + $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); + $p_filedescr['stored_filename'] = $v_stored_filename; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteFileHeader(&$p_header) + { + $v_result=1; + + // ----- Store the offset position of the file + $p_header['offset'] = ftell($this->zip_fd); + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + // ----- Packed data + $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, + $p_header['version_extracted'], $p_header['flag'], + $p_header['compression'], $v_mtime, $v_mdate, + $p_header['crc'], $p_header['compressed_size'], + $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len']); + + // ----- Write the first 148 bytes of the header in the archive + fputs($this->zip_fd, $v_binary_data, 30); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralFileHeader(&$p_header) + { + $v_result=1; + + // TBC + //for(reset($p_header); $key = key($p_header); next($p_header)) { + //} + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + + // ----- Packed data + $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, + $p_header['version'], $p_header['version_extracted'], + $p_header['flag'], $p_header['compression'], + $v_mtime, $v_mdate, $p_header['crc'], + $p_header['compressed_size'], $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len'], $p_header['comment_len'], + $p_header['disk'], $p_header['internal'], + $p_header['external'], $p_header['offset']); + + // ----- Write the 42 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 46); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + if ($p_header['comment_len'] != 0) + { + fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) + { + $v_result=1; + + // ----- Packed data + $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, + $p_nb_entries, $p_size, + $p_offset, strlen($p_comment)); + + // ----- Write the 22 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 22); + + // ----- Write the variable fields + if (strlen($p_comment) != 0) + { + fputs($this->zip_fd, $p_comment, strlen($p_comment)); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privList() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privList(&$p_list) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of Central Dir + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_central_dir['offset'])) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + for ($i=0; $i<$v_central_dir['entries']; $i++) + { + // ----- Read the file header + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + $v_header['index'] = $i; + + // ----- Get the only interesting attributes + $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); + unset($v_header); + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privConvertHeader2FileInfo() + // Description : + // This function takes the file informations from the central directory + // entries and extract the interesting parameters that will be given back. + // The resulting file infos are set in the array $p_info + // $p_info['filename'] : Filename with full path. Given by user (add), + // extracted in the filesystem (extract). + // $p_info['stored_filename'] : Stored filename in the archive. + // $p_info['size'] = Size of the file. + // $p_info['compressed_size'] = Compressed size of the file. + // $p_info['mtime'] = Last modification date of the file. + // $p_info['comment'] = Comment associated with the file. + // $p_info['folder'] = true/false : indicates if the entry is a folder or not. + // $p_info['status'] = status of the action on the file. + // $p_info['crc'] = CRC of the file content. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privConvertHeader2FileInfo($p_header, &$p_info) + { + $v_result=1; + + // ----- Get the interesting attributes + $v_temp_path = PclZipUtilPathReduction($p_header['filename']); + $p_info['filename'] = $v_temp_path; + $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); + $p_info['stored_filename'] = $v_temp_path; + $p_info['size'] = $p_header['size']; + $p_info['compressed_size'] = $p_header['compressed_size']; + $p_info['mtime'] = $p_header['mtime']; + $p_info['comment'] = $p_header['comment']; + $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); + $p_info['index'] = $p_header['index']; + $p_info['status'] = $p_header['status']; + $p_info['crc'] = $p_header['crc']; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractByRule() + // Description : + // Extract a file or directory depending of rules (by index, by name, ...) + // Parameters : + // $p_file_list : An array where will be placed the properties of each + // extracted file + // $p_path : Path to add while writing the extracted files + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // 1 on success,0 or less on error (see error code list) + // -------------------------------------------------------------------------------- + function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check the path + if ( ($p_path == "") + || ( (substr($p_path, 0, 1) != "/") + && (substr($p_path, 0, 3) != "../") + && (substr($p_path,1,2)!=":/"))) + $p_path = "./".$p_path; + + // ----- Reduce the path last (and duplicated) '/' + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + $p_path = substr($p_path, 0, strlen($p_path)-1); + } + } + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + + // ----- Read each entry + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read next Central dir entry + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Store the index + $v_header['index'] = $i; + + // ----- Store the file position + $v_pos_entry = ftell($this->zip_fd); + + // ----- Look for the specific extract rules + $v_extract = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) { + + // ----- Look for a directory + if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { + + // ----- Look if the directory is in the filename path + if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_extract = true; + } + } + // ----- Look for a filename + elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_extract = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) { + + if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_extract = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + + // ----- Look for no rule, which means extract all the archive + else { + $v_extract = true; + } + + // ----- Check compression method + if ( ($v_extract) + && ( ($v_header['compression'] != 8) + && ($v_header['compression'] != 0))) { + $v_header['status'] = 'unsupported_compression'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, + "Filename '".$v_header['stored_filename']."' is " + ."compressed by an unsupported compression " + ."method (".$v_header['compression'].") "); + + return PclZip::errorCode(); + } + } + + // ----- Check encrypted files + if (($v_extract) && (($v_header['flag'] & 1) == 1)) { + $v_header['status'] = 'unsupported_encryption'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, + "Unsupported encryption for " + ." filename '".$v_header['stored_filename'] + ."'"); + + return PclZip::errorCode(); + } + } + + // ----- Look for real extraction + if (($v_extract) && ($v_header['status'] != 'ok')) { + $v_result = $this->privConvertHeader2FileInfo($v_header, + $p_file_list[$v_nb_extracted++]); + if ($v_result != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + $v_extract = false; + } + + // ----- Look for real extraction + if ($v_extract) + { + + // ----- Go to the file position + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_header['offset'])) + { + // ----- Close the zip file + $this->privCloseFd(); + + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for extraction as string + if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + + $v_string = ''; + + // ----- Extracting the file + $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Set the file content + $p_file_list[$v_nb_extracted]['content'] = $v_string; + + // ----- Next extracted file + $v_nb_extracted++; + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for extraction in standard output + elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) + && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { + // ----- Extracting the file in standard output + $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for normal extraction + else { + // ----- Extracting the file + $v_result1 = $this->privExtractFile($v_header, + $p_path, $p_remove_path, + $p_remove_all_path, + $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + } + } + + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFile() + // Description : + // Parameters : + // Return Values : + // + // 1 : ... ? + // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback + // -------------------------------------------------------------------------------- + function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for all path to remove + if ($p_remove_all_path == true) { + // ----- Look for folder entry that not need to be extracted + if (($p_entry['external']&0x00000010)==0x00000010) { + + $p_entry['status'] = "filtered"; + + return $v_result; + } + + // ----- Get the basename of the path + $p_entry['filename'] = basename($p_entry['filename']); + } + + // ----- Look for path to remove + else if ($p_remove_path != "") + { + if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) + { + + // ----- Change the file status + $p_entry['status'] = "filtered"; + + // ----- Return + return $v_result; + } + + $p_remove_path_size = strlen($p_remove_path); + if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) + { + + // ----- Remove the path + $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); + + } + } + + // ----- Add the path + if ($p_path != '') { + $p_entry['filename'] = $p_path."/".$p_entry['filename']; + } + + // ----- Check a base_dir_restriction + if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { + $v_inclusion + = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], + $p_entry['filename']); + if ($v_inclusion == 0) { + + PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, + "Filename '".$p_entry['filename']."' is " + ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); + + return PclZip::errorCode(); + } + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Look for specific actions while the file exist + if (file_exists($p_entry['filename'])) + { + + // ----- Look if file is a directory + if (is_dir($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "already_a_directory"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, + "Filename '".$p_entry['filename']."' is " + ."already used by an existing directory"); + + return PclZip::errorCode(); + } + } + // ----- Look if file is write protected + else if (!is_writeable($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "write_protected"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Filename '".$p_entry['filename']."' exists " + ."and is write protected"); + + return PclZip::errorCode(); + } + } + + // ----- Look if the extracted file is older + else if (filemtime($p_entry['filename']) > $p_entry['mtime']) + { + // ----- Change the file status + if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) + && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { + } + else { + $p_entry['status'] = "newer_exist"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Newer version of '".$p_entry['filename']."' exists " + ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); + + return PclZip::errorCode(); + } + } + } + else { + } + } + + // ----- Check the directory availability and create it if necessary + else { + if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) + $v_dir_to_check = $p_entry['filename']; + else if (!strstr($p_entry['filename'], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($p_entry['filename']); + + if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { + + // ----- Change the file status + $p_entry['status'] = "path_creation_fail"; + + // ----- Return + //return $v_result; + $v_result = 1; + } + } + } + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) + { + // ----- Look for not compressed file + if ($p_entry['compression'] == 0) { + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) + { + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + // ----- Return + return $v_result; + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + /* Try to speed up the code + $v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_binary_data, $v_read_size); + */ + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Closing the destination file + fclose($v_dest_file); + + // ----- Change the file mtime + touch($p_entry['filename'], $p_entry['mtime']); + + + } + else { + // ----- TBC + // Need to be finished + if (($p_entry['flag'] & 1) == 1) { + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'); + return PclZip::errorCode(); + } + + + // ----- Look for using temporary file to unzip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) { + $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Look for extract in memory + else { + + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = @gzinflate($v_buffer); + unset($v_buffer); + if ($v_file_content === FALSE) { + + // ----- Change the file status + // TBC + $p_entry['status'] = "error"; + + return $v_result; + } + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + return $v_result; + } + + // ----- Write the uncompressed data + @fwrite($v_dest_file, $v_file_content, $p_entry['size']); + unset($v_file_content); + + // ----- Closing the destination file + @fclose($v_dest_file); + + } + + // ----- Change the file mtime + @touch($p_entry['filename'], $p_entry['mtime']); + } + + // ----- Look for chmod option + if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { + + // ----- Change the mode of the file + @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + } + + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileUsingTempFile(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Creates a temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + + // ----- Write gz file format header + $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3)); + @fwrite($v_dest_file, $v_binary_data, 10); + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Write gz file format footer + $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); + @fwrite($v_dest_file, $v_binary_data, 8); + + // ----- Close the temporary file + @fclose($v_dest_file); + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + $p_entry['status'] = "write_error"; + return $v_result; + } + + // ----- Open the temporary gz file + if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { + @fclose($v_dest_file); + $p_entry['status'] = "read_error"; + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($v_src_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + @fclose($v_dest_file); + @gzclose($v_src_file); + + // ----- Delete the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileInOutput() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileInOutput(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + // ----- Trace + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compressed_size'] == $p_entry['size']) { + + // ----- Read the file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Send the file to the output + echo $v_buffer; + unset($v_buffer); + } + else { + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = gzinflate($v_buffer); + unset($v_buffer); + + // ----- Send the file to the output + echo $v_file_content; + unset($v_file_content); + } + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileAsString() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) + { + $v_result=1; + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + // if ($p_entry['compressed_size'] == $p_entry['size']) + if ($p_entry['compression'] == 0) { + + // ----- Reading the file + $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + } + else { + + // ----- Reading the file + $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + if (($p_string = @gzinflate($v_data)) === FALSE) { + // TBC + } + } + + // ----- Trace + } + else { + // TBC : error : can not extract a folder in a string + } + + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Swap the content to header + $v_local_header['content'] = $p_string; + $p_string = ''; + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Swap back the content to header + $p_string = $v_local_header['content']; + unset($v_local_header['content']); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x04034b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 26); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 26) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); + + // ----- Get filename + $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); + + // ----- Get extra_fields + if ($v_data['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); + } + else { + $p_header['extra'] = ''; + } + + // ----- Extract properties + $p_header['version_extracted'] = $v_data['version']; + $p_header['compression'] = $v_data['compression']; + $p_header['size'] = $v_data['size']; + $p_header['compressed_size'] = $v_data['compressed_size']; + $p_header['crc'] = $v_data['crc']; + $p_header['flag'] = $v_data['flag']; + $p_header['filename_len'] = $v_data['filename_len']; + + // ----- Recuperate date in UNIX format + $p_header['mdate'] = $v_data['mdate']; + $p_header['mtime'] = $v_data['mtime']; + if ($p_header['mdate'] && $p_header['mtime']) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // TBC + //for(reset($v_data); $key = key($v_data); next($v_data)) { + //} + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set the status field + $p_header['status'] = "ok"; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadCentralFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x02014b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 42); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 42) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); + + // ----- Get filename + if ($p_header['filename_len'] != 0) + $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); + else + $p_header['filename'] = ''; + + // ----- Get extra + if ($p_header['extra_len'] != 0) + $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); + else + $p_header['extra'] = ''; + + // ----- Get comment + if ($p_header['comment_len'] != 0) + $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); + else + $p_header['comment'] = ''; + + // ----- Extract properties + + // ----- Recuperate date in UNIX format + //if ($p_header['mdate'] && $p_header['mtime']) + // TBC : bug : this was ignoring time with 0/0/0 + if (1) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set default status to ok + $p_header['status'] = 'ok'; + + // ----- Look if it is a directory + if (substr($p_header['filename'], -1) == '/') { + //$p_header['external'] = 0x41FF0010; + $p_header['external'] = 0x00000010; + } + + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFileHeaders() + // Description : + // Parameters : + // Return Values : + // 1 on success, + // 0 on error; + // -------------------------------------------------------------------------------- + function privCheckFileHeaders(&$p_local_header, &$p_central_header) + { + $v_result=1; + + // ----- Check the static values + // TBC + if ($p_local_header['filename'] != $p_central_header['filename']) { + } + if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { + } + if ($p_local_header['flag'] != $p_central_header['flag']) { + } + if ($p_local_header['compression'] != $p_central_header['compression']) { + } + if ($p_local_header['mtime'] != $p_central_header['mtime']) { + } + if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { + } + + // ----- Look for flag bit 3 + if (($p_local_header['flag'] & 8) == 8) { + $p_local_header['size'] = $p_central_header['size']; + $p_local_header['compressed_size'] = $p_central_header['compressed_size']; + $p_local_header['crc'] = $p_central_header['crc']; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadEndCentralDir() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadEndCentralDir(&$p_central_dir) + { + $v_result=1; + + // ----- Go to the end of the zip file + $v_size = filesize($this->zipname); + @fseek($this->zip_fd, $v_size); + if (@ftell($this->zip_fd) != $v_size) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- First try : look if this is an archive with no commentaries (most of the time) + // in this case the end of central dir is at 22 bytes of the file end + $v_found = 0; + if ($v_size > 26) { + @fseek($this->zip_fd, $v_size-22); + if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read for bytes + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = @unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] == 0x06054b50) { + $v_found = 1; + } + + $v_pos = ftell($this->zip_fd); + } + + // ----- Go back to the maximum possible size of the Central Dir End Record + if (!$v_found) { + $v_maximum_size = 65557; // 0xFFFF + 22; + if ($v_maximum_size > $v_size) + $v_maximum_size = $v_size; + @fseek($this->zip_fd, $v_size-$v_maximum_size); + if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read byte per byte in order to find the signature + $v_pos = ftell($this->zip_fd); + $v_bytes = 0x00000000; + while ($v_pos < $v_size) + { + // ----- Read a byte + $v_byte = @fread($this->zip_fd, 1); + + // ----- Add the byte + //$v_bytes = ($v_bytes << 8) | Ord($v_byte); + // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number + // Otherwise on systems where we have 64bit integers the check below for the magic number will fail. + $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte); + + // ----- Compare the bytes + if ($v_bytes == 0x504b0506) + { + $v_pos++; + break; + } + + $v_pos++; + } + + // ----- Look if not found end of central dir + if ($v_pos == $v_size) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Read the first 18 bytes of the header + $v_binary_data = fread($this->zip_fd, 18); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 18) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); + + // ----- Check the global size + if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { + + // ----- Removed in release 2.2 see readme file + // The check of the file size is a little too strict. + // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. + // While decrypted, zip has training 0 bytes + if (0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, + 'The central dir is not at the end of the archive.' + .' Some trailing bytes exists after the archive.'); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Get comment + if ($v_data['comment_size'] != 0) { + $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); + } + else + $p_central_dir['comment'] = ''; + + $p_central_dir['entries'] = $v_data['entries']; + $p_central_dir['disk_entries'] = $v_data['disk_entries']; + $p_central_dir['offset'] = $v_data['offset']; + $p_central_dir['size'] = $v_data['size']; + $p_central_dir['disk'] = $v_data['disk']; + $p_central_dir['disk_start'] = $v_data['disk_start']; + + // TBC + //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { + //} + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDeleteByRule() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDeleteByRule(&$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Scan all the files + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + $v_header_list = array(); + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read the file header + $v_header_list[$v_nb_extracted] = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + + return $v_result; + } + + + // ----- Store the index + $v_header_list[$v_nb_extracted]['index'] = $i; + + // ----- Look for the specific extract rules + $v_found = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) { + + // ----- Look for a directory + if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { + + // ----- Look if the directory is in the filename path + if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */ + && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + } + // ----- Look for a filename + elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_found = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) { + + if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_found = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + else { + $v_found = true; + } + + // ----- Look for deletion + if ($v_found) + { + unset($v_header_list[$v_nb_extracted]); + } + else + { + $v_nb_extracted++; + } + } + + // ----- Look if something need to be deleted + if ($v_nb_extracted > 0) { + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Creates a temporary zip archive + $v_temp_zip = new PclZip($v_zip_temp_name); + + // ----- Open the temporary zip file in write mode + if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Look which file need to be kept + for ($i=0; $i<sizeof($v_header_list); $i++) { + + // ----- Calculate the position of the header + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_local_header = array(); + if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Check that local file header is same as central file header + if ($this->privCheckFileHeaders($v_local_header, + $v_header_list[$i]) != 1) { + // TBC + } + unset($v_local_header); + + // ----- Write the file header + if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Read/write the data block + if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_temp_zip->zip_fd); + + // ----- Re-Create the Central Dir files header + for ($i=0; $i<sizeof($v_header_list); $i++) { + // ----- Create the file header + if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Transform the header to a 'usable' info + $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Close + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Destroy the temporary archive + unset($v_temp_zip); + } + + // ----- Remove every files : reset the file + else if ($v_central_dir['entries'] != 0) { + $this->privCloseFd(); + + if (($v_result = $this->privOpenFd('wb')) != 1) { + return $v_result; + } + + if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { + return $v_result; + } + + $this->privCloseFd(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check. + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + function privDirCheck($p_dir, $p_is_dir=false) + { + $v_result = 1; + + + // ----- Remove the final '/' + if (($p_is_dir) && (substr($p_dir, -1)=='/')) + { + $p_dir = substr($p_dir, 0, strlen($p_dir)-1); + } + + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) + { + return 1; + } + + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); + + // ----- Just a check + if ($p_parent_dir != $p_dir) + { + // ----- Look for parent directory + if ($p_parent_dir != "") + { + if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) + { + return $v_result; + } + } + } + + // ----- Create the directory + if (!@mkdir($p_dir, 0777)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privMerge() + // Description : + // If $p_archive_to_add does not exist, the function exit with a success result. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privMerge(&$p_archive_to_add) + { + $v_result=1; + + // ----- Look if the archive_to_add exists + if (!is_file($p_archive_to_add->zipname)) + { + + // ----- Nothing to merge, so merge is a success + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Look if the archive exists + if (!is_file($this->zipname)) + { + + // ----- Do a duplicate + $v_result = $this->privDuplicate($p_archive_to_add->zipname); + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Open the archive_to_add file + if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) + { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir_to_add = array(); + if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + return $v_result; + } + + // ----- Go to beginning of File + @rewind($p_archive_to_add->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the files from the archive_to_add into the temporary file + $v_size = $v_central_dir_to_add['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_zip_temp_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the block of file headers from the archive_to_add + $v_size = $v_central_dir_to_add['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Merge the file comments + $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment']; + + // ----- Calculate the size of the (new) central header + $v_size = @ftell($v_zip_temp_fd)-$v_offset; + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive fd + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + @fclose($v_zip_temp_fd); + $this->zip_fd = null; + + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDuplicate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDuplicate($p_archive_filename) + { + $v_result=1; + + // ----- Look if the $p_archive_filename exists + if (!is_file($p_archive_filename)) + { + + // ----- Nothing to duplicate, so duplicate is a success. + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) + { + $this->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = filesize($p_archive_filename); + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorLog($p_error_code=0, $p_error_string='') + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclError($p_error_code, $p_error_string); + } + else { + $this->error_code = $p_error_code; + $this->error_string = $p_error_string; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorReset() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclErrorReset(); + } + else { + $this->error_code = 0; + $this->error_string = ''; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDisableMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDisableMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if already done + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Get and memorize the magic_quote value + $this->magic_quotes_status = @get_magic_quotes_runtime(); + + // ----- Disable magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime(0); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privSwapBackMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privSwapBackMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if something to do + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Swap back magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime($this->magic_quotes_status); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + } + // End of class + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathReduction() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilPathReduction($p_dir) + { + $v_result = ""; + + // ----- Look for not empty path + if ($p_dir != "") { + // ----- Explode path by directory names + $v_list = explode("/", $p_dir); + + // ----- Study directories from last to first + $v_skip = 0; + for ($i=sizeof($v_list)-1; $i>=0; $i--) { + // ----- Look for current path + if ($v_list[$i] == ".") { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } + else if ($v_list[$i] == "..") { + $v_skip++; + } + else if ($v_list[$i] == "") { + // ----- First '/' i.e. root slash + if ($i == 0) { + $v_result = "/".$v_result; + if ($v_skip > 0) { + // ----- It is an invalid path, so the path is not modified + // TBC + $v_result = $p_dir; + $v_skip = 0; + } + } + // ----- Last '/' i.e. indicates a directory + else if ($i == (sizeof($v_list)-1)) { + $v_result = $v_list[$i]; + } + // ----- Double '/' inside the path + else { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + } + else { + // ----- Look for item to skip + if ($v_skip > 0) { + $v_skip--; + } + else { + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); + } + } + } + + // ----- Look for skip + if ($v_skip > 0) { + while ($v_skip > 0) { + $v_result = '../'.$v_result; + $v_skip--; + } + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathInclusion() + // Description : + // This function indicates if the path $p_path is under the $p_dir tree. Or, + // said in an other way, if the file or sub-dir $p_path is inside the dir + // $p_dir. + // The function indicates also if the path is exactly the same as the dir. + // This function supports path with duplicated '/' like '//', but does not + // support '.' or '..' statements. + // Parameters : + // Return Values : + // 0 if $p_path is not inside directory $p_dir + // 1 if $p_path is inside directory $p_dir + // 2 if $p_path is exactly the same as $p_dir + // -------------------------------------------------------------------------------- + function PclZipUtilPathInclusion($p_dir, $p_path) + { + $v_result = 1; + + // ----- Look for path beginning by ./ + if ( ($p_dir == '.') + || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { + $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); + } + if ( ($p_path == '.') + || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { + $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); + } + + // ----- Explode dir and path by directory separator + $v_list_dir = explode("/", $p_dir); + $v_list_dir_size = sizeof($v_list_dir); + $v_list_path = explode("/", $p_path); + $v_list_path_size = sizeof($v_list_path); + + // ----- Study directories paths + $i = 0; + $j = 0; + while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { + + // ----- Look for empty dir (path reduction) + if ($v_list_dir[$i] == '') { + $i++; + continue; + } + if ($v_list_path[$j] == '') { + $j++; + continue; + } + + // ----- Compare the items + if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { + $v_result = 0; + } + + // ----- Next items + $i++; + $j++; + } + + // ----- Look if everything seems to be the same + if ($v_result) { + // ----- Skip all the empty items + while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; + while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; + + if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { + // ----- There are exactly the same + $v_result = 2; + } + else if ($i < $v_list_dir_size) { + // ----- The path is shorter than the dir + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilCopyBlock() + // Description : + // Parameters : + // $p_mode : read/write compression mode + // 0 : src & dest normal + // 1 : src gzip, dest normal + // 2 : src normal, dest gzip + // 3 : src & dest gzip + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) + { + $v_result = 1; + + if ($p_mode==0) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==1) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==2) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==3) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilRename() + // Description : + // This function tries to do a simple rename() function. If it fails, it + // tries to copy the $p_src file in a new $p_dest file and then unlink the + // first one. + // Parameters : + // $p_src : Old filename + // $p_dest : New filename + // Return Values : + // 1 on success, 0 on failure. + // -------------------------------------------------------------------------------- + function PclZipUtilRename($p_src, $p_dest) + { + $v_result = 1; + + // ----- Try to rename the files + if (!@rename($p_src, $p_dest)) { + + // ----- Try to copy & unlink the src + if (!@copy($p_src, $p_dest)) { + $v_result = 0; + } + else if (!@unlink($p_src)) { + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilOptionText() + // Description : + // Translate option value in text. Mainly for debug purpose. + // Parameters : + // $p_option : the option value. + // Return Values : + // The option text value. + // -------------------------------------------------------------------------------- + function PclZipUtilOptionText($p_option) + { + + $v_list = get_defined_constants(); + for (reset($v_list); $v_key = key($v_list); next($v_list)) { + $v_prefix = substr($v_key, 0, 10); + if (( ($v_prefix == 'PCLZIP_OPT') + || ($v_prefix == 'PCLZIP_CB_') + || ($v_prefix == 'PCLZIP_ATT')) + && ($v_list[$v_key] == $p_option)) { + return $v_key; + } + } + + $v_result = 'Unknown'; + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilTranslateWinPath() + // Description : + // Translate windows path by replacing '\' by '/' and optionally removing + // drive letter. + // Parameters : + // $p_path : path to translate. + // $p_remove_disk_letter : true | false + // Return Values : + // The path translated. + // -------------------------------------------------------------------------------- + function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) + { + if (stristr(php_uname(), 'windows')) { + // ----- Look for potential disk letter + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + $p_path = substr($p_path, $v_position+1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } + } + return $p_path; + } + // -------------------------------------------------------------------------------- + + +?> diff --git a/PHPExcel/Shared/PCLZip/readme.txt b/PHPExcel/Shared/PCLZip/readme.txt new file mode 100644 index 0000000..d1b11e2 --- /dev/null +++ b/PHPExcel/Shared/PCLZip/readme.txt @@ -0,0 +1,421 @@ +// -------------------------------------------------------------------------------- +// PclZip 2.8.2 - readme.txt +// -------------------------------------------------------------------------------- +// License GNU/LGPL - August 2009 +// Vincent Blavet - vincent@phpconcept.net +// http://www.phpconcept.net +// -------------------------------------------------------------------------------- +// $Id: readme.txt,v 1.60 2009/09/30 20:35:21 vblavet Exp $ +// -------------------------------------------------------------------------------- + + + +0 - Sommaire +============ + 1 - Introduction + 2 - What's new + 3 - Corrected bugs + 4 - Known bugs or limitations + 5 - License + 6 - Warning + 7 - Documentation + 8 - Author + 9 - Contribute + +1 - Introduction +================ + + PclZip is a library that allow you to manage a Zip archive. + + Full documentation about PclZip can be found here : http://www.phpconcept.net/pclzip + +2 - What's new +============== + + Version 2.8.2 : + - PCLZIP_CB_PRE_EXTRACT and PCLZIP_CB_POST_EXTRACT are now supported with + extraction as a string (PCLZIP_OPT_EXTRACT_AS_STRING). The string + can also be modified in the post-extract call back. + **Bugs correction : + - PCLZIP_OPT_REMOVE_ALL_PATH was not working correctly + - Remove use of eval() and do direct call to callback functions + - Correct support of 64bits systems (Thanks to WordPress team) + + Version 2.8.1 : + - Move option PCLZIP_OPT_BY_EREG to PCLZIP_OPT_BY_PREG because ereg() is + deprecated in PHP 5.3. When using option PCLZIP_OPT_BY_EREG, PclZip will + automatically replace it by PCLZIP_OPT_BY_PREG. + + Version 2.8 : + - Improve extraction of zip archive for large files by using temporary files + This feature is working like the one defined in r2.7. + Options are renamed : PCLZIP_OPT_TEMP_FILE_ON, PCLZIP_OPT_TEMP_FILE_OFF, + PCLZIP_OPT_TEMP_FILE_THRESHOLD + - Add a ratio constant PCLZIP_TEMPORARY_FILE_RATIO to configure the auto + sense of temporary file use. + - Bug correction : Reduce filepath in returned file list to remove ennoying + './/' preambule in file path. + + Version 2.7 : + - Improve creation of zip archive for large files : + PclZip will now autosense the configured memory and use temporary files + when large file is suspected. + This feature can also ne triggered by manual options in create() and add() + methods. 'PCLZIP_OPT_ADD_TEMP_FILE_ON' force the use of temporary files, + 'PCLZIP_OPT_ADD_TEMP_FILE_OFF' disable the autosense technic, + 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD' allow for configuration of a size + threshold to use temporary files. + Using "temporary files" rather than "memory" might take more time, but + might give the ability to zip very large files : + Tested on my win laptop with a 88Mo file : + Zip "in-memory" : 18sec (max_execution_time=30, memory_limit=180Mo) + Zip "tmporary-files" : 23sec (max_execution_time=30, memory_limit=30Mo) + - Replace use of mktime() by time() to limit the E_STRICT error messages. + - Bug correction : When adding files with full windows path (drive letter) + PclZip is now working. Before, if the drive letter is not the default + path, PclZip was not able to add the file. + + Version 2.6 : + - Code optimisation + - New attributes PCLZIP_ATT_FILE_COMMENT gives the ability to + add a comment for a specific file. (Don't really know if this is usefull) + - New attribute PCLZIP_ATT_FILE_CONTENT gives the ability to add a string + as a file. + - New attribute PCLZIP_ATT_FILE_MTIME modify the timestamp associated with + a file. + - Correct a bug. Files archived with a timestamp with 0h0m0s were extracted + with current time + - Add CRC value in the informations returned back for each file after an + action. + - Add missing closedir() statement. + - When adding a folder, and removing the path of this folder, files were + incorrectly added with a '/' at the beginning. Which means files are + related to root in unix systems. Corrected. + - Add conditional if before constant definition. This will allow users + to redefine constants without changing the file, and then improve + upgrade of pclzip code for new versions. + + Version 2.5 : + - Introduce the ability to add file/folder with individual properties (file descriptor). + This gives for example the ability to change the filename of a zipped file. + . Able to add files individually + . Able to change full name + . Able to change short name + . Compatible with global options + - New attributes : PCLZIP_ATT_FILE_NAME, PCLZIP_ATT_FILE_NEW_SHORT_NAME, PCLZIP_ATT_FILE_NEW_FULL_NAME + - New error code : PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE + - Add a security control feature. PclZip can extract any file in any folder + of a system. People may use this to upload a zip file and try to override + a system file. The PCLZIP_OPT_EXTRACT_DIR_RESTRICTION will give the + ability to forgive any directory transversal behavior. + - New PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : check extraction path + - New error code : PCLZIP_ERR_DIRECTORY_RESTRICTION + - Modification in PclZipUtilPathInclusion() : dir and path beginning with ./ will be prepend + by current path (getcwd()) + + Version 2.4 : + - Code improvment : try to speed up the code by removing unusefull call to pack() + - Correct bug in delete() : delete() should be called with no argument. This was not + the case in 2.3. This is corrected in 2.4. + - Correct a bug in path_inclusion function. When the path has several '../../', the + result was bad. + - Add a check for magic_quotes_runtime configuration. If enabled, PclZip will + disable it while working and det it back to its original value. + This resolve a lots of bad formated archive errors. + - Bug correction : PclZip now correctly unzip file in some specific situation, + when compressed content has same size as uncompressed content. + - Bug correction : When selecting option 'PCLZIP_OPT_REMOVE_ALL_PATH', + directories are not any more created. + - Code improvment : correct unclosed opendir(), better handling of . and .. in + loops. + + + Version 2.3 : + - Correct a bug with PHP5 : affecting the value 0xFE49FFE0 to a variable does not + give the same result in PHP4 and PHP5 .... + + Version 2.2 : + - Try development of PCLZIP_OPT_CRYPT ..... + However this becomes to a stop. To crypt/decrypt I need to multiply 2 long integers, + the result (greater than a long) is not supported by PHP. Even the use of bcmath + functions does not help. I did not find yet a solution ...; + - Add missing '/' at end of directory entries + - Check is a file is encrypted or not. Returns status 'unsupported_encryption' and/or + error code PCLZIP_ERR_UNSUPPORTED_ENCRYPTION. + - Corrected : Bad "version need to extract" field in local file header + - Add private method privCheckFileHeaders() in order to check local and central + file headers. PclZip is now supporting purpose bit flag bit 3. Purpose bit flag bit 3 gives + the ability to have a local file header without size, compressed size and crc filled. + - Add a generic status 'error' for file status + - Add control of compression type. PclZip only support deflate compression method. + Before v2.2, PclZip does not check the compression method used in an archive while + extracting. With v2.2 PclZip returns a new error status for a file using an unsupported + compression method. New status is "unsupported_compression". New error code is + PCLZIP_ERR_UNSUPPORTED_COMPRESSION. + - Add optional attribute PCLZIP_OPT_STOP_ON_ERROR. This will stop the extract of files + when errors like 'a folder with same name exists' or 'a newer file exists' or + 'a write protected file' exists, rather than set a status for the concerning file + and resume the extract of the zip. + - Add optional attribute PCLZIP_OPT_REPLACE_NEWER. This will force, during an extract' the + replacement of the file, even if a newer version of the file exists. + Note that today if a file with the same name already exists but is older it will be + replaced by the extracted one. + - Improve PclZipUtilOption() + - Support of zip archive with trailing bytes. Before 2.2, PclZip checks that the central + directory structure is the last data in the archive. Crypt encryption/decryption of + zip archive put trailing 0 bytes after decryption. PclZip is now supporting this. + + Version 2.1 : + - Add the ability to abort the extraction by using a user callback function. + The user can now return the value '2' in its callback which indicates to stop the + extraction. For a pre call-back extract is stopped before the extration of the current + file. For a post call back, the extraction is stopped after. + - Add the ability to extract a file (or several files) directly in the standard output. + This is done by the new parameter PCLZIP_OPT_EXTRACT_IN_OUTPUT with method extract(). + - Add support for parameters PCLZIP_OPT_COMMENT, PCLZIP_OPT_ADD_COMMENT, + PCLZIP_OPT_PREPEND_COMMENT. This will create, replace, add, or prepend comments + in the zip archive. + - When merging two archives, the comments are not any more lost, but merged, with a + blank space separator. + - Corrected bug : Files are not deleted when all files are asked to be deleted. + - Corrected bug : Folders with name '0' made PclZip to abort the create or add feature. + + + Version 2.0 : + ***** Warning : Some new features may break the backward compatibility for your scripts. + Please carefully read the readme file. + - Add the ability to delete by Index, name and regular expression. This feature is + performed by the method delete(), which uses the optional parameters + PCLZIP_OPT_BY_INDEX, PCLZIP_OPT_BY_NAME, PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG. + - Add the ability to extract by regular expression. To extract by regexp you must use the method + extract(), with the option PCLZIP_OPT_BY_EREG or PCLZIP_OPT_BY_PREG + (depending if you want to use ereg() or preg_match() syntax) followed by the + regular expression pattern. + - Add the ability to extract by index, directly with the extract() method. This is a + code improvment of the extractByIndex() method. + - Add the ability to extract by name. To extract by name you must use the method + extract(), with the option PCLZIP_OPT_BY_NAME followed by the filename to + extract or an array of filenames to extract. To extract all a folder, use the folder + name rather than the filename with a '/' at the end. + - Add the ability to add files without compression. This is done with a new attribute + which is PCLZIP_OPT_NO_COMPRESSION. + - Add the attribute PCLZIP_OPT_EXTRACT_AS_STRING, which allow to extract a file directly + in a string without using any file (or temporary file). + - Add constant PCLZIP_SEPARATOR for static configuration of filename separators in a single string. + The default separator is now a comma (,) and not any more a blank space. + THIS BREAK THE BACKWARD COMPATIBILITY : Please check if this may have an impact with + your script. + - Improve algorythm performance by removing the use of temporary files when adding or + extracting files in an archive. + - Add (correct) detection of empty filename zipping. This can occurs when the removed + path is the same + as a zipped dir. The dir is not zipped (['status'] = filtered), only its content. + - Add better support for windows paths (thanks for help from manus@manusfreedom.com). + - Corrected bug : When the archive file already exists with size=0, the add() method + fails. Corrected in 2.0. + - Remove the use of OS_WINDOWS constant. Use php_uname() function rather. + - Control the order of index ranges in extract by index feature. + - Change the internal management of folders (better handling of internal flag). + + + Version 1.3 : + - Removing the double include check. This is now done by include_once() and require_once() + PHP directives. + - Changing the error handling mecanism : Remove the use of an external error library. + The former PclError...() functions are replaced by internal equivalent methods. + By changing the environment variable PCLZIP_ERROR_EXTERNAL you can still use the former library. + Introducing the use of constants for error codes rather than integer values. This will help + in futur improvment. + Introduction of error handling functions like errorCode(), errorName() and errorInfo(). + - Remove the deprecated use of calling function with arguments passed by reference. + - Add the calling of extract(), extractByIndex(), create() and add() functions + with variable options rather than fixed arguments. + - Add the ability to remove all the file path while extracting or adding, + without any need to specify the path to remove. + This is available for extract(), extractByIndex(), create() and add() functionS by using + the new variable options parameters : + - PCLZIP_OPT_REMOVE_ALL_PATH : by indicating this option while calling the fct. + - Ability to change the mode of a file after the extraction (chmod()). + This is available for extract() and extractByIndex() functionS by using + the new variable options parameters. + - PCLZIP_OPT_SET_CHMOD : by setting the value of this option. + - Ability to definition call-back options. These call-back will be called during the adding, + or the extracting of file (extract(), extractByIndex(), create() and add() functions) : + - PCLZIP_CB_PRE_EXTRACT : will be called before each extraction of a file. The user + can trigerred the change the filename of the extracted file. The user can triggered the + skip of the extraction. This is adding a 'skipped' status in the file list result value. + - PCLZIP_CB_POST_EXTRACT : will be called after each extraction of a file. + Nothing can be triggered from that point. + - PCLZIP_CB_PRE_ADD : will be called before each add of a file. The user + can trigerred the change the stored filename of the added file. The user can triggered the + skip of the add. This is adding a 'skipped' status in the file list result value. + - PCLZIP_CB_POST_ADD : will be called after each add of a file. + Nothing can be triggered from that point. + - Two status are added in the file list returned as function result : skipped & filename_too_long + 'skipped' is used when a call-back function ask for skipping the file. + 'filename_too_long' is used while adding a file with a too long filename to archive (the file is + not added) + - Adding the function PclZipUtilPathInclusion(), that check the inclusion of a path into + a directory. + - Add a check of the presence of the archive file before some actions (like list, ...) + - Add the initialisation of field "index" in header array. This means that by + default index will be -1 when not explicitly set by the methods. + + Version 1.2 : + - Adding a duplicate function. + - Adding a merge function. The merge function is a "quick merge" function, + it just append the content of an archive at the end of the first one. There + is no check for duplicate files or more recent files. + - Improve the search of the central directory end. + + Version 1.1.2 : + + - Changing the license of PclZip. PclZip is now released under the GNU / LGPL license + (see License section). + - Adding the optional support of a static temporary directory. You will need to configure + the constant PCLZIP_TEMPORARY_DIR if you want to use this feature. + - Improving the rename() function. In some cases rename() does not work (different + Filesystems), so it will be replaced by a copy() + unlink() functions. + + Version 1.1.1 : + + - Maintenance release, no new feature. + + Version 1.1 : + + - New method Add() : adding files in the archive + - New method ExtractByIndex() : partial extract of the archive, files are identified by + their index in the archive + - New method DeleteByIndex() : delete some files/folder entries from the archive, + files are identified by their index in the archive. + - Adding a test of the zlib extension presence. If not present abort the script. + + Version 1.0.1 : + + - No new feature + + +3 - Corrected bugs +================== + + Corrected in Version 2.0 : + - Corrected : During an extraction, if a call-back fucntion is used and try to skip + a file, all the extraction process is stopped. + + Corrected in Version 1.3 : + - Corrected : Support of static synopsis for method extract() is broken. + - Corrected : invalid size of archive content field (0xFF) should be (0xFFFF). + - Corrected : When an extract is done with a remove_path parameter, the entry for + the directory with exactly the same path is not skipped/filtered. + - Corrected : extractByIndex() and deleteByIndex() were not managing index in the + right way. For example indexes '1,3-5,11' will only extract files 1 and 11. This + is due to a sort of the index resulting table that puts 11 before 3-5 (sort on + string and not interger). The sort is temporarilly removed, this means that + you must provide a sorted list of index ranges. + + Corrected in Version 1.2 : + + - Nothing. + + Corrected in Version 1.1.2 : + + - Corrected : Winzip is unable to delete or add new files in a PclZip created archives. + + Corrected in Version 1.1.1 : + + - Corrected : When archived file is not compressed (0% compression), the + extract method fails. + + Corrected in Version 1.1 : + + - Corrected : Adding a complete tree of folder may result in a bad archive + creation. + + Corrected in Version 1.0.1 : + + - Corrected : Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024). + + +4 - Known bugs or limitations +============================= + + Please publish bugs reports in SourceForge : + http://sourceforge.net/tracker/?group_id=40254&atid=427564 + + In Version 2.x : + - PclZip does only support file uncompressed or compressed with deflate (compression method 8) + - PclZip does not support password protected zip archive + - Some concern were seen when changing mtime of a file while archiving. + Seems to be linked to Daylight Saving Time (PclTest_changing_mtime). + + In Version 1.2 : + + - merge() methods does not check for duplicate files or last date of modifications. + + In Version 1.1 : + + - Limitation : Using 'extract' fields in the file header in the zip archive is not supported. + - WinZip is unable to delete a single file in a PclZip created archive. It is also unable to + add a file in a PclZip created archive. (Corrected in v.1.2) + + In Version 1.0.1 : + + - Adding a complete tree of folder may result in a bad archive + creation. (Corrected in V.1.1). + - Path given to methods must be in the unix format (/) and not the Windows format (\). + Workaround : Use only / directory separators. + - PclZip is using temporary files that are sometime the name of the file with a .tmp or .gz + added suffix. Files with these names may already exist and may be overwritten. + Workaround : none. + - PclZip does not check if the zlib extension is present. If it is absent, the zip + file is not created and the lib abort without warning. + Workaround : enable the zlib extension on the php install + + In Version 1.0 : + + - Error while compressing files greater than PCLZIP_READ_BLOCK_SIZE (default=1024). + (Corrected in v.1.0.1) + - Limitation : Multi-disk zip archive are not supported. + + +5 - License +=========== + + Since version 1.1.2, PclZip Library is released under GNU/LGPL license. + This library is free, so you can use it at no cost. + + HOWEVER, if you release a script, an application, a library or any kind of + code using PclZip library (or a part of it), YOU MUST : + - Indicate in the documentation (or a readme file), that your work + uses PclZip Library, and make a reference to the author and the web site + http://www.phpconcept.net + - Gives the ability to the final user to update the PclZip libary. + + I will also appreciate that you send me a mail (vincent@phpconcept.net), just to + be aware that someone is using PclZip. + + For more information about GNU/LGPL license : http://www.gnu.org + +6 - Warning +================= + + This library and the associated files are non commercial, non professional work. + It should not have unexpected results. However if any damage is caused by this software + the author can not be responsible. + The use of this software is at the risk of the user. + +7 - Documentation +================= + PclZip User Manuel is available in English on PhpConcept : http://www.phpconcept.net/pclzip/man/en/index.php + A Russian translation was done by Feskov Kuzma : http://php.russofile.ru/ru/authors/unsort/zip/ + +8 - Author +========== + + This software was written by Vincent Blavet (vincent@phpconcept.net) on its leasure time. + +9 - Contribute +============== + If you want to contribute to the development of PclZip, please contact vincent@phpconcept.net. + If you can help in financing PhpConcept hosting service, please go to + http://www.phpconcept.net/soutien.php diff --git a/PHPExcel/Shared/PasswordHasher.php b/PHPExcel/Shared/PasswordHasher.php new file mode 100644 index 0000000..4f505a2 --- /dev/null +++ b/PHPExcel/Shared/PasswordHasher.php @@ -0,0 +1,66 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_PasswordHasher + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_PasswordHasher +{ + /** + * Create a password hash from a given string. + * + * This method is based on the algorithm provided by + * Daniel Rentz of OpenOffice and the PEAR package + * Spreadsheet_Excel_Writer by Xavier Noguer <xnoguer@rezebra.com>. + * + * @param string $pPassword Password to hash + * @return string Hashed password + */ + public static function hashPassword($pPassword = '') { + $password = 0x0000; + $charPos = 1; // char position + + // split the plain text password in its component characters + $chars = preg_split('//', $pPassword, -1, PREG_SPLIT_NO_EMPTY); + foreach ($chars as $char) { + $value = ord($char) << $charPos++; // shifted ASCII value + $rotated_bits = $value >> 15; // rotated bits beyond bit 15 + $value &= 0x7fff; // first 15 bits + $password ^= ($value | $rotated_bits); + } + + $password ^= strlen($pPassword); + $password ^= 0xCE4B; + + return(strtoupper(dechex($password))); + } +} diff --git a/PHPExcel/Shared/String.php b/PHPExcel/Shared/String.php new file mode 100644 index 0000000..49d217a --- /dev/null +++ b/PHPExcel/Shared/String.php @@ -0,0 +1,776 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_String + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_String +{ + /** Constants */ + /** Regular Expressions */ + // Fraction + const STRING_REGEXP_FRACTION = '(-?)(\d+)\s+(\d+\/\d+)'; + + + /** + * Control characters array + * + * @var string[] + */ + private static $_controlCharacters = array(); + + /** + * SYLK Characters array + * + * $var array + */ + private static $_SYLKCharacters = array(); + + /** + * Decimal separator + * + * @var string + */ + private static $_decimalSeparator; + + /** + * Thousands separator + * + * @var string + */ + private static $_thousandsSeparator; + + /** + * Currency code + * + * @var string + */ + private static $_currencyCode; + + /** + * Is mbstring extension avalable? + * + * @var boolean + */ + private static $_isMbstringEnabled; + + /** + * Is iconv extension avalable? + * + * @var boolean + */ + private static $_isIconvEnabled; + + /** + * Build control characters array + */ + private static function _buildControlCharacters() { + for ($i = 0; $i <= 31; ++$i) { + if ($i != 9 && $i != 10 && $i != 13) { + $find = '_x' . sprintf('%04s' , strtoupper(dechex($i))) . '_'; + $replace = chr($i); + self::$_controlCharacters[$find] = $replace; + } + } + } + + /** + * Build SYLK characters array + */ + private static function _buildSYLKCharacters() + { + self::$_SYLKCharacters = array( + "\x1B 0" => chr(0), + "\x1B 1" => chr(1), + "\x1B 2" => chr(2), + "\x1B 3" => chr(3), + "\x1B 4" => chr(4), + "\x1B 5" => chr(5), + "\x1B 6" => chr(6), + "\x1B 7" => chr(7), + "\x1B 8" => chr(8), + "\x1B 9" => chr(9), + "\x1B :" => chr(10), + "\x1B ;" => chr(11), + "\x1B <" => chr(12), + "\x1B :" => chr(13), + "\x1B >" => chr(14), + "\x1B ?" => chr(15), + "\x1B!0" => chr(16), + "\x1B!1" => chr(17), + "\x1B!2" => chr(18), + "\x1B!3" => chr(19), + "\x1B!4" => chr(20), + "\x1B!5" => chr(21), + "\x1B!6" => chr(22), + "\x1B!7" => chr(23), + "\x1B!8" => chr(24), + "\x1B!9" => chr(25), + "\x1B!:" => chr(26), + "\x1B!;" => chr(27), + "\x1B!<" => chr(28), + "\x1B!=" => chr(29), + "\x1B!>" => chr(30), + "\x1B!?" => chr(31), + "\x1B'?" => chr(127), + "\x1B(0" => '€', // 128 in CP1252 + "\x1B(2" => '‚', // 130 in CP1252 + "\x1B(3" => 'ƒ', // 131 in CP1252 + "\x1B(4" => '„', // 132 in CP1252 + "\x1B(5" => '…', // 133 in CP1252 + "\x1B(6" => '†', // 134 in CP1252 + "\x1B(7" => '‡', // 135 in CP1252 + "\x1B(8" => 'ˆ', // 136 in CP1252 + "\x1B(9" => '‰', // 137 in CP1252 + "\x1B(:" => 'Š', // 138 in CP1252 + "\x1B(;" => '‹', // 139 in CP1252 + "\x1BNj" => 'Œ', // 140 in CP1252 + "\x1B(>" => 'Ž', // 142 in CP1252 + "\x1B)1" => '‘', // 145 in CP1252 + "\x1B)2" => '’', // 146 in CP1252 + "\x1B)3" => '“', // 147 in CP1252 + "\x1B)4" => '”', // 148 in CP1252 + "\x1B)5" => '•', // 149 in CP1252 + "\x1B)6" => '–', // 150 in CP1252 + "\x1B)7" => '—', // 151 in CP1252 + "\x1B)8" => '˜', // 152 in CP1252 + "\x1B)9" => '™', // 153 in CP1252 + "\x1B):" => 'š', // 154 in CP1252 + "\x1B);" => '›', // 155 in CP1252 + "\x1BNz" => 'œ', // 156 in CP1252 + "\x1B)>" => 'ž', // 158 in CP1252 + "\x1B)?" => 'Ÿ', // 159 in CP1252 + "\x1B*0" => ' ', // 160 in CP1252 + "\x1BN!" => '¡', // 161 in CP1252 + "\x1BN\"" => '¢', // 162 in CP1252 + "\x1BN#" => '£', // 163 in CP1252 + "\x1BN(" => '¤', // 164 in CP1252 + "\x1BN%" => '¥', // 165 in CP1252 + "\x1B*6" => '¦', // 166 in CP1252 + "\x1BN'" => '§', // 167 in CP1252 + "\x1BNH " => '¨', // 168 in CP1252 + "\x1BNS" => '©', // 169 in CP1252 + "\x1BNc" => 'ª', // 170 in CP1252 + "\x1BN+" => '«', // 171 in CP1252 + "\x1B*<" => '¬', // 172 in CP1252 + "\x1B*=" => '­', // 173 in CP1252 + "\x1BNR" => '®', // 174 in CP1252 + "\x1B*?" => '¯', // 175 in CP1252 + "\x1BN0" => '°', // 176 in CP1252 + "\x1BN1" => '±', // 177 in CP1252 + "\x1BN2" => '²', // 178 in CP1252 + "\x1BN3" => '³', // 179 in CP1252 + "\x1BNB " => '´', // 180 in CP1252 + "\x1BN5" => 'µ', // 181 in CP1252 + "\x1BN6" => '¶', // 182 in CP1252 + "\x1BN7" => '·', // 183 in CP1252 + "\x1B+8" => '¸', // 184 in CP1252 + "\x1BNQ" => '¹', // 185 in CP1252 + "\x1BNk" => 'º', // 186 in CP1252 + "\x1BN;" => '»', // 187 in CP1252 + "\x1BN<" => '¼', // 188 in CP1252 + "\x1BN=" => '½', // 189 in CP1252 + "\x1BN>" => '¾', // 190 in CP1252 + "\x1BN?" => '¿', // 191 in CP1252 + "\x1BNAA" => 'À', // 192 in CP1252 + "\x1BNBA" => 'Á', // 193 in CP1252 + "\x1BNCA" => 'Â', // 194 in CP1252 + "\x1BNDA" => 'Ã', // 195 in CP1252 + "\x1BNHA" => 'Ä', // 196 in CP1252 + "\x1BNJA" => 'Å', // 197 in CP1252 + "\x1BNa" => 'Æ', // 198 in CP1252 + "\x1BNKC" => 'Ç', // 199 in CP1252 + "\x1BNAE" => 'È', // 200 in CP1252 + "\x1BNBE" => 'É', // 201 in CP1252 + "\x1BNCE" => 'Ê', // 202 in CP1252 + "\x1BNHE" => 'Ë', // 203 in CP1252 + "\x1BNAI" => 'Ì', // 204 in CP1252 + "\x1BNBI" => 'Í', // 205 in CP1252 + "\x1BNCI" => 'Î', // 206 in CP1252 + "\x1BNHI" => 'Ï', // 207 in CP1252 + "\x1BNb" => 'Ð', // 208 in CP1252 + "\x1BNDN" => 'Ñ', // 209 in CP1252 + "\x1BNAO" => 'Ò', // 210 in CP1252 + "\x1BNBO" => 'Ó', // 211 in CP1252 + "\x1BNCO" => 'Ô', // 212 in CP1252 + "\x1BNDO" => 'Õ', // 213 in CP1252 + "\x1BNHO" => 'Ö', // 214 in CP1252 + "\x1B-7" => '×', // 215 in CP1252 + "\x1BNi" => 'Ø', // 216 in CP1252 + "\x1BNAU" => 'Ù', // 217 in CP1252 + "\x1BNBU" => 'Ú', // 218 in CP1252 + "\x1BNCU" => 'Û', // 219 in CP1252 + "\x1BNHU" => 'Ü', // 220 in CP1252 + "\x1B-=" => 'Ý', // 221 in CP1252 + "\x1BNl" => 'Þ', // 222 in CP1252 + "\x1BN{" => 'ß', // 223 in CP1252 + "\x1BNAa" => 'à', // 224 in CP1252 + "\x1BNBa" => 'á', // 225 in CP1252 + "\x1BNCa" => 'â', // 226 in CP1252 + "\x1BNDa" => 'ã', // 227 in CP1252 + "\x1BNHa" => 'ä', // 228 in CP1252 + "\x1BNJa" => 'å', // 229 in CP1252 + "\x1BNq" => 'æ', // 230 in CP1252 + "\x1BNKc" => 'ç', // 231 in CP1252 + "\x1BNAe" => 'è', // 232 in CP1252 + "\x1BNBe" => 'é', // 233 in CP1252 + "\x1BNCe" => 'ê', // 234 in CP1252 + "\x1BNHe" => 'ë', // 235 in CP1252 + "\x1BNAi" => 'ì', // 236 in CP1252 + "\x1BNBi" => 'í', // 237 in CP1252 + "\x1BNCi" => 'î', // 238 in CP1252 + "\x1BNHi" => 'ï', // 239 in CP1252 + "\x1BNs" => 'ð', // 240 in CP1252 + "\x1BNDn" => 'ñ', // 241 in CP1252 + "\x1BNAo" => 'ò', // 242 in CP1252 + "\x1BNBo" => 'ó', // 243 in CP1252 + "\x1BNCo" => 'ô', // 244 in CP1252 + "\x1BNDo" => 'õ', // 245 in CP1252 + "\x1BNHo" => 'ö', // 246 in CP1252 + "\x1B/7" => '÷', // 247 in CP1252 + "\x1BNy" => 'ø', // 248 in CP1252 + "\x1BNAu" => 'ù', // 249 in CP1252 + "\x1BNBu" => 'ú', // 250 in CP1252 + "\x1BNCu" => 'û', // 251 in CP1252 + "\x1BNHu" => 'ü', // 252 in CP1252 + "\x1B/=" => 'ý', // 253 in CP1252 + "\x1BN|" => 'þ', // 254 in CP1252 + "\x1BNHy" => 'ÿ', // 255 in CP1252 + ); + } + + /** + * Get whether mbstring extension is available + * + * @return boolean + */ + public static function getIsMbstringEnabled() + { + if (isset(self::$_isMbstringEnabled)) { + return self::$_isMbstringEnabled; + } + + self::$_isMbstringEnabled = function_exists('mb_convert_encoding') ? + true : false; + + return self::$_isMbstringEnabled; + } + + /** + * Get whether iconv extension is available + * + * @return boolean + */ + public static function getIsIconvEnabled() + { + if (isset(self::$_isIconvEnabled)) { + return self::$_isIconvEnabled; + } + + // Fail if iconv doesn't exist + if (!function_exists('iconv')) { + self::$_isIconvEnabled = false; + return false; + } + + // Sometimes iconv is not working, and e.g. iconv('UTF-8', 'UTF-16LE', 'x') just returns false, + if (!@iconv('UTF-8', 'UTF-16LE', 'x')) { + self::$_isIconvEnabled = false; + return false; + } + + // Sometimes iconv_substr('A', 0, 1, 'UTF-8') just returns false in PHP 5.2.0 + // we cannot use iconv in that case either (http://bugs.php.net/bug.php?id=37773) + if (!@iconv_substr('A', 0, 1, 'UTF-8')) { + self::$_isIconvEnabled = false; + return false; + } + + // CUSTOM: IBM AIX iconv() does not work + if ( defined('PHP_OS') && @stristr(PHP_OS, 'AIX') + && defined('ICONV_IMPL') && (@strcasecmp(ICONV_IMPL, 'unknown') == 0) + && defined('ICONV_VERSION') && (@strcasecmp(ICONV_VERSION, 'unknown') == 0) ) + { + self::$_isIconvEnabled = false; + return false; + } + + // If we reach here no problems were detected with iconv + self::$_isIconvEnabled = true; + return true; + } + + public static function buildCharacterSets() { + if(empty(self::$_controlCharacters)) { + self::_buildControlCharacters(); + } + if(empty(self::$_SYLKCharacters)) { + self::_buildSYLKCharacters(); + } + } + + /** + * Convert from OpenXML escaped control character to PHP control character + * + * Excel 2007 team: + * ---------------- + * That's correct, control characters are stored directly in the shared-strings table. + * We do encode characters that cannot be represented in XML using the following escape sequence: + * _xHHHH_ where H represents a hexadecimal character in the character's value... + * So you could end up with something like _x0008_ in a string (either in a cell value (<v>) + * element or in the shared string <t> element. + * + * @param string $value Value to unescape + * @return string + */ + public static function ControlCharacterOOXML2PHP($value = '') { + return str_replace( array_keys(self::$_controlCharacters), array_values(self::$_controlCharacters), $value ); + } + + /** + * Convert from PHP control character to OpenXML escaped control character + * + * Excel 2007 team: + * ---------------- + * That's correct, control characters are stored directly in the shared-strings table. + * We do encode characters that cannot be represented in XML using the following escape sequence: + * _xHHHH_ where H represents a hexadecimal character in the character's value... + * So you could end up with something like _x0008_ in a string (either in a cell value (<v>) + * element or in the shared string <t> element. + * + * @param string $value Value to escape + * @return string + */ + public static function ControlCharacterPHP2OOXML($value = '') { + return str_replace( array_values(self::$_controlCharacters), array_keys(self::$_controlCharacters), $value ); + } + + /** + * Try to sanitize UTF8, stripping invalid byte sequences. Not perfect. Does not surrogate characters. + * + * @param string $value + * @return string + */ + public static function SanitizeUTF8($value) + { + if (self::getIsIconvEnabled()) { + $value = @iconv('UTF-8', 'UTF-8', $value); + return $value; + } + + if (self::getIsMbstringEnabled()) { + $value = mb_convert_encoding($value, 'UTF-8', 'UTF-8'); + return $value; + } + + // else, no conversion + return $value; + } + + /** + * Check if a string contains UTF8 data + * + * @param string $value + * @return boolean + */ + public static function IsUTF8($value = '') { + return $string === '' || preg_match('/^./su', $string) === 1; + } + + /** + * Formats a numeric value as a string for output in various output writers forcing + * point as decimal separator in case locale is other than English. + * + * @param mixed $value + * @return string + */ + public static function FormatNumber($value) { + if (is_float($value)) { + return str_replace(',', '.', $value); + } + return (string) $value; + } + + /** + * Converts a UTF-8 string into BIFF8 Unicode string data (8-bit string length) + * Writes the string using uncompressed notation, no rich text, no Asian phonetics + * If mbstring extension is not available, ASCII is assumed, and compressed notation is used + * although this will give wrong results for non-ASCII strings + * see OpenOffice.org's Documentation of the Microsoft Excel File Format, sect. 2.5.3 + * + * @param string $value UTF-8 encoded string + * @param mixed[] $arrcRuns Details of rich text runs in $value + * @return string + */ + public static function UTF8toBIFF8UnicodeShort($value, $arrcRuns = array()) + { + // character count + $ln = self::CountCharacters($value, 'UTF-8'); + // option flags + if(empty($arrcRuns)){ + $opt = (self::getIsIconvEnabled() || self::getIsMbstringEnabled()) ? + 0x0001 : 0x0000; + $data = pack('CC', $ln, $opt); + // characters + $data .= self::ConvertEncoding($value, 'UTF-16LE', 'UTF-8'); + } + else { + $data = pack('vC', $ln, 0x09); + $data .= pack('v', count($arrcRuns)); + // characters + $data .= self::ConvertEncoding($value, 'UTF-16LE', 'UTF-8'); + foreach ($arrcRuns as $cRun){ + $data .= pack('v', $cRun['strlen']); + $data .= pack('v', $cRun['fontidx']); + } + } + return $data; + } + + /** + * Converts a UTF-8 string into BIFF8 Unicode string data (16-bit string length) + * Writes the string using uncompressed notation, no rich text, no Asian phonetics + * If mbstring extension is not available, ASCII is assumed, and compressed notation is used + * although this will give wrong results for non-ASCII strings + * see OpenOffice.org's Documentation of the Microsoft Excel File Format, sect. 2.5.3 + * + * @param string $value UTF-8 encoded string + * @return string + */ + public static function UTF8toBIFF8UnicodeLong($value) + { + // character count + $ln = self::CountCharacters($value, 'UTF-8'); + + // option flags + $opt = (self::getIsIconvEnabled() || self::getIsMbstringEnabled()) ? + 0x0001 : 0x0000; + + // characters + $chars = self::ConvertEncoding($value, 'UTF-16LE', 'UTF-8'); + + $data = pack('vC', $ln, $opt) . $chars; + return $data; + } + + /** + * Convert string from one encoding to another. First try mbstring, then iconv, finally strlen + * + * @param string $value + * @param string $to Encoding to convert to, e.g. 'UTF-8' + * @param string $from Encoding to convert from, e.g. 'UTF-16LE' + * @return string + */ + public static function ConvertEncoding($value, $to, $from) + { + if (self::getIsIconvEnabled()) { + return iconv($from, $to, $value); + } + + if (self::getIsMbstringEnabled()) { + return mb_convert_encoding($value, $to, $from); + } + + if($from == 'UTF-16LE'){ + return self::utf16_decode($value, false); + }else if($from == 'UTF-16BE'){ + return self::utf16_decode($value); + } + // else, no conversion + return $value; + } + + /** + * Decode UTF-16 encoded strings. + * + * Can handle both BOM'ed data and un-BOM'ed data. + * Assumes Big-Endian byte order if no BOM is available. + * This function was taken from http://php.net/manual/en/function.utf8-decode.php + * and $bom_be parameter added. + * + * @param string $str UTF-16 encoded data to decode. + * @return string UTF-8 / ISO encoded data. + * @access public + * @version 0.2 / 2010-05-13 + * @author Rasmus Andersson {@link http://rasmusandersson.se/} + * @author vadik56 + */ + public static function utf16_decode($str, $bom_be = TRUE) { + if( strlen($str) < 2 ) return $str; + $c0 = ord($str{0}); + $c1 = ord($str{1}); + if( $c0 == 0xfe && $c1 == 0xff ) { $str = substr($str,2); } + elseif( $c0 == 0xff && $c1 == 0xfe ) { $str = substr($str,2); $bom_be = false; } + $len = strlen($str); + $newstr = ''; + for($i=0;$i<$len;$i+=2) { + if( $bom_be ) { $val = ord($str{$i}) << 4; $val += ord($str{$i+1}); } + else { $val = ord($str{$i+1}) << 4; $val += ord($str{$i}); } + $newstr .= ($val == 0x228) ? "\n" : chr($val); + } + return $newstr; + } + + /** + * Get character count. First try mbstring, then iconv, finally strlen + * + * @param string $value + * @param string $enc Encoding + * @return int Character count + */ + public static function CountCharacters($value, $enc = 'UTF-8') + { + if (self::getIsMbstringEnabled()) { + return mb_strlen($value, $enc); + } + + if (self::getIsIconvEnabled()) { + return iconv_strlen($value, $enc); + } + + // else strlen + return strlen($value); + } + + /** + * Get a substring of a UTF-8 encoded string. First try mbstring, then iconv, finally strlen + * + * @param string $pValue UTF-8 encoded string + * @param int $pStart Start offset + * @param int $pLength Maximum number of characters in substring + * @return string + */ + public static function Substring($pValue = '', $pStart = 0, $pLength = 0) + { + if (self::getIsMbstringEnabled()) { + return mb_substr($pValue, $pStart, $pLength, 'UTF-8'); + } + + if (self::getIsIconvEnabled()) { + return iconv_substr($pValue, $pStart, $pLength, 'UTF-8'); + } + + // else substr + return substr($pValue, $pStart, $pLength); + } + + /** + * Convert a UTF-8 encoded string to upper case + * + * @param string $pValue UTF-8 encoded string + * @return string + */ + public static function StrToUpper($pValue = '') + { + if (function_exists('mb_convert_case')) { + return mb_convert_case($pValue, MB_CASE_UPPER, "UTF-8"); + } + return strtoupper($pValue); + } + + /** + * Convert a UTF-8 encoded string to lower case + * + * @param string $pValue UTF-8 encoded string + * @return string + */ + public static function StrToLower($pValue = '') + { + if (function_exists('mb_convert_case')) { + return mb_convert_case($pValue, MB_CASE_LOWER, "UTF-8"); + } + return strtolower($pValue); + } + + /** + * Convert a UTF-8 encoded string to title/proper case + * (uppercase every first character in each word, lower case all other characters) + * + * @param string $pValue UTF-8 encoded string + * @return string + */ + public static function StrToTitle($pValue = '') + { + if (function_exists('mb_convert_case')) { + return mb_convert_case($pValue, MB_CASE_TITLE, "UTF-8"); + } + return ucwords($pValue); + } + + /** + * Identify whether a string contains a fractional numeric value, + * and convert it to a numeric if it is + * + * @param string &$operand string value to test + * @return boolean + */ + public static function convertToNumberIfFraction(&$operand) { + if (preg_match('/^'.self::STRING_REGEXP_FRACTION.'$/i', $operand, $match)) { + $sign = ($match[1] == '-') ? '-' : '+'; + $fractionFormula = '='.$sign.$match[2].$sign.$match[3]; + $operand = PHPExcel_Calculation::getInstance()->_calculateFormulaValue($fractionFormula); + return true; + } + return false; + } // function convertToNumberIfFraction() + + /** + * Get the decimal separator. If it has not yet been set explicitly, try to obtain number + * formatting information from locale. + * + * @return string + */ + public static function getDecimalSeparator() + { + if (!isset(self::$_decimalSeparator)) { + $localeconv = localeconv(); + self::$_decimalSeparator = ($localeconv['decimal_point'] != '') + ? $localeconv['decimal_point'] : $localeconv['mon_decimal_point']; + + if (self::$_decimalSeparator == '') { + // Default to . + self::$_decimalSeparator = '.'; + } + } + return self::$_decimalSeparator; + } + + /** + * Set the decimal separator. Only used by PHPExcel_Style_NumberFormat::toFormattedString() + * to format output by PHPExcel_Writer_HTML and PHPExcel_Writer_PDF + * + * @param string $pValue Character for decimal separator + */ + public static function setDecimalSeparator($pValue = '.') + { + self::$_decimalSeparator = $pValue; + } + + /** + * Get the thousands separator. If it has not yet been set explicitly, try to obtain number + * formatting information from locale. + * + * @return string + */ + public static function getThousandsSeparator() + { + if (!isset(self::$_thousandsSeparator)) { + $localeconv = localeconv(); + self::$_thousandsSeparator = ($localeconv['thousands_sep'] != '') + ? $localeconv['thousands_sep'] : $localeconv['mon_thousands_sep']; + + if (self::$_thousandsSeparator == '') { + // Default to . + self::$_thousandsSeparator = ','; + } + } + return self::$_thousandsSeparator; + } + + /** + * Set the thousands separator. Only used by PHPExcel_Style_NumberFormat::toFormattedString() + * to format output by PHPExcel_Writer_HTML and PHPExcel_Writer_PDF + * + * @param string $pValue Character for thousands separator + */ + public static function setThousandsSeparator($pValue = ',') + { + self::$_thousandsSeparator = $pValue; + } + + /** + * Get the currency code. If it has not yet been set explicitly, try to obtain the + * symbol information from locale. + * + * @return string + */ + public static function getCurrencyCode() + { + if (!isset(self::$_currencyCode)) { + $localeconv = localeconv(); + self::$_currencyCode = ($localeconv['currency_symbol'] != '') + ? $localeconv['currency_symbol'] : $localeconv['int_curr_symbol']; + + if (self::$_currencyCode == '') { + // Default to $ + self::$_currencyCode = '$'; + } + } + return self::$_currencyCode; + } + + /** + * Set the currency code. Only used by PHPExcel_Style_NumberFormat::toFormattedString() + * to format output by PHPExcel_Writer_HTML and PHPExcel_Writer_PDF + * + * @param string $pValue Character for currency code + */ + public static function setCurrencyCode($pValue = '$') + { + self::$_currencyCode = $pValue; + } + + /** + * Convert SYLK encoded string to UTF-8 + * + * @param string $pValue + * @return string UTF-8 encoded string + */ + public static function SYLKtoUTF8($pValue = '') + { + // If there is no escape character in the string there is nothing to do + if (strpos($pValue, '') === false) { + return $pValue; + } + + foreach (self::$_SYLKCharacters as $k => $v) { + $pValue = str_replace($k, $v, $pValue); + } + + return $pValue; + } + + /** + * Retrieve any leading numeric part of a string, or return the full string if no leading numeric + * (handles basic integer or float, but not exponent or non decimal) + * + * @param string $value + * @return mixed string or only the leading numeric part of the string + */ + public static function testStringAsNumeric($value) + { + if (is_numeric($value)) + return $value; + $v = floatval($value); + return (is_numeric(substr($value,0,strlen($v)))) ? $v : $value; + } +} diff --git a/PHPExcel/Shared/TimeZone.php b/PHPExcel/Shared/TimeZone.php new file mode 100644 index 0000000..d5fa2ad --- /dev/null +++ b/PHPExcel/Shared/TimeZone.php @@ -0,0 +1,140 @@ +<?php + +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_TimeZone + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_TimeZone +{ + /* + * Default Timezone used for date/time conversions + * + * @private + * @var string + */ + protected static $_timezone = 'UTC'; + + /** + * Validate a Timezone name + * + * @param string $timezone Time zone (e.g. 'Europe/London') + * @return boolean Success or failure + */ + public static function _validateTimeZone($timezone) { + if (in_array($timezone, DateTimeZone::listIdentifiers())) { + return TRUE; + } + return FALSE; + } + + /** + * Set the Default Timezone used for date/time conversions + * + * @param string $timezone Time zone (e.g. 'Europe/London') + * @return boolean Success or failure + */ + public static function setTimeZone($timezone) { + if (self::_validateTimezone($timezone)) { + self::$_timezone = $timezone; + return TRUE; + } + return FALSE; + } // function setTimezone() + + + /** + * Return the Default Timezone used for date/time conversions + * + * @return string Timezone (e.g. 'Europe/London') + */ + public static function getTimeZone() { + return self::$_timezone; + } // function getTimezone() + + + /** + * Return the Timezone transition for the specified timezone and timestamp + * + * @param DateTimeZone $objTimezone The timezone for finding the transitions + * @param integer $timestamp PHP date/time value for finding the current transition + * @return array The current transition details + */ + private static function _getTimezoneTransitions($objTimezone, $timestamp) { + $allTransitions = $objTimezone->getTransitions(); + $transitions = array(); + foreach($allTransitions as $key => $transition) { + if ($transition['ts'] > $timestamp) { + $transitions[] = ($key > 0) ? $allTransitions[$key - 1] : $transition; + break; + } + if (empty($transitions)) { + $transitions[] = end($allTransitions); + } + } + + return $transitions; + } + + /** + * Return the Timezone offset used for date/time conversions to/from UST + * This requires both the timezone and the calculated date/time to allow for local DST + * + * @param string $timezone The timezone for finding the adjustment to UST + * @param integer $timestamp PHP date/time value + * @return integer Number of seconds for timezone adjustment + * @throws PHPExcel_Exception + */ + public static function getTimeZoneAdjustment($timezone, $timestamp) { + if ($timezone !== NULL) { + if (!self::_validateTimezone($timezone)) { + throw new PHPExcel_Exception("Invalid timezone " . $timezone); + } + } else { + $timezone = self::$_timezone; + } + + if ($timezone == 'UST') { + return 0; + } + + $objTimezone = new DateTimeZone($timezone); + if (version_compare(PHP_VERSION, '5.3.0') >= 0) { + $transitions = $objTimezone->getTransitions($timestamp,$timestamp); + } else { + $transitions = self::_getTimezoneTransitions($objTimezone, $timestamp); + } + + return (count($transitions) > 0) ? $transitions[0]['offset'] : 0; + } + +} diff --git a/PHPExcel/Shared/XMLWriter.php b/PHPExcel/Shared/XMLWriter.php new file mode 100644 index 0000000..0b0b553 --- /dev/null +++ b/PHPExcel/Shared/XMLWriter.php @@ -0,0 +1,127 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +if (!defined('DATE_W3C')) { + define('DATE_W3C', 'Y-m-d\TH:i:sP'); +} + +if (!defined('DEBUGMODE_ENABLED')) { + define('DEBUGMODE_ENABLED', false); +} + + +/** + * PHPExcel_Shared_XMLWriter + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_XMLWriter extends XMLWriter { + /** Temporary storage method */ + const STORAGE_MEMORY = 1; + const STORAGE_DISK = 2; + + /** + * Temporary filename + * + * @var string + */ + private $_tempFileName = ''; + + /** + * Create a new PHPExcel_Shared_XMLWriter instance + * + * @param int $pTemporaryStorage Temporary storage location + * @param string $pTemporaryStorageFolder Temporary storage folder + */ + public function __construct($pTemporaryStorage = self::STORAGE_MEMORY, $pTemporaryStorageFolder = NULL) { + // Open temporary storage + if ($pTemporaryStorage == self::STORAGE_MEMORY) { + $this->openMemory(); + } else { + // Create temporary filename + if ($pTemporaryStorageFolder === NULL) + $pTemporaryStorageFolder = PHPExcel_Shared_File::sys_get_temp_dir(); + $this->_tempFileName = @tempnam($pTemporaryStorageFolder, 'xml'); + + // Open storage + if ($this->openUri($this->_tempFileName) === false) { + // Fallback to memory... + $this->openMemory(); + } + } + + // Set default values + if (DEBUGMODE_ENABLED) { + $this->setIndent(true); + } + } + + /** + * Destructor + */ + public function __destruct() { + // Unlink temporary files + if ($this->_tempFileName != '') { + @unlink($this->_tempFileName); + } + } + + /** + * Get written data + * + * @return $data + */ + public function getData() { + if ($this->_tempFileName == '') { + return $this->outputMemory(true); + } else { + $this->flush(); + return file_get_contents($this->_tempFileName); + } + } + + /** + * Fallback method for writeRaw, introduced in PHP 5.2 + * + * @param string $text + * @return string + */ + public function writeRawData($text) + { + if (is_array($text)) { + $text = implode("\n",$text); + } + + if (method_exists($this, 'writeRaw')) { + return $this->writeRaw(htmlspecialchars($text)); + } + + return $this->text($text); + } +} diff --git a/PHPExcel/Shared/ZipArchive.php b/PHPExcel/Shared/ZipArchive.php new file mode 100644 index 0000000..ab551af --- /dev/null +++ b/PHPExcel/Shared/ZipArchive.php @@ -0,0 +1,175 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_ZipArchive + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +if (!defined('PCLZIP_TEMPORARY_DIR')) { + define('PCLZIP_TEMPORARY_DIR', PHPExcel_Shared_File::sys_get_temp_dir()); +} +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/PCLZip/pclzip.lib.php'; + + +/** + * PHPExcel_Shared_ZipArchive + * + * @category PHPExcel + * @package PHPExcel_Shared_ZipArchive + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_ZipArchive +{ + + /** constants */ + const OVERWRITE = 'OVERWRITE'; + const CREATE = 'CREATE'; + + + /** + * Temporary storage directory + * + * @var string + */ + private $_tempDir; + + /** + * Zip Archive Stream Handle + * + * @var string + */ + private $_zip; + + + /** + * Open a new zip archive + * + * @param string $fileName Filename for the zip archive + * @return boolean + */ + public function open($fileName) + { + $this->_tempDir = PHPExcel_Shared_File::sys_get_temp_dir(); + + $this->_zip = new PclZip($fileName); + + return true; + } + + + /** + * Close this zip archive + * + */ + public function close() + { + } + + + /** + * Add a new file to the zip archive from a string of raw data. + * + * @param string $localname Directory/Name of the file to add to the zip archive + * @param string $contents String of data to add to the zip archive + */ + public function addFromString($localname, $contents) + { + $filenameParts = pathinfo($localname); + + $handle = fopen($this->_tempDir.'/'.$filenameParts["basename"], "wb"); + fwrite($handle, $contents); + fclose($handle); + + $res = $this->_zip->add($this->_tempDir.'/'.$filenameParts["basename"], + PCLZIP_OPT_REMOVE_PATH, $this->_tempDir, + PCLZIP_OPT_ADD_PATH, $filenameParts["dirname"] + ); + if ($res == 0) { + throw new PHPExcel_Writer_Exception("Error zipping files : " . $this->_zip->errorInfo(true)); + } + + unlink($this->_tempDir.'/'.$filenameParts["basename"]); + } + + /** + * Find if given fileName exist in archive (Emulate ZipArchive locateName()) + * + * @param string $fileName Filename for the file in zip archive + * @return boolean + */ + public function locateName($fileName) + { + $list = $this->_zip->listContent(); + $listCount = count($list); + $list_index = -1; + for ($i = 0; $i < $listCount; ++$i) { + if (strtolower($list[$i]["filename"]) == strtolower($fileName) || + strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) { + $list_index = $i; + break; + } + } + return ($list_index > -1); + } + + /** + * Extract file from archive by given fileName (Emulate ZipArchive getFromName()) + * + * @param string $fileName Filename for the file in zip archive + * @return string $contents File string contents + */ + public function getFromName($fileName) + { + $list = $this->_zip->listContent(); + $listCount = count($list); + $list_index = -1; + for ($i = 0; $i < $listCount; ++$i) { + if (strtolower($list[$i]["filename"]) == strtolower($fileName) || + strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) { + $list_index = $i; + break; + } + } + + $extracted = ""; + if ($list_index != -1) { + $extracted = $this->_zip->extractByIndex($list_index, PCLZIP_OPT_EXTRACT_AS_STRING); + } else { + $filename = substr($fileName, 1); + $list_index = -1; + for ($i = 0; $i < $listCount; ++$i) { + if (strtolower($list[$i]["filename"]) == strtolower($fileName) || + strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) { + $list_index = $i; + break; + } + } + $extracted = $this->_zip->extractByIndex($list_index, PCLZIP_OPT_EXTRACT_AS_STRING); + } + if ((is_array($extracted)) && ($extracted != 0)) { + $contents = $extracted[0]["content"]; + } + + return $contents; + } +} diff --git a/PHPExcel/Shared/ZipStreamWrapper.php b/PHPExcel/Shared/ZipStreamWrapper.php new file mode 100644 index 0000000..696072b --- /dev/null +++ b/PHPExcel/Shared/ZipStreamWrapper.php @@ -0,0 +1,201 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_ZipStreamWrapper + * + * @category PHPExcel + * @package PHPExcel_Shared + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Shared_ZipStreamWrapper { + /** + * Internal ZipAcrhive + * + * @var ZipAcrhive + */ + private $_archive; + + /** + * Filename in ZipAcrhive + * + * @var string + */ + private $_fileNameInArchive = ''; + + /** + * Position in file + * + * @var int + */ + private $_position = 0; + + /** + * Data + * + * @var mixed + */ + private $_data = ''; + + /** + * Register wrapper + */ + public static function register() { + @stream_wrapper_unregister("zip"); + @stream_wrapper_register("zip", __CLASS__); + } + + /** + * Implements support for fopen(). + * + * @param string $path resource name including scheme, e.g. + * @param string $mode only "r" is supported + * @param int $options mask of STREAM_REPORT_ERRORS and STREAM_USE_PATH + * @param string &$openedPath absolute path of the opened stream (out parameter) + * @return bool true on success + */ + public function stream_open($path, $mode, $options, &$opened_path) { + // Check for mode + if ($mode{0} != 'r') { + throw new PHPExcel_Reader_Exception('Mode ' . $mode . ' is not supported. Only read mode is supported.'); + } + + $pos = strrpos($path, '#'); + $url['host'] = substr($path, 6, $pos - 6); // 6: strlen('zip://') + $url['fragment'] = substr($path, $pos + 1); + + // Open archive + $this->_archive = new ZipArchive(); + $this->_archive->open($url['host']); + + $this->_fileNameInArchive = $url['fragment']; + $this->_position = 0; + $this->_data = $this->_archive->getFromName( $this->_fileNameInArchive ); + + return true; + } + + /** + * Implements support for fstat(). + * + * @return boolean + */ + public function statName() { + return $this->_fileNameInArchive; + } + + /** + * Implements support for fstat(). + * + * @return boolean + */ + public function url_stat() { + return $this->statName( $this->_fileNameInArchive ); + } + + /** + * Implements support for fstat(). + * + * @return boolean + */ + public function stream_stat() { + return $this->_archive->statName( $this->_fileNameInArchive ); + } + + /** + * Implements support for fread(), fgets() etc. + * + * @param int $count maximum number of bytes to read + * @return string + */ + function stream_read($count) { + $ret = substr($this->_data, $this->_position, $count); + $this->_position += strlen($ret); + return $ret; + } + + /** + * Returns the position of the file pointer, i.e. its offset into the file + * stream. Implements support for ftell(). + * + * @return int + */ + public function stream_tell() { + return $this->_position; + } + + /** + * EOF stream + * + * @return bool + */ + public function stream_eof() { + return $this->_position >= strlen($this->_data); + } + + /** + * Seek stream + * + * @param int $offset byte offset + * @param int $whence SEEK_SET, SEEK_CUR or SEEK_END + * @return bool + */ + public function stream_seek($offset, $whence) { + switch ($whence) { + case SEEK_SET: + if ($offset < strlen($this->_data) && $offset >= 0) { + $this->_position = $offset; + return true; + } else { + return false; + } + break; + + case SEEK_CUR: + if ($offset >= 0) { + $this->_position += $offset; + return true; + } else { + return false; + } + break; + + case SEEK_END: + if (strlen($this->_data) + $offset >= 0) { + $this->_position = strlen($this->_data) + $offset; + return true; + } else { + return false; + } + break; + + default: + return false; + } + } +} diff --git a/PHPExcel/Shared/trend/bestFitClass.php b/PHPExcel/Shared/trend/bestFitClass.php new file mode 100644 index 0000000..088ce06 --- /dev/null +++ b/PHPExcel/Shared/trend/bestFitClass.php @@ -0,0 +1,432 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Best_Fit + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Best_Fit +{ + /** + * Indicator flag for a calculation error + * + * @var boolean + **/ + protected $_error = False; + + /** + * Algorithm type to use for best-fit + * + * @var string + **/ + protected $_bestFitType = 'undetermined'; + + /** + * Number of entries in the sets of x- and y-value arrays + * + * @var int + **/ + protected $_valueCount = 0; + + /** + * X-value dataseries of values + * + * @var float[] + **/ + protected $_xValues = array(); + + /** + * Y-value dataseries of values + * + * @var float[] + **/ + protected $_yValues = array(); + + /** + * Flag indicating whether values should be adjusted to Y=0 + * + * @var boolean + **/ + protected $_adjustToZero = False; + + /** + * Y-value series of best-fit values + * + * @var float[] + **/ + protected $_yBestFitValues = array(); + + protected $_goodnessOfFit = 1; + + protected $_stdevOfResiduals = 0; + + protected $_covariance = 0; + + protected $_correlation = 0; + + protected $_SSRegression = 0; + + protected $_SSResiduals = 0; + + protected $_DFResiduals = 0; + + protected $_F = 0; + + protected $_slope = 0; + + protected $_slopeSE = 0; + + protected $_intersect = 0; + + protected $_intersectSE = 0; + + protected $_Xoffset = 0; + + protected $_Yoffset = 0; + + + public function getError() { + return $this->_error; + } // function getBestFitType() + + + public function getBestFitType() { + return $this->_bestFitType; + } // function getBestFitType() + + + /** + * Return the Y-Value for a specified value of X + * + * @param float $xValue X-Value + * @return float Y-Value + */ + public function getValueOfYForX($xValue) { + return False; + } // function getValueOfYForX() + + + /** + * Return the X-Value for a specified value of Y + * + * @param float $yValue Y-Value + * @return float X-Value + */ + public function getValueOfXForY($yValue) { + return False; + } // function getValueOfXForY() + + + /** + * Return the original set of X-Values + * + * @return float[] X-Values + */ + public function getXValues() { + return $this->_xValues; + } // function getValueOfXForY() + + + /** + * Return the Equation of the best-fit line + * + * @param int $dp Number of places of decimal precision to display + * @return string + */ + public function getEquation($dp=0) { + return False; + } // function getEquation() + + + /** + * Return the Slope of the line + * + * @param int $dp Number of places of decimal precision to display + * @return string + */ + public function getSlope($dp=0) { + if ($dp != 0) { + return round($this->_slope,$dp); + } + return $this->_slope; + } // function getSlope() + + + /** + * Return the standard error of the Slope + * + * @param int $dp Number of places of decimal precision to display + * @return string + */ + public function getSlopeSE($dp=0) { + if ($dp != 0) { + return round($this->_slopeSE,$dp); + } + return $this->_slopeSE; + } // function getSlopeSE() + + + /** + * Return the Value of X where it intersects Y = 0 + * + * @param int $dp Number of places of decimal precision to display + * @return string + */ + public function getIntersect($dp=0) { + if ($dp != 0) { + return round($this->_intersect,$dp); + } + return $this->_intersect; + } // function getIntersect() + + + /** + * Return the standard error of the Intersect + * + * @param int $dp Number of places of decimal precision to display + * @return string + */ + public function getIntersectSE($dp=0) { + if ($dp != 0) { + return round($this->_intersectSE,$dp); + } + return $this->_intersectSE; + } // function getIntersectSE() + + + /** + * Return the goodness of fit for this regression + * + * @param int $dp Number of places of decimal precision to return + * @return float + */ + public function getGoodnessOfFit($dp=0) { + if ($dp != 0) { + return round($this->_goodnessOfFit,$dp); + } + return $this->_goodnessOfFit; + } // function getGoodnessOfFit() + + + public function getGoodnessOfFitPercent($dp=0) { + if ($dp != 0) { + return round($this->_goodnessOfFit * 100,$dp); + } + return $this->_goodnessOfFit * 100; + } // function getGoodnessOfFitPercent() + + + /** + * Return the standard deviation of the residuals for this regression + * + * @param int $dp Number of places of decimal precision to return + * @return float + */ + public function getStdevOfResiduals($dp=0) { + if ($dp != 0) { + return round($this->_stdevOfResiduals,$dp); + } + return $this->_stdevOfResiduals; + } // function getStdevOfResiduals() + + + public function getSSRegression($dp=0) { + if ($dp != 0) { + return round($this->_SSRegression,$dp); + } + return $this->_SSRegression; + } // function getSSRegression() + + + public function getSSResiduals($dp=0) { + if ($dp != 0) { + return round($this->_SSResiduals,$dp); + } + return $this->_SSResiduals; + } // function getSSResiduals() + + + public function getDFResiduals($dp=0) { + if ($dp != 0) { + return round($this->_DFResiduals,$dp); + } + return $this->_DFResiduals; + } // function getDFResiduals() + + + public function getF($dp=0) { + if ($dp != 0) { + return round($this->_F,$dp); + } + return $this->_F; + } // function getF() + + + public function getCovariance($dp=0) { + if ($dp != 0) { + return round($this->_covariance,$dp); + } + return $this->_covariance; + } // function getCovariance() + + + public function getCorrelation($dp=0) { + if ($dp != 0) { + return round($this->_correlation,$dp); + } + return $this->_correlation; + } // function getCorrelation() + + + public function getYBestFitValues() { + return $this->_yBestFitValues; + } // function getYBestFitValues() + + + protected function _calculateGoodnessOfFit($sumX,$sumY,$sumX2,$sumY2,$sumXY,$meanX,$meanY, $const) { + $SSres = $SScov = $SScor = $SStot = $SSsex = 0.0; + foreach($this->_xValues as $xKey => $xValue) { + $bestFitY = $this->_yBestFitValues[$xKey] = $this->getValueOfYForX($xValue); + + $SSres += ($this->_yValues[$xKey] - $bestFitY) * ($this->_yValues[$xKey] - $bestFitY); + if ($const) { + $SStot += ($this->_yValues[$xKey] - $meanY) * ($this->_yValues[$xKey] - $meanY); + } else { + $SStot += $this->_yValues[$xKey] * $this->_yValues[$xKey]; + } + $SScov += ($this->_xValues[$xKey] - $meanX) * ($this->_yValues[$xKey] - $meanY); + if ($const) { + $SSsex += ($this->_xValues[$xKey] - $meanX) * ($this->_xValues[$xKey] - $meanX); + } else { + $SSsex += $this->_xValues[$xKey] * $this->_xValues[$xKey]; + } + } + + $this->_SSResiduals = $SSres; + $this->_DFResiduals = $this->_valueCount - 1 - $const; + + if ($this->_DFResiduals == 0.0) { + $this->_stdevOfResiduals = 0.0; + } else { + $this->_stdevOfResiduals = sqrt($SSres / $this->_DFResiduals); + } + if (($SStot == 0.0) || ($SSres == $SStot)) { + $this->_goodnessOfFit = 1; + } else { + $this->_goodnessOfFit = 1 - ($SSres / $SStot); + } + + $this->_SSRegression = $this->_goodnessOfFit * $SStot; + $this->_covariance = $SScov / $this->_valueCount; + $this->_correlation = ($this->_valueCount * $sumXY - $sumX * $sumY) / sqrt(($this->_valueCount * $sumX2 - pow($sumX,2)) * ($this->_valueCount * $sumY2 - pow($sumY,2))); + $this->_slopeSE = $this->_stdevOfResiduals / sqrt($SSsex); + $this->_intersectSE = $this->_stdevOfResiduals * sqrt(1 / ($this->_valueCount - ($sumX * $sumX) / $sumX2)); + if ($this->_SSResiduals != 0.0) { + if ($this->_DFResiduals == 0.0) { + $this->_F = 0.0; + } else { + $this->_F = $this->_SSRegression / ($this->_SSResiduals / $this->_DFResiduals); + } + } else { + if ($this->_DFResiduals == 0.0) { + $this->_F = 0.0; + } else { + $this->_F = $this->_SSRegression / $this->_DFResiduals; + } + } + } // function _calculateGoodnessOfFit() + + + protected function _leastSquareFit($yValues, $xValues, $const) { + // calculate sums + $x_sum = array_sum($xValues); + $y_sum = array_sum($yValues); + $meanX = $x_sum / $this->_valueCount; + $meanY = $y_sum / $this->_valueCount; + $mBase = $mDivisor = $xx_sum = $xy_sum = $yy_sum = 0.0; + for($i = 0; $i < $this->_valueCount; ++$i) { + $xy_sum += $xValues[$i] * $yValues[$i]; + $xx_sum += $xValues[$i] * $xValues[$i]; + $yy_sum += $yValues[$i] * $yValues[$i]; + + if ($const) { + $mBase += ($xValues[$i] - $meanX) * ($yValues[$i] - $meanY); + $mDivisor += ($xValues[$i] - $meanX) * ($xValues[$i] - $meanX); + } else { + $mBase += $xValues[$i] * $yValues[$i]; + $mDivisor += $xValues[$i] * $xValues[$i]; + } + } + + // calculate slope +// $this->_slope = (($this->_valueCount * $xy_sum) - ($x_sum * $y_sum)) / (($this->_valueCount * $xx_sum) - ($x_sum * $x_sum)); + $this->_slope = $mBase / $mDivisor; + + // calculate intersect +// $this->_intersect = ($y_sum - ($this->_slope * $x_sum)) / $this->_valueCount; + if ($const) { + $this->_intersect = $meanY - ($this->_slope * $meanX); + } else { + $this->_intersect = 0; + } + + $this->_calculateGoodnessOfFit($x_sum,$y_sum,$xx_sum,$yy_sum,$xy_sum,$meanX,$meanY,$const); + } // function _leastSquareFit() + + + /** + * Define the regression + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + function __construct($yValues, $xValues=array(), $const=True) { + // Calculate number of points + $nY = count($yValues); + $nX = count($xValues); + + // Define X Values if necessary + if ($nX == 0) { + $xValues = range(1,$nY); + $nX = $nY; + } elseif ($nY != $nX) { + // Ensure both arrays of points are the same size + $this->_error = True; + return False; + } + + $this->_valueCount = $nY; + $this->_xValues = $xValues; + $this->_yValues = $yValues; + } // function __construct() + +} // class bestFit diff --git a/PHPExcel/Shared/trend/exponentialBestFitClass.php b/PHPExcel/Shared/trend/exponentialBestFitClass.php new file mode 100644 index 0000000..44c7aee --- /dev/null +++ b/PHPExcel/Shared/trend/exponentialBestFitClass.php @@ -0,0 +1,148 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +require_once(PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/bestFitClass.php'); + + +/** + * PHPExcel_Exponential_Best_Fit + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Exponential_Best_Fit extends PHPExcel_Best_Fit +{ + /** + * Algorithm type to use for best-fit + * (Name of this trend class) + * + * @var string + **/ + protected $_bestFitType = 'exponential'; + + + /** + * Return the Y-Value for a specified value of X + * + * @param float $xValue X-Value + * @return float Y-Value + **/ + public function getValueOfYForX($xValue) { + return $this->getIntersect() * pow($this->getSlope(),($xValue - $this->_Xoffset)); + } // function getValueOfYForX() + + + /** + * Return the X-Value for a specified value of Y + * + * @param float $yValue Y-Value + * @return float X-Value + **/ + public function getValueOfXForY($yValue) { + return log(($yValue + $this->_Yoffset) / $this->getIntersect()) / log($this->getSlope()); + } // function getValueOfXForY() + + + /** + * Return the Equation of the best-fit line + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getEquation($dp=0) { + $slope = $this->getSlope($dp); + $intersect = $this->getIntersect($dp); + + return 'Y = '.$intersect.' * '.$slope.'^X'; + } // function getEquation() + + + /** + * Return the Slope of the line + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getSlope($dp=0) { + if ($dp != 0) { + return round(exp($this->_slope),$dp); + } + return exp($this->_slope); + } // function getSlope() + + + /** + * Return the Value of X where it intersects Y = 0 + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getIntersect($dp=0) { + if ($dp != 0) { + return round(exp($this->_intersect),$dp); + } + return exp($this->_intersect); + } // function getIntersect() + + + /** + * Execute the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + private function _exponential_regression($yValues, $xValues, $const) { + foreach($yValues as &$value) { + if ($value < 0.0) { + $value = 0 - log(abs($value)); + } elseif ($value > 0.0) { + $value = log($value); + } + } + unset($value); + + $this->_leastSquareFit($yValues, $xValues, $const); + } // function _exponential_regression() + + + /** + * Define the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + function __construct($yValues, $xValues=array(), $const=True) { + if (parent::__construct($yValues, $xValues) !== False) { + $this->_exponential_regression($yValues, $xValues, $const); + } + } // function __construct() + +} // class exponentialBestFit \ No newline at end of file diff --git a/PHPExcel/Shared/trend/linearBestFitClass.php b/PHPExcel/Shared/trend/linearBestFitClass.php new file mode 100644 index 0000000..00da841 --- /dev/null +++ b/PHPExcel/Shared/trend/linearBestFitClass.php @@ -0,0 +1,111 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +require_once(PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/bestFitClass.php'); + + +/** + * PHPExcel_Linear_Best_Fit + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Linear_Best_Fit extends PHPExcel_Best_Fit +{ + /** + * Algorithm type to use for best-fit + * (Name of this trend class) + * + * @var string + **/ + protected $_bestFitType = 'linear'; + + + /** + * Return the Y-Value for a specified value of X + * + * @param float $xValue X-Value + * @return float Y-Value + **/ + public function getValueOfYForX($xValue) { + return $this->getIntersect() + $this->getSlope() * $xValue; + } // function getValueOfYForX() + + + /** + * Return the X-Value for a specified value of Y + * + * @param float $yValue Y-Value + * @return float X-Value + **/ + public function getValueOfXForY($yValue) { + return ($yValue - $this->getIntersect()) / $this->getSlope(); + } // function getValueOfXForY() + + + /** + * Return the Equation of the best-fit line + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getEquation($dp=0) { + $slope = $this->getSlope($dp); + $intersect = $this->getIntersect($dp); + + return 'Y = '.$intersect.' + '.$slope.' * X'; + } // function getEquation() + + + /** + * Execute the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + private function _linear_regression($yValues, $xValues, $const) { + $this->_leastSquareFit($yValues, $xValues,$const); + } // function _linear_regression() + + + /** + * Define the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + function __construct($yValues, $xValues=array(), $const=True) { + if (parent::__construct($yValues, $xValues) !== False) { + $this->_linear_regression($yValues, $xValues, $const); + } + } // function __construct() + +} // class linearBestFit \ No newline at end of file diff --git a/PHPExcel/Shared/trend/logarithmicBestFitClass.php b/PHPExcel/Shared/trend/logarithmicBestFitClass.php new file mode 100644 index 0000000..ac9c1e2 --- /dev/null +++ b/PHPExcel/Shared/trend/logarithmicBestFitClass.php @@ -0,0 +1,120 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +require_once(PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/bestFitClass.php'); + + +/** + * PHPExcel_Logarithmic_Best_Fit + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Logarithmic_Best_Fit extends PHPExcel_Best_Fit +{ + /** + * Algorithm type to use for best-fit + * (Name of this trend class) + * + * @var string + **/ + protected $_bestFitType = 'logarithmic'; + + + /** + * Return the Y-Value for a specified value of X + * + * @param float $xValue X-Value + * @return float Y-Value + **/ + public function getValueOfYForX($xValue) { + return $this->getIntersect() + $this->getSlope() * log($xValue - $this->_Xoffset); + } // function getValueOfYForX() + + + /** + * Return the X-Value for a specified value of Y + * + * @param float $yValue Y-Value + * @return float X-Value + **/ + public function getValueOfXForY($yValue) { + return exp(($yValue - $this->getIntersect()) / $this->getSlope()); + } // function getValueOfXForY() + + + /** + * Return the Equation of the best-fit line + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getEquation($dp=0) { + $slope = $this->getSlope($dp); + $intersect = $this->getIntersect($dp); + + return 'Y = '.$intersect.' + '.$slope.' * log(X)'; + } // function getEquation() + + + /** + * Execute the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + private function _logarithmic_regression($yValues, $xValues, $const) { + foreach($xValues as &$value) { + if ($value < 0.0) { + $value = 0 - log(abs($value)); + } elseif ($value > 0.0) { + $value = log($value); + } + } + unset($value); + + $this->_leastSquareFit($yValues, $xValues, $const); + } // function _logarithmic_regression() + + + /** + * Define the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + function __construct($yValues, $xValues=array(), $const=True) { + if (parent::__construct($yValues, $xValues) !== False) { + $this->_logarithmic_regression($yValues, $xValues, $const); + } + } // function __construct() + +} // class logarithmicBestFit \ No newline at end of file diff --git a/PHPExcel/Shared/trend/polynomialBestFitClass.php b/PHPExcel/Shared/trend/polynomialBestFitClass.php new file mode 100644 index 0000000..a507975 --- /dev/null +++ b/PHPExcel/Shared/trend/polynomialBestFitClass.php @@ -0,0 +1,224 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/bestFitClass.php'; +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/JAMA/Matrix.php'; + + +/** + * PHPExcel_Polynomial_Best_Fit + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Polynomial_Best_Fit extends PHPExcel_Best_Fit +{ + /** + * Algorithm type to use for best-fit + * (Name of this trend class) + * + * @var string + **/ + protected $_bestFitType = 'polynomial'; + + /** + * Polynomial order + * + * @protected + * @var int + **/ + protected $_order = 0; + + + /** + * Return the order of this polynomial + * + * @return int + **/ + public function getOrder() { + return $this->_order; + } // function getOrder() + + + /** + * Return the Y-Value for a specified value of X + * + * @param float $xValue X-Value + * @return float Y-Value + **/ + public function getValueOfYForX($xValue) { + $retVal = $this->getIntersect(); + $slope = $this->getSlope(); + foreach($slope as $key => $value) { + if ($value != 0.0) { + $retVal += $value * pow($xValue, $key + 1); + } + } + return $retVal; + } // function getValueOfYForX() + + + /** + * Return the X-Value for a specified value of Y + * + * @param float $yValue Y-Value + * @return float X-Value + **/ + public function getValueOfXForY($yValue) { + return ($yValue - $this->getIntersect()) / $this->getSlope(); + } // function getValueOfXForY() + + + /** + * Return the Equation of the best-fit line + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getEquation($dp=0) { + $slope = $this->getSlope($dp); + $intersect = $this->getIntersect($dp); + + $equation = 'Y = '.$intersect; + foreach($slope as $key => $value) { + if ($value != 0.0) { + $equation .= ' + '.$value.' * X'; + if ($key > 0) { + $equation .= '^'.($key + 1); + } + } + } + return $equation; + } // function getEquation() + + + /** + * Return the Slope of the line + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getSlope($dp=0) { + if ($dp != 0) { + $coefficients = array(); + foreach($this->_slope as $coefficient) { + $coefficients[] = round($coefficient,$dp); + } + return $coefficients; + } + return $this->_slope; + } // function getSlope() + + + public function getCoefficients($dp=0) { + return array_merge(array($this->getIntersect($dp)),$this->getSlope($dp)); + } // function getCoefficients() + + + /** + * Execute the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param int $order Order of Polynomial for this regression + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + private function _polynomial_regression($order, $yValues, $xValues, $const) { + // calculate sums + $x_sum = array_sum($xValues); + $y_sum = array_sum($yValues); + $xx_sum = $xy_sum = 0; + for($i = 0; $i < $this->_valueCount; ++$i) { + $xy_sum += $xValues[$i] * $yValues[$i]; + $xx_sum += $xValues[$i] * $xValues[$i]; + $yy_sum += $yValues[$i] * $yValues[$i]; + } + /* + * This routine uses logic from the PHP port of polyfit version 0.1 + * written by Michael Bommarito and Paul Meagher + * + * The function fits a polynomial function of order $order through + * a series of x-y data points using least squares. + * + */ + for ($i = 0; $i < $this->_valueCount; ++$i) { + for ($j = 0; $j <= $order; ++$j) { + $A[$i][$j] = pow($xValues[$i], $j); + } + } + for ($i=0; $i < $this->_valueCount; ++$i) { + $B[$i] = array($yValues[$i]); + } + $matrixA = new Matrix($A); + $matrixB = new Matrix($B); + $C = $matrixA->solve($matrixB); + + $coefficients = array(); + for($i = 0; $i < $C->m; ++$i) { + $r = $C->get($i, 0); + if (abs($r) <= pow(10, -9)) { + $r = 0; + } + $coefficients[] = $r; + } + + $this->_intersect = array_shift($coefficients); + $this->_slope = $coefficients; + + $this->_calculateGoodnessOfFit($x_sum,$y_sum,$xx_sum,$yy_sum,$xy_sum); + foreach($this->_xValues as $xKey => $xValue) { + $this->_yBestFitValues[$xKey] = $this->getValueOfYForX($xValue); + } + } // function _polynomial_regression() + + + /** + * Define the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param int $order Order of Polynomial for this regression + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + function __construct($order, $yValues, $xValues=array(), $const=True) { + if (parent::__construct($yValues, $xValues) !== False) { + if ($order < $this->_valueCount) { + $this->_bestFitType .= '_'.$order; + $this->_order = $order; + $this->_polynomial_regression($order, $yValues, $xValues, $const); + if (($this->getGoodnessOfFit() < 0.0) || ($this->getGoodnessOfFit() > 1.0)) { + $this->_error = True; + } + } else { + $this->_error = True; + } + } + } // function __construct() + +} // class polynomialBestFit \ No newline at end of file diff --git a/PHPExcel/Shared/trend/powerBestFitClass.php b/PHPExcel/Shared/trend/powerBestFitClass.php new file mode 100644 index 0000000..158e0c4 --- /dev/null +++ b/PHPExcel/Shared/trend/powerBestFitClass.php @@ -0,0 +1,142 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/bestFitClass.php'; + + +/** + * PHPExcel_Power_Best_Fit + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Power_Best_Fit extends PHPExcel_Best_Fit +{ + /** + * Algorithm type to use for best-fit + * (Name of this trend class) + * + * @var string + **/ + protected $_bestFitType = 'power'; + + + /** + * Return the Y-Value for a specified value of X + * + * @param float $xValue X-Value + * @return float Y-Value + **/ + public function getValueOfYForX($xValue) { + return $this->getIntersect() * pow(($xValue - $this->_Xoffset),$this->getSlope()); + } // function getValueOfYForX() + + + /** + * Return the X-Value for a specified value of Y + * + * @param float $yValue Y-Value + * @return float X-Value + **/ + public function getValueOfXForY($yValue) { + return pow((($yValue + $this->_Yoffset) / $this->getIntersect()),(1 / $this->getSlope())); + } // function getValueOfXForY() + + + /** + * Return the Equation of the best-fit line + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getEquation($dp=0) { + $slope = $this->getSlope($dp); + $intersect = $this->getIntersect($dp); + + return 'Y = '.$intersect.' * X^'.$slope; + } // function getEquation() + + + /** + * Return the Value of X where it intersects Y = 0 + * + * @param int $dp Number of places of decimal precision to display + * @return string + **/ + public function getIntersect($dp=0) { + if ($dp != 0) { + return round(exp($this->_intersect),$dp); + } + return exp($this->_intersect); + } // function getIntersect() + + + /** + * Execute the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + private function _power_regression($yValues, $xValues, $const) { + foreach($xValues as &$value) { + if ($value < 0.0) { + $value = 0 - log(abs($value)); + } elseif ($value > 0.0) { + $value = log($value); + } + } + unset($value); + foreach($yValues as &$value) { + if ($value < 0.0) { + $value = 0 - log(abs($value)); + } elseif ($value > 0.0) { + $value = log($value); + } + } + unset($value); + + $this->_leastSquareFit($yValues, $xValues, $const); + } // function _power_regression() + + + /** + * Define the regression and calculate the goodness of fit for a set of X and Y data values + * + * @param float[] $yValues The set of Y-values for this regression + * @param float[] $xValues The set of X-values for this regression + * @param boolean $const + */ + function __construct($yValues, $xValues=array(), $const=True) { + if (parent::__construct($yValues, $xValues) !== False) { + $this->_power_regression($yValues, $xValues, $const); + } + } // function __construct() + +} // class powerBestFit \ No newline at end of file diff --git a/PHPExcel/Shared/trend/trendClass.php b/PHPExcel/Shared/trend/trendClass.php new file mode 100644 index 0000000..d891a7d --- /dev/null +++ b/PHPExcel/Shared/trend/trendClass.php @@ -0,0 +1,156 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/linearBestFitClass.php'; +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/logarithmicBestFitClass.php'; +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/exponentialBestFitClass.php'; +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/powerBestFitClass.php'; +require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/trend/polynomialBestFitClass.php'; + + +/** + * PHPExcel_trendClass + * + * @category PHPExcel + * @package PHPExcel_Shared_Trend + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class trendClass +{ + const TREND_LINEAR = 'Linear'; + const TREND_LOGARITHMIC = 'Logarithmic'; + const TREND_EXPONENTIAL = 'Exponential'; + const TREND_POWER = 'Power'; + const TREND_POLYNOMIAL_2 = 'Polynomial_2'; + const TREND_POLYNOMIAL_3 = 'Polynomial_3'; + const TREND_POLYNOMIAL_4 = 'Polynomial_4'; + const TREND_POLYNOMIAL_5 = 'Polynomial_5'; + const TREND_POLYNOMIAL_6 = 'Polynomial_6'; + const TREND_BEST_FIT = 'Bestfit'; + const TREND_BEST_FIT_NO_POLY = 'Bestfit_no_Polynomials'; + + /** + * Names of the best-fit trend analysis methods + * + * @var string[] + **/ + private static $_trendTypes = array( self::TREND_LINEAR, + self::TREND_LOGARITHMIC, + self::TREND_EXPONENTIAL, + self::TREND_POWER + ); + /** + * Names of the best-fit trend polynomial orders + * + * @var string[] + **/ + private static $_trendTypePolyOrders = array( self::TREND_POLYNOMIAL_2, + self::TREND_POLYNOMIAL_3, + self::TREND_POLYNOMIAL_4, + self::TREND_POLYNOMIAL_5, + self::TREND_POLYNOMIAL_6 + ); + + /** + * Cached results for each method when trying to identify which provides the best fit + * + * @var PHPExcel_Best_Fit[] + **/ + private static $_trendCache = array(); + + + public static function calculate($trendType=self::TREND_BEST_FIT, $yValues, $xValues=array(), $const=True) { + // Calculate number of points in each dataset + $nY = count($yValues); + $nX = count($xValues); + + // Define X Values if necessary + if ($nX == 0) { + $xValues = range(1,$nY); + $nX = $nY; + } elseif ($nY != $nX) { + // Ensure both arrays of points are the same size + trigger_error("trend(): Number of elements in coordinate arrays do not match.", E_USER_ERROR); + } + + $key = md5($trendType.$const.serialize($yValues).serialize($xValues)); + // Determine which trend method has been requested + switch ($trendType) { + // Instantiate and return the class for the requested trend method + case self::TREND_LINEAR : + case self::TREND_LOGARITHMIC : + case self::TREND_EXPONENTIAL : + case self::TREND_POWER : + if (!isset(self::$_trendCache[$key])) { + $className = 'PHPExcel_'.$trendType.'_Best_Fit'; + self::$_trendCache[$key] = new $className($yValues,$xValues,$const); + } + return self::$_trendCache[$key]; + break; + case self::TREND_POLYNOMIAL_2 : + case self::TREND_POLYNOMIAL_3 : + case self::TREND_POLYNOMIAL_4 : + case self::TREND_POLYNOMIAL_5 : + case self::TREND_POLYNOMIAL_6 : + if (!isset(self::$_trendCache[$key])) { + $order = substr($trendType,-1); + self::$_trendCache[$key] = new PHPExcel_Polynomial_Best_Fit($order,$yValues,$xValues,$const); + } + return self::$_trendCache[$key]; + break; + case self::TREND_BEST_FIT : + case self::TREND_BEST_FIT_NO_POLY : + // If the request is to determine the best fit regression, then we test each trend line in turn + // Start by generating an instance of each available trend method + foreach(self::$_trendTypes as $trendMethod) { + $className = 'PHPExcel_'.$trendMethod.'BestFit'; + $bestFit[$trendMethod] = new $className($yValues,$xValues,$const); + $bestFitValue[$trendMethod] = $bestFit[$trendMethod]->getGoodnessOfFit(); + } + if ($trendType != self::TREND_BEST_FIT_NO_POLY) { + foreach(self::$_trendTypePolyOrders as $trendMethod) { + $order = substr($trendMethod,-1); + $bestFit[$trendMethod] = new PHPExcel_Polynomial_Best_Fit($order,$yValues,$xValues,$const); + if ($bestFit[$trendMethod]->getError()) { + unset($bestFit[$trendMethod]); + } else { + $bestFitValue[$trendMethod] = $bestFit[$trendMethod]->getGoodnessOfFit(); + } + } + } + // Determine which of our trend lines is the best fit, and then we return the instance of that trend class + arsort($bestFitValue); + $bestFitType = key($bestFitValue); + return $bestFit[$bestFitType]; + break; + default : + return false; + } + } // function calculate() + +} // class trendClass \ No newline at end of file diff --git a/PHPExcel/Style.php b/PHPExcel/Style.php new file mode 100644 index 0000000..715ae11 --- /dev/null +++ b/PHPExcel/Style.php @@ -0,0 +1,668 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /** + * Font + * + * @var PHPExcel_Style_Font + */ + protected $_font; + + /** + * Fill + * + * @var PHPExcel_Style_Fill + */ + protected $_fill; + + /** + * Borders + * + * @var PHPExcel_Style_Borders + */ + protected $_borders; + + /** + * Alignment + * + * @var PHPExcel_Style_Alignment + */ + protected $_alignment; + + /** + * Number Format + * + * @var PHPExcel_Style_NumberFormat + */ + protected $_numberFormat; + + /** + * Conditional styles + * + * @var PHPExcel_Style_Conditional[] + */ + protected $_conditionalStyles; + + /** + * Protection + * + * @var PHPExcel_Style_Protection + */ + protected $_protection; + + /** + * Index of style in collection. Only used for real style. + * + * @var int + */ + protected $_index; + + /** + * Use Quote Prefix when displaying in cell editor. Only used for real style. + * + * @var boolean + */ + protected $_quotePrefix = false; + + /** + * Create a new PHPExcel_Style + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = false, $isConditional = false) + { + // Supervisor? + $this->_isSupervisor = $isSupervisor; + + // Initialise values + $this->_conditionalStyles = array(); + $this->_font = new PHPExcel_Style_Font($isSupervisor, $isConditional); + $this->_fill = new PHPExcel_Style_Fill($isSupervisor, $isConditional); + $this->_borders = new PHPExcel_Style_Borders($isSupervisor, $isConditional); + $this->_alignment = new PHPExcel_Style_Alignment($isSupervisor, $isConditional); + $this->_numberFormat = new PHPExcel_Style_NumberFormat($isSupervisor, $isConditional); + $this->_protection = new PHPExcel_Style_Protection($isSupervisor, $isConditional); + + // bind parent if we are a supervisor + if ($isSupervisor) { + $this->_font->bindParent($this); + $this->_fill->bindParent($this); + $this->_borders->bindParent($this); + $this->_alignment->bindParent($this); + $this->_numberFormat->bindParent($this); + $this->_protection->bindParent($this); + } + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style + */ + public function getSharedComponent() + { + $activeSheet = $this->getActiveSheet(); + $selectedCell = $this->getActiveCell(); // e.g. 'A1' + + if ($activeSheet->cellExists($selectedCell)) { + $xfIndex = $activeSheet->getCell($selectedCell)->getXfIndex(); + } else { + $xfIndex = 0; + } + + return $this->_parent->getCellXfByIndex($xfIndex); + } + + /** + * Get parent. Only used for style supervisor + * + * @return PHPExcel + */ + public function getParent() + { + return $this->_parent; + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + return array('quotePrefix' => $array); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->applyFromArray( + * array( + * 'font' => array( + * 'name' => 'Arial', + * 'bold' => true, + * 'italic' => false, + * 'underline' => PHPExcel_Style_Font::UNDERLINE_DOUBLE, + * 'strike' => false, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ), + * 'borders' => array( + * 'bottom' => array( + * 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ), + * 'top' => array( + * 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ) + * ), + * 'quotePrefix' => true + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @param boolean $pAdvanced Advanced mode for setting borders. + * @throws PHPExcel_Exception + * @return PHPExcel_Style + */ + public function applyFromArray($pStyles = null, $pAdvanced = true) + { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + + $pRange = $this->getSelectedCells(); + + // Uppercase coordinate + $pRange = strtoupper($pRange); + + // Is it a cell range or a single cell? + if (strpos($pRange, ':') === false) { + $rangeA = $pRange; + $rangeB = $pRange; + } else { + list($rangeA, $rangeB) = explode(':', $pRange); + } + + // Calculate range outer borders + $rangeStart = PHPExcel_Cell::coordinateFromString($rangeA); + $rangeEnd = PHPExcel_Cell::coordinateFromString($rangeB); + + // Translate column into index + $rangeStart[0] = PHPExcel_Cell::columnIndexFromString($rangeStart[0]) - 1; + $rangeEnd[0] = PHPExcel_Cell::columnIndexFromString($rangeEnd[0]) - 1; + + // Make sure we can loop upwards on rows and columns + if ($rangeStart[0] > $rangeEnd[0] && $rangeStart[1] > $rangeEnd[1]) { + $tmp = $rangeStart; + $rangeStart = $rangeEnd; + $rangeEnd = $tmp; + } + + // ADVANCED MODE: + + if ($pAdvanced && isset($pStyles['borders'])) { + + // 'allborders' is a shorthand property for 'outline' and 'inside' and + // it applies to components that have not been set explicitly + if (isset($pStyles['borders']['allborders'])) { + foreach (array('outline', 'inside') as $component) { + if (!isset($pStyles['borders'][$component])) { + $pStyles['borders'][$component] = $pStyles['borders']['allborders']; + } + } + unset($pStyles['borders']['allborders']); // not needed any more + } + + // 'outline' is a shorthand property for 'top', 'right', 'bottom', 'left' + // it applies to components that have not been set explicitly + if (isset($pStyles['borders']['outline'])) { + foreach (array('top', 'right', 'bottom', 'left') as $component) { + if (!isset($pStyles['borders'][$component])) { + $pStyles['borders'][$component] = $pStyles['borders']['outline']; + } + } + unset($pStyles['borders']['outline']); // not needed any more + } + + // 'inside' is a shorthand property for 'vertical' and 'horizontal' + // it applies to components that have not been set explicitly + if (isset($pStyles['borders']['inside'])) { + foreach (array('vertical', 'horizontal') as $component) { + if (!isset($pStyles['borders'][$component])) { + $pStyles['borders'][$component] = $pStyles['borders']['inside']; + } + } + unset($pStyles['borders']['inside']); // not needed any more + } + + // width and height characteristics of selection, 1, 2, or 3 (for 3 or more) + $xMax = min($rangeEnd[0] - $rangeStart[0] + 1, 3); + $yMax = min($rangeEnd[1] - $rangeStart[1] + 1, 3); + + // loop through up to 3 x 3 = 9 regions + for ($x = 1; $x <= $xMax; ++$x) { + // start column index for region + $colStart = ($x == 3) ? + PHPExcel_Cell::stringFromColumnIndex($rangeEnd[0]) + : PHPExcel_Cell::stringFromColumnIndex($rangeStart[0] + $x - 1); + + // end column index for region + $colEnd = ($x == 1) ? + PHPExcel_Cell::stringFromColumnIndex($rangeStart[0]) + : PHPExcel_Cell::stringFromColumnIndex($rangeEnd[0] - $xMax + $x); + + for ($y = 1; $y <= $yMax; ++$y) { + + // which edges are touching the region + $edges = array(); + + // are we at left edge + if ($x == 1) { + $edges[] = 'left'; + } + + // are we at right edge + if ($x == $xMax) { + $edges[] = 'right'; + } + + // are we at top edge? + if ($y == 1) { + $edges[] = 'top'; + } + + // are we at bottom edge? + if ($y == $yMax) { + $edges[] = 'bottom'; + } + + // start row index for region + $rowStart = ($y == 3) ? + $rangeEnd[1] : $rangeStart[1] + $y - 1; + + // end row index for region + $rowEnd = ($y == 1) ? + $rangeStart[1] : $rangeEnd[1] - $yMax + $y; + + // build range for region + $range = $colStart . $rowStart . ':' . $colEnd . $rowEnd; + + // retrieve relevant style array for region + $regionStyles = $pStyles; + unset($regionStyles['borders']['inside']); + + // what are the inner edges of the region when looking at the selection + $innerEdges = array_diff( array('top', 'right', 'bottom', 'left'), $edges ); + + // inner edges that are not touching the region should take the 'inside' border properties if they have been set + foreach ($innerEdges as $innerEdge) { + switch ($innerEdge) { + case 'top': + case 'bottom': + // should pick up 'horizontal' border property if set + if (isset($pStyles['borders']['horizontal'])) { + $regionStyles['borders'][$innerEdge] = $pStyles['borders']['horizontal']; + } else { + unset($regionStyles['borders'][$innerEdge]); + } + break; + case 'left': + case 'right': + // should pick up 'vertical' border property if set + if (isset($pStyles['borders']['vertical'])) { + $regionStyles['borders'][$innerEdge] = $pStyles['borders']['vertical']; + } else { + unset($regionStyles['borders'][$innerEdge]); + } + break; + } + } + + // apply region style to region by calling applyFromArray() in simple mode + $this->getActiveSheet()->getStyle($range)->applyFromArray($regionStyles, false); + } + } + return $this; + } + + // SIMPLE MODE: + + // Selection type, inspect + if (preg_match('/^[A-Z]+1:[A-Z]+1048576$/', $pRange)) { + $selectionType = 'COLUMN'; + } else if (preg_match('/^A[0-9]+:XFD[0-9]+$/', $pRange)) { + $selectionType = 'ROW'; + } else { + $selectionType = 'CELL'; + } + + // First loop through columns, rows, or cells to find out which styles are affected by this operation + switch ($selectionType) { + case 'COLUMN': + $oldXfIndexes = array(); + for ($col = $rangeStart[0]; $col <= $rangeEnd[0]; ++$col) { + $oldXfIndexes[$this->getActiveSheet()->getColumnDimensionByColumn($col)->getXfIndex()] = true; + } + break; + + case 'ROW': + $oldXfIndexes = array(); + for ($row = $rangeStart[1]; $row <= $rangeEnd[1]; ++$row) { + if ($this->getActiveSheet()->getRowDimension($row)->getXfIndex() == null) { + $oldXfIndexes[0] = true; // row without explicit style should be formatted based on default style + } else { + $oldXfIndexes[$this->getActiveSheet()->getRowDimension($row)->getXfIndex()] = true; + } + } + break; + + case 'CELL': + $oldXfIndexes = array(); + for ($col = $rangeStart[0]; $col <= $rangeEnd[0]; ++$col) { + for ($row = $rangeStart[1]; $row <= $rangeEnd[1]; ++$row) { + $oldXfIndexes[$this->getActiveSheet()->getCellByColumnAndRow($col, $row)->getXfIndex()] = true; + } + } + break; + } + + // clone each of the affected styles, apply the style array, and add the new styles to the workbook + $workbook = $this->getActiveSheet()->getParent(); + foreach ($oldXfIndexes as $oldXfIndex => $dummy) { + $style = $workbook->getCellXfByIndex($oldXfIndex); + $newStyle = clone $style; + $newStyle->applyFromArray($pStyles); + + if ($existingStyle = $workbook->getCellXfByHashCode($newStyle->getHashCode())) { + // there is already such cell Xf in our collection + $newXfIndexes[$oldXfIndex] = $existingStyle->getIndex(); + } else { + // we don't have such a cell Xf, need to add + $workbook->addCellXf($newStyle); + $newXfIndexes[$oldXfIndex] = $newStyle->getIndex(); + } + } + + // Loop through columns, rows, or cells again and update the XF index + switch ($selectionType) { + case 'COLUMN': + for ($col = $rangeStart[0]; $col <= $rangeEnd[0]; ++$col) { + $columnDimension = $this->getActiveSheet()->getColumnDimensionByColumn($col); + $oldXfIndex = $columnDimension->getXfIndex(); + $columnDimension->setXfIndex($newXfIndexes[$oldXfIndex]); + } + break; + + case 'ROW': + for ($row = $rangeStart[1]; $row <= $rangeEnd[1]; ++$row) { + $rowDimension = $this->getActiveSheet()->getRowDimension($row); + $oldXfIndex = $rowDimension->getXfIndex() === null ? + 0 : $rowDimension->getXfIndex(); // row without explicit style should be formatted based on default style + $rowDimension->setXfIndex($newXfIndexes[$oldXfIndex]); + } + break; + + case 'CELL': + for ($col = $rangeStart[0]; $col <= $rangeEnd[0]; ++$col) { + for ($row = $rangeStart[1]; $row <= $rangeEnd[1]; ++$row) { + $cell = $this->getActiveSheet()->getCellByColumnAndRow($col, $row); + $oldXfIndex = $cell->getXfIndex(); + $cell->setXfIndex($newXfIndexes[$oldXfIndex]); + } + } + break; + } + + } else { + // not a supervisor, just apply the style array directly on style object + if (array_key_exists('fill', $pStyles)) { + $this->getFill()->applyFromArray($pStyles['fill']); + } + if (array_key_exists('font', $pStyles)) { + $this->getFont()->applyFromArray($pStyles['font']); + } + if (array_key_exists('borders', $pStyles)) { + $this->getBorders()->applyFromArray($pStyles['borders']); + } + if (array_key_exists('alignment', $pStyles)) { + $this->getAlignment()->applyFromArray($pStyles['alignment']); + } + if (array_key_exists('numberformat', $pStyles)) { + $this->getNumberFormat()->applyFromArray($pStyles['numberformat']); + } + if (array_key_exists('protection', $pStyles)) { + $this->getProtection()->applyFromArray($pStyles['protection']); + } + if (array_key_exists('quotePrefix', $pStyles)) { + $this->_quotePrefix = $pStyles['quotePrefix']; + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get Fill + * + * @return PHPExcel_Style_Fill + */ + public function getFill() + { + return $this->_fill; + } + + /** + * Get Font + * + * @return PHPExcel_Style_Font + */ + public function getFont() + { + return $this->_font; + } + + /** + * Set font + * + * @param PHPExcel_Style_Font $font + * @return PHPExcel_Style + */ + public function setFont(PHPExcel_Style_Font $font) + { + $this->_font = $font; + return $this; + } + + /** + * Get Borders + * + * @return PHPExcel_Style_Borders + */ + public function getBorders() + { + return $this->_borders; + } + + /** + * Get Alignment + * + * @return PHPExcel_Style_Alignment + */ + public function getAlignment() + { + return $this->_alignment; + } + + /** + * Get Number Format + * + * @return PHPExcel_Style_NumberFormat + */ + public function getNumberFormat() + { + return $this->_numberFormat; + } + + /** + * Get Conditional Styles. Only used on supervisor. + * + * @return PHPExcel_Style_Conditional[] + */ + public function getConditionalStyles() + { + return $this->getActiveSheet()->getConditionalStyles($this->getActiveCell()); + } + + /** + * Set Conditional Styles. Only used on supervisor. + * + * @param PHPExcel_Style_Conditional[] $pValue Array of condtional styles + * @return PHPExcel_Style + */ + public function setConditionalStyles($pValue = null) + { + if (is_array($pValue)) { + $this->getActiveSheet()->setConditionalStyles($this->getSelectedCells(), $pValue); + } + return $this; + } + + /** + * Get Protection + * + * @return PHPExcel_Style_Protection + */ + public function getProtection() + { + return $this->_protection; + } + + /** + * Get quote prefix + * + * @return boolean + */ + public function getQuotePrefix() + { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getQuotePrefix(); + } + return $this->_quotePrefix; + } + + /** + * Set quote prefix + * + * @param boolean $pValue + */ + public function setQuotePrefix($pValue) + { + if ($pValue == '') { + $pValue = false; + } + if ($this->_isSupervisor) { + $styleArray = array('quotePrefix' => $pValue); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_quotePrefix = (boolean) $pValue; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() + { + $hashConditionals = ''; + foreach ($this->_conditionalStyles as $conditional) { + $hashConditionals .= $conditional->getHashCode(); + } + + return md5( + $this->_fill->getHashCode() + . $this->_font->getHashCode() + . $this->_borders->getHashCode() + . $this->_alignment->getHashCode() + . $this->_numberFormat->getHashCode() + . $hashConditionals + . $this->_protection->getHashCode() + . ($this->_quotePrefix ? 't' : 'f') + . __CLASS__ + ); + } + + /** + * Get own index in style collection + * + * @return int + */ + public function getIndex() + { + return $this->_index; + } + + /** + * Set own index in style collection + * + * @param int $pValue + */ + public function setIndex($pValue) + { + $this->_index = $pValue; + } + +} diff --git a/PHPExcel/Style/Alignment.php b/PHPExcel/Style/Alignment.php new file mode 100644 index 0000000..0d9e076 --- /dev/null +++ b/PHPExcel/Style/Alignment.php @@ -0,0 +1,412 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Alignment + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Alignment extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /* Horizontal alignment styles */ + const HORIZONTAL_GENERAL = 'general'; + const HORIZONTAL_LEFT = 'left'; + const HORIZONTAL_RIGHT = 'right'; + const HORIZONTAL_CENTER = 'center'; + const HORIZONTAL_CENTER_CONTINUOUS = 'centerContinuous'; + const HORIZONTAL_JUSTIFY = 'justify'; + const HORIZONTAL_FILL = 'fill'; + const HORIZONTAL_DISTRIBUTED = 'distributed'; // Excel2007 only + + /* Vertical alignment styles */ + const VERTICAL_BOTTOM = 'bottom'; + const VERTICAL_TOP = 'top'; + const VERTICAL_CENTER = 'center'; + const VERTICAL_JUSTIFY = 'justify'; + const VERTICAL_DISTRIBUTED = 'distributed'; // Excel2007 only + + /** + * Horizontal + * + * @var string + */ + protected $_horizontal = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL; + + /** + * Vertical + * + * @var string + */ + protected $_vertical = PHPExcel_Style_Alignment::VERTICAL_BOTTOM; + + /** + * Text rotation + * + * @var int + */ + protected $_textRotation = 0; + + /** + * Wrap text + * + * @var boolean + */ + protected $_wrapText = FALSE; + + /** + * Shrink to fit + * + * @var boolean + */ + protected $_shrinkToFit = FALSE; + + /** + * Indent - only possible with horizontal alignment left and right + * + * @var int + */ + protected $_indent = 0; + + /** + * Create a new PHPExcel_Style_Alignment + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + if ($isConditional) { + $this->_horizontal = NULL; + $this->_vertical = NULL; + $this->_textRotation = NULL; + } + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_Alignment + */ + public function getSharedComponent() + { + return $this->_parent->getSharedComponent()->getAlignment(); + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + return array('alignment' => $array); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getAlignment()->applyFromArray( + * array( + * 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, + * 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER, + * 'rotation' => 0, + * 'wrap' => TRUE + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Alignment + */ + public function applyFromArray($pStyles = NULL) { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells()) + ->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (isset($pStyles['horizontal'])) { + $this->setHorizontal($pStyles['horizontal']); + } + if (isset($pStyles['vertical'])) { + $this->setVertical($pStyles['vertical']); + } + if (isset($pStyles['rotation'])) { + $this->setTextRotation($pStyles['rotation']); + } + if (isset($pStyles['wrap'])) { + $this->setWrapText($pStyles['wrap']); + } + if (isset($pStyles['shrinkToFit'])) { + $this->setShrinkToFit($pStyles['shrinkToFit']); + } + if (isset($pStyles['indent'])) { + $this->setIndent($pStyles['indent']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get Horizontal + * + * @return string + */ + public function getHorizontal() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHorizontal(); + } + return $this->_horizontal; + } + + /** + * Set Horizontal + * + * @param string $pValue + * @return PHPExcel_Style_Alignment + */ + public function setHorizontal($pValue = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL) { + if ($pValue == '') { + $pValue = PHPExcel_Style_Alignment::HORIZONTAL_GENERAL; + } + + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('horizontal' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } + else { + $this->_horizontal = $pValue; + } + return $this; + } + + /** + * Get Vertical + * + * @return string + */ + public function getVertical() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getVertical(); + } + return $this->_vertical; + } + + /** + * Set Vertical + * + * @param string $pValue + * @return PHPExcel_Style_Alignment + */ + public function setVertical($pValue = PHPExcel_Style_Alignment::VERTICAL_BOTTOM) { + if ($pValue == '') { + $pValue = PHPExcel_Style_Alignment::VERTICAL_BOTTOM; + } + + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('vertical' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_vertical = $pValue; + } + return $this; + } + + /** + * Get TextRotation + * + * @return int + */ + public function getTextRotation() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getTextRotation(); + } + return $this->_textRotation; + } + + /** + * Set TextRotation + * + * @param int $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Alignment + */ + public function setTextRotation($pValue = 0) { + // Excel2007 value 255 => PHPExcel value -165 + if ($pValue == 255) { + $pValue = -165; + } + + // Set rotation + if ( ($pValue >= -90 && $pValue <= 90) || $pValue == -165 ) { + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('rotation' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_textRotation = $pValue; + } + } else { + throw new PHPExcel_Exception("Text rotation should be a value between -90 and 90."); + } + + return $this; + } + + /** + * Get Wrap Text + * + * @return boolean + */ + public function getWrapText() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getWrapText(); + } + return $this->_wrapText; + } + + /** + * Set Wrap Text + * + * @param boolean $pValue + * @return PHPExcel_Style_Alignment + */ + public function setWrapText($pValue = FALSE) { + if ($pValue == '') { + $pValue = FALSE; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('wrap' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_wrapText = $pValue; + } + return $this; + } + + /** + * Get Shrink to fit + * + * @return boolean + */ + public function getShrinkToFit() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getShrinkToFit(); + } + return $this->_shrinkToFit; + } + + /** + * Set Shrink to fit + * + * @param boolean $pValue + * @return PHPExcel_Style_Alignment + */ + public function setShrinkToFit($pValue = FALSE) { + if ($pValue == '') { + $pValue = FALSE; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('shrinkToFit' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_shrinkToFit = $pValue; + } + return $this; + } + + /** + * Get indent + * + * @return int + */ + public function getIndent() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getIndent(); + } + return $this->_indent; + } + + /** + * Set indent + * + * @param int $pValue + * @return PHPExcel_Style_Alignment + */ + public function setIndent($pValue = 0) { + if ($pValue > 0) { + if ($this->getHorizontal() != self::HORIZONTAL_GENERAL && + $this->getHorizontal() != self::HORIZONTAL_LEFT && + $this->getHorizontal() != self::HORIZONTAL_RIGHT) { + $pValue = 0; // indent not supported + } + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('indent' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_indent = $pValue; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashCode(); + } + return md5( + $this->_horizontal + . $this->_vertical + . $this->_textRotation + . ($this->_wrapText ? 't' : 'f') + . ($this->_shrinkToFit ? 't' : 'f') + . $this->_indent + . __CLASS__ + ); + } + +} diff --git a/PHPExcel/Style/Border.php b/PHPExcel/Style/Border.php new file mode 100644 index 0000000..3b7eba9 --- /dev/null +++ b/PHPExcel/Style/Border.php @@ -0,0 +1,294 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Border + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Border extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /* Border style */ + const BORDER_NONE = 'none'; + const BORDER_DASHDOT = 'dashDot'; + const BORDER_DASHDOTDOT = 'dashDotDot'; + const BORDER_DASHED = 'dashed'; + const BORDER_DOTTED = 'dotted'; + const BORDER_DOUBLE = 'double'; + const BORDER_HAIR = 'hair'; + const BORDER_MEDIUM = 'medium'; + const BORDER_MEDIUMDASHDOT = 'mediumDashDot'; + const BORDER_MEDIUMDASHDOTDOT = 'mediumDashDotDot'; + const BORDER_MEDIUMDASHED = 'mediumDashed'; + const BORDER_SLANTDASHDOT = 'slantDashDot'; + const BORDER_THICK = 'thick'; + const BORDER_THIN = 'thin'; + + /** + * Border style + * + * @var string + */ + protected $_borderStyle = PHPExcel_Style_Border::BORDER_NONE; + + /** + * Border color + * + * @var PHPExcel_Style_Color + */ + protected $_color; + + /** + * Parent property name + * + * @var string + */ + protected $_parentPropertyName; + + /** + * Create a new PHPExcel_Style_Border + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + // Initialise values + $this->_color = new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_BLACK, $isSupervisor); + + // bind parent if we are a supervisor + if ($isSupervisor) { + $this->_color->bindParent($this, '_color'); + } + } + + /** + * Bind parent. Only used for supervisor + * + * @param PHPExcel_Style_Borders $parent + * @param string $parentPropertyName + * @return PHPExcel_Style_Border + */ + public function bindParent($parent, $parentPropertyName=NULL) + { + $this->_parent = $parent; + $this->_parentPropertyName = $parentPropertyName; + return $this; + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_Border + * @throws PHPExcel_Exception + */ + public function getSharedComponent() + { + switch ($this->_parentPropertyName) { + case '_allBorders': + case '_horizontal': + case '_inside': + case '_outline': + case '_vertical': + throw new PHPExcel_Exception('Cannot get shared component for a pseudo-border.'); + break; + case '_bottom': + return $this->_parent->getSharedComponent()->getBottom(); break; + case '_diagonal': + return $this->_parent->getSharedComponent()->getDiagonal(); break; + case '_left': + return $this->_parent->getSharedComponent()->getLeft(); break; + case '_right': + return $this->_parent->getSharedComponent()->getRight(); break; + case '_top': + return $this->_parent->getSharedComponent()->getTop(); break; + + } + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + switch ($this->_parentPropertyName) { + case '_allBorders': + $key = 'allborders'; break; + case '_bottom': + $key = 'bottom'; break; + case '_diagonal': + $key = 'diagonal'; break; + case '_horizontal': + $key = 'horizontal'; break; + case '_inside': + $key = 'inside'; break; + case '_left': + $key = 'left'; break; + case '_outline': + $key = 'outline'; break; + case '_right': + $key = 'right'; break; + case '_top': + $key = 'top'; break; + case '_vertical': + $key = 'vertical'; break; + } + return $this->_parent->getStyleArray(array($key => $array)); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getTop()->applyFromArray( + * array( + * 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Border + */ + public function applyFromArray($pStyles = null) { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (isset($pStyles['style'])) { + $this->setBorderStyle($pStyles['style']); + } + if (isset($pStyles['color'])) { + $this->getColor()->applyFromArray($pStyles['color']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get Border style + * + * @return string + */ + public function getBorderStyle() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getBorderStyle(); + } + return $this->_borderStyle; + } + + /** + * Set Border style + * + * @param string|boolean $pValue + * When passing a boolean, FALSE equates PHPExcel_Style_Border::BORDER_NONE + * and TRUE to PHPExcel_Style_Border::BORDER_MEDIUM + * @return PHPExcel_Style_Border + */ + public function setBorderStyle($pValue = PHPExcel_Style_Border::BORDER_NONE) { + + if (empty($pValue)) { + $pValue = PHPExcel_Style_Border::BORDER_NONE; + } elseif(is_bool($pValue) && $pValue) { + $pValue = PHPExcel_Style_Border::BORDER_MEDIUM; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('style' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_borderStyle = $pValue; + } + return $this; + } + + /** + * Get Border Color + * + * @return PHPExcel_Style_Color + */ + public function getColor() { + return $this->_color; + } + + /** + * Set Border Color + * + * @param PHPExcel_Style_Color $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Border + */ + public function setColor(PHPExcel_Style_Color $pValue = null) { + // make sure parameter is a real color and not a supervisor + $color = $pValue->getIsSupervisor() ? $pValue->getSharedComponent() : $pValue; + + if ($this->_isSupervisor) { + $styleArray = $this->getColor()->getStyleArray(array('argb' => $color->getARGB())); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_color = $color; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashCode(); + } + return md5( + $this->_borderStyle + . $this->_color->getHashCode() + . __CLASS__ + ); + } + +} diff --git a/PHPExcel/Style/Borders.php b/PHPExcel/Style/Borders.php new file mode 100644 index 0000000..b90838a --- /dev/null +++ b/PHPExcel/Style/Borders.php @@ -0,0 +1,424 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Borders + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Borders extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /* Diagonal directions */ + const DIAGONAL_NONE = 0; + const DIAGONAL_UP = 1; + const DIAGONAL_DOWN = 2; + const DIAGONAL_BOTH = 3; + + /** + * Left + * + * @var PHPExcel_Style_Border + */ + protected $_left; + + /** + * Right + * + * @var PHPExcel_Style_Border + */ + protected $_right; + + /** + * Top + * + * @var PHPExcel_Style_Border + */ + protected $_top; + + /** + * Bottom + * + * @var PHPExcel_Style_Border + */ + protected $_bottom; + + /** + * Diagonal + * + * @var PHPExcel_Style_Border + */ + protected $_diagonal; + + /** + * DiagonalDirection + * + * @var int + */ + protected $_diagonalDirection; + + /** + * All borders psedo-border. Only applies to supervisor. + * + * @var PHPExcel_Style_Border + */ + protected $_allBorders; + + /** + * Outline psedo-border. Only applies to supervisor. + * + * @var PHPExcel_Style_Border + */ + protected $_outline; + + /** + * Inside psedo-border. Only applies to supervisor. + * + * @var PHPExcel_Style_Border + */ + protected $_inside; + + /** + * Vertical pseudo-border. Only applies to supervisor. + * + * @var PHPExcel_Style_Border + */ + protected $_vertical; + + /** + * Horizontal pseudo-border. Only applies to supervisor. + * + * @var PHPExcel_Style_Border + */ + protected $_horizontal; + + /** + * Create a new PHPExcel_Style_Borders + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + // Initialise values + $this->_left = new PHPExcel_Style_Border($isSupervisor, $isConditional); + $this->_right = new PHPExcel_Style_Border($isSupervisor, $isConditional); + $this->_top = new PHPExcel_Style_Border($isSupervisor, $isConditional); + $this->_bottom = new PHPExcel_Style_Border($isSupervisor, $isConditional); + $this->_diagonal = new PHPExcel_Style_Border($isSupervisor, $isConditional); + $this->_diagonalDirection = PHPExcel_Style_Borders::DIAGONAL_NONE; + + // Specially for supervisor + if ($isSupervisor) { + // Initialize pseudo-borders + $this->_allBorders = new PHPExcel_Style_Border(TRUE); + $this->_outline = new PHPExcel_Style_Border(TRUE); + $this->_inside = new PHPExcel_Style_Border(TRUE); + $this->_vertical = new PHPExcel_Style_Border(TRUE); + $this->_horizontal = new PHPExcel_Style_Border(TRUE); + + // bind parent if we are a supervisor + $this->_left->bindParent($this, '_left'); + $this->_right->bindParent($this, '_right'); + $this->_top->bindParent($this, '_top'); + $this->_bottom->bindParent($this, '_bottom'); + $this->_diagonal->bindParent($this, '_diagonal'); + $this->_allBorders->bindParent($this, '_allBorders'); + $this->_outline->bindParent($this, '_outline'); + $this->_inside->bindParent($this, '_inside'); + $this->_vertical->bindParent($this, '_vertical'); + $this->_horizontal->bindParent($this, '_horizontal'); + } + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_Borders + */ + public function getSharedComponent() + { + return $this->_parent->getSharedComponent()->getBorders(); + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + return array('borders' => $array); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->applyFromArray( + * array( + * 'bottom' => array( + * 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ), + * 'top' => array( + * 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ) + * ) + * ); + * </code> + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->applyFromArray( + * array( + * 'allborders' => array( + * 'style' => PHPExcel_Style_Border::BORDER_DASHDOT, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ) + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Borders + */ + public function applyFromArray($pStyles = null) { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (array_key_exists('left', $pStyles)) { + $this->getLeft()->applyFromArray($pStyles['left']); + } + if (array_key_exists('right', $pStyles)) { + $this->getRight()->applyFromArray($pStyles['right']); + } + if (array_key_exists('top', $pStyles)) { + $this->getTop()->applyFromArray($pStyles['top']); + } + if (array_key_exists('bottom', $pStyles)) { + $this->getBottom()->applyFromArray($pStyles['bottom']); + } + if (array_key_exists('diagonal', $pStyles)) { + $this->getDiagonal()->applyFromArray($pStyles['diagonal']); + } + if (array_key_exists('diagonaldirection', $pStyles)) { + $this->setDiagonalDirection($pStyles['diagonaldirection']); + } + if (array_key_exists('allborders', $pStyles)) { + $this->getLeft()->applyFromArray($pStyles['allborders']); + $this->getRight()->applyFromArray($pStyles['allborders']); + $this->getTop()->applyFromArray($pStyles['allborders']); + $this->getBottom()->applyFromArray($pStyles['allborders']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get Left + * + * @return PHPExcel_Style_Border + */ + public function getLeft() { + return $this->_left; + } + + /** + * Get Right + * + * @return PHPExcel_Style_Border + */ + public function getRight() { + return $this->_right; + } + + /** + * Get Top + * + * @return PHPExcel_Style_Border + */ + public function getTop() { + return $this->_top; + } + + /** + * Get Bottom + * + * @return PHPExcel_Style_Border + */ + public function getBottom() { + return $this->_bottom; + } + + /** + * Get Diagonal + * + * @return PHPExcel_Style_Border + */ + public function getDiagonal() { + return $this->_diagonal; + } + + /** + * Get AllBorders (pseudo-border). Only applies to supervisor. + * + * @return PHPExcel_Style_Border + * @throws PHPExcel_Exception + */ + public function getAllBorders() { + if (!$this->_isSupervisor) { + throw new PHPExcel_Exception('Can only get pseudo-border for supervisor.'); + } + return $this->_allBorders; + } + + /** + * Get Outline (pseudo-border). Only applies to supervisor. + * + * @return boolean + * @throws PHPExcel_Exception + */ + public function getOutline() { + if (!$this->_isSupervisor) { + throw new PHPExcel_Exception('Can only get pseudo-border for supervisor.'); + } + return $this->_outline; + } + + /** + * Get Inside (pseudo-border). Only applies to supervisor. + * + * @return boolean + * @throws PHPExcel_Exception + */ + public function getInside() { + if (!$this->_isSupervisor) { + throw new PHPExcel_Exception('Can only get pseudo-border for supervisor.'); + } + return $this->_inside; + } + + /** + * Get Vertical (pseudo-border). Only applies to supervisor. + * + * @return PHPExcel_Style_Border + * @throws PHPExcel_Exception + */ + public function getVertical() { + if (!$this->_isSupervisor) { + throw new PHPExcel_Exception('Can only get pseudo-border for supervisor.'); + } + return $this->_vertical; + } + + /** + * Get Horizontal (pseudo-border). Only applies to supervisor. + * + * @return PHPExcel_Style_Border + * @throws PHPExcel_Exception + */ + public function getHorizontal() { + if (!$this->_isSupervisor) { + throw new PHPExcel_Exception('Can only get pseudo-border for supervisor.'); + } + return $this->_horizontal; + } + + /** + * Get DiagonalDirection + * + * @return int + */ + public function getDiagonalDirection() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getDiagonalDirection(); + } + return $this->_diagonalDirection; + } + + /** + * Set DiagonalDirection + * + * @param int $pValue + * @return PHPExcel_Style_Borders + */ + public function setDiagonalDirection($pValue = PHPExcel_Style_Borders::DIAGONAL_NONE) { + if ($pValue == '') { + $pValue = PHPExcel_Style_Borders::DIAGONAL_NONE; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('diagonaldirection' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_diagonalDirection = $pValue; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashcode(); + } + return md5( + $this->getLeft()->getHashCode() + . $this->getRight()->getHashCode() + . $this->getTop()->getHashCode() + . $this->getBottom()->getHashCode() + . $this->getDiagonal()->getHashCode() + . $this->getDiagonalDirection() + . __CLASS__ + ); + } + +} diff --git a/PHPExcel/Style/Color.php b/PHPExcel/Style/Color.php new file mode 100644 index 0000000..4d34504 --- /dev/null +++ b/PHPExcel/Style/Color.php @@ -0,0 +1,429 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Color + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Color extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /* Colors */ + const COLOR_BLACK = 'FF000000'; + const COLOR_WHITE = 'FFFFFFFF'; + const COLOR_RED = 'FFFF0000'; + const COLOR_DARKRED = 'FF800000'; + const COLOR_BLUE = 'FF0000FF'; + const COLOR_DARKBLUE = 'FF000080'; + const COLOR_GREEN = 'FF00FF00'; + const COLOR_DARKGREEN = 'FF008000'; + const COLOR_YELLOW = 'FFFFFF00'; + const COLOR_DARKYELLOW = 'FF808000'; + + /** + * Indexed colors array + * + * @var array + */ + protected static $_indexedColors; + + /** + * ARGB - Alpha RGB + * + * @var string + */ + protected $_argb = NULL; + + /** + * Parent property name + * + * @var string + */ + protected $_parentPropertyName; + + + /** + * Create a new PHPExcel_Style_Color + * + * @param string $pARGB ARGB value for the colour + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($pARGB = PHPExcel_Style_Color::COLOR_BLACK, $isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + // Initialise values + if (!$isConditional) { + $this->_argb = $pARGB; + } + } + + /** + * Bind parent. Only used for supervisor + * + * @param mixed $parent + * @param string $parentPropertyName + * @return PHPExcel_Style_Color + */ + public function bindParent($parent, $parentPropertyName=NULL) + { + $this->_parent = $parent; + $this->_parentPropertyName = $parentPropertyName; + return $this; + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_Color + */ + public function getSharedComponent() + { + switch ($this->_parentPropertyName) { + case '_endColor': + return $this->_parent->getSharedComponent()->getEndColor(); break; + case '_color': + return $this->_parent->getSharedComponent()->getColor(); break; + case '_startColor': + return $this->_parent->getSharedComponent()->getStartColor(); break; + } + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + switch ($this->_parentPropertyName) { + case '_endColor': + $key = 'endcolor'; + break; + case '_color': + $key = 'color'; + break; + case '_startColor': + $key = 'startcolor'; + break; + + } + return $this->_parent->getStyleArray(array($key => $array)); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getFont()->getColor()->applyFromArray( array('rgb' => '808080') ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Color + */ + public function applyFromArray($pStyles = NULL) { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (array_key_exists('rgb', $pStyles)) { + $this->setRGB($pStyles['rgb']); + } + if (array_key_exists('argb', $pStyles)) { + $this->setARGB($pStyles['argb']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get ARGB + * + * @return string + */ + public function getARGB() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getARGB(); + } + return $this->_argb; + } + + /** + * Set ARGB + * + * @param string $pValue + * @return PHPExcel_Style_Color + */ + public function setARGB($pValue = PHPExcel_Style_Color::COLOR_BLACK) { + if ($pValue == '') { + $pValue = PHPExcel_Style_Color::COLOR_BLACK; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('argb' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_argb = $pValue; + } + return $this; + } + + /** + * Get RGB + * + * @return string + */ + public function getRGB() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getRGB(); + } + return substr($this->_argb, 2); + } + + /** + * Set RGB + * + * @param string $pValue RGB value + * @return PHPExcel_Style_Color + */ + public function setRGB($pValue = '000000') { + if ($pValue == '') { + $pValue = '000000'; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('argb' => 'FF' . $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_argb = 'FF' . $pValue; + } + return $this; + } + + /** + * Get a specified colour component of an RGB value + * + * @private + * @param string $RGB The colour as an RGB value (e.g. FF00CCCC or CCDDEE + * @param int $offset Position within the RGB value to extract + * @param boolean $hex Flag indicating whether the component should be returned as a hex or a + * decimal value + * @return string The extracted colour component + */ + private static function _getColourComponent($RGB,$offset,$hex=TRUE) { + $colour = substr($RGB, $offset, 2); + if (!$hex) + $colour = hexdec($colour); + return $colour; + } + + /** + * Get the red colour component of an RGB value + * + * @param string $RGB The colour as an RGB value (e.g. FF00CCCC or CCDDEE + * @param boolean $hex Flag indicating whether the component should be returned as a hex or a + * decimal value + * @return string The red colour component + */ + public static function getRed($RGB,$hex=TRUE) { + return self::_getColourComponent($RGB, strlen($RGB) - 6, $hex); + } + + /** + * Get the green colour component of an RGB value + * + * @param string $RGB The colour as an RGB value (e.g. FF00CCCC or CCDDEE + * @param boolean $hex Flag indicating whether the component should be returned as a hex or a + * decimal value + * @return string The green colour component + */ + public static function getGreen($RGB,$hex=TRUE) { + return self::_getColourComponent($RGB, strlen($RGB) - 4, $hex); + } + + /** + * Get the blue colour component of an RGB value + * + * @param string $RGB The colour as an RGB value (e.g. FF00CCCC or CCDDEE + * @param boolean $hex Flag indicating whether the component should be returned as a hex or a + * decimal value + * @return string The blue colour component + */ + public static function getBlue($RGB,$hex=TRUE) { + return self::_getColourComponent($RGB, strlen($RGB) - 2, $hex); + } + + /** + * Adjust the brightness of a color + * + * @param string $hex The colour as an RGBA or RGB value (e.g. FF00CCCC or CCDDEE) + * @param float $adjustPercentage The percentage by which to adjust the colour as a float from -1 to 1 + * @return string The adjusted colour as an RGBA or RGB value (e.g. FF00CCCC or CCDDEE) + */ + public static function changeBrightness($hex, $adjustPercentage) { + $rgba = (strlen($hex) == 8); + + $red = self::getRed($hex, FALSE); + $green = self::getGreen($hex, FALSE); + $blue = self::getBlue($hex, FALSE); + if ($adjustPercentage > 0) { + $red += (255 - $red) * $adjustPercentage; + $green += (255 - $green) * $adjustPercentage; + $blue += (255 - $blue) * $adjustPercentage; + } else { + $red += $red * $adjustPercentage; + $green += $green * $adjustPercentage; + $blue += $blue * $adjustPercentage; + } + + if ($red < 0) $red = 0; + elseif ($red > 255) $red = 255; + if ($green < 0) $green = 0; + elseif ($green > 255) $green = 255; + if ($blue < 0) $blue = 0; + elseif ($blue > 255) $blue = 255; + + $rgb = strtoupper( str_pad(dechex($red), 2, '0', 0) . + str_pad(dechex($green), 2, '0', 0) . + str_pad(dechex($blue), 2, '0', 0) + ); + return (($rgba) ? 'FF' : '') . $rgb; + } + + /** + * Get indexed color + * + * @param int $pIndex Index entry point into the colour array + * @param boolean $background Flag to indicate whether default background or foreground colour + * should be returned if the indexed colour doesn't exist + * @return PHPExcel_Style_Color + */ + public static function indexedColor($pIndex, $background=FALSE) { + // Clean parameter + $pIndex = intval($pIndex); + + // Indexed colors + if (is_null(self::$_indexedColors)) { + self::$_indexedColors = array( + 1 => 'FF000000', // System Colour #1 - Black + 2 => 'FFFFFFFF', // System Colour #2 - White + 3 => 'FFFF0000', // System Colour #3 - Red + 4 => 'FF00FF00', // System Colour #4 - Green + 5 => 'FF0000FF', // System Colour #5 - Blue + 6 => 'FFFFFF00', // System Colour #6 - Yellow + 7 => 'FFFF00FF', // System Colour #7- Magenta + 8 => 'FF00FFFF', // System Colour #8- Cyan + 9 => 'FF800000', // Standard Colour #9 + 10 => 'FF008000', // Standard Colour #10 + 11 => 'FF000080', // Standard Colour #11 + 12 => 'FF808000', // Standard Colour #12 + 13 => 'FF800080', // Standard Colour #13 + 14 => 'FF008080', // Standard Colour #14 + 15 => 'FFC0C0C0', // Standard Colour #15 + 16 => 'FF808080', // Standard Colour #16 + 17 => 'FF9999FF', // Chart Fill Colour #17 + 18 => 'FF993366', // Chart Fill Colour #18 + 19 => 'FFFFFFCC', // Chart Fill Colour #19 + 20 => 'FFCCFFFF', // Chart Fill Colour #20 + 21 => 'FF660066', // Chart Fill Colour #21 + 22 => 'FFFF8080', // Chart Fill Colour #22 + 23 => 'FF0066CC', // Chart Fill Colour #23 + 24 => 'FFCCCCFF', // Chart Fill Colour #24 + 25 => 'FF000080', // Chart Line Colour #25 + 26 => 'FFFF00FF', // Chart Line Colour #26 + 27 => 'FFFFFF00', // Chart Line Colour #27 + 28 => 'FF00FFFF', // Chart Line Colour #28 + 29 => 'FF800080', // Chart Line Colour #29 + 30 => 'FF800000', // Chart Line Colour #30 + 31 => 'FF008080', // Chart Line Colour #31 + 32 => 'FF0000FF', // Chart Line Colour #32 + 33 => 'FF00CCFF', // Standard Colour #33 + 34 => 'FFCCFFFF', // Standard Colour #34 + 35 => 'FFCCFFCC', // Standard Colour #35 + 36 => 'FFFFFF99', // Standard Colour #36 + 37 => 'FF99CCFF', // Standard Colour #37 + 38 => 'FFFF99CC', // Standard Colour #38 + 39 => 'FFCC99FF', // Standard Colour #39 + 40 => 'FFFFCC99', // Standard Colour #40 + 41 => 'FF3366FF', // Standard Colour #41 + 42 => 'FF33CCCC', // Standard Colour #42 + 43 => 'FF99CC00', // Standard Colour #43 + 44 => 'FFFFCC00', // Standard Colour #44 + 45 => 'FFFF9900', // Standard Colour #45 + 46 => 'FFFF6600', // Standard Colour #46 + 47 => 'FF666699', // Standard Colour #47 + 48 => 'FF969696', // Standard Colour #48 + 49 => 'FF003366', // Standard Colour #49 + 50 => 'FF339966', // Standard Colour #50 + 51 => 'FF003300', // Standard Colour #51 + 52 => 'FF333300', // Standard Colour #52 + 53 => 'FF993300', // Standard Colour #53 + 54 => 'FF993366', // Standard Colour #54 + 55 => 'FF333399', // Standard Colour #55 + 56 => 'FF333333' // Standard Colour #56 + ); + } + + if (array_key_exists($pIndex, self::$_indexedColors)) { + return new PHPExcel_Style_Color(self::$_indexedColors[$pIndex]); + } + + if ($background) { + return new PHPExcel_Style_Color('FFFFFFFF'); + } + return new PHPExcel_Style_Color('FF000000'); + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashCode(); + } + return md5( + $this->_argb + . __CLASS__ + ); + } + +} diff --git a/PHPExcel/Style/Conditional.php b/PHPExcel/Style/Conditional.php new file mode 100644 index 0000000..ffd7a9f --- /dev/null +++ b/PHPExcel/Style/Conditional.php @@ -0,0 +1,277 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Conditional + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Conditional implements PHPExcel_IComparable +{ + /* Condition types */ + const CONDITION_NONE = 'none'; + const CONDITION_CELLIS = 'cellIs'; + const CONDITION_CONTAINSTEXT = 'containsText'; + const CONDITION_EXPRESSION = 'expression'; + + /* Operator types */ + const OPERATOR_NONE = ''; + const OPERATOR_BEGINSWITH = 'beginsWith'; + const OPERATOR_ENDSWITH = 'endsWith'; + const OPERATOR_EQUAL = 'equal'; + const OPERATOR_GREATERTHAN = 'greaterThan'; + const OPERATOR_GREATERTHANOREQUAL = 'greaterThanOrEqual'; + const OPERATOR_LESSTHAN = 'lessThan'; + const OPERATOR_LESSTHANOREQUAL = 'lessThanOrEqual'; + const OPERATOR_NOTEQUAL = 'notEqual'; + const OPERATOR_CONTAINSTEXT = 'containsText'; + const OPERATOR_NOTCONTAINS = 'notContains'; + const OPERATOR_BETWEEN = 'between'; + + /** + * Condition type + * + * @var int + */ + private $_conditionType; + + /** + * Operator type + * + * @var int + */ + private $_operatorType; + + /** + * Text + * + * @var string + */ + private $_text; + + /** + * Condition + * + * @var string[] + */ + private $_condition = array(); + + /** + * Style + * + * @var PHPExcel_Style + */ + private $_style; + + /** + * Create a new PHPExcel_Style_Conditional + */ + public function __construct() + { + // Initialise values + $this->_conditionType = PHPExcel_Style_Conditional::CONDITION_NONE; + $this->_operatorType = PHPExcel_Style_Conditional::OPERATOR_NONE; + $this->_text = null; + $this->_condition = array(); + $this->_style = new PHPExcel_Style(FALSE, TRUE); + } + + /** + * Get Condition type + * + * @return string + */ + public function getConditionType() { + return $this->_conditionType; + } + + /** + * Set Condition type + * + * @param string $pValue PHPExcel_Style_Conditional condition type + * @return PHPExcel_Style_Conditional + */ + public function setConditionType($pValue = PHPExcel_Style_Conditional::CONDITION_NONE) { + $this->_conditionType = $pValue; + return $this; + } + + /** + * Get Operator type + * + * @return string + */ + public function getOperatorType() { + return $this->_operatorType; + } + + /** + * Set Operator type + * + * @param string $pValue PHPExcel_Style_Conditional operator type + * @return PHPExcel_Style_Conditional + */ + public function setOperatorType($pValue = PHPExcel_Style_Conditional::OPERATOR_NONE) { + $this->_operatorType = $pValue; + return $this; + } + + /** + * Get text + * + * @return string + */ + public function getText() { + return $this->_text; + } + + /** + * Set text + * + * @param string $value + * @return PHPExcel_Style_Conditional + */ + public function setText($value = null) { + $this->_text = $value; + return $this; + } + + /** + * Get Condition + * + * @deprecated Deprecated, use getConditions instead + * @return string + */ + public function getCondition() { + if (isset($this->_condition[0])) { + return $this->_condition[0]; + } + + return ''; + } + + /** + * Set Condition + * + * @deprecated Deprecated, use setConditions instead + * @param string $pValue Condition + * @return PHPExcel_Style_Conditional + */ + public function setCondition($pValue = '') { + if (!is_array($pValue)) + $pValue = array($pValue); + + return $this->setConditions($pValue); + } + + /** + * Get Conditions + * + * @return string[] + */ + public function getConditions() { + return $this->_condition; + } + + /** + * Set Conditions + * + * @param string[] $pValue Condition + * @return PHPExcel_Style_Conditional + */ + public function setConditions($pValue) { + if (!is_array($pValue)) + $pValue = array($pValue); + + $this->_condition = $pValue; + return $this; + } + + /** + * Add Condition + * + * @param string $pValue Condition + * @return PHPExcel_Style_Conditional + */ + public function addCondition($pValue = '') { + $this->_condition[] = $pValue; + return $this; + } + + /** + * Get Style + * + * @return PHPExcel_Style + */ + public function getStyle() { + return $this->_style; + } + + /** + * Set Style + * + * @param PHPExcel_Style $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Conditional + */ + public function setStyle(PHPExcel_Style $pValue = null) { + $this->_style = $pValue; + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_conditionType + . $this->_operatorType + . implode(';', $this->_condition) + . $this->_style->getHashCode() + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Style/Fill.php b/PHPExcel/Style/Fill.php new file mode 100644 index 0000000..1b4d0ad --- /dev/null +++ b/PHPExcel/Style/Fill.php @@ -0,0 +1,321 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Fill + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Fill extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /* Fill types */ + const FILL_NONE = 'none'; + const FILL_SOLID = 'solid'; + const FILL_GRADIENT_LINEAR = 'linear'; + const FILL_GRADIENT_PATH = 'path'; + const FILL_PATTERN_DARKDOWN = 'darkDown'; + const FILL_PATTERN_DARKGRAY = 'darkGray'; + const FILL_PATTERN_DARKGRID = 'darkGrid'; + const FILL_PATTERN_DARKHORIZONTAL = 'darkHorizontal'; + const FILL_PATTERN_DARKTRELLIS = 'darkTrellis'; + const FILL_PATTERN_DARKUP = 'darkUp'; + const FILL_PATTERN_DARKVERTICAL = 'darkVertical'; + const FILL_PATTERN_GRAY0625 = 'gray0625'; + const FILL_PATTERN_GRAY125 = 'gray125'; + const FILL_PATTERN_LIGHTDOWN = 'lightDown'; + const FILL_PATTERN_LIGHTGRAY = 'lightGray'; + const FILL_PATTERN_LIGHTGRID = 'lightGrid'; + const FILL_PATTERN_LIGHTHORIZONTAL = 'lightHorizontal'; + const FILL_PATTERN_LIGHTTRELLIS = 'lightTrellis'; + const FILL_PATTERN_LIGHTUP = 'lightUp'; + const FILL_PATTERN_LIGHTVERTICAL = 'lightVertical'; + const FILL_PATTERN_MEDIUMGRAY = 'mediumGray'; + + /** + * Fill type + * + * @var string + */ + protected $_fillType = PHPExcel_Style_Fill::FILL_NONE; + + /** + * Rotation + * + * @var double + */ + protected $_rotation = 0; + + /** + * Start color + * + * @var PHPExcel_Style_Color + */ + protected $_startColor; + + /** + * End color + * + * @var PHPExcel_Style_Color + */ + protected $_endColor; + + /** + * Create a new PHPExcel_Style_Fill + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + // Initialise values + if ($isConditional) { + $this->_fillType = NULL; + } + $this->_startColor = new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_WHITE, $isSupervisor, $isConditional); + $this->_endColor = new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_BLACK, $isSupervisor, $isConditional); + + // bind parent if we are a supervisor + if ($isSupervisor) { + $this->_startColor->bindParent($this, '_startColor'); + $this->_endColor->bindParent($this, '_endColor'); + } + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_Fill + */ + public function getSharedComponent() + { + return $this->_parent->getSharedComponent()->getFill(); + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + return array('fill' => $array); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getFill()->applyFromArray( + * array( + * 'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR, + * 'rotation' => 0, + * 'startcolor' => array( + * 'rgb' => '000000' + * ), + * 'endcolor' => array( + * 'argb' => 'FFFFFFFF' + * ) + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Fill + */ + public function applyFromArray($pStyles = null) { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (array_key_exists('type', $pStyles)) { + $this->setFillType($pStyles['type']); + } + if (array_key_exists('rotation', $pStyles)) { + $this->setRotation($pStyles['rotation']); + } + if (array_key_exists('startcolor', $pStyles)) { + $this->getStartColor()->applyFromArray($pStyles['startcolor']); + } + if (array_key_exists('endcolor', $pStyles)) { + $this->getEndColor()->applyFromArray($pStyles['endcolor']); + } + if (array_key_exists('color', $pStyles)) { + $this->getStartColor()->applyFromArray($pStyles['color']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get Fill Type + * + * @return string + */ + public function getFillType() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getFillType(); + } + return $this->_fillType; + } + + /** + * Set Fill Type + * + * @param string $pValue PHPExcel_Style_Fill fill type + * @return PHPExcel_Style_Fill + */ + public function setFillType($pValue = PHPExcel_Style_Fill::FILL_NONE) { + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('type' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_fillType = $pValue; + } + return $this; + } + + /** + * Get Rotation + * + * @return double + */ + public function getRotation() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getRotation(); + } + return $this->_rotation; + } + + /** + * Set Rotation + * + * @param double $pValue + * @return PHPExcel_Style_Fill + */ + public function setRotation($pValue = 0) { + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('rotation' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_rotation = $pValue; + } + return $this; + } + + /** + * Get Start Color + * + * @return PHPExcel_Style_Color + */ + public function getStartColor() { + return $this->_startColor; + } + + /** + * Set Start Color + * + * @param PHPExcel_Style_Color $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Fill + */ + public function setStartColor(PHPExcel_Style_Color $pValue = null) { + // make sure parameter is a real color and not a supervisor + $color = $pValue->getIsSupervisor() ? $pValue->getSharedComponent() : $pValue; + + if ($this->_isSupervisor) { + $styleArray = $this->getStartColor()->getStyleArray(array('argb' => $color->getARGB())); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_startColor = $color; + } + return $this; + } + + /** + * Get End Color + * + * @return PHPExcel_Style_Color + */ + public function getEndColor() { + return $this->_endColor; + } + + /** + * Set End Color + * + * @param PHPExcel_Style_Color $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Fill + */ + public function setEndColor(PHPExcel_Style_Color $pValue = null) { + // make sure parameter is a real color and not a supervisor + $color = $pValue->getIsSupervisor() ? $pValue->getSharedComponent() : $pValue; + + if ($this->_isSupervisor) { + $styleArray = $this->getEndColor()->getStyleArray(array('argb' => $color->getARGB())); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_endColor = $color; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashCode(); + } + return md5( + $this->getFillType() + . $this->getRotation() + . $this->getStartColor()->getHashCode() + . $this->getEndColor()->getHashCode() + . __CLASS__ + ); + } + +} diff --git a/PHPExcel/Style/Font.php b/PHPExcel/Style/Font.php new file mode 100644 index 0000000..e89488c --- /dev/null +++ b/PHPExcel/Style/Font.php @@ -0,0 +1,532 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Font + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Font extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /* Underline types */ + const UNDERLINE_NONE = 'none'; + const UNDERLINE_DOUBLE = 'double'; + const UNDERLINE_DOUBLEACCOUNTING = 'doubleAccounting'; + const UNDERLINE_SINGLE = 'single'; + const UNDERLINE_SINGLEACCOUNTING = 'singleAccounting'; + + /** + * Font Name + * + * @var string + */ + protected $_name = 'Calibri'; + + /** + * Font Size + * + * @var float + */ + protected $_size = 11; + + /** + * Bold + * + * @var boolean + */ + protected $_bold = FALSE; + + /** + * Italic + * + * @var boolean + */ + protected $_italic = FALSE; + + /** + * Superscript + * + * @var boolean + */ + protected $_superScript = FALSE; + + /** + * Subscript + * + * @var boolean + */ + protected $_subScript = FALSE; + + /** + * Underline + * + * @var string + */ + protected $_underline = self::UNDERLINE_NONE; + + /** + * Strikethrough + * + * @var boolean + */ + protected $_strikethrough = FALSE; + + /** + * Foreground color + * + * @var PHPExcel_Style_Color + */ + protected $_color; + + /** + * Create a new PHPExcel_Style_Font + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + // Initialise values + if ($isConditional) { + $this->_name = NULL; + $this->_size = NULL; + $this->_bold = NULL; + $this->_italic = NULL; + $this->_superScript = NULL; + $this->_subScript = NULL; + $this->_underline = NULL; + $this->_strikethrough = NULL; + $this->_color = new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_BLACK, $isSupervisor, $isConditional); + } else { + $this->_color = new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_BLACK, $isSupervisor); + } + // bind parent if we are a supervisor + if ($isSupervisor) { + $this->_color->bindParent($this, '_color'); + } + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_Font + */ + public function getSharedComponent() + { + return $this->_parent->getSharedComponent()->getFont(); + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + return array('font' => $array); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getFont()->applyFromArray( + * array( + * 'name' => 'Arial', + * 'bold' => TRUE, + * 'italic' => FALSE, + * 'underline' => PHPExcel_Style_Font::UNDERLINE_DOUBLE, + * 'strike' => FALSE, + * 'color' => array( + * 'rgb' => '808080' + * ) + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Font + */ + public function applyFromArray($pStyles = null) { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (array_key_exists('name', $pStyles)) { + $this->setName($pStyles['name']); + } + if (array_key_exists('bold', $pStyles)) { + $this->setBold($pStyles['bold']); + } + if (array_key_exists('italic', $pStyles)) { + $this->setItalic($pStyles['italic']); + } + if (array_key_exists('superScript', $pStyles)) { + $this->setSuperScript($pStyles['superScript']); + } + if (array_key_exists('subScript', $pStyles)) { + $this->setSubScript($pStyles['subScript']); + } + if (array_key_exists('underline', $pStyles)) { + $this->setUnderline($pStyles['underline']); + } + if (array_key_exists('strike', $pStyles)) { + $this->setStrikethrough($pStyles['strike']); + } + if (array_key_exists('color', $pStyles)) { + $this->getColor()->applyFromArray($pStyles['color']); + } + if (array_key_exists('size', $pStyles)) { + $this->setSize($pStyles['size']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get Name + * + * @return string + */ + public function getName() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getName(); + } + return $this->_name; + } + + /** + * Set Name + * + * @param string $pValue + * @return PHPExcel_Style_Font + */ + public function setName($pValue = 'Calibri') { + if ($pValue == '') { + $pValue = 'Calibri'; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('name' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_name = $pValue; + } + return $this; + } + + /** + * Get Size + * + * @return double + */ + public function getSize() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getSize(); + } + return $this->_size; + } + + /** + * Set Size + * + * @param double $pValue + * @return PHPExcel_Style_Font + */ + public function setSize($pValue = 10) { + if ($pValue == '') { + $pValue = 10; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('size' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_size = $pValue; + } + return $this; + } + + /** + * Get Bold + * + * @return boolean + */ + public function getBold() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getBold(); + } + return $this->_bold; + } + + /** + * Set Bold + * + * @param boolean $pValue + * @return PHPExcel_Style_Font + */ + public function setBold($pValue = false) { + if ($pValue == '') { + $pValue = false; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('bold' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_bold = $pValue; + } + return $this; + } + + /** + * Get Italic + * + * @return boolean + */ + public function getItalic() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getItalic(); + } + return $this->_italic; + } + + /** + * Set Italic + * + * @param boolean $pValue + * @return PHPExcel_Style_Font + */ + public function setItalic($pValue = false) { + if ($pValue == '') { + $pValue = false; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('italic' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_italic = $pValue; + } + return $this; + } + + /** + * Get SuperScript + * + * @return boolean + */ + public function getSuperScript() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getSuperScript(); + } + return $this->_superScript; + } + + /** + * Set SuperScript + * + * @param boolean $pValue + * @return PHPExcel_Style_Font + */ + public function setSuperScript($pValue = false) { + if ($pValue == '') { + $pValue = false; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('superScript' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_superScript = $pValue; + $this->_subScript = !$pValue; + } + return $this; + } + + /** + * Get SubScript + * + * @return boolean + */ + public function getSubScript() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getSubScript(); + } + return $this->_subScript; + } + + /** + * Set SubScript + * + * @param boolean $pValue + * @return PHPExcel_Style_Font + */ + public function setSubScript($pValue = false) { + if ($pValue == '') { + $pValue = false; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('subScript' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_subScript = $pValue; + $this->_superScript = !$pValue; + } + return $this; + } + + /** + * Get Underline + * + * @return string + */ + public function getUnderline() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getUnderline(); + } + return $this->_underline; + } + + /** + * Set Underline + * + * @param string|boolean $pValue PHPExcel_Style_Font underline type + * If a boolean is passed, then TRUE equates to UNDERLINE_SINGLE, + * false equates to UNDERLINE_NONE + * @return PHPExcel_Style_Font + */ + public function setUnderline($pValue = self::UNDERLINE_NONE) { + if (is_bool($pValue)) { + $pValue = ($pValue) ? self::UNDERLINE_SINGLE : self::UNDERLINE_NONE; + } elseif ($pValue == '') { + $pValue = self::UNDERLINE_NONE; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('underline' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_underline = $pValue; + } + return $this; + } + + /** + * Get Strikethrough + * + * @return boolean + */ + public function getStrikethrough() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getStrikethrough(); + } + return $this->_strikethrough; + } + + /** + * Set Strikethrough + * + * @param boolean $pValue + * @return PHPExcel_Style_Font + */ + public function setStrikethrough($pValue = false) { + if ($pValue == '') { + $pValue = false; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('strike' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_strikethrough = $pValue; + } + return $this; + } + + /** + * Get Color + * + * @return PHPExcel_Style_Color + */ + public function getColor() { + return $this->_color; + } + + /** + * Set Color + * + * @param PHPExcel_Style_Color $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Font + */ + public function setColor(PHPExcel_Style_Color $pValue = null) { + // make sure parameter is a real color and not a supervisor + $color = $pValue->getIsSupervisor() ? $pValue->getSharedComponent() : $pValue; + + if ($this->_isSupervisor) { + $styleArray = $this->getColor()->getStyleArray(array('argb' => $color->getARGB())); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_color = $color; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashCode(); + } + return md5( + $this->_name + . $this->_size + . ($this->_bold ? 't' : 'f') + . ($this->_italic ? 't' : 'f') + . ($this->_superScript ? 't' : 'f') + . ($this->_subScript ? 't' : 'f') + . $this->_underline + . ($this->_strikethrough ? 't' : 'f') + . $this->_color->getHashCode() + . __CLASS__ + ); + } + +} diff --git a/PHPExcel/Style/NumberFormat.php b/PHPExcel/Style/NumberFormat.php new file mode 100644 index 0000000..e8a978f --- /dev/null +++ b/PHPExcel/Style/NumberFormat.php @@ -0,0 +1,711 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_NumberFormat + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_NumberFormat extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /* Pre-defined formats */ + const FORMAT_GENERAL = 'General'; + + const FORMAT_TEXT = '@'; + + const FORMAT_NUMBER = '0'; + const FORMAT_NUMBER_00 = '0.00'; + const FORMAT_NUMBER_COMMA_SEPARATED1 = '#,##0.00'; + const FORMAT_NUMBER_COMMA_SEPARATED2 = '#,##0.00_-'; + + const FORMAT_PERCENTAGE = '0%'; + const FORMAT_PERCENTAGE_00 = '0.00%'; + + const FORMAT_DATE_YYYYMMDD2 = 'yyyy-mm-dd'; + const FORMAT_DATE_YYYYMMDD = 'yy-mm-dd'; + const FORMAT_DATE_DDMMYYYY = 'dd/mm/yy'; + const FORMAT_DATE_DMYSLASH = 'd/m/y'; + const FORMAT_DATE_DMYMINUS = 'd-m-y'; + const FORMAT_DATE_DMMINUS = 'd-m'; + const FORMAT_DATE_MYMINUS = 'm-y'; + const FORMAT_DATE_XLSX14 = 'mm-dd-yy'; + const FORMAT_DATE_XLSX15 = 'd-mmm-yy'; + const FORMAT_DATE_XLSX16 = 'd-mmm'; + const FORMAT_DATE_XLSX17 = 'mmm-yy'; + const FORMAT_DATE_XLSX22 = 'm/d/yy h:mm'; + const FORMAT_DATE_DATETIME = 'd/m/y h:mm'; + const FORMAT_DATE_TIME1 = 'h:mm AM/PM'; + const FORMAT_DATE_TIME2 = 'h:mm:ss AM/PM'; + const FORMAT_DATE_TIME3 = 'h:mm'; + const FORMAT_DATE_TIME4 = 'h:mm:ss'; + const FORMAT_DATE_TIME5 = 'mm:ss'; + const FORMAT_DATE_TIME6 = 'h:mm:ss'; + const FORMAT_DATE_TIME7 = 'i:s.S'; + const FORMAT_DATE_TIME8 = 'h:mm:ss;@'; + const FORMAT_DATE_YYYYMMDDSLASH = 'yy/mm/dd;@'; + + const FORMAT_CURRENCY_USD_SIMPLE = '"$"#,##0.00_-'; + const FORMAT_CURRENCY_USD = '$#,##0_-'; + const FORMAT_CURRENCY_EUR_SIMPLE = '[$EUR ]#,##0.00_-'; + + /** + * Excel built-in number formats + * + * @var array + */ + protected static $_builtInFormats; + + /** + * Excel built-in number formats (flipped, for faster lookups) + * + * @var array + */ + protected static $_flippedBuiltInFormats; + + /** + * Format Code + * + * @var string + */ + protected $_formatCode = PHPExcel_Style_NumberFormat::FORMAT_GENERAL; + + /** + * Built-in format Code + * + * @var string + */ + protected $_builtInFormatCode = 0; + + /** + * Create a new PHPExcel_Style_NumberFormat + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + if ($isConditional) { + $this->_formatCode = NULL; + } + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_NumberFormat + */ + public function getSharedComponent() + { + return $this->_parent->getSharedComponent()->getNumberFormat(); + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + return array('numberformat' => $array); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getNumberFormat()->applyFromArray( + * array( + * 'code' => PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_NumberFormat + */ + public function applyFromArray($pStyles = null) + { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (array_key_exists('code', $pStyles)) { + $this->setFormatCode($pStyles['code']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get Format Code + * + * @return string + */ + public function getFormatCode() + { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getFormatCode(); + } + if ($this->_builtInFormatCode !== false) + { + return self::builtInFormatCode($this->_builtInFormatCode); + } + return $this->_formatCode; + } + + /** + * Set Format Code + * + * @param string $pValue + * @return PHPExcel_Style_NumberFormat + */ + public function setFormatCode($pValue = PHPExcel_Style_NumberFormat::FORMAT_GENERAL) + { + if ($pValue == '') { + $pValue = PHPExcel_Style_NumberFormat::FORMAT_GENERAL; + } + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('code' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_formatCode = $pValue; + $this->_builtInFormatCode = self::builtInFormatCodeIndex($pValue); + } + return $this; + } + + /** + * Get Built-In Format Code + * + * @return int + */ + public function getBuiltInFormatCode() + { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getBuiltInFormatCode(); + } + return $this->_builtInFormatCode; + } + + /** + * Set Built-In Format Code + * + * @param int $pValue + * @return PHPExcel_Style_NumberFormat + */ + public function setBuiltInFormatCode($pValue = 0) + { + + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('code' => self::builtInFormatCode($pValue))); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_builtInFormatCode = $pValue; + $this->_formatCode = self::builtInFormatCode($pValue); + } + return $this; + } + + /** + * Fill built-in format codes + */ + private static function fillBuiltInFormatCodes() + { + // Built-in format codes + if (is_null(self::$_builtInFormats)) { + self::$_builtInFormats = array(); + + // General + self::$_builtInFormats[0] = PHPExcel_Style_NumberFormat::FORMAT_GENERAL; + self::$_builtInFormats[1] = '0'; + self::$_builtInFormats[2] = '0.00'; + self::$_builtInFormats[3] = '#,##0'; + self::$_builtInFormats[4] = '#,##0.00'; + + self::$_builtInFormats[9] = '0%'; + self::$_builtInFormats[10] = '0.00%'; + self::$_builtInFormats[11] = '0.00E+00'; + self::$_builtInFormats[12] = '# ?/?'; + self::$_builtInFormats[13] = '# ??/??'; + self::$_builtInFormats[14] = 'mm-dd-yy'; + self::$_builtInFormats[15] = 'd-mmm-yy'; + self::$_builtInFormats[16] = 'd-mmm'; + self::$_builtInFormats[17] = 'mmm-yy'; + self::$_builtInFormats[18] = 'h:mm AM/PM'; + self::$_builtInFormats[19] = 'h:mm:ss AM/PM'; + self::$_builtInFormats[20] = 'h:mm'; + self::$_builtInFormats[21] = 'h:mm:ss'; + self::$_builtInFormats[22] = 'm/d/yy h:mm'; + + self::$_builtInFormats[37] = '#,##0 ;(#,##0)'; + self::$_builtInFormats[38] = '#,##0 ;[Red](#,##0)'; + self::$_builtInFormats[39] = '#,##0.00;(#,##0.00)'; + self::$_builtInFormats[40] = '#,##0.00;[Red](#,##0.00)'; + + self::$_builtInFormats[44] = '_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)'; + self::$_builtInFormats[45] = 'mm:ss'; + self::$_builtInFormats[46] = '[h]:mm:ss'; + self::$_builtInFormats[47] = 'mmss.0'; + self::$_builtInFormats[48] = '##0.0E+0'; + self::$_builtInFormats[49] = '@'; + + // CHT + self::$_builtInFormats[27] = '[$-404]e/m/d'; + self::$_builtInFormats[30] = 'm/d/yy'; + self::$_builtInFormats[36] = '[$-404]e/m/d'; + self::$_builtInFormats[50] = '[$-404]e/m/d'; + self::$_builtInFormats[57] = '[$-404]e/m/d'; + + // THA + self::$_builtInFormats[59] = 't0'; + self::$_builtInFormats[60] = 't0.00'; + self::$_builtInFormats[61] = 't#,##0'; + self::$_builtInFormats[62] = 't#,##0.00'; + self::$_builtInFormats[67] = 't0%'; + self::$_builtInFormats[68] = 't0.00%'; + self::$_builtInFormats[69] = 't# ?/?'; + self::$_builtInFormats[70] = 't# ??/??'; + + // Flip array (for faster lookups) + self::$_flippedBuiltInFormats = array_flip(self::$_builtInFormats); + } + } + + /** + * Get built-in format code + * + * @param int $pIndex + * @return string + */ + public static function builtInFormatCode($pIndex) + { + // Clean parameter + $pIndex = intval($pIndex); + + // Ensure built-in format codes are available + self::fillBuiltInFormatCodes(); + + // Lookup format code + if (isset(self::$_builtInFormats[$pIndex])) { + return self::$_builtInFormats[$pIndex]; + } + + return ''; + } + + /** + * Get built-in format code index + * + * @param string $formatCode + * @return int|boolean + */ + public static function builtInFormatCodeIndex($formatCode) + { + // Ensure built-in format codes are available + self::fillBuiltInFormatCodes(); + + // Lookup format code + if (isset(self::$_flippedBuiltInFormats[$formatCode])) { + return self::$_flippedBuiltInFormats[$formatCode]; + } + + return false; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() + { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashCode(); + } + return md5( + $this->_formatCode + . $this->_builtInFormatCode + . __CLASS__ + ); + } + + /** + * Search/replace values to convert Excel date/time format masks to PHP format masks + * + * @var array + */ + private static $_dateFormatReplacements = array( + // first remove escapes related to non-format characters + '\\' => '', + // 12-hour suffix + 'am/pm' => 'A', + // 4-digit year + 'e' => 'Y', + 'yyyy' => 'Y', + // 2-digit year + 'yy' => 'y', + // first letter of month - no php equivalent + 'mmmmm' => 'M', + // full month name + 'mmmm' => 'F', + // short month name + 'mmm' => 'M', + // mm is minutes if time, but can also be month w/leading zero + // so we try to identify times be the inclusion of a : separator in the mask + // It isn't perfect, but the best way I know how + ':mm' => ':i', + 'mm:' => 'i:', + // month leading zero + 'mm' => 'm', + // month no leading zero + 'm' => 'n', + // full day of week name + 'dddd' => 'l', + // short day of week name + 'ddd' => 'D', + // days leading zero + 'dd' => 'd', + // days no leading zero + 'd' => 'j', + // seconds + 'ss' => 's', + // fractional seconds - no php equivalent + '.s' => '' + ); + /** + * Search/replace values to convert Excel date/time format masks hours to PHP format masks (24 hr clock) + * + * @var array + */ + private static $_dateFormatReplacements24 = array( + 'hh' => 'H', + 'h' => 'G' + ); + /** + * Search/replace values to convert Excel date/time format masks hours to PHP format masks (12 hr clock) + * + * @var array + */ + private static $_dateFormatReplacements12 = array( + 'hh' => 'h', + 'h' => 'g' + ); + + private static function _formatAsDate(&$value, &$format) + { + // dvc: convert Excel formats to PHP date formats + + // strip off first part containing e.g. [$-F800] or [$USD-409] + // general syntax: [$<Currency string>-<language info>] + // language info is in hexadecimal + $format = preg_replace('/^(\[\$[A-Z]*-[0-9A-F]*\])/i', '', $format); + + // OpenOffice.org uses upper-case number formats, e.g. 'YYYY', convert to lower-case + $format = strtolower($format); + + $format = strtr($format,self::$_dateFormatReplacements); + if (!strpos($format,'A')) { // 24-hour time format + $format = strtr($format,self::$_dateFormatReplacements24); + } else { // 12-hour time format + $format = strtr($format,self::$_dateFormatReplacements12); + } + + $dateObj = PHPExcel_Shared_Date::ExcelToPHPObject($value); + $value = $dateObj->format($format); + } + + private static function _formatAsPercentage(&$value, &$format) + { + if ($format === self::FORMAT_PERCENTAGE) { + $value = round( (100 * $value), 0) . '%'; + } else { + if (preg_match('/\.[#0]+/i', $format, $m)) { + $s = substr($m[0], 0, 1) . (strlen($m[0]) - 1); + $format = str_replace($m[0], $s, $format); + } + if (preg_match('/^[#0]+/', $format, $m)) { + $format = str_replace($m[0], strlen($m[0]), $format); + } + $format = '%' . str_replace('%', 'f%%', $format); + + $value = sprintf($format, 100 * $value); + } + } + + private static function _formatAsFraction(&$value, &$format) + { + $sign = ($value < 0) ? '-' : ''; + + $integerPart = floor(abs($value)); + $decimalPart = trim(fmod(abs($value),1),'0.'); + $decimalLength = strlen($decimalPart); + $decimalDivisor = pow(10,$decimalLength); + + $GCD = PHPExcel_Calculation_MathTrig::GCD($decimalPart,$decimalDivisor); + + $adjustedDecimalPart = $decimalPart/$GCD; + $adjustedDecimalDivisor = $decimalDivisor/$GCD; + + if ((strpos($format,'0') !== false) || (strpos($format,'#') !== false) || (substr($format,0,3) == '? ?')) { + if ($integerPart == 0) { + $integerPart = ''; + } + $value = "$sign$integerPart $adjustedDecimalPart/$adjustedDecimalDivisor"; + } else { + $adjustedDecimalPart += $integerPart * $adjustedDecimalDivisor; + $value = "$sign$adjustedDecimalPart/$adjustedDecimalDivisor"; + } + } + + private static function _complexNumberFormatMask($number, $mask) { + if (strpos($mask,'.') !== false) { + $numbers = explode('.', $number . '.0'); + $masks = explode('.', $mask . '.0'); + $result1 = self::_complexNumberFormatMask($numbers[0], $masks[0]); + $result2 = strrev(self::_complexNumberFormatMask(strrev($numbers[1]), strrev($masks[1]))); + return $result1 . '.' . $result2; + } + + $r = preg_match_all('/0+/', $mask, $result, PREG_OFFSET_CAPTURE); + if ($r > 1) { + $result = array_reverse($result[0]); + + foreach($result as $block) { + $divisor = 1 . $block[0]; + $size = strlen($block[0]); + $offset = $block[1]; + + $blockValue = sprintf( + '%0' . $size . 'd', + fmod($number, $divisor) + ); + $number = floor($number / $divisor); + $mask = substr_replace($mask,$blockValue, $offset, $size); + } + if ($number > 0) { + $mask = substr_replace($mask, $number, $offset, 0); + } + $result = $mask; + } else { + $result = $number; + } + + return $result; + } + + /** + * Convert a value in a pre-defined format to a PHP string + * + * @param mixed $value Value to format + * @param string $format Format code + * @param array $callBack Callback function for additional formatting of string + * @return string Formatted string + */ + public static function toFormattedString($value = '0', $format = PHPExcel_Style_NumberFormat::FORMAT_GENERAL, $callBack = null) + { + // For now we do not treat strings although section 4 of a format code affects strings + if (!is_numeric($value)) return $value; + + // For 'General' format code, we just pass the value although this is not entirely the way Excel does it, + // it seems to round numbers to a total of 10 digits. + if (($format === PHPExcel_Style_NumberFormat::FORMAT_GENERAL) || ($format === PHPExcel_Style_NumberFormat::FORMAT_TEXT)) { + return $value; + } + + // Get the sections, there can be up to four sections + $sections = explode(';', $format); + + // Fetch the relevant section depending on whether number is positive, negative, or zero? + // Text not supported yet. + // Here is how the sections apply to various values in Excel: + // 1 section: [POSITIVE/NEGATIVE/ZERO/TEXT] + // 2 sections: [POSITIVE/ZERO/TEXT] [NEGATIVE] + // 3 sections: [POSITIVE/TEXT] [NEGATIVE] [ZERO] + // 4 sections: [POSITIVE] [NEGATIVE] [ZERO] [TEXT] + switch (count($sections)) { + case 1: + $format = $sections[0]; + break; + + case 2: + $format = ($value >= 0) ? $sections[0] : $sections[1]; + $value = abs($value); // Use the absolute value + break; + + case 3: + $format = ($value > 0) ? + $sections[0] : ( ($value < 0) ? + $sections[1] : $sections[2]); + $value = abs($value); // Use the absolute value + break; + + case 4: + $format = ($value > 0) ? + $sections[0] : ( ($value < 0) ? + $sections[1] : $sections[2]); + $value = abs($value); // Use the absolute value + break; + + default: + // something is wrong, just use first section + $format = $sections[0]; + break; + } + + // Save format with color information for later use below + $formatColor = $format; + + // Strip color information + $color_regex = '/^\\[[a-zA-Z]+\\]/'; + $format = preg_replace($color_regex, '', $format); + + // Let's begin inspecting the format and converting the value to a formatted string + if (preg_match('/^(\[\$[A-Z]*-[0-9A-F]*\])*[hmsdy]/i', $format)) { // datetime format + self::_formatAsDate($value, $format); + } else if (preg_match('/%$/', $format)) { // % number format + self::_formatAsPercentage($value, $format); + } else { + if ($format === self::FORMAT_CURRENCY_EUR_SIMPLE) { + $value = 'EUR ' . sprintf('%1.2f', $value); + } else { + // In Excel formats, "_" is used to add spacing, which we can't do in HTML + $format = preg_replace('/_./', '', $format); + + // Some non-number characters are escaped with \, which we don't need + $format = preg_replace("/\\\\/", '', $format); + + // Some non-number strings are quoted, so we'll get rid of the quotes, likewise any positional * symbols + $format = str_replace(array('"','*'), '', $format); + + // Find out if we need thousands separator + // This is indicated by a comma enclosed by a digit placeholder: + // #,# or 0,0 + $useThousands = preg_match('/(#,#|0,0)/', $format); + if ($useThousands) { + $format = preg_replace('/0,0/', '00', $format); + $format = preg_replace('/#,#/', '##', $format); + } + + // Scale thousands, millions,... + // This is indicated by a number of commas after a digit placeholder: + // #, or 0.0,, + $scale = 1; // same as no scale + $matches = array(); + if (preg_match('/(#|0)(,+)/', $format, $matches)) { + $scale = pow(1000, strlen($matches[2])); + + // strip the commas + $format = preg_replace('/0,+/', '0', $format); + $format = preg_replace('/#,+/', '#', $format); + } + + if (preg_match('/#?.*\?\/\?/', $format, $m)) { + //echo 'Format mask is fractional '.$format.' <br />'; + if ($value != (int)$value) { + self::_formatAsFraction($value, $format); + } + + } else { + // Handle the number itself + + // scale number + $value = $value / $scale; + + // Strip # + $format = preg_replace('/\\#/', '0', $format); + + $n = "/\[[^\]]+\]/"; + $m = preg_replace($n, '', $format); + $number_regex = "/(0+)(\.?)(0*)/"; + if (preg_match($number_regex, $m, $matches)) { + $left = $matches[1]; + $dec = $matches[2]; + $right = $matches[3]; + + // minimun width of formatted number (including dot) + $minWidth = strlen($left) + strlen($dec) + strlen($right); + if ($useThousands) { + $value = number_format( + $value + , strlen($right) + , PHPExcel_Shared_String::getDecimalSeparator() + , PHPExcel_Shared_String::getThousandsSeparator() + ); + $value = preg_replace($number_regex, $value, $format); + } else { + if (preg_match('/[0#]E[+-]0/i', $format)) { + // Scientific format + $value = sprintf('%5.2E', $value); + } elseif (preg_match('/0([^\d\.]+)0/', $format)) { + $value = self::_complexNumberFormatMask($value, $format); + } else { + $sprintf_pattern = "%0$minWidth." . strlen($right) . "f"; + $value = sprintf($sprintf_pattern, $value); + $value = preg_replace($number_regex, $value, $format); + } + } + } + } + if (preg_match('/\[\$(.*)\]/u', $format, $m)) { + // Currency or Accounting + $currencyFormat = $m[0]; + $currencyCode = $m[1]; + list($currencyCode) = explode('-',$currencyCode); + if ($currencyCode == '') { + $currencyCode = PHPExcel_Shared_String::getCurrencyCode(); + } + $value = preg_replace('/\[\$([^\]]*)\]/u',$currencyCode,$value); + } + } + } + + // Additional formatting provided by callback function + if ($callBack !== null) { + list($writerInstance, $function) = $callBack; + $value = $writerInstance->$function($value, $formatColor); + } + + return $value; + } + +} diff --git a/PHPExcel/Style/Protection.php b/PHPExcel/Style/Protection.php new file mode 100644 index 0000000..8dc1f31 --- /dev/null +++ b/PHPExcel/Style/Protection.php @@ -0,0 +1,207 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.4.5, 2007-08-23 + */ + + +/** + * PHPExcel_Style_Protection + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Style_Protection extends PHPExcel_Style_Supervisor implements PHPExcel_IComparable +{ + /** Protection styles */ + const PROTECTION_INHERIT = 'inherit'; + const PROTECTION_PROTECTED = 'protected'; + const PROTECTION_UNPROTECTED = 'unprotected'; + + /** + * Locked + * + * @var string + */ + protected $_locked; + + /** + * Hidden + * + * @var string + */ + protected $_hidden; + + /** + * Create a new PHPExcel_Style_Protection + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + * @param boolean $isConditional Flag indicating if this is a conditional style or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE, $isConditional = FALSE) + { + // Supervisor? + parent::__construct($isSupervisor); + + // Initialise values + if (!$isConditional) { + $this->_locked = self::PROTECTION_INHERIT; + $this->_hidden = self::PROTECTION_INHERIT; + } + } + + /** + * Get the shared style component for the currently active cell in currently active sheet. + * Only used for style supervisor + * + * @return PHPExcel_Style_Protection + */ + public function getSharedComponent() + { + return $this->_parent->getSharedComponent()->getProtection(); + } + + /** + * Build style array from subcomponents + * + * @param array $array + * @return array + */ + public function getStyleArray($array) + { + return array('protection' => $array); + } + + /** + * Apply styles from array + * + * <code> + * $objPHPExcel->getActiveSheet()->getStyle('B2')->getLocked()->applyFromArray( + * array( + * 'locked' => TRUE, + * 'hidden' => FALSE + * ) + * ); + * </code> + * + * @param array $pStyles Array containing style information + * @throws PHPExcel_Exception + * @return PHPExcel_Style_Protection + */ + public function applyFromArray($pStyles = NULL) { + if (is_array($pStyles)) { + if ($this->_isSupervisor) { + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles)); + } else { + if (isset($pStyles['locked'])) { + $this->setLocked($pStyles['locked']); + } + if (isset($pStyles['hidden'])) { + $this->setHidden($pStyles['hidden']); + } + } + } else { + throw new PHPExcel_Exception("Invalid style array passed."); + } + return $this; + } + + /** + * Get locked + * + * @return string + */ + public function getLocked() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getLocked(); + } + return $this->_locked; + } + + /** + * Set locked + * + * @param string $pValue + * @return PHPExcel_Style_Protection + */ + public function setLocked($pValue = self::PROTECTION_INHERIT) { + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('locked' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_locked = $pValue; + } + return $this; + } + + /** + * Get hidden + * + * @return string + */ + public function getHidden() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHidden(); + } + return $this->_hidden; + } + + /** + * Set hidden + * + * @param string $pValue + * @return PHPExcel_Style_Protection + */ + public function setHidden($pValue = self::PROTECTION_INHERIT) { + if ($this->_isSupervisor) { + $styleArray = $this->getStyleArray(array('hidden' => $pValue)); + $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); + } else { + $this->_hidden = $pValue; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_isSupervisor) { + return $this->getSharedComponent()->getHashCode(); + } + return md5( + $this->_locked + . $this->_hidden + . __CLASS__ + ); + } + +} diff --git a/PHPExcel/Style/Supervisor.php b/PHPExcel/Style/Supervisor.php new file mode 100644 index 0000000..c2ce9c0 --- /dev/null +++ b/PHPExcel/Style/Supervisor.php @@ -0,0 +1,132 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Style_Supervisor + * + * @category PHPExcel + * @package PHPExcel_Style + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +abstract class PHPExcel_Style_Supervisor +{ + /** + * Supervisor? + * + * @var boolean + */ + protected $_isSupervisor; + + /** + * Parent. Only used for supervisor + * + * @var PHPExcel_Style + */ + protected $_parent; + + /** + * Create a new PHPExcel_Style_Alignment + * + * @param boolean $isSupervisor Flag indicating if this is a supervisor or not + * Leave this value at default unless you understand exactly what + * its ramifications are + */ + public function __construct($isSupervisor = FALSE) + { + // Supervisor? + $this->_isSupervisor = $isSupervisor; + } + + /** + * Bind parent. Only used for supervisor + * + * @param PHPExcel $parent + * @return PHPExcel_Style_Supervisor + */ + public function bindParent($parent, $parentPropertyName=NULL) + { + $this->_parent = $parent; + return $this; + } + + /** + * Is this a supervisor or a cell style component? + * + * @return boolean + */ + public function getIsSupervisor() + { + return $this->_isSupervisor; + } + + /** + * Get the currently active sheet. Only used for supervisor + * + * @return PHPExcel_Worksheet + */ + public function getActiveSheet() + { + return $this->_parent->getActiveSheet(); + } + + /** + * Get the currently active cell coordinate in currently active sheet. + * Only used for supervisor + * + * @return string E.g. 'A1' + */ + public function getSelectedCells() + { + return $this->getActiveSheet()->getSelectedCells(); + } + + /** + * Get the currently active cell coordinate in currently active sheet. + * Only used for supervisor + * + * @return string E.g. 'A1' + */ + public function getActiveCell() + { + return $this->getActiveSheet()->getActiveCell(); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if ((is_object($value)) && ($key != '_parent')) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet.php b/PHPExcel/Worksheet.php new file mode 100644 index 0000000..682ad98 --- /dev/null +++ b/PHPExcel/Worksheet.php @@ -0,0 +1,2909 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet implements PHPExcel_IComparable +{ + /* Break types */ + const BREAK_NONE = 0; + const BREAK_ROW = 1; + const BREAK_COLUMN = 2; + + /* Sheet state */ + const SHEETSTATE_VISIBLE = 'visible'; + const SHEETSTATE_HIDDEN = 'hidden'; + const SHEETSTATE_VERYHIDDEN = 'veryHidden'; + + /** + * Invalid characters in sheet title + * + * @var array + */ + private static $_invalidCharacters = array('*', ':', '/', '\\', '?', '[', ']'); + + /** + * Parent spreadsheet + * + * @var PHPExcel + */ + private $_parent; + + /** + * Cacheable collection of cells + * + * @var PHPExcel_CachedObjectStorage_xxx + */ + private $_cellCollection = null; + + /** + * Collection of row dimensions + * + * @var PHPExcel_Worksheet_RowDimension[] + */ + private $_rowDimensions = array(); + + /** + * Default row dimension + * + * @var PHPExcel_Worksheet_RowDimension + */ + private $_defaultRowDimension = null; + + /** + * Collection of column dimensions + * + * @var PHPExcel_Worksheet_ColumnDimension[] + */ + private $_columnDimensions = array(); + + /** + * Default column dimension + * + * @var PHPExcel_Worksheet_ColumnDimension + */ + private $_defaultColumnDimension = null; + + /** + * Collection of drawings + * + * @var PHPExcel_Worksheet_BaseDrawing[] + */ + private $_drawingCollection = null; + + /** + * Collection of Chart objects + * + * @var PHPExcel_Chart[] + */ + private $_chartCollection = array(); + + /** + * Worksheet title + * + * @var string + */ + private $_title; + + /** + * Sheet state + * + * @var string + */ + private $_sheetState; + + /** + * Page setup + * + * @var PHPExcel_Worksheet_PageSetup + */ + private $_pageSetup; + + /** + * Page margins + * + * @var PHPExcel_Worksheet_PageMargins + */ + private $_pageMargins; + + /** + * Page header/footer + * + * @var PHPExcel_Worksheet_HeaderFooter + */ + private $_headerFooter; + + /** + * Sheet view + * + * @var PHPExcel_Worksheet_SheetView + */ + private $_sheetView; + + /** + * Protection + * + * @var PHPExcel_Worksheet_Protection + */ + private $_protection; + + /** + * Collection of styles + * + * @var PHPExcel_Style[] + */ + private $_styles = array(); + + /** + * Conditional styles. Indexed by cell coordinate, e.g. 'A1' + * + * @var array + */ + private $_conditionalStylesCollection = array(); + + /** + * Is the current cell collection sorted already? + * + * @var boolean + */ + private $_cellCollectionIsSorted = false; + + /** + * Collection of breaks + * + * @var array + */ + private $_breaks = array(); + + /** + * Collection of merged cell ranges + * + * @var array + */ + private $_mergeCells = array(); + + /** + * Collection of protected cell ranges + * + * @var array + */ + private $_protectedCells = array(); + + /** + * Autofilter Range and selection + * + * @var PHPExcel_Worksheet_AutoFilter + */ + private $_autoFilter = NULL; + + /** + * Freeze pane + * + * @var string + */ + private $_freezePane = ''; + + /** + * Show gridlines? + * + * @var boolean + */ + private $_showGridlines = true; + + /** + * Print gridlines? + * + * @var boolean + */ + private $_printGridlines = false; + + /** + * Show row and column headers? + * + * @var boolean + */ + private $_showRowColHeaders = true; + + /** + * Show summary below? (Row/Column outline) + * + * @var boolean + */ + private $_showSummaryBelow = true; + + /** + * Show summary right? (Row/Column outline) + * + * @var boolean + */ + private $_showSummaryRight = true; + + /** + * Collection of comments + * + * @var PHPExcel_Comment[] + */ + private $_comments = array(); + + /** + * Active cell. (Only one!) + * + * @var string + */ + private $_activeCell = 'A1'; + + /** + * Selected cells + * + * @var string + */ + private $_selectedCells = 'A1'; + + /** + * Cached highest column + * + * @var string + */ + private $_cachedHighestColumn = 'A'; + + /** + * Cached highest row + * + * @var int + */ + private $_cachedHighestRow = 1; + + /** + * Right-to-left? + * + * @var boolean + */ + private $_rightToLeft = false; + + /** + * Hyperlinks. Indexed by cell coordinate, e.g. 'A1' + * + * @var array + */ + private $_hyperlinkCollection = array(); + + /** + * Data validation objects. Indexed by cell coordinate, e.g. 'A1' + * + * @var array + */ + private $_dataValidationCollection = array(); + + /** + * Tab color + * + * @var PHPExcel_Style_Color + */ + private $_tabColor; + + /** + * Dirty flag + * + * @var boolean + */ + private $_dirty = true; + + /** + * Hash + * + * @var string + */ + private $_hash = null; + + /** + * CodeName + * + * @var string + */ + private $_codeName = null; + + /** + * Create a new worksheet + * + * @param PHPExcel $pParent + * @param string $pTitle + */ + public function __construct(PHPExcel $pParent = null, $pTitle = 'Worksheet') + { + // Set parent and title + $this->_parent = $pParent; + $this->setTitle($pTitle, FALSE); + // setTitle can change $pTitle + $this->setCodeName($this->getTitle()); + $this->setSheetState(PHPExcel_Worksheet::SHEETSTATE_VISIBLE); + + $this->_cellCollection = PHPExcel_CachedObjectStorageFactory::getInstance($this); + + // Set page setup + $this->_pageSetup = new PHPExcel_Worksheet_PageSetup(); + + // Set page margins + $this->_pageMargins = new PHPExcel_Worksheet_PageMargins(); + + // Set page header/footer + $this->_headerFooter = new PHPExcel_Worksheet_HeaderFooter(); + + // Set sheet view + $this->_sheetView = new PHPExcel_Worksheet_SheetView(); + + // Drawing collection + $this->_drawingCollection = new ArrayObject(); + + // Chart collection + $this->_chartCollection = new ArrayObject(); + + // Protection + $this->_protection = new PHPExcel_Worksheet_Protection(); + + // Default row dimension + $this->_defaultRowDimension = new PHPExcel_Worksheet_RowDimension(NULL); + + // Default column dimension + $this->_defaultColumnDimension = new PHPExcel_Worksheet_ColumnDimension(NULL); + + $this->_autoFilter = new PHPExcel_Worksheet_AutoFilter(NULL, $this); + } + + + /** + * Disconnect all cells from this PHPExcel_Worksheet object, + * typically so that the worksheet object can be unset + * + */ + public function disconnectCells() { + if ( $this->_cellCollection !== NULL){ + $this->_cellCollection->unsetWorksheetCells(); + $this->_cellCollection = NULL; + } + // detach ourself from the workbook, so that it can then delete this worksheet successfully + $this->_parent = null; + } + + /** + * Code to execute when this worksheet is unset() + * + */ + function __destruct() { + PHPExcel_Calculation::getInstance($this->_parent) + ->clearCalculationCacheForWorksheet($this->_title); + + $this->disconnectCells(); + } + + /** + * Return the cache controller for the cell collection + * + * @return PHPExcel_CachedObjectStorage_xxx + */ + public function getCellCacheController() { + return $this->_cellCollection; + } // function getCellCacheController() + + + /** + * Get array of invalid characters for sheet title + * + * @return array + */ + public static function getInvalidCharacters() + { + return self::$_invalidCharacters; + } + + /** + * Check sheet code name for valid Excel syntax + * + * @param string $pValue The string to check + * @return string The valid string + * @throws Exception + */ + private static function _checkSheetCodeName($pValue) + { + $CharCount = PHPExcel_Shared_String::CountCharacters($pValue); + if ($CharCount == 0) { + throw new PHPExcel_Exception('Sheet code name cannot be empty.'); + } + // Some of the printable ASCII characters are invalid: * : / \ ? [ ] and first and last characters cannot be a "'" + if ((str_replace(self::$_invalidCharacters, '', $pValue) !== $pValue) || + (PHPExcel_Shared_String::Substring($pValue,-1,1)=='\'') || + (PHPExcel_Shared_String::Substring($pValue,0,1)=='\'')) { + throw new PHPExcel_Exception('Invalid character found in sheet code name'); + } + + // Maximum 31 characters allowed for sheet title + if ($CharCount > 31) { + throw new PHPExcel_Exception('Maximum 31 characters allowed in sheet code name.'); + } + + return $pValue; + } + + /** + * Check sheet title for valid Excel syntax + * + * @param string $pValue The string to check + * @return string The valid string + * @throws PHPExcel_Exception + */ + private static function _checkSheetTitle($pValue) + { + // Some of the printable ASCII characters are invalid: * : / \ ? [ ] + if (str_replace(self::$_invalidCharacters, '', $pValue) !== $pValue) { + throw new PHPExcel_Exception('Invalid character found in sheet title'); + } + + // Maximum 31 characters allowed for sheet title + if (PHPExcel_Shared_String::CountCharacters($pValue) > 31) { + throw new PHPExcel_Exception('Maximum 31 characters allowed in sheet title.'); + } + + return $pValue; + } + + /** + * Get collection of cells + * + * @param boolean $pSorted Also sort the cell collection? + * @return PHPExcel_Cell[] + */ + public function getCellCollection($pSorted = true) + { + if ($pSorted) { + // Re-order cell collection + return $this->sortCellCollection(); + } + if ($this->_cellCollection !== NULL) { + return $this->_cellCollection->getCellList(); + } + return array(); + } + + /** + * Sort collection of cells + * + * @return PHPExcel_Worksheet + */ + public function sortCellCollection() + { + if ($this->_cellCollection !== NULL) { + return $this->_cellCollection->getSortedCellList(); + } + return array(); + } + + /** + * Get collection of row dimensions + * + * @return PHPExcel_Worksheet_RowDimension[] + */ + public function getRowDimensions() + { + return $this->_rowDimensions; + } + + /** + * Get default row dimension + * + * @return PHPExcel_Worksheet_RowDimension + */ + public function getDefaultRowDimension() + { + return $this->_defaultRowDimension; + } + + /** + * Get collection of column dimensions + * + * @return PHPExcel_Worksheet_ColumnDimension[] + */ + public function getColumnDimensions() + { + return $this->_columnDimensions; + } + + /** + * Get default column dimension + * + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function getDefaultColumnDimension() + { + return $this->_defaultColumnDimension; + } + + /** + * Get collection of drawings + * + * @return PHPExcel_Worksheet_BaseDrawing[] + */ + public function getDrawingCollection() + { + return $this->_drawingCollection; + } + + /** + * Get collection of charts + * + * @return PHPExcel_Chart[] + */ + public function getChartCollection() + { + return $this->_chartCollection; + } + + /** + * Add chart + * + * @param PHPExcel_Chart $pChart + * @param int|null $iChartIndex Index where chart should go (0,1,..., or null for last) + * @return PHPExcel_Chart + */ + public function addChart(PHPExcel_Chart $pChart = null, $iChartIndex = null) + { + $pChart->setWorksheet($this); + if (is_null($iChartIndex)) { + $this->_chartCollection[] = $pChart; + } else { + // Insert the chart at the requested index + array_splice($this->_chartCollection, $iChartIndex, 0, array($pChart)); + } + + return $pChart; + } + + /** + * Return the count of charts on this worksheet + * + * @return int The number of charts + */ + public function getChartCount() + { + return count($this->_chartCollection); + } + + /** + * Get a chart by its index position + * + * @param string $index Chart index position + * @return false|PHPExcel_Chart + * @throws PHPExcel_Exception + */ + public function getChartByIndex($index = null) + { + $chartCount = count($this->_chartCollection); + if ($chartCount == 0) { + return false; + } + if (is_null($index)) { + $index = --$chartCount; + } + if (!isset($this->_chartCollection[$index])) { + return false; + } + + return $this->_chartCollection[$index]; + } + + /** + * Return an array of the names of charts on this worksheet + * + * @return string[] The names of charts + * @throws PHPExcel_Exception + */ + public function getChartNames() + { + $chartNames = array(); + foreach($this->_chartCollection as $chart) { + $chartNames[] = $chart->getName(); + } + return $chartNames; + } + + /** + * Get a chart by name + * + * @param string $chartName Chart name + * @return false|PHPExcel_Chart + * @throws PHPExcel_Exception + */ + public function getChartByName($chartName = '') + { + $chartCount = count($this->_chartCollection); + if ($chartCount == 0) { + return false; + } + foreach($this->_chartCollection as $index => $chart) { + if ($chart->getName() == $chartName) { + return $this->_chartCollection[$index]; + } + } + return false; + } + + /** + * Refresh column dimensions + * + * @return PHPExcel_Worksheet + */ + public function refreshColumnDimensions() + { + $currentColumnDimensions = $this->getColumnDimensions(); + $newColumnDimensions = array(); + + foreach ($currentColumnDimensions as $objColumnDimension) { + $newColumnDimensions[$objColumnDimension->getColumnIndex()] = $objColumnDimension; + } + + $this->_columnDimensions = $newColumnDimensions; + + return $this; + } + + /** + * Refresh row dimensions + * + * @return PHPExcel_Worksheet + */ + public function refreshRowDimensions() + { + $currentRowDimensions = $this->getRowDimensions(); + $newRowDimensions = array(); + + foreach ($currentRowDimensions as $objRowDimension) { + $newRowDimensions[$objRowDimension->getRowIndex()] = $objRowDimension; + } + + $this->_rowDimensions = $newRowDimensions; + + return $this; + } + + /** + * Calculate worksheet dimension + * + * @return string String containing the dimension of this worksheet + */ + public function calculateWorksheetDimension() + { + // Return + return 'A1' . ':' . $this->getHighestColumn() . $this->getHighestRow(); + } + + /** + * Calculate worksheet data dimension + * + * @return string String containing the dimension of this worksheet that actually contain data + */ + public function calculateWorksheetDataDimension() + { + // Return + return 'A1' . ':' . $this->getHighestDataColumn() . $this->getHighestDataRow(); + } + + /** + * Calculate widths for auto-size columns + * + * @param boolean $calculateMergeCells Calculate merge cell width + * @return PHPExcel_Worksheet; + */ + public function calculateColumnWidths($calculateMergeCells = false) + { + // initialize $autoSizes array + $autoSizes = array(); + foreach ($this->getColumnDimensions() as $colDimension) { + if ($colDimension->getAutoSize()) { + $autoSizes[$colDimension->getColumnIndex()] = -1; + } + } + + // There is only something to do if there are some auto-size columns + if (!empty($autoSizes)) { + + // build list of cells references that participate in a merge + $isMergeCell = array(); + foreach ($this->getMergeCells() as $cells) { + foreach (PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) { + $isMergeCell[$cellReference] = true; + } + } + + // loop through all cells in the worksheet + foreach ($this->getCellCollection(false) as $cellID) { + $cell = $this->getCell($cellID); + if (isset($autoSizes[$this->_cellCollection->getCurrentColumn()])) { + // Determine width if cell does not participate in a merge + if (!isset($isMergeCell[$this->_cellCollection->getCurrentAddress()])) { + // Calculated value + // To formatted string + $cellValue = PHPExcel_Style_NumberFormat::toFormattedString( + $cell->getCalculatedValue(), + $this->getParent()->getCellXfByIndex($cell->getXfIndex())->getNumberFormat()->getFormatCode() + ); + + $autoSizes[$this->_cellCollection->getCurrentColumn()] = max( + (float) $autoSizes[$this->_cellCollection->getCurrentColumn()], + (float)PHPExcel_Shared_Font::calculateColumnWidth( + $this->getParent()->getCellXfByIndex($cell->getXfIndex())->getFont(), + $cellValue, + $this->getParent()->getCellXfByIndex($cell->getXfIndex())->getAlignment()->getTextRotation(), + $this->getDefaultStyle()->getFont() + ) + ); + } + } + } + + // adjust column widths + foreach ($autoSizes as $columnIndex => $width) { + if ($width == -1) $width = $this->getDefaultColumnDimension()->getWidth(); + $this->getColumnDimension($columnIndex)->setWidth($width); + } + } + + return $this; + } + + /** + * Get parent + * + * @return PHPExcel + */ + public function getParent() { + return $this->_parent; + } + + /** + * Re-bind parent + * + * @param PHPExcel $parent + * @return PHPExcel_Worksheet + */ + public function rebindParent(PHPExcel $parent) { + if ($this->_parent !== null) { + $namedRanges = $this->_parent->getNamedRanges(); + foreach ($namedRanges as $namedRange) { + $parent->addNamedRange($namedRange); + } + + $this->_parent->removeSheetByIndex( + $this->_parent->getIndex($this) + ); + } + $this->_parent = $parent; + + return $this; + } + + /** + * Get title + * + * @return string + */ + public function getTitle() + { + return $this->_title; + } + + /** + * Set title + * + * @param string $pValue String containing the dimension of this worksheet + * @param string $updateFormulaCellReferences boolean Flag indicating whether cell references in formulae should + * be updated to reflect the new sheet name. + * This should be left as the default true, unless you are + * certain that no formula cells on any worksheet contain + * references to this worksheet + * @return PHPExcel_Worksheet + */ + public function setTitle($pValue = 'Worksheet', $updateFormulaCellReferences = true) + { + // Is this a 'rename' or not? + if ($this->getTitle() == $pValue) { + return $this; + } + + // Syntax check + self::_checkSheetTitle($pValue); + + // Old title + $oldTitle = $this->getTitle(); + + if ($this->_parent) { + // Is there already such sheet name? + if ($this->_parent->sheetNameExists($pValue)) { + // Use name, but append with lowest possible integer + + if (PHPExcel_Shared_String::CountCharacters($pValue) > 29) { + $pValue = PHPExcel_Shared_String::Substring($pValue,0,29); + } + $i = 1; + while ($this->_parent->sheetNameExists($pValue . ' ' . $i)) { + ++$i; + if ($i == 10) { + if (PHPExcel_Shared_String::CountCharacters($pValue) > 28) { + $pValue = PHPExcel_Shared_String::Substring($pValue,0,28); + } + } elseif ($i == 100) { + if (PHPExcel_Shared_String::CountCharacters($pValue) > 27) { + $pValue = PHPExcel_Shared_String::Substring($pValue,0,27); + } + } + } + + $altTitle = $pValue . ' ' . $i; + return $this->setTitle($altTitle,$updateFormulaCellReferences); + } + } + + // Set title + $this->_title = $pValue; + $this->_dirty = true; + + if ($this->_parent) { + // New title + $newTitle = $this->getTitle(); + PHPExcel_Calculation::getInstance($this->_parent) + ->renameCalculationCacheForWorksheet($oldTitle, $newTitle); + if ($updateFormulaCellReferences) + PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->_parent, $oldTitle, $newTitle); + } + + return $this; + } + + /** + * Get sheet state + * + * @return string Sheet state (visible, hidden, veryHidden) + */ + public function getSheetState() { + return $this->_sheetState; + } + + /** + * Set sheet state + * + * @param string $value Sheet state (visible, hidden, veryHidden) + * @return PHPExcel_Worksheet + */ + public function setSheetState($value = PHPExcel_Worksheet::SHEETSTATE_VISIBLE) { + $this->_sheetState = $value; + return $this; + } + + /** + * Get page setup + * + * @return PHPExcel_Worksheet_PageSetup + */ + public function getPageSetup() + { + return $this->_pageSetup; + } + + /** + * Set page setup + * + * @param PHPExcel_Worksheet_PageSetup $pValue + * @return PHPExcel_Worksheet + */ + public function setPageSetup(PHPExcel_Worksheet_PageSetup $pValue) + { + $this->_pageSetup = $pValue; + return $this; + } + + /** + * Get page margins + * + * @return PHPExcel_Worksheet_PageMargins + */ + public function getPageMargins() + { + return $this->_pageMargins; + } + + /** + * Set page margins + * + * @param PHPExcel_Worksheet_PageMargins $pValue + * @return PHPExcel_Worksheet + */ + public function setPageMargins(PHPExcel_Worksheet_PageMargins $pValue) + { + $this->_pageMargins = $pValue; + return $this; + } + + /** + * Get page header/footer + * + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function getHeaderFooter() + { + return $this->_headerFooter; + } + + /** + * Set page header/footer + * + * @param PHPExcel_Worksheet_HeaderFooter $pValue + * @return PHPExcel_Worksheet + */ + public function setHeaderFooter(PHPExcel_Worksheet_HeaderFooter $pValue) + { + $this->_headerFooter = $pValue; + return $this; + } + + /** + * Get sheet view + * + * @return PHPExcel_Worksheet_SheetView + */ + public function getSheetView() + { + return $this->_sheetView; + } + + /** + * Set sheet view + * + * @param PHPExcel_Worksheet_SheetView $pValue + * @return PHPExcel_Worksheet + */ + public function setSheetView(PHPExcel_Worksheet_SheetView $pValue) + { + $this->_sheetView = $pValue; + return $this; + } + + /** + * Get Protection + * + * @return PHPExcel_Worksheet_Protection + */ + public function getProtection() + { + return $this->_protection; + } + + /** + * Set Protection + * + * @param PHPExcel_Worksheet_Protection $pValue + * @return PHPExcel_Worksheet + */ + public function setProtection(PHPExcel_Worksheet_Protection $pValue) + { + $this->_protection = $pValue; + $this->_dirty = true; + + return $this; + } + + /** + * Get highest worksheet column + * + * @param string $row Return the data highest column for the specified row, + * or the highest column of any row if no row number is passed + * @return string Highest column name + */ + public function getHighestColumn($row = null) + { + if ($row == null) { + return $this->_cachedHighestColumn; + } + return $this->getHighestDataColumn($row); + } + + /** + * Get highest worksheet column that contains data + * + * @param string $row Return the highest data column for the specified row, + * or the highest data column of any row if no row number is passed + * @return string Highest column name that contains data + */ + public function getHighestDataColumn($row = null) + { + return $this->_cellCollection->getHighestColumn($row); + } + + /** + * Get highest worksheet row + * + * @param string $column Return the highest data row for the specified column, + * or the highest row of any column if no column letter is passed + * @return int Highest row number + */ + public function getHighestRow($column = null) + { + if ($column == null) { + return $this->_cachedHighestRow; + } + return $this->getHighestDataRow($column); + } + + /** + * Get highest worksheet row that contains data + * + * @param string $column Return the highest data row for the specified column, + * or the highest data row of any column if no column letter is passed + * @return string Highest row number that contains data + */ + public function getHighestDataRow($column = null) + { + return $this->_cellCollection->getHighestRow($column); + } + + /** + * Get highest worksheet column and highest row that have cell records + * + * @return array Highest column name and highest row number + */ + public function getHighestRowAndColumn() + { + return $this->_cellCollection->getHighestRowAndColumn(); + } + + /** + * Set a cell value + * + * @param string $pCoordinate Coordinate of the cell + * @param mixed $pValue Value of the cell + * @param bool $returnCell Return the worksheet (false, default) or the cell (true) + * @return PHPExcel_Worksheet|PHPExcel_Cell Depending on the last parameter being specified + */ + public function setCellValue($pCoordinate = 'A1', $pValue = null, $returnCell = false) + { + $cell = $this->getCell($pCoordinate)->setValue($pValue); + return ($returnCell) ? $cell : $this; + } + + /** + * Set a cell value by using numeric cell coordinates + * + * @param string $pColumn Numeric column coordinate of the cell (A = 0) + * @param string $pRow Numeric row coordinate of the cell + * @param mixed $pValue Value of the cell + * @param bool $returnCell Return the worksheet (false, default) or the cell (true) + * @return PHPExcel_Worksheet|PHPExcel_Cell Depending on the last parameter being specified + */ + public function setCellValueByColumnAndRow($pColumn = 0, $pRow = 1, $pValue = null, $returnCell = false) + { + $cell = $this->getCellByColumnAndRow($pColumn, $pRow)->setValue($pValue); + return ($returnCell) ? $cell : $this; + } + + /** + * Set a cell value + * + * @param string $pCoordinate Coordinate of the cell + * @param mixed $pValue Value of the cell + * @param string $pDataType Explicit data type + * @param bool $returnCell Return the worksheet (false, default) or the cell (true) + * @return PHPExcel_Worksheet|PHPExcel_Cell Depending on the last parameter being specified + */ + public function setCellValueExplicit($pCoordinate = 'A1', $pValue = null, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING, $returnCell = false) + { + // Set value + $cell = $this->getCell($pCoordinate)->setValueExplicit($pValue, $pDataType); + return ($returnCell) ? $cell : $this; + } + + /** + * Set a cell value by using numeric cell coordinates + * + * @param string $pColumn Numeric column coordinate of the cell + * @param string $pRow Numeric row coordinate of the cell + * @param mixed $pValue Value of the cell + * @param string $pDataType Explicit data type + * @param bool $returnCell Return the worksheet (false, default) or the cell (true) + * @return PHPExcel_Worksheet|PHPExcel_Cell Depending on the last parameter being specified + */ + public function setCellValueExplicitByColumnAndRow($pColumn = 0, $pRow = 1, $pValue = null, $pDataType = PHPExcel_Cell_DataType::TYPE_STRING, $returnCell = false) + { + $cell = $this->getCellByColumnAndRow($pColumn, $pRow)->setValueExplicit($pValue, $pDataType); + return ($returnCell) ? $cell : $this; + } + + /** + * Get cell at a specific coordinate + * + * @param string $pCoordinate Coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Cell Cell that was found + */ + public function getCell($pCoordinate = 'A1') + { + // Check cell collection + if ($this->_cellCollection->isDataSet($pCoordinate)) { + return $this->_cellCollection->getCacheData($pCoordinate); + } + + // Worksheet reference? + if (strpos($pCoordinate, '!') !== false) { + $worksheetReference = PHPExcel_Worksheet::extractSheetTitle($pCoordinate, true); + return $this->_parent->getSheetByName($worksheetReference[0])->getCell($worksheetReference[1]); + } + + // Named range? + if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $pCoordinate, $matches)) && + (preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $pCoordinate, $matches))) { + $namedRange = PHPExcel_NamedRange::resolveRange($pCoordinate, $this); + if ($namedRange !== NULL) { + $pCoordinate = $namedRange->getRange(); + return $namedRange->getWorksheet()->getCell($pCoordinate); + } + } + + // Uppercase coordinate + $pCoordinate = strtoupper($pCoordinate); + + if (strpos($pCoordinate, ':') !== false || strpos($pCoordinate, ',') !== false) { + throw new PHPExcel_Exception('Cell coordinate can not be a range of cells.'); + } elseif (strpos($pCoordinate, '$') !== false) { + throw new PHPExcel_Exception('Cell coordinate must not be absolute.'); + } + + // Create new cell object + return $this->_createNewCell($pCoordinate); + } + + /** + * Get cell at a specific coordinate by using numeric cell coordinates + * + * @param string $pColumn Numeric column coordinate of the cell + * @param string $pRow Numeric row coordinate of the cell + * @return PHPExcel_Cell Cell that was found + */ + public function getCellByColumnAndRow($pColumn = 0, $pRow = 1) + { + $columnLetter = PHPExcel_Cell::stringFromColumnIndex($pColumn); + $coordinate = $columnLetter . $pRow; + + if ($this->_cellCollection->isDataSet($coordinate)) { + return $this->_cellCollection->getCacheData($coordinate); + } + + return $this->_createNewCell($coordinate); + } + + /** + * Create a new cell at the specified coordinate + * + * @param string $pCoordinate Coordinate of the cell + * @return PHPExcel_Cell Cell that was created + */ + private function _createNewCell($pCoordinate) + { + $cell = $this->_cellCollection->addCacheData( + $pCoordinate, + new PHPExcel_Cell( + NULL, + PHPExcel_Cell_DataType::TYPE_NULL, + $this + ) + ); + $this->_cellCollectionIsSorted = false; + + // Coordinates + $aCoordinates = PHPExcel_Cell::coordinateFromString($pCoordinate); + if (PHPExcel_Cell::columnIndexFromString($this->_cachedHighestColumn) < PHPExcel_Cell::columnIndexFromString($aCoordinates[0])) + $this->_cachedHighestColumn = $aCoordinates[0]; + $this->_cachedHighestRow = max($this->_cachedHighestRow, $aCoordinates[1]); + + // Cell needs appropriate xfIndex from dimensions records + // but don't create dimension records if they don't already exist + $rowDimension = $this->getRowDimension($aCoordinates[1], FALSE); + $columnDimension = $this->getColumnDimension($aCoordinates[0], FALSE); + + if ($rowDimension !== NULL && $rowDimension->getXfIndex() > 0) { + // then there is a row dimension with explicit style, assign it to the cell + $cell->setXfIndex($rowDimension->getXfIndex()); + } elseif ($columnDimension !== NULL && $columnDimension->getXfIndex() > 0) { + // then there is a column dimension, assign it to the cell + $cell->setXfIndex($columnDimension->getXfIndex()); + } + + return $cell; + } + + /** + * Does the cell at a specific coordinate exist? + * + * @param string $pCoordinate Coordinate of the cell + * @throws PHPExcel_Exception + * @return boolean + */ + public function cellExists($pCoordinate = 'A1') + { + // Worksheet reference? + if (strpos($pCoordinate, '!') !== false) { + $worksheetReference = PHPExcel_Worksheet::extractSheetTitle($pCoordinate, true); + return $this->_parent->getSheetByName($worksheetReference[0])->cellExists($worksheetReference[1]); + } + + // Named range? + if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $pCoordinate, $matches)) && + (preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $pCoordinate, $matches))) { + $namedRange = PHPExcel_NamedRange::resolveRange($pCoordinate, $this); + if ($namedRange !== NULL) { + $pCoordinate = $namedRange->getRange(); + if ($this->getHashCode() != $namedRange->getWorksheet()->getHashCode()) { + if (!$namedRange->getLocalOnly()) { + return $namedRange->getWorksheet()->cellExists($pCoordinate); + } else { + throw new PHPExcel_Exception('Named range ' . $namedRange->getName() . ' is not accessible from within sheet ' . $this->getTitle()); + } + } + } + else { return false; } + } + + // Uppercase coordinate + $pCoordinate = strtoupper($pCoordinate); + + if (strpos($pCoordinate,':') !== false || strpos($pCoordinate,',') !== false) { + throw new PHPExcel_Exception('Cell coordinate can not be a range of cells.'); + } elseif (strpos($pCoordinate,'$') !== false) { + throw new PHPExcel_Exception('Cell coordinate must not be absolute.'); + } else { + // Coordinates + $aCoordinates = PHPExcel_Cell::coordinateFromString($pCoordinate); + + // Cell exists? + return $this->_cellCollection->isDataSet($pCoordinate); + } + } + + /** + * Cell at a specific coordinate by using numeric cell coordinates exists? + * + * @param string $pColumn Numeric column coordinate of the cell + * @param string $pRow Numeric row coordinate of the cell + * @return boolean + */ + public function cellExistsByColumnAndRow($pColumn = 0, $pRow = 1) + { + return $this->cellExists(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow); + } + + /** + * Get row dimension at a specific row + * + * @param int $pRow Numeric index of the row + * @return PHPExcel_Worksheet_RowDimension + */ + public function getRowDimension($pRow = 1, $create = TRUE) + { + // Found + $found = null; + + // Get row dimension + if (!isset($this->_rowDimensions[$pRow])) { + if (!$create) + return NULL; + $this->_rowDimensions[$pRow] = new PHPExcel_Worksheet_RowDimension($pRow); + + $this->_cachedHighestRow = max($this->_cachedHighestRow,$pRow); + } + return $this->_rowDimensions[$pRow]; + } + + /** + * Get column dimension at a specific column + * + * @param string $pColumn String index of the column + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function getColumnDimension($pColumn = 'A', $create = TRUE) + { + // Uppercase coordinate + $pColumn = strtoupper($pColumn); + + // Fetch dimensions + if (!isset($this->_columnDimensions[$pColumn])) { + if (!$create) + return NULL; + $this->_columnDimensions[$pColumn] = new PHPExcel_Worksheet_ColumnDimension($pColumn); + + if (PHPExcel_Cell::columnIndexFromString($this->_cachedHighestColumn) < PHPExcel_Cell::columnIndexFromString($pColumn)) + $this->_cachedHighestColumn = $pColumn; + } + return $this->_columnDimensions[$pColumn]; + } + + /** + * Get column dimension at a specific column by using numeric cell coordinates + * + * @param string $pColumn Numeric column coordinate of the cell + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function getColumnDimensionByColumn($pColumn = 0) + { + return $this->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($pColumn)); + } + + /** + * Get styles + * + * @return PHPExcel_Style[] + */ + public function getStyles() + { + return $this->_styles; + } + + /** + * Get default style of workbook. + * + * @deprecated + * @return PHPExcel_Style + * @throws PHPExcel_Exception + */ + public function getDefaultStyle() + { + return $this->_parent->getDefaultStyle(); + } + + /** + * Set default style - should only be used by PHPExcel_IReader implementations! + * + * @deprecated + * @param PHPExcel_Style $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setDefaultStyle(PHPExcel_Style $pValue) + { + $this->_parent->getDefaultStyle()->applyFromArray(array( + 'font' => array( + 'name' => $pValue->getFont()->getName(), + 'size' => $pValue->getFont()->getSize(), + ), + )); + return $this; + } + + /** + * Get style for cell + * + * @param string $pCellCoordinate Cell coordinate to get style for + * @return PHPExcel_Style + * @throws PHPExcel_Exception + */ + public function getStyle($pCellCoordinate = 'A1') + { + // set this sheet as active + $this->_parent->setActiveSheetIndex($this->_parent->getIndex($this)); + + // set cell coordinate as active + $this->setSelectedCells($pCellCoordinate); + + return $this->_parent->getCellXfSupervisor(); + } + + /** + * Get conditional styles for a cell + * + * @param string $pCoordinate + * @return PHPExcel_Style_Conditional[] + */ + public function getConditionalStyles($pCoordinate = 'A1') + { + if (!isset($this->_conditionalStylesCollection[$pCoordinate])) { + $this->_conditionalStylesCollection[$pCoordinate] = array(); + } + return $this->_conditionalStylesCollection[$pCoordinate]; + } + + /** + * Do conditional styles exist for this cell? + * + * @param string $pCoordinate + * @return boolean + */ + public function conditionalStylesExists($pCoordinate = 'A1') + { + if (isset($this->_conditionalStylesCollection[$pCoordinate])) { + return true; + } + return false; + } + + /** + * Removes conditional styles for a cell + * + * @param string $pCoordinate + * @return PHPExcel_Worksheet + */ + public function removeConditionalStyles($pCoordinate = 'A1') + { + unset($this->_conditionalStylesCollection[$pCoordinate]); + return $this; + } + + /** + * Get collection of conditional styles + * + * @return array + */ + public function getConditionalStylesCollection() + { + return $this->_conditionalStylesCollection; + } + + /** + * Set conditional styles + * + * @param $pCoordinate string E.g. 'A1' + * @param $pValue PHPExcel_Style_Conditional[] + * @return PHPExcel_Worksheet + */ + public function setConditionalStyles($pCoordinate = 'A1', $pValue) + { + $this->_conditionalStylesCollection[$pCoordinate] = $pValue; + return $this; + } + + /** + * Get style for cell by using numeric cell coordinates + * + * @param int $pColumn Numeric column coordinate of the cell + * @param int $pRow Numeric row coordinate of the cell + * @return PHPExcel_Style + */ + public function getStyleByColumnAndRow($pColumn = 0, $pRow = 1) + { + return $this->getStyle(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow); + } + + /** + * Set shared cell style to a range of cells + * + * Please note that this will overwrite existing cell styles for cells in range! + * + * @deprecated + * @param PHPExcel_Style $pSharedCellStyle Cell style to share + * @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1") + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setSharedStyle(PHPExcel_Style $pSharedCellStyle = null, $pRange = '') + { + $this->duplicateStyle($pSharedCellStyle, $pRange); + return $this; + } + + /** + * Duplicate cell style to a range of cells + * + * Please note that this will overwrite existing cell styles for cells in range! + * + * @param PHPExcel_Style $pCellStyle Cell style to duplicate + * @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1") + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function duplicateStyle(PHPExcel_Style $pCellStyle = null, $pRange = '') + { + // make sure we have a real style and not supervisor + $style = $pCellStyle->getIsSupervisor() ? $pCellStyle->getSharedComponent() : $pCellStyle; + + // Add the style to the workbook if necessary + $workbook = $this->_parent; + if ($existingStyle = $this->_parent->getCellXfByHashCode($pCellStyle->getHashCode())) { + // there is already such cell Xf in our collection + $xfIndex = $existingStyle->getIndex(); + } else { + // we don't have such a cell Xf, need to add + $workbook->addCellXf($pCellStyle); + $xfIndex = $pCellStyle->getIndex(); + } + + // Calculate range outer borders + list($rangeStart, $rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange . ':' . $pRange); + + // Make sure we can loop upwards on rows and columns + if ($rangeStart[0] > $rangeEnd[0] && $rangeStart[1] > $rangeEnd[1]) { + $tmp = $rangeStart; + $rangeStart = $rangeEnd; + $rangeEnd = $tmp; + } + + // Loop through cells and apply styles + for ($col = $rangeStart[0]; $col <= $rangeEnd[0]; ++$col) { + for ($row = $rangeStart[1]; $row <= $rangeEnd[1]; ++$row) { + $this->getCell(PHPExcel_Cell::stringFromColumnIndex($col - 1) . $row)->setXfIndex($xfIndex); + } + } + + return $this; + } + + /** + * Duplicate conditional style to a range of cells + * + * Please note that this will overwrite existing cell styles for cells in range! + * + * @param array of PHPExcel_Style_Conditional $pCellStyle Cell style to duplicate + * @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1") + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function duplicateConditionalStyle(array $pCellStyle = null, $pRange = '') + { + foreach($pCellStyle as $cellStyle) { + if (!($cellStyle instanceof PHPExcel_Style_Conditional)) { + throw new PHPExcel_Exception('Style is not a conditional style'); + } + } + + // Calculate range outer borders + list($rangeStart, $rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange . ':' . $pRange); + + // Make sure we can loop upwards on rows and columns + if ($rangeStart[0] > $rangeEnd[0] && $rangeStart[1] > $rangeEnd[1]) { + $tmp = $rangeStart; + $rangeStart = $rangeEnd; + $rangeEnd = $tmp; + } + + // Loop through cells and apply styles + for ($col = $rangeStart[0]; $col <= $rangeEnd[0]; ++$col) { + for ($row = $rangeStart[1]; $row <= $rangeEnd[1]; ++$row) { + $this->setConditionalStyles(PHPExcel_Cell::stringFromColumnIndex($col - 1) . $row, $pCellStyle); + } + } + + return $this; + } + + /** + * Duplicate cell style array to a range of cells + * + * Please note that this will overwrite existing cell styles for cells in range, + * if they are in the styles array. For example, if you decide to set a range of + * cells to font bold, only include font bold in the styles array. + * + * @deprecated + * @param array $pStyles Array containing style information + * @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1") + * @param boolean $pAdvanced Advanced mode for setting borders. + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function duplicateStyleArray($pStyles = null, $pRange = '', $pAdvanced = true) + { + $this->getStyle($pRange)->applyFromArray($pStyles, $pAdvanced); + return $this; + } + + /** + * Set break on a cell + * + * @param string $pCell Cell coordinate (e.g. A1) + * @param int $pBreak Break type (type of PHPExcel_Worksheet::BREAK_*) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setBreak($pCell = 'A1', $pBreak = PHPExcel_Worksheet::BREAK_NONE) + { + // Uppercase coordinate + $pCell = strtoupper($pCell); + + if ($pCell != '') { + if ($pBreak == PHPExcel_Worksheet::BREAK_NONE) { + if (isset($this->_breaks[$pCell])) { + unset($this->_breaks[$pCell]); + } + } else { + $this->_breaks[$pCell] = $pBreak; + } + } else { + throw new PHPExcel_Exception('No cell coordinate specified.'); + } + + return $this; + } + + /** + * Set break on a cell by using numeric cell coordinates + * + * @param integer $pColumn Numeric column coordinate of the cell + * @param integer $pRow Numeric row coordinate of the cell + * @param integer $pBreak Break type (type of PHPExcel_Worksheet::BREAK_*) + * @return PHPExcel_Worksheet + */ + public function setBreakByColumnAndRow($pColumn = 0, $pRow = 1, $pBreak = PHPExcel_Worksheet::BREAK_NONE) + { + return $this->setBreak(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow, $pBreak); + } + + /** + * Get breaks + * + * @return array[] + */ + public function getBreaks() + { + return $this->_breaks; + } + + /** + * Set merge on a cell range + * + * @param string $pRange Cell range (e.g. A1:E1) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function mergeCells($pRange = 'A1:A1') + { + // Uppercase coordinate + $pRange = strtoupper($pRange); + + if (strpos($pRange,':') !== false) { + $this->_mergeCells[$pRange] = $pRange; + + // make sure cells are created + + // get the cells in the range + $aReferences = PHPExcel_Cell::extractAllCellReferencesInRange($pRange); + + // create upper left cell if it does not already exist + $upperLeft = $aReferences[0]; + if (!$this->cellExists($upperLeft)) { + $this->getCell($upperLeft)->setValueExplicit(null, PHPExcel_Cell_DataType::TYPE_NULL); + } + + // create or blank out the rest of the cells in the range + $count = count($aReferences); + for ($i = 1; $i < $count; $i++) { + $this->getCell($aReferences[$i])->setValueExplicit(null, PHPExcel_Cell_DataType::TYPE_NULL); + } + + } else { + throw new PHPExcel_Exception('Merge must be set on a range of cells.'); + } + + return $this; + } + + /** + * Set merge on a cell range by using numeric cell coordinates + * + * @param int $pColumn1 Numeric column coordinate of the first cell + * @param int $pRow1 Numeric row coordinate of the first cell + * @param int $pColumn2 Numeric column coordinate of the last cell + * @param int $pRow2 Numeric row coordinate of the last cell + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function mergeCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1) + { + $cellRange = PHPExcel_Cell::stringFromColumnIndex($pColumn1) . $pRow1 . ':' . PHPExcel_Cell::stringFromColumnIndex($pColumn2) . $pRow2; + return $this->mergeCells($cellRange); + } + + /** + * Remove merge on a cell range + * + * @param string $pRange Cell range (e.g. A1:E1) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function unmergeCells($pRange = 'A1:A1') + { + // Uppercase coordinate + $pRange = strtoupper($pRange); + + if (strpos($pRange,':') !== false) { + if (isset($this->_mergeCells[$pRange])) { + unset($this->_mergeCells[$pRange]); + } else { + throw new PHPExcel_Exception('Cell range ' . $pRange . ' not known as merged.'); + } + } else { + throw new PHPExcel_Exception('Merge can only be removed from a range of cells.'); + } + + return $this; + } + + /** + * Remove merge on a cell range by using numeric cell coordinates + * + * @param int $pColumn1 Numeric column coordinate of the first cell + * @param int $pRow1 Numeric row coordinate of the first cell + * @param int $pColumn2 Numeric column coordinate of the last cell + * @param int $pRow2 Numeric row coordinate of the last cell + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function unmergeCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1) + { + $cellRange = PHPExcel_Cell::stringFromColumnIndex($pColumn1) . $pRow1 . ':' . PHPExcel_Cell::stringFromColumnIndex($pColumn2) . $pRow2; + return $this->unmergeCells($cellRange); + } + + /** + * Get merge cells array. + * + * @return array[] + */ + public function getMergeCells() + { + return $this->_mergeCells; + } + + /** + * Set merge cells array for the entire sheet. Use instead mergeCells() to merge + * a single cell range. + * + * @param array + */ + public function setMergeCells($pValue = array()) + { + $this->_mergeCells = $pValue; + + return $this; + } + + /** + * Set protection on a cell range + * + * @param string $pRange Cell (e.g. A1) or cell range (e.g. A1:E1) + * @param string $pPassword Password to unlock the protection + * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function protectCells($pRange = 'A1', $pPassword = '', $pAlreadyHashed = false) + { + // Uppercase coordinate + $pRange = strtoupper($pRange); + + if (!$pAlreadyHashed) { + $pPassword = PHPExcel_Shared_PasswordHasher::hashPassword($pPassword); + } + $this->_protectedCells[$pRange] = $pPassword; + + return $this; + } + + /** + * Set protection on a cell range by using numeric cell coordinates + * + * @param int $pColumn1 Numeric column coordinate of the first cell + * @param int $pRow1 Numeric row coordinate of the first cell + * @param int $pColumn2 Numeric column coordinate of the last cell + * @param int $pRow2 Numeric row coordinate of the last cell + * @param string $pPassword Password to unlock the protection + * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function protectCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1, $pPassword = '', $pAlreadyHashed = false) + { + $cellRange = PHPExcel_Cell::stringFromColumnIndex($pColumn1) . $pRow1 . ':' . PHPExcel_Cell::stringFromColumnIndex($pColumn2) . $pRow2; + return $this->protectCells($cellRange, $pPassword, $pAlreadyHashed); + } + + /** + * Remove protection on a cell range + * + * @param string $pRange Cell (e.g. A1) or cell range (e.g. A1:E1) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function unprotectCells($pRange = 'A1') + { + // Uppercase coordinate + $pRange = strtoupper($pRange); + + if (isset($this->_protectedCells[$pRange])) { + unset($this->_protectedCells[$pRange]); + } else { + throw new PHPExcel_Exception('Cell range ' . $pRange . ' not known as protected.'); + } + return $this; + } + + /** + * Remove protection on a cell range by using numeric cell coordinates + * + * @param int $pColumn1 Numeric column coordinate of the first cell + * @param int $pRow1 Numeric row coordinate of the first cell + * @param int $pColumn2 Numeric column coordinate of the last cell + * @param int $pRow2 Numeric row coordinate of the last cell + * @param string $pPassword Password to unlock the protection + * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function unprotectCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1, $pPassword = '', $pAlreadyHashed = false) + { + $cellRange = PHPExcel_Cell::stringFromColumnIndex($pColumn1) . $pRow1 . ':' . PHPExcel_Cell::stringFromColumnIndex($pColumn2) . $pRow2; + return $this->unprotectCells($cellRange, $pPassword, $pAlreadyHashed); + } + + /** + * Get protected cells + * + * @return array[] + */ + public function getProtectedCells() + { + return $this->_protectedCells; + } + + /** + * Get Autofilter + * + * @return PHPExcel_Worksheet_AutoFilter + */ + public function getAutoFilter() + { + return $this->_autoFilter; + } + + /** + * Set AutoFilter + * + * @param PHPExcel_Worksheet_AutoFilter|string $pValue + * A simple string containing a Cell range like 'A1:E10' is permitted for backward compatibility + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setAutoFilter($pValue) + { + if (is_string($pValue)) { + $this->_autoFilter->setRange($pValue); + } elseif(is_object($pValue) && ($pValue instanceof PHPExcel_Worksheet_AutoFilter)) { + $this->_autoFilter = $pValue; + } + return $this; + } + + /** + * Set Autofilter Range by using numeric cell coordinates + * + * @param integer $pColumn1 Numeric column coordinate of the first cell + * @param integer $pRow1 Numeric row coordinate of the first cell + * @param integer $pColumn2 Numeric column coordinate of the second cell + * @param integer $pRow2 Numeric row coordinate of the second cell + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setAutoFilterByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1) + { + return $this->setAutoFilter( + PHPExcel_Cell::stringFromColumnIndex($pColumn1) . $pRow1 + . ':' . + PHPExcel_Cell::stringFromColumnIndex($pColumn2) . $pRow2 + ); + } + + /** + * Remove autofilter + * + * @return PHPExcel_Worksheet + */ + public function removeAutoFilter() + { + $this->_autoFilter->setRange(NULL); + return $this; + } + + /** + * Get Freeze Pane + * + * @return string + */ + public function getFreezePane() + { + return $this->_freezePane; + } + + /** + * Freeze Pane + * + * @param string $pCell Cell (i.e. A2) + * Examples: + * A2 will freeze the rows above cell A2 (i.e row 1) + * B1 will freeze the columns to the left of cell B1 (i.e column A) + * B2 will freeze the rows above and to the left of cell A2 + * (i.e row 1 and column A) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function freezePane($pCell = '') + { + // Uppercase coordinate + $pCell = strtoupper($pCell); + + if (strpos($pCell,':') === false && strpos($pCell,',') === false) { + $this->_freezePane = $pCell; + } else { + throw new PHPExcel_Exception('Freeze pane can not be set on a range of cells.'); + } + return $this; + } + + /** + * Freeze Pane by using numeric cell coordinates + * + * @param int $pColumn Numeric column coordinate of the cell + * @param int $pRow Numeric row coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function freezePaneByColumnAndRow($pColumn = 0, $pRow = 1) + { + return $this->freezePane(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow); + } + + /** + * Unfreeze Pane + * + * @return PHPExcel_Worksheet + */ + public function unfreezePane() + { + return $this->freezePane(''); + } + + /** + * Insert a new row, updating all possible related data + * + * @param int $pBefore Insert before this one + * @param int $pNumRows Number of rows to insert + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function insertNewRowBefore($pBefore = 1, $pNumRows = 1) { + if ($pBefore >= 1) { + $objReferenceHelper = PHPExcel_ReferenceHelper::getInstance(); + $objReferenceHelper->insertNewBefore('A' . $pBefore, 0, $pNumRows, $this); + } else { + throw new PHPExcel_Exception("Rows can only be inserted before at least row 1."); + } + return $this; + } + + /** + * Insert a new column, updating all possible related data + * + * @param int $pBefore Insert before this one + * @param int $pNumCols Number of columns to insert + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function insertNewColumnBefore($pBefore = 'A', $pNumCols = 1) { + if (!is_numeric($pBefore)) { + $objReferenceHelper = PHPExcel_ReferenceHelper::getInstance(); + $objReferenceHelper->insertNewBefore($pBefore . '1', $pNumCols, 0, $this); + } else { + throw new PHPExcel_Exception("Column references should not be numeric."); + } + return $this; + } + + /** + * Insert a new column, updating all possible related data + * + * @param int $pBefore Insert before this one (numeric column coordinate of the cell) + * @param int $pNumCols Number of columns to insert + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function insertNewColumnBeforeByIndex($pBefore = 0, $pNumCols = 1) { + if ($pBefore >= 0) { + return $this->insertNewColumnBefore(PHPExcel_Cell::stringFromColumnIndex($pBefore), $pNumCols); + } else { + throw new PHPExcel_Exception("Columns can only be inserted before at least column A (0)."); + } + } + + /** + * Delete a row, updating all possible related data + * + * @param int $pRow Remove starting with this one + * @param int $pNumRows Number of rows to remove + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function removeRow($pRow = 1, $pNumRows = 1) { + if ($pRow >= 1) { + $objReferenceHelper = PHPExcel_ReferenceHelper::getInstance(); + $objReferenceHelper->insertNewBefore('A' . ($pRow + $pNumRows), 0, -$pNumRows, $this); + } else { + throw new PHPExcel_Exception("Rows to be deleted should at least start from row 1."); + } + return $this; + } + + /** + * Remove a column, updating all possible related data + * + * @param int $pColumn Remove starting with this one + * @param int $pNumCols Number of columns to remove + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function removeColumn($pColumn = 'A', $pNumCols = 1) { + if (!is_numeric($pColumn)) { + $pColumn = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::columnIndexFromString($pColumn) - 1 + $pNumCols); + $objReferenceHelper = PHPExcel_ReferenceHelper::getInstance(); + $objReferenceHelper->insertNewBefore($pColumn . '1', -$pNumCols, 0, $this); + } else { + throw new PHPExcel_Exception("Column references should not be numeric."); + } + return $this; + } + + /** + * Remove a column, updating all possible related data + * + * @param int $pColumn Remove starting with this one (numeric column coordinate of the cell) + * @param int $pNumCols Number of columns to remove + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function removeColumnByIndex($pColumn = 0, $pNumCols = 1) { + if ($pColumn >= 0) { + return $this->removeColumn(PHPExcel_Cell::stringFromColumnIndex($pColumn), $pNumCols); + } else { + throw new PHPExcel_Exception("Columns to be deleted should at least start from column 0"); + } + } + + /** + * Show gridlines? + * + * @return boolean + */ + public function getShowGridlines() { + return $this->_showGridlines; + } + + /** + * Set show gridlines + * + * @param boolean $pValue Show gridlines (true/false) + * @return PHPExcel_Worksheet + */ + public function setShowGridlines($pValue = false) { + $this->_showGridlines = $pValue; + return $this; + } + + /** + * Print gridlines? + * + * @return boolean + */ + public function getPrintGridlines() { + return $this->_printGridlines; + } + + /** + * Set print gridlines + * + * @param boolean $pValue Print gridlines (true/false) + * @return PHPExcel_Worksheet + */ + public function setPrintGridlines($pValue = false) { + $this->_printGridlines = $pValue; + return $this; + } + + /** + * Show row and column headers? + * + * @return boolean + */ + public function getShowRowColHeaders() { + return $this->_showRowColHeaders; + } + + /** + * Set show row and column headers + * + * @param boolean $pValue Show row and column headers (true/false) + * @return PHPExcel_Worksheet + */ + public function setShowRowColHeaders($pValue = false) { + $this->_showRowColHeaders = $pValue; + return $this; + } + + /** + * Show summary below? (Row/Column outlining) + * + * @return boolean + */ + public function getShowSummaryBelow() { + return $this->_showSummaryBelow; + } + + /** + * Set show summary below + * + * @param boolean $pValue Show summary below (true/false) + * @return PHPExcel_Worksheet + */ + public function setShowSummaryBelow($pValue = true) { + $this->_showSummaryBelow = $pValue; + return $this; + } + + /** + * Show summary right? (Row/Column outlining) + * + * @return boolean + */ + public function getShowSummaryRight() { + return $this->_showSummaryRight; + } + + /** + * Set show summary right + * + * @param boolean $pValue Show summary right (true/false) + * @return PHPExcel_Worksheet + */ + public function setShowSummaryRight($pValue = true) { + $this->_showSummaryRight = $pValue; + return $this; + } + + /** + * Get comments + * + * @return PHPExcel_Comment[] + */ + public function getComments() + { + return $this->_comments; + } + + /** + * Set comments array for the entire sheet. + * + * @param array of PHPExcel_Comment + * @return PHPExcel_Worksheet + */ + public function setComments($pValue = array()) + { + $this->_comments = $pValue; + + return $this; + } + + /** + * Get comment for cell + * + * @param string $pCellCoordinate Cell coordinate to get comment for + * @return PHPExcel_Comment + * @throws PHPExcel_Exception + */ + public function getComment($pCellCoordinate = 'A1') + { + // Uppercase coordinate + $pCellCoordinate = strtoupper($pCellCoordinate); + + if (strpos($pCellCoordinate,':') !== false || strpos($pCellCoordinate,',') !== false) { + throw new PHPExcel_Exception('Cell coordinate string can not be a range of cells.'); + } else if (strpos($pCellCoordinate,'$') !== false) { + throw new PHPExcel_Exception('Cell coordinate string must not be absolute.'); + } else if ($pCellCoordinate == '') { + throw new PHPExcel_Exception('Cell coordinate can not be zero-length string.'); + } else { + // Check if we already have a comment for this cell. + // If not, create a new comment. + if (isset($this->_comments[$pCellCoordinate])) { + return $this->_comments[$pCellCoordinate]; + } else { + $newComment = new PHPExcel_Comment(); + $this->_comments[$pCellCoordinate] = $newComment; + return $newComment; + } + } + } + + /** + * Get comment for cell by using numeric cell coordinates + * + * @param int $pColumn Numeric column coordinate of the cell + * @param int $pRow Numeric row coordinate of the cell + * @return PHPExcel_Comment + */ + public function getCommentByColumnAndRow($pColumn = 0, $pRow = 1) + { + return $this->getComment(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow); + } + + /** + * Get selected cell + * + * @deprecated + * @return string + */ + public function getSelectedCell() + { + return $this->getSelectedCells(); + } + + /** + * Get active cell + * + * @return string Example: 'A1' + */ + public function getActiveCell() + { + return $this->_activeCell; + } + + /** + * Get selected cells + * + * @return string + */ + public function getSelectedCells() + { + return $this->_selectedCells; + } + + /** + * Selected cell + * + * @param string $pCoordinate Cell (i.e. A1) + * @return PHPExcel_Worksheet + */ + public function setSelectedCell($pCoordinate = 'A1') + { + return $this->setSelectedCells($pCoordinate); + } + + /** + * Select a range of cells. + * + * @param string $pCoordinate Cell range, examples: 'A1', 'B2:G5', 'A:C', '3:6' + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setSelectedCells($pCoordinate = 'A1') + { + // Uppercase coordinate + $pCoordinate = strtoupper($pCoordinate); + + // Convert 'A' to 'A:A' + $pCoordinate = preg_replace('/^([A-Z]+)$/', '${1}:${1}', $pCoordinate); + + // Convert '1' to '1:1' + $pCoordinate = preg_replace('/^([0-9]+)$/', '${1}:${1}', $pCoordinate); + + // Convert 'A:C' to 'A1:C1048576' + $pCoordinate = preg_replace('/^([A-Z]+):([A-Z]+)$/', '${1}1:${2}1048576', $pCoordinate); + + // Convert '1:3' to 'A1:XFD3' + $pCoordinate = preg_replace('/^([0-9]+):([0-9]+)$/', 'A${1}:XFD${2}', $pCoordinate); + + if (strpos($pCoordinate,':') !== false || strpos($pCoordinate,',') !== false) { + list($first, ) = PHPExcel_Cell::splitRange($pCoordinate); + $this->_activeCell = $first[0]; + } else { + $this->_activeCell = $pCoordinate; + } + $this->_selectedCells = $pCoordinate; + return $this; + } + + /** + * Selected cell by using numeric cell coordinates + * + * @param int $pColumn Numeric column coordinate of the cell + * @param int $pRow Numeric row coordinate of the cell + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function setSelectedCellByColumnAndRow($pColumn = 0, $pRow = 1) + { + return $this->setSelectedCells(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow); + } + + /** + * Get right-to-left + * + * @return boolean + */ + public function getRightToLeft() { + return $this->_rightToLeft; + } + + /** + * Set right-to-left + * + * @param boolean $value Right-to-left true/false + * @return PHPExcel_Worksheet + */ + public function setRightToLeft($value = false) { + $this->_rightToLeft = $value; + return $this; + } + + /** + * Fill worksheet from values in array + * + * @param array $source Source array + * @param mixed $nullValue Value in source array that stands for blank cell + * @param string $startCell Insert array starting from this cell address as the top left coordinate + * @param boolean $strictNullComparison Apply strict comparison when testing for null values in the array + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet + */ + public function fromArray($source = null, $nullValue = null, $startCell = 'A1', $strictNullComparison = false) { + if (is_array($source)) { + // Convert a 1-D array to 2-D (for ease of looping) + if (!is_array(end($source))) { + $source = array($source); + } + + // start coordinate + list ($startColumn, $startRow) = PHPExcel_Cell::coordinateFromString($startCell); + + // Loop through $source + foreach ($source as $rowData) { + $currentColumn = $startColumn; + foreach($rowData as $cellValue) { + if ($strictNullComparison) { + if ($cellValue !== $nullValue) { + // Set cell value + $this->getCell($currentColumn . $startRow)->setValue($cellValue); + } + } else { + if ($cellValue != $nullValue) { + // Set cell value + $this->getCell($currentColumn . $startRow)->setValue($cellValue); + } + } + ++$currentColumn; + } + ++$startRow; + } + } else { + throw new PHPExcel_Exception("Parameter \$source should be an array."); + } + return $this; + } + + /** + * Create array from a range of cells + * + * @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1") + * @param mixed $nullValue Value returned in the array entry if a cell doesn't exist + * @param boolean $calculateFormulas Should formulas be calculated? + * @param boolean $formatData Should formatting be applied to cell values? + * @param boolean $returnCellRef False - Return a simple array of rows and columns indexed by number counting from zero + * True - Return rows and columns indexed by their actual row and column IDs + * @return array + */ + public function rangeToArray($pRange = 'A1', $nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false) { + // Returnvalue + $returnValue = array(); + // Identify the range that we need to extract from the worksheet + list($rangeStart, $rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange); + $minCol = PHPExcel_Cell::stringFromColumnIndex($rangeStart[0] -1); + $minRow = $rangeStart[1]; + $maxCol = PHPExcel_Cell::stringFromColumnIndex($rangeEnd[0] -1); + $maxRow = $rangeEnd[1]; + + $maxCol++; + // Loop through rows + $r = -1; + for ($row = $minRow; $row <= $maxRow; ++$row) { + $rRef = ($returnCellRef) ? $row : ++$r; + $c = -1; + // Loop through columns in the current row + for ($col = $minCol; $col != $maxCol; ++$col) { + $cRef = ($returnCellRef) ? $col : ++$c; + // Using getCell() will create a new cell if it doesn't already exist. We don't want that to happen + // so we test and retrieve directly against _cellCollection + if ($this->_cellCollection->isDataSet($col.$row)) { + // Cell exists + $cell = $this->_cellCollection->getCacheData($col.$row); + if ($cell->getValue() !== null) { + if ($cell->getValue() instanceof PHPExcel_RichText) { + $returnValue[$rRef][$cRef] = $cell->getValue()->getPlainText(); + } else { + if ($calculateFormulas) { + $returnValue[$rRef][$cRef] = $cell->getCalculatedValue(); + } else { + $returnValue[$rRef][$cRef] = $cell->getValue(); + } + } + + if ($formatData) { + $style = $this->_parent->getCellXfByIndex($cell->getXfIndex()); + $returnValue[$rRef][$cRef] = PHPExcel_Style_NumberFormat::toFormattedString( + $returnValue[$rRef][$cRef], + ($style && $style->getNumberFormat()) ? + $style->getNumberFormat()->getFormatCode() : + PHPExcel_Style_NumberFormat::FORMAT_GENERAL + ); + } + } else { + // Cell holds a NULL + $returnValue[$rRef][$cRef] = $nullValue; + } + } else { + // Cell doesn't exist + $returnValue[$rRef][$cRef] = $nullValue; + } + } + } + + // Return + return $returnValue; + } + + + /** + * Create array from a range of cells + * + * @param string $pNamedRange Name of the Named Range + * @param mixed $nullValue Value returned in the array entry if a cell doesn't exist + * @param boolean $calculateFormulas Should formulas be calculated? + * @param boolean $formatData Should formatting be applied to cell values? + * @param boolean $returnCellRef False - Return a simple array of rows and columns indexed by number counting from zero + * True - Return rows and columns indexed by their actual row and column IDs + * @return array + * @throws PHPExcel_Exception + */ + public function namedRangeToArray($pNamedRange = '', $nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false) { + $namedRange = PHPExcel_NamedRange::resolveRange($pNamedRange, $this); + if ($namedRange !== NULL) { + $pWorkSheet = $namedRange->getWorksheet(); + $pCellRange = $namedRange->getRange(); + + return $pWorkSheet->rangeToArray( $pCellRange, + $nullValue, $calculateFormulas, $formatData, $returnCellRef); + } + + throw new PHPExcel_Exception('Named Range '.$pNamedRange.' does not exist.'); + } + + + /** + * Create array from worksheet + * + * @param mixed $nullValue Value returned in the array entry if a cell doesn't exist + * @param boolean $calculateFormulas Should formulas be calculated? + * @param boolean $formatData Should formatting be applied to cell values? + * @param boolean $returnCellRef False - Return a simple array of rows and columns indexed by number counting from zero + * True - Return rows and columns indexed by their actual row and column IDs + * @return array + */ + public function toArray($nullValue = null, $calculateFormulas = true, $formatData = true, $returnCellRef = false) { + // Garbage collect... + $this->garbageCollect(); + + // Identify the range that we need to extract from the worksheet + $maxCol = $this->getHighestColumn(); + $maxRow = $this->getHighestRow(); + // Return + return $this->rangeToArray( 'A1:'.$maxCol.$maxRow, + $nullValue, $calculateFormulas, $formatData, $returnCellRef); + } + + /** + * Get row iterator + * + * @param integer $startRow The row number at which to start iterating + * @return PHPExcel_Worksheet_RowIterator + */ + public function getRowIterator($startRow = 1) { + return new PHPExcel_Worksheet_RowIterator($this,$startRow); + } + + /** + * Run PHPExcel garabage collector. + * + * @return PHPExcel_Worksheet + */ + public function garbageCollect() { + // Flush cache + $this->_cellCollection->getCacheData('A1'); + // Build a reference table from images +// $imageCoordinates = array(); +// $iterator = $this->getDrawingCollection()->getIterator(); +// while ($iterator->valid()) { +// $imageCoordinates[$iterator->current()->getCoordinates()] = true; +// +// $iterator->next(); +// } +// + // Lookup highest column and highest row if cells are cleaned + $colRow = $this->_cellCollection->getHighestRowAndColumn(); + $highestRow = $colRow['row']; + $highestColumn = PHPExcel_Cell::columnIndexFromString($colRow['column']); + + // Loop through column dimensions + foreach ($this->_columnDimensions as $dimension) { + $highestColumn = max($highestColumn,PHPExcel_Cell::columnIndexFromString($dimension->getColumnIndex())); + } + + // Loop through row dimensions + foreach ($this->_rowDimensions as $dimension) { + $highestRow = max($highestRow,$dimension->getRowIndex()); + } + + // Cache values + if ($highestColumn < 0) { + $this->_cachedHighestColumn = 'A'; + } else { + $this->_cachedHighestColumn = PHPExcel_Cell::stringFromColumnIndex(--$highestColumn); + } + $this->_cachedHighestRow = $highestRow; + + // Return + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + if ($this->_dirty) { + $this->_hash = md5( $this->_title . + $this->_autoFilter . + ($this->_protection->isProtectionEnabled() ? 't' : 'f') . + __CLASS__ + ); + $this->_dirty = false; + } + return $this->_hash; + } + + /** + * Extract worksheet title from range. + * + * Example: extractSheetTitle("testSheet!A1") ==> 'A1' + * Example: extractSheetTitle("'testSheet 1'!A1", true) ==> array('testSheet 1', 'A1'); + * + * @param string $pRange Range to extract title from + * @param bool $returnRange Return range? (see example) + * @return mixed + */ + public static function extractSheetTitle($pRange, $returnRange = false) { + // Sheet title included? + if (($sep = strpos($pRange, '!')) === false) { + return ''; + } + + if ($returnRange) { + return array( trim(substr($pRange, 0, $sep),"'"), + substr($pRange, $sep + 1) + ); + } + + return substr($pRange, $sep + 1); + } + + /** + * Get hyperlink + * + * @param string $pCellCoordinate Cell coordinate to get hyperlink for + */ + public function getHyperlink($pCellCoordinate = 'A1') + { + // return hyperlink if we already have one + if (isset($this->_hyperlinkCollection[$pCellCoordinate])) { + return $this->_hyperlinkCollection[$pCellCoordinate]; + } + + // else create hyperlink + $this->_hyperlinkCollection[$pCellCoordinate] = new PHPExcel_Cell_Hyperlink(); + return $this->_hyperlinkCollection[$pCellCoordinate]; + } + + /** + * Set hyperlnk + * + * @param string $pCellCoordinate Cell coordinate to insert hyperlink + * @param PHPExcel_Cell_Hyperlink $pHyperlink + * @return PHPExcel_Worksheet + */ + public function setHyperlink($pCellCoordinate = 'A1', PHPExcel_Cell_Hyperlink $pHyperlink = null) + { + if ($pHyperlink === null) { + unset($this->_hyperlinkCollection[$pCellCoordinate]); + } else { + $this->_hyperlinkCollection[$pCellCoordinate] = $pHyperlink; + } + return $this; + } + + /** + * Hyperlink at a specific coordinate exists? + * + * @param string $pCoordinate + * @return boolean + */ + public function hyperlinkExists($pCoordinate = 'A1') + { + return isset($this->_hyperlinkCollection[$pCoordinate]); + } + + /** + * Get collection of hyperlinks + * + * @return PHPExcel_Cell_Hyperlink[] + */ + public function getHyperlinkCollection() + { + return $this->_hyperlinkCollection; + } + + /** + * Get data validation + * + * @param string $pCellCoordinate Cell coordinate to get data validation for + */ + public function getDataValidation($pCellCoordinate = 'A1') + { + // return data validation if we already have one + if (isset($this->_dataValidationCollection[$pCellCoordinate])) { + return $this->_dataValidationCollection[$pCellCoordinate]; + } + + // else create data validation + $this->_dataValidationCollection[$pCellCoordinate] = new PHPExcel_Cell_DataValidation(); + return $this->_dataValidationCollection[$pCellCoordinate]; + } + + /** + * Set data validation + * + * @param string $pCellCoordinate Cell coordinate to insert data validation + * @param PHPExcel_Cell_DataValidation $pDataValidation + * @return PHPExcel_Worksheet + */ + public function setDataValidation($pCellCoordinate = 'A1', PHPExcel_Cell_DataValidation $pDataValidation = null) + { + if ($pDataValidation === null) { + unset($this->_dataValidationCollection[$pCellCoordinate]); + } else { + $this->_dataValidationCollection[$pCellCoordinate] = $pDataValidation; + } + return $this; + } + + /** + * Data validation at a specific coordinate exists? + * + * @param string $pCoordinate + * @return boolean + */ + public function dataValidationExists($pCoordinate = 'A1') + { + return isset($this->_dataValidationCollection[$pCoordinate]); + } + + /** + * Get collection of data validations + * + * @return PHPExcel_Cell_DataValidation[] + */ + public function getDataValidationCollection() + { + return $this->_dataValidationCollection; + } + + /** + * Accepts a range, returning it as a range that falls within the current highest row and column of the worksheet + * + * @param string $range + * @return string Adjusted range value + */ + public function shrinkRangeToFit($range) { + $maxCol = $this->getHighestColumn(); + $maxRow = $this->getHighestRow(); + $maxCol = PHPExcel_Cell::columnIndexFromString($maxCol); + + $rangeBlocks = explode(' ',$range); + foreach ($rangeBlocks as &$rangeSet) { + $rangeBoundaries = PHPExcel_Cell::getRangeBoundaries($rangeSet); + + if (PHPExcel_Cell::columnIndexFromString($rangeBoundaries[0][0]) > $maxCol) { $rangeBoundaries[0][0] = PHPExcel_Cell::stringFromColumnIndex($maxCol); } + if ($rangeBoundaries[0][1] > $maxRow) { $rangeBoundaries[0][1] = $maxRow; } + if (PHPExcel_Cell::columnIndexFromString($rangeBoundaries[1][0]) > $maxCol) { $rangeBoundaries[1][0] = PHPExcel_Cell::stringFromColumnIndex($maxCol); } + if ($rangeBoundaries[1][1] > $maxRow) { $rangeBoundaries[1][1] = $maxRow; } + $rangeSet = $rangeBoundaries[0][0].$rangeBoundaries[0][1].':'.$rangeBoundaries[1][0].$rangeBoundaries[1][1]; + } + unset($rangeSet); + $stRange = implode(' ',$rangeBlocks); + + return $stRange; + } + + /** + * Get tab color + * + * @return PHPExcel_Style_Color + */ + public function getTabColor() + { + if ($this->_tabColor === NULL) + $this->_tabColor = new PHPExcel_Style_Color(); + + return $this->_tabColor; + } + + /** + * Reset tab color + * + * @return PHPExcel_Worksheet + */ + public function resetTabColor() + { + $this->_tabColor = null; + unset($this->_tabColor); + + return $this; + } + + /** + * Tab color set? + * + * @return boolean + */ + public function isTabColorSet() + { + return ($this->_tabColor !== NULL); + } + + /** + * Copy worksheet (!= clone!) + * + * @return PHPExcel_Worksheet + */ + public function copy() { + $copied = clone $this; + + return $copied; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + foreach ($this as $key => $val) { + if ($key == '_parent') { + continue; + } + + if (is_object($val) || (is_array($val))) { + if ($key == '_cellCollection') { + $newCollection = clone $this->_cellCollection; + $newCollection->copyCellCollection($this); + $this->_cellCollection = $newCollection; + } elseif ($key == '_drawingCollection') { + $newCollection = clone $this->_drawingCollection; + $this->_drawingCollection = $newCollection; + } elseif (($key == '_autoFilter') && ($this->_autoFilter instanceof PHPExcel_Worksheet_AutoFilter)) { + $newAutoFilter = clone $this->_autoFilter; + $this->_autoFilter = $newAutoFilter; + $this->_autoFilter->setParent($this); + } else { + $this->{$key} = unserialize(serialize($val)); + } + } + } + } +/** + * Define the code name of the sheet + * + * @param null|string Same rule as Title minus space not allowed (but, like Excel, change silently space to underscore) + * @return objWorksheet + * @throws PHPExcel_Exception + */ + public function setCodeName($pValue=null){ + // Is this a 'rename' or not? + if ($this->getCodeName() == $pValue) { + return $this; + } + $pValue = str_replace(' ', '_', $pValue);//Excel does this automatically without flinching, we are doing the same + // Syntax check + // throw an exception if not valid + self::_checkSheetCodeName($pValue); + + // We use the same code that setTitle to find a valid codeName else not using a space (Excel don't like) but a '_' + + if ($this->getParent()) { + // Is there already such sheet name? + if ($this->getParent()->sheetCodeNameExists($pValue)) { + // Use name, but append with lowest possible integer + + if (PHPExcel_Shared_String::CountCharacters($pValue) > 29) { + $pValue = PHPExcel_Shared_String::Substring($pValue,0,29); + } + $i = 1; + while ($this->getParent()->sheetCodeNameExists($pValue . '_' . $i)) { + ++$i; + if ($i == 10) { + if (PHPExcel_Shared_String::CountCharacters($pValue) > 28) { + $pValue = PHPExcel_Shared_String::Substring($pValue,0,28); + } + } elseif ($i == 100) { + if (PHPExcel_Shared_String::CountCharacters($pValue) > 27) { + $pValue = PHPExcel_Shared_String::Substring($pValue,0,27); + } + } + } + + $pValue = $pValue . '_' . $i;// ok, we have a valid name + //codeName is'nt used in formula : no need to call for an update + //return $this->setTitle($altTitle,$updateFormulaCellReferences); + } + } + + $this->_codeName=$pValue; + return $this; + } + /** + * Return the code name of the sheet + * + * @return null|string + */ + public function getCodeName(){ + return $this->_codeName; + } + /** + * Sheet has a code name ? + * @return boolean + */ + public function hasCodeName(){ + return !(is_null($this->_codeName)); + } +} diff --git a/PHPExcel/Worksheet/AutoFilter.php b/PHPExcel/Worksheet/AutoFilter.php new file mode 100644 index 0000000..03055e1 --- /dev/null +++ b/PHPExcel/Worksheet/AutoFilter.php @@ -0,0 +1,858 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_AutoFilter + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_AutoFilter +{ + /** + * Autofilter Worksheet + * + * @var PHPExcel_Worksheet + */ + private $_workSheet = NULL; + + + /** + * Autofilter Range + * + * @var string + */ + private $_range = ''; + + + /** + * Autofilter Column Ruleset + * + * @var array of PHPExcel_Worksheet_AutoFilter_Column + */ + private $_columns = array(); + + + /** + * Create a new PHPExcel_Worksheet_AutoFilter + * + * @param string $pRange Cell range (i.e. A1:E10) + * @param PHPExcel_Worksheet $pSheet + */ + public function __construct($pRange = '', PHPExcel_Worksheet $pSheet = NULL) + { + $this->_range = $pRange; + $this->_workSheet = $pSheet; + } + + /** + * Get AutoFilter Parent Worksheet + * + * @return PHPExcel_Worksheet + */ + public function getParent() { + return $this->_workSheet; + } + + /** + * Set AutoFilter Parent Worksheet + * + * @param PHPExcel_Worksheet $pSheet + * @return PHPExcel_Worksheet_AutoFilter + */ + public function setParent(PHPExcel_Worksheet $pSheet = NULL) { + $this->_workSheet = $pSheet; + + return $this; + } + + /** + * Get AutoFilter Range + * + * @return string + */ + public function getRange() { + return $this->_range; + } + + /** + * Set AutoFilter Range + * + * @param string $pRange Cell range (i.e. A1:E10) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter + */ + public function setRange($pRange = '') { + // Uppercase coordinate + $cellAddress = explode('!',strtoupper($pRange)); + if (count($cellAddress) > 1) { + list($worksheet,$pRange) = $cellAddress; + } + + if (strpos($pRange,':') !== FALSE) { + $this->_range = $pRange; + } elseif(empty($pRange)) { + $this->_range = ''; + } else { + throw new PHPExcel_Exception('Autofilter must be set on a range of cells.'); + } + + if (empty($pRange)) { + // Discard all column rules + $this->_columns = array(); + } else { + // Discard any column rules that are no longer valid within this range + list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($this->_range); + foreach($this->_columns as $key => $value) { + $colIndex = PHPExcel_Cell::columnIndexFromString($key); + if (($rangeStart[0] > $colIndex) || ($rangeEnd[0] < $colIndex)) { + unset($this->_columns[$key]); + } + } + } + + return $this; + } + + /** + * Get all AutoFilter Columns + * + * @throws PHPExcel_Exception + * @return array of PHPExcel_Worksheet_AutoFilter_Column + */ + public function getColumns() { + return $this->_columns; + } + + /** + * Validate that the specified column is in the AutoFilter range + * + * @param string $column Column name (e.g. A) + * @throws PHPExcel_Exception + * @return integer The column offset within the autofilter range + */ + public function testColumnInRange($column) { + if (empty($this->_range)) { + throw new PHPExcel_Exception("No autofilter range is defined."); + } + + $columnIndex = PHPExcel_Cell::columnIndexFromString($column); + list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($this->_range); + if (($rangeStart[0] > $columnIndex) || ($rangeEnd[0] < $columnIndex)) { + throw new PHPExcel_Exception("Column is outside of current autofilter range."); + } + + return $columnIndex - $rangeStart[0]; + } + + /** + * Get a specified AutoFilter Column Offset within the defined AutoFilter range + * + * @param string $pColumn Column name (e.g. A) + * @throws PHPExcel_Exception + * @return integer The offset of the specified column within the autofilter range + */ + public function getColumnOffset($pColumn) { + return $this->testColumnInRange($pColumn); + } + + /** + * Get a specified AutoFilter Column + * + * @param string $pColumn Column name (e.g. A) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function getColumn($pColumn) { + $this->testColumnInRange($pColumn); + + if (!isset($this->_columns[$pColumn])) { + $this->_columns[$pColumn] = new PHPExcel_Worksheet_AutoFilter_Column($pColumn, $this); + } + + return $this->_columns[$pColumn]; + } + + /** + * Get a specified AutoFilter Column by it's offset + * + * @param integer $pColumnOffset Column offset within range (starting from 0) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function getColumnByOffset($pColumnOffset = 0) { + list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($this->_range); + $pColumn = PHPExcel_Cell::stringFromColumnIndex($rangeStart[0] + $pColumnOffset - 1); + + return $this->getColumn($pColumn); + } + + /** + * Set AutoFilter + * + * @param PHPExcel_Worksheet_AutoFilter_Column|string $pColumn + * A simple string containing a Column ID like 'A' is permitted + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter + */ + public function setColumn($pColumn) + { + if ((is_string($pColumn)) && (!empty($pColumn))) { + $column = $pColumn; + } elseif(is_object($pColumn) && ($pColumn instanceof PHPExcel_Worksheet_AutoFilter_Column)) { + $column = $pColumn->getColumnIndex(); + } else { + throw new PHPExcel_Exception("Column is not within the autofilter range."); + } + $this->testColumnInRange($column); + + if (is_string($pColumn)) { + $this->_columns[$pColumn] = new PHPExcel_Worksheet_AutoFilter_Column($pColumn, $this); + } elseif(is_object($pColumn) && ($pColumn instanceof PHPExcel_Worksheet_AutoFilter_Column)) { + $pColumn->setParent($this); + $this->_columns[$column] = $pColumn; + } + ksort($this->_columns); + + return $this; + } + + /** + * Clear a specified AutoFilter Column + * + * @param string $pColumn Column name (e.g. A) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter + */ + public function clearColumn($pColumn) { + $this->testColumnInRange($pColumn); + + if (isset($this->_columns[$pColumn])) { + unset($this->_columns[$pColumn]); + } + + return $this; + } + + /** + * Shift an AutoFilter Column Rule to a different column + * + * Note: This method bypasses validation of the destination column to ensure it is within this AutoFilter range. + * Nor does it verify whether any column rule already exists at $toColumn, but will simply overrideany existing value. + * Use with caution. + * + * @param string $fromColumn Column name (e.g. A) + * @param string $toColumn Column name (e.g. B) + * @return PHPExcel_Worksheet_AutoFilter + */ + public function shiftColumn($fromColumn=NULL,$toColumn=NULL) { + $fromColumn = strtoupper($fromColumn); + $toColumn = strtoupper($toColumn); + + if (($fromColumn !== NULL) && (isset($this->_columns[$fromColumn])) && ($toColumn !== NULL)) { + $this->_columns[$fromColumn]->setParent(); + $this->_columns[$fromColumn]->setColumnIndex($toColumn); + $this->_columns[$toColumn] = $this->_columns[$fromColumn]; + $this->_columns[$toColumn]->setParent($this); + unset($this->_columns[$fromColumn]); + + ksort($this->_columns); + } + + return $this; + } + + + /** + * Test if cell value is in the defined set of values + * + * @param mixed $cellValue + * @param mixed[] $dataSet + * @return boolean + */ + private static function _filterTestInSimpleDataSet($cellValue,$dataSet) + { + $dataSetValues = $dataSet['filterValues']; + $blanks = $dataSet['blanks']; + if (($cellValue == '') || ($cellValue === NULL)) { + return $blanks; + } + return in_array($cellValue,$dataSetValues); + } + + /** + * Test if cell value is in the defined set of Excel date values + * + * @param mixed $cellValue + * @param mixed[] $dataSet + * @return boolean + */ + private static function _filterTestInDateGroupSet($cellValue,$dataSet) + { + $dateSet = $dataSet['filterValues']; + $blanks = $dataSet['blanks']; + if (($cellValue == '') || ($cellValue === NULL)) { + return $blanks; + } + + if (is_numeric($cellValue)) { + $dateValue = PHPExcel_Shared_Date::ExcelToPHP($cellValue); + if ($cellValue < 1) { + // Just the time part + $dtVal = date('His',$dateValue); + $dateSet = $dateSet['time']; + } elseif($cellValue == floor($cellValue)) { + // Just the date part + $dtVal = date('Ymd',$dateValue); + $dateSet = $dateSet['date']; + } else { + // date and time parts + $dtVal = date('YmdHis',$dateValue); + $dateSet = $dateSet['dateTime']; + } + foreach($dateSet as $dateValue) { + // Use of substr to extract value at the appropriate group level + if (substr($dtVal,0,strlen($dateValue)) == $dateValue) + return TRUE; + } + } + + return FALSE; + } + + /** + * Test if cell value is within a set of values defined by a ruleset + * + * @param mixed $cellValue + * @param mixed[] $ruleSet + * @return boolean + */ + private static function _filterTestInCustomDataSet($cellValue, $ruleSet) + { + $dataSet = $ruleSet['filterRules']; + $join = $ruleSet['join']; + $customRuleForBlanks = isset($ruleSet['customRuleForBlanks']) ? $ruleSet['customRuleForBlanks'] : FALSE; + + if (!$customRuleForBlanks) { + // Blank cells are always ignored, so return a FALSE + if (($cellValue == '') || ($cellValue === NULL)) { + return FALSE; + } + } + $returnVal = ($join == PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND); + foreach($dataSet as $rule) { + if (is_numeric($rule['value'])) { + // Numeric values are tested using the appropriate operator + switch ($rule['operator']) { + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL : + $retVal = ($cellValue == $rule['value']); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_NOTEQUAL : + $retVal = ($cellValue != $rule['value']); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_GREATERTHAN : + $retVal = ($cellValue > $rule['value']); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL : + $retVal = ($cellValue >= $rule['value']); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN : + $retVal = ($cellValue < $rule['value']); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL : + $retVal = ($cellValue <= $rule['value']); + break; + } + } elseif($rule['value'] == '') { + switch ($rule['operator']) { + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL : + $retVal = (($cellValue == '') || ($cellValue === NULL)); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_NOTEQUAL : + $retVal = (($cellValue != '') && ($cellValue !== NULL)); + break; + default : + $retVal = TRUE; + break; + } + } else { + // String values are always tested for equality, factoring in for wildcards (hence a regexp test) + $retVal = preg_match('/^'.$rule['value'].'$/i',$cellValue); + } + // If there are multiple conditions, then we need to test both using the appropriate join operator + switch ($join) { + case PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_OR : + $returnVal = $returnVal || $retVal; + // Break as soon as we have a TRUE match for OR joins, + // to avoid unnecessary additional code execution + if ($returnVal) + return $returnVal; + break; + case PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND : + $returnVal = $returnVal && $retVal; + break; + } + } + + return $returnVal; + } + + /** + * Test if cell date value is matches a set of values defined by a set of months + * + * @param mixed $cellValue + * @param mixed[] $monthSet + * @return boolean + */ + private static function _filterTestInPeriodDateSet($cellValue, $monthSet) + { + // Blank cells are always ignored, so return a FALSE + if (($cellValue == '') || ($cellValue === NULL)) { + return FALSE; + } + + if (is_numeric($cellValue)) { + $dateValue = date('m',PHPExcel_Shared_Date::ExcelToPHP($cellValue)); + if (in_array($dateValue,$monthSet)) { + return TRUE; + } + } + + return FALSE; + } + + /** + * Search/Replace arrays to convert Excel wildcard syntax to a regexp syntax for preg_matching + * + * @var array + */ + private static $_fromReplace = array('\*', '\?', '~~', '~.*', '~.?'); + private static $_toReplace = array('.*', '.', '~', '\*', '\?'); + + + /** + * Convert a dynamic rule daterange to a custom filter range expression for ease of calculation + * + * @param string $dynamicRuleType + * @param PHPExcel_Worksheet_AutoFilter_Column &$filterColumn + * @return mixed[] + */ + private function _dynamicFilterDateRange($dynamicRuleType, &$filterColumn) + { + $rDateType = PHPExcel_Calculation_Functions::getReturnDateType(); + PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC); + $val = $maxVal = NULL; + + $ruleValues = array(); + $baseDate = PHPExcel_Calculation_DateTime::DATENOW(); + // Calculate start/end dates for the required date range based on current date + switch ($dynamicRuleType) { + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK : + $baseDate = strtotime('-7 days',$baseDate); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK : + $baseDate = strtotime('-7 days',$baseDate); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH : + $baseDate = strtotime('-1 month',gmmktime(0,0,0,1,date('m',$baseDate),date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH : + $baseDate = strtotime('+1 month',gmmktime(0,0,0,1,date('m',$baseDate),date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER : + $baseDate = strtotime('-3 month',gmmktime(0,0,0,1,date('m',$baseDate),date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER : + $baseDate = strtotime('+3 month',gmmktime(0,0,0,1,date('m',$baseDate),date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR : + $baseDate = strtotime('-1 year',gmmktime(0,0,0,1,date('m',$baseDate),date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR : + $baseDate = strtotime('+1 year',gmmktime(0,0,0,1,date('m',$baseDate),date('Y',$baseDate))); + break; + } + + switch ($dynamicRuleType) { + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_TODAY : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW : + $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(strtotime('+1 day',$baseDate)); + $val = (int) PHPExcel_Shared_Date::PHPToExcel($baseDate); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE : + $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(strtotime('+1 day',$baseDate)); + $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0,0,0,1,1,date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR : + $maxVal = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0,0,0,31,12,date('Y',$baseDate))); + ++$maxVal; + $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0,0,0,1,1,date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER : + $thisMonth = date('m',$baseDate); + $thisQuarter = floor(--$thisMonth / 3); + $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(gmmktime(0,0,0,date('t',$baseDate),(1+$thisQuarter)*3,date('Y',$baseDate))); + ++$maxVal; + $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0,0,0,1,1+$thisQuarter*3,date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH : + $maxVal = (int) PHPExcel_Shared_Date::PHPtoExcel(gmmktime(0,0,0,date('t',$baseDate),date('m',$baseDate),date('Y',$baseDate))); + ++$maxVal; + $val = (int) PHPExcel_Shared_Date::PHPToExcel(gmmktime(0,0,0,1,date('m',$baseDate),date('Y',$baseDate))); + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK : + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK : + $dayOfWeek = date('w',$baseDate); + $val = (int) PHPExcel_Shared_Date::PHPToExcel($baseDate) - $dayOfWeek; + $maxVal = $val + 7; + break; + } + + switch ($dynamicRuleType) { + // Adjust Today dates for Yesterday and Tomorrow + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY : + --$maxVal; + --$val; + break; + case PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW : + ++$maxVal; + ++$val; + break; + } + + // Set the filter column rule attributes ready for writing + $filterColumn->setAttributes(array( 'val' => $val, + 'maxVal' => $maxVal + ) + ); + + // Set the rules for identifying rows for hide/show + $ruleValues[] = array( 'operator' => PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL, + 'value' => $val + ); + $ruleValues[] = array( 'operator' => PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN, + 'value' => $maxVal + ); + PHPExcel_Calculation_Functions::setReturnDateType($rDateType); + + return array( + 'method' => '_filterTestInCustomDataSet', + 'arguments' => array( 'filterRules' => $ruleValues, + 'join' => PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND + ) + ); + } + + private function _calculateTopTenValue($columnID,$startRow,$endRow,$ruleType,$ruleValue) { + $range = $columnID.$startRow.':'.$columnID.$endRow; + $dataValues = PHPExcel_Calculation_Functions::flattenArray( + $this->_workSheet->rangeToArray($range,NULL,TRUE,FALSE) + ); + + $dataValues = array_filter($dataValues); + if ($ruleType == PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP) { + rsort($dataValues); + } else { + sort($dataValues); + } + + return array_pop(array_slice($dataValues,0,$ruleValue)); + } + + /** + * Apply the AutoFilter rules to the AutoFilter Range + * + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter + */ + public function showHideRows() + { + list($rangeStart,$rangeEnd) = PHPExcel_Cell::rangeBoundaries($this->_range); + + // The heading row should always be visible +// echo 'AutoFilter Heading Row ',$rangeStart[1],' is always SHOWN',PHP_EOL; + $this->_workSheet->getRowDimension($rangeStart[1])->setVisible(TRUE); + + $columnFilterTests = array(); + foreach($this->_columns as $columnID => $filterColumn) { + $rules = $filterColumn->getRules(); + switch ($filterColumn->getFilterType()) { + case PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER : + $ruleValues = array(); + // Build a list of the filter value selections + foreach($rules as $rule) { + $ruleType = $rule->getRuleType(); + $ruleValues[] = $rule->getValue(); + } + // Test if we want to include blanks in our filter criteria + $blanks = FALSE; + $ruleDataSet = array_filter($ruleValues); + if (count($ruleValues) != count($ruleDataSet)) + $blanks = TRUE; + if ($ruleType == PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_FILTER) { + // Filter on absolute values + $columnFilterTests[$columnID] = array( + 'method' => '_filterTestInSimpleDataSet', + 'arguments' => array( 'filterValues' => $ruleDataSet, + 'blanks' => $blanks + ) + ); + } else { + // Filter on date group values + $arguments = array(); + foreach($ruleDataSet as $ruleValue) { + $date = $time = ''; + if ((isset($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_YEAR])) && + ($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_YEAR] !== '')) + $date .= sprintf('%04d',$ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_YEAR]); + if ((isset($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_MONTH])) && + ($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_MONTH] != '')) + $date .= sprintf('%02d',$ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_MONTH]); + if ((isset($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_DAY])) && + ($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_DAY] !== '')) + $date .= sprintf('%02d',$ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_DAY]); + if ((isset($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_HOUR])) && + ($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_HOUR] !== '')) + $time .= sprintf('%02d',$ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_HOUR]); + if ((isset($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_MINUTE])) && + ($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_MINUTE] !== '')) + $time .= sprintf('%02d',$ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_MINUTE]); + if ((isset($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_SECOND])) && + ($ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_SECOND] !== '')) + $time .= sprintf('%02d',$ruleValue[PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_SECOND]); + $dateTime = $date . $time; + $arguments['date'][] = $date; + $arguments['time'][] = $time; + $arguments['dateTime'][] = $dateTime; + } + // Remove empty elements + $arguments['date'] = array_filter($arguments['date']); + $arguments['time'] = array_filter($arguments['time']); + $arguments['dateTime'] = array_filter($arguments['dateTime']); + $columnFilterTests[$columnID] = array( + 'method' => '_filterTestInDateGroupSet', + 'arguments' => array( 'filterValues' => $arguments, + 'blanks' => $blanks + ) + ); + } + break; + case PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER : + $customRuleForBlanks = FALSE; + $ruleValues = array(); + // Build a list of the filter value selections + foreach($rules as $rule) { + $ruleType = $rule->getRuleType(); + $ruleValue = $rule->getValue(); + if (!is_numeric($ruleValue)) { + // Convert to a regexp allowing for regexp reserved characters, wildcards and escaped wildcards + $ruleValue = preg_quote($ruleValue); + $ruleValue = str_replace(self::$_fromReplace,self::$_toReplace,$ruleValue); + if (trim($ruleValue) == '') { + $customRuleForBlanks = TRUE; + $ruleValue = trim($ruleValue); + } + } + $ruleValues[] = array( 'operator' => $rule->getOperator(), + 'value' => $ruleValue + ); + } + $join = $filterColumn->getJoin(); + $columnFilterTests[$columnID] = array( + 'method' => '_filterTestInCustomDataSet', + 'arguments' => array( 'filterRules' => $ruleValues, + 'join' => $join, + 'customRuleForBlanks' => $customRuleForBlanks + ) + ); + break; + case PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER : + $ruleValues = array(); + foreach($rules as $rule) { + // We should only ever have one Dynamic Filter Rule anyway + $dynamicRuleType = $rule->getGrouping(); + if (($dynamicRuleType == PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE) || + ($dynamicRuleType == PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_BELOWAVERAGE)) { + // Number (Average) based + // Calculate the average + $averageFormula = '=AVERAGE('.$columnID.($rangeStart[1]+1).':'.$columnID.$rangeEnd[1].')'; + $average = PHPExcel_Calculation::getInstance()->calculateFormula($averageFormula,NULL,$this->_workSheet->getCell('A1')); + // Set above/below rule based on greaterThan or LessTan + $operator = ($dynamicRuleType === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE) + ? PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_GREATERTHAN + : PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN; + $ruleValues[] = array( 'operator' => $operator, + 'value' => $average + ); + $columnFilterTests[$columnID] = array( + 'method' => '_filterTestInCustomDataSet', + 'arguments' => array( 'filterRules' => $ruleValues, + 'join' => PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_OR + ) + ); + } else { + // Date based + if ($dynamicRuleType{0} == 'M' || $dynamicRuleType{0} == 'Q') { + // Month or Quarter + sscanf($dynamicRuleType,'%[A-Z]%d', $periodType, $period); + if ($periodType == 'M') { + $ruleValues = array($period); + } else { + --$period; + $periodEnd = (1+$period)*3; + $periodStart = 1+$period*3; + $ruleValues = range($periodStart,periodEnd); + } + $columnFilterTests[$columnID] = array( + 'method' => '_filterTestInPeriodDateSet', + 'arguments' => $ruleValues + ); + $filterColumn->setAttributes(array()); + } else { + // Date Range + $columnFilterTests[$columnID] = $this->_dynamicFilterDateRange($dynamicRuleType, $filterColumn); + break; + } + } + } + break; + case PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_TOPTENFILTER : + $ruleValues = array(); + $dataRowCount = $rangeEnd[1] - $rangeStart[1]; + foreach($rules as $rule) { + // We should only ever have one Dynamic Filter Rule anyway + $toptenRuleType = $rule->getGrouping(); + $ruleValue = $rule->getValue(); + $ruleOperator = $rule->getOperator(); + } + if ($ruleOperator === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT) { + $ruleValue = floor($ruleValue * ($dataRowCount / 100)); + } + if ($ruleValue < 1) $ruleValue = 1; + if ($ruleValue > 500) $ruleValue = 500; + + $maxVal = $this->_calculateTopTenValue($columnID,$rangeStart[1]+1,$rangeEnd[1],$toptenRuleType,$ruleValue); + + $operator = ($toptenRuleType == PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP) + ? PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL + : PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL; + $ruleValues[] = array( 'operator' => $operator, + 'value' => $maxVal + ); + $columnFilterTests[$columnID] = array( + 'method' => '_filterTestInCustomDataSet', + 'arguments' => array( 'filterRules' => $ruleValues, + 'join' => PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_OR + ) + ); + $filterColumn->setAttributes( + array('maxVal' => $maxVal) + ); + break; + } + } + +// echo 'Column Filter Test CRITERIA',PHP_EOL; +// var_dump($columnFilterTests); +// + // Execute the column tests for each row in the autoFilter range to determine show/hide, + for ($row = $rangeStart[1]+1; $row <= $rangeEnd[1]; ++$row) { +// echo 'Testing Row = ',$row,PHP_EOL; + $result = TRUE; + foreach($columnFilterTests as $columnID => $columnFilterTest) { +// echo 'Testing cell ',$columnID.$row,PHP_EOL; + $cellValue = $this->_workSheet->getCell($columnID.$row)->getCalculatedValue(); +// echo 'Value is ',$cellValue,PHP_EOL; + // Execute the filter test + $result = $result && + call_user_func_array( + array('PHPExcel_Worksheet_AutoFilter',$columnFilterTest['method']), + array( + $cellValue, + $columnFilterTest['arguments'] + ) + ); +// echo (($result) ? 'VALID' : 'INVALID'),PHP_EOL; + // If filter test has resulted in FALSE, exit the loop straightaway rather than running any more tests + if (!$result) + break; + } + // Set show/hide for the row based on the result of the autoFilter result +// echo (($result) ? 'SHOW' : 'HIDE'),PHP_EOL; + $this->_workSheet->getRowDimension($row)->setVisible($result); + } + + return $this; + } + + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + if ($key == '_workSheet') { + // Detach from worksheet + $this->{$key} = NULL; + } else { + $this->{$key} = clone $value; + } + } elseif ((is_array($value)) && ($key == '_columns')) { + // The columns array of PHPExcel_Worksheet_AutoFilter objects + $this->{$key} = array(); + foreach ($value as $k => $v) { + $this->{$key}[$k] = clone $v; + // attach the new cloned Column to this new cloned Autofilter object + $this->{$key}[$k]->setParent($this); + } + } else { + $this->{$key} = $value; + } + } + } + + /** + * toString method replicates previous behavior by returning the range if object is + * referenced as a property of its parent. + */ + public function __toString() { + return (string) $this->_range; + } + +} diff --git a/PHPExcel/Worksheet/AutoFilter/Column.php b/PHPExcel/Worksheet/AutoFilter/Column.php new file mode 100644 index 0000000..12043d5 --- /dev/null +++ b/PHPExcel/Worksheet/AutoFilter/Column.php @@ -0,0 +1,394 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_AutoFilter_Column + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_AutoFilter_Column +{ + const AUTOFILTER_FILTERTYPE_FILTER = 'filters'; + const AUTOFILTER_FILTERTYPE_CUSTOMFILTER = 'customFilters'; + // Supports no more than 2 rules, with an And/Or join criteria + // if more than 1 rule is defined + const AUTOFILTER_FILTERTYPE_DYNAMICFILTER = 'dynamicFilter'; + // Even though the filter rule is constant, the filtered data can vary + // e.g. filtered by date = TODAY + const AUTOFILTER_FILTERTYPE_TOPTENFILTER = 'top10'; + + /** + * Types of autofilter rules + * + * @var string[] + */ + private static $_filterTypes = array( + // Currently we're not handling + // colorFilter + // extLst + // iconFilter + self::AUTOFILTER_FILTERTYPE_FILTER, + self::AUTOFILTER_FILTERTYPE_CUSTOMFILTER, + self::AUTOFILTER_FILTERTYPE_DYNAMICFILTER, + self::AUTOFILTER_FILTERTYPE_TOPTENFILTER, + ); + + /* Multiple Rule Connections */ + const AUTOFILTER_COLUMN_JOIN_AND = 'and'; + const AUTOFILTER_COLUMN_JOIN_OR = 'or'; + + /** + * Join options for autofilter rules + * + * @var string[] + */ + private static $_ruleJoins = array( + self::AUTOFILTER_COLUMN_JOIN_AND, + self::AUTOFILTER_COLUMN_JOIN_OR, + ); + + /** + * Autofilter + * + * @var PHPExcel_Worksheet_AutoFilter + */ + private $_parent = NULL; + + + /** + * Autofilter Column Index + * + * @var string + */ + private $_columnIndex = ''; + + + /** + * Autofilter Column Filter Type + * + * @var string + */ + private $_filterType = self::AUTOFILTER_FILTERTYPE_FILTER; + + + /** + * Autofilter Multiple Rules And/Or + * + * @var string + */ + private $_join = self::AUTOFILTER_COLUMN_JOIN_OR; + + + /** + * Autofilter Column Rules + * + * @var array of PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + private $_ruleset = array(); + + + /** + * Autofilter Column Dynamic Attributes + * + * @var array of mixed + */ + private $_attributes = array(); + + + /** + * Create a new PHPExcel_Worksheet_AutoFilter_Column + * + * @param string $pColumn Column (e.g. A) + * @param PHPExcel_Worksheet_AutoFilter $pParent Autofilter for this column + */ + public function __construct($pColumn, PHPExcel_Worksheet_AutoFilter $pParent = NULL) + { + $this->_columnIndex = $pColumn; + $this->_parent = $pParent; + } + + /** + * Get AutoFilter Column Index + * + * @return string + */ + public function getColumnIndex() { + return $this->_columnIndex; + } + + /** + * Set AutoFilter Column Index + * + * @param string $pColumn Column (e.g. A) + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function setColumnIndex($pColumn) { + // Uppercase coordinate + $pColumn = strtoupper($pColumn); + if ($this->_parent !== NULL) { + $this->_parent->testColumnInRange($pColumn); + } + + $this->_columnIndex = $pColumn; + + return $this; + } + + /** + * Get this Column's AutoFilter Parent + * + * @return PHPExcel_Worksheet_AutoFilter + */ + public function getParent() { + return $this->_parent; + } + + /** + * Set this Column's AutoFilter Parent + * + * @param PHPExcel_Worksheet_AutoFilter + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function setParent(PHPExcel_Worksheet_AutoFilter $pParent = NULL) { + $this->_parent = $pParent; + + return $this; + } + + /** + * Get AutoFilter Type + * + * @return string + */ + public function getFilterType() { + return $this->_filterType; + } + + /** + * Set AutoFilter Type + * + * @param string $pFilterType + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function setFilterType($pFilterType = self::AUTOFILTER_FILTERTYPE_FILTER) { + if (!in_array($pFilterType,self::$_filterTypes)) { + throw new PHPExcel_Exception('Invalid filter type for column AutoFilter.'); + } + + $this->_filterType = $pFilterType; + + return $this; + } + + /** + * Get AutoFilter Multiple Rules And/Or Join + * + * @return string + */ + public function getJoin() { + return $this->_join; + } + + /** + * Set AutoFilter Multiple Rules And/Or + * + * @param string $pJoin And/Or + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function setJoin($pJoin = self::AUTOFILTER_COLUMN_JOIN_OR) { + // Lowercase And/Or + $pJoin = strtolower($pJoin); + if (!in_array($pJoin,self::$_ruleJoins)) { + throw new PHPExcel_Exception('Invalid rule connection for column AutoFilter.'); + } + + $this->_join = $pJoin; + + return $this; + } + + /** + * Set AutoFilter Attributes + * + * @param string[] $pAttributes + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function setAttributes($pAttributes = array()) { + $this->_attributes = $pAttributes; + + return $this; + } + + /** + * Set An AutoFilter Attribute + * + * @param string $pName Attribute Name + * @param string $pValue Attribute Value + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function setAttribute($pName, $pValue) { + $this->_attributes[$pName] = $pValue; + + return $this; + } + + /** + * Get AutoFilter Column Attributes + * + * @return string + */ + public function getAttributes() { + return $this->_attributes; + } + + /** + * Get specific AutoFilter Column Attribute + * + * @param string $pName Attribute Name + * @return string + */ + public function getAttribute($pName) { + if (isset($this->_attributes[$pName])) + return $this->_attributes[$pName]; + return NULL; + } + + /** + * Get all AutoFilter Column Rules + * + * @throws PHPExcel_Exception + * @return array of PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function getRules() { + return $this->_ruleset; + } + + /** + * Get a specified AutoFilter Column Rule + * + * @param integer $pIndex Rule index in the ruleset array + * @return PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function getRule($pIndex) { + if (!isset($this->_ruleset[$pIndex])) { + $this->_ruleset[$pIndex] = new PHPExcel_Worksheet_AutoFilter_Column_Rule($this); + } + return $this->_ruleset[$pIndex]; + } + + /** + * Create a new AutoFilter Column Rule in the ruleset + * + * @return PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function createRule() { + $this->_ruleset[] = new PHPExcel_Worksheet_AutoFilter_Column_Rule($this); + + return end($this->_ruleset); + } + + /** + * Add a new AutoFilter Column Rule to the ruleset + * + * @param PHPExcel_Worksheet_AutoFilter_Column_Rule $pRule + * @param boolean $returnRule Flag indicating whether the rule object or the column object should be returned + * @return PHPExcel_Worksheet_AutoFilter_Column|PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function addRule(PHPExcel_Worksheet_AutoFilter_Column_Rule $pRule, $returnRule=TRUE) { + $pRule->setParent($this); + $this->_ruleset[] = $pRule; + + return ($returnRule) ? $pRule : $this; + } + + /** + * Delete a specified AutoFilter Column Rule + * If the number of rules is reduced to 1, then we reset And/Or logic to Or + * + * @param integer $pIndex Rule index in the ruleset array + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function deleteRule($pIndex) { + if (isset($this->_ruleset[$pIndex])) { + unset($this->_ruleset[$pIndex]); + // If we've just deleted down to a single rule, then reset And/Or joining to Or + if (count($this->_ruleset) <= 1) { + $this->setJoin(self::AUTOFILTER_COLUMN_JOIN_OR); + } + } + + return $this; + } + + /** + * Delete all AutoFilter Column Rules + * + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function clearRules() { + $this->_ruleset = array(); + $this->setJoin(self::AUTOFILTER_COLUMN_JOIN_OR); + + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + if ($key == '_parent') { + // Detach from autofilter parent + $this->$key = NULL; + } else { + $this->$key = clone $value; + } + } elseif ((is_array($value)) && ($key == '_ruleset')) { + // The columns array of PHPExcel_Worksheet_AutoFilter objects + $this->$key = array(); + foreach ($value as $k => $v) { + $this->$key[$k] = clone $v; + // attach the new cloned Rule to this new cloned Autofilter Cloned object + $this->$key[$k]->setParent($this); + } + } else { + $this->$key = $value; + } + } + } + +} diff --git a/PHPExcel/Worksheet/AutoFilter/Column/Rule.php b/PHPExcel/Worksheet/AutoFilter/Column/Rule.php new file mode 100644 index 0000000..ae33683 --- /dev/null +++ b/PHPExcel/Worksheet/AutoFilter/Column/Rule.php @@ -0,0 +1,464 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_AutoFilter_Column_Rule + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_AutoFilter_Column_Rule +{ + const AUTOFILTER_RULETYPE_FILTER = 'filter'; + const AUTOFILTER_RULETYPE_DATEGROUP = 'dateGroupItem'; + const AUTOFILTER_RULETYPE_CUSTOMFILTER = 'customFilter'; + const AUTOFILTER_RULETYPE_DYNAMICFILTER = 'dynamicFilter'; + const AUTOFILTER_RULETYPE_TOPTENFILTER = 'top10Filter'; + + private static $_ruleTypes = array( + // Currently we're not handling + // colorFilter + // extLst + // iconFilter + self::AUTOFILTER_RULETYPE_FILTER, + self::AUTOFILTER_RULETYPE_DATEGROUP, + self::AUTOFILTER_RULETYPE_CUSTOMFILTER, + self::AUTOFILTER_RULETYPE_DYNAMICFILTER, + self::AUTOFILTER_RULETYPE_TOPTENFILTER, + ); + + const AUTOFILTER_RULETYPE_DATEGROUP_YEAR = 'year'; + const AUTOFILTER_RULETYPE_DATEGROUP_MONTH = 'month'; + const AUTOFILTER_RULETYPE_DATEGROUP_DAY = 'day'; + const AUTOFILTER_RULETYPE_DATEGROUP_HOUR = 'hour'; + const AUTOFILTER_RULETYPE_DATEGROUP_MINUTE = 'minute'; + const AUTOFILTER_RULETYPE_DATEGROUP_SECOND = 'second'; + + private static $_dateTimeGroups = array( + self::AUTOFILTER_RULETYPE_DATEGROUP_YEAR, + self::AUTOFILTER_RULETYPE_DATEGROUP_MONTH, + self::AUTOFILTER_RULETYPE_DATEGROUP_DAY, + self::AUTOFILTER_RULETYPE_DATEGROUP_HOUR, + self::AUTOFILTER_RULETYPE_DATEGROUP_MINUTE, + self::AUTOFILTER_RULETYPE_DATEGROUP_SECOND, + ); + + const AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY = 'yesterday'; + const AUTOFILTER_RULETYPE_DYNAMIC_TODAY = 'today'; + const AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW = 'tomorrow'; + const AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE = 'yearToDate'; + const AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR = 'thisYear'; + const AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER = 'thisQuarter'; + const AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH = 'thisMonth'; + const AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK = 'thisWeek'; + const AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR = 'lastYear'; + const AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER = 'lastQuarter'; + const AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH = 'lastMonth'; + const AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK = 'lastWeek'; + const AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR = 'nextYear'; + const AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER = 'nextQuarter'; + const AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH = 'nextMonth'; + const AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK = 'nextWeek'; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1 = 'M1'; + const AUTOFILTER_RULETYPE_DYNAMIC_JANUARY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2 = 'M2'; + const AUTOFILTER_RULETYPE_DYNAMIC_FEBRUARY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3 = 'M3'; + const AUTOFILTER_RULETYPE_DYNAMIC_MARCH = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4 = 'M4'; + const AUTOFILTER_RULETYPE_DYNAMIC_APRIL = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5 = 'M5'; + const AUTOFILTER_RULETYPE_DYNAMIC_MAY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6 = 'M6'; + const AUTOFILTER_RULETYPE_DYNAMIC_JUNE = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7 = 'M7'; + const AUTOFILTER_RULETYPE_DYNAMIC_JULY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8 = 'M8'; + const AUTOFILTER_RULETYPE_DYNAMIC_AUGUST = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9 = 'M9'; + const AUTOFILTER_RULETYPE_DYNAMIC_SEPTEMBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10 = 'M10'; + const AUTOFILTER_RULETYPE_DYNAMIC_OCTOBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11 = 'M11'; + const AUTOFILTER_RULETYPE_DYNAMIC_NOVEMBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11; + const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12 = 'M12'; + const AUTOFILTER_RULETYPE_DYNAMIC_DECEMBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12; + const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_1 = 'Q1'; + const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_2 = 'Q2'; + const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_3 = 'Q3'; + const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_4 = 'Q4'; + const AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE = 'aboveAverage'; + const AUTOFILTER_RULETYPE_DYNAMIC_BELOWAVERAGE = 'belowAverage'; + + private static $_dynamicTypes = array( + self::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY, + self::AUTOFILTER_RULETYPE_DYNAMIC_TODAY, + self::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW, + self::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE, + self::AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR, + self::AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER, + self::AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH, + self::AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK, + self::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR, + self::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER, + self::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH, + self::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK, + self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR, + self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER, + self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH, + self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11, + self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12, + self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_1, + self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_2, + self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_3, + self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_4, + self::AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE, + self::AUTOFILTER_RULETYPE_DYNAMIC_BELOWAVERAGE, + ); + + /* + * The only valid filter rule operators for filter and customFilter types are: + * <xsd:enumeration value="equal"/> + * <xsd:enumeration value="lessThan"/> + * <xsd:enumeration value="lessThanOrEqual"/> + * <xsd:enumeration value="notEqual"/> + * <xsd:enumeration value="greaterThanOrEqual"/> + * <xsd:enumeration value="greaterThan"/> + */ + const AUTOFILTER_COLUMN_RULE_EQUAL = 'equal'; + const AUTOFILTER_COLUMN_RULE_NOTEQUAL = 'notEqual'; + const AUTOFILTER_COLUMN_RULE_GREATERTHAN = 'greaterThan'; + const AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL = 'greaterThanOrEqual'; + const AUTOFILTER_COLUMN_RULE_LESSTHAN = 'lessThan'; + const AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL = 'lessThanOrEqual'; + + private static $_operators = array( + self::AUTOFILTER_COLUMN_RULE_EQUAL, + self::AUTOFILTER_COLUMN_RULE_NOTEQUAL, + self::AUTOFILTER_COLUMN_RULE_GREATERTHAN, + self::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL, + self::AUTOFILTER_COLUMN_RULE_LESSTHAN, + self::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL, + ); + + const AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE = 'byValue'; + const AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT = 'byPercent'; + + private static $_topTenValue = array( + self::AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE, + self::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT, + ); + + const AUTOFILTER_COLUMN_RULE_TOPTEN_TOP = 'top'; + const AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM = 'bottom'; + + private static $_topTenType = array( + self::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP, + self::AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM, + ); + + + /* Rule Operators (Numeric, Boolean etc) */ +// const AUTOFILTER_COLUMN_RULE_BETWEEN = 'between'; // greaterThanOrEqual 1 && lessThanOrEqual 2 + /* Rule Operators (Numeric Special) which are translated to standard numeric operators with calculated values */ +// const AUTOFILTER_COLUMN_RULE_TOPTEN = 'topTen'; // greaterThan calculated value +// const AUTOFILTER_COLUMN_RULE_TOPTENPERCENT = 'topTenPercent'; // greaterThan calculated value +// const AUTOFILTER_COLUMN_RULE_ABOVEAVERAGE = 'aboveAverage'; // Value is calculated as the average +// const AUTOFILTER_COLUMN_RULE_BELOWAVERAGE = 'belowAverage'; // Value is calculated as the average + /* Rule Operators (String) which are set as wild-carded values */ +// const AUTOFILTER_COLUMN_RULE_BEGINSWITH = 'beginsWith'; // A* +// const AUTOFILTER_COLUMN_RULE_ENDSWITH = 'endsWith'; // *Z +// const AUTOFILTER_COLUMN_RULE_CONTAINS = 'contains'; // *B* +// const AUTOFILTER_COLUMN_RULE_DOESNTCONTAIN = 'notEqual'; // notEqual *B* + /* Rule Operators (Date Special) which are translated to standard numeric operators with calculated values */ +// const AUTOFILTER_COLUMN_RULE_BEFORE = 'lessThan'; +// const AUTOFILTER_COLUMN_RULE_AFTER = 'greaterThan'; +// const AUTOFILTER_COLUMN_RULE_YESTERDAY = 'yesterday'; +// const AUTOFILTER_COLUMN_RULE_TODAY = 'today'; +// const AUTOFILTER_COLUMN_RULE_TOMORROW = 'tomorrow'; +// const AUTOFILTER_COLUMN_RULE_LASTWEEK = 'lastWeek'; +// const AUTOFILTER_COLUMN_RULE_THISWEEK = 'thisWeek'; +// const AUTOFILTER_COLUMN_RULE_NEXTWEEK = 'nextWeek'; +// const AUTOFILTER_COLUMN_RULE_LASTMONTH = 'lastMonth'; +// const AUTOFILTER_COLUMN_RULE_THISMONTH = 'thisMonth'; +// const AUTOFILTER_COLUMN_RULE_NEXTMONTH = 'nextMonth'; +// const AUTOFILTER_COLUMN_RULE_LASTQUARTER = 'lastQuarter'; +// const AUTOFILTER_COLUMN_RULE_THISQUARTER = 'thisQuarter'; +// const AUTOFILTER_COLUMN_RULE_NEXTQUARTER = 'nextQuarter'; +// const AUTOFILTER_COLUMN_RULE_LASTYEAR = 'lastYear'; +// const AUTOFILTER_COLUMN_RULE_THISYEAR = 'thisYear'; +// const AUTOFILTER_COLUMN_RULE_NEXTYEAR = 'nextYear'; +// const AUTOFILTER_COLUMN_RULE_YEARTODATE = 'yearToDate'; // <dynamicFilter val="40909" type="yearToDate" maxVal="41113"/> +// const AUTOFILTER_COLUMN_RULE_ALLDATESINMONTH = 'allDatesInMonth'; // <dynamicFilter type="M2"/> for Month/February +// const AUTOFILTER_COLUMN_RULE_ALLDATESINQUARTER = 'allDatesInQuarter'; // <dynamicFilter type="Q2"/> for Quarter 2 + + /** + * Autofilter Column + * + * @var PHPExcel_Worksheet_AutoFilter_Column + */ + private $_parent = NULL; + + + /** + * Autofilter Rule Type + * + * @var string + */ + private $_ruleType = self::AUTOFILTER_RULETYPE_FILTER; + + + /** + * Autofilter Rule Value + * + * @var string + */ + private $_value = ''; + + /** + * Autofilter Rule Operator + * + * @var string + */ + private $_operator = ''; + + /** + * DateTimeGrouping Group Value + * + * @var string + */ + private $_grouping = ''; + + + /** + * Create a new PHPExcel_Worksheet_AutoFilter_Column_Rule + * + * @param PHPExcel_Worksheet_AutoFilter_Column $pParent + */ + public function __construct(PHPExcel_Worksheet_AutoFilter_Column $pParent = NULL) + { + $this->_parent = $pParent; + } + + /** + * Get AutoFilter Rule Type + * + * @return string + */ + public function getRuleType() { + return $this->_ruleType; + } + + /** + * Set AutoFilter Rule Type + * + * @param string $pRuleType + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function setRuleType($pRuleType = self::AUTOFILTER_RULETYPE_FILTER) { + if (!in_array($pRuleType,self::$_ruleTypes)) { + throw new PHPExcel_Exception('Invalid rule type for column AutoFilter Rule.'); + } + + $this->_ruleType = $pRuleType; + + return $this; + } + + /** + * Get AutoFilter Rule Value + * + * @return string + */ + public function getValue() { + return $this->_value; + } + + /** + * Set AutoFilter Rule Value + * + * @param string|string[] $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function setValue($pValue = '') { + if (is_array($pValue)) { + $grouping = -1; + foreach($pValue as $key => $value) { + // Validate array entries + if (!in_array($key,self::$_dateTimeGroups)) { + // Remove any invalid entries from the value array + unset($pValue[$key]); + } else { + // Work out what the dateTime grouping will be + $grouping = max($grouping,array_search($key,self::$_dateTimeGroups)); + } + } + if (count($pValue) == 0) { + throw new PHPExcel_Exception('Invalid rule value for column AutoFilter Rule.'); + } + // Set the dateTime grouping that we've anticipated + $this->setGrouping(self::$_dateTimeGroups[$grouping]); + } + $this->_value = $pValue; + + return $this; + } + + /** + * Get AutoFilter Rule Operator + * + * @return string + */ + public function getOperator() { + return $this->_operator; + } + + /** + * Set AutoFilter Rule Operator + * + * @param string $pOperator + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function setOperator($pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL) { + if (empty($pOperator)) + $pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL; + if ((!in_array($pOperator,self::$_operators)) && + (!in_array($pOperator,self::$_topTenValue))) { + throw new PHPExcel_Exception('Invalid operator for column AutoFilter Rule.'); + } + $this->_operator = $pOperator; + + return $this; + } + + /** + * Get AutoFilter Rule Grouping + * + * @return string + */ + public function getGrouping() { + return $this->_grouping; + } + + /** + * Set AutoFilter Rule Grouping + * + * @param string $pGrouping + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function setGrouping($pGrouping = NULL) { + if (($pGrouping !== NULL) && + (!in_array($pGrouping,self::$_dateTimeGroups)) && + (!in_array($pGrouping,self::$_dynamicTypes)) && + (!in_array($pGrouping,self::$_topTenType))) { + throw new PHPExcel_Exception('Invalid rule type for column AutoFilter Rule.'); + } + + $this->_grouping = $pGrouping; + + return $this; + } + + /** + * Set AutoFilter Rule + * + * @param string $pOperator + * @param string|string[] $pValue + * @param string $pGrouping + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function setRule($pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL, $pValue = '', $pGrouping = NULL) { + $this->setOperator($pOperator); + $this->setValue($pValue); + // Only set grouping if it's been passed in as a user-supplied argument, + // otherwise we're calculating it when we setValue() and don't want to overwrite that + // If the user supplies an argumnet for grouping, then on their own head be it + if ($pGrouping !== NULL) + $this->setGrouping($pGrouping); + + return $this; + } + + /** + * Get this Rule's AutoFilter Column Parent + * + * @return PHPExcel_Worksheet_AutoFilter_Column + */ + public function getParent() { + return $this->_parent; + } + + /** + * Set this Rule's AutoFilter Column Parent + * + * @param PHPExcel_Worksheet_AutoFilter_Column + * @return PHPExcel_Worksheet_AutoFilter_Column_Rule + */ + public function setParent(PHPExcel_Worksheet_AutoFilter_Column $pParent = NULL) { + $this->_parent = $pParent; + + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + if ($key == '_parent') { + // Detach from autofilter column parent + $this->$key = NULL; + } else { + $this->$key = clone $value; + } + } else { + $this->$key = $value; + } + } + } + +} diff --git a/PHPExcel/Worksheet/BaseDrawing.php b/PHPExcel/Worksheet/BaseDrawing.php new file mode 100644 index 0000000..4db0f88 --- /dev/null +++ b/PHPExcel/Worksheet/BaseDrawing.php @@ -0,0 +1,485 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_BaseDrawing + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_BaseDrawing implements PHPExcel_IComparable +{ + /** + * Image counter + * + * @var int + */ + private static $_imageCounter = 0; + + /** + * Image index + * + * @var int + */ + private $_imageIndex = 0; + + /** + * Name + * + * @var string + */ + protected $_name; + + /** + * Description + * + * @var string + */ + protected $_description; + + /** + * Worksheet + * + * @var PHPExcel_Worksheet + */ + protected $_worksheet; + + /** + * Coordinates + * + * @var string + */ + protected $_coordinates; + + /** + * Offset X + * + * @var int + */ + protected $_offsetX; + + /** + * Offset Y + * + * @var int + */ + protected $_offsetY; + + /** + * Width + * + * @var int + */ + protected $_width; + + /** + * Height + * + * @var int + */ + protected $_height; + + /** + * Proportional resize + * + * @var boolean + */ + protected $_resizeProportional; + + /** + * Rotation + * + * @var int + */ + protected $_rotation; + + /** + * Shadow + * + * @var PHPExcel_Worksheet_Drawing_Shadow + */ + protected $_shadow; + + /** + * Create a new PHPExcel_Worksheet_BaseDrawing + */ + public function __construct() + { + // Initialise values + $this->_name = ''; + $this->_description = ''; + $this->_worksheet = null; + $this->_coordinates = 'A1'; + $this->_offsetX = 0; + $this->_offsetY = 0; + $this->_width = 0; + $this->_height = 0; + $this->_resizeProportional = true; + $this->_rotation = 0; + $this->_shadow = new PHPExcel_Worksheet_Drawing_Shadow(); + + // Set image index + self::$_imageCounter++; + $this->_imageIndex = self::$_imageCounter; + } + + /** + * Get image index + * + * @return int + */ + public function getImageIndex() { + return $this->_imageIndex; + } + + /** + * Get Name + * + * @return string + */ + public function getName() { + return $this->_name; + } + + /** + * Set Name + * + * @param string $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setName($pValue = '') { + $this->_name = $pValue; + return $this; + } + + /** + * Get Description + * + * @return string + */ + public function getDescription() { + return $this->_description; + } + + /** + * Set Description + * + * @param string $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setDescription($pValue = '') { + $this->_description = $pValue; + return $this; + } + + /** + * Get Worksheet + * + * @return PHPExcel_Worksheet + */ + public function getWorksheet() { + return $this->_worksheet; + } + + /** + * Set Worksheet + * + * @param PHPExcel_Worksheet $pValue + * @param bool $pOverrideOld If a Worksheet has already been assigned, overwrite it and remove image from old Worksheet? + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setWorksheet(PHPExcel_Worksheet $pValue = null, $pOverrideOld = false) { + if (is_null($this->_worksheet)) { + // Add drawing to PHPExcel_Worksheet + $this->_worksheet = $pValue; + $this->_worksheet->getCell($this->_coordinates); + $this->_worksheet->getDrawingCollection()->append($this); + } else { + if ($pOverrideOld) { + // Remove drawing from old PHPExcel_Worksheet + $iterator = $this->_worksheet->getDrawingCollection()->getIterator(); + + while ($iterator->valid()) { + if ($iterator->current()->getHashCode() == $this->getHashCode()) { + $this->_worksheet->getDrawingCollection()->offsetUnset( $iterator->key() ); + $this->_worksheet = null; + break; + } + } + + // Set new PHPExcel_Worksheet + $this->setWorksheet($pValue); + } else { + throw new PHPExcel_Exception("A PHPExcel_Worksheet has already been assigned. Drawings can only exist on one PHPExcel_Worksheet."); + } + } + return $this; + } + + /** + * Get Coordinates + * + * @return string + */ + public function getCoordinates() { + return $this->_coordinates; + } + + /** + * Set Coordinates + * + * @param string $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setCoordinates($pValue = 'A1') { + $this->_coordinates = $pValue; + return $this; + } + + /** + * Get OffsetX + * + * @return int + */ + public function getOffsetX() { + return $this->_offsetX; + } + + /** + * Set OffsetX + * + * @param int $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setOffsetX($pValue = 0) { + $this->_offsetX = $pValue; + return $this; + } + + /** + * Get OffsetY + * + * @return int + */ + public function getOffsetY() { + return $this->_offsetY; + } + + /** + * Set OffsetY + * + * @param int $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setOffsetY($pValue = 0) { + $this->_offsetY = $pValue; + return $this; + } + + /** + * Get Width + * + * @return int + */ + public function getWidth() { + return $this->_width; + } + + /** + * Set Width + * + * @param int $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setWidth($pValue = 0) { + // Resize proportional? + if ($this->_resizeProportional && $pValue != 0) { + $ratio = $this->_height / $this->_width; + $this->_height = round($ratio * $pValue); + } + + // Set width + $this->_width = $pValue; + + return $this; + } + + /** + * Get Height + * + * @return int + */ + public function getHeight() { + return $this->_height; + } + + /** + * Set Height + * + * @param int $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setHeight($pValue = 0) { + // Resize proportional? + if ($this->_resizeProportional && $pValue != 0) { + $ratio = $this->_width / $this->_height; + $this->_width = round($ratio * $pValue); + } + + // Set height + $this->_height = $pValue; + + return $this; + } + + /** + * Set width and height with proportional resize + * Example: + * <code> + * $objDrawing->setResizeProportional(true); + * $objDrawing->setWidthAndHeight(160,120); + * </code> + * + * @author Vincent@luo MSN:kele_100@hotmail.com + * @param int $width + * @param int $height + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setWidthAndHeight($width = 0, $height = 0) { + $xratio = $width / $this->_width; + $yratio = $height / $this->_height; + if ($this->_resizeProportional && !($width == 0 || $height == 0)) { + if (($xratio * $this->_height) < $height) { + $this->_height = ceil($xratio * $this->_height); + $this->_width = $width; + } else { + $this->_width = ceil($yratio * $this->_width); + $this->_height = $height; + } + } + return $this; + } + + /** + * Get ResizeProportional + * + * @return boolean + */ + public function getResizeProportional() { + return $this->_resizeProportional; + } + + /** + * Set ResizeProportional + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setResizeProportional($pValue = true) { + $this->_resizeProportional = $pValue; + return $this; + } + + /** + * Get Rotation + * + * @return int + */ + public function getRotation() { + return $this->_rotation; + } + + /** + * Set Rotation + * + * @param int $pValue + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setRotation($pValue = 0) { + $this->_rotation = $pValue; + return $this; + } + + /** + * Get Shadow + * + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function getShadow() { + return $this->_shadow; + } + + /** + * Set Shadow + * + * @param PHPExcel_Worksheet_Drawing_Shadow $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_BaseDrawing + */ + public function setShadow(PHPExcel_Worksheet_Drawing_Shadow $pValue = null) { + $this->_shadow = $pValue; + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_name + . $this->_description + . $this->_worksheet->getHashCode() + . $this->_coordinates + . $this->_offsetX + . $this->_offsetY + . $this->_width + . $this->_height + . $this->_rotation + . $this->_shadow->getHashCode() + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/CellIterator.php b/PHPExcel/Worksheet/CellIterator.php new file mode 100644 index 0000000..4b96816 --- /dev/null +++ b/PHPExcel/Worksheet/CellIterator.php @@ -0,0 +1,161 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_CellIterator + * + * Used to iterate rows in a PHPExcel_Worksheet + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_CellIterator implements Iterator +{ + /** + * PHPExcel_Worksheet to iterate + * + * @var PHPExcel_Worksheet + */ + private $_subject; + + /** + * Row index + * + * @var int + */ + private $_rowIndex; + + /** + * Current iterator position + * + * @var int + */ + private $_position = 0; + + /** + * Loop only existing cells + * + * @var boolean + */ + private $_onlyExistingCells = true; + + /** + * Create a new cell iterator + * + * @param PHPExcel_Worksheet $subject + * @param int $rowIndex + */ + public function __construct(PHPExcel_Worksheet $subject = null, $rowIndex = 1) { + // Set subject and row index + $this->_subject = $subject; + $this->_rowIndex = $rowIndex; + } + + /** + * Destructor + */ + public function __destruct() { + unset($this->_subject); + } + + /** + * Rewind iterator + */ + public function rewind() { + $this->_position = 0; + } + + /** + * Current PHPExcel_Cell + * + * @return PHPExcel_Cell + */ + public function current() { + return $this->_subject->getCellByColumnAndRow($this->_position, $this->_rowIndex); + } + + /** + * Current key + * + * @return int + */ + public function key() { + return $this->_position; + } + + /** + * Next value + */ + public function next() { + ++$this->_position; + } + + /** + * Are there any more PHPExcel_Cell instances available? + * + * @return boolean + */ + public function valid() { + // columnIndexFromString() returns an index based at one, + // treat it as a count when comparing it to the base zero + // position. + $columnCount = PHPExcel_Cell::columnIndexFromString($this->_subject->getHighestColumn()); + + if ($this->_onlyExistingCells) { + // If we aren't looking at an existing cell, either + // because the first column doesn't exist or next() has + // been called onto a nonexistent cell, then loop until we + // find one, or pass the last column. + while ($this->_position < $columnCount && + !$this->_subject->cellExistsByColumnAndRow($this->_position, $this->_rowIndex)) { + ++$this->_position; + } + } + + return $this->_position < $columnCount; + } + + /** + * Get loop only existing cells + * + * @return boolean + */ + public function getIterateOnlyExistingCells() { + return $this->_onlyExistingCells; + } + + /** + * Set the iterator to loop only existing cells + * + * @param boolean $value + */ + public function setIterateOnlyExistingCells($value = true) { + $this->_onlyExistingCells = $value; + } +} diff --git a/PHPExcel/Worksheet/ColumnDimension.php b/PHPExcel/Worksheet/ColumnDimension.php new file mode 100644 index 0000000..79db1c5 --- /dev/null +++ b/PHPExcel/Worksheet/ColumnDimension.php @@ -0,0 +1,266 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_ColumnDimension + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_ColumnDimension +{ + /** + * Column index + * + * @var int + */ + private $_columnIndex; + + /** + * Column width + * + * When this is set to a negative value, the column width should be ignored by IWriter + * + * @var double + */ + private $_width = -1; + + /** + * Auto size? + * + * @var bool + */ + private $_autoSize = false; + + /** + * Visible? + * + * @var bool + */ + private $_visible = true; + + /** + * Outline level + * + * @var int + */ + private $_outlineLevel = 0; + + /** + * Collapsed + * + * @var bool + */ + private $_collapsed = false; + + /** + * Index to cellXf + * + * @var int + */ + private $_xfIndex; + + /** + * Create a new PHPExcel_Worksheet_ColumnDimension + * + * @param string $pIndex Character column index + */ + public function __construct($pIndex = 'A') + { + // Initialise values + $this->_columnIndex = $pIndex; + + // set default index to cellXf + $this->_xfIndex = 0; + } + + /** + * Get ColumnIndex + * + * @return string + */ + public function getColumnIndex() { + return $this->_columnIndex; + } + + /** + * Set ColumnIndex + * + * @param string $pValue + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function setColumnIndex($pValue) { + $this->_columnIndex = $pValue; + return $this; + } + + /** + * Get Width + * + * @return double + */ + public function getWidth() { + return $this->_width; + } + + /** + * Set Width + * + * @param double $pValue + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function setWidth($pValue = -1) { + $this->_width = $pValue; + return $this; + } + + /** + * Get Auto Size + * + * @return bool + */ + public function getAutoSize() { + return $this->_autoSize; + } + + /** + * Set Auto Size + * + * @param bool $pValue + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function setAutoSize($pValue = false) { + $this->_autoSize = $pValue; + return $this; + } + + /** + * Get Visible + * + * @return bool + */ + public function getVisible() { + return $this->_visible; + } + + /** + * Set Visible + * + * @param bool $pValue + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function setVisible($pValue = true) { + $this->_visible = $pValue; + return $this; + } + + /** + * Get Outline Level + * + * @return int + */ + public function getOutlineLevel() { + return $this->_outlineLevel; + } + + /** + * Set Outline Level + * + * Value must be between 0 and 7 + * + * @param int $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function setOutlineLevel($pValue) { + if ($pValue < 0 || $pValue > 7) { + throw new PHPExcel_Exception("Outline level must range between 0 and 7."); + } + + $this->_outlineLevel = $pValue; + return $this; + } + + /** + * Get Collapsed + * + * @return bool + */ + public function getCollapsed() { + return $this->_collapsed; + } + + /** + * Set Collapsed + * + * @param bool $pValue + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function setCollapsed($pValue = true) { + $this->_collapsed = $pValue; + return $this; + } + + /** + * Get index to cellXf + * + * @return int + */ + public function getXfIndex() + { + return $this->_xfIndex; + } + + /** + * Set index to cellXf + * + * @param int $pValue + * @return PHPExcel_Worksheet_ColumnDimension + */ + public function setXfIndex($pValue = 0) + { + $this->_xfIndex = $pValue; + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } + +} diff --git a/PHPExcel/Worksheet/Drawing.php b/PHPExcel/Worksheet/Drawing.php new file mode 100644 index 0000000..56f0cfd --- /dev/null +++ b/PHPExcel/Worksheet/Drawing.php @@ -0,0 +1,148 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet_Drawing + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_Drawing + * + * @category PHPExcel + * @package PHPExcel_Worksheet_Drawing + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_Drawing extends PHPExcel_Worksheet_BaseDrawing implements PHPExcel_IComparable +{ + /** + * Path + * + * @var string + */ + private $_path; + + /** + * Create a new PHPExcel_Worksheet_Drawing + */ + public function __construct() + { + // Initialise values + $this->_path = ''; + + // Initialize parent + parent::__construct(); + } + + /** + * Get Filename + * + * @return string + */ + public function getFilename() { + return basename($this->_path); + } + + /** + * Get indexed filename (using image index) + * + * @return string + */ + public function getIndexedFilename() { + $fileName = $this->getFilename(); + $fileName = str_replace(' ', '_', $fileName); + return str_replace('.' . $this->getExtension(), '', $fileName) . $this->getImageIndex() . '.' . $this->getExtension(); + } + + /** + * Get Extension + * + * @return string + */ + public function getExtension() { + $exploded = explode(".", basename($this->_path)); + return $exploded[count($exploded) - 1]; + } + + /** + * Get Path + * + * @return string + */ + public function getPath() { + return $this->_path; + } + + /** + * Set Path + * + * @param string $pValue File path + * @param boolean $pVerifyFile Verify file + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_Drawing + */ + public function setPath($pValue = '', $pVerifyFile = true) { + if ($pVerifyFile) { + if (file_exists($pValue)) { + $this->_path = $pValue; + + if ($this->_width == 0 && $this->_height == 0) { + // Get width/height + list($this->_width, $this->_height) = getimagesize($pValue); + } + } else { + throw new PHPExcel_Exception("File $pValue not found!"); + } + } else { + $this->_path = $pValue; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_path + . parent::getHashCode() + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/Drawing/Shadow.php b/PHPExcel/Worksheet/Drawing/Shadow.php new file mode 100644 index 0000000..5df4489 --- /dev/null +++ b/PHPExcel/Worksheet/Drawing/Shadow.php @@ -0,0 +1,288 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet_Drawing + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_Drawing_Shadow + * + * @category PHPExcel + * @package PHPExcel_Worksheet_Drawing + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_Drawing_Shadow implements PHPExcel_IComparable +{ + /* Shadow alignment */ + const SHADOW_BOTTOM = 'b'; + const SHADOW_BOTTOM_LEFT = 'bl'; + const SHADOW_BOTTOM_RIGHT = 'br'; + const SHADOW_CENTER = 'ctr'; + const SHADOW_LEFT = 'l'; + const SHADOW_TOP = 't'; + const SHADOW_TOP_LEFT = 'tl'; + const SHADOW_TOP_RIGHT = 'tr'; + + /** + * Visible + * + * @var boolean + */ + private $_visible; + + /** + * Blur radius + * + * Defaults to 6 + * + * @var int + */ + private $_blurRadius; + + /** + * Shadow distance + * + * Defaults to 2 + * + * @var int + */ + private $_distance; + + /** + * Shadow direction (in degrees) + * + * @var int + */ + private $_direction; + + /** + * Shadow alignment + * + * @var int + */ + private $_alignment; + + /** + * Color + * + * @var PHPExcel_Style_Color + */ + private $_color; + + /** + * Alpha + * + * @var int + */ + private $_alpha; + + /** + * Create a new PHPExcel_Worksheet_Drawing_Shadow + */ + public function __construct() + { + // Initialise values + $this->_visible = false; + $this->_blurRadius = 6; + $this->_distance = 2; + $this->_direction = 0; + $this->_alignment = PHPExcel_Worksheet_Drawing_Shadow::SHADOW_BOTTOM_RIGHT; + $this->_color = new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_BLACK); + $this->_alpha = 50; + } + + /** + * Get Visible + * + * @return boolean + */ + public function getVisible() { + return $this->_visible; + } + + /** + * Set Visible + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function setVisible($pValue = false) { + $this->_visible = $pValue; + return $this; + } + + /** + * Get Blur radius + * + * @return int + */ + public function getBlurRadius() { + return $this->_blurRadius; + } + + /** + * Set Blur radius + * + * @param int $pValue + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function setBlurRadius($pValue = 6) { + $this->_blurRadius = $pValue; + return $this; + } + + /** + * Get Shadow distance + * + * @return int + */ + public function getDistance() { + return $this->_distance; + } + + /** + * Set Shadow distance + * + * @param int $pValue + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function setDistance($pValue = 2) { + $this->_distance = $pValue; + return $this; + } + + /** + * Get Shadow direction (in degrees) + * + * @return int + */ + public function getDirection() { + return $this->_direction; + } + + /** + * Set Shadow direction (in degrees) + * + * @param int $pValue + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function setDirection($pValue = 0) { + $this->_direction = $pValue; + return $this; + } + + /** + * Get Shadow alignment + * + * @return int + */ + public function getAlignment() { + return $this->_alignment; + } + + /** + * Set Shadow alignment + * + * @param int $pValue + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function setAlignment($pValue = 0) { + $this->_alignment = $pValue; + return $this; + } + + /** + * Get Color + * + * @return PHPExcel_Style_Color + */ + public function getColor() { + return $this->_color; + } + + /** + * Set Color + * + * @param PHPExcel_Style_Color $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function setColor(PHPExcel_Style_Color $pValue = null) { + $this->_color = $pValue; + return $this; + } + + /** + * Get Alpha + * + * @return int + */ + public function getAlpha() { + return $this->_alpha; + } + + /** + * Set Alpha + * + * @param int $pValue + * @return PHPExcel_Worksheet_Drawing_Shadow + */ + public function setAlpha($pValue = 0) { + $this->_alpha = $pValue; + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + ($this->_visible ? 't' : 'f') + . $this->_blurRadius + . $this->_distance + . $this->_direction + . $this->_alignment + . $this->_color->getHashCode() + . $this->_alpha + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/HeaderFooter.php b/PHPExcel/Worksheet/HeaderFooter.php new file mode 100644 index 0000000..82d7faf --- /dev/null +++ b/PHPExcel/Worksheet/HeaderFooter.php @@ -0,0 +1,465 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_HeaderFooter + * + * <code> + * Header/Footer Formatting Syntax taken from Office Open XML Part 4 - Markup Language Reference, page 1970: + * + * There are a number of formatting codes that can be written inline with the actual header / footer text, which + * affect the formatting in the header or footer. + * + * Example: This example shows the text "Center Bold Header" on the first line (center section), and the date on + * the second line (center section). + * &CCenter &"-,Bold"Bold&"-,Regular"Header_x000A_&D + * + * General Rules: + * There is no required order in which these codes must appear. + * + * The first occurrence of the following codes turns the formatting ON, the second occurrence turns it OFF again: + * - strikethrough + * - superscript + * - subscript + * Superscript and subscript cannot both be ON at same time. Whichever comes first wins and the other is ignored, + * while the first is ON. + * &L - code for "left section" (there are three header / footer locations, "left", "center", and "right"). When + * two or more occurrences of this section marker exist, the contents from all markers are concatenated, in the + * order of appearance, and placed into the left section. + * &P - code for "current page #" + * &N - code for "total pages" + * &font size - code for "text font size", where font size is a font size in points. + * &K - code for "text font color" + * RGB Color is specified as RRGGBB + * Theme Color is specifed as TTSNN where TT is the theme color Id, S is either "+" or "-" of the tint/shade + * value, NN is the tint/shade value. + * &S - code for "text strikethrough" on / off + * &X - code for "text super script" on / off + * &Y - code for "text subscript" on / off + * &C - code for "center section". When two or more occurrences of this section marker exist, the contents + * from all markers are concatenated, in the order of appearance, and placed into the center section. + * + * &D - code for "date" + * &T - code for "time" + * &G - code for "picture as background" + * &U - code for "text single underline" + * &E - code for "double underline" + * &R - code for "right section". When two or more occurrences of this section marker exist, the contents + * from all markers are concatenated, in the order of appearance, and placed into the right section. + * &Z - code for "this workbook's file path" + * &F - code for "this workbook's file name" + * &A - code for "sheet tab name" + * &+ - code for add to page #. + * &- - code for subtract from page #. + * &"font name,font type" - code for "text font name" and "text font type", where font name and font type + * are strings specifying the name and type of the font, separated by a comma. When a hyphen appears in font + * name, it means "none specified". Both of font name and font type can be localized values. + * &"-,Bold" - code for "bold font style" + * &B - also means "bold font style". + * &"-,Regular" - code for "regular font style" + * &"-,Italic" - code for "italic font style" + * &I - also means "italic font style" + * &"-,Bold Italic" code for "bold italic font style" + * &O - code for "outline style" + * &H - code for "shadow style" + * </code> + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_HeaderFooter +{ + /* Header/footer image location */ + const IMAGE_HEADER_LEFT = 'LH'; + const IMAGE_HEADER_CENTER = 'CH'; + const IMAGE_HEADER_RIGHT = 'RH'; + const IMAGE_FOOTER_LEFT = 'LF'; + const IMAGE_FOOTER_CENTER = 'CF'; + const IMAGE_FOOTER_RIGHT = 'RF'; + + /** + * OddHeader + * + * @var string + */ + private $_oddHeader = ''; + + /** + * OddFooter + * + * @var string + */ + private $_oddFooter = ''; + + /** + * EvenHeader + * + * @var string + */ + private $_evenHeader = ''; + + /** + * EvenFooter + * + * @var string + */ + private $_evenFooter = ''; + + /** + * FirstHeader + * + * @var string + */ + private $_firstHeader = ''; + + /** + * FirstFooter + * + * @var string + */ + private $_firstFooter = ''; + + /** + * Different header for Odd/Even, defaults to false + * + * @var boolean + */ + private $_differentOddEven = false; + + /** + * Different header for first page, defaults to false + * + * @var boolean + */ + private $_differentFirst = false; + + /** + * Scale with document, defaults to true + * + * @var boolean + */ + private $_scaleWithDocument = true; + + /** + * Align with margins, defaults to true + * + * @var boolean + */ + private $_alignWithMargins = true; + + /** + * Header/footer images + * + * @var PHPExcel_Worksheet_HeaderFooterDrawing[] + */ + private $_headerFooterImages = array(); + + /** + * Create a new PHPExcel_Worksheet_HeaderFooter + */ + public function __construct() + { + } + + /** + * Get OddHeader + * + * @return string + */ + public function getOddHeader() { + return $this->_oddHeader; + } + + /** + * Set OddHeader + * + * @param string $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setOddHeader($pValue) { + $this->_oddHeader = $pValue; + return $this; + } + + /** + * Get OddFooter + * + * @return string + */ + public function getOddFooter() { + return $this->_oddFooter; + } + + /** + * Set OddFooter + * + * @param string $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setOddFooter($pValue) { + $this->_oddFooter = $pValue; + return $this; + } + + /** + * Get EvenHeader + * + * @return string + */ + public function getEvenHeader() { + return $this->_evenHeader; + } + + /** + * Set EvenHeader + * + * @param string $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setEvenHeader($pValue) { + $this->_evenHeader = $pValue; + return $this; + } + + /** + * Get EvenFooter + * + * @return string + */ + public function getEvenFooter() { + return $this->_evenFooter; + } + + /** + * Set EvenFooter + * + * @param string $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setEvenFooter($pValue) { + $this->_evenFooter = $pValue; + return $this; + } + + /** + * Get FirstHeader + * + * @return string + */ + public function getFirstHeader() { + return $this->_firstHeader; + } + + /** + * Set FirstHeader + * + * @param string $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setFirstHeader($pValue) { + $this->_firstHeader = $pValue; + return $this; + } + + /** + * Get FirstFooter + * + * @return string + */ + public function getFirstFooter() { + return $this->_firstFooter; + } + + /** + * Set FirstFooter + * + * @param string $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setFirstFooter($pValue) { + $this->_firstFooter = $pValue; + return $this; + } + + /** + * Get DifferentOddEven + * + * @return boolean + */ + public function getDifferentOddEven() { + return $this->_differentOddEven; + } + + /** + * Set DifferentOddEven + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setDifferentOddEven($pValue = false) { + $this->_differentOddEven = $pValue; + return $this; + } + + /** + * Get DifferentFirst + * + * @return boolean + */ + public function getDifferentFirst() { + return $this->_differentFirst; + } + + /** + * Set DifferentFirst + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setDifferentFirst($pValue = false) { + $this->_differentFirst = $pValue; + return $this; + } + + /** + * Get ScaleWithDocument + * + * @return boolean + */ + public function getScaleWithDocument() { + return $this->_scaleWithDocument; + } + + /** + * Set ScaleWithDocument + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setScaleWithDocument($pValue = true) { + $this->_scaleWithDocument = $pValue; + return $this; + } + + /** + * Get AlignWithMargins + * + * @return boolean + */ + public function getAlignWithMargins() { + return $this->_alignWithMargins; + } + + /** + * Set AlignWithMargins + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setAlignWithMargins($pValue = true) { + $this->_alignWithMargins = $pValue; + return $this; + } + + /** + * Add header/footer image + * + * @param PHPExcel_Worksheet_HeaderFooterDrawing $image + * @param string $location + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function addImage(PHPExcel_Worksheet_HeaderFooterDrawing $image = null, $location = self::IMAGE_HEADER_LEFT) { + $this->_headerFooterImages[$location] = $image; + return $this; + } + + /** + * Remove header/footer image + * + * @param string $location + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function removeImage($location = self::IMAGE_HEADER_LEFT) { + if (isset($this->_headerFooterImages[$location])) { + unset($this->_headerFooterImages[$location]); + } + return $this; + } + + /** + * Set header/footer images + * + * @param PHPExcel_Worksheet_HeaderFooterDrawing[] $images + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setImages($images) { + if (!is_array($images)) { + throw new PHPExcel_Exception('Invalid parameter!'); + } + + $this->_headerFooterImages = $images; + return $this; + } + + /** + * Get header/footer images + * + * @return PHPExcel_Worksheet_HeaderFooterDrawing[] + */ + public function getImages() { + // Sort array + $images = array(); + if (isset($this->_headerFooterImages[self::IMAGE_HEADER_LEFT])) $images[self::IMAGE_HEADER_LEFT] = $this->_headerFooterImages[self::IMAGE_HEADER_LEFT]; + if (isset($this->_headerFooterImages[self::IMAGE_HEADER_CENTER])) $images[self::IMAGE_HEADER_CENTER] = $this->_headerFooterImages[self::IMAGE_HEADER_CENTER]; + if (isset($this->_headerFooterImages[self::IMAGE_HEADER_RIGHT])) $images[self::IMAGE_HEADER_RIGHT] = $this->_headerFooterImages[self::IMAGE_HEADER_RIGHT]; + if (isset($this->_headerFooterImages[self::IMAGE_FOOTER_LEFT])) $images[self::IMAGE_FOOTER_LEFT] = $this->_headerFooterImages[self::IMAGE_FOOTER_LEFT]; + if (isset($this->_headerFooterImages[self::IMAGE_FOOTER_CENTER])) $images[self::IMAGE_FOOTER_CENTER] = $this->_headerFooterImages[self::IMAGE_FOOTER_CENTER]; + if (isset($this->_headerFooterImages[self::IMAGE_FOOTER_RIGHT])) $images[self::IMAGE_FOOTER_RIGHT] = $this->_headerFooterImages[self::IMAGE_FOOTER_RIGHT]; + $this->_headerFooterImages = $images; + + return $this->_headerFooterImages; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/HeaderFooterDrawing.php b/PHPExcel/Worksheet/HeaderFooterDrawing.php new file mode 100644 index 0000000..1c6f4e1 --- /dev/null +++ b/PHPExcel/Worksheet/HeaderFooterDrawing.php @@ -0,0 +1,350 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_HeaderFooterDrawing + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_HeaderFooterDrawing extends PHPExcel_Worksheet_Drawing implements PHPExcel_IComparable +{ + /** + * Path + * + * @var string + */ + private $_path; + + /** + * Name + * + * @var string + */ + protected $_name; + + /** + * Offset X + * + * @var int + */ + protected $_offsetX; + + /** + * Offset Y + * + * @var int + */ + protected $_offsetY; + + /** + * Width + * + * @var int + */ + protected $_width; + + /** + * Height + * + * @var int + */ + protected $_height; + + /** + * Proportional resize + * + * @var boolean + */ + protected $_resizeProportional; + + /** + * Create a new PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function __construct() + { + // Initialise values + $this->_path = ''; + $this->_name = ''; + $this->_offsetX = 0; + $this->_offsetY = 0; + $this->_width = 0; + $this->_height = 0; + $this->_resizeProportional = true; + } + + /** + * Get Name + * + * @return string + */ + public function getName() { + return $this->_name; + } + + /** + * Set Name + * + * @param string $pValue + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setName($pValue = '') { + $this->_name = $pValue; + return $this; + } + + /** + * Get OffsetX + * + * @return int + */ + public function getOffsetX() { + return $this->_offsetX; + } + + /** + * Set OffsetX + * + * @param int $pValue + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setOffsetX($pValue = 0) { + $this->_offsetX = $pValue; + return $this; + } + + /** + * Get OffsetY + * + * @return int + */ + public function getOffsetY() { + return $this->_offsetY; + } + + /** + * Set OffsetY + * + * @param int $pValue + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setOffsetY($pValue = 0) { + $this->_offsetY = $pValue; + return $this; + } + + /** + * Get Width + * + * @return int + */ + public function getWidth() { + return $this->_width; + } + + /** + * Set Width + * + * @param int $pValue + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setWidth($pValue = 0) { + // Resize proportional? + if ($this->_resizeProportional && $pValue != 0) { + $ratio = $this->_width / $this->_height; + $this->_height = round($ratio * $pValue); + } + + // Set width + $this->_width = $pValue; + + return $this; + } + + /** + * Get Height + * + * @return int + */ + public function getHeight() { + return $this->_height; + } + + /** + * Set Height + * + * @param int $pValue + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setHeight($pValue = 0) { + // Resize proportional? + if ($this->_resizeProportional && $pValue != 0) { + $ratio = $this->_width / $this->_height; + $this->_width = round($ratio * $pValue); + } + + // Set height + $this->_height = $pValue; + + return $this; + } + + /** + * Set width and height with proportional resize + * Example: + * <code> + * $objDrawing->setResizeProportional(true); + * $objDrawing->setWidthAndHeight(160,120); + * </code> + * + * @author Vincent@luo MSN:kele_100@hotmail.com + * @param int $width + * @param int $height + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setWidthAndHeight($width = 0, $height = 0) { + $xratio = $width / $this->_width; + $yratio = $height / $this->_height; + if ($this->_resizeProportional && !($width == 0 || $height == 0)) { + if (($xratio * $this->_height) < $height) { + $this->_height = ceil($xratio * $this->_height); + $this->_width = $width; + } else { + $this->_width = ceil($yratio * $this->_width); + $this->_height = $height; + } + } + return $this; + } + + /** + * Get ResizeProportional + * + * @return boolean + */ + public function getResizeProportional() { + return $this->_resizeProportional; + } + + /** + * Set ResizeProportional + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setResizeProportional($pValue = true) { + $this->_resizeProportional = $pValue; + return $this; + } + + /** + * Get Filename + * + * @return string + */ + public function getFilename() { + return basename($this->_path); + } + + /** + * Get Extension + * + * @return string + */ + public function getExtension() { + $parts = explode(".", basename($this->_path)); + return end($parts); + } + + /** + * Get Path + * + * @return string + */ + public function getPath() { + return $this->_path; + } + + /** + * Set Path + * + * @param string $pValue File path + * @param boolean $pVerifyFile Verify file + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_HeaderFooterDrawing + */ + public function setPath($pValue = '', $pVerifyFile = true) { + if ($pVerifyFile) { + if (file_exists($pValue)) { + $this->_path = $pValue; + + if ($this->_width == 0 && $this->_height == 0) { + // Get width/height + list($this->_width, $this->_height) = getimagesize($pValue); + } + } else { + throw new PHPExcel_Exception("File $pValue not found!"); + } + } else { + $this->_path = $pValue; + } + return $this; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_path + . $this->_name + . $this->_offsetX + . $this->_offsetY + . $this->_width + . $this->_height + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/MemoryDrawing.php b/PHPExcel/Worksheet/MemoryDrawing.php new file mode 100644 index 0000000..93266d2 --- /dev/null +++ b/PHPExcel/Worksheet/MemoryDrawing.php @@ -0,0 +1,200 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_MemoryDrawing + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_MemoryDrawing extends PHPExcel_Worksheet_BaseDrawing implements PHPExcel_IComparable +{ + /* Rendering functions */ + const RENDERING_DEFAULT = 'imagepng'; + const RENDERING_PNG = 'imagepng'; + const RENDERING_GIF = 'imagegif'; + const RENDERING_JPEG = 'imagejpeg'; + + /* MIME types */ + const MIMETYPE_DEFAULT = 'image/png'; + const MIMETYPE_PNG = 'image/png'; + const MIMETYPE_GIF = 'image/gif'; + const MIMETYPE_JPEG = 'image/jpeg'; + + /** + * Image resource + * + * @var resource + */ + private $_imageResource; + + /** + * Rendering function + * + * @var string + */ + private $_renderingFunction; + + /** + * Mime type + * + * @var string + */ + private $_mimeType; + + /** + * Unique name + * + * @var string + */ + private $_uniqueName; + + /** + * Create a new PHPExcel_Worksheet_MemoryDrawing + */ + public function __construct() + { + // Initialise values + $this->_imageResource = null; + $this->_renderingFunction = self::RENDERING_DEFAULT; + $this->_mimeType = self::MIMETYPE_DEFAULT; + $this->_uniqueName = md5(rand(0, 9999). time() . rand(0, 9999)); + + // Initialize parent + parent::__construct(); + } + + /** + * Get image resource + * + * @return resource + */ + public function getImageResource() { + return $this->_imageResource; + } + + /** + * Set image resource + * + * @param $value resource + * @return PHPExcel_Worksheet_MemoryDrawing + */ + public function setImageResource($value = null) { + $this->_imageResource = $value; + + if (!is_null($this->_imageResource)) { + // Get width/height + $this->_width = imagesx($this->_imageResource); + $this->_height = imagesy($this->_imageResource); + } + return $this; + } + + /** + * Get rendering function + * + * @return string + */ + public function getRenderingFunction() { + return $this->_renderingFunction; + } + + /** + * Set rendering function + * + * @param string $value + * @return PHPExcel_Worksheet_MemoryDrawing + */ + public function setRenderingFunction($value = PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT) { + $this->_renderingFunction = $value; + return $this; + } + + /** + * Get mime type + * + * @return string + */ + public function getMimeType() { + return $this->_mimeType; + } + + /** + * Set mime type + * + * @param string $value + * @return PHPExcel_Worksheet_MemoryDrawing + */ + public function setMimeType($value = PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT) { + $this->_mimeType = $value; + return $this; + } + + /** + * Get indexed filename (using image index) + * + * @return string + */ + public function getIndexedFilename() { + $extension = strtolower($this->getMimeType()); + $extension = explode('/', $extension); + $extension = $extension[1]; + + return $this->_uniqueName . $this->getImageIndex() . '.' . $extension; + } + + /** + * Get hash code + * + * @return string Hash code + */ + public function getHashCode() { + return md5( + $this->_renderingFunction + . $this->_mimeType + . $this->_uniqueName + . parent::getHashCode() + . __CLASS__ + ); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/PageMargins.php b/PHPExcel/Worksheet/PageMargins.php new file mode 100644 index 0000000..671711f --- /dev/null +++ b/PHPExcel/Worksheet/PageMargins.php @@ -0,0 +1,220 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_PageMargins + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_PageMargins +{ + /** + * Left + * + * @var double + */ + private $_left = 0.7; + + /** + * Right + * + * @var double + */ + private $_right = 0.7; + + /** + * Top + * + * @var double + */ + private $_top = 0.75; + + /** + * Bottom + * + * @var double + */ + private $_bottom = 0.75; + + /** + * Header + * + * @var double + */ + private $_header = 0.3; + + /** + * Footer + * + * @var double + */ + private $_footer = 0.3; + + /** + * Create a new PHPExcel_Worksheet_PageMargins + */ + public function __construct() + { + } + + /** + * Get Left + * + * @return double + */ + public function getLeft() { + return $this->_left; + } + + /** + * Set Left + * + * @param double $pValue + * @return PHPExcel_Worksheet_PageMargins + */ + public function setLeft($pValue) { + $this->_left = $pValue; + return $this; + } + + /** + * Get Right + * + * @return double + */ + public function getRight() { + return $this->_right; + } + + /** + * Set Right + * + * @param double $pValue + * @return PHPExcel_Worksheet_PageMargins + */ + public function setRight($pValue) { + $this->_right = $pValue; + return $this; + } + + /** + * Get Top + * + * @return double + */ + public function getTop() { + return $this->_top; + } + + /** + * Set Top + * + * @param double $pValue + * @return PHPExcel_Worksheet_PageMargins + */ + public function setTop($pValue) { + $this->_top = $pValue; + return $this; + } + + /** + * Get Bottom + * + * @return double + */ + public function getBottom() { + return $this->_bottom; + } + + /** + * Set Bottom + * + * @param double $pValue + * @return PHPExcel_Worksheet_PageMargins + */ + public function setBottom($pValue) { + $this->_bottom = $pValue; + return $this; + } + + /** + * Get Header + * + * @return double + */ + public function getHeader() { + return $this->_header; + } + + /** + * Set Header + * + * @param double $pValue + * @return PHPExcel_Worksheet_PageMargins + */ + public function setHeader($pValue) { + $this->_header = $pValue; + return $this; + } + + /** + * Get Footer + * + * @return double + */ + public function getFooter() { + return $this->_footer; + } + + /** + * Set Footer + * + * @param double $pValue + * @return PHPExcel_Worksheet_PageMargins + */ + public function setFooter($pValue) { + $this->_footer = $pValue; + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/PageSetup.php b/PHPExcel/Worksheet/PageSetup.php new file mode 100644 index 0000000..9512dbe --- /dev/null +++ b/PHPExcel/Worksheet/PageSetup.php @@ -0,0 +1,798 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_PageSetup + * + * <code> + * Paper size taken from Office Open XML Part 4 - Markup Language Reference, page 1988: + * + * 1 = Letter paper (8.5 in. by 11 in.) + * 2 = Letter small paper (8.5 in. by 11 in.) + * 3 = Tabloid paper (11 in. by 17 in.) + * 4 = Ledger paper (17 in. by 11 in.) + * 5 = Legal paper (8.5 in. by 14 in.) + * 6 = Statement paper (5.5 in. by 8.5 in.) + * 7 = Executive paper (7.25 in. by 10.5 in.) + * 8 = A3 paper (297 mm by 420 mm) + * 9 = A4 paper (210 mm by 297 mm) + * 10 = A4 small paper (210 mm by 297 mm) + * 11 = A5 paper (148 mm by 210 mm) + * 12 = B4 paper (250 mm by 353 mm) + * 13 = B5 paper (176 mm by 250 mm) + * 14 = Folio paper (8.5 in. by 13 in.) + * 15 = Quarto paper (215 mm by 275 mm) + * 16 = Standard paper (10 in. by 14 in.) + * 17 = Standard paper (11 in. by 17 in.) + * 18 = Note paper (8.5 in. by 11 in.) + * 19 = #9 envelope (3.875 in. by 8.875 in.) + * 20 = #10 envelope (4.125 in. by 9.5 in.) + * 21 = #11 envelope (4.5 in. by 10.375 in.) + * 22 = #12 envelope (4.75 in. by 11 in.) + * 23 = #14 envelope (5 in. by 11.5 in.) + * 24 = C paper (17 in. by 22 in.) + * 25 = D paper (22 in. by 34 in.) + * 26 = E paper (34 in. by 44 in.) + * 27 = DL envelope (110 mm by 220 mm) + * 28 = C5 envelope (162 mm by 229 mm) + * 29 = C3 envelope (324 mm by 458 mm) + * 30 = C4 envelope (229 mm by 324 mm) + * 31 = C6 envelope (114 mm by 162 mm) + * 32 = C65 envelope (114 mm by 229 mm) + * 33 = B4 envelope (250 mm by 353 mm) + * 34 = B5 envelope (176 mm by 250 mm) + * 35 = B6 envelope (176 mm by 125 mm) + * 36 = Italy envelope (110 mm by 230 mm) + * 37 = Monarch envelope (3.875 in. by 7.5 in.). + * 38 = 6 3/4 envelope (3.625 in. by 6.5 in.) + * 39 = US standard fanfold (14.875 in. by 11 in.) + * 40 = German standard fanfold (8.5 in. by 12 in.) + * 41 = German legal fanfold (8.5 in. by 13 in.) + * 42 = ISO B4 (250 mm by 353 mm) + * 43 = Japanese double postcard (200 mm by 148 mm) + * 44 = Standard paper (9 in. by 11 in.) + * 45 = Standard paper (10 in. by 11 in.) + * 46 = Standard paper (15 in. by 11 in.) + * 47 = Invite envelope (220 mm by 220 mm) + * 50 = Letter extra paper (9.275 in. by 12 in.) + * 51 = Legal extra paper (9.275 in. by 15 in.) + * 52 = Tabloid extra paper (11.69 in. by 18 in.) + * 53 = A4 extra paper (236 mm by 322 mm) + * 54 = Letter transverse paper (8.275 in. by 11 in.) + * 55 = A4 transverse paper (210 mm by 297 mm) + * 56 = Letter extra transverse paper (9.275 in. by 12 in.) + * 57 = SuperA/SuperA/A4 paper (227 mm by 356 mm) + * 58 = SuperB/SuperB/A3 paper (305 mm by 487 mm) + * 59 = Letter plus paper (8.5 in. by 12.69 in.) + * 60 = A4 plus paper (210 mm by 330 mm) + * 61 = A5 transverse paper (148 mm by 210 mm) + * 62 = JIS B5 transverse paper (182 mm by 257 mm) + * 63 = A3 extra paper (322 mm by 445 mm) + * 64 = A5 extra paper (174 mm by 235 mm) + * 65 = ISO B5 extra paper (201 mm by 276 mm) + * 66 = A2 paper (420 mm by 594 mm) + * 67 = A3 transverse paper (297 mm by 420 mm) + * 68 = A3 extra transverse paper (322 mm by 445 mm) + * </code> + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_PageSetup +{ + /* Paper size */ + const PAPERSIZE_LETTER = 1; + const PAPERSIZE_LETTER_SMALL = 2; + const PAPERSIZE_TABLOID = 3; + const PAPERSIZE_LEDGER = 4; + const PAPERSIZE_LEGAL = 5; + const PAPERSIZE_STATEMENT = 6; + const PAPERSIZE_EXECUTIVE = 7; + const PAPERSIZE_A3 = 8; + const PAPERSIZE_A4 = 9; + const PAPERSIZE_A4_SMALL = 10; + const PAPERSIZE_A5 = 11; + const PAPERSIZE_B4 = 12; + const PAPERSIZE_B5 = 13; + const PAPERSIZE_FOLIO = 14; + const PAPERSIZE_QUARTO = 15; + const PAPERSIZE_STANDARD_1 = 16; + const PAPERSIZE_STANDARD_2 = 17; + const PAPERSIZE_NOTE = 18; + const PAPERSIZE_NO9_ENVELOPE = 19; + const PAPERSIZE_NO10_ENVELOPE = 20; + const PAPERSIZE_NO11_ENVELOPE = 21; + const PAPERSIZE_NO12_ENVELOPE = 22; + const PAPERSIZE_NO14_ENVELOPE = 23; + const PAPERSIZE_C = 24; + const PAPERSIZE_D = 25; + const PAPERSIZE_E = 26; + const PAPERSIZE_DL_ENVELOPE = 27; + const PAPERSIZE_C5_ENVELOPE = 28; + const PAPERSIZE_C3_ENVELOPE = 29; + const PAPERSIZE_C4_ENVELOPE = 30; + const PAPERSIZE_C6_ENVELOPE = 31; + const PAPERSIZE_C65_ENVELOPE = 32; + const PAPERSIZE_B4_ENVELOPE = 33; + const PAPERSIZE_B5_ENVELOPE = 34; + const PAPERSIZE_B6_ENVELOPE = 35; + const PAPERSIZE_ITALY_ENVELOPE = 36; + const PAPERSIZE_MONARCH_ENVELOPE = 37; + const PAPERSIZE_6_3_4_ENVELOPE = 38; + const PAPERSIZE_US_STANDARD_FANFOLD = 39; + const PAPERSIZE_GERMAN_STANDARD_FANFOLD = 40; + const PAPERSIZE_GERMAN_LEGAL_FANFOLD = 41; + const PAPERSIZE_ISO_B4 = 42; + const PAPERSIZE_JAPANESE_DOUBLE_POSTCARD = 43; + const PAPERSIZE_STANDARD_PAPER_1 = 44; + const PAPERSIZE_STANDARD_PAPER_2 = 45; + const PAPERSIZE_STANDARD_PAPER_3 = 46; + const PAPERSIZE_INVITE_ENVELOPE = 47; + const PAPERSIZE_LETTER_EXTRA_PAPER = 48; + const PAPERSIZE_LEGAL_EXTRA_PAPER = 49; + const PAPERSIZE_TABLOID_EXTRA_PAPER = 50; + const PAPERSIZE_A4_EXTRA_PAPER = 51; + const PAPERSIZE_LETTER_TRANSVERSE_PAPER = 52; + const PAPERSIZE_A4_TRANSVERSE_PAPER = 53; + const PAPERSIZE_LETTER_EXTRA_TRANSVERSE_PAPER = 54; + const PAPERSIZE_SUPERA_SUPERA_A4_PAPER = 55; + const PAPERSIZE_SUPERB_SUPERB_A3_PAPER = 56; + const PAPERSIZE_LETTER_PLUS_PAPER = 57; + const PAPERSIZE_A4_PLUS_PAPER = 58; + const PAPERSIZE_A5_TRANSVERSE_PAPER = 59; + const PAPERSIZE_JIS_B5_TRANSVERSE_PAPER = 60; + const PAPERSIZE_A3_EXTRA_PAPER = 61; + const PAPERSIZE_A5_EXTRA_PAPER = 62; + const PAPERSIZE_ISO_B5_EXTRA_PAPER = 63; + const PAPERSIZE_A2_PAPER = 64; + const PAPERSIZE_A3_TRANSVERSE_PAPER = 65; + const PAPERSIZE_A3_EXTRA_TRANSVERSE_PAPER = 66; + + /* Page orientation */ + const ORIENTATION_DEFAULT = 'default'; + const ORIENTATION_LANDSCAPE = 'landscape'; + const ORIENTATION_PORTRAIT = 'portrait'; + + /* Print Range Set Method */ + const SETPRINTRANGE_OVERWRITE = 'O'; + const SETPRINTRANGE_INSERT = 'I'; + + + /** + * Paper size + * + * @var int + */ + private $_paperSize = PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER; + + /** + * Orientation + * + * @var string + */ + private $_orientation = PHPExcel_Worksheet_PageSetup::ORIENTATION_DEFAULT; + + /** + * Scale (Print Scale) + * + * Print scaling. Valid values range from 10 to 400 + * This setting is overridden when fitToWidth and/or fitToHeight are in use + * + * @var int? + */ + private $_scale = 100; + + /** + * Fit To Page + * Whether scale or fitToWith / fitToHeight applies + * + * @var boolean + */ + private $_fitToPage = FALSE; + + /** + * Fit To Height + * Number of vertical pages to fit on + * + * @var int? + */ + private $_fitToHeight = 1; + + /** + * Fit To Width + * Number of horizontal pages to fit on + * + * @var int? + */ + private $_fitToWidth = 1; + + /** + * Columns to repeat at left + * + * @var array Containing start column and end column, empty array if option unset + */ + private $_columnsToRepeatAtLeft = array('', ''); + + /** + * Rows to repeat at top + * + * @var array Containing start row number and end row number, empty array if option unset + */ + private $_rowsToRepeatAtTop = array(0, 0); + + /** + * Center page horizontally + * + * @var boolean + */ + private $_horizontalCentered = FALSE; + + /** + * Center page vertically + * + * @var boolean + */ + private $_verticalCentered = FALSE; + + /** + * Print area + * + * @var string + */ + private $_printArea = NULL; + + /** + * First page number + * + * @var int + */ + private $_firstPageNumber = NULL; + + /** + * Create a new PHPExcel_Worksheet_PageSetup + */ + public function __construct() + { + } + + /** + * Get Paper Size + * + * @return int + */ + public function getPaperSize() { + return $this->_paperSize; + } + + /** + * Set Paper Size + * + * @param int $pValue + * @return PHPExcel_Worksheet_PageSetup + */ + public function setPaperSize($pValue = PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER) { + $this->_paperSize = $pValue; + return $this; + } + + /** + * Get Orientation + * + * @return string + */ + public function getOrientation() { + return $this->_orientation; + } + + /** + * Set Orientation + * + * @param string $pValue + * @return PHPExcel_Worksheet_PageSetup + */ + public function setOrientation($pValue = PHPExcel_Worksheet_PageSetup::ORIENTATION_DEFAULT) { + $this->_orientation = $pValue; + return $this; + } + + /** + * Get Scale + * + * @return int? + */ + public function getScale() { + return $this->_scale; + } + + /** + * Set Scale + * + * Print scaling. Valid values range from 10 to 400 + * This setting is overridden when fitToWidth and/or fitToHeight are in use + * + * @param int? $pValue + * @param boolean $pUpdate Update fitToPage so scaling applies rather than fitToHeight / fitToWidth + * @return PHPExcel_Worksheet_PageSetup + * @throws PHPExcel_Exception + */ + public function setScale($pValue = 100, $pUpdate = true) { + // Microsoft Office Excel 2007 only allows setting a scale between 10 and 400 via the user interface, + // but it is apparently still able to handle any scale >= 0, where 0 results in 100 + if (($pValue >= 0) || is_null($pValue)) { + $this->_scale = $pValue; + if ($pUpdate) { + $this->_fitToPage = false; + } + } else { + throw new PHPExcel_Exception("Scale must not be negative"); + } + return $this; + } + + /** + * Get Fit To Page + * + * @return boolean + */ + public function getFitToPage() { + return $this->_fitToPage; + } + + /** + * Set Fit To Page + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_PageSetup + */ + public function setFitToPage($pValue = TRUE) { + $this->_fitToPage = $pValue; + return $this; + } + + /** + * Get Fit To Height + * + * @return int? + */ + public function getFitToHeight() { + return $this->_fitToHeight; + } + + /** + * Set Fit To Height + * + * @param int? $pValue + * @param boolean $pUpdate Update fitToPage so it applies rather than scaling + * @return PHPExcel_Worksheet_PageSetup + */ + public function setFitToHeight($pValue = 1, $pUpdate = TRUE) { + $this->_fitToHeight = $pValue; + if ($pUpdate) { + $this->_fitToPage = TRUE; + } + return $this; + } + + /** + * Get Fit To Width + * + * @return int? + */ + public function getFitToWidth() { + return $this->_fitToWidth; + } + + /** + * Set Fit To Width + * + * @param int? $pValue + * @param boolean $pUpdate Update fitToPage so it applies rather than scaling + * @return PHPExcel_Worksheet_PageSetup + */ + public function setFitToWidth($pValue = 1, $pUpdate = TRUE) { + $this->_fitToWidth = $pValue; + if ($pUpdate) { + $this->_fitToPage = TRUE; + } + return $this; + } + + /** + * Is Columns to repeat at left set? + * + * @return boolean + */ + public function isColumnsToRepeatAtLeftSet() { + if (is_array($this->_columnsToRepeatAtLeft)) { + if ($this->_columnsToRepeatAtLeft[0] != '' && $this->_columnsToRepeatAtLeft[1] != '') { + return true; + } + } + + return false; + } + + /** + * Get Columns to repeat at left + * + * @return array Containing start column and end column, empty array if option unset + */ + public function getColumnsToRepeatAtLeft() { + return $this->_columnsToRepeatAtLeft; + } + + /** + * Set Columns to repeat at left + * + * @param array $pValue Containing start column and end column, empty array if option unset + * @return PHPExcel_Worksheet_PageSetup + */ + public function setColumnsToRepeatAtLeft($pValue = null) { + if (is_array($pValue)) { + $this->_columnsToRepeatAtLeft = $pValue; + } + return $this; + } + + /** + * Set Columns to repeat at left by start and end + * + * @param string $pStart + * @param string $pEnd + * @return PHPExcel_Worksheet_PageSetup + */ + public function setColumnsToRepeatAtLeftByStartAndEnd($pStart = 'A', $pEnd = 'A') { + $this->_columnsToRepeatAtLeft = array($pStart, $pEnd); + return $this; + } + + /** + * Is Rows to repeat at top set? + * + * @return boolean + */ + public function isRowsToRepeatAtTopSet() { + if (is_array($this->_rowsToRepeatAtTop)) { + if ($this->_rowsToRepeatAtTop[0] != 0 && $this->_rowsToRepeatAtTop[1] != 0) { + return true; + } + } + + return false; + } + + /** + * Get Rows to repeat at top + * + * @return array Containing start column and end column, empty array if option unset + */ + public function getRowsToRepeatAtTop() { + return $this->_rowsToRepeatAtTop; + } + + /** + * Set Rows to repeat at top + * + * @param array $pValue Containing start column and end column, empty array if option unset + * @return PHPExcel_Worksheet_PageSetup + */ + public function setRowsToRepeatAtTop($pValue = null) { + if (is_array($pValue)) { + $this->_rowsToRepeatAtTop = $pValue; + } + return $this; + } + + /** + * Set Rows to repeat at top by start and end + * + * @param int $pStart + * @param int $pEnd + * @return PHPExcel_Worksheet_PageSetup + */ + public function setRowsToRepeatAtTopByStartAndEnd($pStart = 1, $pEnd = 1) { + $this->_rowsToRepeatAtTop = array($pStart, $pEnd); + return $this; + } + + /** + * Get center page horizontally + * + * @return bool + */ + public function getHorizontalCentered() { + return $this->_horizontalCentered; + } + + /** + * Set center page horizontally + * + * @param bool $value + * @return PHPExcel_Worksheet_PageSetup + */ + public function setHorizontalCentered($value = false) { + $this->_horizontalCentered = $value; + return $this; + } + + /** + * Get center page vertically + * + * @return bool + */ + public function getVerticalCentered() { + return $this->_verticalCentered; + } + + /** + * Set center page vertically + * + * @param bool $value + * @return PHPExcel_Worksheet_PageSetup + */ + public function setVerticalCentered($value = false) { + $this->_verticalCentered = $value; + return $this; + } + + /** + * Get print area + * + * @param int $index Identifier for a specific print area range if several ranges have been set + * Default behaviour, or a index value of 0, will return all ranges as a comma-separated string + * Otherwise, the specific range identified by the value of $index will be returned + * Print areas are numbered from 1 + * @throws PHPExcel_Exception + * @return string + */ + public function getPrintArea($index = 0) { + if ($index == 0) { + return $this->_printArea; + } + $printAreas = explode(',',$this->_printArea); + if (isset($printAreas[$index-1])) { + return $printAreas[$index-1]; + } + throw new PHPExcel_Exception("Requested Print Area does not exist"); + } + + /** + * Is print area set? + * + * @param int $index Identifier for a specific print area range if several ranges have been set + * Default behaviour, or an index value of 0, will identify whether any print range is set + * Otherwise, existence of the range identified by the value of $index will be returned + * Print areas are numbered from 1 + * @return boolean + */ + public function isPrintAreaSet($index = 0) { + if ($index == 0) { + return !is_null($this->_printArea); + } + $printAreas = explode(',',$this->_printArea); + return isset($printAreas[$index-1]); + } + + /** + * Clear a print area + * + * @param int $index Identifier for a specific print area range if several ranges have been set + * Default behaviour, or an index value of 0, will clear all print ranges that are set + * Otherwise, the range identified by the value of $index will be removed from the series + * Print areas are numbered from 1 + * @return PHPExcel_Worksheet_PageSetup + */ + public function clearPrintArea($index = 0) { + if ($index == 0) { + $this->_printArea = NULL; + } else { + $printAreas = explode(',',$this->_printArea); + if (isset($printAreas[$index-1])) { + unset($printAreas[$index-1]); + $this->_printArea = implode(',',$printAreas); + } + } + + return $this; + } + + /** + * Set print area. e.g. 'A1:D10' or 'A1:D10,G5:M20' + * + * @param string $value + * @param int $index Identifier for a specific print area range allowing several ranges to be set + * When the method is "O"verwrite, then a positive integer index will overwrite that indexed + * entry in the print areas list; a negative index value will identify which entry to + * overwrite working bacward through the print area to the list, with the last entry as -1. + * Specifying an index value of 0, will overwrite <b>all</b> existing print ranges. + * When the method is "I"nsert, then a positive index will insert after that indexed entry in + * the print areas list, while a negative index will insert before the indexed entry. + * Specifying an index value of 0, will always append the new print range at the end of the + * list. + * Print areas are numbered from 1 + * @param string $method Determines the method used when setting multiple print areas + * Default behaviour, or the "O" method, overwrites existing print area + * The "I" method, inserts the new print area before any specified index, or at the end of the list + * @return PHPExcel_Worksheet_PageSetup + * @throws PHPExcel_Exception + */ + public function setPrintArea($value, $index = 0, $method = self::SETPRINTRANGE_OVERWRITE) { + if (strpos($value,'!') !== false) { + throw new PHPExcel_Exception('Cell coordinate must not specify a worksheet.'); + } elseif (strpos($value,':') === false) { + throw new PHPExcel_Exception('Cell coordinate must be a range of cells.'); + } elseif (strpos($value,'$') !== false) { + throw new PHPExcel_Exception('Cell coordinate must not be absolute.'); + } + $value = strtoupper($value); + + if ($method == self::SETPRINTRANGE_OVERWRITE) { + if ($index == 0) { + $this->_printArea = $value; + } else { + $printAreas = explode(',',$this->_printArea); + if($index < 0) { + $index = count($printAreas) - abs($index) + 1; + } + if (($index <= 0) || ($index > count($printAreas))) { + throw new PHPExcel_Exception('Invalid index for setting print range.'); + } + $printAreas[$index-1] = $value; + $this->_printArea = implode(',',$printAreas); + } + } elseif($method == self::SETPRINTRANGE_INSERT) { + if ($index == 0) { + $this->_printArea .= ($this->_printArea == '') ? $value : ','.$value; + } else { + $printAreas = explode(',',$this->_printArea); + if($index < 0) { + $index = abs($index) - 1; + } + if ($index > count($printAreas)) { + throw new PHPExcel_Exception('Invalid index for setting print range.'); + } + $printAreas = array_merge(array_slice($printAreas,0,$index),array($value),array_slice($printAreas,$index)); + $this->_printArea = implode(',',$printAreas); + } + } else { + throw new PHPExcel_Exception('Invalid method for setting print range.'); + } + + return $this; + } + + /** + * Add a new print area (e.g. 'A1:D10' or 'A1:D10,G5:M20') to the list of print areas + * + * @param string $value + * @param int $index Identifier for a specific print area range allowing several ranges to be set + * A positive index will insert after that indexed entry in the print areas list, while a + * negative index will insert before the indexed entry. + * Specifying an index value of 0, will always append the new print range at the end of the + * list. + * Print areas are numbered from 1 + * @return PHPExcel_Worksheet_PageSetup + * @throws PHPExcel_Exception + */ + public function addPrintArea($value, $index = -1) { + return $this->setPrintArea($value, $index, self::SETPRINTRANGE_INSERT); + } + + /** + * Set print area + * + * @param int $column1 Column 1 + * @param int $row1 Row 1 + * @param int $column2 Column 2 + * @param int $row2 Row 2 + * @param int $index Identifier for a specific print area range allowing several ranges to be set + * When the method is "O"verwrite, then a positive integer index will overwrite that indexed + * entry in the print areas list; a negative index value will identify which entry to + * overwrite working bacward through the print area to the list, with the last entry as -1. + * Specifying an index value of 0, will overwrite <b>all</b> existing print ranges. + * When the method is "I"nsert, then a positive index will insert after that indexed entry in + * the print areas list, while a negative index will insert before the indexed entry. + * Specifying an index value of 0, will always append the new print range at the end of the + * list. + * Print areas are numbered from 1 + * @param string $method Determines the method used when setting multiple print areas + * Default behaviour, or the "O" method, overwrites existing print area + * The "I" method, inserts the new print area before any specified index, or at the end of the list + * @return PHPExcel_Worksheet_PageSetup + * @throws PHPExcel_Exception + */ + public function setPrintAreaByColumnAndRow($column1, $row1, $column2, $row2, $index = 0, $method = self::SETPRINTRANGE_OVERWRITE) + { + return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2, $index, $method); + } + + /** + * Add a new print area to the list of print areas + * + * @param int $column1 Start Column for the print area + * @param int $row1 Start Row for the print area + * @param int $column2 End Column for the print area + * @param int $row2 End Row for the print area + * @param int $index Identifier for a specific print area range allowing several ranges to be set + * A positive index will insert after that indexed entry in the print areas list, while a + * negative index will insert before the indexed entry. + * Specifying an index value of 0, will always append the new print range at the end of the + * list. + * Print areas are numbered from 1 + * @return PHPExcel_Worksheet_PageSetup + * @throws PHPExcel_Exception + */ + public function addPrintAreaByColumnAndRow($column1, $row1, $column2, $row2, $index = -1) + { + return $this->setPrintArea(PHPExcel_Cell::stringFromColumnIndex($column1) . $row1 . ':' . PHPExcel_Cell::stringFromColumnIndex($column2) . $row2, $index, self::SETPRINTRANGE_INSERT); + } + + /** + * Get first page number + * + * @return int + */ + public function getFirstPageNumber() { + return $this->_firstPageNumber; + } + + /** + * Set first page number + * + * @param int $value + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function setFirstPageNumber($value = null) { + $this->_firstPageNumber = $value; + return $this; + } + + /** + * Reset first page number + * + * @return PHPExcel_Worksheet_HeaderFooter + */ + public function resetFirstPageNumber() { + return $this->setFirstPageNumber(null); + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/Protection.php b/PHPExcel/Worksheet/Protection.php new file mode 100644 index 0000000..f41dd53 --- /dev/null +++ b/PHPExcel/Worksheet/Protection.php @@ -0,0 +1,545 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_Protection + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_Protection +{ + /** + * Sheet + * + * @var boolean + */ + private $_sheet = false; + + /** + * Objects + * + * @var boolean + */ + private $_objects = false; + + /** + * Scenarios + * + * @var boolean + */ + private $_scenarios = false; + + /** + * Format cells + * + * @var boolean + */ + private $_formatCells = false; + + /** + * Format columns + * + * @var boolean + */ + private $_formatColumns = false; + + /** + * Format rows + * + * @var boolean + */ + private $_formatRows = false; + + /** + * Insert columns + * + * @var boolean + */ + private $_insertColumns = false; + + /** + * Insert rows + * + * @var boolean + */ + private $_insertRows = false; + + /** + * Insert hyperlinks + * + * @var boolean + */ + private $_insertHyperlinks = false; + + /** + * Delete columns + * + * @var boolean + */ + private $_deleteColumns = false; + + /** + * Delete rows + * + * @var boolean + */ + private $_deleteRows = false; + + /** + * Select locked cells + * + * @var boolean + */ + private $_selectLockedCells = false; + + /** + * Sort + * + * @var boolean + */ + private $_sort = false; + + /** + * AutoFilter + * + * @var boolean + */ + private $_autoFilter = false; + + /** + * Pivot tables + * + * @var boolean + */ + private $_pivotTables = false; + + /** + * Select unlocked cells + * + * @var boolean + */ + private $_selectUnlockedCells = false; + + /** + * Password + * + * @var string + */ + private $_password = ''; + + /** + * Create a new PHPExcel_Worksheet_Protection + */ + public function __construct() + { + } + + /** + * Is some sort of protection enabled? + * + * @return boolean + */ + function isProtectionEnabled() { + return $this->_sheet || + $this->_objects || + $this->_scenarios || + $this->_formatCells || + $this->_formatColumns || + $this->_formatRows || + $this->_insertColumns || + $this->_insertRows || + $this->_insertHyperlinks || + $this->_deleteColumns || + $this->_deleteRows || + $this->_selectLockedCells || + $this->_sort || + $this->_autoFilter || + $this->_pivotTables || + $this->_selectUnlockedCells; + } + + /** + * Get Sheet + * + * @return boolean + */ + function getSheet() { + return $this->_sheet; + } + + /** + * Set Sheet + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setSheet($pValue = false) { + $this->_sheet = $pValue; + return $this; + } + + /** + * Get Objects + * + * @return boolean + */ + function getObjects() { + return $this->_objects; + } + + /** + * Set Objects + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setObjects($pValue = false) { + $this->_objects = $pValue; + return $this; + } + + /** + * Get Scenarios + * + * @return boolean + */ + function getScenarios() { + return $this->_scenarios; + } + + /** + * Set Scenarios + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setScenarios($pValue = false) { + $this->_scenarios = $pValue; + return $this; + } + + /** + * Get FormatCells + * + * @return boolean + */ + function getFormatCells() { + return $this->_formatCells; + } + + /** + * Set FormatCells + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setFormatCells($pValue = false) { + $this->_formatCells = $pValue; + return $this; + } + + /** + * Get FormatColumns + * + * @return boolean + */ + function getFormatColumns() { + return $this->_formatColumns; + } + + /** + * Set FormatColumns + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setFormatColumns($pValue = false) { + $this->_formatColumns = $pValue; + return $this; + } + + /** + * Get FormatRows + * + * @return boolean + */ + function getFormatRows() { + return $this->_formatRows; + } + + /** + * Set FormatRows + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setFormatRows($pValue = false) { + $this->_formatRows = $pValue; + return $this; + } + + /** + * Get InsertColumns + * + * @return boolean + */ + function getInsertColumns() { + return $this->_insertColumns; + } + + /** + * Set InsertColumns + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setInsertColumns($pValue = false) { + $this->_insertColumns = $pValue; + return $this; + } + + /** + * Get InsertRows + * + * @return boolean + */ + function getInsertRows() { + return $this->_insertRows; + } + + /** + * Set InsertRows + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setInsertRows($pValue = false) { + $this->_insertRows = $pValue; + return $this; + } + + /** + * Get InsertHyperlinks + * + * @return boolean + */ + function getInsertHyperlinks() { + return $this->_insertHyperlinks; + } + + /** + * Set InsertHyperlinks + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setInsertHyperlinks($pValue = false) { + $this->_insertHyperlinks = $pValue; + return $this; + } + + /** + * Get DeleteColumns + * + * @return boolean + */ + function getDeleteColumns() { + return $this->_deleteColumns; + } + + /** + * Set DeleteColumns + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setDeleteColumns($pValue = false) { + $this->_deleteColumns = $pValue; + return $this; + } + + /** + * Get DeleteRows + * + * @return boolean + */ + function getDeleteRows() { + return $this->_deleteRows; + } + + /** + * Set DeleteRows + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setDeleteRows($pValue = false) { + $this->_deleteRows = $pValue; + return $this; + } + + /** + * Get SelectLockedCells + * + * @return boolean + */ + function getSelectLockedCells() { + return $this->_selectLockedCells; + } + + /** + * Set SelectLockedCells + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setSelectLockedCells($pValue = false) { + $this->_selectLockedCells = $pValue; + return $this; + } + + /** + * Get Sort + * + * @return boolean + */ + function getSort() { + return $this->_sort; + } + + /** + * Set Sort + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setSort($pValue = false) { + $this->_sort = $pValue; + return $this; + } + + /** + * Get AutoFilter + * + * @return boolean + */ + function getAutoFilter() { + return $this->_autoFilter; + } + + /** + * Set AutoFilter + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setAutoFilter($pValue = false) { + $this->_autoFilter = $pValue; + return $this; + } + + /** + * Get PivotTables + * + * @return boolean + */ + function getPivotTables() { + return $this->_pivotTables; + } + + /** + * Set PivotTables + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setPivotTables($pValue = false) { + $this->_pivotTables = $pValue; + return $this; + } + + /** + * Get SelectUnlockedCells + * + * @return boolean + */ + function getSelectUnlockedCells() { + return $this->_selectUnlockedCells; + } + + /** + * Set SelectUnlockedCells + * + * @param boolean $pValue + * @return PHPExcel_Worksheet_Protection + */ + function setSelectUnlockedCells($pValue = false) { + $this->_selectUnlockedCells = $pValue; + return $this; + } + + /** + * Get Password (hashed) + * + * @return string + */ + function getPassword() { + return $this->_password; + } + + /** + * Set Password + * + * @param string $pValue + * @param boolean $pAlreadyHashed If the password has already been hashed, set this to true + * @return PHPExcel_Worksheet_Protection + */ + function setPassword($pValue = '', $pAlreadyHashed = false) { + if (!$pAlreadyHashed) { + $pValue = PHPExcel_Shared_PasswordHasher::hashPassword($pValue); + } + $this->_password = $pValue; + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/Row.php b/PHPExcel/Worksheet/Row.php new file mode 100644 index 0000000..2e9bd13 --- /dev/null +++ b/PHPExcel/Worksheet/Row.php @@ -0,0 +1,90 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_Row + * + * Represents a row in PHPExcel_Worksheet, used by PHPExcel_Worksheet_RowIterator + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_Row +{ + /** + * PHPExcel_Worksheet + * + * @var PHPExcel_Worksheet + */ + private $_parent; + + /** + * Row index + * + * @var int + */ + private $_rowIndex = 0; + + /** + * Create a new row + * + * @param PHPExcel_Worksheet $parent + * @param int $rowIndex + */ + public function __construct(PHPExcel_Worksheet $parent = null, $rowIndex = 1) { + // Set parent and row index + $this->_parent = $parent; + $this->_rowIndex = $rowIndex; + } + + /** + * Destructor + */ + public function __destruct() { + unset($this->_parent); + } + + /** + * Get row index + * + * @return int + */ + public function getRowIndex() { + return $this->_rowIndex; + } + + /** + * Get cell iterator + * + * @return PHPExcel_Worksheet_CellIterator + */ + public function getCellIterator() { + return new PHPExcel_Worksheet_CellIterator($this->_parent, $this->_rowIndex); + } +} diff --git a/PHPExcel/Worksheet/RowDimension.php b/PHPExcel/Worksheet/RowDimension.php new file mode 100644 index 0000000..69b7ba8 --- /dev/null +++ b/PHPExcel/Worksheet/RowDimension.php @@ -0,0 +1,265 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_RowDimension + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_RowDimension +{ + /** + * Row index + * + * @var int + */ + private $_rowIndex; + + /** + * Row height (in pt) + * + * When this is set to a negative value, the row height should be ignored by IWriter + * + * @var double + */ + private $_rowHeight = -1; + + /** + * ZeroHeight for Row? + * + * @var bool + */ + private $_zeroHeight = false; + + /** + * Visible? + * + * @var bool + */ + private $_visible = true; + + /** + * Outline level + * + * @var int + */ + private $_outlineLevel = 0; + + /** + * Collapsed + * + * @var bool + */ + private $_collapsed = false; + + /** + * Index to cellXf. Null value means row has no explicit cellXf format. + * + * @var int|null + */ + private $_xfIndex; + + /** + * Create a new PHPExcel_Worksheet_RowDimension + * + * @param int $pIndex Numeric row index + */ + public function __construct($pIndex = 0) + { + // Initialise values + $this->_rowIndex = $pIndex; + + // set row dimension as unformatted by default + $this->_xfIndex = null; + } + + /** + * Get Row Index + * + * @return int + */ + public function getRowIndex() { + return $this->_rowIndex; + } + + /** + * Set Row Index + * + * @param int $pValue + * @return PHPExcel_Worksheet_RowDimension + */ + public function setRowIndex($pValue) { + $this->_rowIndex = $pValue; + return $this; + } + + /** + * Get Row Height + * + * @return double + */ + public function getRowHeight() { + return $this->_rowHeight; + } + + /** + * Set Row Height + * + * @param double $pValue + * @return PHPExcel_Worksheet_RowDimension + */ + public function setRowHeight($pValue = -1) { + $this->_rowHeight = $pValue; + return $this; + } + + /** + * Get ZeroHeight + * + * @return bool + */ + public function getzeroHeight() { + return $this->_zeroHeight; + } + + /** + * Set ZeroHeight + * + * @param bool $pValue + * @return PHPExcel_Worksheet_RowDimension + */ + public function setzeroHeight($pValue = false) { + $this->_zeroHeight = $pValue; + return $this; + } + + /** + * Get Visible + * + * @return bool + */ + public function getVisible() { + return $this->_visible; + } + + /** + * Set Visible + * + * @param bool $pValue + * @return PHPExcel_Worksheet_RowDimension + */ + public function setVisible($pValue = true) { + $this->_visible = $pValue; + return $this; + } + + /** + * Get Outline Level + * + * @return int + */ + public function getOutlineLevel() { + return $this->_outlineLevel; + } + + /** + * Set Outline Level + * + * Value must be between 0 and 7 + * + * @param int $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_RowDimension + */ + public function setOutlineLevel($pValue) { + if ($pValue < 0 || $pValue > 7) { + throw new PHPExcel_Exception("Outline level must range between 0 and 7."); + } + + $this->_outlineLevel = $pValue; + return $this; + } + + /** + * Get Collapsed + * + * @return bool + */ + public function getCollapsed() { + return $this->_collapsed; + } + + /** + * Set Collapsed + * + * @param bool $pValue + * @return PHPExcel_Worksheet_RowDimension + */ + public function setCollapsed($pValue = true) { + $this->_collapsed = $pValue; + return $this; + } + + /** + * Get index to cellXf + * + * @return int + */ + public function getXfIndex() + { + return $this->_xfIndex; + } + + /** + * Set index to cellXf + * + * @param int $pValue + * @return PHPExcel_Worksheet_RowDimension + */ + public function setXfIndex($pValue = 0) + { + $this->_xfIndex = $pValue; + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/Worksheet/RowIterator.php b/PHPExcel/Worksheet/RowIterator.php new file mode 100644 index 0000000..f2d962f --- /dev/null +++ b/PHPExcel/Worksheet/RowIterator.php @@ -0,0 +1,148 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_RowIterator + * + * Used to iterate rows in a PHPExcel_Worksheet + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_RowIterator implements Iterator +{ + /** + * PHPExcel_Worksheet to iterate + * + * @var PHPExcel_Worksheet + */ + private $_subject; + + /** + * Current iterator position + * + * @var int + */ + private $_position = 1; + + /** + * Start position + * + * @var int + */ + private $_startRow = 1; + + + /** + * Create a new row iterator + * + * @param PHPExcel_Worksheet $subject The worksheet to iterate over + * @param integer $startRow The row number at which to start iterating + */ + public function __construct(PHPExcel_Worksheet $subject = null, $startRow = 1) { + // Set subject + $this->_subject = $subject; + $this->resetStart($startRow); + } + + /** + * Destructor + */ + public function __destruct() { + unset($this->_subject); + } + + /** + * (Re)Set the start row and the current row pointer + * + * @param integer $startRow The row number at which to start iterating + */ + public function resetStart($startRow = 1) { + $this->_startRow = $startRow; + $this->seek($startRow); + } + + /** + * Set the row pointer to the selected row + * + * @param integer $row The row number to set the current pointer at + */ + public function seek($row = 1) { + $this->_position = $row; + } + + /** + * Rewind the iterator to the starting row + */ + public function rewind() { + $this->_position = $this->_startRow; + } + + /** + * Return the current row in this worksheet + * + * @return PHPExcel_Worksheet_Row + */ + public function current() { + return new PHPExcel_Worksheet_Row($this->_subject, $this->_position); + } + + /** + * Return the current iterator key + * + * @return int + */ + public function key() { + return $this->_position; + } + + /** + * Set the iterator to its next value + */ + public function next() { + ++$this->_position; + } + + /** + * Set the iterator to its previous value + */ + public function prev() { + if ($this->_position > 1) + --$this->_position; + } + + /** + * Indicate if more rows exist in the worksheet + * + * @return boolean + */ + public function valid() { + return $this->_position <= $this->_subject->getHighestRow(); + } +} diff --git a/PHPExcel/Worksheet/SheetView.php b/PHPExcel/Worksheet/SheetView.php new file mode 100644 index 0000000..05fbf28 --- /dev/null +++ b/PHPExcel/Worksheet/SheetView.php @@ -0,0 +1,188 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Worksheet_SheetView + * + * @category PHPExcel + * @package PHPExcel_Worksheet + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Worksheet_SheetView +{ + + /* Sheet View types */ + const SHEETVIEW_NORMAL = 'normal'; + const SHEETVIEW_PAGE_LAYOUT = 'pageLayout'; + const SHEETVIEW_PAGE_BREAK_PREVIEW = 'pageBreakPreview'; + + private static $_sheetViewTypes = array( + self::SHEETVIEW_NORMAL, + self::SHEETVIEW_PAGE_LAYOUT, + self::SHEETVIEW_PAGE_BREAK_PREVIEW, + ); + + /** + * ZoomScale + * + * Valid values range from 10 to 400. + * + * @var int + */ + private $_zoomScale = 100; + + /** + * ZoomScaleNormal + * + * Valid values range from 10 to 400. + * + * @var int + */ + private $_zoomScaleNormal = 100; + + /** + * View + * + * Valid values range from 10 to 400. + * + * @var string + */ + private $_sheetviewType = self::SHEETVIEW_NORMAL; + + /** + * Create a new PHPExcel_Worksheet_SheetView + */ + public function __construct() + { + } + + /** + * Get ZoomScale + * + * @return int + */ + public function getZoomScale() { + return $this->_zoomScale; + } + + /** + * Set ZoomScale + * + * Valid values range from 10 to 400. + * + * @param int $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_SheetView + */ + public function setZoomScale($pValue = 100) { + // Microsoft Office Excel 2007 only allows setting a scale between 10 and 400 via the user interface, + // but it is apparently still able to handle any scale >= 1 + if (($pValue >= 1) || is_null($pValue)) { + $this->_zoomScale = $pValue; + } else { + throw new PHPExcel_Exception("Scale must be greater than or equal to 1."); + } + return $this; + } + + /** + * Get ZoomScaleNormal + * + * @return int + */ + public function getZoomScaleNormal() { + return $this->_zoomScaleNormal; + } + + /** + * Set ZoomScale + * + * Valid values range from 10 to 400. + * + * @param int $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_SheetView + */ + public function setZoomScaleNormal($pValue = 100) { + if (($pValue >= 1) || is_null($pValue)) { + $this->_zoomScaleNormal = $pValue; + } else { + throw new PHPExcel_Exception("Scale must be greater than or equal to 1."); + } + return $this; + } + + /** + * Get View + * + * @return string + */ + public function getView() { + return $this->_sheetviewType; + } + + /** + * Set View + * + * Valid values are + * 'normal' self::SHEETVIEW_NORMAL + * 'pageLayout' self::SHEETVIEW_PAGE_LAYOUT + * 'pageBreakPreview' self::SHEETVIEW_PAGE_BREAK_PREVIEW + * + * @param string $pValue + * @throws PHPExcel_Exception + * @return PHPExcel_Worksheet_SheetView + */ + public function setView($pValue = NULL) { + // MS Excel 2007 allows setting the view to 'normal', 'pageLayout' or 'pageBreakPreview' + // via the user interface + if ($pValue === NULL) + $pValue = self::SHEETVIEW_NORMAL; + if (in_array($pValue, self::$_sheetViewTypes)) { + $this->_sheetviewType = $pValue; + } else { + throw new PHPExcel_Exception("Invalid sheetview layout type."); + } + + return $this; + } + + /** + * Implement PHP __clone to create a deep clone, not just a shallow copy. + */ + public function __clone() { + $vars = get_object_vars($this); + foreach ($vars as $key => $value) { + if (is_object($value)) { + $this->$key = clone $value; + } else { + $this->$key = $value; + } + } + } +} diff --git a/PHPExcel/WorksheetIterator.php b/PHPExcel/WorksheetIterator.php new file mode 100644 index 0000000..624b49b --- /dev/null +++ b/PHPExcel/WorksheetIterator.php @@ -0,0 +1,118 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_WorksheetIterator + * + * Used to iterate worksheets in PHPExcel + * + * @category PHPExcel + * @package PHPExcel + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_WorksheetIterator implements Iterator +{ + /** + * Spreadsheet to iterate + * + * @var PHPExcel + */ + private $_subject; + + /** + * Current iterator position + * + * @var int + */ + private $_position = 0; + + /** + * Create a new worksheet iterator + * + * @param PHPExcel $subject + */ + public function __construct(PHPExcel $subject = null) + { + // Set subject + $this->_subject = $subject; + } + + /** + * Destructor + */ + public function __destruct() + { + unset($this->_subject); + } + + /** + * Rewind iterator + */ + public function rewind() + { + $this->_position = 0; + } + + /** + * Current PHPExcel_Worksheet + * + * @return PHPExcel_Worksheet + */ + public function current() + { + return $this->_subject->getSheet($this->_position); + } + + /** + * Current key + * + * @return int + */ + public function key() + { + return $this->_position; + } + + /** + * Next value + */ + public function next() + { + ++$this->_position; + } + + /** + * More PHPExcel_Worksheet instances available? + * + * @return boolean + */ + public function valid() + { + return $this->_position < $this->_subject->getSheetCount(); + } +} diff --git a/PHPExcel/Writer/Abstract.php b/PHPExcel/Writer/Abstract.php new file mode 100644 index 0000000..7e09ef8 --- /dev/null +++ b/PHPExcel/Writer/Abstract.php @@ -0,0 +1,158 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Abstract + * + * @category PHPExcel + * @package PHPExcel_Writer + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +abstract class PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter +{ + /** + * Write charts that are defined in the workbook? + * Identifies whether the Writer should write definitions for any charts that exist in the PHPExcel object; + * + * @var boolean + */ + protected $_includeCharts = FALSE; + + /** + * Pre-calculate formulas + * Forces PHPExcel to recalculate all formulae in a workbook when saving, so that the pre-calculated values are + * immediately available to MS Excel or other office spreadsheet viewer when opening the file + * + * @var boolean + */ + protected $_preCalculateFormulas = TRUE; + + /** + * Use disk caching where possible? + * + * @var boolean + */ + protected $_useDiskCaching = FALSE; + + /** + * Disk caching directory + * + * @var string + */ + protected $_diskCachingDirectory = './'; + + /** + * Write charts in workbook? + * If this is true, then the Writer will write definitions for any charts that exist in the PHPExcel object. + * If false (the default) it will ignore any charts defined in the PHPExcel object. + * + * @return boolean + */ + public function getIncludeCharts() { + return $this->_includeCharts; + } + + /** + * Set write charts in workbook + * Set to true, to advise the Writer to include any charts that exist in the PHPExcel object. + * Set to false (the default) to ignore charts. + * + * @param boolean $pValue + * @return PHPExcel_Writer_IWriter + */ + public function setIncludeCharts($pValue = FALSE) { + $this->_includeCharts = (boolean) $pValue; + return $this; + } + + /** + * Get Pre-Calculate Formulas flag + * If this is true (the default), then the writer will recalculate all formulae in a workbook when saving, + * so that the pre-calculated values are immediately available to MS Excel or other office spreadsheet + * viewer when opening the file + * If false, then formulae are not calculated on save. This is faster for saving in PHPExcel, but slower + * when opening the resulting file in MS Excel, because Excel has to recalculate the formulae itself + * + * @return boolean + */ + public function getPreCalculateFormulas() { + return $this->_preCalculateFormulas; + } + + /** + * Set Pre-Calculate Formulas + * Set to true (the default) to advise the Writer to calculate all formulae on save + * Set to false to prevent precalculation of formulae on save. + * + * @param boolean $pValue Pre-Calculate Formulas? + * @return PHPExcel_Writer_IWriter + */ + public function setPreCalculateFormulas($pValue = TRUE) { + $this->_preCalculateFormulas = (boolean) $pValue; + return $this; + } + + /** + * Get use disk caching where possible? + * + * @return boolean + */ + public function getUseDiskCaching() { + return $this->_useDiskCaching; + } + + /** + * Set use disk caching where possible? + * + * @param boolean $pValue + * @param string $pDirectory Disk caching directory + * @throws PHPExcel_Writer_Exception when directory does not exist + * @return PHPExcel_Writer_Excel2007 + */ + public function setUseDiskCaching($pValue = FALSE, $pDirectory = NULL) { + $this->_useDiskCaching = $pValue; + + if ($pDirectory !== NULL) { + if (is_dir($pDirectory)) { + $this->_diskCachingDirectory = $pDirectory; + } else { + throw new PHPExcel_Writer_Exception("Directory does not exist: $pDirectory"); + } + } + return $this; + } + + /** + * Get disk caching directory + * + * @return string + */ + public function getDiskCachingDirectory() { + return $this->_diskCachingDirectory; + } +} diff --git a/PHPExcel/Writer/CSV.php b/PHPExcel/Writer/CSV.php new file mode 100644 index 0000000..521874f --- /dev/null +++ b/PHPExcel/Writer/CSV.php @@ -0,0 +1,310 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_CSV + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_CSV + * + * @category PHPExcel + * @package PHPExcel_Writer_CSV + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_CSV extends PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter { + /** + * PHPExcel object + * + * @var PHPExcel + */ + private $_phpExcel; + + /** + * Delimiter + * + * @var string + */ + private $_delimiter = ','; + + /** + * Enclosure + * + * @var string + */ + private $_enclosure = '"'; + + /** + * Line ending + * + * @var string + */ + private $_lineEnding = PHP_EOL; + + /** + * Sheet index to write + * + * @var int + */ + private $_sheetIndex = 0; + + /** + * Whether to write a BOM (for UTF8). + * + * @var boolean + */ + private $_useBOM = false; + + /** + * Whether to write a fully Excel compatible CSV file. + * + * @var boolean + */ + private $_excelCompatibility = false; + + /** + * Create a new PHPExcel_Writer_CSV + * + * @param PHPExcel $phpExcel PHPExcel object + */ + public function __construct(PHPExcel $phpExcel) { + $this->_phpExcel = $phpExcel; + } + + /** + * Save PHPExcel to file + * + * @param string $pFilename + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = null) { + // Fetch sheet + $sheet = $this->_phpExcel->getSheet($this->_sheetIndex); + + $saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->getWriteDebugLog(); + PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog(FALSE); + $saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType(); + PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE); + + // Open file + $fileHandle = fopen($pFilename, 'wb+'); + if ($fileHandle === false) { + throw new PHPExcel_Writer_Exception("Could not open file $pFilename for writing."); + } + + if ($this->_excelCompatibility) { + fwrite($fileHandle, "\xEF\xBB\xBF"); // Enforce UTF-8 BOM Header + $this->setEnclosure('"'); // Set enclosure to " + $this->setDelimiter(";"); // Set delimiter to a semi-colon + $this->setLineEnding("\r\n"); + fwrite($fileHandle, 'sep=' . $this->getDelimiter() . $this->_lineEnding); + } elseif ($this->_useBOM) { + // Write the UTF-8 BOM code if required + fwrite($fileHandle, "\xEF\xBB\xBF"); + } + + // Identify the range that we need to extract from the worksheet + $maxCol = $sheet->getHighestDataColumn(); + $maxRow = $sheet->getHighestDataRow(); + + // Write rows to file + for($row = 1; $row <= $maxRow; ++$row) { + // Convert the row to an array... + $cellsArray = $sheet->rangeToArray('A'.$row.':'.$maxCol.$row,'', $this->_preCalculateFormulas); + // ... and write to the file + $this->_writeLine($fileHandle, $cellsArray[0]); + } + + // Close file + fclose($fileHandle); + + PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType); + PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog($saveDebugLog); + } + + /** + * Get delimiter + * + * @return string + */ + public function getDelimiter() { + return $this->_delimiter; + } + + /** + * Set delimiter + * + * @param string $pValue Delimiter, defaults to , + * @return PHPExcel_Writer_CSV + */ + public function setDelimiter($pValue = ',') { + $this->_delimiter = $pValue; + return $this; + } + + /** + * Get enclosure + * + * @return string + */ + public function getEnclosure() { + return $this->_enclosure; + } + + /** + * Set enclosure + * + * @param string $pValue Enclosure, defaults to " + * @return PHPExcel_Writer_CSV + */ + public function setEnclosure($pValue = '"') { + if ($pValue == '') { + $pValue = null; + } + $this->_enclosure = $pValue; + return $this; + } + + /** + * Get line ending + * + * @return string + */ + public function getLineEnding() { + return $this->_lineEnding; + } + + /** + * Set line ending + * + * @param string $pValue Line ending, defaults to OS line ending (PHP_EOL) + * @return PHPExcel_Writer_CSV + */ + public function setLineEnding($pValue = PHP_EOL) { + $this->_lineEnding = $pValue; + return $this; + } + + /** + * Get whether BOM should be used + * + * @return boolean + */ + public function getUseBOM() { + return $this->_useBOM; + } + + /** + * Set whether BOM should be used + * + * @param boolean $pValue Use UTF-8 byte-order mark? Defaults to false + * @return PHPExcel_Writer_CSV + */ + public function setUseBOM($pValue = false) { + $this->_useBOM = $pValue; + return $this; + } + + /** + * Get whether the file should be saved with full Excel Compatibility + * + * @return boolean + */ + public function getExcelCompatibility() { + return $this->_excelCompatibility; + } + + /** + * Set whether the file should be saved with full Excel Compatibility + * + * @param boolean $pValue Set the file to be written as a fully Excel compatible csv file + * Note that this overrides other settings such as useBOM, enclosure and delimiter + * @return PHPExcel_Writer_CSV + */ + public function setExcelCompatibility($pValue = false) { + $this->_excelCompatibility = $pValue; + return $this; + } + + /** + * Get sheet index + * + * @return int + */ + public function getSheetIndex() { + return $this->_sheetIndex; + } + + /** + * Set sheet index + * + * @param int $pValue Sheet index + * @return PHPExcel_Writer_CSV + */ + public function setSheetIndex($pValue = 0) { + $this->_sheetIndex = $pValue; + return $this; + } + + /** + * Write line to CSV file + * + * @param mixed $pFileHandle PHP filehandle + * @param array $pValues Array containing values in a row + * @throws PHPExcel_Writer_Exception + */ + private function _writeLine($pFileHandle = null, $pValues = null) { + if (is_array($pValues)) { + // No leading delimiter + $writeDelimiter = false; + + // Build the line + $line = ''; + + foreach ($pValues as $element) { + // Escape enclosures + $element = str_replace($this->_enclosure, $this->_enclosure . $this->_enclosure, $element); + + // Add delimiter + if ($writeDelimiter) { + $line .= $this->_delimiter; + } else { + $writeDelimiter = true; + } + + // Add enclosed string + $line .= $this->_enclosure . $element . $this->_enclosure; + } + + // Add line ending + $line .= $this->_lineEnding; + + // Write to file + fwrite($pFileHandle, $line); + } else { + throw new PHPExcel_Writer_Exception("Invalid data row passed to CSV writer."); + } + } + +} diff --git a/PHPExcel/Writer/Excel2007.php b/PHPExcel/Writer/Excel2007.php new file mode 100644 index 0000000..a8f7593 --- /dev/null +++ b/PHPExcel/Writer/Excel2007.php @@ -0,0 +1,532 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007 + * + * @category PHPExcel + * @package PHPExcel_Writer_2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007 extends PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter +{ + /** + * Pre-calculate formulas + * Forces PHPExcel to recalculate all formulae in a workbook when saving, so that the pre-calculated values are + * immediately available to MS Excel or other office spreadsheet viewer when opening the file + * + * Overrides the default TRUE for this specific writer for performance reasons + * + * @var boolean + */ + protected $_preCalculateFormulas = FALSE; + + /** + * Office2003 compatibility + * + * @var boolean + */ + private $_office2003compatibility = false; + + /** + * Private writer parts + * + * @var PHPExcel_Writer_Excel2007_WriterPart[] + */ + private $_writerParts = array(); + + /** + * Private PHPExcel + * + * @var PHPExcel + */ + private $_spreadSheet; + + /** + * Private string table + * + * @var string[] + */ + private $_stringTable = array(); + + /** + * Private unique PHPExcel_Style_Conditional HashTable + * + * @var PHPExcel_HashTable + */ + private $_stylesConditionalHashTable; + + /** + * Private unique PHPExcel_Style HashTable + * + * @var PHPExcel_HashTable + */ + private $_styleHashTable; + + /** + * Private unique PHPExcel_Style_Fill HashTable + * + * @var PHPExcel_HashTable + */ + private $_fillHashTable; + + /** + * Private unique PHPExcel_Style_Font HashTable + * + * @var PHPExcel_HashTable + */ + private $_fontHashTable; + + /** + * Private unique PHPExcel_Style_Borders HashTable + * + * @var PHPExcel_HashTable + */ + private $_bordersHashTable ; + + /** + * Private unique PHPExcel_Style_NumberFormat HashTable + * + * @var PHPExcel_HashTable + */ + private $_numFmtHashTable; + + /** + * Private unique PHPExcel_Worksheet_BaseDrawing HashTable + * + * @var PHPExcel_HashTable + */ + private $_drawingHashTable; + + /** + * Create a new PHPExcel_Writer_Excel2007 + * + * @param PHPExcel $pPHPExcel + */ + public function __construct(PHPExcel $pPHPExcel = null) + { + // Assign PHPExcel + $this->setPHPExcel($pPHPExcel); + + $writerPartsArray = array( 'stringtable' => 'PHPExcel_Writer_Excel2007_StringTable', + 'contenttypes' => 'PHPExcel_Writer_Excel2007_ContentTypes', + 'docprops' => 'PHPExcel_Writer_Excel2007_DocProps', + 'rels' => 'PHPExcel_Writer_Excel2007_Rels', + 'theme' => 'PHPExcel_Writer_Excel2007_Theme', + 'style' => 'PHPExcel_Writer_Excel2007_Style', + 'workbook' => 'PHPExcel_Writer_Excel2007_Workbook', + 'worksheet' => 'PHPExcel_Writer_Excel2007_Worksheet', + 'drawing' => 'PHPExcel_Writer_Excel2007_Drawing', + 'comments' => 'PHPExcel_Writer_Excel2007_Comments', + 'chart' => 'PHPExcel_Writer_Excel2007_Chart', + 'relsvba' => 'PHPExcel_Writer_Excel2007_RelsVBA', + 'relsribbonobjects' => 'PHPExcel_Writer_Excel2007_RelsRibbon' + ); + + // Initialise writer parts + // and Assign their parent IWriters + foreach ($writerPartsArray as $writer => $class) { + $this->_writerParts[$writer] = new $class($this); + } + + $hashTablesArray = array( '_stylesConditionalHashTable', '_fillHashTable', '_fontHashTable', + '_bordersHashTable', '_numFmtHashTable', '_drawingHashTable', + '_styleHashTable' + ); + + // Set HashTable variables + foreach ($hashTablesArray as $tableName) { + $this->$tableName = new PHPExcel_HashTable(); + } + } + + /** + * Get writer part + * + * @param string $pPartName Writer part name + * @return PHPExcel_Writer_Excel2007_WriterPart + */ + public function getWriterPart($pPartName = '') { + if ($pPartName != '' && isset($this->_writerParts[strtolower($pPartName)])) { + return $this->_writerParts[strtolower($pPartName)]; + } else { + return null; + } + } + + /** + * Save PHPExcel to file + * + * @param string $pFilename + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = null) + { + if ($this->_spreadSheet !== NULL) { + // garbage collect + $this->_spreadSheet->garbageCollect(); + + // If $pFilename is php://output or php://stdout, make it a temporary file... + $originalFilename = $pFilename; + if (strtolower($pFilename) == 'php://output' || strtolower($pFilename) == 'php://stdout') { + $pFilename = @tempnam(PHPExcel_Shared_File::sys_get_temp_dir(), 'phpxltmp'); + if ($pFilename == '') { + $pFilename = $originalFilename; + } + } + + $saveDebugLog = PHPExcel_Calculation::getInstance($this->_spreadSheet)->getDebugLog()->getWriteDebugLog(); + PHPExcel_Calculation::getInstance($this->_spreadSheet)->getDebugLog()->setWriteDebugLog(FALSE); + $saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType(); + PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL); + + // Create string lookup table + $this->_stringTable = array(); + for ($i = 0; $i < $this->_spreadSheet->getSheetCount(); ++$i) { + $this->_stringTable = $this->getWriterPart('StringTable')->createStringTable($this->_spreadSheet->getSheet($i), $this->_stringTable); + } + + // Create styles dictionaries + $this->_styleHashTable->addFromSource( $this->getWriterPart('Style')->allStyles($this->_spreadSheet) ); + $this->_stylesConditionalHashTable->addFromSource( $this->getWriterPart('Style')->allConditionalStyles($this->_spreadSheet) ); + $this->_fillHashTable->addFromSource( $this->getWriterPart('Style')->allFills($this->_spreadSheet) ); + $this->_fontHashTable->addFromSource( $this->getWriterPart('Style')->allFonts($this->_spreadSheet) ); + $this->_bordersHashTable->addFromSource( $this->getWriterPart('Style')->allBorders($this->_spreadSheet) ); + $this->_numFmtHashTable->addFromSource( $this->getWriterPart('Style')->allNumberFormats($this->_spreadSheet) ); + + // Create drawing dictionary + $this->_drawingHashTable->addFromSource( $this->getWriterPart('Drawing')->allDrawings($this->_spreadSheet) ); + + // Create new ZIP file and open it for writing + $zipClass = PHPExcel_Settings::getZipClass(); + $objZip = new $zipClass(); + + // Retrieve OVERWRITE and CREATE constants from the instantiated zip class + // This method of accessing constant values from a dynamic class should work with all appropriate versions of PHP + $ro = new ReflectionObject($objZip); + $zipOverWrite = $ro->getConstant('OVERWRITE'); + $zipCreate = $ro->getConstant('CREATE'); + + if (file_exists($pFilename)) { + unlink($pFilename); + } + // Try opening the ZIP file + if ($objZip->open($pFilename, $zipOverWrite) !== true) { + if ($objZip->open($pFilename, $zipCreate) !== true) { + throw new PHPExcel_Writer_Exception("Could not open " . $pFilename . " for writing."); + } + } + + // Add [Content_Types].xml to ZIP file + $objZip->addFromString('[Content_Types].xml', $this->getWriterPart('ContentTypes')->writeContentTypes($this->_spreadSheet, $this->_includeCharts)); + + //if hasMacros, add the vbaProject.bin file, Certificate file(if exists) + if($this->_spreadSheet->hasMacros()){ + $macrosCode=$this->_spreadSheet->getMacrosCode(); + if(!is_null($macrosCode)){// we have the code ? + $objZip->addFromString('xl/vbaProject.bin', $macrosCode);//allways in 'xl', allways named vbaProject.bin + if($this->_spreadSheet->hasMacrosCertificate()){//signed macros ? + // Yes : add the certificate file and the related rels file + $objZip->addFromString('xl/vbaProjectSignature.bin', $this->_spreadSheet->getMacrosCertificate()); + $objZip->addFromString('xl/_rels/vbaProject.bin.rels', + $this->getWriterPart('RelsVBA')->writeVBARelationships($this->_spreadSheet)); + } + } + } + //a custom UI in this workbook ? add it ("base" xml and additional objects (pictures) and rels) + if($this->_spreadSheet->hasRibbon()){ + $tmpRibbonTarget=$this->_spreadSheet->getRibbonXMLData('target'); + $objZip->addFromString($tmpRibbonTarget, $this->_spreadSheet->getRibbonXMLData('data')); + if($this->_spreadSheet->hasRibbonBinObjects()){ + $tmpRootPath=dirname($tmpRibbonTarget).'/'; + $ribbonBinObjects=$this->_spreadSheet->getRibbonBinObjects('data');//the files to write + foreach($ribbonBinObjects as $aPath=>$aContent){ + $objZip->addFromString($tmpRootPath.$aPath, $aContent); + } + //the rels for files + $objZip->addFromString($tmpRootPath.'_rels/'.basename($tmpRibbonTarget).'.rels', + $this->getWriterPart('RelsRibbonObjects')->writeRibbonRelationships($this->_spreadSheet)); + } + } + + // Add relationships to ZIP file + $objZip->addFromString('_rels/.rels', $this->getWriterPart('Rels')->writeRelationships($this->_spreadSheet)); + $objZip->addFromString('xl/_rels/workbook.xml.rels', $this->getWriterPart('Rels')->writeWorkbookRelationships($this->_spreadSheet)); + + // Add document properties to ZIP file + $objZip->addFromString('docProps/app.xml', $this->getWriterPart('DocProps')->writeDocPropsApp($this->_spreadSheet)); + $objZip->addFromString('docProps/core.xml', $this->getWriterPart('DocProps')->writeDocPropsCore($this->_spreadSheet)); + $customPropertiesPart = $this->getWriterPart('DocProps')->writeDocPropsCustom($this->_spreadSheet); + if ($customPropertiesPart !== NULL) { + $objZip->addFromString('docProps/custom.xml', $customPropertiesPart); + } + + // Add theme to ZIP file + $objZip->addFromString('xl/theme/theme1.xml', $this->getWriterPart('Theme')->writeTheme($this->_spreadSheet)); + + // Add string table to ZIP file + $objZip->addFromString('xl/sharedStrings.xml', $this->getWriterPart('StringTable')->writeStringTable($this->_stringTable)); + + // Add styles to ZIP file + $objZip->addFromString('xl/styles.xml', $this->getWriterPart('Style')->writeStyles($this->_spreadSheet)); + + // Add workbook to ZIP file + $objZip->addFromString('xl/workbook.xml', $this->getWriterPart('Workbook')->writeWorkbook($this->_spreadSheet, $this->_preCalculateFormulas)); + + $chartCount = 0; + // Add worksheets + for ($i = 0; $i < $this->_spreadSheet->getSheetCount(); ++$i) { + $objZip->addFromString('xl/worksheets/sheet' . ($i + 1) . '.xml', $this->getWriterPart('Worksheet')->writeWorksheet($this->_spreadSheet->getSheet($i), $this->_stringTable, $this->_includeCharts)); + if ($this->_includeCharts) { + $charts = $this->_spreadSheet->getSheet($i)->getChartCollection(); + if (count($charts) > 0) { + foreach($charts as $chart) { + $objZip->addFromString('xl/charts/chart' . ($chartCount + 1) . '.xml', $this->getWriterPart('Chart')->writeChart($chart)); + $chartCount++; + } + } + } + } + + $chartRef1 = $chartRef2 = 0; + // Add worksheet relationships (drawings, ...) + for ($i = 0; $i < $this->_spreadSheet->getSheetCount(); ++$i) { + + // Add relationships + $objZip->addFromString('xl/worksheets/_rels/sheet' . ($i + 1) . '.xml.rels', $this->getWriterPart('Rels')->writeWorksheetRelationships($this->_spreadSheet->getSheet($i), ($i + 1), $this->_includeCharts)); + + $drawings = $this->_spreadSheet->getSheet($i)->getDrawingCollection(); + $drawingCount = count($drawings); + if ($this->_includeCharts) { + $chartCount = $this->_spreadSheet->getSheet($i)->getChartCount(); + } + + // Add drawing and image relationship parts + if (($drawingCount > 0) || ($chartCount > 0)) { + // Drawing relationships + $objZip->addFromString('xl/drawings/_rels/drawing' . ($i + 1) . '.xml.rels', $this->getWriterPart('Rels')->writeDrawingRelationships($this->_spreadSheet->getSheet($i),$chartRef1, $this->_includeCharts)); + + // Drawings + $objZip->addFromString('xl/drawings/drawing' . ($i + 1) . '.xml', $this->getWriterPart('Drawing')->writeDrawings($this->_spreadSheet->getSheet($i),$chartRef2,$this->_includeCharts)); + } + + // Add comment relationship parts + if (count($this->_spreadSheet->getSheet($i)->getComments()) > 0) { + // VML Comments + $objZip->addFromString('xl/drawings/vmlDrawing' . ($i + 1) . '.vml', $this->getWriterPart('Comments')->writeVMLComments($this->_spreadSheet->getSheet($i))); + + // Comments + $objZip->addFromString('xl/comments' . ($i + 1) . '.xml', $this->getWriterPart('Comments')->writeComments($this->_spreadSheet->getSheet($i))); + } + + // Add header/footer relationship parts + if (count($this->_spreadSheet->getSheet($i)->getHeaderFooter()->getImages()) > 0) { + // VML Drawings + $objZip->addFromString('xl/drawings/vmlDrawingHF' . ($i + 1) . '.vml', $this->getWriterPart('Drawing')->writeVMLHeaderFooterImages($this->_spreadSheet->getSheet($i))); + + // VML Drawing relationships + $objZip->addFromString('xl/drawings/_rels/vmlDrawingHF' . ($i + 1) . '.vml.rels', $this->getWriterPart('Rels')->writeHeaderFooterDrawingRelationships($this->_spreadSheet->getSheet($i))); + + // Media + foreach ($this->_spreadSheet->getSheet($i)->getHeaderFooter()->getImages() as $image) { + $objZip->addFromString('xl/media/' . $image->getIndexedFilename(), file_get_contents($image->getPath())); + } + } + } + + // Add media + for ($i = 0; $i < $this->getDrawingHashTable()->count(); ++$i) { + if ($this->getDrawingHashTable()->getByIndex($i) instanceof PHPExcel_Worksheet_Drawing) { + $imageContents = null; + $imagePath = $this->getDrawingHashTable()->getByIndex($i)->getPath(); + if (strpos($imagePath, 'zip://') !== false) { + $imagePath = substr($imagePath, 6); + $imagePathSplitted = explode('#', $imagePath); + + $imageZip = new ZipArchive(); + $imageZip->open($imagePathSplitted[0]); + $imageContents = $imageZip->getFromName($imagePathSplitted[1]); + $imageZip->close(); + unset($imageZip); + } else { + $imageContents = file_get_contents($imagePath); + } + + $objZip->addFromString('xl/media/' . str_replace(' ', '_', $this->getDrawingHashTable()->getByIndex($i)->getIndexedFilename()), $imageContents); + } else if ($this->getDrawingHashTable()->getByIndex($i) instanceof PHPExcel_Worksheet_MemoryDrawing) { + ob_start(); + call_user_func( + $this->getDrawingHashTable()->getByIndex($i)->getRenderingFunction(), + $this->getDrawingHashTable()->getByIndex($i)->getImageResource() + ); + $imageContents = ob_get_contents(); + ob_end_clean(); + + $objZip->addFromString('xl/media/' . str_replace(' ', '_', $this->getDrawingHashTable()->getByIndex($i)->getIndexedFilename()), $imageContents); + } + } + + PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType); + PHPExcel_Calculation::getInstance($this->_spreadSheet)->getDebugLog()->setWriteDebugLog($saveDebugLog); + + // Close file + if ($objZip->close() === false) { + throw new PHPExcel_Writer_Exception("Could not close zip file $pFilename."); + } + + // If a temporary file was used, copy it to the correct file stream + if ($originalFilename != $pFilename) { + if (copy($pFilename, $originalFilename) === false) { + throw new PHPExcel_Writer_Exception("Could not copy temporary zip file $pFilename to $originalFilename."); + } + @unlink($pFilename); + } + } else { + throw new PHPExcel_Writer_Exception("PHPExcel object unassigned."); + } + } + + /** + * Get PHPExcel object + * + * @return PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function getPHPExcel() { + if ($this->_spreadSheet !== null) { + return $this->_spreadSheet; + } else { + throw new PHPExcel_Writer_Exception("No PHPExcel assigned."); + } + } + + /** + * Set PHPExcel object + * + * @param PHPExcel $pPHPExcel PHPExcel object + * @throws PHPExcel_Writer_Exception + * @return PHPExcel_Writer_Excel2007 + */ + public function setPHPExcel(PHPExcel $pPHPExcel = null) { + $this->_spreadSheet = $pPHPExcel; + return $this; + } + + /** + * Get string table + * + * @return string[] + */ + public function getStringTable() { + return $this->_stringTable; + } + + /** + * Get PHPExcel_Style HashTable + * + * @return PHPExcel_HashTable + */ + public function getStyleHashTable() { + return $this->_styleHashTable; + } + + /** + * Get PHPExcel_Style_Conditional HashTable + * + * @return PHPExcel_HashTable + */ + public function getStylesConditionalHashTable() { + return $this->_stylesConditionalHashTable; + } + + /** + * Get PHPExcel_Style_Fill HashTable + * + * @return PHPExcel_HashTable + */ + public function getFillHashTable() { + return $this->_fillHashTable; + } + + /** + * Get PHPExcel_Style_Font HashTable + * + * @return PHPExcel_HashTable + */ + public function getFontHashTable() { + return $this->_fontHashTable; + } + + /** + * Get PHPExcel_Style_Borders HashTable + * + * @return PHPExcel_HashTable + */ + public function getBordersHashTable() { + return $this->_bordersHashTable; + } + + /** + * Get PHPExcel_Style_NumberFormat HashTable + * + * @return PHPExcel_HashTable + */ + public function getNumFmtHashTable() { + return $this->_numFmtHashTable; + } + + /** + * Get PHPExcel_Worksheet_BaseDrawing HashTable + * + * @return PHPExcel_HashTable + */ + public function getDrawingHashTable() { + return $this->_drawingHashTable; + } + + /** + * Get Office2003 compatibility + * + * @return boolean + */ + public function getOffice2003Compatibility() { + return $this->_office2003compatibility; + } + + /** + * Set Office2003 compatibility + * + * @param boolean $pValue Office2003 compatibility? + * @return PHPExcel_Writer_Excel2007 + */ + public function setOffice2003Compatibility($pValue = false) { + $this->_office2003compatibility = $pValue; + return $this; + } + +} diff --git a/PHPExcel/Writer/Excel2007/Chart.php b/PHPExcel/Writer/Excel2007/Chart.php new file mode 100644 index 0000000..526daa9 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Chart.php @@ -0,0 +1,1203 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Chart + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Chart extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write charts to XML format + * + * @param PHPExcel_Chart $pChart + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeChart(PHPExcel_Chart $pChart = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + // Ensure that data series values are up-to-date before we save + $pChart->refresh(); + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // c:chartSpace + $objWriter->startElement('c:chartSpace'); + $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); + $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + + $objWriter->startElement('c:date1904'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + $objWriter->startElement('c:lang'); + $objWriter->writeAttribute('val', "en-GB"); + $objWriter->endElement(); + $objWriter->startElement('c:roundedCorners'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $this->_writeAlternateContent($objWriter); + + $objWriter->startElement('c:chart'); + + $this->_writeTitle($pChart->getTitle(), $objWriter); + + $objWriter->startElement('c:autoTitleDeleted'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $this->_writePlotArea($pChart->getPlotArea(), + $pChart->getXAxisLabel(), + $pChart->getYAxisLabel(), + $objWriter, + $pChart->getWorksheet() + ); + + $this->_writeLegend($pChart->getLegend(), $objWriter); + + + $objWriter->startElement('c:plotVisOnly'); + $objWriter->writeAttribute('val', 1); + $objWriter->endElement(); + + $objWriter->startElement('c:dispBlanksAs'); + $objWriter->writeAttribute('val', "gap"); + $objWriter->endElement(); + + $objWriter->startElement('c:showDLblsOverMax'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $objWriter->endElement(); + + $this->_writePrintSettings($objWriter); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write Chart Title + * + * @param PHPExcel_Chart_Title $title + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writeTitle(PHPExcel_Chart_Title $title = null, $objWriter) + { + if (is_null($title)) { + return; + } + + $objWriter->startElement('c:title'); + $objWriter->startElement('c:tx'); + $objWriter->startElement('c:rich'); + + $objWriter->startElement('a:bodyPr'); + $objWriter->endElement(); + + $objWriter->startElement('a:lstStyle'); + $objWriter->endElement(); + + $objWriter->startElement('a:p'); + + $caption = $title->getCaption(); + if ((is_array($caption)) && (count($caption) > 0)) + $caption = $caption[0]; + $this->getParentWriter()->getWriterPart('stringtable')->writeRichTextForCharts($objWriter, $caption, 'a'); + + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + + $layout = $title->getLayout(); + $this->_writeLayout($layout, $objWriter); + + $objWriter->startElement('c:overlay'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write Chart Legend + * + * @param PHPExcel_Chart_Legend $legend + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writeLegend(PHPExcel_Chart_Legend $legend = null, $objWriter) + { + if (is_null($legend)) { + return; + } + + $objWriter->startElement('c:legend'); + + $objWriter->startElement('c:legendPos'); + $objWriter->writeAttribute('val', $legend->getPosition()); + $objWriter->endElement(); + + $layout = $legend->getLayout(); + $this->_writeLayout($layout, $objWriter); + + $objWriter->startElement('c:overlay'); + $objWriter->writeAttribute('val', ($legend->getOverlay()) ? '1' : '0'); + $objWriter->endElement(); + + $objWriter->startElement('c:txPr'); + $objWriter->startElement('a:bodyPr'); + $objWriter->endElement(); + + $objWriter->startElement('a:lstStyle'); + $objWriter->endElement(); + + $objWriter->startElement('a:p'); + $objWriter->startElement('a:pPr'); + $objWriter->writeAttribute('rtl', 0); + + $objWriter->startElement('a:defRPr'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('a:endParaRPr'); + $objWriter->writeAttribute('lang', "en-US"); + $objWriter->endElement(); + + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write Chart Plot Area + * + * @param PHPExcel_Chart_PlotArea $plotArea + * @param PHPExcel_Chart_Title $xAxisLabel + * @param PHPExcel_Chart_Title $yAxisLabel + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writePlotArea(PHPExcel_Chart_PlotArea $plotArea, + PHPExcel_Chart_Title $xAxisLabel = NULL, + PHPExcel_Chart_Title $yAxisLabel = NULL, + $objWriter, + PHPExcel_Worksheet $pSheet) + { + if (is_null($plotArea)) { + return; + } + + $id1 = $id2 = 0; + $this->_seriesIndex = 0; + $objWriter->startElement('c:plotArea'); + + $layout = $plotArea->getLayout(); + + $this->_writeLayout($layout, $objWriter); + + $chartTypes = self::_getChartType($plotArea); + $catIsMultiLevelSeries = $valIsMultiLevelSeries = FALSE; + $plotGroupingType = ''; + foreach($chartTypes as $chartType) { + $objWriter->startElement('c:'.$chartType); + + $groupCount = $plotArea->getPlotGroupCount(); + for($i = 0; $i < $groupCount; ++$i) { + $plotGroup = $plotArea->getPlotGroupByIndex($i); + $groupType = $plotGroup->getPlotType(); + if ($groupType == $chartType) { + + $plotStyle = $plotGroup->getPlotStyle(); + if ($groupType === PHPExcel_Chart_DataSeries::TYPE_RADARCHART) { + $objWriter->startElement('c:radarStyle'); + $objWriter->writeAttribute('val', $plotStyle ); + $objWriter->endElement(); + } elseif ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART) { + $objWriter->startElement('c:scatterStyle'); + $objWriter->writeAttribute('val', $plotStyle ); + $objWriter->endElement(); + } + + $this->_writePlotGroup($plotGroup, $chartType, $objWriter, $catIsMultiLevelSeries, $valIsMultiLevelSeries, $plotGroupingType, $pSheet); + } + } + + $this->_writeDataLbls($objWriter, $layout); + + if ($chartType === PHPExcel_Chart_DataSeries::TYPE_LINECHART) { + // Line only, Line3D can't be smoothed + + $objWriter->startElement('c:smooth'); + $objWriter->writeAttribute('val', (integer) $plotGroup->getSmoothLine() ); + $objWriter->endElement(); + } elseif (($chartType === PHPExcel_Chart_DataSeries::TYPE_BARCHART) || + ($chartType === PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D)) { + + $objWriter->startElement('c:gapWidth'); + $objWriter->writeAttribute('val', 150 ); + $objWriter->endElement(); + + if ($plotGroupingType == 'percentStacked' || + $plotGroupingType == 'stacked') { + + $objWriter->startElement('c:overlap'); + $objWriter->writeAttribute('val', 100 ); + $objWriter->endElement(); + } + } elseif ($chartType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { + + $objWriter->startElement('c:bubbleScale'); + $objWriter->writeAttribute('val', 25 ); + $objWriter->endElement(); + + $objWriter->startElement('c:showNegBubbles'); + $objWriter->writeAttribute('val', 0 ); + $objWriter->endElement(); + } elseif ($chartType === PHPExcel_Chart_DataSeries::TYPE_STOCKCHART) { + + $objWriter->startElement('c:hiLowLines'); + $objWriter->endElement(); + + $objWriter->startElement( 'c:upDownBars' ); + + $objWriter->startElement( 'c:gapWidth' ); + $objWriter->writeAttribute('val', 300); + $objWriter->endElement(); + + $objWriter->startElement( 'c:upBars' ); + $objWriter->endElement(); + + $objWriter->startElement( 'c:downBars' ); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + // Generate 2 unique numbers to use for axId values +// $id1 = $id2 = rand(10000000,99999999); +// do { +// $id2 = rand(10000000,99999999); +// } while ($id1 == $id2); + $id1 = '75091328'; + $id2 = '75089408'; + + if (($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART) && + ($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && + ($chartType !== PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { + + $objWriter->startElement('c:axId'); + $objWriter->writeAttribute('val', $id1 ); + $objWriter->endElement(); + $objWriter->startElement('c:axId'); + $objWriter->writeAttribute('val', $id2 ); + $objWriter->endElement(); + } else { + $objWriter->startElement('c:firstSliceAng'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + if ($chartType === PHPExcel_Chart_DataSeries::TYPE_DONUTCHART) { + + $objWriter->startElement('c:holeSize'); + $objWriter->writeAttribute('val', 50); + $objWriter->endElement(); + } + } + + $objWriter->endElement(); + } + + if (($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART) && + ($chartType !== PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && + ($chartType !== PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { + + if ($chartType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { + $this->_writeValAx($objWriter,$plotArea,$xAxisLabel,$chartType,$id1,$id2,$catIsMultiLevelSeries); + } else { + $this->_writeCatAx($objWriter,$plotArea,$xAxisLabel,$chartType,$id1,$id2,$catIsMultiLevelSeries); + } + + $this->_writeValAx($objWriter,$plotArea,$yAxisLabel,$chartType,$id1,$id2,$valIsMultiLevelSeries); + } + + $objWriter->endElement(); + } + + /** + * Write Data Labels + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Chart_Layout $chartLayout Chart layout + * @throws PHPExcel_Writer_Exception + */ + private function _writeDataLbls($objWriter, $chartLayout) + { + $objWriter->startElement('c:dLbls'); + + $objWriter->startElement('c:showLegendKey'); + $showLegendKey = (empty($chartLayout)) ? 0 : $chartLayout->getShowLegendKey(); + $objWriter->writeAttribute('val', ((empty($showLegendKey)) ? 0 : 1) ); + $objWriter->endElement(); + + + $objWriter->startElement('c:showVal'); + $showVal = (empty($chartLayout)) ? 0 : $chartLayout->getShowVal(); + $objWriter->writeAttribute('val', ((empty($showVal)) ? 0 : 1) ); + $objWriter->endElement(); + + $objWriter->startElement('c:showCatName'); + $showCatName = (empty($chartLayout)) ? 0 : $chartLayout->getShowCatName(); + $objWriter->writeAttribute('val', ((empty($showCatName)) ? 0 : 1) ); + $objWriter->endElement(); + + $objWriter->startElement('c:showSerName'); + $showSerName = (empty($chartLayout)) ? 0 : $chartLayout->getShowSerName(); + $objWriter->writeAttribute('val', ((empty($showSerName)) ? 0 : 1) ); + $objWriter->endElement(); + + $objWriter->startElement('c:showPercent'); + $showPercent = (empty($chartLayout)) ? 0 : $chartLayout->getShowPercent(); + $objWriter->writeAttribute('val', ((empty($showPercent)) ? 0 : 1) ); + $objWriter->endElement(); + + $objWriter->startElement('c:showBubbleSize'); + $showBubbleSize = (empty($chartLayout)) ? 0 : $chartLayout->getShowBubbleSize(); + $objWriter->writeAttribute('val', ((empty($showBubbleSize)) ? 0 : 1) ); + $objWriter->endElement(); + + $objWriter->startElement('c:showLeaderLines'); + $showLeaderLines = (empty($chartLayout)) ? 1 : $chartLayout->getShowLeaderLines(); + $objWriter->writeAttribute('val', ((empty($showLeaderLines)) ? 0 : 1) ); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write Category Axis + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Chart_PlotArea $plotArea + * @param PHPExcel_Chart_Title $xAxisLabel + * @param string $groupType Chart type + * @param string $id1 + * @param string $id2 + * @param boolean $isMultiLevelSeries + * @throws PHPExcel_Writer_Exception + */ + private function _writeCatAx($objWriter, PHPExcel_Chart_PlotArea $plotArea, $xAxisLabel, $groupType, $id1, $id2, $isMultiLevelSeries) + { + $objWriter->startElement('c:catAx'); + + if ($id1 > 0) { + $objWriter->startElement('c:axId'); + $objWriter->writeAttribute('val', $id1); + $objWriter->endElement(); + } + + $objWriter->startElement('c:scaling'); + $objWriter->startElement('c:orientation'); + $objWriter->writeAttribute('val', "minMax"); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('c:delete'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $objWriter->startElement('c:axPos'); + $objWriter->writeAttribute('val', "b"); + $objWriter->endElement(); + + if (!is_null($xAxisLabel)) { + $objWriter->startElement('c:title'); + $objWriter->startElement('c:tx'); + $objWriter->startElement('c:rich'); + + $objWriter->startElement('a:bodyPr'); + $objWriter->endElement(); + + $objWriter->startElement('a:lstStyle'); + $objWriter->endElement(); + + $objWriter->startElement('a:p'); + $objWriter->startElement('a:r'); + + $caption = $xAxisLabel->getCaption(); + if (is_array($caption)) + $caption = $caption[0]; + $objWriter->startElement('a:t'); +// $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $caption )); + $objWriter->endElement(); + + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + + $layout = $xAxisLabel->getLayout(); + $this->_writeLayout($layout, $objWriter); + + $objWriter->startElement('c:overlay'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $objWriter->endElement(); + + } + + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', "General"); + $objWriter->writeAttribute('sourceLinked', 1); + $objWriter->endElement(); + + $objWriter->startElement('c:majorTickMark'); + $objWriter->writeAttribute('val', "out"); + $objWriter->endElement(); + + $objWriter->startElement('c:minorTickMark'); + $objWriter->writeAttribute('val', "none"); + $objWriter->endElement(); + + $objWriter->startElement('c:tickLblPos'); + $objWriter->writeAttribute('val', "nextTo"); + $objWriter->endElement(); + + if ($id2 > 0) { + $objWriter->startElement('c:crossAx'); + $objWriter->writeAttribute('val', $id2); + $objWriter->endElement(); + + $objWriter->startElement('c:crosses'); + $objWriter->writeAttribute('val', "autoZero"); + $objWriter->endElement(); + } + + $objWriter->startElement('c:auto'); + $objWriter->writeAttribute('val', 1); + $objWriter->endElement(); + + $objWriter->startElement('c:lblAlgn'); + $objWriter->writeAttribute('val', "ctr"); + $objWriter->endElement(); + + $objWriter->startElement('c:lblOffset'); + $objWriter->writeAttribute('val', 100); + $objWriter->endElement(); + + if ($isMultiLevelSeries) { + $objWriter->startElement('c:noMultiLvlLbl'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + } + $objWriter->endElement(); + + } + + + /** + * Write Value Axis + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Chart_PlotArea $plotArea + * @param PHPExcel_Chart_Title $yAxisLabel + * @param string $groupType Chart type + * @param string $id1 + * @param string $id2 + * @param boolean $isMultiLevelSeries + * @throws PHPExcel_Writer_Exception + */ + private function _writeValAx($objWriter, PHPExcel_Chart_PlotArea $plotArea, $yAxisLabel, $groupType, $id1, $id2, $isMultiLevelSeries) + { + $objWriter->startElement('c:valAx'); + + if ($id2 > 0) { + $objWriter->startElement('c:axId'); + $objWriter->writeAttribute('val', $id2); + $objWriter->endElement(); + } + + $objWriter->startElement('c:scaling'); + $objWriter->startElement('c:orientation'); + $objWriter->writeAttribute('val', "minMax"); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('c:delete'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $objWriter->startElement('c:axPos'); + $objWriter->writeAttribute('val', "l"); + $objWriter->endElement(); + + $objWriter->startElement('c:majorGridlines'); + $objWriter->endElement(); + + if (!is_null($yAxisLabel)) { + $objWriter->startElement('c:title'); + $objWriter->startElement('c:tx'); + $objWriter->startElement('c:rich'); + + $objWriter->startElement('a:bodyPr'); + $objWriter->endElement(); + + $objWriter->startElement('a:lstStyle'); + $objWriter->endElement(); + + $objWriter->startElement('a:p'); + $objWriter->startElement('a:r'); + + $caption = $yAxisLabel->getCaption(); + if (is_array($caption)) + $caption = $caption[0]; + $objWriter->startElement('a:t'); +// $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $caption )); + $objWriter->endElement(); + + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + + if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { + $layout = $yAxisLabel->getLayout(); + $this->_writeLayout($layout, $objWriter); + } + + $objWriter->startElement('c:overlay'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + $objWriter->startElement('c:numFmt'); + $objWriter->writeAttribute('formatCode', "General"); + $objWriter->writeAttribute('sourceLinked', 1); + $objWriter->endElement(); + + $objWriter->startElement('c:majorTickMark'); + $objWriter->writeAttribute('val', "out"); + $objWriter->endElement(); + + $objWriter->startElement('c:minorTickMark'); + $objWriter->writeAttribute('val', "none"); + $objWriter->endElement(); + + $objWriter->startElement('c:tickLblPos'); + $objWriter->writeAttribute('val', "nextTo"); + $objWriter->endElement(); + + if ($id1 > 0) { + $objWriter->startElement('c:crossAx'); + $objWriter->writeAttribute('val', $id2); + $objWriter->endElement(); + + $objWriter->startElement('c:crosses'); + $objWriter->writeAttribute('val', "autoZero"); + $objWriter->endElement(); + + $objWriter->startElement('c:crossBetween'); + $objWriter->writeAttribute('val', "midCat"); + $objWriter->endElement(); + } + + if ($isMultiLevelSeries) { + if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { + $objWriter->startElement('c:noMultiLvlLbl'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + } + } + $objWriter->endElement(); + + } + + + /** + * Get the data series type(s) for a chart plot series + * + * @param PHPExcel_Chart_PlotArea $plotArea + * @return string|array + * @throws PHPExcel_Writer_Exception + */ + private static function _getChartType($plotArea) + { + $groupCount = $plotArea->getPlotGroupCount(); + + if ($groupCount == 1) { + $chartType = array($plotArea->getPlotGroupByIndex(0)->getPlotType()); + } else { + $chartTypes = array(); + for($i = 0; $i < $groupCount; ++$i) { + $chartTypes[] = $plotArea->getPlotGroupByIndex($i)->getPlotType(); + } + $chartType = array_unique($chartTypes); + if (count($chartTypes) == 0) { + throw new PHPExcel_Writer_Exception('Chart is not yet implemented'); + } + } + + return $chartType; + } + + /** + * Write Plot Group (series of related plots) + * + * @param PHPExcel_Chart_DataSeries $plotGroup + * @param string $groupType Type of plot for dataseries + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param boolean &$catIsMultiLevelSeries Is category a multi-series category + * @param boolean &$valIsMultiLevelSeries Is value set a multi-series set + * @param string &$plotGroupingType Type of grouping for multi-series values + * @param PHPExcel_Worksheet $pSheet + * @throws PHPExcel_Writer_Exception + */ + private function _writePlotGroup( $plotGroup, + $groupType, + $objWriter, + &$catIsMultiLevelSeries, + &$valIsMultiLevelSeries, + &$plotGroupingType, + PHPExcel_Worksheet $pSheet + ) + { + if (is_null($plotGroup)) { + return; + } + + if (($groupType == PHPExcel_Chart_DataSeries::TYPE_BARCHART) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D)) { + $objWriter->startElement('c:barDir'); + $objWriter->writeAttribute('val', $plotGroup->getPlotDirection()); + $objWriter->endElement(); + } + + if (!is_null($plotGroup->getPlotGrouping())) { + $plotGroupingType = $plotGroup->getPlotGrouping(); + $objWriter->startElement('c:grouping'); + $objWriter->writeAttribute('val', $plotGroupingType); + $objWriter->endElement(); + } + + // Get these details before the loop, because we can use the count to check for varyColors + $plotSeriesOrder = $plotGroup->getPlotOrder(); + $plotSeriesCount = count($plotSeriesOrder); + + if (($groupType !== PHPExcel_Chart_DataSeries::TYPE_RADARCHART) && + ($groupType !== PHPExcel_Chart_DataSeries::TYPE_STOCKCHART)) { + + if ($groupType !== PHPExcel_Chart_DataSeries::TYPE_LINECHART) { + if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART) || + ($plotSeriesCount > 1)) { + $objWriter->startElement('c:varyColors'); + $objWriter->writeAttribute('val', 1); + $objWriter->endElement(); + } else { + $objWriter->startElement('c:varyColors'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + } + } + } + + foreach($plotSeriesOrder as $plotSeriesIdx => $plotSeriesRef) { + $objWriter->startElement('c:ser'); + + $objWriter->startElement('c:idx'); + $objWriter->writeAttribute('val', $this->_seriesIndex + $plotSeriesIdx); + $objWriter->endElement(); + + $objWriter->startElement('c:order'); + $objWriter->writeAttribute('val', $this->_seriesIndex + $plotSeriesRef); + $objWriter->endElement(); + + if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { + + $objWriter->startElement('c:dPt'); + $objWriter->startElement('c:idx'); + $objWriter->writeAttribute('val', 3); + $objWriter->endElement(); + + $objWriter->startElement('c:bubble3D'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + + $objWriter->startElement('c:spPr'); + $objWriter->startElement('a:solidFill'); + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', 'FF9900'); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + } + + // Labels + $plotSeriesLabel = $plotGroup->getPlotLabelByIndex($plotSeriesRef); + if ($plotSeriesLabel && ($plotSeriesLabel->getPointCount() > 0)) { + $objWriter->startElement('c:tx'); + $objWriter->startElement('c:strRef'); + $this->_writePlotSeriesLabel($plotSeriesLabel, $objWriter); + $objWriter->endElement(); + $objWriter->endElement(); + } + + // Formatting for the points + if (($groupType == PHPExcel_Chart_DataSeries::TYPE_LINECHART) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_STOCKCHART)) { + $objWriter->startElement('c:spPr'); + $objWriter->startElement('a:ln'); + $objWriter->writeAttribute('w', 12700); + if ($groupType == PHPExcel_Chart_DataSeries::TYPE_STOCKCHART) { + $objWriter->startElement('a:noFill'); + $objWriter->endElement(); + } + $objWriter->endElement(); + $objWriter->endElement(); + } + + $plotSeriesValues = $plotGroup->getPlotValuesByIndex($plotSeriesRef); + if ($plotSeriesValues) { + $plotSeriesMarker = $plotSeriesValues->getPointMarker(); + if ($plotSeriesMarker) { + $objWriter->startElement('c:marker'); + $objWriter->startElement('c:symbol'); + $objWriter->writeAttribute('val', $plotSeriesMarker); + $objWriter->endElement(); + + if ($plotSeriesMarker !== 'none') { + $objWriter->startElement('c:size'); + $objWriter->writeAttribute('val', 3); + $objWriter->endElement(); + } + $objWriter->endElement(); + } + } + + if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BARCHART) || + ($groupType === PHPExcel_Chart_DataSeries::TYPE_BARCHART_3D) || + ($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART)) { + + $objWriter->startElement('c:invertIfNegative'); + $objWriter->writeAttribute('val', 0); + $objWriter->endElement(); + } + + // Category Labels + $plotSeriesCategory = $plotGroup->getPlotCategoryByIndex($plotSeriesRef); + if ($plotSeriesCategory && ($plotSeriesCategory->getPointCount() > 0)) { + $catIsMultiLevelSeries = $catIsMultiLevelSeries || $plotSeriesCategory->isMultiLevelSeries(); + + if (($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) || + ($groupType == PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { + + if (!is_null($plotGroup->getPlotStyle())) { + $plotStyle = $plotGroup->getPlotStyle(); + if ($plotStyle) { + $objWriter->startElement('c:explosion'); + $objWriter->writeAttribute('val', 25); + $objWriter->endElement(); + } + } + } + + if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) || + ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART)) { + $objWriter->startElement('c:xVal'); + } else { + $objWriter->startElement('c:cat'); + } + + $this->_writePlotSeriesValues($plotSeriesCategory, $objWriter, $groupType, 'str', $pSheet); + $objWriter->endElement(); + } + + // Values + if ($plotSeriesValues) { + $valIsMultiLevelSeries = $valIsMultiLevelSeries || $plotSeriesValues->isMultiLevelSeries(); + + if (($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) || + ($groupType === PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART)) { + $objWriter->startElement('c:yVal'); + } else { + $objWriter->startElement('c:val'); + } + + $this->_writePlotSeriesValues($plotSeriesValues, $objWriter, $groupType, 'num', $pSheet); + $objWriter->endElement(); + } + + if ($groupType === PHPExcel_Chart_DataSeries::TYPE_BUBBLECHART) { + $this->_writeBubbles($plotSeriesValues, $objWriter, $pSheet); + } + + $objWriter->endElement(); + + } + + $this->_seriesIndex += $plotSeriesIdx + 1; + } + + /** + * Write Plot Series Label + * + * @param PHPExcel_Chart_DataSeriesValues $plotSeriesLabel + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writePlotSeriesLabel($plotSeriesLabel, $objWriter) + { + if (is_null($plotSeriesLabel)) { + return; + } + + $objWriter->startElement('c:f'); + $objWriter->writeRawData($plotSeriesLabel->getDataSource()); + $objWriter->endElement(); + + $objWriter->startElement('c:strCache'); + $objWriter->startElement('c:ptCount'); + $objWriter->writeAttribute('val', $plotSeriesLabel->getPointCount() ); + $objWriter->endElement(); + + foreach($plotSeriesLabel->getDataValues() as $plotLabelKey => $plotLabelValue) { + $objWriter->startElement('c:pt'); + $objWriter->writeAttribute('idx', $plotLabelKey ); + + $objWriter->startElement('c:v'); + $objWriter->writeRawData( $plotLabelValue ); + $objWriter->endElement(); + $objWriter->endElement(); + } + $objWriter->endElement(); + + } + + /** + * Write Plot Series Values + * + * @param PHPExcel_Chart_DataSeriesValues $plotSeriesValues + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $groupType Type of plot for dataseries + * @param string $dataType Datatype of series values + * @param PHPExcel_Worksheet $pSheet + * @throws PHPExcel_Writer_Exception + */ + private function _writePlotSeriesValues( $plotSeriesValues, + $objWriter, + $groupType, + $dataType='str', + PHPExcel_Worksheet $pSheet + ) + { + if (is_null($plotSeriesValues)) { + return; + } + + if ($plotSeriesValues->isMultiLevelSeries()) { + $levelCount = $plotSeriesValues->multiLevelCount(); + + $objWriter->startElement('c:multiLvlStrRef'); + + $objWriter->startElement('c:f'); + $objWriter->writeRawData( $plotSeriesValues->getDataSource() ); + $objWriter->endElement(); + + $objWriter->startElement('c:multiLvlStrCache'); + + $objWriter->startElement('c:ptCount'); + $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount() ); + $objWriter->endElement(); + + for ($level = 0; $level < $levelCount; ++$level) { + $objWriter->startElement('c:lvl'); + + foreach($plotSeriesValues->getDataValues() as $plotSeriesKey => $plotSeriesValue) { + if (isset($plotSeriesValue[$level])) { + $objWriter->startElement('c:pt'); + $objWriter->writeAttribute('idx', $plotSeriesKey ); + + $objWriter->startElement('c:v'); + $objWriter->writeRawData( $plotSeriesValue[$level] ); + $objWriter->endElement(); + $objWriter->endElement(); + } + } + + $objWriter->endElement(); + } + + $objWriter->endElement(); + + $objWriter->endElement(); + } else { + $objWriter->startElement('c:'.$dataType.'Ref'); + + $objWriter->startElement('c:f'); + $objWriter->writeRawData( $plotSeriesValues->getDataSource() ); + $objWriter->endElement(); + + $objWriter->startElement('c:'.$dataType.'Cache'); + + if (($groupType != PHPExcel_Chart_DataSeries::TYPE_PIECHART) && + ($groupType != PHPExcel_Chart_DataSeries::TYPE_PIECHART_3D) && + ($groupType != PHPExcel_Chart_DataSeries::TYPE_DONUTCHART)) { + + if (($plotSeriesValues->getFormatCode() !== NULL) && + ($plotSeriesValues->getFormatCode() !== '')) { + $objWriter->startElement('c:formatCode'); + $objWriter->writeRawData( $plotSeriesValues->getFormatCode() ); + $objWriter->endElement(); + } + } + + $objWriter->startElement('c:ptCount'); + $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount() ); + $objWriter->endElement(); + + $dataValues = $plotSeriesValues->getDataValues(); + if (!empty($dataValues)) { + if (is_array($dataValues)) { + foreach($dataValues as $plotSeriesKey => $plotSeriesValue) { + $objWriter->startElement('c:pt'); + $objWriter->writeAttribute('idx', $plotSeriesKey ); + + $objWriter->startElement('c:v'); + $objWriter->writeRawData( $plotSeriesValue ); + $objWriter->endElement(); + $objWriter->endElement(); + } + } + } + + $objWriter->endElement(); + + $objWriter->endElement(); + } + } + + /** + * Write Bubble Chart Details + * + * @param PHPExcel_Chart_DataSeriesValues $plotSeriesValues + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writeBubbles($plotSeriesValues, $objWriter, PHPExcel_Worksheet $pSheet) + { + if (is_null($plotSeriesValues)) { + return; + } + + $objWriter->startElement('c:bubbleSize'); + $objWriter->startElement('c:numLit'); + + $objWriter->startElement('c:formatCode'); + $objWriter->writeRawData( 'General' ); + $objWriter->endElement(); + + $objWriter->startElement('c:ptCount'); + $objWriter->writeAttribute('val', $plotSeriesValues->getPointCount() ); + $objWriter->endElement(); + + $dataValues = $plotSeriesValues->getDataValues(); + if (!empty($dataValues)) { + if (is_array($dataValues)) { + foreach($dataValues as $plotSeriesKey => $plotSeriesValue) { + $objWriter->startElement('c:pt'); + $objWriter->writeAttribute('idx', $plotSeriesKey ); + $objWriter->startElement('c:v'); + $objWriter->writeRawData( 1 ); + $objWriter->endElement(); + $objWriter->endElement(); + } + } + } + + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('c:bubble3D'); + $objWriter->writeAttribute('val', 0 ); + $objWriter->endElement(); + } + + /** + * Write Layout + * + * @param PHPExcel_Chart_Layout $layout + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writeLayout(PHPExcel_Chart_Layout $layout = NULL, $objWriter) + { + $objWriter->startElement('c:layout'); + + if (!is_null($layout)) { + $objWriter->startElement('c:manualLayout'); + + $layoutTarget = $layout->getLayoutTarget(); + if (!is_null($layoutTarget)) { + $objWriter->startElement('c:layoutTarget'); + $objWriter->writeAttribute('val', $layoutTarget); + $objWriter->endElement(); + } + + $xMode = $layout->getXMode(); + if (!is_null($xMode)) { + $objWriter->startElement('c:xMode'); + $objWriter->writeAttribute('val', $xMode); + $objWriter->endElement(); + } + + $yMode = $layout->getYMode(); + if (!is_null($yMode)) { + $objWriter->startElement('c:yMode'); + $objWriter->writeAttribute('val', $yMode); + $objWriter->endElement(); + } + + $x = $layout->getXPosition(); + if (!is_null($x)) { + $objWriter->startElement('c:x'); + $objWriter->writeAttribute('val', $x); + $objWriter->endElement(); + } + + $y = $layout->getYPosition(); + if (!is_null($y)) { + $objWriter->startElement('c:y'); + $objWriter->writeAttribute('val', $y); + $objWriter->endElement(); + } + + $w = $layout->getWidth(); + if (!is_null($w)) { + $objWriter->startElement('c:w'); + $objWriter->writeAttribute('val', $w); + $objWriter->endElement(); + } + + $h = $layout->getHeight(); + if (!is_null($h)) { + $objWriter->startElement('c:h'); + $objWriter->writeAttribute('val', $h); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + + /** + * Write Alternate Content block + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writeAlternateContent($objWriter) + { + $objWriter->startElement('mc:AlternateContent'); + $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006'); + + $objWriter->startElement('mc:Choice'); + $objWriter->writeAttribute('xmlns:c14', 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart'); + $objWriter->writeAttribute('Requires', 'c14'); + + $objWriter->startElement('c14:style'); + $objWriter->writeAttribute('val', '102'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('mc:Fallback'); + $objWriter->startElement('c:style'); + $objWriter->writeAttribute('val', '2'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write Printer Settings + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writePrintSettings($objWriter) + { + $objWriter->startElement('c:printSettings'); + + $objWriter->startElement('c:headerFooter'); + $objWriter->endElement(); + + $objWriter->startElement('c:pageMargins'); + $objWriter->writeAttribute('footer', 0.3); + $objWriter->writeAttribute('header', 0.3); + $objWriter->writeAttribute('r', 0.7); + $objWriter->writeAttribute('l', 0.7); + $objWriter->writeAttribute('t', 0.75); + $objWriter->writeAttribute('b', 0.75); + $objWriter->endElement(); + + $objWriter->startElement('c:pageSetup'); + $objWriter->writeAttribute('orientation', "portrait"); + $objWriter->endElement(); + + $objWriter->endElement(); + } + +} diff --git a/PHPExcel/Writer/Excel2007/Comments.php b/PHPExcel/Writer/Excel2007/Comments.php new file mode 100644 index 0000000..436219c --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Comments.php @@ -0,0 +1,268 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Comments + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Comments extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write comments to XML format + * + * @param PHPExcel_Worksheet $pWorksheet + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeComments(PHPExcel_Worksheet $pWorksheet = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Comments cache + $comments = $pWorksheet->getComments(); + + // Authors cache + $authors = array(); + $authorId = 0; + foreach ($comments as $comment) { + if (!isset($authors[$comment->getAuthor()])) { + $authors[$comment->getAuthor()] = $authorId++; + } + } + + // comments + $objWriter->startElement('comments'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); + + // Loop through authors + $objWriter->startElement('authors'); + foreach ($authors as $author => $index) { + $objWriter->writeElement('author', $author); + } + $objWriter->endElement(); + + // Loop through comments + $objWriter->startElement('commentList'); + foreach ($comments as $key => $value) { + $this->_writeComment($objWriter, $key, $value, $authors); + } + $objWriter->endElement(); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write comment to XML format + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $pCellReference Cell reference + * @param PHPExcel_Comment $pComment Comment + * @param array $pAuthors Array of authors + * @throws PHPExcel_Writer_Exception + */ + public function _writeComment(PHPExcel_Shared_XMLWriter $objWriter = null, $pCellReference = 'A1', PHPExcel_Comment $pComment = null, $pAuthors = null) + { + // comment + $objWriter->startElement('comment'); + $objWriter->writeAttribute('ref', $pCellReference); + $objWriter->writeAttribute('authorId', $pAuthors[$pComment->getAuthor()]); + + // text + $objWriter->startElement('text'); + $this->getParentWriter()->getWriterPart('stringtable')->writeRichText($objWriter, $pComment->getText()); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write VML comments to XML format + * + * @param PHPExcel_Worksheet $pWorksheet + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeVMLComments(PHPExcel_Worksheet $pWorksheet = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Comments cache + $comments = $pWorksheet->getComments(); + + // xml + $objWriter->startElement('xml'); + $objWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml'); + $objWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office'); + $objWriter->writeAttribute('xmlns:x', 'urn:schemas-microsoft-com:office:excel'); + + // o:shapelayout + $objWriter->startElement('o:shapelayout'); + $objWriter->writeAttribute('v:ext', 'edit'); + + // o:idmap + $objWriter->startElement('o:idmap'); + $objWriter->writeAttribute('v:ext', 'edit'); + $objWriter->writeAttribute('data', '1'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // v:shapetype + $objWriter->startElement('v:shapetype'); + $objWriter->writeAttribute('id', '_x0000_t202'); + $objWriter->writeAttribute('coordsize', '21600,21600'); + $objWriter->writeAttribute('o:spt', '202'); + $objWriter->writeAttribute('path', 'm,l,21600r21600,l21600,xe'); + + // v:stroke + $objWriter->startElement('v:stroke'); + $objWriter->writeAttribute('joinstyle', 'miter'); + $objWriter->endElement(); + + // v:path + $objWriter->startElement('v:path'); + $objWriter->writeAttribute('gradientshapeok', 't'); + $objWriter->writeAttribute('o:connecttype', 'rect'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // Loop through comments + foreach ($comments as $key => $value) { + $this->_writeVMLComment($objWriter, $key, $value); + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write VML comment to XML format + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $pCellReference Cell reference + * @param PHPExcel_Comment $pComment Comment + * @throws PHPExcel_Writer_Exception + */ + public function _writeVMLComment(PHPExcel_Shared_XMLWriter $objWriter = null, $pCellReference = 'A1', PHPExcel_Comment $pComment = null) + { + // Metadata + list($column, $row) = PHPExcel_Cell::coordinateFromString($pCellReference); + $column = PHPExcel_Cell::columnIndexFromString($column); + $id = 1024 + $column + $row; + $id = substr($id, 0, 4); + + // v:shape + $objWriter->startElement('v:shape'); + $objWriter->writeAttribute('id', '_x0000_s' . $id); + $objWriter->writeAttribute('type', '#_x0000_t202'); + $objWriter->writeAttribute('style', 'position:absolute;margin-left:' . $pComment->getMarginLeft() . ';margin-top:' . $pComment->getMarginTop() . ';width:' . $pComment->getWidth() . ';height:' . $pComment->getHeight() . ';z-index:1;visibility:' . ($pComment->getVisible() ? 'visible' : 'hidden')); + $objWriter->writeAttribute('fillcolor', '#' . $pComment->getFillColor()->getRGB()); + $objWriter->writeAttribute('o:insetmode', 'auto'); + + // v:fill + $objWriter->startElement('v:fill'); + $objWriter->writeAttribute('color2', '#' . $pComment->getFillColor()->getRGB()); + $objWriter->endElement(); + + // v:shadow + $objWriter->startElement('v:shadow'); + $objWriter->writeAttribute('on', 't'); + $objWriter->writeAttribute('color', 'black'); + $objWriter->writeAttribute('obscured', 't'); + $objWriter->endElement(); + + // v:path + $objWriter->startElement('v:path'); + $objWriter->writeAttribute('o:connecttype', 'none'); + $objWriter->endElement(); + + // v:textbox + $objWriter->startElement('v:textbox'); + $objWriter->writeAttribute('style', 'mso-direction-alt:auto'); + + // div + $objWriter->startElement('div'); + $objWriter->writeAttribute('style', 'text-align:left'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // x:ClientData + $objWriter->startElement('x:ClientData'); + $objWriter->writeAttribute('ObjectType', 'Note'); + + // x:MoveWithCells + $objWriter->writeElement('x:MoveWithCells', ''); + + // x:SizeWithCells + $objWriter->writeElement('x:SizeWithCells', ''); + + // x:Anchor + //$objWriter->writeElement('x:Anchor', $column . ', 15, ' . ($row - 2) . ', 10, ' . ($column + 4) . ', 15, ' . ($row + 5) . ', 18'); + + // x:AutoFill + $objWriter->writeElement('x:AutoFill', 'False'); + + // x:Row + $objWriter->writeElement('x:Row', ($row - 1)); + + // x:Column + $objWriter->writeElement('x:Column', ($column - 1)); + + $objWriter->endElement(); + + $objWriter->endElement(); + } +} diff --git a/PHPExcel/Writer/Excel2007/ContentTypes.php b/PHPExcel/Writer/Excel2007/ContentTypes.php new file mode 100644 index 0000000..3c17a16 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/ContentTypes.php @@ -0,0 +1,287 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_ContentTypes + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_ContentTypes extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write content types to XML format + * + * @param PHPExcel $pPHPExcel + * @param boolean $includeCharts Flag indicating if we should include drawing details for charts + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeContentTypes(PHPExcel $pPHPExcel = null, $includeCharts = FALSE) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Types + $objWriter->startElement('Types'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/content-types'); + + // Theme + $this->_writeOverrideContentType( + $objWriter, '/xl/theme/theme1.xml', 'application/vnd.openxmlformats-officedocument.theme+xml' + ); + + // Styles + $this->_writeOverrideContentType( + $objWriter, '/xl/styles.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' + ); + + // Rels + $this->_writeDefaultContentType( + $objWriter, 'rels', 'application/vnd.openxmlformats-package.relationships+xml' + ); + + // XML + $this->_writeDefaultContentType( + $objWriter, 'xml', 'application/xml' + ); + + // VML + $this->_writeDefaultContentType( + $objWriter, 'vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing' + ); + + // Workbook + if($pPHPExcel->hasMacros()){ //Macros in workbook ? + // Yes : not standard content but "macroEnabled" + $this->_writeOverrideContentType( + $objWriter, '/xl/workbook.xml', 'application/vnd.ms-excel.sheet.macroEnabled.main+xml' + ); + //... and define a new type for the VBA project + $this->_writeDefaultContentType( + $objWriter, 'bin', 'application/vnd.ms-office.vbaProject' + ); + if($pPHPExcel->hasMacrosCertificate()){// signed macros ? + // Yes : add needed information + $this->_writeOverrideContentType( + $objWriter, '/xl/vbaProjectSignature.bin', 'application/vnd.ms-office.vbaProjectSignature' + ); + } + }else{// no macros in workbook, so standard type + $this->_writeOverrideContentType( + $objWriter, '/xl/workbook.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' + ); + } + + // DocProps + $this->_writeOverrideContentType( + $objWriter, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml' + ); + + $this->_writeOverrideContentType( + $objWriter, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml' + ); + + $customPropertyList = $pPHPExcel->getProperties()->getCustomProperties(); + if (!empty($customPropertyList)) { + $this->_writeOverrideContentType( + $objWriter, '/docProps/custom.xml', 'application/vnd.openxmlformats-officedocument.custom-properties+xml' + ); + } + + // Worksheets + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + $this->_writeOverrideContentType( + $objWriter, '/xl/worksheets/sheet' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' + ); + } + + // Shared strings + $this->_writeOverrideContentType( + $objWriter, '/xl/sharedStrings.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' + ); + + // Add worksheet relationship content types + $chart = 1; + for ($i = 0; $i < $sheetCount; ++$i) { + $drawings = $pPHPExcel->getSheet($i)->getDrawingCollection(); + $drawingCount = count($drawings); + $chartCount = ($includeCharts) ? $pPHPExcel->getSheet($i)->getChartCount() : 0; + + // We need a drawing relationship for the worksheet if we have either drawings or charts + if (($drawingCount > 0) || ($chartCount > 0)) { + $this->_writeOverrideContentType( + $objWriter, '/xl/drawings/drawing' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.drawing+xml' + ); + } + + // If we have charts, then we need a chart relationship for every individual chart + if ($chartCount > 0) { + for ($c = 0; $c < $chartCount; ++$c) { + $this->_writeOverrideContentType( + $objWriter, '/xl/charts/chart' . $chart++ . '.xml', 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml' + ); + } + } + } + + // Comments + for ($i = 0; $i < $sheetCount; ++$i) { + if (count($pPHPExcel->getSheet($i)->getComments()) > 0) { + $this->_writeOverrideContentType( + $objWriter, '/xl/comments' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml' + ); + } + } + + // Add media content-types + $aMediaContentTypes = array(); + $mediaCount = $this->getParentWriter()->getDrawingHashTable()->count(); + for ($i = 0; $i < $mediaCount; ++$i) { + $extension = ''; + $mimeType = ''; + + if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($i) instanceof PHPExcel_Worksheet_Drawing) { + $extension = strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getExtension()); + $mimeType = $this->_getImageMimeType( $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getPath() ); + } else if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($i) instanceof PHPExcel_Worksheet_MemoryDrawing) { + $extension = strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType()); + $extension = explode('/', $extension); + $extension = $extension[1]; + + $mimeType = $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType(); + } + + if (!isset( $aMediaContentTypes[$extension]) ) { + $aMediaContentTypes[$extension] = $mimeType; + + $this->_writeDefaultContentType( + $objWriter, $extension, $mimeType + ); + } + } + if($pPHPExcel->hasRibbonBinObjects()){//Some additional objects in the ribbon ? + //we need to write "Extension" but not already write for media content + $tabRibbonTypes=array_diff($pPHPExcel->getRibbonBinObjects('types'), array_keys($aMediaContentTypes)); + foreach($tabRibbonTypes as $aRibbonType){ + $mimeType='image/.'.$aRibbonType;//we wrote $mimeType like customUI Editor + $this->_writeDefaultContentType( + $objWriter, $aRibbonType, $mimeType + ); + } + } + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + if (count($pPHPExcel->getSheet()->getHeaderFooter()->getImages()) > 0) { + foreach ($pPHPExcel->getSheet()->getHeaderFooter()->getImages() as $image) { + if (!isset( $aMediaContentTypes[strtolower($image->getExtension())]) ) { + $aMediaContentTypes[strtolower($image->getExtension())] = $this->_getImageMimeType( $image->getPath() ); + + $this->_writeDefaultContentType( + $objWriter, strtolower($image->getExtension()), $aMediaContentTypes[strtolower($image->getExtension())] + ); + } + } + } + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Get image mime type + * + * @param string $pFile Filename + * @return string Mime Type + * @throws PHPExcel_Writer_Exception + */ + private function _getImageMimeType($pFile = '') + { + if (PHPExcel_Shared_File::file_exists($pFile)) { + $image = getimagesize($pFile); + return image_type_to_mime_type($image[2]); + } else { + throw new PHPExcel_Writer_Exception("File $pFile does not exist"); + } + } + + /** + * Write Default content type + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $pPartname Part name + * @param string $pContentType Content type + * @throws PHPExcel_Writer_Exception + */ + private function _writeDefaultContentType(PHPExcel_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '') + { + if ($pPartname != '' && $pContentType != '') { + // Write content type + $objWriter->startElement('Default'); + $objWriter->writeAttribute('Extension', $pPartname); + $objWriter->writeAttribute('ContentType', $pContentType); + $objWriter->endElement(); + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } + + /** + * Write Override content type + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $pPartname Part name + * @param string $pContentType Content type + * @throws PHPExcel_Writer_Exception + */ + private function _writeOverrideContentType(PHPExcel_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '') + { + if ($pPartname != '' && $pContentType != '') { + // Write content type + $objWriter->startElement('Override'); + $objWriter->writeAttribute('PartName', $pPartname); + $objWriter->writeAttribute('ContentType', $pContentType); + $objWriter->endElement(); + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } +} diff --git a/PHPExcel/Writer/Excel2007/DocProps.php b/PHPExcel/Writer/Excel2007/DocProps.php new file mode 100644 index 0000000..cfc3089 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/DocProps.php @@ -0,0 +1,272 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_DocProps + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_DocProps extends PHPExcel_Writer_Excel2007_WriterPart +{ +/** + * Write docProps/app.xml to XML format + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeDocPropsApp(PHPExcel $pPHPExcel = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Properties + $objWriter->startElement('Properties'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties'); + $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); + + // Application + $objWriter->writeElement('Application', 'Microsoft Excel'); + + // DocSecurity + $objWriter->writeElement('DocSecurity', '0'); + + // ScaleCrop + $objWriter->writeElement('ScaleCrop', 'false'); + + // HeadingPairs + $objWriter->startElement('HeadingPairs'); + + // Vector + $objWriter->startElement('vt:vector'); + $objWriter->writeAttribute('size', '2'); + $objWriter->writeAttribute('baseType', 'variant'); + + // Variant + $objWriter->startElement('vt:variant'); + $objWriter->writeElement('vt:lpstr', 'Worksheets'); + $objWriter->endElement(); + + // Variant + $objWriter->startElement('vt:variant'); + $objWriter->writeElement('vt:i4', $pPHPExcel->getSheetCount()); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // TitlesOfParts + $objWriter->startElement('TitlesOfParts'); + + // Vector + $objWriter->startElement('vt:vector'); + $objWriter->writeAttribute('size', $pPHPExcel->getSheetCount()); + $objWriter->writeAttribute('baseType', 'lpstr'); + + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + $objWriter->writeElement('vt:lpstr', $pPHPExcel->getSheet($i)->getTitle()); + } + + $objWriter->endElement(); + + $objWriter->endElement(); + + // Company + $objWriter->writeElement('Company', $pPHPExcel->getProperties()->getCompany()); + + // Company + $objWriter->writeElement('Manager', $pPHPExcel->getProperties()->getManager()); + + // LinksUpToDate + $objWriter->writeElement('LinksUpToDate', 'false'); + + // SharedDoc + $objWriter->writeElement('SharedDoc', 'false'); + + // HyperlinksChanged + $objWriter->writeElement('HyperlinksChanged', 'false'); + + // AppVersion + $objWriter->writeElement('AppVersion', '12.0000'); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write docProps/core.xml to XML format + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeDocPropsCore(PHPExcel $pPHPExcel = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // cp:coreProperties + $objWriter->startElement('cp:coreProperties'); + $objWriter->writeAttribute('xmlns:cp', 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties'); + $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); + $objWriter->writeAttribute('xmlns:dcterms', 'http://purl.org/dc/terms/'); + $objWriter->writeAttribute('xmlns:dcmitype', 'http://purl.org/dc/dcmitype/'); + $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); + + // dc:creator + $objWriter->writeElement('dc:creator', $pPHPExcel->getProperties()->getCreator()); + + // cp:lastModifiedBy + $objWriter->writeElement('cp:lastModifiedBy', $pPHPExcel->getProperties()->getLastModifiedBy()); + + // dcterms:created + $objWriter->startElement('dcterms:created'); + $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); + $objWriter->writeRawData(date(DATE_W3C, $pPHPExcel->getProperties()->getCreated())); + $objWriter->endElement(); + + // dcterms:modified + $objWriter->startElement('dcterms:modified'); + $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); + $objWriter->writeRawData(date(DATE_W3C, $pPHPExcel->getProperties()->getModified())); + $objWriter->endElement(); + + // dc:title + $objWriter->writeElement('dc:title', $pPHPExcel->getProperties()->getTitle()); + + // dc:description + $objWriter->writeElement('dc:description', $pPHPExcel->getProperties()->getDescription()); + + // dc:subject + $objWriter->writeElement('dc:subject', $pPHPExcel->getProperties()->getSubject()); + + // cp:keywords + $objWriter->writeElement('cp:keywords', $pPHPExcel->getProperties()->getKeywords()); + + // cp:category + $objWriter->writeElement('cp:category', $pPHPExcel->getProperties()->getCategory()); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write docProps/custom.xml to XML format + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeDocPropsCustom(PHPExcel $pPHPExcel = null) + { + $customPropertyList = $pPHPExcel->getProperties()->getCustomProperties(); + if (empty($customPropertyList)) { + return; + } + + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // cp:coreProperties + $objWriter->startElement('Properties'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties'); + $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); + + + foreach($customPropertyList as $key => $customProperty) { + $propertyValue = $pPHPExcel->getProperties()->getCustomPropertyValue($customProperty); + $propertyType = $pPHPExcel->getProperties()->getCustomPropertyType($customProperty); + + $objWriter->startElement('property'); + $objWriter->writeAttribute('fmtid', '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}'); + $objWriter->writeAttribute('pid', $key+2); + $objWriter->writeAttribute('name', $customProperty); + + switch($propertyType) { + case 'i' : + $objWriter->writeElement('vt:i4', $propertyValue); + break; + case 'f' : + $objWriter->writeElement('vt:r8', $propertyValue); + break; + case 'b' : + $objWriter->writeElement('vt:bool', ($propertyValue) ? 'true' : 'false'); + break; + case 'd' : + $objWriter->startElement('vt:filetime'); + $objWriter->writeRawData(date(DATE_W3C, $propertyValue)); + $objWriter->endElement(); + break; + default : + $objWriter->writeElement('vt:lpwstr', $propertyValue); + break; + } + + $objWriter->endElement(); + } + + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + +} diff --git a/PHPExcel/Writer/Excel2007/Drawing.php b/PHPExcel/Writer/Excel2007/Drawing.php new file mode 100644 index 0000000..3c52723 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Drawing.php @@ -0,0 +1,598 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Drawing + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Drawing extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write drawings to XML format + * + * @param PHPExcel_Worksheet $pWorksheet + * @param int &$chartRef Chart ID + * @param boolean $includeCharts Flag indicating if we should include drawing details for charts + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeDrawings(PHPExcel_Worksheet $pWorksheet = null, &$chartRef, $includeCharts = FALSE) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // xdr:wsDr + $objWriter->startElement('xdr:wsDr'); + $objWriter->writeAttribute('xmlns:xdr', 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing'); + $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); + + // Loop through images and write drawings + $i = 1; + $iterator = $pWorksheet->getDrawingCollection()->getIterator(); + while ($iterator->valid()) { + $this->_writeDrawing($objWriter, $iterator->current(), $i); + + $iterator->next(); + ++$i; + } + + if ($includeCharts) { + $chartCount = $pWorksheet->getChartCount(); + // Loop through charts and write the chart position + if ($chartCount > 0) { + for ($c = 0; $c < $chartCount; ++$c) { + $this->_writeChart($objWriter, $pWorksheet->getChartByIndex($c), $c+$i); + } + } + } + + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write drawings to XML format + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Chart $pChart + * @param int $pRelationId + * @throws PHPExcel_Writer_Exception + */ + public function _writeChart(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Chart $pChart = null, $pRelationId = -1) + { + $tl = $pChart->getTopLeftPosition(); + $tl['colRow'] = PHPExcel_Cell::coordinateFromString($tl['cell']); + $br = $pChart->getBottomRightPosition(); + $br['colRow'] = PHPExcel_Cell::coordinateFromString($br['cell']); + + $objWriter->startElement('xdr:twoCellAnchor'); + + $objWriter->startElement('xdr:from'); + $objWriter->writeElement('xdr:col', PHPExcel_Cell::columnIndexFromString($tl['colRow'][0]) - 1); + $objWriter->writeElement('xdr:colOff', PHPExcel_Shared_Drawing::pixelsToEMU($tl['xOffset'])); + $objWriter->writeElement('xdr:row', $tl['colRow'][1] - 1); + $objWriter->writeElement('xdr:rowOff', PHPExcel_Shared_Drawing::pixelsToEMU($tl['yOffset'])); + $objWriter->endElement(); + $objWriter->startElement('xdr:to'); + $objWriter->writeElement('xdr:col', PHPExcel_Cell::columnIndexFromString($br['colRow'][0]) - 1); + $objWriter->writeElement('xdr:colOff', PHPExcel_Shared_Drawing::pixelsToEMU($br['xOffset'])); + $objWriter->writeElement('xdr:row', $br['colRow'][1] - 1); + $objWriter->writeElement('xdr:rowOff', PHPExcel_Shared_Drawing::pixelsToEMU($br['yOffset'])); + $objWriter->endElement(); + + $objWriter->startElement('xdr:graphicFrame'); + $objWriter->writeAttribute('macro', ''); + $objWriter->startElement('xdr:nvGraphicFramePr'); + $objWriter->startElement('xdr:cNvPr'); + $objWriter->writeAttribute('name', 'Chart '.$pRelationId); + $objWriter->writeAttribute('id', 1025 * $pRelationId); + $objWriter->endElement(); + $objWriter->startElement('xdr:cNvGraphicFramePr'); + $objWriter->startElement('a:graphicFrameLocks'); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('xdr:xfrm'); + $objWriter->startElement('a:off'); + $objWriter->writeAttribute('x', '0'); + $objWriter->writeAttribute('y', '0'); + $objWriter->endElement(); + $objWriter->startElement('a:ext'); + $objWriter->writeAttribute('cx', '0'); + $objWriter->writeAttribute('cy', '0'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('a:graphic'); + $objWriter->startElement('a:graphicData'); + $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); + $objWriter->startElement('c:chart'); + $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('r:id', 'rId'.$pRelationId); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('xdr:clientData'); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write drawings to XML format + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet_BaseDrawing $pDrawing + * @param int $pRelationId + * @throws PHPExcel_Writer_Exception + */ + public function _writeDrawing(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet_BaseDrawing $pDrawing = null, $pRelationId = -1) + { + if ($pRelationId >= 0) { + // xdr:oneCellAnchor + $objWriter->startElement('xdr:oneCellAnchor'); + // Image location + $aCoordinates = PHPExcel_Cell::coordinateFromString($pDrawing->getCoordinates()); + $aCoordinates[0] = PHPExcel_Cell::columnIndexFromString($aCoordinates[0]); + + // xdr:from + $objWriter->startElement('xdr:from'); + $objWriter->writeElement('xdr:col', $aCoordinates[0] - 1); + $objWriter->writeElement('xdr:colOff', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetX())); + $objWriter->writeElement('xdr:row', $aCoordinates[1] - 1); + $objWriter->writeElement('xdr:rowOff', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetY())); + $objWriter->endElement(); + + // xdr:ext + $objWriter->startElement('xdr:ext'); + $objWriter->writeAttribute('cx', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getWidth())); + $objWriter->writeAttribute('cy', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getHeight())); + $objWriter->endElement(); + + // xdr:pic + $objWriter->startElement('xdr:pic'); + + // xdr:nvPicPr + $objWriter->startElement('xdr:nvPicPr'); + + // xdr:cNvPr + $objWriter->startElement('xdr:cNvPr'); + $objWriter->writeAttribute('id', $pRelationId); + $objWriter->writeAttribute('name', $pDrawing->getName()); + $objWriter->writeAttribute('descr', $pDrawing->getDescription()); + $objWriter->endElement(); + + // xdr:cNvPicPr + $objWriter->startElement('xdr:cNvPicPr'); + + // a:picLocks + $objWriter->startElement('a:picLocks'); + $objWriter->writeAttribute('noChangeAspect', '1'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // xdr:blipFill + $objWriter->startElement('xdr:blipFill'); + + // a:blip + $objWriter->startElement('a:blip'); + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('r:embed', 'rId' . $pRelationId); + $objWriter->endElement(); + + // a:stretch + $objWriter->startElement('a:stretch'); + $objWriter->writeElement('a:fillRect', null); + $objWriter->endElement(); + + $objWriter->endElement(); + + // xdr:spPr + $objWriter->startElement('xdr:spPr'); + + // a:xfrm + $objWriter->startElement('a:xfrm'); + $objWriter->writeAttribute('rot', PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getRotation())); + $objWriter->endElement(); + + // a:prstGeom + $objWriter->startElement('a:prstGeom'); + $objWriter->writeAttribute('prst', 'rect'); + + // a:avLst + $objWriter->writeElement('a:avLst', null); + + $objWriter->endElement(); + +// // a:solidFill +// $objWriter->startElement('a:solidFill'); + +// // a:srgbClr +// $objWriter->startElement('a:srgbClr'); +// $objWriter->writeAttribute('val', 'FFFFFF'); + +///* SHADE +// // a:shade +// $objWriter->startElement('a:shade'); +// $objWriter->writeAttribute('val', '85000'); +// $objWriter->endElement(); +//*/ + +// $objWriter->endElement(); + +// $objWriter->endElement(); +/* + // a:ln + $objWriter->startElement('a:ln'); + $objWriter->writeAttribute('w', '88900'); + $objWriter->writeAttribute('cap', 'sq'); + + // a:solidFill + $objWriter->startElement('a:solidFill'); + + // a:srgbClr + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', 'FFFFFF'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:miter + $objWriter->startElement('a:miter'); + $objWriter->writeAttribute('lim', '800000'); + $objWriter->endElement(); + + $objWriter->endElement(); +*/ + + if ($pDrawing->getShadow()->getVisible()) { + // a:effectLst + $objWriter->startElement('a:effectLst'); + + // a:outerShdw + $objWriter->startElement('a:outerShdw'); + $objWriter->writeAttribute('blurRad', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getBlurRadius())); + $objWriter->writeAttribute('dist', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getDistance())); + $objWriter->writeAttribute('dir', PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getShadow()->getDirection())); + $objWriter->writeAttribute('algn', $pDrawing->getShadow()->getAlignment()); + $objWriter->writeAttribute('rotWithShape', '0'); + + // a:srgbClr + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', $pDrawing->getShadow()->getColor()->getRGB()); + + // a:alpha + $objWriter->startElement('a:alpha'); + $objWriter->writeAttribute('val', $pDrawing->getShadow()->getAlpha() * 1000); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + } +/* + + // a:scene3d + $objWriter->startElement('a:scene3d'); + + // a:camera + $objWriter->startElement('a:camera'); + $objWriter->writeAttribute('prst', 'orthographicFront'); + $objWriter->endElement(); + + // a:lightRig + $objWriter->startElement('a:lightRig'); + $objWriter->writeAttribute('rig', 'twoPt'); + $objWriter->writeAttribute('dir', 't'); + + // a:rot + $objWriter->startElement('a:rot'); + $objWriter->writeAttribute('lat', '0'); + $objWriter->writeAttribute('lon', '0'); + $objWriter->writeAttribute('rev', '0'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); +*/ +/* + // a:sp3d + $objWriter->startElement('a:sp3d'); + + // a:bevelT + $objWriter->startElement('a:bevelT'); + $objWriter->writeAttribute('w', '25400'); + $objWriter->writeAttribute('h', '19050'); + $objWriter->endElement(); + + // a:contourClr + $objWriter->startElement('a:contourClr'); + + // a:srgbClr + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', 'FFFFFF'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); +*/ + $objWriter->endElement(); + + $objWriter->endElement(); + + // xdr:clientData + $objWriter->writeElement('xdr:clientData', null); + + $objWriter->endElement(); + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } + + /** + * Write VML header/footer images to XML format + * + * @param PHPExcel_Worksheet $pWorksheet + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeVMLHeaderFooterImages(PHPExcel_Worksheet $pWorksheet = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Header/footer images + $images = $pWorksheet->getHeaderFooter()->getImages(); + + // xml + $objWriter->startElement('xml'); + $objWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml'); + $objWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office'); + $objWriter->writeAttribute('xmlns:x', 'urn:schemas-microsoft-com:office:excel'); + + // o:shapelayout + $objWriter->startElement('o:shapelayout'); + $objWriter->writeAttribute('v:ext', 'edit'); + + // o:idmap + $objWriter->startElement('o:idmap'); + $objWriter->writeAttribute('v:ext', 'edit'); + $objWriter->writeAttribute('data', '1'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // v:shapetype + $objWriter->startElement('v:shapetype'); + $objWriter->writeAttribute('id', '_x0000_t75'); + $objWriter->writeAttribute('coordsize', '21600,21600'); + $objWriter->writeAttribute('o:spt', '75'); + $objWriter->writeAttribute('o:preferrelative', 't'); + $objWriter->writeAttribute('path', 'm@4@5l@4@11@9@11@9@5xe'); + $objWriter->writeAttribute('filled', 'f'); + $objWriter->writeAttribute('stroked', 'f'); + + // v:stroke + $objWriter->startElement('v:stroke'); + $objWriter->writeAttribute('joinstyle', 'miter'); + $objWriter->endElement(); + + // v:formulas + $objWriter->startElement('v:formulas'); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'if lineDrawn pixelLineWidth 0'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'sum @0 1 0'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'sum 0 0 @1'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'prod @2 1 2'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'prod @3 21600 pixelWidth'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'prod @3 21600 pixelHeight'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'sum @0 0 1'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'prod @6 1 2'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'prod @7 21600 pixelWidth'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'sum @8 21600 0'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'prod @7 21600 pixelHeight'); + $objWriter->endElement(); + + // v:f + $objWriter->startElement('v:f'); + $objWriter->writeAttribute('eqn', 'sum @10 21600 0'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // v:path + $objWriter->startElement('v:path'); + $objWriter->writeAttribute('o:extrusionok', 'f'); + $objWriter->writeAttribute('gradientshapeok', 't'); + $objWriter->writeAttribute('o:connecttype', 'rect'); + $objWriter->endElement(); + + // o:lock + $objWriter->startElement('o:lock'); + $objWriter->writeAttribute('v:ext', 'edit'); + $objWriter->writeAttribute('aspectratio', 't'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // Loop through images + foreach ($images as $key => $value) { + $this->_writeVMLHeaderFooterImage($objWriter, $key, $value); + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write VML comment to XML format + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $pReference Reference + * @param PHPExcel_Worksheet_HeaderFooterDrawing $pImage Image + * @throws PHPExcel_Writer_Exception + */ + public function _writeVMLHeaderFooterImage(PHPExcel_Shared_XMLWriter $objWriter = null, $pReference = '', PHPExcel_Worksheet_HeaderFooterDrawing $pImage = null) + { + // Calculate object id + preg_match('{(\d+)}', md5($pReference), $m); + $id = 1500 + (substr($m[1], 0, 2) * 1); + + // Calculate offset + $width = $pImage->getWidth(); + $height = $pImage->getHeight(); + $marginLeft = $pImage->getOffsetX(); + $marginTop = $pImage->getOffsetY(); + + // v:shape + $objWriter->startElement('v:shape'); + $objWriter->writeAttribute('id', $pReference); + $objWriter->writeAttribute('o:spid', '_x0000_s' . $id); + $objWriter->writeAttribute('type', '#_x0000_t75'); + $objWriter->writeAttribute('style', "position:absolute;margin-left:{$marginLeft}px;margin-top:{$marginTop}px;width:{$width}px;height:{$height}px;z-index:1"); + + // v:imagedata + $objWriter->startElement('v:imagedata'); + $objWriter->writeAttribute('o:relid', 'rId' . $pReference); + $objWriter->writeAttribute('o:title', $pImage->getName()); + $objWriter->endElement(); + + // o:lock + $objWriter->startElement('o:lock'); + $objWriter->writeAttribute('v:ext', 'edit'); + $objWriter->writeAttribute('rotation', 't'); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + + /** + * Get an array of all drawings + * + * @param PHPExcel $pPHPExcel + * @return PHPExcel_Worksheet_Drawing[] All drawings in PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function allDrawings(PHPExcel $pPHPExcel = null) + { + // Get an array of all drawings + $aDrawings = array(); + + // Loop through PHPExcel + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + // Loop through images and add to array + $iterator = $pPHPExcel->getSheet($i)->getDrawingCollection()->getIterator(); + while ($iterator->valid()) { + $aDrawings[] = $iterator->current(); + + $iterator->next(); + } + } + + return $aDrawings; + } +} diff --git a/PHPExcel/Writer/Excel2007/Rels.php b/PHPExcel/Writer/Excel2007/Rels.php new file mode 100644 index 0000000..0bdb667 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Rels.php @@ -0,0 +1,437 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Rels + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Rels extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write relationships to XML format + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeRelationships(PHPExcel $pPHPExcel = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + $customPropertyList = $pPHPExcel->getProperties()->getCustomProperties(); + if (!empty($customPropertyList)) { + // Relationship docProps/app.xml + $this->_writeRelationship( + $objWriter, + 4, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties', + 'docProps/custom.xml' + ); + + } + + // Relationship docProps/app.xml + $this->_writeRelationship( + $objWriter, + 3, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + 'docProps/app.xml' + ); + + // Relationship docProps/core.xml + $this->_writeRelationship( + $objWriter, + 2, + 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + 'docProps/core.xml' + ); + + // Relationship xl/workbook.xml + $this->_writeRelationship( + $objWriter, + 1, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + 'xl/workbook.xml' + ); + // a custom UI in workbook ? + if($pPHPExcel->hasRibbon()){ + $this->_writeRelationShip( + $objWriter, + 5, + 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility', + $pPHPExcel->getRibbonXMLData('target') + ); + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write workbook relationships to XML format + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeWorkbookRelationships(PHPExcel $pPHPExcel = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + // Relationship styles.xml + $this->_writeRelationship( + $objWriter, + 1, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + 'styles.xml' + ); + + // Relationship theme/theme1.xml + $this->_writeRelationship( + $objWriter, + 2, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + 'theme/theme1.xml' + ); + + // Relationship sharedStrings.xml + $this->_writeRelationship( + $objWriter, + 3, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + 'sharedStrings.xml' + ); + + // Relationships with sheets + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + $this->_writeRelationship( + $objWriter, + ($i + 1 + 3), + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + 'worksheets/sheet' . ($i + 1) . '.xml' + ); + } + // Relationships for vbaProject if needed + // id : just after the last sheet + if($pPHPExcel->hasMacros()){ + $this->_writeRelationShip( + $objWriter, + ($i + 1 + 3), + 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', + 'vbaProject.bin' + ); + ++$i;//increment i if needed for an another relation + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write worksheet relationships to XML format + * + * Numbering is as follows: + * rId1 - Drawings + * rId_hyperlink_x - Hyperlinks + * + * @param PHPExcel_Worksheet $pWorksheet + * @param int $pWorksheetId + * @param boolean $includeCharts Flag indicating if we should write charts + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeWorksheetRelationships(PHPExcel_Worksheet $pWorksheet = null, $pWorksheetId = 1, $includeCharts = FALSE) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + // Write drawing relationships? + $d = 0; + if ($includeCharts) { + $charts = $pWorksheet->getChartCollection(); + } else { + $charts = array(); + } + if (($pWorksheet->getDrawingCollection()->count() > 0) || + (count($charts) > 0)) { + $this->_writeRelationship( + $objWriter, + ++$d, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + '../drawings/drawing' . $pWorksheetId . '.xml' + ); + } + + // Write chart relationships? +// $chartCount = 0; +// $charts = $pWorksheet->getChartCollection(); +// echo 'Chart Rels: ' , count($charts) , '<br />'; +// if (count($charts) > 0) { +// foreach($charts as $chart) { +// $this->_writeRelationship( +// $objWriter, +// ++$d, +// 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', +// '../charts/chart' . ++$chartCount . '.xml' +// ); +// } +// } +// + // Write hyperlink relationships? + $i = 1; + foreach ($pWorksheet->getHyperlinkCollection() as $hyperlink) { + if (!$hyperlink->isInternal()) { + $this->_writeRelationship( + $objWriter, + '_hyperlink_' . $i, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', + $hyperlink->getUrl(), + 'External' + ); + + ++$i; + } + } + + // Write comments relationship? + $i = 1; + if (count($pWorksheet->getComments()) > 0) { + $this->_writeRelationship( + $objWriter, + '_comments_vml' . $i, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', + '../drawings/vmlDrawing' . $pWorksheetId . '.vml' + ); + + $this->_writeRelationship( + $objWriter, + '_comments' . $i, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', + '../comments' . $pWorksheetId . '.xml' + ); + } + + // Write header/footer relationship? + $i = 1; + if (count($pWorksheet->getHeaderFooter()->getImages()) > 0) { + $this->_writeRelationship( + $objWriter, + '_headerfooter_vml' . $i, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', + '../drawings/vmlDrawingHF' . $pWorksheetId . '.vml' + ); + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write drawing relationships to XML format + * + * @param PHPExcel_Worksheet $pWorksheet + * @param int &$chartRef Chart ID + * @param boolean $includeCharts Flag indicating if we should write charts + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeDrawingRelationships(PHPExcel_Worksheet $pWorksheet = null, &$chartRef, $includeCharts = FALSE) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + // Loop through images and write relationships + $i = 1; + $iterator = $pWorksheet->getDrawingCollection()->getIterator(); + while ($iterator->valid()) { + if ($iterator->current() instanceof PHPExcel_Worksheet_Drawing + || $iterator->current() instanceof PHPExcel_Worksheet_MemoryDrawing) { + // Write relationship for image drawing + $this->_writeRelationship( + $objWriter, + $i, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + '../media/' . str_replace(' ', '', $iterator->current()->getIndexedFilename()) + ); + } + + $iterator->next(); + ++$i; + } + + if ($includeCharts) { + // Loop through charts and write relationships + $chartCount = $pWorksheet->getChartCount(); + if ($chartCount > 0) { + for ($c = 0; $c < $chartCount; ++$c) { + $this->_writeRelationship( + $objWriter, + $i++, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + '../charts/chart' . ++$chartRef . '.xml' + ); + } + } + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write header/footer drawing relationships to XML format + * + * @param PHPExcel_Worksheet $pWorksheet + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeHeaderFooterDrawingRelationships(PHPExcel_Worksheet $pWorksheet = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + // Loop through images and write relationships + foreach ($pWorksheet->getHeaderFooter()->getImages() as $key => $value) { + // Write relationship for image drawing + $this->_writeRelationship( + $objWriter, + $key, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + '../media/' . $value->getIndexedFilename() + ); + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write Override content type + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param int $pId Relationship ID. rId will be prepended! + * @param string $pType Relationship type + * @param string $pTarget Relationship target + * @param string $pTargetMode Relationship target mode + * @throws PHPExcel_Writer_Exception + */ + private function _writeRelationship(PHPExcel_Shared_XMLWriter $objWriter = null, $pId = 1, $pType = '', $pTarget = '', $pTargetMode = '') + { + if ($pType != '' && $pTarget != '') { + // Write relationship + $objWriter->startElement('Relationship'); + $objWriter->writeAttribute('Id', 'rId' . $pId); + $objWriter->writeAttribute('Type', $pType); + $objWriter->writeAttribute('Target', $pTarget); + + if ($pTargetMode != '') { + $objWriter->writeAttribute('TargetMode', $pTargetMode); + } + + $objWriter->endElement(); + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } +} diff --git a/PHPExcel/Writer/Excel2007/RelsRibbon.php b/PHPExcel/Writer/Excel2007/RelsRibbon.php new file mode 100644 index 0000000..f924a1d --- /dev/null +++ b/PHPExcel/Writer/Excel2007/RelsRibbon.php @@ -0,0 +1,77 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_RelsRibbon + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_RelsRibbon extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write relationships for additional objects of custom UI (ribbon) + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeRibbonRelationships(PHPExcel $pPHPExcel = null){ + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + $localRels=$pPHPExcel->getRibbonBinObjects('names'); + if(is_array($localRels)){ + foreach($localRels as $aId=>$aTarget){ + $objWriter->startElement('Relationship'); + $objWriter->writeAttribute('Id', $aId); + $objWriter->writeAttribute('Type', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'); + $objWriter->writeAttribute('Target', $aTarget); + $objWriter->endElement();//Relationship + } + } + $objWriter->endElement();//Relationships + + // Return + return $objWriter->getData(); + + } + +} diff --git a/PHPExcel/Writer/Excel2007/RelsVBA.php b/PHPExcel/Writer/Excel2007/RelsVBA.php new file mode 100644 index 0000000..aecb0b8 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/RelsVBA.php @@ -0,0 +1,72 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_RelsVBA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_RelsVBA extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write relationships for a signed VBA Project + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeVBARelationships(PHPExcel $pPHPExcel = null){ + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + $objWriter->startElement('Relationship'); + $objWriter->writeAttribute('Id', 'rId1'); + $objWriter->writeAttribute('Type', 'http://schemas.microsoft.com/office/2006/relationships/vbaProjectSignature'); + $objWriter->writeAttribute('Target', 'vbaProjectSignature.bin'); + $objWriter->endElement();//Relationship + $objWriter->endElement();//Relationships + + // Return + return $objWriter->getData(); + + } + +} diff --git a/PHPExcel/Writer/Excel2007/StringTable.php b/PHPExcel/Writer/Excel2007/StringTable.php new file mode 100644 index 0000000..0e8a259 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/StringTable.php @@ -0,0 +1,319 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_StringTable + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_StringTable extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Create worksheet stringtable + * + * @param PHPExcel_Worksheet $pSheet Worksheet + * @param string[] $pExistingTable Existing table to eventually merge with + * @return string[] String table for worksheet + * @throws PHPExcel_Writer_Exception + */ + public function createStringTable($pSheet = null, $pExistingTable = null) + { + if ($pSheet !== NULL) { + // Create string lookup table + $aStringTable = array(); + $cellCollection = null; + $aFlippedStringTable = null; // For faster lookup + + // Is an existing table given? + if (($pExistingTable !== NULL) && is_array($pExistingTable)) { + $aStringTable = $pExistingTable; + } + + // Fill index array + $aFlippedStringTable = $this->flipStringTable($aStringTable); + + // Loop through cells + foreach ($pSheet->getCellCollection() as $cellID) { + $cell = $pSheet->getCell($cellID); + $cellValue = $cell->getValue(); + if (!is_object($cellValue) && + ($cellValue !== NULL) && + $cellValue !== '' && + !isset($aFlippedStringTable[$cellValue]) && + ($cell->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING || $cell->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING2 || $cell->getDataType() == PHPExcel_Cell_DataType::TYPE_NULL)) { + $aStringTable[] = $cellValue; + $aFlippedStringTable[$cellValue] = true; + } elseif ($cellValue instanceof PHPExcel_RichText && + ($cellValue !== NULL) && + !isset($aFlippedStringTable[$cellValue->getHashCode()])) { + $aStringTable[] = $cellValue; + $aFlippedStringTable[$cellValue->getHashCode()] = true; + } + } + + // Return + return $aStringTable; + } else { + throw new PHPExcel_Writer_Exception("Invalid PHPExcel_Worksheet object passed."); + } + } + + /** + * Write string table to XML format + * + * @param string[] $pStringTable + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeStringTable($pStringTable = null) + { + if ($pStringTable !== NULL) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // String table + $objWriter->startElement('sst'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); + $objWriter->writeAttribute('uniqueCount', count($pStringTable)); + + // Loop through string table + foreach ($pStringTable as $textElement) { + $objWriter->startElement('si'); + + if (! $textElement instanceof PHPExcel_RichText) { + $textToWrite = PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $textElement ); + $objWriter->startElement('t'); + if ($textToWrite !== trim($textToWrite)) { + $objWriter->writeAttribute('xml:space', 'preserve'); + } + $objWriter->writeRawData($textToWrite); + $objWriter->endElement(); + } else if ($textElement instanceof PHPExcel_RichText) { + $this->writeRichText($objWriter, $textElement); + } + + $objWriter->endElement(); + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } else { + throw new PHPExcel_Writer_Exception("Invalid string table array passed."); + } + } + + /** + * Write Rich Text + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_RichText $pRichText Rich text + * @param string $prefix Optional Namespace prefix + * @throws PHPExcel_Writer_Exception + */ + public function writeRichText(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_RichText $pRichText = null, $prefix=NULL) + { + if ($prefix !== NULL) + $prefix .= ':'; + // Loop through rich text elements + $elements = $pRichText->getRichTextElements(); + foreach ($elements as $element) { + // r + $objWriter->startElement($prefix.'r'); + + // rPr + if ($element instanceof PHPExcel_RichText_Run) { + // rPr + $objWriter->startElement($prefix.'rPr'); + + // rFont + $objWriter->startElement($prefix.'rFont'); + $objWriter->writeAttribute('val', $element->getFont()->getName()); + $objWriter->endElement(); + + // Bold + $objWriter->startElement($prefix.'b'); + $objWriter->writeAttribute('val', ($element->getFont()->getBold() ? 'true' : 'false')); + $objWriter->endElement(); + + // Italic + $objWriter->startElement($prefix.'i'); + $objWriter->writeAttribute('val', ($element->getFont()->getItalic() ? 'true' : 'false')); + $objWriter->endElement(); + + // Superscript / subscript + if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) { + $objWriter->startElement($prefix.'vertAlign'); + if ($element->getFont()->getSuperScript()) { + $objWriter->writeAttribute('val', 'superscript'); + } else if ($element->getFont()->getSubScript()) { + $objWriter->writeAttribute('val', 'subscript'); + } + $objWriter->endElement(); + } + + // Strikethrough + $objWriter->startElement($prefix.'strike'); + $objWriter->writeAttribute('val', ($element->getFont()->getStrikethrough() ? 'true' : 'false')); + $objWriter->endElement(); + + // Color + $objWriter->startElement($prefix.'color'); + $objWriter->writeAttribute('rgb', $element->getFont()->getColor()->getARGB()); + $objWriter->endElement(); + + // Size + $objWriter->startElement($prefix.'sz'); + $objWriter->writeAttribute('val', $element->getFont()->getSize()); + $objWriter->endElement(); + + // Underline + $objWriter->startElement($prefix.'u'); + $objWriter->writeAttribute('val', $element->getFont()->getUnderline()); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + // t + $objWriter->startElement($prefix.'t'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $element->getText() )); + $objWriter->endElement(); + + $objWriter->endElement(); + } + } + + /** + * Write Rich Text + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string|PHPExcel_RichText $pRichText text string or Rich text + * @param string $prefix Optional Namespace prefix + * @throws PHPExcel_Writer_Exception + */ + public function writeRichTextForCharts(PHPExcel_Shared_XMLWriter $objWriter = null, $pRichText = null, $prefix=NULL) + { + if (!$pRichText instanceof PHPExcel_RichText) { + $textRun = $pRichText; + $pRichText = new PHPExcel_RichText(); + $pRichText->createTextRun($textRun); + } + + if ($prefix !== NULL) + $prefix .= ':'; + // Loop through rich text elements + $elements = $pRichText->getRichTextElements(); + foreach ($elements as $element) { + // r + $objWriter->startElement($prefix.'r'); + + // rPr + $objWriter->startElement($prefix.'rPr'); + + // Bold + $objWriter->writeAttribute('b', ($element->getFont()->getBold() ? 1 : 0)); + // Italic + $objWriter->writeAttribute('i', ($element->getFont()->getItalic() ? 1 : 0)); + // Underline + $underlineType = $element->getFont()->getUnderline(); + switch($underlineType) { + case 'single' : + $underlineType = 'sng'; + break; + case 'double' : + $underlineType = 'dbl'; + break; + } + $objWriter->writeAttribute('u', $underlineType); + // Strikethrough + $objWriter->writeAttribute('strike', ($element->getFont()->getStrikethrough() ? 'sngStrike' : 'noStrike')); + + // rFont + $objWriter->startElement($prefix.'latin'); + $objWriter->writeAttribute('typeface', $element->getFont()->getName()); + $objWriter->endElement(); + + // Superscript / subscript +// if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) { +// $objWriter->startElement($prefix.'vertAlign'); +// if ($element->getFont()->getSuperScript()) { +// $objWriter->writeAttribute('val', 'superscript'); +// } else if ($element->getFont()->getSubScript()) { +// $objWriter->writeAttribute('val', 'subscript'); +// } +// $objWriter->endElement(); +// } +// + $objWriter->endElement(); + + // t + $objWriter->startElement($prefix.'t'); +// $objWriter->writeAttribute('xml:space', 'preserve'); // Excel2010 accepts, Excel2007 complains + $objWriter->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML( $element->getText() )); + $objWriter->endElement(); + + $objWriter->endElement(); + } + } + + /** + * Flip string table (for index searching) + * + * @param array $stringTable Stringtable + * @return array + */ + public function flipStringTable($stringTable = array()) { + // Return value + $returnValue = array(); + + // Loop through stringtable and add flipped items to $returnValue + foreach ($stringTable as $key => $value) { + if (! $value instanceof PHPExcel_RichText) { + $returnValue[$value] = $key; + } else if ($value instanceof PHPExcel_RichText) { + $returnValue[$value->getHashCode()] = $key; + } + } + + // Return + return $returnValue; + } +} diff --git a/PHPExcel/Writer/Excel2007/Style.php b/PHPExcel/Writer/Excel2007/Style.php new file mode 100644 index 0000000..849ad12 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Style.php @@ -0,0 +1,704 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Style + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Style extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write styles to XML format + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeStyles(PHPExcel $pPHPExcel = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // styleSheet + $objWriter->startElement('styleSheet'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); + + // numFmts + $objWriter->startElement('numFmts'); + $objWriter->writeAttribute('count', $this->getParentWriter()->getNumFmtHashTable()->count()); + + // numFmt + for ($i = 0; $i < $this->getParentWriter()->getNumFmtHashTable()->count(); ++$i) { + $this->_writeNumFmt($objWriter, $this->getParentWriter()->getNumFmtHashTable()->getByIndex($i), $i); + } + + $objWriter->endElement(); + + // fonts + $objWriter->startElement('fonts'); + $objWriter->writeAttribute('count', $this->getParentWriter()->getFontHashTable()->count()); + + // font + for ($i = 0; $i < $this->getParentWriter()->getFontHashTable()->count(); ++$i) { + $this->_writeFont($objWriter, $this->getParentWriter()->getFontHashTable()->getByIndex($i)); + } + + $objWriter->endElement(); + + // fills + $objWriter->startElement('fills'); + $objWriter->writeAttribute('count', $this->getParentWriter()->getFillHashTable()->count()); + + // fill + for ($i = 0; $i < $this->getParentWriter()->getFillHashTable()->count(); ++$i) { + $this->_writeFill($objWriter, $this->getParentWriter()->getFillHashTable()->getByIndex($i)); + } + + $objWriter->endElement(); + + // borders + $objWriter->startElement('borders'); + $objWriter->writeAttribute('count', $this->getParentWriter()->getBordersHashTable()->count()); + + // border + for ($i = 0; $i < $this->getParentWriter()->getBordersHashTable()->count(); ++$i) { + $this->_writeBorder($objWriter, $this->getParentWriter()->getBordersHashTable()->getByIndex($i)); + } + + $objWriter->endElement(); + + // cellStyleXfs + $objWriter->startElement('cellStyleXfs'); + $objWriter->writeAttribute('count', 1); + + // xf + $objWriter->startElement('xf'); + $objWriter->writeAttribute('numFmtId', 0); + $objWriter->writeAttribute('fontId', 0); + $objWriter->writeAttribute('fillId', 0); + $objWriter->writeAttribute('borderId', 0); + $objWriter->endElement(); + + $objWriter->endElement(); + + // cellXfs + $objWriter->startElement('cellXfs'); + $objWriter->writeAttribute('count', count($pPHPExcel->getCellXfCollection())); + + // xf + foreach ($pPHPExcel->getCellXfCollection() as $cellXf) { + $this->_writeCellStyleXf($objWriter, $cellXf, $pPHPExcel); + } + + $objWriter->endElement(); + + // cellStyles + $objWriter->startElement('cellStyles'); + $objWriter->writeAttribute('count', 1); + + // cellStyle + $objWriter->startElement('cellStyle'); + $objWriter->writeAttribute('name', 'Normal'); + $objWriter->writeAttribute('xfId', 0); + $objWriter->writeAttribute('builtinId', 0); + $objWriter->endElement(); + + $objWriter->endElement(); + + // dxfs + $objWriter->startElement('dxfs'); + $objWriter->writeAttribute('count', $this->getParentWriter()->getStylesConditionalHashTable()->count()); + + // dxf + for ($i = 0; $i < $this->getParentWriter()->getStylesConditionalHashTable()->count(); ++$i) { + $this->_writeCellStyleDxf($objWriter, $this->getParentWriter()->getStylesConditionalHashTable()->getByIndex($i)->getStyle()); + } + + $objWriter->endElement(); + + // tableStyles + $objWriter->startElement('tableStyles'); + $objWriter->writeAttribute('defaultTableStyle', 'TableStyleMedium9'); + $objWriter->writeAttribute('defaultPivotStyle', 'PivotTableStyle1'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write Fill + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style_Fill $pFill Fill style + * @throws PHPExcel_Writer_Exception + */ + private function _writeFill(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Fill $pFill = null) + { + // Check if this is a pattern type or gradient type + if ($pFill->getFillType() === PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR || + $pFill->getFillType() === PHPExcel_Style_Fill::FILL_GRADIENT_PATH) { + // Gradient fill + $this->_writeGradientFill($objWriter, $pFill); + } elseif($pFill->getFillType() !== NULL) { + // Pattern fill + $this->_writePatternFill($objWriter, $pFill); + } + } + + /** + * Write Gradient Fill + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style_Fill $pFill Fill style + * @throws PHPExcel_Writer_Exception + */ + private function _writeGradientFill(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Fill $pFill = null) + { + // fill + $objWriter->startElement('fill'); + + // gradientFill + $objWriter->startElement('gradientFill'); + $objWriter->writeAttribute('type', $pFill->getFillType()); + $objWriter->writeAttribute('degree', $pFill->getRotation()); + + // stop + $objWriter->startElement('stop'); + $objWriter->writeAttribute('position', '0'); + + // color + $objWriter->startElement('color'); + $objWriter->writeAttribute('rgb', $pFill->getStartColor()->getARGB()); + $objWriter->endElement(); + + $objWriter->endElement(); + + // stop + $objWriter->startElement('stop'); + $objWriter->writeAttribute('position', '1'); + + // color + $objWriter->startElement('color'); + $objWriter->writeAttribute('rgb', $pFill->getEndColor()->getARGB()); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write Pattern Fill + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style_Fill $pFill Fill style + * @throws PHPExcel_Writer_Exception + */ + private function _writePatternFill(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Fill $pFill = null) + { + // fill + $objWriter->startElement('fill'); + + // patternFill + $objWriter->startElement('patternFill'); + $objWriter->writeAttribute('patternType', $pFill->getFillType()); + + if ($pFill->getFillType() !== PHPExcel_Style_Fill::FILL_NONE) { + // fgColor + if ($pFill->getStartColor()->getARGB()) { + $objWriter->startElement('fgColor'); + $objWriter->writeAttribute('rgb', $pFill->getStartColor()->getARGB()); + $objWriter->endElement(); + } + } + if ($pFill->getFillType() !== PHPExcel_Style_Fill::FILL_NONE) { + // bgColor + if ($pFill->getEndColor()->getARGB()) { + $objWriter->startElement('bgColor'); + $objWriter->writeAttribute('rgb', $pFill->getEndColor()->getARGB()); + $objWriter->endElement(); + } + } + + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write Font + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style_Font $pFont Font style + * @throws PHPExcel_Writer_Exception + */ + private function _writeFont(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Font $pFont = null) + { + // font + $objWriter->startElement('font'); + // Weird! The order of these elements actually makes a difference when opening Excel2007 + // files in Excel2003 with the compatibility pack. It's not documented behaviour, + // and makes for a real WTF! + + // Bold. We explicitly write this element also when false (like MS Office Excel 2007 does + // for conditional formatting). Otherwise it will apparently not be picked up in conditional + // formatting style dialog + if ($pFont->getBold() !== NULL) { + $objWriter->startElement('b'); + $objWriter->writeAttribute('val', $pFont->getBold() ? '1' : '0'); + $objWriter->endElement(); + } + + // Italic + if ($pFont->getItalic() !== NULL) { + $objWriter->startElement('i'); + $objWriter->writeAttribute('val', $pFont->getItalic() ? '1' : '0'); + $objWriter->endElement(); + } + + // Strikethrough + if ($pFont->getStrikethrough() !== NULL) { + $objWriter->startElement('strike'); + $objWriter->writeAttribute('val', $pFont->getStrikethrough() ? '1' : '0'); + $objWriter->endElement(); + } + + // Underline + if ($pFont->getUnderline() !== NULL) { + $objWriter->startElement('u'); + $objWriter->writeAttribute('val', $pFont->getUnderline()); + $objWriter->endElement(); + } + + // Superscript / subscript + if ($pFont->getSuperScript() === TRUE || $pFont->getSubScript() === TRUE) { + $objWriter->startElement('vertAlign'); + if ($pFont->getSuperScript() === TRUE) { + $objWriter->writeAttribute('val', 'superscript'); + } else if ($pFont->getSubScript() === TRUE) { + $objWriter->writeAttribute('val', 'subscript'); + } + $objWriter->endElement(); + } + + // Size + if ($pFont->getSize() !== NULL) { + $objWriter->startElement('sz'); + $objWriter->writeAttribute('val', $pFont->getSize()); + $objWriter->endElement(); + } + + // Foreground color + if ($pFont->getColor()->getARGB() !== NULL) { + $objWriter->startElement('color'); + $objWriter->writeAttribute('rgb', $pFont->getColor()->getARGB()); + $objWriter->endElement(); + } + + // Name + if ($pFont->getName() !== NULL) { + $objWriter->startElement('name'); + $objWriter->writeAttribute('val', $pFont->getName()); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + + /** + * Write Border + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style_Borders $pBorders Borders style + * @throws PHPExcel_Writer_Exception + */ + private function _writeBorder(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_Borders $pBorders = null) + { + // Write border + $objWriter->startElement('border'); + // Diagonal? + switch ($pBorders->getDiagonalDirection()) { + case PHPExcel_Style_Borders::DIAGONAL_UP: + $objWriter->writeAttribute('diagonalUp', 'true'); + $objWriter->writeAttribute('diagonalDown', 'false'); + break; + case PHPExcel_Style_Borders::DIAGONAL_DOWN: + $objWriter->writeAttribute('diagonalUp', 'false'); + $objWriter->writeAttribute('diagonalDown', 'true'); + break; + case PHPExcel_Style_Borders::DIAGONAL_BOTH: + $objWriter->writeAttribute('diagonalUp', 'true'); + $objWriter->writeAttribute('diagonalDown', 'true'); + break; + } + + // BorderPr + $this->_writeBorderPr($objWriter, 'left', $pBorders->getLeft()); + $this->_writeBorderPr($objWriter, 'right', $pBorders->getRight()); + $this->_writeBorderPr($objWriter, 'top', $pBorders->getTop()); + $this->_writeBorderPr($objWriter, 'bottom', $pBorders->getBottom()); + $this->_writeBorderPr($objWriter, 'diagonal', $pBorders->getDiagonal()); + $objWriter->endElement(); + } + + /** + * Write Cell Style Xf + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style $pStyle Style + * @param PHPExcel $pPHPExcel Workbook + * @throws PHPExcel_Writer_Exception + */ + private function _writeCellStyleXf(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style $pStyle = null, PHPExcel $pPHPExcel = null) + { + // xf + $objWriter->startElement('xf'); + $objWriter->writeAttribute('xfId', 0); + $objWriter->writeAttribute('fontId', (int)$this->getParentWriter()->getFontHashTable()->getIndexForHashCode($pStyle->getFont()->getHashCode())); + if ($pStyle->getQuotePrefix()) { + $objWriter->writeAttribute('quotePrefix', 1); + } + + if ($pStyle->getNumberFormat()->getBuiltInFormatCode() === false) { + $objWriter->writeAttribute('numFmtId', (int)($this->getParentWriter()->getNumFmtHashTable()->getIndexForHashCode($pStyle->getNumberFormat()->getHashCode()) + 164) ); + } else { + $objWriter->writeAttribute('numFmtId', (int)$pStyle->getNumberFormat()->getBuiltInFormatCode()); + } + + $objWriter->writeAttribute('fillId', (int)$this->getParentWriter()->getFillHashTable()->getIndexForHashCode($pStyle->getFill()->getHashCode())); + $objWriter->writeAttribute('borderId', (int)$this->getParentWriter()->getBordersHashTable()->getIndexForHashCode($pStyle->getBorders()->getHashCode())); + + // Apply styles? + $objWriter->writeAttribute('applyFont', ($pPHPExcel->getDefaultStyle()->getFont()->getHashCode() != $pStyle->getFont()->getHashCode()) ? '1' : '0'); + $objWriter->writeAttribute('applyNumberFormat', ($pPHPExcel->getDefaultStyle()->getNumberFormat()->getHashCode() != $pStyle->getNumberFormat()->getHashCode()) ? '1' : '0'); + $objWriter->writeAttribute('applyFill', ($pPHPExcel->getDefaultStyle()->getFill()->getHashCode() != $pStyle->getFill()->getHashCode()) ? '1' : '0'); + $objWriter->writeAttribute('applyBorder', ($pPHPExcel->getDefaultStyle()->getBorders()->getHashCode() != $pStyle->getBorders()->getHashCode()) ? '1' : '0'); + $objWriter->writeAttribute('applyAlignment', ($pPHPExcel->getDefaultStyle()->getAlignment()->getHashCode() != $pStyle->getAlignment()->getHashCode()) ? '1' : '0'); + if ($pStyle->getProtection()->getLocked() != PHPExcel_Style_Protection::PROTECTION_INHERIT || $pStyle->getProtection()->getHidden() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { + $objWriter->writeAttribute('applyProtection', 'true'); + } + + // alignment + $objWriter->startElement('alignment'); + $objWriter->writeAttribute('horizontal', $pStyle->getAlignment()->getHorizontal()); + $objWriter->writeAttribute('vertical', $pStyle->getAlignment()->getVertical()); + + $textRotation = 0; + if ($pStyle->getAlignment()->getTextRotation() >= 0) { + $textRotation = $pStyle->getAlignment()->getTextRotation(); + } else if ($pStyle->getAlignment()->getTextRotation() < 0) { + $textRotation = 90 - $pStyle->getAlignment()->getTextRotation(); + } + $objWriter->writeAttribute('textRotation', $textRotation); + + $objWriter->writeAttribute('wrapText', ($pStyle->getAlignment()->getWrapText() ? 'true' : 'false')); + $objWriter->writeAttribute('shrinkToFit', ($pStyle->getAlignment()->getShrinkToFit() ? 'true' : 'false')); + + if ($pStyle->getAlignment()->getIndent() > 0) { + $objWriter->writeAttribute('indent', $pStyle->getAlignment()->getIndent()); + } + $objWriter->endElement(); + + // protection + if ($pStyle->getProtection()->getLocked() != PHPExcel_Style_Protection::PROTECTION_INHERIT || $pStyle->getProtection()->getHidden() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { + $objWriter->startElement('protection'); + if ($pStyle->getProtection()->getLocked() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { + $objWriter->writeAttribute('locked', ($pStyle->getProtection()->getLocked() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); + } + if ($pStyle->getProtection()->getHidden() != PHPExcel_Style_Protection::PROTECTION_INHERIT) { + $objWriter->writeAttribute('hidden', ($pStyle->getProtection()->getHidden() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); + } + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + + /** + * Write Cell Style Dxf + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style $pStyle Style + * @throws PHPExcel_Writer_Exception + */ + private function _writeCellStyleDxf(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style $pStyle = null) + { + // dxf + $objWriter->startElement('dxf'); + + // font + $this->_writeFont($objWriter, $pStyle->getFont()); + + // numFmt + $this->_writeNumFmt($objWriter, $pStyle->getNumberFormat()); + + // fill + $this->_writeFill($objWriter, $pStyle->getFill()); + + // alignment + $objWriter->startElement('alignment'); + if ($pStyle->getAlignment()->getHorizontal() !== NULL) { + $objWriter->writeAttribute('horizontal', $pStyle->getAlignment()->getHorizontal()); + } + if ($pStyle->getAlignment()->getVertical() !== NULL) { + $objWriter->writeAttribute('vertical', $pStyle->getAlignment()->getVertical()); + } + + if ($pStyle->getAlignment()->getTextRotation() !== NULL) { + $textRotation = 0; + if ($pStyle->getAlignment()->getTextRotation() >= 0) { + $textRotation = $pStyle->getAlignment()->getTextRotation(); + } else if ($pStyle->getAlignment()->getTextRotation() < 0) { + $textRotation = 90 - $pStyle->getAlignment()->getTextRotation(); + } + $objWriter->writeAttribute('textRotation', $textRotation); + } + $objWriter->endElement(); + + // border + $this->_writeBorder($objWriter, $pStyle->getBorders()); + + // protection + if (($pStyle->getProtection()->getLocked() !== NULL) || + ($pStyle->getProtection()->getHidden() !== NULL)) { + if ($pStyle->getProtection()->getLocked() !== PHPExcel_Style_Protection::PROTECTION_INHERIT || + $pStyle->getProtection()->getHidden() !== PHPExcel_Style_Protection::PROTECTION_INHERIT) { + $objWriter->startElement('protection'); + if (($pStyle->getProtection()->getLocked() !== NULL) && + ($pStyle->getProtection()->getLocked() !== PHPExcel_Style_Protection::PROTECTION_INHERIT)) { + $objWriter->writeAttribute('locked', ($pStyle->getProtection()->getLocked() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); + } + if (($pStyle->getProtection()->getHidden() !== NULL) && + ($pStyle->getProtection()->getHidden() !== PHPExcel_Style_Protection::PROTECTION_INHERIT)) { + $objWriter->writeAttribute('hidden', ($pStyle->getProtection()->getHidden() == PHPExcel_Style_Protection::PROTECTION_PROTECTED ? 'true' : 'false')); + } + $objWriter->endElement(); + } + } + + $objWriter->endElement(); + } + + /** + * Write BorderPr + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $pName Element name + * @param PHPExcel_Style_Border $pBorder Border style + * @throws PHPExcel_Writer_Exception + */ + private function _writeBorderPr(PHPExcel_Shared_XMLWriter $objWriter = null, $pName = 'left', PHPExcel_Style_Border $pBorder = null) + { + // Write BorderPr + if ($pBorder->getBorderStyle() != PHPExcel_Style_Border::BORDER_NONE) { + $objWriter->startElement($pName); + $objWriter->writeAttribute('style', $pBorder->getBorderStyle()); + + // color + $objWriter->startElement('color'); + $objWriter->writeAttribute('rgb', $pBorder->getColor()->getARGB()); + $objWriter->endElement(); + + $objWriter->endElement(); + } + } + + /** + * Write NumberFormat + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Style_NumberFormat $pNumberFormat Number Format + * @param int $pId Number Format identifier + * @throws PHPExcel_Writer_Exception + */ + private function _writeNumFmt(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Style_NumberFormat $pNumberFormat = null, $pId = 0) + { + // Translate formatcode + $formatCode = $pNumberFormat->getFormatCode(); + + // numFmt + if ($formatCode !== NULL) { + $objWriter->startElement('numFmt'); + $objWriter->writeAttribute('numFmtId', ($pId + 164)); + $objWriter->writeAttribute('formatCode', $formatCode); + $objWriter->endElement(); + } + } + + /** + * Get an array of all styles + * + * @param PHPExcel $pPHPExcel + * @return PHPExcel_Style[] All styles in PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function allStyles(PHPExcel $pPHPExcel = null) + { + $aStyles = $pPHPExcel->getCellXfCollection(); + + return $aStyles; + } + + /** + * Get an array of all conditional styles + * + * @param PHPExcel $pPHPExcel + * @return PHPExcel_Style_Conditional[] All conditional styles in PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function allConditionalStyles(PHPExcel $pPHPExcel = null) + { + // Get an array of all styles + $aStyles = array(); + + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + foreach ($pPHPExcel->getSheet($i)->getConditionalStylesCollection() as $conditionalStyles) { + foreach ($conditionalStyles as $conditionalStyle) { + $aStyles[] = $conditionalStyle; + } + } + } + + return $aStyles; + } + + /** + * Get an array of all fills + * + * @param PHPExcel $pPHPExcel + * @return PHPExcel_Style_Fill[] All fills in PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function allFills(PHPExcel $pPHPExcel = null) + { + // Get an array of unique fills + $aFills = array(); + + // Two first fills are predefined + $fill0 = new PHPExcel_Style_Fill(); + $fill0->setFillType(PHPExcel_Style_Fill::FILL_NONE); + $aFills[] = $fill0; + + $fill1 = new PHPExcel_Style_Fill(); + $fill1->setFillType(PHPExcel_Style_Fill::FILL_PATTERN_GRAY125); + $aFills[] = $fill1; + // The remaining fills + $aStyles = $this->allStyles($pPHPExcel); + foreach ($aStyles as $style) { + if (!array_key_exists($style->getFill()->getHashCode(), $aFills)) { + $aFills[ $style->getFill()->getHashCode() ] = $style->getFill(); + } + } + + return $aFills; + } + + /** + * Get an array of all fonts + * + * @param PHPExcel $pPHPExcel + * @return PHPExcel_Style_Font[] All fonts in PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function allFonts(PHPExcel $pPHPExcel = null) + { + // Get an array of unique fonts + $aFonts = array(); + $aStyles = $this->allStyles($pPHPExcel); + + foreach ($aStyles as $style) { + if (!array_key_exists($style->getFont()->getHashCode(), $aFonts)) { + $aFonts[ $style->getFont()->getHashCode() ] = $style->getFont(); + } + } + + return $aFonts; + } + + /** + * Get an array of all borders + * + * @param PHPExcel $pPHPExcel + * @return PHPExcel_Style_Borders[] All borders in PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function allBorders(PHPExcel $pPHPExcel = null) + { + // Get an array of unique borders + $aBorders = array(); + $aStyles = $this->allStyles($pPHPExcel); + + foreach ($aStyles as $style) { + if (!array_key_exists($style->getBorders()->getHashCode(), $aBorders)) { + $aBorders[ $style->getBorders()->getHashCode() ] = $style->getBorders(); + } + } + + return $aBorders; + } + + /** + * Get an array of all number formats + * + * @param PHPExcel $pPHPExcel + * @return PHPExcel_Style_NumberFormat[] All number formats in PHPExcel + * @throws PHPExcel_Writer_Exception + */ + public function allNumberFormats(PHPExcel $pPHPExcel = null) + { + // Get an array of unique number formats + $aNumFmts = array(); + $aStyles = $this->allStyles($pPHPExcel); + + foreach ($aStyles as $style) { + if ($style->getNumberFormat()->getBuiltInFormatCode() === false && !array_key_exists($style->getNumberFormat()->getHashCode(), $aNumFmts)) { + $aNumFmts[ $style->getNumberFormat()->getHashCode() ] = $style->getNumberFormat(); + } + } + + return $aNumFmts; + } +} diff --git a/PHPExcel/Writer/Excel2007/Theme.php b/PHPExcel/Writer/Excel2007/Theme.php new file mode 100644 index 0000000..064c3ed --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Theme.php @@ -0,0 +1,871 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Theme + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Theme extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Map of Major fonts to write + * @static array of string + * + */ + private static $_majorFonts = array( + 'Jpan' => 'MS Pゴシック', + 'Hang' => '맑은 고딕', + 'Hans' => '宋体', + 'Hant' => '新細明體', + 'Arab' => 'Times New Roman', + 'Hebr' => 'Times New Roman', + 'Thai' => 'Tahoma', + 'Ethi' => 'Nyala', + 'Beng' => 'Vrinda', + 'Gujr' => 'Shruti', + 'Khmr' => 'MoolBoran', + 'Knda' => 'Tunga', + 'Guru' => 'Raavi', + 'Cans' => 'Euphemia', + 'Cher' => 'Plantagenet Cherokee', + 'Yiii' => 'Microsoft Yi Baiti', + 'Tibt' => 'Microsoft Himalaya', + 'Thaa' => 'MV Boli', + 'Deva' => 'Mangal', + 'Telu' => 'Gautami', + 'Taml' => 'Latha', + 'Syrc' => 'Estrangelo Edessa', + 'Orya' => 'Kalinga', + 'Mlym' => 'Kartika', + 'Laoo' => 'DokChampa', + 'Sinh' => 'Iskoola Pota', + 'Mong' => 'Mongolian Baiti', + 'Viet' => 'Times New Roman', + 'Uigh' => 'Microsoft Uighur', + 'Geor' => 'Sylfaen', + ); + + /** + * Map of Minor fonts to write + * @static array of string + * + */ + private static $_minorFonts = array( + 'Jpan' => 'MS Pゴシック', + 'Hang' => '맑은 고딕', + 'Hans' => '宋体', + 'Hant' => '新細明體', + 'Arab' => 'Arial', + 'Hebr' => 'Arial', + 'Thai' => 'Tahoma', + 'Ethi' => 'Nyala', + 'Beng' => 'Vrinda', + 'Gujr' => 'Shruti', + 'Khmr' => 'DaunPenh', + 'Knda' => 'Tunga', + 'Guru' => 'Raavi', + 'Cans' => 'Euphemia', + 'Cher' => 'Plantagenet Cherokee', + 'Yiii' => 'Microsoft Yi Baiti', + 'Tibt' => 'Microsoft Himalaya', + 'Thaa' => 'MV Boli', + 'Deva' => 'Mangal', + 'Telu' => 'Gautami', + 'Taml' => 'Latha', + 'Syrc' => 'Estrangelo Edessa', + 'Orya' => 'Kalinga', + 'Mlym' => 'Kartika', + 'Laoo' => 'DokChampa', + 'Sinh' => 'Iskoola Pota', + 'Mong' => 'Mongolian Baiti', + 'Viet' => 'Arial', + 'Uigh' => 'Microsoft Uighur', + 'Geor' => 'Sylfaen', + ); + + /** + * Map of core colours + * @static array of string + * + */ + private static $_colourScheme = array( + 'dk2' => '1F497D', + 'lt2' => 'EEECE1', + 'accent1' => '4F81BD', + 'accent2' => 'C0504D', + 'accent3' => '9BBB59', + 'accent4' => '8064A2', + 'accent5' => '4BACC6', + 'accent6' => 'F79646', + 'hlink' => '0000FF', + 'folHlink' => '800080', + ); + + /** + * Write theme to XML format + * + * @param PHPExcel $pPHPExcel + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeTheme(PHPExcel $pPHPExcel = null) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // a:theme + $objWriter->startElement('a:theme'); + $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); + $objWriter->writeAttribute('name', 'Office Theme'); + + // a:themeElements + $objWriter->startElement('a:themeElements'); + + // a:clrScheme + $objWriter->startElement('a:clrScheme'); + $objWriter->writeAttribute('name', 'Office'); + + // a:dk1 + $objWriter->startElement('a:dk1'); + + // a:sysClr + $objWriter->startElement('a:sysClr'); + $objWriter->writeAttribute('val', 'windowText'); + $objWriter->writeAttribute('lastClr', '000000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:lt1 + $objWriter->startElement('a:lt1'); + + // a:sysClr + $objWriter->startElement('a:sysClr'); + $objWriter->writeAttribute('val', 'window'); + $objWriter->writeAttribute('lastClr', 'FFFFFF'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:dk2 + $this->_writeColourScheme($objWriter); + + $objWriter->endElement(); + + // a:fontScheme + $objWriter->startElement('a:fontScheme'); + $objWriter->writeAttribute('name', 'Office'); + + // a:majorFont + $objWriter->startElement('a:majorFont'); + $this->_writeFonts($objWriter, 'Cambria', self::$_majorFonts); + $objWriter->endElement(); + + // a:minorFont + $objWriter->startElement('a:minorFont'); + $this->_writeFonts($objWriter, 'Calibri', self::$_minorFonts); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:fmtScheme + $objWriter->startElement('a:fmtScheme'); + $objWriter->writeAttribute('name', 'Office'); + + // a:fillStyleLst + $objWriter->startElement('a:fillStyleLst'); + + // a:solidFill + $objWriter->startElement('a:solidFill'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gradFill + $objWriter->startElement('a:gradFill'); + $objWriter->writeAttribute('rotWithShape', '1'); + + // a:gsLst + $objWriter->startElement('a:gsLst'); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '0'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:tint + $objWriter->startElement('a:tint'); + $objWriter->writeAttribute('val', '50000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '300000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '35000'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:tint + $objWriter->startElement('a:tint'); + $objWriter->writeAttribute('val', '37000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '300000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '100000'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:tint + $objWriter->startElement('a:tint'); + $objWriter->writeAttribute('val', '15000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '350000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:lin + $objWriter->startElement('a:lin'); + $objWriter->writeAttribute('ang', '16200000'); + $objWriter->writeAttribute('scaled', '1'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gradFill + $objWriter->startElement('a:gradFill'); + $objWriter->writeAttribute('rotWithShape', '1'); + + // a:gsLst + $objWriter->startElement('a:gsLst'); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '0'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:shade + $objWriter->startElement('a:shade'); + $objWriter->writeAttribute('val', '51000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '130000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '80000'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:shade + $objWriter->startElement('a:shade'); + $objWriter->writeAttribute('val', '93000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '130000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '100000'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:shade + $objWriter->startElement('a:shade'); + $objWriter->writeAttribute('val', '94000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '135000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:lin + $objWriter->startElement('a:lin'); + $objWriter->writeAttribute('ang', '16200000'); + $objWriter->writeAttribute('scaled', '0'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:lnStyleLst + $objWriter->startElement('a:lnStyleLst'); + + // a:ln + $objWriter->startElement('a:ln'); + $objWriter->writeAttribute('w', '9525'); + $objWriter->writeAttribute('cap', 'flat'); + $objWriter->writeAttribute('cmpd', 'sng'); + $objWriter->writeAttribute('algn', 'ctr'); + + // a:solidFill + $objWriter->startElement('a:solidFill'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:shade + $objWriter->startElement('a:shade'); + $objWriter->writeAttribute('val', '95000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '105000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:prstDash + $objWriter->startElement('a:prstDash'); + $objWriter->writeAttribute('val', 'solid'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:ln + $objWriter->startElement('a:ln'); + $objWriter->writeAttribute('w', '25400'); + $objWriter->writeAttribute('cap', 'flat'); + $objWriter->writeAttribute('cmpd', 'sng'); + $objWriter->writeAttribute('algn', 'ctr'); + + // a:solidFill + $objWriter->startElement('a:solidFill'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:prstDash + $objWriter->startElement('a:prstDash'); + $objWriter->writeAttribute('val', 'solid'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:ln + $objWriter->startElement('a:ln'); + $objWriter->writeAttribute('w', '38100'); + $objWriter->writeAttribute('cap', 'flat'); + $objWriter->writeAttribute('cmpd', 'sng'); + $objWriter->writeAttribute('algn', 'ctr'); + + // a:solidFill + $objWriter->startElement('a:solidFill'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:prstDash + $objWriter->startElement('a:prstDash'); + $objWriter->writeAttribute('val', 'solid'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + + + // a:effectStyleLst + $objWriter->startElement('a:effectStyleLst'); + + // a:effectStyle + $objWriter->startElement('a:effectStyle'); + + // a:effectLst + $objWriter->startElement('a:effectLst'); + + // a:outerShdw + $objWriter->startElement('a:outerShdw'); + $objWriter->writeAttribute('blurRad', '40000'); + $objWriter->writeAttribute('dist', '20000'); + $objWriter->writeAttribute('dir', '5400000'); + $objWriter->writeAttribute('rotWithShape', '0'); + + // a:srgbClr + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', '000000'); + + // a:alpha + $objWriter->startElement('a:alpha'); + $objWriter->writeAttribute('val', '38000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:effectStyle + $objWriter->startElement('a:effectStyle'); + + // a:effectLst + $objWriter->startElement('a:effectLst'); + + // a:outerShdw + $objWriter->startElement('a:outerShdw'); + $objWriter->writeAttribute('blurRad', '40000'); + $objWriter->writeAttribute('dist', '23000'); + $objWriter->writeAttribute('dir', '5400000'); + $objWriter->writeAttribute('rotWithShape', '0'); + + // a:srgbClr + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', '000000'); + + // a:alpha + $objWriter->startElement('a:alpha'); + $objWriter->writeAttribute('val', '35000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:effectStyle + $objWriter->startElement('a:effectStyle'); + + // a:effectLst + $objWriter->startElement('a:effectLst'); + + // a:outerShdw + $objWriter->startElement('a:outerShdw'); + $objWriter->writeAttribute('blurRad', '40000'); + $objWriter->writeAttribute('dist', '23000'); + $objWriter->writeAttribute('dir', '5400000'); + $objWriter->writeAttribute('rotWithShape', '0'); + + // a:srgbClr + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', '000000'); + + // a:alpha + $objWriter->startElement('a:alpha'); + $objWriter->writeAttribute('val', '35000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:scene3d + $objWriter->startElement('a:scene3d'); + + // a:camera + $objWriter->startElement('a:camera'); + $objWriter->writeAttribute('prst', 'orthographicFront'); + + // a:rot + $objWriter->startElement('a:rot'); + $objWriter->writeAttribute('lat', '0'); + $objWriter->writeAttribute('lon', '0'); + $objWriter->writeAttribute('rev', '0'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:lightRig + $objWriter->startElement('a:lightRig'); + $objWriter->writeAttribute('rig', 'threePt'); + $objWriter->writeAttribute('dir', 't'); + + // a:rot + $objWriter->startElement('a:rot'); + $objWriter->writeAttribute('lat', '0'); + $objWriter->writeAttribute('lon', '0'); + $objWriter->writeAttribute('rev', '1200000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:sp3d + $objWriter->startElement('a:sp3d'); + + // a:bevelT + $objWriter->startElement('a:bevelT'); + $objWriter->writeAttribute('w', '63500'); + $objWriter->writeAttribute('h', '25400'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:bgFillStyleLst + $objWriter->startElement('a:bgFillStyleLst'); + + // a:solidFill + $objWriter->startElement('a:solidFill'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gradFill + $objWriter->startElement('a:gradFill'); + $objWriter->writeAttribute('rotWithShape', '1'); + + // a:gsLst + $objWriter->startElement('a:gsLst'); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '0'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:tint + $objWriter->startElement('a:tint'); + $objWriter->writeAttribute('val', '40000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '350000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '40000'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:tint + $objWriter->startElement('a:tint'); + $objWriter->writeAttribute('val', '45000'); + $objWriter->endElement(); + + // a:shade + $objWriter->startElement('a:shade'); + $objWriter->writeAttribute('val', '99000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '350000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '100000'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:shade + $objWriter->startElement('a:shade'); + $objWriter->writeAttribute('val', '20000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '255000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:path + $objWriter->startElement('a:path'); + $objWriter->writeAttribute('path', 'circle'); + + // a:fillToRect + $objWriter->startElement('a:fillToRect'); + $objWriter->writeAttribute('l', '50000'); + $objWriter->writeAttribute('t', '-80000'); + $objWriter->writeAttribute('r', '50000'); + $objWriter->writeAttribute('b', '180000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gradFill + $objWriter->startElement('a:gradFill'); + $objWriter->writeAttribute('rotWithShape', '1'); + + // a:gsLst + $objWriter->startElement('a:gsLst'); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '0'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:tint + $objWriter->startElement('a:tint'); + $objWriter->writeAttribute('val', '80000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '300000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:gs + $objWriter->startElement('a:gs'); + $objWriter->writeAttribute('pos', '100000'); + + // a:schemeClr + $objWriter->startElement('a:schemeClr'); + $objWriter->writeAttribute('val', 'phClr'); + + // a:shade + $objWriter->startElement('a:shade'); + $objWriter->writeAttribute('val', '30000'); + $objWriter->endElement(); + + // a:satMod + $objWriter->startElement('a:satMod'); + $objWriter->writeAttribute('val', '200000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:path + $objWriter->startElement('a:path'); + $objWriter->writeAttribute('path', 'circle'); + + // a:fillToRect + $objWriter->startElement('a:fillToRect'); + $objWriter->writeAttribute('l', '50000'); + $objWriter->writeAttribute('t', '50000'); + $objWriter->writeAttribute('r', '50000'); + $objWriter->writeAttribute('b', '50000'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // a:objectDefaults + $objWriter->writeElement('a:objectDefaults', null); + + // a:extraClrSchemeLst + $objWriter->writeElement('a:extraClrSchemeLst', null); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write fonts to XML format + * + * @param PHPExcel_Shared_XMLWriter $objWriter + * @param string $latinFont + * @param array of string $fontSet + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + private function _writeFonts($objWriter, $latinFont, $fontSet) + { + // a:latin + $objWriter->startElement('a:latin'); + $objWriter->writeAttribute('typeface', $latinFont); + $objWriter->endElement(); + + // a:ea + $objWriter->startElement('a:ea'); + $objWriter->writeAttribute('typeface', ''); + $objWriter->endElement(); + + // a:cs + $objWriter->startElement('a:cs'); + $objWriter->writeAttribute('typeface', ''); + $objWriter->endElement(); + + foreach($fontSet as $fontScript => $typeface) { + $objWriter->startElement('a:font'); + $objWriter->writeAttribute('script', $fontScript); + $objWriter->writeAttribute('typeface', $typeface); + $objWriter->endElement(); + } + + } + + /** + * Write colour scheme to XML format + * + * @param PHPExcel_Shared_XMLWriter $objWriter + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + private function _writeColourScheme($objWriter) + { + foreach(self::$_colourScheme as $colourName => $colourValue) { + $objWriter->startElement('a:'.$colourName); + + $objWriter->startElement('a:srgbClr'); + $objWriter->writeAttribute('val', $colourValue); + $objWriter->endElement(); + + $objWriter->endElement(); + } + + } +} diff --git a/PHPExcel/Writer/Excel2007/Workbook.php b/PHPExcel/Writer/Excel2007/Workbook.php new file mode 100644 index 0000000..d1fe666 --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Workbook.php @@ -0,0 +1,456 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Workbook + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Workbook extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write workbook to XML format + * + * @param PHPExcel $pPHPExcel + * @param boolean $recalcRequired Indicate whether formulas should be recalculated before writing + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeWorkbook(PHPExcel $pPHPExcel = null, $recalcRequired = FALSE) + { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // workbook + $objWriter->startElement('workbook'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + + // fileVersion + $this->_writeFileVersion($objWriter); + + // workbookPr + $this->_writeWorkbookPr($objWriter); + + // workbookProtection + $this->_writeWorkbookProtection($objWriter, $pPHPExcel); + + // bookViews + if ($this->getParentWriter()->getOffice2003Compatibility() === false) { + $this->_writeBookViews($objWriter, $pPHPExcel); + } + + // sheets + $this->_writeSheets($objWriter, $pPHPExcel); + + // definedNames + $this->_writeDefinedNames($objWriter, $pPHPExcel); + + // calcPr + $this->_writeCalcPr($objWriter,$recalcRequired); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write file version + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writeFileVersion(PHPExcel_Shared_XMLWriter $objWriter = null) + { + $objWriter->startElement('fileVersion'); + $objWriter->writeAttribute('appName', 'xl'); + $objWriter->writeAttribute('lastEdited', '4'); + $objWriter->writeAttribute('lowestEdited', '4'); + $objWriter->writeAttribute('rupBuild', '4505'); + $objWriter->endElement(); + } + + /** + * Write WorkbookPr + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @throws PHPExcel_Writer_Exception + */ + private function _writeWorkbookPr(PHPExcel_Shared_XMLWriter $objWriter = null) + { + $objWriter->startElement('workbookPr'); + + if (PHPExcel_Shared_Date::getExcelCalendar() == PHPExcel_Shared_Date::CALENDAR_MAC_1904) { + $objWriter->writeAttribute('date1904', '1'); + } + + $objWriter->writeAttribute('codeName', 'ThisWorkbook'); + + $objWriter->endElement(); + } + + /** + * Write BookViews + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel $pPHPExcel + * @throws PHPExcel_Writer_Exception + */ + private function _writeBookViews(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel $pPHPExcel = null) + { + // bookViews + $objWriter->startElement('bookViews'); + + // workbookView + $objWriter->startElement('workbookView'); + + $objWriter->writeAttribute('activeTab', $pPHPExcel->getActiveSheetIndex()); + $objWriter->writeAttribute('autoFilterDateGrouping', '1'); + $objWriter->writeAttribute('firstSheet', '0'); + $objWriter->writeAttribute('minimized', '0'); + $objWriter->writeAttribute('showHorizontalScroll', '1'); + $objWriter->writeAttribute('showSheetTabs', '1'); + $objWriter->writeAttribute('showVerticalScroll', '1'); + $objWriter->writeAttribute('tabRatio', '600'); + $objWriter->writeAttribute('visibility', 'visible'); + + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write WorkbookProtection + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel $pPHPExcel + * @throws PHPExcel_Writer_Exception + */ + private function _writeWorkbookProtection(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel $pPHPExcel = null) + { + if ($pPHPExcel->getSecurity()->isSecurityEnabled()) { + $objWriter->startElement('workbookProtection'); + $objWriter->writeAttribute('lockRevision', ($pPHPExcel->getSecurity()->getLockRevision() ? 'true' : 'false')); + $objWriter->writeAttribute('lockStructure', ($pPHPExcel->getSecurity()->getLockStructure() ? 'true' : 'false')); + $objWriter->writeAttribute('lockWindows', ($pPHPExcel->getSecurity()->getLockWindows() ? 'true' : 'false')); + + if ($pPHPExcel->getSecurity()->getRevisionsPassword() != '') { + $objWriter->writeAttribute('revisionsPassword', $pPHPExcel->getSecurity()->getRevisionsPassword()); + } + + if ($pPHPExcel->getSecurity()->getWorkbookPassword() != '') { + $objWriter->writeAttribute('workbookPassword', $pPHPExcel->getSecurity()->getWorkbookPassword()); + } + + $objWriter->endElement(); + } + } + + /** + * Write calcPr + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param boolean $recalcRequired Indicate whether formulas should be recalculated before writing + * @throws PHPExcel_Writer_Exception + */ + private function _writeCalcPr(PHPExcel_Shared_XMLWriter $objWriter = null, $recalcRequired = TRUE) + { + $objWriter->startElement('calcPr'); + + // Set the calcid to a higher value than Excel itself will use, otherwise Excel will always recalc + // If MS Excel does do a recalc, then users opening a file in MS Excel will be prompted to save on exit + // because the file has changed + $objWriter->writeAttribute('calcId', '999999'); + $objWriter->writeAttribute('calcMode', 'auto'); + // fullCalcOnLoad isn't needed if we've recalculating for the save + $objWriter->writeAttribute('calcCompleted', ($recalcRequired) ? 1 : 0); + $objWriter->writeAttribute('fullCalcOnLoad', ($recalcRequired) ? 0 : 1); + + $objWriter->endElement(); + } + + /** + * Write sheets + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel $pPHPExcel + * @throws PHPExcel_Writer_Exception + */ + private function _writeSheets(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel $pPHPExcel = null) + { + // Write sheets + $objWriter->startElement('sheets'); + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + // sheet + $this->_writeSheet( + $objWriter, + $pPHPExcel->getSheet($i)->getTitle(), + ($i + 1), + ($i + 1 + 3), + $pPHPExcel->getSheet($i)->getSheetState() + ); + } + + $objWriter->endElement(); + } + + /** + * Write sheet + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param string $pSheetname Sheet name + * @param int $pSheetId Sheet id + * @param int $pRelId Relationship ID + * @param string $sheetState Sheet state (visible, hidden, veryHidden) + * @throws PHPExcel_Writer_Exception + */ + private function _writeSheet(PHPExcel_Shared_XMLWriter $objWriter = null, $pSheetname = '', $pSheetId = 1, $pRelId = 1, $sheetState = 'visible') + { + if ($pSheetname != '') { + // Write sheet + $objWriter->startElement('sheet'); + $objWriter->writeAttribute('name', $pSheetname); + $objWriter->writeAttribute('sheetId', $pSheetId); + if ($sheetState != 'visible' && $sheetState != '') { + $objWriter->writeAttribute('state', $sheetState); + } + $objWriter->writeAttribute('r:id', 'rId' . $pRelId); + $objWriter->endElement(); + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } + + /** + * Write Defined Names + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel $pPHPExcel + * @throws PHPExcel_Writer_Exception + */ + private function _writeDefinedNames(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel $pPHPExcel = null) + { + // Write defined names + $objWriter->startElement('definedNames'); + + // Named ranges + if (count($pPHPExcel->getNamedRanges()) > 0) { + // Named ranges + $this->_writeNamedRanges($objWriter, $pPHPExcel); + } + + // Other defined names + $sheetCount = $pPHPExcel->getSheetCount(); + for ($i = 0; $i < $sheetCount; ++$i) { + // definedName for autoFilter + $this->_writeDefinedNameForAutofilter($objWriter, $pPHPExcel->getSheet($i), $i); + + // definedName for Print_Titles + $this->_writeDefinedNameForPrintTitles($objWriter, $pPHPExcel->getSheet($i), $i); + + // definedName for Print_Area + $this->_writeDefinedNameForPrintArea($objWriter, $pPHPExcel->getSheet($i), $i); + } + + $objWriter->endElement(); + } + + /** + * Write named ranges + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel $pPHPExcel + * @throws PHPExcel_Writer_Exception + */ + private function _writeNamedRanges(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel $pPHPExcel) + { + // Loop named ranges + $namedRanges = $pPHPExcel->getNamedRanges(); + foreach ($namedRanges as $namedRange) { + $this->_writeDefinedNameForNamedRange($objWriter, $namedRange); + } + } + + /** + * Write Defined Name for named range + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_NamedRange $pNamedRange + * @throws PHPExcel_Writer_Exception + */ + private function _writeDefinedNameForNamedRange(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_NamedRange $pNamedRange) + { + // definedName for named range + $objWriter->startElement('definedName'); + $objWriter->writeAttribute('name', $pNamedRange->getName()); + if ($pNamedRange->getLocalOnly()) { + $objWriter->writeAttribute('localSheetId', $pNamedRange->getScope()->getParent()->getIndex($pNamedRange->getScope())); + } + + // Create absolute coordinate and write as raw text + $range = PHPExcel_Cell::splitRange($pNamedRange->getRange()); + for ($i = 0; $i < count($range); $i++) { + $range[$i][0] = '\'' . str_replace("'", "''", $pNamedRange->getWorksheet()->getTitle()) . '\'!' . PHPExcel_Cell::absoluteReference($range[$i][0]); + if (isset($range[$i][1])) { + $range[$i][1] = PHPExcel_Cell::absoluteReference($range[$i][1]); + } + } + $range = PHPExcel_Cell::buildRange($range); + + $objWriter->writeRawData($range); + + $objWriter->endElement(); + } + + /** + * Write Defined Name for autoFilter + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet + * @param int $pSheetId + * @throws PHPExcel_Writer_Exception + */ + private function _writeDefinedNameForAutofilter(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pSheetId = 0) + { + // definedName for autoFilter + $autoFilterRange = $pSheet->getAutoFilter()->getRange(); + if (!empty($autoFilterRange)) { + $objWriter->startElement('definedName'); + $objWriter->writeAttribute('name', '_xlnm._FilterDatabase'); + $objWriter->writeAttribute('localSheetId', $pSheetId); + $objWriter->writeAttribute('hidden', '1'); + + // Create absolute coordinate and write as raw text + $range = PHPExcel_Cell::splitRange($autoFilterRange); + $range = $range[0]; + // Strip any worksheet ref so we can make the cell ref absolute + if (strpos($range[0],'!') !== false) { + list($ws,$range[0]) = explode('!',$range[0]); + } + + $range[0] = PHPExcel_Cell::absoluteCoordinate($range[0]); + $range[1] = PHPExcel_Cell::absoluteCoordinate($range[1]); + $range = implode(':', $range); + + $objWriter->writeRawData('\'' . str_replace("'", "''", $pSheet->getTitle()) . '\'!' . $range); + + $objWriter->endElement(); + } + } + + /** + * Write Defined Name for PrintTitles + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet + * @param int $pSheetId + * @throws PHPExcel_Writer_Exception + */ + private function _writeDefinedNameForPrintTitles(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pSheetId = 0) + { + // definedName for PrintTitles + if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet() || $pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) { + $objWriter->startElement('definedName'); + $objWriter->writeAttribute('name', '_xlnm.Print_Titles'); + $objWriter->writeAttribute('localSheetId', $pSheetId); + + // Setting string + $settingString = ''; + + // Columns to repeat + if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) { + $repeat = $pSheet->getPageSetup()->getColumnsToRepeatAtLeft(); + + $settingString .= '\'' . str_replace("'", "''", $pSheet->getTitle()) . '\'!$' . $repeat[0] . ':$' . $repeat[1]; + } + + // Rows to repeat + if ($pSheet->getPageSetup()->isRowsToRepeatAtTopSet()) { + if ($pSheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) { + $settingString .= ','; + } + + $repeat = $pSheet->getPageSetup()->getRowsToRepeatAtTop(); + + $settingString .= '\'' . str_replace("'", "''", $pSheet->getTitle()) . '\'!$' . $repeat[0] . ':$' . $repeat[1]; + } + + $objWriter->writeRawData($settingString); + + $objWriter->endElement(); + } + } + + /** + * Write Defined Name for PrintTitles + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet + * @param int $pSheetId + * @throws PHPExcel_Writer_Exception + */ + private function _writeDefinedNameForPrintArea(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pSheetId = 0) + { + // definedName for PrintArea + if ($pSheet->getPageSetup()->isPrintAreaSet()) { + $objWriter->startElement('definedName'); + $objWriter->writeAttribute('name', '_xlnm.Print_Area'); + $objWriter->writeAttribute('localSheetId', $pSheetId); + + // Setting string + $settingString = ''; + + // Print area + $printArea = PHPExcel_Cell::splitRange($pSheet->getPageSetup()->getPrintArea()); + + $chunks = array(); + foreach ($printArea as $printAreaRect) { + $printAreaRect[0] = PHPExcel_Cell::absoluteReference($printAreaRect[0]); + $printAreaRect[1] = PHPExcel_Cell::absoluteReference($printAreaRect[1]); + $chunks[] = '\'' . str_replace("'", "''", $pSheet->getTitle()) . '\'!' . implode(':', $printAreaRect); + } + + $objWriter->writeRawData(implode(',', $chunks)); + + $objWriter->endElement(); + } + } +} diff --git a/PHPExcel/Writer/Excel2007/Worksheet.php b/PHPExcel/Writer/Excel2007/Worksheet.php new file mode 100644 index 0000000..7d93f5a --- /dev/null +++ b/PHPExcel/Writer/Excel2007/Worksheet.php @@ -0,0 +1,1220 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_Worksheet + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel2007_Worksheet extends PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Write worksheet to XML format + * + * @param PHPExcel_Worksheet $pSheet + * @param string[] $pStringTable + * @param boolean $includeCharts Flag indicating if we should write charts + * @return string XML Output + * @throws PHPExcel_Writer_Exception + */ + public function writeWorksheet($pSheet = null, $pStringTable = null, $includeCharts = FALSE) + { + if (!is_null($pSheet)) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Worksheet + $objWriter->startElement('worksheet'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + + // sheetPr + $this->_writeSheetPr($objWriter, $pSheet); + + // Dimension + $this->_writeDimension($objWriter, $pSheet); + + // sheetViews + $this->_writeSheetViews($objWriter, $pSheet); + + // sheetFormatPr + $this->_writeSheetFormatPr($objWriter, $pSheet); + + // cols + $this->_writeCols($objWriter, $pSheet); + + // sheetData + $this->_writeSheetData($objWriter, $pSheet, $pStringTable); + + // sheetProtection + $this->_writeSheetProtection($objWriter, $pSheet); + + // protectedRanges + $this->_writeProtectedRanges($objWriter, $pSheet); + + // autoFilter + $this->_writeAutoFilter($objWriter, $pSheet); + + // mergeCells + $this->_writeMergeCells($objWriter, $pSheet); + + // conditionalFormatting + $this->_writeConditionalFormatting($objWriter, $pSheet); + + // dataValidations + $this->_writeDataValidations($objWriter, $pSheet); + + // hyperlinks + $this->_writeHyperlinks($objWriter, $pSheet); + + // Print options + $this->_writePrintOptions($objWriter, $pSheet); + + // Page margins + $this->_writePageMargins($objWriter, $pSheet); + + // Page setup + $this->_writePageSetup($objWriter, $pSheet); + + // Header / footer + $this->_writeHeaderFooter($objWriter, $pSheet); + + // Breaks + $this->_writeBreaks($objWriter, $pSheet); + + // Drawings and/or Charts + $this->_writeDrawings($objWriter, $pSheet, $includeCharts); + + // LegacyDrawing + $this->_writeLegacyDrawing($objWriter, $pSheet); + + // LegacyDrawingHF + $this->_writeLegacyDrawingHF($objWriter, $pSheet); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } else { + throw new PHPExcel_Writer_Exception("Invalid PHPExcel_Worksheet object passed."); + } + } + + /** + * Write SheetPr + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeSheetPr(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // sheetPr + $objWriter->startElement('sheetPr'); + //$objWriter->writeAttribute('codeName', $pSheet->getTitle()); + if($pSheet->getParent()->hasMacros()){//if the workbook have macros, we need to have codeName for the sheet + if($pSheet->hasCodeName()==false){ + $pSheet->setCodeName($pSheet->getTitle()); + } + $objWriter->writeAttribute('codeName', $pSheet->getCodeName()); + } + $autoFilterRange = $pSheet->getAutoFilter()->getRange(); + if (!empty($autoFilterRange)) { + $objWriter->writeAttribute('filterMode', 1); + $pSheet->getAutoFilter()->showHideRows(); + } + + // tabColor + if ($pSheet->isTabColorSet()) { + $objWriter->startElement('tabColor'); + $objWriter->writeAttribute('rgb', $pSheet->getTabColor()->getARGB()); + $objWriter->endElement(); + } + + // outlinePr + $objWriter->startElement('outlinePr'); + $objWriter->writeAttribute('summaryBelow', ($pSheet->getShowSummaryBelow() ? '1' : '0')); + $objWriter->writeAttribute('summaryRight', ($pSheet->getShowSummaryRight() ? '1' : '0')); + $objWriter->endElement(); + + // pageSetUpPr + if ($pSheet->getPageSetup()->getFitToPage()) { + $objWriter->startElement('pageSetUpPr'); + $objWriter->writeAttribute('fitToPage', '1'); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + + /** + * Write Dimension + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeDimension(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // dimension + $objWriter->startElement('dimension'); + $objWriter->writeAttribute('ref', $pSheet->calculateWorksheetDimension()); + $objWriter->endElement(); + } + + /** + * Write SheetViews + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeSheetViews(PHPExcel_Shared_XMLWriter $objWriter = NULL, PHPExcel_Worksheet $pSheet = NULL) + { + // sheetViews + $objWriter->startElement('sheetViews'); + + // Sheet selected? + $sheetSelected = false; + if ($this->getParentWriter()->getPHPExcel()->getIndex($pSheet) == $this->getParentWriter()->getPHPExcel()->getActiveSheetIndex()) + $sheetSelected = true; + + + // sheetView + $objWriter->startElement('sheetView'); + $objWriter->writeAttribute('tabSelected', $sheetSelected ? '1' : '0'); + $objWriter->writeAttribute('workbookViewId', '0'); + + // Zoom scales + if ($pSheet->getSheetView()->getZoomScale() != 100) { + $objWriter->writeAttribute('zoomScale', $pSheet->getSheetView()->getZoomScale()); + } + if ($pSheet->getSheetView()->getZoomScaleNormal() != 100) { + $objWriter->writeAttribute('zoomScaleNormal', $pSheet->getSheetView()->getZoomScaleNormal()); + } + + // View Layout Type + if ($pSheet->getSheetView()->getView() !== PHPExcel_Worksheet_SheetView::SHEETVIEW_NORMAL) { + $objWriter->writeAttribute('view', $pSheet->getSheetView()->getView()); + } + + // Gridlines + if ($pSheet->getShowGridlines()) { + $objWriter->writeAttribute('showGridLines', 'true'); + } else { + $objWriter->writeAttribute('showGridLines', 'false'); + } + + // Row and column headers + if ($pSheet->getShowRowColHeaders()) { + $objWriter->writeAttribute('showRowColHeaders', '1'); + } else { + $objWriter->writeAttribute('showRowColHeaders', '0'); + } + + // Right-to-left + if ($pSheet->getRightToLeft()) { + $objWriter->writeAttribute('rightToLeft', 'true'); + } + + $activeCell = $pSheet->getActiveCell(); + + // Pane + $pane = ''; + $topLeftCell = $pSheet->getFreezePane(); + if (($topLeftCell != '') && ($topLeftCell != 'A1')) { + $activeCell = $topLeftCell; + // Calculate freeze coordinates + $xSplit = $ySplit = 0; + + list($xSplit, $ySplit) = PHPExcel_Cell::coordinateFromString($topLeftCell); + $xSplit = PHPExcel_Cell::columnIndexFromString($xSplit); + + // pane + $pane = 'topRight'; + $objWriter->startElement('pane'); + if ($xSplit > 1) + $objWriter->writeAttribute('xSplit', $xSplit - 1); + if ($ySplit > 1) { + $objWriter->writeAttribute('ySplit', $ySplit - 1); + $pane = ($xSplit > 1) ? 'bottomRight' : 'bottomLeft'; + } + $objWriter->writeAttribute('topLeftCell', $topLeftCell); + $objWriter->writeAttribute('activePane', $pane); + $objWriter->writeAttribute('state', 'frozen'); + $objWriter->endElement(); + + if (($xSplit > 1) && ($ySplit > 1)) { + // Write additional selections if more than two panes (ie both an X and a Y split) + $objWriter->startElement('selection'); $objWriter->writeAttribute('pane', 'topRight'); $objWriter->endElement(); + $objWriter->startElement('selection'); $objWriter->writeAttribute('pane', 'bottomLeft'); $objWriter->endElement(); + } + } + + // Selection +// if ($pane != '') { + // Only need to write selection element if we have a split pane + // We cheat a little by over-riding the active cell selection, setting it to the split cell + $objWriter->startElement('selection'); + if ($pane != '') { + $objWriter->writeAttribute('pane', $pane); + } + $objWriter->writeAttribute('activeCell', $activeCell); + $objWriter->writeAttribute('sqref', $activeCell); + $objWriter->endElement(); +// } + + $objWriter->endElement(); + + $objWriter->endElement(); + } + + /** + * Write SheetFormatPr + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeSheetFormatPr(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // sheetFormatPr + $objWriter->startElement('sheetFormatPr'); + + // Default row height + if ($pSheet->getDefaultRowDimension()->getRowHeight() >= 0) { + $objWriter->writeAttribute('customHeight', 'true'); + $objWriter->writeAttribute('defaultRowHeight', PHPExcel_Shared_String::FormatNumber($pSheet->getDefaultRowDimension()->getRowHeight())); + } else { + $objWriter->writeAttribute('defaultRowHeight', '14.4'); + } + + // Set Zero Height row + if ((string)$pSheet->getDefaultRowDimension()->getzeroHeight() == '1' || + strtolower((string)$pSheet->getDefaultRowDimension()->getzeroHeight()) == 'true' ) { + $objWriter->writeAttribute('zeroHeight', '1'); + } + + // Default column width + if ($pSheet->getDefaultColumnDimension()->getWidth() >= 0) { + $objWriter->writeAttribute('defaultColWidth', PHPExcel_Shared_String::FormatNumber($pSheet->getDefaultColumnDimension()->getWidth())); + } + + // Outline level - row + $outlineLevelRow = 0; + foreach ($pSheet->getRowDimensions() as $dimension) { + if ($dimension->getOutlineLevel() > $outlineLevelRow) { + $outlineLevelRow = $dimension->getOutlineLevel(); + } + } + $objWriter->writeAttribute('outlineLevelRow', (int)$outlineLevelRow); + + // Outline level - column + $outlineLevelCol = 0; + foreach ($pSheet->getColumnDimensions() as $dimension) { + if ($dimension->getOutlineLevel() > $outlineLevelCol) { + $outlineLevelCol = $dimension->getOutlineLevel(); + } + } + $objWriter->writeAttribute('outlineLevelCol', (int)$outlineLevelCol); + + $objWriter->endElement(); + } + + /** + * Write Cols + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeCols(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // cols + if (count($pSheet->getColumnDimensions()) > 0) { + $objWriter->startElement('cols'); + + $pSheet->calculateColumnWidths(); + + // Loop through column dimensions + foreach ($pSheet->getColumnDimensions() as $colDimension) { + // col + $objWriter->startElement('col'); + $objWriter->writeAttribute('min', PHPExcel_Cell::columnIndexFromString($colDimension->getColumnIndex())); + $objWriter->writeAttribute('max', PHPExcel_Cell::columnIndexFromString($colDimension->getColumnIndex())); + + if ($colDimension->getWidth() < 0) { + // No width set, apply default of 10 + $objWriter->writeAttribute('width', '9.10'); + } else { + // Width set + $objWriter->writeAttribute('width', PHPExcel_Shared_String::FormatNumber($colDimension->getWidth())); + } + + // Column visibility + if ($colDimension->getVisible() == false) { + $objWriter->writeAttribute('hidden', 'true'); + } + + // Auto size? + if ($colDimension->getAutoSize()) { + $objWriter->writeAttribute('bestFit', 'true'); + } + + // Custom width? + if ($colDimension->getWidth() != $pSheet->getDefaultColumnDimension()->getWidth()) { + $objWriter->writeAttribute('customWidth', 'true'); + } + + // Collapsed + if ($colDimension->getCollapsed() == true) { + $objWriter->writeAttribute('collapsed', 'true'); + } + + // Outline level + if ($colDimension->getOutlineLevel() > 0) { + $objWriter->writeAttribute('outlineLevel', $colDimension->getOutlineLevel()); + } + + // Style + $objWriter->writeAttribute('style', $colDimension->getXfIndex()); + + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + } + + /** + * Write SheetProtection + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeSheetProtection(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // sheetProtection + $objWriter->startElement('sheetProtection'); + + if ($pSheet->getProtection()->getPassword() != '') { + $objWriter->writeAttribute('password', $pSheet->getProtection()->getPassword()); + } + + $objWriter->writeAttribute('sheet', ($pSheet->getProtection()->getSheet() ? 'true' : 'false')); + $objWriter->writeAttribute('objects', ($pSheet->getProtection()->getObjects() ? 'true' : 'false')); + $objWriter->writeAttribute('scenarios', ($pSheet->getProtection()->getScenarios() ? 'true' : 'false')); + $objWriter->writeAttribute('formatCells', ($pSheet->getProtection()->getFormatCells() ? 'true' : 'false')); + $objWriter->writeAttribute('formatColumns', ($pSheet->getProtection()->getFormatColumns() ? 'true' : 'false')); + $objWriter->writeAttribute('formatRows', ($pSheet->getProtection()->getFormatRows() ? 'true' : 'false')); + $objWriter->writeAttribute('insertColumns', ($pSheet->getProtection()->getInsertColumns() ? 'true' : 'false')); + $objWriter->writeAttribute('insertRows', ($pSheet->getProtection()->getInsertRows() ? 'true' : 'false')); + $objWriter->writeAttribute('insertHyperlinks', ($pSheet->getProtection()->getInsertHyperlinks() ? 'true' : 'false')); + $objWriter->writeAttribute('deleteColumns', ($pSheet->getProtection()->getDeleteColumns() ? 'true' : 'false')); + $objWriter->writeAttribute('deleteRows', ($pSheet->getProtection()->getDeleteRows() ? 'true' : 'false')); + $objWriter->writeAttribute('selectLockedCells', ($pSheet->getProtection()->getSelectLockedCells() ? 'true' : 'false')); + $objWriter->writeAttribute('sort', ($pSheet->getProtection()->getSort() ? 'true' : 'false')); + $objWriter->writeAttribute('autoFilter', ($pSheet->getProtection()->getAutoFilter() ? 'true' : 'false')); + $objWriter->writeAttribute('pivotTables', ($pSheet->getProtection()->getPivotTables() ? 'true' : 'false')); + $objWriter->writeAttribute('selectUnlockedCells', ($pSheet->getProtection()->getSelectUnlockedCells() ? 'true' : 'false')); + $objWriter->endElement(); + } + + /** + * Write ConditionalFormatting + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeConditionalFormatting(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // Conditional id + $id = 1; + + // Loop through styles in the current worksheet + foreach ($pSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) { + foreach ($conditionalStyles as $conditional) { + // WHY was this again? + // if ($this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() ) == '') { + // continue; + // } + if ($conditional->getConditionType() != PHPExcel_Style_Conditional::CONDITION_NONE) { + // conditionalFormatting + $objWriter->startElement('conditionalFormatting'); + $objWriter->writeAttribute('sqref', $cellCoordinate); + + // cfRule + $objWriter->startElement('cfRule'); + $objWriter->writeAttribute('type', $conditional->getConditionType()); + $objWriter->writeAttribute('dxfId', $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() )); + $objWriter->writeAttribute('priority', $id++); + + if (($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CELLIS + || + $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT) + && $conditional->getOperatorType() != PHPExcel_Style_Conditional::OPERATOR_NONE) { + $objWriter->writeAttribute('operator', $conditional->getOperatorType()); + } + + if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT + && !is_null($conditional->getText())) { + $objWriter->writeAttribute('text', $conditional->getText()); + } + + if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT + && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_CONTAINSTEXT + && !is_null($conditional->getText())) { + $objWriter->writeElement('formula', 'NOT(ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . ')))'); + } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT + && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_BEGINSWITH + && !is_null($conditional->getText())) { + $objWriter->writeElement('formula', 'LEFT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"'); + } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT + && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_ENDSWITH + && !is_null($conditional->getText())) { + $objWriter->writeElement('formula', 'RIGHT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"'); + } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT + && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_NOTCONTAINS + && !is_null($conditional->getText())) { + $objWriter->writeElement('formula', 'ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . '))'); + } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CELLIS + || $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT + || $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_EXPRESSION) { + foreach ($conditional->getConditions() as $formula) { + // Formula + $objWriter->writeElement('formula', $formula); + } + } + + $objWriter->endElement(); + + $objWriter->endElement(); + } + } + } + } + + /** + * Write DataValidations + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeDataValidations(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // Datavalidation collection + $dataValidationCollection = $pSheet->getDataValidationCollection(); + + // Write data validations? + if (!empty($dataValidationCollection)) { + $objWriter->startElement('dataValidations'); + $objWriter->writeAttribute('count', count($dataValidationCollection)); + + foreach ($dataValidationCollection as $coordinate => $dv) { + $objWriter->startElement('dataValidation'); + + if ($dv->getType() != '') { + $objWriter->writeAttribute('type', $dv->getType()); + } + + if ($dv->getErrorStyle() != '') { + $objWriter->writeAttribute('errorStyle', $dv->getErrorStyle()); + } + + if ($dv->getOperator() != '') { + $objWriter->writeAttribute('operator', $dv->getOperator()); + } + + $objWriter->writeAttribute('allowBlank', ($dv->getAllowBlank() ? '1' : '0')); + $objWriter->writeAttribute('showDropDown', (!$dv->getShowDropDown() ? '1' : '0')); + $objWriter->writeAttribute('showInputMessage', ($dv->getShowInputMessage() ? '1' : '0')); + $objWriter->writeAttribute('showErrorMessage', ($dv->getShowErrorMessage() ? '1' : '0')); + + if ($dv->getErrorTitle() !== '') { + $objWriter->writeAttribute('errorTitle', $dv->getErrorTitle()); + } + if ($dv->getError() !== '') { + $objWriter->writeAttribute('error', $dv->getError()); + } + if ($dv->getPromptTitle() !== '') { + $objWriter->writeAttribute('promptTitle', $dv->getPromptTitle()); + } + if ($dv->getPrompt() !== '') { + $objWriter->writeAttribute('prompt', $dv->getPrompt()); + } + + $objWriter->writeAttribute('sqref', $coordinate); + + if ($dv->getFormula1() !== '') { + $objWriter->writeElement('formula1', $dv->getFormula1()); + } + if ($dv->getFormula2() !== '') { + $objWriter->writeElement('formula2', $dv->getFormula2()); + } + + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + } + + /** + * Write Hyperlinks + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeHyperlinks(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // Hyperlink collection + $hyperlinkCollection = $pSheet->getHyperlinkCollection(); + + // Relation ID + $relationId = 1; + + // Write hyperlinks? + if (!empty($hyperlinkCollection)) { + $objWriter->startElement('hyperlinks'); + + foreach ($hyperlinkCollection as $coordinate => $hyperlink) { + $objWriter->startElement('hyperlink'); + + $objWriter->writeAttribute('ref', $coordinate); + if (!$hyperlink->isInternal()) { + $objWriter->writeAttribute('r:id', 'rId_hyperlink_' . $relationId); + ++$relationId; + } else { + $objWriter->writeAttribute('location', str_replace('sheet://', '', $hyperlink->getUrl())); + } + + if ($hyperlink->getTooltip() != '') { + $objWriter->writeAttribute('tooltip', $hyperlink->getTooltip()); + } + + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + } + + /** + * Write ProtectedRanges + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeProtectedRanges(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + if (count($pSheet->getProtectedCells()) > 0) { + // protectedRanges + $objWriter->startElement('protectedRanges'); + + // Loop protectedRanges + foreach ($pSheet->getProtectedCells() as $protectedCell => $passwordHash) { + // protectedRange + $objWriter->startElement('protectedRange'); + $objWriter->writeAttribute('name', 'p' . md5($protectedCell)); + $objWriter->writeAttribute('sqref', $protectedCell); + if (!empty($passwordHash)) { + $objWriter->writeAttribute('password', $passwordHash); + } + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + } + + /** + * Write MergeCells + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeMergeCells(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + if (count($pSheet->getMergeCells()) > 0) { + // mergeCells + $objWriter->startElement('mergeCells'); + + // Loop mergeCells + foreach ($pSheet->getMergeCells() as $mergeCell) { + // mergeCell + $objWriter->startElement('mergeCell'); + $objWriter->writeAttribute('ref', $mergeCell); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + } + + /** + * Write PrintOptions + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writePrintOptions(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // printOptions + $objWriter->startElement('printOptions'); + + $objWriter->writeAttribute('gridLines', ($pSheet->getPrintGridlines() ? 'true': 'false')); + $objWriter->writeAttribute('gridLinesSet', 'true'); + + if ($pSheet->getPageSetup()->getHorizontalCentered()) { + $objWriter->writeAttribute('horizontalCentered', 'true'); + } + + if ($pSheet->getPageSetup()->getVerticalCentered()) { + $objWriter->writeAttribute('verticalCentered', 'true'); + } + + $objWriter->endElement(); + } + + /** + * Write PageMargins + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writePageMargins(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // pageMargins + $objWriter->startElement('pageMargins'); + $objWriter->writeAttribute('left', PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getLeft())); + $objWriter->writeAttribute('right', PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getRight())); + $objWriter->writeAttribute('top', PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getTop())); + $objWriter->writeAttribute('bottom', PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getBottom())); + $objWriter->writeAttribute('header', PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getHeader())); + $objWriter->writeAttribute('footer', PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getFooter())); + $objWriter->endElement(); + } + + /** + * Write AutoFilter + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeAutoFilter(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + $autoFilterRange = $pSheet->getAutoFilter()->getRange(); + if (!empty($autoFilterRange)) { + // autoFilter + $objWriter->startElement('autoFilter'); + + // Strip any worksheet reference from the filter coordinates + $range = PHPExcel_Cell::splitRange($autoFilterRange); + $range = $range[0]; + // Strip any worksheet ref + if (strpos($range[0],'!') !== false) { + list($ws,$range[0]) = explode('!',$range[0]); + } + $range = implode(':', $range); + + $objWriter->writeAttribute('ref', str_replace('$','',$range)); + + $columns = $pSheet->getAutoFilter()->getColumns(); + if (count($columns > 0)) { + foreach($columns as $columnID => $column) { + $rules = $column->getRules(); + if (count($rules > 0)) { + $objWriter->startElement('filterColumn'); + $objWriter->writeAttribute('colId', $pSheet->getAutoFilter()->getColumnOffset($columnID)); + + $objWriter->startElement( $column->getFilterType()); + if ($column->getJoin() == PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND) { + $objWriter->writeAttribute('and', 1); + } + + foreach ($rules as $rule) { + if (($column->getFilterType() === PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER) && + ($rule->getOperator() === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL) && + ($rule->getValue() === '')) { + // Filter rule for Blanks + $objWriter->writeAttribute('blank', 1); + } elseif($rule->getRuleType() === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER) { + // Dynamic Filter Rule + $objWriter->writeAttribute('type', $rule->getGrouping()); + $val = $column->getAttribute('val'); + if ($val !== NULL) { + $objWriter->writeAttribute('val', $val); + } + $maxVal = $column->getAttribute('maxVal'); + if ($maxVal !== NULL) { + $objWriter->writeAttribute('maxVal', $maxVal); + } + } elseif($rule->getRuleType() === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_TOPTENFILTER) { + // Top 10 Filter Rule + $objWriter->writeAttribute('val', $rule->getValue()); + $objWriter->writeAttribute('percent', (($rule->getOperator() === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT) ? '1' : '0')); + $objWriter->writeAttribute('top', (($rule->getGrouping() === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP) ? '1': '0')); + } else { + // Filter, DateGroupItem or CustomFilter + $objWriter->startElement($rule->getRuleType()); + + if ($rule->getOperator() !== PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL) { + $objWriter->writeAttribute('operator', $rule->getOperator()); + } + if ($rule->getRuleType() === PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP) { + // Date Group filters + foreach($rule->getValue() as $key => $value) { + if ($value > '') $objWriter->writeAttribute($key, $value); + } + $objWriter->writeAttribute('dateTimeGrouping', $rule->getGrouping()); + } else { + $objWriter->writeAttribute('val', $rule->getValue()); + } + + $objWriter->endElement(); + } + } + + $objWriter->endElement(); + + $objWriter->endElement(); + } + } + } + + $objWriter->endElement(); + } + } + + /** + * Write PageSetup + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writePageSetup(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // pageSetup + $objWriter->startElement('pageSetup'); + $objWriter->writeAttribute('paperSize', $pSheet->getPageSetup()->getPaperSize()); + $objWriter->writeAttribute('orientation', $pSheet->getPageSetup()->getOrientation()); + + if (!is_null($pSheet->getPageSetup()->getScale())) { + $objWriter->writeAttribute('scale', $pSheet->getPageSetup()->getScale()); + } + if (!is_null($pSheet->getPageSetup()->getFitToHeight())) { + $objWriter->writeAttribute('fitToHeight', $pSheet->getPageSetup()->getFitToHeight()); + } else { + $objWriter->writeAttribute('fitToHeight', '0'); + } + if (!is_null($pSheet->getPageSetup()->getFitToWidth())) { + $objWriter->writeAttribute('fitToWidth', $pSheet->getPageSetup()->getFitToWidth()); + } else { + $objWriter->writeAttribute('fitToWidth', '0'); + } + if (!is_null($pSheet->getPageSetup()->getFirstPageNumber())) { + $objWriter->writeAttribute('firstPageNumber', $pSheet->getPageSetup()->getFirstPageNumber()); + $objWriter->writeAttribute('useFirstPageNumber', '1'); + } + + $objWriter->endElement(); + } + + /** + * Write Header / Footer + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeHeaderFooter(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // headerFooter + $objWriter->startElement('headerFooter'); + $objWriter->writeAttribute('differentOddEven', ($pSheet->getHeaderFooter()->getDifferentOddEven() ? 'true' : 'false')); + $objWriter->writeAttribute('differentFirst', ($pSheet->getHeaderFooter()->getDifferentFirst() ? 'true' : 'false')); + $objWriter->writeAttribute('scaleWithDoc', ($pSheet->getHeaderFooter()->getScaleWithDocument() ? 'true' : 'false')); + $objWriter->writeAttribute('alignWithMargins', ($pSheet->getHeaderFooter()->getAlignWithMargins() ? 'true' : 'false')); + + $objWriter->writeElement('oddHeader', $pSheet->getHeaderFooter()->getOddHeader()); + $objWriter->writeElement('oddFooter', $pSheet->getHeaderFooter()->getOddFooter()); + $objWriter->writeElement('evenHeader', $pSheet->getHeaderFooter()->getEvenHeader()); + $objWriter->writeElement('evenFooter', $pSheet->getHeaderFooter()->getEvenFooter()); + $objWriter->writeElement('firstHeader', $pSheet->getHeaderFooter()->getFirstHeader()); + $objWriter->writeElement('firstFooter', $pSheet->getHeaderFooter()->getFirstFooter()); + $objWriter->endElement(); + } + + /** + * Write Breaks + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeBreaks(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // Get row and column breaks + $aRowBreaks = array(); + $aColumnBreaks = array(); + foreach ($pSheet->getBreaks() as $cell => $breakType) { + if ($breakType == PHPExcel_Worksheet::BREAK_ROW) { + $aRowBreaks[] = $cell; + } else if ($breakType == PHPExcel_Worksheet::BREAK_COLUMN) { + $aColumnBreaks[] = $cell; + } + } + + // rowBreaks + if (!empty($aRowBreaks)) { + $objWriter->startElement('rowBreaks'); + $objWriter->writeAttribute('count', count($aRowBreaks)); + $objWriter->writeAttribute('manualBreakCount', count($aRowBreaks)); + + foreach ($aRowBreaks as $cell) { + $coords = PHPExcel_Cell::coordinateFromString($cell); + + $objWriter->startElement('brk'); + $objWriter->writeAttribute('id', $coords[1]); + $objWriter->writeAttribute('man', '1'); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + + // Second, write column breaks + if (!empty($aColumnBreaks)) { + $objWriter->startElement('colBreaks'); + $objWriter->writeAttribute('count', count($aColumnBreaks)); + $objWriter->writeAttribute('manualBreakCount', count($aColumnBreaks)); + + foreach ($aColumnBreaks as $cell) { + $coords = PHPExcel_Cell::coordinateFromString($cell); + + $objWriter->startElement('brk'); + $objWriter->writeAttribute('id', PHPExcel_Cell::columnIndexFromString($coords[0]) - 1); + $objWriter->writeAttribute('man', '1'); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + } + + /** + * Write SheetData + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @param string[] $pStringTable String table + * @throws PHPExcel_Writer_Exception + */ + private function _writeSheetData(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pStringTable = null) + { + if (is_array($pStringTable)) { + // Flipped stringtable, for faster index searching + $aFlippedStringTable = $this->getParentWriter()->getWriterPart('stringtable')->flipStringTable($pStringTable); + + // sheetData + $objWriter->startElement('sheetData'); + + // Get column count + $colCount = PHPExcel_Cell::columnIndexFromString($pSheet->getHighestColumn()); + + // Highest row number + $highestRow = $pSheet->getHighestRow(); + + // Loop through cells + $cellsByRow = array(); + foreach ($pSheet->getCellCollection() as $cellID) { + $cellAddress = PHPExcel_Cell::coordinateFromString($cellID); + $cellsByRow[$cellAddress[1]][] = $cellID; + } + + $currentRow = 0; + while($currentRow++ < $highestRow) { + // Get row dimension + $rowDimension = $pSheet->getRowDimension($currentRow); + + // Write current row? + $writeCurrentRow = isset($cellsByRow[$currentRow]) || + $rowDimension->getRowHeight() >= 0 || + $rowDimension->getVisible() == false || + $rowDimension->getCollapsed() == true || + $rowDimension->getOutlineLevel() > 0 || + $rowDimension->getXfIndex() !== null; + + if ($writeCurrentRow) { + // Start a new row + $objWriter->startElement('row'); + $objWriter->writeAttribute('r', $currentRow); + $objWriter->writeAttribute('spans', '1:' . $colCount); + + // Row dimensions + if ($rowDimension->getRowHeight() >= 0) { + $objWriter->writeAttribute('customHeight', '1'); + $objWriter->writeAttribute('ht', PHPExcel_Shared_String::FormatNumber($rowDimension->getRowHeight())); + } + + // Row visibility + if ($rowDimension->getVisible() == false) { + $objWriter->writeAttribute('hidden', 'true'); + } + + // Collapsed + if ($rowDimension->getCollapsed() == true) { + $objWriter->writeAttribute('collapsed', 'true'); + } + + // Outline level + if ($rowDimension->getOutlineLevel() > 0) { + $objWriter->writeAttribute('outlineLevel', $rowDimension->getOutlineLevel()); + } + + // Style + if ($rowDimension->getXfIndex() !== null) { + $objWriter->writeAttribute('s', $rowDimension->getXfIndex()); + $objWriter->writeAttribute('customFormat', '1'); + } + + // Write cells + if (isset($cellsByRow[$currentRow])) { + foreach($cellsByRow[$currentRow] as $cellAddress) { + // Write cell + $this->_writeCell($objWriter, $pSheet, $cellAddress, $pStringTable, $aFlippedStringTable); + } + } + + // End row + $objWriter->endElement(); + } + } + + $objWriter->endElement(); + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } + + /** + * Write Cell + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @param PHPExcel_Cell $pCellAddress Cell Address + * @param string[] $pStringTable String table + * @param string[] $pFlippedStringTable String table (flipped), for faster index searching + * @throws PHPExcel_Writer_Exception + */ + private function _writeCell(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pCellAddress = null, $pStringTable = null, $pFlippedStringTable = null) + { + if (is_array($pStringTable) && is_array($pFlippedStringTable)) { + // Cell + $pCell = $pSheet->getCell($pCellAddress); + $objWriter->startElement('c'); + $objWriter->writeAttribute('r', $pCellAddress); + + // Sheet styles + if ($pCell->getXfIndex() != '') { + $objWriter->writeAttribute('s', $pCell->getXfIndex()); + } + + // If cell value is supplied, write cell value + $cellValue = $pCell->getValue(); + if (is_object($cellValue) || $cellValue !== '') { + // Map type + $mappedType = $pCell->getDataType(); + + // Write data type depending on its type + switch (strtolower($mappedType)) { + case 'inlinestr': // Inline string + case 's': // String + case 'b': // Boolean + $objWriter->writeAttribute('t', $mappedType); + break; + case 'f': // Formula + $calculatedValue = ($this->getParentWriter()->getPreCalculateFormulas()) ? + $pCell->getCalculatedValue() : + $cellValue; + if (is_string($calculatedValue)) { + $objWriter->writeAttribute('t', 'str'); + } + break; + case 'e': // Error + $objWriter->writeAttribute('t', $mappedType); + } + + // Write data depending on its type + switch (strtolower($mappedType)) { + case 'inlinestr': // Inline string + if (! $cellValue instanceof PHPExcel_RichText) { + $objWriter->writeElement('t', PHPExcel_Shared_String::ControlCharacterPHP2OOXML( htmlspecialchars($cellValue) ) ); + } else if ($cellValue instanceof PHPExcel_RichText) { + $objWriter->startElement('is'); + $this->getParentWriter()->getWriterPart('stringtable')->writeRichText($objWriter, $cellValue); + $objWriter->endElement(); + } + + break; + case 's': // String + if (! $cellValue instanceof PHPExcel_RichText) { + if (isset($pFlippedStringTable[$cellValue])) { + $objWriter->writeElement('v', $pFlippedStringTable[$cellValue]); + } + } else if ($cellValue instanceof PHPExcel_RichText) { + $objWriter->writeElement('v', $pFlippedStringTable[$cellValue->getHashCode()]); + } + + break; + case 'f': // Formula + $attributes = $pCell->getFormulaAttributes(); + if($attributes['t'] == 'array') { + $objWriter->startElement('f'); + $objWriter->writeAttribute('t', 'array'); + $objWriter->writeAttribute('ref', $pCellAddress); + $objWriter->writeAttribute('aca', '1'); + $objWriter->writeAttribute('ca', '1'); + $objWriter->text(substr($cellValue, 1)); + $objWriter->endElement(); + } else { + $objWriter->writeElement('f', substr($cellValue, 1)); + } + if ($this->getParentWriter()->getOffice2003Compatibility() === false) { + if ($this->getParentWriter()->getPreCalculateFormulas()) { +// $calculatedValue = $pCell->getCalculatedValue(); + if (!is_array($calculatedValue) && substr($calculatedValue, 0, 1) != '#') { + $objWriter->writeElement('v', PHPExcel_Shared_String::FormatNumber($calculatedValue)); + } else { + $objWriter->writeElement('v', '0'); + } + } else { + $objWriter->writeElement('v', '0'); + } + } + break; + case 'n': // Numeric + // force point as decimal separator in case current locale uses comma + $objWriter->writeElement('v', str_replace(',', '.', $cellValue)); + break; + case 'b': // Boolean + $objWriter->writeElement('v', ($cellValue ? '1' : '0')); + break; + case 'e': // Error + if (substr($cellValue, 0, 1) == '=') { + $objWriter->writeElement('f', substr($cellValue, 1)); + $objWriter->writeElement('v', substr($cellValue, 1)); + } else { + $objWriter->writeElement('v', $cellValue); + } + + break; + } + } + + $objWriter->endElement(); + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } + + /** + * Write Drawings + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @param boolean $includeCharts Flag indicating if we should include drawing details for charts + * @throws PHPExcel_Writer_Exception + */ + private function _writeDrawings(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $includeCharts = FALSE) + { + $chartCount = ($includeCharts) ? $pSheet->getChartCollection()->count() : 0; + // If sheet contains drawings, add the relationships + if (($pSheet->getDrawingCollection()->count() > 0) || + ($chartCount > 0)) { + $objWriter->startElement('drawing'); + $objWriter->writeAttribute('r:id', 'rId1'); + $objWriter->endElement(); + } + } + + /** + * Write LegacyDrawing + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeLegacyDrawing(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // If sheet contains comments, add the relationships + if (count($pSheet->getComments()) > 0) { + $objWriter->startElement('legacyDrawing'); + $objWriter->writeAttribute('r:id', 'rId_comments_vml1'); + $objWriter->endElement(); + } + } + + /** + * Write LegacyDrawingHF + * + * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer + * @param PHPExcel_Worksheet $pSheet Worksheet + * @throws PHPExcel_Writer_Exception + */ + private function _writeLegacyDrawingHF(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null) + { + // If sheet contains images, add the relationships + if (count($pSheet->getHeaderFooter()->getImages()) > 0) { + $objWriter->startElement('legacyDrawingHF'); + $objWriter->writeAttribute('r:id', 'rId_headerfooter_vml1'); + $objWriter->endElement(); + } + } +} diff --git a/PHPExcel/Writer/Excel2007/WriterPart.php b/PHPExcel/Writer/Excel2007/WriterPart.php new file mode 100644 index 0000000..982117b --- /dev/null +++ b/PHPExcel/Writer/Excel2007/WriterPart.php @@ -0,0 +1,81 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel2007_WriterPart + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel2007 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +abstract class PHPExcel_Writer_Excel2007_WriterPart +{ + /** + * Parent IWriter object + * + * @var PHPExcel_Writer_IWriter + */ + private $_parentWriter; + + /** + * Set parent IWriter object + * + * @param PHPExcel_Writer_IWriter $pWriter + * @throws PHPExcel_Writer_Exception + */ + public function setParentWriter(PHPExcel_Writer_IWriter $pWriter = null) { + $this->_parentWriter = $pWriter; + } + + /** + * Get parent IWriter object + * + * @return PHPExcel_Writer_IWriter + * @throws PHPExcel_Writer_Exception + */ + public function getParentWriter() { + if (!is_null($this->_parentWriter)) { + return $this->_parentWriter; + } else { + throw new PHPExcel_Writer_Exception("No parent PHPExcel_Writer_IWriter assigned."); + } + } + + /** + * Set parent IWriter object + * + * @param PHPExcel_Writer_IWriter $pWriter + * @throws PHPExcel_Writer_Exception + */ + public function __construct(PHPExcel_Writer_IWriter $pWriter = null) { + if (!is_null($pWriter)) { + $this->_parentWriter = $pWriter; + } + } + +} diff --git a/PHPExcel/Writer/Excel5.php b/PHPExcel/Writer/Excel5.php new file mode 100644 index 0000000..3f816fa --- /dev/null +++ b/PHPExcel/Writer/Excel5.php @@ -0,0 +1,935 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel5 + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5 extends PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter +{ + /** + * PHPExcel object + * + * @var PHPExcel + */ + private $_phpExcel; + + /** + * Total number of shared strings in workbook + * + * @var int + */ + private $_str_total = 0; + + /** + * Number of unique shared strings in workbook + * + * @var int + */ + private $_str_unique = 0; + + /** + * Array of unique shared strings in workbook + * + * @var array + */ + private $_str_table = array(); + + /** + * Color cache. Mapping between RGB value and color index. + * + * @var array + */ + private $_colors; + + /** + * Formula parser + * + * @var PHPExcel_Writer_Excel5_Parser + */ + private $_parser; + + /** + * Identifier clusters for drawings. Used in MSODRAWINGGROUP record. + * + * @var array + */ + private $_IDCLs; + + /** + * Basic OLE object summary information + * + * @var array + */ + private $_summaryInformation; + + /** + * Extended OLE object document summary information + * + * @var array + */ + private $_documentSummaryInformation; + + /** + * Create a new PHPExcel_Writer_Excel5 + * + * @param PHPExcel $phpExcel PHPExcel object + */ + public function __construct(PHPExcel $phpExcel) { + $this->_phpExcel = $phpExcel; + + $this->_parser = new PHPExcel_Writer_Excel5_Parser(); + } + + /** + * Save PHPExcel to file + * + * @param string $pFilename + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = null) { + + // garbage collect + $this->_phpExcel->garbageCollect(); + + $saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->getWriteDebugLog(); + PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog(FALSE); + $saveDateReturnType = PHPExcel_Calculation_Functions::getReturnDateType(); + PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL); + + // initialize colors array + $this->_colors = array(); + + // Initialise workbook writer + $this->_writerWorkbook = new PHPExcel_Writer_Excel5_Workbook($this->_phpExcel, + $this->_str_total, $this->_str_unique, $this->_str_table, + $this->_colors, $this->_parser); + + // Initialise worksheet writers + $countSheets = $this->_phpExcel->getSheetCount(); + for ($i = 0; $i < $countSheets; ++$i) { + $this->_writerWorksheets[$i] = new PHPExcel_Writer_Excel5_Worksheet($this->_str_total, $this->_str_unique, + $this->_str_table, $this->_colors, + $this->_parser, + $this->_preCalculateFormulas, + $this->_phpExcel->getSheet($i)); + } + + // build Escher objects. Escher objects for workbooks needs to be build before Escher object for workbook. + $this->_buildWorksheetEschers(); + $this->_buildWorkbookEscher(); + + // add 15 identical cell style Xfs + // for now, we use the first cellXf instead of cellStyleXf + $cellXfCollection = $this->_phpExcel->getCellXfCollection(); + for ($i = 0; $i < 15; ++$i) { + $this->_writerWorkbook->addXfWriter($cellXfCollection[0], true); + } + + // add all the cell Xfs + foreach ($this->_phpExcel->getCellXfCollection() as $style) { + $this->_writerWorkbook->addXfWriter($style, false); + } + + // add fonts from rich text eleemnts + for ($i = 0; $i < $countSheets; ++$i) { + foreach ($this->_writerWorksheets[$i]->_phpSheet->getCellCollection() as $cellID) { + $cell = $this->_writerWorksheets[$i]->_phpSheet->getCell($cellID); + $cVal = $cell->getValue(); + if ($cVal instanceof PHPExcel_RichText) { + $elements = $cVal->getRichTextElements(); + foreach ($elements as $element) { + if ($element instanceof PHPExcel_RichText_Run) { + $font = $element->getFont(); + $this->_writerWorksheets[$i]->_fntHashIndex[$font->getHashCode()] = $this->_writerWorkbook->_addFont($font); + } + } + } + } + } + + // initialize OLE file + $workbookStreamName = 'Workbook'; + $OLE = new PHPExcel_Shared_OLE_PPS_File(PHPExcel_Shared_OLE::Asc2Ucs($workbookStreamName)); + + // Write the worksheet streams before the global workbook stream, + // because the byte sizes of these are needed in the global workbook stream + $worksheetSizes = array(); + for ($i = 0; $i < $countSheets; ++$i) { + $this->_writerWorksheets[$i]->close(); + $worksheetSizes[] = $this->_writerWorksheets[$i]->_datasize; + } + + // add binary data for global workbook stream + $OLE->append($this->_writerWorkbook->writeWorkbook($worksheetSizes)); + + // add binary data for sheet streams + for ($i = 0; $i < $countSheets; ++$i) { + $OLE->append($this->_writerWorksheets[$i]->getData()); + } + + $this->_documentSummaryInformation = $this->_writeDocumentSummaryInformation(); + // initialize OLE Document Summary Information + if(isset($this->_documentSummaryInformation) && !empty($this->_documentSummaryInformation)){ + $OLE_DocumentSummaryInformation = new PHPExcel_Shared_OLE_PPS_File(PHPExcel_Shared_OLE::Asc2Ucs(chr(5) . 'DocumentSummaryInformation')); + $OLE_DocumentSummaryInformation->append($this->_documentSummaryInformation); + } + + $this->_summaryInformation = $this->_writeSummaryInformation(); + // initialize OLE Summary Information + if(isset($this->_summaryInformation) && !empty($this->_summaryInformation)){ + $OLE_SummaryInformation = new PHPExcel_Shared_OLE_PPS_File(PHPExcel_Shared_OLE::Asc2Ucs(chr(5) . 'SummaryInformation')); + $OLE_SummaryInformation->append($this->_summaryInformation); + } + + // define OLE Parts + $arrRootData = array($OLE); + // initialize OLE Properties file + if(isset($OLE_SummaryInformation)){ + $arrRootData[] = $OLE_SummaryInformation; + } + // initialize OLE Extended Properties file + if(isset($OLE_DocumentSummaryInformation)){ + $arrRootData[] = $OLE_DocumentSummaryInformation; + } + + $root = new PHPExcel_Shared_OLE_PPS_Root(time(), time(), $arrRootData); + // save the OLE file + $res = $root->save($pFilename); + + PHPExcel_Calculation_Functions::setReturnDateType($saveDateReturnType); + PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog($saveDebugLog); + } + + /** + * Set temporary storage directory + * + * @deprecated + * @param string $pValue Temporary storage directory + * @throws PHPExcel_Writer_Exception when directory does not exist + * @return PHPExcel_Writer_Excel5 + */ + public function setTempDir($pValue = '') { + return $this; + } + + /** + * Build the Worksheet Escher objects + * + */ + private function _buildWorksheetEschers() + { + // 1-based index to BstoreContainer + $blipIndex = 0; + $lastReducedSpId = 0; + $lastSpId = 0; + + foreach ($this->_phpExcel->getAllsheets() as $sheet) { + // sheet index + $sheetIndex = $sheet->getParent()->getIndex($sheet); + + $escher = null; + + // check if there are any shapes for this sheet + $filterRange = $sheet->getAutoFilter()->getRange(); + if (count($sheet->getDrawingCollection()) == 0 && empty($filterRange)) { + continue; + } + + // create intermediate Escher object + $escher = new PHPExcel_Shared_Escher(); + + // dgContainer + $dgContainer = new PHPExcel_Shared_Escher_DgContainer(); + + // set the drawing index (we use sheet index + 1) + $dgId = $sheet->getParent()->getIndex($sheet) + 1; + $dgContainer->setDgId($dgId); + $escher->setDgContainer($dgContainer); + + // spgrContainer + $spgrContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer(); + $dgContainer->setSpgrContainer($spgrContainer); + + // add one shape which is the group shape + $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer(); + $spContainer->setSpgr(true); + $spContainer->setSpType(0); + $spContainer->setSpId(($sheet->getParent()->getIndex($sheet) + 1) << 10); + $spgrContainer->addChild($spContainer); + + // add the shapes + + $countShapes[$sheetIndex] = 0; // count number of shapes (minus group shape), in sheet + + foreach ($sheet->getDrawingCollection() as $drawing) { + ++$blipIndex; + + ++$countShapes[$sheetIndex]; + + // add the shape + $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer(); + + // set the shape type + $spContainer->setSpType(0x004B); + // set the shape flag + $spContainer->setSpFlag(0x02); + + // set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index) + $reducedSpId = $countShapes[$sheetIndex]; + $spId = $reducedSpId + | ($sheet->getParent()->getIndex($sheet) + 1) << 10; + $spContainer->setSpId($spId); + + // keep track of last reducedSpId + $lastReducedSpId = $reducedSpId; + + // keep track of last spId + $lastSpId = $spId; + + // set the BLIP index + $spContainer->setOPT(0x4104, $blipIndex); + + // set coordinates and offsets, client anchor + $coordinates = $drawing->getCoordinates(); + $offsetX = $drawing->getOffsetX(); + $offsetY = $drawing->getOffsetY(); + $width = $drawing->getWidth(); + $height = $drawing->getHeight(); + + $twoAnchor = PHPExcel_Shared_Excel5::oneAnchor2twoAnchor($sheet, $coordinates, $offsetX, $offsetY, $width, $height); + + $spContainer->setStartCoordinates($twoAnchor['startCoordinates']); + $spContainer->setStartOffsetX($twoAnchor['startOffsetX']); + $spContainer->setStartOffsetY($twoAnchor['startOffsetY']); + $spContainer->setEndCoordinates($twoAnchor['endCoordinates']); + $spContainer->setEndOffsetX($twoAnchor['endOffsetX']); + $spContainer->setEndOffsetY($twoAnchor['endOffsetY']); + + $spgrContainer->addChild($spContainer); + } + + // AutoFilters + if(!empty($filterRange)){ + $rangeBounds = PHPExcel_Cell::rangeBoundaries($filterRange); + $iNumColStart = $rangeBounds[0][0]; + $iNumColEnd = $rangeBounds[1][0]; + + $iInc = $iNumColStart; + while($iInc <= $iNumColEnd){ + ++$countShapes[$sheetIndex]; + + // create an Drawing Object for the dropdown + $oDrawing = new PHPExcel_Worksheet_BaseDrawing(); + // get the coordinates of drawing + $cDrawing = PHPExcel_Cell::stringFromColumnIndex($iInc - 1) . $rangeBounds[0][1]; + $oDrawing->setCoordinates($cDrawing); + $oDrawing->setWorksheet($sheet); + + // add the shape + $spContainer = new PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer(); + // set the shape type + $spContainer->setSpType(0x00C9); + // set the shape flag + $spContainer->setSpFlag(0x01); + + // set the shape index (we combine 1-based sheet index and $countShapes to create unique shape index) + $reducedSpId = $countShapes[$sheetIndex]; + $spId = $reducedSpId + | ($sheet->getParent()->getIndex($sheet) + 1) << 10; + $spContainer->setSpId($spId); + + // keep track of last reducedSpId + $lastReducedSpId = $reducedSpId; + + // keep track of last spId + $lastSpId = $spId; + + $spContainer->setOPT(0x007F, 0x01040104); // Protection -> fLockAgainstGrouping + $spContainer->setOPT(0x00BF, 0x00080008); // Text -> fFitTextToShape + $spContainer->setOPT(0x01BF, 0x00010000); // Fill Style -> fNoFillHitTest + $spContainer->setOPT(0x01FF, 0x00080000); // Line Style -> fNoLineDrawDash + $spContainer->setOPT(0x03BF, 0x000A0000); // Group Shape -> fPrint + + // set coordinates and offsets, client anchor + $endCoordinates = PHPExcel_Cell::stringFromColumnIndex(PHPExcel_Cell::stringFromColumnIndex($iInc - 1)); + $endCoordinates .= $rangeBounds[0][1] + 1; + + $spContainer->setStartCoordinates($cDrawing); + $spContainer->setStartOffsetX(0); + $spContainer->setStartOffsetY(0); + $spContainer->setEndCoordinates($endCoordinates); + $spContainer->setEndOffsetX(0); + $spContainer->setEndOffsetY(0); + + $spgrContainer->addChild($spContainer); + $iInc++; + } + } + + // identifier clusters, used for workbook Escher object + $this->_IDCLs[$dgId] = $lastReducedSpId; + + // set last shape index + $dgContainer->setLastSpId($lastSpId); + + // set the Escher object + $this->_writerWorksheets[$sheetIndex]->setEscher($escher); + } + } + + /** + * Build the Escher object corresponding to the MSODRAWINGGROUP record + */ + private function _buildWorkbookEscher() + { + $escher = null; + + // any drawings in this workbook? + $found = false; + foreach ($this->_phpExcel->getAllSheets() as $sheet) { + if (count($sheet->getDrawingCollection()) > 0) { + $found = true; + break; + } + } + + // nothing to do if there are no drawings + if (!$found) { + return; + } + + // if we reach here, then there are drawings in the workbook + $escher = new PHPExcel_Shared_Escher(); + + // dggContainer + $dggContainer = new PHPExcel_Shared_Escher_DggContainer(); + $escher->setDggContainer($dggContainer); + + // set IDCLs (identifier clusters) + $dggContainer->setIDCLs($this->_IDCLs); + + // this loop is for determining maximum shape identifier of all drawing + $spIdMax = 0; + $totalCountShapes = 0; + $countDrawings = 0; + + foreach ($this->_phpExcel->getAllsheets() as $sheet) { + $sheetCountShapes = 0; // count number of shapes (minus group shape), in sheet + + if (count($sheet->getDrawingCollection()) > 0) { + ++$countDrawings; + + foreach ($sheet->getDrawingCollection() as $drawing) { + ++$sheetCountShapes; + ++$totalCountShapes; + + $spId = $sheetCountShapes + | ($this->_phpExcel->getIndex($sheet) + 1) << 10; + $spIdMax = max($spId, $spIdMax); + } + } + } + + $dggContainer->setSpIdMax($spIdMax + 1); + $dggContainer->setCDgSaved($countDrawings); + $dggContainer->setCSpSaved($totalCountShapes + $countDrawings); // total number of shapes incl. one group shapes per drawing + + // bstoreContainer + $bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer(); + $dggContainer->setBstoreContainer($bstoreContainer); + + // the BSE's (all the images) + foreach ($this->_phpExcel->getAllsheets() as $sheet) { + foreach ($sheet->getDrawingCollection() as $drawing) { + if ($drawing instanceof PHPExcel_Worksheet_Drawing) { + + $filename = $drawing->getPath(); + + list($imagesx, $imagesy, $imageFormat) = getimagesize($filename); + + switch ($imageFormat) { + + case 1: // GIF, not supported by BIFF8, we convert to PNG + $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG; + ob_start(); + imagepng(imagecreatefromgif($filename)); + $blipData = ob_get_contents(); + ob_end_clean(); + break; + + case 2: // JPEG + $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG; + $blipData = file_get_contents($filename); + break; + + case 3: // PNG + $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG; + $blipData = file_get_contents($filename); + break; + + case 6: // Windows DIB (BMP), we convert to PNG + $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG; + ob_start(); + imagepng(PHPExcel_Shared_Drawing::imagecreatefrombmp($filename)); + $blipData = ob_get_contents(); + ob_end_clean(); + break; + + default: continue 2; + + } + + $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip(); + $blip->setData($blipData); + + $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE(); + $BSE->setBlipType($blipType); + $BSE->setBlip($blip); + + $bstoreContainer->addBSE($BSE); + + } else if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) { + + switch ($drawing->getRenderingFunction()) { + + case PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG: + $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG; + $renderingFunction = 'imagejpeg'; + break; + + case PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF: + case PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG: + case PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT: + $blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG; + $renderingFunction = 'imagepng'; + break; + + } + + ob_start(); + call_user_func($renderingFunction, $drawing->getImageResource()); + $blipData = ob_get_contents(); + ob_end_clean(); + + $blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip(); + $blip->setData($blipData); + + $BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE(); + $BSE->setBlipType($blipType); + $BSE->setBlip($blip); + + $bstoreContainer->addBSE($BSE); + } + } + } + + // Set the Escher object + $this->_writerWorkbook->setEscher($escher); + } + + /** + * Build the OLE Part for DocumentSummary Information + * @return string + */ + private function _writeDocumentSummaryInformation(){ + + // offset: 0; size: 2; must be 0xFE 0xFF (UTF-16 LE byte order mark) + $data = pack('v', 0xFFFE); + // offset: 2; size: 2; + $data .= pack('v', 0x0000); + // offset: 4; size: 2; OS version + $data .= pack('v', 0x0106); + // offset: 6; size: 2; OS indicator + $data .= pack('v', 0x0002); + // offset: 8; size: 16 + $data .= pack('VVVV', 0x00, 0x00, 0x00, 0x00); + // offset: 24; size: 4; section count + $data .= pack('V', 0x0001); + + // offset: 28; size: 16; first section's class id: 02 d5 cd d5 9c 2e 1b 10 93 97 08 00 2b 2c f9 ae + $data .= pack('vvvvvvvv', 0xD502, 0xD5CD, 0x2E9C, 0x101B, 0x9793, 0x0008, 0x2C2B, 0xAEF9); + // offset: 44; size: 4; offset of the start + $data .= pack('V', 0x30); + + // SECTION + $dataSection = array(); + $dataSection_NumProps = 0; + $dataSection_Summary = ''; + $dataSection_Content = ''; + + // GKPIDDSI_CODEPAGE: CodePage + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x01), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x02), // 2 byte signed integer + 'data' => array('data' => 1252)); + $dataSection_NumProps++; + + // GKPIDDSI_CATEGORY : Category + if($this->_phpExcel->getProperties()->getCategory()){ + $dataProp = $this->_phpExcel->getProperties()->getCategory(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x02), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x1E), + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + } + // GKPIDDSI_VERSION :Version of the application that wrote the property storage + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x17), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x03), + 'data' => array('pack' => 'V', 'data' => 0x000C0000)); + $dataSection_NumProps++; + // GKPIDDSI_SCALE : FALSE + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0B), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x0B), + 'data' => array('data' => false)); + $dataSection_NumProps++; + // GKPIDDSI_LINKSDIRTY : True if any of the values for the linked properties have changed outside of the application + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x10), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x0B), + 'data' => array('data' => false)); + $dataSection_NumProps++; + // GKPIDDSI_SHAREDOC : FALSE + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x13), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x0B), + 'data' => array('data' => false)); + $dataSection_NumProps++; + // GKPIDDSI_HYPERLINKSCHANGED : True if any of the values for the _PID_LINKS (hyperlink text) have changed outside of the application + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x16), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x0B), + 'data' => array('data' => false)); + $dataSection_NumProps++; + + // GKPIDDSI_DOCSPARTS + // MS-OSHARED p75 (2.3.3.2.2.1) + // Structure is VtVecUnalignedLpstrValue (2.3.3.1.9) + // cElements + $dataProp = pack('v', 0x0001); + $dataProp .= pack('v', 0x0000); + // array of UnalignedLpstr + // cch + $dataProp .= pack('v', 0x000A); + $dataProp .= pack('v', 0x0000); + // value + $dataProp .= 'Worksheet'.chr(0); + + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0D), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x101E), + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + + // GKPIDDSI_HEADINGPAIR + // VtVecHeadingPairValue + // cElements + $dataProp = pack('v', 0x0002); + $dataProp .= pack('v', 0x0000); + // Array of vtHeadingPair + // vtUnalignedString - headingString + // stringType + $dataProp .= pack('v', 0x001E); + // padding + $dataProp .= pack('v', 0x0000); + // UnalignedLpstr + // cch + $dataProp .= pack('v', 0x0013); + $dataProp .= pack('v', 0x0000); + // value + $dataProp .= 'Feuilles de calcul'; + // vtUnalignedString - headingParts + // wType : 0x0003 = 32 bit signed integer + $dataProp .= pack('v', 0x0300); + // padding + $dataProp .= pack('v', 0x0000); + // value + $dataProp .= pack('v', 0x0100); + $dataProp .= pack('v', 0x0000); + $dataProp .= pack('v', 0x0000); + $dataProp .= pack('v', 0x0000); + + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0C), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x100C), + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + + // 4 Section Length + // 4 Property count + // 8 * $dataSection_NumProps (8 = ID (4) + OffSet(4)) + $dataSection_Content_Offset = 8 + $dataSection_NumProps * 8; + foreach ($dataSection as $dataProp){ + // Summary + $dataSection_Summary .= pack($dataProp['summary']['pack'], $dataProp['summary']['data']); + // Offset + $dataSection_Summary .= pack($dataProp['offset']['pack'], $dataSection_Content_Offset); + // DataType + $dataSection_Content .= pack($dataProp['type']['pack'], $dataProp['type']['data']); + // Data + if($dataProp['type']['data'] == 0x02){ // 2 byte signed integer + $dataSection_Content .= pack('V', $dataProp['data']['data']); + + $dataSection_Content_Offset += 4 + 4; + } + elseif($dataProp['type']['data'] == 0x03){ // 4 byte signed integer + $dataSection_Content .= pack('V', $dataProp['data']['data']); + + $dataSection_Content_Offset += 4 + 4; + } + elseif($dataProp['type']['data'] == 0x0B){ // Boolean + if($dataProp['data']['data'] == false){ + $dataSection_Content .= pack('V', 0x0000); + } else { + $dataSection_Content .= pack('V', 0x0001); + } + $dataSection_Content_Offset += 4 + 4; + } + elseif($dataProp['type']['data'] == 0x1E){ // null-terminated string prepended by dword string length + // Null-terminated string + $dataProp['data']['data'] .= chr(0); + $dataProp['data']['length'] += 1; + // Complete the string with null string for being a %4 + $dataProp['data']['length'] = $dataProp['data']['length'] + ((4 - $dataProp['data']['length'] % 4)==4 ? 0 : (4 - $dataProp['data']['length'] % 4)); + $dataProp['data']['data'] = str_pad($dataProp['data']['data'], $dataProp['data']['length'], chr(0), STR_PAD_RIGHT); + + $dataSection_Content .= pack('V', $dataProp['data']['length']); + $dataSection_Content .= $dataProp['data']['data']; + + $dataSection_Content_Offset += 4 + 4 + strlen($dataProp['data']['data']); + } + elseif($dataProp['type']['data'] == 0x40){ // Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601) + $dataSection_Content .= $dataProp['data']['data']; + + $dataSection_Content_Offset += 4 + 8; + } + else { + // Data Type Not Used at the moment + $dataSection_Content .= $dataProp['data']['data']; + + $dataSection_Content_Offset += 4 + $dataProp['data']['length']; + } + } + // Now $dataSection_Content_Offset contains the size of the content + + // section header + // offset: $secOffset; size: 4; section length + // + x Size of the content (summary + content) + $data .= pack('V', $dataSection_Content_Offset); + // offset: $secOffset+4; size: 4; property count + $data .= pack('V', $dataSection_NumProps); + // Section Summary + $data .= $dataSection_Summary; + // Section Content + $data .= $dataSection_Content; + + return $data; + } + + /** + * Build the OLE Part for Summary Information + * @return string + */ + private function _writeSummaryInformation(){ + // offset: 0; size: 2; must be 0xFE 0xFF (UTF-16 LE byte order mark) + $data = pack('v', 0xFFFE); + // offset: 2; size: 2; + $data .= pack('v', 0x0000); + // offset: 4; size: 2; OS version + $data .= pack('v', 0x0106); + // offset: 6; size: 2; OS indicator + $data .= pack('v', 0x0002); + // offset: 8; size: 16 + $data .= pack('VVVV', 0x00, 0x00, 0x00, 0x00); + // offset: 24; size: 4; section count + $data .= pack('V', 0x0001); + + // offset: 28; size: 16; first section's class id: e0 85 9f f2 f9 4f 68 10 ab 91 08 00 2b 27 b3 d9 + $data .= pack('vvvvvvvv', 0x85E0, 0xF29F, 0x4FF9, 0x1068, 0x91AB, 0x0008, 0x272B, 0xD9B3); + // offset: 44; size: 4; offset of the start + $data .= pack('V', 0x30); + + // SECTION + $dataSection = array(); + $dataSection_NumProps = 0; + $dataSection_Summary = ''; + $dataSection_Content = ''; + + // CodePage : CP-1252 + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x01), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x02), // 2 byte signed integer + 'data' => array('data' => 1252)); + $dataSection_NumProps++; + + // Title + if($this->_phpExcel->getProperties()->getTitle()){ + $dataProp = $this->_phpExcel->getProperties()->getTitle(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x02), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x1E), // null-terminated string prepended by dword string length + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + } + // Subject + if($this->_phpExcel->getProperties()->getSubject()){ + $dataProp = $this->_phpExcel->getProperties()->getSubject(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x03), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x1E), // null-terminated string prepended by dword string length + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + } + // Author (Creator) + if($this->_phpExcel->getProperties()->getCreator()){ + $dataProp = $this->_phpExcel->getProperties()->getCreator(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x04), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x1E), // null-terminated string prepended by dword string length + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + } + // Keywords + if($this->_phpExcel->getProperties()->getKeywords()){ + $dataProp = $this->_phpExcel->getProperties()->getKeywords(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x05), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x1E), // null-terminated string prepended by dword string length + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + } + // Comments (Description) + if($this->_phpExcel->getProperties()->getDescription()){ + $dataProp = $this->_phpExcel->getProperties()->getDescription(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x06), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x1E), // null-terminated string prepended by dword string length + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + } + // Last Saved By (LastModifiedBy) + if($this->_phpExcel->getProperties()->getLastModifiedBy()){ + $dataProp = $this->_phpExcel->getProperties()->getLastModifiedBy(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x08), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x1E), // null-terminated string prepended by dword string length + 'data' => array('data' => $dataProp, 'length' => strlen($dataProp))); + $dataSection_NumProps++; + } + // Created Date/Time + if($this->_phpExcel->getProperties()->getCreated()){ + $dataProp = $this->_phpExcel->getProperties()->getCreated(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0C), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x40), // Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601) + 'data' => array('data' => PHPExcel_Shared_OLE::LocalDate2OLE($dataProp))); + $dataSection_NumProps++; + } + // Modified Date/Time + if($this->_phpExcel->getProperties()->getModified()){ + $dataProp = $this->_phpExcel->getProperties()->getModified(); + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0D), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x40), // Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601) + 'data' => array('data' => PHPExcel_Shared_OLE::LocalDate2OLE($dataProp))); + $dataSection_NumProps++; + } + // Security + $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x13), + 'offset' => array('pack' => 'V'), + 'type' => array('pack' => 'V', 'data' => 0x03), // 4 byte signed integer + 'data' => array('data' => 0x00)); + $dataSection_NumProps++; + + + // 4 Section Length + // 4 Property count + // 8 * $dataSection_NumProps (8 = ID (4) + OffSet(4)) + $dataSection_Content_Offset = 8 + $dataSection_NumProps * 8; + foreach ($dataSection as $dataProp){ + // Summary + $dataSection_Summary .= pack($dataProp['summary']['pack'], $dataProp['summary']['data']); + // Offset + $dataSection_Summary .= pack($dataProp['offset']['pack'], $dataSection_Content_Offset); + // DataType + $dataSection_Content .= pack($dataProp['type']['pack'], $dataProp['type']['data']); + // Data + if($dataProp['type']['data'] == 0x02){ // 2 byte signed integer + $dataSection_Content .= pack('V', $dataProp['data']['data']); + + $dataSection_Content_Offset += 4 + 4; + } + elseif($dataProp['type']['data'] == 0x03){ // 4 byte signed integer + $dataSection_Content .= pack('V', $dataProp['data']['data']); + + $dataSection_Content_Offset += 4 + 4; + } + elseif($dataProp['type']['data'] == 0x1E){ // null-terminated string prepended by dword string length + // Null-terminated string + $dataProp['data']['data'] .= chr(0); + $dataProp['data']['length'] += 1; + // Complete the string with null string for being a %4 + $dataProp['data']['length'] = $dataProp['data']['length'] + ((4 - $dataProp['data']['length'] % 4)==4 ? 0 : (4 - $dataProp['data']['length'] % 4)); + $dataProp['data']['data'] = str_pad($dataProp['data']['data'], $dataProp['data']['length'], chr(0), STR_PAD_RIGHT); + + $dataSection_Content .= pack('V', $dataProp['data']['length']); + $dataSection_Content .= $dataProp['data']['data']; + + $dataSection_Content_Offset += 4 + 4 + strlen($dataProp['data']['data']); + } + elseif($dataProp['type']['data'] == 0x40){ // Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601) + $dataSection_Content .= $dataProp['data']['data']; + + $dataSection_Content_Offset += 4 + 8; + } + else { + // Data Type Not Used at the moment + } + } + // Now $dataSection_Content_Offset contains the size of the content + + // section header + // offset: $secOffset; size: 4; section length + // + x Size of the content (summary + content) + $data .= pack('V', $dataSection_Content_Offset); + // offset: $secOffset+4; size: 4; property count + $data .= pack('V', $dataSection_NumProps); + // Section Summary + $data .= $dataSection_Summary; + // Section Content + $data .= $dataSection_Content; + + return $data; + } +} diff --git a/PHPExcel/Writer/Excel5/BIFFwriter.php b/PHPExcel/Writer/Excel5/BIFFwriter.php new file mode 100644 index 0000000..b3e48bc --- /dev/null +++ b/PHPExcel/Writer/Excel5/BIFFwriter.php @@ -0,0 +1,255 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +// Original file header of PEAR::Spreadsheet_Excel_Writer_BIFFwriter (used as the base for this class): +// ----------------------------------------------------------------------------------------- +// * Module written/ported by Xavier Noguer <xnoguer@rezebra.com> +// * +// * The majority of this is _NOT_ my code. I simply ported it from the +// * PERL Spreadsheet::WriteExcel module. +// * +// * The author of the Spreadsheet::WriteExcel module is John McNamara +// * <jmcnamara@cpan.org> +// * +// * I _DO_ maintain this code, and John McNamara has nothing to do with the +// * porting of this code to PHP. Any questions directly related to this +// * class library should be directed to me. +// * +// * License Information: +// * +// * Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets +// * Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 2.1 of the License, or (at your option) any later version. +// * +// * This library is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library; if not, write to the Free Software +// * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// */ + + +/** + * PHPExcel_Writer_Excel5_BIFFwriter + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5_BIFFwriter +{ + /** + * The byte order of this architecture. 0 => little endian, 1 => big endian + * @var integer + */ + private static $_byte_order; + + /** + * The string containing the data of the BIFF stream + * @var string + */ + public $_data; + + /** + * The size of the data in bytes. Should be the same as strlen($this->_data) + * @var integer + */ + public $_datasize; + + /** + * The maximum length for a BIFF record (excluding record header and length field). See _addContinue() + * @var integer + * @see _addContinue() + */ + public $_limit = 8224; + + /** + * Constructor + */ + public function __construct() + { + $this->_data = ''; + $this->_datasize = 0; +// $this->_limit = 8224; + } + + /** + * Determine the byte order and store it as class data to avoid + * recalculating it for each call to new(). + * + * @return int + */ + public static function getByteOrder() + { + if (!isset(self::$_byte_order)) { + // Check if "pack" gives the required IEEE 64bit float + $teststr = pack("d", 1.2345); + $number = pack("C8", 0x8D, 0x97, 0x6E, 0x12, 0x83, 0xC0, 0xF3, 0x3F); + if ($number == $teststr) { + $byte_order = 0; // Little Endian + } elseif ($number == strrev($teststr)){ + $byte_order = 1; // Big Endian + } else { + // Give up. I'll fix this in a later version. + throw new PHPExcel_Writer_Exception("Required floating point format not supported on this platform."); + } + self::$_byte_order = $byte_order; + } + + return self::$_byte_order; + } + + /** + * General storage function + * + * @param string $data binary data to append + * @access private + */ + function _append($data) + { + if (strlen($data) - 4 > $this->_limit) { + $data = $this->_addContinue($data); + } + $this->_data .= $data; + $this->_datasize += strlen($data); + } + + /** + * General storage function like _append, but returns string instead of modifying $this->_data + * + * @param string $data binary data to write + * @return string + */ + public function writeData($data) + { + if (strlen($data) - 4 > $this->_limit) { + $data = $this->_addContinue($data); + } + $this->_datasize += strlen($data); + + return $data; + } + + /** + * Writes Excel BOF record to indicate the beginning of a stream or + * sub-stream in the BIFF file. + * + * @param integer $type Type of BIFF file to write: 0x0005 Workbook, + * 0x0010 Worksheet. + * @access private + */ + function _storeBof($type) + { + $record = 0x0809; // Record identifier (BIFF5-BIFF8) + $length = 0x0010; + + // by inspection of real files, MS Office Excel 2007 writes the following + $unknown = pack("VV", 0x000100D1, 0x00000406); + + $build = 0x0DBB; // Excel 97 + $year = 0x07CC; // Excel 97 + + $version = 0x0600; // BIFF8 + + $header = pack("vv", $record, $length); + $data = pack("vvvv", $version, $type, $build, $year); + $this->_append($header . $data . $unknown); + } + + /** + * Writes Excel EOF record to indicate the end of a BIFF stream. + * + * @access private + */ + function _storeEof() + { + $record = 0x000A; // Record identifier + $length = 0x0000; // Number of bytes to follow + + $header = pack("vv", $record, $length); + $this->_append($header); + } + + /** + * Writes Excel EOF record to indicate the end of a BIFF stream. + * + * @access private + */ + public function writeEof() + { + $record = 0x000A; // Record identifier + $length = 0x0000; // Number of bytes to follow + $header = pack("vv", $record, $length); + return $this->writeData($header); + } + + /** + * Excel limits the size of BIFF records. In Excel 5 the limit is 2084 bytes. In + * Excel 97 the limit is 8228 bytes. Records that are longer than these limits + * must be split up into CONTINUE blocks. + * + * This function takes a long BIFF record and inserts CONTINUE records as + * necessary. + * + * @param string $data The original binary data to be written + * @return string A very convenient string of continue blocks + * @access private + */ + function _addContinue($data) + { + $limit = $this->_limit; + $record = 0x003C; // Record identifier + + // The first 2080/8224 bytes remain intact. However, we have to change + // the length field of the record. + $tmp = substr($data, 0, 2) . pack("v", $limit) . substr($data, 4, $limit); + + $header = pack("vv", $record, $limit); // Headers for continue records + + // Retrieve chunks of 2080/8224 bytes +4 for the header. + $data_length = strlen($data); + for ($i = $limit + 4; $i < ($data_length - $limit); $i += $limit) { + $tmp .= $header; + $tmp .= substr($data, $i, $limit); + } + + // Retrieve the last chunk of data + $header = pack("vv", $record, strlen($data) - $i); + $tmp .= $header; + $tmp .= substr($data, $i, strlen($data) - $i); + + return $tmp; + } + +} diff --git a/PHPExcel/Writer/Excel5/Escher.php b/PHPExcel/Writer/Excel5/Escher.php new file mode 100644 index 0000000..7e9b73a --- /dev/null +++ b/PHPExcel/Writer/Excel5/Escher.php @@ -0,0 +1,537 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Shared_Escher_DggContainer_BstoreContainer + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5_Escher +{ + /** + * The object we are writing + */ + private $_object; + + /** + * The written binary data + */ + private $_data; + + /** + * Shape offsets. Positions in binary stream where a new shape record begins + * + * @var array + */ + private $_spOffsets; + + /** + * Shape types. + * + * @var array + */ + private $_spTypes; + + /** + * Constructor + * + * @param mixed + */ + public function __construct($object) + { + $this->_object = $object; + } + + /** + * Process the object to be written + */ + public function close() + { + // initialize + $this->_data = ''; + + switch (get_class($this->_object)) { + + case 'PHPExcel_Shared_Escher': + if ($dggContainer = $this->_object->getDggContainer()) { + $writer = new PHPExcel_Writer_Excel5_Escher($dggContainer); + $this->_data = $writer->close(); + } else if ($dgContainer = $this->_object->getDgContainer()) { + $writer = new PHPExcel_Writer_Excel5_Escher($dgContainer); + $this->_data = $writer->close(); + $this->_spOffsets = $writer->getSpOffsets(); + $this->_spTypes = $writer->getSpTypes(); + } + break; + + case 'PHPExcel_Shared_Escher_DggContainer': + // this is a container record + + // initialize + $innerData = ''; + + // write the dgg + $recVer = 0x0; + $recInstance = 0x0000; + $recType = 0xF006; + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + // dgg data + $dggData = + pack('VVVV' + , $this->_object->getSpIdMax() // maximum shape identifier increased by one + , $this->_object->getCDgSaved() + 1 // number of file identifier clusters increased by one + , $this->_object->getCSpSaved() + , $this->_object->getCDgSaved() // count total number of drawings saved + ); + + // add file identifier clusters (one per drawing) + $IDCLs = $this->_object->getIDCLs(); + + foreach ($IDCLs as $dgId => $maxReducedSpId) { + $dggData .= pack('VV', $dgId, $maxReducedSpId + 1); + } + + $header = pack('vvV', $recVerInstance, $recType, strlen($dggData)); + $innerData .= $header . $dggData; + + // write the bstoreContainer + if ($bstoreContainer = $this->_object->getBstoreContainer()) { + $writer = new PHPExcel_Writer_Excel5_Escher($bstoreContainer); + $innerData .= $writer->close(); + } + + // write the record + $recVer = 0xF; + $recInstance = 0x0000; + $recType = 0xF000; + $length = strlen($innerData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header . $innerData; + break; + + case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer': + // this is a container record + + // initialize + $innerData = ''; + + // treat the inner data + if ($BSECollection = $this->_object->getBSECollection()) { + foreach ($BSECollection as $BSE) { + $writer = new PHPExcel_Writer_Excel5_Escher($BSE); + $innerData .= $writer->close(); + } + } + + // write the record + $recVer = 0xF; + $recInstance = count($this->_object->getBSECollection()); + $recType = 0xF001; + $length = strlen($innerData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header . $innerData; + break; + + case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE': + // this is a semi-container record + + // initialize + $innerData = ''; + + // here we treat the inner data + if ($blip = $this->_object->getBlip()) { + $writer = new PHPExcel_Writer_Excel5_Escher($blip); + $innerData .= $writer->close(); + } + + // initialize + $data = ''; + + $btWin32 = $this->_object->getBlipType(); + $btMacOS = $this->_object->getBlipType(); + $data .= pack('CC', $btWin32, $btMacOS); + + $rgbUid = pack('VVVV', 0,0,0,0); // todo + $data .= $rgbUid; + + $tag = 0; + $size = strlen($innerData); + $cRef = 1; + $foDelay = 0; //todo + $unused1 = 0x0; + $cbName = 0x0; + $unused2 = 0x0; + $unused3 = 0x0; + $data .= pack('vVVVCCCC', $tag, $size, $cRef, $foDelay, $unused1, $cbName, $unused2, $unused3); + + $data .= $innerData; + + // write the record + $recVer = 0x2; + $recInstance = $this->_object->getBlipType(); + $recType = 0xF007; + $length = strlen($data); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header; + + $this->_data .= $data; + break; + + case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip': + // this is an atom record + + // write the record + switch ($this->_object->getParent()->getBlipType()) { + + case PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG: + // initialize + $innerData = ''; + + $rgbUid1 = pack('VVVV', 0,0,0,0); // todo + $innerData .= $rgbUid1; + + $tag = 0xFF; // todo + $innerData .= pack('C', $tag); + + $innerData .= $this->_object->getData(); + + $recVer = 0x0; + $recInstance = 0x46A; + $recType = 0xF01D; + $length = strlen($innerData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header; + + $this->_data .= $innerData; + break; + + case PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG: + // initialize + $innerData = ''; + + $rgbUid1 = pack('VVVV', 0,0,0,0); // todo + $innerData .= $rgbUid1; + + $tag = 0xFF; // todo + $innerData .= pack('C', $tag); + + $innerData .= $this->_object->getData(); + + $recVer = 0x0; + $recInstance = 0x6E0; + $recType = 0xF01E; + $length = strlen($innerData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header; + + $this->_data .= $innerData; + break; + + } + break; + + case 'PHPExcel_Shared_Escher_DgContainer': + // this is a container record + + // initialize + $innerData = ''; + + // write the dg + $recVer = 0x0; + $recInstance = $this->_object->getDgId(); + $recType = 0xF008; + $length = 8; + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + // number of shapes in this drawing (including group shape) + $countShapes = count($this->_object->getSpgrContainer()->getChildren()); + $innerData .= $header . pack('VV', $countShapes, $this->_object->getLastSpId()); + //$innerData .= $header . pack('VV', 0, 0); + + // write the spgrContainer + if ($spgrContainer = $this->_object->getSpgrContainer()) { + $writer = new PHPExcel_Writer_Excel5_Escher($spgrContainer); + $innerData .= $writer->close(); + + // get the shape offsets relative to the spgrContainer record + $spOffsets = $writer->getSpOffsets(); + $spTypes = $writer->getSpTypes(); + + // save the shape offsets relative to dgContainer + foreach ($spOffsets as & $spOffset) { + $spOffset += 24; // add length of dgContainer header data (8 bytes) plus dg data (16 bytes) + } + + $this->_spOffsets = $spOffsets; + $this->_spTypes = $spTypes; + } + + // write the record + $recVer = 0xF; + $recInstance = 0x0000; + $recType = 0xF002; + $length = strlen($innerData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header . $innerData; + break; + + case 'PHPExcel_Shared_Escher_DgContainer_SpgrContainer': + // this is a container record + + // initialize + $innerData = ''; + + // initialize spape offsets + $totalSize = 8; + $spOffsets = array(); + $spTypes = array(); + + // treat the inner data + foreach ($this->_object->getChildren() as $spContainer) { + $writer = new PHPExcel_Writer_Excel5_Escher($spContainer); + $spData = $writer->close(); + $innerData .= $spData; + + // save the shape offsets (where new shape records begin) + $totalSize += strlen($spData); + $spOffsets[] = $totalSize; + + $spTypes = array_merge($spTypes, $writer->getSpTypes()); + } + + // write the record + $recVer = 0xF; + $recInstance = 0x0000; + $recType = 0xF003; + $length = strlen($innerData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header . $innerData; + $this->_spOffsets = $spOffsets; + $this->_spTypes = $spTypes; + break; + + case 'PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer': + // initialize + $data = ''; + + // build the data + + // write group shape record, if necessary? + if ($this->_object->getSpgr()) { + $recVer = 0x1; + $recInstance = 0x0000; + $recType = 0xF009; + $length = 0x00000010; + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $data .= $header . pack('VVVV', 0,0,0,0); + } + $this->_spTypes[] = ($this->_object->getSpType()); + + // write the shape record + $recVer = 0x2; + $recInstance = $this->_object->getSpType(); // shape type + $recType = 0xF00A; + $length = 0x00000008; + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $data .= $header . pack('VV', $this->_object->getSpId(), $this->_object->getSpgr() ? 0x0005 : 0x0A00); + + + // the options + if ($this->_object->getOPTCollection()) { + $optData = ''; + + $recVer = 0x3; + $recInstance = count($this->_object->getOPTCollection()); + $recType = 0xF00B; + foreach ($this->_object->getOPTCollection() as $property => $value) { + $optData .= pack('vV', $property, $value); + } + $length = strlen($optData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + $data .= $header . $optData; + } + + // the client anchor + if ($this->_object->getStartCoordinates()) { + $clientAnchorData = ''; + + $recVer = 0x0; + $recInstance = 0x0; + $recType = 0xF010; + + // start coordinates + list($column, $row) = PHPExcel_Cell::coordinateFromString($this->_object->getStartCoordinates()); + $c1 = PHPExcel_Cell::columnIndexFromString($column) - 1; + $r1 = $row - 1; + + // start offsetX + $startOffsetX = $this->_object->getStartOffsetX(); + + // start offsetY + $startOffsetY = $this->_object->getStartOffsetY(); + + // end coordinates + list($column, $row) = PHPExcel_Cell::coordinateFromString($this->_object->getEndCoordinates()); + $c2 = PHPExcel_Cell::columnIndexFromString($column) - 1; + $r2 = $row - 1; + + // end offsetX + $endOffsetX = $this->_object->getEndOffsetX(); + + // end offsetY + $endOffsetY = $this->_object->getEndOffsetY(); + + $clientAnchorData = pack('vvvvvvvvv', $this->_object->getSpFlag(), + $c1, $startOffsetX, $r1, $startOffsetY, + $c2, $endOffsetX, $r2, $endOffsetY); + + $length = strlen($clientAnchorData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + $data .= $header . $clientAnchorData; + } + + // the client data, just empty for now + if (!$this->_object->getSpgr()) { + $clientDataData = ''; + + $recVer = 0x0; + $recInstance = 0x0; + $recType = 0xF011; + + $length = strlen($clientDataData); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + $data .= $header . $clientDataData; + } + + // write the record + $recVer = 0xF; + $recInstance = 0x0000; + $recType = 0xF004; + $length = strlen($data); + + $recVerInstance = $recVer; + $recVerInstance |= $recInstance << 4; + + $header = pack('vvV', $recVerInstance, $recType, $length); + + $this->_data = $header . $data; + break; + + } + + return $this->_data; + } + + /** + * Gets the shape offsets + * + * @return array + */ + public function getSpOffsets() + { + return $this->_spOffsets; + } + + /** + * Gets the shape types + * + * @return array + */ + public function getSpTypes() + { + return $this->_spTypes; + } + + +} diff --git a/PHPExcel/Writer/Excel5/Font.php b/PHPExcel/Writer/Excel5/Font.php new file mode 100644 index 0000000..f2dbab2 --- /dev/null +++ b/PHPExcel/Writer/Excel5/Font.php @@ -0,0 +1,165 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Excel5_Font + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5_Font +{ + /** + * Color index + * + * @var int + */ + private $_colorIndex; + + /** + * Font + * + * @var PHPExcel_Style_Font + */ + private $_font; + + /** + * Constructor + * + * @param PHPExcel_Style_Font $font + */ + public function __construct(PHPExcel_Style_Font $font = null) + { + $this->_colorIndex = 0x7FFF; + $this->_font = $font; + } + + /** + * Set the color index + * + * @param int $colorIndex + */ + public function setColorIndex($colorIndex) + { + $this->_colorIndex = $colorIndex; + } + + /** + * Get font record data + * + * @return string + */ + public function writeFont() + { + $font_outline = 0; + $font_shadow = 0; + + $icv = $this->_colorIndex; // Index to color palette + if ($this->_font->getSuperScript()) { + $sss = 1; + } else if ($this->_font->getSubScript()) { + $sss = 2; + } else { + $sss = 0; + } + $bFamily = 0; // Font family + $bCharSet = PHPExcel_Shared_Font::getCharsetFromFontName($this->_font->getName()); // Character set + + $record = 0x31; // Record identifier + $reserved = 0x00; // Reserved + $grbit = 0x00; // Font attributes + if ($this->_font->getItalic()) { + $grbit |= 0x02; + } + if ($this->_font->getStrikethrough()) { + $grbit |= 0x08; + } + if ($font_outline) { + $grbit |= 0x10; + } + if ($font_shadow) { + $grbit |= 0x20; + } + + $data = pack("vvvvvCCCC", + $this->_font->getSize() * 20, // Fontsize (in twips) + $grbit, + $icv, // Colour + self::_mapBold($this->_font->getBold()), // Font weight + $sss, // Superscript/Subscript + self::_mapUnderline($this->_font->getUnderline()), + $bFamily, + $bCharSet, + $reserved + ); + $data .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeShort($this->_font->getName()); + + $length = strlen($data); + $header = pack("vv", $record, $length); + + return($header . $data); + } + + /** + * Map to BIFF5-BIFF8 codes for bold + * + * @param boolean $bold + * @return int + */ + private static function _mapBold($bold) { + if ($bold) { + return 0x2BC; // 700 = Bold font weight + } + return 0x190; // 400 = Normal font weight + } + + /** + * Map of BIFF2-BIFF8 codes for underline styles + * @static array of int + * + */ + private static $_mapUnderline = array( PHPExcel_Style_Font::UNDERLINE_NONE => 0x00, + PHPExcel_Style_Font::UNDERLINE_SINGLE => 0x01, + PHPExcel_Style_Font::UNDERLINE_DOUBLE => 0x02, + PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING => 0x21, + PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING => 0x22, + ); + /** + * Map underline + * + * @param string + * @return int + */ + private static function _mapUnderline($underline) { + if (isset(self::$_mapUnderline[$underline])) + return self::$_mapUnderline[$underline]; + return 0x00; + } + +} diff --git a/PHPExcel/Writer/Excel5/Parser.php b/PHPExcel/Writer/Excel5/Parser.php new file mode 100644 index 0000000..04e674a --- /dev/null +++ b/PHPExcel/Writer/Excel5/Parser.php @@ -0,0 +1,1582 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +// Original file header of PEAR::Spreadsheet_Excel_Writer_Parser (used as the base for this class): +// ----------------------------------------------------------------------------------------- +// * Class for parsing Excel formulas +// * +// * License Information: +// * +// * Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets +// * Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 2.1 of the License, or (at your option) any later version. +// * +// * This library is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library; if not, write to the Free Software +// * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// */ + + +/** + * PHPExcel_Writer_Excel5_Parser + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5_Parser +{ + /** Constants */ + // Sheet title in unquoted form + // Invalid sheet title characters cannot occur in the sheet title: + // *:/\?[] + // Moreover, there are valid sheet title characters that cannot occur in unquoted form (there may be more?) + // +-% '^&<>=,;#()"{} + const REGEX_SHEET_TITLE_UNQUOTED = '[^\*\:\/\\\\\?\[\]\+\-\% \\\'\^\&\<\>\=\,\;\#\(\)\"\{\}]+'; + + // Sheet title in quoted form (without surrounding quotes) + // Invalid sheet title characters cannot occur in the sheet title: + // *:/\?[] (usual invalid sheet title characters) + // Single quote is represented as a pair '' + const REGEX_SHEET_TITLE_QUOTED = '(([^\*\:\/\\\\\?\[\]\\\'])+|(\\\'\\\')+)+'; + + /** + * The index of the character we are currently looking at + * @var integer + */ + public $_current_char; + + /** + * The token we are working on. + * @var string + */ + public $_current_token; + + /** + * The formula to parse + * @var string + */ + public $_formula; + + /** + * The character ahead of the current char + * @var string + */ + public $_lookahead; + + /** + * The parse tree to be generated + * @var string + */ + public $_parse_tree; + + /** + * Array of external sheets + * @var array + */ + public $_ext_sheets; + + /** + * Array of sheet references in the form of REF structures + * @var array + */ + public $_references; + + /** + * The class constructor + * + */ + public function __construct() + { + $this->_current_char = 0; + $this->_current_token = ''; // The token we are working on. + $this->_formula = ''; // The formula to parse. + $this->_lookahead = ''; // The character ahead of the current char. + $this->_parse_tree = ''; // The parse tree to be generated. + $this->_initializeHashes(); // Initialize the hashes: ptg's and function's ptg's + $this->_ext_sheets = array(); + $this->_references = array(); + } + + /** + * Initialize the ptg and function hashes. + * + * @access private + */ + function _initializeHashes() + { + // The Excel ptg indices + $this->ptg = array( + 'ptgExp' => 0x01, + 'ptgTbl' => 0x02, + 'ptgAdd' => 0x03, + 'ptgSub' => 0x04, + 'ptgMul' => 0x05, + 'ptgDiv' => 0x06, + 'ptgPower' => 0x07, + 'ptgConcat' => 0x08, + 'ptgLT' => 0x09, + 'ptgLE' => 0x0A, + 'ptgEQ' => 0x0B, + 'ptgGE' => 0x0C, + 'ptgGT' => 0x0D, + 'ptgNE' => 0x0E, + 'ptgIsect' => 0x0F, + 'ptgUnion' => 0x10, + 'ptgRange' => 0x11, + 'ptgUplus' => 0x12, + 'ptgUminus' => 0x13, + 'ptgPercent' => 0x14, + 'ptgParen' => 0x15, + 'ptgMissArg' => 0x16, + 'ptgStr' => 0x17, + 'ptgAttr' => 0x19, + 'ptgSheet' => 0x1A, + 'ptgEndSheet' => 0x1B, + 'ptgErr' => 0x1C, + 'ptgBool' => 0x1D, + 'ptgInt' => 0x1E, + 'ptgNum' => 0x1F, + 'ptgArray' => 0x20, + 'ptgFunc' => 0x21, + 'ptgFuncVar' => 0x22, + 'ptgName' => 0x23, + 'ptgRef' => 0x24, + 'ptgArea' => 0x25, + 'ptgMemArea' => 0x26, + 'ptgMemErr' => 0x27, + 'ptgMemNoMem' => 0x28, + 'ptgMemFunc' => 0x29, + 'ptgRefErr' => 0x2A, + 'ptgAreaErr' => 0x2B, + 'ptgRefN' => 0x2C, + 'ptgAreaN' => 0x2D, + 'ptgMemAreaN' => 0x2E, + 'ptgMemNoMemN' => 0x2F, + 'ptgNameX' => 0x39, + 'ptgRef3d' => 0x3A, + 'ptgArea3d' => 0x3B, + 'ptgRefErr3d' => 0x3C, + 'ptgAreaErr3d' => 0x3D, + 'ptgArrayV' => 0x40, + 'ptgFuncV' => 0x41, + 'ptgFuncVarV' => 0x42, + 'ptgNameV' => 0x43, + 'ptgRefV' => 0x44, + 'ptgAreaV' => 0x45, + 'ptgMemAreaV' => 0x46, + 'ptgMemErrV' => 0x47, + 'ptgMemNoMemV' => 0x48, + 'ptgMemFuncV' => 0x49, + 'ptgRefErrV' => 0x4A, + 'ptgAreaErrV' => 0x4B, + 'ptgRefNV' => 0x4C, + 'ptgAreaNV' => 0x4D, + 'ptgMemAreaNV' => 0x4E, + 'ptgMemNoMemN' => 0x4F, + 'ptgFuncCEV' => 0x58, + 'ptgNameXV' => 0x59, + 'ptgRef3dV' => 0x5A, + 'ptgArea3dV' => 0x5B, + 'ptgRefErr3dV' => 0x5C, + 'ptgAreaErr3d' => 0x5D, + 'ptgArrayA' => 0x60, + 'ptgFuncA' => 0x61, + 'ptgFuncVarA' => 0x62, + 'ptgNameA' => 0x63, + 'ptgRefA' => 0x64, + 'ptgAreaA' => 0x65, + 'ptgMemAreaA' => 0x66, + 'ptgMemErrA' => 0x67, + 'ptgMemNoMemA' => 0x68, + 'ptgMemFuncA' => 0x69, + 'ptgRefErrA' => 0x6A, + 'ptgAreaErrA' => 0x6B, + 'ptgRefNA' => 0x6C, + 'ptgAreaNA' => 0x6D, + 'ptgMemAreaNA' => 0x6E, + 'ptgMemNoMemN' => 0x6F, + 'ptgFuncCEA' => 0x78, + 'ptgNameXA' => 0x79, + 'ptgRef3dA' => 0x7A, + 'ptgArea3dA' => 0x7B, + 'ptgRefErr3dA' => 0x7C, + 'ptgAreaErr3d' => 0x7D + ); + + // Thanks to Michael Meeks and Gnumeric for the initial arg values. + // + // The following hash was generated by "function_locale.pl" in the distro. + // Refer to function_locale.pl for non-English function names. + // + // The array elements are as follow: + // ptg: The Excel function ptg code. + // args: The number of arguments that the function takes: + // >=0 is a fixed number of arguments. + // -1 is a variable number of arguments. + // class: The reference, value or array class of the function args. + // vol: The function is volatile. + // + $this->_functions = array( + // function ptg args class vol + 'COUNT' => array( 0, -1, 0, 0 ), + 'IF' => array( 1, -1, 1, 0 ), + 'ISNA' => array( 2, 1, 1, 0 ), + 'ISERROR' => array( 3, 1, 1, 0 ), + 'SUM' => array( 4, -1, 0, 0 ), + 'AVERAGE' => array( 5, -1, 0, 0 ), + 'MIN' => array( 6, -1, 0, 0 ), + 'MAX' => array( 7, -1, 0, 0 ), + 'ROW' => array( 8, -1, 0, 0 ), + 'COLUMN' => array( 9, -1, 0, 0 ), + 'NA' => array( 10, 0, 0, 0 ), + 'NPV' => array( 11, -1, 1, 0 ), + 'STDEV' => array( 12, -1, 0, 0 ), + 'DOLLAR' => array( 13, -1, 1, 0 ), + 'FIXED' => array( 14, -1, 1, 0 ), + 'SIN' => array( 15, 1, 1, 0 ), + 'COS' => array( 16, 1, 1, 0 ), + 'TAN' => array( 17, 1, 1, 0 ), + 'ATAN' => array( 18, 1, 1, 0 ), + 'PI' => array( 19, 0, 1, 0 ), + 'SQRT' => array( 20, 1, 1, 0 ), + 'EXP' => array( 21, 1, 1, 0 ), + 'LN' => array( 22, 1, 1, 0 ), + 'LOG10' => array( 23, 1, 1, 0 ), + 'ABS' => array( 24, 1, 1, 0 ), + 'INT' => array( 25, 1, 1, 0 ), + 'SIGN' => array( 26, 1, 1, 0 ), + 'ROUND' => array( 27, 2, 1, 0 ), + 'LOOKUP' => array( 28, -1, 0, 0 ), + 'INDEX' => array( 29, -1, 0, 1 ), + 'REPT' => array( 30, 2, 1, 0 ), + 'MID' => array( 31, 3, 1, 0 ), + 'LEN' => array( 32, 1, 1, 0 ), + 'VALUE' => array( 33, 1, 1, 0 ), + 'TRUE' => array( 34, 0, 1, 0 ), + 'FALSE' => array( 35, 0, 1, 0 ), + 'AND' => array( 36, -1, 0, 0 ), + 'OR' => array( 37, -1, 0, 0 ), + 'NOT' => array( 38, 1, 1, 0 ), + 'MOD' => array( 39, 2, 1, 0 ), + 'DCOUNT' => array( 40, 3, 0, 0 ), + 'DSUM' => array( 41, 3, 0, 0 ), + 'DAVERAGE' => array( 42, 3, 0, 0 ), + 'DMIN' => array( 43, 3, 0, 0 ), + 'DMAX' => array( 44, 3, 0, 0 ), + 'DSTDEV' => array( 45, 3, 0, 0 ), + 'VAR' => array( 46, -1, 0, 0 ), + 'DVAR' => array( 47, 3, 0, 0 ), + 'TEXT' => array( 48, 2, 1, 0 ), + 'LINEST' => array( 49, -1, 0, 0 ), + 'TREND' => array( 50, -1, 0, 0 ), + 'LOGEST' => array( 51, -1, 0, 0 ), + 'GROWTH' => array( 52, -1, 0, 0 ), + 'PV' => array( 56, -1, 1, 0 ), + 'FV' => array( 57, -1, 1, 0 ), + 'NPER' => array( 58, -1, 1, 0 ), + 'PMT' => array( 59, -1, 1, 0 ), + 'RATE' => array( 60, -1, 1, 0 ), + 'MIRR' => array( 61, 3, 0, 0 ), + 'IRR' => array( 62, -1, 0, 0 ), + 'RAND' => array( 63, 0, 1, 1 ), + 'MATCH' => array( 64, -1, 0, 0 ), + 'DATE' => array( 65, 3, 1, 0 ), + 'TIME' => array( 66, 3, 1, 0 ), + 'DAY' => array( 67, 1, 1, 0 ), + 'MONTH' => array( 68, 1, 1, 0 ), + 'YEAR' => array( 69, 1, 1, 0 ), + 'WEEKDAY' => array( 70, -1, 1, 0 ), + 'HOUR' => array( 71, 1, 1, 0 ), + 'MINUTE' => array( 72, 1, 1, 0 ), + 'SECOND' => array( 73, 1, 1, 0 ), + 'NOW' => array( 74, 0, 1, 1 ), + 'AREAS' => array( 75, 1, 0, 1 ), + 'ROWS' => array( 76, 1, 0, 1 ), + 'COLUMNS' => array( 77, 1, 0, 1 ), + 'OFFSET' => array( 78, -1, 0, 1 ), + 'SEARCH' => array( 82, -1, 1, 0 ), + 'TRANSPOSE' => array( 83, 1, 1, 0 ), + 'TYPE' => array( 86, 1, 1, 0 ), + 'ATAN2' => array( 97, 2, 1, 0 ), + 'ASIN' => array( 98, 1, 1, 0 ), + 'ACOS' => array( 99, 1, 1, 0 ), + 'CHOOSE' => array( 100, -1, 1, 0 ), + 'HLOOKUP' => array( 101, -1, 0, 0 ), + 'VLOOKUP' => array( 102, -1, 0, 0 ), + 'ISREF' => array( 105, 1, 0, 0 ), + 'LOG' => array( 109, -1, 1, 0 ), + 'CHAR' => array( 111, 1, 1, 0 ), + 'LOWER' => array( 112, 1, 1, 0 ), + 'UPPER' => array( 113, 1, 1, 0 ), + 'PROPER' => array( 114, 1, 1, 0 ), + 'LEFT' => array( 115, -1, 1, 0 ), + 'RIGHT' => array( 116, -1, 1, 0 ), + 'EXACT' => array( 117, 2, 1, 0 ), + 'TRIM' => array( 118, 1, 1, 0 ), + 'REPLACE' => array( 119, 4, 1, 0 ), + 'SUBSTITUTE' => array( 120, -1, 1, 0 ), + 'CODE' => array( 121, 1, 1, 0 ), + 'FIND' => array( 124, -1, 1, 0 ), + 'CELL' => array( 125, -1, 0, 1 ), + 'ISERR' => array( 126, 1, 1, 0 ), + 'ISTEXT' => array( 127, 1, 1, 0 ), + 'ISNUMBER' => array( 128, 1, 1, 0 ), + 'ISBLANK' => array( 129, 1, 1, 0 ), + 'T' => array( 130, 1, 0, 0 ), + 'N' => array( 131, 1, 0, 0 ), + 'DATEVALUE' => array( 140, 1, 1, 0 ), + 'TIMEVALUE' => array( 141, 1, 1, 0 ), + 'SLN' => array( 142, 3, 1, 0 ), + 'SYD' => array( 143, 4, 1, 0 ), + 'DDB' => array( 144, -1, 1, 0 ), + 'INDIRECT' => array( 148, -1, 1, 1 ), + 'CALL' => array( 150, -1, 1, 0 ), + 'CLEAN' => array( 162, 1, 1, 0 ), + 'MDETERM' => array( 163, 1, 2, 0 ), + 'MINVERSE' => array( 164, 1, 2, 0 ), + 'MMULT' => array( 165, 2, 2, 0 ), + 'IPMT' => array( 167, -1, 1, 0 ), + 'PPMT' => array( 168, -1, 1, 0 ), + 'COUNTA' => array( 169, -1, 0, 0 ), + 'PRODUCT' => array( 183, -1, 0, 0 ), + 'FACT' => array( 184, 1, 1, 0 ), + 'DPRODUCT' => array( 189, 3, 0, 0 ), + 'ISNONTEXT' => array( 190, 1, 1, 0 ), + 'STDEVP' => array( 193, -1, 0, 0 ), + 'VARP' => array( 194, -1, 0, 0 ), + 'DSTDEVP' => array( 195, 3, 0, 0 ), + 'DVARP' => array( 196, 3, 0, 0 ), + 'TRUNC' => array( 197, -1, 1, 0 ), + 'ISLOGICAL' => array( 198, 1, 1, 0 ), + 'DCOUNTA' => array( 199, 3, 0, 0 ), + 'USDOLLAR' => array( 204, -1, 1, 0 ), + 'FINDB' => array( 205, -1, 1, 0 ), + 'SEARCHB' => array( 206, -1, 1, 0 ), + 'REPLACEB' => array( 207, 4, 1, 0 ), + 'LEFTB' => array( 208, -1, 1, 0 ), + 'RIGHTB' => array( 209, -1, 1, 0 ), + 'MIDB' => array( 210, 3, 1, 0 ), + 'LENB' => array( 211, 1, 1, 0 ), + 'ROUNDUP' => array( 212, 2, 1, 0 ), + 'ROUNDDOWN' => array( 213, 2, 1, 0 ), + 'ASC' => array( 214, 1, 1, 0 ), + 'DBCS' => array( 215, 1, 1, 0 ), + 'RANK' => array( 216, -1, 0, 0 ), + 'ADDRESS' => array( 219, -1, 1, 0 ), + 'DAYS360' => array( 220, -1, 1, 0 ), + 'TODAY' => array( 221, 0, 1, 1 ), + 'VDB' => array( 222, -1, 1, 0 ), + 'MEDIAN' => array( 227, -1, 0, 0 ), + 'SUMPRODUCT' => array( 228, -1, 2, 0 ), + 'SINH' => array( 229, 1, 1, 0 ), + 'COSH' => array( 230, 1, 1, 0 ), + 'TANH' => array( 231, 1, 1, 0 ), + 'ASINH' => array( 232, 1, 1, 0 ), + 'ACOSH' => array( 233, 1, 1, 0 ), + 'ATANH' => array( 234, 1, 1, 0 ), + 'DGET' => array( 235, 3, 0, 0 ), + 'INFO' => array( 244, 1, 1, 1 ), + 'DB' => array( 247, -1, 1, 0 ), + 'FREQUENCY' => array( 252, 2, 0, 0 ), + 'ERROR.TYPE' => array( 261, 1, 1, 0 ), + 'REGISTER.ID' => array( 267, -1, 1, 0 ), + 'AVEDEV' => array( 269, -1, 0, 0 ), + 'BETADIST' => array( 270, -1, 1, 0 ), + 'GAMMALN' => array( 271, 1, 1, 0 ), + 'BETAINV' => array( 272, -1, 1, 0 ), + 'BINOMDIST' => array( 273, 4, 1, 0 ), + 'CHIDIST' => array( 274, 2, 1, 0 ), + 'CHIINV' => array( 275, 2, 1, 0 ), + 'COMBIN' => array( 276, 2, 1, 0 ), + 'CONFIDENCE' => array( 277, 3, 1, 0 ), + 'CRITBINOM' => array( 278, 3, 1, 0 ), + 'EVEN' => array( 279, 1, 1, 0 ), + 'EXPONDIST' => array( 280, 3, 1, 0 ), + 'FDIST' => array( 281, 3, 1, 0 ), + 'FINV' => array( 282, 3, 1, 0 ), + 'FISHER' => array( 283, 1, 1, 0 ), + 'FISHERINV' => array( 284, 1, 1, 0 ), + 'FLOOR' => array( 285, 2, 1, 0 ), + 'GAMMADIST' => array( 286, 4, 1, 0 ), + 'GAMMAINV' => array( 287, 3, 1, 0 ), + 'CEILING' => array( 288, 2, 1, 0 ), + 'HYPGEOMDIST' => array( 289, 4, 1, 0 ), + 'LOGNORMDIST' => array( 290, 3, 1, 0 ), + 'LOGINV' => array( 291, 3, 1, 0 ), + 'NEGBINOMDIST' => array( 292, 3, 1, 0 ), + 'NORMDIST' => array( 293, 4, 1, 0 ), + 'NORMSDIST' => array( 294, 1, 1, 0 ), + 'NORMINV' => array( 295, 3, 1, 0 ), + 'NORMSINV' => array( 296, 1, 1, 0 ), + 'STANDARDIZE' => array( 297, 3, 1, 0 ), + 'ODD' => array( 298, 1, 1, 0 ), + 'PERMUT' => array( 299, 2, 1, 0 ), + 'POISSON' => array( 300, 3, 1, 0 ), + 'TDIST' => array( 301, 3, 1, 0 ), + 'WEIBULL' => array( 302, 4, 1, 0 ), + 'SUMXMY2' => array( 303, 2, 2, 0 ), + 'SUMX2MY2' => array( 304, 2, 2, 0 ), + 'SUMX2PY2' => array( 305, 2, 2, 0 ), + 'CHITEST' => array( 306, 2, 2, 0 ), + 'CORREL' => array( 307, 2, 2, 0 ), + 'COVAR' => array( 308, 2, 2, 0 ), + 'FORECAST' => array( 309, 3, 2, 0 ), + 'FTEST' => array( 310, 2, 2, 0 ), + 'INTERCEPT' => array( 311, 2, 2, 0 ), + 'PEARSON' => array( 312, 2, 2, 0 ), + 'RSQ' => array( 313, 2, 2, 0 ), + 'STEYX' => array( 314, 2, 2, 0 ), + 'SLOPE' => array( 315, 2, 2, 0 ), + 'TTEST' => array( 316, 4, 2, 0 ), + 'PROB' => array( 317, -1, 2, 0 ), + 'DEVSQ' => array( 318, -1, 0, 0 ), + 'GEOMEAN' => array( 319, -1, 0, 0 ), + 'HARMEAN' => array( 320, -1, 0, 0 ), + 'SUMSQ' => array( 321, -1, 0, 0 ), + 'KURT' => array( 322, -1, 0, 0 ), + 'SKEW' => array( 323, -1, 0, 0 ), + 'ZTEST' => array( 324, -1, 0, 0 ), + 'LARGE' => array( 325, 2, 0, 0 ), + 'SMALL' => array( 326, 2, 0, 0 ), + 'QUARTILE' => array( 327, 2, 0, 0 ), + 'PERCENTILE' => array( 328, 2, 0, 0 ), + 'PERCENTRANK' => array( 329, -1, 0, 0 ), + 'MODE' => array( 330, -1, 2, 0 ), + 'TRIMMEAN' => array( 331, 2, 0, 0 ), + 'TINV' => array( 332, 2, 1, 0 ), + 'CONCATENATE' => array( 336, -1, 1, 0 ), + 'POWER' => array( 337, 2, 1, 0 ), + 'RADIANS' => array( 342, 1, 1, 0 ), + 'DEGREES' => array( 343, 1, 1, 0 ), + 'SUBTOTAL' => array( 344, -1, 0, 0 ), + 'SUMIF' => array( 345, -1, 0, 0 ), + 'COUNTIF' => array( 346, 2, 0, 0 ), + 'COUNTBLANK' => array( 347, 1, 0, 0 ), + 'ISPMT' => array( 350, 4, 1, 0 ), + 'DATEDIF' => array( 351, 3, 1, 0 ), + 'DATESTRING' => array( 352, 1, 1, 0 ), + 'NUMBERSTRING' => array( 353, 2, 1, 0 ), + 'ROMAN' => array( 354, -1, 1, 0 ), + 'GETPIVOTDATA' => array( 358, -1, 0, 0 ), + 'HYPERLINK' => array( 359, -1, 1, 0 ), + 'PHONETIC' => array( 360, 1, 0, 0 ), + 'AVERAGEA' => array( 361, -1, 0, 0 ), + 'MAXA' => array( 362, -1, 0, 0 ), + 'MINA' => array( 363, -1, 0, 0 ), + 'STDEVPA' => array( 364, -1, 0, 0 ), + 'VARPA' => array( 365, -1, 0, 0 ), + 'STDEVA' => array( 366, -1, 0, 0 ), + 'VARA' => array( 367, -1, 0, 0 ), + 'BAHTTEXT' => array( 368, 1, 0, 0 ), + ); + } + + /** + * Convert a token to the proper ptg value. + * + * @access private + * @param mixed $token The token to convert. + * @return mixed the converted token on success + */ + function _convert($token) + { + if (preg_match("/\"([^\"]|\"\"){0,255}\"/", $token)) { + return $this->_convertString($token); + + } elseif (is_numeric($token)) { + return $this->_convertNumber($token); + + // match references like A1 or $A$1 + } elseif (preg_match('/^\$?([A-Ia-i]?[A-Za-z])\$?(\d+)$/',$token)) { + return $this->_convertRef2d($token); + + // match external references like Sheet1!A1 or Sheet1:Sheet2!A1 or Sheet1!$A$1 or Sheet1:Sheet2!$A$1 + } elseif (preg_match("/^" . self::REGEX_SHEET_TITLE_UNQUOTED . "(\:" . self::REGEX_SHEET_TITLE_UNQUOTED . ")?\!\\$?[A-Ia-i]?[A-Za-z]\\$?(\d+)$/u",$token)) { + return $this->_convertRef3d($token); + + // match external references like 'Sheet1'!A1 or 'Sheet1:Sheet2'!A1 or 'Sheet1'!$A$1 or 'Sheet1:Sheet2'!$A$1 + } elseif (preg_match("/^'" . self::REGEX_SHEET_TITLE_QUOTED . "(\:" . self::REGEX_SHEET_TITLE_QUOTED . ")?'\!\\$?[A-Ia-i]?[A-Za-z]\\$?(\d+)$/u",$token)) { + return $this->_convertRef3d($token); + + // match ranges like A1:B2 or $A$1:$B$2 + } elseif (preg_match('/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)\:(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/', $token)) { + return $this->_convertRange2d($token); + + // match external ranges like Sheet1!A1:B2 or Sheet1:Sheet2!A1:B2 or Sheet1!$A$1:$B$2 or Sheet1:Sheet2!$A$1:$B$2 + } elseif (preg_match("/^" . self::REGEX_SHEET_TITLE_UNQUOTED . "(\:" . self::REGEX_SHEET_TITLE_UNQUOTED . ")?\!\\$?([A-Ia-i]?[A-Za-z])?\\$?(\d+)\:\\$?([A-Ia-i]?[A-Za-z])?\\$?(\d+)$/u",$token)) { + return $this->_convertRange3d($token); + + // match external ranges like 'Sheet1'!A1:B2 or 'Sheet1:Sheet2'!A1:B2 or 'Sheet1'!$A$1:$B$2 or 'Sheet1:Sheet2'!$A$1:$B$2 + } elseif (preg_match("/^'" . self::REGEX_SHEET_TITLE_QUOTED . "(\:" . self::REGEX_SHEET_TITLE_QUOTED . ")?'\!\\$?([A-Ia-i]?[A-Za-z])?\\$?(\d+)\:\\$?([A-Ia-i]?[A-Za-z])?\\$?(\d+)$/u",$token)) { + return $this->_convertRange3d($token); + + // operators (including parentheses) + } elseif (isset($this->ptg[$token])) { + return pack("C", $this->ptg[$token]); + + // match error codes + } elseif (preg_match("/^#[A-Z0\/]{3,5}[!?]{1}$/", $token) or $token == '#N/A') { + return $this->_convertError($token); + + // commented so argument number can be processed correctly. See toReversePolish(). + /*elseif (preg_match("/[A-Z0-9\xc0-\xdc\.]+/",$token)) + { + return($this->_convertFunction($token,$this->_func_args)); + }*/ + + // if it's an argument, ignore the token (the argument remains) + } elseif ($token == 'arg') { + return ''; + } + + // TODO: use real error codes + throw new PHPExcel_Writer_Exception("Unknown token $token"); + } + + /** + * Convert a number token to ptgInt or ptgNum + * + * @access private + * @param mixed $num an integer or double for conversion to its ptg value + */ + function _convertNumber($num) + { + // Integer in the range 0..2**16-1 + if ((preg_match("/^\d+$/", $num)) and ($num <= 65535)) { + return pack("Cv", $this->ptg['ptgInt'], $num); + } else { // A float + if (PHPExcel_Writer_Excel5_BIFFwriter::getByteOrder()) { // if it's Big Endian + $num = strrev($num); + } + return pack("Cd", $this->ptg['ptgNum'], $num); + } + } + + /** + * Convert a string token to ptgStr + * + * @access private + * @param string $string A string for conversion to its ptg value. + * @return mixed the converted token on success + */ + function _convertString($string) + { + // chop away beggining and ending quotes + $string = substr($string, 1, strlen($string) - 2); + if (strlen($string) > 255) { + throw new PHPExcel_Writer_Exception("String is too long"); + } + + return pack('C', $this->ptg['ptgStr']) . PHPExcel_Shared_String::UTF8toBIFF8UnicodeShort($string); + } + + /** + * Convert a function to a ptgFunc or ptgFuncVarV depending on the number of + * args that it takes. + * + * @access private + * @param string $token The name of the function for convertion to ptg value. + * @param integer $num_args The number of arguments the function receives. + * @return string The packed ptg for the function + */ + function _convertFunction($token, $num_args) + { + $args = $this->_functions[$token][1]; +// $volatile = $this->_functions[$token][3]; + + // Fixed number of args eg. TIME($i,$j,$k). + if ($args >= 0) { + return pack("Cv", $this->ptg['ptgFuncV'], $this->_functions[$token][0]); + } + // Variable number of args eg. SUM($i,$j,$k, ..). + if ($args == -1) { + return pack("CCv", $this->ptg['ptgFuncVarV'], $num_args, $this->_functions[$token][0]); + } + } + + /** + * Convert an Excel range such as A1:D4 to a ptgRefV. + * + * @access private + * @param string $range An Excel range in the A1:A2 + * @param int $class + */ + function _convertRange2d($range, $class=0) + { + + // TODO: possible class value 0,1,2 check Formula.pm + // Split the range into 2 cell refs + if (preg_match('/^(\$)?([A-Ia-i]?[A-Za-z])(\$)?(\d+)\:(\$)?([A-Ia-i]?[A-Za-z])(\$)?(\d+)$/', $range)) { + list($cell1, $cell2) = explode(':', $range); + } else { + // TODO: use real error codes + throw new PHPExcel_Writer_Exception("Unknown range separator"); + } + + // Convert the cell references + list($row1, $col1) = $this->_cellToPackedRowcol($cell1); + list($row2, $col2) = $this->_cellToPackedRowcol($cell2); + + // The ptg value depends on the class of the ptg. + if ($class == 0) { + $ptgArea = pack("C", $this->ptg['ptgArea']); + } elseif ($class == 1) { + $ptgArea = pack("C", $this->ptg['ptgAreaV']); + } elseif ($class == 2) { + $ptgArea = pack("C", $this->ptg['ptgAreaA']); + } else { + // TODO: use real error codes + throw new PHPExcel_Writer_Exception("Unknown class $class"); + } + return $ptgArea . $row1 . $row2 . $col1. $col2; + } + + /** + * Convert an Excel 3d range such as "Sheet1!A1:D4" or "Sheet1:Sheet2!A1:D4" to + * a ptgArea3d. + * + * @access private + * @param string $token An Excel range in the Sheet1!A1:A2 format. + * @return mixed The packed ptgArea3d token on success. + */ + function _convertRange3d($token) + { +// $class = 0; // formulas like Sheet1!$A$1:$A$2 in list type data validation need this class (0x3B) + + // Split the ref at the ! symbol + list($ext_ref, $range) = explode('!', $token); + + // Convert the external reference part (different for BIFF8) + $ext_ref = $this->_getRefIndex($ext_ref); + + // Split the range into 2 cell refs + list($cell1, $cell2) = explode(':', $range); + + // Convert the cell references + if (preg_match("/^(\\$)?[A-Ia-i]?[A-Za-z](\\$)?(\d+)$/", $cell1)) { + list($row1, $col1) = $this->_cellToPackedRowcol($cell1); + list($row2, $col2) = $this->_cellToPackedRowcol($cell2); + } else { // It's a rows range (like 26:27) + list($row1, $col1, $row2, $col2) = $this->_rangeToPackedRange($cell1.':'.$cell2); + } + + // The ptg value depends on the class of the ptg. +// if ($class == 0) { + $ptgArea = pack("C", $this->ptg['ptgArea3d']); +// } elseif ($class == 1) { +// $ptgArea = pack("C", $this->ptg['ptgArea3dV']); +// } elseif ($class == 2) { +// $ptgArea = pack("C", $this->ptg['ptgArea3dA']); +// } else { +// throw new PHPExcel_Writer_Exception("Unknown class $class"); +// } + + return $ptgArea . $ext_ref . $row1 . $row2 . $col1. $col2; + } + + /** + * Convert an Excel reference such as A1, $B2, C$3 or $D$4 to a ptgRefV. + * + * @access private + * @param string $cell An Excel cell reference + * @return string The cell in packed() format with the corresponding ptg + */ + function _convertRef2d($cell) + { +// $class = 2; // as far as I know, this is magick. + + // Convert the cell reference + $cell_array = $this->_cellToPackedRowcol($cell); + list($row, $col) = $cell_array; + + // The ptg value depends on the class of the ptg. +// if ($class == 0) { +// $ptgRef = pack("C", $this->ptg['ptgRef']); +// } elseif ($class == 1) { +// $ptgRef = pack("C", $this->ptg['ptgRefV']); +// } elseif ($class == 2) { + $ptgRef = pack("C", $this->ptg['ptgRefA']); +// } else { +// // TODO: use real error codes +// throw new PHPExcel_Writer_Exception("Unknown class $class"); +// } + return $ptgRef.$row.$col; + } + + /** + * Convert an Excel 3d reference such as "Sheet1!A1" or "Sheet1:Sheet2!A1" to a + * ptgRef3d. + * + * @access private + * @param string $cell An Excel cell reference + * @return mixed The packed ptgRef3d token on success. + */ + function _convertRef3d($cell) + { +// $class = 2; // as far as I know, this is magick. + + // Split the ref at the ! symbol + list($ext_ref, $cell) = explode('!', $cell); + + // Convert the external reference part (different for BIFF8) + $ext_ref = $this->_getRefIndex($ext_ref); + + // Convert the cell reference part + list($row, $col) = $this->_cellToPackedRowcol($cell); + + // The ptg value depends on the class of the ptg. +// if ($class == 0) { +// $ptgRef = pack("C", $this->ptg['ptgRef3d']); +// } elseif ($class == 1) { +// $ptgRef = pack("C", $this->ptg['ptgRef3dV']); +// } elseif ($class == 2) { + $ptgRef = pack("C", $this->ptg['ptgRef3dA']); +// } else { +// throw new PHPExcel_Writer_Exception("Unknown class $class"); +// } + + return $ptgRef . $ext_ref. $row . $col; + } + + /** + * Convert an error code to a ptgErr + * + * @access private + * @param string $errorCode The error code for conversion to its ptg value + * @return string The error code ptgErr + */ + function _convertError($errorCode) + { + switch ($errorCode) { + case '#NULL!': return pack("C", 0x00); + case '#DIV/0!': return pack("C", 0x07); + case '#VALUE!': return pack("C", 0x0F); + case '#REF!': return pack("C", 0x17); + case '#NAME?': return pack("C", 0x1D); + case '#NUM!': return pack("C", 0x24); + case '#N/A': return pack("C", 0x2A); + } + return pack("C", 0xFF); + } + + /** + * Convert the sheet name part of an external reference, for example "Sheet1" or + * "Sheet1:Sheet2", to a packed structure. + * + * @access private + * @param string $ext_ref The name of the external reference + * @return string The reference index in packed() format + */ + function _packExtRef($ext_ref) + { + $ext_ref = preg_replace("/^'/", '', $ext_ref); // Remove leading ' if any. + $ext_ref = preg_replace("/'$/", '', $ext_ref); // Remove trailing ' if any. + + // Check if there is a sheet range eg., Sheet1:Sheet2. + if (preg_match("/:/", $ext_ref)) { + list($sheet_name1, $sheet_name2) = explode(':', $ext_ref); + + $sheet1 = $this->_getSheetIndex($sheet_name1); + if ($sheet1 == -1) { + throw new PHPExcel_Writer_Exception("Unknown sheet name $sheet_name1 in formula"); + } + $sheet2 = $this->_getSheetIndex($sheet_name2); + if ($sheet2 == -1) { + throw new PHPExcel_Writer_Exception("Unknown sheet name $sheet_name2 in formula"); + } + + // Reverse max and min sheet numbers if necessary + if ($sheet1 > $sheet2) { + list($sheet1, $sheet2) = array($sheet2, $sheet1); + } + } else { // Single sheet name only. + $sheet1 = $this->_getSheetIndex($ext_ref); + if ($sheet1 == -1) { + throw new PHPExcel_Writer_Exception("Unknown sheet name $ext_ref in formula"); + } + $sheet2 = $sheet1; + } + + // References are stored relative to 0xFFFF. + $offset = -1 - $sheet1; + + return pack('vdvv', $offset, 0x00, $sheet1, $sheet2); + } + + /** + * Look up the REF index that corresponds to an external sheet name + * (or range). If it doesn't exist yet add it to the workbook's references + * array. It assumes all sheet names given must exist. + * + * @access private + * @param string $ext_ref The name of the external reference + * @return mixed The reference index in packed() format on success + */ + function _getRefIndex($ext_ref) + { + $ext_ref = preg_replace("/^'/", '', $ext_ref); // Remove leading ' if any. + $ext_ref = preg_replace("/'$/", '', $ext_ref); // Remove trailing ' if any. + $ext_ref = str_replace('\'\'', '\'', $ext_ref); // Replace escaped '' with ' + + // Check if there is a sheet range eg., Sheet1:Sheet2. + if (preg_match("/:/", $ext_ref)) { + list($sheet_name1, $sheet_name2) = explode(':', $ext_ref); + + $sheet1 = $this->_getSheetIndex($sheet_name1); + if ($sheet1 == -1) { + throw new PHPExcel_Writer_Exception("Unknown sheet name $sheet_name1 in formula"); + } + $sheet2 = $this->_getSheetIndex($sheet_name2); + if ($sheet2 == -1) { + throw new PHPExcel_Writer_Exception("Unknown sheet name $sheet_name2 in formula"); + } + + // Reverse max and min sheet numbers if necessary + if ($sheet1 > $sheet2) { + list($sheet1, $sheet2) = array($sheet2, $sheet1); + } + } else { // Single sheet name only. + $sheet1 = $this->_getSheetIndex($ext_ref); + if ($sheet1 == -1) { + throw new PHPExcel_Writer_Exception("Unknown sheet name $ext_ref in formula"); + } + $sheet2 = $sheet1; + } + + // assume all references belong to this document + $supbook_index = 0x00; + $ref = pack('vvv', $supbook_index, $sheet1, $sheet2); + $total_references = count($this->_references); + $index = -1; + for ($i = 0; $i < $total_references; ++$i) { + if ($ref == $this->_references[$i]) { + $index = $i; + break; + } + } + // if REF was not found add it to references array + if ($index == -1) { + $this->_references[$total_references] = $ref; + $index = $total_references; + } + + return pack('v', $index); + } + + /** + * Look up the index that corresponds to an external sheet name. The hash of + * sheet names is updated by the addworksheet() method of the + * PHPExcel_Writer_Excel5_Workbook class. + * + * @access private + * @param string $sheet_name Sheet name + * @return integer The sheet index, -1 if the sheet was not found + */ + function _getSheetIndex($sheet_name) + { + if (!isset($this->_ext_sheets[$sheet_name])) { + return -1; + } else { + return $this->_ext_sheets[$sheet_name]; + } + } + + /** + * This method is used to update the array of sheet names. It is + * called by the addWorksheet() method of the + * PHPExcel_Writer_Excel5_Workbook class. + * + * @access public + * @see PHPExcel_Writer_Excel5_Workbook::addWorksheet() + * @param string $name The name of the worksheet being added + * @param integer $index The index of the worksheet being added + */ + function setExtSheet($name, $index) + { + $this->_ext_sheets[$name] = $index; + } + + /** + * pack() row and column into the required 3 or 4 byte format. + * + * @access private + * @param string $cell The Excel cell reference to be packed + * @return array Array containing the row and column in packed() format + */ + function _cellToPackedRowcol($cell) + { + $cell = strtoupper($cell); + list($row, $col, $row_rel, $col_rel) = $this->_cellToRowcol($cell); + if ($col >= 256) { + throw new PHPExcel_Writer_Exception("Column in: $cell greater than 255"); + } + if ($row >= 65536) { + throw new PHPExcel_Writer_Exception("Row in: $cell greater than 65536 "); + } + + // Set the high bits to indicate if row or col are relative. + $col |= $col_rel << 14; + $col |= $row_rel << 15; + $col = pack('v', $col); + + $row = pack('v', $row); + + return array($row, $col); + } + + /** + * pack() row range into the required 3 or 4 byte format. + * Just using maximum col/rows, which is probably not the correct solution + * + * @access private + * @param string $range The Excel range to be packed + * @return array Array containing (row1,col1,row2,col2) in packed() format + */ + function _rangeToPackedRange($range) + { + preg_match('/(\$)?(\d+)\:(\$)?(\d+)/', $range, $match); + // return absolute rows if there is a $ in the ref + $row1_rel = empty($match[1]) ? 1 : 0; + $row1 = $match[2]; + $row2_rel = empty($match[3]) ? 1 : 0; + $row2 = $match[4]; + // Convert 1-index to zero-index + --$row1; + --$row2; + // Trick poor inocent Excel + $col1 = 0; + $col2 = 65535; // FIXME: maximum possible value for Excel 5 (change this!!!) + + // FIXME: this changes for BIFF8 + if (($row1 >= 65536) or ($row2 >= 65536)) { + throw new PHPExcel_Writer_Exception("Row in: $range greater than 65536 "); + } + + // Set the high bits to indicate if rows are relative. + $col1 |= $row1_rel << 15; + $col2 |= $row2_rel << 15; + $col1 = pack('v', $col1); + $col2 = pack('v', $col2); + + $row1 = pack('v', $row1); + $row2 = pack('v', $row2); + + return array($row1, $col1, $row2, $col2); + } + + /** + * Convert an Excel cell reference such as A1 or $B2 or C$3 or $D$4 to a zero + * indexed row and column number. Also returns two (0,1) values to indicate + * whether the row or column are relative references. + * + * @access private + * @param string $cell The Excel cell reference in A1 format. + * @return array + */ + function _cellToRowcol($cell) + { + preg_match('/(\$)?([A-I]?[A-Z])(\$)?(\d+)/',$cell,$match); + // return absolute column if there is a $ in the ref + $col_rel = empty($match[1]) ? 1 : 0; + $col_ref = $match[2]; + $row_rel = empty($match[3]) ? 1 : 0; + $row = $match[4]; + + // Convert base26 column string to a number. + $expn = strlen($col_ref) - 1; + $col = 0; + $col_ref_length = strlen($col_ref); + for ($i = 0; $i < $col_ref_length; ++$i) { + $col += (ord($col_ref{$i}) - 64) * pow(26, $expn); + --$expn; + } + + // Convert 1-index to zero-index + --$row; + --$col; + + return array($row, $col, $row_rel, $col_rel); + } + + /** + * Advance to the next valid token. + * + * @access private + */ + function _advance() + { + $i = $this->_current_char; + $formula_length = strlen($this->_formula); + // eat up white spaces + if ($i < $formula_length) { + while ($this->_formula{$i} == " ") { + ++$i; + } + + if ($i < ($formula_length - 1)) { + $this->_lookahead = $this->_formula{$i+1}; + } + $token = ''; + } + + while ($i < $formula_length) { + $token .= $this->_formula{$i}; + + if ($i < ($formula_length - 1)) { + $this->_lookahead = $this->_formula{$i+1}; + } else { + $this->_lookahead = ''; + } + + if ($this->_match($token) != '') { + //if ($i < strlen($this->_formula) - 1) { + // $this->_lookahead = $this->_formula{$i+1}; + //} + $this->_current_char = $i + 1; + $this->_current_token = $token; + return 1; + } + + if ($i < ($formula_length - 2)) { + $this->_lookahead = $this->_formula{$i+2}; + } else { // if we run out of characters _lookahead becomes empty + $this->_lookahead = ''; + } + ++$i; + } + //die("Lexical error ".$this->_current_char); + } + + /** + * Checks if it's a valid token. + * + * @access private + * @param mixed $token The token to check. + * @return mixed The checked token or false on failure + */ + function _match($token) + { + switch($token) { + case "+": + case "-": + case "*": + case "/": + case "(": + case ")": + case ",": + case ";": + case ">=": + case "<=": + case "=": + case "<>": + case "^": + case "&": + case "%": + return $token; + break; + case ">": + if ($this->_lookahead == '=') { // it's a GE token + break; + } + return $token; + break; + case "<": + // it's a LE or a NE token + if (($this->_lookahead == '=') or ($this->_lookahead == '>')) { + break; + } + return $token; + break; + default: + // if it's a reference A1 or $A$1 or $A1 or A$1 + if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/',$token) and + !preg_match("/[0-9]/",$this->_lookahead) and + ($this->_lookahead != ':') and ($this->_lookahead != '.') and + ($this->_lookahead != '!')) + { + return $token; + } + // If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1 or Sheet1!$A$1 or Sheet1:Sheet2!$A$1) + elseif (preg_match("/^" . self::REGEX_SHEET_TITLE_UNQUOTED . "(\:" . self::REGEX_SHEET_TITLE_UNQUOTED . ")?\!\\$?[A-Ia-i]?[A-Za-z]\\$?[0-9]+$/u",$token) and + !preg_match("/[0-9]/",$this->_lookahead) and + ($this->_lookahead != ':') and ($this->_lookahead != '.')) + { + return $token; + } + // If it's an external reference ('Sheet1'!A1 or 'Sheet1:Sheet2'!A1 or 'Sheet1'!$A$1 or 'Sheet1:Sheet2'!$A$1) + elseif (preg_match("/^'" . self::REGEX_SHEET_TITLE_QUOTED . "(\:" . self::REGEX_SHEET_TITLE_QUOTED . ")?'\!\\$?[A-Ia-i]?[A-Za-z]\\$?[0-9]+$/u",$token) and + !preg_match("/[0-9]/",$this->_lookahead) and + ($this->_lookahead != ':') and ($this->_lookahead != '.')) + { + return $token; + } + // if it's a range A1:A2 or $A$1:$A$2 + elseif (preg_match('/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/', $token) and + !preg_match("/[0-9]/",$this->_lookahead)) + { + return $token; + } + // If it's an external range like Sheet1!A1:B2 or Sheet1:Sheet2!A1:B2 or Sheet1!$A$1:$B$2 or Sheet1:Sheet2!$A$1:$B$2 + elseif (preg_match("/^" . self::REGEX_SHEET_TITLE_UNQUOTED . "(\:" . self::REGEX_SHEET_TITLE_UNQUOTED . ")?\!\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+:\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+$/u",$token) and + !preg_match("/[0-9]/",$this->_lookahead)) + { + return $token; + } + // If it's an external range like 'Sheet1'!A1:B2 or 'Sheet1:Sheet2'!A1:B2 or 'Sheet1'!$A$1:$B$2 or 'Sheet1:Sheet2'!$A$1:$B$2 + elseif (preg_match("/^'" . self::REGEX_SHEET_TITLE_QUOTED . "(\:" . self::REGEX_SHEET_TITLE_QUOTED . ")?'\!\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+:\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+$/u",$token) and + !preg_match("/[0-9]/",$this->_lookahead)) + { + return $token; + } + // If it's a number (check that it's not a sheet name or range) + elseif (is_numeric($token) and + (!is_numeric($token.$this->_lookahead) or ($this->_lookahead == '')) and + ($this->_lookahead != '!') and ($this->_lookahead != ':')) + { + return $token; + } + // If it's a string (of maximum 255 characters) + elseif (preg_match("/\"([^\"]|\"\"){0,255}\"/",$token) and $this->_lookahead != '"' and (substr_count($token, '"')%2 == 0)) + { + return $token; + } + // If it's an error code + elseif (preg_match("/^#[A-Z0\/]{3,5}[!?]{1}$/", $token) or $token == '#N/A') + { + return $token; + } + // if it's a function call + elseif (preg_match("/^[A-Z0-9\xc0-\xdc\.]+$/i",$token) and ($this->_lookahead == "(")) + { + return $token; + } + // It's an argument of some description (e.g. a named range), + // precise nature yet to be determined + elseif(substr($token,-1) == ')') { + return $token; + } + return ''; + } + } + + /** + * The parsing method. It parses a formula. + * + * @access public + * @param string $formula The formula to parse, without the initial equal + * sign (=). + * @return mixed true on success + */ + function parse($formula) + { + $this->_current_char = 0; + $this->_formula = $formula; + $this->_lookahead = isset($formula{1}) ? $formula{1} : ''; + $this->_advance(); + $this->_parse_tree = $this->_condition(); + return true; + } + + /** + * It parses a condition. It assumes the following rule: + * Cond -> Expr [(">" | "<") Expr] + * + * @access private + * @return mixed The parsed ptg'd tree on success + */ + function _condition() + { + $result = $this->_expression(); + if ($this->_current_token == "<") { + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgLT', $result, $result2); + } elseif ($this->_current_token == ">") { + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgGT', $result, $result2); + } elseif ($this->_current_token == "<=") { + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgLE', $result, $result2); + } elseif ($this->_current_token == ">=") { + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgGE', $result, $result2); + } elseif ($this->_current_token == "=") { + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgEQ', $result, $result2); + } elseif ($this->_current_token == "<>") { + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgNE', $result, $result2); + } elseif ($this->_current_token == "&") { + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgConcat', $result, $result2); + } + return $result; + } + + /** + * It parses a expression. It assumes the following rule: + * Expr -> Term [("+" | "-") Term] + * -> "string" + * -> "-" Term : Negative value + * -> "+" Term : Positive value + * -> Error code + * + * @access private + * @return mixed The parsed ptg'd tree on success + */ + function _expression() + { + // If it's a string return a string node + if (preg_match("/\"([^\"]|\"\"){0,255}\"/", $this->_current_token)) { + $tmp = str_replace('""', '"', $this->_current_token); + if (($tmp == '"') || ($tmp == '')) $tmp = '""'; // Trap for "" that has been used for an empty string + $result = $this->_createTree($tmp, '', ''); + $this->_advance(); + return $result; + // If it's an error code + } elseif (preg_match("/^#[A-Z0\/]{3,5}[!?]{1}$/", $this->_current_token) or $this->_current_token == '#N/A'){ + $result = $this->_createTree($this->_current_token, 'ptgErr', ''); + $this->_advance(); + return $result; + // If it's a negative value + } elseif ($this->_current_token == "-") { + // catch "-" Term + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgUminus', $result2, ''); + return $result; + // If it's a positive value + } elseif ($this->_current_token == "+") { + // catch "+" Term + $this->_advance(); + $result2 = $this->_expression(); + $result = $this->_createTree('ptgUplus', $result2, ''); + return $result; + } + $result = $this->_term(); + while (($this->_current_token == "+") or + ($this->_current_token == "-") or + ($this->_current_token == "^")) { + /**/ + if ($this->_current_token == "+") { + $this->_advance(); + $result2 = $this->_term(); + $result = $this->_createTree('ptgAdd', $result, $result2); + } elseif ($this->_current_token == "-") { + $this->_advance(); + $result2 = $this->_term(); + $result = $this->_createTree('ptgSub', $result, $result2); + } else { + $this->_advance(); + $result2 = $this->_term(); + $result = $this->_createTree('ptgPower', $result, $result2); + } + } + return $result; + } + + /** + * This function just introduces a ptgParen element in the tree, so that Excel + * doesn't get confused when working with a parenthesized formula afterwards. + * + * @access private + * @see _fact() + * @return array The parsed ptg'd tree + */ + function _parenthesizedExpression() + { + $result = $this->_createTree('ptgParen', $this->_expression(), ''); + return $result; + } + + /** + * It parses a term. It assumes the following rule: + * Term -> Fact [("*" | "/") Fact] + * + * @access private + * @return mixed The parsed ptg'd tree on success + */ + function _term() + { + $result = $this->_fact(); + while (($this->_current_token == "*") or + ($this->_current_token == "/")) { + /**/ + if ($this->_current_token == "*") { + $this->_advance(); + $result2 = $this->_fact(); + $result = $this->_createTree('ptgMul', $result, $result2); + } else { + $this->_advance(); + $result2 = $this->_fact(); + $result = $this->_createTree('ptgDiv', $result, $result2); + } + } + return $result; + } + + /** + * It parses a factor. It assumes the following rule: + * Fact -> ( Expr ) + * | CellRef + * | CellRange + * | Number + * | Function + * + * @access private + * @return mixed The parsed ptg'd tree on success + */ + function _fact() + { + if ($this->_current_token == "(") { + $this->_advance(); // eat the "(" + $result = $this->_parenthesizedExpression(); + if ($this->_current_token != ")") { + throw new PHPExcel_Writer_Exception("')' token expected."); + } + $this->_advance(); // eat the ")" + return $result; + } + // if it's a reference + if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/',$this->_current_token)) + { + $result = $this->_createTree($this->_current_token, '', ''); + $this->_advance(); + return $result; + } + // If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1 or Sheet1!$A$1 or Sheet1:Sheet2!$A$1) + elseif (preg_match("/^" . self::REGEX_SHEET_TITLE_UNQUOTED . "(\:" . self::REGEX_SHEET_TITLE_UNQUOTED . ")?\!\\$?[A-Ia-i]?[A-Za-z]\\$?[0-9]+$/u",$this->_current_token)) + { + $result = $this->_createTree($this->_current_token, '', ''); + $this->_advance(); + return $result; + } + // If it's an external reference ('Sheet1'!A1 or 'Sheet1:Sheet2'!A1 or 'Sheet1'!$A$1 or 'Sheet1:Sheet2'!$A$1) + elseif (preg_match("/^'" . self::REGEX_SHEET_TITLE_QUOTED . "(\:" . self::REGEX_SHEET_TITLE_QUOTED . ")?'\!\\$?[A-Ia-i]?[A-Za-z]\\$?[0-9]+$/u",$this->_current_token)) + { + $result = $this->_createTree($this->_current_token, '', ''); + $this->_advance(); + return $result; + } + // if it's a range A1:B2 or $A$1:$B$2 + elseif (preg_match('/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/',$this->_current_token) or + preg_match('/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+\.\.(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/',$this->_current_token)) + { + // must be an error? + $result = $this->_createTree($this->_current_token, '', ''); + $this->_advance(); + return $result; + } + // If it's an external range (Sheet1!A1:B2 or Sheet1:Sheet2!A1:B2 or Sheet1!$A$1:$B$2 or Sheet1:Sheet2!$A$1:$B$2) + elseif (preg_match("/^" . self::REGEX_SHEET_TITLE_UNQUOTED . "(\:" . self::REGEX_SHEET_TITLE_UNQUOTED . ")?\!\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+:\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+$/u",$this->_current_token)) + { + // must be an error? + //$result = $this->_current_token; + $result = $this->_createTree($this->_current_token, '', ''); + $this->_advance(); + return $result; + } + // If it's an external range ('Sheet1'!A1:B2 or 'Sheet1'!A1:B2 or 'Sheet1'!$A$1:$B$2 or 'Sheet1'!$A$1:$B$2) + elseif (preg_match("/^'" . self::REGEX_SHEET_TITLE_QUOTED . "(\:" . self::REGEX_SHEET_TITLE_QUOTED . ")?'\!\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+:\\$?([A-Ia-i]?[A-Za-z])?\\$?[0-9]+$/u",$this->_current_token)) + { + // must be an error? + //$result = $this->_current_token; + $result = $this->_createTree($this->_current_token, '', ''); + $this->_advance(); + return $result; + } + // If it's a number or a percent + elseif (is_numeric($this->_current_token)) + { + if($this->_lookahead == '%'){ + $result = $this->_createTree('ptgPercent', $this->_current_token, ''); + } else { + $result = $this->_createTree($this->_current_token, '', ''); + } + $this->_advance(); + return $result; + } + // if it's a function call + elseif (preg_match("/^[A-Z0-9\xc0-\xdc\.]+$/i",$this->_current_token)) + { + $result = $this->_func(); + return $result; + } + throw new PHPExcel_Writer_Exception("Syntax error: ".$this->_current_token. + ", lookahead: ".$this->_lookahead. + ", current char: ".$this->_current_char); + } + + /** + * It parses a function call. It assumes the following rule: + * Func -> ( Expr [,Expr]* ) + * + * @access private + * @return mixed The parsed ptg'd tree on success + */ + function _func() + { + $num_args = 0; // number of arguments received + $function = strtoupper($this->_current_token); + $result = ''; // initialize result + $this->_advance(); + $this->_advance(); // eat the "(" + while ($this->_current_token != ')') { + /**/ + if ($num_args > 0) { + if ($this->_current_token == "," or + $this->_current_token == ";") + { + $this->_advance(); // eat the "," or ";" + } else { + throw new PHPExcel_Writer_Exception("Syntax error: comma expected in ". + "function $function, arg #{$num_args}"); + } + $result2 = $this->_condition(); + $result = $this->_createTree('arg', $result, $result2); + } else { // first argument + $result2 = $this->_condition(); + $result = $this->_createTree('arg', '', $result2); + } + ++$num_args; + } + if (!isset($this->_functions[$function])) { + throw new PHPExcel_Writer_Exception("Function $function() doesn't exist"); + } + $args = $this->_functions[$function][1]; + // If fixed number of args eg. TIME($i,$j,$k). Check that the number of args is valid. + if (($args >= 0) and ($args != $num_args)) { + throw new PHPExcel_Writer_Exception("Incorrect number of arguments in function $function() "); + } + + $result = $this->_createTree($function, $result, $num_args); + $this->_advance(); // eat the ")" + return $result; + } + + /** + * Creates a tree. In fact an array which may have one or two arrays (sub-trees) + * as elements. + * + * @access private + * @param mixed $value The value of this node. + * @param mixed $left The left array (sub-tree) or a final node. + * @param mixed $right The right array (sub-tree) or a final node. + * @return array A tree + */ + function _createTree($value, $left, $right) + { + return array('value' => $value, 'left' => $left, 'right' => $right); + } + + /** + * Builds a string containing the tree in reverse polish notation (What you + * would use in a HP calculator stack). + * The following tree: + * + * + + * / \ + * 2 3 + * + * produces: "23+" + * + * The following tree: + * + * + + * / \ + * 3 * + * / \ + * 6 A1 + * + * produces: "36A1*+" + * + * In fact all operands, functions, references, etc... are written as ptg's + * + * @access public + * @param array $tree The optional tree to convert. + * @return string The tree in reverse polish notation + */ + function toReversePolish($tree = array()) + { + $polish = ""; // the string we are going to return + if (empty($tree)) { // If it's the first call use _parse_tree + $tree = $this->_parse_tree; + } + + if (is_array($tree['left'])) { + $converted_tree = $this->toReversePolish($tree['left']); + $polish .= $converted_tree; + } elseif ($tree['left'] != '') { // It's a final node + $converted_tree = $this->_convert($tree['left']); + $polish .= $converted_tree; + } + if (is_array($tree['right'])) { + $converted_tree = $this->toReversePolish($tree['right']); + $polish .= $converted_tree; + } elseif ($tree['right'] != '') { // It's a final node + $converted_tree = $this->_convert($tree['right']); + $polish .= $converted_tree; + } + // if it's a function convert it here (so we can set it's arguments) + if (preg_match("/^[A-Z0-9\xc0-\xdc\.]+$/",$tree['value']) and + !preg_match('/^([A-Ia-i]?[A-Za-z])(\d+)$/',$tree['value']) and + !preg_match("/^[A-Ia-i]?[A-Za-z](\d+)\.\.[A-Ia-i]?[A-Za-z](\d+)$/",$tree['value']) and + !is_numeric($tree['value']) and + !isset($this->ptg[$tree['value']])) + { + // left subtree for a function is always an array. + if ($tree['left'] != '') { + $left_tree = $this->toReversePolish($tree['left']); + } else { + $left_tree = ''; + } + // add it's left subtree and return. + return $left_tree.$this->_convertFunction($tree['value'], $tree['right']); + } else { + $converted_tree = $this->_convert($tree['value']); + } + $polish .= $converted_tree; + return $polish; + } + +} diff --git a/PHPExcel/Writer/Excel5/Workbook.php b/PHPExcel/Writer/Excel5/Workbook.php new file mode 100644 index 0000000..e14bcba --- /dev/null +++ b/PHPExcel/Writer/Excel5/Workbook.php @@ -0,0 +1,1450 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +// Original file header of PEAR::Spreadsheet_Excel_Writer_Workbook (used as the base for this class): +// ----------------------------------------------------------------------------------------- +// /* +// * Module written/ported by Xavier Noguer <xnoguer@rezebra.com> +// * +// * The majority of this is _NOT_ my code. I simply ported it from the +// * PERL Spreadsheet::WriteExcel module. +// * +// * The author of the Spreadsheet::WriteExcel module is John McNamara +// * <jmcnamara@cpan.org> +// * +// * I _DO_ maintain this code, and John McNamara has nothing to do with the +// * porting of this code to PHP. Any questions directly related to this +// * class library should be directed to me. +// * +// * License Information: +// * +// * Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets +// * Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 2.1 of the License, or (at your option) any later version. +// * +// * This library is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library; if not, write to the Free Software +// * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// */ + + +/** + * PHPExcel_Writer_Excel5_Workbook + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5_Workbook extends PHPExcel_Writer_Excel5_BIFFwriter +{ + /** + * Formula parser + * + * @var PHPExcel_Writer_Excel5_Parser + */ + private $_parser; + + /** + * The BIFF file size for the workbook. + * @var integer + * @see _calcSheetOffsets() + */ + public $_biffsize; + + /** + * XF Writers + * @var PHPExcel_Writer_Excel5_Xf[] + */ + private $_xfWriters = array(); + + /** + * Array containing the colour palette + * @var array + */ + public $_palette; + + /** + * The codepage indicates the text encoding used for strings + * @var integer + */ + public $_codepage; + + /** + * The country code used for localization + * @var integer + */ + public $_country_code; + + /** + * Workbook + * @var PHPExcel + */ + private $_phpExcel; + + /** + * Fonts writers + * + * @var PHPExcel_Writer_Excel5_Font[] + */ + private $_fontWriters = array(); + + /** + * Added fonts. Maps from font's hash => index in workbook + * + * @var array + */ + private $_addedFonts = array(); + + /** + * Shared number formats + * + * @var array + */ + private $_numberFormats = array(); + + /** + * Added number formats. Maps from numberFormat's hash => index in workbook + * + * @var array + */ + private $_addedNumberFormats = array(); + + /** + * Sizes of the binary worksheet streams + * + * @var array + */ + private $_worksheetSizes = array(); + + /** + * Offsets of the binary worksheet streams relative to the start of the global workbook stream + * + * @var array + */ + private $_worksheetOffsets = array(); + + /** + * Total number of shared strings in workbook + * + * @var int + */ + private $_str_total; + + /** + * Number of unique shared strings in workbook + * + * @var int + */ + private $_str_unique; + + /** + * Array of unique shared strings in workbook + * + * @var array + */ + private $_str_table; + + /** + * Color cache + */ + private $_colors; + + /** + * Escher object corresponding to MSODRAWINGGROUP + * + * @var PHPExcel_Shared_Escher + */ + private $_escher; + + + /** + * Class constructor + * + * @param PHPExcel $phpExcel The Workbook + * @param int &$str_total Total number of strings + * @param int &$str_unique Total number of unique strings + * @param array &$str_table String Table + * @param array &$colors Colour Table + * @param mixed $parser The formula parser created for the Workbook + */ + public function __construct(PHPExcel $phpExcel = null, + &$str_total, &$str_unique, &$str_table, &$colors, + $parser ) + { + // It needs to call its parent's constructor explicitly + parent::__construct(); + + $this->_parser = $parser; + $this->_biffsize = 0; + $this->_palette = array(); + $this->_country_code = -1; + + $this->_str_total = &$str_total; + $this->_str_unique = &$str_unique; + $this->_str_table = &$str_table; + $this->_colors = &$colors; + $this->_setPaletteXl97(); + + $this->_phpExcel = $phpExcel; + + // set BIFFwriter limit for CONTINUE records + // $this->_limit = 8224; + $this->_codepage = 0x04B0; + + // Add empty sheets and Build color cache + $countSheets = $phpExcel->getSheetCount(); + for ($i = 0; $i < $countSheets; ++$i) { + $phpSheet = $phpExcel->getSheet($i); + + $this->_parser->setExtSheet($phpSheet->getTitle(), $i); // Register worksheet name with parser + + $supbook_index = 0x00; + $ref = pack('vvv', $supbook_index, $i, $i); + $this->_parser->_references[] = $ref; // Register reference with parser + + // Sheet tab colors? + if ($phpSheet->isTabColorSet()) { + $this->_addColor($phpSheet->getTabColor()->getRGB()); + } + } + + } + + /** + * Add a new XF writer + * + * @param PHPExcel_Style + * @param boolean Is it a style XF? + * @return int Index to XF record + */ + public function addXfWriter($style, $isStyleXf = false) + { + $xfWriter = new PHPExcel_Writer_Excel5_Xf($style); + $xfWriter->setIsStyleXf($isStyleXf); + + // Add the font if not already added + $fontIndex = $this->_addFont($style->getFont()); + + // Assign the font index to the xf record + $xfWriter->setFontIndex($fontIndex); + + // Background colors, best to treat these after the font so black will come after white in custom palette + $xfWriter->setFgColor($this->_addColor($style->getFill()->getStartColor()->getRGB())); + $xfWriter->setBgColor($this->_addColor($style->getFill()->getEndColor()->getRGB())); + $xfWriter->setBottomColor($this->_addColor($style->getBorders()->getBottom()->getColor()->getRGB())); + $xfWriter->setTopColor($this->_addColor($style->getBorders()->getTop()->getColor()->getRGB())); + $xfWriter->setRightColor($this->_addColor($style->getBorders()->getRight()->getColor()->getRGB())); + $xfWriter->setLeftColor($this->_addColor($style->getBorders()->getLeft()->getColor()->getRGB())); + $xfWriter->setDiagColor($this->_addColor($style->getBorders()->getDiagonal()->getColor()->getRGB())); + + // Add the number format if it is not a built-in one and not already added + if ($style->getNumberFormat()->getBuiltInFormatCode() === false) { + $numberFormatHashCode = $style->getNumberFormat()->getHashCode(); + + if (isset($this->_addedNumberFormats[$numberFormatHashCode])) { + $numberFormatIndex = $this->_addedNumberFormats[$numberFormatHashCode]; + } else { + $numberFormatIndex = 164 + count($this->_numberFormats); + $this->_numberFormats[$numberFormatIndex] = $style->getNumberFormat(); + $this->_addedNumberFormats[$numberFormatHashCode] = $numberFormatIndex; + } + } else { + $numberFormatIndex = (int) $style->getNumberFormat()->getBuiltInFormatCode(); + } + + // Assign the number format index to xf record + $xfWriter->setNumberFormatIndex($numberFormatIndex); + + $this->_xfWriters[] = $xfWriter; + + $xfIndex = count($this->_xfWriters) - 1; + return $xfIndex; + } + + /** + * Add a font to added fonts + * + * @param PHPExcel_Style_Font $font + * @return int Index to FONT record + */ + public function _addFont(PHPExcel_Style_Font $font) + { + $fontHashCode = $font->getHashCode(); + if(isset($this->_addedFonts[$fontHashCode])){ + $fontIndex = $this->_addedFonts[$fontHashCode]; + } else { + $countFonts = count($this->_fontWriters); + $fontIndex = ($countFonts < 4) ? $countFonts : $countFonts + 1; + + $fontWriter = new PHPExcel_Writer_Excel5_Font($font); + $fontWriter->setColorIndex($this->_addColor($font->getColor()->getRGB())); + $this->_fontWriters[] = $fontWriter; + + $this->_addedFonts[$fontHashCode] = $fontIndex; + } + return $fontIndex; + } + + /** + * Alter color palette adding a custom color + * + * @param string $rgb E.g. 'FF00AA' + * @return int Color index + */ + private function _addColor($rgb) { + if (!isset($this->_colors[$rgb])) { + if (count($this->_colors) < 57) { + // then we add a custom color altering the palette + $colorIndex = 8 + count($this->_colors); + $this->_palette[$colorIndex] = + array( + hexdec(substr($rgb, 0, 2)), + hexdec(substr($rgb, 2, 2)), + hexdec(substr($rgb, 4)), + 0 + ); + $this->_colors[$rgb] = $colorIndex; + } else { + // no room for more custom colors, just map to black + $colorIndex = 0; + } + } else { + // fetch already added custom color + $colorIndex = $this->_colors[$rgb]; + } + + return $colorIndex; + } + + /** + * Sets the colour palette to the Excel 97+ default. + * + * @access private + */ + function _setPaletteXl97() + { + $this->_palette = array( + 0x08 => array(0x00, 0x00, 0x00, 0x00), + 0x09 => array(0xff, 0xff, 0xff, 0x00), + 0x0A => array(0xff, 0x00, 0x00, 0x00), + 0x0B => array(0x00, 0xff, 0x00, 0x00), + 0x0C => array(0x00, 0x00, 0xff, 0x00), + 0x0D => array(0xff, 0xff, 0x00, 0x00), + 0x0E => array(0xff, 0x00, 0xff, 0x00), + 0x0F => array(0x00, 0xff, 0xff, 0x00), + 0x10 => array(0x80, 0x00, 0x00, 0x00), + 0x11 => array(0x00, 0x80, 0x00, 0x00), + 0x12 => array(0x00, 0x00, 0x80, 0x00), + 0x13 => array(0x80, 0x80, 0x00, 0x00), + 0x14 => array(0x80, 0x00, 0x80, 0x00), + 0x15 => array(0x00, 0x80, 0x80, 0x00), + 0x16 => array(0xc0, 0xc0, 0xc0, 0x00), + 0x17 => array(0x80, 0x80, 0x80, 0x00), + 0x18 => array(0x99, 0x99, 0xff, 0x00), + 0x19 => array(0x99, 0x33, 0x66, 0x00), + 0x1A => array(0xff, 0xff, 0xcc, 0x00), + 0x1B => array(0xcc, 0xff, 0xff, 0x00), + 0x1C => array(0x66, 0x00, 0x66, 0x00), + 0x1D => array(0xff, 0x80, 0x80, 0x00), + 0x1E => array(0x00, 0x66, 0xcc, 0x00), + 0x1F => array(0xcc, 0xcc, 0xff, 0x00), + 0x20 => array(0x00, 0x00, 0x80, 0x00), + 0x21 => array(0xff, 0x00, 0xff, 0x00), + 0x22 => array(0xff, 0xff, 0x00, 0x00), + 0x23 => array(0x00, 0xff, 0xff, 0x00), + 0x24 => array(0x80, 0x00, 0x80, 0x00), + 0x25 => array(0x80, 0x00, 0x00, 0x00), + 0x26 => array(0x00, 0x80, 0x80, 0x00), + 0x27 => array(0x00, 0x00, 0xff, 0x00), + 0x28 => array(0x00, 0xcc, 0xff, 0x00), + 0x29 => array(0xcc, 0xff, 0xff, 0x00), + 0x2A => array(0xcc, 0xff, 0xcc, 0x00), + 0x2B => array(0xff, 0xff, 0x99, 0x00), + 0x2C => array(0x99, 0xcc, 0xff, 0x00), + 0x2D => array(0xff, 0x99, 0xcc, 0x00), + 0x2E => array(0xcc, 0x99, 0xff, 0x00), + 0x2F => array(0xff, 0xcc, 0x99, 0x00), + 0x30 => array(0x33, 0x66, 0xff, 0x00), + 0x31 => array(0x33, 0xcc, 0xcc, 0x00), + 0x32 => array(0x99, 0xcc, 0x00, 0x00), + 0x33 => array(0xff, 0xcc, 0x00, 0x00), + 0x34 => array(0xff, 0x99, 0x00, 0x00), + 0x35 => array(0xff, 0x66, 0x00, 0x00), + 0x36 => array(0x66, 0x66, 0x99, 0x00), + 0x37 => array(0x96, 0x96, 0x96, 0x00), + 0x38 => array(0x00, 0x33, 0x66, 0x00), + 0x39 => array(0x33, 0x99, 0x66, 0x00), + 0x3A => array(0x00, 0x33, 0x00, 0x00), + 0x3B => array(0x33, 0x33, 0x00, 0x00), + 0x3C => array(0x99, 0x33, 0x00, 0x00), + 0x3D => array(0x99, 0x33, 0x66, 0x00), + 0x3E => array(0x33, 0x33, 0x99, 0x00), + 0x3F => array(0x33, 0x33, 0x33, 0x00), + ); + } + + /** + * Assemble worksheets into a workbook and send the BIFF data to an OLE + * storage. + * + * @param array $pWorksheetSizes The sizes in bytes of the binary worksheet streams + * @return string Binary data for workbook stream + */ + public function writeWorkbook($pWorksheetSizes = null) + { + $this->_worksheetSizes = $pWorksheetSizes; + + // Calculate the number of selected worksheet tabs and call the finalization + // methods for each worksheet + $total_worksheets = $this->_phpExcel->getSheetCount(); + + // Add part 1 of the Workbook globals, what goes before the SHEET records + $this->_storeBof(0x0005); + $this->_writeCodepage(); + $this->_writeWindow1(); + + $this->_writeDatemode(); + $this->_writeAllFonts(); + $this->_writeAllNumFormats(); + $this->_writeAllXfs(); + $this->_writeAllStyles(); + $this->_writePalette(); + + // Prepare part 3 of the workbook global stream, what goes after the SHEET records + $part3 = ''; + if ($this->_country_code != -1) { + $part3 .= $this->_writeCountry(); + } + $part3 .= $this->_writeRecalcId(); + + $part3 .= $this->_writeSupbookInternal(); + /* TODO: store external SUPBOOK records and XCT and CRN records + in case of external references for BIFF8 */ + $part3 .= $this->_writeExternsheetBiff8(); + $part3 .= $this->_writeAllDefinedNamesBiff8(); + $part3 .= $this->_writeMsoDrawingGroup(); + $part3 .= $this->_writeSharedStringsTable(); + + $part3 .= $this->writeEof(); + + // Add part 2 of the Workbook globals, the SHEET records + $this->_calcSheetOffsets(); + for ($i = 0; $i < $total_worksheets; ++$i) { + $this->_writeBoundsheet($this->_phpExcel->getSheet($i), $this->_worksheetOffsets[$i]); + } + + // Add part 3 of the Workbook globals + $this->_data .= $part3; + + return $this->_data; + } + + /** + * Calculate offsets for Worksheet BOF records. + * + * @access private + */ + function _calcSheetOffsets() + { + $boundsheet_length = 10; // fixed length for a BOUNDSHEET record + + // size of Workbook globals part 1 + 3 + $offset = $this->_datasize; + + // add size of Workbook globals part 2, the length of the SHEET records + $total_worksheets = count($this->_phpExcel->getAllSheets()); + foreach ($this->_phpExcel->getWorksheetIterator() as $sheet) { + $offset += $boundsheet_length + strlen(PHPExcel_Shared_String::UTF8toBIFF8UnicodeShort($sheet->getTitle())); + } + + // add the sizes of each of the Sheet substreams, respectively + for ($i = 0; $i < $total_worksheets; ++$i) { + $this->_worksheetOffsets[$i] = $offset; + $offset += $this->_worksheetSizes[$i]; + } + $this->_biffsize = $offset; + } + + /** + * Store the Excel FONT records. + */ + private function _writeAllFonts() + { + foreach ($this->_fontWriters as $fontWriter) { + $this->_append($fontWriter->writeFont()); + } + } + + /** + * Store user defined numerical formats i.e. FORMAT records + */ + private function _writeAllNumFormats() + { + foreach ($this->_numberFormats as $numberFormatIndex => $numberFormat) { + $this->_writeNumFormat($numberFormat->getFormatCode(), $numberFormatIndex); + } + } + + /** + * Write all XF records. + */ + private function _writeAllXfs() + { + foreach ($this->_xfWriters as $xfWriter) { + $this->_append($xfWriter->writeXf()); + } + } + + /** + * Write all STYLE records. + */ + private function _writeAllStyles() + { + $this->_writeStyle(); + } + + /** + * Write the EXTERNCOUNT and EXTERNSHEET records. These are used as indexes for + * the NAME records. + */ + private function _writeExterns() + { + $countSheets = $this->_phpExcel->getSheetCount(); + // Create EXTERNCOUNT with number of worksheets + $this->_writeExterncount($countSheets); + + // Create EXTERNSHEET for each worksheet + for ($i = 0; $i < $countSheets; ++$i) { + $this->_writeExternsheet($this->_phpExcel->getSheet($i)->getTitle()); + } + } + + /** + * Write the NAME record to define the print area and the repeat rows and cols. + */ + private function _writeNames() + { + // total number of sheets + $total_worksheets = $this->_phpExcel->getSheetCount(); + + // Create the print area NAME records + for ($i = 0; $i < $total_worksheets; ++$i) { + $sheetSetup = $this->_phpExcel->getSheet($i)->getPageSetup(); + // Write a Name record if the print area has been defined + if ($sheetSetup->isPrintAreaSet()) { + // Print area + $printArea = PHPExcel_Cell::splitRange($sheetSetup->getPrintArea()); + $printArea = $printArea[0]; + $printArea[0] = PHPExcel_Cell::coordinateFromString($printArea[0]); + $printArea[1] = PHPExcel_Cell::coordinateFromString($printArea[1]); + + $print_rowmin = $printArea[0][1] - 1; + $print_rowmax = $printArea[1][1] - 1; + $print_colmin = PHPExcel_Cell::columnIndexFromString($printArea[0][0]) - 1; + $print_colmax = PHPExcel_Cell::columnIndexFromString($printArea[1][0]) - 1; + + $this->_writeNameShort( + $i, // sheet index + 0x06, // NAME type + $print_rowmin, + $print_rowmax, + $print_colmin, + $print_colmax + ); + } + } + + // Create the print title NAME records + for ($i = 0; $i < $total_worksheets; ++$i) { + $sheetSetup = $this->_phpExcel->getSheet($i)->getPageSetup(); + + // simultaneous repeatColumns repeatRows + if ($sheetSetup->isColumnsToRepeatAtLeftSet() && $sheetSetup->isRowsToRepeatAtTopSet()) { + $repeat = $sheetSetup->getColumnsToRepeatAtLeft(); + $colmin = PHPExcel_Cell::columnIndexFromString($repeat[0]) - 1; + $colmax = PHPExcel_Cell::columnIndexFromString($repeat[1]) - 1; + + $repeat = $sheetSetup->getRowsToRepeatAtTop(); + $rowmin = $repeat[0] - 1; + $rowmax = $repeat[1] - 1; + + $this->_writeNameLong( + $i, // sheet index + 0x07, // NAME type + $rowmin, + $rowmax, + $colmin, + $colmax + ); + + // (exclusive) either repeatColumns or repeatRows + } else if ($sheetSetup->isColumnsToRepeatAtLeftSet() || $sheetSetup->isRowsToRepeatAtTopSet()) { + + // Columns to repeat + if ($sheetSetup->isColumnsToRepeatAtLeftSet()) { + $repeat = $sheetSetup->getColumnsToRepeatAtLeft(); + $colmin = PHPExcel_Cell::columnIndexFromString($repeat[0]) - 1; + $colmax = PHPExcel_Cell::columnIndexFromString($repeat[1]) - 1; + } else { + $colmin = 0; + $colmax = 255; + } + + // Rows to repeat + if ($sheetSetup->isRowsToRepeatAtTopSet()) { + $repeat = $sheetSetup->getRowsToRepeatAtTop(); + $rowmin = $repeat[0] - 1; + $rowmax = $repeat[1] - 1; + } else { + $rowmin = 0; + $rowmax = 65535; + } + + $this->_writeNameShort( + $i, // sheet index + 0x07, // NAME type + $rowmin, + $rowmax, + $colmin, + $colmax + ); + } + } + } + + /** + * Writes all the DEFINEDNAME records (BIFF8). + * So far this is only used for repeating rows/columns (print titles) and print areas + */ + private function _writeAllDefinedNamesBiff8() + { + $chunk = ''; + + // Named ranges + if (count($this->_phpExcel->getNamedRanges()) > 0) { + // Loop named ranges + $namedRanges = $this->_phpExcel->getNamedRanges(); + foreach ($namedRanges as $namedRange) { + + // Create absolute coordinate + $range = PHPExcel_Cell::splitRange($namedRange->getRange()); + for ($i = 0; $i < count($range); $i++) { + $range[$i][0] = '\'' . str_replace("'", "''", $namedRange->getWorksheet()->getTitle()) . '\'!' . PHPExcel_Cell::absoluteCoordinate($range[$i][0]); + if (isset($range[$i][1])) { + $range[$i][1] = PHPExcel_Cell::absoluteCoordinate($range[$i][1]); + } + } + $range = PHPExcel_Cell::buildRange($range); // e.g. Sheet1!$A$1:$B$2 + + // parse formula + try { + $error = $this->_parser->parse($range); + $formulaData = $this->_parser->toReversePolish(); + + // make sure tRef3d is of type tRef3dR (0x3A) + if (isset($formulaData{0}) and ($formulaData{0} == "\x7A" or $formulaData{0} == "\x5A")) { + $formulaData = "\x3A" . substr($formulaData, 1); + } + + if ($namedRange->getLocalOnly()) { + // local scope + $scope = $this->_phpExcel->getIndex($namedRange->getScope()) + 1; + } else { + // global scope + $scope = 0; + } + $chunk .= $this->writeData($this->_writeDefinedNameBiff8($namedRange->getName(), $formulaData, $scope, false)); + + } catch(PHPExcel_Exception $e) { + // do nothing + } + } + } + + // total number of sheets + $total_worksheets = $this->_phpExcel->getSheetCount(); + + // write the print titles (repeating rows, columns), if any + for ($i = 0; $i < $total_worksheets; ++$i) { + $sheetSetup = $this->_phpExcel->getSheet($i)->getPageSetup(); + // simultaneous repeatColumns repeatRows + if ($sheetSetup->isColumnsToRepeatAtLeftSet() && $sheetSetup->isRowsToRepeatAtTopSet()) { + $repeat = $sheetSetup->getColumnsToRepeatAtLeft(); + $colmin = PHPExcel_Cell::columnIndexFromString($repeat[0]) - 1; + $colmax = PHPExcel_Cell::columnIndexFromString($repeat[1]) - 1; + + $repeat = $sheetSetup->getRowsToRepeatAtTop(); + $rowmin = $repeat[0] - 1; + $rowmax = $repeat[1] - 1; + + // construct formula data manually + $formulaData = pack('Cv', 0x29, 0x17); // tMemFunc + $formulaData .= pack('Cvvvvv', 0x3B, $i, 0, 65535, $colmin, $colmax); // tArea3d + $formulaData .= pack('Cvvvvv', 0x3B, $i, $rowmin, $rowmax, 0, 255); // tArea3d + $formulaData .= pack('C', 0x10); // tList + + // store the DEFINEDNAME record + $chunk .= $this->writeData($this->_writeDefinedNameBiff8(pack('C', 0x07), $formulaData, $i + 1, true)); + + // (exclusive) either repeatColumns or repeatRows + } else if ($sheetSetup->isColumnsToRepeatAtLeftSet() || $sheetSetup->isRowsToRepeatAtTopSet()) { + + // Columns to repeat + if ($sheetSetup->isColumnsToRepeatAtLeftSet()) { + $repeat = $sheetSetup->getColumnsToRepeatAtLeft(); + $colmin = PHPExcel_Cell::columnIndexFromString($repeat[0]) - 1; + $colmax = PHPExcel_Cell::columnIndexFromString($repeat[1]) - 1; + } else { + $colmin = 0; + $colmax = 255; + } + // Rows to repeat + if ($sheetSetup->isRowsToRepeatAtTopSet()) { + $repeat = $sheetSetup->getRowsToRepeatAtTop(); + $rowmin = $repeat[0] - 1; + $rowmax = $repeat[1] - 1; + } else { + $rowmin = 0; + $rowmax = 65535; + } + + // construct formula data manually because parser does not recognize absolute 3d cell references + $formulaData = pack('Cvvvvv', 0x3B, $i, $rowmin, $rowmax, $colmin, $colmax); + + // store the DEFINEDNAME record + $chunk .= $this->writeData($this->_writeDefinedNameBiff8(pack('C', 0x07), $formulaData, $i + 1, true)); + } + } + + // write the print areas, if any + for ($i = 0; $i < $total_worksheets; ++$i) { + $sheetSetup = $this->_phpExcel->getSheet($i)->getPageSetup(); + if ($sheetSetup->isPrintAreaSet()) { + // Print area, e.g. A3:J6,H1:X20 + $printArea = PHPExcel_Cell::splitRange($sheetSetup->getPrintArea()); + $countPrintArea = count($printArea); + + $formulaData = ''; + for ($j = 0; $j < $countPrintArea; ++$j) { + $printAreaRect = $printArea[$j]; // e.g. A3:J6 + $printAreaRect[0] = PHPExcel_Cell::coordinateFromString($printAreaRect[0]); + $printAreaRect[1] = PHPExcel_Cell::coordinateFromString($printAreaRect[1]); + + $print_rowmin = $printAreaRect[0][1] - 1; + $print_rowmax = $printAreaRect[1][1] - 1; + $print_colmin = PHPExcel_Cell::columnIndexFromString($printAreaRect[0][0]) - 1; + $print_colmax = PHPExcel_Cell::columnIndexFromString($printAreaRect[1][0]) - 1; + + // construct formula data manually because parser does not recognize absolute 3d cell references + $formulaData .= pack('Cvvvvv', 0x3B, $i, $print_rowmin, $print_rowmax, $print_colmin, $print_colmax); + + if ($j > 0) { + $formulaData .= pack('C', 0x10); // list operator token ',' + } + } + + // store the DEFINEDNAME record + $chunk .= $this->writeData($this->_writeDefinedNameBiff8(pack('C', 0x06), $formulaData, $i + 1, true)); + } + } + + // write autofilters, if any + for ($i = 0; $i < $total_worksheets; ++$i) { + $sheetAutoFilter = $this->_phpExcel->getSheet($i)->getAutoFilter(); + $autoFilterRange = $sheetAutoFilter->getRange(); + if(!empty($autoFilterRange)) { + $rangeBounds = PHPExcel_Cell::rangeBoundaries($autoFilterRange); + + //Autofilter built in name + $name = pack('C', 0x0D); + + $chunk .= $this->writeData($this->_writeShortNameBiff8($name, $i + 1, $rangeBounds, true)); + } + } + + return $chunk; + } + + /** + * Write a DEFINEDNAME record for BIFF8 using explicit binary formula data + * + * @param string $name The name in UTF-8 + * @param string $formulaData The binary formula data + * @param string $sheetIndex 1-based sheet index the defined name applies to. 0 = global + * @param boolean $isBuiltIn Built-in name? + * @return string Complete binary record data + */ + private function _writeDefinedNameBiff8($name, $formulaData, $sheetIndex = 0, $isBuiltIn = false) + { + $record = 0x0018; + + // option flags + $options = $isBuiltIn ? 0x20 : 0x00; + + // length of the name, character count + $nlen = PHPExcel_Shared_String::CountCharacters($name); + + // name with stripped length field + $name = substr(PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($name), 2); + + // size of the formula (in bytes) + $sz = strlen($formulaData); + + // combine the parts + $data = pack('vCCvvvCCCC', $options, 0, $nlen, $sz, 0, $sheetIndex, 0, 0, 0, 0) + . $name . $formulaData; + $length = strlen($data); + + $header = pack('vv', $record, $length); + + return $header . $data; + } + + /** + * Write a short NAME record + * + * @param string $name + * @param string $sheetIndex 1-based sheet index the defined name applies to. 0 = global + * @param integer[][] $rangeBounds range boundaries + * @param boolean $isHidden + * @return string Complete binary record data + * */ + private function _writeShortNameBiff8($name, $sheetIndex = 0, $rangeBounds, $isHidden = false){ + $record = 0x0018; + + // option flags + $options = ($isHidden ? 0x21 : 0x00); + + $extra = pack('Cvvvvv', + 0x3B, + $sheetIndex - 1, + $rangeBounds[0][1] - 1, + $rangeBounds[1][1] - 1, + $rangeBounds[0][0] - 1, + $rangeBounds[1][0] - 1); + + // size of the formula (in bytes) + $sz = strlen($extra); + + // combine the parts + $data = pack('vCCvvvCCCCC', $options, 0, 1, $sz, 0, $sheetIndex, 0, 0, 0, 0, 0) + . $name . $extra; + $length = strlen($data); + + $header = pack('vv', $record, $length); + + return $header . $data; + } + + /** + * Stores the CODEPAGE biff record. + */ + private function _writeCodepage() + { + $record = 0x0042; // Record identifier + $length = 0x0002; // Number of bytes to follow + $cv = $this->_codepage; // The code page + + $header = pack('vv', $record, $length); + $data = pack('v', $cv); + + $this->_append($header . $data); + } + + /** + * Write Excel BIFF WINDOW1 record. + */ + private function _writeWindow1() + { + $record = 0x003D; // Record identifier + $length = 0x0012; // Number of bytes to follow + + $xWn = 0x0000; // Horizontal position of window + $yWn = 0x0000; // Vertical position of window + $dxWn = 0x25BC; // Width of window + $dyWn = 0x1572; // Height of window + + $grbit = 0x0038; // Option flags + + // not supported by PHPExcel, so there is only one selected sheet, the active + $ctabsel = 1; // Number of workbook tabs selected + + $wTabRatio = 0x0258; // Tab to scrollbar ratio + + // not supported by PHPExcel, set to 0 + $itabFirst = 0; // 1st displayed worksheet + $itabCur = $this->_phpExcel->getActiveSheetIndex(); // Active worksheet + + $header = pack("vv", $record, $length); + $data = pack("vvvvvvvvv", $xWn, $yWn, $dxWn, $dyWn, + $grbit, + $itabCur, $itabFirst, + $ctabsel, $wTabRatio); + $this->_append($header . $data); + } + + /** + * Writes Excel BIFF BOUNDSHEET record. + * + * @param PHPExcel_Worksheet $sheet Worksheet name + * @param integer $offset Location of worksheet BOF + */ + private function _writeBoundsheet($sheet, $offset) + { + $sheetname = $sheet->getTitle(); + $record = 0x0085; // Record identifier + + // sheet state + switch ($sheet->getSheetState()) { + case PHPExcel_Worksheet::SHEETSTATE_VISIBLE: $ss = 0x00; break; + case PHPExcel_Worksheet::SHEETSTATE_HIDDEN: $ss = 0x01; break; + case PHPExcel_Worksheet::SHEETSTATE_VERYHIDDEN: $ss = 0x02; break; + default: $ss = 0x00; break; + } + + // sheet type + $st = 0x00; + + $grbit = 0x0000; // Visibility and sheet type + + $data = pack("VCC", $offset, $ss, $st); + $data .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeShort($sheetname); + + $length = strlen($data); + $header = pack("vv", $record, $length); + $this->_append($header . $data); + } + + /** + * Write Internal SUPBOOK record + */ + private function _writeSupbookInternal() + { + $record = 0x01AE; // Record identifier + $length = 0x0004; // Bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("vv", $this->_phpExcel->getSheetCount(), 0x0401); + return $this->writeData($header . $data); + } + + /** + * Writes the Excel BIFF EXTERNSHEET record. These references are used by + * formulas. + * + */ + private function _writeExternsheetBiff8() + { + $total_references = count($this->_parser->_references); + $record = 0x0017; // Record identifier + $length = 2 + 6 * $total_references; // Number of bytes to follow + + $supbook_index = 0; // FIXME: only using internal SUPBOOK record + $header = pack("vv", $record, $length); + $data = pack('v', $total_references); + for ($i = 0; $i < $total_references; ++$i) { + $data .= $this->_parser->_references[$i]; + } + return $this->writeData($header . $data); + } + + /** + * Write Excel BIFF STYLE records. + */ + private function _writeStyle() + { + $record = 0x0293; // Record identifier + $length = 0x0004; // Bytes to follow + + $ixfe = 0x8000; // Index to cell style XF + $BuiltIn = 0x00; // Built-in style + $iLevel = 0xff; // Outline style level + + $header = pack("vv", $record, $length); + $data = pack("vCC", $ixfe, $BuiltIn, $iLevel); + $this->_append($header . $data); + } + + /** + * Writes Excel FORMAT record for non "built-in" numerical formats. + * + * @param string $format Custom format string + * @param integer $ifmt Format index code + */ + private function _writeNumFormat($format, $ifmt) + { + $record = 0x041E; // Record identifier + + $numberFormatString = PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($format); + $length = 2 + strlen($numberFormatString); // Number of bytes to follow + + + $header = pack("vv", $record, $length); + $data = pack("v", $ifmt) . $numberFormatString; + $this->_append($header . $data); + } + + /** + * Write DATEMODE record to indicate the date system in use (1904 or 1900). + */ + private function _writeDatemode() + { + $record = 0x0022; // Record identifier + $length = 0x0002; // Bytes to follow + + $f1904 = (PHPExcel_Shared_Date::getExcelCalendar() == PHPExcel_Shared_Date::CALENDAR_MAC_1904) ? + 1 : 0; // Flag for 1904 date system + + $header = pack("vv", $record, $length); + $data = pack("v", $f1904); + $this->_append($header . $data); + } + + /** + * Write BIFF record EXTERNCOUNT to indicate the number of external sheet + * references in the workbook. + * + * Excel only stores references to external sheets that are used in NAME. + * The workbook NAME record is required to define the print area and the repeat + * rows and columns. + * + * A similar method is used in Worksheet.php for a slightly different purpose. + * + * @param integer $cxals Number of external references + */ + private function _writeExterncount($cxals) + { + $record = 0x0016; // Record identifier + $length = 0x0002; // Number of bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("v", $cxals); + $this->_append($header . $data); + } + + /** + * Writes the Excel BIFF EXTERNSHEET record. These references are used by + * formulas. NAME record is required to define the print area and the repeat + * rows and columns. + * + * A similar method is used in Worksheet.php for a slightly different purpose. + * + * @param string $sheetname Worksheet name + */ + private function _writeExternsheet($sheetname) + { + $record = 0x0017; // Record identifier + $length = 0x02 + strlen($sheetname); // Number of bytes to follow + + $cch = strlen($sheetname); // Length of sheet name + $rgch = 0x03; // Filename encoding + + $header = pack("vv", $record, $length); + $data = pack("CC", $cch, $rgch); + $this->_append($header . $data . $sheetname); + } + + /** + * Store the NAME record in the short format that is used for storing the print + * area, repeat rows only and repeat columns only. + * + * @param integer $index Sheet index + * @param integer $type Built-in name type + * @param integer $rowmin Start row + * @param integer $rowmax End row + * @param integer $colmin Start colum + * @param integer $colmax End column + */ + private function _writeNameShort($index, $type, $rowmin, $rowmax, $colmin, $colmax) + { + $record = 0x0018; // Record identifier + $length = 0x0024; // Number of bytes to follow + + $grbit = 0x0020; // Option flags + $chKey = 0x00; // Keyboard shortcut + $cch = 0x01; // Length of text name + $cce = 0x0015; // Length of text definition + $ixals = $index + 1; // Sheet index + $itab = $ixals; // Equal to ixals + $cchCustMenu = 0x00; // Length of cust menu text + $cchDescription = 0x00; // Length of description text + $cchHelptopic = 0x00; // Length of help topic text + $cchStatustext = 0x00; // Length of status bar text + $rgch = $type; // Built-in name type + + $unknown03 = 0x3b; + $unknown04 = 0xffff-$index; + $unknown05 = 0x0000; + $unknown06 = 0x0000; + $unknown07 = 0x1087; + $unknown08 = 0x8005; + + $header = pack("vv", $record, $length); + $data = pack("v", $grbit); + $data .= pack("C", $chKey); + $data .= pack("C", $cch); + $data .= pack("v", $cce); + $data .= pack("v", $ixals); + $data .= pack("v", $itab); + $data .= pack("C", $cchCustMenu); + $data .= pack("C", $cchDescription); + $data .= pack("C", $cchHelptopic); + $data .= pack("C", $cchStatustext); + $data .= pack("C", $rgch); + $data .= pack("C", $unknown03); + $data .= pack("v", $unknown04); + $data .= pack("v", $unknown05); + $data .= pack("v", $unknown06); + $data .= pack("v", $unknown07); + $data .= pack("v", $unknown08); + $data .= pack("v", $index); + $data .= pack("v", $index); + $data .= pack("v", $rowmin); + $data .= pack("v", $rowmax); + $data .= pack("C", $colmin); + $data .= pack("C", $colmax); + $this->_append($header . $data); + } + + /** + * Store the NAME record in the long format that is used for storing the repeat + * rows and columns when both are specified. This shares a lot of code with + * _writeNameShort() but we use a separate method to keep the code clean. + * Code abstraction for reuse can be carried too far, and I should know. ;-) + * + * @param integer $index Sheet index + * @param integer $type Built-in name type + * @param integer $rowmin Start row + * @param integer $rowmax End row + * @param integer $colmin Start colum + * @param integer $colmax End column + */ + private function _writeNameLong($index, $type, $rowmin, $rowmax, $colmin, $colmax) + { + $record = 0x0018; // Record identifier + $length = 0x003d; // Number of bytes to follow + $grbit = 0x0020; // Option flags + $chKey = 0x00; // Keyboard shortcut + $cch = 0x01; // Length of text name + $cce = 0x002e; // Length of text definition + $ixals = $index + 1; // Sheet index + $itab = $ixals; // Equal to ixals + $cchCustMenu = 0x00; // Length of cust menu text + $cchDescription = 0x00; // Length of description text + $cchHelptopic = 0x00; // Length of help topic text + $cchStatustext = 0x00; // Length of status bar text + $rgch = $type; // Built-in name type + + $unknown01 = 0x29; + $unknown02 = 0x002b; + $unknown03 = 0x3b; + $unknown04 = 0xffff-$index; + $unknown05 = 0x0000; + $unknown06 = 0x0000; + $unknown07 = 0x1087; + $unknown08 = 0x8008; + + $header = pack("vv", $record, $length); + $data = pack("v", $grbit); + $data .= pack("C", $chKey); + $data .= pack("C", $cch); + $data .= pack("v", $cce); + $data .= pack("v", $ixals); + $data .= pack("v", $itab); + $data .= pack("C", $cchCustMenu); + $data .= pack("C", $cchDescription); + $data .= pack("C", $cchHelptopic); + $data .= pack("C", $cchStatustext); + $data .= pack("C", $rgch); + $data .= pack("C", $unknown01); + $data .= pack("v", $unknown02); + // Column definition + $data .= pack("C", $unknown03); + $data .= pack("v", $unknown04); + $data .= pack("v", $unknown05); + $data .= pack("v", $unknown06); + $data .= pack("v", $unknown07); + $data .= pack("v", $unknown08); + $data .= pack("v", $index); + $data .= pack("v", $index); + $data .= pack("v", 0x0000); + $data .= pack("v", 0x3fff); + $data .= pack("C", $colmin); + $data .= pack("C", $colmax); + // Row definition + $data .= pack("C", $unknown03); + $data .= pack("v", $unknown04); + $data .= pack("v", $unknown05); + $data .= pack("v", $unknown06); + $data .= pack("v", $unknown07); + $data .= pack("v", $unknown08); + $data .= pack("v", $index); + $data .= pack("v", $index); + $data .= pack("v", $rowmin); + $data .= pack("v", $rowmax); + $data .= pack("C", 0x00); + $data .= pack("C", 0xff); + // End of data + $data .= pack("C", 0x10); + $this->_append($header . $data); + } + + /** + * Stores the COUNTRY record for localization + * + * @return string + */ + private function _writeCountry() + { + $record = 0x008C; // Record identifier + $length = 4; // Number of bytes to follow + + $header = pack('vv', $record, $length); + /* using the same country code always for simplicity */ + $data = pack('vv', $this->_country_code, $this->_country_code); + //$this->_append($header . $data); + return $this->writeData($header . $data); + } + + /** + * Write the RECALCID record + * + * @return string + */ + private function _writeRecalcId() + { + $record = 0x01C1; // Record identifier + $length = 8; // Number of bytes to follow + + $header = pack('vv', $record, $length); + + // by inspection of real Excel files, MS Office Excel 2007 writes this + $data = pack('VV', 0x000001C1, 0x00001E667); + + return $this->writeData($header . $data); + } + + /** + * Stores the PALETTE biff record. + */ + private function _writePalette() + { + $aref = $this->_palette; + + $record = 0x0092; // Record identifier + $length = 2 + 4 * count($aref); // Number of bytes to follow + $ccv = count($aref); // Number of RGB values to follow + $data = ''; // The RGB data + + // Pack the RGB data + foreach ($aref as $color) { + foreach ($color as $byte) { + $data .= pack("C",$byte); + } + } + + $header = pack("vvv", $record, $length, $ccv); + $this->_append($header . $data); + } + + /** + * Handling of the SST continue blocks is complicated by the need to include an + * additional continuation byte depending on whether the string is split between + * blocks or whether it starts at the beginning of the block. (There are also + * additional complications that will arise later when/if Rich Strings are + * supported). + * + * The Excel documentation says that the SST record should be followed by an + * EXTSST record. The EXTSST record is a hash table that is used to optimise + * access to SST. However, despite the documentation it doesn't seem to be + * required so we will ignore it. + * + * @return string Binary data + */ + private function _writeSharedStringsTable() + { + // maximum size of record data (excluding record header) + $continue_limit = 8224; + + // initialize array of record data blocks + $recordDatas = array(); + + // start SST record data block with total number of strings, total number of unique strings + $recordData = pack("VV", $this->_str_total, $this->_str_unique); + + // loop through all (unique) strings in shared strings table + foreach (array_keys($this->_str_table) as $string) { + + // here $string is a BIFF8 encoded string + + // length = character count + $headerinfo = unpack("vlength/Cencoding", $string); + + // currently, this is always 1 = uncompressed + $encoding = $headerinfo["encoding"]; + + // initialize finished writing current $string + $finished = false; + + while ($finished === false) { + + // normally, there will be only one cycle, but if string cannot immediately be written as is + // there will be need for more than one cylcle, if string longer than one record data block, there + // may be need for even more cycles + + if (strlen($recordData) + strlen($string) <= $continue_limit) { + // then we can write the string (or remainder of string) without any problems + $recordData .= $string; + + if (strlen($recordData) + strlen($string) == $continue_limit) { + // we close the record data block, and initialize a new one + $recordDatas[] = $recordData; + $recordData = ''; + } + + // we are finished writing this string + $finished = true; + } else { + // special treatment writing the string (or remainder of the string) + // If the string is very long it may need to be written in more than one CONTINUE record. + + // check how many bytes more there is room for in the current record + $space_remaining = $continue_limit - strlen($recordData); + + // minimum space needed + // uncompressed: 2 byte string length length field + 1 byte option flags + 2 byte character + // compressed: 2 byte string length length field + 1 byte option flags + 1 byte character + $min_space_needed = ($encoding == 1) ? 5 : 4; + + // We have two cases + // 1. space remaining is less than minimum space needed + // here we must waste the space remaining and move to next record data block + // 2. space remaining is greater than or equal to minimum space needed + // here we write as much as we can in the current block, then move to next record data block + + // 1. space remaining is less than minimum space needed + if ($space_remaining < $min_space_needed) { + // we close the block, store the block data + $recordDatas[] = $recordData; + + // and start new record data block where we start writing the string + $recordData = ''; + + // 2. space remaining is greater than or equal to minimum space needed + } else { + // initialize effective remaining space, for Unicode strings this may need to be reduced by 1, see below + $effective_space_remaining = $space_remaining; + + // for uncompressed strings, sometimes effective space remaining is reduced by 1 + if ( $encoding == 1 && (strlen($string) - $space_remaining) % 2 == 1 ) { + --$effective_space_remaining; + } + + // one block fininshed, store the block data + $recordData .= substr($string, 0, $effective_space_remaining); + + $string = substr($string, $effective_space_remaining); // for next cycle in while loop + $recordDatas[] = $recordData; + + // start new record data block with the repeated option flags + $recordData = pack('C', $encoding); + } + } + } + } + + // Store the last record data block unless it is empty + // if there was no need for any continue records, this will be the for SST record data block itself + if (strlen($recordData) > 0) { + $recordDatas[] = $recordData; + } + + // combine into one chunk with all the blocks SST, CONTINUE,... + $chunk = ''; + foreach ($recordDatas as $i => $recordData) { + // first block should have the SST record header, remaing should have CONTINUE header + $record = ($i == 0) ? 0x00FC : 0x003C; + + $header = pack("vv", $record, strlen($recordData)); + $data = $header . $recordData; + + $chunk .= $this->writeData($data); + } + + return $chunk; + } + + /** + * Writes the MSODRAWINGGROUP record if needed. Possibly split using CONTINUE records. + */ + private function _writeMsoDrawingGroup() + { + // write the Escher stream if necessary + if (isset($this->_escher)) { + $writer = new PHPExcel_Writer_Excel5_Escher($this->_escher); + $data = $writer->close(); + + $record = 0x00EB; + $length = strlen($data); + $header = pack("vv", $record, $length); + + return $this->writeData($header . $data); + + } else { + return ''; + } + } + + /** + * Get Escher object + * + * @return PHPExcel_Shared_Escher + */ + public function getEscher() + { + return $this->_escher; + } + + /** + * Set Escher object + * + * @param PHPExcel_Shared_Escher $pValue + */ + public function setEscher(PHPExcel_Shared_Escher $pValue = null) + { + $this->_escher = $pValue; + } +} diff --git a/PHPExcel/Writer/Excel5/Worksheet.php b/PHPExcel/Writer/Excel5/Worksheet.php new file mode 100644 index 0000000..55da26f --- /dev/null +++ b/PHPExcel/Writer/Excel5/Worksheet.php @@ -0,0 +1,3681 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +// Original file header of PEAR::Spreadsheet_Excel_Writer_Worksheet (used as the base for this class): +// ----------------------------------------------------------------------------------------- +// /* +// * Module written/ported by Xavier Noguer <xnoguer@rezebra.com> +// * +// * The majority of this is _NOT_ my code. I simply ported it from the +// * PERL Spreadsheet::WriteExcel module. +// * +// * The author of the Spreadsheet::WriteExcel module is John McNamara +// * <jmcnamara@cpan.org> +// * +// * I _DO_ maintain this code, and John McNamara has nothing to do with the +// * porting of this code to PHP. Any questions directly related to this +// * class library should be directed to me. +// * +// * License Information: +// * +// * Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets +// * Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 2.1 of the License, or (at your option) any later version. +// * +// * This library is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library; if not, write to the Free Software +// * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// */ + + +/** + * PHPExcel_Writer_Excel5_Worksheet + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5_Worksheet extends PHPExcel_Writer_Excel5_BIFFwriter +{ + /** + * Formula parser + * + * @var PHPExcel_Writer_Excel5_Parser + */ + private $_parser; + + /** + * Maximum number of characters for a string (LABEL record in BIFF5) + * @var integer + */ + public $_xls_strmax; + + /** + * Array containing format information for columns + * @var array + */ + public $_colinfo; + + /** + * Array containing the selected area for the worksheet + * @var array + */ + public $_selection; + + /** + * The active pane for the worksheet + * @var integer + */ + public $_active_pane; + + /** + * Whether to use outline. + * @var integer + */ + public $_outline_on; + + /** + * Auto outline styles. + * @var bool + */ + public $_outline_style; + + /** + * Whether to have outline summary below. + * @var bool + */ + public $_outline_below; + + /** + * Whether to have outline summary at the right. + * @var bool + */ + public $_outline_right; + + /** + * Reference to the total number of strings in the workbook + * @var integer + */ + public $_str_total; + + /** + * Reference to the number of unique strings in the workbook + * @var integer + */ + public $_str_unique; + + /** + * Reference to the array containing all the unique strings in the workbook + * @var array + */ + public $_str_table; + + /** + * Color cache + */ + private $_colors; + + /** + * Index of first used row (at least 0) + * @var int + */ + private $_firstRowIndex; + + /** + * Index of last used row. (no used rows means -1) + * @var int + */ + private $_lastRowIndex; + + /** + * Index of first used column (at least 0) + * @var int + */ + private $_firstColumnIndex; + + /** + * Index of last used column (no used columns means -1) + * @var int + */ + private $_lastColumnIndex; + + /** + * Sheet object + * @var PHPExcel_Worksheet + */ + public $_phpSheet; + + /** + * Count cell style Xfs + * + * @var int + */ + private $_countCellStyleXfs; + + /** + * Escher object corresponding to MSODRAWING + * + * @var PHPExcel_Shared_Escher + */ + private $_escher; + + /** + * Array of font hashes associated to FONT records index + * + * @var array + */ + public $_fntHashIndex; + + /** + * Constructor + * + * @param int &$str_total Total number of strings + * @param int &$str_unique Total number of unique strings + * @param array &$str_table String Table + * @param array &$colors Colour Table + * @param mixed $parser The formula parser created for the Workbook + * @param boolean $preCalculateFormulas Flag indicating whether formulas should be calculated or just written + * @param string $phpSheet The worksheet to write + * @param PHPExcel_Worksheet $phpSheet + */ + public function __construct(&$str_total, &$str_unique, &$str_table, &$colors, + $parser, $preCalculateFormulas, $phpSheet) + { + // It needs to call its parent's constructor explicitly + parent::__construct(); + + // change BIFFwriter limit for CONTINUE records +// $this->_limit = 8224; + + + $this->_preCalculateFormulas = $preCalculateFormulas; + $this->_str_total = &$str_total; + $this->_str_unique = &$str_unique; + $this->_str_table = &$str_table; + $this->_colors = &$colors; + $this->_parser = $parser; + + $this->_phpSheet = $phpSheet; + + //$this->ext_sheets = array(); + //$this->offset = 0; + $this->_xls_strmax = 255; + $this->_colinfo = array(); + $this->_selection = array(0,0,0,0); + $this->_active_pane = 3; + + $this->_print_headers = 0; + + $this->_outline_style = 0; + $this->_outline_below = 1; + $this->_outline_right = 1; + $this->_outline_on = 1; + + $this->_fntHashIndex = array(); + + // calculate values for DIMENSIONS record + $minR = 1; + $minC = 'A'; + + $maxR = $this->_phpSheet->getHighestRow(); + $maxC = $this->_phpSheet->getHighestColumn(); + + // Determine lowest and highest column and row +// $this->_firstRowIndex = ($minR > 65535) ? 65535 : $minR; + $this->_lastRowIndex = ($maxR > 65535) ? 65535 : $maxR ; + + $this->_firstColumnIndex = PHPExcel_Cell::columnIndexFromString($minC); + $this->_lastColumnIndex = PHPExcel_Cell::columnIndexFromString($maxC); + +// if ($this->_firstColumnIndex > 255) $this->_firstColumnIndex = 255; + if ($this->_lastColumnIndex > 255) $this->_lastColumnIndex = 255; + + $this->_countCellStyleXfs = count($phpSheet->getParent()->getCellStyleXfCollection()); + } + + /** + * Add data to the beginning of the workbook (note the reverse order) + * and to the end of the workbook. + * + * @access public + * @see PHPExcel_Writer_Excel5_Workbook::storeWorkbook() + */ + function close() + { + $_phpSheet = $this->_phpSheet; + + $num_sheets = $_phpSheet->getParent()->getSheetCount(); + + // Write BOF record + $this->_storeBof(0x0010); + + // Write PRINTHEADERS + $this->_writePrintHeaders(); + + // Write PRINTGRIDLINES + $this->_writePrintGridlines(); + + // Write GRIDSET + $this->_writeGridset(); + + // Calculate column widths + $_phpSheet->calculateColumnWidths(); + + // Column dimensions + if (($defaultWidth = $_phpSheet->getDefaultColumnDimension()->getWidth()) < 0) { + $defaultWidth = PHPExcel_Shared_Font::getDefaultColumnWidthByFont($_phpSheet->getParent()->getDefaultStyle()->getFont()); + } + + $columnDimensions = $_phpSheet->getColumnDimensions(); + $maxCol = $this->_lastColumnIndex -1; + for ($i = 0; $i <= $maxCol; ++$i) { + $hidden = 0; + $level = 0; + $xfIndex = 15; // there are 15 cell style Xfs + + $width = $defaultWidth; + + $columnLetter = PHPExcel_Cell::stringFromColumnIndex($i); + if (isset($columnDimensions[$columnLetter])) { + $columnDimension = $columnDimensions[$columnLetter]; + if ($columnDimension->getWidth() >= 0) { + $width = $columnDimension->getWidth(); + } + $hidden = $columnDimension->getVisible() ? 0 : 1; + $level = $columnDimension->getOutlineLevel(); + $xfIndex = $columnDimension->getXfIndex() + 15; // there are 15 cell style Xfs + } + + // Components of _colinfo: + // $firstcol first column on the range + // $lastcol last column on the range + // $width width to set + // $xfIndex The optional cell style Xf index to apply to the columns + // $hidden The optional hidden atribute + // $level The optional outline level + $this->_colinfo[] = array($i, $i, $width, $xfIndex, $hidden, $level); + } + + // Write GUTS + $this->_writeGuts(); + + // Write DEFAULTROWHEIGHT + $this->_writeDefaultRowHeight(); + + // Write WSBOOL + $this->_writeWsbool(); + + // Write horizontal and vertical page breaks + $this->_writeBreaks(); + + // Write page header + $this->_writeHeader(); + + // Write page footer + $this->_writeFooter(); + + // Write page horizontal centering + $this->_writeHcenter(); + + // Write page vertical centering + $this->_writeVcenter(); + + // Write left margin + $this->_writeMarginLeft(); + + // Write right margin + $this->_writeMarginRight(); + + // Write top margin + $this->_writeMarginTop(); + + // Write bottom margin + $this->_writeMarginBottom(); + + // Write page setup + $this->_writeSetup(); + + // Write sheet protection + $this->_writeProtect(); + + // Write SCENPROTECT + $this->_writeScenProtect(); + + // Write OBJECTPROTECT + $this->_writeObjectProtect(); + + // Write sheet password + $this->_writePassword(); + + // Write DEFCOLWIDTH record + $this->_writeDefcol(); + + // Write the COLINFO records if they exist + if (!empty($this->_colinfo)) { + $colcount = count($this->_colinfo); + for ($i = 0; $i < $colcount; ++$i) { + $this->_writeColinfo($this->_colinfo[$i]); + } + } + $autoFilterRange = $_phpSheet->getAutoFilter()->getRange(); + if (!empty($autoFilterRange)) { + // Write AUTOFILTERINFO + $this->_writeAutoFilterInfo(); + } + + // Write sheet dimensions + $this->_writeDimensions(); + + // Row dimensions + foreach ($_phpSheet->getRowDimensions() as $rowDimension) { + $xfIndex = $rowDimension->getXfIndex() + 15; // there are 15 cellXfs + $this->_writeRow( $rowDimension->getRowIndex() - 1, $rowDimension->getRowHeight(), $xfIndex, ($rowDimension->getVisible() ? '0' : '1'), $rowDimension->getOutlineLevel() ); + } + + // Write Cells + foreach ($_phpSheet->getCellCollection() as $cellID) { + $cell = $_phpSheet->getCell($cellID); + $row = $cell->getRow() - 1; + $column = PHPExcel_Cell::columnIndexFromString($cell->getColumn()) - 1; + + // Don't break Excel! +// if ($row + 1 > 65536 or $column + 1 > 256) { + if ($row > 65535 || $column > 255) { + break; + } + + // Write cell value + $xfIndex = $cell->getXfIndex() + 15; // there are 15 cell style Xfs + + $cVal = $cell->getValue(); + if ($cVal instanceof PHPExcel_RichText) { + // $this->_writeString($row, $column, $cVal->getPlainText(), $xfIndex); + $arrcRun = array(); + $str_len = PHPExcel_Shared_String::CountCharacters($cVal->getPlainText(), 'UTF-8'); + $str_pos = 0; + $elements = $cVal->getRichTextElements(); + foreach ($elements as $element) { + // FONT Index + if ($element instanceof PHPExcel_RichText_Run) { + $str_fontidx = $this->_fntHashIndex[$element->getFont()->getHashCode()]; + } + else { + $str_fontidx = 0; + } + $arrcRun[] = array('strlen' => $str_pos, 'fontidx' => $str_fontidx); + // Position FROM + $str_pos += PHPExcel_Shared_String::CountCharacters($element->getText(), 'UTF-8'); + } + $this->_writeRichTextString($row, $column, $cVal->getPlainText(), $xfIndex, $arrcRun); + } else { + switch ($cell->getDatatype()) { + case PHPExcel_Cell_DataType::TYPE_STRING: + case PHPExcel_Cell_DataType::TYPE_NULL: + if ($cVal === '' || $cVal === null) { + $this->_writeBlank($row, $column, $xfIndex); + } else { + $this->_writeString($row, $column, $cVal, $xfIndex); + } + break; + + case PHPExcel_Cell_DataType::TYPE_NUMERIC: + $this->_writeNumber($row, $column, $cVal, $xfIndex); + break; + + case PHPExcel_Cell_DataType::TYPE_FORMULA: + $calculatedValue = $this->_preCalculateFormulas ? + $cell->getCalculatedValue() : null; + $this->_writeFormula($row, $column, $cVal, $xfIndex, $calculatedValue); + break; + + case PHPExcel_Cell_DataType::TYPE_BOOL: + $this->_writeBoolErr($row, $column, $cVal, 0, $xfIndex); + break; + + case PHPExcel_Cell_DataType::TYPE_ERROR: + $this->_writeBoolErr($row, $column, self::_mapErrorCode($cVal), 1, $xfIndex); + break; + + } + } + } + + // Append + $this->_writeMsoDrawing(); + + // Write WINDOW2 record + $this->_writeWindow2(); + + // Write PLV record + $this->_writePageLayoutView(); + + // Write ZOOM record + $this->_writeZoom(); + if ($_phpSheet->getFreezePane()) { + $this->_writePanes(); + } + + // Write SELECTION record + $this->_writeSelection(); + + // Write MergedCellsTable Record + $this->_writeMergedCells(); + + // Hyperlinks + foreach ($_phpSheet->getHyperLinkCollection() as $coordinate => $hyperlink) { + list($column, $row) = PHPExcel_Cell::coordinateFromString($coordinate); + + $url = $hyperlink->getUrl(); + + if ( strpos($url, 'sheet://') !== false ) { + // internal to current workbook + $url = str_replace('sheet://', 'internal:', $url); + + } else if ( preg_match('/^(http:|https:|ftp:|mailto:)/', $url) ) { + // URL + // $url = $url; + + } else { + // external (local file) + $url = 'external:' . $url; + } + + $this->_writeUrl($row - 1, PHPExcel_Cell::columnIndexFromString($column) - 1, $url); + } + + $this->_writeDataValidity(); + $this->_writeSheetLayout(); + + // Write SHEETPROTECTION record + $this->_writeSheetProtection(); + $this->_writeRangeProtection(); + + $arrConditionalStyles = $_phpSheet->getConditionalStylesCollection(); + if(!empty($arrConditionalStyles)){ + $arrConditional = array(); + // @todo CFRule & CFHeader + // Write CFHEADER record + $this->_writeCFHeader(); + // Write ConditionalFormattingTable records + foreach ($arrConditionalStyles as $cellCoordinate => $conditionalStyles) { + foreach ($conditionalStyles as $conditional) { + if($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_EXPRESSION + || $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CELLIS){ + if(!in_array($conditional->getHashCode(), $arrConditional)){ + $arrConditional[] = $conditional->getHashCode(); + // Write CFRULE record + $this->_writeCFRule($conditional); + } + } + } + } + } + + $this->_storeEof(); + } + + /** + * Write a cell range address in BIFF8 + * always fixed range + * See section 2.5.14 in OpenOffice.org's Documentation of the Microsoft Excel File Format + * + * @param string $range E.g. 'A1' or 'A1:B6' + * @return string Binary data + */ + private function _writeBIFF8CellRangeAddressFixed($range = 'A1') + { + $explodes = explode(':', $range); + + // extract first cell, e.g. 'A1' + $firstCell = $explodes[0]; + + // extract last cell, e.g. 'B6' + if (count($explodes) == 1) { + $lastCell = $firstCell; + } else { + $lastCell = $explodes[1]; + } + + $firstCellCoordinates = PHPExcel_Cell::coordinateFromString($firstCell); // e.g. array(0, 1) + $lastCellCoordinates = PHPExcel_Cell::coordinateFromString($lastCell); // e.g. array(1, 6) + + return(pack('vvvv', + $firstCellCoordinates[1] - 1, + $lastCellCoordinates[1] - 1, + PHPExcel_Cell::columnIndexFromString($firstCellCoordinates[0]) - 1, + PHPExcel_Cell::columnIndexFromString($lastCellCoordinates[0]) - 1 + )); + } + + /** + * Retrieves data from memory in one chunk, or from disk in $buffer + * sized chunks. + * + * @return string The data + */ + function getData() + { + $buffer = 4096; + + // Return data stored in memory + if (isset($this->_data)) { + $tmp = $this->_data; + unset($this->_data); + return $tmp; + } + // No data to return + return false; + } + + /** + * Set the option to print the row and column headers on the printed page. + * + * @access public + * @param integer $print Whether to print the headers or not. Defaults to 1 (print). + */ + function printRowColHeaders($print = 1) + { + $this->_print_headers = $print; + } + + /** + * This method sets the properties for outlining and grouping. The defaults + * correspond to Excel's defaults. + * + * @param bool $visible + * @param bool $symbols_below + * @param bool $symbols_right + * @param bool $auto_style + */ + function setOutline($visible = true, $symbols_below = true, $symbols_right = true, $auto_style = false) + { + $this->_outline_on = $visible; + $this->_outline_below = $symbols_below; + $this->_outline_right = $symbols_right; + $this->_outline_style = $auto_style; + + // Ensure this is a boolean vale for Window2 + if ($this->_outline_on) { + $this->_outline_on = 1; + } + } + + /** + * Write a double to the specified row and column (zero indexed). + * An integer can be written as a double. Excel will display an + * integer. $format is optional. + * + * Returns 0 : normal termination + * -2 : row or column out of range + * + * @param integer $row Zero indexed row + * @param integer $col Zero indexed column + * @param float $num The number to write + * @param mixed $xfIndex The optional XF format + * @return integer + */ + private function _writeNumber($row, $col, $num, $xfIndex) + { + $record = 0x0203; // Record identifier + $length = 0x000E; // Number of bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("vvv", $row, $col, $xfIndex); + $xl_double = pack("d", $num); + if (self::getByteOrder()) { // if it's Big Endian + $xl_double = strrev($xl_double); + } + + $this->_append($header.$data.$xl_double); + return(0); + } + + /** + * Write a LABELSST record or a LABEL record. Which one depends on BIFF version + * + * @param int $row Row index (0-based) + * @param int $col Column index (0-based) + * @param string $str The string + * @param int $xfIndex Index to XF record + */ + private function _writeString($row, $col, $str, $xfIndex) + { + $this->_writeLabelSst($row, $col, $str, $xfIndex); + } + + /** + * Write a LABELSST record or a LABEL record. Which one depends on BIFF version + * It differs from _writeString by the writing of rich text strings. + * @param int $row Row index (0-based) + * @param int $col Column index (0-based) + * @param string $str The string + * @param mixed $xfIndex The XF format index for the cell + * @param array $arrcRun Index to Font record and characters beginning + */ + private function _writeRichTextString($row, $col, $str, $xfIndex, $arrcRun){ + $record = 0x00FD; // Record identifier + $length = 0x000A; // Bytes to follow + $str = PHPExcel_Shared_String::UTF8toBIFF8UnicodeShort($str, $arrcRun); + + /* check if string is already present */ + if (!isset($this->_str_table[$str])) { + $this->_str_table[$str] = $this->_str_unique++; + } + $this->_str_total++; + + $header = pack('vv', $record, $length); + $data = pack('vvvV', $row, $col, $xfIndex, $this->_str_table[$str]); + $this->_append($header.$data); + } + + /** + * Write a string to the specified row and column (zero indexed). + * NOTE: there is an Excel 5 defined limit of 255 characters. + * $format is optional. + * Returns 0 : normal termination + * -2 : row or column out of range + * -3 : long string truncated to 255 chars + * + * @access public + * @param integer $row Zero indexed row + * @param integer $col Zero indexed column + * @param string $str The string to write + * @param mixed $xfIndex The XF format index for the cell + * @return integer + */ + private function _writeLabel($row, $col, $str, $xfIndex) + { + $strlen = strlen($str); + $record = 0x0204; // Record identifier + $length = 0x0008 + $strlen; // Bytes to follow + + $str_error = 0; + + if ($strlen > $this->_xls_strmax) { // LABEL must be < 255 chars + $str = substr($str, 0, $this->_xls_strmax); + $length = 0x0008 + $this->_xls_strmax; + $strlen = $this->_xls_strmax; + $str_error = -3; + } + + $header = pack("vv", $record, $length); + $data = pack("vvvv", $row, $col, $xfIndex, $strlen); + $this->_append($header . $data . $str); + return($str_error); + } + + /** + * Write a string to the specified row and column (zero indexed). + * This is the BIFF8 version (no 255 chars limit). + * $format is optional. + * Returns 0 : normal termination + * -2 : row or column out of range + * -3 : long string truncated to 255 chars + * + * @access public + * @param integer $row Zero indexed row + * @param integer $col Zero indexed column + * @param string $str The string to write + * @param mixed $xfIndex The XF format index for the cell + * @return integer + */ + private function _writeLabelSst($row, $col, $str, $xfIndex) + { + $record = 0x00FD; // Record identifier + $length = 0x000A; // Bytes to follow + + $str = PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($str); + + /* check if string is already present */ + if (!isset($this->_str_table[$str])) { + $this->_str_table[$str] = $this->_str_unique++; + } + $this->_str_total++; + + $header = pack('vv', $record, $length); + $data = pack('vvvV', $row, $col, $xfIndex, $this->_str_table[$str]); + $this->_append($header.$data); + } + + /** + * Writes a note associated with the cell given by the row and column. + * NOTE records don't have a length limit. + * + * @param integer $row Zero indexed row + * @param integer $col Zero indexed column + * @param string $note The note to write + */ + private function _writeNote($row, $col, $note) + { + $note_length = strlen($note); + $record = 0x001C; // Record identifier + $max_length = 2048; // Maximun length for a NOTE record + + // Length for this record is no more than 2048 + 6 + $length = 0x0006 + min($note_length, 2048); + $header = pack("vv", $record, $length); + $data = pack("vvv", $row, $col, $note_length); + $this->_append($header . $data . substr($note, 0, 2048)); + + for ($i = $max_length; $i < $note_length; $i += $max_length) { + $chunk = substr($note, $i, $max_length); + $length = 0x0006 + strlen($chunk); + $header = pack("vv", $record, $length); + $data = pack("vvv", -1, 0, strlen($chunk)); + $this->_append($header.$data.$chunk); + } + return(0); + } + + /** + * Write a blank cell to the specified row and column (zero indexed). + * A blank cell is used to specify formatting without adding a string + * or a number. + * + * A blank cell without a format serves no purpose. Therefore, we don't write + * a BLANK record unless a format is specified. + * + * Returns 0 : normal termination (including no format) + * -1 : insufficient number of arguments + * -2 : row or column out of range + * + * @param integer $row Zero indexed row + * @param integer $col Zero indexed column + * @param mixed $xfIndex The XF format index + */ + function _writeBlank($row, $col, $xfIndex) + { + $record = 0x0201; // Record identifier + $length = 0x0006; // Number of bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("vvv", $row, $col, $xfIndex); + $this->_append($header . $data); + return 0; + } + + /** + * Write a boolean or an error type to the specified row and column (zero indexed) + * + * @param int $row Row index (0-based) + * @param int $col Column index (0-based) + * @param int $value + * @param boolean $isError Error or Boolean? + * @param int $xfIndex + */ + private function _writeBoolErr($row, $col, $value, $isError, $xfIndex) + { + $record = 0x0205; + $length = 8; + + $header = pack("vv", $record, $length); + $data = pack("vvvCC", $row, $col, $xfIndex, $value, $isError); + $this->_append($header . $data); + return 0; + } + + /** + * Write a formula to the specified row and column (zero indexed). + * The textual representation of the formula is passed to the parser in + * Parser.php which returns a packed binary string. + * + * Returns 0 : normal termination + * -1 : formula errors (bad formula) + * -2 : row or column out of range + * + * @param integer $row Zero indexed row + * @param integer $col Zero indexed column + * @param string $formula The formula text string + * @param mixed $xfIndex The XF format index + * @param mixed $calculatedValue Calculated value + * @return integer + */ + private function _writeFormula($row, $col, $formula, $xfIndex, $calculatedValue) + { + $record = 0x0006; // Record identifier + + // Initialize possible additional value for STRING record that should be written after the FORMULA record? + $stringValue = null; + + // calculated value + if (isset($calculatedValue)) { + // Since we can't yet get the data type of the calculated value, + // we use best effort to determine data type + if (is_bool($calculatedValue)) { + // Boolean value + $num = pack('CCCvCv', 0x01, 0x00, (int)$calculatedValue, 0x00, 0x00, 0xFFFF); + } elseif (is_int($calculatedValue) || is_float($calculatedValue)) { + // Numeric value + $num = pack('d', $calculatedValue); + } elseif (is_string($calculatedValue)) { + if (array_key_exists($calculatedValue, PHPExcel_Cell_DataType::getErrorCodes())) { + // Error value + $num = pack('CCCvCv', 0x02, 0x00, self::_mapErrorCode($calculatedValue), 0x00, 0x00, 0xFFFF); + } elseif ($calculatedValue === '') { + // Empty string (and BIFF8) + $num = pack('CCCvCv', 0x03, 0x00, 0x00, 0x00, 0x00, 0xFFFF); + } else { + // Non-empty string value (or empty string BIFF5) + $stringValue = $calculatedValue; + $num = pack('CCCvCv', 0x00, 0x00, 0x00, 0x00, 0x00, 0xFFFF); + } + } else { + // We are really not supposed to reach here + $num = pack('d', 0x00); + } + } else { + $num = pack('d', 0x00); + } + + $grbit = 0x03; // Option flags + $unknown = 0x0000; // Must be zero + + // Strip the '=' or '@' sign at the beginning of the formula string + if ($formula{0} == '=') { + $formula = substr($formula,1); + } else { + // Error handling + $this->_writeString($row, $col, 'Unrecognised character for formula'); + return -1; + } + + // Parse the formula using the parser in Parser.php + try { + $error = $this->_parser->parse($formula); + $formula = $this->_parser->toReversePolish(); + + $formlen = strlen($formula); // Length of the binary string + $length = 0x16 + $formlen; // Length of the record data + + $header = pack("vv", $record, $length); + + $data = pack("vvv", $row, $col, $xfIndex) + . $num + . pack("vVv", $grbit, $unknown, $formlen); + $this->_append($header . $data . $formula); + + // Append also a STRING record if necessary + if ($stringValue !== null) { + $this->_writeStringRecord($stringValue); + } + + return 0; + + } catch (PHPExcel_Exception $e) { + // do nothing + } + + } + + /** + * Write a STRING record. This + * + * @param string $stringValue + */ + private function _writeStringRecord($stringValue) + { + $record = 0x0207; // Record identifier + $data = PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($stringValue); + + $length = strlen($data); + $header = pack('vv', $record, $length); + + $this->_append($header . $data); + } + + /** + * Write a hyperlink. + * This is comprised of two elements: the visible label and + * the invisible link. The visible label is the same as the link unless an + * alternative string is specified. The label is written using the + * _writeString() method. Therefore the 255 characters string limit applies. + * $string and $format are optional. + * + * The hyperlink can be to a http, ftp, mail, internal sheet (not yet), or external + * directory url. + * + * Returns 0 : normal termination + * -2 : row or column out of range + * -3 : long string truncated to 255 chars + * + * @param integer $row Row + * @param integer $col Column + * @param string $url URL string + * @return integer + */ + private function _writeUrl($row, $col, $url) + { + // Add start row and col to arg list + return($this->_writeUrlRange($row, $col, $row, $col, $url)); + } + + /** + * This is the more general form of _writeUrl(). It allows a hyperlink to be + * written to a range of cells. This function also decides the type of hyperlink + * to be written. These are either, Web (http, ftp, mailto), Internal + * (Sheet1!A1) or external ('c:\temp\foo.xls#Sheet1!A1'). + * + * @access private + * @see _writeUrl() + * @param integer $row1 Start row + * @param integer $col1 Start column + * @param integer $row2 End row + * @param integer $col2 End column + * @param string $url URL string + * @return integer + */ + function _writeUrlRange($row1, $col1, $row2, $col2, $url) + { + // Check for internal/external sheet links or default to web link + if (preg_match('[^internal:]', $url)) { + return($this->_writeUrlInternal($row1, $col1, $row2, $col2, $url)); + } + if (preg_match('[^external:]', $url)) { + return($this->_writeUrlExternal($row1, $col1, $row2, $col2, $url)); + } + return($this->_writeUrlWeb($row1, $col1, $row2, $col2, $url)); + } + + /** + * Used to write http, ftp and mailto hyperlinks. + * The link type ($options) is 0x03 is the same as absolute dir ref without + * sheet. However it is differentiated by the $unknown2 data stream. + * + * @access private + * @see _writeUrl() + * @param integer $row1 Start row + * @param integer $col1 Start column + * @param integer $row2 End row + * @param integer $col2 End column + * @param string $url URL string + * @return integer + */ + function _writeUrlWeb($row1, $col1, $row2, $col2, $url) + { + $record = 0x01B8; // Record identifier + $length = 0x00000; // Bytes to follow + + // Pack the undocumented parts of the hyperlink stream + $unknown1 = pack("H*", "D0C9EA79F9BACE118C8200AA004BA90B02000000"); + $unknown2 = pack("H*", "E0C9EA79F9BACE118C8200AA004BA90B"); + + // Pack the option flags + $options = pack("V", 0x03); + + // Convert URL to a null terminated wchar string + $url = join("\0", preg_split("''", $url, -1, PREG_SPLIT_NO_EMPTY)); + $url = $url . "\0\0\0"; + + // Pack the length of the URL + $url_len = pack("V", strlen($url)); + + // Calculate the data length + $length = 0x34 + strlen($url); + + // Pack the header data + $header = pack("vv", $record, $length); + $data = pack("vvvv", $row1, $row2, $col1, $col2); + + // Write the packed data + $this->_append($header . $data . + $unknown1 . $options . + $unknown2 . $url_len . $url); + return 0; + } + + /** + * Used to write internal reference hyperlinks such as "Sheet1!A1". + * + * @access private + * @see _writeUrl() + * @param integer $row1 Start row + * @param integer $col1 Start column + * @param integer $row2 End row + * @param integer $col2 End column + * @param string $url URL string + * @return integer + */ + function _writeUrlInternal($row1, $col1, $row2, $col2, $url) + { + $record = 0x01B8; // Record identifier + $length = 0x00000; // Bytes to follow + + // Strip URL type + $url = preg_replace('/^internal:/', '', $url); + + // Pack the undocumented parts of the hyperlink stream + $unknown1 = pack("H*", "D0C9EA79F9BACE118C8200AA004BA90B02000000"); + + // Pack the option flags + $options = pack("V", 0x08); + + // Convert the URL type and to a null terminated wchar string + $url .= "\0"; + + // character count + $url_len = PHPExcel_Shared_String::CountCharacters($url); + $url_len = pack('V', $url_len); + + $url = PHPExcel_Shared_String::ConvertEncoding($url, 'UTF-16LE', 'UTF-8'); + + // Calculate the data length + $length = 0x24 + strlen($url); + + // Pack the header data + $header = pack("vv", $record, $length); + $data = pack("vvvv", $row1, $row2, $col1, $col2); + + // Write the packed data + $this->_append($header . $data . + $unknown1 . $options . + $url_len . $url); + return 0; + } + + /** + * Write links to external directory names such as 'c:\foo.xls', + * c:\foo.xls#Sheet1!A1', '../../foo.xls'. and '../../foo.xls#Sheet1!A1'. + * + * Note: Excel writes some relative links with the $dir_long string. We ignore + * these cases for the sake of simpler code. + * + * @access private + * @see _writeUrl() + * @param integer $row1 Start row + * @param integer $col1 Start column + * @param integer $row2 End row + * @param integer $col2 End column + * @param string $url URL string + * @return integer + */ + function _writeUrlExternal($row1, $col1, $row2, $col2, $url) + { + // Network drives are different. We will handle them separately + // MS/Novell network drives and shares start with \\ + if (preg_match('[^external:\\\\]', $url)) { + return; //($this->_writeUrlExternal_net($row1, $col1, $row2, $col2, $url, $str, $format)); + } + + $record = 0x01B8; // Record identifier + $length = 0x00000; // Bytes to follow + + // Strip URL type and change Unix dir separator to Dos style (if needed) + // + $url = preg_replace('/^external:/', '', $url); + $url = preg_replace('/\//', "\\", $url); + + // Determine if the link is relative or absolute: + // relative if link contains no dir separator, "somefile.xls" + // relative if link starts with up-dir, "..\..\somefile.xls" + // otherwise, absolute + + $absolute = 0x00; // relative path + if ( preg_match('/^[A-Z]:/', $url) ) { + $absolute = 0x02; // absolute path on Windows, e.g. C:\... + } + $link_type = 0x01 | $absolute; + + // Determine if the link contains a sheet reference and change some of the + // parameters accordingly. + // Split the dir name and sheet name (if it exists) + $dir_long = $url; + if (preg_match("/\#/", $url)) { + $link_type |= 0x08; + } + + + // Pack the link type + $link_type = pack("V", $link_type); + + // Calculate the up-level dir count e.g.. (..\..\..\ == 3) + $up_count = preg_match_all("/\.\.\\\/", $dir_long, $useless); + $up_count = pack("v", $up_count); + + // Store the short dos dir name (null terminated) + $dir_short = preg_replace("/\.\.\\\/", '', $dir_long) . "\0"; + + // Store the long dir name as a wchar string (non-null terminated) + $dir_long = $dir_long . "\0"; + + // Pack the lengths of the dir strings + $dir_short_len = pack("V", strlen($dir_short) ); + $dir_long_len = pack("V", strlen($dir_long) ); + $stream_len = pack("V", 0);//strlen($dir_long) + 0x06); + + // Pack the undocumented parts of the hyperlink stream + $unknown1 = pack("H*",'D0C9EA79F9BACE118C8200AA004BA90B02000000' ); + $unknown2 = pack("H*",'0303000000000000C000000000000046' ); + $unknown3 = pack("H*",'FFFFADDE000000000000000000000000000000000000000'); + $unknown4 = pack("v", 0x03 ); + + // Pack the main data stream + $data = pack("vvvv", $row1, $row2, $col1, $col2) . + $unknown1 . + $link_type . + $unknown2 . + $up_count . + $dir_short_len. + $dir_short . + $unknown3 . + $stream_len ;/*. + $dir_long_len . + $unknown4 . + $dir_long . + $sheet_len . + $sheet ;*/ + + // Pack the header data + $length = strlen($data); + $header = pack("vv", $record, $length); + + // Write the packed data + $this->_append($header. $data); + return 0; + } + + /** + * This method is used to set the height and format for a row. + * + * @param integer $row The row to set + * @param integer $height Height we are giving to the row. + * Use null to set XF without setting height + * @param integer $xfIndex The optional cell style Xf index to apply to the columns + * @param bool $hidden The optional hidden attribute + * @param integer $level The optional outline level for row, in range [0,7] + */ + private function _writeRow($row, $height, $xfIndex, $hidden = false, $level = 0) + { + $record = 0x0208; // Record identifier + $length = 0x0010; // Number of bytes to follow + + $colMic = 0x0000; // First defined column + $colMac = 0x0000; // Last defined column + $irwMac = 0x0000; // Used by Excel to optimise loading + $reserved = 0x0000; // Reserved + $grbit = 0x0000; // Option flags + $ixfe = $xfIndex; + + if ( $height < 0 ){ + $height = null; + } + + // Use _writeRow($row, null, $XF) to set XF format without setting height + if ($height != null) { + $miyRw = $height * 20; // row height + } else { + $miyRw = 0xff; // default row height is 256 + } + + // Set the options flags. fUnsynced is used to show that the font and row + // heights are not compatible. This is usually the case for WriteExcel. + // The collapsed flag 0x10 doesn't seem to be used to indicate that a row + // is collapsed. Instead it is used to indicate that the previous row is + // collapsed. The zero height flag, 0x20, is used to collapse a row. + + $grbit |= $level; + if ($hidden) { + $grbit |= 0x0020; + } + if ($height !== null) { + $grbit |= 0x0040; // fUnsynced + } + if ($xfIndex !== 0xF) { + $grbit |= 0x0080; + } + $grbit |= 0x0100; + + $header = pack("vv", $record, $length); + $data = pack("vvvvvvvv", $row, $colMic, $colMac, $miyRw, + $irwMac,$reserved, $grbit, $ixfe); + $this->_append($header.$data); + } + + /** + * Writes Excel DIMENSIONS to define the area in which there is data. + */ + private function _writeDimensions() + { + $record = 0x0200; // Record identifier + + $length = 0x000E; + $data = pack('VVvvv' + , $this->_firstRowIndex + , $this->_lastRowIndex + 1 + , $this->_firstColumnIndex + , $this->_lastColumnIndex + 1 + , 0x0000 // reserved + ); + + $header = pack("vv", $record, $length); + $this->_append($header.$data); + } + + /** + * Write BIFF record Window2. + */ + private function _writeWindow2() + { + $record = 0x023E; // Record identifier + $length = 0x0012; + + $grbit = 0x00B6; // Option flags + $rwTop = 0x0000; // Top row visible in window + $colLeft = 0x0000; // Leftmost column visible in window + + + // The options flags that comprise $grbit + $fDspFmla = 0; // 0 - bit + $fDspGrid = $this->_phpSheet->getShowGridlines() ? 1 : 0; // 1 + $fDspRwCol = $this->_phpSheet->getShowRowColHeaders() ? 1 : 0; // 2 + $fFrozen = $this->_phpSheet->getFreezePane() ? 1 : 0; // 3 + $fDspZeros = 1; // 4 + $fDefaultHdr = 1; // 5 + $fArabic = $this->_phpSheet->getRightToLeft() ? 1 : 0; // 6 + $fDspGuts = $this->_outline_on; // 7 + $fFrozenNoSplit = 0; // 0 - bit + // no support in PHPExcel for selected sheet, therefore sheet is only selected if it is the active sheet + $fSelected = ($this->_phpSheet === $this->_phpSheet->getParent()->getActiveSheet()) ? 1 : 0; + $fPaged = 1; // 2 + $fPageBreakPreview = $this->_phpSheet->getSheetView()->getView() === PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_BREAK_PREVIEW; + + $grbit = $fDspFmla; + $grbit |= $fDspGrid << 1; + $grbit |= $fDspRwCol << 2; + $grbit |= $fFrozen << 3; + $grbit |= $fDspZeros << 4; + $grbit |= $fDefaultHdr << 5; + $grbit |= $fArabic << 6; + $grbit |= $fDspGuts << 7; + $grbit |= $fFrozenNoSplit << 8; + $grbit |= $fSelected << 9; + $grbit |= $fPaged << 10; + $grbit |= $fPageBreakPreview << 11; + + $header = pack("vv", $record, $length); + $data = pack("vvv", $grbit, $rwTop, $colLeft); + + // FIXME !!! + $rgbHdr = 0x0040; // Row/column heading and gridline color index + $zoom_factor_page_break = ($fPageBreakPreview? $this->_phpSheet->getSheetView()->getZoomScale() : 0x0000); + $zoom_factor_normal = $this->_phpSheet->getSheetView()->getZoomScaleNormal(); + + $data .= pack("vvvvV", $rgbHdr, 0x0000, $zoom_factor_page_break, $zoom_factor_normal, 0x00000000); + + $this->_append($header.$data); + } + + /** + * Write BIFF record DEFAULTROWHEIGHT. + */ + private function _writeDefaultRowHeight() + { + $defaultRowHeight = $this->_phpSheet->getDefaultRowDimension()->getRowHeight(); + + if ($defaultRowHeight < 0) { + return; + } + + // convert to twips + $defaultRowHeight = (int) 20 * $defaultRowHeight; + + $record = 0x0225; // Record identifier + $length = 0x0004; // Number of bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("vv", 1, $defaultRowHeight); + $this->_append($header . $data); + } + + /** + * Write BIFF record DEFCOLWIDTH if COLINFO records are in use. + */ + private function _writeDefcol() + { + $defaultColWidth = 8; + + $record = 0x0055; // Record identifier + $length = 0x0002; // Number of bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("v", $defaultColWidth); + $this->_append($header . $data); + } + + /** + * Write BIFF record COLINFO to define column widths + * + * Note: The SDK says the record length is 0x0B but Excel writes a 0x0C + * length record. + * + * @param array $col_array This is the only parameter received and is composed of the following: + * 0 => First formatted column, + * 1 => Last formatted column, + * 2 => Col width (8.43 is Excel default), + * 3 => The optional XF format of the column, + * 4 => Option flags. + * 5 => Optional outline level + */ + private function _writeColinfo($col_array) + { + if (isset($col_array[0])) { + $colFirst = $col_array[0]; + } + if (isset($col_array[1])) { + $colLast = $col_array[1]; + } + if (isset($col_array[2])) { + $coldx = $col_array[2]; + } else { + $coldx = 8.43; + } + if (isset($col_array[3])) { + $xfIndex = $col_array[3]; + } else { + $xfIndex = 15; + } + if (isset($col_array[4])) { + $grbit = $col_array[4]; + } else { + $grbit = 0; + } + if (isset($col_array[5])) { + $level = $col_array[5]; + } else { + $level = 0; + } + $record = 0x007D; // Record identifier + $length = 0x000C; // Number of bytes to follow + + $coldx *= 256; // Convert to units of 1/256 of a char + + $ixfe = $xfIndex; + $reserved = 0x0000; // Reserved + + $level = max(0, min($level, 7)); + $grbit |= $level << 8; + + $header = pack("vv", $record, $length); + $data = pack("vvvvvv", $colFirst, $colLast, $coldx, + $ixfe, $grbit, $reserved); + $this->_append($header.$data); + } + + /** + * Write BIFF record SELECTION. + */ + private function _writeSelection() + { + // look up the selected cell range + $selectedCells = $this->_phpSheet->getSelectedCells(); + $selectedCells = PHPExcel_Cell::splitRange($this->_phpSheet->getSelectedCells()); + $selectedCells = $selectedCells[0]; + if (count($selectedCells) == 2) { + list($first, $last) = $selectedCells; + } else { + $first = $selectedCells[0]; + $last = $selectedCells[0]; + } + + list($colFirst, $rwFirst) = PHPExcel_Cell::coordinateFromString($first); + $colFirst = PHPExcel_Cell::columnIndexFromString($colFirst) - 1; // base 0 column index + --$rwFirst; // base 0 row index + + list($colLast, $rwLast) = PHPExcel_Cell::coordinateFromString($last); + $colLast = PHPExcel_Cell::columnIndexFromString($colLast) - 1; // base 0 column index + --$rwLast; // base 0 row index + + // make sure we are not out of bounds + $colFirst = min($colFirst, 255); + $colLast = min($colLast, 255); + + $rwFirst = min($rwFirst, 65535); + $rwLast = min($rwLast, 65535); + + $record = 0x001D; // Record identifier + $length = 0x000F; // Number of bytes to follow + + $pnn = $this->_active_pane; // Pane position + $rwAct = $rwFirst; // Active row + $colAct = $colFirst; // Active column + $irefAct = 0; // Active cell ref + $cref = 1; // Number of refs + + if (!isset($rwLast)) { + $rwLast = $rwFirst; // Last row in reference + } + if (!isset($colLast)) { + $colLast = $colFirst; // Last col in reference + } + + // Swap last row/col for first row/col as necessary + if ($rwFirst > $rwLast) { + list($rwFirst, $rwLast) = array($rwLast, $rwFirst); + } + + if ($colFirst > $colLast) { + list($colFirst, $colLast) = array($colLast, $colFirst); + } + + $header = pack("vv", $record, $length); + $data = pack("CvvvvvvCC", $pnn, $rwAct, $colAct, + $irefAct, $cref, + $rwFirst, $rwLast, + $colFirst, $colLast); + $this->_append($header . $data); + } + + /** + * Store the MERGEDCELLS records for all ranges of merged cells + */ + private function _writeMergedCells() + { + $mergeCells = $this->_phpSheet->getMergeCells(); + $countMergeCells = count($mergeCells); + + if ($countMergeCells == 0) { + return; + } + + // maximum allowed number of merged cells per record + $maxCountMergeCellsPerRecord = 1027; + + // record identifier + $record = 0x00E5; + + // counter for total number of merged cells treated so far by the writer + $i = 0; + + // counter for number of merged cells written in record currently being written + $j = 0; + + // initialize record data + $recordData = ''; + + // loop through the merged cells + foreach ($mergeCells as $mergeCell) { + ++$i; + ++$j; + + // extract the row and column indexes + $range = PHPExcel_Cell::splitRange($mergeCell); + list($first, $last) = $range[0]; + list($firstColumn, $firstRow) = PHPExcel_Cell::coordinateFromString($first); + list($lastColumn, $lastRow) = PHPExcel_Cell::coordinateFromString($last); + + $recordData .= pack('vvvv', $firstRow - 1, $lastRow - 1, PHPExcel_Cell::columnIndexFromString($firstColumn) - 1, PHPExcel_Cell::columnIndexFromString($lastColumn) - 1); + + // flush record if we have reached limit for number of merged cells, or reached final merged cell + if ($j == $maxCountMergeCellsPerRecord or $i == $countMergeCells) { + $recordData = pack('v', $j) . $recordData; + $length = strlen($recordData); + $header = pack('vv', $record, $length); + $this->_append($header . $recordData); + + // initialize for next record, if any + $recordData = ''; + $j = 0; + } + } + } + + /** + * Write SHEETLAYOUT record + */ + private function _writeSheetLayout() + { + if (!$this->_phpSheet->isTabColorSet()) { + return; + } + + $recordData = pack( + 'vvVVVvv' + , 0x0862 + , 0x0000 // unused + , 0x00000000 // unused + , 0x00000000 // unused + , 0x00000014 // size of record data + , $this->_colors[$this->_phpSheet->getTabColor()->getRGB()] // color index + , 0x0000 // unused + ); + + $length = strlen($recordData); + + $record = 0x0862; // Record identifier + $header = pack('vv', $record, $length); + $this->_append($header . $recordData); + } + + /** + * Write SHEETPROTECTION + */ + private function _writeSheetProtection() + { + // record identifier + $record = 0x0867; + + // prepare options + $options = (int) !$this->_phpSheet->getProtection()->getObjects() + | (int) !$this->_phpSheet->getProtection()->getScenarios() << 1 + | (int) !$this->_phpSheet->getProtection()->getFormatCells() << 2 + | (int) !$this->_phpSheet->getProtection()->getFormatColumns() << 3 + | (int) !$this->_phpSheet->getProtection()->getFormatRows() << 4 + | (int) !$this->_phpSheet->getProtection()->getInsertColumns() << 5 + | (int) !$this->_phpSheet->getProtection()->getInsertRows() << 6 + | (int) !$this->_phpSheet->getProtection()->getInsertHyperlinks() << 7 + | (int) !$this->_phpSheet->getProtection()->getDeleteColumns() << 8 + | (int) !$this->_phpSheet->getProtection()->getDeleteRows() << 9 + | (int) !$this->_phpSheet->getProtection()->getSelectLockedCells() << 10 + | (int) !$this->_phpSheet->getProtection()->getSort() << 11 + | (int) !$this->_phpSheet->getProtection()->getAutoFilter() << 12 + | (int) !$this->_phpSheet->getProtection()->getPivotTables() << 13 + | (int) !$this->_phpSheet->getProtection()->getSelectUnlockedCells() << 14 ; + + // record data + $recordData = pack( + 'vVVCVVvv' + , 0x0867 // repeated record identifier + , 0x0000 // not used + , 0x0000 // not used + , 0x00 // not used + , 0x01000200 // unknown data + , 0xFFFFFFFF // unknown data + , $options // options + , 0x0000 // not used + ); + + $length = strlen($recordData); + $header = pack('vv', $record, $length); + + $this->_append($header . $recordData); + } + + /** + * Write BIFF record RANGEPROTECTION + * + * Openoffice.org's Documentaion of the Microsoft Excel File Format uses term RANGEPROTECTION for these records + * Microsoft Office Excel 97-2007 Binary File Format Specification uses term FEAT for these records + */ + private function _writeRangeProtection() + { + foreach ($this->_phpSheet->getProtectedCells() as $range => $password) { + // number of ranges, e.g. 'A1:B3 C20:D25' + $cellRanges = explode(' ', $range); + $cref = count($cellRanges); + + $recordData = pack( + 'vvVVvCVvVv', + 0x0868, + 0x00, + 0x0000, + 0x0000, + 0x02, + 0x0, + 0x0000, + $cref, + 0x0000, + 0x00 + ); + + foreach ($cellRanges as $cellRange) { + $recordData .= $this->_writeBIFF8CellRangeAddressFixed($cellRange); + } + + // the rgbFeat structure + $recordData .= pack( + 'VV', + 0x0000, + hexdec($password) + ); + + $recordData .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong('p' . md5($recordData)); + + $length = strlen($recordData); + + $record = 0x0868; // Record identifier + $header = pack("vv", $record, $length); + $this->_append($header . $recordData); + } + } + + /** + * Write BIFF record EXTERNCOUNT to indicate the number of external sheet + * references in a worksheet. + * + * Excel only stores references to external sheets that are used in formulas. + * For simplicity we store references to all the sheets in the workbook + * regardless of whether they are used or not. This reduces the overall + * complexity and eliminates the need for a two way dialogue between the formula + * parser the worksheet objects. + * + * @param integer $count The number of external sheet references in this worksheet + */ + private function _writeExterncount($count) + { + $record = 0x0016; // Record identifier + $length = 0x0002; // Number of bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("v", $count); + $this->_append($header . $data); + } + + /** + * Writes the Excel BIFF EXTERNSHEET record. These references are used by + * formulas. A formula references a sheet name via an index. Since we store a + * reference to all of the external worksheets the EXTERNSHEET index is the same + * as the worksheet index. + * + * @param string $sheetname The name of a external worksheet + */ + private function _writeExternsheet($sheetname) + { + $record = 0x0017; // Record identifier + + // References to the current sheet are encoded differently to references to + // external sheets. + // + if ($this->_phpSheet->getTitle() == $sheetname) { + $sheetname = ''; + $length = 0x02; // The following 2 bytes + $cch = 1; // The following byte + $rgch = 0x02; // Self reference + } else { + $length = 0x02 + strlen($sheetname); + $cch = strlen($sheetname); + $rgch = 0x03; // Reference to a sheet in the current workbook + } + + $header = pack("vv", $record, $length); + $data = pack("CC", $cch, $rgch); + $this->_append($header . $data . $sheetname); + } + + /** + * Writes the Excel BIFF PANE record. + * The panes can either be frozen or thawed (unfrozen). + * Frozen panes are specified in terms of an integer number of rows and columns. + * Thawed panes are specified in terms of Excel's units for rows and columns. + */ + private function _writePanes() + { + $panes = array(); + if ($freezePane = $this->_phpSheet->getFreezePane()) { + list($column, $row) = PHPExcel_Cell::coordinateFromString($freezePane); + $panes[0] = $row - 1; + $panes[1] = PHPExcel_Cell::columnIndexFromString($column) - 1; + } else { + // thaw panes + return; + } + + $y = isset($panes[0]) ? $panes[0] : null; + $x = isset($panes[1]) ? $panes[1] : null; + $rwTop = isset($panes[2]) ? $panes[2] : null; + $colLeft = isset($panes[3]) ? $panes[3] : null; + if (count($panes) > 4) { // if Active pane was received + $pnnAct = $panes[4]; + } else { + $pnnAct = null; + } + $record = 0x0041; // Record identifier + $length = 0x000A; // Number of bytes to follow + + // Code specific to frozen or thawed panes. + if ($this->_phpSheet->getFreezePane()) { + // Set default values for $rwTop and $colLeft + if (!isset($rwTop)) { + $rwTop = $y; + } + if (!isset($colLeft)) { + $colLeft = $x; + } + } else { + // Set default values for $rwTop and $colLeft + if (!isset($rwTop)) { + $rwTop = 0; + } + if (!isset($colLeft)) { + $colLeft = 0; + } + + // Convert Excel's row and column units to the internal units. + // The default row height is 12.75 + // The default column width is 8.43 + // The following slope and intersection values were interpolated. + // + $y = 20*$y + 255; + $x = 113.879*$x + 390; + } + + + // Determine which pane should be active. There is also the undocumented + // option to override this should it be necessary: may be removed later. + // + if (!isset($pnnAct)) { + if ($x != 0 && $y != 0) { + $pnnAct = 0; // Bottom right + } + if ($x != 0 && $y == 0) { + $pnnAct = 1; // Top right + } + if ($x == 0 && $y != 0) { + $pnnAct = 2; // Bottom left + } + if ($x == 0 && $y == 0) { + $pnnAct = 3; // Top left + } + } + + $this->_active_pane = $pnnAct; // Used in _writeSelection + + $header = pack("vv", $record, $length); + $data = pack("vvvvv", $x, $y, $rwTop, $colLeft, $pnnAct); + $this->_append($header . $data); + } + + /** + * Store the page setup SETUP BIFF record. + */ + private function _writeSetup() + { + $record = 0x00A1; // Record identifier + $length = 0x0022; // Number of bytes to follow + + $iPaperSize = $this->_phpSheet->getPageSetup()->getPaperSize(); // Paper size + + $iScale = $this->_phpSheet->getPageSetup()->getScale() ? + $this->_phpSheet->getPageSetup()->getScale() : 100; // Print scaling factor + + $iPageStart = 0x01; // Starting page number + $iFitWidth = (int) $this->_phpSheet->getPageSetup()->getFitToWidth(); // Fit to number of pages wide + $iFitHeight = (int) $this->_phpSheet->getPageSetup()->getFitToHeight(); // Fit to number of pages high + $grbit = 0x00; // Option flags + $iRes = 0x0258; // Print resolution + $iVRes = 0x0258; // Vertical print resolution + + $numHdr = $this->_phpSheet->getPageMargins()->getHeader(); // Header Margin + + $numFtr = $this->_phpSheet->getPageMargins()->getFooter(); // Footer Margin + $iCopies = 0x01; // Number of copies + + $fLeftToRight = 0x0; // Print over then down + + // Page orientation + $fLandscape = ($this->_phpSheet->getPageSetup()->getOrientation() == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) ? + 0x0 : 0x1; + + $fNoPls = 0x0; // Setup not read from printer + $fNoColor = 0x0; // Print black and white + $fDraft = 0x0; // Print draft quality + $fNotes = 0x0; // Print notes + $fNoOrient = 0x0; // Orientation not set + $fUsePage = 0x0; // Use custom starting page + + $grbit = $fLeftToRight; + $grbit |= $fLandscape << 1; + $grbit |= $fNoPls << 2; + $grbit |= $fNoColor << 3; + $grbit |= $fDraft << 4; + $grbit |= $fNotes << 5; + $grbit |= $fNoOrient << 6; + $grbit |= $fUsePage << 7; + + $numHdr = pack("d", $numHdr); + $numFtr = pack("d", $numFtr); + if (self::getByteOrder()) { // if it's Big Endian + $numHdr = strrev($numHdr); + $numFtr = strrev($numFtr); + } + + $header = pack("vv", $record, $length); + $data1 = pack("vvvvvvvv", $iPaperSize, + $iScale, + $iPageStart, + $iFitWidth, + $iFitHeight, + $grbit, + $iRes, + $iVRes); + $data2 = $numHdr.$numFtr; + $data3 = pack("v", $iCopies); + $this->_append($header . $data1 . $data2 . $data3); + } + + /** + * Store the header caption BIFF record. + */ + private function _writeHeader() + { + $record = 0x0014; // Record identifier + + /* removing for now + // need to fix character count (multibyte!) + if (strlen($this->_phpSheet->getHeaderFooter()->getOddHeader()) <= 255) { + $str = $this->_phpSheet->getHeaderFooter()->getOddHeader(); // header string + } else { + $str = ''; + } + */ + + $recordData = PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($this->_phpSheet->getHeaderFooter()->getOddHeader()); + $length = strlen($recordData); + + $header = pack("vv", $record, $length); + + $this->_append($header . $recordData); + } + + /** + * Store the footer caption BIFF record. + */ + private function _writeFooter() + { + $record = 0x0015; // Record identifier + + /* removing for now + // need to fix character count (multibyte!) + if (strlen($this->_phpSheet->getHeaderFooter()->getOddFooter()) <= 255) { + $str = $this->_phpSheet->getHeaderFooter()->getOddFooter(); + } else { + $str = ''; + } + */ + + $recordData = PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($this->_phpSheet->getHeaderFooter()->getOddFooter()); + $length = strlen($recordData); + + $header = pack("vv", $record, $length); + + $this->_append($header . $recordData); + } + + /** + * Store the horizontal centering HCENTER BIFF record. + * + * @access private + */ + private function _writeHcenter() + { + $record = 0x0083; // Record identifier + $length = 0x0002; // Bytes to follow + + $fHCenter = $this->_phpSheet->getPageSetup()->getHorizontalCentered() ? 1 : 0; // Horizontal centering + + $header = pack("vv", $record, $length); + $data = pack("v", $fHCenter); + + $this->_append($header.$data); + } + + /** + * Store the vertical centering VCENTER BIFF record. + */ + private function _writeVcenter() + { + $record = 0x0084; // Record identifier + $length = 0x0002; // Bytes to follow + + $fVCenter = $this->_phpSheet->getPageSetup()->getVerticalCentered() ? 1 : 0; // Horizontal centering + + $header = pack("vv", $record, $length); + $data = pack("v", $fVCenter); + $this->_append($header . $data); + } + + /** + * Store the LEFTMARGIN BIFF record. + */ + private function _writeMarginLeft() + { + $record = 0x0026; // Record identifier + $length = 0x0008; // Bytes to follow + + $margin = $this->_phpSheet->getPageMargins()->getLeft(); // Margin in inches + + $header = pack("vv", $record, $length); + $data = pack("d", $margin); + if (self::getByteOrder()) { // if it's Big Endian + $data = strrev($data); + } + + $this->_append($header . $data); + } + + /** + * Store the RIGHTMARGIN BIFF record. + */ + private function _writeMarginRight() + { + $record = 0x0027; // Record identifier + $length = 0x0008; // Bytes to follow + + $margin = $this->_phpSheet->getPageMargins()->getRight(); // Margin in inches + + $header = pack("vv", $record, $length); + $data = pack("d", $margin); + if (self::getByteOrder()) { // if it's Big Endian + $data = strrev($data); + } + + $this->_append($header . $data); + } + + /** + * Store the TOPMARGIN BIFF record. + */ + private function _writeMarginTop() + { + $record = 0x0028; // Record identifier + $length = 0x0008; // Bytes to follow + + $margin = $this->_phpSheet->getPageMargins()->getTop(); // Margin in inches + + $header = pack("vv", $record, $length); + $data = pack("d", $margin); + if (self::getByteOrder()) { // if it's Big Endian + $data = strrev($data); + } + + $this->_append($header . $data); + } + + /** + * Store the BOTTOMMARGIN BIFF record. + */ + private function _writeMarginBottom() + { + $record = 0x0029; // Record identifier + $length = 0x0008; // Bytes to follow + + $margin = $this->_phpSheet->getPageMargins()->getBottom(); // Margin in inches + + $header = pack("vv", $record, $length); + $data = pack("d", $margin); + if (self::getByteOrder()) { // if it's Big Endian + $data = strrev($data); + } + + $this->_append($header . $data); + } + + /** + * Write the PRINTHEADERS BIFF record. + */ + private function _writePrintHeaders() + { + $record = 0x002a; // Record identifier + $length = 0x0002; // Bytes to follow + + $fPrintRwCol = $this->_print_headers; // Boolean flag + + $header = pack("vv", $record, $length); + $data = pack("v", $fPrintRwCol); + $this->_append($header . $data); + } + + /** + * Write the PRINTGRIDLINES BIFF record. Must be used in conjunction with the + * GRIDSET record. + */ + private function _writePrintGridlines() + { + $record = 0x002b; // Record identifier + $length = 0x0002; // Bytes to follow + + $fPrintGrid = $this->_phpSheet->getPrintGridlines() ? 1 : 0; // Boolean flag + + $header = pack("vv", $record, $length); + $data = pack("v", $fPrintGrid); + $this->_append($header . $data); + } + + /** + * Write the GRIDSET BIFF record. Must be used in conjunction with the + * PRINTGRIDLINES record. + */ + private function _writeGridset() + { + $record = 0x0082; // Record identifier + $length = 0x0002; // Bytes to follow + + $fGridSet = !$this->_phpSheet->getPrintGridlines(); // Boolean flag + + $header = pack("vv", $record, $length); + $data = pack("v", $fGridSet); + $this->_append($header . $data); + } + + /** + * Write the AUTOFILTERINFO BIFF record. This is used to configure the number of autofilter select used in the sheet. + */ + private function _writeAutoFilterInfo(){ + $record = 0x009D; // Record identifier + $length = 0x0002; // Bytes to follow + + $rangeBounds = PHPExcel_Cell::rangeBoundaries($this->_phpSheet->getAutoFilter()->getRange()); + $iNumFilters = 1 + $rangeBounds[1][0] - $rangeBounds[0][0]; + + $header = pack("vv", $record, $length); + $data = pack("v", $iNumFilters); + $this->_append($header . $data); + } + + /** + * Write the GUTS BIFF record. This is used to configure the gutter margins + * where Excel outline symbols are displayed. The visibility of the gutters is + * controlled by a flag in WSBOOL. + * + * @see _writeWsbool() + */ + private function _writeGuts() + { + $record = 0x0080; // Record identifier + $length = 0x0008; // Bytes to follow + + $dxRwGut = 0x0000; // Size of row gutter + $dxColGut = 0x0000; // Size of col gutter + + // determine maximum row outline level + $maxRowOutlineLevel = 0; + foreach ($this->_phpSheet->getRowDimensions() as $rowDimension) { + $maxRowOutlineLevel = max($maxRowOutlineLevel, $rowDimension->getOutlineLevel()); + } + + $col_level = 0; + + // Calculate the maximum column outline level. The equivalent calculation + // for the row outline level is carried out in _writeRow(). + $colcount = count($this->_colinfo); + for ($i = 0; $i < $colcount; ++$i) { + $col_level = max($this->_colinfo[$i][5], $col_level); + } + + // Set the limits for the outline levels (0 <= x <= 7). + $col_level = max(0, min($col_level, 7)); + + // The displayed level is one greater than the max outline levels + if ($maxRowOutlineLevel) { + ++$maxRowOutlineLevel; + } + if ($col_level) { + ++$col_level; + } + + $header = pack("vv", $record, $length); + $data = pack("vvvv", $dxRwGut, $dxColGut, $maxRowOutlineLevel, $col_level); + + $this->_append($header.$data); + } + + /** + * Write the WSBOOL BIFF record, mainly for fit-to-page. Used in conjunction + * with the SETUP record. + */ + private function _writeWsbool() + { + $record = 0x0081; // Record identifier + $length = 0x0002; // Bytes to follow + $grbit = 0x0000; + + // The only option that is of interest is the flag for fit to page. So we + // set all the options in one go. + // + // Set the option flags + $grbit |= 0x0001; // Auto page breaks visible + if ($this->_outline_style) { + $grbit |= 0x0020; // Auto outline styles + } + if ($this->_phpSheet->getShowSummaryBelow()) { + $grbit |= 0x0040; // Outline summary below + } + if ($this->_phpSheet->getShowSummaryRight()) { + $grbit |= 0x0080; // Outline summary right + } + if ($this->_phpSheet->getPageSetup()->getFitToPage()) { + $grbit |= 0x0100; // Page setup fit to page + } + if ($this->_outline_on) { + $grbit |= 0x0400; // Outline symbols displayed + } + + $header = pack("vv", $record, $length); + $data = pack("v", $grbit); + $this->_append($header . $data); + } + + /** + * Write the HORIZONTALPAGEBREAKS and VERTICALPAGEBREAKS BIFF records. + */ + private function _writeBreaks() + { + // initialize + $vbreaks = array(); + $hbreaks = array(); + + foreach ($this->_phpSheet->getBreaks() as $cell => $breakType) { + // Fetch coordinates + $coordinates = PHPExcel_Cell::coordinateFromString($cell); + + // Decide what to do by the type of break + switch ($breakType) { + case PHPExcel_Worksheet::BREAK_COLUMN: + // Add to list of vertical breaks + $vbreaks[] = PHPExcel_Cell::columnIndexFromString($coordinates[0]) - 1; + break; + + case PHPExcel_Worksheet::BREAK_ROW: + // Add to list of horizontal breaks + $hbreaks[] = $coordinates[1]; + break; + + case PHPExcel_Worksheet::BREAK_NONE: + default: + // Nothing to do + break; + } + } + + //horizontal page breaks + if (!empty($hbreaks)) { + + // Sort and filter array of page breaks + sort($hbreaks, SORT_NUMERIC); + if ($hbreaks[0] == 0) { // don't use first break if it's 0 + array_shift($hbreaks); + } + + $record = 0x001b; // Record identifier + $cbrk = count($hbreaks); // Number of page breaks + $length = 2 + 6 * $cbrk; // Bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("v", $cbrk); + + // Append each page break + foreach ($hbreaks as $hbreak) { + $data .= pack("vvv", $hbreak, 0x0000, 0x00ff); + } + + $this->_append($header . $data); + } + + // vertical page breaks + if (!empty($vbreaks)) { + + // 1000 vertical pagebreaks appears to be an internal Excel 5 limit. + // It is slightly higher in Excel 97/200, approx. 1026 + $vbreaks = array_slice($vbreaks, 0, 1000); + + // Sort and filter array of page breaks + sort($vbreaks, SORT_NUMERIC); + if ($vbreaks[0] == 0) { // don't use first break if it's 0 + array_shift($vbreaks); + } + + $record = 0x001a; // Record identifier + $cbrk = count($vbreaks); // Number of page breaks + $length = 2 + 6 * $cbrk; // Bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("v", $cbrk); + + // Append each page break + foreach ($vbreaks as $vbreak) { + $data .= pack("vvv", $vbreak, 0x0000, 0xffff); + } + + $this->_append($header . $data); + } + } + + /** + * Set the Biff PROTECT record to indicate that the worksheet is protected. + */ + private function _writeProtect() + { + // Exit unless sheet protection has been specified + if (!$this->_phpSheet->getProtection()->getSheet()) { + return; + } + + $record = 0x0012; // Record identifier + $length = 0x0002; // Bytes to follow + + $fLock = 1; // Worksheet is protected + + $header = pack("vv", $record, $length); + $data = pack("v", $fLock); + + $this->_append($header.$data); + } + + /** + * Write SCENPROTECT + */ + private function _writeScenProtect() + { + // Exit if sheet protection is not active + if (!$this->_phpSheet->getProtection()->getSheet()) { + return; + } + + // Exit if scenarios are not protected + if (!$this->_phpSheet->getProtection()->getScenarios()) { + return; + } + + $record = 0x00DD; // Record identifier + $length = 0x0002; // Bytes to follow + + $header = pack('vv', $record, $length); + $data = pack('v', 1); + + $this->_append($header . $data); + } + + /** + * Write OBJECTPROTECT + */ + private function _writeObjectProtect() + { + // Exit if sheet protection is not active + if (!$this->_phpSheet->getProtection()->getSheet()) { + return; + } + + // Exit if objects are not protected + if (!$this->_phpSheet->getProtection()->getObjects()) { + return; + } + + $record = 0x0063; // Record identifier + $length = 0x0002; // Bytes to follow + + $header = pack('vv', $record, $length); + $data = pack('v', 1); + + $this->_append($header . $data); + } + + /** + * Write the worksheet PASSWORD record. + */ + private function _writePassword() + { + // Exit unless sheet protection and password have been specified + if (!$this->_phpSheet->getProtection()->getSheet() || !$this->_phpSheet->getProtection()->getPassword()) { + return; + } + + $record = 0x0013; // Record identifier + $length = 0x0002; // Bytes to follow + + $wPassword = hexdec($this->_phpSheet->getProtection()->getPassword()); // Encoded password + + $header = pack("vv", $record, $length); + $data = pack("v", $wPassword); + + $this->_append($header . $data); + } + + /** + * Insert a 24bit bitmap image in a worksheet. + * + * @access public + * @param integer $row The row we are going to insert the bitmap into + * @param integer $col The column we are going to insert the bitmap into + * @param mixed $bitmap The bitmap filename or GD-image resource + * @param integer $x The horizontal position (offset) of the image inside the cell. + * @param integer $y The vertical position (offset) of the image inside the cell. + * @param float $scale_x The horizontal scale + * @param float $scale_y The vertical scale + */ + function insertBitmap($row, $col, $bitmap, $x = 0, $y = 0, $scale_x = 1, $scale_y = 1) + { + $bitmap_array = (is_resource($bitmap) ? $this->_processBitmapGd($bitmap) : $this->_processBitmap($bitmap)); + list($width, $height, $size, $data) = $bitmap_array; //$this->_processBitmap($bitmap); + + // Scale the frame of the image. + $width *= $scale_x; + $height *= $scale_y; + + // Calculate the vertices of the image and write the OBJ record + $this->_positionImage($col, $row, $x, $y, $width, $height); + + // Write the IMDATA record to store the bitmap data + $record = 0x007f; + $length = 8 + $size; + $cf = 0x09; + $env = 0x01; + $lcb = $size; + + $header = pack("vvvvV", $record, $length, $cf, $env, $lcb); + $this->_append($header.$data); + } + + /** + * Calculate the vertices that define the position of the image as required by + * the OBJ record. + * + * +------------+------------+ + * | A | B | + * +-----+------------+------------+ + * | |(x1,y1) | | + * | 1 |(A1)._______|______ | + * | | | | | + * | | | | | + * +-----+----| BITMAP |-----+ + * | | | | | + * | 2 | |______________. | + * | | | (B2)| + * | | | (x2,y2)| + * +---- +------------+------------+ + * + * Example of a bitmap that covers some of the area from cell A1 to cell B2. + * + * Based on the width and height of the bitmap we need to calculate 8 vars: + * $col_start, $row_start, $col_end, $row_end, $x1, $y1, $x2, $y2. + * The width and height of the cells are also variable and have to be taken into + * account. + * The values of $col_start and $row_start are passed in from the calling + * function. The values of $col_end and $row_end are calculated by subtracting + * the width and height of the bitmap from the width and height of the + * underlying cells. + * The vertices are expressed as a percentage of the underlying cell width as + * follows (rhs values are in pixels): + * + * x1 = X / W *1024 + * y1 = Y / H *256 + * x2 = (X-1) / W *1024 + * y2 = (Y-1) / H *256 + * + * Where: X is distance from the left side of the underlying cell + * Y is distance from the top of the underlying cell + * W is the width of the cell + * H is the height of the cell + * The SDK incorrectly states that the height should be expressed as a + * percentage of 1024. + * + * @access private + * @param integer $col_start Col containing upper left corner of object + * @param integer $row_start Row containing top left corner of object + * @param integer $x1 Distance to left side of object + * @param integer $y1 Distance to top of object + * @param integer $width Width of image frame + * @param integer $height Height of image frame + */ + function _positionImage($col_start, $row_start, $x1, $y1, $width, $height) + { + // Initialise end cell to the same as the start cell + $col_end = $col_start; // Col containing lower right corner of object + $row_end = $row_start; // Row containing bottom right corner of object + + // Zero the specified offset if greater than the cell dimensions + if ($x1 >= PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, PHPExcel_Cell::stringFromColumnIndex($col_start))) { + $x1 = 0; + } + if ($y1 >= PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $row_start + 1)) { + $y1 = 0; + } + + $width = $width + $x1 -1; + $height = $height + $y1 -1; + + // Subtract the underlying cell widths to find the end cell of the image + while ($width >= PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, PHPExcel_Cell::stringFromColumnIndex($col_end))) { + $width -= PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, PHPExcel_Cell::stringFromColumnIndex($col_end)); + ++$col_end; + } + + // Subtract the underlying cell heights to find the end cell of the image + while ($height >= PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $row_end + 1)) { + $height -= PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $row_end + 1); + ++$row_end; + } + + // Bitmap isn't allowed to start or finish in a hidden cell, i.e. a cell + // with zero eight or width. + // + if (PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, PHPExcel_Cell::stringFromColumnIndex($col_start)) == 0) { + return; + } + if (PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, PHPExcel_Cell::stringFromColumnIndex($col_end)) == 0) { + return; + } + if (PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $row_start + 1) == 0) { + return; + } + if (PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $row_end + 1) == 0) { + return; + } + + // Convert the pixel values to the percentage value expected by Excel + $x1 = $x1 / PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, PHPExcel_Cell::stringFromColumnIndex($col_start)) * 1024; + $y1 = $y1 / PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $row_start + 1) * 256; + $x2 = $width / PHPExcel_Shared_Excel5::sizeCol($this->_phpSheet, PHPExcel_Cell::stringFromColumnIndex($col_end)) * 1024; // Distance to right side of object + $y2 = $height / PHPExcel_Shared_Excel5::sizeRow($this->_phpSheet, $row_end + 1) * 256; // Distance to bottom of object + + $this->_writeObjPicture($col_start, $x1, + $row_start, $y1, + $col_end, $x2, + $row_end, $y2); + } + + /** + * Store the OBJ record that precedes an IMDATA record. This could be generalise + * to support other Excel objects. + * + * @param integer $colL Column containing upper left corner of object + * @param integer $dxL Distance from left side of cell + * @param integer $rwT Row containing top left corner of object + * @param integer $dyT Distance from top of cell + * @param integer $colR Column containing lower right corner of object + * @param integer $dxR Distance from right of cell + * @param integer $rwB Row containing bottom right corner of object + * @param integer $dyB Distance from bottom of cell + */ + private function _writeObjPicture($colL,$dxL,$rwT,$dyT,$colR,$dxR,$rwB,$dyB) + { + $record = 0x005d; // Record identifier + $length = 0x003c; // Bytes to follow + + $cObj = 0x0001; // Count of objects in file (set to 1) + $OT = 0x0008; // Object type. 8 = Picture + $id = 0x0001; // Object ID + $grbit = 0x0614; // Option flags + + $cbMacro = 0x0000; // Length of FMLA structure + $Reserved1 = 0x0000; // Reserved + $Reserved2 = 0x0000; // Reserved + + $icvBack = 0x09; // Background colour + $icvFore = 0x09; // Foreground colour + $fls = 0x00; // Fill pattern + $fAuto = 0x00; // Automatic fill + $icv = 0x08; // Line colour + $lns = 0xff; // Line style + $lnw = 0x01; // Line weight + $fAutoB = 0x00; // Automatic border + $frs = 0x0000; // Frame style + $cf = 0x0009; // Image format, 9 = bitmap + $Reserved3 = 0x0000; // Reserved + $cbPictFmla = 0x0000; // Length of FMLA structure + $Reserved4 = 0x0000; // Reserved + $grbit2 = 0x0001; // Option flags + $Reserved5 = 0x0000; // Reserved + + + $header = pack("vv", $record, $length); + $data = pack("V", $cObj); + $data .= pack("v", $OT); + $data .= pack("v", $id); + $data .= pack("v", $grbit); + $data .= pack("v", $colL); + $data .= pack("v", $dxL); + $data .= pack("v", $rwT); + $data .= pack("v", $dyT); + $data .= pack("v", $colR); + $data .= pack("v", $dxR); + $data .= pack("v", $rwB); + $data .= pack("v", $dyB); + $data .= pack("v", $cbMacro); + $data .= pack("V", $Reserved1); + $data .= pack("v", $Reserved2); + $data .= pack("C", $icvBack); + $data .= pack("C", $icvFore); + $data .= pack("C", $fls); + $data .= pack("C", $fAuto); + $data .= pack("C", $icv); + $data .= pack("C", $lns); + $data .= pack("C", $lnw); + $data .= pack("C", $fAutoB); + $data .= pack("v", $frs); + $data .= pack("V", $cf); + $data .= pack("v", $Reserved3); + $data .= pack("v", $cbPictFmla); + $data .= pack("v", $Reserved4); + $data .= pack("v", $grbit2); + $data .= pack("V", $Reserved5); + + $this->_append($header . $data); + } + + /** + * Convert a GD-image into the internal format. + * + * @access private + * @param resource $image The image to process + * @return array Array with data and properties of the bitmap + */ + function _processBitmapGd($image) { + $width = imagesx($image); + $height = imagesy($image); + + $data = pack("Vvvvv", 0x000c, $width, $height, 0x01, 0x18); + for ($j=$height; $j--; ) { + for ($i=0; $i < $width; ++$i) { + $color = imagecolorsforindex($image, imagecolorat($image, $i, $j)); + foreach (array("red", "green", "blue") as $key) { + $color[$key] = $color[$key] + round((255 - $color[$key]) * $color["alpha"] / 127); + } + $data .= chr($color["blue"]) . chr($color["green"]) . chr($color["red"]); + } + if (3*$width % 4) { + $data .= str_repeat("\x00", 4 - 3*$width % 4); + } + } + + return array($width, $height, strlen($data), $data); + } + + /** + * Convert a 24 bit bitmap into the modified internal format used by Windows. + * This is described in BITMAPCOREHEADER and BITMAPCOREINFO structures in the + * MSDN library. + * + * @access private + * @param string $bitmap The bitmap to process + * @return array Array with data and properties of the bitmap + */ + function _processBitmap($bitmap) + { + // Open file. + $bmp_fd = @fopen($bitmap,"rb"); + if (!$bmp_fd) { + throw new PHPExcel_Writer_Exception("Couldn't import $bitmap"); + } + + // Slurp the file into a string. + $data = fread($bmp_fd, filesize($bitmap)); + + // Check that the file is big enough to be a bitmap. + if (strlen($data) <= 0x36) { + throw new PHPExcel_Writer_Exception("$bitmap doesn't contain enough data.\n"); + } + + // The first 2 bytes are used to identify the bitmap. + $identity = unpack("A2ident", $data); + if ($identity['ident'] != "BM") { + throw new PHPExcel_Writer_Exception("$bitmap doesn't appear to be a valid bitmap image.\n"); + } + + // Remove bitmap data: ID. + $data = substr($data, 2); + + // Read and remove the bitmap size. This is more reliable than reading + // the data size at offset 0x22. + // + $size_array = unpack("Vsa", substr($data, 0, 4)); + $size = $size_array['sa']; + $data = substr($data, 4); + $size -= 0x36; // Subtract size of bitmap header. + $size += 0x0C; // Add size of BIFF header. + + // Remove bitmap data: reserved, offset, header length. + $data = substr($data, 12); + + // Read and remove the bitmap width and height. Verify the sizes. + $width_and_height = unpack("V2", substr($data, 0, 8)); + $width = $width_and_height[1]; + $height = $width_and_height[2]; + $data = substr($data, 8); + if ($width > 0xFFFF) { + throw new PHPExcel_Writer_Exception("$bitmap: largest image width supported is 65k.\n"); + } + if ($height > 0xFFFF) { + throw new PHPExcel_Writer_Exception("$bitmap: largest image height supported is 65k.\n"); + } + + // Read and remove the bitmap planes and bpp data. Verify them. + $planes_and_bitcount = unpack("v2", substr($data, 0, 4)); + $data = substr($data, 4); + if ($planes_and_bitcount[2] != 24) { // Bitcount + throw new PHPExcel_Writer_Exception("$bitmap isn't a 24bit true color bitmap.\n"); + } + if ($planes_and_bitcount[1] != 1) { + throw new PHPExcel_Writer_Exception("$bitmap: only 1 plane supported in bitmap image.\n"); + } + + // Read and remove the bitmap compression. Verify compression. + $compression = unpack("Vcomp", substr($data, 0, 4)); + $data = substr($data, 4); + + //$compression = 0; + if ($compression['comp'] != 0) { + throw new PHPExcel_Writer_Exception("$bitmap: compression not supported in bitmap image.\n"); + } + + // Remove bitmap data: data size, hres, vres, colours, imp. colours. + $data = substr($data, 20); + + // Add the BITMAPCOREHEADER data + $header = pack("Vvvvv", 0x000c, $width, $height, 0x01, 0x18); + $data = $header . $data; + + return (array($width, $height, $size, $data)); + } + + /** + * Store the window zoom factor. This should be a reduced fraction but for + * simplicity we will store all fractions with a numerator of 100. + */ + private function _writeZoom() + { + // If scale is 100 we don't need to write a record + if ($this->_phpSheet->getSheetView()->getZoomScale() == 100) { + return; + } + + $record = 0x00A0; // Record identifier + $length = 0x0004; // Bytes to follow + + $header = pack("vv", $record, $length); + $data = pack("vv", $this->_phpSheet->getSheetView()->getZoomScale(), 100); + $this->_append($header . $data); + } + + /** + * Get Escher object + * + * @return PHPExcel_Shared_Escher + */ + public function getEscher() + { + return $this->_escher; + } + + /** + * Set Escher object + * + * @param PHPExcel_Shared_Escher $pValue + */ + public function setEscher(PHPExcel_Shared_Escher $pValue = null) + { + $this->_escher = $pValue; + } + + /** + * Write MSODRAWING record + */ + private function _writeMsoDrawing() + { + // write the Escher stream if necessary + if (isset($this->_escher)) { + $writer = new PHPExcel_Writer_Excel5_Escher($this->_escher); + $data = $writer->close(); + $spOffsets = $writer->getSpOffsets(); + $spTypes = $writer->getSpTypes(); + // write the neccesary MSODRAWING, OBJ records + + // split the Escher stream + $spOffsets[0] = 0; + $nm = count($spOffsets) - 1; // number of shapes excluding first shape + for ($i = 1; $i <= $nm; ++$i) { + // MSODRAWING record + $record = 0x00EC; // Record identifier + + // chunk of Escher stream for one shape + $dataChunk = substr($data, $spOffsets[$i -1], $spOffsets[$i] - $spOffsets[$i - 1]); + + $length = strlen($dataChunk); + $header = pack("vv", $record, $length); + + $this->_append($header . $dataChunk); + + // OBJ record + $record = 0x005D; // record identifier + $objData = ''; + + // ftCmo + if($spTypes[$i] == 0x00C9){ + // Add ftCmo (common object data) subobject + $objData .= + pack('vvvvvVVV' + , 0x0015 // 0x0015 = ftCmo + , 0x0012 // length of ftCmo data + , 0x0014 // object type, 0x0014 = filter + , $i // object id number, Excel seems to use 1-based index, local for the sheet + , 0x2101 // option flags, 0x2001 is what OpenOffice.org uses + , 0 // reserved + , 0 // reserved + , 0 // reserved + ); + + // Add ftSbs Scroll bar subobject + $objData .= pack('vv', 0x00C, 0x0014); + $objData .= pack('H*', '0000000000000000640001000A00000010000100'); + // Add ftLbsData (List box data) subobject + $objData .= pack('vv', 0x0013, 0x1FEE); + $objData .= pack('H*', '00000000010001030000020008005700'); + } + else { + // Add ftCmo (common object data) subobject + $objData .= + pack('vvvvvVVV' + , 0x0015 // 0x0015 = ftCmo + , 0x0012 // length of ftCmo data + , 0x0008 // object type, 0x0008 = picture + , $i // object id number, Excel seems to use 1-based index, local for the sheet + , 0x6011 // option flags, 0x6011 is what OpenOffice.org uses + , 0 // reserved + , 0 // reserved + , 0 // reserved + ); + } + + // ftEnd + $objData .= + pack('vv' + , 0x0000 // 0x0000 = ftEnd + , 0x0000 // length of ftEnd data + ); + + $length = strlen($objData); + $header = pack('vv', $record, $length); + $this->_append($header . $objData); + } + } + } + + /** + * Store the DATAVALIDATIONS and DATAVALIDATION records. + */ + private function _writeDataValidity() + { + // Datavalidation collection + $dataValidationCollection = $this->_phpSheet->getDataValidationCollection(); + + // Write data validations? + if (!empty($dataValidationCollection)) { + + // DATAVALIDATIONS record + $record = 0x01B2; // Record identifier + $length = 0x0012; // Bytes to follow + + $grbit = 0x0000; // Prompt box at cell, no cached validity data at DV records + $horPos = 0x00000000; // Horizontal position of prompt box, if fixed position + $verPos = 0x00000000; // Vertical position of prompt box, if fixed position + $objId = 0xFFFFFFFF; // Object identifier of drop down arrow object, or -1 if not visible + + $header = pack('vv', $record, $length); + $data = pack('vVVVV', $grbit, $horPos, $verPos, $objId, + count($dataValidationCollection)); + $this->_append($header.$data); + + // DATAVALIDATION records + $record = 0x01BE; // Record identifier + + foreach ($dataValidationCollection as $cellCoordinate => $dataValidation) { + // initialize record data + $data = ''; + + // options + $options = 0x00000000; + + // data type + $type = $dataValidation->getType(); + switch ($type) { + case PHPExcel_Cell_DataValidation::TYPE_NONE: $type = 0x00; break; + case PHPExcel_Cell_DataValidation::TYPE_WHOLE: $type = 0x01; break; + case PHPExcel_Cell_DataValidation::TYPE_DECIMAL: $type = 0x02; break; + case PHPExcel_Cell_DataValidation::TYPE_LIST: $type = 0x03; break; + case PHPExcel_Cell_DataValidation::TYPE_DATE: $type = 0x04; break; + case PHPExcel_Cell_DataValidation::TYPE_TIME: $type = 0x05; break; + case PHPExcel_Cell_DataValidation::TYPE_TEXTLENGTH: $type = 0x06; break; + case PHPExcel_Cell_DataValidation::TYPE_CUSTOM: $type = 0x07; break; + } + $options |= $type << 0; + + // error style + $errorStyle = $dataValidation->getType(); + switch ($errorStyle) { + case PHPExcel_Cell_DataValidation::STYLE_STOP: $errorStyle = 0x00; break; + case PHPExcel_Cell_DataValidation::STYLE_WARNING: $errorStyle = 0x01; break; + case PHPExcel_Cell_DataValidation::STYLE_INFORMATION: $errorStyle = 0x02; break; + } + $options |= $errorStyle << 4; + + // explicit formula? + if ($type == 0x03 && preg_match('/^\".*\"$/', $dataValidation->getFormula1())) { + $options |= 0x01 << 7; + } + + // empty cells allowed + $options |= $dataValidation->getAllowBlank() << 8; + + // show drop down + $options |= (!$dataValidation->getShowDropDown()) << 9; + + // show input message + $options |= $dataValidation->getShowInputMessage() << 18; + + // show error message + $options |= $dataValidation->getShowErrorMessage() << 19; + + // condition operator + $operator = $dataValidation->getOperator(); + switch ($operator) { + case PHPExcel_Cell_DataValidation::OPERATOR_BETWEEN: $operator = 0x00 ; break; + case PHPExcel_Cell_DataValidation::OPERATOR_NOTBETWEEN: $operator = 0x01 ; break; + case PHPExcel_Cell_DataValidation::OPERATOR_EQUAL: $operator = 0x02 ; break; + case PHPExcel_Cell_DataValidation::OPERATOR_NOTEQUAL: $operator = 0x03 ; break; + case PHPExcel_Cell_DataValidation::OPERATOR_GREATERTHAN: $operator = 0x04 ; break; + case PHPExcel_Cell_DataValidation::OPERATOR_LESSTHAN: $operator = 0x05 ; break; + case PHPExcel_Cell_DataValidation::OPERATOR_GREATERTHANOREQUAL: $operator = 0x06; break; + case PHPExcel_Cell_DataValidation::OPERATOR_LESSTHANOREQUAL: $operator = 0x07 ; break; + } + $options |= $operator << 20; + + $data = pack('V', $options); + + // prompt title + $promptTitle = $dataValidation->getPromptTitle() !== '' ? + $dataValidation->getPromptTitle() : chr(0); + $data .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($promptTitle); + + // error title + $errorTitle = $dataValidation->getErrorTitle() !== '' ? + $dataValidation->getErrorTitle() : chr(0); + $data .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($errorTitle); + + // prompt text + $prompt = $dataValidation->getPrompt() !== '' ? + $dataValidation->getPrompt() : chr(0); + $data .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($prompt); + + // error text + $error = $dataValidation->getError() !== '' ? + $dataValidation->getError() : chr(0); + $data .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($error); + + // formula 1 + try { + $formula1 = $dataValidation->getFormula1(); + if ($type == 0x03) { // list type + $formula1 = str_replace(',', chr(0), $formula1); + } + $this->_parser->parse($formula1); + $formula1 = $this->_parser->toReversePolish(); + $sz1 = strlen($formula1); + + } catch(PHPExcel_Exception $e) { + $sz1 = 0; + $formula1 = ''; + } + $data .= pack('vv', $sz1, 0x0000); + $data .= $formula1; + + // formula 2 + try { + $formula2 = $dataValidation->getFormula2(); + if ($formula2 === '') { + throw new PHPExcel_Writer_Exception('No formula2'); + } + $this->_parser->parse($formula2); + $formula2 = $this->_parser->toReversePolish(); + $sz2 = strlen($formula2); + + } catch(PHPExcel_Exception $e) { + $sz2 = 0; + $formula2 = ''; + } + $data .= pack('vv', $sz2, 0x0000); + $data .= $formula2; + + // cell range address list + $data .= pack('v', 0x0001); + $data .= $this->_writeBIFF8CellRangeAddressFixed($cellCoordinate); + + $length = strlen($data); + $header = pack("vv", $record, $length); + + $this->_append($header . $data); + } + } + } + + /** + * Map Error code + * + * @param string $errorCode + * @return int + */ + private static function _mapErrorCode($errorCode) { + switch ($errorCode) { + case '#NULL!': return 0x00; + case '#DIV/0!': return 0x07; + case '#VALUE!': return 0x0F; + case '#REF!': return 0x17; + case '#NAME?': return 0x1D; + case '#NUM!': return 0x24; + case '#N/A': return 0x2A; + } + + return 0; + } + + /** + * Write PLV Record + */ + private function _writePageLayoutView(){ + $record = 0x088B; // Record identifier + $length = 0x0010; // Bytes to follow + + $rt = 0x088B; // 2 + $grbitFrt = 0x0000; // 2 + $reserved = 0x0000000000000000; // 8 + $wScalvePLV = $this->_phpSheet->getSheetView()->getZoomScale(); // 2 + + // The options flags that comprise $grbit + if($this->_phpSheet->getSheetView()->getView() == PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_LAYOUT){ + $fPageLayoutView = 1; + } else { + $fPageLayoutView = 0; + } + $fRulerVisible = 0; + $fWhitespaceHidden = 0; + + $grbit = $fPageLayoutView; // 2 + $grbit |= $fRulerVisible << 1; + $grbit |= $fWhitespaceHidden << 3; + + $header = pack("vv", $record, $length); + $data = pack("vvVVvv", $rt, $grbitFrt, 0x00000000, 0x00000000, $wScalvePLV, $grbit); + $this->_append($header . $data); + } + + /** + * Write CFRule Record + * @param PHPExcel_Style_Conditional $conditional + */ + private function _writeCFRule(PHPExcel_Style_Conditional $conditional){ + $record = 0x01B1; // Record identifier + + // $type : Type of the CF + // $operatorType : Comparison operator + if($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_EXPRESSION){ + $type = 0x02; + $operatorType = 0x00; + } else if($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CELLIS){ + $type = 0x01; + + switch ($conditional->getOperatorType()){ + case PHPExcel_Style_Conditional::OPERATOR_NONE: + $operatorType = 0x00; + break; + case PHPExcel_Style_Conditional::OPERATOR_EQUAL: + $operatorType = 0x03; + break; + case PHPExcel_Style_Conditional::OPERATOR_GREATERTHAN: + $operatorType = 0x05; + break; + case PHPExcel_Style_Conditional::OPERATOR_GREATERTHANOREQUAL: + $operatorType = 0x07; + break; + case PHPExcel_Style_Conditional::OPERATOR_LESSTHAN: + $operatorType = 0x06; + break; + case PHPExcel_Style_Conditional::OPERATOR_LESSTHANOREQUAL: + $operatorType = 0x08; + break; + case PHPExcel_Style_Conditional::OPERATOR_NOTEQUAL: + $operatorType = 0x04; + break; + case PHPExcel_Style_Conditional::OPERATOR_BETWEEN: + $operatorType = 0x01; + break; + // not OPERATOR_NOTBETWEEN 0x02 + } + } + + // $szValue1 : size of the formula data for first value or formula + // $szValue2 : size of the formula data for second value or formula + $arrConditions = $conditional->getConditions(); + $numConditions = sizeof($arrConditions); + if($numConditions == 1){ + $szValue1 = ($arrConditions[0] <= 65535 ? 3 : 0x0000); + $szValue2 = 0x0000; + $operand1 = pack('Cv', 0x1E, $arrConditions[0]); + $operand2 = null; + } else if($numConditions == 2 && ($conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_BETWEEN)){ + $szValue1 = ($arrConditions[0] <= 65535 ? 3 : 0x0000); + $szValue2 = ($arrConditions[1] <= 65535 ? 3 : 0x0000); + $operand1 = pack('Cv', 0x1E, $arrConditions[0]); + $operand2 = pack('Cv', 0x1E, $arrConditions[1]); + } else { + $szValue1 = 0x0000; + $szValue2 = 0x0000; + $operand1 = null; + $operand2 = null; + } + + // $flags : Option flags + // Alignment + $bAlignHz = ($conditional->getStyle()->getAlignment()->getHorizontal() == null ? 1 : 0); + $bAlignVt = ($conditional->getStyle()->getAlignment()->getVertical() == null ? 1 : 0); + $bAlignWrapTx = ($conditional->getStyle()->getAlignment()->getWrapText() == false ? 1 : 0); + $bTxRotation = ($conditional->getStyle()->getAlignment()->getTextRotation() == null ? 1 : 0); + $bIndent = ($conditional->getStyle()->getAlignment()->getIndent() == 0 ? 1 : 0); + $bShrinkToFit = ($conditional->getStyle()->getAlignment()->getShrinkToFit() == false ? 1 : 0); + if($bAlignHz == 0 || $bAlignVt == 0 || $bAlignWrapTx == 0 || $bTxRotation == 0 || $bIndent == 0 || $bShrinkToFit == 0){ + $bFormatAlign = 1; + } else { + $bFormatAlign = 0; + } + // Protection + $bProtLocked = ($conditional->getStyle()->getProtection()->getLocked() == null ? 1 : 0); + $bProtHidden = ($conditional->getStyle()->getProtection()->getHidden() == null ? 1 : 0); + if($bProtLocked == 0 || $bProtHidden == 0){ + $bFormatProt = 1; + } else { + $bFormatProt = 0; + } + // Border + $bBorderLeft = ($conditional->getStyle()->getBorders()->getLeft()->getColor()->getARGB() == PHPExcel_Style_Color::COLOR_BLACK + && $conditional->getStyle()->getBorders()->getLeft()->getBorderStyle() == PHPExcel_Style_Border::BORDER_NONE ? 1 : 0); + $bBorderRight = ($conditional->getStyle()->getBorders()->getRight()->getColor()->getARGB() == PHPExcel_Style_Color::COLOR_BLACK + && $conditional->getStyle()->getBorders()->getRight()->getBorderStyle() == PHPExcel_Style_Border::BORDER_NONE ? 1 : 0); + $bBorderTop = ($conditional->getStyle()->getBorders()->getTop()->getColor()->getARGB() == PHPExcel_Style_Color::COLOR_BLACK + && $conditional->getStyle()->getBorders()->getTop()->getBorderStyle() == PHPExcel_Style_Border::BORDER_NONE ? 1 : 0); + $bBorderBottom = ($conditional->getStyle()->getBorders()->getBottom()->getColor()->getARGB() == PHPExcel_Style_Color::COLOR_BLACK + && $conditional->getStyle()->getBorders()->getBottom()->getBorderStyle() == PHPExcel_Style_Border::BORDER_NONE ? 1 : 0); + if($bBorderLeft == 0 || $bBorderRight == 0 || $bBorderTop == 0 || $bBorderBottom == 0){ + $bFormatBorder = 1; + } else { + $bFormatBorder = 0; + } + // Pattern + $bFillStyle = ($conditional->getStyle()->getFill()->getFillType() == null ? 0 : 1); + $bFillColor = ($conditional->getStyle()->getFill()->getStartColor()->getARGB() == null ? 0 : 1); + $bFillColorBg = ($conditional->getStyle()->getFill()->getEndColor()->getARGB() == null ? 0 : 1); + if($bFillStyle == 0 || $bFillColor == 0 || $bFillColorBg == 0){ + $bFormatFill = 1; + } else { + $bFormatFill = 0; + } + // Font + if($conditional->getStyle()->getFont()->getName() != null + || $conditional->getStyle()->getFont()->getSize() != null + || $conditional->getStyle()->getFont()->getBold() != null + || $conditional->getStyle()->getFont()->getItalic() != null + || $conditional->getStyle()->getFont()->getSuperScript() != null + || $conditional->getStyle()->getFont()->getSubScript() != null + || $conditional->getStyle()->getFont()->getUnderline() != null + || $conditional->getStyle()->getFont()->getStrikethrough() != null + || $conditional->getStyle()->getFont()->getColor()->getARGB() != null){ + $bFormatFont = 1; + } else { + $bFormatFont = 0; + } + // Alignment + $flags = 0; + $flags |= (1 == $bAlignHz ? 0x00000001 : 0); + $flags |= (1 == $bAlignVt ? 0x00000002 : 0); + $flags |= (1 == $bAlignWrapTx ? 0x00000004 : 0); + $flags |= (1 == $bTxRotation ? 0x00000008 : 0); + // Justify last line flag + $flags |= (1 == 1 ? 0x00000010 : 0); + $flags |= (1 == $bIndent ? 0x00000020 : 0); + $flags |= (1 == $bShrinkToFit ? 0x00000040 : 0); + // Default + $flags |= (1 == 1 ? 0x00000080 : 0); + // Protection + $flags |= (1 == $bProtLocked ? 0x00000100 : 0); + $flags |= (1 == $bProtHidden ? 0x00000200 : 0); + // Border + $flags |= (1 == $bBorderLeft ? 0x00000400 : 0); + $flags |= (1 == $bBorderRight ? 0x00000800 : 0); + $flags |= (1 == $bBorderTop ? 0x00001000 : 0); + $flags |= (1 == $bBorderBottom ? 0x00002000 : 0); + $flags |= (1 == 1 ? 0x00004000 : 0); // Top left to Bottom right border + $flags |= (1 == 1 ? 0x00008000 : 0); // Bottom left to Top right border + // Pattern + $flags |= (1 == $bFillStyle ? 0x00010000 : 0); + $flags |= (1 == $bFillColor ? 0x00020000 : 0); + $flags |= (1 == $bFillColorBg ? 0x00040000 : 0); + $flags |= (1 == 1 ? 0x00380000 : 0); + // Font + $flags |= (1 == $bFormatFont ? 0x04000000 : 0); + // Alignment : + $flags |= (1 == $bFormatAlign ? 0x08000000 : 0); + // Border + $flags |= (1 == $bFormatBorder ? 0x10000000 : 0); + // Pattern + $flags |= (1 == $bFormatFill ? 0x20000000 : 0); + // Protection + $flags |= (1 == $bFormatProt ? 0x40000000 : 0); + // Text direction + $flags |= (1 == 0 ? 0x80000000 : 0); + + // Data Blocks + if($bFormatFont == 1){ + // Font Name + if($conditional->getStyle()->getFont()->getName() == null){ + $dataBlockFont = pack('VVVVVVVV', 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000); + $dataBlockFont .= pack('VVVVVVVV', 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000); + } else { + $dataBlockFont = PHPExcel_Shared_String::UTF8toBIFF8UnicodeLong($conditional->getStyle()->getFont()->getName()); + } + // Font Size + if($conditional->getStyle()->getFont()->getSize() == null){ + $dataBlockFont .= pack('V', 20 * 11); + } else { + $dataBlockFont .= pack('V', 20 * $conditional->getStyle()->getFont()->getSize()); + } + // Font Options + $dataBlockFont .= pack('V', 0); + // Font weight + if($conditional->getStyle()->getFont()->getBold() == true){ + $dataBlockFont .= pack('v', 0x02BC); + } else { + $dataBlockFont .= pack('v', 0x0190); + } + // Escapement type + if($conditional->getStyle()->getFont()->getSubScript() == true){ + $dataBlockFont .= pack('v', 0x02); + $fontEscapement = 0; + } else if($conditional->getStyle()->getFont()->getSuperScript() == true){ + $dataBlockFont .= pack('v', 0x01); + $fontEscapement = 0; + } else { + $dataBlockFont .= pack('v', 0x00); + $fontEscapement = 1; + } + // Underline type + switch ($conditional->getStyle()->getFont()->getUnderline()){ + case PHPExcel_Style_Font::UNDERLINE_NONE : $dataBlockFont .= pack('C', 0x00); $fontUnderline = 0; break; + case PHPExcel_Style_Font::UNDERLINE_DOUBLE : $dataBlockFont .= pack('C', 0x02); $fontUnderline = 0; break; + case PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING : $dataBlockFont .= pack('C', 0x22); $fontUnderline = 0; break; + case PHPExcel_Style_Font::UNDERLINE_SINGLE : $dataBlockFont .= pack('C', 0x01); $fontUnderline = 0; break; + case PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING : $dataBlockFont .= pack('C', 0x21); $fontUnderline = 0; break; + default : $dataBlockFont .= pack('C', 0x00); $fontUnderline = 1; break; + } + // Not used (3) + $dataBlockFont .= pack('vC', 0x0000, 0x00); + // Font color index + switch ($conditional->getStyle()->getFont()->getColor()->getRGB()) { + case '000000': $colorIdx = 0x08; break; + case 'FFFFFF': $colorIdx = 0x09; break; + case 'FF0000': $colorIdx = 0x0A; break; + case '00FF00': $colorIdx = 0x0B; break; + case '0000FF': $colorIdx = 0x0C; break; + case 'FFFF00': $colorIdx = 0x0D; break; + case 'FF00FF': $colorIdx = 0x0E; break; + case '00FFFF': $colorIdx = 0x0F; break; + case '800000': $colorIdx = 0x10; break; + case '008000': $colorIdx = 0x11; break; + case '000080': $colorIdx = 0x12; break; + case '808000': $colorIdx = 0x13; break; + case '800080': $colorIdx = 0x14; break; + case '008080': $colorIdx = 0x15; break; + case 'C0C0C0': $colorIdx = 0x16; break; + case '808080': $colorIdx = 0x17; break; + case '9999FF': $colorIdx = 0x18; break; + case '993366': $colorIdx = 0x19; break; + case 'FFFFCC': $colorIdx = 0x1A; break; + case 'CCFFFF': $colorIdx = 0x1B; break; + case '660066': $colorIdx = 0x1C; break; + case 'FF8080': $colorIdx = 0x1D; break; + case '0066CC': $colorIdx = 0x1E; break; + case 'CCCCFF': $colorIdx = 0x1F; break; + case '000080': $colorIdx = 0x20; break; + case 'FF00FF': $colorIdx = 0x21; break; + case 'FFFF00': $colorIdx = 0x22; break; + case '00FFFF': $colorIdx = 0x23; break; + case '800080': $colorIdx = 0x24; break; + case '800000': $colorIdx = 0x25; break; + case '008080': $colorIdx = 0x26; break; + case '0000FF': $colorIdx = 0x27; break; + case '00CCFF': $colorIdx = 0x28; break; + case 'CCFFFF': $colorIdx = 0x29; break; + case 'CCFFCC': $colorIdx = 0x2A; break; + case 'FFFF99': $colorIdx = 0x2B; break; + case '99CCFF': $colorIdx = 0x2C; break; + case 'FF99CC': $colorIdx = 0x2D; break; + case 'CC99FF': $colorIdx = 0x2E; break; + case 'FFCC99': $colorIdx = 0x2F; break; + case '3366FF': $colorIdx = 0x30; break; + case '33CCCC': $colorIdx = 0x31; break; + case '99CC00': $colorIdx = 0x32; break; + case 'FFCC00': $colorIdx = 0x33; break; + case 'FF9900': $colorIdx = 0x34; break; + case 'FF6600': $colorIdx = 0x35; break; + case '666699': $colorIdx = 0x36; break; + case '969696': $colorIdx = 0x37; break; + case '003366': $colorIdx = 0x38; break; + case '339966': $colorIdx = 0x39; break; + case '003300': $colorIdx = 0x3A; break; + case '333300': $colorIdx = 0x3B; break; + case '993300': $colorIdx = 0x3C; break; + case '993366': $colorIdx = 0x3D; break; + case '333399': $colorIdx = 0x3E; break; + case '333333': $colorIdx = 0x3F; break; + default: $colorIdx = 0x00; break; + } + $dataBlockFont .= pack('V', $colorIdx); + // Not used (4) + $dataBlockFont .= pack('V', 0x00000000); + // Options flags for modified font attributes + $optionsFlags = 0; + $optionsFlagsBold = ($conditional->getStyle()->getFont()->getBold() == null ? 1 : 0); + $optionsFlags |= (1 == $optionsFlagsBold ? 0x00000002 : 0); + $optionsFlags |= (1 == 1 ? 0x00000008 : 0); + $optionsFlags |= (1 == 1 ? 0x00000010 : 0); + $optionsFlags |= (1 == 0 ? 0x00000020 : 0); + $optionsFlags |= (1 == 1 ? 0x00000080 : 0); + $dataBlockFont .= pack('V', $optionsFlags); + // Escapement type + $dataBlockFont .= pack('V', $fontEscapement); + // Underline type + $dataBlockFont .= pack('V', $fontUnderline); + // Always + $dataBlockFont .= pack('V', 0x00000000); + // Always + $dataBlockFont .= pack('V', 0x00000000); + // Not used (8) + $dataBlockFont .= pack('VV', 0x00000000, 0x00000000); + // Always + $dataBlockFont .= pack('v', 0x0001); + } + if($bFormatAlign == 1){ + $blockAlign = 0; + // Alignment and text break + switch ($conditional->getStyle()->getAlignment()->getHorizontal()){ + case PHPExcel_Style_Alignment::HORIZONTAL_GENERAL : $blockAlign = 0; break; + case PHPExcel_Style_Alignment::HORIZONTAL_LEFT : $blockAlign = 1; break; + case PHPExcel_Style_Alignment::HORIZONTAL_RIGHT : $blockAlign = 3; break; + case PHPExcel_Style_Alignment::HORIZONTAL_CENTER : $blockAlign = 2; break; + case PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS : $blockAlign = 6; break; + case PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY : $blockAlign = 5; break; + } + if($conditional->getStyle()->getAlignment()->getWrapText() == true){ + $blockAlign |= 1 << 3; + } else { + $blockAlign |= 0 << 3; + } + switch ($conditional->getStyle()->getAlignment()->getVertical()){ + case PHPExcel_Style_Alignment::VERTICAL_BOTTOM : $blockAlign = 2 << 4; break; + case PHPExcel_Style_Alignment::VERTICAL_TOP : $blockAlign = 0 << 4; break; + case PHPExcel_Style_Alignment::VERTICAL_CENTER : $blockAlign = 1 << 4; break; + case PHPExcel_Style_Alignment::VERTICAL_JUSTIFY : $blockAlign = 3 << 4; break; + } + $blockAlign |= 0 << 7; + + // Text rotation angle + $blockRotation = $conditional->getStyle()->getAlignment()->getTextRotation(); + + // Indentation + $blockIndent = $conditional->getStyle()->getAlignment()->getIndent(); + if($conditional->getStyle()->getAlignment()->getShrinkToFit() == true){ + $blockIndent |= 1 << 4; + } else { + $blockIndent |= 0 << 4; + } + $blockIndent |= 0 << 6; + + // Relative indentation + $blockIndentRelative = 255; + + $dataBlockAlign = pack('CCvvv', $blockAlign, $blockRotation, $blockIndent, $blockIndentRelative, 0x0000); + } + if($bFormatBorder == 1){ + $blockLineStyle = 0; + switch ($conditional->getStyle()->getBorders()->getLeft()->getBorderStyle()){ + case PHPExcel_Style_Border::BORDER_NONE : $blockLineStyle |= 0x00; break; + case PHPExcel_Style_Border::BORDER_THIN : $blockLineStyle |= 0x01; break; + case PHPExcel_Style_Border::BORDER_MEDIUM : $blockLineStyle |= 0x02; break; + case PHPExcel_Style_Border::BORDER_DASHED : $blockLineStyle |= 0x03; break; + case PHPExcel_Style_Border::BORDER_DOTTED : $blockLineStyle |= 0x04; break; + case PHPExcel_Style_Border::BORDER_THICK : $blockLineStyle |= 0x05; break; + case PHPExcel_Style_Border::BORDER_DOUBLE : $blockLineStyle |= 0x06; break; + case PHPExcel_Style_Border::BORDER_HAIR : $blockLineStyle |= 0x07; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHED : $blockLineStyle |= 0x08; break; + case PHPExcel_Style_Border::BORDER_DASHDOT : $blockLineStyle |= 0x09; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT : $blockLineStyle |= 0x0A; break; + case PHPExcel_Style_Border::BORDER_DASHDOTDOT : $blockLineStyle |= 0x0B; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT : $blockLineStyle |= 0x0C; break; + case PHPExcel_Style_Border::BORDER_SLANTDASHDOT : $blockLineStyle |= 0x0D; break; + } + switch ($conditional->getStyle()->getBorders()->getRight()->getBorderStyle()){ + case PHPExcel_Style_Border::BORDER_NONE : $blockLineStyle |= 0x00 << 4; break; + case PHPExcel_Style_Border::BORDER_THIN : $blockLineStyle |= 0x01 << 4; break; + case PHPExcel_Style_Border::BORDER_MEDIUM : $blockLineStyle |= 0x02 << 4; break; + case PHPExcel_Style_Border::BORDER_DASHED : $blockLineStyle |= 0x03 << 4; break; + case PHPExcel_Style_Border::BORDER_DOTTED : $blockLineStyle |= 0x04 << 4; break; + case PHPExcel_Style_Border::BORDER_THICK : $blockLineStyle |= 0x05 << 4; break; + case PHPExcel_Style_Border::BORDER_DOUBLE : $blockLineStyle |= 0x06 << 4; break; + case PHPExcel_Style_Border::BORDER_HAIR : $blockLineStyle |= 0x07 << 4; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHED : $blockLineStyle |= 0x08 << 4; break; + case PHPExcel_Style_Border::BORDER_DASHDOT : $blockLineStyle |= 0x09 << 4; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT : $blockLineStyle |= 0x0A << 4; break; + case PHPExcel_Style_Border::BORDER_DASHDOTDOT : $blockLineStyle |= 0x0B << 4; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT : $blockLineStyle |= 0x0C << 4; break; + case PHPExcel_Style_Border::BORDER_SLANTDASHDOT : $blockLineStyle |= 0x0D << 4; break; + } + switch ($conditional->getStyle()->getBorders()->getTop()->getBorderStyle()){ + case PHPExcel_Style_Border::BORDER_NONE : $blockLineStyle |= 0x00 << 8; break; + case PHPExcel_Style_Border::BORDER_THIN : $blockLineStyle |= 0x01 << 8; break; + case PHPExcel_Style_Border::BORDER_MEDIUM : $blockLineStyle |= 0x02 << 8; break; + case PHPExcel_Style_Border::BORDER_DASHED : $blockLineStyle |= 0x03 << 8; break; + case PHPExcel_Style_Border::BORDER_DOTTED : $blockLineStyle |= 0x04 << 8; break; + case PHPExcel_Style_Border::BORDER_THICK : $blockLineStyle |= 0x05 << 8; break; + case PHPExcel_Style_Border::BORDER_DOUBLE : $blockLineStyle |= 0x06 << 8; break; + case PHPExcel_Style_Border::BORDER_HAIR : $blockLineStyle |= 0x07 << 8; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHED : $blockLineStyle |= 0x08 << 8; break; + case PHPExcel_Style_Border::BORDER_DASHDOT : $blockLineStyle |= 0x09 << 8; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT : $blockLineStyle |= 0x0A << 8; break; + case PHPExcel_Style_Border::BORDER_DASHDOTDOT : $blockLineStyle |= 0x0B << 8; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT : $blockLineStyle |= 0x0C << 8; break; + case PHPExcel_Style_Border::BORDER_SLANTDASHDOT : $blockLineStyle |= 0x0D << 8; break; + } + switch ($conditional->getStyle()->getBorders()->getBottom()->getBorderStyle()){ + case PHPExcel_Style_Border::BORDER_NONE : $blockLineStyle |= 0x00 << 12; break; + case PHPExcel_Style_Border::BORDER_THIN : $blockLineStyle |= 0x01 << 12; break; + case PHPExcel_Style_Border::BORDER_MEDIUM : $blockLineStyle |= 0x02 << 12; break; + case PHPExcel_Style_Border::BORDER_DASHED : $blockLineStyle |= 0x03 << 12; break; + case PHPExcel_Style_Border::BORDER_DOTTED : $blockLineStyle |= 0x04 << 12; break; + case PHPExcel_Style_Border::BORDER_THICK : $blockLineStyle |= 0x05 << 12; break; + case PHPExcel_Style_Border::BORDER_DOUBLE : $blockLineStyle |= 0x06 << 12; break; + case PHPExcel_Style_Border::BORDER_HAIR : $blockLineStyle |= 0x07 << 12; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHED : $blockLineStyle |= 0x08 << 12; break; + case PHPExcel_Style_Border::BORDER_DASHDOT : $blockLineStyle |= 0x09 << 12; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT : $blockLineStyle |= 0x0A << 12; break; + case PHPExcel_Style_Border::BORDER_DASHDOTDOT : $blockLineStyle |= 0x0B << 12; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT : $blockLineStyle |= 0x0C << 12; break; + case PHPExcel_Style_Border::BORDER_SLANTDASHDOT : $blockLineStyle |= 0x0D << 12; break; + } + //@todo _writeCFRule() => $blockLineStyle => Index Color for left line + //@todo _writeCFRule() => $blockLineStyle => Index Color for right line + //@todo _writeCFRule() => $blockLineStyle => Top-left to bottom-right on/off + //@todo _writeCFRule() => $blockLineStyle => Bottom-left to top-right on/off + $blockColor = 0; + //@todo _writeCFRule() => $blockColor => Index Color for top line + //@todo _writeCFRule() => $blockColor => Index Color for bottom line + //@todo _writeCFRule() => $blockColor => Index Color for diagonal line + switch ($conditional->getStyle()->getBorders()->getDiagonal()->getBorderStyle()){ + case PHPExcel_Style_Border::BORDER_NONE : $blockColor |= 0x00 << 21; break; + case PHPExcel_Style_Border::BORDER_THIN : $blockColor |= 0x01 << 21; break; + case PHPExcel_Style_Border::BORDER_MEDIUM : $blockColor |= 0x02 << 21; break; + case PHPExcel_Style_Border::BORDER_DASHED : $blockColor |= 0x03 << 21; break; + case PHPExcel_Style_Border::BORDER_DOTTED : $blockColor |= 0x04 << 21; break; + case PHPExcel_Style_Border::BORDER_THICK : $blockColor |= 0x05 << 21; break; + case PHPExcel_Style_Border::BORDER_DOUBLE : $blockColor |= 0x06 << 21; break; + case PHPExcel_Style_Border::BORDER_HAIR : $blockColor |= 0x07 << 21; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHED : $blockColor |= 0x08 << 21; break; + case PHPExcel_Style_Border::BORDER_DASHDOT : $blockColor |= 0x09 << 21; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT : $blockColor |= 0x0A << 21; break; + case PHPExcel_Style_Border::BORDER_DASHDOTDOT : $blockColor |= 0x0B << 21; break; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT : $blockColor |= 0x0C << 21; break; + case PHPExcel_Style_Border::BORDER_SLANTDASHDOT : $blockColor |= 0x0D << 21; break; + } + $dataBlockBorder = pack('vv', $blockLineStyle, $blockColor); + } + if($bFormatFill == 1){ + // Fill Patern Style + $blockFillPatternStyle = 0; + switch ($conditional->getStyle()->getFill()->getFillType()){ + case PHPExcel_Style_Fill::FILL_NONE : $blockFillPatternStyle = 0x00; break; + case PHPExcel_Style_Fill::FILL_SOLID : $blockFillPatternStyle = 0x01; break; + case PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY : $blockFillPatternStyle = 0x02; break; + case PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY : $blockFillPatternStyle = 0x03; break; + case PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY : $blockFillPatternStyle = 0x04; break; + case PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL : $blockFillPatternStyle = 0x05; break; + case PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL : $blockFillPatternStyle = 0x06; break; + case PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN : $blockFillPatternStyle = 0x07; break; + case PHPExcel_Style_Fill::FILL_PATTERN_DARKUP : $blockFillPatternStyle = 0x08; break; + case PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID : $blockFillPatternStyle = 0x09; break; + case PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS : $blockFillPatternStyle = 0x0A; break; + case PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL : $blockFillPatternStyle = 0x0B; break; + case PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL : $blockFillPatternStyle = 0x0C; break; + case PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN : $blockFillPatternStyle = 0x0D; break; + case PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP : $blockFillPatternStyle = 0x0E; break; + case PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID : $blockFillPatternStyle = 0x0F; break; + case PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS : $blockFillPatternStyle = 0x10; break; + case PHPExcel_Style_Fill::FILL_PATTERN_GRAY125 : $blockFillPatternStyle = 0x11; break; + case PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625 : $blockFillPatternStyle = 0x12; break; + case PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR : $blockFillPatternStyle = 0x00; break; // does not exist in BIFF8 + case PHPExcel_Style_Fill::FILL_GRADIENT_PATH : $blockFillPatternStyle = 0x00; break; // does not exist in BIFF8 + default : $blockFillPatternStyle = 0x00; break; + } + // Color + switch ($conditional->getStyle()->getFill()->getStartColor()->getRGB()) { + case '000000': $colorIdxBg = 0x08; break; + case 'FFFFFF': $colorIdxBg = 0x09; break; + case 'FF0000': $colorIdxBg = 0x0A; break; + case '00FF00': $colorIdxBg = 0x0B; break; + case '0000FF': $colorIdxBg = 0x0C; break; + case 'FFFF00': $colorIdxBg = 0x0D; break; + case 'FF00FF': $colorIdxBg = 0x0E; break; + case '00FFFF': $colorIdxBg = 0x0F; break; + case '800000': $colorIdxBg = 0x10; break; + case '008000': $colorIdxBg = 0x11; break; + case '000080': $colorIdxBg = 0x12; break; + case '808000': $colorIdxBg = 0x13; break; + case '800080': $colorIdxBg = 0x14; break; + case '008080': $colorIdxBg = 0x15; break; + case 'C0C0C0': $colorIdxBg = 0x16; break; + case '808080': $colorIdxBg = 0x17; break; + case '9999FF': $colorIdxBg = 0x18; break; + case '993366': $colorIdxBg = 0x19; break; + case 'FFFFCC': $colorIdxBg = 0x1A; break; + case 'CCFFFF': $colorIdxBg = 0x1B; break; + case '660066': $colorIdxBg = 0x1C; break; + case 'FF8080': $colorIdxBg = 0x1D; break; + case '0066CC': $colorIdxBg = 0x1E; break; + case 'CCCCFF': $colorIdxBg = 0x1F; break; + case '000080': $colorIdxBg = 0x20; break; + case 'FF00FF': $colorIdxBg = 0x21; break; + case 'FFFF00': $colorIdxBg = 0x22; break; + case '00FFFF': $colorIdxBg = 0x23; break; + case '800080': $colorIdxBg = 0x24; break; + case '800000': $colorIdxBg = 0x25; break; + case '008080': $colorIdxBg = 0x26; break; + case '0000FF': $colorIdxBg = 0x27; break; + case '00CCFF': $colorIdxBg = 0x28; break; + case 'CCFFFF': $colorIdxBg = 0x29; break; + case 'CCFFCC': $colorIdxBg = 0x2A; break; + case 'FFFF99': $colorIdxBg = 0x2B; break; + case '99CCFF': $colorIdxBg = 0x2C; break; + case 'FF99CC': $colorIdxBg = 0x2D; break; + case 'CC99FF': $colorIdxBg = 0x2E; break; + case 'FFCC99': $colorIdxBg = 0x2F; break; + case '3366FF': $colorIdxBg = 0x30; break; + case '33CCCC': $colorIdxBg = 0x31; break; + case '99CC00': $colorIdxBg = 0x32; break; + case 'FFCC00': $colorIdxBg = 0x33; break; + case 'FF9900': $colorIdxBg = 0x34; break; + case 'FF6600': $colorIdxBg = 0x35; break; + case '666699': $colorIdxBg = 0x36; break; + case '969696': $colorIdxBg = 0x37; break; + case '003366': $colorIdxBg = 0x38; break; + case '339966': $colorIdxBg = 0x39; break; + case '003300': $colorIdxBg = 0x3A; break; + case '333300': $colorIdxBg = 0x3B; break; + case '993300': $colorIdxBg = 0x3C; break; + case '993366': $colorIdxBg = 0x3D; break; + case '333399': $colorIdxBg = 0x3E; break; + case '333333': $colorIdxBg = 0x3F; break; + default: $colorIdxBg = 0x41; break; + } + // Fg Color + switch ($conditional->getStyle()->getFill()->getEndColor()->getRGB()) { + case '000000': $colorIdxFg = 0x08; break; + case 'FFFFFF': $colorIdxFg = 0x09; break; + case 'FF0000': $colorIdxFg = 0x0A; break; + case '00FF00': $colorIdxFg = 0x0B; break; + case '0000FF': $colorIdxFg = 0x0C; break; + case 'FFFF00': $colorIdxFg = 0x0D; break; + case 'FF00FF': $colorIdxFg = 0x0E; break; + case '00FFFF': $colorIdxFg = 0x0F; break; + case '800000': $colorIdxFg = 0x10; break; + case '008000': $colorIdxFg = 0x11; break; + case '000080': $colorIdxFg = 0x12; break; + case '808000': $colorIdxFg = 0x13; break; + case '800080': $colorIdxFg = 0x14; break; + case '008080': $colorIdxFg = 0x15; break; + case 'C0C0C0': $colorIdxFg = 0x16; break; + case '808080': $colorIdxFg = 0x17; break; + case '9999FF': $colorIdxFg = 0x18; break; + case '993366': $colorIdxFg = 0x19; break; + case 'FFFFCC': $colorIdxFg = 0x1A; break; + case 'CCFFFF': $colorIdxFg = 0x1B; break; + case '660066': $colorIdxFg = 0x1C; break; + case 'FF8080': $colorIdxFg = 0x1D; break; + case '0066CC': $colorIdxFg = 0x1E; break; + case 'CCCCFF': $colorIdxFg = 0x1F; break; + case '000080': $colorIdxFg = 0x20; break; + case 'FF00FF': $colorIdxFg = 0x21; break; + case 'FFFF00': $colorIdxFg = 0x22; break; + case '00FFFF': $colorIdxFg = 0x23; break; + case '800080': $colorIdxFg = 0x24; break; + case '800000': $colorIdxFg = 0x25; break; + case '008080': $colorIdxFg = 0x26; break; + case '0000FF': $colorIdxFg = 0x27; break; + case '00CCFF': $colorIdxFg = 0x28; break; + case 'CCFFFF': $colorIdxFg = 0x29; break; + case 'CCFFCC': $colorIdxFg = 0x2A; break; + case 'FFFF99': $colorIdxFg = 0x2B; break; + case '99CCFF': $colorIdxFg = 0x2C; break; + case 'FF99CC': $colorIdxFg = 0x2D; break; + case 'CC99FF': $colorIdxFg = 0x2E; break; + case 'FFCC99': $colorIdxFg = 0x2F; break; + case '3366FF': $colorIdxFg = 0x30; break; + case '33CCCC': $colorIdxFg = 0x31; break; + case '99CC00': $colorIdxFg = 0x32; break; + case 'FFCC00': $colorIdxFg = 0x33; break; + case 'FF9900': $colorIdxFg = 0x34; break; + case 'FF6600': $colorIdxFg = 0x35; break; + case '666699': $colorIdxFg = 0x36; break; + case '969696': $colorIdxFg = 0x37; break; + case '003366': $colorIdxFg = 0x38; break; + case '339966': $colorIdxFg = 0x39; break; + case '003300': $colorIdxFg = 0x3A; break; + case '333300': $colorIdxFg = 0x3B; break; + case '993300': $colorIdxFg = 0x3C; break; + case '993366': $colorIdxFg = 0x3D; break; + case '333399': $colorIdxFg = 0x3E; break; + case '333333': $colorIdxFg = 0x3F; break; + default: $colorIdxFg = 0x40; break; + } + $dataBlockFill = pack('v', $blockFillPatternStyle); + $dataBlockFill .= pack('v', $colorIdxFg | ($colorIdxBg << 7)); + } + if($bFormatProt == 1){ + $dataBlockProtection = 0; + if($conditional->getStyle()->getProtection()->getLocked() == PHPExcel_Style_Protection::PROTECTION_PROTECTED){ + $dataBlockProtection = 1; + } + if($conditional->getStyle()->getProtection()->getHidden() == PHPExcel_Style_Protection::PROTECTION_PROTECTED){ + $dataBlockProtection = 1 << 1; + } + } + + $data = pack('CCvvVv', $type, $operatorType, $szValue1, $szValue2, $flags, 0x0000); + if($bFormatFont == 1){ // Block Formatting : OK + $data .= $dataBlockFont; + } + if($bFormatAlign == 1){ + $data .= $dataBlockAlign; + } + if($bFormatBorder == 1){ + $data .= $dataBlockBorder; + } + if($bFormatFill == 1){ // Block Formatting : OK + $data .= $dataBlockFill; + } + if($bFormatProt == 1){ + $data .= $dataBlockProtection; + } + if(!is_null($operand1)){ + $data .= $operand1; + } + if(!is_null($operand2)){ + $data .= $operand2; + } + $header = pack('vv', $record, strlen($data)); + $this->_append($header . $data); + } + + /** + * Write CFHeader record + */ + private function _writeCFHeader(){ + $record = 0x01B0; // Record identifier + $length = 0x0016; // Bytes to follow + + $numColumnMin = null; + $numColumnMax = null; + $numRowMin = null; + $numRowMax = null; + $arrConditional = array(); + foreach ($this->_phpSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) { + foreach ($conditionalStyles as $conditional) { + if($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_EXPRESSION + || $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CELLIS){ + if(!in_array($conditional->getHashCode(), $arrConditional)){ + $arrConditional[] = $conditional->getHashCode(); + } + // Cells + $arrCoord = PHPExcel_Cell::coordinateFromString($cellCoordinate); + if(!is_numeric($arrCoord[0])){ + $arrCoord[0] = PHPExcel_Cell::columnIndexFromString($arrCoord[0]); + } + if(is_null($numColumnMin) || ($numColumnMin > $arrCoord[0])){ + $numColumnMin = $arrCoord[0]; + } + if(is_null($numColumnMax) || ($numColumnMax < $arrCoord[0])){ + $numColumnMax = $arrCoord[0]; + } + if(is_null($numRowMin) || ($numRowMin > $arrCoord[1])){ + $numRowMin = $arrCoord[1]; + } + if(is_null($numRowMax) || ($numRowMax < $arrCoord[1])){ + $numRowMax = $arrCoord[1]; + } + } + } + } + $needRedraw = 1; + $cellRange = pack('vvvv', $numRowMin-1, $numRowMax-1, $numColumnMin-1, $numColumnMax-1); + + $header = pack('vv', $record, $length); + $data = pack('vv', count($arrConditional), $needRedraw); + $data .= $cellRange; + $data .= pack('v', 0x0001); + $data .= $cellRange; + $this->_append($header . $data); + } +} \ No newline at end of file diff --git a/PHPExcel/Writer/Excel5/Xf.php b/PHPExcel/Writer/Excel5/Xf.php new file mode 100644 index 0000000..f803f68 --- /dev/null +++ b/PHPExcel/Writer/Excel5/Xf.php @@ -0,0 +1,547 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + +// Original file header of PEAR::Spreadsheet_Excel_Writer_Format (used as the base for this class): +// ----------------------------------------------------------------------------------------- +// /* +// * Module written/ported by Xavier Noguer <xnoguer@rezebra.com> +// * +// * The majority of this is _NOT_ my code. I simply ported it from the +// * PERL Spreadsheet::WriteExcel module. +// * +// * The author of the Spreadsheet::WriteExcel module is John McNamara +// * <jmcnamara@cpan.org> +// * +// * I _DO_ maintain this code, and John McNamara has nothing to do with the +// * porting of this code to PHP. Any questions directly related to this +// * class library should be directed to me. +// * +// * License Information: +// * +// * Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets +// * Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 2.1 of the License, or (at your option) any later version. +// * +// * This library is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library; if not, write to the Free Software +// * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// */ + + +/** + * PHPExcel_Writer_Excel5_Xf + * + * @category PHPExcel + * @package PHPExcel_Writer_Excel5 + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Excel5_Xf +{ + /** + * Style XF or a cell XF ? + * + * @var boolean + */ + private $_isStyleXf; + + /** + * Index to the FONT record. Index 4 does not exist + * @var integer + */ + private $_fontIndex; + + /** + * An index (2 bytes) to a FORMAT record (number format). + * @var integer + */ + public $_numberFormatIndex; + + /** + * 1 bit, apparently not used. + * @var integer + */ + public $_text_justlast; + + /** + * The cell's foreground color. + * @var integer + */ + public $_fg_color; + + /** + * The cell's background color. + * @var integer + */ + public $_bg_color; + + /** + * Color of the bottom border of the cell. + * @var integer + */ + public $_bottom_color; + + /** + * Color of the top border of the cell. + * @var integer + */ + public $_top_color; + + /** + * Color of the left border of the cell. + * @var integer + */ + public $_left_color; + + /** + * Color of the right border of the cell. + * @var integer + */ + public $_right_color; + + /** + * Constructor + * + * @access public + * @param PHPExcel_Style The XF format + */ + public function __construct(PHPExcel_Style $style = null) + { + $this->_isStyleXf = false; + $this->_fontIndex = 0; + + $this->_numberFormatIndex = 0; + + $this->_text_justlast = 0; + + $this->_fg_color = 0x40; + $this->_bg_color = 0x41; + + $this->_diag = 0; + + $this->_bottom_color = 0x40; + $this->_top_color = 0x40; + $this->_left_color = 0x40; + $this->_right_color = 0x40; + $this->_diag_color = 0x40; + $this->_style = $style; + + } + + + /** + * Generate an Excel BIFF XF record (style or cell). + * + * @return string The XF record + */ + function writeXf() + { + // Set the type of the XF record and some of the attributes. + if ($this->_isStyleXf) { + $style = 0xFFF5; + } else { + $style = self::_mapLocked($this->_style->getProtection()->getLocked()); + $style |= self::_mapHidden($this->_style->getProtection()->getHidden()) << 1; + } + + // Flags to indicate if attributes have been set. + $atr_num = ($this->_numberFormatIndex != 0)?1:0; + $atr_fnt = ($this->_fontIndex != 0)?1:0; + $atr_alc = ((int) $this->_style->getAlignment()->getWrapText()) ? 1 : 0; + $atr_bdr = (self::_mapBorderStyle($this->_style->getBorders()->getBottom()->getBorderStyle()) || + self::_mapBorderStyle($this->_style->getBorders()->getTop()->getBorderStyle()) || + self::_mapBorderStyle($this->_style->getBorders()->getLeft()->getBorderStyle()) || + self::_mapBorderStyle($this->_style->getBorders()->getRight()->getBorderStyle()))?1:0; + $atr_pat = (($this->_fg_color != 0x40) || + ($this->_bg_color != 0x41) || + self::_mapFillType($this->_style->getFill()->getFillType()))?1:0; + $atr_prot = self::_mapLocked($this->_style->getProtection()->getLocked()) + | self::_mapHidden($this->_style->getProtection()->getHidden()); + + // Zero the default border colour if the border has not been set. + if (self::_mapBorderStyle($this->_style->getBorders()->getBottom()->getBorderStyle()) == 0) { + $this->_bottom_color = 0; + } + if (self::_mapBorderStyle($this->_style->getBorders()->getTop()->getBorderStyle()) == 0) { + $this->_top_color = 0; + } + if (self::_mapBorderStyle($this->_style->getBorders()->getRight()->getBorderStyle()) == 0) { + $this->_right_color = 0; + } + if (self::_mapBorderStyle($this->_style->getBorders()->getLeft()->getBorderStyle()) == 0) { + $this->_left_color = 0; + } + if (self::_mapBorderStyle($this->_style->getBorders()->getDiagonal()->getBorderStyle()) == 0) { + $this->_diag_color = 0; + } + + $record = 0x00E0; // Record identifier + $length = 0x0014; // Number of bytes to follow + + $ifnt = $this->_fontIndex; // Index to FONT record + $ifmt = $this->_numberFormatIndex; // Index to FORMAT record + + $align = $this->_mapHAlign($this->_style->getAlignment()->getHorizontal()); // Alignment + $align |= (int) $this->_style->getAlignment()->getWrapText() << 3; + $align |= self::_mapVAlign($this->_style->getAlignment()->getVertical()) << 4; + $align |= $this->_text_justlast << 7; + + $used_attrib = $atr_num << 2; + $used_attrib |= $atr_fnt << 3; + $used_attrib |= $atr_alc << 4; + $used_attrib |= $atr_bdr << 5; + $used_attrib |= $atr_pat << 6; + $used_attrib |= $atr_prot << 7; + + $icv = $this->_fg_color; // fg and bg pattern colors + $icv |= $this->_bg_color << 7; + + $border1 = self::_mapBorderStyle($this->_style->getBorders()->getLeft()->getBorderStyle()); // Border line style and color + $border1 |= self::_mapBorderStyle($this->_style->getBorders()->getRight()->getBorderStyle()) << 4; + $border1 |= self::_mapBorderStyle($this->_style->getBorders()->getTop()->getBorderStyle()) << 8; + $border1 |= self::_mapBorderStyle($this->_style->getBorders()->getBottom()->getBorderStyle()) << 12; + $border1 |= $this->_left_color << 16; + $border1 |= $this->_right_color << 23; + + $diagonalDirection = $this->_style->getBorders()->getDiagonalDirection(); + $diag_tl_to_rb = $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_BOTH + || $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_DOWN; + $diag_tr_to_lb = $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_BOTH + || $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_UP; + $border1 |= $diag_tl_to_rb << 30; + $border1 |= $diag_tr_to_lb << 31; + + $border2 = $this->_top_color; // Border color + $border2 |= $this->_bottom_color << 7; + $border2 |= $this->_diag_color << 14; + $border2 |= self::_mapBorderStyle($this->_style->getBorders()->getDiagonal()->getBorderStyle()) << 21; + $border2 |= self::_mapFillType($this->_style->getFill()->getFillType()) << 26; + + $header = pack("vv", $record, $length); + + //BIFF8 options: identation, shrinkToFit and text direction + $biff8_options = $this->_style->getAlignment()->getIndent(); + $biff8_options |= (int) $this->_style->getAlignment()->getShrinkToFit() << 4; + + $data = pack("vvvC", $ifnt, $ifmt, $style, $align); + $data .= pack("CCC" + , self::_mapTextRotation($this->_style->getAlignment()->getTextRotation()) + , $biff8_options + , $used_attrib + ); + $data .= pack("VVv", $border1, $border2, $icv); + + return($header . $data); + } + + /** + * Is this a style XF ? + * + * @param boolean $value + */ + public function setIsStyleXf($value) + { + $this->_isStyleXf = $value; + } + + /** + * Sets the cell's bottom border color + * + * @access public + * @param int $colorIndex Color index + */ + function setBottomColor($colorIndex) + { + $this->_bottom_color = $colorIndex; + } + + /** + * Sets the cell's top border color + * + * @access public + * @param int $colorIndex Color index + */ + function setTopColor($colorIndex) + { + $this->_top_color = $colorIndex; + } + + /** + * Sets the cell's left border color + * + * @access public + * @param int $colorIndex Color index + */ + function setLeftColor($colorIndex) + { + $this->_left_color = $colorIndex; + } + + /** + * Sets the cell's right border color + * + * @access public + * @param int $colorIndex Color index + */ + function setRightColor($colorIndex) + { + $this->_right_color = $colorIndex; + } + + /** + * Sets the cell's diagonal border color + * + * @access public + * @param int $colorIndex Color index + */ + function setDiagColor($colorIndex) + { + $this->_diag_color = $colorIndex; + } + + + /** + * Sets the cell's foreground color + * + * @access public + * @param int $colorIndex Color index + */ + function setFgColor($colorIndex) + { + $this->_fg_color = $colorIndex; + } + + /** + * Sets the cell's background color + * + * @access public + * @param int $colorIndex Color index + */ + function setBgColor($colorIndex) + { + $this->_bg_color = $colorIndex; + } + + /** + * Sets the index to the number format record + * It can be date, time, currency, etc... + * + * @access public + * @param integer $numberFormatIndex Index to format record + */ + function setNumberFormatIndex($numberFormatIndex) + { + $this->_numberFormatIndex = $numberFormatIndex; + } + + /** + * Set the font index. + * + * @param int $value Font index, note that value 4 does not exist + */ + public function setFontIndex($value) + { + $this->_fontIndex = $value; + } + + /** + * Map of BIFF2-BIFF8 codes for border styles + * @static array of int + * + */ + private static $_mapBorderStyle = array ( PHPExcel_Style_Border::BORDER_NONE => 0x00, + PHPExcel_Style_Border::BORDER_THIN => 0x01, + PHPExcel_Style_Border::BORDER_MEDIUM => 0x02, + PHPExcel_Style_Border::BORDER_DASHED => 0x03, + PHPExcel_Style_Border::BORDER_DOTTED => 0x04, + PHPExcel_Style_Border::BORDER_THICK => 0x05, + PHPExcel_Style_Border::BORDER_DOUBLE => 0x06, + PHPExcel_Style_Border::BORDER_HAIR => 0x07, + PHPExcel_Style_Border::BORDER_MEDIUMDASHED => 0x08, + PHPExcel_Style_Border::BORDER_DASHDOT => 0x09, + PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT => 0x0A, + PHPExcel_Style_Border::BORDER_DASHDOTDOT => 0x0B, + PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT => 0x0C, + PHPExcel_Style_Border::BORDER_SLANTDASHDOT => 0x0D, + ); + + /** + * Map border style + * + * @param string $borderStyle + * @return int + */ + private static function _mapBorderStyle($borderStyle) { + if (isset(self::$_mapBorderStyle[$borderStyle])) + return self::$_mapBorderStyle[$borderStyle]; + return 0x00; + } + + /** + * Map of BIFF2-BIFF8 codes for fill types + * @static array of int + * + */ + private static $_mapFillType = array( PHPExcel_Style_Fill::FILL_NONE => 0x00, + PHPExcel_Style_Fill::FILL_SOLID => 0x01, + PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY => 0x02, + PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY => 0x03, + PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY => 0x04, + PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL => 0x05, + PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL => 0x06, + PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN => 0x07, + PHPExcel_Style_Fill::FILL_PATTERN_DARKUP => 0x08, + PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID => 0x09, + PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS => 0x0A, + PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL => 0x0B, + PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL => 0x0C, + PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN => 0x0D, + PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP => 0x0E, + PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID => 0x0F, + PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS => 0x10, + PHPExcel_Style_Fill::FILL_PATTERN_GRAY125 => 0x11, + PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625 => 0x12, + PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR => 0x00, // does not exist in BIFF8 + PHPExcel_Style_Fill::FILL_GRADIENT_PATH => 0x00, // does not exist in BIFF8 + ); + /** + * Map fill type + * + * @param string $fillType + * @return int + */ + private static function _mapFillType($fillType) { + if (isset(self::$_mapFillType[$fillType])) + return self::$_mapFillType[$fillType]; + return 0x00; + } + + /** + * Map of BIFF2-BIFF8 codes for horizontal alignment + * @static array of int + * + */ + private static $_mapHAlign = array( PHPExcel_Style_Alignment::HORIZONTAL_GENERAL => 0, + PHPExcel_Style_Alignment::HORIZONTAL_LEFT => 1, + PHPExcel_Style_Alignment::HORIZONTAL_CENTER => 2, + PHPExcel_Style_Alignment::HORIZONTAL_RIGHT => 3, + PHPExcel_Style_Alignment::HORIZONTAL_FILL => 4, + PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY => 5, + PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS => 6, + ); + /** + * Map to BIFF2-BIFF8 codes for horizontal alignment + * + * @param string $hAlign + * @return int + */ + private function _mapHAlign($hAlign) + { + if (isset(self::$_mapHAlign[$hAlign])) + return self::$_mapHAlign[$hAlign]; + return 0; + } + + /** + * Map of BIFF2-BIFF8 codes for vertical alignment + * @static array of int + * + */ + private static $_mapVAlign = array( PHPExcel_Style_Alignment::VERTICAL_TOP => 0, + PHPExcel_Style_Alignment::VERTICAL_CENTER => 1, + PHPExcel_Style_Alignment::VERTICAL_BOTTOM => 2, + PHPExcel_Style_Alignment::VERTICAL_JUSTIFY => 3, + ); + /** + * Map to BIFF2-BIFF8 codes for vertical alignment + * + * @param string $vAlign + * @return int + */ + private static function _mapVAlign($vAlign) { + if (isset(self::$_mapVAlign[$vAlign])) + return self::$_mapVAlign[$vAlign]; + return 2; + } + + /** + * Map to BIFF8 codes for text rotation angle + * + * @param int $textRotation + * @return int + */ + private static function _mapTextRotation($textRotation) { + if ($textRotation >= 0) { + return $textRotation; + } + if ($textRotation == -165) { + return 255; + } + if ($textRotation < 0) { + return 90 - $textRotation; + } + } + + /** + * Map locked + * + * @param string + * @return int + */ + private static function _mapLocked($locked) { + switch ($locked) { + case PHPExcel_Style_Protection::PROTECTION_INHERIT: return 1; + case PHPExcel_Style_Protection::PROTECTION_PROTECTED: return 1; + case PHPExcel_Style_Protection::PROTECTION_UNPROTECTED: return 0; + default: return 1; + } + } + + /** + * Map hidden + * + * @param string + * @return int + */ + private static function _mapHidden($hidden) { + switch ($hidden) { + case PHPExcel_Style_Protection::PROTECTION_INHERIT: return 0; + case PHPExcel_Style_Protection::PROTECTION_PROTECTED: return 1; + case PHPExcel_Style_Protection::PROTECTION_UNPROTECTED: return 0; + default: return 0; + } + } + +} diff --git a/PHPExcel/Writer/Exception.php b/PHPExcel/Writer/Exception.php new file mode 100644 index 0000000..e8fe9be --- /dev/null +++ b/PHPExcel/Writer/Exception.php @@ -0,0 +1,52 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_Exception + * + * @category PHPExcel + * @package PHPExcel_Writer + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_Exception extends PHPExcel_Exception { + /** + * Error handler callback + * + * @param mixed $code + * @param mixed $string + * @param mixed $file + * @param mixed $line + * @param mixed $context + */ + public static function errorHandlerCallback($code, $string, $file, $line, $context) { + $e = new self($string, $code); + $e->line = $line; + $e->file = $file; + throw $e; + } +} diff --git a/PHPExcel/Writer/HTML.php b/PHPExcel/Writer/HTML.php new file mode 100644 index 0000000..0f2cc08 --- /dev/null +++ b/PHPExcel/Writer/HTML.php @@ -0,0 +1,1532 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_HTML + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_HTML + * + * @category PHPExcel + * @package PHPExcel_Writer_HTML + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_HTML extends PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter { + /** + * PHPExcel object + * + * @var PHPExcel + */ + protected $_phpExcel; + + /** + * Sheet index to write + * + * @var int + */ + private $_sheetIndex = 0; + + /** + * Images root + * + * @var string + */ + private $_imagesRoot = '.'; + + /** + * embed images, or link to images + * + * @var boolean + */ + private $_embedImages = FALSE; + + /** + * Use inline CSS? + * + * @var boolean + */ + private $_useInlineCss = false; + + /** + * Array of CSS styles + * + * @var array + */ + private $_cssStyles = null; + + /** + * Array of column widths in points + * + * @var array + */ + private $_columnWidths = null; + + /** + * Default font + * + * @var PHPExcel_Style_Font + */ + private $_defaultFont; + + /** + * Flag whether spans have been calculated + * + * @var boolean + */ + private $_spansAreCalculated = false; + + /** + * Excel cells that should not be written as HTML cells + * + * @var array + */ + private $_isSpannedCell = array(); + + /** + * Excel cells that are upper-left corner in a cell merge + * + * @var array + */ + private $_isBaseCell = array(); + + /** + * Excel rows that should not be written as HTML rows + * + * @var array + */ + private $_isSpannedRow = array(); + + /** + * Is the current writer creating PDF? + * + * @var boolean + */ + protected $_isPdf = false; + + /** + * Generate the Navigation block + * + * @var boolean + */ + private $_generateSheetNavigationBlock = true; + + /** + * Create a new PHPExcel_Writer_HTML + * + * @param PHPExcel $phpExcel PHPExcel object + */ + public function __construct(PHPExcel $phpExcel) { + $this->_phpExcel = $phpExcel; + $this->_defaultFont = $this->_phpExcel->getDefaultStyle()->getFont(); + } + + /** + * Save PHPExcel to file + * + * @param string $pFilename + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = null) { + // garbage collect + $this->_phpExcel->garbageCollect(); + + $saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->getWriteDebugLog(); + PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog(FALSE); + $saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType(); + PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE); + + // Build CSS + $this->buildCSS(!$this->_useInlineCss); + + // Open file + $fileHandle = fopen($pFilename, 'wb+'); + if ($fileHandle === false) { + throw new PHPExcel_Writer_Exception("Could not open file $pFilename for writing."); + } + + // Write headers + fwrite($fileHandle, $this->generateHTMLHeader(!$this->_useInlineCss)); + + // Write navigation (tabs) + if ((!$this->_isPdf) && ($this->_generateSheetNavigationBlock)) { + fwrite($fileHandle, $this->generateNavigation()); + } + + // Write data + fwrite($fileHandle, $this->generateSheetData()); + + // Write footer + fwrite($fileHandle, $this->generateHTMLFooter()); + + // Close file + fclose($fileHandle); + + PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType); + PHPExcel_Calculation::getInstance($this->_phpExcel)->getDebugLog()->setWriteDebugLog($saveDebugLog); + } + + /** + * Map VAlign + * + * @param string $vAlign Vertical alignment + * @return string + */ + private function _mapVAlign($vAlign) { + switch ($vAlign) { + case PHPExcel_Style_Alignment::VERTICAL_BOTTOM: return 'bottom'; + case PHPExcel_Style_Alignment::VERTICAL_TOP: return 'top'; + case PHPExcel_Style_Alignment::VERTICAL_CENTER: + case PHPExcel_Style_Alignment::VERTICAL_JUSTIFY: return 'middle'; + default: return 'baseline'; + } + } + + /** + * Map HAlign + * + * @param string $hAlign Horizontal alignment + * @return string|false + */ + private function _mapHAlign($hAlign) { + switch ($hAlign) { + case PHPExcel_Style_Alignment::HORIZONTAL_GENERAL: return false; + case PHPExcel_Style_Alignment::HORIZONTAL_LEFT: return 'left'; + case PHPExcel_Style_Alignment::HORIZONTAL_RIGHT: return 'right'; + case PHPExcel_Style_Alignment::HORIZONTAL_CENTER: + case PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS: return 'center'; + case PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY: return 'justify'; + default: return false; + } + } + + /** + * Map border style + * + * @param int $borderStyle Sheet index + * @return string + */ + private function _mapBorderStyle($borderStyle) { + switch ($borderStyle) { + case PHPExcel_Style_Border::BORDER_NONE: return 'none'; + case PHPExcel_Style_Border::BORDER_DASHDOT: return '1px dashed'; + case PHPExcel_Style_Border::BORDER_DASHDOTDOT: return '1px dotted'; + case PHPExcel_Style_Border::BORDER_DASHED: return '1px dashed'; + case PHPExcel_Style_Border::BORDER_DOTTED: return '1px dotted'; + case PHPExcel_Style_Border::BORDER_DOUBLE: return '3px double'; + case PHPExcel_Style_Border::BORDER_HAIR: return '1px solid'; + case PHPExcel_Style_Border::BORDER_MEDIUM: return '2px solid'; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT: return '2px dashed'; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT: return '2px dotted'; + case PHPExcel_Style_Border::BORDER_MEDIUMDASHED: return '2px dashed'; + case PHPExcel_Style_Border::BORDER_SLANTDASHDOT: return '2px dashed'; + case PHPExcel_Style_Border::BORDER_THICK: return '3px solid'; + case PHPExcel_Style_Border::BORDER_THIN: return '1px solid'; + default: return '1px solid'; // map others to thin + } + } + + /** + * Get sheet index + * + * @return int + */ + public function getSheetIndex() { + return $this->_sheetIndex; + } + + /** + * Set sheet index + * + * @param int $pValue Sheet index + * @return PHPExcel_Writer_HTML + */ + public function setSheetIndex($pValue = 0) { + $this->_sheetIndex = $pValue; + return $this; + } + + /** + * Get sheet index + * + * @return boolean + */ + public function getGenerateSheetNavigationBlock() { + return $this->_generateSheetNavigationBlock; + } + + /** + * Set sheet index + * + * @param boolean $pValue Flag indicating whether the sheet navigation block should be generated or not + * @return PHPExcel_Writer_HTML + */ + public function setGenerateSheetNavigationBlock($pValue = true) { + $this->_generateSheetNavigationBlock = (bool) $pValue; + return $this; + } + + /** + * Write all sheets (resets sheetIndex to NULL) + */ + public function writeAllSheets() { + $this->_sheetIndex = null; + return $this; + } + + /** + * Generate HTML header + * + * @param boolean $pIncludeStyles Include styles? + * @return string + * @throws PHPExcel_Writer_Exception + */ + public function generateHTMLHeader($pIncludeStyles = false) { + // PHPExcel object known? + if (is_null($this->_phpExcel)) { + throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); + } + + // Construct HTML + $properties = $this->_phpExcel->getProperties(); + $html = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' . PHP_EOL; + $html .= '<!-- Generated by PHPExcel - http://www.phpexcel.net -->' . PHP_EOL; + $html .= '<html>' . PHP_EOL; + $html .= ' <head>' . PHP_EOL; + $html .= ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . PHP_EOL; + if ($properties->getTitle() > '') + $html .= ' <title>' . htmlspecialchars($properties->getTitle()) . '</title>' . PHP_EOL; + + if ($properties->getCreator() > '') + $html .= ' <meta name="author" content="' . htmlspecialchars($properties->getCreator()) . '" />' . PHP_EOL; + if ($properties->getTitle() > '') + $html .= ' <meta name="title" content="' . htmlspecialchars($properties->getTitle()) . '" />' . PHP_EOL; + if ($properties->getDescription() > '') + $html .= ' <meta name="description" content="' . htmlspecialchars($properties->getDescription()) . '" />' . PHP_EOL; + if ($properties->getSubject() > '') + $html .= ' <meta name="subject" content="' . htmlspecialchars($properties->getSubject()) . '" />' . PHP_EOL; + if ($properties->getKeywords() > '') + $html .= ' <meta name="keywords" content="' . htmlspecialchars($properties->getKeywords()) . '" />' . PHP_EOL; + if ($properties->getCategory() > '') + $html .= ' <meta name="category" content="' . htmlspecialchars($properties->getCategory()) . '" />' . PHP_EOL; + if ($properties->getCompany() > '') + $html .= ' <meta name="company" content="' . htmlspecialchars($properties->getCompany()) . '" />' . PHP_EOL; + if ($properties->getManager() > '') + $html .= ' <meta name="manager" content="' . htmlspecialchars($properties->getManager()) . '" />' . PHP_EOL; + + if ($pIncludeStyles) { + $html .= $this->generateStyles(true); + } + + $html .= ' </head>' . PHP_EOL; + $html .= '' . PHP_EOL; + $html .= ' <body>' . PHP_EOL; + + // Return + return $html; + } + + /** + * Generate sheet data + * + * @return string + * @throws PHPExcel_Writer_Exception + */ + public function generateSheetData() { + // PHPExcel object known? + if (is_null($this->_phpExcel)) { + throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); + } + + // Ensure that Spans have been calculated? + if (!$this->_spansAreCalculated) { + $this->_calculateSpans(); + } + + // Fetch sheets + $sheets = array(); + if (is_null($this->_sheetIndex)) { + $sheets = $this->_phpExcel->getAllSheets(); + } else { + $sheets[] = $this->_phpExcel->getSheet($this->_sheetIndex); + } + + // Construct HTML + $html = ''; + + // Loop all sheets + $sheetId = 0; + foreach ($sheets as $sheet) { + // Write table header + $html .= $this->_generateTableHeader($sheet); + + // Get worksheet dimension + $dimension = explode(':', $sheet->calculateWorksheetDimension()); + $dimension[0] = PHPExcel_Cell::coordinateFromString($dimension[0]); + $dimension[0][0] = PHPExcel_Cell::columnIndexFromString($dimension[0][0]) - 1; + $dimension[1] = PHPExcel_Cell::coordinateFromString($dimension[1]); + $dimension[1][0] = PHPExcel_Cell::columnIndexFromString($dimension[1][0]) - 1; + + // row min,max + $rowMin = $dimension[0][1]; + $rowMax = $dimension[1][1]; + + // calculate start of <tbody>, <thead> + $tbodyStart = $rowMin; + $theadStart = $theadEnd = 0; // default: no <thead> no </thead> + if ($sheet->getPageSetup()->isRowsToRepeatAtTopSet()) { + $rowsToRepeatAtTop = $sheet->getPageSetup()->getRowsToRepeatAtTop(); + + // we can only support repeating rows that start at top row + if ($rowsToRepeatAtTop[0] == 1) { + $theadStart = $rowsToRepeatAtTop[0]; + $theadEnd = $rowsToRepeatAtTop[1]; + $tbodyStart = $rowsToRepeatAtTop[1] + 1; + } + } + + // Loop through cells + $row = $rowMin-1; + while($row++ < $rowMax) { + // <thead> ? + if ($row == $theadStart) { + $html .= ' <thead>' . PHP_EOL; + } + + // <tbody> ? + if ($row == $tbodyStart) { + $html .= ' <tbody>' . PHP_EOL; + } + + // Write row if there are HTML table cells in it + if ( !isset($this->_isSpannedRow[$sheet->getParent()->getIndex($sheet)][$row]) ) { + // Start a new rowData + $rowData = array(); + // Loop through columns + $column = $dimension[0][0] - 1; + while($column++ < $dimension[1][0]) { + // Cell exists? + if ($sheet->cellExistsByColumnAndRow($column, $row)) { + $rowData[$column] = PHPExcel_Cell::stringFromColumnIndex($column) . $row; + } else { + $rowData[$column] = ''; + } + } + $html .= $this->_generateRow($sheet, $rowData, $row - 1); + } + + // </thead> ? + if ($row == $theadEnd) { + $html .= ' </thead>' . PHP_EOL; + } + } + $html .= $this->_extendRowsForChartsAndImages($sheet, $row); + + // Close table body. + $html .= ' </tbody>' . PHP_EOL; + + // Write table footer + $html .= $this->_generateTableFooter(); + + // Writing PDF? + if ($this->_isPdf) { + if (is_null($this->_sheetIndex) && $sheetId + 1 < $this->_phpExcel->getSheetCount()) { + $html .= '<div style="page-break-before:always" />'; + } + } + + // Next sheet + ++$sheetId; + } + + // Return + return $html; + } + + /** + * Generate sheet tabs + * + * @return string + * @throws PHPExcel_Writer_Exception + */ + public function generateNavigation() + { + // PHPExcel object known? + if (is_null($this->_phpExcel)) { + throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); + } + + // Fetch sheets + $sheets = array(); + if (is_null($this->_sheetIndex)) { + $sheets = $this->_phpExcel->getAllSheets(); + } else { + $sheets[] = $this->_phpExcel->getSheet($this->_sheetIndex); + } + + // Construct HTML + $html = ''; + + // Only if there are more than 1 sheets + if (count($sheets) > 1) { + // Loop all sheets + $sheetId = 0; + + $html .= '<ul class="navigation">' . PHP_EOL; + + foreach ($sheets as $sheet) { + $html .= ' <li class="sheet' . $sheetId . '"><a href="#sheet' . $sheetId . '">' . $sheet->getTitle() . '</a></li>' . PHP_EOL; + ++$sheetId; + } + + $html .= '</ul>' . PHP_EOL; + } + + return $html; + } + + private function _extendRowsForChartsAndImages(PHPExcel_Worksheet $pSheet, $row) { + $rowMax = $row; + $colMax = 'A'; + if ($this->_includeCharts) { + foreach ($pSheet->getChartCollection() as $chart) { + if ($chart instanceof PHPExcel_Chart) { + $chartCoordinates = $chart->getTopLeftPosition(); + $chartTL = PHPExcel_Cell::coordinateFromString($chartCoordinates['cell']); + $chartCol = PHPExcel_Cell::columnIndexFromString($chartTL[0]); + if ($chartTL[1] > $rowMax) { + $rowMax = $chartTL[1]; + if ($chartCol > PHPExcel_Cell::columnIndexFromString($colMax)) { + $colMax = $chartTL[0]; + } + } + } + } + } + + foreach ($pSheet->getDrawingCollection() as $drawing) { + if ($drawing instanceof PHPExcel_Worksheet_Drawing) { + $imageTL = PHPExcel_Cell::coordinateFromString($drawing->getCoordinates()); + $imageCol = PHPExcel_Cell::columnIndexFromString($imageTL[0]); + if ($imageTL[1] > $rowMax) { + $rowMax = $imageTL[1]; + if ($imageCol > PHPExcel_Cell::columnIndexFromString($colMax)) { + $colMax = $imageTL[0]; + } + } + } + } + $html = ''; + $colMax++; + while ($row < $rowMax) { + $html .= '<tr>'; + for ($col = 'A'; $col != $colMax; ++$col) { + $html .= '<td>'; + $html .= $this->_writeImageInCell($pSheet, $col.$row); + if ($this->_includeCharts) { + $html .= $this->_writeChartInCell($pSheet, $col.$row); + } + $html .= '</td>'; + } + ++$row; + $html .= '</tr>'; + } + return $html; + } + + + /** + * Generate image tag in cell + * + * @param PHPExcel_Worksheet $pSheet PHPExcel_Worksheet + * @param string $coordinates Cell coordinates + * @return string + * @throws PHPExcel_Writer_Exception + */ + private function _writeImageInCell(PHPExcel_Worksheet $pSheet, $coordinates) { + // Construct HTML + $html = ''; + + // Write images + foreach ($pSheet->getDrawingCollection() as $drawing) { + if ($drawing instanceof PHPExcel_Worksheet_Drawing) { + if ($drawing->getCoordinates() == $coordinates) { + $filename = $drawing->getPath(); + + // Strip off eventual '.' + if (substr($filename, 0, 1) == '.') { + $filename = substr($filename, 1); + } + + // Prepend images root + $filename = $this->getImagesRoot() . $filename; + + // Strip off eventual '.' + if (substr($filename, 0, 1) == '.' && substr($filename, 0, 2) != './') { + $filename = substr($filename, 1); + } + + // Convert UTF8 data to PCDATA + $filename = htmlspecialchars($filename); + + $html .= PHP_EOL; + if ((!$this->_embedImages) || ($this->_isPdf)) { + $imageData = $filename; + } else { + $imageDetails = getimagesize($filename); + if ($fp = fopen($filename,"rb", 0)) { + $picture = fread($fp,filesize($filename)); + fclose($fp); + // base64 encode the binary data, then break it + // into chunks according to RFC 2045 semantics + $base64 = chunk_split(base64_encode($picture)); + $imageData = 'data:'.$imageDetails['mime'].';base64,' . $base64; + } else { + $imageData = $filename; + } + } + + $html .= '<div style="position: relative;">'; + $html .= '<img style="position: absolute; z-index: 1; left: ' . + $drawing->getOffsetX() . 'px; top: ' . $drawing->getOffsetY() . 'px; width: ' . + $drawing->getWidth() . 'px; height: ' . $drawing->getHeight() . 'px;" src="' . + $imageData . '" border="0" />'; + $html .= '</div>'; + } + } + } + + // Return + return $html; + } + + /** + * Generate chart tag in cell + * + * @param PHPExcel_Worksheet $pSheet PHPExcel_Worksheet + * @param string $coordinates Cell coordinates + * @return string + * @throws PHPExcel_Writer_Exception + */ + private function _writeChartInCell(PHPExcel_Worksheet $pSheet, $coordinates) { + // Construct HTML + $html = ''; + + // Write charts + foreach ($pSheet->getChartCollection() as $chart) { + if ($chart instanceof PHPExcel_Chart) { + $chartCoordinates = $chart->getTopLeftPosition(); + if ($chartCoordinates['cell'] == $coordinates) { + $chartFileName = PHPExcel_Shared_File::sys_get_temp_dir().'/'.uniqid().'.png'; + if (!$chart->render($chartFileName)) { + return; + } + + $html .= PHP_EOL; + $imageDetails = getimagesize($chartFileName); + if ($fp = fopen($chartFileName,"rb", 0)) { + $picture = fread($fp,filesize($chartFileName)); + fclose($fp); + // base64 encode the binary data, then break it + // into chunks according to RFC 2045 semantics + $base64 = chunk_split(base64_encode($picture)); + $imageData = 'data:'.$imageDetails['mime'].';base64,' . $base64; + + $html .= '<div style="position: relative;">'; + $html .= '<img style="position: absolute; z-index: 1; left: ' . $chartCoordinates['xOffset'] . 'px; top: ' . $chartCoordinates['yOffset'] . 'px; width: ' . $imageDetails[0] . 'px; height: ' . $imageDetails[1] . 'px;" src="' . $imageData . '" border="0" />' . PHP_EOL; + $html .= '</div>'; + + unlink($chartFileName); + } + } + } + } + + // Return + return $html; + } + + /** + * Generate CSS styles + * + * @param boolean $generateSurroundingHTML Generate surrounding HTML tags? (<style> and </style>) + * @return string + * @throws PHPExcel_Writer_Exception + */ + public function generateStyles($generateSurroundingHTML = true) { + // PHPExcel object known? + if (is_null($this->_phpExcel)) { + throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); + } + + // Build CSS + $css = $this->buildCSS($generateSurroundingHTML); + + // Construct HTML + $html = ''; + + // Start styles + if ($generateSurroundingHTML) { + $html .= ' <style type="text/css">' . PHP_EOL; + $html .= ' html { ' . $this->_assembleCSS($css['html']) . ' }' . PHP_EOL; + } + + // Write all other styles + foreach ($css as $styleName => $styleDefinition) { + if ($styleName != 'html') { + $html .= ' ' . $styleName . ' { ' . $this->_assembleCSS($styleDefinition) . ' }' . PHP_EOL; + } + } + + // End styles + if ($generateSurroundingHTML) { + $html .= ' </style>' . PHP_EOL; + } + + // Return + return $html; + } + + /** + * Build CSS styles + * + * @param boolean $generateSurroundingHTML Generate surrounding HTML style? (html { }) + * @return array + * @throws PHPExcel_Writer_Exception + */ + public function buildCSS($generateSurroundingHTML = true) { + // PHPExcel object known? + if (is_null($this->_phpExcel)) { + throw new PHPExcel_Writer_Exception('Internal PHPExcel object not set to an instance of an object.'); + } + + // Cached? + if (!is_null($this->_cssStyles)) { + return $this->_cssStyles; + } + + // Ensure that spans have been calculated + if (!$this->_spansAreCalculated) { + $this->_calculateSpans(); + } + + // Construct CSS + $css = array(); + + // Start styles + if ($generateSurroundingHTML) { + // html { } + $css['html']['font-family'] = 'Calibri, Arial, Helvetica, sans-serif'; + $css['html']['font-size'] = '11pt'; + $css['html']['background-color'] = 'white'; + } + + + // table { } + $css['table']['border-collapse'] = 'collapse'; + if (!$this->_isPdf) { + $css['table']['page-break-after'] = 'always'; + } + + // .gridlines td { } + $css['.gridlines td']['border'] = '1px dotted black'; + + // .b {} + $css['.b']['text-align'] = 'center'; // BOOL + + // .e {} + $css['.e']['text-align'] = 'center'; // ERROR + + // .f {} + $css['.f']['text-align'] = 'right'; // FORMULA + + // .inlineStr {} + $css['.inlineStr']['text-align'] = 'left'; // INLINE + + // .n {} + $css['.n']['text-align'] = 'right'; // NUMERIC + + // .s {} + $css['.s']['text-align'] = 'left'; // STRING + + // Calculate cell style hashes + foreach ($this->_phpExcel->getCellXfCollection() as $index => $style) { + $css['td.style' . $index] = $this->_createCSSStyle( $style ); + } + + // Fetch sheets + $sheets = array(); + if (is_null($this->_sheetIndex)) { + $sheets = $this->_phpExcel->getAllSheets(); + } else { + $sheets[] = $this->_phpExcel->getSheet($this->_sheetIndex); + } + + // Build styles per sheet + foreach ($sheets as $sheet) { + // Calculate hash code + $sheetIndex = $sheet->getParent()->getIndex($sheet); + + // Build styles + // Calculate column widths + $sheet->calculateColumnWidths(); + + // col elements, initialize + $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()) - 1; + $column = -1; + while($column++ < $highestColumnIndex) { + $this->_columnWidths[$sheetIndex][$column] = 42; // approximation + $css['table.sheet' . $sheetIndex . ' col.col' . $column]['width'] = '42pt'; + } + + // col elements, loop through columnDimensions and set width + foreach ($sheet->getColumnDimensions() as $columnDimension) { + if (($width = PHPExcel_Shared_Drawing::cellDimensionToPixels($columnDimension->getWidth(), $this->_defaultFont)) >= 0) { + $width = PHPExcel_Shared_Drawing::pixelsToPoints($width); + $column = PHPExcel_Cell::columnIndexFromString($columnDimension->getColumnIndex()) - 1; + $this->_columnWidths[$sheetIndex][$column] = $width; + $css['table.sheet' . $sheetIndex . ' col.col' . $column]['width'] = $width . 'pt'; + + if ($columnDimension->getVisible() === false) { + $css['table.sheet' . $sheetIndex . ' col.col' . $column]['visibility'] = 'collapse'; + $css['table.sheet' . $sheetIndex . ' col.col' . $column]['*display'] = 'none'; // target IE6+7 + } + } + } + + // Default row height + $rowDimension = $sheet->getDefaultRowDimension(); + + // table.sheetN tr { } + $css['table.sheet' . $sheetIndex . ' tr'] = array(); + + if ($rowDimension->getRowHeight() == -1) { + $pt_height = PHPExcel_Shared_Font::getDefaultRowHeightByFont($this->_phpExcel->getDefaultStyle()->getFont()); + } else { + $pt_height = $rowDimension->getRowHeight(); + } + $css['table.sheet' . $sheetIndex . ' tr']['height'] = $pt_height . 'pt'; + if ($rowDimension->getVisible() === false) { + $css['table.sheet' . $sheetIndex . ' tr']['display'] = 'none'; + $css['table.sheet' . $sheetIndex . ' tr']['visibility'] = 'hidden'; + } + + // Calculate row heights + foreach ($sheet->getRowDimensions() as $rowDimension) { + $row = $rowDimension->getRowIndex() - 1; + + // table.sheetN tr.rowYYYYYY { } + $css['table.sheet' . $sheetIndex . ' tr.row' . $row] = array(); + + if ($rowDimension->getRowHeight() == -1) { + $pt_height = PHPExcel_Shared_Font::getDefaultRowHeightByFont($this->_phpExcel->getDefaultStyle()->getFont()); + } else { + $pt_height = $rowDimension->getRowHeight(); + } + $css['table.sheet' . $sheetIndex . ' tr.row' . $row]['height'] = $pt_height . 'pt'; + if ($rowDimension->getVisible() === false) { + $css['table.sheet' . $sheetIndex . ' tr.row' . $row]['display'] = 'none'; + $css['table.sheet' . $sheetIndex . ' tr.row' . $row]['visibility'] = 'hidden'; + } + } + } + + // Cache + if (is_null($this->_cssStyles)) { + $this->_cssStyles = $css; + } + + // Return + return $css; + } + + /** + * Create CSS style + * + * @param PHPExcel_Style $pStyle PHPExcel_Style + * @return array + */ + private function _createCSSStyle(PHPExcel_Style $pStyle) { + // Construct CSS + $css = ''; + + // Create CSS + $css = array_merge( + $this->_createCSSStyleAlignment($pStyle->getAlignment()) + , $this->_createCSSStyleBorders($pStyle->getBorders()) + , $this->_createCSSStyleFont($pStyle->getFont()) + , $this->_createCSSStyleFill($pStyle->getFill()) + ); + + // Return + return $css; + } + + /** + * Create CSS style (PHPExcel_Style_Alignment) + * + * @param PHPExcel_Style_Alignment $pStyle PHPExcel_Style_Alignment + * @return array + */ + private function _createCSSStyleAlignment(PHPExcel_Style_Alignment $pStyle) { + // Construct CSS + $css = array(); + + // Create CSS + $css['vertical-align'] = $this->_mapVAlign($pStyle->getVertical()); + if ($textAlign = $this->_mapHAlign($pStyle->getHorizontal())) { + $css['text-align'] = $textAlign; + if(in_array($textAlign,array('left','right'))) + $css['padding-'.$textAlign] = (string)((int)$pStyle->getIndent() * 9).'px'; + } + + // Return + return $css; + } + + /** + * Create CSS style (PHPExcel_Style_Font) + * + * @param PHPExcel_Style_Font $pStyle PHPExcel_Style_Font + * @return array + */ + private function _createCSSStyleFont(PHPExcel_Style_Font $pStyle) { + // Construct CSS + $css = array(); + + // Create CSS + if ($pStyle->getBold()) { + $css['font-weight'] = 'bold'; + } + if ($pStyle->getUnderline() != PHPExcel_Style_Font::UNDERLINE_NONE && $pStyle->getStrikethrough()) { + $css['text-decoration'] = 'underline line-through'; + } else if ($pStyle->getUnderline() != PHPExcel_Style_Font::UNDERLINE_NONE) { + $css['text-decoration'] = 'underline'; + } else if ($pStyle->getStrikethrough()) { + $css['text-decoration'] = 'line-through'; + } + if ($pStyle->getItalic()) { + $css['font-style'] = 'italic'; + } + + $css['color'] = '#' . $pStyle->getColor()->getRGB(); + $css['font-family'] = '\'' . $pStyle->getName() . '\''; + $css['font-size'] = $pStyle->getSize() . 'pt'; + + // Return + return $css; + } + + /** + * Create CSS style (PHPExcel_Style_Borders) + * + * @param PHPExcel_Style_Borders $pStyle PHPExcel_Style_Borders + * @return array + */ + private function _createCSSStyleBorders(PHPExcel_Style_Borders $pStyle) { + // Construct CSS + $css = array(); + + // Create CSS + $css['border-bottom'] = $this->_createCSSStyleBorder($pStyle->getBottom()); + $css['border-top'] = $this->_createCSSStyleBorder($pStyle->getTop()); + $css['border-left'] = $this->_createCSSStyleBorder($pStyle->getLeft()); + $css['border-right'] = $this->_createCSSStyleBorder($pStyle->getRight()); + + // Return + return $css; + } + + /** + * Create CSS style (PHPExcel_Style_Border) + * + * @param PHPExcel_Style_Border $pStyle PHPExcel_Style_Border + * @return string + */ + private function _createCSSStyleBorder(PHPExcel_Style_Border $pStyle) { + // Create CSS +// $css = $this->_mapBorderStyle($pStyle->getBorderStyle()) . ' #' . $pStyle->getColor()->getRGB(); + // Create CSS - add !important to non-none border styles for merged cells + $borderStyle = $this->_mapBorderStyle($pStyle->getBorderStyle()); + $css = $borderStyle . ' #' . $pStyle->getColor()->getRGB() . (($borderStyle == 'none') ? '' : ' !important'); + + // Return + return $css; + } + + /** + * Create CSS style (PHPExcel_Style_Fill) + * + * @param PHPExcel_Style_Fill $pStyle PHPExcel_Style_Fill + * @return array + */ + private function _createCSSStyleFill(PHPExcel_Style_Fill $pStyle) { + // Construct HTML + $css = array(); + + // Create CSS + $value = $pStyle->getFillType() == PHPExcel_Style_Fill::FILL_NONE ? + 'white' : '#' . $pStyle->getStartColor()->getRGB(); + $css['background-color'] = $value; + + // Return + return $css; + } + + /** + * Generate HTML footer + */ + public function generateHTMLFooter() { + // Construct HTML + $html = ''; + $html .= ' </body>' . PHP_EOL; + $html .= '</html>' . PHP_EOL; + + // Return + return $html; + } + + /** + * Generate table header + * + * @param PHPExcel_Worksheet $pSheet The worksheet for the table we are writing + * @return string + * @throws PHPExcel_Writer_Exception + */ + private function _generateTableHeader($pSheet) { + $sheetIndex = $pSheet->getParent()->getIndex($pSheet); + + // Construct HTML + $html = ''; + $html .= $this->_setMargins($pSheet); + + if (!$this->_useInlineCss) { + $gridlines = $pSheet->getShowGridlines() ? ' gridlines' : ''; + $html .= ' <table border="0" cellpadding="0" cellspacing="0" id="sheet' . $sheetIndex . '" class="sheet' . $sheetIndex . $gridlines . '">' . PHP_EOL; + } else { + $style = isset($this->_cssStyles['table']) ? + $this->_assembleCSS($this->_cssStyles['table']) : ''; + + if ($this->_isPdf && $pSheet->getShowGridlines()) { + $html .= ' <table border="1" cellpadding="1" id="sheet' . $sheetIndex . '" cellspacing="1" style="' . $style . '">' . PHP_EOL; + } else { + $html .= ' <table border="0" cellpadding="1" id="sheet' . $sheetIndex . '" cellspacing="0" style="' . $style . '">' . PHP_EOL; + } + } + + // Write <col> elements + $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($pSheet->getHighestColumn()) - 1; + $i = -1; + while($i++ < $highestColumnIndex) { + if (!$this->_isPdf) { + if (!$this->_useInlineCss) { + $html .= ' <col class="col' . $i . '">' . PHP_EOL; + } else { + $style = isset($this->_cssStyles['table.sheet' . $sheetIndex . ' col.col' . $i]) ? + $this->_assembleCSS($this->_cssStyles['table.sheet' . $sheetIndex . ' col.col' . $i]) : ''; + $html .= ' <col style="' . $style . '">' . PHP_EOL; + } + } + } + + // Return + return $html; + } + + /** + * Generate table footer + * + * @throws PHPExcel_Writer_Exception + */ + private function _generateTableFooter() { + // Construct HTML + $html = ''; + $html .= ' </table>' . PHP_EOL; + + // Return + return $html; + } + + /** + * Generate row + * + * @param PHPExcel_Worksheet $pSheet PHPExcel_Worksheet + * @param array $pValues Array containing cells in a row + * @param int $pRow Row number (0-based) + * @return string + * @throws PHPExcel_Writer_Exception + */ + private function _generateRow(PHPExcel_Worksheet $pSheet, $pValues = null, $pRow = 0) { + if (is_array($pValues)) { + // Construct HTML + $html = ''; + + // Sheet index + $sheetIndex = $pSheet->getParent()->getIndex($pSheet); + + // DomPDF and breaks + if ($this->_isPdf && count($pSheet->getBreaks()) > 0) { + $breaks = $pSheet->getBreaks(); + + // check if a break is needed before this row + if (isset($breaks['A' . $pRow])) { + // close table: </table> + $html .= $this->_generateTableFooter(); + + // insert page break + $html .= '<div style="page-break-before:always" />'; + + // open table again: <table> + <col> etc. + $html .= $this->_generateTableHeader($pSheet); + } + } + + // Write row start + if (!$this->_useInlineCss) { + $html .= ' <tr class="row' . $pRow . '">' . PHP_EOL; + } else { + $style = isset($this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]) + ? $this->_assembleCSS($this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]) : ''; + + $html .= ' <tr style="' . $style . '">' . PHP_EOL; + } + + // Write cells + $colNum = 0; + foreach ($pValues as $cellAddress) { + $cell = ($cellAddress > '') ? $pSheet->getCell($cellAddress) : ''; + $coordinate = PHPExcel_Cell::stringFromColumnIndex($colNum) . ($pRow + 1); + if (!$this->_useInlineCss) { + $cssClass = ''; + $cssClass = 'column' . $colNum; + } else { + $cssClass = array(); + if (isset($this->_cssStyles['table.sheet' . $sheetIndex . ' td.column' . $colNum])) { + $this->_cssStyles['table.sheet' . $sheetIndex . ' td.column' . $colNum]; + } + } + $colSpan = 1; + $rowSpan = 1; + + // initialize + $cellData = '&nbsp;'; + + // PHPExcel_Cell + if ($cell instanceof PHPExcel_Cell) { + $cellData = ''; + if (is_null($cell->getParent())) { + $cell->attach($pSheet); + } + // Value + if ($cell->getValue() instanceof PHPExcel_RichText) { + // Loop through rich text elements + $elements = $cell->getValue()->getRichTextElements(); + foreach ($elements as $element) { + // Rich text start? + if ($element instanceof PHPExcel_RichText_Run) { + $cellData .= '<span style="' . $this->_assembleCSS($this->_createCSSStyleFont($element->getFont())) . '">'; + + if ($element->getFont()->getSuperScript()) { + $cellData .= '<sup>'; + } else if ($element->getFont()->getSubScript()) { + $cellData .= '<sub>'; + } + } + + // Convert UTF8 data to PCDATA + $cellText = $element->getText(); + $cellData .= htmlspecialchars($cellText); + + if ($element instanceof PHPExcel_RichText_Run) { + if ($element->getFont()->getSuperScript()) { + $cellData .= '</sup>'; + } else if ($element->getFont()->getSubScript()) { + $cellData .= '</sub>'; + } + + $cellData .= '</span>'; + } + } + } else { + if ($this->_preCalculateFormulas) { + $cellData = PHPExcel_Style_NumberFormat::toFormattedString( + $cell->getCalculatedValue(), + $pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getNumberFormat()->getFormatCode(), + array($this, 'formatColor') + ); + } else { + $cellData = PHPExcel_Style_NumberFormat::ToFormattedString( + $cell->getValue(), + $pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getNumberFormat()->getFormatCode(), + array($this, 'formatColor') + ); + } + $cellData = htmlspecialchars($cellData); + if ($pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getFont()->getSuperScript()) { + $cellData = '<sup>'.$cellData.'</sup>'; + } elseif ($pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() )->getFont()->getSubScript()) { + $cellData = '<sub>'.$cellData.'</sub>'; + } + } + + // Converts the cell content so that spaces occuring at beginning of each new line are replaced by &nbsp; + // Example: " Hello\n to the world" is converted to "&nbsp;&nbsp;Hello\n&nbsp;to the world" + $cellData = preg_replace("/(?m)(?:^|\\G) /", '&nbsp;', $cellData); + + // convert newline "\n" to '<br>' + $cellData = nl2br($cellData); + + // Extend CSS class? + if (!$this->_useInlineCss) { + $cssClass .= ' style' . $cell->getXfIndex(); + $cssClass .= ' ' . $cell->getDataType(); + } else { + if (isset($this->_cssStyles['td.style' . $cell->getXfIndex()])) { + $cssClass = array_merge($cssClass, $this->_cssStyles['td.style' . $cell->getXfIndex()]); + } + + // General horizontal alignment: Actual horizontal alignment depends on dataType + $sharedStyle = $pSheet->getParent()->getCellXfByIndex( $cell->getXfIndex() ); + if ($sharedStyle->getAlignment()->getHorizontal() == PHPExcel_Style_Alignment::HORIZONTAL_GENERAL + && isset($this->_cssStyles['.' . $cell->getDataType()]['text-align'])) + { + $cssClass['text-align'] = $this->_cssStyles['.' . $cell->getDataType()]['text-align']; + } + } + } + + // Hyperlink? + if ($pSheet->hyperlinkExists($coordinate) && !$pSheet->getHyperlink($coordinate)->isInternal()) { + $cellData = '<a href="' . htmlspecialchars($pSheet->getHyperlink($coordinate)->getUrl()) . '" title="' . htmlspecialchars($pSheet->getHyperlink($coordinate)->getTooltip()) . '">' . $cellData . '</a>'; + } + + // Should the cell be written or is it swallowed by a rowspan or colspan? + $writeCell = ! ( isset($this->_isSpannedCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum]) + && $this->_isSpannedCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum] ); + + // Colspan and Rowspan + $colspan = 1; + $rowspan = 1; + if (isset($this->_isBaseCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum])) { + $spans = $this->_isBaseCell[$pSheet->getParent()->getIndex($pSheet)][$pRow + 1][$colNum]; + $rowSpan = $spans['rowspan']; + $colSpan = $spans['colspan']; + + // Also apply style from last cell in merge to fix borders - + // relies on !important for non-none border declarations in _createCSSStyleBorder + $endCellCoord = PHPExcel_Cell::stringFromColumnIndex($colNum + $colSpan - 1) . ($pRow + $rowSpan); + if (!$this->_useInlineCss) { + $cssClass .= ' style' . $pSheet->getCell($endCellCoord)->getXfIndex(); + } + } + + // Write + if ($writeCell) { + // Column start + $html .= ' <td'; + if (!$this->_useInlineCss) { + $html .= ' class="' . $cssClass . '"'; + } else { + //** Necessary redundant code for the sake of PHPExcel_Writer_PDF ** + // We must explicitly write the width of the <td> element because TCPDF + // does not recognize e.g. <col style="width:42pt"> + $width = 0; + $i = $colNum - 1; + $e = $colNum + $colSpan - 1; + while($i++ < $e) { + if (isset($this->_columnWidths[$sheetIndex][$i])) { + $width += $this->_columnWidths[$sheetIndex][$i]; + } + } + $cssClass['width'] = $width . 'pt'; + + // We must also explicitly write the height of the <td> element because TCPDF + // does not recognize e.g. <tr style="height:50pt"> + if (isset($this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]['height'])) { + $height = $this->_cssStyles['table.sheet' . $sheetIndex . ' tr.row' . $pRow]['height']; + $cssClass['height'] = $height; + } + //** end of redundant code ** + + $html .= ' style="' . $this->_assembleCSS($cssClass) . '"'; + } + if ($colSpan > 1) { + $html .= ' colspan="' . $colSpan . '"'; + } + if ($rowSpan > 1) { + $html .= ' rowspan="' . $rowSpan . '"'; + } + $html .= '>'; + + // Image? + $html .= $this->_writeImageInCell($pSheet, $coordinate); + + // Chart? + if ($this->_includeCharts) { + $html .= $this->_writeChartInCell($pSheet, $coordinate); + } + + // Cell data + $html .= $cellData; + + // Column end + $html .= '</td>' . PHP_EOL; + } + + // Next column + ++$colNum; + } + + // Write row end + $html .= ' </tr>' . PHP_EOL; + + // Return + return $html; + } else { + throw new PHPExcel_Writer_Exception("Invalid parameters passed."); + } + } + + /** + * Takes array where of CSS properties / values and converts to CSS string + * + * @param array + * @return string + */ + private function _assembleCSS($pValue = array()) + { + $pairs = array(); + foreach ($pValue as $property => $value) { + $pairs[] = $property . ':' . $value; + } + $string = implode('; ', $pairs); + + return $string; + } + + /** + * Get images root + * + * @return string + */ + public function getImagesRoot() { + return $this->_imagesRoot; + } + + /** + * Set images root + * + * @param string $pValue + * @return PHPExcel_Writer_HTML + */ + public function setImagesRoot($pValue = '.') { + $this->_imagesRoot = $pValue; + return $this; + } + + /** + * Get embed images + * + * @return boolean + */ + public function getEmbedImages() { + return $this->_embedImages; + } + + /** + * Set embed images + * + * @param boolean $pValue + * @return PHPExcel_Writer_HTML + */ + public function setEmbedImages($pValue = '.') { + $this->_embedImages = $pValue; + return $this; + } + + /** + * Get use inline CSS? + * + * @return boolean + */ + public function getUseInlineCss() { + return $this->_useInlineCss; + } + + /** + * Set use inline CSS? + * + * @param boolean $pValue + * @return PHPExcel_Writer_HTML + */ + public function setUseInlineCss($pValue = false) { + $this->_useInlineCss = $pValue; + return $this; + } + + /** + * Add color to formatted string as inline style + * + * @param string $pValue Plain formatted value without color + * @param string $pFormat Format code + * @return string + */ + public function formatColor($pValue, $pFormat) + { + // Color information, e.g. [Red] is always at the beginning + $color = null; // initialize + $matches = array(); + + $color_regex = '/^\\[[a-zA-Z]+\\]/'; + if (preg_match($color_regex, $pFormat, $matches)) { + $color = str_replace('[', '', $matches[0]); + $color = str_replace(']', '', $color); + $color = strtolower($color); + } + + // convert to PCDATA + $value = htmlspecialchars($pValue); + + // color span tag + if ($color !== null) { + $value = '<span style="color:' . $color . '">' . $value . '</span>'; + } + + return $value; + } + + /** + * Calculate information about HTML colspan and rowspan which is not always the same as Excel's + */ + private function _calculateSpans() + { + // Identify all cells that should be omitted in HTML due to cell merge. + // In HTML only the upper-left cell should be written and it should have + // appropriate rowspan / colspan attribute + $sheetIndexes = $this->_sheetIndex !== null ? + array($this->_sheetIndex) : range(0, $this->_phpExcel->getSheetCount() - 1); + + foreach ($sheetIndexes as $sheetIndex) { + $sheet = $this->_phpExcel->getSheet($sheetIndex); + + $candidateSpannedRow = array(); + + // loop through all Excel merged cells + foreach ($sheet->getMergeCells() as $cells) { + list($cells, ) = PHPExcel_Cell::splitRange($cells); + $first = $cells[0]; + $last = $cells[1]; + + list($fc, $fr) = PHPExcel_Cell::coordinateFromString($first); + $fc = PHPExcel_Cell::columnIndexFromString($fc) - 1; + + list($lc, $lr) = PHPExcel_Cell::coordinateFromString($last); + $lc = PHPExcel_Cell::columnIndexFromString($lc) - 1; + + // loop through the individual cells in the individual merge + $r = $fr - 1; + while($r++ < $lr) { + // also, flag this row as a HTML row that is candidate to be omitted + $candidateSpannedRow[$r] = $r; + + $c = $fc - 1; + while($c++ < $lc) { + if ( !($c == $fc && $r == $fr) ) { + // not the upper-left cell (should not be written in HTML) + $this->_isSpannedCell[$sheetIndex][$r][$c] = array( + 'baseCell' => array($fr, $fc), + ); + } else { + // upper-left is the base cell that should hold the colspan/rowspan attribute + $this->_isBaseCell[$sheetIndex][$r][$c] = array( + 'xlrowspan' => $lr - $fr + 1, // Excel rowspan + 'rowspan' => $lr - $fr + 1, // HTML rowspan, value may change + 'xlcolspan' => $lc - $fc + 1, // Excel colspan + 'colspan' => $lc - $fc + 1, // HTML colspan, value may change + ); + } + } + } + } + + // Identify which rows should be omitted in HTML. These are the rows where all the cells + // participate in a merge and the where base cells are somewhere above. + $countColumns = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); + foreach ($candidateSpannedRow as $rowIndex) { + if (isset($this->_isSpannedCell[$sheetIndex][$rowIndex])) { + if (count($this->_isSpannedCell[$sheetIndex][$rowIndex]) == $countColumns) { + $this->_isSpannedRow[$sheetIndex][$rowIndex] = $rowIndex; + }; + } + } + + // For each of the omitted rows we found above, the affected rowspans should be subtracted by 1 + if ( isset($this->_isSpannedRow[$sheetIndex]) ) { + foreach ($this->_isSpannedRow[$sheetIndex] as $rowIndex) { + $adjustedBaseCells = array(); + $c = -1; + $e = $countColumns - 1; + while($c++ < $e) { + $baseCell = $this->_isSpannedCell[$sheetIndex][$rowIndex][$c]['baseCell']; + + if ( !in_array($baseCell, $adjustedBaseCells) ) { + // subtract rowspan by 1 + --$this->_isBaseCell[$sheetIndex][ $baseCell[0] ][ $baseCell[1] ]['rowspan']; + $adjustedBaseCells[] = $baseCell; + } + } + } + } + + // TODO: Same for columns + } + + // We have calculated the spans + $this->_spansAreCalculated = true; + } + + private function _setMargins(PHPExcel_Worksheet $pSheet) { + $htmlPage = '@page { '; + $htmlBody = 'body { '; + + $left = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getLeft()) . 'in; '; + $htmlPage .= 'left-margin: ' . $left; + $htmlBody .= 'left-margin: ' . $left; + $right = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getRight()) . 'in; '; + $htmlPage .= 'right-margin: ' . $right; + $htmlBody .= 'right-margin: ' . $right; + $top = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getTop()) . 'in; '; + $htmlPage .= 'top-margin: ' . $top; + $htmlBody .= 'top-margin: ' . $top; + $bottom = PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getBottom()) . 'in; '; + $htmlPage .= 'bottom-margin: ' . $bottom; + $htmlBody .= 'bottom-margin: ' . $bottom; + + $htmlPage .= "}\n"; + $htmlBody .= "}\n"; + + return "<style>\n" . $htmlPage . $htmlBody . "</style>\n"; + } + +} diff --git a/PHPExcel/Writer/IWriter.php b/PHPExcel/Writer/IWriter.php new file mode 100644 index 0000000..6974c93 --- /dev/null +++ b/PHPExcel/Writer/IWriter.php @@ -0,0 +1,46 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_IWriter + * + * @category PHPExcel + * @package PHPExcel_Writer + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +interface PHPExcel_Writer_IWriter +{ + /** + * Save PHPExcel to file + * + * @param string $pFilename Name of the file to save + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = NULL); + +} diff --git a/PHPExcel/Writer/PDF.php b/PHPExcel/Writer/PDF.php new file mode 100644 index 0000000..65fb50e --- /dev/null +++ b/PHPExcel/Writer/PDF.php @@ -0,0 +1,90 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_PDF + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_PDF +{ + + /** + * The wrapper for the requested PDF rendering engine + * + * @var PHPExcel_Writer_PDF_Core + */ + private $_renderer = NULL; + + /** + * Instantiate a new renderer of the configured type within this container class + * + * @param PHPExcel $phpExcel PHPExcel object + * @throws PHPExcel_Writer_Exception when PDF library is not configured + */ + public function __construct(PHPExcel $phpExcel) + { + $pdfLibraryName = PHPExcel_Settings::getPdfRendererName(); + if (is_null($pdfLibraryName)) { + throw new PHPExcel_Writer_Exception("PDF Rendering library has not been defined."); + } + + $pdfLibraryPath = PHPExcel_Settings::getPdfRendererPath(); + if (is_null($pdfLibraryName)) { + throw new PHPExcel_Writer_Exception("PDF Rendering library path has not been defined."); + } + $includePath = str_replace('\\', '/', get_include_path()); + $rendererPath = str_replace('\\', '/', $pdfLibraryPath); + if (strpos($rendererPath, $includePath) === false) { + set_include_path(get_include_path() . PATH_SEPARATOR . $pdfLibraryPath); + } + + $rendererName = 'PHPExcel_Writer_PDF_' . $pdfLibraryName; + $this->_renderer = new $rendererName($phpExcel); + } + + + /** + * Magic method to handle direct calls to the configured PDF renderer wrapper class. + * + * @param string $name Renderer library method name + * @param mixed[] $arguments Array of arguments to pass to the renderer method + * @return mixed Returned data from the PDF renderer wrapper method + */ + public function __call($name, $arguments) + { + if ($this->_renderer === NULL) { + throw new PHPExcel_Writer_Exception("PDF Rendering library has not been defined."); + } + + return call_user_func_array(array($this->_renderer, $name), $arguments); + } + +} diff --git a/PHPExcel/Writer/PDF/Core.php b/PHPExcel/Writer/PDF/Core.php new file mode 100644 index 0000000..3b281f4 --- /dev/null +++ b/PHPExcel/Writer/PDF/Core.php @@ -0,0 +1,364 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** + * PHPExcel_Writer_PDF_Core + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +abstract class PHPExcel_Writer_PDF_Core extends PHPExcel_Writer_HTML +{ + /** + * Temporary storage directory + * + * @var string + */ + protected $_tempDir = ''; + + /** + * Font + * + * @var string + */ + protected $_font = 'freesans'; + + /** + * Orientation (Over-ride) + * + * @var string + */ + protected $_orientation = NULL; + + /** + * Paper size (Over-ride) + * + * @var int + */ + protected $_paperSize = NULL; + + + /** + * Temporary storage for Save Array Return type + * + * @var string + */ + private $_saveArrayReturnType; + + /** + * Paper Sizes xRef List + * + * @var array + */ + protected static $_paperSizes = array( + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER + => 'LETTER', // (8.5 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER_SMALL + => 'LETTER', // (8.5 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_TABLOID + => array(792.00, 1224.00), // (11 in. by 17 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LEDGER + => array(1224.00, 792.00), // (17 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LEGAL + => 'LEGAL', // (8.5 in. by 14 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_STATEMENT + => array(396.00, 612.00), // (5.5 in. by 8.5 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_EXECUTIVE + => 'EXECUTIVE', // (7.25 in. by 10.5 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A3 + => 'A3', // (297 mm by 420 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4 + => 'A4', // (210 mm by 297 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4_SMALL + => 'A4', // (210 mm by 297 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A5 + => 'A5', // (148 mm by 210 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_B4 + => 'B4', // (250 mm by 353 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_B5 + => 'B5', // (176 mm by 250 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_FOLIO + => 'FOLIO', // (8.5 in. by 13 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_QUARTO + => array(609.45, 779.53), // (215 mm by 275 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_STANDARD_1 + => array(720.00, 1008.00), // (10 in. by 14 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_STANDARD_2 + => array(792.00, 1224.00), // (11 in. by 17 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_NOTE + => 'LETTER', // (8.5 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_NO9_ENVELOPE + => array(279.00, 639.00), // (3.875 in. by 8.875 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_NO10_ENVELOPE + => array(297.00, 684.00), // (4.125 in. by 9.5 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_NO11_ENVELOPE + => array(324.00, 747.00), // (4.5 in. by 10.375 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_NO12_ENVELOPE + => array(342.00, 792.00), // (4.75 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_NO14_ENVELOPE + => array(360.00, 828.00), // (5 in. by 11.5 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_C + => array(1224.00, 1584.00), // (17 in. by 22 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_D + => array(1584.00, 2448.00), // (22 in. by 34 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_E + => array(2448.00, 3168.00), // (34 in. by 44 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_DL_ENVELOPE + => array(311.81, 623.62), // (110 mm by 220 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_C5_ENVELOPE + => 'C5', // (162 mm by 229 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_C3_ENVELOPE + => 'C3', // (324 mm by 458 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_C4_ENVELOPE + => 'C4', // (229 mm by 324 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_C6_ENVELOPE + => 'C6', // (114 mm by 162 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_C65_ENVELOPE + => array(323.15, 649.13), // (114 mm by 229 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_B4_ENVELOPE + => 'B4', // (250 mm by 353 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_B5_ENVELOPE + => 'B5', // (176 mm by 250 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_B6_ENVELOPE + => array(498.90, 354.33), // (176 mm by 125 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_ITALY_ENVELOPE + => array(311.81, 651.97), // (110 mm by 230 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_MONARCH_ENVELOPE + => array(279.00, 540.00), // (3.875 in. by 7.5 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_6_3_4_ENVELOPE + => array(261.00, 468.00), // (3.625 in. by 6.5 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_US_STANDARD_FANFOLD + => array(1071.00, 792.00), // (14.875 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_GERMAN_STANDARD_FANFOLD + => array(612.00, 864.00), // (8.5 in. by 12 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_GERMAN_LEGAL_FANFOLD + => 'FOLIO', // (8.5 in. by 13 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_ISO_B4 + => 'B4', // (250 mm by 353 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_JAPANESE_DOUBLE_POSTCARD + => array(566.93, 419.53), // (200 mm by 148 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_STANDARD_PAPER_1 + => array(648.00, 792.00), // (9 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_STANDARD_PAPER_2 + => array(720.00, 792.00), // (10 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_STANDARD_PAPER_3 + => array(1080.00, 792.00), // (15 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_INVITE_ENVELOPE + => array(623.62, 623.62), // (220 mm by 220 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER_EXTRA_PAPER + => array(667.80, 864.00), // (9.275 in. by 12 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LEGAL_EXTRA_PAPER + => array(667.80, 1080.00), // (9.275 in. by 15 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_TABLOID_EXTRA_PAPER + => array(841.68, 1296.00), // (11.69 in. by 18 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4_EXTRA_PAPER + => array(668.98, 912.76), // (236 mm by 322 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER_TRANSVERSE_PAPER + => array(595.80, 792.00), // (8.275 in. by 11 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4_TRANSVERSE_PAPER + => 'A4', // (210 mm by 297 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER_EXTRA_TRANSVERSE_PAPER + => array(667.80, 864.00), // (9.275 in. by 12 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_SUPERA_SUPERA_A4_PAPER + => array(643.46, 1009.13), // (227 mm by 356 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_SUPERB_SUPERB_A3_PAPER + => array(864.57, 1380.47), // (305 mm by 487 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER_PLUS_PAPER + => array(612.00, 913.68), // (8.5 in. by 12.69 in.) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4_PLUS_PAPER + => array(595.28, 935.43), // (210 mm by 330 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A5_TRANSVERSE_PAPER + => 'A5', // (148 mm by 210 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_JIS_B5_TRANSVERSE_PAPER + => array(515.91, 728.50), // (182 mm by 257 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A3_EXTRA_PAPER + => array(912.76, 1261.42), // (322 mm by 445 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A5_EXTRA_PAPER + => array(493.23, 666.14), // (174 mm by 235 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_ISO_B5_EXTRA_PAPER + => array(569.76, 782.36), // (201 mm by 276 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A2_PAPER + => 'A2', // (420 mm by 594 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A3_TRANSVERSE_PAPER + => 'A3', // (297 mm by 420 mm) + PHPExcel_Worksheet_PageSetup::PAPERSIZE_A3_EXTRA_TRANSVERSE_PAPER + => array(912.76, 1261.42) // (322 mm by 445 mm) + ); + + /** + * Create a new PHPExcel_Writer_PDF + * + * @param PHPExcel $phpExcel PHPExcel object + */ + public function __construct(PHPExcel $phpExcel) + { + parent::__construct($phpExcel); + $this->setUseInlineCss(TRUE); + $this->_tempDir = PHPExcel_Shared_File::sys_get_temp_dir(); + } + + /** + * Get Font + * + * @return string + */ + public function getFont() + { + return $this->_font; + } + + /** + * Set font. Examples: + * 'arialunicid0-chinese-simplified' + * 'arialunicid0-chinese-traditional' + * 'arialunicid0-korean' + * 'arialunicid0-japanese' + * + * @param string $fontName + */ + public function setFont($fontName) + { + $this->_font = $fontName; + return $this; + } + + /** + * Get Paper Size + * + * @return int + */ + public function getPaperSize() + { + return $this->_paperSize; + } + + /** + * Set Paper Size + * + * @param string $pValue Paper size + * @return PHPExcel_Writer_PDF + */ + public function setPaperSize($pValue = PHPExcel_Worksheet_PageSetup::PAPERSIZE_LETTER) + { + $this->_paperSize = $pValue; + return $this; + } + + /** + * Get Orientation + * + * @return string + */ + public function getOrientation() + { + return $this->_orientation; + } + + /** + * Set Orientation + * + * @param string $pValue Page orientation + * @return PHPExcel_Writer_PDF + */ + public function setOrientation($pValue = PHPExcel_Worksheet_PageSetup::ORIENTATION_DEFAULT) + { + $this->_orientation = $pValue; + return $this; + } + + /** + * Get temporary storage directory + * + * @return string + */ + public function getTempDir() + { + return $this->_tempDir; + } + + /** + * Set temporary storage directory + * + * @param string $pValue Temporary storage directory + * @throws PHPExcel_Writer_Exception when directory does not exist + * @return PHPExcel_Writer_PDF + */ + public function setTempDir($pValue = '') + { + if (is_dir($pValue)) { + $this->_tempDir = $pValue; + } else { + throw new PHPExcel_Writer_Exception("Directory does not exist: $pValue"); + } + return $this; + } + + /** + * Save PHPExcel to PDF file, pre-save + * + * @param string $pFilename Name of the file to save as + * @throws PHPExcel_Writer_Exception + */ + protected function prepareForSave($pFilename = NULL) + { + // garbage collect + $this->_phpExcel->garbageCollect(); + + $this->_saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType(); + PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE); + + // Open file + $fileHandle = fopen($pFilename, 'w'); + if ($fileHandle === FALSE) { + throw new PHPExcel_Writer_Exception("Could not open file $pFilename for writing."); + } + + // Set PDF + $this->_isPdf = TRUE; + // Build CSS + $this->buildCSS(TRUE); + + return $fileHandle; + } + + /** + * Save PHPExcel to PDF file, post-save + * + * @param resource $fileHandle + * @throws PHPExcel_Writer_Exception + */ + protected function restoreStateAfterSave($fileHandle) + { + // Close file + fclose($fileHandle); + + PHPExcel_Calculation::setArrayReturnType($this->_saveArrayReturnType); + } + +} diff --git a/PHPExcel/Writer/PDF/DomPDF.php b/PHPExcel/Writer/PDF/DomPDF.php new file mode 100644 index 0000000..111dd36 --- /dev/null +++ b/PHPExcel/Writer/PDF/DomPDF.php @@ -0,0 +1,120 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** Require DomPDF library */ +$pdfRendererClassFile = PHPExcel_Settings::getPdfRendererPath() . '/dompdf_config.inc.php'; +if (file_exists($pdfRendererClassFile)) { + require_once $pdfRendererClassFile; +} else { + throw new PHPExcel_Writer_Exception('Unable to load PDF Rendering library'); +} + +/** + * PHPExcel_Writer_PDF_DomPDF + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_PDF_DomPDF extends PHPExcel_Writer_PDF_Core implements PHPExcel_Writer_IWriter +{ + /** + * Create a new PHPExcel_Writer_PDF + * + * @param PHPExcel $phpExcel PHPExcel object + */ + public function __construct(PHPExcel $phpExcel) + { + parent::__construct($phpExcel); + } + + /** + * Save PHPExcel to file + * + * @param string $pFilename Name of the file to save as + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = NULL) + { + $fileHandle = parent::prepareForSave($pFilename); + + // Default PDF paper size + $paperSize = 'LETTER'; // Letter (8.5 in. by 11 in.) + + // Check for paper size and page orientation + if (is_null($this->getSheetIndex())) { + $orientation = ($this->_phpExcel->getSheet(0)->getPageSetup()->getOrientation() + == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) + ? 'L' + : 'P'; + $printPaperSize = $this->_phpExcel->getSheet(0)->getPageSetup()->getPaperSize(); + $printMargins = $this->_phpExcel->getSheet(0)->getPageMargins(); + } else { + $orientation = ($this->_phpExcel->getSheet($this->getSheetIndex())->getPageSetup()->getOrientation() + == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) + ? 'L' + : 'P'; + $printPaperSize = $this->_phpExcel->getSheet($this->getSheetIndex())->getPageSetup()->getPaperSize(); + $printMargins = $this->_phpExcel->getSheet($this->getSheetIndex())->getPageMargins(); + } + + // Override Page Orientation + if (!is_null($this->getOrientation())) { + $orientation = ($this->getOrientation() == PHPExcel_Worksheet_PageSetup::ORIENTATION_DEFAULT) + ? PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT + : $this->getOrientation(); + } + // Override Paper Size + if (!is_null($this->getPaperSize())) { + $printPaperSize = $this->getPaperSize(); + } + + if (isset(self::$_paperSizes[$printPaperSize])) { + $paperSize = self::$_paperSizes[$printPaperSize]; + } + + $orientation = ($orientation == 'L') ? 'landscape' : 'portrait'; + + // Create PDF + $pdf = new DOMPDF(); + $pdf->set_paper(strtolower($paperSize), $orientation); + + $pdf->load_html( + $this->generateHTMLHeader(FALSE) . + $this->generateSheetData() . + $this->generateHTMLFooter() + ); + $pdf->render(); + + // Write to file + fwrite($fileHandle, $pdf->output()); + + parent::restoreStateAfterSave($fileHandle); + } + +} diff --git a/PHPExcel/Writer/PDF/mPDF.php b/PHPExcel/Writer/PDF/mPDF.php new file mode 100644 index 0000000..8e274f4 --- /dev/null +++ b/PHPExcel/Writer/PDF/mPDF.php @@ -0,0 +1,130 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** Require mPDF library */ +$pdfRendererClassFile = PHPExcel_Settings::getPdfRendererPath() . '/mpdf.php'; +if (file_exists($pdfRendererClassFile)) { + require_once $pdfRendererClassFile; +} else { + throw new PHPExcel_Writer_Exception('Unable to load PDF Rendering library'); +} + +/** + * PHPExcel_Writer_PDF_mPDF + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_PDF_mPDF extends PHPExcel_Writer_PDF_Core implements PHPExcel_Writer_IWriter +{ + /** + * Create a new PHPExcel_Writer_PDF + * + * @param PHPExcel $phpExcel PHPExcel object + */ + public function __construct(PHPExcel $phpExcel) + { + parent::__construct($phpExcel); + } + + /** + * Save PHPExcel to file + * + * @param string $pFilename Name of the file to save as + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = NULL) + { + $fileHandle = parent::prepareForSave($pFilename); + + // Default PDF paper size + $paperSize = 'LETTER'; // Letter (8.5 in. by 11 in.) + + // Check for paper size and page orientation + if (is_null($this->getSheetIndex())) { + $orientation = ($this->_phpExcel->getSheet(0)->getPageSetup()->getOrientation() + == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) + ? 'L' + : 'P'; + $printPaperSize = $this->_phpExcel->getSheet(0)->getPageSetup()->getPaperSize(); + $printMargins = $this->_phpExcel->getSheet(0)->getPageMargins(); + } else { + $orientation = ($this->_phpExcel->getSheet($this->getSheetIndex())->getPageSetup()->getOrientation() + == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) + ? 'L' + : 'P'; + $printPaperSize = $this->_phpExcel->getSheet($this->getSheetIndex())->getPageSetup()->getPaperSize(); + $printMargins = $this->_phpExcel->getSheet($this->getSheetIndex())->getPageMargins(); + } + $this->setOrientation($orientation); + + // Override Page Orientation + if (!is_null($this->getOrientation())) { + $orientation = ($this->getOrientation() == PHPExcel_Worksheet_PageSetup::ORIENTATION_DEFAULT) + ? PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT + : $this->getOrientation(); + } + $orientation = strtoupper($orientation); + + // Override Paper Size + if (!is_null($this->getPaperSize())) { + $printPaperSize = $this->getPaperSize(); + } + + if (isset(self::$_paperSizes[$printPaperSize])) { + $paperSize = self::$_paperSizes[$printPaperSize]; + } + + // Create PDF + $pdf = new mpdf(); + $ortmp = $orientation; + $pdf->_setPageSize(strtoupper($paperSize), $ortmp); + $pdf->DefOrientation = $orientation; + $pdf->AddPage($orientation); + + // Document info + $pdf->SetTitle($this->_phpExcel->getProperties()->getTitle()); + $pdf->SetAuthor($this->_phpExcel->getProperties()->getCreator()); + $pdf->SetSubject($this->_phpExcel->getProperties()->getSubject()); + $pdf->SetKeywords($this->_phpExcel->getProperties()->getKeywords()); + $pdf->SetCreator($this->_phpExcel->getProperties()->getCreator()); + + $pdf->WriteHTML( + $this->generateHTMLHeader(FALSE) . + $this->generateSheetData() . + $this->generateHTMLFooter() + ); + + // Write to file + fwrite($fileHandle, $pdf->Output('', 'S')); + + parent::restoreStateAfterSave($fileHandle); + } + +} diff --git a/PHPExcel/Writer/PDF/tcPDF.php b/PHPExcel/Writer/PDF/tcPDF.php new file mode 100644 index 0000000..c3809ec --- /dev/null +++ b/PHPExcel/Writer/PDF/tcPDF.php @@ -0,0 +1,136 @@ +<?php +/** + * PHPExcel + * + * Copyright (c) 2006 - 2014 PHPExcel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version 1.8.0, 2014-03-02 + */ + + +/** Require tcPDF library */ +$pdfRendererClassFile = PHPExcel_Settings::getPdfRendererPath() . '/tcpdf.php'; +if (file_exists($pdfRendererClassFile)) { + $k_path_url = PHPExcel_Settings::getPdfRendererPath(); + require_once $pdfRendererClassFile; +} else { + throw new PHPExcel_Writer_Exception('Unable to load PDF Rendering library'); +} + +/** + * PHPExcel_Writer_PDF_tcPDF + * + * @category PHPExcel + * @package PHPExcel_Writer_PDF + * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) + */ +class PHPExcel_Writer_PDF_tcPDF extends PHPExcel_Writer_PDF_Core implements PHPExcel_Writer_IWriter +{ + /** + * Create a new PHPExcel_Writer_PDF + * + * @param PHPExcel $phpExcel PHPExcel object + */ + public function __construct(PHPExcel $phpExcel) + { + parent::__construct($phpExcel); + } + + /** + * Save PHPExcel to file + * + * @param string $pFilename Name of the file to save as + * @throws PHPExcel_Writer_Exception + */ + public function save($pFilename = NULL) + { + $fileHandle = parent::prepareForSave($pFilename); + + // Default PDF paper size + $paperSize = 'LETTER'; // Letter (8.5 in. by 11 in.) + + // Check for paper size and page orientation + if (is_null($this->getSheetIndex())) { + $orientation = ($this->_phpExcel->getSheet(0)->getPageSetup()->getOrientation() + == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) + ? 'L' + : 'P'; + $printPaperSize = $this->_phpExcel->getSheet(0)->getPageSetup()->getPaperSize(); + $printMargins = $this->_phpExcel->getSheet(0)->getPageMargins(); + } else { + $orientation = ($this->_phpExcel->getSheet($this->getSheetIndex())->getPageSetup()->getOrientation() + == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) + ? 'L' + : 'P'; + $printPaperSize = $this->_phpExcel->getSheet($this->getSheetIndex())->getPageSetup()->getPaperSize(); + $printMargins = $this->_phpExcel->getSheet($this->getSheetIndex())->getPageMargins(); + } + + // Override Page Orientation + if (!is_null($this->getOrientation())) { + $orientation = ($this->getOrientation() == PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE) + ? 'L' + : 'P'; + } + // Override Paper Size + if (!is_null($this->getPaperSize())) { + $printPaperSize = $this->getPaperSize(); + } + + if (isset(self::$_paperSizes[$printPaperSize])) { + $paperSize = self::$_paperSizes[$printPaperSize]; + } + + + // Create PDF + $pdf = new TCPDF($orientation, 'pt', $paperSize); + $pdf->setFontSubsetting(FALSE); + // Set margins, converting inches to points (using 72 dpi) + $pdf->SetMargins($printMargins->getLeft() * 72, $printMargins->getTop() * 72, $printMargins->getRight() * 72); + $pdf->SetAutoPageBreak(TRUE, $printMargins->getBottom() * 72); + + $pdf->setPrintHeader(FALSE); + $pdf->setPrintFooter(FALSE); + + $pdf->AddPage(); + + // Set the appropriate font + $pdf->SetFont($this->getFont()); + $pdf->writeHTML( + $this->generateHTMLHeader(FALSE) . + $this->generateSheetData() . + $this->generateHTMLFooter() + ); + + // Document info + $pdf->SetTitle($this->_phpExcel->getProperties()->getTitle()); + $pdf->SetAuthor($this->_phpExcel->getProperties()->getCreator()); + $pdf->SetSubject($this->_phpExcel->getProperties()->getSubject()); + $pdf->SetKeywords($this->_phpExcel->getProperties()->getKeywords()); + $pdf->SetCreator($this->_phpExcel->getProperties()->getCreator()); + + // Write to file + fwrite($fileHandle, $pdf->output($pFilename, 'S')); + + parent::restoreStateAfterSave($fileHandle); + } + +} diff --git a/PHPExcel/locale/bg/config b/PHPExcel/locale/bg/config new file mode 100644 index 0000000..d7ecb2b --- /dev/null +++ b/PHPExcel/locale/bg/config @@ -0,0 +1,49 @@ +## +## PHPExcel +## + +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = лв + + +## +## Excel Error Codes (For future use) + +## +NULL = #ПРАЗНО! +DIV0 = #ДЕЛ/0! +VALUE = #СТОЙНОСТ! +REF = #РЕФ! +NAME = #ИМЕ? +NUM = #ЧИСЛО! +NA = #Н/Д diff --git a/PHPExcel/locale/cs/config b/PHPExcel/locale/cs/config new file mode 100644 index 0000000..af4589b --- /dev/null +++ b/PHPExcel/locale/cs/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = Kč + + +## +## Excel Error Codes (For future use) +## +NULL = #NULL! +DIV0 = #DIV/0! +VALUE = #HODNOTA! +REF = #REF! +NAME = #NÁZEV? +NUM = #NUM! +NA = #N/A diff --git a/PHPExcel/locale/cs/functions b/PHPExcel/locale/cs/functions new file mode 100644 index 0000000..f324759 --- /dev/null +++ b/PHPExcel/locale/cs/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Funkce doplňků a automatizace +## +GETPIVOTDATA = ZÍSKATKONTDATA ## Vrátí data uložená v kontingenční tabulce. Pomocí funkce ZÍSKATKONTDATA můžete načíst souhrnná data z kontingenční tabulky, pokud jsou tato data v kontingenční sestavě zobrazena. + + +## +## Cube functions Funkce pro práci s krychlemi +## +CUBEKPIMEMBER = CUBEKPIMEMBER ## Vrátí název, vlastnost a velikost klíčového ukazatele výkonu (KUV) a zobrazí v buňce název a vlastnost. Klíčový ukazatel výkonu je kvantifikovatelná veličina, například hrubý měsíční zisk nebo čtvrtletní obrat na zaměstnance, která se používá pro sledování výkonnosti organizace. +CUBEMEMBER = CUBEMEMBER ## Vrátí člen nebo n-tici v hierarchii krychle. Slouží k ověření, zda v krychli existuje člen nebo n-tice. +CUBEMEMBERPROPERTY = CUBEMEMBERPROPERTY ## Vrátí hodnotu vlastnosti člena v krychli. Slouží k ověření, zda v krychli existuje člen s daným názvem, a k vrácení konkrétní vlastnosti tohoto člena. +CUBERANKEDMEMBER = CUBERANKEDMEMBER ## Vrátí n-tý nebo pořadový člen sady. Použijte ji pro vrácení jednoho nebo více prvků sady, například obchodníka s nejvyšším obratem nebo deseti nejlepších studentů. +CUBESET = CUBESET ## Definuje vypočtenou sadu členů nebo n-tic odesláním výrazu sady do krychle na serveru, který vytvoří sadu a potom ji vrátí do aplikace Microsoft Office Excel. +CUBESETCOUNT = CUBESETCOUNT ## Vrátí počet položek v množině +CUBEVALUE = CUBEVALUE ## Vrátí úhrnnou hodnotu z krychle. + + +## +## Database functions Funkce databáze +## +DAVERAGE = DPRŮMĚR ## Vrátí průměr vybraných položek databáze. +DCOUNT = DPOČET ## Spočítá buňky databáze obsahující čísla. +DCOUNTA = DPOČET2 ## Spočítá buňky databáze, které nejsou prázdné. +DGET = DZÍSKAT ## Extrahuje z databáze jeden záznam splňující zadaná kritéria. +DMAX = DMAX ## Vrátí maximální hodnotu z vybraných položek databáze. +DMIN = DMIN ## Vrátí minimální hodnotu z vybraných položek databáze. +DPRODUCT = DSOUČIN ## Vynásobí hodnoty určitého pole záznamů v databázi, které splňují daná kritéria. +DSTDEV = DSMODCH.VÝBĚR ## Odhadne směrodatnou odchylku výběru vybraných položek databáze. +DSTDEVP = DSMODCH ## Vypočte směrodatnou odchylku základního souboru vybraných položek databáze. +DSUM = DSUMA ## Sečte čísla ve sloupcovém poli záznamů databáze, která splňují daná kritéria. +DVAR = DVAR.VÝBĚR ## Odhadne rozptyl výběru vybraných položek databáze. +DVARP = DVAR ## Vypočte rozptyl základního souboru vybraných položek databáze. + + +## +## Date and time functions Funkce data a času +## +DATE = DATUM ## Vrátí pořadové číslo určitého data. +DATEVALUE = DATUMHODN ## Převede datum ve formě textu na pořadové číslo. +DAY = DEN ## Převede pořadové číslo na den v měsíci. +DAYS360 = ROK360 ## Vrátí počet dní mezi dvěma daty na základě roku s 360 dny. +EDATE = EDATE ## Vrátí pořadové číslo data, které označuje určený počet měsíců před nebo po počátečním datu. +EOMONTH = EOMONTH ## Vrátí pořadové číslo posledního dne měsíce před nebo po zadaném počtu měsíců. +HOUR = HODINA ## Převede pořadové číslo na hodinu. +MINUTE = MINUTA ## Převede pořadové číslo na minutu. +MONTH = MĚSÍC ## Převede pořadové číslo na měsíc. +NETWORKDAYS = NETWORKDAYS ## Vrátí počet celých pracovních dní mezi dvěma daty. +NOW = NYNÍ ## Vrátí pořadové číslo aktuálního data a času. +SECOND = SEKUNDA ## Převede pořadové číslo na sekundu. +TIME = ČAS ## Vrátí pořadové číslo určitého času. +TIMEVALUE = ČASHODN ## Převede čas ve formě textu na pořadové číslo. +TODAY = DNES ## Vrátí pořadové číslo dnešního data. +WEEKDAY = DENTÝDNE ## Převede pořadové číslo na den v týdnu. +WEEKNUM = WEEKNUM ## Převede pořadové číslo na číslo představující číselnou pozici týdne v roce. +WORKDAY = WORKDAY ## Vrátí pořadové číslo data před nebo po zadaném počtu pracovních dní. +YEAR = ROK ## Převede pořadové číslo na rok. +YEARFRAC = YEARFRAC ## Vrátí část roku vyjádřenou zlomkem a představující počet celých dní mezi počátečním a koncovým datem. + + +## +## Engineering functions Inženýrské funkce (Technické funkce) +## +BESSELI = BESSELI ## Vrátí modifikovanou Besselovu funkci In(x). +BESSELJ = BESSELJ ## Vrátí modifikovanou Besselovu funkci Jn(x). +BESSELK = BESSELK ## Vrátí modifikovanou Besselovu funkci Kn(x). +BESSELY = BESSELY ## Vrátí Besselovu funkci Yn(x). +BIN2DEC = BIN2DEC ## Převede binární číslo na desítkové. +BIN2HEX = BIN2HEX ## Převede binární číslo na šestnáctkové. +BIN2OCT = BIN2OCT ## Převede binární číslo na osmičkové. +COMPLEX = COMPLEX ## Převede reálnou a imaginární část na komplexní číslo. +CONVERT = CONVERT ## Převede číslo do jiného jednotkového měrného systému. +DEC2BIN = DEC2BIN ## Převede desítkového čísla na dvojkové +DEC2HEX = DEC2HEX ## Převede desítkové číslo na šestnáctkové. +DEC2OCT = DEC2OCT ## Převede desítkové číslo na osmičkové. +DELTA = DELTA ## Testuje rovnost dvou hodnot. +ERF = ERF ## Vrátí chybovou funkci. +ERFC = ERFC ## Vrátí doplňkovou chybovou funkci. +GESTEP = GESTEP ## Testuje, zda je číslo větší než mezní hodnota. +HEX2BIN = HEX2BIN ## Převede šestnáctkové číslo na binární. +HEX2DEC = HEX2DEC ## Převede šestnáctkové číslo na desítkové. +HEX2OCT = HEX2OCT ## Převede šestnáctkové číslo na osmičkové. +IMABS = IMABS ## Vrátí absolutní hodnotu (modul) komplexního čísla. +IMAGINARY = IMAGINARY ## Vrátí imaginární část komplexního čísla. +IMARGUMENT = IMARGUMENT ## Vrátí argument théta, úhel vyjádřený v radiánech. +IMCONJUGATE = IMCONJUGATE ## Vrátí komplexně sdružené číslo ke komplexnímu číslu. +IMCOS = IMCOS ## Vrátí kosinus komplexního čísla. +IMDIV = IMDIV ## Vrátí podíl dvou komplexních čísel. +IMEXP = IMEXP ## Vrátí exponenciální tvar komplexního čísla. +IMLN = IMLN ## Vrátí přirozený logaritmus komplexního čísla. +IMLOG10 = IMLOG10 ## Vrátí dekadický logaritmus komplexního čísla. +IMLOG2 = IMLOG2 ## Vrátí logaritmus komplexního čísla při základu 2. +IMPOWER = IMPOWER ## Vrátí komplexní číslo umocněné na celé číslo. +IMPRODUCT = IMPRODUCT ## Vrátí součin komplexních čísel. +IMREAL = IMREAL ## Vrátí reálnou část komplexního čísla. +IMSIN = IMSIN ## Vrátí sinus komplexního čísla. +IMSQRT = IMSQRT ## Vrátí druhou odmocninu komplexního čísla. +IMSUB = IMSUB ## Vrátí rozdíl mezi dvěma komplexními čísly. +IMSUM = IMSUM ## Vrátí součet dvou komplexních čísel. +OCT2BIN = OCT2BIN ## Převede osmičkové číslo na binární. +OCT2DEC = OCT2DEC ## Převede osmičkové číslo na desítkové. +OCT2HEX = OCT2HEX ## Převede osmičkové číslo na šestnáctkové. + + +## +## Financial functions Finanční funkce +## +ACCRINT = ACCRINT ## Vrátí nahromaděný úrok z cenného papíru, ze kterého je úrok placen v pravidelných termínech. +ACCRINTM = ACCRINTM ## Vrátí nahromaděný úrok z cenného papíru, ze kterého je úrok placen k datu splatnosti. +AMORDEGRC = AMORDEGRC ## Vrátí lineární amortizaci v každém účetním období pomocí koeficientu amortizace. +AMORLINC = AMORLINC ## Vrátí lineární amortizaci v každém účetním období. +COUPDAYBS = COUPDAYBS ## Vrátí počet dnů od začátku období placení kupónů do data splatnosti. +COUPDAYS = COUPDAYS ## Vrátí počet dnů v období placení kupónů, které obsahuje den zúčtování. +COUPDAYSNC = COUPDAYSNC ## Vrátí počet dnů od data zúčtování do následujícího data placení kupónu. +COUPNCD = COUPNCD ## Vrátí následující datum placení kupónu po datu zúčtování. +COUPNUM = COUPNUM ## Vrátí počet kupónů splatných mezi datem zúčtování a datem splatnosti. +COUPPCD = COUPPCD ## Vrátí předchozí datum placení kupónu před datem zúčtování. +CUMIPMT = CUMIPMT ## Vrátí kumulativní úrok splacený mezi dvěma obdobími. +CUMPRINC = CUMPRINC ## Vrátí kumulativní jistinu splacenou mezi dvěma obdobími půjčky. +DB = ODPIS.ZRYCH ## Vrátí odpis aktiva za určité období pomocí degresivní metody odpisu s pevným zůstatkem. +DDB = ODPIS.ZRYCH2 ## Vrátí odpis aktiva za určité období pomocí dvojité degresivní metody odpisu nebo jiné metody, kterou zadáte. +DISC = DISC ## Vrátí diskontní sazbu cenného papíru. +DOLLARDE = DOLLARDE ## Převede částku v korunách vyjádřenou zlomkem na částku v korunách vyjádřenou desetinným číslem. +DOLLARFR = DOLLARFR ## Převede částku v korunách vyjádřenou desetinným číslem na částku v korunách vyjádřenou zlomkem. +DURATION = DURATION ## Vrátí roční dobu cenného papíru s pravidelnými úrokovými sazbami. +EFFECT = EFFECT ## Vrátí efektivní roční úrokovou sazbu. +FV = BUDHODNOTA ## Vrátí budoucí hodnotu investice. +FVSCHEDULE = FVSCHEDULE ## Vrátí budoucí hodnotu počáteční jistiny po použití série sazeb složitého úroku. +INTRATE = INTRATE ## Vrátí úrokovou sazbu plně investovaného cenného papíru. +IPMT = PLATBA.ÚROK ## Vrátí výšku úroku investice za dané období. +IRR = MÍRA.VÝNOSNOSTI ## Vrátí vnitřní výnosové procento série peněžních toků. +ISPMT = ISPMT ## Vypočte výši úroku z investice zaplaceného během určitého období. +MDURATION = MDURATION ## Vrátí Macauleyho modifikovanou dobu cenného papíru o nominální hodnotě 100 Kč. +MIRR = MOD.MÍRA.VÝNOSNOSTI ## Vrátí vnitřní sazbu výnosu, přičemž kladné a záporné hodnoty peněžních prostředků jsou financovány podle různých sazeb. +NOMINAL = NOMINAL ## Vrátí nominální roční úrokovou sazbu. +NPER = POČET.OBDOBÍ ## Vrátí počet období pro investici. +NPV = ČISTÁ.SOUČHODNOTA ## Vrátí čistou současnou hodnotu investice vypočítanou na základě série pravidelných peněžních toků a diskontní sazby. +ODDFPRICE = ODDFPRICE ## Vrátí cenu cenného papíru o nominální hodnotě 100 Kč s odlišným prvním obdobím. +ODDFYIELD = ODDFYIELD ## Vrátí výnos cenného papíru s odlišným prvním obdobím. +ODDLPRICE = ODDLPRICE ## Vrátí cenu cenného papíru o nominální hodnotě 100 Kč s odlišným posledním obdobím. +ODDLYIELD = ODDLYIELD ## Vrátí výnos cenného papíru s odlišným posledním obdobím. +PMT = PLATBA ## Vrátí hodnotu pravidelné splátky anuity. +PPMT = PLATBA.ZÁKLAD ## Vrátí hodnotu splátky jistiny pro zadanou investici za dané období. +PRICE = PRICE ## Vrátí cenu cenného papíru o nominální hodnotě 100 Kč, ze kterého je úrok placen v pravidelných termínech. +PRICEDISC = PRICEDISC ## Vrátí cenu diskontního cenného papíru o nominální hodnotě 100 Kč. +PRICEMAT = PRICEMAT ## Vrátí cenu cenného papíru o nominální hodnotě 100 Kč, ze kterého je úrok placen k datu splatnosti. +PV = SOUČHODNOTA ## Vrátí současnou hodnotu investice. +RATE = ÚROKOVÁ.MÍRA ## Vrátí úrokovou sazbu vztaženou na období anuity. +RECEIVED = RECEIVED ## Vrátí částku obdrženou k datu splatnosti plně investovaného cenného papíru. +SLN = ODPIS.LIN ## Vrátí přímé odpisy aktiva pro jedno období. +SYD = ODPIS.NELIN ## Vrátí směrné číslo ročních odpisů aktiva pro zadané období. +TBILLEQ = TBILLEQ ## Vrátí výnos směnky státní pokladny ekvivalentní výnosu obligace. +TBILLPRICE = TBILLPRICE ## Vrátí cenu směnky státní pokladny o nominální hodnotě 100 Kč. +TBILLYIELD = TBILLYIELD ## Vrátí výnos směnky státní pokladny. +VDB = ODPIS.ZA.INT ## Vrátí odpis aktiva pro určité období nebo část období pomocí degresivní metody odpisu. +XIRR = XIRR ## Vrátí vnitřní výnosnost pro harmonogram peněžních toků, který nemusí být nutně periodický. +XNPV = XNPV ## Vrátí čistou současnou hodnotu pro harmonogram peněžních toků, který nemusí být nutně periodický. +YIELD = YIELD ## Vrátí výnos cenného papíru, ze kterého je úrok placen v pravidelných termínech. +YIELDDISC = YIELDDISC ## Vrátí roční výnos diskontního cenného papíru, například směnky státní pokladny. +YIELDMAT = YIELDMAT ## Vrátí roční výnos cenného papíru, ze kterého je úrok placen k datu splatnosti. + + +## +## Information functions Informační funkce +## +CELL = POLÍČKO ## Vrátí informace o formátování, umístění nebo obsahu buňky. +ERROR.TYPE = CHYBA.TYP ## Vrátí číslo odpovídající typu chyby. +INFO = O.PROSTŘEDÍ ## Vrátí informace o aktuálním pracovním prostředí. +ISBLANK = JE.PRÁZDNÉ ## Vrátí hodnotu PRAVDA, pokud se argument hodnota odkazuje na prázdnou buňku. +ISERR = JE.CHYBA ## Vrátí hodnotu PRAVDA, pokud je argument hodnota libovolná chybová hodnota (kromě #N/A). +ISERROR = JE.CHYBHODN ## Vrátí hodnotu PRAVDA, pokud je argument hodnota libovolná chybová hodnota. +ISEVEN = ISEVEN ## Vrátí hodnotu PRAVDA, pokud je číslo sudé. +ISLOGICAL = JE.LOGHODN ## Vrátí hodnotu PRAVDA, pokud je argument hodnota logická hodnota. +ISNA = JE.NEDEF ## Vrátí hodnotu PRAVDA, pokud je argument hodnota chybová hodnota #N/A. +ISNONTEXT = JE.NETEXT ## Vrátí hodnotu PRAVDA, pokud argument hodnota není text. +ISNUMBER = JE.ČÍSLO ## Vrátí hodnotu PRAVDA, pokud je argument hodnota číslo. +ISODD = ISODD ## Vrátí hodnotu PRAVDA, pokud je číslo liché. +ISREF = JE.ODKAZ ## Vrátí hodnotu PRAVDA, pokud je argument hodnota odkaz. +ISTEXT = JE.TEXT ## Vrátí hodnotu PRAVDA, pokud je argument hodnota text. +N = N ## Vrátí hodnotu převedenou na číslo. +NA = NEDEF ## Vrátí chybovou hodnotu #N/A. +TYPE = TYP ## Vrátí číslo označující datový typ hodnoty. + + +## +## Logical functions Logické funkce +## +AND = A ## Vrátí hodnotu PRAVDA, mají-li všechny argumenty hodnotu PRAVDA. +FALSE = NEPRAVDA ## Vrátí logickou hodnotu NEPRAVDA. +IF = KDYŽ ## Určí, který logický test má proběhnout. +IFERROR = IFERROR ## Pokud je vzorec vyhodnocen jako chyba, vrátí zadanou hodnotu. V opačném případě vrátí výsledek vzorce. +NOT = NE ## Provede logickou negaci argumentu funkce. +OR = NEBO ## Vrátí hodnotu PRAVDA, je-li alespoň jeden argument roven hodnotě PRAVDA. +TRUE = PRAVDA ## Vrátí logickou hodnotu PRAVDA. + + +## +## Lookup and reference functions Vyhledávací funkce +## +ADDRESS = ODKAZ ## Vrátí textový odkaz na jednu buňku listu. +AREAS = POČET.BLOKŮ ## Vrátí počet oblastí v odkazu. +CHOOSE = ZVOLIT ## Zvolí hodnotu ze seznamu hodnot. +COLUMN = SLOUPEC ## Vrátí číslo sloupce odkazu. +COLUMNS = SLOUPCE ## Vrátí počet sloupců v odkazu. +HLOOKUP = VVYHLEDAT ## Prohledá horní řádek matice a vrátí hodnotu určené buňky. +HYPERLINK = HYPERTEXTOVÝ.ODKAZ ## Vytvoří zástupce nebo odkaz, který otevře dokument uložený na síťovém serveru, v síti intranet nebo Internet. +INDEX = INDEX ## Pomocí rejstříku zvolí hodnotu z odkazu nebo matice. +INDIRECT = NEPŘÍMÝ.ODKAZ ## Vrátí odkaz určený textovou hodnotou. +LOOKUP = VYHLEDAT ## Vyhledá hodnoty ve vektoru nebo matici. +MATCH = POZVYHLEDAT ## Vyhledá hodnoty v odkazu nebo matici. +OFFSET = POSUN ## Vrátí posun odkazu od zadaného odkazu. +ROW = ŘÁDEK ## Vrátí číslo řádku odkazu. +ROWS = ŘÁDKY ## Vrátí počet řádků v odkazu. +RTD = RTD ## Načte data reálného času z programu, který podporuje automatizaci modelu COM (Automatizace: Způsob práce s objekty určité aplikace z jiné aplikace nebo nástroje pro vývoj. Automatizace (dříve nazývaná automatizace OLE) je počítačovým standardem a je funkcí modelu COM (Component Object Model).). +TRANSPOSE = TRANSPOZICE ## Vrátí transponovanou matici. +VLOOKUP = SVYHLEDAT ## Prohledá první sloupec matice, přesune kurzor v řádku a vrátí hodnotu buňky. + + +## +## Math and trigonometry functions Matematické a trigonometrické funkce +## +ABS = ABS ## Vrátí absolutní hodnotu čísla. +ACOS = ARCCOS ## Vrátí arkuskosinus čísla. +ACOSH = ARCCOSH ## Vrátí hyperbolický arkuskosinus čísla. +ASIN = ARCSIN ## Vrátí arkussinus čísla. +ASINH = ARCSINH ## Vrátí hyperbolický arkussinus čísla. +ATAN = ARCTG ## Vrátí arkustangens čísla. +ATAN2 = ARCTG2 ## Vrátí arkustangens x-ové a y-ové souřadnice. +ATANH = ARCTGH ## Vrátí hyperbolický arkustangens čísla. +CEILING = ZAOKR.NAHORU ## Zaokrouhlí číslo na nejbližší celé číslo nebo na nejbližší násobek zadané hodnoty. +COMBIN = KOMBINACE ## Vrátí počet kombinací pro daný počet položek. +COS = COS ## Vrátí kosinus čísla. +COSH = COSH ## Vrátí hyperbolický kosinus čísla. +DEGREES = DEGREES ## Převede radiány na stupně. +EVEN = ZAOKROUHLIT.NA.SUDÉ ## Zaokrouhlí číslo nahoru na nejbližší celé sudé číslo. +EXP = EXP ## Vrátí základ přirozeného logaritmu e umocněný na zadané číslo. +FACT = FAKTORIÁL ## Vrátí faktoriál čísla. +FACTDOUBLE = FACTDOUBLE ## Vrátí dvojitý faktoriál čísla. +FLOOR = ZAOKR.DOLŮ ## Zaokrouhlí číslo dolů, směrem k nule. +GCD = GCD ## Vrátí největší společný dělitel. +INT = CELÁ.ČÁST ## Zaokrouhlí číslo dolů na nejbližší celé číslo. +LCM = LCM ## Vrátí nejmenší společný násobek. +LN = LN ## Vrátí přirozený logaritmus čísla. +LOG = LOGZ ## Vrátí logaritmus čísla při zadaném základu. +LOG10 = LOG ## Vrátí dekadický logaritmus čísla. +MDETERM = DETERMINANT ## Vrátí determinant matice. +MINVERSE = INVERZE ## Vrátí inverzní matici. +MMULT = SOUČIN.MATIC ## Vrátí součin dvou matic. +MOD = MOD ## Vrátí zbytek po dělení. +MROUND = MROUND ## Vrátí číslo zaokrouhlené na požadovaný násobek. +MULTINOMIAL = MULTINOMIAL ## Vrátí mnohočlen z množiny čísel. +ODD = ZAOKROUHLIT.NA.LICHÉ ## Zaokrouhlí číslo nahoru na nejbližší celé liché číslo. +PI = PI ## Vrátí hodnotu čísla pí. +POWER = POWER ## Umocní číslo na zadanou mocninu. +PRODUCT = SOUČIN ## Vynásobí argumenty funkce. +QUOTIENT = QUOTIENT ## Vrátí celou část dělení. +RADIANS = RADIANS ## Převede stupně na radiány. +RAND = NÁHČÍSLO ## Vrátí náhodné číslo mezi 0 a 1. +RANDBETWEEN = RANDBETWEEN ## Vrátí náhodné číslo mezi zadanými čísly. +ROMAN = ROMAN ## Převede arabskou číslici na římskou ve formátu textu. +ROUND = ZAOKROUHLIT ## Zaokrouhlí číslo na zadaný počet číslic. +ROUNDDOWN = ROUNDDOWN ## Zaokrouhlí číslo dolů, směrem k nule. +ROUNDUP = ROUNDUP ## Zaokrouhlí číslo nahoru, směrem od nuly. +SERIESSUM = SERIESSUM ## Vrátí součet mocninné řady určené podle vzorce. +SIGN = SIGN ## Vrátí znaménko čísla. +SIN = SIN ## Vrátí sinus daného úhlu. +SINH = SINH ## Vrátí hyperbolický sinus čísla. +SQRT = ODMOCNINA ## Vrátí kladnou druhou odmocninu. +SQRTPI = SQRTPI ## Vrátí druhou odmocninu výrazu (číslo * pí). +SUBTOTAL = SUBTOTAL ## Vrátí souhrn v seznamu nebo databázi. +SUM = SUMA ## Sečte argumenty funkce. +SUMIF = SUMIF ## Sečte buňky vybrané podle zadaných kritérií. +SUMIFS = SUMIFS ## Sečte buňky určené více zadanými podmínkami. +SUMPRODUCT = SOUČIN.SKALÁRNÍ ## Vrátí součet součinů odpovídajících prvků matic. +SUMSQ = SUMA.ČTVERCŮ ## Vrátí součet čtverců argumentů. +SUMX2MY2 = SUMX2MY2 ## Vrátí součet rozdílu čtverců odpovídajících hodnot ve dvou maticích. +SUMX2PY2 = SUMX2PY2 ## Vrátí součet součtu čtverců odpovídajících hodnot ve dvou maticích. +SUMXMY2 = SUMXMY2 ## Vrátí součet čtverců rozdílů odpovídajících hodnot ve dvou maticích. +TAN = TGTG ## Vrátí tangens čísla. +TANH = TGH ## Vrátí hyperbolický tangens čísla. +TRUNC = USEKNOUT ## Zkrátí číslo na celé číslo. + + +## +## Statistical functions Statistické funkce +## +AVEDEV = PRŮMODCHYLKA ## Vrátí průměrnou hodnotu absolutních odchylek datových bodů od jejich střední hodnoty. +AVERAGE = PRŮMĚR ## Vrátí průměrnou hodnotu argumentů. +AVERAGEA = AVERAGEA ## Vrátí průměrnou hodnotu argumentů včetně čísel, textu a logických hodnot. +AVERAGEIF = AVERAGEIF ## Vrátí průměrnou hodnotu (aritmetický průměr) všech buněk v oblasti, které vyhovují příslušné podmínce. +AVERAGEIFS = AVERAGEIFS ## Vrátí průměrnou hodnotu (aritmetický průměr) všech buněk vyhovujících několika podmínkám. +BETADIST = BETADIST ## Vrátí hodnotu součtového rozdělení beta. +BETAINV = BETAINV ## Vrátí inverzní hodnotu součtového rozdělení pro zadané rozdělení beta. +BINOMDIST = BINOMDIST ## Vrátí hodnotu binomického rozdělení pravděpodobnosti jednotlivých veličin. +CHIDIST = CHIDIST ## Vrátí jednostrannou pravděpodobnost rozdělení chí-kvadrát. +CHIINV = CHIINV ## Vrátí hodnotu funkce inverzní k distribuční funkci jednostranné pravděpodobnosti rozdělení chí-kvadrát. +CHITEST = CHITEST ## Vrátí test nezávislosti. +CONFIDENCE = CONFIDENCE ## Vrátí interval spolehlivosti pro střední hodnotu základního souboru. +CORREL = CORREL ## Vrátí korelační koeficient mezi dvěma množinami dat. +COUNT = POČET ## Vrátí počet čísel v seznamu argumentů. +COUNTA = POČET2 ## Vrátí počet hodnot v seznamu argumentů. +COUNTBLANK = COUNTBLANK ## Spočítá počet prázdných buněk v oblasti. +COUNTIF = COUNTIF ## Spočítá buňky v oblasti, které odpovídají zadaným kritériím. +COUNTIFS = COUNTIFS ## Spočítá buňky v oblasti, které odpovídají více kritériím. +COVAR = COVAR ## Vrátí hodnotu kovariance, průměrnou hodnotu součinů párových odchylek +CRITBINOM = CRITBINOM ## Vrátí nejmenší hodnotu, pro kterou má součtové binomické rozdělení hodnotu větší nebo rovnu hodnotě kritéria. +DEVSQ = DEVSQ ## Vrátí součet čtverců odchylek. +EXPONDIST = EXPONDIST ## Vrátí hodnotu exponenciálního rozdělení. +FDIST = FDIST ## Vrátí hodnotu rozdělení pravděpodobnosti F. +FINV = FINV ## Vrátí hodnotu inverzní funkce k distribuční funkci rozdělení F. +FISHER = FISHER ## Vrátí hodnotu Fisherovy transformace. +FISHERINV = FISHERINV ## Vrátí hodnotu inverzní funkce k Fisherově transformaci. +FORECAST = FORECAST ## Vrátí hodnotu lineárního trendu. +FREQUENCY = ČETNOSTI ## Vrátí četnost rozdělení jako svislou matici. +FTEST = FTEST ## Vrátí výsledek F-testu. +GAMMADIST = GAMMADIST ## Vrátí hodnotu rozdělení gama. +GAMMAINV = GAMMAINV ## Vrátí hodnotu inverzní funkce k distribuční funkci součtového rozdělení gama. +GAMMALN = GAMMALN ## Vrátí přirozený logaritmus funkce gama, Γ(x). +GEOMEAN = GEOMEAN ## Vrátí geometrický průměr. +GROWTH = LOGLINTREND ## Vrátí hodnoty exponenciálního trendu. +HARMEAN = HARMEAN ## Vrátí harmonický průměr. +HYPGEOMDIST = HYPGEOMDIST ## Vrátí hodnotu hypergeometrického rozdělení. +INTERCEPT = INTERCEPT ## Vrátí úsek lineární regresní čáry. +KURT = KURT ## Vrátí hodnotu excesu množiny dat. +LARGE = LARGE ## Vrátí k-tou největší hodnotu množiny dat. +LINEST = LINREGRESE ## Vrátí parametry lineárního trendu. +LOGEST = LOGLINREGRESE ## Vrátí parametry exponenciálního trendu. +LOGINV = LOGINV ## Vrátí inverzní funkci k distribuční funkci logaritmicko-normálního rozdělení. +LOGNORMDIST = LOGNORMDIST ## Vrátí hodnotu součtového logaritmicko-normálního rozdělení. +MAX = MAX ## Vrátí maximální hodnotu seznamu argumentů. +MAXA = MAXA ## Vrátí maximální hodnotu seznamu argumentů včetně čísel, textu a logických hodnot. +MEDIAN = MEDIAN ## Vrátí střední hodnotu zadaných čísel. +MIN = MIN ## Vrátí minimální hodnotu seznamu argumentů. +MINA = MINA ## Vrátí nejmenší hodnotu v seznamu argumentů včetně čísel, textu a logických hodnot. +MODE = MODE ## Vrátí hodnotu, která se v množině dat vyskytuje nejčastěji. +NEGBINOMDIST = NEGBINOMDIST ## Vrátí hodnotu negativního binomického rozdělení. +NORMDIST = NORMDIST ## Vrátí hodnotu normálního součtového rozdělení. +NORMINV = NORMINV ## Vrátí inverzní funkci k funkci normálního součtového rozdělení. +NORMSDIST = NORMSDIST ## Vrátí hodnotu standardního normálního součtového rozdělení. +NORMSINV = NORMSINV ## Vrátí inverzní funkci k funkci standardního normálního součtového rozdělení. +PEARSON = PEARSON ## Vrátí Pearsonův výsledný momentový korelační koeficient. +PERCENTILE = PERCENTIL ## Vrátí hodnotu k-tého percentilu hodnot v oblasti. +PERCENTRANK = PERCENTRANK ## Vrátí pořadí hodnoty v množině dat vyjádřené procentuální částí množiny dat. +PERMUT = PERMUTACE ## Vrátí počet permutací pro zadaný počet objektů. +POISSON = POISSON ## Vrátí hodnotu distribuční funkce Poissonova rozdělení. +PROB = PROB ## Vrátí pravděpodobnost výskytu hodnot v oblasti mezi dvěma mezními hodnotami. +QUARTILE = QUARTIL ## Vrátí hodnotu kvartilu množiny dat. +RANK = RANK ## Vrátí pořadí čísla v seznamu čísel. +RSQ = RKQ ## Vrátí druhou mocninu Pearsonova výsledného momentového korelačního koeficientu. +SKEW = SKEW ## Vrátí zešikmení rozdělení. +SLOPE = SLOPE ## Vrátí směrnici lineární regresní čáry. +SMALL = SMALL ## Vrátí k-tou nejmenší hodnotu množiny dat. +STANDARDIZE = STANDARDIZE ## Vrátí normalizovanou hodnotu. +STDEV = SMODCH.VÝBĚR ## Vypočte směrodatnou odchylku výběru. +STDEVA = STDEVA ## Vypočte směrodatnou odchylku výběru včetně čísel, textu a logických hodnot. +STDEVP = SMODCH ## Vypočte směrodatnou odchylku základního souboru. +STDEVPA = STDEVPA ## Vypočte směrodatnou odchylku základního souboru včetně čísel, textu a logických hodnot. +STEYX = STEYX ## Vrátí standardní chybu předpovězené hodnoty y pro každou hodnotu x v regresi. +TDIST = TDIST ## Vrátí hodnotu Studentova t-rozdělení. +TINV = TINV ## Vrátí inverzní funkci k distribuční funkci Studentova t-rozdělení. +TREND = LINTREND ## Vrátí hodnoty lineárního trendu. +TRIMMEAN = TRIMMEAN ## Vrátí střední hodnotu vnitřní části množiny dat. +TTEST = TTEST ## Vrátí pravděpodobnost spojenou se Studentovým t-testem. +VAR = VAR.VÝBĚR ## Vypočte rozptyl výběru. +VARA = VARA ## Vypočte rozptyl výběru včetně čísel, textu a logických hodnot. +VARP = VAR ## Vypočte rozptyl základního souboru. +VARPA = VARPA ## Vypočte rozptyl základního souboru včetně čísel, textu a logických hodnot. +WEIBULL = WEIBULL ## Vrátí hodnotu Weibullova rozdělení. +ZTEST = ZTEST ## Vrátí jednostrannou P-hodnotu z-testu. + + +## +## Text functions Textové funkce +## +ASC = ASC ## Změní znaky s plnou šířkou (dvoubajtové)v řetězci znaků na znaky s poloviční šířkou (jednobajtové). +BAHTTEXT = BAHTTEXT ## Převede číslo na text ve formátu, měny ß (baht). +CHAR = ZNAK ## Vrátí znak určený číslem kódu. +CLEAN = VYČISTIT ## Odebere z textu všechny netisknutelné znaky. +CODE = KÓD ## Vrátí číselný kód prvního znaku zadaného textového řetězce. +CONCATENATE = CONCATENATE ## Spojí několik textových položek do jedné. +DOLLAR = KČ ## Převede číslo na text ve formátu měny Kč (česká koruna). +EXACT = STEJNÉ ## Zkontroluje, zda jsou dvě textové hodnoty shodné. +FIND = NAJÍT ## Nalezne textovou hodnotu uvnitř jiné (rozlišuje malá a velká písmena). +FINDB = FINDB ## Nalezne textovou hodnotu uvnitř jiné (rozlišuje malá a velká písmena). +FIXED = ZAOKROUHLIT.NA.TEXT ## Zformátuje číslo jako text s pevným počtem desetinných míst. +JIS = JIS ## Změní znaky s poloviční šířkou (jednobajtové) v řetězci znaků na znaky s plnou šířkou (dvoubajtové). +LEFT = ZLEVA ## Vrátí první znaky textové hodnoty umístěné nejvíce vlevo. +LEFTB = LEFTB ## Vrátí první znaky textové hodnoty umístěné nejvíce vlevo. +LEN = DÉLKA ## Vrátí počet znaků textového řetězce. +LENB = LENB ## Vrátí počet znaků textového řetězce. +LOWER = MALÁ ## Převede text na malá písmena. +MID = ČÁST ## Vrátí určitý počet znaků textového řetězce počínaje zadaným místem. +MIDB = MIDB ## Vrátí určitý počet znaků textového řetězce počínaje zadaným místem. +PHONETIC = ZVUKOVÉ ## Extrahuje fonetické znaky (furigana) z textového řetězce. +PROPER = VELKÁ2 ## Převede první písmeno každého slova textové hodnoty na velké. +REPLACE = NAHRADIT ## Nahradí znaky uvnitř textu. +REPLACEB = NAHRADITB ## Nahradí znaky uvnitř textu. +REPT = OPAKOVAT ## Zopakuje text podle zadaného počtu opakování. +RIGHT = ZPRAVA ## Vrátí první znaky textové hodnoty umístěné nejvíce vpravo. +RIGHTB = RIGHTB ## Vrátí první znaky textové hodnoty umístěné nejvíce vpravo. +SEARCH = HLEDAT ## Nalezne textovou hodnotu uvnitř jiné (malá a velká písmena nejsou rozlišována). +SEARCHB = SEARCHB ## Nalezne textovou hodnotu uvnitř jiné (malá a velká písmena nejsou rozlišována). +SUBSTITUTE = DOSADIT ## V textovém řetězci nahradí starý text novým. +T = T ## Převede argumenty na text. +TEXT = HODNOTA.NA.TEXT ## Zformátuje číslo a převede ho na text. +TRIM = PROČISTIT ## Odstraní z textu mezery. +UPPER = VELKÁ ## Převede text na velká písmena. +VALUE = HODNOTA ## Převede textový argument na číslo. diff --git a/PHPExcel/locale/da/config b/PHPExcel/locale/da/config new file mode 100644 index 0000000..1ddecb9 --- /dev/null +++ b/PHPExcel/locale/da/config @@ -0,0 +1,48 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = kr + + + +## +## Excel Error Codes (For future use) +## +NULL = #NUL! +DIV0 = #DIVISION/0! +VALUE = #VÆRDI! +REF = #REFERENCE! +NAME = #NAVN? +NUM = #NUM! +NA = #I/T diff --git a/PHPExcel/locale/da/functions b/PHPExcel/locale/da/functions new file mode 100644 index 0000000..102d578 --- /dev/null +++ b/PHPExcel/locale/da/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Tilføjelsesprogram- og automatiseringsfunktioner +## +GETPIVOTDATA = HENTPIVOTDATA ## Returnerer data, der er lagret i en pivottabelrapport + + +## +## Cube functions Kubefunktioner +## +CUBEKPIMEMBER = KUBE.KPI.MEDLEM ## Returnerer navn, egenskab og mål for en KPI-indikator og viser navnet og egenskaben i cellen. En KPI-indikator er en målbar størrelse, f.eks. bruttooverskud pr. måned eller personaleudskiftning pr. kvartal, der bruges til at overvåge en organisations præstationer. +CUBEMEMBER = KUBE.MEDLEM ## Returnerer et medlem eller en tupel fra kubehierarkiet. Bruges til at validere, om et medlem eller en tupel findes i kuben. +CUBEMEMBERPROPERTY = KUBEMEDLEM.EGENSKAB ## Returnerer værdien af en egenskab for et medlem i kuben. Bruges til at validere, om et medlemsnavn findes i kuben, og returnere den angivne egenskab for medlemmet. +CUBERANKEDMEMBER = KUBEMEDLEM.RANG ## Returnerer det n'te eller rangordnede medlem i et sæt. Bruges til at returnere et eller flere elementer i et sæt, f.eks. topsælgere eller de 10 bedste elever. +CUBESET = KUBESÆT ## Definerer et beregnet sæt medlemmer eller tupler ved at sende et sætudtryk til kuben på serveren, som opretter sættet og returnerer det til Microsoft Office Excel. +CUBESETCOUNT = KUBESÆT.TÆL ## Returnerer antallet af elementer i et sæt. +CUBEVALUE = KUBEVÆRDI ## Returnerer en sammenlagt (aggregeret) værdi fra en kube. + + +## +## Database functions Databasefunktioner +## +DAVERAGE = DMIDDEL ## Returnerer gennemsnittet af markerede databaseposter +DCOUNT = DTÆL ## Tæller de celler, der indeholder tal, i en database +DCOUNTA = DTÆLV ## Tæller udfyldte celler i en database +DGET = DHENT ## Uddrager en enkelt post, der opfylder de angivne kriterier, fra en database +DMAX = DMAKS ## Returnerer den største værdi blandt markerede databaseposter +DMIN = DMIN ## Returnerer den mindste værdi blandt markerede databaseposter +DPRODUCT = DPRODUKT ## Ganger værdierne i et bestemt felt med poster, der opfylder kriterierne i en database +DSTDEV = DSTDAFV ## Beregner et skøn over standardafvigelsen baseret på en stikprøve af markerede databaseposter +DSTDEVP = DSTDAFVP ## Beregner standardafvigelsen baseret på hele populationen af markerede databaseposter +DSUM = DSUM ## Sammenlægger de tal i feltkolonnen i databasen, der opfylder kriterierne +DVAR = DVARIANS ## Beregner varians baseret på en stikprøve af markerede databaseposter +DVARP = DVARIANSP ## Beregner varians baseret på hele populationen af markerede databaseposter + + +## +## Date and time functions Dato- og klokkeslætsfunktioner +## +DATE = DATO ## Returnerer serienummeret for en bestemt dato +DATEVALUE = DATOVÆRDI ## Konverterer en dato i form af tekst til et serienummer +DAY = DAG ## Konverterer et serienummer til en dag i måneden +DAYS360 = DAGE360 ## Beregner antallet af dage mellem to datoer på grundlag af et år med 360 dage +EDATE = EDATO ## Returnerer serienummeret for den dato, der ligger det angivne antal måneder før eller efter startdatoen +EOMONTH = SLUT.PÅ.MÅNED ## Returnerer serienummeret på den sidste dag i måneden før eller efter et angivet antal måneder +HOUR = TIME ## Konverterer et serienummer til en time +MINUTE = MINUT ## Konverterer et serienummer til et minut +MONTH = MÅNED ## Konverterer et serienummer til en måned +NETWORKDAYS = ANTAL.ARBEJDSDAGE ## Returnerer antallet af hele arbejdsdage mellem to datoer +NOW = NU ## Returnerer serienummeret for den aktuelle dato eller det aktuelle klokkeslæt +SECOND = SEKUND ## Konverterer et serienummer til et sekund +TIME = KLOKKESLÆT ## Returnerer serienummeret for et bestemt klokkeslæt +TIMEVALUE = TIDSVÆRDI ## Konverterer et klokkeslæt i form af tekst til et serienummer +TODAY = IDAG ## Returnerer serienummeret for dags dato +WEEKDAY = UGEDAG ## Konverterer et serienummer til en ugedag +WEEKNUM = UGE.NR ## Konverterer et serienummer til et tal, der angiver ugenummeret i året +WORKDAY = ARBEJDSDAG ## Returnerer serienummeret for dagen før eller efter det angivne antal arbejdsdage +YEAR = ÅR ## Konverterer et serienummer til et år +YEARFRAC = ÅR.BRØK ## Returnerer årsbrøken, der repræsenterer antallet af hele dage mellem startdato og slutdato + + +## +## Engineering functions Tekniske funktioner +## +BESSELI = BESSELI ## Returnerer den modificerede Bessel-funktion In(x) +BESSELJ = BESSELJ ## Returnerer Bessel-funktionen Jn(x) +BESSELK = BESSELK ## Returnerer den modificerede Bessel-funktion Kn(x) +BESSELY = BESSELY ## Returnerer Bessel-funktionen Yn(x) +BIN2DEC = BIN.TIL.DEC ## Konverterer et binært tal til et decimaltal +BIN2HEX = BIN.TIL.HEX ## Konverterer et binært tal til et heksadecimalt tal +BIN2OCT = BIN.TIL.OKT ## Konverterer et binært tal til et oktaltal. +COMPLEX = KOMPLEKS ## Konverterer reelle og imaginære koefficienter til et komplekst tal +CONVERT = KONVERTER ## Konverterer et tal fra én måleenhed til en anden +DEC2BIN = DEC.TIL.BIN ## Konverterer et decimaltal til et binært tal +DEC2HEX = DEC.TIL.HEX ## Konverterer et decimaltal til et heksadecimalt tal +DEC2OCT = DEC.TIL.OKT ## Konverterer et decimaltal til et oktaltal +DELTA = DELTA ## Tester, om to værdier er ens +ERF = FEJLFUNK ## Returner fejlfunktionen +ERFC = FEJLFUNK.KOMP ## Returnerer den komplementære fejlfunktion +GESTEP = GETRIN ## Tester, om et tal er større end en grænseværdi +HEX2BIN = HEX.TIL.BIN ## Konverterer et heksadecimalt tal til et binært tal +HEX2DEC = HEX.TIL.DEC ## Konverterer et decimaltal til et heksadecimalt tal +HEX2OCT = HEX.TIL.OKT ## Konverterer et heksadecimalt tal til et oktaltal +IMABS = IMAGABS ## Returnerer den absolutte værdi (modulus) for et komplekst tal +IMAGINARY = IMAGINÆR ## Returnerer den imaginære koefficient for et komplekst tal +IMARGUMENT = IMAGARGUMENT ## Returnerer argumentet theta, en vinkel udtrykt i radianer +IMCONJUGATE = IMAGKONJUGERE ## Returnerer den komplekse konjugation af et komplekst tal +IMCOS = IMAGCOS ## Returnerer et komplekst tals cosinus +IMDIV = IMAGDIV ## Returnerer kvotienten for to komplekse tal +IMEXP = IMAGEKSP ## Returnerer et komplekst tals eksponentialfunktion +IMLN = IMAGLN ## Returnerer et komplekst tals naturlige logaritme +IMLOG10 = IMAGLOG10 ## Returnerer et komplekst tals sædvanlige logaritme (titalslogaritme) +IMLOG2 = IMAGLOG2 ## Returnerer et komplekst tals sædvanlige logaritme (totalslogaritme) +IMPOWER = IMAGPOTENS ## Returnerer et komplekst tal opløftet i en heltalspotens +IMPRODUCT = IMAGPRODUKT ## Returnerer produktet af komplekse tal +IMREAL = IMAGREELT ## Returnerer den reelle koefficient for et komplekst tal +IMSIN = IMAGSIN ## Returnerer et komplekst tals sinus +IMSQRT = IMAGKVROD ## Returnerer et komplekst tals kvadratrod +IMSUB = IMAGSUB ## Returnerer forskellen mellem to komplekse tal +IMSUM = IMAGSUM ## Returnerer summen af komplekse tal +OCT2BIN = OKT.TIL.BIN ## Konverterer et oktaltal til et binært tal +OCT2DEC = OKT.TIL.DEC ## Konverterer et oktaltal til et decimaltal +OCT2HEX = OKT.TIL.HEX ## Konverterer et oktaltal til et heksadecimalt tal + + +## +## Financial functions Finansielle funktioner +## +ACCRINT = PÅLØBRENTE ## Returnerer den påløbne rente for et værdipapir med periodiske renteudbetalinger +ACCRINTM = PÅLØBRENTE.UDLØB ## Returnerer den påløbne rente for et værdipapir, hvor renteudbetalingen finder sted ved papirets udløb +AMORDEGRC = AMORDEGRC ## Returnerer afskrivningsbeløbet for hver regnskabsperiode ved hjælp af en afskrivningskoefficient +AMORLINC = AMORLINC ## Returnerer afskrivningsbeløbet for hver regnskabsperiode +COUPDAYBS = KUPONDAGE.SA ## Returnerer antallet af dage fra starten af kuponperioden til afregningsdatoen +COUPDAYS = KUPONDAGE.A ## Returnerer antallet af dage fra begyndelsen af kuponperioden til afregningsdatoen +COUPDAYSNC = KUPONDAGE.ANK ## Returnerer antallet af dage i den kuponperiode, der indeholder afregningsdatoen +COUPNCD = KUPONDAG.NÆSTE ## Returnerer den næste kupondato efter afregningsdatoen +COUPNUM = KUPONBETALINGER ## Returnerer antallet af kuponudbetalinger mellem afregnings- og udløbsdatoen +COUPPCD = KUPONDAG.FORRIGE ## Returnerer den forrige kupondato før afregningsdatoen +CUMIPMT = AKKUM.RENTE ## Returnerer den akkumulerede rente, der betales på et lån mellem to perioder +CUMPRINC = AKKUM.HOVEDSTOL ## Returnerer den akkumulerede nedbringelse af hovedstol mellem to perioder +DB = DB ## Returnerer afskrivningen på et aktiv i en angivet periode ved anvendelse af saldometoden +DDB = DSA ## Returnerer afskrivningsbeløbet for et aktiv over en bestemt periode ved anvendelse af dobbeltsaldometoden eller en anden afskrivningsmetode, som du angiver +DISC = DISKONTO ## Returnerer et værdipapirs diskonto +DOLLARDE = KR.DECIMAL ## Konverterer en kronepris udtrykt som brøk til en kronepris udtrykt som decimaltal +DOLLARFR = KR.BRØK ## Konverterer en kronepris udtrykt som decimaltal til en kronepris udtrykt som brøk +DURATION = VARIGHED ## Returnerer den årlige løbetid for et værdipapir med periodiske renteudbetalinger +EFFECT = EFFEKTIV.RENTE ## Returnerer den årlige effektive rente +FV = FV ## Returnerer fremtidsværdien af en investering +FVSCHEDULE = FVTABEL ## Returnerer den fremtidige værdi af en hovedstol, når der er tilskrevet rente og rentes rente efter forskellige rentesatser +INTRATE = RENTEFOD ## Returnerer renten på et fuldt ud investeret værdipapir +IPMT = R.YDELSE ## Returnerer renten fra en investering for en given periode +IRR = IA ## Returnerer den interne rente for en række pengestrømme +ISPMT = ISPMT ## Beregner den betalte rente i løbet af en bestemt investeringsperiode +MDURATION = MVARIGHED ## Returnerer Macauleys modificerede løbetid for et værdipapir med en formodet pari på kr. 100 +MIRR = MIA ## Returnerer den interne forrentning, hvor positive og negative pengestrømme finansieres til forskellig rente +NOMINAL = NOMINEL ## Returnerer den årlige nominelle rente +NPER = NPER ## Returnerer antallet af perioder for en investering +NPV = NUTIDSVÆRDI ## Returnerer nettonutidsværdien for en investering baseret på en række periodiske pengestrømme og en diskonteringssats +ODDFPRICE = ULIGE.KURS.PÅLYDENDE ## Returnerer kursen pr. kr. 100 nominel værdi for et værdipapir med en ulige (kort eller lang) første periode +ODDFYIELD = ULIGE.FØRSTE.AFKAST ## Returnerer afkastet for et værdipapir med ulige første periode +ODDLPRICE = ULIGE.SIDSTE.KURS ## Returnerer kursen pr. kr. 100 nominel værdi for et værdipapir med ulige sidste periode +ODDLYIELD = ULIGE.SIDSTE.AFKAST ## Returnerer afkastet for et værdipapir med ulige sidste periode +PMT = YDELSE ## Returnerer renten fra en investering for en given periode +PPMT = H.YDELSE ## Returnerer ydelsen på hovedstolen for en investering i en given periode +PRICE = KURS ## Returnerer kursen pr. kr 100 nominel værdi for et værdipapir med periodiske renteudbetalinger +PRICEDISC = KURS.DISKONTO ## Returnerer kursen pr. kr 100 nominel værdi for et diskonteret værdipapir +PRICEMAT = KURS.UDLØB ## Returnerer kursen pr. kr 100 nominel værdi for et værdipapir, hvor renten udbetales ved papirets udløb +PV = NV ## Returnerer den nuværende værdi af en investering +RATE = RENTE ## Returnerer renten i hver periode for en annuitet +RECEIVED = MODTAGET.VED.UDLØB ## Returnerer det beløb, der modtages ved udløbet af et fuldt ud investeret værdipapir +SLN = LA ## Returnerer den lineære afskrivning for et aktiv i en enkelt periode +SYD = ÅRSAFSKRIVNING ## Returnerer den årlige afskrivning på et aktiv i en bestemt periode +TBILLEQ = STATSOBLIGATION ## Returnerer det obligationsækvivalente afkast for en statsobligation +TBILLPRICE = STATSOBLIGATION.KURS ## Returnerer kursen pr. kr 100 nominel værdi for en statsobligation +TBILLYIELD = STATSOBLIGATION.AFKAST ## Returnerer en afkastet på en statsobligation +VDB = VSA ## Returnerer afskrivningen på et aktiv i en angivet periode, herunder delperioder, ved brug af dobbeltsaldometoden +XIRR = INTERN.RENTE ## Returnerer den interne rente for en plan over pengestrømme, der ikke behøver at være periodiske +XNPV = NETTO.NUTIDSVÆRDI ## Returnerer nutidsværdien for en plan over pengestrømme, der ikke behøver at være periodiske +YIELD = AFKAST ## Returnerer afkastet for et værdipapir med periodiske renteudbetalinger +YIELDDISC = AFKAST.DISKONTO ## Returnerer det årlige afkast for et diskonteret værdipapir, f.eks. en statsobligation +YIELDMAT = AFKAST.UDLØBSDATO ## Returnerer det årlige afkast for et værdipapir, hvor renten udbetales ved papirets udløb + + +## +## Information functions Informationsfunktioner +## +CELL = CELLE ## Returnerer oplysninger om formatering, placering eller indhold af en celle +ERROR.TYPE = FEJLTYPE ## Returnerer et tal, der svarer til en fejltype +INFO = INFO ## Returnerer oplysninger om det aktuelle operativmiljø +ISBLANK = ER.TOM ## Returnerer SAND, hvis værdien er tom +ISERR = ER.FJL ## Returnerer SAND, hvis værdien er en fejlværdi undtagen #I/T +ISERROR = ER.FEJL ## Returnerer SAND, hvis værdien er en fejlværdi +ISEVEN = ER.LIGE ## Returnerer SAND, hvis tallet er lige +ISLOGICAL = ER.LOGISK ## Returnerer SAND, hvis værdien er en logisk værdi +ISNA = ER.IKKE.TILGÆNGELIG ## Returnerer SAND, hvis værdien er fejlværdien #I/T +ISNONTEXT = ER.IKKE.TEKST ## Returnerer SAND, hvis værdien ikke er tekst +ISNUMBER = ER.TAL ## Returnerer SAND, hvis værdien er et tal +ISODD = ER.ULIGE ## Returnerer SAND, hvis tallet er ulige +ISREF = ER.REFERENCE ## Returnerer SAND, hvis værdien er en reference +ISTEXT = ER.TEKST ## Returnerer SAND, hvis værdien er tekst +N = TAL ## Returnerer en værdi konverteret til et tal +NA = IKKE.TILGÆNGELIG ## Returnerer fejlværdien #I/T +TYPE = VÆRDITYPE ## Returnerer et tal, der angiver datatypen for en værdi + + +## +## Logical functions Logiske funktioner +## +AND = OG ## Returnerer SAND, hvis alle argumenterne er sande +FALSE = FALSK ## Returnerer den logiske værdi FALSK +IF = HVIS ## Angiver en logisk test, der skal udføres +IFERROR = HVIS.FEJL ## Returnerer en værdi, du angiver, hvis en formel evauleres som en fejl. Returnerer i modsat fald resultatet af formlen +NOT = IKKE ## Vender argumentets logik om +OR = ELLER ## Returneret værdien SAND, hvis mindst ét argument er sandt +TRUE = SAND ## Returnerer den logiske værdi SAND + + +## +## Lookup and reference functions Opslags- og referencefunktioner +## +ADDRESS = ADRESSE ## Returnerer en reference som tekst til en enkelt celle i et regneark +AREAS = OMRÅDER ## Returnerer antallet af områder i en reference +CHOOSE = VÆLG ## Vælger en værdi på en liste med værdier +COLUMN = KOLONNE ## Returnerer kolonnenummeret i en reference +COLUMNS = KOLONNER ## Returnerer antallet af kolonner i en reference +HLOOKUP = VOPSLAG ## Søger i den øverste række af en matrix og returnerer værdien af den angivne celle +HYPERLINK = HYPERLINK ## Opretter en genvej kaldet et hyperlink, der åbner et dokument, som er lagret på en netværksserver, på et intranet eller på internettet +INDEX = INDEKS ## Anvender et indeks til at vælge en værdi fra en reference eller en matrix +INDIRECT = INDIREKTE ## Returnerer en reference, der er angivet af en tekstværdi +LOOKUP = SLÅ.OP ## Søger værdier i en vektor eller en matrix +MATCH = SAMMENLIGN ## Søger værdier i en reference eller en matrix +OFFSET = FORSKYDNING ## Returnerer en reference forskudt i forhold til en given reference +ROW = RÆKKE ## Returnerer rækkenummeret for en reference +ROWS = RÆKKER ## Returnerer antallet af rækker i en reference +RTD = RTD ## Henter realtidsdata fra et program, der understøtter COM-automatisering (Automation: En metode til at arbejde med objekter fra et andet program eller udviklingsværktøj. Automation, som tidligere blev kaldt OLE Automation, er en industristandard og en funktion i COM (Component Object Model).) +TRANSPOSE = TRANSPONER ## Returnerer en transponeret matrix +VLOOKUP = LOPSLAG ## Søger i øverste række af en matrix og flytter på tværs af rækken for at returnere en celleværdi + + +## +## Math and trigonometry functions Matematiske og trigonometriske funktioner +## +ABS = ABS ## Returnerer den absolutte værdi af et tal +ACOS = ARCCOS ## Returnerer et tals arcus cosinus +ACOSH = ARCCOSH ## Returnerer den inverse hyperbolske cosinus af tal +ASIN = ARCSIN ## Returnerer et tals arcus sinus +ASINH = ARCSINH ## Returnerer den inverse hyperbolske sinus for tal +ATAN = ARCTAN ## Returnerer et tals arcus tangens +ATAN2 = ARCTAN2 ## Returnerer de angivne x- og y-koordinaters arcus tangens +ATANH = ARCTANH ## Returnerer et tals inverse hyperbolske tangens +CEILING = AFRUND.LOFT ## Afrunder et tal til nærmeste heltal eller til nærmeste multiplum af betydning +COMBIN = KOMBIN ## Returnerer antallet af kombinationer for et givet antal objekter +COS = COS ## Returnerer et tals cosinus +COSH = COSH ## Returnerer den inverse hyperbolske cosinus af et tal +DEGREES = GRADER ## Konverterer radianer til grader +EVEN = LIGE ## Runder et tal op til nærmeste lige heltal +EXP = EKSP ## Returnerer e opløftet til en potens af et angivet tal +FACT = FAKULTET ## Returnerer et tals fakultet +FACTDOUBLE = DOBBELT.FAKULTET ## Returnerer et tals dobbelte fakultet +FLOOR = AFRUND.GULV ## Runder et tal ned mod nul +GCD = STØRSTE.FÆLLES.DIVISOR ## Returnerer den største fælles divisor +INT = HELTAL ## Nedrunder et tal til det nærmeste heltal +LCM = MINDSTE.FÆLLES.MULTIPLUM ## Returnerer det mindste fælles multiplum +LN = LN ## Returnerer et tals naturlige logaritme +LOG = LOG ## Returnerer logaritmen for et tal på grundlag af et angivet grundtal +LOG10 = LOG10 ## Returnerer titalslogaritmen af et tal +MDETERM = MDETERM ## Returnerer determinanten for en matrix +MINVERSE = MINVERT ## Returnerer den inverse matrix for en matrix +MMULT = MPRODUKT ## Returnerer matrixproduktet af to matrixer +MOD = REST ## Returnerer restværdien fra division +MROUND = MAFRUND ## Returnerer et tal afrundet til det ønskede multiplum +MULTINOMIAL = MULTINOMIAL ## Returnerer et multinomialt talsæt +ODD = ULIGE ## Runder et tal op til nærmeste ulige heltal +PI = PI ## Returnerer værdien af pi +POWER = POTENS ## Returnerer resultatet af et tal opløftet til en potens +PRODUCT = PRODUKT ## Multiplicerer argumenterne +QUOTIENT = KVOTIENT ## Returnerer heltalsdelen ved division +RADIANS = RADIANER ## Konverterer grader til radianer +RAND = SLUMP ## Returnerer et tilfældigt tal mellem 0 og 1 +RANDBETWEEN = SLUMP.MELLEM ## Returnerer et tilfældigt tal mellem de tal, der angives +ROMAN = ROMERTAL ## Konverterer et arabertal til romertal som tekst +ROUND = AFRUND ## Afrunder et tal til et angivet antal decimaler +ROUNDDOWN = RUND.NED ## Runder et tal ned mod nul +ROUNDUP = RUND.OP ## Runder et tal op, væk fra 0 (nul) +SERIESSUM = SERIESUM ## Returnerer summen af en potensserie baseret på en formel +SIGN = FORTEGN ## Returnerer et tals fortegn +SIN = SIN ## Returnerer en given vinkels sinusværdi +SINH = SINH ## Returnerer den hyperbolske sinus af et tal +SQRT = KVROD ## Returnerer en positiv kvadratrod +SQRTPI = KVRODPI ## Returnerer kvadratroden af (tal * pi;) +SUBTOTAL = SUBTOTAL ## Returnerer en subtotal på en liste eller i en database +SUM = SUM ## Lægger argumenterne sammen +SUMIF = SUM.HVIS ## Lægger de celler sammen, der er specificeret af et givet kriterium. +SUMIFS = SUM.HVISER ## Lægger de celler i et område sammen, der opfylder flere kriterier. +SUMPRODUCT = SUMPRODUKT ## Returnerer summen af produkter af ens matrixkomponenter +SUMSQ = SUMKV ## Returnerer summen af argumenternes kvadrater +SUMX2MY2 = SUMX2MY2 ## Returnerer summen af differensen mellem kvadrater af ens værdier i to matrixer +SUMX2PY2 = SUMX2PY2 ## Returnerer summen af summen af kvadrater af tilsvarende værdier i to matrixer +SUMXMY2 = SUMXMY2 ## Returnerer summen af kvadrater af differenser mellem ens værdier i to matrixer +TAN = TAN ## Returnerer et tals tangens +TANH = TANH ## Returnerer et tals hyperbolske tangens +TRUNC = AFKORT ## Afkorter et tal til et heltal + + +## +## Statistical functions Statistiske funktioner +## +AVEDEV = MAD ## Returnerer den gennemsnitlige numeriske afvigelse fra stikprøvens middelværdi +AVERAGE = MIDDEL ## Returnerer middelværdien af argumenterne +AVERAGEA = MIDDELV ## Returnerer middelværdien af argumenterne og medtager tal, tekst og logiske værdier +AVERAGEIF = MIDDEL.HVIS ## Returnerer gennemsnittet (den aritmetiske middelværdi) af alle de celler, der opfylder et givet kriterium, i et område +AVERAGEIFS = MIDDEL.HVISER ## Returnerer gennemsnittet (den aritmetiske middelværdi) af alle de celler, der opfylder flere kriterier. +BETADIST = BETAFORDELING ## Returnerer den kumulative betafordelingsfunktion +BETAINV = BETAINV ## Returnerer den inverse kumulative fordelingsfunktion for en angivet betafordeling +BINOMDIST = BINOMIALFORDELING ## Returnerer punktsandsynligheden for binomialfordelingen +CHIDIST = CHIFORDELING ## Returnerer fraktilsandsynligheden for en chi2-fordeling +CHIINV = CHIINV ## Returnerer den inverse fraktilsandsynlighed for en chi2-fordeling +CHITEST = CHITEST ## Foretager en test for uafhængighed +CONFIDENCE = KONFIDENSINTERVAL ## Returnerer et konfidensinterval for en population +CORREL = KORRELATION ## Returnerer korrelationskoefficienten mellem to datasæt +COUNT = TÆL ## Tæller antallet af tal på en liste med argumenter +COUNTA = TÆLV ## Tæller antallet af værdier på en liste med argumenter +COUNTBLANK = ANTAL.BLANKE ## Tæller antallet af tomme celler i et område +COUNTIF = TÆLHVIS ## Tæller antallet af celler, som opfylder de givne kriterier, i et område +COUNTIFS = TÆL.HVISER ## Tæller antallet af de celler, som opfylder flere kriterier, i et område +COVAR = KOVARIANS ## Beregner kovariansen mellem to stokastiske variabler +CRITBINOM = KRITBINOM ## Returnerer den mindste værdi for x, for hvilken det gælder, at fordelingsfunktionen er mindre end eller lig med kriterieværdien. +DEVSQ = SAK ## Returnerer summen af de kvadrerede afvigelser fra middelværdien +EXPONDIST = EKSPFORDELING ## Returnerer eksponentialfordelingen +FDIST = FFORDELING ## Returnerer fraktilsandsynligheden for F-fordelingen +FINV = FINV ## Returnerer den inverse fraktilsandsynlighed for F-fordelingen +FISHER = FISHER ## Returnerer Fisher-transformationen +FISHERINV = FISHERINV ## Returnerer den inverse Fisher-transformation +FORECAST = PROGNOSE ## Returnerer en prognoseværdi baseret på lineær tendens +FREQUENCY = FREKVENS ## Returnerer en frekvensfordeling i en søjlevektor +FTEST = FTEST ## Returnerer resultatet af en F-test til sammenligning af varians +GAMMADIST = GAMMAFORDELING ## Returnerer fordelingsfunktionen for gammafordelingen +GAMMAINV = GAMMAINV ## Returnerer den inverse fordelingsfunktion for gammafordelingen +GAMMALN = GAMMALN ## Returnerer den naturlige logaritme til gammafordelingen, G(x) +GEOMEAN = GEOMIDDELVÆRDI ## Returnerer det geometriske gennemsnit +GROWTH = FORØGELSE ## Returnerer værdier langs en eksponentiel tendens +HARMEAN = HARMIDDELVÆRDI ## Returnerer det harmoniske gennemsnit +HYPGEOMDIST = HYPGEOFORDELING ## Returnerer punktsandsynligheden i en hypergeometrisk fordeling +INTERCEPT = SKÆRING ## Returnerer afskæringsværdien på y-aksen i en lineær regression +KURT = TOPSTEJL ## Returnerer kurtosisværdien for en stokastisk variabel +LARGE = STOR ## Returnerer den k'te største værdi i et datasæt +LINEST = LINREGR ## Returnerer parameterestimaterne for en lineær tendens +LOGEST = LOGREGR ## Returnerer parameterestimaterne for en eksponentiel tendens +LOGINV = LOGINV ## Returnerer den inverse fordelingsfunktion for lognormalfordelingen +LOGNORMDIST = LOGNORMFORDELING ## Returnerer fordelingsfunktionen for lognormalfordelingen +MAX = MAKS ## Returnerer den maksimale værdi på en liste med argumenter. +MAXA = MAKSV ## Returnerer den maksimale værdi på en liste med argumenter og medtager tal, tekst og logiske værdier +MEDIAN = MEDIAN ## Returnerer medianen for de angivne tal +MIN = MIN ## Returnerer den mindste værdi på en liste med argumenter. +MINA = MINV ## Returnerer den mindste værdi på en liste med argumenter og medtager tal, tekst og logiske værdier +MODE = HYPPIGST ## Returnerer den hyppigste værdi i et datasæt +NEGBINOMDIST = NEGBINOMFORDELING ## Returnerer den negative binomialfordeling +NORMDIST = NORMFORDELING ## Returnerer fordelingsfunktionen for normalfordelingen +NORMINV = NORMINV ## Returnerer den inverse fordelingsfunktion for normalfordelingen +NORMSDIST = STANDARDNORMFORDELING ## Returnerer fordelingsfunktionen for standardnormalfordelingen +NORMSINV = STANDARDNORMINV ## Returnerer den inverse fordelingsfunktion for standardnormalfordelingen +PEARSON = PEARSON ## Returnerer Pearsons korrelationskoefficient +PERCENTILE = FRAKTIL ## Returnerer den k'te fraktil for datasættet +PERCENTRANK = PROCENTPLADS ## Returnerer den procentuelle rang for en given værdi i et datasæt +PERMUT = PERMUT ## Returnerer antallet af permutationer for et givet sæt objekter +POISSON = POISSON ## Returnerer fordelingsfunktionen for en Poisson-fordeling +PROB = SANDSYNLIGHED ## Returnerer intervalsandsynligheden +QUARTILE = KVARTIL ## Returnerer kvartilen i et givet datasæt +RANK = PLADS ## Returnerer rangen for et tal på en liste med tal +RSQ = FORKLARINGSGRAD ## Returnerer R2-værdien fra en simpel lineær regression +SKEW = SKÆVHED ## Returnerer skævheden for en stokastisk variabel +SLOPE = HÆLDNING ## Returnerer estimatet på hældningen fra en simpel lineær regression +SMALL = MINDSTE ## Returnerer den k'te mindste værdi i datasættet +STANDARDIZE = STANDARDISER ## Returnerer en standardiseret værdi +STDEV = STDAFV ## Estimerer standardafvigelsen på basis af en stikprøve +STDEVA = STDAFVV ## Beregner standardafvigelsen på basis af en prøve og medtager tal, tekst og logiske værdier +STDEVP = STDAFVP ## Beregner standardafvigelsen på basis af en hel population +STDEVPA = STDAFVPV ## Beregner standardafvigelsen på basis af en hel population og medtager tal, tekst og logiske værdier +STEYX = STFYX ## Returnerer standardafvigelsen for de estimerede y-værdier i den simple lineære regression +TDIST = TFORDELING ## Returnerer fordelingsfunktionen for Student's t-fordeling +TINV = TINV ## Returnerer den inverse fordelingsfunktion for Student's t-fordeling +TREND = TENDENS ## Returnerer værdi under antagelse af en lineær tendens +TRIMMEAN = TRIMMIDDELVÆRDI ## Returnerer den trimmede middelværdi for datasættet +TTEST = TTEST ## Returnerer den sandsynlighed, der er forbundet med Student's t-test +VAR = VARIANS ## Beregner variansen på basis af en prøve +VARA = VARIANSV ## Beregner variansen på basis af en prøve og medtager tal, tekst og logiske værdier +VARP = VARIANSP ## Beregner variansen på basis af hele populationen +VARPA = VARIANSPV ## Beregner variansen på basis af hele populationen og medtager tal, tekst og logiske værdier +WEIBULL = WEIBULL ## Returnerer fordelingsfunktionen for Weibull-fordelingen +ZTEST = ZTEST ## Returnerer sandsynlighedsværdien ved en en-sidet z-test + + +## +## Text functions Tekstfunktioner +## +ASC = ASC ## Ændrer engelske tegn i fuld bredde (dobbelt-byte) eller katakana i en tegnstreng til tegn i halv bredde (enkelt-byte) +BAHTTEXT = BAHTTEKST ## Konverterer et tal til tekst ved hjælp af valutaformatet ß (baht) +CHAR = TEGN ## Returnerer det tegn, der svarer til kodenummeret +CLEAN = RENS ## Fjerner alle tegn, der ikke kan udskrives, fra tekst +CODE = KODE ## Returnerer en numerisk kode for det første tegn i en tekststreng +CONCATENATE = SAMMENKÆDNING ## Sammenkæder adskillige tekstelementer til ét tekstelement +DOLLAR = KR ## Konverterer et tal til tekst ved hjælp af valutaformatet kr. (kroner) +EXACT = EKSAKT ## Kontrollerer, om to tekstværdier er identiske +FIND = FIND ## Søger efter en tekstværdi i en anden tekstværdi (der skelnes mellem store og små bogstaver) +FINDB = FINDB ## Søger efter en tekstværdi i en anden tekstværdi (der skelnes mellem store og små bogstaver) +FIXED = FAST ## Formaterer et tal som tekst med et fast antal decimaler +JIS = JIS ## Ændrer engelske tegn i halv bredde (enkelt-byte) eller katakana i en tegnstreng til tegn i fuld bredde (dobbelt-byte) +LEFT = VENSTRE ## Returnerer tegnet længst til venstre i en tekstværdi +LEFTB = VENSTREB ## Returnerer tegnet længst til venstre i en tekstværdi +LEN = LÆNGDE ## Returnerer antallet af tegn i en tekststreng +LENB = LÆNGDEB ## Returnerer antallet af tegn i en tekststreng +LOWER = SMÅ.BOGSTAVER ## Konverterer tekst til små bogstaver +MID = MIDT ## Returnerer et bestemt antal tegn fra en tekststreng fra og med den angivne startposition +MIDB = MIDTB ## Returnerer et bestemt antal tegn fra en tekststreng fra og med den angivne startposition +PHONETIC = FONETISK ## Uddrager de fonetiske (furigana) tegn fra en tekststreng +PROPER = STORT.FORBOGSTAV ## Konverterer første bogstav i hvert ord i teksten til stort bogstav +REPLACE = ERSTAT ## Erstatter tegn i tekst +REPLACEB = ERSTATB ## Erstatter tegn i tekst +REPT = GENTAG ## Gentager tekst et givet antal gange +RIGHT = HØJRE ## Returnerer tegnet længste til højre i en tekstværdi +RIGHTB = HØJREB ## Returnerer tegnet længste til højre i en tekstværdi +SEARCH = SØG ## Søger efter en tekstværdi i en anden tekstværdi (der skelnes ikke mellem store og små bogstaver) +SEARCHB = SØGB ## Søger efter en tekstværdi i en anden tekstværdi (der skelnes ikke mellem store og små bogstaver) +SUBSTITUTE = UDSKIFT ## Udskifter gammel tekst med ny tekst i en tekststreng +T = T ## Konverterer argumenterne til tekst +TEXT = TEKST ## Formaterer et tal og konverterer det til tekst +TRIM = FJERN.OVERFLØDIGE.BLANKE ## Fjerner mellemrum fra tekst +UPPER = STORE.BOGSTAVER ## Konverterer tekst til store bogstaver +VALUE = VÆRDI ## Konverterer et tekstargument til et tal diff --git a/PHPExcel/locale/de/config b/PHPExcel/locale/de/config new file mode 100644 index 0000000..c997275 --- /dev/null +++ b/PHPExcel/locale/de/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = € + + +## +## Excel Error Codes (For future use) +## +NULL = #NULL! +DIV0 = #DIV/0! +VALUE = #WERT! +REF = #BEZUG! +NAME = #NAME? +NUM = #ZAHL! +NA = #NV diff --git a/PHPExcel/locale/de/functions b/PHPExcel/locale/de/functions new file mode 100644 index 0000000..8ce08de --- /dev/null +++ b/PHPExcel/locale/de/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Add-In- und Automatisierungsfunktionen +## +GETPIVOTDATA = PIVOTDATENZUORDNEN ## In einem PivotTable-Bericht gespeicherte Daten werden zurückgegeben. + + +## +## Cube functions Cubefunktionen +## +CUBEKPIMEMBER = CUBEKPIELEMENT ## Gibt Name, Eigenschaft und Measure eines Key Performance Indicators (KPI) zurück und zeigt den Namen und die Eigenschaft in der Zelle an. Ein KPI ist ein quantifizierbares Maß, wie z. B. der monatliche Bruttogewinn oder die vierteljährliche Mitarbeiterfluktuation, mit dessen Hilfe das Leistungsverhalten eines Unternehmens überwacht werden kann. +CUBEMEMBER = CUBEELEMENT ## Gibt ein Element oder ein Tuple in einer Cubehierarchie zurück. Wird verwendet, um zu überprüfen, ob das Element oder Tuple im Cube vorhanden ist. +CUBEMEMBERPROPERTY = CUBEELEMENTEIGENSCHAFT ## Gibt den Wert einer Elementeigenschaft im Cube zurück. Wird verwendet, um zu überprüfen, ob ein Elementname im Cube vorhanden ist, und um die für dieses Element angegebene Eigenschaft zurückzugeben. +CUBERANKEDMEMBER = CUBERANGELEMENT ## Gibt das n-te oder n-rangige Element in einer Menge zurück. Wird verwendet, um mindestens ein Element in einer Menge zurückzugeben, wie z. B. bester Vertriebsmitarbeiter oder 10 beste Kursteilnehmer. +CUBESET = CUBEMENGE ## Definiert eine berechnete Menge Elemente oder Tuples durch Senden eines Mengenausdrucks an den Cube auf dem Server, der die Menge erstellt und an Microsoft Office Excel zurückgibt. +CUBESETCOUNT = CUBEMENGENANZAHL ## Gibt die Anzahl der Elemente in einer Menge zurück. +CUBEVALUE = CUBEWERT ## Gibt einen Aggregatwert aus einem Cube zurück. + + +## +## Database functions Datenbankfunktionen +## +DAVERAGE = DBMITTELWERT ## Gibt den Mittelwert der ausgewählten Datenbankeinträge zurück +DCOUNT = DBANZAHL ## Zählt die Zellen mit Zahlen in einer Datenbank +DCOUNTA = DBANZAHL2 ## Zählt nicht leere Zellen in einer Datenbank +DGET = DBAUSZUG ## Extrahiert aus einer Datenbank einen einzelnen Datensatz, der den angegebenen Kriterien entspricht +DMAX = DBMAX ## Gibt den größten Wert aus ausgewählten Datenbankeinträgen zurück +DMIN = DBMIN ## Gibt den kleinsten Wert aus ausgewählten Datenbankeinträgen zurück +DPRODUCT = DBPRODUKT ## Multipliziert die Werte in einem bestimmten Feld mit Datensätzen, die den Kriterien in einer Datenbank entsprechen +DSTDEV = DBSTDABW ## Schätzt die Standardabweichung auf der Grundlage einer Stichprobe aus ausgewählten Datenbankeinträgen +DSTDEVP = DBSTDABWN ## Berechnet die Standardabweichung auf der Grundlage der Grundgesamtheit ausgewählter Datenbankeinträge +DSUM = DBSUMME ## Addiert die Zahlen in der Feldspalte mit Datensätzen in der Datenbank, die den Kriterien entsprechen +DVAR = DBVARIANZ ## Schätzt die Varianz auf der Grundlage ausgewählter Datenbankeinträge +DVARP = DBVARIANZEN ## Berechnet die Varianz auf der Grundlage der Grundgesamtheit ausgewählter Datenbankeinträge + + +## +## Date and time functions Datums- und Zeitfunktionen +## +DATE = DATUM ## Gibt die fortlaufende Zahl eines bestimmten Datums zurück +DATEVALUE = DATWERT ## Wandelt ein Datum in Form von Text in eine fortlaufende Zahl um +DAY = TAG ## Wandelt eine fortlaufende Zahl in den Tag des Monats um +DAYS360 = TAGE360 ## Berechnet die Anzahl der Tage zwischen zwei Datumsangaben ausgehend von einem Jahr, das 360 Tage hat +EDATE = EDATUM ## Gibt die fortlaufende Zahl des Datums zurück, bei dem es sich um die angegebene Anzahl von Monaten vor oder nach dem Anfangstermin handelt +EOMONTH = MONATSENDE ## Gibt die fortlaufende Zahl des letzten Tags des Monats vor oder nach einer festgelegten Anzahl von Monaten zurück +HOUR = STUNDE ## Wandelt eine fortlaufende Zahl in eine Stunde um +MINUTE = MINUTE ## Wandelt eine fortlaufende Zahl in eine Minute um +MONTH = MONAT ## Wandelt eine fortlaufende Zahl in einen Monat um +NETWORKDAYS = NETTOARBEITSTAGE ## Gibt die Anzahl von ganzen Arbeitstagen zwischen zwei Datumswerten zurück +NOW = JETZT ## Gibt die fortlaufende Zahl des aktuellen Datums und der aktuellen Uhrzeit zurück +SECOND = SEKUNDE ## Wandelt eine fortlaufende Zahl in eine Sekunde um +TIME = ZEIT ## Gibt die fortlaufende Zahl einer bestimmten Uhrzeit zurück +TIMEVALUE = ZEITWERT ## Wandelt eine Uhrzeit in Form von Text in eine fortlaufende Zahl um +TODAY = HEUTE ## Gibt die fortlaufende Zahl des heutigen Datums zurück +WEEKDAY = WOCHENTAG ## Wandelt eine fortlaufende Zahl in den Wochentag um +WEEKNUM = KALENDERWOCHE ## Wandelt eine fortlaufende Zahl in eine Zahl um, die angibt, in welche Woche eines Jahres das angegebene Datum fällt +WORKDAY = ARBEITSTAG ## Gibt die fortlaufende Zahl des Datums vor oder nach einer bestimmten Anzahl von Arbeitstagen zurück +YEAR = JAHR ## Wandelt eine fortlaufende Zahl in ein Jahr um +YEARFRAC = BRTEILJAHRE ## Gibt die Anzahl der ganzen Tage zwischen Ausgangsdatum und Enddatum in Bruchteilen von Jahren zurück + + +## +## Engineering functions Konstruktionsfunktionen +## +BESSELI = BESSELI ## Gibt die geänderte Besselfunktion In(x) zurück +BESSELJ = BESSELJ ## Gibt die Besselfunktion Jn(x) zurück +BESSELK = BESSELK ## Gibt die geänderte Besselfunktion Kn(x) zurück +BESSELY = BESSELY ## Gibt die Besselfunktion Yn(x) zurück +BIN2DEC = BININDEZ ## Wandelt eine binäre Zahl (Dualzahl) in eine dezimale Zahl um +BIN2HEX = BININHEX ## Wandelt eine binäre Zahl (Dualzahl) in eine hexadezimale Zahl um +BIN2OCT = BININOKT ## Wandelt eine binäre Zahl (Dualzahl) in eine oktale Zahl um +COMPLEX = KOMPLEXE ## Wandelt den Real- und Imaginärteil in eine komplexe Zahl um +CONVERT = UMWANDELN ## Wandelt eine Zahl von einem Maßsystem in ein anderes um +DEC2BIN = DEZINBIN ## Wandelt eine dezimale Zahl in eine binäre Zahl (Dualzahl) um +DEC2HEX = DEZINHEX ## Wandelt eine dezimale Zahl in eine hexadezimale Zahl um +DEC2OCT = DEZINOKT ## Wandelt eine dezimale Zahl in eine oktale Zahl um +DELTA = DELTA ## Überprüft, ob zwei Werte gleich sind +ERF = GAUSSFEHLER ## Gibt die Gauss'sche Fehlerfunktion zurück +ERFC = GAUSSFKOMPL ## Gibt das Komplement zur Gauss'schen Fehlerfunktion zurück +GESTEP = GGANZZAHL ## Überprüft, ob eine Zahl größer als ein gegebener Schwellenwert ist +HEX2BIN = HEXINBIN ## Wandelt eine hexadezimale Zahl in eine Binärzahl um +HEX2DEC = HEXINDEZ ## Wandelt eine hexadezimale Zahl in eine dezimale Zahl um +HEX2OCT = HEXINOKT ## Wandelt eine hexadezimale Zahl in eine Oktalzahl um +IMABS = IMABS ## Gibt den Absolutbetrag (Modulo) einer komplexen Zahl zurück +IMAGINARY = IMAGINÄRTEIL ## Gibt den Imaginärteil einer komplexen Zahl zurück +IMARGUMENT = IMARGUMENT ## Gibt das Argument Theta zurück, einen Winkel, der als Bogenmaß ausgedrückt wird +IMCONJUGATE = IMKONJUGIERTE ## Gibt die konjugierte komplexe Zahl zu einer komplexen Zahl zurück +IMCOS = IMCOS ## Gibt den Kosinus einer komplexen Zahl zurück +IMDIV = IMDIV ## Gibt den Quotienten zweier komplexer Zahlen zurück +IMEXP = IMEXP ## Gibt die algebraische Form einer in exponentieller Schreibweise vorliegenden komplexen Zahl zurück +IMLN = IMLN ## Gibt den natürlichen Logarithmus einer komplexen Zahl zurück +IMLOG10 = IMLOG10 ## Gibt den Logarithmus einer komplexen Zahl zur Basis 10 zurück +IMLOG2 = IMLOG2 ## Gibt den Logarithmus einer komplexen Zahl zur Basis 2 zurück +IMPOWER = IMAPOTENZ ## Potenziert eine komplexe Zahl mit einer ganzen Zahl +IMPRODUCT = IMPRODUKT ## Gibt das Produkt von komplexen Zahlen zurück +IMREAL = IMREALTEIL ## Gibt den Realteil einer komplexen Zahl zurück +IMSIN = IMSIN ## Gibt den Sinus einer komplexen Zahl zurück +IMSQRT = IMWURZEL ## Gibt die Quadratwurzel einer komplexen Zahl zurück +IMSUB = IMSUB ## Gibt die Differenz zwischen zwei komplexen Zahlen zurück +IMSUM = IMSUMME ## Gibt die Summe von komplexen Zahlen zurück +OCT2BIN = OKTINBIN ## Wandelt eine oktale Zahl in eine binäre Zahl (Dualzahl) um +OCT2DEC = OKTINDEZ ## Wandelt eine oktale Zahl in eine dezimale Zahl um +OCT2HEX = OKTINHEX ## Wandelt eine oktale Zahl in eine hexadezimale Zahl um + + +## +## Financial functions Finanzmathematische Funktionen +## +ACCRINT = AUFGELZINS ## Gibt die aufgelaufenen Zinsen (Stückzinsen) eines Wertpapiers mit periodischen Zinszahlungen zurück +ACCRINTM = AUFGELZINSF ## Gibt die aufgelaufenen Zinsen (Stückzinsen) eines Wertpapiers zurück, die bei Fälligkeit ausgezahlt werden +AMORDEGRC = AMORDEGRK ## Gibt die Abschreibung für die einzelnen Abschreibungszeiträume mithilfe eines Abschreibungskoeffizienten zurück +AMORLINC = AMORLINEARK ## Gibt die Abschreibung für die einzelnen Abschreibungszeiträume zurück +COUPDAYBS = ZINSTERMTAGVA ## Gibt die Anzahl der Tage vom Anfang des Zinstermins bis zum Abrechnungstermin zurück +COUPDAYS = ZINSTERMTAGE ## Gibt die Anzahl der Tage der Zinsperiode zurück, die den Abrechnungstermin einschließt +COUPDAYSNC = ZINSTERMTAGNZ ## Gibt die Anzahl der Tage vom Abrechnungstermin bis zum nächsten Zinstermin zurück +COUPNCD = ZINSTERMNZ ## Gibt das Datum des ersten Zinstermins nach dem Abrechnungstermin zurück +COUPNUM = ZINSTERMZAHL ## Gibt die Anzahl der Zinstermine zwischen Abrechnungs- und Fälligkeitsdatum zurück +COUPPCD = ZINSTERMVZ ## Gibt das Datum des letzten Zinstermins vor dem Abrechnungstermin zurück +CUMIPMT = KUMZINSZ ## Berechnet die kumulierten Zinsen, die zwischen zwei Perioden zu zahlen sind +CUMPRINC = KUMKAPITAL ## Berechnet die aufgelaufene Tilgung eines Darlehens, die zwischen zwei Perioden zu zahlen ist +DB = GDA2 ## Gibt die geometrisch-degressive Abschreibung eines Wirtschaftsguts für eine bestimmte Periode zurück +DDB = GDA ## Gibt die Abschreibung eines Anlageguts für einen angegebenen Zeitraum unter Verwendung der degressiven Doppelraten-Abschreibung oder eines anderen von Ihnen angegebenen Abschreibungsverfahrens zurück +DISC = DISAGIO ## Gibt den in Prozent ausgedrückten Abzinsungssatz eines Wertpapiers zurück +DOLLARDE = NOTIERUNGDEZ ## Wandelt eine Notierung, die als Dezimalbruch ausgedrückt wurde, in eine Dezimalzahl um +DOLLARFR = NOTIERUNGBRU ## Wandelt eine Notierung, die als Dezimalzahl ausgedrückt wurde, in einen Dezimalbruch um +DURATION = DURATION ## Gibt die jährliche Duration eines Wertpapiers mit periodischen Zinszahlungen zurück +EFFECT = EFFEKTIV ## Gibt die jährliche Effektivverzinsung zurück +FV = ZW ## Gibt den zukünftigen Wert (Endwert) einer Investition zurück +FVSCHEDULE = ZW2 ## Gibt den aufgezinsten Wert des Anfangskapitals für eine Reihe periodisch unterschiedlicher Zinssätze zurück +INTRATE = ZINSSATZ ## Gibt den Zinssatz eines voll investierten Wertpapiers zurück +IPMT = ZINSZ ## Gibt die Zinszahlung einer Investition für die angegebene Periode zurück +IRR = IKV ## Gibt den internen Zinsfuß einer Investition ohne Finanzierungskosten oder Reinvestitionsgewinne zurück +ISPMT = ISPMT ## Berechnet die während eines bestimmten Zeitraums für eine Investition gezahlten Zinsen +MDURATION = MDURATION ## Gibt die geänderte Dauer für ein Wertpapier mit einem angenommenen Nennwert von 100 € zurück +MIRR = QIKV ## Gibt den internen Zinsfuß zurück, wobei positive und negative Zahlungen zu unterschiedlichen Sätzen finanziert werden +NOMINAL = NOMINAL ## Gibt die jährliche Nominalverzinsung zurück +NPER = ZZR ## Gibt die Anzahl der Zahlungsperioden einer Investition zurück +NPV = NBW ## Gibt den Nettobarwert einer Investition auf Basis periodisch anfallender Zahlungen und eines Abzinsungsfaktors zurück +ODDFPRICE = UNREGER.KURS ## Gibt den Kurs pro 100 € Nennwert eines Wertpapiers mit einem unregelmäßigen ersten Zinstermin zurück +ODDFYIELD = UNREGER.REND ## Gibt die Rendite eines Wertpapiers mit einem unregelmäßigen ersten Zinstermin zurück +ODDLPRICE = UNREGLE.KURS ## Gibt den Kurs pro 100 € Nennwert eines Wertpapiers mit einem unregelmäßigen letzten Zinstermin zurück +ODDLYIELD = UNREGLE.REND ## Gibt die Rendite eines Wertpapiers mit einem unregelmäßigen letzten Zinstermin zurück +PMT = RMZ ## Gibt die periodische Zahlung für eine Annuität zurück +PPMT = KAPZ ## Gibt die Kapitalrückzahlung einer Investition für eine angegebene Periode zurück +PRICE = KURS ## Gibt den Kurs pro 100 € Nennwert eines Wertpapiers zurück, das periodisch Zinsen auszahlt +PRICEDISC = KURSDISAGIO ## Gibt den Kurs pro 100 € Nennwert eines unverzinslichen Wertpapiers zurück +PRICEMAT = KURSFÄLLIG ## Gibt den Kurs pro 100 € Nennwert eines Wertpapiers zurück, das Zinsen am Fälligkeitsdatum auszahlt +PV = BW ## Gibt den Barwert einer Investition zurück +RATE = ZINS ## Gibt den Zinssatz pro Zeitraum einer Annuität zurück +RECEIVED = AUSZAHLUNG ## Gibt den Auszahlungsbetrag eines voll investierten Wertpapiers am Fälligkeitstermin zurück +SLN = LIA ## Gibt die lineare Abschreibung eines Wirtschaftsguts pro Periode zurück +SYD = DIA ## Gibt die arithmetisch-degressive Abschreibung eines Wirtschaftsguts für eine bestimmte Periode zurück +TBILLEQ = TBILLÄQUIV ## Gibt die Rendite für ein Wertpapier zurück +TBILLPRICE = TBILLKURS ## Gibt den Kurs pro 100 € Nennwert eines Wertpapiers zurück +TBILLYIELD = TBILLRENDITE ## Gibt die Rendite für ein Wertpapier zurück +VDB = VDB ## Gibt die degressive Abschreibung eines Wirtschaftsguts für eine bestimmte Periode oder Teilperiode zurück +XIRR = XINTZINSFUSS ## Gibt den internen Zinsfuß einer Reihe nicht periodisch anfallender Zahlungen zurück +XNPV = XKAPITALWERT ## Gibt den Nettobarwert (Kapitalwert) einer Reihe nicht periodisch anfallender Zahlungen zurück +YIELD = RENDITE ## Gibt die Rendite eines Wertpapiers zurück, das periodisch Zinsen auszahlt +YIELDDISC = RENDITEDIS ## Gibt die jährliche Rendite eines unverzinslichen Wertpapiers zurück +YIELDMAT = RENDITEFÄLL ## Gibt die jährliche Rendite eines Wertpapiers zurück, das Zinsen am Fälligkeitsdatum auszahlt + + +## +## Information functions Informationsfunktionen +## +CELL = ZELLE ## Gibt Informationen zu Formatierung, Position oder Inhalt einer Zelle zurück +ERROR.TYPE = FEHLER.TYP ## Gibt eine Zahl zurück, die einem Fehlertyp entspricht +INFO = INFO ## Gibt Informationen zur aktuellen Betriebssystemumgebung zurück +ISBLANK = ISTLEER ## Gibt WAHR zurück, wenn der Wert leer ist +ISERR = ISTFEHL ## Gibt WAHR zurück, wenn der Wert ein beliebiger Fehlerwert außer #N/V ist +ISERROR = ISTFEHLER ## Gibt WAHR zurück, wenn der Wert ein beliebiger Fehlerwert ist +ISEVEN = ISTGERADE ## Gibt WAHR zurück, wenn es sich um eine gerade Zahl handelt +ISLOGICAL = ISTLOG ## Gibt WAHR zurück, wenn der Wert ein Wahrheitswert ist +ISNA = ISTNV ## Gibt WAHR zurück, wenn der Wert der Fehlerwert #N/V ist +ISNONTEXT = ISTKTEXT ## Gibt WAHR zurück, wenn der Wert ein Element ist, das keinen Text enthält +ISNUMBER = ISTZAHL ## Gibt WAHR zurück, wenn der Wert eine Zahl ist +ISODD = ISTUNGERADE ## Gibt WAHR zurück, wenn es sich um eine ungerade Zahl handelt +ISREF = ISTBEZUG ## Gibt WAHR zurück, wenn der Wert ein Bezug ist +ISTEXT = ISTTEXT ## Gibt WAHR zurück, wenn der Wert ein Element ist, das Text enthält +N = N ## Gibt den in eine Zahl umgewandelten Wert zurück +NA = NV ## Gibt den Fehlerwert #NV zurück +TYPE = TYP ## Gibt eine Zahl zurück, die den Datentyp des angegebenen Werts anzeigt + + +## +## Logical functions Logische Funktionen +## +AND = UND ## Gibt WAHR zurück, wenn alle zugehörigen Argumente WAHR sind +FALSE = FALSCH ## Gibt den Wahrheitswert FALSCH zurück +IF = WENN ## Gibt einen logischen Test zum Ausführen an +IFERROR = WENNFEHLER ## Gibt einen von Ihnen festgelegten Wert zurück, wenn die Auswertung der Formel zu einem Fehler führt; andernfalls wird das Ergebnis der Formel zurückgegeben +NOT = NICHT ## Kehrt den Wahrheitswert der zugehörigen Argumente um +OR = ODER ## Gibt WAHR zurück, wenn ein Argument WAHR ist +TRUE = WAHR ## Gibt den Wahrheitswert WAHR zurück + + +## +## Lookup and reference functions Nachschlage- und Verweisfunktionen +## +ADDRESS = ADRESSE ## Gibt einen Bezug auf eine einzelne Zelle in einem Tabellenblatt als Text zurück +AREAS = BEREICHE ## Gibt die Anzahl der innerhalb eines Bezugs aufgeführten Bereiche zurück +CHOOSE = WAHL ## Wählt einen Wert aus eine Liste mit Werten aus +COLUMN = SPALTE ## Gibt die Spaltennummer eines Bezugs zurück +COLUMNS = SPALTEN ## Gibt die Anzahl der Spalten in einem Bezug zurück +HLOOKUP = HVERWEIS ## Sucht in der obersten Zeile einer Matrix und gibt den Wert der angegebenen Zelle zurück +HYPERLINK = HYPERLINK ## Erstellt eine Verknüpfung, über die ein auf einem Netzwerkserver, in einem Intranet oder im Internet gespeichertes Dokument geöffnet wird +INDEX = INDEX ## Verwendet einen Index, um einen Wert aus einem Bezug oder einer Matrix auszuwählen +INDIRECT = INDIREKT ## Gibt einen Bezug zurück, der von einem Textwert angegeben wird +LOOKUP = LOOKUP ## Sucht Werte in einem Vektor oder einer Matrix +MATCH = VERGLEICH ## Sucht Werte in einem Bezug oder einer Matrix +OFFSET = BEREICH.VERSCHIEBEN ## Gibt einen Bezugoffset aus einem gegebenen Bezug zurück +ROW = ZEILE ## Gibt die Zeilennummer eines Bezugs zurück +ROWS = ZEILEN ## Gibt die Anzahl der Zeilen in einem Bezug zurück +RTD = RTD ## Ruft Echtzeitdaten von einem Programm ab, das die COM-Automatisierung (Automatisierung: Ein Verfahren, bei dem aus einer Anwendung oder einem Entwicklungstool heraus mit den Objekten einer anderen Anwendung gearbeitet wird. Die früher als OLE-Automatisierung bezeichnete Automatisierung ist ein Industriestandard und eine Funktion von COM (Component Object Model).) unterstützt +TRANSPOSE = MTRANS ## Gibt die transponierte Matrix einer Matrix zurück +VLOOKUP = SVERWEIS ## Sucht in der ersten Spalte einer Matrix und arbeitet sich durch die Zeile, um den Wert einer Zelle zurückzugeben + + +## +## Math and trigonometry functions Mathematische und trigonometrische Funktionen +## +ABS = ABS ## Gibt den Absolutwert einer Zahl zurück +ACOS = ARCCOS ## Gibt den Arkuskosinus einer Zahl zurück +ACOSH = ARCCOSHYP ## Gibt den umgekehrten hyperbolischen Kosinus einer Zahl zurück +ASIN = ARCSIN ## Gibt den Arkussinus einer Zahl zurück +ASINH = ARCSINHYP ## Gibt den umgekehrten hyperbolischen Sinus einer Zahl zurück +ATAN = ARCTAN ## Gibt den Arkustangens einer Zahl zurück +ATAN2 = ARCTAN2 ## Gibt den Arkustangens einer x- und einer y-Koordinate zurück +ATANH = ARCTANHYP ## Gibt den umgekehrten hyperbolischen Tangens einer Zahl zurück +CEILING = OBERGRENZE ## Rundet eine Zahl auf die nächste ganze Zahl oder das nächste Vielfache von Schritt +COMBIN = KOMBINATIONEN ## Gibt die Anzahl der Kombinationen für eine bestimmte Anzahl von Objekten zurück +COS = COS ## Gibt den Kosinus einer Zahl zurück +COSH = COSHYP ## Gibt den hyperbolischen Kosinus einer Zahl zurück +DEGREES = GRAD ## Wandelt Bogenmaß (Radiant) in Grad um +EVEN = GERADE ## Rundet eine Zahl auf die nächste gerade ganze Zahl auf +EXP = EXP ## Potenziert die Basis e mit der als Argument angegebenen Zahl +FACT = FAKULTÄT ## Gibt die Fakultät einer Zahl zurück +FACTDOUBLE = ZWEIFAKULTÄT ## Gibt die Fakultät zu Zahl mit Schrittlänge 2 zurück +FLOOR = UNTERGRENZE ## Rundet die Zahl auf Anzahl_Stellen ab +GCD = GGT ## Gibt den größten gemeinsamen Teiler zurück +INT = GANZZAHL ## Rundet eine Zahl auf die nächstkleinere ganze Zahl ab +LCM = KGV ## Gibt das kleinste gemeinsame Vielfache zurück +LN = LN ## Gibt den natürlichen Logarithmus einer Zahl zurück +LOG = LOG ## Gibt den Logarithmus einer Zahl zu der angegebenen Basis zurück +LOG10 = LOG10 ## Gibt den Logarithmus einer Zahl zur Basis 10 zurück +MDETERM = MDET ## Gibt die Determinante einer Matrix zurück +MINVERSE = MINV ## Gibt die inverse Matrix einer Matrix zurück +MMULT = MMULT ## Gibt das Produkt zweier Matrizen zurück +MOD = REST ## Gibt den Rest einer Division zurück +MROUND = VRUNDEN ## Gibt eine auf das gewünschte Vielfache gerundete Zahl zurück +MULTINOMIAL = POLYNOMIAL ## Gibt den Polynomialkoeffizienten einer Gruppe von Zahlen zurück +ODD = UNGERADE ## Rundet eine Zahl auf die nächste ungerade ganze Zahl auf +PI = PI ## Gibt den Wert Pi zurück +POWER = POTENZ ## Gibt als Ergebnis eine potenzierte Zahl zurück +PRODUCT = PRODUKT ## Multipliziert die zugehörigen Argumente +QUOTIENT = QUOTIENT ## Gibt den ganzzahligen Anteil einer Division zurück +RADIANS = BOGENMASS ## Wandelt Grad in Bogenmaß (Radiant) um +RAND = ZUFALLSZAHL ## Gibt eine Zufallszahl zwischen 0 und 1 zurück +RANDBETWEEN = ZUFALLSBEREICH ## Gibt eine Zufallszahl aus dem festgelegten Bereich zurück +ROMAN = RÖMISCH ## Wandelt eine arabische Zahl in eine römische Zahl als Text um +ROUND = RUNDEN ## Rundet eine Zahl auf eine bestimmte Anzahl von Dezimalstellen +ROUNDDOWN = ABRUNDEN ## Rundet die Zahl auf Anzahl_Stellen ab +ROUNDUP = AUFRUNDEN ## Rundet die Zahl auf Anzahl_Stellen auf +SERIESSUM = POTENZREIHE ## Gibt die Summe von Potenzen (zur Berechnung von Potenzreihen und dichotomen Wahrscheinlichkeiten) zurück +SIGN = VORZEICHEN ## Gibt das Vorzeichen einer Zahl zurück +SIN = SIN ## Gibt den Sinus einer Zahl zurück +SINH = SINHYP ## Gibt den hyperbolischen Sinus einer Zahl zurück +SQRT = WURZEL ## Gibt die Quadratwurzel einer Zahl zurück +SQRTPI = WURZELPI ## Gibt die Wurzel aus der mit Pi (pi) multiplizierten Zahl zurück +SUBTOTAL = TEILERGEBNIS ## Gibt ein Teilergebnis in einer Liste oder Datenbank zurück +SUM = SUMME ## Addiert die zugehörigen Argumente +SUMIF = SUMMEWENN ## Addiert Zahlen, die mit den Suchkriterien übereinstimmen +SUMIFS = SUMMEWENNS ## Die Zellen, die mehrere Kriterien erfüllen, werden in einem Bereich hinzugefügt +SUMPRODUCT = SUMMENPRODUKT ## Gibt die Summe der Produkte zusammengehöriger Matrixkomponenten zurück +SUMSQ = QUADRATESUMME ## Gibt die Summe der quadrierten Argumente zurück +SUMX2MY2 = SUMMEX2MY2 ## Gibt die Summe der Differenzen der Quadrate für zusammengehörige Komponenten zweier Matrizen zurück +SUMX2PY2 = SUMMEX2PY2 ## Gibt die Summe der Quadrate für zusammengehörige Komponenten zweier Matrizen zurück +SUMXMY2 = SUMMEXMY2 ## Gibt die Summe der quadrierten Differenzen für zusammengehörige Komponenten zweier Matrizen zurück +TAN = TAN ## Gibt den Tangens einer Zahl zurück +TANH = TANHYP ## Gibt den hyperbolischen Tangens einer Zahl zurück +TRUNC = KÜRZEN ## Schneidet die Kommastellen einer Zahl ab und gibt als Ergebnis eine ganze Zahl zurück + + +## +## Statistical functions Statistische Funktionen +## +AVEDEV = MITTELABW ## Gibt die durchschnittliche absolute Abweichung einer Reihe von Merkmalsausprägungen und ihrem Mittelwert zurück +AVERAGE = MITTELWERT ## Gibt den Mittelwert der zugehörigen Argumente zurück +AVERAGEA = MITTELWERTA ## Gibt den Mittelwert der zugehörigen Argumente, die Zahlen, Text und Wahrheitswerte enthalten, zurück +AVERAGEIF = MITTELWERTWENN ## Der Durchschnittswert (arithmetisches Mittel) für alle Zellen in einem Bereich, die einem angegebenen Kriterium entsprechen, wird zurückgegeben +AVERAGEIFS = MITTELWERTWENNS ## Gibt den Durchschnittswert (arithmetisches Mittel) aller Zellen zurück, die mehreren Kriterien entsprechen +BETADIST = BETAVERT ## Gibt die Werte der kumulierten Betaverteilungsfunktion zurück +BETAINV = BETAINV ## Gibt das Quantil der angegebenen Betaverteilung zurück +BINOMDIST = BINOMVERT ## Gibt Wahrscheinlichkeiten einer binomialverteilten Zufallsvariablen zurück +CHIDIST = CHIVERT ## Gibt Werte der Verteilungsfunktion (1-Alpha) einer Chi-Quadrat-verteilten Zufallsgröße zurück +CHIINV = CHIINV ## Gibt Quantile der Verteilungsfunktion (1-Alpha) der Chi-Quadrat-Verteilung zurück +CHITEST = CHITEST ## Gibt die Teststatistik eines Unabhängigkeitstests zurück +CONFIDENCE = KONFIDENZ ## Ermöglicht die Berechnung des 1-Alpha Konfidenzintervalls für den Erwartungswert einer Zufallsvariablen +CORREL = KORREL ## Gibt den Korrelationskoeffizienten zweier Reihen von Merkmalsausprägungen zurück +COUNT = ANZAHL ## Gibt die Anzahl der Zahlen in der Liste mit Argumenten an +COUNTA = ANZAHL2 ## Gibt die Anzahl der Werte in der Liste mit Argumenten an +COUNTBLANK = ANZAHLLEEREZELLEN ## Gibt die Anzahl der leeren Zellen in einem Bereich an +COUNTIF = ZÄHLENWENN ## Gibt die Anzahl der Zellen in einem Bereich an, deren Inhalte mit den Suchkriterien übereinstimmen +COUNTIFS = ZÄHLENWENNS ## Gibt die Anzahl der Zellen in einem Bereich an, deren Inhalte mit mehreren Suchkriterien übereinstimmen +COVAR = KOVAR ## Gibt die Kovarianz zurück, den Mittelwert der für alle Datenpunktpaare gebildeten Produkte der Abweichungen +CRITBINOM = KRITBINOM ## Gibt den kleinsten Wert zurück, für den die kumulierten Wahrscheinlichkeiten der Binomialverteilung kleiner oder gleich einer Grenzwahrscheinlichkeit sind +DEVSQ = SUMQUADABW ## Gibt die Summe der quadrierten Abweichungen der Datenpunkte von ihrem Stichprobenmittelwert zurück +EXPONDIST = EXPONVERT ## Gibt Wahrscheinlichkeiten einer exponential verteilten Zufallsvariablen zurück +FDIST = FVERT ## Gibt Werte der Verteilungsfunktion (1-Alpha) einer F-verteilten Zufallsvariablen zurück +FINV = FINV ## Gibt Quantile der F-Verteilung zurück +FISHER = FISHER ## Gibt die Fisher-Transformation zurück +FISHERINV = FISHERINV ## Gibt die Umkehrung der Fisher-Transformation zurück +FORECAST = PROGNOSE ## Gibt einen Wert zurück, der sich aus einem linearen Trend ergibt +FREQUENCY = HÄUFIGKEIT ## Gibt eine Häufigkeitsverteilung als vertikale Matrix zurück +FTEST = FTEST ## Gibt die Teststatistik eines F-Tests zurück +GAMMADIST = GAMMAVERT ## Gibt Wahrscheinlichkeiten einer gammaverteilten Zufallsvariablen zurück +GAMMAINV = GAMMAINV ## Gibt Quantile der Gammaverteilung zurück +GAMMALN = GAMMALN ## Gibt den natürlichen Logarithmus der Gammafunktion zurück, Γ(x) +GEOMEAN = GEOMITTEL ## Gibt das geometrische Mittel zurück +GROWTH = VARIATION ## Gibt Werte zurück, die sich aus einem exponentiellen Trend ergeben +HARMEAN = HARMITTEL ## Gibt das harmonische Mittel zurück +HYPGEOMDIST = HYPGEOMVERT ## Gibt Wahrscheinlichkeiten einer hypergeometrisch-verteilten Zufallsvariablen zurück +INTERCEPT = ACHSENABSCHNITT ## Gibt den Schnittpunkt der Regressionsgeraden zurück +KURT = KURT ## Gibt die Kurtosis (Exzess) einer Datengruppe zurück +LARGE = KGRÖSSTE ## Gibt den k-größten Wert einer Datengruppe zurück +LINEST = RGP ## Gibt die Parameter eines linearen Trends zurück +LOGEST = RKP ## Gibt die Parameter eines exponentiellen Trends zurück +LOGINV = LOGINV ## Gibt Quantile der Lognormalverteilung zurück +LOGNORMDIST = LOGNORMVERT ## Gibt Werte der Verteilungsfunktion einer lognormalverteilten Zufallsvariablen zurück +MAX = MAX ## Gibt den Maximalwert einer Liste mit Argumenten zurück +MAXA = MAXA ## Gibt den Maximalwert einer Liste mit Argumenten zurück, die Zahlen, Text und Wahrheitswerte enthalten +MEDIAN = MEDIAN ## Gibt den Median der angegebenen Zahlen zurück +MIN = MIN ## Gibt den Minimalwert einer Liste mit Argumenten zurück +MINA = MINA ## Gibt den kleinsten Wert einer Liste mit Argumenten zurück, die Zahlen, Text und Wahrheitswerte enthalten +MODE = MODALWERT ## Gibt den am häufigsten vorkommenden Wert in einer Datengruppe zurück +NEGBINOMDIST = NEGBINOMVERT ## Gibt Wahrscheinlichkeiten einer negativen, binominal verteilten Zufallsvariablen zurück +NORMDIST = NORMVERT ## Gibt Wahrscheinlichkeiten einer normal verteilten Zufallsvariablen zurück +NORMINV = NORMINV ## Gibt Quantile der Normalverteilung zurück +NORMSDIST = STANDNORMVERT ## Gibt Werte der Verteilungsfunktion einer standardnormalverteilten Zufallsvariablen zurück +NORMSINV = STANDNORMINV ## Gibt Quantile der Standardnormalverteilung zurück +PEARSON = PEARSON ## Gibt den Pearsonschen Korrelationskoeffizienten zurück +PERCENTILE = QUANTIL ## Gibt das Alpha-Quantil einer Gruppe von Daten zurück +PERCENTRANK = QUANTILSRANG ## Gibt den prozentualen Rang (Alpha) eines Werts in einer Datengruppe zurück +PERMUT = VARIATIONEN ## Gibt die Anzahl der Möglichkeiten zurück, um k Elemente aus einer Menge von n Elementen ohne Zurücklegen zu ziehen +POISSON = POISSON ## Gibt Wahrscheinlichkeiten einer poissonverteilten Zufallsvariablen zurück +PROB = WAHRSCHBEREICH ## Gibt die Wahrscheinlichkeit für ein von zwei Werten eingeschlossenes Intervall zurück +QUARTILE = QUARTILE ## Gibt die Quartile der Datengruppe zurück +RANK = RANG ## Gibt den Rang zurück, den eine Zahl innerhalb einer Liste von Zahlen einnimmt +RSQ = BESTIMMTHEITSMASS ## Gibt das Quadrat des Pearsonschen Korrelationskoeffizienten zurück +SKEW = SCHIEFE ## Gibt die Schiefe einer Verteilung zurück +SLOPE = STEIGUNG ## Gibt die Steigung der Regressionsgeraden zurück +SMALL = KKLEINSTE ## Gibt den k-kleinsten Wert einer Datengruppe zurück +STANDARDIZE = STANDARDISIERUNG ## Gibt den standardisierten Wert zurück +STDEV = STABW ## Schätzt die Standardabweichung ausgehend von einer Stichprobe +STDEVA = STABWA ## Schätzt die Standardabweichung ausgehend von einer Stichprobe, die Zahlen, Text und Wahrheitswerte enthält +STDEVP = STABWN ## Berechnet die Standardabweichung ausgehend von der Grundgesamtheit +STDEVPA = STABWNA ## Berechnet die Standardabweichung ausgehend von der Grundgesamtheit, die Zahlen, Text und Wahrheitswerte enthält +STEYX = STFEHLERYX ## Gibt den Standardfehler der geschätzten y-Werte für alle x-Werte der Regression zurück +TDIST = TVERT ## Gibt Werte der Verteilungsfunktion (1-Alpha) einer (Student) t-verteilten Zufallsvariablen zurück +TINV = TINV ## Gibt Quantile der t-Verteilung zurück +TREND = TREND ## Gibt Werte zurück, die sich aus einem linearen Trend ergeben +TRIMMEAN = GESTUTZTMITTEL ## Gibt den Mittelwert einer Datengruppe zurück, ohne die Randwerte zu berücksichtigen +TTEST = TTEST ## Gibt die Teststatistik eines Student'schen t-Tests zurück +VAR = VARIANZ ## Schätzt die Varianz ausgehend von einer Stichprobe +VARA = VARIANZA ## Schätzt die Varianz ausgehend von einer Stichprobe, die Zahlen, Text und Wahrheitswerte enthält +VARP = VARIANZEN ## Berechnet die Varianz ausgehend von der Grundgesamtheit +VARPA = VARIANZENA ## Berechnet die Varianz ausgehend von der Grundgesamtheit, die Zahlen, Text und Wahrheitswerte enthält +WEIBULL = WEIBULL ## Gibt Wahrscheinlichkeiten einer weibullverteilten Zufallsvariablen zurück +ZTEST = GTEST ## Gibt den einseitigen Wahrscheinlichkeitswert für einen Gausstest (Normalverteilung) zurück + + +## +## Text functions Textfunktionen +## +ASC = ASC ## Konvertiert DB-Text in einer Zeichenfolge (lateinische Buchstaben oder Katakana) in SB-Text +BAHTTEXT = BAHTTEXT ## Wandelt eine Zahl in Text im Währungsformat ß (Baht) um +CHAR = ZEICHEN ## Gibt das der Codezahl entsprechende Zeichen zurück +CLEAN = SÄUBERN ## Löscht alle nicht druckbaren Zeichen aus einem Text +CODE = CODE ## Gibt die Codezahl des ersten Zeichens in einem Text zurück +CONCATENATE = VERKETTEN ## Verknüpft mehrere Textelemente zu einem Textelement +DOLLAR = DM ## Wandelt eine Zahl in Text im Währungsformat € (Euro) um +EXACT = IDENTISCH ## Prüft, ob zwei Textwerte identisch sind +FIND = FINDEN ## Sucht nach einem Textwert, der in einem anderen Textwert enthalten ist (Groß-/Kleinschreibung wird unterschieden) +FINDB = FINDENB ## Sucht nach einem Textwert, der in einem anderen Textwert enthalten ist (Groß-/Kleinschreibung wird unterschieden) +FIXED = FEST ## Formatiert eine Zahl als Text mit einer festen Anzahl von Dezimalstellen +JIS = JIS ## Konvertiert SB-Text in einer Zeichenfolge (lateinische Buchstaben oder Katakana) in DB-Text +LEFT = LINKS ## Gibt die Zeichen ganz links in einem Textwert zurück +LEFTB = LINKSB ## Gibt die Zeichen ganz links in einem Textwert zurück +LEN = LÄNGE ## Gibt die Anzahl der Zeichen in einer Zeichenfolge zurück +LENB = LÄNGEB ## Gibt die Anzahl der Zeichen in einer Zeichenfolge zurück +LOWER = KLEIN ## Wandelt Text in Kleinbuchstaben um +MID = TEIL ## Gibt eine bestimmte Anzahl Zeichen aus einer Zeichenfolge ab der von Ihnen angegebenen Stelle zurück +MIDB = TEILB ## Gibt eine bestimmte Anzahl Zeichen aus einer Zeichenfolge ab der von Ihnen angegebenen Stelle zurück +PHONETIC = PHONETIC ## Extrahiert die phonetischen (Furigana-)Zeichen aus einer Textzeichenfolge +PROPER = GROSS2 ## Wandelt den ersten Buchstaben aller Wörter eines Textwerts in Großbuchstaben um +REPLACE = ERSETZEN ## Ersetzt Zeichen in Text +REPLACEB = ERSETZENB ## Ersetzt Zeichen in Text +REPT = WIEDERHOLEN ## Wiederholt einen Text so oft wie angegeben +RIGHT = RECHTS ## Gibt die Zeichen ganz rechts in einem Textwert zurück +RIGHTB = RECHTSB ## Gibt die Zeichen ganz rechts in einem Textwert zurück +SEARCH = SUCHEN ## Sucht nach einem Textwert, der in einem anderen Textwert enthalten ist (Groß-/Kleinschreibung wird nicht unterschieden) +SEARCHB = SUCHENB ## Sucht nach einem Textwert, der in einem anderen Textwert enthalten ist (Groß-/Kleinschreibung wird nicht unterschieden) +SUBSTITUTE = WECHSELN ## Ersetzt in einer Zeichenfolge neuen Text gegen alten +T = T ## Wandelt die zugehörigen Argumente in Text um +TEXT = TEXT ## Formatiert eine Zahl und wandelt sie in Text um +TRIM = GLÄTTEN ## Entfernt Leerzeichen aus Text +UPPER = GROSS ## Wandelt Text in Großbuchstaben um +VALUE = WERT ## Wandelt ein Textargument in eine Zahl um diff --git a/PHPExcel/locale/en/uk/config b/PHPExcel/locale/en/uk/config new file mode 100644 index 0000000..dfcc63b --- /dev/null +++ b/PHPExcel/locale/en/uk/config @@ -0,0 +1,32 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +## +## (For future use) +## +currencySymbol = £ diff --git a/PHPExcel/locale/es/config b/PHPExcel/locale/es/config new file mode 100644 index 0000000..0b11eb7 --- /dev/null +++ b/PHPExcel/locale/es/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = $ ## I'm surprised that the Excel Documentation suggests $ rather than € + + +## +## Excel Error Codes (For future use) +## +NULL = #¡NULO! +DIV0 = #¡DIV/0! +VALUE = #¡VALOR! +REF = #¡REF! +NAME = #¿NOMBRE? +NUM = #¡NÚM! +NA = #N/A diff --git a/PHPExcel/locale/es/functions b/PHPExcel/locale/es/functions new file mode 100644 index 0000000..f6e6fd2 --- /dev/null +++ b/PHPExcel/locale/es/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Funciones de complementos y automatización +## +GETPIVOTDATA = IMPORTARDATOSDINAMICOS ## Devuelve los datos almacenados en un informe de tabla dinámica. + + +## +## Cube functions Funciones de cubo +## +CUBEKPIMEMBER = MIEMBROKPICUBO ## Devuelve un nombre, propiedad y medida de indicador de rendimiento clave (KPI) y muestra el nombre y la propiedad en la celda. Un KPI es una medida cuantificable, como los beneficios brutos mensuales o la facturación trimestral por empleado, que se usa para supervisar el rendimiento de una organización. +CUBEMEMBER = MIEMBROCUBO ## Devuelve un miembro o tupla en una jerarquía de cubo. Se usa para validar la existencia del miembro o la tupla en el cubo. +CUBEMEMBERPROPERTY = PROPIEDADMIEMBROCUBO ## Devuelve el valor de una propiedad de miembro del cubo Se usa para validar la existencia de un nombre de miembro en el cubo y para devolver la propiedad especificada para este miembro. +CUBERANKEDMEMBER = MIEMBRORANGOCUBO ## Devuelve el miembro n, o clasificado, de un conjunto. Se usa para devolver uno o más elementos de un conjunto, por ejemplo, el representante con mejores ventas o los diez mejores alumnos. +CUBESET = CONJUNTOCUBO ## Define un conjunto calculado de miembros o tuplas mediante el envío de una expresión de conjunto al cubo en el servidor, lo que crea el conjunto y, después, devuelve dicho conjunto a Microsoft Office Excel. +CUBESETCOUNT = RECUENTOCONJUNTOCUBO ## Devuelve el número de elementos de un conjunto. +CUBEVALUE = VALORCUBO ## Devuelve un valor agregado de un cubo. + + +## +## Database functions Funciones de base de datos +## +DAVERAGE = BDPROMEDIO ## Devuelve el promedio de las entradas seleccionadas en la base de datos. +DCOUNT = BDCONTAR ## Cuenta el número de celdas que contienen números en una base de datos. +DCOUNTA = BDCONTARA ## Cuenta el número de celdas no vacías en una base de datos. +DGET = BDEXTRAER ## Extrae de una base de datos un único registro que cumple los criterios especificados. +DMAX = BDMAX ## Devuelve el valor máximo de las entradas seleccionadas de la base de datos. +DMIN = BDMIN ## Devuelve el valor mínimo de las entradas seleccionadas de la base de datos. +DPRODUCT = BDPRODUCTO ## Multiplica los valores de un campo concreto de registros de una base de datos que cumplen los criterios especificados. +DSTDEV = BDDESVEST ## Calcula la desviación estándar a partir de una muestra de entradas seleccionadas en la base de datos. +DSTDEVP = BDDESVESTP ## Calcula la desviación estándar en función de la población total de las entradas seleccionadas de la base de datos. +DSUM = BDSUMA ## Suma los números de la columna de campo de los registros de la base de datos que cumplen los criterios. +DVAR = BDVAR ## Calcula la varianza a partir de una muestra de entradas seleccionadas de la base de datos. +DVARP = BDVARP ## Calcula la varianza a partir de la población total de entradas seleccionadas de la base de datos. + + +## +## Date and time functions Funciones de fecha y hora +## +DATE = FECHA ## Devuelve el número de serie correspondiente a una fecha determinada. +DATEVALUE = FECHANUMERO ## Convierte una fecha con formato de texto en un valor de número de serie. +DAY = DIA ## Convierte un número de serie en un valor de día del mes. +DAYS360 = DIAS360 ## Calcula el número de días entre dos fechas a partir de un año de 360 días. +EDATE = FECHA.MES ## Devuelve el número de serie de la fecha equivalente al número indicado de meses anteriores o posteriores a la fecha inicial. +EOMONTH = FIN.MES ## Devuelve el número de serie correspondiente al último día del mes anterior o posterior a un número de meses especificado. +HOUR = HORA ## Convierte un número de serie en un valor de hora. +MINUTE = MINUTO ## Convierte un número de serie en un valor de minuto. +MONTH = MES ## Convierte un número de serie en un valor de mes. +NETWORKDAYS = DIAS.LAB ## Devuelve el número de todos los días laborables existentes entre dos fechas. +NOW = AHORA ## Devuelve el número de serie correspondiente a la fecha y hora actuales. +SECOND = SEGUNDO ## Convierte un número de serie en un valor de segundo. +TIME = HORA ## Devuelve el número de serie correspondiente a una hora determinada. +TIMEVALUE = HORANUMERO ## Convierte una hora con formato de texto en un valor de número de serie. +TODAY = HOY ## Devuelve el número de serie correspondiente al día actual. +WEEKDAY = DIASEM ## Convierte un número de serie en un valor de día de la semana. +WEEKNUM = NUM.DE.SEMANA ## Convierte un número de serie en un número que representa el lugar numérico correspondiente a una semana de un año. +WORKDAY = DIA.LAB ## Devuelve el número de serie de la fecha que tiene lugar antes o después de un número determinado de días laborables. +YEAR = AÑO ## Convierte un número de serie en un valor de año. +YEARFRAC = FRAC.AÑO ## Devuelve la fracción de año que representa el número total de días existentes entre el valor de fecha_inicial y el de fecha_final. + + +## +## Engineering functions Funciones de ingeniería +## +BESSELI = BESSELI ## Devuelve la función Bessel In(x) modificada. +BESSELJ = BESSELJ ## Devuelve la función Bessel Jn(x). +BESSELK = BESSELK ## Devuelve la función Bessel Kn(x) modificada. +BESSELY = BESSELY ## Devuelve la función Bessel Yn(x). +BIN2DEC = BIN.A.DEC ## Convierte un número binario en decimal. +BIN2HEX = BIN.A.HEX ## Convierte un número binario en hexadecimal. +BIN2OCT = BIN.A.OCT ## Convierte un número binario en octal. +COMPLEX = COMPLEJO ## Convierte coeficientes reales e imaginarios en un número complejo. +CONVERT = CONVERTIR ## Convierte un número de un sistema de medida a otro. +DEC2BIN = DEC.A.BIN ## Convierte un número decimal en binario. +DEC2HEX = DEC.A.HEX ## Convierte un número decimal en hexadecimal. +DEC2OCT = DEC.A.OCT ## Convierte un número decimal en octal. +DELTA = DELTA ## Comprueba si dos valores son iguales. +ERF = FUN.ERROR ## Devuelve la función de error. +ERFC = FUN.ERROR.COMPL ## Devuelve la función de error complementario. +GESTEP = MAYOR.O.IGUAL ## Comprueba si un número es mayor que un valor de umbral. +HEX2BIN = HEX.A.BIN ## Convierte un número hexadecimal en binario. +HEX2DEC = HEX.A.DEC ## Convierte un número hexadecimal en decimal. +HEX2OCT = HEX.A.OCT ## Convierte un número hexadecimal en octal. +IMABS = IM.ABS ## Devuelve el valor absoluto (módulo) de un número complejo. +IMAGINARY = IMAGINARIO ## Devuelve el coeficiente imaginario de un número complejo. +IMARGUMENT = IM.ANGULO ## Devuelve el argumento theta, un ángulo expresado en radianes. +IMCONJUGATE = IM.CONJUGADA ## Devuelve la conjugada compleja de un número complejo. +IMCOS = IM.COS ## Devuelve el coseno de un número complejo. +IMDIV = IM.DIV ## Devuelve el cociente de dos números complejos. +IMEXP = IM.EXP ## Devuelve el valor exponencial de un número complejo. +IMLN = IM.LN ## Devuelve el logaritmo natural (neperiano) de un número complejo. +IMLOG10 = IM.LOG10 ## Devuelve el logaritmo en base 10 de un número complejo. +IMLOG2 = IM.LOG2 ## Devuelve el logaritmo en base 2 de un número complejo. +IMPOWER = IM.POT ## Devuelve un número complejo elevado a una potencia entera. +IMPRODUCT = IM.PRODUCT ## Devuelve el producto de números complejos. +IMREAL = IM.REAL ## Devuelve el coeficiente real de un número complejo. +IMSIN = IM.SENO ## Devuelve el seno de un número complejo. +IMSQRT = IM.RAIZ2 ## Devuelve la raíz cuadrada de un número complejo. +IMSUB = IM.SUSTR ## Devuelve la diferencia entre dos números complejos. +IMSUM = IM.SUM ## Devuelve la suma de números complejos. +OCT2BIN = OCT.A.BIN ## Convierte un número octal en binario. +OCT2DEC = OCT.A.DEC ## Convierte un número octal en decimal. +OCT2HEX = OCT.A.HEX ## Convierte un número octal en hexadecimal. + + +## +## Financial functions Funciones financieras +## +ACCRINT = INT.ACUM ## Devuelve el interés acumulado de un valor bursátil con pagos de interés periódicos. +ACCRINTM = INT.ACUM.V ## Devuelve el interés acumulado de un valor bursátil con pagos de interés al vencimiento. +AMORDEGRC = AMORTIZ.PROGRE ## Devuelve la amortización de cada período contable mediante el uso de un coeficiente de amortización. +AMORLINC = AMORTIZ.LIN ## Devuelve la amortización de cada uno de los períodos contables. +COUPDAYBS = CUPON.DIAS.L1 ## Devuelve el número de días desde el principio del período de un cupón hasta la fecha de liquidación. +COUPDAYS = CUPON.DIAS ## Devuelve el número de días del período (entre dos cupones) donde se encuentra la fecha de liquidación. +COUPDAYSNC = CUPON.DIAS.L2 ## Devuelve el número de días desde la fecha de liquidación hasta la fecha del próximo cupón. +COUPNCD = CUPON.FECHA.L2 ## Devuelve la fecha del próximo cupón después de la fecha de liquidación. +COUPNUM = CUPON.NUM ## Devuelve el número de pagos de cupón entre la fecha de liquidación y la fecha de vencimiento. +COUPPCD = CUPON.FECHA.L1 ## Devuelve la fecha de cupón anterior a la fecha de liquidación. +CUMIPMT = PAGO.INT.ENTRE ## Devuelve el interés acumulado pagado entre dos períodos. +CUMPRINC = PAGO.PRINC.ENTRE ## Devuelve el capital acumulado pagado de un préstamo entre dos períodos. +DB = DB ## Devuelve la amortización de un bien durante un período específico a través del método de amortización de saldo fijo. +DDB = DDB ## Devuelve la amortización de un bien durante un período específico a través del método de amortización por doble disminución de saldo u otro método que se especifique. +DISC = TASA.DESC ## Devuelve la tasa de descuento de un valor bursátil. +DOLLARDE = MONEDA.DEC ## Convierte una cotización de un valor bursátil expresada en forma fraccionaria en una cotización de un valor bursátil expresada en forma decimal. +DOLLARFR = MONEDA.FRAC ## Convierte una cotización de un valor bursátil expresada en forma decimal en una cotización de un valor bursátil expresada en forma fraccionaria. +DURATION = DURACION ## Devuelve la duración anual de un valor bursátil con pagos de interés periódico. +EFFECT = INT.EFECTIVO ## Devuelve la tasa de interés anual efectiva. +FV = VF ## Devuelve el valor futuro de una inversión. +FVSCHEDULE = VF.PLAN ## Devuelve el valor futuro de un capital inicial después de aplicar una serie de tasas de interés compuesto. +INTRATE = TASA.INT ## Devuelve la tasa de interés para la inversión total de un valor bursátil. +IPMT = PAGOINT ## Devuelve el pago de intereses de una inversión durante un período determinado. +IRR = TIR ## Devuelve la tasa interna de retorno para una serie de flujos de efectivo periódicos. +ISPMT = INT.PAGO.DIR ## Calcula el interés pagado durante un período específico de una inversión. +MDURATION = DURACION.MODIF ## Devuelve la duración de Macauley modificada de un valor bursátil con un valor nominal supuesto de 100 $. +MIRR = TIRM ## Devuelve la tasa interna de retorno donde se financian flujos de efectivo positivos y negativos a tasas diferentes. +NOMINAL = TASA.NOMINAL ## Devuelve la tasa nominal de interés anual. +NPER = NPER ## Devuelve el número de períodos de una inversión. +NPV = VNA ## Devuelve el valor neto actual de una inversión en función de una serie de flujos periódicos de efectivo y una tasa de descuento. +ODDFPRICE = PRECIO.PER.IRREGULAR.1 ## Devuelve el precio por un valor nominal de 100 $ de un valor bursátil con un primer período impar. +ODDFYIELD = RENDTO.PER.IRREGULAR.1 ## Devuelve el rendimiento de un valor bursátil con un primer período impar. +ODDLPRICE = PRECIO.PER.IRREGULAR.2 ## Devuelve el precio por un valor nominal de 100 $ de un valor bursátil con un último período impar. +ODDLYIELD = RENDTO.PER.IRREGULAR.2 ## Devuelve el rendimiento de un valor bursátil con un último período impar. +PMT = PAGO ## Devuelve el pago periódico de una anualidad. +PPMT = PAGOPRIN ## Devuelve el pago de capital de una inversión durante un período determinado. +PRICE = PRECIO ## Devuelve el precio por un valor nominal de 100 $ de un valor bursátil que paga una tasa de interés periódico. +PRICEDISC = PRECIO.DESCUENTO ## Devuelve el precio por un valor nominal de 100 $ de un valor bursátil con descuento. +PRICEMAT = PRECIO.VENCIMIENTO ## Devuelve el precio por un valor nominal de 100 $ de un valor bursátil que paga interés a su vencimiento. +PV = VALACT ## Devuelve el valor actual de una inversión. +RATE = TASA ## Devuelve la tasa de interés por período de una anualidad. +RECEIVED = CANTIDAD.RECIBIDA ## Devuelve la cantidad recibida al vencimiento de un valor bursátil completamente invertido. +SLN = SLN ## Devuelve la amortización por método directo de un bien en un período dado. +SYD = SYD ## Devuelve la amortización por suma de dígitos de los años de un bien durante un período especificado. +TBILLEQ = LETRA.DE.TES.EQV.A.BONO ## Devuelve el rendimiento de un bono equivalente a una letra del Tesoro (de EE.UU.) +TBILLPRICE = LETRA.DE.TES.PRECIO ## Devuelve el precio por un valor nominal de 100 $ de una letra del Tesoro (de EE.UU.) +TBILLYIELD = LETRA.DE.TES.RENDTO ## Devuelve el rendimiento de una letra del Tesoro (de EE.UU.) +VDB = DVS ## Devuelve la amortización de un bien durante un período específico o parcial a través del método de cálculo del saldo en disminución. +XIRR = TIR.NO.PER ## Devuelve la tasa interna de retorno para un flujo de efectivo que no es necesariamente periódico. +XNPV = VNA.NO.PER ## Devuelve el valor neto actual para un flujo de efectivo que no es necesariamente periódico. +YIELD = RENDTO ## Devuelve el rendimiento de un valor bursátil que paga intereses periódicos. +YIELDDISC = RENDTO.DESC ## Devuelve el rendimiento anual de un valor bursátil con descuento; por ejemplo, una letra del Tesoro (de EE.UU.) +YIELDMAT = RENDTO.VENCTO ## Devuelve el rendimiento anual de un valor bursátil que paga intereses al vencimiento. + + +## +## Information functions Funciones de información +## +CELL = CELDA ## Devuelve información acerca del formato, la ubicación o el contenido de una celda. +ERROR.TYPE = TIPO.DE.ERROR ## Devuelve un número que corresponde a un tipo de error. +INFO = INFO ## Devuelve información acerca del entorno operativo en uso. +ISBLANK = ESBLANCO ## Devuelve VERDADERO si el valor está en blanco. +ISERR = ESERR ## Devuelve VERDADERO si el valor es cualquier valor de error excepto #N/A. +ISERROR = ESERROR ## Devuelve VERDADERO si el valor es cualquier valor de error. +ISEVEN = ES.PAR ## Devuelve VERDADERO si el número es par. +ISLOGICAL = ESLOGICO ## Devuelve VERDADERO si el valor es un valor lógico. +ISNA = ESNOD ## Devuelve VERDADERO si el valor es el valor de error #N/A. +ISNONTEXT = ESNOTEXTO ## Devuelve VERDADERO si el valor no es texto. +ISNUMBER = ESNUMERO ## Devuelve VERDADERO si el valor es un número. +ISODD = ES.IMPAR ## Devuelve VERDADERO si el número es impar. +ISREF = ESREF ## Devuelve VERDADERO si el valor es una referencia. +ISTEXT = ESTEXTO ## Devuelve VERDADERO si el valor es texto. +N = N ## Devuelve un valor convertido en un número. +NA = ND ## Devuelve el valor de error #N/A. +TYPE = TIPO ## Devuelve un número que indica el tipo de datos de un valor. + + +## +## Logical functions Funciones lógicas +## +AND = Y ## Devuelve VERDADERO si todos sus argumentos son VERDADERO. +FALSE = FALSO ## Devuelve el valor lógico FALSO. +IF = SI ## Especifica una prueba lógica que realizar. +IFERROR = SI.ERROR ## Devuelve un valor que se especifica si una fórmula lo evalúa como un error; de lo contrario, devuelve el resultado de la fórmula. +NOT = NO ## Invierte el valor lógico del argumento. +OR = O ## Devuelve VERDADERO si cualquier argumento es VERDADERO. +TRUE = VERDADERO ## Devuelve el valor lógico VERDADERO. + + +## +## Lookup and reference functions Funciones de búsqueda y referencia +## +ADDRESS = DIRECCION ## Devuelve una referencia como texto a una sola celda de una hoja de cálculo. +AREAS = AREAS ## Devuelve el número de áreas de una referencia. +CHOOSE = ELEGIR ## Elige un valor de una lista de valores. +COLUMN = COLUMNA ## Devuelve el número de columna de una referencia. +COLUMNS = COLUMNAS ## Devuelve el número de columnas de una referencia. +HLOOKUP = BUSCARH ## Busca en la fila superior de una matriz y devuelve el valor de la celda indicada. +HYPERLINK = HIPERVINCULO ## Crea un acceso directo o un salto que abre un documento almacenado en un servidor de red, en una intranet o en Internet. +INDEX = INDICE ## Usa un índice para elegir un valor de una referencia o matriz. +INDIRECT = INDIRECTO ## Devuelve una referencia indicada por un valor de texto. +LOOKUP = BUSCAR ## Busca valores de un vector o una matriz. +MATCH = COINCIDIR ## Busca valores de una referencia o matriz. +OFFSET = DESREF ## Devuelve un desplazamiento de referencia respecto a una referencia dada. +ROW = FILA ## Devuelve el número de fila de una referencia. +ROWS = FILAS ## Devuelve el número de filas de una referencia. +RTD = RDTR ## Recupera datos en tiempo real desde un programa compatible con la automatización COM (automatización: modo de trabajar con los objetos de una aplicación desde otra aplicación o herramienta de entorno. La automatización, antes denominada automatización OLE, es un estándar de la industria y una función del Modelo de objetos componentes (COM).). +TRANSPOSE = TRANSPONER ## Devuelve la transposición de una matriz. +VLOOKUP = BUSCARV ## Busca en la primera columna de una matriz y se mueve en horizontal por la fila para devolver el valor de una celda. + + +## +## Math and trigonometry functions Funciones matemáticas y trigonométricas +## +ABS = ABS ## Devuelve el valor absoluto de un número. +ACOS = ACOS ## Devuelve el arcocoseno de un número. +ACOSH = ACOSH ## Devuelve el coseno hiperbólico inverso de un número. +ASIN = ASENO ## Devuelve el arcoseno de un número. +ASINH = ASENOH ## Devuelve el seno hiperbólico inverso de un número. +ATAN = ATAN ## Devuelve la arcotangente de un número. +ATAN2 = ATAN2 ## Devuelve la arcotangente de las coordenadas "x" e "y". +ATANH = ATANH ## Devuelve la tangente hiperbólica inversa de un número. +CEILING = MULTIPLO.SUPERIOR ## Redondea un número al entero más próximo o al múltiplo significativo más cercano. +COMBIN = COMBINAT ## Devuelve el número de combinaciones para un número determinado de objetos. +COS = COS ## Devuelve el coseno de un número. +COSH = COSH ## Devuelve el coseno hiperbólico de un número. +DEGREES = GRADOS ## Convierte radianes en grados. +EVEN = REDONDEA.PAR ## Redondea un número hasta el entero par más próximo. +EXP = EXP ## Devuelve e elevado a la potencia de un número dado. +FACT = FACT ## Devuelve el factorial de un número. +FACTDOUBLE = FACT.DOBLE ## Devuelve el factorial doble de un número. +FLOOR = MULTIPLO.INFERIOR ## Redondea un número hacia abajo, en dirección hacia cero. +GCD = M.C.D ## Devuelve el máximo común divisor. +INT = ENTERO ## Redondea un número hacia abajo hasta el entero más próximo. +LCM = M.C.M ## Devuelve el mínimo común múltiplo. +LN = LN ## Devuelve el logaritmo natural (neperiano) de un número. +LOG = LOG ## Devuelve el logaritmo de un número en una base especificada. +LOG10 = LOG10 ## Devuelve el logaritmo en base 10 de un número. +MDETERM = MDETERM ## Devuelve la determinante matricial de una matriz. +MINVERSE = MINVERSA ## Devuelve la matriz inversa de una matriz. +MMULT = MMULT ## Devuelve el producto de matriz de dos matrices. +MOD = RESIDUO ## Devuelve el resto de la división. +MROUND = REDOND.MULT ## Devuelve un número redondeado al múltiplo deseado. +MULTINOMIAL = MULTINOMIAL ## Devuelve el polinomio de un conjunto de números. +ODD = REDONDEA.IMPAR ## Redondea un número hacia arriba hasta el entero impar más próximo. +PI = PI ## Devuelve el valor de pi. +POWER = POTENCIA ## Devuelve el resultado de elevar un número a una potencia. +PRODUCT = PRODUCTO ## Multiplica sus argumentos. +QUOTIENT = COCIENTE ## Devuelve la parte entera de una división. +RADIANS = RADIANES ## Convierte grados en radianes. +RAND = ALEATORIO ## Devuelve un número aleatorio entre 0 y 1. +RANDBETWEEN = ALEATORIO.ENTRE ## Devuelve un número aleatorio entre los números que especifique. +ROMAN = NUMERO.ROMANO ## Convierte un número arábigo en número romano, con formato de texto. +ROUND = REDONDEAR ## Redondea un número al número de decimales especificado. +ROUNDDOWN = REDONDEAR.MENOS ## Redondea un número hacia abajo, en dirección hacia cero. +ROUNDUP = REDONDEAR.MAS ## Redondea un número hacia arriba, en dirección contraria a cero. +SERIESSUM = SUMA.SERIES ## Devuelve la suma de una serie de potencias en función de la fórmula. +SIGN = SIGNO ## Devuelve el signo de un número. +SIN = SENO ## Devuelve el seno de un ángulo determinado. +SINH = SENOH ## Devuelve el seno hiperbólico de un número. +SQRT = RAIZ ## Devuelve la raíz cuadrada positiva de un número. +SQRTPI = RAIZ2PI ## Devuelve la raíz cuadrada de un número multiplicado por PI (número * pi). +SUBTOTAL = SUBTOTALES ## Devuelve un subtotal en una lista o base de datos. +SUM = SUMA ## Suma sus argumentos. +SUMIF = SUMAR.SI ## Suma las celdas especificadas que cumplen unos criterios determinados. +SUMIFS = SUMAR.SI.CONJUNTO ## Suma las celdas de un rango que cumplen varios criterios. +SUMPRODUCT = SUMAPRODUCTO ## Devuelve la suma de los productos de los correspondientes componentes de matriz. +SUMSQ = SUMA.CUADRADOS ## Devuelve la suma de los cuadrados de los argumentos. +SUMX2MY2 = SUMAX2MENOSY2 ## Devuelve la suma de la diferencia de los cuadrados de los valores correspondientes de dos matrices. +SUMX2PY2 = SUMAX2MASY2 ## Devuelve la suma de la suma de los cuadrados de los valores correspondientes de dos matrices. +SUMXMY2 = SUMAXMENOSY2 ## Devuelve la suma de los cuadrados de las diferencias de los valores correspondientes de dos matrices. +TAN = TAN ## Devuelve la tangente de un número. +TANH = TANH ## Devuelve la tangente hiperbólica de un número. +TRUNC = TRUNCAR ## Trunca un número a un entero. + + +## +## Statistical functions Funciones estadísticas +## +AVEDEV = DESVPROM ## Devuelve el promedio de las desviaciones absolutas de la media de los puntos de datos. +AVERAGE = PROMEDIO ## Devuelve el promedio de sus argumentos. +AVERAGEA = PROMEDIOA ## Devuelve el promedio de sus argumentos, incluidos números, texto y valores lógicos. +AVERAGEIF = PROMEDIO.SI ## Devuelve el promedio (media aritmética) de todas las celdas de un rango que cumplen unos criterios determinados. +AVERAGEIFS = PROMEDIO.SI.CONJUNTO ## Devuelve el promedio (media aritmética) de todas las celdas que cumplen múltiples criterios. +BETADIST = DISTR.BETA ## Devuelve la función de distribución beta acumulativa. +BETAINV = DISTR.BETA.INV ## Devuelve la función inversa de la función de distribución acumulativa de una distribución beta especificada. +BINOMDIST = DISTR.BINOM ## Devuelve la probabilidad de una variable aleatoria discreta siguiendo una distribución binomial. +CHIDIST = DISTR.CHI ## Devuelve la probabilidad de una variable aleatoria continua siguiendo una distribución chi cuadrado de una sola cola. +CHIINV = PRUEBA.CHI.INV ## Devuelve la función inversa de la probabilidad de una variable aleatoria continua siguiendo una distribución chi cuadrado de una sola cola. +CHITEST = PRUEBA.CHI ## Devuelve la prueba de independencia. +CONFIDENCE = INTERVALO.CONFIANZA ## Devuelve el intervalo de confianza de la media de una población. +CORREL = COEF.DE.CORREL ## Devuelve el coeficiente de correlación entre dos conjuntos de datos. +COUNT = CONTAR ## Cuenta cuántos números hay en la lista de argumentos. +COUNTA = CONTARA ## Cuenta cuántos valores hay en la lista de argumentos. +COUNTBLANK = CONTAR.BLANCO ## Cuenta el número de celdas en blanco de un rango. +COUNTIF = CONTAR.SI ## Cuenta el número de celdas, dentro del rango, que cumplen el criterio especificado. +COUNTIFS = CONTAR.SI.CONJUNTO ## Cuenta el número de celdas, dentro del rango, que cumplen varios criterios. +COVAR = COVAR ## Devuelve la covarianza, que es el promedio de los productos de las desviaciones para cada pareja de puntos de datos. +CRITBINOM = BINOM.CRIT ## Devuelve el menor valor cuya distribución binomial acumulativa es menor o igual a un valor de criterio. +DEVSQ = DESVIA2 ## Devuelve la suma de los cuadrados de las desviaciones. +EXPONDIST = DISTR.EXP ## Devuelve la distribución exponencial. +FDIST = DISTR.F ## Devuelve la distribución de probabilidad F. +FINV = DISTR.F.INV ## Devuelve la función inversa de la distribución de probabilidad F. +FISHER = FISHER ## Devuelve la transformación Fisher. +FISHERINV = PRUEBA.FISHER.INV ## Devuelve la función inversa de la transformación Fisher. +FORECAST = PRONOSTICO ## Devuelve un valor en una tendencia lineal. +FREQUENCY = FRECUENCIA ## Devuelve una distribución de frecuencia como una matriz vertical. +FTEST = PRUEBA.F ## Devuelve el resultado de una prueba F. +GAMMADIST = DISTR.GAMMA ## Devuelve la distribución gamma. +GAMMAINV = DISTR.GAMMA.INV ## Devuelve la función inversa de la distribución gamma acumulativa. +GAMMALN = GAMMA.LN ## Devuelve el logaritmo natural de la función gamma, G(x). +GEOMEAN = MEDIA.GEOM ## Devuelve la media geométrica. +GROWTH = CRECIMIENTO ## Devuelve valores en una tendencia exponencial. +HARMEAN = MEDIA.ARMO ## Devuelve la media armónica. +HYPGEOMDIST = DISTR.HIPERGEOM ## Devuelve la distribución hipergeométrica. +INTERCEPT = INTERSECCION.EJE ## Devuelve la intersección de la línea de regresión lineal. +KURT = CURTOSIS ## Devuelve la curtosis de un conjunto de datos. +LARGE = K.ESIMO.MAYOR ## Devuelve el k-ésimo mayor valor de un conjunto de datos. +LINEST = ESTIMACION.LINEAL ## Devuelve los parámetros de una tendencia lineal. +LOGEST = ESTIMACION.LOGARITMICA ## Devuelve los parámetros de una tendencia exponencial. +LOGINV = DISTR.LOG.INV ## Devuelve la función inversa de la distribución logarítmico-normal. +LOGNORMDIST = DISTR.LOG.NORM ## Devuelve la distribución logarítmico-normal acumulativa. +MAX = MAX ## Devuelve el valor máximo de una lista de argumentos. +MAXA = MAXA ## Devuelve el valor máximo de una lista de argumentos, incluidos números, texto y valores lógicos. +MEDIAN = MEDIANA ## Devuelve la mediana de los números dados. +MIN = MIN ## Devuelve el valor mínimo de una lista de argumentos. +MINA = MINA ## Devuelve el valor mínimo de una lista de argumentos, incluidos números, texto y valores lógicos. +MODE = MODA ## Devuelve el valor más común de un conjunto de datos. +NEGBINOMDIST = NEGBINOMDIST ## Devuelve la distribución binomial negativa. +NORMDIST = DISTR.NORM ## Devuelve la distribución normal acumulativa. +NORMINV = DISTR.NORM.INV ## Devuelve la función inversa de la distribución normal acumulativa. +NORMSDIST = DISTR.NORM.ESTAND ## Devuelve la distribución normal estándar acumulativa. +NORMSINV = DISTR.NORM.ESTAND.INV ## Devuelve la función inversa de la distribución normal estándar acumulativa. +PEARSON = PEARSON ## Devuelve el coeficiente de momento de correlación de producto Pearson. +PERCENTILE = PERCENTIL ## Devuelve el k-ésimo percentil de los valores de un rango. +PERCENTRANK = RANGO.PERCENTIL ## Devuelve el rango porcentual de un valor de un conjunto de datos. +PERMUT = PERMUTACIONES ## Devuelve el número de permutaciones de un número determinado de objetos. +POISSON = POISSON ## Devuelve la distribución de Poisson. +PROB = PROBABILIDAD ## Devuelve la probabilidad de que los valores de un rango se encuentren entre dos límites. +QUARTILE = CUARTIL ## Devuelve el cuartil de un conjunto de datos. +RANK = JERARQUIA ## Devuelve la jerarquía de un número en una lista de números. +RSQ = COEFICIENTE.R2 ## Devuelve el cuadrado del coeficiente de momento de correlación de producto Pearson. +SKEW = COEFICIENTE.ASIMETRIA ## Devuelve la asimetría de una distribución. +SLOPE = PENDIENTE ## Devuelve la pendiente de la línea de regresión lineal. +SMALL = K.ESIMO.MENOR ## Devuelve el k-ésimo menor valor de un conjunto de datos. +STANDARDIZE = NORMALIZACION ## Devuelve un valor normalizado. +STDEV = DESVEST ## Calcula la desviación estándar a partir de una muestra. +STDEVA = DESVESTA ## Calcula la desviación estándar a partir de una muestra, incluidos números, texto y valores lógicos. +STDEVP = DESVESTP ## Calcula la desviación estándar en función de toda la población. +STDEVPA = DESVESTPA ## Calcula la desviación estándar en función de toda la población, incluidos números, texto y valores lógicos. +STEYX = ERROR.TIPICO.XY ## Devuelve el error estándar del valor de "y" previsto para cada "x" de la regresión. +TDIST = DISTR.T ## Devuelve la distribución de t de Student. +TINV = DISTR.T.INV ## Devuelve la función inversa de la distribución de t de Student. +TREND = TENDENCIA ## Devuelve valores en una tendencia lineal. +TRIMMEAN = MEDIA.ACOTADA ## Devuelve la media del interior de un conjunto de datos. +TTEST = PRUEBA.T ## Devuelve la probabilidad asociada a una prueba t de Student. +VAR = VAR ## Calcula la varianza en función de una muestra. +VARA = VARA ## Calcula la varianza en función de una muestra, incluidos números, texto y valores lógicos. +VARP = VARP ## Calcula la varianza en función de toda la población. +VARPA = VARPA ## Calcula la varianza en función de toda la población, incluidos números, texto y valores lógicos. +WEIBULL = DIST.WEIBULL ## Devuelve la distribución de Weibull. +ZTEST = PRUEBA.Z ## Devuelve el valor de una probabilidad de una cola de una prueba z. + + +## +## Text functions Funciones de texto +## +ASC = ASC ## Convierte las letras inglesas o katakana de ancho completo (de dos bytes) dentro de una cadena de caracteres en caracteres de ancho medio (de un byte). +BAHTTEXT = TEXTOBAHT ## Convierte un número en texto, con el formato de moneda ß (Baht). +CHAR = CARACTER ## Devuelve el carácter especificado por el número de código. +CLEAN = LIMPIAR ## Quita del texto todos los caracteres no imprimibles. +CODE = CODIGO ## Devuelve un código numérico del primer carácter de una cadena de texto. +CONCATENATE = CONCATENAR ## Concatena varios elementos de texto en uno solo. +DOLLAR = MONEDA ## Convierte un número en texto, con el formato de moneda $ (dólar). +EXACT = IGUAL ## Comprueba si dos valores de texto son idénticos. +FIND = ENCONTRAR ## Busca un valor de texto dentro de otro (distingue mayúsculas de minúsculas). +FINDB = ENCONTRARB ## Busca un valor de texto dentro de otro (distingue mayúsculas de minúsculas). +FIXED = DECIMAL ## Da formato a un número como texto con un número fijo de decimales. +JIS = JIS ## Convierte las letras inglesas o katakana de ancho medio (de un byte) dentro de una cadena de caracteres en caracteres de ancho completo (de dos bytes). +LEFT = IZQUIERDA ## Devuelve los caracteres del lado izquierdo de un valor de texto. +LEFTB = IZQUIERDAB ## Devuelve los caracteres del lado izquierdo de un valor de texto. +LEN = LARGO ## Devuelve el número de caracteres de una cadena de texto. +LENB = LARGOB ## Devuelve el número de caracteres de una cadena de texto. +LOWER = MINUSC ## Pone el texto en minúsculas. +MID = EXTRAE ## Devuelve un número específico de caracteres de una cadena de texto que comienza en la posición que se especifique. +MIDB = EXTRAEB ## Devuelve un número específico de caracteres de una cadena de texto que comienza en la posición que se especifique. +PHONETIC = FONETICO ## Extrae los caracteres fonéticos (furigana) de una cadena de texto. +PROPER = NOMPROPIO ## Pone en mayúscula la primera letra de cada palabra de un valor de texto. +REPLACE = REEMPLAZAR ## Reemplaza caracteres de texto. +REPLACEB = REEMPLAZARB ## Reemplaza caracteres de texto. +REPT = REPETIR ## Repite el texto un número determinado de veces. +RIGHT = DERECHA ## Devuelve los caracteres del lado derecho de un valor de texto. +RIGHTB = DERECHAB ## Devuelve los caracteres del lado derecho de un valor de texto. +SEARCH = HALLAR ## Busca un valor de texto dentro de otro (no distingue mayúsculas de minúsculas). +SEARCHB = HALLARB ## Busca un valor de texto dentro de otro (no distingue mayúsculas de minúsculas). +SUBSTITUTE = SUSTITUIR ## Sustituye texto nuevo por texto antiguo en una cadena de texto. +T = T ## Convierte sus argumentos a texto. +TEXT = TEXTO ## Da formato a un número y lo convierte en texto. +TRIM = ESPACIOS ## Quita los espacios del texto. +UPPER = MAYUSC ## Pone el texto en mayúsculas. +VALUE = VALOR ## Convierte un argumento de texto en un número. diff --git a/PHPExcel/locale/fi/config b/PHPExcel/locale/fi/config new file mode 100644 index 0000000..380f397 --- /dev/null +++ b/PHPExcel/locale/fi/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = $ # Symbol not known, should it be a € (Euro)? + + +## +## Excel Error Codes (For future use) +## +NULL = #TYHJÄ! +DIV0 = #JAKO/0! +VALUE = #ARVO! +REF = #VIITTAUS! +NAME = #NIMI? +NUM = #LUKU! +NA = #PUUTTUU diff --git a/PHPExcel/locale/fi/functions b/PHPExcel/locale/fi/functions new file mode 100644 index 0000000..bf60bec --- /dev/null +++ b/PHPExcel/locale/fi/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Apuohjelma- ja automaatiofunktiot +## +GETPIVOTDATA = NOUDA.PIVOT.TIEDOT ## Palauttaa pivot-taulukkoraporttiin tallennettuja tietoja. + + +## +## Cube functions Kuutiofunktiot +## +CUBEKPIMEMBER = KUUTIOKPIJÄSEN ## Palauttaa suorituskykyilmaisimen (KPI) nimen, ominaisuuden sekä mitan ja näyttää nimen sekä ominaisuuden solussa. KPI on mitattavissa oleva suure, kuten kuukauden bruttotuotto tai vuosineljänneksen työntekijäkohtainen liikevaihto, joiden avulla tarkkaillaan organisaation suorituskykyä. +CUBEMEMBER = KUUTIONJÄSEN ## Palauttaa kuutiohierarkian jäsenen tai monikon. Tällä funktiolla voit tarkistaa, että jäsen tai monikko on olemassa kuutiossa. +CUBEMEMBERPROPERTY = KUUTIONJÄSENENOMINAISUUS ## Palauttaa kuution jäsenominaisuuden arvon. Tällä funktiolla voit tarkistaa, että nimi on olemassa kuutiossa, ja palauttaa tämän jäsenen määritetyn ominaisuuden. +CUBERANKEDMEMBER = KUUTIONLUOKITELTUJÄSEN ## Palauttaa joukon n:nnen jäsenen. Tällä funktiolla voit palauttaa joukosta elementtejä, kuten parhaan myyjän tai 10 parasta opiskelijaa. +CUBESET = KUUTIOJOUKKO ## Määrittää lasketun jäsen- tai monikkojoukon lähettämällä joukon lausekkeita palvelimessa olevalle kuutiolle. Palvelin luo joukon ja palauttaa sen Microsoft Office Excelille. +CUBESETCOUNT = KUUTIOJOUKKOJENMÄÄRÄ ## Palauttaa joukon kohteiden määrän. +CUBEVALUE = KUUTIONARVO ## Palauttaa koostetun arvon kuutiosta. + + +## +## Database functions Tietokantafunktiot +## +DAVERAGE = TKESKIARVO ## Palauttaa valittujen tietokantamerkintöjen keskiarvon. +DCOUNT = TLASKE ## Laskee tietokannan lukuja sisältävien solujen määrän. +DCOUNTA = TLASKEA ## Laskee tietokannan tietoja sisältävien solujen määrän. +DGET = TNOUDA ## Hakee määritettyjä ehtoja vastaavan tietueen tietokannasta. +DMAX = TMAKS ## Palauttaa suurimman arvon tietokannasta valittujen arvojen joukosta. +DMIN = TMIN ## Palauttaa pienimmän arvon tietokannasta valittujen arvojen joukosta. +DPRODUCT = TTULO ## Kertoo määritetyn ehdon täyttävien tietokannan tietueiden tietyssä kentässä olevat arvot. +DSTDEV = TKESKIHAJONTA ## Laskee keskihajonnan tietokannasta valituista arvoista muodostuvan otoksen perusteella. +DSTDEVP = TKESKIHAJONTAP ## Laskee keskihajonnan tietokannasta valittujen arvojen koko populaation perusteella. +DSUM = TSUMMA ## Lisää luvut määritetyn ehdon täyttävien tietokannan tietueiden kenttäsarakkeeseen. +DVAR = TVARIANSSI ## Laskee varianssin tietokannasta valittujen arvojen otoksen perusteella. +DVARP = TVARIANSSIP ## Laskee varianssin tietokannasta valittujen arvojen koko populaation perusteella. + + +## +## Date and time functions Päivämäärä- ja aikafunktiot +## +DATE = PÄIVÄYS ## Palauttaa annetun päivämäärän järjestysluvun. +DATEVALUE = PÄIVÄYSARVO ## Muuntaa tekstimuodossa olevan päivämäärän järjestysluvuksi. +DAY = PÄIVÄ ## Muuntaa järjestysluvun kuukauden päiväksi. +DAYS360 = PÄIVÄT360 ## Laskee kahden päivämäärän välisten päivien määrän käyttäen perustana 360-päiväistä vuotta. +EDATE = PÄIVÄ.KUUKAUSI ## Palauttaa järjestyslukuna päivämäärän, joka poikkeaa aloituspäivän päivämäärästä annetun kuukausimäärän verran joko eteen- tai taaksepäin. +EOMONTH = KUUKAUSI.LOPPU ## Palauttaa järjestyslukuna sen kuukauden viimeisen päivämäärän, joka poikkeaa annetun kuukausimäärän verran eteen- tai taaksepäin. +HOUR = TUNNIT ## Muuntaa järjestysluvun tunneiksi. +MINUTE = MINUUTIT ## Muuntaa järjestysluvun minuuteiksi. +MONTH = KUUKAUSI ## Muuntaa järjestysluvun kuukausiksi. +NETWORKDAYS = TYÖPÄIVÄT ## Palauttaa kahden päivämäärän välissä olevien täysien työpäivien määrän. +NOW = NYT ## Palauttaa kuluvan päivämäärän ja ajan järjestysnumeron. +SECOND = SEKUNNIT ## Muuntaa järjestysluvun sekunneiksi. +TIME = AIKA ## Palauttaa annetun kellonajan järjestysluvun. +TIMEVALUE = AIKA_ARVO ## Muuntaa tekstimuodossa olevan kellonajan järjestysluvuksi. +TODAY = TÄMÄ.PÄIVÄ ## Palauttaa kuluvan päivän päivämäärän järjestysluvun. +WEEKDAY = VIIKONPÄIVÄ ## Muuntaa järjestysluvun viikonpäiväksi. +WEEKNUM = VIIKKO.NRO ## Muuntaa järjestysluvun luvuksi, joka ilmaisee viikon järjestysluvun vuoden alusta laskettuna. +WORKDAY = TYÖPÄIVÄ ## Palauttaa järjestysluvun päivämäärälle, joka sijaitsee annettujen työpäivien verran eteen tai taaksepäin. +YEAR = VUOSI ## Muuntaa järjestysluvun vuosiksi. +YEARFRAC = VUOSI.OSA ## Palauttaa määritettyjen päivämäärien (aloituspäivä ja lopetuspäivä) välisen osan vuodesta. + + +## +## Engineering functions Tekniset funktiot +## +BESSELI = BESSELI ## Palauttaa muunnetun Bessel-funktion In(x). +BESSELJ = BESSELJ ## Palauttaa Bessel-funktion Jn(x). +BESSELK = BESSELK ## Palauttaa muunnetun Bessel-funktion Kn(x). +BESSELY = BESSELY ## Palauttaa Bessel-funktion Yn(x). +BIN2DEC = BINDES ## Muuntaa binaariluvun desimaaliluvuksi. +BIN2HEX = BINHEKSA ## Muuntaa binaariluvun heksadesimaaliluvuksi. +BIN2OCT = BINOKT ## Muuntaa binaariluvun oktaaliluvuksi. +COMPLEX = KOMPLEKSI ## Muuntaa reaali- ja imaginaariosien kertoimet kompleksiluvuksi. +CONVERT = MUUNNA ## Muuntaa luvun toisen mittajärjestelmän mukaiseksi. +DEC2BIN = DESBIN ## Muuntaa desimaaliluvun binaariluvuksi. +DEC2HEX = DESHEKSA ## Muuntaa kymmenjärjestelmän luvun heksadesimaaliluvuksi. +DEC2OCT = DESOKT ## Muuntaa kymmenjärjestelmän luvun oktaaliluvuksi. +DELTA = SAMA.ARVO ## Tarkistaa, ovatko kaksi arvoa yhtä suuria. +ERF = VIRHEFUNKTIO ## Palauttaa virhefunktion. +ERFC = VIRHEFUNKTIO.KOMPLEMENTTI ## Palauttaa komplementtivirhefunktion. +GESTEP = RAJA ## Testaa, onko luku suurempi kuin kynnysarvo. +HEX2BIN = HEKSABIN ## Muuntaa heksadesimaaliluvun binaariluvuksi. +HEX2DEC = HEKSADES ## Muuntaa heksadesimaaliluvun desimaaliluvuksi. +HEX2OCT = HEKSAOKT ## Muuntaa heksadesimaaliluvun oktaaliluvuksi. +IMABS = KOMPLEKSI.ITSEISARVO ## Palauttaa kompleksiluvun itseisarvon (moduluksen). +IMAGINARY = KOMPLEKSI.IMAG ## Palauttaa kompleksiluvun imaginaariosan kertoimen. +IMARGUMENT = KOMPLEKSI.ARG ## Palauttaa theeta-argumentin, joka on radiaaneina annettu kulma. +IMCONJUGATE = KOMPLEKSI.KONJ ## Palauttaa kompleksiluvun konjugaattiluvun. +IMCOS = KOMPLEKSI.COS ## Palauttaa kompleksiluvun kosinin. +IMDIV = KOMPLEKSI.OSAM ## Palauttaa kahden kompleksiluvun osamäärän. +IMEXP = KOMPLEKSI.EKSP ## Palauttaa kompleksiluvun eksponentin. +IMLN = KOMPLEKSI.LN ## Palauttaa kompleksiluvun luonnollisen logaritmin. +IMLOG10 = KOMPLEKSI.LOG10 ## Palauttaa kompleksiluvun kymmenkantaisen logaritmin. +IMLOG2 = KOMPLEKSI.LOG2 ## Palauttaa kompleksiluvun kaksikantaisen logaritmin. +IMPOWER = KOMPLEKSI.POT ## Palauttaa kokonaislukupotenssiin korotetun kompleksiluvun. +IMPRODUCT = KOMPLEKSI.TULO ## Palauttaa kompleksilukujen tulon. +IMREAL = KOMPLEKSI.REAALI ## Palauttaa kompleksiluvun reaaliosan kertoimen. +IMSIN = KOMPLEKSI.SIN ## Palauttaa kompleksiluvun sinin. +IMSQRT = KOMPLEKSI.NELIÖJ ## Palauttaa kompleksiluvun neliöjuuren. +IMSUB = KOMPLEKSI.EROTUS ## Palauttaa kahden kompleksiluvun erotuksen. +IMSUM = KOMPLEKSI.SUM ## Palauttaa kompleksilukujen summan. +OCT2BIN = OKTBIN ## Muuntaa oktaaliluvun binaariluvuksi. +OCT2DEC = OKTDES ## Muuntaa oktaaliluvun desimaaliluvuksi. +OCT2HEX = OKTHEKSA ## Muuntaa oktaaliluvun heksadesimaaliluvuksi. + + +## +## Financial functions Rahoitusfunktiot +## +ACCRINT = KERTYNYT.KORKO ## Laskee arvopaperille kertyneen koron, kun korko kertyy säännöllisin väliajoin. +ACCRINTM = KERTYNYT.KORKO.LOPUSSA ## Laskee arvopaperille kertyneen koron, kun korko maksetaan eräpäivänä. +AMORDEGRC = AMORDEGRC ## Laskee kunkin laskentakauden poiston poistokerrointa käyttämällä. +AMORLINC = AMORLINC ## Palauttaa kunkin laskentakauden poiston. +COUPDAYBS = KORKOPÄIVÄT.ALUSTA ## Palauttaa koronmaksukauden aloituspäivän ja tilityspäivän välisen ajanjakson päivien määrän. +COUPDAYS = KORKOPÄIVÄT ## Palauttaa päivien määrän koronmaksukaudelta, johon tilityspäivä kuuluu. +COUPDAYSNC = KORKOPÄIVÄT.SEURAAVA ## Palauttaa tilityspäivän ja seuraavan koronmaksupäivän välisen ajanjakson päivien määrän. +COUPNCD = KORKOMAKSU.SEURAAVA ## Palauttaa tilityspäivän jälkeisen seuraavan koronmaksupäivän. +COUPNUM = KORKOPÄIVÄJAKSOT ## Palauttaa arvopaperin ostopäivän ja erääntymispäivän välisten koronmaksupäivien määrän. +COUPPCD = KORKOPÄIVÄ.EDELLINEN ## Palauttaa tilityspäivää edeltävän koronmaksupäivän. +CUMIPMT = MAKSETTU.KORKO ## Palauttaa kahden jakson välisenä aikana kertyneen koron. +CUMPRINC = MAKSETTU.LYHENNYS ## Palauttaa lainalle kahden jakson välisenä aikana kertyneen lyhennyksen. +DB = DB ## Palauttaa kauden kirjanpidollisen poiston amerikkalaisen DB-menetelmän (Fixed-declining balance) mukaan. +DDB = DDB ## Palauttaa kauden kirjanpidollisen poiston amerikkalaisen DDB-menetelmän (Double-Declining Balance) tai jonkin muun määrittämäsi menetelmän mukaan. +DISC = DISKONTTOKORKO ## Palauttaa arvopaperin diskonttokoron. +DOLLARDE = VALUUTTA.DES ## Muuntaa murtolukuna ilmoitetun valuuttamäärän desimaaliluvuksi. +DOLLARFR = VALUUTTA.MURTO ## Muuntaa desimaalilukuna ilmaistun valuuttamäärän murtoluvuksi. +DURATION = KESTO ## Palauttaa keston arvopaperille, jonka koronmaksu tapahtuu säännöllisesti. +EFFECT = KORKO.EFEKT ## Palauttaa todellisen vuosikoron. +FV = TULEVA.ARVO ## Palauttaa sijoituksen tulevan arvon. +FVSCHEDULE = TULEVA.ARVO.ERIKORKO ## Palauttaa pääoman tulevan arvon, kun pääomalle on kertynyt korkoa vaihtelevasti. +INTRATE = KORKO.ARVOPAPERI ## Palauttaa arvopaperin korkokannan täysin sijoitetulle arvopaperille. +IPMT = IPMT ## Laskee sijoitukselle tai lainalle tiettynä ajanjaksona kertyvän koron. +IRR = SISÄINEN.KORKO ## Laskee sisäisen korkokannan kassavirrasta muodostuvalle sarjalle. +ISPMT = ONMAKSU ## Laskee sijoituksen maksetun koron tietyllä jaksolla. +MDURATION = KESTO.MUUNN ## Palauttaa muunnetun Macauley-keston arvopaperille, jonka oletettu nimellisarvo on 100 euroa. +MIRR = MSISÄINEN ## Palauttaa sisäisen korkokannan, kun positiivisten ja negatiivisten kassavirtojen rahoituskorko on erilainen. +NOMINAL = KORKO.VUOSI ## Palauttaa vuosittaisen nimelliskoron. +NPER = NJAKSO ## Palauttaa sijoituksen jaksojen määrän. +NPV = NNA ## Palauttaa sijoituksen nykyarvon toistuvista kassavirroista muodostuvan sarjan ja diskonttokoron perusteella. +ODDFPRICE = PARITON.ENS.NIMELLISARVO ## Palauttaa arvopaperin hinnan tilanteessa, jossa ensimmäinen jakso on pariton. +ODDFYIELD = PARITON.ENS.TUOTTO ## Palauttaa arvopaperin tuoton tilanteessa, jossa ensimmäinen jakso on pariton. +ODDLPRICE = PARITON.VIIM.NIMELLISARVO ## Palauttaa arvopaperin hinnan tilanteessa, jossa viimeinen jakso on pariton. +ODDLYIELD = PARITON.VIIM.TUOTTO ## Palauttaa arvopaperin tuoton tilanteessa, jossa viimeinen jakso on pariton. +PMT = MAKSU ## Palauttaa annuiteetin kausittaisen maksuerän. +PPMT = PPMT ## Laskee sijoitukselle tai lainalle tiettynä ajanjaksona maksettavan lyhennyksen. +PRICE = HINTA ## Palauttaa hinnan 100 euron nimellisarvoa kohden arvopaperille, jonka korko maksetaan säännöllisin väliajoin. +PRICEDISC = HINTA.DISK ## Palauttaa diskontatun arvopaperin hinnan 100 euron nimellisarvoa kohden. +PRICEMAT = HINTA.LUNASTUS ## Palauttaa hinnan 100 euron nimellisarvoa kohden arvopaperille, jonka korko maksetaan erääntymispäivänä. +PV = NA ## Palauttaa sijoituksen nykyarvon. +RATE = KORKO ## Palauttaa annuiteetin kausittaisen korkokannan. +RECEIVED = SAATU.HINTA ## Palauttaa arvopaperin tuoton erääntymispäivänä kokonaan maksetulle sijoitukselle. +SLN = STP ## Palauttaa sijoituksen tasapoiston yhdeltä jaksolta. +SYD = VUOSIPOISTO ## Palauttaa sijoituksen vuosipoiston annettuna kautena amerikkalaisen SYD-menetelmän (Sum-of-Year's Digits) avulla. +TBILLEQ = OBLIG.TUOTTOPROS ## Palauttaa valtion obligaation tuoton vastaavana joukkovelkakirjan tuottona. +TBILLPRICE = OBLIG.HINTA ## Palauttaa obligaation hinnan 100 euron nimellisarvoa kohden. +TBILLYIELD = OBLIG.TUOTTO ## Palauttaa obligaation tuoton. +VDB = VDB ## Palauttaa annetun kauden tai kauden osan kirjanpidollisen poiston amerikkalaisen DB-menetelmän (Fixed-declining balance) mukaan. +XIRR = SISÄINEN.KORKO.JAKSOTON ## Palauttaa sisäisen korkokannan kassavirtojen sarjoille, jotka eivät välttämättä ole säännöllisiä. +XNPV = NNA.JAKSOTON ## Palauttaa nettonykyarvon kassavirtasarjalle, joka ei välttämättä ole kausittainen. +YIELD = TUOTTO ## Palauttaa tuoton arvopaperille, jonka korko maksetaan säännöllisin väliajoin. +YIELDDISC = TUOTTO.DISK ## Palauttaa diskontatun arvopaperin, kuten obligaation, vuosittaisen tuoton. +YIELDMAT = TUOTTO.ERÄP ## Palauttaa erääntymispäivänään korkoa tuottavan arvopaperin vuosittaisen tuoton. + + +## +## Information functions Erikoisfunktiot +## +CELL = SOLU ## Palauttaa tietoja solun muotoilusta, sijainnista ja sisällöstä. +ERROR.TYPE = VIRHEEN.LAJI ## Palauttaa virhetyyppiä vastaavan luvun. +INFO = KUVAUS ## Palauttaa tietoja nykyisestä käyttöympäristöstä. +ISBLANK = ONTYHJÄ ## Palauttaa arvon TOSI, jos arvo on tyhjä. +ISERR = ONVIRH ## Palauttaa arvon TOSI, jos arvo on mikä tahansa virhearvo paitsi arvo #PUUTTUU!. +ISERROR = ONVIRHE ## Palauttaa arvon TOSI, jos arvo on mikä tahansa virhearvo. +ISEVEN = ONPARILLINEN ## Palauttaa arvon TOSI, jos arvo on parillinen. +ISLOGICAL = ONTOTUUS ## Palauttaa arvon TOSI, jos arvo on mikä tahansa looginen arvo. +ISNA = ONPUUTTUU ## Palauttaa arvon TOSI, jos virhearvo on #PUUTTUU!. +ISNONTEXT = ONEI_TEKSTI ## Palauttaa arvon TOSI, jos arvo ei ole teksti. +ISNUMBER = ONLUKU ## Palauttaa arvon TOSI, jos arvo on luku. +ISODD = ONPARITON ## Palauttaa arvon TOSI, jos arvo on pariton. +ISREF = ONVIITT ## Palauttaa arvon TOSI, jos arvo on viittaus. +ISTEXT = ONTEKSTI ## Palauttaa arvon TOSI, jos arvo on teksti. +N = N ## Palauttaa arvon luvuksi muunnettuna. +NA = PUUTTUU ## Palauttaa virhearvon #PUUTTUU!. +TYPE = TYYPPI ## Palauttaa luvun, joka ilmaisee arvon tietotyypin. + + +## +## Logical functions Loogiset funktiot +## +AND = JA ## Palauttaa arvon TOSI, jos kaikkien argumenttien arvo on TOSI. +FALSE = EPÄTOSI ## Palauttaa totuusarvon EPÄTOSI. +IF = JOS ## Määrittää suoritettavan loogisen testin. +IFERROR = JOSVIRHE ## Palauttaa määrittämäsi arvon, jos kaavan tulos on virhe; muussa tapauksessa palauttaa kaavan tuloksen. +NOT = EI ## Kääntää argumentin loogisen arvon. +OR = TAI ## Palauttaa arvon TOSI, jos minkä tahansa argumentin arvo on TOSI. +TRUE = TOSI ## Palauttaa totuusarvon TOSI. + + +## +## Lookup and reference functions Haku- ja viitefunktiot +## +ADDRESS = OSOITE ## Palauttaa laskentataulukon soluun osoittavan viittauksen tekstinä. +AREAS = ALUEET ## Palauttaa viittauksessa olevien alueiden määrän. +CHOOSE = VALITSE.INDEKSI ## Valitsee arvon arvoluettelosta. +COLUMN = SARAKE ## Palauttaa viittauksen sarakenumeron. +COLUMNS = SARAKKEET ## Palauttaa viittauksessa olevien sarakkeiden määrän. +HLOOKUP = VHAKU ## Suorittaa haun matriisin ylimmältä riviltä ja palauttaa määritetyn solun arvon. +HYPERLINK = HYPERLINKKI ## Luo pikakuvakkeen tai tekstin, joka avaa verkkopalvelimeen, intranetiin tai Internetiin tallennetun tiedoston. +INDEX = INDEKSI ## Valitsee arvon viittauksesta tai matriisista indeksin mukaan. +INDIRECT = EPÄSUORA ## Palauttaa tekstiarvona ilmaistun viittauksen. +LOOKUP = HAKU ## Etsii arvoja vektorista tai matriisista. +MATCH = VASTINE ## Etsii arvoja viittauksesta tai matriisista. +OFFSET = SIIRTYMÄ ## Palauttaa annetun viittauksen siirtymän. +ROW = RIVI ## Palauttaa viittauksen rivinumeron. +ROWS = RIVIT ## Palauttaa viittauksessa olevien rivien määrän. +RTD = RTD ## Noutaa COM-automaatiota (automaatio: Tapa käsitellä sovelluksen objekteja toisesta sovelluksesta tai kehitystyökalusta. Automaatio, jota aiemmin kutsuttiin OLE-automaatioksi, on teollisuusstandardi ja COM-mallin (Component Object Model) ominaisuus.) tukevasta ohjelmasta reaaliaikaisia tietoja. +TRANSPOSE = TRANSPONOI ## Palauttaa matriisin käänteismatriisin. +VLOOKUP = PHAKU ## Suorittaa haun matriisin ensimmäisestä sarakkeesta ja palauttaa rivillä olevan solun arvon. + + +## +## Math and trigonometry functions Matemaattiset ja trigonometriset funktiot +## +ABS = ITSEISARVO ## Palauttaa luvun itseisarvon. +ACOS = ACOS ## Palauttaa luvun arkuskosinin. +ACOSH = ACOSH ## Palauttaa luvun käänteisen hyperbolisen kosinin. +ASIN = ASIN ## Palauttaa luvun arkussinin. +ASINH = ASINH ## Palauttaa luvun käänteisen hyperbolisen sinin. +ATAN = ATAN ## Palauttaa luvun arkustangentin. +ATAN2 = ATAN2 ## Palauttaa arkustangentin x- ja y-koordinaatin perusteella. +ATANH = ATANH ## Palauttaa luvun käänteisen hyperbolisen tangentin. +CEILING = PYÖRISTÄ.KERR.YLÖS ## Pyöristää luvun lähimpään kokonaislukuun tai tarkkuusargumentin lähimpään kerrannaiseen. +COMBIN = KOMBINAATIO ## Palauttaa mahdollisten kombinaatioiden määrän annetulle objektien määrälle. +COS = COS ## Palauttaa luvun kosinin. +COSH = COSH ## Palauttaa luvun hyperbolisen kosinin. +DEGREES = ASTEET ## Muuntaa radiaanit asteiksi. +EVEN = PARILLINEN ## Pyöristää luvun ylöspäin lähimpään parilliseen kokonaislukuun. +EXP = EKSPONENTTI ## Palauttaa e:n korotettuna annetun luvun osoittamaan potenssiin. +FACT = KERTOMA ## Palauttaa luvun kertoman. +FACTDOUBLE = KERTOMA.OSA ## Palauttaa luvun osakertoman. +FLOOR = PYÖRISTÄ.KERR.ALAS ## Pyöristää luvun alaspäin (nollaa kohti). +GCD = SUURIN.YHT.TEKIJÄ ## Palauttaa suurimman yhteisen tekijän. +INT = KOKONAISLUKU ## Pyöristää luvun alaspäin lähimpään kokonaislukuun. +LCM = PIENIN.YHT.JAETTAVA ## Palauttaa pienimmän yhteisen tekijän. +LN = LUONNLOG ## Palauttaa luvun luonnollisen logaritmin. +LOG = LOG ## Laskee luvun logaritmin käyttämällä annettua kantalukua. +LOG10 = LOG10 ## Palauttaa luvun kymmenkantaisen logaritmin. +MDETERM = MDETERM ## Palauttaa matriisin matriisideterminantin. +MINVERSE = MKÄÄNTEINEN ## Palauttaa matriisin käänteismatriisin. +MMULT = MKERRO ## Palauttaa kahden matriisin tulon. +MOD = JAKOJ ## Palauttaa jakolaskun jäännöksen. +MROUND = PYÖRISTÄ.KERR ## Palauttaa luvun pyöristettynä annetun luvun kerrannaiseen. +MULTINOMIAL = MULTINOMI ## Palauttaa lukujoukon multinomin. +ODD = PARITON ## Pyöristää luvun ylöspäin lähimpään parittomaan kokonaislukuun. +PI = PII ## Palauttaa piin arvon. +POWER = POTENSSI ## Palauttaa luvun korotettuna haluttuun potenssiin. +PRODUCT = TULO ## Kertoo annetut argumentit. +QUOTIENT = OSAMÄÄRÄ ## Palauttaa osamäärän kokonaislukuosan. +RADIANS = RADIAANIT ## Muuntaa asteet radiaaneiksi. +RAND = SATUNNAISLUKU ## Palauttaa satunnaisluvun väliltä 0–1. +RANDBETWEEN = SATUNNAISLUKU.VÄLILTÄ ## Palauttaa satunnaisluvun määritettyjen lukujen väliltä. +ROMAN = ROMAN ## Muuntaa arabialaisen numeron tekstimuotoiseksi roomalaiseksi numeroksi. +ROUND = PYÖRISTÄ ## Pyöristää luvun annettuun määrään desimaaleja. +ROUNDDOWN = PYÖRISTÄ.DES.ALAS ## Pyöristää luvun alaspäin (nollaa kohti). +ROUNDUP = PYÖRISTÄ.DES.YLÖS ## Pyöristää luvun ylöspäin (poispäin nollasta). +SERIESSUM = SARJA.SUMMA ## Palauttaa kaavaan perustuvan potenssisarjan arvon. +SIGN = ETUMERKKI ## Palauttaa luvun etumerkin. +SIN = SIN ## Palauttaa annetun kulman sinin. +SINH = SINH ## Palauttaa luvun hyperbolisen sinin. +SQRT = NELIÖJUURI ## Palauttaa positiivisen neliöjuuren. +SQRTPI = NELIÖJUURI.PII ## Palauttaa tulon (luku * pii) neliöjuuren. +SUBTOTAL = VÄLISUMMA ## Palauttaa luettelon tai tietokannan välisumman. +SUM = SUMMA ## Laskee yhteen annetut argumentit. +SUMIF = SUMMA.JOS ## Laskee ehdot täyttävien solujen summan. +SUMIFS = SUMMA.JOS.JOUKKO ## Laskee yhteen solualueen useita ehtoja vastaavat solut. +SUMPRODUCT = TULOJEN.SUMMA ## Palauttaa matriisin toisiaan vastaavien osien tulojen summan. +SUMSQ = NELIÖSUMMA ## Palauttaa argumenttien neliöiden summan. +SUMX2MY2 = NELIÖSUMMIEN.EROTUS ## Palauttaa kahden matriisin toisiaan vastaavien arvojen laskettujen neliösummien erotuksen. +SUMX2PY2 = NELIÖSUMMIEN.SUMMA ## Palauttaa kahden matriisin toisiaan vastaavien arvojen neliösummien summan. +SUMXMY2 = EROTUSTEN.NELIÖSUMMA ## Palauttaa kahden matriisin toisiaan vastaavien arvojen erotusten neliösumman. +TAN = TAN ## Palauttaa luvun tangentin. +TANH = TANH ## Palauttaa luvun hyperbolisen tangentin. +TRUNC = KATKAISE ## Katkaisee luvun kokonaisluvuksi. + + +## +## Statistical functions Tilastolliset funktiot +## +AVEDEV = KESKIPOIKKEAMA ## Palauttaa hajontojen itseisarvojen keskiarvon. +AVERAGE = KESKIARVO ## Palauttaa argumenttien keskiarvon. +AVERAGEA = KESKIARVOA ## Palauttaa argumenttien, mukaan lukien lukujen, tekstin ja loogisten arvojen, keskiarvon. +AVERAGEIF = KESKIARVO.JOS ## Palauttaa alueen niiden solujen keskiarvon (aritmeettisen keskiarvon), jotka täyttävät annetut ehdot. +AVERAGEIFS = KESKIARVO.JOS.JOUKKO ## Palauttaa niiden solujen keskiarvon (aritmeettisen keskiarvon), jotka vastaavat useita ehtoja. +BETADIST = BEETAJAKAUMA ## Palauttaa kumulatiivisen beetajakaumafunktion arvon. +BETAINV = BEETAJAKAUMA.KÄÄNT ## Palauttaa määritetyn beetajakauman käänteisen kumulatiivisen jakaumafunktion arvon. +BINOMDIST = BINOMIJAKAUMA ## Palauttaa yksittäisen termin binomijakaumatodennäköisyyden. +CHIDIST = CHIJAKAUMA ## Palauttaa yksisuuntaisen chi-neliön jakauman todennäköisyyden. +CHIINV = CHIJAKAUMA.KÄÄNT ## Palauttaa yksisuuntaisen chi-neliön jakauman todennäköisyyden käänteisarvon. +CHITEST = CHITESTI ## Palauttaa riippumattomuustestin tuloksen. +CONFIDENCE = LUOTTAMUSVÄLI ## Palauttaa luottamusvälin populaation keskiarvolle. +CORREL = KORRELAATIO ## Palauttaa kahden arvojoukon korrelaatiokertoimen. +COUNT = LASKE ## Laskee argumenttiluettelossa olevien lukujen määrän. +COUNTA = LASKE.A ## Laskee argumenttiluettelossa olevien arvojen määrän. +COUNTBLANK = LASKE.TYHJÄT ## Laskee alueella olevien tyhjien solujen määrän. +COUNTIF = LASKE.JOS ## Laskee alueella olevien sellaisten solujen määrän, joiden sisältö vastaa annettuja ehtoja. +COUNTIFS = LASKE.JOS.JOUKKO ## Laskee alueella olevien sellaisten solujen määrän, joiden sisältö vastaa useita ehtoja. +COVAR = KOVARIANSSI ## Palauttaa kovarianssin, joka on keskiarvo havaintoaineiston kunkin pisteparin poikkeamien tuloista. +CRITBINOM = BINOMIJAKAUMA.KRIT ## Palauttaa pienimmän arvon, jossa binomijakauman kertymäfunktion arvo on pienempi tai yhtä suuri kuin vertailuarvo. +DEVSQ = OIKAISTU.NELIÖSUMMA ## Palauttaa keskipoikkeamien neliösumman. +EXPONDIST = EKSPONENTIAALIJAKAUMA ## Palauttaa eksponentiaalijakauman. +FDIST = FJAKAUMA ## Palauttaa F-todennäköisyysjakauman. +FINV = FJAKAUMA.KÄÄNT ## Palauttaa F-todennäköisyysjakauman käänteisfunktion. +FISHER = FISHER ## Palauttaa Fisher-muunnoksen. +FISHERINV = FISHER.KÄÄNT ## Palauttaa käänteisen Fisher-muunnoksen. +FORECAST = ENNUSTE ## Palauttaa lineaarisen trendin arvon. +FREQUENCY = TAAJUUS ## Palauttaa frekvenssijakautuman pystysuuntaisena matriisina. +FTEST = FTESTI ## Palauttaa F-testin tuloksen. +GAMMADIST = GAMMAJAKAUMA ## Palauttaa gammajakauman. +GAMMAINV = GAMMAJAKAUMA.KÄÄNT ## Palauttaa käänteisen gammajakauman kertymäfunktion. +GAMMALN = GAMMALN ## Palauttaa gammafunktion luonnollisen logaritmin G(x). +GEOMEAN = KESKIARVO.GEOM ## Palauttaa geometrisen keskiarvon. +GROWTH = KASVU ## Palauttaa eksponentiaalisen trendin arvon. +HARMEAN = KESKIARVO.HARM ## Palauttaa harmonisen keskiarvon. +HYPGEOMDIST = HYPERGEOM.JAKAUMA ## Palauttaa hypergeometrisen jakauman. +INTERCEPT = LEIKKAUSPISTE ## Palauttaa lineaarisen regressiosuoran leikkauspisteen. +KURT = KURT ## Palauttaa tietoalueen vinous-arvon eli huipukkuuden. +LARGE = SUURI ## Palauttaa tietojoukon k:nneksi suurimman arvon. +LINEST = LINREGR ## Palauttaa lineaarisen trendin parametrit. +LOGEST = LOGREGR ## Palauttaa eksponentiaalisen trendin parametrit. +LOGINV = LOGNORM.JAKAUMA.KÄÄNT ## Palauttaa lognormeeratun jakauman käänteisfunktion. +LOGNORMDIST = LOGNORM.JAKAUMA ## Palauttaa lognormaalisen jakauman kertymäfunktion. +MAX = MAKS ## Palauttaa suurimman arvon argumenttiluettelosta. +MAXA = MAKSA ## Palauttaa argumenttien, mukaan lukien lukujen, tekstin ja loogisten arvojen, suurimman arvon. +MEDIAN = MEDIAANI ## Palauttaa annettujen lukujen mediaanin. +MIN = MIN ## Palauttaa pienimmän arvon argumenttiluettelosta. +MINA = MINA ## Palauttaa argumenttien, mukaan lukien lukujen, tekstin ja loogisten arvojen, pienimmän arvon. +MODE = MOODI ## Palauttaa tietojoukossa useimmin esiintyvän arvon. +NEGBINOMDIST = BINOMIJAKAUMA.NEG ## Palauttaa negatiivisen binomijakauman. +NORMDIST = NORM.JAKAUMA ## Palauttaa normaalijakauman kertymäfunktion. +NORMINV = NORM.JAKAUMA.KÄÄNT ## Palauttaa käänteisen normaalijakauman kertymäfunktion. +NORMSDIST = NORM.JAKAUMA.NORMIT ## Palauttaa normitetun normaalijakauman kertymäfunktion. +NORMSINV = NORM.JAKAUMA.NORMIT.KÄÄNT ## Palauttaa normitetun normaalijakauman kertymäfunktion käänteisarvon. +PEARSON = PEARSON ## Palauttaa Pearsonin tulomomenttikorrelaatiokertoimen. +PERCENTILE = PROSENTTIPISTE ## Palauttaa alueen arvojen k:nnen prosenttipisteen. +PERCENTRANK = PROSENTTIJÄRJESTYS ## Palauttaa tietojoukon arvon prosentuaalisen järjestysluvun. +PERMUT = PERMUTAATIO ## Palauttaa mahdollisten permutaatioiden määrän annetulle objektien määrälle. +POISSON = POISSON ## Palauttaa Poissonin todennäköisyysjakauman. +PROB = TODENNÄKÖISYYS ## Palauttaa todennäköisyyden sille, että arvot ovat tietyltä väliltä. +QUARTILE = NELJÄNNES ## Palauttaa tietoalueen neljänneksen. +RANK = ARVON.MUKAAN ## Palauttaa luvun paikan lukuarvoluettelossa. +RSQ = PEARSON.NELIÖ ## Palauttaa Pearsonin tulomomenttikorrelaatiokertoimen neliön. +SKEW = JAKAUMAN.VINOUS ## Palauttaa jakauman vinouden. +SLOPE = KULMAKERROIN ## Palauttaa lineaarisen regressiosuoran kulmakertoimen. +SMALL = PIENI ## Palauttaa tietojoukon k:nneksi pienimmän arvon. +STANDARDIZE = NORMITA ## Palauttaa normitetun arvon. +STDEV = KESKIHAJONTA ## Laskee populaation keskihajonnan otoksen perusteella. +STDEVA = KESKIHAJONTAA ## Laskee populaation keskihajonnan otoksen perusteella, mukaan lukien luvut, tekstin ja loogiset arvot. +STDEVP = KESKIHAJONTAP ## Laskee normaalijakautuman koko populaation perusteella. +STDEVPA = KESKIHAJONTAPA ## Laskee populaation keskihajonnan koko populaation perusteella, mukaan lukien luvut, tekstin ja totuusarvot. +STEYX = KESKIVIRHE ## Palauttaa regression kutakin x-arvoa vastaavan ennustetun y-arvon keskivirheen. +TDIST = TJAKAUMA ## Palauttaa t-jakautuman. +TINV = TJAKAUMA.KÄÄNT ## Palauttaa käänteisen t-jakauman. +TREND = SUUNTAUS ## Palauttaa lineaarisen trendin arvoja. +TRIMMEAN = KESKIARVO.TASATTU ## Palauttaa tietojoukon tasatun keskiarvon. +TTEST = TTESTI ## Palauttaa t-testiin liittyvän todennäköisyyden. +VAR = VAR ## Arvioi populaation varianssia otoksen perusteella. +VARA = VARA ## Laskee populaation varianssin otoksen perusteella, mukaan lukien luvut, tekstin ja loogiset arvot. +VARP = VARP ## Laskee varianssin koko populaation perusteella. +VARPA = VARPA ## Laskee populaation varianssin koko populaation perusteella, mukaan lukien luvut, tekstin ja totuusarvot. +WEIBULL = WEIBULL ## Palauttaa Weibullin jakauman. +ZTEST = ZTESTI ## Palauttaa z-testin yksisuuntaisen todennäköisyysarvon. + + +## +## Text functions Tekstifunktiot +## +ASC = ASC ## Muuntaa merkkijonossa olevat englanninkieliset DBCS- tai katakana-merkit SBCS-merkeiksi. +BAHTTEXT = BAHTTEKSTI ## Muuntaa luvun tekstiksi ß (baht) -valuuttamuotoa käyttämällä. +CHAR = MERKKI ## Palauttaa koodin lukua vastaavan merkin. +CLEAN = SIIVOA ## Poistaa tekstistä kaikki tulostumattomat merkit. +CODE = KOODI ## Palauttaa tekstimerkkijonon ensimmäisen merkin numerokoodin. +CONCATENATE = KETJUTA ## Yhdistää useat merkkijonot yhdeksi merkkijonoksi. +DOLLAR = VALUUTTA ## Muuntaa luvun tekstiksi $ (dollari) -valuuttamuotoa käyttämällä. +EXACT = VERTAA ## Tarkistaa, ovatko kaksi tekstiarvoa samanlaiset. +FIND = ETSI ## Etsii tekstiarvon toisen tekstin sisältä (tunnistaa isot ja pienet kirjaimet). +FINDB = ETSIB ## Etsii tekstiarvon toisen tekstin sisältä (tunnistaa isot ja pienet kirjaimet). +FIXED = KIINTEÄ ## Muotoilee luvun tekstiksi, jossa on kiinteä määrä desimaaleja. +JIS = JIS ## Muuntaa merkkijonossa olevat englanninkieliset SBCS- tai katakana-merkit DBCS-merkeiksi. +LEFT = VASEN ## Palauttaa tekstiarvon vasemmanpuoliset merkit. +LEFTB = VASENB ## Palauttaa tekstiarvon vasemmanpuoliset merkit. +LEN = PITUUS ## Palauttaa tekstimerkkijonon merkkien määrän. +LENB = PITUUSB ## Palauttaa tekstimerkkijonon merkkien määrän. +LOWER = PIENET ## Muuntaa tekstin pieniksi kirjaimiksi. +MID = POIMI.TEKSTI ## Palauttaa määritetyn määrän merkkejä merkkijonosta alkaen annetusta kohdasta. +MIDB = POIMI.TEKSTIB ## Palauttaa määritetyn määrän merkkejä merkkijonosta alkaen annetusta kohdasta. +PHONETIC = FONEETTINEN ## Hakee foneettiset (furigana) merkit merkkijonosta. +PROPER = ERISNIMI ## Muuttaa merkkijonon kunkin sanan ensimmäisen kirjaimen isoksi. +REPLACE = KORVAA ## Korvaa tekstissä olevat merkit. +REPLACEB = KORVAAB ## Korvaa tekstissä olevat merkit. +REPT = TOISTA ## Toistaa tekstin annetun määrän kertoja. +RIGHT = OIKEA ## Palauttaa tekstiarvon oikeanpuoliset merkit. +RIGHTB = OIKEAB ## Palauttaa tekstiarvon oikeanpuoliset merkit. +SEARCH = KÄY.LÄPI ## Etsii tekstiarvon toisen tekstin sisältä (isot ja pienet kirjaimet tulkitaan samoiksi merkeiksi). +SEARCHB = KÄY.LÄPIB ## Etsii tekstiarvon toisen tekstin sisältä (isot ja pienet kirjaimet tulkitaan samoiksi merkeiksi). +SUBSTITUTE = VAIHDA ## Korvaa merkkijonossa olevan tekstin toisella. +T = T ## Muuntaa argumentit tekstiksi. +TEXT = TEKSTI ## Muotoilee luvun ja muuntaa sen tekstiksi. +TRIM = POISTA.VÄLIT ## Poistaa välilyönnit tekstistä. +UPPER = ISOT ## Muuntaa tekstin isoiksi kirjaimiksi. +VALUE = ARVO ## Muuntaa tekstiargumentin luvuksi. diff --git a/PHPExcel/locale/fr/config b/PHPExcel/locale/fr/config new file mode 100644 index 0000000..368b3c3 --- /dev/null +++ b/PHPExcel/locale/fr/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = € + + +## +## Excel Error Codes (For future use) +## +NULL = #NUL! +DIV0 = #DIV/0! +VALUE = #VALEUR! +REF = #REF! +NAME = #NOM? +NUM = #NOMBRE! +NA = #N/A diff --git a/PHPExcel/locale/fr/functions b/PHPExcel/locale/fr/functions new file mode 100644 index 0000000..e85dba5 --- /dev/null +++ b/PHPExcel/locale/fr/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Fonctions de complément et d’automatisation +## +GETPIVOTDATA = LIREDONNEESTABCROISDYNAMIQUE ## Renvoie les données stockées dans un rapport de tableau croisé dynamique. + + +## +## Cube functions Fonctions Cube +## +CUBEKPIMEMBER = MEMBREKPICUBE ## Renvoie un nom, une propriété et une mesure d’indicateur de performance clé et affiche le nom et la propriété dans la cellule. Un indicateur de performance clé est une mesure quantifiable, telle que la marge bénéficiaire brute mensuelle ou la rotation trimestrielle du personnel, utilisée pour évaluer les performances d’une entreprise. +CUBEMEMBER = MEMBRECUBE ## Renvoie un membre ou un uplet dans une hiérarchie de cubes. Utilisez cette fonction pour valider l’existence du membre ou de l’uplet dans le cube. +CUBEMEMBERPROPERTY = PROPRIETEMEMBRECUBE ## Renvoie la valeur d’une propriété de membre du cube. Utilisez cette fonction pour valider l’existence d’un nom de membre dans le cube et pour renvoyer la propriété spécifiée pour ce membre. +CUBERANKEDMEMBER = RANGMEMBRECUBE ## Renvoie le nième membre ou le membre placé à un certain rang dans un ensemble. Utilisez cette fonction pour renvoyer un ou plusieurs éléments d’un ensemble, tels que les meilleurs vendeurs ou les 10 meilleurs étudiants. +CUBESET = JEUCUBE ## Définit un ensemble calculé de membres ou d’uplets en envoyant une expression définie au cube sur le serveur qui crée l’ensemble et le renvoie à Microsoft Office Excel. +CUBESETCOUNT = NBJEUCUBE ## Renvoie le nombre d’éléments dans un jeu. +CUBEVALUE = VALEURCUBE ## Renvoie une valeur d’agrégation issue d’un cube. + + +## +## Database functions Fonctions de base de données +## +DAVERAGE = BDMOYENNE ## Renvoie la moyenne des entrées de base de données sélectionnées. +DCOUNT = BCOMPTE ## Compte le nombre de cellules d’une base de données qui contiennent des nombres. +DCOUNTA = BDNBVAL ## Compte les cellules non vides d’une base de données. +DGET = BDLIRE ## Extrait d’une base de données un enregistrement unique répondant aux critères spécifiés. +DMAX = BDMAX ## Renvoie la valeur maximale des entrées de base de données sélectionnées. +DMIN = BDMIN ## Renvoie la valeur minimale des entrées de base de données sélectionnées. +DPRODUCT = BDPRODUIT ## Multiplie les valeurs d’un champ particulier des enregistrements d’une base de données, qui répondent aux critères spécifiés. +DSTDEV = BDECARTYPE ## Calcule l’écart type pour un échantillon d’entrées de base de données sélectionnées. +DSTDEVP = BDECARTYPEP ## Calcule l’écart type pour l’ensemble d’une population d’entrées de base de données sélectionnées. +DSUM = BDSOMME ## Ajoute les nombres dans la colonne de champ des enregistrements de la base de données, qui répondent aux critères. +DVAR = BDVAR ## Calcule la variance pour un échantillon d’entrées de base de données sélectionnées. +DVARP = BDVARP ## Calcule la variance pour l’ensemble d’une population d’entrées de base de données sélectionnées. + + +## +## Date and time functions Fonctions de date et d’heure +## +DATE = DATE ## Renvoie le numéro de série d’une date précise. +DATEVALUE = DATEVAL ## Convertit une date représentée sous forme de texte en numéro de série. +DAY = JOUR ## Convertit un numéro de série en jour du mois. +DAYS360 = JOURS360 ## Calcule le nombre de jours qui séparent deux dates sur la base d’une année de 360 jours. +EDATE = MOIS.DECALER ## Renvoie le numéro séquentiel de la date qui représente une date spécifiée (l’argument date_départ), corrigée en plus ou en moins du nombre de mois indiqué. +EOMONTH = FIN.MOIS ## Renvoie le numéro séquentiel de la date du dernier jour du mois précédant ou suivant la date_départ du nombre de mois indiqué. +HOUR = HEURE ## Convertit un numéro de série en heure. +MINUTE = MINUTE ## Convertit un numéro de série en minute. +MONTH = MOIS ## Convertit un numéro de série en mois. +NETWORKDAYS = NB.JOURS.OUVRES ## Renvoie le nombre de jours ouvrés entiers compris entre deux dates. +NOW = MAINTENANT ## Renvoie le numéro de série de la date et de l’heure du jour. +SECOND = SECONDE ## Convertit un numéro de série en seconde. +TIME = TEMPS ## Renvoie le numéro de série d’une heure précise. +TIMEVALUE = TEMPSVAL ## Convertit une date représentée sous forme de texte en numéro de série. +TODAY = AUJOURDHUI ## Renvoie le numéro de série de la date du jour. +WEEKDAY = JOURSEM ## Convertit un numéro de série en jour de la semaine. +WEEKNUM = NO.SEMAINE ## Convertit un numéro de série en un numéro représentant l’ordre de la semaine dans l’année. +WORKDAY = SERIE.JOUR.OUVRE ## Renvoie le numéro de série de la date avant ou après le nombre de jours ouvrés spécifiés. +YEAR = ANNEE ## Convertit un numéro de série en année. +YEARFRAC = FRACTION.ANNEE ## Renvoie la fraction de l’année représentant le nombre de jours entre la date de début et la date de fin. + + +## +## Engineering functions Fonctions d’ingénierie +## +BESSELI = BESSELI ## Renvoie la fonction Bessel modifiée In(x). +BESSELJ = BESSELJ ## Renvoie la fonction Bessel Jn(x). +BESSELK = BESSELK ## Renvoie la fonction Bessel modifiée Kn(x). +BESSELY = BESSELY ## Renvoie la fonction Bessel Yn(x). +BIN2DEC = BINDEC ## Convertit un nombre binaire en nombre décimal. +BIN2HEX = BINHEX ## Convertit un nombre binaire en nombre hexadécimal. +BIN2OCT = BINOCT ## Convertit un nombre binaire en nombre octal. +COMPLEX = COMPLEXE ## Convertit des coefficients réel et imaginaire en un nombre complexe. +CONVERT = CONVERT ## Convertit un nombre d’une unité de mesure à une autre. +DEC2BIN = DECBIN ## Convertit un nombre décimal en nombre binaire. +DEC2HEX = DECHEX ## Convertit un nombre décimal en nombre hexadécimal. +DEC2OCT = DECOCT ## Convertit un nombre décimal en nombre octal. +DELTA = DELTA ## Teste l’égalité de deux nombres. +ERF = ERF ## Renvoie la valeur de la fonction d’erreur. +ERFC = ERFC ## Renvoie la valeur de la fonction d’erreur complémentaire. +GESTEP = SUP.SEUIL ## Teste si un nombre est supérieur à une valeur de seuil. +HEX2BIN = HEXBIN ## Convertit un nombre hexadécimal en nombre binaire. +HEX2DEC = HEXDEC ## Convertit un nombre hexadécimal en nombre décimal. +HEX2OCT = HEXOCT ## Convertit un nombre hexadécimal en nombre octal. +IMABS = COMPLEXE.MODULE ## Renvoie la valeur absolue (module) d’un nombre complexe. +IMAGINARY = COMPLEXE.IMAGINAIRE ## Renvoie le coefficient imaginaire d’un nombre complexe. +IMARGUMENT = COMPLEXE.ARGUMENT ## Renvoie l’argument thêta, un angle exprimé en radians. +IMCONJUGATE = COMPLEXE.CONJUGUE ## Renvoie le nombre complexe conjugué d’un nombre complexe. +IMCOS = IMCOS ## Renvoie le cosinus d’un nombre complexe. +IMDIV = COMPLEXE.DIV ## Renvoie le quotient de deux nombres complexes. +IMEXP = COMPLEXE.EXP ## Renvoie la fonction exponentielle d’un nombre complexe. +IMLN = COMPLEXE.LN ## Renvoie le logarithme népérien d’un nombre complexe. +IMLOG10 = COMPLEXE.LOG10 ## Calcule le logarithme en base 10 d’un nombre complexe. +IMLOG2 = COMPLEXE.LOG2 ## Calcule le logarithme en base 2 d’un nombre complexe. +IMPOWER = COMPLEXE.PUISSANCE ## Renvoie un nombre complexe élevé à une puissance entière. +IMPRODUCT = COMPLEXE.PRODUIT ## Renvoie le produit de plusieurs nombres complexes. +IMREAL = COMPLEXE.REEL ## Renvoie le coefficient réel d’un nombre complexe. +IMSIN = COMPLEXE.SIN ## Renvoie le sinus d’un nombre complexe. +IMSQRT = COMPLEXE.RACINE ## Renvoie la racine carrée d’un nombre complexe. +IMSUB = COMPLEXE.DIFFERENCE ## Renvoie la différence entre deux nombres complexes. +IMSUM = COMPLEXE.SOMME ## Renvoie la somme de plusieurs nombres complexes. +OCT2BIN = OCTBIN ## Convertit un nombre octal en nombre binaire. +OCT2DEC = OCTDEC ## Convertit un nombre octal en nombre décimal. +OCT2HEX = OCTHEX ## Convertit un nombre octal en nombre hexadécimal. + + +## +## Financial functions Fonctions financières +## +ACCRINT = INTERET.ACC ## Renvoie l’intérêt couru non échu d’un titre dont l’intérêt est perçu périodiquement. +ACCRINTM = INTERET.ACC.MAT ## Renvoie l’intérêt couru non échu d’un titre dont l’intérêt est perçu à l’échéance. +AMORDEGRC = AMORDEGRC ## Renvoie l’amortissement correspondant à chaque période comptable en utilisant un coefficient d’amortissement. +AMORLINC = AMORLINC ## Renvoie l’amortissement d’un bien à la fin d’une période fiscale donnée. +COUPDAYBS = NB.JOURS.COUPON.PREC ## Renvoie le nombre de jours entre le début de la période de coupon et la date de liquidation. +COUPDAYS = NB.JOURS.COUPONS ## Renvoie le nombre de jours pour la période du coupon contenant la date de liquidation. +COUPDAYSNC = NB.JOURS.COUPON.SUIV ## Renvoie le nombre de jours entre la date de liquidation et la date du coupon suivant la date de liquidation. +COUPNCD = DATE.COUPON.SUIV ## Renvoie la première date de coupon ultérieure à la date de règlement. +COUPNUM = NB.COUPONS ## Renvoie le nombre de coupons dus entre la date de règlement et la date d’échéance. +COUPPCD = DATE.COUPON.PREC ## Renvoie la date de coupon précédant la date de règlement. +CUMIPMT = CUMUL.INTER ## Renvoie l’intérêt cumulé payé sur un emprunt entre deux périodes. +CUMPRINC = CUMUL.PRINCPER ## Renvoie le montant cumulé des remboursements du capital d’un emprunt effectués entre deux périodes. +DB = DB ## Renvoie l’amortissement d’un bien pour une période spécifiée en utilisant la méthode de l’amortissement dégressif à taux fixe. +DDB = DDB ## Renvoie l’amortissement d’un bien pour toute période spécifiée, en utilisant la méthode de l’amortissement dégressif à taux double ou selon un coefficient à spécifier. +DISC = TAUX.ESCOMPTE ## Calcule le taux d’escompte d’une transaction. +DOLLARDE = PRIX.DEC ## Convertit un prix en euros, exprimé sous forme de fraction, en un prix en euros exprimé sous forme de nombre décimal. +DOLLARFR = PRIX.FRAC ## Convertit un prix en euros, exprimé sous forme de nombre décimal, en un prix en euros exprimé sous forme de fraction. +DURATION = DUREE ## Renvoie la durée, en années, d’un titre dont l’intérêt est perçu périodiquement. +EFFECT = TAUX.EFFECTIF ## Renvoie le taux d’intérêt annuel effectif. +FV = VC ## Renvoie la valeur future d’un investissement. +FVSCHEDULE = VC.PAIEMENTS ## Calcule la valeur future d’un investissement en appliquant une série de taux d’intérêt composites. +INTRATE = TAUX.INTERET ## Affiche le taux d’intérêt d’un titre totalement investi. +IPMT = INTPER ## Calcule le montant des intérêts d’un investissement pour une période donnée. +IRR = TRI ## Calcule le taux de rentabilité interne d’un investissement pour une succession de trésoreries. +ISPMT = ISPMT ## Calcule le montant des intérêts d’un investissement pour une période donnée. +MDURATION = DUREE.MODIFIEE ## Renvoie la durée de Macauley modifiée pour un titre ayant une valeur nominale hypothétique de 100_euros. +MIRR = TRIM ## Calcule le taux de rentabilité interne lorsque les paiements positifs et négatifs sont financés à des taux différents. +NOMINAL = TAUX.NOMINAL ## Calcule le taux d’intérêt nominal annuel. +NPER = NPM ## Renvoie le nombre de versements nécessaires pour rembourser un emprunt. +NPV = VAN ## Calcule la valeur actuelle nette d’un investissement basé sur une série de décaissements et un taux d’escompte. +ODDFPRICE = PRIX.PCOUPON.IRREG ## Renvoie le prix par tranche de valeur nominale de 100 euros d’un titre dont la première période de coupon est irrégulière. +ODDFYIELD = REND.PCOUPON.IRREG ## Renvoie le taux de rendement d’un titre dont la première période de coupon est irrégulière. +ODDLPRICE = PRIX.DCOUPON.IRREG ## Renvoie le prix par tranche de valeur nominale de 100 euros d’un titre dont la première période de coupon est irrégulière. +ODDLYIELD = REND.DCOUPON.IRREG ## Renvoie le taux de rendement d’un titre dont la dernière période de coupon est irrégulière. +PMT = VPM ## Calcule le paiement périodique d’un investissement donné. +PPMT = PRINCPER ## Calcule, pour une période donnée, la part de remboursement du principal d’un investissement. +PRICE = PRIX.TITRE ## Renvoie le prix d’un titre rapportant des intérêts périodiques, pour une valeur nominale de 100 euros. +PRICEDISC = VALEUR.ENCAISSEMENT ## Renvoie la valeur d’encaissement d’un escompte commercial, pour une valeur nominale de 100 euros. +PRICEMAT = PRIX.TITRE.ECHEANCE ## Renvoie le prix d’un titre dont la valeur nominale est 100 euros et qui rapporte des intérêts à l’échéance. +PV = PV ## Calcule la valeur actuelle d’un investissement. +RATE = TAUX ## Calcule le taux d’intérêt par période pour une annuité. +RECEIVED = VALEUR.NOMINALE ## Renvoie la valeur nominale à échéance d’un effet de commerce. +SLN = AMORLIN ## Calcule l’amortissement linéaire d’un bien pour une période donnée. +SYD = SYD ## Calcule l’amortissement d’un bien pour une période donnée sur la base de la méthode américaine Sum-of-Years Digits (amortissement dégressif à taux décroissant appliqué à une valeur constante). +TBILLEQ = TAUX.ESCOMPTE.R ## Renvoie le taux d’escompte rationnel d’un bon du Trésor. +TBILLPRICE = PRIX.BON.TRESOR ## Renvoie le prix d’un bon du Trésor d’une valeur nominale de 100 euros. +TBILLYIELD = RENDEMENT.BON.TRESOR ## Calcule le taux de rendement d’un bon du Trésor. +VDB = VDB ## Renvoie l’amortissement d’un bien pour une période spécifiée ou partielle en utilisant une méthode de l’amortissement dégressif à taux fixe. +XIRR = TRI.PAIEMENTS ## Calcule le taux de rentabilité interne d’un ensemble de paiements non périodiques. +XNPV = VAN.PAIEMENTS ## Renvoie la valeur actuelle nette d’un ensemble de paiements non périodiques. +YIELD = RENDEMENT.TITRE ## Calcule le rendement d’un titre rapportant des intérêts périodiquement. +YIELDDISC = RENDEMENT.SIMPLE ## Calcule le taux de rendement d’un emprunt à intérêt simple (par exemple, un bon du Trésor). +YIELDMAT = RENDEMENT.TITRE.ECHEANCE ## Renvoie le rendement annuel d’un titre qui rapporte des intérêts à l’échéance. + + +## +## Information functions Fonctions d’information +## +CELL = CELLULE ## Renvoie des informations sur la mise en forme, l’emplacement et le contenu d’une cellule. +ERROR.TYPE = TYPE.ERREUR ## Renvoie un nombre correspondant à un type d’erreur. +INFO = INFORMATIONS ## Renvoie des informations sur l’environnement d’exploitation actuel. +ISBLANK = ESTVIDE ## Renvoie VRAI si l’argument valeur est vide. +ISERR = ESTERR ## Renvoie VRAI si l’argument valeur fait référence à une valeur d’erreur, sauf #N/A. +ISERROR = ESTERREUR ## Renvoie VRAI si l’argument valeur fait référence à une valeur d’erreur. +ISEVEN = EST.PAIR ## Renvoie VRAI si le chiffre est pair. +ISLOGICAL = ESTLOGIQUE ## Renvoie VRAI si l’argument valeur fait référence à une valeur logique. +ISNA = ESTNA ## Renvoie VRAI si l’argument valeur fait référence à la valeur d’erreur #N/A. +ISNONTEXT = ESTNONTEXTE ## Renvoie VRAI si l’argument valeur ne se présente pas sous forme de texte. +ISNUMBER = ESTNUM ## Renvoie VRAI si l’argument valeur représente un nombre. +ISODD = EST.IMPAIR ## Renvoie VRAI si le chiffre est impair. +ISREF = ESTREF ## Renvoie VRAI si l’argument valeur est une référence. +ISTEXT = ESTTEXTE ## Renvoie VRAI si l’argument valeur se présente sous forme de texte. +N = N ## Renvoie une valeur convertie en nombre. +NA = NA ## Renvoie la valeur d’erreur #N/A. +TYPE = TYPE ## Renvoie un nombre indiquant le type de données d’une valeur. + + +## +## Logical functions Fonctions logiques +## +AND = ET ## Renvoie VRAI si tous ses arguments sont VRAI. +FALSE = FAUX ## Renvoie la valeur logique FAUX. +IF = SI ## Spécifie un test logique à effectuer. +IFERROR = SIERREUR ## Renvoie une valeur que vous spécifiez si une formule génère une erreur ; sinon, elle renvoie le résultat de la formule. +NOT = NON ## Inverse la logique de cet argument. +OR = OU ## Renvoie VRAI si un des arguments est VRAI. +TRUE = VRAI ## Renvoie la valeur logique VRAI. + + +## +## Lookup and reference functions Fonctions de recherche et de référence +## +ADDRESS = ADRESSE ## Renvoie une référence sous forme de texte à une seule cellule d’une feuille de calcul. +AREAS = ZONES ## Renvoie le nombre de zones dans une référence. +CHOOSE = CHOISIR ## Choisit une valeur dans une liste. +COLUMN = COLONNE ## Renvoie le numéro de colonne d’une référence. +COLUMNS = COLONNES ## Renvoie le nombre de colonnes dans une référence. +HLOOKUP = RECHERCHEH ## Effectue une recherche dans la première ligne d’une matrice et renvoie la valeur de la cellule indiquée. +HYPERLINK = LIEN_HYPERTEXTE ## Crée un raccourci ou un renvoi qui ouvre un document stocké sur un serveur réseau, sur un réseau Intranet ou sur Internet. +INDEX = INDEX ## Utilise un index pour choisir une valeur provenant d’une référence ou d’une matrice. +INDIRECT = INDIRECT ## Renvoie une référence indiquée par une valeur de texte. +LOOKUP = RECHERCHE ## Recherche des valeurs dans un vecteur ou une matrice. +MATCH = EQUIV ## Recherche des valeurs dans une référence ou une matrice. +OFFSET = DECALER ## Renvoie une référence décalée par rapport à une référence donnée. +ROW = LIGNE ## Renvoie le numéro de ligne d’une référence. +ROWS = LIGNES ## Renvoie le nombre de lignes dans une référence. +RTD = RTD ## Extrait les données en temps réel à partir d’un programme prenant en charge l’automation COM (Automation : utilisation des objets d'une application à partir d'une autre application ou d'un autre outil de développement. Autrefois appelée OLE Automation, Automation est une norme industrielle et une fonctionnalité du modèle d'objet COM (Component Object Model).). +TRANSPOSE = TRANSPOSE ## Renvoie la transposition d’une matrice. +VLOOKUP = RECHERCHEV ## Effectue une recherche dans la première colonne d’une matrice et se déplace sur la ligne pour renvoyer la valeur d’une cellule. + + +## +## Math and trigonometry functions Fonctions mathématiques et trigonométriques +## +ABS = ABS ## Renvoie la valeur absolue d’un nombre. +ACOS = ACOS ## Renvoie l’arccosinus d’un nombre. +ACOSH = ACOSH ## Renvoie le cosinus hyperbolique inverse d’un nombre. +ASIN = ASIN ## Renvoie l’arcsinus d’un nombre. +ASINH = ASINH ## Renvoie le sinus hyperbolique inverse d’un nombre. +ATAN = ATAN ## Renvoie l’arctangente d’un nombre. +ATAN2 = ATAN2 ## Renvoie l’arctangente des coordonnées x et y. +ATANH = ATANH ## Renvoie la tangente hyperbolique inverse d’un nombre. +CEILING = PLAFOND ## Arrondit un nombre au nombre entier le plus proche ou au multiple le plus proche de l’argument précision en s’éloignant de zéro. +COMBIN = COMBIN ## Renvoie le nombre de combinaisons que l’on peut former avec un nombre donné d’objets. +COS = COS ## Renvoie le cosinus d’un nombre. +COSH = COSH ## Renvoie le cosinus hyperbolique d’un nombre. +DEGREES = DEGRES ## Convertit des radians en degrés. +EVEN = PAIR ## Arrondit un nombre au nombre entier pair le plus proche en s’éloignant de zéro. +EXP = EXP ## Renvoie e élevé à la puissance d’un nombre donné. +FACT = FACT ## Renvoie la factorielle d’un nombre. +FACTDOUBLE = FACTDOUBLE ## Renvoie la factorielle double d’un nombre. +FLOOR = PLANCHER ## Arrondit un nombre en tendant vers 0 (zéro). +GCD = PGCD ## Renvoie le plus grand commun diviseur. +INT = ENT ## Arrondit un nombre à l’entier immédiatement inférieur. +LCM = PPCM ## Renvoie le plus petit commun multiple. +LN = LN ## Renvoie le logarithme népérien d’un nombre. +LOG = LOG ## Renvoie le logarithme d’un nombre dans la base spécifiée. +LOG10 = LOG10 ## Calcule le logarithme en base 10 d’un nombre. +MDETERM = DETERMAT ## Renvoie le déterminant d’une matrice. +MINVERSE = INVERSEMAT ## Renvoie la matrice inverse d’une matrice. +MMULT = PRODUITMAT ## Renvoie le produit de deux matrices. +MOD = MOD ## Renvoie le reste d’une division. +MROUND = ARRONDI.AU.MULTIPLE ## Donne l’arrondi d’un nombre au multiple spécifié. +MULTINOMIAL = MULTINOMIALE ## Calcule la multinomiale d’un ensemble de nombres. +ODD = IMPAIR ## Renvoie le nombre, arrondi à la valeur du nombre entier impair le plus proche en s’éloignant de zéro. +PI = PI ## Renvoie la valeur de pi. +POWER = PUISSANCE ## Renvoie la valeur du nombre élevé à une puissance. +PRODUCT = PRODUIT ## Multiplie ses arguments. +QUOTIENT = QUOTIENT ## Renvoie la partie entière du résultat d’une division. +RADIANS = RADIANS ## Convertit des degrés en radians. +RAND = ALEA ## Renvoie un nombre aléatoire compris entre 0 et 1. +RANDBETWEEN = ALEA.ENTRE.BORNES ## Renvoie un nombre aléatoire entre les nombres que vous spécifiez. +ROMAN = ROMAIN ## Convertit des chiffres arabes en chiffres romains, sous forme de texte. +ROUND = ARRONDI ## Arrondit un nombre au nombre de chiffres indiqué. +ROUNDDOWN = ARRONDI.INF ## Arrondit un nombre en tendant vers 0 (zéro). +ROUNDUP = ARRONDI.SUP ## Arrondit un nombre à l’entier supérieur, en s’éloignant de zéro. +SERIESSUM = SOMME.SERIES ## Renvoie la somme d’une série géométrique en s’appuyant sur la formule suivante : +SIGN = SIGNE ## Renvoie le signe d’un nombre. +SIN = SIN ## Renvoie le sinus d’un angle donné. +SINH = SINH ## Renvoie le sinus hyperbolique d’un nombre. +SQRT = RACINE ## Renvoie la racine carrée d’un nombre. +SQRTPI = RACINE.PI ## Renvoie la racine carrée de (nombre * pi). +SUBTOTAL = SOUS.TOTAL ## Renvoie un sous-total dans une liste ou une base de données. +SUM = SOMME ## Calcule la somme de ses arguments. +SUMIF = SOMME.SI ## Additionne les cellules spécifiées si elles répondent à un critère donné. +SUMIFS = SOMME.SI.ENS ## Ajoute les cellules d’une plage qui répondent à plusieurs critères. +SUMPRODUCT = SOMMEPROD ## Multiplie les valeurs correspondantes des matrices spécifiées et calcule la somme de ces produits. +SUMSQ = SOMME.CARRES ## Renvoie la somme des carrés des arguments. +SUMX2MY2 = SOMME.X2MY2 ## Renvoie la somme de la différence des carrés des valeurs correspondantes de deux matrices. +SUMX2PY2 = SOMME.X2PY2 ## Renvoie la somme de la somme des carrés des valeurs correspondantes de deux matrices. +SUMXMY2 = SOMME.XMY2 ## Renvoie la somme des carrés des différences entre les valeurs correspondantes de deux matrices. +TAN = TAN ## Renvoie la tangente d’un nombre. +TANH = TANH ## Renvoie la tangente hyperbolique d’un nombre. +TRUNC = TRONQUE ## Renvoie la partie entière d’un nombre. + + +## +## Statistical functions Fonctions statistiques +## +AVEDEV = ECART.MOYEN ## Renvoie la moyenne des écarts absolus observés dans la moyenne des points de données. +AVERAGE = MOYENNE ## Renvoie la moyenne de ses arguments. +AVERAGEA = AVERAGEA ## Renvoie la moyenne de ses arguments, nombres, texte et valeurs logiques inclus. +AVERAGEIF = MOYENNE.SI ## Renvoie la moyenne (arithmétique) de toutes les cellules d’une plage qui répondent à des critères donnés. +AVERAGEIFS = MOYENNE.SI.ENS ## Renvoie la moyenne (arithmétique) de toutes les cellules qui répondent à plusieurs critères. +BETADIST = LOI.BETA ## Renvoie la fonction de distribution cumulée. +BETAINV = BETA.INVERSE ## Renvoie l’inverse de la fonction de distribution cumulée pour une distribution bêta spécifiée. +BINOMDIST = LOI.BINOMIALE ## Renvoie la probabilité d’une variable aléatoire discrète suivant la loi binomiale. +CHIDIST = LOI.KHIDEUX ## Renvoie la probabilité unilatérale de la distribution khi-deux. +CHIINV = KHIDEUX.INVERSE ## Renvoie l’inverse de la probabilité unilatérale de la distribution khi-deux. +CHITEST = TEST.KHIDEUX ## Renvoie le test d’indépendance. +CONFIDENCE = INTERVALLE.CONFIANCE ## Renvoie l’intervalle de confiance pour une moyenne de population. +CORREL = COEFFICIENT.CORRELATION ## Renvoie le coefficient de corrélation entre deux séries de données. +COUNT = NB ## Détermine les nombres compris dans la liste des arguments. +COUNTA = NBVAL ## Détermine le nombre de valeurs comprises dans la liste des arguments. +COUNTBLANK = NB.VIDE ## Compte le nombre de cellules vides dans une plage. +COUNTIF = NB.SI ## Compte le nombre de cellules qui répondent à un critère donné dans une plage. +COUNTIFS = NB.SI.ENS ## Compte le nombre de cellules à l’intérieur d’une plage qui répondent à plusieurs critères. +COVAR = COVARIANCE ## Renvoie la covariance, moyenne des produits des écarts pour chaque série d’observations. +CRITBINOM = CRITERE.LOI.BINOMIALE ## Renvoie la plus petite valeur pour laquelle la distribution binomiale cumulée est inférieure ou égale à une valeur de critère. +DEVSQ = SOMME.CARRES.ECARTS ## Renvoie la somme des carrés des écarts. +EXPONDIST = LOI.EXPONENTIELLE ## Renvoie la distribution exponentielle. +FDIST = LOI.F ## Renvoie la distribution de probabilité F. +FINV = INVERSE.LOI.F ## Renvoie l’inverse de la distribution de probabilité F. +FISHER = FISHER ## Renvoie la transformation de Fisher. +FISHERINV = FISHER.INVERSE ## Renvoie l’inverse de la transformation de Fisher. +FORECAST = PREVISION ## Calcule une valeur par rapport à une tendance linéaire. +FREQUENCY = FREQUENCE ## Calcule la fréquence d’apparition des valeurs dans une plage de valeurs, puis renvoie des nombres sous forme de matrice verticale. +FTEST = TEST.F ## Renvoie le résultat d’un test F. +GAMMADIST = LOI.GAMMA ## Renvoie la probabilité d’une variable aléatoire suivant une loi Gamma. +GAMMAINV = LOI.GAMMA.INVERSE ## Renvoie, pour une probabilité donnée, la valeur d’une variable aléatoire suivant une loi Gamma. +GAMMALN = LNGAMMA ## Renvoie le logarithme népérien de la fonction Gamma, G(x) +GEOMEAN = MOYENNE.GEOMETRIQUE ## Renvoie la moyenne géométrique. +GROWTH = CROISSANCE ## Calcule des valeurs par rapport à une tendance exponentielle. +HARMEAN = MOYENNE.HARMONIQUE ## Renvoie la moyenne harmonique. +HYPGEOMDIST = LOI.HYPERGEOMETRIQUE ## Renvoie la probabilité d’une variable aléatoire discrète suivant une loi hypergéométrique. +INTERCEPT = ORDONNEE.ORIGINE ## Renvoie l’ordonnée à l’origine d’une droite de régression linéaire. +KURT = KURTOSIS ## Renvoie le kurtosis d’une série de données. +LARGE = GRANDE.VALEUR ## Renvoie la k-ième plus grande valeur d’une série de données. +LINEST = DROITEREG ## Renvoie les paramètres d’une tendance linéaire. +LOGEST = LOGREG ## Renvoie les paramètres d’une tendance exponentielle. +LOGINV = LOI.LOGNORMALE.INVERSE ## Renvoie l’inverse de la probabilité pour une variable aléatoire suivant la loi lognormale. +LOGNORMDIST = LOI.LOGNORMALE ## Renvoie la probabilité d’une variable aléatoire continue suivant une loi lognormale. +MAX = MAX ## Renvoie la valeur maximale contenue dans une liste d’arguments. +MAXA = MAXA ## Renvoie la valeur maximale d’une liste d’arguments, nombres, texte et valeurs logiques inclus. +MEDIAN = MEDIANE ## Renvoie la valeur médiane des nombres donnés. +MIN = MIN ## Renvoie la valeur minimale contenue dans une liste d’arguments. +MINA = MINA ## Renvoie la plus petite valeur d’une liste d’arguments, nombres, texte et valeurs logiques inclus. +MODE = MODE ## Renvoie la valeur la plus courante d’une série de données. +NEGBINOMDIST = LOI.BINOMIALE.NEG ## Renvoie la probabilité d’une variable aléatoire discrète suivant une loi binomiale négative. +NORMDIST = LOI.NORMALE ## Renvoie la probabilité d’une variable aléatoire continue suivant une loi normale. +NORMINV = LOI.NORMALE.INVERSE ## Renvoie, pour une probabilité donnée, la valeur d’une variable aléatoire suivant une loi normale standard. +NORMSDIST = LOI.NORMALE.STANDARD ## Renvoie la probabilité d’une variable aléatoire continue suivant une loi normale standard. +NORMSINV = LOI.NORMALE.STANDARD.INVERSE ## Renvoie l’inverse de la distribution cumulée normale standard. +PEARSON = PEARSON ## Renvoie le coefficient de corrélation d’échantillonnage de Pearson. +PERCENTILE = CENTILE ## Renvoie le k-ième centile des valeurs d’une plage. +PERCENTRANK = RANG.POURCENTAGE ## Renvoie le rang en pourcentage d’une valeur d’une série de données. +PERMUT = PERMUTATION ## Renvoie le nombre de permutations pour un nombre donné d’objets. +POISSON = LOI.POISSON ## Renvoie la probabilité d’une variable aléatoire suivant une loi de Poisson. +PROB = PROBABILITE ## Renvoie la probabilité que des valeurs d’une plage soient comprises entre deux limites. +QUARTILE = QUARTILE ## Renvoie le quartile d’une série de données. +RANK = RANG ## Renvoie le rang d’un nombre contenu dans une liste. +RSQ = COEFFICIENT.DETERMINATION ## Renvoie la valeur du coefficient de détermination R^2 d’une régression linéaire. +SKEW = COEFFICIENT.ASYMETRIE ## Renvoie l’asymétrie d’une distribution. +SLOPE = PENTE ## Renvoie la pente d’une droite de régression linéaire. +SMALL = PETITE.VALEUR ## Renvoie la k-ième plus petite valeur d’une série de données. +STANDARDIZE = CENTREE.REDUITE ## Renvoie une valeur centrée réduite. +STDEV = ECARTYPE ## Évalue l’écart type d’une population en se basant sur un échantillon de cette population. +STDEVA = STDEVA ## Évalue l’écart type d’une population en se basant sur un échantillon de cette population, nombres, texte et valeurs logiques inclus. +STDEVP = ECARTYPEP ## Calcule l’écart type d’une population à partir de la population entière. +STDEVPA = STDEVPA ## Calcule l’écart type d’une population à partir de l’ensemble de la population, nombres, texte et valeurs logiques inclus. +STEYX = ERREUR.TYPE.XY ## Renvoie l’erreur type de la valeur y prévue pour chaque x de la régression. +TDIST = LOI.STUDENT ## Renvoie la probabilité d’une variable aléatoire suivant une loi T de Student. +TINV = LOI.STUDENT.INVERSE ## Renvoie, pour une probabilité donnée, la valeur d’une variable aléatoire suivant une loi T de Student. +TREND = TENDANCE ## Renvoie des valeurs par rapport à une tendance linéaire. +TRIMMEAN = MOYENNE.REDUITE ## Renvoie la moyenne de l’intérieur d’une série de données. +TTEST = TEST.STUDENT ## Renvoie la probabilité associée à un test T de Student. +VAR = VAR ## Calcule la variance sur la base d’un échantillon. +VARA = VARA ## Estime la variance d’une population en se basant sur un échantillon de cette population, nombres, texte et valeurs logiques incluses. +VARP = VAR.P ## Calcule la variance sur la base de l’ensemble de la population. +VARPA = VARPA ## Calcule la variance d’une population en se basant sur la population entière, nombres, texte et valeurs logiques inclus. +WEIBULL = LOI.WEIBULL ## Renvoie la probabilité d’une variable aléatoire suivant une loi de Weibull. +ZTEST = TEST.Z ## Renvoie la valeur de probabilité unilatérale d’un test z. + + +## +## Text functions Fonctions de texte +## +ASC = ASC ## Change les caractères anglais ou katakana à pleine chasse (codés sur deux octets) à l’intérieur d’une chaîne de caractères en caractères à demi-chasse (codés sur un octet). +BAHTTEXT = BAHTTEXT ## Convertit un nombre en texte en utilisant le format monétaire ß (baht). +CHAR = CAR ## Renvoie le caractère spécifié par le code numérique. +CLEAN = EPURAGE ## Supprime tous les caractères de contrôle du texte. +CODE = CODE ## Renvoie le numéro de code du premier caractère du texte. +CONCATENATE = CONCATENER ## Assemble plusieurs éléments textuels de façon à n’en former qu’un seul. +DOLLAR = EURO ## Convertit un nombre en texte en utilisant le format monétaire € (euro). +EXACT = EXACT ## Vérifie si deux valeurs de texte sont identiques. +FIND = TROUVE ## Trouve un valeur textuelle dans une autre, en respectant la casse. +FINDB = TROUVERB ## Trouve un valeur textuelle dans une autre, en respectant la casse. +FIXED = CTXT ## Convertit un nombre au format texte avec un nombre de décimales spécifié. +JIS = JIS ## Change les caractères anglais ou katakana à demi-chasse (codés sur un octet) à l’intérieur d’une chaîne de caractères en caractères à à pleine chasse (codés sur deux octets). +LEFT = GAUCHE ## Renvoie des caractères situés à l’extrême gauche d’une chaîne de caractères. +LEFTB = GAUCHEB ## Renvoie des caractères situés à l’extrême gauche d’une chaîne de caractères. +LEN = NBCAR ## Renvoie le nombre de caractères contenus dans une chaîne de texte. +LENB = LENB ## Renvoie le nombre de caractères contenus dans une chaîne de texte. +LOWER = MINUSCULE ## Convertit le texte en minuscules. +MID = STXT ## Renvoie un nombre déterminé de caractères d’une chaîne de texte à partir de la position que vous indiquez. +MIDB = STXTB ## Renvoie un nombre déterminé de caractères d’une chaîne de texte à partir de la position que vous indiquez. +PHONETIC = PHONETIQUE ## Extrait les caractères phonétiques (furigana) d’une chaîne de texte. +PROPER = NOMPROPRE ## Met en majuscules la première lettre de chaque mot dans une chaîne textuelle. +REPLACE = REMPLACER ## Remplace des caractères dans un texte. +REPLACEB = REMPLACERB ## Remplace des caractères dans un texte. +REPT = REPT ## Répète un texte un certain nombre de fois. +RIGHT = DROITE ## Renvoie des caractères situés à l’extrême droite d’une chaîne de caractères. +RIGHTB = DROITEB ## Renvoie des caractères situés à l’extrême droite d’une chaîne de caractères. +SEARCH = CHERCHE ## Trouve un texte dans un autre texte (sans respecter la casse). +SEARCHB = CHERCHERB ## Trouve un texte dans un autre texte (sans respecter la casse). +SUBSTITUTE = SUBSTITUE ## Remplace l’ancien texte d’une chaîne de caractères par un nouveau. +T = T ## Convertit ses arguments en texte. +TEXT = TEXTE ## Convertit un nombre au format texte. +TRIM = SUPPRESPACE ## Supprime les espaces du texte. +UPPER = MAJUSCULE ## Convertit le texte en majuscules. +VALUE = CNUM ## Convertit un argument textuel en nombre diff --git a/PHPExcel/locale/hu/config b/PHPExcel/locale/hu/config new file mode 100644 index 0000000..e04151c --- /dev/null +++ b/PHPExcel/locale/hu/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = Ft + + +## +## Excel Error Codes (For future use) +## +NULL = #NULLA! +DIV0 = #ZÉRÓOSZTÓ! +VALUE = #ÉRTÉK! +REF = #HIV! +NAME = #NÉV? +NUM = #SZÁM! +NA = #HIÁNYZIK diff --git a/PHPExcel/locale/hu/functions b/PHPExcel/locale/hu/functions new file mode 100644 index 0000000..77cae92 --- /dev/null +++ b/PHPExcel/locale/hu/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Bővítmények és automatizálási függvények +## +GETPIVOTDATA = KIMUTATÁSADATOT.VESZ ## A kimutatásokban tárolt adatok visszaadására használható. + + +## +## Cube functions Kockafüggvények +## +CUBEKPIMEMBER = KOCKA.FŐTELJMUT ## Egy fő teljesítménymutató (KPI) nevét, tulajdonságát és mértékegységét adja eredményül, a nevet és a tulajdonságot megjeleníti a cellában. A KPI-k számszerűsíthető mérési lehetőséget jelentenek – ilyen mutató például a havi bruttó nyereség vagy az egy alkalmazottra jutó negyedéves forgalom –, egy szervezet teljesítményének nyomonkövetésére használhatók. +CUBEMEMBER = KOCKA.TAG ## Kockahierachia tagját vagy rekordját adja eredményül. Ellenőrizhető vele, hogy szerepel-e a kockában az adott tag vagy rekord. +CUBEMEMBERPROPERTY = KOCKA.TAG.TUL ## A kocka egyik tagtulajdonságának értékét adja eredményül. Használatával ellenőrizhető, hogy szerepel-e egy tagnév a kockában, eredménye pedig az erre a tagra vonatkozó, megadott tulajdonság. +CUBERANKEDMEMBER = KOCKA.HALM.ELEM ## Egy halmaz rangsor szerinti n-edik tagját adja eredményül. Használatával egy halmaz egy vagy több elemét kaphatja meg, például a legnagyobb teljesítményű üzletkötőt vagy a 10 legjobb tanulót. +CUBESET = KOCKA.HALM ## Számított tagok vagy rekordok halmazát adja eredményül, ehhez egy beállított kifejezést elküld a kiszolgálón található kockának, majd ezt a halmazt adja vissza a Microsoft Office Excel alkalmazásnak. +CUBESETCOUNT = KOCKA.HALM.DB ## Egy halmaz elemszámát adja eredményül. +CUBEVALUE = KOCKA.ÉRTÉK ## Kockából összesített értéket ad eredményül. + + +## +## Database functions Adatbázis-kezelő függvények +## +DAVERAGE = AB.ÁTLAG ## A kijelölt adatbáziselemek átlagát számítja ki. +DCOUNT = AB.DARAB ## Megszámolja, hogy az adatbázisban hány cella tartalmaz számokat. +DCOUNTA = AB.DARAB2 ## Megszámolja az adatbázisban lévő nem üres cellákat. +DGET = AB.MEZŐ ## Egy adatbázisból egyetlen olyan rekordot ad vissza, amely megfelel a megadott feltételeknek. +DMAX = AB.MAX ## A kiválasztott adatbáziselemek közül a legnagyobb értéket adja eredményül. +DMIN = AB.MIN ## A kijelölt adatbáziselemek közül a legkisebb értéket adja eredményül. +DPRODUCT = AB.SZORZAT ## Az adatbázis megadott feltételeknek eleget tevő rekordjaira összeszorozza a megadott mezőben található számértékeket, és eredményül ezt a szorzatot adja. +DSTDEV = AB.SZÓRÁS ## A kijelölt adatbáziselemek egy mintája alapján megbecsüli a szórást. +DSTDEVP = AB.SZÓRÁS2 ## A kijelölt adatbáziselemek teljes sokasága alapján kiszámítja a szórást. +DSUM = AB.SZUM ## Összeadja a feltételnek megfelelő adatbázisrekordok mezőoszlopában a számokat. +DVAR = AB.VAR ## A kijelölt adatbáziselemek mintája alapján becslést ad a szórásnégyzetre. +DVARP = AB.VAR2 ## A kijelölt adatbáziselemek teljes sokasága alapján kiszámítja a szórásnégyzetet. + + +## +## Date and time functions Dátumfüggvények +## +DATE = DÁTUM ## Adott dátum dátumértékét adja eredményül. +DATEVALUE = DÁTUMÉRTÉK ## Szövegként megadott dátumot dátumértékké alakít át. +DAY = NAP ## Dátumértéket a hónap egy napjává (0-31) alakít. +DAYS360 = NAP360 ## Két dátum közé eső napok számát számítja ki a 360 napos év alapján. +EDATE = EDATE ## Adott dátumnál adott számú hónappal korábbi vagy későbbi dátum dátumértékét adja eredményül. +EOMONTH = EOMONTH ## Adott dátumnál adott számú hónappal korábbi vagy későbbi hónap utolsó napjának dátumértékét adja eredményül. +HOUR = ÓRA ## Időértéket órákká alakít. +MINUTE = PERC ## Időértéket percekké alakít. +MONTH = HÓNAP ## Időértéket hónapokká alakít. +NETWORKDAYS = NETWORKDAYS ## Két dátum között a teljes munkanapok számát adja meg. +NOW = MOST ## A napi dátum dátumértékét és a pontos idő időértékét adja eredményül. +SECOND = MPERC ## Időértéket másodpercekké alakít át. +TIME = IDŐ ## Adott időpont időértékét adja meg. +TIMEVALUE = IDŐÉRTÉK ## Szövegként megadott időpontot időértékké alakít át. +TODAY = MA ## A napi dátum dátumértékét adja eredményül. +WEEKDAY = HÉT.NAPJA ## Dátumértéket a hét napjává alakítja át. +WEEKNUM = WEEKNUM ## Visszatérési értéke egy szám, amely azt mutatja meg, hogy a megadott dátum az év hányadik hetére esik. +WORKDAY = WORKDAY ## Adott dátumnál adott munkanappal korábbi vagy későbbi dátum dátumértékét adja eredményül. +YEAR = ÉV ## Sorszámot évvé alakít át. +YEARFRAC = YEARFRAC ## Az adott dátumok közötti teljes napok számát törtévként adja meg. + + +## +## Engineering functions Mérnöki függvények +## +BESSELI = BESSELI ## Az In(x) módosított Bessel-függvény értékét adja eredményül. +BESSELJ = BESSELJ ## A Jn(x) Bessel-függvény értékét adja eredményül. +BESSELK = BESSELK ## A Kn(x) módosított Bessel-függvény értékét adja eredményül. +BESSELY = BESSELY ## Az Yn(x) módosított Bessel-függvény értékét adja eredményül. +BIN2DEC = BIN2DEC ## Bináris számot decimálissá alakít át. +BIN2HEX = BIN2HEX ## Bináris számot hexadecimálissá alakít át. +BIN2OCT = BIN2OCT ## Bináris számot oktálissá alakít át. +COMPLEX = COMPLEX ## Valós és képzetes részből komplex számot képez. +CONVERT = CONVERT ## Mértékegységeket vált át. +DEC2BIN = DEC2BIN ## Decimális számot binárissá alakít át. +DEC2HEX = DEC2HEX ## Decimális számot hexadecimálissá alakít át. +DEC2OCT = DEC2OCT ## Decimális számot oktálissá alakít át. +DELTA = DELTA ## Azt vizsgálja, hogy két érték egyenlő-e. +ERF = ERF ## A hibafüggvény értékét adja eredményül. +ERFC = ERFC ## A kiegészített hibafüggvény értékét adja eredményül. +GESTEP = GESTEP ## Azt vizsgálja, hogy egy szám nagyobb-e adott küszöbértéknél. +HEX2BIN = HEX2BIN ## Hexadecimális számot binárissá alakít át. +HEX2DEC = HEX2DEC ## Hexadecimális számot decimálissá alakít át. +HEX2OCT = HEX2OCT ## Hexadecimális számot oktálissá alakít át. +IMABS = IMABS ## Komplex szám abszolút értékét (modulusát) adja eredményül. +IMAGINARY = IMAGINARY ## Komplex szám képzetes részét adja eredményül. +IMARGUMENT = IMARGUMENT ## A komplex szám radiánban kifejezett théta argumentumát adja eredményül. +IMCONJUGATE = IMCONJUGATE ## Komplex szám komplex konjugáltját adja eredményül. +IMCOS = IMCOS ## Komplex szám koszinuszát adja eredményül. +IMDIV = IMDIV ## Két komplex szám hányadosát adja eredményül. +IMEXP = IMEXP ## Az e szám komplex kitevőjű hatványát adja eredményül. +IMLN = IMLN ## Komplex szám természetes logaritmusát adja eredményül. +IMLOG10 = IMLOG10 ## Komplex szám tízes alapú logaritmusát adja eredményül. +IMLOG2 = IMLOG2 ## Komplex szám kettes alapú logaritmusát adja eredményül. +IMPOWER = IMPOWER ## Komplex szám hatványát adja eredményül. +IMPRODUCT = IMPRODUCT ## Komplex számok szorzatát adja eredményül. +IMREAL = IMREAL ## Komplex szám valós részét adja eredményül. +IMSIN = IMSIN ## Komplex szám szinuszát adja eredményül. +IMSQRT = IMSQRT ## Komplex szám négyzetgyökét adja eredményül. +IMSUB = IMSUB ## Két komplex szám különbségét adja eredményül. +IMSUM = IMSUM ## Komplex számok összegét adja eredményül. +OCT2BIN = OCT2BIN ## Oktális számot binárissá alakít át. +OCT2DEC = OCT2DEC ## Oktális számot decimálissá alakít át. +OCT2HEX = OCT2HEX ## Oktális számot hexadecimálissá alakít át. + + +## +## Financial functions Pénzügyi függvények +## +ACCRINT = ACCRINT ## Periodikusan kamatozó értékpapír felszaporodott kamatát adja eredményül. +ACCRINTM = ACCRINTM ## Lejáratkor kamatozó értékpapír felszaporodott kamatát adja eredményül. +AMORDEGRC = AMORDEGRC ## Állóeszköz lineáris értékcsökkenését adja meg az egyes könyvelési időszakokra vonatkozóan. +AMORLINC = AMORLINC ## Az egyes könyvelési időszakokban az értékcsökkenést adja meg. +COUPDAYBS = COUPDAYBS ## A szelvényidőszak kezdetétől a kifizetés időpontjáig eltelt napokat adja vissza. +COUPDAYS = COUPDAYS ## A kifizetés időpontját magában foglaló szelvényperiódus hosszát adja meg napokban. +COUPDAYSNC = COUPDAYSNC ## A kifizetés időpontja és a legközelebbi szelvénydátum közötti napok számát adja meg. +COUPNCD = COUPNCD ## A kifizetést követő legelső szelvénydátumot adja eredményül. +COUPNUM = COUPNUM ## A kifizetés és a lejárat időpontja között kifizetendő szelvények számát adja eredményül. +COUPPCD = COUPPCD ## A kifizetés előtti utolsó szelvénydátumot adja eredményül. +CUMIPMT = CUMIPMT ## Két fizetési időszak között kifizetett kamat halmozott értékét adja eredményül. +CUMPRINC = CUMPRINC ## Két fizetési időszak között kifizetett részletek halmozott (kamatot nem tartalmazó) értékét adja eredményül. +DB = KCS2 ## Eszköz adott időszak alatti értékcsökkenését számítja ki a lineáris leírási modell alkalmazásával. +DDB = KCSA ## Eszköz értékcsökkenését számítja ki adott időszakra vonatkozóan a progresszív vagy egyéb megadott leírási modell alkalmazásával. +DISC = DISC ## Értékpapír leszámítolási kamatlábát adja eredményül. +DOLLARDE = DOLLARDE ## Egy közönséges törtként megadott számot tizedes törtté alakít át. +DOLLARFR = DOLLARFR ## Tizedes törtként megadott számot közönséges törtté alakít át. +DURATION = DURATION ## Periodikus kamatfizetésű értékpapír éves kamatérzékenységét adja eredményül. +EFFECT = EFFECT ## Az éves tényleges kamatláb értékét adja eredményül. +FV = JBÉ ## Befektetés jövőbeli értékét számítja ki. +FVSCHEDULE = FVSCHEDULE ## A kezdőtőke adott kamatlábak szerint megnövelt jövőbeli értékét adja eredményül. +INTRATE = INTRATE ## A lejáratig teljesen lekötött értékpapír kamatrátáját adja eredményül. +IPMT = RRÉSZLET ## Hiteltörlesztésen belül a tőketörlesztés nagyságát számítja ki adott időszakra. +IRR = BMR ## A befektetés belső megtérülési rátáját számítja ki pénzáramláshoz. +ISPMT = LRÉSZLETKAMAT ## A befektetés adott időszakára fizetett kamatot számítja ki. +MDURATION = MDURATION ## Egy 100 Ft névértékű értékpapír Macauley-féle módosított kamatérzékenységét adja eredményül. +MIRR = MEGTÉRÜLÉS ## A befektetés belső megtérülési rátáját számítja ki a költségek és a bevételek különböző kamatlába mellett. +NOMINAL = NOMINAL ## Az éves névleges kamatláb értékét adja eredményül. +NPER = PER.SZÁM ## A törlesztési időszakok számát adja meg. +NPV = NMÉ ## Befektetéshez kapcsolódó pénzáramlás nettó jelenértékét számítja ki ismert pénzáramlás és kamatláb mellett. +ODDFPRICE = ODDFPRICE ## Egy 100 Ft névértékű, a futamidő elején töredék-időszakos értékpapír árát adja eredményül. +ODDFYIELD = ODDFYIELD ## A futamidő elején töredék-időszakos értékpapír hozamát adja eredményül. +ODDLPRICE = ODDLPRICE ## Egy 100 Ft névértékű, a futamidő végén töredék-időszakos értékpapír árát adja eredményül. +ODDLYIELD = ODDLYIELD ## A futamidő végén töredék-időszakos értékpapír hozamát adja eredményül. +PMT = RÉSZLET ## A törlesztési időszakra vonatkozó törlesztési összeget számítja ki. +PPMT = PRÉSZLET ## Hiteltörlesztésen belül a tőketörlesztés nagyságát számítja ki adott időszakra. +PRICE = PRICE ## Egy 100 Ft névértékű, periodikusan kamatozó értékpapír árát adja eredményül. +PRICEDISC = PRICEDISC ## Egy 100 Ft névértékű leszámítolt értékpapír árát adja eredményül. +PRICEMAT = PRICEMAT ## Egy 100 Ft névértékű, a lejáratkor kamatozó értékpapír árát adja eredményül. +PV = MÉ ## Befektetés jelenlegi értékét számítja ki. +RATE = RÁTA ## Egy törlesztési időszakban az egy időszakra eső kamatláb nagyságát számítja ki. +RECEIVED = RECEIVED ## A lejáratig teljesen lekötött értékpapír lejáratakor kapott összegét adja eredményül. +SLN = LCSA ## Tárgyi eszköz egy időszakra eső amortizációját adja meg bruttó érték szerinti lineáris leírási kulcsot alkalmazva. +SYD = SYD ## Tárgyi eszköz értékcsökkenését számítja ki adott időszakra az évek számjegyösszegével dolgozó módszer alapján. +TBILLEQ = TBILLEQ ## Kincstárjegy kötvény-egyenértékű hozamát adja eredményül. +TBILLPRICE = TBILLPRICE ## Egy 100 Ft névértékű kincstárjegy árát adja eredményül. +TBILLYIELD = TBILLYIELD ## Kincstárjegy hozamát adja eredményül. +VDB = ÉCSRI ## Tárgyi eszköz amortizációját számítja ki megadott vagy részidőszakra a csökkenő egyenleg módszerének alkalmazásával. +XIRR = XIRR ## Ütemezett készpénzforgalom (cash flow) belső megtérülési kamatrátáját adja eredményül. +XNPV = XNPV ## Ütemezett készpénzforgalom (cash flow) nettó jelenlegi értékét adja eredményül. +YIELD = YIELD ## Periodikusan kamatozó értékpapír hozamát adja eredményül. +YIELDDISC = YIELDDISC ## Leszámítolt értékpapír (például kincstárjegy) éves hozamát adja eredményül. +YIELDMAT = YIELDMAT ## Lejáratkor kamatozó értékpapír éves hozamát adja eredményül. + + +## +## Information functions Információs függvények +## +CELL = CELLA ## Egy cella formátumára, elhelyezkedésére vagy tartalmára vonatkozó adatokat ad eredményül. +ERROR.TYPE = HIBA.TÍPUS ## Egy hibatípushoz tartozó számot ad eredményül. +INFO = INFÓ ## A rendszer- és munkakörnyezet pillanatnyi állapotáról ad felvilágosítást. +ISBLANK = ÜRES ## Eredménye IGAZ, ha az érték üres. +ISERR = HIBA ## Eredménye IGAZ, ha az érték valamelyik hibaérték a #HIÁNYZIK kivételével. +ISERROR = HIBÁS ## Eredménye IGAZ, ha az érték valamelyik hibaérték. +ISEVEN = ISEVEN ## Eredménye IGAZ, ha argumentuma páros szám. +ISLOGICAL = LOGIKAI ## Eredménye IGAZ, ha az érték logikai érték. +ISNA = NINCS ## Eredménye IGAZ, ha az érték a #HIÁNYZIK hibaérték. +ISNONTEXT = NEM.SZÖVEG ## Eredménye IGAZ, ha az érték nem szöveg. +ISNUMBER = SZÁM ## Eredménye IGAZ, ha az érték szám. +ISODD = ISODD ## Eredménye IGAZ, ha argumentuma páratlan szám. +ISREF = HIVATKOZÁS ## Eredménye IGAZ, ha az érték hivatkozás. +ISTEXT = SZÖVEG.E ## Eredménye IGAZ, ha az érték szöveg. +N = N ## Argumentumának értékét számmá alakítja. +NA = HIÁNYZIK ## Eredménye a #HIÁNYZIK hibaérték. +TYPE = TÍPUS ## Érték adattípusának azonosítószámát adja eredményül. + + +## +## Logical functions Logikai függvények +## +AND = ÉS ## Eredménye IGAZ, ha minden argumentuma IGAZ. +FALSE = HAMIS ## A HAMIS logikai értéket adja eredményül. +IF = HA ## Logikai vizsgálatot hajt végre. +IFERROR = HAHIBA ## A megadott értéket adja vissza, ha egy képlet hibához vezet; más esetben a képlet értékét adja eredményül. +NOT = NEM ## Argumentuma értékének ellentettjét adja eredményül. +OR = VAGY ## Eredménye IGAZ, ha bármely argumentuma IGAZ. +TRUE = IGAZ ## Az IGAZ logikai értéket adja eredményül. + + +## +## Lookup and reference functions Keresési és hivatkozási függvények +## +ADDRESS = CÍM ## A munkalap egy cellájára való hivatkozást adja szövegként eredményül. +AREAS = TERÜLET ## Hivatkozásban a területek számát adja eredményül. +CHOOSE = VÁLASZT ## Értékek listájából választ ki egy elemet. +COLUMN = OSZLOP ## Egy hivatkozás oszlopszámát adja eredményül. +COLUMNS = OSZLOPOK ## A hivatkozásban található oszlopok számát adja eredményül. +HLOOKUP = VKERES ## A megadott tömb felső sorában adott értékű elemet keres, és a megtalált elem oszlopából adott sorban elhelyezkedő értékkel tér vissza. +HYPERLINK = HIPERHIVATKOZÁS ## Hálózati kiszolgálón, intraneten vagy az interneten tárolt dokumentumot megnyitó parancsikont vagy hivatkozást hoz létre. +INDEX = INDEX ## Tömb- vagy hivatkozás indexszel megadott értékét adja vissza. +INDIRECT = INDIREKT ## Szöveg megadott hivatkozást ad eredményül. +LOOKUP = KERES ## Vektorban vagy tömbben keres meg értékeket. +MATCH = HOL.VAN ## Hivatkozásban vagy tömbben értékeket keres. +OFFSET = OFSZET ## Hivatkozás egy másik hivatkozástól számított távolságát adja meg. +ROW = SOR ## Egy hivatkozás sorának számát adja meg. +ROWS = SOROK ## Egy hivatkozás sorainak számát adja meg. +RTD = RTD ## Valós idejű adatokat keres vissza a COM automatizmust (automatizálás: Egy alkalmazás objektumaival való munka másik alkalmazásból vagy fejlesztőeszközből. A korábban OLE automatizmusnak nevezett automatizálás iparági szabvány, a Component Object Model (COM) szolgáltatása.) támogató programból. +TRANSPOSE = TRANSZPONÁLÁS ## Egy tömb transzponáltját adja eredményül. +VLOOKUP = FKERES ## A megadott tömb bal szélső oszlopában megkeres egy értéket, majd annak sora és a megadott oszlop metszéspontjában levő értéked adja eredményül. + + +## +## Math and trigonometry functions Matematikai és trigonometrikus függvények +## +ABS = ABS ## Egy szám abszolút értékét adja eredményül. +ACOS = ARCCOS ## Egy szám arkusz koszinuszát számítja ki. +ACOSH = ACOSH ## Egy szám inverz koszinusz hiperbolikuszát számítja ki. +ASIN = ARCSIN ## Egy szám arkusz szinuszát számítja ki. +ASINH = ASINH ## Egy szám inverz szinusz hiperbolikuszát számítja ki. +ATAN = ARCTAN ## Egy szám arkusz tangensét számítja ki. +ATAN2 = ARCTAN2 ## X és y koordináták alapján számítja ki az arkusz tangens értéket. +ATANH = ATANH ## A szám inverz tangens hiperbolikuszát számítja ki. +CEILING = PLAFON ## Egy számot a legközelebbi egészre vagy a pontosságként megadott érték legközelebb eső többszörösére kerekít. +COMBIN = KOMBINÁCIÓK ## Adott számú objektum összes lehetséges kombinációinak számát számítja ki. +COS = COS ## Egy szám koszinuszát számítja ki. +COSH = COSH ## Egy szám koszinusz hiperbolikuszát számítja ki. +DEGREES = FOK ## Radiánt fokká alakít át. +EVEN = PÁROS ## Egy számot a legközelebbi páros egész számra kerekít. +EXP = KITEVŐ ## Az e adott kitevőjű hatványát adja eredményül. +FACT = FAKT ## Egy szám faktoriálisát számítja ki. +FACTDOUBLE = FACTDOUBLE ## Egy szám dupla faktoriálisát adja eredményül. +FLOOR = PADLÓ ## Egy számot lefelé, a nulla felé kerekít. +GCD = GCD ## A legnagyobb közös osztót adja eredményül. +INT = INT ## Egy számot lefelé kerekít a legközelebbi egészre. +LCM = LCM ## A legkisebb közös többszöröst adja eredményül. +LN = LN ## Egy szám természetes logaritmusát számítja ki. +LOG = LOG ## Egy szám adott alapú logaritmusát számítja ki. +LOG10 = LOG10 ## Egy szám 10-es alapú logaritmusát számítja ki. +MDETERM = MDETERM ## Egy tömb mátrix-determinánsát számítja ki. +MINVERSE = INVERZ.MÁTRIX ## Egy tömb mátrix inverzét adja eredményül. +MMULT = MSZORZAT ## Két tömb mátrix-szorzatát adja meg. +MOD = MARADÉK ## Egy szám osztási maradékát adja eredményül. +MROUND = MROUND ## A kívánt többszörösére kerekített értéket ad eredményül. +MULTINOMIAL = MULTINOMIAL ## Számhalmaz multinomiálisát adja eredményül. +ODD = PÁRATLAN ## Egy számot a legközelebbi páratlan számra kerekít. +PI = PI ## A pi matematikai állandót adja vissza. +POWER = HATVÁNY ## Egy szám adott kitevőjű hatványát számítja ki. +PRODUCT = SZORZAT ## Argumentumai szorzatát számítja ki. +QUOTIENT = QUOTIENT ## Egy hányados egész részét adja eredményül. +RADIANS = RADIÁN ## Fokot radiánná alakít át. +RAND = VÉL ## Egy 0 és 1 közötti véletlen számot ad eredményül. +RANDBETWEEN = RANDBETWEEN ## Megadott számok közé eső véletlen számot állít elő. +ROMAN = RÓMAI ## Egy számot római számokkal kifejezve szövegként ad eredményül. +ROUND = KEREKÍTÉS ## Egy számot adott számú számjegyre kerekít. +ROUNDDOWN = KEREKÍTÉS.LE ## Egy számot lefelé, a nulla felé kerekít. +ROUNDUP = KEREKÍTÉS.FEL ## Egy számot felfelé, a nullától távolabbra kerekít. +SERIESSUM = SERIESSUM ## Hatványsor összegét adja eredményül. +SIGN = ELŐJEL ## Egy szám előjelét adja meg. +SIN = SIN ## Egy szög szinuszát számítja ki. +SINH = SINH ## Egy szám szinusz hiperbolikuszát számítja ki. +SQRT = GYÖK ## Egy szám pozitív négyzetgyökét számítja ki. +SQRTPI = SQRTPI ## A (szám*pi) négyzetgyökét adja eredményül. +SUBTOTAL = RÉSZÖSSZEG ## Lista vagy adatbázis részösszegét adja eredményül. +SUM = SZUM ## Összeadja az argumentumlistájában lévő számokat. +SUMIF = SZUMHA ## A megadott feltételeknek eleget tevő cellákban található értékeket adja össze. +SUMIFS = SZUMHATÖBB ## Több megadott feltételnek eleget tévő tartománycellák összegét adja eredményül. +SUMPRODUCT = SZORZATÖSSZEG ## A megfelelő tömbelemek szorzatának összegét számítja ki. +SUMSQ = NÉGYZETÖSSZEG ## Argumentumai négyzetének összegét számítja ki. +SUMX2MY2 = SZUMX2BŐLY2 ## Két tömb megfelelő elemei négyzetének különbségét összegzi. +SUMX2PY2 = SZUMX2MEGY2 ## Két tömb megfelelő elemei négyzetének összegét összegzi. +SUMXMY2 = SZUMXBŐLY2 ## Két tömb megfelelő elemei különbségének négyzetösszegét számítja ki. +TAN = TAN ## Egy szám tangensét számítja ki. +TANH = TANH ## Egy szám tangens hiperbolikuszát számítja ki. +TRUNC = CSONK ## Egy számot egésszé csonkít. + + +## +## Statistical functions Statisztikai függvények +## +AVEDEV = ÁTL.ELTÉRÉS ## Az adatpontoknak átlaguktól való átlagos abszolút eltérését számítja ki. +AVERAGE = ÁTLAG ## Argumentumai átlagát számítja ki. +AVERAGEA = ÁTLAGA ## Argumentumai átlagát számítja ki (beleértve a számokat, szöveget és logikai értékeket). +AVERAGEIF = ÁTLAGHA ## A megadott feltételnek eleget tévő tartomány celláinak átlagát (számtani közepét) adja eredményül. +AVERAGEIFS = ÁTLAGHATÖBB ## A megadott feltételeknek eleget tévő cellák átlagát (számtani közepét) adja eredményül. +BETADIST = BÉTA.ELOSZLÁS ## A béta-eloszlás függvényt számítja ki. +BETAINV = INVERZ.BÉTA ## Adott béta-eloszláshoz kiszámítja a béta eloszlásfüggvény inverzét. +BINOMDIST = BINOM.ELOSZLÁS ## A diszkrét binomiális eloszlás valószínűségértékét számítja ki. +CHIDIST = KHI.ELOSZLÁS ## A khi-négyzet-eloszlás egyszélű valószínűségértékét számítja ki. +CHIINV = INVERZ.KHI ## A khi-négyzet-eloszlás egyszélű valószínűségértékének inverzét számítja ki. +CHITEST = KHI.PRÓBA ## Függetlenségvizsgálatot hajt végre. +CONFIDENCE = MEGBÍZHATÓSÁG ## Egy statisztikai sokaság várható értékének megbízhatósági intervallumát adja eredményül. +CORREL = KORREL ## Két adathalmaz korrelációs együtthatóját számítja ki. +COUNT = DARAB ## Megszámolja, hogy argumentumlistájában hány szám található. +COUNTA = DARAB2 ## Megszámolja, hogy argumentumlistájában hány érték található. +COUNTBLANK = DARABÜRES ## Egy tartományban összeszámolja az üres cellákat. +COUNTIF = DARABTELI ## Egy tartományban összeszámolja azokat a cellákat, amelyek eleget tesznek a megadott feltételnek. +COUNTIFS = DARABHATÖBB ## Egy tartományban összeszámolja azokat a cellákat, amelyek eleget tesznek több feltételnek. +COVAR = KOVAR ## A kovarianciát, azaz a páronkénti eltérések szorzatának átlagát számítja ki. +CRITBINOM = KRITBINOM ## Azt a legkisebb számot adja eredményül, amelyre a binomiális eloszlásfüggvény értéke nem kisebb egy adott határértéknél. +DEVSQ = SQ ## Az átlagtól való eltérések négyzetének összegét számítja ki. +EXPONDIST = EXP.ELOSZLÁS ## Az exponenciális eloszlás értékét számítja ki. +FDIST = F.ELOSZLÁS ## Az F-eloszlás értékét számítja ki. +FINV = INVERZ.F ## Az F-eloszlás inverzének értékét számítja ki. +FISHER = FISHER ## Fisher-transzformációt hajt végre. +FISHERINV = INVERZ.FISHER ## A Fisher-transzformáció inverzét hajtja végre. +FORECAST = ELŐREJELZÉS ## Az ismert értékek alapján lineáris regresszióval becsült értéket ad eredményül. +FREQUENCY = GYAKORISÁG ## A gyakorisági vagy empirikus eloszlás értékét függőleges tömbként adja eredményül. +FTEST = F.PRÓBA ## Az F-próba értékét adja eredményül. +GAMMADIST = GAMMA.ELOSZLÁS ## A gamma-eloszlás értékét számítja ki. +GAMMAINV = INVERZ.GAMMA ## A gamma-eloszlás eloszlásfüggvénye inverzének értékét számítja ki. +GAMMALN = GAMMALN ## A gamma-függvény természetes logaritmusát számítja ki. +GEOMEAN = MÉRTANI.KÖZÉP ## Argumentumai mértani középértékét számítja ki. +GROWTH = NÖV ## Exponenciális regresszió alapján ad becslést. +HARMEAN = HARM.KÖZÉP ## Argumentumai harmonikus átlagát számítja ki. +HYPGEOMDIST = HIPERGEOM.ELOSZLÁS ## A hipergeometriai eloszlás értékét számítja ki. +INTERCEPT = METSZ ## A regressziós egyenes y tengellyel való metszéspontját határozza meg. +KURT = CSÚCSOSSÁG ## Egy adathalmaz csúcsosságát számítja ki. +LARGE = NAGY ## Egy adathalmaz k-adik legnagyobb elemét adja eredményül. +LINEST = LIN.ILL ## A legkisebb négyzetek módszerével az adatokra illesztett egyenes paramétereit határozza meg. +LOGEST = LOG.ILL ## Az adatokra illesztett exponenciális görbe paramétereit határozza meg. +LOGINV = INVERZ.LOG.ELOSZLÁS ## A lognormális eloszlás inverzét számítja ki. +LOGNORMDIST = LOG.ELOSZLÁS ## A lognormális eloszlásfüggvény értékét számítja ki. +MAX = MAX ## Az argumentumai között szereplő legnagyobb számot adja meg. +MAXA = MAX2 ## Az argumentumai között szereplő legnagyobb számot adja meg (beleértve a számokat, szöveget és logikai értékeket). +MEDIAN = MEDIÁN ## Adott számhalmaz mediánját számítja ki. +MIN = MIN ## Az argumentumai között szereplő legkisebb számot adja meg. +MINA = MIN2 ## Az argumentumai között szereplő legkisebb számot adja meg, beleértve a számokat, szöveget és logikai értékeket. +MODE = MÓDUSZ ## Egy adathalmazból kiválasztja a leggyakrabban előforduló számot. +NEGBINOMDIST = NEGBINOM.ELOSZL ## A negatív binomiális eloszlás értékét számítja ki. +NORMDIST = NORM.ELOSZL ## A normális eloszlás értékét számítja ki. +NORMINV = INVERZ.NORM ## A normális eloszlás eloszlásfüggvénye inverzének értékét számítja ki. +NORMSDIST = STNORMELOSZL ## A standard normális eloszlás eloszlásfüggvényének értékét számítja ki. +NORMSINV = INVERZ.STNORM ## A standard normális eloszlás eloszlásfüggvénye inverzének értékét számítja ki. +PEARSON = PEARSON ## A Pearson-féle korrelációs együtthatót számítja ki. +PERCENTILE = PERCENTILIS ## Egy tartományban található értékek k-adik percentilisét, azaz százalékosztályát adja eredményül. +PERCENTRANK = SZÁZALÉKRANG ## Egy értéknek egy adathalmazon belül vett százalékos rangját (elhelyezkedését) számítja ki. +PERMUT = VARIÁCIÓK ## Adott számú objektum k-ad osztályú ismétlés nélküli variációinak számát számítja ki. +POISSON = POISSON ## A Poisson-eloszlás értékét számítja ki. +PROB = VALÓSZÍNŰSÉG ## Annak valószínűségét számítja ki, hogy adott értékek két határérték közé esnek. +QUARTILE = KVARTILIS ## Egy adathalmaz kvartilisét (negyedszintjét) számítja ki. +RANK = SORSZÁM ## Kiszámítja, hogy egy szám hányadik egy számsorozatban. +RSQ = RNÉGYZET ## Kiszámítja a Pearson-féle szorzatmomentum korrelációs együtthatójának négyzetét. +SKEW = FERDESÉG ## Egy eloszlás ferdeségét határozza meg. +SLOPE = MEREDEKSÉG ## Egy lineáris regressziós egyenes meredekségét számítja ki. +SMALL = KICSI ## Egy adathalmaz k-adik legkisebb elemét adja meg. +STANDARDIZE = NORMALIZÁLÁS ## Normalizált értéket ad eredményül. +STDEV = SZÓRÁS ## Egy statisztikai sokaság mintájából kiszámítja annak szórását. +STDEVA = SZÓRÁSA ## Egy statisztikai sokaság mintájából kiszámítja annak szórását (beleértve a számokat, szöveget és logikai értékeket). +STDEVP = SZÓRÁSP ## Egy statisztikai sokaság egészéből kiszámítja annak szórását. +STDEVPA = SZÓRÁSPA ## Egy statisztikai sokaság egészéből kiszámítja annak szórását (beleértve számokat, szöveget és logikai értékeket). +STEYX = STHIBAYX ## Egy regresszió esetén az egyes x-értékek alapján meghatározott y-értékek standard hibáját számítja ki. +TDIST = T.ELOSZLÁS ## A Student-féle t-eloszlás értékét számítja ki. +TINV = INVERZ.T ## A Student-féle t-eloszlás inverzét számítja ki. +TREND = TREND ## Lineáris trend értékeit számítja ki. +TRIMMEAN = RÉSZÁTLAG ## Egy adathalmaz középső részének átlagát számítja ki. +TTEST = T.PRÓBA ## A Student-féle t-próbához tartozó valószínűséget számítja ki. +VAR = VAR ## Minta alapján becslést ad a varianciára. +VARA = VARA ## Minta alapján becslést ad a varianciára (beleértve számokat, szöveget és logikai értékeket). +VARP = VARP ## Egy statisztikai sokaság varianciáját számítja ki. +VARPA = VARPA ## Egy statisztikai sokaság varianciáját számítja ki (beleértve számokat, szöveget és logikai értékeket). +WEIBULL = WEIBULL ## A Weibull-féle eloszlás értékét számítja ki. +ZTEST = Z.PRÓBA ## Az egyszélű z-próbával kapott valószínűségértéket számítja ki. + + +## +## Text functions Szövegműveletekhez használható függvények +## +ASC = ASC ## Szöveg teljes szélességű (kétbájtos) latin és katakana karaktereit félszélességű (egybájtos) karakterekké alakítja. +BAHTTEXT = BAHTSZÖVEG ## Számot szöveggé alakít a ß (baht) pénznemformátum használatával. +CHAR = KARAKTER ## A kódszámmal meghatározott karaktert adja eredményül. +CLEAN = TISZTÍT ## A szövegből eltávolítja az összes nem nyomtatható karaktert. +CODE = KÓD ## Karaktersorozat első karakterének numerikus kódját adja eredményül. +CONCATENATE = ÖSSZEFŰZ ## Több szövegelemet egyetlen szöveges elemmé fűz össze. +DOLLAR = FORINT ## Számot pénznem formátumú szöveggé alakít át. +EXACT = AZONOS ## Megvizsgálja, hogy két érték azonos-e. +FIND = SZÖVEG.TALÁL ## Karaktersorozatot keres egy másikban (a kis- és nagybetűk megkülönböztetésével). +FINDB = SZÖVEG.TALÁL2 ## Karaktersorozatot keres egy másikban (a kis- és nagybetűk megkülönböztetésével). +FIXED = FIX ## Számot szöveges formátumúra alakít adott számú tizedesjegyre kerekítve. +JIS = JIS ## A félszélességű (egybájtos) latin és a katakana karaktereket teljes szélességű (kétbájtos) karakterekké alakítja. +LEFT = BAL ## Szöveg bal szélső karaktereit adja eredményül. +LEFTB = BAL2 ## Szöveg bal szélső karaktereit adja eredményül. +LEN = HOSSZ ## Szöveg karakterekben mért hosszát adja eredményül. +LENB = HOSSZ2 ## Szöveg karakterekben mért hosszát adja eredményül. +LOWER = KISBETŰ ## Szöveget kisbetűssé alakít át. +MID = KÖZÉP ## A szöveg adott pozíciójától kezdve megadott számú karaktert ad vissza eredményként. +MIDB = KÖZÉP2 ## A szöveg adott pozíciójától kezdve megadott számú karaktert ad vissza eredményként. +PHONETIC = PHONETIC ## Szöveg furigana (fonetikus) karaktereit adja vissza. +PROPER = TNÉV ## Szöveg minden szavának kezdőbetűjét nagybetűsre cseréli. +REPLACE = CSERE ## A szövegen belül karaktereket cserél. +REPLACEB = CSERE2 ## A szövegen belül karaktereket cserél. +REPT = SOKSZOR ## Megadott számú alkalommal megismétel egy szövegrészt. +RIGHT = JOBB ## Szövegrész jobb szélső karaktereit adja eredményül. +RIGHTB = JOBB2 ## Szövegrész jobb szélső karaktereit adja eredményül. +SEARCH = SZÖVEG.KERES ## Karaktersorozatot keres egy másikban (a kis- és nagybetűk között nem tesz különbséget). +SEARCHB = SZÖVEG.KERES2 ## Karaktersorozatot keres egy másikban (a kis- és nagybetűk között nem tesz különbséget). +SUBSTITUTE = HELYETTE ## Szövegben adott karaktereket másikra cserél. +T = T ## Argumentumát szöveggé alakítja át. +TEXT = SZÖVEG ## Számértéket alakít át adott számformátumú szöveggé. +TRIM = TRIM ## A szövegből eltávolítja a szóközöket. +UPPER = NAGYBETŰS ## Szöveget nagybetűssé alakít át. +VALUE = ÉRTÉK ## Szöveget számmá alakít át. diff --git a/PHPExcel/locale/it/config b/PHPExcel/locale/it/config new file mode 100644 index 0000000..94499fe --- /dev/null +++ b/PHPExcel/locale/it/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = € + + +## +## Excel Error Codes (For future use) +## +NULL = #NULLO! +DIV0 = #DIV/0! +VALUE = #VALORE! +REF = #RIF! +NAME = #NOME? +NUM = #NUM! +NA = #N/D diff --git a/PHPExcel/locale/it/functions b/PHPExcel/locale/it/functions new file mode 100644 index 0000000..033b969 --- /dev/null +++ b/PHPExcel/locale/it/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Funzioni di automazione e dei componenti aggiuntivi +## +GETPIVOTDATA = INFO.DATI.TAB.PIVOT ## Restituisce i dati memorizzati in un rapporto di tabella pivot + + +## +## Cube functions Funzioni cubo +## +CUBEKPIMEMBER = MEMBRO.KPI.CUBO ## Restituisce il nome, la proprietà e la misura di un indicatore di prestazioni chiave (KPI) e visualizza il nome e la proprietà nella cella. Un KPI è una misura quantificabile, ad esempio l'utile lordo mensile o il fatturato trimestrale dei dipendenti, utilizzata per il monitoraggio delle prestazioni di un'organizzazione. +CUBEMEMBER = MEMBRO.CUBO ## Restituisce un membro o una tupla in una gerarchia di cubi. Consente di verificare l'esistenza del membro o della tupla nel cubo. +CUBEMEMBERPROPERTY = PROPRIETÀ.MEMBRO.CUBO ## Restituisce il valore di una proprietà di un membro del cubo. Consente di verificare l'esistenza di un nome di membro all'interno del cubo e di restituire la proprietà specificata per tale membro. +CUBERANKEDMEMBER = MEMBRO.CUBO.CON.RANGO ## Restituisce l'n-esimo membro o il membro ordinato di un insieme. Consente di restituire uno o più elementi in un insieme, ad esempio l'agente di vendita migliore o i primi 10 studenti. +CUBESET = SET.CUBO ## Definisce un insieme di tuple o membri calcolati mediante l'invio di un'espressione di insieme al cubo sul server. In questo modo l'insieme viene creato e restituito a Microsoft Office Excel. +CUBESETCOUNT = CONTA.SET.CUBO ## Restituisce il numero di elementi di un insieme. +CUBEVALUE = VALORE.CUBO ## Restituisce un valore aggregato da un cubo. + + +## +## Database functions Funzioni di database +## +DAVERAGE = DB.MEDIA ## Restituisce la media di voci del database selezionate +DCOUNT = DB.CONTA.NUMERI ## Conta le celle di un database contenenti numeri +DCOUNTA = DB.CONTA.VALORI ## Conta le celle non vuote in un database +DGET = DB.VALORI ## Estrae da un database un singolo record che soddisfa i criteri specificati +DMAX = DB.MAX ## Restituisce il valore massimo dalle voci selezionate in un database +DMIN = DB.MIN ## Restituisce il valore minimo dalle voci di un database selezionate +DPRODUCT = DB.PRODOTTO ## Moltiplica i valori in un determinato campo di record che soddisfano i criteri del database +DSTDEV = DB.DEV.ST ## Restituisce una stima della deviazione standard sulla base di un campione di voci di un database selezionate +DSTDEVP = DB.DEV.ST.POP ## Calcola la deviazione standard sulla base di tutte le voci di un database selezionate +DSUM = DB.SOMMA ## Aggiunge i numeri nel campo colonna di record del database che soddisfa determinati criteri +DVAR = DB.VAR ## Restituisce una stima della varianza sulla base di un campione da voci di un database selezionate +DVARP = DB.VAR.POP ## Calcola la varianza sulla base di tutte le voci di un database selezionate + + +## +## Date and time functions Funzioni data e ora +## +DATE = DATA ## Restituisce il numero seriale di una determinata data +DATEVALUE = DATA.VALORE ## Converte una data sotto forma di testo in un numero seriale +DAY = GIORNO ## Converte un numero seriale in un giorno del mese +DAYS360 = GIORNO360 ## Calcola il numero di giorni compreso tra due date basandosi su un anno di 360 giorni +EDATE = DATA.MESE ## Restituisce il numero seriale della data che rappresenta il numero di mesi prima o dopo la data di inizio +EOMONTH = FINE.MESE ## Restituisce il numero seriale dell'ultimo giorno del mese, prima o dopo un determinato numero di mesi +HOUR = ORA ## Converte un numero seriale in un'ora +MINUTE = MINUTO ## Converte un numero seriale in un minuto +MONTH = MESE ## Converte un numero seriale in un mese +NETWORKDAYS = GIORNI.LAVORATIVI.TOT ## Restituisce il numero di tutti i giorni lavorativi compresi fra due date +NOW = ADESSO ## Restituisce il numero seriale della data e dell'ora corrente +SECOND = SECONDO ## Converte un numero seriale in un secondo +TIME = ORARIO ## Restituisce il numero seriale di una determinata ora +TIMEVALUE = ORARIO.VALORE ## Converte un orario in forma di testo in un numero seriale +TODAY = OGGI ## Restituisce il numero seriale relativo alla data odierna +WEEKDAY = GIORNO.SETTIMANA ## Converte un numero seriale in un giorno della settimana +WEEKNUM = NUM.SETTIMANA ## Converte un numero seriale in un numero che rappresenta la posizione numerica di una settimana nell'anno +WORKDAY = GIORNO.LAVORATIVO ## Restituisce il numero della data prima o dopo un determinato numero di giorni lavorativi +YEAR = ANNO ## Converte un numero seriale in un anno +YEARFRAC = FRAZIONE.ANNO ## Restituisce la frazione dell'anno che rappresenta il numero dei giorni compresi tra una data_ iniziale e una data_finale + + +## +## Engineering functions Funzioni ingegneristiche +## +BESSELI = BESSEL.I ## Restituisce la funzione di Bessel modificata In(x) +BESSELJ = BESSEL.J ## Restituisce la funzione di Bessel Jn(x) +BESSELK = BESSEL.K ## Restituisce la funzione di Bessel modificata Kn(x) +BESSELY = BESSEL.Y ## Restituisce la funzione di Bessel Yn(x) +BIN2DEC = BINARIO.DECIMALE ## Converte un numero binario in decimale +BIN2HEX = BINARIO.HEX ## Converte un numero binario in esadecimale +BIN2OCT = BINARIO.OCT ## Converte un numero binario in ottale +COMPLEX = COMPLESSO ## Converte i coefficienti reali e immaginari in numeri complessi +CONVERT = CONVERTI ## Converte un numero da un sistema di misura in un altro +DEC2BIN = DECIMALE.BINARIO ## Converte un numero decimale in binario +DEC2HEX = DECIMALE.HEX ## Converte un numero decimale in esadecimale +DEC2OCT = DECIMALE.OCT ## Converte un numero decimale in ottale +DELTA = DELTA ## Verifica se due valori sono uguali +ERF = FUNZ.ERRORE ## Restituisce la funzione di errore +ERFC = FUNZ.ERRORE.COMP ## Restituisce la funzione di errore complementare +GESTEP = SOGLIA ## Verifica se un numero è maggiore del valore di soglia +HEX2BIN = HEX.BINARIO ## Converte un numero esadecimale in binario +HEX2DEC = HEX.DECIMALE ## Converte un numero esadecimale in decimale +HEX2OCT = HEX.OCT ## Converte un numero esadecimale in ottale +IMABS = COMP.MODULO ## Restituisce il valore assoluto (modulo) di un numero complesso +IMAGINARY = COMP.IMMAGINARIO ## Restituisce il coefficiente immaginario di un numero complesso +IMARGUMENT = COMP.ARGOMENTO ## Restituisce l'argomento theta, un angolo espresso in radianti +IMCONJUGATE = COMP.CONIUGATO ## Restituisce il complesso coniugato del numero complesso +IMCOS = COMP.COS ## Restituisce il coseno di un numero complesso +IMDIV = COMP.DIV ## Restituisce il quoziente di due numeri complessi +IMEXP = COMP.EXP ## Restituisce il valore esponenziale di un numero complesso +IMLN = COMP.LN ## Restituisce il logaritmo naturale di un numero complesso +IMLOG10 = COMP.LOG10 ## Restituisce il logaritmo in base 10 di un numero complesso +IMLOG2 = COMP.LOG2 ## Restituisce un logaritmo in base 2 di un numero complesso +IMPOWER = COMP.POTENZA ## Restituisce il numero complesso elevato a una potenza intera +IMPRODUCT = COMP.PRODOTTO ## Restituisce il prodotto di numeri complessi compresi tra 2 e 29 +IMREAL = COMP.PARTE.REALE ## Restituisce il coefficiente reale di un numero complesso +IMSIN = COMP.SEN ## Restituisce il seno di un numero complesso +IMSQRT = COMP.RADQ ## Restituisce la radice quadrata di un numero complesso +IMSUB = COMP.DIFF ## Restituisce la differenza fra due numeri complessi +IMSUM = COMP.SOMMA ## Restituisce la somma di numeri complessi +OCT2BIN = OCT.BINARIO ## Converte un numero ottale in binario +OCT2DEC = OCT.DECIMALE ## Converte un numero ottale in decimale +OCT2HEX = OCT.HEX ## Converte un numero ottale in esadecimale + + +## +## Financial functions Funzioni finanziarie +## +ACCRINT = INT.MATURATO.PER ## Restituisce l'interesse maturato di un titolo che paga interessi periodici +ACCRINTM = INT.MATURATO.SCAD ## Restituisce l'interesse maturato di un titolo che paga interessi alla scadenza +AMORDEGRC = AMMORT.DEGR ## Restituisce l'ammortamento per ogni periodo contabile utilizzando un coefficiente di ammortamento +AMORLINC = AMMORT.PER ## Restituisce l'ammortamento per ogni periodo contabile +COUPDAYBS = GIORNI.CED.INIZ.LIQ ## Restituisce il numero dei giorni che vanno dall'inizio del periodo di durata della cedola alla data di liquidazione +COUPDAYS = GIORNI.CED ## Restituisce il numero dei giorni relativi al periodo della cedola che contiene la data di liquidazione +COUPDAYSNC = GIORNI.CED.NUOVA ## Restituisce il numero di giorni che vanno dalla data di liquidazione alla data della cedola successiva +COUPNCD = DATA.CED.SUCC ## Restituisce un numero che rappresenta la data della cedola successiva alla data di liquidazione +COUPNUM = NUM.CED ## Restituisce il numero di cedole pagabili fra la data di liquidazione e la data di scadenza +COUPPCD = DATA.CED.PREC ## Restituisce un numero che rappresenta la data della cedola precedente alla data di liquidazione +CUMIPMT = INT.CUMUL ## Restituisce l'interesse cumulativo pagato fra due periodi +CUMPRINC = CAP.CUM ## Restituisce il capitale cumulativo pagato per estinguere un debito fra due periodi +DB = DB ## Restituisce l'ammortamento di un bene per un periodo specificato utilizzando il metodo di ammortamento a quote fisse decrescenti +DDB = AMMORT ## Restituisce l'ammortamento di un bene per un periodo specificato utilizzando il metodo di ammortamento a doppie quote decrescenti o altri metodi specificati +DISC = TASSO.SCONTO ## Restituisce il tasso di sconto per un titolo +DOLLARDE = VALUTA.DEC ## Converte un prezzo valuta, espresso come frazione, in prezzo valuta, espresso come numero decimale +DOLLARFR = VALUTA.FRAZ ## Converte un prezzo valuta, espresso come numero decimale, in prezzo valuta, espresso come frazione +DURATION = DURATA ## Restituisce la durata annuale di un titolo con i pagamenti di interesse periodico +EFFECT = EFFETTIVO ## Restituisce l'effettivo tasso di interesse annuo +FV = VAL.FUT ## Restituisce il valore futuro di un investimento +FVSCHEDULE = VAL.FUT.CAPITALE ## Restituisce il valore futuro di un capitale iniziale dopo aver applicato una serie di tassi di interesse composti +INTRATE = TASSO.INT ## Restituisce il tasso di interesse per un titolo interamente investito +IPMT = INTERESSI ## Restituisce il valore degli interessi per un investimento relativo a un periodo specifico +IRR = TIR.COST ## Restituisce il tasso di rendimento interno per una serie di flussi di cassa +ISPMT = INTERESSE.RATA ## Calcola l'interesse di un investimento pagato durante un periodo specifico +MDURATION = DURATA.M ## Restituisce la durata Macauley modificata per un titolo con un valore presunto di € 100 +MIRR = TIR.VAR ## Restituisce il tasso di rendimento interno in cui i flussi di cassa positivi e negativi sono finanziati a tassi differenti +NOMINAL = NOMINALE ## Restituisce il tasso di interesse nominale annuale +NPER = NUM.RATE ## Restituisce un numero di periodi relativi a un investimento +NPV = VAN ## Restituisce il valore attuale netto di un investimento basato su una serie di flussi di cassa periodici e sul tasso di sconto +ODDFPRICE = PREZZO.PRIMO.IRR ## Restituisce il prezzo di un titolo dal valore nominale di € 100 avente il primo periodo di durata irregolare +ODDFYIELD = REND.PRIMO.IRR ## Restituisce il rendimento di un titolo avente il primo periodo di durata irregolare +ODDLPRICE = PREZZO.ULTIMO.IRR ## Restituisce il prezzo di un titolo dal valore nominale di € 100 avente l'ultimo periodo di durata irregolare +ODDLYIELD = REND.ULTIMO.IRR ## Restituisce il rendimento di un titolo avente l'ultimo periodo di durata irregolare +PMT = RATA ## Restituisce il pagamento periodico di una rendita annua +PPMT = P.RATA ## Restituisce il pagamento sul capitale di un investimento per un dato periodo +PRICE = PREZZO ## Restituisce il prezzo di un titolo dal valore nominale di € 100 che paga interessi periodici +PRICEDISC = PREZZO.SCONT ## Restituisce il prezzo di un titolo scontato dal valore nominale di € 100 +PRICEMAT = PREZZO.SCAD ## Restituisce il prezzo di un titolo dal valore nominale di € 100 che paga gli interessi alla scadenza +PV = VA ## Restituisce il valore attuale di un investimento +RATE = TASSO ## Restituisce il tasso di interesse per un periodo di un'annualità +RECEIVED = RICEV.SCAD ## Restituisce l'ammontare ricevuto alla scadenza di un titolo interamente investito +SLN = AMMORT.COST ## Restituisce l'ammortamento a quote costanti di un bene per un singolo periodo +SYD = AMMORT.ANNUO ## Restituisce l'ammortamento a somma degli anni di un bene per un periodo specificato +TBILLEQ = BOT.EQUIV ## Restituisce il rendimento equivalente ad un'obbligazione per un Buono ordinario del Tesoro +TBILLPRICE = BOT.PREZZO ## Restituisce il prezzo di un Buono del Tesoro dal valore nominale di € 100 +TBILLYIELD = BOT.REND ## Restituisce il rendimento di un Buono del Tesoro +VDB = AMMORT.VAR ## Restituisce l'ammortamento di un bene per un periodo specificato o parziale utilizzando il metodo a doppie quote proporzionali ai valori residui +XIRR = TIR.X ## Restituisce il tasso di rendimento interno di un impiego di flussi di cassa +XNPV = VAN.X ## Restituisce il valore attuale netto di un impiego di flussi di cassa non necessariamente periodici +YIELD = REND ## Restituisce il rendimento di un titolo che frutta interessi periodici +YIELDDISC = REND.TITOLI.SCONT ## Restituisce il rendimento annuale di un titolo scontato, ad esempio un Buono del Tesoro +YIELDMAT = REND.SCAD ## Restituisce il rendimento annuo di un titolo che paga interessi alla scadenza + + +## +## Information functions Funzioni relative alle informazioni +## +CELL = CELLA ## Restituisce le informazioni sulla formattazione, la posizione o i contenuti di una cella +ERROR.TYPE = ERRORE.TIPO ## Restituisce un numero che corrisponde a un tipo di errore +INFO = INFO ## Restituisce le informazioni sull'ambiente operativo corrente +ISBLANK = VAL.VUOTO ## Restituisce VERO se il valore è vuoto +ISERR = VAL.ERR ## Restituisce VERO se il valore è un valore di errore qualsiasi tranne #N/D +ISERROR = VAL.ERRORE ## Restituisce VERO se il valore è un valore di errore qualsiasi +ISEVEN = VAL.PARI ## Restituisce VERO se il numero è pari +ISLOGICAL = VAL.LOGICO ## Restituisce VERO se il valore è un valore logico +ISNA = VAL.NON.DISP ## Restituisce VERO se il valore è un valore di errore #N/D +ISNONTEXT = VAL.NON.TESTO ## Restituisce VERO se il valore non è in formato testo +ISNUMBER = VAL.NUMERO ## Restituisce VERO se il valore è un numero +ISODD = VAL.DISPARI ## Restituisce VERO se il numero è dispari +ISREF = VAL.RIF ## Restituisce VERO se il valore è un riferimento +ISTEXT = VAL.TESTO ## Restituisce VERO se il valore è in formato testo +N = NUM ## Restituisce un valore convertito in numero +NA = NON.DISP ## Restituisce il valore di errore #N/D +TYPE = TIPO ## Restituisce un numero che indica il tipo di dati relativi a un valore + + +## +## Logical functions Funzioni logiche +## +AND = E ## Restituisce VERO se tutti gli argomenti sono VERO +FALSE = FALSO ## Restituisce il valore logico FALSO +IF = SE ## Specifica un test logico da eseguire +IFERROR = SE.ERRORE ## Restituisce un valore specificato se una formula fornisce un errore come risultato; in caso contrario, restituisce il risultato della formula +NOT = NON ## Inverte la logica degli argomenti +OR = O ## Restituisce VERO se un argomento qualsiasi è VERO +TRUE = VERO ## Restituisce il valore logico VERO + + +## +## Lookup and reference functions Funzioni di ricerca e di riferimento +## +ADDRESS = INDIRIZZO ## Restituisce un riferimento come testo in una singola cella di un foglio di lavoro +AREAS = AREE ## Restituisce il numero di aree in un riferimento +CHOOSE = SCEGLI ## Sceglie un valore da un elenco di valori +COLUMN = RIF.COLONNA ## Restituisce il numero di colonna di un riferimento +COLUMNS = COLONNE ## Restituisce il numero di colonne in un riferimento +HLOOKUP = CERCA.ORIZZ ## Effettua una ricerca nella riga superiore di una matrice e restituisce il valore della cella specificata +HYPERLINK = COLLEG.IPERTESTUALE ## Crea un collegamento che apre un documento memorizzato in un server di rete, una rete Intranet o Internet +INDEX = INDICE ## Utilizza un indice per scegliere un valore da un riferimento o da una matrice +INDIRECT = INDIRETTO ## Restituisce un riferimento specificato da un valore testo +LOOKUP = CERCA ## Ricerca i valori in un vettore o in una matrice +MATCH = CONFRONTA ## Ricerca i valori in un riferimento o in una matrice +OFFSET = SCARTO ## Restituisce uno scarto di riferimento da un riferimento dato +ROW = RIF.RIGA ## Restituisce il numero di riga di un riferimento +ROWS = RIGHE ## Restituisce il numero delle righe in un riferimento +RTD = DATITEMPOREALE ## Recupera dati in tempo reale da un programma che supporta l'automazione COM (automazione: Metodo per utilizzare gli oggetti di un'applicazione da un'altra applicazione o da un altro strumento di sviluppo. Precedentemente nota come automazione OLE, l'automazione è uno standard del settore e una caratteristica del modello COM (Component Object Model).) +TRANSPOSE = MATR.TRASPOSTA ## Restituisce la trasposizione di una matrice +VLOOKUP = CERCA.VERT ## Effettua una ricerca nella prima colonna di una matrice e si sposta attraverso la riga per restituire il valore di una cella + + +## +## Math and trigonometry functions Funzioni matematiche e trigonometriche +## +ABS = ASS ## Restituisce il valore assoluto di un numero. +ACOS = ARCCOS ## Restituisce l'arcocoseno di un numero +ACOSH = ARCCOSH ## Restituisce l'inverso del coseno iperbolico di un numero +ASIN = ARCSEN ## Restituisce l'arcoseno di un numero +ASINH = ARCSENH ## Restituisce l'inverso del seno iperbolico di un numero +ATAN = ARCTAN ## Restituisce l'arcotangente di un numero +ATAN2 = ARCTAN.2 ## Restituisce l'arcotangente delle coordinate x e y specificate +ATANH = ARCTANH ## Restituisce l'inverso della tangente iperbolica di un numero +CEILING = ARROTONDA.ECCESSO ## Arrotonda un numero per eccesso all'intero più vicino o al multiplo più vicino a peso +COMBIN = COMBINAZIONE ## Restituisce il numero di combinazioni possibili per un numero assegnato di elementi +COS = COS ## Restituisce il coseno dell'angolo specificato +COSH = COSH ## Restituisce il coseno iperbolico di un numero +DEGREES = GRADI ## Converte i radianti in gradi +EVEN = PARI ## Arrotonda il valore assoluto di un numero per eccesso al più vicino intero pari +EXP = ESP ## Restituisce il numero e elevato alla potenza di num +FACT = FATTORIALE ## Restituisce il fattoriale di un numero +FACTDOUBLE = FATT.DOPPIO ## Restituisce il fattoriale doppio di un numero +FLOOR = ARROTONDA.DIFETTO ## Arrotonda un numero per difetto al multiplo più vicino a zero +GCD = MCD ## Restituisce il massimo comune divisore +INT = INT ## Arrotonda un numero per difetto al numero intero più vicino +LCM = MCM ## Restituisce il minimo comune multiplo +LN = LN ## Restituisce il logaritmo naturale di un numero +LOG = LOG ## Restituisce il logaritmo di un numero in una specificata base +LOG10 = LOG10 ## Restituisce il logaritmo in base 10 di un numero +MDETERM = MATR.DETERM ## Restituisce il determinante di una matrice +MINVERSE = MATR.INVERSA ## Restituisce l'inverso di una matrice +MMULT = MATR.PRODOTTO ## Restituisce il prodotto di due matrici +MOD = RESTO ## Restituisce il resto della divisione +MROUND = ARROTONDA.MULTIPLO ## Restituisce un numero arrotondato al multiplo desiderato +MULTINOMIAL = MULTINOMIALE ## Restituisce il multinomiale di un insieme di numeri +ODD = DISPARI ## Arrotonda un numero per eccesso al più vicino intero dispari +PI = PI.GRECO ## Restituisce il valore di pi greco +POWER = POTENZA ## Restituisce il risultato di un numero elevato a potenza +PRODUCT = PRODOTTO ## Moltiplica i suoi argomenti +QUOTIENT = QUOZIENTE ## Restituisce la parte intera di una divisione +RADIANS = RADIANTI ## Converte i gradi in radianti +RAND = CASUALE ## Restituisce un numero casuale compreso tra 0 e 1 +RANDBETWEEN = CASUALE.TRA ## Restituisce un numero casuale compreso tra i numeri specificati +ROMAN = ROMANO ## Restituisce il numero come numero romano sotto forma di testo +ROUND = ARROTONDA ## Arrotonda il numero al numero di cifre specificato +ROUNDDOWN = ARROTONDA.PER.DIF ## Arrotonda il valore assoluto di un numero per difetto +ROUNDUP = ARROTONDA.PER.ECC ## Arrotonda il valore assoluto di un numero per eccesso +SERIESSUM = SOMMA.SERIE ## Restituisce la somma di una serie di potenze in base alla formula +SIGN = SEGNO ## Restituisce il segno di un numero +SIN = SEN ## Restituisce il seno di un dato angolo +SINH = SENH ## Restituisce il seno iperbolico di un numero +SQRT = RADQ ## Restituisce una radice quadrata +SQRTPI = RADQ.PI.GRECO ## Restituisce la radice quadrata di un numero (numero * pi greco) +SUBTOTAL = SUBTOTALE ## Restituisce un subtotale in un elenco o in un database +SUM = SOMMA ## Somma i suoi argomenti +SUMIF = SOMMA.SE ## Somma le celle specificate da un dato criterio +SUMIFS = SOMMA.PIÙ.SE ## Somma le celle in un intervallo che soddisfano più criteri +SUMPRODUCT = MATR.SOMMA.PRODOTTO ## Restituisce la somma dei prodotti dei componenti corrispondenti della matrice +SUMSQ = SOMMA.Q ## Restituisce la somma dei quadrati degli argomenti +SUMX2MY2 = SOMMA.DIFF.Q ## Restituisce la somma della differenza dei quadrati dei corrispondenti elementi in due matrici +SUMX2PY2 = SOMMA.SOMMA.Q ## Restituisce la somma della somma dei quadrati dei corrispondenti elementi in due matrici +SUMXMY2 = SOMMA.Q.DIFF ## Restituisce la somma dei quadrati delle differenze dei corrispondenti elementi in due matrici +TAN = TAN ## Restituisce la tangente di un numero +TANH = TANH ## Restituisce la tangente iperbolica di un numero +TRUNC = TRONCA ## Tronca la parte decimale di un numero + + +## +## Statistical functions Funzioni statistiche +## +AVEDEV = MEDIA.DEV ## Restituisce la media delle deviazioni assolute delle coordinate rispetto alla loro media +AVERAGE = MEDIA ## Restituisce la media degli argomenti +AVERAGEA = MEDIA.VALORI ## Restituisce la media degli argomenti, inclusi i numeri, il testo e i valori logici +AVERAGEIF = MEDIA.SE ## Restituisce la media aritmetica di tutte le celle in un intervallo che soddisfano un determinato criterio +AVERAGEIFS = MEDIA.PIÙ.SE ## Restituisce la media aritmetica di tutte le celle che soddisfano più criteri +BETADIST = DISTRIB.BETA ## Restituisce la funzione di distribuzione cumulativa beta +BETAINV = INV.BETA ## Restituisce l'inverso della funzione di distribuzione cumulativa per una distribuzione beta specificata +BINOMDIST = DISTRIB.BINOM ## Restituisce la distribuzione binomiale per il termine individuale +CHIDIST = DISTRIB.CHI ## Restituisce la probabilità a una coda per la distribuzione del chi quadrato +CHIINV = INV.CHI ## Restituisce l'inverso della probabilità ad una coda per la distribuzione del chi quadrato +CHITEST = TEST.CHI ## Restituisce il test per l'indipendenza +CONFIDENCE = CONFIDENZA ## Restituisce l'intervallo di confidenza per una popolazione +CORREL = CORRELAZIONE ## Restituisce il coefficiente di correlazione tra due insiemi di dati +COUNT = CONTA.NUMERI ## Conta la quantità di numeri nell'elenco di argomenti +COUNTA = CONTA.VALORI ## Conta il numero di valori nell'elenco di argomenti +COUNTBLANK = CONTA.VUOTE ## Conta il numero di celle vuote all'interno di un intervallo +COUNTIF = CONTA.SE ## Conta il numero di celle all'interno di un intervallo che soddisfa i criteri specificati +COUNTIFS = CONTA.PIÙ.SE ## Conta il numero di celle in un intervallo che soddisfano più criteri. +COVAR = COVARIANZA ## Calcola la covarianza, la media dei prodotti delle deviazioni accoppiate +CRITBINOM = CRIT.BINOM ## Restituisce il più piccolo valore per il quale la distribuzione cumulativa binomiale risulta maggiore o uguale ad un valore di criterio +DEVSQ = DEV.Q ## Restituisce la somma dei quadrati delle deviazioni +EXPONDIST = DISTRIB.EXP ## Restituisce la distribuzione esponenziale +FDIST = DISTRIB.F ## Restituisce la distribuzione di probabilità F +FINV = INV.F ## Restituisce l'inverso della distribuzione della probabilità F +FISHER = FISHER ## Restituisce la trasformazione di Fisher +FISHERINV = INV.FISHER ## Restituisce l'inverso della trasformazione di Fisher +FORECAST = PREVISIONE ## Restituisce i valori lungo una tendenza lineare +FREQUENCY = FREQUENZA ## Restituisce la distribuzione di frequenza come matrice verticale +FTEST = TEST.F ## Restituisce il risultato di un test F +GAMMADIST = DISTRIB.GAMMA ## Restituisce la distribuzione gamma +GAMMAINV = INV.GAMMA ## Restituisce l'inverso della distribuzione cumulativa gamma +GAMMALN = LN.GAMMA ## Restituisce il logaritmo naturale della funzione gamma, G(x) +GEOMEAN = MEDIA.GEOMETRICA ## Restituisce la media geometrica +GROWTH = CRESCITA ## Restituisce i valori lungo una linea di tendenza esponenziale +HARMEAN = MEDIA.ARMONICA ## Restituisce la media armonica +HYPGEOMDIST = DISTRIB.IPERGEOM ## Restituisce la distribuzione ipergeometrica +INTERCEPT = INTERCETTA ## Restituisce l'intercetta della retta di regressione lineare +KURT = CURTOSI ## Restituisce la curtosi di un insieme di dati +LARGE = GRANDE ## Restituisce il k-esimo valore più grande in un insieme di dati +LINEST = REGR.LIN ## Restituisce i parametri di una tendenza lineare +LOGEST = REGR.LOG ## Restituisce i parametri di una linea di tendenza esponenziale +LOGINV = INV.LOGNORM ## Restituisce l'inverso di una distribuzione lognormale +LOGNORMDIST = DISTRIB.LOGNORM ## Restituisce la distribuzione lognormale cumulativa +MAX = MAX ## Restituisce il valore massimo in un elenco di argomenti +MAXA = MAX.VALORI ## Restituisce il valore massimo in un elenco di argomenti, inclusi i numeri, il testo e i valori logici +MEDIAN = MEDIANA ## Restituisce la mediana dei numeri specificati +MIN = MIN ## Restituisce il valore minimo in un elenco di argomenti +MINA = MIN.VALORI ## Restituisce il più piccolo valore in un elenco di argomenti, inclusi i numeri, il testo e i valori logici +MODE = MODA ## Restituisce il valore più comune in un insieme di dati +NEGBINOMDIST = DISTRIB.BINOM.NEG ## Restituisce la distribuzione binomiale negativa +NORMDIST = DISTRIB.NORM ## Restituisce la distribuzione cumulativa normale +NORMINV = INV.NORM ## Restituisce l'inverso della distribuzione cumulativa normale standard +NORMSDIST = DISTRIB.NORM.ST ## Restituisce la distribuzione cumulativa normale standard +NORMSINV = INV.NORM.ST ## Restituisce l'inverso della distribuzione cumulativa normale +PEARSON = PEARSON ## Restituisce il coefficiente del momento di correlazione di Pearson +PERCENTILE = PERCENTILE ## Restituisce il k-esimo dato percentile di valori in un intervallo +PERCENTRANK = PERCENT.RANGO ## Restituisce il rango di un valore in un insieme di dati come percentuale +PERMUT = PERMUTAZIONE ## Restituisce il numero delle permutazioni per un determinato numero di oggetti +POISSON = POISSON ## Restituisce la distribuzione di Poisson +PROB = PROBABILITÀ ## Calcola la probabilità che dei valori in un intervallo siano compresi tra due limiti +QUARTILE = QUARTILE ## Restituisce il quartile di un insieme di dati +RANK = RANGO ## Restituisce il rango di un numero in un elenco di numeri +RSQ = RQ ## Restituisce la radice quadrata del coefficiente di momento di correlazione di Pearson +SKEW = ASIMMETRIA ## Restituisce il grado di asimmetria di una distribuzione +SLOPE = PENDENZA ## Restituisce la pendenza di una retta di regressione lineare +SMALL = PICCOLO ## Restituisce il k-esimo valore più piccolo in un insieme di dati +STANDARDIZE = NORMALIZZA ## Restituisce un valore normalizzato +STDEV = DEV.ST ## Restituisce una stima della deviazione standard sulla base di un campione +STDEVA = DEV.ST.VALORI ## Restituisce una stima della deviazione standard sulla base di un campione, inclusi i numeri, il testo e i valori logici +STDEVP = DEV.ST.POP ## Calcola la deviazione standard sulla base di un'intera popolazione +STDEVPA = DEV.ST.POP.VALORI ## Calcola la deviazione standard sulla base sull'intera popolazione, inclusi i numeri, il testo e i valori logici +STEYX = ERR.STD.YX ## Restituisce l'errore standard del valore previsto per y per ogni valore x nella regressione +TDIST = DISTRIB.T ## Restituisce la distribuzione t di Student +TINV = INV.T ## Restituisce l'inversa della distribuzione t di Student +TREND = TENDENZA ## Restituisce i valori lungo una linea di tendenza lineare +TRIMMEAN = MEDIA.TRONCATA ## Restituisce la media della parte interna di un insieme di dati +TTEST = TEST.T ## Restituisce la probabilità associata ad un test t di Student +VAR = VAR ## Stima la varianza sulla base di un campione +VARA = VAR.VALORI ## Stima la varianza sulla base di un campione, inclusi i numeri, il testo e i valori logici +VARP = VAR.POP ## Calcola la varianza sulla base dell'intera popolazione +VARPA = VAR.POP.VALORI ## Calcola la deviazione standard sulla base sull'intera popolazione, inclusi i numeri, il testo e i valori logici +WEIBULL = WEIBULL ## Restituisce la distribuzione di Weibull +ZTEST = TEST.Z ## Restituisce il valore di probabilità a una coda per un test z + + +## +## Text functions Funzioni di testo +## +ASC = ASC ## Modifica le lettere inglesi o il katakana a doppio byte all'interno di una stringa di caratteri in caratteri a singolo byte +BAHTTEXT = BAHTTESTO ## Converte un numero in testo, utilizzando il formato valuta ß (baht) +CHAR = CODICE.CARATT ## Restituisce il carattere specificato dal numero di codice +CLEAN = LIBERA ## Elimina dal testo tutti i caratteri che non è possibile stampare +CODE = CODICE ## Restituisce il codice numerico del primo carattere di una stringa di testo +CONCATENATE = CONCATENA ## Unisce diversi elementi di testo in un unico elemento di testo +DOLLAR = VALUTA ## Converte un numero in testo, utilizzando il formato valuta € (euro) +EXACT = IDENTICO ## Verifica se due valori di testo sono uguali +FIND = TROVA ## Rileva un valore di testo all'interno di un altro (distinzione tra maiuscole e minuscole) +FINDB = TROVA.B ## Rileva un valore di testo all'interno di un altro (distinzione tra maiuscole e minuscole) +FIXED = FISSO ## Formatta un numero come testo con un numero fisso di decimali +JIS = ORDINAMENTO.JIS ## Modifica le lettere inglesi o i caratteri katakana a byte singolo all'interno di una stringa di caratteri in caratteri a byte doppio. +LEFT = SINISTRA ## Restituisce il carattere più a sinistra di un valore di testo +LEFTB = SINISTRA.B ## Restituisce il carattere più a sinistra di un valore di testo +LEN = LUNGHEZZA ## Restituisce il numero di caratteri di una stringa di testo +LENB = LUNB ## Restituisce il numero di caratteri di una stringa di testo +LOWER = MINUSC ## Converte il testo in lettere minuscole +MID = MEDIA ## Restituisce un numero specifico di caratteri di una stringa di testo a partire dalla posizione specificata +MIDB = MEDIA.B ## Restituisce un numero specifico di caratteri di una stringa di testo a partire dalla posizione specificata +PHONETIC = FURIGANA ## Estrae i caratteri fonetici (furigana) da una stringa di testo. +PROPER = MAIUSC.INIZ ## Converte in maiuscolo la prima lettera di ogni parola di un valore di testo +REPLACE = RIMPIAZZA ## Sostituisce i caratteri all'interno di un testo +REPLACEB = SOSTITUISCI.B ## Sostituisce i caratteri all'interno di un testo +REPT = RIPETI ## Ripete un testo per un dato numero di volte +RIGHT = DESTRA ## Restituisce il carattere più a destra di un valore di testo +RIGHTB = DESTRA.B ## Restituisce il carattere più a destra di un valore di testo +SEARCH = RICERCA ## Rileva un valore di testo all'interno di un altro (non è sensibile alle maiuscole e minuscole) +SEARCHB = CERCA.B ## Rileva un valore di testo all'interno di un altro (non è sensibile alle maiuscole e minuscole) +SUBSTITUTE = SOSTITUISCI ## Sostituisce il nuovo testo al testo contenuto in una stringa +T = T ## Converte gli argomenti in testo +TEXT = TESTO ## Formatta un numero e lo converte in testo +TRIM = ANNULLA.SPAZI ## Elimina gli spazi dal testo +UPPER = MAIUSC ## Converte il testo in lettere maiuscole +VALUE = VALORE ## Converte un argomento di testo in numero diff --git a/PHPExcel/locale/nl/config b/PHPExcel/locale/nl/config new file mode 100644 index 0000000..00c1b0f --- /dev/null +++ b/PHPExcel/locale/nl/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = € + + +## +## Excel Error Codes (For future use) +## +NULL = #LEEG! +DIV0 = #DEEL/0! +VALUE = #WAARDE! +REF = #VERW! +NAME = #NAAM? +NUM = #GETAL! +NA = #N/B diff --git a/PHPExcel/locale/nl/functions b/PHPExcel/locale/nl/functions new file mode 100644 index 0000000..6380008 --- /dev/null +++ b/PHPExcel/locale/nl/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Automatiseringsfuncties en functies in invoegtoepassingen +## +GETPIVOTDATA = DRAAITABEL.OPHALEN ## Geeft gegevens uit een draaitabelrapport als resultaat + + +## +## Cube functions Kubusfuncties +## +CUBEKPIMEMBER = KUBUSKPILID ## Retourneert de naam, eigenschap en waarde van een KPI (prestatie-indicator) en geeft de naam en de eigenschap in de cel weer. Een KPI is een meetbare waarde, zoals de maandelijkse brutowinst of de omzet per kwartaal per werknemer, die wordt gebruikt om de prestaties van een organisatie te bewaken +CUBEMEMBER = KUBUSLID ## Retourneert een lid of tupel in een kubushiërarchie. Wordt gebruikt om te controleren of het lid of de tupel in de kubus aanwezig is +CUBEMEMBERPROPERTY = KUBUSLIDEIGENSCHAP ## Retourneert de waarde van een lideigenschap in de kubus. Wordt gebruikt om te controleren of de lidnaam in de kubus bestaat en retourneert de opgegeven eigenschap voor dit lid +CUBERANKEDMEMBER = KUBUSGERANGCHIKTLID ## Retourneert het zoveelste, gerangschikte lid in een set. Wordt gebruikt om een of meer elementen in een set te retourneren, zoals de tien beste verkopers of de tien beste studenten +CUBESET = KUBUSSET ## Definieert een berekende set leden of tupels door een ingestelde expressie naar de kubus op de server te sturen, alwaar de set wordt gemaakt en vervolgens wordt geretourneerd naar Microsoft Office Excel +CUBESETCOUNT = KUBUSSETAANTAL ## Retourneert het aantal onderdelen in een set +CUBEVALUE = KUBUSWAARDE ## Retourneert een samengestelde waarde van een kubus + + +## +## Database functions Databasefuncties +## +DAVERAGE = DBGEMIDDELDE ## Berekent de gemiddelde waarde in geselecteerde databasegegevens +DCOUNT = DBAANTAL ## Telt de cellen met getallen in een database +DCOUNTA = DBAANTALC ## Telt de niet-lege cellen in een database +DGET = DBLEZEN ## Retourneert één record dat voldoet aan de opgegeven criteria uit een database +DMAX = DBMAX ## Retourneert de maximumwaarde in de geselecteerde databasegegevens +DMIN = DBMIN ## Retourneert de minimumwaarde in de geselecteerde databasegegevens +DPRODUCT = DBPRODUCT ## Vermenigvuldigt de waarden in een bepaald veld van de records die voldoen aan de criteria in een database +DSTDEV = DBSTDEV ## Maakt een schatting van de standaarddeviatie op basis van een steekproef uit geselecteerde databasegegevens +DSTDEVP = DBSTDEVP ## Berekent de standaarddeviatie op basis van de volledige populatie van geselecteerde databasegegevens +DSUM = DBSOM ## Telt de getallen uit een kolom records in de database op die voldoen aan de criteria +DVAR = DBVAR ## Maakt een schatting van de variantie op basis van een steekproef uit geselecteerde databasegegevens +DVARP = DBVARP ## Berekent de variantie op basis van de volledige populatie van geselecteerde databasegegevens + + +## +## Date and time functions Datum- en tijdfuncties +## +DATE = DATUM ## Geeft als resultaat het seriële getal van een opgegeven datum +DATEVALUE = DATUMWAARDE ## Converteert een datum in de vorm van tekst naar een serieel getal +DAY = DAG ## Converteert een serieel getal naar een dag van de maand +DAYS360 = DAGEN360 ## Berekent het aantal dagen tussen twee datums op basis van een jaar met 360 dagen +EDATE = ZELFDE.DAG ## Geeft als resultaat het seriële getal van een datum die het opgegeven aantal maanden voor of na de begindatum ligt +EOMONTH = LAATSTE.DAG ## Geeft als resultaat het seriële getal van de laatste dag van de maand voor of na het opgegeven aantal maanden +HOUR = UUR ## Converteert een serieel getal naar uren +MINUTE = MINUUT ## Converteert een serieel naar getal minuten +MONTH = MAAND ## Converteert een serieel getal naar een maand +NETWORKDAYS = NETTO.WERKDAGEN ## Geeft als resultaat het aantal hele werkdagen tussen twee datums +NOW = NU ## Geeft als resultaat het seriële getal van de huidige datum en tijd +SECOND = SECONDE ## Converteert een serieel getal naar seconden +TIME = TIJD ## Geeft als resultaat het seriële getal van een bepaald tijdstip +TIMEVALUE = TIJDWAARDE ## Converteert de tijd in de vorm van tekst naar een serieel getal +TODAY = VANDAAG ## Geeft als resultaat het seriële getal van de huidige datum +WEEKDAY = WEEKDAG ## Converteert een serieel getal naar een weekdag +WEEKNUM = WEEKNUMMER ## Converteert een serieel getal naar een weeknummer +WORKDAY = WERKDAG ## Geeft als resultaat het seriële getal van de datum voor of na een bepaald aantal werkdagen +YEAR = JAAR ## Converteert een serieel getal naar een jaar +YEARFRAC = JAAR.DEEL ## Geeft als resultaat het gedeelte van het jaar, uitgedrukt in het aantal hele dagen tussen begindatum en einddatum + + +## +## Engineering functions Technische functies +## +BESSELI = BESSEL.Y ## Geeft als resultaat de gewijzigde Bessel-functie In(x) +BESSELJ = BESSEL.J ## Geeft als resultaat de Bessel-functie Jn(x) +BESSELK = BESSEL.K ## Geeft als resultaat de gewijzigde Bessel-functie Kn(x) +BESSELY = BESSEL.Y ## Geeft als resultaat de gewijzigde Bessel-functie Yn(x) +BIN2DEC = BIN.N.DEC ## Converteert een binair getal naar een decimaal getal +BIN2HEX = BIN.N.HEX ## Converteert een binair getal naar een hexadecimaal getal +BIN2OCT = BIN.N.OCT ## Converteert een binair getal naar een octaal getal +COMPLEX = COMPLEX ## Converteert reële en imaginaire coëfficiënten naar een complex getal +CONVERT = CONVERTEREN ## Converteert een getal in de ene maateenheid naar een getal in een andere maateenheid +DEC2BIN = DEC.N.BIN ## Converteert een decimaal getal naar een binair getal +DEC2HEX = DEC.N.HEX ## Converteert een decimaal getal naar een hexadecimaal getal +DEC2OCT = DEC.N.OCT ## Converteert een decimaal getal naar een octaal getal +DELTA = DELTA ## Test of twee waarden gelijk zijn +ERF = FOUTFUNCTIE ## Geeft als resultaat de foutfunctie +ERFC = FOUT.COMPLEMENT ## Geeft als resultaat de complementaire foutfunctie +GESTEP = GROTER.DAN ## Test of een getal groter is dan de drempelwaarde +HEX2BIN = HEX.N.BIN ## Converteert een hexadecimaal getal naar een binair getal +HEX2DEC = HEX.N.DEC ## Converteert een hexadecimaal getal naar een decimaal getal +HEX2OCT = HEX.N.OCT ## Converteert een hexadecimaal getal naar een octaal getal +IMABS = C.ABS ## Geeft als resultaat de absolute waarde (modulus) van een complex getal +IMAGINARY = C.IM.DEEL ## Geeft als resultaat de imaginaire coëfficiënt van een complex getal +IMARGUMENT = C.ARGUMENT ## Geeft als resultaat het argument thèta, een hoek uitgedrukt in radialen +IMCONJUGATE = C.TOEGEVOEGD ## Geeft als resultaat het complexe toegevoegde getal van een complex getal +IMCOS = C.COS ## Geeft als resultaat de cosinus van een complex getal +IMDIV = C.QUOTIENT ## Geeft als resultaat het quotiënt van twee complexe getallen +IMEXP = C.EXP ## Geeft als resultaat de exponent van een complex getal +IMLN = C.LN ## Geeft als resultaat de natuurlijke logaritme van een complex getal +IMLOG10 = C.LOG10 ## Geeft als resultaat de logaritme met grondtal 10 van een complex getal +IMLOG2 = C.LOG2 ## Geeft als resultaat de logaritme met grondtal 2 van een complex getal +IMPOWER = C.MACHT ## Geeft als resultaat een complex getal dat is verheven tot de macht van een geheel getal +IMPRODUCT = C.PRODUCT ## Geeft als resultaat het product van complexe getallen +IMREAL = C.REEEL.DEEL ## Geeft als resultaat de reële coëfficiënt van een complex getal +IMSIN = C.SIN ## Geeft als resultaat de sinus van een complex getal +IMSQRT = C.WORTEL ## Geeft als resultaat de vierkantswortel van een complex getal +IMSUB = C.VERSCHIL ## Geeft als resultaat het verschil tussen twee complexe getallen +IMSUM = C.SOM ## Geeft als resultaat de som van complexe getallen +OCT2BIN = OCT.N.BIN ## Converteert een octaal getal naar een binair getal +OCT2DEC = OCT.N.DEC ## Converteert een octaal getal naar een decimaal getal +OCT2HEX = OCT.N.HEX ## Converteert een octaal getal naar een hexadecimaal getal + + +## +## Financial functions Financiële functies +## +ACCRINT = SAMENG.RENTE ## Berekent de opgelopen rente voor een waardepapier waarvan de rente periodiek wordt uitgekeerd +ACCRINTM = SAMENG.RENTE.V ## Berekent de opgelopen rente voor een waardepapier waarvan de rente op de vervaldatum wordt uitgekeerd +AMORDEGRC = AMORDEGRC ## Geeft als resultaat de afschrijving voor elke boekingsperiode door een afschrijvingscoëfficiënt toe te passen +AMORLINC = AMORLINC ## Berekent de afschrijving voor elke boekingsperiode +COUPDAYBS = COUP.DAGEN.BB ## Berekent het aantal dagen vanaf het begin van de coupontermijn tot de stortingsdatum +COUPDAYS = COUP.DAGEN ## Geeft als resultaat het aantal dagen in de coupontermijn waarin de stortingsdatum valt +COUPDAYSNC = COUP.DAGEN.VV ## Geeft als resultaat het aantal dagen vanaf de stortingsdatum tot de volgende couponvervaldatum +COUPNCD = COUP.DATUM.NB ## Geeft als resultaat de volgende coupondatum na de stortingsdatum +COUPNUM = COUP.AANTAL ## Geeft als resultaat het aantal coupons dat nog moet worden uitbetaald tussen de stortingsdatum en de vervaldatum +COUPPCD = COUP.DATUM.VB ## Geeft als resultaat de vorige couponvervaldatum vóór de stortingsdatum +CUMIPMT = CUM.RENTE ## Geeft als resultaat de cumulatieve rente die tussen twee termijnen is uitgekeerd +CUMPRINC = CUM.HOOFDSOM ## Geeft als resultaat de cumulatieve hoofdsom van een lening die tussen twee termijnen is terugbetaald +DB = DB ## Geeft als resultaat de afschrijving van activa voor een bepaalde periode met behulp van de 'fixed declining balance'-methode +DDB = DDB ## Geeft als resultaat de afschrijving van activa over een bepaalde termijn met behulp van de 'double declining balance'-methode of een andere methode die u opgeeft +DISC = DISCONTO ## Geeft als resultaat het discontopercentage voor een waardepapier +DOLLARDE = EURO.DE ## Converteert een prijs in euro's, uitgedrukt in een breuk, naar een prijs in euro's, uitgedrukt in een decimaal getal +DOLLARFR = EURO.BR ## Converteert een prijs in euro's, uitgedrukt in een decimaal getal, naar een prijs in euro's, uitgedrukt in een breuk +DURATION = DUUR ## Geeft als resultaat de gewogen gemiddelde looptijd voor een waardepapier met periodieke rentebetalingen +EFFECT = EFFECT.RENTE ## Geeft als resultaat het effectieve jaarlijkse rentepercentage +FV = TW ## Geeft als resultaat de toekomstige waarde van een investering +FVSCHEDULE = TOEK.WAARDE2 ## Geeft als resultaat de toekomstige waarde van een bepaalde hoofdsom na het toepassen van een reeks samengestelde rentepercentages +INTRATE = RENTEPERCENTAGE ## Geeft als resultaat het rentepercentage voor een volgestort waardepapier +IPMT = IBET ## Geeft als resultaat de te betalen rente voor een investering over een bepaalde termijn +IRR = IR ## Geeft als resultaat de interne rentabiliteit voor een reeks cashflows +ISPMT = ISBET ## Geeft als resultaat de rente die is betaald tijdens een bepaalde termijn van een investering +MDURATION = AANG.DUUR ## Geeft als resultaat de aangepaste Macauley-looptijd voor een waardepapier, aangenomen dat de nominale waarde € 100 bedraagt +MIRR = GIR ## Geeft als resultaat de interne rentabiliteit voor een serie cashflows, waarbij voor betalingen een ander rentepercentage geldt dan voor inkomsten +NOMINAL = NOMINALE.RENTE ## Geeft als resultaat het nominale jaarlijkse rentepercentage +NPER = NPER ## Geeft als resultaat het aantal termijnen van een investering +NPV = NHW ## Geeft als resultaat de netto huidige waarde van een investering op basis van een reeks periodieke cashflows en een discontopercentage +ODDFPRICE = AFW.ET.PRIJS ## Geeft als resultaat de prijs per € 100 nominale waarde voor een waardepapier met een afwijkende eerste termijn +ODDFYIELD = AFW.ET.REND ## Geeft als resultaat het rendement voor een waardepapier met een afwijkende eerste termijn +ODDLPRICE = AFW.LT.PRIJS ## Geeft als resultaat de prijs per € 100 nominale waarde voor een waardepapier met een afwijkende laatste termijn +ODDLYIELD = AFW.LT.REND ## Geeft als resultaat het rendement voor een waardepapier met een afwijkende laatste termijn +PMT = BET ## Geeft als resultaat de periodieke betaling voor een annuïteit +PPMT = PBET ## Geeft als resultaat de afbetaling op de hoofdsom voor een bepaalde termijn +PRICE = PRIJS.NOM ## Geeft als resultaat de prijs per € 100 nominale waarde voor een waardepapier waarvan de rente periodiek wordt uitgekeerd +PRICEDISC = PRIJS.DISCONTO ## Geeft als resultaat de prijs per € 100 nominale waarde voor een verdisconteerd waardepapier +PRICEMAT = PRIJS.VERVALDAG ## Geeft als resultaat de prijs per € 100 nominale waarde voor een waardepapier waarvan de rente wordt uitgekeerd op de vervaldatum +PV = HW ## Geeft als resultaat de huidige waarde van een investering +RATE = RENTE ## Geeft als resultaat het periodieke rentepercentage voor een annuïteit +RECEIVED = OPBRENGST ## Geeft als resultaat het bedrag dat op de vervaldatum wordt uitgekeerd voor een volgestort waardepapier +SLN = LIN.AFSCHR ## Geeft als resultaat de lineaire afschrijving van activa over één termijn +SYD = SYD ## Geeft als resultaat de afschrijving van activa over een bepaalde termijn met behulp van de 'Sum-Of-Years-Digits'-methode +TBILLEQ = SCHATK.OBL ## Geeft als resultaat het rendement op schatkistpapier, dat op dezelfde manier wordt berekend als het rendement op obligaties +TBILLPRICE = SCHATK.PRIJS ## Bepaalt de prijs per € 100 nominale waarde voor schatkistpapier +TBILLYIELD = SCHATK.REND ## Berekent het rendement voor schatkistpapier +VDB = VDB ## Geeft als resultaat de afschrijving van activa over een gehele of gedeeltelijke termijn met behulp van de 'declining balance'-methode +XIRR = IR.SCHEMA ## Berekent de interne rentabiliteit voor een betalingsschema van cashflows +XNPV = NHW2 ## Berekent de huidige nettowaarde voor een betalingsschema van cashflows +YIELD = RENDEMENT ## Geeft als resultaat het rendement voor een waardepapier waarvan de rente periodiek wordt uitgekeerd +YIELDDISC = REND.DISCONTO ## Geeft als resultaat het jaarlijkse rendement voor een verdisconteerd waardepapier, bijvoorbeeld schatkistpapier +YIELDMAT = REND.VERVAL ## Geeft als resultaat het jaarlijkse rendement voor een waardepapier waarvan de rente wordt uitgekeerd op de vervaldatum + + +## +## Information functions Informatiefuncties +## +CELL = CEL ## Geeft als resultaat informatie over de opmaak, locatie of inhoud van een cel +ERROR.TYPE = TYPE.FOUT ## Geeft als resultaat een getal dat overeenkomt met een van de foutwaarden van Microsoft Excel +INFO = INFO ## Geeft als resultaat informatie over de huidige besturingsomgeving +ISBLANK = ISLEEG ## Geeft als resultaat WAAR als de waarde leeg is +ISERR = ISFOUT2 ## Geeft als resultaat WAAR als de waarde een foutwaarde is, met uitzondering van #N/B +ISERROR = ISFOUT ## Geeft als resultaat WAAR als de waarde een foutwaarde is +ISEVEN = IS.EVEN ## Geeft als resultaat WAAR als het getal even is +ISLOGICAL = ISLOGISCH ## Geeft als resultaat WAAR als de waarde een logische waarde is +ISNA = ISNB ## Geeft als resultaat WAAR als de waarde de foutwaarde #N/B is +ISNONTEXT = ISGEENTEKST ## Geeft als resultaat WAAR als de waarde geen tekst is +ISNUMBER = ISGETAL ## Geeft als resultaat WAAR als de waarde een getal is +ISODD = IS.ONEVEN ## Geeft als resultaat WAAR als het getal oneven is +ISREF = ISVERWIJZING ## Geeft als resultaat WAAR als de waarde een verwijzing is +ISTEXT = ISTEKST ## Geeft als resultaat WAAR als de waarde tekst is +N = N ## Geeft als resultaat een waarde die is geconverteerd naar een getal +NA = NB ## Geeft als resultaat de foutwaarde #N/B +TYPE = TYPE ## Geeft als resultaat een getal dat het gegevenstype van een waarde aangeeft + + +## +## Logical functions Logische functies +## +AND = EN ## Geeft als resultaat WAAR als alle argumenten WAAR zijn +FALSE = ONWAAR ## Geeft als resultaat de logische waarde ONWAAR +IF = ALS ## Geeft een logische test aan +IFERROR = ALS.FOUT ## Retourneert een waarde die u opgeeft als een formule een fout oplevert, anders wordt het resultaat van de formule geretourneerd +NOT = NIET ## Keert de logische waarde van het argument om +OR = OF ## Geeft als resultaat WAAR als minimaal een van de argumenten WAAR is +TRUE = WAAR ## Geeft als resultaat de logische waarde WAAR + + +## +## Lookup and reference functions Zoek- en verwijzingsfuncties +## +ADDRESS = ADRES ## Geeft als resultaat een verwijzing, in de vorm van tekst, naar één bepaalde cel in een werkblad +AREAS = BEREIKEN ## Geeft als resultaat het aantal bereiken in een verwijzing +CHOOSE = KIEZEN ## Kiest een waarde uit een lijst met waarden +COLUMN = KOLOM ## Geeft als resultaat het kolomnummer van een verwijzing +COLUMNS = KOLOMMEN ## Geeft als resultaat het aantal kolommen in een verwijzing +HLOOKUP = HORIZ.ZOEKEN ## Zoekt in de bovenste rij van een matrix naar een bepaalde waarde en geeft als resultaat de gevonden waarde in de opgegeven cel +HYPERLINK = HYPERLINK ## Maakt een snelkoppeling of een sprong waarmee een document wordt geopend dat is opgeslagen op een netwerkserver, een intranet of op internet +INDEX = INDEX ## Kiest met een index een waarde uit een verwijzing of een matrix +INDIRECT = INDIRECT ## Geeft als resultaat een verwijzing die wordt aangegeven met een tekstwaarde +LOOKUP = ZOEKEN ## Zoekt naar bepaalde waarden in een vector of een matrix +MATCH = VERGELIJKEN ## Zoekt naar bepaalde waarden in een verwijzing of een matrix +OFFSET = VERSCHUIVING ## Geeft als resultaat een nieuwe verwijzing die is verschoven ten opzichte van een bepaalde verwijzing +ROW = RIJ ## Geeft als resultaat het rijnummer van een verwijzing +ROWS = RIJEN ## Geeft als resultaat het aantal rijen in een verwijzing +RTD = RTG ## Haalt realtimegegevens op uit een programma dat COM-automatisering (automatisering: een methode waarmee de ene toepassing objecten van een andere toepassing of ontwikkelprogramma kan besturen. Automatisering werd vroeger OLE-automatisering genoemd. Automatisering is een industrienorm die deel uitmaakt van het Component Object Model (COM).) ondersteunt +TRANSPOSE = TRANSPONEREN ## Geeft als resultaat de getransponeerde van een matrix +VLOOKUP = VERT.ZOEKEN ## Zoekt in de meest linkse kolom van een matrix naar een bepaalde waarde en geeft als resultaat de waarde in de opgegeven cel + + +## +## Math and trigonometry functions Wiskundige en trigonometrische functies +## +ABS = ABS ## Geeft als resultaat de absolute waarde van een getal +ACOS = BOOGCOS ## Geeft als resultaat de boogcosinus van een getal +ACOSH = BOOGCOSH ## Geeft als resultaat de inverse cosinus hyperbolicus van een getal +ASIN = BOOGSIN ## Geeft als resultaat de boogsinus van een getal +ASINH = BOOGSINH ## Geeft als resultaat de inverse sinus hyperbolicus van een getal +ATAN = BOOGTAN ## Geeft als resultaat de boogtangens van een getal +ATAN2 = BOOGTAN2 ## Geeft als resultaat de boogtangens van de x- en y-coördinaten +ATANH = BOOGTANH ## Geeft als resultaat de inverse tangens hyperbolicus van een getal +CEILING = AFRONDEN.BOVEN ## Rondt de absolute waarde van een getal naar boven af op het dichtstbijzijnde gehele getal of het dichtstbijzijnde significante veelvoud +COMBIN = COMBINATIES ## Geeft als resultaat het aantal combinaties voor een bepaald aantal objecten +COS = COS ## Geeft als resultaat de cosinus van een getal +COSH = COSH ## Geeft als resultaat de cosinus hyperbolicus van een getal +DEGREES = GRADEN ## Converteert radialen naar graden +EVEN = EVEN ## Rondt het getal af op het dichtstbijzijnde gehele even getal +EXP = EXP ## Verheft e tot de macht van een bepaald getal +FACT = FACULTEIT ## Geeft als resultaat de faculteit van een getal +FACTDOUBLE = DUBBELE.FACULTEIT ## Geeft als resultaat de dubbele faculteit van een getal +FLOOR = AFRONDEN.BENEDEN ## Rondt de absolute waarde van een getal naar beneden af +GCD = GGD ## Geeft als resultaat de grootste gemene deler +INT = INTEGER ## Rondt een getal naar beneden af op het dichtstbijzijnde gehele getal +LCM = KGV ## Geeft als resultaat het kleinste gemene veelvoud +LN = LN ## Geeft als resultaat de natuurlijke logaritme van een getal +LOG = LOG ## Geeft als resultaat de logaritme met het opgegeven grondtal van een getal +LOG10 = LOG10 ## Geeft als resultaat de logaritme met grondtal 10 van een getal +MDETERM = DETERMINANTMAT ## Geeft als resultaat de determinant van een matrix +MINVERSE = INVERSEMAT ## Geeft als resultaat de inverse van een matrix +MMULT = PRODUCTMAT ## Geeft als resultaat het product van twee matrices +MOD = REST ## Geeft als resultaat het restgetal van een deling +MROUND = AFRONDEN.N.VEELVOUD ## Geeft als resultaat een getal afgerond op het gewenste veelvoud +MULTINOMIAL = MULTINOMIAAL ## Geeft als resultaat de multinomiaalcoëfficiënt van een reeks getallen +ODD = ONEVEN ## Rondt de absolute waarde van het getal naar boven af op het dichtstbijzijnde gehele oneven getal +PI = PI ## Geeft als resultaat de waarde van pi +POWER = MACHT ## Verheft een getal tot een macht +PRODUCT = PRODUCT ## Vermenigvuldigt de argumenten met elkaar +QUOTIENT = QUOTIENT ## Geeft als resultaat de uitkomst van een deling als geheel getal +RADIANS = RADIALEN ## Converteert graden naar radialen +RAND = ASELECT ## Geeft als resultaat een willekeurig getal tussen 0 en 1 +RANDBETWEEN = ASELECTTUSSEN ## Geeft een willekeurig getal tussen de getallen die u hebt opgegeven +ROMAN = ROMEINS ## Converteert een Arabisch getal naar een Romeins getal en geeft het resultaat weer in de vorm van tekst +ROUND = AFRONDEN ## Rondt een getal af op het opgegeven aantal decimalen +ROUNDDOWN = AFRONDEN.NAAR.BENEDEN ## Rondt de absolute waarde van een getal naar beneden af +ROUNDUP = AFRONDEN.NAAR.BOVEN ## Rondt de absolute waarde van een getal naar boven af +SERIESSUM = SOM.MACHTREEKS ## Geeft als resultaat de som van een machtreeks die is gebaseerd op de formule +SIGN = POS.NEG ## Geeft als resultaat het teken van een getal +SIN = SIN ## Geeft als resultaat de sinus van de opgegeven hoek +SINH = SINH ## Geeft als resultaat de sinus hyperbolicus van een getal +SQRT = WORTEL ## Geeft als resultaat de positieve vierkantswortel van een getal +SQRTPI = WORTEL.PI ## Geeft als resultaat de vierkantswortel van (getal * pi) +SUBTOTAL = SUBTOTAAL ## Geeft als resultaat een subtotaal voor een bereik +SUM = SOM ## Telt de argumenten op +SUMIF = SOM.ALS ## Telt de getallen bij elkaar op die voldoen aan een bepaald criterium +SUMIFS = SOMMEN.ALS ## Telt de cellen in een bereik op die aan meerdere criteria voldoen +SUMPRODUCT = SOMPRODUCT ## Geeft als resultaat de som van de producten van de corresponderende matrixelementen +SUMSQ = KWADRATENSOM ## Geeft als resultaat de som van de kwadraten van de argumenten +SUMX2MY2 = SOM.X2MINY2 ## Geeft als resultaat de som van het verschil tussen de kwadraten van corresponderende waarden in twee matrices +SUMX2PY2 = SOM.X2PLUSY2 ## Geeft als resultaat de som van de kwadratensom van corresponderende waarden in twee matrices +SUMXMY2 = SOM.XMINY.2 ## Geeft als resultaat de som van de kwadraten van de verschillen tussen de corresponderende waarden in twee matrices +TAN = TAN ## Geeft als resultaat de tangens van een getal +TANH = TANH ## Geeft als resultaat de tangens hyperbolicus van een getal +TRUNC = GEHEEL ## Kapt een getal af tot een geheel getal + + +## +## Statistical functions Statistische functies +## +AVEDEV = GEM.DEVIATIE ## Geeft als resultaat het gemiddelde van de absolute deviaties van gegevenspunten ten opzichte van hun gemiddelde waarde +AVERAGE = GEMIDDELDE ## Geeft als resultaat het gemiddelde van de argumenten +AVERAGEA = GEMIDDELDEA ## Geeft als resultaat het gemiddelde van de argumenten, inclusief getallen, tekst en logische waarden +AVERAGEIF = GEMIDDELDE.ALS ## Geeft het gemiddelde (rekenkundig gemiddelde) als resultaat van alle cellen in een bereik die voldoen aan de opgegeven criteria +AVERAGEIFS = GEMIDDELDEN.ALS ## Geeft het gemiddelde (rekenkundig gemiddelde) als resultaat van alle cellen die aan meerdere criteria voldoen +BETADIST = BETA.VERD ## Geeft als resultaat de cumulatieve bèta-verdelingsfunctie +BETAINV = BETA.INV ## Geeft als resultaat de inverse van de cumulatieve verdelingsfunctie voor een gegeven bèta-verdeling +BINOMDIST = BINOMIALE.VERD ## Geeft als resultaat de binomiale verdeling +CHIDIST = CHI.KWADRAAT ## Geeft als resultaat de eenzijdige kans van de chi-kwadraatverdeling +CHIINV = CHI.KWADRAAT.INV ## Geeft als resultaat de inverse van een eenzijdige kans van de chi-kwadraatverdeling +CHITEST = CHI.TOETS ## Geeft als resultaat de onafhankelijkheidstoets +CONFIDENCE = BETROUWBAARHEID ## Geeft als resultaat het betrouwbaarheidsinterval van een gemiddelde waarde voor de elementen van een populatie +CORREL = CORRELATIE ## Geeft als resultaat de correlatiecoëfficiënt van twee gegevensverzamelingen +COUNT = AANTAL ## Telt het aantal getallen in de argumentenlijst +COUNTA = AANTALARG ## Telt het aantal waarden in de argumentenlijst +COUNTBLANK = AANTAL.LEGE.CELLEN ## Telt het aantal lege cellen in een bereik +COUNTIF = AANTAL.ALS ## Telt in een bereik het aantal cellen die voldoen aan een bepaald criterium +COUNTIFS = AANTALLEN.ALS ## Telt in een bereik het aantal cellen die voldoen aan meerdere criteria +COVAR = COVARIANTIE ## Geeft als resultaat de covariantie, het gemiddelde van de producten van de gepaarde deviaties +CRITBINOM = CRIT.BINOM ## Geeft als resultaat de kleinste waarde waarvoor de binomiale verdeling kleiner is dan of gelijk is aan het criterium +DEVSQ = DEV.KWAD ## Geeft als resultaat de som van de deviaties in het kwadraat +EXPONDIST = EXPON.VERD ## Geeft als resultaat de exponentiële verdeling +FDIST = F.VERDELING ## Geeft als resultaat de F-verdeling +FINV = F.INVERSE ## Geeft als resultaat de inverse van de F-verdeling +FISHER = FISHER ## Geeft als resultaat de Fisher-transformatie +FISHERINV = FISHER.INV ## Geeft als resultaat de inverse van de Fisher-transformatie +FORECAST = VOORSPELLEN ## Geeft als resultaat een waarde op basis van een lineaire trend +FREQUENCY = FREQUENTIE ## Geeft als resultaat een frequentieverdeling in de vorm van een verticale matrix +FTEST = F.TOETS ## Geeft als resultaat een F-toets +GAMMADIST = GAMMA.VERD ## Geeft als resultaat de gamma-verdeling +GAMMAINV = GAMMA.INV ## Geeft als resultaat de inverse van de cumulatieve gamma-verdeling +GAMMALN = GAMMA.LN ## Geeft als resultaat de natuurlijke logaritme van de gamma-functie, G(x) +GEOMEAN = MEETK.GEM ## Geeft als resultaat het meetkundige gemiddelde +GROWTH = GROEI ## Geeft als resultaat de waarden voor een exponentiële trend +HARMEAN = HARM.GEM ## Geeft als resultaat het harmonische gemiddelde +HYPGEOMDIST = HYPERGEO.VERD ## Geeft als resultaat de hypergeometrische verdeling +INTERCEPT = SNIJPUNT ## Geeft als resultaat het snijpunt van de lineaire regressielijn met de y-as +KURT = KURTOSIS ## Geeft als resultaat de kurtosis van een gegevensverzameling +LARGE = GROOTSTE ## Geeft als resultaat de op k-1 na grootste waarde in een gegevensverzameling +LINEST = LIJNSCH ## Geeft als resultaat de parameters van een lineaire trend +LOGEST = LOGSCH ## Geeft als resultaat de parameters van een exponentiële trend +LOGINV = LOG.NORM.INV ## Geeft als resultaat de inverse van de logaritmische normale verdeling +LOGNORMDIST = LOG.NORM.VERD ## Geeft als resultaat de cumulatieve logaritmische normale verdeling +MAX = MAX ## Geeft als resultaat de maximumwaarde in een lijst met argumenten +MAXA = MAXA ## Geeft als resultaat de maximumwaarde in een lijst met argumenten, inclusief getallen, tekst en logische waarden +MEDIAN = MEDIAAN ## Geeft als resultaat de mediaan van de opgegeven getallen +MIN = MIN ## Geeft als resultaat de minimumwaarde in een lijst met argumenten +MINA = MINA ## Geeft als resultaat de minimumwaarde in een lijst met argumenten, inclusief getallen, tekst en logische waarden +MODE = MODUS ## Geeft als resultaat de meest voorkomende waarde in een gegevensverzameling +NEGBINOMDIST = NEG.BINOM.VERD ## Geeft als resultaat de negatieve binomiaalverdeling +NORMDIST = NORM.VERD ## Geeft als resultaat de cumulatieve normale verdeling +NORMINV = NORM.INV ## Geeft als resultaat de inverse van de cumulatieve standaardnormale verdeling +NORMSDIST = STAND.NORM.VERD ## Geeft als resultaat de cumulatieve standaardnormale verdeling +NORMSINV = STAND.NORM.INV ## Geeft als resultaat de inverse van de cumulatieve normale verdeling +PEARSON = PEARSON ## Geeft als resultaat de correlatiecoëfficiënt van Pearson +PERCENTILE = PERCENTIEL ## Geeft als resultaat het k-de percentiel van waarden in een bereik +PERCENTRANK = PERCENT.RANG ## Geeft als resultaat de positie, in procenten uitgedrukt, van een waarde in de rangorde van een gegevensverzameling +PERMUT = PERMUTATIES ## Geeft als resultaat het aantal permutaties voor een gegeven aantal objecten +POISSON = POISSON ## Geeft als resultaat de Poisson-verdeling +PROB = KANS ## Geeft als resultaat de kans dat waarden zich tussen twee grenzen bevinden +QUARTILE = KWARTIEL ## Geeft als resultaat het kwartiel van een gegevensverzameling +RANK = RANG ## Geeft als resultaat het rangnummer van een getal in een lijst getallen +RSQ = R.KWADRAAT ## Geeft als resultaat het kwadraat van de Pearson-correlatiecoëfficiënt +SKEW = SCHEEFHEID ## Geeft als resultaat de mate van asymmetrie van een verdeling +SLOPE = RICHTING ## Geeft als resultaat de richtingscoëfficiënt van een lineaire regressielijn +SMALL = KLEINSTE ## Geeft als resultaat de op k-1 na kleinste waarde in een gegevensverzameling +STANDARDIZE = NORMALISEREN ## Geeft als resultaat een genormaliseerde waarde +STDEV = STDEV ## Maakt een schatting van de standaarddeviatie op basis van een steekproef +STDEVA = STDEVA ## Maakt een schatting van de standaarddeviatie op basis van een steekproef, inclusief getallen, tekst en logische waarden +STDEVP = STDEVP ## Berekent de standaarddeviatie op basis van de volledige populatie +STDEVPA = STDEVPA ## Berekent de standaarddeviatie op basis van de volledige populatie, inclusief getallen, tekst en logische waarden +STEYX = STAND.FOUT.YX ## Geeft als resultaat de standaardfout in de voorspelde y-waarde voor elke x in een regressie +TDIST = T.VERD ## Geeft als resultaat de Student T-verdeling +TINV = T.INV ## Geeft als resultaat de inverse van de Student T-verdeling +TREND = TREND ## Geeft als resultaat de waarden voor een lineaire trend +TRIMMEAN = GETRIMD.GEM ## Geeft als resultaat het gemiddelde van waarden in een gegevensverzameling +TTEST = T.TOETS ## Geeft als resultaat de kans met behulp van de Student T-toets +VAR = VAR ## Maakt een schatting van de variantie op basis van een steekproef +VARA = VARA ## Maakt een schatting van de variantie op basis van een steekproef, inclusief getallen, tekst en logische waarden +VARP = VARP ## Berekent de variantie op basis van de volledige populatie +VARPA = VARPA ## Berekent de standaarddeviatie op basis van de volledige populatie, inclusief getallen, tekst en logische waarden +WEIBULL = WEIBULL ## Geeft als resultaat de Weibull-verdeling +ZTEST = Z.TOETS ## Geeft als resultaat de eenzijdige kanswaarde van een Z-toets + + +## +## Text functions Tekstfuncties +## +ASC = ASC ## Wijzigt Nederlandse letters of katakanatekens over de volle breedte (dubbel-bytetekens) binnen een tekenreeks in tekens over de halve breedte (enkel-bytetekens) +BAHTTEXT = BAHT.TEKST ## Converteert een getal naar tekst met de valutanotatie ß (baht) +CHAR = TEKEN ## Geeft als resultaat het teken dat hoort bij de opgegeven code +CLEAN = WISSEN.CONTROL ## Verwijdert alle niet-afdrukbare tekens uit een tekst +CODE = CODE ## Geeft als resultaat de numerieke code voor het eerste teken in een tekenreeks +CONCATENATE = TEKST.SAMENVOEGEN ## Voegt verschillende tekstfragmenten samen tot één tekstfragment +DOLLAR = EURO ## Converteert een getal naar tekst met de valutanotatie € (euro) +EXACT = GELIJK ## Controleert of twee tekenreeksen identiek zijn +FIND = VIND.ALLES ## Zoekt een bepaalde tekenreeks in een tekst (waarbij onderscheid wordt gemaakt tussen hoofdletters en kleine letters) +FINDB = VIND.ALLES.B ## Zoekt een bepaalde tekenreeks in een tekst (waarbij onderscheid wordt gemaakt tussen hoofdletters en kleine letters) +FIXED = VAST ## Maakt een getal als tekst met een vast aantal decimalen op +JIS = JIS ## Wijzigt Nederlandse letters of katakanatekens over de halve breedte (enkel-bytetekens) binnen een tekenreeks in tekens over de volle breedte (dubbel-bytetekens) +LEFT = LINKS ## Geeft als resultaat de meest linkse tekens in een tekenreeks +LEFTB = LINKSB ## Geeft als resultaat de meest linkse tekens in een tekenreeks +LEN = LENGTE ## Geeft als resultaat het aantal tekens in een tekenreeks +LENB = LENGTEB ## Geeft als resultaat het aantal tekens in een tekenreeks +LOWER = KLEINE.LETTERS ## Zet tekst om in kleine letters +MID = MIDDEN ## Geeft als resultaat een bepaald aantal tekens van een tekenreeks vanaf de positie die u opgeeft +MIDB = DEELB ## Geeft als resultaat een bepaald aantal tekens van een tekenreeks vanaf de positie die u opgeeft +PHONETIC = FONETISCH ## Haalt de fonetische tekens (furigana) uit een tekenreeks op +PROPER = BEGINLETTERS ## Zet de eerste letter van elk woord in een tekst om in een hoofdletter +REPLACE = VERVANG ## Vervangt tekens binnen een tekst +REPLACEB = VERVANGENB ## Vervangt tekens binnen een tekst +REPT = HERHALING ## Herhaalt een tekst een aantal malen +RIGHT = RECHTS ## Geeft als resultaat de meest rechtse tekens in een tekenreeks +RIGHTB = RECHTSB ## Geeft als resultaat de meest rechtse tekens in een tekenreeks +SEARCH = VIND.SPEC ## Zoekt een bepaalde tekenreeks in een tekst (waarbij geen onderscheid wordt gemaakt tussen hoofdletters en kleine letters) +SEARCHB = VIND.SPEC.B ## Zoekt een bepaalde tekenreeks in een tekst (waarbij geen onderscheid wordt gemaakt tussen hoofdletters en kleine letters) +SUBSTITUTE = SUBSTITUEREN ## Vervangt oude tekst door nieuwe tekst in een tekenreeks +T = T ## Converteert de argumenten naar tekst +TEXT = TEKST ## Maakt een getal op en converteert het getal naar tekst +TRIM = SPATIES.WISSEN ## Verwijdert de spaties uit een tekst +UPPER = HOOFDLETTERS ## Zet tekst om in hoofdletters +VALUE = WAARDE ## Converteert tekst naar een getal diff --git a/PHPExcel/locale/no/config b/PHPExcel/locale/no/config new file mode 100644 index 0000000..5bf96a1 --- /dev/null +++ b/PHPExcel/locale/no/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = kr + + +## +## Excel Error Codes (For future use) +## +NULL = #NULL! +DIV0 = #DIV/0! +VALUE = #VERDI! +REF = #REF! +NAME = #NAVN? +NUM = #NUM! +NA = #I/T diff --git a/PHPExcel/locale/no/functions b/PHPExcel/locale/no/functions new file mode 100644 index 0000000..917c7f7 --- /dev/null +++ b/PHPExcel/locale/no/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Funksjonene Tillegg og Automatisering +## +GETPIVOTDATA = HENTPIVOTDATA ## Returnerer data som er lagret i en pivottabellrapport + + +## +## Cube functions Kubefunksjoner +## +CUBEKPIMEMBER = KUBEKPIMEDLEM ## Returnerer navnet, egenskapen og målet for en viktig ytelsesindikator (KPI), og viser navnet og egenskapen i cellen. En KPI er en målbar enhet, for eksempel månedlig bruttoinntjening eller kvartalsvis inntjening per ansatt, og brukes til å overvåke ytelsen i en organisasjon. +CUBEMEMBER = KUBEMEDLEM ## Returnerer et medlem eller en tuppel i et kubehierarki. Brukes til å validere at medlemmet eller tuppelen finnes i kuben. +CUBEMEMBERPROPERTY = KUBEMEDLEMEGENSKAP ## Returnerer verdien til en medlemsegenskap i kuben. Brukes til å validere at et medlemsnavn finnes i kuben, og til å returnere den angitte egenskapen for dette medlemmet. +CUBERANKEDMEMBER = KUBERANGERTMEDLEM ## Returnerer det n-te, eller rangerte, medlemmet i et sett. Brukes til å returnere ett eller flere elementer i et sett, for eksempel de 10 beste studentene. +CUBESET = KUBESETT ## Definerer et beregnet sett av medlemmer eller tuppeler ved å sende et settuttrykk til kuben på serveren, noe som oppretter settet og deretter returnerer dette settet til Microsoft Office Excel. +CUBESETCOUNT = KUBESETTANTALL ## Returnerer antallet elementer i et sett. +CUBEVALUE = KUBEVERDI ## Returnerer en aggregert verdi fra en kube. + + +## +## Database functions Databasefunksjoner +## +DAVERAGE = DGJENNOMSNITT ## Returnerer gjennomsnittet av merkede databaseposter +DCOUNT = DANTALL ## Teller celler som inneholder tall i en database +DCOUNTA = DANTALLA ## Teller celler som ikke er tomme i en database +DGET = DHENT ## Trekker ut fra en database en post som oppfyller angitte vilkår +DMAX = DMAKS ## Returnerer maksimumsverdien fra merkede databaseposter +DMIN = DMIN ## Returnerer minimumsverdien fra merkede databaseposter +DPRODUCT = DPRODUKT ## Multipliserer verdiene i et bestemt felt med poster som oppfyller vilkårene i en database +DSTDEV = DSTDAV ## Estimerer standardavviket basert på et utvalg av merkede databaseposter +DSTDEVP = DSTAVP ## Beregner standardavviket basert på at merkede databaseposter utgjør hele populasjonen +DSUM = DSUMMER ## Legger til tallene i feltkolonnen med poster, i databasen som oppfyller vilkårene +DVAR = DVARIANS ## Estimerer variansen basert på et utvalg av merkede databaseposter +DVARP = DVARIANSP ## Beregner variansen basert på at merkede databaseposter utgjør hele populasjonen + + +## +## Date and time functions Dato- og tidsfunksjoner +## +DATE = DATO ## Returnerer serienummeret som svarer til en bestemt dato +DATEVALUE = DATOVERDI ## Konverterer en dato med tekstformat til et serienummer +DAY = DAG ## Konverterer et serienummer til en dag i måneden +DAYS360 = DAGER360 ## Beregner antall dager mellom to datoer basert på et år med 360 dager +EDATE = DAG.ETTER ## Returnerer serienummeret som svarer til datoen som er det indikerte antall måneder før eller etter startdatoen +EOMONTH = MÅNEDSSLUTT ## Returnerer serienummeret som svarer til siste dag i måneden, før eller etter et angitt antall måneder +HOUR = TIME ## Konverterer et serienummer til en time +MINUTE = MINUTT ## Konverterer et serienummer til et minutt +MONTH = MÅNED ## Konverterer et serienummer til en måned +NETWORKDAYS = NETT.ARBEIDSDAGER ## Returnerer antall hele arbeidsdager mellom to datoer +NOW = NÅ ## Returnerer serienummeret som svarer til gjeldende dato og klokkeslett +SECOND = SEKUND ## Konverterer et serienummer til et sekund +TIME = TID ## Returnerer serienummeret som svarer til et bestemt klokkeslett +TIMEVALUE = TIDSVERDI ## Konverterer et klokkeslett i tekstformat til et serienummer +TODAY = IDAG ## Returnerer serienummeret som svarer til dagens dato +WEEKDAY = UKEDAG ## Konverterer et serienummer til en ukedag +WEEKNUM = UKENR ## Konverterer et serienummer til et tall som representerer hvilket nummer uken har i et år +WORKDAY = ARBEIDSDAG ## Returnerer serienummeret som svarer til datoen før eller etter et angitt antall arbeidsdager +YEAR = ÅR ## Konverterer et serienummer til et år +YEARFRAC = ÅRDEL ## Returnerer brøkdelen for året, som svarer til antall hele dager mellom startdato og sluttdato + + +## +## Engineering functions Tekniske funksjoner +## +BESSELI = BESSELI ## Returnerer den endrede Bessel-funksjonen In(x) +BESSELJ = BESSELJ ## Returnerer Bessel-funksjonen Jn(x) +BESSELK = BESSELK ## Returnerer den endrede Bessel-funksjonen Kn(x) +BESSELY = BESSELY ## Returnerer Bessel-funksjonen Yn(x) +BIN2DEC = BINTILDES ## Konverterer et binært tall til et desimaltall +BIN2HEX = BINTILHEKS ## Konverterer et binært tall til et heksadesimaltall +BIN2OCT = BINTILOKT ## Konverterer et binært tall til et oktaltall +COMPLEX = KOMPLEKS ## Konverterer reelle og imaginære koeffisienter til et komplekst tall +CONVERT = KONVERTER ## Konverterer et tall fra ett målsystem til et annet +DEC2BIN = DESTILBIN ## Konverterer et desimaltall til et binærtall +DEC2HEX = DESTILHEKS ## Konverterer et heltall i 10-tallsystemet til et heksadesimalt tall +DEC2OCT = DESTILOKT ## Konverterer et heltall i 10-tallsystemet til et oktaltall +DELTA = DELTA ## Undersøker om to verdier er like +ERF = FEILF ## Returnerer feilfunksjonen +ERFC = FEILFK ## Returnerer den komplementære feilfunksjonen +GESTEP = GRENSEVERDI ## Tester om et tall er større enn en terskelverdi +HEX2BIN = HEKSTILBIN ## Konverterer et heksadesimaltall til et binært tall +HEX2DEC = HEKSTILDES ## Konverterer et heksadesimalt tall til et heltall i 10-tallsystemet +HEX2OCT = HEKSTILOKT ## Konverterer et heksadesimalt tall til et oktaltall +IMABS = IMABS ## Returnerer absoluttverdien (koeffisienten) til et komplekst tall +IMAGINARY = IMAGINÆR ## Returnerer den imaginære koeffisienten til et komplekst tall +IMARGUMENT = IMARGUMENT ## Returnerer argumentet theta, som er en vinkel uttrykt i radianer +IMCONJUGATE = IMKONJUGERT ## Returnerer den komplekse konjugaten til et komplekst tall +IMCOS = IMCOS ## Returnerer cosinus til et komplekst tall +IMDIV = IMDIV ## Returnerer kvotienten til to komplekse tall +IMEXP = IMEKSP ## Returnerer eksponenten til et komplekst tall +IMLN = IMLN ## Returnerer den naturlige logaritmen for et komplekst tall +IMLOG10 = IMLOG10 ## Returnerer logaritmen med grunntall 10 for et komplekst tall +IMLOG2 = IMLOG2 ## Returnerer logaritmen med grunntall 2 for et komplekst tall +IMPOWER = IMOPPHØY ## Returnerer et komplekst tall opphøyd til en heltallspotens +IMPRODUCT = IMPRODUKT ## Returnerer produktet av komplekse tall +IMREAL = IMREELL ## Returnerer den reelle koeffisienten til et komplekst tall +IMSIN = IMSIN ## Returnerer sinus til et komplekst tall +IMSQRT = IMROT ## Returnerer kvadratroten av et komplekst tall +IMSUB = IMSUB ## Returnerer differansen mellom to komplekse tall +IMSUM = IMSUMMER ## Returnerer summen av komplekse tall +OCT2BIN = OKTTILBIN ## Konverterer et oktaltall til et binært tall +OCT2DEC = OKTTILDES ## Konverterer et oktaltall til et desimaltall +OCT2HEX = OKTTILHEKS ## Konverterer et oktaltall til et heksadesimaltall + + +## +## Financial functions Økonomiske funksjoner +## +ACCRINT = PÅLØPT.PERIODISK.RENTE ## Returnerer påløpte renter for et verdipapir som betaler periodisk rente +ACCRINTM = PÅLØPT.FORFALLSRENTE ## Returnerer den påløpte renten for et verdipapir som betaler rente ved forfall +AMORDEGRC = AMORDEGRC ## Returnerer avskrivningen for hver regnskapsperiode ved hjelp av en avskrivingskoeffisient +AMORLINC = AMORLINC ## Returnerer avskrivingen for hver regnskapsperiode +COUPDAYBS = OBLIG.DAGER.FF ## Returnerer antall dager fra begynnelsen av den rentebærende perioden til innløsningsdatoen +COUPDAYS = OBLIG.DAGER ## Returnerer antall dager i den rentebærende perioden som inneholder innløsningsdatoen +COUPDAYSNC = OBLIG.DAGER.NF ## Returnerer antall dager fra betalingsdato til neste renteinnbetalingsdato +COUPNCD = OBLIG.DAGER.EF ## Returnerer obligasjonsdatoen som kommer etter oppgjørsdatoen +COUPNUM = OBLIG.ANTALL ## Returnerer antall obligasjoner som skal betales mellom oppgjørsdatoen og forfallsdatoen +COUPPCD = OBLIG.DAG.FORRIGE ## Returnerer obligasjonsdatoen som kommer før oppgjørsdatoen +CUMIPMT = SAMLET.RENTE ## Returnerer den kumulative renten som er betalt mellom to perioder +CUMPRINC = SAMLET.HOVEDSTOL ## Returnerer den kumulative hovedstolen som er betalt for et lån mellom to perioder +DB = DAVSKR ## Returnerer avskrivningen for et aktivum i en angitt periode, foretatt med fast degressiv avskrivning +DDB = DEGRAVS ## Returnerer avskrivningen for et aktivum for en gitt periode, ved hjelp av dobbel degressiv avskrivning eller en metode som du selv angir +DISC = DISKONTERT ## Returnerer diskonteringsraten for et verdipapir +DOLLARDE = DOLLARDE ## Konverterer en valutapris uttrykt som en brøk, til en valutapris uttrykt som et desimaltall +DOLLARFR = DOLLARBR ## Konverterer en valutapris uttrykt som et desimaltall, til en valutapris uttrykt som en brøk +DURATION = VARIGHET ## Returnerer årlig varighet for et verdipapir med renter som betales periodisk +EFFECT = EFFEKTIV.RENTE ## Returnerer den effektive årlige rentesatsen +FV = SLUTTVERDI ## Returnerer fremtidig verdi for en investering +FVSCHEDULE = SVPLAN ## Returnerer den fremtidige verdien av en inngående hovedstol etter å ha anvendt en serie med sammensatte rentesatser +INTRATE = RENTESATS ## Returnerer rentefoten av et fullfinansiert verdipapir +IPMT = RAVDRAG ## Returnerer betalte renter på en investering for en gitt periode +IRR = IR ## Returnerer internrenten for en serie kontantstrømmer +ISPMT = ER.AVDRAG ## Beregner renten som er betalt for en investering i løpet av en bestemt periode +MDURATION = MVARIGHET ## Returnerer Macauleys modifiserte varighet for et verdipapir med en antatt pålydende verdi på kr 100,00 +MIRR = MODIR ## Returnerer internrenten der positive og negative kontantstrømmer finansieres med forskjellige satser +NOMINAL = NOMINELL ## Returnerer årlig nominell rentesats +NPER = PERIODER ## Returnerer antall perioder for en investering +NPV = NNV ## Returnerer netto nåverdi for en investering, basert på en serie periodiske kontantstrømmer og en rentesats +ODDFPRICE = AVVIKFP.PRIS ## Returnerer pris pålydende kr 100 for et verdipapir med en odde første periode +ODDFYIELD = AVVIKFP.AVKASTNING ## Returnerer avkastingen for et verdipapir med en odde første periode +ODDLPRICE = AVVIKSP.PRIS ## Returnerer pris pålydende kr 100 for et verdipapir med en odde siste periode +ODDLYIELD = AVVIKSP.AVKASTNING ## Returnerer avkastingen for et verdipapir med en odde siste periode +PMT = AVDRAG ## Returnerer periodisk betaling for en annuitet +PPMT = AMORT ## Returnerer betalingen på hovedstolen for en investering i en gitt periode +PRICE = PRIS ## Returnerer prisen per pålydende kr 100 for et verdipapir som gir periodisk avkastning +PRICEDISC = PRIS.DISKONTERT ## Returnerer prisen per pålydende kr 100 for et diskontert verdipapir +PRICEMAT = PRIS.FORFALL ## Returnerer prisen per pålydende kr 100 av et verdipapir som betaler rente ved forfall +PV = NÅVERDI ## Returnerer nåverdien av en investering +RATE = RENTE ## Returnerer rentesatsen per periode for en annuitet +RECEIVED = MOTTATT.AVKAST ## Returnerer summen som mottas ved forfallsdato for et fullinvestert verdipapir +SLN = LINAVS ## Returnerer den lineære avskrivningen for et aktivum i én periode +SYD = ÅRSAVS ## Returnerer årsavskrivningen for et aktivum i en angitt periode +TBILLEQ = TBILLEKV ## Returnerer den obligasjonsekvivalente avkastningen for en statsobligasjon +TBILLPRICE = TBILLPRIS ## Returnerer prisen per pålydende kr 100 for en statsobligasjon +TBILLYIELD = TBILLAVKASTNING ## Returnerer avkastningen til en statsobligasjon +VDB = VERDIAVS ## Returnerer avskrivningen for et aktivum i en angitt periode eller delperiode, ved hjelp av degressiv avskrivning +XIRR = XIR ## Returnerer internrenten for en serie kontantstrømmer som ikke nødvendigvis er periodiske +XNPV = XNNV ## Returnerer netto nåverdi for en serie kontantstrømmer som ikke nødvendigvis er periodiske +YIELD = AVKAST ## Returnerer avkastningen på et verdipapir som betaler periodisk rente +YIELDDISC = AVKAST.DISKONTERT ## Returnerer årlig avkastning for et diskontert verdipapir, for eksempel en statskasseveksel +YIELDMAT = AVKAST.FORFALL ## Returnerer den årlige avkastningen for et verdipapir som betaler rente ved forfallsdato + + +## +## Information functions Informasjonsfunksjoner +## +CELL = CELLE ## Returnerer informasjon om formatering, plassering eller innholdet til en celle +ERROR.TYPE = FEIL.TYPE ## Returnerer et tall som svarer til en feiltype +INFO = INFO ## Returnerer informasjon om gjeldende operativmiljø +ISBLANK = ERTOM ## Returnerer SANN hvis verdien er tom +ISERR = ERFEIL ## Returnerer SANN hvis verdien er en hvilken som helst annen feilverdi enn #I/T +ISERROR = ERFEIL ## Returnerer SANN hvis verdien er en hvilken som helst feilverdi +ISEVEN = ERPARTALL ## Returnerer SANN hvis tallet er et partall +ISLOGICAL = ERLOGISK ## Returnerer SANN hvis verdien er en logisk verdi +ISNA = ERIT ## Returnerer SANN hvis verdien er feilverdien #I/T +ISNONTEXT = ERIKKETEKST ## Returnerer SANN hvis verdien ikke er tekst +ISNUMBER = ERTALL ## Returnerer SANN hvis verdien er et tall +ISODD = ERODDETALL ## Returnerer SANN hvis tallet er et oddetall +ISREF = ERREF ## Returnerer SANN hvis verdien er en referanse +ISTEXT = ERTEKST ## Returnerer SANN hvis verdien er tekst +N = N ## Returnerer en verdi som er konvertert til et tall +NA = IT ## Returnerer feilverdien #I/T +TYPE = VERDITYPE ## Returnerer et tall som indikerer datatypen til en verdi + + +## +## Logical functions Logiske funksjoner +## +AND = OG ## Returnerer SANN hvis alle argumentene er lik SANN +FALSE = USANN ## Returnerer den logiske verdien USANN +IF = HVIS ## Angir en logisk test som skal utføres +IFERROR = HVISFEIL ## Returnerer en verdi du angir hvis en formel evaluerer til en feil. Ellers returnerer den resultatet av formelen. +NOT = IKKE ## Reverserer logikken til argumentet +OR = ELLER ## Returnerer SANN hvis ett eller flere argumenter er lik SANN +TRUE = SANN ## Returnerer den logiske verdien SANN + + +## +## Lookup and reference functions Oppslag- og referansefunksjoner +## +ADDRESS = ADRESSE ## Returnerer en referanse som tekst til en enkelt celle i et regneark +AREAS = OMRÅDER ## Returnerer antall områder i en referanse +CHOOSE = VELG ## Velger en verdi fra en liste med verdier +COLUMN = KOLONNE ## Returnerer kolonnenummeret for en referanse +COLUMNS = KOLONNER ## Returnerer antall kolonner i en referanse +HLOOKUP = FINN.KOLONNE ## Leter i den øverste raden i en matrise og returnerer verdien for den angitte cellen +HYPERLINK = HYPERKOBLING ## Oppretter en snarvei eller et hopp som åpner et dokument som er lagret på en nettverksserver, et intranett eller Internett +INDEX = INDEKS ## Bruker en indeks til å velge en verdi fra en referanse eller matrise +INDIRECT = INDIREKTE ## Returnerer en referanse angitt av en tekstverdi +LOOKUP = SLÅ.OPP ## Slår opp verdier i en vektor eller matrise +MATCH = SAMMENLIGNE ## Slår opp verdier i en referanse eller matrise +OFFSET = FORSKYVNING ## Returnerer en referanseforskyvning fra en gitt referanse +ROW = RAD ## Returnerer radnummeret for en referanse +ROWS = RADER ## Returnerer antall rader i en referanse +RTD = RTD ## Henter sanntidsdata fra et program som støtter COM-automatisering (automatisering: En måte å arbeide på med programobjekter fra et annet program- eller utviklingsverktøy. Tidligere kalt OLE-automatisering. Automatisering er en bransjestandard og en funksjon i Component Object Model (COM).) +TRANSPOSE = TRANSPONER ## Returnerer transponeringen av en matrise +VLOOKUP = FINN.RAD ## Leter i den første kolonnen i en matrise og flytter bortover raden for å returnere verdien til en celle + + +## +## Math and trigonometry functions Matematikk- og trigonometrifunksjoner +## +ABS = ABS ## Returnerer absoluttverdien til et tall +ACOS = ARCCOS ## Returnerer arcus cosinus til et tall +ACOSH = ARCCOSH ## Returnerer den inverse hyperbolske cosinus til et tall +ASIN = ARCSIN ## Returnerer arcus sinus til et tall +ASINH = ARCSINH ## Returnerer den inverse hyperbolske sinus til et tall +ATAN = ARCTAN ## Returnerer arcus tangens til et tall +ATAN2 = ARCTAN2 ## Returnerer arcus tangens fra x- og y-koordinater +ATANH = ARCTANH ## Returnerer den inverse hyperbolske tangens til et tall +CEILING = AVRUND.GJELDENDE.MULTIPLUM ## Runder av et tall til nærmeste heltall eller til nærmeste signifikante multiplum +COMBIN = KOMBINASJON ## Returnerer antall kombinasjoner for ett gitt antall objekter +COS = COS ## Returnerer cosinus til et tall +COSH = COSH ## Returnerer den hyperbolske cosinus til et tall +DEGREES = GRADER ## Konverterer radianer til grader +EVEN = AVRUND.TIL.PARTALL ## Runder av et tall oppover til nærmeste heltall som er et partall +EXP = EKSP ## Returnerer e opphøyd i en angitt potens +FACT = FAKULTET ## Returnerer fakultet til et tall +FACTDOUBLE = DOBBELFAKT ## Returnerer et talls doble fakultet +FLOOR = AVRUND.GJELDENDE.MULTIPLUM.NED ## Avrunder et tall nedover, mot null +GCD = SFF ## Returnerer høyeste felles divisor +INT = HELTALL ## Avrunder et tall nedover til nærmeste heltall +LCM = MFM ## Returnerer minste felles multiplum +LN = LN ## Returnerer den naturlige logaritmen til et tall +LOG = LOG ## Returnerer logaritmen for et tall til et angitt grunntall +LOG10 = LOG10 ## Returnerer logaritmen med grunntall 10 for et tall +MDETERM = MDETERM ## Returnerer matrisedeterminanten til en matrise +MINVERSE = MINVERS ## Returnerer den inverse matrisen til en matrise +MMULT = MMULT ## Returnerer matriseproduktet av to matriser +MOD = REST ## Returnerer resten fra en divisjon +MROUND = MRUND ## Returnerer et tall avrundet til det ønskede multiplum +MULTINOMIAL = MULTINOMINELL ## Returnerer det multinominelle for et sett med tall +ODD = AVRUND.TIL.ODDETALL ## Runder av et tall oppover til nærmeste heltall som er et oddetall +PI = PI ## Returnerer verdien av pi +POWER = OPPHØYD.I ## Returnerer resultatet av et tall opphøyd i en potens +PRODUCT = PRODUKT ## Multipliserer argumentene +QUOTIENT = KVOTIENT ## Returnerer heltallsdelen av en divisjon +RADIANS = RADIANER ## Konverterer grader til radianer +RAND = TILFELDIG ## Returnerer et tilfeldig tall mellom 0 og 1 +RANDBETWEEN = TILFELDIGMELLOM ## Returnerer et tilfeldig tall innenfor et angitt område +ROMAN = ROMERTALL ## Konverterer vanlige tall til romertall, som tekst +ROUND = AVRUND ## Avrunder et tall til et angitt antall sifre +ROUNDDOWN = AVRUND.NED ## Avrunder et tall nedover, mot null +ROUNDUP = AVRUND.OPP ## Runder av et tall oppover, bort fra null +SERIESSUM = SUMMER.REKKE ## Returnerer summen av en geometrisk rekke, basert på formelen +SIGN = FORTEGN ## Returnerer fortegnet for et tall +SIN = SIN ## Returnerer sinus til en gitt vinkel +SINH = SINH ## Returnerer den hyperbolske sinus til et tall +SQRT = ROT ## Returnerer en positiv kvadratrot +SQRTPI = ROTPI ## Returnerer kvadratroten av (tall * pi) +SUBTOTAL = DELSUM ## Returnerer en delsum i en liste eller database +SUM = SUMMER ## Legger sammen argumentene +SUMIF = SUMMERHVIS ## Legger sammen cellene angitt ved et gitt vilkår +SUMIFS = SUMMER.HVIS.SETT ## Legger sammen cellene i et område som oppfyller flere vilkår +SUMPRODUCT = SUMMERPRODUKT ## Returnerer summen av produktene av tilsvarende matrisekomponenter +SUMSQ = SUMMERKVADRAT ## Returnerer kvadratsummen av argumentene +SUMX2MY2 = SUMMERX2MY2 ## Returnerer summen av differansen av kvadratene for tilsvarende verdier i to matriser +SUMX2PY2 = SUMMERX2PY2 ## Returnerer summen av kvadratsummene for tilsvarende verdier i to matriser +SUMXMY2 = SUMMERXMY2 ## Returnerer summen av kvadratene av differansen for tilsvarende verdier i to matriser +TAN = TAN ## Returnerer tangens for et tall +TANH = TANH ## Returnerer den hyperbolske tangens for et tall +TRUNC = AVKORT ## Korter av et tall til et heltall + + +## +## Statistical functions Statistiske funksjoner +## +AVEDEV = GJENNOMSNITTSAVVIK ## Returnerer datapunktenes gjennomsnittlige absoluttavvik fra middelverdien +AVERAGE = GJENNOMSNITT ## Returnerer gjennomsnittet for argumentene +AVERAGEA = GJENNOMSNITTA ## Returnerer gjennomsnittet for argumentene, inkludert tall, tekst og logiske verdier +AVERAGEIF = GJENNOMSNITTHVIS ## Returnerer gjennomsnittet (aritmetisk gjennomsnitt) av alle cellene i et område som oppfyller et bestemt vilkår +AVERAGEIFS = GJENNOMSNITT.HVIS.SETT ## Returnerer gjennomsnittet (aritmetisk middelverdi) av alle celler som oppfyller flere vilkår. +BETADIST = BETA.FORDELING ## Returnerer den kumulative betafordelingsfunksjonen +BETAINV = INVERS.BETA.FORDELING ## Returnerer den inverse verdien til fordelingsfunksjonen for en angitt betafordeling +BINOMDIST = BINOM.FORDELING ## Returnerer den individuelle binomiske sannsynlighetsfordelingen +CHIDIST = KJI.FORDELING ## Returnerer den ensidige sannsynligheten for en kjikvadrert fordeling +CHIINV = INVERS.KJI.FORDELING ## Returnerer den inverse av den ensidige sannsynligheten for den kjikvadrerte fordelingen +CHITEST = KJI.TEST ## Utfører testen for uavhengighet +CONFIDENCE = KONFIDENS ## Returnerer konfidensintervallet til gjennomsnittet for en populasjon +CORREL = KORRELASJON ## Returnerer korrelasjonskoeffisienten mellom to datasett +COUNT = ANTALL ## Teller hvor mange tall som er i argumentlisten +COUNTA = ANTALLA ## Teller hvor mange verdier som er i argumentlisten +COUNTBLANK = TELLBLANKE ## Teller antall tomme celler i et område. +COUNTIF = ANTALL.HVIS ## Teller antall celler i et område som oppfyller gitte vilkår +COUNTIFS = ANTALL.HVIS.SETT ## Teller antallet ikke-tomme celler i et område som oppfyller flere vilkår +COVAR = KOVARIANS ## Returnerer kovariansen, gjennomsnittet av produktene av parvise avvik +CRITBINOM = GRENSE.BINOM ## Returnerer den minste verdien der den kumulative binomiske fordelingen er mindre enn eller lik en vilkårsverdi +DEVSQ = AVVIK.KVADRERT ## Returnerer summen av kvadrerte avvik +EXPONDIST = EKSP.FORDELING ## Returnerer eksponentialfordelingen +FDIST = FFORDELING ## Returnerer F-sannsynlighetsfordelingen +FINV = FFORDELING.INVERS ## Returnerer den inverse av den sannsynlige F-fordelingen +FISHER = FISHER ## Returnerer Fisher-transformasjonen +FISHERINV = FISHERINV ## Returnerer den inverse av Fisher-transformasjonen +FORECAST = PROGNOSE ## Returnerer en verdi langs en lineær trend +FREQUENCY = FREKVENS ## Returnerer en frekvensdistribusjon som en loddrett matrise +FTEST = FTEST ## Returnerer resultatet av en F-test +GAMMADIST = GAMMAFORDELING ## Returnerer gammafordelingen +GAMMAINV = GAMMAINV ## Returnerer den inverse av den gammakumulative fordelingen +GAMMALN = GAMMALN ## Returnerer den naturlige logaritmen til gammafunksjonen G(x) +GEOMEAN = GJENNOMSNITT.GEOMETRISK ## Returnerer den geometriske middelverdien +GROWTH = VEKST ## Returnerer verdier langs en eksponentiell trend +HARMEAN = GJENNOMSNITT.HARMONISK ## Returnerer den harmoniske middelverdien +HYPGEOMDIST = HYPGEOM.FORDELING ## Returnerer den hypergeometriske fordelingen +INTERCEPT = SKJÆRINGSPUNKT ## Returnerer skjæringspunktet til den lineære regresjonslinjen +KURT = KURT ## Returnerer kurtosen til et datasett +LARGE = N.STØRST ## Returnerer den n-te største verdien i et datasett +LINEST = RETTLINJE ## Returnerer parameterne til en lineær trend +LOGEST = KURVE ## Returnerer parameterne til en eksponentiell trend +LOGINV = LOGINV ## Returnerer den inverse lognormale fordelingen +LOGNORMDIST = LOGNORMFORD ## Returnerer den kumulative lognormale fordelingen +MAX = STØRST ## Returnerer maksimumsverdien i en argumentliste +MAXA = MAKSA ## Returnerer maksimumsverdien i en argumentliste, inkludert tall, tekst og logiske verdier +MEDIAN = MEDIAN ## Returnerer medianen til tallene som er gitt +MIN = MIN ## Returnerer minimumsverdien i en argumentliste +MINA = MINA ## Returnerer den minste verdien i en argumentliste, inkludert tall, tekst og logiske verdier +MODE = MODUS ## Returnerer den vanligste verdien i et datasett +NEGBINOMDIST = NEGBINOM.FORDELING ## Returnerer den negative binomiske fordelingen +NORMDIST = NORMALFORDELING ## Returnerer den kumulative normalfordelingen +NORMINV = NORMINV ## Returnerer den inverse kumulative normalfordelingen +NORMSDIST = NORMSFORDELING ## Returnerer standard kumulativ normalfordeling +NORMSINV = NORMSINV ## Returnerer den inverse av den den kumulative standard normalfordelingen +PEARSON = PEARSON ## Returnerer produktmomentkorrelasjonskoeffisienten, Pearson +PERCENTILE = PERSENTIL ## Returnerer den n-te persentil av verdiene i et område +PERCENTRANK = PROSENTDEL ## Returnerer prosentrangeringen av en verdi i et datasett +PERMUT = PERMUTER ## Returnerer antall permutasjoner for et gitt antall objekter +POISSON = POISSON ## Returnerer Poissons sannsynlighetsfordeling +PROB = SANNSYNLIG ## Returnerer sannsynligheten for at verdier i et område ligger mellom to grenser +QUARTILE = KVARTIL ## Returnerer kvartilen til et datasett +RANK = RANG ## Returnerer rangeringen av et tall, eller plassen tallet har i en rekke +RSQ = RKVADRAT ## Returnerer kvadratet av produktmomentkorrelasjonskoeffisienten (Pearsons r) +SKEW = SKJEVFORDELING ## Returnerer skjevheten i en fordeling +SLOPE = STIGNINGSTALL ## Returnerer stigningtallet for den lineære regresjonslinjen +SMALL = N.MINST ## Returnerer den n-te minste verdien i et datasett +STANDARDIZE = NORMALISER ## Returnerer en normalisert verdi +STDEV = STDAV ## Estimere standardavvik på grunnlag av et utvalg +STDEVA = STDAVVIKA ## Estimerer standardavvik basert på et utvalg, inkludert tall, tekst og logiske verdier +STDEVP = STDAVP ## Beregner standardavvik basert på hele populasjonen +STDEVPA = STDAVVIKPA ## Beregner standardavvik basert på hele populasjonen, inkludert tall, tekst og logiske verdier +STEYX = STANDARDFEIL ## Returnerer standardfeilen for den predikerte y-verdien for hver x i regresjonen +TDIST = TFORDELING ## Returnerer en Student t-fordeling +TINV = TINV ## Returnerer den inverse Student t-fordelingen +TREND = TREND ## Returnerer verdier langs en lineær trend +TRIMMEAN = TRIMMET.GJENNOMSNITT ## Returnerer den interne middelverdien til et datasett +TTEST = TTEST ## Returnerer sannsynligheten assosiert med en Student t-test +VAR = VARIANS ## Estimerer varians basert på et utvalg +VARA = VARIANSA ## Estimerer varians basert på et utvalg, inkludert tall, tekst og logiske verdier +VARP = VARIANSP ## Beregner varians basert på hele populasjonen +VARPA = VARIANSPA ## Beregner varians basert på hele populasjonen, inkludert tall, tekst og logiske verdier +WEIBULL = WEIBULL.FORDELING ## Returnerer Weibull-fordelingen +ZTEST = ZTEST ## Returnerer den ensidige sannsynlighetsverdien for en z-test + + +## +## Text functions Tekstfunksjoner +## +ASC = STIGENDE ## Endrer fullbreddes (dobbeltbyte) engelske bokstaver eller katakana i en tegnstreng, til halvbreddes (enkeltbyte) tegn +BAHTTEXT = BAHTTEKST ## Konverterer et tall til tekst, og bruker valutaformatet ß (baht) +CHAR = TEGNKODE ## Returnerer tegnet som svarer til kodenummeret +CLEAN = RENSK ## Fjerner alle tegn som ikke kan skrives ut, fra teksten +CODE = KODE ## Returnerer en numerisk kode for det første tegnet i en tekststreng +CONCATENATE = KJEDE.SAMMEN ## Slår sammen flere tekstelementer til ett tekstelement +DOLLAR = VALUTA ## Konverterer et tall til tekst, og bruker valutaformatet $ (dollar) +EXACT = EKSAKT ## Kontrollerer om to tekstverdier er like +FIND = FINN ## Finner en tekstverdi inne i en annen (skiller mellom store og små bokstaver) +FINDB = FINNB ## Finner en tekstverdi inne i en annen (skiller mellom store og små bokstaver) +FIXED = FASTSATT ## Formaterer et tall som tekst med et bestemt antall desimaler +JIS = JIS ## Endrer halvbreddes (enkeltbyte) engelske bokstaver eller katakana i en tegnstreng, til fullbreddes (dobbeltbyte) tegn +LEFT = VENSTRE ## Returnerer tegnene lengst til venstre i en tekstverdi +LEFTB = VENSTREB ## Returnerer tegnene lengst til venstre i en tekstverdi +LEN = LENGDE ## Returnerer antall tegn i en tekststreng +LENB = LENGDEB ## Returnerer antall tegn i en tekststreng +LOWER = SMÅ ## Konverterer tekst til små bokstaver +MID = DELTEKST ## Returnerer et angitt antall tegn fra en tekststreng, og begynner fra posisjonen du angir +MIDB = DELTEKSTB ## Returnerer et angitt antall tegn fra en tekststreng, og begynner fra posisjonen du angir +PHONETIC = FURIGANA ## Trekker ut fonetiske tegn (furigana) fra en tekststreng +PROPER = STOR.FORBOKSTAV ## Gir den første bokstaven i hvert ord i en tekstverdi stor forbokstav +REPLACE = ERSTATT ## Erstatter tegn i en tekst +REPLACEB = ERSTATTB ## Erstatter tegn i en tekst +REPT = GJENTA ## Gjentar tekst et gitt antall ganger +RIGHT = HØYRE ## Returnerer tegnene lengst til høyre i en tekstverdi +RIGHTB = HØYREB ## Returnerer tegnene lengst til høyre i en tekstverdi +SEARCH = SØK ## Finner en tekstverdi inne i en annen (skiller ikke mellom store og små bokstaver) +SEARCHB = SØKB ## Finner en tekstverdi inne i en annen (skiller ikke mellom store og små bokstaver) +SUBSTITUTE = BYTT.UT ## Bytter ut gammel tekst med ny tekst i en tekststreng +T = T ## Konverterer argumentene til tekst +TEXT = TEKST ## Formaterer et tall og konverterer det til tekst +TRIM = TRIMME ## Fjerner mellomrom fra tekst +UPPER = STORE ## Konverterer tekst til store bokstaver +VALUE = VERDI ## Konverterer et tekstargument til et tall diff --git a/PHPExcel/locale/pl/config b/PHPExcel/locale/pl/config new file mode 100644 index 0000000..5061311 --- /dev/null +++ b/PHPExcel/locale/pl/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = zł + + +## +## Excel Error Codes (For future use) +## +NULL = #ZERO! +DIV0 = #DZIEL/0! +VALUE = #ARG! +REF = #ADR! +NAME = #NAZWA? +NUM = #LICZBA! +NA = #N/D! diff --git a/PHPExcel/locale/pl/functions b/PHPExcel/locale/pl/functions new file mode 100644 index 0000000..14499c0 --- /dev/null +++ b/PHPExcel/locale/pl/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Funkcje dodatków i automatyzacji +## +GETPIVOTDATA = WEŹDANETABELI ## Zwraca dane przechowywane w raporcie tabeli przestawnej. + + +## +## Cube functions Funkcje modułów +## +CUBEKPIMEMBER = ELEMENT.KPI.MODUŁU ## Zwraca nazwę, właściwość i miarę kluczowego wskaźnika wydajności (KPI) oraz wyświetla nazwę i właściwość w komórce. Wskaźnik KPI jest miarą ilościową, taką jak miesięczny zysk brutto lub kwartalna fluktuacja pracowników, używaną do monitorowania wydajności organizacji. +CUBEMEMBER = ELEMENT.MODUŁU ## Zwraca element lub krotkę z hierarchii modułu. Służy do sprawdzania, czy element lub krotka istnieje w module. +CUBEMEMBERPROPERTY = WŁAŚCIWOŚĆ.ELEMENTU.MODUŁU ## Zwraca wartość właściwości elementu w module. Służy do sprawdzania, czy nazwa elementu istnieje w module, i zwracania określonej właściwości dla tego elementu. +CUBERANKEDMEMBER = USZEREGOWANY.ELEMENT.MODUŁU ## Zwraca n-ty (albo uszeregowany) element zestawu. Służy do zwracania elementu lub elementów zestawu, na przykład najlepszego sprzedawcy lub 10 najlepszych studentów. +CUBESET = ZESTAW.MODUŁÓW ## Definiuje obliczony zestaw elementów lub krotek, wysyłając wyrażenie zestawu do serwera modułu, który tworzy zestaw i zwraca go do programu Microsoft Office Excel. +CUBESETCOUNT = LICZNIK.MODUŁÓW.ZESTAWU ## Zwraca liczbę elementów zestawu. +CUBEVALUE = WARTOŚĆ.MODUŁU ## Zwraca zagregowaną wartość z modułu. + + +## +## Database functions Funkcje baz danych +## +DAVERAGE = BD.ŚREDNIA ## Zwraca wartość średniej wybranych wpisów bazy danych. +DCOUNT = BD.ILE.REKORDÓW ## Zlicza komórki zawierające liczby w bazie danych. +DCOUNTA = BD.ILE.REKORDÓW.A ## Zlicza niepuste komórki w bazie danych. +DGET = BD.POLE ## Wyodrębnia z bazy danych jeden rekord spełniający określone kryteria. +DMAX = BD.MAX ## Zwraca wartość maksymalną z wybranych wpisów bazy danych. +DMIN = BD.MIN ## Zwraca wartość minimalną z wybranych wpisów bazy danych. +DPRODUCT = BD.ILOCZYN ## Mnoży wartości w konkretnym, spełniającym kryteria polu rekordów bazy danych. +DSTDEV = BD.ODCH.STANDARD ## Szacuje odchylenie standardowe na podstawie próbki z wybranych wpisów bazy danych. +DSTDEVP = BD.ODCH.STANDARD.POPUL ## Oblicza odchylenie standardowe na podstawie całej populacji wybranych wpisów bazy danych. +DSUM = BD.SUMA ## Dodaje liczby w kolumnie pól rekordów bazy danych, które spełniają kryteria. +DVAR = BD.WARIANCJA ## Szacuje wariancję na podstawie próbki z wybranych wpisów bazy danych. +DVARP = BD.WARIANCJA.POPUL ## Oblicza wariancję na podstawie całej populacji wybranych wpisów bazy danych. + + +## +## Date and time functions Funkcje dat, godzin i czasu +## +DATE = DATA ## Zwraca liczbę seryjną dla wybranej daty. +DATEVALUE = DATA.WARTOŚĆ ## Konwertuje datę w formie tekstu na liczbę seryjną. +DAY = DZIEŃ ## Konwertuje liczbę seryjną na dzień miesiąca. +DAYS360 = DNI.360 ## Oblicza liczbę dni między dwiema datami na podstawie roku 360-dniowego. +EDATE = UPŁDNI ## Zwraca liczbę seryjną daty jako wskazaną liczbę miesięcy przed określoną datą początkową lub po niej. +EOMONTH = EOMONTH ## Zwraca liczbę seryjną ostatniego dnia miesiąca przed określoną liczbą miesięcy lub po niej. +HOUR = GODZINA ## Konwertuje liczbę seryjną na godzinę. +MINUTE = MINUTA ## Konwertuje liczbę seryjną na minutę. +MONTH = MIESIĄC ## Konwertuje liczbę seryjną na miesiąc. +NETWORKDAYS = NETWORKDAYS ## Zwraca liczbę pełnych dni roboczych między dwiema datami. +NOW = TERAZ ## Zwraca liczbę seryjną bieżącej daty i godziny. +SECOND = SEKUNDA ## Konwertuje liczbę seryjną na sekundę. +TIME = CZAS ## Zwraca liczbę seryjną określonego czasu. +TIMEVALUE = CZAS.WARTOŚĆ ## Konwertuje czas w formie tekstu na liczbę seryjną. +TODAY = DZIŚ ## Zwraca liczbę seryjną dla daty bieżącej. +WEEKDAY = DZIEŃ.TYG ## Konwertuje liczbę seryjną na dzień tygodnia. +WEEKNUM = WEEKNUM ## Konwertuje liczbę seryjną na liczbę reprezentującą numer tygodnia w roku. +WORKDAY = WORKDAY ## Zwraca liczbę seryjną dla daty przed określoną liczbą dni roboczych lub po niej. +YEAR = ROK ## Konwertuje liczbę seryjną na rok. +YEARFRAC = YEARFRAC ## Zwraca część roku reprezentowaną przez pełną liczbę dni między datą początkową a datą końcową. + + +## +## Engineering functions Funkcje inżynierskie +## +BESSELI = BESSELI ## Zwraca wartość zmodyfikowanej funkcji Bessela In(x). +BESSELJ = BESSELJ ## Zwraca wartość funkcji Bessela Jn(x). +BESSELK = BESSELK ## Zwraca wartość zmodyfikowanej funkcji Bessela Kn(x). +BESSELY = BESSELY ## Zwraca wartość funkcji Bessela Yn(x). +BIN2DEC = BIN2DEC ## Konwertuje liczbę w postaci dwójkowej na liczbę w postaci dziesiętnej. +BIN2HEX = BIN2HEX ## Konwertuje liczbę w postaci dwójkowej na liczbę w postaci szesnastkowej. +BIN2OCT = BIN2OCT ## Konwertuje liczbę w postaci dwójkowej na liczbę w postaci ósemkowej. +COMPLEX = COMPLEX ## Konwertuje część rzeczywistą i urojoną na liczbę zespoloną. +CONVERT = CONVERT ## Konwertuje liczbę z jednego systemu miar na inny. +DEC2BIN = DEC2BIN ## Konwertuje liczbę w postaci dziesiętnej na postać dwójkową. +DEC2HEX = DEC2HEX ## Konwertuje liczbę w postaci dziesiętnej na liczbę w postaci szesnastkowej. +DEC2OCT = DEC2OCT ## Konwertuje liczbę w postaci dziesiętnej na liczbę w postaci ósemkowej. +DELTA = DELTA ## Sprawdza, czy dwie wartości są równe. +ERF = ERF ## Zwraca wartość funkcji błędu. +ERFC = ERFC ## Zwraca wartość komplementarnej funkcji błędu. +GESTEP = GESTEP ## Sprawdza, czy liczba jest większa niż wartość progowa. +HEX2BIN = HEX2BIN ## Konwertuje liczbę w postaci szesnastkowej na liczbę w postaci dwójkowej. +HEX2DEC = HEX2DEC ## Konwertuje liczbę w postaci szesnastkowej na liczbę w postaci dziesiętnej. +HEX2OCT = HEX2OCT ## Konwertuje liczbę w postaci szesnastkowej na liczbę w postaci ósemkowej. +IMABS = IMABS ## Zwraca wartość bezwzględną (moduł) liczby zespolonej. +IMAGINARY = IMAGINARY ## Zwraca wartość części urojonej liczby zespolonej. +IMARGUMENT = IMARGUMENT ## Zwraca wartość argumentu liczby zespolonej, przy czym kąt wyrażony jest w radianach. +IMCONJUGATE = IMCONJUGATE ## Zwraca wartość liczby sprzężonej danej liczby zespolonej. +IMCOS = IMCOS ## Zwraca wartość cosinusa liczby zespolonej. +IMDIV = IMDIV ## Zwraca wartość ilorazu dwóch liczb zespolonych. +IMEXP = IMEXP ## Zwraca postać wykładniczą liczby zespolonej. +IMLN = IMLN ## Zwraca wartość logarytmu naturalnego liczby zespolonej. +IMLOG10 = IMLOG10 ## Zwraca wartość logarytmu dziesiętnego liczby zespolonej. +IMLOG2 = IMLOG2 ## Zwraca wartość logarytmu liczby zespolonej przy podstawie 2. +IMPOWER = IMPOWER ## Zwraca wartość liczby zespolonej podniesionej do potęgi całkowitej. +IMPRODUCT = IMPRODUCT ## Zwraca wartość iloczynu liczb zespolonych. +IMREAL = IMREAL ## Zwraca wartość części rzeczywistej liczby zespolonej. +IMSIN = IMSIN ## Zwraca wartość sinusa liczby zespolonej. +IMSQRT = IMSQRT ## Zwraca wartość pierwiastka kwadratowego z liczby zespolonej. +IMSUB = IMSUB ## Zwraca wartość różnicy dwóch liczb zespolonych. +IMSUM = IMSUM ## Zwraca wartość sumy liczb zespolonych. +OCT2BIN = OCT2BIN ## Konwertuje liczbę w postaci ósemkowej na liczbę w postaci dwójkowej. +OCT2DEC = OCT2DEC ## Konwertuje liczbę w postaci ósemkowej na liczbę w postaci dziesiętnej. +OCT2HEX = OCT2HEX ## Konwertuje liczbę w postaci ósemkowej na liczbę w postaci szesnastkowej. + + +## +## Financial functions Funkcje finansowe +## +ACCRINT = ACCRINT ## Zwraca narosłe odsetki dla papieru wartościowego z oprocentowaniem okresowym. +ACCRINTM = ACCRINTM ## Zwraca narosłe odsetki dla papieru wartościowego z oprocentowaniem w terminie wykupu. +AMORDEGRC = AMORDEGRC ## Zwraca amortyzację dla każdego okresu rozliczeniowego z wykorzystaniem współczynnika amortyzacji. +AMORLINC = AMORLINC ## Zwraca amortyzację dla każdego okresu rozliczeniowego. +COUPDAYBS = COUPDAYBS ## Zwraca liczbę dni od początku okresu dywidendy do dnia rozliczeniowego. +COUPDAYS = COUPDAYS ## Zwraca liczbę dni w okresie dywidendy, z uwzględnieniem dnia rozliczeniowego. +COUPDAYSNC = COUPDAYSNC ## Zwraca liczbę dni od dnia rozliczeniowego do daty następnego dnia dywidendy. +COUPNCD = COUPNCD ## Zwraca dzień następnej dywidendy po dniu rozliczeniowym. +COUPNUM = COUPNUM ## Zwraca liczbę dywidend płatnych między dniem rozliczeniowym a dniem wykupu. +COUPPCD = COUPPCD ## Zwraca dzień poprzedniej dywidendy przed dniem rozliczeniowym. +CUMIPMT = CUMIPMT ## Zwraca wartość procentu składanego płatnego między dwoma okresami. +CUMPRINC = CUMPRINC ## Zwraca wartość kapitału skumulowanego spłaty pożyczki między dwoma okresami. +DB = DB ## Zwraca amortyzację środka trwałego w danym okresie metodą degresywną z zastosowaniem stałej bazowej. +DDB = DDB ## Zwraca amortyzację środka trwałego za podany okres metodą degresywną z zastosowaniem podwójnej bazowej lub metodą określoną przez użytkownika. +DISC = DISC ## Zwraca wartość stopy dyskontowej papieru wartościowego. +DOLLARDE = DOLLARDE ## Konwertuje cenę w postaci ułamkowej na cenę wyrażoną w postaci dziesiętnej. +DOLLARFR = DOLLARFR ## Konwertuje cenę wyrażoną w postaci dziesiętnej na cenę wyrażoną w postaci ułamkowej. +DURATION = DURATION ## Zwraca wartość rocznego przychodu z papieru wartościowego o okresowych wypłatach oprocentowania. +EFFECT = EFFECT ## Zwraca wartość efektywnej rocznej stopy procentowej. +FV = FV ## Zwraca przyszłą wartość lokaty. +FVSCHEDULE = FVSCHEDULE ## Zwraca przyszłą wartość kapitału początkowego wraz z szeregiem procentów składanych. +INTRATE = INTRATE ## Zwraca wartość stopy procentowej papieru wartościowego całkowicie ulokowanego. +IPMT = IPMT ## Zwraca wysokość spłaty oprocentowania lokaty za dany okres. +IRR = IRR ## Zwraca wartość wewnętrznej stopy zwrotu dla serii przepływów gotówkowych. +ISPMT = ISPMT ## Oblicza wysokość spłaty oprocentowania za dany okres lokaty. +MDURATION = MDURATION ## Zwraca wartość zmodyfikowanego okresu Macauleya dla papieru wartościowego o założonej wartości nominalnej 100 zł. +MIRR = MIRR ## Zwraca wartość wewnętrznej stopy zwrotu dla przypadku, gdy dodatnie i ujemne przepływy gotówkowe mają różne stopy. +NOMINAL = NOMINAL ## Zwraca wysokość nominalnej rocznej stopy procentowej. +NPER = NPER ## Zwraca liczbę okresów dla lokaty. +NPV = NPV ## Zwraca wartość bieżącą netto lokaty na podstawie szeregu okresowych przepływów gotówkowych i stopy dyskontowej. +ODDFPRICE = ODDFPRICE ## Zwraca cenę za 100 zł wartości nominalnej papieru wartościowego z nietypowym pierwszym okresem. +ODDFYIELD = ODDFYIELD ## Zwraca rentowność papieru wartościowego z nietypowym pierwszym okresem. +ODDLPRICE = ODDLPRICE ## Zwraca cenę za 100 zł wartości nominalnej papieru wartościowego z nietypowym ostatnim okresem. +ODDLYIELD = ODDLYIELD ## Zwraca rentowność papieru wartościowego z nietypowym ostatnim okresem. +PMT = PMT ## Zwraca wartość okresowej płatności raty rocznej. +PPMT = PPMT ## Zwraca wysokość spłaty kapitału w przypadku lokaty dla danego okresu. +PRICE = PRICE ## Zwraca cenę za 100 zł wartości nominalnej papieru wartościowego z oprocentowaniem okresowym. +PRICEDISC = PRICEDISC ## Zwraca cenę za 100 zł wartości nominalnej papieru wartościowego zdyskontowanego. +PRICEMAT = PRICEMAT ## Zwraca cenę za 100 zł wartości nominalnej papieru wartościowego z oprocentowaniem w terminie wykupu. +PV = PV ## Zwraca wartość bieżącą lokaty. +RATE = RATE ## Zwraca wysokość stopy procentowej w okresie raty rocznej. +RECEIVED = RECEIVED ## Zwraca wartość kapitału otrzymanego przy wykupie papieru wartościowego całkowicie ulokowanego. +SLN = SLN ## Zwraca amortyzację środka trwałego za jeden okres metodą liniową. +SYD = SYD ## Zwraca amortyzację środka trwałego za dany okres metodą sumy cyfr lat amortyzacji. +TBILLEQ = TBILLEQ ## Zwraca rentowność ekwiwalentu obligacji dla bonu skarbowego. +TBILLPRICE = TBILLPRICE ## Zwraca cenę za 100 zł wartości nominalnej bonu skarbowego. +TBILLYIELD = TBILLYIELD ## Zwraca rentowność bonu skarbowego. +VDB = VDB ## Oblicza amortyzację środka trwałego w danym okresie lub jego części metodą degresywną. +XIRR = XIRR ## Zwraca wartość wewnętrznej stopy zwrotu dla serii rozłożonych w czasie przepływów gotówkowych, niekoniecznie okresowych. +XNPV = XNPV ## Zwraca wartość bieżącą netto dla serii rozłożonych w czasie przepływów gotówkowych, niekoniecznie okresowych. +YIELD = YIELD ## Zwraca rentowność papieru wartościowego z oprocentowaniem okresowym. +YIELDDISC = YIELDDISC ## Zwraca roczną rentowność zdyskontowanego papieru wartościowego, na przykład bonu skarbowego. +YIELDMAT = YIELDMAT ## Zwraca roczną rentowność papieru wartościowego oprocentowanego przy wykupie. + + +## +## Information functions Funkcje informacyjne +## +CELL = KOMÓRKA ## Zwraca informacje o formacie, położeniu lub zawartości komórki. +ERROR.TYPE = NR.BŁĘDU ## Zwraca liczbę odpowiadającą typowi błędu. +INFO = INFO ## Zwraca informację o aktualnym środowisku pracy. +ISBLANK = CZY.PUSTA ## Zwraca wartość PRAWDA, jeśli wartość jest pusta. +ISERR = CZY.BŁ ## Zwraca wartość PRAWDA, jeśli wartość jest dowolną wartością błędu, z wyjątkiem #N/D!. +ISERROR = CZY.BŁĄD ## Zwraca wartość PRAWDA, jeśli wartość jest dowolną wartością błędu. +ISEVEN = ISEVEN ## Zwraca wartość PRAWDA, jeśli liczba jest parzysta. +ISLOGICAL = CZY.LOGICZNA ## Zwraca wartość PRAWDA, jeśli wartość jest wartością logiczną. +ISNA = CZY.BRAK ## Zwraca wartość PRAWDA, jeśli wartość jest wartością błędu #N/D!. +ISNONTEXT = CZY.NIE.TEKST ## Zwraca wartość PRAWDA, jeśli wartość nie jest tekstem. +ISNUMBER = CZY.LICZBA ## Zwraca wartość PRAWDA, jeśli wartość jest liczbą. +ISODD = ISODD ## Zwraca wartość PRAWDA, jeśli liczba jest nieparzysta. +ISREF = CZY.ADR ## Zwraca wartość PRAWDA, jeśli wartość jest odwołaniem. +ISTEXT = CZY.TEKST ## Zwraca wartość PRAWDA, jeśli wartość jest tekstem. +N = L ## Zwraca wartość przekonwertowaną na postać liczbową. +NA = BRAK ## Zwraca wartość błędu #N/D!. +TYPE = TYP ## Zwraca liczbę wskazującą typ danych wartości. + + +## +## Logical functions Funkcje logiczne +## +AND = ORAZ ## Zwraca wartość PRAWDA, jeśli wszystkie argumenty mają wartość PRAWDA. +FALSE = FAŁSZ ## Zwraca wartość logiczną FAŁSZ. +IF = JEŻELI ## Określa warunek logiczny do sprawdzenia. +IFERROR = JEŻELI.BŁĄD ## Zwraca określoną wartość, jeśli wynikiem obliczenia formuły jest błąd; w przeciwnym przypadku zwraca wynik formuły. +NOT = NIE ## Odwraca wartość logiczną argumentu. +OR = LUB ## Zwraca wartość PRAWDA, jeśli co najmniej jeden z argumentów ma wartość PRAWDA. +TRUE = PRAWDA ## Zwraca wartość logiczną PRAWDA. + + +## +## Lookup and reference functions Funkcje wyszukiwania i odwołań +## +ADDRESS = ADRES ## Zwraca odwołanie do jednej komórki w arkuszu jako wartość tekstową. +AREAS = OBSZARY ## Zwraca liczbę obszarów występujących w odwołaniu. +CHOOSE = WYBIERZ ## Wybiera wartość z listy wartości. +COLUMN = NR.KOLUMNY ## Zwraca numer kolumny z odwołania. +COLUMNS = LICZBA.KOLUMN ## Zwraca liczbę kolumn dla danego odwołania. +HLOOKUP = WYSZUKAJ.POZIOMO ## Przegląda górny wiersz tablicy i zwraca wartość wskazanej komórki. +HYPERLINK = HIPERŁĄCZE ## Tworzy skrót lub skok, który pozwala otwierać dokument przechowywany na serwerze sieciowym, w sieci intranet lub w Internecie. +INDEX = INDEKS ## Używa indeksu do wybierania wartości z odwołania lub tablicy. +INDIRECT = ADR.POŚR ## Zwraca odwołanie określone przez wartość tekstową. +LOOKUP = WYSZUKAJ ## Wyszukuje wartości w wektorze lub tablicy. +MATCH = PODAJ.POZYCJĘ ## Wyszukuje wartości w odwołaniu lub w tablicy. +OFFSET = PRZESUNIĘCIE ## Zwraca adres przesunięty od danego odwołania. +ROW = WIERSZ ## Zwraca numer wiersza odwołania. +ROWS = ILE.WIERSZY ## Zwraca liczbę wierszy dla danego odwołania. +RTD = RTD ## Pobiera dane w czasie rzeczywistym z programu obsługującego automatyzację COM (Automatyzacja: Sposób pracy z obiektami aplikacji pochodzącymi z innej aplikacji lub narzędzia projektowania. Nazywana wcześniej Automatyzacją OLE, Automatyzacja jest standardem przemysłowym i funkcją obiektowego modelu składników (COM, Component Object Model).). +TRANSPOSE = TRANSPONUJ ## Zwraca transponowaną tablicę. +VLOOKUP = WYSZUKAJ.PIONOWO ## Przeszukuje pierwszą kolumnę tablicy i przechodzi wzdłuż wiersza, aby zwrócić wartość komórki. + + +## +## Math and trigonometry functions Funkcje matematyczne i trygonometryczne +## +ABS = MODUŁ.LICZBY ## Zwraca wartość absolutną liczby. +ACOS = ACOS ## Zwraca arcus cosinus liczby. +ACOSH = ACOSH ## Zwraca arcus cosinus hiperboliczny liczby. +ASIN = ASIN ## Zwraca arcus sinus liczby. +ASINH = ASINH ## Zwraca arcus sinus hiperboliczny liczby. +ATAN = ATAN ## Zwraca arcus tangens liczby. +ATAN2 = ATAN2 ## Zwraca arcus tangens liczby na podstawie współrzędnych x i y. +ATANH = ATANH ## Zwraca arcus tangens hiperboliczny liczby. +CEILING = ZAOKR.W.GÓRĘ ## Zaokrągla liczbę do najbliższej liczby całkowitej lub do najbliższej wielokrotności dokładności. +COMBIN = KOMBINACJE ## Zwraca liczbę kombinacji dla danej liczby obiektów. +COS = COS ## Zwraca cosinus liczby. +COSH = COSH ## Zwraca cosinus hiperboliczny liczby. +DEGREES = STOPNIE ## Konwertuje radiany na stopnie. +EVEN = ZAOKR.DO.PARZ ## Zaokrągla liczbę w górę do najbliższej liczby parzystej. +EXP = EXP ## Zwraca wartość liczby e podniesionej do potęgi określonej przez podaną liczbę. +FACT = SILNIA ## Zwraca silnię liczby. +FACTDOUBLE = FACTDOUBLE ## Zwraca podwójną silnię liczby. +FLOOR = ZAOKR.W.DÓŁ ## Zaokrągla liczbę w dół, w kierunku zera. +GCD = GCD ## Zwraca największy wspólny dzielnik. +INT = ZAOKR.DO.CAŁK ## Zaokrągla liczbę w dół do najbliższej liczby całkowitej. +LCM = LCM ## Zwraca najmniejszą wspólną wielokrotność. +LN = LN ## Zwraca logarytm naturalny podanej liczby. +LOG = LOG ## Zwraca logarytm danej liczby przy zadanej podstawie. +LOG10 = LOG10 ## Zwraca logarytm dziesiętny liczby. +MDETERM = WYZNACZNIK.MACIERZY ## Zwraca wyznacznik macierzy tablicy. +MINVERSE = MACIERZ.ODW ## Zwraca odwrotność macierzy tablicy. +MMULT = MACIERZ.ILOCZYN ## Zwraca iloczyn macierzy dwóch tablic. +MOD = MOD ## Zwraca resztę z dzielenia. +MROUND = MROUND ## Zwraca liczbę zaokrągloną do żądanej wielokrotności. +MULTINOMIAL = MULTINOMIAL ## Zwraca wielomian dla zbioru liczb. +ODD = ZAOKR.DO.NPARZ ## Zaokrągla liczbę w górę do najbliższej liczby nieparzystej. +PI = PI ## Zwraca wartość liczby Pi. +POWER = POTĘGA ## Zwraca liczbę podniesioną do potęgi. +PRODUCT = ILOCZYN ## Mnoży argumenty. +QUOTIENT = QUOTIENT ## Zwraca iloraz (całkowity). +RADIANS = RADIANY ## Konwertuje stopnie na radiany. +RAND = LOS ## Zwraca liczbę pseudolosową z zakresu od 0 do 1. +RANDBETWEEN = RANDBETWEEN ## Zwraca liczbę pseudolosową z zakresu określonego przez podane argumenty. +ROMAN = RZYMSKIE ## Konwertuje liczbę arabską na rzymską jako tekst. +ROUND = ZAOKR ## Zaokrągla liczbę do określonej liczby cyfr. +ROUNDDOWN = ZAOKR.DÓŁ ## Zaokrągla liczbę w dół, w kierunku zera. +ROUNDUP = ZAOKR.GÓRA ## Zaokrągla liczbę w górę, w kierunku od zera. +SERIESSUM = SERIESSUM ## Zwraca sumę szeregu potęgowego na podstawie wzoru. +SIGN = ZNAK.LICZBY ## Zwraca znak liczby. +SIN = SIN ## Zwraca sinus danego kąta. +SINH = SINH ## Zwraca sinus hiperboliczny liczby. +SQRT = PIERWIASTEK ## Zwraca dodatni pierwiastek kwadratowy. +SQRTPI = SQRTPI ## Zwraca pierwiastek kwadratowy iloczynu (liczba * Pi). +SUBTOTAL = SUMY.POŚREDNIE ## Zwraca sumę częściową listy lub bazy danych. +SUM = SUMA ## Dodaje argumenty. +SUMIF = SUMA.JEŻELI ## Dodaje komórki określone przez podane kryterium. +SUMIFS = SUMA.WARUNKÓW ## Dodaje komórki w zakresie, które spełniają wiele kryteriów. +SUMPRODUCT = SUMA.ILOCZYNÓW ## Zwraca sumę iloczynów odpowiednich elementów tablicy. +SUMSQ = SUMA.KWADRATÓW ## Zwraca sumę kwadratów argumentów. +SUMX2MY2 = SUMA.X2.M.Y2 ## Zwraca sumę różnic kwadratów odpowiednich wartości w dwóch tablicach. +SUMX2PY2 = SUMA.X2.P.Y2 ## Zwraca sumę sum kwadratów odpowiednich wartości w dwóch tablicach. +SUMXMY2 = SUMA.XMY.2 ## Zwraca sumę kwadratów różnic odpowiednich wartości w dwóch tablicach. +TAN = TAN ## Zwraca tangens liczby. +TANH = TANH ## Zwraca tangens hiperboliczny liczby. +TRUNC = LICZBA.CAŁK ## Przycina liczbę do wartości całkowitej. + + +## +## Statistical functions Funkcje statystyczne +## +AVEDEV = ODCH.ŚREDNIE ## Zwraca średnią wartość odchyleń absolutnych punktów danych od ich wartości średniej. +AVERAGE = ŚREDNIA ## Zwraca wartość średnią argumentów. +AVERAGEA = ŚREDNIA.A ## Zwraca wartość średnią argumentów, z uwzględnieniem liczb, tekstów i wartości logicznych. +AVERAGEIF = ŚREDNIA.JEŻELI ## Zwraca średnią (średnią arytmetyczną) wszystkich komórek w zakresie, które spełniają podane kryteria. +AVERAGEIFS = ŚREDNIA.WARUNKÓW ## Zwraca średnią (średnią arytmetyczną) wszystkich komórek, które spełniają jedno lub więcej kryteriów. +BETADIST = ROZKŁAD.BETA ## Zwraca skumulowaną funkcję gęstości prawdopodobieństwa beta. +BETAINV = ROZKŁAD.BETA.ODW ## Zwraca odwrotność skumulowanej funkcji gęstości prawdopodobieństwa beta. +BINOMDIST = ROZKŁAD.DWUM ## Zwraca pojedynczy składnik dwumianowego rozkładu prawdopodobieństwa. +CHIDIST = ROZKŁAD.CHI ## Zwraca wartość jednostronnego prawdopodobieństwa rozkładu chi-kwadrat. +CHIINV = ROZKŁAD.CHI.ODW ## Zwraca odwrotność wartości jednostronnego prawdopodobieństwa rozkładu chi-kwadrat. +CHITEST = TEST.CHI ## Zwraca test niezależności. +CONFIDENCE = UFNOŚĆ ## Zwraca interwał ufności dla średniej populacji. +CORREL = WSP.KORELACJI ## Zwraca współczynnik korelacji dwóch zbiorów danych. +COUNT = ILE.LICZB ## Zlicza liczby znajdujące się na liście argumentów. +COUNTA = ILE.NIEPUSTYCH ## Zlicza wartości znajdujące się na liście argumentów. +COUNTBLANK = LICZ.PUSTE ## Zwraca liczbę pustych komórek w pewnym zakresie. +COUNTIF = LICZ.JEŻELI ## Zlicza komórki wewnątrz zakresu, które spełniają podane kryteria. +COUNTIFS = LICZ.WARUNKI ## Zlicza komórki wewnątrz zakresu, które spełniają wiele kryteriów. +COVAR = KOWARIANCJA ## Zwraca kowariancję, czyli średnią wartość iloczynów odpowiednich odchyleń. +CRITBINOM = PRÓG.ROZKŁAD.DWUM ## Zwraca najmniejszą wartość, dla której skumulowany rozkład dwumianowy jest mniejszy niż wartość kryterium lub równy jej. +DEVSQ = ODCH.KWADRATOWE ## Zwraca sumę kwadratów odchyleń. +EXPONDIST = ROZKŁAD.EXP ## Zwraca rozkład wykładniczy. +FDIST = ROZKŁAD.F ## Zwraca rozkład prawdopodobieństwa F. +FINV = ROZKŁAD.F.ODW ## Zwraca odwrotność rozkładu prawdopodobieństwa F. +FISHER = ROZKŁAD.FISHER ## Zwraca transformację Fishera. +FISHERINV = ROZKŁAD.FISHER.ODW ## Zwraca odwrotność transformacji Fishera. +FORECAST = REGLINX ## Zwraca wartość trendu liniowego. +FREQUENCY = CZĘSTOŚĆ ## Zwraca rozkład częstotliwości jako tablicę pionową. +FTEST = TEST.F ## Zwraca wynik testu F. +GAMMADIST = ROZKŁAD.GAMMA ## Zwraca rozkład gamma. +GAMMAINV = ROZKŁAD.GAMMA.ODW ## Zwraca odwrotność skumulowanego rozkładu gamma. +GAMMALN = ROZKŁAD.LIN.GAMMA ## Zwraca logarytm naturalny funkcji gamma, Γ(x). +GEOMEAN = ŚREDNIA.GEOMETRYCZNA ## Zwraca średnią geometryczną. +GROWTH = REGEXPW ## Zwraca wartości trendu wykładniczego. +HARMEAN = ŚREDNIA.HARMONICZNA ## Zwraca średnią harmoniczną. +HYPGEOMDIST = ROZKŁAD.HIPERGEOM ## Zwraca rozkład hipergeometryczny. +INTERCEPT = ODCIĘTA ## Zwraca punkt przecięcia osi pionowej z linią regresji liniowej. +KURT = KURTOZA ## Zwraca kurtozę zbioru danych. +LARGE = MAX.K ## Zwraca k-tą największą wartość ze zbioru danych. +LINEST = REGLINP ## Zwraca parametry trendu liniowego. +LOGEST = REGEXPP ## Zwraca parametry trendu wykładniczego. +LOGINV = ROZKŁAD.LOG.ODW ## Zwraca odwrotność rozkładu logarytmu naturalnego. +LOGNORMDIST = ROZKŁAD.LOG ## Zwraca skumulowany rozkład logarytmu naturalnego. +MAX = MAX ## Zwraca maksymalną wartość listy argumentów. +MAXA = MAX.A ## Zwraca maksymalną wartość listy argumentów, z uwzględnieniem liczb, tekstów i wartości logicznych. +MEDIAN = MEDIANA ## Zwraca medianę podanych liczb. +MIN = MIN ## Zwraca minimalną wartość listy argumentów. +MINA = MIN.A ## Zwraca najmniejszą wartość listy argumentów, z uwzględnieniem liczb, tekstów i wartości logicznych. +MODE = WYST.NAJCZĘŚCIEJ ## Zwraca wartość najczęściej występującą w zbiorze danych. +NEGBINOMDIST = ROZKŁAD.DWUM.PRZEC ## Zwraca ujemny rozkład dwumianowy. +NORMDIST = ROZKŁAD.NORMALNY ## Zwraca rozkład normalny skumulowany. +NORMINV = ROZKŁAD.NORMALNY.ODW ## Zwraca odwrotność rozkładu normalnego skumulowanego. +NORMSDIST = ROZKŁAD.NORMALNY.S ## Zwraca standardowy rozkład normalny skumulowany. +NORMSINV = ROZKŁAD.NORMALNY.S.ODW ## Zwraca odwrotność standardowego rozkładu normalnego skumulowanego. +PEARSON = PEARSON ## Zwraca współczynnik korelacji momentu iloczynu Pearsona. +PERCENTILE = PERCENTYL ## Wyznacza k-ty percentyl wartości w zakresie. +PERCENTRANK = PROCENT.POZYCJA ## Zwraca procentową pozycję wartości w zbiorze danych. +PERMUT = PERMUTACJE ## Zwraca liczbę permutacji dla danej liczby obiektów. +POISSON = ROZKŁAD.POISSON ## Zwraca rozkład Poissona. +PROB = PRAWDPD ## Zwraca prawdopodobieństwo, że wartości w zakresie leżą pomiędzy dwiema granicami. +QUARTILE = KWARTYL ## Wyznacza kwartyl zbioru danych. +RANK = POZYCJA ## Zwraca pozycję liczby na liście liczb. +RSQ = R.KWADRAT ## Zwraca kwadrat współczynnika korelacji momentu iloczynu Pearsona. +SKEW = SKOŚNOŚĆ ## Zwraca skośność rozkładu. +SLOPE = NACHYLENIE ## Zwraca nachylenie linii regresji liniowej. +SMALL = MIN.K ## Zwraca k-tą najmniejszą wartość ze zbioru danych. +STANDARDIZE = NORMALIZUJ ## Zwraca wartość znormalizowaną. +STDEV = ODCH.STANDARDOWE ## Szacuje odchylenie standardowe na podstawie próbki. +STDEVA = ODCH.STANDARDOWE.A ## Szacuje odchylenie standardowe na podstawie próbki, z uwzględnieniem liczb, tekstów i wartości logicznych. +STDEVP = ODCH.STANDARD.POPUL ## Oblicza odchylenie standardowe na podstawie całej populacji. +STDEVPA = ODCH.STANDARD.POPUL.A ## Oblicza odchylenie standardowe na podstawie całej populacji, z uwzględnieniem liczb, teksów i wartości logicznych. +STEYX = REGBŁSTD ## Zwraca błąd standardowy przewidzianej wartości y dla każdej wartości x w regresji. +TDIST = ROZKŁAD.T ## Zwraca rozkład t-Studenta. +TINV = ROZKŁAD.T.ODW ## Zwraca odwrotność rozkładu t-Studenta. +TREND = REGLINW ## Zwraca wartości trendu liniowego. +TRIMMEAN = ŚREDNIA.WEWN ## Zwraca średnią wartość dla wnętrza zbioru danych. +TTEST = TEST.T ## Zwraca prawdopodobieństwo związane z testem t-Studenta. +VAR = WARIANCJA ## Szacuje wariancję na podstawie próbki. +VARA = WARIANCJA.A ## Szacuje wariancję na podstawie próbki, z uwzględnieniem liczb, tekstów i wartości logicznych. +VARP = WARIANCJA.POPUL ## Oblicza wariancję na podstawie całej populacji. +VARPA = WARIANCJA.POPUL.A ## Oblicza wariancję na podstawie całej populacji, z uwzględnieniem liczb, tekstów i wartości logicznych. +WEIBULL = ROZKŁAD.WEIBULL ## Zwraca rozkład Weibulla. +ZTEST = TEST.Z ## Zwraca wartość jednostronnego prawdopodobieństwa testu z. + + +## +## Text functions Funkcje tekstowe +## +ASC = ASC ## Zamienia litery angielskie lub katakana o pełnej szerokości (dwubajtowe) w ciągu znaków na znaki o szerokości połówkowej (jednobajtowe). +BAHTTEXT = BAHTTEXT ## Konwertuje liczbę na tekst, stosując format walutowy ß (baht). +CHAR = ZNAK ## Zwraca znak o podanym numerze kodu. +CLEAN = OCZYŚĆ ## Usuwa z tekstu wszystkie znaki, które nie mogą być drukowane. +CODE = KOD ## Zwraca kod numeryczny pierwszego znaku w ciągu tekstowym. +CONCATENATE = ZŁĄCZ.TEKSTY ## Łączy kilka oddzielnych tekstów w jeden tekst. +DOLLAR = KWOTA ## Konwertuje liczbę na tekst, stosując format walutowy $ (dolar). +EXACT = PORÓWNAJ ## Sprawdza identyczność dwóch wartości tekstowych. +FIND = ZNAJDŹ ## Znajduje jedną wartość tekstową wewnątrz innej (z uwzględnieniem wielkich i małych liter). +FINDB = ZNAJDŹB ## Znajduje jedną wartość tekstową wewnątrz innej (z uwzględnieniem wielkich i małych liter). +FIXED = ZAOKR.DO.TEKST ## Formatuje liczbę jako tekst przy stałej liczbie miejsc dziesiętnych. +JIS = JIS ## Zmienia litery angielskie lub katakana o szerokości połówkowej (jednobajtowe) w ciągu znaków na znaki o pełnej szerokości (dwubajtowe). +LEFT = LEWY ## Zwraca skrajne lewe znaki z wartości tekstowej. +LEFTB = LEWYB ## Zwraca skrajne lewe znaki z wartości tekstowej. +LEN = DŁ ## Zwraca liczbę znaków ciągu tekstowego. +LENB = DŁ.B ## Zwraca liczbę znaków ciągu tekstowego. +LOWER = LITERY.MAŁE ## Konwertuje wielkie litery tekstu na małe litery. +MID = FRAGMENT.TEKSTU ## Zwraca określoną liczbę znaków z ciągu tekstowego, zaczynając od zadanej pozycji. +MIDB = FRAGMENT.TEKSTU.B ## Zwraca określoną liczbę znaków z ciągu tekstowego, zaczynając od zadanej pozycji. +PHONETIC = PHONETIC ## Wybiera znaki fonetyczne (furigana) z ciągu tekstowego. +PROPER = Z.WIELKIEJ.LITERY ## Zastępuje pierwszą literę każdego wyrazu tekstu wielką literą. +REPLACE = ZASTĄP ## Zastępuje znaki w tekście. +REPLACEB = ZASTĄP.B ## Zastępuje znaki w tekście. +REPT = POWT ## Powiela tekst daną liczbę razy. +RIGHT = PRAWY ## Zwraca skrajne prawe znaki z wartości tekstowej. +RIGHTB = PRAWYB ## Zwraca skrajne prawe znaki z wartości tekstowej. +SEARCH = SZUKAJ.TEKST ## Wyszukuje jedną wartość tekstową wewnątrz innej (bez uwzględniania wielkości liter). +SEARCHB = SZUKAJ.TEKST.B ## Wyszukuje jedną wartość tekstową wewnątrz innej (bez uwzględniania wielkości liter). +SUBSTITUTE = PODSTAW ## Podstawia nowy tekst w miejsce poprzedniego tekstu w ciągu tekstowym. +T = T ## Konwertuje argumenty na tekst. +TEXT = TEKST ## Formatuje liczbę i konwertuje ją na tekst. +TRIM = USUŃ.ZBĘDNE.ODSTĘPY ## Usuwa spacje z tekstu. +UPPER = LITERY.WIELKIE ## Konwertuje znaki tekstu na wielkie litery. +VALUE = WARTOŚĆ ## Konwertuje argument tekstowy na liczbę. diff --git a/PHPExcel/locale/pt/br/config b/PHPExcel/locale/pt/br/config new file mode 100644 index 0000000..b4bf704 --- /dev/null +++ b/PHPExcel/locale/pt/br/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = R$ + + +## +## Excel Error Codes (For future use) +## +NULL = #NULO! +DIV0 = #DIV/0! +VALUE = #VALOR! +REF = #REF! +NAME = #NOME? +NUM = #NÚM! +NA = #N/D diff --git a/PHPExcel/locale/pt/br/functions b/PHPExcel/locale/pt/br/functions new file mode 100644 index 0000000..a062a7f --- /dev/null +++ b/PHPExcel/locale/pt/br/functions @@ -0,0 +1,408 @@ +## +## Add-in and Automation functions Funções Suplemento e Automação +## +GETPIVOTDATA = INFODADOSTABELADINÂMICA ## Retorna os dados armazenados em um relatório de tabela dinâmica + + +## +## Cube functions Funções de Cubo +## +CUBEKPIMEMBER = MEMBROKPICUBO ## Retorna o nome de um KPI (indicador de desempenho-chave), uma propriedade e uma medida e exibe o nome e a propriedade na célula. Um KPI é uma medida quantificável, como o lucro bruto mensal ou a rotatividade trimestral dos funcionários, usada para monitorar o desempenho de uma organização. +CUBEMEMBER = MEMBROCUBO ## Retorna um membro ou tupla em uma hierarquia de cubo. Use para validar se o membro ou tupla existe no cubo. +CUBEMEMBERPROPERTY = PROPRIEDADEMEMBROCUBO ## Retorna o valor da propriedade de um membro no cubo. Usada para validar a existência do nome do membro no cubo e para retornar a propriedade especificada para esse membro. +CUBERANKEDMEMBER = MEMBROCLASSIFICADOCUBO ## Retorna o enésimo membro, ou o membro ordenado, em um conjunto. Use para retornar um ou mais elementos em um conjunto, assim como o melhor vendedor ou os dez melhores alunos. +CUBESET = CONJUNTOCUBO ## Define um conjunto calculado de membros ou tuplas enviando uma expressão do conjunto para o cubo no servidor, que cria o conjunto e o retorna para o Microsoft Office Excel. +CUBESETCOUNT = CONTAGEMCONJUNTOCUBO ## Retorna o número de itens em um conjunto. +CUBEVALUE = VALORCUBO ## Retorna um valor agregado de um cubo. + + +## +## Database functions Funções de banco de dados +## +DAVERAGE = BDMÉDIA ## Retorna a média das entradas selecionadas de um banco de dados +DCOUNT = BDCONTAR ## Conta as células que contêm números em um banco de dados +DCOUNTA = BDCONTARA ## Conta células não vazias em um banco de dados +DGET = BDEXTRAIR ## Extrai de um banco de dados um único registro que corresponde a um critério específico +DMAX = BDMÁX ## Retorna o valor máximo de entradas selecionadas de um banco de dados +DMIN = BDMÍN ## Retorna o valor mínimo de entradas selecionadas de um banco de dados +DPRODUCT = BDMULTIPL ## Multiplica os valores em um campo específico de registros que correspondem ao critério em um banco de dados +DSTDEV = BDEST ## Estima o desvio padrão com base em uma amostra de entradas selecionadas de um banco de dados +DSTDEVP = BDDESVPA ## Calcula o desvio padrão com base na população inteira de entradas selecionadas de um banco de dados +DSUM = BDSOMA ## Adiciona os números à coluna de campos de registros do banco de dados que correspondem ao critério +DVAR = BDVAREST ## Estima a variância com base em uma amostra de entradas selecionadas de um banco de dados +DVARP = BDVARP ## Calcula a variância com base na população inteira de entradas selecionadas de um banco de dados + + +## +## Date and time functions Funções de data e hora +## +DATE = DATA ## Retorna o número de série de uma data específica +DATEVALUE = DATA.VALOR ## Converte uma data na forma de texto para um número de série +DAY = DIA ## Converte um número de série em um dia do mês +DAYS360 = DIAS360 ## Calcula o número de dias entre duas datas com base em um ano de 360 dias +EDATE = DATAM ## Retorna o número de série da data que é o número indicado de meses antes ou depois da data inicial +EOMONTH = FIMMÊS ## Retorna o número de série do último dia do mês antes ou depois de um número especificado de meses +HOUR = HORA ## Converte um número de série em uma hora +MINUTE = MINUTO ## Converte um número de série em um minuto +MONTH = MÊS ## Converte um número de série em um mês +NETWORKDAYS = DIATRABALHOTOTAL ## Retorna o número de dias úteis inteiros entre duas datas +NOW = AGORA ## Retorna o número de série seqüencial da data e hora atuais +SECOND = SEGUNDO ## Converte um número de série em um segundo +TIME = HORA ## Retorna o número de série de uma hora específica +TIMEVALUE = VALOR.TEMPO ## Converte um horário na forma de texto para um número de série +TODAY = HOJE ## Retorna o número de série da data de hoje +WEEKDAY = DIA.DA.SEMANA ## Converte um número de série em um dia da semana +WEEKNUM = NÚMSEMANA ## Converte um número de série em um número que representa onde a semana cai numericamente em um ano +WORKDAY = DIATRABALHO ## Retorna o número de série da data antes ou depois de um número específico de dias úteis +YEAR = ANO ## Converte um número de série em um ano +YEARFRAC = FRAÇÃOANO ## Retorna a fração do ano que representa o número de dias entre data_inicial e data_final + + +## +## Engineering functions Funções de engenharia +## +BESSELI = BESSELI ## Retorna a função de Bessel In(x) modificada +BESSELJ = BESSELJ ## Retorna a função de Bessel Jn(x) +BESSELK = BESSELK ## Retorna a função de Bessel Kn(x) modificada +BESSELY = BESSELY ## Retorna a função de Bessel Yn(x) +BIN2DEC = BIN2DEC ## Converte um número binário em decimal +BIN2HEX = BIN2HEX ## Converte um número binário em hexadecimal +BIN2OCT = BIN2OCT ## Converte um número binário em octal +COMPLEX = COMPLEX ## Converte coeficientes reais e imaginários e um número complexo +CONVERT = CONVERTER ## Converte um número de um sistema de medida para outro +DEC2BIN = DECABIN ## Converte um número decimal em binário +DEC2HEX = DECAHEX ## Converte um número decimal em hexadecimal +DEC2OCT = DECAOCT ## Converte um número decimal em octal +DELTA = DELTA ## Testa se dois valores são iguais +ERF = FUNERRO ## Retorna a função de erro +ERFC = FUNERROCOMPL ## Retorna a função de erro complementar +GESTEP = DEGRAU ## Testa se um número é maior do que um valor limite +HEX2BIN = HEXABIN ## Converte um número hexadecimal em binário +HEX2DEC = HEXADEC ## Converte um número hexadecimal em decimal +HEX2OCT = HEXAOCT ## Converte um número hexadecimal em octal +IMABS = IMABS ## Retorna o valor absoluto (módulo) de um número complexo +IMAGINARY = IMAGINÁRIO ## Retorna o coeficiente imaginário de um número complexo +IMARGUMENT = IMARG ## Retorna o argumento teta, um ângulo expresso em radianos +IMCONJUGATE = IMCONJ ## Retorna o conjugado complexo de um número complexo +IMCOS = IMCOS ## Retorna o cosseno de um número complexo +IMDIV = IMDIV ## Retorna o quociente de dois números complexos +IMEXP = IMEXP ## Retorna o exponencial de um número complexo +IMLN = IMLN ## Retorna o logaritmo natural de um número complexo +IMLOG10 = IMLOG10 ## Retorna o logaritmo de base 10 de um número complexo +IMLOG2 = IMLOG2 ## Retorna o logaritmo de base 2 de um número complexo +IMPOWER = IMPOT ## Retorna um número complexo elevado a uma potência inteira +IMPRODUCT = IMPROD ## Retorna o produto de números complexos +IMREAL = IMREAL ## Retorna o coeficiente real de um número complexo +IMSIN = IMSENO ## Retorna o seno de um número complexo +IMSQRT = IMRAIZ ## Retorna a raiz quadrada de um número complexo +IMSUB = IMSUBTR ## Retorna a diferença entre dois números complexos +IMSUM = IMSOMA ## Retorna a soma de números complexos +OCT2BIN = OCTABIN ## Converte um número octal em binário +OCT2DEC = OCTADEC ## Converte um número octal em decimal +OCT2HEX = OCTAHEX ## Converte um número octal em hexadecimal + + +## +## Financial functions Funções financeiras +## +ACCRINT = JUROSACUM ## Retorna a taxa de juros acumulados de um título que paga uma taxa periódica de juros +ACCRINTM = JUROSACUMV ## Retorna os juros acumulados de um título que paga juros no vencimento +AMORDEGRC = AMORDEGRC ## Retorna a depreciação para cada período contábil usando o coeficiente de depreciação +AMORLINC = AMORLINC ## Retorna a depreciação para cada período contábil +COUPDAYBS = CUPDIASINLIQ ## Retorna o número de dias do início do período de cupom até a data de liquidação +COUPDAYS = CUPDIAS ## Retorna o número de dias no período de cupom que contém a data de quitação +COUPDAYSNC = CUPDIASPRÓX ## Retorna o número de dias da data de liquidação até a data do próximo cupom +COUPNCD = CUPDATAPRÓX ## Retorna a próxima data de cupom após a data de quitação +COUPNUM = CUPNÚM ## Retorna o número de cupons pagáveis entre as datas de quitação e vencimento +COUPPCD = CUPDATAANT ## Retorna a data de cupom anterior à data de quitação +CUMIPMT = PGTOJURACUM ## Retorna os juros acumulados pagos entre dois períodos +CUMPRINC = PGTOCAPACUM ## Retorna o capital acumulado pago sobre um empréstimo entre dois períodos +DB = BD ## Retorna a depreciação de um ativo para um período especificado, usando o método de balanço de declínio fixo +DDB = BDD ## Retorna a depreciação de um ativo com relação a um período especificado usando o método de saldos decrescentes duplos ou qualquer outro método especificado por você +DISC = DESC ## Retorna a taxa de desconto de um título +DOLLARDE = MOEDADEC ## Converte um preço em formato de moeda, na forma fracionária, em um preço na forma decimal +DOLLARFR = MOEDAFRA ## Converte um preço, apresentado na forma decimal, em um preço apresentado na forma fracionária +DURATION = DURAÇÃO ## Retorna a duração anual de um título com pagamentos de juros periódicos +EFFECT = EFETIVA ## Retorna a taxa de juros anual efetiva +FV = VF ## Retorna o valor futuro de um investimento +FVSCHEDULE = VFPLANO ## Retorna o valor futuro de um capital inicial após a aplicação de uma série de taxas de juros compostas +INTRATE = TAXAJUROS ## Retorna a taxa de juros de um título totalmente investido +IPMT = IPGTO ## Retorna o pagamento de juros para um investimento em um determinado período +IRR = TIR ## Retorna a taxa interna de retorno de uma série de fluxos de caixa +ISPMT = ÉPGTO ## Calcula os juros pagos durante um período específico de um investimento +MDURATION = MDURAÇÃO ## Retorna a duração de Macauley modificada para um título com um valor de paridade equivalente a R$ 100 +MIRR = MTIR ## Calcula a taxa interna de retorno em que fluxos de caixa positivos e negativos são financiados com diferentes taxas +NOMINAL = NOMINAL ## Retorna a taxa de juros nominal anual +NPER = NPER ## Retorna o número de períodos de um investimento +NPV = VPL ## Retorna o valor líquido atual de um investimento com base em uma série de fluxos de caixa periódicos e em uma taxa de desconto +ODDFPRICE = PREÇOPRIMINC ## Retorna o preço por R$ 100 de valor nominal de um título com um primeiro período indefinido +ODDFYIELD = LUCROPRIMINC ## Retorna o rendimento de um título com um primeiro período indefinido +ODDLPRICE = PREÇOÚLTINC ## Retorna o preço por R$ 100 de valor nominal de um título com um último período de cupom indefinido +ODDLYIELD = LUCROÚLTINC ## Retorna o rendimento de um título com um último período indefinido +PMT = PGTO ## Retorna o pagamento periódico de uma anuidade +PPMT = PPGTO ## Retorna o pagamento de capital para determinado período de investimento +PRICE = PREÇO ## Retorna a preço por R$ 100,00 de valor nominal de um título que paga juros periódicos +PRICEDISC = PREÇODESC ## Retorna o preço por R$ 100,00 de valor nominal de um título descontado +PRICEMAT = PREÇOVENC ## Retorna o preço por R$ 100,00 de valor nominal de um título que paga juros no vencimento +PV = VP ## Retorna o valor presente de um investimento +RATE = TAXA ## Retorna a taxa de juros por período de uma anuidade +RECEIVED = RECEBER ## Retorna a quantia recebida no vencimento de um título totalmente investido +SLN = DPD ## Retorna a depreciação em linha reta de um ativo durante um período +SYD = SDA ## Retorna a depreciação dos dígitos da soma dos anos de um ativo para um período especificado +TBILLEQ = OTN ## Retorna o rendimento de um título equivalente a uma obrigação do Tesouro +TBILLPRICE = OTNVALOR ## Retorna o preço por R$ 100,00 de valor nominal de uma obrigação do Tesouro +TBILLYIELD = OTNLUCRO ## Retorna o rendimento de uma obrigação do Tesouro +VDB = BDV ## Retorna a depreciação de um ativo para um período especificado ou parcial usando um método de balanço declinante +XIRR = XTIR ## Fornece a taxa interna de retorno para um programa de fluxos de caixa que não é necessariamente periódico +XNPV = XVPL ## Retorna o valor presente líquido de um programa de fluxos de caixa que não é necessariamente periódico +YIELD = LUCRO ## Retorna o lucro de um título que paga juros periódicos +YIELDDISC = LUCRODESC ## Retorna o rendimento anual de um título descontado. Por exemplo, uma obrigação do Tesouro +YIELDMAT = LUCROVENC ## Retorna o lucro anual de um título que paga juros no vencimento + + +## +## Information functions Funções de informação +## +CELL = CÉL ## Retorna informações sobre formatação, localização ou conteúdo de uma célula +ERROR.TYPE = TIPO.ERRO ## Retorna um número correspondente a um tipo de erro +INFO = INFORMAÇÃO ## Retorna informações sobre o ambiente operacional atual +ISBLANK = ÉCÉL.VAZIA ## Retorna VERDADEIRO se o valor for vazio +ISERR = ÉERRO ## Retorna VERDADEIRO se o valor for um valor de erro diferente de #N/D +ISERROR = ÉERROS ## Retorna VERDADEIRO se o valor for um valor de erro +ISEVEN = ÉPAR ## Retorna VERDADEIRO se o número for par +ISLOGICAL = ÉLÓGICO ## Retorna VERDADEIRO se o valor for um valor lógico +ISNA = É.NÃO.DISP ## Retorna VERDADEIRO se o valor for o valor de erro #N/D +ISNONTEXT = É.NÃO.TEXTO ## Retorna VERDADEIRO se o valor for diferente de texto +ISNUMBER = ÉNÚM ## Retorna VERDADEIRO se o valor for um número +ISODD = ÉIMPAR ## Retorna VERDADEIRO se o número for ímpar +ISREF = ÉREF ## Retorna VERDADEIRO se o valor for uma referência +ISTEXT = ÉTEXTO ## Retorna VERDADEIRO se o valor for texto +N = N ## Retorna um valor convertido em um número +NA = NÃO.DISP ## Retorna o valor de erro #N/D +TYPE = TIPO ## Retorna um número indicando o tipo de dados de um valor + + +## +## Logical functions Funções lógicas +## +AND = E ## Retorna VERDADEIRO se todos os seus argumentos forem VERDADEIROS +FALSE = FALSO ## Retorna o valor lógico FALSO +IF = SE ## Especifica um teste lógico a ser executado +IFERROR = SEERRO ## Retornará um valor que você especifica se uma fórmula for avaliada para um erro; do contrário, retornará o resultado da fórmula +NOT = NÃO ## Inverte o valor lógico do argumento +OR = OU ## Retorna VERDADEIRO se um dos argumentos for VERDADEIRO +TRUE = VERDADEIRO ## Retorna o valor lógico VERDADEIRO + + +## +## Lookup and reference functions Funções de pesquisa e referência +## +ADDRESS = ENDEREÇO ## Retorna uma referência como texto para uma única célula em uma planilha +AREAS = ÁREAS ## Retorna o número de áreas em uma referência +CHOOSE = ESCOLHER ## Escolhe um valor a partir de uma lista de valores +COLUMN = COL ## Retorna o número da coluna de uma referência +COLUMNS = COLS ## Retorna o número de colunas em uma referência +HLOOKUP = PROCH ## Procura na linha superior de uma matriz e retorna o valor da célula especificada +HYPERLINK = HYPERLINK ## Cria um atalho ou salto que abre um documento armazenado em um servidor de rede, uma intranet ou na Internet +INDEX = ÍNDICE ## Usa um índice para escolher um valor de uma referência ou matriz +INDIRECT = INDIRETO ## Retorna uma referência indicada por um valor de texto +LOOKUP = PROC ## Procura valores em um vetor ou em uma matriz +MATCH = CORRESP ## Procura valores em uma referência ou em uma matriz +OFFSET = DESLOC ## Retorna um deslocamento de referência com base em uma determinada referência +ROW = LIN ## Retorna o número da linha de uma referência +ROWS = LINS ## Retorna o número de linhas em uma referência +RTD = RTD ## Recupera dados em tempo real de um programa que ofereça suporte a automação COM (automação: uma forma de trabalhar com objetos de um aplicativo a partir de outro aplicativo ou ferramenta de desenvolvimento. Chamada inicialmente de automação OLE, a automação é um padrão industrial e um recurso do modelo de objeto componente (COM).) +TRANSPOSE = TRANSPOR ## Retorna a transposição de uma matriz +VLOOKUP = PROCV ## Procura na primeira coluna de uma matriz e move ao longo da linha para retornar o valor de uma célula + + +## +## Math and trigonometry functions Funções matemáticas e trigonométricas +## +ABS = ABS ## Retorna o valor absoluto de um número +ACOS = ACOS ## Retorna o arco cosseno de um número +ACOSH = ACOSH ## Retorna o cosseno hiperbólico inverso de um número +ASIN = ASEN ## Retorna o arco seno de um número +ASINH = ASENH ## Retorna o seno hiperbólico inverso de um número +ATAN = ATAN ## Retorna o arco tangente de um número +ATAN2 = ATAN2 ## Retorna o arco tangente das coordenadas x e y especificadas +ATANH = ATANH ## Retorna a tangente hiperbólica inversa de um número +CEILING = TETO ## Arredonda um número para o inteiro mais próximo ou para o múltiplo mais próximo de significância +COMBIN = COMBIN ## Retorna o número de combinações de um determinado número de objetos +COS = COS ## Retorna o cosseno de um número +COSH = COSH ## Retorna o cosseno hiperbólico de um número +DEGREES = GRAUS ## Converte radianos em graus +EVEN = PAR ## Arredonda um número para cima até o inteiro par mais próximo +EXP = EXP ## Retorna e elevado à potência de um número especificado +FACT = FATORIAL ## Retorna o fatorial de um número +FACTDOUBLE = FATDUPLO ## Retorna o fatorial duplo de um número +FLOOR = ARREDMULTB ## Arredonda um número para baixo até zero +GCD = MDC ## Retorna o máximo divisor comum +INT = INT ## Arredonda um número para baixo até o número inteiro mais próximo +LCM = MMC ## Retorna o mínimo múltiplo comum +LN = LN ## Retorna o logaritmo natural de um número +LOG = LOG ## Retorna o logaritmo de um número de uma base especificada +LOG10 = LOG10 ## Retorna o logaritmo de base 10 de um número +MDETERM = MATRIZ.DETERM ## Retorna o determinante de uma matriz de uma variável do tipo matriz +MINVERSE = MATRIZ.INVERSO ## Retorna a matriz inversa de uma matriz +MMULT = MATRIZ.MULT ## Retorna o produto de duas matrizes +MOD = RESTO ## Retorna o resto da divisão +MROUND = MARRED ## Retorna um número arredondado ao múltiplo desejado +MULTINOMIAL = MULTINOMIAL ## Retorna o multinomial de um conjunto de números +ODD = ÍMPAR ## Arredonda um número para cima até o inteiro ímpar mais próximo +PI = PI ## Retorna o valor de Pi +POWER = POTÊNCIA ## Fornece o resultado de um número elevado a uma potência +PRODUCT = MULT ## Multiplica seus argumentos +QUOTIENT = QUOCIENTE ## Retorna a parte inteira de uma divisão +RADIANS = RADIANOS ## Converte graus em radianos +RAND = ALEATÓRIO ## Retorna um número aleatório entre 0 e 1 +RANDBETWEEN = ALEATÓRIOENTRE ## Retorna um número aleatório entre os números especificados +ROMAN = ROMANO ## Converte um algarismo arábico em romano, como texto +ROUND = ARRED ## Arredonda um número até uma quantidade especificada de dígitos +ROUNDDOWN = ARREDONDAR.PARA.BAIXO ## Arredonda um número para baixo até zero +ROUNDUP = ARREDONDAR.PARA.CIMA ## Arredonda um número para cima, afastando-o de zero +SERIESSUM = SOMASEQÜÊNCIA ## Retorna a soma de uma série polinomial baseada na fórmula +SIGN = SINAL ## Retorna o sinal de um número +SIN = SEN ## Retorna o seno de um ângulo dado +SINH = SENH ## Retorna o seno hiperbólico de um número +SQRT = RAIZ ## Retorna uma raiz quadrada positiva +SQRTPI = RAIZPI ## Retorna a raiz quadrada de (núm* pi) +SUBTOTAL = SUBTOTAL ## Retorna um subtotal em uma lista ou em um banco de dados +SUM = SOMA ## Soma seus argumentos +SUMIF = SOMASE ## Adiciona as células especificadas por um determinado critério +SUMIFS = SOMASE ## Adiciona as células em um intervalo que atende a vários critérios +SUMPRODUCT = SOMARPRODUTO ## Retorna a soma dos produtos de componentes correspondentes de matrizes +SUMSQ = SOMAQUAD ## Retorna a soma dos quadrados dos argumentos +SUMX2MY2 = SOMAX2DY2 ## Retorna a soma da diferença dos quadrados dos valores correspondentes em duas matrizes +SUMX2PY2 = SOMAX2SY2 ## Retorna a soma da soma dos quadrados dos valores correspondentes em duas matrizes +SUMXMY2 = SOMAXMY2 ## Retorna a soma dos quadrados das diferenças dos valores correspondentes em duas matrizes +TAN = TAN ## Retorna a tangente de um número +TANH = TANH ## Retorna a tangente hiperbólica de um número +TRUNC = TRUNCAR ## Trunca um número para um inteiro + + +## +## Statistical functions Funções estatísticas +## +AVEDEV = DESV.MÉDIO ## Retorna a média aritmética dos desvios médios dos pontos de dados a partir de sua média +AVERAGE = MÉDIA ## Retorna a média dos argumentos +AVERAGEA = MÉDIAA ## Retorna a média dos argumentos, inclusive números, texto e valores lógicos +AVERAGEIF = MÉDIASE ## Retorna a média (média aritmética) de todas as células em um intervalo que atendem a um determinado critério +AVERAGEIFS = MÉDIASES ## Retorna a média (média aritmética) de todas as células que atendem a múltiplos critérios. +BETADIST = DISTBETA ## Retorna a função de distribuição cumulativa beta +BETAINV = BETA.ACUM.INV ## Retorna o inverso da função de distribuição cumulativa para uma distribuição beta especificada +BINOMDIST = DISTRBINOM ## Retorna a probabilidade de distribuição binomial do termo individual +CHIDIST = DIST.QUI ## Retorna a probabilidade unicaudal da distribuição qui-quadrada +CHIINV = INV.QUI ## Retorna o inverso da probabilidade uni-caudal da distribuição qui-quadrada +CHITEST = TESTE.QUI ## Retorna o teste para independência +CONFIDENCE = INT.CONFIANÇA ## Retorna o intervalo de confiança para uma média da população +CORREL = CORREL ## Retorna o coeficiente de correlação entre dois conjuntos de dados +COUNT = CONT.NÚM ## Calcula quantos números há na lista de argumentos +COUNTA = CONT.VALORES ## Calcula quantos valores há na lista de argumentos +COUNTBLANK = CONTAR.VAZIO ## Conta o número de células vazias no intervalo especificado +COUNTIF = CONT.SE ## Calcula o número de células não vazias em um intervalo que corresponde a determinados critérios +COUNTIFS = CONT.SES ## Conta o número de células dentro de um intervalo que atende a múltiplos critérios +COVAR = COVAR ## Retorna a covariância, a média dos produtos dos desvios pares +CRITBINOM = CRIT.BINOM ## Retorna o menor valor para o qual a distribuição binomial cumulativa é menor ou igual ao valor padrão +DEVSQ = DESVQ ## Retorna a soma dos quadrados dos desvios +EXPONDIST = DISTEXPON ## Retorna a distribuição exponencial +FDIST = DISTF ## Retorna a distribuição de probabilidade F +FINV = INVF ## Retorna o inverso da distribuição de probabilidades F +FISHER = FISHER ## Retorna a transformação Fisher +FISHERINV = FISHERINV ## Retorna o inverso da transformação Fisher +FORECAST = PREVISÃO ## Retorna um valor ao longo de uma linha reta +FREQUENCY = FREQÜÊNCIA ## Retorna uma distribuição de freqüência como uma matriz vertical +FTEST = TESTEF ## Retorna o resultado de um teste F +GAMMADIST = DISTGAMA ## Retorna a distribuição gama +GAMMAINV = INVGAMA ## Retorna o inverso da distribuição cumulativa gama +GAMMALN = LNGAMA ## Retorna o logaritmo natural da função gama, G(x) +GEOMEAN = MÉDIA.GEOMÉTRICA ## Retorna a média geométrica +GROWTH = CRESCIMENTO ## Retorna valores ao longo de uma tendência exponencial +HARMEAN = MÉDIA.HARMÔNICA ## Retorna a média harmônica +HYPGEOMDIST = DIST.HIPERGEOM ## Retorna a distribuição hipergeométrica +INTERCEPT = INTERCEPÇÃO ## Retorna a intercepção da linha de regressão linear +KURT = CURT ## Retorna a curtose de um conjunto de dados +LARGE = MAIOR ## Retorna o maior valor k-ésimo de um conjunto de dados +LINEST = PROJ.LIN ## Retorna os parâmetros de uma tendência linear +LOGEST = PROJ.LOG ## Retorna os parâmetros de uma tendência exponencial +LOGINV = INVLOG ## Retorna o inverso da distribuição lognormal +LOGNORMDIST = DIST.LOGNORMAL ## Retorna a distribuição lognormal cumulativa +MAX = MÁXIMO ## Retorna o valor máximo em uma lista de argumentos +MAXA = MÁXIMOA ## Retorna o maior valor em uma lista de argumentos, inclusive números, texto e valores lógicos +MEDIAN = MED ## Retorna a mediana dos números indicados +MIN = MÍNIMO ## Retorna o valor mínimo em uma lista de argumentos +MINA = MÍNIMOA ## Retorna o menor valor em uma lista de argumentos, inclusive números, texto e valores lógicos +MODE = MODO ## Retorna o valor mais comum em um conjunto de dados +NEGBINOMDIST = DIST.BIN.NEG ## Retorna a distribuição binomial negativa +NORMDIST = DIST.NORM ## Retorna a distribuição cumulativa normal +NORMINV = INV.NORM ## Retorna o inverso da distribuição cumulativa normal +NORMSDIST = DIST.NORMP ## Retorna a distribuição cumulativa normal padrão +NORMSINV = INV.NORMP ## Retorna o inverso da distribuição cumulativa normal padrão +PEARSON = PEARSON ## Retorna o coeficiente de correlação do momento do produto Pearson +PERCENTILE = PERCENTIL ## Retorna o k-ésimo percentil de valores em um intervalo +PERCENTRANK = ORDEM.PORCENTUAL ## Retorna a ordem percentual de um valor em um conjunto de dados +PERMUT = PERMUT ## Retorna o número de permutações de um determinado número de objetos +POISSON = POISSON ## Retorna a distribuição Poisson +PROB = PROB ## Retorna a probabilidade de valores em um intervalo estarem entre dois limites +QUARTILE = QUARTIL ## Retorna o quartil do conjunto de dados +RANK = ORDEM ## Retorna a posição de um número em uma lista de números +RSQ = RQUAD ## Retorna o quadrado do coeficiente de correlação do momento do produto de Pearson +SKEW = DISTORÇÃO ## Retorna a distorção de uma distribuição +SLOPE = INCLINAÇÃO ## Retorna a inclinação da linha de regressão linear +SMALL = MENOR ## Retorna o menor valor k-ésimo do conjunto de dados +STANDARDIZE = PADRONIZAR ## Retorna um valor normalizado +STDEV = DESVPAD ## Estima o desvio padrão com base em uma amostra +STDEVA = DESVPADA ## Estima o desvio padrão com base em uma amostra, inclusive números, texto e valores lógicos +STDEVP = DESVPADP ## Calcula o desvio padrão com base na população total +STDEVPA = DESVPADPA ## Calcula o desvio padrão com base na população total, inclusive números, texto e valores lógicos +STEYX = EPADYX ## Retorna o erro padrão do valor-y previsto para cada x da regressão +TDIST = DISTT ## Retorna a distribuição t de Student +TINV = INVT ## Retorna o inverso da distribuição t de Student +TREND = TENDÊNCIA ## Retorna valores ao longo de uma tendência linear +TRIMMEAN = MÉDIA.INTERNA ## Retorna a média do interior de um conjunto de dados +TTEST = TESTET ## Retorna a probabilidade associada ao teste t de Student +VAR = VAR ## Estima a variância com base em uma amostra +VARA = VARA ## Estima a variância com base em uma amostra, inclusive números, texto e valores lógicos +VARP = VARP ## Calcula a variância com base na população inteira +VARPA = VARPA ## Calcula a variância com base na população total, inclusive números, texto e valores lógicos +WEIBULL = WEIBULL ## Retorna a distribuição Weibull +ZTEST = TESTEZ ## Retorna o valor de probabilidade uni-caudal de um teste-z + + +## +## Text functions Funções de texto +## +ASC = ASC ## Altera letras do inglês ou katakana de largura total (bytes duplos) dentro de uma seqüência de caracteres para caracteres de meia largura (byte único) +BAHTTEXT = BAHTTEXT ## Converte um número em um texto, usando o formato de moeda ß (baht) +CHAR = CARACT ## Retorna o caractere especificado pelo número de código +CLEAN = TIRAR ## Remove todos os caracteres do texto que não podem ser impressos +CODE = CÓDIGO ## Retorna um código numérico para o primeiro caractere de uma seqüência de caracteres de texto +CONCATENATE = CONCATENAR ## Agrupa vários itens de texto em um único item de texto +DOLLAR = MOEDA ## Converte um número em texto, usando o formato de moeda $ (dólar) +EXACT = EXATO ## Verifica se dois valores de texto são idênticos +FIND = PROCURAR ## Procura um valor de texto dentro de outro (diferencia maiúsculas de minúsculas) +FINDB = PROCURARB ## Procura um valor de texto dentro de outro (diferencia maiúsculas de minúsculas) +FIXED = DEF.NÚM.DEC ## Formata um número como texto com um número fixo de decimais +JIS = JIS ## Altera letras do inglês ou katakana de meia largura (byte único) dentro de uma seqüência de caracteres para caracteres de largura total (bytes duplos) +LEFT = ESQUERDA ## Retorna os caracteres mais à esquerda de um valor de texto +LEFTB = ESQUERDAB ## Retorna os caracteres mais à esquerda de um valor de texto +LEN = NÚM.CARACT ## Retorna o número de caracteres em uma seqüência de texto +LENB = NÚM.CARACTB ## Retorna o número de caracteres em uma seqüência de texto +LOWER = MINÚSCULA ## Converte texto para minúsculas +MID = EXT.TEXTO ## Retorna um número específico de caracteres de uma seqüência de texto começando na posição especificada +MIDB = EXT.TEXTOB ## Retorna um número específico de caracteres de uma seqüência de texto começando na posição especificada +PHONETIC = FONÉTICA ## Extrai os caracteres fonéticos (furigana) de uma seqüência de caracteres de texto +PROPER = PRI.MAIÚSCULA ## Coloca a primeira letra de cada palavra em maiúscula em um valor de texto +REPLACE = MUDAR ## Muda os caracteres dentro do texto +REPLACEB = MUDARB ## Muda os caracteres dentro do texto +REPT = REPT ## Repete o texto um determinado número de vezes +RIGHT = DIREITA ## Retorna os caracteres mais à direita de um valor de texto +RIGHTB = DIREITAB ## Retorna os caracteres mais à direita de um valor de texto +SEARCH = LOCALIZAR ## Localiza um valor de texto dentro de outro (não diferencia maiúsculas de minúsculas) +SEARCHB = LOCALIZARB ## Localiza um valor de texto dentro de outro (não diferencia maiúsculas de minúsculas) +SUBSTITUTE = SUBSTITUIR ## Substitui um novo texto por um texto antigo em uma seqüência de texto +T = T ## Converte os argumentos em texto +TEXT = TEXTO ## Formata um número e o converte em texto +TRIM = ARRUMAR ## Remove espaços do texto +UPPER = MAIÚSCULA ## Converte o texto em maiúsculas +VALUE = VALOR ## Converte um argumento de texto em um número diff --git a/PHPExcel/locale/pt/config b/PHPExcel/locale/pt/config new file mode 100644 index 0000000..60b422b --- /dev/null +++ b/PHPExcel/locale/pt/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = € + + +## +## Excel Error Codes (For future use) +## +NULL = #NULO! +DIV0 = #DIV/0! +VALUE = #VALOR! +REF = #REF! +NAME = #NOME? +NUM = #NÚM! +NA = #N/D diff --git a/PHPExcel/locale/pt/functions b/PHPExcel/locale/pt/functions new file mode 100644 index 0000000..ba4eb47 --- /dev/null +++ b/PHPExcel/locale/pt/functions @@ -0,0 +1,408 @@ +## +## Add-in and Automation functions Funções de Suplemento e Automatização +## +GETPIVOTDATA = OBTERDADOSDIN ## Devolve dados armazenados num relatório de Tabela Dinâmica + + +## +## Cube functions Funções de cubo +## +CUBEKPIMEMBER = MEMBROKPICUBO ## Devolve o nome, propriedade e medição de um KPI (key performance indicator) e apresenta o nome e a propriedade na célula. Um KPI é uma medida quantificável, como, por exemplo, o lucro mensal bruto ou a rotatividade trimestral de pessoal, utilizada para monitorizar o desempenho de uma organização. +CUBEMEMBER = MEMBROCUBO ## Devolve um membro ou cadeia de identificação numa hierarquia de cubo. Utilizada para validar a existência do membro ou cadeia de identificação no cubo. +CUBEMEMBERPROPERTY = PROPRIEDADEMEMBROCUBO ## Devolve o valor de uma propriedade de membro no cubo. Utilizada para validar a existência de um nome de membro no cubo e para devolver a propriedade especificada para esse membro. +CUBERANKEDMEMBER = MEMBROCLASSIFICADOCUBO ## Devolve o enésimo ou a classificação mais alta num conjunto. Utilizada para devolver um ou mais elementos num conjunto, tal como o melhor vendedor ou os 10 melhores alunos. +CUBESET = CONJUNTOCUBO ## Define um conjunto calculado de membros ou cadeias de identificação enviando uma expressão de conjunto para o cubo no servidor, que cria o conjunto e, em seguida, devolve o conjunto ao Microsoft Office Excel. +CUBESETCOUNT = CONTARCONJUNTOCUBO ## Devolve o número de itens num conjunto. +CUBEVALUE = VALORCUBO ## Devolve um valor agregado do cubo. + + +## +## Database functions Funções de base de dados +## +DAVERAGE = BDMÉDIA ## Devolve a média das entradas da base de dados seleccionadas +DCOUNT = BDCONTAR ## Conta as células que contêm números numa base de dados +DCOUNTA = BDCONTAR.VAL ## Conta as células que não estejam em branco numa base de dados +DGET = BDOBTER ## Extrai de uma base de dados um único registo que corresponde aos critérios especificados +DMAX = BDMÁX ## Devolve o valor máximo das entradas da base de dados seleccionadas +DMIN = BDMÍN ## Devolve o valor mínimo das entradas da base de dados seleccionadas +DPRODUCT = BDMULTIPL ## Multiplica os valores de um determinado campo de registos que correspondem aos critérios numa base de dados +DSTDEV = BDDESVPAD ## Calcula o desvio-padrão com base numa amostra de entradas da base de dados seleccionadas +DSTDEVP = BDDESVPADP ## Calcula o desvio-padrão com base na população total das entradas da base de dados seleccionadas +DSUM = BDSOMA ## Adiciona os números na coluna de campo dos registos de base de dados que correspondem aos critérios +DVAR = BDVAR ## Calcula a variância com base numa amostra das entradas de base de dados seleccionadas +DVARP = BDVARP ## Calcula a variância com base na população total das entradas de base de dados seleccionadas + + +## +## Date and time functions Funções de data e hora +## +DATE = DATA ## Devolve o número de série de uma determinada data +DATEVALUE = DATA.VALOR ## Converte uma data em forma de texto num número de série +DAY = DIA ## Converte um número de série num dia do mês +DAYS360 = DIAS360 ## Calcula o número de dias entre duas datas com base num ano com 360 dias +EDATE = DATAM ## Devolve um número de série de data que corresponde ao número de meses indicado antes ou depois da data de início +EOMONTH = FIMMÊS ## Devolve o número de série do último dia do mês antes ou depois de um número de meses especificado +HOUR = HORA ## Converte um número de série numa hora +MINUTE = MINUTO ## Converte um número de série num minuto +MONTH = MÊS ## Converte um número de série num mês +NETWORKDAYS = DIATRABALHOTOTAL ## Devolve o número total de dias úteis entre duas datas +NOW = AGORA ## Devolve o número de série da data e hora actuais +SECOND = SEGUNDO ## Converte um número de série num segundo +TIME = TEMPO ## Devolve o número de série de um determinado tempo +TIMEVALUE = VALOR.TEMPO ## Converte um tempo em forma de texto num número de série +TODAY = HOJE ## Devolve o número de série da data actual +WEEKDAY = DIA.SEMANA ## Converte um número de série num dia da semana +WEEKNUM = NÚMSEMANA ## Converte um número de série num número que representa o número da semana num determinado ano +WORKDAY = DIA.TRABALHO ## Devolve o número de série da data antes ou depois de um número de dias úteis especificado +YEAR = ANO ## Converte um número de série num ano +YEARFRAC = FRACÇÃOANO ## Devolve a fracção de ano que representa o número de dias inteiros entre a data_de_início e a data_de_fim + + +## +## Engineering functions Funções de engenharia +## +BESSELI = BESSELI ## Devolve a função de Bessel modificada In(x) +BESSELJ = BESSELJ ## Devolve a função de Bessel Jn(x) +BESSELK = BESSELK ## Devolve a função de Bessel modificada Kn(x) +BESSELY = BESSELY ## Devolve a função de Bessel Yn(x) +BIN2DEC = BINADEC ## Converte um número binário em decimal +BIN2HEX = BINAHEX ## Converte um número binário em hexadecimal +BIN2OCT = BINAOCT ## Converte um número binário em octal +COMPLEX = COMPLEXO ## Converte coeficientes reais e imaginários num número complexo +CONVERT = CONVERTER ## Converte um número de um sistema de medida noutro +DEC2BIN = DECABIN ## Converte um número decimal em binário +DEC2HEX = DECAHEX ## Converte um número decimal em hexadecimal +DEC2OCT = DECAOCT ## Converte um número decimal em octal +DELTA = DELTA ## Testa se dois valores são iguais +ERF = FUNCERRO ## Devolve a função de erro +ERFC = FUNCERROCOMPL ## Devolve a função de erro complementar +GESTEP = DEGRAU ## Testa se um número é maior do que um valor limite +HEX2BIN = HEXABIN ## Converte um número hexadecimal em binário +HEX2DEC = HEXADEC ## Converte um número hexadecimal em decimal +HEX2OCT = HEXAOCT ## Converte um número hexadecimal em octal +IMABS = IMABS ## Devolve o valor absoluto (módulo) de um número complexo +IMAGINARY = IMAGINÁRIO ## Devolve o coeficiente imaginário de um número complexo +IMARGUMENT = IMARG ## Devolve o argumento Teta, um ângulo expresso em radianos +IMCONJUGATE = IMCONJ ## Devolve o conjugado complexo de um número complexo +IMCOS = IMCOS ## Devolve o co-seno de um número complexo +IMDIV = IMDIV ## Devolve o quociente de dois números complexos +IMEXP = IMEXP ## Devolve o exponencial de um número complexo +IMLN = IMLN ## Devolve o logaritmo natural de um número complexo +IMLOG10 = IMLOG10 ## Devolve o logaritmo de base 10 de um número complexo +IMLOG2 = IMLOG2 ## Devolve o logaritmo de base 2 de um número complexo +IMPOWER = IMPOT ## Devolve um número complexo elevado a uma potência inteira +IMPRODUCT = IMPROD ## Devolve o produto de números complexos +IMREAL = IMREAL ## Devolve o coeficiente real de um número complexo +IMSIN = IMSENO ## Devolve o seno de um número complexo +IMSQRT = IMRAIZ ## Devolve a raiz quadrada de um número complexo +IMSUB = IMSUBTR ## Devolve a diferença entre dois números complexos +IMSUM = IMSOMA ## Devolve a soma de números complexos +OCT2BIN = OCTABIN ## Converte um número octal em binário +OCT2DEC = OCTADEC ## Converte um número octal em decimal +OCT2HEX = OCTAHEX ## Converte um número octal em hexadecimal + + +## +## Financial functions Funções financeiras +## +ACCRINT = JUROSACUM ## Devolve os juros acumulados de um título que paga juros periódicos +ACCRINTM = JUROSACUMV ## Devolve os juros acumulados de um título que paga juros no vencimento +AMORDEGRC = AMORDEGRC ## Devolve a depreciação correspondente a cada período contabilístico utilizando um coeficiente de depreciação +AMORLINC = AMORLINC ## Devolve a depreciação correspondente a cada período contabilístico +COUPDAYBS = CUPDIASINLIQ ## Devolve o número de dias entre o início do período do cupão e a data de regularização +COUPDAYS = CUPDIAS ## Devolve o número de dias no período do cupão que contém a data de regularização +COUPDAYSNC = CUPDIASPRÓX ## Devolve o número de dias entre a data de regularização e a data do cupão seguinte +COUPNCD = CUPDATAPRÓX ## Devolve a data do cupão seguinte após a data de regularização +COUPNUM = CUPNÚM ## Devolve o número de cupões a serem pagos entre a data de regularização e a data de vencimento +COUPPCD = CUPDATAANT ## Devolve a data do cupão anterior antes da data de regularização +CUMIPMT = PGTOJURACUM ## Devolve os juros cumulativos pagos entre dois períodos +CUMPRINC = PGTOCAPACUM ## Devolve o capital cumulativo pago a título de empréstimo entre dois períodos +DB = BD ## Devolve a depreciação de um activo relativo a um período especificado utilizando o método das quotas degressivas fixas +DDB = BDD ## Devolve a depreciação de um activo relativo a um período especificado utilizando o método das quotas degressivas duplas ou qualquer outro método especificado +DISC = DESC ## Devolve a taxa de desconto de um título +DOLLARDE = MOEDADEC ## Converte um preço em unidade monetária, expresso como uma fracção, num preço em unidade monetária, expresso como um número decimal +DOLLARFR = MOEDAFRA ## Converte um preço em unidade monetária, expresso como um número decimal, num preço em unidade monetária, expresso como uma fracção +DURATION = DURAÇÃO ## Devolve a duração anual de um título com pagamentos de juros periódicos +EFFECT = EFECTIVA ## Devolve a taxa de juros anual efectiva +FV = VF ## Devolve o valor futuro de um investimento +FVSCHEDULE = VFPLANO ## Devolve o valor futuro de um capital inicial após a aplicação de uma série de taxas de juro compostas +INTRATE = TAXAJUROS ## Devolve a taxa de juros de um título investido na totalidade +IPMT = IPGTO ## Devolve o pagamento dos juros de um investimento durante um determinado período +IRR = TIR ## Devolve a taxa de rentabilidade interna para uma série de fluxos monetários +ISPMT = É.PGTO ## Calcula os juros pagos durante um período específico de um investimento +MDURATION = MDURAÇÃO ## Devolve a duração modificada de Macauley de um título com um valor de paridade equivalente a € 100 +MIRR = MTIR ## Devolve a taxa interna de rentabilidade em que os fluxos monetários positivos e negativos são financiados com taxas diferentes +NOMINAL = NOMINAL ## Devolve a taxa de juros nominal anual +NPER = NPER ## Devolve o número de períodos de um investimento +NPV = VAL ## Devolve o valor actual líquido de um investimento com base numa série de fluxos monetários periódicos e numa taxa de desconto +ODDFPRICE = PREÇOPRIMINC ## Devolve o preço por € 100 do valor nominal de um título com um período inicial incompleto +ODDFYIELD = LUCROPRIMINC ## Devolve o lucro de um título com um período inicial incompleto +ODDLPRICE = PREÇOÚLTINC ## Devolve o preço por € 100 do valor nominal de um título com um período final incompleto +ODDLYIELD = LUCROÚLTINC ## Devolve o lucro de um título com um período final incompleto +PMT = PGTO ## Devolve o pagamento periódico de uma anuidade +PPMT = PPGTO ## Devolve o pagamento sobre o capital de um investimento num determinado período +PRICE = PREÇO ## Devolve o preço por € 100 do valor nominal de um título que paga juros periódicos +PRICEDISC = PREÇODESC ## Devolve o preço por € 100 do valor nominal de um título descontado +PRICEMAT = PREÇOVENC ## Devolve o preço por € 100 do valor nominal de um título que paga juros no vencimento +PV = VA ## Devolve o valor actual de um investimento +RATE = TAXA ## Devolve a taxa de juros por período de uma anuidade +RECEIVED = RECEBER ## Devolve o montante recebido no vencimento de um título investido na totalidade +SLN = AMORT ## Devolve uma depreciação linear de um activo durante um período +SYD = AMORTD ## Devolve a depreciação por algarismos da soma dos anos de um activo durante um período especificado +TBILLEQ = OTN ## Devolve o lucro de um título equivalente a uma Obrigação do Tesouro +TBILLPRICE = OTNVALOR ## Devolve o preço por € 100 de valor nominal de uma Obrigação do Tesouro +TBILLYIELD = OTNLUCRO ## Devolve o lucro de uma Obrigação do Tesouro +VDB = BDV ## Devolve a depreciação de um activo relativo a um período específico ou parcial utilizando um método de quotas degressivas +XIRR = XTIR ## Devolve a taxa interna de rentabilidade de um plano de fluxos monetários que não seja necessariamente periódica +XNPV = XVAL ## Devolve o valor actual líquido de um plano de fluxos monetários que não seja necessariamente periódico +YIELD = LUCRO ## Devolve o lucro de um título que paga juros periódicos +YIELDDISC = LUCRODESC ## Devolve o lucro anual de um título emitido abaixo do valor nominal, por exemplo, uma Obrigação do Tesouro +YIELDMAT = LUCROVENC ## Devolve o lucro anual de um título que paga juros na data de vencimento + + +## +## Information functions Funções de informação +## +CELL = CÉL ## Devolve informações sobre a formatação, localização ou conteúdo de uma célula +ERROR.TYPE = TIPO.ERRO ## Devolve um número correspondente a um tipo de erro +INFO = INFORMAÇÃO ## Devolve informações sobre o ambiente de funcionamento actual +ISBLANK = É.CÉL.VAZIA ## Devolve VERDADEIRO se o valor estiver em branco +ISERR = É.ERROS ## Devolve VERDADEIRO se o valor for um valor de erro diferente de #N/D +ISERROR = É.ERRO ## Devolve VERDADEIRO se o valor for um valor de erro +ISEVEN = ÉPAR ## Devolve VERDADEIRO se o número for par +ISLOGICAL = É.LÓGICO ## Devolve VERDADEIRO se o valor for lógico +ISNA = É.NÃO.DISP ## Devolve VERDADEIRO se o valor for o valor de erro #N/D +ISNONTEXT = É.NÃO.TEXTO ## Devolve VERDADEIRO se o valor não for texto +ISNUMBER = É.NÚM ## Devolve VERDADEIRO se o valor for um número +ISODD = ÉÍMPAR ## Devolve VERDADEIRO se o número for ímpar +ISREF = É.REF ## Devolve VERDADEIRO se o valor for uma referência +ISTEXT = É.TEXTO ## Devolve VERDADEIRO se o valor for texto +N = N ## Devolve um valor convertido num número +NA = NÃO.DISP ## Devolve o valor de erro #N/D +TYPE = TIPO ## Devolve um número que indica o tipo de dados de um valor + + +## +## Logical functions Funções lógicas +## +AND = E ## Devolve VERDADEIRO se todos os respectivos argumentos corresponderem a VERDADEIRO +FALSE = FALSO ## Devolve o valor lógico FALSO +IF = SE ## Especifica um teste lógico a ser executado +IFERROR = SE.ERRO ## Devolve um valor definido pelo utilizador se ocorrer um erro na fórmula, e devolve o resultado da fórmula se não ocorrer nenhum erro +NOT = NÃO ## Inverte a lógica do respectivo argumento +OR = OU ## Devolve VERDADEIRO se qualquer argumento for VERDADEIRO +TRUE = VERDADEIRO ## Devolve o valor lógico VERDADEIRO + + +## +## Lookup and reference functions Funções de pesquisa e referência +## +ADDRESS = ENDEREÇO ## Devolve uma referência a uma única célula numa folha de cálculo como texto +AREAS = ÁREAS ## Devolve o número de áreas numa referência +CHOOSE = SELECCIONAR ## Selecciona um valor a partir de uma lista de valores +COLUMN = COL ## Devolve o número da coluna de uma referência +COLUMNS = COLS ## Devolve o número de colunas numa referência +HLOOKUP = PROCH ## Procura na linha superior de uma matriz e devolve o valor da célula indicada +HYPERLINK = HIPERLIGAÇÃO ## Cria um atalho ou hiperligação que abre um documento armazenado num servidor de rede, numa intranet ou na Internet +INDEX = ÍNDICE ## Utiliza um índice para escolher um valor de uma referência ou de uma matriz +INDIRECT = INDIRECTO ## Devolve uma referência indicada por um valor de texto +LOOKUP = PROC ## Procura valores num vector ou numa matriz +MATCH = CORRESP ## Procura valores numa referência ou numa matriz +OFFSET = DESLOCAMENTO ## Devolve o deslocamento de referência de uma determinada referência +ROW = LIN ## Devolve o número da linha de uma referência +ROWS = LINS ## Devolve o número de linhas numa referência +RTD = RTD ## Obtém dados em tempo real a partir de um programa que suporte automatização COM (automatização: modo de trabalhar com objectos de uma aplicação a partir de outra aplicação ou ferramenta de desenvolvimento. Anteriormente conhecida como automatização OLE, a automatização é uma norma da indústria de software e uma funcionalidade COM (Component Object Model).) +TRANSPOSE = TRANSPOR ## Devolve a transposição de uma matriz +VLOOKUP = PROCV ## Procura na primeira coluna de uma matriz e percorre a linha para devolver o valor de uma célula + + +## +## Math and trigonometry functions Funções matemáticas e trigonométricas +## +ABS = ABS ## Devolve o valor absoluto de um número +ACOS = ACOS ## Devolve o arco de co-seno de um número +ACOSH = ACOSH ## Devolve o co-seno hiperbólico inverso de um número +ASIN = ASEN ## Devolve o arco de seno de um número +ASINH = ASENH ## Devolve o seno hiperbólico inverso de um número +ATAN = ATAN ## Devolve o arco de tangente de um número +ATAN2 = ATAN2 ## Devolve o arco de tangente das coordenadas x e y +ATANH = ATANH ## Devolve a tangente hiperbólica inversa de um número +CEILING = ARRED.EXCESSO ## Arredonda um número para o número inteiro mais próximo ou para o múltiplo de significância mais próximo +COMBIN = COMBIN ## Devolve o número de combinações de um determinado número de objectos +COS = COS ## Devolve o co-seno de um número +COSH = COSH ## Devolve o co-seno hiperbólico de um número +DEGREES = GRAUS ## Converte radianos em graus +EVEN = PAR ## Arredonda um número por excesso para o número inteiro mais próximo +EXP = EXP ## Devolve e elevado à potência de um determinado número +FACT = FACTORIAL ## Devolve o factorial de um número +FACTDOUBLE = FACTDUPLO ## Devolve o factorial duplo de um número +FLOOR = ARRED.DEFEITO ## Arredonda um número por defeito até zero +GCD = MDC ## Devolve o maior divisor comum +INT = INT ## Arredonda um número por defeito para o número inteiro mais próximo +LCM = MMC ## Devolve o mínimo múltiplo comum +LN = LN ## Devolve o logaritmo natural de um número +LOG = LOG ## Devolve o logaritmo de um número com uma base especificada +LOG10 = LOG10 ## Devolve o logaritmo de base 10 de um número +MDETERM = MATRIZ.DETERM ## Devolve o determinante matricial de uma matriz +MINVERSE = MATRIZ.INVERSA ## Devolve o inverso matricial de uma matriz +MMULT = MATRIZ.MULT ## Devolve o produto matricial de duas matrizes +MOD = RESTO ## Devolve o resto da divisão +MROUND = MARRED ## Devolve um número arredondado para o múltiplo pretendido +MULTINOMIAL = POLINOMIAL ## Devolve o polinomial de um conjunto de números +ODD = ÍMPAR ## Arredonda por excesso um número para o número inteiro ímpar mais próximo +PI = PI ## Devolve o valor de pi +POWER = POTÊNCIA ## Devolve o resultado de um número elevado a uma potência +PRODUCT = PRODUTO ## Multiplica os respectivos argumentos +QUOTIENT = QUOCIENTE ## Devolve a parte inteira de uma divisão +RADIANS = RADIANOS ## Converte graus em radianos +RAND = ALEATÓRIO ## Devolve um número aleatório entre 0 e 1 +RANDBETWEEN = ALEATÓRIOENTRE ## Devolve um número aleatório entre os números especificados +ROMAN = ROMANO ## Converte um número árabe em romano, como texto +ROUND = ARRED ## Arredonda um número para um número de dígitos especificado +ROUNDDOWN = ARRED.PARA.BAIXO ## Arredonda um número por defeito até zero +ROUNDUP = ARRED.PARA.CIMA ## Arredonda um número por excesso, afastando-o de zero +SERIESSUM = SOMASÉRIE ## Devolve a soma de uma série de potências baseada na fórmula +SIGN = SINAL ## Devolve o sinal de um número +SIN = SEN ## Devolve o seno de um determinado ângulo +SINH = SENH ## Devolve o seno hiperbólico de um número +SQRT = RAIZQ ## Devolve uma raiz quadrada positiva +SQRTPI = RAIZPI ## Devolve a raiz quadrada de (núm * pi) +SUBTOTAL = SUBTOTAL ## Devolve um subtotal numa lista ou base de dados +SUM = SOMA ## Adiciona os respectivos argumentos +SUMIF = SOMA.SE ## Adiciona as células especificadas por um determinado critério +SUMIFS = SOMA.SE.S ## Adiciona as células num intervalo que cumpre vários critérios +SUMPRODUCT = SOMARPRODUTO ## Devolve a soma dos produtos de componentes de matrizes correspondentes +SUMSQ = SOMARQUAD ## Devolve a soma dos quadrados dos argumentos +SUMX2MY2 = SOMAX2DY2 ## Devolve a soma da diferença dos quadrados dos valores correspondentes em duas matrizes +SUMX2PY2 = SOMAX2SY2 ## Devolve a soma da soma dos quadrados dos valores correspondentes em duas matrizes +SUMXMY2 = SOMAXMY2 ## Devolve a soma dos quadrados da diferença dos valores correspondentes em duas matrizes +TAN = TAN ## Devolve a tangente de um número +TANH = TANH ## Devolve a tangente hiperbólica de um número +TRUNC = TRUNCAR ## Trunca um número para um número inteiro + + +## +## Statistical functions Funções estatísticas +## +AVEDEV = DESV.MÉDIO ## Devolve a média aritmética dos desvios absolutos à média dos pontos de dados +AVERAGE = MÉDIA ## Devolve a média dos respectivos argumentos +AVERAGEA = MÉDIAA ## Devolve uma média dos respectivos argumentos, incluindo números, texto e valores lógicos +AVERAGEIF = MÉDIA.SE ## Devolve a média aritmética de todas as células num intervalo que cumprem determinado critério +AVERAGEIFS = MÉDIA.SE.S ## Devolve a média aritmética de todas as células que cumprem múltiplos critérios +BETADIST = DISTBETA ## Devolve a função de distribuição cumulativa beta +BETAINV = BETA.ACUM.INV ## Devolve o inverso da função de distribuição cumulativa relativamente a uma distribuição beta específica +BINOMDIST = DISTRBINOM ## Devolve a probabilidade de distribuição binomial de termo individual +CHIDIST = DIST.CHI ## Devolve a probabilidade unicaudal da distribuição qui-quadrada +CHIINV = INV.CHI ## Devolve o inverso da probabilidade unicaudal da distribuição qui-quadrada +CHITEST = TESTE.CHI ## Devolve o teste para independência +CONFIDENCE = INT.CONFIANÇA ## Devolve o intervalo de confiança correspondente a uma média de população +CORREL = CORREL ## Devolve o coeficiente de correlação entre dois conjuntos de dados +COUNT = CONTAR ## Conta os números que existem na lista de argumentos +COUNTA = CONTAR.VAL ## Conta os valores que existem na lista de argumentos +COUNTBLANK = CONTAR.VAZIO ## Conta o número de células em branco num intervalo +COUNTIF = CONTAR.SE ## Calcula o número de células num intervalo que corresponde aos critérios determinados +COUNTIFS = CONTAR.SE.S ## Conta o número de células num intervalo que cumprem múltiplos critérios +COVAR = COVAR ## Devolve a covariância, que é a média dos produtos de desvios de pares +CRITBINOM = CRIT.BINOM ## Devolve o menor valor em que a distribuição binomial cumulativa é inferior ou igual a um valor de critério +DEVSQ = DESVQ ## Devolve a soma dos quadrados dos desvios +EXPONDIST = DISTEXPON ## Devolve a distribuição exponencial +FDIST = DISTF ## Devolve a distribuição da probabilidade F +FINV = INVF ## Devolve o inverso da distribuição da probabilidade F +FISHER = FISHER ## Devolve a transformação Fisher +FISHERINV = FISHERINV ## Devolve o inverso da transformação Fisher +FORECAST = PREVISÃO ## Devolve um valor ao longo de uma tendência linear +FREQUENCY = FREQUÊNCIA ## Devolve uma distribuição de frequência como uma matriz vertical +FTEST = TESTEF ## Devolve o resultado de um teste F +GAMMADIST = DISTGAMA ## Devolve a distribuição gama +GAMMAINV = INVGAMA ## Devolve o inverso da distribuição gama cumulativa +GAMMALN = LNGAMA ## Devolve o logaritmo natural da função gama, Γ(x) +GEOMEAN = MÉDIA.GEOMÉTRICA ## Devolve a média geométrica +GROWTH = CRESCIMENTO ## Devolve valores ao longo de uma tendência exponencial +HARMEAN = MÉDIA.HARMÓNICA ## Devolve a média harmónica +HYPGEOMDIST = DIST.HIPERGEOM ## Devolve a distribuição hipergeométrica +INTERCEPT = INTERCEPTAR ## Devolve a intercepção da linha de regressão linear +KURT = CURT ## Devolve a curtose de um conjunto de dados +LARGE = MAIOR ## Devolve o maior valor k-ésimo de um conjunto de dados +LINEST = PROJ.LIN ## Devolve os parâmetros de uma tendência linear +LOGEST = PROJ.LOG ## Devolve os parâmetros de uma tendência exponencial +LOGINV = INVLOG ## Devolve o inverso da distribuição normal logarítmica +LOGNORMDIST = DIST.NORMALLOG ## Devolve a distribuição normal logarítmica cumulativa +MAX = MÁXIMO ## Devolve o valor máximo numa lista de argumentos +MAXA = MÁXIMOA ## Devolve o valor máximo numa lista de argumentos, incluindo números, texto e valores lógicos +MEDIAN = MED ## Devolve a mediana dos números indicados +MIN = MÍNIMO ## Devolve o valor mínimo numa lista de argumentos +MINA = MÍNIMOA ## Devolve o valor mínimo numa lista de argumentos, incluindo números, texto e valores lógicos +MODE = MODA ## Devolve o valor mais comum num conjunto de dados +NEGBINOMDIST = DIST.BIN.NEG ## Devolve a distribuição binominal negativa +NORMDIST = DIST.NORM ## Devolve a distribuição cumulativa normal +NORMINV = INV.NORM ## Devolve o inverso da distribuição cumulativa normal +NORMSDIST = DIST.NORMP ## Devolve a distribuição cumulativa normal padrão +NORMSINV = INV.NORMP ## Devolve o inverso da distribuição cumulativa normal padrão +PEARSON = PEARSON ## Devolve o coeficiente de correlação momento/produto de Pearson +PERCENTILE = PERCENTIL ## Devolve o k-ésimo percentil de valores num intervalo +PERCENTRANK = ORDEM.PERCENTUAL ## Devolve a ordem percentual de um valor num conjunto de dados +PERMUT = PERMUTAR ## Devolve o número de permutações de um determinado número de objectos +POISSON = POISSON ## Devolve a distribuição de Poisson +PROB = PROB ## Devolve a probabilidade dos valores num intervalo se encontrarem entre dois limites +QUARTILE = QUARTIL ## Devolve o quartil de um conjunto de dados +RANK = ORDEM ## Devolve a ordem de um número numa lista numérica +RSQ = RQUAD ## Devolve o quadrado do coeficiente de correlação momento/produto de Pearson +SKEW = DISTORÇÃO ## Devolve a distorção de uma distribuição +SLOPE = DECLIVE ## Devolve o declive da linha de regressão linear +SMALL = MENOR ## Devolve o menor valor de k-ésimo de um conjunto de dados +STANDARDIZE = NORMALIZAR ## Devolve um valor normalizado +STDEV = DESVPAD ## Calcula o desvio-padrão com base numa amostra +STDEVA = DESVPADA ## Calcula o desvio-padrão com base numa amostra, incluindo números, texto e valores lógicos +STDEVP = DESVPADP ## Calcula o desvio-padrão com base na população total +STDEVPA = DESVPADPA ## Calcula o desvio-padrão com base na população total, incluindo números, texto e valores lógicos +STEYX = EPADYX ## Devolve o erro-padrão do valor de y previsto para cada x na regressão +TDIST = DISTT ## Devolve a distribuição t de Student +TINV = INVT ## Devolve o inverso da distribuição t de Student +TREND = TENDÊNCIA ## Devolve valores ao longo de uma tendência linear +TRIMMEAN = MÉDIA.INTERNA ## Devolve a média do interior de um conjunto de dados +TTEST = TESTET ## Devolve a probabilidade associada ao teste t de Student +VAR = VAR ## Calcula a variância com base numa amostra +VARA = VARA ## Calcula a variância com base numa amostra, incluindo números, texto e valores lógicos +VARP = VARP ## Calcula a variância com base na população total +VARPA = VARPA ## Calcula a variância com base na população total, incluindo números, texto e valores lógicos +WEIBULL = WEIBULL ## Devolve a distribuição Weibull +ZTEST = TESTEZ ## Devolve o valor de probabilidade unicaudal de um teste-z + + +## +## Text functions Funções de texto +## +ASC = ASC ## Altera letras ou katakana de largura total (byte duplo) numa cadeia de caracteres para caracteres de largura média (byte único) +BAHTTEXT = TEXTO.BAHT ## Converte um número em texto, utilizando o formato monetário ß (baht) +CHAR = CARÁCT ## Devolve o carácter especificado pelo número de código +CLEAN = LIMPAR ## Remove do texto todos os caracteres não imprimíveis +CODE = CÓDIGO ## Devolve um código numérico correspondente ao primeiro carácter numa cadeia de texto +CONCATENATE = CONCATENAR ## Agrupa vários itens de texto num único item de texto +DOLLAR = MOEDA ## Converte um número em texto, utilizando o formato monetário € (Euro) +EXACT = EXACTO ## Verifica se dois valores de texto são idênticos +FIND = LOCALIZAR ## Localiza um valor de texto dentro de outro (sensível às maiúsculas e minúsculas) +FINDB = LOCALIZARB ## Localiza um valor de texto dentro de outro (sensível às maiúsculas e minúsculas) +FIXED = FIXA ## Formata um número como texto com um número fixo de decimais +JIS = JIS ## Altera letras ou katakana de largura média (byte único) numa cadeia de caracteres para caracteres de largura total (byte duplo) +LEFT = ESQUERDA ## Devolve os caracteres mais à esquerda de um valor de texto +LEFTB = ESQUERDAB ## Devolve os caracteres mais à esquerda de um valor de texto +LEN = NÚM.CARACT ## Devolve o número de caracteres de uma cadeia de texto +LENB = NÚM.CARACTB ## Devolve o número de caracteres de uma cadeia de texto +LOWER = MINÚSCULAS ## Converte o texto em minúsculas +MID = SEG.TEXTO ## Devolve um número específico de caracteres de uma cadeia de texto, a partir da posição especificada +MIDB = SEG.TEXTOB ## Devolve um número específico de caracteres de uma cadeia de texto, a partir da posição especificada +PHONETIC = FONÉTICA ## Retira os caracteres fonéticos (furigana) de uma cadeia de texto +PROPER = INICIAL.MAIÚSCULA ## Coloca em maiúsculas a primeira letra de cada palavra de um valor de texto +REPLACE = SUBSTITUIR ## Substitui caracteres no texto +REPLACEB = SUBSTITUIRB ## Substitui caracteres no texto +REPT = REPETIR ## Repete texto um determinado número de vezes +RIGHT = DIREITA ## Devolve os caracteres mais à direita de um valor de texto +RIGHTB = DIREITAB ## Devolve os caracteres mais à direita de um valor de texto +SEARCH = PROCURAR ## Localiza um valor de texto dentro de outro (não sensível a maiúsculas e minúsculas) +SEARCHB = PROCURARB ## Localiza um valor de texto dentro de outro (não sensível a maiúsculas e minúsculas) +SUBSTITUTE = SUBST ## Substitui texto novo por texto antigo numa cadeia de texto +T = T ## Converte os respectivos argumentos em texto +TEXT = TEXTO ## Formata um número e converte-o em texto +TRIM = COMPACTAR ## Remove espaços do texto +UPPER = MAIÚSCULAS ## Converte texto em maiúsculas +VALUE = VALOR ## Converte um argumento de texto num número diff --git a/PHPExcel/locale/ru/config b/PHPExcel/locale/ru/config new file mode 100644 index 0000000..6f6ace2 --- /dev/null +++ b/PHPExcel/locale/ru/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = р + + +## +## Excel Error Codes (For future use) +## +NULL = #ПУСТО! +DIV0 = #ДЕЛ/0! +VALUE = #ЗНАЧ! +REF = #ССЫЛ! +NAME = #ИМЯ? +NUM = #ЧИСЛО! +NA = #Н/Д diff --git a/PHPExcel/locale/ru/functions b/PHPExcel/locale/ru/functions new file mode 100644 index 0000000..bd63686 --- /dev/null +++ b/PHPExcel/locale/ru/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from information provided by web-junior (http://www.web-junior.net/) +## +## + + +## +## Add-in and Automation functions Функции надстроек и автоматизации +## +GETPIVOTDATA = ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ ## Возвращает данные, хранящиеся в отчете сводной таблицы. + + +## +## Cube functions Функции Куб +## +CUBEKPIMEMBER = КУБЭЛЕМЕНТКИП ## Возвращает свойство ключевого индикатора производительности «(КИП)» и отображает имя «КИП» в ячейке. «КИП» представляет собой количественную величину, такую как ежемесячная валовая прибыль или ежеквартальная текучесть кадров, используемой для контроля эффективности работы организации. +CUBEMEMBER = КУБЭЛЕМЕНТ ## Возвращает элемент или кортеж из куба. Используется для проверки существования элемента или кортежа в кубе. +CUBEMEMBERPROPERTY = КУБСВОЙСТВОЭЛЕМЕНТА ## Возвращает значение свойства элемента из куба. Используется для проверки существования имени элемента в кубе и возвращает указанное свойство для этого элемента. +CUBERANKEDMEMBER = КУБПОРЭЛЕМЕНТ ## Возвращает n-ый или ранжированный элемент в множество. Используется для возвращения одного или нескольких элементов в множество, например, лучшего продавца или 10 лучших студентов. +CUBESET = КУБМНОЖ ## Определяет вычислительное множество элементов или кортежей, отправляя на сервер выражение, которое создает множество, а затем возвращает его в Microsoft Office Excel. +CUBESETCOUNT = КУБЧИСЛОЭЛМНОЖ ## Возвращает число элементов множества. +CUBEVALUE = КУБЗНАЧЕНИЕ ## Возвращает обобщенное значение из куба. + + +## +## Database functions Функции для работы с базами данных +## +DAVERAGE = ДСРЗНАЧ ## Возвращает среднее значение выбранных записей базы данных. +DCOUNT = БСЧЁТ ## Подсчитывает количество числовых ячеек в базе данных. +DCOUNTA = БСЧЁТА ## Подсчитывает количество непустых ячеек в базе данных. +DGET = БИЗВЛЕЧЬ ## Извлекает из базы данных одну запись, удовлетворяющую заданному условию. +DMAX = ДМАКС ## Возвращает максимальное значение среди выделенных записей базы данных. +DMIN = ДМИН ## Возвращает минимальное значение среди выделенных записей базы данных. +DPRODUCT = БДПРОИЗВЕД ## Перемножает значения определенного поля в записях базы данных, удовлетворяющих условию. +DSTDEV = ДСТАНДОТКЛ ## Оценивает стандартное отклонение по выборке для выделенных записей базы данных. +DSTDEVP = ДСТАНДОТКЛП ## Вычисляет стандартное отклонение по генеральной совокупности для выделенных записей базы данных +DSUM = БДСУММ ## Суммирует числа в поле для записей базы данных, удовлетворяющих условию. +DVAR = БДДИСП ## Оценивает дисперсию по выборке из выделенных записей базы данных +DVARP = БДДИСПП ## Вычисляет дисперсию по генеральной совокупности для выделенных записей базы данных + + +## +## Date and time functions Функции даты и времени +## +DATE = ДАТА ## Возвращает заданную дату в числовом формате. +DATEVALUE = ДАТАЗНАЧ ## Преобразует дату из текстового формата в числовой формат. +DAY = ДЕНЬ ## Преобразует дату в числовом формате в день месяца. +DAYS360 = ДНЕЙ360 ## Вычисляет количество дней между двумя датами на основе 360-дневного года. +EDATE = ДАТАМЕС ## Возвращает дату в числовом формате, отстоящую на заданное число месяцев вперед или назад от начальной даты. +EOMONTH = КОНМЕСЯЦА ## Возвращает дату в числовом формате для последнего дня месяца, отстоящего вперед или назад на заданное число месяцев. +HOUR = ЧАС ## Преобразует дату в числовом формате в часы. +MINUTE = МИНУТЫ ## Преобразует дату в числовом формате в минуты. +MONTH = МЕСЯЦ ## Преобразует дату в числовом формате в месяцы. +NETWORKDAYS = ЧИСТРАБДНИ ## Возвращает количество рабочих дней между двумя датами. +NOW = ТДАТА ## Возвращает текущую дату и время в числовом формате. +SECOND = СЕКУНДЫ ## Преобразует дату в числовом формате в секунды. +TIME = ВРЕМЯ ## Возвращает заданное время в числовом формате. +TIMEVALUE = ВРЕМЗНАЧ ## Преобразует время из текстового формата в числовой формат. +TODAY = СЕГОДНЯ ## Возвращает текущую дату в числовом формате. +WEEKDAY = ДЕНЬНЕД ## Преобразует дату в числовом формате в день недели. +WEEKNUM = НОМНЕДЕЛИ ## Преобразует числовое представление в число, которое указывает, на какую неделю года приходится указанная дата. +WORKDAY = РАБДЕНЬ ## Возвращает дату в числовом формате, отстоящую вперед или назад на заданное количество рабочих дней. +YEAR = ГОД ## Преобразует дату в числовом формате в год. +YEARFRAC = ДОЛЯГОДА ## Возвращает долю года, которую составляет количество дней между начальной и конечной датами. + + +## +## Engineering functions Инженерные функции +## +BESSELI = БЕССЕЛЬ.I ## Возвращает модифицированную функцию Бесселя In(x). +BESSELJ = БЕССЕЛЬ.J ## Возвращает функцию Бесселя Jn(x). +BESSELK = БЕССЕЛЬ.K ## Возвращает модифицированную функцию Бесселя Kn(x). +BESSELY = БЕССЕЛЬ.Y ## Возвращает функцию Бесселя Yn(x). +BIN2DEC = ДВ.В.ДЕС ## Преобразует двоичное число в десятичное. +BIN2HEX = ДВ.В.ШЕСТН ## Преобразует двоичное число в шестнадцатеричное. +BIN2OCT = ДВ.В.ВОСЬМ ## Преобразует двоичное число в восьмеричное. +COMPLEX = КОМПЛЕКСН ## Преобразует коэффициенты при вещественной и мнимой частях комплексного числа в комплексное число. +CONVERT = ПРЕОБР ## Преобразует число из одной системы единиц измерения в другую. +DEC2BIN = ДЕС.В.ДВ ## Преобразует десятичное число в двоичное. +DEC2HEX = ДЕС.В.ШЕСТН ## Преобразует десятичное число в шестнадцатеричное. +DEC2OCT = ДЕС.В.ВОСЬМ ## Преобразует десятичное число в восьмеричное. +DELTA = ДЕЛЬТА ## Проверяет равенство двух значений. +ERF = ФОШ ## Возвращает функцию ошибки. +ERFC = ДФОШ ## Возвращает дополнительную функцию ошибки. +GESTEP = ПОРОГ ## Проверяет, не превышает ли данное число порогового значения. +HEX2BIN = ШЕСТН.В.ДВ ## Преобразует шестнадцатеричное число в двоичное. +HEX2DEC = ШЕСТН.В.ДЕС ## Преобразует шестнадцатеричное число в десятичное. +HEX2OCT = ШЕСТН.В.ВОСЬМ ## Преобразует шестнадцатеричное число в восьмеричное. +IMABS = МНИМ.ABS ## Возвращает абсолютную величину (модуль) комплексного числа. +IMAGINARY = МНИМ.ЧАСТЬ ## Возвращает коэффициент при мнимой части комплексного числа. +IMARGUMENT = МНИМ.АРГУМЕНТ ## Возвращает значение аргумента комплексного числа (тета) — угол, выраженный в радианах. +IMCONJUGATE = МНИМ.СОПРЯЖ ## Возвращает комплексно-сопряженное комплексное число. +IMCOS = МНИМ.COS ## Возвращает косинус комплексного числа. +IMDIV = МНИМ.ДЕЛ ## Возвращает частное от деления двух комплексных чисел. +IMEXP = МНИМ.EXP ## Возвращает экспоненту комплексного числа. +IMLN = МНИМ.LN ## Возвращает натуральный логарифм комплексного числа. +IMLOG10 = МНИМ.LOG10 ## Возвращает обычный (десятичный) логарифм комплексного числа. +IMLOG2 = МНИМ.LOG2 ## Возвращает двоичный логарифм комплексного числа. +IMPOWER = МНИМ.СТЕПЕНЬ ## Возвращает комплексное число, возведенное в целую степень. +IMPRODUCT = МНИМ.ПРОИЗВЕД ## Возвращает произведение от 2 до 29 комплексных чисел. +IMREAL = МНИМ.ВЕЩ ## Возвращает коэффициент при вещественной части комплексного числа. +IMSIN = МНИМ.SIN ## Возвращает синус комплексного числа. +IMSQRT = МНИМ.КОРЕНЬ ## Возвращает значение квадратного корня из комплексного числа. +IMSUB = МНИМ.РАЗН ## Возвращает разность двух комплексных чисел. +IMSUM = МНИМ.СУММ ## Возвращает сумму комплексных чисел. +OCT2BIN = ВОСЬМ.В.ДВ ## Преобразует восьмеричное число в двоичное. +OCT2DEC = ВОСЬМ.В.ДЕС ## Преобразует восьмеричное число в десятичное. +OCT2HEX = ВОСЬМ.В.ШЕСТН ## Преобразует восьмеричное число в шестнадцатеричное. + + +## +## Financial functions Финансовые функции +## +ACCRINT = НАКОПДОХОД ## Возвращает накопленный процент по ценным бумагам с периодической выплатой процентов. +ACCRINTM = НАКОПДОХОДПОГАШ ## Возвращает накопленный процент по ценным бумагам, проценты по которым выплачиваются в срок погашения. +AMORDEGRC = АМОРУМ ## Возвращает величину амортизации для каждого периода, используя коэффициент амортизации. +AMORLINC = АМОРУВ ## Возвращает величину амортизации для каждого периода. +COUPDAYBS = ДНЕЙКУПОНДО ## Возвращает количество дней от начала действия купона до даты соглашения. +COUPDAYS = ДНЕЙКУПОН ## Возвращает число дней в периоде купона, содержащем дату соглашения. +COUPDAYSNC = ДНЕЙКУПОНПОСЛЕ ## Возвращает число дней от даты соглашения до срока следующего купона. +COUPNCD = ДАТАКУПОНПОСЛЕ ## Возвращает следующую дату купона после даты соглашения. +COUPNUM = ЧИСЛКУПОН ## Возвращает количество купонов, которые могут быть оплачены между датой соглашения и сроком вступления в силу. +COUPPCD = ДАТАКУПОНДО ## Возвращает предыдущую дату купона перед датой соглашения. +CUMIPMT = ОБЩПЛАТ ## Возвращает общую выплату, произведенную между двумя периодическими выплатами. +CUMPRINC = ОБЩДОХОД ## Возвращает общую выплату по займу между двумя периодами. +DB = ФУО ## Возвращает величину амортизации актива для заданного периода, рассчитанную методом фиксированного уменьшения остатка. +DDB = ДДОБ ## Возвращает величину амортизации актива за данный период, используя метод двойного уменьшения остатка или иной явно указанный метод. +DISC = СКИДКА ## Возвращает норму скидки для ценных бумаг. +DOLLARDE = РУБЛЬ.ДЕС ## Преобразует цену в рублях, выраженную в виде дроби, в цену в рублях, выраженную десятичным числом. +DOLLARFR = РУБЛЬ.ДРОБЬ ## Преобразует цену в рублях, выраженную десятичным числом, в цену в рублях, выраженную в виде дроби. +DURATION = ДЛИТ ## Возвращает ежегодную продолжительность действия ценных бумаг с периодическими выплатами по процентам. +EFFECT = ЭФФЕКТ ## Возвращает действующие ежегодные процентные ставки. +FV = БС ## Возвращает будущую стоимость инвестиции. +FVSCHEDULE = БЗРАСПИС ## Возвращает будущую стоимость первоначальной основной суммы после начисления ряда сложных процентов. +INTRATE = ИНОРМА ## Возвращает процентную ставку для полностью инвестированных ценных бумаг. +IPMT = ПРПЛТ ## Возвращает величину выплаты прибыли на вложения за данный период. +IRR = ВСД ## Возвращает внутреннюю ставку доходности для ряда потоков денежных средств. +ISPMT = ПРОЦПЛАТ ## Вычисляет выплаты за указанный период инвестиции. +MDURATION = МДЛИТ ## Возвращает модифицированную длительность Маколея для ценных бумаг с предполагаемой номинальной стоимостью 100 рублей. +MIRR = МВСД ## Возвращает внутреннюю ставку доходности, при которой положительные и отрицательные денежные потоки имеют разные значения ставки. +NOMINAL = НОМИНАЛ ## Возвращает номинальную годовую процентную ставку. +NPER = КПЕР ## Возвращает общее количество периодов выплаты для данного вклада. +NPV = ЧПС ## Возвращает чистую приведенную стоимость инвестиции, основанной на серии периодических денежных потоков и ставке дисконтирования. +ODDFPRICE = ЦЕНАПЕРВНЕРЕГ ## Возвращает цену за 100 рублей нарицательной стоимости ценных бумаг с нерегулярным первым периодом. +ODDFYIELD = ДОХОДПЕРВНЕРЕГ ## Возвращает доход по ценным бумагам с нерегулярным первым периодом. +ODDLPRICE = ЦЕНАПОСЛНЕРЕГ ## Возвращает цену за 100 рублей нарицательной стоимости ценных бумаг с нерегулярным последним периодом. +ODDLYIELD = ДОХОДПОСЛНЕРЕГ ## Возвращает доход по ценным бумагам с нерегулярным последним периодом. +PMT = ПЛТ ## Возвращает величину выплаты за один период аннуитета. +PPMT = ОСПЛТ ## Возвращает величину выплат в погашение основной суммы по инвестиции за заданный период. +PRICE = ЦЕНА ## Возвращает цену за 100 рублей нарицательной стоимости ценных бумаг, по которым производится периодическая выплата процентов. +PRICEDISC = ЦЕНАСКИДКА ## Возвращает цену за 100 рублей номинальной стоимости ценных бумаг, на которые сделана скидка. +PRICEMAT = ЦЕНАПОГАШ ## Возвращает цену за 100 рублей номинальной стоимости ценных бумаг, проценты по которым выплачиваются в срок погашения. +PV = ПС ## Возвращает приведенную (к текущему моменту) стоимость инвестиции. +RATE = СТАВКА ## Возвращает процентную ставку по аннуитету за один период. +RECEIVED = ПОЛУЧЕНО ## Возвращает сумму, полученную к сроку погашения полностью обеспеченных ценных бумаг. +SLN = АПЛ ## Возвращает величину линейной амортизации актива за один период. +SYD = АСЧ ## Возвращает величину амортизации актива за данный период, рассчитанную методом суммы годовых чисел. +TBILLEQ = РАВНОКЧЕК ## Возвращает эквивалентный облигации доход по казначейскому чеку. +TBILLPRICE = ЦЕНАКЧЕК ## Возвращает цену за 100 рублей нарицательной стоимости для казначейского чека. +TBILLYIELD = ДОХОДКЧЕК ## Возвращает доход по казначейскому чеку. +VDB = ПУО ## Возвращает величину амортизации актива для указанного или частичного периода при использовании метода сокращающегося баланса. +XIRR = ЧИСТВНДОХ ## Возвращает внутреннюю ставку доходности для графика денежных потоков, которые не обязательно носят периодический характер. +XNPV = ЧИСТНЗ ## Возвращает чистую приведенную стоимость для денежных потоков, которые не обязательно являются периодическими. +YIELD = ДОХОД ## Возвращает доход от ценных бумаг, по которым производятся периодические выплаты процентов. +YIELDDISC = ДОХОДСКИДКА ## Возвращает годовой доход по ценным бумагам, на которые сделана скидка (пример — казначейские чеки). +YIELDMAT = ДОХОДПОГАШ ## Возвращает годовой доход от ценных бумаг, проценты по которым выплачиваются в срок погашения. + + +## +## Information functions Информационные функции +## +CELL = ЯЧЕЙКА ## Возвращает информацию о формате, расположении или содержимом ячейки. +ERROR.TYPE = ТИП.ОШИБКИ ## Возвращает числовой код, соответствующий типу ошибки. +INFO = ИНФОРМ ## Возвращает информацию о текущей операционной среде. +ISBLANK = ЕПУСТО ## Возвращает значение ИСТИНА, если аргумент является ссылкой на пустую ячейку. +ISERR = ЕОШ ## Возвращает значение ИСТИНА, если аргумент ссылается на любое значение ошибки, кроме #Н/Д. +ISERROR = ЕОШИБКА ## Возвращает значение ИСТИНА, если аргумент ссылается на любое значение ошибки. +ISEVEN = ЕЧЁТН ## Возвращает значение ИСТИНА, если значение аргумента является четным числом. +ISLOGICAL = ЕЛОГИЧ ## Возвращает значение ИСТИНА, если аргумент ссылается на логическое значение. +ISNA = ЕНД ## Возвращает значение ИСТИНА, если аргумент ссылается на значение ошибки #Н/Д. +ISNONTEXT = ЕНЕТЕКСТ ## Возвращает значение ИСТИНА, если значение аргумента не является текстом. +ISNUMBER = ЕЧИСЛО ## Возвращает значение ИСТИНА, если аргумент ссылается на число. +ISODD = ЕНЕЧЁТ ## Возвращает значение ИСТИНА, если значение аргумента является нечетным числом. +ISREF = ЕССЫЛКА ## Возвращает значение ИСТИНА, если значение аргумента является ссылкой. +ISTEXT = ЕТЕКСТ ## Возвращает значение ИСТИНА, если значение аргумента является текстом. +N = Ч ## Возвращает значение, преобразованное в число. +NA = НД ## Возвращает значение ошибки #Н/Д. +TYPE = ТИП ## Возвращает число, обозначающее тип данных значения. + + +## +## Logical functions Логические функции +## +AND = И ## Renvoie VRAI si tous ses arguments sont VRAI. +FALSE = ЛОЖЬ ## Возвращает логическое значение ЛОЖЬ. +IF = ЕСЛИ ## Выполняет проверку условия. +IFERROR = ЕСЛИОШИБКА ## Возвращает введённое значение, если вычисление по формуле вызывает ошибку; в противном случае функция возвращает результат вычисления. +NOT = НЕ ## Меняет логическое значение своего аргумента на противоположное. +OR = ИЛИ ## Возвращает значение ИСТИНА, если хотя бы один аргумент имеет значение ИСТИНА. +TRUE = ИСТИНА ## Возвращает логическое значение ИСТИНА. + + +## +## Lookup and reference functions Функции ссылки и поиска +## +ADDRESS = АДРЕС ## Возвращает ссылку на отдельную ячейку листа в виде текста. +AREAS = ОБЛАСТИ ## Возвращает количество областей в ссылке. +CHOOSE = ВЫБОР ## Выбирает значение из списка значений по индексу. +COLUMN = СТОЛБЕЦ ## Возвращает номер столбца, на который указывает ссылка. +COLUMNS = ЧИСЛСТОЛБ ## Возвращает количество столбцов в ссылке. +HLOOKUP = ГПР ## Ищет в первой строке массива и возвращает значение отмеченной ячейки +HYPERLINK = ГИПЕРССЫЛКА ## Создает ссылку, открывающую документ, который находится на сервере сети, в интрасети или в Интернете. +INDEX = ИНДЕКС ## Использует индекс для выбора значения из ссылки или массива. +INDIRECT = ДВССЫЛ ## Возвращает ссылку, заданную текстовым значением. +LOOKUP = ПРОСМОТР ## Ищет значения в векторе или массиве. +MATCH = ПОИСКПОЗ ## Ищет значения в ссылке или массиве. +OFFSET = СМЕЩ ## Возвращает смещение ссылки относительно заданной ссылки. +ROW = СТРОКА ## Возвращает номер строки, определяемой ссылкой. +ROWS = ЧСТРОК ## Возвращает количество строк в ссылке. +RTD = ДРВ ## Извлекает данные реального времени из программ, поддерживающих автоматизацию COM (Программирование объектов. Стандартное средство для работы с объектами некоторого приложения из другого приложения или средства разработки. Программирование объектов (ранее называемое программированием OLE) является функцией модели COM (Component Object Model, модель компонентных объектов).). +TRANSPOSE = ТРАНСП ## Возвращает транспонированный массив. +VLOOKUP = ВПР ## Ищет значение в первом столбце массива и возвращает значение из ячейки в найденной строке и указанном столбце. + + +## +## Math and trigonometry functions Математические и тригонометрические функции +## +ABS = ABS ## Возвращает модуль (абсолютную величину) числа. +ACOS = ACOS ## Возвращает арккосинус числа. +ACOSH = ACOSH ## Возвращает гиперболический арккосинус числа. +ASIN = ASIN ## Возвращает арксинус числа. +ASINH = ASINH ## Возвращает гиперболический арксинус числа. +ATAN = ATAN ## Возвращает арктангенс числа. +ATAN2 = ATAN2 ## Возвращает арктангенс для заданных координат x и y. +ATANH = ATANH ## Возвращает гиперболический арктангенс числа. +CEILING = ОКРВВЕРХ ## Округляет число до ближайшего целого или до ближайшего кратного указанному значению. +COMBIN = ЧИСЛКОМБ ## Возвращает количество комбинаций для заданного числа объектов. +COS = COS ## Возвращает косинус числа. +COSH = COSH ## Возвращает гиперболический косинус числа. +DEGREES = ГРАДУСЫ ## Преобразует радианы в градусы. +EVEN = ЧЁТН ## Округляет число до ближайшего четного целого. +EXP = EXP ## Возвращает число e, возведенное в указанную степень. +FACT = ФАКТР ## Возвращает факториал числа. +FACTDOUBLE = ДВФАКТР ## Возвращает двойной факториал числа. +FLOOR = ОКРВНИЗ ## Округляет число до ближайшего меньшего по модулю значения. +GCD = НОД ## Возвращает наибольший общий делитель. +INT = ЦЕЛОЕ ## Округляет число до ближайшего меньшего целого. +LCM = НОК ## Возвращает наименьшее общее кратное. +LN = LN ## Возвращает натуральный логарифм числа. +LOG = LOG ## Возвращает логарифм числа по заданному основанию. +LOG10 = LOG10 ## Возвращает десятичный логарифм числа. +MDETERM = МОПРЕД ## Возвращает определитель матрицы массива. +MINVERSE = МОБР ## Возвращает обратную матрицу массива. +MMULT = МУМНОЖ ## Возвращает произведение матриц двух массивов. +MOD = ОСТАТ ## Возвращает остаток от деления. +MROUND = ОКРУГЛТ ## Возвращает число, округленное с требуемой точностью. +MULTINOMIAL = МУЛЬТИНОМ ## Возвращает мультиномиальный коэффициент множества чисел. +ODD = НЕЧЁТ ## Округляет число до ближайшего нечетного целого. +PI = ПИ ## Возвращает число пи. +POWER = СТЕПЕНЬ ## Возвращает результат возведения числа в степень. +PRODUCT = ПРОИЗВЕД ## Возвращает произведение аргументов. +QUOTIENT = ЧАСТНОЕ ## Возвращает целую часть частного при делении. +RADIANS = РАДИАНЫ ## Преобразует градусы в радианы. +RAND = СЛЧИС ## Возвращает случайное число в интервале от 0 до 1. +RANDBETWEEN = СЛУЧМЕЖДУ ## Возвращает случайное число в интервале между двумя заданными числами. +ROMAN = РИМСКОЕ ## Преобразует арабские цифры в римские в виде текста. +ROUND = ОКРУГЛ ## Округляет число до указанного количества десятичных разрядов. +ROUNDDOWN = ОКРУГЛВНИЗ ## Округляет число до ближайшего меньшего по модулю значения. +ROUNDUP = ОКРУГЛВВЕРХ ## Округляет число до ближайшего большего по модулю значения. +SERIESSUM = РЯД.СУММ ## Возвращает сумму степенного ряда, вычисленную по формуле. +SIGN = ЗНАК ## Возвращает знак числа. +SIN = SIN ## Возвращает синус заданного угла. +SINH = SINH ## Возвращает гиперболический синус числа. +SQRT = КОРЕНЬ ## Возвращает положительное значение квадратного корня. +SQRTPI = КОРЕНЬПИ ## Возвращает квадратный корень из значения выражения (число * ПИ). +SUBTOTAL = ПРОМЕЖУТОЧНЫЕ.ИТОГИ ## Возвращает промежуточный итог в списке или базе данных. +SUM = СУММ ## Суммирует аргументы. +SUMIF = СУММЕСЛИ ## Суммирует ячейки, удовлетворяющие заданному условию. +SUMIFS = СУММЕСЛИМН ## Суммирует диапазон ячеек, удовлетворяющих нескольким условиям. +SUMPRODUCT = СУММПРОИЗВ ## Возвращает сумму произведений соответствующих элементов массивов. +SUMSQ = СУММКВ ## Возвращает сумму квадратов аргументов. +SUMX2MY2 = СУММРАЗНКВ ## Возвращает сумму разностей квадратов соответствующих значений в двух массивах. +SUMX2PY2 = СУММСУММКВ ## Возвращает сумму сумм квадратов соответствующих элементов двух массивов. +SUMXMY2 = СУММКВРАЗН ## Возвращает сумму квадратов разностей соответствующих значений в двух массивах. +TAN = TAN ## Возвращает тангенс числа. +TANH = TANH ## Возвращает гиперболический тангенс числа. +TRUNC = ОТБР ## Отбрасывает дробную часть числа. + + +## +## Statistical functions Статистические функции +## +AVEDEV = СРОТКЛ ## Возвращает среднее арифметическое абсолютных значений отклонений точек данных от среднего. +AVERAGE = СРЗНАЧ ## Возвращает среднее арифметическое аргументов. +AVERAGEA = СРЗНАЧА ## Возвращает среднее арифметическое аргументов, включая числа, текст и логические значения. +AVERAGEIF = СРЗНАЧЕСЛИ ## Возвращает среднее значение (среднее арифметическое) всех ячеек в диапазоне, которые удовлетворяют данному условию. +AVERAGEIFS = СРЗНАЧЕСЛИМН ## Возвращает среднее значение (среднее арифметическое) всех ячеек, которые удовлетворяют нескольким условиям. +BETADIST = БЕТАРАСП ## Возвращает интегральную функцию бета-распределения. +BETAINV = БЕТАОБР ## Возвращает обратную интегральную функцию указанного бета-распределения. +BINOMDIST = БИНОМРАСП ## Возвращает отдельное значение биномиального распределения. +CHIDIST = ХИ2РАСП ## Возвращает одностороннюю вероятность распределения хи-квадрат. +CHIINV = ХИ2ОБР ## Возвращает обратное значение односторонней вероятности распределения хи-квадрат. +CHITEST = ХИ2ТЕСТ ## Возвращает тест на независимость. +CONFIDENCE = ДОВЕРИТ ## Возвращает доверительный интервал для среднего значения по генеральной совокупности. +CORREL = КОРРЕЛ ## Возвращает коэффициент корреляции между двумя множествами данных. +COUNT = СЧЁТ ## Подсчитывает количество чисел в списке аргументов. +COUNTA = СЧЁТЗ ## Подсчитывает количество значений в списке аргументов. +COUNTBLANK = СЧИТАТЬПУСТОТЫ ## Подсчитывает количество пустых ячеек в диапазоне +COUNTIF = СЧЁТЕСЛИ ## Подсчитывает количество ячеек в диапазоне, удовлетворяющих заданному условию +COUNTIFS = СЧЁТЕСЛИМН ## Подсчитывает количество ячеек внутри диапазона, удовлетворяющих нескольким условиям. +COVAR = КОВАР ## Возвращает ковариацию, среднее произведений парных отклонений +CRITBINOM = КРИТБИНОМ ## Возвращает наименьшее значение, для которого интегральное биномиальное распределение меньше или равно заданному критерию. +DEVSQ = КВАДРОТКЛ ## Возвращает сумму квадратов отклонений. +EXPONDIST = ЭКСПРАСП ## Возвращает экспоненциальное распределение. +FDIST = FРАСП ## Возвращает F-распределение вероятности. +FINV = FРАСПОБР ## Возвращает обратное значение для F-распределения вероятности. +FISHER = ФИШЕР ## Возвращает преобразование Фишера. +FISHERINV = ФИШЕРОБР ## Возвращает обратное преобразование Фишера. +FORECAST = ПРЕДСКАЗ ## Возвращает значение линейного тренда. +FREQUENCY = ЧАСТОТА ## Возвращает распределение частот в виде вертикального массива. +FTEST = ФТЕСТ ## Возвращает результат F-теста. +GAMMADIST = ГАММАРАСП ## Возвращает гамма-распределение. +GAMMAINV = ГАММАОБР ## Возвращает обратное гамма-распределение. +GAMMALN = ГАММАНЛОГ ## Возвращает натуральный логарифм гамма функции, Γ(x). +GEOMEAN = СРГЕОМ ## Возвращает среднее геометрическое. +GROWTH = РОСТ ## Возвращает значения в соответствии с экспоненциальным трендом. +HARMEAN = СРГАРМ ## Возвращает среднее гармоническое. +HYPGEOMDIST = ГИПЕРГЕОМЕТ ## Возвращает гипергеометрическое распределение. +INTERCEPT = ОТРЕЗОК ## Возвращает отрезок, отсекаемый на оси линией линейной регрессии. +KURT = ЭКСЦЕСС ## Возвращает эксцесс множества данных. +LARGE = НАИБОЛЬШИЙ ## Возвращает k-ое наибольшее значение в множестве данных. +LINEST = ЛИНЕЙН ## Возвращает параметры линейного тренда. +LOGEST = ЛГРФПРИБЛ ## Возвращает параметры экспоненциального тренда. +LOGINV = ЛОГНОРМОБР ## Возвращает обратное логарифмическое нормальное распределение. +LOGNORMDIST = ЛОГНОРМРАСП ## Возвращает интегральное логарифмическое нормальное распределение. +MAX = МАКС ## Возвращает наибольшее значение в списке аргументов. +MAXA = МАКСА ## Возвращает наибольшее значение в списке аргументов, включая числа, текст и логические значения. +MEDIAN = МЕДИАНА ## Возвращает медиану заданных чисел. +MIN = МИН ## Возвращает наименьшее значение в списке аргументов. +MINA = МИНА ## Возвращает наименьшее значение в списке аргументов, включая числа, текст и логические значения. +MODE = МОДА ## Возвращает значение моды множества данных. +NEGBINOMDIST = ОТРБИНОМРАСП ## Возвращает отрицательное биномиальное распределение. +NORMDIST = НОРМРАСП ## Возвращает нормальную функцию распределения. +NORMINV = НОРМОБР ## Возвращает обратное нормальное распределение. +NORMSDIST = НОРМСТРАСП ## Возвращает стандартное нормальное интегральное распределение. +NORMSINV = НОРМСТОБР ## Возвращает обратное значение стандартного нормального распределения. +PEARSON = ПИРСОН ## Возвращает коэффициент корреляции Пирсона. +PERCENTILE = ПЕРСЕНТИЛЬ ## Возвращает k-ую персентиль для значений диапазона. +PERCENTRANK = ПРОЦЕНТРАНГ ## Возвращает процентную норму значения в множестве данных. +PERMUT = ПЕРЕСТ ## Возвращает количество перестановок для заданного числа объектов. +POISSON = ПУАССОН ## Возвращает распределение Пуассона. +PROB = ВЕРОЯТНОСТЬ ## Возвращает вероятность того, что значение из диапазона находится внутри заданных пределов. +QUARTILE = КВАРТИЛЬ ## Возвращает квартиль множества данных. +RANK = РАНГ ## Возвращает ранг числа в списке чисел. +RSQ = КВПИРСОН ## Возвращает квадрат коэффициента корреляции Пирсона. +SKEW = СКОС ## Возвращает асимметрию распределения. +SLOPE = НАКЛОН ## Возвращает наклон линии линейной регрессии. +SMALL = НАИМЕНЬШИЙ ## Возвращает k-ое наименьшее значение в множестве данных. +STANDARDIZE = НОРМАЛИЗАЦИЯ ## Возвращает нормализованное значение. +STDEV = СТАНДОТКЛОН ## Оценивает стандартное отклонение по выборке. +STDEVA = СТАНДОТКЛОНА ## Оценивает стандартное отклонение по выборке, включая числа, текст и логические значения. +STDEVP = СТАНДОТКЛОНП ## Вычисляет стандартное отклонение по генеральной совокупности. +STDEVPA = СТАНДОТКЛОНПА ## Вычисляет стандартное отклонение по генеральной совокупности, включая числа, текст и логические значения. +STEYX = СТОШYX ## Возвращает стандартную ошибку предсказанных значений y для каждого значения x в регрессии. +TDIST = СТЬЮДРАСП ## Возвращает t-распределение Стьюдента. +TINV = СТЬЮДРАСПОБР ## Возвращает обратное t-распределение Стьюдента. +TREND = ТЕНДЕНЦИЯ ## Возвращает значения в соответствии с линейным трендом. +TRIMMEAN = УРЕЗСРЕДНЕЕ ## Возвращает среднее внутренности множества данных. +TTEST = ТТЕСТ ## Возвращает вероятность, соответствующую критерию Стьюдента. +VAR = ДИСП ## Оценивает дисперсию по выборке. +VARA = ДИСПА ## Оценивает дисперсию по выборке, включая числа, текст и логические значения. +VARP = ДИСПР ## Вычисляет дисперсию для генеральной совокупности. +VARPA = ДИСПРА ## Вычисляет дисперсию для генеральной совокупности, включая числа, текст и логические значения. +WEIBULL = ВЕЙБУЛЛ ## Возвращает распределение Вейбулла. +ZTEST = ZТЕСТ ## Возвращает двустороннее P-значение z-теста. + + +## +## Text functions Текстовые функции +## +ASC = ASC ## Для языков с двухбайтовыми наборами знаков (например, катакана) преобразует полноширинные (двухбайтовые) знаки в полуширинные (однобайтовые). +BAHTTEXT = БАТТЕКСТ ## Преобразует число в текст, используя денежный формат ß (БАТ). +CHAR = СИМВОЛ ## Возвращает знак с заданным кодом. +CLEAN = ПЕЧСИМВ ## Удаляет все непечатаемые знаки из текста. +CODE = КОДСИМВ ## Возвращает числовой код первого знака в текстовой строке. +CONCATENATE = СЦЕПИТЬ ## Объединяет несколько текстовых элементов в один. +DOLLAR = РУБЛЬ ## Преобразует число в текст, используя денежный формат. +EXACT = СОВПАД ## Проверяет идентичность двух текстовых значений. +FIND = НАЙТИ ## Ищет вхождения одного текстового значения в другом (с учетом регистра). +FINDB = НАЙТИБ ## Ищет вхождения одного текстового значения в другом (с учетом регистра). +FIXED = ФИКСИРОВАННЫЙ ## Форматирует число и преобразует его в текст с заданным числом десятичных знаков. +JIS = JIS ## Для языков с двухбайтовыми наборами знаков (например, катакана) преобразует полуширинные (однобайтовые) знаки в текстовой строке в полноширинные (двухбайтовые). +LEFT = ЛЕВСИМВ ## Возвращает крайние слева знаки текстового значения. +LEFTB = ЛЕВБ ## Возвращает крайние слева знаки текстового значения. +LEN = ДЛСТР ## Возвращает количество знаков в текстовой строке. +LENB = ДЛИНБ ## Возвращает количество знаков в текстовой строке. +LOWER = СТРОЧН ## Преобразует все буквы текста в строчные. +MID = ПСТР ## Возвращает заданное число знаков из строки текста, начиная с указанной позиции. +MIDB = ПСТРБ ## Возвращает заданное число знаков из строки текста, начиная с указанной позиции. +PHONETIC = PHONETIC ## Извлекает фонетические (фуригана) знаки из текстовой строки. +PROPER = ПРОПНАЧ ## Преобразует первую букву в каждом слове текста в прописную. +REPLACE = ЗАМЕНИТЬ ## Заменяет знаки в тексте. +REPLACEB = ЗАМЕНИТЬБ ## Заменяет знаки в тексте. +REPT = ПОВТОР ## Повторяет текст заданное число раз. +RIGHT = ПРАВСИМВ ## Возвращает крайние справа знаки текстовой строки. +RIGHTB = ПРАВБ ## Возвращает крайние справа знаки текстовой строки. +SEARCH = ПОИСК ## Ищет вхождения одного текстового значения в другом (без учета регистра). +SEARCHB = ПОИСКБ ## Ищет вхождения одного текстового значения в другом (без учета регистра). +SUBSTITUTE = ПОДСТАВИТЬ ## Заменяет в текстовой строке старый текст новым. +T = Т ## Преобразует аргументы в текст. +TEXT = ТЕКСТ ## Форматирует число и преобразует его в текст. +TRIM = СЖПРОБЕЛЫ ## Удаляет из текста пробелы. +UPPER = ПРОПИСН ## Преобразует все буквы текста в прописные. +VALUE = ЗНАЧЕН ## Преобразует текстовый аргумент в число. diff --git a/PHPExcel/locale/sv/config b/PHPExcel/locale/sv/config new file mode 100644 index 0000000..5d1a9a9 --- /dev/null +++ b/PHPExcel/locale/sv/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = kr + + +## +## Excel Error Codes (For future use) +## +NULL = #Skärning! +DIV0 = #Division/0! +VALUE = #Värdefel! +REF = #Referens! +NAME = #Namn? +NUM = #Ogiltigt! +NA = #Saknas! diff --git a/PHPExcel/locale/sv/functions b/PHPExcel/locale/sv/functions new file mode 100644 index 0000000..73b2deb --- /dev/null +++ b/PHPExcel/locale/sv/functions @@ -0,0 +1,408 @@ +## +## Add-in and Automation functions Tilläggs- och automatiseringsfunktioner +## +GETPIVOTDATA = HÄMTA.PIVOTDATA ## Returnerar data som lagrats i en pivottabellrapport + + +## +## Cube functions Kubfunktioner +## +CUBEKPIMEMBER = KUBKPIMEDLEM ## Returnerar namn, egenskap och mått för en KPI och visar namnet och egenskapen i cellen. En KPI, eller prestandaindikator, är ett kvantifierbart mått, t.ex. månatlig bruttovinst eller personalomsättning per kvartal, som används för att analysera ett företags resultat. +CUBEMEMBER = KUBMEDLEM ## Returnerar en medlem eller ett par i en kubhierarki. Används för att verifiera att medlemmen eller paret finns i kuben. +CUBEMEMBERPROPERTY = KUBMEDLEMSEGENSKAP ## Returnerar värdet för en medlemsegenskap i kuben. Används för att verifiera att ett medlemsnamn finns i kuben, samt för att returnera den angivna egenskapen för medlemmen. +CUBERANKEDMEMBER = KUBRANGORDNADMEDLEM ## Returnerar den n:te, eller rangordnade, medlemmen i en uppsättning. Används för att returnera ett eller flera element i en uppsättning, till exempelvis den bästa försäljaren eller de tio bästa eleverna. +CUBESET = KUBINSTÄLLNING ## Definierar en beräknad uppsättning medlemmar eller par genom att skicka ett bestämt uttryck till kuben på servern, som skapar uppsättningen och sedan returnerar den till Microsoft Office Excel. +CUBESETCOUNT = KUBINSTÄLLNINGANTAL ## Returnerar antalet objekt i en uppsättning. +CUBEVALUE = KUBVÄRDE ## Returnerar ett mängdvärde från en kub. + + +## +## Database functions Databasfunktioner +## +DAVERAGE = DMEDEL ## Returnerar medelvärdet av databasposterna +DCOUNT = DANTAL ## Räknar antalet celler som innehåller tal i en databas +DCOUNTA = DANTALV ## Räknar ifyllda celler i en databas +DGET = DHÄMTA ## Hämtar en enstaka post från en databas som uppfyller de angivna villkoren +DMAX = DMAX ## Returnerar det största värdet från databasposterna +DMIN = DMIN ## Returnerar det minsta värdet från databasposterna +DPRODUCT = DPRODUKT ## Multiplicerar värdena i ett visst fält i poster som uppfyller villkoret +DSTDEV = DSTDAV ## Uppskattar standardavvikelsen baserat på ett urval av databasposterna +DSTDEVP = DSTDAVP ## Beräknar standardavvikelsen utifrån hela populationen av valda databasposter +DSUM = DSUMMA ## Summerar talen i kolumnfält i databasposter som uppfyller villkoret +DVAR = DVARIANS ## Uppskattar variansen baserat på ett urval av databasposterna +DVARP = DVARIANSP ## Beräknar variansen utifrån hela populationen av valda databasposter + + +## +## Date and time functions Tid- och datumfunktioner +## +DATE = DATUM ## Returnerar ett serienummer för ett visst datum +DATEVALUE = DATUMVÄRDE ## Konverterar ett datum i textformat till ett serienummer +DAY = DAG ## Konverterar ett serienummer till dag i månaden +DAYS360 = DAGAR360 ## Beräknar antalet dagar mellan två datum baserat på ett 360-dagarsår +EDATE = EDATUM ## Returnerar serienumret för ett datum som infaller ett visst antal månader före eller efter startdatumet +EOMONTH = SLUTMÅNAD ## Returnerar serienumret för sista dagen i månaden ett visst antal månader tidigare eller senare +HOUR = TIMME ## Konverterar ett serienummer till en timme +MINUTE = MINUT ## Konverterar ett serienummer till en minut +MONTH = MÅNAD ## Konverterar ett serienummer till en månad +NETWORKDAYS = NETTOARBETSDAGAR ## Returnerar antalet hela arbetsdagar mellan två datum +NOW = NU ## Returnerar serienumret för dagens datum och aktuell tid +SECOND = SEKUND ## Konverterar ett serienummer till en sekund +TIME = KLOCKSLAG ## Returnerar serienumret för en viss tid +TIMEVALUE = TIDVÄRDE ## Konverterar en tid i textformat till ett serienummer +TODAY = IDAG ## Returnerar serienumret för dagens datum +WEEKDAY = VECKODAG ## Konverterar ett serienummer till en dag i veckan +WEEKNUM = VECKONR ## Konverterar ett serienummer till ett veckonummer +WORKDAY = ARBETSDAGAR ## Returnerar serienumret för ett datum ett visst antal arbetsdagar tidigare eller senare +YEAR = ÅR ## Konverterar ett serienummer till ett år +YEARFRAC = ÅRDEL ## Returnerar en del av ett år som representerar antalet hela dagar mellan start- och slutdatum + + +## +## Engineering functions Tekniska funktioner +## +BESSELI = BESSELI ## Returnerar den modifierade Bessel-funktionen In(x) +BESSELJ = BESSELJ ## Returnerar Bessel-funktionen Jn(x) +BESSELK = BESSELK ## Returnerar den modifierade Bessel-funktionen Kn(x) +BESSELY = BESSELY ## Returnerar Bessel-funktionen Yn(x) +BIN2DEC = BIN.TILL.DEC ## Omvandlar ett binärt tal till decimalt +BIN2HEX = BIN.TILL.HEX ## Omvandlar ett binärt tal till hexadecimalt +BIN2OCT = BIN.TILL.OKT ## Omvandlar ett binärt tal till oktalt +COMPLEX = KOMPLEX ## Omvandlar reella och imaginära koefficienter till ett komplext tal +CONVERT = KONVERTERA ## Omvandlar ett tal från ett måttsystem till ett annat +DEC2BIN = DEC.TILL.BIN ## Omvandlar ett decimalt tal till binärt +DEC2HEX = DEC.TILL.HEX ## Omvandlar ett decimalt tal till hexadecimalt +DEC2OCT = DEC.TILL.OKT ## Omvandlar ett decimalt tal till oktalt +DELTA = DELTA ## Testar om två värden är lika +ERF = FELF ## Returnerar felfunktionen +ERFC = FELFK ## Returnerar den komplementära felfunktionen +GESTEP = SLSTEG ## Testar om ett tal är större än ett tröskelvärde +HEX2BIN = HEX.TILL.BIN ## Omvandlar ett hexadecimalt tal till binärt +HEX2DEC = HEX.TILL.DEC ## Omvandlar ett hexadecimalt tal till decimalt +HEX2OCT = HEX.TILL.OKT ## Omvandlar ett hexadecimalt tal till oktalt +IMABS = IMABS ## Returnerar absolutvärdet (modulus) för ett komplext tal +IMAGINARY = IMAGINÄR ## Returnerar den imaginära koefficienten för ett komplext tal +IMARGUMENT = IMARGUMENT ## Returnerar det komplexa talets argument, en vinkel uttryckt i radianer +IMCONJUGATE = IMKONJUGAT ## Returnerar det komplexa talets konjugat +IMCOS = IMCOS ## Returnerar cosinus för ett komplext tal +IMDIV = IMDIV ## Returnerar kvoten för två komplexa tal +IMEXP = IMEUPPHÖJT ## Returnerar exponenten för ett komplext tal +IMLN = IMLN ## Returnerar den naturliga logaritmen för ett komplext tal +IMLOG10 = IMLOG10 ## Returnerar 10-logaritmen för ett komplext tal +IMLOG2 = IMLOG2 ## Returnerar 2-logaritmen för ett komplext tal +IMPOWER = IMUPPHÖJT ## Returnerar ett komplext tal upphöjt till en exponent +IMPRODUCT = IMPRODUKT ## Returnerar produkten av komplexa tal +IMREAL = IMREAL ## Returnerar den reella koefficienten för ett komplext tal +IMSIN = IMSIN ## Returnerar sinus för ett komplext tal +IMSQRT = IMROT ## Returnerar kvadratroten av ett komplext tal +IMSUB = IMDIFF ## Returnerar differensen mellan två komplexa tal +IMSUM = IMSUM ## Returnerar summan av komplexa tal +OCT2BIN = OKT.TILL.BIN ## Omvandlar ett oktalt tal till binärt +OCT2DEC = OKT.TILL.DEC ## Omvandlar ett oktalt tal till decimalt +OCT2HEX = OKT.TILL.HEX ## Omvandlar ett oktalt tal till hexadecimalt + + +## +## Financial functions Finansiella funktioner +## +ACCRINT = UPPLRÄNTA ## Returnerar den upplupna räntan för värdepapper med periodisk ränta +ACCRINTM = UPPLOBLRÄNTA ## Returnerar den upplupna räntan för ett värdepapper som ger avkastning på förfallodagen +AMORDEGRC = AMORDEGRC ## Returnerar avskrivningen för varje redovisningsperiod med hjälp av en avskrivningskoefficient +AMORLINC = AMORLINC ## Returnerar avskrivningen för varje redovisningsperiod +COUPDAYBS = KUPDAGBB ## Returnerar antal dagar från början av kupongperioden till likviddagen +COUPDAYS = KUPDAGARS ## Returnerar antalet dagar i kupongperioden som innehåller betalningsdatumet +COUPDAYSNC = KUPDAGNK ## Returnerar antalet dagar från betalningsdatumet till nästa kupongdatum +COUPNCD = KUPNKD ## Returnerar nästa kupongdatum efter likviddagen +COUPNUM = KUPANT ## Returnerar kuponger som förfaller till betalning mellan likviddagen och förfallodagen +COUPPCD = KUPFKD ## Returnerar föregående kupongdatum före likviddagen +CUMIPMT = KUMRÄNTA ## Returnerar den ackumulerade räntan som betalats mellan två perioder +CUMPRINC = KUMPRIS ## Returnerar det ackumulerade kapitalbeloppet som betalats på ett lån mellan två perioder +DB = DB ## Returnerar avskrivningen för en tillgång under en angiven tid enligt metoden för fast degressiv avskrivning +DDB = DEGAVSKR ## Returnerar en tillgångs värdeminskning under en viss period med hjälp av dubbel degressiv avskrivning eller någon annan metod som du anger +DISC = DISK ## Returnerar diskonteringsräntan för ett värdepapper +DOLLARDE = DECTAL ## Omvandlar ett pris uttryckt som ett bråk till ett decimaltal +DOLLARFR = BRÅK ## Omvandlar ett pris i kronor uttryckt som ett decimaltal till ett bråk +DURATION = LÖPTID ## Returnerar den årliga löptiden för en säkerhet med periodiska räntebetalningar +EFFECT = EFFRÄNTA ## Returnerar den årliga effektiva räntesatsen +FV = SLUTVÄRDE ## Returnerar det framtida värdet på en investering +FVSCHEDULE = FÖRRÄNTNING ## Returnerar det framtida värdet av ett begynnelsekapital beräknat på olika räntenivåer +INTRATE = ÅRSRÄNTA ## Returnerar räntesatsen för ett betalt värdepapper +IPMT = RBETALNING ## Returnerar räntedelen av en betalning för en given period +IRR = IR ## Returnerar internräntan för en serie betalningar +ISPMT = RALÅN ## Beräknar räntan som har betalats under en specifik betalningsperiod +MDURATION = MLÖPTID ## Returnerar den modifierade Macauley-löptiden för ett värdepapper med det antagna nominella värdet 100 kr +MIRR = MODIR ## Returnerar internräntan där positiva och negativa betalningar finansieras med olika räntor +NOMINAL = NOMRÄNTA ## Returnerar den årliga nominella räntesatsen +NPER = PERIODER ## Returnerar antalet perioder för en investering +NPV = NETNUVÄRDE ## Returnerar nuvärdet av en serie periodiska betalningar vid en given diskonteringsränta +ODDFPRICE = UDDAFPRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper med en udda första period +ODDFYIELD = UDDAFAVKASTNING ## Returnerar avkastningen för en säkerhet med en udda första period +ODDLPRICE = UDDASPRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper med en udda sista period +ODDLYIELD = UDDASAVKASTNING ## Returnerar avkastningen för en säkerhet med en udda sista period +PMT = BETALNING ## Returnerar den periodiska betalningen för en annuitet +PPMT = AMORT ## Returnerar amorteringsdelen av en annuitetsbetalning för en given period +PRICE = PRIS ## Returnerar priset per 100 kr nominellt värde för ett värdepapper som ger periodisk ränta +PRICEDISC = PRISDISK ## Returnerar priset per 100 kr nominellt värde för ett diskonterat värdepapper +PRICEMAT = PRISFÖRF ## Returnerar priset per 100 kr nominellt värde för ett värdepapper som ger ränta på förfallodagen +PV = PV ## Returnerar nuvärdet av en serie lika stora periodiska betalningar +RATE = RÄNTA ## Returnerar räntesatsen per period i en annuitet +RECEIVED = BELOPP ## Returnerar beloppet som utdelas på förfallodagen för ett betalat värdepapper +SLN = LINAVSKR ## Returnerar den linjära avskrivningen för en tillgång under en period +SYD = ÅRSAVSKR ## Returnerar den årliga avskrivningssumman för en tillgång under en angiven period +TBILLEQ = SSVXEKV ## Returnerar avkastningen motsvarande en obligation för en statsskuldväxel +TBILLPRICE = SSVXPRIS ## Returnerar priset per 100 kr nominellt värde för en statsskuldväxel +TBILLYIELD = SSVXRÄNTA ## Returnerar avkastningen för en statsskuldväxel +VDB = VDEGRAVSKR ## Returnerar avskrivningen för en tillgång under en angiven period (med degressiv avskrivning) +XIRR = XIRR ## Returnerar internräntan för en serie betalningar som inte nödvändigtvis är periodiska +XNPV = XNUVÄRDE ## Returnerar det nuvarande nettovärdet för en serie betalningar som inte nödvändigtvis är periodiska +YIELD = NOMAVK ## Returnerar avkastningen för ett värdepapper som ger periodisk ränta +YIELDDISC = NOMAVKDISK ## Returnerar den årliga avkastningen för diskonterade värdepapper, exempelvis en statsskuldväxel +YIELDMAT = NOMAVKFÖRF ## Returnerar den årliga avkastningen för ett värdepapper som ger ränta på förfallodagen + + +## +## Information functions Informationsfunktioner +## +CELL = CELL ## Returnerar information om formatering, plats och innehåll i en cell +ERROR.TYPE = FEL.TYP ## Returnerar ett tal som motsvarar ett felvärde +INFO = INFO ## Returnerar information om operativsystemet +ISBLANK = ÄRREF ## Returnerar SANT om värdet är tomt +ISERR = Ä ## Returnerar SANT om värdet är ett felvärde annat än #SAKNAS! +ISERROR = ÄRFEL ## Returnerar SANT om värdet är ett felvärde +ISEVEN = ÄRJÄMN ## Returnerar SANT om talet är jämnt +ISLOGICAL = ÄREJTEXT ## Returnerar SANT om värdet är ett logiskt värde +ISNA = ÄRLOGISK ## Returnerar SANT om värdet är felvärdet #SAKNAS! +ISNONTEXT = ÄRSAKNAD ## Returnerar SANT om värdet inte är text +ISNUMBER = ÄRTAL ## Returnerar SANT om värdet är ett tal +ISODD = ÄRUDDA ## Returnerar SANT om talet är udda +ISREF = ÄRTOM ## Returnerar SANT om värdet är en referens +ISTEXT = ÄRTEXT ## Returnerar SANT om värdet är text +N = N ## Returnerar ett värde omvandlat till ett tal +NA = SAKNAS ## Returnerar felvärdet #SAKNAS! +TYPE = VÄRDETYP ## Returnerar ett tal som anger värdets datatyp + + +## +## Logical functions Logiska funktioner +## +AND = OCH ## Returnerar SANT om alla argument är sanna +FALSE = FALSKT ## Returnerar det logiska värdet FALSKT +IF = OM ## Anger vilket logiskt test som ska utföras +IFERROR = OMFEL ## Returnerar ett värde som du anger om en formel utvärderar till ett fel; annars returneras resultatet av formeln +NOT = ICKE ## Inverterar logiken för argumenten +OR = ELLER ## Returnerar SANT om något argument är SANT +TRUE = SANT ## Returnerar det logiska värdet SANT + + +## +## Lookup and reference functions Sök- och referensfunktioner +## +ADDRESS = ADRESS ## Returnerar en referens som text till en enstaka cell i ett kalkylblad +AREAS = OMRÅDEN ## Returnerar antalet områden i en referens +CHOOSE = VÄLJ ## Väljer ett värde i en lista över värden +COLUMN = KOLUMN ## Returnerar kolumnnumret för en referens +COLUMNS = KOLUMNER ## Returnerar antalet kolumner i en referens +HLOOKUP = LETAKOLUMN ## Söker i den översta raden i en matris och returnerar värdet för angiven cell +HYPERLINK = HYPERLÄNK ## Skapar en genväg eller ett hopp till ett dokument i nätverket, i ett intranät eller på Internet +INDEX = INDEX ## Använder ett index för ett välja ett värde i en referens eller matris +INDIRECT = INDIREKT ## Returnerar en referens som anges av ett textvärde +LOOKUP = LETAUPP ## Letar upp värden i en vektor eller matris +MATCH = PASSA ## Letar upp värden i en referens eller matris +OFFSET = FÖRSKJUTNING ## Returnerar en referens förskjuten i förhållande till en given referens +ROW = RAD ## Returnerar radnumret för en referens +ROWS = RADER ## Returnerar antalet rader i en referens +RTD = RTD ## Hämtar realtidsdata från ett program som stöder COM-automation (Automation: Ett sätt att arbeta med ett programs objekt från ett annat program eller utvecklingsverktyg. Detta kallades tidigare för OLE Automation, och är en branschstandard och ingår i Component Object Model (COM).) +TRANSPOSE = TRANSPONERA ## Transponerar en matris +VLOOKUP = LETARAD ## Letar i den första kolumnen i en matris och flyttar över raden för att returnera värdet för en cell + + +## +## Math and trigonometry functions Matematiska och trigonometriska funktioner +## +ABS = ABS ## Returnerar absolutvärdet av ett tal +ACOS = ARCCOS ## Returnerar arcus cosinus för ett tal +ACOSH = ARCCOSH ## Returnerar inverterad hyperbolisk cosinus för ett tal +ASIN = ARCSIN ## Returnerar arcus cosinus för ett tal +ASINH = ARCSINH ## Returnerar hyperbolisk arcus sinus för ett tal +ATAN = ARCTAN ## Returnerar arcus tangens för ett tal +ATAN2 = ARCTAN2 ## Returnerar arcus tangens för en x- och en y- koordinat +ATANH = ARCTANH ## Returnerar hyperbolisk arcus tangens för ett tal +CEILING = RUNDA.UPP ## Avrundar ett tal till närmaste heltal eller närmaste signifikanta multipel +COMBIN = KOMBIN ## Returnerar antalet kombinationer för ett givet antal objekt +COS = COS ## Returnerar cosinus för ett tal +COSH = COSH ## Returnerar hyperboliskt cosinus för ett tal +DEGREES = GRADER ## Omvandlar radianer till grader +EVEN = JÄMN ## Avrundar ett tal uppåt till närmaste heltal +EXP = EXP ## Returnerar e upphöjt till ett givet tal +FACT = FAKULTET ## Returnerar fakulteten för ett tal +FACTDOUBLE = DUBBELFAKULTET ## Returnerar dubbelfakulteten för ett tal +FLOOR = RUNDA.NED ## Avrundar ett tal nedåt mot noll +GCD = SGD ## Returnerar den största gemensamma nämnaren +INT = HELTAL ## Avrundar ett tal nedåt till närmaste heltal +LCM = MGM ## Returnerar den minsta gemensamma multipeln +LN = LN ## Returnerar den naturliga logaritmen för ett tal +LOG = LOG ## Returnerar logaritmen för ett tal för en given bas +LOG10 = LOG10 ## Returnerar 10-logaritmen för ett tal +MDETERM = MDETERM ## Returnerar matrisen som är avgörandet av en matris +MINVERSE = MINVERT ## Returnerar matrisinversen av en matris +MMULT = MMULT ## Returnerar matrisprodukten av två matriser +MOD = REST ## Returnerar resten vid en division +MROUND = MAVRUNDA ## Returnerar ett tal avrundat till en given multipel +MULTINOMIAL = MULTINOMIAL ## Returnerar multinomialen för en uppsättning tal +ODD = UDDA ## Avrundar ett tal uppåt till närmaste udda heltal +PI = PI ## Returnerar värdet pi +POWER = UPPHÖJT.TILL ## Returnerar resultatet av ett tal upphöjt till en exponent +PRODUCT = PRODUKT ## Multiplicerar argumenten +QUOTIENT = KVOT ## Returnerar heltalsdelen av en division +RADIANS = RADIANER ## Omvandlar grader till radianer +RAND = SLUMP ## Returnerar ett slumptal mellan 0 och 1 +RANDBETWEEN = SLUMP.MELLAN ## Returnerar ett slumptal mellan de tal som du anger +ROMAN = ROMERSK ## Omvandlar vanliga (arabiska) siffror till romerska som text +ROUND = AVRUNDA ## Avrundar ett tal till ett angivet antal siffror +ROUNDDOWN = AVRUNDA.NEDÅT ## Avrundar ett tal nedåt mot noll +ROUNDUP = AVRUNDA.UPPÅT ## Avrundar ett tal uppåt, från noll +SERIESSUM = SERIESUMMA ## Returnerar summan av en potensserie baserat på formeln +SIGN = TECKEN ## Returnerar tecknet för ett tal +SIN = SIN ## Returnerar sinus för en given vinkel +SINH = SINH ## Returnerar hyperbolisk sinus för ett tal +SQRT = ROT ## Returnerar den positiva kvadratroten +SQRTPI = ROTPI ## Returnerar kvadratroten för (tal * pi) +SUBTOTAL = DELSUMMA ## Returnerar en delsumma i en lista eller databas +SUM = SUMMA ## Summerar argumenten +SUMIF = SUMMA.OM ## Summerar celler enligt ett angivet villkor +SUMIFS = SUMMA.OMF ## Lägger till cellerna i ett område som uppfyller flera kriterier +SUMPRODUCT = PRODUKTSUMMA ## Returnerar summan av produkterna i motsvarande matriskomponenter +SUMSQ = KVADRATSUMMA ## Returnerar summan av argumentens kvadrater +SUMX2MY2 = SUMMAX2MY2 ## Returnerar summan av differensen mellan kvadraterna för motsvarande värden i två matriser +SUMX2PY2 = SUMMAX2PY2 ## Returnerar summan av summan av kvadraterna av motsvarande värden i två matriser +SUMXMY2 = SUMMAXMY2 ## Returnerar summan av kvadraten av skillnaden mellan motsvarande värden i två matriser +TAN = TAN ## Returnerar tangens för ett tal +TANH = TANH ## Returnerar hyperbolisk tangens för ett tal +TRUNC = AVKORTA ## Avkortar ett tal till ett heltal + + +## +## Statistical functions Statistiska funktioner +## +AVEDEV = MEDELAVV ## Returnerar medelvärdet för datapunkters absoluta avvikelse från deras medelvärde +AVERAGE = MEDEL ## Returnerar medelvärdet av argumenten +AVERAGEA = AVERAGEA ## Returnerar medelvärdet av argumenten, inklusive tal, text och logiska värden +AVERAGEIF = MEDELOM ## Returnerar medelvärdet (aritmetiskt medelvärde) för alla celler i ett område som uppfyller ett givet kriterium +AVERAGEIFS = MEDELOMF ## Returnerar medelvärdet (det aritmetiska medelvärdet) för alla celler som uppfyller flera villkor. +BETADIST = BETAFÖRD ## Returnerar den kumulativa betafördelningsfunktionen +BETAINV = BETAINV ## Returnerar inversen till den kumulativa fördelningsfunktionen för en viss betafördelning +BINOMDIST = BINOMFÖRD ## Returnerar den individuella binomialfördelningen +CHIDIST = CHI2FÖRD ## Returnerar den ensidiga sannolikheten av c2-fördelningen +CHIINV = CHI2INV ## Returnerar inversen av chi2-fördelningen +CHITEST = CHI2TEST ## Returnerar oberoendetesten +CONFIDENCE = KONFIDENS ## Returnerar konfidensintervallet för en populations medelvärde +CORREL = KORREL ## Returnerar korrelationskoefficienten mellan två datamängder +COUNT = ANTAL ## Räknar hur många tal som finns bland argumenten +COUNTA = ANTALV ## Räknar hur många värden som finns bland argumenten +COUNTBLANK = ANTAL.TOMMA ## Räknar antalet tomma celler i ett område +COUNTIF = ANTAL.OM ## Räknar antalet celler i ett område som uppfyller angivna villkor. +COUNTIFS = ANTAL.OMF ## Räknar antalet celler i ett område som uppfyller flera villkor. +COVAR = KOVAR ## Returnerar kovariansen, d.v.s. medelvärdet av produkterna för parade avvikelser +CRITBINOM = KRITBINOM ## Returnerar det minsta värdet för vilket den kumulativa binomialfördelningen är mindre än eller lika med ett villkorsvärde +DEVSQ = KVADAVV ## Returnerar summan av kvadrater på avvikelser +EXPONDIST = EXPONFÖRD ## Returnerar exponentialfördelningen +FDIST = FFÖRD ## Returnerar F-sannolikhetsfördelningen +FINV = FINV ## Returnerar inversen till F-sannolikhetsfördelningen +FISHER = FISHER ## Returnerar Fisher-transformationen +FISHERINV = FISHERINV ## Returnerar inversen till Fisher-transformationen +FORECAST = PREDIKTION ## Returnerar ett värde längs en linjär trendlinje +FREQUENCY = FREKVENS ## Returnerar en frekvensfördelning som en lodrät matris +FTEST = FTEST ## Returnerar resultatet av en F-test +GAMMADIST = GAMMAFÖRD ## Returnerar gammafördelningen +GAMMAINV = GAMMAINV ## Returnerar inversen till den kumulativa gammafördelningen +GAMMALN = GAMMALN ## Returnerar den naturliga logaritmen för gammafunktionen, G(x) +GEOMEAN = GEOMEDEL ## Returnerar det geometriska medelvärdet +GROWTH = EXPTREND ## Returnerar värden längs en exponentiell trend +HARMEAN = HARMMEDEL ## Returnerar det harmoniska medelvärdet +HYPGEOMDIST = HYPGEOMFÖRD ## Returnerar den hypergeometriska fördelningen +INTERCEPT = SKÄRNINGSPUNKT ## Returnerar skärningspunkten för en linjär regressionslinje +KURT = TOPPIGHET ## Returnerar toppigheten av en mängd data +LARGE = STÖRSTA ## Returnerar det n:te största värdet i en mängd data +LINEST = REGR ## Returnerar parametrar till en linjär trendlinje +LOGEST = EXPREGR ## Returnerar parametrarna i en exponentiell trend +LOGINV = LOGINV ## Returnerar inversen till den lognormala fördelningen +LOGNORMDIST = LOGNORMFÖRD ## Returnerar den kumulativa lognormala fördelningen +MAX = MAX ## Returnerar det största värdet i en lista av argument +MAXA = MAXA ## Returnerar det största värdet i en lista av argument, inklusive tal, text och logiska värden +MEDIAN = MEDIAN ## Returnerar medianen för angivna tal +MIN = MIN ## Returnerar det minsta värdet i en lista med argument +MINA = MINA ## Returnerar det minsta värdet i en lista över argument, inklusive tal, text och logiska värden +MODE = TYPVÄRDE ## Returnerar det vanligaste värdet i en datamängd +NEGBINOMDIST = NEGBINOMFÖRD ## Returnerar den negativa binomialfördelningen +NORMDIST = NORMFÖRD ## Returnerar den kumulativa normalfördelningen +NORMINV = NORMINV ## Returnerar inversen till den kumulativa normalfördelningen +NORMSDIST = NORMSFÖRD ## Returnerar den kumulativa standardnormalfördelningen +NORMSINV = NORMSINV ## Returnerar inversen till den kumulativa standardnormalfördelningen +PEARSON = PEARSON ## Returnerar korrelationskoefficienten till Pearsons momentprodukt +PERCENTILE = PERCENTIL ## Returnerar den n:te percentilen av värden i ett område +PERCENTRANK = PROCENTRANG ## Returnerar procentrangen för ett värde i en datamängd +PERMUT = PERMUT ## Returnerar antal permutationer för ett givet antal objekt +POISSON = POISSON ## Returnerar Poisson-fördelningen +PROB = SANNOLIKHET ## Returnerar sannolikheten att värden i ett område ligger mellan två gränser +QUARTILE = KVARTIL ## Returnerar kvartilen av en mängd data +RANK = RANG ## Returnerar rangordningen för ett tal i en lista med tal +RSQ = RKV ## Returnerar kvadraten av Pearsons produktmomentkorrelationskoefficient +SKEW = SNEDHET ## Returnerar snedheten för en fördelning +SLOPE = LUTNING ## Returnerar lutningen på en linjär regressionslinje +SMALL = MINSTA ## Returnerar det n:te minsta värdet i en mängd data +STANDARDIZE = STANDARDISERA ## Returnerar ett normaliserat värde +STDEV = STDAV ## Uppskattar standardavvikelsen baserat på ett urval +STDEVA = STDEVA ## Uppskattar standardavvikelsen baserat på ett urval, inklusive tal, text och logiska värden +STDEVP = STDAVP ## Beräknar standardavvikelsen baserat på hela populationen +STDEVPA = STDEVPA ## Beräknar standardavvikelsen baserat på hela populationen, inklusive tal, text och logiska värden +STEYX = STDFELYX ## Returnerar standardfelet för ett förutspått y-värde för varje x-värde i regressionen +TDIST = TFÖRD ## Returnerar Students t-fördelning +TINV = TINV ## Returnerar inversen till Students t-fördelning +TREND = TREND ## Returnerar värden längs en linjär trend +TRIMMEAN = TRIMMEDEL ## Returnerar medelvärdet av mittpunkterna i en datamängd +TTEST = TTEST ## Returnerar sannolikheten beräknad ur Students t-test +VAR = VARIANS ## Uppskattar variansen baserat på ett urval +VARA = VARA ## Uppskattar variansen baserat på ett urval, inklusive tal, text och logiska värden +VARP = VARIANSP ## Beräknar variansen baserat på hela populationen +VARPA = VARPA ## Beräknar variansen baserat på hela populationen, inklusive tal, text och logiska värden +WEIBULL = WEIBULL ## Returnerar Weibull-fördelningen +ZTEST = ZTEST ## Returnerar det ensidiga sannolikhetsvärdet av ett z-test + + +## +## Text functions Textfunktioner +## +ASC = ASC ## Ändrar helbredds (dubbel byte) engelska bokstäver eller katakana inom en teckensträng till tecken med halvt breddsteg (enkel byte) +BAHTTEXT = BAHTTEXT ## Omvandlar ett tal till text med valutaformatet ß (baht) +CHAR = TECKENKOD ## Returnerar tecknet som anges av kod +CLEAN = STÄDA ## Tar bort alla icke utskrivbara tecken i en text +CODE = KOD ## Returnerar en numerisk kod för det första tecknet i en textsträng +CONCATENATE = SAMMANFOGA ## Sammanfogar flera textdelar till en textsträng +DOLLAR = VALUTA ## Omvandlar ett tal till text med valutaformat +EXACT = EXAKT ## Kontrollerar om två textvärden är identiska +FIND = HITTA ## Hittar en text i en annan (skiljer på gemener och versaler) +FINDB = HITTAB ## Hittar en text i en annan (skiljer på gemener och versaler) +FIXED = FASTTAL ## Formaterar ett tal som text med ett fast antal decimaler +JIS = JIS ## Ändrar halvbredds (enkel byte) engelska bokstäver eller katakana inom en teckensträng till tecken med helt breddsteg (dubbel byte) +LEFT = VÄNSTER ## Returnerar tecken längst till vänster i en sträng +LEFTB = VÄNSTERB ## Returnerar tecken längst till vänster i en sträng +LEN = LÄNGD ## Returnerar antalet tecken i en textsträng +LENB = LÄNGDB ## Returnerar antalet tecken i en textsträng +LOWER = GEMENER ## Omvandlar text till gemener +MID = EXTEXT ## Returnerar angivet antal tecken från en text med början vid den position som du anger +MIDB = EXTEXTB ## Returnerar angivet antal tecken från en text med början vid den position som du anger +PHONETIC = PHONETIC ## Returnerar de fonetiska (furigana) tecknen i en textsträng +PROPER = INITIAL ## Ändrar första bokstaven i varje ord i ett textvärde till versal +REPLACE = ERSÄTT ## Ersätter tecken i text +REPLACEB = ERSÄTTB ## Ersätter tecken i text +REPT = REP ## Upprepar en text ett bestämt antal gånger +RIGHT = HÖGER ## Returnerar tecken längst till höger i en sträng +RIGHTB = HÖGERB ## Returnerar tecken längst till höger i en sträng +SEARCH = SÖK ## Hittar ett textvärde i ett annat (skiljer inte på gemener och versaler) +SEARCHB = SÖKB ## Hittar ett textvärde i ett annat (skiljer inte på gemener och versaler) +SUBSTITUTE = BYT.UT ## Ersätter gammal text med ny text i en textsträng +T = T ## Omvandlar argumenten till text +TEXT = TEXT ## Formaterar ett tal och omvandlar det till text +TRIM = RENSA ## Tar bort blanksteg från text +UPPER = VERSALER ## Omvandlar text till versaler +VALUE = TEXTNUM ## Omvandlar ett textargument till ett tal diff --git a/PHPExcel/locale/tr/config b/PHPExcel/locale/tr/config new file mode 100644 index 0000000..de69cf5 --- /dev/null +++ b/PHPExcel/locale/tr/config @@ -0,0 +1,47 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Settings +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## + + +ArgumentSeparator = ; + + +## +## (For future use) +## +currencySymbol = YTL + + +## +## Excel Error Codes (For future use) +## +NULL = #BOŞ! +DIV0 = #SAYI/0! +VALUE = #DEĞER! +REF = #BAŞV! +NAME = #AD? +NUM = #SAYI! +NA = #YOK diff --git a/PHPExcel/locale/tr/functions b/PHPExcel/locale/tr/functions new file mode 100644 index 0000000..c327bca --- /dev/null +++ b/PHPExcel/locale/tr/functions @@ -0,0 +1,438 @@ +## +## PHPExcel +## +## Copyright (c) 2006 - 2013 PHPExcel +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## @category PHPExcel +## @package PHPExcel_Calculation +## @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel) +## @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL +## @version 1.8.0, 2014-03-02 +## +## Data in this file derived from http://www.piuha.fi/excel-function-name-translation/ +## +## + + +## +## Add-in and Automation functions Eklenti ve Otomasyon fonksiyonları +## +GETPIVOTDATA = ÖZETVERİAL ## Bir Özet Tablo raporunda saklanan verileri verir. + + +## +## Cube functions Küp işlevleri +## +CUBEKPIMEMBER = KÜPKPIÜYE ## Kilit performans göstergesi (KPI-Key Performance Indicator) adını, özelliğini ve ölçüsünü verir ve hücredeki ad ve özelliği gösterir. KPI, bir kurumun performansını izlemek için kullanılan aylık brüt kâr ya da üç aylık çalışan giriş çıkışları gibi ölçülebilen bir birimdir. +CUBEMEMBER = KÜPÜYE ## Bir küp hiyerarşisinde bir üyeyi veya kaydı verir. Üye veya kaydın küpte varolduğunu doğrulamak için kullanılır. +CUBEMEMBERPROPERTY = KÜPÜYEÖZELLİĞİ ## Bir küpte bir üyenin özelliğinin değerini verir. Küp içinde üye adının varlığını doğrulamak ve bu üyenin belli özelliklerini getirmek için kullanılır. +CUBERANKEDMEMBER = KÜPÜYESIRASI ## Bir küme içindeki üyenin derecesini veya kaçıncı olduğunu verir. En iyi satış elemanı, veya en iyi on öğrenci gibi bir kümedeki bir veya daha fazla öğeyi getirmek için kullanılır. +CUBESET = KÜPKÜME ## Kümeyi oluşturan ve ardından bu kümeyi Microsoft Office Excel'e getiren sunucudaki küpe küme ifadelerini göndererek hesaplanan üye veya kayıt kümesini tanımlar. +CUBESETCOUNT = KÜPKÜMESAY ## Bir kümedeki öğelerin sayısını getirir. +CUBEVALUE = KÜPDEĞER ## Bir küpten toplam değeri getirir. + + +## +## Database functions Veritabanı işlevleri +## +DAVERAGE = VSEÇORT ## Seçili veritabanı girdilerinin ortalamasını verir. +DCOUNT = VSEÇSAY ## Veritabanında sayı içeren hücre sayısını hesaplar. +DCOUNTA = VSEÇSAYDOLU ## Veritabanındaki boş olmayan hücreleri sayar. +DGET = VAL ## Veritabanından, belirtilen ölçütlerle eşleşen tek bir rapor çıkarır. +DMAX = VSEÇMAK ## Seçili veritabanı girişlerinin en yüksek değerini verir. +DMIN = VSEÇMİN ## Seçili veritabanı girişlerinin en düşük değerini verir. +DPRODUCT = VSEÇÇARP ## Kayıtların belli bir alanında bulunan, bir veritabanındaki ölçütlerle eşleşen değerleri çarpar. +DSTDEV = VSEÇSTDSAPMA ## Seçili veritabanı girişlerinden oluşan bir örneğe dayanarak, standart sapmayı tahmin eder. +DSTDEVP = VSEÇSTDSAPMAS ## Standart sapmayı, seçili veritabanı girişlerinin tüm popülasyonunu esas alarak hesaplar. +DSUM = VSEÇTOPLA ## Kayıtların alan sütununda bulunan, ölçütle eşleşen sayıları toplar. +DVAR = VSEÇVAR ## Seçili veritabanı girişlerinden oluşan bir örneği esas alarak farkı tahmin eder. +DVARP = VSEÇVARS ## Seçili veritabanı girişlerinin tüm popülasyonunu esas alarak farkı hesaplar. + + +## +## Date and time functions Tarih ve saat işlevleri +## +DATE = TARİH ## Belirli bir tarihin seri numarasını verir. +DATEVALUE = TARİHSAYISI ## Metin biçimindeki bir tarihi seri numarasına dönüştürür. +DAY = GÜN ## Seri numarasını, ayın bir gününe dönüştürür. +DAYS360 = GÜN360 ## İki tarih arasındaki gün sayısını, 360 günlük yılı esas alarak hesaplar. +EDATE = SERİTARİH ## Başlangıç tarihinden itibaren, belirtilen ay sayısından önce veya sonraki tarihin seri numarasını verir. +EOMONTH = SERİAY ## Belirtilen sayıda ay önce veya sonraki ayın son gününün seri numarasını verir. +HOUR = SAAT ## Bir seri numarasını saate dönüştürür. +MINUTE = DAKİKA ## Bir seri numarasını dakikaya dönüştürür. +MONTH = AY ## Bir seri numarasını aya dönüştürür. +NETWORKDAYS = TAMİŞGÜNÜ ## İki tarih arasındaki tam çalışma günlerinin sayısını verir. +NOW = ŞİMDİ ## Geçerli tarihin ve saatin seri numarasını verir. +SECOND = SANİYE ## Bir seri numarasını saniyeye dönüştürür. +TIME = ZAMAN ## Belirli bir zamanın seri numarasını verir. +TIMEVALUE = ZAMANSAYISI ## Metin biçimindeki zamanı seri numarasına dönüştürür. +TODAY = BUGÜN ## Bugünün tarihini seri numarasına dönüştürür. +WEEKDAY = HAFTANINGÜNÜ ## Bir seri numarasını, haftanın gününe dönüştürür. +WEEKNUM = HAFTASAY ## Dizisel değerini, haftanın yıl içinde bulunduğu konumu sayısal olarak gösteren sayıya dönüştürür. +WORKDAY = İŞGÜNÜ ## Belirtilen sayıda çalışma günü öncesinin ya da sonrasının tarihinin seri numarasını verir. +YEAR = YIL ## Bir seri numarasını yıla dönüştürür. +YEARFRAC = YILORAN ## Başlangıç_tarihi ve bitiş_tarihi arasındaki tam günleri gösteren yıl kesrini verir. + + +## +## Engineering functions Mühendislik işlevleri +## +BESSELI = BESSELI ## Değiştirilmiş Bessel fonksiyonu In(x)'i verir. +BESSELJ = BESSELJ ## Bessel fonksiyonu Jn(x)'i verir. +BESSELK = BESSELK ## Değiştirilmiş Bessel fonksiyonu Kn(x)'i verir. +BESSELY = BESSELY ## Bessel fonksiyonu Yn(x)'i verir. +BIN2DEC = BIN2DEC ## İkili bir sayıyı, ondalık sayıya dönüştürür. +BIN2HEX = BIN2HEX ## İkili bir sayıyı, onaltılıya dönüştürür. +BIN2OCT = BIN2OCT ## İkili bir sayıyı, sekizliye dönüştürür. +COMPLEX = KARMAŞIK ## Gerçek ve sanal katsayıları, karmaşık sayıya dönüştürür. +CONVERT = ÇEVİR ## Bir sayıyı, bir ölçüm sisteminden bir başka ölçüm sistemine dönüştürür. +DEC2BIN = DEC2BIN ## Ondalık bir sayıyı, ikiliye dönüştürür. +DEC2HEX = DEC2HEX ## Ondalık bir sayıyı, onaltılıya dönüştürür. +DEC2OCT = DEC2OCT ## Ondalık bir sayıyı sekizliğe dönüştürür. +DELTA = DELTA ## İki değerin eşit olup olmadığını sınar. +ERF = HATAİŞLEV ## Hata işlevini verir. +ERFC = TÜMHATAİŞLEV ## Tümleyici hata işlevini verir. +GESTEP = BESINIR ## Bir sayının eşik değerinden büyük olup olmadığını sınar. +HEX2BIN = HEX2BIN ## Onaltılı bir sayıyı ikiliye dönüştürür. +HEX2DEC = HEX2DEC ## Onaltılı bir sayıyı ondalığa dönüştürür. +HEX2OCT = HEX2OCT ## Onaltılı bir sayıyı sekizliğe dönüştürür. +IMABS = SANMUTLAK ## Karmaşık bir sayının mutlak değerini (modül) verir. +IMAGINARY = SANAL ## Karmaşık bir sayının sanal katsayısını verir. +IMARGUMENT = SANBAĞ_DEĞİŞKEN ## Radyanlarla belirtilen bir açı olan teta bağımsız değişkenini verir. +IMCONJUGATE = SANEŞLENEK ## Karmaşık bir sayının karmaşık eşleniğini verir. +IMCOS = SANCOS ## Karmaşık bir sayının kosinüsünü verir. +IMDIV = SANBÖL ## İki karmaşık sayının bölümünü verir. +IMEXP = SANÜS ## Karmaşık bir sayının üssünü verir. +IMLN = SANLN ## Karmaşık bir sayının doğal logaritmasını verir. +IMLOG10 = SANLOG10 ## Karmaşık bir sayının, 10 tabanında logaritmasını verir. +IMLOG2 = SANLOG2 ## Karmaşık bir sayının 2 tabanında logaritmasını verir. +IMPOWER = SANÜSSÜ ## Karmaşık bir sayıyı, bir tamsayı üssüne yükseltilmiş olarak verir. +IMPRODUCT = SANÇARP ## Karmaşık sayıların çarpımını verir. +IMREAL = SANGERÇEK ## Karmaşık bir sayının, gerçek katsayısını verir. +IMSIN = SANSIN ## Karmaşık bir sayının sinüsünü verir. +IMSQRT = SANKAREKÖK ## Karmaşık bir sayının karekökünü verir. +IMSUB = SANÇIKAR ## İki karmaşık sayının farkını verir. +IMSUM = SANTOPLA ## Karmaşık sayıların toplamını verir. +OCT2BIN = OCT2BIN ## Sekizli bir sayıyı ikiliye dönüştürür. +OCT2DEC = OCT2DEC ## Sekizli bir sayıyı ondalığa dönüştürür. +OCT2HEX = OCT2HEX ## Sekizli bir sayıyı onaltılıya dönüştürür. + + +## +## Financial functions Finansal fonksiyonlar +## +ACCRINT = GERÇEKFAİZ ## Dönemsel faiz ödeyen hisse senedine ilişkin tahakkuk eden faizi getirir. +ACCRINTM = GERÇEKFAİZV ## Vadesinde ödeme yapan bir tahvilin tahakkuk etmiş faizini verir. +AMORDEGRC = AMORDEGRC ## Yıpranma katsayısı kullanarak her hesap döneminin değer kaybını verir. +AMORLINC = AMORLINC ## Her hesap dönemi içindeki yıpranmayı verir. +COUPDAYBS = KUPONGÜNBD ## Kupon süresinin başlangıcından alış tarihine kadar olan süredeki gün sayısını verir. +COUPDAYS = KUPONGÜN ## Kupon süresindeki, gün sayısını, alış tarihini de içermek üzere, verir. +COUPDAYSNC = KUPONGÜNDSK ## Alış tarihinden bir sonraki kupon tarihine kadar olan gün sayısını verir. +COUPNCD = KUPONGÜNSKT ## Alış tarihinden bir sonraki kupon tarihini verir. +COUPNUM = KUPONSAYI ## Alış tarihiyle vade tarihi arasında ödenecek kuponların sayısını verir. +COUPPCD = KUPONGÜNÖKT ## Alış tarihinden bir önceki kupon tarihini verir. +CUMIPMT = AİÇVERİMORANI ## İki dönem arasında ödenen kümülatif faizi verir. +CUMPRINC = ANA_PARA_ÖDEMESİ ## İki dönem arasında bir borç üzerine ödenen birikimli temeli verir. +DB = AZALANBAKİYE ## Bir malın belirtilen bir süre içindeki yıpranmasını, sabit azalan bakiye yöntemini kullanarak verir. +DDB = ÇİFTAZALANBAKİYE ## Bir malın belirtilen bir süre içindeki yıpranmasını, çift azalan bakiye yöntemi ya da sizin belirttiğiniz başka bir yöntemi kullanarak verir. +DISC = İNDİRİM ## Bir tahvilin indirim oranını verir. +DOLLARDE = LİRAON ## Kesir olarak tanımlanmış lira fiyatını, ondalık sayı olarak tanımlanmış lira fiyatına dönüştürür. +DOLLARFR = LİRAKES ## Ondalık sayı olarak tanımlanmış lira fiyatını, kesir olarak tanımlanmış lira fiyatına dönüştürür. +DURATION = SÜRE ## Belli aralıklarla faiz ödemesi yapan bir tahvilin yıllık süresini verir. +EFFECT = ETKİN ## Efektif yıllık faiz oranını verir. +FV = ANBD ## Bir yatırımın gelecekteki değerini verir. +FVSCHEDULE = GDPROGRAM ## Bir seri birleşik faiz oranı uyguladıktan sonra, bir başlangıçtaki anaparanın gelecekteki değerini verir. +INTRATE = FAİZORANI ## Tam olarak yatırım yapılmış bir tahvilin faiz oranını verir. +IPMT = FAİZTUTARI ## Bir yatırımın verilen bir süre için faiz ödemesini verir. +IRR = İÇ_VERİM_ORANI ## Bir para akışı serisi için, iç verim oranını verir. +ISPMT = ISPMT ## Yatırımın belirli bir dönemi boyunca ödenen faizi hesaplar. +MDURATION = MSÜRE ## Varsayılan par değeri 10.000.000 lira olan bir tahvil için Macauley değiştirilmiş süreyi verir. +MIRR = D_İÇ_VERİM_ORANI ## Pozitif ve negatif para akışlarının farklı oranlarda finanse edildiği durumlarda, iç verim oranını verir. +NOMINAL = NOMİNAL ## Yıllık nominal faiz oranını verir. +NPER = DÖNEM_SAYISI ## Bir yatırımın dönem sayısını verir. +NPV = NBD ## Bir yatırımın bugünkü net değerini, bir dönemsel para akışları serisine ve bir indirim oranına bağlı olarak verir. +ODDFPRICE = TEKYDEĞER ## Tek bir ilk dönemi olan bir tahvilin değerini, her 100.000.000 lirada bir verir. +ODDFYIELD = TEKYÖDEME ## Tek bir ilk dönemi olan bir tahvilin ödemesini verir. +ODDLPRICE = TEKSDEĞER ## Tek bir son dönemi olan bir tahvilin fiyatını her 10.000.000 lirada bir verir. +ODDLYIELD = TEKSÖDEME ## Tek bir son dönemi olan bir tahvilin ödemesini verir. +PMT = DEVRESEL_ÖDEME ## Bir yıllık dönemsel ödemeyi verir. +PPMT = ANA_PARA_ÖDEMESİ ## Verilen bir süre için, bir yatırımın anaparasına dayanan ödemeyi verir. +PRICE = DEĞER ## Dönemsel faiz ödeyen bir tahvilin fiyatını 10.000.00 liralık değer başına verir. +PRICEDISC = DEĞERİND ## İndirimli bir tahvilin fiyatını 10.000.000 liralık nominal değer başına verir. +PRICEMAT = DEĞERVADE ## Faizini vade sonunda ödeyen bir tahvilin fiyatını 10.000.000 nominal değer başına verir. +PV = BD ## Bir yatırımın bugünkü değerini verir. +RATE = FAİZ_ORANI ## Bir yıllık dönem başına düşen faiz oranını verir. +RECEIVED = GETİRİ ## Tam olarak yatırılmış bir tahvilin vadesinin bitiminde alınan miktarı verir. +SLN = DA ## Bir malın bir dönem içindeki doğrusal yıpranmasını verir. +SYD = YAT ## Bir malın belirli bir dönem için olan amortismanını verir. +TBILLEQ = HTAHEŞ ## Bir Hazine bonosunun bono eşdeğeri ödemesini verir. +TBILLPRICE = HTAHDEĞER ## Bir Hazine bonosunun değerini, 10.000.000 liralık nominal değer başına verir. +TBILLYIELD = HTAHÖDEME ## Bir Hazine bonosunun ödemesini verir. +VDB = DAB ## Bir malın amortismanını, belirlenmiş ya da kısmi bir dönem için, bir azalan bakiye yöntemi kullanarak verir. +XIRR = AİÇVERİMORANI ## Dönemsel olması gerekmeyen bir para akışları programı için, iç verim oranını verir. +XNPV = ANBD ## Dönemsel olması gerekmeyen bir para akışları programı için, bugünkü net değeri verir. +YIELD = ÖDEME ## Belirli aralıklarla faiz ödeyen bir tahvilin ödemesini verir. +YIELDDISC = ÖDEMEİND ## İndirimli bir tahvilin yıllık ödemesini verir; örneğin, bir Hazine bonosunun. +YIELDMAT = ÖDEMEVADE ## Vadesinin bitiminde faiz ödeyen bir tahvilin yıllık ödemesini verir. + + +## +## Information functions Bilgi fonksiyonları +## +CELL = HÜCRE ## Bir hücrenin biçimlendirmesi, konumu ya da içeriği hakkında bilgi verir. +ERROR.TYPE = HATA.TİPİ ## Bir hata türüne ilişkin sayıları verir. +INFO = BİLGİ ## Geçerli işletim ortamı hakkında bilgi verir. +ISBLANK = EBOŞSA ## Değer boşsa, DOĞRU verir. +ISERR = EHATA ## Değer, #YOK dışındaki bir hata değeriyse, DOĞRU verir. +ISERROR = EHATALIYSA ## Değer, herhangi bir hata değeriyse, DOĞRU verir. +ISEVEN = ÇİFTTİR ## Sayı çiftse, DOĞRU verir. +ISLOGICAL = EMANTIKSALSA ## Değer, mantıksal bir değerse, DOĞRU verir. +ISNA = EYOKSA ## Değer, #YOK hata değeriyse, DOĞRU verir. +ISNONTEXT = EMETİNDEĞİLSE ## Değer, metin değilse, DOĞRU verir. +ISNUMBER = ESAYIYSA ## Değer, bir sayıysa, DOĞRU verir. +ISODD = TEKTİR ## Sayı tekse, DOĞRU verir. +ISREF = EREFSE ## Değer bir başvuruysa, DOĞRU verir. +ISTEXT = EMETİNSE ## Değer bir metinse DOĞRU verir. +N = N ## Sayıya dönüştürülmüş bir değer verir. +NA = YOKSAY ## #YOK hata değerini verir. +TYPE = TİP ## Bir değerin veri türünü belirten bir sayı verir. + + +## +## Logical functions Mantıksal fonksiyonlar +## +AND = VE ## Bütün bağımsız değişkenleri DOĞRU ise, DOĞRU verir. +FALSE = YANLIŞ ## YANLIŞ mantıksal değerini verir. +IF = EĞER ## Gerçekleştirilecek bir mantıksal sınama belirtir. +IFERROR = EĞERHATA ## Formül hatalıysa belirttiğiniz değeri verir; bunun dışındaki durumlarda formülün sonucunu verir. +NOT = DEĞİL ## Bağımsız değişkeninin mantığını tersine çevirir. +OR = YADA ## Bağımsız değişkenlerden herhangi birisi DOĞRU ise, DOĞRU verir. +TRUE = DOĞRU ## DOĞRU mantıksal değerini verir. + + +## +## Lookup and reference functions Arama ve Başvuru fonksiyonları +## +ADDRESS = ADRES ## Bir başvuruyu, çalışma sayfasındaki tek bir hücreye metin olarak verir. +AREAS = ALANSAY ## Renvoie le nombre de zones dans une référence. +CHOOSE = ELEMAN ## Değerler listesinden bir değer seçer. +COLUMN = SÜTUN ## Bir başvurunun sütun sayısını verir. +COLUMNS = SÜTUNSAY ## Bir başvurudaki sütunların sayısını verir. +HLOOKUP = YATAYARA ## Bir dizinin en üst satırına bakar ve belirtilen hücrenin değerini verir. +HYPERLINK = KÖPRÜ ## Bir ağ sunucusunda, bir intranette ya da Internet'te depolanan bir belgeyi açan bir kısayol ya da atlama oluşturur. +INDEX = İNDİS ## Başvurudan veya diziden bir değer seçmek için, bir dizin kullanır. +INDIRECT = DOLAYLI ## Metin değeriyle belirtilen bir başvuru verir. +LOOKUP = ARA ## Bir vektördeki veya dizideki değerleri arar. +MATCH = KAÇINCI ## Bir başvurudaki veya dizideki değerleri arar. +OFFSET = KAYDIR ## Verilen bir başvurudan, bir başvuru kaydırmayı verir. +ROW = SATIR ## Bir başvurunun satır sayısını verir. +ROWS = SATIRSAY ## Bir başvurudaki satırların sayısını verir. +RTD = RTD ## COM otomasyonunu destekleyen programdan gerçek zaman verileri alır. +TRANSPOSE = DEVRİK_DÖNÜŞÜM ## Bir dizinin devrik dönüşümünü verir. +VLOOKUP = DÜŞEYARA ## Bir dizinin ilk sütununa bakar ve bir hücrenin değerini vermek için satır boyunca hareket eder. + + +## +## Math and trigonometry functions Matematik ve trigonometri fonksiyonları +## +ABS = MUTLAK ## Bir sayının mutlak değerini verir. +ACOS = ACOS ## Bir sayının ark kosinüsünü verir. +ACOSH = ACOSH ## Bir sayının ters hiperbolik kosinüsünü verir. +ASIN = ASİN ## Bir sayının ark sinüsünü verir. +ASINH = ASİNH ## Bir sayının ters hiperbolik sinüsünü verir. +ATAN = ATAN ## Bir sayının ark tanjantını verir. +ATAN2 = ATAN2 ## Ark tanjantı, x- ve y- koordinatlarından verir. +ATANH = ATANH ## Bir sayının ters hiperbolik tanjantını verir. +CEILING = TAVANAYUVARLA ## Bir sayıyı, en yakın tamsayıya ya da en yakın katına yuvarlar. +COMBIN = KOMBİNASYON ## Verilen sayıda öğenin kombinasyon sayısını verir. +COS = COS ## Bir sayının kosinüsünü verir. +COSH = COSH ## Bir sayının hiperbolik kosinüsünü verir. +DEGREES = DERECE ## Radyanları dereceye dönüştürür. +EVEN = ÇİFT ## Bir sayıyı, en yakın daha büyük çift tamsayıya yuvarlar. +EXP = ÜS ## e'yi, verilen bir sayının üssüne yükseltilmiş olarak verir. +FACT = ÇARPINIM ## Bir sayının faktörünü verir. +FACTDOUBLE = ÇİFTFAKTÖR ## Bir sayının çift çarpınımını verir. +FLOOR = TABANAYUVARLA ## Bir sayıyı, daha küçük sayıya, sıfıra yakınsayarak yuvarlar. +GCD = OBEB ## En büyük ortak böleni verir. +INT = TAMSAYI ## Bir sayıyı aşağıya doğru en yakın tamsayıya yuvarlar. +LCM = OKEK ## En küçük ortak katı verir. +LN = LN ## Bir sayının doğal logaritmasını verir. +LOG = LOG ## Bir sayının, belirtilen bir tabandaki logaritmasını verir. +LOG10 = LOG10 ## Bir sayının 10 tabanında logaritmasını verir. +MDETERM = DETERMİNANT ## Bir dizinin dizey determinantını verir. +MINVERSE = DİZEY_TERS ## Bir dizinin dizey tersini verir. +MMULT = DÇARP ## İki dizinin dizey çarpımını verir. +MOD = MODÜLO ## Bölmeden kalanı verir. +MROUND = KYUVARLA ## İstenen kata yuvarlanmış bir sayı verir. +MULTINOMIAL = ÇOKTERİMLİ ## Bir sayılar kümesinin çok terimlisini verir. +ODD = TEK ## Bir sayıyı en yakın daha büyük tek sayıya yuvarlar. +PI = Pİ ## Pi değerini verir. +POWER = KUVVET ## Bir üsse yükseltilmiş sayının sonucunu verir. +PRODUCT = ÇARPIM ## Bağımsız değişkenlerini çarpar. +QUOTIENT = BÖLÜM ## Bir bölme işleminin tamsayı kısmını verir. +RADIANS = RADYAN ## Dereceleri radyanlara dönüştürür. +RAND = S_SAYI_ÜRET ## 0 ile 1 arasında rastgele bir sayı verir. +RANDBETWEEN = RASTGELEARALIK ## Belirttiğiniz sayılar arasında rastgele bir sayı verir. +ROMAN = ROMEN ## Bir normal rakamı, metin olarak, romen rakamına çevirir. +ROUND = YUVARLA ## Bir sayıyı, belirtilen basamak sayısına yuvarlar. +ROUNDDOWN = AŞAĞIYUVARLA ## Bir sayıyı, daha küçük sayıya, sıfıra yakınsayarak yuvarlar. +ROUNDUP = YUKARIYUVARLA ## Bir sayıyı daha büyük sayıya, sıfırdan ıraksayarak yuvarlar. +SERIESSUM = SERİTOPLA ## Bir üs serisinin toplamını, formüle bağlı olarak verir. +SIGN = İŞARET ## Bir sayının işaretini verir. +SIN = SİN ## Verilen bir açının sinüsünü verir. +SINH = SİNH ## Bir sayının hiperbolik sinüsünü verir. +SQRT = KAREKÖK ## Pozitif bir karekök verir. +SQRTPI = KAREKÖKPİ ## (* Pi sayısının) kare kökünü verir. +SUBTOTAL = ALTTOPLAM ## Bir listedeki ya da veritabanındaki bir alt toplamı verir. +SUM = TOPLA ## Bağımsız değişkenlerini toplar. +SUMIF = ETOPLA ## Verilen ölçütle belirlenen hücreleri toplar. +SUMIFS = SUMIFS ## Bir aralıktaki, birden fazla ölçüte uyan hücreleri ekler. +SUMPRODUCT = TOPLA.ÇARPIM ## İlişkili dizi bileşenlerinin çarpımlarının toplamını verir. +SUMSQ = TOPKARE ## Bağımsız değişkenlerin karelerinin toplamını verir. +SUMX2MY2 = TOPX2EY2 ## İki dizideki ilişkili değerlerin farkının toplamını verir. +SUMX2PY2 = TOPX2AY2 ## İki dizideki ilişkili değerlerin karelerinin toplamının toplamını verir. +SUMXMY2 = TOPXEY2 ## İki dizideki ilişkili değerlerin farklarının karelerinin toplamını verir. +TAN = TAN ## Bir sayının tanjantını verir. +TANH = TANH ## Bir sayının hiperbolik tanjantını verir. +TRUNC = NSAT ## Bir sayının, tamsayı durumuna gelecek şekilde, fazlalıklarını atar. + + +## +## Statistical functions İstatistiksel fonksiyonlar +## +AVEDEV = ORTSAP ## Veri noktalarının ortalamalarından mutlak sapmalarının ortalamasını verir. +AVERAGE = ORTALAMA ## Bağımsız değişkenlerinin ortalamasını verir. +AVERAGEA = ORTALAMAA ## Bağımsız değişkenlerinin, sayılar, metin ve mantıksal değerleri içermek üzere ortalamasını verir. +AVERAGEIF = EĞERORTALAMA ## Verili ölçütü karşılayan bir aralıktaki bütün hücrelerin ortalamasını (aritmetik ortalama) hesaplar. +AVERAGEIFS = EĞERLERORTALAMA ## Birden çok ölçüte uyan tüm hücrelerin ortalamasını (aritmetik ortalama) hesaplar. +BETADIST = BETADAĞ ## Beta birikimli dağılım fonksiyonunu verir. +BETAINV = BETATERS ## Belirli bir beta dağılımı için birikimli dağılım fonksiyonunun tersini verir. +BINOMDIST = BİNOMDAĞ ## Tek terimli binom dağılımı olasılığını verir. +CHIDIST = KİKAREDAĞ ## Kikare dağılımın tek kuyruklu olasılığını verir. +CHIINV = KİKARETERS ## Kikare dağılımın kuyruklu olasılığının tersini verir. +CHITEST = KİKARETEST ## Bağımsızlık sınamalarını verir. +CONFIDENCE = GÜVENİRLİK ## Bir popülasyon ortalaması için güvenirlik aralığını verir. +CORREL = KORELASYON ## İki veri kümesi arasındaki bağlantı katsayısını verir. +COUNT = BAĞ_DEĞ_SAY ## Bağımsız değişkenler listesinde kaç tane sayı bulunduğunu sayar. +COUNTA = BAĞ_DEĞ_DOLU_SAY ## Bağımsız değişkenler listesinde kaç tane değer bulunduğunu sayar. +COUNTBLANK = BOŞLUKSAY ## Aralıktaki boş hücre sayısını hesaplar. +COUNTIF = EĞERSAY ## Verilen ölçütlere uyan bir aralık içindeki hücreleri sayar. +COUNTIFS = ÇOKEĞERSAY ## Birden çok ölçüte uyan bir aralık içindeki hücreleri sayar. +COVAR = KOVARYANS ## Eşleştirilmiş sapmaların ortalaması olan kovaryansı verir. +CRITBINOM = KRİTİKBİNOM ## Birikimli binom dağılımının bir ölçüt değerinden küçük veya ölçüt değerine eşit olduğu en küçük değeri verir. +DEVSQ = SAPKARE ## Sapmaların karelerinin toplamını verir. +EXPONDIST = ÜSTELDAĞ ## Üstel dağılımı verir. +FDIST = FDAĞ ## F olasılık dağılımını verir. +FINV = FTERS ## F olasılık dağılımının tersini verir. +FISHER = FISHER ## Fisher dönüşümünü verir. +FISHERINV = FISHERTERS ## Fisher dönüşümünün tersini verir. +FORECAST = TAHMİN ## Bir doğrusal eğilim boyunca bir değer verir. +FREQUENCY = SIKLIK ## Bir sıklık dağılımını, dikey bir dizi olarak verir. +FTEST = FTEST ## Bir F-test'in sonucunu verir. +GAMMADIST = GAMADAĞ ## Gama dağılımını verir. +GAMMAINV = GAMATERS ## Gama kümülatif dağılımının tersini verir. +GAMMALN = GAMALN ## Gama fonksiyonunun (?(x)) doğal logaritmasını verir. +GEOMEAN = GEOORT ## Geometrik ortayı verir. +GROWTH = BÜYÜME ## Üstel bir eğilim boyunca değerler verir. +HARMEAN = HARORT ## Harmonik ortayı verir. +HYPGEOMDIST = HİPERGEOMDAĞ ## Hipergeometrik dağılımı verir. +INTERCEPT = KESMENOKTASI ## Doğrusal çakıştırma çizgisinin kesişme noktasını verir. +KURT = BASIKLIK ## Bir veri kümesinin basıklığını verir. +LARGE = BÜYÜK ## Bir veri kümesinde k. en büyük değeri verir. +LINEST = DOT ## Doğrusal bir eğilimin parametrelerini verir. +LOGEST = LOT ## Üstel bir eğilimin parametrelerini verir. +LOGINV = LOGTERS ## Bir lognormal dağılımının tersini verir. +LOGNORMDIST = LOGNORMDAĞ ## Birikimli lognormal dağılımını verir. +MAX = MAK ## Bir bağımsız değişkenler listesindeki en büyük değeri verir. +MAXA = MAKA ## Bir bağımsız değişkenler listesindeki, sayılar, metin ve mantıksal değerleri içermek üzere, en büyük değeri verir. +MEDIAN = ORTANCA ## Belirtilen sayıların orta değerini verir. +MIN = MİN ## Bir bağımsız değişkenler listesindeki en küçük değeri verir. +MINA = MİNA ## Bir bağımsız değişkenler listesindeki, sayılar, metin ve mantıksal değerleri de içermek üzere, en küçük değeri verir. +MODE = ENÇOK_OLAN ## Bir veri kümesindeki en sık rastlanan değeri verir. +NEGBINOMDIST = NEGBİNOMDAĞ ## Negatif binom dağılımını verir. +NORMDIST = NORMDAĞ ## Normal birikimli dağılımı verir. +NORMINV = NORMTERS ## Normal kümülatif dağılımın tersini verir. +NORMSDIST = NORMSDAĞ ## Standart normal birikimli dağılımı verir. +NORMSINV = NORMSTERS ## Standart normal birikimli dağılımın tersini verir. +PEARSON = PEARSON ## Pearson çarpım moment korelasyon katsayısını verir. +PERCENTILE = YÜZDEBİRLİK ## Bir aralık içerisinde bulunan değerlerin k. frekans toplamını verir. +PERCENTRANK = YÜZDERANK ## Bir veri kümesindeki bir değerin yüzde mertebesini verir. +PERMUT = PERMÜTASYON ## Verilen sayıda nesne için permütasyon sayısını verir. +POISSON = POISSON ## Poisson dağılımını verir. +PROB = OLASILIK ## Bir aralıktaki değerlerin iki sınır arasında olması olasılığını verir. +QUARTILE = DÖRTTEBİRLİK ## Bir veri kümesinin dörtte birliğini verir. +RANK = RANK ## Bir sayılar listesinde bir sayının mertebesini verir. +RSQ = RKARE ## Pearson çarpım moment korelasyon katsayısının karesini verir. +SKEW = ÇARPIKLIK ## Bir dağılımın çarpıklığını verir. +SLOPE = EĞİM ## Doğrusal çakışma çizgisinin eğimini verir. +SMALL = KÜÇÜK ## Bir veri kümesinde k. en küçük değeri verir. +STANDARDIZE = STANDARTLAŞTIRMA ## Normalleştirilmiş bir değer verir. +STDEV = STDSAPMA ## Bir örneğe dayanarak standart sapmayı tahmin eder. +STDEVA = STDSAPMAA ## Standart sapmayı, sayılar, metin ve mantıksal değerleri içermek üzere, bir örneğe bağlı olarak tahmin eder. +STDEVP = STDSAPMAS ## Standart sapmayı, tüm popülasyona bağlı olarak hesaplar. +STDEVPA = STDSAPMASA ## Standart sapmayı, sayılar, metin ve mantıksal değerleri içermek üzere, tüm popülasyona bağlı olarak hesaplar. +STEYX = STHYX ## Regresyondaki her x için tahmini y değerinin standart hatasını verir. +TDIST = TDAĞ ## T-dağılımını verir. +TINV = TTERS ## T-dağılımının tersini verir. +TREND = EĞİLİM ## Doğrusal bir eğilim boyunca değerler verir. +TRIMMEAN = KIRPORTALAMA ## Bir veri kümesinin içinin ortalamasını verir. +TTEST = TTEST ## T-test'le ilişkilendirilmiş olasılığı verir. +VAR = VAR ## Varyansı, bir örneğe bağlı olarak tahmin eder. +VARA = VARA ## Varyansı, sayılar, metin ve mantıksal değerleri içermek üzere, bir örneğe bağlı olarak tahmin eder. +VARP = VARS ## Varyansı, tüm popülasyona dayanarak hesaplar. +VARPA = VARSA ## Varyansı, sayılar, metin ve mantıksal değerleri içermek üzere, tüm popülasyona bağlı olarak hesaplar. +WEIBULL = WEIBULL ## Weibull dağılımını hesaplar. +ZTEST = ZTEST ## Z-testinin tek kuyruklu olasılık değerini hesaplar. + + +## +## Text functions Metin fonksiyonları +## +ASC = ASC ## Bir karakter dizesindeki çift enli (iki bayt) İngilizce harfleri veya katakanayı yarım enli (tek bayt) karakterlerle değiştirir. +BAHTTEXT = BAHTTEXT ## Sayıyı, ß (baht) para birimi biçimini kullanarak metne dönüştürür. +CHAR = DAMGA ## Kod sayısıyla belirtilen karakteri verir. +CLEAN = TEMİZ ## Metindeki bütün yazdırılamaz karakterleri kaldırır. +CODE = KOD ## Bir metin dizesindeki ilk karakter için sayısal bir kod verir. +CONCATENATE = BİRLEŞTİR ## Pek çok metin öğesini bir metin öğesi olarak birleştirir. +DOLLAR = LİRA ## Bir sayıyı YTL (yeni Türk lirası) para birimi biçimini kullanarak metne dönüştürür. +EXACT = ÖZDEŞ ## İki metin değerinin özdeş olup olmadığını anlamak için, değerleri denetler. +FIND = BUL ## Bir metin değerini, bir başkasının içinde bulur (büyük küçük harf duyarlıdır). +FINDB = BULB ## Bir metin değerini, bir başkasının içinde bulur (büyük küçük harf duyarlıdır). +FIXED = SAYIDÜZENLE ## Bir sayıyı, sabit sayıda ondalıkla, metin olarak biçimlendirir. +JIS = JIS ## Bir karakter dizesindeki tek enli (tek bayt) İngilizce harfleri veya katakanayı çift enli (iki bayt) karakterlerle değiştirir. +LEFT = SOL ## Bir metin değerinden en soldaki karakterleri verir. +LEFTB = SOLB ## Bir metin değerinden en soldaki karakterleri verir. +LEN = UZUNLUK ## Bir metin dizesindeki karakter sayısını verir. +LENB = UZUNLUKB ## Bir metin dizesindeki karakter sayısını verir. +LOWER = KÜÇÜKHARF ## Metni küçük harfe çevirir. +MID = ORTA ## Bir metin dizesinden belirli sayıda karakteri, belirttiğiniz konumdan başlamak üzere verir. +MIDB = ORTAB ## Bir metin dizesinden belirli sayıda karakteri, belirttiğiniz konumdan başlamak üzere verir. +PHONETIC = SES ## Metin dizesinden ses (furigana) karakterlerini ayıklar. +PROPER = YAZIM.DÜZENİ ## Bir metin değerinin her bir sözcüğünün ilk harfini büyük harfe çevirir. +REPLACE = DEĞİŞTİR ## Metnin içindeki karakterleri değiştirir. +REPLACEB = DEĞİŞTİRB ## Metnin içindeki karakterleri değiştirir. +REPT = YİNELE ## Metni belirtilen sayıda yineler. +RIGHT = SAĞ ## Bir metin değerinden en sağdaki karakterleri verir. +RIGHTB = SAĞB ## Bir metin değerinden en sağdaki karakterleri verir. +SEARCH = BUL ## Bir metin değerini, bir başkasının içinde bulur (büyük küçük harf duyarlı değildir). +SEARCHB = BULB ## Bir metin değerini, bir başkasının içinde bulur (büyük küçük harf duyarlı değildir). +SUBSTITUTE = YERİNEKOY ## Bir metin dizesinde, eski metnin yerine yeni metin koyar. +T = M ## Bağımsız değerlerini metne dönüştürür. +TEXT = METNEÇEVİR ## Bir sayıyı biçimlendirir ve metne dönüştürür. +TRIM = KIRP ## Metindeki boşlukları kaldırır. +UPPER = BÜYÜKHARF ## Metni büyük harfe çevirir. +VALUE = SAYIYAÇEVİR ## Bir metin bağımsız değişkenini sayıya dönüştürür. diff --git a/PHPWord.php b/PHPWord.php new file mode 100644 index 0000000..cf16023 --- /dev/null +++ b/PHPWord.php @@ -0,0 +1,230 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + +/** PHPWORD_BASE_PATH */ +if(!defined('PHPWORD_BASE_PATH')) { + define('PHPWORD_BASE_PATH', dirname(__FILE__) . '/'); + require PHPWORD_BASE_PATH . 'PHPWord/Autoloader.php'; + PHPWord_Autoloader::Register(); +} + + +/** + * PHPWord + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord { + + /** + * Document properties + * + * @var PHPWord_DocumentProperties + */ + private $_properties; + + /** + * Default Font Name + * + * @var string + */ + private $_defaultFontName; + + /** + * Default Font Size + * + * @var int + */ + private $_defaultFontSize; + + /** + * Collection of section elements + * + * @var array + */ + private $_sectionCollection = array(); + + + /** + * Create a new PHPWord Document + */ + public function __construct() { + $this->_properties = new PHPWord_DocumentProperties(); + $this->_defaultFontName = 'Arial'; + $this->_defaultFontSize = 20; + } + + /** + * Get properties + * @return PHPWord_DocumentProperties + */ + public function getProperties() { + return $this->_properties; + } + + /** + * Set properties + * + * @param PHPWord_DocumentProperties $value + * @return PHPWord + */ + public function setProperties(PHPWord_DocumentProperties $value) { + $this->_properties = $value; + return $this; + } + + /** + * Create a new Section + * + * @param PHPWord_Section_Settings $settings + * @return PHPWord_Section + */ + public function createSection($settings = null) { + $sectionCount = $this->_countSections() + 1; + + $section = new PHPWord_Section($sectionCount, $settings); + $this->_sectionCollection[] = $section; + return $section; + } + + /** + * Get default Font name + * @return string + */ + public function getDefaultFontName() { + return $this->_defaultFontName; + } + + /** + * Set default Font name + * @param string $pValue + */ + public function setDefaultFontName($pValue) { + $this->_defaultFontName = $pValue; + } + + /** + * Get default Font size + * @return string + */ + public function getDefaultFontSize() { + return $this->_defaultFontSize; + } + + /** + * Set default Font size + * @param int $pValue + */ + public function setDefaultFontSize($pValue) { + $pValue = $pValue * 2; + $this->_defaultFontSize = $pValue; + } + + /** + * Adds a paragraph style definition to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addParagraphStyle($styleName, $styles) { + PHPWord_Style::addParagraphStyle($styleName, $styles); + } + + /** + * Adds a font style definition to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addFontStyle($styleName, $styleFont, $styleParagraph = null) { + PHPWord_Style::addFontStyle($styleName, $styleFont, $styleParagraph); + } + + /** + * Adds a table style definition to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addTableStyle($styleName, $styleTable, $styleFirstRow = null) { + PHPWord_Style::addTableStyle($styleName, $styleTable, $styleFirstRow); + } + + /** + * Adds a heading style definition to styles.xml + * + * @param $titleCount int + * @param $styles array + */ + public function addTitleStyle($titleCount, $styleFont, $styleParagraph = null) { + PHPWord_Style::addTitleStyle($titleCount, $styleFont, $styleParagraph); + } + + /** + * Adds a hyperlink style to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addLinkStyle($styleName, $styles) { + PHPWord_Style::addLinkStyle($styleName, $styles); + } + + /** + * Get sections + * @return PHPWord_Section[] + */ + public function getSections() { + return $this->_sectionCollection; + } + + /** + * Get section count + * @return int + */ + private function _countSections() { + return count($this->_sectionCollection); + } + + /** + * Load a Template File + * + * @param string $strFilename + * @return PHPWord_Template + */ + public function loadTemplate($strFilename) { + if(file_exists($strFilename)) { + $template = new PHPWord_Template($strFilename); + return $template; + } else { + trigger_error('Template file '.$strFilename.' not found.', E_ERROR); + } + } +} +?> \ No newline at end of file diff --git a/PHPWord/Examples/AdvancedTable.docx b/PHPWord/Examples/AdvancedTable.docx new file mode 100644 index 0000000..4286e00 Binary files /dev/null and b/PHPWord/Examples/AdvancedTable.docx differ diff --git a/PHPWord/Examples/AdvancedTable.php b/PHPWord/Examples/AdvancedTable.php new file mode 100644 index 0000000..5a2088f --- /dev/null +++ b/PHPWord/Examples/AdvancedTable.php @@ -0,0 +1,53 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Define table style arrays +$styleTable = array('borderSize'=>6, 'borderColor'=>'006699', 'cellMargin'=>80); +$styleFirstRow = array('borderBottomSize'=>18, 'borderBottomColor'=>'0000FF', 'bgColor'=>'66BBFF'); + +// Define cell style arrays +$styleCell = array('valign'=>'center'); +$styleCellBTLR = array('valign'=>'center', 'textDirection'=>PHPWord_Style_Cell::TEXT_DIR_BTLR); + +// Define font style for first row +$fontStyle = array('bold'=>true, 'align'=>'center'); + +// Add table style +$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow); + +// Add table +$table = $section->addTable('myOwnTableStyle'); + +// Add row +$table->addRow(900); + +// Add cells +$table->addCell(2000, $styleCell)->addText('Row 1', $fontStyle); +$table->addCell(2000, $styleCell)->addText('Row 2', $fontStyle); +$table->addCell(2000, $styleCell)->addText('Row 3', $fontStyle); +$table->addCell(2000, $styleCell)->addText('Row 4', $fontStyle); +$table->addCell(500, $styleCellBTLR)->addText('Row 5', $fontStyle); + +// Add more rows / cells +for($i = 1; $i <= 10; $i++) { + $table->addRow(); + $table->addCell(2000)->addText("Cell $i"); + $table->addCell(2000)->addText("Cell $i"); + $table->addCell(2000)->addText("Cell $i"); + $table->addCell(2000)->addText("Cell $i"); + + $text = ($i % 2 == 0) ? 'X' : ''; + $table->addCell(500)->addText($text); +} + + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('AdvancedTable.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/BasicTable.docx b/PHPWord/Examples/BasicTable.docx new file mode 100644 index 0000000..6a9fcf9 Binary files /dev/null and b/PHPWord/Examples/BasicTable.docx differ diff --git a/PHPWord/Examples/BasicTable.php b/PHPWord/Examples/BasicTable.php new file mode 100644 index 0000000..96aedab --- /dev/null +++ b/PHPWord/Examples/BasicTable.php @@ -0,0 +1,26 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add table +$table = $section->addTable(); + +for($r = 1; $r <= 10; $r++) { // Loop through rows + // Add row + $table->addRow(); + + for($c = 1; $c <= 5; $c++) { // Loop through cells + // Add Cell + $table->addCell(1750)->addText("Row $r, Cell $c"); + } +} + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('BasicTable.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/HeaderFooter.php b/PHPWord/Examples/HeaderFooter.php new file mode 100644 index 0000000..918280c --- /dev/null +++ b/PHPWord/Examples/HeaderFooter.php @@ -0,0 +1,28 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add header +$header = $section->createHeader(); +$table = $header->addTable(); +$table->addRow(); +$table->addCell(4500)->addText('This is the header.'); +$table->addCell(4500)->addImage('_earth.jpg', array('width'=>50, 'height'=>50, 'align'=>'right')); + +// Add footer +$footer = $section->createFooter(); +$footer->addPreserveText('Page {PAGE} of {NUMPAGES}.', array('align'=>'center')); + +// Write some text +$section->addTextBreak(); +$section->addText('Some text...'); + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('HeaderFooter.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/Image.php b/PHPWord/Examples/Image.php new file mode 100644 index 0000000..8362a2d --- /dev/null +++ b/PHPWord/Examples/Image.php @@ -0,0 +1,24 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add image elements +$section->addImage('_mars.jpg'); +$section->addTextBreak(2); + +$section->addImage('_earth.JPG', array('width'=>210, 'height'=>210, 'align'=>'center')); +$section->addTextBreak(2); + +$section->addImage('_mars.jpg', array('width'=>100, 'height'=>100, 'align'=>'right')); + + + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('Image.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/Link.php b/PHPWord/Examples/Link.php new file mode 100644 index 0000000..7cebaec --- /dev/null +++ b/PHPWord/Examples/Link.php @@ -0,0 +1,24 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add hyperlink elements +$section->addLink('http://www.google.com', 'Best search engine', array('color'=>'0000FF', 'underline'=>PHPWord_Style_Font::UNDERLINE_SINGLE)); +$section->addTextBreak(2); + +$PHPWord->addLinkStyle('myOwnLinkStyle', array('bold'=>true, 'color'=>'808000')); +$section->addLink('http://www.bing.com', null, 'myOwnLinkStyle'); +$section->addLink('http://www.yahoo.com', null, 'myOwnLinkStyle'); + + + + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('Link.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/ListItem.php b/PHPWord/Examples/ListItem.php new file mode 100644 index 0000000..475c3fb --- /dev/null +++ b/PHPWord/Examples/ListItem.php @@ -0,0 +1,47 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add listitem elements +$section->addListItem('List Item 1', 0); +$section->addListItem('List Item 2', 0); +$section->addListItem('List Item 3', 0); +$section->addTextBreak(2); + +// Add listitem elements +$section->addListItem('List Item 1', 0); +$section->addListItem('List Item 1.1', 1); +$section->addListItem('List Item 1.2', 1); +$section->addListItem('List Item 1.3 (styled)', 1, array('bold'=>true)); +$section->addListItem('List Item 1.3.1', 2); +$section->addListItem('List Item 1.3.2', 2); +$section->addTextBreak(2); + +// Add listitem elements +$listStyle = array('listType'=>PHPWord_Style_ListItem::TYPE_NUMBER); +$section->addListItem('List Item 1', 0, null, $listStyle); +$section->addListItem('List Item 2', 0, null, $listStyle); +$section->addListItem('List Item 3', 0, null, $listStyle); +$section->addTextBreak(2); + +// Add listitem elements +$PHPWord->addFontStyle('myOwnStyle', array('color'=>'FF0000')); +$PHPWord->addParagraphStyle('P-Style', array('spaceAfter'=>95)); +$listStyle = array('listType'=>PHPWord_Style_ListItem::TYPE_NUMBER_NESTED); +$section->addListItem('List Item 1', 0, 'myOwnStyle', $listStyle, 'P-Style'); +$section->addListItem('List Item 2', 0, 'myOwnStyle', $listStyle, 'P-Style'); +$section->addListItem('List Item 3', 1, 'myOwnStyle', $listStyle, 'P-Style'); +$section->addListItem('List Item 4', 1, 'myOwnStyle', $listStyle, 'P-Style'); +$section->addListItem('List Item 5', 2, 'myOwnStyle', $listStyle, 'P-Style'); +$section->addListItem('List Item 6', 1, 'myOwnStyle', $listStyle, 'P-Style'); +$section->addListItem('List Item 7', 0, 'myOwnStyle', $listStyle, 'P-Style'); + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('ListItem.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/Object.php b/PHPWord/Examples/Object.php new file mode 100644 index 0000000..cb488da --- /dev/null +++ b/PHPWord/Examples/Object.php @@ -0,0 +1,20 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add text elements +$section->addText('You can open this OLE object by double clicking on the icon:'); +$section->addTextBreak(2); + +// Add object +$section->addObject('_sheet.xls'); + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('Object.docx'); +?> diff --git a/PHPWord/Examples/Section.php b/PHPWord/Examples/Section.php new file mode 100644 index 0000000..81292ad --- /dev/null +++ b/PHPWord/Examples/Section.php @@ -0,0 +1,26 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(array('borderColor'=>'00FF00', 'borderSize'=>12)); +$section->addText('I am placed on a default section.'); + +// New landscape section +$section = $PHPWord->createSection(array('orientation'=>'landscape')); +$section->addText('I am placed on a landscape section. Every page starting from this section will be landscape style.'); +$section->addPageBreak(); +$section->addPageBreak(); + +// New portrait section +$section = $PHPWord->createSection(array('marginLeft'=>600, 'marginRight'=>600, 'marginTop'=>600, 'marginBottom'=>600)); +$section->addText('This section uses other margins.'); + + + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('Section.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/Solarsystem.docx b/PHPWord/Examples/Solarsystem.docx new file mode 100644 index 0000000..3f3f30b Binary files /dev/null and b/PHPWord/Examples/Solarsystem.docx differ diff --git a/PHPWord/Examples/Template.docx b/PHPWord/Examples/Template.docx new file mode 100644 index 0000000..cb90879 Binary files /dev/null and b/PHPWord/Examples/Template.docx differ diff --git a/PHPWord/Examples/Template.php b/PHPWord/Examples/Template.php new file mode 100644 index 0000000..9046d81 --- /dev/null +++ b/PHPWord/Examples/Template.php @@ -0,0 +1,23 @@ +<?php +require_once '../PHPWord.php'; + +$PHPWord = new PHPWord(); + +$document = $PHPWord->loadTemplate('Template.docx'); + +$document->setValue('Value1', 'Sun'); +$document->setValue('Value2', 'Mercury'); +$document->setValue('Value3', 'Venus'); +$document->setValue('Value4', 'Earth'); +$document->setValue('Value5', 'Mars'); +$document->setValue('Value6', 'Jupiter'); +$document->setValue('Value7', 'Saturn'); +$document->setValue('Value8', 'Uranus'); +$document->setValue('Value9', 'Neptun'); +$document->setValue('Value10', 'Pluto'); + +$document->setValue('weekday', date('l')); +$document->setValue('time', date('H:i')); + +$document->save('Solarsystem.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/Text.docx b/PHPWord/Examples/Text.docx new file mode 100644 index 0000000..c01e9b6 Binary files /dev/null and b/PHPWord/Examples/Text.docx differ diff --git a/PHPWord/Examples/Text.php b/PHPWord/Examples/Text.php new file mode 100644 index 0000000..4437b92 --- /dev/null +++ b/PHPWord/Examples/Text.php @@ -0,0 +1,27 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add text elements +$section->addText('Hello World!'); +$section->addTextBreak(2); + +$section->addText('I am inline styled.', array('name'=>'Verdana', 'color'=>'006699')); +$section->addTextBreak(2); + +$PHPWord->addFontStyle('rStyle', array('bold'=>true, 'italic'=>true, 'size'=>16)); +$PHPWord->addParagraphStyle('pStyle', array('align'=>'center', 'spaceAfter'=>100)); +$section->addText('I am styled by two style definitions.', 'rStyle', 'pStyle'); +$section->addText('I have only a paragraph style definition.', null, 'pStyle'); + + + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('Text.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/Textrun.php b/PHPWord/Examples/Textrun.php new file mode 100644 index 0000000..84fac37 --- /dev/null +++ b/PHPWord/Examples/Textrun.php @@ -0,0 +1,32 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Add style definitions +$PHPWord->addParagraphStyle('pStyle', array('spacing'=>100)); +$PHPWord->addFontStyle('BoldText', array('bold'=>true)); +$PHPWord->addFontStyle('ColoredText', array('color'=>'FF8080')); +$PHPWord->addLinkStyle('NLink', array('color'=>'0000FF', 'underline'=>PHPWord_Style_Font::UNDERLINE_SINGLE)); + +// Add text elements +$textrun = $section->createTextRun('pStyle'); + +$textrun->addText('Each textrun can contain native text or link elements.'); +$textrun->addText(' No break is placed after adding an element.', 'BoldText'); +$textrun->addText(' All elements are placed inside a paragraph with the optionally given p-Style.', 'ColoredText'); +$textrun->addText(' The best search engine: '); +$textrun->addLink('http://www.google.com', null, 'NLink'); +$textrun->addText('. Also not bad: '); +$textrun->addLink('http://www.bing.com', null, 'NLink'); + + + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('Textrun.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/TitleTOC.php b/PHPWord/Examples/TitleTOC.php new file mode 100644 index 0000000..6f712cc --- /dev/null +++ b/PHPWord/Examples/TitleTOC.php @@ -0,0 +1,49 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Define the TOC font style +$fontStyle = array('spaceAfter'=>60, 'size'=>12); + +// Add title styles +$PHPWord->addTitleStyle(1, array('size'=>20, 'color'=>'333333', 'bold'=>true)); +$PHPWord->addTitleStyle(2, array('size'=>16, 'color'=>'666666')); + +// Add text elements +$section->addText('Table of contents:'); +$section->addTextBreak(2); + +// Add TOC +$section->addTOC($fontStyle); + +// Add Titles +$section->addPageBreak(); +$section->addTitle('I am Title 1', 1); +$section->addText('Some text...'); +$section->addTextBreak(2); + +$section->addTitle('I am a Subtitle of Title 1', 2); +$section->addTextBreak(2); +$section->addText('Some more text...'); +$section->addTextBreak(2); + +$section->addTitle('Another Title (Title 2)', 1); +$section->addText('Some text...'); +$section->addPageBreak(); +$section->addTitle('I am Title 3', 1); +$section->addText('And more text...'); +$section->addTextBreak(2); +$section->addTitle('I am a Subtitle of Title 3', 2); +$section->addText('Again and again, more text...'); + +echo 'Note: The pagenumbers in the TOC doesnt refresh automatically.'; + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('TitleTOC.docx'); +?> diff --git a/PHPWord/Examples/Watermark.php b/PHPWord/Examples/Watermark.php new file mode 100644 index 0000000..6a9ac33 --- /dev/null +++ b/PHPWord/Examples/Watermark.php @@ -0,0 +1,21 @@ +<?php +require_once '../PHPWord.php'; + +// New Word Document +$PHPWord = new PHPWord(); + +// New portrait section +$section = $PHPWord->createSection(); + +// Create header +$header = $section->createHeader(); + +// Add a watermark to the header +$header->addWatermark('_earth.jpg', array('marginTop'=>200, 'marginLeft'=>55)); + +$section->addText('The header reference to the current section includes a watermark image.'); + +// Save File +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +$objWriter->save('Watermark.docx'); +?> \ No newline at end of file diff --git a/PHPWord/Examples/_earth.JPG b/PHPWord/Examples/_earth.JPG new file mode 100644 index 0000000..28537b0 Binary files /dev/null and b/PHPWord/Examples/_earth.JPG differ diff --git a/PHPWord/Examples/_mars.jpg b/PHPWord/Examples/_mars.jpg new file mode 100644 index 0000000..584d317 Binary files /dev/null and b/PHPWord/Examples/_mars.jpg differ diff --git a/PHPWord/Examples/_sheet.xls b/PHPWord/Examples/_sheet.xls new file mode 100644 index 0000000..b8da43c Binary files /dev/null and b/PHPWord/Examples/_sheet.xls differ diff --git a/PHPWord/PHPWord.php b/PHPWord/PHPWord.php new file mode 100644 index 0000000..cf16023 --- /dev/null +++ b/PHPWord/PHPWord.php @@ -0,0 +1,230 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + +/** PHPWORD_BASE_PATH */ +if(!defined('PHPWORD_BASE_PATH')) { + define('PHPWORD_BASE_PATH', dirname(__FILE__) . '/'); + require PHPWORD_BASE_PATH . 'PHPWord/Autoloader.php'; + PHPWord_Autoloader::Register(); +} + + +/** + * PHPWord + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord { + + /** + * Document properties + * + * @var PHPWord_DocumentProperties + */ + private $_properties; + + /** + * Default Font Name + * + * @var string + */ + private $_defaultFontName; + + /** + * Default Font Size + * + * @var int + */ + private $_defaultFontSize; + + /** + * Collection of section elements + * + * @var array + */ + private $_sectionCollection = array(); + + + /** + * Create a new PHPWord Document + */ + public function __construct() { + $this->_properties = new PHPWord_DocumentProperties(); + $this->_defaultFontName = 'Arial'; + $this->_defaultFontSize = 20; + } + + /** + * Get properties + * @return PHPWord_DocumentProperties + */ + public function getProperties() { + return $this->_properties; + } + + /** + * Set properties + * + * @param PHPWord_DocumentProperties $value + * @return PHPWord + */ + public function setProperties(PHPWord_DocumentProperties $value) { + $this->_properties = $value; + return $this; + } + + /** + * Create a new Section + * + * @param PHPWord_Section_Settings $settings + * @return PHPWord_Section + */ + public function createSection($settings = null) { + $sectionCount = $this->_countSections() + 1; + + $section = new PHPWord_Section($sectionCount, $settings); + $this->_sectionCollection[] = $section; + return $section; + } + + /** + * Get default Font name + * @return string + */ + public function getDefaultFontName() { + return $this->_defaultFontName; + } + + /** + * Set default Font name + * @param string $pValue + */ + public function setDefaultFontName($pValue) { + $this->_defaultFontName = $pValue; + } + + /** + * Get default Font size + * @return string + */ + public function getDefaultFontSize() { + return $this->_defaultFontSize; + } + + /** + * Set default Font size + * @param int $pValue + */ + public function setDefaultFontSize($pValue) { + $pValue = $pValue * 2; + $this->_defaultFontSize = $pValue; + } + + /** + * Adds a paragraph style definition to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addParagraphStyle($styleName, $styles) { + PHPWord_Style::addParagraphStyle($styleName, $styles); + } + + /** + * Adds a font style definition to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addFontStyle($styleName, $styleFont, $styleParagraph = null) { + PHPWord_Style::addFontStyle($styleName, $styleFont, $styleParagraph); + } + + /** + * Adds a table style definition to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addTableStyle($styleName, $styleTable, $styleFirstRow = null) { + PHPWord_Style::addTableStyle($styleName, $styleTable, $styleFirstRow); + } + + /** + * Adds a heading style definition to styles.xml + * + * @param $titleCount int + * @param $styles array + */ + public function addTitleStyle($titleCount, $styleFont, $styleParagraph = null) { + PHPWord_Style::addTitleStyle($titleCount, $styleFont, $styleParagraph); + } + + /** + * Adds a hyperlink style to styles.xml + * + * @param $styleName string + * @param $styles array + */ + public function addLinkStyle($styleName, $styles) { + PHPWord_Style::addLinkStyle($styleName, $styles); + } + + /** + * Get sections + * @return PHPWord_Section[] + */ + public function getSections() { + return $this->_sectionCollection; + } + + /** + * Get section count + * @return int + */ + private function _countSections() { + return count($this->_sectionCollection); + } + + /** + * Load a Template File + * + * @param string $strFilename + * @return PHPWord_Template + */ + public function loadTemplate($strFilename) { + if(file_exists($strFilename)) { + $template = new PHPWord_Template($strFilename); + return $template; + } else { + trigger_error('Template file '.$strFilename.' not found.', E_ERROR); + } + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Autoloader.php b/PHPWord/PHPWord/Autoloader.php new file mode 100644 index 0000000..d682f4d --- /dev/null +++ b/PHPWord/PHPWord/Autoloader.php @@ -0,0 +1,48 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + +class PHPWord_Autoloader +{ + public static function Register() { + return spl_autoload_register(array('PHPWord_Autoloader', 'Load')); + } + + public static function Load($strObjectName) { + if((class_exists($strObjectName)) || (strpos($strObjectName, 'PHPWord') === false)) { + return false; + } + + $strObjectFilePath = PHPWORD_BASE_PATH . str_replace('_', '/', $strObjectName) . '.php'; + + if((file_exists($strObjectFilePath) === false) || (is_readable($strObjectFilePath) === false)) { + return false; + } + + require($strObjectFilePath); + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/DocumentProperties.php b/PHPWord/PHPWord/DocumentProperties.php new file mode 100644 index 0000000..b284f63 --- /dev/null +++ b/PHPWord/PHPWord/DocumentProperties.php @@ -0,0 +1,330 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_DocumentProperties + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 2009 - 2011 PHPWord (http://www.codeplex.com/PHPWord) + */ +class PHPWord_DocumentProperties { + + /** + * Creator + * + * @var string + */ + private $_creator; + + /** + * LastModifiedBy + * + * @var string + */ + private $_lastModifiedBy; + + /** + * Created + * + * @var datetime + */ + private $_created; + + /** + * Modified + * + * @var datetime + */ + private $_modified; + + /** + * Title + * + * @var string + */ + private $_title; + + /** + * Description + * + * @var string + */ + private $_description; + + /** + * Subject + * + * @var string + */ + private $_subject; + + /** + * Keywords + * + * @var string + */ + private $_keywords; + + /** + * Category + * + * @var string + */ + private $_category; + + /** + * Company + * + * @var string + */ + private $_company; + + /** + * Create new PHPWord_DocumentProperties + */ + public function __construct() { + $this->_creator = ''; + $this->_lastModifiedBy = $this->_creator; + $this->_created = time(); + $this->_modified = time(); + $this->_title = ''; + $this->_subject = ''; + $this->_description = ''; + $this->_keywords = ''; + $this->_category = ''; + $this->_company = ''; + } + + /** + * Get Creator + * + * @return string + */ + public function getCreator() { + return $this->_creator; + } + + /** + * Set Creator + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setCreator($pValue = '') { + $this->_creator = $pValue; + return $this; + } + + /** + * Get Last Modified By + * + * @return string + */ + public function getLastModifiedBy() { + return $this->_lastModifiedBy; + } + + /** + * Set Last Modified By + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setLastModifiedBy($pValue = '') { + $this->_lastModifiedBy = $pValue; + return $this; + } + + /** + * Get Created + * + * @return datetime + */ + public function getCreated() { + return $this->_created; + } + + /** + * Set Created + * + * @param datetime $pValue + * @return PHPWord_DocumentProperties + */ + public function setCreated($pValue = null) { + if (is_null($pValue)) { + $pValue = time(); + } + $this->_created = $pValue; + return $this; + } + + /** + * Get Modified + * + * @return datetime + */ + public function getModified() { + return $this->_modified; + } + + /** + * Set Modified + * + * @param datetime $pValue + * @return PHPWord_DocumentProperties + */ + public function setModified($pValue = null) { + if (is_null($pValue)) { + $pValue = time(); + } + $this->_modified = $pValue; + return $this; + } + + /** + * Get Title + * + * @return string + */ + public function getTitle() { + return $this->_title; + } + + /** + * Set Title + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setTitle($pValue = '') { + $this->_title = $pValue; + return $this; + } + + /** + * Get Description + * + * @return string + */ + public function getDescription() { + return $this->_description; + } + + /** + * Set Description + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setDescription($pValue = '') { + $this->_description = $pValue; + return $this; + } + + /** + * Get Subject + * + * @return string + */ + public function getSubject() { + return $this->_subject; + } + + /** + * Set Subject + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setSubject($pValue = '') { + $this->_subject = $pValue; + return $this; + } + + /** + * Get Keywords + * + * @return string + */ + public function getKeywords() { + return $this->_keywords; + } + + /** + * Set Keywords + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setKeywords($pValue = '') { + $this->_keywords = $pValue; + return $this; + } + + /** + * Get Category + * + * @return string + */ + public function getCategory() { + return $this->_category; + } + + /** + * Set Category + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setCategory($pValue = '') { + $this->_category = $pValue; + return $this; + } + + /** + * Get Company + * + * @return string + */ + public function getCompany() { + return $this->_company; + } + + /** + * Set Company + * + * @param string $pValue + * @return PHPWord_DocumentProperties + */ + public function setCompany($pValue = '') { + $this->_company = $pValue; + return $this; + } +} +?> diff --git a/PHPWord/PHPWord/IOFactory.php b/PHPWord/PHPWord/IOFactory.php new file mode 100644 index 0000000..ac4b206 --- /dev/null +++ b/PHPWord/PHPWord/IOFactory.php @@ -0,0 +1,120 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_IOFactory + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_IOFactory { + + /** + * Search locations + * + * @var array + */ + private static $_searchLocations = array( + array('type' => 'IWriter', 'path' => 'PHPWord/Writer/{0}.php', 'class' => 'PHPWord_Writer_{0}') + ); + + /** + * Autoresolve classes + * + * @var array + */ + private static $_autoResolveClasses = array( + 'Serialized' + ); + + /** + * Private constructor for PHPWord_IOFactory + */ + private function __construct() { } + + /** + * Get search locations + * + * @return array + */ + public static function getSearchLocations() { + return self::$_searchLocations; + } + + /** + * Set search locations + * + * @param array $value + * @throws Exception + */ + public static function setSearchLocations($value) { + if (is_array($value)) { + self::$_searchLocations = $value; + } else { + throw new Exception('Invalid parameter passed.'); + } + } + + /** + * Add search location + * + * @param string $type Example: IWriter + * @param string $location Example: PHPWord/Writer/{0}.php + * @param string $classname Example: PHPWord_Writer_{0} + */ + public static function addSearchLocation($type = '', $location = '', $classname = '') { + self::$_searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname ); + } + + /** + * Create PHPWord_Writer_IWriter + * + * @param PHPWord $PHPWord + * @param string $writerType Example: Word2007 + * @return PHPWord_Writer_IWriter + */ + public static function createWriter(PHPWord $PHPWord, $writerType = '') { + $searchType = 'IWriter'; + + foreach (self::$_searchLocations as $searchLocation) { + if ($searchLocation['type'] == $searchType) { + $className = str_replace('{0}', $writerType, $searchLocation['class']); + $classFile = str_replace('{0}', $writerType, $searchLocation['path']); + + $instance = new $className($PHPWord); + if(!is_null($instance)) { + return $instance; + } + } + } + + throw new Exception("No $searchType found for type $writerType"); + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Media.php b/PHPWord/PHPWord/Media.php new file mode 100644 index 0000000..fcc53ac --- /dev/null +++ b/PHPWord/PHPWord/Media.php @@ -0,0 +1,328 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Media + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Media { + + /** + * Section Media Elements + * + * @var array + */ + private static $_sectionMedia = array('images'=>array(), + 'embeddings'=>array(), + 'links'=>array()); + + /** + * Header Media Elements + * + * @var array + */ + private static $_headerMedia = array(); + + /** + * Footer Media Elements + * + * @var array + */ + private static $_footerMedia = array(); + + /** + * ObjectID Counter + * + * @var int + */ + private static $_objectId = 1325353440; + + + /** + * Add new Section Media Element + * + * @param string $src + * @param string $type + * + * @return mixed + */ + public static function addSectionMediaElement($src, $type, PHPWord_Section_MemoryImage $memoryImage = null) { + $mediaId = md5($src); + $key = ($type == 'image') ? 'images' : 'embeddings'; + + if(!array_key_exists($mediaId, self::$_sectionMedia[$key])) { + $cImg = self::countSectionMediaElements('images'); + $cObj = self::countSectionMediaElements('embeddings'); + $rID = self::countSectionMediaElements() + 7; + + $media = array(); + + if($type == 'image') { + $cImg++; + $inf = pathinfo($src); + $isMemImage = (substr(strtolower($inf['extension']), 0, 3) == 'php' && $type == 'image') ? true : false; + + if($isMemImage) { + $ext = $memoryImage->getImageExtension(); + $media['isMemImage'] = true; + $media['createfunction'] = $memoryImage->getImageCreateFunction(); + $media['imagefunction'] = $memoryImage->getImageFunction(); + } else { + $ext = $inf['extension']; + if($ext == 'jpeg') { // Office crashes when adding a jpEg Image, so rename to jpg + $ext = 'jpg'; + } + } + + $folder = 'media'; + $file = $type.$cImg.'.'.strtolower($ext); + } elseif($type == 'oleObject') { + $cObj++; + $folder = 'embedding'; + $file = $type.$cObj.'.bin'; + } + + $media['source'] = $src; + $media['target'] = "$folder/section_$file"; + $media['type'] = $type; + $media['rID'] = $rID; + + self::$_sectionMedia[$key][$mediaId] = $media; + + if($type == 'oleObject') { + return array($rID, ++self::$_objectId); + } else { + return $rID; + } + } else { + if($type == 'oleObject') { + $rID = self::$_sectionMedia[$key][$mediaId]['rID']; + return array($rID, ++self::$_objectId); + } else { + return self::$_sectionMedia[$key][$mediaId]['rID']; + } + } + } + + /** + * Add new Section Link Element + * + * @param string $linkSrc + * @param string $linkName + * + * @return mixed + */ + public static function addSectionLinkElement($linkSrc) { + $rID = self::countSectionMediaElements() + 7; + + $link = array(); + $link['target'] = $linkSrc; + $link['rID'] = $rID; + $link['type'] = 'hyperlink'; + + self::$_sectionMedia['links'][] = $link; + + return $rID; + } + + /** + * Get Section Media Elements + * + * @param string $key + * @return array + */ + public static function getSectionMediaElements($key = null) { + if(!is_null($key)) { + return self::$_sectionMedia[$key]; + } else { + $arrImages = self::$_sectionMedia['images']; + $arrObjects = self::$_sectionMedia['embeddings']; + $arrLinks = self::$_sectionMedia['links']; + return array_merge($arrImages, $arrObjects, $arrLinks); + } + } + + /** + * Get Section Media Elements Count + * + * @param string $key + * @return int + */ + public static function countSectionMediaElements($key = null) { + if(!is_null($key)) { + return count(self::$_sectionMedia[$key]); + } else { + $cImages = count(self::$_sectionMedia['images']); + $cObjects = count(self::$_sectionMedia['embeddings']); + $cLinks = count(self::$_sectionMedia['links']); + return ($cImages + $cObjects + $cLinks); + } + } + + /** + * Add new Header Media Element + * + * @param int $headerCount + * @param string $src + * @return int + */ + public static function addHeaderMediaElement($headerCount, $src, PHPWord_Section_MemoryImage $memoryImage = null) { + $mediaId = md5($src); + $key = 'header'.$headerCount; + + if(!array_key_exists($key, self::$_headerMedia)) { + self::$_headerMedia[$key] = array(); + } + + if(!array_key_exists($mediaId, self::$_headerMedia[$key])) { + $cImg = self::countHeaderMediaElements($key); + $rID = $cImg + 1; + + $cImg++; + $inf = pathinfo($src); + $isMemImage = (substr(strtolower($inf['extension']), 0, 3) == 'php') ? true : false; + + $media = array(); + if($isMemImage) { + $ext = $memoryImage->getImageExtension(); + $media['isMemImage'] = true; + $media['createfunction'] = $memoryImage->getImageCreateFunction(); + $media['imagefunction'] = $memoryImage->getImageFunction(); + } else { + $ext = $inf['extension']; + if($ext == 'jpeg') { // Office crashes when adding a jpEg Image, so rename to jpg + $ext = 'jpg'; + } + } + $file = 'image'.$cImg.'.'.strtolower($ext); + + $media['source'] = $src; + $media['target'] = 'media/'.$key.'_'.$file; + $media['type'] = 'image'; + $media['rID'] = $rID; + + self::$_headerMedia[$key][$mediaId] = $media; + + return $rID; + } else { + return self::$_headerMedia[$key][$mediaId]['rID']; + } + } + + /** + * Get Header Media Elements Count + * + * @param string $key + * @return int + */ + public static function countHeaderMediaElements($key) { + return count(self::$_headerMedia[$key]); + } + + /** + * Get Header Media Elements + * + * @return int + */ + public static function getHeaderMediaElements() { + return self::$_headerMedia; + } + + /** + * Add new Footer Media Element + * + * @param int $footerCount + * @param string $src + * @return int + */ + public static function addFooterMediaElement($footerCount, $src, PHPWord_Section_MemoryImage $memoryImage = null) { + $mediaId = md5($src); + $key = 'footer'.$footerCount; + + if(!array_key_exists($key, self::$_footerMedia)) { + self::$_footerMedia[$key] = array(); + } + + if(!array_key_exists($mediaId, self::$_footerMedia[$key])) { + $cImg = self::countFooterMediaElements($key); + $rID = $cImg + 1; + + $cImg++; + $inf = pathinfo($src); + $isMemImage = (substr(strtolower($inf['extension']), 0, 3) == 'php') ? true : false; + + $media = array(); + if($isMemImage) { + $ext = $memoryImage->getImageExtension(); + $media['isMemImage'] = true; + $media['createfunction'] = $memoryImage->getImageCreateFunction(); + $media['imagefunction'] = $memoryImage->getImageFunction(); + } else { + $ext = $inf['extension']; + if($ext == 'jpeg') { // Office crashes when adding a jpEg Image, so rename to jpg + $ext = 'jpg'; + } + } + $file = 'image'.$cImg.'.'.strtolower($ext); + + $media['source'] = $src; + $media['target'] = 'media/'.$key.'_'.$file; + $media['type'] = 'image'; + $media['rID'] = $rID; + + self::$_footerMedia[$key][$mediaId] = $media; + + return $rID; + } else { + return self::$_footerMedia[$key][$mediaId]['rID']; + } + } + + /** + * Get Footer Media Elements Count + * + * @param string $key + * @return int + */ + public static function countFooterMediaElements($key) { + return count(self::$_footerMedia[$key]); + } + + /** + * Get Footer Media Elements + * + * @return int + */ + public static function getFooterMediaElements() { + return self::$_footerMedia; + } +} +?> diff --git a/PHPWord/PHPWord/Section.php b/PHPWord/PHPWord/Section.php new file mode 100644 index 0000000..10d1ce6 --- /dev/null +++ b/PHPWord/PHPWord/Section.php @@ -0,0 +1,371 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section { + + /** + * Section count + * + * @var int + */ + private $_sectionCount; + + /** + * Section settings + * + * @var PHPWord_Section_Settings + */ + private $_settings; + + /** + * Section Element Collection + * + * @var array + */ + private $_elementCollection = array(); + + /** + * Section Header + * + * @var PHPWord_Section_Header + */ + private $_header = null; + + /** + * Section Footer + * + * @var PHPWord_Section_Footer + */ + private $_footer = null; + + + /** + * Create a new Section + * + * @param int $sectionCount + * @param mixed $settings + */ + public function __construct($sectionCount, $settings = null) { + $this->_sectionCount = $sectionCount; + $this->_settings = new PHPWord_Section_Settings(); + + if(!is_null($settings) && is_array($settings)) { + foreach($settings as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_settings->setSettingValue($key, $value); + } + } + } + + /** + * Get Section Settings + * + * @return PHPWord_Section_Settings + */ + public function getSettings() { + return $this->_settings; + } + + /** + * Add a Text Element + * + * @param string $text + * @param mixed $styleFont + * @param mixed $styleParagraph + * @return PHPWord_Section_Text + */ + public function addText($text, $styleFont = null, $styleParagraph = null) { + $givenText = utf8_encode($text); + $text = new PHPWord_Section_Text($givenText, $styleFont, $styleParagraph); + $this->_elementCollection[] = $text; + return $text; + } + + /** + * Add a Link Element + * + * @param string $linkSrc + * @param string $linkName + * @param mixed $styleFont + * @param mixed $styleParagraph + * @return PHPWord_Section_Link + */ + public function addLink($linkSrc, $linkName = null, $styleFont = null, $styleParagraph = null) { + $linkSrc = utf8_encode($linkSrc); + if(!is_null($linkName)) { + $linkName = utf8_encode($linkName); + } + + $link = new PHPWord_Section_Link($linkSrc, $linkName, $styleFont, $styleParagraph); + $rID = PHPWord_Media::addSectionLinkElement($linkSrc); + $link->setRelationId($rID); + + $this->_elementCollection[] = $link; + return $link; + } + + /** + * Add a TextBreak Element + * + * @param int $count + */ + public function addTextBreak($count = 1) { + for($i=1; $i<=$count; $i++) { + $this->_elementCollection[] = new PHPWord_Section_TextBreak(); + } + } + + /** + * Add a PageBreak Element + */ + public function addPageBreak() { + $this->_elementCollection[] = new PHPWord_Section_PageBreak(); + } + + /** + * Add a Table Element + * + * @param mixed $style + * @return PHPWord_Section_Table + */ + public function addTable($style = null) { + $table = new PHPWord_Section_Table('section', $this->_sectionCount, $style); + $this->_elementCollection[] = $table; + return $table; + } + + /** + * Add a ListItem Element + * + * @param string $text + * @param int $depth + * @param mixed $styleFont + * @param mixed $styleList + * @param mixed $styleParagraph + * @return PHPWord_Section_ListItem + */ + public function addListItem($text, $depth = 0, $styleFont = null, $styleList = null, $styleParagraph = null) { + $text = utf8_encode($text); + $listItem = new PHPWord_Section_ListItem($text, $depth, $styleFont, $styleList, $styleParagraph); + $this->_elementCollection[] = $listItem; + return $listItem; + } + + /** + * Add a OLE-Object Element + * + * @param string $src + * @param mixed $style + * @return PHPWord_Section_Object + */ + public function addObject($src, $style = null) { + $object = new PHPWord_Section_Object($src, $style); + + if(!is_null($object->getSource())) { + $inf = pathinfo($src); + $ext = $inf['extension']; + if(strlen($ext) == 4 && strtolower(substr($ext, -1)) == 'x') { + $ext = substr($ext, 0, -1); + } + + $iconSrc = PHPWORD_BASE_PATH . 'PHPWord/_staticDocParts/'; + if(!file_exists($iconSrc.'_'.$ext.'.png')) { + $iconSrc = $iconSrc.'_default.png'; + } else { + $iconSrc .= '_'.$ext.'.png'; + } + + $rIDimg = PHPWord_Media::addSectionMediaElement($iconSrc, 'image'); + $data = PHPWord_Media::addSectionMediaElement($src, 'oleObject'); + $rID = $data[0]; + $objectId = $data[1]; + + $object->setRelationId($rID); + $object->setObjectId($objectId); + $object->setImageRelationId($rIDimg); + + $this->_elementCollection[] = $object; + return $object; + } else { + trigger_error('Source does not exist or unsupported object type.'); + } + } + + /** + * Add a Image Element + * + * @param string $src + * @param mixed $style + * @return PHPWord_Section_Image + */ + public function addImage($src, $style = null) { + $image = new PHPWord_Section_Image($src, $style); + + if(!is_null($image->getSource())) { + $rID = PHPWord_Media::addSectionMediaElement($src, 'image'); + $image->setRelationId($rID); + + $this->_elementCollection[] = $image; + return $image; + } else { + trigger_error('Source does not exist or unsupported image type.'); + } + } + + /** + * Add a by PHP created Image Element + * + * @param string $link + * @param mixed $style + * @return PHPWord_Section_MemoryImage + */ + public function addMemoryImage($link, $style = null) { + $memoryImage = new PHPWord_Section_MemoryImage($link, $style); + if(!is_null($memoryImage->getSource())) { + $rID = PHPWord_Media::addSectionMediaElement($link, 'image', $memoryImage); + $memoryImage->setRelationId($rID); + + $this->_elementCollection[] = $memoryImage; + return $memoryImage; + } else { + trigger_error('Unsupported image type.'); + } + } + + /** + * Add a Table-of-Contents Element + * + * @param mixed $styleFont + * @param mixed $styleTOC + * @return PHPWord_TOC + */ + public function addTOC($styleFont = null, $styleTOC = null) { + $toc = new PHPWord_TOC($styleFont, $styleTOC); + $this->_elementCollection[] = $toc; + return $toc; + } + + /** + * Add a Title Element + * + * @param string $text + * @param int $depth + * @return PHPWord_Section_Title + */ + public function addTitle($text, $depth = 1) { + $text = utf8_encode($text); + $styles = PHPWord_Style::getStyles(); + if(array_key_exists('Heading_'.$depth, $styles)) { + $style = 'Heading'.$depth; + } else { + $style = null; + } + + $title = new PHPWord_Section_Title($text, $depth, $style); + + $data = PHPWord_TOC::addTitle($text, $depth); + $anchor = $data[0]; + $bookmarkId = $data[1]; + + $title->setAnchor($anchor); + $title->setBookmarkId($bookmarkId); + + $this->_elementCollection[] = $title; + return $title; + } + + /** + * Create a new TextRun + * + * @return PHPWord_Section_TextRun + */ + public function createTextRun($styleParagraph = null) { + $textRun = new PHPWord_Section_TextRun($styleParagraph); + $this->_elementCollection[] = $textRun; + return $textRun; + } + + /** + * Get all Elements + * + * @return array + */ + public function getElements() { + return $this->_elementCollection; + } + + /** + * Create a new Header + * + * @return PHPWord_Section_Header + */ + public function createHeader() { + $header = new PHPWord_Section_Header($this->_sectionCount); + $this->_header = $header; + return $header; + } + + /** + * Get Header + * + * @return PHPWord_Section_Header + */ + public function getHeader() { + return $this->_header; + } + + /** + * Create a new Footer + * + * @return PHPWord_Section_Footer + */ + public function createFooter() { + $footer = new PHPWord_Section_Footer($this->_sectionCount); + $this->_footer = $footer; + return $footer; + } + + /** + * Get Footer + * + * @return PHPWord_Section_Footer + */ + public function getFooter() { + return $this->_footer; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/Footer.php b/PHPWord/PHPWord/Section/Footer.php new file mode 100644 index 0000000..90cc9a4 --- /dev/null +++ b/PHPWord/PHPWord/Section/Footer.php @@ -0,0 +1,201 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Footer + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Footer { + + /** + * Footer Count + * + * @var int + */ + private $_footerCount; + + /** + * Footer Relation ID + * + * @var int + */ + private $_rId; + + /** + * Footer Element Collection + * + * @var int + */ + private $_elementCollection = array(); + + /** + * Create a new Footer + */ + public function __construct($sectionCount) { + $this->_footerCount = $sectionCount; + } + + /** + * Add a Text Element + * + * @param string $text + * @param mixed $styleFont + * @param mixed $styleParagraph + * @return PHPWord_Section_Text + */ + public function addText($text, $styleFont = null, $styleParagraph = null) { + $givenText = utf8_encode($text); + $text = new PHPWord_Section_Text($givenText, $styleFont, $styleParagraph); + $this->_elementCollection[] = $text; + return $text; + } + + /** + * Add a TextBreak Element + * + * @param int $count + */ + public function addTextBreak($count = 1) { + for($i=1; $i<=$count; $i++) { + $this->_elementCollection[] = new PHPWord_Section_TextBreak(); + } + } + + /** + * Create a new TextRun + * + * @return PHPWord_Section_TextRun + */ + public function createTextRun($styleParagraph = null) { + $textRun = new PHPWord_Section_TextRun($styleParagraph); + $this->_elementCollection[] = $textRun; + return $textRun; + } + + /** + * Add a Table Element + * + * @param mixed $style + * @return PHPWord_Section_Table + */ + public function addTable($style = null) { + $table = new PHPWord_Section_Table('footer', $this->_footerCount, $style); + $this->_elementCollection[] = $table; + return $table; + } + + /** + * Add a Image Element + * + * @param string $src + * @param mixed $style + * @return PHPWord_Section_Image + */ + public function addImage($src, $style = null) { + $image = new PHPWord_Section_Image($src, $style); + + if(!is_null($image->getSource())) { + $rID = PHPWord_Media::addFooterMediaElement($this->_footerCount, $src); + $image->setRelationId($rID); + + $this->_elementCollection[] = $image; + return $image; + } else { + trigger_error('Src does not exist or invalid image type.', E_ERROR); + } + } + + /** + * Add a by PHP created Image Element + * + * @param string $link + * @param mixed $style + * @return PHPWord_Section_MemoryImage + */ + public function addMemoryImage($link, $style = null) { + $memoryImage = new PHPWord_Section_MemoryImage($link, $style); + if(!is_null($memoryImage->getSource())) { + $rID = PHPWord_Media::addFooterMediaElement($this->_footerCount, $link, $memoryImage); + $memoryImage->setRelationId($rID); + + $this->_elementCollection[] = $memoryImage; + return $memoryImage; + } else { + trigger_error('Unsupported image type.'); + } + } + + /** + * Add a PreserveText Element + * + * @param string $text + * @param mixed $styleFont + * @param mixed $styleParagraph + * @return PHPWord_Section_Footer_PreserveText + */ + public function addPreserveText($text, $styleFont = null, $styleParagraph = null) { + $text = utf8_encode($text); + $ptext = new PHPWord_Section_Footer_PreserveText($text, $styleFont, $styleParagraph); + $this->_elementCollection[] = $ptext; + return $ptext; + } + + /** + * Get Footer Relation ID + */ + public function getRelationId() { + return $this->_rId; + } + + /** + * Set Footer Relation ID + * + * @param int $rId + */ + public function setRelationId($rId) { + $this->_rId = $rId; + } + + /** + * Get all Footer Elements + */ + public function getElements() { + return $this->_elementCollection; + } + + /** + * Get Footer Count + */ + public function getFooterCount() { + return $this->_footerCount; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/Footer/PreserveText.php b/PHPWord/PHPWord/Section/Footer/PreserveText.php new file mode 100644 index 0000000..05442c2 --- /dev/null +++ b/PHPWord/PHPWord/Section/Footer/PreserveText.php @@ -0,0 +1,128 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Footer_PreserveText + * + * @category PHPWord + * @package PHPWord_Section_Footer + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Footer_PreserveText { + + /** + * Text content + * + * @var string + */ + private $_text; + + /** + * Text style + * + * @var PHPWord_Style_Font + */ + private $_styleFont; + + /** + * Paragraph style + * + * @var PHPWord_Style_Font + */ + private $_styleParagraph; + + + /** + * Create a new Preserve Text Element + * + * @var string $text + * @var mixed $style + */ + public function __construct($text = null, $styleFont = null, $styleParagraph = null) { + // Set font style + if(is_array($styleFont)) { + $this->_styleFont = new PHPWord_Style_Font('text'); + + foreach($styleFont as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_styleFont->setStyleValue($key, $value); + } + } else { + $this->_styleFont = $styleFont; + } + + // Set paragraph style + if(is_array($styleParagraph)) { + $this->_styleParagraph = new PHPWord_Style_Paragraph(); + + foreach($styleParagraph as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_styleParagraph->setStyleValue($key, $value); + } + } else { + $this->_styleParagraph = $styleParagraph; + } + + $pattern = '/({.*?})/'; + $this->_text = preg_split($pattern, $text, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); + + return $this; + } + + /** + * Get Text style + * + * @return PHPWord_Style_Font + */ + public function getFontStyle() { + return $this->_styleFont; + } + + /** + * Get Paragraph style + * + * @return PHPWord_Style_Paragraph + */ + public function getParagraphStyle() { + return $this->_styleParagraph; + } + + /** + * Get Text content + * + * @return string + */ + public function getText() { + return $this->_text; + } +} +?> diff --git a/PHPWord/PHPWord/Section/Header.php b/PHPWord/PHPWord/Section/Header.php new file mode 100644 index 0000000..5ea9919 --- /dev/null +++ b/PHPWord/PHPWord/Section/Header.php @@ -0,0 +1,222 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Header + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Header { + + /** + * Header Count + * + * @var int + */ + private $_headerCount; + + /** + * Header Relation ID + * + * @var int + */ + private $_rId; + + /** + * Header Element Collection + * + * @var int + */ + private $_elementCollection = array(); + + /** + * Create a new Header + */ + public function __construct($sectionCount) { + $this->_headerCount = $sectionCount; + } + + /** + * Add a Text Element + * + * @param string $text + * @param mixed $styleFont + * @param mixed $styleParagraph + * @return PHPWord_Section_Text + */ + public function addText($text, $styleFont = null, $styleParagraph = null) { + $givenText = utf8_encode($text); + $text = new PHPWord_Section_Text($givenText, $styleFont, $styleParagraph); + $this->_elementCollection[] = $text; + return $text; + } + + /** + * Add a TextBreak Element + * + * @param int $count + */ + public function addTextBreak($count = 1) { + for($i=1; $i<=$count; $i++) { + $this->_elementCollection[] = new PHPWord_Section_TextBreak(); + } + } + + /** + * Create a new TextRun + * + * @return PHPWord_Section_TextRun + */ + public function createTextRun($styleParagraph = null) { + $textRun = new PHPWord_Section_TextRun($styleParagraph); + $this->_elementCollection[] = $textRun; + return $textRun; + } + + /** + * Add a Table Element + * + * @param mixed $style + * @return PHPWord_Section_Table + */ + public function addTable($style = null) { + $table = new PHPWord_Section_Table('header', $this->_headerCount, $style); + $this->_elementCollection[] = $table; + return $table; + } + + /** + * Add a Image Element + * + * @param string $src + * @param mixed $style + * @return PHPWord_Section_Image + */ + public function addImage($src, $style = null) { + $image = new PHPWord_Section_Image($src, $style); + + if(!is_null($image->getSource())) { + $rID = PHPWord_Media::addHeaderMediaElement($this->_headerCount, $src); + $image->setRelationId($rID); + + $this->_elementCollection[] = $image; + return $image; + } else { + trigger_error('Src does not exist or invalid image type.', E_ERROR); + } + } + + /** + * Add a by PHP created Image Element + * + * @param string $link + * @param mixed $style + * @return PHPWord_Section_MemoryImage + */ + public function addMemoryImage($link, $style = null) { + $memoryImage = new PHPWord_Section_MemoryImage($link, $style); + if(!is_null($memoryImage->getSource())) { + $rID = PHPWord_Media::addHeaderMediaElement($this->_headerCount, $link, $memoryImage); + $memoryImage->setRelationId($rID); + + $this->_elementCollection[] = $memoryImage; + return $memoryImage; + } else { + trigger_error('Unsupported image type.'); + } + } + + /** + * Add a PreserveText Element + * + * @param string $text + * @param mixed $styleFont + * @param mixed $styleParagraph + * @return PHPWord_Section_Footer_PreserveText + */ + public function addPreserveText($text, $styleFont = null, $styleParagraph = null) { + $text = utf8_encode($text); + $ptext = new PHPWord_Section_Footer_PreserveText($text, $styleFont, $styleParagraph); + $this->_elementCollection[] = $ptext; + return $ptext; + } + + /** + * Add a Watermark Element + * + * @param string $src + * @param mixed $style + * @return PHPWord_Section_Image + */ + public function addWatermark($src, $style = null) { + $image = new PHPWord_Section_Image($src, $style, true); + + if(!is_null($image->getSource())) { + $rID = PHPWord_Media::addHeaderMediaElement($this->_headerCount, $src); + $image->setRelationId($rID); + + $this->_elementCollection[] = $image; + return $image; + } else { + trigger_error('Src does not exist or invalid image type.', E_ERROR); + } + } + + /** + * Get Header Relation ID + */ + public function getRelationId() { + return $this->_rId; + } + + /** + * Set Header Relation ID + * + * @param int $rId + */ + public function setRelationId($rId) { + $this->_rId = $rId; + } + + /** + * Get all Header Elements + */ + public function getElements() { + return $this->_elementCollection; + } + + /** + * Get Header Count + */ + public function getHeaderCount() { + return $this->_headerCount; + } +} +?> diff --git a/PHPWord/PHPWord/Section/Image.php b/PHPWord/PHPWord/Section/Image.php new file mode 100644 index 0000000..6eb2a41 --- /dev/null +++ b/PHPWord/PHPWord/Section/Image.php @@ -0,0 +1,168 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Image + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Image { + + /** + * Image Src + * + * @var string + */ + private $_src; + + /** + * Image Style + * + * @var PHPWord_Style_Image + */ + private $_style; + + /** + * Image Relation ID + * + * @var string + */ + private $_rId; + + /** + * Is Watermark + * + * @var bool + */ + private $_isWatermark; + + + /** + * Create a new Image + * + * @param string $src + * @param mixed style + */ + public function __construct($src, $style = null, $isWatermark = false) { + $_supportedImageTypes = array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'tif', 'tiff'); + + $inf = pathinfo($src); + $ext = strtolower($inf['extension']); + + if(file_exists($src) && in_array($ext, $_supportedImageTypes)) { + $this->_src = $src; + $this->_isWatermark = $isWatermark; + $this->_style = new PHPWord_Style_Image(); + + if(!is_null($style) && is_array($style)) { + foreach($style as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_style->setStyleValue($key, $value); + } + } + + if($this->_style->getWidth() == null && $this->_style->getHeight() == null) { + $imgData = getimagesize($this->_src); + $this->_style->setWidth($imgData[0]); + $this->_style->setHeight($imgData[1]); + } + + return $this; + } else { + return false; + } + } + + /** + * Get Image style + * + * @return PHPWord_Style_Image + */ + public function getStyle() { + return $this->_style; + } + + /** + * Get Image Relation ID + * + * @return int + */ + public function getRelationId() { + return $this->_rId; + } + + /** + * Set Image Relation ID + * + * @param int $rId + */ + public function setRelationId($rId) { + $this->_rId = $rId; + } + + /** + * Get Image Source + * + * @return string + */ + public function getSource() { + return $this->_src; + } + + /** + * Get Image Media ID + * + * @return string + */ + public function getMediaId() { + return md5($this->_src); + } + + /** + * Get IsWatermark + * + * @return int + */ + public function getIsWatermark() { + return $this->_isWatermark; + } + + /** + * Set IsWatermark + * + * @param bool $pValue + */ + public function setIsWatermark($pValue) { + $this->_isWatermark = $pValue; + } +} +?> diff --git a/PHPWord/PHPWord/Section/Link.php b/PHPWord/PHPWord/Section/Link.php new file mode 100644 index 0000000..5c582fa --- /dev/null +++ b/PHPWord/PHPWord/Section/Link.php @@ -0,0 +1,171 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Link + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Link { + + /** + * Link source + * + * @var string + */ + private $_linkSrc; + + /** + * Link name + * + * @var string + */ + private $_linkName; + + /** + * Link Relation ID + * + * @var string + */ + private $_rId; + + /** + * Link style + * + * @var PHPWord_Style_Font + */ + private $_styleFont; + + /** + * Paragraph style + * + * @var PHPWord_Style_Font + */ + private $_styleParagraph; + + + /** + * Create a new Link Element + * + * @var string $linkSrc + * @var string $linkName + * @var mixed $styleFont + * @var mixed $styleParagraph + */ + public function __construct($linkSrc, $linkName = null, $styleFont = null, $styleParagraph = null) { + $this->_linkSrc = $linkSrc; + $this->_linkName = $linkName; + + // Set font style + if(is_array($styleFont)) { + $this->_styleFont = new PHPWord_Style_Font('text'); + + foreach($styleFont as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_styleFont->setStyleValue($key, $value); + } + } else { + $this->_styleFont = $styleFont; + } + + // Set paragraph style + if(is_array($styleParagraph)) { + $this->_styleParagraph = new PHPWord_Style_Paragraph(); + + foreach($styleParagraph as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_styleParagraph->setStyleValue($key, $value); + } + } else { + $this->_styleParagraph = $styleParagraph; + } + + return $this; + } + + /** + * Get Link Relation ID + * + * @return int + */ + public function getRelationId() { + return $this->_rId; + } + + /** + * Set Link Relation ID + * + * @param int $rId + */ + public function setRelationId($rId) { + $this->_rId = $rId; + } + + /** + * Get Link source + * + * @return string + */ + public function getLinkSrc() { + return $this->_linkSrc; + } + + /** + * Get Link name + * + * @return string + */ + public function getLinkName() { + return $this->_linkName; + } + + /** + * Get Text style + * + * @return PHPWord_Style_Font + */ + public function getFontStyle() { + return $this->_styleFont; + } + + /** + * Get Paragraph style + * + * @return PHPWord_Style_Paragraph + */ + public function getParagraphStyle() { + return $this->_styleParagraph; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/ListItem.php b/PHPWord/PHPWord/Section/ListItem.php new file mode 100644 index 0000000..c509252 --- /dev/null +++ b/PHPWord/PHPWord/Section/ListItem.php @@ -0,0 +1,104 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_ListItem + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_ListItem { + + /** + * ListItem Style + * + * @var PHPWord_Style_ListItem + */ + private $_style; + + /** + * Textrun + * + * @var PHPWord_Section_Text + */ + private $_textObject; + + /** + * ListItem Depth + * + * @var int + */ + private $_depth; + + + /** + * Create a new ListItem + * + * @param string $text + * @param int $depth + * @param mixed $styleText + * @param mixed $styleList + */ + public function __construct($text, $depth = 0, $styleFont = null, $styleList = null, $styleParagraph = null) { + $this->_style = new PHPWord_Style_ListItem(); + $this->_textObject = new PHPWord_Section_Text($text, $styleFont, $styleParagraph); + $this->_depth = $depth; + + if(!is_null($styleList) && is_array($styleList)) { + foreach($styleList as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_style->setStyleValue($key, $value); + } + } + } + + /** + * Get ListItem style + */ + public function getStyle() { + return $this->_style; + } + + /** + * Get ListItem TextRun + */ + public function getTextObject() { + return $this->_textObject; + } + + /** + * Get ListItem depth + */ + public function getDepth() { + return $this->_depth; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/MemoryImage.php b/PHPWord/PHPWord/Section/MemoryImage.php new file mode 100644 index 0000000..8e5d840 --- /dev/null +++ b/PHPWord/PHPWord/Section/MemoryImage.php @@ -0,0 +1,231 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_MemoryImage + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_MemoryImage { + + /** + * Image Src + * + * @var string + */ + private $_src; + + /** + * Image Style + * + * @var PHPWord_Style_Image + */ + private $_style; + + /** + * Image Relation ID + * + * @var string + */ + private $_rId; + + /** + * Image Type + * + * @var string + */ + private $_imageType; + + /** + * Image Create function + * + * @var string + */ + private $_imageCreateFunc; + + /** + * Image function + * + * @var string + */ + private $_imageFunc; + + /** + * Image function + * + * @var string + */ + private $_imageExtension; + + + /** + * Create a new Image + * + * @param string $src + * @param mixed style + */ + public function __construct($src, $style = null) { + $imgData = getimagesize($src); + $this->_imageType = $imgData['mime']; + + $_supportedImageTypes = array('image/jpeg', 'image/gif', 'image/png'); + + if(in_array($this->_imageType, $_supportedImageTypes)) { + $this->_src = $src; + $this->_style = new PHPWord_Style_Image(); + + if(!is_null($style) && is_array($style)) { + foreach($style as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_style->setStyleValue($key, $value); + } + } + + if($this->_style->getWidth() == null && $this->_style->getHeight() == null) { + $this->_style->setWidth($imgData[0]); + $this->_style->setHeight($imgData[1]); + } + + $this->_setFunctions(); + + return $this; + } else { + return false; + } + } + + /** + * Set Functions + */ + private function _setFunctions() { + switch($this->_imageType) { + case 'image/png': + $this->_imageCreateFunc = 'imagecreatefrompng'; + $this->_imageFunc = 'imagepng'; + $this->_imageExtension = 'png'; + break; + case 'image/gif': + $this->_imageCreateFunc = 'imagecreatefromgif'; + $this->_imageFunc = 'imagegif'; + $this->_imageExtension = 'gif'; + break; + case 'image/jpeg': case 'image/jpg': + $this->_imageCreateFunc = 'imagecreatefromjpeg'; + $this->_imageFunc = 'imagejpeg'; + $this->_imageExtension = 'jpg'; + break; + } + } + + + /** + * Get Image style + * + * @return PHPWord_Style_Image + */ + public function getStyle() { + return $this->_style; + } + + /** + * Get Image Relation ID + * + * @return int + */ + public function getRelationId() { + return $this->_rId; + } + + /** + * Set Image Relation ID + * + * @param int $rId + */ + public function setRelationId($rId) { + $this->_rId = $rId; + } + + /** + * Get Image Source + * + * @return string + */ + public function getSource() { + return $this->_src; + } + + /** + * Get Image Media ID + * + * @return string + */ + public function getMediaId() { + return md5($this->_src); + } + + /** + * Get Image Type + * + * @return string + */ + public function getImageType() { + return $this->_imageType; + } + + /** + * Get Image Create Function + * + * @return string + */ + public function getImageCreateFunction() { + return $this->_imageCreateFunc; + } + + /** + * Get Image Function + * + * @return string + */ + public function getImageFunction() { + return $this->_imageFunc; + } + + /** + * Get Image Extension + * + * @return string + */ + public function getImageExtension() { + return $this->_imageExtension; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/Object.php b/PHPWord/PHPWord/Section/Object.php new file mode 100644 index 0000000..7aad4ba --- /dev/null +++ b/PHPWord/PHPWord/Section/Object.php @@ -0,0 +1,175 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Object + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Object { + + /** + * Ole-Object Src + * + * @var string + */ + private $_src; + + /** + * Image Style + * + * @var PHPWord_Style_Image + */ + private $_style; + + /** + * Object Relation ID + * + * @var int + */ + private $_rId; + + /** + * Image Relation ID + * + * @var int + */ + private $_rIdImg; + + /** + * Object ID + * + * @var int + */ + private $_objId; + + + /** + * Create a new Ole-Object Element + * + * @param string $src + * @param mixed $style + */ + public function __construct($src, $style = null) { + $_supportedObjectTypes = array('xls', 'doc', 'ppt'); + $inf = pathinfo($src); + + if(file_exists($src) && in_array($inf['extension'], $_supportedObjectTypes)) { + $this->_src = $src; + $this->_style = new PHPWord_Style_Image(); + + if(!is_null($style) && is_array($style)) { + foreach($style as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_style->setStyleValue($key, $value); + } + } + + return $this; + } else { + return false; + } + } + + /** + * Get Image style + * + * @return PHPWord_Style_Image + */ + public function getStyle() { + return $this->_style; + } + + /** + * Get Source + * + * @return string + */ + public function getSource() { + return $this->_src; + } + + /** + * Get Object Relation ID + * + * @return int + */ + public function getRelationId() { + return $this->_rId; + } + + /** + * Set Object Relation ID + * + * @param int $rId + */ + public function setRelationId($rId) { + $this->_rId = $rId; + } + + /** + * Get Image Relation ID + * + * @return int + */ + public function getImageRelationId() { + return $this->_rIdImg; + } + + /** + * Set Image Relation ID + * + * @param int $rId + */ + public function setImageRelationId($rId) { + $this->_rIdImg = $rId; + } + + /** + * Get Object ID + * + * @return int + */ + public function getObjectId() { + return $this->_objId; + } + + /** + * Set Object ID + * + * @param int $objId + */ + public function setObjectId($objId) { + $this->_objId = $objId; + } +} +?> diff --git a/PHPWord/PHPWord/Section/PageBreak.php b/PHPWord/PHPWord/Section/PageBreak.php new file mode 100644 index 0000000..48b41c7 --- /dev/null +++ b/PHPWord/PHPWord/Section/PageBreak.php @@ -0,0 +1,45 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_PageBreak + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_PageBreak { + + /** + * Create a new PageBreak Element + */ + public function __construct() { + // nothing + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/Settings.php b/PHPWord/PHPWord/Section/Settings.php new file mode 100644 index 0000000..84dcc8e --- /dev/null +++ b/PHPWord/PHPWord/Section/Settings.php @@ -0,0 +1,515 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Settings + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Settings { + + /** + * Default Page Size Width + * + * @var int + */ + private $_defaultPageSizeW = 11906; + + /** + * Default Page Size Height + * + * @var int + */ + private $_defaultPageSizeH = 16838; + + /** + * Page Orientation + * + * @var string + */ + private $_orientation; + + /** + * Page Margin Top + * + * @var int + */ + private $_marginTop; + + /** + * Page Margin Left + * + * @var int + */ + private $_marginLeft; + + /** + * Page Margin Right + * + * @var int + */ + private $_marginRight; + + /** + * Page Margin Bottom + * + * @var int + */ + private $_marginBottom; + + /** + * Page Size Width + * + * @var int + */ + private $_pageSizeW; + + /** + * Page Size Height + * + * @var int + */ + private $_pageSizeH; + + /** + * Page Border Top Size + * + * @var int + */ + private $_borderTopSize; + + /** + * Page Border Top Color + * + * @var int + */ + private $_borderTopColor; + + /** + * Page Border Left Size + * + * @var int + */ + private $_borderLeftSize; + + /** + * Page Border Left Color + * + * @var int + */ + private $_borderLeftColor; + + /** + * Page Border Right Size + * + * @var int + */ + private $_borderRightSize; + + /** + * Page Border Right Color + * + * @var int + */ + private $_borderRightColor; + + /** + * Page Border Bottom Size + * + * @var int + */ + private $_borderBottomSize; + + /** + * Page Border Bottom Color + * + * @var int + */ + private $_borderBottomColor; + + /** + * Create new Section Settings + */ + public function __construct() { + $this->_orientation = null; + $this->_marginTop = 1418; + $this->_marginLeft = 1418; + $this->_marginRight = 1418; + $this->_marginBottom = 1134; + $this->_pageSizeW = $this->_defaultPageSizeW; + $this->_pageSizeH = $this->_defaultPageSizeH; + $this->_borderTopSize = null; + $this->_borderTopColor = null; + $this->_borderLeftSize = null; + $this->_borderLeftColor = null; + $this->_borderRightSize = null; + $this->_borderRightColor = null; + $this->_borderBottomSize = null; + $this->_borderBottomColor = null; + } + + /** + * Set Setting Value + * + * @param string $key + * @param string $value + */ + public function setSettingValue($key, $value) { + if($key == '_orientation' && $value == 'landscape') { + $this->setLandscape(); + } elseif($key == '_orientation' && is_null($value)) { + $this->setPortrait(); + } elseif($key == '_borderSize') { + $this->setBorderSize($value); + } elseif($key == '_borderColor') { + $this->setBorderColor($value); + } else { + $this->$key = $value; + } + } + + /** + * Get Margin Top + * + * @return int + */ + public function getMarginTop() { + return $this->_marginTop; + } + + /** + * Set Margin Top + * + * @param int $pValue + */ + public function setMarginTop($pValue = '') { + $this->_marginTop = $pValue; + return $this; + } + + /** + * Get Margin Left + * + * @return int + */ + public function getMarginLeft() { + return $this->_marginLeft; + } + + /** + * Set Margin Left + * + * @param int $pValue + */ + public function setMarginLeft($pValue = '') { + $this->_marginLeft = $pValue; + return $this; + } + + /** + * Get Margin Right + * + * @return int + */ + public function getMarginRight() { + return $this->_marginRight; + } + + /** + * Set Margin Right + * + * @param int $pValue + */ + public function setMarginRight($pValue = '') { + $this->_marginRight = $pValue; + return $this; + } + + /** + * Get Margin Bottom + * + * @return int + */ + public function getMarginBottom() { + return $this->_marginBottom; + } + + /** + * Set Margin Bottom + * + * @param int $pValue + */ + public function setMarginBottom($pValue = '') { + $this->_marginBottom = $pValue; + return $this; + } + + /** + * Set Landscape Orientation + */ + public function setLandscape() { + $this->_orientation = 'landscape'; + $this->_pageSizeW = $this->_defaultPageSizeH; + $this->_pageSizeH = $this->_defaultPageSizeW; + } + + /** + * Set Portrait Orientation + */ + public function setPortrait() { + $this->_orientation = null; + $this->_pageSizeW = $this->_defaultPageSizeW; + $this->_pageSizeH = $this->_defaultPageSizeH; + } + + /** + * Get Page Size Width + * + * @return int + */ + public function getPageSizeW() { + return $this->_pageSizeW; + } + + /** + * Get Page Size Height + * + * @return int + */ + public function getPageSizeH() { + return $this->_pageSizeH; + } + + /** + * Get Page Orientation + * + * @return string + */ + public function getOrientation() { + return $this->_orientation; + } + + /** + * Set Border Size + * + * @param int $pValue + */ + public function setBorderSize($pValue = null) { + $this->_borderTopSize = $pValue; + $this->_borderLeftSize = $pValue; + $this->_borderRightSize = $pValue; + $this->_borderBottomSize = $pValue; + } + + /** + * Get Border Size + * + * @return array + */ + public function getBorderSize() { + $t = $this->getBorderTopSize(); + $l = $this->getBorderLeftSize(); + $r = $this->getBorderRightSize(); + $b = $this->getBorderBottomSize(); + + return array($t, $l, $r, $b); + } + + /** + * Set Border Color + * + * @param string $pValue + */ + public function setBorderColor($pValue = null) { + $this->_borderTopColor = $pValue; + $this->_borderLeftColor = $pValue; + $this->_borderRightColor = $pValue; + $this->_borderBottomColor = $pValue; + } + + /** + * Get Border Color + * + * @return array + */ + public function getBorderColor() { + $t = $this->getBorderTopColor(); + $l = $this->getBorderLeftColor(); + $r = $this->getBorderRightColor(); + $b = $this->getBorderBottomColor(); + + return array($t, $l, $r, $b); + } + + /** + * Set Border Top Size + * + * @param int $pValue + */ + public function setBorderTopSize($pValue = null) { + $this->_borderTopSize = $pValue; + } + + /** + * Get Border Top Size + * + * @return int + */ + public function getBorderTopSize() { + return $this->_borderTopSize; + } + + /** + * Set Border Top Color + * + * @param string $pValue + */ + public function setBorderTopColor($pValue = null) { + $this->_borderTopColor = $pValue; + } + + /** + * Get Border Top Color + * + * @return string + */ + public function getBorderTopColor() { + return $this->_borderTopColor; + } + + /** + * Set Border Left Size + * + * @param int $pValue + */ + public function setBorderLeftSize($pValue = null) { + $this->_borderLeftSize = $pValue; + } + + /** + * Get Border Left Size + * + * @return int + */ + public function getBorderLeftSize() { + return $this->_borderLeftSize; + } + + /** + * Set Border Left Color + * + * @param string $pValue + */ + public function setBorderLeftColor($pValue = null) { + $this->_borderLeftColor = $pValue; + } + + /** + * Get Border Left Color + * + * @return string + */ + public function getBorderLeftColor() { + return $this->_borderLeftColor; + } + + /** + * Set Border Right Size + * + * @param int $pValue + */ + public function setBorderRightSize($pValue = null) { + $this->_borderRightSize = $pValue; + } + + /** + * Get Border Right Size + * + * @return int + */ + public function getBorderRightSize() { + return $this->_borderRightSize; + } + + /** + * Set Border Right Color + * + * @param string $pValue + */ + public function setBorderRightColor($pValue = null) { + $this->_borderRightColor = $pValue; + } + + /** + * Get Border Right Color + * + * @return string + */ + public function getBorderRightColor() { + return $this->_borderRightColor; + } + + /** + * Set Border Bottom Size + * + * @param int $pValue + */ + public function setBorderBottomSize($pValue = null) { + $this->_borderBottomSize = $pValue; + } + + /** + * Get Border Bottom Size + * + * @return int + */ + public function getBorderBottomSize() { + return $this->_borderBottomSize; + } + + /** + * Set Border Bottom Color + * + * @param string $pValue + */ + public function setBorderBottomColor($pValue = null) { + $this->_borderBottomColor = $pValue; + } + + /** + * Get Border Bottom Color + * + * @return string + */ + public function getBorderBottomColor() { + return $this->_borderBottomColor; + } +} +?> diff --git a/PHPWord/PHPWord/Section/Table.php b/PHPWord/PHPWord/Section/Table.php new file mode 100644 index 0000000..783c877 --- /dev/null +++ b/PHPWord/PHPWord/Section/Table.php @@ -0,0 +1,152 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Table + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Table { + + /** + * Table style + * + * @var PHPWord_Style_Table + */ + private $_style; + + /** + * Table rows + * + * @var array + */ + private $_rows = array(); + + /** + * Row heights + * + * @var array + */ + private $_rowHeights = array(); + + /** + * Table holder + * + * @var string + */ + private $_insideOf = null; + + /** + * Table holder count + * + * @var array + */ + private $_pCount; + + + /** + * Create a new table + * + * @param string $insideOf + * @param int $pCount + * @param mixed $style + */ + public function __construct($insideOf, $pCount, $style = null) { + $this->_insideOf = $insideOf; + $this->_pCount = $pCount; + + if(!is_null($style)) { + if(is_array($style)) { + $this->_style = new PHPWord_Style_Table(); + + foreach($style as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_style->setStyleValue($key, $value); + } + } else { + $this->_style = $style; + } + } + } + + /** + * Add a row + * + * @param int $height + */ + public function addRow($height = null) { + $this->_rows[] = array(); + $this->_rowHeights[] = $height; + } + + /** + * Add a cell + * + * @param int $width + * @param mixed $style + * @return PHPWord_Section_Table_Cell + */ + public function addCell($width, $style = null) { + $cell = new PHPWord_Section_Table_Cell($this->_insideOf, $this->_pCount, $width, $style); + $i = count($this->_rows) - 1; + $this->_rows[$i][] = $cell; + return $cell; + } + + /** + * Get all rows + * + * @return array + */ + public function getRows() { + return $this->_rows; + } + + /** + * Get all row heights + * + * @return array + */ + public function getRowHeights() { + return $this->_rowHeights; + } + + /** + * Get table style + * + * @return PHPWord_Style_Table + */ + public function getStyle() { + return $this->_style; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/Table/Cell.php b/PHPWord/PHPWord/Section/Table/Cell.php new file mode 100644 index 0000000..2cf03a6 --- /dev/null +++ b/PHPWord/PHPWord/Section/Table/Cell.php @@ -0,0 +1,319 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Table_Cell + * + * @category PHPWord + * @package PHPWord_Section_Table + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Table_Cell { + + /** + * Cell Width + * + * @var int + */ + private $_width = null; + + /** + * Cell Style + * + * @var PHPWord_Style_Cell + */ + private $_style; + + /** + * Cell Element Collection + * + * @var array + */ + private $_elementCollection = array(); + + /** + * Table holder + * + * @var string + */ + private $_insideOf; + + /** + * Section/Header/Footer count + * + * @var int + */ + private $_pCount; + + + /** + * Create a new Table Cell + * + * @param string $insideOf + * @param int $pCount + * @param int $width + * @param mixed $style + */ + public function __construct($insideOf, $pCount, $width = null, $style = null) { + $this->_insideOf = $insideOf; + $this->_pCount = $pCount; + $this->_width = $width; + + if(!is_null($style)) { + if(is_array($style)) { + $this->_style = new PHPWord_Style_Cell(); + + foreach($style as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_style->setStyleValue($key, $value); + } + } else { + $this->_style = $style; + } + } + } + + /** + * Add a Text Element + * + * @param string $text + * @param mixed $style + * @return PHPWord_Section_Text + */ + public function addText($text, $styleFont = null, $styleParagraph = null) { + $text = utf8_encode($text); + $text = new PHPWord_Section_Text($text, $styleFont, $styleParagraph); + $this->_elementCollection[] = $text; + return $text; + } + + /** + * Add a Link Element + * + * @param string $linkSrc + * @param string $linkName + * @param mixed $style + * @return PHPWord_Section_Link + */ + public function addLink($linkSrc, $linkName = null, $style = null) { + if($this->_insideOf == 'section') { + $linkSrc = utf8_encode($linkSrc); + if(!is_null($linkName)) { + $linkName = utf8_encode($linkName); + } + + $link = new PHPWord_Section_Link($linkSrc, $linkName, $style); + $rID = PHPWord_Media::addSectionLinkElement($linkSrc); + $link->setRelationId($rID); + + $this->_elementCollection[] = $link; + return $link; + } else { + trigger_error('Unsupported Link header / footer reference'); + return false; + } + } + + /** + * Add a TextBreak Element + * + * @param int $count + */ + public function addTextBreak() { + $this->_elementCollection[] = new PHPWord_Section_TextBreak(); + } + + /** + * Add a ListItem Element + * + * @param string $text + * @param int $depth + * @param mixed $styleText + * @param mixed $styleList + * @return PHPWord_Section_ListItem + */ + public function addListItem($text, $depth = 0, $styleText = null, $styleList = null) { + $text = utf8_encode($text); + $listItem = new PHPWord_Section_ListItem($text, $depth, $styleText, $styleList); + $this->_elementCollection[] = $listItem; + return $listItem; + } + + /** + * Add a Image Element + * + * @param string $src + * @param mixed $style + * @return PHPWord_Section_Image + */ + public function addImage($src, $style = null) { + $image = new PHPWord_Section_Image($src, $style); + + if(!is_null($image->getSource())) { + if($this->_insideOf == 'section') { + $rID = PHPWord_Media::addSectionMediaElement($src, 'image'); + } elseif($this->_insideOf == 'header') { + $rID = PHPWord_Media::addHeaderMediaElement($this->_pCount, $src); + } elseif($this->_insideOf == 'footer') { + $rID = PHPWord_Media::addFooterMediaElement($this->_pCount, $src); + } + $image->setRelationId($rID); + + $this->_elementCollection[] = $image; + return $image; + } else { + trigger_error('Source does not exist or unsupported image type.'); + } + } + + /** + * Add a by PHP created Image Element + * + * @param string $link + * @param mixed $style + * @return PHPWord_Section_MemoryImage + */ + public function addMemoryImage($link, $style = null) { + $memoryImage = new PHPWord_Section_MemoryImage($link, $style); + if(!is_null($memoryImage->getSource())) { + if($this->_insideOf == 'section') { + $rID = PHPWord_Media::addSectionMediaElement($link, 'image', $memoryImage); + } elseif($this->_insideOf == 'header') { + $rID = PHPWord_Media::addHeaderMediaElement($this->_pCount, $link, $memoryImage); + } elseif($this->_insideOf == 'footer') { + $rID = PHPWord_Media::addFooterMediaElement($this->_pCount, $link, $memoryImage); + } + $memoryImage->setRelationId($rID); + + $this->_elementCollection[] = $memoryImage; + return $memoryImage; + } else { + trigger_error('Unsupported image type.'); + } + } + + /** + * Add a OLE-Object Element + * + * @param string $src + * @param mixed $style + * @return PHPWord_Section_Object + */ + public function addObject($src, $style = null) { + $object = new PHPWord_Section_Object($src, $style); + + if(!is_null($object->getSource())) { + $inf = pathinfo($src); + $ext = $inf['extension']; + if(strlen($ext) == 4 && strtolower(substr($ext, -1)) == 'x') { + $ext = substr($ext, 0, -1); + } + + $iconSrc = PHPWORD_BASE_PATH . 'PHPWord/_staticDocParts/'; + if(!file_exists($iconSrc.'_'.$ext.'.png')) { + $iconSrc = $iconSrc.'_default.png'; + } else { + $iconSrc .= '_'.$ext.'.png'; + } + + $rIDimg = PHPWord_Media::addSectionMediaElement($iconSrc, 'image'); + $data = PHPWord_Media::addSectionMediaElement($src, 'oleObject'); + $rID = $data[0]; + $objectId = $data[1]; + + $object->setRelationId($rID); + $object->setObjectId($objectId); + $object->setImageRelationId($rIDimg); + + $this->_elementCollection[] = $object; + return $object; + } else { + trigger_error('Source does not exist or unsupported object type.'); + } + } + + /** + * Add a PreserveText Element + * + * @param string $text + * @param mixed $styleFont + * @param mixed $styleParagraph + * @return PHPWord_Section_Footer_PreserveText + */ + public function addPreserveText($text, $styleFont = null, $styleParagraph = null) { + if($this->_insideOf == 'footer' || $this->_insideOf == 'header') { + $text = utf8_encode($text); + $ptext = new PHPWord_Section_Footer_PreserveText($text, $styleFont, $styleParagraph); + $this->_elementCollection[] = $ptext; + return $ptext; + } else { + trigger_error('addPreserveText only supported in footer/header.'); + } + } + + /** + * Create a new TextRun + * + * @return PHPWord_Section_TextRun + */ + public function createTextRun($styleParagraph = null) { + $textRun = new PHPWord_Section_TextRun($styleParagraph); + $this->_elementCollection[] = $textRun; + return $textRun; + } + + /** + * Get all Elements + * + * @return array + */ + public function getElements() { + return $this->_elementCollection; + } + + /** + * Get Cell Style + * + * @return PHPWord_Style_Cell + */ + public function getStyle() { + return $this->_style; + } + + /** + * Get Cell width + * + * @return int + */ + public function getWidth() { + return $this->_width; + } +} +?> diff --git a/PHPWord/PHPWord/Section/Text.php b/PHPWord/PHPWord/Section/Text.php new file mode 100644 index 0000000..7ad15ee --- /dev/null +++ b/PHPWord/PHPWord/Section/Text.php @@ -0,0 +1,127 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Text + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Text { + + /** + * Text content + * + * @var string + */ + private $_text; + + /** + * Text style + * + * @var PHPWord_Style_Font + */ + private $_styleFont; + + /** + * Paragraph style + * + * @var PHPWord_Style_Font + */ + private $_styleParagraph; + + + /** + * Create a new Text Element + * + * @var string $text + * @var mixed $style + */ + public function __construct($text = null, $styleFont = null, $styleParagraph = null) { + // Set font style + if(is_array($styleFont)) { + $this->_styleFont = new PHPWord_Style_Font('text'); + + foreach($styleFont as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_styleFont->setStyleValue($key, $value); + } + } else { + $this->_styleFont = $styleFont; + } + + // Set paragraph style + if(is_array($styleParagraph)) { + $this->_styleParagraph = new PHPWord_Style_Paragraph(); + + foreach($styleParagraph as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_styleParagraph->setStyleValue($key, $value); + } + } else { + $this->_styleParagraph = $styleParagraph; + } + + $this->_text = $text; + + return $this; + } + + /** + * Get Text style + * + * @return PHPWord_Style_Font + */ + public function getFontStyle() { + return $this->_styleFont; + } + + /** + * Get Paragraph style + * + * @return PHPWord_Style_Paragraph + */ + public function getParagraphStyle() { + return $this->_styleParagraph; + } + + /** + * Get Text content + * + * @return string + */ + public function getText() { + return $this->_text; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/TextBreak.php b/PHPWord/PHPWord/Section/TextBreak.php new file mode 100644 index 0000000..92a7b49 --- /dev/null +++ b/PHPWord/PHPWord/Section/TextBreak.php @@ -0,0 +1,45 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_TextBreak + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_TextBreak { + + /** + * Create a new TextBreak Element + */ + public function __construct() { + // nothing + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/TextRun.php b/PHPWord/PHPWord/Section/TextRun.php new file mode 100644 index 0000000..4f5eece --- /dev/null +++ b/PHPWord/PHPWord/Section/TextRun.php @@ -0,0 +1,129 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_TextRun + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_TextRun { + + /** + * Paragraph style + * + * @var PHPWord_Style_Font + */ + private $_styleParagraph; + + /** + * Text collection + * + * @var array + */ + private $_elementCollection; + + + /** + * Create a new TextRun Element + */ + public function __construct($styleParagraph = null) { + $this->_elementCollection = array(); + + // Set paragraph style + if(is_array($styleParagraph)) { + $this->_styleParagraph = new PHPWord_Style_Paragraph(); + + foreach($styleParagraph as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->_styleParagraph->setStyleValue($key, $value); + } + } else { + $this->_styleParagraph = $styleParagraph; + } + } + + + /** + * Add a Text Element + * + * @var string $text + * @var mixed $styleFont + * @return PHPWord_Section_Text + */ + public function addText($text = null, $styleFont = null) { + $givenText = utf8_encode($text); + $text = new PHPWord_Section_Text($givenText, $styleFont); + $this->_elementCollection[] = $text; + return $text; + } + + /** + * Add a Link Element + * + * @param string $linkSrc + * @param string $linkName + * @param mixed $styleFont + * @return PHPWord_Section_Link + */ + public function addLink($linkSrc, $linkName = null, $styleFont = null) { + $linkSrc = utf8_encode($linkSrc); + if(!is_null($linkName)) { + $linkName = utf8_encode($linkName); + } + + $link = new PHPWord_Section_Link($linkSrc, $linkName, $styleFont); + $rID = PHPWord_Media::addSectionLinkElement($linkSrc); + $link->setRelationId($rID); + + $this->_elementCollection[] = $link; + return $link; + } + + /** + * Get TextRun content + * + * @return string + */ + public function getElements() { + return $this->_elementCollection; + } + + /** + * Get Paragraph style + * + * @return PHPWord_Style_Paragraph + */ + public function getParagraphStyle() { + return $this->_styleParagraph; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Section/Title.php b/PHPWord/PHPWord/Section/Title.php new file mode 100644 index 0000000..0956b06 --- /dev/null +++ b/PHPWord/PHPWord/Section/Title.php @@ -0,0 +1,145 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Section_Title + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Section_Title { + + /** + * Title Text content + * + * @var string + */ + private $_text; + + /** + * Title depth + * + * @var int + */ + private $_depth; + + /** + * Title anchor + * + * @var int + */ + private $_anchor; + + /** + * Title Bookmark ID + * + * @var int + */ + private $_bookmarkId; + + /** + * Title style + * + * @var string + */ + private $_style; + + + /** + * Create a new Title Element + * + * @var string $text + * @var int $depth + */ + public function __construct($text, $depth = 1, $style = null) { + if(!is_null($style)) { + $this->_style = $style; + } + + $this->_text = $text; + $this->_depth = $depth; + + return $this; + } + + /** + * Set Anchor + * + * @var int $anchor + */ + public function setAnchor($anchor) { + $this->_anchor = $anchor; + } + + /** + * Get Anchor + * + * @return int + */ + public function getAnchor() { + return $this->_anchor; + } + + /** + * Set Bookmark ID + * + * @var int $bookmarkId + */ + public function setBookmarkId($bookmarkId) { + $this->_bookmarkId = $bookmarkId; + } + + /** + * Get Anchor + * + * @return int + */ + public function getBookmarkId() { + return $this->_bookmarkId; + } + + /** + * Get Title Text content + * + * @return string + */ + public function getText() { + return $this->_text; + } + + /** + * Get Title style + * + * @return string + */ + public function getStyle() { + return $this->_style; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Shared/Drawing.php b/PHPWord/PHPWord/Shared/Drawing.php new file mode 100644 index 0000000..2e9a998 --- /dev/null +++ b/PHPWord/PHPWord/Shared/Drawing.php @@ -0,0 +1,102 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Shared_Drawing +{ + /** + * Convert pixels to EMU + * + * @param int $pValue Value in pixels + * @return int Value in EMU + */ + public static function pixelsToEMU($pValue = 0) { + return round($pValue * 9525); + } + + /** + * Convert EMU to pixels + * + * @param int $pValue Value in EMU + * @return int Value in pixels + */ + public static function EMUToPixels($pValue = 0) { + if ($pValue != 0) { + return round($pValue / 9525); + } else { + return 0; + } + } + + /** + * Convert pixels to points + * + * @param int $pValue Value in pixels + * @return int Value in points + */ + public static function pixelsToPoints($pValue = 0) { + return $pValue * 0.67777777; + } + + /** + * Convert points width to pixels + * + * @param int $pValue Value in points + * @return int Value in pixels + */ + public static function pointsToPixels($pValue = 0) { + if ($pValue != 0) { + return $pValue * 1.333333333; + } else { + return 0; + } + } + + /** + * Convert degrees to angle + * + * @param int $pValue Degrees + * @return int Angle + */ + public static function degreesToAngle($pValue = 0) { + return (int)round($pValue * 60000); + } + + /** + * Convert angle to degrees + * + * @param int $pValue Angle + * @return int Degrees + */ + public static function angleToDegrees($pValue = 0) { + if ($pValue != 0) { + return round($pValue / 60000); + } else { + return 0; + } + } +} diff --git a/PHPWord/PHPWord/Shared/File.php b/PHPWord/PHPWord/Shared/File.php new file mode 100644 index 0000000..fabaedf --- /dev/null +++ b/PHPWord/PHPWord/Shared/File.php @@ -0,0 +1,91 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Shared_File +{ + /** + * Verify if a file exists + * + * @param string $pFilename Filename + * @return bool + */ + public static function file_exists($pFilename) { + // Sick construction, but it seems that + // file_exists returns strange values when + // doing the original file_exists on ZIP archives... + if ( strtolower(substr($pFilename, 0, 3)) == 'zip' ) { + // Open ZIP file and verify if the file exists + $zipFile = substr($pFilename, 6, strpos($pFilename, '#') - 6); + $archiveFile = substr($pFilename, strpos($pFilename, '#') + 1); + + $zip = new ZipArchive(); + if ($zip->open($zipFile) === true) { + $returnValue = ($zip->getFromName($archiveFile) !== false); + $zip->close(); + return $returnValue; + } else { + return false; + } + } else { + // Regular file_exists + return file_exists($pFilename); + } + } + + /** + * Returns canonicalized absolute pathname, also for ZIP archives + * + * @param string $pFilename + * @return string + */ + public static function realpath($pFilename) { + // Returnvalue + $returnValue = ''; + + // Try using realpath() + $returnValue = realpath($pFilename); + + // Found something? + if ($returnValue == '' || is_null($returnValue)) { + $pathArray = split('/' , $pFilename); + while(in_array('..', $pathArray) && $pathArray[0] != '..') { + for ($i = 0; $i < count($pathArray); ++$i) { + if ($pathArray[$i] == '..' && $i > 0) { + unset($pathArray[$i]); + unset($pathArray[$i - 1]); + break; + } + } + } + $returnValue = implode('/', $pathArray); + } + + // Return + return $returnValue; + } +} diff --git a/PHPWord/PHPWord/Shared/Font.php b/PHPWord/PHPWord/Shared/Font.php new file mode 100644 index 0000000..aae4376 --- /dev/null +++ b/PHPWord/PHPWord/Shared/Font.php @@ -0,0 +1,72 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Shared_Font +{ + /** + * Calculate an (approximate) pixel size, based on a font points size + * + * @param int $fontSizeInPoints Font size (in points) + * @return int Font size (in pixels) + */ + public static function fontSizeToPixels($fontSizeInPoints = 12) { + return ((16 / 12) * $fontSizeInPoints); + } + + /** + * Calculate an (approximate) pixel size, based on inch size + * + * @param int $sizeInInch Font size (in inch) + * @return int Size (in pixels) + */ + public static function inchSizeToPixels($sizeInInch = 1) { + return ($sizeInInch * 96); + } + + /** + * Calculate an (approximate) pixel size, based on centimeter size + * + * @param int $sizeInCm Font size (in centimeters) + * @return int Size (in pixels) + */ + public static function centimeterSizeToPixels($sizeInCm = 1) { + return ($sizeInCm * 37.795275591); + } + + public static function centimeterSizeToTwips($sizeInCm = 1) { + return ($sizeInCm * 565.217); + } + + public static function inchSizeToTwips($sizeInInch = 1) { + return self::centimeterSizeToTwips($sizeInInch * 2.54); + } + + public static function pixelSizeToTwips($sizeInPixel = 1) { + return self::centimeterSizeToTwips($sizeInPixel / 37.795275591); + } +} diff --git a/PHPWord/PHPWord/Shared/String.php b/PHPWord/PHPWord/Shared/String.php new file mode 100644 index 0000000..6430922 --- /dev/null +++ b/PHPWord/PHPWord/Shared/String.php @@ -0,0 +1,263 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Shared_String +{ + /** + * Control characters array + * + * @var string[] + */ + private static $_controlCharacters = array(); + + /** + * Is mbstring extension avalable? + * + * @var boolean + */ + private static $_isMbstringEnabled; + + /** + * Is iconv extension avalable? + * + * @var boolean + */ + private static $_isIconvEnabled; + + /** + * Build control characters array + */ + private static function _buildControlCharacters() { + for ($i = 0; $i <= 19; ++$i) { + if ($i != 9 && $i != 10 && $i != 13) { + $find = '_x' . sprintf('%04s' , strtoupper(dechex($i))) . '_'; + $replace = chr($i); + self::$_controlCharacters[$find] = $replace; + } + } + } + + /** + * Get whether mbstring extension is available + * + * @return boolean + */ + public static function getIsMbstringEnabled() + { + if (isset(self::$_isMbstringEnabled)) { + return self::$_isMbstringEnabled; + } + + self::$_isMbstringEnabled = function_exists('mb_convert_encoding') ? + true : false; + + return self::$_isMbstringEnabled; + } + + /** + * Get whether iconv extension is available + * + * @return boolean + */ + public static function getIsIconvEnabled() + { + if (isset(self::$_isIconvEnabled)) { + return self::$_isIconvEnabled; + } + + self::$_isIconvEnabled = function_exists('iconv') ? + true : false; + + return self::$_isIconvEnabled; + } + + /** + * Convert from OpenXML escaped control character to PHP control character + * + * Excel 2007 team: + * ---------------- + * That's correct, control characters are stored directly in the shared-strings table. + * We do encode characters that cannot be represented in XML using the following escape sequence: + * _xHHHH_ where H represents a hexadecimal character in the character's value... + * So you could end up with something like _x0008_ in a string (either in a cell value (<v>) + * element or in the shared string <t> element. + * + * @param string $value Value to unescape + * @return string + */ + public static function ControlCharacterOOXML2PHP($value = '') { + if(empty(self::$_controlCharacters)) { + self::_buildControlCharacters(); + } + + return str_replace( array_keys(self::$_controlCharacters), array_values(self::$_controlCharacters), $value ); + } + + /** + * Convert from PHP control character to OpenXML escaped control character + * + * Excel 2007 team: + * ---------------- + * That's correct, control characters are stored directly in the shared-strings table. + * We do encode characters that cannot be represented in XML using the following escape sequence: + * _xHHHH_ where H represents a hexadecimal character in the character's value... + * So you could end up with something like _x0008_ in a string (either in a cell value (<v>) + * element or in the shared string <t> element. + * + * @param string $value Value to escape + * @return string + */ + public static function ControlCharacterPHP2OOXML($value = '') { + if(empty(self::$_controlCharacters)) { + self::_buildControlCharacters(); + } + + return str_replace( array_values(self::$_controlCharacters), array_keys(self::$_controlCharacters), $value ); + } + + /** + * Check if a string contains UTF8 data + * + * @param string $value + * @return boolean + */ + public static function IsUTF8($value = '') { + return utf8_encode(utf8_decode($value)) === $value; + } + + /** + * Formats a numeric value as a string for output in various output writers + * + * @param mixed $value + * @return string + */ + public static function FormatNumber($value) { + return number_format($value, 2, '.', ''); + } + + /** + * Converts a UTF-8 string into BIFF8 Unicode string data (8-bit string length) + * Writes the string using uncompressed notation, no rich text, no Asian phonetics + * If mbstring extension is not available, ASCII is assumed, and compressed notation is used + * although this will give wrong results for non-ASCII strings + * see OpenOffice.org's Documentation of the Microsoft Excel File Format, sect. 2.5.3 + * + * @param string $value UTF-8 encoded string + * @return string + */ + public static function UTF8toBIFF8UnicodeShort($value) + { + // character count + $ln = self::CountCharacters($value, 'UTF-8'); + + // option flags + $opt = (self::getIsMbstringEnabled() || self::getIsIconvEnabled()) ? + 0x0001 : 0x0000; + + // characters + $chars = self::ConvertEncoding($value, 'UTF-16LE', 'UTF-8'); + + $data = pack('CC', $ln, $opt) . $chars; + return $data; + } + + /** + * Converts a UTF-8 string into BIFF8 Unicode string data (16-bit string length) + * Writes the string using uncompressed notation, no rich text, no Asian phonetics + * If mbstring extension is not available, ASCII is assumed, and compressed notation is used + * although this will give wrong results for non-ASCII strings + * see OpenOffice.org's Documentation of the Microsoft Excel File Format, sect. 2.5.3 + * + * @param string $value UTF-8 encoded string + * @return string + */ + public static function UTF8toBIFF8UnicodeLong($value) + { + // character count + $ln = self::CountCharacters($value, 'UTF-8'); + + // option flags + $opt = (self::getIsMbstringEnabled() || self::getIsIconvEnabled()) ? + 0x0001 : 0x0000; + + // characters + $chars = self::ConvertEncoding($value, 'UTF-16LE', 'UTF-8'); + + $data = pack('vC', $ln, $opt) . $chars; + return $data; + } + + /** + * Convert string from one encoding to another. First try mbstring, then iconv, or no convertion + * + * @param string $value + * @param string $to Encoding to convert to, e.g. 'UTF-8' + * @param string $from Encoding to convert from, e.g. 'UTF-16LE' + * @return string + */ + public static function ConvertEncoding($value, $to, $from) + { + if (self::getIsMbstringEnabled()) { + $value = mb_convert_encoding($value, $to, $from); + return $value; + } + + if (self::getIsIconvEnabled()) { + $value = iconv($from, $to, $value); + return $value; + } + + // else, no conversion + return $value; + } + + /** + * Get character count. First try mbstring, then iconv, finally strlen + * + * @param string $value + * @param string $enc Encoding + * @return int Character count + */ + public static function CountCharacters($value, $enc = 'UTF-8') + { + if (self::getIsMbstringEnabled()) { + $count = mb_strlen($value, $enc); + return $count; + } + + if (self::getIsIconvEnabled()) { + $count = iconv_strlen($value, $enc); + return $count; + } + + // else strlen + $count = strlen($value); + return $count; + } + +} diff --git a/PHPWord/PHPWord/Shared/XMLWriter.php b/PHPWord/PHPWord/Shared/XMLWriter.php new file mode 100644 index 0000000..d16f981 --- /dev/null +++ b/PHPWord/PHPWord/Shared/XMLWriter.php @@ -0,0 +1,143 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +if(!defined('DATE_W3C')) { + define('DATE_W3C', 'Y-m-d\TH:i:sP'); +} + + +class PHPWord_Shared_XMLWriter { + /** Temporary storage method */ + const STORAGE_MEMORY = 1; + const STORAGE_DISK = 2; + + /** + * Internal XMLWriter + * + * @var XMLWriter + */ + private $_xmlWriter; + + /** + * Temporary filename + * + * @var string + */ + private $_tempFileName = ''; + + /** + * Create a new PHPPowerPoint_Shared_XMLWriter instance + * + * @param int $pTemporaryStorage Temporary storage location + * @param string $pTemporaryStorageFolder Temporary storage folder + */ + public function __construct($pTemporaryStorage = self::STORAGE_MEMORY, $pTemporaryStorageFolder = './') { + // Create internal XMLWriter + $this->_xmlWriter = new XMLWriter(); + + // Open temporary storage + if ($pTemporaryStorage == self::STORAGE_MEMORY) { + $this->_xmlWriter->openMemory(); + } else { + // Create temporary filename + $this->_tempFileName = @tempnam($pTemporaryStorageFolder, 'xml'); + + // Open storage + if ($this->_xmlWriter->openUri($this->_tempFileName) === false) { + // Fallback to memory... + $this->_xmlWriter->openMemory(); + } + } + + // Set default values + // proposed to be false in production version + $this->_xmlWriter->setIndent(true); + //$this->_xmlWriter->setIndent(false); + + // Set indent + // proposed to be '' in production version + $this->_xmlWriter->setIndentString(' '); + //$this->_xmlWriter->setIndentString(''); + } + + /** + * Destructor + */ + public function __destruct() { + // Desctruct XMLWriter + unset($this->_xmlWriter); + + // Unlink temporary files + if ($this->_tempFileName != '') { + @unlink($this->_tempFileName); + } + } + + /** + * Get written data + * + * @return $data + */ + public function getData() { + if ($this->_tempFileName == '') { + return $this->_xmlWriter->outputMemory(true); + } else { + $this->_xmlWriter->flush(); + return file_get_contents($this->_tempFileName); + } + } + + /** + * Catch function calls (and pass them to internal XMLWriter) + * + * @param unknown_type $function + * @param unknown_type $args + */ + public function __call($function, $args) { + try { + @call_user_func_array(array($this->_xmlWriter, $function), $args); + } catch (Exception $ex) { + // Do nothing! + } + } + + /** + * Fallback method for writeRaw, introduced in PHP 5.2 + * + * @param string $text + * @return string + */ + public function writeRaw($text) + { + if (isset($this->_xmlWriter) && is_object($this->_xmlWriter) && (method_exists($this->_xmlWriter, 'writeRaw'))) { + return $this->_xmlWriter->writeRaw($text); + } + + return $this->text($text); + } +} diff --git a/PHPWord/PHPWord/Shared/ZipStreamWrapper.php b/PHPWord/PHPWord/Shared/ZipStreamWrapper.php new file mode 100644 index 0000000..9243f6f --- /dev/null +++ b/PHPWord/PHPWord/Shared/ZipStreamWrapper.php @@ -0,0 +1,176 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** Register new zip wrapper */ +PHPWord_Shared_ZipStreamWrapper::register(); + + +class PHPWord_Shared_ZipStreamWrapper { + /** + * Internal ZipAcrhive + * + * @var ZipAcrhive + */ + private $_archive; + + /** + * Filename in ZipAcrhive + * + * @var string + */ + private $_fileNameInArchive = ''; + + /** + * Position in file + * + * @var int + */ + private $_position = 0; + + /** + * Data + * + * @var mixed + */ + private $_data = ''; + + /** + * Register wrapper + */ + public static function register() { + @stream_wrapper_unregister("zip"); + @stream_wrapper_register("zip", __CLASS__); + } + + /** + * Open stream + */ + public function stream_open($path, $mode, $options, &$opened_path) { + // Check for mode + if ($mode{0} != 'r') { + throw new Exception('Mode ' . $mode . ' is not supported. Only read mode is supported.'); + } + + // Parse URL + $url = @parse_url($path); + + // Fix URL + if (!is_array($url)) { + $url['host'] = substr($path, strlen('zip://')); + $url['path'] = ''; + } + if (strpos($url['host'], '#') !== false) { + if (!isset($url['fragment'])) { + $url['fragment'] = substr($url['host'], strpos($url['host'], '#') + 1) . $url['path']; + $url['host'] = substr($url['host'], 0, strpos($url['host'], '#')); + unset($url['path']); + } + } else { + $url['host'] = $url['host'] . $url['path']; + unset($url['path']); + } + + // Open archive + $this->_archive = new ZipArchive(); + $this->_archive->open($url['host']); + + $this->_fileNameInArchive = $url['fragment']; + $this->_position = 0; + $this->_data = $this->_archive->getFromName( $this->_fileNameInArchive ); + + return true; + } + + /** + * Stat stream + */ + public function stream_stat() { + return $this->_archive->statName( $this->_fileNameInArchive ); + } + + /** + * Read stream + */ + function stream_read($count) { + $ret = substr($this->_data, $this->_position, $count); + $this->_position += strlen($ret); + return $ret; + } + + /** + * Tell stream + */ + public function stream_tell() { + return $this->_position; + } + + /** + * EOF stream + */ + public function stream_eof() { + return $this->_position >= strlen($this->_data); + } + + /** + * Seek stream + */ + public function stream_seek($offset, $whence) { + switch ($whence) { + case SEEK_SET: + if ($offset < strlen($this->_data) && $offset >= 0) { + $this->_position = $offset; + return true; + } else { + return false; + } + break; + + case SEEK_CUR: + if ($offset >= 0) { + $this->_position += $offset; + return true; + } else { + return false; + } + break; + + case SEEK_END: + if (strlen($this->_data) + $offset >= 0) { + $this->_position = strlen($this->_data) + $offset; + return true; + } else { + return false; + } + break; + + default: + return false; + } + } +} +?> diff --git a/PHPWord/PHPWord/Style.php b/PHPWord/PHPWord/Style.php new file mode 100644 index 0000000..fd675d3 --- /dev/null +++ b/PHPWord/PHPWord/Style.php @@ -0,0 +1,151 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style + * + * @category PHPWord + * @package PHPWord_Style + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style { + + /** + * Style Elements + * + * @var array + */ + private static $_styleElements = array(); + + + /** + * Add a paragraph style + * + * @param string $styleName + * @param array $styles + */ + public static function addParagraphStyle($styleName, $styles) { + if(!array_key_exists($styleName, self::$_styleElements)) { + $style = new PHPWord_Style_Paragraph(); + foreach($styles as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $style->setStyleValue($key, $value); + } + + self::$_styleElements[$styleName] = $style; + } + } + + /** + * Add a font style + * + * @param string $styleName + * @param array $styleFont + * @param array $styleParagraph + */ + public static function addFontStyle($styleName, $styleFont, $styleParagraph = null) { + if(!array_key_exists($styleName, self::$_styleElements)) { + $font = new PHPWord_Style_Font('text', $styleParagraph); + foreach($styleFont as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $font->setStyleValue($key, $value); + } + self::$_styleElements[$styleName] = $font; + } + } + + /** + * Add a link style + * + * @param string $styleName + * @param array $styles + */ + public static function addLinkStyle($styleName, $styles) { + if(!array_key_exists($styleName, self::$_styleElements)) { + $style = new PHPWord_Style_Font('link'); + foreach($styles as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $style->setStyleValue($key, $value); + } + + self::$_styleElements[$styleName] = $style; + } + } + + /** + * Add a table style + * + * @param string $styleName + * @param array $styles + */ + public static function addTableStyle($styleName, $styleTable, $styleFirstRow = null, $styleLastRow = null) { + if(!array_key_exists($styleName, self::$_styleElements)) { + $style = new PHPWord_Style_TableFull($styleTable, $styleFirstRow, $styleLastRow); + + self::$_styleElements[$styleName] = $style; + } + } + + /** + * Add a title style + * + * @param string $styleName + * @param array $styleFont + * @param array $styleParagraph + */ + public static function addTitleStyle($titleCount, $styleFont, $styleParagraph = null) { + $styleName = 'Heading_'.$titleCount; + if(!array_key_exists($styleName, self::$_styleElements)) { + $font = new PHPWord_Style_Font('title', $styleParagraph); + foreach($styleFont as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $font->setStyleValue($key, $value); + } + + self::$_styleElements[$styleName] = $font; + } + } + + /** + * Get all styles + * + * @return PHPWord_Style_Font[] + */ + public static function getStyles() { + return self::$_styleElements; + } +} +?> diff --git a/PHPWord/PHPWord/Style/Cell.php b/PHPWord/PHPWord/Style/Cell.php new file mode 100644 index 0000000..a09b306 --- /dev/null +++ b/PHPWord/PHPWord/Style/Cell.php @@ -0,0 +1,291 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style_Cell + * + * @category PHPWord + * @package PHPWord_Style + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style_Cell { + + const TEXT_DIR_BTLR = 'btLr'; + const TEXT_DIR_TBRL = 'tbRl'; + + /** + * Vertical align + * + * @var string + */ + private $_valign; + + /** + * Text Direction + * + * @var string + */ + private $_textDirection; + + /** + * Background-Color + * + * @var string + */ + private $_bgColor; + + /** + * Border Top Size + * + * @var int + */ + private $_borderTopSize; + + /** + * Border Top Color + * + * @var string + */ + private $_borderTopColor; + + /** + * Border Left Size + * + * @var int + */ + private $_borderLeftSize; + + /** + * Border Left Color + * + * @var string + */ + private $_borderLeftColor; + + /** + * Border Right Size + * + * @var int + */ + private $_borderRightSize; + + /** + * Border Right Color + * + * @var string + */ + private $_borderRightColor; + + /** + * Border Bottom Size + * + * @var int + */ + private $_borderBottomSize; + + /** + * Border Bottom Color + * + * @var string + */ + private $_borderBottomColor; + + /** + * Border Default Color + * + * @var string + */ + private $_defaultBorderColor; + + + /** + * Create a new Cell Style + */ + public function __construct() { + $this->_valign = null; + $this->_textDirection = null; + $this->_bgColor = null; + $this->_borderTopSize = null; + $this->_borderTopColor = null; + $this->_borderLeftSize = null; + $this->_borderLeftColor = null; + $this->_borderRightSize = null; + $this->_borderRightColor = null; + $this->_borderBottomSize = null; + $this->_borderBottomColor = null; + $this->_defaultBorderColor = '000000'; + } + + /** + * Set style value + * + * @var string $key + * @var mixed $value + */ + public function setStyleValue($key, $value) { + if($key == '_borderSize') { + $this->setBorderSize($value); + } elseif($key == '_borderColor') { + $this->setBorderColor($value); + } else { + $this->$key = $value; + } + } + + public function getVAlign() { + return $this->_valign; + } + + public function setVAlign($pValue = null) { + $this->_valign = $pValue; + } + + public function getTextDirection() { + return $this->_textDirection; + } + + public function setTextDirection($pValue = null) { + $this->_textDirection = $pValue; + } + + public function getBgColor() { + return $this->_bgColor; + } + + public function setBgColor($pValue = null) { + $this->_bgColor = $pValue; + } + + public function setHeight($pValue = null) { + $this->_height = $pValue; + } + + public function setBorderSize($pValue = null) { + $this->_borderTopSize = $pValue; + $this->_borderLeftSize = $pValue; + $this->_borderRightSize = $pValue; + $this->_borderBottomSize = $pValue; + } + + public function getBorderSize() { + $t = $this->getBorderTopSize(); + $l = $this->getBorderLeftSize(); + $r = $this->getBorderRightSize(); + $b = $this->getBorderBottomSize(); + + return array($t, $l, $r, $b); + } + + public function setBorderColor($pValue = null) { + $this->_borderTopColor = $pValue; + $this->_borderLeftColor = $pValue; + $this->_borderRightColor = $pValue; + $this->_borderBottomColor = $pValue; + } + + public function getBorderColor() { + $t = $this->getBorderTopColor(); + $l = $this->getBorderLeftColor(); + $r = $this->getBorderRightColor(); + $b = $this->getBorderBottomColor(); + + return array($t, $l, $r, $b); + } + + public function setBorderTopSize($pValue = null) { + $this->_borderTopSize = $pValue; + } + + public function getBorderTopSize() { + return $this->_borderTopSize; + } + + public function setBorderTopColor($pValue = null) { + $this->_borderTopColor = $pValue; + } + + public function getBorderTopColor() { + return $this->_borderTopColor; + } + + + public function setBorderLeftSize($pValue = null) { + $this->_borderLeftSize = $pValue; + } + + public function getBorderLeftSize() { + return $this->_borderLeftSize; + } + + public function setBorderLeftColor($pValue = null) { + $this->_borderLeftColor = $pValue; + } + + public function getBorderLeftColor() { + return $this->_borderLeftColor; + } + + + public function setBorderRightSize($pValue = null) { + $this->_borderRightSize = $pValue; + } + + public function getBorderRightSize() { + return $this->_borderRightSize; + } + + public function setBorderRightColor($pValue = null) { + $this->_borderRightColor = $pValue; + } + + public function getBorderRightColor() { + return $this->_borderRightColor; + } + + + public function setBorderBottomSize($pValue = null) { + $this->_borderBottomSize = $pValue; + } + + public function getBorderBottomSize() { + return $this->_borderBottomSize; + } + + public function setBorderBottomColor($pValue = null) { + $this->_borderBottomColor = $pValue; + } + + public function getBorderBottomColor() { + return $this->_borderBottomColor; + } + + public function getDefaultBorderColor() { + return $this->_defaultBorderColor; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Style/Font.php b/PHPWord/PHPWord/Style/Font.php new file mode 100644 index 0000000..9bb2f46 --- /dev/null +++ b/PHPWord/PHPWord/Style/Font.php @@ -0,0 +1,261 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style_Font + * + * @category PHPWord + * @package PHPWord_Style + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style_Font { + + const UNDERLINE_NONE = 'none'; + const UNDERLINE_DASH = 'dash'; + const UNDERLINE_DASHHEAVY = 'dashHeavy'; + const UNDERLINE_DASHLONG = 'dashLong'; + const UNDERLINE_DASHLONGHEAVY = 'dashLongHeavy'; + const UNDERLINE_DOUBLE = 'dbl'; + const UNDERLINE_DOTHASH = 'dotDash'; + const UNDERLINE_DOTHASHHEAVY = 'dotDashHeavy'; + const UNDERLINE_DOTDOTDASH = 'dotDotDash'; + const UNDERLINE_DOTDOTDASHHEAVY = 'dotDotDashHeavy'; + const UNDERLINE_DOTTED = 'dotted'; + const UNDERLINE_DOTTEDHEAVY = 'dottedHeavy'; + const UNDERLINE_HEAVY = 'heavy'; + const UNDERLINE_SINGLE = 'single'; + const UNDERLINE_WAVY = 'wavy'; + const UNDERLINE_WAVYDOUBLE = 'wavyDbl'; + const UNDERLINE_WAVYHEAVY = 'wavyHeavy'; + const UNDERLINE_WORDS = 'words'; + + const FGCOLOR_YELLOW = 'yellow'; + const FGCOLOR_LIGHTGREEN = 'green'; + const FGCOLOR_CYAN = 'cyan'; + const FGCOLOR_MAGENTA = 'magenta'; + const FGCOLOR_BLUE = 'blue'; + const FGCOLOR_RED = 'red'; + const FGCOLOR_DARKBLUE = 'darkBlue'; + const FGCOLOR_DARKCYAN = 'darkCyan'; + const FGCOLOR_DARKGREEN = 'darkGreen'; + const FGCOLOR_DARKMAGENTA = 'darkMagenta'; + const FGCOLOR_DARKRED = 'darkRed'; + const FGCOLOR_DARKYELLOW = 'darkYellow'; + const FGCOLOR_DARKGRAY = 'darkGray'; + const FGCOLOR_LIGHTGRAY = 'lightGray'; + const FGCOLOR_BLACK = 'black'; + + /** + * Font style type + * + * @var string + */ + private $_type; + + /** + * Paragraph Style + * + * @var PHPWord_Style_Paragraph + */ + private $_paragraphStyle; + + private $_size; + private $_name; + private $_bold; + private $_italic; + private $_superScript; + private $_subScript; + private $_underline; + private $_strikethrough; + private $_color; + private $_fgColor; + + public function __construct($type = 'text', $styleParagraph = null) { + $this->_type = $type; + $this->_name = 'Arial'; + $this->_size = 20; + $this->_bold = false; + $this->_italic = false; + $this->_superScript = false; + $this->_subScript = false; + $this->_underline = PHPWord_Style_Font::UNDERLINE_NONE; + $this->_strikethrough = false; + $this->_color = '000000'; + $this->_fgColor = null; + + if(!is_null($styleParagraph)) { + $paragraph = new PHPWord_Style_Paragraph(); + foreach($styleParagraph as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $paragraph->setStyleValue($key, $value); + } + $this->_paragraphStyle = $paragraph; + } else { + $this->_paragraphStyle = null; + } + } + + public function getName() { + return $this->_name; + } + + public function setStyleValue($key, $value) { + if($key == '_size') { + $value *= 2; + } + $this->$key = $value; + } + + public function setName($pValue = 'Arial') { + if($pValue == '') { + $pValue = 'Arial'; + } + $this->_name = $pValue; + return $this; + } + + public function getSize() { + return $this->_size; + } + + public function setSize($pValue = 20) { + if($pValue == '') { + $pValue = 20; + } + $this->_size = ($pValue*2); + return $this; + } + + public function getBold() { + return $this->_bold; + } + + public function setBold($pValue = false) { + if($pValue == '') { + $pValue = false; + } + $this->_bold = $pValue; + return $this; + } + + public function getItalic() { + return $this->_italic; + } + + public function setItalic($pValue = false) { + if($pValue == '') { + $pValue = false; + } + $this->_italic = $pValue; + return $this; + } + + public function getSuperScript() { + return $this->_superScript; + } + + public function setSuperScript($pValue = false) { + if($pValue == '') { + $pValue = false; + } + $this->_superScript = $pValue; + $this->_subScript = !$pValue; + return $this; + } + + public function getSubScript() { + return $this->_subScript; + } + + public function setSubScript($pValue = false) { + if($pValue == '') { + $pValue = false; + } + $this->_subScript = $pValue; + $this->_superScript = !$pValue; + return $this; + } + + public function getUnderline() { + return $this->_underline; + } + + public function setUnderline($pValue = PHPWord_Style_Font::UNDERLINE_NONE) { + if ($pValue == '') { + $pValue = PHPWord_Style_Font::UNDERLINE_NONE; + } + $this->_underline = $pValue; + return $this; + } + + public function getStrikethrough() { + return $this->_strikethrough; + } + + public function setStrikethrough($pValue = false) { + if($pValue == '') { + $pValue = false; + } + $this->_strikethrough = $pValue; + return $this; + } + + public function getColor() { + return $this->_color; + } + + public function setColor($pValue = '000000') { + $this->_color = $pValue; + return $this; + } + + public function getFgColor() { + return $this->_fgColor; + } + + public function setFgColor($pValue = null) { + $this->_fgColor = $pValue; + return $this; + } + + public function getStyleType() { + return $this->_type; + } + + /** + * Get Paragraph style + * + * @return PHPWord_Style_Paragraph + */ + public function getParagraphStyle() { + return $this->_paragraphStyle; + } +} +?> diff --git a/PHPWord/PHPWord/Style/Image.php b/PHPWord/PHPWord/Style/Image.php new file mode 100644 index 0000000..c0007d3 --- /dev/null +++ b/PHPWord/PHPWord/Style/Image.php @@ -0,0 +1,130 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style_Image + * + * @category PHPWord + * @package PHPWord_Section + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style_Image { + + private $_width; + private $_height; + private $_align; + + /** + * Margin Top + * + * @var int + */ + private $_marginTop; + + /** + * Margin Left + * + * @var int + */ + private $_marginLeft; + + public function __construct() { + $this->_width = null; + $this->_height = null; + $this->_align = null; + $this->_marginTop = null; + $this->_marginLeft = null; + } + + public function setStyleValue($key, $value) { + $this->$key = $value; + } + + public function getWidth() { + return $this->_width; + } + + public function setWidth($pValue = null) { + $this->_width = $pValue; + } + + public function getHeight() { + return $this->_height; + } + + public function setHeight($pValue = null) { + $this->_height = $pValue; + } + + public function getAlign() { + return $this->_align; + } + + public function setAlign($pValue = null) { + $this->_align = $pValue; + } + + /** + * Get Margin Top + * + * @return int + */ + public function getMarginTop() { + return $this->_marginTop; + } + + /** + * Set Margin Top + * + * @param int $pValue + */ + public function setMarginTop($pValue = null) { + $this->_marginTop = $pValue; + return $this; + } + + /** + * Get Margin Left + * + * @return int + */ + public function getMarginLeft() { + return $this->_marginLeft; + } + + /** + * Set Margin Left + * + * @param int $pValue + */ + public function setMarginLeft($pValue = null) { + $this->_marginLeft = $pValue; + return $this; + } +} +?> diff --git a/PHPWord/PHPWord/Style/ListItem.php b/PHPWord/PHPWord/Style/ListItem.php new file mode 100644 index 0000000..f9da50e --- /dev/null +++ b/PHPWord/PHPWord/Style/ListItem.php @@ -0,0 +1,82 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style_ListItem + * + * @category PHPWord + * @package PHPWord_Style + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style_ListItem { + + const TYPE_NUMBER = 7; + const TYPE_NUMBER_NESTED = 8; + const TYPE_BULLET_FILLED = 3; + const TYPE_BULLET_EMPTY = 5; + const TYPE_SQUARE_FILLED = 1; + + /** + * List Type + */ + private $_listType; + + /** + * Create a new ListItem Style + */ + public function __construct() { + $this->_listType = PHPWord_Style_ListItem::TYPE_BULLET_FILLED; + } + + /** + * Set style value + * + * @param string $key + * @param string $value + */ + public function setStyleValue($key, $value) { + $this->$key = $value; + } + + /** + * Set List Type + * + * @param int $pValue + */ + public function setListType($pValue = PHPWord_Style_ListItem::TYPE_BULLET_FILLED) { + $this->_listType = $pValue; + } + + /** + * Get List Type + */ + public function getListType() { + return $this->_listType; + } +} +?> diff --git a/PHPWord/PHPWord/Style/Paragraph.php b/PHPWord/PHPWord/Style/Paragraph.php new file mode 100644 index 0000000..451d1e8 --- /dev/null +++ b/PHPWord/PHPWord/Style/Paragraph.php @@ -0,0 +1,174 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style_Paragraph + * + * @category PHPWord + * @package PHPWord_Style + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style_Paragraph { + + /** + * Paragraph alignment + * + * @var string + */ + private $_align; + + /** + * Space before Paragraph + * + * @var int + */ + private $_spaceBefore; + + /** + * Space after Paragraph + * + * @var int + */ + private $_spaceAfter; + + /** + * Spacing between breaks + * + * @var int + */ + private $_spacing; + + + /** + * New Paragraph Style + */ + public function __construct() { + $this->_align = null; + $this->_spaceBefore = null; + $this->_spaceAfter = null; + $this->_spacing = null; + } + + /** + * Set Style value + * + * @param string $key + * @param mixed $value + */ + public function setStyleValue($key, $value) { + if($key == '_spacing') { + $value += 240; // because line height of 1 matches 240 twips + } + $this->$key = $value; + } + + /** + * Get Paragraph Alignment + * + * @return string + */ + public function getAlign() { + return $this->_align; + } + + /** + * Set Paragraph Alignment + * + * @param string $pValue + * @return PHPWord_Style_Paragraph + */ + public function setAlign($pValue = null) { + if(strtolower($pValue) == 'justify') { + // justify becames both + $pValue = 'both'; + } + $this->_align = $pValue; + return $this; + } + + /** + * Get Space before Paragraph + * + * @return string + */ + public function getSpaceBefore() { + return $this->_spaceBefore; + } + + /** + * Set Space before Paragraph + * + * @param int $pValue + * @return PHPWord_Style_Paragraph + */ + public function setSpaceBefore($pValue = null) { + $this->_spaceBefore = $pValue; + return $this; + } + + /** + * Get Space after Paragraph + * + * @return string + */ + public function getSpaceAfter() { + return $this->_spaceAfter; + } + + /** + * Set Space after Paragraph + * + * @param int $pValue + * @return PHPWord_Style_Paragraph + */ + public function setSpaceAfter($pValue = null) { + $this->_spaceAfter = $pValue; + return $this; + } + + /** + * Get Spacing between breaks + * + * @return int + */ + public function getSpacing() { + return $this->_spacing; + } + + /** + * Set Spacing between breaks + * + * @param int $pValue + * @return PHPWord_Style_Paragraph + */ + public function setSpacing($pValue = null) { + $this->_spacing = $pValue; + return $this; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Style/TOC.php b/PHPWord/PHPWord/Style/TOC.php new file mode 100644 index 0000000..29b3130 --- /dev/null +++ b/PHPWord/PHPWord/Style/TOC.php @@ -0,0 +1,138 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style_TOC + * + * @category PHPWord + * @package PHPWord_Style + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style_TOC { + + const TABLEADER_DOT = 'dot'; + const TABLEADER_UNDERSCORE = 'underscore'; + const TABLEADER_LINE = 'hyphen'; + const TABLEADER_NONE = ''; + + /** + * Tab Leader + * + * @var string + */ + private $_tabLeader; + + /** + * Tab Position + * + * @var int + */ + private $_tabPos; + + /** + * Indent + * + * @var int + */ + private $_indent; + + + /** + * Create a new TOC Style + */ + public function __construct() { + $this->_tabPos = 9062; + $this->_tabLeader = PHPWord_Style_TOC::TABLEADER_DOT; + $this->_indent = 200; + } + + /** + * Get Tab Position + * + * @return int + */ + public function getTabPos() { + return $this->_tabPos; + } + + /** + * Set Tab Position + * + * @param int $pValue + */ + public function setTabPos($pValue) { + $this->_tabLeader = $pValue; + } + + /** + * Get Tab Leader + * + * @return string + */ + public function getTabLeader() { + return $this->_tabLeader; + } + + /** + * Set Tab Leader + * + * @param string $pValue + */ + public function setTabLeader($pValue = PHPWord_Style_TOC::TABLEADER_DOT) { + $this->_tabLeader = $pValue; + } + + /** + * Get Indent + * + * @return int + */ + public function getIndent() { + return $this->_indent; + } + + /** + * Set Indent + * + * @param string $pValue + */ + public function setIndent($pValue) { + $this->_indent = $pValue; + } + + /** + * Set style value + * + * @param string $key + * @param string $value + */ + public function setStyleValue($key, $value) { + $this->$key = $value; + } +} +?> diff --git a/PHPWord/PHPWord/Style/Table.php b/PHPWord/PHPWord/Style/Table.php new file mode 100644 index 0000000..a6f0806 --- /dev/null +++ b/PHPWord/PHPWord/Style/Table.php @@ -0,0 +1,83 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Style_Table { + + private $_cellMarginTop; + private $_cellMarginLeft; + private $_cellMarginRight; + private $_cellMarginBottom; + + public function __construct() { + $this->_cellMarginTop = null; + $this->_cellMarginLeft = null; + $this->_cellMarginRight = null; + $this->_cellMarginBottom = null; + } + + public function setStyleValue($key, $value) { + $this->$key = $value; + } + + public function setCellMarginTop($pValue = null) { + $this->_cellMarginTop = $pValue; + } + + public function getCellMarginTop() { + return $this->_cellMarginTop; + } + + public function setCellMarginLeft($pValue = null) { + $this->_cellMarginLeft = $pValue; + } + + public function getCellMarginLeft() { + return $this->_cellMarginLeft; + } + + public function setCellMarginRight($pValue = null) { + $this->_cellMarginRight = $pValue; + } + + public function getCellMarginRight() { + return $this->_cellMarginRight; + } + + public function setCellMarginBottom($pValue = null) { + $this->_cellMarginBottom = $pValue; + } + + public function getCellMarginBottom() { + return $this->_cellMarginBottom; + } + + public function getCellMargin() { + return array($this->_cellMarginTop, $this->_cellMarginLeft, $this->_cellMarginRight, $this->_cellMarginBottom); + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Style/TableFull.php b/PHPWord/PHPWord/Style/TableFull.php new file mode 100644 index 0000000..4140e63 --- /dev/null +++ b/PHPWord/PHPWord/Style/TableFull.php @@ -0,0 +1,442 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_Style_TableFull + * + * @category PHPWord + * @package PHPWord_Style + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_Style_TableFull { + + /** + * Style for first row + * + * @var PHPWord_Style_Table + */ + private $_firstRow = null; + + /** + * Cell Margin Top + * + * @var int + */ + private $_cellMarginTop = null; + + /** + * Cell Margin Left + * + * @var int + */ + private $_cellMarginLeft = null; + + /** + * Cell Margin Right + * + * @var int + */ + private $_cellMarginRight = null; + + /** + * Cell Margin Bottom + * + * @var int + */ + private $_cellMarginBottom = null; + + /** + * Background-Color + * + * @var string + */ + private $_bgColor; + + /** + * Border Top Size + * + * @var int + */ + private $_borderTopSize; + + /** + * Border Top Color + * + * @var string + */ + private $_borderTopColor; + + /** + * Border Left Size + * + * @var int + */ + private $_borderLeftSize; + + /** + * Border Left Color + * + * @var string + */ + private $_borderLeftColor; + + /** + * Border Right Size + * + * @var int + */ + private $_borderRightSize; + + /** + * Border Right Color + * + * @var string + */ + private $_borderRightColor; + + /** + * Border Bottom Size + * + * @var int + */ + private $_borderBottomSize; + + /** + * Border Bottom Color + * + * @var string + */ + private $_borderBottomColor; + + /** + * Border InsideH Size + * + * @var int + */ + private $_borderInsideHSize; + + /** + * Border InsideH Color + * + * @var string + */ + private $_borderInsideHColor; + + /** + * Border InsideV Size + * + * @var int + */ + private $_borderInsideVSize; + + /** + * Border InsideV Color + * + * @var string + */ + private $_borderInsideVColor; + + + /** + * Create a new TableFull Font + */ + public function __construct($styleTable = null, $styleFirstRow = null, $styleLastRow = null) { + + if(!is_null($styleFirstRow) && is_array($styleFirstRow)) { + $this->_firstRow = clone $this; + + unset($this->_firstRow->_firstRow); + unset($this->_firstRow->_cellMarginBottom); + unset($this->_firstRow->_cellMarginTop); + unset($this->_firstRow->_cellMarginLeft); + unset($this->_firstRow->_cellMarginRight); + unset($this->_firstRow->_borderInsideVColor); + unset($this->_firstRow->_borderInsideVSize); + unset($this->_firstRow->_borderInsideHColor); + unset($this->_firstRow->_borderInsideHSize); + foreach($styleFirstRow as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + + $this->_firstRow->setStyleValue($key, $value); + } + } + + if(!is_null($styleTable) && is_array($styleTable)) { + foreach($styleTable as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + $this->setStyleValue($key, $value); + } + } + } + + /** + * Set style value + * + * @param string $key + * @param mixed $value + */ + public function setStyleValue($key, $value) { + if($key == '_borderSize') { + $this->setBorderSize($value); + } elseif($key == '_borderColor') { + $this->setBorderColor($value); + } elseif($key == '_cellMargin') { + $this->setCellMargin($value); + } else { + $this->$key = $value; + } + } + + /** + * Get First Row Style + * + * @return PHPWord_Style_TableFull + */ + public function getFirstRow() { + return $this->_firstRow; + } + + /** + * Get Last Row Style + * + * @return PHPWord_Style_TableFull + */ + public function getLastRow() { + return $this->_lastRow; + } + + public function getBgColor() { + return $this->_bgColor; + } + + public function setBgColor($pValue = null) { + $this->_bgColor = $pValue; + } + + /** + * Set TLRBVH Border Size + * + * @param int $pValue + */ + public function setBorderSize($pValue = null) { + $this->_borderTopSize = $pValue; + $this->_borderLeftSize = $pValue; + $this->_borderRightSize = $pValue; + $this->_borderBottomSize = $pValue; + $this->_borderInsideHSize = $pValue; + $this->_borderInsideVSize = $pValue; + } + + /** + * Get TLRBVH Border Size + * + * @return array + */ + public function getBorderSize() { + $t = $this->getBorderTopSize(); + $l = $this->getBorderLeftSize(); + $r = $this->getBorderRightSize(); + $b = $this->getBorderBottomSize(); + $h = $this->getBorderInsideHSize(); + $v = $this->getBorderInsideVSize(); + + return array($t, $l, $r, $b, $h, $v); + } + + /** + * Set TLRBVH Border Color + */ + public function setBorderColor($pValue = null) { + $this->_borderTopColor = $pValue; + $this->_borderLeftColor = $pValue; + $this->_borderRightColor = $pValue; + $this->_borderBottomColor = $pValue; + $this->_borderInsideHColor = $pValue; + $this->_borderInsideVColor = $pValue; + } + + /** + * Get TLRB Border Color + * + * @return array + */ + public function getBorderColor() { + $t = $this->getBorderTopColor(); + $l = $this->getBorderLeftColor(); + $r = $this->getBorderRightColor(); + $b = $this->getBorderBottomColor(); + $h = $this->getBorderInsideHColor(); + $v = $this->getBorderInsideVColor(); + + return array($t, $l, $r, $b, $h, $v); + } + + public function setBorderTopSize($pValue = null) { + $this->_borderTopSize = $pValue; + } + + public function getBorderTopSize() { + return $this->_borderTopSize; + } + + public function setBorderTopColor($pValue = null) { + $this->_borderTopColor = $pValue; + } + + public function getBorderTopColor() { + return $this->_borderTopColor; + } + + public function setBorderLeftSize($pValue = null) { + $this->_borderLeftSize = $pValue; + } + + public function getBorderLeftSize() { + return $this->_borderLeftSize; + } + + public function setBorderLeftColor($pValue = null) { + $this->_borderLeftColor = $pValue; + } + + public function getBorderLeftColor() { + return $this->_borderLeftColor; + } + + public function setBorderRightSize($pValue = null) { + $this->_borderRightSize = $pValue; + } + + public function getBorderRightSize() { + return $this->_borderRightSize; + } + + public function setBorderRightColor($pValue = null) { + $this->_borderRightColor = $pValue; + } + + public function getBorderRightColor() { + return $this->_borderRightColor; + } + + public function setBorderBottomSize($pValue = null) { + $this->_borderBottomSize = $pValue; + } + + public function getBorderBottomSize() { + return $this->_borderBottomSize; + } + + public function setBorderBottomColor($pValue = null) { + $this->_borderBottomColor = $pValue; + } + + public function getBorderBottomColor() { + return $this->_borderBottomColor; + } + + public function setBorderInsideHColor($pValue = null) { + $this->_borderInsideHColor = $pValue; + } + + public function getBorderInsideHColor() { + return (isset($this->_borderInsideHColor)) ? $this->_borderInsideHColor : null; + } + + public function setBorderInsideVColor($pValue = null) { + $this->_borderInsideVColor = $pValue; + } + + public function getBorderInsideVColor() { + return (isset($this->_borderInsideVColor)) ? $this->_borderInsideVColor : null; + } + + public function setBorderInsideHSize($pValue = null) { + $this->_borderInsideHSize = $pValue; + } + + public function getBorderInsideHSize() { + return (isset($this->_borderInsideHSize)) ? $this->_borderInsideHSize : null; + } + + public function setBorderInsideVSize($pValue = null) { + $this->_borderInsideVSize = $pValue; + } + + public function getBorderInsideVSize() { + return (isset($this->_borderInsideVSize)) ? $this->_borderInsideVSize : null; + } + + public function setCellMarginTop($pValue = null) { + $this->_cellMarginTop = $pValue; + } + + public function getCellMarginTop() { + return $this->_cellMarginTop; + } + + public function setCellMarginLeft($pValue = null) { + $this->_cellMarginLeft = $pValue; + } + + public function getCellMarginLeft() { + return $this->_cellMarginLeft; + } + + public function setCellMarginRight($pValue = null) { + $this->_cellMarginRight = $pValue; + } + + public function getCellMarginRight() { + return $this->_cellMarginRight; + } + + public function setCellMarginBottom($pValue = null) { + $this->_cellMarginBottom = $pValue; + } + + public function getCellMarginBottom() { + return $this->_cellMarginBottom; + } + + public function setCellMargin($pValue = null) { + $this->_cellMarginTop = $pValue; + $this->_cellMarginLeft = $pValue; + $this->_cellMarginRight = $pValue; + $this->_cellMarginBottom = $pValue; + } + + public function getCellMargin() { + return array($this->_cellMarginTop, $this->_cellMarginLeft, $this->_cellMarginRight, $this->_cellMarginBottom); + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/TOC.php b/PHPWord/PHPWord/TOC.php new file mode 100644 index 0000000..ab4f05c --- /dev/null +++ b/PHPWord/PHPWord/TOC.php @@ -0,0 +1,155 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_TOC + * + * @category PHPWord + * @package PHPWord_TOC + * @copyright Copyright (c) 2011 PHPWord + */ +class PHPWord_TOC { + + /** + * Title Elements + * + * @var array + */ + private static $_titles = array(); + + /** + * TOC Style + * + * @var array + */ + private static $_styleTOC; + + /** + * Font Style + * + * @var array + */ + private static $_styleFont; + + /** + * Title Anchor + * + * @var array + */ + private static $_anchor = 252634154; + + /** + * Title Bookmark + * + * @var array + */ + private static $_bookmarkId = 0; + + + /** + * Create a new Table-of-Contents Element + * + * @param array $styleFont + * @param array $styleTOC + */ + public function __construct($styleFont = null, $styleTOC = null) { + self::$_styleTOC = new PHPWord_Style_TOC(); + + if(!is_null($styleTOC) && is_array($styleTOC)) { + foreach($styleTOC as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + self::$_styleTOC->setStyleValue($key, $value); + } + } + + if(!is_null($styleFont)) { + if(is_array($styleFont)) { + self::$_styleFont = new PHPWord_Style_Font(); + + foreach($styleFont as $key => $value) { + if(substr($key, 0, 1) != '_') { + $key = '_'.$key; + } + self::$_styleFont->setStyleValue($key, $value); + } + } else { + self::$_styleFont = $styleFont; + } + } + } + + /** + * Add a Title + * + * @return array + */ + public static function addTitle($text, $depth = 0) { + $anchor = '_Toc'.++self::$_anchor; + $bookmarkId = self::$_bookmarkId++; + + $title = array(); + $title['text'] = $text; + $title['depth'] = $depth; + $title['anchor'] = $anchor; + $title['bookmarkId'] = $bookmarkId; + + self::$_titles[] = $title; + + return array($anchor, $bookmarkId); + } + + /** + * Get all titles + * + * @return array + */ + public static function getTitles() { + return self::$_titles; + } + + /** + * Get TOC Style + * + * @return PHPWord_Style_TOC + */ + public static function getStyleTOC() { + return self::$_styleTOC; + } + + /** + * Get Font Style + * + * @return PHPWord_Style_Font + */ + public static function getStyleFont() { + return self::$_styleFont; + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Template.php b/PHPWord/PHPWord/Template.php new file mode 100644 index 0000000..150676f --- /dev/null +++ b/PHPWord/PHPWord/Template.php @@ -0,0 +1,115 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +/** + * PHPWord_DocumentProperties + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 2009 - 2011 PHPWord (http://www.codeplex.com/PHPWord) + */ +class PHPWord_Template { + + /** + * ZipArchive + * + * @var ZipArchive + */ + private $_objZip; + + /** + * Temporary Filename + * + * @var string + */ + private $_tempFileName; + + /** + * Document XML + * + * @var string + */ + private $_documentXML; + + + /** + * Create a new Template Object + * + * @param string $strFilename + */ + public function __construct($strFilename) { + $path = dirname($strFilename); + $this->_tempFileName = $path.DIRECTORY_SEPARATOR.time().'.docx'; + + copy($strFilename, $this->_tempFileName); // Copy the source File to the temp File + + $this->_objZip = new ZipArchive(); + $this->_objZip->open($this->_tempFileName); + + $this->_documentXML = $this->_objZip->getFromName('word/document.xml'); + } + + /** + * Set a Template value + * + * @param mixed $search + * @param mixed $replace + */ + public function setValue($search, $replace) { + if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') { + $search = '${'.$search.'}'; + } + + if(!is_array($replace)) { + $replace = utf8_encode($replace); + } + + $this->_documentXML = str_replace($search, $replace, $this->_documentXML); + } + + /** + * Save Template + * + * @param string $strFilename + */ + public function save($strFilename) { + if(file_exists($strFilename)) { + unlink($strFilename); + } + + $this->_objZip->addFromString('word/document.xml', $this->_documentXML); + + // Close zip file + if($this->_objZip->close() === false) { + throw new Exception('Could not close zip file.'); + } + + rename($this->_tempFileName, $strFilename); + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Writer/IWriter.php b/PHPWord/PHPWord/Writer/IWriter.php new file mode 100644 index 0000000..76db31e --- /dev/null +++ b/PHPWord/PHPWord/Writer/IWriter.php @@ -0,0 +1,39 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +interface PHPWord_Writer_IWriter +{ + /** + * Save PHPWord to file + * + * @param string $pFileName + * @throws Exception + */ + public function save($pFilename = null); +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Writer/Word2007.php b/PHPWord/PHPWord/Writer/Word2007.php new file mode 100644 index 0000000..0ad491d --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007.php @@ -0,0 +1,241 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007 implements PHPWord_Writer_IWriter { + + private $_document; + private $_writerParts; + private $_diskCachingDirectory; + private $_useDiskCaching = false; + private $_imageTypes = array(); + private $_objectTypes = array(); + + public function __construct(PHPWord $PHPWord = null) { + $this->_document = $PHPWord; + + $this->_diskCachingDirectory = './'; + + $this->_writerParts['contenttypes'] = new PHPWord_Writer_Word2007_ContentTypes(); + $this->_writerParts['rels'] = new PHPWord_Writer_Word2007_Rels(); + $this->_writerParts['docprops'] = new PHPWord_Writer_Word2007_DocProps(); + $this->_writerParts['documentrels'] = new PHPWord_Writer_Word2007_DocumentRels(); + $this->_writerParts['document'] = new PHPWord_Writer_Word2007_Document(); + $this->_writerParts['styles'] = new PHPWord_Writer_Word2007_Styles(); + $this->_writerParts['header'] = new PHPWord_Writer_Word2007_Header(); + $this->_writerParts['footer'] = new PHPWord_Writer_Word2007_Footer(); + + foreach($this->_writerParts as $writer) { + $writer->setParentWriter($this); + } + } + + public function save($pFilename = null) { + if(!is_null($this->_document)) { + + // If $pFilename is php://output or php://stdout, make it a temporary file... + $originalFilename = $pFilename; + if(strtolower($pFilename) == 'php://output' || strtolower($pFilename) == 'php://stdout') { + $pFilename = @tempnam('./', 'phppttmp'); + if($pFilename == '') { + $pFilename = $originalFilename; + } + } + + // Create new ZIP file and open it for writing + $objZip = new ZipArchive(); + + // Try opening the ZIP file + if($objZip->open($pFilename, ZIPARCHIVE::OVERWRITE) !== true) { + if($objZip->open($pFilename, ZIPARCHIVE::CREATE) !== true) { + throw new Exception("Could not open " . $pFilename . " for writing."); + } + } + + + $sectionElements = array(); + $_secElements = PHPWord_Media::getSectionMediaElements(); + foreach($_secElements as $element) { // loop through section media elements + if($element['type'] != 'hyperlink') { + $this->_addFileToPackage($objZip, $element); + } + $sectionElements[] = $element; + } + + $_hdrElements = PHPWord_Media::getHeaderMediaElements(); + foreach($_hdrElements as $_headerFile => $_hdrMedia) { // loop through headers + if(count($_hdrMedia) > 0) { + $objZip->addFromString('word/_rels/'.$_headerFile.'.xml.rels', $this->getWriterPart('documentrels')->writeHeaderFooterRels($_hdrMedia)); + foreach($_hdrMedia as $element) { // loop through header media elements + $this->_addFileToPackage($objZip, $element); + } + } + } + + $_ftrElements = PHPWord_Media::getFooterMediaElements(); + foreach($_ftrElements as $_footerFile => $_ftrMedia) { // loop through footers + if(count($_ftrMedia) > 0) { + $objZip->addFromString('word/_rels/'.$_footerFile.'.xml.rels', $this->getWriterPart('documentrels')->writeHeaderFooterRels($_ftrMedia)); + foreach($_ftrMedia as $element) { // loop through footers media elements + $this->_addFileToPackage($objZip, $element); + } + } + } + + + + $_cHdrs = 0; + $_cFtrs = 0; + $rID = PHPWord_Media::countSectionMediaElements() + 6; + $_sections = $this->_document->getSections(); + + foreach($_sections as $section) { + $_header = $section->getHeader(); + if(!is_null($_header)) { + $_cHdrs++; + $_header->setRelationId(++$rID); + $_headerCount = $_header->getHeaderCount(); + $_headerFile = 'header'.$_headerCount.'.xml'; + $sectionElements[] = array('target'=>$_headerFile, 'type'=>'header', 'rID'=>$rID); + $objZip->addFromString('word/'.$_headerFile, $this->getWriterPart('header')->writeHeader($_header)); + } + + $_footer = $section->getFooter(); + if(!is_null($_footer)) { + $_cFtrs++; + $_footer->setRelationId(++$rID); + $_footerCount = $_footer->getFooterCount(); + $_footerFile = 'footer'.$_footerCount.'.xml'; + $sectionElements[] = array('target'=>$_footerFile, 'type'=>'footer', 'rID'=>$rID); + $objZip->addFromString('word/'.$_footerFile, $this->getWriterPart('footer')->writeFooter($_footer)); + } + } + + // build docx file + // Write dynamic files + $objZip->addFromString('[Content_Types].xml', $this->getWriterPart('contenttypes')->writeContentTypes($this->_imageTypes, $this->_objectTypes, $_cHdrs, $_cFtrs)); + $objZip->addFromString('_rels/.rels', $this->getWriterPart('rels')->writeRelationships($this->_document)); + $objZip->addFromString('docProps/app.xml', $this->getWriterPart('docprops')->writeDocPropsApp($this->_document)); + $objZip->addFromString('docProps/core.xml', $this->getWriterPart('docprops')->writeDocPropsCore($this->_document)); + $objZip->addFromString('word/document.xml', $this->getWriterPart('document')->writeDocument($this->_document)); + $objZip->addFromString('word/_rels/document.xml.rels', $this->getWriterPart('documentrels')->writeDocumentRels($sectionElements)); + $objZip->addFromString('word/styles.xml', $this->getWriterPart('styles')->writeStyles($this->_document)); + + // Write static files + $objZip->addFile(PHPWORD_BASE_PATH . 'PHPWord/_staticDocParts/numbering.xml', 'word/numbering.xml'); + $objZip->addFile(PHPWORD_BASE_PATH . 'PHPWord/_staticDocParts/settings.xml', 'word/settings.xml'); + $objZip->addFile(PHPWORD_BASE_PATH . 'PHPWord/_staticDocParts/theme1.xml', 'word/theme/theme1.xml'); + $objZip->addFile(PHPWORD_BASE_PATH . 'PHPWord/_staticDocParts/webSettings.xml', 'word/webSettings.xml'); + $objZip->addFile(PHPWORD_BASE_PATH . 'PHPWord/_staticDocParts/fontTable.xml', 'word/fontTable.xml'); + + + // Close file + if($objZip->close() === false) { + throw new Exception("Could not close zip file $pFilename."); + } + + // If a temporary file was used, copy it to the correct file stream + if($originalFilename != $pFilename) { + if (copy($pFilename, $originalFilename) === false) { + throw new Exception("Could not copy temporary zip file $pFilename to $originalFilename."); + } + @unlink($pFilename); + } + } else { + throw new Exception("PHPWord object unassigned."); + } + } + + private function _chkContentTypes($src) { + $srcInfo = pathinfo($src); + $extension = strtolower($srcInfo['extension']); + if(substr($extension, 0, 3) == 'php') { + $extension = 'php'; + } + $_supportedImageTypes = array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'tif', 'tiff', 'php'); + + if(in_array($extension, $_supportedImageTypes)) { + $imagedata = getimagesize($src); + $imagetype = image_type_to_mime_type($imagedata[2]); + $imageext = image_type_to_extension($imagedata[2]); + $imageext = str_replace('.', '', $imageext); + if($imageext == 'jpeg') $imageext = 'jpg'; + + if(!in_array($imagetype, $this->_imageTypes)) { + $this->_imageTypes[$imageext] = $imagetype; + } + } else { + if(!in_array($extension, $this->_objectTypes)) { + $this->_objectTypes[] = $extension; + } + } + } + + public function getWriterPart($pPartName = '') { + if ($pPartName != '' && isset($this->_writerParts[strtolower($pPartName)])) { + return $this->_writerParts[strtolower($pPartName)]; + } else { + return null; + } + } + + public function getUseDiskCaching() { + return $this->_useDiskCaching; + } + + public function setUseDiskCaching($pValue = false, $pDirectory = null) { + $this->_useDiskCaching = $pValue; + + if (!is_null($pDirectory)) { + if (is_dir($pDirectory)) { + $this->_diskCachingDirectory = $pDirectory; + } else { + throw new Exception("Directory does not exist: $pDirectory"); + } + } + + return $this; + } + + private function _addFileToPackage($objZip, $element) { + if(isset($element['isMemImage']) && $element['isMemImage']) { + $image = call_user_func($element['createfunction'], $element['source']); + ob_start(); + call_user_func($element['imagefunction'], $image); + $imageContents = ob_get_contents(); + ob_end_clean(); + $objZip->addFromString('word/'.$element['target'], $imageContents); + imagedestroy($image); + + $this->_chkContentTypes($element['source']); + } else { + $objZip->addFile($element['source'], 'word/'.$element['target']); + $this->_chkContentTypes($element['source']); + } + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Writer/Word2007/Base.php b/PHPWord/PHPWord/Writer/Word2007/Base.php new file mode 100644 index 0000000..1ed5bde --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/Base.php @@ -0,0 +1,706 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart { + + protected function _writeText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Text $text, $withoutP = false) { + $styleFont = $text->getFontStyle(); + + $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false; + + if(!$withoutP) { + $objWriter->startElement('w:p'); + + $styleParagraph = $text->getParagraphStyle(); + $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false; + + if($SpIsObject) { + $this->_writeParagraphStyle($objWriter, $styleParagraph); + } elseif(!$SpIsObject && !is_null($styleParagraph)) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:pStyle'); + $objWriter->writeAttribute('w:val', $styleParagraph); + $objWriter->endElement(); + $objWriter->endElement(); + } + } + + $strText = htmlspecialchars($text->getText()); + $strText = PHPWord_Shared_String::ControlCharacterPHP2OOXML($strText); + + $objWriter->startElement('w:r'); + + if($SfIsObject) { + $this->_writeTextStyle($objWriter, $styleFont); + } elseif(!$SfIsObject && !is_null($styleFont)) { + $objWriter->startElement('w:rPr'); + $objWriter->startElement('w:rStyle'); + $objWriter->writeAttribute('w:val', $styleFont); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:t'); + $objWriter->writeAttribute('xml:space', 'preserve'); // needed because of drawing spaces before and after text + $objWriter->writeRaw($strText); + $objWriter->endElement(); + + $objWriter->endElement(); // w:r + + if(!$withoutP) { + $objWriter->endElement(); // w:p + } + } + + protected function _writeTextRun(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_TextRun $textrun) { + $elements = $textrun->getElements(); + $styleParagraph = $textrun->getParagraphStyle(); + + $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false; + + $objWriter->startElement('w:p'); + + if($SpIsObject) { + $this->_writeParagraphStyle($objWriter, $styleParagraph); + } elseif(!$SpIsObject && !is_null($styleParagraph)) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:pStyle'); + $objWriter->writeAttribute('w:val', $styleParagraph); + $objWriter->endElement(); + $objWriter->endElement(); + } + + if(count($elements) > 0) { + foreach($elements as $element) { + if($element instanceof PHPWord_Section_Text) { + $this->_writeText($objWriter, $element, true); + } elseif($element instanceof PHPWord_Section_Link) { + $this->_writeLink($objWriter, $element, true); + } + } + } + + $objWriter->endElement(); + } + + protected function _writeParagraphStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Paragraph $style, $withoutPPR = false) { + $align = $style->getAlign(); + $spaceBefore = $style->getSpaceBefore(); + $spaceAfter = $style->getSpaceAfter(); + $spacing = $style->getSpacing(); + + + if(!is_null($align) || !is_null($spacing) || !is_null($spaceBefore) || !is_null($spaceAfter)) { + + if(!$withoutPPR) { + $objWriter->startElement('w:pPr'); + } + + if(!is_null($align)) { + $objWriter->startElement('w:jc'); + $objWriter->writeAttribute('w:val', $align); + $objWriter->endElement(); + } + + if(!is_null($spaceBefore) || !is_null($spaceAfter) || !is_null($spacing)) { + + $objWriter->startElement('w:spacing'); + + if(!is_null($spaceBefore)) { + $objWriter->writeAttribute('w:before', $spaceBefore); + } + if(!is_null($spaceAfter)) { + $objWriter->writeAttribute('w:after', $spaceAfter); + } + if(!is_null($spacing)) { + $objWriter->writeAttribute('w:line', $spacing); + $objWriter->writeAttribute('w:lineRule', 'auto'); + } + + $objWriter->endElement(); + } + + if(!$withoutPPR) { + $objWriter->endElement(); // w:pPr + } + } + } + + protected function _writeLink(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Link $link, $withoutP = false) { + $rID = $link->getRelationId(); + $linkName = $link->getLinkName(); + if(is_null($linkName)) { + $linkName = $link->getLinkSrc(); + } + + $styleFont = $link->getFontStyle(); + $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false; + + if(!$withoutP) { + $objWriter->startElement('w:p'); + + $styleParagraph = $link->getParagraphStyle(); + $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false; + + if($SpIsObject) { + $this->_writeParagraphStyle($objWriter, $styleParagraph); + } elseif(!$SpIsObject && !is_null($styleParagraph)) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:pStyle'); + $objWriter->writeAttribute('w:val', $styleParagraph); + $objWriter->endElement(); + $objWriter->endElement(); + } + } + + $objWriter->startElement('w:hyperlink'); + $objWriter->writeAttribute('r:id', 'rId'.$rID); + $objWriter->writeAttribute('w:history', '1'); + + $objWriter->startElement('w:r'); + if($SfIsObject) { + $this->_writeTextStyle($objWriter, $styleFont); + } elseif(!$SfIsObject && !is_null($styleFont)) { + $objWriter->startElement('w:rPr'); + $objWriter->startElement('w:rStyle'); + $objWriter->writeAttribute('w:val', $styleFont); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:t'); + $objWriter->writeAttribute('xml:space', 'preserve'); // needed because of drawing spaces before and after text + $objWriter->writeRaw($linkName); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->endElement(); + + if(!$withoutP) { + $objWriter->endElement(); // w:p + } + } + + protected function _writePreserveText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Footer_PreserveText $textrun) { + $styleFont = $textrun->getFontStyle(); + $styleParagraph = $textrun->getParagraphStyle(); + + $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false; + $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false; + + $arrText = $textrun->getText(); + + $objWriter->startElement('w:p'); + + if($SpIsObject) { + $this->_writeParagraphStyle($objWriter, $styleParagraph); + } elseif(!$SpIsObject && !is_null($styleParagraph)) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:pStyle'); + $objWriter->writeAttribute('w:val', $styleParagraph); + $objWriter->endElement(); + $objWriter->endElement(); + } + + foreach($arrText as $text) { + + if(substr($text, 0, 1) == '{') { + $text = substr($text, 1, -1); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'begin'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + + if($SfIsObject) { + $this->_writeTextStyle($objWriter, $styleFont); + } elseif(!$SfIsObject && !is_null($styleFont)) { + $objWriter->startElement('w:rPr'); + $objWriter->startElement('w:rStyle'); + $objWriter->writeAttribute('w:val', $styleFont); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:instrText'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeRaw($text); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'separate'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'end'); + $objWriter->endElement(); + $objWriter->endElement(); + } else { + $text = htmlspecialchars($text); + $text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text); + + $objWriter->startElement('w:r'); + + if($SfIsObject) { + $this->_writeTextStyle($objWriter, $styleFont); + } elseif(!$SfIsObject && !is_null($styleFont)) { + $objWriter->startElement('w:rPr'); + $objWriter->startElement('w:rStyle'); + $objWriter->writeAttribute('w:val', $styleFont); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:t'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeRaw($text); + $objWriter->endElement(); + $objWriter->endElement(); + } + } + + $objWriter->endElement(); // p + } + + protected function _writeTextStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Font $style) { + $font = $style->getName(); + $bold = $style->getBold(); + $italic = $style->getItalic(); + $color = $style->getColor(); + $size = $style->getSize(); + $fgColor = $style->getFgColor(); + $striketrough = $style->getStrikethrough(); + $underline = $style->getUnderline(); + + $objWriter->startElement('w:rPr'); + + // Font + if($font != 'Arial') { + $objWriter->startElement('w:rFonts'); + $objWriter->writeAttribute('w:ascii', $font); + $objWriter->writeAttribute('w:hAnsi', $font); + $objWriter->writeAttribute('w:cs', $font); + $objWriter->endElement(); + } + + // Color + if($color != '000000') { + $objWriter->startElement('w:color'); + $objWriter->writeAttribute('w:val', $color); + $objWriter->endElement(); + } + + // Size + if($size != 20) { + $objWriter->startElement('w:sz'); + $objWriter->writeAttribute('w:val', $size); + $objWriter->endElement(); + $objWriter->startElement('w:szCs'); + $objWriter->writeAttribute('w:val', $size); + $objWriter->endElement(); + } + + // Bold + if($bold) { + $objWriter->writeElement('w:b', null); + } + + // Italic + if($italic) { + $objWriter->writeElement('w:i', null); + $objWriter->writeElement('w:iCs', null); + } + + // Underline + if(!is_null($underline) && $underline != 'none') { + $objWriter->startElement('w:u'); + $objWriter->writeAttribute('w:val', $underline); + $objWriter->endElement(); + } + + // Striketrough + if($striketrough) { + $objWriter->writeElement('w:strike', null); + } + + // Foreground-Color + if(!is_null($fgColor)) { + $objWriter->startElement('w:highlight'); + $objWriter->writeAttribute('w:val', $fgColor); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + + protected function _writeTextBreak(PHPWord_Shared_XMLWriter $objWriter = null) { + $objWriter->writeElement('w:p', null); + } + + protected function _writeTable(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Table $table) { + $_rows = $table->getRows(); + $_cRows = count($_rows); + + if($_cRows > 0) { + $objWriter->startElement('w:tbl'); + $tblStyle = $table->getStyle(); + if($tblStyle instanceof PHPWord_Style_Table) { + $this->_writeTableStyle($objWriter, $tblStyle); + } else { + if(!empty($tblStyle)) { + $objWriter->startElement('w:tblPr'); + $objWriter->startElement('w:tblStyle'); + $objWriter->writeAttribute('w:val', $tblStyle); + $objWriter->endElement(); + $objWriter->endElement(); + } + } + + $_heights = $table->getRowHeights(); + for($i=0; $i<$_cRows; $i++) { + $row = $_rows[$i]; + $height = $_heights[$i]; + + $objWriter->startElement('w:tr'); + + if(!is_null($height)) { + $objWriter->startElement('w:trPr'); + $objWriter->startElement('w:trHeight'); + $objWriter->writeAttribute('w:val', $height); + $objWriter->endElement(); + $objWriter->endElement(); + } + + foreach($row as $cell) { + $objWriter->startElement('w:tc'); + + $cellStyle = $cell->getStyle(); + $width = $cell->getWidth(); + + $objWriter->startElement('w:tcPr'); + $objWriter->startElement('w:tcW'); + $objWriter->writeAttribute('w:w', $width); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + + if($cellStyle instanceof PHPWord_Style_Cell) { + $this->_writeCellStyle($objWriter, $cellStyle); + } + + $objWriter->endElement(); + + $_elements = $cell->getElements(); + if(count($_elements) > 0) { + foreach($_elements as $element) { + if($element instanceof PHPWord_Section_Text) { + $this->_writeText($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextRun) { + $this->_writeTextRun($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Link) { + $this->_writeLink($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextBreak) { + $this->_writeTextBreak($objWriter); + } elseif($element instanceof PHPWord_Section_ListItem) { + $this->_writeListItem($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Image || + $element instanceof PHPWord_Section_MemoryImage) { + $this->_writeImage($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Object) { + $this->_writeObject($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Footer_PreserveText) { + $this->_writePreserveText($objWriter, $element); + } + } + } else { + $this->_writeTextBreak($objWriter); + } + + $objWriter->endElement(); + } + $objWriter->endElement(); + } + $objWriter->endElement(); + } + } + + protected function _writeTableStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Table $style = null) { + $margins = $style->getCellMargin(); + $mTop = (!is_null($margins[0])) ? true : false; + $mLeft = (!is_null($margins[1])) ? true : false; + $mRight = (!is_null($margins[2])) ? true : false; + $mBottom = (!is_null($margins[3])) ? true : false; + + if($mTop || $mLeft || $mRight || $mBottom) { + $objWriter->startElement('w:tblPr'); + $objWriter->startElement('w:tblCellMar'); + + if($mTop) { + $objWriter->startElement('w:top'); + $objWriter->writeAttribute('w:w', $margins[0]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + + if($mLeft) { + $objWriter->startElement('w:left'); + $objWriter->writeAttribute('w:w', $margins[1]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + + if($mRight) { + $objWriter->startElement('w:right'); + $objWriter->writeAttribute('w:w', $margins[2]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + + if($mBottom) { + $objWriter->startElement('w:bottom'); + $objWriter->writeAttribute('w:w', $margins[3]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + + $objWriter->endElement(); + $objWriter->endElement(); + } + } + + protected function _writeCellStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Cell $style = null) { + $bgColor = $style->getBgColor(); + $valign = $style->getVAlign(); + $textDir = $style->getTextDirection(); + $brdSz = $style->getBorderSize(); + $brdCol = $style->getBorderColor(); + + $bTop = (!is_null($brdSz[0])) ? true : false; + $bLeft = (!is_null($brdSz[1])) ? true : false; + $bRight = (!is_null($brdSz[2])) ? true : false; + $bBottom = (!is_null($brdSz[3])) ? true : false; + $borders = ($bTop || $bLeft || $bRight || $bBottom) ? true : false; + + $styles = (!is_null($bgColor) || !is_null($valign) || !is_null($textDir) || $borders) ? true : false; + + if($styles) { + if(!is_null($textDir)) { + $objWriter->startElement('w:textDirection'); + $objWriter->writeAttribute('w:val', $textDir); + $objWriter->endElement(); + } + + if(!is_null($bgColor)) { + $objWriter->startElement('w:shd'); + $objWriter->writeAttribute('w:val', 'clear'); + $objWriter->writeAttribute('w:color', 'auto'); + $objWriter->writeAttribute('w:fill', $bgColor); + $objWriter->endElement(); + } + + if(!is_null($valign)) { + $objWriter->startElement('w:vAlign'); + $objWriter->writeAttribute('w:val', $valign); + $objWriter->endElement(); + } + + if($borders) { + $_defaultColor = $style->getDefaultBorderColor(); + + $objWriter->startElement('w:tcBorders'); + if($bTop) { + if(is_null($brdCol[0])) { $brdCol[0] = $_defaultColor; } + $objWriter->startElement('w:top'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[0]); + $objWriter->writeAttribute('w:color', $brdCol[0]); + $objWriter->endElement(); + } + + if($bLeft) { + if(is_null($brdCol[1])) { $brdCol[1] = $_defaultColor; } + $objWriter->startElement('w:left'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[1]); + $objWriter->writeAttribute('w:color', $brdCol[1]); + $objWriter->endElement(); + } + + if($bRight) { + if(is_null($brdCol[2])) { $brdCol[2] = $_defaultColor; } + $objWriter->startElement('w:right'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[2]); + $objWriter->writeAttribute('w:color', $brdCol[2]); + $objWriter->endElement(); + } + + if($bBottom) { + if(is_null($brdCol[3])) { $brdCol[3] = $_defaultColor; } + $objWriter->startElement('w:bottom'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[3]); + $objWriter->writeAttribute('w:color', $brdCol[3]); + $objWriter->endElement(); + } + + $objWriter->endElement(); + } + } + } + + protected function _writeImage(PHPWord_Shared_XMLWriter $objWriter = null, $image) { + $rId = $image->getRelationId(); + + $style = $image->getStyle(); + $width = $style->getWidth(); + $height = $style->getHeight(); + $align = $style->getAlign(); + + $objWriter->startElement('w:p'); + + if(!is_null($align)) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:jc'); + $objWriter->writeAttribute('w:val', $align); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:r'); + + $objWriter->startElement('w:pict'); + + $objWriter->startElement('v:shape'); + $objWriter->writeAttribute('type', '#_x0000_t75'); + $objWriter->writeAttribute('style', 'width:'.$width.'px;height:'.$height.'px'); + + $objWriter->startElement('v:imagedata'); + $objWriter->writeAttribute('r:id', 'rId'.$rId); + $objWriter->writeAttribute('o:title', ''); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + } + + protected function _writeWatermark(PHPWord_Shared_XMLWriter $objWriter = null, $image) { + $rId = $image->getRelationId(); + + $style = $image->getStyle(); + $width = $style->getWidth(); + $height = $style->getHeight(); + $marginLeft = $style->getMarginLeft(); + $marginTop = $style->getMarginTop(); + + $objWriter->startElement('w:p'); + + $objWriter->startElement('w:r'); + + $objWriter->startElement('w:pict'); + + $objWriter->startElement('v:shape'); + $objWriter->writeAttribute('type', '#_x0000_t75'); + + $strStyle = 'position:absolute;'; + $strStyle .= ' width:'.$width.'px;'; + $strStyle .= ' height:'.$height.'px;'; + if(!is_null($marginTop)) { + $strStyle .= ' margin-top:'.$marginTop.'px;'; + } + if(!is_null($marginLeft)) { + $strStyle .= ' margin-left:'.$marginLeft.'px;'; + } + + $objWriter->writeAttribute('style', $strStyle); + + $objWriter->startElement('v:imagedata'); + $objWriter->writeAttribute('r:id', 'rId'.$rId); + $objWriter->writeAttribute('o:title', ''); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + } + + protected function _writeTitle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Title $title) { + $text = htmlspecialchars($title->getText()); + $text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text); + $anchor = $title->getAnchor(); + $bookmarkId = $title->getBookmarkId(); + $style = $title->getStyle(); + + $objWriter->startElement('w:p'); + + if(!empty($style)) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:pStyle'); + $objWriter->writeAttribute('w:val', $style); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'end'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:bookmarkStart'); + $objWriter->writeAttribute('w:id', $bookmarkId); + $objWriter->writeAttribute('w:name', $anchor); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:t'); + $objWriter->writeRaw($text); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:bookmarkEnd'); + $objWriter->writeAttribute('w:id', $bookmarkId); + $objWriter->endElement(); + + $objWriter->endElement(); + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Writer/Word2007/ContentTypes.php b/PHPWord/PHPWord/Writer/Word2007/ContentTypes.php new file mode 100644 index 0000000..0bc0460 --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/ContentTypes.php @@ -0,0 +1,185 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_ContentTypes extends PHPWord_Writer_Word2007_WriterPart { + + public function writeContentTypes($_imageTypes, $_objectTypes, $_cHdrs, $_cFtrs) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0', 'UTF-8', 'yes'); + + // Types + $objWriter->startElement('Types'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/content-types'); + + // Rels + $this->_writeDefaultContentType( + $objWriter, 'rels', 'application/vnd.openxmlformats-package.relationships+xml' + ); + + // XML + $this->_writeDefaultContentType( + $objWriter, 'xml', 'application/xml' + ); + + // Add media content-types + foreach($_imageTypes as $key => $value) { + $this->_writeDefaultContentType($objWriter, $key, $value); + } + + // Add embedding content-types + if(count($_objectTypes) > 0) { + $this->_writeDefaultContentType($objWriter, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject'); + } + + // DocProps + $this->_writeOverrideContentType( + $objWriter, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml' + ); + + $this->_writeOverrideContentType( + $objWriter, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml' + ); + + // Document + $this->_writeOverrideContentType( + $objWriter, '/word/document.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml' + ); + + // Styles + $this->_writeOverrideContentType( + $objWriter, '/word/styles.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml' + ); + + // Numbering + $this->_writeOverrideContentType( + $objWriter, '/word/numbering.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml' + ); + + // Settings + $this->_writeOverrideContentType( + $objWriter, '/word/settings.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml' + ); + + // Theme1 + $this->_writeOverrideContentType( + $objWriter, '/word/theme/theme1.xml', 'application/vnd.openxmlformats-officedocument.theme+xml' + ); + + // WebSettings + $this->_writeOverrideContentType( + $objWriter, '/word/webSettings.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml' + ); + + // Font Table + $this->_writeOverrideContentType( + $objWriter, '/word/fontTable.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml' + ); + + for($i=1; $i<=$_cHdrs; $i++) { + $this->_writeOverrideContentType( + $objWriter, '/word/header'.$i.'.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml' + ); + } + + for($i=1; $i<=$_cFtrs; $i++) { + $this->_writeOverrideContentType( + $objWriter, '/word/footer'.$i.'.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml' + ); + } + + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Get image mime type + * + * @param string $pFile Filename + * @return string Mime Type + * @throws Exception + */ + private function _getImageMimeType($pFile = '') { + if(PHPWord_Shared_File::file_exists($pFile)) { + $image = getimagesize($pFile); + return image_type_to_mime_type($image[2]); + } else { + throw new Exception("File $pFile does not exist"); + } + } + + /** + * Write Default content type + * + * @param PHPWord_Shared_XMLWriter $objWriter XML Writer + * @param string $pPartname Part name + * @param string $pContentType Content type + * @throws Exception + */ + private function _writeDefaultContentType(PHPWord_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '') { + if($pPartname != '' && $pContentType != '') { + // Write content type + $objWriter->startElement('Default'); + $objWriter->writeAttribute('Extension', $pPartname); + $objWriter->writeAttribute('ContentType', $pContentType); + $objWriter->endElement(); + } else { + throw new Exception("Invalid parameters passed."); + } + } + + /** + * Write Override content type + * + * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer + * @param string $pPartname Part name + * @param string $pContentType Content type + * @throws Exception + */ + private function _writeOverrideContentType(PHPWord_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '') { + if($pPartname != '' && $pContentType != '') { + // Write content type + $objWriter->startElement('Override'); + $objWriter->writeAttribute('PartName', $pPartname); + $objWriter->writeAttribute('ContentType', $pContentType); + $objWriter->endElement(); + } else { + throw new Exception("Invalid parameters passed."); + } + } +} diff --git a/PHPWord/PHPWord/Writer/Word2007/DocProps.php b/PHPWord/PHPWord/Writer/Word2007/DocProps.php new file mode 100644 index 0000000..1b91759 --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/DocProps.php @@ -0,0 +1,180 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_DocProps extends PHPWord_Writer_Word2007_WriterPart { + + public function writeDocPropsApp(PHPWord $pPHPWord = null) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Properties + $objWriter->startElement('Properties'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties'); + $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); + + // Application + $objWriter->writeElement('Application', 'Microsoft Office Word'); + + // ScaleCrop + $objWriter->writeElement('ScaleCrop', 'false'); + + // HeadingPairs + $objWriter->startElement('HeadingPairs'); + + // Vector + $objWriter->startElement('vt:vector'); + $objWriter->writeAttribute('size', '4'); + $objWriter->writeAttribute('baseType', 'variant'); + + // Variant + $objWriter->startElement('vt:variant'); + $objWriter->writeElement('vt:lpstr', 'Theme'); + $objWriter->endElement(); + + // Variant + $objWriter->startElement('vt:variant'); + $objWriter->writeElement('vt:i4', '1'); + $objWriter->endElement(); + + // Variant + $objWriter->startElement('vt:variant'); + $objWriter->writeElement('vt:lpstr', 'Slide Titles'); + $objWriter->endElement(); + + // Variant + $objWriter->startElement('vt:variant'); + $objWriter->writeElement('vt:i4', '1'); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // TitlesOfParts + $objWriter->startElement('TitlesOfParts'); + + // Vector + $objWriter->startElement('vt:vector'); + $objWriter->writeAttribute('size', '1'); + $objWriter->writeAttribute('baseType', 'lpstr'); + + $objWriter->writeElement('vt:lpstr', 'Office Theme'); + + $objWriter->endElement(); + + $objWriter->endElement(); + + // Company + $objWriter->writeElement('Company', $pPHPWord->getProperties()->getCompany()); + + // LinksUpToDate + $objWriter->writeElement('LinksUpToDate', 'false'); + + // SharedDoc + $objWriter->writeElement('SharedDoc', 'false'); + + // HyperlinksChanged + $objWriter->writeElement('HyperlinksChanged', 'false'); + + // AppVersion + $objWriter->writeElement('AppVersion', '12.0000'); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + + public function writeDocPropsCore(PHPWord $pPHPWord = null) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // cp:coreProperties + $objWriter->startElement('cp:coreProperties'); + $objWriter->writeAttribute('xmlns:cp', 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties'); + $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); + $objWriter->writeAttribute('xmlns:dcterms', 'http://purl.org/dc/terms/'); + $objWriter->writeAttribute('xmlns:dcmitype', 'http://purl.org/dc/dcmitype/'); + $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); + + // dc:creator + $objWriter->writeElement('dc:creator', $pPHPWord->getProperties()->getCreator()); + + // cp:lastModifiedBy + $objWriter->writeElement('cp:lastModifiedBy', $pPHPWord->getProperties()->getLastModifiedBy()); + + // dcterms:created + $objWriter->startElement('dcterms:created'); + $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); + $objWriter->writeRaw(date(DATE_W3C, $pPHPWord->getProperties()->getCreated())); + $objWriter->endElement(); + + // dcterms:modified + $objWriter->startElement('dcterms:modified'); + $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); + $objWriter->writeRaw(date(DATE_W3C, $pPHPWord->getProperties()->getModified())); + $objWriter->endElement(); + + // dc:title + $objWriter->writeElement('dc:title', $pPHPWord->getProperties()->getTitle()); + + // dc:description + $objWriter->writeElement('dc:description', $pPHPWord->getProperties()->getDescription()); + + // dc:subject + $objWriter->writeElement('dc:subject', $pPHPWord->getProperties()->getSubject()); + + // cp:keywords + $objWriter->writeElement('cp:keywords', $pPHPWord->getProperties()->getKeywords()); + + // cp:category + $objWriter->writeElement('cp:category', $pPHPWord->getProperties()->getCategory()); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } +} diff --git a/PHPWord/PHPWord/Writer/Word2007/Document.php b/PHPWord/PHPWord/Writer/Word2007/Document.php new file mode 100644 index 0000000..b07e269 --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/Document.php @@ -0,0 +1,453 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_Document extends PHPWord_Writer_Word2007_Base { + + public function writeDocument(PHPWord $pPHPWord = null) { + // Create XML writer + + if($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // w:document + $objWriter->startElement('w:document'); + + $objWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006'); + $objWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office'); + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('xmlns:m', 'http://schemas.openxmlformats.org/officeDocument/2006/math'); + $objWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml'); + $objWriter->writeAttribute('xmlns:wp', 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'); + $objWriter->writeAttribute('xmlns:w10', 'urn:schemas-microsoft-com:office:word'); + $objWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'); + $objWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml'); + + $objWriter->startElement('w:body'); + + $_sections = $pPHPWord->getSections(); + $countSections = count($_sections); + $pSection = 0; + + if($countSections > 0) { + foreach($_sections as $section) { + $pSection++; + + $_elements = $section->getElements(); + + foreach($_elements as $element) { + if($element instanceof PHPWord_Section_Text) { + $this->_writeText($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextRun) { + $this->_writeTextRun($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Link) { + $this->_writeLink($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Title) { + $this->_writeTitle($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextBreak) { + $this->_writeTextBreak($objWriter); + } elseif($element instanceof PHPWord_Section_PageBreak) { + $this->_writePageBreak($objWriter); + } elseif($element instanceof PHPWord_Section_Table) { + $this->_writeTable($objWriter, $element); + } elseif($element instanceof PHPWord_Section_ListItem) { + $this->_writeListItem($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Image || + $element instanceof PHPWord_Section_MemoryImage) { + $this->_writeImage($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Object) { + $this->_writeObject($objWriter, $element); + } elseif($element instanceof PHPWord_TOC) { + $this->_writeTOC($objWriter); + } + } + + if($pSection == $countSections) { + $this->_writeEndSection($objWriter, $section); + } else { + $this->_writeSection($objWriter, $section); + } + } + } + + $objWriter->endElement(); // End w:body + $objWriter->endElement(); // End w:document + + // Return + return $objWriter->getData(); + } + + private function _writeSection(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section $section) { + $objWriter->startElement('w:p'); + $objWriter->startElement('w:pPr'); + $this->_writeEndSection($objWriter, $section, 3); + $objWriter->endElement(); + $objWriter->endElement(); + } + + private function _writeEndSection(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section $section) { + $_settings = $section->getSettings(); + $_header = $section->getHeader(); + $_footer = $section->getFooter(); + $pgSzW = $_settings->getPageSizeW(); + $pgSzH = $_settings->getPageSizeH(); + $orientation = $_settings->getOrientation(); + + $marginTop = $_settings->getMarginTop(); + $marginLeft = $_settings->getMarginLeft(); + $marginRight = $_settings->getMarginRight(); + $marginBottom = $_settings->getMarginBottom(); + + $borders = $_settings->getBorderSize(); + + $objWriter->startElement('w:sectPr'); + + if(!is_null($_header)) { + $rId = $_header->getRelationId(); + $objWriter->startElement('w:headerReference'); + $objWriter->writeAttribute('w:type', 'default'); + $objWriter->writeAttribute('r:id', 'rId'.$rId); + $objWriter->endElement(); + } + + if(!is_null($_footer)) { + $rId = $_footer->getRelationId(); + $objWriter->startElement('w:footerReference'); + $objWriter->writeAttribute('w:type', 'default'); + $objWriter->writeAttribute('r:id', 'rId'.$rId); + $objWriter->endElement(); + } + + $objWriter->startElement('w:pgSz'); + $objWriter->writeAttribute('w:w', $pgSzW); + $objWriter->writeAttribute('w:h', $pgSzH); + + if(!is_null($orientation) && strtolower($orientation) != 'portrait') { + $objWriter->writeAttribute('w:orient', $orientation); + } + + $objWriter->endElement(); + + $objWriter->startElement('w:pgMar'); + $objWriter->writeAttribute('w:top', $marginTop); + $objWriter->writeAttribute('w:right', $marginRight); + $objWriter->writeAttribute('w:bottom', $marginBottom); + $objWriter->writeAttribute('w:left', $marginLeft); + $objWriter->writeAttribute('w:header', '720'); + $objWriter->writeAttribute('w:footer', '720'); + $objWriter->writeAttribute('w:gutter', '0'); + $objWriter->endElement(); + + + if(!is_null($borders[0]) || !is_null($borders[1]) || !is_null($borders[2]) || !is_null($borders[3])) { + $borderColor = $_settings->getBorderColor(); + + $objWriter->startElement('w:pgBorders'); + $objWriter->writeAttribute('w:offsetFrom', 'page'); + + if(!is_null($borders[0])) { + $objWriter->startElement('w:top'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $borders[0]); + $objWriter->writeAttribute('w:space', '24'); + $objWriter->writeAttribute('w:color', $borderColor[0]); + $objWriter->endElement(); + } + + if(!is_null($borders[1])) { + $objWriter->startElement('w:left'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $borders[1]); + $objWriter->writeAttribute('w:space', '24'); + $objWriter->writeAttribute('w:color', $borderColor[1]); + $objWriter->endElement(); + } + + if(!is_null($borders[2])) { + $objWriter->startElement('w:right'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $borders[2]); + $objWriter->writeAttribute('w:space', '24'); + $objWriter->writeAttribute('w:color', $borderColor[2]); + $objWriter->endElement(); + } + + if(!is_null($borders[3])) { + $objWriter->startElement('w:bottom'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $borders[3]); + $objWriter->writeAttribute('w:space', '24'); + $objWriter->writeAttribute('w:color', $borderColor[3]); + $objWriter->endElement(); + } + $objWriter->endElement(); + } + + + $objWriter->startElement('w:cols'); + $objWriter->writeAttribute('w:space', '720'); + $objWriter->endElement(); + + + $objWriter->endElement(); + } + + private function _writePageBreak(PHPWord_Shared_XMLWriter $objWriter = null) { + $objWriter->startElement('w:p'); + $objWriter->startElement('w:r'); + $objWriter->startElement('w:br'); + $objWriter->writeAttribute('w:type', 'page'); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + } + + private function _writeListItem(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_ListItem $listItem) { + $textObject = $listItem->getTextObject(); + $text = $textObject->getText(); + $styleParagraph = $textObject->getParagraphStyle(); + $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false; + + $depth = $listItem->getDepth(); + $listType = $listItem->getStyle()->getListType(); + + $objWriter->startElement('w:p'); + $objWriter->startElement('w:pPr'); + + if($SpIsObject) { + $this->_writeParagraphStyle($objWriter, $styleParagraph, true); + } elseif(!$SpIsObject && !is_null($styleParagraph)) { + $objWriter->startElement('w:pStyle'); + $objWriter->writeAttribute('w:val', $styleParagraph); + $objWriter->endElement(); + } + + $objWriter->startElement('w:numPr'); + + $objWriter->startElement('w:ilvl'); + $objWriter->writeAttribute('w:val', $depth); + $objWriter->endElement(); + + $objWriter->startElement('w:numId'); + $objWriter->writeAttribute('w:val', $listType); + $objWriter->endElement(); + + $objWriter->endElement(); + $objWriter->endElement(); + + $this->_writeText($objWriter, $textObject, true); + + $objWriter->endElement(); + } + + protected function _writeObject(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Object $object) { + $rIdObject = $object->getRelationId(); + $rIdImage = $object->getImageRelationId(); + $shapeId = md5($rIdObject.'_'.$rIdImage); + + $objectId = $object->getObjectId(); + + $style = $object->getStyle(); + $width = $style->getWidth(); + $height = $style->getHeight(); + $align = $style->getAlign(); + + + $objWriter->startElement('w:p'); + + if(!is_null($align)) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:jc'); + $objWriter->writeAttribute('w:val', $align); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:r'); + + $objWriter->startElement('w:object'); + $objWriter->writeAttribute('w:dxaOrig', '249'); + $objWriter->writeAttribute('w:dyaOrig', '160'); + + $objWriter->startElement('v:shape'); + $objWriter->writeAttribute('id', $shapeId); + $objWriter->writeAttribute('type', '#_x0000_t75'); + $objWriter->writeAttribute('style', 'width:104px;height:67px'); + $objWriter->writeAttribute('o:ole', ''); + + $objWriter->startElement('v:imagedata'); + $objWriter->writeAttribute('r:id', 'rId'.$rIdImage); + $objWriter->writeAttribute('o:title', ''); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->startElement('o:OLEObject'); + $objWriter->writeAttribute('Type', 'Embed'); + $objWriter->writeAttribute('ProgID', 'Package'); + $objWriter->writeAttribute('ShapeID', $shapeId); + $objWriter->writeAttribute('DrawAspect', 'Icon'); + $objWriter->writeAttribute('ObjectID', '_'.$objectId); + $objWriter->writeAttribute('r:id', 'rId'.$rIdObject); + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); // w:r + + $objWriter->endElement(); // w:p + } + + private function _writeTOC(PHPWord_Shared_XMLWriter $objWriter = null) { + $titles = PHPWord_TOC::getTitles(); + $styleFont = PHPWord_TOC::getStyleFont(); + + $styleTOC = PHPWord_TOC::getStyleTOC(); + $fIndent = $styleTOC->getIndent(); + $tabLeader = $styleTOC->getTabLeader(); + $tabPos = $styleTOC->getTabPos(); + + $isObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false; + + for($i=0; $i<count($titles); $i++) { + $title = $titles[$i]; + $indent = ($title['depth'] - 1) * $fIndent; + + $objWriter->startElement('w:p'); + + $objWriter->startElement('w:pPr'); + + if($isObject && !is_null($styleFont->getParagraphStyle())) { + $this->_writeParagraphStyle($objWriter, $styleFont->getParagraphStyle()); + } + + if($indent > 0) { + $objWriter->startElement('w:ind'); + $objWriter->writeAttribute('w:left', $indent); + $objWriter->endElement(); + } + + if(!empty($styleFont) && !$isObject) { + $objWriter->startElement('w:pPr'); + $objWriter->startElement('w:pStyle'); + $objWriter->writeAttribute('w:val', $styleFont); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:tabs'); + $objWriter->startElement('w:tab'); + $objWriter->writeAttribute('w:val', 'right'); + if(!empty($tabLeader)) { + $objWriter->writeAttribute('w:leader', $tabLeader); + } + $objWriter->writeAttribute('w:pos', $tabPos); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->endElement(); // w:pPr + + + if($i == 0) { + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'begin'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:instrText'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeRaw('TOC \o "1-9" \h \z \u'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'separate'); + $objWriter->endElement(); + $objWriter->endElement(); + } + + $objWriter->startElement('w:hyperlink'); + $objWriter->writeAttribute('w:anchor', $title['anchor']); + $objWriter->writeAttribute('w:history', '1'); + + $objWriter->startElement('w:r'); + + if($isObject) { + $this->_writeTextStyle($objWriter, $styleFont); + } + + $objWriter->startElement('w:t'); + $objWriter->writeRaw($title['text']); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->writeElement('w:tab', null); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'begin'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:instrText'); + $objWriter->writeAttribute('xml:space', 'preserve'); + $objWriter->writeRaw('PAGEREF '.$title['anchor'].' \h'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'end'); + $objWriter->endElement(); + $objWriter->endElement(); + + $objWriter->endElement(); // w:hyperlink + + $objWriter->endElement(); // w:p + } + + $objWriter->startElement('w:p'); + $objWriter->startElement('w:r'); + $objWriter->startElement('w:fldChar'); + $objWriter->writeAttribute('w:fldCharType', 'end'); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + } +} diff --git a/PHPWord/PHPWord/Writer/Word2007/DocumentRels.php b/PHPWord/PHPWord/Writer/Word2007/DocumentRels.php new file mode 100644 index 0000000..b5b5bd0 --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/DocumentRels.php @@ -0,0 +1,177 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_DocumentRels extends PHPWord_Writer_Word2007_WriterPart { + + public function writeDocumentRels($_relsCollection) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + // Relationship word/document.xml + $this->_writeRelationship( + $objWriter, + 1, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + 'styles.xml' + ); + + // Relationship word/numbering.xml + $this->_writeRelationship( + $objWriter, + 2, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering', + 'numbering.xml' + ); + + // Relationship word/settings.xml + $this->_writeRelationship( + $objWriter, + 3, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings', + 'settings.xml' + ); + + // Relationship word/settings.xml + $this->_writeRelationship( + $objWriter, + 4, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + 'theme/theme1.xml' + ); + + // Relationship word/settings.xml + $this->_writeRelationship( + $objWriter, + 5, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings', + 'webSettings.xml' + ); + + // Relationship word/settings.xml + $this->_writeRelationship( + $objWriter, + 6, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable', + 'fontTable.xml' + ); + + // Relationships to Images / Embeddings / Headers / Footers + foreach($_relsCollection as $relation) { + $relationType = $relation['type']; + $relationName = $relation['target']; + $relationId = $relation['rID']; + $targetMode = ($relationType == 'hyperlink') ? 'External' : ''; + + $this->_writeRelationship( + $objWriter, + $relationId, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/'.$relationType, + $relationName, + $targetMode + ); + } + + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + public function writeHeaderFooterRels($_relsCollection) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + // Relationships to Images / Embeddings / Headers / Footers + foreach($_relsCollection as $relation) { + $relationType = $relation['type']; + $relationName = $relation['target']; + $relationId = $relation['rID']; + + $this->_writeRelationship( + $objWriter, + $relationId, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/'.$relationType, + $relationName + ); + } + + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + private function _writeRelationship(PHPWord_Shared_XMLWriter $objWriter = null, $pId = 1, $pType = '', $pTarget = '', $pTargetMode = '') { + if($pType != '' && $pTarget != '') { + if(strpos($pId, 'rId') === false) { + $pId = 'rId' . $pId; + } + + // Write relationship + $objWriter->startElement('Relationship'); + $objWriter->writeAttribute('Id', $pId); + $objWriter->writeAttribute('Type', $pType); + $objWriter->writeAttribute('Target', $pTarget); + + if($pTargetMode != '') { + $objWriter->writeAttribute('TargetMode', $pTargetMode); + } + + $objWriter->endElement(); + } else { + throw new Exception("Invalid parameters passed."); + } + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Writer/Word2007/Footer.php b/PHPWord/PHPWord/Writer/Word2007/Footer.php new file mode 100644 index 0000000..8508b86 --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/Footer.php @@ -0,0 +1,79 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_Footer extends PHPWord_Writer_Word2007_Base { + + public function writeFooter(PHPWord_Section_Footer $footer) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0', 'UTF-8', 'yes'); + + $objWriter->startElement('w:ftr'); + $objWriter->writeAttribute('xmlns:ve','http://schemas.openxmlformats.org/markup-compatibility/2006'); + $objWriter->writeAttribute('xmlns:o','urn:schemas-microsoft-com:office:office'); + $objWriter->writeAttribute('xmlns:r','http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('xmlns:m','http://schemas.openxmlformats.org/officeDocument/2006/math'); + $objWriter->writeAttribute('xmlns:v','urn:schemas-microsoft-com:vml'); + $objWriter->writeAttribute('xmlns:wp','http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'); + $objWriter->writeAttribute('xmlns:w10','urn:schemas-microsoft-com:office:word'); + $objWriter->writeAttribute('xmlns:w','http://schemas.openxmlformats.org/wordprocessingml/2006/main'); + $objWriter->writeAttribute('xmlns:wne','http://schemas.microsoft.com/office/word/2006/wordml'); + + $_elements = $footer->getElements(); + + foreach($_elements as $element) { + if($element instanceof PHPWord_Section_Text) { + $this->_writeText($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextRun) { + $this->_writeTextRun($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextBreak) { + $this->_writeTextBreak($objWriter); + } elseif($element instanceof PHPWord_Section_Table) { + $this->_writeTable($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Image || + $element instanceof PHPWord_Section_MemoryImage) { + $this->_writeImage($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Footer_PreserveText) { + $this->_writePreserveText($objWriter, $element); + } + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } +} +?> diff --git a/PHPWord/PHPWord/Writer/Word2007/Header.php b/PHPWord/PHPWord/Writer/Word2007/Header.php new file mode 100644 index 0000000..f677899 --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/Header.php @@ -0,0 +1,83 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_Header extends PHPWord_Writer_Word2007_Base { + + public function writeHeader(PHPWord_Section_Header $header) { + // Create XML writer + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0', 'UTF-8', 'yes'); + + $objWriter->startElement('w:hdr'); + $objWriter->writeAttribute('xmlns:ve','http://schemas.openxmlformats.org/markup-compatibility/2006'); + $objWriter->writeAttribute('xmlns:o','urn:schemas-microsoft-com:office:office'); + $objWriter->writeAttribute('xmlns:r','http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('xmlns:m','http://schemas.openxmlformats.org/officeDocument/2006/math'); + $objWriter->writeAttribute('xmlns:v','urn:schemas-microsoft-com:vml'); + $objWriter->writeAttribute('xmlns:wp','http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'); + $objWriter->writeAttribute('xmlns:w10','urn:schemas-microsoft-com:office:word'); + $objWriter->writeAttribute('xmlns:w','http://schemas.openxmlformats.org/wordprocessingml/2006/main'); + $objWriter->writeAttribute('xmlns:wne','http://schemas.microsoft.com/office/word/2006/wordml'); + + + $_elements = $header->getElements(); + + foreach($_elements as $element) { + if($element instanceof PHPWord_Section_Text) { + $this->_writeText($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextRun) { + $this->_writeTextRun($objWriter, $element); + } elseif($element instanceof PHPWord_Section_TextBreak) { + $this->_writeTextBreak($objWriter); + } elseif($element instanceof PHPWord_Section_Table) { + $this->_writeTable($objWriter, $element); + } elseif($element instanceof PHPWord_Section_Image || + $element instanceof PHPWord_Section_MemoryImage) { + if(!$element->getIsWatermark()) { + $this->_writeImage($objWriter, $element); + } else { + $this->_writeWatermark($objWriter, $element); + } + } elseif($element instanceof PHPWord_Section_Footer_PreserveText) { + $this->_writePreserveText($objWriter, $element); + } + } + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } +} +?> diff --git a/PHPWord/PHPWord/Writer/Word2007/Rels.php b/PHPWord/PHPWord/Writer/Word2007/Rels.php new file mode 100644 index 0000000..1811e8b --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/Rels.php @@ -0,0 +1,110 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_Rels extends PHPWord_Writer_Word2007_WriterPart { + + public function writeRelationships(PHPWord $pPHPWord = null) { + // Create XML writer + $objWriter = null; + if ($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + // Relationships + $objWriter->startElement('Relationships'); + $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); + + $relationId = 1; + + // Relationship word/document.xml + $this->_writeRelationship( + $objWriter, + $relationId, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + 'word/document.xml' + ); + + // Relationship docProps/core.xml + $this->_writeRelationship( + $objWriter, + ++$relationId, + 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + 'docProps/core.xml' + ); + + // Relationship docProps/app.xml + $this->_writeRelationship( + $objWriter, + ++$relationId, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + 'docProps/app.xml' + ); + + $objWriter->endElement(); + + // Return + return $objWriter->getData(); + } + + /** + * Write Override content type + * + * @param PHPWord_Shared_XMLWriter $objWriter XML Writer + * @param int $pId Relationship ID. rId will be prepended! + * @param string $pType Relationship type + * @param string $pTarget Relationship target + * @param string $pTargetMode Relationship target mode + * @throws Exception + */ + private function _writeRelationship(PHPWord_Shared_XMLWriter $objWriter = null, $pId = 1, $pType = '', $pTarget = '', $pTargetMode = '') { + if($pType != '' && $pTarget != '') { + if(strpos($pId, 'rId') === false) { + $pId = 'rId' . $pId; + } + + // Write relationship + $objWriter->startElement('Relationship'); + $objWriter->writeAttribute('Id', $pId); + $objWriter->writeAttribute('Type', $pType); + $objWriter->writeAttribute('Target', $pTarget); + + if($pTargetMode != '') { + $objWriter->writeAttribute('TargetMode', $pTargetMode); + } + + $objWriter->endElement(); + } else { + throw new Exception("Invalid parameters passed."); + } + } +} diff --git a/PHPWord/PHPWord/Writer/Word2007/Styles.php b/PHPWord/PHPWord/Writer/Word2007/Styles.php new file mode 100644 index 0000000..602b2be --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/Styles.php @@ -0,0 +1,346 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +class PHPWord_Writer_Word2007_Styles extends PHPWord_Writer_Word2007_Base { + + private $_document; + + public function writeStyles(PHPWord $pPHPWord = null) { + // Create XML writer + $objWriter = null; + if($this->getParentWriter()->getUseDiskCaching()) { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); + } else { + $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY); + } + + $this->_document = $pPHPWord; + + // XML header + $objWriter->startDocument('1.0','UTF-8','yes'); + + $objWriter->startElement('w:styles'); + + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'); + + // Write DocDefaults + $this->_writeDocDefaults($objWriter); + + + // Write Style Definitions + $styles = PHPWord_Style::getStyles(); + if(count($styles) > 0) { + foreach($styles as $styleName => $style) { + if($style instanceof PHPWord_Style_Font) { + + $paragraphStyle = $style->getParagraphStyle(); + $styleType = $style->getStyleType(); + + $type = ($styleType == 'title') ? 'paragraph' : 'character'; + + if(!is_null($paragraphStyle)) { + $type = 'paragraph'; + } + + $objWriter->startElement('w:style'); + $objWriter->writeAttribute('w:type', $type); + + if($styleType == 'title') { + $arrStyle = explode('_', $styleName); + $styleId = 'Heading'.$arrStyle[1]; + $styleName = 'heading '.$arrStyle[1]; + $styleLink = 'Heading'.$arrStyle[1].'Char'; + $objWriter->writeAttribute('w:styleId', $styleId); + + $objWriter->startElement('w:link'); + $objWriter->writeAttribute('w:val', $styleLink); + $objWriter->endElement(); + } + + $objWriter->startElement('w:name'); + $objWriter->writeAttribute('w:val', $styleName); + $objWriter->endElement(); + + if(!is_null($paragraphStyle)) { + $this->_writeParagraphStyle($objWriter, $paragraphStyle); + } + + $this->_writeTextStyle($objWriter, $style); + + $objWriter->endElement(); + + } elseif($style instanceof PHPWord_Style_Paragraph) { + $objWriter->startElement('w:style'); + $objWriter->writeAttribute('w:type', 'paragraph'); + $objWriter->writeAttribute('w:customStyle', '1'); + $objWriter->writeAttribute('w:styleId', $styleName); + + $objWriter->startElement('w:name'); + $objWriter->writeAttribute('w:val', $styleName); + $objWriter->endElement(); + + $this->_writeParagraphStyle($objWriter, $style); + $objWriter->endElement(); + + } elseif($style instanceof PHPWord_Style_TableFull) { + $objWriter->startElement('w:style'); + $objWriter->writeAttribute('w:type', 'table'); + $objWriter->writeAttribute('w:customStyle', '1'); + $objWriter->writeAttribute('w:styleId', $styleName); + + $objWriter->startElement('w:name'); + $objWriter->writeAttribute('w:val', $styleName); + $objWriter->endElement(); + + $objWriter->startElement('w:uiPriority'); + $objWriter->writeAttribute('w:val', '99'); + $objWriter->endElement(); + + $this->_writeFullTableStyle($objWriter, $style); + + $objWriter->endElement(); + } + } + } + + $objWriter->endElement(); // w:styles + + // Return + return $objWriter->getData(); + } + + private function _writeFullTableStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_TableFull $style) { + + $brdSz = $style->getBorderSize(); + $brdCol = $style->getBorderColor(); + $bgColor = $style->getBgColor(); + $cellMargin = $style->getCellMargin(); + + $bTop = (!is_null($brdSz[0])) ? true : false; + $bLeft = (!is_null($brdSz[1])) ? true : false; + $bRight = (!is_null($brdSz[2])) ? true : false; + $bBottom = (!is_null($brdSz[3])) ? true : false; + $bInsH = (!is_null($brdSz[4])) ? true : false; + $bInsV = (!is_null($brdSz[5])) ? true : false; + $borders = ($bTop || $bLeft || $bRight || $bBottom || $bInsH || $bInsV) ? true : false; + + $mTop = (!is_null($cellMargin[0])) ? true : false; + $mLeft = (!is_null($cellMargin[1])) ? true : false; + $mRight = (!is_null($cellMargin[2])) ? true : false; + $mBottom = (!is_null($cellMargin[3])) ? true : false; + $margins = ($mTop || $mLeft || $mRight || $mBottom) ? true : false; + + $objWriter->startElement('w:tblPr'); + + if($margins) { + $objWriter->startElement('w:tblCellMar'); + if($mTop) { + echo $margins[0]; + $objWriter->startElement('w:top'); + $objWriter->writeAttribute('w:w', $cellMargin[0]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + if($mLeft) { + $objWriter->startElement('w:left'); + $objWriter->writeAttribute('w:w', $cellMargin[1]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + if($mRight) { + $objWriter->startElement('w:right'); + $objWriter->writeAttribute('w:w', $cellMargin[2]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + if($mBottom) { + $objWriter->startElement('w:bottom'); + $objWriter->writeAttribute('w:w', $cellMargin[3]); + $objWriter->writeAttribute('w:type', 'dxa'); + $objWriter->endElement(); + } + $objWriter->endElement(); + } + + if($borders) { + $objWriter->startElement('w:tblBorders'); + if($bTop) { + $objWriter->startElement('w:top'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[0]); + $objWriter->writeAttribute('w:color', $brdCol[0]); + $objWriter->endElement(); + } + if($bLeft) { + $objWriter->startElement('w:left'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[1]); + $objWriter->writeAttribute('w:color', $brdCol[1]); + $objWriter->endElement(); + } + if($bRight) { + $objWriter->startElement('w:right'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[2]); + $objWriter->writeAttribute('w:color', $brdCol[2]); + $objWriter->endElement(); + } + if($bBottom) { + $objWriter->startElement('w:bottom'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[3]); + $objWriter->writeAttribute('w:color', $brdCol[3]); + $objWriter->endElement(); + } + if($bInsH) { + $objWriter->startElement('w:insideH'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[4]); + $objWriter->writeAttribute('w:color', $brdCol[4]); + $objWriter->endElement(); + } + if($bInsV) { + $objWriter->startElement('w:insideV'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[5]); + $objWriter->writeAttribute('w:color', $brdCol[5]); + $objWriter->endElement(); + } + $objWriter->endElement(); + } + + $objWriter->endElement(); + + if(!is_null($bgColor)) { + $objWriter->startElement('w:tcPr'); + $objWriter->startElement('w:shd'); + $objWriter->writeAttribute('w:val', 'clear'); + $objWriter->writeAttribute('w:color', 'auto'); + $objWriter->writeAttribute('w:fill', $bgColor); + $objWriter->endElement(); + $objWriter->endElement(); + } + + + // First Row + $firstRow = $style->getFirstRow(); + if(!is_null($firstRow)) { + $this->_writeRowStyle($objWriter, 'firstRow', $firstRow); + } + } + + private function _writeRowStyle(PHPWord_Shared_XMLWriter $objWriter = null, $type, PHPWord_Style_TableFull $style) { + $brdSz = $style->getBorderSize(); + $brdCol = $style->getBorderColor(); + $bgColor = $style->getBgColor(); + + $bTop = (!is_null($brdSz[0])) ? true : false; + $bLeft = (!is_null($brdSz[1])) ? true : false; + $bRight = (!is_null($brdSz[2])) ? true : false; + $bBottom = (!is_null($brdSz[3])) ? true : false; + $borders = ($bTop || $bLeft || $bRight || $bBottom) ? true : false; + + $objWriter->startElement('w:tblStylePr'); + $objWriter->writeAttribute('w:type', $type); + + $objWriter->startElement('w:tcPr'); + if(!is_null($bgColor)) { + $objWriter->startElement('w:shd'); + $objWriter->writeAttribute('w:val', 'clear'); + $objWriter->writeAttribute('w:color', 'auto'); + $objWriter->writeAttribute('w:fill', $bgColor); + $objWriter->endElement(); + } + + $objWriter->startElement('w:tcBorders'); + if($bTop) { + $objWriter->startElement('w:top'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[0]); + $objWriter->writeAttribute('w:color', $brdCol[0]); + $objWriter->endElement(); + } + if($bLeft) { + $objWriter->startElement('w:left'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[1]); + $objWriter->writeAttribute('w:color', $brdCol[1]); + $objWriter->endElement(); + } + if($bRight) { + $objWriter->startElement('w:right'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[2]); + $objWriter->writeAttribute('w:color', $brdCol[2]); + $objWriter->endElement(); + } + if($bBottom) { + $objWriter->startElement('w:bottom'); + $objWriter->writeAttribute('w:val', 'single'); + $objWriter->writeAttribute('w:sz', $brdSz[3]); + $objWriter->writeAttribute('w:color', $brdCol[3]); + $objWriter->endElement(); + } + $objWriter->endElement(); + + $objWriter->endElement(); + + $objWriter->endElement(); + } + + + private function _writeDocDefaults(PHPWord_Shared_XMLWriter $objWriter = null) { + $fontName = $this->_document->getDefaultFontName(); + $fontSize = $this->_document->getDefaultFontSize(); + + $objWriter->startElement('w:docDefaults'); + $objWriter->startElement('w:rPrDefault'); + $objWriter->startElement('w:rPr'); + + $objWriter->startElement('w:rFonts'); + $objWriter->writeAttribute('w:ascii', $fontName); + $objWriter->writeAttribute('w:hAnsi', $fontName); + $objWriter->writeAttribute('w:eastAsia', $fontName); + $objWriter->writeAttribute('w:cs', $fontName); + $objWriter->endElement(); + + $objWriter->startElement('w:sz'); + $objWriter->writeAttribute('w:val', $fontSize); + $objWriter->endElement(); + + $objWriter->startElement('w:szCs'); + $objWriter->writeAttribute('w:val', $fontSize); + $objWriter->endElement(); + + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); + } +} +?> \ No newline at end of file diff --git a/PHPWord/PHPWord/Writer/Word2007/WriterPart.php b/PHPWord/PHPWord/Writer/Word2007/WriterPart.php new file mode 100644 index 0000000..1556a6f --- /dev/null +++ b/PHPWord/PHPWord/Writer/Word2007/WriterPart.php @@ -0,0 +1,43 @@ +<?php +/** + * PHPWord + * + * Copyright (c) 2011 PHPWord + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category PHPWord + * @package PHPWord + * @copyright Copyright (c) 010 PHPWord + * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL + * @version Beta 0.6.3, 08.07.2011 + */ + + +abstract class PHPWord_Writer_Word2007_WriterPart { + private $_parentWriter; + + public function setParentWriter(PHPWord_Writer_IWriter $pWriter = null) { + $this->_parentWriter = $pWriter; + } + + public function getParentWriter() { + if (!is_null($this->_parentWriter)) { + return $this->_parentWriter; + } else { + throw new Exception("No parent PHPWord_Writer_IWriter assigned."); + } + } +} diff --git a/PHPWord/PHPWord/_staticDocParts/_doc.png b/PHPWord/PHPWord/_staticDocParts/_doc.png new file mode 100644 index 0000000..3128a80 Binary files /dev/null and b/PHPWord/PHPWord/_staticDocParts/_doc.png differ diff --git a/PHPWord/PHPWord/_staticDocParts/_ppt.png b/PHPWord/PHPWord/_staticDocParts/_ppt.png new file mode 100644 index 0000000..3e925f5 Binary files /dev/null and b/PHPWord/PHPWord/_staticDocParts/_ppt.png differ diff --git a/PHPWord/PHPWord/_staticDocParts/_xls.png b/PHPWord/PHPWord/_staticDocParts/_xls.png new file mode 100644 index 0000000..a7d7697 Binary files /dev/null and b/PHPWord/PHPWord/_staticDocParts/_xls.png differ diff --git a/PHPWord/PHPWord/_staticDocParts/fontTable.xml b/PHPWord/PHPWord/_staticDocParts/fontTable.xml new file mode 100644 index 0000000..a2e183c --- /dev/null +++ b/PHPWord/PHPWord/_staticDocParts/fontTable.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<w:fonts xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:font w:name="Times New Roman"><w:panose1 w:val="02020603050405020304"/><w:charset w:val="00"/><w:family w:val="roman"/><w:pitch w:val="variable"/><w:sig w:usb0="E0002AFF" w:usb1="C0007841" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/></w:font><w:font w:name="Courier New"><w:panose1 w:val="02070309020205020404"/><w:charset w:val="00"/><w:family w:val="modern"/><w:pitch w:val="fixed"/><w:sig w:usb0="E0002AFF" w:usb1="C0007843" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/></w:font><w:font w:name="Wingdings"><w:panose1 w:val="05000000000000000000"/><w:charset w:val="02"/><w:family w:val="auto"/><w:pitch w:val="variable"/><w:sig w:usb0="00000000" w:usb1="10000000" w:usb2="00000000" w:usb3="00000000" w:csb0="80000000" w:csb1="00000000"/></w:font><w:font w:name="Symbol"><w:panose1 w:val="05050102010706020507"/><w:charset w:val="02"/><w:family w:val="roman"/><w:pitch w:val="variable"/><w:sig w:usb0="00000000" w:usb1="10000000" w:usb2="00000000" w:usb3="00000000" w:csb0="80000000" w:csb1="00000000"/></w:font><w:font w:name="Arial"><w:panose1 w:val="020B0604020202020204"/><w:charset w:val="00"/><w:family w:val="swiss"/><w:pitch w:val="variable"/><w:sig w:usb0="E0002AFF" w:usb1="C0007843" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/></w:font><w:font w:name="Cambria"><w:panose1 w:val="02040503050406030204"/><w:charset w:val="00"/><w:family w:val="roman"/><w:pitch w:val="variable"/><w:sig w:usb0="A00002EF" w:usb1="4000004B" w:usb2="00000000" w:usb3="00000000" w:csb0="0000019F" w:csb1="00000000"/></w:font><w:font w:name="Calibri"><w:panose1 w:val="020F0502020204030204"/><w:charset w:val="00"/><w:family w:val="swiss"/><w:pitch w:val="variable"/><w:sig w:usb0="E10002FF" w:usb1="4000ACFF" w:usb2="00000009" w:usb3="00000000" w:csb0="0000019F" w:csb1="00000000"/></w:font></w:fonts> \ No newline at end of file diff --git a/PHPWord/PHPWord/_staticDocParts/numbering.xml b/PHPWord/PHPWord/_staticDocParts/numbering.xml new file mode 100644 index 0000000..ac229f4 --- /dev/null +++ b/PHPWord/PHPWord/_staticDocParts/numbering.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<w:numbering xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"><w:abstractNum w:abstractNumId="0"><w:nsid w:val="058F733C"/><w:multiLevelType w:val="multilevel"/><w:tmpl w:val="235E3456"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:numFmt w:val="lowerLetter"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:numFmt w:val="lowerRoman"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:numFmt w:val="lowerLetter"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:numFmt w:val="lowerRoman"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:numFmt w:val="lowerLetter"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:numFmt w:val="lowerRoman"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="1"><w:nsid w:val="1CC56BAD"/><w:multiLevelType w:val="hybridMultilevel"/><w:tmpl w:val="A13E515A"/><w:lvl w:ilvl="0" w:tplc="0407000F"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="2"><w:nsid w:val="2B98193E"/><w:multiLevelType w:val="multilevel"/><w:tmpl w:val="0407001F"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="360"/></w:tabs><w:ind w:left="360" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="792"/></w:tabs><w:ind w:left="792" w:hanging="432"/></w:pPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1224"/></w:tabs><w:ind w:left="1224" w:hanging="504"/></w:pPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3.%4."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1800"/></w:tabs><w:ind w:left="1728" w:hanging="648"/></w:pPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3.%4.%5."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2520"/></w:tabs><w:ind w:left="2232" w:hanging="792"/></w:pPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2736" w:hanging="936"/></w:pPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3240" w:hanging="1080"/></w:pPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3960"/></w:tabs><w:ind w:left="3744" w:hanging="1224"/></w:pPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:numFmt w:val="decimal"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9."/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4680"/></w:tabs><w:ind w:left="4320" w:hanging="1440"/></w:pPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="3"><w:nsid w:val="4BAB13FB"/><w:multiLevelType w:val="hybridMultilevel"/><w:tmpl w:val="1C926F96"/><w:lvl w:ilvl="0" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="4"><w:nsid w:val="50F470E5"/><w:multiLevelType w:val="multilevel"/><w:tmpl w:val="B0C2ADC2"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="5"><w:nsid w:val="59042E43"/><w:multiLevelType w:val="hybridMultilevel"/><w:tmpl w:val="1E589F26"/><w:lvl w:ilvl="0" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="6"><w:nsid w:val="5B46542A"/><w:multiLevelType w:val="hybridMultilevel"/><w:tmpl w:val="B0C2ADC2"/><w:lvl w:ilvl="0" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04070001"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04070003"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04070005"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="7"><w:nsid w:val="715E76BC"/><w:multiLevelType w:val="multilevel"/><w:tmpl w:val="1C926F96"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:abstractNum><w:abstractNum w:abstractNumId="8"><w:nsid w:val="7A1304B4"/><w:multiLevelType w:val="multilevel"/><w:tmpl w:val="1E589F26"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:cs="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:numFmt w:val="bullet"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="num" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:hAnsi="Wingdings" w:cs="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:abstractNum><w:num w:numId="1"><w:abstractNumId w:val="6"/></w:num><w:num w:numId="2"><w:abstractNumId w:val="4"/></w:num><w:num w:numId="3"><w:abstractNumId w:val="3"/></w:num><w:num w:numId="4"><w:abstractNumId w:val="7"/></w:num><w:num w:numId="5"><w:abstractNumId w:val="5"/></w:num><w:num w:numId="6"><w:abstractNumId w:val="8"/></w:num><w:num w:numId="7"><w:abstractNumId w:val="1"/></w:num><w:num w:numId="8"><w:abstractNumId w:val="2"/></w:num><w:num w:numId="9"><w:abstractNumId w:val="0"/></w:num></w:numbering> \ No newline at end of file diff --git a/PHPWord/PHPWord/_staticDocParts/settings.xml b/PHPWord/PHPWord/_staticDocParts/settings.xml new file mode 100644 index 0000000..5eb2289 --- /dev/null +++ b/PHPWord/PHPWord/_staticDocParts/settings.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<w:settings xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main"> + <w:zoom w:percent="100" /> + <w:embedSystemFonts /> + <w:defaultTabStop w:val="708" /> + <w:hyphenationZone w:val="425" /> + <w:doNotHyphenateCaps /> + <w:characterSpacingControl w:val="doNotCompress" /> + <w:doNotValidateAgainstSchema /> + <w:doNotDemarcateInvalidXml /> + <w:compat> + <w:useNormalStyleForList /> + <w:doNotUseIndentAsNumberingTabStop /> + <w:useAltKinsokuLineBreakRules /> + <w:allowSpaceOfSameStyleInTable /> + <w:doNotSuppressIndentation /> + <w:doNotAutofitConstrainedTables /> + <w:autofitToFirstFixedWidthCell /> + <w:underlineTabInNumList /> + <w:displayHangulFixedWidth /> + <w:splitPgBreakAndParaMark /> + <w:doNotVertAlignCellWithSp /> + <w:doNotBreakConstrainedForcedTable /> + <w:doNotVertAlignInTxbx /> + <w:useAnsiKerningPairs /> + <w:cachedColBalance /> + </w:compat> + <m:mathPr> + <m:mathFont m:val="Cambria Math" /> + <m:brkBin m:val="before" /> + <m:brkBinSub m:val="--" /> + <m:smallFrac m:val="off" /> + <m:dispDef /> + <m:lMargin m:val="0" /> + <m:rMargin m:val="0" /> + <m:defJc m:val="centerGroup" /> + <m:wrapIndent m:val="1440" /> + <m:intLim m:val="subSup" /> + <m:naryLim m:val="undOvr" /> + </m:mathPr> + <w:uiCompat97To2003 /> + <w:themeFontLang w:val="de-DE" /> + <w:clrSchemeMapping w:bg1="light1" w:t1="dark1" w:bg2="light2" w:t2="dark2" w:accent1="accent1" w:accent2="accent2" w:accent3="accent3" w:accent4="accent4" w:accent5="accent5" w:accent6="accent6" w:hyperlink="hyperlink" w:followedHyperlink="followedHyperlink" /> + <w:doNotIncludeSubdocsInStats /> + <w:doNotAutoCompressPictures /> + <w:decimalSymbol w:val="," /> + <w:listSeparator w:val=";" /> +</w:settings> \ No newline at end of file diff --git a/PHPWord/PHPWord/_staticDocParts/theme1.xml b/PHPWord/PHPWord/_staticDocParts/theme1.xml new file mode 100644 index 0000000..4fab507 --- /dev/null +++ b/PHPWord/PHPWord/_staticDocParts/theme1.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS ゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Angsana New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS 明朝"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Cordia New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:shade val="51000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="80000"><a:schemeClr val="phClr"><a:shade val="93000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="94000"/><a:satMod val="135000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme> \ No newline at end of file diff --git a/PHPWord/PHPWord/_staticDocParts/webSettings.xml b/PHPWord/PHPWord/_staticDocParts/webSettings.xml new file mode 100644 index 0000000..72d2830 --- /dev/null +++ b/PHPWord/PHPWord/_staticDocParts/webSettings.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<w:webSettings xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:optimizeForBrowser/></w:webSettings> \ No newline at end of file diff --git a/SyndisSpm.wsdl b/SyndisSpm.wsdl new file mode 100644 index 0000000..7a45e23 --- /dev/null +++ b/SyndisSpm.wsdl @@ -0,0 +1,448 @@ +<?xml version="1.0" encoding="utf-8"?> +<definitions +xmlns="http://schemas.xmlsoap.org/wsdl/" +xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" +xmlns:xs="http://www.w3.org/2001/XMLSchema" +xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" +xmlns:tns="http://www.mikronika.com.pl/2014/11/24/spm/wsdl" +xmlns:ns="http://www.mikronika.com.pl/2014/11/24/spm/types" +targetNamespace="http://www.mikronika.com.pl/2014/11/24/spm/wsdl"> + + <types> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.mikronika.com.pl/2014/11/24/spm/types"> + + <complexType name="Identifier"> + <sequence> + <element name="id" type="string" /> + </sequence> + </complexType> + + <complexType name="WellIdentifier"> + <sequence> + <element name="id" type="string" /> + </sequence> + </complexType> + + <complexType name="WellIdentifiers"> + <sequence> + <element name="ids" type="ns:WellIdentifier" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="PiezometerIdentifier"> + <sequence> + <element name="id" type="string" /> + </sequence> + </complexType> + + <complexType name="PiezometerIdentifiers"> + <sequence> + <element name="ids" type="ns:PiezometerIdentifier" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <simpleType name="MeasurementFlag"> + <restriction base="string"> + <enumeration value="NOTFOUND" /> + <enumeration value="NOTREALIABLE" /> + <enumeration value="CORRECT" /> + <enumeration value="MANUAL" /> + </restriction> + </simpleType> + + <complexType name="Measurement"> + <sequence> + <element name="value" type="double" /> + <element name="date" type="dateTime" /> + <element name="flag" type="ns:MeasurementFlag" /> + </sequence> + </complexType> + + <complexType name="WellData"> + <sequence> + <element name="well" type="ns:WellIdentifier" /> + <element name="currentL1" type="ns:Measurement" /> + <element name="currentL2" type="ns:Measurement" /> + <element name="currentL3" type="ns:Measurement" /> + <element name="voltageL12" type="ns:Measurement" /> + <element name="voltageL23" type="ns:Measurement" /> + <element name="activePower" type="ns:Measurement" /> + <element name="cos" type="ns:Measurement" /> + <element name="activeEnergy" type="ns:Measurement" /> + <element name="waterTemperature" type="ns:Measurement" /> + <element name="pressureBeforeThrottle" type="ns:Measurement" /> + <element name="pressureAfterThrottle" type="ns:Measurement" /> + <element name="pressureInPistonBody" type="ns:Measurement" /> + <element name="pumpEfficiency" type="ns:Measurement" /> + <element name="waterTablePosition" type="ns:Measurement" /> + <element name="throttlePosition" type="ns:Measurement" /> + <element name="pumpedWaterAmount" type="ns:Measurement" /> + <element name="ClInPumpedWater" type="ns:Measurement" /> + <element name="so52v21ksoTemperature" type="ns:Measurement" /> + <element name="currentDiagnosticsOperationState" type="ns:Measurement" /> + <element name="energyConsumption" type="ns:Measurement" /> + <element name="staticWaterTable" type="ns:Measurement" /> + <element name="initialStaticWaterTable" type="ns:Measurement" /> + <element name="dynamicWaterTable" type="ns:Measurement" /> + <element name="HdFromSetpoint" type="ns:Measurement" /> + <element name="HdToSetpoint" type="ns:Measurement" /> + <element name="QFromSetpoint" type="ns:Measurement" /> + <element name="QToSetpoint" type="ns:Measurement" /> + <element name="QminSetpoint" type="ns:Measurement" /> + <element name="pumpRuntime" type="ns:Measurement" /> + <element name="pumpOnOff" type="ns:Measurement" /> + <element name="pressureBeforeThrottlemA" type="ns:Measurement" /> + <element name="pressureAfterThrottlemA" type="ns:Measurement" /> + <element name="pressureInPistonBodymA" type="ns:Measurement" /> + <element name="pumpEfficiencymA" type="ns:Measurement" /> + <element name="waterTablePositionmA" type="ns:Measurement" /> + <element name="barometricPressuremA" type="ns:Measurement" /> + <element name="pumpOnOffReason" type="ns:Measurement" /> + </sequence> + </complexType> + + <complexType name="WellsData"> + <sequence> + <element name="wells" type="ns:WellData" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="PiezometerData"> + <sequence> + <element name="piezometer" type="ns:PiezometerIdentifier" /> + <element name="staticWaterTable" type="ns:Measurement" /> + </sequence> + </complexType> + + <complexType name="PiezometersData"> + <sequence> + <element name="piezometers" type="ns:PiezometerData" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="UserLogin"> + <sequence> + <element name="login" type="string" /> + </sequence> + </complexType> + + <complexType name="UserInfo"> + <sequence> + <element name="login" type="string" /> + <element name="fullName" type="string" /> + <element name="isActive" type="boolean" /> + <element name="isAdmin" type="boolean" /> + <element name="isEditForms" type="boolean" /> + <element name="isEditReports" type="boolean" /> + <element name="isConfig" type="boolean" /> + <element name="isChangeValues" type="boolean" /> + <element name="regions" type="int" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="EmptyRequest"> + <sequence> + </sequence> + </complexType> + + <complexType name="UserInfos"> + <sequence> + <element name="users" type="ns:UserInfo" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="WellHistoryScope"> + <sequence> + <element name="well" type="ns:WellIdentifier" /> + <element name="date" type="dateTime" /> + </sequence> + </complexType> + + <complexType name="SignalHistory"> + <sequence> + <element name="well" type="ns:WellIdentifier" /> + <element name="probes" type="ns:Measurement" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <simpleType name="MeasurementType"> + <restriction base="string"> + <enumeration value="currentL1" /> + <enumeration value="currentL2" /> + <enumeration value="currentL3" /> + <enumeration value="voltageL12" /> + <enumeration value="voltageL23" /> + <enumeration value="activePower" /> + <enumeration value="cos" /> + <enumeration value="activeEnergy" /> + <enumeration value="energyConsumption" /> + <enumeration value="currentDiagnosticsOperationState" /> + <enumeration value="waterTemperature" /> + <enumeration value="throttlePosition" /> + <enumeration value="pressureBeforeThrottle" /> + <enumeration value="pressureBeforeThrottlemA" /> + <enumeration value="pressureAfterThrottle" /> + <enumeration value="pressureAfterThrottlemA" /> + <enumeration value="pressureInPistonBody" /> + <enumeration value="pressureInPistonBodymA" /> + <enumeration value="pumpEfficiency" /> + <enumeration value="pumpEfficiencymA" /> + <enumeration value="pumpRuntime" /> + <enumeration value="pumpedWaterAmount" /> + <enumeration value="ClInPumpedWater" /> + <enumeration value="waterTablePosition" /> + <enumeration value="waterTablePositionmA" /> + <enumeration value="staticWaterTable" /> + <enumeration value="initialStaticWaterTable" /> + <enumeration value="dynamicWaterTable" /> + <enumeration value="barometricPressure" /> + </restriction> + </simpleType> + + <complexType name="MeasurementHistoryScope"> + <sequence> + <element name="object" type="ns:Identifier" /> + <element name="type" type="ns:MeasurementType" /> + <element name="dateFrom" type="dateTime" /> + <element name="dateTo" type="dateTime" /> + </sequence> + </complexType> + + <complexType name="MeasurementHistory"> + <sequence> + <element name="object" type="ns:Identifier" /> + <element name="type" type="ns:MeasurementType" /> + <element name="probes" type="ns:Measurement" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="PumpSwitchHistoryScope"> + <sequence> + <element name="well" type="ns:WellIdentifier" /> + <element name="filtered" type="boolean" /> + <element name="date" type="dateTime" /> + </sequence> + </complexType> + + <complexType name="PumpSwitchState"> + <sequence> + <element name="value" type="double" /> + <element name="date" type="dateTime" /> + <element name="flag" type="ns:MeasurementFlag" /> + <element name="reason" type="int" /> + </sequence> + </complexType> + + <complexType name="PumpSwitchHistory"> + <sequence> + <element name="well" type="ns:WellIdentifier" /> + <element name="probes" type="ns:PumpSwitchState" minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <element name="GetWellDataRequest" type="ns:WellIdentifier" /> + <element name="GetWellDataResponse" type="ns:WellData" /> + <element name="GetWellsDataRequest" type="ns:WellIdentifiers" /> + <element name="GetWellsDataResponse" type="ns:WellsData" /> + <element name="GetPiezometerDataRequest" type="ns:PiezometerIdentifier" /> + <element name="GetPiezometerDataResponse" type="ns:PiezometerData" /> + <element name="GetPiezometersDataRequest" type="ns:PiezometerIdentifiers" /> + <element name="GetPiezometersDataResponse" type="ns:PiezometersData" /> + <element name="GetUserInfoRequest" type="ns:UserLogin" /> + <element name="GetUserInfoResponse" type="ns:UserInfo" /> + <element name="GetUserInfosRequest" type="ns:EmptyRequest" /> + <element name="GetUserInfosResponse" type="ns:UserInfos" /> + <element name="GetPumpSwitchHistoryRequest" type="ns:WellHistoryScope" /> + <element name="GetPumpSwitchHistoryResponse" type="ns:SignalHistory" /> + <element name="GetMeasurementHistoryRequest" type="ns:MeasurementHistoryScope" /> + <element name="GetMeasurementHistoryResponse" type="ns:MeasurementHistory" /> + <element name="GetPumpSwitchAndReasonsHistoryRequest" type="ns:PumpSwitchHistoryScope" /> + <element name="GetPumpSwitchAndReasonsHistoryResponse" type="ns:PumpSwitchHistory" /> + </schema> + </types> + + <message name="GetWellDataRequest"> + <part name="request" element="ns:GetWellDataRequest" /> + </message> + <message name="GetWellDataResponse"> + <part name="response" element="ns:GetWellDataResponse" /> + </message> + <message name="GetWellsDataRequest"> + <part name="request" element="ns:GetWellsDataRequest" /> + </message> + <message name="GetWellsDataResponse"> + <part name="response" element="ns:GetWellsDataResponse" /> + </message> + <message name="GetPiezometerDataRequest"> + <part name="request" element="ns:GetPiezometerDataRequest" /> + </message> + <message name="GetPiezometerDataResponse"> + <part name="response" element="ns:GetPiezometerDataResponse" /> + </message> + <message name="GetPiezometersDataRequest"> + <part name="request" element="ns:GetPiezometersDataRequest" /> + </message> + <message name="GetPiezometersDataResponse"> + <part name="response" element="ns:GetPiezometersDataResponse" /> + </message> + <message name="GetUserInfoRequest"> + <part name="request" element="ns:GetUserInfoRequest" /> + </message> + <message name="GetUserInfoResponse"> + <part name="response" element="ns:GetUserInfoResponse" /> + </message> + <message name="GetUserInfosRequest"> + <part name="request" element="ns:GetUserInfosRequest" /> + </message> + <message name="GetUserInfosResponse"> + <part name="response" element="ns:GetUserInfosResponse" /> + </message> + <message name="GetPumpSwitchHistoryRequest"> + <part name="request" element="ns:GetPumpSwitchHistoryRequest" /> + </message> + <message name="GetPumpSwitchHistoryResponse"> + <part name="response" element="ns:GetPumpSwitchHistoryResponse" /> + </message> + <message name="GetMeasurementHistoryRequest"> + <part name="request" element="ns:GetMeasurementHistoryRequest" /> + </message> + <message name="GetMeasurementHistoryResponse"> + <part name="response" element="ns:GetMeasurementHistoryResponse" /> + </message> + <message name="GetPumpSwitchAndReasonsHistoryRequest"> + <part name="request" element="ns:GetPumpSwitchAndReasonsHistoryRequest" /> + </message> + <message name="GetPumpSwitchAndReasonsHistoryResponse"> + <part name="response" element="ns:GetPumpSwitchAndReasonsHistoryResponse" /> + </message> + + <portType name="SyndisSpmPort"> + <operation name="GetWellData"> + <input message="tns:GetWellDataRequest" /> + <output message="tns:GetWellDataResponse" /> + </operation> + <operation name="GetWellsData"> + <input message="tns:GetWellsDataRequest" /> + <output message="tns:GetWellsDataResponse" /> + </operation> + <operation name="GetPiezometerData"> + <input message="tns:GetPiezometerDataRequest" /> + <output message="tns:GetPiezometerDataResponse" /> + </operation> + <operation name="GetPiezometersData"> + <input message="tns:GetPiezometersDataRequest" /> + <output message="tns:GetPiezometersDataResponse" /> + </operation> + <operation name="GetUserInfo"> + <input message="tns:GetUserInfoRequest" /> + <output message="tns:GetUserInfoResponse" /> + </operation> + <operation name="GetUserInfos"> + <input message="tns:GetUserInfosRequest" /> + <output message="tns:GetUserInfosResponse" /> + </operation> + <operation name="GetPumpSwitchHistory"> + <input message="tns:GetPumpSwitchHistoryRequest" /> + <output message="tns:GetPumpSwitchHistoryResponse" /> + </operation> + <operation name="GetMeasurementHistory"> + <input message="tns:GetMeasurementHistoryRequest" /> + <output message="tns:GetMeasurementHistoryResponse" /> + </operation> + <operation name="GetPumpSwitchAndReasonsHistory"> + <input message="tns:GetPumpSwitchAndReasonsHistoryRequest" /> + <output message="tns:GetPumpSwitchAndReasonsHistoryResponse" /> + </operation> + </portType> + + <binding name="SyndisSpmBinding" type="tns:SyndisSpmPort"> + <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> + <operation name="GetWellData"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetWellData" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetWellsData"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetWellsData" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetPiezometerData"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetPiezometerData" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetPiezometersData"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetPiezometersData" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetUserInfo"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetUserInfo" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetUserInfos"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetUserInfos" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetPumpSwitchHistory"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetPumpSwitchHistory" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetMeasurementHistory"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetMeasurementHistory" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + <operation name="GetPumpSwitchAndReasonsHistory"> + <soap:operation soapAction="http://www.mikronika.com.pl/2014/11/24/spm/GetPumpSwitchAndReasonsHistory" style="document"/> + <input> + <soap:body use="literal"/> + </input> + <output> + <soap:body use="literal"/> + </output> + </operation> + </binding> + + <service name="SyndisSpmService"> + <port name="SyndisSpmService" binding="tns:SyndisSpmBinding"> + <soap:address location="http://localhost"/> + </port> + </service> +</definitions> diff --git a/a_delengdouble.php b/a_delengdouble.php new file mode 100644 index 0000000..45ac2f8 --- /dev/null +++ b/a_delengdouble.php @@ -0,0 +1,72 @@ +<?php +require_once('./func.php'); +require_once('./dbaccess.php'); +require_once('./polynomial/math.php'); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + +$groupArray = sqlGetResAsArray("select DRS_SN_NUMBER, count(DRS_SN_NUMBER) ILE from seg_dev_resources where DRS_DEV_TYPE=11 group by DRS_SN_NUMBER,DRS_AUDIT_USR having count(DRS_SN_NUMBER)>2"); +for ($i=0; $i<count($groupArray); $i++) +{ + echo'SN: '.$groupArray[$i]['DRS_SN_NUMBER'].'<br/>'; + + unset($arrayCompare); + + unset($stmotArray); + $stmotArray = sqlGetResAsArray("select * from stp_stamot where stp_stamot_nr_m='".$groupArray[$i]['DRS_SN_NUMBER']."'"); + for ($i1=0; $i1<count($stmotArray); $i1++) + { + unset($engOK); + $engOK = sqlGetResAsArray("select * from seg_engines where ENG_NAME='".$stmotArray[$i1]['stp_stamot_typ_m']."' and ENG_VOLTAGE='".$stmotArray[$i1]['stp_stamot_u']."'"); + + if ($engOK[0]['ENG_ID']>0) + { + $arrayCompare[] = array( + 'id' => $engOK[0]['ENG_ID'] + ); + + echo 'eng_id: '.$engOK[0]['ENG_ID'].'<br>'; + } + } + + echo'======================= ENG ID ================================================<br>'; + + unset($engDelArray); + $engDelArray = sqlGetResAsArray("select * from seg_dev_resources where DRS_SN_NUMBER='".$groupArray[$i]['DRS_SN_NUMBER']."'"); + for ($i2=0; $i2<count($engDelArray); $i2++) + { + $licznik=0; + + for ($i3=0; $i3<count($arrayCompare); $i3++) + { + if ($engDelArray[$i2]['DRS_DEV_ID'] == $arrayCompare[$i3]['id']) + { + $licznik++; + } + } + + // jeżeli nie znalazł - usuwa + if ($licznik==0) + { + mysql_query("DELETE FROM softspm.seg_dev_resources WHERE DRS_ID=".$engDelArray[$i2]['DRS_ID']); + echo("DELETE FROM softspm.seg_dev_resources WHERE DRS_ID=".$engDelArray[$i2]['DRS_ID']); + echo';<br>'; + } + + } + + echo'=============================================================================='; + echo'<br>'; + echo'<br>'; +} + + + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; +mysql_close($polacz); +?> \ No newline at end of file diff --git a/a_moremesurment.php b/a_moremesurment.php new file mode 100644 index 0000000..6e5f5b6 --- /dev/null +++ b/a_moremesurment.php @@ -0,0 +1,33 @@ +<?php +require_once('./func.php'); +require_once('./dbaccess.php'); +require_once('./polynomial/math.php'); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +unset($groupArray); +//$groupArray = sqlGetResAsArray("select RHD_DRS_ID, RHD_DATE, count(RHD_DATE) from rep_his_data_everyday where RHD_Q_VAL>0 group by RHD_DRS_ID, RHD_DATE HAVING count(RHD_DATE)>1"); +//$groupArray = sqlGetResAsArray("select RHD_DRS_ID, RHD_DATE, count(RHD_DATE) from rep_his_data_everyday where RHD_HST0_VAL is null group by RHD_DRS_ID, RHD_DATE HAVING count(RHD_DATE)>1"); +$groupArray = sqlGetResAsArray("select RHD_DRS_ID, RHD_DATE, count(RHD_DATE) from rep_his_data_everyday where RHD_HST0_VAL is not null group by RHD_DRS_ID, RHD_DATE HAVING count(RHD_DATE)>1"); +for ($i=0; $i<count($groupArray); $i++) +{ + unset($wellMesArray); + $licz=0; + $wellMesArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_DRS_ID=".$groupArray[$i]['RHD_DRS_ID']." and RHD_DATE='".$groupArray[$i]['RHD_DATE']."'"); + for($j=0; $j<(count($wellMesArray)-1); $j++) + { + mysql_query("DELETE FROM rep_his_data_everyday WHERE RHD_ID=".$wellMesArray[$j]['RHD_ID']); + $licz++; + } + echo'Usunięto '.$licz.' rekordów dla studni '.$groupArray[$i]['RHD_DRS_ID'].' i daty: '.$groupArray[$i]['RHD_DATE'].'<br/>'; + +} + + + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; +mysql_close($polacz); +?> \ No newline at end of file diff --git a/a_synch_everyday.php b/a_synch_everyday.php new file mode 100644 index 0000000..3332937 --- /dev/null +++ b/a_synch_everyday.php @@ -0,0 +1,198 @@ +<?php +$db_connection = array( + 'host' => 'localhost', + 'username' => 'root', + 'password' => 'Mikronika123', + 'db_name' => 'softspm', +); + +$db_connection_ext = array( + 'host' => '172.21.11.101', + 'username' => 'slave_user', + 'password' => 'slave_user', + 'db_name' => 'softspm', +); + + +// funkcja zwraca zaytanie SQL do tablicy +// ========================================================== // +function sqlGetResAsArray($query) +{ + $res=null; + $res = array(); + + if(!$results = mysql_query($query)){ + echo mysql_error(); + return false; + } + for($i=0; $row=mysql_fetch_assoc($results); $i++) + $res[$i]=$row; + + return $res; +} +// ========================================================== // + +function getFloatValue($inParam) +{ + unset($outParam); + if (!empty($inParam) || strlen($inParam)>0) + { + $inParam = str_replace(array('\'', '\"'), array('', ''), $inParam); + $inParam = (float)str_replace(',', '.', $inParam); + $outParam = round($inParam, 2); + } + else + $outParam = null; + + return $outParam; +} +// ==================================================================================================================== // + + +// ==================================================================================================================== // +$loc = mysql_connect($db_connection['host'], $db_connection['username'], $db_connection['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + unset($maxRHD_ID); + $maxRHD_ID = sqlGetResAsArray("select max(RHD_ID) RHD_ID from rep_his_data_everyday"); + + echo $maxRHD_ID[0]['RHD_ID']; + echo'<br/>'; + +mysql_close($loc); +// ==================================================================================================================== // + + + +// naza zewnętrzna +// ==================================================================================================================== // +$ext = mysql_connect($db_connection_ext['host'], $db_connection_ext['username'], $db_connection_ext['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection_ext['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + unset($ext_his_data_everyday); + $ext_his_data_everyday = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID>".$maxRHD_ID[0]['RHD_ID']." limit 10000"); + + +mysql_close($ext); +// ==================================================================================================================== // + + + +// ==================================================================================================================== // +$loc = mysql_connect($db_connection['host'], $db_connection['username'], $db_connection['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +for($i=0; $i<count($ext_his_data_everyday); $i++) +{ + //INSERT INTO rep_his_data_everyday SET RHD_ID=11464080,RHD_DRS_ID=1,RHD_DATE='2018-01-01',RHD_HST0_VAL=1,RHD_HST_VAL=1,RHD_HD_VAL=1,RHD_Q_VAL=1,RHD_P1_VAL=1,RHD_P2_VAL=1,RHD_I_VAL=1,RHD_U_VAL=1,RHD_PE_VAL=1,RHD_COS_VAL=1,RHD_PP_VAL=1,RHD_HH_VAL=1,RHD_VM3_VAL=1,RHD_WTEMP_VAL=1,RHD_DGN_VAL=1,RHD_WORK_TIME_VAL=1,RHD_SPM_WT=1,RHD_SPM_PW=1,RHD_AUDIT_CD='2018-01-01'; + unset($query); + $query = "INSERT INTO rep_his_data_everyday SET RHD_ID=".$ext_his_data_everyday[$i]['RHD_ID'].",RHD_DRS_ID=".$ext_his_data_everyday[$i]['RHD_DRS_ID'].",RHD_DATE='".$ext_his_data_everyday[$i]['RHD_DATE']."',RHD_AUDIT_CD='".$ext_his_data_everyday[$i]['RHD_AUDIT_CD']."'"; + if ($ext_his_data_everyday[$i]['RHD_HST0_VAL']>0) $query .= ",RHD_HST0_VAL=".$ext_his_data_everyday[$i]['RHD_HST0_VAL']; + if ($ext_his_data_everyday[$i]['RHD_HST_VAL']>0) $query .= ",RHD_HST_VAL=".$ext_his_data_everyday[$i]['RHD_HST_VAL']; + if ($ext_his_data_everyday[$i]['RHD_HD_VAL']>0) $query .= ",RHD_HD_VAL=".$ext_his_data_everyday[$i]['RHD_HD_VAL']; + if ($ext_his_data_everyday[$i]['RHD_Q_VAL']>0) $query .= ",RHD_Q_VAL=".$ext_his_data_everyday[$i]['RHD_Q_VAL']; + if ($ext_his_data_everyday[$i]['RHD_P1_VAL']>0) $query .= ",RHD_P1_VAL=".$ext_his_data_everyday[$i]['RHD_P1_VAL']; + if ($ext_his_data_everyday[$i]['RHD_P2_VAL']>0) $query .= ",RHD_P2_VAL=".$ext_his_data_everyday[$i]['RHD_P2_VAL']; + if ($ext_his_data_everyday[$i]['RHD_I_VAL']>0) $query .= ",RHD_I_VAL=".$ext_his_data_everyday[$i]['RHD_I_VAL']; + if ($ext_his_data_everyday[$i]['RHD_U_VAL']>0) $query .= ",RHD_U_VAL=".$ext_his_data_everyday[$i]['RHD_U_VAL']; + if ($ext_his_data_everyday[$i]['RHD_PE_VAL']>0) $query .= ",RHD_PE_VAL=".$ext_his_data_everyday[$i]['RHD_PE_VAL']; + if ($ext_his_data_everyday[$i]['RHD_COS_VAL']>0) $query .= ",RHD_COS_VAL=".$ext_his_data_everyday[$i]['RHD_COS_VAL']; + if ($ext_his_data_everyday[$i]['RHD_PP_VAL']>0) $query .= ",RHD_PP_VAL=".$ext_his_data_everyday[$i]['RHD_PP_VAL']; + if ($ext_his_data_everyday[$i]['RHD_HH_VAL']>0) $query .= ",RHD_HH_VAL=".$ext_his_data_everyday[$i]['RHD_HH_VAL']; + if ($ext_his_data_everyday[$i]['RHD_VM3_VAL']>0) $query .= ",RHD_VM3_VAL=".$ext_his_data_everyday[$i]['RHD_VM3_VAL']; + if ($ext_his_data_everyday[$i]['RHD_WTEMP_VAL']>0) $query .= ",RHD_WTEMP_VAL=".$ext_his_data_everyday[$i]['RHD_WTEMP_VAL']; + if ($ext_his_data_everyday[$i]['RHD_DGN_VAL']>0) $query .= ",RHD_DGN_VAL=".$ext_his_data_everyday[$i]['RHD_DGN_VAL']; + if ($ext_his_data_everyday[$i]['RHD_WORK_TIME_VAL']>0) $query .= ",RHD_WORK_TIME_VAL=".$ext_his_data_everyday[$i]['RHD_WORK_TIME_VAL']; + if ($ext_his_data_everyday[$i]['RHD_SPM_WT']>0) $query .= ",RHD_SPM_WT=".$ext_his_data_everyday[$i]['RHD_SPM_WT']; + if ($ext_his_data_everyday[$i]['RHD_SPM_PW']>0) $query .= ",RHD_SPM_PW=".$ext_his_data_everyday[$i]['RHD_SPM_PW']; + + echo $query; + mysql_query($query); + echo'<br/>'; + +} + +mysql_close($loc); +// ==================================================================================================================== // +// ==================================================================================================================== // +// ==================================================================================================================== // + +echo'<br/>'; +echo'<br/>'; +echo'<br/>'; + + +// dane jakościowe +// ==================================================================================================================== // +$ext = mysql_connect($db_connection_ext['host'], $db_connection_ext['username'], $db_connection_ext['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection_ext['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + unset($ext_rep_soap_syndis_quality_data); + $ext_rep_soap_syndis_quality_data = sqlGetResAsArray("select * from rep_soap_syndis_quality_data"); +mysql_close($ext); +// ==================================================================================================================== // + + + + +// ==================================================================================================================== // +$loc = mysql_connect($db_connection['host'], $db_connection['username'], $db_connection['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +mysql_query("truncate table rep_soap_syndis_quality_data"); + +for ($i=0; $i<count($ext_rep_soap_syndis_quality_data); $i++) +{ + unset($query); + $query = "INSERT INTO rep_soap_syndis_quality_data SET SQD_ID=".$ext_rep_soap_syndis_quality_data[$i]['SQD_ID'].",SQD_DRS_ID=".$ext_rep_soap_syndis_quality_data[$i]['SQD_DRS_ID']; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_OBJECT_NAME'])>0) $query .= ",SQD_OBJECT_NAME='".$ext_rep_soap_syndis_quality_data[$i]['SQD_OBJECT_NAME']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_Q'])>0) $query .= ",SQD_VAL_Q='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_Q']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_Q'])>0) $query .= ",SQD_FLG_Q='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_Q']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_P1'])>0) $query .= ",SQD_VAL_P1='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_P1']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_P1'])>0) $query .= ",SQD_FLG_P1='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_P1']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_P2'])>0) $query .= ",SQD_VAL_P2='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_P2']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_P2'])>0) $query .= ",SQD_FLG_P2='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_P2']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_I'])>0) $query .= ",SQD_VAL_I='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_I']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_I'])>0) $query .= ",SQD_FLG_I='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_I']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_U'])>0) $query .= ",SQD_VAL_U='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_U']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_U'])>0) $query .= ",SQD_FLG_U='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_U']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_CF'])>0) $query .= ",SQD_VAL_CF='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_CF']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_CF'])>0) $query .= ",SQD_FLG_CF='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_CF']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_PE'])>0) $query .= ",SQD_VAL_PE='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_PE']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_PE'])>0) $query .= ",SQD_FLG_PE='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_PE']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_PP'])>0) $query .= ",SQD_VAL_PP='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_PP']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_PP'])>0) $query .= ",SQD_FLG_PP='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_PP']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_HH'])>0) $query .= ",SQD_VAL_HH='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_HH']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_HH'])>0) $query .= ",SQD_FLG_HH='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_HH']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_HD'])>0) $query .= ",SQD_VAL_HD='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_HD']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_HD'])>0) $query .= ",SQD_FLG_HD='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_HD']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_ONOFF'])>0) $query .= ",SQD_VAL_ONOFF='".$ext_rep_soap_syndis_quality_data[$i]['SQD_VAL_ONOFF']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_ONOFF'])>0) $query .= ",SQD_FLG_ONOFF='".$ext_rep_soap_syndis_quality_data[$i]['SQD_FLG_ONOFF']."'"; + if (strlen($ext_rep_soap_syndis_quality_data[$i]['SQD_AUDIT_CD'])>0) $query .= ",SQD_AUDIT_CD='".$ext_rep_soap_syndis_quality_data[$i]['SQD_AUDIT_CD']."'"; + + echo $query; + mysql_query($query); + echo'<br/>'; + +} + + + +mysql_close($loc); +// ==================================================================================================================== // + + + + +?> \ No newline at end of file diff --git a/a_synch_resources_det.php b/a_synch_resources_det.php new file mode 100644 index 0000000..d7c1116 --- /dev/null +++ b/a_synch_resources_det.php @@ -0,0 +1,114 @@ +<?php +$db_connection = array( + 'host' => 'localhost', + 'username' => 'root', + 'password' => 'Mikronika123', + 'db_name' => 'softspm', +); + +$db_connection_ext = array( + 'host' => '172.21.11.101', + 'username' => 'slave_user', + 'password' => 'slave_user', + 'db_name' => 'softspm', +); + + +// funkcja zwraca zaytanie SQL do tablicy +// ========================================================== // +function sqlGetResAsArray($query) +{ + $res=null; + $res = array(); + + if(!$results = mysql_query($query)){ + echo mysql_error(); + return false; + } + for($i=0; $row=mysql_fetch_assoc($results); $i++) + $res[$i]=$row; + + return $res; +} +// ========================================================== // + +function getFloatValue($inParam) +{ + unset($outParam); + if (!empty($inParam) || strlen($inParam)>0) + { + $inParam = str_replace(array('\'', '\"'), array('', ''), $inParam); + $inParam = (float)str_replace(',', '.', $inParam); + $outParam = round($inParam, 2); + } + else + $outParam = null; + + return $outParam; +} +// ==================================================================================================================== // + + +// ==================================================================================================================== // +$loc = mysql_connect($db_connection['host'], $db_connection['username'], $db_connection['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + unset($maxRHD_ID); + $maxRHD_ID = sqlGetResAsArray("select max(DRD_ID) DRD_ID from seg_dev_resources_det"); + + echo $maxRHD_ID[0]['RHD_ID']; + echo'<br/>'; + +mysql_close($loc); +// ==================================================================================================================== // + + + +// naza zewnętrzna +// ==================================================================================================================== // +$ext = mysql_connect($db_connection_ext['host'], $db_connection_ext['username'], $db_connection_ext['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection_ext['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + unset($ext_seg_dev_resources_det); + $ext_seg_dev_resources_det = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID>".$maxRHD_ID[0]['DRD_ID']." limit 5000"); + + +mysql_close($ext); +// ==================================================================================================================== // + + + +// ==================================================================================================================== // +$loc = mysql_connect($db_connection['host'], $db_connection['username'], $db_connection['password']) or die ('cannot connect to db'); +mysql_select_db($db_connection['db_name']); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +for($i=0; $i<count($ext_seg_dev_resources_det); $i++) +{ + //INSERT INTO seg_dev_resources_det SET DRD_ID=1,DRD_DRS_ID=1,DRD_RESOURCES_DETAIL=1,DRD_VALUE='1',DRD_DESCRIPTION='1',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='1',DRD_AUDIT_DATE='2010-01-01'; + unset($query); + $query = "INSERT INTO seg_dev_resources_det SET DRD_ID=".$ext_seg_dev_resources_det[$i]['DRD_ID'].",DRD_DRS_ID=".$ext_seg_dev_resources_det[$i]['DRD_DRS_ID']; + if (strlen($ext_seg_dev_resources_det[$i]['DRD_RESOURCES_DETAIL']>0)) $query .= ",DRD_RESOURCES_DETAIL='".$ext_seg_dev_resources_det[$i]['DRD_RESOURCES_DETAIL']."'"; + if (strlen($ext_seg_dev_resources_det[$i]['DRD_VALUE']>0)) $query .= ",DRD_VALUE='".$ext_seg_dev_resources_det[$i]['DRD_VALUE']."'"; + if (strlen($ext_seg_dev_resources_det[$i]['DRD_DESCRIPTION']>0)) $query .= ",DRD_DESCRIPTION='".$ext_seg_dev_resources_det[$i]['DRD_DESCRIPTION']."'"; + if (strlen($ext_seg_dev_resources_det[$i]['DRD_EXPORT_SEGAP']>0)) $query .= ",DRD_EXPORT_SEGAP='".$ext_seg_dev_resources_det[$i]['DRD_EXPORT_SEGAP']."'"; + if (strlen($ext_seg_dev_resources_det[$i]['DRD_AUDIT_USR']>0)) $query .= ",DRD_AUDIT_USR='".$ext_seg_dev_resources_det[$i]['DRD_AUDIT_USR']."'"; + if (strlen($ext_seg_dev_resources_det[$i]['DRD_AUDIT_DATE']>0)) $query .= ",DRD_AUDIT_DATE='".$ext_seg_dev_resources_det[$i]['DRD_AUDIT_DATE']."'"; + + echo $query; + mysql_query($query); + echo'<br/>'; + +} + +mysql_close($loc); +// ==================================================================================================================== // + + +?> \ No newline at end of file diff --git a/aggZleceniaLost.php b/aggZleceniaLost.php new file mode 100644 index 0000000..a135599 --- /dev/null +++ b/aggZleceniaLost.php @@ -0,0 +1,170 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Brakujące agregaty w zleceniach w SoftSPM</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + + +</head> +<body> +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +?> + +<h1>Analiza danych - POMPY...</h1> + +<?php +unset($lostAggArray); +$lostAggArray = sqlGetResAsArray("select * from rep_aggregate_departments where PUP_DRS_ID is null or PUP_DRS_ID=0"); + +for($i=0; $i<count($lostAggArray); $i++) +{ + unset($pupArray); + $pupArray = sqlGetResAsArray("select * from seg_pumps where PUP_NAME='".$lostAggArray[$i]['PUP_NAME']."'"); + + unset($devArray); + $devArray = sqlGetResAsArray("select * from seg_dev_resources where DRS_SN_NUMBER='".$lostAggArray[$i]['PUP_SN_NO']."'"); + + // brakuje na stanie pompy - dodaje ze statusami 1 + if ((empty($devArray[0]['DRS_ID']) || $devArray[0]['DRS_ID']<=0) && $pupArray[0]['PUP_ID']>0) + { + echo 'Brakuje pompy na stanie - dodaje nową'; + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID='".$pupArray[0]['PUP_ID']."',DRS_DEV_TYPE=10,DRS_SN_NUMBER='".$lostAggArray[$i]['PUP_SN_NO']."',DRS_STATUS_DIC_ID=1,DRS_RESOURCES_DIC_ID=1,DRS_DEPARTMENT='".$lostAggArray[$i]['PUP_DEPARTMENT']."',DRS_AUDIT_DATE=now()"); + + unset($devArray); + $devArray = sqlGetResAsArray("select * from seg_dev_resources where DRS_SN_NUMBER='".$lostAggArray[$i]['PUP_SN_NO']."'"); + } + // istnieje agregat - aktualizauje dane + elseif ($devArray[0]['DRS_ID']>0 && $pupArray[0]['PUP_ID']>0) + { + echo 'Aktualizuje dane o pompie'; + mysql_query("UPDATE seg_dev_resources SET DRS_DEV_ID='".$pupArray[0]['PUP_ID']."',DRS_DEV_TYPE=10,DRS_STATUS_DIC_ID=1,DRS_RESOURCES_DIC_ID=1,DRS_DEPARTMENT='".$lostAggArray[$i]['PUP_DEPARTMENT']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$devArray[0]['DRS_ID']); + } + + + // aktualizauje wpisy w tabeli rep_aggregate_departments + if ($devArray[0]['DRS_ID']>0 && $pupArray[0]['PUP_ID']>0) + { + mysql_query("UPDATE rep_aggregate_departments SET PUP_ID='".$pupArray[0]['PUP_ID']."',PUP_DRS_ID='".$devArray[0]['DRS_ID']."',PUP_Q_N='".$pupArray[0]['PUP_Q_N']."',PUP_H_P='".$pupArray[0]['PUP_H_P']."' WHERE RAD_ID=".$lostAggArray[$i]['RAD_ID']); + } + + echo'<br/>'; +} +?> + +<h1>Analiza danych - SILNIKI...</h1> + +<?php +unset($lostAggArray); +$lostAggArray = sqlGetResAsArray("select * from rep_aggregate_departments where ENG_DRS_ID is null or ENG_DRS_ID=0"); +for($i=0; $i<count($lostAggArray); $i++) +{ + if ($lostAggArray[$i]['ENG_VOLTAGE']<200) $lostAggArray[$i]['ENG_VOLTAGE']=500; + + unset($engArray); + $engArray = sqlGetResAsArray("select * from seg_engines where ENG_NAME='".$lostAggArray[$i]['ENG_NAME']."' and ENG_VOLTAGE='".$lostAggArray[$i]['ENG_VOLTAGE']."'"); + + unset($devArray); + $devArray = sqlGetResAsArray("select * from seg_dev_resources where DRS_SN_NUMBER='".$lostAggArray[$i]['ENG_SN_NO']."'"); + + + // brakuje na stanie silnika - dodaje ze statusami 1 + if ((empty($devArray[0]['DRS_ID']) || $devArray[0]['DRS_ID']<=0) && $engArray[0]['ENG_ID']>0) + { + echo 'Brakuje silnika na stanie - dodaje nowy'; + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID='".$engArray[0]['ENG_ID']."',DRS_DEV_TYPE=11,DRS_SN_NUMBER='".$lostAggArray[$i]['ENG_SN_NO']."',DRS_STATUS_DIC_ID=1,DRS_RESOURCES_DIC_ID=1,DRS_DEPARTMENT='".$lostAggArray[$i]['PUP_DEPARTMENT']."',DRS_AUDIT_DATE=now()"); + + unset($devArray); + $devArray = sqlGetResAsArray("select * from seg_dev_resources where DRS_SN_NUMBER='".$lostAggArray[$i]['ENG_SN_NO']."'"); + } + // istnieje agregat - aktualizauje dane + elseif ($devArray[0]['DRS_ID']>0 && $engArray[0]['ENG_ID']>0) + { + echo 'Aktualizuje dane o silniku'; + mysql_query("UPDATE seg_dev_resources SET DRS_DEV_ID='".$engArray[0]['ENG_ID']."',DRS_DEV_TYPE=11,DRS_STATUS_DIC_ID=1,DRS_RESOURCES_DIC_ID=1,DRS_DEPARTMENT='".$lostAggArray[$i]['PUP_DEPARTMENT']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$devArray[0]['DRS_ID']); + } + + // aktualizauje wpisy w tabeli rep_aggregate_departments + if ($devArray[0]['DRS_ID']>0 && $engArray[0]['ENG_ID']>0) + { + mysql_query("UPDATE rep_aggregate_departments SET ENG_ID='".$engArray[0]['ENG_ID']."',ENG_DRS_ID='".$devArray[0]['DRS_ID']."' WHERE RAD_ID=".$lostAggArray[$i]['RAD_ID']); + } + + echo'<br/>'; +} +?> + + +<h1>Popmy - dodatek...</h1> +<?php +unset($lostAggArray); +$lostAggArray = sqlGetResAsArray("select stp_stapo_id_p,stp_stapo_typ_p,stp_stapo_nr_p,stp_stapo_stat_id,DRS_ID,DRS_SN_NUMBER,stp_status_kod,stp_status_nazwa,stp_uzytkownik_kod,stp_uzytkownik_nazwa,stp_stapo_user_id,(case when stp_stapo_stat_id=9 then 707 when stp_stapo_stat_id=1 then 3 when stp_stapo_stat_id=5 then 40 when stp_stapo_stat_id=7 then 1 when stp_stapo_stat_id=10 then 707 when stp_stapo_stat_id=4 then 707 when stp_stapo_stat_id=8 then 707 when stp_stapo_stat_id=3 then 707 when stp_stapo_stat_id=2 then 707 when stp_stapo_stat_id=6 then 2 else 707 end) DEV_STATUS from stp_status,stp_stapo left join seg_dev_resources on stp_stapo_nr_p=DRS_SN_NUMBER and DRS_DEV_TYPE=10 left join stp_uzytkownik on stp_stapo_user_id=stp_uzytkownik_id_u where stp_stapo_stat_id=stp_status_id_s and DRS_SN_NUMBER is null and stp_stapo_user_id in (1,2,3)"); +for($i=0; $i<count($lostAggArray); $i++) +{ + unset($pupArray); + $pupArray = sqlGetResAsArray("select * from seg_pumps where PUP_NAME='".$lostAggArray[$i]['stp_stapo_typ_p']."'"); + + if ($pupArray[0]['PUP_ID']>0) + { + unset($dep); + if ($lostAggArray[$i]['stp_stapo_user_id']==1) $dep = 'P/Bełchatów'; + elseif ($lostAggArray[$i]['stp_stapo_user_id']==2) $dep = 'Dębina'; + elseif ($lostAggArray[$i]['stp_stapo_user_id']==3) $dep = 'P/Szczerców'; + + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID='".$pupArray[0]['PUP_ID']."',DRS_DEV_TYPE=10,DRS_SN_NUMBER='".$lostAggArray[$i]['stp_stapo_nr_p']."',DRS_STATUS_DIC_ID=7,DRS_RESOURCES_DIC_ID='".$lostAggArray[$i]['DEV_STATUS']."',DRS_DEPARTMENT='".$dep."',DRS_AUDIT_USR='manual',DRS_AUDIT_DATE=now()"); + + echo'Dodano: '.$pupArray[0]['PUP_ID'].'<br/>'; + } +} +?> + + +<h1>Silniki - dodatek...</h1> +<?php +unset($lostAggArray); +$lostAggArray = sqlGetResAsArray("select stp_stamot_id_m,stp_stamot_typ_m,stp_stamot_nr_m,stp_stamot_u,stp_stamot_stat_id,DRS_ID,DRS_SN_NUMBER,stp_status_kod,stp_status_nazwa,stp_uzytkownik_kod,stp_uzytkownik_nazwa,stp_stamot_user_id, (case when stp_stamot_stat_id=9 then 707 when stp_stamot_stat_id=1 then 3 when stp_stamot_stat_id=5 then 40 when stp_stamot_stat_id=7 then 1 when stp_stamot_stat_id=10 then 707 when stp_stamot_stat_id=4 then 707 when stp_stamot_stat_id=8 then 707 when stp_stamot_stat_id=3 then 707 when stp_stamot_stat_id=2 then 707 when stp_stamot_stat_id=6 then 2 else 707 end) DEV_STATUS from stp_status,stp_stamot left join seg_dev_resources on stp_stamot_nr_m=DRS_SN_NUMBER and DRS_DEV_TYPE=11 left join stp_uzytkownik on stp_stamot_user_id=stp_uzytkownik_id_u where stp_stamot_stat_id=stp_status_id_s and DRS_SN_NUMBER is null and stp_stamot_user_id in (1,2,3)"); +for($i=0; $i<count($lostAggArray); $i++) +{ + if ($lostAggArray[$i]['stp_stamot_u']<200) $lostAggArray[$i]['stp_stamot_u']=500; + + unset($engArray); + $engArray = sqlGetResAsArray("select * from seg_engines where ENG_NAME='".$lostAggArray[$i]['stp_stamot_typ_m']."' and ENG_VOLTAGE='".$lostAggArray[$i]['stp_stamot_u']."'"); + + if ($engArray[0]['ENG_ID']>0) + { + unset($dep); + if ($lostAggArray[$i]['stp_stamot_user_id']==1) $dep = 'P/Bełchatów'; + elseif ($lostAggArray[$i]['stp_stamot_user_id']==2) $dep = 'Dębina'; + elseif ($lostAggArray[$i]['stp_stamot_user_id']==3) $dep = 'P/Szczerców'; + + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID='".$engArray[0]['ENG_ID']."',DRS_DEV_TYPE=11,DRS_SN_NUMBER='".$lostAggArray[$i]['stp_stamot_nr_m']."',DRS_STATUS_DIC_ID=7,DRS_RESOURCES_DIC_ID='".$lostAggArray[$i]['DEV_STATUS']."',DRS_DEPARTMENT='".$dep."',DRS_AUDIT_USR='manual',DRS_AUDIT_DATE=now()"); + + echo'Dodano: '.$engArray[0]['ENG_ID'].'<br/>'; + } +} +?> + + +<?php +mysql_close($polacz); + +?> +</body> +</html> \ No newline at end of file diff --git a/ajax_func.php b/ajax_func.php new file mode 100644 index 0000000..40be08c --- /dev/null +++ b/ajax_func.php @@ -0,0 +1,315 @@ +<?php session_start();?> +<?php +require_once'./func.php'; +require_once("./dbaccess.php"); +require_once"./language/".$_SESSION['lang'].".php"; + +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + +<?php + + +// odświerzanie tabeli rep_object_departments +if ($_POST['action']=='refresh_departments') +{ + mysql_query("truncate table rep_object_departments"); + mysql_query("insert into rep_object_departments select distinct DRS_ID,WLL_ID,WLL_NAME,RWL_PUP_DRS_ID,(select PUP_ID from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) PUP_ID,(select PUP_NAME from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_NAME,(select PUP_Q_N from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_Q_N,(select DRS_SN_NUMBER from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_NO,RWL_ENG_DRS_ID,(select ENG_ID from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) ENG_ID,(select ENG_NAME from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_NAME,(select ENG_POWER from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_POWER,(select DRS_SN_NUMBER from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_NO,WLL_SYS_TYPE SOD_DESC,DRS_DEPARTMENT SOD_PLC,OHC_UJ SOD_UJ from seg_wells inner join seg_object_hole_cards on WLL_NAME=OHC_NAME left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 where DRS_ID IS not null"); +} + +/* +// odświerzanie tabeli rep_aggregate_departments +if ($_POST['action']=='refresh_aggregates') +{ + mysql_query("truncate table rep_aggregate_departments"); + mysql_query("insert into rep_aggregate_departments select null,PUP_ID,PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,PUP_DEPARTMENT,ENG_ID,DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,DRS_DEPARTMENT,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from (select PUP_ID,DRS_ID PUP_DRS_ID,PUP_NAME,DRS_SN_NUMBER PUP_SN_NO,DRS_DEPARTMENT PUP_DEPARTMENT,PUP_Q_N,PUP_H_P,(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER)) ENG_ID,(select ENG_NAME from seg_engines where ENG_ID=(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER))) ENG_NAME,(select ENG_VOLTAGE from seg_engines where ENG_ID=(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER))) ENG_VOLTAGE,(select ENG_POWER from seg_engines where ENG_ID=(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER))) ENG_POWER,(select TST_ENG_SN_NO from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER)) ENG_SN_NO from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID where DRS_RESOURCES_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES' and DIC_NAME='RESERVE') and DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and DIC_NAME='AVAILABLE')and DRS_DEV_TYPE=10) tb1 left join seg_dev_resources on DRS_DEV_TYPE=11 and DRS_DEV_ID=tb1.ENG_ID and tb1.ENG_SN_NO=DRS_SN_NUMBER left join seg_engine_cables on ECB_ENG_NAME=ENG_NAME and ECB_ENG_NO=ENG_SN_NO"); +} +*/ + + + +//dodawanie dynamicznych warto�ci p�l +//zapis dynamicznego formularza +// ===================================================================================================================================== +if ($_POST['post_site']=='site401inf' && $_POST['post_action']=='edit_param' && $_POST['post_dev']>0) +{ + if (empty($_POST['post_zas']) || $_POST['post_zas']<0 || $_POST['post_zas']>100) $_POST['post_zas']=100; + $well_work_status = getLastValueFromDevResourceDetail('WELL_STATUSES','ON_OFF',$_POST['post_dev']); + if ($well_work_status=='ON') $well_work_status=1; + else $well_work_status=0; + + $dateVal = $_POST['post_date']; + + if (sqlStringValue("select WLL_CAT_DIC_ID from seg_dev_resources,seg_wells where WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$_POST['post_dev'], "WLL_CAT_DIC_ID") == 20) + { + $_POST['post_time'] = round(sqlValue("select getWellWorkingTimeInDate(".$_POST['post_dev'].",'".$dateVal."')")/3600,2); + $_POST['post_v'] = sqlValue("select getWellPumpedWaterInDate(".$_POST['post_dev'].",'".$dateVal."')"); + + // usuwa nowsze wpisy niż ten dodany przed chwilą + mysql_query("DELETE FROM rep_his_data_everyday WHERE RHD_DRS_ID=".$_POST['post_dev']." and RHD_DATE>'".$_POST['post_date']."'"); + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL in (200,205,210,215,220,225,230,245,401,402,730,270,275,280,290,260,721,265) and DRD_DRS_ID=".$_POST['post_dev']." and DRD_AUDIT_DATE>'".$_POST['post_date']."'"); + + } + + + + // wpisuje do tabeli z danymi historycznymi + $query_data_everyday = "INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".getFloatValue($_POST['post_dev']).",RHD_DATE='".$_POST['post_date']."'"; + if (getFloatValue($_POST['post_h0'])>0) $query_data_everyday .= ",RHD_HST0_VAL=".getFloatValue($_POST['post_h0']); + if (getFloatValue($_POST['post_hs'])>0) $query_data_everyday .= ",RHD_HST_VAL=".getFloatValue($_POST['post_hs']); + if (getFloatValue($_POST['post_hd'])>0) $query_data_everyday .= ",RHD_HD_VAL=".getFloatValue($_POST['post_hd']); + if (getFullFloatValue($_POST['post_q'])>0) $query_data_everyday .= ",RHD_Q_VAL=".getFullFloatValue($_POST['post_q'])*60; + if (getFloatValue($_POST['post_p1'])>0) $query_data_everyday .= ",RHD_P1_VAL=".getFloatValue($_POST['post_p1']); + if (getFloatValue($_POST['post_p2'])>0) $query_data_everyday .= ",RHD_P2_VAL=".getFloatValue($_POST['post_p2']); + if (getFloatValue($_POST['post_i'])>0) $query_data_everyday .= ",RHD_I_VAL=".getFloatValue($_POST['post_i']); + if (getFloatValue($_POST['post_u'])>0) $query_data_everyday .= ",RHD_U_VAL=".getFloatValue($_POST['post_u']); + if (getFloatValue($_POST['post_pe'])>0) $query_data_everyday .= ",RHD_PE_VAL=".getFloatValue($_POST['post_pe']); + if (getFloatValue($_POST['post_fi'])>0) $query_data_everyday .= ",RHD_COS_VAL=".getFloatValue($_POST['post_fi']); + if (getFloatValue($_POST['post_pp'])>0) $query_data_everyday .= ",RHD_PP_VAL=".getFloatValue($_POST['post_pp']); + if (getFloatValue($_POST['post_hh'])>0) $query_data_everyday .= ",RHD_HH_VAL=".getFloatValue($_POST['post_hh']); + if (getFloatValue($_POST['post_v'])>0) $query_data_everyday .= ",RHD_VM3_VAL=".getFloatValue($_POST['post_v']); + if (getFloatValue($_POST['post_tw'])>0) $query_data_everyday .= ",RHD_WTEMP_VAL=".getFloatValue($_POST['post_tw']); + if (getFloatValue($_POST['post_time'])>0) $query_data_everyday .= ",RHD_WORK_TIME_VAL=".getFloatValue($_POST['post_time']); + $query_data_everyday .= ",RHD_AUDIT_CD=now()"; + + mysql_query($query_data_everyday); + + // jeśli studnia jest OPT lub BASE wpisuje jeszcze raz, żeby nie zaktualizować ostatnio wpisanego rekordu + if (sqlStringValue("select WLL_CAT_DIC_ID from seg_dev_resources,seg_wells where WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$_POST['post_dev'], "WLL_CAT_DIC_ID") < 20) + { + mysql_query($query_data_everyday); + } + + + + + // Q + if (getFullFloatValue($_POST['post_q'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=200,DRD_VALUE='".(getFullFloatValue($_POST['post_q'])*60)."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // HD + if (getFloatValue($_POST['post_hd'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=205,DRD_VALUE='".getFloatValue($_POST['post_hd'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // HST + if (getFloatValue($_POST['post_hs'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=210,DRD_VALUE='".getFloatValue($_POST['post_hs'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // HST0 + if (getFloatValue($_POST['post_h0'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=212,DRD_VALUE='".getFloatValue($_POST['post_h0'])."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // P1 + if (getFloatValue($_POST['post_p1'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=215,DRD_VALUE='".getFloatValue($_POST['post_p1'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // P2 + if (getFloatValue($_POST['post_p2'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=220,DRD_VALUE='".getFloatValue($_POST['post_p2'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Pb + if (getFloatValue($_POST['post_pb'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=225,DRD_VALUE='".getFloatValue($_POST['post_pb'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Ilość wypompowanej wody + if (getFloatValue($_POST['post_v'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE='".getFloatValue($_POST['post_v'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Temperatura wody + if (getFloatValue($_POST['post_tw'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=245,DRD_VALUE='".getFloatValue($_POST['post_tw'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // pp + if (getFloatValue($_POST['post_pp'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=401,DRD_VALUE='".getFloatValue($_POST['post_pp'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // hh + if (getFloatValue($_POST['post_hh'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=402,DRD_VALUE='".getFloatValue($_POST['post_hh'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Zamknięcie zasuwy + if (getFloatValue($_POST['post_zas'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=730,DRD_VALUE='".getFloatValue($_POST['post_zas'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + + + // Prąd + if (getFloatValue($_POST['post_i'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=270,DRD_VALUE='".getFloatValue($_POST['post_i'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Napięcie + if (getFloatValue($_POST['post_u'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=275,DRD_VALUE='".getFloatValue($_POST['post_u'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Cosinus Fi + if (getFloatValue($_POST['post_fi'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=280,DRD_VALUE='".getFloatValue($_POST['post_fi'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Czas pracy agregatu + if (getFloatValue($_POST['post_time'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE='".getFloatValue($_POST['post_time'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Moc czynna + if (getFloatValue($_POST['post_pe'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=260,DRD_VALUE='".getFloatValue($_POST['post_pe'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Jednostkowe zużycie energii + if (getFloatValue($_POST['post_en'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=721,DRD_VALUE='".getFloatValue($_POST['post_en'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + // Pobór energii + if (getFloatValue($_POST['post_kwc'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['post_dev'].",DRD_RESOURCES_DETAIL=265,DRD_VALUE='".getFloatValue($_POST['post_kwc'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['post_date']."'"); + +} + + + +// zmienie przypisanie danego obiektu do oddziału +if ($_POST['post_site']=='site807objdep' && $_POST['post_action']=='change_dep' && $_POST['post_dev']>0) +{ + mysql_query("UPDATE seg_dev_resources SET DRS_DEPARTMENT='".$_POST['post_dep']."' WHERE DRS_ID=".$_POST['post_dev']); + +} + + + +// walidacja na dodawanie nowej studni: sprawdza, czy obiekt istenieje e studniach lub piezometrach +if ($_POST['post_site']=='site301A' && $_POST['post_action']=='create_new_well' && strlen($_POST['post_well_name'])>0) +{ + if (sqlValue("select count(1) from seg_wells,seg_dev_resources where WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_POST['post_well_name']."'")>0) + echo('<script>sweetAlert("Uwaga!", "Studnia '.$_POST['post_well_name'].' istnieje już w systemie. Wejdź w jej edycję lub spróbuj wprowadzić inną nazwę.", "error");</script>'); + elseif (sqlValue("select count(*) from seg_reservoirs_piezometers,seg_dev_resources where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and SRP_NAME='".$_POST['post_well_name']."'")>0) + echo('<script>sweetAlert("Uwaga!", "Obiekt o nazwie '.$_POST['post_well_name'].' jest zarejestrowany jako piezometr. Jeśli chcesz zmienić jego typ musisz przejść do Stan » Stan piezometrów » Przekształć w studnię.", "error");</script>'); + +} + + +// walidacja na dodawanie nowego piezometru: sprawdza, czy obiekt istenieje w piezometrach lub studniach +if ($_POST['post_site']=='site309A' && $_POST['post_action']=='create_new_piezo' && strlen($_POST['post_piezo_name'])>0) +{ + if (sqlValue("select count(*) from seg_reservoirs_piezometers,seg_dev_resources where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and SRP_NAME='".$_POST['post_piezo_name']."'")>0) + echo('<script>sweetAlert("Uwaga!", "Piezometr '.$_POST['post_well_name'].' istnieje już w systemie. Wejdź w jego edycję lub spróbuj wprowadzić inną nazwę.", "error");</script>'); + elseif (sqlValue("select count(1) from seg_wells,seg_dev_resources where WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_POST['post_piezo_name']."'")>0) + echo('<script>sweetAlert("Uwaga!", "Obiekt o nazwie '.$_POST['post_piezo_name'].' jest zarejestrowany jako studnia. Jeśli chcesz zmienić jego typ musisz przejść do Stan » Stan studni » Przekształć w piezometr.", "error");</script>'); + +} + + +// usuwanie parametrów hemicznych +// Ładowanie danych +// ============================================================================================================================== +if ($_POST['page']=='site401CH' && $_POST['post_action']=='show_params' && $_POST['post_dev_id']>0 && $_POST['post_param_id']>0) +{ + unset($listOfParamsArray); + $listOfParamsArray = sqlGetResAsArray(" + select * from seg_dev_resources_det where DRD_AUDIT_DATE>='".$_POST['post_date_from']." 00:00:00' and DRD_AUDIT_DATE<='".$_POST['post_date_to']." 23:59:59' and DRD_RESOURCES_DETAIL=".$_POST['post_param_id']." and DRD_DRS_ID=".$_POST['post_dev_id']." + union + select * from seg_dev_resources_det_his where DRD_AUDIT_DATE>='".$_POST['post_date_from']." 00:00:00' and DRD_AUDIT_DATE<='".$_POST['post_date_to']." 23:59:59' and DRD_RESOURCES_DETAIL=".$_POST['post_param_id']." and DRD_DRS_ID=".$_POST['post_dev_id']." + order by DRD_AUDIT_DATE desc + "); + + echo' + <div class="head_tag">'.$lab_HistoricalData_001.'</div> + <div class="tag"> + <table WIDTH="100%" class="tag" id="delChemia" > + <tr> + <TD class="label">Lp.</TD> + <TD class="label">'.$lab_Field_site401_003.'</TD> + <TD class="label">'.$lab_Field_site401_004.'</TD> + <td class="label"></td> + <tr>'; + + for($i=0; $i<count($listOfParamsArray); $i++) + { + echo' + <tr id="'.$listOfParamsArray[$i]['DRD_ID'].'"> + <TD class="field_left">'.($i+1).'</TD> + <TD class="field_center">'.$listOfParamsArray[$i]['DRD_AUDIT_DATE'].'</TD> + <TD class="field_center">'.$listOfParamsArray[$i]['DRD_VALUE'].'</TD> + <TD class="field_center"><img style="cursor: pointer;" title="Usuń" src="./images/remove_ico.png"></TD> + </tr> + + '; + } + echo' + </table> + </div> + '; + + + + echo' + <script> + $(document).on("click", "#delChemia tr", function (e) { + e.stopPropagation(); + + if (confirm("Czy chcesz usunąć?")) + { + $.post("./ajax_func.php", + { + page: "site401CH", + post_action: "del_params", + post_rowid: $(this).closest("tr").attr("id"), + post_dev_id: "'.$_POST['post_dev_id'].'", + post_param_id: "'.$_POST['post_param_id'].'", + post_date_from: "'.$_POST['post_date_from'].'", + post_date_to: "'.$_POST['post_date_to'].'", + } + ).done(function(data) + { + $("#tagShowHistData").html(data); + } + ); + return true; + } + else + { + return false; + } + }); + </script> + '; +} +// usuwanie parametrów hemicznych +// Ładowanie danych +// ============================================================================================================================== +if ($_POST['page']=='site401CH' && $_POST['post_action']=='del_params' && $_POST['post_dev_id']>0 && $_POST['post_param_id']>0 && $_POST['post_rowid']>0) +{ + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_ID=".$_POST['post_rowid']); + mysql_query("DELETE FROM seg_dev_resources_det_his WHERE DRD_ID=".$_POST['post_rowid']); + + unset($listOfParamsArray); + $listOfParamsArray = sqlGetResAsArray(" + select * from seg_dev_resources_det where DRD_AUDIT_DATE>='".$_POST['post_date_from']." 00:00:00' and DRD_AUDIT_DATE<='".$_POST['post_date_to']." 23:59:59' and DRD_RESOURCES_DETAIL=".$_POST['post_param_id']." and DRD_DRS_ID=".$_POST['post_dev_id']." + union + select * from seg_dev_resources_det_his where DRD_AUDIT_DATE>='".$_POST['post_date_from']." 00:00:00' and DRD_AUDIT_DATE<='".$_POST['post_date_to']." 23:59:59' and DRD_RESOURCES_DETAIL=".$_POST['post_param_id']." and DRD_DRS_ID=".$_POST['post_dev_id']." + order by DRD_AUDIT_DATE desc + "); + + echo' + <div class="head_tag">'.$lab_HistoricalData_001.'</div> + <div class="tag"> + <table WIDTH="100%" class="tag" id="delChemia" > + <tr> + <TD class="label">Lp.</TD> + <TD class="label">'.$lab_Field_site401_003.'</TD> + <TD class="label">'.$lab_Field_site401_004.'</TD> + <td class="label"></td> + <tr>'; + + for($i=0; $i<count($listOfParamsArray); $i++) + { + echo' + <tr id="'.$listOfParamsArray[$i]['DRD_ID'].'"> + <TD class="field_left">'.($i+1).'</TD> + <TD class="field_center">'.$listOfParamsArray[$i]['DRD_AUDIT_DATE'].'</TD> + <TD class="field_center">'.$listOfParamsArray[$i]['DRD_VALUE'].'</TD> + <TD class="field_center"><img style="cursor: pointer;" title="Usuń" src="./images/remove_ico.png"></TD> + </tr> + + '; + } + echo' + </table> + </div> + '; +} + + + +?> + + + + + + +<?php +mysql_close($con); +?> diff --git a/ajax_getdata4well.php b/ajax_getdata4well.php new file mode 100644 index 0000000..5bb990e --- /dev/null +++ b/ajax_getdata4well.php @@ -0,0 +1,209 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.21.11.101:3615/'); + +$scriptDate = date("Y-m-d H:i:s"); + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' ',':'), array('','',''), $inDate); + return $out; +} + + +// Wstawioanie danych +// ================================================================================================================================== +if ($_POST['post_action']=='ajax' && $_POST['done']=='insert' && strlen($_POST['well_name'])>1) +{ + + unset($dataArray); + $dataArray = $cl->GetWellDataAsArray($_POST['well_name']); + + unset($wellArray); + $wellArray = sqlGetResAsArray("select DRS_ID,DRS_DEPARTMENT,WLL_ID,WLL_BARIERA,WLL_PP_SCOPE,WLL_HH_SCOPE,WLL_CAT_DIC_ID from seg_wells left join seg_dev_resources on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where WLL_NAME='".$_POST['well_name']."'"); + + if ($dataArray['pumpOnOff']['value']==1 && $wellArray[0]['DRS_ID']>0) + { + + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + $ppValue = (float) $dataArray['pressureInPistonBody']['value']; + $ppValue = (float) ($ppValue - (($dataArray['barometricPressuremA']['value']*10)/98)); + + unset($lpValue); + $lpValue = (float) sqlStringValue("select getLastValue(240,".$wellArray[0]['DRS_ID'].") HHV", "HHV"); + $hhValue = (float) $lpValue - ($dataArray['dynamicWaterTable']['value']); + + //aktualizuje pomiar + mysql_query("UPDATE rep_soap_syndis_quality_data SET SQD_AUDIT_CD=now() WHERE SQD_DRS_ID=".$wellArray[0]['DRS_ID']); + + unset($queryINS); + $queryINS = "INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$wellArray[0]['DRS_ID']." + ,RHD_DATE=now() + ,RHD_HD_VAL='".getFloatValue($dataArray['dynamicWaterTable']['value'])."' + ,RHD_Q_VAL='".getFloatValue($dataArray['pumpEfficiency']['value']*60)."' + ,RHD_P1_VAL='".getFloatValue($dataArray['pressureBeforeThrottle']['value'])."' + ,RHD_P2_VAL='".getFloatValue($dataArray['pressureAfterThrottle']['value'])."' + ,RHD_I_VAL='".getFloatValue($dataArray['currentL1']['value'])."' + ,RHD_U_VAL='".getFloatValue($dataArray['voltageL12']['value'])."' + ,RHD_PE_VAL='".getFloatValue($dataArray['activePower']['value'])."' + ,RHD_COS_VAL='".getFloatValue($dataArray['cos']['value'])."' + ,RHD_PP_VAL='".getFloatValue($ppValue)."' + ,RHD_HH_VAL='".getFloatValue($hhValue)."' + ,RHD_WTEMP_VAL='".getFloatValue($dataArray['waterTemperature']['value'])."' + ,RHD_DGN_VAL='".getFloatValue($dataArray['currentDiagnosticsOperationState']['value'])."' + ,RHD_AUDIT_CD=now() + "; + + mysql_query($queryINS); + //mysql_query($queryINS); + + $queryDEMAND = "INSERT INTO rep_his_data_demand SET RHD_DRS_ID=".$wellArray[0]['DRS_ID']." + ,RHD_DATE=now() + ,RHD_HD_VAL='".getFloatValue($dataArray['dynamicWaterTable']['value'])."' + ,RHD_Q_VAL='".getFloatValue($dataArray['pumpEfficiency']['value']*60)."' + ,RHD_P1_VAL='".getFloatValue($dataArray['pressureBeforeThrottle']['value'])."' + ,RHD_P2_VAL='".getFloatValue($dataArray['pressureAfterThrottle']['value'])."' + ,RHD_I_VAL='".getFloatValue($dataArray['currentL1']['value'])."' + ,RHD_U_VAL='".getFloatValue($dataArray['voltageL12']['value'])."' + ,RHD_PE_VAL='".getFloatValue($dataArray['activePower']['value'])."' + ,RHD_COS_VAL='".getFloatValue($dataArray['cos']['value'])."' + ,RHD_PP_VAL='".getFloatValue($ppValue)."' + ,RHD_HH_VAL='".getFloatValue($hhValue)."' + ,RHD_WTEMP_VAL='".getFloatValue($dataArray['waterTemperature']['value'])."' + ,RHD_DGN_VAL='".getFloatValue($dataArray['currentDiagnosticsOperationState']['value'])."' + ,RHD_AUDIT_CD=now() + "; + + mysql_query($queryDEMAND); + + + //wstawia dane dla poszczególnych parametrów + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=200 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=200,DRD_VALUE='".getFloatValue($dataArray['pumpEfficiency']['value']*60)."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=270 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=270,DRD_VALUE='".getFloatValue($dataArray['currentL1']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=275 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=275,DRD_VALUE='".getFloatValue($dataArray['voltageL12']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=245 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=245,DRD_VALUE='".getFloatValue($dataArray['waterTemperature']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=260 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=260,DRD_VALUE='".getFloatValue($dataArray['activePower']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=280 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=280,DRD_VALUE='".getFloatValue($dataArray['cos']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=205 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=205,DRD_VALUE='".getFloatValue($dataArray['dynamicWaterTable']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=215 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=215,DRD_VALUE='".getFloatValue($dataArray['pressureBeforeThrottle']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=220 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=220,DRD_VALUE='".getFloatValue($dataArray['pressureAfterThrottle']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=401 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=401,DRD_VALUE='".getFloatValue($ppValue)."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=402 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=402,DRD_VALUE='".getFloatValue($hhValue)."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=265 and DRD_DRS_ID=".$wellArray[0]['DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=265,DRD_VALUE='".getFloatValue($dataArray['activeEnergy']['value'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='ajax_getdata4well',DRD_AUDIT_DATE=now()"); + + + + // uzupełnianie czasu pracy oraz ilości wypompowanej wody + /* + $wellTimeArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DATE>='2019-09-01 00:00:00' and RHD_DATE>ADDDATE(now(), INTERVAL -12 HOUR) and (RHD_SPM_WT is null or RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) and RHD_DRS_ID=".$wellArray[0]['DRS_ID']." order by RHD_DATE desc limit 100"); + for($i=0; $i<count($wellTimeArray); $i++) + { + if ($wellTimeArray[$i]['RHD_Q_VAL']>0 || $wellTimeArray[$i]['RHD_I_VAL']>0) + { + unset($czasArray); + $czasArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where WLE_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID']." and WLE_DATE_FROM<='".$wellTimeArray[$i]['RHD_DATE']."' and (WLE_DATE_TO>='".$wellTimeArray[$i]['RHD_DATE']."' or WLE_DATE_TO is null)"); + unset($czas); + if (strlen($czasArray[0]['WLE_DATE_TO']>8)) + { + if ( (strtotime($wellTimeArray[$i]['RHD_DATE']) - strtotime($czasArray[0]['WLE_DATE_TO']))>0 ) + $wellTimeArray[$i]['RHD_DATE'] = $czasArray[0]['WLE_DATE_TO']; + } + + $czas = fCzas($wellTimeArray[$i]['RHD_DRS_ID'], $czasArray[0]['WLE_DATE_FROM'], $wellTimeArray[$i]['RHD_DATE']); + $czas = round($czas/3600,2); + + $woda=0; + if($czas>0) + $woda=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID']." and AVG_DATE>=ADDDATE('".$czasArray[0]['WLE_DATE_FROM']."', INTERVAL -1 DAY) and AVG_DATE<='".$wellTimeArray[$i]['RHD_DATE']."'", "AVG_Q_VAL"); + + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellTimeArray[$i]['RHD_ID']); + + //czas + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=round(".$czas.",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + + //woda + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=round(".($woda*$czas).",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + } + } + */ + + + // to samo tylko dla demand + $wellTimeArray = sqlGetResAsArray("select * from rep_his_data_demand where RHD_Q_VAL>0 and RHD_DATE>='2019-09-01 00:00:00' and RHD_DATE>ADDDATE(now(), INTERVAL -12 HOUR) and (RHD_SPM_WT is null or RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) and RHD_DRS_ID=".$wellArray[0]['DRS_ID']." order by RHD_DATE desc limit 100"); + for($i=0; $i<count($wellTimeArray); $i++) + { + if ($wellTimeArray[$i]['RHD_Q_VAL']>0 || $wellTimeArray[$i]['RHD_I_VAL']>0) + { + unset($czasArray); + $czasArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where WLE_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID']." and WLE_DATE_FROM<='".$wellTimeArray[$i]['RHD_DATE']."' and (WLE_DATE_TO>='".$wellTimeArray[$i]['RHD_DATE']."' or WLE_DATE_TO is null)"); + unset($czas); + if (strlen($czasArray[0]['WLE_DATE_TO']>8)) + { + if ( (strtotime($wellTimeArray[$i]['RHD_DATE']) - strtotime($czasArray[0]['WLE_DATE_TO']))>0 ) + $wellTimeArray[$i]['RHD_DATE'] = $czasArray[0]['WLE_DATE_TO']; + } + + $czas = fCzas($wellTimeArray[$i]['RHD_DRS_ID'], $czasArray[0]['WLE_DATE_FROM'], $wellTimeArray[$i]['RHD_DATE']); + $czas = round($czas/3600,2); + + $woda=0; + if($czas>0) + $woda=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$wellTimeArray[$i]['RHD_DRS_ID']." and AVG_DATE>=ADDDATE('".$czasArray[0]['WLE_DATE_FROM']."', INTERVAL -1 DAY) and AVG_DATE<='".$wellTimeArray[$i]['RHD_DATE']."'", "AVG_Q_VAL"); + + mysql_query("UPDATE rep_his_data_demand SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellTimeArray[$i]['RHD_ID']); + } + } + + + + + + + } +} + +mysql_close($polacz); + + +?> \ No newline at end of file diff --git a/c++/Mattrix.cpp b/c++/Mattrix.cpp new file mode 100644 index 0000000..d825660 --- /dev/null +++ b/c++/Mattrix.cpp @@ -0,0 +1,368 @@ +//--------------------------------------------------------------------------- +// Klasa obs³uguj¹ca macierze NxN + +#include <except.h> +#include <iostream.h> +#include <math.h> +//#include <bcd.h> +#include <vcl.h> + + +#pragma hdrstop + +#include "Mattrix.h" + +//--------------------------------------------------------------------------- + +#pragma package(smart_init) + + +//--------------------------------------------------------------------------- + + +//---------------------------------------------------------- +__fastcall HMattrix::HMattrix( int dim) +{ +try { // TEST FOR EXCEPTIONS. + aM = new long double* [dim]; // STEP 1: SET UP THE ROWS. + for (int j = 0; j < dim; j++) + aM[j] = new long double[dim]; // STEP 2: SET UP THE COLUMNS + +} catch (...) { // ENTER THIS BLOCK ONLY IF xalloc IS THROWN. + // YOU COULD REQUEST OTHER ACTIONS BEFORE TERMINATING + MessageBox(0, L"Brak pamiêci (alokacja dla macierzy). Bye ...", + L"B³¹d!", MB_OK); + exit(-1); +} + + for (int i = 0; i < dim; i++) + for (int j = 0; j < dim; j++) + aM[i][j] = (long double)0; + + nDim=dim; +} +//---------------------------------------------------------- +__fastcall HMattrix::~HMattrix() +{ + if (aM){ + for (int i = 0; i < nDim; i++) + delete[] aM[i]; // STEP 1: DELETE THE COLUMNS + + delete[] aM; // STEP 2: DELETE THE ROWS + + } +} + +//---------------------------------------------------------- +void __fastcall +HMattrix::StoreColumn(long double *aCol, int col) +{ + for (int j = 0; j < nDim; j++) + aM[col][j] = aCol[j]; +} + +//---------------------------------------------------------- +void __fastcall +HMattrix::StoreRow(long double *aRow, int row) +{ + for (int i = 0; i < nDim; i++) + aM[i][row] = aRow[i]; +} +//---------------------------------------------------------- +void __fastcall +HMattrix::StoreElement(long double val, int i, int j) // i=row, j=col +{ + aM[i][j]= val; +} + +//---------------------------------------------------------- +void __fastcall +HMattrix::StoreElement(long double *val, int i, int j) // i=row, j=col +{ + aM[i][j]= *val; +} +//---------------------------------------------------------- +void __fastcall +HMattrix::StoreMattrix(HMattrix *M) +{ + int dim=nDim; + if (M->nDim<dim) + dim=M->nDim; + for(int i=0; i<dim; i++) + for (int j = 0; j < dim; j++) + aM[i][j] = M->M(i,j); +} + +//---------------------------------------------------------- +long double ** __fastcall HMattrix::GetM() +{ + return aM; +} +//---------------------------------------------------------- + +long double __fastcall HMattrix::M(int i, int j) +{ + long double val=0; + if (i<nDim && j<nDim && aM) + val=aM[i][j]; + return val; +} + +//---------------------------------------------------------- +//int +//HMattrix::DeleteRowCol(bcd **aMx, int dim, int row, int col, bcd ***aMNew) +long double ** __fastcall HMattrix::DeleteRowCol(long double **aMx, int dim, int row, int col) +{ + int nI, nJ; //, retval=0; + long double **aMtmp=NULL; + +try { // TEST FOR EXCEPTIONS. + if(aMx && col<dim && row<dim){ + aMtmp = new long double* [dim-1]; // STEP 1: SET UP THE ROWS. + for (int j = 0; j < dim-1; j++) + aMtmp[j] = new long double[dim-1]; // STEP 2: SET UP THE COLUMNS + + for (int i = 0; i < dim-1; i++) + for (int j = 0; j < dim-1; j++){ + nI=(i<row ? i : i+1); + nJ=(j<col ? j : j+1); + aMtmp[i][j] = aMx[nI][nJ]; + } + +// *aMNew=aMtmp; + + //**** retval=1; + } +} catch (xalloc) { // ENTER THIS BLOCK ONLY IF xalloc IS THROWN. + // YOU COULD REQUEST OTHER ACTIONS BEFORE TERMINATING + MessageBox(0, L"Brak pamiêci (alokacja dla macierzy). Bye ...", + L"B³¹d!", MB_OK); +// cout << "Brak pamiêci (alokacja dla macierzy)."; + //*********retval=0; +} + +// return retval; + return aMtmp; +} + +//---------------------------------------------------------- +void __fastcall +HMattrix::XchCol(int col, long double *aCol) +{ + StoreColumn(aCol, col); +} +//---------------------------------------------------------- +void __fastcall +HMattrix::deallocate(long double **aX, int dim) +{ + if (aX){ + for (int i = 0; i < dim; i++) + if( aX[i]) + delete[] aX[i]; // STEP 1: DELETE THE COLUMNS + + delete[] aX ; // STEP 2: DELETE THE ROWS + } +} +//---------------------------------------------------------- + +long double __fastcall HMattrix::Det() +{ + long double nDet=(long double)0; + + if( nDim==1 ) + nDet=aM[0][0]; + else if (nDim==2) + nDet=aM[0][0]*aM[1][1]-aM[0][1]*aM[1][0]; + else + for (int i = 0; i<nDim; i++) + nDet+=(pow((double)-1, 1+i))*aM[0][i]*Minor(aM,0,i, nDim); + + return(nDet); +} + +//---------------------------------------------------------- + +long double __fastcall +HMattrix::Det(long double **aMn, int dim) +{ + long double nDet=(long double)0; + + if( dim==1 ) + nDet=aMn[0][0]; + else if (dim==2) + nDet=aMn[0][0]*aMn[1][1]-aMn[0][1]*aMn[1][0]; + else + for (int i = 0; i<dim; i++) + nDet+=(pow((double)-1, 1+i))*aMn[0][i]*Minor(aMn, 0,i, dim); + + return(nDet); +} +//---------------------------------------------------------- + +long double __fastcall +HMattrix::Minor(long double **aMx, int row, int col, int dim) +{ + long double **aMn, mDet=0; + +// if (DeleteRowCol(aMx, dim, row, col, &aMn)) + aMn=DeleteRowCol(aMx, dim, row, col); + + if(aMn){ + mDet=Det(aMn, dim-1); + deallocate(aMn, dim-1); + } + + return( mDet ); +} + +//---------------------------------------------------------- +// rozwi¹zanie równania stopnia nDim +int __fastcall +equation(HMattrix *M, long double *aB, int nDim, long double *result) +{ +// HMattrix M(nDim, aM); + long double nDet=M->Det(); + long double nDetN; + +// return 1; + + if (nDet==(long double)0) + return 0; + + HMattrix *aMn; + for (int i=0; i<nDim; i++) { + aMn = new HMattrix(nDim); + aMn->StoreMattrix(M); + aMn->XchCol(i, aB); + nDetN=aMn->Det(); + result[nDim-i-1]=nDetN/nDet; + delete aMn; + } + return 1; +} +//---------------------------------------------------------- +//------------------------------------------------------ +// wartoœæ wielomianu 3-stopnia dla punktu x +double __fastcall Polynom3Value(double x, long double *Cn) +{ + return(x*x*x*Cn[3]+x*x*Cn[2]+x*Cn[1]+Cn[0]); +} +//------------------------------------------------------ +// wielomian stopnia trzeciego +bool __fastcall Polynom3(ePoint *aData, int count, long double *result) +{ + long double nX6 = eSup(aData,count,6); + long double nX5 = eSup(aData,count,5); + long double nX4 = eSup(aData,count,4); + long double nX3 = eSup(aData,count,3); + long double nX2 = eSup(aData,count,2); + long double nX1 = eSup(aData,count,1); + long double nX3Y= eSup(aData,count,3,1); + long double nX2Y= eSup(aData,count,2,1); + long double nXY = eSup(aData,count,1,1); + long double nY1 = eSup(aData,count,0,1); + + // macierz dla m.n.kw. + + HMattrix *aM = new HMattrix(4); + long double r0[] = {nX6, nX5, nX4, nX3}; + long double r1[] = {nX5, nX4, nX3, nX2}; + long double r2[] = {nX4, nX3, nX2, nX1}; + long double r3[] = {nX3, nX2, nX1, count}; + aM->StoreRow(r0,0); + aM->StoreRow(r1,1); + aM->StoreRow(r2,2); + aM->StoreRow(r3,3); + + long double aB[]={nX3Y, nX2Y, nXY, nY1}; +// bcd aCN[4]={bcd(0),bcd(0),bcd(0),bcd(0)};==result + + bool retval=equation(aM, aB,4, result ); + + delete aM; + return(retval); +} +//---------------------------------------------------------- + +// ax^2+b +bool __fastcall Polynom2ab(ePoint *aData, int count, long double *result) +{ + long double nX3 = eSup(aData,count,3); + long double nX2 = eSup(aData,count,2); + long double nX1 = eSup(aData,count,1); + long double nXY = eSup(aData,count,1,1); + long double nY1 = eSup(aData,count,0,1); + + // macierz dla m.n.kw. + + HMattrix *aM = new HMattrix(2); + long double r0[] = { nX3, nX1}; + long double r1[] = { nX2, count}; +// long double r2[] = +// long double r3[] = + aM->StoreRow(r0,0); + aM->StoreRow(r1,1); +// aM->StoreRow(r2,2); +// aM->StoreRow(r3,3); + +// long double aB[]={nX3Y, nX2Y, nXY, nY1}; + long double aB[]={ nXY, nY1}; + + bool retval=equation(aM, aB,2, result ); + + delete aM; + return(retval); +} +// ax^2+bx+c +bool __fastcall Polynom2abc(ePoint *aData, int count, long double *result) +{ + long double nX4 = eSup(aData,count,4); + long double nX3 = eSup(aData,count,3); + long double nX2 = eSup(aData,count,2); + long double nX1 = eSup(aData,count,1); + long double nXY = eSup(aData,count,1,1); + long double nY1 = eSup(aData,count,0,1); + long double nX2Y= eSup(aData,count,2,1); + + // macierz dla m.n.kw. + + HMattrix *aM = new HMattrix(3); + long double r0[] = {nX4, nX3, nX2}; + long double r1[] = {nX3, nX2, nX1}; + long double r2[] = {nX2, nX1, count}; +// long double r3[] = + aM->StoreRow(r0,0); + aM->StoreRow(r1,1); + aM->StoreRow(r2,2); +// aM->StoreRow(r3,3); + +// long double aB[]={nX3Y, nX2Y, nXY, nY1}; + long double aB[]={ nX2Y, nXY, nY1}; + + bool retval=equation(aM, aB,3, result ); + + delete aM; + return(retval); +} +//---------------------------------------------------------- +//------------------------------------------------------ +// trochê matematyki + +long double __fastcall eSup(ePoint *aData, int count, int nI, int nJ) +{ + long double nSuma=0; + for (int i = 0; i<count; i++) + if( aData[i].x != (long double)0 && aData[i].y != (long double)0){ + nSuma += powl(aData[i].x, nI) * powl(aData[i].y, nJ); + } + return nSuma; +} +//------------------------------------------------------ +// przypisywanie wartosci do ePoint +void __fastcall AssignPointValue(ePoint *dt, double x, double y) +{ + dt->x=(long double) x; + dt->y=(long double) y; +} + +//------------------------------------------------------ diff --git a/c++/Mattrix.h b/c++/Mattrix.h new file mode 100644 index 0000000..4b656e0 --- /dev/null +++ b/c++/Mattrix.h @@ -0,0 +1,49 @@ +//--------------------------------------------------------------------------- + +#ifndef MattrixH +#define MattrixH +//--------------------------------------------------------------------------- +#include <mem.h> + +//--------------------------------------------------------------------------- +class HMattrix { + long double **aM; + int nDim; + public: +// HMatrix(); + __fastcall HMattrix(int nDim); + __fastcall ~HMattrix(); + void __fastcall deallocate(long double **aX, int dim); + void __fastcall StoreMattrix(HMattrix *M); + void __fastcall StoreColumn(long double *aCol, int col); + void __fastcall StoreRow(long double *aRow, int row); + void __fastcall StoreElement(long double val, int i, int j); // i=row, j=col + void __fastcall StoreElement(long double *val, int i, int j); // i=row, j=col +// int DeleteRowCol(bcd **aMx, int dim, int row, int col, bcd ***aMNew); + long double** __fastcall DeleteRowCol(long double **aMx, int dim, int row, int col); + void __fastcall XchCol(int col, long double *aCol); + long double ** __fastcall GetM(); + long double __fastcall M(int i, int j); + long double __fastcall Det(); + long double __fastcall Det(long double **aMn, int dim); + long double __fastcall Minor(long double **aMx, int row, int col, int dim); +}; + + +int __fastcall equation(HMattrix *M, long double *aB, int nDim, long double *result); + +// definicje dla wielomianu stopnia n=3 +// Y=c3X3+c2X2+c1X+c0 + +struct ePoint { + long double x,y; +} ; + +void __fastcall AssignPointValue(ePoint *dt, double x, double y); +long double __fastcall eSup(ePoint *aData, int count, int nI=0, int nJ=0); +bool __fastcall Polynom3(ePoint *aData, int count, long double *result); +bool __fastcall Polynom2ab(ePoint *aData, int count, long double *result); +bool __fastcall Polynom2abc(ePoint *aData, int count, long double *result); +double __fastcall Polynom3Value(double x, long double *Cn); +//--------------------------------------------------------------------------- +#endif diff --git a/ckEditor/ckeditor.js b/ckEditor/ckeditor.js new file mode 100644 index 0000000..6096920 --- /dev/null +++ b/ckEditor/ckeditor.js @@ -0,0 +1,922 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a={timestamp:"E4KA",version:"4.4.1",revision:"568b5ed",rnd:Math.floor(900*Math.random())+100,_:{pending:[]},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var d=document.getElementsByTagName("script"),f=0;f<d.length;f++){var b=d[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(b){a=b[1];break}}-1==a.indexOf(":/")&&"//"!=a.slice(0,2)&&(a=0===a.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+ +a:location.href.match(/^[^\?]*\/(?:)/)[0]+a);if(!a)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return a}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded", +a,!1),d()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),d())}catch(f){}}function d(){for(var a;a=f.shift();)a()}var f=[];return function(d){f.push(d);"complete"===document.readyState&&setTimeout(a,1);if(1==f.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);d=!1;try{d= +!window.frameElement}catch(b){}if(document.documentElement.doScroll&&d){var e=function(){try{document.documentElement.doScroll("left")}catch(d){setTimeout(e,1);return}a()};e()}}}}()},e=window.CKEDITOR_GETURL;if(e){var b=a.getUrl;a.getUrl=function(c){return e.call(a,c)||b.call(a,c)}}return a}()); +CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var e=CKEDITOR.event.prototype,b;for(b in e)a[b]==void 0&&(a[b]=e[b])},CKEDITOR.event.prototype=function(){function a(a){var d=e(this);return d[a]||(d[a]=new b(a))}var e=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var d=0,f=this.listeners;d<f.length;d++)if(f[d].fn==a)return d;return-1}}; +return{define:function(b,d){var f=a.call(this,b);CKEDITOR.tools.extend(f,d,true)},on:function(b,d,f,e,n){function i(a,o,s,r){a={name:b,sender:this,editor:a,data:o,listenerData:e,stop:s,cancel:r,removeListener:k};return d.call(f,a)===false?false:a.data}function k(){s.removeListener(b,d)}var o=a.call(this,b);if(o.getListenerIndex(d)<0){o=o.listeners;f||(f=this);isNaN(n)&&(n=10);var s=this;i.fn=d;i.priority=n;for(var r=o.length-1;r>=0;r--)if(o[r].priority<=n){o.splice(r+1,0,i);return{removeListener:k}}o.unshift(i)}return{removeListener:k}}, +once:function(){var a=arguments[1];arguments[1]=function(d){d.removeListener();return a.apply(this,arguments)};return this.on.apply(this,arguments)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,d=function(){a=1},f=0,b=function(){f=1};return function(n,i,k){var o=e(this)[n],n=a,s=f;a=f=0;if(o){var r=o.listeners;if(r.length)for(var r=r.slice(0),v,g=0;g<r.length;g++){if(o.errorProof)try{v=r[g].call(this, +k,i,d,b)}catch(p){}else v=r[g].call(this,k,i,d,b);v===false?f=1:typeof v!="undefined"&&(i=v);if(a||f)break}}i=f?false:typeof i=="undefined"?true:i;a=n;f=s;return i}}(),fireOnce:function(a,d,f){d=this.fire(a,d,f);delete e(this)[a];return d},removeListener:function(a,d){var f=e(this)[a];if(f){var b=f.getListenerIndex(d);b>=0&&f.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),d;for(d in a)delete a[d]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length>0}}}()); +CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,f=window.location.hostname;return a!=f&&a!="["+f+"]"},secure:location.protocol== +"https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); +e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>=2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air"; +if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= +CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; +(function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,d=/</g,f=/"/g,h=/&amp;/g,n=/&gt;/g,i=/&lt;/g,k=/&quot;/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,d){if(!a&&!d)return true;if(!a||!d||a.length!=d.length)return false;for(var f=0;f<a.length;f++)if(a[f]!=d[f])return false;return true},clone:function(a){var d;if(a&&a instanceof Array){d=[];for(var f=0;f<a.length;f++)d[f]=CKEDITOR.tools.clone(a[f]); +return d}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp)return a;d=new a.constructor;for(f in a)d[f]=CKEDITOR.tools.clone(a[f]);return d},capitalize:function(a,d){return a.charAt(0).toUpperCase()+(d?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var d=arguments.length,f,b;if(typeof(f=arguments[d-1])=="boolean")d--;else if(typeof(f=arguments[d-2])=="boolean"){b=arguments[d-1];d=d-2}for(var g=1;g<d;g++){var e= +arguments[g],c;for(c in e)if(f===true||a[c]==void 0)if(!b||c in b)a[c]=e[c]}return a},prototypedCopy:function(a){var d=function(){};d.prototype=a;return new d},copy:function(a){var d={},f;for(f in a)d[f]=a[f];return d},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var d in a)if(a.hasOwnProperty(d))return false;return true},cssVendorPrefix:function(a,d,f){if(f)return e+a+":"+d+";"+a+":"+d;f={};f[a]=d;f[e+a]=d;return f},cssStyleToDomStyle:function(){var a= +document.createElement("div").style,d=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?d:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),d,f=[],b=0;b<a.length;b++)if(d=a[b])/@import|[{}]/.test(d)?f.push("<style>"+d+"</style>"):f.push('<link type="text/css" rel=stylesheet href="'+d+'">');return f.join("")},htmlEncode:function(a){return(""+a).replace(b, +"&amp;").replace(c,"&gt;").replace(d,"&lt;")},htmlDecode:function(a){return a.replace(h,"&").replace(n,">").replace(i,"<")},htmlEncodeAttr:function(a){return a.replace(f,"&quot;").replace(d,"&lt;").replace(c,"&gt;")},htmlDecodeAttr:function(a){return a.replace(k,'"').replace(i,"<").replace(n,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,d){var f=d(a);f.prototype=a.prototype;return f},setTimeout:function(a, +d,f,b,g){g||(g=window);f||(f=g);return g.setTimeout(function(){b?a.apply(f,[].concat(b)):a.apply(f)},d||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(d){return d.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(d){return d.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(d){return d.replace(a,"")}}(),indexOf:function(a,d){if(typeof d=="function")for(var f=0,b=a.length;f<b;f++){if(d(a[f]))return f}else{if(a.indexOf)return a.indexOf(d); +f=0;for(b=a.length;f<b;f++)if(a[f]===d)return f}return-1},search:function(a,d){var f=CKEDITOR.tools.indexOf(a,d);return f>=0?a[f]:null},bind:function(a,d){return function(){return a.apply(d,arguments)}},createClass:function(a){var d=a.$,f=a.base,b=a.privates||a._,g=a.proto,a=a.statics;!d&&(d=function(){f&&this.base.apply(this,arguments)});if(b)var e=d,d=function(){var a=this._||(this._={}),d;for(d in b){var g=b[d];a[d]=typeof g=="function"?CKEDITOR.tools.bind(g,this):g}e.apply(this,arguments)};if(f){d.prototype= +this.prototypedCopy(f.prototype);d.prototype.constructor=d;d.base=f;d.baseProto=f.prototype;d.prototype.base=function(){this.base=f.prototype.base;f.apply(this,arguments);this.base=arguments.callee}}g&&this.extend(d.prototype,g,true);a&&this.extend(d,a,true);return d},addFunction:function(d,f){return a.push(function(){return d.apply(f||this,arguments)})-1},removeFunction:function(d){a[d]=null},callFunction:function(d){var f=a[d];return f&&f.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a= +/^-?\d+\.?\d*px$/,d;return function(f){d=CKEDITOR.tools.trim(f+"")+"px";return a.test(d)?d:f||""}}(),convertToPx:function(){var a;return function(d){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(d)){a.setStyle("width",d);return a.$.clientWidth}return d}}(),repeat:function(a,d){return Array(d+1).join(a)},tryThese:function(){for(var a, +d=0,f=arguments.length;d<f;d++){var b=arguments[d];try{a=b();break}catch(g){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var d=arguments,f=this;window.setTimeout(function(){a.apply(f,d)},0)}},normalizeCssText:function(a,d){var f=[],b,g=CKEDITOR.tools.parseCssText(a,true,d);for(b in g)f.push(b+":"+g[b]);f.sort();return f.length?f.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, +function(a,d,f,g){a=[d,f,g];for(d=0;d<3;d++)a[d]=("0"+parseInt(a[d],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,d,f){var b={};if(f){f=new CKEDITOR.dom.element("span");f.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(f.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,f,o){if(d){f=f.toLowerCase();f=="font-family"&&(o=o.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,",")); +o=CKEDITOR.tools.trim(o)}b[f]=o});return b},writeCssText:function(a,d){var f,b=[];for(f in a)b.push(f+":"+a[f]);d&&b.sort();return b.join("; ")},objectCompare:function(a,d,f){var b;if(!a&&!d)return true;if(!a||!d)return false;for(b in a)if(a[b]!=d[b])return false;if(!f)for(b in d)if(a[b]!=d[b])return false;return true},objectKeys:function(a){var d=[],f;for(f in a)d.push(f);return d},convertArrayToObject:function(a,d){var f={};arguments.length==1&&(d=true);for(var b=0,g=a.length;b<g;++b)f[a[b]]=d; +return f},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(d){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,d){function f(){g=(new Date).getTime();b=false;d()}var b,g=0;return{input:function(){if(!b){var d=(new Date).getTime()-g;d<a?b=setTimeout(f,a-d):f()}},reset:function(){b&&clearTimeout(b);b=g=0}}},enableHtml5Elements:function(a,d){for(var f=["abbr","article","aside","audio","bdi","canvas","data", +"datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=f.length,g;b--;){g=a.createElement(f[b]);d&&a.appendChild(g)}},checkIfAnyArrayItemMatches:function(a,d){for(var f=0,b=a.length;f<b;++f)if(a[f].match(d))return true;return false},checkIfAnyObjectPropertyMatches:function(a,d){for(var f in a)if(f.match(d))return true;return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}})(); +CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,e=function(a,d){for(var f=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var d=arguments[b],e;for(e in d)delete f[e]}return f},b={},c={},d={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},f={command:1,link:1,meta:1,noscript:1,script:1,style:1},h={},n={"#":1},i={center:1,dir:1,noframes:1}; +a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},n,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,d,b,i);e={a:e(b,{a:1,button:1}),abbr:b,address:c, +area:h,article:a({style:1},c),aside:a({style:1},c),audio:a({source:1,track:1},c),b:b,base:h,bdi:b,bdo:b,blockquote:c,body:c,br:h,button:e(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:h,colgroup:{col:1},command:h,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:a({style:1},c),dl:{dt:1,dd:1},dt:c,em:b,embed:h,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},f),header:c,hgroup:{h1:1, +h2:1,h3:1,h4:1,h5:1,h6:1},hr:h,html:a({head:1,body:1},c,f),i:b,iframe:n,img:h,input:h,ins:b,kbd:b,keygen:h,label:b,legend:b,li:c,link:h,map:c,mark:b,menu:a({li:1},c),meta:h,meter:e(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:n,output:b,p:b,param:h,pre:b,progress:e(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:n,section:a({style:1},c),select:{optgroup:1,option:1},small:b,source:h,span:b,strong:b,style:n, +sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:n,tfoot:{tr:1},th:c,thead:{tr:1},time:e(b,{time:1}),title:n,tr:{th:1,td:1},track:h,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:h,acronym:b,applet:a({param:1},c),basefont:h,big:b,center:c,dialog:h,dir:{li:1},font:b,isindex:h,noframes:c,strike:b,tt:b};a(e,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},d,i),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1, +div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1, +wbr:1},$inline:b,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},e.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1, +small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return e}(); +CKEDITOR.dom.event=function(a){this.$=a}; +CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var e=this.$;e.preventDefault?e.preventDefault():e.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a= +this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2; +CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){if(a)this.$=a}; +CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(e){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners",b)}if(!b[e]){b=b[e]=a(this,e);this.$.addEventListener?this.$.addEventListener(e,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&& +this.$.attachEvent("on"+e,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];if(c){this.$.removeEventListener?this.$.removeEventListener(a,c,false):this.$.detachEvent&&this.$.detachEvent("on"+a,c);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent? +this.$.detachEvent("on"+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(); +(function(a){var e={};CKEDITOR.on("reset",function(){e={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return false}};a.setCustomData=function(a,c){var d=this.getUniqueId();(e[d]||(e[d]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&e[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&e[c],d,f;if(c){d=c[a];f=a in c;delete c[a]}return f?d:null};a.clearCustomData=function(){this.removeAllListeners(); +var a=this.$["data-cke-expando"];a&&delete e[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype); +CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11; +CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16; +CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,e){a.append(this,e);return a},clone:function(a,e){var b=this.$.cloneNode(a),c=function(d){d["data-cke-expando"]&&(d["data-cke-expando"]=false);if(d.nodeType==CKEDITOR.NODE_ELEMENT){e||d.removeAttribute("id",false);if(a)for(var d=d.childNodes,f=0;f<d.length;f++)c(d[f])}};c(b);return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$, +a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var e=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var d=c.parentNode;d&&e.unshift(this.getIndex.call({$:c},a));c=d}return e},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){var e=this.$,b=-1, +c;if(!this.$.parentNode)return b;do if(!a||!(e!=this.$&&e.nodeType==CKEDITOR.NODE_TEXT&&(c||!e.nodeValue))){b++;c=e.nodeType==CKEDITOR.NODE_TEXT}while(e=e.previousSibling);return b},getNextSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getFirst&&this.getFirst(),d;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(d=(d||this).getParent());){if(b&&b(d,true)===false)return null;a=d.getNext()}return!a|| +b&&b(a)===false?null:e&&e!=a.type?a.getNextSourceNode(false,e,b):a},getPreviousSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getLast&&this.getLast(),d;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&&(d=(d||this).getParent());){if(b&&b(d,true)===false)return null;a=d.getPrevious()}return!a||b&&b(a)===false?null:e&&a.type!=e?a.getPreviousSourceNode(false,e,b):a},getPrevious:function(a){var e= +this.$,b;do b=(e=e.previousSibling)&&e.nodeType!=10&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getNext:function(a){var e=this.$,b;do b=(e=e.nextSibling)&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getParent:function(a){var e=this.$.parentNode;return e&&(e.nodeType==CKEDITOR.NODE_ELEMENT||a&&e.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(e):null},getParents:function(a){var e=this,b=[];do b[a?"push":"unshift"](e);while(e=e.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this; +if(a.contains&&a.contains(this))return a;var e=this.contains?this:this.getParent();do if(e.contains(a))return e;while(e=e.getParent());return null},getPosition:function(a){var e=this.$,b=a.$;if(e.compareDocumentPosition)return e.compareDocumentPosition(b);if(e==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(e.contains){if(e.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(e))return CKEDITOR.POSITION_IS_CONTAINED+ +CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in e)return e.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:e.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var e=this.getAddress(),a=a.getAddress(),b=Math.min(e.length,a.length),c=0;c<=b-1;c++)if(e[c]!=a[c]){if(c<b)return e[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return e.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+ +CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,e){var b=this.$,c;if(!e)b=b.parentNode;for(;b;){if(b.nodeName&&(c=b.nodeName.toLowerCase(),typeof a=="string"?c==a:c in a))return new CKEDITOR.dom.node(b);try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,e){var b=this.$;if(!e)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;b=b.parentNode}return false},move:function(a,e){a.append(this.remove(),e)},remove:function(a){var e=this.$,b=e.parentNode; +if(b){if(a)for(;a=e.firstChild;)b.insertBefore(e.removeChild(a),e);b.removeChild(e)}return this},replace:function(a){this.insertBefore(a);a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(b-e.length);this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a= +this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(e.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a=this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a=this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable|| +a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true;if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}});CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,e=a.compatMode=="CSS1Compat";return{width:(e?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(e?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop|| +a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var e=new CKEDITOR.dom.element("link");e.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(e)}},appendStyleText:function(a){if(this.$.createStyleSheet){var e=this.$.createStyleSheet("");e.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return e|| +b.$.sheet},createElement:function(a,e){var b=new CKEDITOR.dom.element(a,this);if(e){e.attributes&&b.setAttributes(e.attributes);e.styles&&b.setStyles(e.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){return new CKEDITOR.dom.element(this.$.activeElement)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,e){for(var b=this.$.documentElement,c= +0;b&&c<a.length;c++){var d=a[c];if(e)for(var f=-1,h=0;h<b.childNodes.length;h++){var n=b.childNodes[h];if(!(e===true&&n.nodeType==3&&n.previousSibling&&n.previousSibling.nodeType==3)){f++;if(f==d){b=n;break}}}else b=b.childNodes[d]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,e){if((!CKEDITOR.env.ie||document.documentMode>8)&&e)a=e+":"+a;return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];return a= +a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+CKEDITOR.tools.fixDomain+ +")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; +CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))}; +CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,e){var b=new CKEDITOR.dom.element("div",e);b.setHtml(a);return b.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(a,e,b,c){var d=e.getCustomData("list_marker_id")||e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),f=e.getCustomData("list_marker_names")||e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[d]=e;f[b]=1;return e.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)}; +CKEDITOR.dom.element.clearMarkers=function(a,e,b){var c=e.getCustomData("list_marker_names"),d=e.getCustomData("list_marker_id"),f;for(f in c)e.removeCustomData(f);e.removeCustomData("list_marker_names");if(b){e.removeCustomData("list_marker_id");delete a[d]}}; +(function(){function a(a){var f=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();f=false}return function(){f||a.removeAttribute("id")}}function e(a,f){return"#"+a.$.id+" "+f.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var f=0,b=0,e=c[a].length;b<e;b++)f=f+(parseInt(this.getComputedStyle(c[a][b])||0,10)||0);return f}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var f=this.$.className;f&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)", +"").test(f)||(f=f+(" "+a)));this.$.className=f||a;return this},removeClass:function(a){var f=this.getAttribute("class");if(f){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(f))(f=f.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",f):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,f){typeof a=="string"&&(a=this.getDocument().createElement(a));f?this.$.insertBefore(a.$,this.$.firstChild): +this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var f=new CKEDITOR.dom.element("div",this.getDocument());f.setHtml(a);f.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=void 0?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=this.getDocument().createElement("br"); +CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var f=new CKEDITOR.dom.range(this.getDocument());f.setStartAfter(this);f.setEndAfter(a);a=f.extractContents();f.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var f=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?f.contains(a.getParent().$):f!=a.$&&f.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(d){}} +return function(f){f?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&& +(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var f=this.$;if(this.getParent())return f.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(f);f.innerHTML=a;b.removeChild(f);return a}catch(c){this.$.innerHTML="";f=new CKEDITOR.dom.element("body",this.getDocument());f.$.innerHTML=a;for(f=f.getChildren();f.count();)this.append(f.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(a){CKEDITOR.dom.element.prototype.setText= +this.$.innerText!=void 0?function(a){return this.$.innerText=a}:function(a){return this.$.textContent=a};return this.setText(a)},getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a= +this.$.attributes.getNamedItem(a);return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}: +function(a){var f=this.getWindow().$.getComputedStyle(this.$,null);return f?f.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a==void 0){a= +parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&!(document.documentMode>8)){var f=this.$.scopeName;f!="HTML"&&(a=f.toLowerCase()+":"+a)}return(this.getName= +function(){return a})()},getValue:function(){return this.$.value},getFirst:function(a){var f=this.$.firstChild;(f=f&&new CKEDITOR.dom.node(f))&&(a&&!a(f))&&(f=f.getNext(a));return f},getLast:function(a){var f=this.$.lastChild;(f=f&&new CKEDITOR.dom.node(f))&&(a&&!a(f))&&(f=f.getPrevious(a));return f},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var f=0;f<arguments.length;f++)if(arguments[f]== +a)return true;return false},isEditable:function(a){var f=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[f]||CKEDITOR.dtd.$empty[f]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[f]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var f=this.clone(0,1),a=a.clone(0,1);f.removeAttributes(["_moz_dirty", +"data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(f.$.isEqualNode){f.$.style.cssText=CKEDITOR.tools.normalizeCssText(f.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return f.$.isEqualNode(a.$)}f=f.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b= +b.clone();b.setHtml(f);f=b.getHtml();b.setHtml(a);a=b.getHtml()}}return f==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",f,b;if(a&&CKEDITOR.env.webkit){f=this.getWindow();if(!f.equals(CKEDITOR.document.getWindow())&&(b=f.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),f=0,b=a.count();f< +b;f++){var c=a.getItem(f);if(!(c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-bookmark"))&&(c.type==CKEDITOR.NODE_ELEMENT&&!c.isEmptyInlineRemoveable()||c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,f=0;f<a.length;f++){var b=a[f];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(b.specified)return true}}return false}: +function(){var a=this.$.attributes,f=a.length,b={"data-cke-expando":1,_moz_dirty:1};return f>0&&(f>2||!b[a[0].nodeName]||f==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){return(d=this.$.attributes.getNamedItem(d))?CKEDITOR.env.ie?d.specified:true:false}return CKEDITOR.env.ie&&CKEDITOR.env.version<8?function(f){return f=="name"?!!this.$.name:a.call(this,f)}:a}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,f){var b=this.$,a=a.$;if(b!=a){var c;if(f)for(;c= +b.lastChild;)a.insertBefore(b.removeChild(c),a.firstChild);else for(;c=b.firstChild;)a.appendChild(b.removeChild(c))}},mergeSiblings:function(){function a(d,b,c){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var e=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){e.push(b);b=c?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(d.isIdentical(b)){for(var k=c?d.getLast():d.getFirst();e.length;)e.shift().move(d,!c);b.moveChildren(d,!c);b.remove();k&&k.type==CKEDITOR.NODE_ELEMENT&& +k.mergeSiblings()}}}return function(f){if(f===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a,d){this.$.setAttribute(a,d);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(f,b){f=="class"?this.$.className=b:f=="style"?this.$.style.cssText=b:f=="tabindex"?this.$.tabIndex=b:f=="checked"? +this.$.checked=b:f=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if(b=="src"&&c.match(/^http:\/\//))try{a.apply(this,arguments)}catch(e){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&& +(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b<a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(!b.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var c=["top","left","right","bottom"], +e;a=="border"&&(e=["color","style","width"]);for(var b=[],i=0;i<c.length;i++)if(e)for(var k=0;k<e.length;k++)b.push([a,c[i],e[k]].join("-"));else b.push([a,c[i]].join("-"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}else{b.removeProperty?b.removeProperty(a):b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b, +a[b]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,e=b.count();c<e;c++){a=b.getItem(c);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a= +this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,e=this.getDocument(),i=e.getBody(),k=e.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var o=this.$.getBoundingClientRect(),s=e.$.documentElement,r=s.clientTop||i.$.clientTop||0,v=s.clientLeft||i.$.clientLeft||0,g=true;if(CKEDITOR.env.ie){g=e.getDocumentElement().contains(this);e=e.getBody().contains(this);g=k&&e||!k&& +g}if(g){b=o.left+(!k&&s.scrollLeft||i.$.scrollLeft);b=b-v;c=o.top+(!k&&s.scrollTop||i.$.scrollTop);c=c-r}}else{i=this;for(e=null;i&&!(i.getName()=="body"||i.getName()=="html");){b=b+(i.$.offsetLeft-i.$.scrollLeft);c=c+(i.$.offsetTop-i.$.scrollTop);if(!i.equals(this)){b=b+(i.$.clientLeft||0);c=c+(i.$.clientTop||0)}for(;e&&!e.equals(i);){b=b-e.$.scrollLeft;c=c-e.$.scrollTop;e=e.getParent()}e=i;i=(o=i.$.offsetParent)?new CKEDITOR.dom.element(o):null}}if(a){i=this.getWindow();e=a.getWindow();if(!i.equals(e)&& +i.$.frameElement){a=(new CKEDITOR.dom.element(i.$.frameElement)).getDocumentPosition(a);b=b+a.x;c=c+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!k){b=b+(this.$.clientLeft?1:0);c=c+(this.$.clientTop?1:0)}return{x:b,y:c}},scrollIntoView:function(a){var b=this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var e= +c.$.frameElement;e&&(b=new CKEDITOR.dom.element(e))}catch(i){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var e,i,k,o;function s(b,g){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,g);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+g}}function r(a,b){var d={x:0,y:0};if(!a.is(g?"body":"html")){var f=a.$.getBoundingClientRect();d.x=f.left;d.y=f.top}f=a.getWindow();if(!f.equals(b)){f=r(CKEDITOR.dom.element.get(f.$.frameElement),b);d.x=d.x+f.x;d.y=d.y+f.y}return d} +function v(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());k=a.getDocument();var g=k.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=g?k.getBody():k.getDocumentElement());k=a.getWindow();i=r(this,k);var p=r(a,k),z=this.$.offsetHeight;e=this.$.offsetWidth;var A=a.$.clientHeight,l=a.$.clientWidth;k=i.x-v(this,"left")-p.x||0;o=i.y-v(this,"top")-p.y||0;e=i.x+e+v(this,"right")-(p.x+l)||0;i=i.y+z+v(this,"bottom")-(p.y+A)||0;if(o<0||i>0)s(0,b===true? +o:b===false?i:o<0?o:i);if(c&&(k<0||e>0))s(k<0?k:e,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+ +"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},e=0;e<c.length;e++){var i=c[e],k=i.nodeName.toLowerCase(),o;if(!(k in b))if(k=="checked"&&(o=this.getAttribute(k)))a.setAttribute(k,o); +else if(!CKEDITOR.env.ie||this.hasAttribute(k)){o=this.getAttribute(k);if(o===null)o=i.nodeValue;a.setAttribute(k,o)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a);this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b, +d){var c=b.childNodes;if(d>=0&&d<c.length)return c[d]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&& +this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null},find:function(b){var f=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(e(this, +b)));f();return b},findOne:function(b){var f=a(this),b=this.$.querySelector(e(this,b));f();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var e=a(this);if(e!==false)for(var c=this.getChildren(),i=0;i<c.count();i++){e=c.getItem(i);e.type==CKEDITOR.NODE_ELEMENT?e.forEach(a,b):(!b||e.type==b)&&a(e)}}});var c={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]}; +CKEDITOR.dom.element.prototype.setSize=function(a,c,e){if(typeof c=="number"){if(e&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,c){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(e=e-b.call(this,a));return e}})(); +CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a}; +CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var g,d=c.startContainer;g=c.endContainer;var f=c.startOffset,e=c.endOffset,o,j=this.guard,m=this.type,u=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var h=g.type==CKEDITOR.NODE_ELEMENT?g:g.getParent(),q=g.type==CKEDITOR.NODE_ELEMENT?g.getChild(e):g.getNext();this._.guardLTR=function(a,b){return(!b||!h.equals(a))&&(!q|| +!a.equals(q))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var i=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),k=d.type==CKEDITOR.NODE_ELEMENT?f?d.getChild(f-1):null:d.getPrevious();this._.guardRTL=function(a,b){return(!b||!i.equals(a))&&(!k||!a.equals(k))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var n=a?this._.guardRTL:this._.guardLTR;o=j?function(a,b){return n(a,b)===false?false:j(a,b)}:n;if(this.current)g=this.current[u](false,m,o);else{if(a)g.type== +CKEDITOR.NODE_ELEMENT&&(g=e>0?g.getChild(e-1):o(g,true)===false?null:g.getPreviousSourceNode(true,m,o));else{g=d;if(g.type==CKEDITOR.NODE_ELEMENT&&!(g=g.getChild(f)))g=o(d,true)===false?null:d.getNextSourceNode(true,m,o)}g&&o(g)===false&&(g=null)}for(;g&&!this._.end;){this.current=g;if(!this.evaluator||this.evaluator(g)!==false){if(!b)return g}else if(b&&this.evaluator)return false;g=g[u](false,m,o)}this.end();return this.current=null}function e(b){for(var c,d=null;c=a.call(this,b);)d=c;return d} +function b(a){if(k(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(o))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!k(a.getChild(b))){b=false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1}, +next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return e.call(this)},lastBackward:function(){return e.call(this,1)},reset:function(){delete this.current;this._={}}}});var c={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1, +"table-caption":1},d={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in d)&&c[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark= +function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(g){var d,f;d=g&&g.type!=CKEDITOR.NODE_ELEMENT&&(f=g.getParent())&&c(f);d=a?d:d||c(g);return!!(b^d)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces();return function(c){if(b(c))c= +1;else{c.type==CKEDITOR.NODE_TEXT&&(c=c.getParent());c=!c.$.offsetHeight}return!!(a^c)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!h(a)&&!n(a)}return function(c){var g=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&f.test(c.getText());if(g){g=c.getParent();c=c.getNext(b);g=g.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^g)}};CKEDITOR.dom.walker.temp= +function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var f=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,h=CKEDITOR.dom.walker.whitespaces(),n=CKEDITOR.dom.walker.bookmark(),i=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b=h(b)||n(b)||i(b);return!!(a^b)}};var k=CKEDITOR.dom.walker.ignored(),o=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block);CKEDITOR.dom.walker.editable= +function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(n(a)||h(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&f.test(a.getText()))?a:false}})(); +CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a}; +(function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),d=CKEDITOR.dom.walker.bogus();return function(g){if(c(g)||b(g))return true;if(d(g)&&!a)return a=true;return g.type==CKEDITOR.NODE_TEXT&&(g.hasAscendant("pre")||CKEDITOR.tools.trim(g.getText()).length)||g.type==CKEDITOR.NODE_ELEMENT&&!g.is(f)?false:true}}function e(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&h(d)|| +d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&k(a)&&(b=a);return i(a)&&!(h(a)&&a.equals(b))})}}var c=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},d=function(a,b,c,d){a.optimizeBookmark();var g=a.startContainer,f=a.endContainer,e=a.startOffset,h=a.endOffset,l,j;if(f.type==CKEDITOR.NODE_TEXT)f=f.split(h); +else if(f.getChildCount()>0)if(h>=f.getChildCount()){f=f.append(a.document.createText(""));j=true}else f=f.getChild(h);if(g.type==CKEDITOR.NODE_TEXT){g.split(e);g.equals(f)&&(f=g.getNext())}else if(e)if(e>=g.getChildCount()){g=g.append(a.document.createText(""));l=true}else g=g.getChild(e).getPrevious();else{g=g.append(a.document.createText(""),1);l=true}var e=g.getParents(),h=f.getParents(),m,u,i;for(m=0;m<e.length;m++){u=e[m];i=h[m];if(!u.equals(i))break}for(var q=c,k,H,n,C=m;C<e.length;C++){k= +e[C];q&&!k.equals(g)&&(H=q.append(k.clone()));for(k=k.getNext();k;){if(k.equals(h[C])||k.equals(f))break;n=k.getNext();if(b==2)q.append(k.clone(true));else{k.remove();b==1&&q.append(k)}k=n}q&&(q=H)}q=c;for(c=m;c<h.length;c++){k=h[c];b>0&&!k.equals(f)&&(H=q.append(k.clone()));if(!e[c]||k.$.parentNode!=e[c].$.parentNode)for(k=k.getPrevious();k;){if(k.equals(e[c])||k.equals(g))break;n=k.getPrevious();if(b==2)q.$.insertBefore(k.$.cloneNode(true),q.$.firstChild);else{k.remove();b==1&&q.$.insertBefore(k.$, +q.$.firstChild)}k=n}q&&(q=H)}if(b==2){u=a.startContainer;if(u.type==CKEDITOR.NODE_TEXT){u.$.data=u.$.data+u.$.nextSibling.data;u.$.parentNode.removeChild(u.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(u&&i&&(g.$.parentNode!=u.$.parentNode||f.$.parentNode!=i.$.parentNode)){b=i.getIndex();l&&i.$.parentNode==g.$.parentNode&&b--;if(d&&u.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none">&nbsp;</span>', +a.document);d.insertAfter(u);u.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(i.getParent(),b)}a.collapse(true)}l&&g.remove();j&&f.$.parentNode&&f.remove()},f={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},h=CKEDITOR.dom.walker.bogus(),n=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,i=CKEDITOR.dom.walker.editable(),k=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype= +{clone:function(){var a=new CKEDITOR.dom.range(this.root);a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed|| +d(this,2,a);return a},deleteContents:function(a){this.collapsed||d(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,b,a);return b},createBookmark:function(a){var b,c,d,g,f=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("&nbsp;");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(f?"C":"S"))}if(!f){c=b.clone();c.setHtml("&nbsp;");a&&c.setAttribute("id", +d+"E");g=this.clone();g.collapse();g.insertNode(c)}g=this.clone();g.collapse(true);g.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(f?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:f}},createBookmark2:function(){function a(b){var c=b.container,d=b.offset,g;g=c;var f=d;g=g.type!=CKEDITOR.NODE_ELEMENT||f===0||f==g.getChildCount()?0:g.getChild(f-1).type==CKEDITOR.NODE_TEXT&&g.getChild(f).type==CKEDITOR.NODE_TEXT; +if(g){c=c.getChild(d-1);d=c.getLength()}c.type==CKEDITOR.NODE_ELEMENT&&d>1&&(d=c.getChild(d-1).getIndex(true)+1);if(c.type==CKEDITOR.NODE_TEXT){g=c;for(f=0;(g=g.getPrevious())&&g.type==CKEDITOR.NODE_TEXT;)f=f+g.getLength();d=d+f}b.container=c;b.offset=d}return function(b){var c=this.collapsed,d={container:this.startContainer,offset:this.startOffset},g={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(g)}return{start:d.container.getAddress(b),end:c?null:g.container.getAddress(b), +startOffset:d.offset,endOffset:g.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}}, +getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,g;if(a.type==CKEDITOR.NODE_ELEMENT){g=a.getChildCount();if(g>c)a=a.getChild(c);else if(g<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){g=b.getChildCount();if(g>d)b=b.getChild(d).getPreviousSourceNode(true);else if(g<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b= +b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a): +this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,g=this.collapsed; +if((!a||g)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var f=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(f,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(g){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!g&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()|| +c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var g=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var f=this.getCommonAncestor(),e=this.root,k,l,j,m,u,h=false,q,i;q=this.startContainer;var n=this.startOffset;if(q.type==CKEDITOR.NODE_TEXT){if(n){q=!CKEDITOR.tools.trim(q.substring(0, +n)).length&&q;h=!!q}if(q&&!(m=q.getPrevious()))j=q.getParent()}else{n&&(m=q.getChild(n-1)||q.getLast());m||(j=q)}for(j=c(j);j||m;){if(j&&!m){!u&&j.equals(f)&&(u=true);if(g?j.isBlockBoundary():!e.contains(j))break;if(!h||j.getComputedStyle("display")!="inline"){h=false;u?k=j:this.setStartBefore(j)}m=j.getPrevious()}for(;m;){q=false;if(m.type==CKEDITOR.NODE_COMMENT)m=m.getPrevious();else{if(m.type==CKEDITOR.NODE_TEXT){i=m.getText();d.test(i)&&(m=null);q=/[\s\ufeff]$/.test(i)}else if((m.$.offsetWidth> +0||b&&m.is("br"))&&!m.data("cke-bookmark"))if(h&&CKEDITOR.dtd.$removeEmpty[m.getName()]){i=m.getText();if(d.test(i))m=null;else for(var n=m.$.getElementsByTagName("*"),G=0,C;C=n[G++];)if(!CKEDITOR.dtd.$removeEmpty[C.nodeName.toLowerCase()]){m=null;break}m&&(q=!!i.length)}else m=null;q&&(h?u?k=j:j&&this.setStartBefore(j):h=true);if(m){q=m.getPrevious();if(!j&&!q){j=m;m=null;break}m=q}else j=null}}j&&(j=c(j.getParent()))}q=this.endContainer;n=this.endOffset;j=m=null;u=h=false;var J=function(a,b){var c= +new CKEDITOR.dom.range(e);c.setStart(a,b);c.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),g;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};g=c.next();){if(g.type!=CKEDITOR.NODE_TEXT)return false;i=g!=a?g.getText():g.substring(b);if(d.test(i))return false}return true};if(q.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(q.substring(n)).length)h=true;else{h=!q.getLength();if(n==q.getLength()){if(!(m=q.getNext()))j=q.getParent()}else J(q, +n)&&(j=q.getParent())}else(m=q.getChild(n))||(j=q);for(;j||m;){if(j&&!m){!u&&j.equals(f)&&(u=true);if(g?j.isBlockBoundary():!e.contains(j))break;if(!h||j.getComputedStyle("display")!="inline"){h=false;u?l=j:j&&this.setEndAfter(j)}m=j.getNext()}for(;m;){q=false;if(m.type==CKEDITOR.NODE_TEXT){i=m.getText();J(m,0)||(m=null);q=/^[\s\ufeff]/.test(i)}else if(m.type==CKEDITOR.NODE_ELEMENT){if((m.$.offsetWidth>0||b&&m.is("br"))&&!m.data("cke-bookmark"))if(h&&CKEDITOR.dtd.$removeEmpty[m.getName()]){i=m.getText(); +if(d.test(i))m=null;else{n=m.$.getElementsByTagName("*");for(G=0;C=n[G++];)if(!CKEDITOR.dtd.$removeEmpty[C.nodeName.toLowerCase()]){m=null;break}}m&&(q=!!i.length)}else m=null}else q=1;q&&h&&(u?l=j:this.setEndAfter(j));if(m){q=m.getNext();if(!j&&!q){j=m;m=null;break}m=q}else j=null}j&&(j=c(j.getParent()))}if(k&&l){f=k.contains(l)?l:k;this.setStartBefore(f);this.setEndAfter(f)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:j=new CKEDITOR.dom.range(this.root);e= +this.root;j.setStartAt(e,CKEDITOR.POSITION_AFTER_START);j.setEnd(this.startContainer,this.startOffset);j=new CKEDITOR.dom.walker(j);var F,t,x=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),y=null,B=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(y){if(y.equals(a)){y=null;return}}else y=a;else if(y)return;var b=x(a);b||(F=a);return b},g=function(a){var b=B(a);!b&&(a.is&&a.is("br"))&&(t=a);return b};j.guard=B;j=j.lastBackward(); +F=F||e;this.setStartAt(F,!F.is("br")&&(!j&&this.checkStartOfBlock()||j&&F.contains(j))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){j=this.clone();j=new CKEDITOR.dom.walker(j);var w=CKEDITOR.dom.walker.whitespaces(),N=CKEDITOR.dom.walker.bookmark();j.evaluator=function(a){return!w(a)&&!N(a)};if((j=j.previous())&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("br"))break}j=this.clone();j.collapse();j.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);j=new CKEDITOR.dom.walker(j); +j.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?g:B;F=y=t=null;j=j.lastForward();F=F||e;this.setEndAt(F,!j&&this.checkEndOfBlock()||j&&F.contains(j)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);t&&this.setEndAfter(t)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,d=this.clone(),g=this.startContainer,f=this.endContainer,e=this.startOffset,h=this.endOffset,l=1,j=1;if(g&&g.type==CKEDITOR.NODE_TEXT)if(e)if(e>=g.getLength())d.setStartAfter(g);else{d.setStartBefore(g); +l=0}else d.setStartBefore(g);if(f&&f.type==CKEDITOR.NODE_TEXT)if(h)if(h>=f.getLength())d.setEndAfter(f);else{d.setEndAfter(f);j=0}else d.setEndBefore(f);var d=new CKEDITOR.dom.walker(d),m=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var u;d.guard=function(b,g){if(m(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||g&&b.equals(u)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()|| +b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!g&&b.type==CKEDITOR.NODE_ELEMENT&&(u=b);return true};if(l)(g=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(g,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(j){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!l&&!j)}},insertNode:function(a){this.optimizeBookmark();this.trim(false, +true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a, +b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer=a;this.endOffset=b}c(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}c(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+ +1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}c(this)}, +setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}c(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d); +d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,g=c.block,f=null;if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!d){d=this.fixBlock(true,a);g=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}g||(g=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=g&&this.checkEndOfBlock(); +this.deleteContents();if(d&&d.equals(g))if(b){f=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END);g=null}else if(a){f=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d=null}else{g=this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:g,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:f}},splitElement:function(a){if(!this.collapsed)return null; +this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(), +d=this[b?"endPath":"startPath"](),f=d.block||d.blockLimit,e;f&&!f.equals(d.root)&&!f.getFirst(a(f));){e=f.getParent();this[b?"setEndAt":"setStartAt"](f,CKEDITOR.POSITION_AFTER_END);f.remove(1);f=e}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt": +"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=e(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0,c));n.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit, +CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));n.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()}, +getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")== +"false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&& +this.checkEndOfBlock()&&n.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if(a.getAttribute("contenteditable")=="false"&& +a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,g=c,f=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(f=d[b?"getLast":"getFirst"](k));!g&&!f&&(f=d[b?"getPrevious":"getNext"](k));a=f}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,g,f=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];c.moveToPosition(a,f[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(g=c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d= +1;if(g.type==CKEDITOR.NODE_ELEMENT&&g.is(CKEDITOR.dtd.$block)&&g.getAttribute("contenteditable")=="false"){c.setStartAt(g,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(g,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(g,f[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!= +CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer; +return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",this.document),b,c,d,g=this.clone();g.optimize();if(d=g.startContainer.type==CKEDITOR.NODE_TEXT){c=g.startContainer.getText();b=g.startContainer.split(g.startOffset);a.insertAfter(g.startContainer)}else g.insertNode(a);a.scrollIntoView();if(d){g.startContainer.setText(c); +b.remove()}a.remove()}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict"; +(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function e(a,b,c){for(a=a.getNextSourceNode(b,null,c);!f(a);)a=a.getNextSourceNode(b,null,c);return a}function b(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function c(a,d,f,e){a:{e==void 0&&(e=b(f));for(var h;h=e.shift();)if(h.getDtd().p){e={element:h,remaining:e}; +break a}e=null}if(!e)return 0;if((h=CKEDITOR.filter.instances[e.element.data("cke-filter")])&&!h.check(d))return c(a,d,f,e.remaining);d=new CKEDITOR.dom.range(e.element);d.selectNodeContents(e.element);d=d.createIterator();d.enlargeBr=a.enlargeBr;d.enforceRealBlocks=a.enforceRealBlocks;d.activeFilter=d.filter=h;a._.nestedEditable={element:e.element,container:f,remaining:e.remaining,iterator:d};return 1}var d=/^[\r\n\t ]+$/,f=CKEDITOR.dom.walker.bookmark(false,true),h=CKEDITOR.dom.walker.whitespaces(true), +n=function(a){return f(a)&&h(a)};a.prototype={getNextParagraph:function(a){var b,h,s,r,v,a=a||"p";if(this._.nestedEditable){if(b=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return b}this.activeFilter=this.filter;if(c(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var g=this.range.clone();g.shrink(CKEDITOR.SHRINK_ELEMENT,true);h=g.endContainer.hasAscendant("pre",true)||g.startContainer.hasAscendant("pre",true);g.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!g.collapsed){h=new CKEDITOR.dom.walker(g.clone());var p=CKEDITOR.dom.walker.bookmark(true,true);h.evaluator=p;this._.nextNode=h.next();h=new CKEDITOR.dom.walker(g.clone()); +h.evaluator=p;h=h.previous();this._.lastNode=h.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){p=this.range.clone();p.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END);if(p.checkEndOfBlock()){p=new CKEDITOR.dom.elementPath(p.endContainer,p.root);this._.lastNode=(p.block||p.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!g.root.contains(this._.lastNode)){this._.lastNode= +this._.docEndMarker=g.document.createText("");this._.lastNode.insertAfter(h)}g=null}this._.started=1;h=g}p=this._.nextNode;g=this._.lastNode;for(this._.nextNode=null;p;){var z=0,A=p.hasAscendant("pre"),l=p.type!=CKEDITOR.NODE_ELEMENT,j=0;if(l)p.type==CKEDITOR.NODE_TEXT&&d.test(p.getText())&&(l=0);else{var m=p.getName();if(CKEDITOR.dtd.$block[m]&&p.getAttribute("contenteditable")=="false"){b=p;c(this,a,b);break}else if(p.isBlockBoundary(this.forceBrBreak&&!A&&{br:1})){if(m=="br")l=1;else if(!h&&!p.getChildCount()&& +m!="hr"){b=p;s=p.equals(g);break}if(h){h.setEndAt(p,CKEDITOR.POSITION_BEFORE_START);if(m!="br")this._.nextNode=p}z=1}else{if(p.getFirst()){if(!h){h=this.range.clone();h.setStartAt(p,CKEDITOR.POSITION_BEFORE_START)}p=p.getFirst();continue}l=1}}if(l&&!h){h=this.range.clone();h.setStartAt(p,CKEDITOR.POSITION_BEFORE_START)}s=(!z||l)&&p.equals(g);if(h&&!z)for(;!p.getNext(n)&&!s;){m=p.getParent();if(m.isBlockBoundary(this.forceBrBreak&&!A&&{br:1})){z=1;l=0;s||m.equals(g);h.setEndAt(m,CKEDITOR.POSITION_BEFORE_END); +break}p=m;l=1;s=p.equals(g);j=1}l&&h.setEndAt(p,CKEDITOR.POSITION_AFTER_END);p=e(p,j,g);if((s=!p)||z&&h)break}if(!b){if(!h){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null}b=new CKEDITOR.dom.elementPath(h.startContainer,h.root);p=b.blockLimit;z={div:1,th:1,td:1};b=b.block;if(!b&&p&&!this.enforceRealBlocks&&z[p.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!p.equals(h.root))b=p;else if(!b||this.enforceRealBlocks&&b.getName()=="li"){b=this.range.document.createElement(a); +h.extractContents().appendTo(b);b.trim();h.insertNode(b);r=v=true}else if(b.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){b=b.clone(false);h.extractContents().appendTo(b);b.trim();v=h.splitBlock();r=!v.wasStartOfBlock;v=!v.wasEndOfBlock;h.insertNode(b)}}else if(!s)this._.nextNode=b.equals(g)?null:e(h.getBoundaryNodes().endNode,1,g)}if(r)(r=b.getPrevious())&&r.type==CKEDITOR.NODE_ELEMENT&&(r.getName()=="br"?r.remove():r.getLast()&&r.getLast().$.nodeName.toLowerCase()=="br"&&r.getLast().remove()); +if(v)(r=b.getLast())&&r.type==CKEDITOR.NODE_ELEMENT&&r.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||r.getPrevious(f)||r.getNext(f))&&r.remove();if(!this._.nextNode)this._.nextNode=s||b.equals(g)||!g?null:e(b,1,g);return b}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +CKEDITOR.command=function(a,e){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:e.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& +this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:e.refresh&&e.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(c){return!c&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? +this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){function a(a,b,c,d,g){var f,e,a=[];for(f in b){e=b[f];e=typeof e=="boolean"?{}:typeof e=="function"?{match:e}:J(e);if(f.charAt(0)!="$")e.elements=f;if(c)e.featureName=c.toLowerCase();var j=e;j.elements=h(j.elements,/\s+/)||null;j.propertiesOnly=j.propertiesOnly||j.elements===true;var l=/\s*,\s*/,p=void 0;for(p in y){j[p]=h(j[p],l)||null;var m=j,q=B[p],w=h(j[B[p]],l),u=j[p],t=[],i=true,k=void 0;w?i=false:w={};for(k in u)if(k.charAt(0)=="!"){k=k.slice(1);t.push(k);w[k]=true;i=false}for(;k= +t.pop();){u[k]=u["!"+k];delete u["!"+k]}m[q]=(i?false:w)||null}j.match=j.match||null;d.push(e);a.push(e)}for(var b=g.elements,g=g.generic,z,c=0,d=a.length;c<d;++c){f=J(a[c]);e=f.classes===true||f.styles===true||f.attributes===true;j=f;p=q=l=void 0;for(l in y)j[l]=A(j[l]);m=true;for(p in B){l=B[p];q=j[l];w=[];u=void 0;for(u in q)u.indexOf("*")>-1?w.push(RegExp("^"+u.replace(/\*/g,".*")+"$")):w.push(u);q=w;if(q.length){j[l]=q;m=false}}j.nothingRequired=m;j.noProperties=!(j.attributes||j.classes||j.styles); +if(f.elements===true||f.elements===null)g[e?"unshift":"push"](f);else{j=f.elements;delete f.elements;for(z in j)if(b[z])b[z][e?"unshift":"push"](f);else b[z]=[f]}}}function e(a,c,d,g){if(!a.match||a.match(c))if(g||n(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;g=d.validClasses;if(a)if(a===true)a=true;else{for(var f=0, +e=c.length,j;f<e;++f){j=c[f];g[j]||(g[j]=a(j))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return false;c.hadInvalidAttribute=d(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=d(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var g=false,f=a===true,e=b.length;e--;)if(f||a(b[e])){b.splice(e,1);g= +true}a=g}else a=false;c.hadInvalidClass=a||c.hadInvalidClass}}function d(a,b){if(!a)return false;var c=false,d=a===true,g;for(g in b)if(d||a(g)){delete b[g];c=true}return c}function f(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function h(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=F(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a): +false;var c={},d=0,g;for(g in a){c[g]=a[g];d++}return d?c:false}function n(a,b){if(a.nothingRequired)return true;var c,d,g,f;if(g=a.requiredClasses){f=b.classes;for(c=0;c<g.length;++c){d=g[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(f,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(f,d))return false}}return i(b.styles,a.requiredStyles)&&i(b.attributes,a.requiredAttributes)}function i(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in +a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function k(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=t;return b}function o(a){for(var b,c,d,g,f={},e=1,a=F(a);b=a.match(w);){if(c=b[2]){d=s(c,"styles");g=s(c,"attrs");c=s(c,"classes")}else d=g=c=null;f["$"+e++]={elements:b[1],classes:c,styles:d,attributes:g};a=a.slice(b[0].length)}return f}function s(a,b){var c=a.match(N[b]);return c?F(c[1]):null}function r(a){var b= +a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function v(a,b,d,g){var f=0,j;if(g.toHtml)b.name=b.name.replace(M,"$1");if(g.doCallbacks&&a.elementCallbacks){a:for(var l=a.elementCallbacks,m=0,h=l.length,q;m<h;++m)if(q=l[m](b)){j=q;break a}if(j)return j}if(g.doTransform)if(j=a._.transformations[b.name]){r(b);for(l=0;l<j.length;++l)u(a,b,j[l]);p(b)}if(g.doFilter){a:{l=b.name; +m=a._;a=m.allowedRules.elements[l];j=m.allowedRules.generic;l=m.disallowedRules.elements[l];m=m.disallowedRules.generic;h=g.skipRequired;q={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var w,t;if(!a&&!j)a=null;else{r(b);if(l){w=0;for(t=l.length;w<t;++w)if(c(l[w],b,q)===false){a=null;break a}}if(m){w=0;for(t=m.length;w<t;++w)c(m[w],b,q)}if(a){w=0;for(t=a.length;w< +t;++w)e(a[w],b,q,h)}if(j){w=0;for(t=j.length;w<t;++w)e(j[w],b,q,h)}a=q}}if(!a){d.push(b);return C}if(!a.valid){d.push(b);return C}t=a.validAttributes;var i=a.validStyles;j=a.validClasses;var l=b.attributes,k=b.styles,m=b.classes,h=b.classBackup,B=b.styleBackup,y,x,N=[];q=[];var n=/^data-cke-/;w=false;delete l.style;delete l["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(y in l)if(!t[y])if(n.test(y)){if(y!=(x=y.replace(/^data-cke-saved-/,""))&&!t[x]){delete l[y];w=true}}else{delete l[y]; +w=true}if(!a.allStyles||a.hadInvalidStyle){for(y in k)a.allStyles||i[y]?N.push(y+":"+k[y]):w=true;if(N.length)l.style=N.sort().join("; ")}else if(B)l.style=B;if(!a.allClasses||a.hadInvalidClass){for(y=0;y<m.length;++y)(a.allClasses||j[m[y]])&&q.push(m[y]);q.length&&(l["class"]=q.sort().join(" "));h&&q.length<h.split(/\s+/).length&&(w=true)}else h&&(l["class"]=h);w&&(f=C);if(!g.skipFinalValidation&&!z(b)){d.push(b);return C}}if(g.toHtml)b.name=b.name.replace(D,"cke:$1");return f}function g(a){var b= +[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function p(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function z(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function A(a){if(!a)return false;if(a===true)return true; +var b=g(a);return function(c){return c in a||b&&c.match(b)}}function l(){return new CKEDITOR.htmlParser.element("br")}function j(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||G.$block[a.name])}function m(a,b,c){var d=a.name;if(G.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(l());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(G.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!j(a.previous)){b=l();b.insertBefore(a)}if(a.next&&!j(a.next)){b=l();b.insertAfter(a)}a.replaceWithChildren()}else{var d= +a.children,g;b:{g=G[b];for(var f=0,e=d.length,m;f<e;++f){m=d[f];if(m.type==CKEDITOR.NODE_ELEMENT&&!g[m.name]){g=false;break b}}g=true}if(g){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{g=a.parent;for(var f=g.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||g.name=="body",p,e=d.length;e>0;){m=d[--e];if(f&&(m.type==CKEDITOR.NODE_TEXT||m.type==CKEDITOR.NODE_ELEMENT&&G.$inline[m.name])){if(!p){p=new CKEDITOR.htmlParser.element(b);p.insertAfter(a);c.push({check:"parent-down",el:p})}p.add(m,0)}else{p= +null;m.insertAfter(a);g.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(m.type==CKEDITOR.NODE_ELEMENT&&!G[g.name][m.name])&&c.push({check:"el-up",el:m})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function u(a,b,c){var d,g;for(d=0;d<c.length;++d){g=c[d];if((!g.check||a.check(g.check,false))&&(!g.left||g.left(b))){g.right(b,ba);break}}}function P(a,b){var c=b.getDefinition(),d=c.attributes,g=c.styles,f,e,j,l;if(a.name!=c.element)return false; +for(f in d)if(f=="class"){c=d[f].split(/\s+/);for(j=a.classes.join("|");l=c.pop();)if(j.indexOf(l)==-1)return false}else if(a.attributes[f]!=d[f])return false;for(e in g)if(a.styles[e]!=g[e])return false;return true}function q(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function L(a){return function(b){return P(b,a)}}function H(a){return function(b,c){c[a](b)}}var G=CKEDITOR.dtd, +C=1,J=CKEDITOR.tools.copy,F=CKEDITOR.tools.trim,t="cke-test",x=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a; +this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(x[a.enterMode]+" "+x[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,d){if(!f(this,b,d))return false;var g,e;if(typeof b=="string")b=o(b); +else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,d);g=b.getDefinition();b={};d=g.attributes;b[g.element]=g={styles:g.styles,requiredStyles:g.styles&&CKEDITOR.tools.objectKeys(g.styles)};if(d){d=J(d);g.classes=d["class"]?d["class"].split(/\s+/):null;g.requiredClasses=g.classes;delete d["class"];g.attributes=d;g.requiredAttributes=d&&CKEDITOR.tools.objectKeys(d)}}else if(CKEDITOR.tools.isArray(b)){for(g=0;g<b.length;++g)e=this.allow(b[g], +c,d);return e}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var g=this,f=[],e=this.editor&&this.editor.config.protectedSource,j,l=false,p={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){j=v(g,a,f,p);if(j&C)l= +true;else if(j&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var m,q,w;if(e)for(q=0;q<e.length;++q)if((w=d.match(e[q]))&&w[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(m=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&v(g,m,c,p);c=!c.length}c||f.push(a)}},null,true);f.length&&(l=true);for(var q,a=[],d=x[d||(this.editor? +this.editor.enterMode:CKEDITOR.ENTER_P)];c=f.pop();)c.type==CKEDITOR.NODE_ELEMENT?m(c,d,a):c.remove();for(;q=a.pop();){c=q.el;if(c.parent)switch(q.check){case "it":G.$removeEmpty[c.name]&&!c.children.length?m(c,d,a):z(c)||m(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!G[c.parent.name][c.name]&&m(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!G[c.parent.name][c.name]&&m(c.parent,d,a)}}return l},checkFeature:function(a){if(this.disabled|| +!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!f(this,b,true))return false;typeof b=="string"&&(b=o(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],g;for(b=0;b<a.length&&!g;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))g=c}if(g){for(b=0;b<a.length;++b)d.push(q(a[b], +g));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, +c;if(!this.disabled&&a){var d=this._.transformations,g;for(g=0;g<a.length;++g){b=a[g];var f=void 0,e=void 0,j=void 0,l=void 0,m=void 0,p=void 0;c=[];for(e=0;e<b.length;++e){j=b[e];if(typeof j=="string"){j=j.split(/\s*:\s*/);l=j[0];m=null;p=j[1]}else{l=j.check;m=j.left;p=j.right}if(!f){f=j;f=f.element?f.element:l?l.match(/^([a-z0-9]+)/i)[0]:f.left.getDefinition().element}m instanceof CKEDITOR.style&&(m=L(m));c.push({check:l==f?null:l,left:m,right:typeof p=="string"?H(p):p})}b=f;d[b]||(d[b]=[]);d[b].push(c)}}}, +check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var g,f;if(typeof a=="string"){f=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(f in this._.cachedChecks)return this._.cachedChecks[f];d=o(a).$1;g=d.styles;var e=d.classes;d.name=d.elements;d.classes=e=e?e.split(/\s*,\s*/):[];d.styles=k(g);d.attributes=k(d.attributes);d.children=[];e.length&&(d.attributes["class"]=e.join(" "));if(g)d.attributes.style= +CKEDITOR.tools.writeCssText(d.styles);g=d}else{d=a.getDefinition();g=d.styles;e=d.attributes||{};if(g){g=J(g);e.style=CKEDITOR.tools.writeCssText(g,true)}else g={};g={name:d.element,attributes:e,classes:e["class"]?e["class"].split(/\s+/):[],styles:g,children:[]}}var e=CKEDITOR.tools.clone(g),j=[],l;if(b!==false&&(l=this._.transformations[g.name])){for(d=0;d<l.length;++d)u(this,g,l[d]);p(g)}v(this,e,j,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=j.length>0?false: +CKEDITOR.tools.objectCompare(g.attributes,e.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[f]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var g=a.slice(),f;if(this.check(x[c]))return c;for(d||(g=g.reverse());f=g.pop();)if(this.check(f))return b[f];return CKEDITOR.ENTER_BR}}()};var y={styles:1,attributes:1,classes:1},B={styles:"requiredStyles",attributes:"requiredAttributes", +classes:"requiredClasses"},w=/^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,N={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},M=/^cke:(object|embed|param)$/,D=/^(object|embed|param)$/,ba=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a,"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a, +b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],g=d&&d.match(/^(\d+)(?:\.\d*)?px$/);g?a.attributes[c]=g[1]:d==t&&(a.attributes[c]=t)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b=a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in +a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:P,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,g=c.attributes,f,e,j,l;a.name=c.element;for(f in g)if(f=="class"){c=a.classes.join("|");for(j=g[f].split(/\s+/);l=j.pop();)c.indexOf(l)==-1&&a.classes.push(l)}else a.attributes[f]=g[f];for(e in d)a.styles[e]=d[e]}}}})(); +(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}}, +lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function e(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;e.call(this)},b,this)}},add:function(a,e){var b=a.getCustomData("focusmanager");if(!b|| +b!=this){b&&b.remove(a);var b="focus",c="blur";if(e)if(CKEDITOR.env.ie){b="focusin";c="focusout"}else CKEDITOR.event.useCapture=1;var d={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,d.focus,this);a.on(c,d.blur,this);if(e)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",d)}},remove:function(a){a.removeCustomData("focusmanager");var e=a.removeCustomData("focusmanager_handlers");a.removeListener("blur", +e.blur);a.removeListener("focus",e.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this}; +(function(){var a,e=function(b){var b=b.data,d=b.getKeystroke(),f=this.keystrokes[d],e=this._.editor;a=e.fire("key",{keyCode:d,domEvent:b})===false;if(!a){f&&(a=e.execCommand(f,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[d])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})(); +(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,e,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(e, +a);var c=this,e=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?e():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),e,this)},detect:function(a,e){var b=this.languages,e=e||navigator.userLanguage||navigator.language||a,c=e.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),d=c[1],c=c[2];b[d+"-"+c]?d=d+"-"+c:b[d]||(d=null);CKEDITOR.lang.detect=d?function(){return d}:function(a){return a};return d||a}}})(); +CKEDITOR.scriptLoader=function(){var a={},e={};return{load:function(b,c,d,f){var h=typeof b=="string";h&&(b=[b]);d||(d=CKEDITOR);var n=b.length,i=[],k=[],o=function(a){c&&(h?c.call(d,a):c.call(d,i,k))};if(n===0)o(true);else{var s=function(a,b){(b?i:k).push(a);if(--n<=0){f&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");o(b)}},r=function(b,c){a[b]=1;var d=e[b];delete e[b];for(var g=0;g<d.length;g++)d[g](b,c)},v=function(b){if(a[b])s(b,true);else{var d=e[b]||(e[b]=[]);d.push(s);if(!(d.length> +1)){var g=new CKEDITOR.dom.element("script");g.setAttributes({type:"text/javascript",src:b});if(c)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)g.$.onreadystatechange=function(){if(g.$.readyState=="loaded"||g.$.readyState=="complete"){g.$.onreadystatechange=null;r(b,true)}};else{g.$.onload=function(){setTimeout(function(){r(b,true)},0)};g.$.onerror=function(){r(b,false)}}g.appendTo(CKEDITOR.document.getHead())}}};f&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var g=0;g<n;g++)v(b[g])}}, +queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(d,f){var e=this;c.push({scriptUrl:d,callback:function(){f&&f.apply(this,arguments);c.shift();a.call(e)}});c.length==1&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName=e;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}}; +CKEDITOR.resourceManager.prototype={add:function(a,e){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=e||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(e&&e.dir||this.basePath+a+"/")},getFilePath:function(a){var e=this.externals[a]; +return CKEDITOR.getUrl(this.getPath(a)+(e?e.file:this.fileName+".js"))},addExternal:function(a,e,b){for(var a=a.split(","),c=0;c<a.length;c++){var d=a[c];b||(e=e.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[d]={dir:e,file:b||this.fileName+".js"}}},load:function(a,e,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,d=this.registered,f=[],h={},n={},i=0;i<a.length;i++){var k=a[i];if(k)if(!c[k]&&!d[k]){var o=this.getFilePath(k);f.push(o);o in h||(h[o]=[]);h[o].push(k)}else n[k]= +this.get(k)}CKEDITOR.scriptLoader.load(f,function(a,d){if(d.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+h[d[0]].join(",")+'" was not found at "'+d[0]+'".';for(var f=0;f<a.length;f++)for(var g=h[a[f]],p=0;p<g.length;p++){var i=g[p];n[i]=this.get(i);c[i]=1}e.call(b,n)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"); +CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var e={};return function(b,c,d){var f={},h=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(f,a);var b=[],n;for(n in a){var s=a[n],r=s&&s.requires;if(!e[n]){if(s.icons)for(var v=s.icons.split(","),g=v.length;g--;)CKEDITOR.skin.addIcon(v[g],s.path+"icons/"+(CKEDITOR.env.hidpi&&s.hidpi?"hidpi/":"")+v[g]+".png");e[n]=1}if(r){r.split&&(r=r.split(","));for(s=0;s<r.length;s++)f[r[s]]||b.push(r[s])}}if(b.length)h.call(this, +b);else{for(n in f){s=f[n];if(s.onLoad&&!s.onLoad._called){s.onLoad()===false&&delete f[n];s.onLoad._called=1}}c&&c.call(d||window,f)}},this)};h.call(this,b)}});CKEDITOR.plugins.setLang=function(a,e,b){var c=this.get(a),a=c.langEntries||(c.langEntries={}),c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));CKEDITOR.tools.indexOf(c,e)==-1&&c.push(e);a[e]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this}; +CKEDITOR.ui.prototype={add:function(a,e,b){b.name=a.toLowerCase();var c=this.items[a]={type:e,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var e=this.items[a],b=e&&this._.handlers[e.type],c=e&&e.command&&this.editor.getCommand(e.command),b=b&&b.create.apply(this,e.args);this.instances[a]=b;c&&c.uiItems.push(b);if(b&&!b.type)b.type=e.type;return b},addHandler:function(a,e){this._.handlers[a]= +e},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui); +(function(){function a(a,c,f){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(c!==void 0){if(c instanceof CKEDITOR.dom.element){if(!f)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&f==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(f==CKEDITOR.ELEMENT_MODE_INLINE?c.is(CKEDITOR.dtd.$editable)||c.is("textarea"):f==CKEDITOR.ELEMENT_MODE_REPLACE? +!c.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=f;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||e();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this); +this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){d(this,a.data.path)});this.on("activeFilterChange",function(){d(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){h(this,a)},0,this)}function e(){do var a="editor"+ +++r;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)c(this,a[b])}function c(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function d(a,b,c){if(b){var d,f,e=a.commands;for(f in e){d=e[f];(c||d.contextSensitive)&&d.refresh(a,b)}}}function f(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=v[b]||(v[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b|| +!f(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};f(a)});return true}function h(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode== +CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor= +new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);n(a)});if(b&&b.customConfig!=void 0)a.config.customConfig=b.customConfig;f(a)||a.fireOnce("customConfigLoaded")}function n(a){CKEDITOR.skin.loadPart("editor",function(){i(a)})}function i(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection= +a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");k(a)})}function k(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);o(a)})}function o(a){var b=a.config,c=b.plugins,d=b.extraPlugins,f=b.removePlugins;if(d)var e=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(e,""),c=c+(","+d);if(f)var m=RegExp("(?:^|,)(?:"+f.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(m,"");CKEDITOR.env.air&& +(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],f=[],e=[];a.plugins=c;for(var j in c){var l=c[j],h=l.lang,i=null,k=l.requires,t;CKEDITOR.tools.isArray(k)&&(k=k.join(","));if(k&&(t=k.match(m)))for(;k=t.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[k,j]);if(h&&!a.lang[j]){h.split&&(h=h.split(","));if(CKEDITOR.tools.indexOf(h,a.langCode)>= +0)i=a.langCode;else{i=a.langCode.replace(/-.*/,"");i=i!=a.langCode&&CKEDITOR.tools.indexOf(h,i)>=0?i:CKEDITOR.tools.indexOf(h,"en")>=0?"en":h[0]}if(!l.langEntries||!l.langEntries[i])e.push(CKEDITOR.getUrl(l.path+"lang/"+i+".js"));else{a.lang[j]=l.langEntries[i];i=null}}f.push(i);d.push(l)}CKEDITOR.scriptLoader.load(e,function(){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var j=0;j<d.length;j++){var l=d[j];e===0&&(f[j]&&l.lang&&l.langEntries)&&(a.lang[l.name]=l.langEntries[f[j]]); +if(l[c[e]])l[c[e]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(j=0;j<a.config.blockedKeystrokes.length;j++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[j]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function s(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b): +a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var r=0,v={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&c(this,d);return this.commands[a]=d},_attachToForm:function(){var a=this,b=a.element,c=new CKEDITOR.dom.element(b.$.form);if(b.is("textarea")&&c){var d=function(c){a.updateElement();a._.required&&(!b.getValue()&&a.fire("required")===false)&&c.data.preventDefault()}; +c.on("submit",d);if(c.$.submit&&c.$.submit.call&&c.$.submit.apply)c.$.submit=CKEDITOR.tools.override(c.$.submit,function(a){return function(){d();a.apply?a.apply(this):a()}});a.on("destroy",function(){c.removeListener("submit",d)})}},destroy:function(a){this.fire("beforeDestroy");!a&&s.call(this);this.editable(null);this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection(); +if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec",d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]}, +getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot", +a)},setData:function(a,b,c){!c&&this.fire("saveSnapshot");if(b||!c)this.once("dataReady",function(a){c||this.fire("saveSnapshot");b&&b.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==void 0||a;if(this.readOnly!=a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText", +a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return s.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,f=b.length;f--;){c=b[f];d=0;if(CKEDITOR.tools.isArray(c)){d= +c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR: +b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,e={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,d,f=0,h;c=this._.htmlPartsRegex.exec(b);){d=c.index;if(d>f){f=b.substring(f,d);if(h)h.push(f);else this.onText(f)}f= +this._.htmlPartsRegex.lastIndex;if(d=c[1]){d=d.toLowerCase();if(h&&CKEDITOR.dtd.$cdata[d]){this.onCDATA(h.join(""));h=null}if(!h){this.onTagClose(d);continue}}if(h)h.push(c[0]);else if(d=c[3]){d=d.toLowerCase();if(!/="/.test(d)){var n={},i;c=c[4];var k=!!(c&&c.charAt(c.length-1)=="/");if(c)for(;i=a.exec(c);){var o=i[1].toLowerCase();i=i[2]||i[3]||i[4]||"";n[o]=!i&&e[o]?o:CKEDITOR.tools.htmlDecodeAttr(i)}this.onTagOpen(d,n,k);!h&&CKEDITOR.dtd.$cdata[d]&&(h=[])}}else if(d=c[2])this.onComment(d)}if(b.length> +f)this.onText(b.substring(f,b.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,e){e?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,e){typeof e=="string"&&(e=CKEDITOR.tools.htmlEncodeAttr(e));this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)}, +reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var e=this._.output.join("");a&&this.reset();return e}}});"use strict"; +(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,e=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(e,1);this.parent=null},replaceWith:function(a){var e=this.parent.children,b=CKEDITOR.tools.indexOf(e,this),c=a.previous=this.previous,d=a.next=this.next;c&&(c.next=a);d&&(d.previous=a);e[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var e=a.parent.children, +b=CKEDITOR.tools.indexOf(e,a),c=a.next;e.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a);e.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var e=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&& +b.type==CKEDITOR.NODE_ELEMENT;){if(e(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}}; +CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,e){var b=this.value;if(!(b=a.onComment(e,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value=b;return true},writeHtml:function(a,e){e&&this.filter(e);a.comment(this.value)}});"use strict"; +(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,e){if(!(this.value=a.onText(e,this.value,this))){this.remove();return false}},writeHtml:function(a,e){e&&this.filter(e);a.text(this.value)}})})();"use strict"; +(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; +(function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var e=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),d={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= +function(f,h,n){function i(a){var b;if(z.length>0)for(var c=0;c<z.length;c++){var d=z[c],f=d.name,e=CKEDITOR.dtd[f],g=l.name&&CKEDITOR.dtd[l.name];if((!g||g[f])&&(!a||!e||e[a]||!CKEDITOR.dtd[a])){if(!b){k();b=1}d=d.clone();d.parent=l;l=d;z.splice(c,1);c--}else if(f==l.name){s(l,l.parent,1);c--}}}function k(){for(;A.length;)s(A.shift(),l)}function o(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))? +c.value=d:a.children.length=b-1}}function s(b,c,d){var c=c||l||p,f=l;if(b.previous===void 0){if(r(c,b)){l=c;g.onTagOpen(n,{});b.returnPoint=c=l}o(b);(!a(b)||b.children.length)&&c.add(b);b.name=="pre"&&(m=false);b.name=="textarea"&&(j=false)}if(b.returnPoint){l=b.returnPoint;delete b.returnPoint}else l=d?c:f}function r(a,b){if((a==p||a.name=="body")&&n&&(!a.name||CKEDITOR.dtd[a.name][n])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&& +!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function v(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var g=new CKEDITOR.htmlParser,p=h instanceof CKEDITOR.htmlParser.element?h:typeof h=="string"?new CKEDITOR.htmlParser.element(h):new CKEDITOR.htmlParser.fragment,z=[],A=[],l=p,j=p.name=="textarea",m=p.name=="pre";g.onTagOpen=function(d,f,h,p){f=new CKEDITOR.htmlParser.element(d,f);if(f.isUnknown&&h)f.isEmpty= +true;f.isOptionalClose=p;if(a(f))z.push(f);else{if(d=="pre")m=true;else{if(d=="br"&&m){l.add(new CKEDITOR.htmlParser.text("\n"));return}d=="textarea"&&(j=true)}if(d=="br")A.push(f);else{for(;;){p=(h=l.name)?CKEDITOR.dtd[h]||(l._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!f.isUnknown&&!l.isUnknown&&!p[d])if(l.isOptionalClose)g.onTagClose(h);else if(d in b&&h in b){h=l.children;(h=h[h.length-1])&&h.name=="li"||s(h=new CKEDITOR.htmlParser.element("li"),l);!f.returnPoint&&(f.returnPoint=l); +l=h}else if(d in CKEDITOR.dtd.$listItem&&!v(d,h))g.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(h in e&&!v(d,h)){!f.returnPoint&&(f.returnPoint=l);l=l.parent}else{h in CKEDITOR.dtd.$inline&&z.unshift(l);if(l.parent)s(l,l.parent,1);else{f.isOrphan=1;break}}else break}i(d);k();f.parent=l;f.isEmpty?s(f):l=f}}};g.onTagClose=function(a){for(var b=z.length-1;b>=0;b--)if(a==z[b].name){z.splice(b,1);return}for(var c=[],d=[],f=l;f!=p&&f.name!=a;){f._.isBlockLike||d.unshift(f);c.push(f);f=f.returnPoint||f.parent}if(f!= +p){for(b=0;b<c.length;b++){var e=c[b];s(e,e.parent)}l=f;f._.isBlockLike&&k();s(f,f.parent);if(f==l)l=l.parent;z=z.concat(d)}a=="body"&&(n=false)};g.onText=function(a){if((!l._.hasInlineStarted||A.length)&&!m&&!j){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=l.name,f=b?CKEDITOR.dtd[b]||(l._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!j&&!f["#"]&&b in e){g.onTagOpen(d[b]||"");g.onText(a)}else{k();i();!m&&!j&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a); +if(r(l,a))this.onTagOpen(n,{},0,1);l.add(a)}};g.onCDATA=function(a){l.add(new CKEDITOR.htmlParser.cdata(a))};g.onComment=function(a){k();i();l.add(new CKEDITOR.htmlParser.comment(a))};g.parse(f);for(k();l!=p;)s(l,l.parent,1);o(p);return p};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length=== +0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a, +c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var d=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(d,this);b&&this.filterChildren(b,false,d);b=0;c=this.children;for(d=c.length;b<d;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var d=a(this);if(d!==false)for(var c=this.children,e=0;e<c.length;e++){d=c[e];d.type==CKEDITOR.NODE_ELEMENT?d.forEach(a,b):(!b||d.type==b)&&a(d)}},getFilterContext:function(a){return a|| +{}}}})();"use strict"; +(function(){function a(){this.rules=[]}function e(b,c,d,f){var e,n;for(e in c){(n=b[e])||(n=b[e]=new a);n.add(c[e],d,f)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var d;if(typeof c=="number")d=c;else if(c&&"priority"in +c)d=c.priority;typeof d!="number"&&(d=10);typeof c!="object"&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,d,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,d,c);a.elements&&e(this.elementsRules,a.elements,d,c);a.attributes&&e(this.attributesRules,a.attributes,d,c);a.text&&this.textRules.add(a.text,d,c);a.comment&&this.commentRules.add(a.comment,d,c);a.root&&this.rootRules.add(a.root,d,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a, +c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,d){return this.textRules.exec(a,c,d)},onComment:function(a,c,d){return this.commentRules.exec(a,c,d)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var d=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],f,e=0;e<3;e++)if(f=d[e]){f=f.exec(a,c,this);if(f===false)return null;if(f&&f!=c)return this.onNode(a,f);if(c.parent&&!c.name)break}return c}, +onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,f){return(d=this.attributesRules[d])?d.exec(a,f,c,this):f}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a, +c,d){for(var f=[this.findIndex(c),0],e=0,n=a.length;e<n;e++)f.push({value:a[e],priority:c,options:d});this.rules.splice.apply(this.rules,f)},findIndex:function(a){for(var c=this.rules,d=c.length-1;d>=0&&a<c[d].priority;)d--;return d+1},exec:function(a,c){var d=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,f=Array.prototype.slice.call(arguments,1),e=this.rules,n=e.length,i,k,o,s;for(s=0;s<n;s++){if(d){i=c.type;k=c.name}o=e[s];if(!(a.nonEditable&&!o.options.applyToAll|| +a.nestedEditable&&o.options.excludeNestedEditable)){o=o.value.apply(null,f);if(o===false||d&&o&&(o.name!=k||o.type!=i))return o;o!=void 0&&(f[0]=c=o)}}return c},execOnName:function(a,c){for(var d=0,f=this.rules,e=f.length,n;c&&d<e;d++){n=f[d];!(a.nonEditable&&!n.options.applyToAll||a.nestedEditable&&n.options.excludeNestedEditable)&&(c=c.replace(n.value[0],n.value[1]))}return c}}})(); +(function(){function a(a,e){function g(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function j(a,d){return function(e){if(e.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var j=[],l=b(e),m,w;if(l)for(t(l,1)&&j.push(l);l;){if(f(l)&&(m=c(l))&&t(m))if((w=c(m))&&!f(w))j.push(m);else{g(p).insertAfter(m);m.remove()}l=l.previous}for(l=0;l<j.length;l++)j[l].remove();if(j=typeof d=="function"?d(e)!==false:d)if(!p&&!CKEDITOR.env.needsBrFiller&& +e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)j=false;else if(!p&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||e.name in CKEDITOR.dtd.tr||e.name in CKEDITOR.dtd.$listItem))j=false;else{j=b(e);j=!j||e.name=="form"&&j.name=="input"}j&&e.add(g(a))}}}function t(a,b){if((!p||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(z))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0, +c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&p&&(!b||a.parent.name in i))return true;if(!p)if((c=a.previous)&&c.name=="br"||!c||f(c))return true}return false}var q={elements:{}},p=e=="html",i=CKEDITOR.tools.extend({},m),u;for(u in i)"#"in l[u]||delete i[u];for(u in i)q.elements[u]=j(p,a.config.fillEmptyBlocks!==false);q.root=j(p);q.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=b.attributes;if("data-cke-bogus"in e||"data-cke-eol"in +e)delete e["data-cke-bogus"];else{for(e=b.next;e&&d(e);)e=e.next;var j=c(b);!e&&f(b.parent)?h(b.parent,g(a)):f(e)&&(j&&!f(j))&&g(a).insertBefore(e)}}}}(p);return q}function e(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&d(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&d(a);)a=a.previous;return a}function d(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&& +a.attributes["data-cke-bookmark"]}function f(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in m||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function h(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next=b;b.previous=c}}function n(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function i(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}} +function k(a){return a.replace(H,function(a,b,c){return"<"+b+c.replace(G,function(a,b){return C.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function o(a,b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+v(c).replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function s(a){return a.replace(t,function(a,b){return decodeURIComponent(b)})}function r(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, +function(a){return"<\!--"+A+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function v(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function g(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function p(a,b){for(var c=[],d=b.config.protectedSource,f=b._.dataStore||(b._.dataStore= +{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),j=0;j<d.length;j++)a=a.replace(d[j],function(a){a=a.replace(e,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(e,function(a,b,d){return"<\!--"+A+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g,"%2D%2D")+ +"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(a,b){f[f.id]=decodeURIComponent(b);return"{cke_protected_"+f.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,f){return"<"+c+d+">"+g(v(f),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,f=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter= +d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(u);c.addRules(P,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true});d.addRules(q);d.addRules(L,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,c=p(c,b),c=o(c,F),c=k(c),c=o(c,J),c=c.replace(x,"$1cke:$2"),c=c.replace(B,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, +"$1data-cke-"+CKEDITOR.rnd+"-$2"),d=a.context||b.editable().getName(),f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";f=1}d=b.document.createElement(d);d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(y,"$1$2");c=s(c);c=v(c);a.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,a.fixForBody===false?false:e(a.enterMode,b.config.autoParagraph))},null,null, +5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue=r(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i, +""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,e(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=f.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=v(c);c=g(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype= +{toHtml:function(a,b,c,d){var f=this.editor,e,g,j;if(b&&typeof b=="object"){e=b.context;c=b.fixForBody;d=b.dontFilter;g=b.filter;j=b.enterMode}else e=b;!e&&e!==null&&(e=f.editable().getName());return f.fire("toHtml",{dataValue:a,context:e,fixForBody:c,dontFilter:d,filter:g||f.filter,enterMode:j||f.enterMode}).dataValue},toDataFormat:function(a,b){var c,d,f;if(b){c=b.context;d=b.filter;f=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a, +filter:d||this.editor.filter,context:c,enterMode:f||this.editor.enterMode}).dataValue}};var z=/(?:&nbsp;|\xa0)$/,A="{cke_protected}",l=CKEDITOR.dtd,j=["caption","colgroup","col","thead","tfoot","tbody"],m=CKEDITOR.tools.extend({},l.$blockLimit,l.$block),u={elements:{input:n,textarea:n}},P={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},q={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width= +c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},L={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,f=0;f<c.length;f++){d="data-cke-saved-"+c[f];d in b&&delete b[c[f]]}}return a},table:function(a){a.children.slice(0).sort(function(a, +b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(j,a.name);d=CKEDITOR.tools.indexOf(j,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex():-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable}, +style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:i,textarea:i},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)L.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})}; +var H=/<(a|area|img|input|source)\b([^>]*)>/gi,G=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,C=/^(href|src|name)$/i,J=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,F=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,t=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,x=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,y=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,B=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; +CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,d){c=="font-family"&&(d=d.replace(/["']/g,""));e[c.toLowerCase()]=d});return{rules:e,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c; +for(c in e)e[c]&&a.push(c,":",e[c],";");return a.join("")}}}; +(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var e=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var f=this,e,n,b=f.getFilterContext(b);if(b.off)return true; +if(!f.parent)a.onRoot(b,f);for(;;){e=f.name;if(!(n=a.onElementName(b,e))){this.remove();return false}f.name=n;if(!(f=a.onElement(b,f))){this.remove();return false}if(f!==this){this.replaceWith(f);return false}if(f.name==e)break;if(f.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(f);return false}if(!f.name){this.replaceWithChildren();return false}}e=f.attributes;var i,k;for(i in e){k=i;for(n=e[i];;)if(k=a.onAttributeName(b,i))if(k!=i){delete e[i];i=k}else break;else{delete e[i];break}k&&((n=a.onAttribute(b, +f,k,n))===false?delete e[k]:e[k]=n)}f.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var f=this.name,h=[],n=this.attributes,i,k;a.openTag(f,n);for(i in n)h.push([i,n[i]]);a.sortAttributes&&h.sort(e);i=0;for(k=h.length;i<k;i++){n=h[i];a.attribute(n[0],n[1])}a.openTagClose(f,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(f)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a= +this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var d=0,f=this.children.length;d<f;++d)if(b(this.children[d]))return this.children[d];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0, +f=a.length;b<f;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),f=this.clone(),e=0;e<b.length;++e)b[e].parent=f;f.children=b;if(b[0])b[0].previous=null;if(a>0)this.children[a-1].next=null;this.parent.add(f,this.getIndex()+1);return f},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+ +a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable== +"false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),f=0;f<b.length;f=f+2)a[b[f]]=b[f+1];return a}},true)})(); +(function(){var a={},e=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,d=/\r/g;CKEDITOR.template=function(f){if(a[f])this.output=a[f];else{var h=f.replace(b,"\\$1").replace(c,"\\n").replace(d,"\\r").replace(e,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[f]=Function("data","buffer","return buffer?buffer.push('"+h+"'):['"+h+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document); +CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!=a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]}; +(function(){var a={};CKEDITOR.addTemplate=function(e,b){var c=a[e];if(c)return c;c={name:e,source:b};CKEDITOR.fire("template",c);return a[e]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(e){return a[e]}})();(function(){var a=[];CKEDITOR.addCss=function(e){a.push(e)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2; +CKEDITOR.TRISTATE_DISABLED=0; +(function(){CKEDITOR.inline=function(a,e){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(e,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;if(c){b.setData(c.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+c.getValue()+"</div>",CKEDITOR.document); +a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element});return b}; +CKEDITOR.inlineAll=function(){var a,e,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),d=0,f=c.count();d<f;d++){a=c.getItem(d);if(a.getAttribute("contenteditable")=="true"){e={element:a,config:{}};CKEDITOR.fire("inline",e)!==false&&CKEDITOR.inline(a,e.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor"; +(function(){function a(a,c,h,n){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var i=new CKEDITOR.editor(c,a,n);if(n==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden");i._.required=a.hasAttribute("required");a.removeAttribute("required")}h&&i.setData(h,null,true);i.on("loaded",function(){b(i);n==CKEDITOR.ELEMENT_MODE_REPLACE&&(i.config.autoUpdateElement&& +a.$.form)&&i._attachToForm();i.setMode(i.config.startupMode,function(){i.resetDirty();i.status="ready";i.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,i)})});i.on("destroy",e);return i}function e(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,e=a.element,n=a.elementMode, +i=a.fire("uiSpace",{space:"top",html:""}).html,k=a.fire("uiSpace",{space:"bottom",html:""}).html;c||(c=CKEDITOR.addTemplate("maincontainer",'<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>')); +b=CKEDITOR.dom.element.createFromHtml(c.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:[a.lang.editor,a.name].join(", "),topHtml:i?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+i+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:k?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+k+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(n==CKEDITOR.ELEMENT_MODE_REPLACE){e.hide(); +b.insertAfter(e)}else e.append(b);a.container=b;i&&a.ui.space("top").unselectable();k&&a.ui.space("bottom").unselectable();e=a.config.width;n=a.config.height;e&&b.setStyle("width",CKEDITOR.tools.cssLength(e));n&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(n));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,c){return a(b,c,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,c,e){return a(b, +c,e,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var c=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){c={};if(arguments[0](e,c)===false)continue}this.replace(e,c)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode= +function(a,b){var c=this,e=this._.modes;if(!(a==c.mode||!e||!e[a])){c.fire("beforeSetMode",a);if(c.mode){var i=c.checkDirty(),e=c._.previousModeData,k,o=0;c.fire("beforeModeUnload");c.editable(0);c._.previousMode=c.mode;c._.previousModeData=k=c.getData(1);if(c.mode=="source"&&e==k){c.fire("lockSnapshot",{forceUpdate:true});o=1}c.ui.space("contents").setHtml("");c.mode=""}else c._.previousModeData=c.getData(1);this._.modes[a](function(){c.mode=a;i!==void 0&&!i&&c.resetDirty();o?c.fire("unlockSnapshot"): +a=="wysiwyg"&&c.fire("saveSnapshot");setTimeout(function(){c.fire("mode");b&&b.call(c)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,c,e){var i=this.container,k=this.ui.space("contents"),o=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,e=e?i.getChild(1):i;e.setSize("width",a,true);o&&(o.style.width="1%");k.setStyle("height",Math.max(b-(c?0:(e.$.offsetHeight||0)-(k.$.clientHeight||0)),0)+"px");o&&(o.style.width="100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable= +function(a){return a?this.ui.space("contents"):this.container};var c;CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg"; +(function(){function a(a){var b=a.editor,d=a.data.path,f=d.blockLimit,l=a.data.selection,j=l.getRanges()[0],m;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(l=e(l,d)){l.appendBogus();m=CKEDITOR.env.ie}if(b.config.autoParagraph!==false&&b.activeEnterMode!=CKEDITOR.ENTER_BR&&b.editable().equals(f)&&!d.block&&j.collapsed&&!j.getCommonAncestor().isReadOnly()){d=j.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);f=new CKEDITOR.dom.walker(d);f.guard=function(a){return!c(a)||a.type== +CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!f.checkForward()||d.checkStartOfBlock()&&d.checkEndOfBlock()){b=j.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(c))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/))&&b.remove();m=1;a.cancel()}}m&&j.select()}function e(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(d&&d.isBlockBoundary()&&(!e||!(e.type==CKEDITOR.NODE_ELEMENT&& +e.isBlockBoundary()))&&!d.is("pre")&&!d.getBogus())return d}function b(a){var b=a.data.getTarget();if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function c(a){return o(a)&&s(a)}function d(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function f(a){var b,d=a.getRanges()[0],e=a.root,f={table:1,ul:1,ol:1,dl:1};if(d.startPath().contains(f)){var a= +function(a){return function(d,e){e&&(d.type==CKEDITOR.NODE_ELEMENT&&d.is(f))&&(b=d);if(!e&&c(d)&&(!a||!i(d)))return false}},j=d.clone();j.collapse(1);j.setStartAt(e,CKEDITOR.POSITION_AFTER_START);e=new CKEDITOR.dom.walker(j);e.guard=a();e.checkBackward();if(b){j=d.clone();j.collapse();j.setEndAt(b,CKEDITOR.POSITION_AFTER_END);e=new CKEDITOR.dom.walker(j);e.guard=a(true);b=false;e.checkForward();return b}}return null}function h(a){a.editor.focus();a.editor.fire("saveSnapshot")}function n(a){var b= +a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)? +"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a=a=="focus"?"focusin":"focusout";b=d(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a,b,c,d,e,f){!this._.listeners&&(this._.listeners=[]); +var m=Array.prototype.slice.call(arguments,1),m=a.on.apply(a,m);this._.listeners.push(m);return m},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c,b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}}, +changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){h(this);r(this,b||"html",a)},insertText:function(a){h(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre",true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"&nbsp;&nbsp; &nbsp;"), +c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var e=/\n{2}/g;if(e.test(a))var f="<"+c+">",m="</"+c+">",a=f+a.replace(e,function(){return m+f})+m}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g,"&nbsp;");a=a.replace(/(>|\s) /g,function(a,b){return b+"&nbsp;"}).replace(/ (?=<)/g,"&nbsp;");r(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a, +b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&v(b);var m,h;if(f)for(;(m=b.getCommonAncestor(0,1))&&(h=CKEDITOR.dtd[m.getName()])&&(!h||!h[e]);)if(m.getName()in CKEDITOR.dtd.span)b.splitElement(m);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(m);b.collapse(true);m.remove()}else b.splitBlock(d== +CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){h(this);var b=this.editor,d=b.activeEnterMode,b=b.getSelection(),e=b.getRanges()[0],f=a.getName(),f=CKEDITOR.dtd.$block[f];if(this.insertElementIntoRange(a,e)){e.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(f)if((f=a.getNext(function(a){return c(a)&&!i(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block))f.getDtd()["#"]?e.moveToElementEditStart(f):e.moveToElementEditEnd(a); +else if(!f&&d!=CKEDITOR.ENTER_BR){f=e.fixBlock(true,d==CKEDITOR.ENTER_DIV?"div":"p");e.moveToElementEditStart(f)}}b.selectRanges([e]);n(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable"); +this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(k,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData", +function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)}, +this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus= +true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var d=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var e=a.config.contentsLangDirection;this.getDirection(1)!=e&&this.changeAttr("dir",e);var h=CKEDITOR.getCss();if(h){e= +d.getHead();if(!e.getCustomData("stylesheet")){h=d.appendStyleText(h);h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement);e.setCustomData("stylesheet",h);h.data("cke-temp",1)}}e=d.getCustomData("stylesheet_ref")||0;d.setCustomData("stylesheet_ref",e+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()}); +var l={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),d;if(c in l){var b=a.getSelection(),e,q=b.getRanges()[0],h=q.startPath(),i,k,p,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(e=b.getSelectedElement())||(e=f(b))){a.fire("saveSnapshot");q.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);e.remove();q.select();a.fire("saveSnapshot");d=1}else if(q.collapsed)if((i=h.block)&&(p=i[c?"getPrevious":"getNext"](o))&&p.type==CKEDITOR.NODE_ELEMENT&& +p.is("table")&&q[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");q[c?"checkEndOfBlock":"checkStartOfBlock"]()&&i.remove();q["moveToElementEdit"+(c?"End":"Start")](p);q.select();a.fire("saveSnapshot");d=1}else if(h.blockLimit&&h.blockLimit.is("td")&&(k=h.blockLimit.getAscendant("table"))&&q.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END)&&(p=k[c?"getPrevious":"getNext"](o))){a.fire("saveSnapshot");q["moveToElementEdit"+(c?"End":"Start")](p);q.checkStartOfBlock()&&q.checkEndOfBlock()? +p.remove():q.select();a.fire("saveSnapshot");d=1}else if((k=h.contains(["td","th","caption"]))&&q.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END))d=1}return!d});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in l&&!this.getFirst(c)){this.appendBogus();b=a.createRange();b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false; +b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(k, +"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){b=b.data.domEvent.getKey();if(b in l){var b=b==8,c=a.getSelection(),d=c.getRanges()[0],e=d.startPath(),f=e.block;if(d.collapsed&& +f&&d[b?"checkStartOfBlock":"checkEndOfBlock"]()&&d.moveToClosestEditablePosition(f,!b)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var h=d.startContainer.getChild(d.startOffset-(b?1:0));if(h&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("hr")){a.fire("saveSnapshot");h.remove();a.fire("saveSnapshot");return false}}if((d=d.startPath().block)&&(!d||!d.contains(f))){a.fire("saveSnapshot");for(var i=f.getCommonAncestor(d),k=b?f:d,h=k;(k=k.getParent())&&!i.equals(k)&&k.getChildCount()==1;)h=k; +var p;(p=(b?d:f).getBogus())&&p.remove();p=c.createBookmarks();(b?f:d).moveChildren(b?d:f,false);e.lastElement.mergeSiblings();h.remove();c.selectBookmarks(p);a.fire("saveSnapshot");return false}}}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c= +a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var i=CKEDITOR.dom.walker.bogus(),k=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi, +o=CKEDITOR.dom.walker.whitespaces(true),s=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty(); +c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var d=CKEDITOR.tools.getNextId(),e=CKEDITOR.dom.element.createFromHtml('<span id="'+d+'" class="cke_voice_label">'+this.lang.common.editorHelp+ +"</span>");c.append(e);a.changeAttr("aria-describedby",d)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var r=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,j,l,t=[],q=d.range.startContainer;e=d.range.startPath();for(var q=m[q.getName()],h=0,k=c.getChildren(),i=k.count(),u=-1,o=-1,n=0,s=e.contains(m.$list);h<i;++h){e=k.getItem(h);if(a(e)){j=e.getName();if(s&&j in CKEDITOR.dtd.$list)t= +t.concat(b(e,d));else{l=!!q[j];if(j=="br"&&e.data("cke-eol")&&(!h||h==i-1)){n=(f=h?t[h-1].node:k.getItem(h+1))&&(!a(f)||!f.is("br"));f=f&&a(f)&&m.$block[f.getName()]}u==-1&&!l&&(u=h);l||(o=h);t.push({isElement:1,isLineBreak:n,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:j,allowed:l});f=n=0}}else t.push({isElement:0,node:e,allowed:1})}if(u>-1)t[u].firstNotAllowed=1;if(o>-1)t[o].lastNotAllowed=1;return t}function d(b,c){var e=[],f=b.getChildren(),j=f.count(),l,t=0,q=m[c],h=!b.is(m.$inline)|| +b.is("br");for(h&&e.push(" ");t<j;t++){l=f.getItem(t);a(l)&&!l.is(q)?e=e.concat(d(l,c)):e.push(l)}h&&e.push(" ");return e}function e(b){return b&&a(b)&&(b.is(m.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var j=b.clone(),m,t;j.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((m=(new CKEDITOR.dom.walker(j)).next())&&a(m)&&h[m.getName()]&&(t=m.getPrevious())&&a(t)&&!t.getParent().equals(b.startContainer)&&d.contains(t)&&e.contains(m)&&m.isIdentical(t)){m.moveChildren(t);m.remove(); +f(b,c,d,e)}}function j(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);if(f&&d(f,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var m=CKEDITOR.dtd,h={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},k={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},q=CKEDITOR.tools.extend({},m.$inline);delete q.br;return function(h, +i,u){var o=h.editor;h.getDocument();var s=o.getSelection().getRanges()[0],r=false;if(i=="unfiltered_html"){i="html";r=true}if(!s.checkReadOnly()){var t=(new CKEDITOR.dom.elementPath(s.startContainer,s.root)).blockLimit||s.root,i={type:i,dontFilter:r,editable:h,editor:o,range:s,blockLimit:t,mergeCandidates:[],zombies:[]},o=i.range,r=i.mergeCandidates,x,y,B,w;if(i.type=="text"&&o.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){x=CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",o.document);o.insertNode(x); +o.setStartAfter(x)}y=new CKEDITOR.dom.elementPath(o.startContainer);i.endPath=B=new CKEDITOR.dom.elementPath(o.endContainer);if(!o.collapsed){var t=B.block||B.blockLimit,N=o.getCommonAncestor();t&&(!t.equals(N)&&!t.contains(N)&&o.checkEndOfBlock())&&i.zombies.push(t);o.deleteContents()}for(;(w=a(o.startContainer)&&o.startContainer.getChild(o.startOffset-1))&&a(w)&&w.isBlockBoundary()&&y.contains(w);)o.moveToPosition(w,CKEDITOR.POSITION_BEFORE_END);f(o,i.blockLimit,y,B);if(x){o.setEndBefore(x);o.collapse(); +x.remove()}x=o.startPath();if(t=x.contains(e,false,1)){o.splitElement(t);i.inlineStylesRoot=t;i.inlineStylesPeak=x.lastElement}x=o.createBookmark();(t=x.startNode.getPrevious(c))&&a(t)&&e(t)&&r.push(t);(t=x.startNode.getNext(c))&&a(t)&&e(t)&&r.push(t);for(t=x.startNode;(t=t.getParent())&&e(t);)r.push(t);o.moveToBookmark(x);if(x=u){x=i.range;if(i.type=="text"&&i.inlineStylesRoot){w=i.inlineStylesPeak;o=w.getDocument().createText("{cke-peak}");for(r=i.inlineStylesRoot.getParent();!w.equals(r);){o=o.appendTo(w.clone()); +w=w.getParent()}u=o.getOuterHtml().split("{cke-peak}").join(u)}w=i.blockLimit.getName();if(/^\s+|\s+$/.test(u)&&"span"in CKEDITOR.dtd[w])var M='<span data-cke-marker="1">&nbsp;</span>',u=M+u+M;u=i.editor.dataProcessor.toHtml(u,{context:null,fixForBody:false,dontFilter:i.dontFilter,filter:i.editor.activeFilter,enterMode:i.editor.activeEnterMode});w=x.document.createElement("body");w.setHtml(u);if(M){w.getFirst().remove();w.getLast().remove()}if((M=x.startPath().block)&&!(M.getChildCount()==1&&M.getBogus()))a:{var D; +if(w.getChildCount()==1&&a(D=w.getFirst())&&D.is(k)){M=D.getElementsByTag("*");x=0;for(r=M.count();x<r;x++){o=M.getItem(x);if(!o.is(q))break a}D.moveChildren(D.getParent(1));D.remove()}}i.dataWrapper=w;x=u}if(x){D=i.range;var M=D.document,v,u=i.blockLimit;x=0;var I;w=[];var E,Q,r=o=0,K,S;y=D.startContainer;var t=i.endPath.elements[0],T;B=t.getPosition(y);N=!!t.getCommonAncestor(y)&&B!=CKEDITOR.POSITION_IDENTICAL&&!(B&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);y=b(i.dataWrapper,i); +for(j(y,D);x<y.length;x++){B=y[x];if(v=B.isLineBreak){v=D;K=u;var O=void 0,W=void 0;if(B.hasBlockSibling)v=1;else{O=v.startContainer.getAscendant(m.$block,1);if(!O||!O.is({div:1,p:1}))v=0;else{W=O.getPosition(K);if(W==CKEDITOR.POSITION_IDENTICAL||W==CKEDITOR.POSITION_CONTAINS)v=0;else{K=v.splitElement(O);v.moveToPosition(K,CKEDITOR.POSITION_AFTER_START);v=1}}}}if(v)r=x>0;else{v=D.startPath();if(!B.isBlock&&i.editor.config.autoParagraph!==false&&(i.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&i.editor.editable().equals(v.blockLimit)&& +!v.block)&&(Q=i.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&i.editor.config.autoParagraph!==false?i.editor.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false)){Q=M.createElement(Q);Q.appendBogus();D.insertNode(Q);CKEDITOR.env.needsBrFiller&&(I=Q.getBogus())&&I.remove();D.moveToPosition(Q,CKEDITOR.POSITION_BEFORE_END)}if((v=D.startPath().block)&&!v.equals(E)){if(I=v.getBogus()){I.remove();w.push(v)}E=v}B.firstNotAllowed&&(o=1);if(o&&B.isElement){v=D.startContainer;for(K=null;v&&!m[v.getName()][B.name];){if(v.equals(u)){v= +null;break}K=v;v=v.getParent()}if(v){if(K){S=D.splitElement(K);i.zombies.push(S);i.zombies.push(K)}}else{K=u.getName();T=!x;v=x==y.length-1;K=d(B.node,K);for(var O=[],W=K.length,X=0,Z=void 0,$=0,aa=-1;X<W;X++){Z=K[X];if(Z==" "){if(!$&&(!T||X)){O.push(new CKEDITOR.dom.text(" "));aa=O.length}$=1}else{O.push(Z);$=0}}v&&aa==O.length&&O.pop();T=O}}if(T){for(;v=T.pop();)D.insertNode(v);T=0}else D.insertNode(B.node);if(B.lastNotAllowed&&x<y.length-1){(S=N?t:S)&&D.setEndAt(S,CKEDITOR.POSITION_AFTER_START); +o=0}D.collapse()}}i.dontMoveCaret=r;i.bogusNeededBlocks=w}I=i.range;var U;S=i.bogusNeededBlocks;for(T=I.createBookmark();E=i.zombies.pop();)if(E.getParent()){Q=I.clone();Q.moveToElementEditStart(E);Q.removeEmptyBlocksAtEnd()}if(S)for(;E=S.pop();)CKEDITOR.env.needsBrFiller?E.appendBogus():E.append(I.document.createText(" "));for(;E=i.mergeCandidates.pop();)E.mergeSiblings();I.moveToBookmark(T);if(!i.dontMoveCaret){for(E=a(I.startContainer)&&I.startContainer.getChild(I.startOffset-1);E&&a(E)&&!E.is(m.$empty);){if(E.isBlockBoundary())I.moveToPosition(E, +CKEDITOR.POSITION_BEFORE_END);else{if(e(E)&&E.getHtml().match(/(\s|&nbsp;)$/g)){U=null;break}U=I.clone();U.moveToPosition(E,CKEDITOR.POSITION_BEFORE_END)}E=E.getLast(c)}U&&I.moveToRange(U)}s.select();n(h)}}}(),v=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c); +a.append(c,d);return c}function c(a){var b=a.count(),d;for(b;b-- >0;){d=a.getItem(b);if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),m=false;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();if(!f){f=d.clone();f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);f=a(f).lastForward();m=true}f|| +(f=e);if(f.is("table")){d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);d.collapse(true);f.remove()}else{f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",m));f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",m));(e=f.getBogus())&&e.remove();d.moveToPosition(f,m?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()})(); +(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function e(){r=true;if(!s){b.call(this);s=CKEDITOR.tools.setTimeout(b, +200,this)}}function b(){s=null;if(r){CKEDITOR.tools.setTimeout(a,0,this);r=false}}function c(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var c=a.startContainer,d=a.getPreviousNode(v,null,c),e=a.getNextNode(v,null,c);return b(d)||b(e,1)||!d&&!e&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function d(a){return a.getCustomData("cke-fillingChar")} +function f(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&&e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=[e.anchorOffset,e.focusOffset];f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0]--;f&&d[1]--;var g;f=e;if(!f.isCollapsed){g=f.getRangeAt(0);g.setStart(f.anchorNode,f.anchorOffset);g.setEnd(f.focusNode,f.focusOffset);g=g.collapsed}g&&d.unshift(d.pop())}}c.setText(h(c.getText())); +if(d){c=e.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);e.removeAllRanges();e.addRange(c)}}}function h(a){return a.replace(/\u200B( )?/g,function(a){return a[1]?" ":""})}function n(a,b,c){var d=a.on("focus",function(a){a.cancel()},null,null,-100);if(CKEDITOR.env.ie)var e=a.getDocument().on("selectionchange",function(a){a.cancel()},null,null,-100);else{var f=new CKEDITOR.dom.range(a);f.moveToElementEditStart(a);var g=a.getDocument().$.createRange();g.setStart(f.startContainer.$, +f.startOffset);g.collapse(1);b.removeAllRanges();b.addRange(g)}c&&a.focus();d.removeListener();e&&e.removeListener()}function i(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'">&nbsp;</div>',a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START); +d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function k(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];if(e.length==1&&f.collapsed)if((d=f[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}} +function o(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d;){if((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;e&&d.getAttribute("contentEditable")=="false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;e=c.endContainer;var f=c.startOffset,g=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d)); +e&&e.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(e):h.setEndBefore(e));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS)){e.setStartAfter(d);e.collapsed||a.splice(b+1,0,e)}return true}return false};d.next()}}return a}var s,r,v=CKEDITOR.dom.walker.invisible(1),g=function(){function a(b){return function(a){var c=a.editor.createRange(); +c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!(e=d.moveToClosestEditablePosition(b.selected,a)))e=d.moveToClosestEditablePosition(b.selected,!a);e&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();if(!e){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c, +38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=d.getSelection();a&&a.removeAllRanges()}var d=b.editor;d.on("contentDom",function(){var b=d.document,c=CKEDITOR.document,g=d.editable(),j=b.getBody(),l=b.getDocumentElement(),h=g.isInline(),i,o;CKEDITOR.env.gecko&&g.attachListener(g,"focus",function(a){a.removeListener();if(i!==0)if((a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$){a=d.createRange();a.moveToElementEditStart(g);a.select()}}, +null,null,-2);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){i&&CKEDITOR.env.webkit&&(i=d._.previousActive&&d._.previousActive.equals(b.getActive()));d.unlockSelection(i);i=0},null,null,-1);g.attachListener(g,"mousedown",function(){i=0});if(CKEDITOR.env.ie||h){var n=function(){o=new CKEDITOR.dom.selection(d.getSelection());o.lock()};p?g.attachListener(g,"beforedeactivate",n,null,null,-1):g.attachListener(d,"selectionCheck",n,null,null,-1);g.attachListener(g,CKEDITOR.env.webkit? +"DOMFocusOut":"blur",function(){d.lockSelection(o);i=1},null,null,-1);g.attachListener(g,"mousedown",function(){i=0})}if(CKEDITOR.env.ie&&!h){var t;g.attachListener(g,"mousedown",function(a){if(a.data.$.button==2){a=d.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)t=d.window.getScrollPosition()}});g.attachListener(g,"mouseup",function(a){if(a.data.$.button==2&&t){d.document.$.documentElement.scrollLeft=t.x;d.document.$.documentElement.scrollTop=t.y}t=null});if(b.$.compatMode!= +"BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)l.on("mousedown",function(a){function b(a){a=a.data.$;if(e){var c=j.$.createTextRange();try{c.moveToPoint(a.x,a.y)}catch(d){}e.setEndPoint(g.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);e.select()}}function d(){l.removeListener("mousemove",b);c.removeListener("mouseup",d);l.removeListener("mouseup",d);e.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<l.$.clientHeight&&a.$.x<l.$.clientWidth){var e=j.$.createTextRange(); +try{e.moveToPoint(a.$.x,a.$.y)}catch(f){}var g=e.duplicate();l.on("mousemove",b);c.on("mouseup",d);l.on("mouseup",d)}});if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11){l.on("mousedown",function(a){if(a.data.getTarget().is("html")){c.on("mouseup",x);l.on("mouseup",x)}});var x=function(){c.removeListener("mouseup",x);l.removeListener("mouseup",x);var a=CKEDITOR.document.$.selection,d=a.createRange();a.type!="None"&&d.parentElement().ownerDocument==b.$&&d.select()}}}}g.attachListener(g,"selectionchange", +a,d);g.attachListener(g,"keyup",e,d);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(h&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var y;g.attachListener(g,"mousedown",function(){y=1});g.attachListener(b.getDocumentElement(),"mouseup",function(){y&&e.call(d);y=0})}else g.attachListener(CKEDITOR.env.ie?g:b.getDocumentElement(),"mouseup",e,d);CKEDITOR.env.webkit&&g.attachListener(b,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:f(g)}}, +null,null,-1);g.attachListener(g,"keydown",k(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&c()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy",c,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=d.editable().getLast(function(a){return a.type==CKEDITOR.NODE_ELEMENT});a&&a.hasAttribute("data-cke-hidden-sel")&& +a.remove()},null,null,100);d.on("key",function(a){if(d.mode=="wysiwyg"){var b=d.getSelection();if(b.isFake){var c=g[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){var b=a.editor;if(CKEDITOR.env.webkit){b.on("selectionChange",function(){var a=b.editable(),c=d(a);c&&(c.getCustomData("ready")?f(a):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){f(b.editable())},null,null,-1);var c, +e,a=function(){var a=b.editable();if(a)if(a=d(a)){var f=b.document.$.defaultView.getSelection();f.type=="Caret"&&f.anchorNode==a.$&&(e=1);c=a.getText();a.setText(h(c))}},g=function(){var a=b.editable();if(a)if(a=d(a)){a.setText(c);if(e){b.document.$.defaultView.getSelection().setPosition(a.$,a.getLength());e=0}}};b.on("beforeUndoImage",a);b.on("afterUndoImage",g);b.on("beforeGetData",a,null,null,0);b.on("getData",g)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:e).call(this)};CKEDITOR.editor.prototype.getSelection= +function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection;return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection; +return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var p= +typeof window.getSelection!="function",z=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b=a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:z++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=a=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}b=p?this.document.$.selection:this.document.getWindow().$.getSelection(); +if(CKEDITOR.env.webkit)(b.type=="None"&&this.document.getActive().equals(a)||b.type=="Caret"&&b.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&n(a,b);else if(CKEDITOR.env.gecko)b&&(this.document.getActive().equals(a)&&b.anchorNode&&b.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&n(a,b,true);else if(CKEDITOR.env.ie){var d;try{d=this.document.getActive()}catch(e){}if(p)b.type=="None"&&(d&&d.equals(this.document.getDocumentElement()))&&n(a,null,true);else{(b=b&&b.anchorNode)&&(b=new CKEDITOR.dom.node(b)); +d&&(d.equals(this.document.getDocumentElement())&&b&&(a.equals(b)||a.contains(b)))&&n(a,null,true)}}d=this.getNative();var f,g;if(d)if(d.getRangeAt)f=(g=d.rangeCount&&d.getRangeAt(0))&&new CKEDITOR.dom.node(g.commonAncestorContainer);else{try{g=d.createRange()}catch(h){}f=g&&CKEDITOR.dom.element.get(g.item&&g.item(0)||g.parentElement())}if(!f||!(f.type==CKEDITOR.NODE_ELEMENT||f.type==CKEDITOR.NODE_TEXT)||!this.root.equals(f)&&!this.root.contains(f)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement= +null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var A={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=p?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:p?function(){var a= +this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&& +d.nodeType==1&&c.endOffset-c.startOffset==1&&A[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=p?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,h=b.duplicate(),i=0,l=e.length-1,t=-1,m,k;i<=l;){t=Math.floor((i+l)/2);f=e[t];h.moveToElementText(f);m=h.compareEndPoints("StartToStart", +b);if(m>0)l=t-1;else if(m<0)i=t+1;else return{container:d,offset:a(f)}}if(t==-1||t==e.length-1&&m<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h){f=e[e.length-1];return f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length}}for(d=e.length;h>0&&d>0;){g=e[--d];if(g.nodeType==CKEDITOR.NODE_TEXT){k=g;h=h-g.nodeValue.length}}return{container:k,offset:-h}}h.collapse(m>0?true:false);h.setEndPoint(m> +0?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:d,offset:a(f)+(m>0?0:1)};for(;h>0;)try{g=f[m>0?"previousSibling":"nextSibling"];if(g.nodeType==CKEDITOR.NODE_TEXT){h=h-g.nodeValue.length;k=g}f=g}catch(o){return{container:d,offset:a(f)}}return{container:k,offset:m>0?-h:k.nodeValue.length+h}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root); +d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=c.item(e),g=f.parentNode,j=0,a=new CKEDITOR.dom.range(this.root);j<g.childNodes.length&&g.childNodes[j]!=f;j++);a.setStart(new CKEDITOR.dom.node(g),j);a.setEnd(new CKEDITOR.dom.node(g), +j+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:o(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a= +this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent(); +b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())|| +!(c.type==CKEDITOR.NODE_ELEMENT&&A[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=p?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel= +null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){a.fire("lockSnapshot"); +b.remove();a.fire("unlockSnapshot")}delete a._.hiddenSelectionContainer}this.rev=z++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,d,e=0;e<a.length;++e){d=a[e];if(d.endContainer.equals(b))d.endOffset=Math.min(d.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var g=CKEDITOR.document.getActive(); +this.unlock();this.selectRanges(a);this.lock();!g.equals(this.root)&&g.focus()}else{var h;a:{var i,k;if(a.length==1&&!(k=a[0]).collapsed&&(h=k.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT){k=k.clone();k.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((i=k.getEnclosedNode())&&i.type==CKEDITOR.NODE_ELEMENT)h=i;if(h.getAttribute("contenteditable")=="false")break a}h=void 0}if(h)this.fake(h);else{if(p){k=CKEDITOR.dom.walker.whitespaces(true);i=/\ufeff|\u00a0/;b={table:1,tbody:1,tr:1};if(a.length>1){h=a[a.length- +1];a[0].setEnd(h.endContainer,h.endOffset)}h=a[0];var a=h.collapsed,o,n,r;if((d=h.getEnclosedNode())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getName()in A&&(!d.is("a")||!d.getText()))try{r=d.$.createControlRange();r.addElement(d.$);r.select();return}catch(s){}(h.startContainer.type==CKEDITOR.NODE_ELEMENT&&h.startContainer.getName()in b||h.endContainer.type==CKEDITOR.NODE_ELEMENT&&h.endContainer.getName()in b)&&h.shrink(CKEDITOR.NODE_ELEMENT,true);r=h.createBookmark();b=r.startNode;if(!a)g=r.endNode;r=h.document.$.body.createTextRange(); +r.moveToElementText(b.$);r.moveStart("character",1);if(g){i=h.document.$.body.createTextRange();i.moveToElementText(g.$);r.setEndPoint("EndToEnd",i);r.moveEnd("character",-1)}else{o=b.getNext(k);n=b.hasAscendant("pre");o=!(o&&o.getText&&o.getText().match(i))&&(n||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));n=h.document.createElement("span");n.setHtml("&#65279;");n.insertBefore(b);o&&h.document.createText("").insertBefore(b)}h.setStartBefore(b);b.remove();if(a){if(o){r.moveStart("character", +-1);r.select();h.document.$.selection.clear()}else r.select();h.moveToPosition(n,CKEDITOR.POSITION_BEFORE_START);n.remove()}else{h.setEndBefore(g);g.remove();r.select()}}else{g=this.getNative();if(!g)return;this.removeAllRanges();for(r=0;r<a.length;r++){if(r<a.length-1){o=a[r];n=a[r+1];i=o.clone();i.setStart(o.endContainer,o.endOffset);i.setEnd(n.startContainer,n.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);h=i.getCommonAncestor();i=i.getEnclosedNode();if(h.isReadOnly()||i&& +i.isReadOnly()){n.setStart(o.startContainer,o.startOffset);a.splice(r--,1);continue}}}h=a[r];n=this.document.$.createRange();if(h.collapsed&&CKEDITOR.env.webkit&&c(h)){o=this.root;f(o,false);i=o.getDocument().createText("​");o.setCustomData("cke-fillingChar",i);h.insertNode(i);if((o=i.getNext())&&!i.getPrevious()&&o.type==CKEDITOR.NODE_ELEMENT&&o.getName()=="br"){f(this.root);h.moveToPosition(o,CKEDITOR.POSITION_BEFORE_START)}else h.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}n.setStart(h.startContainer.$, +h.startOffset);try{n.setEnd(h.endContainer.$,h.endOffset)}catch(t){if(t.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){h.collapse(1);n.setEnd(h.endContainer.$,h.endOffset)}else throw t;}g.addRange(n)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();i(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT; +c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=z++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b= +[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative(); +try{a&&a[p?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3; +(function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function e(b){var d=b.document;if(b.collapsed){d=z(this,d);b.insertNode(d);b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END)}else{var f=this.element,g=this._.definition,h,i=g.ignoreReadonly,k=i||g.includeReadonly;k==void 0&&(k=b.root.getCustomData("cke_includeReadonly"));var j=CKEDITOR.dtd[f]; +if(!j){h=true;j=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var o=b.createBookmark(),m=o.startNode,l=o.endNode,n=m,p;if(!i){var r=b.getCommonAncestor(),i=a(m,r),r=a(l,r);i&&(n=i.getNextSourceNode(true));r&&(l=r)}for(n.getPosition(l)==CKEDITOR.POSITION_FOLLOWING&&(n=0);n;){i=false;if(n.equals(l)){n=null;i=true}else{var q=n.type==CKEDITOR.NODE_ELEMENT?n.getName():null,r=q&&n.getAttribute("contentEditable")=="false",s=q&&n.getAttribute("data-nostyle");if(q&&n.data("cke-bookmark")){n= +n.getNextSourceNode(true);continue}if(r&&k&&CKEDITOR.dtd.$block[q])for(var u=n,A=c(u),C=void 0,H=A.length,P=0,u=H&&new CKEDITOR.dom.range(u.getDocument());P<H;++P){var C=A[P],U=CKEDITOR.filter.instances[C.data("cke-filter")];if(U?U.check(this):1){u.selectNodeContents(C);e.call(this,u)}}A=q?!j[q]||s?0:r&&!k?0:(n.getPosition(l)|J)==J&&(!g.childRule||g.childRule(n)):1;if(A)if((A=n.getParent())&&((A.getDtd()||CKEDITOR.dtd.span)[f]||h)&&(!g.parentRule||g.parentRule(A))){if(!p&&(!q||!CKEDITOR.dtd.$removeEmpty[q]|| +(n.getPosition(l)|J)==J)){p=b.clone();p.setStartBefore(n)}q=n.type;if(q==CKEDITOR.NODE_TEXT||r||q==CKEDITOR.NODE_ELEMENT&&!n.getChildCount()){for(var q=n,L;(i=!q.getNext(G))&&(L=q.getParent(),j[L.getName()])&&(L.getPosition(m)|F)==F&&(!g.childRule||g.childRule(L));)q=L;p.setEndAfter(q)}}else i=true;else i=true;n=n.getNextSourceNode(s||r)}if(i&&p&&!p.collapsed){for(var i=z(this,d),r=i.hasAttributes(),s=p.getCommonAncestor(),q={},A={},C={},H={},V,R,Y;i&&s;){if(s.getName()==f){for(V in g.attributes)if(!H[V]&& +(Y=s.getAttribute(R)))i.getAttribute(V)==Y?A[V]=1:H[V]=1;for(R in g.styles)if(!C[R]&&(Y=s.getStyle(R)))i.getStyle(R)==Y?q[R]=1:C[R]=1}s=s.getParent()}for(V in A)i.removeAttribute(V);for(R in q)i.removeStyle(R);r&&!i.hasAttributes()&&(i=null);if(i){p.extractContents().appendTo(i);p.insertNode(i);v.call(this,i);i.mergeSiblings();CKEDITOR.env.ie||i.$.normalize()}else{i=new CKEDITOR.dom.element("span");p.extractContents().appendTo(i);p.insertNode(i);v.call(this,i);i.remove(true)}p=null}}b.moveToBookmark(o); +b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(o.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;l.checkElementRemovable(h)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;l.checkElementRemovable(h)&&(f=h)}f&&o.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE, +1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,h=0,i;h<e.elements.length&&(i=e.elements[h]);h++){if(i==e.block||i==e.blockLimit)break;if(this.checkElementRemovable(i)){var k;if(a.collapsed&&(a.checkBoundaryOfElement(i,CKEDITOR.END)||(k=a.checkBoundaryOfElement(i,CKEDITOR.START)))){f=i;f.match=k?"start":"end"}else{i.mergeSiblings();i.is(this.element)?r.call(this,i):g(i,j(this)[i.getName()])}}}if(f){i=d;for(h=0;;h++){k=e.elements[h]; +if(k.equals(f))break;else if(k.match)continue;else k=k.clone();k.append(i);i=k}i[f.match=="start"?"insertBefore":"insertAfter"](f)}}else{var o=c.endNode,l=this;b();for(e=d;!e.equals(o);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)){e.getName()==this.element?r.call(this,e):g(e,j(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)){b();f=d.getNext()}}e=f}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function c(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")== +"true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function d(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&A(a,this)}function f(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&& +a.removeStyle(e)}}function h(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document,f;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){f=z(this,e,d);i(d,f)}a.moveToBookmark(b)}function n(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(e= +this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e);i(d,e)}else r.call(this,d);a.moveToBookmark(b)}function i(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=o(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+|&nbsp;)/g, +" ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(g.getFirst());e=g.getFirst().remove()}else e.setHtml(f);b=e}else f?b=s(c?[a.getHtml()]:k(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,h;if((h=c.getPrevious(C))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")){d=o(h.getHtml(),/\n$/,"")+"\n\n"+o(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);h.remove()}}else c&& +p(b)}function k(a){a.getName();var b=[];o(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function o(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function s(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument())); +for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=o(e,/^[ \t]*\n/,""),e=o(e,/\n$/,""),e=o(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?"&nbsp;":b?" "+CKEDITOR.tools.repeat("&nbsp;",a.length-1):CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function r(a,b){var c=this._.definition, +d=c.attributes,c=c.styles,e=j(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),h;for(h in d)if(!((h=="class"||this._.definition.fullMatch)&&a.getAttribute(h)!=m(h,d[h]))&&!(b&&h.slice(0,5)=="data-")){f=a.hasAttribute(h);a.removeAttribute(h)}for(var i in c)if(!(this._.definition.fullMatch&&a.getStyle(i)!=m(i,c[i],true))){f=f||!!a.getStyle(i);a.removeStyle(i)}g(a,e,P[a.getName()]);f&&(this._.definition.alwaysRemoveElement?p(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode== +CKEDITOR.ENTER_BR&&!a.hasAttributes()?p(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function v(a){for(var b=j(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||r.call(this,d,true)}for(var f in b)if(f!=this.element){c=a.getElementsByTag(f);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||g(d,b[f])}}}function g(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null|| +g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||p(a)}function p(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(C),d=a.getNext(C);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&& +d.mergeSiblings()}}}function z(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=A(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function A(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function l(a,b){for(var c in a)a[c]=a[c].replace(H,function(a, +c){return b[c]})}function j(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function m(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a, +b);return d[c?"getStyle":"getAttribute"](a)}function u(a,b,c){for(var d=a.document,e=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,f,g=e.createIterator();f=g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var P={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},q= +{a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},L=/\s*(?:;\s*|$)/,H=/#\((.+?)\)/g,G=CKEDITOR.dom.walker.bookmark(0,1),C=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);l(a.attributes, +b);l(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(P[c]?CKEDITOR.STYLE_BLOCK:q[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return u.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode; +u.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return u.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;u.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange= +this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?n:this.type==CKEDITOR.STYLE_OBJECT?f:null;return this.removeFromRange(a)},applyToObject:function(a){A(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++){e=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(e==a.block||e==a.blockLimit))){if(this.type== +CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!(typeof this.element=="string"?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true},checkElementMatch:function(a,b){var c=this._.definition; +if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d=="string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e== +"string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=j(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0];if(d=a.getAttribute(d)){var e=b[c][1];if(e===null||typeof e== +"string"&&d==e||e.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c=a.attributes&&a.attributes.style||"", +d="";c.length&&(c=c.replace(L,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(L,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,true);return this.customHandlers[a.type]=b}; +var J=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,F=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,true)};CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)}; +CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,e,b){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,b)}; +CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var d=0;d<b.length;d++){var e=b[d],h=e.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;e.fn.call(this,h)}})}b.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions); +else{var e=this,b=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){e._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){e._.stylesDefinitions=b[c];a(e._.stylesDefinitions)})}}}}); +CKEDITOR.dom.comment=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict"; +(function(){var a={},e={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(e[b]=1);CKEDITOR.dom.elementPath=function(b,d){var f=null,h=null,n=[],i=b,k,d=d||b.getDocument().getBody();do if(i.type==CKEDITOR.NODE_ELEMENT){n.push(i);if(!this.lastElement){this.lastElement=i;if(i.is(CKEDITOR.dtd.$object)||i.getAttribute("contenteditable")=="false")continue}if(i.equals(d))break;if(!h){k=i.getName(); +i.getAttribute("contenteditable")=="true"?h=i:!f&&e[k]&&(f=i);if(a[k]){var o;if(o=!f){if(k=k=="div"){a:{k=i.getChildren();o=0;for(var s=k.count();o<s;o++){var r=k.getItem(o);if(r.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[r.getName()]){k=true;break a}}k=false}k=!k}o=k}o?f=i:h=i}}}while(i=i.getParent());h||(h=d);this.block=f;this.blockLimit=h;this.root=d;this.elements=n}})(); +CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements,a=a&&a.elements;if(!a||e.length!=a.length)return false;for(var b=0;b<e.length;b++)if(!e[b].equals(a[b]))return false;return true},contains:function(a,e,b){var c;typeof a=="string"&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?c=a:typeof a=="object"&&(c= +function(b){return b.getName()in a});var d=this.elements,f=d.length;e&&f--;if(b){d=Array.prototype.slice.call(d,0);d.reverse()}for(e=0;e<f;e++)if(c(d[e]))return d[e];return null},isContextFor:function(a){var e;if(a in CKEDITOR.dtd.$block){e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!e.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}}; +CKEDITOR.dom.text=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node; +CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=this.$.parentNode,b=e.childNodes.length,c=this.getLength(),d=this.getDocument(),f=new CKEDITOR.dom.text(this.$.splitText(a),d);if(e.childNodes.length==b)if(a>=c){f=d.createText("");f.insertAfter(this)}else{a=d.createText("");a.insertAfter(f);a.remove()}return f},substring:function(a, +e){return typeof e!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}}); +(function(){function a(a,c,d){var e=a.serializable,h=c[d?"endContainer":"startContainer"],n=d?"endOffset":"startOffset",i=e?c.document.getById(a.startNode):a.startNode,a=e?c.document.getById(a.endNode):a.endNode;if(h.equals(i.getPrevious())){c.startOffset=c.startOffset-h.getLength()-a.getPrevious().getLength();h=a.getNext()}else if(h.equals(a.getPrevious())){c.startOffset=c.startOffset-h.getLength();h=a.getNext()}h.equals(i.getParent())&&c[n]++;h.equals(a.getParent())&&c[n]++;c[d?"endContainer":"startContainer"]= +h;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],e;return{getNextRange:function(h){e=e==void 0?0:e+1;var n=a[e];if(n&&a.length>1){if(!e)for(var i=a.length-1;i>=0;i--)d.unshift(a[i].createBookmark(true));if(h)for(var k=0;a[e+k+1];){for(var o=n.document,h=0,i=o.getById(d[k].endNode),o=o.getById(d[k+ +1].startNode);;){i=i.getNextSourceNode(false);if(o.equals(i))h=1;else if(c(i)||i.type==CKEDITOR.NODE_ELEMENT&&i.isBlockBoundary())continue;break}if(!h)break;k++}for(n.moveToBookmark(d.shift());k--;){i=a[++e];i.moveToBookmark(d.shift());n.setEnd(i.endContainer,i.endOffset)}}return n}}},createBookmarks:function(b){for(var c=[],d,e=0;e<this.length;e++){c.push(d=this[e].createBookmark(b,true));for(var h=e+1;h<this.length;h++){this[h]=a(d,this[h]);this[h]=a(d,this[h],true)}}return c},createBookmarks2:function(a){for(var c= +[],d=0;d<this.length;d++)c.push(this[d].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})(); +(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){b=b+("_"+c[e]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!f[a]){CKEDITOR.document.appendStyleSheet(e(a));f[a]=1}b&&b()} +function c(a){var b=a.getById(h);if(!b){b=a.getHead().append("style");b.setAttribute("id",h);b.setAttribute("type","text/css")}return b}function d(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var h=0;h<a.length;h++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&& +CKEDITOR.env.version<11?a[h].$.styleSheet.cssText=a[h].$.styleSheet.cssText+f:a[h].$.innerHTML=a[h].$.innerHTML+f}}var f={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a, +b,c,d,e){var f;if(a){a=a.toLowerCase();b&&(f=this.icons[a+"-rtl"]);f||(f=this.icons[a])}a=c||f&&f.path||"";d=d||f&&f.offset;e=e||f&&f.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){var c=CKEDITOR.skin.chameleon,e=[[i,a]];this.uiColor=a;d([b],c(this, +"editor"),e);d(n,c(this,"panel"),e)}).call(this,a)}});var h="cke_ui_color",n=[],i=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);n.push(a);var e=b.getUiColor();e&&d([a],CKEDITOR.skin.chameleon(b,"panel"),[[i,e]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(e&&e==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc"; +CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(e=0;e<a.length;e++){CKEDITOR.editor.prototype.constructor.apply(a[e][0],a[e][1]);CKEDITOR.add(a[e][0])}}})();CKEDITOR.skin.name="Moono_blue";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8,opera"; +CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, +a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), +panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, +"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var i=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!= +this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, +this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,e){if(!(4>arguments.length)){var c=i.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,{role:"presentation"},function(){var f=[],d=a.required?" cke_required":"";"horizontal"!= +a.labelLayout?f.push('<label class="cke_dialog_ui_labeled_label'+d+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',a.controlStyle?' style="'+a.controlStyle+'"':"",' role="radiogroup" aria-labelledby="'+c.labelId+'">',e.call(this,b,a),"</div>"):(d={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+d+'" id="'+c.labelId+ +'" for="'+c.inputId+'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+e.call(this,b,a)+"</span>"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,d,f));return f.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){i.call(this,a);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+ +a.type,id:e,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var f=this,h=!1;b.on("load",function(){f.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(h=true)});f.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&h){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);h=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this, +b,a,d,function(){var b=['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var d in c)b.push(d+'="'+c[d]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){i.call(this,a);var e=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",f={};a.validate&&(this.validate=a.validate); +f.rows=a.rows||5;f.cols=a.cols||20;f["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(f.style=a.inputStyle);a.dir&&(f.dir=a.dir);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f["aria-labelledby"]=this._.labelId;this._.required&&(f["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',c,'" '],b;for(b in f)a.push(b+'="'+CKEDITOR.tools.htmlEncode(f[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(e._["default"]), +"</textarea></div>");return a.join("")})}},checkbox:function(b,a,d){if(!(3>arguments.length)){var e=i.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),d=[],h=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":h};p(c);if(a["default"])g.checked= +"checked";if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;e.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,d,"input",null,g);d.push(' <label id="',h,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return d.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){i.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var e=[],c=this;CKEDITOR.ui.dialog.labeledElement.call(this, +b,a,d,function(){for(var d=[],h=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",k=0;k<a.items.length;k++){var j=a.items[k],i=j[2]!==void 0?j[2]:j[0],l=j[1]!==void 0?j[1]:j[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),i=CKEDITOR.tools.extend({},m,{title:i},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]==l)o.checked="checked";p(m);p(i);if(typeof m.inputStyle!= +"undefined")m.style=m.inputStyle;m.keyboardFocusable=true;e.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,i,q,"label",null,{id:n,"for":o.id},j[0]);d.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,e,d,h);return h.join("")});this._.children=e}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));i.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this);var e=this;b.on("load",function(){var a= +this.getElement();(function(){a.on("click",function(a){e.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(e.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var f=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button","aria-labelledby":f},'<span id="'+f+ +'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},select:function(b,a,d){if(!(3>arguments.length)){var e=i.call(this,a);a.validate&&(this.validate=a.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),d=[],h=[],g={id:e.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};d.push('<div class="cke_dialog_ui_input_', +a.type,'" role="presentation"');a.width&&d.push('style="width:'+a.width+'" ');d.push(">");if(a.size!=void 0)g.size=a.size;if(a.multiple!=void 0)g.multiple=a.multiple;p(c);for(var k=0,j;k<a.items.length&&(j=a.items[k]);k++)h.push('<option value="',CKEDITOR.tools.htmlEncode(j[1]!==void 0?j[1]:j[0]).replace(/"/g,"&quot;"),'" /> ',CKEDITOR.tools.htmlEncode(j[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;e.select=new CKEDITOR.ui.dialog.uiElement(b,c,d,"select",null,g,h.join(""));d.push("</div>"); +return d.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var e=CKEDITOR.tools.extend(i.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="', +e.frameId,'" title="',a.label,'" src="javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"></iframe>');return b.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){i.call(this,a);var e=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),f=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= +a["for"];if(!f||f.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(e,c,f){if(!(3>arguments.length)){var h=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var k=c.focus;if(k){var j=this.focus;this.focus=function(){("function"== +typeof k?k:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,e,c,h,"span",null,null,"");h=h.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);f.push([g[1]," ",h[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,e,c){var f=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,e,"fieldset",null,null,function(){var a=[];f&&a.push("<legend"+ +(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+f+"</legend>");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= +CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, +isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, +focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype= +CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;e.$.text=b;e.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(e.$):c.add(e.$,null):c.add(e.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0< +b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this, +arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,e,c=0;c<d.length&&(e=d[c]);c++)e.getElement().$.checked=e.getValue()==b;!a&&this.fire("change",{value:b})}, +getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&& +this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}}},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit(); +return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,e=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):e(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();var b="";e.size&&(b=e.size-(CKEDITOR.env.ie?7:0));var i=a.frameId+"_input"; +d.$.write(['<html dir="'+g+'" lang="'+k+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+g+'" lang="'+k+'" action="',CKEDITOR.tools.htmlEncode(e.action),'"><label id="',a.labelId,'" for="',i,'" style="display:none">',CKEDITOR.tools.htmlEncode(e.label),'</label><input style="width:100%" id="',i,'" aria-labelledby="',a.labelId,'" type="file" name="',CKEDITOR.tools.htmlEncode(e.id||"cke_upload"), +'" size="',CKEDITOR.tools.htmlEncode(0<b?b:""),'" /></form></body></html><script>',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+f+");","window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction("+h+")}","<\/script>"].join(""));d.$.close();for(b=0;b<c.length;b++)c[b].enable()}var a=this._,d=CKEDITOR.document.getById(a.frameId).getFrameDocument(),e=a.definition,c=a.buttons,f=this.formLoadedNumber,h=this.formUnloadNumber,g=a.dialog._.editor.lang.dir, +k=a.dialog._.editor.langCode;f||(f=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),h=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(f);CKEDITOR.tools.removeFunction(h)}));CKEDITOR.env.gecko?setTimeout(b,500):b()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue= +""},eventProcessors:{onChange:function(b,a){this._.domOnChangeRegistered||(this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype=new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",r);CKEDITOR.dialog.addUIElement("password", +r);CKEDITOR.dialog.addUIElement("textarea",l);CKEDITOR.dialog.addUIElement("checkbox",l);CKEDITOR.dialog.addUIElement("radio",l);CKEDITOR.dialog.addUIElement("button",l);CKEDITOR.dialog.addUIElement("select",l);CKEDITOR.dialog.addUIElement("file",l);CKEDITOR.dialog.addUIElement("fileButton",l);CKEDITOR.dialog.addUIElement("html",l);CKEDITOR.dialog.addUIElement("fieldset",{build:function(b,a,d){for(var e=a.children,c,f=[],h=[],g=0;g<e.length&&(c=e[g]);g++){var i=[];f.push(i);h.push(CKEDITOR.dialog._.uiElementBuilders[c.type].build(b, +c,i))}return new CKEDITOR.ui.dialog[a.type](b,h,f,d,a)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3; +(function(){function t(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function u(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function G(a,b){for(var c=a.$.getElementsByTagName("input"), +e=0,d=c.length;e<d;e++){var g=new CKEDITOR.dom.element(c[e]);"text"==g.getAttribute("type").toLowerCase()&&(b?(g.setAttribute("value",g.getCustomData("fake_value")||""),g.removeCustomData("fake_value")):(g.setCustomData("fake_value",g.getAttribute("value")),g.setAttribute("value","")))}}function P(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute("aria-invalid"):c.setAttribute("aria-invalid",!0));a||(this.select?this.select():this.focus());b&&alert(b);this.fire("validated",{valid:a,msg:b})} +function Q(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function R(a){var a=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",S).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),b=a.getChild([0,0,0,0,0]),c=b.getChild(0),e=b.getChild(1);if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var d= +"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())";CKEDITOR.dom.element.createFromHtml('<iframe frameBorder="0" class="cke_iframe_shim" src="'+d+'" tabIndex="-1"></iframe>').appendTo(b.getParent())}c.unselectable();e.unselectable();return{element:a,parts:{dialog:a.getChild(0),title:c,close:e,tabs:b.getChild(2),contents:b.getChild([3,0,0,0]),footer:b.getChild([3,0,1,0])}}}function H(a,b,c){this.element=b;this.focusIndex=c;this.tabIndex= +0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function T(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();c.on("resize",b);a.on("hide",function(){c.removeListener("resize",b)})}function I(a,b){this._= +{dialog:a};CKEDITOR.tools.extend(this,b)}function U(a){function b(b){var c=a.getSize(),i=CKEDITOR.document.getWindow().getViewPaneSize(),o=b.data.$.screenX,j=b.data.$.screenY,n=o-e.x,l=j-e.y;e={x:o,y:j};d.x+=n;d.y+=l;a.move(d.x+h[3]<f?-h[3]:d.x-h[1]>i.width-c.width-f?i.width-c.width+("rtl"==g.lang.dir?0:h[1]):d.x,d.y+h[0]<f?-h[0]:d.y-h[2]>i.height-c.height-f?i.height-c.height+h[2]:d.y,1);b.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup", +c);if(CKEDITOR.env.ie6Compat){var a=q.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var e=null,d=null;a.getElement().getFirst();var g=a.getParentEditor(),f=g.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(f){e={x:f.data.$.screenX,y:f.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);d=a.getPosition();if(CKEDITOR.env.ie6Compat){var h= +q.getChild(0).getFrameDocument();h.on("mousemove",b);h.on("mouseup",c)}f.data.preventDefault()},a)}function V(a){var b,c;function e(d){var e="rtl"==h.lang.dir,j=o.width,C=o.height,D=j+(d.data.$.screenX-b)*(e?-1:1)*(a._.moved?1:2),n=C+(d.data.$.screenY-c)*(a._.moved?1:2),x=a._.element.getFirst(),x=e&&x.getComputedStyle("right"),y=a.getPosition();y.y+n>i.height&&(n=i.height-y.y);if((e?x:y.x)+D>i.width)D=i.width-(e?x:y.x);if(f==CKEDITOR.DIALOG_RESIZE_WIDTH||f==CKEDITOR.DIALOG_RESIZE_BOTH)j=Math.max(g.minWidth|| +0,D-m);if(f==CKEDITOR.DIALOG_RESIZE_HEIGHT||f==CKEDITOR.DIALOG_RESIZE_BOTH)C=Math.max(g.minHeight||0,n-k);a.resize(j,C);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",e);j&&(j.remove(),j=null);if(CKEDITOR.env.ie6Compat){var a=q.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",e)}}var g=a.definition,f=g.resizable;if(f!=CKEDITOR.DIALOG_RESIZE_NONE){var h=a.getParentEditor(), +m,k,i,o,j,n=CKEDITOR.tools.addFunction(function(f){o=a.getSize();var h=a.parts.contents;h.$.getElementsByTagName("iframe").length&&(j=CKEDITOR.dom.element.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>'),h.append(j));k=o.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));m=o.width-a.parts.contents.getSize("width",1);b=f.screenX;c=f.screenY;i=CKEDITOR.document.getWindow().getViewPaneSize(); +CKEDITOR.document.on("mousemove",e);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(h=q.getChild(0).getFrameDocument(),h.on("mousemove",e),h.on("mouseup",d));f.preventDefault&&f.preventDefault()});a.on("load",function(){var b="";f==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":f==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('<div class="cke_resizer'+b+" cke_resizer_"+h.lang.dir+'" title="'+CKEDITOR.tools.htmlEncode(h.lang.common.resize)+ +'" onmousedown="CKEDITOR.tools.callFunction('+n+', event )">'+("ltr"==h.lang.dir?"◢":"◣")+"</div>");a.parts.footer.append(b,1)});h.on("destroy",function(){CKEDITOR.tools.removeFunction(n)})}}function E(a){a.data.preventDefault(1)}function J(a){var b=CKEDITOR.document.getWindow(),c=a.config,e=c.dialog_backgroundCoverColor||"white",d=c.dialog_backgroundCoverOpacity,g=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(e,d,g),f=w[c];f?f.show():(g=['<div tabIndex="-1" style="position: ',CKEDITOR.env.ie6Compat? +"absolute":"fixed","; z-index: ",g,"; top: 0px; left: 0px; ",!CKEDITOR.env.ie6Compat?"background-color: "+e:"",'" class="cke_dialog_background_cover">'],CKEDITOR.env.ie6Compat&&(e="<html><body style=\\'background-color:"+e+";\\'></body></html>",g.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:'),g.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+e+"' );document.close();")+"})())"),g.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>')), +g.push("</div>"),f=CKEDITOR.dom.element.createFromHtml(g.join("")),f.setOpacity(void 0!=d?d:0.5),f.on("keydown",E),f.on("keypress",E),f.on("keyup",E),f.appendTo(CKEDITOR.document.getBody()),w[c]=f);a.focusManager.add(f);q=f;var a=function(){var a=b.getViewPaneSize();f.setStyles({width:a.width+"px",height:a.height+"px"})},h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;f.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do{a=c.getPosition();c.move(a.x,a.y)}while(c=c._.parentDialog) +}};F=a;b.on("resize",a);a();(!CKEDITOR.env.mac||!CKEDITOR.env.webkit)&&f.focus();if(CKEDITOR.env.ie6Compat){var m=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){m.prevScrollHandler=window.onscroll||function(){};window.onscroll=m},0);h()}}function K(a){q&&(a.focusManager.remove(q),a=CKEDITOR.document.getWindow(),q.hide(),a.removeListener("resize",F),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler|| +null},0),F=null)}var r=CKEDITOR.tools.cssLength,S='<div class="cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir="{langDir}" lang="{langCode}" role="dialog" aria-labelledby="cke_dialog_title_{id}"><table class="cke_dialog '+CKEDITOR.env.cssClass+' cke_{langDir}" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>'; +CKEDITOR.dialog=function(a,b){function c(){var a=l._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function e(a){var b=l._.focusList,a=a||0;if(!(1>b.length)){var c=l._.currentFocusIndex;try{b[c].getInputElement().$.blur()}catch(f){}for(var d=c=(c+a+b.length)%b.length;a&&!b[d].isFocusable()&&!(d=(d+a+b.length)%b.length,d==c););b[d].focus();"text"==b[d].type&&b[d].select()}}function d(b){if(l== +CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),d="rtl"==a.lang.dir;o=j=0;if(9==c||c==CKEDITOR.SHIFT+9)c=c==CKEDITOR.SHIFT+9,l._.tabBarMode?(c=c?t.call(l):u.call(l),l.selectPage(c),l._.tabs[c][0].focus()):e(c?-1:1),o=1;else if(c==CKEDITOR.ALT+121&&!l._.tabBarMode&&1<l.getPageCount())l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus(),o=1;else if((37==c||39==c)&&l._.tabBarMode)c=c==(d?39:37)?t.call(l):u.call(l),l.selectPage(c),l._.tabs[c][0].focus(),o=1;else if((13==c||32==c)&&l._.tabBarMode)this.selectPage(this._.currentTabId), +this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1),o=1;else if(13==c){c=b.data.getTarget();if(!c.is("a","button","select","textarea")&&(!c.is("input")||"button"!=c.$.type))(c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),o=1;j=1}else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),j=1;else return;g(b)}}function g(a){o?a.data.preventDefault(1):j&&a.data.stopPropagation()}var f=CKEDITOR.dialog._.dialogDefinitions[b], +h=CKEDITOR.tools.clone(W),m=a.config.dialog_buttonsOrder||"OS",k=a.lang.dir,i={},o,j;("OS"==m&&CKEDITOR.env.mac||"rtl"==m&&"ltr"==k||"ltr"==m&&"rtl"==k)&&h.buttons.reverse();f=CKEDITOR.tools.extend(f(a),h);f=CKEDITOR.tools.clone(f);f=new L(this,f);h=R(a);this._={editor:a,element:h.element,name:b,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[], +currentFocusIndex:0,hasFocus:!1};this.parts=h.parts;CKEDITOR.tools.setTimeout(function(){a.fire("ariaWidget",this.parts.contents)},0,this);h={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};h["rtl"==k?"right":"left"]=0;this.parts.dialog.setStyles(h);CKEDITOR.event.call(this);this.definition=f=CKEDITOR.fire("dialogDefinition",{name:b,definition:f},a).definition;if(!("removeDialogTabs"in a._)&&a.config.removeDialogTabs){h=a.config.removeDialogTabs.split(";");for(k=0;k< +h.length;k++)if(m=h[k].split(":"),2==m.length){var n=m[0];i[n]||(i[n]=[]);i[n].push(m[1])}a._.removeDialogTabs=i}if(a._.removeDialogTabs&&(i=a._.removeDialogTabs[b]))for(k=0;k<i.length;k++)f.removeContents(i[k]);if(f.onLoad)this.on("load",f.onLoad);if(f.onShow)this.on("show",f.onShow);if(f.onHide)this.on("hide",f.onHide);if(f.onOk)this.on("ok",function(b){a.fire("saveSnapshot");setTimeout(function(){a.fire("saveSnapshot")},0);!1===f.onOk.call(this,b)&&(b.data.hide=!1)});if(f.onCancel)this.on("cancel", +function(a){!1===f.onCancel.call(this,a)&&(a.data.hide=!1)});var l=this,p=function(a){var b=l._.contents,c=!1,d;for(d in b)for(var f in b[d])if(c=a.call(this,b[d][f]))return};this.on("ok",function(a){p(function(b){if(b.validate){var c=b.validate(this),d="string"==typeof c||!1===c;d&&(a.data.hide=!1,a.stop());P.call(b,!d,"string"==typeof c?c:void 0);return d}})},this,null,0);this.on("cancel",function(b){p(function(c){if(c.isChanged())return!a.config.dialog_noConfirmCancel&&!confirm(a.lang.common.confirmCancel)&& +(b.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=e;var v=this._.element;a.focusManager.add(v,1);this.on("show",function(){v.on("keydown",d,this);if(CKEDITOR.env.gecko)v.on("keypress",g,this)});this.on("hide",function(){v.removeListener("keydown",d);CKEDITOR.env.gecko&&v.removeListener("keypress",g);p(function(a){Q.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown", +d,this,null,0)});this.on("show",function(){c();if(a.config.dialog_startupFocusTab&&1<l._.pageCount)l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus();else if(!this._.hasFocus)if(this._.currentFocusIndex=-1,f.onFocus){var b=f.onFocus.call(this);b&&b.focus()}else e(1)},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);U(this);V(this);(new CKEDITOR.dom.text(f.title,CKEDITOR.document)).appendTo(this.parts.title); +for(k=0;k<f.contents.length;k++)(i=f.contents[k])&&this.addPage(i);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();b.hasClass("cke_dialog_tab")&&(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf("_"))),this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1)),a.data.preventDefault())},this);k=[];i=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:f.buttons},k).getChild();this.parts.footer.setHtml(k.join("")); +for(k=0;k<i.length;k++)this._.buttons[i[k].id]=i[k]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){if(!this._.contentSize||!(this._.contentSize.width==a&&this._.contentSize.height==b))CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor),this.fire("resize",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+"px",height:b+"px"}),"rtl"==this._.editor.lang.dir&&this._.position&&(this._.position.x= +CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)),this._.contentSize={width:a,height:b}}}(),getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var e=this._.element.getFirst(),d="rtl"==this._.editor.lang.dir,g="fixed"==e.getComputedStyle("position");CKEDITOR.env.ie&&e.setStyle("zoom","100%");if(!g||!this._.position||!(this._.position.x== +a&&this._.position.y==b))this._.position={x:a,y:b},g||(g=CKEDITOR.document.getWindow().getScrollPosition(),a+=g.x,b+=g.y),d&&(g=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width-g.width-a),b={top:(0<b?b:0)+"px"},b[d?"right":"left"]=(0<a?a:0)+"px",e.setStyles(b),c&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;!a.getParent()||!a.getParent().equals(CKEDITOR.document.getBody())?a.appendTo(CKEDITOR.document.getBody()): +a.setStyle("display","block");this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this, +this._.parentDialog=null,J(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);a.on("keydown",M);a.on("keyup",N);this._.hasFocus=!1;for(var c in b.contents)if(b.contents[c]){var a=b.contents[c],e=this._.tabs[a.id],d=a.requiredContent,g=0;if(e){for(var f in this._.contents[a.id]){var h=this._.contents[a.id][f];"hbox"==h.type||("vbox"==h.type|| +!h.getInputElement())||(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)?h.disable():(h.enable(),g++))}!g||d&&!this._.editor.activeFilter.check(d)?e[0].addClass("cke_dialog_tab_disabled"):e[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();T(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock(); +this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),e=(c.width-b.width)/2,d=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<d?d:0)>c.height||b.width+(0<e?e:0)>c.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:e,this._.moved?this._.position.y:d)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this, +this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide", +this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(X(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else K(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-= +10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",M);a.removeListener("keyup",N);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()})}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title="'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",e=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox", +className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),d=this._.contents[a.id]={},g=e.getChild(),f=0;e=g.shift();)!e.notAllowed&&("hbox"!=e.type&&"vbox"!=e.type)&&f++,d[e.id]=e,"function"==typeof e.getChild&&g.push.apply(g,e.getChild());f||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");e=CKEDITOR.env;d="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"', +0<this._.pageCount?" cke_last":"cke_first",c,a.hidden?' style="display:none"':"",' id="',d,'"',e.gecko&&!e.hc?"":' href="javascript:void(0)"',' tabIndex="-1" hidefocus="true" role="tab">',a.label,"</a>"].join(""));b.setAttribute("aria-labelledby",d);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);a.accessKey&&(O(this,this,"CTRL+"+ +a.accessKey,Y,Z),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var b in this._.tabs){var c=this._.tabs[b][0],e=this._.tabs[b][1];b!=a&&(c.removeClass("cke_dialog_tab_selected"),e.hide());e.setAttribute("aria-hidden",b!=a)}var d=this._.tabs[a];d[0].addClass("cke_dialog_tab_selected");CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat? +(G(d[1]),d[1].show(),setTimeout(function(){G(d[1],1)},0)):d[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(1===this._.pageCount?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(a){var b=this._.tabs[a]&&this._.tabs[a][0];b&&(1!=this._.pageCount&&b.isVisible())&&(a==this._.currentTabId&&this.selectPage(t.call(this)),b.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&& +this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,b){var c=this._.contents[a];return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()}, +enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a,b){if("undefined"==typeof b)b=this._.focusList.length,this._.focusList.push(new H(this,a,b));else{this._.focusList.splice(b,0,new H(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}}}; +CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){if(!this._.dialogDefinitions[a]||"function"==typeof b)this._.dialogDefinitions[a]=b},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(RegExp("(?:^|;)"+b+":"+c+"(?:$|;)","i")))},okButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok", +onClick:function(a){a=a.data.dialog;!1!==a.fire("ok",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),cancelButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;!1!==a.fire("cancel",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override= +function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var W={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},z=function(a, +b,c){for(var e=0,d;d=a[e];e++)if(d.id==b||c&&d[c]&&(d=z(d[c],b,c)))return d;return null},A=function(a,b,c,e,d){if(c){for(var g=0,f;f=a[g];g++){if(f.id==c)return a.splice(g,0,b),b;if(e&&f[e]&&(f=A(f[e],b,c,e,!0)))return f}if(d)return null}a.push(b);return b},B=function(a,b,c){for(var e=0,d;d=a[e];e++){if(d.id==b)return a.splice(e,1);if(c&&d[c]&&(d=B(d[c],b,c)))return d}return null},L=function(a,b){this.dialog=a;for(var c=b.contents,e=0,d;d=c[e];e++)c[e]=d&&new I(a,d);CKEDITOR.tools.extend(this,b)}; +L.prototype={getContents:function(a){return z(this.contents,a)},getButton:function(a){return z(this.buttons,a)},addContents:function(a,b){return A(this.contents,a,b)},addButton:function(a,b){return A(this.buttons,a,b)},removeContents:function(a){B(this.contents,a)},removeButton:function(a){B(this.buttons,a)}};I.prototype={get:function(a){return z(this.elements,a,"children")},add:function(a,b){return A(this.elements,a,b,"children")},remove:function(a){B(this.elements,a,"children")}};var F,w={},q,s= +{},M=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);if((b=s[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault()},N=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);if((b=s[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length- +1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},O=function(a,b,c,e,d){(s[c]||(s[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:d||a.accessKeyUp,keydown:e||a.accessKeyDown})},X=function(a){for(var b in s){for(var c=s[b],e=c.length-1;0<=e;e--)(c[e].dialog==a||c[e].uiElement==a)&&c.splice(e,1);0===c.length&&delete s[b]}},Z=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},Y=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,e,d,g, +f){if(!(4>arguments.length)){var h=(e.call?e(b):e)||"div",m=["<",h," "],k=(d&&d.call?d(b):d)||{},i=(g&&g.call?g(b):g)||{},o=(f&&f.call?f.call(this,a,b):f)||"",j=this.domId=i.id||CKEDITOR.tools.getNextId()+"_uiElement";this.id=b.id;b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(k.display="none",this.notAllowed=!0);i.id=j;var n={};b.type&&(n["cke_dialog_ui_"+b.type]=1);b.className&&(n[b.className]=1);b.disabled&&(n.cke_disabled=1);for(var l=i["class"]&&i["class"].split?i["class"].split(" "): +[],j=0;j<l.length;j++)l[j]&&(n[l[j]]=1);l=[];for(j in n)l.push(j);i["class"]=l.join(" ");b.title&&(i.title=b.title);n=(b.style||"").split(";");b.align&&(l=b.align,k["margin-left"]="left"==l?0:"auto",k["margin-right"]="right"==l?0:"auto");for(j in k)n.push(j+":"+k[j]);b.hidden&&n.push("display:none");for(j=n.length-1;0<=j;j--)""===n[j]&&n.splice(j,1);0<n.length&&(i.style=(i.style?i.style+"; ":"")+n.join("; "));for(j in i)m.push(j+'="'+CKEDITOR.tools.htmlEncode(i[j])+'" ');m.push(">",o,"</",h,">"); +c.push(m.join(""));(this._||(this._={})).dialog=a;"boolean"==typeof b.isChanged&&(this.isChanged=function(){return b.isChanged});"function"==typeof b.isChanged&&(this.isChanged=b.isChanged);"function"==typeof b.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}}));"function"==typeof b.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}})); +CKEDITOR.event.implementOn(this);this.registerEvents(b);this.accessKeyUp&&(this.accessKeyDown&&b.accessKey)&&O(this,a,"CTRL+"+b.accessKey);var p=this;a.on("load",function(){var b=p.getInputElement();if(b){var c=p.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=false;a._.hasFocus=true;p.fire("focus");c&&this.addClass(c)});b.on("blur",function(){p.fire("blur");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this, +b);this.keyboardFocusable&&(this.tabIndex=b.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=p.focusIndex}))}},hbox:function(a,b,c,e,d){if(!(4>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.widths||null,h=d&&d.height||null,m,k={role:"presentation"};d&&d.align&&(k.align=d.align);CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"hbox"},e,"table",{},k,function(){var a=['<tbody><tr class="cke_dialog_ui_hbox">'];for(m=0;m<c.length;m++){var b= +"cke_dialog_ui_hbox_child",e=[];0===m&&(b="cke_dialog_ui_hbox_first");m==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('<td class="',b,'" role="presentation" ');f?f[m]&&e.push("width:"+r(f[m])):e.push("width:"+Math.floor(100/c.length)+"%");h&&e.push("height:"+r(h));d&&void 0!=d.padding&&e.push("padding:"+r(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[m].align)&&e.push("text-align:"+g[m].align);0<e.length&&a.push('style="'+e.join("; ")+'" ');a.push(">",c[m],"</td>")}a.push("</tr></tbody>"); +return a.join("")})}},vbox:function(a,b,c,e,d){if(!(3>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.width||null,h=d&&d.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"vbox"},e,"div",null,{role:"presentation"},function(){var b=['<table role="presentation" cellspacing="0" border="0" '];b.push('style="');d&&d.expand&&b.push("height:100%;");b.push("width:"+r(f||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align="',CKEDITOR.tools.htmlEncode(d&& +d.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');b.push("><tbody>");for(var e=0;e<c.length;e++){var i=[];b.push('<tr><td role="presentation" ');f&&i.push("width:"+r(f||"100%"));h?i.push("height:"+r(h[e])):d&&d.expand&&i.push("height:"+Math.floor(100/c.length)+"%");d&&void 0!=d.padding&&i.push("padding:"+r(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[e].align)&&i.push("text-align:"+g[e].align);0<i.length&&b.push('style="',i.join("; "),'" ');b.push(' class="cke_dialog_ui_vbox_child">', +c[e],"</td></tr>")}b.push("</tbody></table>");return b.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return!1},selectParentTab:function(){for(var a= +this.getInputElement();(a=a.getParent())&&-1==a.$.className.search("cke_dialog_page_contents"););if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,e=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},d;for(d in a)if(c=d.match(b))this.eventProcessors[d]?this.eventProcessors[d].call(this, +this._.dialog,a[d]):e(this,this._.dialog,c[1].toLowerCase(),a[d]);return this},eventProcessors:{onLoad:function(a,b){a.on("load",b,this)},onShow:function(a,b){a.on("show",b,this)},onHide:function(a,b){a.on("hide",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled"); +a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()},isFocusable:function(){return!this.isEnabled()||!this.isVisible()?!1:!0}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild? +this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,e){for(var d=c.children,g,f=[],h=[],m=0;m<d.length&&(g=d[m]);m++){var k=[];f.push(k);h.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,k))}return new CKEDITOR.ui.dialog[c.type](a,h,f,e,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a; +CKEDITOR.tools.extend(this,b,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,e=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,g=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue(): +a[0],c=void 0,d=CKEDITOR.VALIDATE_AND,e=[],g;for(g=0;g<a.length;g++)if("function"==typeof a[g])e.push(a[g]);else break;g<a.length&&"string"==typeof a[g]&&(c=a[g],g++);g<a.length&&"number"==typeof a[g]&&(d=a[g]);var j=d==CKEDITOR.VALIDATE_AND?!0:!1;for(g=0;g<e.length;g++)j=d==CKEDITOR.VALIDATE_AND?j&&e[g](b):j||e[g](b);return!j?c:!0}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return!a.test(c)?b:!0}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b, +a)},number:function(a){return this.regex(c,a)},cssLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return g.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed", +function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var c in w)w[c].remove();w={}}var a=a.editor._.storedDialogs,d;for(d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,e=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&J(this);if("function"==typeof e)c=this._.storedDialogs||(this._.storedDialogs={}),c=c[a]||(c[a]=new CKEDITOR.dialog(this,a)),b&&b.call(c, +c),c.show();else{if("failed"==e)throw K(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof e&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return c}})})(); +CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(t){t.on("doubleclick",function(u){u.data.dialog&&t.openDialog(u.data.dialog)},null,null,999)}});CKEDITOR.plugins.add("about",{requires:"dialog",init:function(a){var b=a.addCommand("about",new CKEDITOR.dialogCommand("about"));b.modes={wysiwyg:1,source:1};b.canUndo=!1;b.readOnly=1;a.ui.addButton&&a.ui.addButton("About",{label:a.lang.about.title,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}});(function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(b){var c=this;b.addCommand("a11yHelp",{exec:function(){var a=b.langCode,a=c.availableLangs[a]?a:c.availableLangs[a.replace(/-.*/, +"")]?a.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+a+".js"),function(){b.lang.a11yhelp=c.langEntries[a];b.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});b.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js")}})})();CKEDITOR.plugins.add("basicstyles",{init:function(c){var e=0,d=function(g,d,b,a){if(a){var a=new CKEDITOR.style(a),f=h[b];f.unshift(a);c.attachStyleStateChange(a,function(a){!c.readOnly&&c.getCommand(b).setState(a)});c.addCommand(b,new CKEDITOR.styleCommand(a,{contentForms:f}));c.ui.addButton&&c.ui.addButton(g,{label:d,command:b,toolbar:"basicstyles,"+(e+=10)})}},h={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"== +a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},b=c.config,a=c.lang.basicstyles;d("Bold",a.bold,"bold",b.coreStyles_bold);d("Italic",a.italic,"italic",b.coreStyles_italic);d("Underline",a.underline,"underline",b.coreStyles_underline);d("Strike",a.strike,"strike",b.coreStyles_strike);d("Subscript",a.subscript, +"subscript",b.coreStyles_subscript);d("Superscript",a.superscript,"superscript",b.coreStyles_superscript);c.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"}; +CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){var k={exec:function(g){var a=g.getCommand("blockquote").state,i=g.getSelection(),c=i&&i.getRanges()[0];if(c){var h=i.createBookmarks();if(CKEDITOR.env.ie){var e=h[0].startNode,b=h[0].endNode,d;if(e&&"blockquote"==e.getParent().getName())for(d=e;d=d.getNext();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){e.move(d,!0);break}if(b&&"blockquote"==b.getParent().getName())for(d=b;d=d.getPrevious();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){b.move(d);break}}var f=c.createIterator(); +f.enlargeBr=g.config.enterMode!=CKEDITOR.ENTER_BR;if(a==CKEDITOR.TRISTATE_OFF){for(e=[];a=f.getNextParagraph();)e.push(a);1>e.length&&(a=g.document.createElement(g.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),b=h.shift(),c.insertNode(a),a.append(new CKEDITOR.dom.text("",g.document)),c.moveToBookmark(b),c.selectNodeContents(a),c.collapse(!0),b=c.createBookmark(),e.push(a),h.unshift(b));d=e[0].getParent();c=[];for(b=0;b<e.length;b++)a=e[b],d=d.getCommonAncestor(a.getParent());for(a={table:1,tbody:1, +tr:1,ol:1,ul:1};a[d.getName()];)d=d.getParent();for(b=null;0<e.length;){for(a=e.shift();!a.getParent().equals(d);)a=a.getParent();a.equals(b)||c.push(a);b=a}for(;0<c.length;)if(a=c.shift(),"blockquote"==a.getName()){for(b=new CKEDITOR.dom.documentFragment(g.document);a.getFirst();)b.append(a.getFirst().remove()),e.push(b.getLast());b.replace(a)}else e.push(a);c=g.document.createElement("blockquote");for(c.insertBefore(e[0]);0<e.length;)a=e.shift(),c.append(a)}else if(a==CKEDITOR.TRISTATE_ON){b=[]; +for(d={};a=f.getNextParagraph();){for(e=c=null;a.getParent();){if("blockquote"==a.getParent().getName()){c=a.getParent();e=a;break}a=a.getParent()}c&&(e&&!e.getCustomData("blockquote_moveout"))&&(b.push(e),CKEDITOR.dom.element.setMarker(d,e,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(d);a=[];e=[];for(d={};0<b.length;)f=b.shift(),c=f.getParent(),f.getPrevious()?f.getNext()?(f.breakParent(f.getParent()),e.push(f.getNext())):f.remove().insertAfter(c):f.remove().insertBefore(c),c.getCustomData("blockquote_processed")|| +(e.push(c),CKEDITOR.dom.element.setMarker(d,c,"blockquote_processed",!0)),a.push(f);CKEDITOR.dom.element.clearAllMarkers(d);for(b=e.length-1;0<=b;b--){c=e[b];a:{d=c;for(var f=0,k=d.getChildCount(),j=void 0;f<k&&(j=d.getChild(f));f++)if(j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary()){d=!1;break a}d=!0}d&&c.remove()}if(g.config.enterMode==CKEDITOR.ENTER_BR)for(c=!0;a.length;)if(f=a.shift(),"div"==f.getName()){b=new CKEDITOR.dom.documentFragment(g.document);c&&(f.getPrevious()&&!(f.getPrevious().type== +CKEDITOR.NODE_ELEMENT&&f.getPrevious().isBlockBoundary()))&&b.append(g.document.createElement("br"));for(c=f.getNext()&&!(f.getNext().type==CKEDITOR.NODE_ELEMENT&&f.getNext().isBlockBoundary());f.getFirst();)f.getFirst().remove().appendTo(b);c&&b.append(g.document.createElement("br"));b.replace(f);c=!1}}i.selectBookmarks(h);g.focus()}},refresh:function(g,a){this.setState(g.elementPath(a.block||a.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote", +allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(g){g.blockless||(g.addCommand("blockquote",k),g.ui.addButton&&g.ui.addButton("Blockquote",{label:g.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})})();(function(){function v(b){function a(){var e=b.editable();e.on(p,function(b){(!CKEDITOR.env.ie||!n)&&u(b)});CKEDITOR.env.ie&&e.on("paste",function(e){q||(g(),e.data.preventDefault(),u(e),h("paste")||b.openDialog("paste"))});CKEDITOR.env.ie&&(e.on("contextmenu",i,null,null,0),e.on("beforepaste",function(b){b.data&&!b.data.$.ctrlKey&&i()},null,null,0));e.on("beforecut",function(){!n&&j(b)});var a;e.attachListener(CKEDITOR.env.ie?e:b.document.getDocumentElement(),"mouseup",function(){a=setTimeout(function(){r()}, +0)});b.on("destroy",function(){clearTimeout(a)});e.on("keyup",r)}function c(e){return{type:e,canUndo:"cut"==e,startDisabled:!0,exec:function(){"cut"==this.type&&j();var e;var a=this.type;if(CKEDITOR.env.ie)e=h(a);else try{e=b.document.$.execCommand(a,!1,null)}catch(d){e=!1}e||alert(b.lang.clipboard[this.type+"Error"]);return e}}}function d(){return{canUndo:!1,async:!0,exec:function(b,a){var d=function(a,d){a&&f(a.type,a.dataValue,!!d);b.fire("afterCommandExec",{name:"paste",command:c,returnValue:!!a})}, +c=this;"string"==typeof a?d({type:"auto",dataValue:a},1):b.getClipboardData(d)}}}function g(){q=1;setTimeout(function(){q=0},100)}function i(){n=1;setTimeout(function(){n=0},10)}function h(e){var a=b.document,d=a.getBody(),c=!1,j=function(){c=!0};d.on(e,j);(7<CKEDITOR.env.version?a.$:a.$.selection.createRange()).execCommand(e);d.removeListener(e,j);return c}function f(e,a,d){e={type:e};if(d&&!1===b.fire("beforePaste",e)||!a)return!1;e.dataValue=a;return b.fire("paste",e)}function j(){if(CKEDITOR.env.ie&& +!CKEDITOR.env.quirks){var e=b.getSelection(),a,d,c;if(e.getType()==CKEDITOR.SELECTION_ELEMENT&&(a=e.getSelectedElement()))d=e.getRanges()[0],c=b.document.createText(""),c.insertBefore(a),d.setStartBefore(c),d.setEndAfter(a),e.selectRanges([d]),setTimeout(function(){a.getParent()&&(c.remove(),e.selectElement(a))},0)}}function l(a,d){var c=b.document,j=b.editable(),l=function(b){b.cancel()},g;if(!c.getById("cke_pastebin")){var i=b.getSelection(),s=i.createBookmarks(),k=new CKEDITOR.dom.element((CKEDITOR.env.webkit|| +j.is("body"))&&!CKEDITOR.env.ie?"body":"div",c);k.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var f=0,c=c.getWindow();CKEDITOR.env.webkit?(j.append(k),k.addClass("cke_editable"),j.is("body")||(f="static"!=j.getComputedStyle("position")?j:CKEDITOR.dom.element.get(j.$.offsetParent),f=f.getDocumentPosition().y)):j.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(k);k.setStyles({position:"absolute",top:c.getScrollPosition().y-f+10+"px",width:"1px",height:Math.max(1,c.getViewPaneSize().height- +20)+"px",overflow:"hidden",margin:0,padding:0});(f=k.getParent().isReadOnly())?(k.setOpacity(0),k.setAttribute("contenteditable",!0)):k.setStyle("ltr"==b.config.contentsLangDirection?"left":"right","-1000px");b.on("selectionChange",l,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)g=j.once("blur",l,null,null,-100);f&&k.focus();f=new CKEDITOR.dom.range(k);f.selectNodeContents(k);var h=f.select();CKEDITOR.env.ie&&(g=j.once("blur",function(){b.lockSelection(h)}));var m=CKEDITOR.document.getWindow().getScrollPosition().y; +setTimeout(function(){if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=m;g&&g.removeListener();CKEDITOR.env.ie&&j.focus();i.selectBookmarks(s);k.remove();var a;if(CKEDITOR.env.webkit&&(a=k.getFirst())&&a.is&&a.hasClass("Apple-style-span"))k=a;b.removeListener("selectionChange",l);d(k.getHtml())},0)}}function s(){if(CKEDITOR.env.ie){b.focus();g();var a=b.focusManager;a.lock();if(b.editable().fire(p)&&!h("paste"))return a.unlock(),!1;a.unlock()}else try{if(b.editable().fire(p)&&!b.document.$.execCommand("Paste", +!1,null))throw 0;}catch(d){return!1}return!0}function o(a){if("wysiwyg"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();g();!CKEDITOR.env.ie&&a.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:b.fire("saveSnapshot"),setTimeout(function(){b.fire("saveSnapshot")},50)}}function u(a){var d={type:"auto"},c=b.fire("beforePaste",d);l(a,function(b){b=b.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");c&&f(d.type,b,0,1)})}function r(){if("wysiwyg"== +b.mode){var a=m("paste");b.getCommand("cut").setState(m("cut"));b.getCommand("copy").setState(m("copy"));b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function m(a){if(t&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;var a=b.getSelection(),d=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var n=0,q=0,t=0,p=CKEDITOR.env.ie?"beforepaste":"paste";(function(){b.on("key", +o);b.on("contentDom",a);b.on("selectionChange",function(b){t=b.data.selection.getRanges()[0].checkReadOnly();r()});b.contextMenu&&b.contextMenu.addListener(function(b,a){t=a.getRanges()[0].checkReadOnly();return{cut:m("cut"),copy:m("copy"),paste:m("paste")}})})();(function(){function a(d,c,j,e,l){var g=b.lang.clipboard[c];b.addCommand(c,j);b.ui.addButton&&b.ui.addButton(d,{label:g,command:c,toolbar:"clipboard,"+e});b.addMenuItems&&b.addMenuItem(c,{label:g,command:c,group:"clipboard",order:l})}a("Cut", +"cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste","paste",d(),30,8)})();b.getClipboardData=function(a,d){function c(a){a.removeListener();a.cancel();d(a.data)}function j(a){a.removeListener();a.cancel();i=!0;d({type:f,dataValue:a.data})}function l(){this.customTitle=a&&a.title}var g=!1,f="auto",i=!1;d||(d=a,a=null);b.on("paste",c,null,null,0);b.on("beforePaste",function(a){a.removeListener();g=true;f=a.data.type},null,null,1E3);!1===s()&&(b.removeListener("paste",c),g&&b.fire("pasteDialog", +l)?(b.on("pasteDialogCommit",j),b.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",j);setTimeout(function(){i||d(null)},10)})):d(null))}}function w(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!b.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html"; +return"htmlifiedtext"}function x(b,a){function c(a){return CKEDITOR.tools.repeat("</p><p>",~~(a/2))+(1==a%2?"<br>":"")}a=a.replace(/\s+/g," ").replace(/> +</g,"><").replace(/<br ?\/>/gi,"<br>");a=a.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1<a.indexOf("<div>")&&(a=a.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"<br>").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"<div></div>"),a.match(/<div>(<br>|)<\/div>/)&&(a="<p>"+ +a.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return c(a.split("</div><div>").length+1)})+"</p>"),a=a.replace(/<\/div><div>/g,"<br>"),a=a.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(a=a.replace(/^<br><br>$/,"<br>")),-1<a.indexOf("<br><br>")&&(a="<p>"+a.replace(/(<br>){2,}/g,function(a){return c(a.length/4)})+"</p>"));return o(b,a)}function y(){var b=new CKEDITOR.htmlParser.filter,a={blockquote:1,dl:1,fieldset:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1, +ol:1,p:1,table:1,ul:1},c=CKEDITOR.tools.extend({br:0},CKEDITOR.dtd.$inline),d={p:1,br:1,"cke:br":1},g=CKEDITOR.dtd,i=CKEDITOR.tools.extend({area:1,basefont:1,embed:1,iframe:1,map:1,object:1,param:1},CKEDITOR.dtd.$nonBodyContent,CKEDITOR.dtd.$cdata),h=function(a){delete a.name;a.add(new CKEDITOR.htmlParser.text(" "))},f=function(a){for(var b=a,c;(b=b.next)&&b.name&&b.name.match(/^h\d$/);){c=new CKEDITOR.htmlParser.element("cke:br");c.isEmpty=!0;for(a.add(c);c=b.children.shift();)a.add(c)}};b.addRules({elements:{h1:f, +h2:f,h3:f,h4:f,h5:f,h6:f,img:function(a){var a=CKEDITOR.tools.trim(a.attributes.alt||""),b=" ";a&&!a.match(/(^http|\.(jpe?g|gif|png))/i)&&(b=" ["+a+"] ");return new CKEDITOR.htmlParser.text(b)},td:h,th:h,$:function(b){var f=b.name,h;if(i[f])return!1;b.attributes={};if("br"==f)return b;if(a[f])b.name="p";else if(c[f])delete b.name;else if(g[f]){h=new CKEDITOR.htmlParser.element("cke:br");h.isEmpty=!0;if(CKEDITOR.dtd.$empty[f])return h;b.add(h,0);h=h.clone();h.isEmpty=!0;b.add(h);delete b.name}d[b.name]|| +delete b.name;return b}}},{applyToAll:!0});return b}function z(b,a,c){var a=new CKEDITOR.htmlParser.fragment.fromHtml(a),d=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(d,c);var a=d.getHtml(),a=a.replace(/\s*(<\/?[a-z:]+ ?\/?>)\s*/g,"$1").replace(/(<cke:br \/>){2,}/g,"<cke:br />").replace(/(<cke:br \/>)(<\/?p>|<br \/>)/g,"$2").replace(/(<\/?p>|<br \/>)(<cke:br \/>)/g,"$1").replace(/<(cke:)?br( \/)?>/g,"<br>").replace(/<p><\/p>/g,""),g=0,a=a.replace(/<\/?p>/g,function(a){if("<p>"==a){if(1<++g)return"</p><p>"}else if(0< +--g)return"</p><p>";return a}).replace(/<p><\/p>/g,"");return o(b,a)}function o(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("<br>",2*(a.length/7))}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"<$1div>"));return a}CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(b){var a;v(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));b.on("paste",function(a){var b=a.data.dataValue, +g=CKEDITOR.dtd.$block;-1<b.indexOf("Apple-")&&(b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi," "),"html"!=a.data.type&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"&nbsp;&nbsp; &nbsp;")})),-1<b.indexOf('<br class="Apple-interchange-newline">')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",b=b.replace(/<br class="Apple-interchange-newline">/,"")),b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var i, +h,f=new CKEDITOR.dom.element("div");for(f.setHtml(b);1==f.getChildCount()&&(i=f.getFirst())&&i.type==CKEDITOR.NODE_ELEMENT&&(i.hasClass("cke_editable")||i.hasClass("cke_contents"));)f=h=i;h&&(b=h.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b,d){if(d.toLowerCase()in g){a.data.preSniffing="html";return"<"+d}return b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,d){if(d in g){a.data.endsWithEOL=1;return"</"+d+">"}return b}): +CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,null,3);b.on("paste",function(c){var c=c.data,d=c.type,g=c.dataValue,i,h=b.config.clipboard_defaultContentType||"html";i="html"==d||"html"==c.preSniffing?"html":w(g);"htmlifiedtext"==i?g=x(b.config,g):"text"==d&&"html"==i&&(g=z(b.config,g,a||(a=y(b))));c.startsWithEOL&&(g='<br data-cke-eol="1">'+g);c.endsWithEOL&&(g+='<br data-cke-eol="1">');"auto"==d&&(d="html"==i||"html"==h?"html":"text");c.type=d;c.dataValue=g;delete c.preSniffing; +delete c.startsWithEOL;delete c.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;b.insertHtml(a.dataValue,a.type);setTimeout(function(){b.fire("afterPaste")},0)},null,null,1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}})})();(function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var f=CKEDITOR.addTemplate("panel", +'<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>'),g=CKEDITOR.addTemplate("panel-frame",'<iframe id="{id}" class="cke_panel_frame" role="presentation" frameborder="0" src="{src}"></iframe>'),h=CKEDITOR.addTemplate("panel-frame-inner",'<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>'); +CKEDITOR.ui.panel.prototype={render:function(a,b){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),b=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&b.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});b=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(h.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+ +b+");"},d)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&!1===this._.onKeyDown(b)?a.data.preventDefault():(27==b||b==("rtl"==c?39:37))&&this.onEscape&&!1===this.onEscape(b)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(b)}else a=this.document.getById(this.id);this._.holder=a}return a};var d={editorId:a.id,id:this.id,langCode:a.langCode, +dir:a.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":a.config.baseFloatZIndex+1};if(this.isFramed){var e=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";d.frame=g.output({id:this.id+"_frame",src:e})}e=f.output(d);b&&b.push(e);return e},addBlock:function(a,b){b=this._.blocks[a]=b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(), +b);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){var a=this._.blocks[a],b=this._.currentBlock,d=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");b&&b.hide();this._.currentBlock=a;CKEDITOR.fire("ariaWidget",d);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show();return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block= +CKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));b&&CKEDITOR.tools.extend(this,b);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(a){-1!=a&&(a=this.element.getElementsByTag("a").getItem(this._.focusIndex= +a),CKEDITOR.env.webkit&&a.getDocument().getWindow().focus(),a.focus(),this.onMark&&this.onMark(a))}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){(!this.onHide||!0!==this.onHide.call(this))&&this.element.setStyle("display","none")},onKeyDown:function(a,b){var d=this.keys[a];switch(d){case "next":for(var e=this._.focusIndex,d=this.element.getElementsByTag("a"),c;c=d.getItem(++e);)if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}return!c&& +!b?(this._.focusIndex=-1,this.onKeyDown(a,1)):!1;case "prev":e=this._.focusIndex;for(d=this.element.getElementsByTag("a");0<e&&(c=d.getItem(--e));){if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}c=null}return!c&&!b?(this._.focusIndex=d.count(),this.onKeyDown(a,1)):!1;case "click":case "mouseup":return e=this._.focusIndex,(c=0<=e&&this.element.getElementsByTag("a").getItem(e))&&(c.$[d]?c.$[d]():c.$["on"+d]()),!1}return!0}}})})();CKEDITOR.plugins.add("floatpanel",{requires:"panel"}); +(function(){function r(a,b,c,i,f){var f=CKEDITOR.tools.genKey(b.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||"",i.css||"",f||""),h=g[f];h||(h=g[f]=new CKEDITOR.ui.panel(b,i),h.element=c.append(CKEDITOR.dom.element.createFromHtml(h.render(a),b)),h.element.setStyles({display:"none",position:"absolute"}));return h}var g={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(a,b,c,i){function f(){d.hide()}c.forceIFrame=1;c.toolbarRelated&&a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&& +(b=CKEDITOR.document.getById("cke_"+a.name));var h=b.getDocument(),i=r(a,h,b,c,i||0),j=i.element,l=j.getFirst(),d=this;j.disableContextMenu();this.element=j;this._={editor:a,panel:i,parentElement:b,definition:c,document:h,iframe:l,children:[],dir:a.lang.dir};a.on("mode",f);a.on("resize",f);if(!CKEDITOR.env.iOS)h.getWindow().on("resize",f)},proto:{addBlock:function(a,b){return this._.panel.addBlock(a,b)},addListBlock:function(a,b){return this._.panel.addListBlock(a,b)},getBlock:function(a){return this._.panel.getBlock(a)}, +showBlock:function(a,b,c,i,f,h){var j=this._.panel,l=j.showBlock(a);this.allowBlur(!1);a=this._.editor.editable();this._.returnFocus=a.hasFocus?a:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var d=this.element,a=this._.iframe,a=CKEDITOR.env.ie?a:new CKEDITOR.dom.window(a.$.contentWindow),g=d.getDocument(),o=this._.parentElement.getPositionedAncestor(),p=b.getDocumentPosition(g),g=o?o.getDocumentPosition(g):{x:0,y:0},m="rtl"==this._.dir,e=p.x+(i||0)-g.x,k=p.y+(f|| +0)-g.y;if(m&&(1==c||4==c))e+=b.$.offsetWidth;else if(!m&&(2==c||3==c))e+=b.$.offsetWidth-1;if(3==c||4==c)k+=b.$.offsetHeight-1;this._.panel._.offsetParentId=b.getId();d.setStyles({top:k+"px",left:0,display:""});d.setOpacity(0);d.getFirst().removeStyle("width");this._.editor.focusManager.add(a);this._.blurSet||(CKEDITOR.event.useCapture=!0,a.on("blur",function(a){function q(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&(this.visible&&!this._.activeChild)&& +(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(q,0,this)):q.call(this))},this),a.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.env.iOS&&(a.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),a.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);j.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&this.onEscape(a)===false)return false}, +this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){d.removeStyle("width");if(l.autoSize){var a=l.element.getDocument(),a=(CKEDITOR.env.webkit?l.element:a.getBody()).$.scrollWidth;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetWidth||0)-(d.$.clientWidth||0)+3));d.setStyle("width",a+10+"px");a=l.element.$.scrollHeight;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetHeight||0)-(d.$.clientHeight||0)+3));d.setStyle("height",a+"px");j._.currentBlock.element.setStyle("display", +"none").removeStyle("display")}else d.removeStyle("height");m&&(e=e-d.$.offsetWidth);d.setStyle("left",e+"px");var b=j.element.getWindow(),a=d.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,f=a.height||a.bottom-a.top,i=m?a.right:b.width-a.left,g=m?b.width-a.right:a.left;m?i<c&&(e=g>c?e+c:b.width>c?e-a.left:e-a.right+b.width):i<c&&(e=g>c?e-c:b.width>c?e-a.right+b.width:e-a.left);c=a.top;b.height-a.top<f&&(k=c>f?k-f:b.height>f?k-a.bottom+b.height:k-a.top);if(CKEDITOR.env.ie){b= +a=new CKEDITOR.dom.element(d.$.offsetParent);b.getName()=="html"&&(b=b.getDocument().getBody());b.getComputedStyle("direction")=="rtl"&&(e=CKEDITOR.env.ie8Compat?e-d.getDocument().getDocumentElement().$.scrollLeft*2:e-(a.$.scrollWidth-a.$.clientWidth))}var a=d.getFirst(),n;(n=a.getCustomData("activePanel"))&&n.onHide&&n.onHide.call(this,1);a.setCustomData("activePanel",this);d.setStyles({top:k+"px",left:e+"px"});d.setOpacity(1);h&&h()},this);j.isLoaded?a():j.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a= +CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();l.element.focus();if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=a;this.allowBlur(true);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()}, +blur:function(){var a=this._.iframe.getFrameDocument().getActive();a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused; +this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!=a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,g,f,h){this._.activeChild==a&&a._.panel._.offsetParentId==c.getId()||(this.hideChild(),a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,g,f,h),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+= +""},100))},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),b;for(b in g){var c=g[b];a?c.destroy():c.element.hide()}a&&(g={})})})();CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(g){for(var h=g.config.menu_groups.split(","),m=g._.menuGroups={},l=g._.menuItems={},a=0;a<h.length;a++)m[h[a]]=a+1;g.addMenuGroup=function(b,a){m[b]=a||100};g.addMenuItem=function(a,c){m[c.group]&&(l[a]=new CKEDITOR.menuItem(this,a,c))};g.addMenuItems=function(a){for(var c in a)this.addMenuItem(c,a[c])};g.getMenuItem=function(a){return l[a]};g.removeMenuItem=function(a){delete l[a]}}}); +(function(){function g(a){a.sort(function(a,c){return a.group<c.group?-1:a.group>c.group?1:a.order<c.order?-1:a.order>c.order?1:0})}var h='<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="{role}" aria-haspopup="{hasPopup}" aria-disabled="{disabled}" {ariaChecked}';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress="return false;"');CKEDITOR.env.gecko&& +(h+=' onblur="this.style.cssText = this.style.cssText;"');var h=h+(' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">'),m=CKEDITOR.addTemplate("menuItem",h+'<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>'), +l=CKEDITOR.addTemplate("menuArrow",'<span class="cke_menuarrow"><span>{label}</span></span>');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var c=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),k=c.block.attributes=c.attributes||{};!k.role&&(k.role="menu");this._.panelDefinition=c},_:{onShow:function(){var a= +this.editor.getSelection(),b=a&&a.getStartElement(),c=this.editor.elementPath(),k=this._.listeners;this.removeAll();for(var e=0;e<k.length;e++){var j=k[e](b,a,c);if(j)for(var i in j){var f=this.editor.getMenuItem(i);if(f&&(!f.command||this.editor.getCommand(f.command).state))f.state=j[i],this.add(f)}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):27==a&&this.hide(1);return!1}, +onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,c=this.items[a];if(c=c.getItems&&c.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var k in c){var e=this.editor.getMenuItem(k);e&&(e.state=c[k],b.add(e))}var j=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+(""+a));setTimeout(function(){b.show(j, +2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,b,c,k){if(!this.parent&&(this._.onShow(),!this.items.length))return;var b=b||("rtl"==this.editor.lang.dir?2:1),e=this.items,j=this.editor,i=this._.panel,f=this._.element;if(!i){i=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);i.onEscape=CKEDITOR.tools.bind(function(a){if(!1=== +this._.onEscape(a))return!1},this);i.onShow=function(){i._.panel.getHolderElement().getParent().addClass("cke cke_reset_all")};i.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);f=i.addBlock(this.id,this._.panelDefinition.block);f.autoSize=!0;var d=f.keys;d[40]="next";d[9]="next";d[38]="prev";d[CKEDITOR.SHIFT+9]="prev";d["rtl"==j.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";d[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(d[13]="mouseup");f=this._.element= +f.element;d=f.getDocument();d.getBody().setStyle("overflow","hidden");d.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,j.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b= +this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}g(e);for(var d=j.elementPath(),d=['<div class="cke_menu'+(d&&d.direction()!=j.lang.dir?" cke_mixed_dir_content":"")+'" role="presentation">'],h=e.length,m=h&&e[0].group,l=0;l<h;l++){var n=e[l];m!=n.group&&(d.push('<div class="cke_menuseparator" role="separator"></div>'),m=n.group);n.render(this,l,d)}d.push("</div>");f.setHtml(d.join(""));CKEDITOR.ui.fire("ready", +this);this.parent?this.parent._.panel.showAsChild(i,this.id,a,b,c,k):i.showBlock(this.id,a,b,c,k);j.fire("menuShow",[i])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,c){CKEDITOR.tools.extend(this,c,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(a,b,c){var h=a.id+(""+ +b),e="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,j="",i=e==CKEDITOR.TRISTATE_ON?"on":e==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(j=' aria-checked="'+(e==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var f=this.getItems,d="&#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",g=this.name;this.icon&&!/\./.test(this.icon)&&(g=this.icon);a={id:h,name:this.name,iconName:g,label:this.label,cls:this.className||"",state:i,hasPopup:f?"true": +"false",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,"rtl"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:d}):"",role:this.role?this.role:"menuitem",ariaChecked:j};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,c){a.on("contextmenu",function(a){var a=a.data,b=CKEDITOR.env.webkit?d:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!c||!b){a.preventDefault();var e=a.getTarget().getDocument(),f=a.getTarget().getDocument().getDocumentElement(), +b=!e.equals(CKEDITOR.document),e=e.getWindow().getScrollPosition(),g=b?a.$.clientX:a.$.pageX||e.x+a.$.clientX,h=b?a.$.clientY:a.$.pageY||e.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(f,null,g,h)},CKEDITOR.env.ie?200:0,this)}},this);if(CKEDITOR.env.webkit){var d,b=function(){d=0};a.on("keydown",function(a){d=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",b);a.on("contextmenu",b)}},open:function(a,c,d,b){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement(); +this.editor.selectionChange(1);this.show(a,c,d,b)}}})},beforeInit:function(a){var c=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){c.addTarget(a.editable(),!1!==a.config.browserContextMenuOnCtrl)});a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});CKEDITOR.plugins.add("resize",{init:function(b){var f,g,n,o,a=b.config,q=b.ui.spaceId("resizer"),h=b.element?b.element.getDirection(1):"ltr";!a.resize_dir&&(a.resize_dir="vertical");void 0==a.resize_maxWidth&&(a.resize_maxWidth=3E3);void 0==a.resize_maxHeight&&(a.resize_maxHeight=3E3);void 0==a.resize_minWidth&&(a.resize_minWidth=750);void 0==a.resize_minHeight&&(a.resize_minHeight=250);if(!1!==a.resize_enabled){var c=null,i=("both"==a.resize_dir||"horizontal"==a.resize_dir)&&a.resize_minWidth!=a.resize_maxWidth, +l=("both"==a.resize_dir||"vertical"==a.resize_dir)&&a.resize_minHeight!=a.resize_maxHeight,j=function(d){var e=f,m=g,c=e+(d.data.$.screenX-n)*("rtl"==h?-1:1),d=m+(d.data.$.screenY-o);i&&(e=Math.max(a.resize_minWidth,Math.min(c,a.resize_maxWidth)));l&&(m=Math.max(a.resize_minHeight,Math.min(d,a.resize_maxHeight)));b.resize(i?e:null,m)},k=function(){CKEDITOR.document.removeListener("mousemove",j);CKEDITOR.document.removeListener("mouseup",k);b.document&&(b.document.removeListener("mousemove",j),b.document.removeListener("mouseup", +k))},p=CKEDITOR.tools.addFunction(function(d){c||(c=b.getResizable());f=c.$.offsetWidth||0;g=c.$.offsetHeight||0;n=d.screenX;o=d.screenY;a.resize_minWidth>f&&(a.resize_minWidth=f);a.resize_minHeight>g&&(a.resize_minHeight=g);CKEDITOR.document.on("mousemove",j);CKEDITOR.document.on("mouseup",k);b.document&&(b.document.on("mousemove",j),b.document.on("mouseup",k));d.preventDefault&&d.preventDefault()});b.on("destroy",function(){CKEDITOR.tools.removeFunction(p)});b.on("uiSpace",function(a){if("bottom"== +a.data.space){var e="";i&&!l&&(e=" cke_resizer_horizontal");!i&&l&&(e=" cke_resizer_vertical");var c='<span id="'+q+'" class="cke_resizer'+e+" cke_resizer_"+h+'" title="'+CKEDITOR.tools.htmlEncode(b.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+p+', event)">'+("ltr"==h?"◢":"◣")+"</span>";"ltr"==h&&"ltr"==e?a.data.html+=c:a.data.html=c+a.data.html}},b,null,100);b.on("maximize",function(a){b.ui.space("resizer")[a.data==CKEDITOR.TRISTATE_ON?"hide":"show"]()})}}});(function(){var c='<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}" aria-disabled="{ariaDisabled}"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(c+=' onblur="this.style.cssText = this.style.cssText;"');var c=c+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+ +(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"'),c=c+'>&nbsp;</span><span id="{id}_label" class="cke_button_label cke_button__{name}_label" aria-hidden="false">{label}</span>{arrowHtml}</a>',m=CKEDITOR.addTemplate("buttonArrow",'<span class="cke_button_arrow">'+(CKEDITOR.env.hc?"&#9660;":"")+"</span>"),n=CKEDITOR.addTemplate("button",c);CKEDITOR.plugins.add("button", +{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,b){var c=CKEDITOR.env,i=this._.id=CKEDITOR.tools.getNextId(),f="",e=this.command,k;this._.editor=a;var d={id:i,button:this, +editor:a,focus:function(){CKEDITOR.document.getById(i).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},o=CKEDITOR.tools.addFunction(function(a){if(d.onkey)return a=new CKEDITOR.dom.event(a),!1!==d.onkey(d,a.getKeystroke())}),p=CKEDITOR.tools.addFunction(function(a){var b;d.onfocus&&(b=!1!==d.onfocus(d,new CKEDITOR.dom.event(a)));return b}),l=0;d.clickFn=k=CKEDITOR.tools.addFunction(function(){l&&(a.unlockSelection(1),l=0);d.execute()});if(this.modes){var j= +{},g=function(){var b=a.mode;b&&(b=this.modes[b]?void 0!=j[b]?j[b]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,b=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:b,this.setState(b),this.refresh&&this.refresh())};a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(j[a.mode]=this._.state)},this);a.on("activeFilterChange",g,this);a.on("mode",g,this);!this.readOnly&&a.on("readOnly",g,this)}else if(e&&(e=a.getCommand(e)))e.on("state",function(){this.setState(e.state)}, +this),f+=e.state==CKEDITOR.TRISTATE_ON?"on":e.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";if(this.directional)a.on("contentDirChanged",function(b){var c=CKEDITOR.document.getById(this._.id),d=c.getFirst(),b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(h,"rtl"==b,this.icon,this.iconOffset))},this);e||(f+="off");var h=g=this.name||this.command;this.icon&&!/\./.test(this.icon)&&(h=this.icon,this.icon= +null);c={id:i,name:g,iconName:h,label:this.label,cls:this.className||"",state:f,ariaDisabled:"disabled"==f?"true":"false",title:this.title,titleJs:c.gecko&&!c.hc?"":(this.title||"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:o,focusFn:p,clickFn:k,style:CKEDITOR.skin.getIconStyle(h,"rtl"==a.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?m.output():""};n.output(c,b);if(this.onRender)this.onRender();return d},setState:function(a){if(this._.state==a)return!1;this._.state= +a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled"),this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+"_label").setText(a)):a==CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",!0):b.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature; +var b=this;!this.allowedContent&&(!this.requiredContent&&this.command)&&(b=a.getCommand(this.command)||b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}})();(function(){function w(a){function d(){for(var b=g(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||n(a),f=0;f<e.length;f++){var k=e[f];if("/"!=k){"string"==typeof k&&(k=e[f]={name:k});var i,d=k.groups;if(d)for(var h=0;h<d.length;h++)i=d[h],(i=b[i])&&c(k,i);(i=b[k.name])&&c(k,i)}}return e}function g(){var b={},c,f,e;for(c in a.ui.items)f=a.ui.items[c],e=f.toolbar||"others",e=e.split(","),f=e[0],e=parseInt(e[1]||-1,10),b[f]||(b[f]=[]),b[f].push({name:c,order:e});for(f in b)b[f]=b[f].sort(function(b, +a){return b.order==a.order?0:0>a.order?-1:0>b.order?1:b.order<a.order?-1:1});return b}function c(c,e){if(e.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var f;f=e.shift();)if(f="string"==typeof f?f:f.name,!b||-1==CKEDITOR.tools.indexOf(b,f))(f=a.ui.create(f))&&a.addFeature(f)&&c.items.push(f)}}function h(b){var a=[],e,d,h;for(e=0;e<b.length;++e)d=b[e],h={},"/"==d?a.push(d):CKEDITOR.tools.isArray(d)?(c(h,CKEDITOR.tools.clone(d)),a.push(h)):d.items&&(c(h,CKEDITOR.tools.clone(d.items)), +h.name=d.name,a.push(h));return a}var b=a.config.removeButtons,b=b&&b.split(","),e=a.config.toolbar;"string"==typeof e&&(e=a.config["toolbar_"+e]);return a.toolbar=e?h(e):d()}function n(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list", +"indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var u=function(){this.toolbars=[];this.focusCommandExecuted=!1};u.prototype.focus=function(){for(var a=0,d;d=this.toolbars[a++];)for(var g=0,c;c=d.items[g++];)if(c.focus){c.focus();return}};var x={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()}, +100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(a){var d,g=function(c,h){var b,e="rtl"==a.lang.dir,j=a.config.toolbarGroupCycling,o=e?37:39,e=e?39:37,j=void 0===j||j;switch(h){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==h?(b?b.next:c.toolbar.next)||a.toolbox.toolbars[0]:(b?b.previous:c.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],b.items.length)for(c=b.items[d?b.items.length-1:0];c&&!c.focus;)(c=d?c.previous:c.next)|| +(b=0);c&&c.focus();return!1;case o:b=c;do b=b.next,!b&&j&&(b=c.toolbar.items[0]);while(b&&!b.focus);b?b.focus():g(c,9);return!1;case 40:return c.button&&c.button.hasArrow?(a.once("panelShow",function(b){b.data._.panel._.currentBlock.onKeyDown(40)}),c.execute()):g(c,40==h?o:e),!1;case e:case 38:b=c;do b=b.previous,!b&&j&&(b=c.toolbar.items[c.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(d=1,g(c,CKEDITOR.SHIFT+9),d=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return c.execute(), +!1}return!0};a.on("uiSpace",function(c){if(c.data.space==a.config.toolbarLocation){c.removeListener();a.toolbox=new u;var d=CKEDITOR.tools.getNextId(),b=['<span id="',d,'" class="cke_voice_label">',a.lang.toolbar.toolbars,"</span>",'<span id="'+a.ui.spaceId("toolbox")+'" class="cke_toolbox" role="group" aria-labelledby="',d,'" onmousedown="return false;">'],d=!1!==a.config.toolbarStartupExpanded,e,j;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&b.push('<span class="cke_toolbox_main"'+ +(d?">":' style="display:none">'));for(var o=a.toolbox.toolbars,f=w(a),k=0;k<f.length;k++){var i,l=0,r,m=f[k],s;if(m)if(e&&(b.push("</span>"),j=e=0),"/"===m)b.push('<span class="cke_toolbar_break"></span>');else{s=m.items||m;for(var t=0;t<s.length;t++){var p=s[t],n;if(p)if(p.type==CKEDITOR.UI_SEPARATOR)j=e&&p;else{n=!1!==p.canGroup;if(!l){i=CKEDITOR.tools.getNextId();l={id:i,items:[]};r=m.name&&(a.lang.toolbar.toolbarGroups[m.name]||m.name);b.push('<span id="',i,'" class="cke_toolbar"',r?' aria-labelledby="'+ +i+'_label"':"",' role="toolbar">');r&&b.push('<span id="',i,'_label" class="cke_voice_label">',r,"</span>");b.push('<span class="cke_toolbar_start"></span>');var q=o.push(l)-1;0<q&&(l.previous=o[q-1],l.previous.next=l)}n?e||(b.push('<span class="cke_toolgroup" role="presentation">'),e=1):e&&(b.push("</span>"),e=0);i=function(c){c=c.render(a,b);q=l.items.push(c)-1;if(q>0){c.previous=l.items[q-1];c.previous.next=c}c.toolbar=l;c.onkey=g;c.onfocus=function(){a.toolbox.focusCommandExecuted||a.focus()}}; +j&&(i(j),j=0);i(p)}}e&&(b.push("</span>"),j=e=0);l&&b.push('<span class="cke_toolbar_end"></span></span>')}}a.config.toolbarCanCollapse&&b.push("</span>");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var v=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});a.on("destroy",function(){CKEDITOR.tools.removeFunction(v)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(b){var a=b.ui.space("toolbar_collapser"),c=a.getPrevious(),e=b.ui.space("contents"), +d=c.getParent(),f=parseInt(e.$.style.height,10),h=d.$.offsetHeight,g=a.hasClass("cke_toolbox_collapser_min");g?(c.show(),a.removeClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarCollapse)):(c.hide(),a.addClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarExpand));a.getFirst().setText(g?"▲":"◀");e.setStyle("height",f-(d.$.offsetHeight-h)+"px");b.fire("resize")},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit? +189:109),"toolbarCollapse");b.push('<a title="'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id="'+a.ui.spaceId("toolbar_collapser")+'" tabIndex="-1" class="cke_toolbox_collapser');d||b.push(" cke_toolbox_collapser_min");b.push('" onclick="CKEDITOR.tools.callFunction('+v+')">','<span class="cke_arrow">&#9650;</span>',"</a>")}b.push("</span>");c.data.html+=b.join("")}});a.on("destroy",function(){if(this.toolbox){var a,d=0,b,e,g;for(a=this.toolbox.toolbars;d<a.length;d++){e=a[d].items; +for(b=0;b<e.length;b++)g=e[b],g.clickFn&&CKEDITOR.tools.removeFunction(g.clickFn),g.keyDownFn&&CKEDITOR.tools.removeFunction(g.keyDownFn)}}});a.on("uiReady",function(){var c=a.ui.space("toolbox");c&&a.focusManager.add(c,1)});a.addCommand("toolbarFocus",x);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('<span class="cke_toolbar_separator" role="separator"></span>');return{}}}}})}}); +CKEDITOR.ui.prototype.addToolbarGroup=function(a,d,g){var c=n(this.editor),h=0===d,b={name:a};if(g){if(g=CKEDITOR.tools.search(c,function(a){return a.name==g})){!g.groups&&(g.groups=[]);if(d&&(d=CKEDITOR.tools.indexOf(g.groups,d),0<=d)){g.groups.splice(d+1,0,a);return}h?g.groups.splice(0,0,a):g.groups.push(a);return}d=null}d&&(d=CKEDITOR.tools.indexOf(c,function(a){return a.name==d}));h?c.splice(0,0,a):"number"==typeof d?c.splice(d+1,0,b):c.push(a)}})();CKEDITOR.UI_SEPARATOR="separator"; +CKEDITOR.config.toolbarLocation="top";(function(){var k;function n(a,c){function j(d){d=i.list[d];if(d.equals(a.editable())||"true"==d.getAttribute("contenteditable")){var e=a.createRange();e.selectNodeContents(d);e.select()}else a.getSelection().selectElement(d);a.focus()}function s(){l&&l.setHtml(o);delete i.list}var m=a.ui.spaceId("path"),l,i=a._.elementsPath,n=i.idBase;c.html+='<span id="'+m+'_label" class="cke_voice_label">'+a.lang.elementspath.eleLabel+'</span><span id="'+m+'" class="cke_path" role="group" aria-labelledby="'+m+ +'_label">'+o+"</span>";a.on("uiReady",function(){var d=a.ui.space("path");d&&a.focusManager.add(d,1)});i.onClick=j;var t=CKEDITOR.tools.addFunction(j),u=CKEDITOR.tools.addFunction(function(d,e){var g=i.idBase,b,e=new CKEDITOR.dom.event(e);b="rtl"==a.lang.dir;switch(e.getKeystroke()){case b?39:37:case 9:return(b=CKEDITOR.document.getById(g+(d+1)))||(b=CKEDITOR.document.getById(g+"0")),b.focus(),!1;case b?37:39:case CKEDITOR.SHIFT+9:return(b=CKEDITOR.document.getById(g+(d-1)))||(b=CKEDITOR.document.getById(g+ +(i.list.length-1))),b.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return j(d),!1}return!0});a.on("selectionChange",function(){a.editable();for(var d=[],e=i.list=[],g=[],b=i.filters,c=!0,j=a.elementPath().elements,f,k=j.length;k--;){var h=j[k],p=0;f=h.data("cke-display-name")?h.data("cke-display-name"):h.data("cke-real-element-type")?h.data("cke-real-element-type"):h.getName();c=h.hasAttribute("contenteditable")?"true"==h.getAttribute("contenteditable"):c;!c&&!h.hasAttribute("contenteditable")&& +(p=1);for(var q=0;q<b.length;q++){var r=b[q](h,f);if(!1===r){p=1;break}f=r||f}p||(e.unshift(h),g.unshift(f))}e=e.length;for(b=0;b<e;b++)f=g[b],c=a.lang.elementspath.eleTitle.replace(/%1/,f),f=v.output({id:n+b,label:c,text:f,jsTitle:"javascript:void('"+f+"')",index:b,keyDownFn:u,clickFn:t}),d.unshift(f);l||(l=CKEDITOR.document.getById(m));g=l;g.setHtml(d.join("")+o);a.fire("elementsPathUpdate",{space:g})});a.on("readOnly",s);a.on("contentDomUnload",s);a.addCommand("elementsPathFocus",k);a.setKeystroke(CKEDITOR.ALT+ +122,"elementsPathFocus")}k={editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}};var o='<span class="cke_path_empty">&nbsp;</span>',c="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(c+=' onblur="this.style.cssText = this.style.cssText;"');var v=CKEDITOR.addTemplate("pathItem",'<a id="{id}" href="{jsTitle}" tabindex="-1" class="cke_path_item" title="{label}"'+ +c+' hidefocus="true" onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role="button" aria-label="{label}">{text}</a>');CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(c){"bottom"==c.data.space&&n(a,c.data)})}})})();(function(){function l(e,c,b){b=e.config.forceEnterMode||b;"wysiwyg"==e.mode&&(c||(c=e.activeEnterMode),e.elementPath().isContextFor("p")||(c=CKEDITOR.ENTER_BR,b=1),e.fire("saveSnapshot"),c==CKEDITOR.ENTER_BR?o(e,c,null,b):p(e,c,null,b),e.fire("saveSnapshot"))}function q(e){for(var e=e.getSelection().getRanges(!0),c=e.length-1;0<c;c--)e[c].deleteContents();return e[0]}CKEDITOR.plugins.add("enterkey",{init:function(e){e.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(c){l(c)}}); +e.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(c){l(c,c.activeShiftEnterMode,1)}});e.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var t=CKEDITOR.dom.walker.whitespaces(),u=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(e,c,b,i){if(b=b||q(e)){var f=b.document,j=b.checkStartOfBlock(),h=b.checkEndOfBlock(),a=e.elementPath(b.startContainer).block,k=c==CKEDITOR.ENTER_DIV?"div":"p",d;if(j&&h){if(a&&(a.is("li")||a.getParent().is("li"))){b= +a.getParent();d=b.getParent();var i=!a.hasPrevious(),m=!a.hasNext(),k=e.getSelection(),g=k.createBookmarks(),j=a.getDirection(1),h=a.getAttribute("class"),n=a.getAttribute("style"),l=d.getDirection(1)!=j,e=e.enterMode!=CKEDITOR.ENTER_BR||l||n||h;if(d.is("li"))if(i||m)a[i?"insertBefore":"insertAfter"](d);else a.breakParent(d);else{if(e)if(d=f.createElement(c==CKEDITOR.ENTER_P?"p":"div"),l&&d.setAttribute("dir",j),n&&d.setAttribute("style",n),h&&d.setAttribute("class",h),a.moveChildren(d),i||m)d[i? +"insertBefore":"insertAfter"](b);else a.breakParent(b),d.insertAfter(b);else if(a.appendBogus(!0),i||m)for(;f=a[i?"getFirst":"getLast"]();)f[i?"insertBefore":"insertAfter"](b);else for(a.breakParent(b);f=a.getLast();)f.insertAfter(b);a.remove()}k.selectBookmarks(g);return}if(a&&a.getParent().is("blockquote")){a.breakParent(a.getParent());a.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||a.getPrevious().remove();a.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||a.getNext().remove(); +b.moveToElementEditStart(a);b.select();return}}else if(a&&a.is("pre")&&!h){o(e,c,b,i);return}if(h=b.splitBlock(k)){c=h.previousBlock;a=h.nextBlock;e=h.wasStartOfBlock;j=h.wasEndOfBlock;if(a)g=a.getParent(),g.is("li")&&(a.breakParent(g),a.move(a.getNext(),1));else if(c&&(g=c.getParent())&&g.is("li"))c.breakParent(g),g=c.getNext(),b.moveToElementEditStart(g),c.move(c.getPrevious());if(!e&&!j)a.is("li")&&(d=b.clone(),d.selectNodeContents(a),d=new CKEDITOR.dom.walker(d),d.evaluator=function(a){return!(u(a)|| +t(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(g=d.next())&&(g.type==CKEDITOR.NODE_ELEMENT&&g.is("ul","ol"))&&(CKEDITOR.env.needsBrFiller?f.createElement("br"):f.createText(" ")).insertBefore(g)),a&&b.moveToElementEditStart(a);else{if(c){if(c.is("li")||!r.test(c.getName())&&!c.is("pre"))d=c.clone()}else a&&(d=a.clone());d?i&&!d.is("li")&&d.renameNode(k):g&&g.is("li")?d=g:(d=f.createElement(k),c&&(m=c.getDirection())&&d.setAttribute("dir", +m));if(f=h.elementPath){i=0;for(k=f.elements.length;i<k;i++){g=f.elements[i];if(g.equals(f.block)||g.equals(f.blockLimit))break;CKEDITOR.dtd.$removeEmpty[g.getName()]&&(g=g.clone(),d.moveChildren(g),d.append(g))}}d.appendBogus();d.getParent()||b.insertNode(d);d.is("li")&&d.removeAttribute("value");if(CKEDITOR.env.ie&&e&&(!j||!c.getChildCount()))b.moveToElementEditStart(j?c:d),b.select();b.moveToElementEditStart(e&&!j?a:d)}b.select();b.scrollIntoView()}}},enterBr:function(e,c,b,i){if(b=b||q(e)){var f= +b.document,j=b.checkEndOfBlock(),h=new CKEDITOR.dom.elementPath(e.getSelection().getStartElement()),a=h.block,h=a&&h.block.getName();!i&&"li"==h?p(e,c,b,i):(!i&&j&&r.test(h)?(j=a.getDirection())?(f=f.createElement("div"),f.setAttribute("dir",j),f.insertAfter(a),b.setStart(f,0)):(f.createElement("br").insertAfter(a),CKEDITOR.env.gecko&&f.createText("").insertAfter(a),b.setStartAt(a.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==h&&CKEDITOR.env.ie&& +8>CKEDITOR.env.version?f.createText("\r"):f.createElement("br"),b.deleteContents(),b.insertNode(a),CKEDITOR.env.needsBrFiller?(f.createText("").insertAfter(a),j&&a.getParent().appendBogus(),a.getNext().$.nodeValue="",b.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)):b.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),b.collapse(!0),b.select(),b.scrollIntoView())}}};var s=CKEDITOR.plugins.enterkey,o=s.enterBr,p=s.enterBlock,r=/^h[1-6]$/})();(function(){function j(a,b){var d={},e=[],f={nbsp:" ",shy:"­",gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},a=a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(a,h){var c=b?"&"+h+";":f[h];d[c]=b?f[h]:"&"+h+";";e.push(c);return""});if(!b&&a){var a=a.split(","),c=document.createElement("div"),g;c.innerHTML="&"+a.join(";&")+";";g=c.innerHTML;c=null;for(c=0;c<g.length;c++){var i=g.charAt(c);d[i]="&"+a[c]+";";e.push(i)}}d.regex=e.join(b?"|":"");return d}CKEDITOR.plugins.add("entities",{afterInit:function(a){var b= +a.config;if(a=(a=a.dataProcessor)&&a.htmlFilter){var d=[];!1!==b.basicEntities&&d.push("nbsp,gt,lt,amp");b.entities&&(d.length&&d.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"), +b.entities_latin&&d.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),b.entities_greek&&d.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"), +b.entities_additional&&d.push(b.entities_additional));var e=j(d.join(",")),f=e.regex?"["+e.regex+"]":"a^";delete e.regex;b.entities&&b.entities_processNumerical&&(f="[^ -~]|"+f);var f=RegExp(f,"g"),c=function(a){return b.entities_processNumerical=="force"||!e[a]?"&#"+a.charCodeAt(0)+";":e[a]},g=j("nbsp,gt,lt,amp,shy",!0),i=RegExp(g.regex,"g"),k=function(a){return g[a]};a.addRules({text:function(a){return a.replace(i,k).replace(f,c)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})(); +CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0;CKEDITOR.config.entities_additional="#39";CKEDITOR.plugins.add("popup"); +CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(e,a,b,d){a=a||"80%";b=b||"70%";"string"==typeof a&&(1<a.length&&"%"==a.substr(a.length-1,1))&&(a=parseInt(window.screen.width*parseInt(a,10)/100,10));"string"==typeof b&&(1<b.length&&"%"==b.substr(b.length-1,1))&&(b=parseInt(window.screen.height*parseInt(b,10)/100,10));640>a&&(a=640);420>b&&(b=420);var f=parseInt((window.screen.height-b)/2,10),g=parseInt((window.screen.width-a)/2,10),d=(d||"location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes")+",width="+ +a+",height="+b+",top="+f+",left="+g,c=window.open("",null,d,!0);if(!c)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(c.moveTo(g,f),c.resizeTo(a,b)),c.focus(),c.location.href=e}catch(h){window.open(e,null,d,!0)}return!0}});(function(){function g(a,c){var d=[];if(c)for(var b in c)d.push(b+"="+encodeURIComponent(c[b]));else return a;return a+(-1!=a.indexOf("?")?"&":"?")+d.join("&")}function i(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function k(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+i(a.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",a=c.config["filebrowser"+i(a.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||"70%", +b=this.filebrowser.params||{};b.CKEditor=c.name;b.CKEditorFuncNum=c._.filebrowserFn;b.langCode||(b.langCode=c.langCode);b=g(this.filebrowser.url,b);c.popup(b,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function l(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return!a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value||!a.getContentElement(this["for"][0],this["for"][1]).getAction()?!1:!0}function m(a,c,d){var b=d.params||{}; +b.CKEditor=a.name;b.CKEditorFuncNum=a._.filebrowserFn;b.langCode||(b.langCode=a.langCode);c.action=g(d.url,b);c.filebrowser=d}function j(a,c,d,b){if(b&&b.length)for(var e,g=b.length;g--;)if(e=b[g],("hbox"==e.type||"vbox"==e.type||"fieldset"==e.type)&&j(a,c,d,e.children),e.filebrowser)if("string"==typeof e.filebrowser&&(e.filebrowser={action:"fileButton"==e.type?"QuickUpload":"Browse",target:e.filebrowser}),"Browse"==e.filebrowser.action){var f=e.filebrowser.url;void 0===f&&(f=a.config["filebrowser"+ +i(c)+"BrowseUrl"],void 0===f&&(f=a.config.filebrowserBrowseUrl));f&&(e.onClick=k,e.filebrowser.url=f,e.hidden=!1)}else if("QuickUpload"==e.filebrowser.action&&e["for"]&&(f=e.filebrowser.url,void 0===f&&(f=a.config["filebrowser"+i(c)+"UploadUrl"],void 0===f&&(f=a.config.filebrowserUploadUrl)),f)){var h=e.onClick;e.onClick=function(a){var b=a.sender;return h&&h.call(b,a)===false?false:l.call(b,a)};e.filebrowser.url=f;e.hidden=!1;m(a,d.getContents(e["for"][0]).get(e["for"][1]),e.filebrowser)}}function h(a, +c,d){if(-1!==d.indexOf(";")){for(var d=d.split(";"),b=0;b<d.length;b++)if(h(a,c,d[b]))return!0;return!1}return(a=a.getContents(c).get(d).filebrowser)&&a.url}function n(a,c){var d=this._.filebrowserSe.getDialog(),b=this._.filebrowserSe["for"],e=this._.filebrowserSe.filebrowser.onSelect;b&&d.getContentElement(b[0],b[1]).reset();if(!("function"==typeof c&&!1===c.call(this._.filebrowserSe))&&!(e&&!1===e.call(this._.filebrowserSe,a,c))&&("string"==typeof c&&c&&alert(c),a&&(b=this._.filebrowserSe,d=b.getDialog(), +b=b.filebrowser.target||null)))if(b=b.split(":"),e=d.getContentElement(b[0],b[1]))e.setValue(a),d.selectPage(b[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(n,a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var c=a.data.definition,d,b=0;b<c.contents.length;++b)if(d=c.contents[b])j(a.editor,a.data.name,c,d.elements), +d.hidden&&d.filebrowser&&(d.hidden=!h(c,d.id,d.filebrowser))})})();(function(){function q(a){var i=a.config,l=a.fire("uiSpace",{space:"top",html:""}).html,o=function(){function f(a,c,e){b.setStyle(c,t(e));b.setStyle("position",a)}function e(a){var b=r.getDocumentPosition();switch(a){case "top":f("absolute","top",b.y-m-n);break;case "pin":f("fixed","top",q);break;case "bottom":f("absolute","top",b.y+(c.height||c.bottom-c.top)+n)}j=a}var j,r,k,c,h,m,s,l=i.floatSpaceDockedOffsetX||0,n=i.floatSpaceDockedOffsetY||0,p=i.floatSpacePinnedOffsetX||0,q=i.floatSpacePinnedOffsetY|| +0;return function(d){if(r=a.editable())if(d&&"focus"==d.name&&b.show(),b.removeStyle("left"),b.removeStyle("right"),k=b.getClientRect(),c=r.getClientRect(),h=g.getViewPaneSize(),m=k.height,s="pageXOffset"in g.$?g.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft,j){m+n<=c.top?e("top"):m+n>h.height-c.bottom?e("pin"):e("bottom");var d=h.width/2,d=0<c.left&&c.right<h.width&&c.width>k.width?"rtl"==a.config.contentsLangDirection?"right":"left":d-c.left>c.right-d?"left":"right",f;k.width>h.width? +(d="left",f=0):(f="left"==d?0<c.left?c.left:0:c.right<h.width?h.width-c.right:0,f+k.width>h.width&&(d="left"==d?"right":"left",f=0));b.setStyle(d,t(("pin"==j?p:l)+f+("pin"==j?0:"left"==d?s:-s)))}else j="pin",e("pin"),o(d)}}();if(l){var b=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(u.output({content:l,id:a.id,langDir:a.lang.dir,langCode:a.langCode,name:a.name,style:"display:none;z-index:"+(i.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.lang.editorPanel+", "+ +a.name}))),p=CKEDITOR.tools.eventsBuffer(500,o),e=CKEDITOR.tools.eventsBuffer(100,o);b.unselectable();b.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(b){o(b);a.on("change",p.input);g.on("scroll",e.input);g.on("resize",e.input)});a.on("blur",function(){b.hide();a.removeListener("change",p.input);g.removeListener("scroll",e.input);g.removeListener("resize",e.input)});a.on("destroy",function(){g.removeListener("scroll",e.input);g.removeListener("resize", +e.input);b.clearCustomData();b.remove()});a.focusManager.hasFocus&&b.show();a.focusManager.add(b,1)}}var u=CKEDITOR.addTemplate("floatcontainer",'<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko?" ":"")+'" lang="{langCode}" role="application" style="{style}" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>'), +g=CKEDITOR.document.getWindow(),t=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(a){a.on("loaded",function(){q(this)},null,null,20)}})})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var f=CKEDITOR.addTemplate("panel-list",'<ul role="presentation" class="cke_panel_list">{items}</ul>'),g=CKEDITOR.addTemplate("panel-list-item",'<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')" {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>'),h=CKEDITOR.addTemplate("panel-list-group", +'<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>'),i=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){var b=b||{},c=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(c["aria-multiselectable"]=!0);!c.role&&(c.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role", +c.role);c=this.keys;c[40]="next";c[9]="next";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(c[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=f.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a);delete this._.started}},getClick:function(){this._.click||(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a); +if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,c){var d=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=d;var e;e=CKEDITOR.tools.htmlEncodeAttr(a).replace(i,"\\'");a={id:d,val:e,onclick:CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(c||a),text:b||a};this._.pendingList.push(g.output(a))},startGroup:function(a){this._.close(); +var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(h.output({id:b,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join(""));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display","none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display", +"none")},showAll:function(){var a=this._.items,b=this._.groups,c=this.element.getDocument(),d;for(d in a)c.getById(a[d]).setStyle("display","");for(var e in b)a=c.getById(b[e]),d=a.getNext(),a.setStyle("display",""),d&&"ul"==d.getName()&&d.setStyle("display","")},mark:function(a){this.multiSelect||this.unmarkAll();var a=this._.items[a],b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)}, +unmark:function(a){var b=this.element.getDocument(),a=this._.items[a],c=b.getById(a);c.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(c)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),c;for(c in a){var d=a[c];b.getById(d).removeClass("cke_selected");b.getById(d+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")}, +focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),c,d=-1;if(a)for(c=this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++d);){if(a.equals(c)){this._.focusIndex=d;break}}else this.element.focus();c&&setTimeout(function(){c.focus()},0)}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}}); +(function(){var d='<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" hidefocus=true title="{title}" tabindex="-1"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":'" href="javascript:void(\'{titleJs}\')"')+' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(d+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(d+=' onblur="this.style.cssText = this.style.cssText;"'); +var d=d+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">'+(CKEDITOR.env.hc?"&#9660;":CKEDITOR.env.air?"&nbsp;":"")+"</span></span></a></span>"), +i=CKEDITOR.addTemplate("combo",d);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}}, +proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join("")},render:function(a,b){function g(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var c=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(c=CKEDITOR.TRISTATE_DISABLED);this.setState(c);this.setValue("");c!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var d=CKEDITOR.env,h="cke_"+this.id,e=CKEDITOR.tools.addFunction(function(b){j&&(a.unlockSelection(1),j=0);c.execute(b)}, +this),f=this,c={id:h,combo:this,focus:function(){CKEDITOR.document.getById(h).getChild(1).focus()},execute:function(c){var b=f._;if(b.state!=CKEDITOR.TRISTATE_DISABLED)if(f.createPanel(a),b.on)b.panel.hide();else{f.commit();var d=f.getValue();d?b.list.mark(d):b.list.unmarkAll();b.panel.showBlock(f.id,new CKEDITOR.dom.element(c),4)}},clickFn:e};a.on("activeFilterChange",g,this);a.on("mode",g,this);a.on("selectionChange",g,this);!this.readOnly&&a.on("readOnly",g,this);var k=CKEDITOR.tools.addFunction(function(b, +d){var b=new CKEDITOR.dom.event(b),g=b.getKeystroke();if(40==g)a.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});switch(g){case 13:case 32:case 40:CKEDITOR.tools.callFunction(e,d);break;default:c.onkey(c,g)}b.preventDefault()}),l=CKEDITOR.tools.addFunction(function(){c.onfocus&&c.onfocus()}),j=0;c.keyDownFn=k;d={id:h,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:d.gecko&&!d.hc?"":(this.title||"").replace("'",""),keydownFn:k, +focusFn:l,clickFn:e};i.output(d,b);if(this.onRender)this.onRender();return c},createPanel:function(a){if(!this._.panel){var b=this._.panelDefinition,d=this._.panelDefinition.block,i=b.parent||CKEDITOR.document.getBody(),h="cke_combopanel__"+this.name,e=new CKEDITOR.ui.floatPanel(a,i,b),f=e.addListBlock(this.id,d),c=this;e.onShow=function(){this.element.addClass(h);c.setState(CKEDITOR.TRISTATE_ON);c._.on=1;c.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(c.onOpen)c.onOpen();a.once("panelShow", +function(){f.focus(!f.multiSelect&&c.getValue())})};e.onHide=function(b){this.element.removeClass(h);c.setState(c.modes&&c.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);c._.on=0;if(!b&&c.onClose)c.onClose()};e.onEscape=function(){e.hide(1)};f.onClick=function(a,b){c.onClick&&c.onClick.call(c,a,b);e.hide()};this._.panel=e;this._.list=f;e.getBlock(this.id).onHide=function(){c._.on=0;c.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,b){this._.value=a;var d= +this.document.getById("cke_"+this.id+"_text");d&&(!a&&!b?(b=this.label,d.addClass("cke_combo_inlinelabel")):d.removeClass("cke_combo_inlinelabel"),d.setText("undefined"!=typeof b?b:a))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},showAll:function(){this._.list.showAll()},add:function(a,b,d){this._.items[a]=d||a;this._.list.add(a, +b,d)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(a){if(this._.state!=a){var b=this.document.getById("cke_"+this.id);b.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled");this._.state=a}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&& +this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b)}})();CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(a){if(!a.blockless){for(var f=a.config,c=a.lang.format,j=f.format_tags.split(";"),d={},k=0,l=[],g=0;g<j.length;g++){var h=j[g],i=new CKEDITOR.style(f["format_"+h]);if(!a.filter.customConfig||a.filter.check(i))k++,d[h]=i,d[h]._.enterMode=a.config.enterMode,l.push(i)}0!==k&&a.ui.addRichCombo("Format",{label:c.label,title:c.panelTitle,toolbar:"styles,20",allowedContent:l,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(f.contentsCss), +multiSelect:!1,attributes:{"aria-label":c.panelTitle}},init:function(){this.startGroup(c.panelTitle);for(var a in d){var e=c["tag_"+a];this.add(a,d[a].buildPreview(e),e)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=d[b],e=a.elementPath();a[b.checkActive(e,a)?"removeStyle":"applyStyle"](b);setTimeout(function(){a.fire("saveSnapshot")},0)},onRender:function(){a.on("selectionChange",function(b){var e=this.getValue(),b=b.data.path;this.refresh();for(var c in d)if(d[c].checkActive(b,a)){c!= +e&&this.setValue(c,a.lang.format["tag_"+c]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var b in d)a.activeFilter.check(d[b])||this.hideItem(b)},refresh:function(){var b=a.elementPath();if(b){if(b.isContextFor("p"))for(var c in d)if(a.activeFilter.check(d[c]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}});CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div";CKEDITOR.config.format_p={element:"p"};CKEDITOR.config.format_div={element:"div"}; +CKEDITOR.config.format_pre={element:"pre"};CKEDITOR.config.format_address={element:"address"};CKEDITOR.config.format_h1={element:"h1"};CKEDITOR.config.format_h2={element:"h2"};CKEDITOR.config.format_h3={element:"h3"};CKEDITOR.config.format_h4={element:"h4"};CKEDITOR.config.format_h5={element:"h5"};CKEDITOR.config.format_h6={element:"h6"};(function(){var b={canUndo:!1,exec:function(a){var b=a.document.createElement("hr");a.insertElement(b)},allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(a){a.blockless||(a.addCommand("horizontalrule",b),a.ui.addButton&&a.ui.addButton("HorizontalRule",{label:a.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"}))}})})();CKEDITOR.plugins.add("htmlwriter",{init:function(b){var a=new CKEDITOR.htmlWriter;a.forceSimpleAmpersand=b.config.forceSimpleAmpersand;a.indentationChars=b.config.dataIndentationChars||"\t";b.dataProcessor.writer=a}}); +CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" />";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,a;for(a in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(a,{indent:!b[a]["#"],breakBeforeOpen:1,breakBeforeClose:!b[a]["#"],breakAfterClose:1,needsSpace:a in +b.$block&&!(a in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var a=this._.rules[b];this._.afterCloser&&(a&&a.needsSpace&&this._.needsSpace)&&this._.output.push("\n");this._.indent?this.indentation():a&&a.breakBeforeOpen&&(this.lineBreak(),this.indentation());this._.output.push("<",b);this._.afterCloser=0}, +openTagClose:function(b,a){var c=this._.rules[b];a?(this._.output.push(this.selfClosingEnd),c&&c.breakAfterClose&&(this._.needsSpace=c.needsSpace)):(this._.output.push(">"),c&&c.indent&&(this._.indentation+=this.indentationChars));c&&c.breakAfterOpen&&this.lineBreak();"pre"==b&&(this._.inPre=1)},attribute:function(b,a){"string"==typeof a&&(this.forceSimpleAmpersand&&(a=a.replace(/&amp;/g,"&")),a=CKEDITOR.tools.htmlEncodeAttr(a));this._.output.push(" ",b,'="',a,'"')},closeTag:function(b){var a=this._.rules[b]; +a&&a.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():a&&a.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("</",b,">");"pre"==b&&(this._.inPre=0);a&&a.breakAfterClose&&(this.lineBreak(),this._.needsSpace=a.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b)));this._.output.push(b)},comment:function(b){this._.indent&&this.indentation(); +this._.output.push("<\!--",b,"--\>")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0},setRules:function(b,a){var c=this._.rules[b];c?CKEDITOR.tools.extend(c,a,!0):this._.rules[b]=a}}});(function(){function k(a){var d=this.editor,b=a.document,c=b.body,e=b.getElementById("cke_actscrpt");e&&e.parentNode.removeChild(e);(e=b.getElementById("cke_shimscrpt"))&&e.parentNode.removeChild(e);CKEDITOR.env.gecko&&(c.contentEditable=!1,2E4>CKEDITOR.env.version&&(c.innerHTML=c.innerHTML.replace(/^.*<\!-- cke-content-start --\>/,""),setTimeout(function(){var a=new CKEDITOR.dom.range(new CKEDITOR.dom.document(b));a.setStart(new CKEDITOR.dom.node(c),0);d.getSelection().selectRanges([a])},0)));c.contentEditable= +!0;CKEDITOR.env.ie&&(c.hideFocus=!0,c.disabled=!0,c.removeAttribute("disabled"));delete this._.isLoadingData;this.$=c;b=new CKEDITOR.dom.document(b);this.setup();CKEDITOR.env.ie&&(b.getDocumentElement().addClass(b.$.compatMode),d.config.enterMode!=CKEDITOR.ENTER_P&&this.attachListener(b,"selectionchange",function(){var a=b.getBody(),c=d.getSelection(),e=c&&c.getRanges()[0];e&&(a.getHtml().match(/^<p>(?:&nbsp;|<br>)<\/p>$/i)&&e.startContainer.equals(a))&&setTimeout(function(){e=d.getSelection().getRanges()[0]; +if(!e.startContainer.equals("body")){a.getFirst().remove(1);e.moveToElementEditEnd(a);e.select()}},0)}));if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&10<CKEDITOR.env.version)b.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){d.editable().focus()})});try{d.document.$.execCommand("2D-position",!1,!0)}catch(g){}try{d.document.$.execCommand("enableInlineTableEditing",!1,!d.config.disableNativeTableHandles)}catch(f){}if(d.config.disableObjectResizing)try{this.getDocument().$.execCommand("enableObjectResizing", +!1,!1)}catch(h){this.attachListener(this,CKEDITOR.env.ie?"resizestart":"resize",function(a){a.data.preventDefault()})}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&"CSS1Compat"==d.document.$.compatMode)&&this.attachListener(this,"keydown",function(a){var b=a.data.getKeystroke();if(b==33||b==34)if(CKEDITOR.env.ie)setTimeout(function(){d.getSelection().scrollIntoView()},0);else if(d.window.$.innerHeight>this.$.offsetHeight){var c=d.createRange();c[b==33?"moveToElementEditStart":"moveToElementEditEnd"](this); +c.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(b,"blur",function(){try{b.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(b,"touchend",function(){a.focus()});d.document.getElementsByTag("title").getItem(0).data("cke-title",d.document.$.title);CKEDITOR.env.ie&&(d.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){if(this.status=="unloaded")this.status="ready";d.fire("contentDom");if(this._.isPendingFocus){d.focus();this._.isPendingFocus= +false}setTimeout(function(){d.fire("dataReady")},0);CKEDITOR.env.ie&&setTimeout(function(){if(d.document){var a=d.document.$.body;a.runtimeStyle.marginBottom="0px";a.runtimeStyle.marginBottom=""}},1E3)},0,this)}function l(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable=false]{min-height:0 !important}");var d=[],b;for(b in CKEDITOR.dtd.$removeEmpty)d.push("html.CSS1Compat "+b+"[contenteditable=false]");a.push(d.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&& +(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");return a.join("\n")}CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(d){function b(b){b&&b.removeListener();a.editable(new j(a, +e.$.contentWindow.document.body));a.setData(a.getData(1),d)}var c="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",c=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent(c)+"}())":"",e=CKEDITOR.dom.element.createFromHtml('<iframe src="'+c+'" frameBorder="0"></iframe>');e.setStyles({width:"100%",height:"100%"});e.addClass("cke_wysiwyg_frame cke_reset");var g=a.ui.space("contents");g.append(e);if(c=CKEDITOR.env.ie|| +CKEDITOR.env.gecko)e.on("load",b);var f=a.title,h=a.lang.common.editorHelp;f&&(CKEDITOR.env.ie&&(f+=", "+h),e.setAttribute("title",f));var f=CKEDITOR.tools.getNextId(),i=CKEDITOR.dom.element.createFromHtml('<span id="'+f+'" class="cke_voice_label">'+h+"</span>");g.append(i,1);a.on("beforeModeUnload",function(a){a.removeListener();i.remove()});e.setAttributes({"aria-describedby":f,tabIndex:a.tabIndex,allowTransparency:"true"});!c&&b();CKEDITOR.env.webkit&&(c=function(){g.setStyle("width","100%");e.hide(); +e.setSize("width",g.getSize("width"));g.removeStyle("width");e.show()},e.setCustomData("onResize",c),CKEDITOR.document.getWindow().on("resize",c));a.fire("ariaWidget",e)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var d=this.config,b=d.contentsCss;CKEDITOR.tools.isArray(b)||(d.contentsCss=b?[b]:[]);d.contentsCss.push(a)};var j=CKEDITOR.tools.createClass({$:function(a){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(k, +0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{setData:function(a,d){var b=this.editor;if(d)this.setHtml(a),b.fire("dataReady");else{this._.isLoadingData=!0;b._.dataStore={id:1};var c=b.config,e=c.fullPage,g=c.docType,f=CKEDITOR.tools.buildStyleHtml(l()).replace(/<style>/,'<style data-cke-temp="1">');e||(f+=CKEDITOR.tools.buildStyleHtml(b.config.contentsCss));var h=c.baseHref?'<base href="'+c.baseHref+'" data-cke-temp="1" />':"";e&& +(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){b.docType=g=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){b.xmlDeclaration=a;return""}));a=b.dataProcessor.toHtml(a);e?(/<body[\s|>]/.test(a)||(a="<body>"+a),/<html[\s|>]/.test(a)||(a="<html>"+a+"</html>"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$&<title></title>")):a=a.replace(/<html[^>]*>/,"$&<head><title></title></head>"),h&&(a=a.replace(/<head>/,"$&"+h)),a=a.replace(/<\/head\s*>/,f+"$&"),a=g+a):a=c.docType+'<html dir="'+ +c.contentsLangDirection+'" lang="'+(c.contentsLanguage||b.langCode)+'"><head><title>'+this._.docTitle+"</title>"+h+f+"</head><body"+(c.bodyId?' id="'+c.bodyId+'"':"")+(c.bodyClass?' class="'+c.bodyClass+'"':"")+">"+a+"</body></html>";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'<body contenteditable="true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$&<\!-- cke-content-start --\>")));c='<script id="cke_actscrpt" type="text/javascript"'+(CKEDITOR.env.ie?' defer="defer" ':"")+">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+ +this._.frameLoadedHandler+",window);wasLoaded=1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"<\/script>";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(c+='<script id="cke_shimscrpt">window.parent.CKEDITOR.tools.enableHtml5Elements(document)<\/script>');a=a.replace(/(?=\s*<\/(:?head)>)/,c);this.clearCustomData();this.clearListeners();b.fire("contentDomUnload");var i=this.getDocument();try{i.write(a)}catch(j){setTimeout(function(){i.write(a)},0)}}}, +getData:function(a){if(a)return this.getHtml();var a=this.editor,d=a.config,b=d.fullPage,c=b&&a.docType,e=b&&a.xmlDeclaration,g=this.getDocument(),b=b?g.getDocumentElement().getOuterHtml():g.getBody().getHtml();CKEDITOR.env.gecko&&d.enterMode!=CKEDITOR.ENTER_BR&&(b=b.replace(/<br>(?=\s*(:?$|<\/body>))/,""));b=a.dataProcessor.toDataFormat(b);e&&(b=e+"\n"+b);c&&(b=c+"\n"+b);return b},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:j.baseProto.focus.call(this)},detach:function(){var a= +this.editor,d=a.document,a=a.window.getFrame();j.baseProto.detach.call(this);this.clearCustomData();d.getDocumentElement().clearCustomData();a.clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);(d=a.removeCustomData("onResize"))&&d.removeListener();a.remove()}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;CKEDITOR.config.disableNativeSpellChecker=!0;CKEDITOR.config.contentsCss=CKEDITOR.getUrl("contents.css");(function(){function e(b,a){a||(a=b.getSelection().getSelectedElement());if(a&&a.is("img")&&!a.data("cke-realelement")&&!a.isReadOnly())return a}function f(b){var a=b.getStyle("float");if("inherit"==a||"none"==a)a=0;a||(a=b.getAttribute("align"));return a}CKEDITOR.plugins.add("image",{requires:"dialog",init:function(b){if(!b.plugins.image2){CKEDITOR.dialog.add("image",this.path+"dialogs/image.js");var a="img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}"; +CKEDITOR.dialog.isTabEnabled(b,"image","advanced")&&(a="img[alt,dir,id,lang,longdesc,!src,title]{*}(*)");b.addCommand("image",new CKEDITOR.dialogCommand("image",{allowedContent:a,requiredContent:"img[alt,src]",contentTransformations:[["img{width}: sizeToStyle","img[width]: sizeToAttribute"],["img{float}: alignmentToStyle","img[align]: alignmentToAttribute"]]}));b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,command:"image",toolbar:"insert,10"});b.on("doubleclick",function(b){var a= +b.data.element;a.is("img")&&(!a.data("cke-realelement")&&!a.isReadOnly())&&(b.data.dialog="image")});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(a){if(e(b,a))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function a(a){var d=b.getCommand("justify"+a);if(d){if("left"==a||"right"==a)d.on("exec",function(d){var c=e(b),g;c&&(g=f(c),g==a?(c.removeStyle("float"),a==f(c)&&c.removeAttribute("align")): +c.setStyle("float",a),d.cancel())});d.on("refresh",function(d){var c=e(b);c&&(c=f(c),this.setState(c==a?CKEDITOR.TRISTATE_ON:"right"==a||"left"==a?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),d.cancel())})}}b.plugins.image2||(a("left"),a("right"),a("center"),a("block"))}})})();CKEDITOR.config.image_removeLinkByEmptyURL=!0;(function(){function k(a,b){var e,f;b.on("refresh",function(a){var b=[i],c;for(c in a.data.states)b.push(a.data.states[c]);this.setState(CKEDITOR.tools.search(b,m)?m:i)},b,null,100);b.on("exec",function(b){e=a.getSelection();f=e.createBookmarks(1);b.data||(b.data={});b.data.done=!1},b,null,0);b.on("exec",function(){a.forceNextSelectionCheck();e.selectBookmarks(f)},b,null,100)}var i=CKEDITOR.TRISTATE_DISABLED,m=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(a){var b=CKEDITOR.plugins.indent.genericDefinition; +k(a,a.addCommand("indent",new b(!0)));k(a,a.addCommand("outdent",new b));a.ui.addButton&&(a.ui.addButton("Indent",{label:a.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),a.ui.addButton("Outdent",{label:a.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));a.on("dirChanged",function(b){var f=a.createRange(),j=b.data.node;f.setStartBefore(j);f.setEndAfter(j);for(var l=new CKEDITOR.dom.walker(f),c;c=l.next();)if(c.type==CKEDITOR.NODE_ELEMENT)if(!c.equals(j)&& +c.getDirection()){f.setStartAfter(c);l=new CKEDITOR.dom.walker(f)}else{var d=a.config.indentClasses;if(d)for(var g=b.data.dir=="ltr"?["_rtl",""]:["","_rtl"],h=0;h<d.length;h++)if(c.hasClass(d[h]+g[0])){c.removeClass(d[h]+g[0]);c.addClass(d[h]+g[1])}d=c.getStyle("margin-right");g=c.getStyle("margin-left");d?c.setStyle("margin-left",d):c.removeStyle("margin-left");g?c.setStyle("margin-right",g):c.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent= +!!a;this.startDisabled=!this.isIndent},specificDefinition:function(a,b,e){this.name=b;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=e?"indent":"outdent";this.indentKey=e?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(a,b){a.on("pluginsLoaded",function(){for(var a in b)(function(a,b){var e=a.getCommand(b.relatedGlobal),c;for(c in b.jobs)e.on("exec",function(d){d.data.done||(a.fire("lockSnapshot"),b.execJob(a,c)&&(d.data.done= +!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,c),e.on("refresh",function(d){d.data.states||(d.data.states={});d.data.states[b.name+"@"+c]=b.refreshJob(a,c,d.data.path)},this,null,c);a.addFeature(b)})(this,b[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(a,b){var e=this.jobs[b];if(e.state!=i)return e.exec.call(this,a)},refreshJob:function(a, +b,e){b=this.jobs[b];b.state=a.activeFilter.checkFeature(this)?b.refresh.call(this,a,e):i;return b.state},getContext:function(a){return a.contains(this.context)}}})();(function(){function s(e){function g(b){for(var f=d.startContainer,a=d.endContainer;f&&!f.getParent().equals(b);)f=f.getParent();for(;a&&!a.getParent().equals(b);)a=a.getParent();if(!f||!a)return!1;for(var h=f,f=[],c=!1;!c;)h.equals(a)&&(c=!0),f.push(h),h=h.getNext();if(1>f.length)return!1;h=b.getParents(!0);for(a=0;a<h.length;a++)if(h[a].getName&&k[h[a].getName()]){b=h[a];break}for(var h=n.isIndent?1:-1,a=f[0],f=f[f.length-1],c=CKEDITOR.plugins.list.listToArray(b,o),g=c[f.getCustomData("listarray_index")].indent, +a=a.getCustomData("listarray_index");a<=f.getCustomData("listarray_index");a++)if(c[a].indent+=h,0<h){var l=c[a].parent;c[a].parent=new CKEDITOR.dom.element(l.getName(),l.getDocument())}for(a=f.getCustomData("listarray_index")+1;a<c.length&&c[a].indent>g;a++)c[a].indent+=h;f=CKEDITOR.plugins.list.arrayToList(c,o,null,e.config.enterMode,b.getDirection());if(!n.isIndent){var i;if((i=b.getParent())&&i.is("li"))for(var h=f.listNode.getChildren(),m=[],j,a=h.count()-1;0<=a;a--)(j=h.getItem(a))&&(j.is&& +j.is("li"))&&m.push(j)}f&&f.listNode.replace(b);if(m&&m.length)for(a=0;a<m.length;a++){for(j=b=m[a];(j=j.getNext())&&j.is&&j.getName()in k;)CKEDITOR.env.needsNbspFiller&&!b.getFirst(t)&&b.append(d.document.createText(" ")),b.append(j);b.insertAfter(i)}f&&e.fire("contentDomInvalidated");return!0}for(var n=this,o=this.database,k=this.context,l=e.getSelection(),l=(l&&l.getRanges()).createIterator(),d;d=l.getNextRange();){for(var b=d.getCommonAncestor();b&&!(b.type==CKEDITOR.NODE_ELEMENT&&k[b.getName()]);)b= +b.getParent();b||(b=d.startPath().contains(k))&&d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);if(!b){var c=d.getEnclosedNode();c&&(c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in k)&&(d.setStartAt(c,CKEDITOR.POSITION_AFTER_START),d.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),b=c)}b&&(d.startContainer.type==CKEDITOR.NODE_ELEMENT&&d.startContainer.getName()in k)&&(c=new CKEDITOR.dom.walker(d),c.evaluator=i,d.startContainer=c.next());b&&(d.endContainer.type==CKEDITOR.NODE_ELEMENT&&d.endContainer.getName()in k)&& +(c=new CKEDITOR.dom.walker(d),c.evaluator=i,d.endContainer=c.previous());if(b)return g(b)}return 0}function p(e,g){g||(g=e.contains(this.context));return g&&e.block&&e.block.equals(g.getFirst(i))}function i(e){return e.type==CKEDITOR.NODE_ELEMENT&&e.is("li")}function t(e){return u(e)&&v(e)}var u=CKEDITOR.dom.walker.whitespaces(!0),v=CKEDITOR.dom.walker.bookmark(!1,!0),q=CKEDITOR.TRISTATE_DISABLED,r=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(e){function g(e, +g){i.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];e.on("key",function(g){if("wysiwyg"==e.mode&&g.data.keyCode==this.indentKey){var d=this.getContext(e.elementPath());if(d&&(!this.isIndent||!p.call(this,e.elementPath(),d)))e.execCommand(this.relatedGlobal),g.cancel()}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(e,d){var b=this.getContext(d),c=p.call(this,d,b);return!b||!this.isIndent||c?q:r}:function(e,d){return!this.getContext(d)||this.isIndent? +q:r},exec:CKEDITOR.tools.bind(s,this)}}var i=CKEDITOR.plugins.indent;i.registerCommands(e,{indentlist:new g(e,"indentlist",!0),outdentlist:new g(e,"outdentlist")});CKEDITOR.tools.extend(g.prototype,i.specificDefinition.prototype,{context:{ol:1,ul:1}})}})})();(function(){function g(a,b){var c=j.exec(a),d=j.exec(b);if(c){if(!c[2]&&"px"==d[2])return d[1];if("px"==c[2]&&!d[2])return d[1]+"px"}return b}var i=CKEDITOR.htmlParser.cssStyle,h=CKEDITOR.tools.cssLength,j=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i,k={elements:{$:function(a){var b=a.attributes;if((b=(b=(b=b&&b["data-cke-realelement"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(b)))&&b.children[0])&&a.attributes["data-cke-resizable"]){var c=(new i(a)).rules,a=b.attributes,d=c.width,c= +c.height;d&&(a.width=g(a.width,d));c&&(a.height=g(a.height,c))}return b}}};CKEDITOR.plugins.add("fakeobjects",{init:function(a){a.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}","fakeobjects")},afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(k,{applyToAll:!0})}});CKEDITOR.editor.prototype.createFakeElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,b={"class":b,"data-cke-realelement":encodeURIComponent(a.getOuterHtml()),"data-cke-real-node-type":a.type, +alt:e,title:e,align:a.getAttribute("align")||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,c=new i,d=a.getAttribute("width"),a=a.getAttribute("height"),d&&(c.rules.width=h(d)),a&&(c.rules.height=h(a)),c.populate(b));return this.document.createElement("img",{attributes:b})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,f;f=new CKEDITOR.htmlParser.basicWriter; +a.writeHtml(f);f=f.getHtml();b={"class":b,"data-cke-realelement":encodeURIComponent(f),"data-cke-real-node-type":a.type,alt:e,title:e,align:a.attributes.align||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,d=a.attributes,a=new i,c=d.width,d=d.height,void 0!=c&&(a.rules.width=h(c)),void 0!=d&&(a.rules.height=h(d)),a.populate(b));return new CKEDITOR.htmlParser.element("img",b)};CKEDITOR.editor.prototype.restoreRealElement= +function(a){if(a.data("cke-real-node-type")!=CKEDITOR.NODE_ELEMENT)return null;var b=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(a.data("cke-realelement")),this.document);if(a.data("cke-resizable")){var c=a.getStyle("width"),a=a.getStyle("height");c&&b.setAttribute("width",g(b.getAttribute("width"),c));a&&b.setAttribute("height",g(b.getAttribute("height"),a))}return b}})();(function(){function m(c){return c.replace(/'/g,"\\$&")}function n(c){for(var b,a=c.length,f=[],e=0;e<a;e++)b=c.charCodeAt(e),f.push(b);return"String.fromCharCode("+f.join(",")+")"}function o(c,b){var a=c.plugins.link,f=a.compiledProtectionFunction.params,e,d;d=[a.compiledProtectionFunction.name,"("];for(var g=0;g<f.length;g++)a=f[g].toLowerCase(),e=b[a],0<g&&d.push(","),d.push("'",e?m(encodeURIComponent(b[a])):"","'");d.push(")");return d.join("")}function l(c){var c=c.config.emailProtection||"", +b;c&&"encode"!=c&&(b={},c.replace(/^([^(]+)\(([^)]+)\)$/,function(a,c,e){b.name=c;b.params=[];e.replace(/[^,\s]+/g,function(a){b.params.push(a)})}));return b}CKEDITOR.plugins.add("link",{requires:"dialog,fakeobjects",onLoad:function(){function c(b){return a.replace(/%1/g,"rtl"==b?"right":"left").replace(/%2/g,"cke_contents_"+b)}var b="background:url("+CKEDITOR.getUrl(this.path+"images"+(CKEDITOR.env.hidpi?"/hidpi":"")+"/anchor.png")+") no-repeat %1 center;border:1px dotted #00f;background-size:16px;", +a=".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{"+b+"padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{"+b+"width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}";CKEDITOR.addCss(c("ltr")+c("rtl"))},init:function(c){var b="a[!href]";CKEDITOR.dialog.isTabEnabled(c,"link","advanced")&&(b=b.replace("]",",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)"));CKEDITOR.dialog.isTabEnabled(c,"link","target")&&(b=b.replace("]", +",target,onclick]"));c.addCommand("link",new CKEDITOR.dialogCommand("link",{allowedContent:b,requiredContent:"a[href]"}));c.addCommand("anchor",new CKEDITOR.dialogCommand("anchor",{allowedContent:"a[!name,id]",requiredContent:"a[name]"}));c.addCommand("unlink",new CKEDITOR.unlinkCommand);c.addCommand("removeAnchor",new CKEDITOR.removeAnchorCommand);c.setKeystroke(CKEDITOR.CTRL+76,"link");c.ui.addButton&&(c.ui.addButton("Link",{label:c.lang.link.toolbar,command:"link",toolbar:"links,10"}),c.ui.addButton("Unlink", +{label:c.lang.link.unlink,command:"unlink",toolbar:"links,20"}),c.ui.addButton("Anchor",{label:c.lang.link.anchor.toolbar,command:"anchor",toolbar:"links,30"}));CKEDITOR.dialog.add("link",this.path+"dialogs/link.js");CKEDITOR.dialog.add("anchor",this.path+"dialogs/anchor.js");c.on("doubleclick",function(a){var b=CKEDITOR.plugins.link.getSelectedLink(c)||a.data.element;if(!b.isReadOnly())if(b.is("a")){a.data.dialog=b.getAttribute("name")&&(!b.getAttribute("href")||!b.getChildCount())?"anchor":"link"; +a.data.link=b}else if(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b))a.data.dialog="anchor"},null,null,0);c.on("doubleclick",function(a){a.data.link&&c.getSelection().selectElement(a.data.link)},null,null,20);c.addMenuItems&&c.addMenuItems({anchor:{label:c.lang.link.anchor.menu,command:"anchor",group:"anchor",order:1},removeAnchor:{label:c.lang.link.anchor.remove,command:"removeAnchor",group:"anchor",order:5},link:{label:c.lang.link.menu,command:"link",group:"link",order:1},unlink:{label:c.lang.link.unlink, +command:"unlink",group:"link",order:5}});c.contextMenu&&c.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a);if(!a&&!(a=CKEDITOR.plugins.link.getSelectedLink(c)))return null;var b={};a.getAttribute("href")&&a.getChildCount()&&(b={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});if(a&&a.hasAttribute("name"))b.anchor=b.removeAnchor=CKEDITOR.TRISTATE_OFF;return b});this.compiledProtectionFunction=l(c)},afterInit:function(c){c.dataProcessor.dataFilter.addRules({elements:{a:function(a){return!a.attributes.name? +null:!a.children.length?c.createFakeParserElement(a,"cke_anchor","anchor"):null}}});var b=c._.elementsPath&&c._.elementsPath.filters;b&&b.push(function(a,b){if("a"==b&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a)||a.getAttribute("name")&&(!a.getAttribute("href")||!a.getChildCount())))return"anchor"})}});var p=/^javascript:/,q=/^mailto:([^?]+)(?:\?(.+))?$/,r=/subject=([^;?:@&=$,\/]*)/,s=/body=([^;?:@&=$,\/]*)/,t=/^#(.*)$/,u=/^((?:http|https|ftp|news):\/\/)?(.*)$/,v=/^(_(?:self|top|parent|blank))$/, +w=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,x=/^javascript:([^(]+)\(([^)]+)\)$/,y=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,z=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,j={id:"advId",dir:"advLangDir",accessKey:"advAccessKey",name:"advName",lang:"advLangCode",tabindex:"advTabIndex",title:"advTitle",type:"advContentType","class":"advCSSClasses",charset:"advCharset",style:"advStyles",rel:"advRel"}; +CKEDITOR.plugins.link={getSelectedLink:function(c){var b=c.getSelection(),a=b.getSelectedElement();return a&&a.is("a")?a:(b=b.getRanges()[0])?(b.shrink(CKEDITOR.SHRINK_TEXT),c.elementPath(b.getCommonAncestor()).contains("a",1)):null},getEditorAnchors:function(c){for(var b=c.editable(),a=b.isInline()&&!c.plugins.divarea?c.document:b,b=a.getElementsByTag("a"),a=a.getElementsByTag("img"),f=[],e=0,d;d=b.getItem(e++);)if(d.data("cke-saved-name")||d.hasAttribute("name"))f.push({name:d.data("cke-saved-name")|| +d.getAttribute("name"),id:d.getAttribute("id")});for(e=0;d=a.getItem(e++);)(d=this.tryRestoreFakeAnchor(c,d))&&f.push({name:d.getAttribute("name"),id:d.getAttribute("id")});return f},fakeAnchor:!0,tryRestoreFakeAnchor:function(c,b){if(b&&b.data("cke-real-element-type")&&"anchor"==b.data("cke-real-element-type")){var a=c.restoreRealElement(b);if(a.data("cke-saved-name"))return a}},parseLinkAttributes:function(c,b){var a=b&&(b.data("cke-saved-href")||b.getAttribute("href"))||"",f=c.plugins.link.compiledProtectionFunction, +e=c.config.emailProtection,d,g={};a.match(p)&&("encode"==e?a=a.replace(w,function(a,b,c){return"mailto:"+String.fromCharCode.apply(String,b.split(","))+(c&&c.replace(/\\'/g,"'"))}):e&&a.replace(x,function(a,b,c){if(b==f.name){g.type="email";for(var a=g.email={},b=/(^')|('$)/g,c=c.match(/[^,\s]+/g),d=c.length,e,h,i=0;i<d;i++)e=decodeURIComponent,h=c[i].replace(b,"").replace(/\\'/g,"'"),h=e(h),e=f.params[i].toLowerCase(),a[e]=h;a.address=[a.name,a.domain].join("@")}}));if(!g.type)if(e=a.match(t))g.type= +"anchor",g.anchor={},g.anchor.name=g.anchor.id=e[1];else if(e=a.match(q)){d=a.match(r);a=a.match(s);g.type="email";var i=g.email={};i.address=e[1];d&&(i.subject=decodeURIComponent(d[1]));a&&(i.body=decodeURIComponent(a[1]))}else if(a&&(d=a.match(u)))g.type="url",g.url={},g.url.protocol=d[1],g.url.url=d[2];if(b){if(a=b.getAttribute("target"))g.target={type:a.match(v)?a:"frame",name:a};else if(a=(a=b.data("cke-pa-onclick")||b.getAttribute("onclick"))&&a.match(y))for(g.target={type:"popup",name:a[1]};e= +z.exec(a[2]);)("yes"==e[2]||"1"==e[2])&&!(e[1]in{height:1,width:1,top:1,left:1})?g.target[e[1]]=!0:isFinite(e[2])&&(g.target[e[1]]=e[2]);var a={},h;for(h in j)(e=b.getAttribute(h))&&(a[j[h]]=e);if(h=b.data("cke-saved-name")||a.advName)a.advName=h;CKEDITOR.tools.isEmpty(a)||(g.advanced=a)}return g},getLinkAttributes:function(c,b){var a=c.config.emailProtection||"",f={};switch(b.type){case "url":var a=b.url&&void 0!=b.url.protocol?b.url.protocol:"http://",e=b.url&&CKEDITOR.tools.trim(b.url.url)||""; +f["data-cke-saved-href"]=0===e.indexOf("/")?e:a+e;break;case "anchor":a=b.anchor&&b.anchor.id;f["data-cke-saved-href"]="#"+(b.anchor&&b.anchor.name||a||"");break;case "email":var d=b.email,e=d.address;switch(a){case "":case "encode":var g=encodeURIComponent(d.subject||""),i=encodeURIComponent(d.body||""),d=[];g&&d.push("subject="+g);i&&d.push("body="+i);d=d.length?"?"+d.join("&"):"";"encode"==a?(a=["javascript:void(location.href='mailto:'+",n(e)],d&&a.push("+'",m(d),"'"),a.push(")")):a=["mailto:", +e,d];break;default:a=e.split("@",2),d.name=a[0],d.domain=a[1],a=["javascript:",o(c,d)]}f["data-cke-saved-href"]=a.join("")}if(b.target)if("popup"==b.target.type){for(var a=["window.open(this.href, '",b.target.name||"","', '"],h="resizable status location toolbar menubar fullscreen scrollbars dependent".split(" "),e=h.length,g=function(a){b.target[a]&&h.push(a+"="+b.target[a])},d=0;d<e;d++)h[d]+=b.target[h[d]]?"=yes":"=no";g("width");g("left");g("height");g("top");a.push(h.join(","),"'); return false;"); +f["data-cke-pa-onclick"]=a.join("")}else"notSet"!=b.target.type&&b.target.name&&(f.target=b.target.name);if(b.advanced){for(var k in j)(a=b.advanced[j[k]])&&(f[k]=a);f.name&&(f["data-cke-saved-name"]=f.name)}f["data-cke-saved-href"]&&(f.href=f["data-cke-saved-href"]);k=CKEDITOR.tools.extend({target:1,onclick:1,"data-cke-pa-onclick":1,"data-cke-saved-name":1},j);for(var l in f)delete k[l];return{set:f,removed:CKEDITOR.tools.objectKeys(k)}}};CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype= +{exec:function(c){var b=new CKEDITOR.style({element:"a",type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1});c.removeStyle(b)},refresh:function(c,b){var a=b.lastElement&&b.lastElement.getAscendant("a",!0);a&&"a"==a.getName()&&a.getAttribute("href")&&a.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1,requiredContent:"a[href]"};CKEDITOR.removeAnchorCommand=function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(c){var b= +c.getSelection(),a=b.createBookmarks(),f;if(b&&(f=b.getSelectedElement())&&(!f.getChildCount()?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,f):f.is("a")))f.remove(1);else if(f=CKEDITOR.plugins.link.getSelectedLink(c))f.hasAttribute("href")?(f.removeAttributes({name:1,"data-cke-saved-name":1}),f.removeClass("cke_anchor")):f.remove(1);b.selectBookmarks(a)},requiredContent:"a[name]"};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:!0,linkShowTargetTab:!0})})();(function(){function E(c,j,e){function b(b){if((d=a[b?"getFirst":"getLast"]())&&(!d.is||!d.isBlockBoundary())&&(m=j.root[b?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))&&(!m.is||!m.isBlockBoundary({br:1})))c.document.createElement("br")[b?"insertBefore":"insertAfter"](d)}for(var k=CKEDITOR.plugins.list.listToArray(j.root,e),g=[],h=0;h<j.contents.length;h++){var f=j.contents[h];if((f=f.getAscendant("li",!0))&&!f.getCustomData("list_item_processed"))g.push(f),CKEDITOR.dom.element.setMarker(e, +f,"list_item_processed",!0)}f=null;for(h=0;h<g.length;h++)f=g[h].getCustomData("listarray_index"),k[f].indent=-1;for(h=f+1;h<k.length;h++)if(k[h].indent>k[h-1].indent+1){g=k[h-1].indent+1-k[h].indent;for(f=k[h].indent;k[h]&&k[h].indent>=f;)k[h].indent+=g,h++;h--}var a=CKEDITOR.plugins.list.arrayToList(k,e,null,c.config.enterMode,j.root.getAttribute("dir")).listNode,d,m;b(!0);b();a.replace(j.root);c.fire("contentDomInvalidated")}function x(c,j){this.name=c;this.context=this.type=j;this.allowedContent= +j+" li";this.requiredContent=j}function A(c,j,e,b){for(var k,g;k=c[b?"getLast":"getFirst"](F);)(g=k.getDirection(1))!==j.getDirection(1)&&k.setAttribute("dir",g),k.remove(),e?k[b?"insertBefore":"insertAfter"](e):j.append(k,b)}function B(c){var j;(j=function(e){var b=c[e?"getPrevious":"getNext"](q);b&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(c.getName()))&&(A(c,b,null,!e),c.remove(),c=b)})();j(1)}function C(c){return c.type==CKEDITOR.NODE_ELEMENT&&(c.getName()in CKEDITOR.dtd.$block||c.getName()in CKEDITOR.dtd.$listItem)&& +CKEDITOR.dtd[c.getName()]["#"]}function y(c,j,e){c.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var b=e.extractContents();j.trim(!1,!0);var k=j.createBookmark(),g=new CKEDITOR.dom.elementPath(j.startContainer),h=g.block,g=g.lastElement.getAscendant("li",1)||h,f=new CKEDITOR.dom.elementPath(e.startContainer),a=f.contains(CKEDITOR.dtd.$listItem),f=f.contains(CKEDITOR.dtd.$list);h?(h=h.getBogus())&&h.remove():f&&(h=f.getPrevious(q))&&v(h)&&h.remove();(h=b.getLast())&&(h.type== +CKEDITOR.NODE_ELEMENT&&h.is("br"))&&h.remove();(h=j.startContainer.getChild(j.startOffset))?b.insertBefore(h):j.startContainer.append(b);if(a&&(b=w(a)))g.contains(a)?(A(b,a.getParent(),a),b.remove()):g.append(b);for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){f=e.startPath();b=f.block;if(!b)break;b.is("li")&&(g=b.getParent(),b.equals(g.getLast(q))&&b.equals(g.getFirst(q))&&(b=g));e.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);b.remove()}e=e.clone();b=c.editable();e.setEndAt(b,CKEDITOR.POSITION_BEFORE_END); +e=new CKEDITOR.dom.walker(e);e.evaluator=function(a){return q(a)&&!v(a)};(e=e.next())&&(e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list)&&B(e);j.moveToBookmark(k);j.select();c.fire("saveSnapshot")}function w(c){return(c=c.getLast(q))&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in r?c:null}var r={ol:1,ul:1},G=CKEDITOR.dom.walker.whitespaces(),D=CKEDITOR.dom.walker.bookmark(),q=function(c){return!(G(c)||D(c))},v=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(c, +j,e,b,k){if(!r[c.getName()])return[];b||(b=0);e||(e=[]);for(var g=0,h=c.getChildCount();g<h;g++){var f=c.getChild(g);f.type==CKEDITOR.NODE_ELEMENT&&f.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(f,j,e,b+1);if("li"==f.$.nodeName.toLowerCase()){var a={parent:c,indent:b,element:f,contents:[]};k?a.grandparent=k:(a.grandparent=c.getParent(),a.grandparent&&"li"==a.grandparent.$.nodeName.toLowerCase()&&(a.grandparent=a.grandparent.getParent()));j&&CKEDITOR.dom.element.setMarker(j,f, +"listarray_index",e.length);e.push(a);for(var d=0,m=f.getChildCount(),i;d<m;d++)i=f.getChild(d),i.type==CKEDITOR.NODE_ELEMENT&&r[i.getName()]?CKEDITOR.plugins.list.listToArray(i,j,e,b+1,a.grandparent):a.contents.push(i)}}return e},arrayToList:function(c,j,e,b,k){e||(e=0);if(!c||c.length<e+1)return null;for(var g,h=c[e].parent.getDocument(),f=new CKEDITOR.dom.documentFragment(h),a=null,d=e,m=Math.max(c[e].indent,0),i=null,n,l,p=b==CKEDITOR.ENTER_P?"p":"div";;){var o=c[d];g=o.grandparent;n=o.element.getDirection(1); +if(o.indent==m){if(!a||c[d].parent.getName()!=a.getName())a=c[d].parent.clone(!1,1),k&&a.setAttribute("dir",k),f.append(a);i=a.append(o.element.clone(0,1));n!=a.getDirection(1)&&i.setAttribute("dir",n);for(g=0;g<o.contents.length;g++)i.append(o.contents[g].clone(1,1));d++}else if(o.indent==Math.max(m,0)+1)o=c[d-1].element.getDirection(1),d=CKEDITOR.plugins.list.arrayToList(c,null,d,b,o!=n?n:null),!i.getChildCount()&&(CKEDITOR.env.needsNbspFiller&&!(7<h.$.documentMode))&&i.append(h.createText(" ")), +i.append(d.listNode),d=d.nextIndex;else if(-1==o.indent&&!e&&g){r[g.getName()]?(i=o.element.clone(!1,!0),n!=g.getDirection(1)&&i.setAttribute("dir",n)):i=new CKEDITOR.dom.documentFragment(h);var a=g.getDirection(1)!=n,u=o.element,z=u.getAttribute("class"),v=u.getAttribute("style"),w=i.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(b!=CKEDITOR.ENTER_BR||a||v||z),s,x=o.contents.length,t;for(g=0;g<x;g++)if(s=o.contents[g],D(s)&&1<x)w?t=s.clone(1,1):i.append(s.clone(1,1));else if(s.type==CKEDITOR.NODE_ELEMENT&& +s.isBlockBoundary()){a&&!s.getDirection()&&s.setAttribute("dir",n);l=s;var y=u.getAttribute("style");y&&l.setAttribute("style",y.replace(/([^;])$/,"$1;")+(l.getAttribute("style")||""));z&&s.addClass(z);l=null;t&&(i.append(t),t=null);i.append(s.clone(1,1))}else w?(l||(l=h.createElement(p),i.append(l),a&&l.setAttribute("dir",n)),v&&l.setAttribute("style",v),z&&l.setAttribute("class",z),t&&(l.append(t),t=null),l.append(s.clone(1,1))):i.append(s.clone(1,1));t&&((l||i).append(t),t=null);i.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&& +d!=c.length-1&&(CKEDITOR.env.needsBrFiller&&(n=i.getLast())&&(n.type==CKEDITOR.NODE_ELEMENT&&n.is("br"))&&n.remove(),n=i.getLast(q),(!n||!(n.type==CKEDITOR.NODE_ELEMENT&&n.is(CKEDITOR.dtd.$block)))&&i.append(h.createElement("br")));n=i.$.nodeName.toLowerCase();("div"==n||"p"==n)&&i.appendBogus();f.append(i);a=null;d++}else return null;l=null;if(c.length<=d||Math.max(c[d].indent,0)<m)break}if(j)for(c=f.getFirst();c;){if(c.type==CKEDITOR.NODE_ELEMENT&&(CKEDITOR.dom.element.clearMarkers(j,c),c.getName()in +CKEDITOR.dtd.$listItem&&(e=c,h=k=b=void 0,b=e.getDirection()))){for(k=e.getParent();k&&!(h=k.getDirection());)k=k.getParent();b==h&&e.removeAttribute("dir")}c=c.getNextSourceNode()}return{listNode:f,nextIndex:d}}};var H=/^h[1-6]$/,F=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);x.prototype={exec:function(c){this.refresh(c,c.elementPath());var j=c.config,e=c.getSelection(),b=e&&e.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var k=c.editable();if(k.getFirst(q)){var g=1==b.length&&b[0];(j= +g&&g.getEnclosedNode())&&(j.is&&this.type==j.getName())&&this.setState(CKEDITOR.TRISTATE_ON)}else j.enterMode==CKEDITOR.ENTER_BR?k.appendBogus():b[0].fixBlock(1,j.enterMode==CKEDITOR.ENTER_P?"p":"div"),e.selectRanges(b)}for(var j=e.createBookmarks(!0),k=[],h={},b=b.createIterator(),f=0;(g=b.getNextRange())&&++f;){var a=g.getBoundaryNodes(),d=a.startNode,m=a.endNode;d.type==CKEDITOR.NODE_ELEMENT&&"td"==d.getName()&&g.setStartAt(a.startNode,CKEDITOR.POSITION_AFTER_START);m.type==CKEDITOR.NODE_ELEMENT&& +"td"==m.getName()&&g.setEndAt(a.endNode,CKEDITOR.POSITION_BEFORE_END);g=g.createIterator();for(g.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;a=g.getNextParagraph();)if(!a.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(h,a,"list_block",1);for(var i=c.elementPath(a),d=i.elements,m=0,i=i.blockLimit,n,l=d.length-1;0<=l&&(n=d[l]);l--)if(r[n.getName()]&&i.contains(n)){i.removeCustomData("list_group_object_"+f);(d=n.getCustomData("list_group_object"))?d.contents.push(a):(d={root:n,contents:[a]}, +k.push(d),CKEDITOR.dom.element.setMarker(h,n,"list_group_object",d));m=1;break}m||(m=i,m.getCustomData("list_group_object_"+f)?m.getCustomData("list_group_object_"+f).contents.push(a):(d={root:m,contents:[a]},CKEDITOR.dom.element.setMarker(h,m,"list_group_object_"+f,d),k.push(d)))}}for(n=[];0<k.length;)if(d=k.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(r[d.root.getName()]){b=c;f=d;d=h;g=n;m=CKEDITOR.plugins.list.listToArray(f.root,d);i=[];for(a=0;a<f.contents.length;a++)if(l=f.contents[a],(l=l.getAscendant("li", +!0))&&!l.getCustomData("list_item_processed"))i.push(l),CKEDITOR.dom.element.setMarker(d,l,"list_item_processed",!0);for(var l=f.root.getDocument(),p=void 0,o=void 0,a=0;a<i.length;a++){var u=i[a].getCustomData("listarray_index"),p=m[u].parent;p.is(this.type)||(o=l.createElement(this.type),p.copyAttributes(o,{start:1,type:1}),o.removeStyle("list-style-type"),m[u].parent=o)}d=CKEDITOR.plugins.list.arrayToList(m,d,null,b.config.enterMode);m=void 0;i=d.listNode.getChildCount();for(a=0;a<i&&(m=d.listNode.getChild(a));a++)m.getName()== +this.type&&g.push(m);d.listNode.replace(f.root);b.fire("contentDomInvalidated")}else{m=c;a=d;g=n;i=a.contents;b=a.root.getDocument();f=[];1==i.length&&i[0].equals(a.root)&&(d=b.createElement("div"),i[0].moveChildren&&i[0].moveChildren(d),i[0].append(d),i[0]=d);a=a.contents[0].getParent();for(l=0;l<i.length;l++)a=a.getCommonAncestor(i[l].getParent());p=m.config.useComputedState;m=d=void 0;p=void 0===p||p;for(l=0;l<i.length;l++)for(o=i[l];u=o.getParent();){if(u.equals(a)){f.push(o);!m&&o.getDirection()&& +(m=1);o=o.getDirection(p);null!==d&&(d=d&&d!=o?null:o);break}o=u}if(!(1>f.length)){i=f[f.length-1].getNext();l=b.createElement(this.type);g.push(l);for(p=g=void 0;f.length;)g=f.shift(),p=b.createElement("li"),g.is("pre")||H.test(g.getName())||"false"==g.getAttribute("contenteditable")?g.appendTo(p):(g.copyAttributes(p),d&&g.getDirection()&&(p.removeStyle("direction"),p.removeAttribute("dir")),g.moveChildren(p),g.remove()),p.appendTo(l);d&&m&&l.setAttribute("dir",d);i?l.insertBefore(i):l.appendTo(a)}}else this.state== +CKEDITOR.TRISTATE_ON&&r[d.root.getName()]&&E.call(this,c,d,h);for(l=0;l<n.length;l++)B(n[l]);CKEDITOR.dom.element.clearAllMarkers(h);e.selectBookmarks(j);c.focus()},refresh:function(c,j){var e=j.contains(r,1),b=j.blockLimit||j.root;e&&b.contains(e)?this.setState(e.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(c){c.blockless||(c.addCommand("numberedlist",new x("numberedlist","ol")),c.addCommand("bulletedlist", +new x("bulletedlist","ul")),c.ui.addButton&&(c.ui.addButton("NumberedList",{label:c.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),c.ui.addButton("BulletedList",{label:c.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),c.on("key",function(j){var e=j.data.domEvent.getKey();if(c.mode=="wysiwyg"&&e in{8:1,46:1}){var b=c.getSelection().getRanges()[0],k=b&&b.startPath();if(b&&b.collapsed){var g=e==8,h=c.editable(),f=new CKEDITOR.dom.walker(b.clone()); +f.evaluator=function(a){return q(a)&&!v(a)};f.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=b.clone();if(g){var a,d;if((a=k.contains(r))&&b.checkBoundaryOfElement(a,CKEDITOR.START)&&(a=a.getParent())&&a.is("li")&&(a=w(a))){d=a;a=a.getPrevious(q);e.moveToPosition(a&&v(a)?a:d,CKEDITOR.POSITION_BEFORE_START)}else{f.range.setStartAt(h,CKEDITOR.POSITION_AFTER_START);f.range.setEnd(b.startContainer,b.startOffset);if((a=f.previous())&&a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in +r||a.is("li"))){if(!a.is("li")){f.range.selectNodeContents(a);f.reset();f.evaluator=C;a=f.previous()}d=a;e.moveToElementEditEnd(d)}}if(d){y(c,e,b);j.cancel()}else if((e=k.contains(r))&&b.checkBoundaryOfElement(e,CKEDITOR.START)){d=e.getFirst(q);if(b.checkBoundaryOfElement(d,CKEDITOR.START)){a=e.getPrevious(q);if(w(d)){if(a){b.moveToElementEditEnd(a);b.select()}}else c.execCommand("outdent");j.cancel()}}}else if(d=k.contains("li")){f.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);h=(k=d.getLast(q))&& +C(k)?k:d;d=0;if((a=f.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in r&&a.equals(k)){d=1;a=f.next()}else b.checkBoundaryOfElement(h,CKEDITOR.END)&&(d=1);if(d&&a){b=b.clone();b.moveToElementEditStart(a);y(c,e,b);j.cancel()}}else{f.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);if((a=f.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(r)){a=a.getFirst(q);if(k.block&&b.checkStartOfBlock()&&b.checkEndOfBlock()){k.block.remove();b.moveToElementEditStart(a);b.select()}else if(w(a)){b.moveToElementEditStart(a); +b.select()}else{b=b.clone();b.moveToElementEditStart(a);y(c,e,b)}j.cancel()}}setTimeout(function(){c.selectionChange(1)})}}}))}})})();(function(){function Q(a,c,d){return m(c)&&m(d)&&d.equals(c.getNext(function(a){return!(z(a)||A(a)||p(a))}))}function u(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function J(a){var c=a.element;if(c&&m(c)&&(c=c.getAscendant(a.triggers,!0))&&a.editable.contains(c)){var d=K(c,!0);if("true"==d.getAttribute("contenteditable"))return c;if(d.is(a.triggers))return d}return null}function ga(a,c,d){o(a,c);o(a,d);a=c.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function r(a,c, +d){return c=c[d?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!z(b)||m(b)&&!p(b)&&!v(a,b)})}function K(a,c){if(a.data("cke-editable"))return null;for(c||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function ha(a){var c=a.doc,d=B('<span contenteditable="false" style="'+L+"position:absolute;border-top:1px dashed "+a.boxColor+'"></span>',c),b=this.path+"images/"+(n.hidpi?"hidpi/":"")+"icon.png";q(d, +{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[q(B('<span title="'+a.editor.lang.magicline.title+'" contenteditable="false">&#8629;</span>',c),{base:L+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+b+") center no-repeat "+a.boxColor+";cursor:pointer;"+(n.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(n.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px;"+CKEDITOR.tools.cssVendorPrefix("border-radius", +"2px",1),"top:-17px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px 2px 0px 0px",1),"top:-1px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","0px 0px 2px 2px",1)]}),q(B(R,c),{base:S+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),q(B(R,c),{base:S+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})], +detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){o(a,this);var b=a.holdDistance,c=this.size;return c&&a.mouse.y>c.top-b&&a.mouse.y<c.bottom+b&&a.mouse.x>c.left-b&&a.mouse.x<c.right+b?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,h=d.upper,g=d.lower,j=h||g,l=j.getParent(),k={};this.trigger=d;h&&o(a,h,!0);g&&o(a,g,!0);o(a,l,!0);a.inInlineMode&&C(a,!0);l.equals(c)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=j.size.left-j.size.margin.left+ +b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=j.size.outerWidth+j.size.margin.left+j.size.margin.right+b.scroll.x,k.right="");h&&g?k.top=h.size.margin.bottom===g.size.margin.top?0|h.size.bottom+h.size.margin.bottom/2:h.size.margin.bottom<g.size.margin.top?h.size.bottom+h.size.margin.bottom:h.size.bottom+h.size.margin.bottom-g.size.margin.top:h?g||(k.top=h.size.bottom+h.size.margin.bottom):k.top=g.size.top-g.size.margin.top;d.is(x)||k.top>b.scroll.y-15&&k.top<b.scroll.y+ +5?(k.top=a.inInlineMode?0:b.scroll.y,this.look(x)):d.is(y)||k.top>b.pane.bottom-5&&k.top<b.pane.bottom+15?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1,this.look(y)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(s));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var T in k)k[T]=CKEDITOR.tools.cssLength(k[T]);this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b= +this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new M("span",a.doc)});for(c=d.lineChildren.length;c--;)d.lineChildren[c].appendTo(d);d.look(s);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();N(a,function(b){var c=a.line.trigger;b[c.is(D)?"insertBefore":"insertAfter"](c.is(D)?c.lower:c.upper)},!0);a.editor.focus();!n.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();b.data.preventDefault(!0)}); +d.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=d}function N(a,c,d){var b=new CKEDITOR.dom.range(a.doc),e=a.editor,f;n.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(E):(f=(f=K(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new M(F[f],a.doc),f.is("br")||a.doc.createText(E).appendTo(f));d&&e.fire("saveSnapshot");c(f);b.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([b]);a.hotNode=f;d&&e.fire("saveSnapshot")}function U(a,c){return{canUndo:!0, +modes:{wysiwyg:1},exec:function(){function d(b){var d=n.ie&&9>n.version?" ":E,f=a.hotNode&&a.hotNode.getText()==d&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!c;N(a,function(d){f&&a.hotNode&&a.hotNode.remove();d[c?"insertAfter":"insertBefore"](b);d.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!c});a.lastCmdDirection=!!c});!n.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();a.line.detach()}return function(b){var b=b.getSelection().getStartElement(),e,b= +b.getAscendant(V,1);if(!W(a,b)&&b&&!b.equals(a.editable)&&!b.contains(a.editable)){if((e=K(b))&&"false"==e.getAttribute("contenteditable"))b=e;a.element=b;e=r(a,b,!c);var f;m(e)&&e.is(a.triggers)&&e.is(ia)&&(!r(a,e,!c)||(f=r(a,e,!c))&&m(f)&&f.is(a.triggers))?d(e):(f=J(a,b),m(f)&&(r(a,f,!c)?(b=r(a,f,!c))&&(m(b)&&b.is(a.triggers))&&d(f):d(f)))}}}()}}function v(a,c){if(!c||!(c.type==CKEDITOR.NODE_ELEMENT&&c.$))return!1;var d=a.line;return d.wrap.equals(c)||d.wrap.contains(c)}function m(a){return a&& +a.type==CKEDITOR.NODE_ELEMENT&&a.$}function p(a){if(!m(a))return!1;var c;if(!(c=X(a)))m(a)?(c={left:1,right:1,center:1},c=!(!c[a.getComputedStyle("float")]&&!c[a.getAttribute("align")])):c=!1;return c}function X(a){return!!{absolute:1,fixed:1}[a.getComputedStyle("position")]}function G(a,c){return m(c)?c.is(a.triggers):null}function W(a,c){if(!c)return!1;for(var d=c.getParents(1),b=d.length;b--;)for(var e=a.tabuList.length;e--;)if(d[b].hasAttribute(a.tabuList[e]))return!0;return!1}function ja(a,c, +d){c=c[d?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(ka)});if(!c)return!1;o(a,c);return d?c.size.top>a.mouse.y:c.size.bottom<a.mouse.y}function Y(a){var c=a.editable,d=a.mouse,b=a.view,e=a.triggerOffset;C(a);var f=d.y>(a.inInlineMode?b.editable.top+b.editable.height/2:Math.min(b.editable.height,b.pane.height)/2),c=c[f?"getLast":"getFirst"](function(a){return!(z(a)||A(a))});if(!c)return null;v(a,c)&&(c=a.line.wrap[f?"getPrevious":"getNext"](function(a){return!(z(a)||A(a))}));if(!m(c)|| +p(c)||!G(a,c))return null;o(a,c);return!f&&0<=c.size.top&&0<d.y&&d.y<c.size.top+e?(a=a.inInlineMode||0===b.scroll.y?x:s,new u([null,c,D,H,a])):f&&c.size.bottom<=b.pane.height&&d.y>c.size.bottom-e&&d.y<b.pane.height?(a=a.inInlineMode||c.size.bottom>b.pane.height-e&&c.size.bottom<b.pane.height?y:s,new u([c,null,Z,H,a])):null}function $(a){var c=a.mouse,d=a.view,b=a.triggerOffset,e=J(a);if(!e)return null;o(a,e);var b=Math.min(b,0|e.size.outerHeight/2),f=[],i,h;if(c.y>e.size.top-1&&c.y<e.size.top+b)h= +!1;else if(c.y>e.size.bottom-b&&c.y<e.size.bottom+1)h=!0;else return null;if(p(e)||ja(a,e,h)||e.getParent().is(aa))return null;var g=r(a,e,!h);if(g){if(g&&g.type==CKEDITOR.NODE_TEXT)return null;if(m(g)){if(p(g)||!G(a,g)||g.getParent().is(aa))return null;f=[g,e][h?"reverse":"concat"]().concat([O,H])}}else e.equals(a.editable[h?"getLast":"getFirst"](a.isRelevant))?(C(a),h&&c.y>e.size.bottom-b&&c.y<d.pane.height&&e.size.bottom>d.pane.height-b&&e.size.bottom<d.pane.height?i=y:0<c.y&&c.y<e.size.top+b&& +(i=x)):i=s,f=[null,e][h?"reverse":"concat"]().concat([h?Z:D,H,i,e.equals(a.editable[h?"getLast":"getFirst"](a.isRelevant))?h?y:x:s]);return 0 in f?new u(f):null}function P(a,c,d,b){for(var e=function(){var b=n.ie?c.$.currentStyle:a.win.$.getComputedStyle(c.$,"");return n.ie?function(a){return b[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){return b.getPropertyValue(a)}}(),f=c.getDocumentPosition(),i={},h={},g={},j={},l=t.length;l--;)i[t[l]]=parseInt(e("border-"+t[l]+"-width"),10)||0,g[t[l]]= +parseInt(e("padding-"+t[l]),10)||0,h[t[l]]=parseInt(e("margin-"+t[l]),10)||0;(!d||b)&&I(a,b);j.top=f.y-(d?0:a.view.scroll.y);j.left=f.x-(d?0:a.view.scroll.x);j.outerWidth=c.$.offsetWidth;j.outerHeight=c.$.offsetHeight;j.height=j.outerHeight-(g.top+g.bottom+i.top+i.bottom);j.width=j.outerWidth-(g.left+g.right+i.left+i.right);j.bottom=j.top+j.outerHeight;j.right=j.left+j.outerWidth;a.inInlineMode&&(j.scroll={top:c.$.scrollTop,left:c.$.scrollLeft});return q({border:i,padding:g,margin:h,ignoreScroll:d}, +j,!0)}function o(a,c,d){if(!m(c))return c.size=null;if(c.size){if(c.size.ignoreScroll==d&&c.size.date>new Date-ba)return null}else c.size={};return q(c.size,P(a,c,d),{date:+new Date},!0)}function C(a,c){a.view.editable=P(a,a.editable,c,!0)}function I(a,c){a.view||(a.view={});var d=a.view;if(c||!(d&&d.date>new Date-ba)){var b=a.win,d=b.getScrollPosition(),b=b.getViewPaneSize();q(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-b.width,height:a.doc.$.documentElement.scrollHeight- +b.height},pane:{width:b.width,height:b.height,bottom:b.height+d.y},date:+new Date},!0)}}function la(a,c,d,b){for(var e=b,f=b,i=0,h=!1,g=!1,j=a.view.pane.height,l=a.mouse;l.y+i<j&&0<l.y-i;){h||(h=c(e,b));g||(g=c(f,b));!h&&0<l.y-i&&(e=d(a,{x:l.x,y:l.y-i}));!g&&l.y+i<j&&(f=d(a,{x:l.x,y:l.y+i}));if(h&&g)break;i+=2}return new u([e,f,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var c=a.config,d=c.magicline_triggerOffset||30,b={editor:a,enterMode:c.enterMode,triggerOffset:d,holdDistance:0| +d*(c.magicline_holdDistance||0.5),boxColor:c.magicline_color||"#ff0000",rtl:"rtl"==c.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(c.magicline_tabuList||[]),triggers:c.magicline_everywhere?V:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},e,f,i;b.isRelevant=function(a){return m(a)&&!v(b,a)&&!p(a)};a.on("contentDom",function(){var d=a.editable(),g=a.document,j=a.window;q(b,{editable:d,inInlineMode:d.isInline(),doc:g,win:j,hotNode:null},!0);b.boundary=b.inInlineMode?b.editable: +b.doc.getDocumentElement();d.is(w.$inline)||(b.inInlineMode&&!X(d)&&d.setStyles({position:"relative",top:null,left:null}),ha.call(this,b),I(b),d.attachListener(a,"beforeUndoImage",function(){b.line.detach()}),d.attachListener(a,"beforeGetData",function(){b.line.wrap.getParent()&&(b.line.detach(),a.once("getData",function(){b.line.attach()},null,null,1E3))},null,null,0),d.attachListener(b.inInlineMode?g:g.getWindow().getFrame(),"mouseout",function(c){if("wysiwyg"==a.mode)if(b.inInlineMode){var d=c.data.$.clientX, +c=c.data.$.clientY;I(b);C(b,!0);var e=b.view.editable,f=b.view.scroll;if(!(d>e.left-f.x&&d<e.right-f.x)||!(c>e.top-f.y&&c<e.bottom-f.y))clearTimeout(i),i=null,b.line.detach()}else clearTimeout(i),i=null,b.line.detach()}),d.attachListener(d,"keyup",function(){b.hiddenMode=0}),d.attachListener(d,"keydown",function(c){if("wysiwyg"==a.mode)switch(c=c.data.getKeystroke(),a.getSelection().getStartElement(),c){case 2228240:case 16:b.hiddenMode=1,b.line.detach()}}),d.attachListener(b.inInlineMode?d:g,"mousemove", +function(c){f=!0;if(!("wysiwyg"!=a.mode||a.readOnly||i)){var d={x:c.data.$.clientX,y:c.data.$.clientY};i=setTimeout(function(){b.mouse=d;i=b.trigger=null;I(b);if(f&&!b.hiddenMode&&a.focusManager.hasFocus&&!b.line.mouseNear()&&(b.element=ca(b,!0)))(b.trigger=Y(b)||$(b)||da(b))&&!W(b,b.trigger.upper||b.trigger.lower)?b.line.attach().place():(b.trigger=null,b.line.detach()),f=!1},30)}}),d.attachListener(j,"scroll",function(){"wysiwyg"==a.mode&&(b.line.detach(),n.webkit&&(b.hiddenMode=1,clearTimeout(e), +e=setTimeout(function(){b.mouseDown||(b.hiddenMode=0)},50)))}),d.attachListener(ea?g:j,"mousedown",function(){"wysiwyg"==a.mode&&(b.line.detach(),b.hiddenMode=1,b.mouseDown=1)}),d.attachListener(ea?g:j,"mouseup",function(){b.hiddenMode=0;b.mouseDown=0}),a.addCommand("accessPreviousSpace",U(b)),a.addCommand("accessNextSpace",U(b,!0)),a.setKeystroke([[c.magicline_keystrokePrevious,"accessPreviousSpace"],[c.magicline_keystrokeNext,"accessNextSpace"]]),a.on("loadSnapshot",function(){var c,d,e,f;for(f in{p:1, +br:1,div:1}){c=a.document.getElementsByTag(f);for(e=c.count();e--;)if((d=c.getItem(e)).data("cke-magicline-hot")){b.hotNode=d;b.lastCmdDirection="true"===d.data("cke-magicline-dir")?!0:!1;return}}}),this.backdoor={accessFocusSpace:N,boxTrigger:u,isLine:v,getAscendantTrigger:J,getNonEmptyNeighbour:r,getSize:P,that:b,triggerEdge:$,triggerEditable:Y,triggerExpand:da})},this)}});var q=CKEDITOR.tools.extend,M=CKEDITOR.dom.element,B=M.createFromHtml,n=CKEDITOR.env,ea=CKEDITOR.env.ie&&9>CKEDITOR.env.version, +w=CKEDITOR.dtd,F={},D=128,Z=64,O=32,H=16,fa=8,x=4,y=2,s=1,E=" ",aa=w.$listItem,ka=w.$tableContent,ia=q({},w.$nonEditable,w.$empty),V=w.$block,ba=100,L="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",S=L+"border-color:transparent;display:block;border-style:solid;",R="<span>"+E+"</span>";F[CKEDITOR.ENTER_BR]="br";F[CKEDITOR.ENTER_P]="p";F[CKEDITOR.ENTER_DIV]="div";u.prototype={set:function(a,c,d){this.properties=a+ +c+(d||s);return this},is:function(a){return(this.properties&a)==a}};var ca=function(){return function(a,c,d){if(!a.mouse)return null;var b=a.doc,e=a.line.wrap,d=d||a.mouse,f=new CKEDITOR.dom.element(b.$.elementFromPoint(d.x,d.y));c&&v(a,f)&&(e.hide(),f=new CKEDITOR.dom.element(b.$.elementFromPoint(d.x,d.y)),e.show());return!f||!(f.type==CKEDITOR.NODE_ELEMENT&&f.$)||n.ie&&9>n.version&&!a.boundary.equals(f)&&!a.boundary.contains(f)?null:f}}(),z=CKEDITOR.dom.walker.whitespaces(),A=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT), +da=function(){function a(a){var b=a.element,e,f,i;if(!m(b)||b.contains(a.editable)||b.isReadOnly())return null;i=la(a,function(a,b){return!b.equals(a)},function(a,b){return ca(a,!0,b)},b);e=i.upper;f=i.lower;if(Q(a,e,f))return i.set(O,fa);if(e&&b.contains(e))for(;!e.getParent().equals(b);)e=e.getParent();else e=b.getFirst(function(b){return c(a,b)});if(f&&b.contains(f))for(;!f.getParent().equals(b);)f=f.getParent();else f=b.getLast(function(b){return c(a,b)});if(!e||!f)return null;o(a,e);o(a,f);if(!(a.mouse.y> +e.size.top&&a.mouse.y<f.size.bottom))return null;for(var b=Number.MAX_VALUE,h,g,j,l;f&&!f.equals(e)&&(g=e.getNext(a.isRelevant));)h=Math.abs(ga(a,e,g)-a.mouse.y),h<b&&(b=h,j=e,l=g),e=g,o(a,e);if(!j||!l||!(a.mouse.y>j.size.top&&a.mouse.y<l.size.bottom))return null;i.upper=j;i.lower=l;return i.set(O,fa)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||A(b)||p(b)||v(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var b=a(c),e;if(e=b){e=b.upper;var f=b.lower;e=!e||!f||p(f)|| +p(e)||f.equals(e)||e.equals(f)||f.contains(e)||e.contains(f)?!1:G(c,e)&&G(c,f)&&Q(c,e,f)?!0:!1}return e?b:null}}(),t=["top","left","right","bottom"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51;CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52;(function(){function l(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var e=[],f=["style","className"],b=0;b<f.length;b++){var d=a.$.elements.namedItem(f[b]);d&&(d=new CKEDITOR.dom.element(d),e.push([d,d.nextSibling]),d.remove())}return e}function o(a,e){if(a&&!(a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())&&0<e.length)for(var f=e.length-1;0<=f;f--){var b=e[f][0],d=e[f][1];d?b.insertBefore(d):b.appendTo(a)}}function n(a,e){var f=l(a),b={},d=a.$;e||(b["class"]=d.className|| +"",d.className="");b.inline=d.style.cssText||"";e||(d.style.cssText="position: static; overflow: visible");o(f);return b}function p(a,e){var f=l(a),b=a.$;"class"in e&&(b.className=e["class"]);"inline"in e&&(b.style.cssText=e.inline);o(f)}function q(a){if(!a.editable().isInline()){var e=CKEDITOR.instances,f;for(f in e){var b=e[f];"wysiwyg"==b.mode&&!b.readOnly&&(b=b.document.getBody(),b.setAttribute("contentEditable",!1),b.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(), +a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var b=d.getViewPaneSize();a.resize(b.width,b.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,b=CKEDITOR.document,d=b.getWindow(),j,k,m,l=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var h=a.container.getChild(1),g=a.ui.space("contents");if("wysiwyg"==a.mode){var c=a.getSelection();j=c&&c.getRanges(); +k=d.getScrollPosition()}else{var i=a.editable().$;j=!CKEDITOR.env.ie&&[i.selectionStart,i.selectionEnd];k=[i.scrollLeft,i.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){d.on("resize",e);m=d.getScrollPosition();for(c=a.container;c=c.getParent();)c.setCustomData("maximize_saved_styles",n(c)),c.setStyle("z-index",a.config.baseFloatZIndex-5);g.setCustomData("maximize_saved_styles",n(g,!0));h.setCustomData("maximize_saved_styles",n(h,!0));g={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0}; +b.getDocumentElement().setStyles(g);!CKEDITOR.env.gecko&&b.getDocumentElement().setStyle("position","fixed");(!CKEDITOR.env.gecko||!CKEDITOR.env.quirks)&&b.getBody().setStyles(g);CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(0,0)},0):d.$.scrollTo(0,0);h.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");h.$.offsetLeft;h.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});h.addClass("cke_maximized");e();g=h.getDocumentPosition();h.setStyles({left:-1* +g.x+"px",top:-1*g.y+"px"});CKEDITOR.env.gecko&&q(a)}else if(this.state==CKEDITOR.TRISTATE_ON){d.removeListener("resize",e);g=[g,h];for(c=0;c<g.length;c++)p(g[c],g[c].getCustomData("maximize_saved_styles")),g[c].removeCustomData("maximize_saved_styles");for(c=a.container;c=c.getParent();)p(c,c.getCustomData("maximize_saved_styles")),c.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(m.x,m.y)},0):d.$.scrollTo(m.x,m.y);h.removeClass("cke_maximized");CKEDITOR.env.webkit&& +(h.setStyle("display","inline"),setTimeout(function(){h.setStyle("display","block")},0));a.fire("resize")}this.toggleState();if(c=this.uiItems[0])g=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize,c=CKEDITOR.document.getById(c._.id),c.getChild(1).setHtml(g),c.setAttribute("title",g),c.setAttribute("href",'javascript:void("'+g+'");');"wysiwyg"==a.mode?j?(CKEDITOR.env.gecko&&q(a),a.getSelection().selectRanges(j),(i=a.getSelection().getStartElement())&&i.scrollIntoView(!0)): +d.$.scrollTo(k.x,k.y):(j&&(i.selectionStart=j[0],i.selectionEnd=j[1]),i.scrollLeft=k[0],i.scrollTop=k[1]);j=k=null;l=this.state;a.fire("maximize",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton("Maximize",{label:f.maximize.maximize,command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:l)},null,null,100)}}})})();(function(){var c={canUndo:!1,async:!0,exec:function(a){a.getClipboardData({title:a.lang.pastetext.title},function(b){b&&a.fire("paste",{type:"text",dataValue:b.dataValue});a.fire("afterCommandExec",{name:"pastetext",command:c,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(a){a.addCommand("pastetext",c);a.ui.addButton&&a.ui.addButton("PasteText",{label:a.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(a.config.forcePasteAsPlainText)a.on("beforePaste", +function(a){"html"!=a.data.type&&(a.data.type="text")});a.on("pasteState",function(b){a.getCommand("pastetext").setState(b.data)})}})})();(function(){function h(a,d,f){var b=CKEDITOR.cleanWord;b?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||d+"filter/default.js"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!b}function i(a){a.data.type="html"}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(a){var d=0,f=this.path;a.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a){var e=this;d=1;a.once("beforePaste",i);a.getClipboardData({title:a.lang.pastefromword.title},function(c){c&&a.fire("paste", +{type:"html",dataValue:c.dataValue});a.fire("afterCommandExec",{name:"pastefromword",command:e,returnValue:!!c})})}});a.ui.addButton&&a.ui.addButton("PasteFromWord",{label:a.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});a.on("pasteState",function(b){a.getCommand("pastefromword").setState(b.data)});a.on("paste",function(b){var e=b.data,c=e.dataValue;if(c&&(d||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(c))){var g=h(a,f,function(){if(g)a.fire("paste",e); +else if(!a.config.pasteFromWordPromptCleanup||d||confirm(a.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(c,a)});g&&b.cancel()}},null,null,3)}})})();CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}); +CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(1),l=k.createIterator(),c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var i=c.createBookmark(),b=i.startNode,j=i.endNode, +d=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};d(b);if(j){d(j);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(j);)d=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())?b.remove(1):(b.removeAttributes(e),a.fire("removeFormatCleanup",b))),b=d}c.moveToBookmark(i)}a.forceNextSelectionCheck();a.getSelection().selectRanges(k)}}}, +filter:function(a,h){for(var e=a._.removeFormatFilters||[],f=0;f<e.length;f++)if(!1===e[f](h))return!1;return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(a)};CKEDITOR.config.removeFormatTags="b,big,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var";CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign";(function(){var f={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";a.editable()[b]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,;.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,;.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,;.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g, +"cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(a)},init:function(a){var b=a.addCommand("showborders",f);b.canUndo=!1;!1!==a.config.startupShowBorders&&b.setState(CKEDITOR.TRISTATE_ON);a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)},null,null,100);a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.on("removeFormatCleanup",function(d){d=d.data;a.getCommand("showborders").state==CKEDITOR.TRISTATE_ON&&(d.is("table")&&(!d.hasAttribute("border")|| +0>=parseInt(d.getAttribute("border"),10)))&&d.addClass("cke_show_border")})},afterInit:function(a){var b=a.dataProcessor,a=b&&b.dataFilter,b=b&&b.htmlFilter;a&&a.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"],c=parseInt(a.border,10);if((!c||0>=c)&&(!b||-1==b.indexOf("cke_show_border")))a["class"]=(b||"")+" cke_show_border"}}});b&&b.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"];b&&(a["class"]=b.replace("cke_show_border","").replace(/\s{2}/," ").replace(/^\s+|\s+$/, +""))}}})}});CKEDITOR.on("dialogDefinition",function(a){var b=a.data.name;if("table"==b||"tableProperties"==b)if(a=a.data.definition,b=a.getContents("info").get("txtBorder"),b.commit=CKEDITOR.tools.override(b.commit,function(a){return function(b,c){a.apply(this,arguments);var e=parseInt(this.getValue(),10);c[!e||0>=e?"addClass":"removeClass"]("cke_show_border")}}),a=(a=a.getContents("advanced"))&&a.get("advCSSClasses"))a.setup=CKEDITOR.tools.override(a.setup,function(a){return function(){a.apply(this, +arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}}),a.commit=CKEDITOR.tools.override(a.commit,function(a){return function(b,c){a.apply(this,arguments);parseInt(c.getAttribute("border"),10)||c.addClass("cke_show_border")}})})})();(function(){CKEDITOR.plugins.add("sourcearea",{init:function(a){function d(){var a=e&&this.equals(CKEDITOR.document.getActive());this.hide();this.setStyle("height",this.getParent().$.clientHeight+"px");this.setStyle("width",this.getParent().$.clientWidth+"px");this.show();a&&this.focus()}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=CKEDITOR.plugins.sourcearea;a.addMode("source",function(e){var b=a.ui.space("contents").getDocument().createElement("textarea");b.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat? +"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",a.config.sourceAreaTabSize||4)));b.setAttribute("dir","ltr");b.addClass("cke_source cke_reset cke_enable_context_menu");a.ui.space("contents").append(b);b=a.editable(new c(a,b));b.setData(a.getData(1));CKEDITOR.env.ie&&(b.attachListener(a,"resize",d,b),b.attachListener(CKEDITOR.document.getWindow(),"resize",d,b),CKEDITOR.tools.setTimeout(d,0,b));a.fire("ariaWidget",this);e()});a.addCommand("source", +f.commands.source);a.ui.addButton&&a.ui.addButton("Source",{label:a.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});a.on("mode",function(){a.getCommand("source").setState("source"==a.mode?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)});var e=CKEDITOR.env.ie&&9==CKEDITOR.env.version}}});var c=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(a){this.setValue(a);this.status="ready";this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){}, +insertElement:function(){},insertText:function(){},setReadOnly:function(a){this[(a?"set":"remove")+"Attribute"]("readOnly","readonly")},detach:function(){c.baseProto.detach.call(this);this.clearCustomData();this.remove()}}})})();CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(c){"wysiwyg"==c.mode&&c.fire("saveSnapshot");c.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);c.setMode("source"==c.mode?"wysiwyg":"source")},canUndo:!1}}};CKEDITOR.plugins.add("specialchar",{availableLangs:{ar:1,bg:1,ca:1,cs:1,cy:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ku:1,lv:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ru:1,si:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(a){var c=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");a.addCommand("specialchar",{exec:function(){var b=a.langCode,b=c.availableLangs[b]? +b:c.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.specialchar,c.langEntries[b]);a.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton("SpecialChar",{label:a.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}});CKEDITOR.config.specialChars="! &quot; # $ % &amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ &euro; &lsquo; &rsquo; &ldquo; &rdquo; &ndash; &mdash; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &reg; &macr; &deg; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; &ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml; &OElig; &oelig; &#372; &#374 &#373 &#375; &sbquo; &#8219; &bdquo; &hellip; &trade; &#9658; &bull; &rarr; &rArr; &hArr; &diams; &asymp;".split(" ");CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this), +this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}); +CKEDITOR.UI_MENUBUTTON="menubutton";CKEDITOR.plugins.add("scayt",{requires:"menubutton,dialog",tabToOpen:null,dialogName:"scaytDialog",init:function(a){var d=this,c=CKEDITOR.plugins.scayt;this.bindEvents(a);this.parseConfig(a);this.addRule(a);CKEDITOR.dialog.add(this.dialogName,CKEDITOR.getUrl(this.path+"dialogs/options.js"));this.addMenuItems(a);var b=a.lang.scayt,f=CKEDITOR.env;a.ui.add("Scayt",CKEDITOR.UI_MENUBUTTON,{label:b.text_title,title:b.text_title,modes:{wysiwyg:!(f.ie&&(8>f.version||f.quirks))},toolbar:"spellchecker,20", +refresh:function(){var b=a.ui.instances.Scayt.getState();a.scayt&&(b=c.state[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);a.fire("scaytButtonState",b)},onRender:function(){var c=this;a.on("scaytButtonState",function(a){void 0!==typeof a.data&&c.setState(a.data)})},onMenu:function(){var b=a.scayt;a.getMenuItem("scaytToggle").label=a.lang.scayt[b&&c.state[a.name]?"btn_disable":"btn_enable"];b={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:b? +CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]||delete b.scaytOptions;a.config.scayt_uiTabs[1]||delete b.scaytLangs;a.config.scayt_uiTabs[2]||delete b.scaytDict;return b}});a.contextMenu&&a.addMenuItems&&(a.contextMenu.addListener(function(){var c=a.scayt,b;if(c){var h=c.getSelectionNode(); +if(h=h?h.getAttribute(c.getNodeAttribute()):h)b=d.menuGenerator(a,h,d),c.showBanner("."+a.contextMenu._.definition.panel.className.split(" ").join(" ."))}return b}),a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(c){return function(){var b=a.scayt;b&&b.hideBanner();return c.apply(this)}}))},addMenuItems:function(a){var d=this,c=CKEDITOR.plugins.scayt;a.addMenuGroup("scaytButton");var b=a.config.scayt_contextMenuItemsOrder.split("|");if(b&&b.length)for(var f=0;f<b.length;f++)a.addMenuGroup("scayt_"+ +b[f],f-10);b={scaytToggle:{label:a.lang.scayt.btn_enable,group:"scaytButton",onClick:function(){var b=a.scayt;c.state[a.name]=!c.state[a.name];!0===c.state[a.name]?b||c.createScayt(a):b&&c.destroy(a)}},scaytAbout:{label:a.lang.scayt.btn_about,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(d.dialogName)}},scaytOptions:{label:a.lang.scayt.btn_options,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(d.dialogName)}}, +scaytLangs:{label:a.lang.scayt.btn_langs,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(d.dialogName)}},scaytDict:{label:a.lang.scayt.btn_dictionaries,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(d.dialogName)}}};a.plugins.wsc&&(b.WSC={label:a.lang.wsc.toolbar,group:"scaytButton",onClick:function(){var c=CKEDITOR.plugins.scayt,b=a.scayt,d=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText(): +a.document.getBody().getText();(d=d.replace(/\s/g,""))?(b&&(c.state[a.name]&&b.setMarkupPaused)&&b.setMarkupPaused(!0),a.lockSelection(),a.execCommand("checkspell")):alert("Nothing to check!")}});a.addMenuItems(b)},bindEvents:function(a){var d=CKEDITOR.plugins.scayt,c=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE;CKEDITOR.on("dialogDefinition",function(a){if("scaytDialog"===a.data.name)a.data.definition.dialog.on("cancel",function(){return!1},this,null,-1)});var b=function(){a.scayt&&d.destroy(a)}, +f=function(){d.state[a.name]&&!a.readOnly&&d.createScayt(a)},g=function(){c?(a.on("blur",b),a.on("focus",f),a.focusManager.hasFocus&&f()):f()};a.on("contentDom",g);a.on("beforeCommandExec",function(c){if(c.data.name in d.options.disablingCommandExec&&"wysiwyg"==a.mode){if(c=a.scayt)d.destroy(a),a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)}else if("bold"===c.data.name||"italic"===c.data.name||"underline"===c.data.name||"strike"===c.data.name||"subscript"===c.data.name||"superscript"===c.data.name)if(c= +a.scayt)c.removeMarkupInSelectionNode(),c.fire("startSpellCheck")});a.on("beforeSetMode",function(c){if("source"==c.data&&(c=a.scayt))d.destroy(a),a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)});a.on("afterCommandExec",function(c){var b;if("wysiwyg"==a.mode&&("undo"==c.data.name||"redo"==c.data.name))(b=a.scayt)&&setTimeout(function(){b.fire("startSpellCheck")},250)});a.on("readOnly",function(c){var b;c&&(b=a.scayt,!0===c.editor.readOnly?b&&b.fire("removeMarkupInDocument",{}):b?b.fire("startSpellCheck"): +"wysiwyg"==c.editor.mode&&!0===d.state[c.editor.name]&&(d.createScayt(a),c.editor.fire("scaytButtonState",CKEDITOR.TRISTATE_ON)))});a.on("beforeDestroy",b);a.on("setData",function(){b();a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&g()},this,null,50);a.on("insertElement",function(){var c=a.scayt;c&&(c.removeMarkupInSelectionNode(),c.fire("startSpellCheck"))},this,null,50);a.on("insertHtml",function(){var c=a.scayt;c&&(c.removeMarkupInSelectionNode(),c.fire("startSpellCheck"))},this,null,50);a.on("scaytDialogShown", +function(c){c.data.selectPage(a.scayt.tabToOpen)})},parseConfig:function(a){var d=CKEDITOR.plugins.scayt;d.replaceOldOptionsNames(a.config);"boolean"!==typeof a.config.scayt_autoStartup&&(a.config.scayt_autoStartup=!1);d.state[a.name]=a.config.scayt_autoStartup;a.config.scayt_contextCommands||(a.config.scayt_contextCommands="ignore|ignoreall|add");a.config.scayt_contextMenuItemsOrder||(a.config.scayt_contextMenuItemsOrder="suggest|moresuggest|control");a.config.scayt_sLang||(a.config.scayt_sLang= +"en_US");if(void 0===a.config.scayt_maxSuggestions||"number"!=typeof a.config.scayt_maxSuggestions||0>a.config.scayt_maxSuggestions)a.config.scayt_maxSuggestions=5;if(void 0===a.config.scayt_customDictionaryIds||"string"!==typeof a.config.scayt_customDictionaryIds)a.config.scayt_customDictionaryIds="";if(void 0===a.config.scayt_userDictionaryName||"string"!==typeof a.config.scayt_userDictionaryName)a.config.scayt_userDictionaryName=null;if("string"===typeof a.config.scayt_uiTabs&&3===a.config.scayt_uiTabs.split(",").length){var c= +[],b=[];a.config.scayt_uiTabs=a.config.scayt_uiTabs.split(",");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){if(Number(a)===1||Number(a)===0){b.push(true);c.push(Number(a))}else b.push(false)});a.config.scayt_uiTabs=null===CKEDITOR.tools.search(b,!1)?c:[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];"string"!=typeof a.config.scayt_serviceProtocol&&(a.config.scayt_serviceProtocol=null);"string"!=typeof a.config.scayt_serviceHost&&(a.config.scayt_serviceHost=null);"string"!=typeof a.config.scayt_servicePort&& +(a.config.scayt_servicePort=null);"string"!=typeof a.config.scayt_servicePath&&(a.config.scayt_servicePath=null);a.config.scayt_moreSuggestions||(a.config.scayt_moreSuggestions="on");"string"!==typeof a.config.scayt_customerId&&(a.config.scayt_customerId="1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2");"string"!==typeof a.config.scayt_srcUrl&&(d=document.location.protocol,d=-1!=d.search(/https?:/)?d:"http:",a.config.scayt_srcUrl=d+"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js"); +"boolean"!==typeof CKEDITOR.config.scayt_handleCheckDirty&&(CKEDITOR.config.scayt_handleCheckDirty=!0);"boolean"!==typeof CKEDITOR.config.scayt_handleUndoRedo&&(CKEDITOR.config.scayt_handleUndoRedo=!0)},addRule:function(a){var d=a.dataProcessor,c=d&&d.htmlFilter,b=a._.elementsPath&&a._.elementsPath.filters,d=d&&d.dataFilter,f=a.addRemoveFormatFilter,g=function(c){var b=CKEDITOR.plugins.scayt;if(a.scayt&&c.hasAttribute(b.options.data_attribute_name))return!1},e=function(c){var b=CKEDITOR.plugins.scayt, +d=!0;a.scayt&&c.hasAttribute(b.options.data_attribute_name)&&(d=!1);return d};b&&b.push(g);d&&d.addRules({elements:{span:function(c){var b=CKEDITOR.plugins.scayt;b&&(b.state[a.name]&&c.classes&&CKEDITOR.tools.search(c.classes,b.options.misspelled_word_class))&&(c.classes&&c.parent.type===CKEDITOR.NODE_DOCUMENT_FRAGMENT?(delete c.attributes.style,delete c.name):delete c.classes[CKEDITOR.tools.indexOf(c.classes,b.options.misspelled_word_class)]);return c}}});c&&c.addRules({elements:{span:function(c){var b= +CKEDITOR.plugins.scayt;b&&(b.state[a.name]&&c.hasClass(b.options.misspelled_word_class)&&c.attributes[b.options.data_attribute_name])&&(c.removeClass(b.options.misspelled_word_class),delete c.attributes[b.options.data_attribute_name],delete c.name);return c}}});f&&f.call(a,e)},scaytMenuDefinition:function(a){var d=this,a=a.scayt;return{scayt_ignore:{label:a.getLocal("btn_ignore"),group:"scayt_control",order:1,exec:function(a){a.scayt.ignoreWord()}},scayt_ignoreall:{label:a.getLocal("btn_ignoreAll"), +group:"scayt_control",order:2,exec:function(a){a.scayt.ignoreAllWords()}},scayt_add:{label:a.getLocal("btn_addWord"),group:"scayt_control",order:3,exec:function(a){var b=a.scayt;setTimeout(function(){b.addWordToUserDictionary()},10)}},option:{label:a.getLocal("btn_options"),group:"scayt_control",order:4,exec:function(a){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(d.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[0]?!0:!1}},language:{label:a.getLocal("btn_langs"), +group:"scayt_control",order:5,exec:function(a){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(d.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[1]?!0:!1}},dictionary:{label:a.getLocal("btn_dictionaries"),group:"scayt_control",order:6,exec:function(a){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(d.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[2]?!0:!1}},about:{label:a.getLocal("btn_about"),group:"scayt_control",order:7,exec:function(a){a.scayt.tabToOpen= +"about";a.lockSelection();a.openDialog(d.dialogName)}}}},buildSuggestionMenuItems:function(a,d){var c={},b={},f=a.scayt;if(0<d.length&&"no_any_suggestions"!==d[0])for(var g=0;g<d.length;g++){var e="scayt_suggest_"+CKEDITOR.plugins.scayt.suggestions[g].replace(" ","_");a.addCommand(e,this.createCommand(CKEDITOR.plugins.scayt.suggestions[g]));g<a.config.scayt_maxSuggestions?(a.addMenuItem(e,{label:d[g],command:e,group:"scayt_suggest",order:g+1}),c[e]=CKEDITOR.TRISTATE_OFF):(a.addMenuItem(e,{label:d[g], +command:e,group:"scayt_moresuggest",order:g+1}),b[e]=CKEDITOR.TRISTATE_OFF,"on"===a.config.scayt_moreSuggestions&&(a.addMenuItem("scayt_moresuggest",{label:f.getLocal("btn_moreSuggestions"),group:"scayt_moresuggest",order:10,getItems:function(){return b}}),c.scayt_moresuggest=CKEDITOR.TRISTATE_OFF))}else c.no_scayt_suggest=CKEDITOR.TRISTATE_DISABLED,a.addCommand("no_scayt_suggest",{exec:function(){}}),a.addMenuItem("no_scayt_suggest",{label:f.getLocal("btn_noSuggestions")||"no_scayt_suggest",command:"no_scayt_suggest", +group:"scayt_suggest",order:0});return c},menuGenerator:function(a,d){var c=a.scayt,b=this.scaytMenuDefinition(a),f={},g=a.config.scayt_contextCommands.split("|");c.fire("getSuggestionsList",{lang:c.getLang(),word:d});f=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions);if("off"==a.config.scayt_contextCommands)return f;for(var e in b)-1==CKEDITOR.tools.indexOf(g,e.replace("scayt_",""))&&"all"!=a.config.scayt_contextCommands||(f[e]=CKEDITOR.TRISTATE_OFF,"function"===typeof b[e].verification&& +!b[e].verification(a)&&delete f[e],a.addCommand(e,{exec:b[e].exec}),a.addMenuItem(e,{label:a.lang.scayt[b[e].label]||b[e].label,command:e,group:b[e].group,order:b[e].order}));return f},createCommand:function(a){return{exec:function(d){d.scayt.replaceSelectionNode({word:a})}}}}); +CKEDITOR.plugins.scayt={state:{},suggestions:[],loadingHelper:{loadOrder:[]},isLoading:!1,options:{disablingCommandExec:{source:!0,newpage:!0,templates:!0},data_attribute_name:"data-scayt-word",misspelled_word_class:"scayt-misspell-word"},backCompatibilityMap:{scayt_service_protocol:"scayt_serviceProtocol",scayt_service_host:"scayt_serviceHost",scayt_service_port:"scayt_servicePort",scayt_service_path:"scayt_servicePath",scayt_customerid:"scayt_customerId"},replaceOldOptionsNames:function(a){for(var d in a)d in +this.backCompatibilityMap&&(a[this.backCompatibilityMap[d]]=a[d],delete a[d])},createScayt:function(a){var d=this;this.loadScaytLibrary(a,function(a){var b={lang:a.config.scayt_sLang,container:"BODY"==a.editable().$.nodeName?a.document.getWindow().$.frameElement:a.editable().$,customDictionary:a.config.scayt_customDictionaryIds,userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,data_attribute_name:d.options.data_attribute_name,misspelled_word_class:d.options.misspelled_word_class}; +a.config.scayt_serviceProtocol&&(b.service_protocol=a.config.scayt_serviceProtocol);a.config.scayt_serviceHost&&(b.service_host=a.config.scayt_serviceHost);a.config.scayt_servicePort&&(b.service_port=a.config.scayt_servicePort);a.config.scayt_servicePath&&(b.service_path=a.config.scayt_servicePath);b=new SCAYT.CKSCAYT(b,function(){},function(){});b.subscribe("suggestionListSend",function(a){for(var b={},c=[],d=0;d<a.suggestionList.length;d++)if(!b[a.suggestionList[d]]){b[a.suggestionList[d]]=a.suggestionList[d]; +c.push(a.suggestionList[d])}CKEDITOR.plugins.scayt.suggestions=c});a.scayt=b;a.fire("scaytButtonState",a.readOnly?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_ON)})},destroy:function(a){a.scayt&&a.scayt.destroy();delete a.scayt;a.fire("scaytButtonState",CKEDITOR.TRISTATE_OFF)},loadScaytLibrary:function(a,d){var c=this;"undefined"===typeof window.SCAYT||"function"!==typeof window.SCAYT.CKSCAYT?(this.loadingHelper[a.name]=d,this.loadingHelper.loadOrder.push(a.name),CKEDITOR.scriptLoader.load(a.config.scayt_srcUrl, +function(){var a;CKEDITOR.fireOnce("scaytReady");for(var d=0;d<c.loadingHelper.loadOrder.length;d++){a=c.loadingHelper.loadOrder[d];if("function"===typeof c.loadingHelper[a])c.loadingHelper[a](CKEDITOR.instances[a]);delete c.loadingHelper[a]}c.loadingHelper.loadOrder=[]})):window.SCAYT&&"function"===typeof window.SCAYT.CKSCAYT&&(CKEDITOR.fireOnce("scaytReady"),a.scayt||"function"===typeof d&&d(a))}}; +CKEDITOR.on("scaytReady",function(){if(!0===CKEDITOR.config.scayt_handleCheckDirty){var a=CKEDITOR.editor.prototype;a.checkDirty=CKEDITOR.tools.override(a.checkDirty,function(a){return function(){var b=null,d=this.scayt;if(!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt)b=a.call(this);else if(b="ready"==this.status)var g=d.removeMarkupFromString(this.getSnapshot()),d=d.removeMarkupFromString(this._.previousValue),b=b&&d!==g;return b}});a.resetDirty=CKEDITOR.tools.override(a.resetDirty, +function(a){return function(){var b=this.scayt;!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt?a.call(this):this._.previousValue=b.removeMarkupFromString(this.getSnapshot())}})}if(!0===CKEDITOR.config.scayt_handleUndoRedo){var a=CKEDITOR.plugins.undo.Image.prototype,d="function"==typeof a.equalsContent?"equalsContent":"equals";a[d]=CKEDITOR.tools.override(a[d],function(a){return function(b){var d=b.editor.scayt,g=this.contents,e=b.contents,h=null;CKEDITOR.plugins.scayt&& +(CKEDITOR.plugins.scayt.state[b.editor.name]&&b.editor.scayt)&&(this.contents=d.removeMarkupFromString(g)||"",b.contents=d.removeMarkupFromString(e)||"");h=a.apply(this,arguments);this.contents=g;b.contents=e;return h}})}});(function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(c){var j=c.config,g=c.lang.stylescombo,f={},i=[],k=[];c.on("stylesSet",function(b){if(b=b.data.styles){for(var a,h,d,e=0,l=b.length;e<l;e++)if(a=b[e],!(c.blockless&&a.element in CKEDITOR.dtd.$block)&&(h=a.name,a=new CKEDITOR.style(a),!c.filter.customConfig||c.filter.check(a)))a._name=h,a._.enterMode=j.enterMode,a._.type=d=a.assignedTo||a.type,a._.weight=e+1E3*(d==CKEDITOR.STYLE_OBJECT?1:d==CKEDITOR.STYLE_BLOCK?2:3), +f[h]=a,i.push(a),k.push(a);i.sort(function(a,b){return a._.weight-b._.weight})}});c.ui.addRichCombo("Styles",{label:g.label,title:g.panelTitle,toolbar:"styles,10",allowedContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(j.contentsCss),multiSelect:!0,attributes:{"aria-label":g.panelTitle}},init:function(){var b,a,c,d,e,f;e=0;for(f=i.length;e<f;e++)b=i[e],a=b._name,d=b._.type,d!=c&&(this.startGroup(g["panelTitle"+d]),c=d),this.add(a,b.type==CKEDITOR.STYLE_OBJECT?a:b.buildPreview(),a);this.commit()}, +onClick:function(b){c.focus();c.fire("saveSnapshot");var b=f[b],a=c.elementPath();c[b.checkActive(a,c)?"removeStyle":"applyStyle"](b);c.fire("saveSnapshot")},onRender:function(){c.on("selectionChange",function(b){for(var a=this.getValue(),b=b.data.path.elements,h=0,d=b.length,e;h<d;h++){e=b[h];for(var g in f)if(f[g].checkElementRemovable(e,!0,c)){g!=a&&this.setValue(g);return}}this.setValue("")},this)},onOpen:function(){var b=c.getSelection().getSelectedElement(),b=c.elementPath(b),a=[0,0,0,0];this.showAll(); +this.unmarkAll();for(var h in f){var d=f[h],e=d._.type;d.checkApplicable(b,c,c.activeFilter)?a[e]++:this.hideItem(h);d.checkActive(b,c)&&this.mark(h)}a[CKEDITOR.STYLE_BLOCK]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_BLOCK]);a[CKEDITOR.STYLE_INLINE]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_INLINE]);a[CKEDITOR.STYLE_OBJECT]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_OBJECT])},refresh:function(){var b=c.elementPath();if(b){for(var a in f)if(f[a].checkApplicable(b,c,c.activeFilter))return; +this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){f={};i=[]}})}})})();(function(){function i(c){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(d){if(d.editable().hasFocus){var e=d.getSelection(),b;if(b=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=d.createRange(),a=CKEDITOR.tools.tryThese(function(){var a=b.getParent().$.cells[b.$.cellIndex+(c?-1:1)];a.parentNode.parentNode;return a},function(){var a=b.getParent(),a=a.getAscendant("table").$.rows[a.$.rowIndex+(c?-1:1)];return a.cells[c?a.cells.length-1: +0]});if(!a&&!c){for(var f=b.getAscendant("table").$,a=b.getParent().$.cells,f=new CKEDITOR.dom.element(f.insertRow(-1),d.document),g=0,h=a.length;g<h;g++)f.append((new CKEDITOR.dom.element(a[g],d.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(f)}else if(a)a=new CKEDITOR.dom.element(a),e.moveToElementEditStart(a),(!e.checkStartOfBlock()||!e.checkEndOfBlock())&&e.selectNodeContents(a);else return!0;e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}}, +g={exec:function(c){c.container.focusNext(!0,c.tabIndex)}},f={exec:function(c){c.container.focusPrevious(!0,c.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(c){for(var d=!1!==c.config.enableTabKeyTools,e=c.config.tabSpaces||0,b="";e--;)b+=" ";if(b)c.on("key",function(a){9==a.data.keyCode&&(c.insertHtml(b),a.cancel())});if(d)c.on("key",function(a){(9==a.data.keyCode&&c.execCommand("selectNextCell")||a.data.keyCode==CKEDITOR.SHIFT+9&&c.execCommand("selectPreviousCell"))&&a.cancel()});c.addCommand("blur", +CKEDITOR.tools.extend(g,h));c.addCommand("blurBack",CKEDITOR.tools.extend(f,h));c.addCommand("selectNextCell",i());c.addCommand("selectPreviousCell",i(!0))}})})(); +CKEDITOR.dom.element.prototype.focusNext=function(i,h){var g=void 0===h?this.getTabIndex():h,f,c,d,e,b,a;if(0>=g)for(b=this.getNextSourceNode(i,CKEDITOR.NODE_ELEMENT);b;){if(b.isVisible()&&0===b.getTabIndex()){d=b;break}b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(b=this.getDocument().getBody().getFirst();b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&b.equals(this)){if(c=!0,i){if(!(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(b)&& +(f=1);if(b.isVisible()&&!(0>(a=b.getTabIndex()))){if(f&&a==g){d=b;break}a>g&&(!d||!e||a<e)?(d=b,e=a):!d&&0===a&&(d=b,e=a)}}d&&d.focus()}; +CKEDITOR.dom.element.prototype.focusPrevious=function(i,h){for(var g=void 0===h?this.getTabIndex():h,f,c,d,e=0,b,a=this.getDocument().getBody().getLast();a=a.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&a.equals(this)){if(c=!0,i){if(!(a=a.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(a)&&(f=1);if(a.isVisible()&&!(0>(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}if(b<g&&(!d||b>e))d=a,e=b}}d&&d.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,e){this.setState(e.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var b=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab? +"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",d()));a.addCommand("tableDelete",d({exec:function(a){var c=a.elementPath().contains("table",1);if(c){var b=c.getParent();1==b.getChildCount()&&!b.is("body","td","th")&&(c=b);a=a.createRange();a.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START);c.remove();a.select()}}})); +a.ui.addButton&&a.ui.addButton("Table",{label:b.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:b.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:b.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog="tableProperties")});a.contextMenu&& +a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function p(e){function d(a){!(0<b.length)&&(a.type==CKEDITOR.NODE_ELEMENT&&y.test(a.getName())&&!a.getCustomData("selected_cell"))&&(CKEDITOR.dom.element.setMarker(c,a,"selected_cell",!0),b.push(a))}for(var e=e.getRanges(),b=[],c={},a=0;a<e.length;a++){var f=e[a];if(f.collapsed)f=f.getCommonAncestor(),(f=f.getAscendant("td",!0)||f.getAscendant("th",!0))&&b.push(f);else{var f=new CKEDITOR.dom.walker(f),g;for(f.guard=d;g=f.next();)if(g.type!=CKEDITOR.NODE_ELEMENT||!g.is(CKEDITOR.dtd.table))if((g= +g.getAscendant("td",!0)||g.getAscendant("th",!0))&&!g.getCustomData("selected_cell"))CKEDITOR.dom.element.setMarker(c,g,"selected_cell",!0),b.push(g)}}CKEDITOR.dom.element.clearAllMarkers(c);return b}function o(e,d){for(var b=p(e),c=b[0],a=c.getAscendant("table"),c=c.getDocument(),f=b[0].getParent(),g=f.$.rowIndex,b=b[b.length-1],h=b.getParent().$.rowIndex+b.$.rowSpan-1,b=new CKEDITOR.dom.element(a.$.rows[h]),g=d?g:h,f=d?f:b,b=CKEDITOR.tools.buildTableMap(a),a=b[g],g=d?b[g-1]:b[g+1],b=b[0].length, +c=c.createElement("tr"),h=0;a[h]&&h<b;h++){var i;1<a[h].rowSpan&&g&&a[h]==g[h]?(i=a[h],i.rowSpan+=1):(i=(new CKEDITOR.dom.element(a[h])).clone(),i.removeAttribute("rowSpan"),i.appendBogus(),c.append(i),i=i.$);h+=i.colSpan-1}d?c.insertBefore(f):c.insertAfter(f)}function q(e){if(e instanceof CKEDITOR.dom.selection){for(var d=p(e),b=d[0].getAscendant("table"),c=CKEDITOR.tools.buildTableMap(b),e=d[0].getParent().$.rowIndex,d=d[d.length-1],a=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[],f=e;f<=a;f++){for(var g= +c[f],h=new CKEDITOR.dom.element(b.$.rows[f]),i=0;i<g.length;i++){var j=new CKEDITOR.dom.element(g[i]),l=j.getParent().$.rowIndex;1==j.$.rowSpan?j.remove():(j.$.rowSpan-=1,l==f&&(l=c[f+1],l[i-1]?j.insertAfter(new CKEDITOR.dom.element(l[i-1])):(new CKEDITOR.dom.element(b.$.rows[f+1])).append(j,1)));i+=j.$.colSpan-1}d.push(h)}c=b.$.rows;b=new CKEDITOR.dom.element(c[a+1]||(0<e?c[e-1]:null)||b.$.parentNode);for(f=d.length;0<=f;f--)q(d[f]);return b}e instanceof CKEDITOR.dom.element&&(b=e.getAscendant("table"), +1==b.$.rows.length?b.remove():e.remove());return null}function r(e,d){for(var b=d?Infinity:0,c=0;c<e.length;c++){var a;a=e[c];for(var f=d,g=a.getParent().$.cells,h=0,i=0;i<g.length;i++){var j=g[i],h=h+(f?1:j.colSpan);if(j==a.$)break}a=h-1;if(d?a<b:a>b)b=a}return b}function k(e,d){for(var b=p(e),c=b[0].getAscendant("table"),a=r(b,1),b=r(b),a=d?a:b,f=CKEDITOR.tools.buildTableMap(c),c=[],b=[],g=f.length,h=0;h<g;h++)c.push(f[h][a]),b.push(d?f[h][a-1]:f[h][a+1]);for(h=0;h<g;h++)c[h]&&(1<c[h].colSpan&& +b[h]==c[h]?(a=c[h],a.colSpan+=1):(a=(new CKEDITOR.dom.element(c[h])).clone(),a.removeAttribute("colSpan"),a.appendBogus(),a[d?"insertBefore":"insertAfter"].call(a,new CKEDITOR.dom.element(c[h])),a=a.$),h+=a.rowSpan-1)}function u(e,d){var b=e.getStartElement();if(b=b.getAscendant("td",1)||b.getAscendant("th",1)){var c=b.clone();c.appendBogus();d?c.insertBefore(b):c.insertAfter(b)}}function t(e){if(e instanceof CKEDITOR.dom.selection){var e=p(e),d=e[0]&&e[0].getAscendant("table"),b;a:{var c=0;b=e.length- +1;for(var a={},f,g;f=e[c++];)CKEDITOR.dom.element.setMarker(a,f,"delete_cell",!0);for(c=0;f=e[c++];)if((g=f.getPrevious())&&!g.getCustomData("delete_cell")||(g=f.getNext())&&!g.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(a);b=g;break a}CKEDITOR.dom.element.clearAllMarkers(a);g=e[0].getParent();(g=g.getPrevious())?b=g.getLast():(g=e[b].getParent(),b=(g=g.getNext())?g.getChild(0):null)}for(g=e.length-1;0<=g;g--)t(e[g]);b?m(b,!0):d&&d.remove()}else e instanceof CKEDITOR.dom.element&& +(d=e.getParent(),1==d.getChildCount()?d.remove():e.remove())}function m(e,d){var b=e.getDocument(),c=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(c.focus(),b.focus());b=new CKEDITOR.dom.range(b);if(!b["moveToElementEdit"+(d?"End":"Start")](e))b.selectNodeContents(e),b.collapse(d?!1:!0);b.select(!0)}function v(e,d,b){e=e[d];if("undefined"==typeof b)return e;for(d=0;e&&d<e.length;d++){if(b.is&&e[d]==b.$)return d;if(d==b)return new CKEDITOR.dom.element(e[d])}return b.is?-1:null}function s(e, +d,b){var c=p(e),a;if((d?1!=c.length:2>c.length)||(a=e.getCommonAncestor())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))return!1;var f,e=c[0];a=e.getAscendant("table");var g=CKEDITOR.tools.buildTableMap(a),h=g.length,i=g[0].length,j=e.getParent().$.rowIndex,l=v(g,j,e);if(d){var n;try{var m=parseInt(e.getAttribute("rowspan"),10)||1;f=parseInt(e.getAttribute("colspan"),10)||1;n=g["up"==d?j-m:"down"==d?j+m:j]["left"==d?l-f:"right"==d?l+f:l]}catch(z){return!1}if(!n||e.$==n)return!1;c["up"==d||"left"== +d?"unshift":"push"](new CKEDITOR.dom.element(n))}for(var d=e.getDocument(),o=j,m=n=0,q=!b&&new CKEDITOR.dom.documentFragment(d),s=0,d=0;d<c.length;d++){f=c[d];var k=f.getParent(),t=f.getFirst(),r=f.$.colSpan,u=f.$.rowSpan,k=k.$.rowIndex,w=v(g,k,f),s=s+r*u,m=Math.max(m,w-l+r);n=Math.max(n,k-j+u);if(!b){r=f;(u=r.getBogus())&&u.remove();r.trim();if(f.getChildren().count()){if(k!=o&&t&&(!t.isBlockBoundary||!t.isBlockBoundary({br:1})))(o=q.getLast(CKEDITOR.dom.walker.whitespaces(!0)))&&(!o.is||!o.is("br"))&& +q.append("br");f.moveChildren(q)}d?f.remove():f.setHtml("")}o=k}if(b)return n*m==s;q.moveChildren(e);e.appendBogus();m>=i?e.removeAttribute("rowSpan"):e.$.rowSpan=n;n>=h?e.removeAttribute("colSpan"):e.$.colSpan=m;b=new CKEDITOR.dom.nodeList(a.$.rows);c=b.count();for(d=c-1;0<=d;d--)a=b.getItem(d),a.$.cells.length||(a.remove(),c++);return e}function w(e,d){var b=p(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(a),g=c.$.rowIndex, +h=v(f,g,b),i=b.$.rowSpan,j;if(1<i){j=Math.ceil(i/2);for(var i=Math.floor(i/2),c=g+j,a=new CKEDITOR.dom.element(a.$.rows[c]),f=v(f,c),l,c=b.clone(),g=0;g<f.length;g++)if(l=f[g],l.parentNode==a.$&&g>h){c.insertBefore(new CKEDITOR.dom.element(l));break}else l=null;l||a.append(c)}else{i=j=1;a=c.clone();a.insertAfter(c);a.append(c=b.clone());l=v(f,g);for(h=0;h<l.length;h++)l[h].rowSpan++}c.appendBogus();b.$.rowSpan=j;c.$.rowSpan=i;1==j&&b.removeAttribute("rowSpan");1==i&&c.removeAttribute("rowSpan");return c} +function x(e,d){var b=p(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant("table"),a=CKEDITOR.tools.buildTableMap(a),f=v(a,c.$.rowIndex,b),g=b.$.colSpan;if(1<g)c=Math.ceil(g/2),g=Math.floor(g/2);else{for(var g=c=1,h=[],i=0;i<a.length;i++){var j=a[i];h.push(j[f]);1<j[f].rowSpan&&(i+=j[f].rowSpan-1)}for(a=0;a<h.length;a++)h[a].colSpan++}a=b.clone();a.insertAfter(b);a.appendBogus();b.$.colSpan=c;a.$.colSpan=g;1==c&&b.removeAttribute("colSpan");1==g&&a.removeAttribute("colSpan"); +return a}var y=/^(?:td|th)$/;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(e){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function b(a,b){var c=e.addCommand(a,b);e.addFeature(c)}var c=e.lang.table;b("cellProperties",new CKEDITOR.dialogCommand("cellProperties",d({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]", +requiredContent:"table"})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");b("rowDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();m(q(a))}}));b("rowInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();o(a,!0)}}));b("rowInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();o(a)}}));b("columnDelete",d({requiredContent:"table",exec:function(a){for(var a=a.getSelection(),a=p(a),b=a[0],c=a[a.length-1],a=b.getAscendant("table"), +d=CKEDITOR.tools.buildTableMap(a),e,j,l=[],n=0,o=d.length;n<o;n++)for(var k=0,q=d[n].length;k<q;k++)d[n][k]==b.$&&(e=k),d[n][k]==c.$&&(j=k);for(n=e;n<=j;n++)for(k=0;k<d.length;k++)c=d[k],b=new CKEDITOR.dom.element(a.$.rows[k]),c=new CKEDITOR.dom.element(c[n]),c.$&&(1==c.$.colSpan?c.remove():c.$.colSpan-=1,k+=c.$.rowSpan-1,b.$.cells.length||l.push(b));j=a.$.rows[0]&&a.$.rows[0].cells;e=new CKEDITOR.dom.element(j[e]||(e?j[e-1]:a.$.parentNode));l.length==o&&a.remove();e&&m(e,!0)}}));b("columnInsertBefore", +d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a,!0)}}));b("columnInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a)}}));b("cellDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();t(a)}}));b("cellMerge",d({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a){m(s(a.getSelection()),!0)}}));b("cellMergeRight",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(s(a.getSelection(), +"right"),!0)}}));b("cellMergeDown",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(s(a.getSelection(),"down"),!0)}}));b("cellVerticalSplit",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(w(a.getSelection()))}}));b("cellHorizontalSplit",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(x(a.getSelection()))}}));b("cellInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();u(a,!0)}})); +b("cellInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();u(a)}}));e.addMenuItems&&e.addMenuItems({tablecell:{label:c.cell.menu,group:"tablecell",order:1,getItems:function(){var a=e.getSelection(),b=p(a);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:s(a,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:s(a,"right",!0)?CKEDITOR.TRISTATE_OFF: +CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:s(a,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:w(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:x(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<b.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:c.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:c.cell.insertAfter, +group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:c.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:c.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:c.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:c.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:c.cell.splitHorizontal,group:"tablecell", +command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:c.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:c.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:c.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:c.row.insertBefore, +group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:c.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:c.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:c.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:c.column.insertBefore, +group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:c.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:c.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});e.contextMenu&&e.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:p}; +CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();CKEDITOR.tools.buildTableMap=function(p){for(var p=p.$.rows,o=-1,q=[],r=0;r<p.length;r++){o++;!q[o]&&(q[o]=[]);for(var k=-1,u=0;u<p[r].cells.length;u++){var t=p[r].cells[u];for(k++;q[o][k];)k++;for(var m=isNaN(t.colSpan)?1:t.colSpan,t=isNaN(t.rowSpan)?1:t.rowSpan,v=0;v<t;v++){q[o+v]||(q[o+v]=[]);for(var s=0;s<m;s++)q[o+v][k+s]=p[r].cells[u]}k+=m-1}}return q};(function(){function g(a){this.editor=a;this.reset()}CKEDITOR.plugins.add("undo",{init:function(a){function c(a){b.enabled&&!1!==a.data.command.canUndo&&b.save()}function d(){b.enabled=a.readOnly?!1:"wysiwyg"==a.mode;b.onChange()}var b=a.undoManager=new g(a),e=a.addCommand("undo",{exec:function(){b.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),f=a.addCommand("redo",{exec:function(){b.redo()&&(a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1}), +h=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90];a.setKeystroke([[h[0],"undo"],[h[1],"redo"],[h[2],"redo"]]);a.on("contentDom",function(){var b=a.editable();b.attachListener(b,"keydown",function(a){-1<CKEDITOR.tools.indexOf(h,a.data.getKeystroke())&&a.data.preventDefault()})});b.onChange=function(){e.setState(b.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);f.setState(b.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",c);a.on("afterCommandExec", +c);a.on("saveSnapshot",function(a){b.save(a.data&&a.data.contentOnly)});a.on("contentDom",function(){a.editable().on("keydown",function(a){a=a.data.getKey();(8==a||46==a)&&b.type(a,0)});a.editable().on("keypress",function(a){b.type(a.data.getKey(),1)})});a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&b.save(!0)});a.on("mode",d);a.on("readOnly",d);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo", +toolbar:"undo,20"}));a.resetUndo=function(){b.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){b.currentImage&&b.update()});a.on("lockSnapshot",function(a){a=a.data;b.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot",b.unlock,b)}});CKEDITOR.plugins.undo={};var f=CKEDITOR.plugins.undo.Image=function(a,c){this.editor=a;a.fire("beforeUndoImage");var d=a.getSnapshot();CKEDITOR.env.ie&&d&&(d=d.replace(/\s+data-cke-expando=".*?"/g,""));this.contents=d;c||(this.bookmarks=(d= +d&&a.getSelection())&&d.createBookmarks2(!0));a.fire("afterUndoImage")},i=/\b(?:href|src|name)="[^"]*?"/gi;f.prototype={equalsContent:function(a){var c=this.contents,a=a.contents;if(CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks))c=c.replace(i,""),a=a.replace(i,"");return c!=a?!1:!0},equalsSelection:function(a){var c=this.bookmarks,a=a.bookmarks;if(c||a){if(!c||!a||c.length!=a.length)return!1;for(var d=0;d<c.length;d++){var b=c[d],e=a[d];if(b.startOffset!=e.startOffset||b.endOffset!= +e.endOffset||!CKEDITOR.tools.arrayCompare(b.start,e.start)||!CKEDITOR.tools.arrayCompare(b.end,e.end))return!1}}return!0}};g.prototype={type:function(a,c){var d=!c&&a!=this.lastKeystroke,b=this.editor;if(!this.typing||c&&!this.wasCharacter||d){var e=new f(b),g=this.snapshots.length;CKEDITOR.tools.setTimeout(function(){var a=b.getSnapshot();CKEDITOR.env.ie&&(a=a.replace(/\s+data-cke-expando=".*?"/g,""));e.contents!=a&&g==this.snapshots.length&&(this.typing=!0,this.save(!1,e,!1)||this.snapshots.splice(this.index+ +1,this.snapshots.length-this.index-1),this.hasUndo=!0,this.hasRedo=!1,this.modifiersCount=this.typesCount=1,this.onChange())},0,this)}this.lastKeystroke=a;(this.wasCharacter=c)?(this.modifiersCount=0,this.typesCount++,25<this.typesCount?(this.save(!1,null,!1),this.typesCount=1):setTimeout(function(){b.fire("change")},0)):(this.typesCount=0,this.modifiersCount++,25<this.modifiersCount?(this.save(!1,null,!1),this.modifiersCount=1):setTimeout(function(){b.fire("change")},0))},reset:function(){this.lastKeystroke= +0;this.snapshots=[];this.index=-1;this.limit=this.editor.config.undoStackSize||20;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.typing=!1;delete this.lastKeystroke;this.modifiersCount=this.typesCount=0},fireChange:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(a,c,d){var b=this.editor;if(this.locked||"ready"!=b.status||"wysiwyg"!=b.mode)return!1; +var e=b.editable();if(!e||"ready"!=e.status)return!1;e=this.snapshots;c||(c=new f(b));if(!1===c.contents)return!1;if(this.currentImage)if(c.equalsContent(this.currentImage)){if(a||c.equalsSelection(this.currentImage))return!1}else b.fire("change");e.splice(this.index+1,e.length-this.index-1);e.length==this.limit&&e.shift();this.index=e.push(c)-1;this.currentImage=c;!1!==d&&this.fireChange();return!0},restoreImage:function(a){var c=this.editor,d;a.bookmarks&&(c.focus(),d=c.getSelection());this.locked= +1;this.editor.loadSnapshot(a.contents);a.bookmarks?d.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(d=this.editor.document.getBody().$.createTextRange(),d.collapse(!0),d.select());this.locked=0;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.fireChange();c.fire("change")},getNextImage:function(a){var c=this.snapshots,d=this.currentImage,b;if(d)if(a)for(b=this.index-1;0<=b;b--){if(a=c[b],!d.equalsContent(a))return a.index=b,a}else for(b=this.index+1;b<c.length;b++)if(a= +c[b],!d.equalsContent(a))return a.index=b,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(a){if(!this.locked){a||(a=new f(this.editor));for(var c= +this.index,d=this.snapshots;0<c&&this.currentImage.equalsContent(d[c-1]);)c-=1;d.splice(c,this.index-c+1,a);this.index=c;this.currentImage=a}},lock:function(a,c){if(this.locked)this.locked.level++;else if(a)this.locked={level:1};else{var d=null;if(c)d=!0;else{var b=new f(this.editor,!0);this.currentImage&&this.currentImage.equalsContent(b)&&(d=b)}this.locked={update:d,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var a=this.locked.update;this.locked=null;if(!0===a)this.update(); +else if(a){var c=new f(this.editor,!0);a.equalsContent(c)||this.update()}}}}})();CKEDITOR.config.wsc_removeGlobalVariable=!0; +CKEDITOR.plugins.add("wsc",{requires:"dialog",parseApi:function(a){a.config.wsc_onFinish="function"===typeof a.config.wsc_onFinish?a.config.wsc_onFinish:function(){};a.config.wsc_onClose="function"===typeof a.config.wsc_onClose?a.config.wsc_onClose:function(){}},parseConfig:function(a){a.config.wsc_customerId=a.config.wsc_customerId||CKEDITOR.config.wsc_customerId||"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk";a.config.wsc_customDictionaryIds=a.config.wsc_customDictionaryIds|| +CKEDITOR.config.wsc_customDictionaryIds||"";a.config.wsc_userDictionaryName=a.config.wsc_userDictionaryName||CKEDITOR.config.wsc_userDictionaryName||"";a.config.wsc_customLoaderScript=a.config.wsc_customLoaderScript||CKEDITOR.config.wsc_customLoaderScript;CKEDITOR.config.wsc_cmd=a.config.wsc_cmd||CKEDITOR.config.wsc_cmd||"spell";CKEDITOR.config.wsc_version=CKEDITOR.version+" | %Rev%"},init:function(a){var b=CKEDITOR.env;this.parseConfig(a);this.parseApi(a);a.addCommand("checkspell",new CKEDITOR.dialogCommand("checkspell")).modes= +{wysiwyg:!CKEDITOR.env.opera&&!CKEDITOR.env.air&&document.domain==window.location.hostname&&!(b.ie&&(8>b.version||b.quirks))};"undefined"==typeof a.plugins.scayt&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar,click:function(a){var b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(b=b.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+ +(CKEDITOR.env.ie&&7>=CKEDITOR.env.version?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}});CKEDITOR.config.plugins='dialogui,dialog,about,a11yhelp,basicstyles,blockquote,clipboard,panel,floatpanel,menu,contextmenu,resize,button,toolbar,elementspath,enterkey,entities,popup,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,wysiwygarea,image,indent,indentlist,fakeobjects,link,list,magicline,maximize,pastetext,pastefromword,removeformat,showborders,sourcearea,specialchar,menubutton,scayt,stylescombo,tab,table,tabletools,undo,wsc';CKEDITOR.config.skin='Moono_blue';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,horizontalrule,336,,image,360,,indent-rtl,384,,indent,408,,outdent-rtl,432,,outdent,456,,anchor-rtl,480,,anchor,504,,link,528,,unlink,552,,bulletedlist-rtl,576,,bulletedlist,600,,numberedlist-rtl,624,,numberedlist,648,,maximize,672,,pastetext-rtl,696,,pastetext,720,,pastefromword-rtl,744,,pastefromword,768,,removeformat,792,,source-rtl,816,,source,840,,specialchar,864,,scayt,888,,table,912,,redo-rtl,936,,redo,960,,undo-rtl,984,,undo,1008,,spellchecker,1032,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,horizontalrule,336,auto,image,360,auto,indent-rtl,384,auto,indent,408,auto,outdent-rtl,432,auto,outdent,456,auto,anchor-rtl,480,auto,anchor,504,auto,link,528,auto,unlink,552,auto,bulletedlist-rtl,576,auto,bulletedlist,600,auto,numberedlist-rtl,624,auto,numberedlist,648,auto,maximize,672,auto,pastetext-rtl,696,auto,pastetext,720,auto,pastefromword-rtl,744,auto,pastefromword,768,auto,removeformat,792,auto,source-rtl,816,auto,source,840,auto,specialchar,864,auto,scayt,888,auto,table,912,auto,redo-rtl,936,auto,redo,960,auto,undo-rtl,984,auto,undo,1008,auto,spellchecker,1032,auto','icons.png');})();CKEDITOR.lang.languages={"en":1,"de":1,"pl":1};}()); \ No newline at end of file diff --git a/ckEditor/lang/de.js b/ckEditor/lang/de.js new file mode 100644 index 0000000..db02f8e --- /dev/null +++ b/ckEditor/lang/de.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.lang['de']={"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Checkbox","radio":"Radiobutton","textField":"Textfeld einzeilig","textarea":"Textfeld mehrzeilig","hiddenField":"Verstecktes Feld","button":"Klickbutton","select":"Auswahlfeld","imageButton":"Bildbutton","notSet":"<nichts>","id":"ID","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachenkürzel","longDescr":"Langform URL","cssClass":"Stylesheet Klasse","advisoryTitle":"Titel Beschreibung","cssStyle":"Style","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Zum Vergrößern ziehen","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor","help":"Prüfe $1 für Hilfe.","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:","title":"Über CKEditor","userGuide":"CKEditor Benutzerhandbuch"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"blockquote":{"toolbar":"Zitatblock"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"contextmenu":{"options":"Kontextmenü Optionen"},"button":{"selectedLabel":"%1 (Ausgewählt)"},"toolbar":{"toolbarCollapse":"Symbolleiste einklappen","toolbarExpand":"Symbolleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formularen","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Symbolleisten"},"elementspath":{"eleLabel":"Elements Pfad","eleTitle":"%1 Element"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Addresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"image":{"alertUrl":"Bitte geben Sie die Bild-URL an","alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?","infoTab":"Bild-Info","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bild-Eigenschaften","resetSize":"Größe zurücksetzen","title":"Bild-Eigenschaften","titleButton":"Bildbutton-Eigenschaften","upload":"Hochladen","urlMissing":"Imagequelle URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muß eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muß eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muß eine ganze Zahl sein."},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"fakeobjects":{"anchor":"Anker","flash":"Flash Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker einfügen/editieren","menu":"Anker-Eigenschaften","title":"Anker-Eigenschaften","name":"Anker Name","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"nach Element Id","anchorName":"nach Anker Name","charset":"Ziel-Zeichensatz","cssClasses":"Stylesheet Klasse","emailAddress":"E-Mail Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Id","info":"Link-Info","langCode":"Sprachenkürzel","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link editieren","name":"Name","noAnchors":"(keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie e-Mail Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"<andere>","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenster-Eigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adress-Leiste","popupMenuBar":"Menü-Leiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Symbolleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"<Frame>","targetFrameName":"Ziel-Fenster-Name","targetPopup":"<Pop-up Fenster>","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste"},"magicline":{"title":"Absatz hier einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"pastetext":{"button":"Als Text einfügen","title":"Als Text einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus MS-Word einfügen","toolbar":"Aus MS-Word einfügen"},"removeformat":{"toolbar":"Formatierungen entfernen"},"sourcearea":{"toolbar":"Quellcode"},"specialchar":{"options":"Sonderzeichen Optionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen/editieren"},"scayt":{"btn_about":"Über SCAYT","btn_dictionaries":"Wörterbücher","btn_disable":"SCAYT ausschalten","btn_enable":"SCAYT einschalten","btn_langs":"Sprachen","btn_options":"Optionen","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Formatierungenstil","panelTitle1":"Block Stilart","panelTitle2":"Inline Stilart","panelTitle3":"Objekt Stilart"},"table":{"border":"Rahmen","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zellen-Eigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muß eine Zahl sein.","invalidHeight":"Zellenhöhe muß eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"wsc":{"btnIgnore":"Ignorieren","btnIgnoreAll":"Alle Ignorieren","btnReplace":"Ersetzen","btnReplaceAll":"Alle Ersetzen","btnUndo":"Rückgängig","changeTo":"Ändern in","errorLoading":"Fehler beim laden des Dienstanbieters: %s.","ieSpellDownload":"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?","manyChanges":"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert","noChanges":"Rechtschreibprüfung abgeschlossen - keine Worte geändert","noMispell":"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden","noSuggestions":" - keine Vorschläge - ","notAvailable":"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.","notInDic":"Nicht im Wörterbuch","oneChange":"Rechtschreibprüfung abgeschlossen - ein Wort geändert","progress":"Rechtschreibprüfung läuft...","title":"Rechtschreibprüfung","toolbar":"Rechtschreibprüfung"}}; \ No newline at end of file diff --git a/ckEditor/lang/en.js b/ckEditor/lang/en.js new file mode 100644 index 0000000..f61aada --- /dev/null +++ b/ckEditor/lang/en.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.lang['en']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"contextmenu":{"options":"Context Menu Options"},"button":{"selectedLabel":"%1 (Selected)"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"removeformat":{"toolbar":"Remove Format"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/ckEditor/lang/pl.js b/ckEditor/lang/pl.js new file mode 100644 index 0000000..955a98b --- /dev/null +++ b/ckEditor/lang/pl.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.lang['pl']={"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciśnij ALT 0","browseServer":"Przeglądaj","url":"Adres URL","protocol":"Protokół","upload":"Wyślij","uploadSubmit":"Wyślij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod języka","longDescr":"Adres URL długiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"Podgląd","resize":"Przeciągnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbą.","confirmNewPage":"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?","confirmCancel":"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzędne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","alignLeft":"Do lewej","alignRight":"Do prawej","alignCenter":"Do środka","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych średnikami.","cssLengthTooltip":"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostępne</span>"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor","help":"Pomoc znajdziesz w $1.","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:","title":"Informacje o programie CKEditor","userGuide":"podręczniku użytkownika programu CKEditor"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"blockquote":{"toolbar":"Cytat"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteArea":"Obszar wklejania","pasteMsg":"Wklej tekst w poniższym polu, używając skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.","securityMsg":"Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.","title":"Wklej"},"contextmenu":{"options":"Opcje menu kontekstowego"},"button":{"selectedLabel":"%1 (Wybrany)"},"toolbar":{"toolbarCollapse":"Zwiń pasek narzędzi","toolbarExpand":"Rozwiń pasek narzędzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"Hiperłącza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"Narzędzia"},"toolbars":"Paski narzędzi edytora"},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"image":{"alertUrl":"Podaj adres obrazka.","alt":"Tekst zastępczy","border":"Obramowanie","btnUpload":"Wyślij","button2Img":"Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?","hSpace":"Odstęp poziomy","img2Button":"Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?","infoTab":"Informacje o obrazku","linkTab":"Hiperłącze","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","resetSize":"Przywróć rozmiar","title":"Właściwości obrazka","titleButton":"Właściwości przycisku graficznego","upload":"Wyślij","urlMissing":"Podaj adres URL obrazka.","vSpace":"Odstęp pionowy","validateBorder":"Wartość obramowania musi być liczbą całkowitą.","validateHSpace":"Wartość odstępu poziomego musi być liczbą całkowitą.","validateVSpace":"Wartość odstępu pionowego musi być liczbą całkowitą."},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"fakeobjects":{"anchor":"Kotwica","flash":"Animacja Flash","hiddenfield":"Pole ukryte","iframe":"IFrame","unknown":"Nieznany obiekt"},"link":{"acccessKey":"Klawisz dostępu","advanced":"Zaawansowane","advisoryContentType":"Typ MIME obiektu docelowego","advisoryTitle":"Opis obiektu docelowego","anchor":{"toolbar":"Wstaw/edytuj kotwicę","menu":"Właściwości kotwicy","title":"Właściwości kotwicy","name":"Nazwa kotwicy","errorName":"Wpisz nazwę kotwicy","remove":"Usuń kotwicę"},"anchorId":"Wg identyfikatora","anchorName":"Wg nazwy","charset":"Kodowanie znaków obiektu docelowego","cssClasses":"Nazwa klasy CSS","emailAddress":"Adres e-mail","emailBody":"Treść","emailSubject":"Temat","id":"Id","info":"Informacje ","langCode":"Kod języka","langDir":"Kierunek tekstu","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","menu":"Edytuj odnośnik","name":"Nazwa","noAnchors":"(W dokumencie nie zdefiniowano żadnych kotwic)","noEmail":"Podaj adres e-mail","noUrl":"Podaj adres URL","other":"<inny>","popupDependent":"Okno zależne (Netscape)","popupFeatures":"Właściwości wyskakującego okna","popupFullScreen":"Pełny ekran (IE)","popupLeft":"Pozycja w poziomie","popupLocationBar":"Pasek adresu","popupMenuBar":"Pasek menu","popupResizable":"Skalowalny","popupScrollBars":"Paski przewijania","popupStatusBar":"Pasek statusu","popupToolbar":"Pasek narzędzi","popupTop":"Pozycja w pionie","rel":"Relacja","selectAnchor":"Wybierz kotwicę","styles":"Styl","tabIndex":"Indeks kolejności","target":"Obiekt docelowy","targetFrame":"<ramka>","targetFrameName":"Nazwa ramki docelowej","targetPopup":"<wyskakujące okno>","targetPopupName":"Nazwa wyskakującego okna","title":"Odnośnik","toAnchor":"Odnośnik wewnątrz strony (kotwica)","toEmail":"Adres e-mail","toUrl":"Adres URL","toolbar":"Wstaw/edytuj odnośnik","type":"Typ odnośnika","unlink":"Usuń odnośnik","upload":"Wyślij"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"magicline":{"title":"Wstaw nowy akapit"},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"pastetext":{"button":"Wklej jako czysty tekst","title":"Wklej jako czysty tekst"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"removeformat":{"toolbar":"Usuń formatowanie"},"sourcearea":{"toolbar":"Źródło dokumentu"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"scayt":{"btn_about":"Informacje o SCAYT","btn_dictionaries":"Słowniki","btn_disable":"Wyłącz SCAYT","btn_enable":"Włącz SCAYT","btn_langs":"Języki","btn_options":"Opcje","text_title":""},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"table":{"border":"Grubość obramowania","caption":"Tytuł","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkę z lewej","insertAfter":"Wstaw komórkę z prawej","deleteCell":"Usuń komórki","merge":"Połącz komórki","mergeRight":"Połącz z komórką z prawej","mergeDown":"Połącz z komórką poniżej","splitHorizontal":"Podziel komórkę poziomo","splitVertical":"Podziel komórkę pionowo","title":"Właściwości komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tła","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbą.","invalidHeight":"Wysokość komórki musi być liczbą.","invalidRowSpan":"Scalenie wierszy musi być liczbą całkowitą.","invalidColSpan":"Scalenie komórek musi być liczbą całkowitą.","chooseColor":"Wybierz"},"cellPad":"Dopełnienie komórek","cellSpace":"Odstęp pomiędzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnę z lewej","insertAfter":"Wstaw kolumnę z prawej","deleteColumn":"Usuń kolumny"},"columns":"Liczba kolumn","deleteTable":"Usuń tabelę","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","invalidBorder":"Wartość obramowania musi być liczbą.","invalidCellPadding":"Dopełnienie komórek musi być liczbą dodatnią.","invalidCellSpacing":"Odstęp pomiędzy komórkami musi być liczbą dodatnią.","invalidCols":"Liczba kolumn musi być większa niż 0.","invalidHeight":"Wysokość tabeli musi być liczbą.","invalidRows":"Liczba wierszy musi być większa niż 0.","invalidWidth":"Szerokość tabeli musi być liczbą.","menu":"Właściwości tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"Usuń wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"Właściwości tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokości"},"undo":{"redo":"Ponów","undo":"Cofnij"},"wsc":{"btnIgnore":"Ignoruj","btnIgnoreAll":"Ignoruj wszystkie","btnReplace":"Zmień","btnReplaceAll":"Zmień wszystkie","btnUndo":"Cofnij","changeTo":"Zmień na","errorLoading":"Błąd wczytywania hosta aplikacji usługi: %s.","ieSpellDownload":"Słownik nie jest zainstalowany. Czy chcesz go pobrać?","manyChanges":"Sprawdzanie zakończone: zmieniono %l słów","noChanges":"Sprawdzanie zakończone: nie zmieniono żadnego słowa","noMispell":"Sprawdzanie zakończone: nie znaleziono błędów","noSuggestions":"- Brak sugestii -","notAvailable":"Przepraszamy, ale usługa jest obecnie niedostępna.","notInDic":"Słowa nie ma w słowniku","oneChange":"Sprawdzanie zakończone: zmieniono jedno słowo","progress":"Trwa sprawdzanie...","title":"Sprawdź pisownię","toolbar":"Sprawdź pisownię"}}; \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/a11yhelp.js b/ckEditor/plugins/a11yhelp/dialogs/a11yhelp.js new file mode 100644 index 0000000..32c14fa --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/a11yhelp.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("a11yHelp",function(j){var a=j.lang.a11yhelp,l=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a["delete"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8, +105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT, +CKEDITOR.CTRL],m=/\$\{(.*?)\}/g,p=function(){var a=j.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,i,k=[],d=0;d<f.length;d++)i=f[d],h=b/f[d],1<h&&2>=h&&(b-=i,k.push(e[i]));k.push(e[b]||String.fromCharCode(b));b=k.join("+")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()}, +html:function(){for(var e='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+l+'_arialbl" tabIndex="-1">%1</div><span id="'+l+'_arialbl" class="cke_voice_label">'+a.contents+" </span>",g=[],c=a.legend,j=c.length,f=0;f<j;f++){for(var b=c[f],h=[],i=b.items,k=i.length,d=0;d<k;d++){var n=i[d],o=n.legend.replace(m,p);o.match(m)||h.push("<dt>%1</dt><dd>%2</dd>".replace("%1",n.name).replace("%2",o))}g.push("<h1>%1</h1><dl>%2</dl>".replace("%1",b.name).replace("%2",h.join("")))}return e.replace("%1", +g.join(""))}()+'<style type="text/css">.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}</style>'}]}], +buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/ckEditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt new file mode 100644 index 0000000..82d4b6b --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt @@ -0,0 +1,25 @@ +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license + +cs.js Found: 30 Missing: 0 +cy.js Found: 30 Missing: 0 +da.js Found: 12 Missing: 18 +de.js Found: 30 Missing: 0 +el.js Found: 25 Missing: 5 +eo.js Found: 30 Missing: 0 +fa.js Found: 30 Missing: 0 +fi.js Found: 30 Missing: 0 +fr.js Found: 30 Missing: 0 +gu.js Found: 12 Missing: 18 +he.js Found: 30 Missing: 0 +it.js Found: 30 Missing: 0 +mk.js Found: 5 Missing: 25 +nb.js Found: 30 Missing: 0 +nl.js Found: 30 Missing: 0 +no.js Found: 30 Missing: 0 +pt-br.js Found: 30 Missing: 0 +ro.js Found: 6 Missing: 24 +tr.js Found: 30 Missing: 0 +ug.js Found: 27 Missing: 3 +vi.js Found: 6 Missing: 24 +zh-cn.js Found: 30 Missing: 0 diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ar.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ar.js new file mode 100644 index 0000000..49f816f --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ar.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"إضافة",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"فاصلة",dash:"Dash",period:"نقطة",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/bg.js b/ckEditor/plugins/a11yhelp/dialogs/lang/bg.js new file mode 100644 index 0000000..bddf534 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/bg.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ca.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ca.js new file mode 100644 index 0000000..04f705b --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ca.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT-TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."}, +{name:"Editor de quadre de diàleg",legend:"Dins d'un quadre de diàleg, premi la tecla TAB per desplaçar-se al següent camp del quadre de diàleg, premi SHIFT + TAB per desplaçar-se a l'anterior camp, premi ENTER per acceptar el quadre de diàleg, premi ESC per cancel·lar el quadre de diàleg. Per els quadres de diàleg que tenen diverses pestanyes, premi ALT + F10 per anar a la llista de pestanyes. Després podrà desplaçar-se a la següent pestanya amb TAB o RIGHT ARROW. Anar a la pestanya anterior amb SHIFT + TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar la pestanya."}, +{name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."},{name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT + TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."}, +{name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]},{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"}, +{name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ordre per accedir al següent espai enfocat", +legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}],backspace:"Retrocés",tab:"Tabulació",enter:"Intro",shift:"Majúscules",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloqueig de majúscules",escape:"Escape",pageUp:"Pàgina Amunt",pageDown:"Pàgina Avall", +end:"Fi",home:"Inici",leftArrow:"Fletxa Esquerra",upArrow:"Fletxa Amunt",rightArrow:"Fletxa Dreta",downArrow:"Fletxa Avall",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Tecla Windows Esquerra",rightWindowKey:"Tecla Windows Dreta",selectKey:"Tecla Seleccionar",numpad0:"Teclat Numèric 0",numpad1:"Teclat Numèric 1",numpad2:"Teclat Numèric 2",numpad3:"Teclat Numèric 3",numpad4:"Teclat Numèric 4",numpad5:"Teclat Numèric 5",numpad6:"Teclat Numèric 6",numpad7:"Teclat Numèric 7",numpad8:"Teclat Numèric 8", +numpad9:"Teclat Numèric 9",multiply:"Multiplicació",add:"Suma",subtract:"Resta",decimalPoint:"Punt Decimal",divide:"Divisió",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloqueig Teclat Numèric",scrollLock:"Bloqueig de Desplaçament",semiColon:"Punt i Coma",equalSign:"Símbol Igual",comma:"Coma",dash:"Guió",period:"Punt",forwardSlash:"Barra Diagonal",graveAccent:"Accent Obert",openBracket:"Claudàtor Obert",backSlash:"Barra Invertida", +closeBracket:"Claudàtor Tancat",singleQuote:"Cometa Simple"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/cs.js b/ckEditor/plugins/a11yhelp/dialogs/lang/cs.js new file mode 100644 index 0000000..ed61622 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/cs.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT-TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru", +legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další pole, stiskněte SHIFT + TAB pro přesun na předchozí pole, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT + F10 pr oprocházení seznamu karet. Pak se přesuňte na další kartu pomocí TAB nebo ŠIPKA VPRAVO. Pro přesun na předchozí stiskněte SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání stránky karet."},{name:"Kontextové menu editoru", +legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."},{name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT + TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."}, +{name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí položku se přesunete pomocí SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]},{name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva", +legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:"Příkaz pro přístup k dalšímu prostoru zaměření", +legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulátor",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pauza",capslock:"Caps lock",escape:"Escape",pageUp:"Stránka nahoru",pageDown:"Stránka dolů",end:"Konec",home:"Domů",leftArrow:"Šipka vlevo", +upArrow:"Šipka nahoru",rightArrow:"Šipka vpravo",downArrow:"Šipka dolů",insert:"Vložit","delete":"Smazat",leftWindowKey:"Levá klávesa Windows",rightWindowKey:"Pravá klávesa Windows",selectKey:"Vyberte klávesu",numpad0:"Numerická klávesa 0",numpad1:"Numerická klávesa 1",numpad2:"Numerická klávesa 2",numpad3:"Numerická klávesa 3",numpad4:"Numerická klávesa 4",numpad5:"Numerická klávesa 5",numpad6:"Numerická klávesa 6",numpad7:"Numerická klávesa 7",numpad8:"Numerická klávesa 8",numpad9:"Numerická klávesa 9", +multiply:"Numerická klávesa násobení",add:"Přidat",subtract:"Numerická klávesa odečítání",decimalPoint:"Desetinná tečka",divide:"Numerická klávesa dělení",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num lock",scrollLock:"Scroll lock",semiColon:"Středník",equalSign:"Rovnítko",comma:"Čárka",dash:"Pomlčka",period:"Tečka",forwardSlash:"Lomítko",graveAccent:"Přízvuk",openBracket:"Otevřená hranatá závorka",backSlash:"Obrácené lomítko",closeBracket:"Uzavřená hranatá závorka", +singleQuote:"Jednoduchá uvozovka"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/cy.js b/ckEditor/plugins/a11yhelp/dialogs/lang/cy.js new file mode 100644 index 0000000..86bd79d --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/cy.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT-TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Tu mewn i'r deialog, pwyswch TAB i fynd i'r maes nesaf ar y deialog, pwyswch SHIFT + TAB i symud i faes blaenorol, pwyswch ENTER i gyflwyno'r deialog, pwyswch ESC i ddiddymu'r deialog. Ar gyfer deialogau sydd â thudalennau aml-tab, pwyswch ALT + F10 i lywio'r tab-restr. Yna symudwch i'r tab nesaf gyda TAB neu SAETH DDE. Symudwch i dab blaenorol gyda SHIFT + TAB neu'r SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis y dudalen tab."}, +{name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT + TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."}, +{name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT + TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT + TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]}, +{name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i fyned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."}, +{name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/da.js b/ckEditor/plugins/a11yhelp/dialogs/lang/da.js new file mode 100644 index 0000000..2be9ece --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/da.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:" Bold command",legend:"Klik ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Klik ${underline}"},{name:" Link command",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Kilk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/de.js b/ckEditor/plugins/a11yhelp/dialogs/lang/de.js new file mode 100644 index 0000000..1f5c0aa --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/de.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste 'ESC' drücken.",legend:[{name:"Allgemein",items:[{name:"Editor Symbolleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT-TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."}, +{name:"Editor Dialog",legend:"Innerhalb des Dialogs drücken Sie TAB um zum nächsten Dialogfeld zu gelangen, drücken Sie SHIFT-TAG um zum vorherigen Feld zu wechseln, drücken Sie ENTER um den Dialog abzusenden und ESC um den Dialog zu abzubrechen. Um zwischen den Reitern innerhalb eines Dialogs zu wechseln drücken sie ALT-F10. Um zum nächsten Reiter zu gelangen können Sie TAB oder die rechte Pfeiltaste. Zurück gelangt man mit SHIFT-TAB oder der linken Pfeiltaste. Mit der Leertaste oder Enter kann man den Reiter auswählen."}, +{name:"Editor Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},{name:"Editor Listen",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der Shift-TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."}, +{name:"Editor Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT-TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},{name:"Befehle",items:[{name:"Wiederholen Befehl",legend:"Drücken Sie ${undo}"},{name:"Rückgängig Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift Befehl", +legend:"Drücken Sie ${bold}"},{name:"Italic Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichung Befehl",legend:"Drücken Sie ${underline}"},{name:"Link Befehl",legend:"Drücken Sie ${link}"},{name:"Symbolleiste zuammenklappen Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "}, +{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Umschalt",ctrl:"Strg",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"Ende",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Einfügen","delete":"Entfernen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8",numpad9:"Ziffernblock 9", +multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/el.js b/ckEditor/plugins/a11yhelp/dialogs/lang/el.js new file mode 100644 index 0000000..f2065da --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/el.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT-TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή", +legend:"Μέσα σε ένα παράθυρο διαλόγου, πατήστε TAB για να μεταβείτε στο επόμενο πεδίο ή SHIFT + TAB για να μεταβείτε στο προηγούμενο. Πατήστε ENTER για να υποβάλετε την φόρμα. Πατήστε ESC για να ακυρώσετε την διαδικασία της φόρμας. Για παράθυρα διαλόγων που έχουν πολλές σελίδες σε καρτέλες πατήστε ALT + F10 για να μεταβείτε στην λίστα των καρτελών. Στην συνέχεια μπορείτε να μεταβείτε στην επόμενη καρτέλα πατώντας το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μπορείτε να μεταβείτε στην προηγούμενη καρτέλα πατώντας SHIFT + TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε την καρτέλα για προβολή."}, +{name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."}, +{name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT + TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]}, +{name:"Εντολές",items:[{name:"Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:"Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:"Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:"Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:"Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:"Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:"Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. "}, +{name:"Πρόσβαση στην επόμενη εντολή του χώρου εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. "},{name:"Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Αριστερό Βέλος",upArrow:"Πάνω Βέλος",rightArrow:"Δεξί Βέλος",downArrow:"Κάτω Βέλος",insert:"Insert ","delete":"Delete",leftWindowKey:"Αριστερό Πλήκτρο Windows",rightWindowKey:"Δεξί Πλήκτρο Windows",selectKey:"Πλήκτρο Select",numpad0:"Αριθμητικό πληκτρολόγιο 0",numpad1:"Αριθμητικό Πληκτρολόγιο 1",numpad2:"Αριθμητικό πληκτρολόγιο 2",numpad3:"Αριθμητικό πληκτρολόγιο 3",numpad4:"Αριθμητικό πληκτρολόγιο 4",numpad5:"Αριθμητικό πληκτρολόγιο 5",numpad6:"Αριθμητικό πληκτρολόγιο 6", +numpad7:"Αριθμητικό πληκτρολόγιο 7",numpad8:"Αριθμητικό πληκτρολόγιο 8",numpad9:"Αριθμητικό πληκτρολόγιο 9",multiply:"Πολλαπλασιασμός",add:"Πρόσθεση",subtract:"Αφαίρεση",decimalPoint:"Υποδιαστολή",divide:"Διαίρεση",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"6",f7:"7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ερωτηματικό",equalSign:"Σύμβολο Ισότητας",comma:"Κόμμα",dash:"Παύλα",period:"Τελεία",forwardSlash:"Κάθετος",graveAccent:"Βαρεία",openBracket:"Άνοιγμα Παρένθεσης", +backSlash:"Ανάστροφη Κάθετος",closeBracket:"Κλείσιμο Παρένθεσης",singleQuote:"Απόστροφος"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/en-gb.js b/ckEditor/plugins/a11yhelp/dialogs/lang/en-gb.js new file mode 100644 index 0000000..4182e6c --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/en-gb.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/en.js b/ckEditor/plugins/a11yhelp/dialogs/lang/en.js new file mode 100644 index 0000000..ae9b338 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/en.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/eo.js b/ckEditor/plugins/a11yhelp/dialogs/lang/eo.js new file mode 100644 index 0000000..081cc7e --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/eo.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA-TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."}, +{name:"Redaktildialogo",legend:"En dialogo, premu la TABAN klavon por navigi al la sekva dialogkampo, premu la MAJUSKLIGAN + TABAN klavojn por reveni al la antaŭa kampo, premu la ENENklavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Por dialogoj kun pluraj retpaĝoj sub langetoj, premu ALT + F10 por navigi al la langetlisto. Poste moviĝu al la sekva langeto per la klavo TABA aŭ SAGO DEKSTREN. Moviĝu al la antaŭa langeto per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por selekti la langetretpaĝon."}, +{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."}, +{name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]}, +{name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:"Komando por atingi la antaŭan fokusan spacon",legend:"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn."}, +{name:"Komando por atingi la sekvan fokusan spacon",legend:"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn"},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}],backspace:"Retropaŝo",tab:"Tabo",enter:"Enigi",shift:"Registrumo",ctrl:"Stirklavo",alt:"Alt-klavo",pause:"Paŭzo",capslock:"Majuskla baskulo",escape:"Eskapa klavo",pageUp:"Antaŭa Paĝo", +pageDown:"Sekva Paĝo",end:"Fino",home:"Hejmo",leftArrow:"Sago Maldekstren",upArrow:"Sago Supren",rightArrow:"Sago Dekstren",downArrow:"Sago Suben",insert:"Enmeti","delete":"Forigi",leftWindowKey:"Maldekstra Windows-klavo",rightWindowKey:"Dekstra Windows-klavo",selectKey:"Selektklavo",numpad0:"Nombra Klavaro 0",numpad1:"Nombra Klavaro 1",numpad2:"Nombra Klavaro 2",numpad3:"Nombra Klavaro 3",numpad4:"Nombra Klavaro 4",numpad5:"Nombra Klavaro 5",numpad6:"Nombra Klavaro 6",numpad7:"Nombra Klavaro 7", +numpad8:"Nombra Klavaro 8",numpad9:"Nombra Klavaro 9",multiply:"Obligi",add:"Almeti",subtract:"Subtrahi",decimalPoint:"Dekuma Punkto",divide:"Dividi",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nombra Baskulo",scrollLock:"Ruluma Baskulo",semiColon:"Punktokomo",equalSign:"Egalsigno",comma:"Komo",dash:"Haltostreko",period:"Punkto",forwardSlash:"Oblikvo",graveAccent:"Malakuto",openBracket:"Malferma Krampo",backSlash:"Retroklino",closeBracket:"Ferma Krampo", +singleQuote:"Citilo"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/es.js b/ckEditor/plugins/a11yhelp/dialogs/lang/es.js new file mode 100644 index 0000000..eb30d5e --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/es.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY-TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo", +legend:"Dentro de un cuadro de diálogo, presione la tecla TAB para desplazarse al campo siguiente del cuadro de diálogo, pulse SHIFT + TAB para desplazarse al campo anterior, pulse ENTER para presentar cuadro de diálogo, pulse la tecla ESC para cancelar el diálogo. Para los diálogos que tienen varias páginas, presione ALT + F10 para navegar a la pestaña de la lista. Luego pasar a la siguiente pestaña con TAB o FLECHA DERECHA. Para ir a la ficha anterior con SHIFT + TAB o FLECHA IZQUIERDA. Presione ESPACIO o ENTRAR para seleccionar la página de ficha."}, +{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},{name:"Lista del Editor", +legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT + TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]}, +{name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."}, +{name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/et.js b/ckEditor/plugins/a11yhelp/dialogs/lang/et.js new file mode 100644 index 0000000..4a893b0 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/et.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/fa.js b/ckEditor/plugins/a11yhelp/dialogs/lang/fa.js new file mode 100644 index 0000000..a0a8ae5 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/fa.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاوره‌ای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shif-Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر", +legend:"در داخل یک پنجره محاورهای، کلید Tab را بفشارید تا به پنجرهی بعدی بروید، Shift+Tab برای حرکت به فیلد قبلی، فشردن Enter برای ثبت اطلاعات پنجره، فشردن Esc برای لغو پنجره محاورهای و برای پنجرههایی که چندین برگه دارند، فشردن Alt+F10 جهت رفتن به Tab-List. در نهایت حرکت به برگه بعدی با Tab یا کلید جهتنمای راست. حرکت به برگه قبلی با Shift+Tab یا کلید جهتنمای چپ. فشردن Space یا Enter برای انتخاب یک برگه."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."}, +{name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]}, +{name:"فرمان‌ها",items:[{name:"بازگشت به آخرین فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان درشت کردن متن",legend:"فشردن ${bold}"},{name:"فرمان کج کردن متن",legend:"فشردن ${italic}"},{name:"فرمان زیرخطدار کردن متن",legend:"فشردن ${underline}"},{name:"فرمان پیوند دادن",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:"دسترسی به فرمان محل تمرکز قبلی",legend:"فشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور."}, +{name:"دسترسی به فضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}],backspace:"عقبگرد",tab:"برگه",enter:"ورود",shift:"تعویض",ctrl:"کنترل",alt:"دگرساز",pause:"توقف",capslock:"Caps Lock",escape:"گریز",pageUp:"صفحه به بالا",pageDown:"صفحه به پایین",end:"پایان",home:"خانه",leftArrow:"پیکان چپ", +upArrow:"پیکان بالا",rightArrow:"پیکان راست",downArrow:"پیکان پایین",insert:"ورود","delete":"حذف",leftWindowKey:"کلید چپ ویندوز",rightWindowKey:"کلید راست ویندوز",selectKey:"انتخاب کلید",numpad0:"کلید شماره 0",numpad1:"کلید شماره 1",numpad2:"کلید شماره 2",numpad3:"کلید شماره 3",numpad4:"کلید شماره 4",numpad5:"کلید شماره 5",numpad6:"کلید شماره 6",numpad7:"کلید شماره 7",numpad8:"کلید شماره 8",numpad9:"کلید شماره 9",multiply:"ضرب",add:"افزودن",subtract:"تفریق",decimalPoint:"نقطه‌ی اعشار",divide:"جدا کردن", +f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"علامت تساوی",comma:"کاما",dash:"خط تیره",period:"دوره",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/fi.js b/ckEditor/plugins/a11yhelp/dialogs/lang/fi.js new file mode 100644 index 0000000..096f367 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/fi.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT-TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."}, +{name:"Editorin dialogi",legend:"Dialogin sisällä, painamalla TAB siirryt seuraavaan dialogin kenttään, painamalla SHIFT+TAB siirryt aiempaan kenttään, painamalla ENTER lähetät dialogin, painamalla ESC peruutat dialogin. Dialogeille joissa on useita välilehtiä, paina ALT+F10 siirtyäksesi välillehtilistaan. Siirtyäksesi seuraavaan välilehteen paina TAB tai NUOLI OIKEALLE. Siirry edelliseen välilehteen painamalla SHIFT+TAB tai nuoli vasemmalle. Paina VÄLILYÖNTI tai ENTER valitaksesi välilehden."},{name:"Editorin oheisvalikko", +legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."},{name:"Editorin listalaatikko", +legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]}, +{name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:"Siirry aiempaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."}, +{name:"Siirry seuraavaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/fr-ca.js b/ckEditor/plugins/a11yhelp/dialogs/lang/fr-ca.js new file mode 100644 index 0000000..15c3c4e --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/fr-ca.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, +{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, +{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."}, +{name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, +{name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."}, +{name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home", +leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1", +f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/fr.js b/ckEditor/plugins/a11yhelp/dialogs/lang/fr.js new file mode 100644 index 0000000..a7de279 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/fr.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche Ech (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."}, +{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."}, +{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches Ech ou FLECHE GAUCHE. Fermer le menu contextuel avec Ech."}, +{name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]}, +{name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Refaire la commande",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à la précédente commande d'espace de mise au point", +legend:"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants."},{name:"Accès à la prochaine commande de l'espace de mise au point",legend:"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants."}, +{name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Retour arrière",tab:"Tabulation",enter:"Entrée",shift:"Majuscule",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Verr. Maj.",escape:"Echap",pageUp:"Page supérieure",pageDown:"Page inférieure",end:"Fin",home:"Retour",leftArrow:"Flèche gauche",upArrow:"Flèche haute",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Insertion","delete":"Supprimer",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite", +selectKey:"Touche menu",numpad0:"Pavé numérique 0",numpad1:"Pavé numérique 1",numpad2:"Pavé numérique 2",numpad3:"Pavé numérique 3",numpad4:"Pavé numérique 4",numpad5:"Pavé numérique 5",numpad6:"Pavé numérique 6",numpad7:"Pavé numérique 7",numpad8:"Pavé numérique 8",numpad9:"Pavé numérique 9",multiply:"Multiplier",add:"Addition",subtract:"Soustraire",decimalPoint:"Point décimal",divide:"Diviser",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12", +numLock:"Verrouillage numérique",scrollLock:"Arrêt défilement",semiColon:"Point virgule",equalSign:"Signe égal",comma:"Virgule",dash:"Tiret",period:"Point",forwardSlash:"Barre oblique",graveAccent:"Accent grave",openBracket:"Parenthèse ouvrante",backSlash:"Barre oblique inverse",closeBracket:"Parenthèse fermante",singleQuote:"Apostrophe"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/gl.js b/ckEditor/plugins/a11yhelp/dialogs/lang/gl.js new file mode 100644 index 0000000..37fea83 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/gl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."}, +{name:"Editor de diálogo",legend:"Dentro dun cadro de diálogo, prema a tecla TAB para desprazarse ao campo seguinte do cadro de diálogo, prema MAIÚS + TAB para desprazarse ao campo anterior, prema INTRO para presentar o cadro de diálogo, prema a tecla ESC para cancelar o diálogo. Para os diálogos que teñen varias páxinas, prema ALT + F10 para navegar á lapela da lista. Despois pasar á seguinte lapela con TAB ou FRECHA DEREITA. Para ir á lapela anterior con SHIFT + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar a lapela da páxina."}, +{name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."},{name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."}, +{name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]},{name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"}, +{name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Orde «acceder ao seguinte espazo en foco»", +legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}],backspace:"Ir atrás",tab:"Tabulador",enter:"Intro",shift:"Maiús",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Maiús",escape:"Escape",pageUp:"Páxina arriba",pageDown:"Páxina abaixo",end:"Fin",home:"Inicio", +leftArrow:"Frecha esquerda",upArrow:"Frecha arriba",rightArrow:"Frecha dereita",downArrow:"Frecha abaixo",insert:"Inserir","delete":"Supr",leftWindowKey:"Tecla Windows esquerda",rightWindowKey:"Tecla Windows dereita",selectKey:"Escolla a tecla",numpad0:"Tec. numérico 0",numpad1:"Tec. numérico 1",numpad2:"Tec. numérico 2",numpad3:"Tec. numérico 3",numpad4:"Tec. numérico 4",numpad5:"Tec. numérico 5",numpad6:"Tec. numérico 6",numpad7:"Tec. numérico 7",numpad8:"Tec. numérico 8",numpad9:"Tec. numérico 9", +multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloq. num.",scrollLock:"Bloq. despraz.",semiColon:"Punto e coma",equalSign:"Signo igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Barra inclinada",graveAccent:"Acento grave",openBracket:"Abrir corchete",backSlash:"Barra invertida",closeBracket:"Pechar corchete",singleQuote:"Comiña simple"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/gu.js b/ckEditor/plugins/a11yhelp/dialogs/lang/gu.js new file mode 100644 index 0000000..2982b4f --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/gu.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/he.js b/ckEditor/plugins/a11yhelp/dialogs/lang/he.js new file mode 100644 index 0000000..0730174 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/he.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב."}, +{name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק", +legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:"גישה למיקום המיקוד הקודם",legend:"לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."},{name:"גישה למיקום המיקוד הבא",legend:"לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר."}, +{name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"הכנס","delete":"מחק",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", +numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"הוסף",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", +openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/hi.js b/ckEditor/plugins/a11yhelp/dialogs/lang/hi.js new file mode 100644 index 0000000..2e50a82 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/hi.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/hr.js b/ckEditor/plugins/a11yhelp/dialogs/lang/hr.js new file mode 100644 index 0000000..3cf4366 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/hr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT-TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog", +legend:"Unutar dijaloga, pritisnite TAB za navigaciju do sljedećeg polja, pritisnite SHIFT + TAB za vraćanje na prethodno polje, pritisnite ENTER za slanje dijaloga ili ESC za zatvaranje dijaloga. Za dijaloge koji imaju višestruke kartice, pritisnite ALT + F10 za na navigaciju i zatim TAB ili lijeva strelica kursora ili SHIFT + TAB i desna strelica kursora. SPACE ili ENTER odabiru karticu."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."}, +{name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT + TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT + TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]}, +{name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."}, +{name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/hu.js b/ckEditor/plugins/a11yhelp/dialogs/lang/hu.js new file mode 100644 index 0000000..41d6489 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/hu.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Kisegítő utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Általános",items:[{name:"Szerkesztő Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"Szerkesző párbeszéd ablak", +legend:"Párbeszédablakban nyomjon TAB-ot a következő párbeszédmezőhöz ugráshoz, nyomjon SHIFT + TAB-ot az előző mezőhöz ugráshoz, nyomjon ENTER-t a párbeszédablak elfogadásához, nyomjon ESC-et a párbeszédablak elvetéséhez. Azokhoz a párbeszédablakokhoz, amik több fület tartalmaznak, nyomjon ALT + F10-et hogy a fülekre ugorjon. Ezután a TAB-al vagy a JOBB NYÍLLAL a következő fülre ugorhat. Az előző fülre ugráshoz használja a SHIFT + TAB-ot vagy a BAL NYILAT. Nyomjon SPACE-t vagy ENTER-t hogy kijelölje a fület."}, +{name:"Szerkesztő helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."}, +{name:"Szerkesztő lista",legend:"A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"Szerkesztő elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben."}]}, +{name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."}, +{name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"balra nyíl",upArrow:"felfelé nyíl",rightArrow:"jobbra nyíl",downArrow:"lefelé nyíl",insert:"Insert","delete":"Delete",leftWindowKey:"bal Windows-billentyű",rightWindowKey:"jobb Windows-billentyű",selectKey:"Billentyű választása",numpad0:"Számbillentyűk 0",numpad1:"Számbillentyűk 1",numpad2:"Számbillentyűk 2",numpad3:"Számbillentyűk 3",numpad4:"Számbillentyűk 4",numpad5:"Számbillentyűk 5",numpad6:"Számbillentyűk 6",numpad7:"Számbillentyűk 7",numpad8:"Számbillentyűk 8", +numpad9:"Számbillentyűk 9",multiply:"Szorzás",add:"Hozzáadás",subtract:"Kivonás",decimalPoint:"Tizedespont",divide:"Osztás",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Pontosvessző",equalSign:"Egyenlőségjel",comma:"Vessző",dash:"Kötőjel",period:"Pont",forwardSlash:"Perjel",graveAccent:"Visszafelé dőlő ékezet",openBracket:"Nyitó szögletes zárójel",backSlash:"fordított perjel",closeBracket:"Záró szögletes zárójel", +singleQuote:"szimpla idézőjel"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/id.js b/ckEditor/plugins/a11yhelp/dialogs/lang/id.js new file mode 100644 index 0000000..bf14b8a --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/id.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Accessibility Instructions",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/it.js b/ckEditor/plugins/a11yhelp/dialogs/lang/it.js new file mode 100644 index 0000000..4166252 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/it.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premi ${toolbarFocus} per navigare fino alla barra degli strumenti. Muoviti tra i gruppi della barra degli strumenti con i tasti Tab e Maiusc-Tab. Spostati tra il successivo ed il precedente pulsante della barra degli strumenti usando le frecce direzionali Destra e Sinistra. Premi Spazio o Invio per attivare il pulsante della barra degli strumenti."}, +{name:"Finestra Editor",legend:"All'interno di una finestra di dialogo, premi Tab per navigare fino al campo successivo della finestra di dialogo, premi Maiusc-Tab per tornare al campo precedente, premi Invio per inviare la finestra di dialogo, premi Esc per uscire. Per le finestre che hanno schede multiple, premi Alt+F10 per navigare nella lista delle schede. Quindi spostati alla scheda successiva con il tasto Tab oppure con la Freccia Destra. Torna alla scheda precedente con Maiusc+Tab oppure con la Freccia Sinistra. Premi Spazio o Invio per scegliere la scheda."}, +{name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."}, +{name:"Box Lista Editor",legend:"Dentro un box-lista, muoviti al prossimo elemento della lista con TAB o con la Freccia direzionale giù. Spostati all'elemento precedente con MAIUSC+TAB oppure con Freccia direzionale sopra. Premi SPAZIO o INVIO per scegliere l'opzione della lista. Premi ESC per chiudere il box-lista."},{name:"Barra percorso elementi editor",legend:"Premi ${elementsPathFocus} per navigare tra gli elementi della barra percorso. Muoviti al prossimo pulsante di elemento con TAB o la Freccia direzionale destra. Muoviti al pulsante precedente con MAIUSC+TAB o la Freccia Direzionale Sinistra. Premi SPAZIO o INVIO per scegliere l'elemento nell'editor."}]}, +{name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."}, +{name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Invio",shift:"Maiusc",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloc Maiusc",escape:"Esc",pageUp:"Pagina sù",pageDown:"Pagina giù", +end:"Fine",home:"Inizio",leftArrow:"Freccia sinistra",upArrow:"Freccia su",rightArrow:"Freccia destra",downArrow:"Freccia giù",insert:"Ins","delete":"Canc",leftWindowKey:"Tasto di Windows sinistro",rightWindowKey:"Tasto di Windows destro",selectKey:"Tasto di selezione",numpad0:"0 sul tastierino numerico",numpad1:"1 sul tastierino numerico",numpad2:"2 sul tastierino numerico",numpad3:"3 sul tastierino numerico",numpad4:"4 sul tastierino numerico",numpad5:"5 sul tastierino numerico",numpad6:"6 sul tastierino numerico", +numpad7:"7 sul tastierino numerico",numpad8:"8 sul tastierino numerico",numpad9:"9 sul tastierino numerico",multiply:"Moltiplicazione",add:"Più",subtract:"Sottrazione",decimalPoint:"Punto decimale",divide:"Divisione",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloc Num",scrollLock:"Bloc Scorr",semiColon:"Punto-e-virgola",equalSign:"Segno di uguale",comma:"Virgola",dash:"Trattino",period:"Punto",forwardSlash:"Barra",graveAccent:"Accento grave", +openBracket:"Parentesi quadra aperta",backSlash:"Barra rovesciata",closeBracket:"Parentesi quadra chiusa",singleQuote:"Apostrofo"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ja.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ja.js new file mode 100644 index 0000000..4a6b4c7 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ja.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助の説明",contents:"ヘルプ このダイアログを閉じるには ESCを押してください。",legend:[{name:"全般",items:[{name:"エディターツールバー",legend:"${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。"},{name:"編集ダイアログ",legend:"ダイヤログ内では、ダイアログの次の選択肢に移動するにはTabを押します。前の選択肢に移動するには、SHIFT+Tabを押します。ダイアログを決定するには、ENTERを押します。ESCでダイアログをキャンセルできます。複数のタブがあるダイアログではタブリストを操作するにはALT+F10を押します。次のタブに移動するにはTabか右カーソル、前のタブに戻るにはSHIFT+Tabか左カーソルです。タブページを決定するにはスペースもしくは、ENTERキーを押してください。"}, +{name:"エディターのメニュー",legend:"${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。"},{name:"エディターリストボックス",legend:"リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。"},{name:"エディター要素パスバー",legend:"${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。"}]}, +{name:"コマンド",items:[{name:"元に戻す",legend:"${undo} をクリック"},{name:"やり直し",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールバーを縮める",legend:"${toolbarCollapse} をクリック"},{name:"前のカーソル移動のできないポイントへ",legend:"${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"},{name:"次のカーソル移動のできないポイントへ",legend:"${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。"}, +{name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"左矢印",upArrow:"上矢印",rightArrow:"右矢印",downArrow:"下矢印",insert:"Insert","delete":"Delete",leftWindowKey:"左Windowキー",rightWindowKey:"右のWindowキー",selectKey:"Select",numpad0:"Num 0",numpad1:"Num 1",numpad2:"Num 2",numpad3:"Num 3",numpad4:"Num 4",numpad5:"Num 5", +numpad6:"Num 6",numpad7:"Num 7",numpad8:"Num 8",numpad9:"Num 9",multiply:"掛ける",add:"足す",subtract:"引く",decimalPoint:"小数点",divide:"割る",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"セミコロン",equalSign:"イコール記号",comma:"カンマ",dash:"ダッシュ",period:"ピリオド",forwardSlash:"フォワードスラッシュ",graveAccent:"グレイヴアクセント",openBracket:"開きカッコ",backSlash:"バックスラッシュ",closeBracket:"閉じカッコ",singleQuote:"シングルクォート"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/km.js b/ckEditor/plugins/a11yhelp/dialogs/lang/km.js new file mode 100644 index 0000000..bab2055 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/km.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាតិកា​ជំនួយ។ ដើម្បី​បិទ​ផ្ទាំង​នេះ សូម​ចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារ​ឧបករណ៍​កម្មវិធី​និពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"ពាក្យបញ្ជា",items:[{name:"ការ​បញ្ជា​មិនធ្វើវិញ",legend:"ចុច ${undo}"},{name:"ការបញ្ជា​ធ្វើវិញ",legend:"ចុច ${redo}"},{name:"ការបញ្ជា​អក្សរ​ដិត",legend:"ចុច ${bold}"},{name:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម", +legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",end:"ចុង",home:"ផ្ទះ",leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល","delete":"លុប",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"Decimal Point",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", +openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ko.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ko.js new file mode 100644 index 0000000..8337ee8 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ko.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"일반",items:[{name:"편집기 툴바",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"편집기 다이얼로그",legend:"다이얼로그 내부에서 TAB"},{name:"편집기 환경 메뉴",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, +{name:"편집기 목록 박스",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, +{name:"명령",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ku.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ku.js new file mode 100644 index 0000000..9641224 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ku.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT-TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر", +legend:"لەهەمانکاتدا کە تۆ لەدیالۆگی, کلیکی کلیلی TAB بۆ ڕابەری خانەی دیالۆگێکی تر, داگرتنی کلیلی SHIFT + TAB بۆ گواستنەوەی بۆ خانەی پێشووتر, کلیكی کلیلی ENTER بۆ ڕازیکردنی دیالۆگەکە, کلیكی کلیلی ESC بۆ هەڵوەشاندنەوەی دیالۆگەکە. بۆ دیالۆگی لەبازدەری (تابی) زیاتر, کلیكی کلیلی ALT + F10 بۆ ڕابەری لیستی بازدەرەکان. بۆ چوونە بازدەری تابی داهاتوو کلیكی کلیلی TAB یان کلیلی تیری دەستی ڕاست. بۆچوونە بازدەری تابی پێشوو داگرتنی کلیلی SHIFT + TAB یان کلیلی تیری دەستی چەپ. کلیی کلیلی SPACE یان ENTER بۆ هه‌ڵبژاردنی بازدەر (تاب)."}, +{name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."}, +{name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT + TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]}, +{name:"فەرمانەکان",items:[{name:"پووچکردنەوەی فەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی فەرمان",legend:"کلیك ${redo}"},{name:"فەرمانی دەقی قەڵەو",legend:"کلیك ${bold}"},{name:"فەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"فەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:"چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/lt.js b/ckEditor/plugins/a11yhelp/dialogs/lang/lt.js new file mode 100644 index 0000000..04d50a9 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/lt.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/lv.js b/ckEditor/plugins/a11yhelp/dialogs/lang/lv.js new file mode 100644 index 0000000..36ad0cd --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/lv.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."}, +{name:"Redaktora dialoga logs",legend:"Dialoga logā nospiediet pogu TAB lai pārvietotos uz nākošo dialoga loga lauku, nospiediet SHIFT+TAB lai atgrieztos iepriekšējā laukā, nospiediet ENTER lai apstiprinātu dialoga datus, nospiediet ESC lai aizvērtu šo dialogu. Dialogam kuram ir vairākas cilnes, nospiediet ALT+F10 lai pārvietotos uz nepieciešamo cilni. Lai pārvietotos uz nākošo cilni izmantojiet pogu TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo cilni nospiediet SHIFT+TAB vai kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos lapas cilni."}, +{name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."}, +{name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku. "},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT + TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]}, +{name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekšējai fokusa vietas komandai", +legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."},{name:"Piekļūt nākošā fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām."}, +{name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/mk.js b/ckEditor/plugins/a11yhelp/dialogs/lang/mk.js new file mode 100644 index 0000000..fa1b2ef --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/mk.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот", +legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."}, +{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, +{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/mn.js b/ckEditor/plugins/a11yhelp/dialogs/lang/mn.js new file mode 100644 index 0000000..d40e4d3 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/mn.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/nb.js b/ckEditor/plugins/a11yhelp/dialogs/lang/nb.js new file mode 100644 index 0000000..c86ef4a --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/nb.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", +legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, +{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, +{name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, +{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulator",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", +pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre piltast",upArrow:"Opp-piltast",rightArrow:"Høyre piltast",downArrow:"Ned-piltast",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows-tast",rightWindowKey:"Høyre Windows-tast",selectKey:"Select key",numpad0:"Numerisk tastatur 0",numpad1:"Numerisk tastatur 1",numpad2:"Numerisk tastatur 2",numpad3:"Numerisk tastatur 3",numpad4:"Numerisk tastatur 4",numpad5:"Numerisk tastatur 5",numpad6:"Numerisk tastatur 6",numpad7:"Numerisk tastatur 7", +numpad8:"Numerisk tastatur 8",numpad9:"Numerisk tastatur 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Likhetstegn",comma:"Komma",dash:"Bindestrek",period:"Punktum",forwardSlash:"Forover skråstrek",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Bakover skråstrek", +closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/nl.js b/ckEditor/plugins/a11yhelp/dialogs/lang/nl.js new file mode 100644 index 0000000..2194480 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/nl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."}, +{name:"Dialoog tekstverwerker",legend:"In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Voor dialoogvensters met meerdere tabbladen, druk op ALT+F10 om naar de tabset te navigeren. Schakel naar het volgende tabblad met TAB of PIJL RECHTS. Schakel naar het vorige tabblad met SHIFT+TAB of PIJL LINKS. Druk op SPATIE of ENTER om het tabblad te selecteren."}, +{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."},{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."}, +{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]},{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht", +legend:"Druk op ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."}, +{name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Pijl naar links",upArrow:"Pijl omhoog",rightArrow:"Pijl naar rechts",downArrow:"Pijl naar beneden",insert:"Invoegen","delete":"Verwijderen",leftWindowKey:"Linker Windows-toets",rightWindowKey:"Rechter Windows-toets",selectKey:"Selecteer toets",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Vermenigvuldigen",add:"Toevoegen", +subtract:"Aftrekken",decimalPoint:"Decimaalteken",divide:"Delen",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puntkomma",equalSign:"Is gelijk-teken",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Slash",graveAccent:"Accent grave",openBracket:"Vierkant haakje openen",backSlash:"Backslash",closeBracket:"Vierkant haakje sluiten",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/no.js b/ckEditor/plugins/a11yhelp/dialogs/lang/no.js new file mode 100644 index 0000000..6c69664 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/no.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor", +legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."}, +{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]}, +{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."}, +{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down", +end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/pl.js b/ckEditor/plugins/a11yhelp/dialogs/lang/pl.js new file mode 100644 index 0000000..05199b1 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/pl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczące dostępności",contents:"Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzędzi edytora",legend:"Wciśnij ${toolbarFocus} aby przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT-TAB. Przejdź do następnego i poprzedniego narzędzia używając STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Wciśnij SPACJĘ lub ENTER, aby aktywować zaznaczone narzędzie."}, +{name:"Okno dialogowe edytora",legend:"Będąc w oknie dialogowym wciśnij TAB aby przejść do następnego pola dialogowego, wciśnij SHIFT + TAB aby przejść do poprzedniego pola, wciśnij ENTER aby wysłać dialog, wciśnij ESC aby anulować dialog. Dla okien dialogowych z wieloma zakładkami, wciśnij ALT + F10 aby przejść do listy zakładek. Gdy to zrobisz przejdź do następnej zakładki wciskając TAB lub STRZAŁKĘ W PRAWO. Przejdź do poprzedniej zakładki wciskając SHIFT + TAB lub STRZAŁKĘ W LEWO. Wciśnij SPACJĘ lub ENTER aby wybrać zakładkę."}, +{name:"Menu kontekstowe edytora",legend:"Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC."},{name:"Lista w edytorze", +legend:"W polu listy możesz przechodzić do następnego elementu za pomocą klawisza TAB lub STRZAŁKI W DÓŁ. Poprzedni element osiągniesz za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Za pomocą SPACJI lub ENTERA wybierzesz daną opcję z listy, a za pomocą klawisza ESC opuścisz listę."},{name:"Pasek ścieżki elementów edytora",legend:"Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz Tab lub Strzałki w prawo. W celu przejścia do poprzedniego elementu naciśnij klawisze Shift+Tab lub Strzałki w lewo. By wybrać element w edytorze, użyj klawisza Spacji lub Enter."}]}, +{name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Strzałka w lewo", +upArrow:"Strzałka w górę",rightArrow:"Strzałka w prawo",downArrow:"Strzałka w dół",insert:"Insert","delete":"Delete",leftWindowKey:"Lewy klawisz Windows",rightWindowKey:"Prawy klawisz Windows",selectKey:"Klawisz wyboru",numpad0:"Klawisz 0 na klawiaturze numerycznej",numpad1:"Klawisz 1 na klawiaturze numerycznej",numpad2:"Klawisz 2 na klawiaturze numerycznej",numpad3:"Klawisz 3 na klawiaturze numerycznej",numpad4:"Klawisz 4 na klawiaturze numerycznej",numpad5:"Klawisz 5 na klawiaturze numerycznej", +numpad6:"Klawisz 6 na klawiaturze numerycznej",numpad7:"Klawisz 7 na klawiaturze numerycznej",numpad8:"Klawisz 8 na klawiaturze numerycznej",numpad9:"Klawisz 9 na klawiaturze numerycznej",multiply:"Multiply",add:"Plus",subtract:"Minus",decimalPoint:"Separator dziesiętny",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Średnik",equalSign:"Equal Sign",comma:"Przecinek",dash:"Dash", +period:"Kropka",forwardSlash:"Ukośnik prawy",graveAccent:"Grave Accent",openBracket:"Nawias kwadratowy otwierający",backSlash:"Ukośnik lewy",closeBracket:"Nawias kwadratowy zamykający",singleQuote:"Apostrof"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/pt-br.js b/ckEditor/plugins/a11yhelp/dialogs/lang/pt-br.js new file mode 100644 index 0000000..bdc9128 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/pt-br.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT-TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, +{name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo campo, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para enviar o diálogo, pressione ESC para cancelar o diálogo. Para diálogos que tem múltiplas abas, pressione ALT + F10 para navegar para a lista de abas, então mova para a próxima aba com SHIFT + TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar a aba."},{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."}, +{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT + TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."},{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]}, +{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"},{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."}, +{name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Tecla Backspace",tab:"Tecla Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", +pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/pt.js b/ckEditor/plugins/a11yhelp/dialogs/lang/pt.js new file mode 100644 index 0000000..c7cd070 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/pt.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de Acessibilidade",contents:"Conteúdos da Ajuda. Pressione em 'ESC' para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."}, +{name:"Janela do Editor",legend:"Dentro de uma janela, pressione TAB para navigar para o campo da janela seguinte, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para submeter a janela, pressione ESC para cancelar a janela. Para as janelas que têm múltiplos páginas com separadores, pressione ALT + F10 para navegar para a lista do separador. Depois mova para o seguinte separador com TAB ou SETA DIREITA. Mover para o separador anterior com SHIFT + TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o separador da página."}, +{name:"Menu de Contexto do Editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa Lista Editor",legend:"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista."}, +{name:"Caminho Barra Elemento Editor",legend:"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:"Comando de Anular",legend:"Pressione ${undo}"},{name:"Comando de Refazer",legend:"Pressione ${redo}"},{name:"Comando de Negrito",legend:"Pressione ${bold}"}, +{name:"Comando de Itálico",legend:"Pressione ${italic}"},{name:"Comando de Sublinhado",legend:"Pressione ${underline}"},{name:"Comando de Hiperligação",legend:"Pressione ${link}"},{name:"Comando de Ocultar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acesso comando do espaço focus anterior",legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."}, +{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up", +pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point", +divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ro.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ro.js new file mode 100644 index 0000000..1d1479a --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ro.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT-TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului."}, +{name:"Dialog editor",legend:"Într-un dialog, apasă TAB pentru a naviga spre câmpul următor de dialog, apasă SHIFT + TAB pentru a te duce la câmpul anterior, apasă ENTER pentru a trimite dialogul, apasă ESC pentru a anula dialogul. Pentru dialoguri care au mai multe subferestre, apasă ALT + F10 pentr a naviga în lista de subferestre. Treci la subferestrea următoare cu TAB sau SĂGEATĂ DREAPTA. Treci la subfereastra anterioară cu SHIFT + TAB sau SĂGEATĂ STÂNGA. Apasă SPAȚIU sau ENTER pentru a selecta subfereastra."}, +{name:"Editor meniu contextual",legend:"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC."},{name:"Editor Casetă Listă", +legend:"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT + TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]}, +{name:"Comenzi",items:[{name:" Undo command",legend:"Apasă ${undo}"},{name:"Comanda precedentă",legend:"Apasă ${redo}"},{name:"Comanda Îngroșat",legend:"Apasă ${bold}"},{name:"Comanda Inclinat",legend:"Apasă ${italic}"},{name:"Comanda Subliniere",legend:"Apasă ${underline}"},{name:"Comanda Legatură",legend:"Apasă ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow", +upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3", +f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ru.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ru.js new file mode 100644 index 0000000..f3108b1 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ru.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Горячие клавиши",contents:"Помощь. Для закрытия этого окна нажмите ESC.",legend:[{name:"Основное",items:[{name:"Панель инструментов",legend:"Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT-TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов."},{name:"Диалоги",legend:"В диалоговом окне, нажмите клавишу TAB для перехода к следующему диалоговому полю, нажмите клавиши SHIFT + TAB, чтобы перейти к предыдущему полю, нажмите ENTER, чтобы отправить данные, нажмите клавишу ESC, для отмены. Для окон, которые имеют несколько вкладок, нажмите ALT + F10 для перехода к списку вкладок. Переход к следующей вкладке TAB ИЛИ ПРАВУЮ СТРЕЛКУ. Переход к предыдущей вкладке с помощью SHIFT + TAB или ЛЕВАЯ СТРЕЛКА. Нажмите ПРОБЕЛ или ENTER, чтобы выбрать вкладку."}, +{name:"Контекстное меню",legend:'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.'},{name:"Редактор списка", +legend:'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT + TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.'},{name:"Путь к элементу",legend:'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.'}]}, +{name:"Команды",items:[{name:"Отменить",legend:"Нажмите ${undo}"},{name:"Повторить",legend:"Нажмите ${redo}"},{name:"Полужирный",legend:"Нажмите ${bold}"},{name:"Курсив",legend:"Нажмите ${italic}"},{name:"Подчеркнутый",legend:"Нажмите ${underline}"},{name:"Гиперссылка",legend:"Нажмите ${link}"},{name:"Свернуть панель инструментов",legend:"Нажмите ${toolbarCollapse}"},{name:"Команды доступа к предыдущему фокусному пространству",legend:'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.'}, +{name:"Команды доступа к следующему фокусному пространству",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горячим клавишам",legend:"Нажмите ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End", +home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide", +f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/si.js b/ckEditor/plugins/a11yhelp/dialogs/lang/si.js new file mode 100644 index 0000000..b5616dd --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/si.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟා වියහැකි ",contents:"උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"දෙබසක් තුළ, ඊළඟ දෙබස් පෙදෙසට යෑමට TAB බොත්තම ඔබන්න, කලින් පෙදෙසට යෑමට SHIFT + TAB බොත්තම ද, දෙබස් ඉදිරිපත් කිරීමට ENTER බොත්තම ද, දෙබස් නැවතීමට ESCබොත්තම ද, දෙබස් සහිත ගොනු, පිටු වැඩි සංක්‍යයාවක් ලබා ගෙනිමට,ගොනු තුළ එහාමෙහා යෑමට ALT + F10 බොත්තම් ද, ඊළඟ ගොනුවට යෑමට TAB හෝ RIGTH ARROW බොත්තම ඔබන්න. පෙර ගොනුවට යෑමට SHIFT + TAB හෝ LEFT ARROW බොත්තම් ද ,ගොනු පිටු තේරීමට SPACE හෝ ENTER බොත්තම් ද ඔබන්න."}, +{name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්‍රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT + TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න."}, +{name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT-TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්‍රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න."}]},{name:"විධාන",items:[{name:"විධානය වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.",legend:"ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}"},{name:"තද අකුරින් විධාන",legend:"ඔබන්න ${තද }"}, +{name:"බැධී අකුරු විධාන",legend:"ඔබන්න ${බැධී අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධාන.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධාන",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු හැකුලුම් විධාන",legend:"ඔබන්න ${මෙවලම් තීරු හැකුලුම් }"},{name:"යොමුවීමට පෙර වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග වැදගත් විධාන",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්‍රවේශ ",legend:"ඔබන්න ${a11y }"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl", +alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8", +numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/sk.js b/ckEditor/plugins/a11yhelp/dialogs/lang/sk.js new file mode 100644 index 0000000..3211133 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/sk.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT-TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."}, +{name:"Editorový dialóg",legend:"V dialogu, stlačte TAB pre navigáciu na ďalšie dialógové pole, stlačte STIFT + TAB pre presun na predchádzajúce pole, stlačte ENTER pre odoslanie dialógu, stlačte ESC pre zrušenie dialógu. Pre dialógy, ktoré majú viac záložiek, stlačte ALT + F10 pre navigácou do zoznamu záložiek. Potom sa posúvajte k ďalšej žáložke pomocou TAB alebo pravou šípkou. Pre presun k predchádzajúcej záložke, stlačte SHIFT + TAB alebo ľavú šípku. Stlačte medzerník alebo ENTER pre vybranie záložky."}, +{name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."}, +{name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT + TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]}, +{name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:"Prejsť na predchádzajúcu zamerateľnú medzeru príkazu",legend:"Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."}, +{name:"Prejsť na ďalší ",legend:"Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End", +home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide", +f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/sl.js b/ckEditor/plugins/a11yhelp/dialogs/lang/sl.js new file mode 100644 index 0000000..f99db09 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/sl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila Dostopnosti",contents:"Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.",legend:[{name:"Splošno",items:[{name:"Urejevalna Orodna Vrstica",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT-TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."}, +{name:"Urejevalno Pogovorno Okno",legend:"Znotraj pogovornega okna, pritisnite tipko TAB za pomik na naslednjo pogovorno polje, pritisnite SHIFT + TAB za pomik v prejšnje polje, pritisnite tipko ENTER za predložitev pogovornega okna, pritisnite tipko ESC, da prekličete okno. Za okna, ki imajo več zavihkov, pritisnite ALT + F10, da pojdete na seznam zavihkov. Na naslednji zavihek se premaknete s tipko TAB ali DESNO PUŠČICO. Z SHIFT + TAB ali LEVO PUŠČICO pa se premaknete na prejšnji zavihek. Pritisnite tipko SPACE ali ENTER za izbiro zavihka."}, +{name:"Urejevalni Kontekstni Meni",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC."},{name:"Urejevalno Seznamsko Polje", +legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT + TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT + TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]}, +{name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"Ležeči ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"Skrči Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejšnjega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."}, +{name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore."},{name:"Pomoč Dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End", +home:"Home",leftArrow:"Levo puščica",upArrow:"Gor puščica",rightArrow:"Desno puščica",downArrow:"Dol puščica",insert:"Insert","delete":"Delete",leftWindowKey:"Leva Windows tipka",rightWindowKey:"Desna Windows tipka",selectKey:"Select tipka",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Zmnoži",add:"Dodaj",subtract:"Odštej",decimalPoint:"Decimalna vejica", +divide:"Deli",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Podpičje",equalSign:"enačaj",comma:"Vejica",dash:"Vezaj",period:"Pika",forwardSlash:"Desna poševnica",graveAccent:"Krativec",openBracket:"Oklepaj",backSlash:"Leva poševnica",closeBracket:"Oklepaj",singleQuote:"Opuščaj"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/sq.js b/ckEditor/plugins/a11yhelp/dialogs/lang/sq.js new file mode 100644 index 0000000..7bcd769 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/sq.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"}, +{name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2", +numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent", +openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/sr-latn.js b/ckEditor/plugins/a11yhelp/dialogs/lang/sr-latn.js new file mode 100644 index 0000000..e1a720b --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/sr-latn.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/sr.js b/ckEditor/plugins/a11yhelp/dialogs/lang/sr.js new file mode 100644 index 0000000..a75fdd4 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/sr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command", +legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/sv.js b/ckEditor/plugins/a11yhelp/dialogs/lang/sv.js new file mode 100644 index 0000000..49f9293 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/sv.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT-TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck Space eller ENTER för att aktivera knappen i verktygsfältet."}, +{name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan. Du trycker SKIFT + TAB för att flytta till föregående fält. Tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT + F10 navigera till fliklistan. Flytta sedan till nästa flik med HÖGERPIL. Flytta till föregående flik med SHIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja fliken."},{name:"Editor för innehållsmeny", +legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},{name:"Editor för List Box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT + TAB eller UPPIL. Tryck Space eller ENTER för att välja listan alternativet. Tryck ESC för att stänga listan-boxen."}, +{name:"Editor för elementens sökväg",legend:"Tryck på $ {elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja element i redigeraren."}]},{name:"Kommandon",items:[{name:"Kommandot ångra",legend:"Tryck på ${undo}"},{name:"Kommandot gör om",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"}, +{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."},{name:"Tillgå nästa fokuskommandots utrymme", +legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}],backspace:"Backsteg",tab:"Tab",enter:"Retur",shift:"Skift",ctrl:"Ctrl",alt:"Alt",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",pageDown:"Sida Ned",end:"Slut",home:"Hem",leftArrow:"Vänsterpil",upArrow:"Uppil", +rightArrow:"Högerpil",downArrow:"Nedåtpil",insert:"Infoga","delete":"Radera",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt",divide:"Dividera",f1:"F1",f2:"F2",f3:"F3",f4:"F4", +f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/th.js b/ckEditor/plugins/a11yhelp/dialogs/lang/th.js new file mode 100644 index 0000000..4e7c3e0 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/th.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิกทำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้", +legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/tr.js b/ckEditor/plugins/a11yhelp/dialogs/lang/tr.js new file mode 100644 index 0000000..589cd6a --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/tr.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT-TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."}, +{name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."}, +{name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT + TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."}, +{name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT + TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"}, +{name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."}, +{name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash", +graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/tt.js b/ckEditor/plugins/a11yhelp/dialogs/lang/tt.js new file mode 100644 index 0000000..12cb6a8 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/tt.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."}, +{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."}, +{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Командалар",items:[{name:"Кайтару",legend:"${undo} басыгыз"},{name:"Кабатлау",legend:"${redo} басыгыз"},{name:"Калын",legend:"${bold} басыгыз"},{name:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"}, +{name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."}, +{name:" Accessibility Help",legend:"${a11yHelp} басыгыз"}]}],backspace:"Кайтару",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү","delete":"Бетерү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",numpad1:"Numpad 1", +numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек сызык", +graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",singleQuote:"Бер иңле куштырнаклар"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/ug.js b/ckEditor/plugins/a11yhelp/dialogs/lang/ug.js new file mode 100644 index 0000000..c7ab77c --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/ug.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT + TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT + F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛ SHIFT + TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ."}, +{name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى", +legend:"تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT + TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]}, +{name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:"ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."}, +{name:"كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape", +pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract", +decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/uk.js b/ckEditor/plugins/a11yhelp/dialogs/lang/uk.js new file mode 100644 index 0000000..7c8f909 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/uk.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні Інструкції",contents:"Довідка. Натисніть ESC і вона зникне.",legend:[{name:"Основне",items:[{name:"Панель Редактора",legend:"Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT-TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів"},{name:"Діалог Редактора", +legend:"У діалозі натисніть клавішу TAB для переходу до наступного поля, натисніть SHIFT + TAB, щоб перейти до попереднього поля, натисніть ENTER, щоб відправити дані, натисніть ESC, щоб скасувати. Для вікон, які мають кілька вкладок, натисніть ALT + F10 для переходу до списку вкладок. Перехід до наступної вкладки TAB АБО СТРІЛКА ВПРАВО. Перехід до попередньої вкладки за допомогою SHIFT + TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER, щоб вибрати вкладку."},{name:"Контекстне Меню Редактора", +legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC."},{name:"Скринька Списків Редактора",legend:"Всередині списку переходимо до наступного пункту списку клавішею TAB або СТРІЛКА ВНИЗ. Перейти до попереднього елемента списку можна SHIFT + TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список."}, +{name:"Шлях до елемента редактора",legend:"Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі."}]},{name:"Команди",items:[{name:"Відмінити команду",legend:"Натисніть ${undo}"},{name:"Повторити",legend:"Натисніть ${redo}"},{name:"Жирний",legend:"Натисніть ${bold}"},{name:"Курсив",legend:"Натисніть ${italic}"}, +{name:"Підкреслений",legend:"Натисніть ${underline}"},{name:"Посилання",legend:"Натисніть ${link}"},{name:"Згорнути панель інструментів",legend:"Натисніть ${toolbarCollapse}"},{name:"Доступ до попереднього місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."},{name:"Доступ до наступного місця фокусування",legend:"Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування."}, +{name:"Допомога з доступності",legend:"Натисніть ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Ліва стрілка",upArrow:"Стрілка вгору",rightArrow:"Права стрілка",downArrow:"Стрілка вниз",insert:"Вставити","delete":"Видалити",leftWindowKey:"Ліва клавіша Windows",rightWindowKey:"Права клавіша Windows",selectKey:"Виберіть клавішу",numpad0:"Numpad 0", +numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Множення",add:"Додати",subtract:"Віднімання",decimalPoint:"Десяткова кома",divide:"Ділення",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Крапка з комою",equalSign:"Знак рівності",comma:"Кома",dash:"Тире",period:"Період", +forwardSlash:"Коса риска",graveAccent:"Гравіс",openBracket:"Відкрити дужку",backSlash:"Зворотна коса риска",closeBracket:"Закрити дужку",singleQuote:"Одинарні лапки"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/vi.js b/ckEditor/plugins/a11yhelp/dialogs/lang/vi.js new file mode 100644 index 0000000..e82e39a --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/vi.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Hướng dẫn trợ năng",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT-TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Hộp thoại Biên t",legend:"Bên trong một hộp thoại, nhấn TAB để chuyển sang trường tiếp theo, nhấn SHIFT + TAB để quay lại trường phía trước, nhấn ENTER để chấp nhận, nhấn ESC để đóng hộp thoại. Đối với các hộp thoại có nhiều tab, nhấn ALT + F10 để chuyển đến danh sách các tab. Sau đó nhấn TAB hoặc MŨI TÊN SANG PHẢI để chuyển sang tab tiếp theo. Nhấn SHIFT + TAB hoặc MŨI TÊN SANG TRÁI để chuyển sang tab trước đó. Nhấn DẤU CÁCH hoặc ENTER để chọn tab."}, +{name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh."}, +{name:"Hộp danh sách trình biên tập",legend:"Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím Tab hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím Shift+Tab hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím Enter để chọn các tùy chọn trong danh sách. Nhấn phím Esc để đóng lại danh sách chọn."},{name:"Thanh đường dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím Tab hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím Shift+Tab hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc Enter để chọn đối tượng trong trình soạn thảo."}]}, +{name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dưới",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trước đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."}, +{name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}],backspace:"Phím Backspace",tab:"Phím Tab",enter:"Phím Tab",shift:"Phím Shift",ctrl:"Phím Ctrl",alt:"Phím Alt",pause:"Phím Pause",capslock:"Phím Caps Lock", +escape:"Phím Escape",pageUp:"Phím Page Up",pageDown:"Phím Page Down",end:"Phím End",home:"Phím Home",leftArrow:"Phím Left Arrow",upArrow:"Phím Up Arrow",rightArrow:"Phím Right Arrow",downArrow:"Phím Down Arrow",insert:"Chèn","delete":"Xóa",leftWindowKey:"Phím Left Windows",rightWindowKey:"Phím Right Windows ",selectKey:"Chọn phím",numpad0:"Phím 0",numpad1:"Phím 1",numpad2:"Phím 2",numpad3:"Phím 3",numpad4:"Phím 4",numpad5:"Phím 5",numpad6:"Phím 6",numpad7:"Phím 7",numpad8:"Phím 8",numpad9:"Phím 9", +multiply:"Nhân",add:"Thêm",subtract:"Trừ",decimalPoint:"Điểm số thập phân",divide:"Chia",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Dấu chấm phẩy",equalSign:"Đăng nhập bằng",comma:"Dấu phẩy",dash:"Dấu gạch ngang",period:"Phím .",forwardSlash:"Phím /",graveAccent:"Phím `",openBracket:"Open Bracket",backSlash:"Dấu gạch chéo ngược",closeBracket:"Gần giá đỡ",singleQuote:"Trích dẫn"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/ckEditor/plugins/a11yhelp/dialogs/lang/zh-cn.js new file mode 100644 index 0000000..fe2cab0 --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/zh-cn.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 导航到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个和下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。"},{name:"编辑器对话框",legend:"在对话框内,TAB 键移动到下一个字段,SHIFT + TAB 组合键移动到上一个字段,ENTER 键提交对话框,ESC 键取消对话框。对于有多选项卡的对话框,用ALT + F10来移到选项卡列表。然后用 TAB 键或者向右箭头来移动到下一个选项卡;SHIFT + TAB 组合键或者向左箭头移动到上一个选项卡。用 SPACE 键或者 ENTER 键选择选项卡。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"}, +{name:"编辑器列表框",legend:"在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT + TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"}, +{name:"访问前一个焦点区域的命令",legend:"按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}],backspace:"退格键",tab:"Tab 键",enter:"回车键",shift:"Shift 键",ctrl:"Ctrl 键",alt:"Alt 键",pause:"暂停键",capslock:"大写锁定键",escape:"Esc 键",pageUp:"上翻页键",pageDown:"下翻页键",end:"行尾键",home:"行首键",leftArrow:"向左箭头键",upArrow:"向上箭头键",rightArrow:"向右箭头键",downArrow:"向下箭头键", +insert:"插入键","delete":"删除键",leftWindowKey:"左 WIN 键",rightWindowKey:"右 WIN 键",selectKey:"选择键",numpad0:"小键盘 0 键",numpad1:"小键盘 1 键",numpad2:"小键盘 2 键",numpad3:"小键盘 3 键",numpad4:"小键盘 4 键",numpad5:"小键盘 5 键",numpad6:"小键盘 6 键",numpad7:"小键盘 7 键",numpad8:"小键盘 8 键",numpad9:"小键盘 9 键",multiply:"星号键",add:"加号键",subtract:"减号键",decimalPoint:"小数点键",divide:"除号键",f1:"F1 键",f2:"F2 键",f3:"F3 键",f4:"F4 键",f5:"F5 键",f6:"F6 键",f7:"F7 键",f8:"F8 键",f9:"F9 键",f10:"F10 键",f11:"F11 键",f12:"F12 键",numLock:"数字锁定键",scrollLock:"滚动锁定键", +semiColon:"分号键",equalSign:"等号键",comma:"逗号键",dash:"短划线键",period:"句号键",forwardSlash:"斜杠键",graveAccent:"重音符键",openBracket:"左中括号键",backSlash:"反斜杠键",closeBracket:"右中括号键",singleQuote:"单引号键"}); \ No newline at end of file diff --git a/ckEditor/plugins/a11yhelp/dialogs/lang/zh.js b/ckEditor/plugins/a11yhelp/dialogs/lang/zh.js new file mode 100644 index 0000000..67a248f --- /dev/null +++ b/ckEditor/plugins/a11yhelp/dialogs/lang/zh.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指南",contents:"說明內容。若要關閉此對話框請按「ESC」。",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按「${toolbarFocus}」以瀏覽工具列。\r\n利用「TAB」或「SHIFT+TAB」以便移動到下一個或前一個工具列群組。\r\n利用「→」或「←」以便移動到下一個或前一個工具列按鈕。\r\n請按下「空白鍵」或「ENTER」鍵啟動工具列按鈕。"},{name:"編輯器對話方塊",legend:"在對話框中,請按 TAB 鍵以便移動到下個欄位,請按 SHIFT + TAB 以便移動到前個欄位;請按 ENTER 以提交對話框資料,或按下 ESC 取消對話框。\r\n若是有多個頁框的對話框,請按 ALT + F10 以移動到頁框列表,並以 TAB 或是 → 方向鍵移動到下個頁框。以 SHIFT + TAB 或是 ← 方向鍵移動到前個頁框。按下 空白鍵 或是 ENTER 以選取頁框。"},{name:"編輯器內容功能表", +legend:"請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。"},{name:"編輯器清單方塊",legend:"在列表中,請利用 TAB 或 ↓ 方向鍵以移動到下一個項目;或利用 SHIFT + TAB 或 ↑ 方向鍵移動到前一個項目。請按下 空白鍵 或是 ENTER 以選取項目。請按 ESC 關閉列表。"},{name:"編輯器元件路徑工具列",legend:"請按「${elementsPathFocus}」以瀏覽元素路徑工具列。\r\n利用「TAB」或「→」以便移動到下一個元素按鈕。\r\n利用「SHIFT+TAB」或「←」以便移動到前一個元素按鈕。\r\n請按下「空白鍵」或「ENTER」鍵選擇編輯器中的元素。"}]},{name:"命令",items:[{name:"復原命令", +legend:"請按下「${undo}」"},{name:"重複命令",legend:"請按下「 ${redo}」"},{name:"粗體命令",legend:"請按下「${bold}」"},{name:"斜體",legend:"請按下「${italic}」"},{name:"底線命令",legend:"請按下「${underline}」"},{name:"連結",legend:"請按下「${link}」"},{name:"隱藏工具列",legend:"請按下「${toolbarCollapse}」"},{name:"存取前一個焦點空間命令",legend:"請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"存取下一個焦點空間命令",legend:"請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。"},{name:"協助工具說明",legend:"請按下「${a11yHelp}」"}]}], +backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4", +numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket", +backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file diff --git a/ckEditor/plugins/about/dialogs/about.js b/ckEditor/plugins/about/dialogs/about.js new file mode 100644 index 0000000..da32281 --- /dev/null +++ b/ckEditor/plugins/about/dialogs/about.js @@ -0,0 +1,7 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("about",function(a){var a=a.lang.about,b=CKEDITOR.plugins.get("about").path+"dialogs/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"logo_ckeditor.png";return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+ +b+");"+(CKEDITOR.env.hidpi?"background-size:163px 58px;":"")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}</style><div class="cke_about_container"><div class="cke_about_logo"></div><p>CKEditor '+CKEDITOR.version+" (revision "+CKEDITOR.revision+')<br><a target="_blank" href="http://ckeditor.com/">http://ckeditor.com</a></p><p>'+a.help.replace("$1",'<a target="_blank" href="http://docs.ckeditor.com/user">'+ +a.userGuide+"</a>")+"</p><p>"+a.moreInfo+'<br><a target="_blank" href="http://ckeditor.com/about/license">http://ckeditor.com/about/license</a></p><p>'+a.copy.replace("$1",'<a target="_blank" href="http://cksource.com/">CKSource</a> - Frederico Knabben')+"</p></div>"}]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file diff --git a/ckEditor/plugins/about/dialogs/hidpi/logo_ckeditor.png b/ckEditor/plugins/about/dialogs/hidpi/logo_ckeditor.png new file mode 100644 index 0000000..10cc736 Binary files /dev/null and b/ckEditor/plugins/about/dialogs/hidpi/logo_ckeditor.png differ diff --git a/ckEditor/plugins/about/dialogs/logo_ckeditor.png b/ckEditor/plugins/about/dialogs/logo_ckeditor.png new file mode 100644 index 0000000..f186eb8 Binary files /dev/null and b/ckEditor/plugins/about/dialogs/logo_ckeditor.png differ diff --git a/ckEditor/plugins/clipboard/dialogs/paste.js b/ckEditor/plugins/clipboard/dialogs/paste.js new file mode 100644 index 0000000..fd793e9 --- /dev/null +++ b/ckEditor/plugins/clipboard/dialogs/paste.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("paste",function(c){function h(a){var b=new CKEDITOR.dom.document(a.document),f=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();f.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement)); +b.getWindow().getFrame().removeCustomData("pendingFocus")&&f.focus()}var e=c.lang.clipboard;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data})},null,null,1E3);return{title:e.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||e.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat|| +CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'<div style="white-space:normal;width:340px">'+e.securityMsg+"</div>"},{type:"html",id:"pasteMsg",html:'<div style="white-space:normal;width:340px">'+e.pasteMsg+"</div>"},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(), +b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='<html dir="'+c.config.contentsLangDirection+'" lang="'+(c.config.contentsLanguage||c.langCode)+'"><head><style>body{margin:3px;height:95%}</style></head><body><script id="cke_actscrpt" type="text/javascript">window.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(h,a)+",this);<\/script></body></html>",f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie? +"javascript:void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+'})())"':"",d=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0" allowTransparency="true" src="'+f+'" role="region" aria-label="'+e.pasteArea+'" aria-describedby="'+a.getContentElement("general","pasteMsg").domId+'" aria-multiple="true"></iframe>');d.on("load",function(a){a.removeListener();a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody()); +CKEDITOR.env.air&&h.call(this,a.getWindow().$)},a);d.setCustomData("dialog",a);a=this.getElement();a.setHtml("");a.append(d);if(CKEDITOR.env.ie){var g=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute" role="presentation"></span>');g.on("focus",function(){setTimeout(function(){d.$.contentWindow.focus()})});a.append(g);this.focus=function(){g.focus();this.fire("focus")}}this.getInputElement=function(){return d};CKEDITOR.env.ie&&(a.setStyle("display","block"),a.setStyle("height", +d.$.offsetHeight+2+"px"))},commit:function(){var a=this.getDialog().getParentEditor(),b=this.getInputElement().getFrameDocument().getBody(),c=b.getBogus(),d;c&&c.remove();d=b.getHtml();setTimeout(function(){a.fire("pasteDialogCommit",d)},0)}}]}]}}); \ No newline at end of file diff --git a/ckEditor/plugins/dialog/dialogDefinition.js b/ckEditor/plugins/dialog/dialogDefinition.js new file mode 100644 index 0000000..67d361c --- /dev/null +++ b/ckEditor/plugins/dialog/dialogDefinition.js @@ -0,0 +1,4 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ diff --git a/ckEditor/plugins/icons.png b/ckEditor/plugins/icons.png new file mode 100644 index 0000000..ee02970 Binary files /dev/null and b/ckEditor/plugins/icons.png differ diff --git a/ckEditor/plugins/icons_hidpi.png b/ckEditor/plugins/icons_hidpi.png new file mode 100644 index 0000000..0466c2b Binary files /dev/null and b/ckEditor/plugins/icons_hidpi.png differ diff --git a/ckEditor/plugins/image/dialogs/image.js b/ckEditor/plugins/image/dialogs/image.js new file mode 100644 index 0000000..953de69 --- /dev/null +++ b/ckEditor/plugins/image/dialogs/image.js @@ -0,0 +1,43 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){var r=function(c,j){function r(){var a=arguments,b=this.getContentElement("advanced","txtdlgGenStyle");b&&b.commit.apply(b,a);this.foreach(function(b){b.commit&&"txtdlgGenStyle"!=b.id&&b.commit.apply(b,a)})}function i(a){if(!s){s=1;var b=this.getDialog(),d=b.imageElement;if(d){this.commit(f,d);for(var a=[].concat(a),e=a.length,c,g=0;g<e;g++)(c=b.getContentElement.apply(b,a[g].split(":")))&&c.setup(f,d)}s=0}}var f=1,k=/^\s*(\d+)((px)|\%)?\s*$/i,v=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,o=/^\d+px$/, +w=function(){var a=this.getValue(),b=this.getDialog(),d=a.match(k);d&&("%"==d[2]&&l(b,!1),a=d[1]);b.lockRatio&&(d=b.originalElement,"true"==d.getCustomData("isReady")&&("txtHeight"==this.id?(a&&"0"!=a&&(a=Math.round(d.$.width*(a/d.$.height))),isNaN(a)||b.setValueOf("info","txtWidth",a)):(a&&"0"!=a&&(a=Math.round(d.$.height*(a/d.$.width))),isNaN(a)||b.setValueOf("info","txtHeight",a))));g(b)},g=function(a){if(!a.originalElement||!a.preview)return 1;a.commitContent(4,a.preview);return 0},s,l=function(a, +b){if(!a.getContentElement("info","ratioLock"))return null;var d=a.originalElement;if(!d)return null;if("check"==b){if(!a.userlockRatio&&"true"==d.getCustomData("isReady")){var e=a.getValueOf("info","txtWidth"),c=a.getValueOf("info","txtHeight"),d=1E3*d.$.width/d.$.height,f=1E3*e/c;a.lockRatio=!1;!e&&!c?a.lockRatio=!0:!isNaN(d)&&!isNaN(f)&&Math.round(d)==Math.round(f)&&(a.lockRatio=!0)}}else void 0!=b?a.lockRatio=b:(a.userlockRatio=1,a.lockRatio=!a.lockRatio);e=CKEDITOR.document.getById(p);a.lockRatio? +e.removeClass("cke_btn_unlocked"):e.addClass("cke_btn_unlocked");e.setAttribute("aria-checked",a.lockRatio);CKEDITOR.env.hc&&e.getChild(0).setHtml(a.lockRatio?CKEDITOR.env.ie?"■":"▣":CKEDITOR.env.ie?"□":"▢");return a.lockRatio},x=function(a){var b=a.originalElement;if("true"==b.getCustomData("isReady")){var d=a.getContentElement("info","txtWidth"),e=a.getContentElement("info","txtHeight");d&&d.setValue(b.$.width);e&&e.setValue(b.$.height)}g(a)},y=function(a,b){function d(a,b){var d=a.match(k);return d? +("%"==d[2]&&(d[1]+="%",l(e,!1)),d[1]):b}if(a==f){var e=this.getDialog(),c="",g="txtWidth"==this.id?"width":"height",h=b.getAttribute(g);h&&(c=d(h,c));c=d(b.getStyle(g),c);this.setValue(c)}},t,q=function(){var a=this.originalElement;a.setCustomData("isReady","true");a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);CKEDITOR.document.getById(m).setStyle("display","none");this.dontResetSize||x(this);this.firstLoad&&CKEDITOR.tools.setTimeout(function(){l(this,"check")}, +0,this);this.dontResetSize=this.firstLoad=!1},h=function(){var a=this.originalElement;a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);a=CKEDITOR.getUrl(CKEDITOR.plugins.get("image").path+"images/noimage.png");this.preview&&this.preview.setAttribute("src",a);CKEDITOR.document.getById(m).setStyle("display","none");l(this,!1)},n=function(a){return CKEDITOR.tools.getNextId()+"_"+a},p=n("btnLockSizes"),u=n("btnResetSize"),m=n("ImagePreviewLoader"),A=n("previewLink"), +z=n("previewImage");return{title:c.lang.image["image"==j?"title":"titleButton"],minWidth:420,minHeight:360,onShow:function(){this.linkEditMode=this.imageEditMode=this.linkElement=this.imageElement=!1;this.lockRatio=!0;this.userlockRatio=0;this.dontResetSize=!1;this.firstLoad=!0;this.addLink=!1;var a=this.getParentEditor(),b=a.getSelection(),d=(b=b&&b.getSelectedElement())&&a.elementPath(b).contains("a",1);CKEDITOR.document.getById(m).setStyle("display","none");t=new CKEDITOR.dom.element("img",a.document); +this.preview=CKEDITOR.document.getById(z);this.originalElement=a.document.createElement("img");this.originalElement.setAttribute("alt","");this.originalElement.setCustomData("isReady","false");if(d){this.linkElement=d;this.linkEditMode=!0;var c=d.getChildren();if(1==c.count()){var g=c.getItem(0).getName();if("img"==g||"input"==g)this.imageElement=c.getItem(0),"img"==this.imageElement.getName()?this.imageEditMode="img":"input"==this.imageElement.getName()&&(this.imageEditMode="input")}"image"==j&& +this.setupContent(2,d)}if(this.customImageElement)this.imageEditMode="img",this.imageElement=this.customImageElement,delete this.customImageElement;else if(b&&"img"==b.getName()&&!b.data("cke-realelement")||b&&"input"==b.getName()&&"image"==b.getAttribute("type"))this.imageEditMode=b.getName(),this.imageElement=b;this.imageEditMode?(this.cleanImageElement=this.imageElement,this.imageElement=this.cleanImageElement.clone(!0,!0),this.setupContent(f,this.imageElement)):this.imageElement=a.document.createElement("img"); +l(this,!0);CKEDITOR.tools.trim(this.getValueOf("info","txtUrl"))||(this.preview.removeAttribute("src"),this.preview.setStyle("display","none"))},onOk:function(){if(this.imageEditMode){var a=this.imageEditMode;"image"==j&&"input"==a&&confirm(c.lang.image.button2Img)?(this.imageElement=c.document.createElement("img"),this.imageElement.setAttribute("alt",""),c.insertElement(this.imageElement)):"image"!=j&&"img"==a&&confirm(c.lang.image.img2Button)?(this.imageElement=c.document.createElement("input"), +this.imageElement.setAttributes({type:"image",alt:""}),c.insertElement(this.imageElement)):(this.imageElement=this.cleanImageElement,delete this.cleanImageElement)}else"image"==j?this.imageElement=c.document.createElement("img"):(this.imageElement=c.document.createElement("input"),this.imageElement.setAttribute("type","image")),this.imageElement.setAttribute("alt","");this.linkEditMode||(this.linkElement=c.document.createElement("a"));this.commitContent(f,this.imageElement);this.commitContent(2,this.linkElement); +this.imageElement.getAttribute("style")||this.imageElement.removeAttribute("style");this.imageEditMode?!this.linkEditMode&&this.addLink?(c.insertElement(this.linkElement),this.imageElement.appendTo(this.linkElement)):this.linkEditMode&&!this.addLink&&(c.getSelection().selectElement(this.linkElement),c.insertElement(this.imageElement)):this.addLink?this.linkEditMode?c.insertElement(this.imageElement):(c.insertElement(this.linkElement),this.linkElement.append(this.imageElement,!1)):c.insertElement(this.imageElement)}, +onLoad:function(){"image"!=j&&this.hidePage("Link");var a=this._.element.getDocument();this.getContentElement("info","ratioLock")&&(this.addFocusable(a.getById(u),5),this.addFocusable(a.getById(p),5));this.commitContent=r},onHide:function(){this.preview&&this.commitContent(8,this.preview);this.originalElement&&(this.originalElement.removeListener("load",q),this.originalElement.removeListener("error",h),this.originalElement.removeListener("abort",h),this.originalElement.remove(),this.originalElement= +!1);delete this.imageElement},contents:[{id:"info",label:c.lang.image.infoTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"],align:"right",children:[{id:"txtUrl",type:"text",label:c.lang.common.url,required:!0,onChange:function(){var a=this.getDialog(),b=this.getValue();if(0<b.length){var a=this.getDialog(),d=a.originalElement;a.preview.removeStyle("display");d.setCustomData("isReady","false");var c=CKEDITOR.document.getById(m);c&&c.setStyle("display", +"");d.on("load",q,a);d.on("error",h,a);d.on("abort",h,a);d.setAttribute("src",b);t.setAttribute("src",b);a.preview.setAttribute("src",t.$.src);g(a)}else a.preview&&(a.preview.removeAttribute("src"),a.preview.setStyle("display","none"))},setup:function(a,b){if(a==f){var d=b.data("cke-saved-src")||b.getAttribute("src");this.getDialog().dontResetSize=!0;this.setValue(d);this.setInitValue()}},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())?(b.data("cke-saved-src",this.getValue()),b.setAttribute("src", +this.getValue())):8==a&&(b.setAttribute("src",""),b.removeAttribute("src"))},validate:CKEDITOR.dialog.validate.notEmpty(c.lang.image.urlMissing)},{type:"button",id:"browse",style:"display:inline-block;margin-top:10px;",align:"center",label:c.lang.common.browseServer,hidden:!0,filebrowser:"info:txtUrl"}]}]},{id:"txtAlt",type:"text",label:c.lang.image.alt,accessKey:"T","default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("alt"))},commit:function(a, +b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("alt",this.getValue()):4==a?b.setAttribute("alt",this.getValue()):8==a&&b.removeAttribute("alt")}},{type:"hbox",children:[{id:"basic",type:"vbox",children:[{type:"hbox",requiredContent:"img{width,height}",widths:["50%","50%"],children:[{type:"vbox",padding:1,children:[{type:"text",width:"45px",id:"txtWidth",label:c.lang.common.width,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(v); +(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidWidth);return a},setup:y,commit:function(a,b,d){var c=this.getValue();a==f?(c?b.setStyle("width",CKEDITOR.tools.cssLength(c)):b.removeStyle("width"),!d&&b.removeAttribute("width")):4==a?c.match(k)?b.setStyle("width",CKEDITOR.tools.cssLength(c)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("width",a.$.width+"px")):8==a&&(b.removeAttribute("width"),b.removeStyle("width"))}},{type:"text",id:"txtHeight", +width:"45px",label:c.lang.common.height,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidHeight);return a},setup:y,commit:function(a,b,d){var c=this.getValue();a==f?(c?b.setStyle("height",CKEDITOR.tools.cssLength(c)):b.removeStyle("height"),!d&&b.removeAttribute("height")):4==a?c.match(k)?b.setStyle("height",CKEDITOR.tools.cssLength(c)):(a=this.getDialog().originalElement, +"true"==a.getCustomData("isReady")&&b.setStyle("height",a.$.height+"px")):8==a&&(b.removeAttribute("height"),b.removeStyle("height"))}}]},{id:"ratioLock",type:"html",style:"margin-top:30px;width:40px;height:40px;",onLoad:function(){var a=CKEDITOR.document.getById(u),b=CKEDITOR.document.getById(p);a&&(a.on("click",function(a){x(this);a.data&&a.data.preventDefault()},this.getDialog()),a.on("mouseover",function(){this.addClass("cke_btn_over")},a),a.on("mouseout",function(){this.removeClass("cke_btn_over")}, +a));b&&(b.on("click",function(a){l(this);var b=this.originalElement,c=this.getValueOf("info","txtWidth");if(b.getCustomData("isReady")=="true"&&c){b=b.$.height/b.$.width*c;if(!isNaN(b)){this.setValueOf("info","txtHeight",Math.round(b));g(this)}}a.data&&a.data.preventDefault()},this.getDialog()),b.on("mouseover",function(){this.addClass("cke_btn_over")},b),b.on("mouseout",function(){this.removeClass("cke_btn_over")},b))},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.lockRatio+ +'" class="cke_btn_locked" id="'+p+'" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+c.lang.image.lockRatio+'</span></a><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.resetSize+'" class="cke_btn_reset" id="'+u+'" role="button"><span class="cke_label">'+c.lang.image.resetSize+"</span></a></div>"}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",requiredContent:"img{border-width}",width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())}, +onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d=(d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&&parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)), +b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",requiredContent:"img{margin-left,margin-right}",width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace), +setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d;isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")):(b.setStyle("margin-left",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(e))), +!c&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",requiredContent:"img{margin-top,margin-bottom}",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace),setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e= +b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):(b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))),!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"), +b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",requiredContent:"img{float}",type:"select",widths:["35%","65%"],style:"width:90px",label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this,"advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float");switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")|| +"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&&a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",id:"htmlPreview",style:"width:95%;",html:"<div>"+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+'<br><div id="'+m+'" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div><div class="ImagePreviewBox"><table><tr><td><a href="javascript:void(0)" target="_blank" onclick="return false;" id="'+ +A+'"><img id="'+z+'" alt="" /></a>'+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+ +"</td></tr></table></div></div>"}]}]}]},{id:"Link",requiredContent:"a[href]",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=decodeURI(this.getValue());b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink= +!0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",requiredContent:"a[target]",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")|| +"")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"], +children:[{type:"text",id:"linkId",requiredContent:"img[id]",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",requiredContent:"img[dir]",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))}, +commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",requiredContent:"img[lang]",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",requiredContent:"img[longdesc]",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))}, +commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",requiredContent:"img(cke-xyz)",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",requiredContent:"img[title]",label:c.lang.common.advisoryTitle, +"default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))},commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",requiredContent:"img{cke-xyz}",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a, +b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width,e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}}; +CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})(); \ No newline at end of file diff --git a/ckEditor/plugins/image/images/noimage.png b/ckEditor/plugins/image/images/noimage.png new file mode 100644 index 0000000..1598113 Binary files /dev/null and b/ckEditor/plugins/image/images/noimage.png differ diff --git a/ckEditor/plugins/link/dialogs/anchor.js b/ckEditor/plugins/link/dialogs/anchor.js new file mode 100644 index 0000000..e0192b2 --- /dev/null +++ b/ckEditor/plugins/link/dialogs/anchor.js @@ -0,0 +1,7 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("anchor",function(c){function d(a,b){return a.createFakeElement(a.document.createElement("a",{attributes:b}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=d(c,a),a.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(a)): +this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(a=d(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data("cke-realelement"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c); +e&&(this._.selectedElement=e,this.setValueOf("info","txtName",e.data("cke-saved-name")||""),!d&&a.selectElement(e),b&&(this._.selectedElement=b));this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}}); \ No newline at end of file diff --git a/ckEditor/plugins/link/dialogs/link.js b/ckEditor/plugins/link/dialogs/link.js new file mode 100644 index 0000000..312fb7b --- /dev/null +++ b/ckEditor/plugins/link/dialogs/link.js @@ -0,0 +1,26 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){CKEDITOR.dialog.add("link",function(g){var l=CKEDITOR.plugins.link,m=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),k=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),k){case "frame":a.setLabel(g.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(g.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(k),a.getElement().hide()}}, +f=function(a){a.target&&this.setValue(a.target[this.id]||"")},h=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},i=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},j=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},c=g.lang.common,b=g.lang.link,d;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:"info",label:b.info,title:b.info,elements:[{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"], +[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],k=this.getValue(),e=a.definition.getContents("upload"),e=e&&e.hidden;"url"==k?(g.config.linkShowTargetTab&&a.showPage("target"),e||a.showPage("upload")):(a.hidePage("target"),e||a.hidePage("upload"));for(e=0;e<b.length;e++){var c=a.getContentElement("info",b[e]);c&&(c=c.getElement().getParent().getParent(),b[e]==k+"Options"?c.show():c.hide())}a.layout()},setup:function(a){this.setValue(a.type|| +"url")},commit:function(a){a.type=this.getValue()}},{type:"vbox",id:"urlOptions",children:[{type:"hbox",widths:["25%","75%"],children:[{id:"protocol",type:"select",label:c.protocol,"default":"http://",items:[["http://‎","http://"],["https://‎","https://"],["ftp://‎","ftp://"],["news://‎","news://"],[b.other,""]],setup:function(a){a.url&&this.setValue(a.url.protocol||"")},commit:function(a){a.url||(a.url={});a.url.protocol=this.getValue()}},{type:"text",id:"url",label:c.url,required:!0,onLoad:function(){this.allowOnChange= +!0},onKeyUp:function(){this.allowOnChange=!1;var a=this.getDialog().getContentElement("info","protocol"),b=this.getValue(),k=/^((javascript:)|[#\/\.\?])/i,c=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);c?(this.setValue(b.substr(c[0].length)),a.setValue(c[0].toLowerCase())):k.test(b)&&a.setValue("");this.allowOnChange=!0},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();return a.getContentElement("info","linkType")&&"url"!=a.getValueOf("info","linkType")? +!0:!g.config.linkJavaScriptLinksAllowed&&/javascript\:/.test(this.getValue())?(alert(c.invalidValue),!1):this.getDialog().fakeObj?!0:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=!1;a.url&&this.setValue(a.url.url);this.allowOnChange=!0},commit:function(a){this.onChange();a.url||(a.url={});a.url.url=this.getValue();this.allowOnChange=!1}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().show()}},{type:"button", +id:"browse",hidden:"true",filebrowser:"info:url",label:c.browseServer}]},{type:"vbox",id:"anchorOptions",width:260,align:"center",padding:0,children:[{type:"fieldset",id:"selectAnchorText",label:b.selectAnchor,setup:function(){d=l.getEditorAnchors(g);this.getElement()[d&&d.length?"show":"hide"]()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b= +0;b<d.length;b++)d[b].name&&this.add(d[b].name);a.anchor&&this.setValue(a.anchor.name);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.focus()},commit:function(a){a.anchor||(a.anchor={});a.anchor.name=this.getValue()}},{type:"select",id:"anchorId","default":"",label:b.anchorId,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b=0;b<d.length;b++)d[b].id&&this.add(d[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){a.anchor|| +(a.anchor={});a.anchor.id=this.getValue()}}],setup:function(){this.getElement()[d&&d.length?"show":"hide"]()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'<div role="note" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(b.noAnchors)+"</div>",focus:!0,setup:function(){this.getElement()[d&&d.length?"hide":"show"]()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",id:"emailAddress", +label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||"email"!=a.getValueOf("info","linkType")?!0:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:"text",id:"emailSubject",label:b.emailSubject, +setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target,title:b.target, +elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:c.target,"default":"notSet",style:"width : 100%;",items:[[c.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[c.targetNew,"_blank"],[c.targetTop,"_top"],[c.targetSelf,"_self"],[c.targetParent,"_parent"]],onChange:m,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");m.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:"text",id:"linkTargetName", +label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:f,commit:i},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:f,commit:i}]},{type:"hbox", +children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:f,commit:i},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:f,commit:i},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:f,commit:i},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:f,commit:i}]},{type:"hbox", +children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:c.width,id:"width",setup:f,commit:i},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:f,commit:i}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:c.height,id:"height",setup:f,commit:i},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:f,commit:i}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0, +filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:c.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:c.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:h,commit:j},{type:"select",id:"advLangDir",requiredContent:"a[dir]",label:b.langDir, +"default":"",style:"width:110px",items:[[c.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:h,commit:j},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,maxLength:1,setup:h,commit:j}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:h,commit:j},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:h,commit:j},{type:"text", +label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:h,commit:j}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,requiredContent:"a[title]","default":"",id:"advTitle",setup:h,commit:j},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,requiredContent:"a(cke-xyz)", +"default":"",id:"advCSSClasses",setup:h,commit:j},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:h,commit:j},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),setup:h,commit:j}]}]}]}],onShow:function(){var a= +this.getParentEditor(),b=a.getSelection(),c=null;(c=l.getSelectedLink(a))&&c.hasAttribute("href")?b.getSelectedElement()||b.selectElement(c):c=null;a=l.parseLinkAttributes(a,c);this._.selectedElement=c;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=g.getSelection(),c=l.getLinkAttributes(g,a);if(this._.selectedElement){var e=this._.selectedElement,d=e.data("cke-saved-href"),f=e.getHtml();e.setAttributes(c.set);e.removeAttributes(c.removed);if(d==f||"email"==a.type&&-1!= +f.indexOf("@"))e.setHtml("email"==a.type?a.email.address:c.set["data-cke-saved-href"]),b.selectElement(e);delete this._.selectedElement}else b=b.getRanges()[0],b.collapsed&&(a=new CKEDITOR.dom.text("email"==a.type?a.email.address:c.set["data-cke-saved-href"],g.document),b.insertNode(a),b.selectNodeContents(a)),c=new CKEDITOR.style({element:"a",attributes:c.set}),c.type=CKEDITOR.STYLE_INLINE,c.applyToRange(b,g),b.select()},onLoad:function(){g.config.linkShowAdvancedTab||this.hidePage("advanced");g.config.linkShowTargetTab|| +this.hidePage("target")},onFocus:function(){var a=this.getContentElement("info","linkType");a&&"url"==a.getValue()&&(a=this.getContentElement("info","url"),a.select())}}})})(); \ No newline at end of file diff --git a/ckEditor/plugins/link/images/anchor.png b/ckEditor/plugins/link/images/anchor.png new file mode 100644 index 0000000..c946ba5 Binary files /dev/null and b/ckEditor/plugins/link/images/anchor.png differ diff --git a/ckEditor/plugins/link/images/hidpi/anchor.png b/ckEditor/plugins/link/images/hidpi/anchor.png new file mode 100644 index 0000000..908b9fa Binary files /dev/null and b/ckEditor/plugins/link/images/hidpi/anchor.png differ diff --git a/ckEditor/plugins/magicline/images/hidpi/icon.png b/ckEditor/plugins/magicline/images/hidpi/icon.png new file mode 100644 index 0000000..73a5f43 Binary files /dev/null and b/ckEditor/plugins/magicline/images/hidpi/icon.png differ diff --git a/ckEditor/plugins/magicline/images/icon.png b/ckEditor/plugins/magicline/images/icon.png new file mode 100644 index 0000000..b5de5ba Binary files /dev/null and b/ckEditor/plugins/magicline/images/icon.png differ diff --git a/ckEditor/plugins/pastefromword/filter/default.js b/ckEditor/plugins/pastefromword/filter/default.js new file mode 100644 index 0000000..080deb4 --- /dev/null +++ b/ckEditor/plugins/pastefromword/filter/default.js @@ -0,0 +1,31 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function y(a){for(var a=a.toUpperCase(),c=z.length,b=0,f=0;f<c;++f)for(var d=z[f],e=d[1].length;a.substr(0,e)==d[1];a=a.substr(e))b+=d[0];return b}function A(a){for(var a=a.toUpperCase(),c=B.length,b=1,f=1;0<a.length;f*=c)b+=B.indexOf(a.charAt(a.length-1))*f,a=a.substr(0,a.length-1);return b}var C=CKEDITOR.htmlParser.fragment.prototype,o=CKEDITOR.htmlParser.element.prototype;C.onlyChild=o.onlyChild=function(){var a=this.children;return 1==a.length&&a[0]||null};o.removeAnyChildWithName= +function(a){for(var c=this.children,b=[],f,d=0;d<c.length;d++)f=c[d],f.name&&(f.name==a&&(b.push(f),c.splice(d--,1)),b=b.concat(f.removeAnyChildWithName(a)));return b};o.getAncestor=function(a){for(var c=this.parent;c&&(!c.name||!c.name.match(a));)c=c.parent;return c};C.firstChild=o.firstChild=function(a){for(var c,b=0;b<this.children.length;b++)if(c=this.children[b],a(c)||c.name&&(c=c.firstChild(a)))return c;return null};o.addStyle=function(a,c,b){var f="";if("string"==typeof c)f+=a+":"+c+";";else{if("object"== +typeof a)for(var d in a)a.hasOwnProperty(d)&&(f+=d+":"+a[d]+";");else f+=a;b=c}this.attributes||(this.attributes={});a=this.attributes.style||"";a=(b?[f,a]:[a,f]).join(";");this.attributes.style=a.replace(/^;|;(?=;)/,"")};o.getStyle=function(a){var c=this.attributes.style;if(c)return c=CKEDITOR.tools.parseCssText(c,1),c[a]};CKEDITOR.dtd.parentOf=function(a){var c={},b;for(b in this)-1==b.indexOf("$")&&this[b][a]&&(c[b]=1);return c};var H=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i, +D=/^(?:\b0[^\s]*\s*){1,4}$/,x={ol:{decimal:/\d+/,"lower-roman":/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/,"upper-roman":/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"lower-alpha":/^[a-z]+$/,"upper-alpha":/^[A-Z]+$/},ul:{disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/}},z=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]],B="ABCDEFGHIJKLMNOPQRSTUVWXYZ",s=0,t=null,w,E=CKEDITOR.plugins.pastefromword= +{utils:{createListBulletMarker:function(a,c){var b=new CKEDITOR.htmlParser.element("cke:listbullet");b.attributes={"cke:listsymbol":a[0]};b.add(new CKEDITOR.htmlParser.text(c));return b},isListBulletIndicator:function(a){if(/mso-list\s*:\s*Ignore/i.test(a.attributes&&a.attributes.style))return!0},isContainingOnlySpaces:function(a){var c;return(c=a.onlyChild())&&/^(:?\s|&nbsp;)+$/.test(c.value)},resolveList:function(a){var c=a.attributes,b;if((b=a.removeAnyChildWithName("cke:listbullet"))&&b.length&& +(b=b[0]))return a.name="cke:li",c.style&&(c.style=E.filters.stylesFilter([["text-indent"],["line-height"],[/^margin(:?-left)?$/,null,function(a){a=a.split(" ");a=CKEDITOR.tools.convertToPx(a[3]||a[1]||a[0]);!s&&(null!==t&&a>t)&&(s=a-t);t=a;c["cke:indent"]=s&&Math.ceil(a/s)+1||1}],[/^mso-list$/,null,function(a){var a=a.split(" "),b=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(b!==w&&(c["cke:reset"]=1),w=b);c["cke:indent"]=a}]])(c.style,a)||""),c["cke:indent"]||(t=0,c["cke:indent"]= +1),CKEDITOR.tools.extend(c,b.attributes),!0;w=t=s=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);for(var c={},b=f.length,d=0;d<b;d++)c[f[d]]=a.getStyle(f[d]);return c}}(),listDtdParents:CKEDITOR.dtd.parentOf("ol")},filters:{flattenList:function(a,c){var c="number"==typeof c?c:1,b=a.attributes,f;switch(b.type){case "a":f= +"lower-alpha";break;case "1":f="decimal"}for(var d=a.children,e,h=0;h<d.length;h++)if(e=d[h],e.name in CKEDITOR.dtd.$listItem){var j=e.attributes,g=e.children,m=g[g.length-1];m.name in CKEDITOR.dtd.$list&&(a.add(m,h+1),--g.length||d.splice(h--,1));e.name="cke:li";b.start&&!h&&(j.value=b.start);E.filters.stylesFilter([["tab-stops",null,function(a){(a=a.split(" ")[1].match(H))&&(t=CKEDITOR.tools.convertToPx(a[0]))}],1==c?["mso-list",null,function(a){a=a.split(" ");a=Number(a[0].match(/\d+/));a!==w&& +(j["cke:reset"]=1);w=a}]:null])(j.style);j["cke:indent"]=c;j["cke:listtype"]=a.name;j["cke:list-style-type"]=f}else if(e.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[e,c+1]);d=d.slice(0,h).concat(e.children).concat(d.slice(h+1));a.children=[];e=0;for(g=d.length;e<g;e++)a.add(d[e]);d=a.children}delete a.name;b["cke:list"]=1},assembleList:function(a){for(var c=a.children,b,f,d,e,h,j,a=[],g,m,i,l,k,p,n=0;n<c.length;n++)if(b=c[n],"cke:li"==b.name)if(b.name="li",f=b.attributes,i=(i=f["cke:listsymbol"])&& +i.match(/^(?:[(]?)([^\s]+?)([.)]?)$/),l=k=p=null,f["cke:ignored"])c.splice(n--,1);else{f["cke:reset"]&&(j=e=h=null);d=Number(f["cke:indent"]);d!=e&&(m=g=null);if(i){if(m&&x[m][g].test(i[1]))l=m,k=g;else for(var q in x)for(var u in x[q])if(x[q][u].test(i[1]))if("ol"==q&&/alpha|roman/.test(u)){if(g=/roman/.test(u)?y(i[1]):A(i[1]),!p||g<p)p=g,l=q,k=u}else{l=q;k=u;break}!l&&(l=i[2]?"ol":"ul")}else l=f["cke:listtype"]||"ol",k=f["cke:list-style-type"];m=l;g=k||("ol"==l?"decimal":"disc");k&&k!=("ol"==l? +"decimal":"disc")&&b.addStyle("list-style-type",k);if("ol"==l&&i){switch(k){case "decimal":p=Number(i[1]);break;case "lower-roman":case "upper-roman":p=y(i[1]);break;case "lower-alpha":case "upper-alpha":p=A(i[1])}b.attributes.value=p}if(j){if(d>e)a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),h.add(j);else{if(d<e){e-=d;for(var r;e--&&(r=j.parent);)j=r.parent}j.add(b)}c.splice(n--,1)}else a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),c[n]=j;h=b;e=d}else j&&(j=e=h=null);for(n=0;n<a.length;n++)if(j= +a[n],q=j.children,g=g=void 0,u=j.children.length,r=g=void 0,c=/list-style-type:(.*?)(?:;|$)/,e=CKEDITOR.plugins.pastefromword.filters.stylesFilter,g=j.attributes,!c.exec(g.style)){for(h=0;h<u;h++)if(g=q[h],g.attributes.value&&Number(g.attributes.value)==h+1&&delete g.attributes.value,g=c.exec(g.attributes.style))if(g[1]==r||!r)r=g[1];else{r=null;break}if(r){for(h=0;h<u;h++)g=q[h].attributes,g.style&&(g.style=e([["list-style-type"]])(g.style)||"");j.addStyle("list-style-type",r)}}w=t=s=null},falsyFilter:function(){return!1}, +stylesFilter:function(a,c){return function(b,f){var d=[];(b||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(b,e,g){e=e.toLowerCase();"font-family"==e&&(g=g.replace(/["']/g,""));for(var m,i,l,k=0;k<a.length;k++)if(a[k]&&(b=a[k][0],m=a[k][1],i=a[k][2],l=a[k][3],e.match(b)&&(!m||g.match(m)))){e=l||e;c&&(i=i||g);"function"==typeof i&&(i=i(g,f,e));i&&i.push&&(e=i[0],i=i[1]);"string"==typeof i&&d.push([e,i]);return}!c&&d.push([e,g])});for(var e=0;e<d.length;e++)d[e]= +d[e].join(":");return d.length?d.join(";")+";":!1}},elementMigrateFilter:function(a,c){return a?function(b){var f=c?(new CKEDITOR.style(a,c))._.definition:a;b.name=f.element;CKEDITOR.tools.extend(b.attributes,CKEDITOR.tools.clone(f.attributes));b.addStyle(CKEDITOR.style.getStyleText(f))}:function(){}},styleMigrateFilter:function(a,c){var b=this.elementMigrateFilter;return a?function(f,d){var e=new CKEDITOR.htmlParser.element(null),h={};h[c]=f;b(a,h)(e);e.children=d.children;d.children=[e];e.filter= +function(){};e.parent=d}:function(){}},bogusAttrFilter:function(a,c){if(-1==c.name.indexOf("cke:"))return!1},applyStyleFilter:null},getRules:function(a,c){var b=CKEDITOR.dtd,f=CKEDITOR.tools.extend({},b.$block,b.$listItem,b.$tableContent),d=a.config,e=this.filters,h=e.falsyFilter,j=e.stylesFilter,g=e.elementMigrateFilter,m=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),i=this.utils.createListBulletMarker,l=e.flattenList,k=e.assembleList,p=this.utils.isListBulletIndicator,n=this.utils.isContainingOnlySpaces, +q=this.utils.resolveList,u=function(a){a=CKEDITOR.tools.convertToPx(a);return isNaN(a)?a:a+"px"},r=this.utils.getStyleComponents,t=this.utils.listDtdParents,o=!1!==d.pasteFromWordRemoveFontStyles,s=!1!==d.pasteFromWordRemoveStyles;return{elementNames:[[/meta|link|script/,""]],root:function(a){a.filterChildren(c);k(a)},elements:{"^":function(a){var c;CKEDITOR.env.gecko&&(c=e.applyStyleFilter)&&c(a)},$:function(a){var v=a.name||"",e=a.attributes;v in f&&e.style&&(e.style=j([[/^(:?width|height)$/,null, +u]])(e.style)||"");if(v.match(/h\d/)){a.filterChildren(c);if(q(a))return;g(d["format_"+v])(a)}else if(v in b.$inline)a.filterChildren(c),n(a)&&delete a.name;else if(-1!=v.indexOf(":")&&-1==v.indexOf("cke")){a.filterChildren(c);if("v:imagedata"==v){if(v=a.attributes["o:href"])a.attributes.src=v;a.name="img";return}delete a.name}v in t&&(a.filterChildren(c),k(a))},style:function(a){if(CKEDITOR.env.gecko){var a=(a=a.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/))&&a[1],c={};a&& +(a.replace(/[\n\r]/g,"").replace(/(.+?)\{(.+?)\}/g,function(a,b,F){for(var b=b.split(","),a=b.length,d=0;d<a;d++)CKEDITOR.tools.trim(b[d]).replace(/^(\w+)(\.[\w-]+)?$/g,function(a,b,d){b=b||"*";d=d.substring(1,d.length);d.match(/MsoNormal/)||(c[b]||(c[b]={}),d?c[b][d]=F:c[b]=F)})}),e.applyStyleFilter=function(a){var b=c["*"]?"*":a.name,d=a.attributes&&a.attributes["class"];b in c&&(b=c[b],"object"==typeof b&&(b=b[d]),b&&a.addStyle(b,!0))})}return!1},p:function(a){if(/MsoListParagraph/i.exec(a.attributes["class"])|| +a.getStyle("mso-list")){var b=a.firstChild(function(a){return a.type==CKEDITOR.NODE_TEXT&&!n(a.parent)});(b=b&&b.parent)&&b.addStyle("mso-list","Ignore")}a.filterChildren(c);q(a)||(d.enterMode==CKEDITOR.ENTER_BR?(delete a.name,a.add(new CKEDITOR.htmlParser.element("br"))):g(d["format_"+(d.enterMode==CKEDITOR.ENTER_P?"p":"div")])(a))},div:function(a){var c=a.onlyChild();if(c&&"table"==c.name){var b=a.attributes;c.attributes=CKEDITOR.tools.extend(c.attributes,b);b.style&&c.addStyle(b.style);c=new CKEDITOR.htmlParser.element("div"); +c.addStyle("clear","both");a.add(c);delete a.name}},td:function(a){a.getAncestor("thead")&&(a.name="th")},ol:l,ul:l,dl:l,font:function(a){if(p(a.parent))delete a.name;else{a.filterChildren(c);var b=a.attributes,d=b.style,e=a.parent;"font"==e.name?(CKEDITOR.tools.extend(e.attributes,a.attributes),d&&e.addStyle(d),delete a.name):(d=d||"",b.color&&("#000000"!=b.color&&(d+="color:"+b.color+";"),delete b.color),b.face&&(d+="font-family:"+b.face+";",delete b.face),b.size&&(d+="font-size:"+(3<b.size?"large": +3>b.size?"small":"medium")+";",delete b.size),a.name="span",a.addStyle(d))}},span:function(a){if(p(a.parent))return!1;a.filterChildren(c);if(n(a))return delete a.name,null;if(p(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),e=(b=b&&(b.value||"l."))&&b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(e)return b=i(e,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(e=(b=a.attributes)&&b.style)b.style=j([["line-height"], +[/^font-family$/,null,!o?m(d.font_style,"family"):null],[/^font-size$/,null,!o?m(d.fontSize_style,"size"):null],[/^color$/,null,!o?m(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!o?m(d.colorButton_backStyle,"color"):null]])(e,a)||"";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),sup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript),a:function(a){a= +a.attributes;a.href&&a.href.match(/^file:\/\/\/[\S]+#/i)&&(a.href=a.href.replace(/^file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:j(s?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left":"margin-right";if("margin"== +c)a=r(c,a,[b])[b];else if(c!=b)return null;if(a&&!D.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,D],["text-indent","0cm"],["page-break-before"],["tab-stops"],["display", +"none"],o?[/font-?/]:null],s),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":h,bgcolor:h,valign:s?h:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(/<img.*?>/),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)</),i(d,c)):CKEDITOR.env.gecko&&c?(c=CKEDITOR.htmlParser.fragment.fromHtml(c[0]).children[0], +(d=(d=(d=b.previous)&&d.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src=d),c):!1}:h}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};CKEDITOR.cleanWord=function(a,c){CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&& +(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi,"$1<span>$2</span>$3"));var b=new G,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire("beforeCleanWord",{filter:f});try{a=b.toHtml(a)}catch(d){alert(c.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(/<span>/g,"")}})(); \ No newline at end of file diff --git a/ckEditor/plugins/scayt/LICENSE.md b/ckEditor/plugins/scayt/LICENSE.md new file mode 100644 index 0000000..610c807 --- /dev/null +++ b/ckEditor/plugins/scayt/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor SCAYT Plugin** +Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/ckEditor/plugins/scayt/README.md b/ckEditor/plugins/scayt/README.md new file mode 100644 index 0000000..1b3de25 --- /dev/null +++ b/ckEditor/plugins/scayt/README.md @@ -0,0 +1,25 @@ +CKEditor SCAYT Plugin +===================== + +This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+. + +SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. +2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'scayt'; + +That's all. SCAYT will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/ckEditor/plugins/scayt/dialogs/options.js b/ckEditor/plugins/scayt/dialogs/options.js new file mode 100644 index 0000000..aec9a1c --- /dev/null +++ b/ckEditor/plugins/scayt/dialogs/options.js @@ -0,0 +1,17 @@ +CKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='<p><img src="'+g.getLogo()+'" /></p><p>'+g.getLocal("version")+g.getVersion()+"</p><p>"+g.getLocal("text_copyrights")+"</p>",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox", +id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],b={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var c={type:"checkbox"};c.id=d;c.label=g.getLocal(b[d]);e.push(c)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e<this.getChild().length;e++)this.getChild()[e].setValue(a.getApplicationConfig()[this.getChild()[e].id])}}]}, +{id:"langs",label:g.getLocal("tab_languages"),elements:[{id:"leftLangColumn",type:"vbox",align:"left",widths:["100"],children:[{type:"html",id:"langBox",style:"overflow: hidden; white-space: normal;",html:'<form><div style="float:left;width:45%;margin-left:5px;" id="left-col-'+f.name+'"></div><div style="float:left;width:45%;margin-left:15px;" id="right-col-'+f.name+'"></div></form>',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"), +elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,b=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName())},0)}},{type:"hbox", +id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,b=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();b.createUserDictionary(d,function(c){c.error||e.toggleDictionaryButtons.call(a,!0);c.dialog=a;c.command="create";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="create"; +c.name=d;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(c){c.dialog=a;c.error||b.toggleDictionaryButtons.call(a,!0);c.command="restore";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="restore";c.name=d;f.fire("scaytUserDictionaryActionError", +c)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName"),c=d.getValue();e.removeUserDictionary(c,function(e){d.setValue("");e.error||b.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=c;f.fire("scaytUserDictionaryAction",e)},function(b){b.dialog= +a;b.command="remove";b.name=c;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(b,function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryActionError",d)})}}]}, +{type:"html",id:"dicInfo",html:'<div id="dic_info_editor1" style="margin:5px auto; width:95%;white-space:normal;">'+g.getLocal("text_descriptionDic")+"</div>"}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'<div><div id="scayt_about_">'+k+"</div></div>"}]}];f.on("scaytUserDictionaryAction",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;void 0===a.data.error?(c=d.getLocal("message_success_"+ +a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c),SCAYT.$(b.$).css({color:"blue"})):(""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c)),SCAYT.$(b.$).css({color:"red"}),null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue(""))}); +f.on("scaytUserDictionaryActionError",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c));SCAYT.$(b.$).css({color:"red"});null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()): +e.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()}, +onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),b=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();b.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),b.show()):(e.setValue(""), +d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),b=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),b.hide()):(e.hide(),b.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options", +"scaytOptions").getChild(),b=0;b<e.length;b++)e[b].isChanged()&&(a[e[b].id]=e[b].getValue());i.isChanged()&&(a[i.id]=f.config.scayt_sLang=i.currentLang=i.newLang);return a},buildRadioInputs:function(a,e){var b=new CKEDITOR.dom.element("div");CKEDITOR.document.createElement("div");var d="scaytLang_"+e,c=CKEDITOR.dom.element.createFromHtml('<input id="'+d+'" type="radio" value="'+e+'" name="scayt_lang" />'),g=new CKEDITOR.dom.element("label"),h=f.scayt;b.setStyles({"white-space":"normal",position:"relative"}); +c.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);b.append(c);b.append(g);e===h.getLang()&&(c.setAttribute("checked",!0),c.setAttribute("defaultChecked","defaultChecked"));return b},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),b=g.getLangList(),d={},c=[],i=0,h;for(h in b.ltr)d[h]=b.ltr[h];for(h in b.rtl)d[h]=b.rtl[h];for(h in d)c.push([h,d[h]]);c.sort(function(a,b){var c=0;a[1]>b[1]? +c=1:a[1]<b[1]&&(c=-1);return c});d={};for(b=0;b<c.length;b++)d[c[b][0]]=c[b][1];c=Math.round(c.length/2);for(h in d)i++,this.buildRadioInputs(d[h],h).appendTo(i<=c?e:a)},getLangBoxes:function(){return this.getContentElement("langs","langBox").getElement()},contents:function(a,e){var b=[],d=e.config.scayt_uiTabs;if(d){for(var c in d)1==d[c]&&b.push(a[c]);b.push(a[a.length-1])}else return a;return b}(k,f)};return j}); \ No newline at end of file diff --git a/ckEditor/plugins/scayt/dialogs/toolbar.css b/ckEditor/plugins/scayt/dialogs/toolbar.css new file mode 100644 index 0000000..861f43e --- /dev/null +++ b/ckEditor/plugins/scayt/dialogs/toolbar.css @@ -0,0 +1,71 @@ +a +{ + text-decoration:none; + padding: 2px 4px 4px 6px; + display : block; + border-width: 1px; + border-style: solid; + margin : 0px; +} + +a.cke_scayt_toogle:hover, +a.cke_scayt_toogle:focus, +a.cke_scayt_toogle:active +{ + border-color: #316ac5; + background-color: #dff1ff; + color : #000; + cursor: pointer; + margin : 0px; +} +a.cke_scayt_toogle { + color : #316ac5; + border-color: #fff; +} +.scayt_enabled a.cke_scayt_item { + color : #316ac5; + border-color: #fff; + margin : 0px; +} +.scayt_disabled a.cke_scayt_item { + color : gray; + border-color : #fff; +} +.scayt_enabled a.cke_scayt_item:hover, +.scayt_enabled a.cke_scayt_item:focus, +.scayt_enabled a.cke_scayt_item:active +{ + border-color: #316ac5; + background-color: #dff1ff; + color : #000; + cursor: pointer; +} +.scayt_disabled a.cke_scayt_item:hover, +.scayt_disabled a.cke_scayt_item:focus, +.scayt_disabled a.cke_scayt_item:active +{ + border-color: gray; + background-color: #dff1ff; + color : gray; + cursor: no-drop; +} +.cke_scayt_set_on, .cke_scayt_set_off +{ + display: none; +} +.scayt_enabled .cke_scayt_set_on +{ + display: none; +} +.scayt_disabled .cke_scayt_set_on +{ + display: inline; +} +.scayt_disabled .cke_scayt_set_off +{ + display: none; +} +.scayt_enabled .cke_scayt_set_off +{ + display: inline; +} diff --git a/ckEditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/ckEditor/plugins/specialchar/dialogs/lang/_translationstatus.txt new file mode 100644 index 0000000..8a4ef1f --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/_translationstatus.txt @@ -0,0 +1,20 @@ +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license + +cs.js Found: 118 Missing: 0 +cy.js Found: 118 Missing: 0 +de.js Found: 118 Missing: 0 +el.js Found: 16 Missing: 102 +eo.js Found: 118 Missing: 0 +et.js Found: 31 Missing: 87 +fa.js Found: 24 Missing: 94 +fi.js Found: 23 Missing: 95 +fr.js Found: 118 Missing: 0 +hr.js Found: 23 Missing: 95 +it.js Found: 118 Missing: 0 +nb.js Found: 118 Missing: 0 +nl.js Found: 118 Missing: 0 +no.js Found: 118 Missing: 0 +tr.js Found: 118 Missing: 0 +ug.js Found: 39 Missing: 79 +zh-cn.js Found: 118 Missing: 0 diff --git a/ckEditor/plugins/specialchar/dialogs/lang/ar.js b/ckEditor/plugins/specialchar/dialogs/lang/ar.js new file mode 100644 index 0000000..acb6c92 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/ar.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص فردية علي اليسار",rsquo:"علامة تنصيص فردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستفهام غير صحيحة",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/bg.js b/ckEditor/plugins/specialchar/dialogs/lang/bg.js new file mode 100644 index 0000000..0bf8749 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/bg.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"Лява маркировка за цитат",rsquo:"Дясна маркировка за цитат",ldquo:"Лява двойна кавичка за цитат",rdquo:"Дясна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"Прекъсната линия",sect:"Знак за секция",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/ca.js b/ckEditor/plugins/specialchar/dialogs/lang/ca.js new file mode 100644 index 0000000..e650437 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/ca.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení", +laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit", +Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex", +Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla", +Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu", +aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi", +igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi", +divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex", +374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant", +asymp:"Gairebé igual a"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/cs.js b/ckEditor/plugins/specialchar/dialogs/lang/cs.js new file mode 100644 index 0000000..c2b38f0 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/cs.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo", +not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku", +Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm", +Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou", +Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo", +acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo", +icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo", +uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá", +8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/cy.js b/ckEditor/plugins/specialchar/dialogs/lang/cy.js new file mode 100644 index 0000000..77f59f6 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/cy.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid", +reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig", +Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom", +Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild", +Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig", +aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom", +euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom", +otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod", +OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith", +diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/de.js b/ckEditor/plugins/specialchar/dialogs/lang/de.js new file mode 100644 index 0000000..6b3ce87 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/de.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen", +reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex", +Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex", +Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent", +Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben", +aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema", +eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut", +ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex", +sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/el.js b/ckEditor/plugins/specialchar/dialogs/lang/el.js new file mode 100644 index 0000000..e7c2a21 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/el.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",rdquo:"Δεξιός χαρακτήρας διπλού εισαγωγικού",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιεν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων", +ordf:"Feminine ordinal indicator",laquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",not:"Not sign",reg:"Σύμβολο σημάτων κατατεθέν",macr:"Μακρόν",deg:"Σύμβολο βαθμού",sup2:"Εκτεθειμένο δύο",sup3:"Εκτεθειμένο τρία",acute:"Οξεία",micro:"Σύμβολο μικρού",para:"Σύμβολο παραγράφου",middot:"Μέση τελεία",cedil:"Υπογεγραμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Γνήσιο κλάσμα ενός τετάρτου",frac12:"Γνήσιο κλάσμα ενός δεύτερου",frac34:"Γνήσιο κλάσμα τριών τετάρτων", +iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γράμμα A με βαρεία",Aacute:"Λατινικό κεφαλαίο γράμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Atilde:"Λατινικό κεφαλαίο γράμμα A με περισπωμένη",Auml:"Λατινικό κεφαλαίο γράμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γράμμα A με δακτύλιο επάνω",AElig:"Λατινικό κεφαλαίο γράμμα Æ",Ccedil:"Λατινικό κεφαλαίο γράμμα C με υπογεγραμμένη",Egrave:"Λατινικό κεφαλαίο γράμμα E με βαρεία",Eacute:"Λατινικό κεφαλαίο γράμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γράμμα Ε με περισπωμένη ", +Euml:"Λατινικό κεφαλαίο γράμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γράμμα I με βαρεία",Iacute:"Λατινικό κεφαλαίο γράμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γράμμα I με περισπωμένη",Iuml:"Λατινικό κεφαλαίο γράμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γράμμα Eth",Ntilde:"Λατινικό κεφαλαίο γράμμα N με περισπωμένη",Ograve:"Λατινικό κεφαλαίο γράμμα O με βαρεία",Oacute:"Λατινικό κεφαλαίο γράμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη ",Otilde:"Λατινικό κεφαλαίο γράμμα O με περισπωμένη", +Ouml:"Λατινικό κεφαλαίο γράμμα O με διαλυτικά",times:"Σύμβολο πολλαπλασιασμού",Oslash:"Λατινικό κεφαλαίο γράμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γράμμα U με βαρεία",Uacute:"Λατινικό κεφαλαίο γράμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γράμμα U με περισπωμένη",Uuml:"Λατινικό κεφαλαίο γράμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γράμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γράμμα Thorn",szlig:"Λατινικό μικρό γράμμα απότομο s",agrave:"Λατινικό μικρό γράμμα a με βαρεία",aacute:"Λατινικό μικρό γράμμα a με οξεία", +acirc:"Λατινικό μικρό γράμμα a με περισπωμένη",atilde:"Λατινικό μικρό γράμμα a με περισπωμένη",auml:"Λατινικό μικρό γράμμα a με διαλυτικά",aring:"Λατινικό μικρό γράμμα a με δακτύλιο πάνω",aelig:"Λατινικό μικρό γράμμα æ",ccedil:"Λατινικό μικρό γράμμα c με υπογεγραμμένη",egrave:"Λατινικό μικρό γράμμα ε με βαρεία",eacute:"Λατινικό μικρό γράμμα e με οξεία",ecirc:"Λατινικό μικρό γράμμα e με περισπωμένη",euml:"Λατινικό μικρό γράμμα e με διαλυτικά",igrave:"Λατινικό μικρό γράμμα i με βαρεία",iacute:"Λατινικό μικρό γράμμα i με οξεία", +icirc:"Λατινικό μικρό γράμμα i με περισπωμένη",iuml:"Λατινικό μικρό γράμμα i με διαλυτικά",eth:"Λατινικό μικρό γράμμα eth",ntilde:"Λατινικό μικρό γράμμα n με περισπωμένη",ograve:"Λατινικό μικρό γράμμα o με βαρεία",oacute:"Λατινικό μικρό γράμμα o με οξεία ",ocirc:"Λατινικό πεζό γράμμα o με περισπωμένη",otilde:"Λατινικό μικρό γράμμα o με περισπωμένη ",ouml:"Λατινικό μικρό γράμμα o με διαλυτικά",divide:"Σύμβολο διαίρεσης",oslash:"Λατινικό μικρό γράμμα o με περισπωμένη",ugrave:"Λατινικό μικρό γράμμα u με βαρεία", +uacute:"Λατινικό μικρό γράμμα u με οξεία",ucirc:"Λατινικό μικρό γράμμα u με περισπωμένη",uuml:"Λατινικό μικρό γράμμα u με διαλυτικά",yacute:"Λατινικό μικρό γράμμα y με οξεία",thorn:"Λατινικό μικρό γράμμα thorn",yuml:"Λατινικό μικρό γράμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σύμπλεγμα ΟΕ",oelig:"Λατινικό μικρό σύμπλεγμα oe",372:"Λατινικό κεφαλαίο γράμμα W με περισπωμένη",374:"Λατινικό κεφαλαίο γράμμα Y με περισπωμένη",373:"Λατινικό μικρό γράμμα w με περισπωμένη",375:"Λατινικό μικρό γράμμα y με περισπωμένη", +sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Οριζόντια αποσιωπητικά",trade:"Σύμβολο εμπορικού κατατεθέν",9658:"Μαύρος δείκτης που δείχνει προς τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αριστερά-δεξιά",diams:"Μαύρο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/en-gb.js b/ckEditor/plugins/specialchar/dialogs/lang/en-gb.js new file mode 100644 index 0000000..5a14786 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/en-gb.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/en.js b/ckEditor/plugins/specialchar/dialogs/lang/en.js new file mode 100644 index 0000000..26f61c2 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/en.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/eo.js b/ckEditor/plugins/specialchar/dialogs/lang/eo.js new file mode 100644 index 0000000..d44b0d2 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/eo.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno", +sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao", +Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo", +Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno", +szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao", +igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno", +uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo", +bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/es.js b/ckEditor/plugins/specialchar/dialogs/lang/es.js new file mode 100644 index 0000000..79d437f --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/es.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares", +not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave", +Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis", +Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis", +times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo", +acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave", +iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada", +ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo", +373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/et.js b/ckEditor/plugins/specialchar/dialogs/lang/et.js new file mode 100644 index 0000000..22c9056 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/et.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer", +bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/fa.js b/ckEditor/plugins/specialchar/dialogs/lang/fa.js new file mode 100644 index 0000000..e0b27c5 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/fa.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده", +macr:"نشان خط بالای حرف",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصف",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حرف A بزرگ لاتین با تلفظ غلیظ",Aacute:"حرف A بزرگ لاتین با تلفظ شدید",Acirc:"حرف A بزرگ لاتین با دور",Atilde:"حرف A بزرگ لاتین با صدای کامی", +Auml:"حرف A بزرگ لاتین با نشان سواگیری",Aring:"حرف A بزرگ لاتین با حلقه بالا",AElig:"حرف Æ بزرگ لاتین",Ccedil:"حرف C بزرگ لاتین با نشان سواگیری",Egrave:"حرف E بزرگ لاتین با تلفظ درشت",Eacute:"حرف E بزرگ لاتین با تلفظ زیر",Ecirc:"حرف E بزرگ لاتین با خمان",Euml:"حرف E بزرگ لاتین با نشان سواگیری",Igrave:"حرف I بزرگ لاتین با تلفظ درشت",Iacute:"حرف I بزرگ لاتین با تلفظ ریز",Icirc:"حرف I بزرگ لاتین با خمان",Iuml:"حرف I بزرگ لاتین با نشان سواگیری",ETH:"حرف لاتین بزرگ واکه ترتیبی",Ntilde:"حرف N بزرگ لاتین با مد", +Ograve:"حرف O بزرگ لاتین با تلفظ درشت",Oacute:"حرف O بزرگ لاتین با تلفظ ریز",Ocirc:"حرف O بزرگ لاتین با خمان",Otilde:"حرف O بزرگ لاتین با مد",Ouml:"حرف O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حرف O بزرگ لاتین با میان خط",Ugrave:"حرف U بزرگ لاتین با تلفظ درشت",Uacute:"حرف U بزرگ لاتین با تلفظ ریز",Ucirc:"حرف U بزرگ لاتین با خمان",Uuml:"حرف U بزرگ لاتین با نشان سواگیری",Yacute:"حرف Y بزرگ لاتین با تلفظ ریز",THORN:"حرف بزرگ لاتین خاردار",szlig:"حرف کوچک لاتین شارپ s",agrave:"حرف a کوچک لاتین با تلفظ درشت", +aacute:"حرف a کوچک لاتین با تلفظ ریز",acirc:"حرف a کوچک لاتین با خمان",atilde:"حرف a کوچک لاتین با صدای کامی",auml:"حرف a کوچک لاتین با نشان سواگیری",aring:"حرف a کوچک لاتین گوشواره دار",aelig:"حرف کوچک لاتین æ",ccedil:"حرف c کوچک لاتین با نشان سدیل",egrave:"حرف e کوچک لاتین با تلفظ درشت",eacute:"حرف e کوچک لاتین با تلفظ ریز",ecirc:"حرف e کوچک لاتین با خمان",euml:"حرف e کوچک لاتین با نشان سواگیری",igrave:"حرف i کوچک لاتین با تلفظ درشت",iacute:"حرف i کوچک لاتین با تلفظ ریز",icirc:"حرف i کوچک لاتین با خمان", +iuml:"حرف i کوچک لاتین با نشان سواگیری",eth:"حرف کوچک لاتین eth",ntilde:"حرف n کوچک لاتین با صدای کامی",ograve:"حرف o کوچک لاتین با تلفظ درشت",oacute:"حرف o کوچک لاتین با تلفظ زیر",ocirc:"حرف o کوچک لاتین با خمان",otilde:"حرف o کوچک لاتین با صدای کامی",ouml:"حرف o کوچک لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حرف o کوچک لاتین با میان خط",ugrave:"حرف u کوچک لاتین با تلفظ درشت",uacute:"حرف u کوچک لاتین با تلفظ ریز",ucirc:"حرف u کوچک لاتین با خمان",uuml:"حرف u کوچک لاتین با نشان سواگیری",yacute:"حرف y کوچک لاتین با تلفظ ریز", +thorn:"حرف کوچک لاتین خاردار",yuml:"حرف y کوچک لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند کوچک لاتین oe",372:"حرف W بزرگ لاتین با خمان",374:"حرف Y بزرگ لاتین با خمان",373:"حرف w کوچک لاتین با خمان",375:"حرف y کوچک لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذف افقی",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"فلش راست",rArr:"فلش دوتایی راست",hArr:"فلش دوتایی چپ راست",diams:"نشان الماس سیاه", +asymp:"تقریبا برابر با"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/fi.js b/ckEditor/plugins/specialchar/dialogs/lang/fi.js new file mode 100644 index 0000000..6d701e3 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/fi.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/fr-ca.js b/ckEditor/plugins/specialchar/dialogs/lang/fr-ca.js new file mode 100644 index 0000000..d19e2e4 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/fr-ca.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma", +Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe", +Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma", +eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe", +373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/fr.js b/ckEditor/plugins/specialchar/dialogs/lang/fr.js new file mode 100644 index 0000000..2d1ad09 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/fr.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant", +not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron", +Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu", +Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron", +auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu", +ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe", +373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/gl.js b/ckEditor/plugins/specialchar/dialogs/lang/gl.js new file mode 100644 index 0000000..f16d366 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/gl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura", +not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave", +Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese", +Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese", +times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo", +acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave", +iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal", +ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo", +373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/he.js b/ckEditor/plugins/specialchar/dialogs/lang/he.js new file mode 100644 index 0000000..dcfc50f --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/he.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמאלי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמאלי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ארוך",iexcl:"סימן קריאה הפוך",cent:"סנט",pound:"פאונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות אופקיות (Diaeresis)",copy:"סימן זכויות יוצרים (Copyright)",ordf:"סימן אורדינאלי נקבי",laquo:"סימן ציטוט זווית כפולה לשמאל",not:"סימן שלילה מתמטי",reg:"סימן רשום", +macr:"מקרון (הגיה ארוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה אמצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן אורדינאלי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה רבעים בשבר פשוט",iquest:"סימן שאלה הפוך",Agrave:"אות לטינית A עם גרש (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde", +Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"אות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"אות לטינית E עם גרש (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"אות לטינית I עם גרש (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis", +ETH:"אות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"אות לטינית O עם גרש (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"אות לטינית U עם גרש (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis", +Yacute:"Latin capital letter Y with acute accent",THORN:"אות לטינית Thorn גדולה",szlig:"אות לטינית s חדה קטנה",agrave:"אות לטינית a עם גרש (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"אות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"אות לטינית e עם גרש (Grave)",eacute:"Latin small letter e with acute accent", +ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"אות לטינית i עם גרש (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"אות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"אות לטינית o עם גרש (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis", +divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"אות לטינית u עם גרש (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"אות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex", +373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמארק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"חץ לימין",rArr:"חץ כפול לימין",hArr:"חץ כפול לימין ושמאל",diams:"יהלום מלא",asymp:"כמעט שווה"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/hr.js b/ckEditor/plugins/specialchar/dialogs/lang/hr.js new file mode 100644 index 0000000..af10255 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/hr.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak", +reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latinično veliko slovo A sa oštrim naglaskom", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/hu.js b/ckEditor/plugins/specialchar/dialogs/lang/hu.js new file mode 100644 index 0000000..7948305 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/hu.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel", +reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel", +Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel", +Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű", +agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel", +icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel", +uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele", +9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/id.js b/ckEditor/plugins/specialchar/dialogs/lang/id.js new file mode 100644 index 0000000..4928f40 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/id.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/it.js b/ckEditor/plugins/specialchar/dialogs/lang/it.js new file mode 100644 index 0000000..894b56c --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/it.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte", +not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave", +Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso", +Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso", +Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S", +agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto", +ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto", +ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn", +yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale", +trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/ja.js b/ckEditor/plugins/specialchar/dialogs/lang/ja.js new file mode 100644 index 0000000..84fb8fa --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/ja.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記号",lsquo:"左シングル引用符",rsquo:"右シングル引用符",ldquo:"左ダブル引用符",rdquo:"右ダブル引用符",ndash:"半角ダッシュ",mdash:"全角ダッシュ",iexcl:"逆さ感嘆符",cent:"セント記号",pound:"ポンド記号",curren:"通貨記号",yen:"円記号",brvbar:"上下に分かれた縦棒",sect:"節記号",uml:"分音記号(ウムラウト)",copy:"著作権表示記号",ordf:"女性序数標識",laquo:" 始め二重山括弧引用記号",not:"論理否定記号",reg:"登録商標記号",macr:"長音符",deg:"度記号",sup2:"上つき2, 2乗",sup3:"上つき3, 3乗",acute:"揚音符",micro:"ミクロン記号",para:"段落記号",middot:"中黒",cedil:"セディラ",sup1:"上つき1",ordm:"男性序数標識",raquo:"終わり二重山括弧引用記号", +frac14:"四分の一",frac12:"二分の一",frac34:"四分の三",iquest:"逆疑問符",Agrave:"抑音符つき大文字A",Aacute:"揚音符つき大文字A",Acirc:"曲折アクセントつき大文字A",Atilde:"チルダつき大文字A",Auml:"分音記号つき大文字A",Aring:"リングつき大文字A",AElig:"AとEの合字",Ccedil:"セディラつき大文字C",Egrave:"抑音符つき大文字E",Eacute:"揚音符つき大文字E",Ecirc:"曲折アクセントつき大文字E",Euml:"分音記号つき大文字E",Igrave:"抑音符つき大文字I",Iacute:"揚音符つき大文字I",Icirc:"曲折アクセントつき大文字I",Iuml:"分音記号つき大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"チルダつき大文字N",Ograve:"抑音符つき大文字O",Oacute:"揚音符つき大文字O",Ocirc:"曲折アクセントつき大文字O",Otilde:"チルダつき大文字O",Ouml:" 分音記号つき大文字O", +times:"乗算記号",Oslash:"打ち消し線つき大文字O",Ugrave:"抑音符つき大文字U",Uacute:"揚音符つき大文字U",Ucirc:"曲折アクセントつき大文字U",Uuml:"分音記号つき大文字U",Yacute:"揚音符つき大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符つき小文字a",aacute:"揚音符つき小文字a",acirc:"曲折アクセントつき小文字a",atilde:"チルダつき小文字a",auml:"分音記号つき小文字a",aring:"リングつき小文字a",aelig:"aとeの合字",ccedil:"セディラつき小文字c",egrave:"抑音符つき小文字e",eacute:"揚音符つき小文字e",ecirc:"曲折アクセントつき小文字e",euml:"分音記号つき小文字e",igrave:"抑音符つき小文字i",iacute:"揚音符つき小文字i",icirc:"曲折アクセントつき小文字i",iuml:"分音記号つき小文字i",eth:"アイスランド語小文字eth", +ntilde:"チルダつき小文字n",ograve:"抑音符つき小文字o",oacute:"揚音符つき小文字o",ocirc:"曲折アクセントつき小文字o",otilde:"チルダつき小文字o",ouml:"分音記号つき小文字o",divide:"除算記号",oslash:"打ち消し線つき小文字o",ugrave:"抑音符つき小文字u",uacute:"揚音符つき小文字u",ucirc:"曲折アクセントつき小文字u",uuml:"分音記号つき小文字u",yacute:"揚音符つき小文字y",thorn:"アイスランド語小文字thorn",yuml:"分音記号つき小文字y",OElig:"OとEの合字",oelig:"oとeの合字",372:"曲折アクセントつき大文字W",374:"曲折アクセントつき大文字Y",373:"曲折アクセントつき小文字w",375:"曲折アクセントつき小文字y",sbquo:"シングル下引用符",8219:"左右逆の左引用符",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記号",9658:"右黒三角ポインタ",bull:"黒丸", +rarr:"右矢印",rArr:"右二重矢印",hArr:"左右二重矢印",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/km.js b/ckEditor/plugins/specialchar/dialogs/lang/km.js new file mode 100644 index 0000000..65a7518 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/km.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សេន",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉េន",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រេ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/ku.js b/ckEditor/plugins/specialchar/dialogs/lang/ku.js new file mode 100644 index 0000000..4917d4a --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/ku.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی فاریزەی سەرووژێری تاکی چەپ",rsquo:"نیشانەی فاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی فاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی هەڵەوگێڕی سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی مافی چاپ", +ordf:"هێڵ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی چەپ",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی چەپی خواروو",para:"نیشانەی پەڕەگراف",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"هێڵ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری لار", +Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری", +Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری", +times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری", +atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ", +icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار", +uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری", +375:"پیتی لاتینی y-ی بچووکی لەگەڵ نیشانە لەسەری",sbquo:"نیشانەی فاریزەی نزم",8219:"نیشانەی فاریزەی بەرزی پێچەوانە",bdquo:"دوو فاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی ڕەشی دەستی ڕاست",bull:"فیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست و چەپ",diams:"ڕەشی پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/lv.js b/ckEditor/plugins/specialchar/dialogs/lang/lv.js new file mode 100644 index 0000000..50a77d3 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/lv.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā vienkārtīga pēdiņa",rsquo:"Labā vienkārtīga pēdiņa",ldquo:"Kreisā dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs", +laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi", +Aacute:"Lielais latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi", +Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi", +times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi", +acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi", +icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ", +uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ", +sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/nb.js b/ckEditor/plugins/specialchar/dialogs/lang/nb.js new file mode 100644 index 0000000..0cdcde2 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/nb.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/nl.js b/ckEditor/plugins/specialchar/dialogs/lang/nl.js new file mode 100644 index 0000000..68edf37 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/nl.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken", +reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe", +Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu", +Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave", +Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema", +aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe", +iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave", +uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe", +375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/no.js b/ckEditor/plugins/specialchar/dialogs/lang/no.js new file mode 100644 index 0000000..eecc56c --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/no.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn", +reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde", +Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel", +times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent", +ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks", +uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil", +rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/pl.js b/ckEditor/plugins/specialchar/dialogs/lang/pl.js new file mode 100644 index 0000000..f21a09d --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/pl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego", +laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania", +Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim", +Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym", +Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim", +eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą", +divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym", +375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/pt-br.js b/ckEditor/plugins/specialchar/dialogs/lang/pt-br.js new file mode 100644 index 0000000..e3f7831 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/pt-br.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada", +macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema", +Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo", +Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema", +aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo", +otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo", +373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/pt.js b/ckEditor/plugins/specialchar/dialogs/lang/pt.js new file mode 100644 index 0000000..11ef746 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/pt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino", +laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrugação invertido",Agrave:"Letra maiúscula latina A com acento grave", +Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra Maiúscula Latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema", +Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ðð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema", +times:"Símbolo de Multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo", +atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo", +icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de Divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave", +uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo", +sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa Duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/ru.js b/ckEditor/plugins/specialchar/dialogs/lang/ru.js new file mode 100644 index 0000000..866e865 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/ru.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Левая одинарная кавычка",rsquo:"Правая одинарная кавычка",ldquo:"Левая двойная кавычка",rdquo:"Левая двойная кавычка",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый восклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Вертикальная черта с разрывом",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторского права",ordf:"Указатель окончания женского рода ...ая",laquo:"Левая кавычка-«ёлочка»", +not:"Отрицание",reg:"Знак охраны смежных прав\\t",macr:"Макрон",deg:"Градус",sup2:"Надстрочное два",sup3:"Надстрочное три",acute:"Акут",micro:"Микро",para:"Абзац",middot:"Интерпункт",cedil:"Седиль",sup1:"Надстрочная единица",ordm:"Порядковое числительное",raquo:"Правая кавычка-«ёлочка»",frac14:"Одна четвертая",frac12:"Одна вторая",frac34:"Три четвёртых",iquest:"Перевёрнутый вопросительный знак",Agrave:"Латинская заглавная буква А с апострофом",Aacute:"Латинская заглавная буква A с ударением",Acirc:"Латинская заглавная буква А с циркумфлексом", +Atilde:"Латинская заглавная буква А с тильдой",Auml:"Латинская заглавная буква А с тремой",Aring:"Латинская заглавная буква А с кольцом над ней",AElig:"Латинская большая буква Æ",Ccedil:"Латинская заглавная буква C с седилью",Egrave:"Латинская заглавная буква Е с апострофом",Eacute:"Латинская заглавная буква Е с ударением",Ecirc:"Латинская заглавная буква Е с циркумфлексом",Euml:"Латинская заглавная буква Е с тремой",Igrave:"Латинская заглавная буква I с апострофом",Iacute:"Латинская заглавная буква I с ударением", +Icirc:"Латинская заглавная буква I с циркумфлексом",Iuml:"Латинская заглавная буква I с тремой",ETH:"Латинская большая буква Eth",Ntilde:"Латинская заглавная буква N с тильдой",Ograve:"Латинская заглавная буква O с апострофом",Oacute:"Латинская заглавная буква O с ударением",Ocirc:"Латинская заглавная буква O с циркумфлексом",Otilde:"Латинская заглавная буква O с тильдой",Ouml:"Латинская заглавная буква O с тремой",times:"Знак умножения",Oslash:"Латинская большая перечеркнутая O",Ugrave:"Латинская заглавная буква U с апострофом", +Uacute:"Латинская заглавная буква U с ударением",Ucirc:"Латинская заглавная буква U с циркумфлексом",Uuml:"Латинская заглавная буква U с тремой",Yacute:"Латинская заглавная буква Y с ударением",THORN:"Латинская заглавная буква Thorn",szlig:"Знак диеза",agrave:"Латинская маленькая буква a с апострофом",aacute:"Латинская маленькая буква a с ударением",acirc:"Латинская маленькая буква a с циркумфлексом",atilde:"Латинская маленькая буква a с тильдой",auml:"Латинская маленькая буква a с тремой",aring:"Латинская маленькая буква a с кольцом", +aelig:"Латинская маленькая буква æ",ccedil:"Латинская маленькая буква с с седилью",egrave:"Латинская маленькая буква е с апострофом",eacute:"Латинская маленькая буква е с ударением",ecirc:"Латинская маленькая буква е с циркумфлексом",euml:"Латинская маленькая буква е с тремой",igrave:"Латинская маленькая буква i с апострофом",iacute:"Латинская маленькая буква i с ударением",icirc:"Латинская маленькая буква i с циркумфлексом",iuml:"Латинская маленькая буква i с тремой",eth:"Латинская маленькая буква eth", +ntilde:"Латинская маленькая буква n с тильдой",ograve:"Латинская маленькая буква o с апострофом",oacute:"Латинская маленькая буква o с ударением",ocirc:"Латинская маленькая буква o с циркумфлексом",otilde:"Латинская маленькая буква o с тильдой",ouml:"Латинская маленькая буква o с тремой",divide:"Знак деления",oslash:"Латинская строчная перечеркнутая o",ugrave:"Латинская маленькая буква u с апострофом",uacute:"Латинская маленькая буква u с ударением",ucirc:"Латинская маленькая буква u с циркумфлексом", +uuml:"Латинская маленькая буква u с тремой",yacute:"Латинская маленькая буква y с ударением",thorn:"Латинская маленькая буква thorn",yuml:"Латинская маленькая буква y с тремой",OElig:"Латинская прописная лигатура OE",oelig:"Латинская строчная лигатура oe",372:"Латинская заглавная буква W с циркумфлексом",374:"Латинская заглавная буква Y с циркумфлексом",373:"Латинская маленькая буква w с циркумфлексом",375:"Латинская маленькая буква y с циркумфлексом",sbquo:"Нижняя одинарная кавычка",8219:"Правая одинарная кавычка", +bdquo:"Левая двойная кавычка",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер списка",rarr:"Стрелка вправо",rArr:"Двойная стрелка вправо",hArr:"Двойная стрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/si.js b/ckEditor/plugins/specialchar/dialogs/lang/si.js new file mode 100644 index 0000000..1255a35 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/si.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුරෝ සලකුණ",lsquo:"වමේ තනි උපුටා දක්වීම ",rsquo:"දකුණේ තනි උපුටා දක්වීම ",ldquo:"වමේ දිත්ව උපුටා දක්වීම ",rdquo:"දකුණේ දිත්ව උපුටා දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්‍යමය ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්ශකය",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියාපදිංචි කිරීම", +macr:"මුද්‍රිත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent", +Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above", +aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde", +ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent", +thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/sk.js b/ckEditor/plugins/specialchar/dialogs/lang/sk.js new file mode 100644 index 0000000..2d226d0 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/sk.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor", +reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom", +Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom", +Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom", +Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad", +aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom", +oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami", +OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo", +hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/sl.js b/ckEditor/plugins/specialchar/dialogs/lang/sl.js new file mode 100644 index 0000000..84759b6 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/sl.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomišljaj",mdash:"Em pomišljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena črta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak", +macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"Moški zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena četrtina",frac12:"Ena polovica",frac34:"Tri četrtine",iquest:"Obrnjen vprašaj",Agrave:"Velika latinska črka A s krativcem",Aacute:"Velika latinska črka A z ostrivcem",Acirc:"Velika latinska črka A s strešico",Atilde:"Velika latinska črka A z tildo", +Auml:"Velika latinska črka A z diaeresis-om",Aring:"Velika latinska črka A z obročem",AElig:"Velika latinska črka Æ",Ccedil:"Velika latinska črka C s cedillo",Egrave:"Velika latinska črka E s krativcem",Eacute:"Velika latinska črka E z ostrivcem",Ecirc:"Velika latinska črka E s strešico",Euml:"Velika latinska črka E z diaeresis-om",Igrave:"Velika latinska črka I s krativcem",Iacute:"Velika latinska črka I z ostrivcem",Icirc:"Velika latinska črka I s strešico",Iuml:"Velika latinska črka I z diaeresis-om", +ETH:"Velika latinska črka Eth",Ntilde:"Velika latinska črka N s tildo",Ograve:"Velika latinska črka O s krativcem",Oacute:"Velika latinska črka O z ostrivcem",Ocirc:"Velika latinska črka O s strešico",Otilde:"Velika latinska črka O s tildo",Ouml:"Velika latinska črka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika prečrtana latinska črka O",Ugrave:"Velika latinska črka U s krativcem",Uacute:"Velika latinska črka U z ostrivcem",Ucirc:"Velika latinska črka U s strešico",Uuml:"Velika latinska črka U z diaeresis-om", +Yacute:"Velika latinska črka Y z ostrivcem",THORN:"Velika latinska črka Thorn",szlig:"Mala ostra latinska črka s",agrave:"Mala latinska črka a s krativcem",aacute:"Mala latinska črka a z ostrivcem",acirc:"Mala latinska črka a s strešico",atilde:"Mala latinska črka a s tildo",auml:"Mala latinska črka a z diaeresis-om",aring:"Mala latinska črka a z obročem",aelig:"Mala latinska črka æ",ccedil:"Mala latinska črka c s cedillo",egrave:"Mala latinska črka e s krativcem",eacute:"Mala latinska črka e z ostrivcem", +ecirc:"Mala latinska črka e s strešico",euml:"Mala latinska črka e z diaeresis-om",igrave:"Mala latinska črka i s krativcem",iacute:"Mala latinska črka i z ostrivcem",icirc:"Mala latinska črka i s strešico",iuml:"Mala latinska črka i z diaeresis-om",eth:"Mala latinska črka eth",ntilde:"Mala latinska črka n s tildo",ograve:"Mala latinska črka o s krativcem",oacute:"Mala latinska črka o z ostrivcem",ocirc:"Mala latinska črka o s strešico",otilde:"Mala latinska črka o s tildo",ouml:"Mala latinska črka o z diaeresis-om", +divide:"Znak za deljenje",oslash:"Mala prečrtana latinska črka o",ugrave:"Mala latinska črka u s krativcem",uacute:"Mala latinska črka u z ostrivcem",ucirc:"Mala latinska črka u s strešico",uuml:"Mala latinska črka u z diaeresis-om",yacute:"Mala latinska črka y z ostrivcem",thorn:"Mala latinska črka thorn",yuml:"Mala latinska črka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska črka W s strešico",374:"Velika latinska črka Y s strešico", +373:"Mala latinska črka w s strešico",375:"Mala latinska črka y s strešico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"Črni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puščica",rArr:"Desno-usmerjena dvojna puščica",hArr:"Leva in desna dvojna puščica",diams:"Črna kara",asymp:"Skoraj enako"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/sq.js b/ckEditor/plugins/specialchar/dialogs/lang/sq.js new file mode 100644 index 0000000..c709800 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/sq.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë", +Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika", +Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika", +times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë", +acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë", +iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes", +ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor", +373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/sv.js b/ckEditor/plugins/specialchar/dialogs/lang/sv.js new file mode 100644 index 0000000..8f741b9 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/sv.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken", +not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex", +Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex", +Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ", +ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø", +ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken", +trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/th.js b/ckEditor/plugins/specialchar/dialogs/lang/th.js new file mode 100644 index 0000000..ae0b00e --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/th.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัญลักษณ์สกุลเงิน",yen:"สัญลักษณ์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark", +not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent", +Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent", +Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke", +Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis", +aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth", +ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis", +yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis", +trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัญลักษณ์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/tr.js b/ckEditor/plugins/specialchar/dialogs/lang/tr.js new file mode 100644 index 0000000..3dd220a --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/tr.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti", +not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi", +Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi", +ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi", +THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi", +igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi", +uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti", +bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/tt.js b/ckEditor/plugins/specialchar/dialogs/lang/tt.js new file mode 100644 index 0000000..2eadb9f --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/tt.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгасы",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"Кыска сызык",mdash:"Озын сызык",iexcl:"Әйләндерелгән өндәү билгесе",cent:"Цент тамгасы",pound:"Фунт тамгасы",curren:"Акча берәмлеге тамгасы",yen:"Иена тамгасы",brvbar:"Broken bar",sect:"Section sign",uml:"Диерезис",copy:"Хокук иясе булу билгесе",ordf:"Feminine ordinal indicator",laquo:"Ачылучы чыршысыман җәя", +not:"Not sign",reg:"Теркәләнгән булу билгесе",macr:"Макрон",deg:"Градус билгесе",sup2:"Икенче өске индекс",sup3:"Өченче өске индекс",acute:"Басым билгесе",micro:"Микро билгесе",para:"Параграф билгесе",middot:"Middle dot",cedil:"Седиль",sup1:"Беренче өске индекс",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршысыман җәя",frac14:"Гади дүрттән бер билгесе",frac12:"Гади икедән бер билгесе",frac34:"Гади дүрттән өч билгесе",iquest:"Әйләндерелгән өндәү билгесе",Agrave:"Гравис белән латин A баш хәрефе", +Aacute:"Басым билгесе белән латин A баш хәрефе",Acirc:"Циркумфлекс белән латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Диерезис белән латин A баш хәрефе",Aring:"Өстендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Гравис белән латин E баш хәрефе",Eacute:"Басым билгесе белән латин E баш хәрефе",Ecirc:"Циркумфлекс белән латин E баш хәрефе",Euml:"Диерезис белән латин E баш хәрефе",Igrave:"Гравис белән латин I баш хәрефе", +Iacute:"Басым билгесе белән латин I баш хәрефе",Icirc:"Циркумфлекс белән латин I баш хәрефе",Iuml:"Диерезис белән латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Гравис белән латин O баш хәрефе",Oacute:"Басым билгесе белән латин O баш хәрефе",Ocirc:"Циркумфлекс белән латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Диерезис белән латин O баш хәрефе",times:"Тапкырлау билгесе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Гравис белән латин U баш хәрефе", +Uacute:"Басым билгесе белән латин U баш хәрефе",Ucirc:"Циркумфлекс белән латин U баш хәрефе",Uuml:"Диерезис белән латин U баш хәрефе",Yacute:"Басым билгесе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Гравис белән латин a юл хәрефе",aacute:"Басым билгесе белән латин a юл хәрефе",acirc:"Циркумфлекс белән латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Диерезис белән латин a юл хәрефе",aring:"Өстендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе", +ccedil:"Седиль белән латин c юл хәрефе",egrave:"Гравис белән латин e юл хәрефе",eacute:"Басым билгесе белән латин e юл хәрефе",ecirc:"Циркумфлекс белән латин e юл хәрефе",euml:"Диерезис белән латин e юл хәрефе",igrave:"Гравис белән латин i юл хәрефе",iacute:"Басым билгесе белән латин i юл хәрефе",icirc:"Циркумфлекс белән латин i юл хәрефе",iuml:"Диерезис белән латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Гравис белән латин o юл хәрефе",oacute:"Басым билгесе белән латин o юл хәрефе", +ocirc:"Циркумфлекс белән латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Диерезис белән латин o юл хәрефе",divide:"Бүлү билгесе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Гравис белән латин u юл хәрефе",uacute:"Басым билгесе белән латин u юл хәрефе",ucirc:"Циркумфлекс белән латин u юл хәрефе",uuml:"Диерезис белән латин u юл хәрефе",yacute:"Басым билгесе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Диерезис белән латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе", +oelig:"Латин лигатура oe юл хәрефе",372:"Циркумфлекс белән латин W баш хәрефе",374:"Циркумфлекс белән латин Y баш хәрефе",373:"Циркумфлекс белән латин w юл хәрефе",375:"Циркумфлекс белән латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма эллипс",trade:"Сәүдә маркасы билгесе",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow", +diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/ug.js b/ckEditor/plugins/specialchar/dialogs/lang/ug.js new file mode 100644 index 0000000..51f4c1d --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/ug.js @@ -0,0 +1,13 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى", +deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent", +Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent", +Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent", +Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ", +ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent", +oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn", +yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer", +bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/uk.js b/ckEditor/plugins/specialchar/dialogs/lang/uk.js new file mode 100644 index 0000000..845e752 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/uk.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"Переривчаста вертикальна лінія",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторських прав",ordf:"Жіночий порядковий вказівник",laquo:"ліві вказівні подвійні кутові дужки", +not:"Заперечення",reg:"Знак охорони суміжних прав",macr:"Макрон",deg:"Знак градуса",sup2:"два у верхньому індексі",sup3:"три у верхньому індексі",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індексі",ordm:"Чоловічий порядковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питання",Agrave:"Велика латинська A з гравісом",Aacute:"Велика латинська А з акутом", +Acirc:"Велика латинська А з циркумфлексом",Atilde:"Велика латинська А з тильдою",Auml:"Велике латинське А з умлаутом",Aring:"Велика латинська A з кільцем згори",AElig:"Велика латинська Æ",Ccedil:"Велика латинська C з седиллю",Egrave:"Велика латинська E з гравісом",Eacute:"Велика латинська E з акутом",Ecirc:"Велика латинська E з циркумфлексом",Euml:"Велика латинська А з умлаутом",Igrave:"Велика латинська I з гравісом",Iacute:"Велика латинська I з акутом",Icirc:"Велика латинська I з циркумфлексом", +Iuml:"Велика латинська І з умлаутом",ETH:"Велика латинська Eth",Ntilde:"Велика латинська N з тильдою",Ograve:"Велика латинська O з гравісом",Oacute:"Велика латинська O з акутом",Ocirc:"Велика латинська O з циркумфлексом",Otilde:"Велика латинська O з тильдою",Ouml:"Велика латинська О з умлаутом",times:"Знак множення",Oslash:"Велика латинська перекреслена O ",Ugrave:"Велика латинська U з гравісом",Uacute:"Велика латинська U з акутом",Ucirc:"Велика латинська U з циркумфлексом",Uuml:"Велика латинська U з умлаутом", +Yacute:"Велика латинська Y з акутом",THORN:"Велика латинська Торн",szlig:"Мала латинська есцет",agrave:"Мала латинська a з гравісом",aacute:"Мала латинська a з акутом",acirc:"Мала латинська a з циркумфлексом",atilde:"Мала латинська a з тильдою",auml:"Мала латинська a з умлаутом",aring:"Мала латинська a з кільцем згори",aelig:"Мала латинська æ",ccedil:"Мала латинська C з седиллю",egrave:"Мала латинська e з гравісом",eacute:"Мала латинська e з акутом",ecirc:"Мала латинська e з циркумфлексом",euml:"Мала латинська e з умлаутом", +igrave:"Мала латинська i з гравісом",iacute:"Мала латинська i з акутом",icirc:"Мала латинська i з циркумфлексом",iuml:"Мала латинська i з умлаутом",eth:"Мала латинська Eth",ntilde:"Мала латинська n з тильдою",ograve:"Мала латинська o з гравісом",oacute:"Мала латинська o з акутом",ocirc:"Мала латинська o з циркумфлексом",otilde:"Мала латинська o з тильдою",ouml:"Мала латинська o з умлаутом",divide:"Знак ділення",oslash:"Мала латинська перекреслена o",ugrave:"Мала латинська u з гравісом",uacute:"Мала латинська u з акутом", +ucirc:"Мала латинська u з циркумфлексом",uuml:"Мала латинська u з умлаутом",yacute:"Мала латинська y з акутом",thorn:"Мала латинська торн",yuml:"Мала латинська y з умлаутом",OElig:"Велика латинська лігатура OE",oelig:"Мала латинська лігатура oe",372:"Велика латинська W з циркумфлексом",374:"Велика латинська Y з циркумфлексом",373:"Мала латинська w з циркумфлексом",375:"Мала латинська y з циркумфлексом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки", +hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер списку",rarr:"Стрілка вправо",rArr:"Подвійна стрілка вправо",hArr:"Подвійна стрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Наближено дорівнює"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/vi.js b/ckEditor/plugins/specialchar/dialogs/lang/vi.js new file mode 100644 index 0000000..d4e4d37 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/vi.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc đơn trái",rsquo:"Dấu ngoặc đơn phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tự tiền Mỹ",pound:"Ký tự tiền Anh",curren:"Ký tự tiền tệ",yen:"Ký tự tiền Yên Nhật",brvbar:"Thanh hỏng",sect:"Ký tự khu vực",uml:"Dấu tách đôi",copy:"Ký tự bản quyền",ordf:"Phần chỉ thị giống cái",laquo:"Chọn dấu ngoặc đôi trái",not:"Không có ký tự", +reg:"Ký tự đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tự độ",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trọng âm",micro:"Ký tự micro",para:"Ký tự đoạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lưới",sup1:"Ký tự trồi lên cấp 1",ordm:"Ký tự biểu hiện giống đực",raquo:"Chọn dấu ngoặc đôi phải",frac14:"Tỉ lệ một phần tư",frac12:"Tỉ lệ một nửa",frac34:"Tỉ lệ ba phần tư",iquest:"Chuyển đổi dấu chấm hỏi",Agrave:"Ký tự la-tinh viết hoa A với dấu huyền",Aacute:"Ký tự la-tinh viết hoa A với dấu sắc", +Acirc:"Ký tự la-tinh viết hoa A với dấu mũ",Atilde:"Ký tự la-tinh viết hoa A với dấu ngã",Auml:"Ký tự la-tinh viết hoa A với dấu hai chấm trên đầu",Aring:"Ký tự la-tinh viết hoa A với biểu tượng vòng tròn trên đầu",AElig:"Ký tự la-tinh viết hoa của Æ",Ccedil:"Ký tự la-tinh viết hoa C với dấu móc bên dưới",Egrave:"Ký tự la-tinh viết hoa E với dấu huyền",Eacute:"Ký tự la-tinh viết hoa E với dấu sắc",Ecirc:"Ký tự la-tinh viết hoa E với dấu mũ",Euml:"Ký tự la-tinh viết hoa E với dấu hai chấm trên đầu", +Igrave:"Ký tự la-tinh viết hoa I với dấu huyền",Iacute:"Ký tự la-tinh viết hoa I với dấu sắc",Icirc:"Ký tự la-tinh viết hoa I với dấu mũ",Iuml:"Ký tự la-tinh viết hoa I với dấu hai chấm trên đầu",ETH:"Viết hoa của ký tự Eth",Ntilde:"Ký tự la-tinh viết hoa N với dấu ngã",Ograve:"Ký tự la-tinh viết hoa O với dấu huyền",Oacute:"Ký tự la-tinh viết hoa O với dấu sắc",Ocirc:"Ký tự la-tinh viết hoa O với dấu mũ",Otilde:"Ký tự la-tinh viết hoa O với dấu ngã",Ouml:"Ký tự la-tinh viết hoa O với dấu hai chấm trên đầu", +times:"Ký tự phép toán nhân",Oslash:"Ký tự la-tinh viết hoa A với dấu ngã xuống",Ugrave:"Ký tự la-tinh viết hoa U với dấu huyền",Uacute:"Ký tự la-tinh viết hoa U với dấu sắc",Ucirc:"Ký tự la-tinh viết hoa U với dấu mũ",Uuml:"Ký tự la-tinh viết hoa U với dấu hai chấm trên đầu",Yacute:"Ký tự la-tinh viết hoa Y với dấu sắc",THORN:"Phần viết hoa của ký tự Thorn",szlig:"Ký tự viết nhỏ la-tinh của chữ s",agrave:"Ký tự la-tinh thường với dấu huyền",aacute:"Ký tự la-tinh thường với dấu sắc",acirc:"Ký tự la-tinh thường với dấu mũ", +atilde:"Ký tự la-tinh thường với dấu ngã",auml:"Ký tự la-tinh thường với dấu hai chấm trên đầu",aring:"Ký tự la-tinh viết thường với biểu tượng vòng tròn trên đầu",aelig:"Ký tự la-tinh viết thường của æ",ccedil:"Ký tự la-tinh viết thường của c với dấu móc bên dưới",egrave:"Ký tự la-tinh viết thường e với dấu huyền",eacute:"Ký tự la-tinh viết thường e với dấu sắc",ecirc:"Ký tự la-tinh viết thường e với dấu mũ",euml:"Ký tự la-tinh viết thường e với dấu hai chấm trên đầu",igrave:"Ký tự la-tinh viết thường i với dấu huyền", +iacute:"Ký tự la-tinh viết thường i với dấu sắc",icirc:"Ký tự la-tinh viết thường i với dấu mũ",iuml:"Ký tự la-tinh viết thường i với dấu hai chấm trên đầu",eth:"Ký tự la-tinh viết thường của eth",ntilde:"Ký tự la-tinh viết thường n với dấu ngã",ograve:"Ký tự la-tinh viết thường o với dấu huyền",oacute:"Ký tự la-tinh viết thường o với dấu sắc",ocirc:"Ký tự la-tinh viết thường o với dấu mũ",otilde:"Ký tự la-tinh viết thường o với dấu ngã",ouml:"Ký tự la-tinh viết thường o với dấu hai chấm trên đầu", +divide:"Ký hiệu phép tính chia",oslash:"Ký tự la-tinh viết thường o với dấu ngã",ugrave:"Ký tự la-tinh viết thường u với dấu huyền",uacute:"Ký tự la-tinh viết thường u với dấu sắc",ucirc:"Ký tự la-tinh viết thường u với dấu mũ",uuml:"Ký tự la-tinh viết thường u với dấu hai chấm trên đầu",yacute:"Ký tự la-tinh viết thường y với dấu sắc",thorn:"Ký tự la-tinh viết thường của chữ thorn",yuml:"Ký tự la-tinh viết thường y với dấu hai chấm trên đầu",OElig:"Ký tự la-tinh viết hoa gạch nối OE",oelig:"Ký tự la-tinh viết thường gạch nối OE", +372:"Ký tự la-tinh viết hoa W với dấu mũ",374:"Ký tự la-tinh viết hoa Y với dấu mũ",373:"Ký tự la-tinh viết thường w với dấu mũ",375:"Ký tự la-tinh viết thường y với dấu mũ",sbquo:"Dấu ngoặc đơn thấp số-9",8219:"Dấu ngoặc đơn đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc đơn số-9",hellip:"Tĩnh dược chiều ngang",trade:"Ký tự thương hiệu",9658:"Ký tự trỏ về hướng bên phải màu đen",bull:"Ký hiệu",rarr:"Mũi tên hướng bên phải",rArr:"Mũi tên hướng bên phải dạng đôi",hArr:"Mũi tên hướng bên trái dạng đôi",diams:"Ký hiệu hình thoi", +asymp:"Gần bằng với"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/zh-cn.js b/ckEditor/plugins/specialchar/dialogs/lang/zh-cn.js new file mode 100644 index 0000000..6896e91 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/zh-cn.js @@ -0,0 +1,9 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"长划线",iexcl:"竖翻叹号",cent:"分币符号",pound:"英镑符号",curren:"货币符号",yen:"日元符号",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号", +Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O", +Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I", +iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y", +373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/lang/zh.js b/ckEditor/plugins/specialchar/dialogs/lang/zh.js new file mode 100644 index 0000000..7bc2b55 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/lang/zh.js @@ -0,0 +1,12 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang("specialchar","zh",{euro:"歐元符號",lsquo:"左單引號",rsquo:"右單引號",ldquo:"左雙引號",rdquo:"右雙引號",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"Broken bar",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"Micro sign",para:"段落符號",middot:"中間點",cedil:"字母 C 下面的尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"右雙角括號",frac14:"四分之一符號",frac12:"Vulgar fraction one half", +frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"拉丁大寫字母 E 帶分音符號",Aring:"拉丁大寫字母 A 帶上圓圈",AElig:"拉丁大寫字母 Æ",Ccedil:"拉丁大寫字母 C 帶下尾符號",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis", +Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis", +times:"乘號",Oslash:"拉丁大寫字母 O 帶粗線符號",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde", +auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis", +eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex", +uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark", +hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file diff --git a/ckEditor/plugins/specialchar/dialogs/specialchar.js b/ckEditor/plugins/specialchar/dialogs/specialchar.js new file mode 100644 index 0000000..c4d1696 --- /dev/null +++ b/ckEditor/plugins/specialchar/dialogs/specialchar.js @@ -0,0 +1,14 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j); +var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("&nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("&nbsp;"),b.getParent().removeClass("cke_light_background"), +j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault(); +break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)): +d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['<table role="listbox" aria-labelledby="'+a+'" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'],d=0,g=b.length,h,e;d<g;){f.push('<tr role="presentation">');for(var j=0;j<c;j++, +d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("&","").replace(";","").replace("#",""),e=l[e]||h);var k="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(d+1)+'"',' aria-setsize="'+g+'"',' aria-labelledby="'+k+'"',' class="cke_specialchar" title="',CKEDITOR.tools.htmlEncode(e),'" onkeydown="CKEDITOR.tools.callFunction( '+n+ +', event, this )" onclick="CKEDITOR.tools.callFunction('+m+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit">'+h+'</span><span class="cke_voice_label" id="'+k+'">'+e+"</span></a>")}else f.push('<td class="cke_dark_background">&nbsp;');f.push("</td>")}f.push("</tr>")}f.push("</tbody></table>",'<span id="'+a+'" class="cke_voice_label">'+l.options+"</span>");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab, +title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox", +align:"top",children:[{type:"html",html:"<div></div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"<div>&nbsp;</div>"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", +html:"<div>&nbsp;</div>"}]}]}]}]}]}}); \ No newline at end of file diff --git a/ckEditor/plugins/table/dialogs/table.js b/ckEditor/plugins/table/dialogs/table.js new file mode 100644 index 0000000..6f65681 --- /dev/null +++ b/ckEditor/plugins/table/dialogs/table.js @@ -0,0 +1,21 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;k<g;k++){m=a.$.rows[k];for(var d=e=0,c,b=m.cells.length;d<b;d++)c=m.cells[d],e+=c.colSpan;e>l&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0<e);e||(alert(a),this.select());return e}}function n(a,e){var l=function(g){return new CKEDITOR.dom.element(g,a.document)},n=a.editable(),m=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie? +310:280,onLoad:function(){var g=this,a=g.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),b=g.getContentElement("info","txtWidth");b&&b.setValue(a,!0);a=this.getStyle("height","");(b=g.getContentElement("info","txtHeight"))&&b.setValue(a,!0)})},onShow:function(){var g=a.getSelection(),d=g.getRanges(),c,b=this.getContentElement("info","txtRows"),h=this.getContentElement("info","txtCols"),p=this.getContentElement("info","txtWidth"),f=this.getContentElement("info", +"txtHeight");"tableProperties"==e&&((g=g.getSelectedElement())&&g.is("table")?c=g:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),c=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=c);c?(this.setupContent(c),b&&b.disable(),h&&h.disable()):(b&&b.enable(),h&&h.enable());p&&p.onChange();f&&f.onChange()},onOk:function(){var g=a.getSelection(),d=this._.selectedElement&&g.createBookmarks(),c=this._.selectedElement||l("table"),b={};this.commitContent(b, +c);if(b.info){b=b.info;if(!this._.selectedElement)for(var h=c.append(l("tbody")),e=parseInt(b.txtRows,10)||0,f=parseInt(b.txtCols,10)||0,i=0;i<e;i++)for(var j=h.append(l("tr")),k=0;k<f;k++)j.append(l("td")).appendBogus();e=b.selHeaders;if(!c.$.tHead&&("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.createTHead());h=c.getElementsByTag("tbody").getItem(0);h=h.getElementsByTag("tr").getItem(0);for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&!f.data("cke-bookmark")&& +(f.renameNode("th"),f.setAttribute("scope","col"));j.append(h.remove())}if(null!==c.$.tHead&&!("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.tHead);h=c.getElementsByTag("tbody").getItem(0);for(k=h.getFirst();0<j.getChildCount();){h=j.getFirst();for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&(f.renameNode("td"),f.removeAttribute("scope"));h.insertBefore(k)}j.remove()}if(!this.hasColumnHeaders&&("col"==e||"both"==e))for(j=0;j<c.$.rows.length;j++)f=new CKEDITOR.dom.element(c.$.rows[j].cells[0]), +f.renameNode("th"),f.setAttribute("scope","row");if(this.hasColumnHeaders&&!("col"==e||"both"==e))for(i=0;i<c.$.rows.length;i++)j=new CKEDITOR.dom.element(c.$.rows[i]),"tbody"==j.getParent().getName()&&(f=new CKEDITOR.dom.element(j.$.cells[0]),f.renameNode("td"),f.removeAttribute("scope"));b.txtHeight?c.setStyle("height",b.txtHeight):c.removeStyle("height");b.txtWidth?c.setStyle("width",b.txtWidth):c.removeStyle("width");c.getAttribute("style")||c.removeAttribute("style")}if(this._.selectedElement)try{g.selectBookmarks(d)}catch(m){}else a.insertElement(c), +setTimeout(function(){var g=new CKEDITOR.dom.element(c.$.rows[0].cells[0]),b=a.createRange();b.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);b.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidRows),setup:function(a){this.setValue(a.$.rows.length)}, +commit:k},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidCols),setup:function(a){this.setValue(r(a))},commit:k},{type:"html",html:"&nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(a){var d=this.getDialog();d.hasColumnHeaders= +!0;for(var c=0;c<a.$.rows.length;c++){var b=a.$.rows[c].cells[0];if(b&&"th"!=b.nodeName.toLowerCase()){d.hasColumnHeaders=!1;break}}null!==a.$.tHead?this.setValue(d.hasColumnHeaders?"both":"row"):this.setValue(d.hasColumnHeaders?"col":"")},commit:k},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")|| +"")},commit:function(a,d){this.getValue()?d.setAttribute("border",this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select",requiredContent:"table[align]","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],setup:function(a){this.setValue(a.getAttribute("align")||"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]}, +{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&& +a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles"); +a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:"&nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing", +this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right", +html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){var a=a.getItem(0),d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var c=this.getValue(),b=d.getElementsByTag("caption"); +if(c)0<b.count()?(b=b.getItem(0),b.setHtml("")):(b=new CKEDITOR.dom.element("caption",a.document),d.getChildCount()?b.insertBefore(d.getFirst()):b.appendTo(d)),b.append(new CKEDITOR.dom.text(c,a.document));else if(0<b.count())for(c=b.count()-1;0<=c;c--)b.getItem(c).remove()}}},{type:"text",id:"txtSummary",requiredContent:"table[summary]",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()): +d.removeAttribute("summary")}}]}]},m&&m.createAdvancedTab(a,null,"table")]}}var q=CKEDITOR.tools.cssLength,k=function(a){var e=this.id;a.info||(a.info={});a.info[e]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return n(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return n(a,"tableProperties")})})(); \ No newline at end of file diff --git a/ckEditor/plugins/tabletools/dialogs/tableCell.js b/ckEditor/plugins/tabletools/dialogs/tableCell.js new file mode 100644 index 0000000..6635e88 --- /dev/null +++ b/ckEditor/plugins/tabletools/dialogs/tableCell.js @@ -0,0 +1,17 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("cellProperties",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}"undefined"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&("select"==this.type&&!c)&&(this.getInputElement().$.selectedIndex=-1))}}function j(a){if(a=l.exec(a.getStyle("width")||a.getAttribute("width")))return a[2]}var h=g.lang.table,c=h.cell,e=g.lang.common,i=CKEDITOR.dialog.validate,l=/^(\d+(?:\.\d+)?)(px|%)$/,f={type:"html",html:"&nbsp;"},m="rtl"== +g.lang.dir,k=g.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:e.width,validate:i.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info", +"widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=parseInt(a.getAttribute("width"),10),a=parseInt(a.getStyle("width"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType")||j(a);isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType", +label:g.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[h.widthPx,"px"],[h.widthPc,"%"]],setup:d(j)}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"height",label:e.height,width:"100px","default":"",validate:i.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b= +parseInt(a.getAttribute("height"),10),a=parseInt(a.getStyle("height"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"<br />"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")|| +b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align");a.removeAttribute("align")}}, +{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]},f,{type:"vbox", +padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()):a.removeAttribute("rowSpan")}}, +{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor");return a.getStyle("background-color")|| +b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f,{type:"hbox",padding:0,widths:["60%","40%"], +children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align", +"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()}, +onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}}); \ No newline at end of file diff --git a/ckEditor/plugins/wsc/LICENSE.md b/ckEditor/plugins/wsc/LICENSE.md new file mode 100644 index 0000000..c7d374a --- /dev/null +++ b/ckEditor/plugins/wsc/LICENSE.md @@ -0,0 +1,28 @@ +Software License Agreement +========================== + +**CKEditor WSC Plugin** +Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: + +* GNU General Public License Version 2 or later (the "GPL"): + http://www.gnu.org/licenses/gpl.html + +* GNU Lesser General Public License Version 2.1 or later (the "LGPL"): + http://www.gnu.org/licenses/lgpl.html + +* Mozilla Public License Version 1.1 or later (the "MPL"): + http://www.mozilla.org/MPL/MPL-1.1.html + +You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. + +Sources of Intellectual Property Included in this plugin +-------------------------------------------------------- + +Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/ckEditor/plugins/wsc/README.md b/ckEditor/plugins/wsc/README.md new file mode 100644 index 0000000..46eeafb --- /dev/null +++ b/ckEditor/plugins/wsc/README.md @@ -0,0 +1,25 @@ +CKEditor WebSpellChecker Plugin +=============================== + +This plugin brings Web Spell Checker (WSC) into CKEditor. + +WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. + +Installation +------------ + +1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. +2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): + + config.extraPlugins = 'wsc'; + +That's all. WSC will appear on the editor toolbar and will be ready to use. + +License +------- + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. + +Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). diff --git a/ckEditor/plugins/wsc/dialogs/ciframe.html b/ckEditor/plugins/wsc/dialogs/ciframe.html new file mode 100644 index 0000000..82df25b --- /dev/null +++ b/ckEditor/plugins/wsc/dialogs/ciframe.html @@ -0,0 +1,66 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<!-- +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html> +<head> + <title></title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <script type="text/javascript"> + +function gup( name ) +{ + name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; + var regexS = '[\\?&]' + name + '=([^&#]*)' ; + var regex = new RegExp( regexS ) ; + var results = regex.exec( window.location.href ) ; + + if ( results ) + return results[ 1 ] ; + else + return '' ; +} + +var interval; + +function sendData2Master() +{ + var destination = window.parent.parent ; + try + { + if ( destination.XDTMaster ) + { + var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ; + window.clearInterval( interval ) ; + } + } + catch (e) {} +} + +function OnMessage (event) { + var message = event.data; + var destination = window.parent.parent; + destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ; +} + +function listenPostMessage() { + if (window.addEventListener) { // all browsers except IE before version 9 + window.addEventListener ("message", OnMessage, false); + }else { + if (window.attachEvent) { // IE before version 9 + window.attachEvent("onmessage", OnMessage); + } + } +} + +function onLoad() +{ + interval = window.setInterval( sendData2Master, 100 ); + listenPostMessage(); +} + +</script> +</head> +<body onload="onLoad()"><p></p></body> +</html> diff --git a/ckEditor/plugins/wsc/dialogs/tmpFrameset.html b/ckEditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000..c2d82aa --- /dev/null +++ b/ckEditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> +<!-- +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +--> +<html> +<head> + <title></title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <script type="text/javascript"> + +function doLoadScript( url ) +{ + if ( !url ) + return false ; + + var s = document.createElement( "script" ) ; + s.type = "text/javascript" ; + s.src = url ; + document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ; + + return true ; +} + +var opener; +function tryLoad() +{ + opener = window.parent; + + // get access to global parameters + var oParams = window.opener.oldFramesetPageParams; + + // make frameset rows string prepare + var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ; + document.getElementById( 'itFrameset' ).rows = sFramesetRows ; + + // dynamic including init frames and crossdomain transport code + // from config sproxy_js_frameset url + var addScriptUrl = oParams.sproxy_js_frameset ; + doLoadScript( addScriptUrl ) ; +} + + </script> +</head> + +<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0"> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame> + <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame> + <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame> +</frameset> +</html> diff --git a/ckEditor/plugins/wsc/dialogs/wsc.css b/ckEditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000..496d731 --- /dev/null +++ b/ckEditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/ckEditor/plugins/wsc/dialogs/wsc.js b/ckEditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000..443145c --- /dev/null +++ b/ckEditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,74 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){function y(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]=f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires; +if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f=a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"== +b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}}, +misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))},hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(), +a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null, +text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var z=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()|| +b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},A=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,q;a.framesetHtml=function(b){return"<iframe id="+a.iframeNumber+"_"+b+' frameborder="0" allowtransparency="1" style="width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;"></iframe>'};a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d); +d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('<!DOCTYPE html><html><head><meta charset="UTF-8"><title>iframe</title><style>html,body{margin: 0;height: 100%;font: 13px/1.555 "Trebuchet MS", sans-serif;}a{color: #888;font-weight: bold;text-decoration: none;border-bottom: 1px solid #888;}.main-box {color:#252525;padding: 3px 5px;text-align: justify;}.main-box p{margin: 0 0 14px;}.main-box .cerr{color: #f00000;border-bottom-color: #f00000;}</style></head><body><div id="content" class="main-box"></div><iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe><script>(function(window) {var ManagerPostMessage = function() {var _init = function(handler) {if (document.addEventListener) {window.addEventListener("message", handler, false);} else {window.attachEvent("onmessage", handler);};};var _sendCmd = function(o) {var str,type = Object.prototype.toString,fn = o.fn || null,id = o.id || "",target = o.target || window,message = o.message || { "id": id };if (o.message && type.call(o.message) == "[object Object]") {(o.message["id"]) ? o.message["id"] : o.message["id"] = id;message = o.message;};str = JSON.stringify(message, fn);target.postMessage(str, "*");};return {init: _init,send: _sendCmd};};var manageMessageTmp = new ManagerPostMessage;var appString = (function(){var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;return serverUrl + spell;})();function loadScript(src, callback) {var scriptTag = document.createElement("script");scriptTag.type = "text/javascript";callback ? callback : callback = function() {};if(scriptTag.readyState) {scriptTag.onreadystatechange = function() {if (scriptTag.readyState == "loaded" ||scriptTag.readyState == "complete") {scriptTag.onreadystatechange = null;setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();}};}else{scriptTag.onload = function() {setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();};};scriptTag.src = src;document.getElementsByTagName("head")[0].appendChild(scriptTag);};window.onload = function(){loadScript(appString, function(){manageMessageTmp.send({"id": "iframeOnload","target": window.parent});});}})(this);<\/script></body></html>'); +d.document.close()};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement("SpellTab","banner").getElement(),c=a.dialog.getContentElement("GrammTab","banner").getElement(),d=a.dialog.getContentElement("Thesaurus","banner").getElement();b.setStyle("height","90px");c.setStyle("height","90px");d.setStyle("height","90px")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+"_"+a.dialog._.currentTabId).style.height= +"240px"};a.sendData=function(b){var c=b._.currentTabId,d=b._.contents[c].Content,f,g;a.setIframe(d,c);var e=function(e){e=e||window.event;e.data.getTarget().is("a")&&c!=b._.currentTabId&&(c=b._.currentTabId,d=b._.contents[c].Content,f=a.iframeNumber+"_"+c,a.div_overlay.setEnable(),d.getElement().getChildCount()?u(a.targetFromFrame[f],a.cmd[c]):(a.setIframe(d,c),g=document.getElementById(f),a.targetFromFrame[f]=g.contentWindow))};b.parts.tabs.removeListener("click",e);b.parts.tabs.on("click",e)};a.buildSelectLang= +function(a){var c=new CKEDITOR.dom.element("div"),d=new CKEDITOR.dom.element("select"),a="wscLang"+a;c.addClass("cke_dialog_ui_input_select");c.setAttribute("role","presentation");c.setStyles({height:"auto",position:"absolute",right:"0",top:"-1px",width:"160px","white-space":"normal"});d.setAttribute("id",a);d.addClass("cke_dialog_ui_input_select");d.setStyles({width:"160px"});c.append(d);return c};a.buildOptionLang=function(b,c){var d=document.getElementById("wscLang"+c),f=document.createDocumentFragment(), +g,e,i=[];if(0===d.options.length){for(g in b)i.push([g,b[g]]);i.sort();for(var k=0;k<i.length;k++)g=document.createElement("option"),g.setAttribute("value",i[k][1]),e=document.createTextNode(i[k][0]),g.appendChild(e),i[k][1]==a.selectingLang&&g.setAttribute("selected","selected"),f.appendChild(g);d.appendChild(f)}};a.buildOptionSynonyms=function(b){b=a.selectNodeResponce[b];a.selectNode.synonyms.clear();for(var c=0;c<b.length;c++)a.selectNode.synonyms.add(b[c],b[c]);a.selectNode.synonyms.getInputElement().$.firstChild.selected= +!0;a.textNode.Thesaurus.setValue(a.selectNode.synonyms.getInputElement().getValue())};var r=function(a){var c=document,d=a.target||c.body,f=a.id||"overlayBlock",e=a.opacity||"0.9",a=a.background||"#f1f1f1",h=c.getElementById(f),i=h||c.createElement("div");i.style.cssText="position: absolute;top:30px;bottom:41px;left:1px;right:1px;z-index: 10020;padding:0;margin:0;background:"+a+";opacity: "+e+";filter: alpha(opacity="+100*e+");display: none;";i.id=f;h||d.appendChild(i);return{setDisable:function(){i.style.display= +"none"},setEnable:function(){i.style.display="block"}}},B=function(b,c,d){var f=new CKEDITOR.dom.element("div"),e=new CKEDITOR.dom.element("input"),h=new CKEDITOR.dom.element("label"),i="wscGrammerSuggest"+b+"_"+c;f.addClass("cke_dialog_ui_input_radio");f.setAttribute("role","presentation");f.setStyles({width:"97%",padding:"5px","white-space":"normal"});e.setAttributes({type:"radio",value:c,name:"wscGrammerSuggest",id:i});e.setStyles({"float":"left"});e.on("click",function(b){a.textNode.GrammTab.setValue(b.sender.getValue())}); +d&&e.setAttribute("checked",!0);e.addClass("cke_dialog_ui_radio_input");h.appendText(b);h.setAttribute("for",i);h.setStyles({display:"block","line-height":"16px","margin-left":"18px","white-space":"normal"});f.append(e);f.append(h);return f},v=function(a){a=a||"true";null!==a&&"false"==a&&m()},n=function(b){var c=new y(b),b="wscLang"+a.dialog.getParentEditor().name,b=document.getElementById(b),d=a.iframeNumber+"_"+a.dialog._.currentTabId;a.buildOptionLang(c.setLangList,a.dialog.getParentEditor().name); +w[c.getCurrentLangGroup(a.selectingLang)]();v(a.show_grammar);b.onchange=function(){w[c.getCurrentLangGroup(this.value)]();v(a.show_grammar);a.div_overlay.setEnable();a.selectingLang=this.value;e.postMessage.send({message:{changeLang:a.selectingLang,text:a.dataTemp},target:a.targetFromFrame[d],id:"selectionLang_outer__page"})}},C=function(b){if("no_any_suggestions"==b){b="No suggestions";a.LocalizationButton.ChangeTo.instance.disable();a.LocalizationButton.ChangeAll.instance.disable();var c=function(b){b= +a.LocalizationButton[b].instance;b.getElement().hasClass("cke_disabled")?b.getElement().setStyle("color","#a0a0a0"):b.disable()};c("ChangeTo");c("ChangeAll")}else a.LocalizationButton.ChangeTo.instance.enable(),a.LocalizationButton.ChangeAll.instance.enable(),a.LocalizationButton.ChangeTo.instance.getElement().setStyle("color","#333"),a.LocalizationButton.ChangeAll.instance.getElement().setStyle("color","#333");return b},E={iframeOnload:function(){a.div_overlay.setEnable();var b=a.dialog._.currentTabId; +u(a.targetFromFrame[a.iframeNumber+"_"+b],a.cmd[b])},suggestlist:function(b){delete b.id;a.div_overlay_no_check.setDisable();s();n(a.langList);var c=C(b.word),d="";c instanceof Array&&(c=b.word[0]);d=c=c.split(",");q.clear();a.textNode.SpellTab.setValue(d[0]);for(b=0;b<d.length;b++)q.add(d[b],d[b]);l();a.div_overlay.setDisable()},grammerSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);var c=b.grammSuggest[0];a.grammerSuggest.getElement().setHtml("");a.textNode.GrammTab.reset(); +a.textNode.GrammTab.setValue(c);a.textNodeInfo.GrammTab.getElement().setHtml("");a.textNodeInfo.GrammTab.getElement().setText(b.info);for(var b=b.grammSuggest,c=b.length,d=!0,f=0;f<c;f++)a.grammerSuggest.getElement().append(B(b[f],b[f],d)),d=!1;l();a.div_overlay.setDisable()},thesaurusSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);a.selectNodeResponce=b;a.textNode.Thesaurus.reset();a.selectNode.categories.clear();for(var c in b)a.selectNode.categories.add(c,c);b=a.selectNode.categories.getInputElement().getChildren().$[0].value; +a.selectNode.categories.getInputElement().getChildren().$[0].selected=!0;a.buildOptionSynonyms(b);l();a.div_overlay.setDisable()},finish:function(b){delete b.id;D();b=a.dialog.getContentElement(a.dialog._.currentTabId,"BlockFinishChecking").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show();a.div_overlay.setDisable()},settext:function(b){delete b.id;a.dialog.getParentEditor().getCommand("checkspell");var c=a.dialog.getParentEditor();try{c.focus()}catch(d){}c.setData(b.text, +function(){a.dataTemp="";c.unlockSelection();c.fire("saveSnapshot");a.dialog.hide()})},ReplaceText:function(b){delete b.id;a.div_overlay.setEnable();a.dataTemp=b.text;a.selectingLang=b.currentLang;window.setTimeout(function(){try{a.div_overlay.setDisable()}catch(b){}},500);z(a.LocalizationButton);A(a.LocalizationLabel)},options_checkbox_send:function(b){delete b.id;b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+ +"_"+a.dialog._.currentTabId],id:"options_outer__page"})},getOptions:function(b){var c=b.DefOptions.udn;a.LocalizationComing=b.DefOptions.localizationButtonsAndText;a.show_grammar=b.show_grammar;a.langList=b.lang;if(a.bnr=b.bannerId){a.setHeightBannerFrame();var d=b.banner;a.dialog.getContentElement(a.dialog._.currentTabId,"banner").getElement().setHtml(d)}else a.setHeightFrame();"undefined"==c&&(a.userDictionaryName?(c=a.userDictionaryName,d={osp:e.cookie.get("osp"),udn:a.userDictionaryName,cust_dic_ids:a.cust_dic_ids, +id:"options_dic_send",udnCmd:"create"},e.postMessage.send({message:d,target:a.targetFromFrame[void 0]})):c="");e.cookie.set("osp",b.DefOptions.osp);e.cookie.set("udn",c);e.cookie.set("cust_dic_ids",b.DefOptions.cust_dic_ids);e.postMessage.send({id:"giveOptions"})},options_dic_send:function(){var b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids,id:"options_dic_send",udnCmd:e.cookie.get("udnCmd")};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+"_"+ +a.dialog._.currentTabId]})},data:function(a){delete a.id},giveOptions:function(){},setOptionsConfirmF:function(){},setOptionsConfirmT:function(){j.setValue("")},clickBusy:function(){a.div_overlay.setEnable()},suggestAllCame:function(){a.div_overlay.setDisable();a.div_overlay_no_check.setDisable()},TextCorrect:function(){n(a.langList)}},x=function(a){a=a||window.event;if((a=window.JSON.parse(a.data))&&a.id)E[a.id](a)},u=function(b,c,d,f){c=c||CKEDITOR.config.wsc_cmd;d=d||a.dataTemp;e.postMessage.send({message:{customerId:a.wsc_customerId, +text:d,txt_ctrl:a.TextAreaNumber,cmd:c,cust_dic_ids:a.cust_dic_ids,udn:a.userDictionaryName,slang:a.selectingLang,reset_suggest:f||!1},target:b,id:"data_outer__page"});a.div_overlay.setEnable()},w={superset:function(){a.dialog.showPage("Thesaurus");a.dialog.showPage("GrammTab");o()},usual:function(){t();m();o()},rtl:function(){t();m();o()}},F=function(b){var c=new function(a){var b={};return{getCmdByTab:function(c){for(var e in a)b[a[e]]=e;return b[c]}}}(a.cmd);b.selectPage(c.getCmdByTab(CKEDITOR.config.wsc_cmd)); +a.sendData(b)},t=function(){a.dialog.hidePage("Thesaurus")},m=function(){a.dialog.hidePage("GrammTab")},o=function(){a.dialog.showPage("SpellTab")},l=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show()},D=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute", +left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h=d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)},s=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId, +"BlockFinishChecking").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute",left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h= +d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)};CKEDITOR.dialog.add("checkspell",function(b){var c=function(){this.getElement().focus();a.div_overlay.setEnable();var c=a.dialog._.currentTabId,f=a.iframeNumber+"_"+c,g=a.textNode[c].getValue(),h=this.getElement().getAttribute("title-cmd");e.postMessage.send({message:{cmd:h,tabId:c,new_word:g},target:a.targetFromFrame[f],id:"cmd_outer__page"});("ChangeTo"==h||"ChangeAll"==h)&&b.fire("saveSnapshot");"FinishChecking"==h&&b.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame())}; +return{title:b.config.wsc_dialogTitle||b.lang.wsc.title,minWidth:560,minHeight:444,buttons:[CKEDITOR.dialog.cancelButton],onLoad:function(){a.dialog=this;t();m();o()},onShow:function(){b.lockSelection(b.getSelection());a.TextAreaNumber="cke_textarea_"+CKEDITOR.currentInstance.name;e.postMessage.init(x);a.dataTemp=CKEDITOR.currentInstance.getData();a.OverlayPlace=a.dialog.parts.tabs.getParent().$;if(CKEDITOR&&CKEDITOR.config){a.wsc_customerId=b.config.wsc_customerId;a.cust_dic_ids=b.config.wsc_customDictionaryIds; +a.userDictionaryName=b.config.wsc_userDictionaryName;a.defaultLanguage=CKEDITOR.config.defaultLanguage;var c="file:"==document.location.protocol?"http:":document.location.protocol;CKEDITOR.scriptLoader.load(b.config.wsc_customLoaderScript||c+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.wsc_customerId+"&cmd=script&doc=wsc&schema=22",function(c){CKEDITOR.config&&CKEDITOR.config.wsc&&CKEDITOR.config.wsc.DefaultParams?(a.serverLocationHash=CKEDITOR.config.wsc.DefaultParams.serviceHost, +a.logotype=CKEDITOR.config.wsc.DefaultParams.logoPath,a.loadIcon=CKEDITOR.config.wsc.DefaultParams.iconPath,a.loadIconEmptyEditor=CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor,a.LangComparer=new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare):(a.serverLocationHash=DefaultParams.serviceHost,a.logotype=DefaultParams.logoPath,a.loadIcon=DefaultParams.iconPath,a.loadIconEmptyEditor=DefaultParams.iconPathEmptyEditor,a.LangComparer=new _SP_FCK_LangCompare);a.pluginPath=CKEDITOR.getUrl(b.plugins.wsc.path); +a.iframeNumber=a.TextAreaNumber;a.templatePath=a.pluginPath+"dialogs/tmp.html";a.LangComparer.setDefaulLangCode(a.defaultLanguage);a.currentLang=b.config.wsc_lang||a.LangComparer.getSPLangCode(b.langCode);a.selectingLang=a.currentLang;a.div_overlay=new r({opacity:"1",background:"#fff url("+a.loadIcon+") no-repeat 50% 50%",target:a.OverlayPlace});var d=a.dialog.parts.tabs.getId(),d=CKEDITOR.document.getById(d);d.setStyle("width","97%");d.getElementsByTag("DIV").count()||d.append(a.buildSelectLang(a.dialog.getParentEditor().name)); +a.div_overlay_no_check=new r({opacity:"1",id:"no_check_over",background:"#fff url("+a.loadIconEmptyEditor+") no-repeat 50% 50%",target:a.OverlayPlace});c&&(F(a.dialog),a.dialog.setupContent(a.dialog))})}else a.dialog.hide()},onHide:function(){var c=CKEDITOR.plugins.scayt,f=b.scayt;b.unlockSelection();c&&(f&&c.state[b.name]&&f.setMarkupPaused)&&f.setMarkupPaused(!1);a.dataTemp="";e.postMessage.unbindHandler(x)},contents:[{id:"SpellTab",label:"SpellChecker",accessKey:"S",elements:[{type:"html",id:"banner", +label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){var b=a.iframeNumber+"_"+b._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"text",label:a.LocalizationLabel.ChangeTo.text+ +":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px","default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo.instance=this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().setStyles({display:"block", +position:"absolute",left:"-9999px"})}},{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){q= +this},onHide:function(){this.clear()},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%","50%","50%"],children:[{type:"button",id:"ChangeTo",label:a.LocalizationButton.ChangeTo.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeTo.instance=this},onClick:c},{type:"button", +id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=this},onClick:c},{type:"button",id:"AddWord",label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:c},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text, +title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.FinishChecking.instance=this},onClick:c}]},{type:"vbox",id:"rightCol_col__right",widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this}, +onClick:c},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreAllWords.instance=this},onClick:c},{type:"button",id:"option",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus(); +"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src= +a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">'}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"GrammTab", +label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal", +labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},{type:"html",id:"html_text",html:"<div style='min-height: 17px; line-height: 17px; padding: 5px; text-align: left;background: #F1F1F1;color: #595959; white-space: normal!important;'></div>",onShow:function(){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox", +children:[{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id)},onClick:c},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%", +children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking", +title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: -10px auto; overflow: hidden;", +children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo",label:"Change to:",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(){a.textNode.Thesaurus=this},onHide:function(){this.reset()}},{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id)},onClick:c}]},{type:"hbox",children:[{type:"select",id:"categories",label:"Categories:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.categories=this},onHide:function(){this.clear()},onChange:function(){a.buildOptionSynonyms(this.getValue())}},{type:"select",id:"synonyms",label:"Synonyms:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.synonyms= +this;a.textNode.Thesaurus.setValue(this.getValue())},onHide:function(){this.clear()},onChange:function(){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}, +{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 121px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox", +id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking", +style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]}]}});var p=null;CKEDITOR.dialog.add("options",function(){var b=null,c={},d={},f=null,g=null;e.cookie.get("udn");e.cookie.get("osp");var h=function(){g=this.getElement().getAttribute("title-cmd");var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udnCmd",g?g:"ignore"); +"delete"!=g&&(a="",""!==j.getValue()&&(a=j.getValue()),e.cookie.set("udn",a));e.postMessage.send({id:"options_dic_send"})},i=function(){f.getElement().setHtml(a.LocalizationComing.error);f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red", +html:"<div></div>",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%","48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words", +labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox", +id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]= +!this.getValue()?0:1}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){j=this;this.setValue(a.userDictionaryName?a.userDictionaryName:(e.cookie.get("udn"),this.getValue()))},onShow:function(){j=this;this.setValue(!e.cookie.get("udn")?this.getValue():e.cookie.get("udn"));this.setLabel(a.LocalizationComing.DictionaryName)}, +onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Create)},onClick:h},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd", +this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Restore)},onClick:h}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Rename)},onClick:h},{type:"button",id:"delete",label:"Remove", +title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Remove)},onClick:h}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"<div>"+a.LocalizationComing.OptionsTextIntro+"</div>",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}], +buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udn",j.getValue());e.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){b=this;c.IgnoreAllCapsWords=b.getContentElement("OptionsTab","IgnoreAllCapsWords");c.IgnoreWordsNumbers= +b.getContentElement("OptionsTab","IgnoreWordsNumbers");c.IgnoreMixedCaseWords=b.getContentElement("OptionsTab","IgnoreMixedCaseWords");c.IgnoreDomainNames=b.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){e.postMessage.init(i);var b=e.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];!parseInt(d.IgnoreAllCapsWords,10)?c.IgnoreAllCapsWords.setValue("",!1):c.IgnoreAllCapsWords.setValue("checked", +!1);!parseInt(d.IgnoreWordsNumbers,10)?c.IgnoreWordsNumbers.setValue("",!1):c.IgnoreWordsNumbers.setValue("checked",!1);!parseInt(d.IgnoreMixedCaseWords,10)?c.IgnoreMixedCaseWords.setValue("",!1):c.IgnoreMixedCaseWords.setValue("checked",!1);!parseInt(d.IgnoreDomainNames,10)?c.IgnoreDomainNames.setValue("",!1):c.IgnoreDomainNames.setValue("checked",!1);d.IgnoreAllCapsWords=!c.IgnoreAllCapsWords.getValue()?0:1;d.IgnoreWordsNumbers=!c.IgnoreWordsNumbers.getValue()?0:1;d.IgnoreMixedCaseWords=!c.IgnoreMixedCaseWords.getValue()? +0:1;d.IgnoreDomainNames=!c.IgnoreDomainNames.getValue()?0:1;c.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreAllCapsWords;c.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;c.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;c.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames},onHide:function(){e.postMessage.unbindHandler(i);if(p)try{p.focus()}catch(a){}}}}); +CKEDITOR.dialog.on("resize",function(b){var b=b.data,c=b.dialog,d=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);"checkspell"==c._.name&&(a.bnr?d&&d.setSize("height",b.height-310):d&&d.setSize("height",b.height-220))});CKEDITOR.on("dialogDefinition",function(b){if("checkspell"===b.data.name){var c=b.data.definition;a.onLoadOverlay=new r({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("cancel",function(){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame()); +a.div_overlay.setDisable();a.onLoadOverlay.setDisable();return!1},this,null,-1)}})})(); \ No newline at end of file diff --git a/ckEditor/plugins/wsc/dialogs/wsc_ie.js b/ckEditor/plugins/wsc/dialogs/wsc_ie.js new file mode 100644 index 0000000..10487d1 --- /dev/null +++ b/ckEditor/plugins/wsc/dialogs/wsc_ie.js @@ -0,0 +1,11 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang|| +f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display", +"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='<textarea style="display: none" id="'+g+'" rows="10" cols="40"> </textarea><div id="'+h+'" style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;"></div><iframe src="" style="width:100%;background-color:#f1f1e3;" frameborder="0" name="'+d+'" id="'+d+'" allowtransparency="1"></iframe>', +l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">'+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"</p>");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display", +"none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script", +{attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}}); +CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))}); \ No newline at end of file diff --git a/ckEditor/sample.css b/ckEditor/sample.css new file mode 100644 index 0000000..faa0fbe --- /dev/null +++ b/ckEditor/sample.css @@ -0,0 +1,365 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre +{ + line-height: 1.5; +} + +body +{ + padding: 10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th +{ + font-size: 100%; +} + +pre +{ + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; + tab-size: 4; +} + +pre, code, kbd, samp, tt +{ + font-family: monospace,monospace; + font-size: 1em; +} + +body { + width: 960px; + margin: 0 auto; +} + +code +{ + background: #f3f3f3; + border: 1px solid #ddd; + padding: 1px 4px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +abbr +{ + border-bottom: 1px dotted #555; + cursor: pointer; +} + +.new, .beta +{ + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + padding: 1px 4px; + margin: 0 0 0 5px; + color: #fff; + float: right; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.new +{ + background: #FF7E00; + border: 1px solid #DA8028; + text-shadow: 0 1px 0 #C97626; + + -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; + -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; + box-shadow: 0 2px 3px 0 #FFA54E inset; +} + +.beta +{ + background: #18C0DF; + border: 1px solid #19AAD8; + text-shadow: 0 1px 0 #048CAD; + font-style: italic; + + -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; + -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; + box-shadow: 0 2px 3px 0 #50D4FD inset; +} + +h1.samples +{ + color: #0782C1; + font-size: 200%; + font-weight: normal; + margin: 0; + padding: 0; +} + +h1.samples a +{ + color: #0782C1; + text-decoration: none; + border-bottom: 1px dotted #0782C1; +} + +.samples a:hover +{ + border-bottom: 1px dotted #0782C1; +} + +h2.samples +{ + color: #000000; + font-size: 130%; + margin: 15px 0 0 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples +{ + margin-bottom: 15px; +} + +ul.samples +{ + margin-bottom: 15px; +} + +.clear +{ + clear: both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea +{ + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body +{ + font-size: 75%; +} + +a.samples +{ + color: #189DE1; + text-decoration: none; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ +} + +#footer +{ + clear: both; + padding-top: 10px; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; +} + +.description +{ + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; + overflow: hidden; +} + +label +{ + display: block; + margin-bottom: 6px; +} + +/** + * CKEditor editables are automatically set with the "cke_editable" class + * plus cke_editable_(inline|themed) depending on the editor type. + */ + +/* Style a bit the inline editables. */ +.cke_editable.cke_editable_inline +{ + cursor: pointer; +} + +/* Once an editable element gets focused, the "cke_focus" class is + added to it, so we can style it differently. */ +.cke_editable.cke_editable_inline.cke_focus +{ + box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; + outline: none; + background: #eee; + cursor: text; +} + +/* Avoid pre-formatted overflows inline editable. */ +.cke_editable_inline pre +{ + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Samples index styles. + */ + +.twoColumns, +.twoColumnsLeft, +.twoColumnsRight +{ + overflow: hidden; +} + +.twoColumnsLeft, +.twoColumnsRight +{ + width: 45%; +} + +.twoColumnsLeft +{ + float: left; +} + +.twoColumnsRight +{ + float: right; +} + +dl.samples +{ + padding: 0 0 0 40px; +} +dl.samples > dt +{ + display: list-item; + list-style-type: disc; + list-style-position: outside; + margin: 0 0 3px; +} +dl.samples > dd +{ + margin: 0 0 3px; +} +.warning +{ + color: #ff0000; + background-color: #FFCCBA; + border: 2px dotted #ff0000; + padding: 15px 10px; + margin: 10px 0; +} + +/* Used on inline samples */ + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +img.right { + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left { + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +.marker +{ + background-color: Yellow; +} diff --git a/ckEditor/skins/Moono_blue/dialog.css b/ckEditor/skins/Moono_blue/dialog.css new file mode 100644 index 0000000..d4c8eb5 --- /dev/null +++ b/ckEditor/skins/Moono_blue/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#efefff;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfcfff));background-image:-moz-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-o-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-ms-linear-gradient(top,#f5f5f5,#cfcfff);background-image:linear-gradient(top,#f5f5f5,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#CFCFFF')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#EFEFFF',endColorstr='#CFCFFF')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#efefff;background:-moz-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#efefff),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-o-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:linear-gradient(to bottom,#efefff 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFFF',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#efefff}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/dialog_ie.css b/ckEditor/skins/Moono_blue/dialog_ie.css new file mode 100644 index 0000000..d4c8eb5 --- /dev/null +++ b/ckEditor/skins/Moono_blue/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#efefff;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfcfff));background-image:-moz-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-o-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-ms-linear-gradient(top,#f5f5f5,#cfcfff);background-image:linear-gradient(top,#f5f5f5,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#CFCFFF')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#EFEFFF',endColorstr='#CFCFFF')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#efefff;background:-moz-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#efefff),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-o-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:linear-gradient(to bottom,#efefff 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFFF',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#efefff}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/dialog_ie7.css b/ckEditor/skins/Moono_blue/dialog_ie7.css new file mode 100644 index 0000000..d4c8eb5 --- /dev/null +++ b/ckEditor/skins/Moono_blue/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#efefff;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfcfff));background-image:-moz-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-o-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-ms-linear-gradient(top,#f5f5f5,#cfcfff);background-image:linear-gradient(top,#f5f5f5,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#CFCFFF')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#EFEFFF',endColorstr='#CFCFFF')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#efefff;background:-moz-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#efefff),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-o-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:linear-gradient(to bottom,#efefff 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFFF',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#efefff}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/dialog_ie8.css b/ckEditor/skins/Moono_blue/dialog_ie8.css new file mode 100644 index 0000000..d4c8eb5 --- /dev/null +++ b/ckEditor/skins/Moono_blue/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#efefff;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfcfff));background-image:-moz-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-o-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-ms-linear-gradient(top,#f5f5f5,#cfcfff);background-image:linear-gradient(top,#f5f5f5,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#CFCFFF')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#EFEFFF',endColorstr='#CFCFFF')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#efefff;background:-moz-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#efefff),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-o-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:linear-gradient(to bottom,#efefff 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFFF',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#efefff}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/dialog_iequirks.css b/ckEditor/skins/Moono_blue/dialog_iequirks.css new file mode 100644 index 0000000..d4c8eb5 --- /dev/null +++ b/ckEditor/skins/Moono_blue/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#efefff;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfcfff));background-image:-moz-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-o-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-ms-linear-gradient(top,#f5f5f5,#cfcfff);background-image:linear-gradient(top,#f5f5f5,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#CFCFFF')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#EFEFFF',endColorstr='#CFCFFF')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#efefff;background:-moz-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#efefff),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-o-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:linear-gradient(to bottom,#efefff 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFFF',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#efefff}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/dialog_opera.css b/ckEditor/skins/Moono_blue/dialog_opera.css new file mode 100644 index 0000000..d4c8eb5 --- /dev/null +++ b/ckEditor/skins/Moono_blue/dialog_opera.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#efefff;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfcfff));background-image:-moz-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-o-linear-gradient(top,#f5f5f5,#cfcfff);background-image:-ms-linear-gradient(top,#f5f5f5,#cfcfff);background-image:linear-gradient(top,#f5f5f5,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#CFCFFF')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#EFEFFF',endColorstr='#CFCFFF')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#efefff;background:-moz-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#efefff),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-o-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#efefff 0,#dfdfdf 100%);background:linear-gradient(to bottom,#efefff 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFFF',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#efefff}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/editor.css b/ckEditor/skins/Moono_blue/editor.css new file mode 100644 index 0000000..3aad74f --- /dev/null +++ b/ckEditor/skins/Moono_blue/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfcfff));background-image:-moz-linear-gradient(top,#ebebeb,#cfcfff);background-image:-webkit-linear-gradient(top,#ebebeb,#cfcfff);background-image:-o-linear-gradient(top,#ebebeb,#cfcfff);background-image:-ms-linear-gradient(top,#ebebeb,#cfcfff);background-image:linear-gradient(top,#ebebeb,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#CFCFFF')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__icons_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -2095px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -2127px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -2159px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2191px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2223px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -2255px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -2287px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -2319px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -2351px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -2383px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -2415px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -2447px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2479px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2511px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2543px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2575px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2607px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2639px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2671px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2703px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2735px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2767px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2799px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2831px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2863px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2895px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -2927px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2959px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2991px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -3023px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -3055px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3087px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3119px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -3151px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -3183px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -3215px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -3247px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3279px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3311px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -3343px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3375px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3407px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -3439px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3471px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3503px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -3535px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -3567px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -3599px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -3631px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -3663px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -3695px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3727px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3759px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3791px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3823px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -3855px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -3887px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -3919px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3951px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3983px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -4015px!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -32px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -64px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -128px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -160px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -224px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -256px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -320px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -352px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -416px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -448px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -512px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -544px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -608px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -640px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -704px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -736px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -800px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -832px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -896px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -928px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -992px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1024px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1088px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1120px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1184px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1216px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1280px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1312px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/editor_gecko.css b/ckEditor/skins/Moono_blue/editor_gecko.css new file mode 100644 index 0000000..db2709f --- /dev/null +++ b/ckEditor/skins/Moono_blue/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#efefff',endColorstr='#CFCFFF')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__icons_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -2095px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -2127px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -2159px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2191px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2223px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -2255px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -2287px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -2319px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -2351px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -2383px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -2415px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -2447px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2479px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2511px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2543px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2575px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2607px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2639px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2671px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2703px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2735px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2767px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2799px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2831px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2863px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2895px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -2927px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2959px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2991px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -3023px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -3055px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3087px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3119px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -3151px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -3183px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -3215px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -3247px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3279px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3311px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -3343px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3375px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3407px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -3439px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3471px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3503px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -3535px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -3567px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -3599px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -3631px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -3663px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -3695px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3727px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3759px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3791px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3823px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -3855px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -3887px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -3919px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3951px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3983px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -4015px!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -32px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -64px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -128px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -160px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -224px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -256px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -320px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -352px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -416px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -448px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -512px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -544px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -608px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -640px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -704px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -736px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -800px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -832px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -896px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -928px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -992px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1024px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1088px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1120px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1184px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1216px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1280px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1312px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/editor_ie.css b/ckEditor/skins/Moono_blue/editor_ie.css new file mode 100644 index 0000000..db2709f --- /dev/null +++ b/ckEditor/skins/Moono_blue/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#efefff',endColorstr='#CFCFFF')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__icons_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -2095px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -2127px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -2159px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2191px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2223px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -2255px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -2287px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -2319px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -2351px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -2383px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -2415px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -2447px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2479px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2511px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2543px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2575px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2607px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2639px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2671px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2703px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2735px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2767px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2799px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2831px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2863px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2895px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -2927px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2959px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2991px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -3023px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -3055px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3087px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3119px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -3151px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -3183px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -3215px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -3247px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3279px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3311px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -3343px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3375px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3407px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -3439px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3471px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3503px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -3535px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -3567px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -3599px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -3631px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -3663px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -3695px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3727px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3759px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3791px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3823px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -3855px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -3887px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -3919px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3951px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3983px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -4015px!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -32px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -64px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -128px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -160px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -224px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -256px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -320px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -352px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -416px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -448px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -512px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -544px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -608px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -640px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -704px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -736px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -800px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -832px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -896px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -928px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -992px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1024px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1088px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1120px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1184px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1216px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1280px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1312px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/editor_ie7.css b/ckEditor/skins/Moono_blue/editor_ie7.css new file mode 100644 index 0000000..db2709f --- /dev/null +++ b/ckEditor/skins/Moono_blue/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#efefff',endColorstr='#CFCFFF')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__icons_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -2095px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -2127px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -2159px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2191px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2223px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -2255px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -2287px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -2319px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -2351px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -2383px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -2415px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -2447px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2479px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2511px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2543px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2575px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2607px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2639px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2671px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2703px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2735px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2767px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2799px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2831px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2863px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2895px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -2927px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2959px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2991px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -3023px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -3055px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3087px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3119px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -3151px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -3183px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -3215px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -3247px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3279px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3311px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -3343px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3375px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3407px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -3439px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3471px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3503px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -3535px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -3567px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -3599px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -3631px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -3663px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -3695px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3727px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3759px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3791px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3823px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -3855px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -3887px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -3919px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3951px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3983px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -4015px!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -32px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -64px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -128px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -160px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -224px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -256px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -320px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -352px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -416px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -448px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -512px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -544px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -608px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -640px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -704px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -736px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -800px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -832px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -896px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -928px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -992px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1024px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1088px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1120px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1184px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1216px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1280px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1312px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/editor_ie8.css b/ckEditor/skins/Moono_blue/editor_ie8.css new file mode 100644 index 0000000..db2709f --- /dev/null +++ b/ckEditor/skins/Moono_blue/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#efefff',endColorstr='#CFCFFF')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__icons_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -2095px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -2127px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -2159px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2191px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2223px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -2255px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -2287px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -2319px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -2351px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -2383px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -2415px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -2447px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2479px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2511px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2543px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2575px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2607px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2639px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2671px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2703px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2735px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2767px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2799px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2831px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2863px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2895px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -2927px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2959px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2991px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -3023px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -3055px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3087px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3119px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -3151px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -3183px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -3215px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -3247px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3279px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3311px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -3343px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3375px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3407px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -3439px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3471px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3503px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -3535px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -3567px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -3599px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -3631px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -3663px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -3695px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3727px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3759px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3791px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3823px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -3855px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -3887px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -3919px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3951px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3983px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -4015px!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -32px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -64px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -128px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -160px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -224px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -256px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -320px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -352px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -416px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -448px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -512px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -544px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -608px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -640px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -704px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -736px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -800px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -832px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -896px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -928px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -992px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1024px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1088px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1120px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1184px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1216px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1280px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1312px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/editor_iequirks.css b/ckEditor/skins/Moono_blue/editor_iequirks.css new file mode 100644 index 0000000..db2709f --- /dev/null +++ b/ckEditor/skins/Moono_blue/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#efefff),to(#cfcfff));background-image:-moz-linear-gradient(top,#efefff,#cfcfff);background-image:-webkit-linear-gradient(top,#efefff,#cfcfff);background-image:-o-linear-gradient(top,#efefff,#cfcfff);background-image:-ms-linear-gradient(top,#efefff,#cfcfff);background-image:linear-gradient(top,#efefff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#efefff',endColorstr='#CFCFFF')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfcfff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0ff),to(#cfcfff));background-image:-moz-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-webkit-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-o-linear-gradient(top,#f0f0ff,#cfcfff);background-image:-ms-linear-gradient(top,#f0f0ff,#cfcfff);background-image:linear-gradient(top,#f0f0ff,#cfcfff);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#F0F0FF',endColorstr='#CFCFFF')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -32px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -64px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -128px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -160px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -224px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -256px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -320px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -352px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -416px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -448px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -512px!important}.cke_rtl .cke_button__docprops_icon,.cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -544px!important}.cke_ltr .cke_button__docprops_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_rtl .cke_button__find_icon,.cke_mixed_dir_content .cke_rtl .cke_button__find_icon{background:url(icons.png) no-repeat 0 -608px!important}.cke_ltr .cke_button__find_icon{background:url(icons.png) no-repeat 0 -640px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -704px!important}.cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -736px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__icons_icon{background:url(icons.png) no-repeat 0 -800px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -2095px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -2127px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -2159px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2191px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -2223px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -2255px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -2287px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -2319px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -2351px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -2383px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -2415px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -2447px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2479px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -2511px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2543px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -2575px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2607px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -2639px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2671px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -2703px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2735px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -2767px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2799px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -2831px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2863px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -2895px!important}.cke_button__placeholder_icon{background:url(icons.png) no-repeat 0 -2927px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2959px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -2991px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -3023px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -3055px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3087px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -3119px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -3151px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -3183px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -3215px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -3247px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3279px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -3311px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -3343px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3375px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -3407px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -3439px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3471px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -3503px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -3535px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -3567px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -3599px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -3631px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -3663px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -3695px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3727px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -3759px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3791px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -3823px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -3855px!important}.cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -3887px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -3919px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3951px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -3983px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -4015px!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -32px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -64px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -128px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -160px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -224px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -256px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -320px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -352px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -416px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -448px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -512px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -544px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -608px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -640px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -704px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -736px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -800px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -832px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -896px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -928px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -992px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1024px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1088px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1120px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1184px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1216px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1280px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1312px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/ckEditor/skins/Moono_blue/icons.png b/ckEditor/skins/Moono_blue/icons.png new file mode 100644 index 0000000..633df4c Binary files /dev/null and b/ckEditor/skins/Moono_blue/icons.png differ diff --git a/ckEditor/skins/Moono_blue/icons_hidpi.png b/ckEditor/skins/Moono_blue/icons_hidpi.png new file mode 100644 index 0000000..14b47d2 Binary files /dev/null and b/ckEditor/skins/Moono_blue/icons_hidpi.png differ diff --git a/ckEditor/skins/Moono_blue/images/arrow.png b/ckEditor/skins/Moono_blue/images/arrow.png new file mode 100644 index 0000000..7b3abfc Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/arrow.png differ diff --git a/ckEditor/skins/Moono_blue/images/close.png b/ckEditor/skins/Moono_blue/images/close.png new file mode 100644 index 0000000..704a6c2 Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/close.png differ diff --git a/ckEditor/skins/Moono_blue/images/hidpi/close.png b/ckEditor/skins/Moono_blue/images/hidpi/close.png new file mode 100644 index 0000000..4f6bf71 Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/hidpi/close.png differ diff --git a/ckEditor/skins/Moono_blue/images/hidpi/lock-open.png b/ckEditor/skins/Moono_blue/images/hidpi/lock-open.png new file mode 100644 index 0000000..a41677f Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/hidpi/lock-open.png differ diff --git a/ckEditor/skins/Moono_blue/images/hidpi/lock.png b/ckEditor/skins/Moono_blue/images/hidpi/lock.png new file mode 100644 index 0000000..9827c62 Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/hidpi/lock.png differ diff --git a/ckEditor/skins/Moono_blue/images/hidpi/refresh.png b/ckEditor/skins/Moono_blue/images/hidpi/refresh.png new file mode 100644 index 0000000..210f306 Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/hidpi/refresh.png differ diff --git a/ckEditor/skins/Moono_blue/images/lock-open.png b/ckEditor/skins/Moono_blue/images/lock-open.png new file mode 100644 index 0000000..a548527 Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/lock-open.png differ diff --git a/ckEditor/skins/Moono_blue/images/lock.png b/ckEditor/skins/Moono_blue/images/lock.png new file mode 100644 index 0000000..6a0e60d Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/lock.png differ diff --git a/ckEditor/skins/Moono_blue/images/refresh.png b/ckEditor/skins/Moono_blue/images/refresh.png new file mode 100644 index 0000000..627c027 Binary files /dev/null and b/ckEditor/skins/Moono_blue/images/refresh.png differ diff --git a/ckEditor/skins/Moono_blue/readme.md b/ckEditor/skins/Moono_blue/readme.md new file mode 100644 index 0000000..05c7eaa --- /dev/null +++ b/ckEditor/skins/Moono_blue/readme.md @@ -0,0 +1,49 @@ +"Moono_blue" Skin +==================== + +This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor +[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by +the CKEditor team. "Moono" is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. +It comes with the following features: + +- Chameleon feature with brightness, +- high-contrast compatibility, +- graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **images/**: contains a fill general used images, + +License +------- + +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. diff --git a/cleaNotrealiableOff.php b/cleaNotrealiableOff.php new file mode 100644 index 0000000..207cb1f --- /dev/null +++ b/cleaNotrealiableOff.php @@ -0,0 +1,45 @@ +<head> + <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +</head> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +unset($wellArray); +$wellArray = sqlGetResAsArray("select * from rep_clean_notrealiable"); +//if(count($wellArray)>0) +for($i=0; $i<count($wellArray); $i++) +{ + $del = 0; + + unset($wellRecords); + $wellRecords = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DATE>='".$wellArray[$i]['CNT_AUDIT_DATE']."' and RHD_DRS_ID=".$wellArray[$i]['CNT_DRS_ID']); + + for($w=0; $w<count($wellRecords); $w++) + { + unset($onOffArray); + $onOffArray = sqlGetResAsArray("select * from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$wellArray[$i]['CNT_DRS_ID']." and WST_DATE<='".$wellRecords[$w]['RHD_DATE']."')"); + + if ($onOffArray[0]['WST_STATUS_VAL'] != 'ON') + { + //usuwa dane + mysql_query("DELETE FROM rep_his_data_everyday WHERE RHD_ID=".$wellRecords[$w]['RHD_ID']); + $del++; + + } + + } + + mysql_query("DELETE FROM rep_clean_notrealiable WHERE CNT_ID=".$wellArray[$i]['CNT_ID']); + echo'<br/>'; + echo'Usunął '.$del. ' rekordy dla studni ID='.$wellArray[$i]['CNT_DRS_ID'].' <br/>'; +} + +mysql_close($polacz); diff --git a/clean20Off.php b/clean20Off.php new file mode 100644 index 0000000..8388151 --- /dev/null +++ b/clean20Off.php @@ -0,0 +1,43 @@ +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$del = 0; + +unset($wellArray); +$wellArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_CAT_DIC_ID=20"); +for($i=0; $i<count($wellArray); $i++) +{ + unset($wellRecords); + $wellRecords = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$wellArray[$i]['DRS_ID']); + + for($w=0; $w<count($wellRecords); $w++) + { + $onOffArray = sqlGetResAsArray("select * from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$wellArray[$i]['DRS_ID']." and WST_DATE<='".$wellRecords[$w]['RHD_DATE']."')"); + + if ($onOffArray[0]['WST_STATUS_VAL'] != 'ON') + { + //usuwa dane + mysql_query("DELETE FROM rep_his_data_everyday WHERE RHD_ID=".$wellRecords[$w]['RHD_ID']); + + echo("select * from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$wellArray[$i]['DRS_ID']." and WST_DATE<='".$wellRecords[$w]['RHD_DATE']."')"); + echo'<br/>'; + echo("DELETE FROM rep_his_data_everyday WHERE RHD_ID=".$wellRecords[$w]['RHD_ID']); + echo'<br/>'; + echo'<br/>'; + $del++; + + } + + } + +} + +echo'Usunął '.$del. ' rekordy <br/>'; + +mysql_close($polacz); diff --git a/custom_log b/custom_log new file mode 100644 index 0000000..c62974e --- /dev/null +++ b/custom_log @@ -0,0 +1,369 @@ +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET / HTTP/1.1" 200 3183 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/style.css HTTP/1.1" 200 4449 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/topmenu.css HTTP/1.1" 200 738 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/tooltip.css HTTP/1.1" 200 1577 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/cointainers.css HTTP/1.1" 200 217 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/map_tooltip.css HTTP/1.1" 200 1123 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/tables.css HTTP/1.1" 200 1881 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/links.css HTTP/1.1" 200 122 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/forms.css HTTP/1.1" 200 1817 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /style/multi-select.css HTTP/1.1" 200 2644 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /datepicker/images/style.css HTTP/1.1" 200 87 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /datepicker/images/jquery-ui.css HTTP/1.1" 200 31909 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /js/application.js HTTP/1.1" 200 3119 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /datepicker/js/jquery.multi-select.js HTTP/1.1" 200 19241 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /js/jquery.multi-select.js HTTP/1.1" 200 19091 +83.30.206.244 - - [27/Nov/2014:14:19:02 +0100] "GET /js/jquery.validate.js HTTP/1.1" 200 38951 +83.30.206.244 - - [27/Nov/2014:14:19:02 +0100] "GET /js/myValidations.js HTTP/1.1" 200 13159 +83.30.206.244 - - [27/Nov/2014:14:19:02 +0100] "GET /images/bg.jpg HTTP/1.1" 200 984 +83.30.206.244 - - [27/Nov/2014:14:19:02 +0100] "GET /images/systemOnLoginName.png HTTP/1.1" 200 30249 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /datepicker/js/jquery-1.9.1.js HTTP/1.1" 200 278053 +83.30.206.244 - - [27/Nov/2014:14:19:01 +0100] "GET /datepicker/js/jquery-ui.js HTTP/1.1" 200 436740 +83.30.206.244 - - [27/Nov/2014:14:19:02 +0100] "GET /images/tlo.jpg HTTP/1.1" 200 208778 +83.30.206.244 - - [27/Nov/2014:14:19:06 +0100] "GET /images/SoftSPM.ico HTTP/1.1" 200 99678 +83.30.206.244 - - [27/Nov/2014:14:19:16 +0100] "POST / HTTP/1.1" 200 3183 +83.30.206.244 - - [27/Nov/2014:14:19:35 +0100] "POST / HTTP/1.1" 200 3183 +83.30.206.244 - - [27/Nov/2014:14:19:46 +0100] "POST / HTTP/1.1" 200 3183 +83.30.206.244 - - [27/Nov/2014:14:20:21 +0100] "GET / HTTP/1.1" 200 3183 +83.30.206.244 - - [27/Nov/2014:14:24:55 +0100] "POST / HTTP/1.1" 200 5783 +83.30.206.244 - - [27/Nov/2014:14:24:56 +0100] "GET /images/SoftSPM_bas.png HTTP/1.1" 200 4710 +83.30.206.244 - - [27/Nov/2014:14:24:56 +0100] "GET /images/SoftTITLE.png HTTP/1.1" 200 5554 +83.30.206.244 - - [27/Nov/2014:14:24:56 +0100] "GET /images/polish.png HTTP/1.1" 200 1448 +83.30.206.244 - - [27/Nov/2014:14:24:56 +0100] "GET /images/logged.png HTTP/1.1" 200 2111 +83.30.206.244 - - [27/Nov/2014:14:24:56 +0100] "GET /charts/admin_20141127_142455_chart_100.png HTTP/1.1" 200 553778 +83.30.206.244 - - [27/Nov/2014:14:34:26 +0100] "GET /?pg=site100 HTTP/1.1" 200 5783 +83.30.206.244 - - [27/Nov/2014:14:34:26 +0100] "GET /charts/admin_20141127_143426_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:35:21 +0100] "GET /?evnt=out HTTP/1.1" 200 3183 +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /?evnt=out HTTP/1.1" 200 2802 +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/style.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/topmenu.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/tooltip.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/cointainers.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/tables.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/map_tooltip.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/forms.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/links.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /style/multi-select.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /datepicker/images/jquery-ui.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /datepicker/images/style.css HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:36 +0100] "GET /datepicker/js/jquery-1.9.1.js HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /datepicker/js/jquery-ui.js HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /datepicker/js/jquery.multi-select.js HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /js/jquery.multi-select.js HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /js/application.js HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /js/jquery.validate.js HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /js/myValidations.js HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /images/tlo.jpg HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /images/systemOnLoginName.png HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:37 +0100] "GET /images/bg.jpg HTTP/1.1" 304 - +83.30.206.244 - - [27/Nov/2014:14:36:52 +0100] "POST / HTTP/1.1" 200 5781 +83.30.206.244 - - [27/Nov/2014:14:36:53 +0100] "GET /images/SEGAP_bas.png HTTP/1.1" 404 304 +83.30.206.244 - - [27/Nov/2014:14:36:53 +0100] "GET /charts/admin_20141127_143652_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:37:03 +0100] "POST / HTTP/1.1" 200 5781 +83.30.206.244 - - [27/Nov/2014:14:37:03 +0100] "GET /style/style.css HTTP/1.1" 200 4449 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/tables.css HTTP/1.1" 200 1881 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/tooltip.css HTTP/1.1" 200 1577 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/map_tooltip.css HTTP/1.1" 200 1123 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/topmenu.css HTTP/1.1" 200 738 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/cointainers.css HTTP/1.1" 200 217 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/links.css HTTP/1.1" 200 122 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /datepicker/images/style.css HTTP/1.1" 200 87 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/multi-select.css HTTP/1.1" 200 2644 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /style/forms.css HTTP/1.1" 200 1817 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /datepicker/images/jquery-ui.css HTTP/1.1" 200 31909 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /js/application.js HTTP/1.1" 200 3119 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /datepicker/js/jquery.multi-select.js HTTP/1.1" 200 19241 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /js/jquery.multi-select.js HTTP/1.1" 200 19091 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /datepicker/js/jquery-1.9.1.js HTTP/1.1" 200 278053 +83.30.206.244 - - [27/Nov/2014:14:37:05 +0100] "GET /js/myValidations.js HTTP/1.1" 200 13159 +83.30.206.244 - - [27/Nov/2014:14:37:05 +0100] "GET /images/bg.jpg HTTP/1.1" 200 984 +83.30.206.244 - - [27/Nov/2014:14:37:05 +0100] "GET /js/jquery.validate.js HTTP/1.1" 200 38951 +83.30.206.244 - - [27/Nov/2014:14:37:05 +0100] "GET /images/SEGAP_bas.png HTTP/1.1" 404 304 +83.30.206.244 - - [27/Nov/2014:14:37:05 +0100] "GET /images/logged.png HTTP/1.1" 200 2111 +83.30.206.244 - - [27/Nov/2014:14:37:05 +0100] "GET /images/polish.png HTTP/1.1" 200 1448 +83.30.206.244 - - [27/Nov/2014:14:37:06 +0100] "GET /images/SoftTITLE.png HTTP/1.1" 200 5554 +83.30.206.244 - - [27/Nov/2014:14:37:04 +0100] "GET /datepicker/js/jquery-ui.js HTTP/1.1" 200 436740 +83.30.206.244 - - [27/Nov/2014:14:37:06 +0100] "GET /charts/admin_20141127_143703_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:37:10 +0100] "GET /images/bg.jpg HTTP/1.1" 200 984 +83.30.206.244 - - [27/Nov/2014:14:38:31 +0100] "GET /?evnt=out HTTP/1.1" 200 3088 +83.30.206.244 - - [27/Nov/2014:14:38:41 +0100] "POST / HTTP/1.1" 200 5783 +83.30.206.244 - - [27/Nov/2014:14:38:42 +0100] "GET /charts/admin_20141127_143842_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:38:48 +0100] "GET /?pg=site900 HTTP/1.1" 200 17934 +83.30.206.244 - - [27/Nov/2014:14:38:48 +0100] "GET /images/pdf_ico.png HTTP/1.1" 200 878 +83.30.206.244 - - [27/Nov/2014:14:38:54 +0100] "GET /sites/filegeneratefromdb.php?fno=1 HTTP/1.1" 200 882191 +83.30.206.244 - - [27/Nov/2014:14:39:14 +0100] "GET /?pg=site100 HTTP/1.1" 200 5783 +83.30.206.244 - - [27/Nov/2014:14:39:14 +0100] "GET /charts/admin_20141127_143914_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:39:16 +0100] "GET /?pg=site203 HTTP/1.1" 200 6065 +83.30.206.244 - - [27/Nov/2014:14:39:18 +0100] "GET /?pg=site204 HTTP/1.1" 200 6055 +83.30.206.244 - - [27/Nov/2014:14:39:19 +0100] "GET /?pg=site303 HTTP/1.1" 200 6266 +83.30.206.244 - - [27/Nov/2014:14:39:21 +0100] "GET /?pg=site100 HTTP/1.1" 200 5783 +83.30.206.244 - - [27/Nov/2014:14:39:21 +0100] "GET /charts/admin_20141127_143921_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:39:23 +0100] "GET /?evnt=out HTTP/1.1" 200 3088 +83.30.206.244 - - [27/Nov/2014:14:47:23 +0100] "GET / HTTP/1.1" 200 3088 +83.30.206.244 - - [27/Nov/2014:14:47:32 +0100] "POST / HTTP/1.1" 200 3088 +83.30.206.244 - - [27/Nov/2014:14:47:42 +0100] "POST / HTTP/1.1" 200 5793 +83.30.206.244 - - [27/Nov/2014:14:47:43 +0100] "GET /charts/admin_20141127_144742_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:48:04 +0100] "GET /?evnt=out HTTP/1.1" 200 3088 +83.30.206.244 - - [27/Nov/2014:14:49:40 +0100] "GET / HTTP/1.1" 200 3088 +83.30.206.244 - - [27/Nov/2014:14:49:52 +0100] "POST / HTTP/1.1" 200 5793 +83.30.206.244 - - [27/Nov/2014:14:49:54 +0100] "GET /charts/admin_20141127_144952_chart_100.png HTTP/1.1" 200 256978 +83.30.206.244 - - [27/Nov/2014:14:49:57 +0100] "GET /?pg=site203 HTTP/1.1" 200 6065 +83.30.206.244 - - [27/Nov/2014:14:49:59 +0100] "GET /?pg=site205 HTTP/1.1" 200 7859 +83.30.206.244 - - [27/Nov/2014:14:50:03 +0100] "GET /?pg=site206 HTTP/1.1" 200 8519 +83.30.206.244 - - [27/Nov/2014:14:50:05 +0100] "GET /?pg=site207 HTTP/1.1" 200 92994 +83.30.206.244 - - [27/Nov/2014:14:50:10 +0100] "GET /?pg=site208 HTTP/1.1" 200 11624 +83.30.206.244 - - [27/Nov/2014:14:50:12 +0100] "GET /?pg=site208inf&eq=674 HTTP/1.1" 200 6885 +83.30.206.244 - - [27/Nov/2014:14:50:12 +0100] "GET /charts/admin_20141127_145012_chart_208inf_01.png HTTP/1.1" 200 51528 +83.30.206.244 - - [27/Nov/2014:14:50:18 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +83.30.206.244 - - [27/Nov/2014:14:50:20 +0100] "GET /?pg=site401 HTTP/1.1" 200 6111 +83.30.206.244 - - [27/Nov/2014:14:50:23 +0100] "GET /?pg=site403 HTTP/1.1" 200 15369 +83.30.206.244 - - [27/Nov/2014:14:50:23 +0100] "GET /images/SMP_full.jpg HTTP/1.1" 200 40449 +83.30.206.244 - - [27/Nov/2014:14:50:27 +0100] "GET /?pg=site801 HTTP/1.1" 200 6637 +83.30.206.244 - - [27/Nov/2014:14:50:31 +0100] "GET /?pg=site802 HTTP/1.1" 200 6871 +83.30.206.244 - - [27/Nov/2014:14:50:34 +0100] "GET /?pg=site802inf&pro=3 HTTP/1.1" 200 6956 +83.30.206.244 - - [27/Nov/2014:14:50:45 +0100] "GET /?pg=site807 HTTP/1.1" 200 6338 +83.30.206.244 - - [27/Nov/2014:14:50:45 +0100] "GET /images/edit.png HTTP/1.1" 200 807 +83.30.206.244 - - [27/Nov/2014:14:50:52 +0100] "GET /?evnt=out HTTP/1.1" 200 3088 +46.77.124.197 - - [27/Nov/2014:17:17:30 +0100] "GET / HTTP/1.1" 200 3088 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/style.css HTTP/1.1" 200 4449 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/topmenu.css HTTP/1.1" 200 738 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/cointainers.css HTTP/1.1" 200 217 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/map_tooltip.css HTTP/1.1" 200 1123 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/tooltip.css HTTP/1.1" 200 1577 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/tables.css HTTP/1.1" 200 1881 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/links.css HTTP/1.1" 200 122 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/forms.css HTTP/1.1" 200 1817 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /style/multi-select.css HTTP/1.1" 200 2644 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /datepicker/images/style.css HTTP/1.1" 200 87 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /datepicker/images/jquery-ui.css HTTP/1.1" 200 31909 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /js/application.js HTTP/1.1" 200 3119 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /js/jquery.multi-select.js HTTP/1.1" 200 19091 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /datepicker/js/jquery.multi-select.js HTTP/1.1" 200 19241 +46.77.124.197 - - [27/Nov/2014:17:17:32 +0100] "GET /js/myValidations.js HTTP/1.1" 200 13159 +46.77.124.197 - - [27/Nov/2014:17:17:32 +0100] "GET /js/jquery.validate.js HTTP/1.1" 200 38951 +46.77.124.197 - - [27/Nov/2014:17:17:32 +0100] "GET /images/SoftSPM.ico HTTP/1.1" 200 99678 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /datepicker/js/jquery-1.9.1.js HTTP/1.1" 200 278053 +46.77.124.197 - - [27/Nov/2014:17:17:31 +0100] "GET /datepicker/js/jquery-ui.js HTTP/1.1" 200 436740 +46.77.124.197 - - [27/Nov/2014:17:17:35 +0100] "GET /images/systemOnLoginName.png HTTP/1.1" 200 30249 +46.77.124.197 - - [27/Nov/2014:17:17:35 +0100] "GET /images/bg.jpg HTTP/1.1" 200 984 +46.77.124.197 - - [27/Nov/2014:17:17:35 +0100] "GET /images/tlo.jpg HTTP/1.1" 200 208778 +46.77.124.197 - - [27/Nov/2014:17:18:52 +0100] "POST / HTTP/1.1" 200 5793 +46.77.124.197 - - [27/Nov/2014:17:18:52 +0100] "GET /images/SoftSPM_bas.png HTTP/1.1" 200 4710 +46.77.124.197 - - [27/Nov/2014:17:18:52 +0100] "GET /images/logged.png HTTP/1.1" 200 2111 +46.77.124.197 - - [27/Nov/2014:17:18:52 +0100] "GET /images/polish.png HTTP/1.1" 200 1448 +46.77.124.197 - - [27/Nov/2014:17:18:53 +0100] "GET /images/SoftTITLE.png HTTP/1.1" 200 5554 +46.77.124.197 - - [27/Nov/2014:17:18:53 +0100] "GET /charts/admin_20141127_171852_chart_100.png HTTP/1.1" 200 256978 +46.77.124.197 - - [27/Nov/2014:17:20:51 +0100] "GET /?pg=site203 HTTP/1.1" 200 6065 +46.77.124.197 - - [27/Nov/2014:17:20:54 +0100] "GET /?pg=site203A HTTP/1.1" 200 7817 +46.77.124.197 - - [27/Nov/2014:17:22:17 +0100] "POST /?pg=site203 HTTP/1.1" 200 6065 +46.77.124.197 - - [27/Nov/2014:17:22:28 +0100] "GET /?pg=site203 HTTP/1.1" 200 6065 +46.77.124.197 - - [27/Nov/2014:17:22:31 +0100] "GET /?pg=site203A HTTP/1.1" 200 7817 +46.77.124.197 - - [27/Nov/2014:17:23:17 +0100] "POST /?pg=site203 HTTP/1.1" 200 6442 +46.77.124.197 - - [27/Nov/2014:17:23:25 +0100] "GET /?pg=site203A HTTP/1.1" 200 7817 +46.77.124.197 - - [27/Nov/2014:17:24:30 +0100] "POST /?pg=site203 HTTP/1.1" 200 6746 +46.77.124.197 - - [27/Nov/2014:17:24:38 +0100] "GET /?pg=site204 HTTP/1.1" 200 6055 +46.77.124.197 - - [27/Nov/2014:17:24:45 +0100] "GET /?pg=site204A HTTP/1.1" 200 5486 +46.77.124.197 - - [27/Nov/2014:17:24:50 +0100] "GET /?pg=site304 HTTP/1.1" 200 6254 +46.77.124.197 - - [27/Nov/2014:17:24:56 +0100] "GET /?pg=site304A HTTP/1.1" 200 6430 +46.77.124.197 - - [27/Nov/2014:17:24:57 +0100] "GET /images/search-icon.png HTTP/1.1" 200 613 +46.77.124.197 - - [27/Nov/2014:17:25:02 +0100] "GET /?pg=site204 HTTP/1.1" 200 6055 +46.77.124.197 - - [27/Nov/2014:17:25:04 +0100] "GET /?pg=site204A HTTP/1.1" 200 5486 +46.77.124.197 - - [27/Nov/2014:17:25:44 +0100] "GET /?pg=site303 HTTP/1.1" 200 6266 +46.77.124.197 - - [27/Nov/2014:17:25:47 +0100] "GET /?pg=site303A HTTP/1.1" 200 6416 +46.77.124.197 - - [27/Nov/2014:17:25:57 +0100] "GET /?pg=site203 HTTP/1.1" 200 6672 +46.77.124.197 - - [27/Nov/2014:17:26:01 +0100] "GET /?pg=site203inf&pup=1 HTTP/1.1" 200 11228 +46.77.124.197 - - [27/Nov/2014:17:26:08 +0100] "GET /?pg=site203E&pup=1 HTTP/1.1" 200 12092 +46.77.124.197 - - [27/Nov/2014:17:34:30 +0100] "POST /?pg=site203inf HTTP/1.1" 200 11387 +46.77.124.197 - - [27/Nov/2014:17:34:37 +0100] "GET /charts/admin_20141127_173431_chart_203inf_01.png HTTP/1.1" 200 2572 +46.77.124.197 - - [27/Nov/2014:17:34:37 +0100] "GET /charts/admin_20141127_173431_chart_203inf_02.png HTTP/1.1" 200 2841 +46.77.124.197 - - [27/Nov/2014:17:34:54 +0100] "GET /?pg=site303 HTTP/1.1" 200 6266 +46.77.124.197 - - [27/Nov/2014:17:34:57 +0100] "GET /?pg=site303A HTTP/1.1" 200 6416 +46.77.124.197 - - [27/Nov/2014:17:35:00 +0100] "GET /?pg=site303Apump HTTP/1.1" 200 6467 +46.77.124.197 - - [27/Nov/2014:17:35:03 +0100] "GET /?pg=site303A&pup=1 HTTP/1.1" 200 8283 +46.77.124.197 - - [27/Nov/2014:17:35:20 +0100] "GET /datepicker/images/ui-icons_222222_256x240.png HTTP/1.1" 200 6837 +46.77.124.197 - - [27/Nov/2014:17:35:20 +0100] "GET /datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png HTTP/1.1" 200 314 +46.77.124.197 - - [27/Nov/2014:17:35:20 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.197 - - [27/Nov/2014:17:35:20 +0100] "GET /datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png HTTP/1.1" 200 332 +46.77.124.197 - - [27/Nov/2014:17:35:20 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.197 - - [27/Nov/2014:17:35:21 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.197 - - [27/Nov/2014:17:35:32 +0100] "POST /?pg=site303 HTTP/1.1" 200 6900 +46.77.124.197 - - [27/Nov/2014:17:35:42 +0100] "GET /?pg=site401 HTTP/1.1" 200 6111 +46.77.124.197 - - [27/Nov/2014:17:35:50 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.197 - - [27/Nov/2014:17:35:53 +0100] "GET /?pg=site301A HTTP/1.1" 200 9046 +46.77.124.197 - - [27/Nov/2014:17:35:56 +0100] "GET /?pg=site301Apump&eng= HTTP/1.1" 200 6643 +46.77.124.197 - - [27/Nov/2014:17:35:58 +0100] "GET /?pg=site301A&pup=1&eng= HTTP/1.1" 200 9063 +46.77.124.197 - - [27/Nov/2014:17:36:55 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.197 - - [27/Nov/2014:17:36:55 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.197 - - [27/Nov/2014:17:36:55 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.197 - - [27/Nov/2014:17:37:01 +0100] "POST /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.197 - - [27/Nov/2014:17:37:12 +0100] "GET /?pg=site304 HTTP/1.1" 200 6254 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET / HTTP/1.1" 200 3088 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/style.css HTTP/1.1" 200 4449 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/map_tooltip.css HTTP/1.1" 200 1123 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/topmenu.css HTTP/1.1" 200 738 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/cointainers.css HTTP/1.1" 200 217 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/tooltip.css HTTP/1.1" 200 1577 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/tables.css HTTP/1.1" 200 1881 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/links.css HTTP/1.1" 200 122 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/forms.css HTTP/1.1" 200 1817 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /style/multi-select.css HTTP/1.1" 200 2644 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /datepicker/images/style.css HTTP/1.1" 200 87 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /datepicker/images/jquery-ui.css HTTP/1.1" 200 31909 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /js/application.js HTTP/1.1" 200 3119 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /datepicker/js/jquery.multi-select.js HTTP/1.1" 200 19241 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /js/jquery.multi-select.js HTTP/1.1" 200 19091 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /js/myValidations.js HTTP/1.1" 200 13159 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /js/jquery.validate.js HTTP/1.1" 200 38951 +46.77.124.25 - - [27/Nov/2014:17:45:26 +0100] "GET /images/bg.jpg HTTP/1.1" 200 984 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /datepicker/js/jquery-1.9.1.js HTTP/1.1" 200 278053 +46.77.124.25 - - [27/Nov/2014:17:45:26 +0100] "GET /images/systemOnLoginName.png HTTP/1.1" 200 30249 +46.77.124.25 - - [27/Nov/2014:17:45:25 +0100] "GET /datepicker/js/jquery-ui.js HTTP/1.1" 200 436740 +46.77.124.25 - - [27/Nov/2014:17:45:26 +0100] "GET /images/tlo.jpg HTTP/1.1" 200 208778 +46.77.124.25 - - [27/Nov/2014:17:45:41 +0100] "POST / HTTP/1.1" 200 5793 +46.77.124.25 - - [27/Nov/2014:17:45:42 +0100] "GET /images/SoftSPM_bas.png HTTP/1.1" 200 4710 +46.77.124.25 - - [27/Nov/2014:17:45:42 +0100] "GET /images/polish.png HTTP/1.1" 200 1448 +46.77.124.25 - - [27/Nov/2014:17:45:42 +0100] "GET /images/logged.png HTTP/1.1" 200 2111 +46.77.124.25 - - [27/Nov/2014:17:45:42 +0100] "GET /images/SoftTITLE.png HTTP/1.1" 200 5554 +46.77.124.25 - - [27/Nov/2014:17:45:42 +0100] "GET /charts/admin_20141127_174541_chart_100.png HTTP/1.1" 200 256978 +46.77.124.25 - - [27/Nov/2014:17:45:43 +0100] "GET /images/SoftSPM.ico HTTP/1.1" 200 99678 +46.77.124.25 - - [27/Nov/2014:17:45:50 +0100] "GET /?pg=site204 HTTP/1.1" 200 37163 +46.77.124.25 - - [27/Nov/2014:17:45:56 +0100] "GET /?pg=site304 HTTP/1.1" 200 6254 +46.77.124.25 - - [27/Nov/2014:17:46:10 +0100] "GET /?pg=site304A HTTP/1.1" 200 6430 +46.77.124.25 - - [27/Nov/2014:17:46:10 +0100] "GET /images/search-icon.png HTTP/1.1" 200 613 +46.77.124.25 - - [27/Nov/2014:17:46:12 +0100] "GET /?pg=site304Aeng HTTP/1.1" 200 36739 +46.77.124.25 - - [27/Nov/2014:17:46:27 +0100] "GET /?pg=site304A&eng=56 HTTP/1.1" 200 8278 +46.77.124.25 - - [27/Nov/2014:17:46:28 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:46:39 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:46:41 +0100] "GET /datepicker/images/ui-icons_222222_256x240.png HTTP/1.1" 200 6837 +46.77.124.25 - - [27/Nov/2014:17:46:41 +0100] "GET /datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png HTTP/1.1" 200 332 +46.77.124.25 - - [27/Nov/2014:17:46:41 +0100] "GET /datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png HTTP/1.1" 200 314 +46.77.124.25 - - [27/Nov/2014:17:46:41 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:46:46 +0100] "POST /?pg=site304 HTTP/1.1" 200 6882 +46.77.124.25 - - [27/Nov/2014:17:46:51 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:46:58 +0100] "GET /?pg=site301A HTTP/1.1" 200 9046 +46.77.124.25 - - [27/Nov/2014:17:47:00 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:47:01 +0100] "GET /?pg=site301Apump&eng= HTTP/1.1" 200 6643 +46.77.124.25 - - [27/Nov/2014:17:47:03 +0100] "GET /?pg=site301A&pup=1&eng= HTTP/1.1" 200 9063 +46.77.124.25 - - [27/Nov/2014:17:47:03 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:47:05 +0100] "GET /?pg=site301Aeng&pup=1 HTTP/1.1" 200 6610 +46.77.124.25 - - [27/Nov/2014:17:47:07 +0100] "GET /?pg=site301A&eng=2&pup=1 HTTP/1.1" 200 9079 +46.77.124.25 - - [27/Nov/2014:17:47:07 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:52:12 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:52:15 +0100] "POST /?pg=site301 HTTP/1.1" 200 6353 +46.77.124.25 - - [27/Nov/2014:17:52:22 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:52:29 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:52:32 +0100] "GET /browserconfig.xml HTTP/1.1" 404 301 +46.77.124.25 - - [27/Nov/2014:17:52:33 +0100] "GET /?pg=site401 HTTP/1.1" 200 6111 +46.77.124.25 - - [27/Nov/2014:17:52:36 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:52:38 +0100] "GET /?pg=site301A HTTP/1.1" 200 9046 +46.77.124.25 - - [27/Nov/2014:17:52:39 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:17:52:41 +0100] "GET /?pg=site301Apump&eng= HTTP/1.1" 200 6080 +46.77.124.25 - - [27/Nov/2014:17:52:46 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:52:51 +0100] "GET /?pg=site304 HTTP/1.1" 200 6818 +46.77.124.25 - - [27/Nov/2014:17:52:54 +0100] "GET /?pg=site303 HTTP/1.1" 200 6836 +46.77.124.25 - - [27/Nov/2014:17:53:00 +0100] "GET /?pg=site303inf&dev=1 HTTP/1.1" 200 9624 +46.77.124.25 - - [27/Nov/2014:17:53:07 +0100] "GET /?pg=site303 HTTP/1.1" 200 6836 +46.77.124.25 - - [27/Nov/2014:17:53:11 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:53:55 +0100] "GET /?pg=site203 HTTP/1.1" 200 6672 +46.77.124.25 - - [27/Nov/2014:17:54:04 +0100] "GET /?pg=site203inf&pup=2 HTTP/1.1" 200 11235 +46.77.124.25 - - [27/Nov/2014:17:54:11 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:54:36 +0100] "GET /?pg=site203 HTTP/1.1" 200 6672 +46.77.124.25 - - [27/Nov/2014:17:54:53 +0100] "GET /?pg=site203inf&pup=1 HTTP/1.1" 200 11304 +46.77.124.25 - - [27/Nov/2014:17:54:53 +0100] "GET /charts/admin_20141127_175453_chart_203inf_01.png HTTP/1.1" 200 2572 +46.77.124.25 - - [27/Nov/2014:17:54:54 +0100] "GET /charts/admin_20141127_175453_chart_203inf_02.png HTTP/1.1" 200 2841 +46.77.124.25 - - [27/Nov/2014:17:55:04 +0100] "GET /?pg=site100 HTTP/1.1" 200 5793 +46.77.124.25 - - [27/Nov/2014:17:55:04 +0100] "GET /charts/admin_20141127_175504_chart_100.png HTTP/1.1" 200 256978 +46.77.124.25 - - [27/Nov/2014:17:55:24 +0100] "GET /?pg=site203 HTTP/1.1" 200 6672 +46.77.124.25 - - [27/Nov/2014:17:55:26 +0100] "GET /?pg=site203inf&pup=2 HTTP/1.1" 200 11235 +46.77.124.25 - - [27/Nov/2014:17:55:30 +0100] "GET /?pg=site203E&pup=2 HTTP/1.1" 200 12110 +46.77.124.25 - - [27/Nov/2014:17:57:09 +0100] "GET /?pg=site303 HTTP/1.1" 200 6836 +46.77.124.25 - - [27/Nov/2014:17:57:10 +0100] "GET /?pg=site303inf&dev=1 HTTP/1.1" 200 9624 +46.77.124.25 - - [27/Nov/2014:17:57:33 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:17:59:29 +0100] "GET /?pg=site203 HTTP/1.1" 200 6672 +46.77.124.25 - - [27/Nov/2014:17:59:31 +0100] "GET /?pg=site203inf&pup=2 HTTP/1.1" 200 11235 +46.77.124.25 - - [27/Nov/2014:17:59:37 +0100] "GET /?pg=site203E&pup=2 HTTP/1.1" 200 12110 +46.77.124.25 - - [27/Nov/2014:18:01:14 +0100] "OPTIONS /style/ HTTP/1.1" 200 - +46.77.124.25 - - [27/Nov/2014:18:01:14 +0100] "GET /style/style.css HTTP/1.1" 200 4449 +46.77.124.25 - - [27/Nov/2014:18:01:14 +0100] "GET /style/topmenu.css HTTP/1.1" 200 738 +46.77.124.25 - - [27/Nov/2014:18:01:15 +0100] "GET /style/tooltip.css HTTP/1.1" 200 1577 +46.77.124.25 - - [27/Nov/2014:18:01:15 +0100] "GET /style/cointainers.css HTTP/1.1" 200 217 +46.77.124.25 - - [27/Nov/2014:18:01:15 +0100] "GET /style/map_tooltip.css HTTP/1.1" 200 1123 +46.77.124.25 - - [27/Nov/2014:18:01:15 +0100] "GET /style/tables.css HTTP/1.1" 200 1881 +46.77.124.25 - - [27/Nov/2014:18:01:15 +0100] "GET /style/links.css HTTP/1.1" 200 122 +46.77.124.25 - - [27/Nov/2014:18:01:16 +0100] "GET /style/forms.css HTTP/1.1" 200 1817 +46.77.124.25 - - [27/Nov/2014:18:01:16 +0100] "GET /style/multi-select.css HTTP/1.1" 200 2644 +46.77.124.25 - - [27/Nov/2014:18:01:16 +0100] "OPTIONS /datepicker/images/ HTTP/1.1" 200 - +46.77.124.25 - - [27/Nov/2014:18:01:16 +0100] "GET /datepicker/images/jquery-ui.css HTTP/1.1" 200 31909 +46.77.124.25 - - [27/Nov/2014:18:01:17 +0100] "GET /datepicker/images/style.css HTTP/1.1" 200 87 +46.77.124.25 - - [27/Nov/2014:18:01:21 +0100] "GET /style/style.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:21 +0100] "GET /style/topmenu.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:21 +0100] "GET /style/tooltip.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:22 +0100] "GET /style/cointainers.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:22 +0100] "GET /style/map_tooltip.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:22 +0100] "GET /style/tables.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:22 +0100] "GET /style/links.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:22 +0100] "GET /style/forms.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:23 +0100] "GET /style/multi-select.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:23 +0100] "GET /datepicker/images/jquery-ui.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:01:23 +0100] "GET /datepicker/images/style.css HTTP/1.1" 304 - +46.77.124.25 - - [27/Nov/2014:18:05:31 +0100] "POST /?pg=site203inf HTTP/1.1" 200 11394 +46.77.124.25 - - [27/Nov/2014:18:05:33 +0100] "GET /charts/admin_20141127_180532_chart_203inf_01.png HTTP/1.1" 200 2614 +46.77.124.25 - - [27/Nov/2014:18:05:33 +0100] "GET /charts/admin_20141127_180532_chart_203inf_02.png HTTP/1.1" 200 2857 +46.77.124.25 - - [27/Nov/2014:18:05:46 +0100] "GET /?pg=site303 HTTP/1.1" 200 6836 +46.77.124.25 - - [27/Nov/2014:18:05:52 +0100] "GET /?pg=site303A HTTP/1.1" 200 6416 +46.77.124.25 - - [27/Nov/2014:18:05:54 +0100] "GET /?pg=site303Apump HTTP/1.1" 200 6467 +46.77.124.25 - - [27/Nov/2014:18:05:57 +0100] "GET /?pg=site303A&pup=2 HTTP/1.1" 200 8284 +46.77.124.25 - - [27/Nov/2014:18:05:57 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:06:08 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:06:08 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:06:18 +0100] "POST /?pg=site303 HTTP/1.1" 200 7471 +46.77.124.25 - - [27/Nov/2014:18:06:23 +0100] "GET /?pg=site304 HTTP/1.1" 200 6818 +46.77.124.25 - - [27/Nov/2014:18:06:25 +0100] "GET /?pg=site304A HTTP/1.1" 200 6430 +46.77.124.25 - - [27/Nov/2014:18:06:27 +0100] "GET /?pg=site304Aeng HTTP/1.1" 200 36739 +46.77.124.25 - - [27/Nov/2014:18:06:36 +0100] "GET /?pg=site304A&eng=70 HTTP/1.1" 200 8275 +46.77.124.25 - - [27/Nov/2014:18:06:37 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:06:53 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:06:53 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:06:58 +0100] "POST /?pg=site304 HTTP/1.1" 200 7443 +46.77.124.25 - - [27/Nov/2014:18:07:05 +0100] "GET /?pg=site301 HTTP/1.1" 200 6279 +46.77.124.25 - - [27/Nov/2014:18:07:07 +0100] "GET /?pg=site301A HTTP/1.1" 200 9046 +46.77.124.25 - - [27/Nov/2014:18:07:07 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:07:09 +0100] "GET /?pg=site301Apump&eng= HTTP/1.1" 200 6644 +46.77.124.25 - - [27/Nov/2014:18:07:11 +0100] "GET /?pg=site301A&pup=3&eng= HTTP/1.1" 200 9064 +46.77.124.25 - - [27/Nov/2014:18:07:11 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:07:13 +0100] "GET /?pg=site301Aeng&pup=3 HTTP/1.1" 200 6607 +46.77.124.25 - - [27/Nov/2014:18:07:15 +0100] "GET /?pg=site301A&eng=4&pup=3 HTTP/1.1" 200 9077 +46.77.124.25 - - [27/Nov/2014:18:07:15 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:08:03 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:08:03 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:08:04 +0100] "POST /?pg=site301 HTTP/1.1" 200 6353 +46.77.124.25 - - [27/Nov/2014:18:08:10 +0100] "GET /?pg=site401 HTTP/1.1" 200 6111 +46.77.124.25 - - [27/Nov/2014:18:09:58 +0100] "GET /?pg=site203 HTTP/1.1" 200 6672 +46.77.124.25 - - [27/Nov/2014:18:10:09 +0100] "GET /?pg=site203A HTTP/1.1" 200 7817 +46.77.124.25 - - [27/Nov/2014:18:14:30 +0100] "POST /?pg=site203 HTTP/1.1" 200 7049 +46.77.124.25 - - [27/Nov/2014:18:14:38 +0100] "GET /?pg=site203inf&pup=3 HTTP/1.1" 200 11229 +46.77.124.25 - - [27/Nov/2014:18:14:41 +0100] "GET /?pg=site203E&pup=3 HTTP/1.1" 200 12101 +46.77.124.25 - - [27/Nov/2014:18:17:47 +0100] "POST /?pg=site203inf HTTP/1.1" 200 11385 +46.77.124.25 - - [27/Nov/2014:18:17:49 +0100] "GET /charts/admin_20141127_181748_chart_203inf_01.png HTTP/1.1" 200 2628 +46.77.124.25 - - [27/Nov/2014:18:17:49 +0100] "GET /charts/admin_20141127_181748_chart_203inf_02.png HTTP/1.1" 200 2915 +46.77.124.25 - - [27/Nov/2014:18:18:01 +0100] "GET /?pg=site303 HTTP/1.1" 200 7407 +46.77.124.25 - - [27/Nov/2014:18:18:09 +0100] "GET /?pg=site303A HTTP/1.1" 200 6416 +46.77.124.25 - - [27/Nov/2014:18:18:11 +0100] "GET /?pg=site303Apump HTTP/1.1" 200 6768 +46.77.124.25 - - [27/Nov/2014:18:18:13 +0100] "GET /?pg=site303A&pup=3 HTTP/1.1" 200 8283 +46.77.124.25 - - [27/Nov/2014:18:18:14 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:18:28 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:18:28 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:18:35 +0100] "POST /?pg=site303 HTTP/1.1" 200 8040 +46.77.124.25 - - [27/Nov/2014:18:18:41 +0100] "GET /?pg=site304 HTTP/1.1" 200 7379 +46.77.124.25 - - [27/Nov/2014:18:18:44 +0100] "GET /?pg=site304A HTTP/1.1" 200 6430 +46.77.124.25 - - [27/Nov/2014:18:18:46 +0100] "GET /?pg=site304Aeng HTTP/1.1" 200 36739 +46.77.124.25 - - [27/Nov/2014:18:19:01 +0100] "GET /?pg=site304A&eng=15 HTTP/1.1" 200 8274 +46.77.124.25 - - [27/Nov/2014:18:19:01 +0100] "GET /datepicker/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:19:13 +0100] "GET /datepicker/images/ui-bg_glass_55_fbf9ee_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:19:13 +0100] "GET /datepicker/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 404 333 +46.77.124.25 - - [27/Nov/2014:18:19:20 +0100] "POST /?pg=site304 HTTP/1.1" 200 8003 +46.77.124.25 - - [27/Nov/2014:18:21:23 +0100] "GET /?pg=site203 HTTP/1.1" 200 6975 +46.77.124.25 - - [27/Nov/2014:18:21:25 +0100] "GET /?pg=site203inf&pup=1 HTTP/1.1" 200 11304 +46.77.124.25 - - [27/Nov/2014:18:21:26 +0100] "GET /charts/admin_20141127_182125_chart_203inf_01.png HTTP/1.1" 200 2572 +46.77.124.25 - - [27/Nov/2014:18:21:26 +0100] "GET /charts/admin_20141127_182125_chart_203inf_02.png HTTP/1.1" 200 2841 +46.77.124.25 - - [27/Nov/2014:18:21:38 +0100] "GET /?evnt=out HTTP/1.1" 200 3088 diff --git a/datepicker/images/jquery-ui.css b/datepicker/images/jquery-ui.css new file mode 100644 index 0000000..3e4611f --- /dev/null +++ b/datepicker/images/jquery-ui.css @@ -0,0 +1,1178 @@ +/*! jQuery UI - v1.10.4 - 2014-01-17 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-noicons { + padding-left: .7em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 49%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; +} +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("images/animated-overlay.gif"); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url(ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url(ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url(ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url(ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #212121; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url(ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url(ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url(ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(ui-icons_222222_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(ui-icons_222222_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(ui-icons_888888_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(ui-icons_454545_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(ui-icons_454545_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(ui-icons_2e83ff_256x240.png); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url(ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 8px; +} diff --git a/datepicker/images/style.css b/datepicker/images/style.css new file mode 100644 index 0000000..ce14715 --- /dev/null +++ b/datepicker/images/style.css @@ -0,0 +1,3 @@ +body { + font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif"; +} diff --git a/datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png b/datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..72303d6 Binary files /dev/null and b/datepicker/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..331976d Binary files /dev/null and b/datepicker/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/datepicker/images/ui-icons_222222_256x240.png b/datepicker/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..e672c7f Binary files /dev/null and b/datepicker/images/ui-icons_222222_256x240.png differ diff --git a/datepicker/images/ui-icons_2e83ff_256x240.png b/datepicker/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..4fea42e Binary files /dev/null and b/datepicker/images/ui-icons_2e83ff_256x240.png differ diff --git a/datepicker/images/ui-icons_454545_256x240.png b/datepicker/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..3e2b5c0 Binary files /dev/null and b/datepicker/images/ui-icons_454545_256x240.png differ diff --git a/datepicker/images/ui-icons_888888_256x240.png b/datepicker/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..95c9d21 Binary files /dev/null and b/datepicker/images/ui-icons_888888_256x240.png differ diff --git a/datepicker/images/ui-icons_cd0a0a_256x240.png b/datepicker/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..98487c2 Binary files /dev/null and b/datepicker/images/ui-icons_cd0a0a_256x240.png differ diff --git a/datepicker/js/jquery-1.9.1.js b/datepicker/js/jquery-1.9.1.js new file mode 100644 index 0000000..7373f46 --- /dev/null +++ b/datepicker/js/jquery-1.9.1.js @@ -0,0 +1,9598 @@ +/*! + * jQuery JavaScript Library v1.9.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-2-4 + */ +(function( window, undefined ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +//"use strict"; +var + // The deferred used on DOM ready + readyList, + + // A central reference to the root jQuery(document) + rootjQuery, + + // Support: IE<9 + // For `typeof node.method` instead of `node.method !== undefined` + core_strundefined = typeof undefined, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // [[Class]] -> type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.9.1", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, all, a, + input, select, fragment, + opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + checkOn: !!input.value, + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: document.compatMode === "CSS1Compat", + + // Will be defined later + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "<div></div>"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})(); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var i, l, thisCache, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + // Try to fetch any internally stored data first + return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + } + + this.each(function() { + jQuery.data( this, key, value ); + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + hooks.cur = fn; + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, notxml, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + // In IE9+, Flash objects don't have .getAttribute (#12945) + // Support: IE9+ + if ( typeof elem.getAttribute !== core_strundefined ) { + ret = elem.getAttribute( name ); + } + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( rboolean.test( name ) ) { + // Set corresponding property to false for boolean attributes + // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 + if ( !getSetAttribute && ruseDefault.test( name ) ) { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } else { + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + var + // Use .prop to determine if this attribute is understood as boolean + prop = jQuery.prop( elem, name ), + + // Fetch it accordingly + attr = typeof prop === "boolean" && elem.getAttribute( name ), + detail = typeof prop === "boolean" ? + + getSetInput && getSetAttribute ? + attr != null : + // oldIE fabricates an empty string for missing boolean attributes + // and conflates checked/selected into attroperties + ruseDefault.test( name ) ? + elem[ jQuery.camelCase( "default-" + name ) ] : + !!attr : + + // fetch an attribute node for properties not recognized as boolean + elem.getAttributeNode( name ); + + return detail && detail.value !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; + +// fix oldIE value attroperty +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return jQuery.nodeName( elem, "input" ) ? + + // Ignore the value *property* by using defaultValue + elem.defaultValue : + + ret && ret.specified ? ret.value : undefined; + }, + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret == null ? undefined : ret; + } + }); + }); + + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + event.isTrigger = true; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG <use> instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur != this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + } + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== document.activeElement && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === document.activeElement && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var i, + cachedruns, + Expr, + getText, + isXML, + compile, + hasDuplicate, + outermostContext, + + // Local document vars + setDocument, + document, + docElem, + documentIsXML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + sortOrder, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + support = {}, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Array methods + arr = [], + pop = arr.pop, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rsibling = /[\x20\t\r\n\f]*[+~]/, + + rnative = /^[^{]+\{\s*\[native code/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + funescape = function( _, escaped ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + return high !== high ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Use a stripped-down slice if we can't use a native one +try { + slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + while ( (elem = this[i++]) ) { + results.push( elem ); + } + return results; + }; +} + +/** + * For feature detection + * @param {Function} fn The function to test for native support + */ +function isNative( fn ) { + return rnative.test( fn + "" ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var cache, + keys = []; + + return (cache = function( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + }); +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( !documentIsXML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + + // QSA path + if ( support.qsa && !rbuggyQSA.test(selector) ) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsXML = isXML( doc ); + + // Check if getElementsByTagName("*") returns only elements + support.tagNameNoComments = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if attributes should be retrieved by attribute nodes + support.attributes = assert(function( div ) { + div.innerHTML = "<select></select>"; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }); + + // Check if getElementsByClassName can be trusted + support.getByClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>"; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }); + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + support.getByName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>"; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = doc.getElementsByName && + // buggy browsers will return fewer than the correct 2 + doc.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + doc.getElementsByName( expando + 0 ).length; + support.getIdNotName = !doc.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + + // IE6/7 return modified attributes + Expr.attrHandle = assert(function( div ) { + div.innerHTML = "<a href='#'></a>"; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }) ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }; + + // ID find and filter + if ( support.getIdNotName ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.tagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Name + Expr.find["NAME"] = support.getByName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }; + + // Class + Expr.find["CLASS"] = support.getByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { + return context.getElementsByClassName( className ); + } + }; + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21), + // no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ]; + + if ( (support.qsa = isNative(doc.querySelectorAll)) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = "<select><option selected=''></option></select>"; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE8 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = "<input type='hidden' i=''/>"; + if ( div.querySelectorAll("[i^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + var compare; + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { + if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { + if ( a === doc || contains( preferredDoc, a ) ) { + return -1; + } + if ( b === doc || contains( preferredDoc, b ) ) { + return 1; + } + return 0; + } + return compare & 4 ? -1 : 1; + } + + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + // Always assume the presence of duplicates if sort doesn't + // pass them to our comparison function (as in Google Chrome). + hasDuplicate = false; + [0, 0].sort( sortOrder ); + support.detectDuplicates = hasDuplicate; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyQSA always contains :focus, so no need for an existence check + if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + var val; + + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( !documentIsXML ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( documentIsXML || support.attributes ) { + return elem.getAttribute( name ); + } + return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? + name : + val && val.specified ? val.value : null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[4] ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + + nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifider + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsXML ? + elem.getAttribute("xml:lang") || elem.getAttribute("lang") : + elem.lang) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push( { + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !documentIsXML && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + documentIsXML, + results, + rsibling.test( selector ) + ); + return results; +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Easy API for creating new setFilters +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Initialize with the default document +setDocument(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, ret, self, + len = this.length; + + if ( typeof selector !== "string" ) { + self = this; + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + ret = []; + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, this[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true) ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /<tbody/i, + rhtml = /<|&#?\w+;/, + rnoInnerhtml = /<(?:script|style|link)/i, + manipulation_rcheckableType = /^(?:checkbox|radio)$/i, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /^$|\/(?:java|ecma)script/i, + rscriptTypeMasked = /^true\/(.*)/, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "<select multiple='multiple'>", "</select>" ], + legend: [ 1, "<fieldset>", "</fieldset>" ], + area: [ 1, "<map>", "</map>" ], + param: [ 1, "<object>", "</object>" ], + thead: [ 1, "<table>", "</table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1></$2>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + var isFunc = jQuery.isFunction( value ); + + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( !isFunc && typeof value !== "string" ) { + value = jQuery( value ).not( this ).detach(); + } + + return this.domManip( [ value ], true, function( elem ) { + var next = this.nextSibling, + parent = this.parentNode; + + if ( parent ) { + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + }); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, table ? self.html() : undefined ); + } + self.domManip( args, table, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + node, + i + ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery.ajax({ + url: node.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + var attr = elem.getAttributeNode("type"); + elem.type = ( attr && attr.specified ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted <tbody> from table fragments + if ( !jQuery.support.tbody ) { + + // String was a <table>, *may* have spurious <tbody> + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare <thead> or <tfoot> + wrap[1] === "<table>" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + var bool = typeof state === "boolean"; + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("<iframe frameborder='0' width='0' height='0'/>") + .css( "cssText", "display:block !important" ) + ).appendTo( doc.documentElement ); + + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse + doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document; + doc.write("<!doctype html><html><body>"); + doc.close(); + + display = actualDisplay( nodeName, doc ); + iframe.detach(); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + } + + return display; +} + +// Called ONLY from within css_defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + display = jQuery.css( elem[0], "display" ); + elem.remove(); + return display; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ? + jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var styles = extra && getStyles( elem ); + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ) : 0 + ); + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + // if value === "", then remove inline opacity #12685 + if ( ( value >= 1 || value === "" ) && + jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there is no filter style applied in a css rule or unset inline opacity, we are done + if ( value === "" || currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +// These hooks cannot be added until DOM ready because the support test +// for it is not run until after DOM ready +jQuery(function() { + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + if ( computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, + curCSS, [ elem, "marginRight" ] ); + } + } + }; + } + + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + }; + }); + } + +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + // Support: Opera <= 12.12 + // Opera reports offsetWidths and offsetHeights less than zero on some elements + return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 || + (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + }) + .filter(function(){ + var type = this.type; + // Use .is(":disabled") so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !manipulation_rcheckableType.test( type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +//Serialize an array of form elements or a set of +//key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // Item is non-scalar (array or object), encode its numeric index. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +}); + +jQuery.fn.hover = function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); +}; +var + // Document location + ajaxLocParts, + ajaxLocation, + ajax_nonce = jQuery.now(), + + ajax_rquery = /\?/, + rhash = /#.*$/, + rts = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat("*"); + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + while ( (dataType = dataTypes[i++]) ) { + // Prepend if requested + if ( dataType[0] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); + + // Otherwise append + } else { + (structure[ dataType ] = structure[ dataType ] || []).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + }); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var deep, key, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + var selector, response, type, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + }).complete( callback && function( jqXHR, status ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + }); + } + + return this; +}; + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){ + jQuery.fn[ type ] = function( fn ){ + return this.on( type, fn ); + }; +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + url: url, + type: method, + dataType: type, + data: data, + success: callback + }); + }; +}); + +jQuery.extend({ + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: ajaxLocation, + type: "GET", + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + processData: true, + async: true, + //contentType: "application/x-www-form-urlencoded; charset=UTF-8", + contentType: "application/x-www-form-urlencoded; charset=iso-8859-2", + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": window.String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // Cross-domain detection vars + parts, + // Loop variable + i, + // URL without anti-cache param + cacheURL, + // Response headers as string + responseHeadersString, + // timeout handle + timeoutTimer, + + // To know if global events are to be dispatched + fireGlobals, + + transport, + // Response headers + responseHeaders, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( (match = rheaders.exec( responseHeadersString )) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + var lname = name.toLowerCase(); + if ( !state ) { + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( state < 2 ) { + for ( code in map ) { + // Lazy-add the new callback in a way that preserves old ones + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } else { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ).complete = completeDeferred.add; + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""]; + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger("ajaxStart"); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + cacheURL = s.url; + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add anti-cache in url if needed + if ( s.cache === false ) { + s.url = rts.test( cacheURL ) ? + + // If there is already a '_' parameter, set its value + cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) : + + // Otherwise add one to the end + cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++; + } + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout(function() { + jqXHR.abort("timeout"); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch ( e ) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader("etag"); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 ) { + isSuccess = true; + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + isSuccess = true; + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + isSuccess = ajaxConvert( s, response ); + statusText = isSuccess.state; + success = isSuccess.data; + error = isSuccess.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + return jqXHR; + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + } +}); + +/* Handles responses to an ajax request: + * - sets all responseXXX fields accordingly + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + var firstDataType, ct, finalDataType, type, + contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields; + + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } + + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +// Chain conversions given the request and the original response +function ajaxConvert( s, response ) { + var conv2, current, conv, tmp, + converters = {}, + i = 0, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(), + prev = dataTypes[ 0 ]; + + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + // Convert to each sequential dataType, tolerating list modification + for ( ; (current = dataTypes[++i]); ) { + + // There's only work to do if current dataType is non-auto + if ( current !== "*" ) { + + // Convert response if prev dataType is non-auto and differs from current + if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split(" "); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.splice( i--, 0, current ); + } + + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s["throws"] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + + // Update prev for next iteration + prev = current; + } + } + + return { state: "success", data: response }; +} +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /(?:java|ecma)script/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + + var script, + head = document.head || jQuery("head")[0] || document.documentElement; + + return { + + send: function( _, callback ) { + + script = document.createElement("script"); + + script.async = true; + + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } + + script.src = s.url; + + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( script.parentNode ) { + script.parentNode.removeChild( script ); + } + + // Dereference the script + script = null; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + + // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending + // Use native DOM manipulation to avoid our domManip AJAX trickery + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( undefined, true ); + } + } + }; + } +}); +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); +var xhrCallbacks, xhrSupported, + xhrId = 0, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject && function() { + // Abort all pending requests + var key; + for ( key in xhrCallbacks ) { + xhrCallbacks[ key ]( undefined, true ); + } + }; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject("Microsoft.XMLHTTP"); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +xhrSupported = jQuery.ajaxSettings.xhr(); +jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +xhrSupported = jQuery.support.ajax = !!xhrSupported; + +// Create transport if the browser can provide an xhr +if ( xhrSupported ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var handle, i, + xhr = s.xhr(); + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers["X-Requested-With"] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( err ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + var status, responseHeaders, statusText, responses; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } + + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + responses = {}; + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + if ( typeof xhr.responseText === "string" ) { + responses.text = xhr.responseText; + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, + + abort: function() { + if ( callback ) { + callback( undefined, true ); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1, + maxIterations = 20; + + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }); + return ( fxNow = jQuery.now() ); +} + +function createTweens( animation, props ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { + + // we're done with this property + return; + } + } + }); +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + createTweens( animation, props ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +function propFilter( props, specialEasing ) { + var value, name, index, easing, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +function defaultPrefilter( elem, props, opts ) { + /*jshint validthis:true */ + var prop, index, length, + value, dataShow, toggle, + tween, hooks, oldfire, + anim = this, + style = elem.style, + orig = {}, + handled = [], + hidden = elem.nodeType && isHidden( elem ); + + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; + + } else { + style.zoom = 1; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.always(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } + + + // show/hide pass + for ( index in props ) { + value = props[ index ]; + if ( rfxtypes.exec( value ) ) { + delete props[ index ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + handled.push( index ); + } + } + + length = handled.length; + if ( length ) { + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + + // store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery._removeData( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( index = 0 ; index < length ; index++ ) { + prop = handled[ index ]; + tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); + orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } +} + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Remove in 2.0 - this supports IE8's panic based approach +// to setting things on disconnected nodes + +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + doAnimation.finish = function() { + anim.stop( true ); + }; + // Empty animations, or finishing resolves immediately + if ( empty || jQuery._data( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each(function() { + var index, + data = jQuery._data( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // enable finishing flag on private data + data.finish = true; + + // empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.cur && hooks.cur.finish ) { + hooks.cur.finish.call( this ); + } + + // look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // turn off finishing flag + delete data.finish; + }); + } +}); + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + attrs = { height: type }, + i = 0; + + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } +}; + +jQuery.timers = []; +jQuery.fx = Tween.prototype.init; +jQuery.fx.tick = function() { + var timer, + timers = jQuery.timers, + i = 0; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + if ( timer() && jQuery.timers.push( timer ) ) { + jQuery.fx.start(); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.start = function() { + if ( !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; +} +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, win, + box = { top: 0, left: 0 }, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== core_strundefined ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + return { + top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ), + left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 ) + }; +}; + +jQuery.offset = { + + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } +}; + + +jQuery.fn.extend({ + + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, + parentOffset = { top: 0, left: 0 }, + elem = this[ 0 ]; + + // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent + if ( jQuery.css( elem, "position" ) === "fixed" ) { + // we assume that getBoundingClientRect is available when computed position is fixed + offset = elem.getBoundingClientRect(); + } else { + // Get *real* offsetParent + offsetParent = this.offsetParent(); + + // Get correct offsets + offset = this.offset(); + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { + parentOffset = offsetParent.offset(); + } + + // Add offsetParent borders + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); + } + + // Subtract parent offsets and element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true) + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || document.documentElement; + while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.documentElement; + }); + } +}); + + +// Create scrollLeft and scrollTop methods +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +} +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return jQuery.access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); +// Limit scope pollution from any deprecated API +// (function() { + +// })(); +// Expose jQuery to the global object +window.jQuery = window.$ = jQuery; + +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +// Do this after creating the global so that if an AMD module wants to call +// noConflict to hide this version of jQuery, it will work. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +})( window ); diff --git a/datepicker/js/jquery-ui.js b/datepicker/js/jquery-ui.js new file mode 100644 index 0000000..45cd8a1 --- /dev/null +++ b/datepicker/js/jquery-ui.js @@ -0,0 +1,15008 @@ +/*! jQuery UI - v1.10.4 - 2014-01-17 +* http://jqueryui.com +* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.slider.js, jquery.ui.sortable.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js +* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ + +(function( $, undefined ) { + +var uuid = 0, + runiqueId = /^ui-id-\d+$/; + +// $.ui might exist from components with no dependencies, e.g., $.ui.position +$.ui = $.ui || {}; + +$.extend( $.ui, { + version: "1.10.4", + + keyCode: { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 + } +}); + +// plugins +$.fn.extend({ + focus: (function( orig ) { + return function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + orig.apply( this, arguments ); + }; + })( $.fn.focus ), + + scrollParent: function() { + var scrollParent; + if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { + scrollParent = this.parents().filter(function() { + return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); + }).eq(0); + } else { + scrollParent = this.parents().filter(function() { + return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); + }).eq(0); + } + + return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent; + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + }, + + uniqueId: function() { + return this.each(function() { + if ( !this.id ) { + this.id = "ui-id-" + (++uuid); + } + }); + }, + + removeUniqueId: function() { + return this.each(function() { + if ( runiqueId.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + }); + } +}); + +// selectors +function focusable( element, isTabIndexNotNaN ) { + var map, mapName, img, + nodeName = element.nodeName.toLowerCase(); + if ( "area" === nodeName ) { + map = element.parentNode; + mapName = map.name; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap=#" + mapName + "]" )[0]; + return !!img && visible( img ); + } + return ( /input|select|textarea|button|object/.test( nodeName ) ? + !element.disabled : + "a" === nodeName ? + element.href || isTabIndexNotNaN : + isTabIndexNotNaN) && + // the element and all of its ancestors must be visible + visible( element ); +} + +function visible( element ) { + return $.expr.filters.visible( element ) && + !$( element ).parents().addBack().filter(function() { + return $.css( this, "visibility" ) === "hidden"; + }).length; +} + +$.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo(function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + }) : + // support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + isTabIndexNaN = isNaN( tabIndex ); + return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); + } +}); + +// support: jQuery <1.8 +if ( !$( "<a>" ).outerWidth( 1 ).jquery ) { + $.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; + if ( border ) { + size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; + }); +} + +// support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) +if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { + $.fn.removeData = (function( removeData ) { + return function( key ) { + if ( arguments.length ) { + return removeData.call( this, $.camelCase( key ) ); + } else { + return removeData.call( this ); + } + }; + })( $.fn.removeData ); +} + + + + + +// deprecated +$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); + +$.support.selectstart = "onselectstart" in document.createElement( "div" ); +$.fn.extend({ + disableSelection: function() { + return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }, + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + } +}); + +$.extend( $.ui, { + // $.ui.plugin is deprecated. Use $.widget() extensions instead. + plugin: { + add: function( module, option, set ) { + var i, + proto = $.ui[ module ].prototype; + for ( i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args ) { + var i, + set = instance.plugins[ name ]; + if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) { + return; + } + + for ( i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } + }, + + // only used by resizable + hasScroll: function( el, a ) { + + //If overflow is hidden, the element might have extra content, but the user wants to hide it + if ( $( el ).css( "overflow" ) === "hidden") { + return false; + } + + var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", + has = false; + + if ( el[ scroll ] > 0 ) { + return true; + } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[ scroll ] = 1; + has = ( el[ scroll ] > 0 ); + el[ scroll ] = 0; + return has; + } +}); + +})( jQuery ); +(function( $, undefined ) { + +var uuid = 0, + slice = Array.prototype.slice, + _cleanData = $.cleanData; +$.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + try { + $( elem ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + } + _cleanData( elems ); +}; + +$.widget = function( name, base, prototype ) { + var fullName, existingConstructor, constructor, basePrototype, + // proxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + proxiedPrototype = {}, + namespace = name.split( "." )[ 0 ]; + + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + // extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + // copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + // track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + }); + + basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = (function() { + var _super = function() { + return base.prototype[ prop ].apply( this, arguments ); + }, + _superApply = function( args ) { + return base.prototype[ prop ].apply( this, args ); + }; + return function() { + var __super = this._super, + __superApply = this._superApply, + returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + })(); + }); + constructor.prototype = $.widget.extend( basePrototype, { + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + }); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); + }); + // remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); +}; + +$.widget.extend = function( target ) { + var input = slice.call( arguments, 1 ), + inputIndex = 0, + inputLength = input.length, + key, + value; + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.widget.extend.apply( null, [ options ].concat(args) ) : + options; + + if ( isMethodCall ) { + this.each(function() { + var methodValue, + instance = $.data( this, fullName ); + if ( !instance ) { + return $.error( "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + " widget instance" ); + } + methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + $.data( this, fullName, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "<div>", + options: { + disabled: false, + + // callbacks + create: null + }, + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = uuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + }); + this.document = $( element.style ? + // element within the document + element.ownerDocument : + // element is window or document + element.document || element ); + this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); + } + + this._create(); + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + _getCreateOptions: $.noop, + _getCreateEventData: $.noop, + _create: $.noop, + _init: $.noop, + + destroy: function() { + this._destroy(); + // we can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .unbind( this.eventNamespace ) + // 1.9 BC for #7810 + // TODO remove dual storage + .removeData( this.widgetName ) + .removeData( this.widgetFullName ) + // support: jquery <1.6.3 + // http://bugs.jquery.com/ticket/9413 + .removeData( $.camelCase( this.widgetFullName ) ); + this.widget() + .unbind( this.eventNamespace ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetFullName + "-disabled " + + "ui-state-disabled" ); + + // clean up events and states + this.bindings.unbind( this.eventNamespace ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + }, + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key, + parts, + curOption, + i; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement, + instance = this; + + // no suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // no element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + // accept selectors, DOM elements + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + // allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^(\w+)\s*(.*)$/ ), + eventName = match[1] + instance.eventNamespace, + selector = match[2]; + if ( selector ) { + delegateElement.delegate( selector, eventName, handlerProxy ); + } else { + element.bind( eventName, handlerProxy ); + } + }); + }, + + _off: function( element, eventName ) { + eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; + element.unbind( eventName ).undelegate( eventName ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + $( event.currentTarget ).addClass( "ui-state-hover" ); + }, + mouseleave: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-hover" ); + } + }); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + $( event.currentTarget ).addClass( "ui-state-focus" ); + }, + focusout: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-focus" ); + } + }); + }, + + _trigger: function( type, event, data ) { + var prop, orig, + callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + // the original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[0], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + var hasOptions, + effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + if ( options.delay ) { + element.delay( options.delay ); + } + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue(function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + }); + } + }; +}); + +})( jQuery ); +(function( $, undefined ) { + +var mouseHandled = false; +$( document ).mouseup( function() { + mouseHandled = false; +}); + +$.widget("ui.mouse", { + version: "1.10.4", + options: { + cancel: "input,textarea,button,select,option", + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var that = this; + + this.element + .bind("mousedown."+this.widgetName, function(event) { + return that._mouseDown(event); + }) + .bind("click."+this.widgetName, function(event) { + if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { + $.removeData(event.target, that.widgetName + ".preventClickEvent"); + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind("."+this.widgetName); + if ( this._mouseMoveDelegate ) { + $(document) + .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) + .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); + } + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + if( mouseHandled ) { return; } + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var that = this, + btnIsLeft = (event.which === 1), + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + that.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { + $.removeData(event.target, this.widgetName + ".preventClickEvent"); + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return that._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return that._mouseUp(event); + }; + $(document) + .bind("mousemove."+this.widgetName, this._mouseMoveDelegate) + .bind("mouseup."+this.widgetName, this._mouseUpDelegate); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { + return this._mouseUp(event); + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + $(document) + .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate) + .unbind("mouseup."+this.widgetName, this._mouseUpDelegate); + + if (this._mouseStarted) { + this._mouseStarted = false; + + if (event.target === this._mouseDownEvent.target) { + $.data(event.target, this.widgetName + ".preventClickEvent", true); + } + + this._mouseStop(event); + } + + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(/* event */) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(/* event */) {}, + _mouseDrag: function(/* event */) {}, + _mouseStop: function(/* event */) {}, + _mouseCapture: function(/* event */) { return true; } +}); + +})(jQuery); +(function( $, undefined ) { + +$.ui = $.ui || {}; + +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + round = Math.round, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[0]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ), + innerDiv = div.children()[0]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[0].clientWidth; + } + + div.remove(); + + return (cachedScrollbarWidth = w1 - w2); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[0].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[0].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[0] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: withinElement.offset() || { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: isWindow ? withinElement.width() : withinElement.outerWidth(), + height: isWindow ? withinElement.height() : withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[0].preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + // clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each(function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + // if the browser doesn't support fractions, then round for consistent results + if ( !$.support.offsetFractions ) { + position.left = round( position.left ); + position.top = round( position.top ); + } + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem : elem + }); + } + }); + + if ( options.using ) { + // adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // element is wider than within + if ( data.collisionWidth > outerWidth ) { + // element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; + position.left += overLeft - newOverRight; + // element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + // element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + // too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + // too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + // adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // element is taller than within + if ( data.collisionHeight > outerHeight ) { + // element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; + position.top += overTop - newOverBottom; + // element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + // element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + // too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + // too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + // adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } + else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; + if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) { + position.top += myOffset + atOffset + offset; + } + } + else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; + if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +// fraction support test +(function () { + var testElement, testElementParent, testElementStyle, offsetLeft, i, + body = document.getElementsByTagName( "body" )[ 0 ], + div = document.createElement( "div" ); + + //Create a "fake body" for testing based on method used in jQuery.support + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + background: "none" + }; + if ( body ) { + $.extend( testElementStyle, { + position: "absolute", + left: "-1000px", + top: "-1000px" + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || document.documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); + + div.style.cssText = "position: absolute; left: 10.7432222px;"; + + offsetLeft = $( div ).offset().left; + $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11; + + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); +})(); + +}( jQuery ) ); +(function( $, undefined ) { + +var uid = 0, + hideProps = {}, + showProps = {}; + +hideProps.height = hideProps.paddingTop = hideProps.paddingBottom = + hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide"; +showProps.height = showProps.paddingTop = showProps.paddingBottom = + showProps.borderTopWidth = showProps.borderBottomWidth = "show"; + +$.widget( "ui.accordion", { + version: "1.10.4", + options: { + active: 0, + animate: {}, + collapsible: false, + event: "click", + header: "> li > :first-child,> :not(li):even", + heightStyle: "auto", + icons: { + activeHeader: "ui-icon-triangle-1-s", + header: "ui-icon-triangle-1-e" + }, + + // callbacks + activate: null, + beforeActivate: null + }, + + _create: function() { + var options = this.options; + this.prevShow = this.prevHide = $(); + this.element.addClass( "ui-accordion ui-widget ui-helper-reset" ) + // ARIA + .attr( "role", "tablist" ); + + // don't allow collapsible: false and active: false / null + if ( !options.collapsible && (options.active === false || options.active == null) ) { + options.active = 0; + } + + this._processPanels(); + // handle negative values + if ( options.active < 0 ) { + options.active += this.headers.length; + } + this._refresh(); + }, + + _getCreateEventData: function() { + return { + header: this.active, + panel: !this.active.length ? $() : this.active.next(), + content: !this.active.length ? $() : this.active.next() + }; + }, + + _createIcons: function() { + var icons = this.options.icons; + if ( icons ) { + $( "<span>" ) + .addClass( "ui-accordion-header-icon ui-icon " + icons.header ) + .prependTo( this.headers ); + this.active.children( ".ui-accordion-header-icon" ) + .removeClass( icons.header ) + .addClass( icons.activeHeader ); + this.headers.addClass( "ui-accordion-icons" ); + } + }, + + _destroyIcons: function() { + this.headers + .removeClass( "ui-accordion-icons" ) + .children( ".ui-accordion-header-icon" ) + .remove(); + }, + + _destroy: function() { + var contents; + + // clean up main element + this.element + .removeClass( "ui-accordion ui-widget ui-helper-reset" ) + .removeAttr( "role" ); + + // clean up headers + this.headers + .removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) + .removeAttr( "role" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "aria-selected" ) + .removeAttr( "aria-controls" ) + .removeAttr( "tabIndex" ) + .each(function() { + if ( /^ui-accordion/.test( this.id ) ) { + this.removeAttribute( "id" ); + } + }); + this._destroyIcons(); + + // clean up content panels + contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-labelledby" ) + .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" ) + .each(function() { + if ( /^ui-accordion/.test( this.id ) ) { + this.removeAttribute( "id" ); + } + }); + if ( this.options.heightStyle !== "content" ) { + contents.css( "height", "" ); + } + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + if ( key === "event" ) { + if ( this.options.event ) { + this._off( this.headers, this.options.event ); + } + this._setupEvents( value ); + } + + this._super( key, value ); + + // setting collapsible: false while collapsed; open first panel + if ( key === "collapsible" && !value && this.options.active === false ) { + this._activate( 0 ); + } + + if ( key === "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + + // #5332 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + if ( key === "disabled" ) { + this.headers.add( this.headers.next() ) + .toggleClass( "ui-state-disabled", !!value ); + } + }, + + _keydown: function( event ) { + if ( event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._eventHandler( event ); + break; + case keyCode.HOME: + toFocus = this.headers[ 0 ]; + break; + case keyCode.END: + toFocus = this.headers[ length - 1 ]; + break; + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + toFocus.focus(); + event.preventDefault(); + } + }, + + _panelKeyDown : function( event ) { + if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { + $( event.currentTarget ).prev().focus(); + } + }, + + refresh: function() { + var options = this.options; + this._processPanels(); + + // was collapsed or no panel + if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) { + options.active = false; + this.active = $(); + // active false only when collapsible is true + } else if ( options.active === false ) { + this._activate( 0 ); + // was active, but active panel is gone + } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + // all remaining panel are disabled + if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) { + options.active = false; + this.active = $(); + // activate previous panel + } else { + this._activate( Math.max( 0, options.active - 1 ) ); + } + // was active, active panel still exists + } else { + // make sure active index is correct + options.active = this.headers.index( this.active ); + } + + this._destroyIcons(); + + this._refresh(); + }, + + _processPanels: function() { + this.headers = this.element.find( this.options.header ) + .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" ); + + this.headers.next() + .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ) + .filter(":not(.ui-accordion-content-active)") + .hide(); + }, + + _refresh: function() { + var maxHeight, + options = this.options, + heightStyle = options.heightStyle, + parent = this.element.parent(), + accordionId = this.accordionId = "ui-accordion-" + + (this.element.attr( "id" ) || ++uid); + + this.active = this._findActive( options.active ) + .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ) + .removeClass( "ui-corner-all" ); + this.active.next() + .addClass( "ui-accordion-content-active" ) + .show(); + + this.headers + .attr( "role", "tab" ) + .each(function( i ) { + var header = $( this ), + headerId = header.attr( "id" ), + panel = header.next(), + panelId = panel.attr( "id" ); + if ( !headerId ) { + headerId = accordionId + "-header-" + i; + header.attr( "id", headerId ); + } + if ( !panelId ) { + panelId = accordionId + "-panel-" + i; + panel.attr( "id", panelId ); + } + header.attr( "aria-controls", panelId ); + panel.attr( "aria-labelledby", headerId ); + }) + .next() + .attr( "role", "tabpanel" ); + + this.headers + .not( this.active ) + .attr({ + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + }) + .next() + .attr({ + "aria-hidden": "true" + }) + .hide(); + + // make sure at least one header is in the tab order + if ( !this.active.length ) { + this.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active.attr({ + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + }) + .next() + .attr({ + "aria-hidden": "false" + }); + } + + this._createIcons(); + + this._setupEvents( options.event ); + + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + this.element.siblings( ":visible" ).each(function() { + var elem = $( this ), + position = elem.css( "position" ); + + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + }); + + this.headers.each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.headers.next() + .each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.headers.next() + .each(function() { + maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); + }) + .height( maxHeight ); + } + }, + + _activate: function( index ) { + var active = this._findActive( index )[ 0 ]; + + // trying to activate the already active panel + if ( active === this.active[ 0 ] ) { + return; + } + + // trying to collapse, simulate a click on the currently active header + active = active || this.active[ 0 ]; + + this._eventHandler({ + target: active, + currentTarget: active, + preventDefault: $.noop + }); + }, + + _findActive: function( selector ) { + return typeof selector === "number" ? this.headers.eq( selector ) : $(); + }, + + _setupEvents: function( event ) { + var events = { + keydown: "_keydown" + }; + if ( event ) { + $.each( event.split(" "), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + }); + } + + this._off( this.headers.add( this.headers.next() ) ); + this._on( this.headers, events ); + this._on( this.headers.next(), { keydown: "_panelKeyDown" }); + this._hoverable( this.headers ); + this._focusable( this.headers ); + }, + + _eventHandler: function( event ) { + var options = this.options, + active = this.active, + clicked = $( event.currentTarget ), + clickedIsActive = clicked[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : clicked.next(), + toHide = active.next(), + eventData = { + oldHeader: active, + oldPanel: toHide, + newHeader: collapsing ? $() : clicked, + newPanel: toShow + }; + + event.preventDefault(); + + if ( + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.headers.index( clicked ); + + // when the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $() : clicked; + this._toggle( eventData ); + + // switch classes + // corner classes on the previously active header stay after the animation + active.removeClass( "ui-accordion-header-active ui-state-active" ); + if ( options.icons ) { + active.children( ".ui-accordion-header-icon" ) + .removeClass( options.icons.activeHeader ) + .addClass( options.icons.header ); + } + + if ( !clickedIsActive ) { + clicked + .removeClass( "ui-corner-all" ) + .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" ); + if ( options.icons ) { + clicked.children( ".ui-accordion-header-icon" ) + .removeClass( options.icons.header ) + .addClass( options.icons.activeHeader ); + } + + clicked + .next() + .addClass( "ui-accordion-content-active" ); + } + }, + + _toggle: function( data ) { + var toShow = data.newPanel, + toHide = this.prevShow.length ? this.prevShow : data.oldPanel; + + // handle activating a panel during the animation for another activation + this.prevShow.add( this.prevHide ).stop( true, true ); + this.prevShow = toShow; + this.prevHide = toHide; + + if ( this.options.animate ) { + this._animate( toShow, toHide, data ); + } else { + toHide.hide(); + toShow.show(); + this._toggleComplete( data ); + } + + toHide.attr({ + "aria-hidden": "true" + }); + toHide.prev().attr( "aria-selected", "false" ); + // if we're switching panels, remove the old header from the tab order + // if we're opening from collapsed state, remove the previous header from the tab order + // if we're collapsing, then keep the collapsing header in the tab order + if ( toShow.length && toHide.length ) { + toHide.prev().attr({ + "tabIndex": -1, + "aria-expanded": "false" + }); + } else if ( toShow.length ) { + this.headers.filter(function() { + return $( this ).attr( "tabIndex" ) === 0; + }) + .attr( "tabIndex", -1 ); + } + + toShow + .attr( "aria-hidden", "false" ) + .prev() + .attr({ + "aria-selected": "true", + tabIndex: 0, + "aria-expanded": "true" + }); + }, + + _animate: function( toShow, toHide, data ) { + var total, easing, duration, + that = this, + adjust = 0, + down = toShow.length && + ( !toHide.length || ( toShow.index() < toHide.index() ) ), + animate = this.options.animate || {}, + options = down && animate.down || animate, + complete = function() { + that._toggleComplete( data ); + }; + + if ( typeof options === "number" ) { + duration = options; + } + if ( typeof options === "string" ) { + easing = options; + } + // fall back from options to animation in case of partial down settings + easing = easing || options.easing || animate.easing; + duration = duration || options.duration || animate.duration; + + if ( !toHide.length ) { + return toShow.animate( showProps, duration, easing, complete ); + } + if ( !toShow.length ) { + return toHide.animate( hideProps, duration, easing, complete ); + } + + total = toShow.show().outerHeight(); + toHide.animate( hideProps, { + duration: duration, + easing: easing, + step: function( now, fx ) { + fx.now = Math.round( now ); + } + }); + toShow + .hide() + .animate( showProps, { + duration: duration, + easing: easing, + complete: complete, + step: function( now, fx ) { + fx.now = Math.round( now ); + if ( fx.prop !== "height" ) { + adjust += fx.now; + } else if ( that.options.heightStyle !== "content" ) { + fx.now = Math.round( total - toHide.outerHeight() - adjust ); + adjust = 0; + } + } + }); + }, + + _toggleComplete: function( data ) { + var toHide = data.oldPanel; + + toHide + .removeClass( "ui-accordion-content-active" ) + .prev() + .removeClass( "ui-corner-top" ) + .addClass( "ui-corner-all" ); + + // Work around for rendering bug in IE (#5421) + if ( toHide.length ) { + toHide.parent()[0].className = toHide.parent()[0].className; + } + this._trigger( "activate", null, data ); + } +}); + +})( jQuery ); +(function( $, undefined ) { + +$.widget( "ui.autocomplete", { + version: "1.10.4", + defaultElement: "<input>", + options: { + appendTo: null, + autoFocus: false, + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null, + + // callbacks + change: null, + close: null, + focus: null, + open: null, + response: null, + search: null, + select: null + }, + + requestIndex: 0, + pending: 0, + + _create: function() { + // Some browsers only repeat keydown events, not keypress events, + // so we use the suppressKeyPress flag to determine if we've already + // handled the keydown event. #7269 + // Unfortunately the code for & in keypress is the same as the up arrow, + // so we use the suppressKeyPressRepeat flag to avoid handling keypress + // events when we know the keydown event was used to modify the + // search term. #7799 + var suppressKeyPress, suppressKeyPressRepeat, suppressInput, + nodeName = this.element[0].nodeName.toLowerCase(), + isTextarea = nodeName === "textarea", + isInput = nodeName === "input"; + + this.isMultiLine = + // Textareas are always multi-line + isTextarea ? true : + // Inputs are always single-line, even if inside a contentEditable element + // IE also treats inputs as contentEditable + isInput ? false : + // All other element types are determined by whether or not they're contentEditable + this.element.prop( "isContentEditable" ); + + this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; + this.isNewMenu = true; + + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ); + + this._on( this.element, { + keydown: function( event ) { + if ( this.element.prop( "readOnly" ) ) { + suppressKeyPress = true; + suppressInput = true; + suppressKeyPressRepeat = true; + return; + } + + suppressKeyPress = false; + suppressInput = false; + suppressKeyPressRepeat = false; + var keyCode = $.ui.keyCode; + switch( event.keyCode ) { + case keyCode.PAGE_UP: + suppressKeyPress = true; + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + suppressKeyPress = true; + this._move( "nextPage", event ); + break; + case keyCode.UP: + suppressKeyPress = true; + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + suppressKeyPress = true; + this._keyEvent( "next", event ); + break; + case keyCode.ENTER: + case keyCode.NUMPAD_ENTER: + // when menu is open and has focus + if ( this.menu.active ) { + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + this.menu.select( event ); + } + break; + case keyCode.TAB: + if ( this.menu.active ) { + this.menu.select( event ); + } + break; + case keyCode.ESCAPE: + if ( this.menu.element.is( ":visible" ) ) { + this._value( this.term ); + this.close( event ); + // Different browsers have different default behavior for escape + // Single press can mean undo or clear + // Double press in IE means clear the whole form + event.preventDefault(); + } + break; + default: + suppressKeyPressRepeat = true; + // search timeout should be triggered before the input value is changed + this._searchTimeout( event ); + break; + } + }, + keypress: function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + event.preventDefault(); + } + return; + } + if ( suppressKeyPressRepeat ) { + return; + } + + // replicate some key handlers to allow them to repeat in Firefox and Opera + var keyCode = $.ui.keyCode; + switch( event.keyCode ) { + case keyCode.PAGE_UP: + this._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + this._move( "nextPage", event ); + break; + case keyCode.UP: + this._keyEvent( "previous", event ); + break; + case keyCode.DOWN: + this._keyEvent( "next", event ); + break; + } + }, + input: function( event ) { + if ( suppressInput ) { + suppressInput = false; + event.preventDefault(); + return; + } + this._searchTimeout( event ); + }, + focus: function() { + this.selectedItem = null; + this.previous = this._value(); + }, + blur: function( event ) { + if ( this.cancelBlur ) { + delete this.cancelBlur; + return; + } + + clearTimeout( this.searching ); + this.close( event ); + this._change( event ); + } + }); + + this._initSource(); + this.menu = $( "<ul>" ) + .addClass( "ui-autocomplete ui-front" ) + .appendTo( this._appendTo() ) + .menu({ + // disable ARIA support, the live region takes care of that + role: null + }) + .hide() + .data( "ui-menu" ); + + this._on( this.menu.element, { + mousedown: function( event ) { + // prevent moving focus out of the text field + event.preventDefault(); + + // IE doesn't prevent moving focus even with event.preventDefault() + // so we set a flag to know when we should ignore the blur event + this.cancelBlur = true; + this._delay(function() { + delete this.cancelBlur; + }); + + // clicking on the scrollbar causes focus to shift to the body + // but we can't detect a mouseup or a click immediately afterward + // so we have to track the next mousedown and close the menu if + // the user clicks somewhere outside of the autocomplete + var menuElement = this.menu.element[ 0 ]; + if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { + this._delay(function() { + var that = this; + this.document.one( "mousedown", function( event ) { + if ( event.target !== that.element[ 0 ] && + event.target !== menuElement && + !$.contains( menuElement, event.target ) ) { + that.close(); + } + }); + }); + } + }, + menufocus: function( event, ui ) { + // support: Firefox + // Prevent accidental activation of menu items in Firefox (#7024 #9118) + if ( this.isNewMenu ) { + this.isNewMenu = false; + if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { + this.menu.blur(); + + this.document.one( "mousemove", function() { + $( event.target ).trigger( event.originalEvent ); + }); + + return; + } + } + + var item = ui.item.data( "ui-autocomplete-item" ); + if ( false !== this._trigger( "focus", event, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { + this._value( item.value ); + } + } else { + // Normally the input is populated with the item's value as the + // menu is navigated, causing screen readers to notice a change and + // announce the item. Since the focus event was canceled, this doesn't + // happen, so we update the live region so that screen readers can + // still notice the change and announce it. + this.liveRegion.text( item.value ); + } + }, + menuselect: function( event, ui ) { + var item = ui.item.data( "ui-autocomplete-item" ), + previous = this.previous; + + // only trigger when focus was lost (click on menu) + if ( this.element[0] !== this.document[0].activeElement ) { + this.element.focus(); + this.previous = previous; + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + this._delay(function() { + this.previous = previous; + this.selectedItem = item; + }); + } + + if ( false !== this._trigger( "select", event, { item: item } ) ) { + this._value( item.value ); + } + // reset the term after the select event + // this allows custom select handling to work properly + this.term = this._value(); + + this.close( event ); + this.selectedItem = item; + } + }); + + this.liveRegion = $( "<span>", { + role: "status", + "aria-live": "polite" + }) + .addClass( "ui-helper-hidden-accessible" ) + .insertBefore( this.element ); + + // turning off autocomplete prevents the browser from remembering the + // value when navigating through history, so we re-enable autocomplete + // if the page is unloaded before the widget is destroyed. #7790 + this._on( this.window, { + beforeunload: function() { + this.element.removeAttr( "autocomplete" ); + } + }); + }, + + _destroy: function() { + clearTimeout( this.searching ); + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ); + this.menu.element.remove(); + this.liveRegion.remove(); + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( this._appendTo() ); + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _appendTo: function() { + var element = this.options.appendTo; + + if ( element ) { + element = element.jquery || element.nodeType ? + $( element ) : + this.document.find( element ).eq( 0 ); + } + + if ( !element ) { + element = this.element.closest( ".ui-front" ); + } + + if ( !element.length ) { + element = this.document[0].body; + } + + return element; + }, + + _initSource: function() { + var array, url, + that = this; + if ( $.isArray(this.options.source) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter( array, request.term ) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( that.xhr ) { + that.xhr.abort(); + } + that.xhr = $.ajax({ + url: url, + data: request, + dataType: "json", + success: function( data ) { + response( data ); + }, + error: function() { + response( [] ); + } + }); + }; + } else { + this.source = this.options.source; + } + }, + + _searchTimeout: function( event ) { + clearTimeout( this.searching ); + this.searching = this._delay(function() { + // only search if the value has changed + if ( this.term !== this._value() ) { + this.selectedItem = null; + this.search( null, event ); + } + }, this.options.delay ); + }, + + search: function( value, event ) { + value = value != null ? value : this._value(); + + // always save the actual value, not the one passed as an argument + this.term = this._value(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this.element.addClass( "ui-autocomplete-loading" ); + this.cancelSearch = false; + + this.source( { term: value }, this._response() ); + }, + + _response: function() { + var index = ++this.requestIndex; + + return $.proxy(function( content ) { + if ( index === this.requestIndex ) { + this.__response( content ); + } + + this.pending--; + if ( !this.pending ) { + this.element.removeClass( "ui-autocomplete-loading" ); + } + }, this ); + }, + + __response: function( content ) { + if ( content ) { + content = this._normalize( content ); + } + this._trigger( "response", null, { content: content } ); + if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { + this._suggest( content ); + this._trigger( "open" ); + } else { + // use ._close() instead of .close() so we don't cancel future searches + this._close(); + } + }, + + close: function( event ) { + this.cancelSearch = true; + this._close( event ); + }, + + _close: function( event ) { + if ( this.menu.element.is( ":visible" ) ) { + this.menu.element.hide(); + this.menu.blur(); + this.isNewMenu = true; + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this._value() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[0].label && items[0].value ) { + return items; + } + return $.map( items, function( item ) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend({ + label: item.label || item.value, + value: item.value || item.label + }, item ); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element.empty(); + this._renderMenu( ul, items ); + this.isNewMenu = true; + this.menu.refresh(); + + // size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend({ + of: this.element + }, this.options.position )); + + if ( this.options.autoFocus ) { + this.menu.next(); + } + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + // Firefox wraps long text (possibly a rounding bug) + // so we add 1px to avoid the wrapping (#7513) + ul.width( "" ).outerWidth() + 1, + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var that = this; + $.each( items, function( index, item ) { + that._renderItemData( ul, item ); + }); + }, + + _renderItemData: function( ul, item ) { + return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); + }, + + _renderItem: function( ul, item ) { + return $( "<li>" ) + .append( $( "<a>" ).text( item.label ) ) + .appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is( ":visible" ) ) { + this.search( null, event ); + return; + } + if ( this.menu.isFirstItem() && /^previous/.test( direction ) || + this.menu.isLastItem() && /^next/.test( direction ) ) { + this._value( this.term ); + this.menu.blur(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + }, + + _value: function() { + return this.valueMethod.apply( this.element, arguments ); + }, + + _keyEvent: function( keyEvent, event ) { + if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { + this._move( keyEvent, event ); + + // prevents moving cursor to beginning/end of the text field in some browsers + event.preventDefault(); + } + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); + }, + filter: function(array, term) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); + return $.grep( array, function(value) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + + +// live region extension, adding a `messages` option +// NOTE: This is an experimental API. We are still investigating +// a full solution for string manipulation and internationalization. +$.widget( "ui.autocomplete", $.ui.autocomplete, { + options: { + messages: { + noResults: "No search results.", + results: function( amount ) { + return amount + ( amount > 1 ? " results are" : " result is" ) + + " available, use up and down arrow keys to navigate."; + } + } + }, + + __response: function( content ) { + var message; + this._superApply( arguments ); + if ( this.options.disabled || this.cancelSearch ) { + return; + } + if ( content && content.length ) { + message = this.options.messages.results( content.length ); + } else { + message = this.options.messages.noResults; + } + this.liveRegion.text( message ); + } +}); + +}( jQuery )); +(function( $, undefined ) { + +var lastActive, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", + formResetHandler = function() { + var form = $( this ); + setTimeout(function() { + form.find( ":ui-button" ).button( "refresh" ); + }, 1 ); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + name = name.replace( /'/g, "\\'" ); + if ( form ) { + radios = $( form ).find( "[name='" + name + "']" ); + } else { + radios = $( "[name='" + name + "']", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + version: "1.10.4", + defaultElement: "<button>", + options: { + disabled: null, + text: true, + label: null, + icons: { + primary: null, + secondary: null + } + }, + _create: function() { + this.element.closest( "form" ) + .unbind( "reset" + this.eventNamespace ) + .bind( "reset" + this.eventNamespace, formResetHandler ); + + if ( typeof this.options.disabled !== "boolean" ) { + this.options.disabled = !!this.element.prop( "disabled" ); + } else { + this.element.prop( "disabled", this.options.disabled ); + } + + this._determineButtonType(); + this.hasTitle = !!this.buttonElement.attr( "title" ); + + var that = this, + options = this.options, + toggleButton = this.type === "checkbox" || this.type === "radio", + activeClass = !toggleButton ? "ui-state-active" : ""; + + if ( options.label === null ) { + options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html()); + } + + this._hoverable( this.buttonElement ); + + this.buttonElement + .addClass( baseClasses ) + .attr( "role", "button" ) + .bind( "mouseenter" + this.eventNamespace, function() { + if ( options.disabled ) { + return; + } + if ( this === lastActive ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "mouseleave" + this.eventNamespace, function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( activeClass ); + }) + .bind( "click" + this.eventNamespace, function( event ) { + if ( options.disabled ) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + }); + + // Can't use _focusable() because the element that receives focus + // and the element that gets the ui-state-focus class are different + this._on({ + focus: function() { + this.buttonElement.addClass( "ui-state-focus" ); + }, + blur: function() { + this.buttonElement.removeClass( "ui-state-focus" ); + } + }); + + if ( toggleButton ) { + this.element.bind( "change" + this.eventNamespace, function() { + that.refresh(); + }); + } + + if ( this.type === "checkbox" ) { + this.buttonElement.bind( "click" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + }); + } else if ( this.type === "radio" ) { + this.buttonElement.bind( "click" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + that.buttonElement.attr( "aria-pressed", "true" ); + + var radio = that.element[ 0 ]; + radioGroup( radio ) + .not( radio ) + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + }); + } else { + this.buttonElement + .bind( "mousedown" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + lastActive = this; + that.document.one( "mouseup", function() { + lastActive = null; + }); + }) + .bind( "mouseup" + this.eventNamespace, function() { + if ( options.disabled ) { + return false; + } + $( this ).removeClass( "ui-state-active" ); + }) + .bind( "keydown" + this.eventNamespace, function(event) { + if ( options.disabled ) { + return false; + } + if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) { + $( this ).addClass( "ui-state-active" ); + } + }) + // see #8559, we bind to blur here in case the button element loses + // focus between keydown and keyup, it would be left in an "active" state + .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() { + $( this ).removeClass( "ui-state-active" ); + }); + + if ( this.buttonElement.is("a") ) { + this.buttonElement.keyup(function(event) { + if ( event.keyCode === $.ui.keyCode.SPACE ) { + // TODO pass through original event correctly (just as 2nd argument doesn't work) + $( this ).click(); + } + }); + } + } + + // TODO: pull out $.Widget's handling for the disabled option into + // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can + // be overridden by individual plugins + this._setOption( "disabled", options.disabled ); + this._resetButton(); + }, + + _determineButtonType: function() { + var ancestor, labelSelector, checked; + + if ( this.element.is("[type=checkbox]") ) { + this.type = "checkbox"; + } else if ( this.element.is("[type=radio]") ) { + this.type = "radio"; + } else if ( this.element.is("input") ) { + this.type = "input"; + } else { + this.type = "button"; + } + + if ( this.type === "checkbox" || this.type === "radio" ) { + // we don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.element.parents().last(); + labelSelector = "label[for='" + this.element.attr("id") + "']"; + this.buttonElement = ancestor.find( labelSelector ); + if ( !this.buttonElement.length ) { + ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings(); + this.buttonElement = ancestor.filter( labelSelector ); + if ( !this.buttonElement.length ) { + this.buttonElement = ancestor.find( labelSelector ); + } + } + this.element.addClass( "ui-helper-hidden-accessible" ); + + checked = this.element.is( ":checked" ); + if ( checked ) { + this.buttonElement.addClass( "ui-state-active" ); + } + this.buttonElement.prop( "aria-pressed", checked ); + } else { + this.buttonElement = this.element; + } + }, + + widget: function() { + return this.buttonElement; + }, + + _destroy: function() { + this.element + .removeClass( "ui-helper-hidden-accessible" ); + this.buttonElement + .removeClass( baseClasses + " ui-state-active " + typeClasses ) + .removeAttr( "role" ) + .removeAttr( "aria-pressed" ) + .html( this.buttonElement.find(".ui-button-text").html() ); + + if ( !this.hasTitle ) { + this.buttonElement.removeAttr( "title" ); + } + }, + + _setOption: function( key, value ) { + this._super( key, value ); + if ( key === "disabled" ) { + this.element.prop( "disabled", !!value ); + if ( value ) { + this.buttonElement.removeClass( "ui-state-focus" ); + } + return; + } + this._resetButton(); + }, + + refresh: function() { + //See #8237 & #8828 + var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" ); + + if ( isDisabled !== this.options.disabled ) { + this._setOption( "disabled", isDisabled ); + } + if ( this.type === "radio" ) { + radioGroup( this.element[0] ).each(function() { + if ( $( this ).is( ":checked" ) ) { + $( this ).button( "widget" ) + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + $( this ).button( "widget" ) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + }); + } else if ( this.type === "checkbox" ) { + if ( this.element.is( ":checked" ) ) { + this.buttonElement + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + this.buttonElement + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + } + }, + + _resetButton: function() { + if ( this.type === "input" ) { + if ( this.options.label ) { + this.element.val( this.options.label ); + } + return; + } + var buttonElement = this.buttonElement.removeClass( typeClasses ), + buttonText = $( "<span></span>", this.document[0] ) + .addClass( "ui-button-text" ) + .html( this.options.label ) + .appendTo( buttonElement.empty() ) + .text(), + icons = this.options.icons, + multipleIcons = icons.primary && icons.secondary, + buttonClasses = []; + + if ( icons.primary || icons.secondary ) { + if ( this.options.text ) { + buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); + } + + if ( icons.primary ) { + buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" ); + } + + if ( icons.secondary ) { + buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" ); + } + + if ( !this.options.text ) { + buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); + + if ( !this.hasTitle ) { + buttonElement.attr( "title", $.trim( buttonText ) ); + } + } + } else { + buttonClasses.push( "ui-button-text-only" ); + } + buttonElement.addClass( buttonClasses.join( " " ) ); + } +}); + +$.widget( "ui.buttonset", { + version: "1.10.4", + options: { + items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)" + }, + + _create: function() { + this.element.addClass( "ui-buttonset" ); + }, + + _init: function() { + this.refresh(); + }, + + _setOption: function( key, value ) { + if ( key === "disabled" ) { + this.buttons.button( "option", key, value ); + } + + this._super( key, value ); + }, + + refresh: function() { + var rtl = this.element.css( "direction" ) === "rtl"; + + this.buttons = this.element.find( this.options.items ) + .filter( ":ui-button" ) + .button( "refresh" ) + .end() + .not( ":ui-button" ) + .button() + .end() + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) + .filter( ":first" ) + .addClass( rtl ? "ui-corner-right" : "ui-corner-left" ) + .end() + .filter( ":last" ) + .addClass( rtl ? "ui-corner-left" : "ui-corner-right" ) + .end() + .end(); + }, + + _destroy: function() { + this.element.removeClass( "ui-buttonset" ); + this.buttons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-left ui-corner-right" ) + .end() + .button( "destroy" ); + } +}); + +}( jQuery ) ); +(function( $, undefined ) { + +$.extend($.ui, { datepicker: { version: "1.10.4" } }); + +var PROP_NAME = "datepicker", + instActive; + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division + this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class + this._appendClass = "ui-datepicker-append"; // The name of the append marker class + this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class + this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class + this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class + this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class + this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class + this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[""] = { // Default regional settings + closeText: "Zamknij", // Display text for close link + prevText: "<<", // Display text for previous month link + nextText: ">>", // Display text for next month link + currentText: "Dziś", // Display text for current month link + monthNames: ["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec", + "Lipiec","Sierpień","Wrzesień","Pazdziernik","Listopad","Grudzień"], // Names of months for drop-down and formatting + monthNamesShort: ["Sty", "Lut", "Marz", "Kwie", "Maj", "Czer", "Lip", "Sier", "Wrz", "Paź", "List", "Gru"], // For formatting + dayNames: ["Niedziela", "Poniedziałek", "Wtorek", "Sroda", "Czwartek", "Piątek", "Sobota"], // For formatting + dayNamesShort: ["Nie", "Pon", "Wt", "Śro", "Czw", "Pią", "Sob"], // For formatting + dayNamesMin: ["Ni","Pn","Wt","Sr","Cz","Pt","So"], // Column headings for days starting at Sunday + weekHeader: "Ty", // Column header for week of the year + dateFormat: "yy-mm-dd", // See format options on parseDate + firstDay: 1, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: "" // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: "focus", // "focus" for popup on focus, + // "button" for trigger button, or "both" for either + showAnim: "fadeIn", // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: "", // Display text following the input box, e.g. showing the format + buttonText: "...", // Text for trigger button + buttonImage: "", // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: "c-10:c+10", // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: "+10", // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with "+" for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: "fast", // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "", + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: "", // Selector for an alternate field to store selected dates into + altFormat: "", // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: true, // True to size the input for the date format, false to leave as is + disabled: false // The initial disabled state + }; + $.extend(this._defaults, this.regional[""]); + this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: "hasDatepicker", + + //Keep track of the maximum number of rows displayed (see #7043) + maxRows: 4, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + * @param settings object - the new settings to use as defaults (anonymous object) + * @return the manager object + */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + * @param target element - the target input field or division or span + * @param settings object - the new settings to use for this date picker instance (anonymous) + */ + _attachDatepicker: function(target, settings) { + var nodeName, inline, inst; + nodeName = target.nodeName.toLowerCase(); + inline = (nodeName === "div" || nodeName === "span"); + if (!target.id) { + this.uuid += 1; + target.id = "dp" + this.uuid; + } + inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}); + if (nodeName === "input") { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) { + return; + } + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var showOn, buttonText, buttonImage, + appendText = this._get(inst, "appendText"), + isRTL = this._get(inst, "isRTL"); + + if (inst.append) { + inst.append.remove(); + } + if (appendText) { + inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>"); + input[isRTL ? "before" : "after"](inst.append); + } + + input.unbind("focus", this._showDatepicker); + + if (inst.trigger) { + inst.trigger.remove(); + } + + showOn = this._get(inst, "showOn"); + if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + } + if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked + buttonText = this._get(inst, "buttonText"); + buttonImage = this._get(inst, "buttonImage"); + inst.trigger = $(this._get(inst, "buttonImageOnly") ? + $("<img/>").addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $("<button type='button'></button>").addClass(this._triggerClass). + html(!buttonImage ? buttonText : $("<img/>").attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? "before" : "after"](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) { + $.datepicker._hideDatepicker(); + } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) { + $.datepicker._hideDatepicker(); + $.datepicker._showDatepicker(input[0]); + } else { + $.datepicker._showDatepicker(input[0]); + } + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, "autoSize") && !inst.inline) { + var findMax, max, maxI, i, + date = new Date(2009, 12 - 1, 20), // Ensure double digits + dateFormat = this._get(inst, "dateFormat"); + + if (dateFormat.match(/[DM]/)) { + findMax = function(names) { + max = 0; + maxI = 0; + for (i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + "monthNames" : "monthNamesShort")))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + "dayNames" : "dayNamesShort"))) + 20 - date.getDay()); + } + inst.input.attr("size", this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) { + return; + } + divSpan.addClass(this.markerClassName).append(inst.dpDiv); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + //If disabled option is true, disable the datepicker before showing it (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements + // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height + inst.dpDiv.css( "display", "block" ); + }, + + /* Pop-up the date picker in a "dialog" box. + * @param input element - ignored + * @param date string or Date - the initial date to display + * @param onSelect function - the function to call when a date is selected + * @param settings object - update the dialog date picker instance's settings (anonymous object) + * @param pos int[2] - coordinates for the dialog's position within the screen or + * event - with x/y coordinates or + * leave empty for default (screen centre) + * @return the manager object + */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var id, browserWidth, browserHeight, scrollX, scrollY, + inst = this._dialogInst; // internal instance + + if (!inst) { + this.uuid += 1; + id = "dp" + this.uuid; + this._dialogInput = $("<input type='text' id='" + id + + "' style='position: absolute; top: -100px; width: 0px;'/>"); + this._dialogInput.keydown(this._doKeyDown); + $("body").append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor === Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + browserWidth = document.documentElement.clientWidth; + browserHeight = document.documentElement.clientHeight; + scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px"); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) { + $.blockUI(this.dpDiv); + } + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + * @param target element - the target input field or division or span + */ + _destroyDatepicker: function(target) { + var nodeName, + $target = $(target), + inst = $.data(target, PROP_NAME); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName === "input") { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind("focus", this._showDatepicker). + unbind("keydown", this._doKeyDown). + unbind("keypress", this._doKeyPress). + unbind("keyup", this._doKeyUp); + } else if (nodeName === "div" || nodeName === "span") { + $target.removeClass(this.markerClassName).empty(); + } + }, + + /* Enable the date picker to a jQuery selection. + * @param target element - the target input field or division or span + */ + _enableDatepicker: function(target) { + var nodeName, inline, + $target = $(target), + inst = $.data(target, PROP_NAME); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + if (nodeName === "input") { + target.disabled = false; + inst.trigger.filter("button"). + each(function() { this.disabled = false; }).end(). + filter("img").css({opacity: "1.0", cursor: ""}); + } else if (nodeName === "div" || nodeName === "span") { + inline = $target.children("." + this._inlineClass); + inline.children().removeClass("ui-state-disabled"); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + prop("disabled", false); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value === target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + * @param target element - the target input field or division or span + */ + _disableDatepicker: function(target) { + var nodeName, inline, + $target = $(target), + inst = $.data(target, PROP_NAME); + + if (!$target.hasClass(this.markerClassName)) { + return; + } + + nodeName = target.nodeName.toLowerCase(); + if (nodeName === "input") { + target.disabled = true; + inst.trigger.filter("button"). + each(function() { this.disabled = true; }).end(). + filter("img").css({opacity: "0.5", cursor: "default"}); + } else if (nodeName === "div" || nodeName === "span") { + inline = $target.children("." + this._inlineClass); + inline.children().addClass("ui-state-disabled"); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + prop("disabled", true); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value === target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + * @param target element - the target input field or division or span + * @return boolean - true if disabled, false if enabled + */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] === target) { + return true; + } + } + return false; + }, + + /* Retrieve the instance data for the target control. + * @param target element - the target input field or division or span + * @return object - the associated instance data + * @throws error if a jQuery problem getting data + */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw "Missing instance data for this datepicker"; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + * @param target element - the target input field or division or span + * @param name object - the new settings to update or + * string - the name of the setting to change or retrieve, + * when retrieving also "all" for all instance settings or + * "defaults" for all global defaults + * @param value any - the new value for the setting + * (omit if above is an object or to retrieve a value) + */ + _optionDatepicker: function(target, name, value) { + var settings, date, minDate, maxDate, + inst = this._getInst(target); + + if (arguments.length === 2 && typeof name === "string") { + return (name === "defaults" ? $.extend({}, $.datepicker._defaults) : + (inst ? (name === "all" ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + + settings = name || {}; + if (typeof name === "string") { + settings = {}; + settings[name] = value; + } + + if (inst) { + if (this._curInst === inst) { + this._hideDatepicker(); + } + + date = this._getDateDatepicker(target, true); + minDate = this._getMinMaxDate(inst, "min"); + maxDate = this._getMinMaxDate(inst, "max"); + extendRemove(inst.settings, settings); + // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided + if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) { + inst.settings.minDate = this._formatDate(inst, minDate); + } + if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) { + inst.settings.maxDate = this._formatDate(inst, maxDate); + } + if ( "disabled" in settings ) { + if ( settings.disabled ) { + this._disableDatepicker(target); + } else { + this._enableDatepicker(target); + } + } + this._attachments($(target), inst); + this._autoSize(inst); + this._setDate(inst, date); + this._updateAlternate(inst); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + * @param target element - the target input field or division or span + */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + * @param target element - the target input field or division or span + * @param date Date - the new date + */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + * @param target element - the target input field or division or span + * @param noDefault boolean - true if no default date is to be used + * @return Date - the current date + */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) { + this._setDateFromField(inst, noDefault); + } + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var onSelect, dateStr, sel, + inst = $.datepicker._getInst(event.target), + handled = true, + isRTL = inst.dpDiv.is(".ui-datepicker-rtl"); + + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) { + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." + + $.datepicker._currentClass + ")", inst.dpDiv); + if (sel[0]) { + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + } + + onSelect = $.datepicker._get(inst, "onSelect"); + if (onSelect) { + dateStr = $.datepicker._formatDate(inst); + + // trigger custom callback + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); + } else { + $.datepicker._hideDatepicker(); + } + + return false; // don't submit the form + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, "stepBigMonths") : + -$.datepicker._get(inst, "stepMonths")), "M"); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, "stepBigMonths") : + +$.datepicker._get(inst, "stepMonths")), "M"); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) { + $.datepicker._clearDate(event.target); + } + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) { + $.datepicker._gotoToday(event.target); + } + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D"); + } + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) { + $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, "stepBigMonths") : + -$.datepicker._get(inst, "stepMonths")), "M"); + } + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, -7, "D"); + } + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D"); + } + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) { + $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, "stepBigMonths") : + +$.datepicker._get(inst, "stepMonths")), "M"); + } + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) { + $.datepicker._adjustDate(event.target, +7, "D"); + } + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + } else { + handled = false; + } + + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var chars, chr, + inst = $.datepicker._getInst(event.target); + + if ($.datepicker._get(inst, "constrainInput")) { + chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")); + chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var date, + inst = $.datepicker._getInst(event.target); + + if (inst.input.val() !== inst.lastVal) { + try { + date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (err) { + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + * If false returned from beforeShow event handler do not show. + * @param input element - the input field attached to the date picker or + * event - if triggered by focus + */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger + input = $("input", input.parentNode)[0]; + } + + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here + return; + } + + var inst, beforeShow, beforeShowSettings, isFixed, + offset, showAnim, duration; + + inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst !== inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + if ( inst && $.datepicker._datepickerShowing ) { + $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] ); + } + } + + beforeShow = $.datepicker._get(inst, "beforeShow"); + beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; + if(beforeShowSettings === false){ + return; + } + extendRemove(inst.settings, beforeShowSettings); + + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + + if ($.datepicker._inDialog) { // hide cursor + input.value = ""; + } + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + + isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css("position") === "fixed"; + return !isFixed; + }); + + offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + "static" : (isFixed ? "fixed" : "absolute")), display: "none", + left: offset.left + "px", top: offset.top + "px"}); + + if (!inst.inline) { + showAnim = $.datepicker._get(inst, "showAnim"); + duration = $.datepicker._get(inst, "duration"); + inst.dpDiv.zIndex($(input).zIndex()+1); + $.datepicker._datepickerShowing = true; + + if ( $.effects && $.effects.effect[ showAnim ] ) { + inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration); + } else { + inst.dpDiv[showAnim || "show"](showAnim ? duration : null); + } + + if ( $.datepicker._shouldFocusInput( inst ) ) { + inst.input.focus(); + } + + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) + instActive = inst; // for delegate hover events + inst.dpDiv.empty().append(this._generateHTML(inst)); + this._attachHandlers(inst); + inst.dpDiv.find("." + this._dayOverClass + " a").mouseover(); + + var origyearshtml, + numMonths = this._getNumberOfMonths(inst), + cols = numMonths[1], + width = 17; + + inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""); + if (cols > 1) { + inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em"); + } + inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") + + "Class"]("ui-datepicker-multi"); + inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") + + "Class"]("ui-datepicker-rtl"); + + if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { + inst.input.focus(); + } + + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml && inst.yearshtml ){ + inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + // Support: IE and jQuery <1.9 + _shouldFocusInput: function( inst ) { + return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(), + dpHeight = inst.dpDiv.outerHeight(), + inputWidth = inst.input ? inst.input.outerWidth() : 0, + inputHeight = inst.input ? inst.input.outerHeight() : 0, + viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()), + viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop()); + + offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var position, + inst = this._getInst(obj), + isRTL = this._get(inst, "isRTL"); + + while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? "previousSibling" : "nextSibling"]; + } + + position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + * @param input element - the input field attached to the date picker + */ + _hideDatepicker: function(input) { + var showAnim, duration, postProcess, onClose, + inst = this._curInst; + + if (!inst || (input && inst !== $.data(input, PROP_NAME))) { + return; + } + + if (this._datepickerShowing) { + showAnim = this._get(inst, "showAnim"); + duration = this._get(inst, "duration"); + postProcess = function() { + $.datepicker._tidyDialog(inst); + }; + + // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed + if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess); + } else { + inst.dpDiv[(showAnim === "slideDown" ? "slideUp" : + (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess); + } + + if (!showAnim) { + postProcess(); + } + this._datepickerShowing = false; + + onClose = this._get(inst, "onClose"); + if (onClose) { + onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]); + } + + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" }); + if ($.blockUI) { + $.unblockUI(); + $("body").append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar"); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) { + return; + } + + var $target = $(event.target), + inst = $.datepicker._getInst($target[0]); + + if ( ( ( $target[0].id !== $.datepicker._mainDivId && + $target.parents("#" + $.datepicker._mainDivId).length === 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.closest("." + $.datepicker._triggerClass).length && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) || + ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) { + $.datepicker._hideDatepicker(); + } + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id), + inst = this._getInst(target[0]); + + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var date, + target = $(id), + inst = this._getInst(target[0]); + + if (this._get(inst, "gotoCurrent") && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } else { + date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id), + inst = this._getInst(target[0]); + + inst["selected" + (period === "M" ? "Month" : "Year")] = + inst["draw" + (period === "M" ? "Month" : "Year")] = + parseInt(select.options[select.selectedIndex].value,10); + + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var inst, + target = $(id); + + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + + inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $("a", td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + this._selectDate(target, ""); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var onSelect, + target = $(id), + inst = this._getInst(target[0]); + + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) { + inst.input.val(dateStr); + } + this._updateAlternate(inst); + + onSelect = this._get(inst, "onSelect"); + if (onSelect) { + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + } else if (inst.input) { + inst.input.trigger("change"); // fire the change event + } + + if (inst.inline){ + this._updateDatepicker(inst); + } else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) !== "object") { + inst.input.focus(); // restore focus + } + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altFormat, date, dateStr, + altField = this._get(inst, "altField"); + + if (altField) { // update alternate field too + altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat"); + date = this._getDate(inst); + dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + * @param date Date - the date to customise + * @return [boolean, string] - is this date selectable?, what is its CSS class? + */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), ""]; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + * @param date Date - the date to get the week for + * @return number - the number of the week within the year that contains this date + */ + iso8601Week: function(date) { + var time, + checkDate = new Date(date.getTime()); + + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + + time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + * See formatDate below for the possible formats. + * + * @param format string - the expected format of the date + * @param value string - the date in the above format + * @param settings Object - attributes include: + * shortYearCutoff number - the cutoff year for determining the century (optional) + * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + * dayNames string[7] - names of the days from Sunday (optional) + * monthNamesShort string[12] - abbreviated names of the months (optional) + * monthNames string[12] - names of the months (optional) + * @return Date - the extracted date value or null if value is blank + */ + parseDate: function (format, value, settings) { + if (format == null || value == null) { + throw "Invalid arguments"; + } + + value = (typeof value === "object" ? value.toString() : value + ""); + if (value === "") { + return null; + } + + var iFormat, dim, extra, + iValue = 0, + shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff, + shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp : + new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)), + dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, + dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, + monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, + monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, + year = -1, + month = -1, + day = -1, + doy = -1, + literal = false, + date, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }, + // Extract a number from the string value + getNumber = function(match) { + var isDoubled = lookAhead(match), + size = (match === "@" ? 14 : (match === "!" ? 20 : + (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))), + digits = new RegExp("^\\d{1," + size + "}"), + num = value.substring(iValue).match(digits); + if (!num) { + throw "Missing number at position " + iValue; + } + iValue += num[0].length; + return parseInt(num[0], 10); + }, + // Extract a name from the string value and convert to an index + getName = function(match, shortNames, longNames) { + var index = -1, + names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { + return [ [k, v] ]; + }).sort(function (a, b) { + return -(a[1].length - b[1].length); + }); + + $.each(names, function (i, pair) { + var name = pair[1]; + if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) { + index = pair[0]; + iValue += name.length; + return false; + } + }); + if (index !== -1) { + return index + 1; + } else { + throw "Unknown name at position " + iValue; + } + }, + // Confirm that a literal character matches the string value + checkLiteral = function() { + if (value.charAt(iValue) !== format.charAt(iFormat)) { + throw "Unexpected literal at position " + iValue; + } + iValue++; + }; + + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + checkLiteral(); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + day = getNumber("d"); + break; + case "D": + getName("D", dayNamesShort, dayNames); + break; + case "o": + doy = getNumber("o"); + break; + case "m": + month = getNumber("m"); + break; + case "M": + month = getName("M", monthNamesShort, monthNames); + break; + case "y": + year = getNumber("y"); + break; + case "@": + date = new Date(getNumber("@")); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "!": + date = new Date((getNumber("!") - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")){ + checkLiteral(); + } else { + literal = true; + } + break; + default: + checkLiteral(); + } + } + } + + if (iValue < value.length){ + extra = value.substr(iValue); + if (!/^\s+/.test(extra)) { + throw "Extra/unparsed characters found in date: " + extra; + } + } + + if (year === -1) { + year = new Date().getFullYear(); + } else if (year < 100) { + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + } + + if (doy > -1) { + month = 1; + day = doy; + do { + dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) { + break; + } + month++; + day -= dim; + } while (true); + } + + date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) { + throw "Invalid date"; // E.g. 31/02/00 + } + return date; + }, + + /* Standard date formats. */ + ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) + COOKIE: "D, dd M yy", + ISO_8601: "yy-mm-dd", + RFC_822: "D, d M y", + RFC_850: "DD, dd-M-y", + RFC_1036: "D, d M y", + RFC_1123: "D, d M yy", + RFC_2822: "D, d M yy", + RSS: "D, d M y", // RFC 822 + TICKS: "!", + TIMESTAMP: "@", + W3C: "yy-mm-dd", // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + * The format can be combinations of the following: + * d - day of month (no leading zero) + * dd - day of month (two digit) + * o - day of year (no leading zeros) + * oo - day of year (three digit) + * D - day name short + * DD - day name long + * m - month of year (no leading zero) + * mm - month of year (two digit) + * M - month name short + * MM - month name long + * y - year (two digit) + * yy - year (four digit) + * @ - Unix timestamp (ms since 01/01/1970) + * ! - Windows ticks (100ns since 01/01/0001) + * "..." - literal text + * '' - single quote + * + * @param format string - the desired format of the date + * @param date Date - the date value to format + * @param settings Object - attributes include: + * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + * dayNames string[7] - names of the days from Sunday (optional) + * monthNamesShort string[12] - abbreviated names of the months (optional) + * monthNames string[12] - names of the months (optional) + * @return string - the date in the above format + */ + formatDate: function (format, date, settings) { + if (!date) { + return ""; + } + + var iFormat, + dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort, + dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames, + monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort, + monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }, + // Format a number, with leading zero if necessary + formatNumber = function(match, value, len) { + var num = "" + value; + if (lookAhead(match)) { + while (num.length < len) { + num = "0" + num; + } + } + return num; + }, + // Format a name, short or long as requested + formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }, + output = "", + literal = false; + + if (date) { + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + output += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + output += formatNumber("d", date.getDate(), 2); + break; + case "D": + output += formatName("D", date.getDay(), dayNamesShort, dayNames); + break; + case "o": + output += formatNumber("o", + Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); + break; + case "m": + output += formatNumber("m", date.getMonth() + 1, 2); + break; + case "M": + output += formatName("M", date.getMonth(), monthNamesShort, monthNames); + break; + case "y": + output += (lookAhead("y") ? date.getFullYear() : + (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100); + break; + case "@": + output += date.getTime(); + break; + case "!": + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) { + output += "'"; + } else { + literal = true; + } + break; + default: + output += format.charAt(iFormat); + } + } + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var iFormat, + chars = "", + literal = false, + // Check whether a format character is doubled + lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); + if (matches) { + iFormat++; + } + return matches; + }; + + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + chars += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case "d": case "m": case "y": case "@": + chars += "0123456789"; + break; + case "D": case "M": + return null; // Accept anything + case "'": + if (lookAhead("'")) { + chars += "'"; + } else { + literal = true; + } + break; + default: + chars += format.charAt(iFormat); + } + } + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() === inst.lastVal) { + return; + } + + var dateFormat = this._get(inst, "dateFormat"), + dates = inst.lastVal = inst.input ? inst.input.val() : null, + defaultDate = this._getDefaultDate(inst), + date = defaultDate, + settings = this._getFormatConfig(inst); + + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + dates = (noDefault ? "" : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, "defaultDate"), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }, + offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(), + year = date.getFullYear(), + month = date.getMonth(), + day = date.getDate(), + pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, + matches = pattern.exec(offset); + + while (matches) { + switch (matches[2] || "d") { + case "d" : case "D" : + day += parseInt(matches[1],10); break; + case "w" : case "W" : + day += parseInt(matches[1],10) * 7; break; + case "m" : case "M" : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case "y": case "Y" : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }, + newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) : + (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + + newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + * Hours may be non-zero on daylight saving cut-over: + * > 12 when midnight changeover, but then cannot generate + * midnight datetime, so jump to 1AM, otherwise reset. + * @param date (Date) the date to check + * @return (Date) the corrected date + */ + _daylightSavingAdjust: function(date) { + if (!date) { + return null; + } + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date, + origMonth = inst.selectedMonth, + origYear = inst.selectedYear, + newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) { + this._notifyChange(inst); + } + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? "" : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Attach the onxxx handlers. These are declared statically so + * they work with static code transformers like Caja. + */ + _attachHandlers: function(inst) { + var stepMonths = this._get(inst, "stepMonths"), + id = "#" + inst.id.replace( /\\\\/g, "\\" ); + inst.dpDiv.find("[data-handler]").map(function () { + var handler = { + prev: function () { + $.datepicker._adjustDate(id, -stepMonths, "M"); + }, + next: function () { + $.datepicker._adjustDate(id, +stepMonths, "M"); + }, + hide: function () { + $.datepicker._hideDatepicker(); + }, + today: function () { + $.datepicker._gotoToday(id); + }, + selectDay: function () { + $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this); + return false; + }, + selectMonth: function () { + $.datepicker._selectMonthYear(id, this, "M"); + return false; + }, + selectYear: function () { + $.datepicker._selectMonthYear(id, this, "Y"); + return false; + } + }; + $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]); + }); + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, + controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, + monthNames, monthNamesShort, beforeShowDay, showOtherMonths, + selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, + cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, + printDate, dRow, tbody, daySettings, otherMonth, unselectable, + tempDate = new Date(), + today = this._daylightSavingAdjust( + new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time + isRTL = this._get(inst, "isRTL"), + showButtonPanel = this._get(inst, "showButtonPanel"), + hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"), + navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"), + numMonths = this._getNumberOfMonths(inst), + showCurrentAtPos = this._get(inst, "showCurrentAtPos"), + stepMonths = this._get(inst, "stepMonths"), + isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1), + currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))), + minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + drawMonth = inst.drawMonth - showCurrentAtPos, + drawYear = inst.drawYear; + + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + + prevText = this._get(inst, "prevText"); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + + prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" + + " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" : + (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>")); + + nextText = this._get(inst, "nextText"); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + + next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" + + " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" : + (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>")); + + currentText = this._get(inst, "currentText"); + gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + + controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + + this._get(inst, "closeText") + "</button>" : ""); + + buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") + + (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" + + ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : ""; + + firstDay = parseInt(this._get(inst, "firstDay"),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + + showWeek = this._get(inst, "showWeek"); + dayNames = this._get(inst, "dayNames"); + dayNamesMin = this._get(inst, "dayNamesMin"); + monthNames = this._get(inst, "monthNames"); + monthNamesShort = this._get(inst, "monthNamesShort"); + beforeShowDay = this._get(inst, "beforeShowDay"); + showOtherMonths = this._get(inst, "showOtherMonths"); + selectOtherMonths = this._get(inst, "selectOtherMonths"); + defaultDate = this._getDefaultDate(inst); + html = ""; + dow; + for (row = 0; row < numMonths[0]; row++) { + group = ""; + this.maxRows = 4; + for (col = 0; col < numMonths[1]; col++) { + selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + cornerClass = " ui-corner-all"; + calender = ""; + if (isMultiMonth) { + calender += "<div class='ui-datepicker-group"; + if (numMonths[1] > 1) { + switch (col) { + case 0: calender += " ui-datepicker-group-first"; + cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break; + case numMonths[1]-1: calender += " ui-datepicker-group-last"; + cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break; + default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break; + } + } + calender += "'>"; + } + calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" + + (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") + + (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + "</div><table class='ui-datepicker-calendar'><thead>" + + "<tr>"; + thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : ""); + for (dow = 0; dow < 7; dow++) { // days of the week + day = (dow + firstDay) % 7; + thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" + + "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>"; + } + calender += thead + "</tr></thead><tbody>"; + daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) { + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + } + leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate + numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043) + this.maxRows = numRows; + printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += "<tr>"; + tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" + + this._get(inst, "calculateWeek")(printDate) + "</td>"); + for (dow = 0; dow < 7; dow++) { // create date picker days + daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]); + otherMonth = (printDate.getMonth() !== drawMonth); + unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += "<td class='" + + ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends + (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months + ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key + (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ? + // or defaultDate is current printedDate and defaultDate is selectedDate + " " + this._dayOverClass : "") + // highlight selected day + (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days + (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates + (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day + (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different) + ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title + (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions + (otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months + (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" + + (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") + + (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day + (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months + "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + "</tr>"; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += "</tbody></table>" + (isMultiMonth ? "</div>" + + ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : ""); + group += calender; + } + html += group; + } + html += buttonPanel; + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + + var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, + changeMonth = this._get(inst, "changeMonth"), + changeYear = this._get(inst, "changeYear"), + showMonthAfterYear = this._get(inst, "showMonthAfterYear"), + html = "<div class='ui-datepicker-title'>", + monthHtml = ""; + + // month selection + if (secondary || !changeMonth) { + monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>"; + } else { + inMinYear = (minDate && minDate.getFullYear() === drawYear); + inMaxYear = (maxDate && maxDate.getFullYear() === drawYear); + monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>"; + for ( month = 0; month < 12; month++) { + if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) { + monthHtml += "<option value='" + month + "'" + + (month === drawMonth ? " selected='selected'" : "") + + ">" + monthNamesShort[month] + "</option>"; + } + } + monthHtml += "</select>"; + } + + if (!showMonthAfterYear) { + html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : ""); + } + + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ""; + if (secondary || !changeYear) { + html += "<span class='ui-datepicker-year'>" + drawYear + "</span>"; + } else { + // determine range of years to display + years = this._get(inst, "yearRange").split(":"); + thisYear = new Date().getFullYear(); + determineYear = function(value) { + var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + year = determineYear(years[0]); + endYear = Math.max(year, determineYear(years[1] || "")); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; + for (; year <= endYear; year++) { + inst.yearshtml += "<option value='" + year + "'" + + (year === drawYear ? " selected='selected'" : "") + + ">" + year + "</option>"; + } + inst.yearshtml += "</select>"; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + + html += this._get(inst, "yearSuffix"); + if (showMonthAfterYear) { + html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml; + } + html += "</div>"; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period === "Y" ? offset : 0), + month = inst.drawMonth + (period === "M" ? offset : 0), + day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0), + date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); + + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period === "M" || period === "Y") { + this._notifyChange(inst); + } + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + newDate = (minDate && date < minDate ? minDate : date); + return (maxDate && newDate > maxDate ? maxDate : newDate); + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, "onChangeMonthYear"); + if (onChange) { + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + } + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, "numberOfMonths"); + return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + "Date"), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst), + date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + + if (offset < 0) { + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + } + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var yearSplit, currentYear, + minDate = this._getMinMaxDate(inst, "min"), + maxDate = this._getMinMaxDate(inst, "max"), + minYear = null, + maxYear = null, + years = this._get(inst, "yearRange"); + if (years){ + yearSplit = years.split(":"); + currentYear = new Date().getFullYear(); + minYear = parseInt(yearSplit[0], 10); + maxYear = parseInt(yearSplit[1], 10); + if ( yearSplit[0].match(/[+\-].*/) ) { + minYear += currentYear; + } + if ( yearSplit[1].match(/[+\-].*/) ) { + maxYear += currentYear; + } + } + + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime()) && + (!minYear || date.getFullYear() >= minYear) && + (!maxYear || date.getFullYear() <= maxYear)); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, "shortYearCutoff"); + shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"), + monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day === "object" ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function bindHover(dpDiv) { + var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; + return dpDiv.delegate(selector, "mouseout", function() { + $(this).removeClass("ui-state-hover"); + if (this.className.indexOf("ui-datepicker-prev") !== -1) { + $(this).removeClass("ui-datepicker-prev-hover"); + } + if (this.className.indexOf("ui-datepicker-next") !== -1) { + $(this).removeClass("ui-datepicker-next-hover"); + } + }) + .delegate(selector, "mouseover", function(){ + if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) { + $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); + $(this).addClass("ui-state-hover"); + if (this.className.indexOf("ui-datepicker-prev") !== -1) { + $(this).addClass("ui-datepicker-prev-hover"); + } + if (this.className.indexOf("ui-datepicker-next") !== -1) { + $(this).addClass("ui-datepicker-next-hover"); + } + } + }); +} + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) { + if (props[name] == null) { + target[name] = props[name]; + } + } + return target; +} + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick); + $.datepicker.initialized = true; + } + + /* Append datepicker main container to body if not exist. */ + if ($("#"+$.datepicker._mainDivId).length === 0) { + $("body").append($.datepicker.dpDiv); + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) { + return $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this[0]].concat(otherArgs)); + } + if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") { + return $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this[0]].concat(otherArgs)); + } + return this.each(function() { + typeof options === "string" ? + $.datepicker["_" + options + "Datepicker"]. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.10.4"; + +})(jQuery); +(function( $, undefined ) { + +var sizeRelatedOptions = { + buttons: true, + height: true, + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true, + width: true + }, + resizableRelatedOptions = { + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true + }; + +$.widget( "ui.dialog", { + version: "1.10.4", + options: { + appendTo: "body", + autoOpen: true, + buttons: [], + closeOnEscape: true, + closeText: "close", + dialogClass: "", + draggable: true, + hide: null, + height: "auto", + maxHeight: null, + maxWidth: null, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: "center", + at: "center", + of: window, + collision: "fit", + // Ensure the titlebar is always visible + using: function( pos ) { + var topOffset = $( this ).css( pos ).offset().top; + if ( topOffset < 0 ) { + $( this ).css( "top", pos.top - topOffset ); + } + } + }, + resizable: true, + show: null, + title: null, + width: 300, + + // callbacks + beforeClose: null, + close: null, + drag: null, + dragStart: null, + dragStop: null, + focus: null, + open: null, + resize: null, + resizeStart: null, + resizeStop: null + }, + + _create: function() { + this.originalCss = { + display: this.element[0].style.display, + width: this.element[0].style.width, + minHeight: this.element[0].style.minHeight, + maxHeight: this.element[0].style.maxHeight, + height: this.element[0].style.height + }; + this.originalPosition = { + parent: this.element.parent(), + index: this.element.parent().children().index( this.element ) + }; + this.originalTitle = this.element.attr("title"); + this.options.title = this.options.title || this.originalTitle; + + this._createWrapper(); + + this.element + .show() + .removeAttr("title") + .addClass("ui-dialog-content ui-widget-content") + .appendTo( this.uiDialog ); + + this._createTitlebar(); + this._createButtonPane(); + + if ( this.options.draggable && $.fn.draggable ) { + this._makeDraggable(); + } + if ( this.options.resizable && $.fn.resizable ) { + this._makeResizable(); + } + + this._isOpen = false; + }, + + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + _appendTo: function() { + var element = this.options.appendTo; + if ( element && (element.jquery || element.nodeType) ) { + return $( element ); + } + return this.document.find( element || "body" ).eq( 0 ); + }, + + _destroy: function() { + var next, + originalPosition = this.originalPosition; + + this._destroyOverlay(); + + this.element + .removeUniqueId() + .removeClass("ui-dialog-content ui-widget-content") + .css( this.originalCss ) + // Without detaching first, the following becomes really slow + .detach(); + + this.uiDialog.stop( true, true ).remove(); + + if ( this.originalTitle ) { + this.element.attr( "title", this.originalTitle ); + } + + next = originalPosition.parent.children().eq( originalPosition.index ); + // Don't try to place the dialog next to itself (#8613) + if ( next.length && next[0] !== this.element[0] ) { + next.before( this.element ); + } else { + originalPosition.parent.append( this.element ); + } + }, + + widget: function() { + return this.uiDialog; + }, + + disable: $.noop, + enable: $.noop, + + close: function( event ) { + var activeElement, + that = this; + + if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) { + return; + } + + this._isOpen = false; + this._destroyOverlay(); + + if ( !this.opener.filter(":focusable").focus().length ) { + + // support: IE9 + // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe> + try { + activeElement = this.document[ 0 ].activeElement; + + // Support: IE9, IE10 + // If the <body> is blurred, IE will switch windows, see #4520 + if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) { + + // Hiding a focused element doesn't trigger blur in WebKit + // so in case we have nothing to focus on, explicitly blur the active element + // https://bugs.webkit.org/show_bug.cgi?id=47182 + $( activeElement ).blur(); + } + } catch ( error ) {} + } + + this._hide( this.uiDialog, this.options.hide, function() { + that._trigger( "close", event ); + }); + }, + + isOpen: function() { + return this._isOpen; + }, + + moveToTop: function() { + this._moveToTop(); + }, + + _moveToTop: function( event, silent ) { + var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length; + if ( moved && !silent ) { + this._trigger( "focus", event ); + } + return moved; + }, + + open: function() { + var that = this; + if ( this._isOpen ) { + if ( this._moveToTop() ) { + this._focusTabbable(); + } + return; + } + + this._isOpen = true; + this.opener = $( this.document[0].activeElement ); + + this._size(); + this._position(); + this._createOverlay(); + this._moveToTop( null, true ); + this._show( this.uiDialog, this.options.show, function() { + that._focusTabbable(); + that._trigger("focus"); + }); + + this._trigger("open"); + }, + + _focusTabbable: function() { + // Set focus to the first match: + // 1. First element inside the dialog matching [autofocus] + // 2. Tabbable element inside the content element + // 3. Tabbable element inside the buttonpane + // 4. The close button + // 5. The dialog itself + var hasFocus = this.element.find("[autofocus]"); + if ( !hasFocus.length ) { + hasFocus = this.element.find(":tabbable"); + } + if ( !hasFocus.length ) { + hasFocus = this.uiDialogButtonPane.find(":tabbable"); + } + if ( !hasFocus.length ) { + hasFocus = this.uiDialogTitlebarClose.filter(":tabbable"); + } + if ( !hasFocus.length ) { + hasFocus = this.uiDialog; + } + hasFocus.eq( 0 ).focus(); + }, + + _keepFocus: function( event ) { + function checkFocus() { + var activeElement = this.document[0].activeElement, + isActive = this.uiDialog[0] === activeElement || + $.contains( this.uiDialog[0], activeElement ); + if ( !isActive ) { + this._focusTabbable(); + } + } + event.preventDefault(); + checkFocus.call( this ); + // support: IE + // IE <= 8 doesn't prevent moving focus even with event.preventDefault() + // so we check again later + this._delay( checkFocus ); + }, + + _createWrapper: function() { + this.uiDialog = $("<div>") + .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " + + this.options.dialogClass ) + .hide() + .attr({ + // Setting tabIndex makes the div focusable + tabIndex: -1, + role: "dialog" + }) + .appendTo( this._appendTo() ); + + this._on( this.uiDialog, { + keydown: function( event ) { + if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE ) { + event.preventDefault(); + this.close( event ); + return; + } + + // prevent tabbing out of dialogs + if ( event.keyCode !== $.ui.keyCode.TAB ) { + return; + } + var tabbables = this.uiDialog.find(":tabbable"), + first = tabbables.filter(":first"), + last = tabbables.filter(":last"); + + if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) { + first.focus( 1 ); + event.preventDefault(); + } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) { + last.focus( 1 ); + event.preventDefault(); + } + }, + mousedown: function( event ) { + if ( this._moveToTop( event ) ) { + this._focusTabbable(); + } + } + }); + + // We assume that any existing aria-describedby attribute means + // that the dialog content is marked up properly + // otherwise we brute force the content as the description + if ( !this.element.find("[aria-describedby]").length ) { + this.uiDialog.attr({ + "aria-describedby": this.element.uniqueId().attr("id") + }); + } + }, + + _createTitlebar: function() { + var uiDialogTitle; + + this.uiDialogTitlebar = $("<div>") + .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix") + .prependTo( this.uiDialog ); + this._on( this.uiDialogTitlebar, { + mousedown: function( event ) { + // Don't prevent click on close button (#8838) + // Focusing a dialog that is partially scrolled out of view + // causes the browser to scroll it into view, preventing the click event + if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) { + // Dialog isn't getting focus when dragging (#8063) + this.uiDialog.focus(); + } + } + }); + + // support: IE + // Use type="button" to prevent enter keypresses in textboxes from closing the + // dialog in IE (#9312) + this.uiDialogTitlebarClose = $( "<button type='button'></button>" ) + .button({ + label: this.options.closeText, + icons: { + primary: "ui-icon-closethick" + }, + text: false + }) + .addClass("ui-dialog-titlebar-close") + .appendTo( this.uiDialogTitlebar ); + this._on( this.uiDialogTitlebarClose, { + click: function( event ) { + event.preventDefault(); + this.close( event ); + } + }); + + uiDialogTitle = $("<span>") + .uniqueId() + .addClass("ui-dialog-title") + .prependTo( this.uiDialogTitlebar ); + this._title( uiDialogTitle ); + + this.uiDialog.attr({ + "aria-labelledby": uiDialogTitle.attr("id") + }); + }, + + _title: function( title ) { + if ( !this.options.title ) { + title.html("&#160;"); + } + title.text( this.options.title ); + }, + + _createButtonPane: function() { + this.uiDialogButtonPane = $("<div>") + .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"); + + this.uiButtonSet = $("<div>") + .addClass("ui-dialog-buttonset") + .appendTo( this.uiDialogButtonPane ); + + this._createButtons(); + }, + + _createButtons: function() { + var that = this, + buttons = this.options.buttons; + + // if we already have a button pane, remove it + this.uiDialogButtonPane.remove(); + this.uiButtonSet.empty(); + + if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) { + this.uiDialog.removeClass("ui-dialog-buttons"); + return; + } + + $.each( buttons, function( name, props ) { + var click, buttonOptions; + props = $.isFunction( props ) ? + { click: props, text: name } : + props; + // Default to a non-submitting button + props = $.extend( { type: "button" }, props ); + // Change the context for the click callback to be the main element + click = props.click; + props.click = function() { + click.apply( that.element[0], arguments ); + }; + buttonOptions = { + icons: props.icons, + text: props.showText + }; + delete props.icons; + delete props.showText; + $( "<button></button>", props ) + .button( buttonOptions ) + .appendTo( that.uiButtonSet ); + }); + this.uiDialog.addClass("ui-dialog-buttons"); + this.uiDialogButtonPane.appendTo( this.uiDialog ); + }, + + _makeDraggable: function() { + var that = this, + options = this.options; + + function filteredUi( ui ) { + return { + position: ui.position, + offset: ui.offset + }; + } + + this.uiDialog.draggable({ + cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", + handle: ".ui-dialog-titlebar", + containment: "document", + start: function( event, ui ) { + $( this ).addClass("ui-dialog-dragging"); + that._blockFrames(); + that._trigger( "dragStart", event, filteredUi( ui ) ); + }, + drag: function( event, ui ) { + that._trigger( "drag", event, filteredUi( ui ) ); + }, + stop: function( event, ui ) { + options.position = [ + ui.position.left - that.document.scrollLeft(), + ui.position.top - that.document.scrollTop() + ]; + $( this ).removeClass("ui-dialog-dragging"); + that._unblockFrames(); + that._trigger( "dragStop", event, filteredUi( ui ) ); + } + }); + }, + + _makeResizable: function() { + var that = this, + options = this.options, + handles = options.resizable, + // .ui-resizable has position: relative defined in the stylesheet + // but dialogs have to use absolute or fixed positioning + position = this.uiDialog.css("position"), + resizeHandles = typeof handles === "string" ? + handles : + "n,e,s,w,se,sw,ne,nw"; + + function filteredUi( ui ) { + return { + originalPosition: ui.originalPosition, + originalSize: ui.originalSize, + position: ui.position, + size: ui.size + }; + } + + this.uiDialog.resizable({ + cancel: ".ui-dialog-content", + containment: "document", + alsoResize: this.element, + maxWidth: options.maxWidth, + maxHeight: options.maxHeight, + minWidth: options.minWidth, + minHeight: this._minHeight(), + handles: resizeHandles, + start: function( event, ui ) { + $( this ).addClass("ui-dialog-resizing"); + that._blockFrames(); + that._trigger( "resizeStart", event, filteredUi( ui ) ); + }, + resize: function( event, ui ) { + that._trigger( "resize", event, filteredUi( ui ) ); + }, + stop: function( event, ui ) { + options.height = $( this ).height(); + options.width = $( this ).width(); + $( this ).removeClass("ui-dialog-resizing"); + that._unblockFrames(); + that._trigger( "resizeStop", event, filteredUi( ui ) ); + } + }) + .css( "position", position ); + }, + + _minHeight: function() { + var options = this.options; + + return options.height === "auto" ? + options.minHeight : + Math.min( options.minHeight, options.height ); + }, + + _position: function() { + // Need to show the dialog to get the actual offset in the position plugin + var isVisible = this.uiDialog.is(":visible"); + if ( !isVisible ) { + this.uiDialog.show(); + } + this.uiDialog.position( this.options.position ); + if ( !isVisible ) { + this.uiDialog.hide(); + } + }, + + _setOptions: function( options ) { + var that = this, + resize = false, + resizableOptions = {}; + + $.each( options, function( key, value ) { + that._setOption( key, value ); + + if ( key in sizeRelatedOptions ) { + resize = true; + } + if ( key in resizableRelatedOptions ) { + resizableOptions[ key ] = value; + } + }); + + if ( resize ) { + this._size(); + this._position(); + } + if ( this.uiDialog.is(":data(ui-resizable)") ) { + this.uiDialog.resizable( "option", resizableOptions ); + } + }, + + _setOption: function( key, value ) { + var isDraggable, isResizable, + uiDialog = this.uiDialog; + + if ( key === "dialogClass" ) { + uiDialog + .removeClass( this.options.dialogClass ) + .addClass( value ); + } + + if ( key === "disabled" ) { + return; + } + + this._super( key, value ); + + if ( key === "appendTo" ) { + this.uiDialog.appendTo( this._appendTo() ); + } + + if ( key === "buttons" ) { + this._createButtons(); + } + + if ( key === "closeText" ) { + this.uiDialogTitlebarClose.button({ + // Ensure that we always pass a string + label: "" + value + }); + } + + if ( key === "draggable" ) { + isDraggable = uiDialog.is(":data(ui-draggable)"); + if ( isDraggable && !value ) { + uiDialog.draggable("destroy"); + } + + if ( !isDraggable && value ) { + this._makeDraggable(); + } + } + + if ( key === "position" ) { + this._position(); + } + + if ( key === "resizable" ) { + // currently resizable, becoming non-resizable + isResizable = uiDialog.is(":data(ui-resizable)"); + if ( isResizable && !value ) { + uiDialog.resizable("destroy"); + } + + // currently resizable, changing handles + if ( isResizable && typeof value === "string" ) { + uiDialog.resizable( "option", "handles", value ); + } + + // currently non-resizable, becoming resizable + if ( !isResizable && value !== false ) { + this._makeResizable(); + } + } + + if ( key === "title" ) { + this._title( this.uiDialogTitlebar.find(".ui-dialog-title") ); + } + }, + + _size: function() { + // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content + // divs will both have width and height set, so we need to reset them + var nonContentHeight, minContentHeight, maxContentHeight, + options = this.options; + + // Reset content sizing + this.element.show().css({ + width: "auto", + minHeight: 0, + maxHeight: "none", + height: 0 + }); + + if ( options.minWidth > options.width ) { + options.width = options.minWidth; + } + + // reset wrapper sizing + // determine the height of all the non-content elements + nonContentHeight = this.uiDialog.css({ + height: "auto", + width: options.width + }) + .outerHeight(); + minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); + maxContentHeight = typeof options.maxHeight === "number" ? + Math.max( 0, options.maxHeight - nonContentHeight ) : + "none"; + + if ( options.height === "auto" ) { + this.element.css({ + minHeight: minContentHeight, + maxHeight: maxContentHeight, + height: "auto" + }); + } else { + this.element.height( Math.max( 0, options.height - nonContentHeight ) ); + } + + if (this.uiDialog.is(":data(ui-resizable)") ) { + this.uiDialog.resizable( "option", "minHeight", this._minHeight() ); + } + }, + + _blockFrames: function() { + this.iframeBlocks = this.document.find( "iframe" ).map(function() { + var iframe = $( this ); + + return $( "<div>" ) + .css({ + position: "absolute", + width: iframe.outerWidth(), + height: iframe.outerHeight() + }) + .appendTo( iframe.parent() ) + .offset( iframe.offset() )[0]; + }); + }, + + _unblockFrames: function() { + if ( this.iframeBlocks ) { + this.iframeBlocks.remove(); + delete this.iframeBlocks; + } + }, + + _allowInteraction: function( event ) { + if ( $( event.target ).closest(".ui-dialog").length ) { + return true; + } + + // TODO: Remove hack when datepicker implements + // the .ui-front logic (#8989) + return !!$( event.target ).closest(".ui-datepicker").length; + }, + + _createOverlay: function() { + if ( !this.options.modal ) { + return; + } + + var that = this, + widgetFullName = this.widgetFullName; + if ( !$.ui.dialog.overlayInstances ) { + // Prevent use of anchors and inputs. + // We use a delay in case the overlay is created from an + // event that we're going to be cancelling. (#2804) + this._delay(function() { + // Handle .dialog().dialog("close") (#4065) + if ( $.ui.dialog.overlayInstances ) { + this.document.bind( "focusin.dialog", function( event ) { + if ( !that._allowInteraction( event ) ) { + event.preventDefault(); + $(".ui-dialog:visible:last .ui-dialog-content") + .data( widgetFullName )._focusTabbable(); + } + }); + } + }); + } + + this.overlay = $("<div>") + .addClass("ui-widget-overlay ui-front") + .appendTo( this._appendTo() ); + this._on( this.overlay, { + mousedown: "_keepFocus" + }); + $.ui.dialog.overlayInstances++; + }, + + _destroyOverlay: function() { + if ( !this.options.modal ) { + return; + } + + if ( this.overlay ) { + $.ui.dialog.overlayInstances--; + + if ( !$.ui.dialog.overlayInstances ) { + this.document.unbind( "focusin.dialog" ); + } + this.overlay.remove(); + this.overlay = null; + } + } +}); + +$.ui.dialog.overlayInstances = 0; + +// DEPRECATED +if ( $.uiBackCompat !== false ) { + // position option with array notation + // just override with old implementation + $.widget( "ui.dialog", $.ui.dialog, { + _position: function() { + var position = this.options.position, + myAt = [], + offset = [ 0, 0 ], + isVisible; + + if ( position ) { + if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) { + myAt = position.split ? position.split(" ") : [ position[0], position[1] ]; + if ( myAt.length === 1 ) { + myAt[1] = myAt[0]; + } + + $.each( [ "left", "top" ], function( i, offsetPosition ) { + if ( +myAt[ i ] === myAt[ i ] ) { + offset[ i ] = myAt[ i ]; + myAt[ i ] = offsetPosition; + } + }); + + position = { + my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " + + myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]), + at: myAt.join(" ") + }; + } + + position = $.extend( {}, $.ui.dialog.prototype.options.position, position ); + } else { + position = $.ui.dialog.prototype.options.position; + } + + // need to show the dialog to get the actual offset in the position plugin + isVisible = this.uiDialog.is(":visible"); + if ( !isVisible ) { + this.uiDialog.show(); + } + this.uiDialog.position( position ); + if ( !isVisible ) { + this.uiDialog.hide(); + } + } + }); +} + +}( jQuery ) ); +(function( $, undefined ) { + +$.widget("ui.draggable", $.ui.mouse, { + version: "1.10.4", + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false, + + // callbacks + drag: null, + start: null, + stop: null + }, + _create: function() { + + if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) { + this.element[0].style.position = "relative"; + } + if (this.options.addClasses){ + this.element.addClass("ui-draggable"); + } + if (this.options.disabled){ + this.element.addClass("ui-draggable-disabled"); + } + + this._mouseInit(); + + }, + + _destroy: function() { + this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ); + this._mouseDestroy(); + }, + + _mouseCapture: function(event) { + + var o = this.options; + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) { + return false; + } + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) { + return false; + } + + $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { + $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>") + .css({ + width: this.offsetWidth+"px", height: this.offsetHeight+"px", + position: "absolute", opacity: "0.001", zIndex: 1000 + }) + .css($(this).offset()) + .appendTo("body"); + }); + + return true; + + }, + + _mouseStart: function(event) { + + var o = this.options; + + //Create and append the visible helper + this.helper = this._createHelper(event); + + this.helper.addClass("ui-draggable-dragging"); + + //Cache the helper size + this._cacheHelperProportions(); + + //If ddmanager is used for droppables, set the global draggable + if($.ui.ddmanager) { + $.ui.ddmanager.current = this; + } + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Store the helper's css position + this.cssPosition = this.helper.css( "position" ); + this.scrollParent = this.helper.scrollParent(); + this.offsetParent = this.helper.offsetParent(); + this.offsetParentCssPosition = this.offsetParent.css( "position" ); + + //The element's absolute position on the page minus margins + this.offset = this.positionAbs = this.element.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + //Reset scroll cache + this.offset.scroll = false; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this.position = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if "cursorAt" is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Set a containment if given in the options + this._setContainment(); + + //Trigger event + callbacks + if(this._trigger("start", event) === false) { + this._clear(); + return false; + } + + //Recache the helper size + this._cacheHelperProportions(); + + //Prepare the droppable offsets + if ($.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(this, event); + } + + + this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position + + //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) + if ( $.ui.ddmanager ) { + $.ui.ddmanager.dragStart(this, event); + } + + return true; + }, + + _mouseDrag: function(event, noPropagation) { + // reset any necessary cached properties (see #5009) + if ( this.offsetParentCssPosition === "fixed" ) { + this.offset.parent = this._getParentOffset(); + } + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + //Call plugins and callbacks and use the resulting position if something is returned + if (!noPropagation) { + var ui = this._uiHash(); + if(this._trigger("drag", event, ui) === false) { + this._mouseUp({}); + return false; + } + this.position = ui.position; + } + + if(!this.options.axis || this.options.axis !== "y") { + this.helper[0].style.left = this.position.left+"px"; + } + if(!this.options.axis || this.options.axis !== "x") { + this.helper[0].style.top = this.position.top+"px"; + } + if($.ui.ddmanager) { + $.ui.ddmanager.drag(this, event); + } + + return false; + }, + + _mouseStop: function(event) { + + //If we are using droppables, inform the manager about the drop + var that = this, + dropped = false; + if ($.ui.ddmanager && !this.options.dropBehaviour) { + dropped = $.ui.ddmanager.drop(this, event); + } + + //if a drop comes from outside (a sortable) + if(this.dropped) { + dropped = this.dropped; + this.dropped = false; + } + + //if the original element is no longer in the DOM don't bother to continue (see #8269) + if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) { + return false; + } + + if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { + $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { + if(that._trigger("stop", event) !== false) { + that._clear(); + } + }); + } else { + if(this._trigger("stop", event) !== false) { + this._clear(); + } + } + + return false; + }, + + _mouseUp: function(event) { + //Remove frame helpers + $("div.ui-draggable-iframeFix").each(function() { + this.parentNode.removeChild(this); + }); + + //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) + if( $.ui.ddmanager ) { + $.ui.ddmanager.dragStop(this, event); + } + + return $.ui.mouse.prototype._mouseUp.call(this, event); + }, + + cancel: function() { + + if(this.helper.is(".ui-draggable-dragging")) { + this._mouseUp({}); + } else { + this._clear(); + } + + return this; + + }, + + _getHandle: function(event) { + return this.options.handle ? + !!$( event.target ).closest( this.element.find( this.options.handle ) ).length : + true; + }, + + _createHelper: function(event) { + + var o = this.options, + helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element); + + if(!helper.parents("body").length) { + helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo)); + } + + if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) { + helper.css("position", "absolute"); + } + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj === "string") { + obj = obj.split(" "); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ("left" in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ("right" in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ("top" in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ("bottom" in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + //This needs to be actually done for all browsers, since pageX/pageY includes this information + //Ugly IE fix + if((this.offsetParent[0] === document.body) || + (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { + po = { top: 0, left: 0 }; + } + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition === "relative") { + var p = this.element.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.element.css("marginLeft"),10) || 0), + top: (parseInt(this.element.css("marginTop"),10) || 0), + right: (parseInt(this.element.css("marginRight"),10) || 0), + bottom: (parseInt(this.element.css("marginBottom"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var over, c, ce, + o = this.options; + + if ( !o.containment ) { + this.containment = null; + return; + } + + if ( o.containment === "window" ) { + this.containment = [ + $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left, + $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top, + $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left, + $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top + ]; + return; + } + + if ( o.containment === "document") { + this.containment = [ + 0, + 0, + $( document ).width() - this.helperProportions.width - this.margins.left, + ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top + ]; + return; + } + + if ( o.containment.constructor === Array ) { + this.containment = o.containment; + return; + } + + if ( o.containment === "parent" ) { + o.containment = this.helper[ 0 ].parentNode; + } + + c = $( o.containment ); + ce = c[ 0 ]; + + if( !ce ) { + return; + } + + over = c.css( "overflow" ) !== "hidden"; + + this.containment = [ + ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ), + ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) , + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right, + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top - this.margins.bottom + ]; + this.relative_container = c; + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) { + pos = this.position; + } + + var mod = d === "absolute" ? 1 : -1, + scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent; + + //Cache the scroll + if (!this.offset.scroll) { + this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()}; + } + + return { + top: ( + pos.top + // The absolute mouse position + this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod ) + ), + left: ( + pos.left + // The absolute mouse position + this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod ) + ) + }; + + }, + + _generatePosition: function(event) { + + var containment, co, top, left, + o = this.options, + scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent, + pageX = event.pageX, + pageY = event.pageY; + + //Cache the scroll + if (!this.offset.scroll) { + this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()}; + } + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + // If we are not dragging yet, we won't check for options + if ( this.originalPosition ) { + if ( this.containment ) { + if ( this.relative_container ){ + co = this.relative_container.offset(); + containment = [ + this.containment[ 0 ] + co.left, + this.containment[ 1 ] + co.top, + this.containment[ 2 ] + co.left, + this.containment[ 3 ] + co.top + ]; + } + else { + containment = this.containment; + } + + if(event.pageX - this.offset.click.left < containment[0]) { + pageX = containment[0] + this.offset.click.left; + } + if(event.pageY - this.offset.click.top < containment[1]) { + pageY = containment[1] + this.offset.click.top; + } + if(event.pageX - this.offset.click.left > containment[2]) { + pageX = containment[2] + this.offset.click.left; + } + if(event.pageY - this.offset.click.top > containment[3]) { + pageY = containment[3] + this.offset.click.top; + } + } + + if(o.grid) { + //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) + top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; + pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; + pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY - // The absolute mouse position + this.offset.click.top - // Click offset (relative to the element) + this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top + // The offsetParent's offset without borders (offset + border) + ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) + ), + left: ( + pageX - // The absolute mouse position + this.offset.click.left - // Click offset (relative to the element) + this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left + // The offsetParent's offset without borders (offset + border) + ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) + ) + }; + + }, + + _clear: function() { + this.helper.removeClass("ui-draggable-dragging"); + if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) { + this.helper.remove(); + } + this.helper = null; + this.cancelHelperRemoval = false; + }, + + // From now on bulk stuff - mainly helpers + + _trigger: function(type, event, ui) { + ui = ui || this._uiHash(); + $.ui.plugin.call(this, type, [event, ui]); + //The absolute position has to be recalculated after plugins + if(type === "drag") { + this.positionAbs = this._convertPositionTo("absolute"); + } + return $.Widget.prototype._trigger.call(this, type, event, ui); + }, + + plugins: {}, + + _uiHash: function() { + return { + helper: this.helper, + position: this.position, + originalPosition: this.originalPosition, + offset: this.positionAbs + }; + } + +}); + +$.ui.plugin.add("draggable", "connectToSortable", { + start: function(event, ui) { + + var inst = $(this).data("ui-draggable"), o = inst.options, + uiSortable = $.extend({}, ui, { item: inst.element }); + inst.sortables = []; + $(o.connectToSortable).each(function() { + var sortable = $.data(this, "ui-sortable"); + if (sortable && !sortable.options.disabled) { + inst.sortables.push({ + instance: sortable, + shouldRevert: sortable.options.revert + }); + sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page). + sortable._trigger("activate", event, uiSortable); + } + }); + + }, + stop: function(event, ui) { + + //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper + var inst = $(this).data("ui-draggable"), + uiSortable = $.extend({}, ui, { item: inst.element }); + + $.each(inst.sortables, function() { + if(this.instance.isOver) { + + this.instance.isOver = 0; + + inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance + this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) + + //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid" + if(this.shouldRevert) { + this.instance.options.revert = this.shouldRevert; + } + + //Trigger the stop of the sortable + this.instance._mouseStop(event); + + this.instance.options.helper = this.instance.options._helper; + + //If the helper has been the original item, restore properties in the sortable + if(inst.options.helper === "original") { + this.instance.currentItem.css({ top: "auto", left: "auto" }); + } + + } else { + this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance + this.instance._trigger("deactivate", event, uiSortable); + } + + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("ui-draggable"), that = this; + + $.each(inst.sortables, function() { + + var innermostIntersecting = false, + thisSortable = this; + + //Copy over some variables to allow calling the sortable's native _intersectsWith + this.instance.positionAbs = inst.positionAbs; + this.instance.helperProportions = inst.helperProportions; + this.instance.offset.click = inst.offset.click; + + if(this.instance._intersectsWith(this.instance.containerCache)) { + innermostIntersecting = true; + $.each(inst.sortables, function () { + this.instance.positionAbs = inst.positionAbs; + this.instance.helperProportions = inst.helperProportions; + this.instance.offset.click = inst.offset.click; + if (this !== thisSortable && + this.instance._intersectsWith(this.instance.containerCache) && + $.contains(thisSortable.instance.element[0], this.instance.element[0]) + ) { + innermostIntersecting = false; + } + return innermostIntersecting; + }); + } + + + if(innermostIntersecting) { + //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once + if(!this.instance.isOver) { + + this.instance.isOver = 1; + //Now we fake the start of dragging for the sortable instance, + //by cloning the list group item, appending it to the sortable and using it as inst.currentItem + //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) + this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true); + this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it + this.instance.options.helper = function() { return ui.helper[0]; }; + + event.target = this.instance.currentItem[0]; + this.instance._mouseCapture(event, true); + this.instance._mouseStart(event, true, true); + + //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes + this.instance.offset.click.top = inst.offset.click.top; + this.instance.offset.click.left = inst.offset.click.left; + this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; + this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; + + inst._trigger("toSortable", event); + inst.dropped = this.instance.element; //draggable revert needs that + //hack so receive/update callbacks work (mostly) + inst.currentItem = inst.element; + this.instance.fromOutside = inst; + + } + + //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable + if(this.instance.currentItem) { + this.instance._mouseDrag(event); + } + + } else { + + //If it doesn't intersect with the sortable, and it intersected before, + //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval + if(this.instance.isOver) { + + this.instance.isOver = 0; + this.instance.cancelHelperRemoval = true; + + //Prevent reverting on this forced stop + this.instance.options.revert = false; + + // The out event needs to be triggered independently + this.instance._trigger("out", event, this.instance._uiHash(this.instance)); + + this.instance._mouseStop(event, true); + this.instance.options.helper = this.instance.options._helper; + + //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size + this.instance.currentItem.remove(); + if(this.instance.placeholder) { + this.instance.placeholder.remove(); + } + + inst._trigger("fromSortable", event); + inst.dropped = false; //draggable revert needs that + } + + } + + }); + + } +}); + +$.ui.plugin.add("draggable", "cursor", { + start: function() { + var t = $("body"), o = $(this).data("ui-draggable").options; + if (t.css("cursor")) { + o._cursor = t.css("cursor"); + } + t.css("cursor", o.cursor); + }, + stop: function() { + var o = $(this).data("ui-draggable").options; + if (o._cursor) { + $("body").css("cursor", o._cursor); + } + } +}); + +$.ui.plugin.add("draggable", "opacity", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data("ui-draggable").options; + if(t.css("opacity")) { + o._opacity = t.css("opacity"); + } + t.css("opacity", o.opacity); + }, + stop: function(event, ui) { + var o = $(this).data("ui-draggable").options; + if(o._opacity) { + $(ui.helper).css("opacity", o._opacity); + } + } +}); + +$.ui.plugin.add("draggable", "scroll", { + start: function() { + var i = $(this).data("ui-draggable"); + if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { + i.overflowOffset = i.scrollParent.offset(); + } + }, + drag: function( event ) { + + var i = $(this).data("ui-draggable"), o = i.options, scrolled = false; + + if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") { + + if(!o.axis || o.axis !== "x") { + if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; + } else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) { + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; + } + } + + if(!o.axis || o.axis !== "y") { + if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; + } else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) { + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; + } + } + + } else { + + if(!o.axis || o.axis !== "x") { + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + } + + if(!o.axis || o.axis !== "y") { + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(i, event); + } + + } +}); + +$.ui.plugin.add("draggable", "snap", { + start: function() { + + var i = $(this).data("ui-draggable"), + o = i.options; + + i.snapElements = []; + + $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() { + var $t = $(this), + $o = $t.offset(); + if(this !== i.element[0]) { + i.snapElements.push({ + item: this, + width: $t.outerWidth(), height: $t.outerHeight(), + top: $o.top, left: $o.left + }); + } + }); + + }, + drag: function(event, ui) { + + var ts, bs, ls, rs, l, r, t, b, i, first, + inst = $(this).data("ui-draggable"), + o = inst.options, + d = o.snapTolerance, + x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, + y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; + + for (i = inst.snapElements.length - 1; i >= 0; i--){ + + l = inst.snapElements[i].left; + r = l + inst.snapElements[i].width; + t = inst.snapElements[i].top; + b = t + inst.snapElements[i].height; + + if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) { + if(inst.snapElements[i].snapping) { + (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + } + inst.snapElements[i].snapping = false; + continue; + } + + if(o.snapMode !== "inner") { + ts = Math.abs(t - y2) <= d; + bs = Math.abs(b - y1) <= d; + ls = Math.abs(l - x2) <= d; + rs = Math.abs(r - x1) <= d; + if(ts) { + ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + } + if(bs) { + ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; + } + if(ls) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; + } + if(rs) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; + } + } + + first = (ts || bs || ls || rs); + + if(o.snapMode !== "outer") { + ts = Math.abs(t - y1) <= d; + bs = Math.abs(b - y2) <= d; + ls = Math.abs(l - x1) <= d; + rs = Math.abs(r - x2) <= d; + if(ts) { + ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; + } + if(bs) { + ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + } + if(ls) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; + } + if(rs) { + ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; + } + } + + if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) { + (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + } + inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + + } + + } +}); + +$.ui.plugin.add("draggable", "stack", { + start: function() { + var min, + o = this.data("ui-draggable").options, + group = $.makeArray($(o.stack)).sort(function(a,b) { + return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); + }); + + if (!group.length) { return; } + + min = parseInt($(group[0]).css("zIndex"), 10) || 0; + $(group).each(function(i) { + $(this).css("zIndex", min + i); + }); + this.css("zIndex", (min + group.length)); + } +}); + +$.ui.plugin.add("draggable", "zIndex", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data("ui-draggable").options; + if(t.css("zIndex")) { + o._zIndex = t.css("zIndex"); + } + t.css("zIndex", o.zIndex); + }, + stop: function(event, ui) { + var o = $(this).data("ui-draggable").options; + if(o._zIndex) { + $(ui.helper).css("zIndex", o._zIndex); + } + } +}); + +})(jQuery); +(function( $, undefined ) { + +function isOverAxis( x, reference, size ) { + return ( x > reference ) && ( x < ( reference + size ) ); +} + +$.widget("ui.droppable", { + version: "1.10.4", + widgetEventPrefix: "drop", + options: { + accept: "*", + activeClass: false, + addClasses: true, + greedy: false, + hoverClass: false, + scope: "default", + tolerance: "intersect", + + // callbacks + activate: null, + deactivate: null, + drop: null, + out: null, + over: null + }, + _create: function() { + + var proportions, + o = this.options, + accept = o.accept; + + this.isover = false; + this.isout = true; + + this.accept = $.isFunction(accept) ? accept : function(d) { + return d.is(accept); + }; + + this.proportions = function( /* valueToWrite */ ) { + if ( arguments.length ) { + // Store the droppable's proportions + proportions = arguments[ 0 ]; + } else { + // Retrieve or derive the droppable's proportions + return proportions ? + proportions : + proportions = { + width: this.element[ 0 ].offsetWidth, + height: this.element[ 0 ].offsetHeight + }; + } + }; + + // Add the reference and positions to the manager + $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; + $.ui.ddmanager.droppables[o.scope].push(this); + + (o.addClasses && this.element.addClass("ui-droppable")); + + }, + + _destroy: function() { + var i = 0, + drop = $.ui.ddmanager.droppables[this.options.scope]; + + for ( ; i < drop.length; i++ ) { + if ( drop[i] === this ) { + drop.splice(i, 1); + } + } + + this.element.removeClass("ui-droppable ui-droppable-disabled"); + }, + + _setOption: function(key, value) { + + if(key === "accept") { + this.accept = $.isFunction(value) ? value : function(d) { + return d.is(value); + }; + } + $.Widget.prototype._setOption.apply(this, arguments); + }, + + _activate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) { + this.element.addClass(this.options.activeClass); + } + if(draggable){ + this._trigger("activate", event, this.ui(draggable)); + } + }, + + _deactivate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) { + this.element.removeClass(this.options.activeClass); + } + if(draggable){ + this._trigger("deactivate", event, this.ui(draggable)); + } + }, + + _over: function(event) { + + var draggable = $.ui.ddmanager.current; + + // Bail if draggable and droppable are same element + if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) { + return; + } + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) { + this.element.addClass(this.options.hoverClass); + } + this._trigger("over", event, this.ui(draggable)); + } + + }, + + _out: function(event) { + + var draggable = $.ui.ddmanager.current; + + // Bail if draggable and droppable are same element + if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) { + return; + } + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) { + this.element.removeClass(this.options.hoverClass); + } + this._trigger("out", event, this.ui(draggable)); + } + + }, + + _drop: function(event,custom) { + + var draggable = custom || $.ui.ddmanager.current, + childrenIntersection = false; + + // Bail if draggable and droppable are same element + if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) { + return false; + } + + this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() { + var inst = $.data(this, "ui-droppable"); + if( + inst.options.greedy && + !inst.options.disabled && + inst.options.scope === draggable.options.scope && + inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) && + $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) + ) { childrenIntersection = true; return false; } + }); + if(childrenIntersection) { + return false; + } + + if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.activeClass) { + this.element.removeClass(this.options.activeClass); + } + if(this.options.hoverClass) { + this.element.removeClass(this.options.hoverClass); + } + this._trigger("drop", event, this.ui(draggable)); + return this.element; + } + + return false; + + }, + + ui: function(c) { + return { + draggable: (c.currentItem || c.element), + helper: c.helper, + position: c.position, + offset: c.positionAbs + }; + } + +}); + +$.ui.intersect = function(draggable, droppable, toleranceMode) { + + if (!droppable.offset) { + return false; + } + + var draggableLeft, draggableTop, + x1 = (draggable.positionAbs || draggable.position.absolute).left, + y1 = (draggable.positionAbs || draggable.position.absolute).top, + x2 = x1 + draggable.helperProportions.width, + y2 = y1 + draggable.helperProportions.height, + l = droppable.offset.left, + t = droppable.offset.top, + r = l + droppable.proportions().width, + b = t + droppable.proportions().height; + + switch (toleranceMode) { + case "fit": + return (l <= x1 && x2 <= r && t <= y1 && y2 <= b); + case "intersect": + return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half + x2 - (draggable.helperProportions.width / 2) < r && // Left Half + t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half + y2 - (draggable.helperProportions.height / 2) < b ); // Top Half + case "pointer": + draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left); + draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top); + return isOverAxis( draggableTop, t, droppable.proportions().height ) && isOverAxis( draggableLeft, l, droppable.proportions().width ); + case "touch": + return ( + (y1 >= t && y1 <= b) || // Top edge touching + (y2 >= t && y2 <= b) || // Bottom edge touching + (y1 < t && y2 > b) // Surrounded vertically + ) && ( + (x1 >= l && x1 <= r) || // Left edge touching + (x2 >= l && x2 <= r) || // Right edge touching + (x1 < l && x2 > r) // Surrounded horizontally + ); + default: + return false; + } + +}; + +/* + This manager tracks offsets of draggables and droppables +*/ +$.ui.ddmanager = { + current: null, + droppables: { "default": [] }, + prepareOffsets: function(t, event) { + + var i, j, + m = $.ui.ddmanager.droppables[t.options.scope] || [], + type = event ? event.type : null, // workaround for #2317 + list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack(); + + droppablesLoop: for (i = 0; i < m.length; i++) { + + //No disabled and non-accepted + if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) { + continue; + } + + // Filter out elements in the current dragged item + for (j=0; j < list.length; j++) { + if(list[j] === m[i].element[0]) { + m[i].proportions().height = 0; + continue droppablesLoop; + } + } + + m[i].visible = m[i].element.css("display") !== "none"; + if(!m[i].visible) { + continue; + } + + //Activate the droppable if used directly from draggables + if(type === "mousedown") { + m[i]._activate.call(m[i], event); + } + + m[ i ].offset = m[ i ].element.offset(); + m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight }); + + } + + }, + drop: function(draggable, event) { + + var dropped = false; + // Create a copy of the droppables in case the list changes during the drop (#9116) + $.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() { + + if(!this.options) { + return; + } + if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) { + dropped = this._drop.call(this, event) || dropped; + } + + if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + this.isout = true; + this.isover = false; + this._deactivate.call(this, event); + } + + }); + return dropped; + + }, + dragStart: function( draggable, event ) { + //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003) + draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() { + if( !draggable.options.refreshPositions ) { + $.ui.ddmanager.prepareOffsets( draggable, event ); + } + }); + }, + drag: function(draggable, event) { + + //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. + if(draggable.options.refreshPositions) { + $.ui.ddmanager.prepareOffsets(draggable, event); + } + + //Run through all droppables and check their positions based on specific tolerance options + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(this.options.disabled || this.greedyChild || !this.visible) { + return; + } + + var parentInstance, scope, parent, + intersects = $.ui.intersect(draggable, this, this.options.tolerance), + c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null); + if(!c) { + return; + } + + if (this.options.greedy) { + // find droppable parents with same scope + scope = this.options.scope; + parent = this.element.parents(":data(ui-droppable)").filter(function () { + return $.data(this, "ui-droppable").options.scope === scope; + }); + + if (parent.length) { + parentInstance = $.data(parent[0], "ui-droppable"); + parentInstance.greedyChild = (c === "isover"); + } + } + + // we just moved into a greedy child + if (parentInstance && c === "isover") { + parentInstance.isover = false; + parentInstance.isout = true; + parentInstance._out.call(parentInstance, event); + } + + this[c] = true; + this[c === "isout" ? "isover" : "isout"] = false; + this[c === "isover" ? "_over" : "_out"].call(this, event); + + // we just moved out of a greedy child + if (parentInstance && c === "isout") { + parentInstance.isout = false; + parentInstance.isover = true; + parentInstance._over.call(parentInstance, event); + } + }); + + }, + dragStop: function( draggable, event ) { + draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" ); + //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003) + if( !draggable.options.refreshPositions ) { + $.ui.ddmanager.prepareOffsets( draggable, event ); + } + } +}; + +})(jQuery); +(function($, undefined) { + +var dataSpace = "ui-effects-"; + +$.effects = { + effect: {} +}; + +/*! + * jQuery Color Animations v2.1.2 + * https://github.com/jquery/jquery-color + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * Date: Wed Jan 16 08:47:09 2013 -0600 + */ +(function( jQuery, undefined ) { + + var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", + + // plusequals test for += 100 -= 100 + rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, + // a set of RE's that can match strings and generate color tuples. + stringParsers = [{ + re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ], + execResult[ 3 ], + execResult[ 4 ] + ]; + } + }, { + re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ] * 2.55, + execResult[ 2 ] * 2.55, + execResult[ 3 ] * 2.55, + execResult[ 4 ] + ]; + } + }, { + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ], 16 ) + ]; + } + }, { + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ) + ]; + } + }, { + re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + space: "hsla", + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ] / 100, + execResult[ 3 ] / 100, + execResult[ 4 ] + ]; + } + }], + + // jQuery.Color( ) + color = jQuery.Color = function( color, green, blue, alpha ) { + return new jQuery.Color.fn.parse( color, green, blue, alpha ); + }, + spaces = { + rgba: { + props: { + red: { + idx: 0, + type: "byte" + }, + green: { + idx: 1, + type: "byte" + }, + blue: { + idx: 2, + type: "byte" + } + } + }, + + hsla: { + props: { + hue: { + idx: 0, + type: "degrees" + }, + saturation: { + idx: 1, + type: "percent" + }, + lightness: { + idx: 2, + type: "percent" + } + } + } + }, + propTypes = { + "byte": { + floor: true, + max: 255 + }, + "percent": { + max: 1 + }, + "degrees": { + mod: 360, + floor: true + } + }, + support = color.support = {}, + + // element for support tests + supportElem = jQuery( "<p>" )[ 0 ], + + // colors = jQuery.Color.names + colors, + + // local aliases of functions called often + each = jQuery.each; + +// determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; + +// define cache name and alpha properties +// for rgba and hsla spaces +each( spaces, function( spaceName, space ) { + space.cache = "_" + spaceName; + space.props.alpha = { + idx: 3, + type: "percent", + def: 1 + }; +}); + +function clamp( value, prop, allowEmpty ) { + var type = propTypes[ prop.type ] || {}; + + if ( value == null ) { + return (allowEmpty || !prop.def) ? null : prop.def; + } + + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); + + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { + return prop.def; + } + + if ( type.mod ) { + // we add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return (value + type.mod) % type.mod; + } + + // for now all property types without mod have min and max + return 0 > value ? 0 : type.max < value ? type.max : value; +} + +function stringParse( string ) { + var inst = color(), + rgba = inst._rgba = []; + + string = string.toLowerCase(); + + each( stringParsers, function( i, parser ) { + var parsed, + match = parser.re.exec( string ), + values = match && parser.parse( match ), + spaceName = parser.space || "rgba"; + + if ( values ) { + parsed = inst[ spaceName ]( values ); + + // if this was an rgba parse the assignment might happen twice + // oh well.... + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; + rgba = inst._rgba = parsed._rgba; + + // exit each( stringParsers ) here because we matched + return false; + } + }); + + // Found a stringParser that handled it + if ( rgba.length ) { + + // if this came from a parsed string, force "transparent" when alpha is 0 + // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) + if ( rgba.join() === "0,0,0,0" ) { + jQuery.extend( rgba, colors.transparent ); + } + return inst; + } + + // named colors + return colors[ string ]; +} + +color.fn = jQuery.extend( color.prototype, { + parse: function( red, green, blue, alpha ) { + if ( red === undefined ) { + this._rgba = [ null, null, null, null ]; + return this; + } + if ( red.jquery || red.nodeType ) { + red = jQuery( red ).css( green ); + green = undefined; + } + + var inst = this, + type = jQuery.type( red ), + rgba = this._rgba = []; + + // more than 1 argument specified - assume ( red, green, blue, alpha ) + if ( green !== undefined ) { + red = [ red, green, blue, alpha ]; + type = "array"; + } + + if ( type === "string" ) { + return this.parse( stringParse( red ) || colors._default ); + } + + if ( type === "array" ) { + each( spaces.rgba.props, function( key, prop ) { + rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); + }); + return this; + } + + if ( type === "object" ) { + if ( red instanceof color ) { + each( spaces, function( spaceName, space ) { + if ( red[ space.cache ] ) { + inst[ space.cache ] = red[ space.cache ].slice(); + } + }); + } else { + each( spaces, function( spaceName, space ) { + var cache = space.cache; + each( space.props, function( key, prop ) { + + // if the cache doesn't exist, and we know how to convert + if ( !inst[ cache ] && space.to ) { + + // if the value was null, we don't need to copy it + // if the key was alpha, we don't need to copy it either + if ( key === "alpha" || red[ key ] == null ) { + return; + } + inst[ cache ] = space.to( inst._rgba ); + } + + // this is the only case where we allow nulls for ALL properties. + // call clamp with alwaysAllowEmpty + inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); + }); + + // everything defined but alpha? + if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { + // use the default of 1 + inst[ cache ][ 3 ] = 1; + if ( space.from ) { + inst._rgba = space.from( inst[ cache ] ); + } + } + }); + } + return this; + } + }, + is: function( compare ) { + var is = color( compare ), + same = true, + inst = this; + + each( spaces, function( _, space ) { + var localCache, + isCache = is[ space.cache ]; + if (isCache) { + localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; + each( space.props, function( _, prop ) { + if ( isCache[ prop.idx ] != null ) { + same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); + return same; + } + }); + } + return same; + }); + return same; + }, + _space: function() { + var used = [], + inst = this; + each( spaces, function( spaceName, space ) { + if ( inst[ space.cache ] ) { + used.push( spaceName ); + } + }); + return used.pop(); + }, + transition: function( other, distance ) { + var end = color( other ), + spaceName = end._space(), + space = spaces[ spaceName ], + startColor = this.alpha() === 0 ? color( "transparent" ) : this, + start = startColor[ space.cache ] || space.to( startColor._rgba ), + result = start.slice(); + + end = end[ space.cache ]; + each( space.props, function( key, prop ) { + var index = prop.idx, + startValue = start[ index ], + endValue = end[ index ], + type = propTypes[ prop.type ] || {}; + + // if null, don't override start value + if ( endValue === null ) { + return; + } + // if null - use end + if ( startValue === null ) { + result[ index ] = endValue; + } else { + if ( type.mod ) { + if ( endValue - startValue > type.mod / 2 ) { + startValue += type.mod; + } else if ( startValue - endValue > type.mod / 2 ) { + startValue -= type.mod; + } + } + result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); + } + }); + return this[ spaceName ]( result ); + }, + blend: function( opaque ) { + // if we are already opaque - return ourself + if ( this._rgba[ 3 ] === 1 ) { + return this; + } + + var rgb = this._rgba.slice(), + a = rgb.pop(), + blend = color( opaque )._rgba; + + return color( jQuery.map( rgb, function( v, i ) { + return ( 1 - a ) * blend[ i ] + a * v; + })); + }, + toRgbaString: function() { + var prefix = "rgba(", + rgba = jQuery.map( this._rgba, function( v, i ) { + return v == null ? ( i > 2 ? 1 : 0 ) : v; + }); + + if ( rgba[ 3 ] === 1 ) { + rgba.pop(); + prefix = "rgb("; + } + + return prefix + rgba.join() + ")"; + }, + toHslaString: function() { + var prefix = "hsla(", + hsla = jQuery.map( this.hsla(), function( v, i ) { + if ( v == null ) { + v = i > 2 ? 1 : 0; + } + + // catch 1 and 2 + if ( i && i < 3 ) { + v = Math.round( v * 100 ) + "%"; + } + return v; + }); + + if ( hsla[ 3 ] === 1 ) { + hsla.pop(); + prefix = "hsl("; + } + return prefix + hsla.join() + ")"; + }, + toHexString: function( includeAlpha ) { + var rgba = this._rgba.slice(), + alpha = rgba.pop(); + + if ( includeAlpha ) { + rgba.push( ~~( alpha * 255 ) ); + } + + return "#" + jQuery.map( rgba, function( v ) { + + // default to 0 when nulls exist + v = ( v || 0 ).toString( 16 ); + return v.length === 1 ? "0" + v : v; + }).join(""); + }, + toString: function() { + return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); + } +}); +color.fn.parse.prototype = color.fn; + +// hsla conversions adapted from: +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 + +function hue2rgb( p, q, h ) { + h = ( h + 1 ) % 1; + if ( h * 6 < 1 ) { + return p + (q - p) * h * 6; + } + if ( h * 2 < 1) { + return q; + } + if ( h * 3 < 2 ) { + return p + (q - p) * ((2/3) - h) * 6; + } + return p; +} + +spaces.hsla.to = function ( rgba ) { + if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) { + return [ null, null, null, rgba[ 3 ] ]; + } + var r = rgba[ 0 ] / 255, + g = rgba[ 1 ] / 255, + b = rgba[ 2 ] / 255, + a = rgba[ 3 ], + max = Math.max( r, g, b ), + min = Math.min( r, g, b ), + diff = max - min, + add = max + min, + l = add * 0.5, + h, s; + + if ( min === max ) { + h = 0; + } else if ( r === max ) { + h = ( 60 * ( g - b ) / diff ) + 360; + } else if ( g === max ) { + h = ( 60 * ( b - r ) / diff ) + 120; + } else { + h = ( 60 * ( r - g ) / diff ) + 240; + } + + // chroma (diff) == 0 means greyscale which, by definition, saturation = 0% + // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) + if ( diff === 0 ) { + s = 0; + } else if ( l <= 0.5 ) { + s = diff / add; + } else { + s = diff / ( 2 - add ); + } + return [ Math.round(h) % 360, s, l, a == null ? 1 : a ]; +}; + +spaces.hsla.from = function ( hsla ) { + if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) { + return [ null, null, null, hsla[ 3 ] ]; + } + var h = hsla[ 0 ] / 360, + s = hsla[ 1 ], + l = hsla[ 2 ], + a = hsla[ 3 ], + q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s, + p = 2 * l - q; + + return [ + Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ), + Math.round( hue2rgb( p, q, h ) * 255 ), + Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ), + a + ]; +}; + + +each( spaces, function( spaceName, space ) { + var props = space.props, + cache = space.cache, + to = space.to, + from = space.from; + + // makes rgba() and hsla() + color.fn[ spaceName ] = function( value ) { + + // generate a cache for this space if it doesn't exist + if ( to && !this[ cache ] ) { + this[ cache ] = to( this._rgba ); + } + if ( value === undefined ) { + return this[ cache ].slice(); + } + + var ret, + type = jQuery.type( value ), + arr = ( type === "array" || type === "object" ) ? value : arguments, + local = this[ cache ].slice(); + + each( props, function( key, prop ) { + var val = arr[ type === "object" ? key : prop.idx ]; + if ( val == null ) { + val = local[ prop.idx ]; + } + local[ prop.idx ] = clamp( val, prop ); + }); + + if ( from ) { + ret = color( from( local ) ); + ret[ cache ] = local; + return ret; + } else { + return color( local ); + } + }; + + // makes red() green() blue() alpha() hue() saturation() lightness() + each( props, function( key, prop ) { + // alpha is included in more than one space + if ( color.fn[ key ] ) { + return; + } + color.fn[ key ] = function( value ) { + var vtype = jQuery.type( value ), + fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ), + local = this[ fn ](), + cur = local[ prop.idx ], + match; + + if ( vtype === "undefined" ) { + return cur; + } + + if ( vtype === "function" ) { + value = value.call( this, cur ); + vtype = jQuery.type( value ); + } + if ( value == null && prop.empty ) { + return this; + } + if ( vtype === "string" ) { + match = rplusequals.exec( value ); + if ( match ) { + value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 ); + } + } + local[ prop.idx ] = value; + return this[ fn ]( local ); + }; + }); +}); + +// add cssHook and .fx.step function for each named hook. +// accept a space separated string of properties +color.hook = function( hook ) { + var hooks = hook.split( " " ); + each( hooks, function( i, hook ) { + jQuery.cssHooks[ hook ] = { + set: function( elem, value ) { + var parsed, curElem, + backgroundColor = ""; + + if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) { + value = color( parsed || value ); + if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { + curElem = hook === "backgroundColor" ? elem.parentNode : elem; + while ( + (backgroundColor === "" || backgroundColor === "transparent") && + curElem && curElem.style + ) { + try { + backgroundColor = jQuery.css( curElem, "backgroundColor" ); + curElem = curElem.parentNode; + } catch ( e ) { + } + } + + value = value.blend( backgroundColor && backgroundColor !== "transparent" ? + backgroundColor : + "_default" ); + } + + value = value.toRgbaString(); + } + try { + elem.style[ hook ] = value; + } catch( e ) { + // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit' + } + } + }; + jQuery.fx.step[ hook ] = function( fx ) { + if ( !fx.colorInit ) { + fx.start = color( fx.elem, hook ); + fx.end = color( fx.end ); + fx.colorInit = true; + } + jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) ); + }; + }); + +}; + +color.hook( stepHooks ); + +jQuery.cssHooks.borderColor = { + expand: function( value ) { + var expanded = {}; + + each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) { + expanded[ "border" + part + "Color" ] = value; + }); + return expanded; + } +}; + +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. +colors = jQuery.Color.names = { + // 4.1. Basic color keywords + aqua: "#00ffff", + black: "#000000", + blue: "#0000ff", + fuchsia: "#ff00ff", + gray: "#808080", + green: "#008000", + lime: "#00ff00", + maroon: "#800000", + navy: "#000080", + olive: "#808000", + purple: "#800080", + red: "#ff0000", + silver: "#c0c0c0", + teal: "#008080", + white: "#ffffff", + yellow: "#ffff00", + + // 4.2.3. "transparent" color keyword + transparent: [ null, null, null, 0 ], + + _default: "#ffffff" +}; + +})( jQuery ); + + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ +(function() { + +var classAnimationActions = [ "add", "remove", "toggle" ], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) { + $.fx.step[ prop ] = function( fx ) { + if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { + jQuery.style( fx.elem, prop, fx.end ); + fx.setAttr = true; + } + }; +}); + +function getElementStyles( elem ) { + var key, len, + style = elem.ownerDocument.defaultView ? + elem.ownerDocument.defaultView.getComputedStyle( elem, null ) : + elem.currentStyle, + styles = {}; + + if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { + len = style.length; + while ( len-- ) { + key = style[ len ]; + if ( typeof style[ key ] === "string" ) { + styles[ $.camelCase( key ) ] = style[ key ]; + } + } + // support: Opera, IE <9 + } else { + for ( key in style ) { + if ( typeof style[ key ] === "string" ) { + styles[ key ] = style[ key ]; + } + } + } + + return styles; +} + + +function styleDifference( oldStyle, newStyle ) { + var diff = {}, + name, value; + + for ( name in newStyle ) { + value = newStyle[ name ]; + if ( oldStyle[ name ] !== value ) { + if ( !shorthandStyles[ name ] ) { + if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { + diff[ name ] = value; + } + } + } + } + + return diff; +} + +// support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +$.effects.animateClass = function( value, duration, easing, callback ) { + var o = $.speed( duration, easing, callback ); + + return this.queue( function() { + var animated = $( this ), + baseClass = animated.attr( "class" ) || "", + applyClassChange, + allAnimations = o.children ? animated.find( "*" ).addBack() : animated; + + // map the animated objects to store the original styles. + allAnimations = allAnimations.map(function() { + var el = $( this ); + return { + el: el, + start: getElementStyles( this ) + }; + }); + + // apply class change + applyClassChange = function() { + $.each( classAnimationActions, function(i, action) { + if ( value[ action ] ) { + animated[ action + "Class" ]( value[ action ] ); + } + }); + }; + applyClassChange(); + + // map all animated objects again - calculate new styles and diff + allAnimations = allAnimations.map(function() { + this.end = getElementStyles( this.el[ 0 ] ); + this.diff = styleDifference( this.start, this.end ); + return this; + }); + + // apply original class + animated.attr( "class", baseClass ); + + // map all animated objects again - this time collecting a promise + allAnimations = allAnimations.map(function() { + var styleInfo = this, + dfd = $.Deferred(), + opts = $.extend({}, o, { + queue: false, + complete: function() { + dfd.resolve( styleInfo ); + } + }); + + this.el.animate( this.diff, opts ); + return dfd.promise(); + }); + + // once all animations have completed: + $.when.apply( $, allAnimations.get() ).done(function() { + + // set the final class + applyClassChange(); + + // for each animated element, + // clear all css properties that were animated + $.each( arguments, function() { + var el = this.el; + $.each( this.diff, function(key) { + el.css( key, "" ); + }); + }); + + // this is guarnteed to be there if you use jQuery.speed() + // it also handles dequeuing the next anim... + o.complete.call( animated[ 0 ] ); + }); + }); +}; + +$.fn.extend({ + addClass: (function( orig ) { + return function( classNames, speed, easing, callback ) { + return speed ? + $.effects.animateClass.call( this, + { add: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + })( $.fn.addClass ), + + removeClass: (function( orig ) { + return function( classNames, speed, easing, callback ) { + return arguments.length > 1 ? + $.effects.animateClass.call( this, + { remove: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + })( $.fn.removeClass ), + + toggleClass: (function( orig ) { + return function( classNames, force, speed, easing, callback ) { + if ( typeof force === "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter + return orig.apply( this, arguments ); + } else { + return $.effects.animateClass.call( this, + (force ? { add: classNames } : { remove: classNames }), + speed, easing, callback ); + } + } else { + // without force parameter + return $.effects.animateClass.call( this, + { toggle: classNames }, force, speed, easing ); + } + }; + })( $.fn.toggleClass ), + + switchClass: function( remove, add, speed, easing, callback) { + return $.effects.animateClass.call( this, { + add: add, + remove: remove + }, speed, easing, callback ); + } +}); + +})(); + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +(function() { + +$.extend( $.effects, { + version: "1.10.4", + + // Saves a set of properties in a data storage + save: function( element, set ) { + for( var i=0; i < set.length; i++ ) { + if ( set[ i ] !== null ) { + element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); + } + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function( element, set ) { + var val, i; + for( i=0; i < set.length; i++ ) { + if ( set[ i ] !== null ) { + val = element.data( dataSpace + set[ i ] ); + // support: jQuery 1.6.2 + // http://bugs.jquery.com/ticket/9917 + // jQuery 1.6.2 incorrectly returns undefined for any falsy value. + // We can't differentiate between "" and 0 here, so we just assume + // empty string since it's likely to be a more common value... + if ( val === undefined ) { + val = ""; + } + element.css( set[ i ], val ); + } + } + }, + + setMode: function( el, mode ) { + if (mode === "toggle") { + mode = el.is( ":hidden" ) ? "show" : "hide"; + } + return mode; + }, + + // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + getBaseline: function( origin, original ) { + var y, x; + switch ( origin[ 0 ] ) { + case "top": y = 0; break; + case "middle": y = 0.5; break; + case "bottom": y = 1; break; + default: y = origin[ 0 ] / original.height; + } + switch ( origin[ 1 ] ) { + case "left": x = 0; break; + case "center": x = 0.5; break; + case "right": x = 1; break; + default: x = origin[ 1 ] / original.width; + } + return { + x: x, + y: y + }; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function( element ) { + + // if the element is already wrapped, return it + if ( element.parent().is( ".ui-effects-wrapper" )) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + "float": element.css( "float" ) + }, + wrapper = $( "<div></div>" ) + .addClass( "ui-effects-wrapper" ) + .css({ + fontSize: "100%", + background: "transparent", + border: "none", + margin: 0, + padding: 0 + }), + // Store the size in case width/height are defined in % - Fixes #5245 + size = { + width: element.width(), + height: element.height() + }, + active = document.activeElement; + + // support: Firefox + // Firefox incorrectly exposes anonymous content + // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 + try { + active.id; + } catch( e ) { + active = document.body; + } + + element.wrap( wrapper ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if ( element.css( "position" ) === "static" ) { + wrapper.css({ position: "relative" }); + element.css({ position: "relative" }); + } else { + $.extend( props, { + position: element.css( "position" ), + zIndex: element.css( "z-index" ) + }); + $.each([ "top", "left", "bottom", "right" ], function(i, pos) { + props[ pos ] = element.css( pos ); + if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { + props[ pos ] = "auto"; + } + }); + element.css({ + position: "relative", + top: 0, + left: 0, + right: "auto", + bottom: "auto" + }); + } + element.css(size); + + return wrapper.css( props ).show(); + }, + + removeWrapper: function( element ) { + var active = document.activeElement; + + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + element.parent().replaceWith( element ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + } + + + return element; + }, + + setTransition: function( element, list, factor, value ) { + value = value || {}; + $.each( list, function( i, x ) { + var unit = element.cssUnit( x ); + if ( unit[ 0 ] > 0 ) { + value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; + } + }); + return value; + } +}); + +// return an effect options object for the given parameters: +function _normalizeArguments( effect, options, speed, callback ) { + + // allow passing all options as the first parameter + if ( $.isPlainObject( effect ) ) { + options = effect; + effect = effect.effect; + } + + // convert to an object + effect = { effect: effect }; + + // catch (effect, null, ...) + if ( options == null ) { + options = {}; + } + + // catch (effect, callback) + if ( $.isFunction( options ) ) { + callback = options; + speed = null; + options = {}; + } + + // catch (effect, speed, ?) + if ( typeof options === "number" || $.fx.speeds[ options ] ) { + callback = speed; + speed = options; + options = {}; + } + + // catch (effect, options, callback) + if ( $.isFunction( speed ) ) { + callback = speed; + speed = null; + } + + // add options to effect + if ( options ) { + $.extend( effect, options ); + } + + speed = speed || options.duration; + effect.duration = $.fx.off ? 0 : + typeof speed === "number" ? speed : + speed in $.fx.speeds ? $.fx.speeds[ speed ] : + $.fx.speeds._default; + + effect.complete = callback || options.complete; + + return effect; +} + +function standardAnimationOption( option ) { + // Valid standard speeds (nothing, number, named speed) + if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { + return true; + } + + // Invalid strings - treat as "normal" speed + if ( typeof option === "string" && !$.effects.effect[ option ] ) { + return true; + } + + // Complete callback + if ( $.isFunction( option ) ) { + return true; + } + + // Options hash (but not naming an effect) + if ( typeof option === "object" && !option.effect ) { + return true; + } + + // Didn't match any standard API + return false; +} + +$.fn.extend({ + effect: function( /* effect, options, speed, callback */ ) { + var args = _normalizeArguments.apply( this, arguments ), + mode = args.mode, + queue = args.queue, + effectMethod = $.effects.effect[ args.effect ]; + + if ( $.fx.off || !effectMethod ) { + // delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args.duration, args.complete ); + } else { + return this.each( function() { + if ( args.complete ) { + args.complete.call( this ); + } + }); + } + } + + function run( next ) { + var elem = $( this ), + complete = args.complete, + mode = args.mode; + + function done() { + if ( $.isFunction( complete ) ) { + complete.call( elem[0] ); + } + if ( $.isFunction( next ) ) { + next(); + } + } + + // If the element already has the correct final state, delegate to + // the core methods so the internal tracking of "olddisplay" works. + if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[0], args, done ); + } + } + + return queue === false ? this.each( run ) : this.queue( queue || "fx", run ); + }, + + show: (function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "show"; + return this.effect.call( this, args ); + } + }; + })( $.fn.show ), + + hide: (function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "hide"; + return this.effect.call( this, args ); + } + }; + })( $.fn.hide ), + + toggle: (function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) || typeof option === "boolean" ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "toggle"; + return this.effect.call( this, args ); + } + }; + })( $.fn.toggle ), + + // helper functions + cssUnit: function(key) { + var style = this.css( key ), + val = []; + + $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { + if ( style.indexOf( unit ) > 0 ) { + val = [ parseFloat( style ), unit ]; + } + }); + return val; + } +}); + +})(); + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +(function() { + +// based on easing equations from Robert Penner (http://www.robertpenner.com/easing) + +var baseEasings = {}; + +$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { + baseEasings[ name ] = function( p ) { + return Math.pow( p, i + 2 ); + }; +}); + +$.extend( baseEasings, { + Sine: function ( p ) { + return 1 - Math.cos( p * Math.PI / 2 ); + }, + Circ: function ( p ) { + return 1 - Math.sqrt( 1 - p * p ); + }, + Elastic: function( p ) { + return p === 0 || p === 1 ? p : + -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 ); + }, + Back: function( p ) { + return p * p * ( 3 * p - 2 ); + }, + Bounce: function ( p ) { + var pow2, + bounce = 4; + + while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} + return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); + } +}); + +$.each( baseEasings, function( name, easeIn ) { + $.easing[ "easeIn" + name ] = easeIn; + $.easing[ "easeOut" + name ] = function( p ) { + return 1 - easeIn( 1 - p ); + }; + $.easing[ "easeInOut" + name ] = function( p ) { + return p < 0.5 ? + easeIn( p * 2 ) / 2 : + 1 - easeIn( p * -2 + 2 ) / 2; + }; +}); + +})(); + +})(jQuery); +(function( $, undefined ) { + +var rvertical = /up|down|vertical/, + rpositivemotion = /up|left|vertical|horizontal/; + +$.effects.effect.blind = function( o, done ) { + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + direction = o.direction || "up", + vertical = rvertical.test( direction ), + ref = vertical ? "height" : "width", + ref2 = vertical ? "top" : "left", + motion = rpositivemotion.test( direction ), + animation = {}, + show = mode === "show", + wrapper, distance, margin; + + // if already wrapped, the wrapper's properties are my property. #6245 + if ( el.parent().is( ".ui-effects-wrapper" ) ) { + $.effects.save( el.parent(), props ); + } else { + $.effects.save( el, props ); + } + el.show(); + wrapper = $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + + distance = wrapper[ ref ](); + margin = parseFloat( wrapper.css( ref2 ) ) || 0; + + animation[ ref ] = show ? distance : 0; + if ( !motion ) { + el + .css( vertical ? "bottom" : "right", 0 ) + .css( vertical ? "top" : "left", "auto" ) + .css({ position: "absolute" }); + + animation[ ref2 ] = show ? margin : distance + margin; + } + + // start at 0 if we are showing + if ( show ) { + wrapper.css( ref, 0 ); + if ( ! motion ) { + wrapper.css( ref2, margin + distance ); + } + } + + // Animate + wrapper.animate( animation, { + duration: o.duration, + easing: o.easing, + queue: false, + complete: function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); + +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.bounce = function( o, done ) { + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + + // defaults: + mode = $.effects.setMode( el, o.mode || "effect" ), + hide = mode === "hide", + show = mode === "show", + direction = o.direction || "up", + distance = o.distance, + times = o.times || 5, + + // number of internal animations + anims = times * 2 + ( show || hide ? 1 : 0 ), + speed = o.duration / anims, + easing = o.easing, + + // utility: + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ), + i, + upAnim, + downAnim, + + // we will need to re-assemble the queue to stack our animations in place + queue = el.queue(), + queuelen = queue.length; + + // Avoid touching opacity to prevent clearType and PNG issues in IE + if ( show || hide ) { + props.push( "opacity" ); + } + + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); // Create Wrapper + + // default distance for the BIGGEST bounce is the outer Distance / 3 + if ( !distance ) { + distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; + } + + if ( show ) { + downAnim = { opacity: 1 }; + downAnim[ ref ] = 0; + + // if we are showing, force opacity 0 and set the initial position + // then do the "first" animation + el.css( "opacity", 0 ) + .css( ref, motion ? -distance * 2 : distance * 2 ) + .animate( downAnim, speed, easing ); + } + + // start at the smallest distance if we are hiding + if ( hide ) { + distance = distance / Math.pow( 2, times - 1 ); + } + + downAnim = {}; + downAnim[ ref ] = 0; + // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here + for ( i = 0; i < times; i++ ) { + upAnim = {}; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + el.animate( upAnim, speed, easing ) + .animate( downAnim, speed, easing ); + + distance = hide ? distance * 2 : distance / 2; + } + + // Last Bounce when Hiding + if ( hide ) { + upAnim = { opacity: 0 }; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + el.animate( upAnim, speed, easing ); + } + + el.queue(function() { + if ( hide ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + }); + + // inject all the animations we just queued to be first in line (after "inprogress") + if ( queuelen > 1) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); + } + el.dequeue(); + +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.clip = function( o, done ) { + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + direction = o.direction || "vertical", + vert = direction === "vertical", + size = vert ? "height" : "width", + position = vert ? "top" : "left", + animation = {}, + wrapper, animate, distance; + + // Save & Show + $.effects.save( el, props ); + el.show(); + + // Create Wrapper + wrapper = $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + animate = ( el[0].tagName === "IMG" ) ? wrapper : el; + distance = animate[ size ](); + + // Shift + if ( show ) { + animate.css( size, 0 ); + animate.css( position, distance / 2 ); + } + + // Create Animation Object: + animation[ size ] = show ? distance : 0; + animation[ position ] = show ? 0 : distance / 2; + + // Animate + animate.animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( !show ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); + +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.drop = function( o, done ) { + + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + direction = o.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg", + animation = { + opacity: show ? 1 : 0 + }, + distance; + + // Adjust + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); + + distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2; + + if ( show ) { + el + .css( "opacity", 0 ) + .css( ref, motion === "pos" ? -distance : distance ); + } + + // Animation + animation[ ref ] = ( show ? + ( motion === "pos" ? "+=" : "-=" ) : + ( motion === "pos" ? "-=" : "+=" ) ) + + distance; + + // Animate + el.animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.explode = function( o, done ) { + + var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3, + cells = rows, + el = $( this ), + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + + // show and then visibility:hidden the element before calculating offset + offset = el.show().css( "visibility", "hidden" ).offset(), + + // width and height of a piece + width = Math.ceil( el.outerWidth() / cells ), + height = Math.ceil( el.outerHeight() / rows ), + pieces = [], + + // loop + i, j, left, top, mx, my; + + // children animate complete: + function childComplete() { + pieces.push( this ); + if ( pieces.length === rows * cells ) { + animComplete(); + } + } + + // clone the element for each row and cell. + for( i = 0; i < rows ; i++ ) { // ===> + top = offset.top + i * height; + my = i - ( rows - 1 ) / 2 ; + + for( j = 0; j < cells ; j++ ) { // ||| + left = offset.left + j * width; + mx = j - ( cells - 1 ) / 2 ; + + // Create a clone of the now hidden main element that will be absolute positioned + // within a wrapper div off the -left and -top equal to size of our pieces + el + .clone() + .appendTo( "body" ) + .wrap( "<div></div>" ) + .css({ + position: "absolute", + visibility: "visible", + left: -j * width, + top: -i * height + }) + + // select the wrapper - make it overflow: hidden and absolute positioned based on + // where the original was located +left and +top equal to the size of pieces + .parent() + .addClass( "ui-effects-explode" ) + .css({ + position: "absolute", + overflow: "hidden", + width: width, + height: height, + left: left + ( show ? mx * width : 0 ), + top: top + ( show ? my * height : 0 ), + opacity: show ? 0 : 1 + }).animate({ + left: left + ( show ? 0 : mx * width ), + top: top + ( show ? 0 : my * height ), + opacity: show ? 1 : 0 + }, o.duration || 500, o.easing, childComplete ); + } + } + + function animComplete() { + el.css({ + visibility: "visible" + }); + $( pieces ).remove(); + if ( !show ) { + el.hide(); + } + done(); + } +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.fade = function( o, done ) { + var el = $( this ), + mode = $.effects.setMode( el, o.mode || "toggle" ); + + el.animate({ + opacity: mode + }, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: done + }); +}; + +})( jQuery ); +(function( $, undefined ) { + +$.effects.effect.fold = function( o, done ) { + + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + show = mode === "show", + hide = mode === "hide", + size = o.size || 15, + percent = /([0-9]+)%/.exec( size ), + horizFirst = !!o.horizFirst, + widthFirst = show !== horizFirst, + ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ], + duration = o.duration / 2, + wrapper, distance, + animation1 = {}, + animation2 = {}; + + $.effects.save( el, props ); + el.show(); + + // Create Wrapper + wrapper = $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + distance = widthFirst ? + [ wrapper.width(), wrapper.height() ] : + [ wrapper.height(), wrapper.width() ]; + + if ( percent ) { + size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; + } + if ( show ) { + wrapper.css( horizFirst ? { + height: 0, + width: size + } : { + height: size, + width: 0 + }); + } + + // Animation + animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size; + animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0; + + // Animate + wrapper + .animate( animation1, duration, o.easing ) + .animate( animation2, duration, o.easing, function() { + if ( hide ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + }); + +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.highlight = function( o, done ) { + var elem = $( this ), + props = [ "backgroundImage", "backgroundColor", "opacity" ], + mode = $.effects.setMode( elem, o.mode || "show" ), + animation = { + backgroundColor: elem.css( "backgroundColor" ) + }; + + if (mode === "hide") { + animation.opacity = 0; + } + + $.effects.save( elem, props ); + + elem + .show() + .css({ + backgroundImage: "none", + backgroundColor: o.color || "#ffff99" + }) + .animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( mode === "hide" ) { + elem.hide(); + } + $.effects.restore( elem, props ); + done(); + } + }); +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.pulsate = function( o, done ) { + var elem = $( this ), + mode = $.effects.setMode( elem, o.mode || "show" ), + show = mode === "show", + hide = mode === "hide", + showhide = ( show || mode === "hide" ), + + // showing or hiding leaves of the "last" animation + anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), + duration = o.duration / anims, + animateTo = 0, + queue = elem.queue(), + queuelen = queue.length, + i; + + if ( show || !elem.is(":visible")) { + elem.css( "opacity", 0 ).show(); + animateTo = 1; + } + + // anims - 1 opacity "toggles" + for ( i = 1; i < anims; i++ ) { + elem.animate({ + opacity: animateTo + }, duration, o.easing ); + animateTo = 1 - animateTo; + } + + elem.animate({ + opacity: animateTo + }, duration, o.easing); + + elem.queue(function() { + if ( hide ) { + elem.hide(); + } + done(); + }); + + // We just queued up "anims" animations, we need to put them next in the queue + if ( queuelen > 1 ) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); + } + elem.dequeue(); +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.puff = function( o, done ) { + var elem = $( this ), + mode = $.effects.setMode( elem, o.mode || "hide" ), + hide = mode === "hide", + percent = parseInt( o.percent, 10 ) || 150, + factor = percent / 100, + original = { + height: elem.height(), + width: elem.width(), + outerHeight: elem.outerHeight(), + outerWidth: elem.outerWidth() + }; + + $.extend( o, { + effect: "scale", + queue: false, + fade: true, + mode: mode, + complete: done, + percent: hide ? percent : 100, + from: hide ? + original : + { + height: original.height * factor, + width: original.width * factor, + outerHeight: original.outerHeight * factor, + outerWidth: original.outerWidth * factor + } + }); + + elem.effect( o ); +}; + +$.effects.effect.scale = function( o, done ) { + + // Create element + var el = $( this ), + options = $.extend( true, {}, o ), + mode = $.effects.setMode( el, o.mode || "effect" ), + percent = parseInt( o.percent, 10 ) || + ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ), + direction = o.direction || "both", + origin = o.origin, + original = { + height: el.height(), + width: el.width(), + outerHeight: el.outerHeight(), + outerWidth: el.outerWidth() + }, + factor = { + y: direction !== "horizontal" ? (percent / 100) : 1, + x: direction !== "vertical" ? (percent / 100) : 1 + }; + + // We are going to pass this effect to the size effect: + options.effect = "size"; + options.queue = false; + options.complete = done; + + // Set default origin and restore for show/hide + if ( mode !== "effect" ) { + options.origin = origin || ["middle","center"]; + options.restore = true; + } + + options.from = o.from || ( mode === "show" ? { + height: 0, + width: 0, + outerHeight: 0, + outerWidth: 0 + } : original ); + options.to = { + height: original.height * factor.y, + width: original.width * factor.x, + outerHeight: original.outerHeight * factor.y, + outerWidth: original.outerWidth * factor.x + }; + + // Fade option to support puff + if ( options.fade ) { + if ( mode === "show" ) { + options.from.opacity = 0; + options.to.opacity = 1; + } + if ( mode === "hide" ) { + options.from.opacity = 1; + options.to.opacity = 0; + } + } + + // Animate + el.effect( options ); + +}; + +$.effects.effect.size = function( o, done ) { + + // Create element + var original, baseline, factor, + el = $( this ), + props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ], + + // Always restore + props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ], + + // Copy for children + props2 = [ "width", "height", "overflow" ], + cProps = [ "fontSize" ], + vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], + hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], + + // Set options + mode = $.effects.setMode( el, o.mode || "effect" ), + restore = o.restore || mode !== "effect", + scale = o.scale || "both", + origin = o.origin || [ "middle", "center" ], + position = el.css( "position" ), + props = restore ? props0 : props1, + zero = { + height: 0, + width: 0, + outerHeight: 0, + outerWidth: 0 + }; + + if ( mode === "show" ) { + el.show(); + } + original = { + height: el.height(), + width: el.width(), + outerHeight: el.outerHeight(), + outerWidth: el.outerWidth() + }; + + if ( o.mode === "toggle" && mode === "show" ) { + el.from = o.to || zero; + el.to = o.from || original; + } else { + el.from = o.from || ( mode === "show" ? zero : original ); + el.to = o.to || ( mode === "hide" ? zero : original ); + } + + // Set scaling factor + factor = { + from: { + y: el.from.height / original.height, + x: el.from.width / original.width + }, + to: { + y: el.to.height / original.height, + x: el.to.width / original.width + } + }; + + // Scale the css box + if ( scale === "box" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + props = props.concat( vProps ); + el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from ); + el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + props = props.concat( hProps ); + el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from ); + el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to ); + } + } + + // Scale the content + if ( scale === "content" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + props = props.concat( cProps ).concat( props2 ); + el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from ); + el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to ); + } + } + + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); + el.css( "overflow", "hidden" ).css( el.from ); + + // Adjust + if (origin) { // Calculate baseline shifts + baseline = $.effects.getBaseline( origin, original ); + el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y; + el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x; + el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y; + el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x; + } + el.css( el.from ); // set top & left + + // Animate + if ( scale === "content" || scale === "both" ) { // Scale the children + + // Add margins/font-size + vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps); + hProps = hProps.concat([ "marginLeft", "marginRight" ]); + props2 = props0.concat(vProps).concat(hProps); + + el.find( "*[width]" ).each( function(){ + var child = $( this ), + c_original = { + height: child.height(), + width: child.width(), + outerHeight: child.outerHeight(), + outerWidth: child.outerWidth() + }; + if (restore) { + $.effects.save(child, props2); + } + + child.from = { + height: c_original.height * factor.from.y, + width: c_original.width * factor.from.x, + outerHeight: c_original.outerHeight * factor.from.y, + outerWidth: c_original.outerWidth * factor.from.x + }; + child.to = { + height: c_original.height * factor.to.y, + width: c_original.width * factor.to.x, + outerHeight: c_original.height * factor.to.y, + outerWidth: c_original.width * factor.to.x + }; + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from ); + child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from ); + child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to ); + } + + // Animate children + child.css( child.from ); + child.animate( child.to, o.duration, o.easing, function() { + + // Restore children + if ( restore ) { + $.effects.restore( child, props2 ); + } + }); + }); + } + + // Animate + el.animate( el.to, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( el.to.opacity === 0 ) { + el.css( "opacity", el.from.opacity ); + } + if( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + if ( !restore ) { + + // we need to calculate our new positioning based on the scaling + if ( position === "static" ) { + el.css({ + position: "relative", + top: el.to.top, + left: el.to.left + }); + } else { + $.each([ "top", "left" ], function( idx, pos ) { + el.css( pos, function( _, str ) { + var val = parseInt( str, 10 ), + toRef = idx ? el.to.left : el.to.top; + + // if original was "auto", recalculate the new value from wrapper + if ( str === "auto" ) { + return toRef + "px"; + } + + return val + toRef + "px"; + }); + }); + } + } + + $.effects.removeWrapper( el ); + done(); + } + }); + +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.shake = function( o, done ) { + + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "effect" ), + direction = o.direction || "left", + distance = o.distance || 20, + times = o.times || 3, + anims = times * 2 + 1, + speed = Math.round(o.duration/anims), + ref = (direction === "up" || direction === "down") ? "top" : "left", + positiveMotion = (direction === "up" || direction === "left"), + animation = {}, + animation1 = {}, + animation2 = {}, + i, + + // we will need to re-assemble the queue to stack our animations in place + queue = el.queue(), + queuelen = queue.length; + + $.effects.save( el, props ); + el.show(); + $.effects.createWrapper( el ); + + // Animation + animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; + animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; + animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; + + // Animate + el.animate( animation, speed, o.easing ); + + // Shakes + for ( i = 1; i < times; i++ ) { + el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing ); + } + el + .animate( animation1, speed, o.easing ) + .animate( animation, speed / 2, o.easing ) + .queue(function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + }); + + // inject all the animations we just queued to be first in line (after "inprogress") + if ( queuelen > 1) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) ); + } + el.dequeue(); + +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.slide = function( o, done ) { + + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "width", "height" ], + mode = $.effects.setMode( el, o.mode || "show" ), + show = mode === "show", + direction = o.direction || "left", + ref = (direction === "up" || direction === "down") ? "top" : "left", + positiveMotion = (direction === "up" || direction === "left"), + distance, + animation = {}; + + // Adjust + $.effects.save( el, props ); + el.show(); + distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ); + + $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + + if ( show ) { + el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance ); + } + + // Animation + animation[ ref ] = ( show ? + ( positiveMotion ? "+=" : "-=") : + ( positiveMotion ? "-=" : "+=")) + + distance; + + // Animate + el.animate( animation, { + queue: false, + duration: o.duration, + easing: o.easing, + complete: function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); +}; + +})(jQuery); +(function( $, undefined ) { + +$.effects.effect.transfer = function( o, done ) { + var elem = $( this ), + target = $( o.to ), + targetFixed = target.css( "position" ) === "fixed", + body = $("body"), + fixTop = targetFixed ? body.scrollTop() : 0, + fixLeft = targetFixed ? body.scrollLeft() : 0, + endPosition = target.offset(), + animation = { + top: endPosition.top - fixTop , + left: endPosition.left - fixLeft , + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = elem.offset(), + transfer = $( "<div class='ui-effects-transfer'></div>" ) + .appendTo( document.body ) + .addClass( o.className ) + .css({ + top: startPosition.top - fixTop , + left: startPosition.left - fixLeft , + height: elem.innerHeight(), + width: elem.innerWidth(), + position: targetFixed ? "fixed" : "absolute" + }) + .animate( animation, o.duration, o.easing, function() { + transfer.remove(); + done(); + }); +}; + +})(jQuery); +(function( $, undefined ) { + +$.widget( "ui.menu", { + version: "1.10.4", + defaultElement: "<ul>", + delay: 300, + options: { + icons: { + submenu: "ui-icon-carat-1-e" + }, + menus: "ul", + position: { + my: "left top", + at: "right top" + }, + role: "menu", + + // callbacks + blur: null, + focus: null, + select: null + }, + + _create: function() { + this.activeMenu = this.element; + // flag used to prevent firing of the click handler + // as the event bubbles up through nested menus + this.mouseHandled = false; + this.element + .uniqueId() + .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) + .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ) + .attr({ + role: this.options.role, + tabIndex: 0 + }) + // need to catch all clicks on disabled menu + // not possible through _on + .bind( "click" + this.eventNamespace, $.proxy(function( event ) { + if ( this.options.disabled ) { + event.preventDefault(); + } + }, this )); + + if ( this.options.disabled ) { + this.element + .addClass( "ui-state-disabled" ) + .attr( "aria-disabled", "true" ); + } + + this._on({ + // Prevent focus from sticking to links inside menu after clicking + // them (focus should always stay on UL during navigation). + "mousedown .ui-menu-item > a": function( event ) { + event.preventDefault(); + }, + "click .ui-state-disabled > a": function( event ) { + event.preventDefault(); + }, + "click .ui-menu-item:has(a)": function( event ) { + var target = $( event.target ).closest( ".ui-menu-item" ); + if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { + this.select( event ); + + // Only set the mouseHandled flag if the event will bubble, see #9469. + if ( !event.isPropagationStopped() ) { + this.mouseHandled = true; + } + + // Open submenu on click + if ( target.has( ".ui-menu" ).length ) { + this.expand( event ); + } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) { + + // Redirect focus to the menu + this.element.trigger( "focus", [ true ] ); + + // If the active item is on the top level, let it stay active. + // Otherwise, blur the active item since it is no longer visible. + if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { + clearTimeout( this.timer ); + } + } + } + }, + "mouseenter .ui-menu-item": function( event ) { + var target = $( event.currentTarget ); + // Remove ui-state-active class from siblings of the newly focused menu item + // to avoid a jump caused by adjacent elements both having a class with a border + target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" ); + this.focus( event, target ); + }, + mouseleave: "collapseAll", + "mouseleave .ui-menu": "collapseAll", + focus: function( event, keepActiveItem ) { + // If there's already an active item, keep it active + // If not, activate the first item + var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 ); + + if ( !keepActiveItem ) { + this.focus( event, item ); + } + }, + blur: function( event ) { + this._delay(function() { + if ( !$.contains( this.element[0], this.document[0].activeElement ) ) { + this.collapseAll( event ); + } + }); + }, + keydown: "_keydown" + }); + + this.refresh(); + + // Clicks outside of a menu collapse any open menus + this._on( this.document, { + click: function( event ) { + if ( !$( event.target ).closest( ".ui-menu" ).length ) { + this.collapseAll( event ); + } + + // Reset the mouseHandled flag + this.mouseHandled = false; + } + }); + }, + + _destroy: function() { + // Destroy (sub)menus + this.element + .removeAttr( "aria-activedescendant" ) + .find( ".ui-menu" ).addBack() + .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" ) + .removeAttr( "role" ) + .removeAttr( "tabIndex" ) + .removeAttr( "aria-labelledby" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-disabled" ) + .removeUniqueId() + .show(); + + // Destroy menu items + this.element.find( ".ui-menu-item" ) + .removeClass( "ui-menu-item" ) + .removeAttr( "role" ) + .removeAttr( "aria-disabled" ) + .children( "a" ) + .removeUniqueId() + .removeClass( "ui-corner-all ui-state-hover" ) + .removeAttr( "tabIndex" ) + .removeAttr( "role" ) + .removeAttr( "aria-haspopup" ) + .children().each( function() { + var elem = $( this ); + if ( elem.data( "ui-menu-submenu-carat" ) ) { + elem.remove(); + } + }); + + // Destroy menu dividers + this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" ); + }, + + _keydown: function( event ) { + var match, prev, character, skip, regex, + preventDefault = true; + + function escape( value ) { + return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.PAGE_UP: + this.previousPage( event ); + break; + case $.ui.keyCode.PAGE_DOWN: + this.nextPage( event ); + break; + case $.ui.keyCode.HOME: + this._move( "first", "first", event ); + break; + case $.ui.keyCode.END: + this._move( "last", "last", event ); + break; + case $.ui.keyCode.UP: + this.previous( event ); + break; + case $.ui.keyCode.DOWN: + this.next( event ); + break; + case $.ui.keyCode.LEFT: + this.collapse( event ); + break; + case $.ui.keyCode.RIGHT: + if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { + this.expand( event ); + } + break; + case $.ui.keyCode.ENTER: + case $.ui.keyCode.SPACE: + this._activate( event ); + break; + case $.ui.keyCode.ESCAPE: + this.collapse( event ); + break; + default: + preventDefault = false; + prev = this.previousFilter || ""; + character = String.fromCharCode( event.keyCode ); + skip = false; + + clearTimeout( this.filterTimer ); + + if ( character === prev ) { + skip = true; + } else { + character = prev + character; + } + + regex = new RegExp( "^" + escape( character ), "i" ); + match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { + return regex.test( $( this ).children( "a" ).text() ); + }); + match = skip && match.index( this.active.next() ) !== -1 ? + this.active.nextAll( ".ui-menu-item" ) : + match; + + // If no matches on the current filter, reset to the last character pressed + // to move down the menu to the first item that starts with that character + if ( !match.length ) { + character = String.fromCharCode( event.keyCode ); + regex = new RegExp( "^" + escape( character ), "i" ); + match = this.activeMenu.children( ".ui-menu-item" ).filter(function() { + return regex.test( $( this ).children( "a" ).text() ); + }); + } + + if ( match.length ) { + this.focus( event, match ); + if ( match.length > 1 ) { + this.previousFilter = character; + this.filterTimer = this._delay(function() { + delete this.previousFilter; + }, 1000 ); + } else { + delete this.previousFilter; + } + } else { + delete this.previousFilter; + } + } + + if ( preventDefault ) { + event.preventDefault(); + } + }, + + _activate: function( event ) { + if ( !this.active.is( ".ui-state-disabled" ) ) { + if ( this.active.children( "a[aria-haspopup='true']" ).length ) { + this.expand( event ); + } else { + this.select( event ); + } + } + }, + + refresh: function() { + var menus, + icon = this.options.icons.submenu, + submenus = this.element.find( this.options.menus ); + + this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length ); + + // Initialize nested menus + submenus.filter( ":not(.ui-menu)" ) + .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" ) + .hide() + .attr({ + role: this.options.role, + "aria-hidden": "true", + "aria-expanded": "false" + }) + .each(function() { + var menu = $( this ), + item = menu.prev( "a" ), + submenuCarat = $( "<span>" ) + .addClass( "ui-menu-icon ui-icon " + icon ) + .data( "ui-menu-submenu-carat", true ); + + item + .attr( "aria-haspopup", "true" ) + .prepend( submenuCarat ); + menu.attr( "aria-labelledby", item.attr( "id" ) ); + }); + + menus = submenus.add( this.element ); + + // Don't refresh list items that are already adapted + menus.children( ":not(.ui-menu-item):has(a)" ) + .addClass( "ui-menu-item" ) + .attr( "role", "presentation" ) + .children( "a" ) + .uniqueId() + .addClass( "ui-corner-all" ) + .attr({ + tabIndex: -1, + role: this._itemRole() + }); + + // Initialize unlinked menu-items containing spaces and/or dashes only as dividers + menus.children( ":not(.ui-menu-item)" ).each(function() { + var item = $( this ); + // hyphen, em dash, en dash + if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) { + item.addClass( "ui-widget-content ui-menu-divider" ); + } + }); + + // Add aria-disabled attribute to any disabled menu item + menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); + + // If the active item has been removed, blur the menu + if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + this.blur(); + } + }, + + _itemRole: function() { + return { + menu: "menuitem", + listbox: "option" + }[ this.options.role ]; + }, + + _setOption: function( key, value ) { + if ( key === "icons" ) { + this.element.find( ".ui-menu-icon" ) + .removeClass( this.options.icons.submenu ) + .addClass( value.submenu ); + } + this._super( key, value ); + }, + + focus: function( event, item ) { + var nested, focused; + this.blur( event, event && event.type === "focus" ); + + this._scrollIntoView( item ); + + this.active = item.first(); + focused = this.active.children( "a" ).addClass( "ui-state-focus" ); + // Only update aria-activedescendant if there's a role + // otherwise we assume focus is managed elsewhere + if ( this.options.role ) { + this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); + } + + // Highlight active parent menu item, if any + this.active + .parent() + .closest( ".ui-menu-item" ) + .children( "a:first" ) + .addClass( "ui-state-active" ); + + if ( event && event.type === "keydown" ) { + this._close(); + } else { + this.timer = this._delay(function() { + this._close(); + }, this.delay ); + } + + nested = item.children( ".ui-menu" ); + if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) { + this._startOpening(nested); + } + this.activeMenu = item.parent(); + + this._trigger( "focus", event, { item: item } ); + }, + + _scrollIntoView: function( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height(); + itemHeight = item.height(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }, + + blur: function( event, fromFocus ) { + if ( !fromFocus ) { + clearTimeout( this.timer ); + } + + if ( !this.active ) { + return; + } + + this.active.children( "a" ).removeClass( "ui-state-focus" ); + this.active = null; + + this._trigger( "blur", event, { item: this.active } ); + }, + + _startOpening: function( submenu ) { + clearTimeout( this.timer ); + + // Don't open if already open fixes a Firefox bug that caused a .5 pixel + // shift in the submenu position when mousing over the carat icon + if ( submenu.attr( "aria-hidden" ) !== "true" ) { + return; + } + + this.timer = this._delay(function() { + this._close(); + this._open( submenu ); + }, this.delay ); + }, + + _open: function( submenu ) { + var position = $.extend({ + of: this.active + }, this.options.position ); + + clearTimeout( this.timer ); + this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) + .hide() + .attr( "aria-hidden", "true" ); + + submenu + .show() + .removeAttr( "aria-hidden" ) + .attr( "aria-expanded", "true" ) + .position( position ); + }, + + collapseAll: function( event, all ) { + clearTimeout( this.timer ); + this.timer = this._delay(function() { + // If we were passed an event, look for the submenu that contains the event + var currentMenu = all ? this.element : + $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); + + // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway + if ( !currentMenu.length ) { + currentMenu = this.element; + } + + this._close( currentMenu ); + + this.blur( event ); + this.activeMenu = currentMenu; + }, this.delay ); + }, + + // With no arguments, closes the currently active menu - if nothing is active + // it closes all menus. If passed an argument, it will search for menus BELOW + _close: function( startMenu ) { + if ( !startMenu ) { + startMenu = this.active ? this.active.parent() : this.element; + } + + startMenu + .find( ".ui-menu" ) + .hide() + .attr( "aria-hidden", "true" ) + .attr( "aria-expanded", "false" ) + .end() + .find( "a.ui-state-active" ) + .removeClass( "ui-state-active" ); + }, + + collapse: function( event ) { + var newItem = this.active && + this.active.parent().closest( ".ui-menu-item", this.element ); + if ( newItem && newItem.length ) { + this._close(); + this.focus( event, newItem ); + } + }, + + expand: function( event ) { + var newItem = this.active && + this.active + .children( ".ui-menu " ) + .children( ".ui-menu-item" ) + .first(); + + if ( newItem && newItem.length ) { + this._open( newItem.parent() ); + + // Delay so Firefox will not hide activedescendant change in expanding submenu from AT + this._delay(function() { + this.focus( event, newItem ); + }); + } + }, + + next: function( event ) { + this._move( "next", "first", event ); + }, + + previous: function( event ) { + this._move( "prev", "last", event ); + }, + + isFirstItem: function() { + return this.active && !this.active.prevAll( ".ui-menu-item" ).length; + }, + + isLastItem: function() { + return this.active && !this.active.nextAll( ".ui-menu-item" ).length; + }, + + _move: function( direction, filter, event ) { + var next; + if ( this.active ) { + if ( direction === "first" || direction === "last" ) { + next = this.active + [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) + .eq( -1 ); + } else { + next = this.active + [ direction + "All" ]( ".ui-menu-item" ) + .eq( 0 ); + } + } + if ( !next || !next.length || !this.active ) { + next = this.activeMenu.children( ".ui-menu-item" )[ filter ](); + } + + this.focus( event, next ); + }, + + nextPage: function( event ) { + var item, base, height; + + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isLastItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.nextAll( ".ui-menu-item" ).each(function() { + item = $( this ); + return item.offset().top - base - height < 0; + }); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.children( ".ui-menu-item" ) + [ !this.active ? "first" : "last" ]() ); + } + }, + + previousPage: function( event ) { + var item, base, height; + if ( !this.active ) { + this.next( event ); + return; + } + if ( this.isFirstItem() ) { + return; + } + if ( this._hasScroll() ) { + base = this.active.offset().top; + height = this.element.height(); + this.active.prevAll( ".ui-menu-item" ).each(function() { + item = $( this ); + return item.offset().top - base + height > 0; + }); + + this.focus( event, item ); + } else { + this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() ); + } + }, + + _hasScroll: function() { + return this.element.outerHeight() < this.element.prop( "scrollHeight" ); + }, + + select: function( event ) { + // TODO: It should never be possible to not have an active item at this + // point, but the tests don't trigger mouseenter before click. + this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); + var ui = { item: this.active }; + if ( !this.active.has( ".ui-menu" ).length ) { + this.collapseAll( event, true ); + } + this._trigger( "select", event, ui ); + } +}); + +}( jQuery )); +(function( $, undefined ) { + +$.widget( "ui.progressbar", { + version: "1.10.4", + options: { + max: 100, + value: 0, + + change: null, + complete: null + }, + + min: 0, + + _create: function() { + // Constrain initial value + this.oldValue = this.options.value = this._constrainedValue(); + + this.element + .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .attr({ + // Only set static values, aria-valuenow and aria-valuemax are + // set inside _refreshValue() + role: "progressbar", + "aria-valuemin": this.min + }); + + this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" ) + .appendTo( this.element ); + + this._refreshValue(); + }, + + _destroy: function() { + this.element + .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + + this.valueDiv.remove(); + }, + + value: function( newValue ) { + if ( newValue === undefined ) { + return this.options.value; + } + + this.options.value = this._constrainedValue( newValue ); + this._refreshValue(); + }, + + _constrainedValue: function( newValue ) { + if ( newValue === undefined ) { + newValue = this.options.value; + } + + this.indeterminate = newValue === false; + + // sanitize value + if ( typeof newValue !== "number" ) { + newValue = 0; + } + + return this.indeterminate ? false : + Math.min( this.options.max, Math.max( this.min, newValue ) ); + }, + + _setOptions: function( options ) { + // Ensure "value" option is set after other values (like max) + var value = options.value; + delete options.value; + + this._super( options ); + + this.options.value = this._constrainedValue( value ); + this._refreshValue(); + }, + + _setOption: function( key, value ) { + if ( key === "max" ) { + // Don't allow a max less than min + value = Math.max( this.min, value ); + } + + this._super( key, value ); + }, + + _percentage: function() { + return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min ); + }, + + _refreshValue: function() { + var value = this.options.value, + percentage = this._percentage(); + + this.valueDiv + .toggle( this.indeterminate || value > this.min ) + .toggleClass( "ui-corner-right", value === this.options.max ) + .width( percentage.toFixed(0) + "%" ); + + this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate ); + + if ( this.indeterminate ) { + this.element.removeAttr( "aria-valuenow" ); + if ( !this.overlayDiv ) { + this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv ); + } + } else { + this.element.attr({ + "aria-valuemax": this.options.max, + "aria-valuenow": value + }); + if ( this.overlayDiv ) { + this.overlayDiv.remove(); + this.overlayDiv = null; + } + } + + if ( this.oldValue !== value ) { + this.oldValue = value; + this._trigger( "change" ); + } + if ( value === this.options.max ) { + this._trigger( "complete" ); + } + } +}); + +})( jQuery ); +(function( $, undefined ) { + +function num(v) { + return parseInt(v, 10) || 0; +} + +function isNumber(value) { + return !isNaN(parseInt(value, 10)); +} + +$.widget("ui.resizable", $.ui.mouse, { + version: "1.10.4", + widgetEventPrefix: "resize", + options: { + alsoResize: false, + animate: false, + animateDuration: "slow", + animateEasing: "swing", + aspectRatio: false, + autoHide: false, + containment: false, + ghost: false, + grid: false, + handles: "e,s,se", + helper: false, + maxHeight: null, + maxWidth: null, + minHeight: 10, + minWidth: 10, + // See #7960 + zIndex: 90, + + // callbacks + resize: null, + start: null, + stop: null + }, + _create: function() { + + var n, i, handle, axis, hname, + that = this, + o = this.options; + this.element.addClass("ui-resizable"); + + $.extend(this, { + _aspectRatio: !!(o.aspectRatio), + aspectRatio: o.aspectRatio, + originalElement: this.element, + _proportionallyResizeElements: [], + _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null + }); + + //Wrap the element if it cannot hold child nodes + if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { + + //Create a wrapper element and set the wrapper to the new current internal element + this.element.wrap( + $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({ + position: this.element.css("position"), + width: this.element.outerWidth(), + height: this.element.outerHeight(), + top: this.element.css("top"), + left: this.element.css("left") + }) + ); + + //Overwrite the original this.element + this.element = this.element.parent().data( + "ui-resizable", this.element.data("ui-resizable") + ); + + this.elementIsWrapper = true; + + //Move margins to the wrapper + this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); + this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); + + //Prevent Safari textarea resize + this.originalResizeStyle = this.originalElement.css("resize"); + this.originalElement.css("resize", "none"); + + //Push the actual element to our proportionallyResize internal array + this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" })); + + // avoid IE jump (hard set the margin) + this.originalElement.css({ margin: this.originalElement.css("margin") }); + + // fix handlers offset + this._proportionallyResize(); + + } + + this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" }); + if(this.handles.constructor === String) { + + if ( this.handles === "all") { + this.handles = "n,e,s,w,se,sw,ne,nw"; + } + + n = this.handles.split(","); + this.handles = {}; + + for(i = 0; i < n.length; i++) { + + handle = $.trim(n[i]); + hname = "ui-resizable-"+handle; + axis = $("<div class='ui-resizable-handle " + hname + "'></div>"); + + // Apply zIndex to all handles - see #7960 + axis.css({ zIndex: o.zIndex }); + + //TODO : What's going on here? + if ("se" === handle) { + axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se"); + } + + //Insert into internal handles object and append to element + this.handles[handle] = ".ui-resizable-"+handle; + this.element.append(axis); + } + + } + + this._renderAxis = function(target) { + + var i, axis, padPos, padWrapper; + + target = target || this.element; + + for(i in this.handles) { + + if(this.handles[i].constructor === String) { + this.handles[i] = $(this.handles[i], this.element).show(); + } + + //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) + if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { + + axis = $(this.handles[i], this.element); + + //Checking the correct pad and border + padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); + + //The padding type i have to apply... + padPos = [ "padding", + /ne|nw|n/.test(i) ? "Top" : + /se|sw|s/.test(i) ? "Bottom" : + /^e$/.test(i) ? "Right" : "Left" ].join(""); + + target.css(padPos, padWrapper); + + this._proportionallyResize(); + + } + + //TODO: What's that good for? There's not anything to be executed left + if(!$(this.handles[i]).length) { + continue; + } + } + }; + + //TODO: make renderAxis a prototype function + this._renderAxis(this.element); + + this._handles = $(".ui-resizable-handle", this.element) + .disableSelection(); + + //Matching axis name + this._handles.mouseover(function() { + if (!that.resizing) { + if (this.className) { + axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); + } + //Axis, default = se + that.axis = axis && axis[1] ? axis[1] : "se"; + } + }); + + //If we want to auto hide the elements + if (o.autoHide) { + this._handles.hide(); + $(this.element) + .addClass("ui-resizable-autohide") + .mouseenter(function() { + if (o.disabled) { + return; + } + $(this).removeClass("ui-resizable-autohide"); + that._handles.show(); + }) + .mouseleave(function(){ + if (o.disabled) { + return; + } + if (!that.resizing) { + $(this).addClass("ui-resizable-autohide"); + that._handles.hide(); + } + }); + } + + //Initialize the mouse interaction + this._mouseInit(); + + }, + + _destroy: function() { + + this._mouseDestroy(); + + var wrapper, + _destroy = function(exp) { + $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") + .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove(); + }; + + //TODO: Unwrap at same DOM position + if (this.elementIsWrapper) { + _destroy(this.element); + wrapper = this.element; + this.originalElement.css({ + position: wrapper.css("position"), + width: wrapper.outerWidth(), + height: wrapper.outerHeight(), + top: wrapper.css("top"), + left: wrapper.css("left") + }).insertAfter( wrapper ); + wrapper.remove(); + } + + this.originalElement.css("resize", this.originalResizeStyle); + _destroy(this.originalElement); + + return this; + }, + + _mouseCapture: function(event) { + var i, handle, + capture = false; + + for (i in this.handles) { + handle = $(this.handles[i])[0]; + if (handle === event.target || $.contains(handle, event.target)) { + capture = true; + } + } + + return !this.options.disabled && capture; + }, + + _mouseStart: function(event) { + + var curleft, curtop, cursor, + o = this.options, + iniPos = this.element.position(), + el = this.element; + + this.resizing = true; + + // bugfix for http://dev.jquery.com/ticket/1749 + if ( (/absolute/).test( el.css("position") ) ) { + el.css({ position: "absolute", top: el.css("top"), left: el.css("left") }); + } else if (el.is(".ui-draggable")) { + el.css({ position: "absolute", top: iniPos.top, left: iniPos.left }); + } + + this._renderProxy(); + + curleft = num(this.helper.css("left")); + curtop = num(this.helper.css("top")); + + if (o.containment) { + curleft += $(o.containment).scrollLeft() || 0; + curtop += $(o.containment).scrollTop() || 0; + } + + //Store needed variables + this.offset = this.helper.offset(); + this.position = { left: curleft, top: curtop }; + this.size = this._helper ? { width: this.helper.width(), height: this.helper.height() } : { width: el.width(), height: el.height() }; + this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalPosition = { left: curleft, top: curtop }; + this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; + this.originalMousePosition = { left: event.pageX, top: event.pageY }; + + //Aspect Ratio + this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); + + cursor = $(".ui-resizable-" + this.axis).css("cursor"); + $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor); + + el.addClass("ui-resizable-resizing"); + this._propagate("start", event); + return true; + }, + + _mouseDrag: function(event) { + + //Increase performance, avoid regex + var data, + el = this.helper, props = {}, + smp = this.originalMousePosition, + a = this.axis, + prevTop = this.position.top, + prevLeft = this.position.left, + prevWidth = this.size.width, + prevHeight = this.size.height, + dx = (event.pageX-smp.left)||0, + dy = (event.pageY-smp.top)||0, + trigger = this._change[a]; + + if (!trigger) { + return false; + } + + // Calculate the attrs that will be change + data = trigger.apply(this, [event, dx, dy]); + + // Put this in the mouseDrag handler since the user can start pressing shift while resizing + this._updateVirtualBoundaries(event.shiftKey); + if (this._aspectRatio || event.shiftKey) { + data = this._updateRatio(data, event); + } + + data = this._respectSize(data, event); + + this._updateCache(data); + + // plugins callbacks need to be called first + this._propagate("resize", event); + + if (this.position.top !== prevTop) { + props.top = this.position.top + "px"; + } + if (this.position.left !== prevLeft) { + props.left = this.position.left + "px"; + } + if (this.size.width !== prevWidth) { + props.width = this.size.width + "px"; + } + if (this.size.height !== prevHeight) { + props.height = this.size.height + "px"; + } + el.css(props); + + if (!this._helper && this._proportionallyResizeElements.length) { + this._proportionallyResize(); + } + + // Call the user callback if the element was resized + if ( ! $.isEmptyObject(props) ) { + this._trigger("resize", event, this.ui()); + } + + return false; + }, + + _mouseStop: function(event) { + + this.resizing = false; + var pr, ista, soffseth, soffsetw, s, left, top, + o = this.options, that = this; + + if(this._helper) { + + pr = this._proportionallyResizeElements; + ista = pr.length && (/textarea/i).test(pr[0].nodeName); + soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height; + soffsetw = ista ? 0 : that.sizeDiff.width; + + s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) }; + left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null; + top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null; + + if (!o.animate) { + this.element.css($.extend(s, { top: top, left: left })); + } + + that.helper.height(that.size.height); + that.helper.width(that.size.width); + + if (this._helper && !o.animate) { + this._proportionallyResize(); + } + } + + $("body").css("cursor", "auto"); + + this.element.removeClass("ui-resizable-resizing"); + + this._propagate("stop", event); + + if (this._helper) { + this.helper.remove(); + } + + return false; + + }, + + _updateVirtualBoundaries: function(forceAspectRatio) { + var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b, + o = this.options; + + b = { + minWidth: isNumber(o.minWidth) ? o.minWidth : 0, + maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity, + minHeight: isNumber(o.minHeight) ? o.minHeight : 0, + maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity + }; + + if(this._aspectRatio || forceAspectRatio) { + // We want to create an enclosing box whose aspect ration is the requested one + // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension + pMinWidth = b.minHeight * this.aspectRatio; + pMinHeight = b.minWidth / this.aspectRatio; + pMaxWidth = b.maxHeight * this.aspectRatio; + pMaxHeight = b.maxWidth / this.aspectRatio; + + if(pMinWidth > b.minWidth) { + b.minWidth = pMinWidth; + } + if(pMinHeight > b.minHeight) { + b.minHeight = pMinHeight; + } + if(pMaxWidth < b.maxWidth) { + b.maxWidth = pMaxWidth; + } + if(pMaxHeight < b.maxHeight) { + b.maxHeight = pMaxHeight; + } + } + this._vBoundaries = b; + }, + + _updateCache: function(data) { + this.offset = this.helper.offset(); + if (isNumber(data.left)) { + this.position.left = data.left; + } + if (isNumber(data.top)) { + this.position.top = data.top; + } + if (isNumber(data.height)) { + this.size.height = data.height; + } + if (isNumber(data.width)) { + this.size.width = data.width; + } + }, + + _updateRatio: function( data ) { + + var cpos = this.position, + csize = this.size, + a = this.axis; + + if (isNumber(data.height)) { + data.width = (data.height * this.aspectRatio); + } else if (isNumber(data.width)) { + data.height = (data.width / this.aspectRatio); + } + + if (a === "sw") { + data.left = cpos.left + (csize.width - data.width); + data.top = null; + } + if (a === "nw") { + data.top = cpos.top + (csize.height - data.height); + data.left = cpos.left + (csize.width - data.width); + } + + return data; + }, + + _respectSize: function( data ) { + + var o = this._vBoundaries, + a = this.axis, + ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), + isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height), + dw = this.originalPosition.left + this.originalSize.width, + dh = this.position.top + this.size.height, + cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); + if (isminw) { + data.width = o.minWidth; + } + if (isminh) { + data.height = o.minHeight; + } + if (ismaxw) { + data.width = o.maxWidth; + } + if (ismaxh) { + data.height = o.maxHeight; + } + + if (isminw && cw) { + data.left = dw - o.minWidth; + } + if (ismaxw && cw) { + data.left = dw - o.maxWidth; + } + if (isminh && ch) { + data.top = dh - o.minHeight; + } + if (ismaxh && ch) { + data.top = dh - o.maxHeight; + } + + // fixing jump error on top/left - bug #2330 + if (!data.width && !data.height && !data.left && data.top) { + data.top = null; + } else if (!data.width && !data.height && !data.top && data.left) { + data.left = null; + } + + return data; + }, + + _proportionallyResize: function() { + + if (!this._proportionallyResizeElements.length) { + return; + } + + var i, j, borders, paddings, prel, + element = this.helper || this.element; + + for ( i=0; i < this._proportionallyResizeElements.length; i++) { + + prel = this._proportionallyResizeElements[i]; + + if (!this.borderDif) { + this.borderDif = []; + borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")]; + paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")]; + + for ( j = 0; j < borders.length; j++ ) { + this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 ); + } + } + + prel.css({ + height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, + width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 + }); + + } + + }, + + _renderProxy: function() { + + var el = this.element, o = this.options; + this.elementOffset = el.offset(); + + if(this._helper) { + + this.helper = this.helper || $("<div style='overflow:hidden;'></div>"); + + this.helper.addClass(this._helper).css({ + width: this.element.outerWidth() - 1, + height: this.element.outerHeight() - 1, + position: "absolute", + left: this.elementOffset.left +"px", + top: this.elementOffset.top +"px", + zIndex: ++o.zIndex //TODO: Don't modify option + }); + + this.helper + .appendTo("body") + .disableSelection(); + + } else { + this.helper = this.element; + } + + }, + + _change: { + e: function(event, dx) { + return { width: this.originalSize.width + dx }; + }, + w: function(event, dx) { + var cs = this.originalSize, sp = this.originalPosition; + return { left: sp.left + dx, width: cs.width - dx }; + }, + n: function(event, dx, dy) { + var cs = this.originalSize, sp = this.originalPosition; + return { top: sp.top + dy, height: cs.height - dy }; + }, + s: function(event, dx, dy) { + return { height: this.originalSize.height + dy }; + }, + se: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + sw: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + }, + ne: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + nw: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + } + }, + + _propagate: function(n, event) { + $.ui.plugin.call(this, n, [event, this.ui()]); + (n !== "resize" && this._trigger(n, event, this.ui())); + }, + + plugins: {}, + + ui: function() { + return { + originalElement: this.originalElement, + element: this.element, + helper: this.helper, + position: this.position, + size: this.size, + originalSize: this.originalSize, + originalPosition: this.originalPosition + }; + } + +}); + +/* + * Resizable Extensions + */ + +$.ui.plugin.add("resizable", "animate", { + + stop: function( event ) { + var that = $(this).data("ui-resizable"), + o = that.options, + pr = that._proportionallyResizeElements, + ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height, + soffsetw = ista ? 0 : that.sizeDiff.width, + style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) }, + left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null, + top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null; + + that.element.animate( + $.extend(style, top && left ? { top: top, left: left } : {}), { + duration: o.animateDuration, + easing: o.animateEasing, + step: function() { + + var data = { + width: parseInt(that.element.css("width"), 10), + height: parseInt(that.element.css("height"), 10), + top: parseInt(that.element.css("top"), 10), + left: parseInt(that.element.css("left"), 10) + }; + + if (pr && pr.length) { + $(pr[0]).css({ width: data.width, height: data.height }); + } + + // propagating resize, and updating values for each animation step + that._updateCache(data); + that._propagate("resize", event); + + } + } + ); + } + +}); + +$.ui.plugin.add("resizable", "containment", { + + start: function() { + var element, p, co, ch, cw, width, height, + that = $(this).data("ui-resizable"), + o = that.options, + el = that.element, + oc = o.containment, + ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; + + if (!ce) { + return; + } + + that.containerElement = $(ce); + + if (/document/.test(oc) || oc === document) { + that.containerOffset = { left: 0, top: 0 }; + that.containerPosition = { left: 0, top: 0 }; + + that.parentData = { + element: $(document), left: 0, top: 0, + width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight + }; + } + + // i'm a node, so compute top, left, right, bottom + else { + element = $(ce); + p = []; + $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); + + that.containerOffset = element.offset(); + that.containerPosition = element.position(); + that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; + + co = that.containerOffset; + ch = that.containerSize.height; + cw = that.containerSize.width; + width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ); + height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); + + that.parentData = { + element: ce, left: co.left, top: co.top, width: width, height: height + }; + } + }, + + resize: function( event ) { + var woset, hoset, isParent, isOffsetRelative, + that = $(this).data("ui-resizable"), + o = that.options, + co = that.containerOffset, cp = that.position, + pRatio = that._aspectRatio || event.shiftKey, + cop = { top:0, left:0 }, ce = that.containerElement; + + if (ce[0] !== document && (/static/).test(ce.css("position"))) { + cop = co; + } + + if (cp.left < (that._helper ? co.left : 0)) { + that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left)); + if (pRatio) { + that.size.height = that.size.width / that.aspectRatio; + } + that.position.left = o.helper ? co.left : 0; + } + + if (cp.top < (that._helper ? co.top : 0)) { + that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top); + if (pRatio) { + that.size.width = that.size.height * that.aspectRatio; + } + that.position.top = that._helper ? co.top : 0; + } + + that.offset.left = that.parentData.left+that.position.left; + that.offset.top = that.parentData.top+that.position.top; + + woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width ); + hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height ); + + isParent = that.containerElement.get(0) === that.element.parent().get(0); + isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position")); + + if ( isParent && isOffsetRelative ) { + woset -= Math.abs( that.parentData.left ); + } + + if (woset + that.size.width >= that.parentData.width) { + that.size.width = that.parentData.width - woset; + if (pRatio) { + that.size.height = that.size.width / that.aspectRatio; + } + } + + if (hoset + that.size.height >= that.parentData.height) { + that.size.height = that.parentData.height - hoset; + if (pRatio) { + that.size.width = that.size.height * that.aspectRatio; + } + } + }, + + stop: function(){ + var that = $(this).data("ui-resizable"), + o = that.options, + co = that.containerOffset, + cop = that.containerPosition, + ce = that.containerElement, + helper = $(that.helper), + ho = helper.offset(), + w = helper.outerWidth() - that.sizeDiff.width, + h = helper.outerHeight() - that.sizeDiff.height; + + if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) { + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + } + + if (that._helper && !o.animate && (/static/).test(ce.css("position"))) { + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + } + + } +}); + +$.ui.plugin.add("resizable", "alsoResize", { + + start: function () { + var that = $(this).data("ui-resizable"), + o = that.options, + _store = function (exp) { + $(exp).each(function() { + var el = $(this); + el.data("ui-resizable-alsoresize", { + width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), + left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10) + }); + }); + }; + + if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) { + if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } + else { $.each(o.alsoResize, function (exp) { _store(exp); }); } + }else{ + _store(o.alsoResize); + } + }, + + resize: function (event, ui) { + var that = $(this).data("ui-resizable"), + o = that.options, + os = that.originalSize, + op = that.originalPosition, + delta = { + height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0, + top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0 + }, + + _alsoResize = function (exp, c) { + $(exp).each(function() { + var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {}, + css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"]; + + $.each(css, function (i, prop) { + var sum = (start[prop]||0) + (delta[prop]||0); + if (sum && sum >= 0) { + style[prop] = sum || null; + } + }); + + el.css(style); + }); + }; + + if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); + }else{ + _alsoResize(o.alsoResize); + } + }, + + stop: function () { + $(this).removeData("resizable-alsoresize"); + } +}); + +$.ui.plugin.add("resizable", "ghost", { + + start: function() { + + var that = $(this).data("ui-resizable"), o = that.options, cs = that.size; + + that.ghost = that.originalElement.clone(); + that.ghost + .css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) + .addClass("ui-resizable-ghost") + .addClass(typeof o.ghost === "string" ? o.ghost : ""); + + that.ghost.appendTo(that.helper); + + }, + + resize: function(){ + var that = $(this).data("ui-resizable"); + if (that.ghost) { + that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width }); + } + }, + + stop: function() { + var that = $(this).data("ui-resizable"); + if (that.ghost && that.helper) { + that.helper.get(0).removeChild(that.ghost.get(0)); + } + } + +}); + +$.ui.plugin.add("resizable", "grid", { + + resize: function() { + var that = $(this).data("ui-resizable"), + o = that.options, + cs = that.size, + os = that.originalSize, + op = that.originalPosition, + a = that.axis, + grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid, + gridX = (grid[0]||1), + gridY = (grid[1]||1), + ox = Math.round((cs.width - os.width) / gridX) * gridX, + oy = Math.round((cs.height - os.height) / gridY) * gridY, + newWidth = os.width + ox, + newHeight = os.height + oy, + isMaxWidth = o.maxWidth && (o.maxWidth < newWidth), + isMaxHeight = o.maxHeight && (o.maxHeight < newHeight), + isMinWidth = o.minWidth && (o.minWidth > newWidth), + isMinHeight = o.minHeight && (o.minHeight > newHeight); + + o.grid = grid; + + if (isMinWidth) { + newWidth = newWidth + gridX; + } + if (isMinHeight) { + newHeight = newHeight + gridY; + } + if (isMaxWidth) { + newWidth = newWidth - gridX; + } + if (isMaxHeight) { + newHeight = newHeight - gridY; + } + + if (/^(se|s|e)$/.test(a)) { + that.size.width = newWidth; + that.size.height = newHeight; + } else if (/^(ne)$/.test(a)) { + that.size.width = newWidth; + that.size.height = newHeight; + that.position.top = op.top - oy; + } else if (/^(sw)$/.test(a)) { + that.size.width = newWidth; + that.size.height = newHeight; + that.position.left = op.left - ox; + } else { + if ( newHeight - gridY > 0 ) { + that.size.height = newHeight; + that.position.top = op.top - oy; + } else { + that.size.height = gridY; + that.position.top = op.top + os.height - gridY; + } + if ( newWidth - gridX > 0 ) { + that.size.width = newWidth; + that.position.left = op.left - ox; + } else { + that.size.width = gridX; + that.position.left = op.left + os.width - gridX; + } + } + } + +}); + +})(jQuery); +(function( $, undefined ) { + +$.widget("ui.selectable", $.ui.mouse, { + version: "1.10.4", + options: { + appendTo: "body", + autoRefresh: true, + distance: 0, + filter: "*", + tolerance: "touch", + + // callbacks + selected: null, + selecting: null, + start: null, + stop: null, + unselected: null, + unselecting: null + }, + _create: function() { + var selectees, + that = this; + + this.element.addClass("ui-selectable"); + + this.dragged = false; + + // cache selectee children based on filter + this.refresh = function() { + selectees = $(that.options.filter, that.element[0]); + selectees.addClass("ui-selectee"); + selectees.each(function() { + var $this = $(this), + pos = $this.offset(); + $.data(this, "selectable-item", { + element: this, + $element: $this, + left: pos.left, + top: pos.top, + right: pos.left + $this.outerWidth(), + bottom: pos.top + $this.outerHeight(), + startselected: false, + selected: $this.hasClass("ui-selected"), + selecting: $this.hasClass("ui-selecting"), + unselecting: $this.hasClass("ui-unselecting") + }); + }); + }; + this.refresh(); + + this.selectees = selectees.addClass("ui-selectee"); + + this._mouseInit(); + + this.helper = $("<div class='ui-selectable-helper'></div>"); + }, + + _destroy: function() { + this.selectees + .removeClass("ui-selectee") + .removeData("selectable-item"); + this.element + .removeClass("ui-selectable ui-selectable-disabled"); + this._mouseDestroy(); + }, + + _mouseStart: function(event) { + var that = this, + options = this.options; + + this.opos = [event.pageX, event.pageY]; + + if (this.options.disabled) { + return; + } + + this.selectees = $(options.filter, this.element[0]); + + this._trigger("start", event); + + $(options.appendTo).append(this.helper); + // position helper (lasso) + this.helper.css({ + "left": event.pageX, + "top": event.pageY, + "width": 0, + "height": 0 + }); + + if (options.autoRefresh) { + this.refresh(); + } + + this.selectees.filter(".ui-selected").each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.startselected = true; + if (!event.metaKey && !event.ctrlKey) { + selectee.$element.removeClass("ui-selected"); + selectee.selected = false; + selectee.$element.addClass("ui-unselecting"); + selectee.unselecting = true; + // selectable UNSELECTING callback + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + }); + + $(event.target).parents().addBack().each(function() { + var doSelect, + selectee = $.data(this, "selectable-item"); + if (selectee) { + doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected"); + selectee.$element + .removeClass(doSelect ? "ui-unselecting" : "ui-selected") + .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + // selectable (UN)SELECTING callback + if (doSelect) { + that._trigger("selecting", event, { + selecting: selectee.element + }); + } else { + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + return false; + } + }); + + }, + + _mouseDrag: function(event) { + + this.dragged = true; + + if (this.options.disabled) { + return; + } + + var tmp, + that = this, + options = this.options, + x1 = this.opos[0], + y1 = this.opos[1], + x2 = event.pageX, + y2 = event.pageY; + + if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; } + if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; } + this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); + + this.selectees.each(function() { + var selectee = $.data(this, "selectable-item"), + hit = false; + + //prevent helper from being selected if appendTo: selectable + if (!selectee || selectee.element === that.element[0]) { + return; + } + + if (options.tolerance === "touch") { + hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); + } else if (options.tolerance === "fit") { + hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); + } + + if (hit) { + // SELECT + if (selectee.selected) { + selectee.$element.removeClass("ui-selected"); + selectee.selected = false; + } + if (selectee.unselecting) { + selectee.$element.removeClass("ui-unselecting"); + selectee.unselecting = false; + } + if (!selectee.selecting) { + selectee.$element.addClass("ui-selecting"); + selectee.selecting = true; + // selectable SELECTING callback + that._trigger("selecting", event, { + selecting: selectee.element + }); + } + } else { + // UNSELECT + if (selectee.selecting) { + if ((event.metaKey || event.ctrlKey) && selectee.startselected) { + selectee.$element.removeClass("ui-selecting"); + selectee.selecting = false; + selectee.$element.addClass("ui-selected"); + selectee.selected = true; + } else { + selectee.$element.removeClass("ui-selecting"); + selectee.selecting = false; + if (selectee.startselected) { + selectee.$element.addClass("ui-unselecting"); + selectee.unselecting = true; + } + // selectable UNSELECTING callback + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + if (selectee.selected) { + if (!event.metaKey && !event.ctrlKey && !selectee.startselected) { + selectee.$element.removeClass("ui-selected"); + selectee.selected = false; + + selectee.$element.addClass("ui-unselecting"); + selectee.unselecting = true; + // selectable UNSELECTING callback + that._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + } + }); + + return false; + }, + + _mouseStop: function(event) { + var that = this; + + this.dragged = false; + + $(".ui-unselecting", this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass("ui-unselecting"); + selectee.unselecting = false; + selectee.startselected = false; + that._trigger("unselected", event, { + unselected: selectee.element + }); + }); + $(".ui-selecting", this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass("ui-selecting").addClass("ui-selected"); + selectee.selecting = false; + selectee.selected = true; + selectee.startselected = true; + that._trigger("selected", event, { + selected: selectee.element + }); + }); + this._trigger("stop", event); + + this.helper.remove(); + + return false; + } + +}); + +})(jQuery); +(function( $, undefined ) { + +// number of pages in a slider +// (how many times can you page up/down to go through the whole range) +var numPages = 5; + +$.widget( "ui.slider", $.ui.mouse, { + version: "1.10.4", + widgetEventPrefix: "slide", + + options: { + animate: false, + distance: 0, + max: 100, + min: 0, + orientation: "horizontal", + range: false, + step: 1, + value: 0, + values: null, + + // callbacks + change: null, + slide: null, + start: null, + stop: null + }, + + _create: function() { + this._keySliding = false; + this._mouseSliding = false; + this._animateOff = true; + this._handleIndex = null; + this._detectOrientation(); + this._mouseInit(); + + this.element + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all"); + + this._refresh(); + this._setOption( "disabled", this.options.disabled ); + + this._animateOff = false; + }, + + _refresh: function() { + this._createRange(); + this._createHandles(); + this._setupEvents(); + this._refreshValue(); + }, + + _createHandles: function() { + var i, handleCount, + options = this.options, + existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ), + handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>", + handles = []; + + handleCount = ( options.values && options.values.length ) || 1; + + if ( existingHandles.length > handleCount ) { + existingHandles.slice( handleCount ).remove(); + existingHandles = existingHandles.slice( 0, handleCount ); + } + + for ( i = existingHandles.length; i < handleCount; i++ ) { + handles.push( handle ); + } + + this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) ); + + this.handle = this.handles.eq( 0 ); + + this.handles.each(function( i ) { + $( this ).data( "ui-slider-handle-index", i ); + }); + }, + + _createRange: function() { + var options = this.options, + classes = ""; + + if ( options.range ) { + if ( options.range === true ) { + if ( !options.values ) { + options.values = [ this._valueMin(), this._valueMin() ]; + } else if ( options.values.length && options.values.length !== 2 ) { + options.values = [ options.values[0], options.values[0] ]; + } else if ( $.isArray( options.values ) ) { + options.values = options.values.slice(0); + } + } + + if ( !this.range || !this.range.length ) { + this.range = $( "<div></div>" ) + .appendTo( this.element ); + + classes = "ui-slider-range" + + // note: this isn't the most fittingly semantic framework class for this element, + // but worked best visually with a variety of themes + " ui-widget-header ui-corner-all"; + } else { + this.range.removeClass( "ui-slider-range-min ui-slider-range-max" ) + // Handle range switching from true to min/max + .css({ + "left": "", + "bottom": "" + }); + } + + this.range.addClass( classes + + ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) ); + } else { + if ( this.range ) { + this.range.remove(); + } + this.range = null; + } + }, + + _setupEvents: function() { + var elements = this.handles.add( this.range ).filter( "a" ); + this._off( elements ); + this._on( elements, this._handleEvents ); + this._hoverable( elements ); + this._focusable( elements ); + }, + + _destroy: function() { + this.handles.remove(); + if ( this.range ) { + this.range.remove(); + } + + this.element + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ); + + this._mouseDestroy(); + }, + + _mouseCapture: function( event ) { + var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, + that = this, + o = this.options; + + if ( o.disabled ) { + return false; + } + + this.elementSize = { + width: this.element.outerWidth(), + height: this.element.outerHeight() + }; + this.elementOffset = this.element.offset(); + + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - that.values(i) ); + if (( distance > thisDistance ) || + ( distance === thisDistance && + (i === that._lastChangedValue || that.values(i) === o.min ))) { + distance = thisDistance; + closestHandle = $( this ); + index = i; + } + }); + + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } + this._mouseSliding = true; + + this._handleIndex = index; + + closestHandle + .addClass( "ui-state-active" ) + .focus(); + + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" ); + this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) + }; + + if ( !this.handles.hasClass( "ui-state-hover" ) ) { + this._slide( event, index, normValue ); + } + this._animateOff = true; + return true; + }, + + _mouseStart: function() { + return true; + }, + + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); + + this._slide( event, this._handleIndex, normValue ); + + return false; + }, + + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); + this._mouseSliding = false; + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + + this._handleIndex = null; + this._clickOffset = null; + this._animateOff = false; + + return false; + }, + + _detectOrientation: function() { + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; + }, + + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; + + if ( this.orientation === "horizontal" ) { + pixelTotal = this.elementSize.width; + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); + } else { + pixelTotal = this.elementSize.height; + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); + } + + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { + percentMouse = 1 - percentMouse; + } + + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + + return this._trimAlignValue( valueMouse ); + }, + + _start: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + return this._trigger( "start", event, uiHash ); + }, + + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; + + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); + + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; + } + + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal, + values: newValues + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal ); + } + } + } else { + if ( newVal !== this.value() ) { + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal + } ); + if ( allowed !== false ) { + this.value( newVal ); + } + } + } + }, + + _stop: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "stop", event, uiHash ); + }, + + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + //store the last changed value index for reference when handles overlap + this._lastChangedValue = index; + + this._trigger( "change", event, uiHash ); + } + }, + + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, 0 ); + return; + } + + return this._value(); + }, + + values: function( index, newValue ) { + var vals, + newValues, + i; + + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, index ); + return; + } + + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); + } + this._refreshValue(); + } else { + if ( this.options.values && this.options.values.length ) { + return this._values( index ); + } else { + return this.value(); + } + } + } else { + return this._values(); + } + }, + + _setOption: function( key, value ) { + var i, + valsLength = 0; + + if ( key === "range" && this.options.range === true ) { + if ( value === "min" ) { + this.options.value = this._values( 0 ); + this.options.values = null; + } else if ( value === "max" ) { + this.options.value = this._values( this.options.values.length-1 ); + this.options.values = null; + } + } + + if ( $.isArray( this.options.values ) ) { + valsLength = this.options.values.length; + } + + $.Widget.prototype._setOption.apply( this, arguments ); + + switch ( key ) { + case "orientation": + this._detectOrientation(); + this.element + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); + this._refreshValue(); + break; + case "value": + this._animateOff = true; + this._refreshValue(); + this._change( null, 0 ); + this._animateOff = false; + break; + case "values": + this._animateOff = true; + this._refreshValue(); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); + } + this._animateOff = false; + break; + case "min": + case "max": + this._animateOff = true; + this._refreshValue(); + this._animateOff = false; + break; + case "range": + this._animateOff = true; + this._refresh(); + this._animateOff = false; + break; + } + }, + + //internal value getter + // _value() returns value trimmed by min and max, aligned by step + _value: function() { + var val = this.options.value; + val = this._trimAlignValue( val ); + + return val; + }, + + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; + + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); + + return val; + } else if ( this.options.values && this.options.values.length ) { + // .slice() creates a copy of the array + // this copy gets trimmed by min and max and then returned + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i+= 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); + } + + return vals; + } else { + return []; + } + }, + + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val <= this._valueMin() ) { + return this._valueMin(); + } + if ( val >= this._valueMax() ) { + return this._valueMax(); + } + var step = ( this.options.step > 0 ) ? this.options.step : 1, + valModStep = (val - this._valueMin()) % step, + alignValue = val - valModStep; + + if ( Math.abs(valModStep) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); + }, + + _valueMin: function() { + return this.options.min; + }, + + _valueMax: function() { + return this.options.max; + }, + + _refreshValue: function() { + var lastValPercent, valPercent, value, valueMin, valueMax, + oRange = this.options.range, + o = this.options, + that = this, + animate = ( !this._animateOff ) ? o.animate : false, + _set = {}; + + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i ) { + valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100; + _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( that.options.range === true ) { + if ( that.orientation === "horizontal" ) { + if ( i === 0 ) { + that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } else { + if ( i === 0 ) { + that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + lastValPercent = valPercent; + }); + } else { + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + }, + + _handleEvents: { + keydown: function( event ) { + var allowed, curVal, newVal, step, + index = $( event.target ).data( "ui-slider-handle-index" ); + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + event.preventDefault(); + if ( !this._keySliding ) { + this._keySliding = true; + $( event.target ).addClass( "ui-state-active" ); + allowed = this._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = this.options.step; + if ( this.options.values && this.options.values.length ) { + curVal = newVal = this.values( index ); + } else { + curVal = newVal = this.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = this._valueMin(); + break; + case $.ui.keyCode.END: + newVal = this._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === this._valueMax() ) { + return; + } + newVal = this._trimAlignValue( curVal + step ); + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === this._valueMin() ) { + return; + } + newVal = this._trimAlignValue( curVal - step ); + break; + } + + this._slide( event, index, newVal ); + }, + click: function( event ) { + event.preventDefault(); + }, + keyup: function( event ) { + var index = $( event.target ).data( "ui-slider-handle-index" ); + + if ( this._keySliding ) { + this._keySliding = false; + this._stop( event, index ); + this._change( event, index ); + $( event.target ).removeClass( "ui-state-active" ); + } + } + } + +}); + +}(jQuery)); +(function( $, undefined ) { + +function isOverAxis( x, reference, size ) { + return ( x > reference ) && ( x < ( reference + size ) ); +} + +function isFloating(item) { + return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display")); +} + +$.widget("ui.sortable", $.ui.mouse, { + version: "1.10.4", + widgetEventPrefix: "sort", + ready: false, + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: "auto", + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: "> *", + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000, + + // callbacks + activate: null, + beforeStop: null, + change: null, + deactivate: null, + out: null, + over: null, + receive: null, + remove: null, + sort: null, + start: null, + stop: null, + update: null + }, + _create: function() { + + var o = this.options; + this.containerCache = {}; + this.element.addClass("ui-sortable"); + + //Get the items + this.refresh(); + + //Let's determine if the items are being displayed horizontally + this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false; + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + //We're ready to go + this.ready = true; + + }, + + _destroy: function() { + this.element + .removeClass("ui-sortable ui-sortable-disabled"); + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) { + this.items[i].item.removeData(this.widgetName + "-item"); + } + + return this; + }, + + _setOption: function(key, value){ + if ( key === "disabled" ) { + this.options[ key ] = value; + + this.widget().toggleClass( "ui-sortable-disabled", !!value ); + } else { + // Don't call widget base _setOption for disable as it adds ui-state-disabled class + $.Widget.prototype._setOption.apply(this, arguments); + } + }, + + _mouseCapture: function(event, overrideHandle) { + var currentItem = null, + validHandle = false, + that = this; + + if (this.reverting) { + return false; + } + + if(this.options.disabled || this.options.type === "static") { + return false; + } + + //We have to refresh the items data once first + this._refreshItems(event); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + $(event.target).parents().each(function() { + if($.data(this, that.widgetName + "-item") === that) { + currentItem = $(this); + return false; + } + }); + if($.data(event.target, that.widgetName + "-item") === that) { + currentItem = $(event.target); + } + + if(!currentItem) { + return false; + } + if(this.options.handle && !overrideHandle) { + $(this.options.handle, currentItem).find("*").addBack().each(function() { + if(this === event.target) { + validHandle = true; + } + }); + if(!validHandle) { + return false; + } + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function(event, overrideHandle, noActivation) { + + var i, body, + o = this.options; + + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css("position", "absolute"); + this.cssPosition = this.helper.css("position"); + + //Generate the original position + this.originalPosition = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if "cursorAt" is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Cache the former DOM position + this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; + + //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way + if(this.helper[0] !== this.currentItem[0]) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if(o.containment) { + this._setContainment(); + } + + if( o.cursor && o.cursor !== "auto" ) { // cursor option + body = this.document.find( "body" ); + + // support: IE + this.storedCursor = body.css( "cursor" ); + body.css( "cursor", o.cursor ); + + this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body ); + } + + if(o.opacity) { // opacity option + if (this.helper.css("opacity")) { + this._storedOpacity = this.helper.css("opacity"); + } + this.helper.css("opacity", o.opacity); + } + + if(o.zIndex) { // zIndex option + if (this.helper.css("zIndex")) { + this._storedZIndex = this.helper.css("zIndex"); + } + this.helper.css("zIndex", o.zIndex); + } + + //Prepare scrolling + if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { + this.overflowOffset = this.scrollParent.offset(); + } + + //Call callbacks + this._trigger("start", event, this._uiHash()); + + //Recache the helper size + if(!this._preserveHelperProportions) { + this._cacheHelperProportions(); + } + + + //Post "activate" events to possible containers + if( !noActivation ) { + for ( i = this.containers.length - 1; i >= 0; i-- ) { + this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); + } + } + + //Prepare possible droppables + if($.ui.ddmanager) { + $.ui.ddmanager.current = this; + } + + if ($.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(this, event); + } + + this.dragging = true; + + this.helper.addClass("ui-sortable-helper"); + this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + + }, + + _mouseDrag: function(event) { + var i, item, itemElement, intersection, + o = this.options, + scrolled = false; + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + if (!this.lastPositionAbs) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if(this.options.scroll) { + if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") { + + if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) { + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; + } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) { + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; + } + + if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) { + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; + } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) { + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; + } + + } else { + + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) { + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) { + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) { + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) { + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) { + $.ui.ddmanager.prepareOffsets(this, event); + } + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo("absolute"); + + //Set the helper position + if(!this.options.axis || this.options.axis !== "y") { + this.helper[0].style.left = this.position.left+"px"; + } + if(!this.options.axis || this.options.axis !== "x") { + this.helper[0].style.top = this.position.top+"px"; + } + + //Rearrange + for (i = this.items.length - 1; i >= 0; i--) { + + //Cache variables and intersection, continue if no intersection + item = this.items[i]; + itemElement = item.item[0]; + intersection = this._intersectsWithPointer(item); + if (!intersection) { + continue; + } + + // Only put the placeholder inside the current Container, skip all + // items from other containers. This works because when moving + // an item from one container to another the + // currentContainer is switched before the placeholder is moved. + // + // Without this, moving items in "sub-sortables" can cause + // the placeholder to jitter beetween the outer and inner container. + if (item.instance !== this.currentContainer) { + continue; + } + + // cannot intersect with itself + // no useless actions that have been done before + // no action if the item moved is the parent of the item checked + if (itemElement !== this.currentItem[0] && + this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement && + !$.contains(this.placeholder[0], itemElement) && + (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true) + ) { + + this.direction = intersection === 1 ? "down" : "up"; + + if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) { + this._rearrange(event, item); + } else { + break; + } + + this._trigger("change", event, this._uiHash()); + break; + } + } + + //Post events to containers + this._contactContainers(event); + + //Interconnect with droppables + if($.ui.ddmanager) { + $.ui.ddmanager.drag(this, event); + } + + //Call callbacks + this._trigger("sort", event, this._uiHash()); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function(event, noPropagation) { + + if(!event) { + return; + } + + //If we are using droppables, inform the manager about the drop + if ($.ui.ddmanager && !this.options.dropBehaviour) { + $.ui.ddmanager.drop(this, event); + } + + if(this.options.revert) { + var that = this, + cur = this.placeholder.offset(), + axis = this.options.axis, + animation = {}; + + if ( !axis || axis === "x" ) { + animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft); + } + if ( !axis || axis === "y" ) { + animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop); + } + this.reverting = true; + $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() { + that._clear(event); + }); + } else { + this._clear(event, noPropagation); + } + + return false; + + }, + + cancel: function() { + + if(this.dragging) { + + this._mouseUp({ target: null }); + + if(this.options.helper === "original") { + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + //Post deactivating events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + this.containers[i]._trigger("deactivate", null, this._uiHash(this)); + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", null, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + if (this.placeholder) { + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + if(this.placeholder[0].parentNode) { + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + } + if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) { + this.helper.remove(); + } + + $.extend(this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + }); + + if(this.domPosition.prev) { + $(this.domPosition.prev).after(this.currentItem); + } else { + $(this.domPosition.parent).prepend(this.currentItem); + } + } + + return this; + + }, + + serialize: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected), + str = []; + o = o || {}; + + $(items).each(function() { + var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/)); + if (res) { + str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2])); + } + }); + + if(!str.length && o.key) { + str.push(o.key + "="); + } + + return str.join("&"); + + }, + + toArray: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected), + ret = []; + + o = o || {}; + + items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); }); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function(item) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height, + l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height, + dyClick = this.offset.click.top, + dxClick = this.offset.click.left, + isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ), + isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ), + isOverElement = isOverElementHeight && isOverElementWidth; + + if ( this.options.tolerance === "pointer" || + this.options.forcePointerForContainers || + (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"]) + ) { + return isOverElement; + } else { + + return (l < x1 + (this.helperProportions.width / 2) && // Right Half + x2 - (this.helperProportions.width / 2) < r && // Left Half + t < y1 + (this.helperProportions.height / 2) && // Bottom Half + y2 - (this.helperProportions.height / 2) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function(item) { + + var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), + isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), + isOverElement = isOverElementHeight && isOverElementWidth, + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (!isOverElement) { + return false; + } + + return this.floating ? + ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 ) + : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) ); + + }, + + _intersectsWithSides: function(item) { + + var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), + isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (this.floating && horizontalDirection) { + return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf)); + } else { + return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf)); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta !== 0 && (delta > 0 ? "down" : "up"); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta !== 0 && (delta > 0 ? "right" : "left"); + }, + + refresh: function(event) { + this._refreshItems(event); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith; + }, + + _getItemsAsjQuery: function(connected) { + + var i, j, cur, inst, + items = [], + queries = [], + connectWith = this._connectWith(); + + if(connectWith && connected) { + for (i = connectWith.length - 1; i >= 0; i--){ + cur = $(connectWith[i]); + for ( j = cur.length - 1; j >= 0; j--){ + inst = $.data(cur[j], this.widgetFullName); + if(inst && inst !== this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]); + } + } + } + } + + queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]); + + function addItems() { + items.push( this ); + } + for (i = queries.length - 1; i >= 0; i--){ + queries[i][0].each( addItems ); + } + + return $(items); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); + + this.items = $.grep(this.items, function (item) { + for (var j=0; j < list.length; j++) { + if(list[j] === item.item[0]) { + return false; + } + } + return true; + }); + + }, + + _refreshItems: function(event) { + + this.items = []; + this.containers = [this]; + + var i, j, cur, inst, targetData, _queries, item, queriesLength, + items = this.items, + queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]], + connectWith = this._connectWith(); + + if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down + for (i = connectWith.length - 1; i >= 0; i--){ + cur = $(connectWith[i]); + for (j = cur.length - 1; j >= 0; j--){ + inst = $.data(cur[j], this.widgetFullName); + if(inst && inst !== this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); + this.containers.push(inst); + } + } + } + } + + for (i = queries.length - 1; i >= 0; i--) { + targetData = queries[i][1]; + _queries = queries[i][0]; + + for (j=0, queriesLength = _queries.length; j < queriesLength; j++) { + item = $(_queries[j]); + + item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager) + + items.push({ + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + }); + } + } + + }, + + refreshPositions: function(fast) { + + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change + if(this.offsetParent && this.helper) { + this.offset.parent = this._getParentOffset(); + } + + var i, item, t, p; + + for (i = this.items.length - 1; i >= 0; i--){ + item = this.items[i]; + + //We ignore calculating positions of all connected containers when we're not over them + if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) { + continue; + } + + t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + + if (!fast) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + p = t.offset(); + item.left = p.left; + item.top = p.top; + } + + if(this.options.custom && this.options.custom.refreshContainers) { + this.options.custom.refreshContainers.call(this); + } else { + for (i = this.containers.length - 1; i >= 0; i--){ + p = this.containers[i].element.offset(); + this.containers[i].containerCache.left = p.left; + this.containers[i].containerCache.top = p.top; + this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); + this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + } + } + + return this; + }, + + _createPlaceholder: function(that) { + that = that || this; + var className, + o = that.options; + + if(!o.placeholder || o.placeholder.constructor === String) { + className = o.placeholder; + o.placeholder = { + element: function() { + + var nodeName = that.currentItem[0].nodeName.toLowerCase(), + element = $( "<" + nodeName + ">", that.document[0] ) + .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder") + .removeClass("ui-sortable-helper"); + + if ( nodeName === "tr" ) { + that.currentItem.children().each(function() { + $( "<td>&#160;</td>", that.document[0] ) + .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) + .appendTo( element ); + }); + } else if ( nodeName === "img" ) { + element.attr( "src", that.currentItem.attr( "src" ) ); + } + + if ( !className ) { + element.css( "visibility", "hidden" ); + } + + return element; + }, + update: function(container, p) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified + if(className && !o.forcePlaceholderSize) { + return; + } + + //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item + if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); } + if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); } + } + }; + } + + //Create the placeholder + that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem)); + + //Append it after the actual current item + that.currentItem.after(that.placeholder); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update(that, that.placeholder); + + }, + + _contactContainers: function(event) { + var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating, + innermostContainer = null, + innermostIndex = null; + + // get innermost container that intersects with item + for (i = this.containers.length - 1; i >= 0; i--) { + + // never consider a container that's located within the item itself + if($.contains(this.currentItem[0], this.containers[i].element[0])) { + continue; + } + + if(this._intersectsWith(this.containers[i].containerCache)) { + + // if we've already found a container and it's more "inner" than this, then continue + if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) { + continue; + } + + innermostContainer = this.containers[i]; + innermostIndex = i; + + } else { + // container doesn't intersect. trigger "out" event if necessary + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", event, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + // if no intersecting containers found, return + if(!innermostContainer) { + return; + } + + // move the item into the container if it's not there already + if(this.containers.length === 1) { + if (!this.containers[innermostIndex].containerCache.over) { + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + } else { + + //When entering a new container, we will find the item with the least distance and append our item near it + dist = 10000; + itemWithLeastDistance = null; + floating = innermostContainer.floating || isFloating(this.currentItem); + posProperty = floating ? "left" : "top"; + sizeProperty = floating ? "width" : "height"; + base = this.positionAbs[posProperty] + this.offset.click[posProperty]; + for (j = this.items.length - 1; j >= 0; j--) { + if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) { + continue; + } + if(this.items[j].item[0] === this.currentItem[0]) { + continue; + } + if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) { + continue; + } + cur = this.items[j].item.offset()[posProperty]; + nearBottom = false; + if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){ + nearBottom = true; + cur += this.items[j][sizeProperty]; + } + + if(Math.abs(cur - base) < dist) { + dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; + this.direction = nearBottom ? "up": "down"; + } + } + + //Check if dropOnEmpty is enabled + if(!itemWithLeastDistance && !this.options.dropOnEmpty) { + return; + } + + if(this.currentContainer === this.containers[innermostIndex]) { + return; + } + + itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); + this._trigger("change", event, this._uiHash()); + this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); + this.currentContainer = this.containers[innermostIndex]; + + //Update the placeholder + this.options.placeholder.update(this.currentContainer, this.placeholder); + + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + + + }, + + _createHelper: function(event) { + + var o = this.options, + helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem); + + //Add the helper to the DOM if that didn't happen already + if(!helper.parents("body").length) { + $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); + } + + if(helper[0] === this.currentItem[0]) { + this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; + } + + if(!helper[0].style.width || o.forceHelperSize) { + helper.width(this.currentItem.width()); + } + if(!helper[0].style.height || o.forceHelperSize) { + helper.height(this.currentItem.height()); + } + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj === "string") { + obj = obj.split(" "); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ("left" in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ("right" in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ("top" in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ("bottom" in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + // This needs to be actually done for all browsers, since pageX/pageY includes this information + // with an ugly IE fix + if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) { + po = { top: 0, left: 0 }; + } + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition === "relative") { + var p = this.currentItem.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), + top: (parseInt(this.currentItem.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var ce, co, over, + o = this.options; + if(o.containment === "parent") { + o.containment = this.helper[0].parentNode; + } + if(o.containment === "document" || o.containment === "window") { + this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left, + ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + } + + if(!(/^(document|window|parent)$/).test(o.containment)) { + ce = $(o.containment)[0]; + co = $(o.containment).offset(); + over = ($(ce).css("overflow") !== "hidden"); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) { + pos = this.position; + } + var mod = d === "absolute" ? 1 : -1, + scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, + scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top + // The absolute mouse position + this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left + // The absolute mouse position + this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var top, left, + o = this.options, + pageX = event.pageX, + pageY = event.pageY, + scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) { + this.offset.relative = this._getRelativeOffset(); + } + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) { + pageX = this.containment[0] + this.offset.click.left; + } + if(event.pageY - this.offset.click.top < this.containment[1]) { + pageY = this.containment[1] + this.offset.click.top; + } + if(event.pageX - this.offset.click.left > this.containment[2]) { + pageX = this.containment[2] + this.offset.click.left; + } + if(event.pageY - this.offset.click.top > this.containment[3]) { + pageY = this.containment[3] + this.offset.click.top; + } + } + + if(o.grid) { + top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY - // The absolute mouse position + this.offset.click.top - // Click offset (relative to the element) + this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.top + // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX - // The absolute mouse position + this.offset.click.left - // Click offset (relative to the element) + this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent + this.offset.parent.left + // The offsetParent's offset without borders (offset + border) + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _rearrange: function(event, i, a, hardRefresh) { + + a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling)); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var counter = this.counter; + + this._delay(function() { + if(counter === this.counter) { + this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove + } + }); + + }, + + _clear: function(event, noPropagation) { + + this.reverting = false; + // We delay all events that have to be triggered to after the point where the placeholder has been removed and + // everything else normalized again + var i, + delayedTriggers = []; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) + if(!this._noFinalSort && this.currentItem.parent().length) { + this.placeholder.before(this.currentItem); + } + this._noFinalSort = null; + + if(this.helper[0] === this.currentItem[0]) { + for(i in this._storedCSS) { + if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") { + this._storedCSS[i] = ""; + } + } + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + if(this.fromOutside && !noPropagation) { + delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); + } + if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) { + delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed + } + + // Check if the items Container has Changed and trigger appropriate + // events. + if (this !== this.currentContainer) { + if(!noPropagation) { + delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); + delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); + delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer)); + } + } + + + //Post events to containers + function delayEvent( type, instance, container ) { + return function( event ) { + container._trigger( type, event, instance._uiHash( instance ) ); + }; + } + for (i = this.containers.length - 1; i >= 0; i--){ + if (!noPropagation) { + delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) ); + } + if(this.containers[i].containerCache.over) { + delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) ); + this.containers[i].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if ( this.storedCursor ) { + this.document.find( "body" ).css( "cursor", this.storedCursor ); + this.storedStylesheet.remove(); + } + if(this._storedOpacity) { + this.helper.css("opacity", this._storedOpacity); + } + if(this._storedZIndex) { + this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex); + } + + this.dragging = false; + if(this.cancelHelperRemoval) { + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + for (i=0; i < delayedTriggers.length; i++) { + delayedTriggers[i].call(this, event); + } //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return false; + } + + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + } + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + + if(this.helper[0] !== this.currentItem[0]) { + this.helper.remove(); + } + this.helper = null; + + if(!noPropagation) { + for (i=0; i < delayedTriggers.length; i++) { + delayedTriggers[i].call(this, event); + } //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return true; + + }, + + _trigger: function() { + if ($.Widget.prototype._trigger.apply(this, arguments) === false) { + this.cancel(); + } + }, + + _uiHash: function(_inst) { + var inst = _inst || this; + return { + helper: inst.helper, + placeholder: inst.placeholder || $([]), + position: inst.position, + originalPosition: inst.originalPosition, + offset: inst.positionAbs, + item: inst.currentItem, + sender: _inst ? _inst.element : null + }; + } + +}); + +})(jQuery); +(function( $ ) { + +function modifier( fn ) { + return function() { + var previous = this.element.val(); + fn.apply( this, arguments ); + this._refresh(); + if ( previous !== this.element.val() ) { + this._trigger( "change" ); + } + }; +} + +$.widget( "ui.spinner", { + version: "1.10.4", + defaultElement: "<input>", + widgetEventPrefix: "spin", + options: { + culture: null, + icons: { + down: "ui-icon-triangle-1-s", + up: "ui-icon-triangle-1-n" + }, + incremental: true, + max: null, + min: null, + numberFormat: null, + page: 10, + step: 1, + + change: null, + spin: null, + start: null, + stop: null + }, + + _create: function() { + // handle string values that need to be parsed + this._setOption( "max", this.options.max ); + this._setOption( "min", this.options.min ); + this._setOption( "step", this.options.step ); + + // Only format if there is a value, prevents the field from being marked + // as invalid in Firefox, see #9573. + if ( this.value() !== "" ) { + // Format the value, but don't constrain. + this._value( this.element.val(), true ); + } + + this._draw(); + this._on( this._events ); + this._refresh(); + + // turning off autocomplete prevents the browser from remembering the + // value when navigating through history, so we re-enable autocomplete + // if the page is unloaded before the widget is destroyed. #7790 + this._on( this.window, { + beforeunload: function() { + this.element.removeAttr( "autocomplete" ); + } + }); + }, + + _getCreateOptions: function() { + var options = {}, + element = this.element; + + $.each( [ "min", "max", "step" ], function( i, option ) { + var value = element.attr( option ); + if ( value !== undefined && value.length ) { + options[ option ] = value; + } + }); + + return options; + }, + + _events: { + keydown: function( event ) { + if ( this._start( event ) && this._keydown( event ) ) { + event.preventDefault(); + } + }, + keyup: "_stop", + focus: function() { + this.previous = this.element.val(); + }, + blur: function( event ) { + if ( this.cancelBlur ) { + delete this.cancelBlur; + return; + } + + this._stop(); + this._refresh(); + if ( this.previous !== this.element.val() ) { + this._trigger( "change", event ); + } + }, + mousewheel: function( event, delta ) { + if ( !delta ) { + return; + } + if ( !this.spinning && !this._start( event ) ) { + return false; + } + + this._spin( (delta > 0 ? 1 : -1) * this.options.step, event ); + clearTimeout( this.mousewheelTimer ); + this.mousewheelTimer = this._delay(function() { + if ( this.spinning ) { + this._stop( event ); + } + }, 100 ); + event.preventDefault(); + }, + "mousedown .ui-spinner-button": function( event ) { + var previous; + + // We never want the buttons to have focus; whenever the user is + // interacting with the spinner, the focus should be on the input. + // If the input is focused then this.previous is properly set from + // when the input first received focus. If the input is not focused + // then we need to set this.previous based on the value before spinning. + previous = this.element[0] === this.document[0].activeElement ? + this.previous : this.element.val(); + function checkFocus() { + var isActive = this.element[0] === this.document[0].activeElement; + if ( !isActive ) { + this.element.focus(); + this.previous = previous; + // support: IE + // IE sets focus asynchronously, so we need to check if focus + // moved off of the input because the user clicked on the button. + this._delay(function() { + this.previous = previous; + }); + } + } + + // ensure focus is on (or stays on) the text field + event.preventDefault(); + checkFocus.call( this ); + + // support: IE + // IE doesn't prevent moving focus even with event.preventDefault() + // so we set a flag to know when we should ignore the blur event + // and check (again) if focus moved off of the input. + this.cancelBlur = true; + this._delay(function() { + delete this.cancelBlur; + checkFocus.call( this ); + }); + + if ( this._start( event ) === false ) { + return; + } + + this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event ); + }, + "mouseup .ui-spinner-button": "_stop", + "mouseenter .ui-spinner-button": function( event ) { + // button will add ui-state-active if mouse was down while mouseleave and kept down + if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) { + return; + } + + if ( this._start( event ) === false ) { + return false; + } + this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event ); + }, + // TODO: do we really want to consider this a stop? + // shouldn't we just stop the repeater and wait until mouseup before + // we trigger the stop event? + "mouseleave .ui-spinner-button": "_stop" + }, + + _draw: function() { + var uiSpinner = this.uiSpinner = this.element + .addClass( "ui-spinner-input" ) + .attr( "autocomplete", "off" ) + .wrap( this._uiSpinnerHtml() ) + .parent() + // add buttons + .append( this._buttonHtml() ); + + this.element.attr( "role", "spinbutton" ); + + // button bindings + this.buttons = uiSpinner.find( ".ui-spinner-button" ) + .attr( "tabIndex", -1 ) + .button() + .removeClass( "ui-corner-all" ); + + // IE 6 doesn't understand height: 50% for the buttons + // unless the wrapper has an explicit height + if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) && + uiSpinner.height() > 0 ) { + uiSpinner.height( uiSpinner.height() ); + } + + // disable spinner if element was already disabled + if ( this.options.disabled ) { + this.disable(); + } + }, + + _keydown: function( event ) { + var options = this.options, + keyCode = $.ui.keyCode; + + switch ( event.keyCode ) { + case keyCode.UP: + this._repeat( null, 1, event ); + return true; + case keyCode.DOWN: + this._repeat( null, -1, event ); + return true; + case keyCode.PAGE_UP: + this._repeat( null, options.page, event ); + return true; + case keyCode.PAGE_DOWN: + this._repeat( null, -options.page, event ); + return true; + } + + return false; + }, + + _uiSpinnerHtml: function() { + return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"; + }, + + _buttonHtml: function() { + return "" + + "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" + + "<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" + + "</a>" + + "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" + + "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" + + "</a>"; + }, + + _start: function( event ) { + if ( !this.spinning && this._trigger( "start", event ) === false ) { + return false; + } + + if ( !this.counter ) { + this.counter = 1; + } + this.spinning = true; + return true; + }, + + _repeat: function( i, steps, event ) { + i = i || 500; + + clearTimeout( this.timer ); + this.timer = this._delay(function() { + this._repeat( 40, steps, event ); + }, i ); + + this._spin( steps * this.options.step, event ); + }, + + _spin: function( step, event ) { + var value = this.value() || 0; + + if ( !this.counter ) { + this.counter = 1; + } + + value = this._adjustValue( value + step * this._increment( this.counter ) ); + + if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) { + this._value( value ); + this.counter++; + } + }, + + _increment: function( i ) { + var incremental = this.options.incremental; + + if ( incremental ) { + return $.isFunction( incremental ) ? + incremental( i ) : + Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 ); + } + + return 1; + }, + + _precision: function() { + var precision = this._precisionOf( this.options.step ); + if ( this.options.min !== null ) { + precision = Math.max( precision, this._precisionOf( this.options.min ) ); + } + return precision; + }, + + _precisionOf: function( num ) { + var str = num.toString(), + decimal = str.indexOf( "." ); + return decimal === -1 ? 0 : str.length - decimal - 1; + }, + + _adjustValue: function( value ) { + var base, aboveMin, + options = this.options; + + // make sure we're at a valid step + // - find out where we are relative to the base (min or 0) + base = options.min !== null ? options.min : 0; + aboveMin = value - base; + // - round to the nearest step + aboveMin = Math.round(aboveMin / options.step) * options.step; + // - rounding is based on 0, so adjust back to our base + value = base + aboveMin; + + // fix precision from bad JS floating point math + value = parseFloat( value.toFixed( this._precision() ) ); + + // clamp the value + if ( options.max !== null && value > options.max) { + return options.max; + } + if ( options.min !== null && value < options.min ) { + return options.min; + } + + return value; + }, + + _stop: function( event ) { + if ( !this.spinning ) { + return; + } + + clearTimeout( this.timer ); + clearTimeout( this.mousewheelTimer ); + this.counter = 0; + this.spinning = false; + this._trigger( "stop", event ); + }, + + _setOption: function( key, value ) { + if ( key === "culture" || key === "numberFormat" ) { + var prevValue = this._parse( this.element.val() ); + this.options[ key ] = value; + this.element.val( this._format( prevValue ) ); + return; + } + + if ( key === "max" || key === "min" || key === "step" ) { + if ( typeof value === "string" ) { + value = this._parse( value ); + } + } + if ( key === "icons" ) { + this.buttons.first().find( ".ui-icon" ) + .removeClass( this.options.icons.up ) + .addClass( value.up ); + this.buttons.last().find( ".ui-icon" ) + .removeClass( this.options.icons.down ) + .addClass( value.down ); + } + + this._super( key, value ); + + if ( key === "disabled" ) { + if ( value ) { + this.element.prop( "disabled", true ); + this.buttons.button( "disable" ); + } else { + this.element.prop( "disabled", false ); + this.buttons.button( "enable" ); + } + } + }, + + _setOptions: modifier(function( options ) { + this._super( options ); + this._value( this.element.val() ); + }), + + _parse: function( val ) { + if ( typeof val === "string" && val !== "" ) { + val = window.Globalize && this.options.numberFormat ? + Globalize.parseFloat( val, 10, this.options.culture ) : +val; + } + return val === "" || isNaN( val ) ? null : val; + }, + + _format: function( value ) { + if ( value === "" ) { + return ""; + } + return window.Globalize && this.options.numberFormat ? + Globalize.format( value, this.options.numberFormat, this.options.culture ) : + value; + }, + + _refresh: function() { + this.element.attr({ + "aria-valuemin": this.options.min, + "aria-valuemax": this.options.max, + // TODO: what should we do with values that can't be parsed? + "aria-valuenow": this._parse( this.element.val() ) + }); + }, + + // update the value without triggering change + _value: function( value, allowAny ) { + var parsed; + if ( value !== "" ) { + parsed = this._parse( value ); + if ( parsed !== null ) { + if ( !allowAny ) { + parsed = this._adjustValue( parsed ); + } + value = this._format( parsed ); + } + } + this.element.val( value ); + this._refresh(); + }, + + _destroy: function() { + this.element + .removeClass( "ui-spinner-input" ) + .prop( "disabled", false ) + .removeAttr( "autocomplete" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + this.uiSpinner.replaceWith( this.element ); + }, + + stepUp: modifier(function( steps ) { + this._stepUp( steps ); + }), + _stepUp: function( steps ) { + if ( this._start() ) { + this._spin( (steps || 1) * this.options.step ); + this._stop(); + } + }, + + stepDown: modifier(function( steps ) { + this._stepDown( steps ); + }), + _stepDown: function( steps ) { + if ( this._start() ) { + this._spin( (steps || 1) * -this.options.step ); + this._stop(); + } + }, + + pageUp: modifier(function( pages ) { + this._stepUp( (pages || 1) * this.options.page ); + }), + + pageDown: modifier(function( pages ) { + this._stepDown( (pages || 1) * this.options.page ); + }), + + value: function( newVal ) { + if ( !arguments.length ) { + return this._parse( this.element.val() ); + } + modifier( this._value ).call( this, newVal ); + }, + + widget: function() { + return this.uiSpinner; + } +}); + +}( jQuery ) ); +(function( $, undefined ) { + +var tabId = 0, + rhash = /#.*$/; + +function getNextTabId() { + return ++tabId; +} + +function isLocal( anchor ) { + // support: IE7 + // IE7 doesn't normalize the href property when set via script (#9317) + anchor = anchor.cloneNode( false ); + + return anchor.hash.length > 1 && + decodeURIComponent( anchor.href.replace( rhash, "" ) ) === + decodeURIComponent( location.href.replace( rhash, "" ) ); +} + +$.widget( "ui.tabs", { + version: "1.10.4", + delay: 300, + options: { + active: null, + collapsible: false, + event: "click", + heightStyle: "content", + hide: null, + show: null, + + // callbacks + activate: null, + beforeActivate: null, + beforeLoad: null, + load: null + }, + + _create: function() { + var that = this, + options = this.options; + + this.running = false; + + this.element + .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ) + .toggleClass( "ui-tabs-collapsible", options.collapsible ) + // Prevent users from focusing disabled tabs via click + .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) { + if ( $( this ).is( ".ui-state-disabled" ) ) { + event.preventDefault(); + } + }) + // support: IE <9 + // Preventing the default action in mousedown doesn't prevent IE + // from focusing the element, so if the anchor gets focused, blur. + // We don't have to worry about focusing the previously focused + // element since clicking on a non-focusable element should focus + // the body anyway. + .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() { + if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { + this.blur(); + } + }); + + this._processTabs(); + options.active = this._initialActive(); + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + if ( $.isArray( options.disabled ) ) { + options.disabled = $.unique( options.disabled.concat( + $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { + return that.tabs.index( li ); + }) + ) ).sort(); + } + + // check for length avoids error when initializing empty list + if ( this.options.active !== false && this.anchors.length ) { + this.active = this._findActive( options.active ); + } else { + this.active = $(); + } + + this._refresh(); + + if ( this.active.length ) { + this.load( options.active ); + } + }, + + _initialActive: function() { + var active = this.options.active, + collapsible = this.options.collapsible, + locationHash = location.hash.substring( 1 ); + + if ( active === null ) { + // check the fragment identifier in the URL + if ( locationHash ) { + this.tabs.each(function( i, tab ) { + if ( $( tab ).attr( "aria-controls" ) === locationHash ) { + active = i; + return false; + } + }); + } + + // check for a tab marked active via a class + if ( active === null ) { + active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); + } + + // no active tab, set to false + if ( active === null || active === -1 ) { + active = this.tabs.length ? 0 : false; + } + } + + // handle numbers: negative, out of range + if ( active !== false ) { + active = this.tabs.index( this.tabs.eq( active ) ); + if ( active === -1 ) { + active = collapsible ? false : 0; + } + } + + // don't allow collapsible: false and active: false + if ( !collapsible && active === false && this.anchors.length ) { + active = 0; + } + + return active; + }, + + _getCreateEventData: function() { + return { + tab: this.active, + panel: !this.active.length ? $() : this._getPanelForTab( this.active ) + }; + }, + + _tabKeydown: function( event ) { + var focusedTab = $( this.document[0].activeElement ).closest( "li" ), + selectedIndex = this.tabs.index( focusedTab ), + goingForward = true; + + if ( this._handlePageNav( event ) ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + selectedIndex++; + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.LEFT: + goingForward = false; + selectedIndex--; + break; + case $.ui.keyCode.END: + selectedIndex = this.anchors.length - 1; + break; + case $.ui.keyCode.HOME: + selectedIndex = 0; + break; + case $.ui.keyCode.SPACE: + // Activate only, no collapsing + event.preventDefault(); + clearTimeout( this.activating ); + this._activate( selectedIndex ); + return; + case $.ui.keyCode.ENTER: + // Toggle (cancel delayed activation, allow collapsing) + event.preventDefault(); + clearTimeout( this.activating ); + // Determine if we should collapse or activate + this._activate( selectedIndex === this.options.active ? false : selectedIndex ); + return; + default: + return; + } + + // Focus the appropriate tab, based on which key was pressed + event.preventDefault(); + clearTimeout( this.activating ); + selectedIndex = this._focusNextTab( selectedIndex, goingForward ); + + // Navigating with control key will prevent automatic activation + if ( !event.ctrlKey ) { + // Update aria-selected immediately so that AT think the tab is already selected. + // Otherwise AT may confuse the user by stating that they need to activate the tab, + // but the tab will already be activated by the time the announcement finishes. + focusedTab.attr( "aria-selected", "false" ); + this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); + + this.activating = this._delay(function() { + this.option( "active", selectedIndex ); + }, this.delay ); + } + }, + + _panelKeydown: function( event ) { + if ( this._handlePageNav( event ) ) { + return; + } + + // Ctrl+up moves focus to the current tab + if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { + event.preventDefault(); + this.active.focus(); + } + }, + + // Alt+page up/down moves focus to the previous/next tab (and activates) + _handlePageNav: function( event ) { + if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { + this._activate( this._focusNextTab( this.options.active - 1, false ) ); + return true; + } + if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { + this._activate( this._focusNextTab( this.options.active + 1, true ) ); + return true; + } + }, + + _findNextTab: function( index, goingForward ) { + var lastTabIndex = this.tabs.length - 1; + + function constrain() { + if ( index > lastTabIndex ) { + index = 0; + } + if ( index < 0 ) { + index = lastTabIndex; + } + return index; + } + + while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { + index = goingForward ? index + 1 : index - 1; + } + + return index; + }, + + _focusNextTab: function( index, goingForward ) { + index = this._findNextTab( index, goingForward ); + this.tabs.eq( index ).focus(); + return index; + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + if ( key === "disabled" ) { + // don't use the widget factory's disabled handling + this._setupDisabled( value ); + return; + } + + this._super( key, value); + + if ( key === "collapsible" ) { + this.element.toggleClass( "ui-tabs-collapsible", value ); + // Setting collapsible: false while collapsed; open first panel + if ( !value && this.options.active === false ) { + this._activate( 0 ); + } + } + + if ( key === "event" ) { + this._setupEvents( value ); + } + + if ( key === "heightStyle" ) { + this._setupHeightStyle( value ); + } + }, + + _tabId: function( tab ) { + return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId(); + }, + + _sanitizeSelector: function( hash ) { + return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; + }, + + refresh: function() { + var options = this.options, + lis = this.tablist.children( ":has(a[href])" ); + + // get disabled tabs from class attribute from HTML + // this will get converted to a boolean if needed in _refresh() + options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { + return lis.index( tab ); + }); + + this._processTabs(); + + // was collapsed or no tabs + if ( options.active === false || !this.anchors.length ) { + options.active = false; + this.active = $(); + // was active, but active tab is gone + } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { + // all remaining tabs are disabled + if ( this.tabs.length === options.disabled.length ) { + options.active = false; + this.active = $(); + // activate previous tab + } else { + this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); + } + // was active, active tab still exists + } else { + // make sure active index is correct + options.active = this.tabs.index( this.active ); + } + + this._refresh(); + }, + + _refresh: function() { + this._setupDisabled( this.options.disabled ); + this._setupEvents( this.options.event ); + this._setupHeightStyle( this.options.heightStyle ); + + this.tabs.not( this.active ).attr({ + "aria-selected": "false", + tabIndex: -1 + }); + this.panels.not( this._getPanelForTab( this.active ) ) + .hide() + .attr({ + "aria-expanded": "false", + "aria-hidden": "true" + }); + + // Make sure one tab is in the tab order + if ( !this.active.length ) { + this.tabs.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active + .addClass( "ui-tabs-active ui-state-active" ) + .attr({ + "aria-selected": "true", + tabIndex: 0 + }); + this._getPanelForTab( this.active ) + .show() + .attr({ + "aria-expanded": "true", + "aria-hidden": "false" + }); + } + }, + + _processTabs: function() { + var that = this; + + this.tablist = this._getList() + .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) + .attr( "role", "tablist" ); + + this.tabs = this.tablist.find( "> li:has(a[href])" ) + .addClass( "ui-state-default ui-corner-top" ) + .attr({ + role: "tab", + tabIndex: -1 + }); + + this.anchors = this.tabs.map(function() { + return $( "a", this )[ 0 ]; + }) + .addClass( "ui-tabs-anchor" ) + .attr({ + role: "presentation", + tabIndex: -1 + }); + + this.panels = $(); + + this.anchors.each(function( i, anchor ) { + var selector, panel, panelId, + anchorId = $( anchor ).uniqueId().attr( "id" ), + tab = $( anchor ).closest( "li" ), + originalAriaControls = tab.attr( "aria-controls" ); + + // inline tab + if ( isLocal( anchor ) ) { + selector = anchor.hash; + panel = that.element.find( that._sanitizeSelector( selector ) ); + // remote tab + } else { + panelId = that._tabId( tab ); + selector = "#" + panelId; + panel = that.element.find( selector ); + if ( !panel.length ) { + panel = that._createPanel( panelId ); + panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); + } + panel.attr( "aria-live", "polite" ); + } + + if ( panel.length) { + that.panels = that.panels.add( panel ); + } + if ( originalAriaControls ) { + tab.data( "ui-tabs-aria-controls", originalAriaControls ); + } + tab.attr({ + "aria-controls": selector.substring( 1 ), + "aria-labelledby": anchorId + }); + panel.attr( "aria-labelledby", anchorId ); + }); + + this.panels + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .attr( "role", "tabpanel" ); + }, + + // allow overriding how to find the list for rare usage scenarios (#7715) + _getList: function() { + return this.tablist || this.element.find( "ol,ul" ).eq( 0 ); + }, + + _createPanel: function( id ) { + return $( "<div>" ) + .attr( "id", id ) + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .data( "ui-tabs-destroy", true ); + }, + + _setupDisabled: function( disabled ) { + if ( $.isArray( disabled ) ) { + if ( !disabled.length ) { + disabled = false; + } else if ( disabled.length === this.anchors.length ) { + disabled = true; + } + } + + // disable tabs + for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) { + if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { + $( li ) + .addClass( "ui-state-disabled" ) + .attr( "aria-disabled", "true" ); + } else { + $( li ) + .removeClass( "ui-state-disabled" ) + .removeAttr( "aria-disabled" ); + } + } + + this.options.disabled = disabled; + }, + + _setupEvents: function( event ) { + var events = { + click: function( event ) { + event.preventDefault(); + } + }; + if ( event ) { + $.each( event.split(" "), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + }); + } + + this._off( this.anchors.add( this.tabs ).add( this.panels ) ); + this._on( this.anchors, events ); + this._on( this.tabs, { keydown: "_tabKeydown" } ); + this._on( this.panels, { keydown: "_panelKeydown" } ); + + this._focusable( this.tabs ); + this._hoverable( this.tabs ); + }, + + _setupHeightStyle: function( heightStyle ) { + var maxHeight, + parent = this.element.parent(); + + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + maxHeight -= this.element.outerHeight() - this.element.height(); + + this.element.siblings( ":visible" ).each(function() { + var elem = $( this ), + position = elem.css( "position" ); + + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + }); + + this.element.children().not( this.panels ).each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.panels.each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.panels.each(function() { + maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); + }).height( maxHeight ); + } + }, + + _eventHandler: function( event ) { + var options = this.options, + active = this.active, + anchor = $( event.currentTarget ), + tab = anchor.closest( "li" ), + clickedIsActive = tab[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : this._getPanelForTab( tab ), + toHide = !active.length ? $() : this._getPanelForTab( active ), + eventData = { + oldTab: active, + oldPanel: toHide, + newTab: collapsing ? $() : tab, + newPanel: toShow + }; + + event.preventDefault(); + + if ( tab.hasClass( "ui-state-disabled" ) || + // tab is already loading + tab.hasClass( "ui-tabs-loading" ) || + // can't switch durning an animation + this.running || + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.tabs.index( tab ); + + this.active = clickedIsActive ? $() : tab; + if ( this.xhr ) { + this.xhr.abort(); + } + + if ( !toHide.length && !toShow.length ) { + $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); + } + + if ( toShow.length ) { + this.load( this.tabs.index( tab ), event ); + } + this._toggle( event, eventData ); + }, + + // handles show/hide for selecting tabs + _toggle: function( event, eventData ) { + var that = this, + toShow = eventData.newPanel, + toHide = eventData.oldPanel; + + this.running = true; + + function complete() { + that.running = false; + that._trigger( "activate", event, eventData ); + } + + function show() { + eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" ); + + if ( toShow.length && that.options.show ) { + that._show( toShow, that.options.show, complete ); + } else { + toShow.show(); + complete(); + } + } + + // start out by hiding, then showing, then completing + if ( toHide.length && this.options.hide ) { + this._hide( toHide, this.options.hide, function() { + eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); + show(); + }); + } else { + eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); + toHide.hide(); + show(); + } + + toHide.attr({ + "aria-expanded": "false", + "aria-hidden": "true" + }); + eventData.oldTab.attr( "aria-selected", "false" ); + // If we're switching tabs, remove the old tab from the tab order. + // If we're opening from collapsed state, remove the previous tab from the tab order. + // If we're collapsing, then keep the collapsing tab in the tab order. + if ( toShow.length && toHide.length ) { + eventData.oldTab.attr( "tabIndex", -1 ); + } else if ( toShow.length ) { + this.tabs.filter(function() { + return $( this ).attr( "tabIndex" ) === 0; + }) + .attr( "tabIndex", -1 ); + } + + toShow.attr({ + "aria-expanded": "true", + "aria-hidden": "false" + }); + eventData.newTab.attr({ + "aria-selected": "true", + tabIndex: 0 + }); + }, + + _activate: function( index ) { + var anchor, + active = this._findActive( index ); + + // trying to activate the already active panel + if ( active[ 0 ] === this.active[ 0 ] ) { + return; + } + + // trying to collapse, simulate a click on the current active header + if ( !active.length ) { + active = this.active; + } + + anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; + this._eventHandler({ + target: anchor, + currentTarget: anchor, + preventDefault: $.noop + }); + }, + + _findActive: function( index ) { + return index === false ? $() : this.tabs.eq( index ); + }, + + _getIndex: function( index ) { + // meta-function to give users option to provide a href string instead of a numerical index. + if ( typeof index === "string" ) { + index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) ); + } + + return index; + }, + + _destroy: function() { + if ( this.xhr ) { + this.xhr.abort(); + } + + this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ); + + this.tablist + .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) + .removeAttr( "role" ); + + this.anchors + .removeClass( "ui-tabs-anchor" ) + .removeAttr( "role" ) + .removeAttr( "tabIndex" ) + .removeUniqueId(); + + this.tabs.add( this.panels ).each(function() { + if ( $.data( this, "ui-tabs-destroy" ) ) { + $( this ).remove(); + } else { + $( this ) + .removeClass( "ui-state-default ui-state-active ui-state-disabled " + + "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" ) + .removeAttr( "tabIndex" ) + .removeAttr( "aria-live" ) + .removeAttr( "aria-busy" ) + .removeAttr( "aria-selected" ) + .removeAttr( "aria-labelledby" ) + .removeAttr( "aria-hidden" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "role" ); + } + }); + + this.tabs.each(function() { + var li = $( this ), + prev = li.data( "ui-tabs-aria-controls" ); + if ( prev ) { + li + .attr( "aria-controls", prev ) + .removeData( "ui-tabs-aria-controls" ); + } else { + li.removeAttr( "aria-controls" ); + } + }); + + this.panels.show(); + + if ( this.options.heightStyle !== "content" ) { + this.panels.css( "height", "" ); + } + }, + + enable: function( index ) { + var disabled = this.options.disabled; + if ( disabled === false ) { + return; + } + + if ( index === undefined ) { + disabled = false; + } else { + index = this._getIndex( index ); + if ( $.isArray( disabled ) ) { + disabled = $.map( disabled, function( num ) { + return num !== index ? num : null; + }); + } else { + disabled = $.map( this.tabs, function( li, num ) { + return num !== index ? num : null; + }); + } + } + this._setupDisabled( disabled ); + }, + + disable: function( index ) { + var disabled = this.options.disabled; + if ( disabled === true ) { + return; + } + + if ( index === undefined ) { + disabled = true; + } else { + index = this._getIndex( index ); + if ( $.inArray( index, disabled ) !== -1 ) { + return; + } + if ( $.isArray( disabled ) ) { + disabled = $.merge( [ index ], disabled ).sort(); + } else { + disabled = [ index ]; + } + } + this._setupDisabled( disabled ); + }, + + load: function( index, event ) { + index = this._getIndex( index ); + var that = this, + tab = this.tabs.eq( index ), + anchor = tab.find( ".ui-tabs-anchor" ), + panel = this._getPanelForTab( tab ), + eventData = { + tab: tab, + panel: panel + }; + + // not remote + if ( isLocal( anchor[ 0 ] ) ) { + return; + } + + this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); + + // support: jQuery <1.8 + // jQuery <1.8 returns false if the request is canceled in beforeSend, + // but as of 1.8, $.ajax() always returns a jqXHR object. + if ( this.xhr && this.xhr.statusText !== "canceled" ) { + tab.addClass( "ui-tabs-loading" ); + panel.attr( "aria-busy", "true" ); + + this.xhr + .success(function( response ) { + // support: jQuery <1.8 + // http://bugs.jquery.com/ticket/11778 + setTimeout(function() { + panel.html( response ); + that._trigger( "load", event, eventData ); + }, 1 ); + }) + .complete(function( jqXHR, status ) { + // support: jQuery <1.8 + // http://bugs.jquery.com/ticket/11778 + setTimeout(function() { + if ( status === "abort" ) { + that.panels.stop( false, true ); + } + + tab.removeClass( "ui-tabs-loading" ); + panel.removeAttr( "aria-busy" ); + + if ( jqXHR === that.xhr ) { + delete that.xhr; + } + }, 1 ); + }); + } + }, + + _ajaxSettings: function( anchor, event, eventData ) { + var that = this; + return { + url: anchor.attr( "href" ), + beforeSend: function( jqXHR, settings ) { + return that._trigger( "beforeLoad", event, + $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) ); + } + }; + }, + + _getPanelForTab: function( tab ) { + var id = $( tab ).attr( "aria-controls" ); + return this.element.find( this._sanitizeSelector( "#" + id ) ); + } +}); + +})( jQuery ); +(function( $ ) { + +var increments = 0; + +function addDescribedBy( elem, id ) { + var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ); + describedby.push( id ); + elem + .data( "ui-tooltip-id", id ) + .attr( "aria-describedby", $.trim( describedby.join( " " ) ) ); +} + +function removeDescribedBy( elem ) { + var id = elem.data( "ui-tooltip-id" ), + describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ), + index = $.inArray( id, describedby ); + if ( index !== -1 ) { + describedby.splice( index, 1 ); + } + + elem.removeData( "ui-tooltip-id" ); + describedby = $.trim( describedby.join( " " ) ); + if ( describedby ) { + elem.attr( "aria-describedby", describedby ); + } else { + elem.removeAttr( "aria-describedby" ); + } +} + +$.widget( "ui.tooltip", { + version: "1.10.4", + options: { + content: function() { + // support: IE<9, Opera in jQuery <1.7 + // .text() can't accept undefined, so coerce to a string + var title = $( this ).attr( "title" ) || ""; + // Escape title, since we're going from an attribute to raw HTML + return $( "<a>" ).text( title ).html(); + }, + hide: true, + // Disabled elements have inconsistent behavior across browsers (#8661) + items: "[title]:not([disabled])", + position: { + my: "left top+15", + at: "left bottom", + collision: "flipfit flip" + }, + show: true, + tooltipClass: null, + track: false, + + // callbacks + close: null, + open: null + }, + + _create: function() { + this._on({ + mouseover: "open", + focusin: "open" + }); + + // IDs of generated tooltips, needed for destroy + this.tooltips = {}; + // IDs of parent tooltips where we removed the title attribute + this.parents = {}; + + if ( this.options.disabled ) { + this._disable(); + } + }, + + _setOption: function( key, value ) { + var that = this; + + if ( key === "disabled" ) { + this[ value ? "_disable" : "_enable" ](); + this.options[ key ] = value; + // disable element style changes + return; + } + + this._super( key, value ); + + if ( key === "content" ) { + $.each( this.tooltips, function( id, element ) { + that._updateContent( element ); + }); + } + }, + + _disable: function() { + var that = this; + + // close open tooltips + $.each( this.tooltips, function( id, element ) { + var event = $.Event( "blur" ); + event.target = event.currentTarget = element[0]; + that.close( event, true ); + }); + + // remove title attributes to prevent native tooltips + this.element.find( this.options.items ).addBack().each(function() { + var element = $( this ); + if ( element.is( "[title]" ) ) { + element + .data( "ui-tooltip-title", element.attr( "title" ) ) + .attr( "title", "" ); + } + }); + }, + + _enable: function() { + // restore title attributes + this.element.find( this.options.items ).addBack().each(function() { + var element = $( this ); + if ( element.data( "ui-tooltip-title" ) ) { + element.attr( "title", element.data( "ui-tooltip-title" ) ); + } + }); + }, + + open: function( event ) { + var that = this, + target = $( event ? event.target : this.element ) + // we need closest here due to mouseover bubbling, + // but always pointing at the same event target + .closest( this.options.items ); + + // No element to show a tooltip for or the tooltip is already open + if ( !target.length || target.data( "ui-tooltip-id" ) ) { + return; + } + + if ( target.attr( "title" ) ) { + target.data( "ui-tooltip-title", target.attr( "title" ) ); + } + + target.data( "ui-tooltip-open", true ); + + // kill parent tooltips, custom or native, for hover + if ( event && event.type === "mouseover" ) { + target.parents().each(function() { + var parent = $( this ), + blurEvent; + if ( parent.data( "ui-tooltip-open" ) ) { + blurEvent = $.Event( "blur" ); + blurEvent.target = blurEvent.currentTarget = this; + that.close( blurEvent, true ); + } + if ( parent.attr( "title" ) ) { + parent.uniqueId(); + that.parents[ this.id ] = { + element: this, + title: parent.attr( "title" ) + }; + parent.attr( "title", "" ); + } + }); + } + + this._updateContent( target, event ); + }, + + _updateContent: function( target, event ) { + var content, + contentOption = this.options.content, + that = this, + eventType = event ? event.type : null; + + if ( typeof contentOption === "string" ) { + return this._open( event, target, contentOption ); + } + + content = contentOption.call( target[0], function( response ) { + // ignore async response if tooltip was closed already + if ( !target.data( "ui-tooltip-open" ) ) { + return; + } + // IE may instantly serve a cached response for ajax requests + // delay this call to _open so the other call to _open runs first + that._delay(function() { + // jQuery creates a special event for focusin when it doesn't + // exist natively. To improve performance, the native event + // object is reused and the type is changed. Therefore, we can't + // rely on the type being correct after the event finished + // bubbling, so we set it back to the previous value. (#8740) + if ( event ) { + event.type = eventType; + } + this._open( event, target, response ); + }); + }); + if ( content ) { + this._open( event, target, content ); + } + }, + + _open: function( event, target, content ) { + var tooltip, events, delayedShow, + positionOption = $.extend( {}, this.options.position ); + + if ( !content ) { + return; + } + + // Content can be updated multiple times. If the tooltip already + // exists, then just update the content and bail. + tooltip = this._find( target ); + if ( tooltip.length ) { + tooltip.find( ".ui-tooltip-content" ).html( content ); + return; + } + + // if we have a title, clear it to prevent the native tooltip + // we have to check first to avoid defining a title if none exists + // (we don't want to cause an element to start matching [title]) + // + // We use removeAttr only for key events, to allow IE to export the correct + // accessible attributes. For mouse events, set to empty string to avoid + // native tooltip showing up (happens only when removing inside mouseover). + if ( target.is( "[title]" ) ) { + if ( event && event.type === "mouseover" ) { + target.attr( "title", "" ); + } else { + target.removeAttr( "title" ); + } + } + + tooltip = this._tooltip( target ); + addDescribedBy( target, tooltip.attr( "id" ) ); + tooltip.find( ".ui-tooltip-content" ).html( content ); + + function position( event ) { + positionOption.of = event; + if ( tooltip.is( ":hidden" ) ) { + return; + } + tooltip.position( positionOption ); + } + if ( this.options.track && event && /^mouse/.test( event.type ) ) { + this._on( this.document, { + mousemove: position + }); + // trigger once to override element-relative positioning + position( event ); + } else { + tooltip.position( $.extend({ + of: target + }, this.options.position ) ); + } + + tooltip.hide(); + + this._show( tooltip, this.options.show ); + // Handle tracking tooltips that are shown with a delay (#8644). As soon + // as the tooltip is visible, position the tooltip using the most recent + // event. + if ( this.options.show && this.options.show.delay ) { + delayedShow = this.delayedShow = setInterval(function() { + if ( tooltip.is( ":visible" ) ) { + position( positionOption.of ); + clearInterval( delayedShow ); + } + }, $.fx.interval ); + } + + this._trigger( "open", event, { tooltip: tooltip } ); + + events = { + keyup: function( event ) { + if ( event.keyCode === $.ui.keyCode.ESCAPE ) { + var fakeEvent = $.Event(event); + fakeEvent.currentTarget = target[0]; + this.close( fakeEvent, true ); + } + }, + remove: function() { + this._removeTooltip( tooltip ); + } + }; + if ( !event || event.type === "mouseover" ) { + events.mouseleave = "close"; + } + if ( !event || event.type === "focusin" ) { + events.focusout = "close"; + } + this._on( true, target, events ); + }, + + close: function( event ) { + var that = this, + target = $( event ? event.currentTarget : this.element ), + tooltip = this._find( target ); + + // disabling closes the tooltip, so we need to track when we're closing + // to avoid an infinite loop in case the tooltip becomes disabled on close + if ( this.closing ) { + return; + } + + // Clear the interval for delayed tracking tooltips + clearInterval( this.delayedShow ); + + // only set title if we had one before (see comment in _open()) + if ( target.data( "ui-tooltip-title" ) ) { + target.attr( "title", target.data( "ui-tooltip-title" ) ); + } + + removeDescribedBy( target ); + + tooltip.stop( true ); + this._hide( tooltip, this.options.hide, function() { + that._removeTooltip( $( this ) ); + }); + + target.removeData( "ui-tooltip-open" ); + this._off( target, "mouseleave focusout keyup" ); + // Remove 'remove' binding only on delegated targets + if ( target[0] !== this.element[0] ) { + this._off( target, "remove" ); + } + this._off( this.document, "mousemove" ); + + if ( event && event.type === "mouseleave" ) { + $.each( this.parents, function( id, parent ) { + $( parent.element ).attr( "title", parent.title ); + delete that.parents[ id ]; + }); + } + + this.closing = true; + this._trigger( "close", event, { tooltip: tooltip } ); + this.closing = false; + }, + + _tooltip: function( element ) { + var id = "ui-tooltip-" + increments++, + tooltip = $( "<div>" ) + .attr({ + id: id, + role: "tooltip" + }) + .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " + + ( this.options.tooltipClass || "" ) ); + $( "<div>" ) + .addClass( "ui-tooltip-content" ) + .appendTo( tooltip ); + tooltip.appendTo( this.document[0].body ); + this.tooltips[ id ] = element; + return tooltip; + }, + + _find: function( target ) { + var id = target.data( "ui-tooltip-id" ); + return id ? $( "#" + id ) : $(); + }, + + _removeTooltip: function( tooltip ) { + tooltip.remove(); + delete this.tooltips[ tooltip.attr( "id" ) ]; + }, + + _destroy: function() { + var that = this; + + // close open tooltips + $.each( this.tooltips, function( id, element ) { + // Delegate to close method to handle common cleanup + var event = $.Event( "blur" ); + event.target = event.currentTarget = element[0]; + that.close( event, true ); + + // Remove immediately; destroying an open tooltip doesn't use the + // hide animation + $( "#" + id ).remove(); + + // Restore the title + if ( element.data( "ui-tooltip-title" ) ) { + element.attr( "title", element.data( "ui-tooltip-title" ) ); + element.removeData( "ui-tooltip-title" ); + } + }); + } +}); + +}( jQuery ) ); diff --git a/datepicker/js/jquery.multi-select.js b/datepicker/js/jquery.multi-select.js new file mode 100644 index 0000000..5f2bbd1 --- /dev/null +++ b/datepicker/js/jquery.multi-select.js @@ -0,0 +1,532 @@ +/* +* MultiSelect v0.9.11 +* Copyright (c) 2012 Louis Cuny +* +* This program is free software. It comes without any warranty, to +* the extent permitted by applicable law. You can redistribute it +* and/or modify it under the terms of the Do What The Fuck You Want +* To Public License, Version 2, as published by Sam Hocevar. See +* http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +!function ($) { + + "use strict"; + + + /* MULTISELECT CLASS DEFINITION + * ====================== */ + + var MultiSelect = function (element, options) { + this.options = options; + this.$element = $(element); + this.$container = $('<div/>', { 'class': "ms-container" }); + this.$selectableContainer = $('<div/>', { 'class': 'ms-selectable' }); + this.$selectionContainer = $('<div/>', { 'class': 'ms-selection' }); + this.$selectableUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' }); + this.$selectionUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' }); + this.scrollTo = 0; + this.elemsSelector = 'li:visible:not(.ms-optgroup-label,.ms-optgroup-container,.'+options.disabledClass+')'; + }; + + MultiSelect.prototype = { + constructor: MultiSelect, + + init: function(){ + var that = this, + ms = this.$element; + + if (ms.next('.ms-container').length === 0){ + ms.css({ position: 'absolute', left: '-9999px' }); + ms.attr('id', ms.attr('id') ? ms.attr('id') : Math.ceil(Math.random()*1000)+'multiselect'); + this.$container.attr('id', 'ms-'+ms.attr('id')); + this.$container.addClass(that.options.cssClass); + ms.find('option').each(function(){ + that.generateLisFromOption(this); + }); + + this.$selectionUl.find('.ms-optgroup-label').hide(); + + if (that.options.selectableHeader){ + that.$selectableContainer.append(that.options.selectableHeader); + } + that.$selectableContainer.append(that.$selectableUl); + if (that.options.selectableFooter){ + that.$selectableContainer.append(that.options.selectableFooter); + } + + if (that.options.selectionHeader){ + that.$selectionContainer.append(that.options.selectionHeader); + } + that.$selectionContainer.append(that.$selectionUl); + if (that.options.selectionFooter){ + that.$selectionContainer.append(that.options.selectionFooter); + } + + that.$container.append(that.$selectableContainer); + that.$container.append(that.$selectionContainer); + ms.after(that.$container); + + that.activeMouse(that.$selectableUl); + that.activeKeyboard(that.$selectableUl); + + var action = that.options.dblClick ? 'dblclick' : 'click'; + + that.$selectableUl.on(action, '.ms-elem-selectable', function(){ + that.select($(this).data('ms-value')); + }); + that.$selectionUl.on(action, '.ms-elem-selection', function(){ + that.deselect($(this).data('ms-value')); + }); + + that.activeMouse(that.$selectionUl); + that.activeKeyboard(that.$selectionUl); + + ms.on('focus', function(){ + that.$selectableUl.focus(); + }) + } + + var selectedValues = ms.find('option:selected').map(function(){ return $(this).val(); }).get(); + that.select(selectedValues, 'init'); + + if (typeof that.options.afterInit === 'function') { + that.options.afterInit.call(this, this.$container); + } + }, + + 'generateLisFromOption' : function(option, index, $container){ + var that = this, + ms = that.$element, + attributes = "", + $option = $(option); + + for (var cpt = 0; cpt < option.attributes.length; cpt++){ + var attr = option.attributes[cpt]; + + if(attr.name !== 'value' && attr.name !== 'disabled'){ + attributes += attr.name+'="'+attr.value+'" '; + } + } + var selectableLi = $('<li '+attributes+'><span>'+that.escapeHTML($option.text())+'</span></li>'), + selectedLi = selectableLi.clone(), + value = $option.val(), + elementId = that.sanitize(value); + + selectableLi + .data('ms-value', value) + .addClass('ms-elem-selectable') + .attr('id', elementId+'-selectable'); + + selectedLi + .data('ms-value', value) + .addClass('ms-elem-selection') + .attr('id', elementId+'-selection') + .hide(); + + if ($option.prop('disabled') || ms.prop('disabled')){ + selectedLi.addClass(that.options.disabledClass); + selectableLi.addClass(that.options.disabledClass); + } + + var $optgroup = $option.parent('optgroup'); + + if ($optgroup.length > 0){ + var optgroupLabel = $optgroup.attr('label'), + optgroupId = that.sanitize(optgroupLabel), + $selectableOptgroup = that.$selectableUl.find('#optgroup-selectable-'+optgroupId), + $selectionOptgroup = that.$selectionUl.find('#optgroup-selection-'+optgroupId); + + if ($selectableOptgroup.length === 0){ + var optgroupContainerTpl = '<li class="ms-optgroup-container"></li>', + optgroupTpl = '<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>'+optgroupLabel+'</span></li></ul>'; + + $selectableOptgroup = $(optgroupContainerTpl); + $selectionOptgroup = $(optgroupContainerTpl); + $selectableOptgroup.attr('id', 'optgroup-selectable-'+optgroupId); + $selectionOptgroup.attr('id', 'optgroup-selection-'+optgroupId); + $selectableOptgroup.append($(optgroupTpl)); + $selectionOptgroup.append($(optgroupTpl)); + if (that.options.selectableOptgroup){ + $selectableOptgroup.find('.ms-optgroup-label').on('click', function(){ + var values = $optgroup.children(':not(:selected)').map(function(){ return $(this).val() }).get(); + that.select(values); + }); + $selectionOptgroup.find('.ms-optgroup-label').on('click', function(){ + var values = $optgroup.children(':selected').map(function(){ return $(this).val() }).get(); + that.deselect(values); + }); + } + that.$selectableUl.append($selectableOptgroup); + that.$selectionUl.append($selectionOptgroup); + } + index = index == undefined ? $selectableOptgroup.children().length : index + 1; + selectableLi.insertAt(index, $selectableOptgroup.children()); + selectedLi.insertAt(index, $selectionOptgroup.children()); + } else { + index = index == undefined ? that.$selectableUl.children().length : index; + + selectableLi.insertAt(index, that.$selectableUl); + selectedLi.insertAt(index, that.$selectionUl); + } + }, + + 'addOption' : function(options){ + var that = this; + + if (options.value) options = [options]; + $.each(options, function(index, option){ + if (option.value && that.$element.find("option[value='"+option.value+"']").length === 0){ + var $option = $('<option value="'+option.value+'">'+option.text+'</option>'), + index = parseInt((typeof option.index === 'undefined' ? that.$element.children().length : option.index)), + $container = option.nested == undefined ? that.$element : $("optgroup[label='"+option.nested+"']") + + $option.insertAt(index, $container); + that.generateLisFromOption($option.get(0), index, option.nested); + } + }) + }, + + 'escapeHTML' : function(text){ + return $("<div>").text(text).html(); + }, + + 'activeKeyboard' : function($list){ + var that = this; + + $list.on('focus', function(){ + $(this).addClass('ms-focus'); + }) + .on('blur', function(){ + $(this).removeClass('ms-focus'); + }) + .on('keydown', function(e){ + switch (e.which) { + case 40: + case 38: + e.preventDefault(); + e.stopPropagation(); + that.moveHighlight($(this), (e.which === 38) ? -1 : 1); + return; + case 37: + case 39: + e.preventDefault(); + e.stopPropagation(); + that.switchList($list); + return; + case 9: + if(that.$element.is('[tabindex]')){ + e.preventDefault(); + var tabindex = parseInt(that.$element.attr('tabindex'), 10); + tabindex = (e.shiftKey) ? tabindex-1 : tabindex+1; + $('[tabindex="'+(tabindex)+'"]').focus(); + return; + }else{ + if(e.shiftKey){ + that.$element.trigger('focus'); + } + } + } + if($.inArray(e.which, that.options.keySelect) > -1){ + e.preventDefault(); + e.stopPropagation(); + that.selectHighlighted($list); + return; + } + }); + }, + + 'moveHighlight': function($list, direction){ + var $elems = $list.find(this.elemsSelector), + $currElem = $elems.filter('.ms-hover'), + $nextElem = null, + elemHeight = $elems.first().outerHeight(), + containerHeight = $list.height(), + containerSelector = '#'+this.$container.prop('id'); + + // Deactive mouseenter event when move is active + // It fixes a bug when mouse is over the list + $elems.off('mouseenter'); + + $elems.removeClass('ms-hover'); + if (direction === 1){ // DOWN + + $nextElem = $currElem.nextAll(this.elemsSelector).first(); + if ($nextElem.length === 0){ + var $optgroupUl = $currElem.parent(); + + if ($optgroupUl.hasClass('ms-optgroup')){ + var $optgroupLi = $optgroupUl.parent(), + $nextOptgroupLi = $optgroupLi.next(':visible'); + + if ($nextOptgroupLi.length > 0){ + $nextElem = $nextOptgroupLi.find(this.elemsSelector).first(); + } else { + $nextElem = $elems.first(); + } + } else { + $nextElem = $elems.first(); + } + } + } else if (direction === -1){ // UP + + $nextElem = $currElem.prevAll(this.elemsSelector).first(); + if ($nextElem.length === 0){ + var $optgroupUl = $currElem.parent(); + + if ($optgroupUl.hasClass('ms-optgroup')){ + var $optgroupLi = $optgroupUl.parent(), + $prevOptgroupLi = $optgroupLi.prev(':visible'); + + if ($prevOptgroupLi.length > 0){ + $nextElem = $prevOptgroupLi.find(this.elemsSelector).last(); + } else { + $nextElem = $elems.last(); + } + } else { + $nextElem = $elems.last(); + } + } + } + if ($nextElem.length > 0){ + $nextElem.addClass('ms-hover'); + var scrollTo = $list.scrollTop() + $nextElem.position().top - + containerHeight / 2 + elemHeight / 2; + + $list.scrollTop(scrollTo); + } + }, + + 'selectHighlighted' : function($list){ + var $elems = $list.find(this.elemsSelector), + $highlightedElem = $elems.filter('.ms-hover').first(); + + if ($highlightedElem.length > 0){ + if ($list.parent().hasClass('ms-selectable')){ + this.select($highlightedElem.data('ms-value')); + } else { + this.deselect($highlightedElem.data('ms-value')); + } + $elems.removeClass('ms-hover'); + } + }, + + 'switchList' : function($list){ + $list.blur(); + if ($list.parent().hasClass('ms-selectable')){ + this.$selectionUl.focus(); + } else { + this.$selectableUl.focus(); + } + }, + + 'activeMouse' : function($list){ + var that = this; + var lastMovedDom = false; + $list.on('mousemove', function(){ + if (lastMovedDom === this) return; + lastMovedDom = this; + var elems = $list.find(that.elemsSelector); + + elems.on('mouseenter', function(){ + elems.removeClass('ms-hover'); + $(this).addClass('ms-hover'); + }); + }); + }, + + 'refresh' : function() { + this.destroy(); + this.$element.multiSelect(this.options); + }, + + 'destroy' : function(){ + $("#ms-"+this.$element.attr("id")).remove(); + this.$element.css('position', '').css('left', '') + this.$element.removeData('multiselect'); + }, + + 'select' : function(value, method){ + if (typeof value === 'string'){ value = [value]; } + + var that = this, + ms = this.$element, + msIds = $.map(value, function(val){ return(that.sanitize(val)); }), + selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable').filter(':not(.'+that.options.disabledClass+')'), + selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection').filter(':not(.'+that.options.disabledClass+')'), + options = ms.find('option:not(:disabled)').filter(function(){ return($.inArray(this.value, value) > -1); }); + + if (method === 'init'){ + selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'), + selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection'); + } + + if (selectables.length > 0){ + selectables.addClass('ms-selected').hide(); + selections.addClass('ms-selected').show(); + options.prop('selected', true); + + var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container'); + if (selectableOptgroups.length > 0){ + selectableOptgroups.each(function(){ + var selectablesLi = $(this).find('.ms-elem-selectable'); + if (selectablesLi.length === selectablesLi.filter('.ms-selected').length){ + $(this).find('.ms-optgroup-label').hide(); + } + }); + + var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container'); + selectionOptgroups.each(function(){ + var selectionsLi = $(this).find('.ms-elem-selection'); + if (selectionsLi.filter('.ms-selected').length > 0){ + $(this).find('.ms-optgroup-label').show(); + } + }); + } else { + if (that.options.keepOrder && method !== 'init'){ + var selectionLiLast = that.$selectionUl.find('.ms-selected'); + if((selectionLiLast.length > 1) && (selectionLiLast.last().get(0) != selections.get(0))) { + selections.insertAfter(selectionLiLast.last()); + } + } + } + if (method !== 'init'){ + ms.trigger('change'); + if (typeof that.options.afterSelect === 'function') { + that.options.afterSelect.call(this, value); + } + } + } + }, + + 'deselect' : function(value){ + if (typeof value === 'string'){ value = [value]; } + + var that = this, + ms = this.$element, + msIds = $.map(value, function(val){ return(that.sanitize(val)); }), + selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'), + selections = this.$selectionUl.find('#' + msIds.join('-selection, #')+'-selection').filter('.ms-selected').filter(':not(.'+that.options.disabledClass+')'), + options = ms.find('option').filter(function(){ return($.inArray(this.value, value) > -1); }); + + if (selections.length > 0){ + selectables.removeClass('ms-selected').show(); + selections.removeClass('ms-selected').hide(); + options.prop('selected', false); + + var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container'); + if (selectableOptgroups.length > 0){ + selectableOptgroups.each(function(){ + var selectablesLi = $(this).find('.ms-elem-selectable'); + if (selectablesLi.filter(':not(.ms-selected)').length > 0){ + $(this).find('.ms-optgroup-label').show(); + } + }); + + var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container'); + selectionOptgroups.each(function(){ + var selectionsLi = $(this).find('.ms-elem-selection'); + if (selectionsLi.filter('.ms-selected').length === 0){ + $(this).find('.ms-optgroup-label').hide(); + } + }); + } + ms.trigger('change'); + if (typeof that.options.afterDeselect === 'function') { + that.options.afterDeselect.call(this, value); + } + } + }, + + 'select_all' : function(){ + var ms = this.$element, + values = ms.val(); + + ms.find('option:not(":disabled")').prop('selected', true); + this.$selectableUl.find('.ms-elem-selectable').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').hide(); + this.$selectionUl.find('.ms-optgroup-label').show(); + this.$selectableUl.find('.ms-optgroup-label').hide(); + this.$selectionUl.find('.ms-elem-selection').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').show(); + this.$selectionUl.focus(); + ms.trigger('change'); + if (typeof this.options.afterSelect === 'function') { + var selectedValues = $.grep(ms.val(), function(item){ + return $.inArray(item, values) < 0; + }); + this.options.afterSelect.call(this, selectedValues); + } + }, + + 'deselect_all' : function(){ + var ms = this.$element, + values = ms.val(); + + ms.find('option').prop('selected', false); + this.$selectableUl.find('.ms-elem-selectable').removeClass('ms-selected').show(); + this.$selectionUl.find('.ms-optgroup-label').hide(); + this.$selectableUl.find('.ms-optgroup-label').show(); + this.$selectionUl.find('.ms-elem-selection').removeClass('ms-selected').hide(); + this.$selectableUl.focus(); + ms.trigger('change'); + if (typeof this.options.afterDeselect === 'function') { + this.options.afterDeselect.call(this, values); + } + }, + + sanitize: function(value){ + var hash = 0, i, char; + if (value.length == 0) return hash; + var ls = 0; + for (i = 0, ls = value.length; i < ls; i++) { + char = value.charCodeAt(i); + hash = ((hash<<5)-hash)+char; + hash |= 0; // Convert to 32bit integer + } + return hash; + } + }; + + /* MULTISELECT PLUGIN DEFINITION + * ======================= */ + + $.fn.multiSelect = function () { + var option = arguments[0], + args = arguments; + + return this.each(function () { + var $this = $(this), + data = $this.data('multiselect'), + options = $.extend({}, $.fn.multiSelect.defaults, $this.data(), typeof option === 'object' && option); + + if (!data){ $this.data('multiselect', (data = new MultiSelect(this, options))); } + + if (typeof option === 'string'){ + data[option](args[1]); + } else { + data.init(); + } + }); + }; + + $.fn.multiSelect.defaults = { + keySelect: [32], + selectableOptgroup: false, + disabledClass : 'disabled', + dblClick : false, + keepOrder: false, + cssClass: '' + }; + + $.fn.multiSelect.Constructor = MultiSelect; + + $.fn.insertAt = function(index, $parent) { + return this.each(function() { + if (index === 0) { + $parent.prepend(this); + } else { + $parent.children().eq(index - 1).after(this); + } + }); +} + +}(window.jQuery); diff --git a/datepicker/picker.html b/datepicker/picker.html new file mode 100644 index 0000000..cc8ffbd --- /dev/null +++ b/datepicker/picker.html @@ -0,0 +1,17 @@ +<html> +<head> + <link rel="stylesheet" href="./images/jquery-ui.css"> + <script src="./js/jquery-1.9.1.js"></script> + <script src="./js/jquery-ui.js"></script> + <link rel="stylesheet" href="./images/style.css"> + <script> + $(function() {$( "#datepicker" ).datepicker(); }); + </script> +</head> +<body> + +<p>Kliknij aby wprowadzic date: <input type="text" id="datepicker" name="kolo"></p> + +</body> +</html> + diff --git a/db_structure/20260602_softspm_nodata.sql b/db_structure/20260602_softspm_nodata.sql new file mode 100644 index 0000000..dfbf85c --- /dev/null +++ b/db_structure/20260602_softspm_nodata.sql @@ -0,0 +1,5746 @@ +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19 Distrib 10.6.23-MariaDB, for Win64 (AMD64) +-- +-- Host: localhost Database: softspm +-- ------------------------------------------------------ +-- Server version 10.6.23-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `aaa_210_20210214` +-- + +DROP TABLE IF EXISTS `aaa_210_20210214`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `aaa_210_20210214` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) NOT NULL DEFAULT '0', + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `aaa_dev_resources_step_1` +-- + +DROP TABLE IF EXISTS `aaa_dev_resources_step_1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `aaa_dev_resources_step_1` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) NOT NULL DEFAULT '0', + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_EXP_SEGAP` (`DRD_EXPORT_SEGAP`) +) ENGINE=InnoDB AUTO_INCREMENT=3138918675 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `aaa_dev_resources_step_his` +-- + +DROP TABLE IF EXISTS `aaa_dev_resources_step_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `aaa_dev_resources_step_his` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) NOT NULL DEFAULT '0', + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_EXP_SEGAP` (`DRD_EXPORT_SEGAP`) +) ENGINE=InnoDB AUTO_INCREMENT=2416662107 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `aaa_lack_karty_dev` +-- + +DROP TABLE IF EXISTS `aaa_lack_karty_dev`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `aaa_lack_karty_dev` ( + `OHC_DRS_ID` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `aaa_tmp_piezo_his` +-- + +DROP TABLE IF EXISTS `aaa_tmp_piezo_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `aaa_tmp_piezo_his` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) NOT NULL DEFAULT '0', + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_EXP_SEGAP` (`DRD_EXPORT_SEGAP`) +) ENGINE=InnoDB AUTO_INCREMENT=2962202517 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_aggregate_departments` +-- + +DROP TABLE IF EXISTS `rep_aggregate_departments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_aggregate_departments` ( + `RAD_ID` int(11) NOT NULL AUTO_INCREMENT, + `PUP_ID` int(11) unsigned DEFAULT 0, + `PUP_DRS_ID` int(11) unsigned NOT NULL DEFAULT 0, + `PUP_NAME` varchar(128) DEFAULT '', + `PUP_SN_NO` varchar(128) DEFAULT NULL, + `PUP_Q_N` float(9,2) DEFAULT NULL, + `PUP_H_P` float(9,2) DEFAULT NULL, + `PUP_DEPARTMENT` varchar(255) DEFAULT NULL, + `ENG_ID` bigint(11) DEFAULT NULL, + `ENG_DRS_ID` int(11) unsigned DEFAULT 0, + `ENG_NAME` varchar(128) DEFAULT NULL, + `ENG_SN_NO` varchar(128) DEFAULT NULL, + `ENG_VOLTAGE` bigint(11) DEFAULT NULL, + `ENG_POWER` double(9,2) DEFAULT NULL, + `ENG_DEPARTMENT` varchar(255) DEFAULT NULL, + `ECB_TYP` varchar(64) DEFAULT NULL, + `ECB_DLUGOSC` varchar(32) DEFAULT NULL, + `ECB_OZNAK_01` varchar(64) DEFAULT NULL, + `ECB_OZNAK_02` varchar(255) DEFAULT NULL, + PRIMARY KEY (`RAD_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_clean_notrealiable` +-- + +DROP TABLE IF EXISTS `rep_clean_notrealiable`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_clean_notrealiable` ( + `CNT_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `CNT_DRS_ID` int(11) NOT NULL, + `CNT_AUDIT_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`CNT_ID`), + KEY `INX_CNT_DRS_ID` (`CNT_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1582519 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_dev_details` +-- + +DROP TABLE IF EXISTS `rep_dev_details`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_dev_details` ( + `RDD_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `RDD_DRS_ID` int(11) DEFAULT NULL, + `RDD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `RDD_VALUE` varchar(255) DEFAULT NULL, + `RDD_AUDIT_USR` varchar(64) DEFAULT NULL, + `RDD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`RDD_ID`), + KEY `INX_RDD_AUDIT_DATE` (`RDD_AUDIT_DATE`), + KEY `INX_RDD_DRS_ID` (`RDD_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=5777871 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_demand` +-- + +DROP TABLE IF EXISTS `rep_his_data_demand`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_demand` ( + `RHD_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`), + KEY `INX_RHD_Q` (`RHD_Q_VAL`), + KEY `INX_RHD_PP` (`RHD_PP_VAL`) +) ENGINE=InnoDB AUTO_INCREMENT=4881 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday` ( + `RHD_ID` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`), + KEY `INX_RHD_Q` (`RHD_Q_VAL`), + KEY `INX_RHD_PP` (`RHD_PP_VAL`), + KEY `INX_RHD_DRS_DATE` (`RHD_DRS_ID`,`RHD_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=35762026 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_his` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_his` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`), + KEY `INX_RHD_DRS_DATE` (`RHD_DRS_ID`,`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_todelete` +-- + +DROP TABLE IF EXISTS `rep_his_data_todelete`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_todelete` ( + `DTD_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `DTD_DRS_ID` int(11) DEFAULT NULL, + `DTD_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`DTD_ID`), + KEY `INX_DTD_DRS_ID` (`DTD_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=6076 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_object_departments` +-- + +DROP TABLE IF EXISTS `rep_object_departments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_object_departments` ( + `DRS_ID` int(11) unsigned NOT NULL DEFAULT 0, + `WLL_ID` int(11) unsigned NOT NULL DEFAULT 0, + `WLL_NAME` varchar(255) DEFAULT NULL, + `RWL_PUP_DRS_ID` int(11) DEFAULT NULL, + `PUP_ID` bigint(11) unsigned DEFAULT NULL, + `WLE_PUMP_NAME` varchar(128) DEFAULT NULL, + `WLE_PUMP_Q_N` double(9,2) DEFAULT NULL, + `WLE_PUMP_NO` varchar(128) DEFAULT NULL, + `RWL_ENG_DRS_ID` int(11) DEFAULT NULL, + `ENG_ID` bigint(11) unsigned DEFAULT NULL, + `WLE_ENG_NAME` varchar(128) DEFAULT NULL, + `WLE_ENG_POWER` double(9,2) DEFAULT NULL, + `WLE_ENG_NO` varchar(128) DEFAULT NULL, + `SOD_DESC` varchar(128) DEFAULT NULL, + `SOD_PLC` varchar(32) DEFAULT NULL, + `SOD_UJ` varchar(32) DEFAULT NULL, + PRIMARY KEY (`DRS_ID`), + KEY `INX_RD_WLL_NAME` (`WLL_NAME`), + KEY `INX_RD_SOD_PLC` (`SOD_PLC`), + KEY `INX_DRS_ID` (`DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_object_departments_orders` +-- + +DROP TABLE IF EXISTS `rep_object_departments_orders`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_object_departments_orders` ( + `DRS_ID` int(11) unsigned NOT NULL DEFAULT 0, + `WLL_ID` int(11) unsigned NOT NULL DEFAULT 0, + `WLL_NAME` varchar(255) DEFAULT NULL, + `PUP_ID` bigint(11) unsigned DEFAULT NULL, + `WLE_PUMP_NAME` varchar(128) DEFAULT NULL, + `WLE_PUMP_NO` varchar(64) DEFAULT NULL, + `ENG_ID` bigint(11) unsigned DEFAULT NULL, + `WLE_ENG_NAME` varchar(128) DEFAULT NULL, + `WLE_ENG_NO` varchar(64) DEFAULT NULL, + `SOD_UJ` varchar(32) DEFAULT NULL, + `SOD_PLC` varchar(32) DEFAULT NULL, + PRIMARY KEY (`DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_onoff_proccessing` +-- + +DROP TABLE IF EXISTS `rep_onoff_proccessing`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_onoff_proccessing` ( + `W_ID` int(1) NOT NULL AUTO_INCREMENT, + `W_NAME` varchar(255) DEFAULT NULL, + `W_STATUS` int(1) NOT NULL DEFAULT 0, + PRIMARY KEY (`W_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=544 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_piezo_departments` +-- + +DROP TABLE IF EXISTS `rep_piezo_departments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_piezo_departments` ( + `DRS_ID` int(11) unsigned NOT NULL DEFAULT 0, + `PZO_ID` int(11) unsigned DEFAULT 0, + `PZO_NAME` varchar(255) DEFAULT NULL, + `PZO_SN` varchar(128) DEFAULT NULL, + `DEPTH` float(11,2) DEFAULT NULL, + `DIAMETER` float(11,2) DEFAULT NULL, + `DRS_STATUS_DIC_ID` int(11) DEFAULT NULL COMMENT 'related with sys_dictionary: DEV_STATUS', + `SOD_UJ` varchar(64) DEFAULT NULL, + `SOD_DESC` varchar(128) DEFAULT NULL, + `SOD_PLC` varchar(32) DEFAULT NULL, + PRIMARY KEY (`DRS_ID`), + KEY `INX_PZO_NAME` (`PZO_NAME`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_soap_syndis_notrealiable_onoff` +-- + +DROP TABLE IF EXISTS `rep_soap_syndis_notrealiable_onoff`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_soap_syndis_notrealiable_onoff` ( + `NOT_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `NOT_DRS_ID` int(11) NOT NULL, + `NOT_WELL_ID` int(11) DEFAULT NULL, + `NOT_WELL_NAME` varchar(64) DEFAULT NULL, + `NOT_WHEN_DATE` datetime DEFAULT NULL, + `NOT_WHEN_VALUE` varchar(64) DEFAULT NULL, + `NOT_WHEN_FLAG` varchar(64) DEFAULT NULL, + `NOT_AUDIT_WHEN_DATE` datetime NOT NULL, + `NOT_END_DATE` datetime DEFAULT NULL, + `NOT_END_VALUE` varchar(64) DEFAULT NULL, + `NOT_END_FLAG` varchar(64) DEFAULT NULL, + `NOT_AUDIT_END_DATE` datetime DEFAULT NULL, + `NOT_LICZ_LAST_DATE` datetime DEFAULT NULL, + `NOT_LICZ` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`NOT_ID`), + KEY `INX_NOT_DRS_ID` (`NOT_DRS_ID`), + KEY `INX_NOT_WELL_NAME` (`NOT_WELL_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=1553741 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_soap_syndis_piezometers` +-- + +DROP TABLE IF EXISTS `rep_soap_syndis_piezometers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_soap_syndis_piezometers` ( + `SUP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SUP_OBJECT_NAME` varchar(64) DEFAULT NULL, + `SUP_ID_HST` int(11) DEFAULT NULL, + `SUP_VAL_HST` float(9,2) DEFAULT NULL, + `SUP_FLG_HST` varchar(32) DEFAULT NULL, + `SUP_DATE_HST` datetime DEFAULT NULL, + `SUP_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`SUP_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1128 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_soap_syndis_quality_data` +-- + +DROP TABLE IF EXISTS `rep_soap_syndis_quality_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_soap_syndis_quality_data` ( + `SQD_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SQD_DRS_ID` int(11) DEFAULT NULL, + `SQD_OBJECT_NAME` varchar(64) DEFAULT NULL, + `SQD_VAL_Q` float(9,2) DEFAULT NULL, + `SQD_FLG_Q` varchar(32) DEFAULT NULL, + `SQD_VAL_P1` float(9,2) DEFAULT NULL, + `SQD_FLG_P1` varchar(32) DEFAULT NULL, + `SQD_VAL_P2` float(9,2) DEFAULT NULL, + `SQD_FLG_P2` varchar(32) DEFAULT NULL, + `SQD_VAL_I` float(9,2) DEFAULT NULL, + `SQD_FLG_I` varchar(32) DEFAULT NULL, + `SQD_VAL_U` float(9,2) DEFAULT NULL, + `SQD_FLG_U` varchar(32) DEFAULT NULL, + `SQD_VAL_CF` float(9,2) DEFAULT NULL, + `SQD_FLG_CF` varchar(32) DEFAULT NULL, + `SQD_VAL_PE` float(9,2) DEFAULT NULL, + `SQD_FLG_PE` varchar(32) DEFAULT NULL, + `SQD_VAL_PP` float(9,2) DEFAULT NULL, + `SQD_FLG_PP` varchar(32) DEFAULT NULL, + `SQD_VAL_HH` float(9,2) DEFAULT NULL, + `SQD_FLG_HH` varchar(32) DEFAULT NULL, + `SQD_VAL_HD` float(9,2) DEFAULT NULL, + `SQD_FLG_HD` varchar(32) DEFAULT NULL, + `SQD_VAL_ONOFF` int(11) DEFAULT NULL, + `SQD_FLG_ONOFF` varchar(32) DEFAULT NULL, + `SQD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`SQD_ID`), + KEY `INX_SQD_DRS_ID` (`SQD_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=420 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_soap_syndis_update5min_data` +-- + +DROP TABLE IF EXISTS `rep_soap_syndis_update5min_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_soap_syndis_update5min_data` ( + `SUD_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SUD_DRS_ID` int(11) DEFAULT NULL, + `SUD_OBJECT_NAME` varchar(64) DEFAULT NULL, + `SUD_OBJECT_TYPE` int(11) DEFAULT NULL, + `SUD_ID_L1` int(11) DEFAULT NULL, + `SUD_VAL_L1` float(11,2) DEFAULT NULL, + `SUD_FLG_L1` varchar(32) DEFAULT NULL, + `SUD_DATE_L1` datetime DEFAULT NULL, + `SUD_ID_L2` int(11) DEFAULT NULL, + `SUD_VAL_L2` float(11,2) DEFAULT NULL, + `SUD_FLG_L2` varchar(32) DEFAULT NULL, + `SUD_DATE_L2` datetime DEFAULT NULL, + `SUD_ID_L3` int(11) DEFAULT NULL, + `SUD_VAL_L3` float(11,2) DEFAULT NULL, + `SUD_FLG_L3` varchar(32) DEFAULT NULL, + `SUD_DATE_L3` datetime DEFAULT NULL, + `SUD_ID_UL12` int(11) DEFAULT NULL, + `SUD_VAL_UL12` float(11,2) DEFAULT NULL, + `SUD_FLG_UL12` varchar(32) DEFAULT NULL, + `SUD_DATE_UL12` datetime DEFAULT NULL, + `SUD_ID_UL23` int(11) DEFAULT NULL, + `SUD_VAL_UL23` float(11,2) DEFAULT NULL, + `SUD_FLG_UL23` varchar(32) DEFAULT NULL, + `SUD_DATE_UL23` datetime DEFAULT NULL, + `SUD_ID_TRP` int(11) DEFAULT NULL, + `SUD_VAL_TRP` float(11,2) DEFAULT NULL, + `SUD_FLG_TRP` varchar(32) DEFAULT NULL, + `SUD_DATE_TRP` datetime DEFAULT NULL, + `SUD_ID_TW` int(11) DEFAULT NULL, + `SUD_VAL_TW` float(11,2) DEFAULT NULL, + `SUD_FLG_TW` varchar(32) DEFAULT NULL, + `SUD_DATE_TW` datetime DEFAULT NULL, + `SUD_ID_PE` int(11) DEFAULT NULL, + `SUD_VAL_PE` float(11,2) DEFAULT NULL, + `SUD_FLG_PE` varchar(32) DEFAULT NULL, + `SUD_DATE_PE` datetime DEFAULT NULL, + `SUD_ID_CFI` int(11) DEFAULT NULL, + `SUD_VAL_CFI` float(11,2) DEFAULT NULL, + `SUD_FLG_CFI` varchar(32) DEFAULT NULL, + `SUD_DATE_CFI` datetime DEFAULT NULL, + `SUD_ID_KWH` int(11) DEFAULT NULL, + `SUD_VAL_KWH` float(11,2) DEFAULT NULL, + `SUD_FLG_KWH` varchar(32) DEFAULT NULL, + `SUD_DATE_KWH` datetime DEFAULT NULL, + `SUD_ID_VM3` int(11) DEFAULT NULL, + `SUD_VAL_VM3` float(11,2) DEFAULT NULL, + `SUD_FLG_VM3` varchar(32) DEFAULT NULL, + `SUD_DATE_VM3` datetime DEFAULT NULL, + `SUD_ID_CHL` int(11) DEFAULT NULL, + `SUD_VAL_CHL` float(11,2) DEFAULT NULL, + `SUD_FLG_CHL` varchar(32) DEFAULT NULL, + `SUD_DATE_CHL` datetime DEFAULT NULL, + `SUD_ID_ECM` int(11) DEFAULT NULL, + `SUD_VAL_ECM` float(11,2) DEFAULT NULL, + `SUD_FLG_ECM` varchar(32) DEFAULT NULL, + `SUD_DATE_ECM` datetime DEFAULT NULL, + `SUD_ID_RUTM` int(11) DEFAULT NULL, + `SUD_VAL_RUTM` float(11,2) DEFAULT NULL, + `SUD_FLG_RUTM` varchar(32) DEFAULT NULL, + `SUD_DATE_RUTM` datetime DEFAULT NULL, + `SUD_ID_HD` int(11) DEFAULT NULL, + `SUD_VAL_HD` float(11,2) DEFAULT NULL, + `SUD_FLG_HD` varchar(32) DEFAULT NULL, + `SUD_DATE_HD` datetime DEFAULT NULL, + `SUD_ID_HST` int(11) DEFAULT NULL, + `SUD_VAL_HST` float(11,2) DEFAULT NULL, + `SUD_FLG_HST` varchar(32) DEFAULT NULL, + `SUD_DATE_HST` datetime DEFAULT NULL, + `SUD_ID_P1` int(11) DEFAULT NULL, + `SUD_VAL_P1` float(11,2) DEFAULT NULL, + `SUD_FLG_P1` varchar(32) DEFAULT NULL, + `SUD_DATE_P1` datetime DEFAULT NULL, + `SUD_ID_P2` int(11) DEFAULT NULL, + `SUD_VAL_P2` float(11,2) DEFAULT NULL, + `SUD_FLG_P2` varchar(32) DEFAULT NULL, + `SUD_DATE_P2` datetime DEFAULT NULL, + `SUD_ID_PB` int(11) DEFAULT NULL, + `SUD_VAL_PB` float(11,2) DEFAULT NULL, + `SUD_FLG_PB` varchar(32) DEFAULT NULL, + `SUD_DATE_PB` datetime DEFAULT NULL, + `SUD_ID_Q` int(11) DEFAULT NULL, + `SUD_VAL_Q` float(11,2) DEFAULT NULL, + `SUD_FLG_Q` varchar(32) DEFAULT NULL, + `SUD_DATE_Q` datetime DEFAULT NULL, + `SUD_ID_DIAG` int(11) DEFAULT NULL, + `SUD_VAL_DIAG` float(11,2) DEFAULT NULL, + `SUD_FLG_DIAG` varchar(32) DEFAULT NULL, + `SUD_DATE_DIAG` datetime DEFAULT NULL, + `SUD_ID_PP` int(11) DEFAULT NULL, + `SUD_VAL_PP` float(11,2) DEFAULT NULL, + `SUD_FLG_PP` varchar(32) DEFAULT NULL, + `SUD_DATE_PP` datetime DEFAULT NULL, + `SUD_ID_HH` int(11) DEFAULT NULL, + `SUD_VAL_HH` float(11,2) DEFAULT NULL, + `SUD_FLG_HH` varchar(32) DEFAULT NULL, + `SUD_DATE_HH` datetime DEFAULT NULL, + `SUD_ID_ONOFF` int(11) DEFAULT NULL, + `SUD_VAL_ONOFF` int(11) DEFAULT NULL, + `SUD_FLG_ONOFF` varchar(32) DEFAULT NULL, + `SUD_DATE_ONOFF` datetime DEFAULT NULL, + `SUD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`SUD_ID`), + KEY `INX_SUD_DRS_ID` (`SUD_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=420 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_soap_syndis_update5min_nra_onoff` +-- + +DROP TABLE IF EXISTS `rep_soap_syndis_update5min_nra_onoff`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_soap_syndis_update5min_nra_onoff` ( + `SUD_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SUD_DRS_ID` int(11) DEFAULT NULL, + `SUD_OBJECT_NAME` varchar(64) DEFAULT NULL, + `SUD_OBJECT_TYPE` int(11) DEFAULT NULL, + `SUD_ID_L1` int(11) DEFAULT NULL, + `SUD_VAL_L1` float(11,2) DEFAULT NULL, + `SUD_FLG_L1` varchar(32) DEFAULT NULL, + `SUD_DATE_L1` datetime DEFAULT NULL, + `SUD_ID_L2` int(11) DEFAULT NULL, + `SUD_VAL_L2` float(11,2) DEFAULT NULL, + `SUD_FLG_L2` varchar(32) DEFAULT NULL, + `SUD_DATE_L2` datetime DEFAULT NULL, + `SUD_ID_L3` int(11) DEFAULT NULL, + `SUD_VAL_L3` float(11,2) DEFAULT NULL, + `SUD_FLG_L3` varchar(32) DEFAULT NULL, + `SUD_DATE_L3` datetime DEFAULT NULL, + `SUD_ID_UL12` int(11) DEFAULT NULL, + `SUD_VAL_UL12` float(11,2) DEFAULT NULL, + `SUD_FLG_UL12` varchar(32) DEFAULT NULL, + `SUD_DATE_UL12` datetime DEFAULT NULL, + `SUD_ID_UL23` int(11) DEFAULT NULL, + `SUD_VAL_UL23` float(11,2) DEFAULT NULL, + `SUD_FLG_UL23` varchar(32) DEFAULT NULL, + `SUD_DATE_UL23` datetime DEFAULT NULL, + `SUD_ID_TRP` int(11) DEFAULT NULL, + `SUD_VAL_TRP` float(11,2) DEFAULT NULL, + `SUD_FLG_TRP` varchar(32) DEFAULT NULL, + `SUD_DATE_TRP` datetime DEFAULT NULL, + `SUD_ID_TW` int(11) DEFAULT NULL, + `SUD_VAL_TW` float(11,2) DEFAULT NULL, + `SUD_FLG_TW` varchar(32) DEFAULT NULL, + `SUD_DATE_TW` datetime DEFAULT NULL, + `SUD_ID_PE` int(11) DEFAULT NULL, + `SUD_VAL_PE` float(11,2) DEFAULT NULL, + `SUD_FLG_PE` varchar(32) DEFAULT NULL, + `SUD_DATE_PE` datetime DEFAULT NULL, + `SUD_ID_CFI` int(11) DEFAULT NULL, + `SUD_VAL_CFI` float(11,2) DEFAULT NULL, + `SUD_FLG_CFI` varchar(32) DEFAULT NULL, + `SUD_DATE_CFI` datetime DEFAULT NULL, + `SUD_ID_KWH` int(11) DEFAULT NULL, + `SUD_VAL_KWH` float(11,2) DEFAULT NULL, + `SUD_FLG_KWH` varchar(32) DEFAULT NULL, + `SUD_DATE_KWH` datetime DEFAULT NULL, + `SUD_ID_VM3` int(11) DEFAULT NULL, + `SUD_VAL_VM3` float(11,2) DEFAULT NULL, + `SUD_FLG_VM3` varchar(32) DEFAULT NULL, + `SUD_DATE_VM3` datetime DEFAULT NULL, + `SUD_ID_CHL` int(11) DEFAULT NULL, + `SUD_VAL_CHL` float(11,2) DEFAULT NULL, + `SUD_FLG_CHL` varchar(32) DEFAULT NULL, + `SUD_DATE_CHL` datetime DEFAULT NULL, + `SUD_ID_ECM` int(11) DEFAULT NULL, + `SUD_VAL_ECM` float(11,2) DEFAULT NULL, + `SUD_FLG_ECM` varchar(32) DEFAULT NULL, + `SUD_DATE_ECM` datetime DEFAULT NULL, + `SUD_ID_RUTM` int(11) DEFAULT NULL, + `SUD_VAL_RUTM` float(11,2) DEFAULT NULL, + `SUD_FLG_RUTM` varchar(32) DEFAULT NULL, + `SUD_DATE_RUTM` datetime DEFAULT NULL, + `SUD_ID_HD` int(11) DEFAULT NULL, + `SUD_VAL_HD` float(11,2) DEFAULT NULL, + `SUD_FLG_HD` varchar(32) DEFAULT NULL, + `SUD_DATE_HD` datetime DEFAULT NULL, + `SUD_ID_HST` int(11) DEFAULT NULL, + `SUD_VAL_HST` float(11,2) DEFAULT NULL, + `SUD_FLG_HST` varchar(32) DEFAULT NULL, + `SUD_DATE_HST` datetime DEFAULT NULL, + `SUD_ID_P1` int(11) DEFAULT NULL, + `SUD_VAL_P1` float(11,2) DEFAULT NULL, + `SUD_FLG_P1` varchar(32) DEFAULT NULL, + `SUD_DATE_P1` datetime DEFAULT NULL, + `SUD_ID_P2` int(11) DEFAULT NULL, + `SUD_VAL_P2` float(11,2) DEFAULT NULL, + `SUD_FLG_P2` varchar(32) DEFAULT NULL, + `SUD_DATE_P2` datetime DEFAULT NULL, + `SUD_ID_PB` int(11) DEFAULT NULL, + `SUD_VAL_PB` float(11,2) DEFAULT NULL, + `SUD_FLG_PB` varchar(32) DEFAULT NULL, + `SUD_DATE_PB` datetime DEFAULT NULL, + `SUD_ID_Q` int(11) DEFAULT NULL, + `SUD_VAL_Q` float(11,2) DEFAULT NULL, + `SUD_FLG_Q` varchar(32) DEFAULT NULL, + `SUD_DATE_Q` datetime DEFAULT NULL, + `SUD_ID_DIAG` int(11) DEFAULT NULL, + `SUD_VAL_DIAG` float(11,2) DEFAULT NULL, + `SUD_FLG_DIAG` varchar(32) DEFAULT NULL, + `SUD_DATE_DIAG` datetime DEFAULT NULL, + `SUD_ID_PP` int(11) DEFAULT NULL, + `SUD_VAL_PP` float(11,2) DEFAULT NULL, + `SUD_FLG_PP` varchar(32) DEFAULT NULL, + `SUD_DATE_PP` datetime DEFAULT NULL, + `SUD_ID_HH` int(11) DEFAULT NULL, + `SUD_VAL_HH` float(11,2) DEFAULT NULL, + `SUD_FLG_HH` varchar(32) DEFAULT NULL, + `SUD_DATE_HH` datetime DEFAULT NULL, + `SUD_ID_ONOFF` int(11) DEFAULT NULL, + `SUD_VAL_ONOFF` int(11) DEFAULT NULL, + `SUD_FLG_ONOFF` varchar(32) DEFAULT NULL, + `SUD_DATE_ONOFF` datetime DEFAULT NULL, + `SUD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`SUD_ID`), + KEY `INX_SUD_DRS_ID` (`SUD_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=15843584 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_soap_well_energy` +-- + +DROP TABLE IF EXISTS `rep_soap_well_energy`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_soap_well_energy` ( + `SWE_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SWE_DRS_ID` int(11) DEFAULT NULL, + `SWE_WELL_ID` int(11) DEFAULT NULL, + `SWE_NAME` varchar(64) DEFAULT NULL, + `SWE_VALUE` varchar(4) DEFAULT NULL, + `SWE_WORK_STATUS` varchar(64) DEFAULT NULL, + `SWE_AUDIT_USR` varchar(64) DEFAULT NULL, + `SWE_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SWE_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1551 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_zrzut_wody` +-- + +DROP TABLE IF EXISTS `rep_zrzut_wody`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_zrzut_wody` ( + `RZW_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `RZW_WIDAWKA` float(15,3) DEFAULT NULL, + `RZW_KRASOWKA` float(15,3) DEFAULT NULL, + `RZW_DEPARTMENT` varchar(255) DEFAULT NULL, + `RZW_AUDIT_USR` varchar(64) DEFAULT NULL, + `RZW_AUDIT_DATE` datetime NOT NULL, + PRIMARY KEY (`RZW_ID`), + KEY `INX_RZW_DEPARTMENT` (`RZW_DEPARTMENT`) +) ENGINE=InnoDB AUTO_INCREMENT=907 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_alarms` +-- + +DROP TABLE IF EXISTS `seg_alarms`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_alarms` ( + `ARM_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `ARM_DRS_ID` int(11) DEFAULT NULL, + `ARM_TYPES` varchar(128) DEFAULT NULL, + `ARM_AUDIT_CU` varchar(128) DEFAULT NULL, + `ARM_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`ARM_ID`), + KEY `INX_ARM_DRS_ID` (`ARM_DRS_ID`), + KEY `INX_ARM_AUDIT_CD` (`ARM_AUDIT_CD`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Tabela z alarmami'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_counters` +-- + +DROP TABLE IF EXISTS `seg_dev_counters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_counters` ( + `SDC_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SDC_DRS_ID` int(11) DEFAULT NULL, + `SDC_VALUE` float(9,2) DEFAULT 0.00, + `SDC_TYPE_DIC_ID` int(11) DEFAULT NULL, + `SDC_DESC` text DEFAULT NULL, + `SDC_DEPARTMENT` varchar(255) DEFAULT NULL, + `SDC_MEASURE_DATE` datetime DEFAULT NULL, + `SDC_AUDIT_USR` varchar(64) DEFAULT NULL, + `SDC_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SDC_ID`), + KEY `INX_SDC_DRS_ID` (`SDC_DRS_ID`), + KEY `INX_SDC_STATUS_DIC_ID` (`SDC_TYPE_DIC_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1119 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_equipments_rel` +-- + +DROP TABLE IF EXISTS `seg_dev_equipments_rel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_equipments_rel` ( + `SDE_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SDE_DRS_DEV_ID` int(11) NOT NULL DEFAULT 0, + `SDE_DRS_EQU_ID` int(11) NOT NULL DEFAULT 0, + `SDE_VALUE` varchar(16) DEFAULT NULL, + `SDE_TYPE` varchar(8) DEFAULT NULL, + `SDE_PARAM1` varchar(255) DEFAULT NULL, + `SDE_PARAM2` varchar(255) DEFAULT NULL, + `SDE_PARAM3` varchar(255) DEFAULT NULL, + PRIMARY KEY (`SDE_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=23139 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='relacje pomiędzy urządzeniami a obiektami'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_equipments_rel_his` +-- + +DROP TABLE IF EXISTS `seg_dev_equipments_rel_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_equipments_rel_his` ( + `SDE_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SDE_DRS_DEV_ID` int(11) NOT NULL DEFAULT 0, + `SDE_DRS_EQU_ID` int(11) NOT NULL DEFAULT 0, + `SDE_VALUE` varchar(16) DEFAULT NULL, + `SDE_TYPE` varchar(8) DEFAULT NULL, + `SDE_AUDIT_CU` varchar(255) DEFAULT NULL, + `SDE_AUDIT_CD` datetime DEFAULT NULL, + `SDE_AUDIT_DU` varchar(255) DEFAULT NULL, + `SDE_AUDIT_DD` datetime DEFAULT NULL, + `SDE_PARAM1` varchar(255) DEFAULT NULL, + `SDE_PARAM2` varchar(255) DEFAULT NULL, + `SDE_PARAM3` varchar(255) DEFAULT NULL, + PRIMARY KEY (`SDE_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=23145 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_major_segap` +-- + +DROP TABLE IF EXISTS `seg_dev_major_segap`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_major_segap` ( + `DMD_ID` int(11) NOT NULL AUTO_INCREMENT, + `DMD_DRS_ID` int(11) DEFAULT NULL, + `DRD_BARIERA` varchar(32) DEFAULT NULL, + `DRD_OBJECT_NAME` varchar(64) DEFAULT NULL, + `DRD_L1` double(9,2) DEFAULT NULL, + `DRD_L2` double(9,2) DEFAULT NULL, + `DRD_L3` double(9,2) DEFAULT NULL, + `DRD_U_L12` double(9,2) DEFAULT NULL, + `DRD_U_L23` double(9,2) DEFAULT NULL, + `DRD_THROTTLE` double(9,2) DEFAULT NULL, + `DRD_WATER_TEMP` double(9,2) DEFAULT NULL, + `DRD_POWER` double(9,2) DEFAULT NULL, + `DRD_COS_FI` double(9,2) DEFAULT NULL, + `DRD_ENERGY` double(9,2) DEFAULT NULL, + `DRD_WATER_PUMPED` double(9,2) DEFAULT NULL, + `DRD_RUN_TIME` double(9,2) DEFAULT NULL, + `DRD_HD` double(9,2) DEFAULT NULL, + `DRD_P1` double(9,2) DEFAULT NULL, + `DRD_P2` double(9,2) DEFAULT NULL, + `DRD_PB` double(9,2) DEFAULT NULL, + `DRD_Q` double(9,2) DEFAULT NULL, + `DRD_PP` double(9,2) DEFAULT NULL, + `DRD_HH` double(9,2) DEFAULT NULL, + `DRD_HST` double(9,2) DEFAULT NULL, + `DMD_DEPARTMENT` varchar(64) DEFAULT NULL, + `DRD_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`DMD_ID`), + KEY `INX_DMD_DRS_ID1` (`DMD_DRS_ID`), + KEY `INX_DMD_AUDIT_CD1` (`DRD_AUDIT_CD`), + KEY `INX_DRD_OBJECT_NAME1` (`DRD_OBJECT_NAME`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources` +-- + +DROP TABLE IF EXISTS `seg_dev_resources`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources` ( + `DRS_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `DRS_DEV_ID` int(11) DEFAULT NULL, + `DRS_DEV_TYPE` int(11) DEFAULT NULL COMMENT 'from dictionaries DRS_DEV_TYPE', + `DRS_SN_NUMBER` varchar(128) DEFAULT NULL, + `DRS_BUY_DATE` date DEFAULT NULL, + `DRS_AVAILABLE_DATE` date DEFAULT NULL, + `DRS_CASSATION_DATE` date DEFAULT NULL COMMENT 'Data kasacji', + `DRS_STATUS_DIC_ID` int(11) DEFAULT NULL COMMENT 'related with sys_dictionary: DEV_STATUS', + `DRS_RESOURCES_DIC_ID` int(11) DEFAULT NULL COMMENT 'related with sys_dictionary: DEV_RESOURCES', + `DRS_DEV_ATTENTION` text DEFAULT NULL, + `DRS_DEPARTMENT` varchar(255) DEFAULT NULL, + `DRS_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRS_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`DRS_ID`), + KEY `INX_DRS_DEV_ID` (`DRS_DEV_ID`), + KEY `INX_DRS_DEV_TYPE` (`DRS_DEV_TYPE`), + KEY `INX_DRS_DEPARTMENT` (`DRS_DEPARTMENT`), + KEY `INX_DRS_DEV_TYPE_DEV_ID_DEP_STATUS` (`DRS_DEV_TYPE`,`DRS_DEV_ID`,`DRS_DEPARTMENT`,`DRS_STATUS_DIC_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=51686 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) NOT NULL DEFAULT '0', + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_EXP_SEGAP` (`DRD_EXPORT_SEGAP`), + KEY `INX_DRD_DRS_DETAIL_DATE` (`DRD_DRS_ID`,`DRD_RESOURCES_DETAIL`,`DRD_AUDIT_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=5829194811 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_his` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_his` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + KEY `INX_DRD_AUDIT_DATE1` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID1` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET1` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_DETAIL_DATE` (`DRD_DRS_ID`,`DRD_RESOURCES_DETAIL`,`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_his_20190104` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_his_20190104`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_his_20190104` ( + `DRD_ID` int(11) NOT NULL AUTO_INCREMENT, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) NOT NULL DEFAULT '0', + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_EXP_SEGAP` (`DRD_EXPORT_SEGAP`) +) ENGINE=InnoDB AUTO_INCREMENT=1587065853 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_his` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_his` ( + `DRS_ID` int(11) unsigned NOT NULL DEFAULT 0, + `DRS_DEV_ID` int(11) DEFAULT NULL, + `DRS_DEV_TYPE` int(11) DEFAULT NULL COMMENT 'from dictionaries DRS_DEV_TYPE', + `DRS_SN_NUMBER` varchar(128) DEFAULT NULL, + `DRS_BUY_DATE` date DEFAULT NULL, + `DRS_AVAILABLE_DATE` date DEFAULT NULL, + `DRS_CASSATION_DATE` date DEFAULT NULL, + `DRS_STATUS_DIC_ID` int(11) DEFAULT NULL COMMENT 'related with sys_dictionary: DEV_STATUS', + `DRS_RESOURCES_DIC_ID` int(11) DEFAULT NULL COMMENT 'related with sys_dictionary: DEV_RESOURCES', + `DRS_DEV_ATTENTION` text DEFAULT NULL, + `DRS_DEPARTMENT` varchar(255) DEFAULT NULL, + `DRS_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRS_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + KEY `INX_DRS_ID` (`DRS_ID`), + KEY `INX_DRS_AUDIT_DATE` (`DRS_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_email_out` +-- + +DROP TABLE IF EXISTS `seg_email_out`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_email_out` ( + `SEO_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SEO_MAIL` varchar(128) DEFAULT NULL, + `SEO_SUBJECT` varchar(255) DEFAULT NULL, + `SEO_MESSAGE` varchar(512) DEFAULT NULL, + `SEO_AUDIT_CU` varchar(128) DEFAULT NULL, + `SEO_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SEO_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_engine_cables` +-- + +DROP TABLE IF EXISTS `seg_engine_cables`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_engine_cables` ( + `ECB_ID` int(11) NOT NULL AUTO_INCREMENT, + `ECB_PRX_ID` int(11) DEFAULT NULL, + `ECB_TYP` varchar(64) DEFAULT NULL, + `ECB_DLUGOSC` varchar(32) DEFAULT NULL, + `ECB_CIEZAR` varchar(32) DEFAULT NULL, + `ECB_WIAZKA` varchar(32) DEFAULT NULL, + `ECB_IL_MUF` varchar(32) DEFAULT NULL, + `ECB_IL_MUF_NEW` varchar(32) DEFAULT NULL, + `ECB_IL_ZLACZ` varchar(32) DEFAULT NULL, + `ECB_IL_ZLACZ_NEW` varchar(32) DEFAULT NULL, + `ECB_RBH` varchar(64) DEFAULT NULL, + `ECB_OZNAK_01` varchar(64) DEFAULT NULL, + `ECB_OZNAK_02` varchar(255) DEFAULT NULL, + `ECB_ENG_NAME` varchar(255) DEFAULT NULL, + `ECB_ENG_NO` varchar(255) DEFAULT NULL, + `ECB_DATE_PRZYL` datetime DEFAULT NULL, + `ECB_DATE_ROZL` datetime DEFAULT NULL, + PRIMARY KEY (`ECB_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=20837 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_engines` +-- + +DROP TABLE IF EXISTS `seg_engines`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_engines` ( + `ENG_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `ENG_MCF_ID` int(11) DEFAULT NULL, + `ENG_NAME` varchar(128) NOT NULL DEFAULT '', + `ENG_VOLTAGE` int(11) DEFAULT NULL, + `ENG_LENGTH` float(9,2) DEFAULT NULL, + `ENG_WEIGHT` float(9,2) DEFAULT NULL, + `ENG_DIAMETER` float(9,2) DEFAULT NULL, + `ENG_WIRES` varchar(32) DEFAULT NULL, + `ENG_POWER` float(9,2) DEFAULT NULL, + `ENG_ELECTRICITY` float(9,2) DEFAULT NULL, + `ENG_RPM` float(9,2) DEFAULT NULL, + `ENG_COS_FI` float(9,2) DEFAULT NULL, + `ENG_ETA` float(9,2) DEFAULT NULL, + `ENG_STATUS` char(1) NOT NULL DEFAULT '1' COMMENT '1-widoczny; 0-niewidoczny', + PRIMARY KEY (`ENG_ID`), + KEY `INX_ENG_NAME` (`ENG_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=488 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_equipments` +-- + +DROP TABLE IF EXISTS `seg_equipments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_equipments` ( + `EQU_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `EQU_MCF_ID` int(11) DEFAULT NULL, + `EQU_NAME` varchar(255) DEFAULT NULL, + `EQU_DESCRIPTION` varchar(255) DEFAULT NULL, + `EQU_PARAM_01` varchar(128) DEFAULT NULL, + `EQU_PARAM_02` varchar(128) DEFAULT NULL, + `EQU_PARAM_03` varchar(128) DEFAULT NULL, + `EQU_STATUS` char(1) NOT NULL DEFAULT '1' COMMENT '0-usunięty logicznie; 1-ok', + `EQU_TYPE_ID` int(11) DEFAULT NULL COMMENT 'sys_dictionaries,', + PRIMARY KEY (`EQU_ID`), + KEY `INX_EQU_TYPE` (`EQU_TYPE_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=838 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_equipments_files` +-- + +DROP TABLE IF EXISTS `seg_equipments_files`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_equipments_files` ( + `EQF_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `EQF_EQU_ID` int(11) DEFAULT NULL, + `EQF_FILE` mediumblob DEFAULT NULL, + `EQF_FILE_TYPE` varchar(255) DEFAULT NULL, + `EQF_FILE_SIZE` varchar(16) DEFAULT NULL, + `EQF_FILE_NAME` varchar(128) DEFAULT NULL, + `EQF_STATUS` varchar(4) NOT NULL DEFAULT '1' COMMENT '0-niewidoczne, 1-widoczne', + `EQF_AUDIT_CU` varchar(64) DEFAULT NULL, + `EQF_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`EQF_ID`), + KEY `INX_EQF_EQU_ID` (`EQF_EQU_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_equipments_stock` +-- + +DROP TABLE IF EXISTS `seg_equipments_stock`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_equipments_stock` ( + `SES_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SES_EQU_ID` int(11) DEFAULT NULL, + `SES_DESCRIPTION` varchar(255) DEFAULT NULL, + `SES_VALUE` varchar(255) DEFAULT NULL, + `SES_STOCK` varchar(255) DEFAULT NULL, + `SES_PARAM1` varchar(255) DEFAULT NULL, + `SES_PARAM2` varchar(255) DEFAULT NULL, + `SES_PARAM3` varchar(255) DEFAULT NULL, + `SES_TYPE` varchar(255) DEFAULT NULL, + `SES_INVOICE_NO` varchar(255) DEFAULT NULL, + `SES_INVOICE_DATE` date NOT NULL DEFAULT '0000-00-00', + `SES_AUDIT_CU` varchar(128) DEFAULT NULL, + `SES_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SES_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=722 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_knowledge_base` +-- + +DROP TABLE IF EXISTS `seg_knowledge_base`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_knowledge_base` ( + `SKB_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SKB_CATEGORY_ID` varchar(255) DEFAULT NULL COMMENT 'sys_dictionaries DIC_TYPE=''KNOWLEDGE_BASE_CATEGORY''', + `SKB_FILE` mediumblob DEFAULT NULL, + `SKB_FILE_TYPE` varchar(64) DEFAULT NULL, + `SKB_FILE_SIZE` varchar(16) DEFAULT NULL, + `SKB_FILE_NAME` varchar(128) DEFAULT NULL, + `SKB_FILE_DESC` varchar(255) DEFAULT NULL, + `SKB_STATUS` varchar(4) NOT NULL DEFAULT '1' COMMENT '0-niewidoczne, 1-widoczne', + `SKB_AUDIT_CU` varchar(64) DEFAULT NULL, + `SKB_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SKB_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_manufacturers` +-- + +DROP TABLE IF EXISTS `seg_manufacturers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_manufacturers` ( + `MCF_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `MCF_NAME` varchar(255) DEFAULT NULL, + `MCF_CATEGORY` varchar(255) DEFAULT NULL, + `MCF_ADDRESS` varchar(255) DEFAULT NULL, + `MCF_POST` varchar(16) DEFAULT NULL, + `MCF_CITY` varchar(255) DEFAULT NULL, + `MCF_MAIL` varchar(128) DEFAULT NULL, + `MCF_PHONE` varchar(16) DEFAULT NULL, + `MCF_CONT_PERSON` varchar(255) DEFAULT NULL, + `MCF_DESCTRIPTION` text DEFAULT NULL, + `MCF_OLDNO` varchar(255) DEFAULT NULL, + PRIMARY KEY (`MCF_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_column_fillings` +-- + +DROP TABLE IF EXISTS `seg_object_column_fillings`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_column_fillings` ( + `CLO_ID` int(11) NOT NULL AUTO_INCREMENT, + `CLO_DRS_ID` int(11) DEFAULT NULL, + `CLO_COL_ID` int(11) DEFAULT NULL, + `CLO_NAME` varchar(128) DEFAULT NULL, + `CLO_FROM` double(9,2) NOT NULL DEFAULT 0.00, + `CLO_TO` double(9,2) NOT NULL DEFAULT 0.00, + `CLO_DESC` varchar(255) DEFAULT NULL, + `CLO_AUDIT_CU` varchar(64) DEFAULT NULL, + `CLO_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`CLO_ID`), + KEY `INX_CLO_COL_ID` (`CLO_COL_ID`), + KEY `INX_CLO_DRS_ID` (`CLO_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=17499 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_column_filters` +-- + +DROP TABLE IF EXISTS `seg_object_column_filters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_column_filters` ( + `CLF_ID` int(11) NOT NULL AUTO_INCREMENT, + `CLF_DRS_ID` int(11) DEFAULT NULL, + `CLF_COL_ID` int(11) DEFAULT NULL, + `CLF_NAME` varchar(128) DEFAULT NULL, + `CLF_FROM` double(9,2) NOT NULL DEFAULT 0.00, + `CLF_TO` double(9,2) NOT NULL DEFAULT 0.00, + `CLF_DESC` varchar(255) DEFAULT NULL, + `CLF_AUDIT_CU` varchar(64) DEFAULT NULL, + `CLF_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`CLF_ID`), + KEY `INX_CLF_COL_ID` (`CLF_COL_ID`), + KEY `INX_CLF_DRS_ID` (`CLF_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=24749 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_columns` +-- + +DROP TABLE IF EXISTS `seg_object_columns`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_columns` ( + `COL_ID` int(11) NOT NULL AUTO_INCREMENT, + `COL_DRS_ID` int(11) DEFAULT NULL, + `COL_NO` varchar(128) DEFAULT NULL, + `COL_NAME` varchar(128) DEFAULT NULL, + `COL_HORYZONT` varchar(16) DEFAULT NULL, + `COL_DIAMETER` float(9,2) DEFAULT NULL, + `COL_DEPTH` float(9,2) DEFAULT NULL, + `COL_DESC` varchar(255) DEFAULT NULL, + `COL_AUDIT_CU` varchar(64) DEFAULT NULL, + `COL_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`COL_ID`), + KEY `INX_COL_DRS_ID` (`COL_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=8941 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_def` +-- + +DROP TABLE IF EXISTS `seg_object_def`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_def` ( + `SOD_ID` int(11) NOT NULL AUTO_INCREMENT, + `SOD_UJ` varchar(32) DEFAULT NULL, + `SOD_NAME` varchar(128) DEFAULT NULL, + `SOD_TYPE` varchar(128) DEFAULT NULL, + `SOD_DESC` varchar(128) DEFAULT NULL, + `SOD_PLC` varchar(32) DEFAULT NULL, + PRIMARY KEY (`SOD_ID`), + KEY `INX_SOD_NAME` (`SOD_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=11966 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_hole_cards` +-- + +DROP TABLE IF EXISTS `seg_object_hole_cards`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_hole_cards` ( + `OHC_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `OHC_DRS_ID` int(11) DEFAULT NULL, + `OHC_UJ` varchar(255) DEFAULT NULL, + `OHC_NAME` varchar(255) DEFAULT NULL, + `OHC_POZW` varchar(255) DEFAULT NULL, + `OHC_POZW_DATE` date DEFAULT NULL, + `OHC_WYKONAWCA` varchar(255) DEFAULT NULL, + `OHC_ROK_WYKON` varchar(16) DEFAULT NULL, + `OHC_ROZP_WIER_DATE` date DEFAULT NULL, + `OHC_ZAK_WIER_DATE` date DEFAULT NULL, + `OHC_DATA_ODDANIA` date DEFAULT NULL, + `OHC_ZDJECIE_EXPL_DATE` date DEFAULT NULL, + `OHC_URZ_WIERT` varchar(255) DEFAULT NULL, + `OHC_SPOS_WIERC` varchar(255) DEFAULT NULL, + `OHC_GLEB_ODWIER` varchar(16) DEFAULT NULL, + `OHC_GLEB_OSTAT` varchar(16) DEFAULT NULL, + `OHC_DL_GEOGR` varchar(16) DEFAULT NULL, + `OHC_SZER_GEOGR` varchar(16) DEFAULT NULL, + `OHC_RZEDNA_TEREN` float(9,2) DEFAULT NULL, + `OHC_RZEDNA_KRYZY` varchar(16) DEFAULT NULL, + `OHC_RZEDNA_TERENU_ACT` float(9,2) DEFAULT NULL, + `OHC_RZEDNA_DATE` date DEFAULT NULL, + `OHC_ZWIERC_NAWIERC` varchar(16) DEFAULT NULL, + `OHC_ZWIERC_USTAL` varchar(16) DEFAULT NULL, + `OHC_POZIOM_WODONOS` varchar(255) DEFAULT NULL, + `OHC_WYDAJ_EXPL` varchar(16) DEFAULT NULL, + `OHC_DEPR_EXPL` varchar(16) DEFAULT NULL, + `OHC_PROM_LEJA_DEPR` varchar(16) DEFAULT NULL, + `OHC_WYDAJ_WG_PW` varchar(16) DEFAULT NULL, + `OHC_PROFIL_LITO` text DEFAULT NULL, + `OHC_KONSTR_OTWOR` text DEFAULT NULL, + `OHC_Q1` varchar(16) DEFAULT NULL, + `OHC_S1` varchar(16) DEFAULT NULL, + `OHC_T1` varchar(16) DEFAULT NULL, + `OHC_Q2` varchar(16) DEFAULT NULL, + `OHC_S2` varchar(16) DEFAULT NULL, + `OHC_T2` varchar(16) DEFAULT NULL, + `OHC_Q3` varchar(16) DEFAULT NULL, + `OHC_S3` varchar(16) DEFAULT NULL, + `OHC_T3` varchar(16) DEFAULT NULL, + `OHC_Q4` varchar(16) DEFAULT NULL, + `OHC_S4` varchar(16) DEFAULT NULL, + `OHC_T4` varchar(16) DEFAULT NULL, + `OHC_Q5` varchar(16) DEFAULT NULL, + `OHC_S5` varchar(16) DEFAULT NULL, + `OHC_T5` varchar(16) DEFAULT NULL, + `OHC_C` varchar(16) DEFAULT NULL, + `OHC_QE` varchar(16) DEFAULT NULL, + `OHC_SE` varchar(16) DEFAULT NULL, + `OHC_WYD_JEDN` varchar(16) DEFAULT NULL, + `OHC_WSP_SPR_HYDRO` varchar(16) DEFAULT NULL, + `OHC_POZ_WOD_NO` varchar(255) DEFAULT NULL, + `OHC_POZ_DATE_TO` date DEFAULT NULL, + `OHC_POZ_Q_DOP` varchar(16) DEFAULT NULL, + `OHC_UWAGI` text DEFAULT NULL, + `OHC_PLC` varchar(32) DEFAULT NULL, + PRIMARY KEY (`OHC_ID`), + KEY `INX_OHC_NAME` (`OHC_NAME`), + KEY `INX_OHC_DRS_ID` (`OHC_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=7172 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Karta otworu dla studni i piezometru'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_hole_cards_his` +-- + +DROP TABLE IF EXISTS `seg_object_hole_cards_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_hole_cards_his` ( + `OHH_ID` int(11) NOT NULL AUTO_INCREMENT, + `OHH_DRS_ID` int(11) DEFAULT NULL, + `OHH_UJ` varchar(32) DEFAULT NULL, + `OHH_NAME` varchar(128) DEFAULT NULL, + `OHH_DATE` date DEFAULT NULL, + `OHH_RZEDNA` varchar(32) DEFAULT NULL, + `OHH_ZASYP` varchar(32) DEFAULT NULL, + `OHH_ZMIAN_UMIEJ_LOCAL` varchar(255) DEFAULT NULL, + `OHH_ZMIAN_UMIEJ_REASON` varchar(255) DEFAULT NULL, + `OHH_PLC` varchar(32) DEFAULT NULL, + PRIMARY KEY (`OHH_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=61339 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_litolog` +-- + +DROP TABLE IF EXISTS `seg_object_litolog`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_litolog` ( + `HCL_ID` int(11) NOT NULL AUTO_INCREMENT, + `HCL_DRS_ID` int(11) DEFAULT NULL, + `HCL_FROM` double(9,2) NOT NULL DEFAULT 0.00, + `HCL_TO` double(9,2) NOT NULL DEFAULT 0.00, + `HCL_DESC` varchar(255) DEFAULT NULL, + `HCL_AUDIT_CU` varchar(64) DEFAULT NULL, + `HCL_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`HCL_ID`), + KEY `INX_HCL_DRS_ID` (`HCL_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_order_new_agg_params` +-- + +DROP TABLE IF EXISTS `seg_order_new_agg_params`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_order_new_agg_params` ( + `ONA_ID` int(11) NOT NULL AUTO_INCREMENT, + `ONA_ORD_ID` int(11) DEFAULT NULL, + `ONA_PUMP_DRS_ID` int(11) DEFAULT NULL, + `ONA_PUMP` varchar(255) DEFAULT NULL, + `ONA_ENG_DRS_ID` int(11) DEFAULT NULL, + `ONA_ENG` varchar(255) DEFAULT NULL, + `ONA_GLEB_AG` varchar(255) DEFAULT NULL, + `ONA_SRED_KOL` varchar(255) DEFAULT NULL, + `ONA_CABLE` varchar(255) DEFAULT NULL, + `ONA_SONDA` varchar(255) DEFAULT NULL, + `ONA_AUDIT_USR` varchar(64) DEFAULT NULL, + `ONA_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`ONA_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=18769 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_order_no_counters` +-- + +DROP TABLE IF EXISTS `seg_order_no_counters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_order_no_counters` ( + `ONC_ID` int(11) NOT NULL AUTO_INCREMENT, + `ONC_SCOPE` varchar(128) DEFAULT NULL, + `ONC_VALUE` int(11) DEFAULT NULL, + `ONC_YEAR` varchar(8) DEFAULT NULL, + `ONC_PLC` varchar(128) DEFAULT NULL, + PRIMARY KEY (`ONC_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=15248 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_order_obj_params` +-- + +DROP TABLE IF EXISTS `seg_order_obj_params`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_order_obj_params` ( + `OWP_ID` int(11) NOT NULL AUTO_INCREMENT, + `OWP_ORD_ID` int(11) DEFAULT NULL, + `OWP_LOKAL` varchar(255) DEFAULT NULL, + `OWP_GLEB_S` varchar(255) DEFAULT NULL, + `OWP_ZASYP` varchar(255) DEFAULT NULL, + `OWP_RZDNA` varchar(255) DEFAULT NULL, + `OWP_SRED` varchar(255) DEFAULT NULL, + `OWP_GLEB_AG` varchar(255) DEFAULT NULL, + `OWP_PUMP` varchar(255) DEFAULT NULL, + `OWP_ENG` varchar(255) DEFAULT NULL, + `OWP_SRED_KOL` varchar(255) DEFAULT NULL, + `OWP_METAN` varchar(255) DEFAULT NULL, + `OWP_CLEAN` varchar(255) DEFAULT NULL, + `OWP_ZWIERC` varchar(255) DEFAULT NULL, + `OWP_SONDA` varchar(255) DEFAULT NULL, + `OWP_DOJAZD` varchar(255) DEFAULT NULL, + `OWP_INNE` text DEFAULT NULL, + `OWP_AUDIT_USR` varchar(64) DEFAULT NULL, + `OWP_AUDIT_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`OWP_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=44374 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_orders` +-- + +DROP TABLE IF EXISTS `seg_orders`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_orders` ( + `ORD_ID` int(11) NOT NULL AUTO_INCREMENT, + `ORD_NO` varchar(128) DEFAULT NULL, + `ORD_DRS_ID` int(11) DEFAULT NULL, + `ORD_OBJ_TYPE` int(11) DEFAULT NULL, + `ORD_OBJ_NAME` varchar(128) DEFAULT NULL, + `ORD_SCOPE_DIC_ID` int(11) DEFAULT NULL, + `ORD_STATUS_DIC_ID` int(11) DEFAULT NULL, + `ORD_PLC` varchar(64) DEFAULT NULL, + `ORD_PRINT_TYPE` varchar(64) DEFAULT NULL, + `ORD_AUDIT_USR` varchar(64) DEFAULT NULL, + `ORD_AUDIT_DATE` date DEFAULT NULL, + `ORD_START_USR` varchar(64) DEFAULT NULL, + `ORD_START_DATE` date DEFAULT NULL, + `ORD_FINISH_DESC` text DEFAULT NULL, + `ORD_FINISH_USR` varchar(64) DEFAULT NULL, + `ORD_FINISH_DATE` date DEFAULT NULL, + PRIMARY KEY (`ORD_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=21128 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_piezometers_segap` +-- + +DROP TABLE IF EXISTS `seg_piezometers_segap`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_piezometers_segap` ( + `DRD_DRS_ID` int(11) DEFAULT NULL, + `SRP_BARIERA` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `SRP_NAME` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `DRS_DEPARTMENT` varchar(64) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_pump_eng_param` +-- + +DROP TABLE IF EXISTS `seg_pump_eng_param`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_pump_eng_param` ( + `PEP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PEP_PUP_ID` int(11) unsigned DEFAULT NULL, + `PEP_X_PARAM` float(9,2) NOT NULL DEFAULT 0.00, + `PEP_Y_PARAM` float(9,2) NOT NULL DEFAULT 0.00, + `PEP_TYPE` varchar(16) DEFAULT NULL COMMENT 'H, ETA', + PRIMARY KEY (`PEP_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=9793 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_pump_engine_rel` +-- + +DROP TABLE IF EXISTS `seg_pump_engine_rel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_pump_engine_rel` ( + `RPE_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `RPE_PUP_ID` int(11) DEFAULT NULL, + `RPE_ENG_ID` int(11) DEFAULT NULL, + PRIMARY KEY (`RPE_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=991 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_pumps` +-- + +DROP TABLE IF EXISTS `seg_pumps`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_pumps` ( + `PUP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PUP_MCF_ID` int(11) DEFAULT NULL, + `PUP_NAME` varchar(128) NOT NULL DEFAULT '', + `PUP_Q_N` float(9,2) DEFAULT NULL, + `PUP_Q_MIN` float(9,2) DEFAULT NULL, + `PUP_Q_MAX` float(9,2) DEFAULT NULL, + `PUP_H_P` float(9,2) DEFAULT NULL, + `PUP_H_MIN` float(9,2) DEFAULT NULL, + `PUP_H_MAX` float(9,2) DEFAULT NULL, + `PUP_ETA_MAX` float(9,2) DEFAULT NULL, + `PUP_PUMP_LENGTH` float(9,2) DEFAULT NULL, + `PUP_SHAFT_LENGTH` float(9,2) DEFAULT NULL, + `PUP_WEIGHT` float(9,2) DEFAULT NULL, + `PUP_DIAMETER` float(9,2) DEFAULT NULL, + `PUP_STATUS` char(1) NOT NULL DEFAULT '1' COMMENT '1-widoczna; 0-niewidoczna (usunięta logicznie)', + PRIMARY KEY (`PUP_ID`), + KEY `INX_PUP_Q_N` (`PUP_Q_N`), + KEY `INX_PUP_NAME` (`PUP_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=641 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_pumps_xy_formula` +-- + +DROP TABLE IF EXISTS `seg_pumps_xy_formula`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_pumps_xy_formula` ( + `PUF_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PUF_PUP_ID` int(11) DEFAULT NULL, + `PUF_XY_FORMULA` varchar(255) DEFAULT NULL, + `PUF_A` varchar(32) DEFAULT NULL COMMENT 'A [x^3]', + `PUF_B` varchar(32) DEFAULT NULL COMMENT 'B [x^2]', + `PUF_C` varchar(32) DEFAULT NULL COMMENT 'C [x]', + `PUF_D` varchar(32) DEFAULT NULL COMMENT 'D', + `PUF_TYPE` varchar(8) DEFAULT NULL COMMENT 'H, ETA', + PRIMARY KEY (`PUF_ID`), + KEY `INX_PUF_PUP_ID` (`PUF_PUP_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1245 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_res_piezo_wells_rel` +-- + +DROP TABLE IF EXISTS `seg_res_piezo_wells_rel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_res_piezo_wells_rel` ( + `RPW_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `RPW_RP_DRS_ID` int(11) DEFAULT NULL, + `RPW_WELL_DRS_ID` int(11) DEFAULT NULL, + `RPW_STATUS` varchar(64) DEFAULT NULL, + `RPW_AUDIT_CU` varchar(64) DEFAULT NULL, + `RPW_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`RPW_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_reservoirs_piezometers` +-- + +DROP TABLE IF EXISTS `seg_reservoirs_piezometers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_reservoirs_piezometers` ( + `SRP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SRP_SWI_ID` int(11) DEFAULT NULL, + `SRP_MCF_ID` int(11) unsigned DEFAULT NULL, + `SRP_BARIERA` varchar(32) DEFAULT NULL, + `SRP_NAME` varchar(255) DEFAULT NULL, + `SRP_TYPE_DIC_ID` int(11) DEFAULT NULL COMMENT 'sys_dictionaries (DIC_TYPE=RESERVOIR,PIEZOMETER)', + `SRP_LATITUDE` varchar(128) DEFAULT NULL COMMENT 'X', + `SRP_LONGITUDE` varchar(128) DEFAULT NULL COMMENT 'Y', + `SRP_SYS_TYPE` varchar(128) DEFAULT NULL, + `SRP_STAT_DESC` varchar(255) DEFAULT NULL, + PRIMARY KEY (`SRP_ID`), + KEY `INX_SRP_NAME` (`SRP_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=3931 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_rss_signal_values` +-- + +DROP TABLE IF EXISTS `seg_rss_signal_values`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_rss_signal_values` ( + `RSS_ID` int(11) NOT NULL AUTO_INCREMENT, + `RSS_DRS_ID` int(11) DEFAULT NULL, + `RSS_VALUE` varchar(32) DEFAULT NULL, + `RSS_AUDIT_CU` varchar(128) DEFAULT NULL, + `RSS_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`RSS_ID`), + KEY `INX_RSS_DRS_ID` (`RSS_DRS_ID`), + KEY `INX_RSS_AUDIT_CD` (`RSS_AUDIT_CD`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Sila sygnalu GSM dla poszczegolnych stacji'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_sms_in` +-- + +DROP TABLE IF EXISTS `seg_sms_in`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_sms_in` ( + `SMI_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SMI_PHONE_NO` varchar(32) DEFAULT NULL, + `SMI_DATE` datetime DEFAULT NULL, + `SMI_MESSAGE` varchar(512) DEFAULT NULL, + `SMI_AUDIT_CU` varchar(128) DEFAULT NULL, + `SMI_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SMI_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_sms_out` +-- + +DROP TABLE IF EXISTS `seg_sms_out`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_sms_out` ( + `SMO_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SMO_PHONE_NO` varchar(32) DEFAULT NULL, + `SMO_DATE` datetime DEFAULT NULL, + `SMO_MESSAGE` varchar(512) DEFAULT NULL, + `SMO_STATUS` varchar(4) NOT NULL DEFAULT '0' COMMENT '0-nowy; 1-obsÅ‚użony; -1- błąd', + `SMO_AUDIT_CU` varchar(128) DEFAULT NULL, + `SMO_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SMO_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_water_drainage` +-- + +DROP TABLE IF EXISTS `seg_water_drainage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_water_drainage` ( + `WWD_ID` int(11) NOT NULL AUTO_INCREMENT, + `WWD_PARENT_ID` int(11) DEFAULT NULL, + `WWD_NAME` varchar(255) DEFAULT NULL, + `WWD_AUDIT_CU` varchar(64) DEFAULT NULL, + `WWD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`WWD_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=171 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Odprowadzenie wody'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_water_intakes` +-- + +DROP TABLE IF EXISTS `seg_water_intakes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_water_intakes` ( + `SWI_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SWI_NAME` varchar(255) DEFAULT NULL, + `SWI_DESC` text DEFAULT NULL, + `SWI_ADDRESS_01` varchar(64) DEFAULT NULL, + `SWI_ADDRESS_02` varchar(128) DEFAULT NULL, + `SWI_PHONE` varchar(32) DEFAULT NULL, + `SWI_MAIL` varchar(255) DEFAULT NULL, + `SWI_LATITUDE` varchar(128) DEFAULT NULL, + `SWI_LONGITUDE` varchar(128) DEFAULT NULL, + `SWI_TYPE` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `SWI_AUDIT_CU` varchar(64) DEFAULT NULL, + `SWI_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`SWI_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Ujęcia'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_well_pump_eng_rel` +-- + +DROP TABLE IF EXISTS `seg_well_pump_eng_rel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_well_pump_eng_rel` ( + `RWL_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `RWL_WLL_ID` int(11) DEFAULT NULL, + `RWL_PUP_DRS_ID` int(11) DEFAULT NULL, + `RWL_ENG_DRS_ID` int(11) DEFAULT NULL, + PRIMARY KEY (`RWL_ID`), + KEY `INX_RWL_WLL_ID` (`RWL_WLL_ID`), + KEY `INX_RWL_PUP_DRS_ID` (`RWL_PUP_DRS_ID`), + KEY `INX_RWL_ENG_DRS_ID` (`RWL_ENG_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=12249 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_well_water_drainage` +-- + +DROP TABLE IF EXISTS `seg_well_water_drainage`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_well_water_drainage` ( + `WLD_ID` int(11) NOT NULL AUTO_INCREMENT, + `WLD_DRS_ID` int(11) DEFAULT NULL, + `WLD_WLL_ID` int(11) DEFAULT NULL, + `WLD_WWD_ID` int(11) DEFAULT NULL, + `WLD_AUDIT_CU` varchar(64) DEFAULT NULL, + `WLD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`WLD_ID`), + KEY `INX_WLD_DRS_ID` (`WLD_DRS_ID`), + KEY `INX_WLD_WWD_ID` (`WLD_WWD_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=3366 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='relacja Odprowadzenie wody/studnia'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_wells` +-- + +DROP TABLE IF EXISTS `seg_wells`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_wells` ( + `WLL_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `WLL_SWI_ID` int(11) DEFAULT NULL, + `WLL_MCF_ID` int(11) DEFAULT NULL, + `WLL_BARIERA` varchar(32) DEFAULT NULL, + `WLL_NAME` varchar(255) DEFAULT NULL, + `WLL_CAT_DIC_ID` int(11) DEFAULT NULL COMMENT 'DIC_ID sys_dictionary (TYPE = 5 WELL_CATEGORY)', + `WLL_LATITUDE` varchar(128) DEFAULT NULL COMMENT 'Szerokość geograficzna', + `WLL_LONGITUDE` varchar(255) DEFAULT NULL COMMENT 'Długość geograficzna', + `WLL_P1_SCOPE` varchar(16) NOT NULL DEFAULT '0', + `WLL_P2_SCOPE` varchar(16) NOT NULL DEFAULT '0', + `WLL_PP_SCOPE` varchar(16) NOT NULL DEFAULT '0', + `WLL_HH_SCOPE` varchar(16) NOT NULL DEFAULT '0', + `WLL_Q_SCOPE` varchar(16) NOT NULL DEFAULT '0', + `WLL_SYS_TYPE` varchar(128) DEFAULT NULL, + `WLL_STAT_DESC` varchar(255) DEFAULT NULL, + PRIMARY KEY (`WLL_ID`), + KEY `INX_WLL_NAME` (`WLL_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=4618 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_wells_exchanged` +-- + +DROP TABLE IF EXISTS `seg_wells_exchanged`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_wells_exchanged` ( + `WLE_ID` int(11) NOT NULL AUTO_INCREMENT, + `WLE_WLL_ID` int(11) DEFAULT NULL, + `WLE_NR_EXCHANGE` int(11) DEFAULT NULL, + `WLE_PUMP_NAME` varchar(128) DEFAULT NULL, + `WLE_PUMP_NO` varchar(64) DEFAULT NULL, + `WLE_ENG_NAME` varchar(128) DEFAULT NULL, + `WLE_ENG_NO` varchar(64) DEFAULT NULL, + `WLE_DATE_FROM` datetime DEFAULT NULL, + `WLE_DATE_TO` datetime DEFAULT NULL, + `WLE_REASON` varchar(255) DEFAULT NULL, + `WLE_ZP` varchar(16) DEFAULT NULL, + `WLE_DR` varchar(16) DEFAULT NULL, + PRIMARY KEY (`WLE_ID`), + KEY `INX_WLE_PUMP_NAME` (`WLE_PUMP_NAME`), + KEY `INX_WLE_WLL_DATE_FROM_TO` (`WLE_WLL_ID`,`WLE_DATE_FROM`,`WLE_DATE_TO`), + KEY `INX_WLE_DATE_FROM_TO` (`WLE_DATE_FROM`,`WLE_DATE_TO`) +) ENGINE=InnoDB AUTO_INCREMENT=39474 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_wells_his` +-- + +DROP TABLE IF EXISTS `seg_wells_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_wells_his` ( + `WLH_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `WLH_WLL_ID` int(11) DEFAULT NULL, + `WLH_TYPE` varchar(16) DEFAULT NULL, + `WLH_SEGAP_AUDIT_DATE` datetime DEFAULT NULL, + `WLH_DESC` text DEFAULT NULL, + `WLH_SEGAP_VAL1` varchar(128) DEFAULT NULL, + `WLH_SEGAP_VAL2` varchar(128) DEFAULT NULL, + `WLH_SEGAP_DATE` date DEFAULT NULL, + `WLH_AUDIT_CU` varchar(64) DEFAULT NULL, + `WLH_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`WLH_ID`), + KEY `INX_WLH_WLL_ID` (`WLH_WLL_ID`) +) ENGINE=MyISAM AUTO_INCREMENT=27425 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='tabela z danymi historycznymi z SEGAP'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_wells_manual_work` +-- + +DROP TABLE IF EXISTS `seg_wells_manual_work`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_wells_manual_work` ( + `WMS_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `WMS_WLL_ID` int(11) DEFAULT NULL, + `WMS_DRS_ID` int(11) DEFAULT NULL, + `WMS_NAME` varchar(255) DEFAULT NULL, + `WMS_WORK_STATUS` varchar(16) DEFAULT NULL, + `WMS_DATETIME` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`WMS_ID`), + KEY `INX_WMS_WLL_ID` (`WMS_WLL_ID`), + KEY `INX_WMS_DRS_ID` (`WMS_DRS_ID`), + KEY `INX_WMS_NAME` (`WMS_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=22063 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_wells_manual_work_syndis` +-- + +DROP TABLE IF EXISTS `seg_wells_manual_work_syndis`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_wells_manual_work_syndis` ( + `SLA_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SLA_WLL_ID` int(11) DEFAULT NULL, + `SLA_DRS_ID` int(11) DEFAULT NULL, + `SLA_NAME` varchar(255) DEFAULT NULL, + `SLA_WORK_STATUS` varchar(16) DEFAULT NULL, + `SLA_DATETIME` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `SLA_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SLA_ID`), + KEY `INX_SLA_WLL_ID` (`SLA_WLL_ID`), + KEY `INX_SLA_DRS_ID` (`SLA_DRS_ID`), + KEY `INX_SLA_NAME` (`SLA_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=125231 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_wellsink_pump_eng_rel` +-- + +DROP TABLE IF EXISTS `seg_wellsink_pump_eng_rel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_wellsink_pump_eng_rel` ( + `RWS_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `RWS_WLL_ID` int(11) DEFAULT NULL, + `RWS_DRS_ID` int(11) DEFAULT NULL, + `RWS_PUP_DRS_ID` int(11) DEFAULT NULL, + `RWS_ENG_DRS_ID` int(11) DEFAULT NULL, + `RWS_DESC` varchar(255) DEFAULT NULL, + `RWS_DEPARTMENT` varchar(64) DEFAULT NULL, + `RWS_AUDIT_USR` varchar(64) DEFAULT NULL, + `RWS_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`RWS_ID`), + KEY `INX_RWS_DRS_ID` (`RWS_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_h_karta` +-- + +DROP TABLE IF EXISTS `stp_h_karta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_h_karta` ( + `stp_h_karta_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_h_karta_uj` varchar(128) DEFAULT '', + `stp_h_karta_stud` varchar(128) DEFAULT '', + `stp_h_karta_data_roz` varchar(128) DEFAULT '', + `stp_h_karta_data_zak` varchar(128) DEFAULT '', + `stp_h_karta_data_odd` varchar(128) DEFAULT '', + `stp_h_karta_gl_odw` varchar(128) DEFAULT '', + `stp_h_karta_gl_ost` varchar(128) DEFAULT '', + `stp_h_karta_dlug` varchar(128) DEFAULT '', + `stp_h_karta_szer` varchar(128) DEFAULT '', + `stp_h_karta_rzed` varchar(128) DEFAULT '', + `stp_h_karta_kryzy` varchar(128) DEFAULT '', + `stp_h_karta_rzed_act` varchar(128) DEFAULT '', + `stp_h_karta_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_h_karta_id`) +) ENGINE=InnoDB AUTO_INCREMENT=6701 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_h_karta_piezo` +-- + +DROP TABLE IF EXISTS `stp_h_karta_piezo`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_h_karta_piezo` ( + `DRS_ID` int(11) unsigned DEFAULT 0, + `SRP_ID` int(11) unsigned NOT NULL DEFAULT 0, + `SRP_NAME` varchar(255) DEFAULT NULL, + `stp_h_karta_stud` varchar(128) DEFAULT '', + `stp_h_karta_data_roz` varchar(128) DEFAULT '', + `stp_h_karta_data_zak` varchar(128) DEFAULT '', + `stp_h_karta_data_odd` varchar(128) DEFAULT '', + `gl_odw` varchar(128) DEFAULT NULL, + `gl_ost` varchar(128) DEFAULT NULL, + `stp_h_karta_dlug` varchar(128) DEFAULT '', + `stp_h_karta_szer` varchar(128) DEFAULT '', + `karta_rzed` varchar(128) DEFAULT NULL, + `karta_kryzy` varchar(128) DEFAULT NULL, + `karta_rzed_act` varchar(128) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_h_karta_wells` +-- + +DROP TABLE IF EXISTS `stp_h_karta_wells`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_h_karta_wells` ( + `DRS_ID` int(11) unsigned DEFAULT 0, + `WLL_ID` int(11) unsigned NOT NULL DEFAULT 0, + `WLL_NAME` varchar(255) DEFAULT NULL, + `stp_h_karta_stud` varchar(128) DEFAULT '', + `stp_h_karta_data_roz` varchar(128) DEFAULT '', + `stp_h_karta_data_zak` varchar(128) DEFAULT '', + `stp_h_karta_data_odd` varchar(128) DEFAULT '', + `gl_odw` varchar(128) DEFAULT NULL, + `gl_ost` varchar(128) DEFAULT NULL, + `stp_h_karta_dlug` varchar(128) DEFAULT '', + `stp_h_karta_szer` varchar(128) DEFAULT '', + `karta_rzed` varchar(128) DEFAULT NULL, + `karta_kryzy` varchar(128) DEFAULT NULL, + `karta_rzed_act` varchar(128) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_protdata` +-- + +DROP TABLE IF EXISTS `stp_protdata`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_protdata` ( + `stp_protdata_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_protdata_nr_prot` varchar(128) DEFAULT '', + `stp_protdata_lp` varchar(128) DEFAULT '', + `stp_protdata_pomp` varchar(128) DEFAULT '', + `stp_protdata_pomp_nr` varchar(128) DEFAULT '', + `stp_protdata_q` varchar(128) DEFAULT '', + `stp_protdata_p` varchar(128) DEFAULT '', + `stp_protdata_cz_dyn` varchar(128) DEFAULT '', + `stp_protdata_cz_geo` varchar(128) DEFAULT '', + `stp_protdata_h` varchar(128) DEFAULT '', + `stp_protdata_pp` varchar(128) DEFAULT '', + `stp_protdata_eta_p` varchar(128) DEFAULT '', + `stp_protdata_n` varchar(128) DEFAULT '', + `stp_protdata_v` varchar(128) DEFAULT '', + `stp_protdata_tw` varchar(128) DEFAULT '', + `stp_protdata_u` varchar(128) DEFAULT '', + `stp_protdata_ir` varchar(128) DEFAULT '', + `stp_protdata_is` varchar(128) DEFAULT '', + `stp_protdata_it` varchar(128) DEFAULT '', + `stp_protdata_delta_i` varchar(128) DEFAULT '', + `stp_protdata_i` varchar(128) DEFAULT '', + `stp_protdata_p1` varchar(128) DEFAULT '', + `stp_protdata_p2` varchar(128) DEFAULT '', + `stp_protdata_eta_s` varchar(128) DEFAULT '', + `stp_protdata_cos` varchar(128) DEFAULT '', + `stp_protdata_f` varchar(128) DEFAULT '', + `stp_protdata_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_protdata_id`) +) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_protokoly` +-- + +DROP TABLE IF EXISTS `stp_protokoly`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_protokoly` ( + `stp_protokoly_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_protokoly_nr` varchar(128) DEFAULT '', + `stp_protokoly_pomp` varchar(128) DEFAULT '', + `stp_protokoly_pomp_nr` varchar(128) DEFAULT '', + `stp_protokoly_sil` varchar(128) DEFAULT '', + `stp_protokoly_sil_nr` varchar(128) DEFAULT '', + `stp_protokoly_data` varchar(128) DEFAULT '', + `stp_protokoly_prowadz` varchar(128) DEFAULT '', + `stp_protokoly_kod` varchar(128) DEFAULT '', + `stp_protokoly_wynik` varchar(128) DEFAULT '', + `stp_protokoly_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_protokoly_id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_siln` +-- + +DROP TABLE IF EXISTS `stp_siln`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_siln` ( + `stp_siln_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_siln_typ_si` varchar(128) DEFAULT '', + `stp_siln_u` varchar(128) DEFAULT '', + `stp_siln_ls` varchar(128) DEFAULT '', + `stp_siln_dls` varchar(128) DEFAULT '', + `stp_siln_gs` varchar(128) DEFAULT '', + `stp_siln_ds` varchar(128) DEFAULT '', + `stp_siln_w` varchar(128) DEFAULT '', + `stp_siln_p` varchar(128) DEFAULT '', + `stp_siln_in` varchar(128) DEFAULT '', + `stp_siln_n` varchar(128) DEFAULT '', + `stp_siln_cos` varchar(128) DEFAULT '', + `stp_siln_eta` varchar(128) DEFAULT '', + `stp_siln_prod_kod` varchar(128) DEFAULT '', + `stp_siln_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_siln_id`) +) ENGINE=InnoDB AUTO_INCREMENT=496 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_stakabel` +-- + +DROP TABLE IF EXISTS `stp_stakabel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_stakabel` ( + `stp_stakabel_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stakabel_id_k` varchar(128) DEFAULT NULL, + `stp_stakabel_typ` varchar(128) DEFAULT NULL, + `stp_stakabel_ilosc` varchar(128) DEFAULT NULL, + `stp_stakabel_user_id` varchar(128) DEFAULT NULL, + `stp_stakabel_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_stakabel_id`) +) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_stakabel_dl` +-- + +DROP TABLE IF EXISTS `stp_stakabel_dl`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_stakabel_dl` ( + `stp_stakabel_dl_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stakabel_dl_typ` varchar(128) DEFAULT NULL, + `stp_stakabel_dl_nr` varchar(128) DEFAULT NULL, + `stp_stakabel_dl_u` varchar(128) DEFAULT NULL, + `stp_stakabel_dl_ilosc` float(9,2) DEFAULT NULL, + `stp_stakabel_dl_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_stakabel_dl_id`) +) ENGINE=InnoDB AUTO_INCREMENT=4096 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_stakabel_g` +-- + +DROP TABLE IF EXISTS `stp_stakabel_g`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_stakabel_g` ( + `stp_stakabel_g_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stakabel_g_kab_id` varchar(128) DEFAULT NULL, + `stp_stakabel_g_typ_id` varchar(128) DEFAULT NULL, + `stp_stakabel_g_owner_id` varchar(128) DEFAULT NULL, + `stp_stakabel_g_dlug` float(9,2) DEFAULT NULL, + `stp_stakabel_g_ciez` varchar(128) DEFAULT NULL, + `stp_stakabel_g_wiaz` varchar(128) DEFAULT NULL, + `stp_stakabel_g_muf` varchar(128) DEFAULT NULL, + `stp_stakabel_g_muf_new` varchar(128) DEFAULT NULL, + `stp_stakabel_g_zlacz` varchar(128) DEFAULT NULL, + `stp_stakabel_g_zlacz_new` varchar(128) DEFAULT NULL, + `stp_stakabel_g_rbh` varchar(128) DEFAULT NULL, + `stp_stakabel_g_ozn_1` varchar(128) DEFAULT NULL, + `stp_stakabel_g_ozn_2` varchar(128) DEFAULT NULL, + `stp_stakabel_g_stat_id` varchar(128) DEFAULT NULL, + `stp_stakabel_g_data_przy` varchar(128) DEFAULT NULL, + `stp_stakabel_g_data_roz` varchar(128) DEFAULT NULL, + `stp_stakabel_g_user_id` varchar(128) DEFAULT NULL, + `stp_stakabel_g_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_stakabel_g_id`) +) ENGINE=InnoDB AUTO_INCREMENT=18655 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_stakabel_o` +-- + +DROP TABLE IF EXISTS `stp_stakabel_o`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_stakabel_o` ( + `stp_stakabel_dl_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stakabel_dl_kab_id` varchar(128) DEFAULT NULL, + `stp_stakabel_dl_ilosc` float(9,2) DEFAULT NULL, + `stp_stakabel_dl_ciezar` float(9,2) DEFAULT NULL, + `stp_stakabel_dl_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_stakabel_dl_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2583 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_stamot` +-- + +DROP TABLE IF EXISTS `stp_stamot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_stamot` ( + `stp_stamot_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stamot_id_m` varchar(128) DEFAULT '', + `stp_stamot_typ_m` varchar(128) DEFAULT '', + `stp_stamot_nr_m` varchar(128) DEFAULT '', + `stp_stamot_u` varchar(128) DEFAULT '', + `stp_stamot_p` varchar(128) DEFAULT '', + `stp_stamot_stat_id` varchar(128) DEFAULT '', + `stp_stamot_data_przyj` varchar(128) DEFAULT '', + `stp_stamot_data_zakup` varchar(128) DEFAULT '', + `stp_stamot_data_kasac` varchar(128) DEFAULT '', + `stp_stamot_kasac_id` varchar(128) DEFAULT NULL, + `stp_stamot_user_id` varchar(128) DEFAULT '', + `stp_stamot_pomp_id` varchar(128) DEFAULT '', + `stp_stamot_kabel_id` varchar(128) DEFAULT '', + `stp_stamot_kabel_dl` varchar(128) DEFAULT '', + `stp_stamot_data_akt` varchar(128) DEFAULT '', + `stp_stamot_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_stamot_id`) +) ENGINE=InnoDB AUTO_INCREMENT=3393 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_stapo` +-- + +DROP TABLE IF EXISTS `stp_stapo`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_stapo` ( + `stp_stapo_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stapo_id_p` varchar(128) DEFAULT '', + `stp_stapo_typ_p` varchar(128) DEFAULT '', + `stp_stapo_nr_p` varchar(128) DEFAULT '', + `stp_stapo_stat_id` varchar(128) DEFAULT '', + `stp_stapo_data_przyj` varchar(128) DEFAULT '', + `stp_stapo_data_zakup` varchar(128) DEFAULT '', + `stp_stapo_data_kasac` varchar(128) DEFAULT '', + `stp_stapo_kasac_id` varchar(128) DEFAULT NULL, + `stp_stapo_user_id` varchar(128) DEFAULT '', + `stp_stapo_sil_id` varchar(128) DEFAULT '', + `stp_stapo_data_akt` varchar(128) DEFAULT '', + `stp_stapo_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_stapo_id`) +) ENGINE=InnoDB AUTO_INCREMENT=3241 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_status` +-- + +DROP TABLE IF EXISTS `stp_status`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_status` ( + `stp_status_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_status_id_s` varchar(128) DEFAULT '', + `stp_status_kod` varchar(128) DEFAULT '', + `stp_status_nazwa` varchar(128) DEFAULT '', + `stp_status_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_status_id`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_stpar` +-- + +DROP TABLE IF EXISTS `stp_stpar`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_stpar` ( + `stp_stpar_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stpar_uj` varchar(128) DEFAULT '', + `stp_stpar_stud` varchar(128) DEFAULT '', + `stp_stpar_var` varchar(128) DEFAULT '', + `stp_stpar_data` varchar(128) DEFAULT '', + `stp_stpar_val1` varchar(128) DEFAULT '', + `stp_stpar_val2` varchar(128) DEFAULT '', + `stp_stpar_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_stpar_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2134171 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_studef` +-- + +DROP TABLE IF EXISTS `stp_studef`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_studef` ( + `stp_studef_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_studef_uj` varchar(128) DEFAULT '', + `stp_studef_stud` varchar(128) DEFAULT '', + `stp_studef_wydz` varchar(128) DEFAULT '', + `stp_studef_typ` varchar(128) DEFAULT '', + `stp_studef_dep` varchar(128) DEFAULT '', + `stp_studef_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_studef_id`) +) ENGINE=InnoDB AUTO_INCREMENT=11123 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_studnie` +-- + +DROP TABLE IF EXISTS `stp_studnie`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_studnie` ( + `stp_studnie_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_studnie_uj` varchar(128) DEFAULT '', + `stp_studnie_stud` varchar(128) DEFAULT '', + `stp_studnie_zs` varchar(128) DEFAULT '', + `stp_studnie_zasyp` varchar(128) DEFAULT '', + `stp_studnie_d` varchar(128) DEFAULT '', + `stp_studnie_dr` varchar(128) DEFAULT '', + `stp_studnie_zp` varchar(128) DEFAULT '', + `stp_studnie_pup_typ` varchar(128) DEFAULT '', + `stp_studnie_pup_nr` varchar(128) DEFAULT '', + `stp_studnie_sil_typ` varchar(128) DEFAULT '', + `stp_studnie_sil_nr` varchar(128) DEFAULT '', + `stp_studnie_data_zab` varchar(128) DEFAULT NULL, + `stp_studnie_rzedna_zrz` varchar(128) DEFAULT '', + `stp_studnie_dep` varchar(128) DEFAULT '', + `stp_studnie_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_studnie_id`) +) ENGINE=InnoDB AUTO_INCREMENT=11105 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_typstudni` +-- + +DROP TABLE IF EXISTS `stp_typstudni`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_typstudni` ( + `stp_typstudni_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_typstudni_typ` varchar(128) DEFAULT '', + `stp_typstudni_nazwa` varchar(128) DEFAULT '', + `stp_typstudni_dep` varchar(128) DEFAULT '', + `stp_typstudni_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_typstudni_id`) +) ENGINE=InnoDB AUTO_INCREMENT=187 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_uzytkownik` +-- + +DROP TABLE IF EXISTS `stp_uzytkownik`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_uzytkownik` ( + `stp_uzytkownik_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_uzytkownik_id_u` varchar(128) DEFAULT '', + `stp_uzytkownik_kod` varchar(128) DEFAULT '', + `stp_uzytkownik_nazwa` varchar(128) DEFAULT '', + `stp_uzytkownik_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_uzytkownik_id`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stp_wymiany` +-- + +DROP TABLE IF EXISTS `stp_wymiany`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `stp_wymiany` ( + `stp_wymiany_id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_wymiany_uj` varchar(128) DEFAULT '', + `stp_wymiany_stud` varchar(128) DEFAULT '', + `stp_wymiany_nr_wym` varchar(128) DEFAULT '', + `stp_wymiany_pup_typ` varchar(128) DEFAULT '', + `stp_wymiany_pup_nr` varchar(128) DEFAULT '', + `stp_wymiany_eng_typ` varchar(128) DEFAULT '', + `stp_wymiany_eng_nr` varchar(128) DEFAULT '', + `stp_wymiany_data_od` varchar(128) DEFAULT '', + `stp_wymiany_data_do` varchar(128) DEFAULT '', + `stp_wymiany_zp` varchar(128) DEFAULT '', + `stp_wymiany_dr` varchar(128) DEFAULT '', + `stp_wymiany_powod` varchar(128) DEFAULT '', + `stp_wymiany_dep` varchar(128) DEFAULT '', + `stp_wymiany_audit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`stp_wymiany_id`) +) ENGINE=InnoDB AUTO_INCREMENT=27807 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_dictionaries` +-- + +DROP TABLE IF EXISTS `sys_dictionaries`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_dictionaries` ( + `DIC_ID` int(11) NOT NULL AUTO_INCREMENT, + `DIC_NAME` varchar(255) DEFAULT NULL, + `DIC_DESC` text DEFAULT NULL, + `DIC_TYPE` varchar(255) DEFAULT NULL, + `DIC_TYPE_ID` int(11) DEFAULT NULL, + `DIC_POL_LANG` varchar(64) DEFAULT NULL, + `DIC_ENG_LANG` varchar(64) DEFAULT NULL, + `DIC_GER_LANG` varchar(64) DEFAULT NULL, + PRIMARY KEY (`DIC_ID`), + KEY `INX_DIC_NAME` (`DIC_NAME`), + KEY `INX_DIC_TYPE` (`DIC_TYPE`) +) ENGINE=InnoDB AUTO_INCREMENT=1593 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_job_logs` +-- + +DROP TABLE IF EXISTS `sys_job_logs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_job_logs` ( + `SJL_ID` int(11) NOT NULL AUTO_INCREMENT, + `SJL_JOB_NAME` varchar(128) DEFAULT NULL, + `SJL_START_DATE` datetime DEFAULT NULL, + `SJL_FINISH_DATE` datetime DEFAULT NULL, + `SJL_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SJL_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1149898 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_participants` +-- + +DROP TABLE IF EXISTS `sys_participants`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_participants` ( + `PRT_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PRT_NAME` varchar(255) NOT NULL DEFAULT 'CORE', + `PRT_DESCRIPTION` text DEFAULT NULL, + `PRT_SYSTEM_TYPE` varchar(64) NOT NULL DEFAULT 'SEGAP_bas' COMMENT 'SEGAP_bas, SEGAP_stnd, SEGAP_ent', + `PRT_SYSTEM_ACCESS_LEVEL` int(11) NOT NULL DEFAULT 1 COMMENT '1-basic, 2-standard, 3-enterprice', + `PRT_STATUS` char(1) NOT NULL DEFAULT '0' COMMENT '0-inactive, 1-active', + `PRT_AUDIT_CU` varchar(64) DEFAULT NULL, + `PRT_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`PRT_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Tabela klientów w systemie sprzedaży SaaS oraz rodzaju'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_profile_site` +-- + +DROP TABLE IF EXISTS `sys_profile_site`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_profile_site` ( + `PSA_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PSA_PRO_ID` int(11) DEFAULT NULL, + `PSA_SAC_ID` int(11) DEFAULT NULL, + PRIMARY KEY (`PSA_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1903 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_profiles` +-- + +DROP TABLE IF EXISTS `sys_profiles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_profiles` ( + `PRO_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PRO_PRT_ID` int(11) NOT NULL DEFAULT 1, + `PRO_NAME` varchar(128) NOT NULL DEFAULT '', + `PRO_DESCRIPTION` varchar(255) DEFAULT NULL, + PRIMARY KEY (`PRO_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Profile użytkowników'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_setup_parameters` +-- + +DROP TABLE IF EXISTS `sys_setup_parameters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_setup_parameters` ( + `SSP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SSP_NAME` varchar(128) DEFAULT NULL, + `SSP_VALUE` varchar(255) DEFAULT NULL, + `SSP_DESCRIPTION` varchar(255) DEFAULT NULL, + `SSP_PARAM1` varchar(255) DEFAULT NULL, + `SSP_PARAM2` varchar(255) DEFAULT NULL, + `SSP_PARAM3` varchar(255) DEFAULT NULL, + `SSP_SCOPE_FROM` varchar(16) NOT NULL DEFAULT '0', + `SSP_SCOPE_TO` varchar(16) DEFAULT NULL, + `SSP_AUDIT_CU` varchar(64) DEFAULT NULL, + `SSP_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SSP_ID`), + KEY `INX_SSP_NAME` (`SSP_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_site_access` +-- + +DROP TABLE IF EXISTS `sys_site_access`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_site_access` ( + `SAC_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SAC_NAME` varchar(255) NOT NULL DEFAULT '', + `SAC_DESCRIPTION` varchar(255) DEFAULT NULL, + `SAC_URL_NAME` varchar(255) DEFAULT NULL COMMENT 'eg.: site801', + PRIMARY KEY (`SAC_ID`), + KEY `INX_SAC_URL_NAME` (`SAC_URL_NAME`) +) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_stacja_prob_upload_logs` +-- + +DROP TABLE IF EXISTS `sys_stacja_prob_upload_logs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_stacja_prob_upload_logs` ( + `SPU_ID` int(11) NOT NULL AUTO_INCREMENT, + `SPU_UPLOAD_SP_FILE` datetime DEFAULT NULL, + `SPU_MADE_DB_PROC` datetime DEFAULT NULL, + `SPU_STATUS` int(3) DEFAULT 0, + PRIMARY KEY (`SPU_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=5282 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_syndis_logs` +-- + +DROP TABLE IF EXISTS `sys_syndis_logs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_syndis_logs` ( + `SYL_ID` int(11) NOT NULL AUTO_INCREMENT, + `SYL_WELL` varchar(255) DEFAULT NULL, + `SYL_CURRENTL1` varchar(255) DEFAULT NULL, + `SYL_CURRENTL2` varchar(255) DEFAULT NULL, + `SYL_CURRENTL3` varchar(255) DEFAULT NULL, + `SYL_VOLTAGEL12` varchar(255) DEFAULT NULL, + `SYL_VOLTAGEL23` varchar(255) DEFAULT NULL, + `SYL_ACTIVEPOWER` varchar(255) DEFAULT NULL, + `SYL_COS` varchar(255) DEFAULT NULL, + `SYL_ACTIVEENERGY` varchar(255) DEFAULT NULL, + `SYL_WATERTEMPERATURE` varchar(255) DEFAULT NULL, + `SYL_CLINPUMPEDWATER` varchar(255) DEFAULT NULL, + `SYL_CURRENTDIAGNOSTICS` varchar(255) DEFAULT NULL, + `SYL_STATICWATERTABLE` varchar(255) DEFAULT NULL, + `SYL_DYNAMICWATERTABLE` varchar(255) DEFAULT NULL, + `SYL_PRESSUREBEFORETHROTTLEMA` varchar(255) DEFAULT NULL, + `SYL_PRESSUREAFTERTHROTTLEMA` varchar(255) DEFAULT NULL, + `SYL_PRESSUREINPISTONBODYMA` varchar(255) DEFAULT NULL, + `SYL_PUMPEFFICIENCYMA` varchar(255) DEFAULT NULL, + `SYL_WATERTABLEPOSITIONMA` varchar(255) DEFAULT NULL, + `SYL_BAROMETRICPRESSUREMA` varchar(255) DEFAULT NULL, + `SYL_DATA` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SYL_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=37934 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_user_profiles` +-- + +DROP TABLE IF EXISTS `sys_user_profiles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_user_profiles` ( + `SUP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `SUP_USR_ID` int(11) DEFAULT NULL COMMENT 'ID usera', + `SUP_PRO_ID` int(11) DEFAULT NULL COMMENT 'ID profilu', + PRIMARY KEY (`SUP_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=761 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_users` +-- + +DROP TABLE IF EXISTS `sys_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_users` ( + `USR_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `USR_USERNAME` varchar(64) DEFAULT NULL COMMENT 'Login', + `USR_PASSWORD` varchar(64) DEFAULT NULL, + `USR_FIRST_NAME` varchar(64) DEFAULT NULL, + `USR_LAST_NAME` varchar(64) DEFAULT NULL, + `USR_MAIL` varchar(128) DEFAULT NULL, + `USR_PHONE` varchar(32) DEFAULT NULL, + `USR_STATUS` char(1) NOT NULL DEFAULT '0' COMMENT '0-inactive, 1-active, 2-blocked', + `USR_PRT_ID` int(11) NOT NULL DEFAULT 1 COMMENT 'participant, klient w systemie SaaS', + `USR_AUDIT_CU` varchar(64) DEFAULT NULL, + `USR_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`USR_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_users_access_log` +-- + +DROP TABLE IF EXISTS `sys_users_access_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_users_access_log` ( + `UAL_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `UAL_USR_ID` int(11) DEFAULT NULL, + `UAL_SYSTEM_TYPE` varchar(64) DEFAULT NULL, + `UAL_LANGUAGE` varchar(64) DEFAULT NULL, + `UAL_IP_ADDRESS` varchar(16) DEFAULT NULL, + `UAL_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`UAL_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=85092 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `sys_users_regions` +-- + +DROP TABLE IF EXISTS `sys_users_regions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_users_regions` ( + `URG_ID` int(11) NOT NULL AUTO_INCREMENT, + `URG_USR_ID` int(11) NOT NULL DEFAULT 0, + `URG_DESC` varchar(255) DEFAULT NULL COMMENT 'Opis regionu', + PRIMARY KEY (`URG_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_power_path` +-- + +DROP TABLE IF EXISTS `tst_power_path`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_power_path` ( + `TPP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `TPP_NAME` varchar(255) DEFAULT NULL COMMENT 'Nazwa toru', + `TPP_ADDRESS` varchar(4) DEFAULT NULL COMMENT 'adres modbusa', + PRIMARY KEY (`TPP_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='definicja torów pomiarowych'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_steps` +-- + +DROP TABLE IF EXISTS `tst_steps`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_steps` ( + `STP_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `STP_CMD` varchar(64) DEFAULT NULL COMMENT 'komenda', + `STP_VALUE` varchar(64) DEFAULT NULL COMMENT 'wartosc', + `STP_DELAY` int(11) NOT NULL DEFAULT 500 COMMENT 'opoznienie w milisekundach', + `STP_DESC` varchar(128) DEFAULT NULL COMMENT 'opis', + `STP_STATUS` varchar(4) DEFAULT NULL COMMENT '0,1', + `STP_NN` varchar(4) NOT NULL DEFAULT '1' COMMENT 'Jesli jest 1 to idzie dla pompy NN', + `STP_AUDIT_CU` varchar(64) DEFAULT NULL COMMENT 'user', + `STP_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`STP_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Tabela z krokami dla pomiarow'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_test_details` +-- + +DROP TABLE IF EXISTS `tst_test_details`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_test_details` ( + `TSD_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `TSD_TST_ID` int(11) unsigned DEFAULT NULL COMMENT 'Id testu', + `TSD_MSR_STEP` int(11) DEFAULT NULL COMMENT 'krok pomiarowy', + `TSD_VAL_01` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_02` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_03` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_04` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_05` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_06` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_07` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_08` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_09` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_10` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_11` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_12` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_13` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_14` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_15` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_16` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_17` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_18` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_19` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_VAL_20` double(9,2) NOT NULL DEFAULT 0.00, + `TSD_AUDIT_CU` varchar(64) DEFAULT NULL, + `TSD_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`TSD_ID`), + KEY `INX_TSD_TST_ID` (`TSD_TST_ID`), + KEY `INX_TSD_MSR_STEP` (`TSD_MSR_STEP`), + KEY `INX_TSD_TST_STEP` (`TSD_TST_ID`,`TSD_MSR_STEP`) +) ENGINE=InnoDB AUTO_INCREMENT=418722 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_test_logs` +-- + +DROP TABLE IF EXISTS `tst_test_logs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_test_logs` ( + `TLG_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `TLG_TST_TD` int(11) DEFAULT NULL COMMENT 'id przepowadzanego testu', + `TLG_TYPE` varchar(32) DEFAULT NULL COMMENT 'Typ akcji wysylanie [TX], otrzymywanie [RX]', + `TLG_VALUE` varchar(512) DEFAULT NULL COMMENT 'Wartosc wysylanych i otrzymywanych komend, wynikow', + `TLG_AUDIT_CU` varchar(64) DEFAULT NULL, + `TLG_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`TLG_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Logi z testu'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_test_notif` +-- + +DROP TABLE IF EXISTS `tst_test_notif`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_test_notif` ( + `TNF_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `TNF_TST_ID` int(11) unsigned DEFAULT NULL, + `TNF_CUSTOMER` varchar(255) DEFAULT NULL, + `TNF_COMMISION` varchar(255) DEFAULT NULL COMMENT 'Zlecenie', + `TNF_DESC` text DEFAULT NULL COMMENT 'opis', + `TNF_ON_REPORT` char(8) DEFAULT NULL COMMENT 'Czy ma sie wyswietlac na raporcie', + PRIMARY KEY (`TNF_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=10027 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Uwagi do testow'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_test_places` +-- + +DROP TABLE IF EXISTS `tst_test_places`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_test_places` ( + `TPL_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `TPL_NAME` varchar(255) DEFAULT NULL COMMENT 'nazwa', + `TPL_PORT_NO` varchar(8) DEFAULT NULL COMMENT 'serial port COM1', + `TPL_PORT_SPEED` int(11) NOT NULL DEFAULT 4800 COMMENT 'predkosc transmisji', + `TPL_DESC` varchar(255) DEFAULT NULL COMMENT 'opis', + `TPL_ADDRESS` varchar(16) DEFAULT NULL COMMENT 'adres koncentratora (np.: bb, cc, dd)', + `TPL_PIPE_DIAMETER` double(9,2) DEFAULT NULL COMMENT 'srednica rury', + `TPL_FAST_LOOS` double(9,2) DEFAULT NULL COMMENT 'bezwładnosc zasuwy', + `TPL_Q_RANGE` double(9,2) DEFAULT NULL COMMENT 'Zakres pomiarowy Q', + `TPL_P_RANGE` double(9,2) DEFAULT NULL COMMENT 'Zakres pomiarowy cisnienia', + `TPL_T_RANGE` double(9,2) DEFAULT NULL COMMENT 'Zakres pomiarowy temperatury', + `TPL_BURN_TIME` int(11) DEFAULT NULL, + `TPL_AUDIT_CU` varchar(64) DEFAULT NULL COMMENT 'uzytkownik', + `TPL_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`TPL_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_tests` +-- + +DROP TABLE IF EXISTS `tst_tests`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_tests` ( + `TST_ID` int(11) unsigned NOT NULL DEFAULT 0, + `TST_TPL_ID` int(11) DEFAULT NULL COMMENT 'id stanowiska', + `TST_PUP_ID` int(11) DEFAULT NULL COMMENT 'id pompy', + `TST_PUP_SN_NO` varchar(128) DEFAULT NULL COMMENT 'sn fabryczny', + `TST_ENG_ID` int(11) DEFAULT NULL COMMENT 'id silnika', + `TST_ENG_SN_NO` varchar(128) DEFAULT NULL COMMENT 'sn fabryczny', + `TST_STAN_COLD` varchar(16) NOT NULL DEFAULT '0' COMMENT 'Stan izolacji zimny', + `TST_STAN_WARM` varchar(16) NOT NULL DEFAULT '0' COMMENT 'Stan izolacji ciepły', + `TST_WATER_TEMP_BEFORE` varchar(4) NOT NULL DEFAULT '0', + `TST_WATER_TEMP_AFTER` varchar(4) NOT NULL DEFAULT '0', + `TST_STATUS` varchar(4) NOT NULL DEFAULT '1' COMMENT '1 - udana; 0-nieudana', + `TST_AUDIT_CU` varchar(64) DEFAULT NULL COMMENT 'nazwa uzytkownika', + `TST_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`TST_ID`), + KEY `INX_PUP_ID` (`TST_PUP_ID`), + KEY `INX_ENG_ID` (`TST_ENG_ID`), + KEY `INX_TST_PUP_SN_ENG_SN_ID` (`TST_PUP_ID`,`TST_PUP_SN_NO`,`TST_ENG_SN_NO`,`TST_ID`), + KEY `INX_TST_PUP_SN_ID` (`TST_PUP_ID`,`TST_PUP_SN_NO`,`TST_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='Tabela z ogolnymi informacjami o probach'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_users_type` +-- + +DROP TABLE IF EXISTS `tst_users_type`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_users_type` ( + `TUT_ID` int(11) NOT NULL AUTO_INCREMENT, + `TUT_USR_ID` int(11) DEFAULT NULL, + `TUT_TYPE` varchar(4) NOT NULL DEFAULT '0' COMMENT '0-zwykly uzytkownik; 1-administrator', + `TUT_AUDIT_CU` varchar(64) DEFAULT NULL, + `TUT_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`TUT_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tst_xy_formula` +-- + +DROP TABLE IF EXISTS `tst_xy_formula`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `tst_xy_formula` ( + `PUF_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PUF_TST_ID` int(11) DEFAULT NULL, + `PUF_PUP_ID` int(11) DEFAULT NULL, + `PUF_PUP_NO` varchar(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `PUF_XY_FORMULA` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `PUF_A` varchar(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT 'A [x^3]', + `PUF_B` varchar(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT 'B [x^2]', + `PUF_C` varchar(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT 'C [x]', + `PUF_D` varchar(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT 'D', + `PUF_TYPE` varchar(8) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT 'H, ETA,P', + PRIMARY KEY (`PUF_ID`), + KEY `INX_TST_ID` (`PUF_TST_ID`), + KEY `INX_PUP_ID` (`PUF_PUP_ID`), + KEY `INX_PUP_NO` (`PUF_PUP_NO`) +) ENGINE=MyISAM AUTO_INCREMENT=1118506 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Temporary table structure for view `viw_mik_base_well_param` +-- + +DROP TABLE IF EXISTS `viw_mik_base_well_param`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_base_well_param`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_base_well_param` AS SELECT + 1 AS `ID`, + 1 AS `BARIERA`, + 1 AS `WELL`, + 1 AS `WELL_TYPE`, + 1 AS `Q_VAL`, + 1 AS `HDM_VAL`, + 1 AS `HSTM_VAL`, + 1 AS `HST0M_VAL`, + 1 AS `WELL_WORK_TIME`, + 1 AS `WELL_PUMPED_WATER`, + 1 AS `WELL_CONTROL`, + 1 AS `PUP_NAME`, + 1 AS `PUP_NO`, + 1 AS `SIL_NAME`, + 1 AS `SIL_NO`, + 1 AS `ONOFF_VAL` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_mik_piezometers` +-- + +DROP TABLE IF EXISTS `viw_mik_piezometers`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_piezometers`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_piezometers` AS SELECT + 1 AS `SOD_UJ`, + 1 AS `SRP_NAME`, + 1 AS `OHC_DL_GEOGR`, + 1 AS `OHC_SZER_GEOGR`, + 1 AS `OHC_RZEDNA_TEREN`, + 1 AS `OHC_RZEDNA_TERENU_ACT`, + 1 AS `OHC_RZEDNA_KRYZY`, + 1 AS `OHC_GLEB_OSTAT`, + 1 AS `HST`, + 1 AS `SOD_DESC`, + 1 AS `SOD_PLC` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_mik_proby` +-- + +DROP TABLE IF EXISTS `viw_mik_proby`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_proby`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_proby` AS SELECT + 1 AS `PROBA_ID`, + 1 AS `POMPA`, + 1 AS `NR_POMPA`, + 1 AS `SILNIK`, + 1 AS `NR_SILNIK`, + 1 AS `Q`, + 1 AS `H`, + 1 AS `P`, + 1 AS `ETA` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_mik_well_aggregates` +-- + +DROP TABLE IF EXISTS `viw_mik_well_aggregates`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_aggregates`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_well_aggregates` AS SELECT + 1 AS `SOD_UJ`, + 1 AS `WLL_NAME`, + 1 AS `PUP_NAME`, + 1 AS `PUP_NUMBER`, + 1 AS `ENG_NAME`, + 1 AS `ENG_NUMBER`, + 1 AS `SOD_DESC`, + 1 AS `SOD_PLC` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_mik_well_depth_mnt` +-- + +DROP TABLE IF EXISTS `viw_mik_well_depth_mnt`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_depth_mnt`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_well_depth_mnt` AS SELECT + 1 AS `DEV_ID`, + 1 AS `WLL_NAME`, + 1 AS `DEPTH_MNT`, + 1 AS `ID` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_mik_well_depth_wells` +-- + +DROP TABLE IF EXISTS `viw_mik_well_depth_wells`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_depth_wells`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_well_depth_wells` AS SELECT + 1 AS `DEV_ID`, + 1 AS `WLL_NAME`, + 1 AS `DEPTH_LS`, + 1 AS `ID` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_mik_well_energy` +-- + +DROP TABLE IF EXISTS `viw_mik_well_energy`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_energy`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_well_energy` AS SELECT + 1 AS `ID`, + 1 AS `WELL_NAME`, + 1 AS `VALUE`, + 1 AS `VALUE_STATUS`, + 1 AS `VALUE_DATE` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_mik_wells` +-- + +DROP TABLE IF EXISTS `viw_mik_wells`; +/*!50001 DROP VIEW IF EXISTS `viw_mik_wells`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_mik_wells` AS SELECT + 1 AS `SOD_UJ`, + 1 AS `WLL_NAME`, + 1 AS `OHC_DL_GEOGR`, + 1 AS `OHC_SZER_GEOGR`, + 1 AS `OHC_RZEDNA_TEREN`, + 1 AS `OHC_RZEDNA_TERENU_ACT`, + 1 AS `OHC_RZEDNA_KRYZY`, + 1 AS `OHC_GLEB_OSTAT`, + 1 AS `SOD_DESC`, + 1 AS `SOD_PLC`, + 1 AS `DR` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_obj_name_id` +-- + +DROP TABLE IF EXISTS `viw_obj_name_id`; +/*!50001 DROP VIEW IF EXISTS `viw_obj_name_id`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_obj_name_id` AS SELECT + 1 AS `DRS_ID`, + 1 AS `OB_ID`, + 1 AS `OB_NAME` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_pump_working_status` +-- + +DROP TABLE IF EXISTS `viw_pump_working_status`; +/*!50001 DROP VIEW IF EXISTS `viw_pump_working_status`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_pump_working_status` AS SELECT + 1 AS `DRD_ID`, + 1 AS `DRD_DRS_ID`, + 1 AS `DRD_RESOURCES_DETAIL`, + 1 AS `DRD_VALUE`, + 1 AS `DRD_DESCRIPTION`, + 1 AS `DRD_EXPORT_SEGAP`, + 1 AS `DRD_AUDIT_USR`, + 1 AS `DRD_AUDIT_DATE` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_spm_maxdrd_110` +-- + +DROP TABLE IF EXISTS `viw_spm_maxdrd_110`; +/*!50001 DROP VIEW IF EXISTS `viw_spm_maxdrd_110`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_spm_maxdrd_110` AS SELECT + 1 AS `DRS_ID`, + 1 AS `MAX_DRD_ID` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_spm_maxdrd_240` +-- + +DROP TABLE IF EXISTS `viw_spm_maxdrd_240`; +/*!50001 DROP VIEW IF EXISTS `viw_spm_maxdrd_240`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_spm_maxdrd_240` AS SELECT + 1 AS `DRS_ID`, + 1 AS `MAX_DRD_ID` */; +SET character_set_client = @saved_cs_client; + +-- +-- Temporary table structure for view `viw_wells_exchanged` +-- + +DROP TABLE IF EXISTS `viw_wells_exchanged`; +/*!50001 DROP VIEW IF EXISTS `viw_wells_exchanged`*/; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8mb4; +/*!50001 CREATE VIEW `viw_wells_exchanged` AS SELECT + 1 AS `EXN_DRS_ID`, + 1 AS `EXN_NAME`, + 1 AS `EXN_BARIERA`, + 1 AS `EXN_NO`, + 1 AS `EXN_PUMP_NAME`, + 1 AS `EXN_PUMP_NO`, + 1 AS `EXN_ENG_NAME`, + 1 AS `EXN_ENG_NO`, + 1 AS `EXN_DATE_FROM`, + 1 AS `EXN_DATE_TO` */; +SET character_set_client = @saved_cs_client; + +-- +-- Table structure for table `z_tmp_base_well_param` +-- + +DROP TABLE IF EXISTS `z_tmp_base_well_param`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tmp_base_well_param` ( + `ID` int(11) unsigned NOT NULL DEFAULT 0, + `BARIERA` varchar(32) DEFAULT NULL, + `WELL` varchar(255) DEFAULT NULL, + `WELL_TYPE` varchar(128) DEFAULT NULL, + `Q_VAL` double(11,3) DEFAULT NULL, + `HDM_VAL` varchar(128) DEFAULT NULL, + `HSTM_VAL` varchar(128) DEFAULT NULL, + `HST0M_VAL` varchar(128) DEFAULT NULL, + `WELL_WORK_TIME` varchar(128) DEFAULT NULL, + `WELL_PUMPED_WATER` varchar(128) DEFAULT NULL, + `WELL_CONTROL` varchar(6) DEFAULT NULL, + `PUP_NAME` varchar(128) DEFAULT NULL, + `PUP_NO` varchar(64) DEFAULT NULL, + `SIL_NAME` varchar(128) DEFAULT NULL, + `SIL_NO` varchar(64) DEFAULT NULL, + `ONOFF_VAL` varchar(8) DEFAULT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `z_tmp_piezometry` +-- + +DROP TABLE IF EXISTS `z_tmp_piezometry`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tmp_piezometry` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `Obiekt` varchar(16) DEFAULT NULL, + `Rurka` varchar(128) DEFAULT NULL, + `Piezometr` varchar(128) DEFAULT NULL, + `Uwagi` varchar(128) DEFAULT NULL, + `Glebokosc` varchar(128) DEFAULT NULL, + `Srednica_rurki` varchar(128) DEFAULT NULL, + `Zw_stat` varchar(128) DEFAULT NULL, + `Glebokosc_zab_sondy` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `INX_PIEZO` (`Piezometr`) +) ENGINE=MyISAM AUTO_INCREMENT=1699 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `z_tmp_protdata` +-- + +DROP TABLE IF EXISTS `z_tmp_protdata`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tmp_protdata` ( + `Id` int(11) NOT NULL AUTO_INCREMENT, + `param_01` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_02` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_03` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_04` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_05` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_06` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_07` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_08` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_09` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_10` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_11` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_12` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_13` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_14` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_15` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_16` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_17` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_18` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_19` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `is_loaded_segap` char(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '0', + PRIMARY KEY (`Id`) +) ENGINE=MyISAM AUTO_INCREMENT=9989 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `z_tmp_stpar` +-- + +DROP TABLE IF EXISTS `z_tmp_stpar`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tmp_stpar` ( + `Id` int(11) NOT NULL AUTO_INCREMENT, + `param_01` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_02` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_03` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_04` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_05` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_06` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `param_07` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL, + `is_loaded_segap` char(1) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '0', + PRIMARY KEY (`Id`), + KEY `INX_P_01` (`param_01`) +) ENGINE=MyISAM AUTO_INCREMENT=271130 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `z_tmp_tests_to_delete` +-- + +DROP TABLE IF EXISTS `z_tmp_tests_to_delete`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tmp_tests_to_delete` ( + `ID` int(11) unsigned NOT NULL DEFAULT 0, + `CNT` bigint(21) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `z_tmp_to_his_data` +-- + +DROP TABLE IF EXISTS `z_tmp_to_his_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tmp_to_his_data` ( + `TPM_DRS_ID` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`TPM_DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `z_tpm_segap_well_stan` +-- + +DROP TABLE IF EXISTS `z_tpm_segap_well_stan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tpm_segap_well_stan` ( + `N_UJ` varchar(128) DEFAULT '', + `N_WELL` varchar(128) DEFAULT '', + `N_ZS` double(19,2) DEFAULT NULL, + `N_ZAS` double(19,2) DEFAULT NULL, + `N_D` double(19,2) DEFAULT NULL, + `N_DR` double(19,2) DEFAULT NULL, + `N_ZP` double(19,2) DEFAULT NULL, + `N_PUP` varchar(128) DEFAULT '', + `N_PUP_NR` varchar(128) DEFAULT '', + `PUP_DRS_ID` bigint(11) unsigned DEFAULT NULL, + `N_SIL` varchar(128) DEFAULT '', + `N_SIL_NR` varchar(128) DEFAULT '', + `ENG_DRS_ID` bigint(11) unsigned DEFAULT NULL, + `N_DATA` varchar(128) DEFAULT '', + `N_DATA_ZAB` varchar(19) DEFAULT NULL, + `N_NAZWA` varchar(128) DEFAULT '', + `N_DEP` varchar(128) DEFAULT '' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `z_tpm_stacja_engine_stan` +-- + +DROP TABLE IF EXISTS `z_tpm_stacja_engine_stan`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `z_tpm_stacja_engine_stan` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `stp_stamot_typ_m` varchar(128) DEFAULT '', + `stp_stamot_nr_m` varchar(128) DEFAULT '', + `stp_stamot_u` varchar(128) DEFAULT '', + `DRS_ID` int(11) unsigned DEFAULT 0, + `ENG_ID` int(11) unsigned DEFAULT 0, + `ENG_NAME` varchar(128) DEFAULT '', + `DRS_SN_NUMBER` varchar(128) DEFAULT NULL, + `data_zakup` varchar(128) DEFAULT '', + `data_kasac` varchar(128) DEFAULT '', + `przycz_kasac` int(4) DEFAULT NULL, + `DEV_STATUS` int(3) DEFAULT NULL, + `ENG_DEPARTMENT` varchar(11) DEFAULT NULL, + `DRS_AUDIT_USR` varchar(64) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5869 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping events for database 'softspm' +-- +/*!50106 SET @save_time_zone= @@TIME_ZONE */ ; +/*!50106 DROP EVENT IF EXISTS `clear_rep_object_departments` */; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb3 */ ;; +/*!50003 SET character_set_results = utf8mb3 */ ;; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = '' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`127.0.0.1`*/ /*!50106 EVENT `clear_rep_object_departments` ON SCHEDULE EVERY 1 HOUR STARTS '2016-08-17 11:23:29' ON COMPLETION NOT PRESERVE ENABLE DO begin + +truncate table rep_object_departments; +insert into rep_object_departments +select distinct DRS_ID,WLL_ID,WLL_NAME,RWL_PUP_DRS_ID,(select PUP_ID from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) PUP_ID,(select PUP_NAME from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_NAME,(select PUP_Q_N from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_Q_N,(select DRS_SN_NUMBER from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_NO,RWL_ENG_DRS_ID,(select ENG_ID from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) ENG_ID,(select ENG_NAME from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_NAME,(select ENG_POWER from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_POWER,(select DRS_SN_NUMBER from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_NO,WLL_SYS_TYPE SOD_DESC,DRS_DEPARTMENT SOD_PLC,OHC_UJ SOD_UJ from seg_wells inner join seg_object_hole_cards on WLL_NAME=OHC_NAME left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 where DRS_ID IS not null; + +truncate table rep_piezo_departments; +insert into rep_piezo_departments +select distinct DRS_ID,SRP_ID,SRP_NAME,DRS_SN_NUMBER,(select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=110 and DRD_DRS_ID=DRS_ID) LIMIT 1) DEPTH,(select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=100 and DRD_DRS_ID=DRS_ID) LIMIT 1) DIAMETER,DRS_STATUS_DIC_ID,OHC_UJ SOD_UJ,SRP_SYS_TYPE SOD_DESC,DRS_DEPARTMENT SOD_PLC from seg_reservoirs_piezometers inner join seg_dev_resources on SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=SRP_TYPE_DIC_ID and SRP_TYPE_DIC_ID=601 left join seg_object_hole_cards on SRP_NAME=OHC_NAME where DRS_ID is not null and DRS_STATUS_DIC_ID=3; + +truncate table rep_object_departments_orders; +insert into rep_object_departments_orders +select TB1.DRS_ID,TB1.WLL_ID,TB1.WLL_NAME,TB1.PUP_ID,TB2.WLE_PUMP_NAME,TB2.WLE_PUMP_NO,TB1.ENG_ID,TB2.WLE_ENG_NAME,TB2.WLE_ENG_NO,TB1.SOD_UJ,SOD_PLC from rep_object_departments TB1,(select A.* from seg_wells_exchanged A,(select WLE_WLL_ID,max(WLE_NR_EXCHANGE) NR_EXCHANGE from seg_wells_exchanged group by WLE_WLL_ID) B where A.WLE_WLL_ID=B.WLE_WLL_ID and WLE_NR_EXCHANGE=NR_EXCHANGE) TB2 where TB1.WLL_ID=TB2.WLE_WLL_ID order by TB1.WLL_NAME; + + + +INSERT INTO sys_job_logs SET SJL_JOB_NAME='clear_rep_object_departments',SJL_FINISH_DATE=now(),SJL_AUDIT_CD=now(); + +end */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; +/*!50106 DROP EVENT IF EXISTS `ev_rep_zrzut_wody_daily` */;; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb3 */ ;; +/*!50003 SET character_set_results = utf8mb3 */ ;; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev_rep_zrzut_wody_daily` ON SCHEDULE EVERY 1 DAY STARTS '2026-03-03 10:40:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN + + CALL rep_zrzut_wody_insert('P/Szczerców', 'EVENT_AUTO', NOW()); + CALL rep_zrzut_wody_insert('P/Bełchatów', 'EVENT_AUTO', NOW()); + CALL rep_zrzut_wody_insert('Dębina', 'EVENT_AUTO', NOW()); + +END */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; +/*!50106 DROP EVENT IF EXISTS `move_ToHistoricalData` */;; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb3 */ ;; +/*!50003 SET character_set_results = utf8mb3 */ ;; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = '' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `move_ToHistoricalData` ON SCHEDULE EVERY 1 DAY STARTS '2017-02-03 05:04:00' ON COMPLETION NOT PRESERVE DISABLE DO begin + +call move_ToHistoricalData(62); +INSERT INTO sys_job_logs SET SJL_JOB_NAME='move_ToHistoricalData(3)',SJL_FINISH_DATE=now(),SJL_AUDIT_CD=now(); + +end */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; +/*!50106 DROP EVENT IF EXISTS `onDemandDataForRep002` */;; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb3 */ ;; +/*!50003 SET character_set_results = utf8mb3 */ ;; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = '' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`127.0.0.1`*/ /*!50106 EVENT `onDemandDataForRep002` ON SCHEDULE EVERY 1 HOUR STARTS '2017-10-10 11:03:00' ON COMPLETION NOT PRESERVE ENABLE DO begin + +declare outIle int(3); +select count(*) into outIle from softspm_rep.rep_002_on_demand WHERE SOD_FINISH_DATE is null; + + IF outIle>0 then + + call prepareDataForRep002(); + + truncate table softspm_rep.syndis_quality_data; + insert into softspm_rep.syndis_quality_data select * from rep_soap_syndis_quality_data where SQD_FLG_Q<>'CORRECT' or SQD_FLG_P1<>'CORRECT' or SQD_FLG_P2<>'CORRECT' or SQD_FLG_HD<>'CORRECT' or SQD_FLG_I<>'CORRECT' or SQD_FLG_U<>'CORRECT' or SQD_FLG_PE<>'CORRECT'; + + + + truncate table softspm_rep.rep_002_avg_efficiency; + insert into softspm_rep.rep_002_avg_efficiency select null,AVG_Q_VAL,AVG_DRS_ID,AVG_DATE from softspm_rep.rep_002_avg_efficiency_prev_years; + insert into softspm_rep.rep_002_avg_efficiency select null,AVG(RHD_Q_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday_his where RHD_Q_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + insert into softspm_rep.rep_002_avg_efficiency select null,AVG(RHD_Q_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday where RHD_Q_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + + truncate table softspm_rep.rep_002_avg_mirror; + insert into softspm_rep.rep_002_avg_mirror select null,MIR_HST_VAL,MIR_DRS_ID,MIR_DATE from softspm_rep.rep_002_avg_mirror_prev_years; + insert into softspm_rep.rep_002_avg_mirror select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=212; + insert into softspm_rep.rep_002_avg_mirror select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212; + + truncate table softspm_rep.rep_002_avg_chlorine; + insert into softspm_rep.rep_002_avg_chlorine select null,CLO_CLO_VAL,CLO_DRS_ID,CLO_DATE from softspm_rep.rep_002_avg_chlorine_prev_years; + insert into softspm_rep.rep_002_avg_chlorine select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=255; + insert into softspm_rep.rep_002_avg_chlorine select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=255; + + truncate table softspm_rep.rep_002_avg_dyn_mirror; + insert into softspm_rep.rep_002_avg_dyn_mirror select null,DMM_HD_VAL,DMM_DRS_ID,DMM_DATE from softspm_rep.rep_002_avg_dyn_mirror_prev_years; + insert into softspm_rep.rep_002_avg_dyn_mirror select null,MAX(RHD_HD_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday_his where RHD_HD_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + insert into softspm_rep.rep_002_avg_dyn_mirror select null,MAX(RHD_HD_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday where RHD_HD_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + + truncate table softspm_rep.rep_002_avg_water_temp; + insert into softspm_rep.rep_002_avg_water_temp select null,WTP_WT_VAL,WTP_DRS_ID,WTP_DATE from softspm_rep.rep_002_avg_water_temp_prev_years; + insert into softspm_rep.rep_002_avg_water_temp select null,MAX(RHD_WTEMP_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday_his where RHD_WTEMP_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + insert into softspm_rep.rep_002_avg_water_temp select null,MAX(RHD_WTEMP_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday where RHD_WTEMP_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + + truncate table softspm_rep.rep_002_avg_energy; + insert into softspm_rep.rep_002_avg_energy select null,UEC_ENG_VAL,UEC_DRS_ID,UEC_DATE from softspm_rep.rep_002_avg_energy_prev_years; + insert into softspm_rep.rep_002_avg_energy select null,max(DRD_VALUE),DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_VALUE>0 and DRD_RESOURCES_DETAIL=721; + insert into softspm_rep.rep_002_avg_energy select null,max(DRD_VALUE),DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_VALUE>0 and DRD_RESOURCES_DETAIL=721; + + + UPDATE softspm_rep.rep_002_on_demand SET SOD_FINISH_DATE=now() WHERE SOD_FINISH_DATE is null; + INSERT INTO sys_job_logs SET SJL_JOB_NAME='reloadDataForRep002',SJL_FINISH_DATE=now(),SJL_AUDIT_CD=now(); + + END IF; + +end */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; +/*!50106 DROP EVENT IF EXISTS `prepareBaseWellParam` */;; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb3 */ ;; +/*!50003 SET character_set_results = utf8mb3 */ ;; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = '' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `prepareBaseWellParam` ON SCHEDULE EVERY 20 MINUTE STARTS '2016-09-01 14:22:00' ON COMPLETION NOT PRESERVE DISABLE DO begin + +call createBaseWellParam(); + +INSERT INTO sys_job_logs SET SJL_JOB_NAME='createBaseWellParam',SJL_FINISH_DATE=now(),SJL_AUDIT_CD=now(); + +end */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; +/*!50106 DROP EVENT IF EXISTS `prepareBaseWellParam_NEW` */;; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb3 */ ;; +/*!50003 SET character_set_results = utf8mb3 */ ;; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `prepareBaseWellParam_NEW` ON SCHEDULE EVERY 4 HOUR STARTS '2021-05-25 20:59:05' ON COMPLETION NOT PRESERVE ENABLE DO begin + +call createBaseWellParam(); + +INSERT INTO sys_job_logs SET SJL_JOB_NAME='prepareBaseWellParam_NEW',SJL_FINISH_DATE=now(),SJL_AUDIT_CD=now(); + +end */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; +/*!50106 DROP EVENT IF EXISTS `reloadDataForRep002` */;; +DELIMITER ;; +/*!50003 SET @saved_cs_client = @@character_set_client */ ;; +/*!50003 SET @saved_cs_results = @@character_set_results */ ;; +/*!50003 SET @saved_col_connection = @@collation_connection */ ;; +/*!50003 SET character_set_client = utf8mb3 */ ;; +/*!50003 SET character_set_results = utf8mb3 */ ;; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ;; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ;; +/*!50003 SET sql_mode = '' */ ;; +/*!50003 SET @saved_time_zone = @@time_zone */ ;; +/*!50003 SET time_zone = 'SYSTEM' */ ;; +/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`127.0.0.1`*/ /*!50106 EVENT `reloadDataForRep002` ON SCHEDULE EVERY 1 DAY STARTS '2016-11-07 00:02:00' ON COMPLETION NOT PRESERVE ENABLE DO begin + +delete from seg_wells_manual_work_syndis where SLA_DATETIME>now(); +delete from seg_wells_manual_work_syndis where SLA_DATETIME<'2016-10-01 00:00:00'; + +UPDATE rep_his_data_everyday SET RHD_SPM_WT=NULL where (RHD_WORK_TIME_VAL=0 or RHD_VM3_VAL=0 or RHD_WORK_TIME_VAL is null or RHD_VM3_VAL is null) and RHD_DATE>=ADDDATE(now(), INTERVAL -2 DAY); + +call prepareDataForRep002(); + + +truncate table softspm_rep.syndis_quality_data; +insert into softspm_rep.syndis_quality_data select * from rep_soap_syndis_quality_data where SQD_FLG_Q<>'CORRECT' or SQD_FLG_P1<>'CORRECT' or SQD_FLG_P2<>'CORRECT' or SQD_FLG_HD<>'CORRECT' or SQD_FLG_I<>'CORRECT' or SQD_FLG_U<>'CORRECT' or SQD_FLG_PE<>'CORRECT'; + + + +truncate table softspm_rep.rep_002_avg_efficiency; + +insert into softspm_rep.rep_002_avg_efficiency select null,AVG_Q_VAL,AVG_DRS_ID,AVG_DATE from softspm_rep.rep_002_avg_efficiency_prev_years; +insert into softspm_rep.rep_002_avg_efficiency select null,AVG(RHD_Q_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday_his where RHD_Q_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); +insert into softspm_rep.rep_002_avg_efficiency select null,AVG(RHD_Q_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday where RHD_Q_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + + + +truncate table softspm_rep.rep_002_avg_mirror; + +insert into softspm_rep.rep_002_avg_mirror select null,MIR_HST_VAL,MIR_DRS_ID,MIR_DATE from softspm_rep.rep_002_avg_mirror_prev_years; +insert into softspm_rep.rep_002_avg_mirror select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=212; +insert into softspm_rep.rep_002_avg_mirror select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212; + + +truncate table softspm_rep.rep_002_avg_chlorine; + +insert into softspm_rep.rep_002_avg_chlorine select null,CLO_CLO_VAL,CLO_DRS_ID,CLO_DATE from softspm_rep.rep_002_avg_chlorine_prev_years; +insert into softspm_rep.rep_002_avg_chlorine select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=255; +insert into softspm_rep.rep_002_avg_chlorine select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=255; + + +truncate table softspm_rep.rep_002_avg_dyn_mirror; + +insert into softspm_rep.rep_002_avg_dyn_mirror select null,DMM_HD_VAL,DMM_DRS_ID,DMM_DATE from softspm_rep.rep_002_avg_dyn_mirror_prev_years; +insert into softspm_rep.rep_002_avg_dyn_mirror select null,MAX(RHD_HD_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday_his where RHD_HD_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); +insert into softspm_rep.rep_002_avg_dyn_mirror select null,MAX(RHD_HD_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday where RHD_HD_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + + +truncate table softspm_rep.rep_002_avg_water_temp; + +insert into softspm_rep.rep_002_avg_water_temp select null,WTP_WT_VAL,WTP_DRS_ID,WTP_DATE from softspm_rep.rep_002_avg_water_temp_prev_years; +insert into softspm_rep.rep_002_avg_water_temp select null,MAX(RHD_WTEMP_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday_his where RHD_WTEMP_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); +insert into softspm_rep.rep_002_avg_water_temp select null,MAX(RHD_WTEMP_VAL),RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10) from rep_his_data_everyday where RHD_WTEMP_VAL>0 group by RHD_DRS_ID,SUBSTRING(RHD_DATE,1,10); + + +truncate table softspm_rep.rep_002_avg_energy; + +insert into softspm_rep.rep_002_avg_energy select null,UEC_ENG_VAL,UEC_DRS_ID,UEC_DATE from softspm_rep.rep_002_avg_energy_prev_years; +insert into softspm_rep.rep_002_avg_energy select null,max(DRD_VALUE),DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_VALUE>0 and DRD_RESOURCES_DETAIL=721; +insert into softspm_rep.rep_002_avg_energy select null,max(DRD_VALUE),DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_VALUE>0 and DRD_RESOURCES_DETAIL=721; + + + +insert into softspm_rep.rep_well_counter +select +null, +(select count(WLL_ID) from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_STATUS_DIC_ID=3 and WLL_CAT_DIC_ID=19) SPM_OPT, +(select count(WLL_ID) from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_STATUS_DIC_ID=3 and WLL_CAT_DIC_ID=18) SPM_BASE, +(select count(WLL_ID) from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_STATUS_DIC_ID=3 and WLL_CAT_DIC_ID=20) SPM_INNE, +(select count(WLL_ID) from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_STATUS_DIC_ID=3) TOTAL, +now(); + + + + +insert into softspm_his.rep_his_data_everyday_his +select * from rep_his_data_everyday where RHD_DATE<ADDDATE(now(), INTERVAL -181 DAY); + +insert into rep_his_data_everyday_his +select * from rep_his_data_everyday where RHD_DATE<ADDDATE(now(), INTERVAL -181 DAY); + +delete from rep_his_data_everyday where RHD_DATE<ADDDATE(now(), INTERVAL -181 DAY); +delete from rep_his_data_everyday_his where RHD_DATE<ADDDATE(now(), INTERVAL -390 DAY); + + + +INSERT INTO sys_job_logs SET SJL_JOB_NAME='reloadDataForRep002',SJL_FINISH_DATE=now(),SJL_AUDIT_CD=now(); + +end */ ;; +/*!50003 SET time_zone = @saved_time_zone */ ;; +/*!50003 SET sql_mode = @saved_sql_mode */ ;; +/*!50003 SET character_set_client = @saved_cs_client */ ;; +/*!50003 SET character_set_results = @saved_cs_results */ ;; +/*!50003 SET collation_connection = @saved_col_connection */ ;; +DELIMITER ; +/*!50106 SET TIME_ZONE= @save_time_zone */ ; + +-- +-- Dumping routines for database 'softspm' +-- +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getActRzedna` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getActRzedna`(devID int) RETURNS varchar(64) CHARSET utf8mb3 COLLATE utf8mb3_general_ci +begin +declare outValue varchar(64) default null; + + select OHH_RZEDNA into outValue from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=devID and LENGTH(OHH_RZEDNA)>0) limit 1; + + return outValue; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getGlobalPumpedWaterInDate` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getGlobalPumpedWaterInDate`(devID int, inDate datetime) RETURNS float(9,2) +begin +declare outValue float(9,2) default 0; +DECLARE outDate datetime DEFAULT null; +DECLARE outQval float(9,2) DEFAULT 0; +DECLARE outQvalBefore float(9,2) DEFAULT 0; + +DECLARE fnc_Last_STAT varchar(4) DEFAULT 'OFF'; +DECLARE fnc_WaterCouner float(9,2) DEFAULT 0; +DECLARE fnc_TIME_BEFORE int(11) DEFAULT 0; +DECLARE fnc_TIME_COUNT int(11) DEFAULT 0; +DECLARE fnc_COUNTER int(11) DEFAULT 0; + +DECLARE done int DEFAULT FALSE; +DECLARE cur1 CURSOR FOR select RHD_DATE,RHD_Q_VAL from rep_his_data_everyday where RHD_DRS_ID=devID and RHD_Q_VAL>0 and RHD_DATE>=(select min(SLA_DATETIME) from seg_wells_manual_work_syndis where SLA_DRS_ID=devID order by SLA_DATETIME) and RHD_DATE<=inDate order by RHD_DATE; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + +set fnc_WaterCouner=0; + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO outDate, outQval; + IF done THEN + LEAVE read_loop; + END IF; + + + if fnc_COUNTER>0 then + + if outDate < inDate then + set fnc_TIME_COUNT = getGlobalWorkingTimeInDate(devID, outDate); + else + set fnc_TIME_COUNT = getGlobalWorkingTimeInDate(devID, inDate); + end if; + + if outQval > 0 then + + set fnc_WaterCouner = fnc_WaterCouner + (outQvalBefore * ((fnc_TIME_COUNT/3600) - (fnc_TIME_BEFORE/3600))); + set fnc_TIME_BEFORE = fnc_TIME_COUNT; + + end if; + + end if; + + + set fnc_COUNTER = fnc_COUNTER+1; + set outQvalBefore = outQval; + + END LOOP; + + if fnc_TIME_BEFORE < getGlobalWorkingTimeInDate(devID, inDate) then + + set fnc_WaterCouner = fnc_WaterCouner + (outQvalBefore * ((getGlobalWorkingTimeInDate(devID, inDate)/3600) - (fnc_TIME_BEFORE/3600))); + + end if; + + return fnc_WaterCouner; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getGlobalWorkingTimeInDate` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getGlobalWorkingTimeInDate`(devID int, inDate datetime) RETURNS int(11) +begin +declare outValue int(11) default 0; +DECLARE out_OnOff varchar(4) DEFAULT 'OFF'; +DECLARE out_loopSec int(11) DEFAULT 0; + +DECLARE fnc_Last_STAT varchar(4) DEFAULT 'OFF'; + +DECLARE fnc_TPM_ON int(11) DEFAULT 0; +DECLARE fnc_TPM_OFF int(11) DEFAULT 0; +DECLARE fnc_TIME_COUNT int(11) DEFAULT 0; + +DECLARE done int DEFAULT FALSE; +DECLARE cur1 CURSOR FOR select SLA_WORK_STATUS,UNIX_TIMESTAMP(SLA_DATETIME) from seg_wells_manual_work_syndis where SLA_DRS_ID=devID and SLA_DATETIME<=inDate order by SLA_DATETIME; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_OnOff, out_loopSec; + IF done THEN + LEAVE read_loop; + END IF; + + + if fnc_Last_STAT<>out_OnOff then + + if out_OnOff='ON' then + set fnc_TPM_ON = out_loopSec; + elseif out_OnOff='OFF' then + set fnc_TPM_OFF = out_loopSec; + set fnc_TIME_COUNT = fnc_TIME_COUNT + (fnc_TPM_OFF - fnc_TPM_ON); + end if; + + end if; + + + set fnc_Last_STAT = out_OnOff; + + END LOOP; + + + if fnc_Last_STAT='ON' then + set fnc_TPM_OFF = UNIX_TIMESTAMP(inDate); + set fnc_TIME_COUNT = fnc_TIME_COUNT + (fnc_TPM_OFF - fnc_TPM_ON); + end if; + + return fnc_TIME_COUNT; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getLastMeasureDate` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getLastMeasureDate`(dicID int, devID int) RETURNS datetime +begin +declare outDate datetime default null; + + select max(`DRD_AUDIT_DATE`) into outDate from seg_dev_resources_det where DRD_RESOURCES_DETAIL=dicID and DRD_DRS_ID=devID limit 1; + + return outDate; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getLastValue` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getLastValue`(dicID int, devID int) RETURNS varchar(64) CHARSET utf8mb3 COLLATE utf8mb3_general_ci +begin +declare outValue varchar(64) default null; + + select DRD_VALUE into outValue from seg_dev_resources_det where DRD_RESOURCES_DETAIL=dicID and DRD_DRS_ID=devID and DRD_AUDIT_DATE=(select max(`DRD_AUDIT_DATE`) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=dicID and DRD_DRS_ID=devID) order by DRD_ID desc limit 1; + + return outValue; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getValueInDate` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getValueInDate`(dicID int, devID int, inDate datetime) RETURNS varchar(64) CHARSET utf8mb3 COLLATE utf8mb3_general_ci +begin +declare outValue varchar(64) default null; + + select DRD_VALUE into outValue from seg_dev_resources_det where DRD_RESOURCES_DETAIL=dicID and DRD_DRS_ID=devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=dicID and DRD_DRS_ID=devID and DRD_AUDIT_DATE<=inDate) order by DRD_ID desc limit 1; + + return outValue; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getValueInDate_his` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getValueInDate_his`(dicID int, devID int, inDate datetime) RETURNS varchar(64) CHARSET utf8mb3 COLLATE utf8mb3_general_ci +begin +declare outValue varchar(64) default null; + + select DRD_VALUE into outValue from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=dicID and DRD_DRS_ID=devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=dicID and DRD_DRS_ID=devID and DRD_AUDIT_DATE<=inDate) order by DRD_ID desc limit 1; + + return outValue; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getWellPumpedWaterInDate` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getWellPumpedWaterInDate`(devID int, inDate datetime) RETURNS float(9,2) +begin +declare outValue float(9,2) default 0; +DECLARE outDate datetime DEFAULT null; +DECLARE outQval float(9,2) DEFAULT 0; +DECLARE outQvalBefore float(9,2) DEFAULT 0; + +DECLARE fnc_Last_STAT varchar(4) DEFAULT 'OFF'; +DECLARE fnc_WaterCouner float(9,2) DEFAULT 0; +DECLARE fnc_TIME_BEFORE int(11) DEFAULT 0; +DECLARE fnc_TIME_COUNT int(11) DEFAULT 0; +DECLARE fnc_COUNTER int(11) DEFAULT 0; + +DECLARE done int DEFAULT FALSE; +DECLARE cur1 CURSOR FOR select RHD_DATE,RHD_Q_VAL from rep_his_data_everyday where RHD_DRS_ID=devID and RHD_Q_VAL>0 and RHD_DATE>=(select min(WMS_DATETIME) from seg_wells_manual_work where WMS_DRS_ID=devID order by WMS_DATETIME) and RHD_DATE<=inDate order by RHD_DATE; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + +set fnc_WaterCouner=0; + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO outDate, outQval; + IF done THEN + LEAVE read_loop; + END IF; + + + if fnc_COUNTER>0 then + + if outDate < inDate then + set fnc_TIME_COUNT = getWellWorkingTimeInDate(devID, outDate); + else + set fnc_TIME_COUNT = getWellWorkingTimeInDate(devID, inDate); + end if; + + if outQval > 0 then + + set fnc_WaterCouner = fnc_WaterCouner + (outQvalBefore * ((fnc_TIME_COUNT/3600) - (fnc_TIME_BEFORE/3600))); + set fnc_TIME_BEFORE = fnc_TIME_COUNT; + + end if; + + end if; + + + set fnc_COUNTER = fnc_COUNTER+1; + set outQvalBefore = outQval; + + END LOOP; + + if fnc_TIME_BEFORE < getWellWorkingTimeInDate(devID, inDate) then + + set fnc_WaterCouner = fnc_WaterCouner + (outQvalBefore * ((getWellWorkingTimeInDate(devID, inDate)/3600) - (fnc_TIME_BEFORE/3600))); + + end if; + + return fnc_WaterCouner; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getWellStatusOnOff` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getWellStatusOnOff`(devID int, inDate datetime) RETURNS varchar(64) CHARSET utf8mb3 COLLATE utf8mb3_general_ci +begin +declare outValue varchar(64) default null; + + select WST_STATUS_VAL into outValue from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=devID and WST_DATE<=inDate); + + if outValue is null then + set outValue='OFF'; + end if; + + return outValue; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP FUNCTION IF EXISTS `getWellWorkingTimeInDate` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` FUNCTION `getWellWorkingTimeInDate`(devID int, inDate datetime) RETURNS int(11) +begin +declare outValue int(11) default 0; +DECLARE out_OnOff varchar(4) DEFAULT 'OFF'; +DECLARE out_loopSec int(11) DEFAULT 0; + +DECLARE fnc_Last_STAT varchar(4) DEFAULT 'OFF'; + +DECLARE fnc_TPM_ON int(11) DEFAULT 0; +DECLARE fnc_TPM_OFF int(11) DEFAULT 0; +DECLARE fnc_TIME_COUNT int(11) DEFAULT 0; + +DECLARE done int DEFAULT FALSE; +DECLARE cur1 CURSOR FOR select WMS_WORK_STATUS,UNIX_TIMESTAMP(WMS_DATETIME) from seg_wells_manual_work where WMS_DRS_ID=devID and WMS_DATETIME<=inDate order by WMS_DATETIME; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_OnOff, out_loopSec; + IF done THEN + LEAVE read_loop; + END IF; + + + if fnc_Last_STAT<>out_OnOff then + + if out_OnOff='ON' then + set fnc_TPM_ON = out_loopSec; + elseif out_OnOff='OFF' then + set fnc_TPM_OFF = out_loopSec; + set fnc_TIME_COUNT = fnc_TIME_COUNT + (fnc_TPM_OFF - fnc_TPM_ON); + end if; + + end if; + + + set fnc_Last_STAT = out_OnOff; + + END LOOP; + + + if fnc_Last_STAT='ON' then + set fnc_TPM_OFF = UNIX_TIMESTAMP(inDate); + set fnc_TIME_COUNT = fnc_TIME_COUNT + (fnc_TPM_OFF - fnc_TPM_ON); + end if; + + return fnc_TIME_COUNT; +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `createBaseWellParam` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `createBaseWellParam`() +BEGIN + +drop temporary table if EXISTS z_tmp_base_well_param_01; +drop temporary table if EXISTS z_tmp_base_well_param_02; +drop temporary table if EXISTS z_tmp_base_well_param_03; +drop temporary table if EXISTS z_tmp_base_well_param_04; +drop temporary table if EXISTS z_tmp_base_well_param_05; +drop temporary table if EXISTS z_tmp_base_well_param_06; +drop temporary table if EXISTS z_tmp_base_well_param_07; +drop temporary table if EXISTS z_tmp_base_well_param_08; + + +create temporary table z_tmp_base_well_param_01 +select max(RHD_ID) RID from rep_his_data_everyday group by RHD_DRS_ID; +ALTER TABLE z_tmp_base_well_param_01 ADD PRIMARY KEY (RID); + +create temporary table z_tmp_base_well_param_02 +select * from rep_his_data_everyday where RHD_ID in (select RID from z_tmp_base_well_param_01); + +create temporary table z_tmp_base_well_param_03 +select max(WST_ID) WID from softspm_rep.rep_002_avg_pump_working group by WST_DRS_ID; +ALTER TABLE z_tmp_base_well_param_03 ADD PRIMARY KEY (WID); + +create temporary table z_tmp_base_well_param_04 +select * from softspm_rep.rep_002_avg_pump_working where WST_ID in (select WID from z_tmp_base_well_param_03); + +create temporary table z_tmp_base_well_param_05 +select max(WLE_ID) EID from seg_wells_exchanged,seg_well_pump_eng_rel where RWL_WLL_ID=WLE_WLL_ID group by WLE_WLL_ID; +ALTER TABLE z_tmp_base_well_param_05 ADD PRIMARY KEY (EID); + +create temporary table z_tmp_base_well_param_06 +select DRS_ID WLE_DRS_ID,WLE_NR_EXCHANGE,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO from seg_wells_exchanged,seg_dev_resources where DRS_DEV_ID=WLE_WLL_ID and DRS_DEV_TYPE=12 and WLE_ID in (select EID from z_tmp_base_well_param_05); +ALTER TABLE z_tmp_base_well_param_06 ADD PRIMARY KEY (WLE_DRS_ID); + + +truncate table z_tmp_base_well_param; +insert into z_tmp_base_well_param +select +DRS_ID ID, +WLL_BARIERA BARIERA, +WLL_NAME WELL, +WLL_SYS_TYPE WELL_TYPE, +ROUND(RHD_Q_VAL/60,3) Q_VAL, +RHD_HD_VAL HDM_VAL, +RHD_HST_VAL HSTM_VAL, +(select RHD_HST0_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_HST0_VAL>0 and RHD_DRS_ID=DRS_ID)) HST0M_VAL, +RHD_WORK_TIME_VAL WELL_WORK_TIME, +RHD_VM3_VAL WELL_PUMPED_WATER, +(case + when WLL_CAT_DIC_ID=18 then 'AUTO' + when WLL_CAT_DIC_ID=19 then 'AUTO' + else 'MANUAL' +end) WELL_CONTROL, +WLE_PUMP_NAME PUP_NAME, +WLE_PUMP_NO PUP_NO, +WLE_ENG_NAME SIL_NAME, +WLE_ENG_NO SIL_NO, +WST_STATUS_VAL ONOFF_VAL +from seg_wells,seg_dev_resources +left join z_tmp_base_well_param_02 on DRS_ID=RHD_DRS_ID +left join z_tmp_base_well_param_04 on DRS_ID=WST_DRS_ID +left join z_tmp_base_well_param_06 on DRS_ID=WLE_DRS_ID +where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12; + + +create temporary table z_tmp_base_well_param_07 +select max(MIR_ID) MRID from softspm_rep.rep_002_avg_mirror where MIR_DRS_ID in (select ID from z_tmp_base_well_param where HST0M_VAL is null and PUP_NAME is not null) GROUP by MIR_DRS_ID; +ALTER TABLE z_tmp_base_well_param_07 ADD PRIMARY KEY (MRID); + + +create temporary table z_tmp_base_well_param_08 +select * from softspm_rep.rep_002_avg_mirror where MIR_ID in (select MRID from z_tmp_base_well_param_07); +ALTER TABLE z_tmp_base_well_param_08 ADD PRIMARY KEY (MIR_DRS_ID); +update z_tmp_base_well_param,z_tmp_base_well_param_08 set HST0M_VAL=MIR_HST_VAL where ID=MIR_DRS_ID; + + + +drop temporary table if EXISTS z_tmp_base_well_param_01; +drop temporary table if EXISTS z_tmp_base_well_param_02; +drop temporary table if EXISTS z_tmp_base_well_param_03; +drop temporary table if EXISTS z_tmp_base_well_param_04; +drop temporary table if EXISTS z_tmp_base_well_param_05; +drop temporary table if EXISTS z_tmp_base_well_param_06; +drop temporary table if EXISTS z_tmp_base_well_param_07; +drop temporary table if EXISTS z_tmp_base_well_param_08; + + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `data_todelete` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `data_todelete`() +BEGIN +DECLARE done INT DEFAULT FALSE; +DECLARE out_devID int(11); +DECLARE out_date datetime; + +DECLARE cur1 CURSOR FOR select DTD_DRS_ID,DTD_DATE from rep_his_data_todelete; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID, out_date; + IF done THEN + LEAVE read_loop; + END IF; + + DELETE FROM seg_wells_manual_work WHERE WMS_DRS_ID=out_devID; + DELETE FROM rep_his_data_everyday WHERE RHD_DRS_ID=out_devID and RHD_DATE>out_date; + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL in (200,205,210,215,220,225,230,245,401,402,730,270,275,280,290,260,721,265) and DRD_DRS_ID=out_devID and DRD_AUDIT_DATE>out_date; + + END LOOP; + +truncate table rep_his_data_todelete; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `insert2_his_data` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `insert2_his_data`(inDate datetime, inDevID int(11)) +BEGIN + +DECLARE out_DATE,out_QM3H,out_HDM,out_HSTM,out_P1M,out_P2M,out_POWER_EKW,out_ELECTRIC_CURRENT,out_VOLTAGE,out_COSINUS_FI,out_WORKING_TIME,out_PP,out_HH,out_DGN varchar(32); + +select DRD_AUDIT_DATE, +max(case WHEN DRD_RESOURCES_DETAIL=200 then DRD_VALUE end) QM3H, +max(case WHEN DRD_RESOURCES_DETAIL=205 then DRD_VALUE end) HDM, +max(case WHEN DRD_RESOURCES_DETAIL=210 then DRD_VALUE end) HSTM, +max(case WHEN DRD_RESOURCES_DETAIL=215 then DRD_VALUE end) P1M, +max(case WHEN DRD_RESOURCES_DETAIL=220 then DRD_VALUE end) P2M, +max(case WHEN DRD_RESOURCES_DETAIL=260 then DRD_VALUE end) POWER_EKW, +max(case WHEN DRD_RESOURCES_DETAIL=270 then DRD_VALUE end) ELECTRIC_CURRENT, +max(case WHEN DRD_RESOURCES_DETAIL=275 then DRD_VALUE end) VOLTAGE, +max(case WHEN DRD_RESOURCES_DETAIL=280 then DRD_VALUE end) COSINUS_FI, +max(case WHEN DRD_RESOURCES_DETAIL=290 then DRD_VALUE end) WORKING_TIME, +max(case WHEN DRD_RESOURCES_DETAIL=401 then DRD_VALUE end) PP, +max(case WHEN DRD_RESOURCES_DETAIL=402 then DRD_VALUE end) HH, +max(case WHEN DRD_RESOURCES_DETAIL=708 then DRD_VALUE end) DGN + +into + +out_DATE, +out_QM3H, +out_HDM, +out_HSTM, +out_P1M, +out_P2M, +out_POWER_EKW, +out_ELECTRIC_CURRENT, +out_VOLTAGE, +out_COSINUS_FI, +out_WORKING_TIME, +out_PP, +out_HH, +out_DGN + +from( +select * from seg_dev_resources_det where +DRD_RESOURCES_DETAIL in (200,205,210,215,220,260,270,275,280,290,401,402,708) +and DRD_DRS_ID=inDevID and DRD_AUDIT_DATE=inDate + +union + +select * from seg_dev_resources_det_his where +DRD_RESOURCES_DETAIL in (200,205,210,215,220,260,270,275,280,290,401,402,708) +and DRD_DRS_ID=inDevID and DRD_AUDIT_DATE=inDate +) tb +group by DRD_AUDIT_DATE; + +INSERT INTO aaa_tmp_rep_his_data_everyday SET +RHD_DRS_ID=inDevID, +RHD_DATE=out_DATE, +RHD_HST_VAL=out_HSTM, +RHD_HD_VAL=out_HDM, +RHD_Q_VAL=out_QM3H, +RHD_P1_VAL=out_P1M, +RHD_P2_VAL=out_P2M, +RHD_I_VAL=out_ELECTRIC_CURRENT, +RHD_U_VAL=out_VOLTAGE, +RHD_PE_VAL=out_POWER_EKW, +RHD_COS_VAL=out_COSINUS_FI, +RHD_PP_VAL=out_PP, +RHD_HH_VAL=out_HH, +RHD_DGN_VAL=out_DGN, +RHD_WORK_TIME_VAL=out_WORKING_TIME, +RHD_AUDIT_CD=NOW(); + + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `insert2_his_data_petla` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `insert2_his_data_petla`() +BEGIN + +DECLARE done INT DEFAULT FALSE; +DECLARE out_devID int(11); +DECLARE out_devDate datetime; + +DECLARE cur1 CURSOR FOR +select DRD_DRS_ID,DRD_AUDIT_DATE from aaa_tmp_rep_his_date_scope order by DRD_DRS_ID,DRD_AUDIT_DATE; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + +truncate table aaa_tmp_rep_his_data_everyday; + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID, out_devDate; + IF done THEN + LEAVE read_loop; + END IF; + + CALL insert2_his_data(out_devDate, out_devID); + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `insertEveryDay4ManualWells` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `insertEveryDay4ManualWells`() +BEGIN + + drop temporary table if exists rep_his_data_everyday_tmp; + create temporary table rep_his_data_everyday_tmp + + select max(RHD_ID) RHD_ID from rep_his_data_everyday WHERE RHD_DRS_ID in ( + select DRS_ID from (select DRS_ID,(select WST_STATUS_VAL from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=DRS_ID)) WST_STATUS_VAL from seg_well_pump_eng_rel,seg_wells left join seg_dev_resources on (DRS_DEV_TYPE=12 and WLL_ID=DRS_DEV_ID) where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID=20) tb where WST_STATUS_VAL='ON' + ); + + ALTER TABLE rep_his_data_everyday_tmp ADD PRIMARY KEY (RHD_ID); + + insert into rep_his_data_everyday + select null,RHD_DRS_ID,now(),null,null,RHD_HD_VAL,RHD_Q_VAL,null,null,null,null,null,null,null,null,null,null,null,null,null,null,now() from rep_his_data_everyday where RHD_ID in (select RHD_ID from rep_his_data_everyday_tmp) and RHD_Q_VAL>0; + + drop temporary table if exists rep_his_data_everyday_tmp; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `insertNewWellParams` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `insertNewWellParams`() +BEGIN + +declare max_RHD_ID int(11) default 0; +declare out_DRS_ID,out_VAL_ONOFF int(11) default 0; +declare last_DATE_Q,out_DATE_HD,out_DATE_HST,out_DATE_P1,out_DATE_P2,out_DATE_Q,out_DATE_PP,out_DATE_HH,out_DATE_PE datetime default null; +declare out_DATE_save datetime default null; +declare out_VAL_HD,out_VAL_HST,out_VAL_Q,out_VAL_P1,out_VAL_P2,out_VAL_L1,out_VAL_UL12,out_VAL_TRP,out_VAL_PE,out_VAL_CFI,out_VAL_PP,out_VAL_HH,out_VAL_VM3,out_VAL_TW,out_VAL_DIAG,out_VAL_RUTM,out_VAL_PB,out_VAL_KWH,out_VAL_ECM float(9,2) default 0; + +DECLARE done INT DEFAULT FALSE; +DECLARE cur1 CURSOR FOR select SUD_DRS_ID,SUD_VAL_HD,SUD_VAL_HST,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_TRP,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,SUD_VAL_VM3,SUD_VAL_TW,SUD_VAL_DIAG,SUD_VAL_RUTM,SUD_VAL_ONOFF,SUD_VAL_PB,SUD_VAL_KWH,SUD_VAL_ECM,SUD_DATE_HD,SUD_DATE_HST,SUD_DATE_P1,SUD_DATE_P2,SUD_DATE_Q,SUD_DATE_PP,SUD_DATE_HH,SUD_DATE_PE from rep_soap_syndis_update5min_data where (SUD_VAL_Q>0 and SUD_FLG_Q='CORRECT' and SUD_FLG_P1='CORRECT' and SUD_FLG_P2='CORRECT' and SUD_VAL_PE>0 and SUD_FLG_PE='CORRECT' and SUD_VAL_PP>0 and SUD_FLG_PP='CORRECT' and SUD_VAL_HH>0 and SUD_FLG_HH='CORRECT' and SUD_VAL_HD>0 and SUD_FLG_HD='CORRECT') or (SUD_VAL_HST>0 and SUD_FLG_HST='CORRECT'); + +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_DRS_ID,out_VAL_HD,out_VAL_HST,out_VAL_Q,out_VAL_P1,out_VAL_P2,out_VAL_L1,out_VAL_UL12,out_VAL_TRP,out_VAL_PE,out_VAL_CFI,out_VAL_PP,out_VAL_HH,out_VAL_VM3,out_VAL_TW,out_VAL_DIAG,out_VAL_RUTM,out_VAL_ONOFF,out_VAL_PB,out_VAL_KWH,out_VAL_ECM,out_DATE_HD,out_DATE_HST,out_DATE_P1,out_DATE_P2,out_DATE_Q,out_DATE_PP,out_DATE_HH,out_DATE_PE; + IF done THEN + LEAVE read_loop; + END IF; + + + if out_VAL_ONOFF=1 then + + + set out_DATE_save = now(); + + set last_DATE_Q = getLastMeasureDate(200,out_DRS_ID); + + if last_DATE_Q<out_DATE_HD or last_DATE_Q<out_DATE_P1 or last_DATE_Q<out_DATE_P2 or last_DATE_Q<out_DATE_Q or last_DATE_Q<out_DATE_PP or last_DATE_Q<out_DATE_HH or last_DATE_Q<out_DATE_PE then + + + + insert into rep_his_data_everyday set RHD_DRS_ID=out_DRS_ID, RHD_DATE=out_DATE_save,RHD_HD_VAL=out_VAL_HD,RHD_Q_VAL=out_VAL_Q,RHD_P1_VAL=out_VAL_P1,RHD_P2_VAL=out_VAL_P2,RHD_I_VAL=out_VAL_L1,RHD_U_VAL=out_VAL_UL12,RHD_PE_VAL=out_VAL_PE,RHD_COS_VAL=out_VAL_CFI,RHD_PP_VAL=out_VAL_PP,RHD_HH_VAL=out_VAL_HH,RHD_VM3_VAL=out_VAL_VM3,RHD_WTEMP_VAL=out_VAL_TW,RHD_DGN_VAL=out_VAL_DIAG,RHD_WORK_TIME_VAL=out_VAL_RUTM,RHD_AUDIT_CD=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=200 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=200,DRD_VALUE=round(out_VAL_Q,3),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=270 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=270,DRD_VALUE=round(out_VAL_L1,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=275 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=275,DRD_VALUE=round(out_VAL_UL12,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=730 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=730,DRD_VALUE=round(out_VAL_TRP,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=245 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=245,DRD_VALUE=round(out_VAL_TW,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=260 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=260,DRD_VALUE=round(out_VAL_PE,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=280 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=280,DRD_VALUE=round(out_VAL_CFI,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=230,DRD_VALUE=round(out_VAL_VM3,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=290,DRD_VALUE=round(out_VAL_RUTM,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=205 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=205,DRD_VALUE=round(out_VAL_HD,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=215 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=215,DRD_VALUE=round(out_VAL_P1,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=220 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=220,DRD_VALUE=round(out_VAL_P2,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=401 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=401,DRD_VALUE=round(out_VAL_PP,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=402 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=402,DRD_VALUE=round(out_VAL_HH,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=225 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=225,DRD_VALUE=round(out_VAL_PB,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=265 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=265,DRD_VALUE=round(out_VAL_KWH,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=721 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=721,DRD_VALUE=round(out_VAL_ECM,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + end if; + + ELSE + + + set out_DATE_save = now(); + + set last_DATE_Q = getLastMeasureDate(210,out_DRS_ID); + + if last_DATE_Q<out_DATE_HST then + + insert into rep_his_data_everyday set RHD_DRS_ID=out_DRS_ID, RHD_DATE=out_DATE_save,RHD_HST_VAL=out_VAL_HST, RHD_AUDIT_CD=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=210,DRD_VALUE=round(out_VAL_HST,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE=out_DATE_save; + + end if; + + end if; + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `insertOneRecord_hisParam` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `insertOneRecord_hisParam`(inDate datetime, inDevID int(11)) +BEGIN + +DECLARE out_HST,out_HD,out_Q,out_p1,out_p2,out_I,out_U,out_Pe,out_cos,out_pp,out_hh,out_T double(11,2); +declare out_dgn int(3); + + +select DRD_VALUE into out_HST from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=210 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=210 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_HD from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=205 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=205 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_Q from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=200 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=200 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_p1 from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=215 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=215 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_p2 from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=220 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=220 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_I from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=270 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=270 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_U from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=275 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=275 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_Pe from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=260 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=260 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_cos from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=280 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=280 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_pp from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=401 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=401 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_hh from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=402 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=402 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_dgn from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=708 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=708 and DRD_AUDIT_DATE=inDate) AS TB limit 1; +select DRD_VALUE into out_T from (select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=290 and DRD_AUDIT_DATE=inDate union select DRD_VALUE from seg_dev_resources_det_his where DRD_DRS_ID=inDevID and DRD_RESOURCES_DETAIL=290 and DRD_AUDIT_DATE=inDate) AS TB limit 1; + +INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=inDevID,RHD_DATE=inDate,RHD_HST_VAL=out_HST,RHD_HD_VAL=out_HD,RHD_Q_VAL=out_Q,RHD_P1_VAL=out_p1,RHD_P2_VAL=out_p2,RHD_I_VAL=out_I,RHD_U_VAL=out_U,RHD_PE_VAL=out_Pe,RHD_COS_VAL=out_cos,RHD_PP_VAL=out_pp,RHD_HH_VAL=out_hh,RHD_DGN_VAL=out_dgn,RHD_WORK_TIME_VAL=out_T,RHD_AUDIT_CD=NOW(); + + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `midleYear_ToHistoricalData` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` PROCEDURE `midleYear_ToHistoricalData`(inDayBefore int) +BEGIN + +DECLARE done bigint DEFAULT FALSE; +DECLARE out_devID bigint(12); +DECLARE out_detID bigint(12); + +DECLARE cur1 CURSOR FOR select DRD_DRS_ID,DRD_RESOURCES_DETAIL from seg_dev_resources_det group by DRD_DRS_ID, DRD_RESOURCES_DETAIL having count(DRD_RESOURCES_DETAIL)>20; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + +DROP TABLE IF EXISTS z_tmp_his_data; +CREATE TABLE z_tmp_his_data (DRS bigint(12) NOT NULL DEFAULT '0', PRIMARY KEY (DRS)) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID, out_detID; + IF done THEN + LEAVE read_loop; + END IF; + + insert into z_tmp_his_data select DRD_ID from seg_dev_resources_det where DRD_DRS_ID=out_devID and DRD_RESOURCES_DETAIL=out_detID and DRD_AUDIT_DATE < ADDDATE(CURDATE(), INTERVAL -(inDayBefore) DAY); + + END LOOP; + + +DROP TABLE IF EXISTS z_tmp_his_data; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `prepareDataForRep002` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `prepareDataForRep002`() +BEGIN + + + + IF MONTH(CURDATE())=1 THEN + + truncate table softspm_rep.rep_002_data_grud; + insert into softspm_rep.rep_002_data_grud + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(ADDDATE(CURDATE(), INTERVAL -12 MONTH)),'-11-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(ADDDATE(CURDATE(), INTERVAL -12 MONTH)),'-12-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_styc; + insert into softspm_rep.rep_002_data_styc + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(ADDDATE(CURDATE(), INTERVAL -12 MONTH)),'-12-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-01-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=2 THEN + + truncate table softspm_rep.rep_002_data_styc; + insert into softspm_rep.rep_002_data_styc + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-01-','01 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-01-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_luty; + insert into softspm_rep.rep_002_data_luty + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-01-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-02-','28 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=3 THEN + + truncate table softspm_rep.rep_002_data_luty; + insert into softspm_rep.rep_002_data_luty + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-01-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-02-','28 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_marz; + insert into softspm_rep.rep_002_data_marz + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-02-','27 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-03-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=4 THEN + + truncate table softspm_rep.rep_002_data_marz; + insert into softspm_rep.rep_002_data_marz + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-02-','27 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-03-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_kwie; + insert into softspm_rep.rep_002_data_kwie + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-03-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-04-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=5 THEN + + truncate table softspm_rep.rep_002_data_kwie; + insert into softspm_rep.rep_002_data_kwie + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-03-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-04-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_maj; + insert into softspm_rep.rep_002_data_maj + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-04-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-05-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=6 THEN + + truncate table softspm_rep.rep_002_data_maj; + insert into softspm_rep.rep_002_data_maj + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-04-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-05-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_czer; + insert into softspm_rep.rep_002_data_czer + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-05-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-06-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=7 THEN + + truncate table softspm_rep.rep_002_data_czer; + insert into softspm_rep.rep_002_data_czer + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-05-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-06-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_lipi; + insert into softspm_rep.rep_002_data_lipi + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-06-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-07-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=8 THEN + + truncate table softspm_rep.rep_002_data_lipi; + insert into softspm_rep.rep_002_data_lipi + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-06-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-07-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_sier; + insert into softspm_rep.rep_002_data_sier + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-07-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-08-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=9 THEN + + truncate table softspm_rep.rep_002_data_sier; + insert into softspm_rep.rep_002_data_sier + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-07-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-08-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_wrze; + insert into softspm_rep.rep_002_data_wrze + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-08-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-09-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=10 THEN + + truncate table softspm_rep.rep_002_data_wrze; + insert into softspm_rep.rep_002_data_wrze + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-08-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-09-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_pazd; + insert into softspm_rep.rep_002_data_pazd + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-09-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-10-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=11 THEN + + truncate table softspm_rep.rep_002_data_pazd; + insert into softspm_rep.rep_002_data_pazd + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-09-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-10-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_list; + insert into softspm_rep.rep_002_data_list + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-10-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-11-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + + + ELSEIF MONTH(CURDATE())=12 THEN + + truncate table softspm_rep.rep_002_data_list; + insert into softspm_rep.rep_002_data_list + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-10-','30 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-11-','30 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + truncate table softspm_rep.rep_002_data_grud; + insert into softspm_rep.rep_002_data_grud + select * from rep_his_data_everyday where RHD_DATE>=STR_TO_DATE(CONCAT(year(CURDATE()),'-11-','29 00:00:00'), '%Y-%m-%d %H:%i:%s') and RHD_DATE<=STR_TO_DATE(CONCAT(year(CURDATE()),'-12-','31 23:59:59'), '%Y-%m-%d %H:%i:%s') and RHD_Q_VAL>0; + + + END IF; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `rep_008` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `rep_008`(statID int) +BEGIN + +declare out_DRS_ID int(11) default null; +declare out_WLE_DATE_FROM,out_WLE_DATE_TO datetime default null; + +DECLARE done INT DEFAULT FALSE; +DECLARE cur1 CURSOR FOR select DRS_ID,WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLE_WLL_ID and DRS_STATUS_DIC_ID=statID order by WLE_WLL_ID,WLE_NR_EXCHANGE; + +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_DRS_ID,out_WLE_DATE_FROM,out_WLE_DATE_TO; + IF done THEN + LEAVE read_loop; + END IF; + + if out_WLE_DATE_TO is not null then + insert into softspm_rep.rep_008_data + select * from ( select * from rep_his_data_everyday where RHD_DRS_ID=out_DRS_ID and RHD_DATE=(select max(RHD_DATE) from rep_his_data_everyday where RHD_DRS_ID=out_DRS_ID and RHD_DATE>=out_WLE_DATE_FROM and RHD_DATE<=out_WLE_DATE_TO) union select * from softspm_his.rep_his_data_everyday_his where RHD_DRS_ID=out_DRS_ID and RHD_DATE=(select max(RHD_DATE) from rep_his_data_everyday where RHD_DRS_ID=out_DRS_ID and RHD_DATE>=out_WLE_DATE_FROM and RHD_DATE<=out_WLE_DATE_TO) ) tb; + else + insert into softspm_rep.rep_008_data + select * from ( select * from rep_his_data_everyday where RHD_DRS_ID=out_DRS_ID and RHD_DATE=(select max(RHD_DATE) from rep_his_data_everyday where RHD_DRS_ID=out_DRS_ID and RHD_DATE>=out_WLE_DATE_FROM) union select * from softspm_his.rep_his_data_everyday_his where RHD_DRS_ID=out_DRS_ID and RHD_DATE=(select max(RHD_DATE) from rep_his_data_everyday where RHD_DRS_ID=out_DRS_ID and RHD_DATE>=out_WLE_DATE_FROM) ) tb; + end if; + + + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `rep_scope` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `rep_scope`() +BEGIN + +DECLARE done INT DEFAULT FALSE; +DECLARE out_devID int(11); + +DECLARE cur1 CURSOR FOR select distinct DRS_ID from seg_dev_resources where DRS_DEV_TYPE=12; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + +truncate table aaa_tmp_rep_his_date_scope; + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID; + IF done THEN + LEAVE read_loop; + END IF; + + INSERT INTO aaa_tmp_rep_his_date_scope select * from (select DRD_AUDIT_DATE,DRD_DRS_ID from seg_dev_resources_det where DRD_DRS_ID=out_devID and (DRD_RESOURCES_DETAIL=200 or DRD_RESOURCES_DETAIL=205 or DRD_RESOURCES_DETAIL=210) GROUP by DRD_AUDIT_DATE union select DRD_AUDIT_DATE,DRD_DRS_ID from seg_dev_resources_det_his where DRD_DRS_ID=out_devID and (DRD_RESOURCES_DETAIL=200 or DRD_RESOURCES_DETAIL=205 or DRD_RESOURCES_DETAIL=210) GROUP by DRD_AUDIT_DATE) tb order by DRD_AUDIT_DATE desc; + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `rep_zrzut_wody_insert` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `rep_zrzut_wody_insert`( + IN p_department VARCHAR(255), + IN p_audit_usr VARCHAR(64), + IN p_asof DATETIME +) +BEGIN + INSERT INTO rep_zrzut_wody + (RZW_WIDAWKA, RZW_KRASOWKA, RZW_DEPARTMENT, RZW_AUDIT_USR, RZW_AUDIT_DATE) + SELECT + SUM(CASE + WHEN UPPER(COALESCE(x.TOP_WWD_NAME,'')) LIKE '%WIDAWKA%' THEN x.Q_H/60 + ELSE null + END) AS RZW_WIDAWKA, + SUM(CASE + WHEN UPPER(COALESCE(x.TOP_WWD_NAME,'')) LIKE '%KRASOWKA%' THEN x.Q_H/60 + ELSE null + END) AS RZW_KRASOWKA, + p_department AS RZW_DEPARTMENT, + p_audit_usr AS RZW_AUDIT_USR, + NOW() AS RZW_AUDIT_DATE + FROM + ( + SELECT + drs.DRS_ID, + COALESCE(d5.WWD_NAME, d4.WWD_NAME, d3.WWD_NAME, d2.WWD_NAME, d1.WWD_NAME, d0.WWD_NAME) AS TOP_WWD_NAME, + h.RHD_Q_VAL AS Q_H + FROM seg_dev_resources drs + + + JOIN ( + SELECT d.DRS_ID + FROM seg_dev_resources d + WHERE d.DRS_DEV_TYPE = 12 + AND d.DRS_DEPARTMENT = p_department + AND getWellStatusOnOff(d.DRS_ID, p_asof) = 'ON' + ) onw + ON onw.DRS_ID = drs.DRS_ID + + JOIN seg_well_water_drainage wld + ON wld.WLD_DRS_ID = drs.DRS_ID + + LEFT JOIN seg_water_drainage d0 ON d0.WWD_ID = wld.WLD_WWD_ID + LEFT JOIN seg_water_drainage d1 ON d1.WWD_ID = d0.WWD_PARENT_ID + LEFT JOIN seg_water_drainage d2 ON d2.WWD_ID = d1.WWD_PARENT_ID + LEFT JOIN seg_water_drainage d3 ON d3.WWD_ID = d2.WWD_PARENT_ID + LEFT JOIN seg_water_drainage d4 ON d4.WWD_ID = d3.WWD_PARENT_ID + LEFT JOIN seg_water_drainage d5 ON d5.WWD_ID = d4.WWD_PARENT_ID + + JOIN ( + SELECT h2.RHD_DRS_ID, MAX(h2.RHD_ID) AS MAX_RHD_ID + FROM rep_his_data_everyday h2 + WHERE h2.RHD_Q_VAL > 0 + AND h2.RHD_DATE <= p_asof + GROUP BY h2.RHD_DRS_ID + ) last + ON last.RHD_DRS_ID = drs.DRS_ID + + JOIN rep_his_data_everyday h + ON h.RHD_ID = last.MAX_RHD_ID + ) x; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `selectAllData_hisParam` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `selectAllData_hisParam`(inDateFrom datetime) +BEGIN + +DECLARE done INT DEFAULT FALSE; +DECLARE out_devID int(11); +DECLARE out_devDate datetime; + +DECLARE cur1 CURSOR FOR +select DRD_DRS_ID,DRD_AUDIT_DATE from (select DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL in (210,205,200,215,220,270,275,260,280,290,401,402,708) and DRD_AUDIT_DATE>=inDateFrom union select DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL in (210,205,200,215,220,270,275,260,280,290,401,402,708) and DRD_AUDIT_DATE>=inDateFrom) AS TB; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID, out_devDate; + IF done THEN + LEAVE read_loop; + END IF; + + CALL insertOneRecord_hisParam(out_devDate, out_devID); + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `selectAllHisData_4devID` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `selectAllHisData_4devID`(inDevID int) +BEGIN + +DECLARE done INT DEFAULT FALSE; +DECLARE out_devID int(11); +DECLARE out_devDate datetime; + +DECLARE cur1 CURSOR FOR select DRD_DRS_ID,DRD_AUDIT_DATE from (select DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL in (210,205,200,215,220,270,275,260,280,290,401,402,708) and DRD_AUDIT_DATE>='1977-09-22' and DRD_DRS_ID=inDevID union select DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL in (210,205,200,215,220,270,275,260,280,290,401,402,708) and DRD_AUDIT_DATE>='1977-09-22' and DRD_DRS_ID=inDevID) AS TB; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID, out_devDate; + IF done THEN + LEAVE read_loop; + END IF; + + CALL insertOneRecord_hisParam(out_devDate, out_devID); + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `selectLastDay_hisParam` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `selectLastDay_hisParam`(inDateFrom date) +BEGIN + +DECLARE done INT DEFAULT FALSE; +DECLARE out_devID int(11); +DECLARE out_devDate datetime; + +DECLARE cur1 CURSOR FOR +select DRD_DRS_ID,DRD_AUDIT_DATE from (select DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL in (210,205,200,215,220,270,275,260,280,290,401,402,708) and DRD_AUDIT_DATE>=inDateFrom union select DRD_DRS_ID,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL in (210,205,200,215,220,270,275,260,280,290,401,402,708) and DRD_AUDIT_DATE>=inDateFrom) AS TB; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + +delete from rep_his_data_everyday where RHD_DATE>=inDateFrom; + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID, out_devDate; + IF done THEN + LEAVE read_loop; + END IF; + + CALL insertOneRecord_hisParam(out_devDate, out_devID); + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `stacja_prob_upload` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `stacja_prob_upload`() +BEGIN + +DECLARE counRow int(11); +set counRow=0; + + select count(*) into counRow from sys_stacja_prob_upload_logs where SPU_MADE_DB_PROC is null; + if counRow>0 then + + call updateStanPompFromStacja(); + call updateStanEngineFromStacja(); + call updateStanAgregatowZlecenia(); + + truncate table softspm_rep.rep_015_data; + insert into softspm_rep.rep_015_data select G.stp_stakabel_g_kab_id kab_id,G.stp_stakabel_g_typ_id typ_id,stp_stamot_typ_m,stp_stamot_nr_m,stp_stamot_u,sum(stp_stakabel_dl_ilosc) dl_ilosc, sum(stp_stakabel_dl_ciezar) dl_ciezar, max(stp_stakabel_dl_audit_date) dl_date from stp_stamot S left join stp_siln L on stp_siln_typ_si=stp_stamot_typ_m and stp_siln_u=stp_stamot_u left join stp_stakabel_g G on G.stp_stakabel_g_kab_id=stp_stamot_kabel_id left join stp_stakabel_g G1 on (G1.stp_stakabel_g_kab_id=G.stp_stakabel_g_kab_id and (G.stp_stakabel_g_wiaz=0 or G.stp_stakabel_g_wiaz is null)) or (G1.stp_stakabel_g_owner_id=G.stp_stakabel_g_kab_id and G.stp_stakabel_g_wiaz=1) left join stp_stakabel on stp_stakabel_id_k=G.stp_stakabel_g_kab_id left join stp_stakabel_o on stp_stakabel_dl_kab_id=G1.stp_stakabel_g_kab_id group by stp_stamot_typ_m,stp_stamot_nr_m having sum(stp_stakabel_dl_ilosc)>0; + + UPDATE sys_stacja_prob_upload_logs SET SPU_STATUS=1,SPU_MADE_DB_PROC=now() where SPU_MADE_DB_PROC is null; + + end if; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `testttttt` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`softspm`@`%` PROCEDURE `testttttt`() +BEGIN + +DECLARE done INT DEFAULT FALSE; +DECLARE out_devID int(11); + +DECLARE cur1 CURSOR FOR select TPM_DRS_ID from z_tmp_to_his_data; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_devID; + IF done THEN + LEAVE read_loop; + END IF; + + call selectAllHisData_4devID(out_devID); + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `updateLastWellParams` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `updateLastWellParams`() +BEGIN + +declare max_RHD_ID int(11) default 0; +declare out_DRS_ID int(11) default 0; +declare last_DATE_Q,out_DATE_HD,out_DATE_P1,out_DATE_P2,out_DATE_Q,out_DATE_PP,out_DATE_HH,out_DATE_PE datetime default null; +declare out_VAL_HD,out_VAL_Q,out_VAL_P1,out_VAL_P2,out_VAL_L1,out_VAL_UL12,out_VAL_TRP,out_VAL_PE,out_VAL_CFI,out_VAL_PP,out_VAL_HH,out_VAL_VM3,out_VAL_TW,out_VAL_DIAG,out_VAL_RUTM float(9,2) default 0; + + +DECLARE done INT DEFAULT FALSE; +DECLARE cur1 CURSOR FOR select SUD_DRS_ID,SUD_VAL_HD,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_TRP,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,SUD_VAL_VM3,SUD_VAL_TW,SUD_VAL_DIAG,SUD_VAL_RUTM,SUD_DATE_HD,SUD_DATE_P1,SUD_DATE_P2,SUD_DATE_Q,SUD_DATE_PP,SUD_DATE_HH,SUD_DATE_PE from rep_soap_syndis_update5min_data where SUD_VAL_ONOFF>0 and SUD_VAL_Q>0 and SUD_FLG_Q='CORRECT' and SUD_FLG_P1='CORRECT' and SUD_FLG_P2='CORRECT' and SUD_VAL_PE>0 and SUD_FLG_PE='CORRECT' and SUD_VAL_PP>0 and SUD_FLG_PP='CORRECT' and SUD_VAL_HH>0 and SUD_FLG_HH='CORRECT' and SUD_VAL_HD>0 and SUD_FLG_HD='CORRECT'; +DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + +OPEN cur1; + + read_loop: LOOP + FETCH cur1 INTO out_DRS_ID,out_VAL_HD,out_VAL_Q,out_VAL_P1,out_VAL_P2,out_VAL_L1,out_VAL_UL12,out_VAL_TRP,out_VAL_PE,out_VAL_CFI,out_VAL_PP,out_VAL_HH,out_VAL_VM3,out_VAL_TW,out_VAL_DIAG,out_VAL_RUTM,out_DATE_HD,out_DATE_P1,out_DATE_P2,out_DATE_Q,out_DATE_PP,out_DATE_HH,out_DATE_PE; + IF done THEN + LEAVE read_loop; + END IF; + + set last_DATE_Q = getLastMeasureDate(200,out_DRS_ID); + + if last_DATE_Q<out_DATE_HD or last_DATE_Q<out_DATE_P1 or last_DATE_Q<out_DATE_P2 or last_DATE_Q<out_DATE_Q or last_DATE_Q<out_DATE_PP or last_DATE_Q<out_DATE_HH or last_DATE_Q<out_DATE_PE then + + + set max_RHD_ID = 0; + select max(RHD_ID) into max_RHD_ID from rep_his_data_everyday where RHD_DRS_ID=out_DRS_ID; + IF max_RHD_ID>0 then + + update rep_his_data_everyday set RHD_DATE=now(),RHD_HD_VAL=out_VAL_HD,RHD_Q_VAL=out_VAL_Q,RHD_P1_VAL=out_VAL_P1,RHD_P2_VAL=out_VAL_P2,RHD_I_VAL=out_VAL_L1,RHD_U_VAL=out_VAL_UL12,RHD_PE_VAL=out_VAL_PE,RHD_COS_VAL=out_VAL_CFI,RHD_PP_VAL=out_VAL_PP,RHD_HH_VAL=out_VAL_HH,RHD_VM3_VAL=out_VAL_VM3,RHD_WTEMP_VAL=out_VAL_TW,RHD_DGN_VAL=out_VAL_DIAG,RHD_WORK_TIME_VAL=out_VAL_RUTM,RHD_AUDIT_CD=now() where RHD_ID=max_RHD_ID; + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=200 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=200,DRD_VALUE=round(out_VAL_Q,3),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=270 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=270,DRD_VALUE=round(out_VAL_L1,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=275 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=275,DRD_VALUE=round(out_VAL_UL12,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=730 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=730,DRD_VALUE=round(out_VAL_TRP,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=245 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=245,DRD_VALUE=round(out_VAL_TW,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=260 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=260,DRD_VALUE=round(out_VAL_PE,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=280 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=280,DRD_VALUE=round(out_VAL_CFI,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=230,DRD_VALUE=round(out_VAL_VM3,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=290,DRD_VALUE=round(out_VAL_RUTM,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=205 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=205,DRD_VALUE=round(out_VAL_HD,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=215 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=215,DRD_VALUE=round(out_VAL_P1,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=220 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=220,DRD_VALUE=round(out_VAL_P2,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=401 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=401,DRD_VALUE=round(out_VAL_PP,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + + DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=402 and DRD_DRS_ID=out_DRS_ID; + INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=out_DRS_ID,DRD_RESOURCES_DETAIL=402,DRD_VALUE=round(out_VAL_HH,2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='updateLastWellParams',DRD_AUDIT_DATE=now(); + + end if; + + + end if; + + + END LOOP; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `updateStacjaProb` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`%` PROCEDURE `updateStacjaProb`() +BEGIN + insert into tst_tests + select + stp_protokoly_nr, + null, + (select PUP_ID from seg_pumps where PUP_NAME=stp_protokoly_pomp limit 1) PUP_ID, + stp_protokoly_pomp_nr, + (select ENG_ID from seg_engines where ENG_NAME=stp_protokoly_sil limit 1) ENG_ID, + stp_protokoly_sil_nr, + null, + null, + null, + null, + stp_protokoly_wynik, + stp_protokoly_prowadz, + stp_protokoly_data + from stp_protokoly; + + insert into tst_test_details + select + null, + stp_protdata_nr_prot, + stp_protdata_lp, + round(REPLACE(stp_protdata_cz_geo,',','.'),2) GEO, + null, + round(REPLACE(stp_protdata_n,',','.'),2) N, + round(REPLACE(stp_protdata_q,',','.'),2) Q, + round(REPLACE(stp_protdata_p,',','.'),2) P, + null, + round(REPLACE(stp_protdata_cz_dyn,',','.'),2) DYN, + round(REPLACE(stp_protdata_h,',','.'),2) H, + round(REPLACE(stp_protdata_pp,',','.'),2) PP, + round(REPLACE(stp_protdata_ir,',','.'),2) RI, + round(REPLACE(stp_protdata_is,',','.'),2) SI, + round(REPLACE(stp_protdata_it,',','.'),2) TI, + round(REPLACE(stp_protdata_u,',','.'),2) U, + round(REPLACE(stp_protdata_p1,',','.'),2) P1, + round(REPLACE(stp_protdata_cos,',','.'),2) COS_FI, + round(REPLACE(stp_protdata_i,',','.'),2) I, + round(REPLACE(stp_protdata_delta_i,',','.'),2) DELTA_I, + round(REPLACE(stp_protdata_pp,',','.')/REPLACE(stp_protdata_p1,',','.'),2) ETA, + null, + null, + 'stacja prób' who, + stp_protdata_audit_date + from stp_protdata; + +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `updateStanAgregatowZlecenia` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `updateStanAgregatowZlecenia`() +BEGIN + + + UPDATE stp_stakabel_g SET stp_stakabel_g_dlug=NULL WHERE stp_stakabel_g_dlug=0; + UPDATE stp_stakabel_g SET stp_stakabel_g_wiaz=NULL WHERE stp_stakabel_g_wiaz=0; + + truncate table stp_stakabel_dl; + + insert into stp_stakabel_dl (stp_stakabel_dl_typ,stp_stakabel_dl_nr,stp_stakabel_dl_u,stp_stakabel_dl_ilosc,stp_stakabel_dl_audit_date) + select + stp_stamot_typ_m,stp_stamot_nr_m,stp_stamot_u,sum(stp_stakabel_dl_ilosc),now() + from + stp_stamot S + left join stp_siln L on stp_siln_typ_si=stp_stamot_typ_m and stp_siln_u=stp_stamot_u + left join stp_stakabel_g G on G.stp_stakabel_g_kab_id=stp_stamot_kabel_id + left join stp_stakabel_g G1 on (G1.stp_stakabel_g_kab_id=G.stp_stakabel_g_kab_id and (G.stp_stakabel_g_wiaz=0 or G.stp_stakabel_g_wiaz is null)) or (G1.stp_stakabel_g_owner_id=G.stp_stakabel_g_kab_id and G.stp_stakabel_g_wiaz=1) + left join stp_stakabel on stp_stakabel_id_k=G.stp_stakabel_g_kab_id + left join stp_stakabel_o on stp_stakabel_dl_kab_id=G1.stp_stakabel_g_kab_id + group by + stp_stamot_typ_m,stp_stamot_nr_m; + + + truncate table rep_aggregate_departments; + insert into rep_aggregate_departments + select + null, + (select PUP_ID from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_ID, + (select DRS_ID from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_DRS_ID, + stp_stapo_typ_p, + stp_stapo_nr_p, + (select PUP_Q_N from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_Q_N, + (select PUP_H_P from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_H_P, + (case when stp_uzytkownik_kod = 'o-1' then 'P/Bełchatów' when stp_uzytkownik_kod = 'o-2' then 'P/Szczerców' when stp_uzytkownik_kod = 'o-1/D' then 'Dębina' else '' end) AS PUP_DEPARTMENT, + (select ENG_ID from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_ID, + (select DRS_ID from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_DRS_ID, + stp_stamot_typ_m, + stp_stamot_nr_m, + (select ENG_VOLTAGE from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_VOLTAGE, + (select ENG_POWER from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_POWER, + (case when stp_uzytkownik_kod = 'o-1' then 'P/Bełchatów' when stp_uzytkownik_kod = 'o-2' then 'P/Szczerców' when stp_uzytkownik_kod = 'o-1/D' then 'Dębina' else '' end) AS ENG_DEPARTMENT, + stp_stakabel_typ ECB_TYP, + (select stp_stakabel_dl_ilosc from stp_stakabel_dl where stp_stamot_typ_m=stp_stakabel_dl_typ and stp_stamot_nr_m=stp_stakabel_dl_nr and stp_stamot_u=stp_stakabel_dl_u limit 1) ECB_DLUGOSC, + stp_stakabel_g_ozn_1 ECB_OZNAK_01, + stp_stakabel_g_ozn_2 ECB_OZNAK_02 + from stp_stapo + left join stp_status on stp_status_id_s=stp_stapo_stat_id + left join stp_uzytkownik on stp_uzytkownik_id_u=stp_stapo_user_id + left join stp_stamot on stp_stamot_id_m=stp_stapo_sil_id + left join stp_stakabel_g on stp_stakabel_g_kab_id=stp_stamot_kabel_id + left join stp_stakabel on stp_stakabel_id_k=stp_stakabel_g_typ_id + where `stp_stapo_stat_id`=6 and `stp_stapo_user_id` in (1,2,3); + + truncate table softspm_rep.rep_015_stany; + insert into softspm_rep.rep_015_stany + select + null, + (select PUP_ID from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_ID, + (select DRS_ID from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_DRS_ID, + stp_stapo_typ_p, + stp_stapo_nr_p, + (select ENG_ID from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_ID, + (select DRS_ID from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_DRS_ID, + stp_stamot_typ_m, + stp_stamot_nr_m, + (select ENG_VOLTAGE from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_VOLTAGE, + stp_stakabel_g_kab_id ECB_ID, + stp_stakabel_typ ECB_TYP, + (select stp_stakabel_dl_ilosc from stp_stakabel_dl where stp_stamot_typ_m=stp_stakabel_dl_typ and stp_stamot_nr_m=stp_stakabel_dl_nr and stp_stamot_u=stp_stakabel_dl_u limit 1) ECB_DLUGOSC, + stp_stakabel_g_ozn_1 ECB_OZNAK_01, + stp_stakabel_g_ozn_2 ECB_OZNAK_02 + from stp_stapo + left join stp_status on stp_status_id_s=stp_stapo_stat_id + left join stp_uzytkownik on stp_uzytkownik_id_u=stp_stapo_user_id + left join stp_stamot on stp_stamot_id_m=stp_stapo_sil_id + left join stp_stakabel_g on stp_stakabel_g_kab_id=stp_stamot_kabel_id + left join stp_stakabel on stp_stakabel_id_k=stp_stakabel_g_typ_id + where stp_stapo_user_id in (1,2,3); + + truncate table softspm_rep.rep_015_data; + insert into softspm_rep.rep_015_data select G.stp_stakabel_g_kab_id kab_id,G.stp_stakabel_g_typ_id typ_id,stp_stamot_typ_m,stp_stamot_nr_m,stp_stamot_u,sum(stp_stakabel_dl_ilosc) dl_ilosc, sum(stp_stakabel_dl_ciezar) dl_ciezar, max(stp_stakabel_dl_audit_date) dl_date from stp_stamot S left join stp_siln L on stp_siln_typ_si=stp_stamot_typ_m and stp_siln_u=stp_stamot_u left join stp_stakabel_g G on G.stp_stakabel_g_kab_id=stp_stamot_kabel_id left join stp_stakabel_g G1 on (G1.stp_stakabel_g_kab_id=G.stp_stakabel_g_kab_id and (G.stp_stakabel_g_wiaz=0 or G.stp_stakabel_g_wiaz is null)) or (G1.stp_stakabel_g_owner_id=G.stp_stakabel_g_kab_id and G.stp_stakabel_g_wiaz=1) left join stp_stakabel on stp_stakabel_id_k=G.stp_stakabel_g_kab_id left join stp_stakabel_o on stp_stakabel_dl_kab_id=G1.stp_stakabel_g_kab_id group by stp_stamot_typ_m,stp_stamot_nr_m having sum(stp_stakabel_dl_ilosc)>0; + +end ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `updateStanEngineFromStacja` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `updateStanEngineFromStacja`() +BEGIN + +SET @old_sql_mode = @@sql_mode; +SET sql_mode = REPLACE(@@sql_mode, 'NO_ZERO_DATE', ''); +SET sql_mode = REPLACE(@@sql_mode, 'STRICT_TRANS_TABLES', ''); + + drop temporary table if exists tmp_stp_stamot_00; + drop temporary table if exists tmp_stp_stamot_01; + drop temporary table if exists tmp_stp_stamot_02; + drop temporary table if exists tmp_stp_stamot_03; + drop temporary table if exists tmp_stp_stamot_04; + + create temporary table tmp_stp_stamot_00 + select * from stp_stamot where stp_stamot_id_m in (select max(CONVERT(stp_stamot_id_m,UNSIGNED INTEGER)) from stp_stamot group by stp_stamot_nr_m,stp_stamot_typ_m); + ALTER TABLE tmp_stp_stamot_00 ADD UNIQUE INDEX INX_stp_stamot_id (stp_stamot_id); + + create temporary table tmp_stp_stamot_01 + select DRS_ID,ENG_ID,ENG_NAME,ENG_VOLTAGE,DRS_SN_NUMBER from seg_engines,seg_dev_resources where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID; + ALTER TABLE tmp_stp_stamot_01 ADD UNIQUE INDEX INX_DRS_ID (DRS_ID); + + create temporary table tmp_stp_stamot_02 + select + stp_stamot_id_m, + stp_stamot_typ_m, + stp_stamot_nr_m, + stp_stamot_u, + stp_stamot_p, + (case + when stp_stamot_kasac_id=1 then 1400 + when stp_stamot_kasac_id=2 then 1401 + when stp_stamot_kasac_id=3 then 1402 + when stp_stamot_kasac_id=4 then 1524 + end) przycz_kasac, + (case + when stp_stamot_stat_id=9 then 707 + when stp_stamot_stat_id=1 then 3 + when stp_stamot_stat_id=5 then 40 + when stp_stamot_stat_id=7 then 1 + when stp_stamot_stat_id=10 then 707 + when stp_stamot_stat_id=4 then 707 + when stp_stamot_stat_id=8 then 707 + when stp_stamot_stat_id=3 then 707 + when stp_stamot_stat_id=2 then 707 + when stp_stamot_stat_id=6 then 2 + else 707 + end) DEV_STATUS, + (case when stp_stamot_user_id = 1 then 'P/Bełchatów' when stp_stamot_user_id = 3 then 'P/Szczerców' when stp_stamot_user_id = 2 then 'Dębina' else '' end) AS ENG_DEPARTMENT, + stp_stamot_data_przyj, + stp_stamot_data_zakup, + stp_stamot_data_kasac, + stp_stamot_pomp_id, + DRS_ID,ENG_ID,ENG_NAME,ENG_VOLTAGE,DRS_SN_NUMBER + from tmp_stp_stamot_00 + left join tmp_stp_stamot_01 on (stp_stamot_typ_m=ENG_NAME and stp_stamot_nr_m=DRS_SN_NUMBER and stp_stamot_u=ENG_VOLTAGE); + ALTER TABLE tmp_stp_stamot_02 ADD INDEX INX_DRS_ID (DRS_ID); + + insert into seg_dev_resources + select null,(select seg_engines.ENG_ID from seg_engines where seg_engines.ENG_NAME=stp_stamot_typ_m and seg_engines.ENG_VOLTAGE=stp_stamot_u LIMIT 1) EID,'11',stp_stamot_nr_m,(case when LENGTH(stp_stamot_data_zakup)>8 then stp_stamot_data_zakup else null end),stp_stamot_data_przyj,stp_stamot_data_kasac,DEV_STATUS,DEV_STATUS,przycz_kasac,ENG_DEPARTMENT,stp_stamot_u,now() from tmp_stp_stamot_02 where DRS_ID is null and LENGTH(ENG_DEPARTMENT)>3; + + update seg_dev_resources,tmp_stp_stamot_02 set DRS_BUY_DATE=stp_stamot_data_zakup,DRS_AVAILABLE_DATE=stp_stamot_data_przyj,DRS_CASSATION_DATE=stp_stamot_data_kasac,DRS_RESOURCES_DIC_ID=DEV_STATUS,DRS_DEPARTMENT=ENG_DEPARTMENT,DRS_AUDIT_USR=stp_stamot_u,DRS_AUDIT_DATE=now() where seg_dev_resources.DRS_ID=tmp_stp_stamot_02.DRS_ID; + UPDATE seg_dev_resources,tmp_stp_stamot_02 SET DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=41, DRS_DEV_ATTENTION=przycz_kasac where seg_dev_resources.DRS_ID=tmp_stp_stamot_02.DRS_ID and przycz_kasac>=1400 and przycz_kasac<=1402; + UPDATE seg_dev_resources,tmp_stp_stamot_02 SET DRS_DEV_ATTENTION=przycz_kasac where seg_dev_resources.DRS_ID=tmp_stp_stamot_02.DRS_ID and przycz_kasac=1524; + update seg_wellsink_pump_eng_rel,seg_dev_resources set DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=40, DRS_DEV_ATTENTION='1401' where DRS_ID=RWS_ENG_DRS_ID and RWS_ENG_DRS_ID>0; + + update seg_dev_resources set DRS_BUY_DATE=null where DRS_BUY_DATE='0000-00-00'; + update seg_dev_resources set DRS_AVAILABLE_DATE=null where DRS_AVAILABLE_DATE='0000-00-00'; + update seg_dev_resources set DRS_CASSATION_DATE=null where DRS_CASSATION_DATE='0000-00-00'; + + drop temporary table if exists tmp_stp_stamot_00; + drop temporary table if exists tmp_stp_stamot_01; + drop temporary table if exists tmp_stp_stamot_02; + drop temporary table if exists tmp_stp_stamot_03; + drop temporary table if exists tmp_stp_stamot_04; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = '' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `updateStanPompFromStacja` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb3 */ ; +/*!50003 SET character_set_results = utf8mb3 */ ; +/*!50003 SET collation_connection = utf8mb3_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `updateStanPompFromStacja`() +BEGIN + + drop temporary table if exists tmp_spm_stapo_00; + drop temporary table if exists tmp_spm_stapo_01; + drop temporary table if exists tmp_spm_stapo_02; + drop temporary table if exists tmp_spm_stapo_03; + drop temporary table if exists tmp_spm_stapo_04; + + create temporary table tmp_spm_stapo_00 + select * from stp_stapo where stp_stapo_id_p in (select max(CONVERT(stp_stapo_id_p,UNSIGNED INTEGER)) from stp_stapo group by stp_stapo_nr_p,stp_stapo_typ_p); + ALTER TABLE tmp_spm_stapo_00 ADD UNIQUE INDEX INX_stp_stapo_id (stp_stapo_id); + + + create temporary table tmp_spm_stapo_01 + select DRS_ID,PUP_ID,PUP_NAME,PUP_Q_N,DRS_SN_NUMBER from seg_pumps,seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID; + ALTER TABLE tmp_spm_stapo_01 ADD UNIQUE INDEX INX_DRS_ID (DRS_ID); + + create temporary table tmp_spm_stapo_02 + select + stp_stapo_id_p, + stp_stapo_typ_p, + stp_stapo_nr_p, + (case + when stp_stapo_kasac_id=1 then 1400 + when stp_stapo_kasac_id=2 then 1401 + when stp_stapo_kasac_id=3 then 1402 + when stp_stapo_kasac_id=4 then 1524 + end) przycz_kasac, + (case + when stp_stapo_stat_id=9 then 707 + when stp_stapo_stat_id=1 then 3 + when stp_stapo_stat_id=5 then 40 + when stp_stapo_stat_id=7 then 1 + when stp_stapo_stat_id=10 then 707 + when stp_stapo_stat_id=4 then 707 + when stp_stapo_stat_id=8 then 707 + when stp_stapo_stat_id=3 then 707 + when stp_stapo_stat_id=2 then 707 + when stp_stapo_stat_id=6 then 2 + else 707 + end) DEV_STATUS, + stp_stapo_data_przyj, + stp_stapo_data_zakup, + stp_stapo_data_kasac, + stp_stapo_sil_id, + (case when stp_stapo_user_id = 1 then 'P/Bełchatów' when stp_stapo_user_id = 3 then 'P/Szczerców' when stp_stapo_user_id = 2 then 'Dębina' else '' end) AS PUP_DEPARTMENT, + DRS_ID,PUP_ID,PUP_NAME,PUP_Q_N,DRS_SN_NUMBER + from tmp_spm_stapo_00 left join tmp_spm_stapo_01 on (stp_stapo_typ_p=PUP_NAME and stp_stapo_nr_p=DRS_SN_NUMBER) where stp_stapo_user_id in (1,2,3); + ALTER TABLE tmp_spm_stapo_02 ADD INDEX INX_DRS_ID (DRS_ID); + + insert into seg_dev_resources + select null,(select seg_pumps.PUP_ID from seg_pumps where seg_pumps.PUP_NAME=stp_stapo_typ_p) PID,'10',stp_stapo_nr_p,(case when LENGTH(stp_stapo_data_zakup)>8 then stp_stapo_data_zakup else null end),stp_stapo_data_przyj,stp_stapo_data_kasac,'1',DEV_STATUS,przycz_kasac,PUP_DEPARTMENT,'stacja prób',now() from tmp_spm_stapo_02 where DRS_ID is null and LENGTH(PUP_DEPARTMENT)>3; + + update seg_dev_resources,tmp_spm_stapo_02 set DRS_BUY_DATE=stp_stapo_data_zakup,DRS_AVAILABLE_DATE=stp_stapo_data_przyj,DRS_CASSATION_DATE=stp_stapo_data_kasac,DRS_RESOURCES_DIC_ID=DEV_STATUS,DRS_DEPARTMENT=PUP_DEPARTMENT,DRS_AUDIT_USR='stacja prób',DRS_AUDIT_DATE=now() where seg_dev_resources.DRS_ID=tmp_spm_stapo_02.DRS_ID; + UPDATE seg_dev_resources,tmp_spm_stapo_02 SET DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=41, DRS_DEV_ATTENTION=przycz_kasac where seg_dev_resources.DRS_ID=tmp_spm_stapo_02.DRS_ID and przycz_kasac>=1400 and przycz_kasac<=1402; + UPDATE seg_dev_resources,tmp_spm_stapo_02 SET DRS_DEV_ATTENTION=przycz_kasac where seg_dev_resources.DRS_ID=tmp_spm_stapo_02.DRS_ID and przycz_kasac=1524; + update seg_wellsink_pump_eng_rel,seg_dev_resources set DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=40, DRS_DEV_ATTENTION='1401' where DRS_ID=RWS_PUP_DRS_ID and RWS_PUP_DRS_ID>0; + + update seg_dev_resources set DRS_BUY_DATE=null where DRS_BUY_DATE='0000-00-00'; + update seg_dev_resources set DRS_AVAILABLE_DATE=null where DRS_AVAILABLE_DATE='0000-00-00'; + update seg_dev_resources set DRS_CASSATION_DATE=null where DRS_CASSATION_DATE='0000-00-00'; + + drop temporary table if exists tmp_spm_stapo_00; + drop temporary table if exists tmp_spm_stapo_01; + drop temporary table if exists tmp_spm_stapo_02; + drop temporary table if exists tmp_spm_stapo_03; + drop temporary table if exists tmp_spm_stapo_04; + +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; + +-- +-- Final view structure for view `viw_mik_base_well_param` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_base_well_param`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`127.0.0.1` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_base_well_param` AS select `z_tmp_base_well_param`.`ID` AS `ID`,`z_tmp_base_well_param`.`BARIERA` AS `BARIERA`,`z_tmp_base_well_param`.`WELL` AS `WELL`,`z_tmp_base_well_param`.`WELL_TYPE` AS `WELL_TYPE`,`z_tmp_base_well_param`.`Q_VAL` AS `Q_VAL`,`z_tmp_base_well_param`.`HDM_VAL` AS `HDM_VAL`,`z_tmp_base_well_param`.`HSTM_VAL` AS `HSTM_VAL`,`z_tmp_base_well_param`.`HST0M_VAL` AS `HST0M_VAL`,case when `z_tmp_base_well_param`.`WELL_CONTROL` = 'MANUAL' then convert(`getWellWorkingTimeInDate`(`z_tmp_base_well_param`.`ID`,current_timestamp()) using utf8mb3) else `z_tmp_base_well_param`.`WELL_WORK_TIME` end AS `WELL_WORK_TIME`,case when `z_tmp_base_well_param`.`WELL_CONTROL` = 'MANUAL' then convert(`getWellPumpedWaterInDate`(`z_tmp_base_well_param`.`ID`,current_timestamp()) using utf8mb3) else `z_tmp_base_well_param`.`WELL_PUMPED_WATER` end AS `WELL_PUMPED_WATER`,`z_tmp_base_well_param`.`WELL_CONTROL` AS `WELL_CONTROL`,`z_tmp_base_well_param`.`PUP_NAME` AS `PUP_NAME`,`z_tmp_base_well_param`.`PUP_NO` AS `PUP_NO`,`z_tmp_base_well_param`.`SIL_NAME` AS `SIL_NAME`,`z_tmp_base_well_param`.`SIL_NO` AS `SIL_NO`,`getLastValue`(507,`z_tmp_base_well_param`.`ID`) AS `ONOFF_VAL` from `z_tmp_base_well_param` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_mik_piezometers` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_piezometers`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`127.0.0.1` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_piezometers` AS select `seg_reservoirs_piezometers`.`SRP_BARIERA` AS `SOD_UJ`,`seg_reservoirs_piezometers`.`SRP_NAME` AS `SRP_NAME`,`seg_object_hole_cards`.`OHC_DL_GEOGR` AS `OHC_DL_GEOGR`,`seg_object_hole_cards`.`OHC_SZER_GEOGR` AS `OHC_SZER_GEOGR`,`seg_object_hole_cards`.`OHC_RZEDNA_TEREN` AS `OHC_RZEDNA_TEREN`,`seg_object_hole_cards`.`OHC_RZEDNA_TERENU_ACT` AS `OHC_RZEDNA_TERENU_ACT`,`seg_object_hole_cards`.`OHC_RZEDNA_KRYZY` AS `OHC_RZEDNA_KRYZY`,`seg_object_hole_cards`.`OHC_GLEB_OSTAT` - (`seg_object_hole_cards`.`OHC_RZEDNA_TEREN` - `seg_object_hole_cards`.`OHC_RZEDNA_TERENU_ACT`) AS `OHC_GLEB_OSTAT`,`getLastValue`(210,`seg_dev_resources`.`DRS_ID`) AS `HST`,`seg_reservoirs_piezometers`.`SRP_SYS_TYPE` AS `SOD_DESC`,`seg_dev_resources`.`DRS_DEPARTMENT` AS `SOD_PLC` from (`seg_reservoirs_piezometers` join (`seg_object_hole_cards` left join `seg_dev_resources` on(`seg_dev_resources`.`DRS_ID` = `seg_object_hole_cards`.`OHC_DRS_ID`))) where `seg_object_hole_cards`.`OHC_NAME` = `seg_reservoirs_piezometers`.`SRP_NAME` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_mik_proby` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_proby`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_proby` AS select `tst_tests`.`TST_ID` AS `PROBA_ID`,(select `seg_pumps`.`PUP_NAME` from `seg_pumps` where `seg_pumps`.`PUP_ID` = `tst_tests`.`TST_PUP_ID` limit 1) AS `POMPA`,`tst_tests`.`TST_PUP_SN_NO` AS `NR_POMPA`,(select `seg_engines`.`ENG_NAME` from `seg_engines` where `seg_engines`.`ENG_ID` = `tst_tests`.`TST_ENG_ID` limit 1) AS `SILNIK`,`tst_tests`.`TST_ENG_SN_NO` AS `NR_SILNIK`,`tst_test_details`.`TSD_VAL_04` AS `Q`,`tst_test_details`.`TSD_VAL_08` AS `H`,`tst_test_details`.`TSD_VAL_14` AS `P`,`tst_test_details`.`TSD_VAL_18` AS `ETA` from (`tst_tests` join `tst_test_details`) where `tst_tests`.`TST_ID` = `tst_test_details`.`TSD_TST_ID` order by `tst_test_details`.`TSD_TST_ID`,`tst_test_details`.`TSD_MSR_STEP` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_mik_well_aggregates` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_aggregates`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`softspm`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_well_aggregates` AS select `softspm`.`seg_object_def`.`SOD_UJ` AS `SOD_UJ`,`softspm`.`seg_wells`.`WLL_NAME` AS `WLL_NAME`,(select `softspm`.`seg_pumps`.`PUP_NAME` from (`seg_dev_resources` left join `seg_pumps` on(`softspm`.`seg_pumps`.`PUP_ID` = `softspm`.`seg_dev_resources`.`DRS_DEV_ID` and `softspm`.`seg_dev_resources`.`DRS_DEV_TYPE` = 10)) where `softspm`.`seg_dev_resources`.`DRS_ID` = `softspm`.`seg_well_pump_eng_rel`.`RWL_PUP_DRS_ID`) AS `PUP_NAME`,(select `softspm`.`seg_dev_resources`.`DRS_SN_NUMBER` from (`seg_dev_resources` left join `seg_pumps` on(`softspm`.`seg_pumps`.`PUP_ID` = `softspm`.`seg_dev_resources`.`DRS_DEV_ID` and `softspm`.`seg_dev_resources`.`DRS_DEV_TYPE` = 10)) where `softspm`.`seg_dev_resources`.`DRS_ID` = `softspm`.`seg_well_pump_eng_rel`.`RWL_PUP_DRS_ID`) AS `PUP_NUMBER`,(select `softspm`.`seg_engines`.`ENG_NAME` from (`seg_dev_resources` left join `seg_engines` on(`softspm`.`seg_engines`.`ENG_ID` = `softspm`.`seg_dev_resources`.`DRS_DEV_ID` and `softspm`.`seg_dev_resources`.`DRS_DEV_TYPE` = 11)) where `softspm`.`seg_dev_resources`.`DRS_ID` = `softspm`.`seg_well_pump_eng_rel`.`RWL_ENG_DRS_ID`) AS `ENG_NAME`,(select `softspm`.`seg_dev_resources`.`DRS_SN_NUMBER` from (`seg_dev_resources` left join `seg_engines` on(`softspm`.`seg_engines`.`ENG_ID` = `softspm`.`seg_dev_resources`.`DRS_DEV_ID` and `softspm`.`seg_dev_resources`.`DRS_DEV_TYPE` = 11)) where `softspm`.`seg_dev_resources`.`DRS_ID` = `softspm`.`seg_well_pump_eng_rel`.`RWL_ENG_DRS_ID`) AS `ENG_NUMBER`,`softspm`.`seg_object_def`.`SOD_DESC` AS `SOD_DESC`,`softspm`.`seg_object_def`.`SOD_PLC` AS `SOD_PLC` from ((`seg_well_pump_eng_rel` left join `seg_wells` on(`softspm`.`seg_wells`.`WLL_ID` = `softspm`.`seg_well_pump_eng_rel`.`RWL_WLL_ID`)) left join `seg_object_def` on(`softspm`.`seg_object_def`.`SOD_NAME` = `softspm`.`seg_wells`.`WLL_NAME`)) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_mik_well_depth_mnt` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_depth_mnt`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`softspm`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_well_depth_mnt` AS select `f`.`DRD_DRS_ID` AS `DEV_ID`,`w`.`WLL_NAME` AS `WLL_NAME`,`f`.`DRD_VALUE` AS `DEPTH_MNT`,`f`.`DRD_ID` AS `ID` from (((`viw_spm_maxdrd_240` `x` join `seg_dev_resources_det` `f` on(`f`.`DRD_DRS_ID` = `x`.`DRS_ID` and `f`.`DRD_ID` = `x`.`MAX_DRD_ID`)) left join `seg_dev_resources` `r` on(`r`.`DRS_ID` = `x`.`DRS_ID`)) left join `seg_wells` `w` on(`w`.`WLL_ID` = `r`.`DRS_DEV_ID` and `r`.`DRS_DEV_TYPE` = 12)) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_mik_well_depth_wells` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_depth_wells`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`softspm`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_well_depth_wells` AS select `f`.`DRD_DRS_ID` AS `DEV_ID`,`w`.`WLL_NAME` AS `WLL_NAME`,`f`.`DRD_VALUE` AS `DEPTH_LS`,`f`.`DRD_ID` AS `ID` from (((`viw_spm_maxdrd_110` `x` join `seg_dev_resources_det` `f` on(`f`.`DRD_DRS_ID` = `x`.`DRS_ID` and `f`.`DRD_ID` = `x`.`MAX_DRD_ID`)) left join `seg_dev_resources` `r` on(`r`.`DRS_ID` = `x`.`DRS_ID`)) left join `seg_wells` `w` on(`w`.`WLL_ID` = `r`.`DRS_DEV_ID` and `r`.`DRS_DEV_TYPE` = 12)) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_mik_well_energy` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_well_energy`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`softspm`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_well_energy` AS select `softspm`.`rep_soap_well_energy`.`SWE_DRS_ID` AS `ID`,`softspm`.`rep_soap_well_energy`.`SWE_NAME` AS `WELL_NAME`,`softspm`.`rep_soap_well_energy`.`SWE_VALUE` AS `VALUE`,`softspm`.`rep_soap_well_energy`.`SWE_WORK_STATUS` AS `VALUE_STATUS`,`softspm`.`rep_soap_well_energy`.`SWE_AUDIT_DATE` AS `VALUE_DATE` from `rep_soap_well_energy` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_mik_wells` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_mik_wells`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`127.0.0.1` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_mik_wells` AS select `seg_object_hole_cards`.`OHC_UJ` AS `SOD_UJ`,`seg_wells`.`WLL_NAME` AS `WLL_NAME`,`seg_object_hole_cards`.`OHC_DL_GEOGR` AS `OHC_DL_GEOGR`,`seg_object_hole_cards`.`OHC_SZER_GEOGR` AS `OHC_SZER_GEOGR`,`seg_object_hole_cards`.`OHC_RZEDNA_TEREN` AS `OHC_RZEDNA_TEREN`,`seg_object_hole_cards`.`OHC_RZEDNA_TERENU_ACT` AS `OHC_RZEDNA_TERENU_ACT`,`seg_object_hole_cards`.`OHC_RZEDNA_KRYZY` AS `OHC_RZEDNA_KRYZY`,`seg_object_hole_cards`.`OHC_GLEB_OSTAT` - (`seg_object_hole_cards`.`OHC_RZEDNA_TEREN` - `seg_object_hole_cards`.`OHC_RZEDNA_TERENU_ACT`) AS `OHC_GLEB_OSTAT`,`seg_wells`.`WLL_SYS_TYPE` AS `SOD_DESC`,`seg_dev_resources`.`DRS_DEPARTMENT` AS `SOD_PLC`,`getLastValue`(235,`seg_dev_resources`.`DRS_ID`) AS `DR` from (`seg_wells` join (`seg_dev_resources` left join `seg_object_hole_cards` on(`seg_object_hole_cards`.`OHC_DRS_ID` = `seg_dev_resources`.`DRS_ID`))) where `seg_dev_resources`.`DRS_DEV_TYPE` = 12 and `seg_dev_resources`.`DRS_DEV_ID` = `seg_wells`.`WLL_ID` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_obj_name_id` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_obj_name_id`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`softspm`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_obj_name_id` AS select `softspm`.`seg_dev_resources`.`DRS_ID` AS `DRS_ID`,`softspm`.`seg_wells`.`WLL_ID` AS `OB_ID`,`softspm`.`seg_wells`.`WLL_NAME` AS `OB_NAME` from (`seg_wells` join `seg_dev_resources`) where `softspm`.`seg_dev_resources`.`DRS_DEV_ID` = `softspm`.`seg_wells`.`WLL_ID` and `softspm`.`seg_dev_resources`.`DRS_DEV_TYPE` = 12 union select `softspm`.`seg_dev_resources`.`DRS_ID` AS `DRS_ID`,`softspm`.`seg_reservoirs_piezometers`.`SRP_ID` AS `OB_ID`,`softspm`.`seg_reservoirs_piezometers`.`SRP_NAME` AS `OB_NAME` from (`seg_reservoirs_piezometers` join `seg_dev_resources`) where `softspm`.`seg_dev_resources`.`DRS_DEV_ID` = `softspm`.`seg_reservoirs_piezometers`.`SRP_ID` and `softspm`.`seg_dev_resources`.`DRS_DEV_TYPE` = `softspm`.`seg_reservoirs_piezometers`.`SRP_TYPE_DIC_ID` and `softspm`.`seg_dev_resources`.`DRS_DEV_TYPE` = 601 */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_pump_working_status` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_pump_working_status`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`127.0.0.1` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_pump_working_status` AS select `seg_dev_resources_det`.`DRD_ID` AS `DRD_ID`,`seg_dev_resources_det`.`DRD_DRS_ID` AS `DRD_DRS_ID`,`seg_dev_resources_det`.`DRD_RESOURCES_DETAIL` AS `DRD_RESOURCES_DETAIL`,`seg_dev_resources_det`.`DRD_VALUE` AS `DRD_VALUE`,`seg_dev_resources_det`.`DRD_DESCRIPTION` AS `DRD_DESCRIPTION`,`seg_dev_resources_det`.`DRD_EXPORT_SEGAP` AS `DRD_EXPORT_SEGAP`,`seg_dev_resources_det`.`DRD_AUDIT_USR` AS `DRD_AUDIT_USR`,`seg_dev_resources_det`.`DRD_AUDIT_DATE` AS `DRD_AUDIT_DATE` from `seg_dev_resources_det` where `seg_dev_resources_det`.`DRD_RESOURCES_DETAIL` = 507 union select `seg_dev_resources_det_his`.`DRD_ID` AS `DRD_ID`,`seg_dev_resources_det_his`.`DRD_DRS_ID` AS `DRD_DRS_ID`,`seg_dev_resources_det_his`.`DRD_RESOURCES_DETAIL` AS `DRD_RESOURCES_DETAIL`,`seg_dev_resources_det_his`.`DRD_VALUE` AS `DRD_VALUE`,`seg_dev_resources_det_his`.`DRD_DESCRIPTION` AS `DRD_DESCRIPTION`,`seg_dev_resources_det_his`.`DRD_EXPORT_SEGAP` AS `DRD_EXPORT_SEGAP`,`seg_dev_resources_det_his`.`DRD_AUDIT_USR` AS `DRD_AUDIT_USR`,`seg_dev_resources_det_his`.`DRD_AUDIT_DATE` AS `DRD_AUDIT_DATE` from `seg_dev_resources_det_his` where `seg_dev_resources_det_his`.`DRD_RESOURCES_DETAIL` = 507 */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_spm_maxdrd_110` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_spm_maxdrd_110`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`softspm`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_spm_maxdrd_110` AS select `softspm`.`seg_dev_resources_det`.`DRD_DRS_ID` AS `DRS_ID`,max(`softspm`.`seg_dev_resources_det`.`DRD_ID`) AS `MAX_DRD_ID` from `seg_dev_resources_det` where `softspm`.`seg_dev_resources_det`.`DRD_RESOURCES_DETAIL` = 110 group by `softspm`.`seg_dev_resources_det`.`DRD_DRS_ID` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_spm_maxdrd_240` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_spm_maxdrd_240`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`softspm`@`%` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_spm_maxdrd_240` AS select `softspm`.`seg_dev_resources_det`.`DRD_DRS_ID` AS `DRS_ID`,max(`softspm`.`seg_dev_resources_det`.`DRD_ID`) AS `MAX_DRD_ID` from `seg_dev_resources_det` where `softspm`.`seg_dev_resources_det`.`DRD_RESOURCES_DETAIL` = 240 group by `softspm`.`seg_dev_resources_det`.`DRD_DRS_ID` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; + +-- +-- Final view structure for view `viw_wells_exchanged` +-- + +/*!50001 DROP VIEW IF EXISTS `viw_wells_exchanged`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8mb3 */; +/*!50001 SET character_set_results = utf8mb3 */; +/*!50001 SET collation_connection = utf8mb3_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`127.0.0.1` SQL SECURITY DEFINER */ +/*!50001 VIEW `viw_wells_exchanged` AS select `seg_dev_resources`.`DRS_ID` AS `EXN_DRS_ID`,`seg_wells`.`WLL_NAME` AS `EXN_NAME`,`seg_wells`.`WLL_BARIERA` AS `EXN_BARIERA`,`seg_wells_exchanged`.`WLE_NR_EXCHANGE` AS `EXN_NO`,`seg_wells_exchanged`.`WLE_PUMP_NAME` AS `EXN_PUMP_NAME`,`seg_wells_exchanged`.`WLE_PUMP_NO` AS `EXN_PUMP_NO`,`seg_wells_exchanged`.`WLE_ENG_NAME` AS `EXN_ENG_NAME`,`seg_wells_exchanged`.`WLE_ENG_NO` AS `EXN_ENG_NO`,`seg_wells_exchanged`.`WLE_DATE_FROM` AS `EXN_DATE_FROM`,`seg_wells_exchanged`.`WLE_DATE_TO` AS `EXN_DATE_TO` from (`seg_wells_exchanged` join (`seg_wells` left join `seg_dev_resources` on(`seg_dev_resources`.`DRS_DEV_ID` = `seg_wells`.`WLL_ID` and `seg_dev_resources`.`DRS_DEV_TYPE` = 12))) where `seg_wells_exchanged`.`WLE_WLL_ID` = `seg_wells`.`WLL_ID` order by `seg_wells`.`WLL_NAME`,`seg_wells_exchanged`.`WLE_NR_EXCHANGE` desc */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2026-06-02 11:46:13 diff --git a/db_structure/20260604_softspm_his_nd.sql b/db_structure/20260604_softspm_his_nd.sql new file mode 100644 index 0000000..99d2a61 --- /dev/null +++ b/db_structure/20260604_softspm_his_nd.sql @@ -0,0 +1,2999 @@ +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19 Distrib 10.11.14-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: localhost Database: softspm_his +-- ------------------------------------------------------ +-- Server version 10.11.14-MariaDB-0+deb12u2 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `rec_dev_resources_piezo_16` +-- + +DROP TABLE IF EXISTS `rec_dev_resources_piezo_16`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_dev_resources_piezo_16` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_PIEZO_NAME` varchar(64) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=351155 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rec_dev_resources_piezo_17` +-- + +DROP TABLE IF EXISTS `rec_dev_resources_piezo_17`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_dev_resources_piezo_17` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_PIEZO_NAME` varchar(64) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=427512 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rec_dev_resources_piezo_18` +-- + +DROP TABLE IF EXISTS `rec_dev_resources_piezo_18`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_dev_resources_piezo_18` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_PIEZO_NAME` varchar(64) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=437705 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rec_dev_resources_piezo_19` +-- + +DROP TABLE IF EXISTS `rec_dev_resources_piezo_19`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_dev_resources_piezo_19` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_PIEZO_NAME` varchar(64) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=444652 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rec_dev_resources_piezo_20` +-- + +DROP TABLE IF EXISTS `rec_dev_resources_piezo_20`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_dev_resources_piezo_20` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_PIEZO_NAME` varchar(64) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=455630 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rec_dev_resources_piezo_21` +-- + +DROP TABLE IF EXISTS `rec_dev_resources_piezo_21`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_dev_resources_piezo_21` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_PIEZO_NAME` varchar(64) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=401311 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rec_dev_resources_piezo_list` +-- + +DROP TABLE IF EXISTS `rec_dev_resources_piezo_list`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_dev_resources_piezo_list` ( + `ID` bigint(12) DEFAULT NULL, + `DRD_PIEZO_NAME` varchar(64) DEFAULT NULL, + `DRD_STATUS` varchar(64) DEFAULT NULL, + `DRD_YEAR` varchar(64) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rec_piezo_resources_21full` +-- + +DROP TABLE IF EXISTS `rec_piezo_resources_21full`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rec_piezo_resources_21full` ( + `DRD_ID` bigint(12) NOT NULL AUTO_INCREMENT, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) NOT NULL DEFAULT '0', + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`DRD_ID`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_EXP_SEGAP` (`DRD_EXPORT_SEGAP`) +) ENGINE=InnoDB AUTO_INCREMENT=3140299102 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2014_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2014_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2014_q1` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2014_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2014_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2014_q2` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2014_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2014_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2014_q3` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2014_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2014_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2014_q4` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2015_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2015_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2015_q1` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2015_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2015_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2015_q2` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2015_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2015_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2015_q3` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2015_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2015_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2015_q4` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2016_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2016_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2016_q1` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2016_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2016_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2016_q2` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2016_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2016_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2016_q3` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2016_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2016_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2016_q4` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2017_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2017_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2017_q1` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2017_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2017_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2017_q2` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2017_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2017_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2017_q3` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2017_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2017_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2017_q4` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2018_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2018_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2018_q1` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2018_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2018_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2018_q2` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2018_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2018_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2018_q3` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2018_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2018_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2018_q4` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2019_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2019_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2019_q1` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2019_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2019_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2019_q2` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2019_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2019_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2019_q3` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2019_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2019_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2019_q4` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2020_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2020_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2020_q1` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2020_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2020_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2020_q2` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2020_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2020_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2020_q3` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2020_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2020_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2020_q4` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2021_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2021_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2021_q1` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2021_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2021_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2021_q2` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2021_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2021_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2021_q3` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2021_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2021_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2021_q4` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2022_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2022_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2022_q1` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2022_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2022_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2022_q2` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2022_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2022_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2022_q3` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2022_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2022_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2022_q4` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2023_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2023_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2023_q1` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2023_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2023_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2023_q2` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2023_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2023_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2023_q3` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2023_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2023_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2023_q4` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2024_q1` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2024_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2024_q1` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2024_q2` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2024_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2024_q2` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2024_q3` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2024_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2024_q3` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_2024_q4` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_2024_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_2024_q4` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(11) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + UNIQUE KEY `INX_RHD_ID` (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_his_data_everyday_his` +-- + +DROP TABLE IF EXISTS `rep_his_data_everyday_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_his_data_everyday_his` ( + `RHD_ID` bigint(12) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_RHD_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_RHD_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2014_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2014_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2014_q1` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2014_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2014_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2014_q2` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2014_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2014_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2014_q3` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2014_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2014_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2014_q4` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2015_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2015_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2015_q1` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2015_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2015_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2015_q2` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2015_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2015_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2015_q3` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2015_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2015_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2015_q4` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2016_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2016_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2016_q1` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2016_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2016_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2016_q2` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2016_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2016_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2016_q3` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2016_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2016_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2016_q4` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2017_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2017_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2017_q1` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2017_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2017_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2017_q2` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2017_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2017_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2017_q3` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2017_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2017_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2017_q4` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2018_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2018_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2018_q1` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2018_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2018_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2018_q2` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2018_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2018_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2018_q3` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2018_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2018_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2018_q4` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2019_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2019_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2019_q1` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2019_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2019_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2019_q2` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2019_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2019_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2019_q3` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2019_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2019_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2019_q4` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2020_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2020_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2020_q1` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2020_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2020_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2020_q2` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2020_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2020_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2020_q3` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2020_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2020_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2020_q4` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2021_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2021_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2021_q1` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2021_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2021_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2021_q2` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2021_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2021_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2021_q3` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2021_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2021_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2021_q4` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2022_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2022_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2022_q1` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2022_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2022_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2022_q2` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2022_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2022_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2022_q3` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2022_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2022_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2022_q4` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2023_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2023_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2023_q1` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2023_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2023_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2023_q2` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2023_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2023_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2023_q3` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2023_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2023_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2023_q4` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2024_q1` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2024_q1`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2024_q1` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2024_q2` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2024_q2`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2024_q2` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2024_q3` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2024_q3`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2024_q3` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_2024_q4` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_2024_q4`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_2024_q4` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime DEFAULT NULL, + UNIQUE KEY `INX_DRD_ID` (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_AUDIT_DATE` (`DRD_AUDIT_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_his` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_his` ( + `DRD_ID` bigint(12) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL COMMENT 'sys_dictionaries', + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + KEY `INX_DRD_AUDIT_DATE1` (`DRD_AUDIT_DATE`), + KEY `INX_DRD_DRS_ID1` (`DRD_DRS_ID`), + KEY `INX_DRD_RES_DET1` (`DRD_RESOURCES_DETAIL`), + KEY `INX_DRD_ID` (`DRD_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_column_fillings` +-- + +DROP TABLE IF EXISTS `seg_object_column_fillings`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_column_fillings` ( + `CLO_ID` int(11) NOT NULL DEFAULT 0, + `CLO_DRS_ID` int(11) DEFAULT NULL, + `CLO_COL_ID` int(11) DEFAULT NULL, + `CLO_NAME` varchar(128) DEFAULT NULL, + `CLO_FROM` double(9,2) NOT NULL DEFAULT 0.00, + `CLO_TO` double(9,2) NOT NULL DEFAULT 0.00, + `CLO_DESC` varchar(255) DEFAULT NULL, + `CLO_AUDIT_CU` varchar(64) DEFAULT NULL, + `CLO_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_column_filters` +-- + +DROP TABLE IF EXISTS `seg_object_column_filters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_column_filters` ( + `CLF_ID` int(11) NOT NULL DEFAULT 0, + `CLF_DRS_ID` int(11) DEFAULT NULL, + `CLF_COL_ID` int(11) DEFAULT NULL, + `CLF_NAME` varchar(128) DEFAULT NULL, + `CLF_FROM` double(9,2) NOT NULL DEFAULT 0.00, + `CLF_TO` double(9,2) NOT NULL DEFAULT 0.00, + `CLF_DESC` varchar(255) DEFAULT NULL, + `CLF_AUDIT_CU` varchar(64) DEFAULT NULL, + `CLF_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_columns` +-- + +DROP TABLE IF EXISTS `seg_object_columns`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_columns` ( + `COL_ID` int(11) NOT NULL DEFAULT 0, + `COL_DRS_ID` int(11) DEFAULT NULL, + `COL_NO` varchar(128) DEFAULT NULL, + `COL_NAME` varchar(128) DEFAULT NULL, + `COL_HORYZONT` varchar(16) DEFAULT NULL, + `COL_DIAMETER` float(9,2) DEFAULT NULL, + `COL_DEPTH` float(9,2) DEFAULT NULL, + `COL_DESC` varchar(255) DEFAULT NULL, + `COL_AUDIT_CU` varchar(64) DEFAULT NULL, + `COL_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_hole_cards` +-- + +DROP TABLE IF EXISTS `seg_object_hole_cards`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_hole_cards` ( + `OHC_ID` int(11) unsigned NOT NULL DEFAULT 0, + `OHC_DRS_ID` int(11) DEFAULT NULL, + `OHC_UJ` varchar(255) DEFAULT NULL, + `OHC_NAME` varchar(255) DEFAULT NULL, + `OHC_POZW` varchar(255) DEFAULT NULL, + `OHC_POZW_DATE` date DEFAULT NULL, + `OHC_WYKONAWCA` varchar(255) DEFAULT NULL, + `OHC_ROK_WYKON` varchar(16) DEFAULT NULL, + `OHC_ROZP_WIER_DATE` date DEFAULT NULL, + `OHC_ZAK_WIER_DATE` date DEFAULT NULL, + `OHC_DATA_ODDANIA` date DEFAULT NULL, + `OHC_ZDJECIE_EXPL_DATE` date DEFAULT NULL, + `OHC_URZ_WIERT` varchar(255) DEFAULT NULL, + `OHC_SPOS_WIERC` varchar(255) DEFAULT NULL, + `OHC_GLEB_ODWIER` varchar(16) DEFAULT NULL, + `OHC_GLEB_OSTAT` varchar(16) DEFAULT NULL, + `OHC_DL_GEOGR` varchar(16) DEFAULT NULL, + `OHC_SZER_GEOGR` varchar(16) DEFAULT NULL, + `OHC_RZEDNA_TEREN` float(9,2) DEFAULT NULL, + `OHC_RZEDNA_KRYZY` varchar(16) DEFAULT NULL, + `OHC_RZEDNA_TERENU_ACT` float(9,2) DEFAULT NULL, + `OHC_RZEDNA_DATE` date DEFAULT NULL, + `OHC_ZWIERC_NAWIERC` varchar(16) DEFAULT NULL, + `OHC_ZWIERC_USTAL` varchar(16) DEFAULT NULL, + `OHC_POZIOM_WODONOS` varchar(255) DEFAULT NULL, + `OHC_WYDAJ_EXPL` varchar(16) DEFAULT NULL, + `OHC_DEPR_EXPL` varchar(16) DEFAULT NULL, + `OHC_PROM_LEJA_DEPR` varchar(16) DEFAULT NULL, + `OHC_WYDAJ_WG_PW` varchar(16) DEFAULT NULL, + `OHC_PROFIL_LITO` text DEFAULT NULL, + `OHC_KONSTR_OTWOR` text DEFAULT NULL, + `OHC_Q1` varchar(16) DEFAULT NULL, + `OHC_S1` varchar(16) DEFAULT NULL, + `OHC_T1` varchar(16) DEFAULT NULL, + `OHC_Q2` varchar(16) DEFAULT NULL, + `OHC_S2` varchar(16) DEFAULT NULL, + `OHC_T2` varchar(16) DEFAULT NULL, + `OHC_Q3` varchar(16) DEFAULT NULL, + `OHC_S3` varchar(16) DEFAULT NULL, + `OHC_T3` varchar(16) DEFAULT NULL, + `OHC_Q4` varchar(16) DEFAULT NULL, + `OHC_S4` varchar(16) DEFAULT NULL, + `OHC_T4` varchar(16) DEFAULT NULL, + `OHC_Q5` varchar(16) DEFAULT NULL, + `OHC_S5` varchar(16) DEFAULT NULL, + `OHC_T5` varchar(16) DEFAULT NULL, + `OHC_C` varchar(16) DEFAULT NULL, + `OHC_QE` varchar(16) DEFAULT NULL, + `OHC_SE` varchar(16) DEFAULT NULL, + `OHC_WYD_JEDN` varchar(16) DEFAULT NULL, + `OHC_WSP_SPR_HYDRO` varchar(16) DEFAULT NULL, + `OHC_POZ_WOD_NO` varchar(255) DEFAULT NULL, + `OHC_POZ_DATE_TO` date DEFAULT NULL, + `OHC_POZ_Q_DOP` varchar(16) DEFAULT NULL, + `OHC_UWAGI` text DEFAULT NULL, + `OHC_PLC` varchar(32) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_object_hole_cards_his` +-- + +DROP TABLE IF EXISTS `seg_object_hole_cards_his`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_object_hole_cards_his` ( + `OHH_ID` int(11) NOT NULL DEFAULT 0, + `OHH_DRS_ID` int(11) DEFAULT NULL, + `OHH_UJ` varchar(32) DEFAULT NULL, + `OHH_NAME` varchar(128) DEFAULT NULL, + `OHH_DATE` date DEFAULT NULL, + `OHH_RZEDNA` varchar(32) DEFAULT NULL, + `OHH_ZASYP` varchar(32) DEFAULT NULL, + `OHH_ZMIAN_UMIEJ_LOCAL` varchar(255) DEFAULT NULL, + `OHH_ZMIAN_UMIEJ_REASON` varchar(255) DEFAULT NULL, + `OHH_PLC` varchar(32) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping events for database 'softspm_his' +-- + +-- +-- Dumping routines for database 'softspm_his' +-- +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2026-06-04 12:00:20 diff --git a/db_structure/20260604_softspm_rep_nd.sql b/db_structure/20260604_softspm_rep_nd.sql new file mode 100644 index 0000000..18a7d28 --- /dev/null +++ b/db_structure/20260604_softspm_rep_nd.sql @@ -0,0 +1,1094 @@ +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19 Distrib 10.11.14-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: localhost Database: softspm_rep +-- ------------------------------------------------------ +-- Server version 10.11.14-MariaDB-0+deb12u2 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `agregate_rep_002_tmp` +-- + +DROP TABLE IF EXISTS `agregate_rep_002_tmp`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `agregate_rep_002_tmp` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_chlorine` +-- + +DROP TABLE IF EXISTS `rep_002_avg_chlorine`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_chlorine` ( + `CLO_ID` int(11) NOT NULL AUTO_INCREMENT, + `CLO_CLO_VAL` double(11,2) DEFAULT NULL, + `CLO_DRS_ID` int(11) DEFAULT NULL, + `CLO_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`CLO_ID`), + KEY `INX_CLO_DRS_ID` (`CLO_DRS_ID`), + KEY `INX_CLO_DRS_DATE` (`CLO_DRS_ID`,`CLO_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=3071 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_chlorine_prev_years` +-- + +DROP TABLE IF EXISTS `rep_002_avg_chlorine_prev_years`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_chlorine_prev_years` ( + `CLO_ID` int(11) NOT NULL AUTO_INCREMENT, + `CLO_CLO_VAL` double(11,2) DEFAULT NULL, + `CLO_DRS_ID` int(11) DEFAULT NULL, + `CLO_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`CLO_ID`), + KEY `INX_CLO_DRS_ID` (`CLO_DRS_ID`), + KEY `INX_CLO_DRS_DATE` (`CLO_DRS_ID`,`CLO_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=1700 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_dyn_mirror` +-- + +DROP TABLE IF EXISTS `rep_002_avg_dyn_mirror`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_dyn_mirror` ( + `DMM_ID` int(11) NOT NULL AUTO_INCREMENT, + `DMM_HD_VAL` double(11,2) DEFAULT NULL, + `DMM_DRS_ID` int(11) DEFAULT NULL, + `DMM_DATE` date DEFAULT NULL, + PRIMARY KEY (`DMM_ID`), + KEY `INX_DMM_DRS_ID` (`DMM_DRS_ID`), + KEY `INX_DMM_DRS_DATE` (`DMM_DRS_ID`,`DMM_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=2621401 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_dyn_mirror_prev_years` +-- + +DROP TABLE IF EXISTS `rep_002_avg_dyn_mirror_prev_years`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_dyn_mirror_prev_years` ( + `DMM_ID` int(11) NOT NULL AUTO_INCREMENT, + `DMM_HD_VAL` double(11,2) DEFAULT NULL, + `DMM_DRS_ID` int(11) DEFAULT NULL, + `DMM_DATE` date DEFAULT NULL, + PRIMARY KEY (`DMM_ID`), + KEY `INX_DMM_DRS_ID` (`DMM_DRS_ID`), + KEY `INX_DMM_DRS_DATE` (`DMM_DRS_ID`,`DMM_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=2811304 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_efficiency` +-- + +DROP TABLE IF EXISTS `rep_002_avg_efficiency`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_efficiency` ( + `AVG_ID` int(11) NOT NULL AUTO_INCREMENT, + `AVG_Q_VAL` double(11,2) DEFAULT NULL, + `AVG_DRS_ID` int(11) DEFAULT NULL, + `AVG_DATE` date DEFAULT NULL, + PRIMARY KEY (`AVG_ID`), + KEY `INX_AVG_DRS_ID` (`AVG_DRS_ID`), + KEY `INX_AVG_DRS_DATE` (`AVG_DRS_ID`,`AVG_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=2621401 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_efficiency_prev_years` +-- + +DROP TABLE IF EXISTS `rep_002_avg_efficiency_prev_years`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_efficiency_prev_years` ( + `AVG_ID` int(11) NOT NULL AUTO_INCREMENT, + `AVG_Q_VAL` double(11,2) DEFAULT NULL, + `AVG_DRS_ID` int(11) DEFAULT NULL, + `AVG_DATE` date DEFAULT NULL, + PRIMARY KEY (`AVG_ID`), + KEY `INX_AVG_DRS_ID` (`AVG_DRS_ID`), + KEY `INX_AVG_DRS_DATE` (`AVG_DRS_ID`,`AVG_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=2816813 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_energy` +-- + +DROP TABLE IF EXISTS `rep_002_avg_energy`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_energy` ( + `UEC_ID` int(11) NOT NULL AUTO_INCREMENT, + `UEC_ENG_VAL` double(11,2) DEFAULT NULL, + `UEC_DRS_ID` int(11) DEFAULT NULL, + `UEC_DATE` date DEFAULT NULL, + PRIMARY KEY (`UEC_ID`), + KEY `INX_UEC_DRS_ID` (`UEC_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_energy_prev_years` +-- + +DROP TABLE IF EXISTS `rep_002_avg_energy_prev_years`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_energy_prev_years` ( + `UEC_ID` int(11) NOT NULL AUTO_INCREMENT, + `UEC_ENG_VAL` double(11,2) DEFAULT NULL, + `UEC_DRS_ID` int(11) DEFAULT NULL, + `UEC_DATE` date DEFAULT NULL, + PRIMARY KEY (`UEC_ID`), + KEY `INX_UEC_DRS_ID` (`UEC_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_mirror` +-- + +DROP TABLE IF EXISTS `rep_002_avg_mirror`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_mirror` ( + `MIR_ID` int(11) NOT NULL AUTO_INCREMENT, + `MIR_HST_VAL` double(11,2) DEFAULT NULL, + `MIR_DRS_ID` int(11) DEFAULT NULL, + `MIR_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`MIR_ID`), + KEY `INX_MIR_DRS_ID` (`MIR_DRS_ID`), + KEY `INX_MIR_DRS_DATE` (`MIR_DRS_ID`,`MIR_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=81919 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_mirror_prev_years` +-- + +DROP TABLE IF EXISTS `rep_002_avg_mirror_prev_years`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_mirror_prev_years` ( + `MIR_ID` int(11) NOT NULL AUTO_INCREMENT, + `MIR_HST_VAL` double(11,2) DEFAULT NULL, + `MIR_DRS_ID` int(11) DEFAULT NULL, + `MIR_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`MIR_ID`), + KEY `INX_MIR_DRS_ID` (`MIR_DRS_ID`), + KEY `INX_MIR_DRS_DATE` (`MIR_DRS_ID`,`MIR_DATE`) +) ENGINE=InnoDB AUTO_INCREMENT=46811 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_pump_working` +-- + +DROP TABLE IF EXISTS `rep_002_avg_pump_working`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_pump_working` ( + `WST_ID` int(11) NOT NULL AUTO_INCREMENT, + `WST_STATUS_VAL` varchar(8) DEFAULT NULL, + `WST_DRS_ID` int(11) DEFAULT NULL, + `WST_DATE` datetime DEFAULT NULL, + `WST_DESCRIPTION` varchar(255) DEFAULT NULL, + `WST_AUDIT_USR` varchar(64) DEFAULT NULL, + PRIMARY KEY (`WST_ID`), + KEY `INX_WST_DRS_ID` (`WST_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=458748 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_pump_working_prev_years` +-- + +DROP TABLE IF EXISTS `rep_002_avg_pump_working_prev_years`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_pump_working_prev_years` ( + `WST_ID` int(11) NOT NULL AUTO_INCREMENT, + `WST_STATUS_VAL` varchar(8) DEFAULT NULL, + `WST_DRS_ID` int(11) DEFAULT NULL, + `WST_DATE` datetime DEFAULT NULL, + `WST_DESCRIPTION` varchar(255) DEFAULT NULL, + `WST_AUDIT_USR` varchar(64) DEFAULT NULL, + PRIMARY KEY (`WST_ID`), + KEY `INX_WST_DRS_ID` (`WST_DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_water_temp` +-- + +DROP TABLE IF EXISTS `rep_002_avg_water_temp`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_water_temp` ( + `WTP_ID` int(11) NOT NULL AUTO_INCREMENT, + `WTP_WT_VAL` double(11,2) DEFAULT NULL, + `WTP_DRS_ID` int(11) DEFAULT NULL, + `WTP_DATE` date DEFAULT NULL, + PRIMARY KEY (`WTP_ID`), + KEY `INX_DMM_DRS_ID` (`WTP_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=1867748 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_avg_water_temp_prev_years` +-- + +DROP TABLE IF EXISTS `rep_002_avg_water_temp_prev_years`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_avg_water_temp_prev_years` ( + `WTP_ID` int(11) NOT NULL AUTO_INCREMENT, + `WTP_WT_VAL` double(11,2) DEFAULT NULL, + `WTP_DRS_ID` int(11) DEFAULT NULL, + `WTP_DATE` date DEFAULT NULL, + PRIMARY KEY (`WTP_ID`), + KEY `INX_DMM_DRS_ID` (`WTP_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=2431873 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_czer` +-- + +DROP TABLE IF EXISTS `rep_002_data_czer`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_czer` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_grud` +-- + +DROP TABLE IF EXISTS `rep_002_data_grud`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_grud` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_kwie` +-- + +DROP TABLE IF EXISTS `rep_002_data_kwie`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_kwie` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_lipi` +-- + +DROP TABLE IF EXISTS `rep_002_data_lipi`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_lipi` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_list` +-- + +DROP TABLE IF EXISTS `rep_002_data_list`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_list` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_luty` +-- + +DROP TABLE IF EXISTS `rep_002_data_luty`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_luty` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_maj` +-- + +DROP TABLE IF EXISTS `rep_002_data_maj`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_maj` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_marz` +-- + +DROP TABLE IF EXISTS `rep_002_data_marz`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_marz` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_pazd` +-- + +DROP TABLE IF EXISTS `rep_002_data_pazd`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_pazd` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_sier` +-- + +DROP TABLE IF EXISTS `rep_002_data_sier`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_sier` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_styc` +-- + +DROP TABLE IF EXISTS `rep_002_data_styc`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_styc` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_data_wrze` +-- + +DROP TABLE IF EXISTS `rep_002_data_wrze`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_data_wrze` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_SPM_WT` float(11,2) DEFAULT NULL, + `RHD_SPM_PW` float(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`RHD_ID`), + KEY `INX_REP002_DRS_ID` (`RHD_DRS_ID`), + KEY `INX_REP002_DATE` (`RHD_DATE`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_history_saved` +-- + +DROP TABLE IF EXISTS `rep_002_history_saved`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_history_saved` ( + `DHS_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `DHS_REPORT_NAME` varchar(128) DEFAULT NULL, + `DHS_DRS_ID` int(11) DEFAULT NULL, + `DHS_AUDIT_CU` varchar(64) DEFAULT NULL, + `DHS_AUDIT_CD` datetime DEFAULT NULL, + `DHS_AUDIT_DEP` varchar(64) DEFAULT NULL, + `DHS_BARIERA` varchar(64) DEFAULT NULL, + `DHS_WELL` varchar(64) DEFAULT NULL, + `DHS_AGREGAT` varchar(64) DEFAULT NULL, + `DHS_P_VAL` double(11,2) DEFAULT NULL, + `DHS_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `DHS_VM3_VAL` double(11,2) DEFAULT NULL, + `DHS_QS_VAL` double(11,3) DEFAULT NULL, + `DHS_HST0_VAL` double(11,2) DEFAULT NULL, + `DHS_HD_VAL` double(11,2) DEFAULT NULL, + `DHS_WTEMP_VAL` double(11,2) DEFAULT NULL, + `DHS_CL_VAL` double(11,2) DEFAULT NULL, + `DHS_DATE_FROM` datetime DEFAULT NULL, + `DHS_DATE_TO` datetime DEFAULT NULL, + PRIMARY KEY (`DHS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=95808 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_is_set_new_onoff_signals` +-- + +DROP TABLE IF EXISTS `rep_002_is_set_new_onoff_signals`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_is_set_new_onoff_signals` ( + `ISN_ID` int(11) NOT NULL AUTO_INCREMENT, + `ISN_STATUS_VAL` varchar(8) DEFAULT NULL, + `ISN_DRS_ID` int(11) DEFAULT NULL, + `ISN_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`ISN_ID`), + KEY `INX_ISN_DRS_ID` (`ISN_DRS_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_002_on_demand` +-- + +DROP TABLE IF EXISTS `rep_002_on_demand`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_002_on_demand` ( + `SOD_ID` int(11) NOT NULL AUTO_INCREMENT, + `SOD_START_DATE` datetime DEFAULT NULL, + `SOD_FINISH_DATE` datetime DEFAULT NULL, + `SOD_AUDIT_CU` varchar(32) DEFAULT NULL, + `SOD_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`SOD_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=795 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_003_data` +-- + +DROP TABLE IF EXISTS `rep_003_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_003_data` ( + `WLL_ID` int(11) DEFAULT NULL, + `DRS_ID` int(11) unsigned NOT NULL DEFAULT 0, + `WLL_BARIERA` varchar(32) DEFAULT NULL, + `WLL_NAME` varchar(255) DEFAULT NULL, + `WWD_ID` int(11) DEFAULT NULL, + `WWD_PARENT_ID` int(11) DEFAULT NULL, + `WWD_NAME` varchar(255) DEFAULT NULL, + `WLL_CAT_DIC_ID` int(11) DEFAULT NULL, + `Q_H` float(9,2) DEFAULT NULL, + `Q_MIN` float(9,3) DEFAULT NULL, + `DRS_DEPARTMENT` varchar(255) DEFAULT NULL, + `WLL_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_003_data_ready` +-- + +DROP TABLE IF EXISTS `rep_003_data_ready`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_003_data_ready` ( + `WLL_ID` int(11) DEFAULT NULL, + `DRS_ID` int(11) unsigned NOT NULL DEFAULT 0, + `WLL_BARIERA` varchar(32) DEFAULT NULL, + `WLL_NAME` varchar(255) DEFAULT NULL, + `WLL_CAT_DIC_ID` int(11) DEFAULT NULL, + `WI1_ID` int(11) DEFAULT NULL, + `PT1_ID` int(11) DEFAULT NULL, + `WI2_ID` int(11) DEFAULT NULL, + `PT2_ID` int(11) DEFAULT NULL, + `WI3_ID` int(11) DEFAULT NULL, + `PT3_ID` int(11) DEFAULT NULL, + `WI4_ID` int(11) DEFAULT NULL, + `PT4_ID` int(11) DEFAULT NULL, + `WI5_ID` int(11) DEFAULT NULL, + `PT5_ID` int(11) DEFAULT NULL, + `WI6_ID` int(11) DEFAULT NULL, + `PT6_ID` int(11) DEFAULT NULL, + `Q_H` float(9,2) DEFAULT NULL, + `Q_MIN` float(9,3) DEFAULT NULL, + `DRS_DEPARTMENT` varchar(255) DEFAULT NULL, + `WLL_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_004_data` +-- + +DROP TABLE IF EXISTS `rep_004_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_004_data` ( + `DRS_ID` int(11) unsigned NOT NULL, + `WLL_ID` int(11) DEFAULT NULL, + `WLL_BARIERA` varchar(32) DEFAULT NULL, + `WLL_NAME` varchar(255) DEFAULT NULL, + `WLL_CAT_DIC_ID` int(11) DEFAULT NULL, + `RWL_PUP_DRS_ID` int(11) DEFAULT NULL, + `PUP_NAME` varchar(128) DEFAULT NULL, + `RWL_ENG_DRS_ID` int(11) DEFAULT NULL, + `ENG_NAME` varchar(128) DEFAULT NULL, + `ENG_POWER` double(9,2) DEFAULT NULL, + `ONOFF` varchar(64) DEFAULT NULL, + `DRS_DEPARTMENT` varchar(255) DEFAULT NULL, + `AUDIT_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_005_data` +-- + +DROP TABLE IF EXISTS `rep_005_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_005_data` ( + `DRD_ID` int(11) NOT NULL DEFAULT 0, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`DRD_ID`), + KEY `INX_DRD_DRS_ID` (`DRD_DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_008_data` +-- + +DROP TABLE IF EXISTS `rep_008_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_008_data` ( + `RHD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `RHD_DRS_ID` int(11) DEFAULT NULL, + `RHD_DATE` datetime DEFAULT NULL, + `RHD_HST0_VAL` double(11,2) DEFAULT NULL, + `RHD_HST_VAL` double(11,2) DEFAULT NULL, + `RHD_HD_VAL` double(11,2) DEFAULT NULL, + `RHD_Q_VAL` double(11,2) DEFAULT NULL, + `RHD_P1_VAL` double(11,2) DEFAULT NULL, + `RHD_P2_VAL` double(11,2) DEFAULT NULL, + `RHD_I_VAL` double(11,2) DEFAULT NULL, + `RHD_U_VAL` double(11,2) DEFAULT NULL, + `RHD_PE_VAL` double(11,2) DEFAULT NULL, + `RHD_COS_VAL` double(11,2) DEFAULT NULL, + `RHD_PP_VAL` double(11,2) DEFAULT NULL, + `RHD_HH_VAL` double(11,2) DEFAULT NULL, + `RHD_VM3_VAL` double(11,2) DEFAULT NULL, + `RHD_WTEMP_VAL` double(11,2) DEFAULT NULL, + `RHD_DGN_VAL` int(3) DEFAULT NULL, + `RHD_WORK_TIME_VAL` double(11,2) DEFAULT NULL, + `RHD_AUDIT_CD` datetime DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_015_data` +-- + +DROP TABLE IF EXISTS `rep_015_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_015_data` ( + `kab_id` varchar(128) DEFAULT NULL, + `typ_id` varchar(128) DEFAULT NULL, + `stp_stamot_typ_m` varchar(128) DEFAULT '', + `stp_stamot_nr_m` varchar(128) DEFAULT '', + `stp_stamot_u` varchar(128) DEFAULT '', + `dl_ilosc` double(19,2) DEFAULT NULL, + `dl_ciezar` double(19,2) DEFAULT NULL, + `dl_date` datetime DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_015_stany` +-- + +DROP TABLE IF EXISTS `rep_015_stany`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_015_stany` ( + `R15_ID` int(11) unsigned NOT NULL AUTO_INCREMENT, + `PUP_ID` bigint(11) DEFAULT NULL, + `PUP_DRS_ID` bigint(11) DEFAULT NULL, + `PUP_TYPE` varchar(128) DEFAULT '', + `PUP_NO` varchar(128) DEFAULT '', + `ENG_ID` bigint(11) DEFAULT NULL, + `ENG_DRS_ID` bigint(11) DEFAULT NULL, + `ENG_TYPE` varchar(128) DEFAULT '', + `ENG_NO` varchar(128) DEFAULT '', + `ENG_VOLTAGE` bigint(11) DEFAULT NULL, + `CBL_ID` int(11) DEFAULT NULL, + `CBL_TYPE` varchar(128) DEFAULT NULL, + `CBL_DLUGOSC` double(9,2) DEFAULT NULL, + `CBL_OZNAK_01` varchar(128) DEFAULT NULL, + `CBL_OZNAK_02` varchar(128) DEFAULT NULL, + PRIMARY KEY (`R15_ID`), + KEY `INX_ECB_ID` (`CBL_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=3110 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `rep_well_counter` +-- + +DROP TABLE IF EXISTS `rep_well_counter`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `rep_well_counter` ( + `WLC_ID` int(11) NOT NULL AUTO_INCREMENT, + `WLC_OPT` int(11) DEFAULT NULL, + `WLC_BASE` int(11) DEFAULT NULL, + `WLC_INNE` int(11) DEFAULT NULL, + `WLC_TOTAL` int(11) DEFAULT NULL, + `WLC_DATE` datetime DEFAULT NULL, + PRIMARY KEY (`WLC_ID`) +) ENGINE=InnoDB AUTO_INCREMENT=3254 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_dev_resources_det_dr` +-- + +DROP TABLE IF EXISTS `seg_dev_resources_det_dr`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_dev_resources_det_dr` ( + `DRD_ID` binary(0) DEFAULT NULL, + `DRD_DRS_ID` int(11) DEFAULT NULL, + `DRD_RESOURCES_DETAIL` int(11) DEFAULT NULL, + `DRD_VALUE` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `DRD_DESCRIPTION` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `DRD_EXPORT_SEGAP` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `DRD_AUDIT_USR` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `DRD_AUDIT_DATE` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `seg_wells_manual_work_syndis_dr` +-- + +DROP TABLE IF EXISTS `seg_wells_manual_work_syndis_dr`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `seg_wells_manual_work_syndis_dr` ( + `SLA_ID` binary(0) DEFAULT NULL, + `SLA_WLL_ID` int(11) DEFAULT NULL, + `SLA_DRS_ID` int(11) DEFAULT NULL, + `SLA_NAME` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `SLA_WORK_STATUS` varchar(16) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, + `SLA_DATETIME` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `SLA_AUDIT_CD` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `syndis_quality_data` +-- + +DROP TABLE IF EXISTS `syndis_quality_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `syndis_quality_data` ( + `SQD_ID` int(11) unsigned NOT NULL DEFAULT 0, + `SQD_DRS_ID` int(11) DEFAULT NULL, + `SQD_OBJECT_NAME` varchar(64) DEFAULT NULL, + `SQD_VAL_Q` float(9,2) DEFAULT NULL, + `SQD_FLG_Q` varchar(32) DEFAULT NULL, + `SQD_VAL_P1` float(9,2) DEFAULT NULL, + `SQD_FLG_P1` varchar(32) DEFAULT NULL, + `SQD_VAL_P2` float(9,2) DEFAULT NULL, + `SQD_FLG_P2` varchar(32) DEFAULT NULL, + `SQD_VAL_I` float(9,2) DEFAULT NULL, + `SQD_FLG_I` varchar(32) DEFAULT NULL, + `SQD_VAL_U` float(9,2) DEFAULT NULL, + `SQD_FLG_U` varchar(32) DEFAULT NULL, + `SQD_VAL_CF` float(9,2) DEFAULT NULL, + `SQD_FLG_CF` varchar(32) DEFAULT NULL, + `SQD_VAL_PE` float(9,2) DEFAULT NULL, + `SQD_FLG_PE` varchar(32) DEFAULT NULL, + `SQD_VAL_PP` float(9,2) DEFAULT NULL, + `SQD_FLG_PP` varchar(32) DEFAULT NULL, + `SQD_VAL_HH` float(9,2) DEFAULT NULL, + `SQD_FLG_HH` varchar(32) DEFAULT NULL, + `SQD_VAL_HD` float(9,2) DEFAULT NULL, + `SQD_FLG_HD` varchar(32) DEFAULT NULL, + `SQD_VAL_ONOFF` int(11) DEFAULT NULL, + `SQD_FLG_ONOFF` varchar(32) DEFAULT NULL, + `SQD_AUDIT_CD` datetime DEFAULT NULL, + PRIMARY KEY (`SQD_ID`), + KEY `INX_SQD_DRS_ID` (`SQD_DRS_ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping events for database 'softspm_rep' +-- + +-- +-- Dumping routines for database 'softspm_rep' +-- +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2026-06-04 12:00:06 diff --git a/dbaccess.php b/dbaccess.php new file mode 100644 index 0000000..0f36b77 --- /dev/null +++ b/dbaccess.php @@ -0,0 +1,15 @@ +<?php +//$db_host="10.0.0.97"; +//$db_user="softspm"; +//$db_user_pass="17c4b253b11c0c9d937cdec26f9944f7"; +//$db_name="softspm"; + +$db_host="localhost"; +//$db_host="91.196.51.170"; + +$db_user="spm_local"; +$db_user_pass="ff8efe59e7265fe9680b0c325e44cb53"; +//$db_name="new_pge";//"pge"; +$db_name="softspm";//"pge"; + +?> diff --git a/debina_time_water.php b/debina_time_water.php new file mode 100644 index 0000000..30d8f77 --- /dev/null +++ b/debina_time_water.php @@ -0,0 +1,132 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Bad SYNDIS to SoftSPM</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +<meta http-equiv="Refresh" content="3" /> + +</head> +<body> +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +require_once('./polynomial/PolynomialRegression.php' ); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + + + +?> + +<h1>Przeliczanie czasu pracy oraz ilości wypompowanej wody dla Wysadu solnego DĘBINA</h1> + +<?php + +//studnie +//$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday,seg_dev_resources where DRS_ID=RHD_DRS_ID and DRS_DEPARTMENT='Dębina' and (RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) limit 300"); +$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday,seg_dev_resources where DRS_ID=RHD_DRS_ID and DRS_DEPARTMENT='Dębina' and RHD_Q_VAL>0 and RHD_DATE>=ADDDATE(now(), INTERVAL -12 HOUR) and (RHD_SPM_WT=0 or RHD_SPM_WT is null or RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) limit 100"); +for($i=0; $i<count($wellArray); $i++) +{ + if ($wellArray[$i]['RHD_Q_VAL']>0 || $wellArray[$i]['RHD_I_VAL']>0) + { + if (substr($wellArray[$i]['RHD_DATE'],5,2)=='09') $tbaName = "rep_002_data_wrze"; + elseif (substr($wellArray[$i]['RHD_DATE'],5,2)=='10') $tbaName = "rep_002_data_pazd"; + elseif (substr($wellArray[$i]['RHD_DATE'],5,2)=='11') $tbaName = "rep_002_data_list"; + elseif (substr($wellArray[$i]['RHD_DATE'],5,2)=='12') $tbaName = "rep_002_data_grud"; + else $tbaName = "rep_002_data_grud"; + + unset($czasArray); + $czasArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where WLE_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."' and (WLE_DATE_TO>='".$wellArray[$i]['RHD_DATE']."' or WLE_DATE_TO is null)"); + unset($czas); + if (strlen($czasArray[0]['WLE_DATE_TO']>8)) + { + if ( (strtotime($wellArray[$i]['RHD_DATE']) - strtotime($rep008_his_Array_01[$i]['WLE_DATE_TO']))>0 ) + $wellArray[$i]['RHD_DATE'] = $rep008_his_Array_01[$i]['WLE_DATE_TO']; + } + + $czas = liczCzasu($wellArray[$i]['RHD_DRS_ID'], $czasArray[0]['WLE_DATE_FROM'], $wellArray[$i]['RHD_DATE']); + $czas = round($czas/3600,2); + + //echo "Studnia: ".$wellArray[$i]['RHD_DRS_ID'].", data: ".$wellArray[$i]['RHD_DATE'].", CZAS=".$czas."<br>"; + + $woda=0; + if($czas>0) + { + $woda=sqlStringValue("select AVG(RHD_Q_VAL) RHD_Q_VAL from softspm_rep.".$tbaName." where RHD_Q_VAL>0 and RHD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and RHD_DATE>='".$czasArray[0]['WLE_DATE_FROM']."' and RHD_DATE<='".$wellArray[$i]['RHD_DATE']."'", "RHD_Q_VAL"); + if (empty($woda) || $woda<=0) + $woda=sqlStringValue("select RHD_Q_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and RHD_DATE<='".$wellArray[$i]['RHD_DATE']."')", "RHD_Q_VAL"); + } + + //echo "Studnia: ".$wellArray[$i]['RHD_DRS_ID'].", data: ".$wellArray[$i]['RHD_DATE'].", WODA=".($woda*$czas)."<br><br>"; + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo"<br>"; + + //czas + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=round(".$czas.",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + + //woda + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=round(".($woda*$czas).",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + + +/* + * + * +//UPDATE rep_his_data_everyday SET RHD_VM3_VAL=NULL,RHD_WORK_TIME_VAL=NULL, RHD_SPM_WT=NULL,RHD_SPM_PW=NULL WHERE RHD_DRS_ID in (select DRS_ID from seg_dev_resources where DRS_DEPARTMENT='Dębina' and DRS_DEV_TYPE=12) + unset($woda); + $woda = getGlobalPumpedWaterRangeDate($wellArray[$i]['RHD_DRS_ID'], $wellArray[$i]['RHD_DATE']); + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.",RHD_VM3_VAL=".$woda." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.",RHD_VM3_VAL=".$woda." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo"<br>"; + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=".$woda.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=".$woda.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo"<br>"; + + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=".$czas.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=".$czas.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo"<br>"; + echo"<br>"; +*/ + + + + } +} + + +?> + + + + +<?php +mysql_close($polacz); + +?> +</body> +</html> \ No newline at end of file diff --git a/dell_bledne_wylaczenia.php b/dell_bledne_wylaczenia.php new file mode 100644 index 0000000..042bafc --- /dev/null +++ b/dell_bledne_wylaczenia.php @@ -0,0 +1,106 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="./images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Update time and water</title> + + <!-- Bootstrap --> + <link href="./reports/bootstrap.min.css" rel="stylesheet"> + + + +</head> +<body> +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +?> + +<h1>Usuwanie podejżanych wpisów do tabeli załączeń</h1> + +<h2>Czyszczenie sąsiadujących ON/OFF - seg_dev_resources_det</h2> +<?php + +unset($tbArray); +$tbArray = sqlGetResAsArray("select * from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507) tb order by DRD_DRS_ID,DRD_AUDIT_DATE"); +$studnia=0; +$onoff_status=""; +for ($i=0; $i<count($tbArray); $i++) +{ + if ($studnia!=$tbArray[$i]['DRD_DRS_ID']) + { + $studnia=$tbArray[$i]['DRD_DRS_ID']; + } + + //echo "Studnia: ".$tbArray[$i]['DRD_DRS_ID'].", status: ".$tbArray[$i]['DRD_VALUE']."<br/>"; + + $poprzedni = $i-1; + if ($tbArray[$i]['DRD_VALUE']==$tbArray[$poprzedni]['DRD_VALUE'] && $studnia==$tbArray[$poprzedni]['DRD_DRS_ID']) + { + echo "Do usunięcia: ".$tbArray[$i]['DRD_ID']."<br/><br/>"; + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_ID=".$tbArray[$i]['DRD_ID']); + mysql_query("DELETE FROM seg_dev_resources_det_his WHERE DRD_ID=".$tbArray[$i]['DRD_ID']); + } +} + + +?> + + + + + +<h2>Czyszczenie nipotrzebnych ON/OFF oraz załączeń/wyłączeń - seg_wells_manual_work_syndis</h2> +<?php + + +unset($tbArray); +$tbArray = sqlGetResAsArray("select * from seg_wells_manual_work_syndis order by SLA_DRS_ID,SLA_DATETIME"); +$studnia=0; +$onoff_status=""; + +for ($i=0; $i<count($tbArray); $i++) +{ + if ($studnia!=$tbArray[$i]['SLA_DRS_ID']) + { + $studnia=$tbArray[$i]['SLA_DRS_ID']; + } + + $poprzedni = $i-1; + if ($tbArray[$i]['SLA_WORK_STATUS']==$tbArray[$poprzedni]['SLA_WORK_STATUS'] && $studnia==$tbArray[$poprzedni]['SLA_DRS_ID']) + { + echo "Do usunięcia: ".$tbArray[$i]['SLA_ID']."<br/><br/>"; + mysql_query("DELETE FROM seg_wells_manual_work_syndis WHERE SLA_ID=".$tbArray[$i]['SLA_ID']); + //mysql_query("UPDATE rep_his_data_everyday SET RHD_SPM_WT=NULL,RHD_SPM_PW=NULL WHERE RHD_DRS_ID=".$tbArray[$i]['SLA_DRS_ID']); + } +} + + + + + + + +?> + + + + +<?php +mysql_close($polacz); + +?> +</body> +</html> \ No newline at end of file diff --git a/docs/SoftSPM_Instrukcja_Lista_Dostepnych_Agregatow.html b/docs/SoftSPM_Instrukcja_Lista_Dostepnych_Agregatow.html new file mode 100644 index 0000000..7035e48 --- /dev/null +++ b/docs/SoftSPM_Instrukcja_Lista_Dostepnych_Agregatow.html @@ -0,0 +1,493 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> +<meta charset="UTF-8"> +<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> +<title>SoftSPM - Lista dostępnych agregatów: numeracja i licznik</title> +<link rel="shortcut icon" href="../images/SoftSPM.ico"> +<style> +/* ============================================================================ + * SoftSPM - instrukcja uzytkownika + * Kolorystyka i typografia zgodna ze strona logowania (style/login.css): + * turkus #29ABE2 / #0C7491, czerwien #C1272D, atrament #26323A. + * ========================================================================== */ +:root{ + --spm-teal:#29abe2; --spm-teal-dark:#0c7491; --spm-red:#c1272d; + --spm-ink:#26323a; --spm-muted:#7d8a93; --spm-line:#dfe6ea; + --spm-page:#f6f9fb; --spm-card:#ffffff; --spm-sunken:#eef3f6; + --spm-teal-bg:#eaf6fc; + --spm-ok:#1f8a53; --spm-ok-bg:#eaf6f0; + --spm-warn:#b3760a; --spm-warn-bg:#fdf5e6; + --spm-alarm:#c1272d; --spm-alarm-bg:#fceceb; + --font-sans:"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; + --font-mono:Consolas,"Courier New",monospace; + --radius:8px; + --shadow-sm:0 1px 2px rgba(38,50,58,.06),0 1px 3px rgba(38,50,58,.08); + --shadow-md:0 6px 16px rgba(12,116,145,.14); + --sidebar-w:290px; +} +*{box-sizing:border-box;margin:0;padding:0} +html{scroll-behavior:smooth} +body{font-family:var(--font-sans);background:var(--spm-page);color:var(--spm-ink);font-size:16px;line-height:1.6;-webkit-text-size-adjust:100%;text-size-adjust:100%} +h1,h2,h3,h4{color:var(--spm-ink);line-height:1.25;letter-spacing:-0.01em} +h1{font-size:32px;font-weight:800} +h2{font-size:25px;font-weight:700;margin-bottom:12px} +h3{font-size:18px;font-weight:600;margin-bottom:8px} +h4{font-size:15.5px;font-weight:600;margin-bottom:6px} +p{margin-bottom:12px;max-width:78ch} +ul,ol{margin:0 0 12px 22px} +li{margin-bottom:5px} +a{color:var(--spm-teal-dark)} +strong{color:var(--spm-ink);font-weight:600} +.mono{font-family:var(--font-mono)} +code{font-family:var(--font-mono);font-size:13.5px;background:var(--spm-sunken);border:1px solid var(--spm-line);border-radius:5px;padding:1px 6px;color:var(--spm-teal-dark)} +/* ---------------------------- uklad ------------------------------------- */ +.shell{display:flex;min-height:100vh} +.sidebar{ + width:var(--sidebar-w);flex-shrink:0;position:fixed;top:0;bottom:0;overflow-y:auto; + padding:26px 16px;z-index:20;color:#dbe8ee; + background: + radial-gradient(42% 42% at 96% 4%, rgba(255,255,255,.07) 0%, rgba(255,255,255,0) 70%), + radial-gradient(60% 55% at 22% 104%, rgba(41,171,226,.22) 0%, rgba(41,171,226,0) 60%), + linear-gradient(155deg,#0a5366 0%,#074152 45%,#052b39 75%,#04212c 100%); +} +.sidebar::before{ + content:"";position:absolute;inset:0;top:0;left:0;right:0;bottom:0;z-index:0;pointer-events:none; + background-image:radial-gradient(rgba(255,255,255,.06) 1px, rgba(255,255,255,0) 1.6px); + background-size:24px 24px;opacity:.5; + -webkit-mask-image:linear-gradient(to bottom, rgba(0,0,0,.9) 0%, rgba(0,0,0,0) 65%); + mask-image:linear-gradient(to bottom, rgba(0,0,0,.9) 0%, rgba(0,0,0,0) 65%); +} +.sidebar>*{position:relative;z-index:1} +.logo{padding:0 8px 18px;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:16px} +.logo img{display:block;width:170px;max-width:100%;height:auto;margin-bottom:12px} +.logo .kick{font-size:10.5px;letter-spacing:.28em;text-transform:uppercase;color:rgba(41,171,226,.9);font-weight:600} +.logo .sub{font-size:12.5px;color:#9fb6c1;margin-top:5px} +.toc a{display:flex;gap:10px;align-items:baseline;padding:9px 10px;border-radius:var(--radius);text-decoration:none;color:#c8dae3;font-size:14.5px;line-height:1.3} +.toc a .num{font-family:var(--font-mono);font-size:11.5px;color:#6f8d9b;width:20px;flex-shrink:0} +.toc a:hover{background:rgba(255,255,255,.06);color:#fff} +.toc a.active{background:rgba(41,171,226,.18);color:#fff;font-weight:600;box-shadow:inset 2px 0 0 var(--spm-teal)} +.toc a.active .num{color:var(--spm-teal)} +.side-actions{margin-top:18px;padding-top:16px;border-top:1px solid rgba(255,255,255,.12)} +.side-actions button{ + width:100%;font-family:var(--font-sans);font-size:13px;font-weight:600;padding:10px 12px; + border:0;border-radius:var(--radius);cursor:pointer;color:#fff; + background:linear-gradient(135deg,var(--spm-teal) 0%,var(--spm-teal-dark) 100%); + box-shadow:0 6px 16px rgba(12,116,145,.25);transition:filter .15s,box-shadow .15s} +.side-actions button:hover{filter:brightness(1.06)} +.side-actions button:focus-visible,.toc a:focus-visible,.navbtns a:focus-visible{outline:3px solid rgba(41,171,226,.45);outline-offset:2px} +.progress-track{position:fixed;top:0;left:var(--sidebar-w);right:0;height:3px;z-index:60} +.progress-bar{height:100%;width:0;background:linear-gradient(90deg,var(--spm-teal-dark),var(--spm-teal))} +main{margin-left:var(--sidebar-w);padding:44px 48px 80px;flex:1;max-width:calc(var(--sidebar-w) + 1060px);min-width:0} +.chapter{display:block} +.chapter + .chapter{margin-top:40px;padding-top:32px;border-top:1px solid var(--spm-line)} +html.js-nav .chapter{display:none;margin-top:0;padding-top:0;border-top:none} +html.js-nav .chapter.visible{display:block} +/* ---------------------------- pasek mobilny ----------------------------- */ +.mobilebar{display:none;position:sticky;top:0;z-index:40;background:#04212c;padding:10px 14px;align-items:center;gap:12px} +.mobilebar .burger{flex-shrink:0;width:42px;height:42px;border:1px solid rgba(255,255,255,.2);background:transparent;border-radius:var(--radius);cursor:pointer;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:0} +.mobilebar .burger span{display:block;width:18px;height:2px;background:#dbe8ee;border-radius:2px} +.mobilebar .mb-title{font-size:15px;font-weight:700;color:#fff;line-height:1.2;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.mobilebar .mb-title b{color:var(--spm-teal)} +.mobilebar .mb-step{margin-left:auto;font-family:var(--font-mono);font-size:12px;color:#9fb6c1;flex-shrink:0} +.backdrop{display:none;position:fixed;inset:0;background:rgba(6,18,26,.55);z-index:45} +.backdrop.show{display:block} +@media print{ + .sidebar,.navbtns,.progress-track,.mobilebar,.backdrop,.side-actions{display:none!important} + main{margin:0;padding:10mm;max-width:none} + .chapter{display:block!important;page-break-after:always} + .diagram svg{min-width:0!important} + body{background:#fff} +} +@media (max-width:1180px){ :root{--sidebar-w:250px} main{padding:36px 28px 70px} } +@media (max-width:900px){ + .shell{flex-direction:column} + .sidebar{position:static;width:100%} + html.js-nav .mobilebar{display:flex} + html.js-nav .sidebar{position:fixed;top:0;bottom:0;left:0;width:min(320px,86vw);transform:translateX(-100%);transition:transform .22s ease;z-index:50} + html.js-nav .sidebar.open{transform:none;box-shadow:var(--shadow-md)} + main{margin-left:0;padding:22px 16px 56px;max-width:none} + .progress-track{left:0} + h1{font-size:clamp(23px,6vw,30px)} + h2{font-size:clamp(20px,5vw,24px)} + .lead{font-size:16.5px} + .card{padding:16px} + .grid2,.grid3{grid-template-columns:1fr} + .navbtns{flex-wrap:wrap} + .navbtns a{flex:1 1 auto;text-align:center} + .diagram svg{min-width:660px} + .diagram .cap::before{content:"Rysunek przewija się w bok. ";color:var(--spm-teal-dark);font-weight:600} + table.tbl{min-width:520px} +} +@media (prefers-reduced-motion: reduce){ .sidebar{transition:none} html{scroll-behavior:auto} } +/* ---------------------------- komponenty -------------------------------- */ +.kicker{font-size:11px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--spm-teal);margin-bottom:10px} +.lead{font-size:18px;color:#46555f;max-width:74ch} +.card{background:var(--spm-card);border:1px solid var(--spm-line);border-radius:12px;padding:20px 22px;box-shadow:var(--shadow-sm);margin:18px 0} +.card h3{margin-top:0} +.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin:18px 0} +.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin:18px 0} +.grid2 .card,.grid3 .card{margin:0} +.stat{background:var(--spm-card);border:1px solid var(--spm-line);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow-sm);border-top:3px solid var(--spm-teal)} +.stat .v{font-family:var(--font-mono);font-size:26px;font-weight:700;color:var(--spm-teal-dark)} +.stat .l{font-size:13px;color:var(--spm-muted);margin-top:2px} +.pill{display:inline-block;font-size:12px;font-weight:600;padding:3px 11px;border-radius:999px;white-space:nowrap} +.pill.ok{background:var(--spm-ok-bg);color:var(--spm-ok)} +.pill.warn{background:var(--spm-warn-bg);color:var(--spm-warn)} +.pill.info{background:var(--spm-teal-bg);color:var(--spm-teal-dark)} +.pill.neutral{background:var(--spm-sunken);color:var(--spm-muted)} +.note{border-left:3px solid var(--spm-teal);background:var(--spm-teal-bg);border-radius:0 var(--radius) var(--radius) 0;padding:13px 16px;margin:16px 0;font-size:15px} +.note.warn{border-left-color:var(--spm-warn);background:var(--spm-warn-bg)} +.note.ok{border-left-color:var(--spm-ok);background:var(--spm-ok-bg)} +.note.alarm{border-left-color:var(--spm-alarm);background:var(--spm-alarm-bg)} +.note p:last-child{margin-bottom:0} +table.tbl{width:100%;border-collapse:collapse;font-size:14.5px;margin:14px 0;background:var(--spm-card)} +table.tbl th{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:#fff;background:var(--spm-teal-dark);font-weight:600;text-align:left;padding:9px 11px} +table.tbl td{padding:10px 11px;border-bottom:1px solid var(--spm-line);vertical-align:top} +table.tbl tr:nth-child(even) td{background:#fafcfd} +.tblwrap{overflow-x:auto;border:1px solid var(--spm-line);border-radius:var(--radius)} +.navbtns{display:flex;justify-content:space-between;gap:12px;margin-top:36px;padding-top:18px;border-top:1px solid var(--spm-line)} +.navbtns a{display:inline-block;padding:11px 20px;border-radius:var(--radius);text-decoration:none;font-weight:600;font-size:14.5px} +.navbtns a.next{background:linear-gradient(135deg,var(--spm-teal) 0%,var(--spm-teal-dark) 100%);color:#fff;box-shadow:0 6px 16px rgba(12,116,145,.25)} +.navbtns a.next:hover{filter:brightness(1.06)} +.navbtns a.prev{border:1px solid var(--spm-line);color:var(--spm-ink);background:var(--spm-card)} +.navbtns a.prev:hover{background:var(--spm-sunken)} +/* akordeon */ +.acc{border:1px solid var(--spm-line);border-radius:var(--radius);margin:10px 0;background:var(--spm-card)} +.acc>button{width:100%;font-family:var(--font-sans);font-size:15px;font-weight:600;color:var(--spm-ink);text-align:left;padding:13px 16px;background:none;border:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:10px} +.acc>button::after{content:"+";font-family:var(--font-mono);font-size:18px;color:var(--spm-teal)} +.acc.open>button::after{content:"–"} +.acc>.body{padding:2px 16px 14px;font-size:14.5px} +/* kroki */ +.steps{counter-reset:step;display:flex;flex-direction:column;margin:18px 0} +.step{display:flex;gap:16px;position:relative;padding-bottom:22px} +.step:last-child{padding-bottom:0} +.step::before{counter-increment:step;content:counter(step);flex-shrink:0;width:32px;height:32px;border-radius:999px;background:linear-gradient(135deg,var(--spm-teal) 0%,var(--spm-teal-dark) 100%);color:#fff;font-family:var(--font-mono);font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;z-index:1} +.step:not(:last-child)::after{content:"";position:absolute;left:15px;top:32px;bottom:0;width:2px;background:var(--spm-line)} +.step h4{margin-bottom:3px} +.step p{margin-bottom:0;font-size:14.5px} +/* rysunki */ +.diagram{background:var(--spm-card);border:1px solid var(--spm-line);border-radius:12px;padding:16px;margin:18px 0;overflow-x:auto;box-shadow:var(--shadow-sm)} +.diagram svg{display:block;margin:0 auto;max-width:100%;height:auto} +.diagram .cap{text-align:center;font-size:13px;color:var(--spm-muted);margin-top:10px} +svg text{font-family:var(--font-sans)} +svg .t-mono{font-family:var(--font-mono)} +.footer-sig{margin-top:40px;font-size:12.5px;color:var(--spm-muted);border-top:1px solid var(--spm-line);padding-top:14px} +.footer-sig b{color:var(--spm-red);font-weight:600} +/* bez JavaScriptu dokument czyta sie jako calosc */ +.side-actions{display:none} +html.js-nav .side-actions{display:block} +html.js-nav .acc>.body{display:none} +html.js-nav .acc.open>.body{display:block} +html.js-nav .acc>button::after{content:"+"} +html.js-nav .acc.open>button::after{content:"–"} +.acc>button::after{content:""} +</style> +<script>document.documentElement.className += ' js-nav';</script> +</head> +<body> +<div class="progress-track"><div class="progress-bar" id="progressBar"></div></div> +<header class="mobilebar"> + <button class="burger" id="navToggle" type="button" aria-label="Otwórz spis rozdziałów" aria-expanded="false" aria-controls="sidebar"><span></span><span></span><span></span></button> + <div class="mb-title">Soft<b>SPM</b> · lista agregatów</div> + <div class="mb-step" id="mbStep">01 / 05</div> +</header> +<div class="backdrop" id="navBackdrop" hidden></div> +<div class="shell"> +<nav class="sidebar" id="sidebar" aria-label="Spis rozdziałów"> + <div class="logo"> + <img src="../images/spm_logo_new.png" alt="SoftSPM"> + <div class="kick">Submersible Pumps Management</div> + <div class="sub">Instrukcja użytkownika</div> + </div> + <div class="toc" id="toc"> + <a href="#ch1"><span class="num">01</span>Co się zmieniło</a> + <a href="#ch2"><span class="num">02</span>Gdzie to zobaczysz</a> + <a href="#ch3"><span class="num">03</span>Jak czytać licznik</a> + <a href="#ch4"><span class="num">04</span>Dlaczego liczby się różnią</a> + <a href="#ch5"><span class="num">05</span>Pytania i odpowiedzi</a> + </div> + <div class="side-actions"> + <button id="printAll" type="button">Drukuj / zapisz PDF</button> + </div> +</nav> +<main id="content"> + +<!-- ============ 01 ============ --> +<section class="chapter" id="ch1"> + <div class="kicker">Rozdział 01</div> + <h1>Lista dostępnych agregatów - numeracja i licznik</h1> + <p class="lead" style="margin-top:14px">Ekran wyboru agregatu do zabudowy został uzupełniony o dwa drobne, ale praktyczne elementy: <strong>kolumnę Lp.</strong> z numeracją pozycji oraz <strong>licznik dostępnych agregatów w nagłówku listy</strong>. Zmiana jest wyłącznie prezentacyjna - sposób wyboru agregatu pozostaje bez zmian.</p> + + <div class="grid2"> + <div class="card"> + <h3>Skąd wziął się ten pomysł</h3> + <p style="margin-bottom:0">Zgłoszenie z eksploatacji: przy edycji zlecenia, w momencie wyboru agregatu do zabudowy, użytkownik chciał <strong>od razu widzieć, ile agregatów ma do dyspozycji</strong> - bez przewijania listy i liczenia wierszy.</p> + </div> + <div class="card"> + <h3>Co dokładnie się zmieniło</h3> + <ul style="margin-bottom:0"> + <li>Nagłówek brzmi teraz <strong>„Lista dostępnych agregatów (37)"</strong> - liczba w nawiasie to liczba pozycji.</li> + <li>Pierwsza kolumna tabeli to <strong>Lp.</strong> z numeracją od 1.</li> + </ul> + </div> + </div> + + <div class="diagram"> + <svg viewBox="0 0 860 258" width="860" height="258" role="img" aria-label="Wygląd listy dostępnych agregatów po zmianie"> + <!-- naglowek sekcji --> + <rect x="10" y="10" width="840" height="38" rx="6" fill="#0c7491"/> + <text x="26" y="35" fill="#ffffff" font-size="15" font-weight="700">Lista dostępnych agregatów (37)</text> + <circle cx="292" cy="29" r="15" fill="none" stroke="#29abe2" stroke-width="2"/> + <text x="600" y="34" fill="#bfe3f2" font-size="12">&#8592; licznik pozycji na liście</text> + + <!-- naglowek tabeli --> + <rect x="10" y="56" width="840" height="32" fill="#eef3f6"/> + <text x="30" y="77" fill="#0c7491" font-size="12" font-weight="700">Lp.</text> + <text x="86" y="77" fill="#7d8a93" font-size="12" font-weight="600">Typ pompy</text> + <text x="236" y="77" fill="#7d8a93" font-size="12" font-weight="600">Numer seryjny</text> + <text x="386" y="77" fill="#7d8a93" font-size="12" font-weight="600">Typ silnika</text> + <text x="536" y="77" fill="#7d8a93" font-size="12" font-weight="600">Numer seryjny</text> + <text x="686" y="77" fill="#7d8a93" font-size="12" font-weight="600">Napięcie [V]</text> + <line x1="66" y1="56" x2="66" y2="230" stroke="#29abe2" stroke-width="2"/> + + <!-- wiersze --> + <rect x="10" y="88" width="840" height="34" fill="#ffffff"/> + <text x="32" y="110" fill="#0c7491" font-size="13" font-weight="700" class="t-mono">1</text> + <text x="86" y="110" fill="#26323a" font-size="13">GC 2.02</text> + <text x="236" y="110" fill="#26323a" font-size="13">10 244</text> + <text x="386" y="110" fill="#26323a" font-size="13">SGS 132</text> + <text x="536" y="110" fill="#26323a" font-size="13">44 671</text> + <text x="686" y="110" fill="#26323a" font-size="13">500</text> + + <rect x="10" y="122" width="840" height="34" fill="#fafcfd"/> + <text x="32" y="144" fill="#0c7491" font-size="13" font-weight="700" class="t-mono">2</text> + <text x="86" y="144" fill="#26323a" font-size="13">GC 2.02</text> + <text x="236" y="144" fill="#26323a" font-size="13">10 318</text> + <text x="386" y="144" fill="#26323a" font-size="13">SGS 132</text> + <text x="536" y="144" fill="#26323a" font-size="13">44 702</text> + <text x="686" y="144" fill="#26323a" font-size="13">500</text> + + <rect x="10" y="156" width="840" height="34" fill="#ffffff"/> + <text x="32" y="178" fill="#0c7491" font-size="13" font-weight="700" class="t-mono">3</text> + <text x="86" y="178" fill="#26323a" font-size="13">GC 3.01</text> + <text x="236" y="178" fill="#26323a" font-size="13">11 007</text> + <text x="386" y="178" fill="#26323a" font-size="13">SGS 160</text> + <text x="536" y="178" fill="#26323a" font-size="13">45 118</text> + <text x="686" y="178" fill="#26323a" font-size="13">500</text> + + <rect x="10" y="190" width="840" height="34" fill="#fafcfd"/> + <text x="32" y="212" fill="#7d8a93" font-size="13" font-weight="700" class="t-mono">…</text> + <text x="86" y="212" fill="#7d8a93" font-size="13">…</text> + + <line x1="10" y1="230" x2="850" y2="230" stroke="#dfe6ea" stroke-width="1"/> + <text x="430" y="250" text-anchor="middle" fill="#7d8a93" font-size="12">Ostatni numer w kolumnie Lp. jest równy liczbie w nagłówku</text> + </svg> + <div class="cap">Rysunek 1. Wygląd listy po zmianie - kolumna Lp. i licznik w nagłówku.</div> + </div> + + <div class="note"> + <p><strong>Sposób pracy się nie zmienia.</strong> Agregat wybierasz tak jak dotychczas - klikając w dowolne miejsce wiersza. Numer w kolumnie Lp. służy wyłącznie do orientacji i ułatwia porozumienie się przez telefon („weź pozycję siódmą").</p> + </div> + + <div class="navbtns"><span></span><a class="next" href="#ch2">Dalej: Gdzie to zobaczysz</a></div> +</section> + +<!-- ============ 02 ============ --> +<section class="chapter" id="ch2"> + <div class="kicker">Rozdział 02</div> + <h2>Gdzie to zobaczysz</h2> + <p class="lead">Zmiana obejmuje wszystkie trzy listy wyboru agregatu, dostępne z poziomu zlecenia. Trafisz na nie klikając ikonę lupy przy polu z typem pompy lub silnika.</p> + + <div class="steps"> + <div class="step"> + <div> + <h4>Wybór po pompie</h4> + <p>Edycja lub tworzenie zlecenia &raquo; ikona lupy przy polu <strong>Typ i numer pompy</strong>. Lista posortowana według typu pompy.</p> + </div> + </div> + <div class="step"> + <div> + <h4>Wybór po silniku</h4> + <p>Edycja lub tworzenie zlecenia &raquo; ikona lupy przy polu <strong>Typ i numer silnika</strong>. Ta sama pula agregatów, posortowana według typu silnika.</p> + </div> + </div> + <div class="step"> + <div> + <h4>Agregaty eksploatowane</h4> + <p>Z listy wyboru po pompie &raquo; przycisk <strong>Pobierz z eksploatowanych agregatów</strong>. Osobna pula, opisana w rozdziale 04.</p> + </div> + </div> + </div> + + <div class="note ok"> + <p><strong>Nie trzeba niczego włączać.</strong> Zmiana jest widoczna od razu po wejściu na listę. Jeżeli nadal widzisz starą wersję ekranu, odśwież stronę w przeglądarce klawiszem <strong>Ctrl + F5</strong>.</p> + </div> + + <div class="navbtns"><a class="prev" href="#ch1">Wstecz</a><a class="next" href="#ch3">Dalej: Jak czytać licznik</a></div> +</section> + +<!-- ============ 03 ============ --> +<section class="chapter" id="ch3"> + <div class="kicker">Rozdział 03</div> + <h2>Jak czytać licznik</h2> + <p class="lead">Liczba w nagłówku odpowiada na jedno konkretne pytanie: ile pozycji zawiera lista, którą właśnie masz przed sobą.</p> + + <div class="grid3"> + <div class="stat"><div class="v">(37)</div><div class="l">tyle agregatów masz do wyboru na tej liście</div></div> + <div class="stat"><div class="v">(1)</div><div class="l">została ostatnia sztuka - warto zaplanować uzupełnienie</div></div> + <div class="stat"><div class="v">(0)</div><div class="l">brak agregatów spełniających kryteria tej listy</div></div> + </div> + + <div class="card"> + <h3>Co licznik uwzględnia</h3> + <ul style="margin-bottom:0"> + <li><strong>Twój oddział.</strong> Lista pokazuje wyłącznie agregaty z oddziału, w którym pracujesz - nie jest to stan całego przedsiębiorstwa.</li> + <li><strong>Agregaty już zarezerwowane.</strong> Pozycje przypisane do innego zlecenia są z listy wykluczone, więc licznik pokazuje to, co faktycznie wolne.</li> + <li><strong>Kompletność zestawu.</strong> Liczone są agregaty mające przypisaną zarówno pompę, jak i silnik.</li> + </ul> + </div> + + <div class="note warn"> + <p><strong>Licznik pokazał (0).</strong> Nie oznacza to błędu systemu. Najczęstsze przyczyny to: brak wolnych agregatów w Twoim oddziale, wszystkie dostępne pozycje przypisane już do innych zleceń, albo agregaty niekompletne - bez powiązanego silnika lub pompy. W takiej sytuacji sprawdź listę „Pobierz z eksploatowanych agregatów" albo skontaktuj się z osobą prowadzącą katalog agregatów.</p> + </div> + + <div class="navbtns"><a class="prev" href="#ch2">Wstecz</a><a class="next" href="#ch4">Dalej: Dlaczego liczby się różnią</a></div> +</section> + +<!-- ============ 04 ============ --> +<section class="chapter" id="ch4"> + <div class="kicker">Rozdział 04</div> + <h2>Dlaczego liczby na różnych listach się różnią</h2> + <p class="lead">To zachowanie zamierzone. Trzy listy odpowiadają na trzy różne pytania, więc naturalnie pokazują różną liczbę pozycji.</p> + + <div class="tblwrap"> + <table class="tbl"> + <thead> + <tr><th style="width:230px">Lista</th><th>Co zawiera</th><th style="width:190px">Kiedy jej użyć</th></tr> + </thead> + <tbody> + <tr> + <td><strong>Wybór po pompie</strong></td> + <td>Wolne agregaty z Twojego oddziału, z pominięciem tych przypisanych już do zleceń. Kolejność według typu pompy.</td> + <td>Gdy szukasz konkretnego typu pompy.</td> + </tr> + <tr> + <td><strong>Wybór po silniku</strong></td> + <td>Ta sama pula co obok, tylko posortowana według typu silnika. Liczba może się różnić, bo przypisanie do oddziału liczone jest od strony silnika.</td> + <td>Gdy szukasz konkretnego typu silnika.</td> + </tr> + <tr> + <td><strong>Pobierz z eksploatowanych agregatów</strong></td> + <td>Zupełnie inna pula - agregaty ze stacji prób o odpowiednim statusie. Nie jest tu stosowane wykluczanie pozycji przypisanych do zleceń.</td> + <td>Gdy na liście podstawowej nie ma nic odpowiedniego.</td> + </tr> + </tbody> + </table> + </div> + + <div class="note"> + <p><strong>Zasada w jednym zdaniu:</strong> licznik zawsze opisuje listę, którą właśnie oglądasz - a nie globalny stan magazynu agregatów.</p> + </div> + + <div class="note warn"> + <p><strong>Rozbieżność ze stanem faktycznym warto zgłaszać.</strong> Jeżeli licznik pokazuje inną liczbę niż stan rzeczywisty na magazynie, przyczyną jest zwykle nieaktualny wpis w katalogu agregatów, a nie sama lista. Zgłoś to administratorowi systemu, podając nazwę listy, oddział i liczbę, którą widzisz.</p> + </div> + + <div class="navbtns"><a class="prev" href="#ch3">Wstecz</a><a class="next" href="#ch5">Dalej: Pytania i odpowiedzi</a></div> +</section> + +<!-- ============ 05 ============ --> +<section class="chapter" id="ch5"> + <div class="kicker">Rozdział 05</div> + <h2>Pytania i odpowiedzi</h2> + <p class="lead">Krótkie odpowiedzi na pytania, które pojawiają się najczęściej po tej zmianie.</p> + + <div class="acc"> + <button type="button">Czy numer Lp. jest przypisany do agregatu na stałe?</button> + <div class="body"> + <p style="margin:0"><strong>Nie.</strong> Numer opisuje pozycję na aktualnie wyświetlanej liście. Gdy jakiś agregat zostanie zabudowany albo przypisany do zlecenia, zniknie z listy, a numery pozostałych pozycji się przesuną. Do trwałej identyfikacji agregatu służą typ i numer seryjny.</p> + </div> + </div> + + <div class="acc"> + <button type="button">Czy numer Lp. jest ten sam na liście „po pompie" i „po silniku"?</button> + <div class="body"> + <p style="margin:0"><strong>Nie.</strong> Obie listy są inaczej posortowane, więc ten sam agregat może mieć na nich różne numery. Przy przekazywaniu informacji innej osobie zawsze podawaj typ i numer seryjny, a nie samo Lp.</p> + </div> + </div> + + <div class="acc"> + <button type="button">Czy zmieniło się coś w sposobie wyboru agregatu?</button> + <div class="body"> + <p style="margin:0"><strong>Nie.</strong> Klikasz w wiersz dokładnie tak jak wcześniej. Nie zmieniły się także kryteria decydujące o tym, które agregaty trafiają na listę.</p> + </div> + </div> + + <div class="acc"> + <button type="button">Czy licznik odświeża się na bieżąco?</button> + <div class="body"> + <p style="margin:0">Liczba jest wyliczana w momencie otwarcia listy. Jeżeli w tym samym czasie inna osoba przypisze agregat do swojego zlecenia, zobaczysz aktualną liczbę dopiero po ponownym wejściu na listę.</p> + </div> + </div> + + <div class="acc"> + <button type="button">Widzę inną liczbę niż kolega z innego oddziału</button> + <div class="body"> + <p style="margin:0">To prawidłowe. Lista jest zawężona do oddziału, w którym pracujesz - wybieranego przy logowaniu lub wynikającego z przypisania konta. Każdy oddział widzi własną pulę agregatów.</p> + </div> + </div> + + <div class="footer-sig"> + <b>SoftSPM</b> - instrukcja użytkownika: numeracja i licznik na liście dostępnych agregatów. Zmiana obejmuje ekrany wyboru agregatu przy tworzeniu i edycji zlecenia. Uwagi dotyczące zgodności liczby agregatów ze stanem faktycznym kierować do administratora systemu. + </div> + + <div class="navbtns"><a class="prev" href="#ch4">Wstecz</a><span></span></div> +</section> + +</main> +</div> +<script> +(function(){ + var chapters = Array.prototype.slice.call(document.querySelectorAll('.chapter')); + var links = Array.prototype.slice.call(document.querySelectorAll('.toc a')); + var bar = document.getElementById('progressBar'); + var sidebar = document.getElementById('sidebar'); + var backdrop = document.getElementById('navBackdrop'); + var navToggle = document.getElementById('navToggle'); + var mbStep = document.getElementById('mbStep'); + function pad(n){ return (n < 10 ? '0' : '') + n; } + function setNav(open){ + sidebar.classList.toggle('open', open); + backdrop.classList.toggle('show', open); + backdrop.hidden = !open; + navToggle.setAttribute('aria-expanded', open ? 'true' : 'false'); + document.body.style.overflow = open ? 'hidden' : ''; + } + function closeNav(){ setNav(false); } + function show(id){ + var target = document.getElementById(id) || chapters[0]; + chapters.forEach(function(c){ c.classList.toggle('visible', c === target); }); + links.forEach(function(a){ a.classList.toggle('active', a.getAttribute('href') === '#' + target.id); }); + var idx = chapters.indexOf(target); + bar.style.width = ((idx + 1) / chapters.length * 100) + '%'; + if (mbStep) mbStep.textContent = pad(idx + 1) + ' / ' + pad(chapters.length); + closeNav(); + window.scrollTo({top:0, behavior:'auto'}); + } + function fromHash(){ show((location.hash || '#ch1').substring(1)); } + window.addEventListener('hashchange', fromHash); + fromHash(); + navToggle.addEventListener('click', function(){ setNav(!sidebar.classList.contains('open')); }); + backdrop.addEventListener('click', closeNav); + document.addEventListener('keydown', function(e){ if (e.key === 'Escape') closeNav(); }); + window.addEventListener('resize', function(){ if (window.innerWidth > 900) closeNav(); }); + document.getElementById('printAll').addEventListener('click', function(){ window.print(); }); + document.addEventListener('click', function(e){ + var ab = e.target.closest('.acc > button'); + if (ab){ ab.parentElement.classList.toggle('open'); } + }); +})(); +</script> +</body> +</html> diff --git a/docs/SoftSPM_Instrukcja_Synchronizacja_Uzytkownikow_SYNDIS.html b/docs/SoftSPM_Instrukcja_Synchronizacja_Uzytkownikow_SYNDIS.html new file mode 100644 index 0000000..e767538 --- /dev/null +++ b/docs/SoftSPM_Instrukcja_Synchronizacja_Uzytkownikow_SYNDIS.html @@ -0,0 +1,604 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> +<meta charset="UTF-8"> +<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> +<title>SoftSPM - Synchronizacja użytkowników z SYNDIS</title> +<link rel="shortcut icon" href="../images/SoftSPM.ico"> +<style> +/* ============================================================================ + * SoftSPM - instrukcja uzytkownika + * Kolorystyka i typografia zgodna ze strona logowania (style/login.css): + * turkus #29ABE2 / #0C7491, czerwien #C1272D, atrament #26323A. + * ========================================================================== */ +:root{ + --spm-teal:#29abe2; --spm-teal-dark:#0c7491; --spm-red:#c1272d; + --spm-ink:#26323a; --spm-muted:#7d8a93; --spm-line:#dfe6ea; + --spm-page:#f6f9fb; --spm-card:#ffffff; --spm-sunken:#eef3f6; + --spm-teal-bg:#eaf6fc; + --spm-ok:#1f8a53; --spm-ok-bg:#eaf6f0; + --spm-warn:#b3760a; --spm-warn-bg:#fdf5e6; + --spm-alarm:#c1272d; --spm-alarm-bg:#fceceb; + --font-sans:"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; + --font-mono:Consolas,"Courier New",monospace; + --radius:8px; + --shadow-sm:0 1px 2px rgba(38,50,58,.06),0 1px 3px rgba(38,50,58,.08); + --shadow-md:0 6px 16px rgba(12,116,145,.14); + --sidebar-w:290px; +} +*{box-sizing:border-box;margin:0;padding:0} +html{scroll-behavior:smooth} +body{font-family:var(--font-sans);background:var(--spm-page);color:var(--spm-ink);font-size:16px;line-height:1.6;-webkit-text-size-adjust:100%;text-size-adjust:100%} +h1,h2,h3,h4{color:var(--spm-ink);line-height:1.25;letter-spacing:-0.01em} +h1{font-size:32px;font-weight:800} +h2{font-size:25px;font-weight:700;margin-bottom:12px} +h3{font-size:18px;font-weight:600;margin-bottom:8px} +h4{font-size:15.5px;font-weight:600;margin-bottom:6px} +p{margin-bottom:12px;max-width:78ch} +ul,ol{margin:0 0 12px 22px} +li{margin-bottom:5px} +a{color:var(--spm-teal-dark)} +strong{color:var(--spm-ink);font-weight:600} +.mono{font-family:var(--font-mono)} +code{font-family:var(--font-mono);font-size:13.5px;background:var(--spm-sunken);border:1px solid var(--spm-line);border-radius:5px;padding:1px 6px;color:var(--spm-teal-dark)} +/* ---------------------------- uklad ------------------------------------- */ +.shell{display:flex;min-height:100vh} +.sidebar{ + width:var(--sidebar-w);flex-shrink:0;position:fixed;top:0;bottom:0;overflow-y:auto; + padding:26px 16px;z-index:20;color:#dbe8ee; + background: + radial-gradient(42% 42% at 96% 4%, rgba(255,255,255,.07) 0%, rgba(255,255,255,0) 70%), + radial-gradient(60% 55% at 22% 104%, rgba(41,171,226,.22) 0%, rgba(41,171,226,0) 60%), + linear-gradient(155deg,#0a5366 0%,#074152 45%,#052b39 75%,#04212c 100%); +} +.sidebar::before{ + content:"";position:absolute;inset:0;top:0;left:0;right:0;bottom:0;z-index:0;pointer-events:none; + background-image:radial-gradient(rgba(255,255,255,.06) 1px, rgba(255,255,255,0) 1.6px); + background-size:24px 24px;opacity:.5; + -webkit-mask-image:linear-gradient(to bottom, rgba(0,0,0,.9) 0%, rgba(0,0,0,0) 65%); + mask-image:linear-gradient(to bottom, rgba(0,0,0,.9) 0%, rgba(0,0,0,0) 65%); +} +.sidebar>*{position:relative;z-index:1} +.logo{padding:0 8px 18px;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:16px} +.logo img{display:block;width:170px;max-width:100%;height:auto;margin-bottom:12px} +.logo .kick{font-size:10.5px;letter-spacing:.28em;text-transform:uppercase;color:rgba(41,171,226,.9);font-weight:600} +.logo .sub{font-size:12.5px;color:#9fb6c1;margin-top:5px} +.toc a{display:flex;gap:10px;align-items:baseline;padding:9px 10px;border-radius:var(--radius);text-decoration:none;color:#c8dae3;font-size:14.5px;line-height:1.3} +.toc a .num{font-family:var(--font-mono);font-size:11.5px;color:#6f8d9b;width:20px;flex-shrink:0} +.toc a:hover{background:rgba(255,255,255,.06);color:#fff} +.toc a.active{background:rgba(41,171,226,.18);color:#fff;font-weight:600;box-shadow:inset 2px 0 0 var(--spm-teal)} +.toc a.active .num{color:var(--spm-teal)} +.side-actions{margin-top:18px;padding-top:16px;border-top:1px solid rgba(255,255,255,.12)} +.side-actions button{ + width:100%;font-family:var(--font-sans);font-size:13px;font-weight:600;padding:10px 12px; + border:0;border-radius:var(--radius);cursor:pointer;color:#fff; + background:linear-gradient(135deg,var(--spm-teal) 0%,var(--spm-teal-dark) 100%); + box-shadow:0 6px 16px rgba(12,116,145,.25);transition:filter .15s,box-shadow .15s} +.side-actions button:hover{filter:brightness(1.06)} +.side-actions button:focus-visible,.toc a:focus-visible,.navbtns a:focus-visible{outline:3px solid rgba(41,171,226,.45);outline-offset:2px} +.progress-track{position:fixed;top:0;left:var(--sidebar-w);right:0;height:3px;z-index:60} +.progress-bar{height:100%;width:0;background:linear-gradient(90deg,var(--spm-teal-dark),var(--spm-teal))} +main{margin-left:var(--sidebar-w);padding:44px 48px 80px;flex:1;max-width:calc(var(--sidebar-w) + 1060px);min-width:0} +.chapter{display:block} +.chapter + .chapter{margin-top:40px;padding-top:32px;border-top:1px solid var(--spm-line)} +html.js-nav .chapter{display:none;margin-top:0;padding-top:0;border-top:none} +html.js-nav .chapter.visible{display:block} +/* ---------------------------- pasek mobilny ----------------------------- */ +.mobilebar{display:none;position:sticky;top:0;z-index:40;background:#04212c;padding:10px 14px;align-items:center;gap:12px} +.mobilebar .burger{flex-shrink:0;width:42px;height:42px;border:1px solid rgba(255,255,255,.2);background:transparent;border-radius:var(--radius);cursor:pointer;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:0} +.mobilebar .burger span{display:block;width:18px;height:2px;background:#dbe8ee;border-radius:2px} +.mobilebar .mb-title{font-size:15px;font-weight:700;color:#fff;line-height:1.2;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.mobilebar .mb-title b{color:var(--spm-teal)} +.mobilebar .mb-step{margin-left:auto;font-family:var(--font-mono);font-size:12px;color:#9fb6c1;flex-shrink:0} +.backdrop{display:none;position:fixed;inset:0;background:rgba(6,18,26,.55);z-index:45} +.backdrop.show{display:block} +@media print{ + .sidebar,.navbtns,.progress-track,.mobilebar,.backdrop,.side-actions{display:none!important} + main{margin:0;padding:10mm;max-width:none} + .chapter{display:block!important;page-break-after:always} + .diagram svg{min-width:0!important} + body{background:#fff} +} +@media (max-width:1180px){ :root{--sidebar-w:250px} main{padding:36px 28px 70px} } +@media (max-width:900px){ + .shell{flex-direction:column} + .sidebar{position:static;width:100%} + html.js-nav .mobilebar{display:flex} + html.js-nav .sidebar{position:fixed;top:0;bottom:0;left:0;width:min(320px,86vw);transform:translateX(-100%);transition:transform .22s ease;z-index:50} + html.js-nav .sidebar.open{transform:none;box-shadow:var(--shadow-md)} + main{margin-left:0;padding:22px 16px 56px;max-width:none} + .progress-track{left:0} + h1{font-size:clamp(23px,6vw,30px)} + h2{font-size:clamp(20px,5vw,24px)} + .lead{font-size:16.5px} + .card{padding:16px} + .grid2,.grid3{grid-template-columns:1fr} + .navbtns{flex-wrap:wrap} + .navbtns a{flex:1 1 auto;text-align:center} + .diagram svg{min-width:660px} + .diagram .cap::before{content:"Rysunek przewija się w bok. ";color:var(--spm-teal-dark);font-weight:600} + table.tbl{min-width:520px} +} +@media (prefers-reduced-motion: reduce){ .sidebar{transition:none} html{scroll-behavior:auto} .flowline{animation:none} } +/* ---------------------------- komponenty -------------------------------- */ +.kicker{font-size:11px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--spm-teal);margin-bottom:10px} +.lead{font-size:18px;color:#46555f;max-width:74ch} +.card{background:var(--spm-card);border:1px solid var(--spm-line);border-radius:12px;padding:20px 22px;box-shadow:var(--shadow-sm);margin:18px 0} +.card h3{margin-top:0} +.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin:18px 0} +.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin:18px 0} +.grid2 .card,.grid3 .card{margin:0} +.stat{background:var(--spm-card);border:1px solid var(--spm-line);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow-sm);border-top:3px solid var(--spm-teal)} +.stat .v{font-family:var(--font-mono);font-size:26px;font-weight:700;color:var(--spm-teal-dark)} +.stat .l{font-size:13px;color:var(--spm-muted);margin-top:2px} +.pill{display:inline-block;font-size:12px;font-weight:600;padding:3px 11px;border-radius:999px;white-space:nowrap} +.pill.ok{background:var(--spm-ok-bg);color:var(--spm-ok)} +.pill.warn{background:var(--spm-warn-bg);color:var(--spm-warn)} +.pill.alarm{background:var(--spm-alarm-bg);color:var(--spm-alarm)} +.pill.info{background:var(--spm-teal-bg);color:var(--spm-teal-dark)} +.pill.neutral{background:var(--spm-sunken);color:var(--spm-muted)} +.note{border-left:3px solid var(--spm-teal);background:var(--spm-teal-bg);border-radius:0 var(--radius) var(--radius) 0;padding:13px 16px;margin:16px 0;font-size:15px} +.note.warn{border-left-color:var(--spm-warn);background:var(--spm-warn-bg)} +.note.ok{border-left-color:var(--spm-ok);background:var(--spm-ok-bg)} +.note.alarm{border-left-color:var(--spm-alarm);background:var(--spm-alarm-bg)} +.note p:last-child{margin-bottom:0} +table.tbl{width:100%;border-collapse:collapse;font-size:14.5px;margin:14px 0;background:var(--spm-card)} +table.tbl th{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:#fff;background:var(--spm-teal-dark);font-weight:600;text-align:left;padding:9px 11px} +table.tbl td{padding:10px 11px;border-bottom:1px solid var(--spm-line);vertical-align:top} +table.tbl tr:nth-child(even) td{background:#fafcfd} +.tblwrap{overflow-x:auto;border:1px solid var(--spm-line);border-radius:var(--radius)} +.navbtns{display:flex;justify-content:space-between;gap:12px;margin-top:36px;padding-top:18px;border-top:1px solid var(--spm-line)} +.navbtns a{display:inline-block;padding:11px 20px;border-radius:var(--radius);text-decoration:none;font-weight:600;font-size:14.5px} +.navbtns a.next{background:linear-gradient(135deg,var(--spm-teal) 0%,var(--spm-teal-dark) 100%);color:#fff;box-shadow:0 6px 16px rgba(12,116,145,.25)} +.navbtns a.next:hover{filter:brightness(1.06)} +.navbtns a.prev{border:1px solid var(--spm-line);color:var(--spm-ink);background:var(--spm-card)} +.navbtns a.prev:hover{background:var(--spm-sunken)} +/* akordeon */ +.acc{border:1px solid var(--spm-line);border-radius:var(--radius);margin:10px 0;background:var(--spm-card)} +.acc>button{width:100%;font-family:var(--font-sans);font-size:15px;font-weight:600;color:var(--spm-ink);text-align:left;padding:13px 16px;background:none;border:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:10px} +.acc>button::after{content:"+";font-family:var(--font-mono);font-size:18px;color:var(--spm-teal)} +.acc.open>button::after{content:"–"} +.acc>.body{padding:2px 16px 14px;font-size:14.5px} +/* kroki */ +.steps{counter-reset:step;display:flex;flex-direction:column;margin:18px 0} +.step{display:flex;gap:16px;position:relative;padding-bottom:22px} +.step:last-child{padding-bottom:0} +.step::before{counter-increment:step;content:counter(step);flex-shrink:0;width:32px;height:32px;border-radius:999px;background:linear-gradient(135deg,var(--spm-teal) 0%,var(--spm-teal-dark) 100%);color:#fff;font-family:var(--font-mono);font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;z-index:1} +.step:not(:last-child)::after{content:"";position:absolute;left:15px;top:32px;bottom:0;width:2px;background:var(--spm-line)} +.step h4{margin-bottom:3px} +.step p{margin-bottom:0;font-size:14.5px} +/* rysunki */ +.diagram{background:var(--spm-card);border:1px solid var(--spm-line);border-radius:12px;padding:16px;margin:18px 0;overflow-x:auto;box-shadow:var(--shadow-sm)} +.diagram svg{display:block;margin:0 auto;max-width:100%;height:auto} +.diagram .cap{text-align:center;font-size:13px;color:var(--spm-muted);margin-top:10px} +.flowline{stroke-dasharray:7 6;animation:dashmove 1.1s linear infinite} +@keyframes dashmove{to{stroke-dashoffset:-13}} +svg text{font-family:var(--font-sans)} +svg .t-mono{font-family:var(--font-mono)} +.footer-sig{margin-top:40px;font-size:12.5px;color:var(--spm-muted);border-top:1px solid var(--spm-line);padding-top:14px} +.footer-sig b{color:var(--spm-red);font-weight:600} +/* bez JavaScriptu dokument czyta sie jako calosc */ +.side-actions{display:none} +html.js-nav .side-actions{display:block} +html.js-nav .acc>.body{display:none} +html.js-nav .acc.open>.body{display:block} +html.js-nav .acc>button::after{content:"+"} +html.js-nav .acc.open>button::after{content:"–"} +.acc>button::after{content:""} +</style> +<script>document.documentElement.className += ' js-nav';</script> +</head> +<body> +<div class="progress-track"><div class="progress-bar" id="progressBar"></div></div> +<header class="mobilebar"> + <button class="burger" id="navToggle" type="button" aria-label="Otwórz spis rozdziałów" aria-expanded="false" aria-controls="sidebar"><span></span><span></span><span></span></button> + <div class="mb-title">Soft<b>SPM</b> · synchronizacja</div> + <div class="mb-step" id="mbStep">01 / 07</div> +</header> +<div class="backdrop" id="navBackdrop" hidden></div> +<div class="shell"> +<nav class="sidebar" id="sidebar" aria-label="Spis rozdziałów"> + <div class="logo"> + <img src="../images/spm_logo_new.png" alt="SoftSPM"> + <div class="kick">Submersible Pumps Management</div> + <div class="sub">Instrukcja użytkownika</div> + </div> + <div class="toc" id="toc"> + <a href="#ch1"><span class="num">01</span>Czym jest ta funkcja</a> + <a href="#ch2"><span class="num">02</span>Zanim zaczniesz</a> + <a href="#ch3"><span class="num">03</span>Krok po kroku</a> + <a href="#ch4"><span class="num">04</span>Opis ekranu</a> + <a href="#ch5"><span class="num">05</span>Regiony, profile, hasło</a> + <a href="#ch6"><span class="num">06</span>Komunikaty i problemy</a> + <a href="#ch7"><span class="num">07</span>Ograniczenia</a> + </div> + <div class="side-actions"> + <button id="printAll" type="button">Drukuj / zapisz PDF</button> + </div> +</nav> +<main id="content"> + +<!-- ============ 01 ============ --> +<section class="chapter" id="ch1"> + <div class="kicker">Rozdział 01</div> + <h1>Synchronizacja użytkowników z systemem SYNDIS</h1> + <p class="lead" style="margin-top:14px">Nowa funkcja w module <strong>Administracja &raquo; Zarządzanie użytkownikami</strong>. Pozwala pobrać z systemu SYNDIS pełną listę kont i jednym ekranem założyć w SoftSPM te, których jeszcze nie ma - od razu z nadanymi regionami i uprawnieniami.</p> + + <div class="grid3"> + <div class="stat"><div class="v">1</div><div class="l">przycisk uruchamiający całą operację</div></div> + <div class="stat"><div class="v">0</div><div class="l">zapisów do bazy przed Twoim potwierdzeniem</div></div> + <div class="stat"><div class="v">2</div><div class="l">ekrany: wybór kont i podsumowanie</div></div> + </div> + + <div class="card"> + <h3>Jaki problem rozwiązuje</h3> + <p>Do tej pory konto założone w SYNDIS <strong>nie pojawiało się w SoftSPM automatycznie</strong>. Za każdym razem trzeba było zgłosić to administratorowi, ręcznie wypełnić formularz nowego użytkownika, a następnie osobno ustawić hasło w formacie wymaganym przez logowanie z SYNDIS. Pominięcie tego ostatniego kroku kończyło się zgłoszeniem „nie mogę wejść do SoftSPM z Syndisa".</p> + <p style="margin-bottom:0">Nowa funkcja robi to wszystko w jednym przebiegu: sama porównuje obie bazy, sama nadaje poprawne hasło i pozwala od razu przypisać regiony oraz profile uprawnień.</p> + </div> + + <div class="diagram"> + <svg viewBox="0 0 900 205" width="900" height="205" role="img" aria-label="Schemat działania synchronizacji"> + <rect x="8" y="58" width="152" height="74" rx="10" fill="#0c7491"/> + <text x="84" y="88" text-anchor="middle" fill="#fff" font-size="15" font-weight="700">SYNDIS</text> + <text x="84" y="109" text-anchor="middle" fill="#bfe3f2" font-size="12">lista wszystkich kont</text> + + <line class="flowline" x1="164" y1="95" x2="240" y2="95" stroke="#29abe2" stroke-width="3"/> + <text x="202" y="84" text-anchor="middle" fill="#7d8a93" font-size="11" class="t-mono">SOAP</text> + + <rect x="244" y="58" width="176" height="74" rx="10" fill="#fff" stroke="#dfe6ea" stroke-width="1.5"/> + <text x="332" y="88" text-anchor="middle" fill="#26323a" font-size="14" font-weight="600">Porównanie</text> + <text x="332" y="109" text-anchor="middle" fill="#7d8a93" font-size="12">z bazą SoftSPM</text> + + <line class="flowline" x1="424" y1="95" x2="500" y2="95" stroke="#29abe2" stroke-width="3"/> + + <rect x="504" y="44" width="176" height="102" rx="10" fill="#fff" stroke="#dfe6ea" stroke-width="1.5"/> + <text x="592" y="74" text-anchor="middle" fill="#26323a" font-size="14" font-weight="600">Lista brakujących</text> + <text x="592" y="95" text-anchor="middle" fill="#7d8a93" font-size="12">wybierasz konta,</text> + <text x="592" y="113" text-anchor="middle" fill="#7d8a93" font-size="12">regiony i profile</text> + + <line class="flowline" x1="684" y1="95" x2="760" y2="95" stroke="#1f8a53" stroke-width="3"/> + <text x="722" y="84" text-anchor="middle" fill="#1f8a53" font-size="11" font-weight="600">Zapisz</text> + + <rect x="764" y="58" width="128" height="74" rx="10" fill="#1f8a53"/> + <text x="828" y="88" text-anchor="middle" fill="#fff" font-size="14" font-weight="700">Konta</text> + <text x="828" y="109" text-anchor="middle" fill="#d6efe1" font-size="12">utworzone</text> + + <text x="450" y="180" text-anchor="middle" fill="#7d8a93" font-size="12">Konta istniejące w SoftSPM są pomijane - nie zobaczysz ich na liście</text> + </svg> + <div class="cap">Rysunek 1. Przebieg synchronizacji od pobrania danych do zapisu.</div> + </div> + + <div class="note"> + <p><strong>Najważniejsza zasada.</strong> Samo otwarcie ekranu synchronizacji <strong>niczego nie zmienia w bazie</strong>. Dane są jedynie odczytywane i porównywane. Konta powstają dopiero po zaznaczeniu ich i kliknięciu przycisku <strong>Zapisz</strong>.</p> + </div> + + <div class="navbtns"><span></span><a class="next" href="#ch2">Dalej: Zanim zaczniesz</a></div> +</section> + +<!-- ============ 02 ============ --> +<section class="chapter" id="ch2"> + <div class="kicker">Rozdział 02</div> + <h2>Zanim zaczniesz</h2> + <p class="lead">Funkcja jest przeznaczona dla administratora systemu. Wymaga uprawnień do modułu użytkowników oraz działającego połączenia sieciowego z systemem SYNDIS.</p> + + <div class="grid2"> + <div class="card"> + <h3>Kto zobaczy przycisk</h3> + <ul style="margin-bottom:0"> + <li>Użytkownik z prawem <strong>edycji w module Zarządzanie użytkownikami</strong>.</li> + <li>Zalogowany na konto administratora systemu.</li> + </ul> + <p style="margin:10px 0 0">Jeżeli przycisk nie jest widoczny, oznacza to brak jednego z powyższych warunków - nie jest to usterka.</p> + </div> + <div class="card"> + <h3>Co musi działać</h3> + <ul style="margin-bottom:0"> + <li>Połączenie sieciowe z usługą SYNDIS - serwer SoftSPM musi ją widzieć.</li> + <li>Poprawnie ustawiony adres usługi - konfiguruje go administrator techniczny.</li> + </ul> + <p style="margin:10px 0 0">Brak połączenia objawia się czytelnym komunikatem, opisanym w rozdziale 06.</p> + </div> + </div> + + <div class="note warn"> + <p><strong>Dobra praktyka.</strong> Pierwsze uruchomienie wykonaj poza godzinami szczytu. Jeżeli usługa SYNDIS nie odpowiada, strona może ładować się nawet kilkadziesiąt sekund, zanim pokaże komunikat o braku połączenia.</p> + </div> + + <div class="navbtns"><a class="prev" href="#ch1">Wstecz</a><a class="next" href="#ch3">Dalej: Krok po kroku</a></div> +</section> + +<!-- ============ 03 ============ --> +<section class="chapter" id="ch3"> + <div class="kicker">Rozdział 03</div> + <h2>Krok po kroku</h2> + <p class="lead">Cała operacja to sześć czynności. Zakładanie kont odbywa się zbiorczo - w jednym przebiegu możesz utworzyć jedno konto albo kilkanaście.</p> + + <div class="steps"> + <div class="step"> + <div> + <h4>Wejdź na listę użytkowników</h4> + <p>Menu <strong>Administracja &raquo; Zarządzanie użytkownikami</strong>. Zobaczysz listę wszystkich kont istniejących w SoftSPM.</p> + </div> + </div> + <div class="step"> + <div> + <h4>Kliknij przycisk „Synchronizuj z SYNDIS"</h4> + <p>Znajduje się na dole ekranu, obok dotychczasowego przycisku <strong>Dodaj</strong>.</p> + </div> + </div> + <div class="step"> + <div> + <h4>Poczekaj na pobranie listy</h4> + <p>System łączy się z SYNDIS, pobiera wykaz kont i porównuje go z bazą SoftSPM. Na ekranie pojawią się <strong>wyłącznie konta, których w SoftSPM jeszcze nie ma</strong>. Konta już istniejące nie są pokazywane w ogóle.</p> + </div> + </div> + <div class="step"> + <div> + <h4>Przejrzyj i uzupełnij dane</h4> + <p>Każde konto ma osobną sekcję z nagłówkiem <span class="mono">login &raquo; pełna nazwa</span>. Sprawdź imię i nazwisko, uzupełnij adres e-mail i telefon, w razie potrzeby zmień status.</p> + </div> + </div> + <div class="step"> + <div> + <h4>Ustaw regiony i profile</h4> + <p>Regiony są wstępnie zaznaczone zgodnie z danymi z SYNDIS, a profil - zgodnie z uprawnieniami tam nadanymi. Możesz to dowolnie zmienić. Szczegóły w rozdziale 05.</p> + </div> + </div> + <div class="step"> + <div> + <h4>Zaznacz konta do utworzenia i kliknij „Zapisz"</h4> + <p>Pole <strong>Utwórz to konto</strong> jest domyślnie odznaczone przy każdej pozycji. Zapisane zostaną tylko te konta, które zaznaczysz. Po zapisie zobaczysz tabelę podsumowania.</p> + </div> + </div> + </div> + + <div class="note ok"> + <p><strong>Możesz przerwać w dowolnym momencie.</strong> Przycisk <strong>Anuluj</strong> wraca do listy użytkowników bez zapisywania czegokolwiek. To samo dotyczy zamknięcia karty przeglądarki.</p> + </div> + + <div class="navbtns"><a class="prev" href="#ch2">Wstecz</a><a class="next" href="#ch4">Dalej: Opis ekranu</a></div> +</section> + +<!-- ============ 04 ============ --> +<section class="chapter" id="ch4"> + <div class="kicker">Rozdział 04</div> + <h2>Opis ekranu - co oznaczają poszczególne pola</h2> + <p class="lead">Sekcja każdego konta dzieli się na dwie części: dane odczytane z SYNDIS (tylko do wglądu) oraz dane konta zakładanego w SoftSPM (do edycji).</p> + + <h3 style="margin-top:24px">Dane pobrane z SYNDIS</h3> + <div class="tblwrap"> + <table class="tbl"> + <thead><tr><th style="width:220px">Pole</th><th>Znaczenie</th></tr></thead> + <tbody> + <tr><td><strong>Login</strong></td><td>Nazwa konta w SYNDIS. Pole edytowalne, ale zmieniaj je wyłącznie po to, by poprawić uszkodzone znaki - musi być identyczne po obu stronach, inaczej nie zadziała logowanie z SYNDIS. Patrz ostrzeżenie o znakach zapytania poniżej.</td></tr> + <tr><td><strong>Pełna nazwa w SYNDIS</strong></td><td>Imię i nazwisko w postaci, w jakiej przekazuje je SYNDIS - w jednym polu. System sam próbuje rozdzielić je na imię i nazwisko.</td></tr> + <tr><td><strong>Uprawnienia w SYNDIS</strong></td><td>Lista uprawnień nadanych w SYNDIS. Ma charakter informacyjny - na jej podstawie system podpowiada profil w SoftSPM.</td></tr> + <tr><td><strong>Regiony w SYNDIS</strong></td><td>Numery regionów przekazane przez SYNDIS wraz z ich rozwinięciem na nazwy oddziałów używane w SoftSPM.</td></tr> + </tbody> + </table> + </div> + + <h3 style="margin-top:26px">Dane konta w SoftSPM</h3> + <div class="tblwrap"> + <table class="tbl"> + <thead><tr><th style="width:220px">Pole</th><th>Co zrobić</th></tr></thead> + <tbody> + <tr><td><strong>Utwórz to konto</strong></td><td>Zaznacz, jeśli konto ma powstać. Domyślnie odznaczone.</td></tr> + <tr><td><strong>Imię</strong> i <strong>Nazwisko</strong></td><td>Wypełnione automatycznie przez rozdzielenie pełnej nazwy po pierwszej spacji. Sprawdź i popraw - przy nazwiskach dwuczłonowych podział bywa błędny.</td></tr> + <tr><td><strong>e-mail</strong></td><td>Puste - SYNDIS nie przekazuje adresu. Warto uzupełnić, bo bez adresu nie zadziała funkcja resetu hasła, która wysyła nowe hasło pocztą.</td></tr> + <tr><td><strong>Telefon</strong></td><td>Puste - do uzupełnienia ręcznie, jeśli jest znany.</td></tr> + <tr><td><strong>Status</strong></td><td>Ustawiony na podstawie tego, czy konto jest aktywne w SYNDIS. Możesz zmienić na Nieaktywny lub Zablokowany.</td></tr> + <tr><td><strong>Hasło</strong></td><td>Pole informacyjne - pokazuje hasło, które zostanie nadane. Nie da się go zmienić na tym ekranie i jest to działanie zamierzone (rozdział 05).</td></tr> + <tr><td><strong>Regiony</strong></td><td>Pola wyboru z oddziałami. Wstępnie zaznaczone zgodnie z SYNDIS.</td></tr> + <tr><td><strong>Przypisz do profili</strong></td><td>Lista profili uprawnień SoftSPM wraz z opisami. Wstępnie zaznaczony jeden, sugerowany profil.</td></tr> + </tbody> + </table> + </div> + + <div class="note alarm"> + <p><strong>Znaki zapytania w loginie lub nazwisku.</strong> System SYNDIS przesyła część polskich liter jako znak zapytania - zamiast <span class="mono">mik-dębina</span> zobaczysz <span class="mono">mik-d?bina</span>. Zachowuje się wyłącznie litera <span class="mono">ó</span>, pozostałe (<span class="mono">ą ć ę ł ń ś ź ż</span>) są tracone jeszcze przed wysłaniem, więc SoftSPM nie ma jak ich odtworzyć.</p> + <p>Gdy tak się zdarzy, na górze ekranu pojawi się czerwone ostrzeżenie, a przy polu <strong>Login</strong> czerwony dopisek. <strong>Popraw wtedy login ręcznie</strong>, wpisując go dokładnie tak, jak brzmi w SYNDIS. Pole hasła pod spodem zaktualizuje się automatycznie.</p> + <p style="margin-bottom:0">Zapisanie konta z takim loginem oznacza, że logowanie z SYNDIS nigdy dla niego nie zadziała - nazwa nie zgodzi się z tą po stronie SYNDIS. Warto też zgłosić problem do dostawcy systemu SYNDIS, bo źródło błędu jest po jego stronie.</p> + </div> + + <div class="note"> + <p><strong>Po zapisie</strong> zobaczysz tabelę podsumowania z listą utworzonych kont: login, imię, nazwisko, nadane regiony, nadane profile i status. Warto ją przejrzeć - to potwierdzenie, że wszystko zostało zapisane zgodnie z zamiarem.</p> + </div> + + <div class="navbtns"><a class="prev" href="#ch3">Wstecz</a><a class="next" href="#ch5">Dalej: Regiony, profile, hasło</a></div> +</section> + +<!-- ============ 05 ============ --> +<section class="chapter" id="ch5"> + <div class="kicker">Rozdział 05</div> + <h2>Regiony, profile i hasło</h2> + <p class="lead">To trzy elementy, które decydują o tym, co użytkownik faktycznie zobaczy po zalogowaniu. Warto poświęcić im chwilę przed kliknięciem „Zapisz".</p> + + <div class="grid2"> + <div class="card"> + <h3>Regiony</h3> + <p>Region decyduje o tym, którego oddziału dane widzi użytkownik i dokąd trafia po wejściu z linku z SYNDIS. Do wyboru są <strong>P/Szczerców</strong>, <strong>Dębina</strong> i <strong>P/Bełchatów</strong>; można zaznaczyć kilka.</p> + <p style="margin-bottom:0">System zaznacza je wstępnie na podstawie numerów regionów z SYNDIS. Jeżeli w SYNDIS nie przypisano żadnego regionu, wszystkie pola pozostaną puste - <strong>warto wtedy zaznaczyć właściwy ręcznie</strong>.</p> + </div> + <div class="card"> + <h3>Profile</h3> + <p>Profil decyduje o tym, które strony systemu użytkownik zobaczy i gdzie może zapisywać zmiany. Można zaznaczyć kilka profili jednocześnie - uprawnienia się sumują.</p> + <p style="margin-bottom:0">Podpowiedź systemu jest prosta: konta z prawem edycji w SYNDIS dostają profil <strong>Operator</strong>, pozostałe <strong>Tylko odczyt</strong>. To jedynie propozycja - decyzja należy do Ciebie.</p> + </div> + </div> + + <div class="note warn"> + <p><strong>Konto bez profilu zaloguje się, ale nie zobaczy żadnej strony.</strong> Jeżeli odznaczysz wszystkie profile, użytkownik zgłosi się z pustym ekranem. Przy każdym koncie zostaw zaznaczony przynajmniej jeden profil.</p> + </div> + + <div class="card"> + <h3>Dlaczego hasła nie da się tu ustawić dowolnie</h3> + <p>Hasło nowego konta jest zawsze nadawane według stałego wzorca: <strong>login użytkownika, kropka, cyfry 123</strong> - na przykład dla loginu <span class="mono">kowalski</span> będzie to <span class="mono">kowalski.123</span>.</p> + <p>Nie jest to uproszczenie, tylko wymóg techniczny: <strong>dokładnie takiego hasła oczekuje mechanizm logowania z systemu SYNDIS</strong>. Konto z innym hasłem będzie działać przy logowaniu formularzem, ale wejście z linku z SYNDIS zakończy się powrotem do ekranu logowania - bez żadnego komunikatu wyjaśniającego przyczynę.</p> + <p style="margin-bottom:0">Ta sama zależność działa w drugą stronę: <strong>jeśli hasło zostanie później zmienione</strong> - na przykład przez funkcję resetu hasła - logowanie z SYNDIS dla tego konta przestanie działać.</p> + </div> + + <div class="note alarm"> + <p><strong>Zalecenie bezpieczeństwa.</strong> Hasło w tym formacie jest łatwe do odgadnięcia. Traktuj je jako hasło startowe i przekaż użytkownikowi, żeby korzystał z logowania przez SYNDIS. Jeżeli konto ma być używane wyłącznie przez formularz logowania SoftSPM, ustaw mu po utworzeniu własne hasło - pamiętając, że wyłączy to logowanie z SYNDIS.</p> + </div> + + <div class="navbtns"><a class="prev" href="#ch4">Wstecz</a><a class="next" href="#ch6">Dalej: Komunikaty i problemy</a></div> +</section> + +<!-- ============ 06 ============ --> +<section class="chapter" id="ch6"> + <div class="kicker">Rozdział 06</div> + <h2>Komunikaty i rozwiązywanie problemów</h2> + <p class="lead">Ekran synchronizacji komunikuje się prostymi zdaniami. Poniżej wszystkie sytuacje, które możesz napotkać, i co w nich zrobić.</p> + + <div class="acc"> + <button type="button">„Wszystkie konta z systemu SYNDIS istnieją już w SoftSPM. Brak kont do utworzenia."</button> + <div class="body"> + <p style="margin:0">Komunikat pozytywny - połączenie zadziałało, lista została pobrana i porównana, ale nie ma nic do dodania. Wróć do listy użytkowników przyciskiem <strong>Wróć do listy</strong>.</p> + </div> + </div> + + <div class="acc"> + <button type="button">„Nie udało się połączyć z systemem SYNDIS."</button> + <div class="body"> + <p>Pod komunikatem wyświetlana jest treść błędu oraz adres, pod który system próbował się połączyć. Najczęstsze przyczyny:</p> + <ul style="margin-bottom:0"> + <li>usługa SYNDIS jest wyłączona lub restartowana,</li> + <li>serwer SoftSPM nie ma dostępu sieciowego do tego adresu,</li> + <li>adres usługi jest nieaktualny - wymaga korekty przez administratora technicznego.</li> + </ul> + <p style="margin:10px 0 0">Przekaż administratorowi technicznemu treść komunikatu wraz z widocznym adresem - to wystarczy do zdiagnozowania przyczyny.</p> + </div> + </div> + + <div class="acc"> + <button type="button">„Nie zaznaczono żadnego konta do utworzenia."</button> + <div class="body"> + <p style="margin:0">Kliknięto <strong>Zapisz</strong> bez zaznaczenia pola <strong>Utwórz to konto</strong> przy żadnej pozycji. Wróć, zaznacz właściwe konta i zapisz ponownie.</p> + </div> + </div> + + <div class="acc"> + <button type="button">W podsumowaniu: „Konto już istnieje w systemie - pominięto."</button> + <div class="body"> + <p style="margin:0">Oznacza, że konto o tym loginie powstało już po pobraniu listy - na przykład założył je w tym czasie inny administrator. Konto nie zostało zduplikowane ani nadpisane. Nie wymaga to żadnego działania.</p> + </div> + </div> + + <div class="acc"> + <button type="button">Strona długo się ładuje po kliknięciu „Synchronizuj z SYNDIS"</button> + <div class="body"> + <p style="margin:0">System czeka na odpowiedź SYNDIS. Jeżeli usługa nie odpowiada, oczekiwanie może potrwać kilkadziesiąt sekund, po czym pojawi się komunikat o braku połączenia. Nie odświeżaj strony wielokrotnie - poczekaj na komunikat.</p> + </div> + </div> + + <div class="acc"> + <button type="button">Użytkownik został utworzony, ale „nic nie widzi" po zalogowaniu</button> + <div class="body"> + <p style="margin:0">Najczęściej oznacza konto bez przypisanego profilu. Wejdź w <strong>Administracja &raquo; Zarządzanie użytkownikami</strong>, otwórz konto, kliknij <strong>Modyfikuj</strong> i zaznacz właściwe profile.</p> + </div> + </div> + + <div class="acc"> + <button type="button">Użytkownik nie może wejść do SoftSPM z linku w SYNDIS</button> + <div class="body"> + <p style="margin:0">Sprawdź dwie rzeczy: czy login w SoftSPM jest identyczny jak w SYNDIS (co do znaku) oraz czy hasło konta nie zostało w międzyczasie zmienione lub zresetowane. Zmiana hasła wyłącza logowanie z SYNDIS - opisano to w rozdziale 05.</p> + </div> + </div> + + <div class="navbtns"><a class="prev" href="#ch5">Wstecz</a><a class="next" href="#ch7">Dalej: Ograniczenia</a></div> +</section> + +<!-- ============ 07 ============ --> +<section class="chapter" id="ch7"> + <div class="kicker">Rozdział 07</div> + <h2>Ograniczenia - czego funkcja nie robi</h2> + <p class="lead">Świadome ograniczenie zakresu jest tu celowe. Funkcja zakłada konta, ale nie ingeruje w to, co już istnieje.</p> + + <div class="grid2"> + <div class="card"> + <h3><span class="pill ok">Robi</span></h3> + <ul style="margin-bottom:0"> + <li>Pobiera pełny, aktualny wykaz kont z SYNDIS.</li> + <li>Porównuje go z bazą SoftSPM i pokazuje różnicę.</li> + <li>Zakłada wybrane konta z poprawnym hasłem.</li> + <li>Przypisuje regiony i profile uprawnień.</li> + </ul> + </div> + <div class="card"> + <h3><span class="pill neutral">Nie robi</span></h3> + <ul style="margin-bottom:0"> + <li>Nie aktualizuje kont już istniejących - ani nazwiska, ani statusu, ani uprawnień.</li> + <li>Nie usuwa i nie blokuje kont skasowanych w SYNDIS.</li> + <li>Nie działa automatycznie - uruchamiasz ją ręcznie, kiedy jest potrzebna.</li> + <li>Nie przenosi adresu e-mail ani telefonu, bo SYNDIS ich nie przekazuje.</li> + </ul> + </div> + </div> + + <div class="note"> + <p><strong>Zmiana uprawnień w SYNDIS nie przeniesie się do SoftSPM.</strong> Jeżeli istniejącemu użytkownikowi zmieniono w SYNDIS zakres uprawnień lub przypisanie do oddziału, odpowiednią zmianę trzeba wprowadzić w SoftSPM ręcznie - przez <strong>Modyfikuj</strong> na karcie użytkownika.</p> + </div> + + <div class="card"> + <h3>Kiedy warto uruchomić synchronizację</h3> + <ul style="margin-bottom:0"> + <li>Po zgłoszeniu, że w SYNDIS pojawił się nowy pracownik potrzebujący dostępu do SoftSPM.</li> + <li>Okresowo, na przykład raz w miesiącu - żeby wychwycić konta założone bez zgłoszenia.</li> + <li>Po większych zmianach kadrowych w obsłudze odwodnienia.</li> + </ul> + </div> + + <div class="footer-sig"> + <b>SoftSPM</b> - instrukcja użytkownika: synchronizacja kont z systemem SYNDIS. Dokument opisuje funkcję dostępną w module Administracja &raquo; Zarządzanie użytkownikami. W razie wątpliwości dotyczących adresu usługi SYNDIS lub uprawnień skontaktuj się z administratorem technicznym systemu. + </div> + + <div class="navbtns"><a class="prev" href="#ch6">Wstecz</a><span></span></div> +</section> + +</main> +</div> +<script> +(function(){ + var chapters = Array.prototype.slice.call(document.querySelectorAll('.chapter')); + var links = Array.prototype.slice.call(document.querySelectorAll('.toc a')); + var bar = document.getElementById('progressBar'); + var sidebar = document.getElementById('sidebar'); + var backdrop = document.getElementById('navBackdrop'); + var navToggle = document.getElementById('navToggle'); + var mbStep = document.getElementById('mbStep'); + function pad(n){ return (n < 10 ? '0' : '') + n; } + function setNav(open){ + sidebar.classList.toggle('open', open); + backdrop.classList.toggle('show', open); + backdrop.hidden = !open; + navToggle.setAttribute('aria-expanded', open ? 'true' : 'false'); + document.body.style.overflow = open ? 'hidden' : ''; + } + function closeNav(){ setNav(false); } + function show(id){ + var target = document.getElementById(id) || chapters[0]; + chapters.forEach(function(c){ c.classList.toggle('visible', c === target); }); + links.forEach(function(a){ a.classList.toggle('active', a.getAttribute('href') === '#' + target.id); }); + var idx = chapters.indexOf(target); + bar.style.width = ((idx + 1) / chapters.length * 100) + '%'; + if (mbStep) mbStep.textContent = pad(idx + 1) + ' / ' + pad(chapters.length); + closeNav(); + window.scrollTo({top:0, behavior:'auto'}); + } + function fromHash(){ show((location.hash || '#ch1').substring(1)); } + window.addEventListener('hashchange', fromHash); + fromHash(); + navToggle.addEventListener('click', function(){ setNav(!sidebar.classList.contains('open')); }); + backdrop.addEventListener('click', closeNav); + document.addEventListener('keydown', function(e){ if (e.key === 'Escape') closeNav(); }); + window.addEventListener('resize', function(){ if (window.innerWidth > 900) closeNav(); }); + document.getElementById('printAll').addEventListener('click', function(){ window.print(); }); + document.addEventListener('click', function(e){ + var ab = e.target.closest('.acc > button'); + if (ab){ ab.parentElement.classList.toggle('open'); } + }); +})(); +</script> +</body> +</html> diff --git a/export/bootstrap.min.css b/export/bootstrap.min.css new file mode 100644 index 0000000..98dc59d --- /dev/null +++ b/export/bootstrap.min.css @@ -0,0 +1,14 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=1e7a9532c8bca00ec827) + * Config saved to config.json and https://gist.github.com/1e7a9532c8bca00ec827 + *//*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/export/site203_print.php b/export/site203_print.php new file mode 100644 index 0000000..86f4046 --- /dev/null +++ b/export/site203_print.php @@ -0,0 +1,60 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Katalog pomp</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Katalog pomp</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Typ pompy</th> + <th>Qn [m3/min]</th> + <th>Hp [m]</th> + <th>Producent</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site203_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site203_array'][$i]['pumpName']."</td> + <td>".$_SESSION['site203_array'][$i]['qN']."</td> + <td>".$_SESSION['site203_array'][$i]['hP']."</td> + <td>".$_SESSION['site203_array'][$i]['mfc']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site203_xls.php b/export/site203_xls.php new file mode 100644 index 0000000..f77d6e5 --- /dev/null +++ b/export/site203_xls.php @@ -0,0 +1,49 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Katalog_pomp.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:E1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:E1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Katalog pomp'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Qn [m3/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Hp [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Producent'); + + +for($i=0;$i<count($_SESSION['site203_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site203_array'][$i]['pumpName']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site203_array'][$i]['qN']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['site203_array'][$i]['hP']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['site203_array'][$i]['mfc']); + + +} +$objPHPExcel->getActiveSheet()->setTitle('Katalog pomp'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/export/site204_print.php b/export/site204_print.php new file mode 100644 index 0000000..91c624b --- /dev/null +++ b/export/site204_print.php @@ -0,0 +1,60 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Katalog silników</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Katalog silników</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Typ silnika</th> + <th>Napięcie [V]</th> + <th>Moc [kW]</th> + <th>Producent</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site204_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site204_array'][$i]['engName']."</td> + <td>".$_SESSION['site204_array'][$i]['engVoltage']."</td> + <td>".$_SESSION['site204_array'][$i]['engPower']."</td> + <td>".$_SESSION['site204_array'][$i]['mfc']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site204_xls.php b/export/site204_xls.php new file mode 100644 index 0000000..2c7f987 --- /dev/null +++ b/export/site204_xls.php @@ -0,0 +1,49 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Katalog_silnikow.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:E1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:E1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Katalog silników'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Napiêcie [V]'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Moc [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Producent'); + + +for($i=0;$i<count($_SESSION['site204_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site204_array'][$i]['engName']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site204_array'][$i]['engVoltage']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['site204_array'][$i]['engPower']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['site204_array'][$i]['mfc']); + + +} +$objPHPExcel->getActiveSheet()->setTitle('Katalog silników'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/export/site303_print.php b/export/site303_print.php new file mode 100644 index 0000000..a6d26c1 --- /dev/null +++ b/export/site303_print.php @@ -0,0 +1,106 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Stan pomp</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Stan pomp</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Typ pompy</th> + <th>Nowe</th> + <th>Rezerwa</th> + <th>Remont</th> + <th>Eksploatacja SPM</th> + <th>Bestgum</th> + <th>Kasacja [w likwidacji]</th> + <th>Kasacja [zatopione]</th> + <th>Razem</th> + </tr> + </thead> + +<?php +$sum_nowe=0; +$sum_rezerwa=0; +$sum_remont=0; +$sum_eksp_spm=0; +$sum_bestgum=0; +$sum_kas_lik=0; +$sum_kas_zatop=0; +$sum_pumpcount=0; + + + +for($i=0;$i<count($_SESSION['site303_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site303_array'][$i]['pumpName']."</td> + <td>".$_SESSION['site303_array'][$i]['nowe']."</td> + <td>".$_SESSION['site303_array'][$i]['rezerwa']."</td> + <td>".$_SESSION['site303_array'][$i]['remont']."</td> + <td>".$_SESSION['site303_array'][$i]['eksp_spm']."</td> + <td>".$_SESSION['site303_array'][$i]['bestgum']."</td> + <td>".$_SESSION['site303_array'][$i]['kas_lik']."</td> + <td>".$_SESSION['site303_array'][$i]['kas_zatop']."</td> + <td>".$_SESSION['site303_array'][$i]['pumpcount']."</td> + </tr> + "; + + if ($_SESSION['site303_array'][$i]['nowe']>0) $sum_nowe+=$_SESSION['site303_array'][$i]['nowe']; + if ($_SESSION['site303_array'][$i]['rezerwa']>0) $sum_rezerwa+=$_SESSION['site303_array'][$i]['rezerwa']; + if ($_SESSION['site303_array'][$i]['remont']>0) $sum_remont+=$_SESSION['site303_array'][$i]['remont']; + if ($_SESSION['site303_array'][$i]['eksp_spm']>0) $sum_eksp_spm+=$_SESSION['site303_array'][$i]['eksp_spm']; + if ($_SESSION['site303_array'][$i]['bestgum']>0) $sum_bestgum+=$_SESSION['site303_array'][$i]['bestgum']; + if ($_SESSION['site303_array'][$i]['kas_lik']>0) $sum_kas_lik+=$_SESSION['site303_array'][$i]['kas_lik']; + if ($_SESSION['site303_array'][$i]['kas_zatop']>0) $sum_kas_zatop+=$_SESSION['site303_array'][$i]['kas_zatop']; + if ($_SESSION['site303_array'][$i]['pumpcount']>0) $sum_pumpcount+=$_SESSION['site303_array'][$i]['pumpcount']; +} + +echo" + <tr> + <td colspan=2>RAZEM</td> + <td>".$sum_nowe."</td> + <td>".$sum_rezerwa."</td> + <td>".$sum_remont."</td> + <td>".$sum_eksp_spm."</td> + <td>".$sum_bestgum."</td> + <td>".$sum_kas_lik."</td> + <td>".$sum_kas_zatop."</td> + <td>".$sum_pumpcount."</td> + </tr> + "; + + +?> +</table> + + + +</body> +</html> diff --git a/export/site303_xls.php b/export/site303_xls.php new file mode 100644 index 0000000..5748a03 --- /dev/null +++ b/export/site303_xls.php @@ -0,0 +1,88 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Stan_pomp.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:J1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:J1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Stan pomp'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Nowe'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Rezerwa'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Remont'); +$objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Eksploatacja SPM'); +$objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Bestgum'); +$objPHPExcel->getActiveSheet()->SetCellValue('H2', 'Kasacja [w likwidacji]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I2', 'Kasacja [zatopione]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J2', 'Razem'); + +$sum_nowe=0; +$sum_rezerwa=0; +$sum_remont=0; +$sum_eksp_spm=0; +$sum_bestgum=0; +$sum_kas_lik=0; +$sum_kas_zatop=0; +$sum_pumpcount=0; + +for($i=0;$i<count($_SESSION['site303_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site303_array'][$i]['pumpName']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site303_array'][$i]['nowe']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['site303_array'][$i]['rezerwa']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['site303_array'][$i]['remont']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $_SESSION['site303_array'][$i]['eksp_spm']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $_SESSION['site303_array'][$i]['bestgum']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $_SESSION['site303_array'][$i]['kas_lik']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($i+3), $_SESSION['site303_array'][$i]['kas_zatop']); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($i+3), $_SESSION['site303_array'][$i]['pumpcount']); + + if ($_SESSION['site303_array'][$i]['nowe']>0) $sum_nowe+=$_SESSION['site303_array'][$i]['nowe']; + if ($_SESSION['site303_array'][$i]['rezerwa']>0) $sum_rezerwa+=$_SESSION['site303_array'][$i]['rezerwa']; + if ($_SESSION['site303_array'][$i]['remont']>0) $sum_remont+=$_SESSION['site303_array'][$i]['remont']; + if ($_SESSION['site303_array'][$i]['eksp_spm']>0) $sum_eksp_spm+=$_SESSION['site303_array'][$i]['eksp_spm']; + if ($_SESSION['site303_array'][$i]['bestgum']>0) $sum_bestgum+=$_SESSION['site303_array'][$i]['bestgum']; + if ($_SESSION['site303_array'][$i]['kas_lik']>0) $sum_kas_lik+=$_SESSION['site303_array'][$i]['kas_lik']; + if ($_SESSION['site303_array'][$i]['kas_zatop']>0) $sum_kas_zatop+=$_SESSION['site303_array'][$i]['kas_zatop']; + if ($_SESSION['site303_array'][$i]['pumpcount']>0) $sum_pumpcount+=$_SESSION['site303_array'][$i]['pumpcount']; + +} + +$i++; +$objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), 'RAZEM'); +$objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $sum_nowe); +$objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $sum_rezerwa); +$objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $sum_remont); +$objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $sum_eksp_spm); +$objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $sum_bestgum); +$objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $sum_kas_lik); +$objPHPExcel->getActiveSheet()->SetCellValue('I'.($i+3), $sum_kas_zatop); +$objPHPExcel->getActiveSheet()->SetCellValue('J'.($i+3), $sum_pumpcount); + + +$objPHPExcel->getActiveSheet()->setTitle('Stan pomp'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/export/site304_print.php b/export/site304_print.php new file mode 100644 index 0000000..4819a2d --- /dev/null +++ b/export/site304_print.php @@ -0,0 +1,106 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Stan silników</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Stan silników</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Typ silnika</th> + <th>Nowe</th> + <th>Rezerwa</th> + <th>Remont</th> + <th>Eksploatacja SPM</th> + <th>Bestgum</th> + <th>Kasacja [w likwidacji]</th> + <th>Kasacja [zatopione]</th> + <th>Razem</th> + </tr> + </thead> + +<?php +$sum_nowe=0; +$sum_rezerwa=0; +$sum_remont=0; +$sum_eksp_spm=0; +$sum_bestgum=0; +$sum_kas_lik=0; +$sum_kas_zatop=0; +$sum_pumpcount=0; + + +for($i=0;$i<count($_SESSION['site304_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site304_array'][$i]['engName']."</td> + <td>".$_SESSION['site304_array'][$i]['nowe']."</td> + <td>".$_SESSION['site304_array'][$i]['rezerwa']."</td> + <td>".$_SESSION['site304_array'][$i]['remont']."</td> + <td>".$_SESSION['site304_array'][$i]['eksp_spm']."</td> + <td>".$_SESSION['site304_array'][$i]['bestgum']."</td> + <td>".$_SESSION['site304_array'][$i]['kas_lik']."</td> + <td>".$_SESSION['site304_array'][$i]['kas_zatop']."</td> + <td>".$_SESSION['site304_array'][$i]['engcount']."</td> + </tr> + "; + + + if ($_SESSION['site304_array'][$i]['nowe']>0) $sum_nowe+=$_SESSION['site304_array'][$i]['nowe']; + if ($_SESSION['site304_array'][$i]['rezerwa']>0) $sum_rezerwa+=$_SESSION['site304_array'][$i]['rezerwa']; + if ($_SESSION['site304_array'][$i]['remont']>0) $sum_remont+=$_SESSION['site304_array'][$i]['remont']; + if ($_SESSION['site304_array'][$i]['eksp_spm']>0) $sum_eksp_spm+=$_SESSION['site304_array'][$i]['eksp_spm']; + if ($_SESSION['site304_array'][$i]['bestgum']>0) $sum_bestgum+=$_SESSION['site304_array'][$i]['bestgum']; + if ($_SESSION['site304_array'][$i]['kas_lik']>0) $sum_kas_lik+=$_SESSION['site304_array'][$i]['kas_lik']; + if ($_SESSION['site304_array'][$i]['kas_zatop']>0) $sum_kas_zatop+=$_SESSION['site304_array'][$i]['kas_zatop']; + if ($_SESSION['site304_array'][$i]['engcount']>0) $sum_pumpcount+=$_SESSION['site304_array'][$i]['engcount']; + +} + +echo" + <tr> + <td colspan=2>RAZEM</td> + <td>".$sum_nowe."</td> + <td>".$sum_rezerwa."</td> + <td>".$sum_remont."</td> + <td>".$sum_eksp_spm."</td> + <td>".$sum_bestgum."</td> + <td>".$sum_kas_lik."</td> + <td>".$sum_kas_zatop."</td> + <td>".$sum_pumpcount."</td> + </tr> + "; + +?> +</table> + + + +</body> +</html> diff --git a/export/site304_xls.php b/export/site304_xls.php new file mode 100644 index 0000000..518d23f --- /dev/null +++ b/export/site304_xls.php @@ -0,0 +1,90 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Stan_silnikow.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:J1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:J1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Stan silników'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Nowe'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Rezerwa'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Remont'); +$objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Eksploatacja SPM'); +$objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Bestgum'); +$objPHPExcel->getActiveSheet()->SetCellValue('H2', 'Kasacja [w likwidacji]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I2', 'Kasacja [zatopione]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J2', 'Razem'); + +$sum_nowe=0; +$sum_rezerwa=0; +$sum_remont=0; +$sum_eksp_spm=0; +$sum_bestgum=0; +$sum_kas_lik=0; +$sum_kas_zatop=0; +$sum_pumpcount=0; + + +for($i=0;$i<count($_SESSION['site304_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site304_array'][$i]['engName']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site304_array'][$i]['nowe']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['site304_array'][$i]['rezerwa']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['site304_array'][$i]['remont']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $_SESSION['site304_array'][$i]['eksp_spm']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $_SESSION['site304_array'][$i]['bestgum']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $_SESSION['site304_array'][$i]['kas_lik']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($i+3), $_SESSION['site304_array'][$i]['kas_zatop']); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($i+3), $_SESSION['site304_array'][$i]['engcount']); + + if ($_SESSION['site304_array'][$i]['nowe']>0) $sum_nowe+=$_SESSION['site304_array'][$i]['nowe']; + if ($_SESSION['site304_array'][$i]['rezerwa']>0) $sum_rezerwa+=$_SESSION['site304_array'][$i]['rezerwa']; + if ($_SESSION['site304_array'][$i]['remont']>0) $sum_remont+=$_SESSION['site304_array'][$i]['remont']; + if ($_SESSION['site304_array'][$i]['eksp_spm']>0) $sum_eksp_spm+=$_SESSION['site304_array'][$i]['eksp_spm']; + if ($_SESSION['site304_array'][$i]['bestgum']>0) $sum_bestgum+=$_SESSION['site304_array'][$i]['bestgum']; + if ($_SESSION['site304_array'][$i]['kas_lik']>0) $sum_kas_lik+=$_SESSION['site304_array'][$i]['kas_lik']; + if ($_SESSION['site304_array'][$i]['kas_zatop']>0) $sum_kas_zatop+=$_SESSION['site304_array'][$i]['kas_zatop']; + if ($_SESSION['site304_array'][$i]['engcount']>0) $sum_pumpcount+=$_SESSION['site304_array'][$i]['engcount']; + +} + +$i++; +$objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), 'RAZEM'); +$objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $sum_nowe); +$objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $sum_rezerwa); +$objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $sum_remont); +$objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $sum_eksp_spm); +$objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $sum_bestgum); +$objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $sum_kas_lik); +$objPHPExcel->getActiveSheet()->SetCellValue('I'.($i+3), $sum_kas_zatop); +$objPHPExcel->getActiveSheet()->SetCellValue('J'.($i+3), $sum_pumpcount); + + + +$objPHPExcel->getActiveSheet()->setTitle('Stan silników'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/export/site401_pdf.php b/export/site401_pdf.php new file mode 100644 index 0000000..b45d7f5 --- /dev/null +++ b/export/site401_pdf.php @@ -0,0 +1,72 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', 'B', 15); + // Title + $title = iconv('utf-8','windows-1250','Lista studni'); + $this->Cell(0,10,$title,0,0,'L'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + // Page number + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); + +$pdf->SetLineWidth(.1); +$pdf -> SetFont('arial_ce', 'B', 8); +$pdf->Cell(15,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); +$pdf->Cell(15,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Nr pompy'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Nr silnika'),1,0,'C'); +$pdf->Cell(40,7,iconv('utf-8','windows-1250','Opis'),1,0,'C'); +$pdf->Ln(); + +$pdf -> SetFont('arial_ce', '', 7); + +for($i=0;$i<count($_SESSION['site401_array']);$i++) +{ + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['well_name']),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['bariera']),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['pup_name']),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['pup_no']),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['eng_name']),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['eng_no']),1,0,'C'); + $pdf->Cell(40,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['desc']),1,0,'C'); + $pdf->Ln(); + + +} +$pdf->Output(); +?> + + diff --git a/export/site401_print.php b/export/site401_print.php new file mode 100644 index 0000000..9cce3ac --- /dev/null +++ b/export/site401_print.php @@ -0,0 +1,66 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Lista studni</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Lista studni</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Bariera</th> + <th>Pompa</th> + <th>Numer fabryczny pompy [S/N]</th> + <th>Silnik</th> + <th>Numer fabryczny silnika [S/N]</th> + <th>Typ</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site401_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site401_array'][$i]['well_name']."</td> + <td>".$_SESSION['site401_array'][$i]['bariera']."</td> + <td>".$_SESSION['site401_array'][$i]['pup_name']."</td> + <td>".$_SESSION['site401_array'][$i]['pup_no']."</td> + <td>".$_SESSION['site401_array'][$i]['eng_name']."</td> + <td>".$_SESSION['site401_array'][$i]['eng_no']."</td> + <td>".$_SESSION['site401_array'][$i]['desc']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site401_xls.php b/export/site401_xls.php new file mode 100644 index 0000000..6f36b51 --- /dev/null +++ b/export/site401_xls.php @@ -0,0 +1,55 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Lista_studni.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:H1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Lista studni'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Pompa'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Numer fabryczny pompy [S/N]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Silnik'); +$objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Numer fabryczny silnika [S/N]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H2', 'Typ'); + + +for($i=0;$i<count($_SESSION['site401_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site401_array'][$i]['well_name']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site401_array'][$i]['bariera']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['site401_array'][$i]['pup_name']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['site401_array'][$i]['pup_no']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $_SESSION['site401_array'][$i]['eng_name']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $_SESSION['site401_array'][$i]['eng_no']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $_SESSION['site401_array'][$i]['desc']); + + +} +$objPHPExcel->getActiveSheet()->setTitle('Lista studni'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/export/site401ahis_pdf.php b/export/site401ahis_pdf.php new file mode 100644 index 0000000..be59ff5 --- /dev/null +++ b/export/site401ahis_pdf.php @@ -0,0 +1,188 @@ +<?php session_start(); +//============================================================+ +// File name : example_006.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 006 for TCPDF class +// WriteHTML and RTL support +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: WriteHTML and RTL support + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('../tcpdf/tcpdf.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('SoftSPM'); +$pdf->SetTitle('Historia pomiarów'); +$pdf->SetSubject('Historia pomiarów'); +$pdf->SetKeywords('Historia pomiarów'); + +// set default header data +//$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 006', PDF_HEADER_STRING); +$pdf->SetHeaderData +( '', + 0, + $_SESSION['site401ahis_devName'].' - historia pomiarów', + 'Od: '.$_SESSION['site401ahis_from'].' do: '.$_SESSION['site401ahis_to'], + array(0,0,250), + array(0,0,0) +); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('dejavusans', '', 10); + +// add a page +$pdf->AddPage(); + + +$tbl_header = '<table style="width: 640px;" cellspacing="0">'; +$tbl_footer = '</table>'; +$tbl = ' + <tr style="background-color: #ffff00"> + <td style="border: 1px solid #eaeaea; width: 30px; height: 10px; font-size: 7px;">Lp.</td> + <td style="border: 1px solid #eaeaea; width: 90px; height: 10px; font-size: 7px; text-align: center;">Data</td> + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">H<sub>ST</sub> [m]</td> + + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">H<sub>D</sub> [m]</td> + <td style="border: 1px solid #eaeaea; width: 60px; height: 10px; font-size: 7px; text-align: center;">Q [m<sup>3</sup>/min]</td> + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">p<sub>1</sub> [m]</td> + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">p<sub>2</sub> [m]</td> + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">I [A]</td> + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">U [V]</td> + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">P<sub>e</sub> [kW]</td> + <td style="border: 1px solid #eaeaea; width: 40px; height: 10px; font-size: 7px; text-align: center;">cos(&#966;)</td> + <td style="border: 1px solid #eaeaea; width: 100px; height: 10px; font-size: 7px; text-align: center;">Czas pracy [h]</td> + </tr> +'; + + + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', 'B', 15); + // Title + $title = iconv('utf-8','windows-1250',$_SESSION['well_details']['wellName'].' - historia pomiarów'); + $this->Cell(0,8,$title,0,1,'L'); + + $this -> SetFont('arial_ce', 'I', 10); + + $title = iconv('utf-8','windows-1250','Od: '.$_SESSION['site401ahis_from'].' do: '.$_SESSION['site401ahis_to']); + $this->Cell(0,8,$title,0,0,'L'); + // Line break + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + // Page number + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); + +$pdf->SetLineWidth(.1); +$pdf -> SetFont('arial_ce', 'B', 7); +$pdf->Cell(10,6,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); +$pdf->Cell(25,6,iconv('utf-8','windows-1250','Data'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','HST [m]'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','HD [m]'),1,0,'C'); +$pdf->Cell(20,6,iconv('utf-8','windows-1250','Q [m3/min]'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','p1 [m]'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','p2 [m]'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','I [A]'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','U [V]'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','Pe [kW]'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','cos(fi)'),1,0,'C'); +$pdf->Cell(15,6,iconv('utf-8','windows-1250','Tp [h]'),1,0,'C'); +$pdf->Ln(); + +$pdf -> SetFont('arial_ce', '', 6); + +for($i=0;$i<count($_SESSION['site401ahis_array']);$i++) +{ + $pdf->Cell(10,6,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(25,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_date']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_hst']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_hd']),1,0,'C'); + $pdf->Cell(20,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_q']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_p1']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_p2']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_I']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_U']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_PE']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_cos']),1,0,'C'); + $pdf->Cell(15,6,iconv('utf-8','windows-1250',$_SESSION['site401ahis_array'][$i]['his_work_time']),1,0,'C'); + $pdf->Ln(); + +} + +$pdf->Output(); +?> + + diff --git a/export/site401ahis_print.php b/export/site401ahis_print.php new file mode 100644 index 0000000..22e20c6 --- /dev/null +++ b/export/site401ahis_print.php @@ -0,0 +1,74 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Historia agregatów</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1><?php echo $_SESSION['site401ahis_devName']; ?> - historia pomiarów [<?php echo $_SESSION['site401ahis_from']; ?> - <?php echo $_SESSION['site401ahis_to']; ?>]</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Data</th> + <th>H<sub>ST</sub> [m]</th> + <th>H<sub>D</sub> [m]</th> + <th>Q [m<sup>3</sup>/min] </th> + <th>p<sub>1</sub> [m]</th> + <th>p<sub>2</sub> [m]</th> + <th>I [A]</th> + <th>U [V]</th> + <th>P<sub>e</sub> [kW]</th> + <th>cos(&#966;)</th> + <th>Czas pracy [h]</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site401ahis_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site401ahis_array'][$i]['his_date']."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_hst'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_hd'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_q'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_p1'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_p2'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_I'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_U'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_PE'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_cos'])."</td> + <td>".str_replace('.',',',$_SESSION['site401ahis_array'][$i]['his_work_time'])."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site401ahis_xls.php b/export/site401ahis_xls.php new file mode 100644 index 0000000..fc272fc --- /dev/null +++ b/export/site401ahis_xls.php @@ -0,0 +1,62 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Historia_pom.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:L1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:L1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', $_SESSION['site401ahis_devName'].' - historia pomiarów ['.$_SESSION['site401ahis_from'].' - '.$_SESSION['site401ahis_to'].']'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Data'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Hst [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Hd [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Q [m3/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F2', 'p1 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('G2', 'p2 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H2', 'I [A]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I2', 'U [V]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J2', 'Pe [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('K2', 'cos (fi)'); +$objPHPExcel->getActiveSheet()->SetCellValue('L2', 'Czas pracy [h]'); + +for($i=0;$i<count($_SESSION['site401ahis_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site401ahis_array'][$i]['his_date']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site401ahis_array'][$i]['his_hst']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['site401ahis_array'][$i]['his_hd']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['site401ahis_array'][$i]['his_q']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $_SESSION['site401ahis_array'][$i]['his_p1']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $_SESSION['site401ahis_array'][$i]['his_p2']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $_SESSION['site401ahis_array'][$i]['his_I']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($i+3), $_SESSION['site401ahis_array'][$i]['his_U']); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($i+3), $_SESSION['site401ahis_array'][$i]['his_PE']); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($i+3), $_SESSION['site401ahis_array'][$i]['his_cos']); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($i+3), $_SESSION['site401ahis_array'][$i]['his_work_time']); + + +} +$objPHPExcel->getActiveSheet()->setTitle('historia pomiarów'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/export/site401pdet_print.php b/export/site401pdet_print.php new file mode 100644 index 0000000..8aacf56 --- /dev/null +++ b/export/site401pdet_print.php @@ -0,0 +1,69 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Lista pomiarów</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<?php +// dla piezometrów +if (!empty($_SESSION['site404pdet_array'])) +{ + $_SESSION['site401pdet_array']=$_SESSION['site404pdet_array']; + $_SESSION['site401pdet_dic'][0]['DIC_POL_LANG'] = 'Zwierciadło statyczne H<sub>ST</sub> [m]'; + +} + +?> + + +<div class="row"> + <div class="col-md-8"> + <h1><?php echo $_SESSION['site401pdet_dic'][0]['DIC_POL_LANG'];?></h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Data pomiaru</th> + <th>Wartość</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site401pdet_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site401pdet_array'][$i]['water_audit']."</td> + <td>".$_SESSION['site401pdet_array'][$i]['water_value']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site401pdet_xls.php b/export/site401pdet_xls.php new file mode 100644 index 0000000..7cca092 --- /dev/null +++ b/export/site401pdet_xls.php @@ -0,0 +1,53 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Lista_pomiarow.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:C1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:C1')->applyFromArray($styleArray); + + +// dla piezometrów +if (!empty($_SESSION['site404pdet_array'])) +{ + $_SESSION['site401pdet_array']=$_SESSION['site404pdet_array']; + $_SESSION['site401pdet_dic'][0]['DIC_POL_LANG'] = 'Zwierciadło statyczne H<sub>ST</sub> [m]'; +} + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', str_replace(array('<sub>','</sub>','<sup>','</sup>'), array('','','',''), $_SESSION['site401pdet_dic'][0]['DIC_POL_LANG'])); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Data pomiaru'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Wartość'); + + +for($i=0;$i<count($_SESSION['site401pdet_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site401pdet_array'][$i]['water_audit']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site401pdet_array'][$i]['water_value']); + + +} +$objPHPExcel->getActiveSheet()->setTitle('Lista pomiarów'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/export/site404_pdf.php b/export/site404_pdf.php new file mode 100644 index 0000000..0c1875d --- /dev/null +++ b/export/site404_pdf.php @@ -0,0 +1,72 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', 'B', 15); + // Title + $title = iconv('utf-8','windows-1250','Lista piezometrów'); + $this->Cell(0,10,$title,0,0,'L'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + // Page number + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); + +$pdf->SetLineWidth(.1); +$pdf -> SetFont('arial_ce', 'B', 8); +$pdf->Cell(15,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); +$pdf->Cell(40,7,iconv('utf-8','windows-1250','Nazwa'),1,0,'C'); +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); +$pdf->Cell(35,7,iconv('utf-8','windows-1250','Poziom wody [m]'),1,0,'C'); +$pdf->Cell(30,7,iconv('utf-8','windows-1250','Głębokość [m]'),1,0,'C'); +$pdf->Cell(50,7,iconv('utf-8','windows-1250','Opis'),1,0,'C'); +$pdf->Ln(); + +$pdf -> SetFont('arial_ce', '', 7); + + +for($i=0;$i<count($_SESSION['site404_array']);$i++) +{ + + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(40,7,iconv('utf-8','windows-1250',$_SESSION['site404_array'][$i]['name']),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$_SESSION['site404_array'][$i]['bariera']),1,0,'C'); + $pdf->Cell(35,7,iconv('utf-8','windows-1250',$_SESSION['site404_array'][$i]['hstm']),1,0,'C'); + $pdf->Cell(30,7,iconv('utf-8','windows-1250',$_SESSION['site404_array'][$i]['depth']),1,0,'C'); + $pdf->Cell(50,7,iconv('utf-8','windows-1250',$_SESSION['site404_array'][$i]['desc']),1,0,'C'); + $pdf->Ln(); + + +} + +$pdf->Output(); + +?> + + diff --git a/export/site809_rap001_print.php b/export/site809_rap001_print.php new file mode 100644 index 0000000..1667142 --- /dev/null +++ b/export/site809_rap001_print.php @@ -0,0 +1,64 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz energochłonności</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Wykaz energochłonności dla studni</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Bariera</th> + <th>Energochłonność</th> + <th>Opis</th> + <th>Status</th> + <th>Data</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site809_rap001']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site809_rap001'][$i]['a']."</td> + <td>".$_SESSION['site809_rap001'][$i]['b']."</td> + <td>".$_SESSION['site809_rap001'][$i]['c']."</td> + <td>".$_SESSION['site809_rap001'][$i]['d']."</td> + <td>".$_SESSION['site809_rap001'][$i]['e']."</td> + <td>".$_SESSION['site809_rap001'][$i]['f']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site809_rap002_print.php b/export/site809_rap002_print.php new file mode 100644 index 0000000..b2c52ef --- /dev/null +++ b/export/site809_rap002_print.php @@ -0,0 +1,68 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Łączna ilość agregatów pompowych zabudowanych w studniach</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Łączna ilość agregatów pompowych zabudowanych w studniach</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Bariera</th> + <th>Typ pompy</th> + <th>Nr pompy</th> + <th>Typ silnika</th> + <th>Nr silnika</th> + <th>Opis</th> + <th>Oddział</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site809_rap002']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site809_rap002'][$i]['a']."</td> + <td>".$_SESSION['site809_rap002'][$i]['b']."</td> + <td>".$_SESSION['site809_rap002'][$i]['c']."</td> + <td>".$_SESSION['site809_rap002'][$i]['d']."</td> + <td>".$_SESSION['site809_rap002'][$i]['e']."</td> + <td>".$_SESSION['site809_rap002'][$i]['f']."</td> + <td>".$_SESSION['site809_rap002'][$i]['g']."</td> + <td>".$_SESSION['site809_rap002'][$i]['h']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site809_rap003_print.php b/export/site809_rap003_print.php new file mode 100644 index 0000000..862cf4f --- /dev/null +++ b/export/site809_rap003_print.php @@ -0,0 +1,78 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Parametry pracy studni i układu pompowego</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Parametry pracy studni i układu pompowego</h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Bariera</th> + <th>H<sub>ST</sub> [m]</th> + <th>H<sub>D</sub> [m]</th> + <th>Q [m<sup>3</sup>/min]</th> + <th>p<sub>1</sub> [m]</th> + <th>p<sub>2</sub> [m]</th> + <th>I [A]</th> + <th>U [V]</th> + <th>P<sub>e</sub> [kW]</th> + <th>t [h]</th> + <th>Diagnostyka</th> + <th>Data</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site809_rap003']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site809_rap003'][$i]['a']."</td> + <td>".$_SESSION['site809_rap003'][$i]['b']."</td> + <td>".$_SESSION['site809_rap003'][$i]['c']."</td> + <td>".$_SESSION['site809_rap003'][$i]['d']."</td> + <td>".$_SESSION['site809_rap003'][$i]['e']."</td> + <td>".$_SESSION['site809_rap003'][$i]['f']."</td> + <td>".$_SESSION['site809_rap003'][$i]['g']."</td> + <td>".$_SESSION['site809_rap003'][$i]['h']."</td> + <td>".$_SESSION['site809_rap003'][$i]['i']."</td> + <td>".$_SESSION['site809_rap003'][$i]['j']."</td> + <td>".$_SESSION['site809_rap003'][$i]['k']."</td> + <td>".$_SESSION['site809_rap003'][$i]['l']."</td> + <td>".$_SESSION['site809_rap003'][$i]['m']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site809_rap004_print.php b/export/site809_rap004_print.php new file mode 100644 index 0000000..364571f --- /dev/null +++ b/export/site809_rap004_print.php @@ -0,0 +1,93 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Wykaz pracy studni</h1> + <?php echo'Okres obliczeniowy: '.$_SESSION['site809_rap004'][0]['fr'].' - '.$_SESSION['site809_rap004'][0]['to']; ?><br/>&nbsp; + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + +<?php +$newBariera=null; +for($i=0;$i<count($_SESSION['site809_rap004']);$i++) +{ + if ($newBariera!=$_SESSION['site809_rap004'][$i]['bar']) + { + $newBariera=$_SESSION['site809_rap004'][$i]['bar']; + + echo' + <thead> + <tr> + <th colspan="13">Bariera '.$newBariera.'</th> + </tr> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Typ</th> + <th>Pompa</th> + <th>Q<sub>n</sub> [m<sup>3</sup>/min]</th> + <th>Silnik</th> + <th>Moc [kW]</th> + <th>Q<sub>śr</sub> [m<sup>3</sup>/min]</th> + <th>T<sub>p</sub> [h]</th> + <th>V [m<sup>3</sup>]</th> + <th>H<sub>D</sub> [m]</th> + <th>H<sub>ST</sub> [m]</th> + <th>T<sub>W</sub> [<sup>o</sup>C]</th> + </tr> + </thead> + '; + + } + + + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site809_rap004'][$i]['a']."</td> + <td>".$_SESSION['site809_rap004'][$i]['b']."</td> + <td>".$_SESSION['site809_rap004'][$i]['c']."</td> + <td>".$_SESSION['site809_rap004'][$i]['d']."</td> + <td>".$_SESSION['site809_rap004'][$i]['e']."</td> + <td>".$_SESSION['site809_rap004'][$i]['f']."</td> + + <td>".$_SESSION['site809_rap004'][$i]['g']."</td> + <td>".$_SESSION['site809_rap004'][$i]['h']."</td> + <td>".$_SESSION['site809_rap004'][$i]['i']."</td> + <td>".$_SESSION['site809_rap004'][$i]['j']."</td> + <td>".$_SESSION['site809_rap004'][$i]['k']."</td> + <td>".$_SESSION['site809_rap004'][$i]['l']."</td> + + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site809_rap005_print.php b/export/site809_rap005_print.php new file mode 100644 index 0000000..bdd23d0 --- /dev/null +++ b/export/site809_rap005_print.php @@ -0,0 +1,82 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz obiektów na stanie wydziału</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1>Wykaz obiektów na stanie wydziału - <?php echo $_SESSION['syndis_eq_stock']; ?></h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + +<?php +$newBariera=null; +for($i=0;$i<count($_SESSION['site809_rap005']);$i++) +{ + if ($newBariera!=$_SESSION['site809_rap005'][$i]['bar']) + { + $newBariera=$_SESSION['site809_rap005'][$i]['bar']; + + echo' + <thead> + <tr> + <th colspan="13">Bariera '.$newBariera.'</th> + </tr> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Typ</th> + <th>Data oddania</th> + <th>X</th> + <th>Y</th> + <th>Rzędna pierwotna</th> + <th>Rzędna aktualna</th> + <th>Głębokość LS</th> + </tr> + </thead> + '; + + } + + + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site809_rap005'][$i]['a']."</td> + <td>".$_SESSION['site809_rap005'][$i]['b']."</td> + <td>".$_SESSION['site809_rap005'][$i]['c']."</td> + <td>".$_SESSION['site809_rap005'][$i]['d']."</td> + <td>".$_SESSION['site809_rap005'][$i]['e']."</td> + <td>".$_SESSION['site809_rap005'][$i]['f']."</td> + <td>".$_SESSION['site809_rap005'][$i]['g']."</td> + <td>".$_SESSION['site809_rap005'][$i]['h']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site810_agginOrder_pdf.php b/export/site810_agginOrder_pdf.php new file mode 100644 index 0000000..8cde294 --- /dev/null +++ b/export/site810_agginOrder_pdf.php @@ -0,0 +1,182 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).' w studni: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +$pdf->Ln(); + + +//Label - new +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Zabudowa agregatu pompowego'),1,1,'C',1); + +//Typ pompy i nr pompy do zabudowy +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ pompy i nr pompy do zabudowy'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_newAggArray'][0]['ONA_PUMP'])),1,1,'L'); + +//Typ silnika i nr silnika do zabudowy +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ silnika i nr silnika do zabudowy'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_newAggArray'][0]['ONA_ENG'])),1,1,'L'); + +//Głębokość zabudowy agregatu pompowego [m] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość zabudowy agregatu [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_newAggArray'][0]['ONA_GLEB_AG']),1,1,'L'); + +//Przewód zasilający +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Przewód zasilający OGŁ / dł. [m] (nr plomb)'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace('(',' (',$_SESSION['site810inf_newAggArray'][0]['ONA_CABLE'])),1,1,'L'); + +//Średnica kolektora tłocznego [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica kolektora tłocznego [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_newAggArray'][0]['ONA_SRED_KOL']),1,1,'L'); + +//Sonda hydrostatyczna +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Sonda hydrostatyczna'),1,0,'L'); +if (strlen($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'])>20) + $showField = str_replace(array(', nr',', dł'),array(' nr',' dł'),$_SESSION['site810inf_newAggArray'][0]['ONA_SONDA']); +else + $showField = null; +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$showField),1,1,'L'); + + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Dodatkowy opis'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_aggoutOrder_pdf.php b/export/site810_aggoutOrder_pdf.php new file mode 100644 index 0000000..3570471 --- /dev/null +++ b/export/site810_aggoutOrder_pdf.php @@ -0,0 +1,171 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).' w studni: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Głębokość zabudowy agregatu pompowego [m] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość zabudowy agregatu [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_AG']),1,1,'L'); + +//Typ i numer zabudowanej pompy +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ i numer zabudowanej pompy'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_PUMP'])),1,1,'L'); + +//Typ i numer zabudowanego silnika +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ i numer zabudowanego silnika'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_ENG'])),1,1,'L'); + +//Średnica kolektora tłocznego [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica kolektora tłocznego [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED_KOL']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Sonda hydrostatyczna +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Sonda hydrostatyczna'),1,0,'L'); + if (strlen($_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA'])>20) + $showField = str_replace(array(', nr',', dł'),array(' nr',' dł'),$_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA']); + else + $showField = null; +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$showField),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +$pdf->Ln(); + + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Dodatkowy opis'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_anotherOrder_pdf.php b/export/site810_anotherOrder_pdf.php new file mode 100644 index 0000000..3570471 --- /dev/null +++ b/export/site810_anotherOrder_pdf.php @@ -0,0 +1,171 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).' w studni: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Głębokość zabudowy agregatu pompowego [m] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość zabudowy agregatu [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_AG']),1,1,'L'); + +//Typ i numer zabudowanej pompy +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ i numer zabudowanej pompy'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_PUMP'])),1,1,'L'); + +//Typ i numer zabudowanego silnika +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ i numer zabudowanego silnika'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_ENG'])),1,1,'L'); + +//Średnica kolektora tłocznego [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica kolektora tłocznego [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED_KOL']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Sonda hydrostatyczna +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Sonda hydrostatyczna'),1,0,'L'); + if (strlen($_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA'])>20) + $showField = str_replace(array(', nr',', dł'),array(' nr',' dł'),$_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA']); + else + $showField = null; +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$showField),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +$pdf->Ln(); + + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Dodatkowy opis'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_cleanFix_pdf.php b/export/site810_cleanFix_pdf.php new file mode 100644 index 0000000..c5f46d4 --- /dev/null +++ b/export/site810_cleanFix_pdf.php @@ -0,0 +1,213 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 12; +$lineWidth = 8; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Załącznik nr 4 do umowy nr ……………………'); + $rigth = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC'].', dnia: '.date('Y-m-d')); + + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,$rigth,0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(95,10,iconv('utf-8','windows-1250','* - niepotrzebne skreślić'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Protokół odbioru nr: …………/………'),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','1. Opis wykonanych prac.'),0,1,'L'); +$pdf->Ln(); + +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'L'); + + +$pdf->SetFont('arial_ce', '', $fontSize); +$y = $pdf->GetY(); +$x = $pdf->GetX(); +$width = 80; +$pdf->MultiCell($width, $lineWidth, iconv('utf-8','windows-1250','Typ/nazwa urządzenia wykonującego pracę'), 1, 'L', FALSE); +$pdf->SetXY($x + $width, $y); +$pdf->Cell(110,2*$lineWidth, '', 1, 1, "l"); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m] / rzędna terenu'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Średnica [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Ilość metrów wyczyszczonych [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Dokumentacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'TAK / NIE*',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$y = $pdf->GetY(); +$x = $pdf->GetX(); +$width = 80; +$pdf->MultiCell($width, $lineWidth, "".iconv('utf-8','windows-1250','Uwagi dotyczące prac związanych z czyszczeniem')."\n \n ", 1, 'L', FALSE); +$pdf->SetXY($x + $width, $y); +$pdf->Cell(110,4*$lineWidth, '', 1, 1, "l"); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','2. Opis prowadzonych innych prac.'),0,1,'L'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Inne prace'),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(60,30,iconv('utf-8','windows-1250','Rodzaj prac'),1,0,'L'); +$pdf->Cell(130,30,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Typ/nazwa urządzenia'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,50,iconv('utf-8','windows-1250','Opis wykonanych prac'),1,0,'L'); +$pdf->Cell(130,50,'',1,1,'C'); + +$pdf->Cell(60,30,iconv('utf-8','windows-1250','Uwagi dozoru Wykonawcy'),1,0,'L'); +$pdf->Cell(130,30,'',1,1,'C'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','3. Zakończenie prac przy czyszczeniu.'),0,1,'L'); +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Uwagi Zleceniodawcy'),1,0,'C'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Decyzja Zleceniodawcy'),1,1,'C'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,40,'',1,0,'C'); +$pdf->Cell(95,40,'',1,1,'C'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','4. Potwierdzenie zakończenia czyszczenia.'),0,1,'L'); +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel wykonawcy prac'),1,0,'C'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel Zleceniodawcy'),1,1,'C'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,40,'',1,0,'C'); +$pdf->Cell(95,40,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,'Data:',1,0,'L'); +$pdf->Cell(95,$lineWidth,'Data:',1,1,'L'); + + +$pdf->Cell(0,10,'',0,1,'L'); +$pdf->SetFont('arial_ce', '', 6); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający – 1 egz.'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','2. Wykonawca - 1 egz.'),0,1,'L'); + + + + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_cleanPOrder_pdf.php b/export/site810_cleanPOrder_pdf.php new file mode 100644 index 0000000..ed03413 --- /dev/null +++ b/export/site810_cleanPOrder_pdf.php @@ -0,0 +1,150 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-20); + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(0,5,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); + $this->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający - 1egz.'),0,1,'L'); + $this->Cell(95,3,iconv('utf-8','windows-1250','2. Wykonawca - 1egz.'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,6,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry piezometru '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja piezometru'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość właściwa +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Zasyp piezometru [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Il metrów do wyczyszczenia +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Ilość metrów do wyczyszczenia'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,$_SESSION['site810inf_ordMainArray'][0]['OWP_CLEAN'],1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Średnica piezometru [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +// Dokumentacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Filtr [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / dodatkowe informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_cleanWOrder_pdf.php b/export/site810_cleanWOrder_pdf.php new file mode 100644 index 0000000..5604a59 --- /dev/null +++ b/export/site810_cleanWOrder_pdf.php @@ -0,0 +1,158 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-20); + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(0,5,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); + $this->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający - 1egz.'),0,1,'L'); + $this->Cell(95,3,iconv('utf-8','windows-1250','2. Wykonawca - 1egz.'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,6,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość właściwa +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Ilość metrów do wyczyszczenia +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Ilość metrów do wyczyszczenia'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,$_SESSION['site810inf_ordMainArray'][0]['OWP_CLEAN'],1,1,'L'); + + +//Zwierciadło statyczne +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Zwierciadło statyczne [m] / data'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,str_replace('/',' / ',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZWIERC']),1,1,'L'); + + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +// Dokumentacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Dokumentacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / dodatkowe informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_destroyFix_pdf.php b/export/site810_destroyFix_pdf.php new file mode 100644 index 0000000..5d917a9 --- /dev/null +++ b/export/site810_destroyFix_pdf.php @@ -0,0 +1,192 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 12; +$lineWidth = 8; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Załącznik nr 5 do umowy nr ……………………'); + $rigth = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC'].', dnia: '.date('Y-m-d')); + + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,$rigth,0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(95,10,iconv('utf-8','windows-1250','* - niepotrzebne skreślić'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Protokół odbioru nr: …………/………'),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','1. Opis wykonanych prac.'),0,1,'L'); +$pdf->Ln(); + +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'L'); + + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m] / rzędna terenu'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Średnica [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Ilość metrów zlikwidowanych [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Likwidacja do rzędnej terenu*'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + + + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Dokumentacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'TAK / NIE*',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$y = $pdf->GetY(); +$x = $pdf->GetX(); +$width = 80; +$pdf->MultiCell($width, $lineWidth, "".iconv('utf-8','windows-1250','Uwagi dotyczące prac związanych z likwidacją')."\n \n ", 1, 'L', FALSE); +$pdf->SetXY($x + $width, $y); +$pdf->Cell(110,4*$lineWidth, '', 1, 1, "l"); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','2. Opis prowadzonych innych prac.'),0,1,'L'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Inne prace'),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(60,30,iconv('utf-8','windows-1250','Rodzaj prac'),1,0,'L'); +$pdf->Cell(130,30,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Typ/nazwa urządzenia'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,100,iconv('utf-8','windows-1250','Opis wykonanych prac'),1,0,'L'); +$pdf->Cell(130,100,'',1,1,'C'); + +$pdf->Cell(60,50,iconv('utf-8','windows-1250','Uwagi dozoru Wykonawcy'),1,0,'L'); +$pdf->Cell(130,50,'',1,1,'C'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','3. Potwierdzenie zakończenia prac przy likwidacji.'),0,1,'L'); +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel wykonawcy prac'),1,0,'C'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel Zleceniodawcy'),1,1,'C'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,40,'',1,0,'C'); +$pdf->Cell(95,40,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,'Data:',1,0,'L'); +$pdf->Cell(95,$lineWidth,'Data:',1,1,'L'); + + +$pdf->Cell(0,10,'',0,1,'L'); +$pdf->SetFont('arial_ce', '', 6); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający – 1 egz.'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','2. Wykonawca - 1 egz.'),0,1,'L'); + + + + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_destroyPOrder_pdf.php b/export/site810_destroyPOrder_pdf.php new file mode 100644 index 0000000..470aa67 --- /dev/null +++ b/export/site810_destroyPOrder_pdf.php @@ -0,0 +1,152 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry piezometru '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja piezometru'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp piezometru [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Do likwidacji [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Średnica piezometru [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica piezometru [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Filtr +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Filtr [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,'',1,1,'L'); + +//Zwierciadło statyczne +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zwierciadło statyczne [m] / data'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZWIERC']),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +//Uwagi +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Uwagi'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,'',1,1,'L'); + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / dodatkowe informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_destroyWOrder_pdf.php b/export/site810_destroyWOrder_pdf.php new file mode 100644 index 0000000..ed9570b --- /dev/null +++ b/export/site810_destroyWOrder_pdf.php @@ -0,0 +1,153 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Zwierciadło statyczne +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zwierciadło statyczne [m] / data'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZWIERC']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + + +//Ostatnia wydajność Q +$wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_ID=(select MAX(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=200 and DRD_DRS_ID=".$_SESSION['site810inf_ordMainArray'][0]['ORD_DRS_ID'].")"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $qV = $r["DRD_VALUE"]; + $qT = $r["DRD_AUDIT_DATE"]; +} +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Ostatnia wydajność Q [m3/min] / data'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,round($qV/60,3).' / '.substr($qT,0,10),1,1,'L'); + + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / dodatkowe informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_doc.php b/export/site810_doc.php new file mode 100644 index 0000000..624b553 --- /dev/null +++ b/export/site810_doc.php @@ -0,0 +1,55 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +// Include the PHPWord.php, all other classes were loaded by an autoloader +require_once '../PHPWord/PHPWord.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Zlecenie.docx"'); +header('Cache-Control: max-age=0'); + +// Create a new PHPWord Object +$PHPWord = new PHPWord(); + +// Every element you want to append to the word document is placed in a section. So you need a section: +$section = $PHPWord->createSection(); + + +// Add header +$header = $section->createHeader(); +$table = $header->addTable(array('borderSize'=>6, 'borderColor'=>'006699', 'cellMargin'=>80)); +$table->addRow(); +$table->addCell(4500)->addText('Wydział'); +$table->addCell(4500)->addText('data',array('bold'=>true, 'align'=>'right')); + + + +// After creating a section, you can append elements: +$section->addText('Hello world!'); + +// You can directly style your text by giving the addText function an array: +$section->addText('Hello world! I am formatted.', array('name'=>'Tahoma', 'size'=>16, 'bold'=>true)); + +// If you often need the same style again you can create a user defined style to the word document +// and give the addText function the name of the style: +$PHPWord->addFontStyle('myOwnStyle', array('name'=>'Verdana', 'size'=>14, 'color'=>'1B2232')); +$section->addText('Hello world! I am formatted by a user defined style', 'myOwnStyle'); + +// You can also putthe appended element to local object an call functions like this: +$myTextElement = $section->addText('Hello World!'); +//$myTextElement->setBold(); +//$myTextElement->setName('Verdana'); +//$myTextElement->setSize(22); + +// At least write the document to webspace: +$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007'); +//$objWriter->save('helloWorld.docx'); +$objWriter->save('php://output'); +exit; +?> + diff --git a/export/site810_exchangeOrder_pdf.php b/export/site810_exchangeOrder_pdf.php new file mode 100644 index 0000000..f096e70 --- /dev/null +++ b/export/site810_exchangeOrder_pdf.php @@ -0,0 +1,216 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).' w studni: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Głębokość zabudowy agregatu pompowego [m] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość zabudowy agregatu [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_AG']),1,1,'L'); + +//Typ i numer zabudowanej pompy +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ i numer zabudowanej pompy'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_PUMP'])),1,1,'L'); + +//Typ i numer zabudowanego silnika +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ i numer zabudowanego silnika'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_ENG'])),1,1,'L'); + +//Średnica kolektora tłocznego [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica kolektora tłocznego [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED_KOL']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Sonda hydrostatyczna +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Sonda hydrostatyczna'),1,0,'L'); + if (strlen($_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA'])>20) + $showField = str_replace(array(', nr',', dł'),array(' nr',' dł'),$_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA']); + else + $showField = null; +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$showField),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + +$pdf->Ln(); + + +//Label - new +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Wymiana agregatu pompowego'),1,1,'C',1); + +//Typ pompy i nr pompy do zabudowy +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ pompy i nr pompy do zabudowy'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_newAggArray'][0]['ONA_PUMP'])),1,1,'L'); + +//Typ silnika i nr silnika do zabudowy +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Typ silnika i nr silnika do zabudowy'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace(', nr',' nr',$_SESSION['site810inf_newAggArray'][0]['ONA_ENG'])),1,1,'L'); + +//Głębokość zabudowy agregatu pompowego [m] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość zabudowy agregatu [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_newAggArray'][0]['ONA_GLEB_AG']),1,1,'L'); + +//Przewód zasilający +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Przewód zasilający OGŁ / dł. [m] (nr plomb)'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',str_replace('(',' (',$_SESSION['site810inf_newAggArray'][0]['ONA_CABLE'])),1,1,'L'); + +//Średnica kolektora tłocznego [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica kolektora tłocznego [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_newAggArray'][0]['ONA_SRED_KOL']),1,1,'L'); + +//Sonda hydrostatyczna +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Sonda hydrostatyczna'),1,0,'L'); +if (strlen($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'])>20) + $showField = str_replace(array(', nr',', dł'),array(' nr',' dł'),$_SESSION['site810inf_newAggArray'][0]['ONA_SONDA']); +else + $showField = null; +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$showField),1,1,'L'); + + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Dodatkowy opis'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_instrumFix_pdf.php b/export/site810_instrumFix_pdf.php new file mode 100644 index 0000000..fbc3067 --- /dev/null +++ b/export/site810_instrumFix_pdf.php @@ -0,0 +1,215 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 12; +$lineWidth = 8; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Załącznik nr 6 do umowy nr ……………………'); + $rigth = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC'].', dnia: '.date('Y-m-d')); + + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,$rigth,0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(95,10,iconv('utf-8','windows-1250','* - niepotrzebne skreślić'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Protokół odbioru nr: …………/………'),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','1. Opis wykonanych prac.'),0,1,'L'); +$pdf->Ln(); + +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'L'); + + +$pdf->SetFont('arial_ce', '', $fontSize); +$y = $pdf->GetY(); +$x = $pdf->GetX(); +$width = 80; +$pdf->MultiCell($width, $lineWidth, iconv('utf-8','windows-1250','Typ/nazwa urządzenia wykonującego pracę'), 1, 'L', FALSE); +$pdf->SetXY($x + $width, $y); +$pdf->Cell(110,2*$lineWidth, '', 1, 1, "l"); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m] / rzędna terenu'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Średnica [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Wyczyszczony zasyp do głębokości [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Wymiana przejścia (liner)*'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'TAK / NIE*',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Likwidacja do rzędnej terenu*'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + + + +$pdf->SetFont('arial_ce', '', $fontSize); +$y = $pdf->GetY(); +$x = $pdf->GetX(); +$width = 80; +$pdf->MultiCell($width, $lineWidth, "".iconv('utf-8','windows-1250','Uwagi dotyczące prac związanych z instrumentacją')."\n \n ", 1, 'L', FALSE); +$pdf->SetXY($x + $width, $y); +$pdf->Cell(110,4*$lineWidth, '', 1, 1, "l"); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','2. Opis prowadzonych innych prac.'),0,1,'L'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Inne prace'),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(60,30,iconv('utf-8','windows-1250','Rodzaj prac'),1,0,'L'); +$pdf->Cell(130,30,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Typ/nazwa urządzenia'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,50,iconv('utf-8','windows-1250','Opis wykonanych prac'),1,0,'L'); +$pdf->Cell(130,50,'',1,1,'C'); + +$pdf->Cell(60,30,iconv('utf-8','windows-1250','Uwagi dozoru Wykonawcy'),1,0,'L'); +$pdf->Cell(130,30,'',1,1,'C'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','3. Zakończenie prac przy instrumentacji .'),0,1,'L'); +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Uwagi Zleceniodawcy'),1,0,'C'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Decyzja Zleceniodawcy'),1,1,'C'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,40,'',1,0,'C'); +$pdf->Cell(95,40,'',1,1,'C'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','4.Potwierdzenie zakończenia instrumentacji.'),0,1,'L'); +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel wykonawcy prac'),1,0,'C'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel Zleceniodawcy'),1,1,'C'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,40,'',1,0,'C'); +$pdf->Cell(95,40,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,'Data:',1,0,'L'); +$pdf->Cell(95,$lineWidth,'Data:',1,1,'L'); + + +$pdf->Cell(0,10,'',0,1,'L'); +$pdf->SetFont('arial_ce', '', 6); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający – 1 egz.'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','2. Wykonawca - 1 egz.'),0,1,'L'); + + + + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_instrumPOrder_pdf.php b/export/site810_instrumPOrder_pdf.php new file mode 100644 index 0000000..5c33896 --- /dev/null +++ b/export/site810_instrumPOrder_pdf.php @@ -0,0 +1,129 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry piezometru '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja piezometru'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość piezometru [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica piezometru [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_instrumWOrder_pdf.php b/export/site810_instrumWOrder_pdf.php new file mode 100644 index 0000000..943236d --- /dev/null +++ b/export/site810_instrumWOrder_pdf.php @@ -0,0 +1,134 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_pdf.php b/export/site810_pdf.php new file mode 100644 index 0000000..3b1ec2e --- /dev/null +++ b/export/site810_pdf.php @@ -0,0 +1,123 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); +require_once('../language/polish.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', 'B', 15); + // Title + $title = iconv('utf-8','windows-1250','Lista zleceń ['.$_SESSION['site810_inDatefrom'].' - '.$_SESSION['site810_inDateto'].']'); + $this->Cell(0,10,$title,0,0,'L'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + // Page number + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + +// Simple table + function BasicTable($header, $data) + { + // Header + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 8); + + $this->Cell(30,7,iconv('utf-8','windows-1250',$header['1']),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250',$header['2']),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250',$header['3']),1,0,'C'); + $this->Cell(60,7,iconv('utf-8','windows-1250',$header['4']),1,0,'C'); + $this->Cell(35,7,iconv('utf-8','windows-1250',$header['5']),1,0,'C'); + $this->Cell(25,7,iconv('utf-8','windows-1250',$header['6']),1,0,'C'); + $this->Ln(); + // Data + + $this -> SetFont('arial_ce', '', 7); + + for($i=0;$i<count($data);$i++) + { + $this->Cell(30,6,iconv('utf-8','windows-1250',$data[$i]['orderNo']),1,0,'C'); + $this->Cell(20,6,iconv('utf-8','windows-1250',$data[$i]['devName']),1,0,'C'); + $this->Cell(15,6,iconv('utf-8','windows-1250',$data[$i]['bariera']),1,0,'C'); + $this->Cell(60,6,iconv('utf-8','windows-1250',$data[$i]['orderScope']),1,0,'C'); + $this->Cell(35,6,iconv('utf-8','windows-1250',$data[$i]['orderDate']),1,0,'C'); + $this->Cell(25,6,iconv('utf-8','windows-1250',$data[$i]['orderStatus']),1,0,'C'); + $this->Ln(); + + } + + } + + function FancyTable($header, $data) + { + // Colors, line width and bold font + $this->SetFillColor(255,255,0); + $this->SetTextColor(255); + $this->SetDrawColor(128,128,0); + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 8); + // Header + $w = array(40, 35, 40, 45); + for($i=0;$i<count($header);$i++) + $this->Cell($w[$i],7,$header[$i],1,0,'C',true); + $this->Ln(); + // Color and font restoration + $this->SetFillColor(234,234,234); + $this->SetTextColor(0); + $this -> SetFont('arial_ce', '', 8); + // Data + $fill = false; + foreach($data as $row) + { + $this->Cell($w[0],4,$row[0],'LR',0,'L',$fill); + $this->Cell($w[1],4,$row[1],'LR',0,'L',$fill); + $this->Cell($w[2],4,number_format($row[2]),'LR',0,'R',$fill); + $this->Cell($w[3],4,number_format($row[3]),'LR',0,'R',$fill); + $this->Ln(); + $fill = !$fill; + } + // Closing line + $this->Cell(array_sum($w),0,'','T'); + } + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',12); + +$head = array( + '1'=>$lab_Field_site810_001, + '2'=>$lab_Field_site810_002, + '3'=>$lab_Field_site810_003, + '4'=>$lab_Field_site810_004, + '5'=>$lab_Field_site810_005, + '6'=>$lab_Field_site810_006 +); + +$pdf->BasicTable($head, $_SESSION['site810_array']); + +$pdf->Output(); + +?> + + diff --git a/export/site810_print.php b/export/site810_print.php new file mode 100644 index 0000000..81cbf60 --- /dev/null +++ b/export/site810_print.php @@ -0,0 +1,64 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Lista zleceń</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<div class="row"> + <div class="col-md-8"> + <h1><?php echo 'Lista zleceń ['.$_SESSION['site810_inDatefrom'].' - '.$_SESSION['site810_inDateto'].']'; ?></h1> + </div> + <div class="col-md-3"> + <br/> + <div class="pull-right"><button type="button" class="btn btn-default" onclick="window.print();">Drukuj</button></div> + </div> +</div> + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th> Nr zlecenia</th> + <th>Obiekt</th> + <th>Bariera</th> + <th>Zakres zlecenia</th> + <th>Data zlecenia</th> + <th>Status</th> + </tr> + </thead> + +<?php +for($i=0;$i<count($_SESSION['site810_array']);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$_SESSION['site810_array'][$i]['orderNo']."</td> + <td>".$_SESSION['site810_array'][$i]['devName']."</td> + <td>".$_SESSION['site810_array'][$i]['bariera']."</td> + <td>".$_SESSION['site810_array'][$i]['orderScope']."</td> + <td>".$_SESSION['site810_array'][$i]['orderDate']."</td> + <td>".$_SESSION['site810_array'][$i]['orderStatus']."</td> + </tr> + "; +} +?> +</table> + + + +</body> +</html> diff --git a/export/site810_reactivePOrder_pdf.php b/export/site810_reactivePOrder_pdf.php new file mode 100644 index 0000000..be43a5c --- /dev/null +++ b/export/site810_reactivePOrder_pdf.php @@ -0,0 +1,149 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-20); + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(0,5,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); + $this->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający - 1egz.'),0,1,'L'); + $this->Cell(95,3,iconv('utf-8','windows-1250','2. Wykonawca - 1egz.'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,6,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Uaktywnianie piezometru '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Data rozpoczęcia +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,1,'L'); + +//Głębokość właściwa +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m] / rzędna terenu'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S'].' / '.$_SESSION['site810inf_ordMainArray'][0]['OWP_RZDNA']),1,1,'L'); + +//Głębokość zasypu +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Głębokość do zasypu piezometru [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Ilość do wyczyszczenia +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Ilość metrów do wyczyszczenia'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_CLEAN']),1,1,'L'); + +//Średnica +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Średnica piezometru [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Dokumentacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Dokumentacja piezometru'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,'',1,1,'L'); + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Uwagi dotyczące prac związanych z uaktywnianiem piezometru'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_reactiveWOrder_pdf.php b/export/site810_reactiveWOrder_pdf.php new file mode 100644 index 0000000..fce3803 --- /dev/null +++ b/export/site810_reactiveWOrder_pdf.php @@ -0,0 +1,149 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-20); + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(0,5,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); + $this->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający - 1egz.'),0,1,'L'); + $this->Cell(95,3,iconv('utf-8','windows-1250','2. Wykonawca - 1egz.'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,6,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Uaktywnianie studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Data rozpoczęcia +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,1,'L'); + +//Głębokość właściwa +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m] / rzędna terenu'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S'].' / '.$_SESSION['site810inf_ordMainArray'][0]['OWP_RZDNA']),1,1,'L'); + +//Głębokość zasypu +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Głębokość do zasypu studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Ilość do wyczyszczenia +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Ilość metrów do wyczyszczenia'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_CLEAN']),1,1,'L'); + +//Średnica +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Dokumentacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(70,$lineWidth,iconv('utf-8','windows-1250','Dokumentacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(120,$lineWidth,'',1,1,'L'); + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Uwagi dotyczące prac związanych z uaktywnianiem studni'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_reconstrFix_pdf.php b/export/site810_reconstrFix_pdf.php new file mode 100644 index 0000000..2b9d0ef --- /dev/null +++ b/export/site810_reconstrFix_pdf.php @@ -0,0 +1,215 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 12; +$lineWidth = 8; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Załącznik nr 6 do umowy nr ……………………'); + $rigth = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC'].', dnia: '.date('Y-m-d')); + + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,$rigth,0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this -> SetFont('arial_ce', '', 6); + // Page number + $this->Cell(95,10,iconv('utf-8','windows-1250','* - niepotrzebne skreślić'),0,0,'L'); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Protokół odbioru nr: …………/………'),0,1,'C'); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','1. Opis wykonanych prac.'),0,1,'L'); +$pdf->Ln(); + +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'L'); + + +$pdf->SetFont('arial_ce', '', $fontSize); +$y = $pdf->GetY(); +$x = $pdf->GetX(); +$width = 80; +$pdf->MultiCell($width, $lineWidth, iconv('utf-8','windows-1250','Typ/nazwa urządzenia wykonującego pracę'), 1, 'L', FALSE); +$pdf->SetXY($x + $width, $y); +$pdf->Cell(110,2*$lineWidth, '', 1, 1, "l"); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',substr($_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DATE'],0,10)),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Głębokość właściwa [m] / rzędna terenu'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Średnica [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Wyczyszczony zasyp do głębokości [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Wymiana przejścia (liner)*'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'TAK / NIE*',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(80,$lineWidth,iconv('utf-8','windows-1250','Likwidacja do rzędnej terenu'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(110,$lineWidth,'',1,1,'L'); + + + +$pdf->SetFont('arial_ce', '', $fontSize); +$y = $pdf->GetY(); +$x = $pdf->GetX(); +$width = 80; +$pdf->MultiCell($width, $lineWidth, "".iconv('utf-8','windows-1250','Uwagi dotyczące prac związanych z rekonstrukcją')."\n \n ", 1, 'L', FALSE); +$pdf->SetXY($x + $width, $y); +$pdf->Cell(110,4*$lineWidth, '', 1, 1, "l"); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','2. Opis prowadzonych innych prac.'),0,1,'L'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Inne prace'),1,1,'L'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(60,30,iconv('utf-8','windows-1250','Rodzaj prac'),1,0,'L'); +$pdf->Cell(130,30,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Typ/nazwa urządzenia'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data rozpoczęcia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,$lineWidth,iconv('utf-8','windows-1250','Data zakończenia prac'),1,0,'L'); +$pdf->Cell(130,$lineWidth,'',1,1,'C'); + +$pdf->Cell(60,50,iconv('utf-8','windows-1250','Opis wykonanych prac'),1,0,'L'); +$pdf->Cell(130,50,'',1,1,'C'); + +$pdf->Cell(60,30,iconv('utf-8','windows-1250','Uwagi dozoru Wykonawcy'),1,0,'L'); +$pdf->Cell(130,30,'',1,1,'C'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','3. Zakończenie prac przy rekonstrukcji.'),0,1,'L'); +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Uwagi Zleceniodawcy'),1,0,'C'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Decyzja Zleceniodawcy'),1,1,'C'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,40,'',1,0,'C'); +$pdf->Cell(95,40,'',1,1,'C'); + +$pdf->Cell(0,$lineWidth,'',0,1,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(190,5,iconv('utf-8','windows-1250','4.Potwierdzenie zakończenia rekonstrukcji.'),0,1,'L'); +$pdf->Cell(0,$lineWidth,'',0,1,'L'); + + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel wykonawcy prac'),1,0,'C'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Przedstawiciel Zleceniodawcy'),1,1,'C'); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,40,'',1,0,'C'); +$pdf->Cell(95,40,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,'Data:',1,0,'L'); +$pdf->Cell(95,$lineWidth,'Data:',1,1,'L'); + + +$pdf->Cell(0,10,'',0,1,'L'); +$pdf->SetFont('arial_ce', '', 6); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','Otrzymują:'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','1. Zamawiający – 1 egz.'),0,1,'L'); +$pdf->Cell(0,3,iconv('utf-8','windows-1250','2. Wykonawca - 1 egz.'),0,1,'L'); + + + + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_reconstrPOrder_pdf.php b/export/site810_reconstrPOrder_pdf.php new file mode 100644 index 0000000..5c33896 --- /dev/null +++ b/export/site810_reconstrPOrder_pdf.php @@ -0,0 +1,129 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry piezometru '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja piezometru'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość piezometru [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica piezometru [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_reconstrWOrder_pdf.php b/export/site810_reconstrWOrder_pdf.php new file mode 100644 index 0000000..943236d --- /dev/null +++ b/export/site810_reconstrWOrder_pdf.php @@ -0,0 +1,134 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + //$this->Ln(15); + $this->Ln(); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Zlecenie nr: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_NO']),0,1,'C'); +$pdf->SetFont('arial_ce', '', 12); +$pdf->Cell(190,5,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID'])).': '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'],0,1,'C'); +$pdf->Ln(); + +//Label +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(0,$lineWidth,iconv('utf-8','windows-1250','Parametry studni '.$_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME']),1,1,'C',1); + +//Lokalizacja +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Lokalizacja studni'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250','Bariera '.$_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL']),1,1,'L'); + +//Głębokość +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Głębokość studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S']),1,1,'L'); + +//Zasyp +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Zasyp studni [m]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP']),1,1,'L'); + +//Średnica studni [mm] +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Średnica studni [mm]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_SRED']),1,1,'L'); + +//Metan +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Metan [%]'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_METAN']),1,1,'L'); + +//Dojazd +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(75,$lineWidth,iconv('utf-8','windows-1250','Dojazd'),1,0,'L'); +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(115,$lineWidth,iconv('utf-8','windows-1250',setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD'])),1,1,'L'); + + +$pdf->Ln(); + +$pdf->Cell(190,$lineWidth,iconv('utf-8','windows-1250','Inne prace / informacje'),1,1,'L',1); +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->MultiCell(190,6,iconv('utf-8','windows-1250',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']),1,'J'); + +$pdf->Ln(); + +$pdf->SetFont('arial_ce', 'B', $fontSize); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba zlecająca'),1,0,'C',1); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Osoba przyjmująca zlecenie'),1,1,'C',1); + +$pdf->SetFont('arial_ce', '', $fontSize); +$pdf->Cell(95,35,'',1,0,'C'); +$pdf->Cell(95,35,'',1,1,'C'); + +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE']),1,0,'L'); +$pdf->Cell(95,$lineWidth,iconv('utf-8','windows-1250','Data przyjęcia zlecenia: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE']),1,0,'L'); + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_redirectFix_pdf.php b/export/site810_redirectFix_pdf.php new file mode 100644 index 0000000..fd76796 --- /dev/null +++ b/export/site810_redirectFix_pdf.php @@ -0,0 +1,72 @@ +<?php session_start(); + +require_once'../fpdf/fpdf.php'; +require_once'../language/polish.php'; +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +$fontSize = 10; +$lineWidth = 6; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', '', 10); + // Title + $left = iconv('utf-8','windows-1250','Oddział: '.$_SESSION['site810inf_ordMainArray'][0]['ORD_PLC']); + //$this->Cell(190,5,$title,1,0,'L'); + $this->Cell(95,5,$left,0,0,'L'); + $this->Cell(95,5,'Data: '.date('Y-m-d'),0,0,'R'); + //$this->Cell(100,5,$title,1,0,'R'); + // Line break + $this->Ln(50); + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } + + +} + + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); +$pdf->setFillColor(240,240,240); + +$pdf->AliasNbPages(); +$pdf->AddPage(); +//$pdf->SetFont('Times','',$fontSize); + +// tytuł zlecenia +$pdf->SetLineWidth(.1); +$pdf->SetFont('arial_ce', 'B', 14); +$pdf->Cell(190,10,iconv('utf-8','windows-1250','Protokół odbioru generowany jest przez Bestgum.'),0,1,'C'); + + +$pdf->Output(); + + +mysql_close($con); +?> + + diff --git a/export/site810_xls.php b/export/site810_xls.php new file mode 100644 index 0000000..3438fa2 --- /dev/null +++ b/export/site810_xls.php @@ -0,0 +1,53 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="Lista_zlecen.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:G1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:G1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Lista zleceń ['.$_SESSION['site810_inDatefrom'].' - '.$_SESSION['site810_inDateto'].']'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Nr zlecenia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Obiekt'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Zakres zlecenia'); +$objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Data zlecenia'); +$objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Status'); + + +for($i=0;$i<count($_SESSION['site810_array']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['site810_array'][$i]['orderNo']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['site810_array'][$i]['devName']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['site810_array'][$i]['bariera']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['site810_array'][$i]['orderScope']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $_SESSION['site810_array'][$i]['orderDate']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $_SESSION['site810_array'][$i]['orderStatus']); + + +} +$objPHPExcel->getActiveSheet()->setTitle('Lista zleceń'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/fonts/ARIAL_ce.ttf b/fonts/ARIAL_ce.ttf new file mode 100644 index 0000000..d59f53b Binary files /dev/null and b/fonts/ARIAL_ce.ttf differ diff --git a/fonts/ARIAL_ce_B.ttf b/fonts/ARIAL_ce_B.ttf new file mode 100644 index 0000000..b7e58f5 Binary files /dev/null and b/fonts/ARIAL_ce_B.ttf differ diff --git a/fonts/ARIAL_ce_BI.ttf b/fonts/ARIAL_ce_BI.ttf new file mode 100644 index 0000000..00968d2 Binary files /dev/null and b/fonts/ARIAL_ce_BI.ttf differ diff --git a/fonts/ARIAL_ce_I.ttf b/fonts/ARIAL_ce_I.ttf new file mode 100644 index 0000000..a203d60 Binary files /dev/null and b/fonts/ARIAL_ce_I.ttf differ diff --git a/fonts/Bedizen.ttf b/fonts/Bedizen.ttf new file mode 100644 index 0000000..d115733 Binary files /dev/null and b/fonts/Bedizen.ttf differ diff --git a/fonts/Calibri_b.ttf b/fonts/Calibri_b.ttf new file mode 100644 index 0000000..c8578ca Binary files /dev/null and b/fonts/Calibri_b.ttf differ diff --git a/fonts/Calibri_bi.ttf b/fonts/Calibri_bi.ttf new file mode 100644 index 0000000..199e62d Binary files /dev/null and b/fonts/Calibri_bi.ttf differ diff --git a/fonts/Calibri_i.ttf b/fonts/Calibri_i.ttf new file mode 100644 index 0000000..8362af9 Binary files /dev/null and b/fonts/Calibri_i.ttf differ diff --git a/fonts/Forgotte.ttf b/fonts/Forgotte.ttf new file mode 100644 index 0000000..a2f7f4a Binary files /dev/null and b/fonts/Forgotte.ttf differ diff --git a/fonts/GeosansLight.ttf b/fonts/GeosansLight.ttf new file mode 100644 index 0000000..055932a Binary files /dev/null and b/fonts/GeosansLight.ttf differ diff --git a/fonts/MankSans.ttf b/fonts/MankSans.ttf new file mode 100644 index 0000000..a6146a9 Binary files /dev/null and b/fonts/MankSans.ttf differ diff --git a/fonts/Silkscreen.ttf b/fonts/Silkscreen.ttf new file mode 100644 index 0000000..ae4425d Binary files /dev/null and b/fonts/Silkscreen.ttf differ diff --git a/fonts/advent_light.ttf b/fonts/advent_light.ttf new file mode 100644 index 0000000..514030a Binary files /dev/null and b/fonts/advent_light.ttf differ diff --git a/fonts/arial_ce.afm b/fonts/arial_ce.afm new file mode 100644 index 0000000..4853446 --- /dev/null +++ b/fonts/arial_ce.afm @@ -0,0 +1,2270 @@ +StartFontMetrics 4.1 +FontName ArialMT +FullName Arial +Notice Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +EncodingScheme FontSpecific +FamilyName Arial +Weight Regular +Version (Version 2.76) +Characters 1296 +ItalicAngle 0.0 +Ascender 905 +Descender -212 +UnderlineThickness 73 +UnderlinePosition -106 +IsFixedPitch false +FontBBox -664 -325 2028 1037 +StartCharMetrics 1338 +C 0 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 1 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 2 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 3 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 4 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 5 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 6 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 7 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 8 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 9 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 10 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 11 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 12 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 13 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 14 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 15 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 16 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 17 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 18 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 19 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 20 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 21 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 22 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 23 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 24 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 25 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 26 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 27 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 28 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 29 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 30 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 31 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 32 ; WX 278 ; N space ; B 86 0 195 716 ; +C 33 ; WX 278 ; N exclam ; B 86 0 195 716 ; +C 34 ; WX 355 ; N quotedbl ; B 46 462 308 716 ; +C 35 ; WX 556 ; N numbersign ; B 10 -12 543 728 ; +C 36 ; WX 556 ; N dollar ; B 36 -103 509 782 ; +C 37 ; WX 889 ; N percent ; B 58 -26 828 728 ; +C 38 ; WX 667 ; N ampersand ; B 43 -17 644 728 ; +C 39 ; WX 191 ; N quotesingle ; B 44 462 144 716 ; +C 40 ; WX 333 ; N parenleft ; B 61 -210 297 728 ; +C 41 ; WX 333 ; N parenright ; B 61 -210 297 728 ; +C 42 ; WX 389 ; N asterisk ; B 31 423 354 728 ; +C 43 ; WX 584 ; N plus ; B 56 116 528 589 ; +C 44 ; WX 278 ; N comma ; B 83 -142 189 100 ; +C 45 ; WX 333 ; N hyphen ; B 32 215 302 303 ; +C 46 ; WX 278 ; N period ; B 91 0 191 100 ; +C 47 ; WX 278 ; N slash ; B 0 -12 278 728 ; +C 48 ; WX 556 ; N zero ; B 42 -12 508 719 ; +C 49 ; WX 556 ; N one ; B 109 0 373 719 ; +C 50 ; WX 556 ; N two ; B 29 0 503 719 ; +C 51 ; WX 556 ; N three ; B 42 -13 511 719 ; +C 52 ; WX 556 ; N four ; B 13 0 508 716 ; +C 53 ; WX 556 ; N five ; B 42 -12 516 706 ; +C 54 ; WX 556 ; N six ; B 38 -12 510 719 ; +C 55 ; WX 556 ; N seven ; B 47 0 511 707 ; +C 56 ; WX 556 ; N eight ; B 41 -12 512 719 ; +C 57 ; WX 556 ; N nine ; B 42 -12 512 719 ; +C 58 ; WX 278 ; N colon ; B 90 0 190 519 ; +C 59 ; WX 278 ; N semicolon ; B 83 -142 189 519 ; +C 60 ; WX 584 ; N less ; B 55 110 529 595 ; +C 61 ; WX 584 ; N equal ; B 56 204 528 503 ; +C 62 ; WX 584 ; N greater ; B 55 110 529 595 ; +C 63 ; WX 556 ; N question ; B 44 0 506 728 ; +C 64 ; WX 1015 ; N at ; B 54 -210 979 729 ; +C 65 ; WX 667 ; N A ; B -1 0 668 716 ; +C 66 ; WX 667 ; N B ; B 73 0 614 716 ; +C 67 ; WX 722 ; N C ; B 50 -12 683 728 ; +C 68 ; WX 722 ; N D ; B 77 0 669 716 ; +C 69 ; WX 667 ; N E ; B 79 0 613 716 ; +C 70 ; WX 611 ; N F ; B 82 0 565 716 ; +C 71 ; WX 778 ; N G ; B 53 -12 715 728 ; +C 72 ; WX 722 ; N H ; B 80 0 642 716 ; +C 73 ; WX 278 ; N I ; B 93 0 188 716 ; +C 74 ; WX 500 ; N J ; B 27 -12 422 716 ; +C 75 ; WX 667 ; N K ; B 73 0 665 716 ; +C 76 ; WX 556 ; N L ; B 73 0 521 716 ; +C 77 ; WX 833 ; N M ; B 74 0 757 716 ; +C 78 ; WX 722 ; N N ; B 76 0 640 716 ; +C 79 ; WX 778 ; N O ; B 48 -12 733 729 ; +C 80 ; WX 667 ; N P ; B 77 0 624 716 ; +C 81 ; WX 778 ; N Q ; B 43 -56 741 729 ; +C 82 ; WX 722 ; N R ; B 79 0 709 716 ; +C 83 ; WX 667 ; N S ; B 45 -12 615 728 ; +C 84 ; WX 611 ; N T ; B 23 0 591 716 ; +C 85 ; WX 722 ; N U ; B 79 -12 642 716 ; +C 86 ; WX 667 ; N V ; B 4 0 659 716 ; +C 87 ; WX 944 ; N W ; B 12 0 933 716 ; +C 88 ; WX 667 ; N X ; B 4 0 661 716 ; +C 89 ; WX 667 ; N Y ; B 3 0 659 716 ; +C 90 ; WX 611 ; N Z ; B 20 0 586 716 ; +C 91 ; WX 278 ; N bracketleft ; B 68 -199 262 716 ; +C 92 ; WX 278 ; N backslash ; B 0 -12 278 728 ; +C 93 ; WX 278 ; N bracketright ; B 19 -199 213 716 ; +C 94 ; WX 469 ; N asciicircum ; B 26 337 443 728 ; +C 95 ; WX 556 ; N underscore ; B -15 -199 567 -135 ; +C 96 ; WX 333 ; N grave ; B 43 583 227 720 ; +C 97 ; WX 556 ; N a ; B 36 -12 514 530 ; +C 98 ; WX 556 ; N b ; B 65 -12 515 716 ; +C 99 ; WX 500 ; N c ; B 39 -12 491 530 ; +C 100 ; WX 556 ; N d ; B 34 -12 484 716 ; +C 101 ; WX 556 ; N e ; B 37 -12 515 530 ; +C 102 ; WX 278 ; N f ; B 9 0 313 728 ; +C 103 ; WX 556 ; N g ; B 32 -210 489 530 ; +C 104 ; WX 556 ; N h ; B 66 0 488 716 ; +C 105 ; WX 222 ; N i ; B 66 0 154 716 ; +C 106 ; WX 222 ; N j ; B -46 -210 153 716 ; +C 107 ; WX 500 ; N k ; B 66 0 496 716 ; +C 108 ; WX 222 ; N l ; B 64 0 152 716 ; +C 109 ; WX 833 ; N m ; B 66 0 769 530 ; +C 110 ; WX 556 ; N n ; B 66 0 487 530 ; +C 111 ; WX 556 ; N o ; B 33 -12 519 530 ; +C 112 ; WX 556 ; N p ; B 66 -199 516 530 ; +C 113 ; WX 556 ; N q ; B 35 -199 484 530 ; +C 114 ; WX 333 ; N r ; B 65 0 347 530 ; +C 115 ; WX 500 ; N s ; B 31 -12 461 530 ; +C 116 ; WX 278 ; N t ; B 18 -7 271 700 ; +C 117 ; WX 556 ; N u ; B 64 -12 484 519 ; +C 118 ; WX 500 ; N v ; B 13 0 488 519 ; +C 119 ; WX 722 ; N w ; B 3 0 714 519 ; +C 120 ; WX 500 ; N x ; B 7 0 493 519 ; +C 121 ; WX 500 ; N y ; B 16 -210 491 519 ; +C 122 ; WX 500 ; N z ; B 20 0 479 519 ; +C 123 ; WX 334 ; N braceleft ; B 28 -210 311 728 ; +C 124 ; WX 260 ; N bar ; B 92 -210 168 728 ; +C 125 ; WX 334 ; N braceright ; B 23 -210 306 728 ; +C 126 ; WX 584 ; N asciitilde ; B 42 272 542 432 ; +C 127 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 128 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 129 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 130 ; WX 222 ; N quotesinglbase ; B 53 -132 155 102 ; +C 131 ; WX 556 ; N florin ; B 22 -210 530 729 ; +C 132 ; WX 333 ; N quotedblbase ; B 35 -132 288 102 ; +C 133 ; WX 1000 ; N ellipsis ; B 117 0 884 100 ; +C 134 ; WX 556 ; N dagger ; B 36 -169 515 699 ; +C 135 ; WX 556 ; N daggerdbl ; B 36 -169 517 706 ; +C 136 ; WX 333 ; N circumflex ; B 12 583 321 720 ; +C 137 ; WX 1000 ; N perthousand ; B 18 -26 982 728 ; +C 138 ; WX 667 ; N Scaron ; B 45 -12 615 894 ; +C 139 ; WX 333 ; N guilsinglleft ; B 45 35 271 480 ; +C 140 ; WX 1000 ; N OE ; B 63 -12 968 728 ; +C 141 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 142 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 143 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 144 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 145 ; WX 222 ; N quoteleft ; B 63 494 165 728 ; +C 146 ; WX 222 ; N quoteright ; B 53 489 155 723 ; +C 147 ; WX 333 ; N quotedblleft ; B 41 494 294 728 ; +C 148 ; WX 333 ; N quotedblright ; B 35 489 288 723 ; +C 149 ; WX 350 ; N bullet ; B 53 227 301 474 ; +C 150 ; WX 556 ; N endash ; B -2 224 554 294 ; +C 151 ; WX 1000 ; N emdash ; B 0 224 1000 294 ; +C 152 ; WX 333 ; N tilde ; B 3 595 330 708 ; +C 153 ; WX 1000 ; N trademark ; B 110 318 871 716 ; +C 154 ; WX 500 ; N scaron ; B 31 -12 461 720 ; +C 155 ; WX 333 ; N guilsinglright ; B 45 35 266 480 ; +C 156 ; WX 944 ; N oe ; B 40 -12 908 530 ; +C 157 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 158 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 159 ; WX 667 ; N Ydieresis ; B 3 0 659 860 ; +C 160 ; WX 278 ; N space ; B 86 0 195 716 ; +C 161 ; WX 333 ; N exclamdown ; B 113 -197 222 519 ; +C 162 ; WX 556 ; N cent ; B 52 -200 505 716 ; +C 163 ; WX 556 ; N sterling ; B 13 -14 528 728 ; +C 164 ; WX 556 ; N currency ; B 36 115 516 594 ; +C 165 ; WX 556 ; N yen ; B -1 0 553 716 ; +C 166 ; WX 260 ; N brokenbar ; B 92 -210 168 728 ; +C 167 ; WX 556 ; N section ; B 40 -210 510 728 ; +C 168 ; WX 333 ; N dieresis ; B 30 620 304 720 ; +C 169 ; WX 737 ; N copyright ; B 1 -9 738 728 ; +C 170 ; WX 370 ; N ordfeminine ; B 23 364 351 728 ; +C 171 ; WX 556 ; N guillemotleft ; B 65 35 484 480 ; +C 172 ; WX 584 ; N logicalnot ; B 56 207 528 503 ; +C 173 ; WX 333 ; N hyphen ; B 32 215 302 303 ; +C 174 ; WX 737 ; N registered ; B 1 -9 738 728 ; +C 175 ; WX 552 ; N overscore ; B -15 765 567 828 ; +C 176 ; WX 400 ; N degree ; B 63 457 333 728 ; +C 177 ; WX 549 ; N plusminus ; B 38 0 511 600 ; +C 178 ; WX 333 ; N twosuperior ; B 12 358 316 725 ; +C 179 ; WX 333 ; N threesuperior ; B 16 349 315 725 ; +C 180 ; WX 333 ; N acute ; B 108 583 289 720 ; +C 181 ; WX 576 ; N mu1 ; B 78 -199 497 519 ; +C 182 ; WX 537 ; N paragraph ; B 0 -199 541 716 ; +C 183 ; WX 278 ; N periodcentered ; B 90 302 190 402 ; +C 184 ; WX 333 ; N cedilla ; B 52 -206 264 11 ; +C 185 ; WX 333 ; N onesuperior ; B 52 358 232 725 ; +C 186 ; WX 365 ; N ordmasculine ; B 22 361 342 728 ; +C 187 ; WX 556 ; N guillemotright ; B 68 35 487 480 ; +C 188 ; WX 834 ; N onequarter ; B 52 -28 819 728 ; +C 189 ; WX 834 ; N onehalf ; B 52 -28 816 728 ; +C 190 ; WX 834 ; N threequarters ; B 16 -28 819 728 ; +C 191 ; WX 611 ; N questiondown ; B 77 -209 539 519 ; +C 192 ; WX 667 ; N Agrave ; B -1 0 668 896 ; +C 193 ; WX 667 ; N Aacute ; B -1 0 668 896 ; +C 194 ; WX 667 ; N Acircumflex ; B -1 0 668 896 ; +C 195 ; WX 667 ; N Atilde ; B -1 0 668 873 ; +C 196 ; WX 667 ; N Adieresis ; B -1 0 668 860 ; +C 197 ; WX 667 ; N Aring ; B -1 0 668 869 ; +C 198 ; WX 1000 ; N AE ; B 0 0 945 716 ; +C 199 ; WX 722 ; N Ccedilla ; B 50 -206 683 728 ; +C 200 ; WX 667 ; N Egrave ; B 79 0 613 896 ; +C 201 ; WX 667 ; N Eacute ; B 79 0 613 896 ; +C 202 ; WX 667 ; N Ecircumflex ; B 79 0 613 896 ; +C 203 ; WX 667 ; N Edieresis ; B 79 0 613 860 ; +C 204 ; WX 278 ; N Igrave ; B 26 0 210 896 ; +C 205 ; WX 278 ; N Iacute ; B 69 0 249 896 ; +C 206 ; WX 278 ; N Icircumflex ; B -16 0 293 896 ; +C 207 ; WX 278 ; N Idieresis ; B 2 0 276 860 ; +C 208 ; WX 722 ; N Eth ; B -1 0 669 716 ; +C 209 ; WX 722 ; N Ntilde ; B 76 0 640 873 ; +C 210 ; WX 778 ; N Ograve ; B 48 -12 733 896 ; +C 211 ; WX 778 ; N Oacute ; B 48 -12 733 896 ; +C 212 ; WX 778 ; N Ocircumflex ; B 48 -12 733 896 ; +C 213 ; WX 778 ; N Otilde ; B 48 -12 733 873 ; +C 214 ; WX 778 ; N Odieresis ; B 48 -12 733 860 ; +C 215 ; WX 584 ; N multiply ; B 79 141 504 566 ; +C 216 ; WX 778 ; N Oslash ; B 41 -29 741 742 ; +C 217 ; WX 722 ; N Ugrave ; B 79 -12 642 896 ; +C 218 ; WX 722 ; N Uacute ; B 79 -12 642 896 ; +C 219 ; WX 722 ; N Ucircumflex ; B 79 -12 642 896 ; +C 220 ; WX 722 ; N Udieresis ; B 79 -12 642 860 ; +C 221 ; WX 667 ; N Yacute ; B 3 0 659 896 ; +C 222 ; WX 667 ; N Thorn ; B 77 0 624 716 ; +C 223 ; WX 611 ; N germandbls ; B 75 -12 580 728 ; +C 224 ; WX 556 ; N agrave ; B 36 -12 514 720 ; +C 225 ; WX 556 ; N aacute ; B 36 -12 514 720 ; +C 226 ; WX 556 ; N acircumflex ; B 36 -12 514 720 ; +C 227 ; WX 556 ; N atilde ; B 36 -12 514 708 ; +C 228 ; WX 556 ; N adieresis ; B 36 -12 514 720 ; +C 229 ; WX 556 ; N aring ; B 36 -12 514 741 ; +C 230 ; WX 889 ; N ae ; B 33 -12 849 530 ; +C 231 ; WX 500 ; N ccedilla ; B 39 -196 491 530 ; +C 232 ; WX 556 ; N egrave ; B 37 -12 515 720 ; +C 233 ; WX 556 ; N eacute ; B 37 -12 515 720 ; +C 234 ; WX 556 ; N ecircumflex ; B 37 -12 515 720 ; +C 235 ; WX 556 ; N edieresis ; B 37 -12 515 720 ; +C 236 ; WX 278 ; N igrave ; B 17 0 201 720 ; +C 237 ; WX 278 ; N iacute ; B 92 0 272 720 ; +C 238 ; WX 278 ; N icircumflex ; B -8 0 301 720 ; +C 239 ; WX 278 ; N idieresis ; B 4 0 278 720 ; +C 240 ; WX 556 ; N eth ; B 36 -12 516 716 ; +C 241 ; WX 556 ; N ntilde ; B 66 0 487 708 ; +C 242 ; WX 556 ; N ograve ; B 33 -12 519 720 ; +C 243 ; WX 556 ; N oacute ; B 33 -12 519 720 ; +C 244 ; WX 556 ; N ocircumflex ; B 33 -12 519 720 ; +C 245 ; WX 556 ; N otilde ; B 33 -12 519 708 ; +C 246 ; WX 556 ; N odieresis ; B 33 -12 519 720 ; +C 247 ; WX 549 ; N divide ; B 38 156 511 550 ; +C 248 ; WX 611 ; N oslash ; B 63 -39 549 550 ; +C 249 ; WX 556 ; N ugrave ; B 64 -12 484 720 ; +C 250 ; WX 556 ; N uacute ; B 64 -12 484 720 ; +C 251 ; WX 556 ; N ucircumflex ; B 64 -12 484 720 ; +C 252 ; WX 556 ; N udieresis ; B 64 -12 484 720 ; +C 253 ; WX 500 ; N yacute ; B 16 -210 491 720 ; +C 254 ; WX 556 ; N thorn ; B 66 -199 516 716 ; +C 255 ; WX 500 ; N ydieresis ; B 16 -210 491 720 ; +C -1 ; WX 0 ; N .null ; B 86 0 195 716 ; +C -1 ; WX 278 ; N nonmarkingreturn ; B 86 0 195 716 ; +C -1 ; WX 549 ; N notequal ; B 38 -14 511 720 ; +C -1 ; WX 713 ; N infinity ; B 75 189 640 510 ; +C -1 ; WX 549 ; N lessequal ; B 38 52 512 654 ; +C -1 ; WX 549 ; N greaterequal ; B 38 52 512 654 ; +C -1 ; WX 494 ; N partialdiff ; B 27 -12 475 728 ; +C -1 ; WX 713 ; N summation ; B 60 -210 677 728 ; +C -1 ; WX 823 ; N product ; B 79 -210 744 728 ; +C -1 ; WX 549 ; N pi1 ; B 0 0 549 519 ; +C -1 ; WX 274 ; N integral ; B 0 -107 273 910 ; +C -1 ; WX 768 ; N Ohm ; B 62 0 720 734 ; +C -1 ; WX 549 ; N radical ; B 41 -38 549 913 ; +C -1 ; WX 549 ; N approxequal ; B 25 184 524 521 ; +C -1 ; WX 612 ; N increment ; B 13 0 599 677 ; +C -1 ; WX 494 ; N lozenge ; B 23 0 472 694 ; +C -1 ; WX 167 ; N fraction ; B -222 -28 392 728 ; +C -1 ; WX 556 ; N Euro ; B -14 -12 541 728 ; +C -1 ; WX 500 ; N fi ; B 11 0 432 728 ; +C -1 ; WX 500 ; N fl ; B 11 0 431 728 ; +C -1 ; WX 278 ; N dotlessi ; B 97 0 185 519 ; +C -1 ; WX 333 ; N macron ; B 14 599 319 671 ; +C -1 ; WX 333 ; N breve ; B 22 588 311 715 ; +C -1 ; WX 333 ; N dotaccent ; B 112 583 221 692 ; +C -1 ; WX 333 ; N ring ; B 79 562 255 741 ; +C -1 ; WX 333 ; N hungarumlaut ; B 28 583 373 720 ; +C -1 ; WX 333 ; N ogonek ; B 89 -208 303 12 ; +C -1 ; WX 333 ; N caron ; B 20 583 329 720 ; +C -1 ; WX 556 ; N Lslash ; B 0 0 521 716 ; +C -1 ; WX 222 ; N lslash ; B 1 0 218 716 ; +C -1 ; WX 611 ; N Zcaron ; B 20 0 586 894 ; +C -1 ; WX 500 ; N zcaron ; B 20 0 479 720 ; +C -1 ; WX 584 ; N minus ; B 56 312 528 394 ; +C -1 ; WX 556 ; N franc ; B 0 0 506 716 ; +C -1 ; WX 778 ; N Gbreve ; B 53 -12 715 886 ; +C -1 ; WX 556 ; N gbreve ; B 32 -210 489 715 ; +C -1 ; WX 278 ; N Idot ; B 86 0 195 869 ; +C -1 ; WX 667 ; N Scedilla ; B 45 -201 615 728 ; +C -1 ; WX 500 ; N scedilla ; B 31 -196 461 530 ; +C -1 ; WX 722 ; N Cacute ; B 50 -12 683 896 ; +C -1 ; WX 500 ; N cacute ; B 39 -12 491 720 ; +C -1 ; WX 722 ; N Ccaron ; B 50 -12 683 894 ; +C -1 ; WX 500 ; N ccaron ; B 39 -12 491 720 ; +C -1 ; WX 556 ; N dmacron ; B 34 -12 555 716 ; +C -1 ; WX 333 ; N middot ; B 243 311 343 411 ; +C -1 ; WX 667 ; N Abreve ; B -1 0 668 886 ; +C -1 ; WX 556 ; N abreve ; B 36 -12 514 715 ; +C -1 ; WX 667 ; N Aogonek ; B -1 -203 756 716 ; +C -1 ; WX 556 ; N aogonek ; B 36 -196 619 530 ; +C -1 ; WX 722 ; N Dcaron ; B 77 0 669 894 ; +C -1 ; WX 615 ; N dcaron ; B 35 -12 616 716 ; +C -1 ; WX 722 ; N Dslash ; B -1 0 669 716 ; +C -1 ; WX 667 ; N Eogonek ; B 79 -208 613 716 ; +C -1 ; WX 556 ; N eogonek ; B 37 -208 515 530 ; +C -1 ; WX 667 ; N Ecaron ; B 79 0 613 894 ; +C -1 ; WX 556 ; N ecaron ; B 37 -12 515 720 ; +C -1 ; WX 556 ; N Lacute ; B 73 0 521 896 ; +C -1 ; WX 222 ; N lacute ; B 32 0 212 889 ; +C -1 ; WX 556 ; N Lcaron ; B 73 0 521 716 ; +C -1 ; WX 292 ; N lcaron ; B 66 0 291 716 ; +C -1 ; WX 556 ; N Ldot ; B 73 0 521 716 ; +C -1 ; WX 334 ; N ldot ; B 64 0 330 716 ; +C -1 ; WX 722 ; N Nacute ; B 76 0 640 896 ; +C -1 ; WX 556 ; N nacute ; B 66 0 487 720 ; +C -1 ; WX 722 ; N Ncaron ; B 76 0 640 896 ; +C -1 ; WX 556 ; N ncaron ; B 66 0 487 720 ; +C -1 ; WX 778 ; N Odblacute ; B 48 -12 733 896 ; +C -1 ; WX 556 ; N odblacute ; B 33 -12 519 720 ; +C -1 ; WX 722 ; N Racute ; B 79 0 709 896 ; +C -1 ; WX 333 ; N racute ; B 65 0 347 720 ; +C -1 ; WX 722 ; N Rcaron ; B 79 0 709 894 ; +C -1 ; WX 333 ; N rcaron ; B 29 0 347 720 ; +C -1 ; WX 667 ; N Sacute ; B 45 -12 615 896 ; +C -1 ; WX 500 ; N sacute ; B 31 -12 461 720 ; +C -1 ; WX 611 ; N Tcedilla ; B 23 -283 591 716 ; +C -1 ; WX 278 ; N tcedilla ; B 18 -260 271 700 ; +C -1 ; WX 611 ; N Tcaron ; B 23 0 591 894 ; +C -1 ; WX 375 ; N tcaron ; B 17 -7 374 716 ; +C -1 ; WX 722 ; N Uring ; B 79 -12 642 938 ; +C -1 ; WX 556 ; N uring ; B 64 -12 484 741 ; +C -1 ; WX 722 ; N Udblacute ; B 79 -12 642 896 ; +C -1 ; WX 556 ; N udblacute ; B 64 -12 484 720 ; +C -1 ; WX 611 ; N Zacute ; B 20 0 586 896 ; +C -1 ; WX 500 ; N zacute ; B 20 0 479 720 ; +C -1 ; WX 611 ; N Zdot ; B 20 0 586 869 ; +C -1 ; WX 500 ; N zdot ; B 20 0 479 692 ; +C -1 ; WX 551 ; N Gamma ; B 80 0 527 716 ; +C -1 ; WX 778 ; N Theta ; B 47 -12 731 729 ; +C -1 ; WX 798 ; N Phi ; B 42 -26 756 737 ; +C -1 ; WX 578 ; N alpha ; B 35 -12 541 530 ; +C -1 ; WX 557 ; N delta ; B 35 -12 521 716 ; +C -1 ; WX 446 ; N epsilon ; B 48 -12 423 530 ; +C -1 ; WX 617 ; N sigma ; B 33 -12 595 530 ; +C -1 ; WX 395 ; N tau ; B 22 0 372 519 ; +C -1 ; WX 648 ; N phi ; B 35 -199 614 531 ; +C -1 ; WX 552 ; N underscoredbl ; B -15 -325 567 -135 ; +C -1 ; WX 500 ; N exclamdbl ; B 86 0 414 716 ; +C -1 ; WX 365 ; N nsuperior ; B 40 253 326 585 ; +C -1 ; WX 1094 ; N peseta ; B 25 -13 1072 716 ; +C -1 ; WX 1000 ; N arrowleft ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowup ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowright ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowdown ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowboth ; B 39 77 961 429 ; +C -1 ; WX 500 ; N arrowupdn ; B 74 -208 425 714 ; +C -1 ; WX 500 ; N arrowupdnbse ; B 74 -303 425 714 ; +C -1 ; WX 979 ; N orthogonal ; B 177 0 802 625 ; +C -1 ; WX 719 ; N intersection ; B 77 0 642 729 ; +C -1 ; WX 583 ; N equivalence ; B 56 95 528 611 ; +C -1 ; WX 604 ; N house ; B 77 0 527 563 ; +C -1 ; WX 584 ; N revlogicalnot ; B 55 207 528 503 ; +C -1 ; WX 604 ; N integraltp ; B 267 -251 477 848 ; +C -1 ; WX 604 ; N integralbt ; B 127 -251 337 848 ; +C -1 ; WX 708 ; N SF100000 ; B -11 261 719 346 ; +C -1 ; WX 625 ; N SF110000 ; B 223 -303 309 910 ; +C -1 ; WX 708 ; N SF010000 ; B 312 -303 720 346 ; +C -1 ; WX 708 ; N SF030000 ; B -11 -303 396 346 ; +C -1 ; WX 708 ; N SF020000 ; B 312 261 720 910 ; +C -1 ; WX 708 ; N SF040000 ; B -11 261 396 910 ; +C -1 ; WX 708 ; N SF080000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF090000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF060000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF070000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF050000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF430000 ; B -11 168 719 439 ; +C -1 ; WX 708 ; N SF240000 ; B 219 -303 490 910 ; +C -1 ; WX 708 ; N SF510000 ; B 312 -303 720 439 ; +C -1 ; WX 708 ; N SF520000 ; B 219 -303 720 346 ; +C -1 ; WX 708 ; N SF390000 ; B 219 -303 719 439 ; +C -1 ; WX 708 ; N SF220000 ; B -11 -303 396 439 ; +C -1 ; WX 708 ; N SF210000 ; B -11 -303 489 346 ; +C -1 ; WX 708 ; N SF250000 ; B -11 -303 489 439 ; +C -1 ; WX 708 ; N SF500000 ; B 312 168 720 910 ; +C -1 ; WX 708 ; N SF490000 ; B 219 261 720 910 ; +C -1 ; WX 708 ; N SF380000 ; B 219 168 719 910 ; +C -1 ; WX 708 ; N SF280000 ; B -11 168 396 910 ; +C -1 ; WX 708 ; N SF270000 ; B -11 261 489 910 ; +C -1 ; WX 708 ; N SF260000 ; B -11 168 489 910 ; +C -1 ; WX 708 ; N SF360000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF370000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF420000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF190000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF200000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF230000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF470000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF480000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF410000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF450000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF460000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF400000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF540000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF530000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF440000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N upblock ; B -11 303 719 910 ; +C -1 ; WX 708 ; N dnblock ; B -11 -303 719 303 ; +C -1 ; WX 708 ; N block ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N lfblock ; B -11 -303 354 910 ; +C -1 ; WX 708 ; N rtblock ; B 354 -303 720 910 ; +C -1 ; WX 708 ; N ltshade ; B 50 -246 719 910 ; +C -1 ; WX 708 ; N shade ; B -11 -246 719 910 ; +C -1 ; WX 729 ; N dkshade ; B 0 -307 729 910 ; +C -1 ; WX 604 ; N filledbox ; B 71 0 532 461 ; +C -1 ; WX 1000 ; N filledrect ; B 0 155 1000 343 ; +C -1 ; WX 990 ; N triagup ; B 148 0 842 693 ; +C -1 ; WX 990 ; N triagrt ; B 141 -15 849 692 ; +C -1 ; WX 990 ; N triagdn ; B 148 -15 842 678 ; +C -1 ; WX 990 ; N triaglf ; B 141 -15 849 692 ; +C -1 ; WX 604 ; N circle ; B 87 67 517 497 ; +C -1 ; WX 604 ; N invbullet ; B 63 0 541 479 ; +C -1 ; WX 604 ; N invcircle ; B 21 0 584 564 ; +C -1 ; WX 1021 ; N smileface ; B 199 -58 822 564 ; +C -1 ; WX 1052 ; N invsmileface ; B 215 -58 837 564 ; +C -1 ; WX 917 ; N sun ; B 8 -109 909 792 ; +C -1 ; WX 750 ; N female ; B 119 -214 630 736 ; +C -1 ; WX 750 ; N male ; B 54 -128 691 791 ; +C -1 ; WX 531 ; N spade ; B 28 0 503 601 ; +C -1 ; WX 656 ; N club ; B 27 0 629 601 ; +C -1 ; WX 594 ; N heart ; B 31 -12 563 601 ; +C -1 ; WX 510 ; N diamond ; B 31 -12 479 601 ; +C -1 ; WX 500 ; N musicalnote ; B 18 -18 482 666 ; +C -1 ; WX 750 ; N musicalnotedbl ; B 42 -63 649 742 ; +C -1 ; WX 735 ; N IJ ; B 93 -12 684 716 ; +C -1 ; WX 444 ; N ij ; B 66 -210 387 716 ; +C -1 ; WX 604 ; N napostrophe ; B 53 0 604 723 ; +C -1 ; WX 188 ; N minute ; B 63 462 194 716 ; +C -1 ; WX 354 ; N second ; B 63 462 333 716 ; +C -1 ; WX 885 ; N afii61248 ; B 47 -26 838 728 ; +C -1 ; WX 323 ; N afii61289 ; B 7 -12 315 728 ; +C -1 ; WX 604 ; N H22073 ; B 71 0 532 461 ; +C -1 ; WX 354 ; N H18543 ; B 64 217 290 443 ; +C -1 ; WX 354 ; N H18551 ; B 64 217 290 443 ; +C -1 ; WX 604 ; N H18533 ; B 87 67 517 497 ; +C -1 ; WX 354 ; N openbullet ; B 55 208 300 453 ; +C -1 ; WX 667 ; N Amacron ; B -1 0 668 843 ; +C -1 ; WX 556 ; N amacron ; B 36 -12 514 671 ; +C -1 ; WX 722 ; N Ccircumflex ; B 50 -12 683 894 ; +C -1 ; WX 500 ; N ccircumflex ; B 39 -12 491 720 ; +C -1 ; WX 722 ; N Cdot ; B 50 -12 683 888 ; +C -1 ; WX 500 ; N cdot ; B 39 -12 491 692 ; +C -1 ; WX 667 ; N Emacron ; B 79 0 613 848 ; +C -1 ; WX 556 ; N emacron ; B 37 -12 515 671 ; +C -1 ; WX 667 ; N Ebreve ; B 79 0 613 892 ; +C -1 ; WX 556 ; N ebreve ; B 37 -12 515 715 ; +C -1 ; WX 667 ; N Edot ; B 79 0 613 869 ; +C -1 ; WX 556 ; N edot ; B 37 -12 515 692 ; +C -1 ; WX 778 ; N Gcircumflex ; B 53 -12 715 891 ; +C -1 ; WX 556 ; N gcircumflex ; B 32 -210 489 720 ; +C -1 ; WX 778 ; N Gdot ; B 53 -12 715 864 ; +C -1 ; WX 556 ; N gdot ; B 32 -210 489 692 ; +C -1 ; WX 778 ; N Gcedilla ; B 53 -206 715 728 ; +C -1 ; WX 556 ; N gcedilla ; B 32 -210 489 770 ; +C -1 ; WX 722 ; N Hcircumflex ; B 80 0 642 896 ; +C -1 ; WX 556 ; N hcircumflex ; B 66 0 488 896 ; +C -1 ; WX 722 ; N Hbar ; B 15 0 707 716 ; +C -1 ; WX 556 ; N hbar ; B 3 0 488 716 ; +C -1 ; WX 278 ; N Itilde ; B -31 0 296 885 ; +C -1 ; WX 278 ; N itilde ; B -22 0 305 708 ; +C -1 ; WX 278 ; N Imacron ; B -14 0 291 835 ; +C -1 ; WX 278 ; N imacron ; B -11 0 293 671 ; +C -1 ; WX 278 ; N Ibreve ; B 0 0 288 879 ; +C -1 ; WX 278 ; N ibreve ; B -3 0 286 715 ; +C -1 ; WX 278 ; N Iogonek ; B 80 -208 293 716 ; +C -1 ; WX 222 ; N iogonek ; B 50 -208 264 716 ; +C -1 ; WX 500 ; N Jcircumflex ; B 27 -12 541 896 ; +C -1 ; WX 222 ; N jcircumflex ; B -46 -210 266 720 ; +C -1 ; WX 667 ; N Kcedilla ; B 73 -206 665 716 ; +C -1 ; WX 500 ; N kcedilla ; B 66 -206 496 716 ; +C -1 ; WX 500 ; N kgreenlandic ; B 65 0 495 519 ; +C -1 ; WX 556 ; N Lcedilla ; B 73 -206 521 716 ; +C -1 ; WX 222 ; N lcedilla ; B -1 -206 210 716 ; +C -1 ; WX 722 ; N Ncedilla ; B 76 -206 640 716 ; +C -1 ; WX 556 ; N ncedilla ; B 66 -206 487 530 ; +C -1 ; WX 723 ; N Eng ; B 81 -12 670 728 ; +C -1 ; WX 556 ; N eng ; B 68 -210 489 530 ; +C -1 ; WX 778 ; N Omacron ; B 48 -12 733 853 ; +C -1 ; WX 556 ; N omacron ; B 33 -12 519 671 ; +C -1 ; WX 778 ; N Obreve ; B 48 -12 733 892 ; +C -1 ; WX 556 ; N obreve ; B 33 -12 519 715 ; +C -1 ; WX 722 ; N Rcedilla ; B 79 -206 709 716 ; +C -1 ; WX 333 ; N rcedilla ; B 65 -206 347 530 ; +C -1 ; WX 667 ; N Scircumflex ; B 45 -12 615 894 ; +C -1 ; WX 500 ; N scircumflex ; B 31 -12 461 720 ; +C -1 ; WX 611 ; N Tbar ; B 23 0 591 716 ; +C -1 ; WX 278 ; N tbar ; B 6 -7 259 700 ; +C -1 ; WX 722 ; N Utilde ; B 79 -12 642 882 ; +C -1 ; WX 556 ; N utilde ; B 64 -12 484 708 ; +C -1 ; WX 722 ; N Umacron ; B 79 -12 642 845 ; +C -1 ; WX 556 ; N umacron ; B 64 -12 484 671 ; +C -1 ; WX 722 ; N Ubreve ; B 79 -12 642 889 ; +C -1 ; WX 556 ; N ubreve ; B 64 -12 484 715 ; +C -1 ; WX 722 ; N Uogonek ; B 79 -208 642 716 ; +C -1 ; WX 556 ; N uogonek ; B 64 -208 603 519 ; +C -1 ; WX 944 ; N Wcircumflex ; B 12 0 933 896 ; +C -1 ; WX 722 ; N wcircumflex ; B 3 0 714 720 ; +C -1 ; WX 667 ; N Ycircumflex ; B 3 0 659 896 ; +C -1 ; WX 500 ; N ycircumflex ; B 16 -210 491 720 ; +C -1 ; WX 222 ; N longs ; B 67 0 292 728 ; +C -1 ; WX 667 ; N Aringacute ; B -1 0 668 1037 ; +C -1 ; WX 556 ; N aringacute ; B 36 -12 514 939 ; +C -1 ; WX 1000 ; N AEacute ; B 0 0 945 896 ; +C -1 ; WX 889 ; N aeacute ; B 33 -12 849 720 ; +C -1 ; WX 778 ; N Oslashacute ; B 41 -29 741 896 ; +C -1 ; WX 611 ; N oslashacute ; B 63 -39 549 720 ; +C -1 ; WX 278 ; N anoteleia ; B 90 418 190 519 ; +C -1 ; WX 944 ; N Wgrave ; B 12 0 933 896 ; +C -1 ; WX 722 ; N wgrave ; B 3 0 714 720 ; +C -1 ; WX 944 ; N Wacute ; B 12 0 933 896 ; +C -1 ; WX 722 ; N wacute ; B 3 0 714 720 ; +C -1 ; WX 944 ; N Wdieresis ; B 12 0 933 860 ; +C -1 ; WX 722 ; N wdieresis ; B 3 0 714 720 ; +C -1 ; WX 667 ; N Ygrave ; B 3 0 659 896 ; +C -1 ; WX 500 ; N ygrave ; B 16 -210 491 720 ; +C -1 ; WX 222 ; N quotereversed ; B 67 489 169 723 ; +C -1 ; WX 333 ; N radicalex ; B -15 599 349 671 ; +C -1 ; WX 556 ; N afii08941 ; B 13 -14 528 728 ; +C -1 ; WX 600 ; N estimated ; B 44 -17 561 535 ; +C -1 ; WX 834 ; N oneeighth ; B 52 -28 813 728 ; +C -1 ; WX 834 ; N threeeighths ; B 17 -28 813 728 ; +C -1 ; WX 834 ; N fiveeighths ; B 17 -28 813 728 ; +C -1 ; WX 834 ; N seveneighths ; B 36 -28 813 728 ; +C -1 ; WX 333 ; N commaaccent ; B 110 -269 219 -71 ; +C -1 ; WX 333 ; N undercommaaccent ; B 52 -206 264 -22 ; +C -1 ; WX 333 ; N tonos ; B 108 583 289 720 ; +C -1 ; WX 333 ; N dieresistonos ; B -11 601 344 736 ; +C -1 ; WX 667 ; N Alphatonos ; B 0 0 669 716 ; +C -1 ; WX 784 ; N Epsilontonos ; B -43 0 730 716 ; +C -1 ; WX 838 ; N Etatonos ; B -43 0 737 716 ; +C -1 ; WX 384 ; N Iotatonos ; B -43 0 271 716 ; +C -1 ; WX 774 ; N Omicrontonos ; B -43 -12 728 729 ; +C -1 ; WX 855 ; N Upsilontonos ; B -43 0 842 716 ; +C -1 ; WX 752 ; N Omegatonos ; B -43 0 706 728 ; +C -1 ; WX 222 ; N iotadieresistonos ; B -66 0 289 736 ; +C -1 ; WX 667 ; N Alpha ; B -1 0 668 716 ; +C -1 ; WX 667 ; N Beta ; B 73 0 614 716 ; +C -1 ; WX 668 ; N Delta ; B -1 0 669 716 ; +C -1 ; WX 667 ; N Epsilon ; B 79 0 613 716 ; +C -1 ; WX 611 ; N Zeta ; B 20 0 586 716 ; +C -1 ; WX 722 ; N Eta ; B 80 0 642 716 ; +C -1 ; WX 278 ; N Iota ; B 93 0 188 716 ; +C -1 ; WX 667 ; N Kappa ; B 73 0 665 716 ; +C -1 ; WX 668 ; N Lambda ; B 5 0 660 716 ; +C -1 ; WX 833 ; N Mu ; B 74 0 757 716 ; +C -1 ; WX 722 ; N Nu ; B 76 0 640 716 ; +C -1 ; WX 650 ; N Xi ; B 53 0 597 716 ; +C -1 ; WX 778 ; N Omicron ; B 48 -12 733 729 ; +C -1 ; WX 722 ; N Pi ; B 80 0 642 716 ; +C -1 ; WX 667 ; N Rho ; B 77 0 624 716 ; +C -1 ; WX 618 ; N Sigma ; B 72 0 579 716 ; +C -1 ; WX 611 ; N Tau ; B 23 0 591 716 ; +C -1 ; WX 667 ; N Upsilon ; B 3 0 659 716 ; +C -1 ; WX 667 ; N Chi ; B 4 0 661 716 ; +C -1 ; WX 835 ; N Psi ; B 62 0 773 716 ; +C -1 ; WX 748 ; N Omega ; B 47 0 701 728 ; +C -1 ; WX 278 ; N Iotadieresis ; B 2 0 276 860 ; +C -1 ; WX 667 ; N Upsilondieresis ; B 3 0 659 860 ; +C -1 ; WX 578 ; N alphatonos ; B 35 -12 541 720 ; +C -1 ; WX 446 ; N epsilontonos ; B 48 -12 423 720 ; +C -1 ; WX 556 ; N etatonos ; B 68 -199 489 720 ; +C -1 ; WX 222 ; N iotatonos ; B 48 0 229 720 ; +C -1 ; WX 547 ; N upsilondieresistonos ; B 66 -12 481 736 ; +C -1 ; WX 575 ; N beta ; B 68 -199 530 728 ; +C -1 ; WX 500 ; N gamma ; B 12 -199 488 519 ; +C -1 ; WX 441 ; N zeta ; B 35 -210 433 716 ; +C -1 ; WX 556 ; N eta ; B 68 -199 489 530 ; +C -1 ; WX 556 ; N theta ; B 45 -12 512 728 ; +C -1 ; WX 222 ; N iota ; B 67 0 155 519 ; +C -1 ; WX 500 ; N kappa ; B 65 0 500 519 ; +C -1 ; WX 500 ; N lambda ; B 12 0 487 716 ; +C -1 ; WX 576 ; N mu ; B 78 -199 497 519 ; +C -1 ; WX 500 ; N nu ; B 13 0 488 519 ; +C -1 ; WX 448 ; N xi ; B 45 -210 430 728 ; +C -1 ; WX 556 ; N omicron ; B 33 -12 519 530 ; +C -1 ; WX 569 ; N rho ; B 64 -199 534 530 ; +C -1 ; WX 482 ; N sigma1 ; B 42 -210 472 530 ; +C -1 ; WX 547 ; N upsilon ; B 66 -12 481 519 ; +C -1 ; WX 525 ; N chi ; B 8 -199 516 519 ; +C -1 ; WX 713 ; N psi ; B 60 -199 653 519 ; +C -1 ; WX 781 ; N omega ; B 42 -12 738 519 ; +C -1 ; WX 222 ; N iotadieresis ; B -23 0 251 720 ; +C -1 ; WX 547 ; N upsilondieresis ; B 66 -12 481 720 ; +C -1 ; WX 556 ; N omicrontonos ; B 33 -12 519 720 ; +C -1 ; WX 547 ; N upsilontonos ; B 66 -12 481 720 ; +C -1 ; WX 781 ; N omegatonos ; B 42 -12 738 720 ; +C -1 ; WX 667 ; N afii10023 ; B 79 0 613 860 ; +C -1 ; WX 865 ; N afii10051 ; B 24 -12 825 716 ; +C -1 ; WX 542 ; N afii10052 ; B 79 0 542 896 ; +C -1 ; WX 719 ; N afii10053 ; B 49 -12 683 728 ; +C -1 ; WX 667 ; N afii10054 ; B 45 -12 615 728 ; +C -1 ; WX 278 ; N afii10055 ; B 93 0 188 716 ; +C -1 ; WX 278 ; N afii10056 ; B 2 0 276 860 ; +C -1 ; WX 500 ; N afii10057 ; B 27 -12 422 716 ; +C -1 ; WX 1057 ; N afii10058 ; B 6 -12 1020 716 ; +C -1 ; WX 1010 ; N afii10059 ; B 80 0 973 716 ; +C -1 ; WX 854 ; N afii10060 ; B 24 0 809 716 ; +C -1 ; WX 583 ; N afii10061 ; B 79 0 579 896 ; +C -1 ; WX 635 ; N afii10062 ; B 5 -10 632 886 ; +C -1 ; WX 719 ; N afii10145 ; B 78 -199 641 716 ; +C -1 ; WX 667 ; N afii10017 ; B -1 0 668 716 ; +C -1 ; WX 656 ; N afii10018 ; B 82 0 621 716 ; +C -1 ; WX 667 ; N afii10019 ; B 73 0 614 716 ; +C -1 ; WX 542 ; N afii10020 ; B 79 0 542 716 ; +C -1 ; WX 677 ; N afii10021 ; B 0 -167 642 716 ; +C -1 ; WX 667 ; N afii10022 ; B 79 0 613 716 ; +C -1 ; WX 923 ; N afii10024 ; B 3 0 919 716 ; +C -1 ; WX 604 ; N afii10025 ; B 38 -12 563 728 ; +C -1 ; WX 719 ; N afii10026 ; B 79 0 641 716 ; +C -1 ; WX 719 ; N afii10027 ; B 79 0 641 886 ; +C -1 ; WX 583 ; N afii10028 ; B 79 0 579 716 ; +C -1 ; WX 656 ; N afii10029 ; B 9 -12 578 716 ; +C -1 ; WX 833 ; N afii10030 ; B 74 0 757 716 ; +C -1 ; WX 722 ; N afii10031 ; B 80 0 642 716 ; +C -1 ; WX 778 ; N afii10032 ; B 48 -12 733 729 ; +C -1 ; WX 719 ; N afii10033 ; B 78 0 641 716 ; +C -1 ; WX 667 ; N afii10034 ; B 77 0 624 716 ; +C -1 ; WX 722 ; N afii10035 ; B 50 -12 683 728 ; +C -1 ; WX 611 ; N afii10036 ; B 23 0 591 716 ; +C -1 ; WX 635 ; N afii10037 ; B 5 -10 632 716 ; +C -1 ; WX 760 ; N afii10038 ; B 40 0 720 722 ; +C -1 ; WX 667 ; N afii10039 ; B 4 0 661 716 ; +C -1 ; WX 740 ; N afii10040 ; B 78 -199 706 716 ; +C -1 ; WX 667 ; N afii10041 ; B 42 0 588 716 ; +C -1 ; WX 917 ; N afii10042 ; B 79 0 838 716 ; +C -1 ; WX 938 ; N afii10043 ; B 79 -199 903 716 ; +C -1 ; WX 792 ; N afii10044 ; B 0 0 757 716 ; +C -1 ; WX 885 ; N afii10045 ; B 82 0 802 716 ; +C -1 ; WX 656 ; N afii10046 ; B 81 0 620 716 ; +C -1 ; WX 719 ; N afii10047 ; B 36 -12 670 728 ; +C -1 ; WX 1010 ; N afii10048 ; B 80 -12 959 728 ; +C -1 ; WX 722 ; N afii10049 ; B 13 0 644 716 ; +C -1 ; WX 556 ; N afii10065 ; B 36 -12 514 530 ; +C -1 ; WX 573 ; N afii10066 ; B 44 -12 533 733 ; +C -1 ; WX 531 ; N afii10067 ; B 66 0 492 519 ; +C -1 ; WX 365 ; N afii10068 ; B 66 0 365 519 ; +C -1 ; WX 583 ; N afii10069 ; B 0 -147 553 519 ; +C -1 ; WX 556 ; N afii10070 ; B 37 -12 515 530 ; +C -1 ; WX 669 ; N afii10072 ; B -2 0 672 519 ; +C -1 ; WX 458 ; N afii10073 ; B 24 -12 423 530 ; +C -1 ; WX 559 ; N afii10074 ; B 66 0 492 519 ; +C -1 ; WX 559 ; N afii10075 ; B 66 0 492 715 ; +C -1 ; WX 438 ; N afii10076 ; B 65 0 445 519 ; +C -1 ; WX 583 ; N afii10077 ; B 12 -3 517 519 ; +C -1 ; WX 688 ; N afii10078 ; B 68 0 619 519 ; +C -1 ; WX 552 ; N afii10079 ; B 66 0 486 519 ; +C -1 ; WX 556 ; N afii10080 ; B 33 -12 519 530 ; +C -1 ; WX 542 ; N afii10081 ; B 66 0 476 519 ; +C -1 ; WX 556 ; N afii10082 ; B 66 -199 516 530 ; +C -1 ; WX 500 ; N afii10083 ; B 39 -12 491 530 ; +C -1 ; WX 458 ; N afii10084 ; B 19 0 440 519 ; +C -1 ; WX 500 ; N afii10085 ; B 16 -210 491 519 ; +C -1 ; WX 823 ; N afii10086 ; B 37 -199 786 716 ; +C -1 ; WX 500 ; N afii10087 ; B 7 0 493 519 ; +C -1 ; WX 573 ; N afii10088 ; B 67 -147 543 519 ; +C -1 ; WX 521 ; N afii10089 ; B 34 0 455 519 ; +C -1 ; WX 802 ; N afii10090 ; B 69 0 733 519 ; +C -1 ; WX 823 ; N afii10091 ; B 69 -147 791 519 ; +C -1 ; WX 625 ; N afii10092 ; B 20 0 589 519 ; +C -1 ; WX 719 ; N afii10093 ; B 68 0 647 519 ; +C -1 ; WX 521 ; N afii10094 ; B 64 0 490 519 ; +C -1 ; WX 510 ; N afii10095 ; B 21 -18 474 530 ; +C -1 ; WX 750 ; N afii10096 ; B 67 -12 709 530 ; +C -1 ; WX 542 ; N afii10097 ; B 15 0 474 519 ; +C -1 ; WX 556 ; N afii10071 ; B 37 -12 515 720 ; +C -1 ; WX 556 ; N afii10099 ; B 0 -210 488 716 ; +C -1 ; WX 365 ; N afii10100 ; B 66 0 365 720 ; +C -1 ; WX 510 ; N afii10101 ; B 37 -18 489 530 ; +C -1 ; WX 500 ; N afii10102 ; B 31 -12 461 530 ; +C -1 ; WX 222 ; N afii10103 ; B 66 0 154 716 ; +C -1 ; WX 278 ; N afii10104 ; B 4 0 278 720 ; +C -1 ; WX 222 ; N afii10105 ; B -46 -210 153 716 ; +C -1 ; WX 906 ; N afii10106 ; B 9 -3 871 519 ; +C -1 ; WX 813 ; N afii10107 ; B 64 0 778 519 ; +C -1 ; WX 556 ; N afii10108 ; B 0 0 488 716 ; +C -1 ; WX 438 ; N afii10109 ; B 65 0 445 720 ; +C -1 ; WX 500 ; N afii10110 ; B 16 -210 491 715 ; +C -1 ; WX 552 ; N afii10193 ; B 66 -147 486 519 ; +C -1 ; WX 489 ; N afii10050 ; B 79 0 459 914 ; +C -1 ; WX 411 ; N afii10098 ; B 66 0 381 717 ; +C -1 ; WX 1000 ; N afii00208 ; B 32 224 969 294 ; +C -1 ; WX 1073 ; N afii61352 ; B 78 0 1031 716 ; +C -1 ; WX 690 ; N pi ; B 22 0 668 519 ; +C -1 ; WX 333 ; N sheva ; B 125 -210 208 -24 ; +C -1 ; WX 333 ; N hatafsegol ; B 15 -210 318 -24 ; +C -1 ; WX 333 ; N hatafpatah ; B 24 -210 309 -24 ; +C -1 ; WX 333 ; N hatafqamats ; B 24 -210 309 -24 ; +C -1 ; WX 333 ; N hiriq ; B 125 -180 208 -98 ; +C -1 ; WX 333 ; N tsere ; B 62 -180 271 -98 ; +C -1 ; WX 333 ; N segol ; B 62 -210 271 -24 ; +C -1 ; WX 333 ; N patah ; B 68 -154 265 -103 ; +C -1 ; WX 333 ; N qamats ; B 68 -210 265 -77 ; +C -1 ; WX 333 ; N holam ; B 125 577 208 659 ; +C -1 ; WX 333 ; N qubuts ; B 8 -210 325 -25 ; +C -1 ; WX 333 ; N dagesh ; B 125 241 208 323 ; +C -1 ; WX 333 ; N meteg ; B 141 -210 192 -25 ; +C -1 ; WX 383 ; N maqaf ; B 61 440 322 518 ; +C -1 ; WX 333 ; N rafe ; B 68 611 265 662 ; +C -1 ; WX 275 ; N paseq ; B 103 -10 172 625 ; +C -1 ; WX 333 ; N shindot ; B 380 577 462 660 ; +C -1 ; WX 333 ; N sindot ; B -123 577 -41 660 ; +C -1 ; WX 278 ; N sofpasuq ; B 90 0 190 519 ; +C -1 ; WX 563 ; N alef ; B 51 0 536 518 ; +C -1 ; WX 542 ; N bet ; B 24 0 520 524 ; +C -1 ; WX 399 ; N gimel ; B 12 0 363 524 ; +C -1 ; WX 508 ; N dalet ; B 22 0 486 518 ; +C -1 ; WX 602 ; N he ; B 73 0 531 524 ; +C -1 ; WX 247 ; N vav ; B 76 0 171 518 ; +C -1 ; WX 382 ; N zayin ; B 46 0 360 518 ; +C -1 ; WX 599 ; N het ; B 76 0 528 524 ; +C -1 ; WX 590 ; N tet ; B 68 -14 531 529 ; +C -1 ; WX 247 ; N yod ; B 76 250 171 518 ; +C -1 ; WX 509 ; N finalkaf ; B 20 -199 438 524 ; +C -1 ; WX 461 ; N kaf ; B 39 -8 417 527 ; +C -1 ; WX 463 ; N lamed ; B 29 0 409 716 ; +C -1 ; WX 599 ; N finalmem ; B 76 0 528 524 ; +C -1 ; WX 601 ; N mem ; B 39 0 530 524 ; +C -1 ; WX 247 ; N finalnun ; B 76 -199 171 518 ; +C -1 ; WX 353 ; N nun ; B 29 0 279 524 ; +C -1 ; WX 574 ; N samekh ; B 44 -15 530 532 ; +C -1 ; WX 529 ; N ayin ; B 12 -48 463 518 ; +C -1 ; WX 566 ; N finalpe ; B 54 -199 496 524 ; +C -1 ; WX 546 ; N pe ; B 56 -8 502 527 ; +C -1 ; WX 461 ; N finaltsadi ; B 12 -199 422 518 ; +C -1 ; WX 479 ; N tsadi ; B 5 0 425 518 ; +C -1 ; WX 550 ; N qof ; B 73 -199 496 518 ; +C -1 ; WX 509 ; N resh ; B 20 0 438 524 ; +C -1 ; WX 694 ; N shin ; B 49 -14 646 518 ; +C -1 ; WX 643 ; N tav ; B 20 -4 572 524 ; +C -1 ; WX 493 ; N doublevav ; B 76 0 417 518 ; +C -1 ; WX 493 ; N vavyod ; B 76 0 417 518 ; +C -1 ; WX 493 ; N doubleyod ; B 76 250 417 518 ; +C -1 ; WX 236 ; N geresh ; B 44 330 192 518 ; +C -1 ; WX 417 ; N gershayim ; B 44 330 373 518 ; +C -1 ; WX 815 ; N newsheqelsign ; B 76 0 740 518 ; +C -1 ; WX 247 ; N vavshindot ; B -41 0 171 660 ; +C -1 ; WX 509 ; N finalkafsheva ; B 20 -199 438 524 ; +C -1 ; WX 509 ; N finalkafqamats ; B 20 -199 438 524 ; +C -1 ; WX 463 ; N lamedholam ; B -83 0 409 716 ; +C -1 ; WX 463 ; N lamedholamdagesh ; B -83 0 409 716 ; +C -1 ; WX 535 ; N altayin ; B 22 0 469 518 ; +C -1 ; WX 694 ; N shinshindot ; B 49 -14 646 659 ; +C -1 ; WX 694 ; N shinsindot ; B 49 -14 646 659 ; +C -1 ; WX 694 ; N shindageshshindot ; B 49 -14 646 659 ; +C -1 ; WX 694 ; N shindageshsindot ; B 49 -14 646 659 ; +C -1 ; WX 563 ; N alefpatah ; B 51 -154 536 518 ; +C -1 ; WX 563 ; N alefqamats ; B 51 -210 536 518 ; +C -1 ; WX 563 ; N alefmapiq ; B 51 0 536 518 ; +C -1 ; WX 542 ; N betdagesh ; B 24 0 520 524 ; +C -1 ; WX 399 ; N gimeldagesh ; B 12 0 363 524 ; +C -1 ; WX 508 ; N daletdagesh ; B 22 0 486 518 ; +C -1 ; WX 602 ; N hedagesh ; B 73 0 531 524 ; +C -1 ; WX 287 ; N vavdagesh ; B 0 0 211 518 ; +C -1 ; WX 411 ; N zayindagesh ; B 0 0 404 518 ; +C -1 ; WX 590 ; N tetdagesh ; B 68 -14 531 529 ; +C -1 ; WX 287 ; N yoddagesh ; B 0 250 211 518 ; +C -1 ; WX 509 ; N finalkafdagesh ; B 20 -199 438 524 ; +C -1 ; WX 461 ; N kafdagesh ; B 39 -8 417 527 ; +C -1 ; WX 463 ; N lameddagesh ; B 29 0 409 716 ; +C -1 ; WX 601 ; N memdagesh ; B 39 0 530 524 ; +C -1 ; WX 353 ; N nundagesh ; B 29 0 279 524 ; +C -1 ; WX 574 ; N samekhdagesh ; B 44 -15 530 532 ; +C -1 ; WX 566 ; N finalpedagesh ; B 54 -199 496 524 ; +C -1 ; WX 546 ; N pedagesh ; B 56 -8 502 527 ; +C -1 ; WX 479 ; N tsadidagesh ; B 5 0 425 518 ; +C -1 ; WX 550 ; N qofdagesh ; B 73 -199 496 518 ; +C -1 ; WX 509 ; N reshdagesh ; B 20 0 438 524 ; +C -1 ; WX 694 ; N shindagesh ; B 49 -14 646 518 ; +C -1 ; WX 643 ; N tavdages ; B 20 -4 572 524 ; +C -1 ; WX 247 ; N vavholam ; B 76 0 171 659 ; +C -1 ; WX 542 ; N betrafe ; B 24 0 520 662 ; +C -1 ; WX 461 ; N kafrafe ; B 39 -8 417 662 ; +C -1 ; WX 546 ; N perafe ; B 56 -8 502 662 ; +C -1 ; WX 576 ; N aleflamed ; B 29 0 549 716 ; +C -1 ; WX 0 ; N zerowidthnonjoiner ; B -18 -134 18 629 ; +C -1 ; WX 0 ; N zerowidthjoiner ; B -107 -134 107 690 ; +C -1 ; WX 0 ; N lefttorightmark ; B -18 -134 210 690 ; +C -1 ; WX 0 ; N righttoleftmark ; B -210 -134 17 690 ; +C -1 ; WX 319 ; N afii57388 ; B 83 137 241 443 ; +C -1 ; WX 319 ; N afii57403 ; B 78 136 235 609 ; +C -1 ; WX 356 ; N afii57407 ; B 33 137 326 711 ; +C -1 ; WX 413 ; N afii57409 ; B 59 72 363 400 ; +C -1 ; WX 207 ; N afii57440 ; B 0 143 241 228 ; +C -1 ; WX 201 ; N afii57451 ; B 34 605 201 780 ; +C -1 ; WX 237 ; N afii57452 ; B 34 605 237 794 ; +C -1 ; WX 201 ; N afii57453 ; B 34 -130 201 44 ; +C -1 ; WX 201 ; N afii57454 ; B 34 673 201 774 ; +C -1 ; WX 209 ; N afii57455 ; B 35 605 209 817 ; +C -1 ; WX 201 ; N afii57456 ; B 34 -21 201 80 ; +C -1 ; WX 211 ; N afii57457 ; B 34 605 211 762 ; +C -1 ; WX 165 ; N afii57458 ; B 34 605 165 756 ; +C -1 ; WX 526 ; N afii57392 ; B 186 219 344 452 ; +C -1 ; WX 526 ; N afii57393 ; B 147 143 327 716 ; +C -1 ; WX 526 ; N afii57394 ; B 89 143 391 723 ; +C -1 ; WX 526 ; N afii57395 ; B 63 143 471 723 ; +C -1 ; WX 526 ; N afii57396 ; B 146 143 397 713 ; +C -1 ; WX 526 ; N afii57397 ; B 93 247 438 622 ; +C -1 ; WX 526 ; N afii57398 ; B 85 156 410 710 ; +C -1 ; WX 526 ; N afii57399 ; B 63 143 459 710 ; +C -1 ; WX 526 ; N afii57400 ; B 75 149 472 716 ; +C -1 ; WX 526 ; N afii57401 ; B 107 143 413 725 ; +C -1 ; WX 526 ; N afii57381 ; B 65 84 463 777 ; +C -1 ; WX 319 ; N afii57461 ; B 94 23 230 267 ; +C -1 ; WX 526 ; N afii63167 ; B 87 403 424 744 ; +C -1 ; WX 750 ; N afii57459 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57543 ; B 125 0 625 625 ; +C -1 ; WX 282 ; N afii57534 ; B 26 130 262 430 ; +C -1 ; WX 750 ; N afii57494 ; B 125 0 625 625 ; +C -1 ; WX 526 ; N afii62843 ; B 77 147 455 720 ; +C -1 ; WX 526 ; N afii62844 ; B 74 159 441 708 ; +C -1 ; WX 526 ; N afii62845 ; B 99 147 435 717 ; +C -1 ; WX 750 ; N afii64240 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64241 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63954 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57382 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64242 ; B 125 0 625 625 ; +C -1 ; WX 211 ; N afii62881 ; B 34 605 211 917 ; +C -1 ; WX 750 ; N afii57504 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57369 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57370 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57371 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57372 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57373 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57374 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57375 ; B 125 0 625 625 ; +C -1 ; WX 638 ; N afii57391 ; B 0 143 667 228 ; +C -1 ; WX 750 ; N afii57471 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57460 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii52258 ; B 125 0 625 625 ; +C -1 ; WX 713 ; N afii57506 ; B 63 -175 748 469 ; +C -1 ; WX 713 ; N afii62958 ; B 63 -175 748 469 ; +C -1 ; WX 244 ; N afii62956 ; B -1 -175 279 456 ; +C -1 ; WX 244 ; N afii52957 ; B -1 -175 279 456 ; +C -1 ; WX 750 ; N afii57505 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62889 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62887 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62888 ; B 125 0 625 625 ; +C -1 ; WX 563 ; N afii57507 ; B 26 -212 516 432 ; +C -1 ; WX 526 ; N afii62961 ; B 26 -212 560 426 ; +C -1 ; WX 530 ; N afii62959 ; B 0 -175 559 427 ; +C -1 ; WX 530 ; N afii62960 ; B 0 -175 559 427 ; +C -1 ; WX 489 ; N afii57508 ; B 70 -91 523 723 ; +C -1 ; WX 489 ; N afii62962 ; B 70 -91 523 723 ; +C -1 ; WX 812 ; N afii57567 ; B 44 143 846 734 ; +C -1 ; WX 933 ; N afii62964 ; B 44 143 967 734 ; +C -1 ; WX 394 ; N afii52305 ; B 0 143 428 734 ; +C -1 ; WX 515 ; N afii52306 ; B 0 143 549 734 ; +C -1 ; WX 812 ; N afii57509 ; B 44 143 846 867 ; +C -1 ; WX 933 ; N afii62967 ; B 44 143 967 867 ; +C -1 ; WX 394 ; N afii62965 ; B 0 143 428 876 ; +C -1 ; WX 515 ; N afii62966 ; B 0 143 549 876 ; +C -1 ; WX 638 ; N afii57555 ; B 24 -43 606 462 ; +C -1 ; WX 588 ; N afii52364 ; B 52 -110 623 252 ; +C -1 ; WX 750 ; N afii63753 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63754 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63759 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63763 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63795 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62891 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63808 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62938 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63810 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62942 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62947 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63813 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63823 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63824 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63833 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63844 ; B 125 0 625 625 ; +C -1 ; WX 226 ; N afii62882 ; B 23 605 226 933 ; +C -1 ; WX 211 ; N afii62883 ; B 34 605 211 905 ; +C -1 ; WX 211 ; N afii62884 ; B 34 605 211 840 ; +C -1 ; WX 211 ; N afii62885 ; B 31 606 211 897 ; +C -1 ; WX 211 ; N afii62886 ; B 34 605 211 853 ; +C -1 ; WX 750 ; N afii63846 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63849 ; B 125 0 625 625 ; +C -1 ; WX 0 ; N uni202A ; B -18 -134 210 603 ; +C -1 ; WX 0 ; N uni202B ; B -210 -134 18 603 ; +C -1 ; WX 0 ; N uni202D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202C ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N _852 ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206A ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206B ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N _855 ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uniF00A ; B -18 -208 18 894 ; +C -1 ; WX 0 ; N uniF00B ; B -114 -208 114 894 ; +C -1 ; WX 0 ; N uniF00C ; B -18 -208 109 894 ; +C -1 ; WX 0 ; N uniF00D ; B -109 -208 18 894 ; +C -1 ; WX 0 ; N uniF00E ; B -18 -208 114 894 ; +C -1 ; WX 1000 ; N uniFFFC ; B 0 0 1000 719 ; +C -1 ; WX 750 ; N afii63904 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63905 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63906 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63908 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63910 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63912 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62927 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63941 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62939 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63943 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62943 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62946 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63946 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62951 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63948 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62953 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63950 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63951 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63952 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63953 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63956 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63958 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63959 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63960 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63961 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64046 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64058 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64059 ; B 125 0 625 625 ; +C -1 ; WX 319 ; N afii64060 ; B 62 -209 273 785 ; +C -1 ; WX 319 ; N afii64061 ; B 45 -209 257 785 ; +C -1 ; WX 750 ; N afii62945 ; B 125 0 625 625 ; +C -1 ; WX 616 ; N afii64184 ; B 10 143 603 766 ; +C -1 ; WX 413 ; N afii52399 ; B 59 72 363 400 ; +C -1 ; WX 207 ; N afii52400 ; B 7 130 206 827 ; +C -1 ; WX 229 ; N afii62753 ; B 17 143 264 827 ; +C -1 ; WX 207 ; N afii57411 ; B 42 130 179 880 ; +C -1 ; WX 229 ; N afii62754 ; B 42 143 264 880 ; +C -1 ; WX 432 ; N afii57412 ; B 59 -77 466 555 ; +C -1 ; WX 432 ; N afii62755 ; B 59 -77 466 555 ; +C -1 ; WX 207 ; N afii57413 ; B 22 -94 165 740 ; +C -1 ; WX 229 ; N afii62756 ; B 43 -94 264 740 ; +C -1 ; WX 638 ; N afii57414 ; B 24 -43 606 555 ; +C -1 ; WX 588 ; N afii62759 ; B 52 -110 623 491 ; +C -1 ; WX 244 ; N afii62757 ; B 0 143 278 668 ; +C -1 ; WX 244 ; N afii62758 ; B 0 143 278 668 ; +C -1 ; WX 207 ; N afii57415 ; B 72 130 165 740 ; +C -1 ; WX 229 ; N afii62760 ; B 43 143 264 740 ; +C -1 ; WX 713 ; N afii57416 ; B 63 -46 748 469 ; +C -1 ; WX 713 ; N afii62763 ; B 63 -46 748 469 ; +C -1 ; WX 244 ; N afii62761 ; B 0 -46 278 456 ; +C -1 ; WX 244 ; N afii62762 ; B 0 -46 278 456 ; +C -1 ; WX 282 ; N afii57417 ; B 0 130 271 641 ; +C -1 ; WX 375 ; N afii62764 ; B 30 143 409 768 ; +C -1 ; WX 713 ; N afii57418 ; B 63 143 748 628 ; +C -1 ; WX 713 ; N afii62767 ; B 63 143 748 628 ; +C -1 ; WX 244 ; N afii62765 ; B 0 143 278 667 ; +C -1 ; WX 244 ; N afii62766 ; B 0 143 278 667 ; +C -1 ; WX 713 ; N afii57419 ; B 63 143 748 715 ; +C -1 ; WX 713 ; N afii62770 ; B 63 143 748 715 ; +C -1 ; WX 244 ; N afii62768 ; B 0 143 278 754 ; +C -1 ; WX 244 ; N afii62769 ; B 0 143 278 754 ; +C -1 ; WX 563 ; N afii57420 ; B 26 -212 516 432 ; +C -1 ; WX 526 ; N afii62773 ; B 26 -212 560 426 ; +C -1 ; WX 530 ; N afii62771 ; B 0 -33 559 427 ; +C -1 ; WX 530 ; N afii62772 ; B 0 -33 559 427 ; +C -1 ; WX 563 ; N afii57421 ; B 26 -212 516 432 ; +C -1 ; WX 526 ; N afii62776 ; B 26 -212 560 426 ; +C -1 ; WX 530 ; N afii62774 ; B 0 143 559 427 ; +C -1 ; WX 530 ; N afii62775 ; B 0 143 559 427 ; +C -1 ; WX 563 ; N afii57422 ; B 26 -212 516 639 ; +C -1 ; WX 526 ; N afii62779 ; B 26 -212 560 639 ; +C -1 ; WX 530 ; N afii62777 ; B 0 143 559 639 ; +C -1 ; WX 530 ; N afii62778 ; B 0 143 559 639 ; +C -1 ; WX 337 ; N afii57423 ; B 81 143 372 552 ; +C -1 ; WX 337 ; N afii62780 ; B 81 143 372 552 ; +C -1 ; WX 337 ; N afii57424 ; B 81 143 372 759 ; +C -1 ; WX 337 ; N afii62781 ; B 81 143 372 759 ; +C -1 ; WX 489 ; N afii57425 ; B 70 -91 523 430 ; +C -1 ; WX 489 ; N afii62782 ; B 70 -91 523 430 ; +C -1 ; WX 489 ; N afii57426 ; B 70 -91 523 639 ; +C -1 ; WX 489 ; N afii62783 ; B 70 -91 523 639 ; +C -1 ; WX 821 ; N afii57427 ; B 64 -72 855 417 ; +C -1 ; WX 821 ; N afii62786 ; B 64 -72 855 417 ; +C -1 ; WX 531 ; N afii62784 ; B 0 143 565 401 ; +C -1 ; WX 531 ; N afii62785 ; B 0 143 565 401 ; +C -1 ; WX 821 ; N afii57428 ; B 64 -72 855 715 ; +C -1 ; WX 821 ; N afii62789 ; B 64 -72 855 715 ; +C -1 ; WX 531 ; N afii62787 ; B 0 143 565 715 ; +C -1 ; WX 531 ; N afii62788 ; B 0 143 565 715 ; +C -1 ; WX 1098 ; N afii57429 ; B 64 -72 1132 417 ; +C -1 ; WX 1098 ; N afii62792 ; B 64 -72 1132 417 ; +C -1 ; WX 846 ; N afii62790 ; B 0 143 880 405 ; +C -1 ; WX 846 ; N afii62791 ; B 0 143 880 405 ; +C -1 ; WX 1098 ; N afii57430 ; B 64 -72 1132 590 ; +C -1 ; WX 1098 ; N afii62795 ; B 64 -72 1132 590 ; +C -1 ; WX 846 ; N afii62793 ; B 0 143 880 590 ; +C -1 ; WX 846 ; N afii62794 ; B 0 143 880 590 ; +C -1 ; WX 582 ; N afii57431 ; B 0 143 616 793 ; +C -1 ; WX 582 ; N afii62798 ; B 0 143 616 793 ; +C -1 ; WX 582 ; N afii62796 ; B 0 143 616 793 ; +C -1 ; WX 582 ; N afii62797 ; B 0 143 616 793 ; +C -1 ; WX 582 ; N afii57432 ; B 0 143 616 793 ; +C -1 ; WX 582 ; N afii62801 ; B 0 143 616 793 ; +C -1 ; WX 582 ; N afii62799 ; B 0 143 616 793 ; +C -1 ; WX 582 ; N afii62800 ; B 0 143 616 793 ; +C -1 ; WX 544 ; N afii57433 ; B 21 -212 516 534 ; +C -1 ; WX 450 ; N afii62804 ; B 26 -212 486 431 ; +C -1 ; WX 526 ; N afii62802 ; B 0 143 504 472 ; +C -1 ; WX 394 ; N afii62803 ; B 0 143 428 418 ; +C -1 ; WX 544 ; N afii57434 ; B 21 -212 516 737 ; +C -1 ; WX 450 ; N afii62807 ; B 26 -212 486 639 ; +C -1 ; WX 526 ; N afii62805 ; B 0 143 504 639 ; +C -1 ; WX 394 ; N afii62806 ; B 0 143 428 639 ; +C -1 ; WX 789 ; N afii57441 ; B 53 143 823 681 ; +C -1 ; WX 789 ; N afii62810 ; B 53 143 823 681 ; +C -1 ; WX 268 ; N afii62808 ; B 0 143 302 726 ; +C -1 ; WX 263 ; N afii62809 ; B 0 143 297 707 ; +C -1 ; WX 582 ; N afii57442 ; B 68 -75 616 683 ; +C -1 ; WX 582 ; N afii62813 ; B 68 -75 616 683 ; +C -1 ; WX 268 ; N afii62811 ; B 0 143 302 740 ; +C -1 ; WX 263 ; N afii62812 ; B 0 143 297 727 ; +C -1 ; WX 601 ; N afii57443 ; B 56 143 635 775 ; +C -1 ; WX 601 ; N afii62816 ; B 56 143 635 775 ; +C -1 ; WX 394 ; N afii57410 ; B 0 143 428 734 ; +C -1 ; WX 394 ; N afii62815 ; B 0 143 428 734 ; +C -1 ; WX 506 ; N afii57444 ; B 69 7 541 775 ; +C -1 ; WX 506 ; N afii62819 ; B 69 7 541 775 ; +C -1 ; WX 207 ; N afii62817 ; B 0 143 241 775 ; +C -1 ; WX 207 ; N afii62818 ; B 0 143 241 775 ; +C -1 ; WX 338 ; N afii57445 ; B 51 -212 372 357 ; +C -1 ; WX 338 ; N afii62822 ; B 51 -212 372 357 ; +C -1 ; WX 394 ; N afii62820 ; B 0 143 428 411 ; +C -1 ; WX 394 ; N afii62821 ; B 0 143 428 411 ; +C -1 ; WX 526 ; N afii57446 ; B 68 -72 560 558 ; +C -1 ; WX 526 ; N afii62825 ; B 68 -72 560 558 ; +C -1 ; WX 244 ; N afii62823 ; B 0 143 278 636 ; +C -1 ; WX 244 ; N afii62824 ; B 0 143 278 636 ; +C -1 ; WX 282 ; N afii57447 ; B 26 130 262 430 ; +C -1 ; WX 375 ; N afii62828 ; B 30 143 409 583 ; +C -1 ; WX 450 ; N afii57470 ; B 0 125 419 555 ; +C -1 ; WX 394 ; N afii62827 ; B 0 -62 428 429 ; +C -1 ; WX 432 ; N afii57448 ; B 59 -77 466 385 ; +C -1 ; WX 432 ; N afii62829 ; B 59 -77 466 385 ; +C -1 ; WX 638 ; N afii57449 ; B 24 -43 606 462 ; +C -1 ; WX 588 ; N afii62830 ; B 52 -110 623 252 ; +C -1 ; WX 638 ; N afii57450 ; B 24 -208 606 462 ; +C -1 ; WX 588 ; N afii62833 ; B 52 -212 623 252 ; +C -1 ; WX 244 ; N afii62831 ; B 0 -69 278 456 ; +C -1 ; WX 244 ; N afii62832 ; B 0 -69 278 456 ; +C -1 ; WX 544 ; N afii62834 ; B 31 79 507 827 ; +C -1 ; WX 601 ; N afii62835 ; B 31 118 630 827 ; +C -1 ; WX 544 ; N afii62836 ; B 19 79 507 880 ; +C -1 ; WX 601 ; N afii62837 ; B 23 118 630 880 ; +C -1 ; WX 544 ; N afii62838 ; B 41 -111 507 724 ; +C -1 ; WX 601 ; N afii62839 ; B 32 -111 630 733 ; +C -1 ; WX 544 ; N afii62840 ; B 41 79 507 724 ; +C -1 ; WX 601 ; N afii62841 ; B 32 118 630 733 ; +C -1 ; WX 750 ; N glyph1021 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1022 ; B 125 0 625 625 ; +C -1 ; WX 201 ; N _1023 ; B 34 673 201 774 ; +C -1 ; WX 201 ; N _1024 ; B 34 605 201 780 ; +C -1 ; WX 750 ; N glyph1025 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1026 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1027 ; B 125 0 625 625 ; +C -1 ; WX 165 ; N _1028 ; B 34 605 165 756 ; +C -1 ; WX 211 ; N _1029 ; B 34 605 211 762 ; +C -1 ; WX 750 ; N _1030 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1031 ; B 125 0 625 625 ; +C -1 ; WX 209 ; N _1032 ; B 35 605 209 817 ; +C -1 ; WX 237 ; N _1033 ; B 34 605 237 794 ; +C -1 ; WX 750 ; N glyph1034 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1035 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1036 ; B 125 0 625 625 ; +C -1 ; WX 211 ; N _1037 ; B 34 605 211 840 ; +C -1 ; WX 211 ; N _1038 ; B 34 605 211 917 ; +C -1 ; WX 211 ; N _1039 ; B 34 605 211 853 ; +C -1 ; WX 211 ; N _1040 ; B 34 605 211 905 ; +C -1 ; WX 211 ; N _1041 ; B 31 606 211 897 ; +C -1 ; WX 226 ; N _1042 ; B 23 605 226 933 ; +C -1 ; WX 750 ; N _1043 ; B 125 0 625 625 ; +C -1 ; WX 201 ; N _1044 ; B 34 -21 201 80 ; +C -1 ; WX 201 ; N _1045 ; B 34 -130 201 44 ; +C -1 ; WX 750 ; N glyph1046 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1047 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1048 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1049 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1050 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1051 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1052 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1053 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1054 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1055 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1056 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1057 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1058 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1059 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1060 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1061 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1062 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1063 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1064 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1065 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1066 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1067 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1068 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1069 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1070 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1071 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1072 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1073 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1074 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1075 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1076 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1077 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1078 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1079 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1080 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1081 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1082 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1083 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1084 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1085 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1086 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1087 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1088 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1089 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1090 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1091 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1092 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1093 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1094 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1095 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1096 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1097 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1098 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1099 ; B 125 0 625 625 ; +C -1 ; WX 319 ; N glyph1100 ; B 99 137 223 714 ; +C -1 ; WX 319 ; N glyph1101 ; B 97 137 226 267 ; +C -1 ; WX 319 ; N glyph1102 ; B 97 137 225 542 ; +C -1 ; WX 750 ; N glyph1103 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1104 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1105 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1106 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1107 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1108 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1109 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1110 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1111 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1112 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1113 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1114 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1115 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1116 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1117 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1118 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1119 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1120 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1121 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1122 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1123 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1124 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1125 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1126 ; B 125 0 625 625 ; +C -1 ; WX 125 ; N _1127 ; B 0 143 159 228 ; +C -1 ; WX 1000 ; N _1128 ; B 0 143 1034 228 ; +C -1 ; WX 2000 ; N _1129 ; B 0 143 2028 228 ; +C -1 ; WX 857 ; N Ohorn ; B 48 -12 834 729 ; +C -1 ; WX 656 ; N ohorn ; B 33 -12 625 531 ; +C -1 ; WX 854 ; N Uhorn ; B 79 -12 813 716 ; +C -1 ; WX 669 ; N uhorn ; B 64 -12 639 519 ; +C -1 ; WX 0 ; N _1134 ; B -268 819 -91 896 ; +C -1 ; WX 0 ; N _1135 ; B -477 819 -301 896 ; +C -1 ; WX 0 ; N _1136 ; B -419 755 -235 892 ; +C -1 ; WX 0 ; N f006 ; B -209 819 -33 896 ; +C -1 ; WX 0 ; N f007 ; B -395 819 -219 896 ; +C -1 ; WX 0 ; N f009 ; B -319 755 -135 892 ; +C -1 ; WX 0 ; N combininghookabove ; B -230 738 -17 896 ; +C -1 ; WX 0 ; N f010 ; B -244 803 -46 896 ; +C -1 ; WX 0 ; N f013 ; B -367 738 -153 896 ; +C -1 ; WX 0 ; N f011 ; B -450 803 -252 896 ; +C -1 ; WX 0 ; N f01c ; B -298 786 29 898 ; +C -1 ; WX 0 ; N f015 ; B -505 811 -178 896 ; +C -1 ; WX 0 ; N combiningtildeaccent ; B -444 755 -117 868 ; +C -1 ; WX 0 ; N _1147 ; B -146 729 139 800 ; +C -1 ; WX 0 ; N _1148 ; B -146 729 153 789 ; +C -1 ; WX 0 ; N f02c ; B -124 -159 -24 -59 ; +C -1 ; WX 513 ; N dongsign ; B 78 120 442 716 ; +C -1 ; WX 834 ; N onethird ; B 52 -28 823 728 ; +C -1 ; WX 834 ; N twothirds ; B 12 -28 818 728 ; +C -1 ; WX 0 ; N f008 ; B -161 583 22 720 ; +C -1 ; WX 0 ; N _1154 ; B -319 583 -135 720 ; +C -1 ; WX 0 ; N _1155 ; B -246 583 -63 720 ; +C -1 ; WX 0 ; N f00f ; B -419 583 -235 720 ; +C -1 ; WX 0 ; N f012 ; B -209 583 4 756 ; +C -1 ; WX 0 ; N f014 ; B -367 583 -153 756 ; +C -1 ; WX 0 ; N f016 ; B -527 786 -200 898 ; +C -1 ; WX 0 ; N f017 ; B -631 786 -304 898 ; +C -1 ; WX 0 ; N f018 ; B -665 786 -337 898 ; +C -1 ; WX 0 ; N f019 ; B -444 595 -117 708 ; +C -1 ; WX 0 ; N f01a ; B -542 595 -215 708 ; +C -1 ; WX 0 ; N f01b ; B -573 595 -246 708 ; +C -1 ; WX 0 ; N f01e ; B -382 -159 -282 -59 ; +C -1 ; WX 0 ; N f01f ; B -439 -159 -339 -59 ; +C -1 ; WX 0 ; N f020 ; B -517 -159 -417 -59 ; +C -1 ; WX 0 ; N f021 ; B -406 -159 -306 -59 ; +C -1 ; WX 0 ; N f022 ; B -551 -159 -451 -59 ; +C -1 ; WX 0 ; N combininggraveaccent ; B -261 755 -77 892 ; +C -1 ; WX 0 ; N combiningacuteaccent ; B -186 755 -2 892 ; +C -1 ; WX 0 ; N f01d ; B -280 595 47 708 ; +C -1 ; WX 0 ; N combiningdotbelow ; B -382 -159 -282 -59 ; +C -1 ; WX 0 ; N f023 ; B -329 -159 -229 -59 ; +C -1 ; WX 0 ; N f029 ; B -192 -159 -92 -59 ; +C -1 ; WX 0 ; N f02a ; B -158 -159 -58 -59 ; +C -1 ; WX 0 ; N f02b ; B -385 -159 -285 -59 ; +C -1 ; WX 0 ; N f024 ; B -322 -159 -222 -59 ; +C -1 ; WX 0 ; N f025 ; B -332 -159 -232 -59 ; +C -1 ; WX 0 ; N f026 ; B -430 -159 -330 -59 ; +C -1 ; WX 0 ; N f027 ; B -365 -159 -265 -59 ; +C -1 ; WX 0 ; N f028 ; B -479 -159 -378 -59 ; +C -1 ; WX 0 ; N f02d ; B -491 811 -164 896 ; +C -1 ; WX 0 ; N f02e ; B -491 786 -164 898 ; +C -1 ; WX 0 ; N f02f ; B -552 811 -225 896 ; +C -1 ; WX 0 ; N f030 ; B -552 786 -225 898 ; +C -1 ; WX 222 ; N f031 ; B 66 0 154 519 ; +C -1 ; WX 667 ; N Adotbelow ; B -1 -159 668 716 ; +C -1 ; WX 556 ; N adotbelow ; B 36 -159 514 530 ; +C -1 ; WX 667 ; N Ahookabove ; B -1 0 668 896 ; +C -1 ; WX 556 ; N ahookabove ; B 36 -12 514 756 ; +C -1 ; WX 667 ; N Acircumflexacute ; B -1 0 668 896 ; +C -1 ; WX 556 ; N acircumflexacute ; B 36 -12 514 892 ; +C -1 ; WX 667 ; N Acircumflexgrave ; B -1 0 668 896 ; +C -1 ; WX 556 ; N acircumflexgrave ; B 36 -12 514 892 ; +C -1 ; WX 667 ; N Acircumflexhookabove ; B -1 0 668 896 ; +C -1 ; WX 556 ; N acircumflexhookabove ; B 36 -12 514 896 ; +C -1 ; WX 667 ; N Acircumflextilde ; B -1 0 668 896 ; +C -1 ; WX 556 ; N acircumflextilde ; B 36 -12 514 868 ; +C -1 ; WX 667 ; N Acircumflexdotbelow ; B -1 -159 668 801 ; +C -1 ; WX 556 ; N acircumflexdotbelow ; B 36 -159 514 720 ; +C -1 ; WX 667 ; N Abreveacute ; B -1 0 668 896 ; +C -1 ; WX 556 ; N abreveacute ; B 36 -12 514 892 ; +C -1 ; WX 667 ; N Abrevegrave ; B -1 0 668 896 ; +C -1 ; WX 556 ; N abrevegrave ; B 36 -12 514 892 ; +C -1 ; WX 667 ; N Abrevehookabove ; B -1 0 668 896 ; +C -1 ; WX 556 ; N abrevehookabove ; B 36 -12 514 896 ; +C -1 ; WX 667 ; N Abrevetilde ; B -1 0 668 896 ; +C -1 ; WX 556 ; N abrevetilde ; B 36 -12 514 868 ; +C -1 ; WX 667 ; N Abrevedotbelow ; B -1 -159 668 800 ; +C -1 ; WX 556 ; N abrevedotbelow ; B 36 -159 514 715 ; +C -1 ; WX 667 ; N Edotbelow ; B 79 -159 613 716 ; +C -1 ; WX 556 ; N edotbelow ; B 37 -159 515 530 ; +C -1 ; WX 667 ; N Ehookabove ; B 79 0 613 896 ; +C -1 ; WX 556 ; N ehookabove ; B 37 -12 515 756 ; +C -1 ; WX 667 ; N Etilde ; B 79 0 613 885 ; +C -1 ; WX 556 ; N etilde ; B 37 -12 515 708 ; +C -1 ; WX 667 ; N Ecircumflexacute ; B 79 0 613 896 ; +C -1 ; WX 556 ; N ecircumflexacute ; B 37 -12 515 892 ; +C -1 ; WX 667 ; N Ecircumflexgrave ; B 79 0 613 896 ; +C -1 ; WX 556 ; N ecircumflexgrave ; B 37 -12 515 892 ; +C -1 ; WX 667 ; N Ecircumflexhookabove ; B 79 0 613 896 ; +C -1 ; WX 556 ; N ecircumflexhookabove ; B 37 -12 515 896 ; +C -1 ; WX 667 ; N Ecircumflextilde ; B 79 0 613 896 ; +C -1 ; WX 556 ; N ecircumflextilde ; B 37 -12 515 868 ; +C -1 ; WX 667 ; N Ecircumflexdotbelow ; B 79 -159 613 801 ; +C -1 ; WX 556 ; N ecircumflexdotbelow ; B 37 -159 515 720 ; +C -1 ; WX 278 ; N Ihookabove ; B 48 0 262 896 ; +C -1 ; WX 222 ; N ihookabove ; B 15 0 229 756 ; +C -1 ; WX 278 ; N Idotbelow ; B 91 -159 191 716 ; +C -1 ; WX 222 ; N idotbelow ; B 61 -159 161 716 ; +C -1 ; WX 778 ; N Odotbelow ; B 48 -159 733 729 ; +C -1 ; WX 556 ; N odotbelow ; B 33 -159 519 530 ; +C -1 ; WX 778 ; N Ohookabove ; B 48 -12 733 896 ; +C -1 ; WX 556 ; N ohookabove ; B 33 -12 519 756 ; +C -1 ; WX 778 ; N Ocircumflexacute ; B 48 -12 733 896 ; +C -1 ; WX 556 ; N ocircumflexacute ; B 33 -12 519 892 ; +C -1 ; WX 778 ; N Ocircumflexgrave ; B 48 -12 733 896 ; +C -1 ; WX 556 ; N ocircumflexgrave ; B 33 -12 519 892 ; +C -1 ; WX 778 ; N Ocircumflexhookabove ; B 48 -12 733 896 ; +C -1 ; WX 556 ; N ocircumflexhookabove ; B 33 -12 519 896 ; +C -1 ; WX 778 ; N Ocircumflextilde ; B 48 -12 733 896 ; +C -1 ; WX 556 ; N ocircumflextilde ; B 33 -12 519 868 ; +C -1 ; WX 778 ; N Ocircumflexdotbelow ; B 48 -159 733 801 ; +C -1 ; WX 556 ; N ocircumflexdotbelow ; B 33 -159 519 720 ; +C -1 ; WX 857 ; N Ohornacute ; B 48 -12 834 896 ; +C -1 ; WX 656 ; N ohornacute ; B 33 -12 625 720 ; +C -1 ; WX 857 ; N Ohorngrave ; B 48 -12 834 896 ; +C -1 ; WX 656 ; N ohorngrave ; B 33 -12 625 720 ; +C -1 ; WX 857 ; N Ohornhookabove ; B 48 -12 834 909 ; +C -1 ; WX 656 ; N ohornhookabove ; B 33 -12 625 756 ; +C -1 ; WX 857 ; N Ohorntilde ; B 48 -12 834 873 ; +C -1 ; WX 656 ; N ohorntilde ; B 33 -12 625 708 ; +C -1 ; WX 857 ; N Ohorndotbelow ; B 48 -159 834 729 ; +C -1 ; WX 656 ; N ohorndotbelow ; B 33 -159 625 531 ; +C -1 ; WX 722 ; N Udotbelow ; B 79 -159 642 716 ; +C -1 ; WX 556 ; N udotbelow ; B 64 -159 484 519 ; +C -1 ; WX 722 ; N Uhookabove ; B 79 -12 642 896 ; +C -1 ; WX 556 ; N uhookabove ; B 64 -12 484 756 ; +C -1 ; WX 854 ; N Uhornacute ; B 79 -12 813 896 ; +C -1 ; WX 669 ; N uhornacute ; B 64 -12 639 720 ; +C -1 ; WX 854 ; N Uhorngrave ; B 79 -12 813 896 ; +C -1 ; WX 669 ; N uhorngrave ; B 64 -12 639 720 ; +C -1 ; WX 854 ; N Uhornhookabove ; B 79 -12 813 896 ; +C -1 ; WX 669 ; N uhornhookabove ; B 64 -12 639 756 ; +C -1 ; WX 854 ; N Uhorntilde ; B 79 -12 813 873 ; +C -1 ; WX 669 ; N uhorntilde ; B 64 -12 639 708 ; +C -1 ; WX 854 ; N Uhorndotbelow ; B 79 -159 813 716 ; +C -1 ; WX 669 ; N uhorndotbelow ; B 64 -159 639 519 ; +C -1 ; WX 667 ; N Ydotbelow ; B 3 -159 659 716 ; +C -1 ; WX 500 ; N ydotbelow ; B 16 -210 491 519 ; +C -1 ; WX 667 ; N Yhookabove ; B 3 0 659 896 ; +C -1 ; WX 500 ; N yhookabove ; B 16 -210 491 756 ; +C -1 ; WX 667 ; N Ytilde ; B 3 0 659 873 ; +C -1 ; WX 500 ; N ytilde ; B 16 -210 491 708 ; +C -1 ; WX 667 ; N uni01CD ; B -1 0 668 891 ; +C -1 ; WX 556 ; N uni01CE ; B 36 -12 514 720 ; +C -1 ; WX 278 ; N uni01CF ; B -15 0 294 891 ; +C -1 ; WX 222 ; N uni01D0 ; B -39 0 270 720 ; +C -1 ; WX 778 ; N uni01D1 ; B 48 -12 733 891 ; +C -1 ; WX 556 ; N uni01D2 ; B 33 -12 519 720 ; +C -1 ; WX 722 ; N uni01D3 ; B 79 -12 642 891 ; +C -1 ; WX 556 ; N uni01D4 ; B 64 -12 484 720 ; +C -1 ; WX 722 ; N uni01D5 ; B 79 -12 642 900 ; +C -1 ; WX 556 ; N uni01D6 ; B 64 -12 484 852 ; +C -1 ; WX 722 ; N uni01D7 ; B 79 -12 642 900 ; +C -1 ; WX 556 ; N uni01D8 ; B 64 -12 484 900 ; +C -1 ; WX 722 ; N uni01D9 ; B 79 -12 642 900 ; +C -1 ; WX 556 ; N uni01DA ; B 64 -12 484 900 ; +C -1 ; WX 722 ; N uni01DB ; B 79 -12 642 900 ; +C -1 ; WX 556 ; N uni01DC ; B 64 -12 484 900 ; +C -1 ; WX 0 ; N _1292 ; B -126 730 126 900 ; +C -1 ; WX 0 ; N _1293 ; B -126 730 126 900 ; +C -1 ; WX 0 ; N _1294 ; B -126 730 126 900 ; +C -1 ; WX 0 ; N _1295 ; B -126 730 126 900 ; +EndCharMetrics +StartKernData +StartKernPairs 909 +KPX space A -55 +KPX space T -18 +KPX space Y -18 +KPX space Alphatonos -55 +KPX space Alpha -55 +KPX space Delta -55 +KPX space Lambda -55 +KPX space Tau -18 +KPX space Upsilon -18 +KPX space Upsilondieresis -18 +KPX one one -74 +KPX A space -55 +KPX A T -74 +KPX A V -74 +KPX A W -37 +KPX A Y -74 +KPX A v -18 +KPX A w -18 +KPX A y -18 +KPX A quoteright -74 +KPX F comma -111 +KPX F period -111 +KPX F A -55 +KPX L space -37 +KPX L T -74 +KPX L V -74 +KPX L W -74 +KPX L Y -74 +KPX L y -37 +KPX L quoteright -55 +KPX P space -18 +KPX P comma -129 +KPX P period -129 +KPX P A -74 +KPX R T -18 +KPX R V -18 +KPX R W -18 +KPX R Y -18 +KPX T space -18 +KPX T comma -111 +KPX T hyphen -55 +KPX T period -111 +KPX T colon -111 +KPX T semicolon -111 +KPX T A -74 +KPX T O -18 +KPX T a -111 +KPX T c -111 +KPX T e -111 +KPX T i -37 +KPX T o -111 +KPX T r -37 +KPX T s -111 +KPX T u -37 +KPX T w -55 +KPX T y -55 +KPX V comma -92 +KPX V hyphen -55 +KPX V period -92 +KPX V colon -37 +KPX V semicolon -37 +KPX V A -74 +KPX V a -74 +KPX V e -55 +KPX V i -18 +KPX V o -55 +KPX V r -37 +KPX V u -37 +KPX V y -37 +KPX W comma -55 +KPX W hyphen -18 +KPX W period -55 +KPX W colon -18 +KPX W semicolon -18 +KPX W A -37 +KPX W a -37 +KPX W e -18 +KPX W i 0 +KPX W o -18 +KPX W r -18 +KPX W u -18 +KPX W y -9 +KPX Y space -18 +KPX Y comma -129 +KPX Y hyphen -92 +KPX Y period -129 +KPX Y colon -55 +KPX Y semicolon -65 +KPX Y A -74 +KPX Y a -74 +KPX Y e -92 +KPX Y i -37 +KPX Y o -92 +KPX Y p -74 +KPX Y q -92 +KPX Y u -55 +KPX Y v -55 +KPX f f -18 +KPX f quoteright 18 +KPX r comma -55 +KPX r period -55 +KPX r quoteright 37 +KPX v comma -74 +KPX v period -74 +KPX w comma -55 +KPX w period -55 +KPX y comma -74 +KPX y period -74 +KPX quoteleft quoteleft -18 +KPX quoteright space -37 +KPX quoteright s -18 +KPX quoteright quoteright -18 +KPX quotedblbase afii10051 -78 +KPX quotedblbase afii10060 -78 +KPX quotedblbase afii10036 -78 +KPX quotedblbase afii10041 -33 +KPX quotedblbase afii10044 -33 +KPX Gamma comma -110 +KPX Gamma period -110 +KPX Gamma iotadieresistonos 80 +KPX Gamma Alpha -92 +KPX Gamma Delta -92 +KPX Gamma Lambda -92 +KPX Gamma iota -43 +KPX Gamma iotadieresis 43 +KPX Theta Alpha -18 +KPX Theta Delta -18 +KPX Theta Lambda -18 +KPX Theta Upsilon -32 +KPX Theta Upsilondieresis -32 +KPX Phi Alpha -29 +KPX Phi Upsilon -32 +KPX Phi Upsilondieresis -32 +KPX delta tau -14 +KPX delta lambda -19 +KPX delta chi -27 +KPX delta pi -14 +KPX tau alpha -14 +KPX tau delta -14 +KPX tau sigma -14 +KPX tau phi -14 +KPX tau alphatonos -14 +KPX tau zeta -14 +KPX tau omicron -14 +KPX tau sigma1 -14 +KPX tau omega -14 +KPX tau omegatonos -14 +KPX phi tau -14 +KPX phi lambda -19 +KPX phi chi -27 +KPX phi pi -14 +KPX Alphatonos Theta -21 +KPX Alphatonos Phi -29 +KPX Alphatonos Omicron -21 +KPX Alphatonos Tau -74 +KPX Alphatonos Upsilon -74 +KPX Alphatonos Upsilondieresis -74 +KPX Alphatonos gamma -18 +KPX Alphatonos nu -18 +KPX Alphatonos chi -18 +KPX Omicrontonos Upsilon -32 +KPX Upsilontonos Theta -56 +KPX Upsilontonos Phi -56 +KPX Upsilontonos alpha -91 +KPX Upsilontonos sigma -91 +KPX Upsilontonos phi -91 +KPX Upsilontonos iotadieresistonos 83 +KPX Upsilontonos Alpha -74 +KPX Upsilontonos Delta -74 +KPX Upsilontonos Lambda -74 +KPX Upsilontonos Omicron -56 +KPX Upsilontonos Omega -48 +KPX Upsilontonos etatonos -74 +KPX Upsilontonos iotatonos -37 +KPX Upsilontonos eta -74 +KPX Upsilontonos iota -37 +KPX Upsilontonos kappa -74 +KPX Upsilontonos mu -74 +KPX Upsilontonos omicron -91 +KPX Upsilontonos iotadieresis 48 +KPX Upsilontonos omicrontonos -91 +KPX Omegatonos Upsilon -23 +KPX Omegatonos Upsilondieresis -23 +KPX Alpha space -55 +KPX Alpha quoteright -74 +KPX Alpha Theta -21 +KPX Alpha Phi -29 +KPX Alpha Omicron -21 +KPX Alpha Tau -74 +KPX Alpha Upsilon -74 +KPX Alpha Upsilondieresis -74 +KPX Alpha gamma -18 +KPX Alpha nu -18 +KPX Alpha chi -18 +KPX Delta space -55 +KPX Delta Theta -21 +KPX Delta Omicron -21 +KPX Delta Tau -58 +KPX Delta Upsilon -74 +KPX Delta Upsilondieresis -74 +KPX Kappa Theta -31 +KPX Kappa Phi -55 +KPX Kappa alpha -12 +KPX Kappa delta -12 +KPX Kappa sigma -12 +KPX Kappa phi -12 +KPX Kappa Omicron -31 +KPX Kappa alphatonos -12 +KPX Kappa zeta -12 +KPX Kappa theta -12 +KPX Kappa xi -12 +KPX Kappa omicron -12 +KPX Kappa omega -12 +KPX Kappa omicrontonos -12 +KPX Kappa omegatonos -12 +KPX Lambda space -55 +KPX Lambda Theta -21 +KPX Lambda Omicron -21 +KPX Lambda Tau -74 +KPX Lambda Upsilon -74 +KPX Lambda Upsilondieresis -74 +KPX Omicron Alpha -18 +KPX Omicron Delta -21 +KPX Omicron Lambda -18 +KPX Omicron Upsilon -32 +KPX Omicron Upsilondieresis -32 +KPX Rho space -18 +KPX Rho comma -128 +KPX Rho period -128 +KPX Rho Alpha -74 +KPX Rho Delta -74 +KPX Rho Lambda -74 +KPX Sigma tau -48 +KPX Sigma pi -48 +KPX Tau space -18 +KPX Tau comma -110 +KPX Tau period -110 +KPX Tau colon -110 +KPX Tau semicolon -110 +KPX Tau Theta -18 +KPX Tau Phi -18 +KPX Tau alpha -110 +KPX Tau epsilon -110 +KPX Tau sigma -110 +KPX Tau phi -110 +KPX Tau iotadieresistonos 92 +KPX Tau Alpha -74 +KPX Tau Delta -74 +KPX Tau Lambda -74 +KPX Tau Omicron -18 +KPX Tau Omega -18 +KPX Tau alphatonos -110 +KPX Tau epsilontonos -110 +KPX Tau upsilondieresistonos -87 +KPX Tau gamma -87 +KPX Tau eta -73 +KPX Tau iota -37 +KPX Tau mu -73 +KPX Tau nu -55 +KPX Tau omicron -110 +KPX Tau upsilon -86 +KPX Tau chi -55 +KPX Tau psi -73 +KPX Tau iotadieresis 92 +KPX Tau upsilondieresis -87 +KPX Tau omicrontonos -110 +KPX Tau upsilontonos -87 +KPX Upsilon space -18 +KPX Upsilon comma -128 +KPX Upsilon hyphen -91 +KPX Upsilon period -128 +KPX Upsilon colon -55 +KPX Upsilon semicolon -55 +KPX Upsilon Theta -56 +KPX Upsilon Phi -56 +KPX Upsilon alpha -91 +KPX Upsilon sigma -91 +KPX Upsilon phi -91 +KPX Upsilon iotadieresistonos 92 +KPX Upsilon Alpha -74 +KPX Upsilon Delta -74 +KPX Upsilon Lambda -74 +KPX Upsilon Omicron -56 +KPX Upsilon Omega -48 +KPX Upsilon etatonos -74 +KPX Upsilon iotatonos -37 +KPX Upsilon gamma -48 +KPX Upsilon eta -74 +KPX Upsilon iota -37 +KPX Upsilon kappa -74 +KPX Upsilon mu -74 +KPX Upsilon omicron -91 +KPX Upsilon iotadieresis 59 +KPX Upsilon omicrontonos -91 +KPX Psi alpha -38 +KPX Psi delta -38 +KPX Psi sigma -38 +KPX Psi phi -38 +KPX Psi alphatonos -38 +KPX Psi theta -19 +KPX Psi omicron -38 +KPX Psi omega -38 +KPX Psi omicrontonos -38 +KPX Psi omegatonos -38 +KPX Omega Upsilon -23 +KPX Omega Upsilondieresis -23 +KPX Upsilondieresis space -18 +KPX Upsilondieresis Theta -56 +KPX Upsilondieresis Phi -56 +KPX Upsilondieresis alpha -91 +KPX Upsilondieresis sigma -91 +KPX Upsilondieresis phi -91 +KPX Upsilondieresis iotadieresistonos 83 +KPX Upsilondieresis Alpha -74 +KPX Upsilondieresis Delta -74 +KPX Upsilondieresis Lambda -74 +KPX Upsilondieresis Omicron -56 +KPX Upsilondieresis Omega -48 +KPX Upsilondieresis etatonos -74 +KPX Upsilondieresis iotatonos -37 +KPX Upsilondieresis eta -74 +KPX Upsilondieresis iota -37 +KPX Upsilondieresis kappa -74 +KPX Upsilondieresis mu -74 +KPX Upsilondieresis omicron -91 +KPX Upsilondieresis iotadieresis 48 +KPX Upsilondieresis omicrontonos -91 +KPX zeta alpha -67 +KPX zeta delta -37 +KPX zeta sigma -67 +KPX zeta tau -42 +KPX zeta phi -67 +KPX zeta alphatonos -67 +KPX zeta etatonos -18 +KPX zeta gamma -42 +KPX zeta eta -18 +KPX zeta theta -48 +KPX zeta iota -18 +KPX zeta kappa -18 +KPX zeta nu -42 +KPX zeta omicron -67 +KPX zeta omega -67 +KPX zeta omicrontonos -67 +KPX zeta omegatonos -67 +KPX zeta pi -42 +KPX theta lambda -19 +KPX kappa alpha -12 +KPX kappa delta -12 +KPX kappa sigma -12 +KPX kappa phi -12 +KPX kappa alphatonos -12 +KPX kappa zeta -12 +KPX kappa theta -12 +KPX kappa xi -12 +KPX kappa omicron -12 +KPX kappa sigma1 -12 +KPX kappa omega -12 +KPX kappa omicrontonos -12 +KPX kappa omegatonos -12 +KPX lambda alpha -15 +KPX lambda delta -15 +KPX lambda sigma -15 +KPX lambda phi -18 +KPX lambda alphatonos -15 +KPX lambda xi -15 +KPX lambda omicron -15 +KPX lambda sigma1 -23 +KPX lambda upsilon -24 +KPX lambda omega -15 +KPX lambda omicrontonos -15 +KPX lambda upsilontonos -24 +KPX lambda omegatonos -15 +KPX xi alpha -27 +KPX xi delta -27 +KPX xi sigma -27 +KPX xi phi -27 +KPX xi alphatonos -27 +KPX xi zeta -27 +KPX xi xi -27 +KPX xi omicron -27 +KPX xi sigma1 -27 +KPX xi omicrontonos -27 +KPX omicron tau -14 +KPX omicron lambda -19 +KPX omicron chi -27 +KPX omicron pi -14 +KPX rho tau -14 +KPX rho lambda -19 +KPX rho pi -14 +KPX chi alpha -27 +KPX chi delta -27 +KPX chi sigma -27 +KPX chi phi -27 +KPX chi alphatonos -27 +KPX chi zeta -27 +KPX chi omicron -27 +KPX chi sigma1 -27 +KPX chi omega -27 +KPX chi omicrontonos -27 +KPX chi omegatonos -27 +KPX omega tau -14 +KPX omega lambda -19 +KPX omega chi -27 +KPX omega pi -14 +KPX omicrontonos tau -14 +KPX omicrontonos lambda -19 +KPX omicrontonos chi -27 +KPX omicrontonos pi -14 +KPX omegatonos tau -14 +KPX omegatonos lambda -19 +KPX omegatonos chi -27 +KPX omegatonos pi -14 +KPX afii10052 comma -122 +KPX afii10052 period -122 +KPX afii10052 guillemotleft -67 +KPX afii10052 guillemotright -67 +KPX afii10052 emdash -22 +KPX afii10058 quoteright -78 +KPX afii10059 quoteright -67 +KPX afii10017 quoteright -56 +KPX afii10017 afii10021 33 +KPX afii10017 afii10025 -11 +KPX afii10017 afii10029 22 +KPX afii10017 afii10032 -22 +KPX afii10017 afii10033 -11 +KPX afii10017 afii10035 -22 +KPX afii10017 afii10036 -78 +KPX afii10017 afii10037 -44 +KPX afii10017 afii10038 -33 +KPX afii10017 afii10041 -78 +KPX afii10017 afii10047 -22 +KPX afii10017 afii10065 11 +KPX afii10017 afii10084 -22 +KPX afii10017 afii10085 -11 +KPX afii10017 afii10086 11 +KPX afii10017 afii10095 22 +KPX afii10018 afii10017 -22 +KPX afii10018 afii10025 -11 +KPX afii10018 afii10032 -11 +KPX afii10018 afii10035 -11 +KPX afii10018 afii10036 -45 +KPX afii10018 afii10037 -23 +KPX afii10018 afii10038 -11 +KPX afii10018 afii10039 -22 +KPX afii10018 afii10041 -45 +KPX afii10018 afii10044 -33 +KPX afii10018 afii10047 -11 +KPX afii10018 afii10049 -11 +KPX afii10018 afii10077 -11 +KPX afii10018 afii10085 -22 +KPX afii10019 afii10017 -33 +KPX afii10019 afii10021 -22 +KPX afii10019 afii10024 -22 +KPX afii10019 afii10025 -33 +KPX afii10019 afii10029 -11 +KPX afii10019 afii10032 -33 +KPX afii10019 afii10035 -33 +KPX afii10019 afii10036 -67 +KPX afii10019 afii10037 -33 +KPX afii10019 afii10038 -33 +KPX afii10019 afii10039 -44 +KPX afii10019 afii10041 -45 +KPX afii10019 afii10044 -56 +KPX afii10019 afii10049 -33 +KPX afii10019 afii10069 -11 +KPX afii10019 afii10078 -11 +KPX afii10019 afii10084 -33 +KPX afii10019 afii10085 -11 +KPX afii10019 afii10087 -11 +KPX afii10019 afii10089 -33 +KPX afii10019 afii10097 -11 +KPX afii10020 comma -122 +KPX afii10020 period -122 +KPX afii10020 guillemotleft -67 +KPX afii10020 guillemotright -67 +KPX afii10020 emdash -22 +KPX afii10020 afii10017 -67 +KPX afii10020 afii10021 -67 +KPX afii10020 afii10025 -22 +KPX afii10020 afii10029 -56 +KPX afii10020 afii10030 -23 +KPX afii10020 afii10032 -56 +KPX afii10020 afii10035 -45 +KPX afii10020 afii10049 -33 +KPX afii10020 afii10065 -56 +KPX afii10020 afii10067 -56 +KPX afii10020 afii10069 -67 +KPX afii10020 afii10070 -67 +KPX afii10020 afii10074 -56 +KPX afii10020 afii10077 -56 +KPX afii10020 afii10078 -56 +KPX afii10020 afii10079 -56 +KPX afii10020 afii10080 -67 +KPX afii10020 afii10082 -56 +KPX afii10020 afii10085 -67 +KPX afii10020 afii10093 -56 +KPX afii10020 afii10094 -56 +KPX afii10020 afii10096 -56 +KPX afii10020 afii10097 -67 +KPX afii10021 afii10037 11 +KPX afii10021 afii10038 -22 +KPX afii10021 afii10041 -34 +KPX afii10021 afii10073 33 +KPX afii10021 afii10080 11 +KPX afii10021 afii10085 22 +KPX afii10022 afii10025 -22 +KPX afii10022 afii10083 -11 +KPX afii10024 afii10025 -11 +KPX afii10024 afii10032 -22 +KPX afii10024 afii10035 -11 +KPX afii10024 afii10036 11 +KPX afii10024 afii10037 22 +KPX afii10024 afii10044 22 +KPX afii10024 afii10065 11 +KPX afii10024 afii10070 -12 +KPX afii10024 afii10080 -11 +KPX afii10024 afii10085 -11 +KPX afii10025 afii10029 -11 +KPX afii10025 afii10032 -11 +KPX afii10025 afii10035 -11 +KPX afii10025 afii10036 -22 +KPX afii10025 afii10037 -11 +KPX afii10025 afii10038 -11 +KPX afii10025 afii10041 -22 +KPX afii10025 afii10049 -11 +KPX afii10028 afii10025 -11 +KPX afii10028 afii10032 -11 +KPX afii10028 afii10035 -11 +KPX afii10028 afii10037 11 +KPX afii10028 afii10038 -34 +KPX afii10029 afii10038 -11 +KPX afii10029 afii10066 11 +KPX afii10029 afii10085 11 +KPX afii10030 afii10038 -11 +KPX afii10030 afii10041 -11 +KPX afii10030 afii10065 11 +KPX afii10030 afii10070 11 +KPX afii10030 afii10080 11 +KPX afii10030 afii10083 11 +KPX afii10030 afii10085 11 +KPX afii10030 afii10089 -11 +KPX afii10030 afii10095 11 +KPX afii10032 afii10017 -22 +KPX afii10032 afii10021 -22 +KPX afii10032 afii10024 -22 +KPX afii10032 afii10029 -11 +KPX afii10032 afii10037 -22 +KPX afii10032 afii10039 -45 +KPX afii10032 afii10041 -22 +KPX afii10032 afii10049 -22 +KPX afii10032 afii10069 -22 +KPX afii10032 afii10077 -11 +KPX afii10032 afii10087 -11 +KPX afii10034 comma -189 +KPX afii10034 period -189 +KPX afii10034 colon -22 +KPX afii10034 semicolon -22 +KPX afii10034 guillemotright -56 +KPX afii10034 afii10017 -67 +KPX afii10034 afii10021 -67 +KPX afii10034 afii10024 -11 +KPX afii10034 afii10025 -22 +KPX afii10034 afii10029 -56 +KPX afii10034 afii10030 -11 +KPX afii10034 afii10032 -22 +KPX afii10034 afii10035 -11 +KPX afii10034 afii10036 -45 +KPX afii10034 afii10037 -22 +KPX afii10034 afii10038 -11 +KPX afii10034 afii10039 -45 +KPX afii10034 afii10049 -22 +KPX afii10034 afii10065 -33 +KPX afii10034 afii10069 -78 +KPX afii10034 afii10070 -44 +KPX afii10034 afii10080 -44 +KPX afii10034 afii10095 -22 +KPX afii10034 afii10097 -33 +KPX afii10035 afii10017 -22 +KPX afii10035 afii10021 -22 +KPX afii10035 afii10025 -11 +KPX afii10035 afii10029 -33 +KPX afii10035 afii10030 -11 +KPX afii10035 afii10032 -22 +KPX afii10035 afii10036 -33 +KPX afii10035 afii10037 -33 +KPX afii10035 afii10039 -56 +KPX afii10035 afii10041 -33 +KPX afii10035 afii10044 -34 +KPX afii10035 afii10047 -11 +KPX afii10035 afii10065 11 +KPX afii10035 afii10072 22 +KPX afii10035 afii10089 -11 +KPX afii10036 comma -111 +KPX afii10036 period -111 +KPX afii10036 guillemotleft -44 +KPX afii10036 guillemotright -44 +KPX afii10036 emdash -22 +KPX afii10036 afii10017 -33 +KPX afii10036 afii10021 -33 +KPX afii10036 afii10024 11 +KPX afii10036 afii10025 -11 +KPX afii10036 afii10029 -22 +KPX afii10036 afii10032 -45 +KPX afii10036 afii10038 -33 +KPX afii10036 afii10049 -22 +KPX afii10036 afii10065 -45 +KPX afii10036 afii10067 -44 +KPX afii10036 afii10070 -56 +KPX afii10036 afii10074 -44 +KPX afii10036 afii10076 -44 +KPX afii10036 afii10077 -45 +KPX afii10036 afii10078 -44 +KPX afii10036 afii10080 -78 +KPX afii10036 afii10081 -44 +KPX afii10036 afii10082 -56 +KPX afii10036 afii10083 -56 +KPX afii10036 afii10085 -56 +KPX afii10036 afii10087 -44 +KPX afii10036 afii10091 -44 +KPX afii10036 afii10093 -44 +KPX afii10036 afii10094 -44 +KPX afii10036 afii10096 -44 +KPX afii10036 afii10097 -56 +KPX afii10037 comma -133 +KPX afii10037 period -133 +KPX afii10037 colon -22 +KPX afii10037 semicolon -22 +KPX afii10037 guillemotleft -44 +KPX afii10037 guillemotright -45 +KPX afii10037 emdash -11 +KPX afii10037 afii10017 -67 +KPX afii10037 afii10021 -45 +KPX afii10037 afii10025 -22 +KPX afii10037 afii10029 -33 +KPX afii10037 afii10032 -33 +KPX afii10037 afii10038 -33 +KPX afii10037 afii10047 -22 +KPX afii10037 afii10049 -22 +KPX afii10037 afii10066 -22 +KPX afii10037 afii10067 -56 +KPX afii10037 afii10068 -45 +KPX afii10037 afii10069 -78 +KPX afii10037 afii10070 -67 +KPX afii10037 afii10072 -33 +KPX afii10037 afii10073 -56 +KPX afii10037 afii10074 -45 +KPX afii10037 afii10075 -33 +KPX afii10037 afii10076 -45 +KPX afii10037 afii10077 -67 +KPX afii10037 afii10078 -45 +KPX afii10037 afii10079 -45 +KPX afii10037 afii10080 -67 +KPX afii10037 afii10081 -45 +KPX afii10037 afii10082 -45 +KPX afii10037 afii10083 -67 +KPX afii10037 afii10087 -45 +KPX afii10037 afii10088 -45 +KPX afii10037 afii10090 -45 +KPX afii10037 afii10091 -45 +KPX afii10037 afii10096 -45 +KPX afii10037 afii10097 -67 +KPX afii10038 afii10017 -22 +KPX afii10038 afii10021 -33 +KPX afii10038 afii10029 -33 +KPX afii10038 afii10036 -56 +KPX afii10038 afii10037 -45 +KPX afii10038 afii10041 -22 +KPX afii10038 afii10049 -34 +KPX afii10038 afii10077 -33 +KPX afii10039 afii10025 -22 +KPX afii10039 afii10032 -33 +KPX afii10039 afii10035 -33 +KPX afii10039 afii10038 -33 +KPX afii10039 afii10047 -34 +KPX afii10039 afii10080 -11 +KPX afii10039 afii10085 -22 +KPX afii10040 afii10032 -22 +KPX afii10040 afii10065 22 +KPX afii10043 afii10065 11 +KPX afii10043 afii10085 22 +KPX afii10044 quoteright -67 +KPX afii10044 afii10049 -33 +KPX afii10046 quoteright -78 +KPX afii10046 afii10017 -22 +KPX afii10046 afii10021 -22 +KPX afii10046 afii10024 -33 +KPX afii10046 afii10025 -11 +KPX afii10046 afii10029 -34 +KPX afii10046 afii10030 -22 +KPX afii10046 afii10032 -22 +KPX afii10046 afii10035 -22 +KPX afii10046 afii10036 -100 +KPX afii10046 afii10039 -45 +KPX afii10046 afii10041 -78 +KPX afii10046 afii10047 -11 +KPX afii10046 afii10049 -45 +KPX afii10047 afii10021 -33 +KPX afii10047 afii10024 -12 +KPX afii10047 afii10025 -11 +KPX afii10047 afii10029 -33 +KPX afii10047 afii10039 -34 +KPX afii10047 afii10049 -22 +KPX afii10047 afii10069 -33 +KPX afii10047 afii10072 11 +KPX afii10047 afii10077 -33 +KPX afii10047 afii10078 -11 +KPX afii10047 afii10097 -11 +KPX afii10048 afii10017 -33 +KPX afii10048 afii10021 -44 +KPX afii10048 afii10024 -22 +KPX afii10048 afii10029 -45 +KPX afii10048 afii10032 -11 +KPX afii10048 afii10035 -11 +KPX afii10048 afii10036 -56 +KPX afii10048 afii10039 -45 +KPX afii10048 afii10041 -33 +KPX afii10048 afii10069 -45 +KPX afii10048 afii10077 -45 +KPX afii10048 afii10078 -11 +KPX afii10065 afii10073 -11 +KPX afii10065 afii10084 -22 +KPX afii10065 afii10085 -11 +KPX afii10065 afii10089 -22 +KPX afii10066 afii10065 -23 +KPX afii10066 afii10069 -45 +KPX afii10066 afii10070 -11 +KPX afii10066 afii10072 -11 +KPX afii10066 afii10073 -22 +KPX afii10066 afii10077 -45 +KPX afii10066 afii10078 -22 +KPX afii10066 afii10083 -11 +KPX afii10066 afii10085 -22 +KPX afii10066 afii10086 -11 +KPX afii10066 afii10087 -33 +KPX afii10066 afii10089 -33 +KPX afii10066 afii10092 -33 +KPX afii10066 afii10095 -11 +KPX afii10066 afii10097 -22 +KPX afii10067 afii10065 -11 +KPX afii10067 afii10066 -11 +KPX afii10067 afii10069 -11 +KPX afii10067 afii10070 -11 +KPX afii10067 afii10072 -11 +KPX afii10067 afii10073 -11 +KPX afii10067 afii10077 -23 +KPX afii10067 afii10078 -11 +KPX afii10067 afii10080 -11 +KPX afii10067 afii10083 -11 +KPX afii10067 afii10084 -22 +KPX afii10067 afii10085 -22 +KPX afii10067 afii10086 -11 +KPX afii10067 afii10089 -45 +KPX afii10067 afii10092 -33 +KPX afii10067 afii10097 -11 +KPX afii10068 comma -122 +KPX afii10068 period -122 +KPX afii10068 afii10065 -22 +KPX afii10068 afii10069 -45 +KPX afii10068 afii10070 -22 +KPX afii10068 afii10073 -11 +KPX afii10068 afii10077 -22 +KPX afii10068 afii10080 -22 +KPX afii10068 afii10083 -22 +KPX afii10068 afii10097 -11 +KPX afii10069 afii10092 -22 +KPX afii10069 afii10095 11 +KPX afii10070 afii10066 -11 +KPX afii10070 afii10069 -22 +KPX afii10070 afii10072 -11 +KPX afii10070 afii10073 -22 +KPX afii10070 afii10077 -33 +KPX afii10070 afii10084 -33 +KPX afii10070 afii10085 -11 +KPX afii10070 afii10087 -22 +KPX afii10070 afii10089 -33 +KPX afii10072 afii10066 11 +KPX afii10072 afii10085 11 +KPX afii10072 afii10089 -11 +KPX afii10072 afii10092 22 +KPX afii10073 afii10066 -11 +KPX afii10073 afii10069 -22 +KPX afii10073 afii10070 -11 +KPX afii10073 afii10073 -11 +KPX afii10073 afii10077 -11 +KPX afii10073 afii10080 -11 +KPX afii10073 afii10083 -11 +KPX afii10073 afii10085 -11 +KPX afii10073 afii10086 -11 +KPX afii10073 afii10089 -33 +KPX afii10073 afii10092 -22 +KPX afii10076 afii10065 22 +KPX afii10076 afii10066 22 +KPX afii10076 afii10070 11 +KPX afii10076 afii10073 11 +KPX afii10076 afii10077 11 +KPX afii10076 afii10080 11 +KPX afii10076 afii10083 11 +KPX afii10076 afii10084 11 +KPX afii10076 afii10085 11 +KPX afii10076 afii10095 11 +KPX afii10077 afii10080 11 +KPX afii10077 afii10089 -22 +KPX afii10078 afii10066 -11 +KPX afii10078 afii10073 -11 +KPX afii10078 afii10085 11 +KPX afii10080 afii10069 -22 +KPX afii10080 afii10072 -11 +KPX afii10080 afii10073 -11 +KPX afii10080 afii10077 -22 +KPX afii10080 afii10084 -22 +KPX afii10080 afii10085 -11 +KPX afii10080 afii10087 -11 +KPX afii10080 afii10089 -22 +KPX afii10082 afii10069 -23 +KPX afii10082 afii10073 -11 +KPX afii10082 afii10077 -34 +KPX afii10082 afii10084 -22 +KPX afii10082 afii10085 -11 +KPX afii10082 afii10087 -11 +KPX afii10082 afii10089 -22 +KPX afii10082 afii10097 -11 +KPX afii10083 afii10072 11 +KPX afii10083 afii10080 11 +KPX afii10083 afii10089 -11 +KPX afii10083 afii10095 11 +KPX afii10084 comma -111 +KPX afii10084 period -111 +KPX afii10084 afii10065 -11 +KPX afii10084 afii10069 -33 +KPX afii10084 afii10070 -11 +KPX afii10084 afii10072 33 +KPX afii10084 afii10077 -22 +KPX afii10084 afii10080 -11 +KPX afii10084 afii10083 -11 +KPX afii10084 afii10085 11 +KPX afii10085 comma -100 +KPX afii10085 period -100 +KPX afii10085 guillemotright 11 +KPX afii10085 afii10065 -11 +KPX afii10085 afii10066 11 +KPX afii10085 afii10069 -33 +KPX afii10085 afii10070 -11 +KPX afii10085 afii10072 11 +KPX afii10085 afii10077 -22 +KPX afii10085 afii10078 -11 +KPX afii10085 afii10080 -12 +KPX afii10085 afii10082 -11 +KPX afii10085 afii10083 -11 +KPX afii10085 afii10086 -11 +KPX afii10085 afii10095 -11 +KPX afii10085 afii10097 -11 +KPX afii10086 afii10066 -11 +KPX afii10086 afii10069 -22 +KPX afii10086 afii10077 -22 +KPX afii10086 afii10084 -22 +KPX afii10086 afii10085 -11 +KPX afii10086 afii10089 -22 +KPX afii10086 afii10097 -11 +KPX afii10087 afii10065 -11 +KPX afii10087 afii10066 -11 +KPX afii10087 afii10070 -11 +KPX afii10087 afii10073 -11 +KPX afii10087 afii10080 -11 +KPX afii10087 afii10083 -11 +KPX afii10087 afii10084 -11 +KPX afii10087 afii10086 -11 +KPX afii10087 afii10089 -22 +KPX afii10088 afii10070 -11 +KPX afii10088 afii10073 -11 +KPX afii10088 afii10080 -11 +KPX afii10088 afii10083 -11 +KPX afii10091 afii10070 -11 +KPX afii10091 afii10080 -11 +KPX afii10091 afii10085 11 +KPX afii10094 afii10084 -78 +KPX afii10094 afii10089 -67 +KPX afii10095 afii10069 -22 +KPX afii10095 afii10070 11 +KPX afii10095 afii10073 -11 +KPX afii10095 afii10077 -22 +KPX afii10095 afii10080 11 +KPX afii10095 afii10084 -22 +KPX afii10095 afii10087 -11 +KPX afii10095 afii10097 -11 +KPX afii10096 afii10069 -22 +KPX afii10096 afii10072 -11 +KPX afii10096 afii10077 -22 +KPX afii10096 afii10078 -11 +KPX afii10096 afii10084 -22 +KPX afii10096 afii10087 -11 +KPX afii10096 afii10089 -22 +KPX afii10110 comma -100 +KPX afii10110 period -100 +KPX afii10050 comma -122 +KPX afii10050 period -122 +KPX afii10050 colon -22 +KPX afii10050 semicolon -22 +KPX afii10050 guillemotleft -78 +KPX afii10050 guillemotright -78 +KPX afii10050 emdash -22 +KPX pi alpha -14 +KPX pi sigma -14 +KPX pi phi -14 +KPX pi alphatonos -14 +KPX pi zeta -14 +KPX pi omicron -14 +KPX pi sigma1 -14 +KPX pi omega -14 +KPX pi omegatonos -14 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/fonts/arial_ce.php b/fonts/arial_ce.php new file mode 100644 index 0000000..9d9101c --- /dev/null +++ b/fonts/arial_ce.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='ArialMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>32,'FontBBox'=>'[-664 -325 2028 1037]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>750); +$up=-106; +$ut=73; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>222,chr(131)=>750, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>500,chr(157)=>375,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>556,chr(164)=>556,chr(165)=>667,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>222,chr(180)=>333,chr(181)=>576,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>500,chr(187)=>556,chr(188)=>556,chr(189)=>333,chr(190)=>292,chr(191)=>500,chr(192)=>722,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>556, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>333,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>222,chr(230)=>500,chr(231)=>500,chr(232)=>500,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>615,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>549,chr(248)=>333,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>278,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce.z'; +$originalsize=273020; +?> diff --git a/fonts/arial_ce.t1a b/fonts/arial_ce.t1a new file mode 100644 index 0000000..ac0e2bc --- /dev/null +++ b/fonts/arial_ce.t1a @@ -0,0 +1,34922 @@ +%!PS-AdobeFont-1.0: ArialMT Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +%%CreationDate: Sun May 25 22:54:52 2003 +% Converted from TrueType font 'arial_ce.ttf' by ttf2pt1 program +% +%%EndComments +12 dict begin +/FontInfo 9 dict dup begin +/version (Version 2.76) readonly def +/Notice (Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved) readonly def +/FullName (Arial) readonly def +/FamilyName (Arial) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0.000000 def +/isFixedPitch false def +/UnderlinePosition -106 def +/UnderlineThickness 73 def +end readonly def +/FontName /ArialMT def +/PaintType 0 def +/StrokeWidth 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox {-664 -325 2028 1037} readonly def +/Encoding 256 array +dup 0 /.notdef put +dup 1 /.notdef put +dup 2 /.notdef put +dup 3 /.notdef put +dup 4 /.notdef put +dup 5 /.notdef put +dup 6 /.notdef put +dup 7 /.notdef put +dup 8 /.notdef put +dup 9 /.notdef put +dup 10 /.notdef put +dup 11 /.notdef put +dup 12 /.notdef put +dup 13 /.notdef put +dup 14 /.notdef put +dup 15 /.notdef put +dup 16 /.notdef put +dup 17 /.notdef put +dup 18 /.notdef put +dup 19 /.notdef put +dup 20 /.notdef put +dup 21 /.notdef put +dup 22 /.notdef put +dup 23 /.notdef put +dup 24 /.notdef put +dup 25 /.notdef put +dup 26 /.notdef put +dup 27 /.notdef put +dup 28 /.notdef put +dup 29 /.notdef put +dup 30 /.notdef put +dup 31 /.notdef put +dup 32 /space put +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quotesingle put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /grave put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +dup 127 /.notdef put +dup 128 /.notdef put +dup 129 /.notdef put +dup 130 /quotesinglbase put +dup 131 /florin put +dup 132 /quotedblbase put +dup 133 /ellipsis put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 136 /circumflex put +dup 137 /perthousand put +dup 138 /Scaron put +dup 139 /guilsinglleft put +dup 140 /OE put +dup 141 /.notdef put +dup 142 /.notdef put +dup 143 /.notdef put +dup 144 /.notdef put +dup 145 /quoteleft put +dup 146 /quoteright put +dup 147 /quotedblleft put +dup 148 /quotedblright put +dup 149 /bullet put +dup 150 /endash put +dup 151 /emdash put +dup 152 /tilde put +dup 153 /trademark put +dup 154 /scaron put +dup 155 /guilsinglright put +dup 156 /oe put +dup 157 /.notdef put +dup 158 /.notdef put +dup 159 /Ydieresis put +dup 160 /space put +dup 161 /exclamdown put +dup 162 /cent put +dup 163 /sterling put +dup 164 /currency put +dup 165 /yen put +dup 166 /brokenbar put +dup 167 /section put +dup 168 /dieresis put +dup 169 /copyright put +dup 170 /ordfeminine put +dup 171 /guillemotleft put +dup 172 /logicalnot put +dup 173 /hyphen put +dup 174 /registered put +dup 175 /overscore put +dup 176 /degree put +dup 177 /plusminus put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 180 /acute put +dup 181 /mu1 put +dup 182 /paragraph put +dup 183 /periodcentered put +dup 184 /cedilla put +dup 185 /onesuperior put +dup 186 /ordmasculine put +dup 187 /guillemotright put +dup 188 /onequarter put +dup 189 /onehalf put +dup 190 /threequarters put +dup 191 /questiondown put +dup 192 /Agrave put +dup 193 /Aacute put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 196 /Adieresis put +dup 197 /Aring put +dup 198 /AE put +dup 199 /Ccedilla put +dup 200 /Egrave put +dup 201 /Eacute put +dup 202 /Ecircumflex put +dup 203 /Edieresis put +dup 204 /Igrave put +dup 205 /Iacute put +dup 206 /Icircumflex put +dup 207 /Idieresis put +dup 208 /Eth put +dup 209 /Ntilde put +dup 210 /Ograve put +dup 211 /Oacute put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 214 /Odieresis put +dup 215 /multiply put +dup 216 /Oslash put +dup 217 /Ugrave put +dup 218 /Uacute put +dup 219 /Ucircumflex put +dup 220 /Udieresis put +dup 221 /Yacute put +dup 222 /Thorn put +dup 223 /germandbls put +dup 224 /agrave put +dup 225 /aacute put +dup 226 /acircumflex put +dup 227 /atilde put +dup 228 /adieresis put +dup 229 /aring put +dup 230 /ae put +dup 231 /ccedilla put +dup 232 /egrave put +dup 233 /eacute put +dup 234 /ecircumflex put +dup 235 /edieresis put +dup 236 /igrave put +dup 237 /iacute put +dup 238 /icircumflex put +dup 239 /idieresis put +dup 240 /eth put +dup 241 /ntilde put +dup 242 /ograve put +dup 243 /oacute put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 246 /odieresis put +dup 247 /divide put +dup 248 /oslash put +dup 249 /ugrave put +dup 250 /uacute put +dup 251 /ucircumflex put +dup 252 /udieresis put +dup 253 /yacute put +dup 254 /thorn put +dup 255 /ydieresis put +readonly def +currentdict end +currentfile eexec +dup /Private 16 dict dup begin +/RD{string currentfile exch readstring pop}executeonly def +/ND{noaccess def}executeonly def +/NP{noaccess put}executeonly def +/ForceBold false def +/BlueValues [ -15 0 713 728 625 639 892 910 518 532 ] def +/OtherBlues [ -212 -197 130 143 ] def +/StdHW [ 73 ] def +/StdVW [ 17 ] def +/StemSnapH [ 21 55 62 66 70 73 77 80 83 86 101 138 ] def +/StemSnapV [ 17 36 40 49 80 83 86 89 92 95 99 102 ] def +/MinFeature {16 16} def +/password 5839 def +/Subrs 5 array +dup 0 { + 3 0 callothersubr pop pop setcurrentpoint return + } NP +dup 1 { + 0 1 callothersubr return + } NP +dup 2 { + 0 2 callothersubr return + } NP +dup 3 { + return + } NP +dup 4 { + 1 3 callothersubr pop callsubr return + } NP +ND +2 index /CharStrings 1296 dict dup begin +/.notdef { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/.null { +0 0 hsbw +endchar } ND +/nonmarkingreturn { +0 278 hsbw +endchar } ND +/space { +0 278 hsbw +endchar } ND +/exclam { +0 278 hsbw +0 100 hstem +178 538 hstem +90 101 vstem +113 178 rmoveto +56 0 rlineto +26 379 rlineto +0 159 rlineto +-109 0 rlineto +0 -159 rlineto +27 -379 rlineto +closepath +-23 -178 rmoveto +101 0 rlineto +0 100 rlineto +-101 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/quotedbl { +0 355 hsbw +462 254 hstem +46 100 vstem +208 100 vstem +70 462 rmoveto +54 0 rlineto +22 137 rlineto +0 117 rlineto +-100 0 rlineto +0 -117 rlineto +24 -137 rlineto +closepath +162 0 rmoveto +53 0 rlineto +23 137 rlineto +0 117 rlineto +-100 0 rlineto +0 -117 rlineto +24 -137 rlineto +closepath +endchar } ND +/numbersign { +0 556 hsbw +-12 281 hstem +446 73 hstem +708 20 hstem +10 171 vstem +201 73 vstem +371 172 vstem +50 -12 rmoveto +74 0 rlineto +42 208 rlineto +153 0 rlineto +-42 -208 rlineto +74 0 rlineto +42 208 rlineto +150 0 rlineto +0 73 rlineto +-135 0 rlineto +36 177 rlineto +99 0 rlineto +0 73 rlineto +-84 0 rlineto +42 209 rlineto +-73 0 rlineto +-43 -209 rlineto +-154 0 rlineto +43 209 rlineto +-73 0 rlineto +-43 -209 rlineto +-148 0 rlineto +0 -73 rlineto +134 0 rlineto +-37 -177 rlineto +-97 0 rlineto +0 -73 rlineto +83 0 rlineto +-43 -208 rlineto +closepath +131 281 rmoveto +36 177 rlineto +154 0 rlineto +-37 -177 rlineto +-153 0 rlineto +closepath +endchar } ND +/dollar { +0 556 hsbw +-103 162 hstem +339 84 hstem +667 115 hstem +51 88 vstem +249 52 vstem +419 90 vstem +249 -103 rmoveto +52 0 rlineto +0 89 rlineto +122 6 86 89 0 123 rrcurveto +0 111 -53 59 -155 38 rrcurveto +0 254 rlineto +57 -12 32 -35 11 -69 rrcurveto +91 13 rlineto +-15 103 -67 62 -109 12 rrcurveto +0 42 rlineto +-52 0 rlineto +0 -42 rlineto +-128 -13 -70 -73 0 -114 rrcurveto +0 -115 105 -70 93 -16 rrcurveto +0 -280 rlineto +-72 5 -41 60 -12 91 rrcurveto +-88 -16 rlineto +7 -125 75 -71 131 -18 rrcurveto +0 -88 rlineto +closepath +0 770 rmoveto +0 -244 rlineto +-80 24 -30 40 0 60 rrcurveto +0 60 42 49 68 11 rrcurveto +closepath +52 -608 rmoveto +0 268 rlineto +94 -31 24 -34 0 -64 rrcurveto +0 -75 -50 -56 -68 -8 rrcurveto +closepath +endchar } ND +/percent { +0 889 hsbw +-26 60 hstem +292 60 hstem +667 61 hstem +58 77 vstem +211 73 vstem +288 76 vstem +521 77 vstem +603 71 vstem +751 77 vstem +58 544 rmoveto +0 -131 65 -63 86 0 rrcurveto +88 0 67 67 0 122 rrcurveto +0 124 -66 65 -90 0 rrcurveto +-98 0 -52 -82 0 -102 rrcurveto +closepath +153 123 rmoveto +44 0 33 -33 0 -92 rrcurveto +0 -100 -33 -32 -44 0 rrcurveto +-43 0 -33 33 0 92 rrcurveto +0 101 32 31 44 0 rrcurveto +closepath +0 -693 rmoveto +73 0 rlineto +390 754 rlineto +-71 0 rlineto +-392 -754 rlineto +closepath +310 194 rmoveto +0 -130 64 -64 87 0 rrcurveto +88 0 68 67 0 122 rrcurveto +0 124 -67 65 -89 0 rrcurveto +-99 0 -52 -82 0 -102 rrcurveto +closepath +153 124 rmoveto +44 0 33 -34 0 -92 rrcurveto +0 -100 -32 -32 -45 0 rrcurveto +-43 0 -33 34 0 91 rrcurveto +0 101 32 32 44 0 rrcurveto +closepath +endchar } ND +/ampersand { +0 667 hsbw +-12 77 hstem +656 72 hstem +133 90 vstem +387 90 vstem +475 84 rmoveto +38 -44 36 -34 36 -23 rrcurveto +59 70 rlineto +-42 30 -37 36 -33 44 rrcurveto +26 40 22 52 16 62 rrcurveto +-92 20 rlineto +-8 -38 -12 -34 -14 -28 rrcurveto +-128 164 rlineto +90 48 45 58 0 68 rrcurveto +0 84 -69 69 -97 0 rrcurveto +-103 0 -75 -74 0 -86 rrcurveto +0 -43 16 -40 64 -74 rrcurveto +-114 -54 -56 -71 0 -89 rrcurveto +0 -116 98 -93 129 0 rrcurveto +78 0 69 32 58 64 rrcurveto +closepath +-179 374 rmoveto +-39 45 rlineto +-23 26 -11 25 0 23 rrcurveto +0 44 36 35 47 0 rrcurveto +46 0 35 -35 0 -48 rrcurveto +0 -42 -14 -29 -77 -44 rrcurveto +closepath +124 -304 rmoveto +-34 -52 -63 -37 -52 0 rrcurveto +-86 0 -47 79 0 59 rrcurveto +0 46 26 47 95 58 rrcurveto +161 -200 rlineto +closepath +endchar } ND +/quotesingle { +0 191 hsbw +462 254 hstem +44 100 vstem +66 462 rmoveto +55 0 rlineto +23 134 rlineto +0 120 rlineto +-100 0 rlineto +0 -120 rlineto +22 -134 rlineto +closepath +endchar } ND +/parenleft { +0 333 hsbw +-210 20 hstem +708 20 hstem +61 90 vstem +234 63 vstem +234 -210 rmoveto +63 0 rlineto +-98 156 -48 156 0 157 rrcurveto +0 164 26 100 120 205 rrcurveto +-63 0 rlineto +-112 -148 -61 -148 0 -173 rrcurveto +0 -176 75 -171 98 -122 rrcurveto +closepath +endchar } ND +/parenright { +0 333 hsbw +-210 20 hstem +708 20 hstem +61 63 vstem +207 90 vstem +124 -210 rmoveto +96 122 77 171 0 176 rrcurveto +0 171 -65 151 -108 147 rrcurveto +-63 0 rlineto +116 -208 30 -96 0 -165 rrcurveto +0 -157 -49 -156 -97 -156 rrcurveto +63 0 rlineto +closepath +endchar } ND +/asterisk { +0 389 hsbw +607 121 hstem +157 71 vstem +31 584 rmoveto +38 -10 40 -9 42 -8 rrcurveto +-17 -15 -27 -31 -37 -46 rrcurveto +57 -42 rlineto +18 24 22 35 24 46 rrcurveto +25 -44 22 -35 20 -26 rrcurveto +58 42 rlineto +-36 44 -28 30 -20 18 rrcurveto +40 4 40 9 42 14 rrcurveto +-22 70 rlineto +-44 -15 -38 -16 -34 -16 rrcurveto +6 48 4 41 2 32 rrcurveto +-71 0 rlineto +0 -22 3 -41 7 -59 rrcurveto +-24 13 -38 16 -51 19 rrcurveto +-23 -70 rlineto +closepath +endchar } ND +/plus { +0 584 hsbw +312 82 hstem +250 83 vstem +250 116 rmoveto +83 0 rlineto +0 196 rlineto +195 0 rlineto +0 82 rlineto +-195 0 rlineto +0 195 rlineto +-83 0 rlineto +0 -195 rlineto +-194 0 rlineto +0 -82 rlineto +194 0 rlineto +0 -196 rlineto +closepath +endchar } ND +/comma { +0 278 hsbw +0 100 hstem +139 50 vstem +89 0 rmoveto +50 0 rlineto +-3 -58 -16 -30 -37 -16 rrcurveto +24 -38 rlineto +57 26 25 43 0 73 rrcurveto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/hyphen { +0 333 hsbw +215 88 hstem +32 270 vstem +32 215 rmoveto +270 0 rlineto +0 88 rlineto +-270 0 rlineto +0 -88 rlineto +closepath +endchar } ND +/period { +0 278 hsbw +0 100 hstem +91 100 vstem +91 0 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/slash { +0 278 hsbw +-12 20 hstem +708 20 hstem +0 71 vstem +208 70 vstem +0 -12 rmoveto +71 0 rlineto +207 740 rlineto +-70 0 rlineto +-208 -740 rlineto +closepath +endchar } ND +/zero { +0 556 hsbw +-12 72 hstem +646 73 hstem +42 90 vstem +418 90 vstem +42 353 rmoveto +0 -217 49 -148 184 0 rrcurveto +182 0 51 167 0 198 rrcurveto +0 200 -56 166 -177 0 rrcurveto +-183 0 -50 -166 0 -200 rrcurveto +closepath +90 0 rmoveto +0 170 13 123 129 0 rrcurveto +81 0 63 -57 0 -236 rrcurveto +0 -235 -63 -58 -80 0 rrcurveto +-82 0 -61 58 0 235 rrcurveto +closepath +endchar } ND +/one { +0 556 hsbw +0 20 hstem +454 85 hstem +699 20 hstem +285 88 vstem +373 0 rmoveto +0 719 rlineto +-57 0 rlineto +-31 -63 -78 -71 -98 -46 rrcurveto +0 -85 rlineto +54 20 79 46 43 40 rrcurveto +0 -560 rlineto +88 0 rlineto +closepath +endchar } ND +/two { +0 556 hsbw +0 84 hstem +646 73 hstem +412 90 vstem +503 84 rmoveto +-351 0 rlineto +20 32 14 17 105 89 rrcurveto +127 108 84 66 0 124 rrcurveto +0 112 -86 87 -137 0 rrcurveto +-136 0 -84 -73 -12 -134 rrcurveto +90 -10 rlineto +1 90 55 54 84 0 rrcurveto +80 0 55 -55 0 -69 rrcurveto +0 -67 -43 -64 -156 -126 rrcurveto +-101 -82 -47 -59 -24 -63 rrcurveto +-8 -21 -4 -19 1 -21 rrcurveto +473 0 rlineto +0 84 rlineto +closepath +endchar } ND +/three { +0 556 hsbw +-13 73 hstem +349 66 hstem +646 73 hstem +385 91 vstem +42 189 rmoveto +12 -119 89 -83 127 0 rrcurveto +138 0 103 100 0 124 rrcurveto +0 93 -50 64 -84 20 rrcurveto +65 29 34 53 0 63 rrcurveto +0 102 -102 84 -108 0 rrcurveto +-114 0 -80 -68 -21 -118 rrcurveto +88 -15 rlineto +12 85 49 43 68 0 rrcurveto +69 0 48 -47 0 -64 rrcurveto +0 -82 -72 -38 -74 0 rrcurveto +-14 0 rlineto +-10 -76 rlineto +24 6 21 4 17 0 rrcurveto +81 0 59 -59 0 -81 rrcurveto +0 -84 -65 -65 -82 0 rrcurveto +-70 0 -50 41 -20 100 rrcurveto +-88 -12 rlineto +closepath +endchar } ND +/four { +0 556 hsbw +0 252 hstem +696 20 hstem +13 86 vstem +323 88 vstem +323 0 rmoveto +88 0 rlineto +0 171 rlineto +97 0 rlineto +0 81 rlineto +-97 0 rlineto +0 464 rlineto +-72 0 rlineto +-326 -464 rlineto +0 -81 rlineto +310 0 rlineto +0 -171 rlineto +closepath +0 252 rmoveto +-224 0 rlineto +224 323 rlineto +0 -323 rlineto +closepath +endchar } ND +/five { +0 556 hsbw +-12 72 hstem +397 78 hstem +622 84 hstem +423 93 vstem +42 188 rmoveto +10 -122 89 -78 130 0 rrcurveto +146 0 99 114 0 141 rrcurveto +0 136 -98 96 -125 0 rrcurveto +-47 0 -45 -15 -43 -30 rrcurveto +39 192 rlineto +285 0 rlineto +0 84 rlineto +-356 0 rlineto +-69 -368 rlineto +83 -10 rlineto +25 40 49 29 56 0 rrcurveto +90 0 63 -62 0 -100 rrcurveto +0 -106 -67 -69 -85 0 rrcurveto +-70 0 -54 45 -13 90 rrcurveto +-92 -7 rlineto +closepath +endchar } ND +/six { +0 556 hsbw +-12 72 hstem +387 77 hstem +646 73 hstem +38 87 vstem +420 90 vstem +498 541 rmoveto +-15 110 -76 68 -113 0 rrcurveto +-193 0 -63 -157 0 -227 rrcurveto +0 -248 101 -99 147 0 rrcurveto +132 0 92 116 0 128 rrcurveto +0 137 -94 95 -117 0 rrcurveto +-67 0 -65 -31 -42 -64 rrcurveto +0 184 38 93 126 0 rrcurveto +62 0 43 -38 16 -74 rrcurveto +88 7 rlineto +closepath +-359 -309 rmoveto +0 92 63 63 79 0 rrcurveto +80 0 59 -62 0 -98 rrcurveto +0 -103 -62 -64 -73 0 rrcurveto +-84 0 -62 89 0 83 rrcurveto +closepath +endchar } ND +/seven { +0 556 hsbw +0 20 hstem +622 85 hstem +47 464 vstem +47 622 rmoveto +351 0 rlineto +-136 -154 -112 -283 -3 -185 rrcurveto +91 0 rlineto +13 249 133 253 127 136 rrcurveto +0 69 rlineto +-464 0 rlineto +0 -85 rlineto +closepath +endchar } ND +/eight { +0 556 hsbw +-12 72 hstem +350 72 hstem +646 73 hstem +41 90 vstem +177 200 vstem +393 90 vstem +177 388 rmoveto +-88 -23 -48 -65 0 -93 rrcurveto +0 -126 93 -93 142 0 rrcurveto +141 0 95 94 0 123 rrcurveto +0 88 -47 67 -88 28 rrcurveto +72 26 34 51 0 67 rrcurveto +0 104 -83 83 -125 0 rrcurveto +-124 0 -82 -81 0 -104 rrcurveto +0 -70 34 -50 74 -26 rrcurveto +closepath +-18 149 rmoveto +0 60 50 49 67 0 rrcurveto +66 0 51 -49 0 -65 rrcurveto +0 -62 -48 -48 -68 0 rrcurveto +-70 0 -48 47 0 68 rrcurveto +closepath +-28 -330 rmoveto +0 81 60 62 83 0 rrcurveto +85 0 63 -62 0 -84 rrcurveto +0 -84 -61 -60 -84 0 rrcurveto +-80 0 -66 69 0 78 rrcurveto +closepath +endchar } ND +/nine { +0 556 hsbw +-12 72 hstem +243 77 hstem +646 73 hstem +42 90 vstem +425 87 vstem +55 166 rmoveto +13 -114 76 -64 112 0 rrcurveto +185 0 71 169 0 216 rrcurveto +0 203 -81 143 -164 0 rrcurveto +-130 0 -95 -97 0 -145 rrcurveto +0 -140 93 -94 118 0 rrcurveto +72 0 65 38 35 56 rrcurveto +0 -18 rlineto +0 -114 -45 -145 -122 0 rrcurveto +-64 0 -41 34 -14 79 rrcurveto +-84 -7 rlineto +closepath +360 315 rmoveto +0 -100 -59 -61 -81 0 rrcurveto +-82 0 -61 63 0 91 rrcurveto +0 101 67 71 78 0 rrcurveto +76 0 62 -64 0 -101 rrcurveto +closepath +endchar } ND +/colon { +0 278 hsbw +0 100 hstem +418 101 hstem +90 100 vstem +90 418 rmoveto +100 0 rlineto +0 101 rlineto +-100 0 rlineto +0 -101 rlineto +closepath +0 -418 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/semicolon { +0 278 hsbw +0 100 hstem +418 101 hstem +139 50 vstem +89 418 rmoveto +100 0 rlineto +0 101 rlineto +-100 0 rlineto +0 -101 rlineto +closepath +0 -418 rmoveto +50 0 rlineto +-3 -58 -16 -30 -37 -16 rrcurveto +24 -38 rlineto +57 26 25 43 0 73 rrcurveto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/less { +0 584 hsbw +109 89 313 79 508 87 hstem3 +55 98 vstem +55 313 rmoveto +474 -203 rlineto +0 88 rlineto +-376 156 rlineto +376 154 rlineto +0 87 rlineto +-474 -200 rlineto +0 -82 rlineto +closepath +endchar } ND +/equal { +0 584 hsbw +204 82 hstem +421 82 hstem +56 472 vstem +528 421 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +0 -217 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +endchar } ND +/greater { +0 584 hsbw +109 89 313 79 508 87 hstem3 +430 99 vstem +529 313 rmoveto +0 82 rlineto +-474 200 rlineto +0 -87 rlineto +375 -154 rlineto +-375 -156 rlineto +0 -88 rlineto +474 203 rlineto +closepath +endchar } ND +/question { +0 556 hsbw +0 100 hstem +656 72 hstem +230 85 vstem +416 90 vstem +230 176 rmoveto +85 0 rlineto +0 92 10 17 73 65 rrcurveto +85 76 23 44 0 63 rrcurveto +0 108 -90 87 -140 0 rrcurveto +-132 0 -84 -73 -16 -134 rrcurveto +90 -10 rlineto +16 98 52 47 75 0 rrcurveto +77 0 62 -61 0 -68 rrcurveto +0 -50 -26 -23 -48 -44 rrcurveto +-83 -76 -29 -39 0 -92 rrcurveto +0 -27 rlineto +closepath +-5 -176 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/at { +0 1015 hsbw +-210 72 hstem +-2 82 hstem +457 72 hstem +658 71 hstem +54 72 vstem +240 91 vstem +658 87 vstem +883 72 vstem +567 80 rmoveto +6 -66 23 -16 65 0 rrcurveto +155 0 139 181 0 169 rrcurveto +0 216 -186 165 -231 0 rrcurveto +-297 0 -187 -237 0 -263 rrcurveto +0 -263 229 -176 265 0 rrcurveto +193 0 175 93 63 126 rrcurveto +-88 0 rlineto +-58 -81 -116 -66 -170 0 rrcurveto +-228 0 -193 139 0 236 rrcurveto +0 223 179 198 229 0 rrcurveto +181 0 168 -132 0 -176 rrcurveto +0 -119 -109 -151 -80 0 rrcurveto +-19 0 -15 14 0 18 rrcurveto +0 4 5 26 10 46 rrcurveto +70 327 rlineto +-87 0 rlineto +-17 -76 rlineto +-38 61 -53 29 -56 0 rrcurveto +-136 0 -118 -172 0 -139 rrcurveto +0 -110 76 -109 101 0 rrcurveto +53 0 54 31 43 50 rrcurveto +closepath +-236 132 rmoveto +0 96 59 149 110 0 rrcurveto +62 0 51 -52 0 -88 rrcurveto +0 -110 -78 -136 -100 0 rrcurveto +-55 0 -49 51 0 90 rrcurveto +closepath +endchar } ND +/A { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +-1 100 vstem +273 102 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +endchar } ND +/B { +0 667 hsbw +0 84 hstem +331 84 hstem +631 85 hstem +73 95 vstem +486 93 vstem +73 0 rmoveto +273 0 rlineto +151 0 117 74 0 134 rrcurveto +0 82 -49 65 -86 26 rrcurveto +66 33 34 57 0 62 rrcurveto +0 108 -101 75 -136 0 rrcurveto +-269 0 rlineto +0 -716 rlineto +closepath +95 415 rmoveto +0 216 rlineto +143 0 rlineto +110 0 65 -23 0 -87 rrcurveto +0 -84 -60 -22 -103 0 rrcurveto +-155 0 rlineto +closepath +0 -331 rmoveto +0 247 rlineto +165 0 rlineto +108 0 75 -34 0 -89 rrcurveto +0 -91 -59 -33 -111 0 rrcurveto +-178 0 rlineto +closepath +endchar } ND +/C { +0 722 hsbw +-12 81 hstem +647 81 hstem +50 97 vstem +588 251 rmoveto +-27 -120 -77 -62 -106 0 rrcurveto +-147 0 -84 135 0 160 rrcurveto +0 141 80 142 159 0 rrcurveto +96 0 61 -45 34 -104 rrcurveto +93 22 rlineto +-38 132 -102 76 -142 0 rrcurveto +-198 0 -140 -159 0 -206 rrcurveto +0 -197 113 -178 223 0 rrcurveto +149 0 108 83 40 156 rrcurveto +-95 24 rlineto +closepath +endchar } ND +/D { +0 722 hsbw +0 84 hstem +631 85 hstem +77 95 vstem +571 98 vstem +77 0 rmoveto +258 0 rlineto +208 0 126 152 0 210 rrcurveto +0 224 -100 130 -245 0 rrcurveto +-247 0 rlineto +0 -716 rlineto +closepath +95 84 rmoveto +0 547 rlineto +150 0 rlineto +191 0 58 -56 0 -212 rrcurveto +0 -191 -29 -88 -217 0 rrcurveto +-153 0 rlineto +closepath +endchar } ND +/E { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +79 95 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/F { +0 611 hsbw +0 410 hstem +631 85 hstem +82 95 vstem +82 0 rmoveto +95 0 rlineto +0 325 rlineto +336 0 rlineto +0 85 rlineto +-336 0 rlineto +0 221 rlineto +388 0 rlineto +0 85 rlineto +-483 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/G { +0 778 hsbw +-12 85 hstem +281 84 hstem +647 81 hstem +53 98 vstem +623 92 vstem +412 281 rmoveto +211 0 rlineto +0 -134 rlineto +-42 -35 -86 -39 -81 0 rrcurveto +-153 0 -110 117 0 170 rrcurveto +0 154 94 133 167 0 rrcurveto +100 0 75 -49 32 -106 rrcurveto +86 24 rlineto +-39 145 -113 67 -141 0 rrcurveto +-215 0 -144 -171 0 -203 rrcurveto +0 -207 159 -159 207 0 rrcurveto +104 0 100 37 92 75 rrcurveto +0 265 rlineto +-303 0 rlineto +0 -84 rlineto +closepath +endchar } ND +/H { +0 722 hsbw +0 422 hstem +696 20 hstem +80 95 vstem +547 95 vstem +80 0 rmoveto +95 0 rlineto +0 337 rlineto +372 0 rlineto +0 -337 rlineto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -294 rlineto +-372 0 rlineto +0 294 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/I { +0 278 hsbw +0 20 hstem +696 20 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/J { +0 500 hsbw +-12 84 hstem +696 20 hstem +328 94 vstem +29 203 rmoveto +-3 -143 69 -72 126 0 rrcurveto +130 0 71 88 0 152 rrcurveto +0 488 rlineto +-94 0 rlineto +0 -493 rlineto +0 -99 -30 -52 -77 0 rrcurveto +-66 0 -36 33 -5 110 rrcurveto +-85 -12 rlineto +closepath +endchar } ND +/K { +0 667 hsbw +0 361 hstem +696 20 hstem +73 95 vstem +540 125 vstem +73 0 rmoveto +95 0 rlineto +0 248 rlineto +117 114 rlineto +255 -362 rlineto +125 0 rlineto +-313 426 rlineto +300 290 rlineto +-129 0 rlineto +-355 -355 rlineto +0 355 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/L { +0 556 hsbw +0 84 hstem +696 20 hstem +73 95 vstem +73 0 rmoveto +448 0 rlineto +0 84 rlineto +-353 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/M { +0 833 hsbw +0 103 hstem +609 107 hstem +74 93 374 84 666 91 vstem3 +74 0 rmoveto +92 0 rlineto +0 609 rlineto +207 -609 rlineto +85 0 rlineto +208 599 rlineto +0 -599 rlineto +91 0 rlineto +0 716 rlineto +-127 0 rlineto +-172 -498 rlineto +-7 -26 -8 -23 -7 -18 rrcurveto +-7 -19 -5 -16 -4 -13 rrcurveto +-7 23 -11 35 -16 48 rrcurveto +-169 507 rlineto +-143 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/N { +0 722 hsbw +0 154 hstem +563 153 hstem +76 91 vstem +549 91 vstem +76 0 rmoveto +91 0 rlineto +0 563 rlineto +376 -563 rlineto +97 0 rlineto +0 716 rlineto +-91 0 rlineto +0 -562 rlineto +-376 562 rlineto +-97 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/O { +0 778 hsbw +-12 81 hstem +647 82 hstem +48 98 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +endchar } ND +/P { +0 667 hsbw +0 375 hstem +631 85 hstem +77 95 vstem +526 98 vstem +77 0 rmoveto +95 0 rlineto +0 291 rlineto +183 0 rlineto +202 0 67 95 0 123 rrcurveto +0 137 -107 70 -170 0 rrcurveto +-270 0 rlineto +0 -716 rlineto +closepath +95 375 rmoveto +0 256 rlineto +183 0 rlineto +115 0 56 -31 0 -94 rrcurveto +0 -83 -47 -48 -122 0 rrcurveto +-185 0 rlineto +closepath +endchar } ND +/Q { +0 778 hsbw +-12 81 hstem +647 82 hstem +43 98 vstem +630 98 vstem +620 77 rmoveto +72 69 36 94 0 118 rrcurveto +0 203 -142 168 -200 0 rrcurveto +-202 0 -141 -172 0 -199 rrcurveto +0 -205 144 -165 197 0 rrcurveto +64 0 58 14 54 30 rrcurveto +50 -40 51 -29 52 -19 rrcurveto +28 66 rlineto +-37 14 -40 22 -44 31 rrcurveto +closepath +-209 121 rmoveto +-23 -69 rlineto +33 -8 31 -14 30 -19 rrcurveto +-30 -13 -32 -6 -34 0 rrcurveto +-143 0 -102 102 0 187 rrcurveto +0 192 103 97 142 0 rrcurveto +147 0 97 -131 0 -158 rrcurveto +0 -102 -28 -76 -56 -51 rrcurveto +-36 30 -45 23 -54 16 rrcurveto +closepath +endchar } ND +/R { +0 722 hsbw +0 400 hstem +637 79 hstem +79 94 vstem +553 98 vstem +79 0 rmoveto +94 0 rlineto +0 318 rlineto +110 0 rlineto +129 0 18 -68 66 -101 rrcurveto +94 -149 rlineto +119 0 rlineto +-124 195 rlineto +-39 58 -26 40 -71 33 rrcurveto +137 18 65 74 0 103 rrcurveto +0 126 -96 69 -159 0 rrcurveto +-317 0 rlineto +0 -716 rlineto +closepath +94 400 rmoveto +0 237 rlineto +227 0 rlineto +105 0 48 -50 0 -66 rrcurveto +0 -85 -74 -36 -102 0 rrcurveto +-204 0 rlineto +closepath +endchar } ND +/S { +0 667 hsbw +-12 85 hstem +645 83 hstem +72 92 vstem +523 92 vstem +45 230 rmoveto +2 -154 133 -88 170 0 rrcurveto +136 0 129 89 0 125 rrcurveto +0 132 -125 51 -155 38 rrcurveto +-94 23 -77 10 0 81 rrcurveto +0 60 49 48 115 0 rrcurveto +110 0 54 -48 10 -90 rrcurveto +91 7 rlineto +-6 134 -121 80 -142 0 rrcurveto +-128 0 -124 -77 0 -120 rrcurveto +0 -116 111 -51 128 -34 rrcurveto +113 -28 99 -21 0 -87 rrcurveto +0 -81 -88 -40 -89 0 rrcurveto +-109 0 -90 52 -13 113 rrcurveto +-89 -8 rlineto +closepath +endchar } ND +/T { +0 611 hsbw +0 20 hstem +631 85 hstem +259 95 vstem +259 0 rmoveto +95 0 rlineto +0 631 rlineto +237 0 rlineto +0 85 rlineto +-568 0 rlineto +0 -85 rlineto +236 0 rlineto +0 -631 rlineto +closepath +endchar } ND +/U { +0 722 hsbw +-12 85 hstem +696 20 hstem +79 94 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +endchar } ND +/V { +0 667 hsbw +0 79 hstem +696 20 hstem +4 110 291 88 563 96 vstem3 +282 0 rmoveto +97 0 rlineto +280 716 rlineto +-96 0 rlineto +-194 -520 rlineto +-15 -40 -13 -39 -10 -38 rrcurveto +-11 36 -13 39 -14 42 rrcurveto +-186 520 rlineto +-103 0 rlineto +278 -716 rlineto +closepath +endchar } ND +/W { +0 944 hsbw +0 100 hstem +629 87 hstem +12 97 vstem +196 103 417 104 645 91 vstem3 +837 96 vstem +202 0 rmoveto +97 0 rlineto +152 545 rlineto +6 23 7 28 8 33 rrcurveto +2 -10 7 -28 13 -46 rrcurveto +151 -545 rlineto +91 0 rlineto +197 716 rlineto +-96 0 rlineto +-112 -460 rlineto +-15 -59 -12 -52 -9 -45 rrcurveto +-12 79 -18 85 -25 90 rrcurveto +-103 362 rlineto +-114 0 rlineto +-136 -484 rlineto +-2 -6 -4 -13 -5 -23 rrcurveto +-5 -22 -7 -30 -9 -38 rrcurveto +-9 48 -10 49 -12 50 rrcurveto +-109 469 rlineto +-97 0 rlineto +190 -716 rlineto +closepath +endchar } ND +/X { +0 667 hsbw +0 20 hstem +696 20 hstem +37 113 vstem +538 103 vstem +4 0 rmoveto +114 0 rlineto +180 250 rlineto +6 9 12 18 16 26 rrcurveto +10 -18 11 -16 10 -14 rrcurveto +180 -255 rlineto +118 0 rlineto +-271 378 rlineto +251 338 rlineto +-103 0 rlineto +-144 -190 rlineto +-22 -29 -19 -27 -16 -26 rrcurveto +-12 20 -19 30 -26 38 rrcurveto +-130 184 rlineto +-113 0 rlineto +244 -343 rlineto +-277 -373 rlineto +closepath +endchar } ND +/Y { +0 667 hsbw +0 379 hstem +696 20 hstem +3 120 293 81 549 110 vstem3 +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +endchar } ND +/Z { +0 611 hsbw +0 84 hstem +631 85 hstem +20 109 vstem +461 113 vstem +20 0 rmoveto +566 0 rlineto +0 84 rlineto +-457 0 rlineto +43 51 rlineto +402 496 rlineto +0 85 rlineto +-512 0 rlineto +0 -85 rlineto +399 0 rlineto +-24 -24 -24 -29 -26 -32 rrcurveto +-367 -458 rlineto +0 -88 rlineto +closepath +endchar } ND +/bracketleft { +0 278 hsbw +-199 73 hstem +643 73 hstem +68 88 vstem +68 -199 rmoveto +194 0 rlineto +0 73 rlineto +-106 0 rlineto +0 769 rlineto +106 0 rlineto +0 73 rlineto +-194 0 rlineto +0 -915 rlineto +closepath +endchar } ND +/backslash { +0 278 hsbw +-12 20 hstem +708 20 hstem +0 71 vstem +208 70 vstem +208 -12 rmoveto +70 0 rlineto +-207 740 rlineto +-71 0 rlineto +208 -740 rlineto +closepath +endchar } ND +/bracketright { +0 278 hsbw +-199 73 hstem +643 73 hstem +125 88 vstem +213 -199 rmoveto +0 915 rlineto +-194 0 rlineto +0 -73 rlineto +106 0 rlineto +0 -769 rlineto +-106 0 rlineto +0 -73 rlineto +194 0 rlineto +closepath +endchar } ND +/asciicircum { +0 469 hsbw +628 100 hstem +26 93 201 69 354 89 vstem3 +117 337 rmoveto +117 291 rlineto +120 -291 rlineto +89 0 rlineto +-173 391 rlineto +-71 0 rlineto +-173 -391 rlineto +91 0 rlineto +closepath +endchar } ND +/underscore { +0 556 hsbw +-199 64 hstem +-15 582 vstem +-15 -199 rmoveto +582 0 rlineto +0 64 rlineto +-582 0 rlineto +0 -64 rlineto +closepath +endchar } ND +/grave { +0 333 hsbw +583 137 hstem +156 71 vstem +227 583 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/a { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +36 94 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +endchar } ND +/b { +0 556 hsbw +-12 73 hstem +458 72 hstem +696 20 hstem +65 81 vstem +425 90 vstem +147 0 rmoveto +0 65 rlineto +34 -52 48 -25 62 0 rrcurveto +122 0 102 101 0 178 rrcurveto +0 133 -88 130 -132 0 rrcurveto +-58 0 -47 -24 -37 -46 rrcurveto +0 256 rlineto +-88 0 rlineto +0 -716 rlineto +82 0 rlineto +closepath +-1 263 rmoveto +0 126 64 69 78 0 rrcurveto +76 0 61 -64 0 -134 rrcurveto +0 -132 -65 -67 -76 0 rrcurveto +-96 0 -42 79 0 123 rrcurveto +closepath +endchar } ND +/c { +0 500 hsbw +-12 73 hstem +458 72 hstem +39 90 vstem +404 190 rmoveto +-12 -88 -49 -41 -69 0 rrcurveto +-87 0 -58 59 0 140 rrcurveto +0 137 60 61 90 0 rrcurveto +58 0 44 -36 16 -69 rrcurveto +85 13 rlineto +-20 105 -74 59 -113 0 rrcurveto +-142 0 -94 -121 0 -152 rrcurveto +0 -174 93 -95 143 0 rrcurveto +113 0 84 71 19 120 rrcurveto +-87 11 rlineto +closepath +endchar } ND +/d { +0 556 hsbw +-12 73 hstem +458 72 hstem +696 20 hstem +34 91 vstem +404 80 vstem +402 0 rmoveto +82 0 rlineto +0 716 rlineto +-88 0 rlineto +0 -257 rlineto +-30 42 -51 29 -62 0 rrcurveto +-137 0 -82 -132 0 -139 rrcurveto +0 -146 87 -125 136 0 rrcurveto +64 0 48 25 33 52 rrcurveto +0 -65 rlineto +closepath +-277 259 rmoveto +0 137 58 62 79 0 rrcurveto +80 0 62 -65 0 -142 rrcurveto +0 -128 -62 -62 -76 0 rrcurveto +-78 0 -63 64 0 134 rrcurveto +closepath +endchar } ND +/e { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +37 90 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +endchar } ND +/f { +0 278 hsbw +0 20 hstem +450 69 hstem +646 82 hstem +87 87 vstem +87 0 rmoveto +87 0 rlineto +0 450 rlineto +101 0 rlineto +0 69 rlineto +-101 0 rlineto +0 47 rlineto +0 62 20 18 54 0 rrcurveto +25 0 rlineto +7 -1 10 -1 9 -1 rrcurveto +14 76 rlineto +-30 6 -28 3 -25 0 rrcurveto +-112 0 -31 -48 0 -106 rrcurveto +0 -55 rlineto +-78 0 rlineto +0 -69 rlineto +78 0 rlineto +0 -450 rlineto +closepath +endchar } ND +/g { +0 556 hsbw +-210 72 hstem +0 73 hstem +458 72 hstem +32 91 vstem +408 81 vstem +50 -43 rmoveto +-3 -112 84 -55 124 0 rrcurveto +161 0 73 86 0 194 rrcurveto +0 449 rlineto +-81 0 rlineto +0 -63 rlineto +-40 49 -50 25 -61 0 rrcurveto +-143 0 -82 -131 0 -137 rrcurveto +0 -144 81 -118 143 0 rrcurveto +57 0 48 22 39 46 rrcurveto +0 -152 -15 -54 -131 0 rrcurveto +-65 0 -44 20 -10 62 rrcurveto +-85 13 rlineto +closepath +73 312 rmoveto +0 124 62 65 78 0 rrcurveto +80 0 64 -66 0 -126 rrcurveto +0 -134 -62 -59 -80 0 rrcurveto +-82 0 -60 60 0 136 rrcurveto +closepath +endchar } ND +/h { +0 556 hsbw +0 459 hstem +510 20 hstem +696 20 hstem +66 88 vstem +400 88 vstem +66 0 rmoveto +88 0 rlineto +0 284 rlineto +0 102 55 69 82 0 rrcurveto +69 0 40 -38 0 -88 rrcurveto +0 -329 rlineto +88 0 rlineto +0 329 rlineto +0 130 -65 71 -114 0 rrcurveto +-63 0 -52 -24 -40 -47 rrcurveto +0 257 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/i { +0 222 hsbw +0 20 hstem +499 20 hstem +615 101 hstem +66 88 vstem +66 615 rmoveto +88 0 rlineto +0 101 rlineto +-88 0 rlineto +0 -101 rlineto +closepath +0 -615 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/j { +0 222 hsbw +-210 79 hstem +499 20 hstem +614 102 hstem +65 88 vstem +65 614 rmoveto +88 0 rlineto +0 102 rlineto +-88 0 rlineto +0 -102 rlineto +closepath +-111 -815 rmoveto +22 -6 23 -3 24 0 rrcurveto +104 0 26 63 0 119 rrcurveto +0 547 rlineto +-88 0 rlineto +0 -545 rlineto +0 -96 -17 -9 -36 0 rrcurveto +-17 0 rlineto +-6 2 -8 2 -10 1 rrcurveto +-17 -75 rlineto +closepath +endchar } ND +/k { +0 500 hsbw +0 308 hstem +499 20 hstem +696 20 hstem +66 88 vstem +388 108 vstem +66 0 rmoveto +88 0 rlineto +0 206 rlineto +62 59 rlineto +172 -265 rlineto +108 0 rlineto +-218 326 rlineto +198 193 rlineto +-114 0 rlineto +-208 -211 rlineto +0 408 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/l { +0 222 hsbw +0 20 hstem +696 20 hstem +64 88 vstem +64 0 rmoveto +88 0 rlineto +0 716 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/m { +0 833 hsbw +0 439 hstem +454 76 hstem +66 79 vstem +374 88 vstem +681 88 vstem +66 0 rmoveto +88 0 rlineto +0 269 rlineto +0 109 41 76 87 0 rrcurveto +65 0 27 -39 0 -78 rrcurveto +0 -337 rlineto +88 0 rlineto +0 301 rlineto +0 106 53 47 74 0 rrcurveto +65 0 27 -46 0 -81 rrcurveto +0 -327 rlineto +88 0 rlineto +0 356 rlineto +0 118 -57 56 -104 0 rrcurveto +-66 0 -53 -31 -41 -60 rrcurveto +-20 57 -50 34 -76 0 rrcurveto +-70 0 -55 -34 -32 -50 rrcurveto +0 73 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/n { +0 556 hsbw +0 445 hstem +454 76 hstem +66 79 vstem +399 88 vstem +66 0 rmoveto +88 0 rlineto +0 283 rlineto +0 133 62 38 76 0 rrcurveto +72 0 35 -49 0 -90 rrcurveto +0 -315 rlineto +88 0 rlineto +0 319 rlineto +0 149 -65 62 -112 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/o { +0 556 hsbw +-12 73 hstem +458 72 hstem +33 91 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +endchar } ND +/p { +0 556 hsbw +-199 20 hstem +-12 73 hstem +461 69 hstem +66 80 vstem +426 90 vstem +66 -199 rmoveto +88 0 rlineto +0 253 rlineto +29 -39 48 -27 59 0 rrcurveto +131 0 95 133 0 142 rrcurveto +0 136 -82 131 -138 0 rrcurveto +-67 0 -46 -26 -37 -53 rrcurveto +0 68 rlineto +-80 0 rlineto +0 -718 rlineto +closepath +80 455 rmoveto +0 133 67 72 75 0 rrcurveto +76 0 62 -65 0 -132 rrcurveto +0 -139 -64 -64 -78 0 rrcurveto +-76 0 -62 61 0 134 rrcurveto +closepath +endchar } ND +/q { +0 556 hsbw +-199 20 hstem +-12 73 hstem +461 69 hstem +35 90 vstem +405 79 vstem +396 -199 rmoveto +88 0 rlineto +0 718 rlineto +-79 0 rlineto +0 -70 rlineto +-37 54 -50 27 -64 0 rrcurveto +-136 0 -83 -126 0 -140 rrcurveto +0 -171 102 -105 124 0 rrcurveto +54 0 54 28 27 39 rrcurveto +0 -254 rlineto +closepath +-271 460 rmoveto +0 137 61 63 76 0 rrcurveto +77 0 66 -71 0 -137 rrcurveto +0 -130 -63 -62 -74 0 rrcurveto +-79 0 -64 66 0 134 rrcurveto +closepath +endchar } ND +/r { +0 333 hsbw +0 440 hstem +510 20 hstem +65 79 vstem +65 0 rmoveto +88 0 rlineto +0 271 rlineto +0 77 26 91 73 0 rrcurveto +21 0 21 -7 22 -12 rrcurveto +31 82 rlineto +-31 18 -30 10 -30 0 rrcurveto +-40 0 -32 -17 -40 -73 rrcurveto +0 79 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/s { +0 500 hsbw +-12 73 hstem +458 72 hstem +45 85 vstem +371 90 vstem +31 155 rmoveto +18 -111 68 -56 135 0 rrcurveto +105 0 104 64 0 100 rrcurveto +0 109 -79 18 -130 35 rrcurveto +-20 7 -18 5 -14 3 rrcurveto +-47 10 -23 17 0 35 rrcurveto +0 36 31 31 82 0 rrcurveto +68 0 37 -32 8 -53 rrcurveto +86 12 rlineto +-20 106 -83 39 -103 0 rrcurveto +-106 0 -85 -55 0 -94 rrcurveto +0 -103 79 -25 131 -33 rrcurveto +75 -19 41 -4 0 -54 rrcurveto +0 -44 -38 -38 -81 0 rrcurveto +-80 0 -45 37 -9 70 rrcurveto +-87 -13 rlineto +closepath +endchar } ND +/t { +0 278 hsbw +-7 82 hstem +450 69 hstem +82 87 vstem +258 79 rmoveto +-16 -3 -13 -1 -10 0 rrcurveto +-44 0 -6 19 0 53 rrcurveto +0 303 rlineto +89 0 rlineto +0 69 rlineto +-89 0 rlineto +0 181 rlineto +-87 -53 rlineto +0 -128 rlineto +-64 0 rlineto +0 -69 rlineto +64 0 rlineto +0 -298 rlineto +0 -119 24 -40 98 0 rrcurveto +19 0 22 3 26 5 rrcurveto +-13 78 rlineto +closepath +endchar } ND +/u { +0 556 hsbw +-12 76 hstem +499 20 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +endchar } ND +/v { +0 500 hsbw +0 104 hstem +499 20 hstem +11 94 210 81 398 90 vstem3 +210 0 rmoveto +82 0 rlineto +196 519 rlineto +-90 0 rlineto +-115 -317 rlineto +-14 -38 -11 -33 -8 -27 rrcurveto +-10 36 -11 34 -12 34 rrcurveto +-112 311 rlineto +-92 0 rlineto +197 -519 rlineto +closepath +endchar } ND +/w { +0 722 hsbw +0 108 hstem +399 120 hstem +3 91 162 86 316 91 vstem3 +461 91 vstem +629 85 vstem +162 0 rmoveto +91 0 rlineto +105 399 rlineto +20 -88 rlineto +83 -311 rlineto +91 0 rlineto +162 519 rlineto +-85 0 rlineto +-89 -300 rlineto +-30 -100 rlineto +-26 99 rlineto +-77 301 rlineto +-91 0 rlineto +-82 -304 rlineto +-17 -66 -9 -36 -1 -5 rrcurveto +-31 111 rlineto +-82 300 rlineto +-91 0 rlineto +159 -519 rlineto +closepath +endchar } ND +/x { +0 500 hsbw +0 20 hstem +499 20 hstem +7 107 vstem +374 105 vstem +7 0 rmoveto +107 0 rlineto +136 205 rlineto +28 -44 rlineto +107 -161 rlineto +108 0 rlineto +-193 274 rlineto +179 245 rlineto +-105 0 rlineto +-87 -123 rlineto +-5 -9 -6 -8 -8 -10 rrcurveto +-7 -8 -7 -11 -7 -11 rrcurveto +-10 15 -12 19 -14 24 rrcurveto +-80 122 rlineto +-110 0 rlineto +176 -249 rlineto +-190 -270 rlineto +closepath +endchar } ND +/y { +0 500 hsbw +-210 85 hstem +499 20 hstem +16 95 vstem +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +endchar } ND +/z { +0 500 hsbw +0 76 hstem +450 69 hstem +128 351 vstem +20 0 rmoveto +459 0 rlineto +0 76 rlineto +-240 0 rlineto +-35 0 -37 -2 -39 -3 rrcurveto +54 60 rlineto +281 329 rlineto +0 59 rlineto +-424 0 rlineto +0 -72 rlineto +211 0 rlineto +28 0 34 1 38 2 rrcurveto +-330 -379 rlineto +0 -71 rlineto +closepath +endchar } ND +/braceleft { +0 334 hsbw +-210 76 219 80 652 76 hstem3 +28 81 vstem +128 83 vstem +28 299 rmoveto +0 -80 rlineto +90 -4 10 -72 0 -119 rrcurveto +0 -152 4 -82 151 0 rrcurveto +28 0 rlineto +0 76 rlineto +-16 0 rlineto +-122 0 38 46 0 127 rrcurveto +0 140 -30 49 -72 31 rrcurveto +117 55 -15 60 0 177 rrcurveto +0 85 17 15 67 0 rrcurveto +16 0 rlineto +0 77 rlineto +-28 0 rlineto +-157 0 2 -72 0 -169 rrcurveto +0 -114 -11 -74 -89 0 rrcurveto +closepath +endchar } ND +/bar { +0 260 hsbw +-210 20 hstem +708 20 hstem +92 76 vstem +92 -210 rmoveto +76 0 rlineto +0 938 rlineto +-76 0 rlineto +0 -938 rlineto +closepath +endchar } ND +/braceright { +0 334 hsbw +-210 76 219 80 652 76 hstem3 +122 82 vstem +224 82 vstem +306 299 rmoveto +-98 0 -4 75 0 120 rrcurveto +0 151 -4 83 -150 0 rrcurveto +-27 0 rlineto +0 -77 rlineto +15 0 rlineto +121 0 -37 -46 0 -126 rrcurveto +0 -140 27 -44 75 -36 rrcurveto +-109 -45 7 -73 0 -174 rrcurveto +0 -85 -16 -16 -68 0 rrcurveto +-15 0 rlineto +0 -76 rlineto +27 0 rlineto +152 0 2 75 0 165 rrcurveto +0 113 8 73 94 3 rrcurveto +0 80 rlineto +closepath +endchar } ND +/asciitilde { +0 584 hsbw +273 92 hstem +42 500 vstem +42 272 rmoveto +54 53 32 13 42 0 rrcurveto +25 0 32 -9 39 -17 rrcurveto +62 -27 29 -12 50 0 rrcurveto +53 0 40 16 42 40 rrcurveto +0 103 rlineto +-35 -39 -49 -28 -42 0 rrcurveto +-23 0 -17 4 -44 19 rrcurveto +-80 34 -34 9 -40 0 rrcurveto +-56 0 -46 -20 -34 -39 rrcurveto +0 -100 rlineto +closepath +endchar } ND +/Adieresis { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +760 100 hstem +-9 108 185 88 367 92 vstem3 +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-20 466 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Aring { +0 667 hsbw +0 20 hstem +217 77 hstem +690 37 hstem +833 36 hstem +-1 100 vstem +235 37 vstem +375 36 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +30 488 rmoveto +0 -52 40 -40 48 0 rrcurveto +48 0 40 39 0 51 rrcurveto +0 49 -40 40 -48 0 rrcurveto +-48 0 -40 -41 0 -46 rrcurveto +closepath +37 -1 rmoveto +0 29 24 23 28 0 rrcurveto +28 0 23 -24 0 -29 rrcurveto +0 -30 -23 -23 -28 0 rrcurveto +-28 0 -24 23 0 31 rrcurveto +closepath +endchar } ND +/Ccedilla { +0 722 hsbw +-206 61 hstem +-12 23 hstem +647 81 hstem +50 97 vstem +379 82 vstem +588 251 rmoveto +-27 -120 -77 -62 -106 0 rrcurveto +-147 0 -84 135 0 160 rrcurveto +0 141 80 142 159 0 rrcurveto +96 0 61 -45 34 -104 rrcurveto +93 22 rlineto +-38 132 -102 76 -142 0 rrcurveto +-198 0 -140 -159 0 -206 rrcurveto +0 -197 113 -178 223 0 rrcurveto +149 0 108 83 40 156 rrcurveto +-95 24 rlineto +closepath +-285 -326 rmoveto +41 0 35 -2 0 -31 rrcurveto +0 -30 -35 -7 -43 0 rrcurveto +-46 0 rlineto +-5 -55 rlineto +20 -4 23 -2 27 0 rrcurveto +94 0 47 45 0 48 rrcurveto +0 35 -28 31 -56 6 rrcurveto +17 52 rlineto +-66 0 rlineto +-25 -86 rlineto +closepath +endchar } ND +/Eacute { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +760 136 hstem +79 95 vstem +274 73 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +195 760 rmoveto +73 0 rlineto +108 136 rlineto +-116 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/Ntilde { +0 722 hsbw +0 154 hstem +563 153 hstem +806 65 hstem +76 91 vstem +210 65 vstem +473 64 vstem +549 91 vstem +76 0 rmoveto +91 0 rlineto +0 563 rlineto +376 -563 rlineto +97 0 rlineto +0 716 rlineto +-91 0 rlineto +0 -562 rlineto +-376 562 rlineto +-97 0 rlineto +0 -716 rlineto +closepath +134 760 rmoveto +65 0 rlineto +-1 15 3 11 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -5 22 -12 rrcurveto +33 -18 27 -10 21 0 rrcurveto +54 0 39 37 3 75 rrcurveto +-64 0 rlineto +-4 -35 -11 -8 -20 0 rrcurveto +-12 0 -16 6 -18 9 rrcurveto +-36 18 -27 8 -20 0 rrcurveto +-29 0 -23 -10 -19 -20 rrcurveto +-19 -20 -10 -27 1 -34 rrcurveto +closepath +endchar } ND +/Odieresis { +0 778 hsbw +-12 81 hstem +647 82 hstem +760 100 hstem +48 98 vstem +252 92 vstem +434 92 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +106 413 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Udieresis { +0 722 hsbw +-12 85 hstem +696 20 hstem +760 100 hstem +79 94 vstem +222 91 vstem +404 92 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-325 44 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/aacute { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +583 137 hstem +31 99 226 70 397 89 vstem3 +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-171 323 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/agrave { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +583 137 hstem +36 94 vstem +278 71 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-48 323 rmoveto +-66 137 rlineto +-117 0 rlineto +112 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/acircumflex { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +666 54 hstem +36 94 vstem +226 94 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-121 406 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +endchar } ND +/adieresis { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +620 100 hstem +36 94 vstem +138 92 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-259 360 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/atilde { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +642 65 hstem +36 94 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-285 335 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 2 75 rrcurveto +-63 0 rlineto +-4 -34 -11 -8 -21 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-30 0 -22 -11 -19 -20 rrcurveto +-19 -20 -10 -27 1 -34 rrcurveto +closepath +endchar } ND +/aring { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +562 37 hstem +705 36 hstem +36 94 vstem +187 37 vstem +328 35 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-210 393 rmoveto +0 -52 40 -39 48 0 rrcurveto +48 0 40 39 0 50 rrcurveto +0 49 -40 41 -48 0 rrcurveto +-48 0 -40 -40 0 -48 rrcurveto +closepath +37 0 rmoveto +0 28 24 24 28 0 rrcurveto +28 0 24 -24 0 -29 rrcurveto +0 -30 -24 -23 -28 0 rrcurveto +-28 0 -24 23 0 31 rrcurveto +closepath +endchar } ND +/ccedilla { +0 500 hsbw +-196 61 hstem +-12 33 hstem +458 72 hstem +39 90 vstem +277 82 vstem +404 190 rmoveto +-12 -88 -49 -41 -69 0 rrcurveto +-87 0 -58 59 0 140 rrcurveto +0 137 60 61 90 0 rrcurveto +58 0 44 -36 16 -69 rrcurveto +85 13 rlineto +-20 105 -74 59 -113 0 rrcurveto +-142 0 -94 -121 0 -152 rrcurveto +0 -174 93 -95 143 0 rrcurveto +113 0 84 71 19 120 rrcurveto +-87 11 rlineto +closepath +-203 -255 rmoveto +40 0 36 -2 0 -31 rrcurveto +0 -30 -35 -7 -43 0 rrcurveto +-46 0 rlineto +-6 -55 rlineto +20 -4 24 -2 27 0 rrcurveto +94 0 47 44 0 49 rrcurveto +0 34 -28 32 -56 6 rrcurveto +17 52 rlineto +-66 0 rlineto +-25 -86 rlineto +closepath +endchar } ND +/eacute { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +583 137 hstem +37 90 vstem +227 73 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +95 274 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/egrave { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +583 137 hstem +37 90 vstem +264 71 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +203 274 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/ecircumflex { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +666 54 hstem +37 90 229 91 422 90 vstem3 +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +145 357 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/edieresis { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +620 100 hstem +37 90 vstem +139 91 vstem +321 92 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +7 311 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/iacute { +0 278 hsbw +0 20 hstem +499 20 hstem +583 137 hstem +97 88 vstem +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-5 583 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/igrave { +0 278 hsbw +0 20 hstem +499 20 hstem +583 137 hstem +97 88 vstem +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +104 583 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/icircumflex { +0 278 hsbw +0 20 hstem +499 20 hstem +666 54 hstem +-8 100 vstem +97 88 vstem +201 100 vstem +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +50 666 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +endchar } ND +/idieresis { +0 278 hsbw +0 20 hstem +499 20 hstem +620 100 hstem +4 93 98 87 187 91 vstem3 +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-93 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +183 0 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/ntilde { +0 556 hsbw +0 445 hstem +454 76 hstem +642 65 hstem +66 79 vstem +399 88 vstem +66 0 rmoveto +88 0 rlineto +0 283 rlineto +0 133 62 38 76 0 rrcurveto +72 0 35 -49 0 -90 rrcurveto +0 -315 rlineto +88 0 rlineto +0 319 rlineto +0 149 -65 62 -112 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +62 595 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 3 75 rrcurveto +-64 0 rlineto +-4 -34 -11 -8 -21 0 rrcurveto +-12 0 -15 4 -18 10 rrcurveto +-35 19 -28 8 -20 0 rrcurveto +-29 0 -23 -11 -19 -20 rrcurveto +-19 -20 -10 -27 1 -34 rrcurveto +closepath +endchar } ND +/oacute { +0 556 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +33 91 vstem +228 72 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +104 324 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/ograve { +0 556 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +33 91 vstem +265 70 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +211 324 rmoveto +-65 137 rlineto +-118 0 rlineto +113 -137 rlineto +70 0 rlineto +closepath +endchar } ND +/ocircumflex { +0 556 hsbw +-12 73 hstem +458 72 hstem +666 54 hstem +33 92 232 89 429 90 vstem3 +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +153 407 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +endchar } ND +/odieresis { +0 556 hsbw +-12 73 hstem +458 72 hstem +620 100 hstem +33 91 vstem +139 92 vstem +321 92 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +15 361 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/otilde { +0 556 hsbw +-12 73 hstem +458 72 hstem +642 65 hstem +33 91 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +-11 336 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 2 75 rrcurveto +-63 0 rlineto +-4 -34 -11 -8 -21 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-30 0 -22 -11 -19 -20 rrcurveto +-19 -20 -10 -27 1 -34 rrcurveto +closepath +endchar } ND +/uacute { +0 556 hsbw +-12 76 hstem +499 20 hstem +583 137 hstem +64 88 vstem +221 73 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-185 583 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/ugrave { +0 556 hsbw +-12 76 hstem +499 20 hstem +583 137 hstem +64 88 vstem +285 70 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-51 583 rmoveto +-65 137 rlineto +-118 0 rlineto +113 -137 rlineto +70 0 rlineto +closepath +endchar } ND +/ucircumflex { +0 556 hsbw +-12 76 hstem +499 20 hstem +666 54 hstem +64 88 vstem +225 94 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-131 666 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +endchar } ND +/udieresis { +0 556 hsbw +-12 76 hstem +499 20 hstem +620 100 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-269 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/dagger { +0 556 hsbw +423 78 hstem +230 88 vstem +230 -169 rmoveto +88 0 rlineto +0 592 rlineto +197 0 rlineto +0 78 rlineto +-197 0 rlineto +0 198 rlineto +-88 0 rlineto +0 -198 rlineto +-194 0 rlineto +0 -78 rlineto +194 0 rlineto +0 -592 rlineto +closepath +endchar } ND +/degree { +0 400 hsbw +457 53 hstem +675 53 hstem +63 53 vstem +280 53 vstem +63 593 rmoveto +0 -76 60 -60 75 0 rrcurveto +74 0 61 61 0 75 rrcurveto +0 74 -61 61 -74 0 rrcurveto +-75 0 -60 -61 0 -74 rrcurveto +closepath +53 0 rmoveto +0 45 36 37 46 0 rrcurveto +45 0 37 -37 0 -45 rrcurveto +0 -46 -37 -37 -45 0 rrcurveto +-46 0 -36 37 0 46 rrcurveto +closepath +endchar } ND +/cent { +0 556 hsbw +-200 20 hstem +-14 72 hstem +460 71 hstem +696 20 hstem +52 91 vstem +363 437 rmoveto +22 -20 16 -28 9 -36 rrcurveto +86 13 rlineto +-15 70 -31 47 -65 28 rrcurveto +55 189 rlineto +-54 16 rlineto +-55 -189 rlineto +-10 1 -11 1 -7 2 rrcurveto +-21 0 rlineto +-133 0 -97 -121 0 -153 rrcurveto +0 -126 53 -85 75 -36 rrcurveto +-56 -194 rlineto +54 -16 rlineto +58 193 rlineto +17 -4 17 -3 16 0 rrcurveto +109 0 88 74 22 120 rrcurveto +-88 10 rlineto +-11 -84 -55 -48 -66 0 rrcurveto +-10 0 -10 1 -10 4 rrcurveto +108 374 rlineto +closepath +-51 22 rmoveto +-109 -373 rlineto +-39 29 -21 60 0 86 rrcurveto +0 102 50 97 94 0 rrcurveto +5 -1 rlineto +20 0 rlineto +closepath +endchar } ND +/sterling { +0 556 hsbw +-14 409 hstem +656 72 hstem +125 93 vstem +193 395 rmoveto +-18 58 -9 47 0 37 rrcurveto +0 65 52 54 74 0 rrcurveto +66 0 54 -49 10 -77 rrcurveto +88 13 rlineto +-18 117 -81 68 -118 0 rrcurveto +-124 0 -97 -80 0 -124 rrcurveto +0 -32 3 -24 22 -73 rrcurveto +-76 0 rlineto +0 -72 rlineto +96 0 rlineto +5 -21 3 -20 0 -20 rrcurveto +0 -92 -50 -65 -62 -34 rrcurveto +34 -85 rlineto +44 28 56 17 47 0 rrcurveto +23 0 rlineto +6 -1 9 -1 8 -1 rrcurveto +10 -2 28 -7 26 -9 rrcurveto +43 -15 28 -7 35 0 rrcurveto +32 0 26 6 60 25 rrcurveto +-28 80 rlineto +-39 -18 -31 -9 -24 0 rrcurveto +-20 0 -37 6 -57 14 rrcurveto +-33 8 -31 4 -27 0 rrcurveto +-22 0 -23 -4 -25 -7 rrcurveto +61 66 26 63 0 58 rrcurveto +0 14 -4 14 -6 15 rrcurveto +139 0 rlineto +0 72 rlineto +-154 0 rlineto +closepath +endchar } ND +/section { +0 556 hsbw +-210 74 hstem +656 72 hstem +40 79 vstem +427 83 vstem +70 -34 rmoveto +14 -110 75 -66 124 0 rrcurveto +96 0 98 69 0 91 rrcurveto +0 52 -26 45 -52 40 rrcurveto +77 32 34 38 0 70 rrcurveto +0 87 -57 43 -114 67 rrcurveto +-105 62 -62 15 0 77 rrcurveto +0 38 41 40 59 0 rrcurveto +58 0 33 -27 14 -80 rrcurveto +92 10 rlineto +-15 109 -68 60 -121 0 rrcurveto +-108 0 -71 -72 0 -82 rrcurveto +0 -43 17 -34 46 -44 rrcurveto +-68 -20 -41 -57 0 -62 rrcurveto +0 -92 60 -42 105 -66 rrcurveto +111 -70 73 -9 0 -86 rrcurveto +0 -45 -40 -40 -66 0 rrcurveto +-70 0 -37 30 -18 85 rrcurveto +-88 -13 rlineto +closepath +285 153 rmoveto +-32 22 -36 24 -44 26 rrcurveto +-78 46 -46 25 0 62 rrcurveto +0 37 21 27 52 31 rrcurveto +22 -18 34 -22 44 -27 rrcurveto +84 -51 51 -35 0 -56 rrcurveto +0 -31 -23 -35 -49 -25 rrcurveto +closepath +endchar } ND +/bullet { +0 350 hsbw +227 247 hstem +53 248 vstem +53 351 rmoveto +0 -70 56 -54 68 0 rrcurveto +68 0 56 54 0 70 rrcurveto +0 68 -56 55 -68 0 rrcurveto +-68 0 -56 -55 0 -68 rrcurveto +closepath +endchar } ND +/paragraph { +0 537 hsbw +-199 20 hstem +631 85 hstem +198 80 vstem +387 83 vstem +198 -199 rmoveto +80 0 rlineto +0 830 rlineto +109 0 rlineto +0 -830 rlineto +83 0 rlineto +0 830 rlineto +71 0 rlineto +0 85 rlineto +-310 0 rlineto +-151 0 -80 -81 0 -125 rrcurveto +0 -114 75 -79 123 -5 rrcurveto +0 -511 rlineto +closepath +endchar } ND +/germandbls { +0 611 hsbw +-12 72 hstem +656 72 hstem +75 88 vstem +379 85 vstem +490 90 vstem +75 0 rmoveto +88 0 rlineto +0 484 rlineto +0 142 48 30 70 0 rrcurveto +60 0 38 -37 0 -40 rrcurveto +0 -31 -16 -29 -25 -42 rrcurveto +-27 -46 -11 -20 0 -36 rrcurveto +0 -63 39 -24 80 -53 rrcurveto +51 -34 20 -13 0 -43 rrcurveto +0 -46 -41 -39 -49 0 rrcurveto +-36 0 -32 19 -32 62 rrcurveto +-76 -36 rlineto +30 -68 65 -49 82 0 rrcurveto +104 0 75 73 0 91 rrcurveto +0 73 -36 33 -84 53 rrcurveto +-46 29 -24 17 0 32 rrcurveto +0 25 13 20 21 37 rrcurveto +25 44 15 34 0 39 rrcurveto +0 74 -68 66 -113 0 rrcurveto +-129 0 -79 -86 0 -154 rrcurveto +0 -488 rlineto +closepath +endchar } ND +/registered { +0 737 hsbw +-9 61 hstem +324 55 hstem +499 53 hstem +667 61 hstem +1 62 vstem +208 64 vstem +446 68 vstem +677 61 vstem +370 728 rmoveto +-190 0 -179 -178 0 -191 rrcurveto +0 -194 177 -174 192 0 rrcurveto +193 0 175 176 0 192 rrcurveto +0 191 -178 178 -190 0 rrcurveto +closepath +0 -61 rmoveto +155 0 152 -149 0 -159 rrcurveto +0 -160 -148 -147 -159 0 rrcurveto +-160 0 -147 147 0 160 rrcurveto +0 158 149 150 158 0 rrcurveto +closepath +-162 -511 rmoveto +64 0 rlineto +0 168 rlineto +38 0 rlineto +69 0 9 -34 40 -72 rrcurveto +35 -62 rlineto +79 0 rlineto +-49 77 rlineto +-34 51 -10 29 -48 20 rrcurveto +68 5 45 48 0 59 rrcurveto +0 72 -67 35 -102 0 rrcurveto +-137 0 rlineto +0 -396 rlineto +closepath +64 223 rmoveto +0 120 rlineto +73 0 rlineto +63 0 38 -13 0 -47 rrcurveto +0 -36 -22 -24 -74 0 rrcurveto +-78 0 rlineto +closepath +endchar } ND +/copyright { +0 737 hsbw +-9 61 hstem +148 58 hstem +512 54 hstem +667 61 hstem +1 62 vstem +177 67 vstem +677 61 vstem +370 728 rmoveto +-190 0 -179 -178 0 -191 rrcurveto +0 -194 177 -174 192 0 rrcurveto +193 0 175 176 0 192 rrcurveto +0 191 -178 178 -190 0 rrcurveto +closepath +0 -61 rmoveto +155 0 152 -149 0 -159 rrcurveto +0 -160 -148 -147 -159 0 rrcurveto +-160 0 -147 147 0 160 rrcurveto +0 158 149 150 158 0 rrcurveto +closepath +118 -367 rmoveto +-14 -59 -49 -35 -58 0 rrcurveto +-72 0 -51 51 0 100 rrcurveto +0 100 53 55 76 0 rrcurveto +50 0 40 -27 20 -48 rrcurveto +58 14 rlineto +-22 70 -59 45 -85 0 rrcurveto +-121 0 -77 -87 0 -121 rrcurveto +0 -131 79 -79 115 0 rrcurveto +89 0 69 52 19 82 rrcurveto +-60 18 rlineto +closepath +endchar } ND +/trademark { +0 1000 hsbw +318 80 hstem +657 59 hstem +239 66 vstem +478 63 647 56 810 61 vstem3 +239 318 rmoveto +66 0 rlineto +0 339 rlineto +130 0 rlineto +0 59 rlineto +-325 0 rlineto +0 -59 rlineto +129 0 rlineto +0 -339 rlineto +closepath +240 0 rmoveto +62 0 rlineto +0 339 rlineto +106 -339 rlineto +61 0 rlineto +102 334 rlineto +0 -334 rlineto +61 0 rlineto +0 398 rlineto +-96 0 rlineto +-97 -318 rlineto +-101 318 rlineto +-98 0 rlineto +0 -398 rlineto +closepath +endchar } ND +/acute { +0 333 hsbw +583 137 hstem +108 73 vstem +108 583 rmoveto +73 0 rlineto +108 137 rlineto +-116 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/dieresis { +0 333 hsbw +620 100 hstem +30 92 vstem +212 92 vstem +30 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/notequal { +0 549 hsbw +-14 300 hstem +421 299 hstem +271 240 vstem +242 204 rmoveto +269 0 rlineto +0 82 rlineto +-233 0 rlineto +59 135 rlineto +174 0 rlineto +0 82 rlineto +-138 0 rlineto +95 217 rlineto +-65 0 rlineto +-96 -217 rlineto +-269 0 rlineto +0 -82 rlineto +233 0 rlineto +-59 -135 rlineto +-174 0 rlineto +0 -82 rlineto +138 0 rlineto +-95 -218 rlineto +66 0 rlineto +95 218 rlineto +closepath +endchar } ND +/AE { +0 1000 hsbw +0 84 hstem +207 84 hstem +327 84 hstem +631 85 hstem +0 103 vstem +477 95 vstem +0 0 rmoveto +103 0 rlineto +98 207 rlineto +276 0 rlineto +0 -207 rlineto +468 0 rlineto +0 84 rlineto +-373 0 rlineto +0 243 rlineto +335 0 rlineto +0 84 rlineto +-335 0 rlineto +0 220 rlineto +360 0 rlineto +0 85 rlineto +-587 0 rlineto +-345 -716 rlineto +closepath +241 291 rmoveto +165 340 rlineto +71 0 rlineto +0 -340 rlineto +-236 0 rlineto +closepath +endchar } ND +/Oslash { +0 778 hsbw +-12 81 hstem +647 81 hstem +46 98 vstem +633 98 vstem +610 650 rmoveto +-75 57 -57 21 -88 0 rrcurveto +-201 0 -143 -165 0 -207 rrcurveto +0 -96 17 -55 63 -97 rrcurveto +-85 -96 rlineto +48 -41 rlineto +82 92 rlineto +76 -59 59 -16 85 0 rrcurveto +189 0 151 167 0 202 rrcurveto +0 95 -16 63 -60 89 rrcurveto +86 97 rlineto +-49 41 rlineto +-82 -92 rlineto +closepath +-58 -66 rmoveto +-364 -407 rlineto +-37 69 -7 43 0 69 rrcurveto +0 192 104 97 143 0 rrcurveto +61 0 38 -14 62 -49 rrcurveto +closepath +40 -50 rmoveto +27 -52 14 -59 0 -68 rrcurveto +0 -182 -103 -104 -142 0 rrcurveto +-60 0 -46 15 -53 44 rrcurveto +363 406 rlineto +closepath +endchar } ND +/infinity { +0 713 hsbw +189 55 hstem +303 93 hstem +426 54 hstem +75 54 vstem +303 67 vstem +585 55 vstem +336 396 rmoveto +-44 56 -47 28 -50 0 rrcurveto +-66 0 -54 -57 0 -73 rrcurveto +0 -75 54 -56 66 0 rrcurveto +50 0 47 28 44 56 rrcurveto +58 -77 38 -37 67 0 rrcurveto +77 0 64 63 0 101 rrcurveto +0 110 -73 47 -68 0 rrcurveto +-68 0 -35 -39 -60 -75 rrcurveto +closepath +34 -46 rmoveto +48 66 22 39 56 0 rrcurveto +50 0 39 -38 0 -69 rrcurveto +0 -67 -38 -37 -49 0 rrcurveto +-62 0 -26 43 -40 63 rrcurveto +closepath +-67 0 rmoveto +-38 -50 -36 -25 -33 0 rrcurveto +-38 0 -29 29 0 47 rrcurveto +0 46 28 29 38 0 rrcurveto +29 0 27 -12 52 -64 rrcurveto +closepath +endchar } ND +/plusminus { +0 549 hsbw +0 82 hstem +324 81 hstem +233 83 vstem +233 127 rmoveto +83 0 rlineto +0 197 rlineto +195 0 rlineto +0 81 rlineto +-195 0 rlineto +0 195 rlineto +-83 0 rlineto +0 -195 rlineto +-195 0 rlineto +0 -81 rlineto +195 0 rlineto +0 -197 rlineto +closepath +278 -127 rmoveto +0 82 rlineto +-473 0 rlineto +0 -82 rlineto +473 0 rlineto +closepath +endchar } ND +/lessequal { +0 549 hsbw +52 81 hstem +169 88 372 79 566 88 hstem3 +38 98 vstem +38 372 rmoveto +474 -203 rlineto +0 88 rlineto +-376 156 rlineto +376 153 rlineto +0 88 rlineto +-474 -200 rlineto +0 -82 rlineto +closepath +473 -320 rmoveto +0 81 rlineto +-473 0 rlineto +0 -81 rlineto +473 0 rlineto +closepath +endchar } ND +/greaterequal { +0 549 hsbw +52 81 hstem +169 88 372 79 566 88 hstem3 +413 99 vstem +512 372 rmoveto +0 82 rlineto +-474 200 rlineto +0 -88 rlineto +375 -153 rlineto +-375 -156 rlineto +0 -88 rlineto +474 203 rlineto +closepath +-1 -320 rmoveto +0 81 rlineto +-473 0 rlineto +0 -81 rlineto +473 0 rlineto +closepath +endchar } ND +/yen { +0 556 hsbw +0 227 hstem +296 420 hstem +-1 97 233 86 456 97 vstem3 +233 0 rmoveto +88 0 rlineto +0 159 rlineto +201 0 rlineto +0 68 rlineto +-201 0 rlineto +0 69 rlineto +201 0 rlineto +0 73 rlineto +-167 0 rlineto +198 347 rlineto +-104 0 rlineto +-134 -248 rlineto +-20 -36 -13 -26 -7 -17 rrcurveto +-9 21 -12 25 -16 29 rrcurveto +-142 252 rlineto +-97 0 rlineto +198 -347 rlineto +-167 0 rlineto +0 -73 rlineto +203 0 rlineto +0 -69 rlineto +-203 0 rlineto +0 -68 rlineto +203 0 rlineto +0 -159 rlineto +closepath +endchar } ND +/mu1 { +0 576 hsbw +-199 20 hstem +-12 79 hstem +499 20 hstem +78 87 vstem +418 79 vstem +497 519 rmoveto +-86 0 rlineto +0 -222 rlineto +0 -156 -20 -74 -106 0 rrcurveto +-106 0 -14 81 0 151 rrcurveto +0 220 rlineto +-87 0 rlineto +0 -718 rlineto +87 0 rlineto +0 251 rlineto +36 -49 34 -15 54 0 rrcurveto +56 0 38 18 35 56 rrcurveto +0 -62 rlineto +79 0 rlineto +0 519 rlineto +closepath +endchar } ND +/partialdiff { +0 494 hsbw +-12 67 hstem +666 62 hstem +27 88 vstem +419 56 vstem +208 556 rmoveto +30 81 41 29 40 0 rrcurveto +88 0 9 -102 3 -113 rrcurveto +-238 -5 -154 -94 0 -195 rrcurveto +0 -107 61 -62 90 0 rrcurveto +182 0 115 241 0 223 rrcurveto +0 147 -28 129 -129 0 rrcurveto +-62 0 -69 -41 -45 -102 rrcurveto +66 -29 rlineto +closepath +209 -167 rmoveto +-20 -192 -75 -142 -124 0 rrcurveto +-44 0 -39 38 0 55 rrcurveto +0 135 109 95 193 11 rrcurveto +closepath +endchar } ND +/summation { +0 713 hsbw +-210 78 hstem +648 80 hstem +60 109 vstem +68 728 rmoveto +0 -85 rlineto +294 -377 rlineto +-302 -385 rlineto +0 -91 rlineto +617 0 rlineto +0 78 rlineto +-508 0 rlineto +317 402 rlineto +-297 378 rlineto +483 0 rlineto +0 80 rlineto +-604 0 rlineto +closepath +endchar } ND +/product { +0 823 hsbw +-210 20 hstem +643 85 hstem +79 94 vstem +650 94 vstem +79 728 rmoveto +0 -938 rlineto +94 0 rlineto +0 853 rlineto +477 0 rlineto +0 -853 rlineto +94 0 rlineto +0 938 rlineto +-665 0 rlineto +closepath +endchar } ND +/pi1 { +0 549 hsbw +0 20 hstem +442 77 hstem +78 91 vstem +377 93 vstem +0 519 rmoveto +0 -77 rlineto +78 0 rlineto +0 -442 rlineto +91 0 rlineto +0 442 rlineto +208 0 rlineto +0 -442 rlineto +93 0 rlineto +0 442 rlineto +79 0 rlineto +0 77 rlineto +-549 0 rlineto +closepath +endchar } ND +/integral { +0 274 hsbw +-107 76 hstem +834 76 hstem +98 77 vstem +98 463 rmoveto +0 -168 6 -136 12 -102 rrcurveto +3 -26 2 -19 0 -13 rrcurveto +0 -22 -9 -8 -10 0 rrcurveto +-7 0 -9 7 -9 9 rrcurveto +-9 7 -11 8 -13 0 rrcurveto +-26 0 -18 -18 0 -30 rrcurveto +0 -34 23 -25 35 0 rrcurveto +95 0 11 96 3 131 rrcurveto +2 87 3 69 3 43 rrcurveto +0 88 rlineto +0 83 -6 108 -12 134 rrcurveto +-4 33 -1 24 0 14 rrcurveto +0 22 9 9 11 0 rrcurveto +5 0 6 -4 8 -6 rrcurveto +13 -12 13 -5 12 0 rrcurveto +25 0 19 19 0 31 rrcurveto +0 26 -28 27 -33 0 rrcurveto +-65 0 -35 -95 -6 -93 rrcurveto +-8 -259 rlineto +closepath +endchar } ND +/ordfeminine { +0 370 hsbw +364 59 hstem +671 57 hstem +23 73 vstem +261 70 vstem +268 417 rmoveto +0 -16 4 -15 6 -13 rrcurveto +73 0 rlineto +-14 16 -6 30 0 44 rrcurveto +0 147 rlineto +0 84 -50 34 -96 0 rrcurveto +-92 0 -49 -44 -8 -58 rrcurveto +67 -16 rlineto +5 38 25 23 51 0 rrcurveto +50 0 25 -16 2 -59 rrcurveto +-8 -2 -16 -4 -23 -4 rrcurveto +-72 -10 rlineto +-10 -2 -10 -2 -8 -1 rrcurveto +-57 -14 -34 -30 0 -56 rrcurveto +0 -63 45 -44 75 0 rrcurveto +43 0 42 17 40 36 rrcurveto +closepath +-8 122 rmoveto +0 -94 -34 -22 -67 0 rrcurveto +-40 0 -23 21 0 27 rrcurveto +0 32 25 13 46 5 rrcurveto +45 6 30 7 18 5 rrcurveto +closepath +endchar } ND +/ordmasculine { +0 365 hsbw +361 65 hstem +663 65 hstem +22 72 vstem +270 72 vstem +182 728 rmoveto +-95 0 -65 -69 0 -117 rrcurveto +0 -114 66 -67 95 0 rrcurveto +92 0 67 69 0 114 rrcurveto +0 114 -66 70 -94 0 rrcurveto +closepath +0 -65 rmoveto +52 0 36 -38 0 -78 rrcurveto +0 -86 -36 -35 -52 0 rrcurveto +-51 0 -37 36 0 82 rrcurveto +0 84 36 35 52 0 rrcurveto +closepath +endchar } ND +/Ohm { +0 768 hsbw +0 81 hstem +654 80 hstem +73 104 vstem +242 102 vstem +439 103 vstem +609 101 vstem +242 82 rmoveto +-180 0 rlineto +0 -82 rlineto +282 0 rlineto +0 88 rlineto +-104 46 -63 105 0 142 rrcurveto +0 148 64 125 152 0 rrcurveto +143 0 73 -148 0 -127 rrcurveto +0 -124 -42 -105 -128 -64 rrcurveto +0 -86 rlineto +281 0 rlineto +0 81 rlineto +-178 0 rlineto +123 79 45 85 0 146 rrcurveto +0 191 -119 152 -196 0 rrcurveto +-191 0 -131 -158 0 -184 rrcurveto +0 -141 33 -91 136 -78 rrcurveto +closepath +endchar } ND +/ae { +0 889 hsbw +-12 70 hstem +237 72 hstem +458 72 hstem +33 93 vstem +387 86 vstem +758 91 vstem +847 159 rmoveto +-92 11 rlineto +-18 -70 -49 -39 -66 0 rrcurveto +-92 0 -57 58 0 118 rrcurveto +376 0 rlineto +0 30 rlineto +0 123 -83 140 -148 0 rrcurveto +-75 0 -50 -24 -41 -46 rrcurveto +-42 61 -57 9 -81 0 rrcurveto +-115 0 -82 -45 -28 -117 rrcurveto +86 -10 rlineto +17 78 49 22 72 0 rrcurveto +85 0 30 -30 0 -81 rrcurveto +0 -20 rlineto +-34 -10 -42 -8 -47 -6 rrcurveto +-142 -18 -88 -42 0 -106 rrcurveto +0 -83 65 -66 112 0 rrcurveto +81 0 67 30 67 67 rrcurveto +50 -67 60 -30 83 0 rrcurveto +116 0 79 61 34 110 rrcurveto +closepath +-374 150 rmoveto +6 93 56 56 83 0 rrcurveto +78 0 52 -47 10 -102 rrcurveto +-285 0 rlineto +closepath +-86 -49 rmoveto +0 -153 -44 -49 -115 0 rrcurveto +-67 0 -35 35 0 47 rrcurveto +0 51 38 24 66 10 rrcurveto +79 12 52 12 26 11 rrcurveto +closepath +endchar } ND +/oslash { +0 611 hsbw +-12 73 hstem +458 72 hstem +63 90 vstem +459 90 vstem +449 488 rmoveto +-51 29 -42 13 -53 0 rrcurveto +-128 0 -112 -82 0 -196 rrcurveto +0 -74 10 -56 51 -57 rrcurveto +-53 -69 rlineto +46 -35 rlineto +51 66 rlineto +40 -26 45 -13 52 0 rrcurveto +146 0 98 103 0 168 rrcurveto +0 74 -11 52 -46 64 rrcurveto +52 67 rlineto +-47 34 rlineto +-48 -62 rlineto +closepath +-50 -65 rmoveto +-220 -286 rlineto +-18 32 -8 41 0 49 rrcurveto +0 132 66 67 87 0 rrcurveto +32 0 31 -12 30 -23 rrcurveto +closepath +37 -47 rmoveto +17 -47 6 -25 0 -44 rrcurveto +0 -134 -66 -65 -90 0 rrcurveto +-32 0 -29 10 -25 20 rrcurveto +219 285 rlineto +closepath +endchar } ND +/questiondown { +0 611 hsbw +-209 72 hstem +418 101 hstem +77 90 vstem +258 100 vstem +358 519 rmoveto +-100 0 rlineto +0 -101 rlineto +100 0 rlineto +0 101 rlineto +closepath +-6 -177 rmoveto +-84 0 rlineto +-3 -92 -7 -16 -73 -66 rrcurveto +-85 -76 -23 -44 0 -62 rrcurveto +0 -108 90 -87 140 0 rrcurveto +132 0 82 74 18 132 rrcurveto +-90 10 rlineto +-16 -98 -54 -46 -73 0 rrcurveto +-78 0 -61 60 0 69 rrcurveto +0 46 24 27 49 43 rrcurveto +83 73 30 41 0 95 rrcurveto +-1 5 rlineto +0 20 rlineto +closepath +endchar } ND +/exclamdown { +0 333 hsbw +-197 537 hstem +418 101 hstem +117 101 vstem +218 519 rmoveto +-101 0 rlineto +0 -101 rlineto +101 0 rlineto +0 101 rlineto +closepath +-23 -179 rmoveto +-56 0 rlineto +-26 -379 rlineto +0 -158 rlineto +109 0 rlineto +0 158 rlineto +-27 379 rlineto +closepath +endchar } ND +/logicalnot { +0 584 hsbw +421 82 hstem +445 83 vstem +528 207 rmoveto +0 296 rlineto +-472 0 rlineto +0 -82 rlineto +389 0 rlineto +0 -214 rlineto +83 0 rlineto +closepath +endchar } ND +/radical { +0 549 hsbw +501 20 hstem +513 36 vstem +513 913 rmoveto +-127 -794 rlineto +-198 402 rlineto +-147 -74 rlineto +17 -31 rlineto +96 44 rlineto +242 -498 rlineto +153 951 rlineto +-36 0 rlineto +closepath +endchar } ND +/florin { +0 556 hsbw +-210 77 hstem +450 69 hstem +647 82 hstem +263 89 vstem +22 -198 rmoveto +42 -8 37 -4 31 0 rrcurveto +73 0 36 31 18 96 rrcurveto +93 533 rlineto +100 0 rlineto +12 69 rlineto +-100 0 rlineto +10 50 rlineto +12 68 14 10 38 0 rrcurveto +16 0 25 -4 34 -8 rrcurveto +17 75 rlineto +-44 12 -35 7 -26 0 rrcurveto +-99 0 -21 -41 -19 -105 rrcurveto +-12 -64 rlineto +-98 0 rlineto +-11 -69 rlineto +98 0 rlineto +-87 -509 rlineto +-11 -61 -17 -13 -34 0 rrcurveto +-17 0 -25 4 -32 7 rrcurveto +-18 -76 rlineto +closepath +endchar } ND +/approxequal { +0 549 hsbw +185 92 hstem +417 104 hstem +25 499 vstem +25 360 rmoveto +54 53 31 14 42 0 rrcurveto +26 0 33 -8 38 -18 rrcurveto +61 -29 28 -11 51 0 rrcurveto +53 0 40 17 42 39 rrcurveto +0 104 rlineto +-35 -39 -49 -28 -42 0 rrcurveto +-23 0 -15 4 -46 19 rrcurveto +-80 33 -35 9 -38 0 rrcurveto +-56 0 -46 -20 -34 -39 rrcurveto +0 -100 rlineto +closepath +0 -176 rmoveto +54 52 31 14 42 0 rrcurveto +26 0 33 -8 38 -18 rrcurveto +61 -29 28 -10 51 0 rrcurveto +53 0 40 16 42 39 rrcurveto +0 104 rlineto +-35 -39 -49 -28 -42 0 rrcurveto +-23 0 -16 4 -45 19 rrcurveto +-80 34 -35 8 -38 0 rrcurveto +-56 0 -46 -20 -34 -38 rrcurveto +0 -100 rlineto +closepath +endchar } ND +/increment { +0 612 hsbw +0 40 hstem +13 586 vstem +599 0 rmoveto +-280 677 rlineto +-306 -677 rlineto +586 0 rlineto +closepath +-116 40 rmoveto +-409 0 rlineto +215 472 rlineto +194 -472 rlineto +closepath +endchar } ND +/guillemotleft { +0 556 hsbw +35 445 hstem +65 101 vstem +257 98 vstem +410 74 vstem +166 258 rmoveto +127 222 rlineto +-72 0 rlineto +-156 -222 rlineto +156 -223 rlineto +71 0 rlineto +-126 223 rlineto +closepath +189 0 rmoveto +129 222 rlineto +-74 0 rlineto +-153 -222 rlineto +153 -223 rlineto +74 0 rlineto +-129 223 rlineto +closepath +endchar } ND +/guillemotright { +0 556 hsbw +35 445 hstem +68 74 vstem +197 98 vstem +386 101 vstem +386 258 rmoveto +-127 -223 rlineto +72 0 rlineto +156 223 rlineto +-156 222 rlineto +-72 0 rlineto +127 -222 rlineto +closepath +-189 0 rmoveto +-129 -223 rlineto +74 0 rlineto +153 223 rlineto +-153 222 rlineto +-74 0 rlineto +129 -222 rlineto +closepath +endchar } ND +/ellipsis { +0 1000 hsbw +0 100 hstem +117 100 450 100 783 100 vstem3 +117 0 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +333 0 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +333 0 rmoveto +101 0 rlineto +0 100 rlineto +-101 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Agrave { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +760 136 hstem +-1 100 vstem +332 70 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +197 466 rmoveto +-66 136 rlineto +-117 0 rlineto +113 -136 rlineto +70 0 rlineto +closepath +endchar } ND +/Atilde { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +806 65 hstem +-1 100 vstem +170 65 vstem +273 102 439 58 561 102 vstem3 +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-35 466 rmoveto +65 0 rlineto +0 26 13 20 24 0 rrcurveto +10 0 17 -5 21 -12 rrcurveto +34 -19 27 -9 20 0 rrcurveto +54 0 40 37 2 75 rrcurveto +-63 0 rlineto +-6 -35 -9 -8 -21 0 rrcurveto +-12 0 -14 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-63 0 -37 -46 0 -65 rrcurveto +closepath +endchar } ND +/Otilde { +0 778 hsbw +-12 81 hstem +647 82 hstem +806 65 hstem +48 98 vstem +228 64 vstem +491 63 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +82 413 rmoveto +64 0 rlineto +0 27 13 19 25 0 rrcurveto +10 0 16 -5 21 -12 rrcurveto +34 -19 27 -9 20 0 rrcurveto +56 0 38 37 2 75 rrcurveto +-63 0 rlineto +-6 -35 -9 -8 -21 0 rrcurveto +-12 0 -14 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-30 0 -24 -11 -18 -19 rrcurveto +-19 -21 -9 -26 1 -34 rrcurveto +closepath +endchar } ND +/OE { +0 1000 hsbw +-12 76 hstem +329 84 hstem +651 77 hstem +63 98 vstem +547 89 vstem +968 84 rmoveto +-332 0 rlineto +0 245 rlineto +292 0 rlineto +0 84 rlineto +-292 0 rlineto +0 218 rlineto +317 0 rlineto +0 85 rlineto +-406 0 rlineto +0 -97 rlineto +-44 72 -65 37 -86 0 rrcurveto +-200 0 -89 -160 0 -209 rrcurveto +0 -209 91 -162 198 0 rrcurveto +86 0 65 38 44 78 rrcurveto +0 -104 rlineto +421 0 rlineto +0 84 rlineto +closepath +-616 567 rmoveto +102 0 88 -89 0 -198 rrcurveto +0 -215 -86 -85 -104 0 rrcurveto +-106 0 -85 90 0 198 rrcurveto +0 160 61 139 130 0 rrcurveto +closepath +endchar } ND +/oe { +0 944 hsbw +-12 73 hstem +236 72 hstem +458 72 hstem +40 90 vstem +435 89 vstem +478 85 rmoveto +40 -60 71 -37 88 0 rrcurveto +116 0 79 61 28 107 rrcurveto +-88 13 rlineto +-22 -72 -47 -36 -65 0 rrcurveto +-87 0 -66 67 -1 108 rrcurveto +383 0 rlineto +1 196 -97 98 -144 0 rrcurveto +-80 0 -68 -38 -41 -61 rrcurveto +-34 57 -69 42 -90 0 rrcurveto +-149 0 -96 -127 0 -150 rrcurveto +0 -167 97 -98 147 0 rrcurveto +80 0 63 33 51 64 rrcurveto +closepath +-348 175 rmoveto +0 97 56 101 96 0 rrcurveto +85 0 68 -68 0 -129 rrcurveto +0 -130 -69 -70 -84 0 rrcurveto +-99 0 -53 81 0 118 rrcurveto +closepath +397 48 rmoveto +8 93 59 57 79 0 rrcurveto +76 0 57 -52 8 -98 rrcurveto +-287 0 rlineto +closepath +endchar } ND +/endash { +0 556 hsbw +224 70 hstem +-2 556 vstem +-2 224 rmoveto +556 0 rlineto +0 70 rlineto +-556 0 rlineto +0 -70 rlineto +closepath +endchar } ND +/emdash { +0 1000 hsbw +224 70 hstem +0 1000 vstem +0 224 rmoveto +1000 0 rlineto +0 70 rlineto +-1000 0 rlineto +0 -70 rlineto +closepath +endchar } ND +/quotedblleft { +0 333 hsbw +494 234 hstem +41 48 vstem +192 48 vstem +135 596 rmoveto +-46 0 rlineto +1 56 17 27 36 15 rrcurveto +-22 34 rlineto +-63 -29 -17 -40 0 -85 rrcurveto +0 -80 rlineto +94 0 rlineto +0 102 rlineto +closepath +151 0 rmoveto +-46 0 rlineto +2 56 16 27 36 15 rrcurveto +-22 34 rlineto +-63 -29 -17 -41 0 -84 rrcurveto +0 -80 rlineto +94 0 rlineto +0 102 rlineto +closepath +endchar } ND +/quotedblright { +0 333 hsbw +621 102 hstem +88 49 vstem +240 48 vstem +42 621 rmoveto +46 0 rlineto +-2 -54 -17 -30 -34 -14 rrcurveto +21 -34 rlineto +61 26 20 44 0 84 rrcurveto +0 80 rlineto +-95 0 rlineto +0 -102 rlineto +closepath +152 0 rmoveto +46 0 rlineto +-3 -54 -17 -30 -34 -14 rrcurveto +22 -34 rlineto +59 26 21 44 0 84 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/quoteleft { +0 222 hsbw +494 234 hstem +63 48 vstem +157 596 rmoveto +-46 0 rlineto +1 56 17 27 36 15 rrcurveto +-22 34 rlineto +-63 -29 -17 -40 0 -85 rrcurveto +0 -80 rlineto +94 0 rlineto +0 102 rlineto +closepath +endchar } ND +/quoteright { +0 222 hsbw +621 102 hstem +106 49 vstem +61 621 rmoveto +45 0 rlineto +-2 -54 -17 -30 -34 -14 rrcurveto +21 -34 rlineto +61 26 20 44 0 84 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/divide { +0 549 hsbw +156 100 312 82 450 100 hstem3 +224 100 vstem +224 450 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +287 -138 rmoveto +0 82 rlineto +-473 0 rlineto +0 -82 rlineto +473 0 rlineto +closepath +-287 -156 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/lozenge { +0 494 hsbw +0 46 hstem +647 47 hstem +23 53 vstem +214 54 vstem +417 55 vstem +268 694 rmoveto +-54 0 rlineto +-191 -348 rlineto +191 -346 rlineto +54 0 rlineto +204 346 rlineto +-204 348 rlineto +closepath +-26 -47 rmoveto +175 -301 rlineto +-175 -300 rlineto +-166 300 rlineto +166 301 rlineto +closepath +endchar } ND +/ydieresis { +0 500 hsbw +-210 85 hstem +499 20 hstem +620 100 hstem +16 95 vstem +119 91 vstem +301 92 vstem +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +57 820 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ydieresis { +0 667 hsbw +0 379 hstem +696 20 hstem +760 100 hstem +3 115 vstem +194 92 vstem +376 92 vstem +549 110 vstem +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +-85 760 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/fraction { +0 167 hsbw +708 20 hstem +-222 76 vstem +315 77 vstem +-222 -28 rmoveto +76 0 rlineto +538 756 rlineto +-77 0 rlineto +-537 -756 rlineto +closepath +endchar } ND +/Euro { +0 556 hsbw +-12 81 hstem +261 66 hstem +391 66 hstem +647 81 hstem +50 98 vstem +386 647 rmoveto +50 0 45 -17 40 -32 rrcurveto +20 90 rlineto +-42 26 -51 14 -60 0 rrcurveto +-165 0 -133 -98 -33 -173 rrcurveto +-57 0 rlineto +-14 -66 rlineto +64 0 rlineto +0 -64 rlineto +-50 0 rlineto +-14 -66 rlineto +75 0 rlineto +34 -179 108 -94 183 0 rrcurveto +49 0 45 10 41 18 rrcurveto +0 101 rlineto +-34 -32 -48 -16 -61 0 rrcurveto +-111 0 -86 68 -23 124 rrcurveto +291 0 rlineto +13 66 rlineto +-314 0 rlineto +0 64 rlineto +328 0 rlineto +13 66 rlineto +-333 0 rlineto +10 93 98 97 122 0 rrcurveto +closepath +endchar } ND +/guilsinglleft { +0 333 hsbw +35 445 hstem +45 97 vstem +199 72 vstem +142 257 rmoveto +129 223 rlineto +-72 0 rlineto +-154 -223 rlineto +154 -222 rlineto +72 0 rlineto +-129 222 rlineto +closepath +endchar } ND +/guilsinglright { +0 333 hsbw +35 445 hstem +45 73 vstem +174 259 rmoveto +-129 -224 rlineto +73 0 rlineto +148 227 rlineto +-148 218 rlineto +-73 0 rlineto +129 -221 rlineto +closepath +endchar } ND +/fi { +0 500 hsbw +0 20 hstem +451 68 hstem +646 82 hstem +89 88 vstem +344 88 vstem +89 0 rmoveto +88 0 rlineto +0 451 rlineto +101 0 rlineto +0 68 rlineto +-101 0 rlineto +0 33 rlineto +0 78 17 16 62 0 rrcurveto +22 0 rlineto +8 0 8 -2 9 -1 rrcurveto +14 74 rlineto +-28 7 -29 4 -32 0 rrcurveto +-96 0 -43 -57 0 -102 rrcurveto +0 -50 rlineto +-78 0 rlineto +0 -68 rlineto +78 0 rlineto +0 -451 rlineto +closepath +255 615 rmoveto +88 0 rlineto +0 101 rlineto +-88 0 rlineto +0 -101 rlineto +closepath +0 -615 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/fl { +0 500 hsbw +0 20 hstem +451 68 hstem +646 82 hstem +89 88 vstem +343 88 vstem +89 0 rmoveto +88 0 rlineto +0 451 rlineto +101 0 rlineto +0 68 rlineto +-101 0 rlineto +0 33 rlineto +0 78 17 16 62 0 rrcurveto +22 0 rlineto +8 0 8 -2 9 -1 rrcurveto +14 74 rlineto +-28 7 -29 4 -32 0 rrcurveto +-96 0 -43 -57 0 -102 rrcurveto +0 -50 rlineto +-78 0 rlineto +0 -68 rlineto +78 0 rlineto +0 -451 rlineto +closepath +254 0 rmoveto +88 0 rlineto +0 716 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/daggerdbl { +0 556 hsbw +12 78 hstem +444 79 hstem +232 88 vstem +232 -169 rmoveto +88 0 rlineto +0 181 rlineto +197 0 rlineto +0 78 rlineto +-197 0 rlineto +0 354 rlineto +197 0 rlineto +0 79 rlineto +-197 0 rlineto +0 183 rlineto +-88 0 rlineto +0 -183 rlineto +-196 0 rlineto +0 -79 rlineto +196 0 rlineto +0 -354 rlineto +-196 0 rlineto +0 -78 rlineto +196 0 rlineto +0 -181 rlineto +closepath +endchar } ND +/periodcentered { +0 278 hsbw +302 100 hstem +90 100 vstem +90 302 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/quotesinglbase { +0 222 hsbw +0 102 hstem +106 49 vstem +61 0 rmoveto +45 0 rlineto +-2 -54 -17 -29 -34 -15 rrcurveto +21 -34 rlineto +61 28 20 43 0 82 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/quotedblbase { +0 333 hsbw +0 102 hstem +88 49 vstem +240 48 vstem +42 0 rmoveto +46 0 rlineto +-2 -54 -17 -29 -34 -15 rrcurveto +21 -34 rlineto +61 28 20 43 0 82 rrcurveto +0 81 rlineto +-95 0 rlineto +0 -102 rlineto +closepath +152 0 rmoveto +46 0 rlineto +-3 -54 -17 -29 -34 -15 rrcurveto +22 -34 rlineto +59 28 21 43 0 82 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/perthousand { +0 1000 hsbw +-26 60 hstem +289 439 hstem +18 72 vstem +156 65 vstem +226 72 vstem +373 72 vstem +450 64 vstem +581 72 vstem +702 72 vstem +910 72 vstem +156 -26 rmoveto +65 0 rlineto +293 754 rlineto +-64 0 rlineto +-294 -754 rlineto +closepath +-138 563 rmoveto +0 -134 57 -57 84 0 rrcurveto +94 0 45 65 0 128 rrcurveto +0 125 -58 58 -82 0 rrcurveto +-84 0 -56 -56 0 -129 rrcurveto +closepath +72 -4 rmoveto +0 74 7 55 62 0 rrcurveto +57 0 10 -55 0 -73 rrcurveto +0 -75 -9 -52 -56 0 rrcurveto +-43 0 -28 26 0 100 rrcurveto +closepath +283 -369 rmoveto +0 -134 57 -56 83 0 rrcurveto +94 0 46 64 0 128 rrcurveto +0 126 -59 58 -82 0 rrcurveto +-84 0 -55 -57 0 -129 rrcurveto +closepath +72 -4 rmoveto +0 73 7 56 61 0 rrcurveto +57 0 11 -54 0 -74 rrcurveto +0 -74 -7 -53 -59 0 rrcurveto +-43 0 -27 27 0 99 rrcurveto +closepath +257 4 rmoveto +0 -134 57 -56 83 0 rrcurveto +96 0 44 64 0 128 rrcurveto +0 126 -57 58 -84 0 rrcurveto +-84 0 -55 -57 0 -129 rrcurveto +closepath +72 -4 rmoveto +0 73 7 56 61 0 rrcurveto +60 0 8 -53 0 -75 rrcurveto +0 -74 -7 -53 -59 0 rrcurveto +-42 0 -28 27 0 99 rrcurveto +closepath +endchar } ND +/Acircumflex { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +843 53 hstem +-1 100 vstem +168 102 279 89 378 100 vstem3 +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +119 549 rmoveto +54 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-106 -136 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Ecircumflex { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +843 53 hstem +78 96 189 90 295 94 vstem3 +399 100 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +266 843 rmoveto +54 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-106 -136 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Aacute { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +760 136 hstem +-1 100 vstem +264 73 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +59 466 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/Edieresis { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +760 100 hstem +79 95 vstem +208 91 vstem +390 91 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +129 760 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Egrave { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +760 136 hstem +79 95 vstem +344 71 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +336 760 rmoveto +-66 136 rlineto +-118 0 rlineto +113 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/Iacute { +0 278 hsbw +0 20 hstem +696 20 hstem +760 136 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-24 760 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/Icircumflex { +0 278 hsbw +0 20 hstem +696 20 hstem +843 53 hstem +-18 103 93 91 194 99 vstem3 +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +47 843 rmoveto +54 -83 rlineto +99 0 rlineto +-109 136 rlineto +-94 0 rlineto +-106 -136 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Idieresis { +0 278 hsbw +0 20 hstem +696 20 hstem +760 100 hstem +2 92 vstem +184 92 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-91 760 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Igrave { +0 278 hsbw +0 20 hstem +696 20 hstem +760 136 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +117 760 rmoveto +-66 136 rlineto +-118 0 rlineto +113 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/Oacute { +0 778 hsbw +-12 81 hstem +647 82 hstem +760 136 hstem +48 98 vstem +331 72 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +185 413 rmoveto +72 0 rlineto +108 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/Ocircumflex { +0 778 hsbw +-12 81 hstem +647 82 hstem +843 53 hstem +48 98 vstem +234 100 344 89 443 100 vstem3 +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +244 496 rmoveto +53 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-105 -136 rlineto +100 0 rlineto +56 83 rlineto +closepath +endchar } ND +/Ograve { +0 778 hsbw +-12 81 hstem +647 82 hstem +760 136 hstem +48 98 vstem +376 71 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +301 413 rmoveto +-66 136 rlineto +-117 0 rlineto +112 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/Uacute { +0 722 hsbw +-12 85 hstem +696 20 hstem +760 136 hstem +79 94 vstem +300 73 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-247 44 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/Ucircumflex { +0 722 hsbw +-12 85 hstem +696 20 hstem +843 53 hstem +79 94 vstem +204 100 314 89 413 100 vstem3 +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-188 127 rmoveto +54 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-105 -136 rlineto +100 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Ugrave { +0 722 hsbw +-12 85 hstem +696 20 hstem +760 136 hstem +79 94 vstem +346 71 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-130 44 rmoveto +-66 136 rlineto +-118 0 rlineto +113 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/dotlessi { +0 278 hsbw +0 20 hstem +499 20 hstem +97 88 vstem +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/circumflex { +0 333 hsbw +666 54 hstem +12 103 124 87 222 99 vstem3 +168 666 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/tilde { +0 333 hsbw +642 65 hstem +3 65 vstem +267 63 vstem +3 595 rmoveto +65 0 rlineto +0 26 13 21 24 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +54 0 40 36 2 75 rrcurveto +-63 0 rlineto +-6 -34 -9 -8 -21 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-63 0 -37 -47 0 -65 rrcurveto +closepath +endchar } ND +/macron { +0 333 hsbw +599 72 hstem +14 305 vstem +14 599 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/breve { +0 333 hsbw +588 61 hstem +695 20 hstem +22 61 vstem +251 60 vstem +251 715 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -27 22 -8 44 rrcurveto +-61 0 rlineto +10 -83 51 -44 84 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/dotaccent { +0 333 hsbw +583 109 hstem +112 109 vstem +112 583 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/ring { +0 333 hsbw +562 37 hstem +705 36 hstem +79 37 vstem +220 35 vstem +79 653 rmoveto +0 -52 40 -39 48 0 rrcurveto +48 0 40 39 0 50 rrcurveto +0 49 -40 41 -48 0 rrcurveto +-48 0 -40 -40 0 -48 rrcurveto +closepath +37 0 rmoveto +0 28 24 24 28 0 rrcurveto +28 0 24 -24 0 -29 rrcurveto +0 -30 -24 -23 -28 0 rrcurveto +-28 0 -24 23 0 31 rrcurveto +closepath +endchar } ND +/cedilla { +0 333 hsbw +-206 61 hstem +-75 86 hstem +182 82 vstem +105 -75 rmoveto +42 0 35 -1 0 -32 rrcurveto +0 -30 -35 -7 -43 0 rrcurveto +-46 0 rlineto +-6 -55 rlineto +20 -4 24 -2 27 0 rrcurveto +93 0 48 45 0 48 rrcurveto +0 35 -28 31 -56 6 rrcurveto +16 52 rlineto +-65 0 rlineto +-26 -86 rlineto +closepath +endchar } ND +/hungarumlaut { +0 333 hsbw +583 137 hstem +28 71 vstem +198 73 vstem +28 583 rmoveto +71 0 rlineto +103 137 rlineto +-115 0 rlineto +-59 -137 rlineto +closepath +170 0 rmoveto +73 0 rlineto +102 137 rlineto +-113 0 rlineto +-62 -137 rlineto +closepath +endchar } ND +/ogonek { +0 333 hsbw +-208 65 hstem +89 62 vstem +109 12 rmoveto +-14 -46 -6 -38 0 -28 rrcurveto +0 -65 43 -43 64 0 rrcurveto +29 0 44 13 34 17 rrcurveto +0 58 rlineto +-30 -15 -27 -8 -25 0 rrcurveto +-40 0 -30 30 0 45 rrcurveto +0 24 6 27 13 29 rrcurveto +-61 0 rlineto +closepath +endchar } ND +/caron { +0 333 hsbw +583 54 hstem +700 20 hstem +20 100 130 89 229 100 vstem3 +175 637 rmoveto +-55 83 rlineto +-100 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/Lslash { +0 556 hsbw +0 84 hstem +276 440 hstem +71 95 vstem +71 276 rmoveto +0 -276 rlineto +450 0 rlineto +0 84 rlineto +-355 0 rlineto +0 273 rlineto +162 137 rlineto +0 82 rlineto +-162 -138 rlineto +0 278 rlineto +-95 0 rlineto +0 -358 rlineto +-71 -61 rlineto +0 -81 rlineto +71 60 rlineto +closepath +endchar } ND +/lslash { +0 222 hsbw +0 432 hstem +696 20 hstem +65 87 vstem +65 280 rmoveto +0 -280 rlineto +87 0 rlineto +0 355 rlineto +66 56 rlineto +0 77 rlineto +-66 -56 rlineto +0 284 rlineto +-87 0 rlineto +0 -359 rlineto +-64 -53 rlineto +0 -77 rlineto +64 53 rlineto +closepath +endchar } ND +/Scaron { +0 667 hsbw +-12 85 hstem +645 83 hstem +757 54 hstem +874 20 hstem +72 92 vstem +270 93 vstem +374 99 vstem +523 92 vstem +45 230 rmoveto +2 -154 133 -88 170 0 rrcurveto +136 0 129 89 0 125 rrcurveto +0 132 -125 51 -155 38 rrcurveto +-94 23 -77 10 0 81 rrcurveto +0 60 49 48 115 0 rrcurveto +110 0 54 -48 10 -90 rrcurveto +91 7 rlineto +-6 134 -121 80 -142 0 rrcurveto +-128 0 -124 -77 0 -120 rrcurveto +0 -116 111 -51 128 -34 rrcurveto +113 -28 99 -21 0 -87 rrcurveto +0 -81 -88 -40 -89 0 rrcurveto +-109 0 -90 52 -13 113 rrcurveto +-89 -8 rlineto +closepath +275 581 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +93 0 rlineto +110 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/scaron { +0 500 hsbw +-12 73 hstem +458 72 hstem +583 54 hstem +700 20 hstem +45 85 vstem +197 94 vstem +371 90 vstem +31 155 rmoveto +18 -111 68 -56 135 0 rrcurveto +105 0 104 64 0 100 rrcurveto +0 109 -79 18 -130 35 rrcurveto +-20 7 -18 5 -14 3 rrcurveto +-47 10 -23 17 0 35 rrcurveto +0 36 31 31 82 0 rrcurveto +68 0 37 -32 8 -53 rrcurveto +86 12 rlineto +-20 106 -83 39 -103 0 rrcurveto +-106 0 -85 -55 0 -94 rrcurveto +0 -103 79 -25 131 -33 rrcurveto +75 -19 41 -4 0 -54 rrcurveto +0 -44 -38 -38 -81 0 rrcurveto +-80 0 -45 37 -9 70 rrcurveto +-87 -13 rlineto +closepath +217 482 rmoveto +-56 83 rlineto +-100 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/Zcaron { +0 611 hsbw +0 84 hstem +631 85 hstem +757 54 hstem +874 20 hstem +20 109 vstem +154 101 vstem +260 94 vstem +461 113 vstem +20 0 rmoveto +566 0 rlineto +0 84 rlineto +-457 0 rlineto +43 51 rlineto +402 496 rlineto +0 85 rlineto +-512 0 rlineto +0 -85 rlineto +399 0 rlineto +-24 -24 -24 -29 -26 -32 rrcurveto +-367 -458 rlineto +0 -88 rlineto +closepath +290 811 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +94 0 rlineto +109 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/zcaron { +0 500 hsbw +0 76 hstem +450 69 hstem +583 54 hstem +700 20 hstem +128 351 vstem +20 0 rmoveto +459 0 rlineto +0 76 rlineto +-240 0 rlineto +-35 0 -37 -2 -39 -3 rrcurveto +54 60 rlineto +281 329 rlineto +0 59 rlineto +-424 0 rlineto +0 -72 rlineto +211 0 rlineto +28 0 34 1 38 2 rrcurveto +-330 -379 rlineto +0 -71 rlineto +closepath +245 637 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +94 0 rlineto +109 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/brokenbar { +0 260 hsbw +-210 386 hstem +342 386 hstem +92 76 vstem +168 728 rmoveto +-76 0 rlineto +0 -386 rlineto +76 0 rlineto +0 386 rlineto +closepath +0 -552 rmoveto +-76 0 rlineto +0 -386 rlineto +76 0 rlineto +0 386 rlineto +closepath +endchar } ND +/Eth { +0 722 hsbw +0 84 326 64 632 84 hstem3 +77 95 vstem +571 98 vstem +77 0 rmoveto +258 0 rlineto +245 0 89 147 0 215 rrcurveto +0 224 -100 130 -245 0 rrcurveto +-247 0 rlineto +0 -326 rlineto +-78 0 rlineto +0 -64 rlineto +78 0 rlineto +0 -326 rlineto +closepath +95 84 rmoveto +0 242 rlineto +197 0 rlineto +0 64 rlineto +-197 0 rlineto +0 241 rlineto +150 0 rlineto +188 0 61 -93 0 -175 rrcurveto +0 -194 -28 -85 -218 0 rrcurveto +-153 0 rlineto +closepath +endchar } ND +/eth { +0 556 hsbw +-12 72 hstem +451 68 hstem +532 184 hstem +36 89 vstem +150 106 vstem +425 91 vstem +150 716 rmoveto +36 -25 33 -27 32 -29 rrcurveto +-116 -53 rlineto +21 -50 rlineto +135 62 rlineto +33 -39 12 -19 24 -46 rrcurveto +-43 22 -23 7 -38 0 rrcurveto +-126 0 -94 -97 0 -170 rrcurveto +0 -163 91 -101 148 0 rrcurveto +140 0 101 102 0 164 rrcurveto +0 128 -52 123 -104 120 rrcurveto +84 41 rlineto +-22 50 rlineto +-105 -50 rlineto +-17 15 -20 17 -24 18 rrcurveto +-106 0 rlineto +closepath +275 -458 rmoveto +0 -130 -68 -68 -82 0 rrcurveto +-86 0 -64 63 0 127 rrcurveto +0 136 61 65 86 0 rrcurveto +85 0 68 -68 0 -125 rrcurveto +closepath +endchar } ND +/Yacute { +0 667 hsbw +0 379 hstem +696 20 hstem +760 136 hstem +3 120 293 81 549 110 vstem3 +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +-8 760 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/yacute { +0 500 hsbw +-210 85 hstem +499 20 hstem +583 137 hstem +16 95 vstem +205 73 vstem +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +143 783 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Thorn { +0 667 hsbw +0 230 hstem +486 230 hstem +77 95 vstem +526 98 vstem +77 0 rmoveto +95 0 rlineto +0 146 rlineto +183 0 rlineto +202 0 67 95 0 122 rrcurveto +0 137 -108 70 -169 0 rrcurveto +-175 0 rlineto +0 146 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +95 230 rmoveto +0 256 rlineto +183 0 rlineto +117 0 54 -35 0 -91 rrcurveto +0 -83 -47 -47 -122 0 rrcurveto +-185 0 rlineto +closepath +endchar } ND +/thorn { +0 556 hsbw +-199 20 hstem +-12 73 hstem +461 69 hstem +696 20 hstem +66 80 vstem +426 90 vstem +66 -199 rmoveto +88 0 rlineto +0 253 rlineto +45 -50 37 -16 55 0 rrcurveto +129 0 96 131 0 144 rrcurveto +0 136 -82 131 -138 0 rrcurveto +-59 0 -36 -17 -47 -49 rrcurveto +0 252 rlineto +-88 0 rlineto +0 -915 rlineto +closepath +80 455 rmoveto +0 133 67 72 75 0 rrcurveto +76 0 62 -65 0 -132 rrcurveto +0 -139 -64 -64 -78 0 rrcurveto +-76 0 -62 61 0 134 rrcurveto +closepath +endchar } ND +/minus { +0 584 hsbw +312 82 hstem +56 472 vstem +528 312 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +endchar } ND +/multiply { +0 584 hsbw +141 20 hstem +294 119 hstem +232 119 vstem +79 200 rmoveto +59 -59 rlineto +154 153 rlineto +153 -153 rlineto +59 60 rlineto +-153 153 rlineto +152 153 rlineto +-58 59 rlineto +-153 -153 rlineto +-153 153 rlineto +-60 -59 rlineto +153 -153 rlineto +-153 -154 rlineto +closepath +endchar } ND +/onesuperior { +0 333 hsbw +358 367 hstem +162 70 vstem +162 358 rmoveto +70 0 rlineto +0 367 rlineto +-52 0 rlineto +-31 -40 -56 -39 -41 -13 rrcurveto +0 -60 rlineto +40 10 36 19 34 26 rrcurveto +0 -270 rlineto +closepath +endchar } ND +/twosuperior { +0 333 hsbw +358 59 hstem +667 58 hstem +238 76 vstem +12 358 rmoveto +304 0 rlineto +0 59 rlineto +-188 0 rlineto +11 12 19 15 28 20 rrcurveto +85 60 43 30 0 71 rrcurveto +0 56 -44 44 -98 0 rrcurveto +-88 0 -42 -34 -20 -72 rrcurveto +74 -8 rlineto +13 44 18 12 43 0 rrcurveto +45 0 23 -22 0 -32 rrcurveto +0 -46 -45 -18 -57 -42 rrcurveto +-57 -42 -61 -49 -6 -58 rrcurveto +closepath +endchar } ND +/threesuperior { +0 333 hsbw +349 57 hstem +524 53 hstem +670 55 hstem +222 76 vstem +16 454 rmoveto +13 -68 47 -37 91 0 rrcurveto +94 0 54 53 0 60 rrcurveto +0 44 -27 34 -57 15 rrcurveto +44 12 23 30 0 36 rrcurveto +0 52 -41 40 -93 0 rrcurveto +-79 0 -35 -24 -26 -69 rrcurveto +70 -11 rlineto +14 37 18 12 38 0 rrcurveto +37 0 21 -19 0 -24 rrcurveto +0 -28 -24 -22 -52 0 rrcurveto +-11 -53 rlineto +27 0 rlineto +56 0 21 -20 0 -33 rrcurveto +0 -36 -31 -29 -45 0 rrcurveto +-38 0 -25 14 -13 41 rrcurveto +-71 -7 rlineto +closepath +endchar } ND +/onehalf { +0 834 hsbw +-15 59 hstem +293 435 hstem +162 70 vstem +649 77 vstem +738 76 vstem +111 -28 rmoveto +77 0 rlineto +538 756 rlineto +-77 0 rlineto +-538 -756 rlineto +closepath +51 386 rmoveto +70 0 rlineto +0 367 rlineto +-52 0 rlineto +-31 -40 -56 -39 -41 -13 rrcurveto +0 -60 rlineto +40 10 36 19 34 26 rrcurveto +0 -270 rlineto +closepath +350 -373 rmoveto +304 0 rlineto +0 59 rlineto +-188 0 rlineto +11 11 19 16 28 20 rrcurveto +84 60 44 30 0 71 rrcurveto +0 56 -44 44 -98 0 rrcurveto +-87 0 -43 -34 -20 -72 rrcurveto +74 -8 rlineto +13 44 18 11 43 0 rrcurveto +45 0 23 -21 0 -32 rrcurveto +0 -46 -46 -19 -55 -42 rrcurveto +-57 -43 -61 -46 -7 -59 rrcurveto +closepath +endchar } ND +/onequarter { +0 834 hsbw +-15 128 hstem +241 487 hstem +162 70 vstem +511 75 vstem +698 71 vstem +123 -28 rmoveto +77 0 rlineto +537 756 rlineto +-76 0 rlineto +-538 -756 rlineto +closepath +39 386 rmoveto +70 0 rlineto +0 367 rlineto +-52 0 rlineto +-31 -40 -56 -39 -41 -13 rrcurveto +0 -60 rlineto +40 10 36 19 34 26 rrcurveto +0 -270 rlineto +closepath +536 -373 rmoveto +71 0 rlineto +0 75 rlineto +50 0 rlineto +0 53 rlineto +-50 0 rlineto +0 239 rlineto +-60 0 rlineto +-198 -232 rlineto +0 -60 rlineto +187 0 rlineto +0 -75 rlineto +closepath +0 128 rmoveto +-112 0 rlineto +112 128 rlineto +0 -128 rlineto +closepath +endchar } ND +/threequarters { +0 834 hsbw +-15 128 hstem +349 57 hstem +407 321 hstem +123 77 vstem +222 76 vstem +511 75 vstem +698 71 vstem +123 -28 rmoveto +77 0 rlineto +537 756 rlineto +-76 0 rlineto +-538 -756 rlineto +closepath +-107 482 rmoveto +13 -68 47 -37 91 0 rrcurveto +94 0 54 53 0 60 rrcurveto +0 44 -27 34 -57 15 rrcurveto +44 12 23 30 0 36 rrcurveto +0 52 -41 40 -93 0 rrcurveto +-79 0 -35 -24 -26 -69 rrcurveto +70 -11 rlineto +14 37 18 12 38 0 rrcurveto +37 0 21 -19 0 -24 rrcurveto +0 -28 -24 -22 -52 0 rrcurveto +-11 -52 rlineto +28 0 rlineto +54 0 22 -21 0 -33 rrcurveto +0 -36 -31 -29 -45 0 rrcurveto +-38 0 -25 14 -13 41 rrcurveto +-71 -7 rlineto +closepath +682 -469 rmoveto +71 0 rlineto +0 75 rlineto +50 0 rlineto +0 53 rlineto +-50 0 rlineto +0 239 rlineto +-61 0 rlineto +-197 -232 rlineto +0 -60 rlineto +187 0 rlineto +0 -75 rlineto +closepath +0 128 rmoveto +-112 0 rlineto +112 128 rlineto +0 -128 rlineto +closepath +endchar } ND +/franc { +0 556 hsbw +0 193 hstem +325 85 hstem +631 85 hstem +82 95 vstem +82 120 rmoveto +0 -120 rlineto +95 0 rlineto +0 120 rlineto +154 0 rlineto +0 73 rlineto +-154 0 rlineto +0 132 rlineto +277 0 rlineto +0 85 rlineto +-277 0 rlineto +0 221 rlineto +329 0 rlineto +0 85 rlineto +-424 0 rlineto +0 -523 rlineto +-82 0 rlineto +0 -73 rlineto +82 0 rlineto +closepath +endchar } ND +/Gbreve { +0 778 hsbw +-12 85 hstem +281 84 hstem +647 81 hstem +760 60 hstem +53 98 vstem +279 60 vstem +508 60 vstem +623 92 vstem +412 281 rmoveto +211 0 rlineto +0 -134 rlineto +-42 -35 -86 -39 -81 0 rrcurveto +-153 0 -110 117 0 170 rrcurveto +0 154 94 133 167 0 rrcurveto +100 0 75 -49 32 -106 rrcurveto +86 24 rlineto +-39 145 -113 67 -141 0 rrcurveto +-215 0 -144 -171 0 -203 rrcurveto +0 -207 159 -159 207 0 rrcurveto +104 0 100 37 92 75 rrcurveto +0 265 rlineto +-303 0 rlineto +0 -84 rlineto +closepath +96 605 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +10 -82 51 -44 84 0 rrcurveto +82 0 52 44 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/gbreve { +0 556 hsbw +-210 72 hstem +0 73 hstem +458 72 hstem +588 61 hstem +695 20 hstem +32 91 vstem +134 60 vstem +408 81 vstem +50 -43 rmoveto +-3 -112 84 -55 124 0 rrcurveto +161 0 73 86 0 194 rrcurveto +0 449 rlineto +-81 0 rlineto +0 -63 rlineto +-40 49 -50 25 -61 0 rrcurveto +-143 0 -82 -131 0 -137 rrcurveto +0 -144 81 -118 143 0 rrcurveto +57 0 48 22 39 46 rrcurveto +0 -152 -15 -54 -131 0 rrcurveto +-65 0 -44 20 -10 62 rrcurveto +-85 13 rlineto +closepath +73 312 rmoveto +0 124 62 65 78 0 rrcurveto +80 0 64 -66 0 -126 rrcurveto +0 -134 -62 -59 -80 0 rrcurveto +-82 0 -60 60 0 136 rrcurveto +closepath +239 446 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -26 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/Idot { +0 278 hsbw +0 20 hstem +696 20 hstem +760 109 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-7 760 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/Scedilla { +0 667 hsbw +-201 61 hstem +-12 28 hstem +645 83 hstem +72 92 vstem +348 81 vstem +523 92 vstem +45 230 rmoveto +2 -154 133 -88 170 0 rrcurveto +136 0 129 89 0 125 rrcurveto +0 132 -125 51 -155 38 rrcurveto +-94 23 -77 10 0 81 rrcurveto +0 60 49 48 115 0 rrcurveto +110 0 54 -48 10 -90 rrcurveto +91 7 rlineto +-6 134 -121 80 -142 0 rrcurveto +-128 0 -124 -77 0 -120 rrcurveto +0 -116 111 -51 128 -34 rrcurveto +113 -28 99 -21 0 -87 rrcurveto +0 -81 -88 -40 -89 0 rrcurveto +-109 0 -90 52 -13 113 rrcurveto +-89 -8 rlineto +closepath +226 -300 rmoveto +41 0 36 -1 0 -32 rrcurveto +0 -29 -36 -8 -43 0 rrcurveto +-46 0 rlineto +-5 -55 rlineto +20 -4 23 -2 27 0 rrcurveto +94 0 47 44 0 49 rrcurveto +0 34 -29 32 -54 6 rrcurveto +16 52 rlineto +-66 0 rlineto +-25 -86 rlineto +closepath +endchar } ND +/scedilla { +0 500 hsbw +-196 61 hstem +-12 33 hstem +458 72 hstem +45 85 vstem +260 81 vstem +371 90 vstem +31 155 rmoveto +18 -111 68 -56 135 0 rrcurveto +105 0 104 64 0 100 rrcurveto +0 109 -79 18 -130 35 rrcurveto +-20 7 -18 5 -14 3 rrcurveto +-47 10 -23 17 0 35 rrcurveto +0 36 31 31 82 0 rrcurveto +68 0 37 -32 8 -53 rrcurveto +86 12 rlineto +-20 106 -83 39 -103 0 rrcurveto +-106 0 -85 -55 0 -94 rrcurveto +0 -103 79 -25 131 -33 rrcurveto +75 -19 41 -4 0 -54 rrcurveto +0 -44 -38 -38 -81 0 rrcurveto +-80 0 -45 37 -9 70 rrcurveto +-87 -13 rlineto +closepath +152 -220 rmoveto +41 0 36 -1 0 -32 rrcurveto +0 -30 -36 -7 -43 0 rrcurveto +-46 0 rlineto +-5 -55 rlineto +20 -4 23 -2 27 0 rrcurveto +94 0 47 44 0 49 rrcurveto +0 34 -29 32 -54 6 rrcurveto +16 52 rlineto +-66 0 rlineto +-25 -86 rlineto +closepath +endchar } ND +/Cacute { +0 722 hsbw +-12 81 hstem +647 81 hstem +760 136 hstem +50 97 vstem +324 72 vstem +588 251 rmoveto +-27 -120 -77 -62 -106 0 rrcurveto +-147 0 -84 135 0 160 rrcurveto +0 141 80 142 159 0 rrcurveto +96 0 61 -45 34 -104 rrcurveto +93 22 rlineto +-38 132 -102 76 -142 0 rrcurveto +-198 0 -140 -159 0 -206 rrcurveto +0 -197 113 -178 223 0 rrcurveto +149 0 108 83 40 156 rrcurveto +-95 24 rlineto +closepath +-264 509 rmoveto +72 0 rlineto +108 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/cacute { +0 500 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +39 90 vstem +207 73 vstem +404 190 rmoveto +-12 -88 -49 -41 -69 0 rrcurveto +-87 0 -58 59 0 140 rrcurveto +0 137 60 61 90 0 rrcurveto +58 0 44 -36 16 -69 rrcurveto +85 13 rlineto +-20 105 -74 59 -113 0 rrcurveto +-142 0 -94 -121 0 -152 rrcurveto +0 -174 93 -95 143 0 rrcurveto +113 0 84 71 19 120 rrcurveto +-87 11 rlineto +closepath +-197 393 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Ccaron { +0 722 hsbw +-12 81 hstem +647 81 hstem +757 54 hstem +874 20 hstem +50 97 vstem +230 102 341 89 440 100 vstem3 +588 251 rmoveto +-27 -120 -77 -62 -106 0 rrcurveto +-147 0 -84 135 0 160 rrcurveto +0 141 80 142 159 0 rrcurveto +96 0 61 -45 34 -104 rrcurveto +93 22 rlineto +-38 132 -102 76 -142 0 rrcurveto +-198 0 -140 -159 0 -206 rrcurveto +0 -197 113 -178 223 0 rrcurveto +149 0 108 83 40 156 rrcurveto +-95 24 rlineto +closepath +-202 560 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/ccaron { +0 500 hsbw +-12 73 hstem +458 72 hstem +583 54 hstem +700 20 hstem +39 90 vstem +224 93 vstem +328 99 vstem +404 190 rmoveto +-12 -88 -49 -41 -69 0 rrcurveto +-87 0 -58 59 0 140 rrcurveto +0 137 60 61 90 0 rrcurveto +58 0 44 -36 16 -69 rrcurveto +85 13 rlineto +-20 105 -74 59 -113 0 rrcurveto +-142 0 -94 -121 0 -152 rrcurveto +0 -174 93 -95 143 0 rrcurveto +113 0 84 71 19 120 rrcurveto +-87 11 rlineto +closepath +-130 447 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +93 0 rlineto +110 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/dmacron { +0 556 hsbw +-12 73 hstem +458 72 hstem +595 121 hstem +34 91 vstem +404 80 vstem +396 595 rmoveto +0 -136 rlineto +-30 42 -51 29 -62 0 rrcurveto +-137 0 -82 -132 0 -139 rrcurveto +0 -146 87 -125 136 0 rrcurveto +64 0 48 25 33 52 rrcurveto +0 -65 rlineto +82 0 rlineto +0 595 rlineto +71 0 rlineto +0 65 rlineto +-71 0 rlineto +0 56 rlineto +-88 0 rlineto +0 -56 rlineto +-168 0 rlineto +0 -65 rlineto +168 0 rlineto +closepath +-271 -336 rmoveto +0 137 58 62 79 0 rrcurveto +80 0 62 -65 0 -142 rrcurveto +0 -128 -62 -62 -76 0 rrcurveto +-78 0 -63 64 0 134 rrcurveto +closepath +endchar } ND +/overscore { +0 552 hsbw +765 63 hstem +-15 582 vstem +-15 765 rmoveto +582 0 rlineto +0 63 rlineto +-582 0 rlineto +0 -63 rlineto +closepath +endchar } ND +/middot { +0 333 hsbw +311 100 hstem +243 100 vstem +243 311 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Abreve { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +760 60 hstem +-1 100 vstem +188 60 vstem +273 102 vstem +416 60 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +211 592 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -27 22 -8 44 rrcurveto +-60 0 rlineto +9 -82 52 -44 83 0 rrcurveto +82 0 52 44 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/abreve { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +588 61 hstem +695 20 hstem +36 94 vstem +142 60 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-26 455 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/Aogonek { +0 667 hsbw +-203 65 hstem +0 17 hstem +217 77 hstem +641 75 hstem +-1 100 vstem +273 102 vstem +542 62 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +357 -277 rmoveto +-14 -46 -6 -38 0 -28 rrcurveto +0 -66 43 -42 64 0 rrcurveto +29 0 43 12 35 18 rrcurveto +0 58 rlineto +-30 -15 -28 -8 -24 0 rrcurveto +-40 0 -30 30 0 45 rrcurveto +0 24 6 27 13 29 rrcurveto +-61 0 rlineto +closepath +endchar } ND +/aogonek { +0 556 hsbw +-196 66 hstem +-12 69 hstem +260 69 hstem +458 72 hstem +36 94 vstem +405 62 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +28 -236 rmoveto +-14 -46 -6 -38 0 -28 rrcurveto +0 -65 43 -43 64 0 rrcurveto +29 0 44 13 34 17 rrcurveto +0 58 rlineto +-30 -14 -27 -8 -25 0 rrcurveto +-40 0 -30 30 0 44 rrcurveto +0 24 6 27 13 29 rrcurveto +-61 0 rlineto +closepath +endchar } ND +/Dcaron { +0 722 hsbw +0 84 hstem +631 85 hstem +757 54 hstem +874 20 hstem +77 95 vstem +243 93 vstem +347 99 vstem +571 98 vstem +77 0 rmoveto +258 0 rlineto +208 0 126 152 0 210 rrcurveto +0 224 -100 130 -245 0 rrcurveto +-247 0 rlineto +0 -716 rlineto +closepath +95 84 rmoveto +0 547 rlineto +150 0 rlineto +191 0 58 -56 0 -212 rrcurveto +0 -191 -29 -88 -217 0 rrcurveto +-153 0 rlineto +closepath +121 727 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +93 0 rlineto +110 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/dcaron { +0 615 hsbw +-12 73 hstem +458 72 hstem +625 91 hstem +35 90 vstem +404 80 vstem +571 45 vstem +526 625 rmoveto +45 0 rlineto +-2 -54 -15 -25 -33 -14 rrcurveto +22 -33 rlineto +50 21 23 39 0 66 rrcurveto +0 91 rlineto +-90 0 rlineto +0 -91 rlineto +closepath +-123 -625 rmoveto +81 0 rlineto +0 716 rlineto +-87 0 rlineto +0 -257 rlineto +-31 42 -50 29 -62 0 rrcurveto +-138 0 -81 -131 0 -140 rrcurveto +0 -146 87 -125 136 0 rrcurveto +64 0 48 25 33 52 rrcurveto +0 -65 rlineto +closepath +-278 259 rmoveto +0 137 59 62 78 0 rrcurveto +80 0 62 -65 0 -142 rrcurveto +0 -128 -61 -62 -77 0 rrcurveto +-76 0 -65 64 0 134 rrcurveto +closepath +endchar } ND +/Dslash { +0 722 hsbw +0 84 326 64 632 84 hstem3 +77 95 vstem +571 98 vstem +77 0 rmoveto +258 0 rlineto +245 0 89 147 0 215 rrcurveto +0 224 -100 130 -245 0 rrcurveto +-247 0 rlineto +0 -326 rlineto +-78 0 rlineto +0 -64 rlineto +78 0 rlineto +0 -326 rlineto +closepath +95 84 rmoveto +0 242 rlineto +197 0 rlineto +0 64 rlineto +-197 0 rlineto +0 241 rlineto +150 0 rlineto +188 0 61 -93 0 -175 rrcurveto +0 -194 -28 -85 -218 0 rrcurveto +-153 0 rlineto +closepath +endchar } ND +/Eogonek { +0 667 hsbw +-208 65 hstem +0 12 hstem +328 84 hstem +631 85 hstem +79 95 vstem +398 61 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +339 12 rmoveto +-14 -46 -6 -38 0 -28 rrcurveto +0 -65 43 -43 64 0 rrcurveto +29 0 43 13 35 17 rrcurveto +0 58 rlineto +-30 -15 -28 -8 -24 0 rrcurveto +-40 0 -31 30 0 45 rrcurveto +0 24 6 27 14 29 rrcurveto +-61 0 rlineto +closepath +endchar } ND +/eogonek { +0 556 hsbw +-208 65 hstem +-12 24 hstem +237 72 hstem +458 72 hstem +37 90 244 61 422 90 vstem3 +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +132 -297 rmoveto +-14 -46 -6 -38 0 -28 rrcurveto +0 -65 43 -43 64 0 rrcurveto +29 0 44 13 34 17 rrcurveto +0 58 rlineto +-30 -15 -27 -8 -25 0 rrcurveto +-40 0 -30 30 0 45 rrcurveto +0 24 6 27 13 29 rrcurveto +-61 0 rlineto +closepath +endchar } ND +/Ecaron { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +757 54 hstem +874 20 hstem +79 95 vstem +275 94 vstem +379 100 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +246 811 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/ecaron { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +583 54 hstem +700 20 hstem +37 90 132 97 234 90 vstem3 +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +153 328 rmoveto +-56 83 rlineto +-100 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/Lacute { +0 556 hsbw +0 84 hstem +696 20 hstem +760 136 hstem +73 95 vstem +213 116 vstem +73 0 rmoveto +448 0 rlineto +0 84 rlineto +-353 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +75 760 rmoveto +73 0 rlineto +108 136 rlineto +-116 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/lacute { +0 222 hsbw +0 20 hstem +696 20 hstem +752 137 hstem +64 88 vstem +64 0 rmoveto +88 0 rlineto +0 716 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +-32 752 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Lcaron { +0 556 hsbw +0 84 hstem +616 100 hstem +73 95 vstem +397 51 vstem +348 616 rmoveto +49 0 rlineto +-2 -60 -16 -28 -37 -16 rrcurveto +24 -38 rlineto +57 25 25 43 0 74 rrcurveto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +-275 -616 rmoveto +448 0 rlineto +0 84 rlineto +-353 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/lcaron { +0 292 hsbw +0 20 hstem +625 91 hstem +66 88 vstem +246 45 vstem +201 625 rmoveto +45 0 rlineto +-2 -54 -15 -25 -33 -14 rrcurveto +22 -33 rlineto +50 21 23 39 0 66 rrcurveto +0 91 rlineto +-90 0 rlineto +0 -91 rlineto +closepath +-135 -625 rmoveto +88 0 rlineto +0 716 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Ldot { +0 556 hsbw +0 84 hstem +311 100 hstem +696 20 hstem +73 95 vstem +354 100 vstem +73 0 rmoveto +448 0 rlineto +0 84 rlineto +-353 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +281 311 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/ldot { +0 334 hsbw +0 20 311 94 696 20 hstem3 +64 88 vstem +230 100 vstem +64 0 rmoveto +88 0 rlineto +0 716 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +166 311 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Nacute { +0 722 hsbw +0 154 hstem +563 153 hstem +760 136 hstem +76 91 vstem +278 73 vstem +549 91 vstem +76 0 rmoveto +91 0 rlineto +0 563 rlineto +376 -563 rlineto +97 0 rlineto +0 716 rlineto +-91 0 rlineto +0 -562 rlineto +-376 562 rlineto +-97 0 rlineto +0 -716 rlineto +closepath +202 760 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/nacute { +0 556 hsbw +0 445 hstem +454 76 hstem +583 137 hstem +66 79 vstem +219 73 vstem +399 88 vstem +66 0 rmoveto +88 0 rlineto +0 283 rlineto +0 133 62 38 76 0 rrcurveto +72 0 35 -49 0 -90 rrcurveto +0 -315 rlineto +88 0 rlineto +0 319 rlineto +0 149 -65 62 -112 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +153 583 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Ncaron { +0 722 hsbw +0 154 hstem +563 153 hstem +760 53 hstem +876 20 hstem +76 91 vstem +203 100 313 89 412 100 vstem3 +549 91 vstem +76 0 rmoveto +91 0 rlineto +0 563 rlineto +376 -563 rlineto +97 0 rlineto +0 716 rlineto +-91 0 rlineto +0 -562 rlineto +-376 562 rlineto +-97 0 rlineto +0 -716 rlineto +closepath +282 813 rmoveto +-55 83 rlineto +-100 0 rlineto +105 -136 rlineto +94 0 rlineto +110 136 rlineto +-100 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/ncaron { +0 556 hsbw +0 445 hstem +454 76 hstem +583 54 hstem +700 20 hstem +66 79 vstem +235 94 vstem +399 88 vstem +66 0 rmoveto +88 0 rlineto +0 283 rlineto +0 133 62 38 76 0 rrcurveto +72 0 35 -49 0 -90 rrcurveto +0 -315 rlineto +88 0 rlineto +0 319 rlineto +0 149 -65 62 -112 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +220 637 rmoveto +-56 83 rlineto +-100 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/Odblacute { +0 778 hsbw +-12 81 hstem +647 82 hstem +760 136 hstem +48 98 vstem +231 70 vstem +400 74 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +85 413 rmoveto +70 0 rlineto +103 136 rlineto +-114 0 rlineto +-59 -136 rlineto +closepath +169 0 rmoveto +74 0 rlineto +101 136 rlineto +-113 0 rlineto +-62 -136 rlineto +closepath +endchar } ND +/odblacute { +0 556 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +33 91 vstem +138 70 vstem +308 73 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +14 324 rmoveto +70 0 rlineto +104 137 rlineto +-115 0 rlineto +-59 -137 rlineto +closepath +170 0 rmoveto +73 0 rlineto +101 137 rlineto +-112 0 rlineto +-62 -137 rlineto +closepath +endchar } ND +/Racute { +0 722 hsbw +0 400 hstem +637 79 hstem +760 136 hstem +79 94 vstem +246 72 vstem +553 98 vstem +79 0 rmoveto +94 0 rlineto +0 318 rlineto +110 0 rlineto +129 0 18 -68 66 -101 rrcurveto +94 -149 rlineto +119 0 rlineto +-124 195 rlineto +-39 58 -26 40 -71 33 rrcurveto +137 18 65 74 0 103 rrcurveto +0 126 -96 69 -159 0 rrcurveto +-317 0 rlineto +0 -716 rlineto +closepath +94 400 rmoveto +0 237 rlineto +227 0 rlineto +105 0 48 -50 0 -66 rrcurveto +0 -85 -74 -36 -102 0 rrcurveto +-204 0 rlineto +closepath +73 360 rmoveto +72 0 rlineto +108 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/racute { +0 333 hsbw +0 440 hstem +510 20 hstem +583 137 hstem +65 79 vstem +183 115 vstem +65 0 rmoveto +88 0 rlineto +0 271 rlineto +0 77 26 91 73 0 rrcurveto +21 0 21 -7 22 -12 rrcurveto +31 82 rlineto +-31 18 -30 10 -30 0 rrcurveto +-40 0 -32 -17 -40 -73 rrcurveto +0 79 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +53 583 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Rcaron { +0 722 hsbw +0 400 hstem +637 79 hstem +757 54 hstem +874 20 hstem +79 94 vstem +267 93 vstem +371 99 vstem +553 98 vstem +79 0 rmoveto +94 0 rlineto +0 318 rlineto +110 0 rlineto +129 0 18 -68 66 -101 rrcurveto +94 -149 rlineto +119 0 rlineto +-124 195 rlineto +-39 58 -26 40 -71 33 rrcurveto +137 18 65 74 0 103 rrcurveto +0 126 -96 69 -159 0 rrcurveto +-317 0 rlineto +0 -716 rlineto +closepath +94 400 rmoveto +0 237 rlineto +227 0 rlineto +105 0 48 -50 0 -66 rrcurveto +0 -85 -74 -36 -102 0 rrcurveto +-204 0 rlineto +closepath +144 411 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +93 0 rlineto +110 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/rcaron { +0 333 hsbw +0 440 hstem +510 20 hstem +583 54 hstem +700 20 hstem +65 79 vstem +239 99 vstem +65 0 rmoveto +88 0 rlineto +0 271 rlineto +0 77 26 91 73 0 rrcurveto +21 0 21 -7 22 -12 rrcurveto +31 82 rlineto +-31 18 -30 10 -30 0 rrcurveto +-40 0 -32 -17 -40 -73 rrcurveto +0 79 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +120 637 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +94 0 rlineto +109 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/Sacute { +0 667 hsbw +-12 85 hstem +645 83 hstem +760 136 hstem +72 92 vstem +240 73 vstem +523 92 vstem +45 230 rmoveto +2 -154 133 -88 170 0 rrcurveto +136 0 129 89 0 125 rrcurveto +0 132 -125 51 -155 38 rrcurveto +-94 23 -77 10 0 81 rrcurveto +0 60 49 48 115 0 rrcurveto +110 0 54 -48 10 -90 rrcurveto +91 7 rlineto +-6 134 -121 80 -142 0 rrcurveto +-128 0 -124 -77 0 -120 rrcurveto +0 -116 111 -51 128 -34 rrcurveto +113 -28 99 -21 0 -87 rrcurveto +0 -81 -88 -40 -89 0 rrcurveto +-109 0 -90 52 -13 113 rrcurveto +-89 -8 rlineto +closepath +195 530 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/sacute { +0 500 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +45 85 vstem +192 73 vstem +371 90 vstem +31 155 rmoveto +18 -111 68 -56 135 0 rrcurveto +105 0 104 64 0 100 rrcurveto +0 109 -79 18 -130 35 rrcurveto +-20 7 -18 5 -14 3 rrcurveto +-47 10 -23 17 0 35 rrcurveto +0 36 31 31 82 0 rrcurveto +68 0 37 -32 8 -53 rrcurveto +86 12 rlineto +-20 106 -83 39 -103 0 rrcurveto +-106 0 -85 -55 0 -94 rrcurveto +0 -103 79 -25 131 -33 rrcurveto +75 -19 41 -4 0 -54 rrcurveto +0 -44 -38 -38 -81 0 rrcurveto +-80 0 -45 37 -9 70 rrcurveto +-87 -13 rlineto +closepath +161 428 rmoveto +73 0 rlineto +108 137 rlineto +-116 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Tcedilla { +0 611 hsbw +-159 100 hstem +0 20 hstem +631 85 hstem +305 50 vstem +259 0 rmoveto +95 0 rlineto +0 631 rlineto +237 0 rlineto +0 85 rlineto +-568 0 rlineto +0 -85 rlineto +236 0 rlineto +0 -631 rlineto +closepath +-4 -159 rmoveto +50 0 rlineto +-4 -45 -15 -23 -36 -19 rrcurveto +24 -37 rlineto +54 24 27 42 0 58 rrcurveto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/tcedilla { +0 278 hsbw +-149 90 hstem +-7 82 hstem +450 69 hstem +82 87 vstem +179 46 vstem +258 79 rmoveto +-16 -3 -13 -1 -10 0 rrcurveto +-44 0 -6 19 0 53 rrcurveto +0 303 rlineto +89 0 rlineto +0 69 rlineto +-89 0 rlineto +0 181 rlineto +-87 -53 rlineto +0 -128 rlineto +-64 0 rlineto +0 -69 rlineto +64 0 rlineto +0 -298 rlineto +0 -119 24 -40 98 0 rrcurveto +19 0 22 3 26 5 rrcurveto +-13 78 rlineto +closepath +-124 -228 rmoveto +45 0 rlineto +-2 -38 -17 -25 -31 -14 rrcurveto +22 -34 rlineto +50 23 24 43 0 45 rrcurveto +0 90 rlineto +-91 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/Tcaron { +0 611 hsbw +0 20 hstem +631 85 hstem +757 54 hstem +874 20 hstem +152 100 259 95 361 100 vstem3 +259 0 rmoveto +95 0 rlineto +0 631 rlineto +237 0 rlineto +0 85 rlineto +-568 0 rlineto +0 -85 rlineto +236 0 rlineto +0 -631 rlineto +closepath +49 811 rmoveto +-56 83 rlineto +-100 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/tcaron { +0 375 hsbw +-7 82 hstem +450 69 hstem +625 91 hstem +82 87 vstem +328 46 vstem +284 625 rmoveto +44 0 rlineto +-2 -54 -15 -25 -33 -14 rrcurveto +22 -33 rlineto +50 21 24 39 0 66 rrcurveto +0 91 rlineto +-90 0 rlineto +0 -91 rlineto +closepath +-27 -546 rmoveto +-16 -3 -13 -1 -9 0 rrcurveto +-46 0 -4 18 0 54 rrcurveto +0 303 rlineto +88 0 rlineto +0 69 rlineto +-88 0 rlineto +0 181 rlineto +-87 -53 rlineto +0 -128 rlineto +-65 0 rlineto +0 -69 rlineto +65 0 rlineto +0 -298 rlineto +0 -120 25 -39 97 0 rrcurveto +19 0 22 3 25 5 rrcurveto +-13 78 rlineto +closepath +endchar } ND +/Uring { +0 722 hsbw +-12 85 hstem +696 20 hstem +760 36 hstem +903 35 hstem +79 94 vstem +271 38 vstem +412 35 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-276 135 rmoveto +0 -52 39 -39 50 0 rrcurveto +48 0 39 39 0 50 rrcurveto +0 49 -39 40 -49 0 rrcurveto +-47 0 -41 -39 0 -48 rrcurveto +closepath +38 0 rmoveto +0 28 23 24 28 0 rrcurveto +29 0 23 -24 0 -29 rrcurveto +0 -30 -24 -24 -28 0 rrcurveto +-28 0 -23 24 0 31 rrcurveto +closepath +endchar } ND +/uring { +0 556 hsbw +-12 76 hstem +499 20 hstem +562 37 hstem +705 36 hstem +64 88 vstem +187 37 vstem +327 35 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-219 653 rmoveto +0 -52 38 -39 50 0 rrcurveto +48 0 39 39 0 50 rrcurveto +0 49 -39 41 -49 0 rrcurveto +-47 0 -40 -40 0 -48 rrcurveto +closepath +37 0 rmoveto +0 28 23 24 28 0 rrcurveto +29 0 23 -24 0 -29 rrcurveto +0 -30 -24 -23 -28 0 rrcurveto +-28 0 -23 23 0 31 rrcurveto +closepath +endchar } ND +/Udblacute { +0 722 hsbw +-12 85 hstem +696 20 hstem +760 136 hstem +79 94 vstem +227 70 vstem +396 74 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-320 44 rmoveto +70 0 rlineto +103 136 rlineto +-114 0 rlineto +-59 -136 rlineto +closepath +169 0 rmoveto +74 0 rlineto +101 136 rlineto +-113 0 rlineto +-62 -136 rlineto +closepath +endchar } ND +/udblacute { +0 556 hsbw +-12 76 hstem +499 20 hstem +583 137 hstem +64 88 vstem +286 73 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-290 583 rmoveto +71 0 rlineto +103 137 rlineto +-115 0 rlineto +-59 -137 rlineto +closepath +170 0 rmoveto +73 0 rlineto +101 137 rlineto +-112 0 rlineto +-62 -137 rlineto +closepath +endchar } ND +/Zacute { +0 611 hsbw +0 84 hstem +631 85 hstem +760 136 hstem +20 109 vstem +231 73 vstem +461 113 vstem +20 0 rmoveto +566 0 rlineto +0 84 rlineto +-457 0 rlineto +43 51 rlineto +402 496 rlineto +0 85 rlineto +-512 0 rlineto +0 -85 rlineto +399 0 rlineto +-24 -24 -24 -29 -26 -32 rrcurveto +-367 -458 rlineto +0 -88 rlineto +closepath +211 760 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/zacute { +0 500 hsbw +0 76 hstem +450 69 hstem +583 137 hstem +128 351 vstem +20 0 rmoveto +459 0 rlineto +0 76 rlineto +-240 0 rlineto +-35 0 -37 -2 -39 -3 rrcurveto +54 60 rlineto +281 329 rlineto +0 59 rlineto +-424 0 rlineto +0 -72 rlineto +211 0 rlineto +28 0 34 1 38 2 rrcurveto +-330 -379 rlineto +0 -71 rlineto +closepath +171 583 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Zdot { +0 611 hsbw +0 84 hstem +631 85 hstem +760 109 hstem +20 109 vstem +260 109 vstem +461 113 vstem +20 0 rmoveto +566 0 rlineto +0 84 rlineto +-457 0 rlineto +43 51 rlineto +402 496 rlineto +0 85 rlineto +-512 0 rlineto +0 -85 rlineto +399 0 rlineto +-24 -24 -24 -29 -26 -32 rrcurveto +-367 -458 rlineto +0 -88 rlineto +closepath +240 760 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/zdot { +0 500 hsbw +0 76 hstem +450 69 hstem +583 109 hstem +194 109 vstem +20 0 rmoveto +459 0 rlineto +0 76 rlineto +-240 0 rlineto +-35 0 -37 -2 -39 -3 rrcurveto +54 60 rlineto +281 329 rlineto +0 59 rlineto +-424 0 rlineto +0 -72 rlineto +211 0 rlineto +28 0 34 1 38 2 rrcurveto +-330 -379 rlineto +0 -71 rlineto +closepath +174 583 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/Gamma { +0 551 hsbw +0 20 hstem +631 85 hstem +80 95 vstem +80 716 rmoveto +0 -716 rlineto +95 0 rlineto +0 631 rlineto +352 0 rlineto +0 85 rlineto +-447 0 rlineto +closepath +endchar } ND +/Theta { +0 778 hsbw +-12 81 316 84 647 81 hstem3 +46 99 248 282 634 97 vstem3 +47 349 rmoveto +0 -179 142 -182 200 0 rrcurveto +200 0 142 147 0 222 rrcurveto +0 222 -140 150 -201 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 208 105 92 140 0 rrcurveto +142 0 102 -108 0 -182 rrcurveto +0 -179 -100 -109 -145 0 rrcurveto +-150 0 -94 115 0 163 rrcurveto +closepath +103 -31 rmoveto +283 0 rlineto +0 84 rlineto +-283 0 rlineto +0 -84 rlineto +closepath +endchar } ND +/Phi { +0 798 hsbw +-26 185 hstem +567 170 hstem +42 100 354 92 660 96 vstem3 +352 737 rmoveto +0 -88 rlineto +-185 -11 -125 -110 0 -167 rrcurveto +0 -162 120 -114 190 -6 rrcurveto +0 -105 rlineto +94 0 rlineto +0 105 rlineto +182 5 128 107 0 175 rrcurveto +0 154 -109 117 -201 12 rrcurveto +0 88 rlineto +-94 0 rlineto +closepath +0 -170 rmoveto +0 -408 rlineto +-122 2 -90 69 0 132 rrcurveto +0 129 77 72 135 4 rrcurveto +closepath +94 -408 rmoveto +0 408 rlineto +140 0 74 -84 0 -120 rrcurveto +0 -126 -81 -74 -133 -4 rrcurveto +closepath +endchar } ND +/alpha { +0 578 hsbw +-12 73 hstem +458 72 hstem +35 97 vstem +405 73 vstem +451 519 rmoveto +-16 -48 -8 -29 -2 -11 rrcurveto +-44 66 -47 33 -81 0 rrcurveto +-131 0 -87 -98 0 -172 rrcurveto +0 -167 86 -105 131 0 rrcurveto +86 0 56 35 27 72 rrcurveto +7 -31 11 -32 14 -32 rrcurveto +88 0 rlineto +-20 47 -21 86 -22 126 rrcurveto +18 101 21 87 24 72 rrcurveto +-90 0 rlineto +closepath +-183 -61 rmoveto +81 0 56 -66 0 -128 rrcurveto +0 -131 -61 -72 -81 0 rrcurveto +-83 0 -48 75 0 124 rrcurveto +0 128 52 70 84 0 rrcurveto +closepath +endchar } ND +/delta { +0 557 hsbw +-12 73 hstem +645 71 hstem +35 90 vstem +431 90 vstem +85 716 rmoveto +0 -64 rlineto +81 -73 56 -47 30 -20 rrcurveto +-119 -6 -98 -88 0 -166 rrcurveto +0 -143 81 -121 160 0 rrcurveto +145 0 100 96 0 170 rrcurveto +0 125 -41 57 -125 87 rrcurveto +-69 48 -51 40 -32 34 rrcurveto +273 0 rlineto +0 71 rlineto +-391 0 rlineto +closepath +40 -465 rmoveto +0 106 57 87 96 0 rrcurveto +88 0 65 -71 0 -122 rrcurveto +0 -132 -71 -58 -80 0 rrcurveto +-91 0 -64 79 0 111 rrcurveto +closepath +endchar } ND +/epsilon { +0 446 hsbw +-12 73 hstem +230 73 hstem +455 75 hstem +62 85 vstem +405 460 rmoveto +-47 46 -57 24 -66 0 rrcurveto +-118 0 -55 -73 0 -77 rrcurveto +0 -48 24 -37 48 -27 rrcurveto +-58 -25 -28 -42 0 -58 rrcurveto +0 -83 59 -72 122 0 rrcurveto +77 0 65 27 52 56 rrcurveto +-63 54 rlineto +-40 -43 -43 -21 -46 0 rrcurveto +-50 0 -42 35 0 47 rrcurveto +0 44 30 43 94 0 rrcurveto +24 0 rlineto +0 73 rlineto +-25 0 rlineto +-75 0 -40 33 0 46 rrcurveto +0 36 26 37 56 0 rrcurveto +35 0 38 -16 40 -30 rrcurveto +63 51 rlineto +closepath +endchar } ND +/sigma { +0 617 hsbw +-12 73 hstem +458 72 hstem +33 91 vstem +430 89 vstem +595 519 rmoveto +-237 0 rlineto +-31 7 -28 4 -24 0 rrcurveto +-134 0 -108 -87 0 -184 rrcurveto +0 -179 102 -92 140 0 rrcurveto +136 0 108 85 0 186 rrcurveto +0 85 -22 63 -43 40 rrcurveto +141 0 rlineto +0 72 rlineto +closepath +-321 -61 rmoveto +105 0 51 -83 0 -116 rrcurveto +0 -126 -61 -72 -94 0 rrcurveto +-90 0 -61 66 0 132 rrcurveto +0 132 64 67 86 0 rrcurveto +closepath +endchar } ND +/tau { +0 395 hsbw +0 20 hstem +447 72 hstem +159 88 vstem +247 447 rmoveto +125 0 rlineto +0 72 rlineto +-350 0 rlineto +0 -72 rlineto +137 0 rlineto +0 -447 rlineto +88 0 rlineto +0 447 rlineto +closepath +endchar } ND +/phi { +0 648 hsbw +-199 20 hstem +-12 76 hstem +458 72 hstem +35 90 284 81 524 90 vstem3 +244 529 rmoveto +-110 2 -99 -105 0 -154 rrcurveto +0 -167 127 -117 122 0 rrcurveto +0 -187 rlineto +87 0 rlineto +0 187 rlineto +151 30 92 130 0 133 rrcurveto +0 127 -73 122 -145 0 rrcurveto +-86 0 -26 -52 0 -91 rrcurveto +0 -323 rlineto +-106 24 -53 86 0 102 rrcurveto +0 95 34 59 68 23 rrcurveto +17 76 rlineto +closepath +127 -461 rmoveto +0 293 rlineto +0 81 15 16 35 0 rrcurveto +48 0 52 -52 0 -116 rrcurveto +0 -126 -68 -80 -82 -16 rrcurveto +closepath +endchar } ND +/underscoredbl { +0 552 hsbw +-325 63 hstem +-199 64 hstem +-15 582 vstem +-15 -199 rmoveto +582 0 rlineto +0 64 rlineto +-582 0 rlineto +0 -64 rlineto +closepath +0 -126 rmoveto +582 0 rlineto +0 63 rlineto +-582 0 rlineto +0 -63 rlineto +closepath +endchar } ND +/exclamdbl { +0 500 hsbw +0 100 hstem +178 538 hstem +90 101 vstem +309 101 vstem +113 178 rmoveto +56 0 rlineto +26 379 rlineto +0 159 rlineto +-109 0 rlineto +0 -159 rlineto +27 -379 rlineto +closepath +-23 -178 rmoveto +101 0 rlineto +0 100 rlineto +-101 0 rlineto +0 -100 rlineto +closepath +242 178 rmoveto +56 0 rlineto +26 379 rlineto +0 159 rlineto +-109 0 rlineto +0 -159 rlineto +27 -379 rlineto +closepath +-23 -178 rmoveto +101 0 rlineto +0 100 rlineto +-101 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/nsuperior { +0 365 hsbw +526 59 hstem +40 64 vstem +257 69 vstem +40 253 rmoveto +69 0 rlineto +0 177 rlineto +0 68 29 28 54 0 rrcurveto +44 0 21 -20 0 -57 rrcurveto +0 -196 rlineto +69 0 rlineto +0 199 rlineto +0 91 -42 42 -79 0 rrcurveto +-42 0 -33 -15 -26 -26 rrcurveto +0 34 rlineto +-64 0 rlineto +0 -325 rlineto +closepath +endchar } ND +/peseta { +0 1094 hsbw +-13 75 hstem +64 101 hstem +292 83 hstem +449 71 hstem +632 84 hstem +25 95 vstem +380 97 532 79 671 87 vstem3 +984 88 vstem +25 716 rmoveto +0 -716 rlineto +95 0 rlineto +0 292 rlineto +77 0 rlineto +162 0 81 34 32 123 rrcurveto +50 0 rlineto +0 -347 rlineto +0 -85 43 -25 79 0 rrcurveto +10 0 16 3 19 5 rrcurveto +0 64 rlineto +45 -55 45 -22 82 0 rrcurveto +128 0 83 79 0 87 rrcurveto +0 88 -63 47 -119 26 rrcurveto +-78 17 -54 11 0 53 rrcurveto +0 29 32 32 67 0 rrcurveto +66 0 34 -29 3 -54 rrcurveto +92 0 rlineto +-5 105 -85 55 -108 0 rrcurveto +-30 0 -29 -5 -28 -8 rrcurveto +-156 0 rlineto +0 150 rlineto +-89 1 rlineto +0 -151 rlineto +-45 0 rlineto +-9 129 -84 67 -134 0 rrcurveto +-225 0 rlineto +closepath +95 -84 rmoveto +100 0 rlineto +102 0 58 -42 0 -87 rrcurveto +0 -101 -76 -27 -120 0 rrcurveto +-64 0 rlineto +0 257 rlineto +closepath +491 -183 rmoveto +76 0 rlineto +-11 -21 -5 -24 0 -24 rrcurveto +0 -90 86 -35 105 -31 rrcurveto +61 -18 61 -11 0 -51 rrcurveto +0 -51 -60 -31 -56 0 rrcurveto +-71 0 -44 37 -5 66 rrcurveto +-89 0 rlineto +1 -35 4 -21 16 -30 rrcurveto +-10 -4 -8 -1 -8 0 rrcurveto +-28 0 -15 14 0 26 rrcurveto +0 335 rlineto +closepath +endchar } ND +/arrowleft { +0 1000 hsbw +228 49 hstem +39 922 vstem +240 428 rmoveto +-86 -95 -59 -44 -56 -24 rrcurveto +0 -22 rlineto +64 -31 54 -42 84 -93 rrcurveto +38 0 rlineto +-31 65 -32 50 -34 36 rrcurveto +779 0 rlineto +0 49 rlineto +-779 0 rlineto +50 62 7 11 38 78 rrcurveto +-37 0 rlineto +closepath +endchar } ND +/arrowup { +0 500 hsbw +-209 20 hstem +415 37 hstem +226 49 vstem +75 452 rmoveto +0 -37 rlineto +76 38 12 7 63 50 rrcurveto +0 -719 rlineto +49 0 rlineto +0 719 rlineto +35 -34 50 -32 66 -30 rrcurveto +0 38 rlineto +-95 84 -41 52 -30 66 rrcurveto +-23 0 rlineto +-24 -56 -44 -60 -94 -86 rrcurveto +closepath +endchar } ND +/arrowright { +0 1000 hsbw +228 49 hstem +39 922 vstem +759 428 rmoveto +-37 0 rlineto +38 -78 7 -11 50 -62 rrcurveto +-778 0 rlineto +0 -49 rlineto +778 0 rlineto +-34 -36 -32 -50 -30 -65 rrcurveto +38 0 rlineto +84 93 54 42 64 31 rrcurveto +0 22 rlineto +-56 24 -60 44 -86 95 rrcurveto +closepath +endchar } ND +/arrowdown { +0 500 hsbw +-209 20 hstem +-8 37 hstem +226 49 vstem +75 -8 rmoveto +94 -86 44 -59 24 -56 rrcurveto +23 0 rlineto +30 64 41 54 95 84 rrcurveto +0 37 rlineto +-66 -30 -50 -32 -35 -34 rrcurveto +0 720 rlineto +-49 0 rlineto +0 -720 rlineto +-63 50 -11 7 -77 38 rrcurveto +0 -37 rlineto +closepath +endchar } ND +/arrowboth { +0 1000 hsbw +229 48 hstem +39 922 vstem +961 264 rmoveto +-62 28 -52 39 -84 98 rrcurveto +-39 0 rlineto +22 -56 31 -51 41 -45 rrcurveto +-637 0 rlineto +40 45 32 51 23 56 rrcurveto +-39 0 rlineto +-86 -98 -52 -39 -60 -28 rrcurveto +0 -22 rlineto +60 -28 52 -41 86 -96 rrcurveto +39 0 rlineto +-23 56 -32 50 -40 46 rrcurveto +637 0 rlineto +-41 -46 -31 -50 -22 -56 rrcurveto +39 0 rlineto +84 96 52 41 62 28 rrcurveto +0 22 rlineto +closepath +endchar } ND +/arrowupdn { +0 500 hsbw +-208 20 hstem +-10 39 hstem +477 39 hstem +694 20 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +endchar } ND +/arrowupdnbse { +0 500 hsbw +-303 48 hstem +-208 20 hstem +-10 39 hstem +477 39 hstem +694 20 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +-164 -969 rmoveto +0 -48 rlineto +350 0 rlineto +0 48 rlineto +-350 0 rlineto +closepath +endchar } ND +/orthogonal { +0 979 hsbw +0 49 hstem +605 20 hstem +177 49 vstem +177 625 rmoveto +0 -625 rlineto +625 0 rlineto +0 49 rlineto +-576 0 rlineto +0 576 rlineto +-49 0 rlineto +closepath +endchar } ND +/intersection { +0 719 hsbw +0 20 hstem +665 64 hstem +77 66 vstem +577 65 vstem +143 0 rmoveto +0 307 rlineto +0 250 60 108 156 0 rrcurveto +160 0 58 -109 0 -249 rrcurveto +0 -307 rlineto +65 0 rlineto +0 303 rlineto +0 324 -85 102 -197 0 rrcurveto +-203 0 -80 -116 0 -310 rrcurveto +0 -303 rlineto +66 0 rlineto +closepath +endchar } ND +/equivalence { +0 583 hsbw +95 83 313 81 530 81 hstem3 +56 472 vstem +528 530 rmoveto +0 81 rlineto +-472 0 rlineto +0 -81 rlineto +472 0 rlineto +closepath +0 -218 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +0 -217 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +endchar } ND +/house { +0 604 hsbw +0 40 hstem +501 62 hstem +77 39 vstem +488 39 vstem +77 0 rmoveto +450 0 rlineto +0 310 rlineto +-225 253 rlineto +-225 -253 rlineto +0 -310 rlineto +closepath +39 40 rmoveto +0 253 rlineto +186 208 rlineto +186 -208 rlineto +0 -253 rlineto +-372 0 rlineto +closepath +endchar } ND +/revlogicalnot { +0 584 hsbw +421 82 hstem +55 83 vstem +55 207 rmoveto +83 0 rlineto +0 214 rlineto +390 0 rlineto +0 82 rlineto +-473 0 rlineto +0 -296 rlineto +closepath +endchar } ND +/integraltp { +0 604 hsbw +798 50 hstem +267 70 vstem +337 -251 rmoveto +0 962 rlineto +0 49 -9 38 35 0 rrcurveto +7 0 8 -9 7 -9 rrcurveto +13 -21 16 -9 20 0 rrcurveto +24 0 19 18 0 27 rrcurveto +0 28 -24 25 -44 0 rrcurveto +-74 0 -68 -73 0 -142 rrcurveto +0 -884 rlineto +70 0 rlineto +closepath +endchar } ND +/integralbt { +0 604 hsbw +-251 50 hstem +267 70 vstem +267 848 rmoveto +0 -962 rlineto +0 -50 10 -37 -36 0 rrcurveto +-7 0 -8 9 -7 9 rrcurveto +-14 19 -15 11 -20 0 rrcurveto +-24 0 -19 -19 0 -26 rrcurveto +0 -29 24 -24 44 0 rrcurveto +73 0 69 73 0 142 rrcurveto +0 884 rlineto +-70 0 rlineto +closepath +endchar } ND +/SF100000 { +0 708 hsbw +261 85 hstem +-11 730 vstem +719 261 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF110000 { +0 625 hsbw +890 20 hstem +223 86 vstem +223 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF010000 { +0 708 hsbw +261 85 hstem +312 85 vstem +720 346 rmoveto +-408 0 rlineto +0 -649 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +closepath +endchar } ND +/SF030000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF020000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 261 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF040000 { +0 708 hsbw +261 649 hstem +311 85 vstem +396 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF080000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF090000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -564 rlineto +closepath +endchar } ND +/SF060000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF070000 { +0 708 hsbw +261 649 hstem +311 85 vstem +719 261 rmoveto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF050000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF430000 { +0 708 hsbw +168 85 hstem +354 85 hstem +-11 730 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF240000 { +0 708 hsbw +890 20 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF510000 { +0 708 hsbw +168 85 hstem +354 85 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-408 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF520000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-501 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF390000 { +0 708 hsbw +168 85 hstem +354 85 hstem +219 85 vstem +404 86 vstem +304 -303 rmoveto +0 657 rlineto +415 0 rlineto +0 85 rlineto +-500 0 rlineto +0 -742 rlineto +85 0 rlineto +closepath +186 471 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/SF220000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 742 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF210000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-500 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF250000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 742 rlineto +-500 0 rlineto +0 -85 rlineto +415 0 rlineto +0 -657 rlineto +closepath +-186 471 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF500000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 168 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF490000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +720 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +501 0 rlineto +closepath +endchar } ND +/SF380000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +304 910 rmoveto +-85 0 rlineto +0 -742 rlineto +500 0 rlineto +0 85 rlineto +-415 0 rlineto +0 657 rlineto +closepath +186 -471 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +endchar } ND +/SF280000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +396 168 rmoveto +0 742 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF270000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +489 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +500 0 rlineto +closepath +endchar } ND +/SF260000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 910 rmoveto +0 -657 rlineto +-415 0 rlineto +0 -85 rlineto +500 0 rlineto +0 742 rlineto +-85 0 rlineto +closepath +-186 -471 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +endchar } ND +/SF360000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF370000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF420000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +185 657 rmoveto +316 0 rlineto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +closepath +0 -657 rmoveto +86 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-316 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF190000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 84 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +1 -101 rlineto +-323 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF200000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +186 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF230000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +-100 1213 rmoveto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +closepath +-86 -742 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF470000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-408 -186 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF480000 { +0 708 hsbw +261 85 hstem +218 86 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF410000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-501 -186 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +186 -471 rmoveto +85 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF450000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF460000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +719 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF400000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +304 354 rmoveto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +closepath +415 0 rmoveto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -556 rlineto +315 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF540000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF530000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF440000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 86 vstem +490 439 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +-272 0 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +0 -271 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +272 0 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/upblock { +0 708 hsbw +303 607 hstem +-11 730 vstem +719 303 rmoveto +0 607 rlineto +-730 0 rlineto +0 -607 rlineto +730 0 rlineto +closepath +endchar } ND +/dnblock { +0 708 hsbw +-303 606 hstem +-11 730 vstem +719 -303 rmoveto +0 606 rlineto +-730 0 rlineto +0 -606 rlineto +730 0 rlineto +closepath +endchar } ND +/block { +0 708 hsbw +890 20 hstem +-11 730 vstem +-11 -303 rmoveto +730 0 rlineto +0 1213 rlineto +-730 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/lfblock { +0 708 hsbw +890 20 hstem +-11 365 vstem +-11 -303 rmoveto +365 0 rlineto +0 1213 rlineto +-365 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/rtblock { +0 708 hsbw +890 20 hstem +354 366 vstem +354 -303 rmoveto +366 0 rlineto +0 1213 rlineto +-366 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/ltshade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +50 61 172 60 293 61 vstem3 +415 61 537 60 658 61 vstem3 +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +608 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +-121 -121 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/shade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +-11 61 vstem +172 60 293 61 415 60 vstem3 +537 61 vstem +659 60 vstem +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-487 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +548 -122 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +61 -121 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/dkshade { +0 729 hsbw +-307 61 -184 59 -63 61 hstem3 +57 62 180 60 302 60 hstem3 +423 61 545 61 667 61 hstem3 +789 121 hstem +61 60 vstem +182 61 vstem +365 60 vstem +486 61 vstem +669 60 vstem +729 728 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 121 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -183 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -62 rlineto +-61 0 rlineto +0 -182 rlineto +729 0 rlineto +0 61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 60 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 182 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +closepath +-668 61 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-121 -122 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-365 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +61 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-547 -121 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +243 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-61 -61 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +182 61 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 -61 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-121 -61 rmoveto +60 0 rlineto +0 -60 rlineto +-60 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 62 rlineto +60 0 rlineto +0 -62 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-121 -60 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +endchar } ND +/filledbox { +0 604 hsbw +0 461 hstem +71 461 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +endchar } ND +/filledrect { +0 1000 hsbw +155 188 hstem +0 1000 vstem +0 343 rmoveto +0 -188 rlineto +1000 0 rlineto +0 188 rlineto +-1000 0 rlineto +closepath +endchar } ND +/triagup { +0 990 hsbw +0 20 hstem +148 694 vstem +148 0 rmoveto +694 0 rlineto +-347 693 rlineto +-347 -693 rlineto +closepath +endchar } ND +/triagrt { +0 990 hsbw +-15 20 hstem +141 708 vstem +141 692 rmoveto +0 -707 rlineto +708 353 rlineto +-708 354 rlineto +closepath +endchar } ND +/triagdn { +0 990 hsbw +-15 20 hstem +148 694 vstem +842 678 rmoveto +-694 0 rlineto +347 -693 rlineto +347 693 rlineto +closepath +endchar } ND +/triaglf { +0 990 hsbw +-15 20 hstem +141 708 vstem +849 692 rmoveto +-708 -354 rlineto +708 -353 rlineto +0 707 rlineto +closepath +endchar } ND +/circle { +0 604 hsbw +67 37 hstem +460 37 hstem +87 37 vstem +480 37 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +0 -37 rmoveto +91 0 87 -88 0 -90 rrcurveto +0 -99 -80 -79 -98 0 rrcurveto +-98 0 -80 79 0 99 rrcurveto +0 89 88 89 90 0 rrcurveto +closepath +endchar } ND +/invbullet { +0 604 hsbw +0 141 hstem +338 141 hstem +63 140 vstem +400 141 vstem +63 0 rmoveto +478 0 rlineto +0 479 rlineto +-478 0 rlineto +0 -479 rlineto +closepath +239 338 rmoveto +54 0 44 -45 0 -54 rrcurveto +0 -54 -44 -44 -54 0 rrcurveto +-55 0 -44 44 0 54 rrcurveto +0 54 44 45 55 0 rrcurveto +closepath +endchar } ND +/invcircle { +0 604 hsbw +0 67 104 356 497 67 hstem3 +21 66 125 355 518 66 vstem3 +21 0 rmoveto +563 0 rlineto +0 564 rlineto +-563 0 rlineto +0 -564 rlineto +closepath +282 497 rmoveto +110 0 105 -104 0 -111 rrcurveto +0 -119 -97 -96 -118 0 rrcurveto +-120 0 -96 96 0 119 rrcurveto +0 111 105 104 111 0 rrcurveto +closepath +0 -37 rmoveto +-91 0 -87 -85 0 -93 rrcurveto +0 -99 79 -79 99 0 rrcurveto +97 0 80 79 0 99 rrcurveto +0 92 -88 86 -89 0 rrcurveto +closepath +endchar } ND +/smileface { +0 1021 hsbw +-58 45 hstem +58 42 hstem +278 79 hstem +519 45 hstem +199 46 vstem +352 79 vstem +590 79 vstem +777 45 vstem +822 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -140 -139 0 -172 rrcurveto +0 -172 140 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-45 0 rmoveto +0 -147 -120 -119 -146 0 rrcurveto +-148 0 -118 119 0 147 rrcurveto +0 146 118 120 148 0 rrcurveto +146 0 120 -120 0 -146 rrcurveto +closepath +-346 64 rmoveto +0 22 -18 18 -22 0 rrcurveto +-22 0 -17 -18 0 -22 rrcurveto +0 -22 17 -17 22 0 rrcurveto +22 0 18 17 0 22 rrcurveto +closepath +238 0 rmoveto +0 22 -18 18 -21 0 rrcurveto +-22 0 -18 -18 0 -22 rrcurveto +0 -22 18 -17 22 0 rrcurveto +21 0 18 17 0 22 rrcurveto +closepath +-302 -164 rmoveto +33 -63 47 -32 64 0 rrcurveto +62 0 49 32 32 63 rrcurveto +-30 17 rlineto +-26 -47 -38 -23 -49 0 rrcurveto +-50 0 -38 23 -26 47 rrcurveto +-30 -17 rlineto +closepath +endchar } ND +/invsmileface { +0 1052 hsbw +-58 116 hstem +170 108 hstem +357 207 hstem +215 152 446 160 685 152 vstem3 +837 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -139 -139 0 -172 rrcurveto +0 -172 139 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-391 64 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-22 0 -18 17 0 22 rrcurveto +0 22 18 18 22 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +239 0 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-23 0 -17 17 0 22 rrcurveto +0 22 17 18 23 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +-302 -164 rmoveto +30 17 rlineto +26 -47 37 -23 50 0 rrcurveto +50 0 37 23 26 47 rrcurveto +31 -17 rlineto +-32 -63 -48 -32 -64 0 rrcurveto +-63 0 -48 32 -32 63 rrcurveto +closepath +endchar } ND +/sun { +0 917 hsbw +-13 369 hstem +591 201 hstem +8 200 440 37 709 200 vstem3 +440 792 rmoveto +0 -165 rlineto +-59 -6 -46 -17 -65 -45 rrcurveto +-143 138 rlineto +-23 -28 rlineto +138 -140 rlineto +-46 -55 -19 -47 -5 -69 rrcurveto +-164 0 rlineto +0 -33 rlineto +164 0 rlineto +6 -70 21 -49 44 -54 rrcurveto +-139 -140 rlineto +24 -25 rlineto +144 136 rlineto +52 -40 44 -18 72 -9 rrcurveto +0 -165 rlineto +38 0 rlineto +0 165 rlineto +69 8 38 13 64 48 rrcurveto +138 -138 rlineto +28 24 rlineto +-139 142 rlineto +40 51 23 57 7 62 rrcurveto +163 0 rlineto +0 33 rlineto +-164 0 rlineto +-2 59 -20 55 -48 61 rrcurveto +140 140 rlineto +-25 26 rlineto +-142 -139 rlineto +-58 46 -47 19 -65 4 rrcurveto +0 165 rlineto +-38 0 rlineto +closepath +268 -451 rmoveto +0 -138 -113 -112 -137 0 rrcurveto +-139 0 -111 112 0 138 rrcurveto +0 138 111 112 139 0 rrcurveto +137 0 113 -112 0 -138 rrcurveto +closepath +endchar } ND +/female { +0 750 hsbw +0 29 hstem +225 25 hstem +708 28 hstem +119 28 361 28 604 26 vstem3 +389 225 rmoveto +134 6 107 113 0 136 rrcurveto +0 132 -122 124 -133 0 rrcurveto +-135 0 -121 -123 0 -133 rrcurveto +0 -131 128 -124 113 0 rrcurveto +0 -196 rlineto +-225 0 rlineto +0 -29 rlineto +225 0 rlineto +0 -214 rlineto +29 0 rlineto +0 214 rlineto +224 0 rlineto +0 29 rlineto +-224 0 rlineto +0 196 rlineto +closepath +-14 483 rmoveto +116 0 113 -110 0 -119 rrcurveto +0 -127 -103 -102 -126 0 rrcurveto +-127 0 -102 102 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/male { +0 750 hsbw +-128 26 hstem +357 13 hstem +734 57 hstem +54 27 vstem +539 26 vstem +594 791 rmoveto +-300 -148 rlineto +12 -26 rlineto +262 130 rlineto +-176 -377 rlineto +-29 8 -27 5 -25 0 rrcurveto +-143 0 -114 -114 0 -141 rrcurveto +0 -133 122 -123 134 0 rrcurveto +132 0 123 124 0 132 rrcurveto +0 94 -50 89 -96 48 rrcurveto +175 375 rlineto +69 -283 rlineto +28 7 rlineto +-80 325 rlineto +-17 8 rlineto +closepath +-284 -434 rmoveto +115 0 114 -109 0 -120 rrcurveto +0 -127 -103 -103 -126 0 rrcurveto +-127 0 -102 103 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/spade { +0 531 hsbw +0 18 hstem +134 20 hstem +28 243 vstem +266 601 rmoveto +-19 -92 -52 -53 -80 -69 rrcurveto +-47 -40 -40 -43 0 -62 rrcurveto +0 -59 48 -49 59 0 rrcurveto +54 0 44 31 30 62 rrcurveto +2 -139 -69 -70 -120 0 rrcurveto +-4 -18 rlineto +387 0 rlineto +0 18 rlineto +-126 5 -62 72 0 132 rrcurveto +32 -60 41 -33 52 0 rrcurveto +58 0 49 47 0 63 rrcurveto +0 62 -34 36 -70 62 rrcurveto +-78 69 -36 45 -19 83 rrcurveto +closepath +endchar } ND +/club { +0 656 hsbw +0 20 hstem +133 271 hstem +192 271 vstem +536 0 rmoveto +-4 17 rlineto +-155 29 -41 48 -3 156 rrcurveto +44 -81 54 -35 64 0 rrcurveto +73 0 61 59 0 79 rrcurveto +0 76 -56 57 -65 0 rrcurveto +-31 0 -6 -6 -42 -20 rrcurveto +22 32 12 30 0 30 rrcurveto +0 70 -60 60 -76 0 rrcurveto +-78 0 -57 -59 0 -74 rrcurveto +0 -27 5 -16 28 -46 rrcurveto +-34 16 -27 9 -19 0 rrcurveto +-62 0 -56 -58 0 -76 rrcurveto +0 -78 60 -59 76 0 rrcurveto +58 0 62 35 40 82 rrcurveto +0 -23 rlineto +0 -111 -44 -68 -153 -31 rrcurveto +-4 -17 rlineto +414 0 rlineto +closepath +endchar } ND +/heart { +0 594 hsbw +-12 490 hstem +31 532 vstem +298 -12 rmoveto +26 100 50 68 84 106 rrcurveto +81 103 24 54 0 59 rrcurveto +0 66 -56 57 -70 0 rrcurveto +-69 0 -49 -48 -21 -75 rrcurveto +-27 75 -45 48 -70 0 rrcurveto +-71 0 -54 -56 0 -72 rrcurveto +0 -76 34 -38 81 -106 rrcurveto +108 -142 24 -46 20 -77 rrcurveto +closepath +endchar } ND +/diamond { +0 510 hsbw +-12 20 hstem +31 448 vstem +254 601 rmoveto +-56 -100 -106 -137 -61 -69 rrcurveto +50 -64 30 -36 10 -11 rrcurveto +53 -72 51 -66 30 -58 rrcurveto +51 93 126 163 47 51 rrcurveto +-60 65 -107 142 -58 99 rrcurveto +closepath +endchar } ND +/musicalnote { +0 500 hsbw +-18 230 hstem +554 112 hstem +237 49 vstem +434 48 vstem +237 666 rmoveto +0 -477 rlineto +-32 15 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -66 44 -43 71 0 rrcurveto +89 0 64 56 0 108 rrcurveto +0 408 rlineto +13 0 rlineto +69 0 66 -32 0 -75 rrcurveto +0 -21 rlineto +48 0 rlineto +0 50 rlineto +0 145 -52 45 -174 0 rrcurveto +-19 0 rlineto +closepath +endchar } ND +/musicalnotedbl { +0 750 hsbw +39 229 hstem +261 48 vstem +600 49 vstem +261 621 rmoveto +0 -476 rlineto +-32 14 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -64 44 -45 71 0 rrcurveto +88 0 64 58 0 107 rrcurveto +0 408 rlineto +291 90 rlineto +0 -353 rlineto +-46 18 -12 3 -25 0 rrcurveto +-80 0 -55 -55 0 -65 rrcurveto +0 -64 45 -45 72 0 rrcurveto +87 0 63 52 0 110 rrcurveto +0 541 rlineto +-388 -121 rlineto +closepath +endchar } ND +/IJ { +0 735 hsbw +-12 84 hstem +696 20 hstem +93 95 vstem +589 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +197 203 rmoveto +-3 -143 69 -72 126 0 rrcurveto +131 0 71 88 0 152 rrcurveto +0 488 rlineto +-95 0 rlineto +0 -493 rlineto +0 -99 -27 -52 -80 0 rrcurveto +-64 0 -38 33 -5 110 rrcurveto +-85 -12 rlineto +closepath +endchar } ND +/ij { +0 444 hsbw +-210 77 hstem +0 20 hstem +499 20 hstem +615 101 hstem +66 88 vstem +299 88 vstem +66 615 rmoveto +88 0 rlineto +0 101 rlineto +-88 0 rlineto +0 -101 rlineto +closepath +0 -615 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +233 614 rmoveto +88 0 rlineto +0 102 rlineto +-88 0 rlineto +0 -102 rlineto +closepath +-111 -815 rmoveto +22 -6 22 -3 24 0 rrcurveto +104 0 27 63 0 119 rrcurveto +0 547 rlineto +-88 0 rlineto +0 -545 rlineto +0 -96 -19 -11 -34 0 rrcurveto +-11 0 -14 3 -17 4 rrcurveto +-16 -75 rlineto +closepath +endchar } ND +/napostrophe { +0 604 hsbw +0 445 hstem +454 76 hstem +621 102 hstem +106 49 vstem +183 79 vstem +517 87 vstem +183 0 rmoveto +88 0 rlineto +0 283 rlineto +0 133 63 38 75 0 rrcurveto +72 0 36 -49 0 -90 rrcurveto +0 -315 rlineto +87 0 rlineto +0 319 rlineto +0 149 -65 62 -112 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +-122 621 rmoveto +45 0 rlineto +-2 -54 -17 -30 -34 -14 rrcurveto +21 -34 rlineto +61 26 20 44 0 84 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/minute { +0 188 hsbw +462 254 hstem +63 54 vstem +63 462 rmoveto +54 0 rlineto +51 134 rlineto +26 120 rlineto +-100 0 rlineto +-26 -120 rlineto +-5 -134 rlineto +closepath +endchar } ND +/second { +0 354 hsbw +462 254 hstem +63 54 vstem +201 54 vstem +63 462 rmoveto +54 0 rlineto +51 134 rlineto +26 120 rlineto +-100 0 rlineto +-26 -120 rlineto +-5 -134 rlineto +closepath +138 0 rmoveto +54 0 rlineto +52 134 rlineto +26 120 rlineto +-101 0 rlineto +-25 -120 rlineto +-6 -134 rlineto +closepath +endchar } ND +/afii61248 { +0 885 hsbw +-8 50 hstem +350 50 hstem +678 50 hstem +47 63 vstem +199 73 vstem +499 63 vstem +591 71 vstem +775 63 vstem +303 490 rmoveto +-10 -62 -33 -28 -49 0 rrcurveto +-59 0 -42 41 0 98 rrcurveto +0 96 42 43 63 0 rrcurveto +41 0 30 -25 11 -49 rrcurveto +60 10 rlineto +-14 72 -51 42 -80 0 rrcurveto +-99 0 -66 -66 0 -124 rrcurveto +0 -122 66 -66 99 0 rrcurveto +78 0 59 49 14 83 rrcurveto +-60 8 rlineto +closepath +-104 -516 rmoveto +73 0 rlineto +390 754 rlineto +-71 0 rlineto +-392 -754 rlineto +closepath +300 207 rmoveto +0 -123 69 -66 100 0 rrcurveto +102 0 68 65 0 130 rrcurveto +0 113 -69 71 -101 0 rrcurveto +-102 0 -67 -69 0 -121 rrcurveto +closepath +63 0 rmoveto +0 92 46 47 60 0 rrcurveto +61 0 46 -48 0 -89 rrcurveto +0 -95 -46 -46 -61 0 rrcurveto +-60 0 -46 47 0 92 rrcurveto +closepath +endchar } ND +/afii61289 { +0 323 hsbw +-12 70 hstem +216 105 hstem +325 114 hstem +669 59 hstem +94 82 vstem +247 68 vstem +7 206 rmoveto +48 -38 rlineto +39 48 rlineto +0 -110 rlineto +0 -83 37 -35 60 0 rrcurveto +37 0 37 14 36 29 rrcurveto +0 79 rlineto +-68 -48 -13 -4 -16 0 rrcurveto +-19 0 -9 6 0 58 rrcurveto +0 203 rlineto +108 149 31 77 0 60 rrcurveto +0 72 -45 45 -62 0 rrcurveto +-72 0 -42 -39 0 -146 rrcurveto +0 -222 rlineto +-87 -115 rlineto +closepath +169 233 rmoveto +0 111 rlineto +0 70 -16 49 50 0 rrcurveto +26 0 11 -27 0 -31 rrcurveto +0 -36 -7 -27 -64 -109 rrcurveto +closepath +endchar } ND +/H22073 { +0 604 hsbw +0 37 hstem +424 37 hstem +71 37 vstem +495 37 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +37 -37 rmoveto +387 0 rlineto +0 -387 rlineto +-387 0 rlineto +0 387 rlineto +closepath +endchar } ND +/H18543 { +0 354 hsbw +217 226 hstem +64 226 vstem +290 443 rmoveto +-226 0 rlineto +0 -226 rlineto +226 0 rlineto +0 226 rlineto +closepath +endchar } ND +/H18551 { +0 354 hsbw +217 37 hstem +406 37 hstem +64 37 vstem +253 37 vstem +290 443 rmoveto +-226 0 rlineto +0 -226 rlineto +226 0 rlineto +0 226 rlineto +closepath +-37 -37 rmoveto +0 -152 rlineto +-152 0 rlineto +0 152 rlineto +152 0 rlineto +closepath +endchar } ND +/H18533 { +0 604 hsbw +67 430 hstem +87 430 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +endchar } ND +/openbullet { +0 354 hsbw +208 37 hstem +416 37 hstem +55 37 vstem +263 37 vstem +177 453 rmoveto +-68 0 -54 -56 0 -66 rrcurveto +0 -68 54 -55 68 0 rrcurveto +68 0 55 55 0 68 rrcurveto +0 66 -55 56 -68 0 rrcurveto +closepath +0 -37 rmoveto +48 0 38 -39 0 -46 rrcurveto +0 -48 -40 -38 -46 0 rrcurveto +-47 0 -38 38 0 48 rrcurveto +0 46 38 39 47 0 rrcurveto +closepath +endchar } ND +/Amacron { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +771 72 hstem +-1 100 180 300 561 100 vstem3 +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-30 477 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/amacron { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +599 72 hstem +36 94 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-263 339 rmoveto +304 0 rlineto +0 72 rlineto +-304 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/Ccircumflex { +0 722 hsbw +-12 81 hstem +647 81 hstem +840 54 hstem +50 97 vstem +223 103 335 87 433 99 vstem3 +588 251 rmoveto +-27 -120 -77 -62 -106 0 rrcurveto +-147 0 -84 135 0 160 rrcurveto +0 141 80 142 159 0 rrcurveto +96 0 61 -45 34 -104 rrcurveto +93 22 rlineto +-38 132 -102 76 -142 0 rrcurveto +-198 0 -140 -159 0 -206 rrcurveto +0 -197 113 -178 223 0 rrcurveto +149 0 108 83 40 156 rrcurveto +-95 24 rlineto +closepath +-209 589 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/ccircumflex { +0 500 hsbw +-12 73 hstem +458 72 hstem +666 54 hstem +39 90 134 101 240 90 vstem3 +344 99 vstem +404 190 rmoveto +-12 -88 -49 -41 -69 0 rrcurveto +-87 0 -58 59 0 140 rrcurveto +0 137 60 61 90 0 rrcurveto +58 0 44 -36 16 -69 rrcurveto +85 13 rlineto +-20 105 -74 59 -113 0 rrcurveto +-142 0 -94 -121 0 -152 rrcurveto +0 -174 93 -95 143 0 rrcurveto +113 0 84 71 19 120 rrcurveto +-87 11 rlineto +closepath +-114 476 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Cdot { +0 722 hsbw +-12 81 hstem +647 81 hstem +778 110 hstem +50 97 vstem +323 109 vstem +588 251 rmoveto +-27 -120 -77 -62 -106 0 rrcurveto +-147 0 -84 135 0 160 rrcurveto +0 141 80 142 159 0 rrcurveto +96 0 61 -45 34 -104 rrcurveto +93 22 rlineto +-38 132 -102 76 -142 0 rrcurveto +-198 0 -140 -159 0 -206 rrcurveto +0 -197 113 -178 223 0 rrcurveto +149 0 108 83 40 156 rrcurveto +-95 24 rlineto +closepath +-265 527 rmoveto +109 0 rlineto +0 110 rlineto +-109 0 rlineto +0 -110 rlineto +closepath +endchar } ND +/cdot { +0 500 hsbw +-12 73 hstem +458 72 hstem +583 109 hstem +39 90 vstem +229 109 vstem +404 190 rmoveto +-12 -88 -49 -41 -69 0 rrcurveto +-87 0 -58 59 0 140 rrcurveto +0 137 60 61 90 0 rrcurveto +58 0 44 -36 16 -69 rrcurveto +85 13 rlineto +-20 105 -74 59 -113 0 rrcurveto +-142 0 -94 -121 0 -152 rrcurveto +0 -174 93 -95 143 0 rrcurveto +113 0 84 71 19 120 rrcurveto +-87 11 rlineto +closepath +-175 393 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/Emacron { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +776 72 hstem +79 95 vstem +202 305 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +123 776 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/emacron { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +599 72 hstem +37 90 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +-8 290 rmoveto +304 0 rlineto +0 72 rlineto +-304 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/Ebreve { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +765 61 hstem +872 20 hstem +79 95 vstem +200 60 vstem +428 60 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +349 892 rmoveto +-10 -47 -24 -19 -53 0 rrcurveto +-46 0 -26 20 -9 46 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/ebreve { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +588 61 hstem +695 20 hstem +37 90 vstem +142 60 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +238 406 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -27 22 -8 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/Edot { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +760 109 hstem +79 95 vstem +300 109 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +221 760 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/edot { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +583 109 hstem +37 90 vstem +234 109 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +102 274 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/Gcircumflex { +0 778 hsbw +-12 85 hstem +281 84 hstem +647 81 hstem +837 54 hstem +53 98 vstem +269 103 381 87 479 99 vstem3 +623 92 vstem +412 281 rmoveto +211 0 rlineto +0 -134 rlineto +-42 -35 -86 -39 -81 0 rrcurveto +-153 0 -110 117 0 170 rrcurveto +0 154 94 133 167 0 rrcurveto +100 0 75 -49 32 -106 rrcurveto +86 24 rlineto +-39 145 -113 67 -141 0 rrcurveto +-215 0 -144 -171 0 -203 rrcurveto +0 -207 159 -159 207 0 rrcurveto +104 0 100 37 92 75 rrcurveto +0 265 rlineto +-303 0 rlineto +0 -84 rlineto +closepath +13 556 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/gcircumflex { +0 556 hsbw +-210 72 hstem +0 73 hstem +458 72 hstem +666 54 hstem +32 91 vstem +215 94 vstem +408 81 vstem +50 -43 rmoveto +-3 -112 84 -55 124 0 rrcurveto +161 0 73 86 0 194 rrcurveto +0 449 rlineto +-81 0 rlineto +0 -63 rlineto +-40 49 -50 25 -61 0 rrcurveto +-143 0 -82 -131 0 -137 rrcurveto +0 -144 81 -118 143 0 rrcurveto +57 0 48 22 39 46 rrcurveto +0 -152 -15 -54 -131 0 rrcurveto +-65 0 -44 20 -10 62 rrcurveto +-85 13 rlineto +closepath +73 312 rmoveto +0 124 62 65 78 0 rrcurveto +80 0 64 -66 0 -126 rrcurveto +0 -134 -62 -59 -80 0 rrcurveto +-82 0 -60 60 0 136 rrcurveto +closepath +143 397 rmoveto +53 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +56 83 rlineto +closepath +endchar } ND +/Gdot { +0 778 hsbw +-12 85 hstem +281 84 hstem +647 81 hstem +754 110 hstem +53 98 vstem +369 109 vstem +623 92 vstem +412 281 rmoveto +211 0 rlineto +0 -134 rlineto +-42 -35 -86 -39 -81 0 rrcurveto +-153 0 -110 117 0 170 rrcurveto +0 154 94 133 167 0 rrcurveto +100 0 75 -49 32 -106 rrcurveto +86 24 rlineto +-39 145 -113 67 -141 0 rrcurveto +-215 0 -144 -171 0 -203 rrcurveto +0 -207 159 -159 207 0 rrcurveto +104 0 100 37 92 75 rrcurveto +0 265 rlineto +-303 0 rlineto +0 -84 rlineto +closepath +-43 473 rmoveto +109 0 rlineto +0 110 rlineto +-109 0 rlineto +0 -110 rlineto +closepath +endchar } ND +/gdot { +0 556 hsbw +-210 72 hstem +0 73 hstem +458 72 hstem +583 109 hstem +32 91 vstem +223 109 vstem +408 81 vstem +50 -43 rmoveto +-3 -112 84 -55 124 0 rrcurveto +161 0 73 86 0 194 rrcurveto +0 449 rlineto +-81 0 rlineto +0 -63 rlineto +-40 49 -50 25 -61 0 rrcurveto +-143 0 -82 -131 0 -137 rrcurveto +0 -144 81 -118 143 0 rrcurveto +57 0 48 22 39 46 rrcurveto +0 -152 -15 -54 -131 0 rrcurveto +-65 0 -44 20 -10 62 rrcurveto +-85 13 rlineto +closepath +73 312 rmoveto +0 124 62 65 78 0 rrcurveto +80 0 64 -66 0 -126 rrcurveto +0 -134 -62 -59 -80 0 rrcurveto +-82 0 -60 60 0 136 rrcurveto +closepath +100 314 rmoveto +109 0 rlineto +0 109 rlineto +-109 0 rlineto +0 -109 rlineto +closepath +endchar } ND +/Gcedilla { +0 778 hsbw +-206 61 hstem +-12 23 hstem +281 84 hstem +647 81 hstem +53 98 vstem +442 81 vstem +623 92 vstem +412 281 rmoveto +211 0 rlineto +0 -134 rlineto +-42 -35 -86 -39 -81 0 rrcurveto +-153 0 -110 117 0 170 rrcurveto +0 154 94 133 167 0 rrcurveto +100 0 75 -49 32 -106 rrcurveto +86 24 rlineto +-39 145 -113 67 -141 0 rrcurveto +-215 0 -144 -171 0 -203 rrcurveto +0 -207 159 -159 207 0 rrcurveto +104 0 100 37 92 75 rrcurveto +0 265 rlineto +-303 0 rlineto +0 -84 rlineto +closepath +-47 -356 rmoveto +41 0 36 -1 0 -32 rrcurveto +0 -30 -36 -7 -43 0 rrcurveto +-46 0 rlineto +-5 -55 rlineto +20 -4 23 -2 27 0 rrcurveto +94 0 47 45 0 48 rrcurveto +0 35 -29 31 -54 6 rrcurveto +16 52 rlineto +-65 0 rlineto +-26 -86 rlineto +closepath +endchar } ND +/gcedilla { +0 556 hsbw +-210 72 hstem +0 73 hstem +458 72 hstem +571 86 hstem +32 91 vstem +207 55 vstem +408 81 vstem +309 657 rmoveto +-47 0 rlineto +5 35 18 24 30 13 rrcurveto +-26 41 rlineto +-62 -26 -20 -43 0 -73 rrcurveto +0 -57 rlineto +102 0 rlineto +0 86 rlineto +closepath +-259 -700 rmoveto +-3 -101 70 -66 140 0 rrcurveto +154 0 78 95 0 185 rrcurveto +0 449 rlineto +-81 0 rlineto +0 -63 rlineto +-40 49 -50 25 -60 0 rrcurveto +-144 0 -82 -112 0 -157 rrcurveto +0 -143 82 -118 144 0 rrcurveto +56 0 48 22 38 46 rrcurveto +0 -142 -28 -64 -118 0 rrcurveto +-74 0 -39 28 -6 54 rrcurveto +-85 13 rlineto +closepath +73 312 rmoveto +0 116 56 73 84 0 rrcurveto +92 0 52 -80 0 -110 rrcurveto +0 -132 -58 -63 -84 0 rrcurveto +-79 0 -63 57 0 139 rrcurveto +closepath +endchar } ND +/Hcircumflex { +0 722 hsbw +0 422 hstem +696 20 hstem +843 53 hstem +80 95 vstem +222 103 334 87 432 99 vstem3 +547 95 vstem +80 0 rmoveto +95 0 rlineto +0 337 rlineto +372 0 rlineto +0 -337 rlineto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -294 rlineto +-372 0 rlineto +0 294 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +298 843 rmoveto +54 -83 rlineto +99 0 rlineto +-110 136 rlineto +-93 0 rlineto +-106 -136 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/hcircumflex { +0 556 hsbw +0 459 hstem +510 20 hstem +696 20 hstem +843 53 hstem +66 88 159 100 264 88 vstem3 +400 88 vstem +66 0 rmoveto +88 0 rlineto +0 284 rlineto +0 102 55 69 82 0 rrcurveto +69 0 40 -38 0 -88 rrcurveto +0 -329 rlineto +88 0 rlineto +0 329 rlineto +0 130 -65 71 -114 0 rrcurveto +-63 0 -52 -24 -40 -47 rrcurveto +0 257 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +248 843 rmoveto +54 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-105 -136 rlineto +100 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Hbar { +0 722 hsbw +0 422 hstem +537 179 hstem +80 95 vstem +547 95 vstem +80 537 rmoveto +0 -537 rlineto +95 0 rlineto +0 337 rlineto +372 0 rlineto +0 -337 rlineto +95 0 rlineto +0 537 rlineto +65 0 rlineto +0 72 rlineto +-65 0 rlineto +0 107 rlineto +-95 0 rlineto +0 -107 rlineto +-372 0 rlineto +0 107 rlineto +-95 0 rlineto +0 -107 rlineto +-65 0 rlineto +0 -72 rlineto +65 0 rlineto +closepath +95 0 rmoveto +372 0 rlineto +0 -115 rlineto +-372 0 rlineto +0 115 rlineto +closepath +endchar } ND +/hbar { +0 556 hsbw +0 459 hstem +510 20 hstem +585 131 hstem +66 88 vstem +400 88 vstem +66 585 rmoveto +0 -585 rlineto +88 0 rlineto +0 284 rlineto +0 122 55 49 82 0 rrcurveto +72 0 37 -42 0 -84 rrcurveto +0 -329 rlineto +88 0 rlineto +0 329 rlineto +0 169 -89 32 -89 0 rrcurveto +-65 0 -52 -24 -39 -47 rrcurveto +0 126 rlineto +179 0 rlineto +0 66 rlineto +-179 0 rlineto +0 65 rlineto +-88 0 rlineto +0 -65 rlineto +-63 0 rlineto +0 -66 rlineto +63 0 rlineto +closepath +endchar } ND +/Itilde { +0 278 hsbw +0 20 hstem +696 20 hstem +818 65 hstem +-31 65 vstem +93 95 vstem +232 64 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-124 772 rmoveto +65 0 rlineto +0 26 13 20 24 0 rrcurveto +10 0 16 -5 22 -12 rrcurveto +33 -18 27 -10 21 0 rrcurveto +54 0 39 37 3 75 rrcurveto +-64 0 rlineto +-4 -35 -11 -8 -20 0 rrcurveto +-12 0 -14 5 -20 10 rrcurveto +-34 17 -29 9 -20 0 rrcurveto +-61 0 -38 -46 0 -65 rrcurveto +closepath +endchar } ND +/itilde { +0 278 hsbw +0 20 hstem +499 20 hstem +642 65 hstem +-22 66 99 86 241 64 vstem3 +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-119 595 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 3 75 rrcurveto +-64 0 rlineto +-4 -34 -11 -8 -20 0 rrcurveto +-12 0 -16 4 -18 10 rrcurveto +-35 19 -28 8 -20 0 rrcurveto +-61 0 -38 -47 0 -65 rrcurveto +closepath +endchar } ND +/Imacron { +0 278 hsbw +0 20 hstem +696 20 hstem +763 72 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-107 763 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/imacron { +0 278 hsbw +0 20 hstem +499 20 hstem +599 72 hstem +97 88 vstem +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-108 599 rmoveto +304 0 rlineto +0 72 rlineto +-304 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/Ibreve { +0 278 hsbw +0 20 hstem +696 20 hstem +752 61 hstem +0 60 100 88 228 60 vstem3 +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +135 879 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -27 22 -8 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/ibreve { +0 278 hsbw +0 20 hstem +499 20 hstem +588 61 hstem +695 20 hstem +-3 60 98 87 226 60 vstem3 +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +129 715 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-47 0 -26 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/Iogonek { +0 278 hsbw +-208 65 hstem +0 20 hstem +696 20 hstem +80 61 vstem +155 0 rmoveto +36 0 rlineto +0 716 rlineto +-94 0 rlineto +0 -716 rlineto +-12 -40 -5 -34 0 -26 rrcurveto +0 -66 45 -42 60 0 rrcurveto +33 0 36 10 39 20 rrcurveto +0 58 rlineto +-30 -15 -27 -8 -25 0 rrcurveto +-40 0 -30 31 0 44 rrcurveto +0 20 4 23 10 25 rrcurveto +closepath +endchar } ND +/iogonek { +0 222 hsbw +-208 65 hstem +0 20 hstem +499 20 hstem +615 101 hstem +50 61 vstem +66 615 rmoveto +88 0 rlineto +0 101 rlineto +-88 0 rlineto +0 -101 rlineto +closepath +59 -615 rmoveto +29 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +-11 -45 -5 -33 0 -22 rrcurveto +0 -64 39 -44 67 0 rrcurveto +34 0 36 10 38 20 rrcurveto +0 58 rlineto +-30 -15 -28 -8 -24 0 rrcurveto +-42 0 -29 31 0 44 rrcurveto +0 20 4 23 10 25 rrcurveto +closepath +endchar } ND +/Jcircumflex { +0 500 hsbw +-12 84 hstem +696 20 hstem +843 53 hstem +328 94 vstem +441 100 vstem +29 203 rmoveto +-3 -143 69 -72 126 0 rrcurveto +130 0 71 88 0 152 rrcurveto +0 488 rlineto +-94 0 rlineto +0 -493 rlineto +0 -99 -30 -52 -77 0 rrcurveto +-66 0 -36 33 -5 110 rrcurveto +-85 -12 rlineto +closepath +359 640 rmoveto +53 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-105 -136 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/jcircumflex { +0 222 hsbw +-210 77 hstem +499 20 hstem +666 54 hstem +-43 101 71 82 167 99 vstem3 +112 666 rmoveto +55 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +-158 -867 rmoveto +22 -6 23 -3 24 0 rrcurveto +97 0 33 53 0 129 rrcurveto +0 547 rlineto +-88 0 rlineto +0 -545 rlineto +0 -89 -12 -18 -41 0 rrcurveto +-11 0 -13 3 -17 4 rrcurveto +-17 -75 rlineto +closepath +endchar } ND +/Kcedilla { +0 667 hsbw +-206 61 hstem +-75 51 hstem +0 361 hstem +696 20 hstem +73 95 vstem +406 82 vstem +540 125 vstem +73 0 rmoveto +95 0 rlineto +0 248 rlineto +117 114 rlineto +255 -362 rlineto +125 0 rlineto +-313 426 rlineto +300 290 rlineto +-129 0 rlineto +-355 -355 rlineto +0 355 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +256 -24 rmoveto +0 -51 rlineto +15 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -27 -13 -54 0 rrcurveto +-43 0 rlineto +-5 -55 rlineto +24 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -38 42 -89 0 rrcurveto +-5 -2 rlineto +-27 0 rlineto +closepath +endchar } ND +/kcedilla { +0 500 hsbw +-206 61 hstem +-75 51 hstem +0 308 hstem +499 20 hstem +696 20 hstem +66 88 vstem +323 82 vstem +66 0 rmoveto +88 0 rlineto +0 206 rlineto +62 59 rlineto +172 -265 rlineto +108 0 rlineto +-218 326 rlineto +198 193 rlineto +-114 0 rlineto +-208 -211 rlineto +0 408 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +179 -24 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-6 -55 rlineto +25 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -89 0 rrcurveto +-5 -2 rlineto +-27 0 rlineto +closepath +endchar } ND +/kgreenlandic { +0 500 hsbw +0 308 hstem +499 20 hstem +65 88 vstem +387 108 vstem +65 0 rmoveto +88 0 rlineto +0 206 rlineto +62 59 rlineto +172 -265 rlineto +108 0 rlineto +-218 326 rlineto +198 193 rlineto +-114 0 rlineto +-208 -211 rlineto +0 211 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/Lcedilla { +0 556 hsbw +-206 61 hstem +-75 51 hstem +0 84 hstem +696 20 hstem +73 95 vstem +348 82 vstem +73 0 rmoveto +448 0 rlineto +0 84 rlineto +-353 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +197 -24 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-6 -55 rlineto +25 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -89 0 rrcurveto +-5 -2 rlineto +-27 0 rlineto +closepath +endchar } ND +/lcedilla { +0 222 hsbw +-206 61 hstem +-75 51 hstem +0 20 hstem +696 20 hstem +128 82 vstem +64 0 rmoveto +88 0 rlineto +0 716 rlineto +-88 0 rlineto +0 -716 rlineto +closepath +-14 -24 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-5 -55 rlineto +24 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -88 0 rrcurveto +-5 -2 rlineto +-28 0 rlineto +closepath +endchar } ND +/Ncedilla { +0 722 hsbw +-206 61 hstem +-75 51 hstem +0 154 hstem +563 153 hstem +76 91 vstem +419 82 vstem +549 91 vstem +76 0 rmoveto +91 0 rlineto +0 563 rlineto +376 -563 rlineto +97 0 rlineto +0 716 rlineto +-91 0 rlineto +0 -562 rlineto +-376 562 rlineto +-97 0 rlineto +0 -716 rlineto +closepath +265 -24 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-5 -55 rlineto +24 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -88 0 rrcurveto +-5 -2 rlineto +-28 0 rlineto +closepath +endchar } ND +/ncedilla { +0 556 hsbw +-206 61 hstem +-75 51 hstem +0 445 hstem +454 76 hstem +66 79 vstem +304 82 vstem +399 88 vstem +66 0 rmoveto +88 0 rlineto +0 283 rlineto +0 133 62 38 76 0 rrcurveto +72 0 35 -49 0 -90 rrcurveto +0 -315 rlineto +88 0 rlineto +0 319 rlineto +0 149 -65 62 -112 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +160 -24 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-6 -55 rlineto +25 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -89 0 rrcurveto +-5 -2 rlineto +-27 0 rlineto +closepath +endchar } ND +/Eng { +0 723 hsbw +-12 84 hstem +607 20 hstem +648 80 hstem +81 95 vstem +574 96 vstem +81 716 rmoveto +0 -716 rlineto +95 0 rlineto +0 391 rlineto +0 168 66 89 134 0 rrcurveto +132 0 66 -94 0 -188 rrcurveto +0 -143 -24 -151 -114 0 rrcurveto +-22 0 -26 8 -31 18 rrcurveto +-42 -75 rlineto +39 -23 40 -12 42 0 rrcurveto +142 0 92 124 0 256 rrcurveto +0 212 -72 148 -194 0 rrcurveto +-82 0 -72 -16 -74 -85 rrcurveto +0 89 rlineto +-95 0 rlineto +closepath +endchar } ND +/eng { +0 556 hsbw +-210 77 hstem +0 445 hstem +454 76 hstem +68 79 vstem +401 88 vstem +489 319 rmoveto +0 135 -56 76 -121 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +88 0 rlineto +0 283 rlineto +0 130 60 41 76 0 rrcurveto +78 0 31 -42 0 -97 rrcurveto +0 -341 rlineto +0 -85 -11 -22 -42 0 rrcurveto +-10 0 -14 3 -17 4 rrcurveto +-17 -75 rlineto +22 -6 23 -3 24 0 rrcurveto +97 0 33 53 0 129 rrcurveto +0 347 rlineto +closepath +endchar } ND +/Omacron { +0 778 hsbw +-12 81 hstem +647 82 hstem +781 72 hstem +48 98 246 289 635 98 vstem3 +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +100 434 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/omacron { +0 556 hsbw +-12 73 hstem +458 72 hstem +599 72 hstem +33 91 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +5 340 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/Obreve { +0 778 hsbw +-12 81 hstem +647 245 hstem +48 98 vstem +254 60 vstem +483 60 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +337 545 rmoveto +-10 -47 -24 -19 -53 0 rrcurveto +-46 0 -27 20 -9 46 rrcurveto +-60 0 rlineto +10 -83 51 -44 84 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/obreve { +0 556 hsbw +-12 73 hstem +458 72 hstem +588 61 hstem +695 20 hstem +33 91 vstem +137 60 vstem +366 60 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +242 456 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +10 -83 51 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/Rcedilla { +0 722 hsbw +-206 61 hstem +-75 51 hstem +0 400 hstem +637 79 hstem +79 94 vstem +419 82 vstem +553 98 vstem +79 0 rmoveto +94 0 rlineto +0 318 rlineto +110 0 rlineto +129 0 18 -68 66 -101 rrcurveto +94 -149 rlineto +119 0 rlineto +-124 195 rlineto +-39 58 -26 40 -71 33 rrcurveto +137 18 65 74 0 103 rrcurveto +0 126 -96 69 -159 0 rrcurveto +-317 0 rlineto +0 -716 rlineto +closepath +94 400 rmoveto +0 237 rlineto +227 0 rlineto +105 0 48 -50 0 -66 rrcurveto +0 -85 -74 -36 -102 0 rrcurveto +-204 0 rlineto +closepath +168 -424 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-5 -55 rlineto +24 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -88 0 rrcurveto +-5 -2 rlineto +-28 0 rlineto +closepath +endchar } ND +/rcedilla { +0 333 hsbw +-206 61 hstem +-75 51 hstem +0 440 hstem +510 20 hstem +65 79 vstem +200 82 vstem +65 0 rmoveto +88 0 rlineto +0 271 rlineto +0 77 26 91 73 0 rrcurveto +21 0 21 -7 22 -12 rrcurveto +31 82 rlineto +-31 18 -30 10 -30 0 rrcurveto +-40 0 -32 -17 -40 -73 rrcurveto +0 79 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +57 -24 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-6 -55 rlineto +25 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -89 0 rrcurveto +-5 -2 rlineto +-27 0 rlineto +closepath +endchar } ND +/Scircumflex { +0 667 hsbw +-12 85 hstem +645 83 hstem +840 54 hstem +72 92 174 98 282 92 vstem3 +384 99 vstem +523 92 vstem +45 230 rmoveto +2 -154 133 -88 170 0 rrcurveto +136 0 129 89 0 125 rrcurveto +0 132 -125 51 -155 38 rrcurveto +-94 23 -77 10 0 81 rrcurveto +0 60 49 48 115 0 rrcurveto +110 0 54 -48 10 -90 rrcurveto +91 7 rlineto +-6 134 -121 80 -142 0 rrcurveto +-128 0 -124 -77 0 -120 rrcurveto +0 -116 111 -51 128 -34 rrcurveto +113 -28 99 -21 0 -87 rrcurveto +0 -81 -88 -40 -89 0 rrcurveto +-109 0 -90 52 -13 113 rrcurveto +-89 -8 rlineto +closepath +285 610 rmoveto +54 -83 rlineto +99 0 rlineto +-109 137 rlineto +-94 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/scircumflex { +0 500 hsbw +-12 73 hstem +458 72 hstem +666 54 hstem +45 85 210 86 376 85 vstem3 +31 155 rmoveto +18 -111 68 -56 135 0 rrcurveto +105 0 104 64 0 100 rrcurveto +0 109 -79 18 -130 35 rrcurveto +-20 7 -18 5 -14 3 rrcurveto +-47 10 -23 17 0 35 rrcurveto +0 36 31 31 82 0 rrcurveto +68 0 37 -32 8 -53 rrcurveto +86 12 rlineto +-20 106 -83 39 -103 0 rrcurveto +-106 0 -85 -55 0 -94 rrcurveto +0 -103 79 -25 131 -33 rrcurveto +75 -19 41 -4 0 -54 rrcurveto +0 -44 -38 -38 -81 0 rrcurveto +-80 0 -45 37 -9 70 rrcurveto +-87 -13 rlineto +closepath +230 511 rmoveto +53 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Tbar { +0 611 hsbw +0 372 hstem +631 85 hstem +259 95 vstem +259 307 rmoveto +0 -307 rlineto +95 0 rlineto +0 307 rlineto +160 0 rlineto +0 65 rlineto +-160 0 rlineto +0 259 rlineto +237 0 rlineto +0 85 rlineto +-568 0 rlineto +0 -85 rlineto +236 0 rlineto +0 -259 rlineto +-161 0 rlineto +0 -65 rlineto +161 0 rlineto +closepath +endchar } ND +/tbar { +0 278 hsbw +-7 82 hstem +251 64 hstem +450 69 hstem +71 88 vstem +71 251 rmoveto +0 -99 rlineto +0 -112 23 -47 100 0 rrcurveto +20 0 21 3 24 5 rrcurveto +-12 78 rlineto +-16 -3 -13 -1 -10 0 rrcurveto +-42 0 -7 16 0 56 rrcurveto +0 104 rlineto +84 0 rlineto +0 64 rlineto +-84 0 rlineto +0 135 rlineto +88 0 rlineto +0 69 rlineto +-88 0 rlineto +0 181 rlineto +-88 -53 rlineto +0 -128 rlineto +-65 0 rlineto +0 -69 rlineto +65 0 rlineto +0 -135 rlineto +-65 0 rlineto +0 -64 rlineto +65 0 rlineto +closepath +endchar } ND +/Utilde { +0 722 hsbw +-12 85 hstem +696 20 hstem +815 65 hstem +79 94 vstem +208 65 vstem +472 63 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-339 53 rmoveto +65 0 rlineto +0 26 12 20 26 0 rrcurveto +10 0 16 -6 21 -11 rrcurveto +35 -18 26 -9 20 0 rrcurveto +54 0 40 36 2 75 rrcurveto +-63 0 rlineto +-6 -35 -9 -8 -21 0 rrcurveto +-12 0 -14 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-63 0 -37 -46 0 -65 rrcurveto +closepath +endchar } ND +/utilde { +0 556 hsbw +-12 76 hstem +499 20 hstem +642 65 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-287 595 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 2 75 rrcurveto +-63 0 rlineto +-6 -34 -9 -8 -21 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-30 0 -24 -12 -18 -19 rrcurveto +-19 -21 -9 -26 1 -34 rrcurveto +closepath +endchar } ND +/Umacron { +0 722 hsbw +-12 85 hstem +696 20 hstem +773 72 hstem +79 94 219 283 548 94 vstem3 +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-328 57 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/umacron { +0 556 hsbw +-12 76 hstem +499 20 hstem +599 72 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-277 599 rmoveto +305 0 rlineto +0 72 rlineto +-305 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/Ubreve { +0 722 hsbw +-12 85 hstem +696 20 hstem +762 61 hstem +79 94 vstem +218 60 vstem +446 60 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-101 173 rmoveto +-10 -47 -24 -19 -53 0 rrcurveto +-46 0 -26 20 -9 46 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/ubreve { +0 556 hsbw +-12 76 hstem +499 20 hstem +588 61 hstem +695 20 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-40 715 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -26 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/Uogonek { +0 722 hsbw +-208 65 hstem +696 20 hstem +79 94 vstem +313 61 vstem +547 95 vstem +384 -12 rmoveto +184 10 74 121 0 183 rrcurveto +0 414 rlineto +-95 0 rlineto +0 -413 rlineto +0 -179 -53 -51 -142 0 rrcurveto +-124 0 -55 80 0 150 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -219 72 -80 175 -14 rrcurveto +-9 -36 -4 -30 0 -23 rrcurveto +0 -65 43 -43 63 0 rrcurveto +33 0 36 10 38 20 rrcurveto +0 58 rlineto +-30 -15 -27 -8 -25 0 rrcurveto +-40 0 -30 30 0 46 rrcurveto +0 14 3 19 7 22 rrcurveto +closepath +endchar } ND +/uogonek { +0 556 hsbw +-208 65 hstem +-12 76 hstem +499 20 hstem +64 88 vstem +389 62 vstem +465 0 rmoveto +19 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -106 -48 -71 -89 0 rrcurveto +-89 0 -18 59 0 108 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -133 57 -76 120 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +-4 -16 rlineto +-9 -34 -4 -28 0 -22 rrcurveto +0 -65 42 -43 64 0 rrcurveto +34 0 36 10 38 20 rrcurveto +0 58 rlineto +-30 -15 -28 -8 -24 0 rrcurveto +-40 0 -30 31 0 44 rrcurveto +0 20 4 23 10 25 rrcurveto +closepath +endchar } ND +/Wcircumflex { +0 944 hsbw +0 100 hstem +629 87 hstem +843 53 hstem +12 97 vstem +202 97 vstem +315 102 426 88 524 100 vstem3 +645 91 vstem +837 96 vstem +202 0 rmoveto +97 0 rlineto +152 545 rlineto +6 23 7 28 8 33 rrcurveto +2 -10 7 -28 13 -46 rrcurveto +151 -545 rlineto +91 0 rlineto +197 716 rlineto +-96 0 rlineto +-112 -460 rlineto +-15 -59 -12 -52 -9 -45 rrcurveto +-12 79 -18 85 -25 90 rrcurveto +-103 362 rlineto +-114 0 rlineto +-136 -484 rlineto +-2 -6 -4 -13 -5 -23 rrcurveto +-5 -22 -7 -30 -9 -38 rrcurveto +-9 48 -10 49 -12 50 rrcurveto +-109 469 rlineto +-97 0 rlineto +190 -716 rlineto +closepath +269 843 rmoveto +53 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-105 -136 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/wcircumflex { +0 722 hsbw +0 108 hstem +399 120 hstem +666 54 hstem +3 91 162 86 316 91 vstem3 +461 91 vstem +629 85 vstem +162 0 rmoveto +91 0 rlineto +105 399 rlineto +20 -88 rlineto +83 -311 rlineto +91 0 rlineto +162 519 rlineto +-85 0 rlineto +-89 -300 rlineto +-30 -100 rlineto +-26 99 rlineto +-77 301 rlineto +-91 0 rlineto +-82 -304 rlineto +-17 -66 -9 -36 -1 -5 rrcurveto +-31 111 rlineto +-82 300 rlineto +-91 0 rlineto +159 -519 rlineto +closepath +206 666 rmoveto +54 -83 rlineto +99 0 rlineto +-109 137 rlineto +-94 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/Ycircumflex { +0 667 hsbw +0 379 hstem +696 20 hstem +843 53 hstem +3 115 vstem +279 95 vstem +400 100 vstem +549 110 vstem +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +67 843 rmoveto +54 -83 rlineto +100 0 rlineto +-110 136 rlineto +-94 0 rlineto +-106 -136 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/ycircumflex { +0 500 hsbw +-210 85 hstem +499 20 hstem +666 54 hstem +14 97 117 98 223 93 vstem3 +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +211 866 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +endchar } ND +/longs { +0 222 hsbw +0 20 hstem +646 82 hstem +67 88 vstem +67 0 rmoveto +88 0 rlineto +0 566 rlineto +0 57 14 23 59 0 rrcurveto +25 0 rlineto +7 -1 10 -1 9 -1 rrcurveto +13 76 rlineto +-29 6 -27 3 -26 0 rrcurveto +-95 0 -48 -52 0 -102 rrcurveto +0 -574 rlineto +closepath +endchar } ND +/Aringacute { +0 667 hsbw +900 137 hstem +274 73 vstem +274 900 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/aringacute { +0 556 hsbw +803 136 hstem +241 72 vstem +241 803 rmoveto +72 0 rlineto +108 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/AEacute { +0 1000 hsbw +0 84 hstem +207 84 hstem +327 84 hstem +631 85 hstem +760 136 hstem +0 103 vstem +477 95 vstem +0 0 rmoveto +103 0 rlineto +98 207 rlineto +276 0 rlineto +0 -207 rlineto +468 0 rlineto +0 84 rlineto +-373 0 rlineto +0 243 rlineto +335 0 rlineto +0 84 rlineto +-335 0 rlineto +0 220 rlineto +360 0 rlineto +0 85 rlineto +-587 0 rlineto +-345 -716 rlineto +closepath +241 291 rmoveto +165 340 rlineto +71 0 rlineto +0 -340 rlineto +-236 0 rlineto +closepath +189 469 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/aeacute { +0 889 hsbw +-12 70 hstem +237 72 hstem +458 72 hstem +583 137 hstem +33 93 vstem +387 86 vstem +758 91 vstem +847 159 rmoveto +-92 11 rlineto +-18 -70 -49 -39 -66 0 rrcurveto +-92 0 -57 58 0 118 rrcurveto +376 0 rlineto +0 30 rlineto +0 123 -83 140 -148 0 rrcurveto +-75 0 -50 -24 -41 -46 rrcurveto +-42 61 -57 9 -81 0 rrcurveto +-115 0 -82 -45 -28 -117 rrcurveto +86 -10 rlineto +17 78 49 22 72 0 rrcurveto +85 0 30 -30 0 -81 rrcurveto +0 -20 rlineto +-34 -10 -42 -8 -47 -6 rrcurveto +-142 -18 -88 -42 0 -106 rrcurveto +0 -83 65 -66 112 0 rrcurveto +81 0 67 30 67 67 rrcurveto +50 -67 60 -30 83 0 rrcurveto +116 0 79 61 34 110 rrcurveto +closepath +-374 150 rmoveto +6 93 56 56 83 0 rrcurveto +78 0 52 -47 10 -102 rrcurveto +-285 0 rlineto +closepath +-86 -49 rmoveto +0 -153 -44 -49 -115 0 rrcurveto +-67 0 -35 35 0 47 rrcurveto +0 51 38 24 66 10 rrcurveto +79 12 52 12 26 11 rrcurveto +closepath +14 323 rmoveto +73 0 rlineto +108 137 rlineto +-116 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Oslashacute { +0 778 hsbw +-12 81 hstem +647 81 hstem +760 136 hstem +46 98 vstem +333 72 vstem +633 98 vstem +610 650 rmoveto +-75 57 -57 21 -88 0 rrcurveto +-201 0 -143 -165 0 -207 rrcurveto +0 -96 17 -55 63 -97 rrcurveto +-85 -96 rlineto +48 -41 rlineto +82 92 rlineto +76 -59 59 -16 85 0 rrcurveto +189 0 151 167 0 202 rrcurveto +0 95 -16 63 -60 89 rrcurveto +86 97 rlineto +-49 41 rlineto +-82 -92 rlineto +closepath +-58 -66 rmoveto +-364 -407 rlineto +-37 69 -7 43 0 69 rrcurveto +0 192 104 97 143 0 rrcurveto +61 0 38 -14 62 -49 rrcurveto +closepath +40 -50 rmoveto +27 -52 14 -59 0 -68 rrcurveto +0 -182 -103 -104 -142 0 rrcurveto +-60 0 -46 15 -53 44 rrcurveto +363 406 rlineto +closepath +-259 226 rmoveto +72 0 rlineto +108 136 rlineto +-116 0 rlineto +-64 -136 rlineto +closepath +endchar } ND +/oslashacute { +0 611 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +63 90 vstem +260 73 vstem +459 90 vstem +449 488 rmoveto +-51 29 -42 13 -53 0 rrcurveto +-128 0 -112 -82 0 -196 rrcurveto +0 -74 10 -56 51 -57 rrcurveto +-53 -69 rlineto +46 -35 rlineto +51 66 rlineto +40 -26 45 -13 52 0 rrcurveto +146 0 98 103 0 168 rrcurveto +0 74 -11 52 -46 64 rrcurveto +52 67 rlineto +-47 34 rlineto +-48 -62 rlineto +closepath +-50 -65 rmoveto +-220 -286 rlineto +-18 32 -8 41 0 49 rrcurveto +0 132 66 67 87 0 rrcurveto +32 0 31 -12 30 -23 rrcurveto +closepath +37 -47 rmoveto +17 -47 6 -25 0 -44 rrcurveto +0 -134 -66 -65 -90 0 rrcurveto +-32 0 -29 10 -25 20 rrcurveto +219 285 rlineto +closepath +-176 207 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/anoteleia { +0 278 hsbw +418 101 hstem +90 100 vstem +90 418 rmoveto +100 0 rlineto +0 101 rlineto +-100 0 rlineto +0 -101 rlineto +closepath +endchar } ND +/Wgrave { +0 944 hsbw +0 100 hstem +629 87 hstem +760 136 hstem +12 97 vstem +202 97 vstem +474 70 vstem +645 91 vstem +837 96 vstem +202 0 rmoveto +97 0 rlineto +152 545 rlineto +6 23 7 28 8 33 rrcurveto +2 -10 7 -28 13 -46 rrcurveto +151 -545 rlineto +91 0 rlineto +197 716 rlineto +-96 0 rlineto +-112 -460 rlineto +-15 -59 -12 -52 -9 -45 rrcurveto +-12 79 -18 85 -25 90 rrcurveto +-103 362 rlineto +-114 0 rlineto +-136 -484 rlineto +-2 -6 -4 -13 -5 -23 rrcurveto +-5 -22 -7 -30 -9 -38 rrcurveto +-9 48 -10 49 -12 50 rrcurveto +-109 469 rlineto +-97 0 rlineto +190 -716 rlineto +closepath +342 760 rmoveto +-65 136 rlineto +-118 0 rlineto +113 -136 rlineto +70 0 rlineto +closepath +endchar } ND +/wgrave { +0 722 hsbw +0 108 hstem +399 120 hstem +583 137 hstem +3 91 vstem +162 91 vstem +332 71 vstem +461 91 vstem +629 85 vstem +162 0 rmoveto +91 0 rlineto +105 399 rlineto +20 -88 rlineto +83 -311 rlineto +91 0 rlineto +162 519 rlineto +-85 0 rlineto +-89 -300 rlineto +-30 -100 rlineto +-26 99 rlineto +-77 301 rlineto +-91 0 rlineto +-82 -304 rlineto +-17 -66 -9 -36 -1 -5 rrcurveto +-31 111 rlineto +-82 300 rlineto +-91 0 rlineto +159 -519 rlineto +closepath +241 583 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/Wacute { +0 944 hsbw +0 100 hstem +629 87 hstem +760 136 hstem +12 97 vstem +202 97 vstem +426 73 vstem +645 91 vstem +837 96 vstem +202 0 rmoveto +97 0 rlineto +152 545 rlineto +6 23 7 28 8 33 rrcurveto +2 -10 7 -28 13 -46 rrcurveto +151 -545 rlineto +91 0 rlineto +197 716 rlineto +-96 0 rlineto +-112 -460 rlineto +-15 -59 -12 -52 -9 -45 rrcurveto +-12 79 -18 85 -25 90 rrcurveto +-103 362 rlineto +-114 0 rlineto +-136 -484 rlineto +-2 -6 -4 -13 -5 -23 rrcurveto +-5 -22 -7 -30 -9 -38 rrcurveto +-9 48 -10 49 -12 50 rrcurveto +-109 469 rlineto +-97 0 rlineto +190 -716 rlineto +closepath +224 760 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/wacute { +0 722 hsbw +0 108 hstem +399 120 hstem +583 137 hstem +3 91 vstem +162 91 vstem +284 73 vstem +461 91 vstem +629 85 vstem +162 0 rmoveto +91 0 rlineto +105 399 rlineto +20 -88 rlineto +83 -311 rlineto +91 0 rlineto +162 519 rlineto +-85 0 rlineto +-89 -300 rlineto +-30 -100 rlineto +-26 99 rlineto +-77 301 rlineto +-91 0 rlineto +-82 -304 rlineto +-17 -66 -9 -36 -1 -5 rrcurveto +-31 111 rlineto +-82 300 rlineto +-91 0 rlineto +159 -519 rlineto +closepath +122 583 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Wdieresis { +0 944 hsbw +0 100 hstem +629 87 hstem +760 100 hstem +12 97 vstem +202 97 vstem +333 91 vstem +515 91 vstem +645 91 vstem +837 96 vstem +202 0 rmoveto +97 0 rlineto +152 545 rlineto +6 23 7 28 8 33 rrcurveto +2 -10 7 -28 13 -46 rrcurveto +151 -545 rlineto +91 0 rlineto +197 716 rlineto +-96 0 rlineto +-112 -460 rlineto +-15 -59 -12 -52 -9 -45 rrcurveto +-12 79 -18 85 -25 90 rrcurveto +-103 362 rlineto +-114 0 rlineto +-136 -484 rlineto +-2 -6 -4 -13 -5 -23 rrcurveto +-5 -22 -7 -30 -9 -38 rrcurveto +-9 48 -10 49 -12 50 rrcurveto +-109 469 rlineto +-97 0 rlineto +190 -716 rlineto +closepath +131 760 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/wdieresis { +0 722 hsbw +0 108 hstem +399 120 hstem +620 100 hstem +3 91 vstem +230 92 vstem +412 92 vstem +629 85 vstem +162 0 rmoveto +91 0 rlineto +105 399 rlineto +20 -88 rlineto +83 -311 rlineto +91 0 rlineto +162 519 rlineto +-85 0 rlineto +-89 -300 rlineto +-30 -100 rlineto +-26 99 rlineto +-77 301 rlineto +-91 0 rlineto +-82 -304 rlineto +-17 -66 -9 -36 -1 -5 rrcurveto +-31 111 rlineto +-82 300 rlineto +-91 0 rlineto +159 -519 rlineto +closepath +68 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ygrave { +0 667 hsbw +0 379 hstem +696 20 hstem +760 136 hstem +3 120 293 81 549 110 vstem3 +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +111 760 rmoveto +-66 136 rlineto +-118 0 rlineto +113 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/ygrave { +0 500 hsbw +-210 85 hstem +499 20 hstem +583 137 hstem +16 95 vstem +246 70 vstem +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +254 783 rmoveto +-66 137 rlineto +-117 0 rlineto +113 -137 rlineto +70 0 rlineto +closepath +endchar } ND +/quotereversed { +0 222 hsbw +621 102 hstem +67 49 vstem +162 621 rmoveto +0 102 rlineto +-95 0 rlineto +0 -80 rlineto +0 -86 21 -42 60 -26 rrcurveto +21 34 rlineto +-35 14 -18 33 0 51 rrcurveto +46 0 rlineto +closepath +endchar } ND +/radicalex { +0 333 hsbw +599 72 hstem +-15 364 vstem +-15 599 rmoveto +364 0 rlineto +0 72 rlineto +-364 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/afii08941 { +0 556 hsbw +-14 314 hstem +372 72 hstem +656 72 hstem +72 94 vstem +211 300 rmoveto +-2 14 -5 24 -8 34 rrcurveto +151 0 rlineto +0 72 rlineto +-168 0 rlineto +-9 43 -4 31 0 20 rrcurveto +0 60 48 58 78 0 rrcurveto +69 0 53 -53 8 -73 rrcurveto +88 13 rlineto +-18 122 -89 63 -108 0 rrcurveto +-126 0 -97 -76 0 -126 rrcurveto +0 -26 3 -27 8 -29 rrcurveto +-62 0 rlineto +0 -72 rlineto +83 0 rlineto +12 -38 6 -24 2 -10 rrcurveto +-103 0 rlineto +0 -72 rlineto +103 0 rlineto +-11 -69 -37 -52 -63 -36 rrcurveto +34 -85 rlineto +46 30 51 16 54 0 rrcurveto +22 0 36 -8 50 -15 rrcurveto +46 -14 36 -7 24 0 rrcurveto +30 0 38 11 48 20 rrcurveto +-28 80 rlineto +-39 -18 -30 -9 -22 0 rrcurveto +-23 0 -38 7 -56 13 rrcurveto +-34 8 -30 4 -28 0 rrcurveto +-22 0 -23 -4 -24 -7 rrcurveto +41 42 26 45 11 48 rrcurveto +138 0 rlineto +0 72 rlineto +-136 0 rlineto +closepath +endchar } ND +/estimated { +0 600 hsbw +-17 36 hstem +259 36 hstem +500 35 hstem +44 113 vstem +157 259 rmoveto +404 0 rlineto +-8 182 -111 94 -140 0 rrcurveto +-152 0 -106 -115 0 -161 rrcurveto +0 -159 104 -117 154 0 rrcurveto +80 0 70 23 78 112 rrcurveto +-35 21 rlineto +-46 -80 -65 -40 -82 0 rrcurveto +-58 0 -49 19 -38 40 rrcurveto +0 181 rlineto +closepath +291 36 rmoveto +-291 0 rlineto +0 145 rlineto +39 40 48 20 57 0 rrcurveto +56 0 49 -20 42 -40 rrcurveto +0 -145 rlineto +closepath +endchar } ND +/oneeighth { +0 834 hsbw +-24 55 hstem +152 52 hstem +300 428 hstem +162 70 vstem +535 72 vstem +727 72 vstem +111 -28 rmoveto +77 0 rlineto +538 756 rlineto +-77 0 rlineto +-538 -756 rlineto +closepath +51 386 rmoveto +70 0 rlineto +0 367 rlineto +-52 0 rlineto +-31 -40 -61 -40 -36 -12 rrcurveto +0 -60 rlineto +40 10 36 19 34 26 rrcurveto +0 -270 rlineto +closepath +436 -179 rmoveto +-52 -14 -25 -30 0 -48 rrcurveto +0 -66 56 -45 90 0 rrcurveto +84 0 62 45 0 68 rrcurveto +0 46 -28 30 -54 14 rrcurveto +45 14 23 26 0 38 rrcurveto +0 56 -46 39 -89 0 rrcurveto +-91 0 -38 -42 0 -52 rrcurveto +0 -38 21 -26 42 -15 rrcurveto +closepath +9 74 rmoveto +0 25 23 22 36 0 rrcurveto +34 0 27 -20 0 -29 rrcurveto +0 -30 -28 -17 -32 0 rrcurveto +-34 0 -26 17 0 32 rrcurveto +closepath +-13 -160 rmoveto +0 33 25 26 46 0 rrcurveto +44 0 31 -24 0 -38 rrcurveto +0 -35 -28 -24 -45 0 rrcurveto +-49 0 -24 20 0 42 rrcurveto +closepath +endchar } ND +/threeeighths { +0 834 hsbw +-24 55 hstem +152 52 hstem +300 52 hstem +353 375 hstem +112 76 vstem +240 76 vstem +521 73 vstem +727 73 vstem +112 -28 rmoveto +76 0 rlineto +538 756 rlineto +-77 0 rlineto +-537 -756 rlineto +closepath +-95 482 rmoveto +14 -70 50 -35 87 0 rrcurveto +89 0 59 48 0 66 rrcurveto +0 47 -29 31 -56 14 rrcurveto +45 12 23 26 0 40 rrcurveto +0 61 -47 31 -93 0 rrcurveto +-66 0 -42 -21 -26 -72 rrcurveto +70 -11 rlineto +11 32 23 17 34 0 rrcurveto +39 0 20 -15 0 -28 rrcurveto +0 -34 -26 -16 -50 0 rrcurveto +-11 -54 rlineto +29 0 rlineto +50 0 26 -16 0 -36 rrcurveto +0 -38 -33 -27 -44 0 rrcurveto +-40 0 -25 18 -10 37 rrcurveto +-71 -7 rlineto +closepath +582 -275 rmoveto +-52 -14 -26 -30 0 -48 rrcurveto +0 -68 59 -43 87 0 rrcurveto +84 0 62 42 0 71 rrcurveto +0 46 -28 30 -54 14 rrcurveto +46 16 23 26 0 36 rrcurveto +0 56 -46 39 -90 0 rrcurveto +-83 0 -46 -36 0 -58 rrcurveto +0 -38 21 -26 43 -15 rrcurveto +closepath +9 74 rmoveto +0 25 22 22 36 0 rrcurveto +34 0 27 -20 0 -29 rrcurveto +0 -30 -28 -17 -32 0 rrcurveto +-34 0 -25 17 0 32 rrcurveto +closepath +-14 -160 rmoveto +0 33 25 26 47 0 rrcurveto +44 0 30 -24 0 -38 rrcurveto +0 -34 -27 -25 -46 0 rrcurveto +-49 0 -24 20 0 42 rrcurveto +closepath +endchar } ND +/fiveeighths { +0 834 hsbw +-24 55 hstem +152 52 hstem +300 52 hstem +353 375 hstem +112 76 vstem +241 73 vstem +521 73 vstem +727 73 vstem +112 -28 rmoveto +76 0 rlineto +538 756 rlineto +-77 0 rlineto +-537 -756 rlineto +closepath +-95 480 rmoveto +13 -64 54 -39 76 0 rrcurveto +85 0 69 53 0 79 rrcurveto +0 70 -59 54 -73 0 rrcurveto +-30 0 -27 -9 -25 -16 rrcurveto +16 77 rlineto +183 0 rlineto +0 59 rlineto +-230 0 rlineto +-38 -184 rlineto +69 -12 rlineto +22 20 23 11 23 0 rrcurveto +42 0 31 -33 0 -37 rrcurveto +0 -42 -33 -29 -49 0 rrcurveto +-40 0 -24 17 -8 34 rrcurveto +-70 -9 rlineto +closepath +582 -273 rmoveto +-52 -14 -26 -30 0 -48 rrcurveto +0 -68 59 -43 87 0 rrcurveto +84 0 62 42 0 71 rrcurveto +0 46 -28 30 -54 14 rrcurveto +46 16 23 26 0 36 rrcurveto +0 56 -46 39 -90 0 rrcurveto +-83 0 -46 -36 0 -58 rrcurveto +0 -38 21 -26 43 -15 rrcurveto +closepath +9 74 rmoveto +0 25 22 22 36 0 rrcurveto +34 0 27 -20 0 -29 rrcurveto +0 -30 -28 -17 -32 0 rrcurveto +-34 0 -25 17 0 32 rrcurveto +closepath +-14 -160 rmoveto +0 33 25 26 47 0 rrcurveto +44 0 30 -24 0 -38 rrcurveto +0 -34 -27 -25 -46 0 rrcurveto +-49 0 -24 20 0 42 rrcurveto +closepath +endchar } ND +/seveneighths { +0 834 hsbw +-24 55 hstem +152 52 hstem +300 428 hstem +36 268 vstem +535 72 vstem +727 72 vstem +100 -28 rmoveto +76 0 rlineto +538 756 rlineto +-77 0 rlineto +-537 -756 rlineto +closepath +-4 386 rmoveto +72 0 rlineto +11 120 45 106 80 93 rrcurveto +0 39 rlineto +-268 0 rlineto +0 -59 rlineto +188 0 rlineto +-78 -95 -42 -100 -8 -104 rrcurveto +closepath +502 -179 rmoveto +-52 -14 -25 -30 0 -48 rrcurveto +0 -68 59 -43 87 0 rrcurveto +84 0 62 42 0 71 rrcurveto +0 46 -28 30 -54 14 rrcurveto +45 14 23 26 0 38 rrcurveto +0 56 -46 39 -89 0 rrcurveto +-91 0 -38 -42 0 -52 rrcurveto +0 -38 21 -26 42 -15 rrcurveto +closepath +9 74 rmoveto +0 25 23 22 36 0 rrcurveto +34 0 27 -20 0 -29 rrcurveto +0 -30 -30 -17 -30 0 rrcurveto +-34 0 -26 17 0 32 rrcurveto +closepath +-13 -160 rmoveto +0 33 25 26 46 0 rrcurveto +44 0 31 -24 0 -38 rrcurveto +0 -35 -28 -24 -45 0 rrcurveto +-49 0 -24 20 0 42 rrcurveto +closepath +endchar } ND +/commaaccent { +0 333 hsbw +-156 85 hstem +164 55 vstem +117 -156 rmoveto +47 0 rlineto +-6 -34 -18 -24 -30 -14 rrcurveto +27 -41 rlineto +61 26 21 43 0 72 rrcurveto +0 57 rlineto +-102 0 rlineto +0 -85 rlineto +closepath +endchar } ND +/undercommaaccent { +0 333 hsbw +-206 61 hstem +-75 51 hstem +182 82 vstem +104 -24 rmoveto +0 -51 rlineto +16 0 rlineto +41 0 21 -10 0 -22 rrcurveto +0 -25 -28 -13 -54 0 rrcurveto +-42 0 rlineto +-6 -55 rlineto +25 -4 23 -2 21 0 rrcurveto +98 0 45 45 0 50 rrcurveto +0 47 -39 42 -89 0 rrcurveto +-5 -2 rlineto +-27 0 rlineto +closepath +endchar } ND +/tonos { +0 333 hsbw +583 137 hstem +108 73 vstem +108 583 rmoveto +73 0 rlineto +108 137 rlineto +-116 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/dieresistonos { +0 333 hsbw +601 93 hstem +-11 85 vstem +105 58 vstem +260 84 vstem +169 736 rmoveto +-64 -135 rlineto +58 0 rlineto +97 135 rlineto +-91 0 rlineto +closepath +91 -42 rmoveto +0 -93 rlineto +84 0 rlineto +0 93 rlineto +-84 0 rlineto +closepath +-271 0 rmoveto +0 -93 rlineto +85 0 rlineto +0 93 rlineto +-85 0 rlineto +closepath +endchar } ND +/Alphatonos { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +26 73 vstem +274 102 vstem +562 107 vstem +0 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +10 -36 17 -50 24 -63 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-180 285 rmoveto +73 0 rlineto +108 137 rlineto +-116 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Epsilontonos { +0 784 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +-43 72 vstem +196 95 vstem +196 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +422 0 rlineto +0 85 rlineto +-517 0 rlineto +0 -716 rlineto +closepath +-239 579 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/Etatonos { +0 838 hsbw +0 422 hstem +579 137 hstem +-43 73 vstem +176 95 vstem +643 94 vstem +176 0 rmoveto +95 0 rlineto +0 337 rlineto +372 0 rlineto +0 -337 rlineto +94 0 rlineto +0 716 rlineto +-94 0 rlineto +0 -294 rlineto +-372 0 rlineto +0 294 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-219 579 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Iotatonos { +0 384 hsbw +0 20 hstem +579 137 hstem +-43 73 vstem +176 95 vstem +176 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-219 579 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Omicrontonos { +0 774 hsbw +-12 81 hstem +579 137 hstem +-43 72 vstem +43 98 vstem +630 98 vstem +43 349 rmoveto +0 -179 142 -182 200 0 rrcurveto +200 0 143 147 0 222 rrcurveto +0 222 -141 150 -201 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 208 105 92 140 0 rrcurveto +142 0 102 -108 0 -182 rrcurveto +0 -179 -100 -109 -145 0 rrcurveto +-150 0 -94 115 0 163 rrcurveto +closepath +-184 232 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/Upsilontonos { +0 855 hsbw +0 379 hstem +579 137 hstem +-43 72 vstem +186 115 vstem +461 95 vstem +731 111 vstem +461 0 rmoveto +95 0 rlineto +0 303 rlineto +286 413 rlineto +-111 0 rlineto +-138 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-22 38 -24 40 -27 43 rrcurveto +-141 216 rlineto +-115 0 rlineto +275 -413 rlineto +0 -303 rlineto +closepath +-504 579 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/Omegatonos { +0 752 hsbw +0 84 hstem +647 81 hstem +-43 72 vstem +60 99 210 339 601 97 vstem3 +52 84 rmoveto +0 -84 rlineto +279 0 rlineto +0 79 rlineto +-116 55 -57 99 0 144 rrcurveto +0 152 87 118 135 0 rrcurveto +132 0 89 -116 0 -158 rrcurveto +0 -142 -58 -98 -116 -54 rrcurveto +0 -79 rlineto +279 0 rlineto +0 84 rlineto +-157 0 rlineto +99 82 50 101 0 120 rrcurveto +0 193 -116 148 -201 0 rrcurveto +-196 0 -125 -154 0 -187 rrcurveto +0 -120 49 -101 99 -82 rrcurveto +-156 0 rlineto +closepath +-95 495 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/iotadieresistonos { +0 222 hsbw +0 20 hstem +499 20 hstem +601 93 hstem +-66 84 67 88 204 84 vstem3 +67 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +47 736 rmoveto +-64 -135 rlineto +57 0 rlineto +98 135 rlineto +-91 0 rlineto +closepath +90 -42 rmoveto +0 -93 rlineto +85 0 rlineto +0 93 rlineto +-85 0 rlineto +closepath +-270 0 rmoveto +0 -93 rlineto +84 0 rlineto +0 93 rlineto +-84 0 rlineto +closepath +endchar } ND +/Alpha { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +-1 100 vstem +273 102 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +endchar } ND +/Beta { +0 667 hsbw +0 84 hstem +331 84 hstem +631 85 hstem +73 95 vstem +486 93 vstem +73 0 rmoveto +273 0 rlineto +151 0 117 74 0 134 rrcurveto +0 82 -49 65 -86 26 rrcurveto +66 33 34 57 0 62 rrcurveto +0 108 -101 75 -136 0 rrcurveto +-269 0 rlineto +0 -716 rlineto +closepath +95 415 rmoveto +0 216 rlineto +143 0 rlineto +110 0 65 -23 0 -87 rrcurveto +0 -84 -60 -22 -103 0 rrcurveto +-155 0 rlineto +closepath +0 -331 rmoveto +0 247 rlineto +165 0 rlineto +108 0 75 -34 0 -89 rrcurveto +0 -91 -59 -33 -111 0 rrcurveto +-178 0 rlineto +closepath +endchar } ND +/Delta { +0 668 hsbw +0 84 hstem +641 75 hstem +-1 670 vstem +-1 0 rmoveto +670 0 rlineto +-293 716 rlineto +-102 0 rlineto +-275 -716 rlineto +closepath +131 84 rmoveto +154 420 rlineto +17 46 13 46 9 45 rrcurveto +10 -38 17 -50 24 -61 rrcurveto +154 -408 rlineto +-398 0 rlineto +closepath +endchar } ND +/Epsilon { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +79 95 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Zeta { +0 611 hsbw +0 84 hstem +631 85 hstem +20 109 vstem +461 113 vstem +20 0 rmoveto +566 0 rlineto +0 84 rlineto +-457 0 rlineto +43 51 rlineto +402 496 rlineto +0 85 rlineto +-512 0 rlineto +0 -85 rlineto +399 0 rlineto +-24 -24 -24 -29 -26 -32 rrcurveto +-367 -458 rlineto +0 -88 rlineto +closepath +endchar } ND +/Eta { +0 722 hsbw +0 422 hstem +696 20 hstem +80 95 vstem +547 95 vstem +80 0 rmoveto +95 0 rlineto +0 337 rlineto +372 0 rlineto +0 -337 rlineto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -294 rlineto +-372 0 rlineto +0 294 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Iota { +0 278 hsbw +0 20 hstem +696 20 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Kappa { +0 667 hsbw +0 361 hstem +696 20 hstem +73 95 vstem +540 125 vstem +73 0 rmoveto +95 0 rlineto +0 248 rlineto +117 114 rlineto +255 -362 rlineto +125 0 rlineto +-313 426 rlineto +300 290 rlineto +-129 0 rlineto +-355 -355 rlineto +0 355 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Lambda { +0 668 hsbw +0 20 hstem +637 79 hstem +5 97 285 95 563 97 vstem3 +383 716 rmoveto +-98 0 rlineto +-280 -716 rlineto +97 0 rlineto +193 520 rlineto +14 38 13 39 11 40 rrcurveto +9 -33 13 -39 16 -45 rrcurveto +186 -520 rlineto +103 0 rlineto +-277 716 rlineto +closepath +endchar } ND +/Mu { +0 833 hsbw +0 103 hstem +609 107 hstem +74 93 374 84 666 91 vstem3 +74 0 rmoveto +92 0 rlineto +0 609 rlineto +207 -609 rlineto +85 0 rlineto +208 599 rlineto +0 -599 rlineto +91 0 rlineto +0 716 rlineto +-127 0 rlineto +-172 -498 rlineto +-7 -26 -8 -23 -7 -18 rrcurveto +-7 -19 -5 -16 -4 -13 rrcurveto +-7 23 -11 35 -16 48 rrcurveto +-169 507 rlineto +-143 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Nu { +0 722 hsbw +0 154 hstem +563 153 hstem +76 91 vstem +549 91 vstem +76 0 rmoveto +91 0 rlineto +0 563 rlineto +376 -563 rlineto +97 0 rlineto +0 716 rlineto +-91 0 rlineto +0 -562 rlineto +-376 562 rlineto +-97 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Xi { +0 650 hsbw +0 84 316 84 632 84 hstem3 +112 426 vstem +66 716 rmoveto +0 -85 rlineto +517 0 rlineto +0 85 rlineto +-517 0 rlineto +closepath +46 -316 rmoveto +0 -84 rlineto +426 0 rlineto +0 84 rlineto +-426 0 rlineto +closepath +-59 -316 rmoveto +0 -84 rlineto +544 0 rlineto +0 84 rlineto +-544 0 rlineto +closepath +endchar } ND +/Omicron { +0 778 hsbw +-12 81 hstem +647 82 hstem +48 98 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +endchar } ND +/Pi { +0 722 hsbw +0 20 hstem +631 85 hstem +80 95 vstem +547 95 vstem +80 0 rmoveto +95 0 rlineto +0 631 rlineto +372 0 rlineto +0 -631 rlineto +95 0 rlineto +0 716 rlineto +-562 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Rho { +0 667 hsbw +0 375 hstem +631 85 hstem +77 95 vstem +526 98 vstem +77 0 rmoveto +95 0 rlineto +0 291 rlineto +183 0 rlineto +202 0 67 95 0 123 rrcurveto +0 137 -107 70 -170 0 rrcurveto +-270 0 rlineto +0 -716 rlineto +closepath +95 375 rmoveto +0 256 rlineto +183 0 rlineto +115 0 56 -31 0 -94 rrcurveto +0 -83 -47 -48 -122 0 rrcurveto +-185 0 rlineto +closepath +endchar } ND +/Sigma { +0 618 hsbw +0 84 hstem +631 85 hstem +72 103 vstem +306 113 vstem +559 716 rmoveto +-487 0 rlineto +0 -95 rlineto +234 -249 rlineto +-234 -273 rlineto +0 -99 rlineto +507 0 rlineto +0 84 rlineto +-404 0 rlineto +244 288 rlineto +-244 259 rlineto +384 0 rlineto +0 85 rlineto +closepath +endchar } ND +/Tau { +0 611 hsbw +0 20 hstem +631 85 hstem +259 95 vstem +259 0 rmoveto +95 0 rlineto +0 631 rlineto +237 0 rlineto +0 85 rlineto +-568 0 rlineto +0 -85 rlineto +236 0 rlineto +0 -631 rlineto +closepath +endchar } ND +/Upsilon { +0 667 hsbw +0 379 hstem +696 20 hstem +3 120 293 81 549 110 vstem3 +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +endchar } ND +/Chi { +0 667 hsbw +0 20 hstem +696 20 hstem +37 113 vstem +538 103 vstem +4 0 rmoveto +114 0 rlineto +180 250 rlineto +6 9 12 18 16 26 rrcurveto +10 -18 11 -16 10 -14 rrcurveto +180 -255 rlineto +118 0 rlineto +-271 378 rlineto +251 338 rlineto +-103 0 rlineto +-144 -190 rlineto +-22 -29 -19 -27 -16 -26 rrcurveto +-12 20 -19 30 -26 38 rrcurveto +-130 184 rlineto +-113 0 rlineto +244 -343 rlineto +-277 -373 rlineto +closepath +endchar } ND +/Psi { +0 835 hsbw +0 302 hstem +696 20 hstem +62 95 370 95 678 95 vstem3 +62 716 rmoveto +0 -211 rlineto +0 -174 93 -106 215 -4 rrcurveto +0 -221 rlineto +95 0 rlineto +0 221 rlineto +205 3 103 98 0 192 rrcurveto +0 202 rlineto +-95 0 rlineto +0 -181 rlineto +0 -168 -77 -56 -136 -9 rrcurveto +0 414 rlineto +-95 0 rlineto +0 -414 rlineto +-146 12 -67 51 0 158 rrcurveto +0 193 rlineto +-95 0 rlineto +closepath +endchar } ND +/Omega { +0 748 hsbw +0 84 hstem +647 81 hstem +55 99 205 339 596 97 vstem3 +47 84 rmoveto +0 -84 rlineto +279 0 rlineto +0 79 rlineto +-116 55 -57 99 0 144 rrcurveto +0 152 87 118 135 0 rrcurveto +132 0 89 -116 0 -158 rrcurveto +0 -142 -58 -98 -116 -54 rrcurveto +0 -79 rlineto +279 0 rlineto +0 84 rlineto +-157 0 rlineto +99 82 50 101 0 120 rrcurveto +0 193 -116 148 -201 0 rrcurveto +-196 0 -125 -154 0 -187 rrcurveto +0 -120 49 -101 100 -82 rrcurveto +-157 0 rlineto +closepath +endchar } ND +/Iotadieresis { +0 278 hsbw +0 20 hstem +696 20 hstem +760 100 hstem +2 92 vstem +184 92 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-91 760 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Upsilondieresis { +0 667 hsbw +0 379 hstem +696 20 hstem +760 100 hstem +3 115 vstem +194 92 vstem +376 92 vstem +549 110 vstem +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +-85 760 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/alphatonos { +0 578 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +35 97 vstem +228 72 vstem +405 73 vstem +451 519 rmoveto +-16 -48 -8 -29 -2 -11 rrcurveto +-44 66 -47 33 -81 0 rrcurveto +-131 0 -87 -98 0 -172 rrcurveto +0 -167 86 -105 131 0 rrcurveto +86 0 56 35 27 72 rrcurveto +7 -31 11 -32 14 -32 rrcurveto +88 0 rlineto +-20 47 -21 86 -22 126 rrcurveto +18 101 21 87 24 72 rrcurveto +-90 0 rlineto +closepath +-183 -61 rmoveto +81 0 56 -66 0 -128 rrcurveto +0 -131 -61 -72 -81 0 rrcurveto +-83 0 -48 75 0 124 rrcurveto +0 128 52 70 84 0 rrcurveto +closepath +-40 125 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/epsilontonos { +0 446 hsbw +-12 73 hstem +230 73 hstem +455 75 hstem +583 137 hstem +134 153 vstem +405 460 rmoveto +-47 46 -57 24 -66 0 rrcurveto +-118 0 -55 -73 0 -77 rrcurveto +0 -48 24 -37 48 -27 rrcurveto +-58 -25 -28 -42 0 -58 rrcurveto +0 -83 59 -72 122 0 rrcurveto +77 0 65 27 52 56 rrcurveto +-63 54 rlineto +-40 -43 -43 -21 -46 0 rrcurveto +-50 0 -42 35 0 47 rrcurveto +0 44 30 43 94 0 rrcurveto +24 0 rlineto +0 73 rlineto +-25 0 rlineto +-75 0 -40 33 0 46 rrcurveto +0 36 26 37 56 0 rrcurveto +35 0 38 -16 40 -30 rrcurveto +63 51 rlineto +closepath +-226 123 rmoveto +72 0 rlineto +108 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/etatonos { +0 556 hsbw +-199 20 hstem +0 445 hstem +454 76 hstem +583 137 hstem +68 79 vstem +228 72 vstem +401 88 vstem +68 0 rmoveto +88 0 rlineto +0 283 rlineto +0 130 60 41 76 0 rrcurveto +78 0 31 -42 0 -97 rrcurveto +0 -514 rlineto +88 0 rlineto +0 518 rlineto +0 135 -56 76 -121 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +160 583 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/iotatonos { +0 222 hsbw +0 20 hstem +499 20 hstem +583 137 hstem +67 88 vstem +67 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-19 583 rmoveto +73 0 rlineto +108 137 rlineto +-116 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/upsilondieresistonos { +0 547 hsbw +-12 73 hstem +499 20 hstem +601 93 hstem +97 84 vstem +213 57 vstem +367 85 vstem +66 519 rmoveto +0 -308 rlineto +0 -143 73 -80 133 0 rrcurveto +125 0 84 72 0 155 rrcurveto +0 304 rlineto +-87 0 rlineto +0 -301 rlineto +0 -95 -42 -62 -79 0 rrcurveto +-63 0 -56 44 0 106 rrcurveto +0 308 rlineto +-88 0 rlineto +closepath +211 217 rmoveto +-64 -135 rlineto +57 0 rlineto +98 135 rlineto +-91 0 rlineto +closepath +90 -42 rmoveto +0 -93 rlineto +85 0 rlineto +0 93 rlineto +-85 0 rlineto +closepath +-270 0 rmoveto +0 -93 rlineto +84 0 rlineto +0 93 rlineto +-84 0 rlineto +closepath +endchar } ND +/beta { +0 575 hsbw +-199 20 hstem +-12 65 hstem +358 64 hstem +656 72 hstem +68 88 vstem +233 120 vstem +405 82 vstem +156 66 rmoveto +37 -52 54 -26 71 0 rrcurveto +137 0 75 104 0 111 rrcurveto +0 102 -64 77 -113 12 rrcurveto +69 12 65 55 0 87 rrcurveto +0 89 -69 91 -130 0 rrcurveto +-131 0 -89 -83 0 -154 rrcurveto +0 -690 rlineto +88 0 rlineto +0 265 rlineto +closepath +77 356 rmoveto +0 -64 rlineto +13 0 rlineto +114 0 78 -59 0 -101 rrcurveto +0 -83 -50 -62 -81 0 rrcurveto +-109 0 -42 88 0 138 rrcurveto +0 197 rlineto +0 119 37 61 90 0 rrcurveto +69 0 53 -49 0 -64 rrcurveto +0 -79 -52 -42 -120 0 rrcurveto +closepath +endchar } ND +/gamma { +0 500 hsbw +-199 309 hstem +499 20 hstem +12 94 208 86 398 90 vstem3 +12 519 rmoveto +193 -519 rlineto +0 -199 rlineto +89 0 rlineto +0 199 rlineto +194 519 rlineto +-90 0 rlineto +-148 -409 rlineto +-146 409 rlineto +-92 0 rlineto +closepath +endchar } ND +/zeta { +0 441 hsbw +-210 20 hstem +0 20 hstem +645 71 hstem +35 88 vstem +338 85 vstem +114 716 rmoveto +0 -71 rlineto +203 0 rlineto +-154 -104 -128 -182 0 -153 rrcurveto +0 -117 53 -86 133 -3 rrcurveto +72 0 45 -7 0 -54 rrcurveto +0 -39 -28 -23 -54 -6 rrcurveto +-24 -81 rlineto +106 0 85 68 0 91 rrcurveto +0 96 -69 26 -119 11 rrcurveto +-79 5 -33 36 0 79 rrcurveto +0 148 134 198 176 108 rrcurveto +0 60 rlineto +-319 0 rlineto +closepath +endchar } ND +/eta { +0 556 hsbw +-199 20 hstem +0 445 hstem +454 76 hstem +68 79 vstem +401 88 vstem +68 0 rmoveto +88 0 rlineto +0 283 rlineto +0 130 60 41 76 0 rrcurveto +78 0 31 -42 0 -97 rrcurveto +0 -514 rlineto +88 0 rlineto +0 518 rlineto +0 135 -56 76 -121 0 rrcurveto +-72 0 -55 -29 -38 -56 rrcurveto +0 74 rlineto +-79 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/theta { +0 556 hsbw +-12 73 hstem +323 71 hstem +656 72 hstem +45 91 vstem +421 91 vstem +45 358 rmoveto +0 -247 77 -123 156 0 rrcurveto +156 0 78 123 0 247 rrcurveto +0 246 -78 124 -156 0 rrcurveto +-156 0 -77 -124 0 -246 rrcurveto +closepath +91 36 rmoveto +3 174 47 88 91 0 rrcurveto +81 0 56 -60 7 -202 rrcurveto +-285 0 rlineto +closepath +285 -71 rmoveto +-4 -175 -47 -87 -92 0 rrcurveto +-92 0 -47 87 -3 175 rrcurveto +285 0 rlineto +closepath +endchar } ND +/iota { +0 222 hsbw +0 20 hstem +499 20 hstem +67 88 vstem +67 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/kappa { +0 500 hsbw +0 315 hstem +499 20 hstem +65 88 vstem +387 113 vstem +65 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 214 rlineto +32 30 rlineto +202 -244 rlineto +113 0 rlineto +-252 303 rlineto +231 216 rlineto +-116 0 rlineto +-210 -204 rlineto +0 204 rlineto +-88 0 rlineto +closepath +endchar } ND +/lambda { +0 500 hsbw +0 20 hstem +696 20 hstem +12 92 vstem +127 93 vstem +395 92 vstem +250 388 rmoveto +145 -388 rlineto +92 0 rlineto +-267 716 rlineto +-93 0 rlineto +77 -207 rlineto +-192 -509 rlineto +92 0 rlineto +146 388 rlineto +closepath +endchar } ND +/mu { +0 576 hsbw +-199 20 hstem +-12 79 hstem +499 20 hstem +78 87 vstem +418 79 vstem +497 519 rmoveto +-86 0 rlineto +0 -222 rlineto +0 -156 -20 -74 -106 0 rrcurveto +-106 0 -14 81 0 151 rrcurveto +0 220 rlineto +-87 0 rlineto +0 -718 rlineto +87 0 rlineto +0 251 rlineto +36 -49 34 -15 54 0 rrcurveto +56 0 38 18 35 56 rrcurveto +0 -62 rlineto +79 0 rlineto +0 519 rlineto +closepath +endchar } ND +/nu { +0 500 hsbw +0 104 hstem +499 20 hstem +11 94 210 81 398 90 vstem3 +210 0 rmoveto +82 0 rlineto +196 519 rlineto +-90 0 rlineto +-115 -317 rlineto +-14 -38 -11 -33 -8 -27 rrcurveto +-10 36 -11 34 -12 34 rrcurveto +-112 311 rlineto +-92 0 rlineto +197 -519 rlineto +closepath +endchar } ND +/xi { +0 448 hsbw +-210 690 hstem +655 73 hstem +71 82 vstem +344 86 vstem +377 728 rmoveto +-87 0 rlineto +-143 0 -76 -73 0 -85 rrcurveto +0 -60 39 -69 94 -12 rrcurveto +-94 -40 -65 -84 0 -100 rrcurveto +0 -122 74 -69 142 -15 rrcurveto +57 -6 26 -19 0 -34 rrcurveto +0 -30 -24 -33 -65 -6 rrcurveto +-22 -81 rlineto +120 2 77 68 0 85 rrcurveto +0 77 -50 46 -100 10 rrcurveto +-122 12 -24 55 0 63 rrcurveto +0 120 108 79 129 0 rrcurveto +0 73 rlineto +-72 0 rlineto +-98 0 -48 28 0 56 rrcurveto +0 58 45 33 107 0 rrcurveto +72 0 rlineto +0 73 rlineto +closepath +endchar } ND +/omicron { +0 556 hsbw +-12 73 hstem +458 72 hstem +33 91 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +endchar } ND +/rho { +0 569 hsbw +-199 20 hstem +-12 73 hstem +458 72 hstem +64 88 vstem +443 91 vstem +64 -199 rmoveto +88 0 rlineto +0 248 rlineto +37 -41 51 -20 64 0 rrcurveto +137 0 93 110 0 162 rrcurveto +0 160 -97 110 -146 0 rrcurveto +-148 0 -79 -92 0 -197 rrcurveto +0 -440 rlineto +closepath +230 657 rmoveto +80 0 69 -59 0 -144 rrcurveto +0 -127 -61 -67 -88 0 rrcurveto +-87 0 -54 63 0 128 rrcurveto +0 142 55 64 86 0 rrcurveto +closepath +endchar } ND +/sigma1 { +0 482 hsbw +-210 81 hstem +458 72 hstem +42 85 vstem +356 93 vstem +472 514 rmoveto +-40 10 -39 6 -40 0 rrcurveto +-191 0 -120 -135 0 -156 rrcurveto +0 -114 70 -87 144 -30 rrcurveto +82 -17 18 -15 0 -36 rrcurveto +0 -37 -38 -32 -62 0 rrcurveto +-14 0 -17 2 -18 4 rrcurveto +-22 -81 rlineto +28 -4 24 -2 22 0 rrcurveto +108 0 82 63 0 89 rrcurveto +0 86 -59 30 -104 27 rrcurveto +-126 33 -33 60 0 76 rrcurveto +0 109 84 95 131 0 rrcurveto +36 0 36 -6 37 -12 rrcurveto +21 74 rlineto +closepath +endchar } ND +/upsilon { +0 547 hsbw +-12 73 hstem +499 20 hstem +66 88 vstem +394 87 vstem +66 519 rmoveto +0 -308 rlineto +0 -143 73 -80 133 0 rrcurveto +125 0 84 72 0 155 rrcurveto +0 304 rlineto +-87 0 rlineto +0 -301 rlineto +0 -95 -42 -62 -79 0 rrcurveto +-63 0 -56 44 0 106 rrcurveto +0 308 rlineto +-88 0 rlineto +closepath +endchar } ND +/chi { +0 525 hsbw +-199 20 101 118 499 20 hstem3 +23 96 vstem +409 97 vstem +23 519 rmoveto +185 -357 rlineto +-200 -361 rlineto +98 0 rlineto +156 300 rlineto +154 -300 rlineto +100 0 rlineto +-201 364 rlineto +191 354 rlineto +-97 0 rlineto +-147 -288 rlineto +-143 288 rlineto +-96 0 rlineto +closepath +endchar } ND +/psi { +0 713 hsbw +-199 261 hstem +499 20 hstem +60 87 313 87 566 87 vstem3 +60 519 rmoveto +0 -253 rlineto +0 -200 88 -70 165 -8 rrcurveto +0 -187 rlineto +87 0 rlineto +0 187 rlineto +176 7 77 80 0 191 rrcurveto +0 253 rlineto +-88 0 rlineto +0 -256 rlineto +0 -132 -46 -63 -119 -6 rrcurveto +0 457 rlineto +-87 0 rlineto +0 -457 rlineto +-124 5 -42 66 0 130 rrcurveto +0 256 rlineto +-87 0 rlineto +closepath +endchar } ND +/omega { +0 781 hsbw +-12 69 hstem +105 283 hstem +499 20 hstem +41 91 347 86 649 89 vstem3 +120 519 rmoveto +-52 -92 -26 -89 0 -86 rrcurveto +0 -163 74 -101 116 0 rrcurveto +74 0 53 39 32 78 rrcurveto +31 -78 52 -39 74 0 rrcurveto +110 0 80 92 0 172 rrcurveto +0 86 -26 89 -51 92 rrcurveto +-84 0 rlineto +48 -108 24 -90 0 -74 rrcurveto +0 -115 -48 -75 -62 0 rrcurveto +-78 0 -27 84 0 95 rrcurveto +0 152 rlineto +-87 0 rlineto +0 -152 rlineto +0 -101 -32 -78 -72 0 rrcurveto +-66 0 -45 76 0 114 rrcurveto +0 74 24 90 49 108 rrcurveto +-85 0 rlineto +closepath +endchar } ND +/iotadieresis { +0 222 hsbw +0 20 hstem +499 20 hstem +620 100 hstem +67 88 vstem +159 92 vstem +67 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-90 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/upsilondieresis { +0 547 hsbw +-12 73 hstem +499 20 hstem +620 100 hstem +66 88 vstem +394 87 vstem +66 519 rmoveto +0 -308 rlineto +0 -143 73 -80 133 0 rrcurveto +125 0 84 72 0 155 rrcurveto +0 304 rlineto +-87 0 rlineto +0 -301 rlineto +0 -95 -42 -62 -79 0 rrcurveto +-63 0 -56 44 0 106 rrcurveto +0 308 rlineto +-88 0 rlineto +closepath +81 101 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/omicrontonos { +0 556 hsbw +-12 73 hstem +458 72 hstem +583 137 hstem +33 91 vstem +228 72 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +104 324 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/upsilontonos { +0 547 hsbw +-12 73 hstem +499 20 hstem +583 137 hstem +66 88 vstem +216 73 vstem +394 87 vstem +66 519 rmoveto +0 -308 rlineto +0 -143 73 -80 133 0 rrcurveto +125 0 84 72 0 155 rrcurveto +0 304 rlineto +-87 0 rlineto +0 -301 rlineto +0 -95 -42 -62 -79 0 rrcurveto +-63 0 -56 44 0 106 rrcurveto +0 308 rlineto +-88 0 rlineto +closepath +150 64 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/omegatonos { +0 781 hsbw +-12 69 hstem +105 283 hstem +499 20 hstem +583 137 hstem +41 91 347 86 649 89 vstem3 +120 519 rmoveto +-52 -92 -26 -89 0 -86 rrcurveto +0 -163 74 -101 116 0 rrcurveto +74 0 53 39 32 78 rrcurveto +31 -78 52 -39 74 0 rrcurveto +110 0 80 92 0 172 rrcurveto +0 86 -26 89 -51 92 rrcurveto +-84 0 rlineto +48 -108 24 -90 0 -74 rrcurveto +0 -115 -48 -75 -62 0 rrcurveto +-78 0 -27 84 0 95 rrcurveto +0 152 rlineto +-87 0 rlineto +0 -152 rlineto +0 -101 -32 -78 -72 0 rrcurveto +-66 0 -45 76 0 114 rrcurveto +0 74 24 90 49 108 rrcurveto +-85 0 rlineto +closepath +223 64 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/afii10023 { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +760 100 hstem +79 95 vstem +201 91 vstem +383 92 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +122 760 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/afii10051 { +0 865 hsbw +-12 78 hstem +378 79 hstem +631 85 hstem +263 94 vstem +728 97 vstem +24 716 rmoveto +0 -85 rlineto +239 0 rlineto +0 -631 rlineto +94 0 rlineto +0 332 rlineto +75 30 64 16 53 0 rrcurveto +122 0 57 -68 0 -93 rrcurveto +0 -87 -52 -64 -97 0 rrcurveto +-27 0 -26 6 -25 12 rrcurveto +-15 -80 rlineto +42 -10 39 -6 34 0 rrcurveto +146 0 78 116 0 116 rrcurveto +0 132 -101 105 -152 0 rrcurveto +-61 0 -72 -16 -82 -32 rrcurveto +0 222 rlineto +239 0 rlineto +0 85 rlineto +-572 0 rlineto +closepath +endchar } ND +/afii10052 { +0 542 hsbw +0 20 hstem +631 85 hstem +760 136 hstem +79 94 vstem +231 73 vstem +79 716 rmoveto +0 -716 rlineto +94 0 rlineto +0 631 rlineto +369 0 rlineto +0 85 rlineto +-463 0 rlineto +closepath +152 44 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/afii10053 { +0 719 hsbw +-12 79 hstem +327 85 hstem +645 83 hstem +54 102 vstem +418 412 rmoveto +-262 0 rlineto +8 142 82 91 139 0 rrcurveto +103 0 65 -50 28 -100 rrcurveto +92 25 rlineto +-35 130 -104 78 -148 0 rrcurveto +-204 0 -128 -169 0 -193 rrcurveto +-7 -214 110 -164 227 0 rrcurveto +158 0 99 79 42 158 rrcurveto +-92 24 rlineto +-29 -122 -71 -60 -114 0 rrcurveto +-128 0 -89 100 -8 160 rrcurveto +266 0 rlineto +0 85 rlineto +closepath +endchar } ND +/afii10054 { +0 667 hsbw +-12 85 hstem +645 83 hstem +72 92 vstem +523 92 vstem +45 230 rmoveto +2 -154 133 -88 170 0 rrcurveto +136 0 129 89 0 125 rrcurveto +0 132 -125 51 -155 38 rrcurveto +-94 23 -77 10 0 81 rrcurveto +0 60 49 48 115 0 rrcurveto +110 0 54 -48 10 -90 rrcurveto +91 7 rlineto +-6 134 -121 80 -142 0 rrcurveto +-128 0 -124 -77 0 -120 rrcurveto +0 -116 111 -51 128 -34 rrcurveto +113 -28 99 -21 0 -87 rrcurveto +0 -81 -88 -40 -89 0 rrcurveto +-109 0 -90 52 -13 113 rrcurveto +-89 -8 rlineto +closepath +endchar } ND +/afii10055 { +0 278 hsbw +0 20 hstem +696 20 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10056 { +0 278 hsbw +0 20 hstem +696 20 hstem +760 100 hstem +2 92 vstem +184 92 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-91 760 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/afii10057 { +0 500 hsbw +-12 84 hstem +696 20 hstem +328 94 vstem +29 203 rmoveto +-3 -143 69 -72 126 0 rrcurveto +130 0 71 88 0 152 rrcurveto +0 488 rlineto +-94 0 rlineto +0 -493 rlineto +0 -99 -30 -52 -77 0 rrcurveto +-66 0 -36 33 -5 110 rrcurveto +-85 -12 rlineto +closepath +endchar } ND +/afii10058 { +0 1057 hsbw +-12 86 hstem +329 81 hstem +631 85 hstem +127 95 vstem +480 95 vstem +918 102 vstem +575 716 rmoveto +-448 0 rlineto +0 -504 rlineto +0 -120 -22 -18 -42 0 rrcurveto +-12 0 -13 3 -16 6 rrcurveto +-16 -83 rlineto +29 -8 25 -4 22 0 rrcurveto +129 0 11 115 0 160 rrcurveto +0 368 rlineto +258 0 rlineto +0 -631 rlineto +280 0 rlineto +163 0 97 75 0 133 rrcurveto +0 128 -99 74 -175 0 rrcurveto +-171 0 rlineto +0 306 rlineto +closepath +0 -635 rmoveto +0 248 rlineto +127 0 rlineto +132 0 84 -18 0 -105 rrcurveto +0 -91 -59 -34 -94 0 rrcurveto +-190 0 rlineto +closepath +endchar } ND +/afii10059 { +0 1010 hsbw +0 81 hstem +329 387 hstem +80 95 vstem +434 94 vstem +872 101 vstem +528 716 rmoveto +-94 0 rlineto +0 -306 rlineto +-259 0 rlineto +0 306 rlineto +-95 0 rlineto +0 -716 rlineto +95 0 rlineto +0 329 rlineto +259 0 rlineto +0 -329 rlineto +274 0 rlineto +166 0 99 72 0 136 rrcurveto +0 141 -114 61 -171 0 rrcurveto +-160 0 rlineto +0 306 rlineto +closepath +0 -635 rmoveto +0 248 rlineto +116 0 rlineto +140 0 88 -16 0 -107 rrcurveto +0 -95 -60 -30 -106 0 rrcurveto +-178 0 rlineto +closepath +endchar } ND +/afii10060 { +0 854 hsbw +0 411 hstem +631 85 hstem +263 95 vstem +714 95 vstem +24 716 rmoveto +0 -85 rlineto +239 0 rlineto +0 -631 rlineto +95 0 rlineto +0 332 rlineto +86 30 69 15 53 0 rrcurveto +104 0 44 -75 0 -117 rrcurveto +0 -185 rlineto +95 0 rlineto +0 188 rlineto +0 171 -85 98 -153 0 rrcurveto +-54 0 -71 -16 -88 -30 rrcurveto +0 220 rlineto +239 0 rlineto +0 85 rlineto +-573 0 rlineto +closepath +endchar } ND +/afii10061 { +0 583 hsbw +0 402 hstem +634 82 hstem +760 136 hstem +79 94 vstem +256 73 vstem +461 118 vstem +79 716 rmoveto +0 -716 rlineto +94 0 rlineto +0 335 rlineto +70 0 32 -33 67 -108 rrcurveto +119 -194 rlineto +118 0 rlineto +-147 238 rlineto +-46 72 -45 43 -46 13 rrcurveto +46 18 26 13 49 122 rrcurveto +31 78 14 37 73 0 rrcurveto +38 0 rlineto +0 82 rlineto +-57 0 rlineto +-94 0 -41 -55 -48 -113 rrcurveto +-54 -128 -19 -18 -86 0 rrcurveto +0 314 rlineto +-94 0 rlineto +closepath +177 44 rmoveto +73 0 rlineto +108 136 rlineto +-116 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/afii10062 { +0 635 hsbw +-10 76 hstem +696 20 hstem +760 60 hstem +5 96 vstem +196 60 vstem +425 60 vstem +538 94 vstem +5 716 rmoveto +290 -526 rlineto +-40 -106 -30 -18 -45 0 rrcurveto +-29 0 -27 7 -25 15 rrcurveto +0 -81 rlineto +35 -11 30 -6 25 0 rrcurveto +80 0 27 30 68 139 rrcurveto +268 557 rlineto +-94 0 rlineto +-204 -439 rlineto +-233 439 rlineto +-96 0 rlineto +closepath +420 170 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +10 -82 51 -44 84 0 rrcurveto +82 0 52 44 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/afii10145 { +0 719 hsbw +-199 20 hstem +0 84 hstem +696 20 hstem +78 95 317 85 546 95 vstem3 +402 0 rmoveto +239 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -632 rlineto +-373 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -716 rlineto +239 0 rlineto +0 -199 rlineto +85 0 rlineto +0 199 rlineto +closepath +endchar } ND +/afii10017 { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +-1 100 vstem +273 102 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +endchar } ND +/afii10018 { +0 656 hsbw +0 81 hstem +329 82 hstem +631 85 hstem +82 94 vstem +519 102 vstem +82 716 rmoveto +0 -716 rlineto +280 0 rlineto +171 0 88 79 0 129 rrcurveto +0 139 -113 64 -161 0 rrcurveto +-171 0 rlineto +0 220 rlineto +370 0 rlineto +0 85 rlineto +-464 0 rlineto +closepath +94 -635 rmoveto +0 248 rlineto +127 0 rlineto +132 0 84 -17 0 -106 rrcurveto +0 -84 -52 -41 -101 0 rrcurveto +-190 0 rlineto +closepath +endchar } ND +/afii10019 { +0 667 hsbw +0 84 hstem +331 84 hstem +631 85 hstem +73 95 vstem +486 93 vstem +73 0 rmoveto +273 0 rlineto +151 0 117 74 0 134 rrcurveto +0 82 -49 65 -86 26 rrcurveto +66 33 34 57 0 62 rrcurveto +0 108 -101 75 -136 0 rrcurveto +-269 0 rlineto +0 -716 rlineto +closepath +95 415 rmoveto +0 216 rlineto +143 0 rlineto +110 0 65 -23 0 -87 rrcurveto +0 -84 -60 -22 -103 0 rrcurveto +-155 0 rlineto +closepath +0 -331 rmoveto +0 247 rlineto +165 0 rlineto +108 0 75 -34 0 -89 rrcurveto +0 -91 -59 -33 -111 0 rrcurveto +-178 0 rlineto +closepath +endchar } ND +/afii10020 { +0 542 hsbw +0 20 hstem +631 85 hstem +79 94 vstem +79 716 rmoveto +0 -716 rlineto +94 0 rlineto +0 631 rlineto +369 0 rlineto +0 85 rlineto +-463 0 rlineto +closepath +endchar } ND +/afii10021 { +0 677 hsbw +0 84 hstem +631 85 hstem +0 84 vstem +142 91 vstem +558 84 vstem +142 716 rmoveto +0 -105 rlineto +0 -264 -29 -176 -57 -87 rrcurveto +-56 0 rlineto +0 -251 rlineto +84 0 rlineto +0 167 rlineto +474 0 rlineto +0 -167 rlineto +84 0 rlineto +0 251 rlineto +-64 0 rlineto +0 632 rlineto +-436 0 rlineto +closepath +341 -85 rmoveto +0 -547 rlineto +-330 0 rlineto +64 137 16 251 0 123 rrcurveto +0 36 rlineto +250 0 rlineto +closepath +endchar } ND +/afii10022 { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +79 95 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10024 { +0 923 hsbw +0 402 hstem +634 82 hstem +2 119 413 96 802 117 vstem3 +510 716 rmoveto +-97 0 rlineto +0 -314 rlineto +-94 1 -14 18 -55 127 rrcurveto +-50 115 -35 53 -100 0 rrcurveto +-55 0 rlineto +0 -83 rlineto +38 0 rlineto +74 0 14 -32 31 -82 rrcurveto +45 -115 24 -17 52 -21 rrcurveto +-47 -13 -46 -43 -44 -72 rrcurveto +-148 -238 rlineto +118 0 rlineto +120 194 rlineto +6 10 rlineto +62 109 41 22 63 0 rrcurveto +0 -335 rlineto +97 0 rlineto +0 335 rlineto +78 0 31 -39 64 -102 rrcurveto +119 -194 rlineto +117 0 rlineto +-147 238 rlineto +-44 72 -46 43 -46 13 rrcurveto +57 25 21 23 42 105 rrcurveto +30 78 16 37 73 0 rrcurveto +38 0 rlineto +0 82 rlineto +-58 0 rlineto +-92 0 -42 -56 -48 -112 rrcurveto +-54 -127 -16 -19 -93 0 rrcurveto +0 314 rlineto +closepath +endchar } ND +/afii10025 { +0 604 hsbw +-12 81 hstem +330 82 hstem +645 83 hstem +50 91 vstem +248 187 vstem +436 94 vstem +38 202 rmoveto +40 -143 88 -71 136 0 rrcurveto +157 0 104 93 0 124 rrcurveto +0 86 -55 67 -73 20 rrcurveto +63 36 32 52 0 67 rrcurveto +0 104 -88 91 -140 0 rrcurveto +-146 0 -84 -76 -22 -152 rrcurveto +91 -21 rlineto +0 52 67 114 93 0 rrcurveto +82 0 53 -54 0 -62 rrcurveto +0 -87 -79 -30 -109 0 rrcurveto +0 -82 rlineto +45 0 rlineto +105 0 66 -51 0 -78 rrcurveto +0 -74 -62 -58 -100 0 rrcurveto +-99 0 -61 86 -14 71 rrcurveto +-90 -24 rlineto +closepath +endchar } ND +/afii10026 { +0 719 hsbw +0 149 hstem +565 151 hstem +79 86 vstem +555 86 vstem +79 716 rmoveto +0 -716 rlineto +94 0 rlineto +382 565 rlineto +0 -565 rlineto +86 0 rlineto +0 716 rlineto +-96 0 rlineto +-380 -567 rlineto +0 567 rlineto +-86 0 rlineto +closepath +endchar } ND +/afii10027 { +0 719 hsbw +0 149 hstem +565 151 hstem +760 60 hstem +79 86 vstem +206 60 vstem +435 60 vstem +555 86 vstem +79 716 rmoveto +0 -716 rlineto +94 0 rlineto +382 565 rlineto +0 -565 rlineto +86 0 rlineto +0 716 rlineto +-96 0 rlineto +-380 -567 rlineto +0 567 rlineto +-86 0 rlineto +closepath +356 170 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-47 0 -26 22 -9 44 rrcurveto +-60 0 rlineto +9 -82 52 -44 84 0 rrcurveto +82 0 51 44 11 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/afii10028 { +0 583 hsbw +0 402 hstem +634 82 hstem +79 94 vstem +461 118 vstem +79 716 rmoveto +0 -716 rlineto +94 0 rlineto +0 335 rlineto +70 0 32 -33 67 -108 rrcurveto +119 -194 rlineto +118 0 rlineto +-147 238 rlineto +-46 72 -45 43 -46 13 rrcurveto +46 18 26 13 49 122 rrcurveto +31 78 14 37 73 0 rrcurveto +38 0 rlineto +0 82 rlineto +-57 0 rlineto +-94 0 -41 -55 -48 -113 rrcurveto +-54 -128 -19 -18 -86 0 rrcurveto +0 314 rlineto +-94 0 rlineto +closepath +endchar } ND +/afii10029 { +0 656 hsbw +-12 86 hstem +631 85 hstem +129 95 vstem +483 95 vstem +129 716 rmoveto +0 -504 rlineto +0 -120 -22 -18 -42 0 rrcurveto +-12 0 -13 3 -15 6 rrcurveto +-16 -83 rlineto +29 -8 25 -4 21 0 rrcurveto +129 0 11 115 0 160 rrcurveto +0 368 rlineto +259 0 rlineto +0 -631 rlineto +95 0 rlineto +0 716 rlineto +-449 0 rlineto +closepath +endchar } ND +/afii10030 { +0 833 hsbw +0 103 hstem +609 107 hstem +74 93 374 84 666 91 vstem3 +74 0 rmoveto +92 0 rlineto +0 609 rlineto +207 -609 rlineto +85 0 rlineto +208 599 rlineto +0 -599 rlineto +91 0 rlineto +0 716 rlineto +-127 0 rlineto +-172 -498 rlineto +-7 -26 -8 -23 -7 -18 rrcurveto +-7 -19 -5 -16 -4 -13 rrcurveto +-7 23 -11 35 -16 48 rrcurveto +-169 507 rlineto +-143 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10031 { +0 722 hsbw +0 422 hstem +696 20 hstem +80 95 vstem +547 95 vstem +80 0 rmoveto +95 0 rlineto +0 337 rlineto +372 0 rlineto +0 -337 rlineto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -294 rlineto +-372 0 rlineto +0 294 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10032 { +0 778 hsbw +-12 81 hstem +647 82 hstem +48 98 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +endchar } ND +/afii10033 { +0 719 hsbw +0 20 hstem +631 85 hstem +78 95 vstem +546 95 vstem +78 716 rmoveto +0 -716 rlineto +95 0 rlineto +0 631 rlineto +373 0 rlineto +0 -631 rlineto +95 0 rlineto +0 716 rlineto +-563 0 rlineto +closepath +endchar } ND +/afii10034 { +0 667 hsbw +0 375 hstem +631 85 hstem +77 95 vstem +526 98 vstem +77 0 rmoveto +95 0 rlineto +0 291 rlineto +183 0 rlineto +202 0 67 95 0 123 rrcurveto +0 137 -107 70 -170 0 rrcurveto +-270 0 rlineto +0 -716 rlineto +closepath +95 375 rmoveto +0 256 rlineto +183 0 rlineto +115 0 56 -31 0 -94 rrcurveto +0 -83 -47 -48 -122 0 rrcurveto +-185 0 rlineto +closepath +endchar } ND +/afii10035 { +0 722 hsbw +-12 81 hstem +647 81 hstem +50 97 vstem +588 251 rmoveto +-27 -120 -77 -62 -106 0 rrcurveto +-147 0 -84 135 0 160 rrcurveto +0 141 80 142 159 0 rrcurveto +96 0 61 -45 34 -104 rrcurveto +93 22 rlineto +-38 132 -102 76 -142 0 rrcurveto +-198 0 -140 -159 0 -206 rrcurveto +0 -197 113 -178 223 0 rrcurveto +149 0 108 83 40 156 rrcurveto +-95 24 rlineto +closepath +endchar } ND +/afii10036 { +0 611 hsbw +0 20 hstem +631 85 hstem +259 95 vstem +259 0 rmoveto +95 0 rlineto +0 631 rlineto +237 0 rlineto +0 85 rlineto +-568 0 rlineto +0 -85 rlineto +236 0 rlineto +0 -631 rlineto +closepath +endchar } ND +/afii10037 { +0 635 hsbw +-10 76 hstem +696 20 hstem +5 96 vstem +538 94 vstem +5 716 rmoveto +290 -526 rlineto +-40 -106 -30 -18 -45 0 rrcurveto +-29 0 -27 7 -25 15 rrcurveto +0 -81 rlineto +35 -11 30 -6 25 0 rrcurveto +80 0 27 30 68 139 rrcurveto +268 557 rlineto +-94 0 rlineto +-204 -439 rlineto +-233 439 rlineto +-96 0 rlineto +closepath +endchar } ND +/afii10038 { +0 760 hsbw +0 174 hstem +549 173 hstem +40 98 336 88 622 98 vstem3 +336 630 rmoveto +-171 -7 -125 -102 0 -160 rrcurveto +0 -159 126 -104 170 -6 rrcurveto +0 -92 rlineto +89 0 rlineto +0 92 rlineto +188 10 107 113 0 146 rrcurveto +0 149 -113 110 -182 10 rrcurveto +0 92 rlineto +-89 0 rlineto +0 -92 rlineto +closepath +89 -81 rmoveto +125 -8 72 -68 0 -112 rrcurveto +0 -114 -75 -68 -122 -5 rrcurveto +0 375 rlineto +closepath +-89 -1 rmoveto +0 -374 rlineto +-120 5 -78 68 0 114 rrcurveto +0 116 80 65 118 6 rrcurveto +closepath +endchar } ND +/afii10039 { +0 667 hsbw +0 20 hstem +696 20 hstem +37 113 vstem +538 103 vstem +4 0 rmoveto +114 0 rlineto +180 250 rlineto +6 9 12 18 16 26 rrcurveto +10 -18 11 -16 10 -14 rrcurveto +180 -255 rlineto +118 0 rlineto +-271 378 rlineto +251 338 rlineto +-103 0 rlineto +-144 -190 rlineto +-22 -29 -19 -27 -16 -26 rrcurveto +-12 20 -19 30 -26 38 rrcurveto +-130 184 rlineto +-113 0 rlineto +244 -343 rlineto +-277 -373 rlineto +closepath +endchar } ND +/afii10040 { +0 740 hsbw +-199 20 hstem +0 84 hstem +696 20 hstem +78 94 vstem +622 84 vstem +78 716 rmoveto +0 -716 rlineto +544 0 rlineto +0 -199 rlineto +84 0 rlineto +0 283 rlineto +-65 0 rlineto +0 632 rlineto +-96 0 rlineto +0 -632 rlineto +-373 0 rlineto +0 632 rlineto +-94 0 rlineto +closepath +endchar } ND +/afii10041 { +0 667 hsbw +0 368 hstem +696 20 hstem +42 95 vstem +493 95 vstem +588 0 rmoveto +0 716 rlineto +-95 0 rlineto +0 -348 rlineto +-74 -30 -70 -15 -66 0 rrcurveto +-80 0 -66 35 0 156 rrcurveto +0 202 rlineto +-95 0 rlineto +0 -211 rlineto +0 -162 84 -102 144 0 rrcurveto +64 0 74 16 85 32 rrcurveto +0 -289 rlineto +95 0 rlineto +closepath +endchar } ND +/afii10042 { +0 917 hsbw +0 84 hstem +696 20 hstem +79 94 411 95 744 94 vstem3 +79 716 rmoveto +0 -716 rlineto +759 0 rlineto +0 716 rlineto +-94 0 rlineto +0 -632 rlineto +-238 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -632 rlineto +-238 0 rlineto +0 632 rlineto +-94 0 rlineto +closepath +endchar } ND +/afii10043 { +0 938 hsbw +-199 20 hstem +0 84 hstem +696 20 hstem +79 94 vstem +411 95 vstem +819 84 vstem +79 716 rmoveto +0 -716 rlineto +740 0 rlineto +0 -199 rlineto +84 0 rlineto +0 283 rlineto +-65 0 rlineto +0 632 rlineto +-94 0 rlineto +0 -632 rlineto +-238 0 rlineto +0 632 rlineto +-95 0 rlineto +0 -632 rlineto +-238 0 rlineto +0 632 rlineto +-94 0 rlineto +closepath +endchar } ND +/afii10044 { +0 792 hsbw +0 81 hstem +329 81 hstem +631 85 hstem +218 95 vstem +655 102 vstem +0 716 rmoveto +0 -85 rlineto +218 0 rlineto +0 -631 rlineto +272 0 rlineto +194 0 73 87 0 120 rrcurveto +0 104 -49 99 -224 0 rrcurveto +-171 0 rlineto +0 306 rlineto +-313 0 rlineto +closepath +313 -635 rmoveto +0 248 rlineto +126 0 rlineto +130 0 86 -20 0 -103 rrcurveto +0 -87 -51 -38 -118 0 rrcurveto +-173 0 rlineto +closepath +endchar } ND +/afii10045 { +0 885 hsbw +0 81 hstem +329 387 hstem +82 95 vstem +520 102 vstem +708 94 vstem +82 716 rmoveto +0 -716 rlineto +272 0 rlineto +205 0 63 97 0 111 rrcurveto +0 104 -50 98 -224 0 rrcurveto +-171 0 rlineto +0 306 rlineto +-95 0 rlineto +closepath +95 -635 rmoveto +0 248 rlineto +127 0 rlineto +131 0 85 -19 0 -103 rrcurveto +0 -88 -52 -38 -118 0 rrcurveto +-173 0 rlineto +closepath +531 635 rmoveto +0 -716 rlineto +94 0 rlineto +0 716 rlineto +-94 0 rlineto +closepath +endchar } ND +/afii10046 { +0 656 hsbw +0 81 hstem +329 387 hstem +81 94 vstem +518 102 vstem +81 716 rmoveto +0 -716 rlineto +272 0 rlineto +205 0 62 97 0 111 rrcurveto +0 129 -98 73 -176 0 rrcurveto +-171 0 rlineto +0 306 rlineto +-94 0 rlineto +closepath +94 -635 rmoveto +0 248 rlineto +127 0 rlineto +133 0 83 -19 0 -102 rrcurveto +0 -71 -29 -56 -140 0 rrcurveto +-174 0 rlineto +closepath +endchar } ND +/afii10047 { +0 719 hsbw +-12 79 hstem +327 85 hstem +645 83 hstem +563 102 vstem +563 412 rmoveto +-263 0 rlineto +0 -85 rlineto +266 0 rlineto +-7 -160 -89 -100 -128 0 rrcurveto +-114 0 -72 60 -29 122 rrcurveto +-91 -24 rlineto +41 -158 100 -79 158 0 rrcurveto +225 0 111 164 -6 214 rrcurveto +0 192 -130 170 -202 0 rrcurveto +-148 0 -104 -78 -36 -130 rrcurveto +93 -25 rlineto +27 100 65 50 103 0 rrcurveto +140 0 82 -91 8 -142 rrcurveto +closepath +endchar } ND +/afii10048 { +0 1010 hsbw +-12 81 hstem +311 84 hstem +648 80 hstem +80 95 vstem +314 94 vstem +862 97 vstem +80 716 rmoveto +0 -716 rlineto +95 0 rlineto +0 311 rlineto +139 0 rlineto +21 -203 124 -120 174 0 rrcurveto +190 0 136 139 0 235 rrcurveto +0 225 -138 141 -186 0 rrcurveto +-178 0 -131 -131 -13 -202 rrcurveto +-138 0 rlineto +0 321 rlineto +-95 0 rlineto +closepath +328 -362 rmoveto +0 184 86 110 142 0 rrcurveto +138 0 88 -110 0 -178 rrcurveto +0 -188 -90 -103 -138 0 rrcurveto +-135 0 -91 105 0 180 rrcurveto +closepath +endchar } ND +/afii10049 { +0 722 hsbw +0 400 hstem +637 79 hstem +71 98 vstem +549 95 vstem +549 0 rmoveto +95 0 rlineto +0 716 rlineto +-318 0 rlineto +-158 0 -97 -68 0 -127 rrcurveto +0 -103 64 -74 138 -18 rrcurveto +-74 -34 -25 -38 -37 -59 rrcurveto +-124 -195 rlineto +119 0 rlineto +95 149 rlineto +64 100 14 69 134 0 rrcurveto +110 0 rlineto +0 -318 rlineto +closepath +0 637 rmoveto +0 -237 rlineto +-204 0 rlineto +-103 0 -73 37 0 84 rrcurveto +0 66 47 50 106 0 rrcurveto +227 0 rlineto +closepath +endchar } ND +/afii10065 { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +36 94 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +endchar } ND +/afii10066 { +0 573 hsbw +-12 71 hstem +446 73 hstem +627 89 hstem +44 99 vstem +441 92 vstem +446 733 rmoveto +-6 -15 8 -2 -120 0 rrcurveto +-192 0 -92 -74 0 -274 rrcurveto +0 -245 40 -135 210 0 rrcurveto +163 0 76 111 0 160 rrcurveto +0 158 -100 102 -136 0 rrcurveto +-74 0 -59 -34 -44 -65 rrcurveto +2 142 49 65 173 0 rrcurveto +118 0 50 -1 11 107 rrcurveto +-77 0 rlineto +closepath +-5 -472 rmoveto +0 -122 -59 -80 -88 0 rrcurveto +-86 0 -65 66 0 120 rrcurveto +0 121 54 80 98 0 rrcurveto +93 0 53 -77 0 -108 rrcurveto +closepath +endchar } ND +/afii10067 { +0 531 hsbw +0 72 hstem +228 72 hstem +446 73 hstem +66 88 vstem +379 90 vstem +66 519 rmoveto +0 -519 rlineto +234 0 rlineto +122 0 63 46 7 99 rrcurveto +0 61 -36 48 -49 16 rrcurveto +41 25 21 36 0 50 rrcurveto +0 97 -77 41 -123 0 rrcurveto +-203 0 rlineto +closepath +88 -219 rmoveto +0 146 rlineto +97 0 rlineto +93 0 35 -19 0 -54 rrcurveto +0 -61 -50 -12 -81 0 rrcurveto +-94 0 rlineto +closepath +0 -228 rmoveto +0 156 rlineto +107 0 rlineto +83 0 58 -20 0 -59 rrcurveto +0 -56 -32 -21 -100 0 rrcurveto +-116 0 rlineto +closepath +endchar } ND +/afii10068 { +0 365 hsbw +0 20 hstem +446 73 hstem +66 88 vstem +66 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 446 rlineto +211 0 rlineto +0 73 rlineto +-299 0 rlineto +closepath +endchar } ND +/afii10069 { +0 583 hsbw +0 72 hstem +446 73 hstem +0 72 vstem +480 73 vstem +135 519 rmoveto +2 -214 -29 -149 -62 -84 rrcurveto +-46 0 rlineto +0 -219 rlineto +72 0 rlineto +0 147 rlineto +408 0 rlineto +0 -147 rlineto +73 0 rlineto +0 219 rlineto +-56 0 rlineto +0 447 rlineto +-362 0 rlineto +closepath +73 -73 rmoveto +201 0 rlineto +0 -374 rlineto +-279 0 rlineto +46 80 26 125 6 169 rrcurveto +closepath +endchar } ND +/afii10070 { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +37 90 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +endchar } ND +/afii10072 { +0 669 hsbw +0 294 hstem +446 73 hstem +-2 96 290 89 575 96 vstem3 +379 519 rmoveto +-89 0 rlineto +0 -225 rlineto +-58 0 -9 10 -42 100 rrcurveto +-41 97 -10 18 -100 0 rrcurveto +-12 0 rlineto +0 -73 rlineto +25 0 rlineto +32 0 16 -5 13 -34 rrcurveto +42 -108 8 -9 52 -24 rrcurveto +-39 -10 -37 -35 -36 -60 rrcurveto +-96 -161 rlineto +96 0 rlineto +94 161 rlineto +38 65 24 14 40 0 rrcurveto +0 -240 rlineto +89 0 rlineto +0 240 rlineto +40 0 23 -15 39 -64 rrcurveto +94 -161 rlineto +97 0 rlineto +-97 161 rlineto +-36 60 -37 35 -38 10 rrcurveto +46 21 15 16 27 69 rrcurveto +22 56 -5 18 59 0 rrcurveto +24 0 rlineto +0 73 rlineto +-32 0 rlineto +-85 0 -12 -31 -35 -84 rrcurveto +-43 -103 -10 -7 -56 0 rrcurveto +0 225 rlineto +closepath +endchar } ND +/afii10073 { +0 458 hsbw +-12 71 hstem +235 68 hstem +458 72 hstem +335 88 vstem +181 235 rmoveto +20 0 rlineto +85 0 49 -23 0 -64 rrcurveto +0 -52 -44 -37 -60 0 rrcurveto +-59 0 -51 38 -14 67 rrcurveto +-83 -18 rlineto +19 -106 69 -52 118 0 rrcurveto +121 0 72 63 0 94 rrcurveto +0 58 -26 44 -52 28 rrcurveto +40 25 21 34 0 42 rrcurveto +0 84 -67 70 -110 0 rrcurveto +-100 0 -62 -49 -26 -97 rrcurveto +83 -13 rlineto +20 58 34 29 50 0 rrcurveto +50 0 35 -30 0 -48 rrcurveto +0 -65 -48 -12 -84 0 rrcurveto +0 -68 rlineto +closepath +endchar } ND +/afii10074 { +0 559 hsbw +0 123 hstem +393 126 hstem +66 88 vstem +404 88 vstem +66 519 rmoveto +0 -519 rlineto +95 0 rlineto +243 393 rlineto +0 -393 rlineto +88 0 rlineto +0 519 rlineto +-95 0 rlineto +-243 -396 rlineto +0 396 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10075 { +0 559 hsbw +0 123 hstem +393 126 hstem +588 61 hstem +695 20 hstem +66 88 vstem +404 88 vstem +66 519 rmoveto +0 -519 rlineto +95 0 rlineto +243 393 rlineto +0 -393 rlineto +88 0 rlineto +0 519 rlineto +-95 0 rlineto +-243 -396 rlineto +0 396 rlineto +-88 0 rlineto +closepath +305 196 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -27 22 -8 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/afii10076 { +0 438 hsbw +0 294 hstem +446 73 hstem +65 88 vstem +349 96 vstem +65 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 240 rlineto +40 0 23 -15 39 -64 rrcurveto +94 -161 rlineto +96 0 rlineto +-96 161 rlineto +-37 60 -37 35 -37 10 rrcurveto +45 21 16 16 27 69 rrcurveto +22 56 -5 18 58 0 rrcurveto +25 0 rlineto +0 73 rlineto +-18 0 rlineto +-94 0 -14 -23 -38 -92 rrcurveto +-43 -104 -10 -6 -56 0 rrcurveto +0 225 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10077 { +0 583 hsbw +-3 77 hstem +446 73 hstem +109 88 vstem +430 87 vstem +109 519 rmoveto +0 -342 rlineto +0 -83 7 -20 -66 0 rrcurveto +-38 0 rlineto +0 -74 rlineto +26 -2 24 -1 21 0 rrcurveto +104 0 10 60 0 131 rrcurveto +0 258 rlineto +233 0 rlineto +0 -446 rlineto +87 0 rlineto +0 519 rlineto +-408 0 rlineto +closepath +endchar } ND +/afii10078 { +0 688 hsbw +0 104 hstem +438 81 hstem +68 86 vstem +299 79 vstem +531 88 vstem +68 519 rmoveto +0 -519 rlineto +86 0 rlineto +0 438 rlineto +145 -438 rlineto +79 0 rlineto +153 417 rlineto +0 -417 rlineto +88 0 rlineto +0 519 rlineto +-126 0 rlineto +-152 -415 rlineto +-136 415 rlineto +-137 0 rlineto +closepath +endchar } ND +/afii10079 { +0 552 hsbw +0 303 hstem +499 20 hstem +66 88 vstem +398 88 vstem +66 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 230 rlineto +244 0 rlineto +0 -230 rlineto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -216 rlineto +-244 0 rlineto +0 216 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10080 { +0 556 hsbw +-12 73 hstem +458 72 hstem +33 91 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +endchar } ND +/afii10081 { +0 542 hsbw +0 20 hstem +446 73 hstem +66 88 vstem +388 88 vstem +66 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 446 rlineto +234 0 rlineto +0 -446 rlineto +88 0 rlineto +0 519 rlineto +-410 0 rlineto +closepath +endchar } ND +/afii10082 { +0 556 hsbw +-199 20 hstem +-12 73 hstem +461 69 hstem +66 80 vstem +426 90 vstem +66 -199 rmoveto +88 0 rlineto +0 253 rlineto +29 -39 48 -27 59 0 rrcurveto +131 0 95 133 0 142 rrcurveto +0 136 -82 131 -138 0 rrcurveto +-67 0 -46 -26 -37 -53 rrcurveto +0 68 rlineto +-80 0 rlineto +0 -718 rlineto +closepath +80 455 rmoveto +0 133 67 72 75 0 rrcurveto +76 0 62 -65 0 -132 rrcurveto +0 -139 -64 -64 -78 0 rrcurveto +-76 0 -62 61 0 134 rrcurveto +closepath +endchar } ND +/afii10083 { +0 500 hsbw +-12 73 hstem +458 72 hstem +39 90 vstem +404 190 rmoveto +-12 -88 -49 -41 -69 0 rrcurveto +-87 0 -58 59 0 140 rrcurveto +0 137 60 61 90 0 rrcurveto +58 0 44 -36 16 -69 rrcurveto +85 13 rlineto +-20 105 -74 59 -113 0 rrcurveto +-142 0 -94 -121 0 -152 rrcurveto +0 -174 93 -95 143 0 rrcurveto +113 0 84 71 19 120 rrcurveto +-87 11 rlineto +closepath +endchar } ND +/afii10084 { +0 458 hsbw +0 20 hstem +446 73 hstem +186 87 vstem +19 519 rmoveto +0 -73 rlineto +167 0 rlineto +0 -446 rlineto +87 0 rlineto +0 446 rlineto +167 0 rlineto +0 73 rlineto +-421 0 rlineto +closepath +endchar } ND +/afii10085 { +0 500 hsbw +-210 85 hstem +499 20 hstem +16 95 vstem +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +endchar } ND +/afii10086 { +0 823 hsbw +-199 20 hstem +-12 72 hstem +458 72 hstem +696 20 hstem +37 89 368 87 697 89 vstem3 +368 716 rmoveto +0 -248 rlineto +-34 42 -42 20 -52 0 rrcurveto +-124 0 -79 -116 0 -149 rrcurveto +0 -179 95 -98 108 0 rrcurveto +49 0 43 19 36 38 rrcurveto +0 -244 rlineto +88 0 rlineto +0 244 rlineto +54 -52 35 -5 38 0 rrcurveto +116 0 87 109 0 163 rrcurveto +0 154 -78 116 -122 0 rrcurveto +-51 0 -43 -20 -36 -42 rrcurveto +0 248 rlineto +-88 0 rlineto +closepath +87 -459 rmoveto +0 134 39 67 79 0 rrcurveto +72 0 52 -63 0 -132 rrcurveto +0 -139 -57 -64 -72 0 rrcurveto +-64 0 -49 41 0 156 rrcurveto +closepath +-329 10 rmoveto +0 121 49 70 74 0 rrcurveto +80 0 39 -69 0 -136 rrcurveto +0 -128 -37 -64 -77 0 rrcurveto +-72 0 -56 59 0 147 rrcurveto +closepath +endchar } ND +/afii10087 { +0 500 hsbw +0 20 hstem +499 20 hstem +7 107 vstem +374 105 vstem +7 0 rmoveto +107 0 rlineto +136 205 rlineto +28 -44 rlineto +107 -161 rlineto +108 0 rlineto +-193 274 rlineto +179 245 rlineto +-105 0 rlineto +-87 -123 rlineto +-5 -9 -6 -8 -8 -10 rrcurveto +-7 -8 -7 -11 -7 -11 rrcurveto +-10 15 -12 19 -14 24 rrcurveto +-80 122 rlineto +-110 0 rlineto +176 -249 rlineto +-190 -270 rlineto +closepath +endchar } ND +/afii10088 { +0 573 hsbw +0 72 hstem +499 20 hstem +67 88 vstem +471 72 vstem +67 519 rmoveto +0 -519 rlineto +404 0 rlineto +0 -147 rlineto +72 0 rlineto +0 219 rlineto +-57 0 rlineto +0 447 rlineto +-88 0 rlineto +0 -447 rlineto +-243 0 rlineto +0 447 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10089 { +0 521 hsbw +0 284 hstem +499 20 hstem +34 88 vstem +367 88 vstem +34 519 rmoveto +0 -136 rlineto +0 -109 71 -90 110 0 rrcurveto +47 0 51 8 54 17 rrcurveto +0 -209 rlineto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -235 rlineto +-53 -18 -43 -9 -33 0 rrcurveto +-90 0 -26 58 0 105 rrcurveto +0 99 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10090 { +0 802 hsbw +0 73 hstem +499 20 hstem +69 89 358 87 646 87 vstem3 +69 519 rmoveto +0 -519 rlineto +664 0 rlineto +0 519 rlineto +-87 0 rlineto +0 -446 rlineto +-201 0 rlineto +0 446 rlineto +-88 0 rlineto +0 -446 rlineto +-200 0 rlineto +0 446 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10091 { +0 823 hsbw +0 72 hstem +499 20 hstem +69 88 vstem +357 88 vstem +718 73 vstem +69 519 rmoveto +0 -519 rlineto +649 0 rlineto +0 -147 rlineto +73 0 rlineto +0 219 rlineto +-58 0 rlineto +0 447 rlineto +-87 0 rlineto +0 -447 rlineto +-201 0 rlineto +0 447 rlineto +-88 0 rlineto +0 -447 rlineto +-200 0 rlineto +0 447 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10092 { +0 625 hsbw +0 71 hstem +243 73 hstem +446 73 hstem +164 87 vstem +498 91 vstem +20 519 rmoveto +0 -73 rlineto +144 0 rlineto +0 -446 rlineto +220 0 rlineto +134 0 71 63 0 94 rrcurveto +0 89 -68 70 -158 0 rrcurveto +-112 0 rlineto +0 203 rlineto +-231 0 rlineto +closepath +231 -448 rmoveto +0 172 rlineto +104 0 rlineto +110 0 33 -32 0 -54 rrcurveto +0 -60 -42 -26 -112 0 rrcurveto +-93 0 rlineto +closepath +endchar } ND +/afii10093 { +0 719 hsbw +0 72 hstem +243 276 hstem +68 88 vstem +403 91 vstem +560 87 vstem +560 519 rmoveto +0 -519 rlineto +87 0 rlineto +0 519 rlineto +-87 0 rlineto +closepath +-492 0 rmoveto +0 -519 rlineto +220 0 rlineto +144 0 62 70 0 87 rrcurveto +0 98 -82 61 -145 0 rrcurveto +-111 0 rlineto +0 203 rlineto +-88 0 rlineto +closepath +88 -447 rmoveto +0 171 rlineto +104 0 rlineto +120 0 23 -42 0 -44 rrcurveto +0 -59 -43 -26 -112 0 rrcurveto +-92 0 rlineto +closepath +endchar } ND +/afii10094 { +0 521 hsbw +0 72 hstem +243 276 hstem +64 88 vstem +399 91 vstem +64 519 rmoveto +0 -519 rlineto +220 0 rlineto +144 0 62 70 0 87 rrcurveto +0 98 -81 61 -145 0 rrcurveto +-112 0 rlineto +0 203 rlineto +-88 0 rlineto +closepath +88 -447 rmoveto +0 171 rlineto +104 0 rlineto +121 0 22 -42 0 -44 rrcurveto +0 -59 -44 -26 -110 0 rrcurveto +-93 0 rlineto +closepath +endchar } ND +/afii10095 { +0 510 hsbw +-12 73 hstem +229 73 hstem +458 72 hstem +380 91 vstem +380 302 rmoveto +-183 0 rlineto +0 -73 rlineto +183 0 rlineto +-11 -112 -47 -56 -84 0 rrcurveto +-74 0 -44 42 -13 86 rrcurveto +-86 -11 rlineto +18 -114 79 -76 124 0 rrcurveto +148 -8 81 113 0 166 rrcurveto +0 169 -90 102 -145 0 rrcurveto +-116 0 -74 -68 -16 -97 rrcurveto +85 -13 rlineto +14 70 42 36 68 0 rrcurveto +77 0 53 -64 11 -92 rrcurveto +closepath +endchar } ND +/afii10096 { +0 750 hsbw +-12 73 hstem +229 73 hstem +456 74 hstem +67 88 vstem +261 89 vstem +619 90 vstem +67 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 229 rlineto +106 0 rlineto +10 -150 82 -91 130 0 rrcurveto +138 0 88 94 0 179 rrcurveto +0 159 -68 110 -160 0 rrcurveto +-123 0 -81 -80 -16 -148 rrcurveto +-106 0 rlineto +0 217 rlineto +-88 0 rlineto +closepath +419 -63 rmoveto +89 0 44 -68 0 -133 rrcurveto +0 -136 -57 -58 -80 0 rrcurveto +-80 0 -52 63 0 143 rrcurveto +0 118 49 71 87 0 rrcurveto +closepath +endchar } ND +/afii10097 { +0 542 hsbw +0 274 hstem +446 73 hstem +48 90 vstem +387 87 vstem +474 519 rmoveto +-240 0 rlineto +-120 0 -66 -62 0 -90 rrcurveto +0 -76 48 -66 100 -13 rrcurveto +-29 -6 -29 -24 -28 -42 rrcurveto +-95 -140 rlineto +109 0 rlineto +77 113 rlineto +57 86 16 3 62 0 rrcurveto +51 0 rlineto +0 -202 rlineto +87 0 rlineto +0 519 rlineto +closepath +-87 -73 rmoveto +0 -172 rlineto +-97 0 rlineto +-114 0 -38 28 0 62 rrcurveto +0 44 18 38 106 0 rrcurveto +125 0 rlineto +closepath +endchar } ND +/afii10071 { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +620 100 hstem +37 90 vstem +139 91 vstem +321 92 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +7 311 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/afii10099 { +0 556 hsbw +-210 77 hstem +0 458 hstem +510 20 hstem +594 122 hstem +66 87 vstem +400 88 vstem +66 594 rmoveto +0 -594 rlineto +87 0 rlineto +0 284 rlineto +0 137 73 34 64 0 rrcurveto +73 0 37 -42 0 -84 rrcurveto +0 -355 rlineto +0 -102 -23 -5 -30 0 rrcurveto +-11 0 -14 3 -16 4 rrcurveto +-17 -75 rlineto +20 -6 23 -3 26 0 rrcurveto +74 0 56 26 0 156 rrcurveto +0 357 rlineto +0 148 -64 53 -114 0 rrcurveto +-64 0 -53 -23 -40 -49 rrcurveto +0 136 rlineto +168 0 rlineto +0 58 rlineto +-168 0 rlineto +0 64 rlineto +-87 0 rlineto +0 -64 rlineto +-66 0 rlineto +0 -58 rlineto +66 0 rlineto +closepath +endchar } ND +/afii10100 { +0 365 hsbw +0 20 hstem +446 73 hstem +583 137 hstem +66 88 vstem +167 73 vstem +66 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 446 rlineto +211 0 rlineto +0 73 rlineto +-299 0 rlineto +closepath +101 64 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/afii10101 { +0 510 hsbw +-12 73 hstem +229 73 hstem +458 72 hstem +40 90 vstem +313 302 rmoveto +-183 0 rlineto +10 92 53 64 78 0 rrcurveto +68 0 42 -36 14 -70 rrcurveto +85 13 rlineto +-15 97 -75 68 -116 0 rrcurveto +-144 0 -90 -102 0 -169 rrcurveto +0 -166 81 -113 147 8 rrcurveto +124 0 79 76 18 114 rrcurveto +-86 11 rlineto +-14 -86 -43 -42 -74 0 rrcurveto +-84 0 -48 56 -10 112 rrcurveto +183 0 rlineto +0 73 rlineto +closepath +endchar } ND +/afii10102 { +0 500 hsbw +-12 73 hstem +458 72 hstem +45 85 vstem +371 90 vstem +31 155 rmoveto +18 -111 68 -56 135 0 rrcurveto +105 0 104 64 0 100 rrcurveto +0 109 -79 18 -130 35 rrcurveto +-20 7 -18 5 -14 3 rrcurveto +-47 10 -23 17 0 35 rrcurveto +0 36 31 31 82 0 rrcurveto +68 0 37 -32 8 -53 rrcurveto +86 12 rlineto +-20 106 -83 39 -103 0 rrcurveto +-106 0 -85 -55 0 -94 rrcurveto +0 -103 79 -25 131 -33 rrcurveto +75 -19 41 -4 0 -54 rrcurveto +0 -44 -38 -38 -81 0 rrcurveto +-80 0 -45 37 -9 70 rrcurveto +-87 -13 rlineto +closepath +endchar } ND +/afii10103 { +0 222 hsbw +0 20 hstem +499 20 hstem +615 101 hstem +66 88 vstem +66 615 rmoveto +88 0 rlineto +0 101 rlineto +-88 0 rlineto +0 -101 rlineto +closepath +0 -615 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/afii10104 { +0 278 hsbw +0 20 hstem +499 20 hstem +620 100 hstem +4 93 98 87 187 91 vstem3 +97 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-93 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +183 0 rmoveto +91 0 rlineto +0 100 rlineto +-91 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/afii10105 { +0 222 hsbw +-210 79 hstem +499 20 hstem +614 102 hstem +65 88 vstem +65 614 rmoveto +88 0 rlineto +0 102 rlineto +-88 0 rlineto +0 -102 rlineto +closepath +-111 -815 rmoveto +22 -6 23 -3 24 0 rrcurveto +104 0 26 63 0 119 rrcurveto +0 547 rlineto +-88 0 rlineto +0 -545 rlineto +0 -96 -17 -9 -36 0 rrcurveto +-17 0 rlineto +-6 2 -8 2 -10 1 rrcurveto +-17 -75 rlineto +closepath +endchar } ND +/afii10106 { +0 906 hsbw +-3 70 hstem +243 73 hstem +446 73 hstem +114 88 450 83 781 88 vstem3 +533 519 rmoveto +-419 0 rlineto +0 -342 rlineto +0 -96 -10 -14 -41 0 rrcurveto +-13 0 -18 1 -23 4 rrcurveto +0 -72 rlineto +36 -2 23 -1 10 0 rrcurveto +110 0 14 64 0 127 rrcurveto +0 258 rlineto +243 0 rlineto +0 -446 rlineto +220 0 rlineto +146 0 60 74 0 83 rrcurveto +0 100 -84 59 -142 0 rrcurveto +-112 0 rlineto +0 203 rlineto +closepath +0 -447 rmoveto +0 171 rlineto +105 0 rlineto +121 0 22 -41 0 -45 rrcurveto +0 -59 -44 -26 -112 0 rrcurveto +-92 0 rlineto +closepath +endchar } ND +/afii10107 { +0 813 hsbw +0 69 hstem +230 289 hstem +64 88 vstem +352 88 vstem +687 91 vstem +440 303 rmoveto +0 216 rlineto +-88 0 rlineto +0 -216 rlineto +-200 0 rlineto +0 216 rlineto +-88 0 rlineto +0 -519 rlineto +88 0 rlineto +0 230 rlineto +200 0 rlineto +0 -230 rlineto +220 0 rlineto +142 0 64 67 0 84 rrcurveto +0 94 -82 58 -144 0 rrcurveto +-112 0 rlineto +closepath +0 -234 rmoveto +0 161 rlineto +104 0 rlineto +121 0 22 -38 0 -44 rrcurveto +0 -55 -42 -24 -113 0 rrcurveto +-92 0 rlineto +closepath +endchar } ND +/afii10108 { +0 556 hsbw +0 458 hstem +510 20 hstem +594 122 hstem +66 87 vstem +400 88 vstem +66 652 rmoveto +-66 0 rlineto +0 -58 rlineto +66 0 rlineto +0 -594 rlineto +87 0 rlineto +0 284 rlineto +0 137 73 34 64 0 rrcurveto +73 0 37 -42 0 -84 rrcurveto +0 -329 rlineto +88 0 rlineto +0 329 rlineto +0 148 -64 53 -114 0 rrcurveto +-64 0 -53 -23 -40 -49 rrcurveto +0 136 rlineto +168 0 rlineto +0 58 rlineto +-168 0 rlineto +0 64 rlineto +-87 0 rlineto +0 -64 rlineto +closepath +endchar } ND +/afii10109 { +0 438 hsbw +0 294 hstem +446 73 hstem +583 137 hstem +65 88 vstem +167 73 vstem +349 96 vstem +65 519 rmoveto +0 -519 rlineto +88 0 rlineto +0 240 rlineto +40 0 23 -15 39 -64 rrcurveto +94 -161 rlineto +96 0 rlineto +-96 161 rlineto +-37 60 -37 35 -37 10 rrcurveto +45 21 16 16 27 69 rrcurveto +22 56 -5 18 58 0 rrcurveto +25 0 rlineto +0 73 rlineto +-18 0 rlineto +-94 0 -14 -23 -38 -92 rrcurveto +-43 -104 -10 -6 -56 0 rrcurveto +0 225 rlineto +-88 0 rlineto +closepath +102 64 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/afii10110 { +0 500 hsbw +-210 85 hstem +499 20 hstem +588 61 hstem +695 20 hstem +16 95 vstem +112 60 vstem +340 60 vstem +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +278 915 rmoveto +-10 -46 -24 -20 -53 0 rrcurveto +-46 0 -26 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 83 0 rrcurveto +82 0 52 45 10 82 rrcurveto +-60 0 rlineto +closepath +endchar } ND +/afii10193 { +0 552 hsbw +0 72 hstem +499 20 hstem +66 88 240 72 398 88 vstem3 +313 0 rmoveto +173 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -447 rlineto +-244 0 rlineto +0 447 rlineto +-88 0 rlineto +0 -519 rlineto +174 0 rlineto +0 -147 rlineto +73 0 rlineto +0 147 rlineto +closepath +endchar } ND +/afii10050 { +0 489 hsbw +0 20 hstem +631 85 hstem +79 94 vstem +375 84 vstem +375 716 rmoveto +-296 0 rlineto +0 -716 rlineto +94 0 rlineto +0 631 rlineto +286 0 rlineto +0 283 rlineto +-84 0 rlineto +0 -198 rlineto +closepath +endchar } ND +/afii10098 { +0 411 hsbw +0 20 hstem +446 73 hstem +697 20 hstem +66 88 vstem +308 73 vstem +308 519 rmoveto +-242 0 rlineto +0 -519 rlineto +88 0 rlineto +0 446 rlineto +227 0 rlineto +0 271 rlineto +-73 0 rlineto +0 -198 rlineto +closepath +endchar } ND +/afii00208 { +0 1000 hsbw +224 70 hstem +32 937 vstem +32 224 rmoveto +937 0 rlineto +0 70 rlineto +-937 0 rlineto +0 -70 rlineto +closepath +endchar } ND +/afii61352 { +0 1073 hsbw +0 161 hstem +182 67 hstem +552 164 hstem +78 89 vstem +523 91 vstem +679 86 vstem +946 85 vstem +78 716 rmoveto +0 -716 rlineto +89 0 rlineto +0 552 rlineto +352 -552 rlineto +95 0 rlineto +0 716 rlineto +-91 0 rlineto +0 -555 rlineto +-350 555 rlineto +-95 0 rlineto +closepath +601 -333 rmoveto +0 -142 80 -59 94 0 rrcurveto +106 0 72 75 0 120 rrcurveto +0 120 -69 75 -106 0 rrcurveto +-107 0 -70 -73 0 -116 rrcurveto +closepath +86 -3 rmoveto +0 84 41 43 48 0 rrcurveto +46 0 46 -38 0 -92 rrcurveto +0 -86 -43 -42 -48 0 rrcurveto +-51 0 -39 44 0 87 rrcurveto +closepath +-77 -250 rmoveto +0 -72 rlineto +333 0 rlineto +0 72 rlineto +-333 0 rlineto +closepath +endchar } ND +/pi { +0 690 hsbw +0 20 hstem +447 72 hstem +159 88 vstem +462 88 vstem +247 447 rmoveto +215 0 rlineto +0 -447 rlineto +88 0 rlineto +0 447 rlineto +118 0 rlineto +0 72 rlineto +-646 0 rlineto +0 -72 rlineto +137 0 rlineto +0 -447 rlineto +88 0 rlineto +0 447 rlineto +closepath +endchar } ND +/sheva { +0 333 hsbw +-210 82 hstem +-106 82 hstem +125 83 vstem +167 -24 rmoveto +-28 0 -14 -21 0 -20 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +0 -104 rmoveto +-24 0 -18 -17 0 -24 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +endchar } ND +/hatafsegol { +0 333 hsbw +-210 82 hstem +-106 82 hstem +15 82 125 83 236 82 vstem3 +56 -24 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 19 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +111 0 rmoveto +-24 0 -18 -18 0 -23 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +110 0 rmoveto +-23 0 -18 -18 0 -23 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-167 -104 rmoveto +-26 0 -15 -21 0 -20 rrcurveto +0 -23 18 -18 23 0 rrcurveto +24 0 17 19 0 22 rrcurveto +0 27 -21 14 -20 0 rrcurveto +closepath +167 0 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -22 19 -19 22 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 23 -19 18 -22 0 rrcurveto +closepath +endchar } ND +/hatafpatah { +0 333 hsbw +-210 82 hstem +-80 51 hstem +24 164 vstem +227 82 vstem +268 -24 rmoveto +-24 0 -17 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +26 0 15 20 0 21 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-244 -56 rmoveto +164 0 rlineto +0 51 rlineto +-164 0 rlineto +0 -51 rlineto +closepath +244 -48 rmoveto +-24 0 -17 -16 0 -25 rrcurveto +0 -22 17 -19 24 0 rrcurveto +26 0 15 21 0 20 rrcurveto +0 23 -21 18 -20 0 rrcurveto +closepath +endchar } ND +/hatafqamats { +0 333 hsbw +-210 82 hstem +-80 51 hstem +79 57 vstem +227 82 vstem +268 -24 rmoveto +-24 0 -17 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +26 0 15 20 0 21 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-189 -128 rmoveto +57 0 rlineto +0 72 rlineto +52 0 rlineto +0 51 rlineto +-164 0 rlineto +0 -51 rlineto +55 0 rlineto +0 -72 rlineto +closepath +189 24 rmoveto +-24 0 -17 -16 0 -25 rrcurveto +0 -22 17 -19 24 0 rrcurveto +26 0 15 21 0 20 rrcurveto +0 23 -21 18 -20 0 rrcurveto +closepath +endchar } ND +/hiriq { +0 333 hsbw +-180 82 hstem +125 83 vstem +167 -98 rmoveto +-28 0 -14 -21 0 -20 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +endchar } ND +/tsere { +0 333 hsbw +-180 82 hstem +62 82 vstem +189 82 vstem +103 -98 rmoveto +-24 0 -17 -18 0 -23 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 27 -23 14 -18 0 rrcurveto +closepath +127 0 rmoveto +-22 0 -19 -16 0 -25 rrcurveto +0 -22 19 -19 22 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/segol { +0 333 hsbw +-210 82 hstem +-106 82 hstem +62 82 vstem +189 82 vstem +103 -24 rmoveto +-24 0 -17 -18 0 -23 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 27 -23 14 -18 0 rrcurveto +closepath +127 0 rmoveto +-22 0 -19 -18 0 -23 rrcurveto +0 -22 19 -19 22 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-63 -104 rmoveto +-24 0 -18 -17 0 -24 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +endchar } ND +/patah { +0 333 hsbw +-154 51 hstem +68 197 vstem +68 -154 rmoveto +197 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/qamats { +0 333 hsbw +-210 133 hstem +139 56 vstem +139 -210 rmoveto +56 0 rlineto +0 82 rlineto +70 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +71 0 rlineto +0 -82 rlineto +closepath +endchar } ND +/holam { +0 333 hsbw +577 82 hstem +125 83 vstem +167 659 rmoveto +-24 0 -18 -19 0 -22 rrcurveto +0 -24 19 -17 23 0 rrcurveto +21 0 20 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +endchar } ND +/qubuts { +0 333 hsbw +-210 82 hstem +-107 82 hstem +8 82 125 83 243 82 vstem3 +49 -25 rmoveto +-25 0 -16 -16 0 -25 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 23 -19 18 -22 0 rrcurveto +closepath +118 -53 rmoveto +-24 0 -18 -17 0 -24 rrcurveto +0 -22 20 -19 22 0 rrcurveto +20 0 21 21 0 20 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +117 -50 rmoveto +-23 0 -18 -18 0 -23 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 22 -17 19 -24 0 rrcurveto +closepath +endchar } ND +/dagesh { +0 333 hsbw +241 82 hstem +125 83 vstem +167 323 rmoveto +-28 0 -14 -21 0 -20 rrcurveto +0 -24 20 -17 22 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -23 15 -18 0 rrcurveto +closepath +endchar } ND +/meteg { +0 333 hsbw +-210 185 hstem +141 51 vstem +141 -25 rmoveto +0 -185 rlineto +51 0 rlineto +0 185 rlineto +-51 0 rlineto +closepath +endchar } ND +/maqaf { +0 383 hsbw +440 78 hstem +61 261 vstem +61 440 rmoveto +261 0 rlineto +0 78 rlineto +-261 0 rlineto +0 -78 rlineto +closepath +endchar } ND +/rafe { +0 333 hsbw +611 51 hstem +68 197 vstem +68 611 rmoveto +197 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/paseq { +0 275 hsbw +-10 20 hstem +605 20 hstem +103 69 vstem +103 -10 rmoveto +69 0 rlineto +0 635 rlineto +-69 0 rlineto +0 -635 rlineto +closepath +endchar } ND +/shindot { +0 333 hsbw +577 83 hstem +380 82 vstem +421 660 rmoveto +-19 0 -22 -16 0 -26 rrcurveto +0 -23 18 -18 23 0 rrcurveto +23 0 18 16 0 25 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/sindot { +0 333 hsbw +577 83 hstem +-123 82 vstem +-82 660 rmoveto +-20 0 -21 -16 0 -26 rrcurveto +0 -23 17 -18 24 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/sofpasuq { +0 278 hsbw +0 100 hstem +418 101 hstem +90 100 vstem +90 418 rmoveto +100 0 rlineto +0 101 rlineto +-100 0 rlineto +0 -101 rlineto +closepath +0 -418 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/alef { +0 563 hsbw +0 20 hstem +498 20 hstem +51 97 vstem +407 97 vstem +536 0 rmoveto +-155 219 rlineto +76 46 24 54 11 92 rrcurveto +12 107 rlineto +-97 0 rlineto +-12 -104 rlineto +-10 -78 -11 -24 -40 -26 rrcurveto +-166 232 rlineto +-115 0 rlineto +121 -170 rlineto +-58 -30 -34 -56 -10 -83 rrcurveto +-21 -179 rlineto +97 0 rlineto +21 179 rlineto +5 50 18 34 31 17 rrcurveto +198 -280 rlineto +115 0 rlineto +closepath +endchar } ND +/bet { +0 542 hsbw +0 78 hstem +443 81 hstem +344 94 vstem +438 78 rmoveto +0 202 rlineto +0 164 -80 80 -186 0 rrcurveto +-50 0 -46 -4 -44 -7 rrcurveto +8 -77 rlineto +23 1 20 3 14 3 rrcurveto +41 0 rlineto +145 0 61 -44 0 -144 rrcurveto +0 -177 rlineto +-320 0 rlineto +0 -78 rlineto +496 0 rlineto +0 78 rlineto +-82 0 rlineto +closepath +endchar } ND +/gimel { +0 399 hsbw +0 176 hstem +444 80 hstem +12 95 vstem +222 93 vstem +315 335 rmoveto +0 122 -43 67 -119 0 rrcurveto +-32 0 -26 -4 -22 -7 rrcurveto +7 -74 rlineto +16 3 17 2 20 0 rrcurveto +65 0 24 -38 0 -74 rrcurveto +0 -136 rlineto +-47 0 -73 -22 -49 -94 rrcurveto +-41 -80 rlineto +95 0 rlineto +29 54 rlineto +26 48 34 25 40 0 rrcurveto +36 -127 rlineto +91 0 rlineto +-48 176 rlineto +0 159 rlineto +closepath +endchar } ND +/dalet { +0 508 hsbw +0 20 hstem +440 78 hstem +305 93 vstem +486 440 rmoveto +0 78 rlineto +-464 0 rlineto +0 -78 rlineto +283 0 rlineto +0 -440 rlineto +93 0 rlineto +0 440 rlineto +88 0 rlineto +closepath +endchar } ND +/he { +0 602 hsbw +0 292 hstem +443 81 hstem +79 93 vstem +438 93 vstem +73 509 rmoveto +8 -80 rlineto +54 9 50 5 44 0 rrcurveto +142 0 67 -40 0 -148 rrcurveto +0 -255 rlineto +93 0 rlineto +0 280 rlineto +0 165 -70 79 -216 0 rrcurveto +-56 0 -57 -5 -59 -10 rrcurveto +closepath +99 -217 rmoveto +-93 0 rlineto +0 -292 rlineto +93 0 rlineto +0 292 rlineto +closepath +endchar } ND +/vav { +0 247 hsbw +0 20 hstem +498 20 hstem +76 95 vstem +171 518 rmoveto +-95 0 rlineto +0 -518 rlineto +95 0 rlineto +0 518 rlineto +closepath +endchar } ND +/zayin { +0 382 hsbw +0 20 hstem +452 66 hstem +111 90 vstem +360 452 rmoveto +0 66 rlineto +-314 0 rlineto +0 -78 rlineto +131 0 rlineto +-44 -37 -22 -45 0 -54 rrcurveto +0 -16 1 -20 3 -24 rrcurveto +6 -72 4 -53 0 -34 rrcurveto +0 -85 rlineto +93 0 rlineto +0 72 rlineto +0 33 -4 56 -8 79 rrcurveto +-4 27 -1 18 0 10 rrcurveto +0 96 60 61 99 0 rrcurveto +closepath +endchar } ND +/het { +0 599 hsbw +0 507 hstem +509 15 hstem +76 93 vstem +435 93 vstem +528 0 rmoveto +0 290 rlineto +0 168 -97 66 -163 0 rrcurveto +-59 0 -64 -6 -69 -11 rrcurveto +0 -507 rlineto +93 0 rlineto +0 436 rlineto +34 4 31 3 28 0 rrcurveto +116 0 57 -45 0 -117 rrcurveto +0 -281 rlineto +93 0 rlineto +closepath +endchar } ND +/tet { +0 590 hsbw +-14 75 hstem +446 83 hstem +68 94 vstem +438 93 vstem +68 518 rmoveto +0 -243 rlineto +0 -178 78 -111 152 0 rrcurveto +165 0 68 112 0 183 rrcurveto +0 37 rlineto +0 137 -48 74 -90 0 rrcurveto +-55 0 -45 -29 -35 -58 rrcurveto +30 -48 rlineto +25 34 28 18 32 0 rrcurveto +43 0 22 -38 0 -76 rrcurveto +0 -66 rlineto +0 -120 -27 -85 -113 0 rrcurveto +-70 0 -66 34 0 154 rrcurveto +0 269 rlineto +-94 0 rlineto +closepath +endchar } ND +/yod { +0 247 hsbw +250 268 hstem +76 95 vstem +171 518 rmoveto +-95 0 rlineto +0 -268 rlineto +95 0 rlineto +0 268 rlineto +closepath +endchar } ND +/finalkaf { +0 509 hsbw +-199 20 hstem +443 81 hstem +345 93 vstem +20 513 rmoveto +7 -80 rlineto +48 6 42 4 35 0 rrcurveto +117 0 76 -44 0 -144 rrcurveto +0 -454 rlineto +93 0 rlineto +0 479 rlineto +0 177 -87 67 -194 0 rrcurveto +-42 0 -45 -4 -50 -7 rrcurveto +closepath +endchar } ND +/kaf { +0 461 hsbw +-8 84 hstem +443 84 hstem +317 100 vstem +39 7 rmoveto +38 -10 34 -5 30 0 rrcurveto +168 0 108 110 0 157 rrcurveto +0 154 -103 114 -173 0 rrcurveto +-30 0 -34 -5 -38 -10 rrcurveto +13 -84 rlineto +30 10 31 5 33 0 rrcurveto +110 0 61 -76 0 -108 rrcurveto +0 -103 -65 -80 -106 0 rrcurveto +-32 0 -32 5 -30 10 rrcurveto +-13 -84 rlineto +closepath +endchar } ND +/lamed { +0 463 hsbw +0 20 hstem +440 78 hstem +696 20 hstem +29 93 vstem +204 93 vstem +316 93 vstem +122 518 rmoveto +0 198 rlineto +-93 0 rlineto +0 -276 rlineto +287 0 rlineto +0 -70 rlineto +0 -47 -5 -22 -29 -37 rrcurveto +-29 -37 rlineto +-32 -42 -17 -31 0 -84 rrcurveto +0 -70 rlineto +93 0 rlineto +0 83 rlineto +0 40 13 38 27 36 rrcurveto +26 35 rlineto +34 46 12 37 0 74 rrcurveto +0 129 rlineto +-287 0 rlineto +closepath +endchar } ND +/finalmem { +0 599 hsbw +0 78 hstem +443 81 hstem +76 93 vstem +435 93 vstem +528 0 rmoveto +0 290 rlineto +0 168 -97 66 -163 0 rrcurveto +-59 0 -64 -6 -69 -11 rrcurveto +0 -507 rlineto +452 0 rlineto +closepath +-93 78 rmoveto +-266 0 rlineto +0 358 rlineto +34 4 31 3 28 0 rrcurveto +116 0 57 -45 0 -117 rrcurveto +0 -203 rlineto +closepath +endchar } ND +/mem { +0 601 hsbw +0 78 hstem +444 80 hstem +39 91 vstem +436 94 vstem +119 302 rmoveto +-12 -48 -8 -33 -4 -19 rrcurveto +-41 -202 rlineto +94 0 rlineto +37 192 rlineto +36 185 50 67 72 0 rrcurveto +92 0 1 -95 0 -119 rrcurveto +0 -152 rlineto +-173 0 rlineto +0 -78 rlineto +267 0 rlineto +0 228 rlineto +0 173 -40 123 -145 0 rrcurveto +-75 0 -72 -54 -30 -66 rrcurveto +-38 114 rlineto +-91 0 rlineto +80 -216 rlineto +closepath +endchar } ND +/finalnun { +0 247 hsbw +-199 20 hstem +498 20 hstem +76 95 vstem +171 518 rmoveto +-95 0 rlineto +0 -717 rlineto +95 0 rlineto +0 717 rlineto +closepath +endchar } ND +/nun { +0 353 hsbw +0 78 hstem +444 80 hstem +186 93 vstem +279 0 rmoveto +0 335 rlineto +0 122 -43 67 -119 0 rrcurveto +-32 0 -26 -4 -22 -7 rrcurveto +7 -74 rlineto +15 3 18 2 20 0 rrcurveto +65 0 24 -39 0 -73 rrcurveto +0 -254 rlineto +-157 0 rlineto +0 -78 rlineto +250 0 rlineto +closepath +endchar } ND +/samekh { +0 574 hsbw +-15 78 hstem +456 76 hstem +44 102 vstem +429 101 vstem +44 257 rmoveto +0 -164 96 -108 147 0 rrcurveto +152 0 91 122 0 150 rrcurveto +0 158 -95 117 -148 0 rrcurveto +-147 0 -96 -110 0 -165 rrcurveto +closepath +102 0 rmoveto +0 114 46 85 95 0 rrcurveto +89 0 53 -73 0 -125 rrcurveto +0 -114 -46 -81 -96 0 rrcurveto +-90 0 -51 71 0 123 rrcurveto +closepath +endchar } ND +/ayin { +0 529 hsbw +498 20 hstem +64 99 vstem +369 94 vstem +154 63 rmoveto +-36 -12 -48 -10 -58 -8 rrcurveto +13 -81 rlineto +294 48 130 51 9 330 rrcurveto +5 137 rlineto +-94 0 rlineto +-5 -178 rlineto +0 -124 -15 -80 -110 -44 rrcurveto +-76 426 rlineto +-99 0 rlineto +90 -455 rlineto +closepath +endchar } ND +/finalpe { +0 566 hsbw +-199 20 hstem +167 74 hstem +447 77 hstem +54 90 vstem +403 93 vstem +144 438 rmoveto +25 6 29 3 32 0 rrcurveto +113 0 60 -53 0 -113 rrcurveto +0 -480 rlineto +93 0 rlineto +0 489 rlineto +0 182 -104 52 -156 0 rrcurveto +-63 0 -61 -9 -58 -17 rrcurveto +0 -195 rlineto +0 -91 49 -45 86 0 rrcurveto +24 0 22 4 20 8 rrcurveto +-10 68 rlineto +-12 -4 -13 -2 -16 0 rrcurveto +-40 0 -20 20 0 40 rrcurveto +0 137 rlineto +closepath +endchar } ND +/pe { +0 546 hsbw +-8 81 hstem +212 74 hstem +450 77 hstem +60 89 vstem +404 98 vstem +60 501 rmoveto +0 -153 rlineto +0 -90 50 -46 84 0 rrcurveto +25 0 22 4 19 8 rrcurveto +-10 68 rlineto +-11 -4 -14 -2 -16 0 rrcurveto +-40 0 -20 20 0 40 rrcurveto +0 95 rlineto +26 6 27 3 28 0 rrcurveto +106 0 68 -74 0 -112 rrcurveto +0 -128 -92 -63 -112 0 rrcurveto +-50 0 -40 10 -31 21 rrcurveto +-23 -77 rlineto +36 -24 51 -11 64 0 rrcurveto +185 0 110 107 0 167 rrcurveto +0 169 -114 92 -152 0 rrcurveto +-62 0 -58 -9 -56 -17 rrcurveto +closepath +endchar } ND +/finaltsadi { +0 461 hsbw +-199 459 hstem +498 20 hstem +12 101 176 84 325 97 vstem3 +168 -199 rmoveto +92 0 rlineto +0 384 rlineto +88 34 48 61 10 88 rrcurveto +16 150 rlineto +-97 0 rlineto +-14 -132 rlineto +-7 -63 -16 -33 -52 -30 rrcurveto +-125 258 rlineto +-99 0 rlineto +156 -322 rlineto +0 -395 rlineto +closepath +endchar } ND +/tsadi { +0 479 hsbw +0 78 hstem +498 20 hstem +31 373 vstem +425 518 rmoveto +-97 0 rlineto +-5 -86 rlineto +0 -75 -19 -33 -49 -36 rrcurveto +-144 230 rlineto +-106 0 rlineto +286 -440 rlineto +-260 0 rlineto +0 -78 rlineto +373 0 rlineto +0 55 rlineto +-111 173 rlineto +90 52 32 43 5 102 rrcurveto +5 93 rlineto +closepath +endchar } ND +/qof { +0 550 hsbw +-199 20 hstem +0 20 hstem +440 78 hstem +81 89 vstem +291 93 vstem +403 93 vstem +73 518 rmoveto +0 -78 rlineto +330 0 rlineto +0 -70 rlineto +0 -48 -6 -22 -28 -36 rrcurveto +-29 -37 rlineto +-40 -51 -9 -36 0 -70 rrcurveto +0 -70 rlineto +93 0 rlineto +0 83 rlineto +0 40 13 38 27 36 rrcurveto +26 35 rlineto +34 46 12 37 0 74 rrcurveto +0 129 rlineto +-423 0 rlineto +closepath +8 -717 rmoveto +89 0 rlineto +0 491 rlineto +-89 0 rlineto +0 -491 rlineto +closepath +endchar } ND +/resh { +0 509 hsbw +0 20 hstem +443 81 hstem +346 92 vstem +20 513 rmoveto +7 -80 rlineto +48 6 42 4 35 0 rrcurveto +130 0 64 -52 0 -136 rrcurveto +0 -255 rlineto +92 0 rlineto +0 280 rlineto +0 162 -71 82 -209 0 rrcurveto +-42 0 -46 -4 -50 -7 rrcurveto +closepath +endchar } ND +/shin { +0 694 hsbw +-14 79 hstem +498 20 hstem +56 88 302 92 552 88 vstem3 +144 518 rmoveto +-95 0 rlineto +7 -143 rlineto +0 -225 70 -164 206 0 rrcurveto +196 0 82 142 18 198 rrcurveto +18 192 rlineto +-94 0 rlineto +-21 -222 rlineto +-13 -143 -56 -88 -125 0 rrcurveto +-87 0 -63 45 -16 71 rrcurveto +125 10 79 29 9 135 rrcurveto +12 163 rlineto +-94 0 rlineto +-10 -139 rlineto +0 -96 -67 -28 -68 0 rrcurveto +-6 33 -7 60 0 86 rrcurveto +0 84 rlineto +closepath +endchar } ND +/tav { +0 643 hsbw +-4 77 hstem +444 80 hstem +150 93 vstem +479 93 vstem +20 12 rmoveto +30 -11 30 -5 31 0 rrcurveto +93 0 39 38 0 96 rrcurveto +0 314 rlineto +47 0 rlineto +142 0 47 -46 0 -143 rrcurveto +0 -255 rlineto +93 0 rlineto +0 280 rlineto +0 194 -110 50 -197 0 rrcurveto +-77 0 -75 -5 -74 -9 rrcurveto +8 -78 rlineto +40 6 35 3 28 0 rrcurveto +0 -299 rlineto +0 -52 -14 -17 -45 0 rrcurveto +-20 0 -19 3 -16 6 rrcurveto +-16 -70 rlineto +closepath +endchar } ND +/doublevav { +0 493 hsbw +0 20 hstem +498 20 hstem +76 95 vstem +322 95 vstem +417 518 rmoveto +-95 0 rlineto +0 -518 rlineto +95 0 rlineto +0 518 rlineto +closepath +-246 0 rmoveto +-95 0 rlineto +0 -518 rlineto +95 0 rlineto +0 518 rlineto +closepath +endchar } ND +/vavyod { +0 493 hsbw +0 20 hstem +250 268 hstem +76 95 vstem +322 95 vstem +417 518 rmoveto +-95 0 rlineto +0 -518 rlineto +95 0 rlineto +0 518 rlineto +closepath +-246 0 rmoveto +-95 0 rlineto +0 -268 rlineto +95 0 rlineto +0 268 rlineto +closepath +endchar } ND +/doubleyod { +0 493 hsbw +250 268 hstem +76 95 vstem +322 95 vstem +417 518 rmoveto +-95 0 rlineto +0 -268 rlineto +95 0 rlineto +0 268 rlineto +closepath +-246 0 rmoveto +-95 0 rlineto +0 -268 rlineto +95 0 rlineto +0 268 rlineto +closepath +endchar } ND +/geresh { +0 236 hsbw +330 188 hstem +44 59 vstem +44 330 rmoveto +59 0 rlineto +89 188 rlineto +-100 0 rlineto +-48 -188 rlineto +closepath +endchar } ND +/gershayim { +0 417 hsbw +330 188 hstem +44 59 vstem +225 59 vstem +225 330 rmoveto +59 0 rlineto +89 188 rlineto +-100 0 rlineto +-48 -188 rlineto +closepath +-181 0 rmoveto +59 0 rlineto +89 188 rlineto +-100 0 rlineto +-48 -188 rlineto +closepath +endchar } ND +/newsheqelsign { +0 815 hsbw +0 70 hstem +448 70 hstem +76 82 270 82 464 82 vstem3 +658 82 vstem +546 386 rmoveto +0 78 -48 54 -90 0 rrcurveto +-332 0 rlineto +0 -518 rlineto +82 0 rlineto +0 448 rlineto +234 0 rlineto +50 0 22 -20 0 -50 rrcurveto +0 -210 rlineto +82 0 rlineto +0 218 rlineto +closepath +-276 -386 rmoveto +332 0 rlineto +94 0 44 57 0 75 rrcurveto +0 386 rlineto +-82 0 rlineto +0 -378 rlineto +0 -43 -16 -27 -57 0 rrcurveto +-233 0 rlineto +0 280 rlineto +-82 0 rlineto +0 -350 rlineto +closepath +endchar } ND +/vavshindot { +0 247 hsbw +0 20 hstem +498 20 hstem +577 83 hstem +-41 82 vstem +76 95 vstem +0 660 rmoveto +-22 0 -19 -18 0 -24 rrcurveto +0 -22 17 -19 24 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +171 -142 rmoveto +-95 0 rlineto +0 -518 rlineto +95 0 rlineto +0 518 rlineto +closepath +endchar } ND +/finalkafsheva { +0 509 hsbw +-199 20 hstem +35 82 hstem +139 82 hstem +443 81 hstem +129 82 vstem +345 93 vstem +20 513 rmoveto +7 -80 rlineto +48 6 42 4 35 0 rrcurveto +117 0 76 -44 0 -144 rrcurveto +0 -454 rlineto +93 0 rlineto +0 479 rlineto +0 177 -87 67 -194 0 rrcurveto +-42 0 -45 -4 -50 -7 rrcurveto +closepath +150 -292 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 18 0 23 rrcurveto +0 21 -18 20 -23 0 rrcurveto +closepath +0 -104 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 18 0 23 rrcurveto +0 23 -18 18 -23 0 rrcurveto +closepath +endchar } ND +/finalkafqamats { +0 509 hsbw +-199 20 hstem +117 51 hstem +443 81 hstem +143 56 vstem +345 93 vstem +20 513 rmoveto +7 -80 rlineto +48 6 42 4 35 0 rrcurveto +117 0 76 -44 0 -144 rrcurveto +0 -454 rlineto +93 0 rlineto +0 479 rlineto +0 177 -87 67 -194 0 rrcurveto +-42 0 -45 -4 -50 -7 rrcurveto +closepath +123 -478 rmoveto +56 0 rlineto +0 82 rlineto +70 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +71 0 rlineto +0 -82 rlineto +closepath +endchar } ND +/lamedholam { +0 463 hsbw +0 20 hstem +440 78 hstem +577 82 hstem +696 20 hstem +-83 83 vstem +29 93 vstem +204 93 vstem +316 93 vstem +122 518 rmoveto +0 198 rlineto +-93 0 rlineto +0 -276 rlineto +287 0 rlineto +0 -70 rlineto +0 -47 -5 -22 -29 -37 rrcurveto +-29 -37 rlineto +-32 -42 -17 -31 0 -84 rrcurveto +0 -70 rlineto +93 0 rlineto +0 83 rlineto +0 40 13 38 27 36 rrcurveto +26 35 rlineto +34 46 12 37 0 74 rrcurveto +0 129 rlineto +-287 0 rlineto +closepath +-164 141 rmoveto +-22 0 -19 -19 0 -22 rrcurveto +0 -23 20 -18 21 0 rrcurveto +22 0 20 18 0 23 rrcurveto +0 22 -17 19 -25 0 rrcurveto +closepath +endchar } ND +/lamedholamdagesh { +0 463 hsbw +0 20 hstem +269 82 hstem +440 78 hstem +577 82 hstem +696 20 hstem +-83 83 vstem +110 82 vstem +204 93 vstem +316 93 vstem +122 518 rmoveto +0 198 rlineto +-93 0 rlineto +0 -276 rlineto +287 0 rlineto +0 -70 rlineto +0 -47 -5 -22 -29 -37 rrcurveto +-29 -37 rlineto +-32 -42 -17 -31 0 -84 rrcurveto +0 -70 rlineto +93 0 rlineto +0 83 rlineto +0 40 13 38 27 36 rrcurveto +26 35 rlineto +34 46 12 37 0 74 rrcurveto +0 129 rlineto +-287 0 rlineto +closepath +-164 141 rmoveto +-22 0 -19 -19 0 -22 rrcurveto +0 -23 20 -18 21 0 rrcurveto +22 0 20 18 0 23 rrcurveto +0 22 -17 19 -25 0 rrcurveto +closepath +193 -308 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/altayin { +0 535 hsbw +0 77 hstem +498 20 hstem +70 98 vstem +375 94 vstem +464 381 rmoveto +5 137 rlineto +-94 0 rlineto +-5 -178 rlineto +-4 -154 -41 -87 -77 -22 rrcurveto +-80 441 rlineto +-98 0 rlineto +87 -440 rlineto +-135 0 rlineto +0 -78 rlineto +192 0 rlineto +153 0 86 73 11 308 rrcurveto +closepath +endchar } ND +/shinshindot { +0 694 hsbw +-14 79 hstem +498 20 hstem +577 82 hstem +56 94 310 86 562 82 vstem3 +144 518 rmoveto +-95 0 rlineto +7 -143 rlineto +0 -225 70 -164 206 0 rrcurveto +196 0 82 142 18 198 rrcurveto +18 192 rlineto +-94 0 rlineto +-21 -222 rlineto +-13 -143 -56 -88 -125 0 rrcurveto +-87 0 -63 45 -16 71 rrcurveto +125 10 79 29 9 135 rrcurveto +12 163 rlineto +-94 0 rlineto +-10 -139 rlineto +0 -96 -67 -28 -68 0 rrcurveto +-6 33 -7 60 0 86 rrcurveto +0 84 rlineto +closepath +459 141 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +21 0 20 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +endchar } ND +/shinsindot { +0 694 hsbw +-14 79 hstem +498 20 hstem +577 82 hstem +52 82 vstem +302 94 vstem +552 94 vstem +144 518 rmoveto +-95 0 rlineto +7 -143 rlineto +0 -225 70 -164 206 0 rrcurveto +196 0 82 142 18 198 rrcurveto +18 192 rlineto +-94 0 rlineto +-21 -222 rlineto +-13 -143 -56 -88 -125 0 rrcurveto +-87 0 -63 45 -16 71 rrcurveto +125 10 79 29 9 135 rrcurveto +12 163 rlineto +-94 0 rlineto +-10 -139 rlineto +0 -96 -67 -28 -68 0 rrcurveto +-6 33 -7 60 0 86 rrcurveto +0 84 rlineto +closepath +-51 141 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 18 0 23 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/shindageshshindot { +0 694 hsbw +-14 79 hstem +187 82 hstem +498 20 hstem +577 82 hstem +56 88 vstem +391 82 vstem +562 82 vstem +144 518 rmoveto +-95 0 rlineto +7 -143 rlineto +0 -225 70 -164 206 0 rrcurveto +196 0 82 142 18 198 rrcurveto +18 192 rlineto +-94 0 rlineto +-21 -222 rlineto +-13 -143 -56 -88 -125 0 rrcurveto +-87 0 -63 45 -16 71 rrcurveto +125 10 79 29 9 135 rrcurveto +12 163 rlineto +-94 0 rlineto +-10 -139 rlineto +0 -96 -67 -28 -68 0 rrcurveto +-6 33 -7 60 0 86 rrcurveto +0 84 rlineto +closepath +288 -249 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 17 -17 24 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +171 390 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +21 0 20 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +endchar } ND +/shindageshsindot { +0 694 hsbw +-14 79 hstem +187 82 hstem +498 20 hstem +577 82 hstem +52 82 vstem +391 82 vstem +552 94 vstem +144 518 rmoveto +-95 0 rlineto +7 -143 rlineto +0 -225 70 -164 206 0 rrcurveto +196 0 82 142 18 198 rrcurveto +18 192 rlineto +-94 0 rlineto +-21 -222 rlineto +-13 -143 -56 -88 -125 0 rrcurveto +-87 0 -63 45 -16 71 rrcurveto +125 10 79 29 9 135 rrcurveto +12 163 rlineto +-94 0 rlineto +-10 -139 rlineto +0 -96 -67 -28 -68 0 rrcurveto +-6 33 -7 60 0 86 rrcurveto +0 84 rlineto +closepath +288 -249 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 17 -17 24 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +-339 390 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 18 0 23 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/alefpatah { +0 563 hsbw +-154 51 hstem +0 20 hstem +498 20 hstem +51 97 183 189 407 97 vstem3 +536 0 rmoveto +-155 219 rlineto +76 46 24 54 11 92 rrcurveto +12 107 rlineto +-97 0 rlineto +-12 -104 rlineto +-10 -78 -11 -24 -40 -26 rrcurveto +-166 232 rlineto +-115 0 rlineto +121 -170 rlineto +-58 -30 -34 -56 -10 -83 rrcurveto +-21 -179 rlineto +97 0 rlineto +21 179 rlineto +5 50 18 34 31 17 rrcurveto +198 -280 rlineto +115 0 rlineto +closepath +-353 -154 rmoveto +196 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/alefqamats { +0 563 hsbw +-210 133 hstem +0 20 hstem +498 20 hstem +51 97 vstem +253 57 vstem +407 97 vstem +536 0 rmoveto +-155 219 rlineto +76 46 24 54 11 92 rrcurveto +12 107 rlineto +-97 0 rlineto +-12 -104 rlineto +-10 -78 -11 -24 -40 -26 rrcurveto +-166 232 rlineto +-115 0 rlineto +121 -170 rlineto +-58 -30 -34 -56 -10 -83 rrcurveto +-21 -179 rlineto +97 0 rlineto +21 179 rlineto +5 50 18 34 31 17 rrcurveto +198 -280 rlineto +115 0 rlineto +closepath +-283 -210 rmoveto +57 0 rlineto +0 82 rlineto +69 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +70 0 rlineto +0 -82 rlineto +closepath +endchar } ND +/alefmapiq { +0 563 hsbw +0 20 hstem +36 82 hstem +498 20 hstem +51 97 vstem +215 82 vstem +407 97 vstem +536 0 rmoveto +-155 219 rlineto +66 41 34 49 11 102 rrcurveto +12 107 rlineto +-97 0 rlineto +-12 -104 rlineto +-8 -74 -13 -28 -40 -26 rrcurveto +-166 232 rlineto +-115 0 rlineto +121 -170 rlineto +-58 -30 -34 -56 -10 -83 rrcurveto +-21 -179 rlineto +97 0 rlineto +21 179 rlineto +6 50 18 34 30 17 rrcurveto +198 -280 rlineto +115 0 rlineto +closepath +-321 77 rmoveto +0 -23 17 -18 24 0 rrcurveto +23 0 18 18 0 23 rrcurveto +0 23 -18 18 -23 0 rrcurveto +-24 0 -17 -18 0 -23 rrcurveto +closepath +endchar } ND +/betdagesh { +0 542 hsbw +0 78 hstem +231 82 hstem +443 81 hstem +129 82 vstem +344 94 vstem +438 78 rmoveto +0 202 rlineto +0 164 -80 80 -186 0 rrcurveto +-50 0 -46 -4 -44 -7 rrcurveto +8 -77 rlineto +23 1 20 3 14 3 rrcurveto +41 0 rlineto +145 0 61 -44 0 -144 rrcurveto +0 -177 rlineto +-320 0 rlineto +0 -78 rlineto +496 0 rlineto +0 78 rlineto +-82 0 rlineto +closepath +-268 235 rmoveto +-27 0 -14 -20 0 -21 rrcurveto +0 -24 18 -17 23 0 rrcurveto +24 0 17 18 0 23 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/gimeldagesh { +0 399 hsbw +0 176 hstem +275 82 hstem +444 80 hstem +106 82 vstem +222 93 vstem +315 335 rmoveto +0 122 -43 67 -119 0 rrcurveto +-32 0 -26 -4 -22 -7 rrcurveto +7 -74 rlineto +16 3 17 2 20 0 rrcurveto +65 0 24 -38 0 -74 rrcurveto +0 -136 rlineto +-47 0 -73 -22 -49 -94 rrcurveto +-41 -80 rlineto +95 0 rlineto +29 54 rlineto +26 48 34 25 40 0 rrcurveto +36 -127 rlineto +91 0 rlineto +-48 176 rlineto +0 159 rlineto +closepath +-168 22 rmoveto +-27 0 -14 -20 0 -21 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/daletdagesh { +0 508 hsbw +0 20 hstem +241 82 hstem +440 78 hstem +164 82 vstem +305 93 vstem +486 440 rmoveto +0 78 rlineto +-464 0 rlineto +0 -78 rlineto +283 0 rlineto +0 -440 rlineto +93 0 rlineto +0 440 rlineto +88 0 rlineto +closepath +-281 -117 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -23 15 -18 0 rrcurveto +closepath +endchar } ND +/hedagesh { +0 602 hsbw +0 292 hstem +443 81 hstem +79 93 vstem +256 82 vstem +438 93 vstem +73 509 rmoveto +8 -80 rlineto +54 9 50 5 44 0 rrcurveto +142 0 67 -40 0 -148 rrcurveto +0 -255 rlineto +93 0 rlineto +0 280 rlineto +0 165 -70 79 -216 0 rrcurveto +-56 0 -57 -5 -59 -10 rrcurveto +closepath +99 -217 rmoveto +-93 0 rlineto +0 -292 rlineto +93 0 rlineto +0 292 rlineto +closepath +125 -1 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/vavdagesh { +0 287 hsbw +0 20 hstem +241 82 hstem +498 20 hstem +0 82 vstem +116 95 vstem +211 518 rmoveto +-95 0 rlineto +0 -518 rlineto +95 0 rlineto +0 518 rlineto +closepath +-170 -195 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -27 21 -14 20 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/zayindagesh { +0 411 hsbw +0 20 hstem +269 82 hstem +452 66 hstem +0 82 vstem +155 90 vstem +404 452 rmoveto +0 66 rlineto +-314 0 rlineto +0 -78 rlineto +131 0 rlineto +-44 -37 -22 -45 0 -54 rrcurveto +0 -16 1 -20 2 -24 rrcurveto +6 -72 4 -53 0 -34 rrcurveto +0 -85 rlineto +94 0 rlineto +0 72 rlineto +0 33 -4 56 -9 79 rrcurveto +-3 26 -1 19 0 10 rrcurveto +0 96 59 61 100 0 rrcurveto +closepath +-363 -101 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/tetdagesh { +0 590 hsbw +-14 75 hstem +241 82 hstem +446 83 hstem +67 95 260 79 438 93 vstem3 +68 518 rmoveto +0 -243 rlineto +0 -178 78 -111 152 0 rrcurveto +165 0 68 112 0 183 rrcurveto +0 37 rlineto +0 137 -48 74 -90 0 rrcurveto +-55 0 -45 -29 -35 -58 rrcurveto +30 -48 rlineto +25 34 28 18 32 0 rrcurveto +43 0 22 -38 0 -76 rrcurveto +0 -66 rlineto +0 -120 -27 -85 -113 0 rrcurveto +-70 0 -66 34 0 154 rrcurveto +0 269 rlineto +-94 0 rlineto +closepath +233 -195 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/yoddagesh { +0 287 hsbw +250 268 hstem +0 82 vstem +116 95 vstem +211 518 rmoveto +-95 0 rlineto +0 -268 rlineto +95 0 rlineto +0 268 rlineto +closepath +-170 -120 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -27 21 -14 20 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/finalkafdagesh { +0 509 hsbw +-199 20 hstem +206 82 hstem +443 81 hstem +134 82 vstem +345 93 vstem +20 513 rmoveto +7 -80 rlineto +48 6 42 4 35 0 rrcurveto +117 0 76 -44 0 -144 rrcurveto +0 -454 rlineto +93 0 rlineto +0 479 rlineto +0 177 -87 67 -194 0 rrcurveto +-42 0 -45 -4 -50 -7 rrcurveto +closepath +155 -225 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/kafdagesh { +0 461 hsbw +-8 84 221 77 443 84 hstem3 +120 82 vstem +317 100 vstem +39 7 rmoveto +38 -10 34 -5 30 0 rrcurveto +168 0 108 110 0 157 rrcurveto +0 154 -103 114 -173 0 rrcurveto +-30 0 -34 -5 -38 -10 rrcurveto +13 -84 rlineto +30 10 31 5 33 0 rrcurveto +110 0 61 -76 0 -108 rrcurveto +0 -103 -65 -80 -106 0 rrcurveto +-32 0 -32 5 -30 10 rrcurveto +-13 -84 rlineto +closepath +122 291 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 25 -21 16 -20 0 rrcurveto +closepath +endchar } ND +/lameddagesh { +0 463 hsbw +0 20 hstem +269 82 hstem +440 78 hstem +696 20 hstem +29 93 vstem +141 82 vstem +316 93 vstem +122 518 rmoveto +0 198 rlineto +-93 0 rlineto +0 -276 rlineto +287 0 rlineto +0 -70 rlineto +0 -47 -5 -22 -29 -37 rrcurveto +-29 -37 rlineto +-32 -42 -17 -31 0 -84 rrcurveto +0 -70 rlineto +93 0 rlineto +0 83 rlineto +0 40 13 38 27 36 rrcurveto +26 35 rlineto +34 46 12 37 0 74 rrcurveto +0 129 rlineto +-287 0 rlineto +closepath +60 -167 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -23 15 -18 0 rrcurveto +closepath +endchar } ND +/memdagesh { +0 601 hsbw +0 78 hstem +208 82 hstem +444 80 hstem +39 91 vstem +281 82 vstem +436 94 vstem +119 302 rmoveto +-12 -48 -8 -33 -4 -19 rrcurveto +-41 -202 rlineto +94 0 rlineto +37 192 rlineto +36 185 50 67 72 0 rrcurveto +92 0 1 -95 0 -119 rrcurveto +0 -152 rlineto +-173 0 rlineto +0 -78 rlineto +267 0 rlineto +0 228 rlineto +0 173 -40 123 -145 0 rrcurveto +-75 0 -72 -54 -30 -66 rrcurveto +-38 114 rlineto +-91 0 rlineto +80 -216 rlineto +closepath +203 -12 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/nundagesh { +0 353 hsbw +0 78 hstem +217 82 hstem +444 80 hstem +48 82 vstem +186 93 vstem +279 0 rmoveto +0 335 rlineto +0 122 -43 67 -119 0 rrcurveto +-32 0 -26 -4 -22 -7 rrcurveto +7 -74 rlineto +15 3 18 2 20 0 rrcurveto +65 0 24 -39 0 -73 rrcurveto +0 -254 rlineto +-157 0 rlineto +0 -78 rlineto +250 0 rlineto +closepath +-190 299 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 25 -21 16 -20 0 rrcurveto +closepath +endchar } ND +/samekhdagesh { +0 574 hsbw +-15 78 hstem +218 82 hstem +456 76 hstem +43 103 247 80 429 101 vstem3 +44 257 rmoveto +0 -164 96 -108 147 0 rrcurveto +152 0 91 122 0 150 rrcurveto +0 158 -95 117 -148 0 rrcurveto +-147 0 -96 -110 0 -165 rrcurveto +closepath +102 0 rmoveto +0 114 46 85 95 0 rrcurveto +89 0 53 -73 0 -125 rrcurveto +0 -114 -46 -81 -96 0 rrcurveto +-90 0 -51 71 0 123 rrcurveto +closepath +142 43 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +endchar } ND +/finalpedagesh { +0 566 hsbw +-199 20 hstem +167 74 hstem +447 77 hstem +54 90 vstem +271 83 vstem +403 93 vstem +144 438 rmoveto +25 6 29 3 32 0 rrcurveto +108 0 65 -54 0 -112 rrcurveto +0 -480 rlineto +93 0 rlineto +0 489 rlineto +0 162 -76 72 -184 0 rrcurveto +-63 0 -61 -9 -58 -17 rrcurveto +0 -195 rlineto +0 -91 40 -45 81 0 rrcurveto +22 0 20 4 18 8 rrcurveto +-9 68 rlineto +-11 -4 -13 -2 -14 0 rrcurveto +-30 0 -14 20 0 40 rrcurveto +0 137 rlineto +closepath +169 -162 rmoveto +-25 0 -17 -19 0 -22 rrcurveto +0 -24 20 -17 22 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 22 -20 19 -21 0 rrcurveto +closepath +endchar } ND +/pedagesh { +0 546 hsbw +-8 81 hstem +212 74 hstem +450 77 hstem +60 89 vstem +273 82 vstem +404 98 vstem +60 501 rmoveto +0 -159 rlineto +0 -88 58 -42 64 0 rrcurveto +21 0 17 3 13 6 rrcurveto +-10 65 rlineto +-14 0 rlineto +-40 0 -20 20 0 40 rrcurveto +0 95 rlineto +26 6 27 3 28 0 rrcurveto +106 0 68 -74 0 -112 rrcurveto +0 -128 -92 -63 -112 0 rrcurveto +-50 0 -40 10 -31 21 rrcurveto +-23 -77 rlineto +36 -24 51 -11 64 0 rrcurveto +185 0 110 107 0 167 rrcurveto +0 169 -114 92 -152 0 rrcurveto +-62 0 -58 -9 -56 -17 rrcurveto +closepath +254 -195 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -23 18 -18 23 0 rrcurveto +24 0 17 18 0 23 rrcurveto +0 22 -18 19 -23 0 rrcurveto +closepath +endchar } ND +/tsadidagesh { +0 479 hsbw +0 78 hstem +185 333 hstem +50 82 vstem +328 97 vstem +425 518 rmoveto +-97 0 rlineto +-5 -86 rlineto +0 -75 -19 -33 -49 -36 rrcurveto +-144 230 rlineto +-106 0 rlineto +286 -440 rlineto +-260 0 rlineto +0 -78 rlineto +373 0 rlineto +0 55 rlineto +-111 173 rlineto +90 52 32 43 5 102 rrcurveto +5 93 rlineto +closepath +-334 -251 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -23 15 -18 0 rrcurveto +closepath +endchar } ND +/qofdagesh { +0 550 hsbw +-199 20 hstem +0 20 hstem +241 82 hstem +440 78 hstem +81 89 vstem +223 82 vstem +403 93 vstem +73 518 rmoveto +0 -78 rlineto +330 0 rlineto +0 -70 rlineto +0 -48 -6 -22 -28 -36 rrcurveto +-29 -37 rlineto +-40 -51 -9 -36 0 -70 rrcurveto +0 -70 rlineto +93 0 rlineto +0 83 rlineto +0 40 13 38 27 36 rrcurveto +26 35 rlineto +34 46 12 37 0 74 rrcurveto +0 129 rlineto +-423 0 rlineto +closepath +8 -717 rmoveto +89 0 rlineto +0 491 rlineto +-89 0 rlineto +0 -491 rlineto +closepath +183 522 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/reshdagesh { +0 509 hsbw +0 20 hstem +206 82 hstem +443 81 hstem +134 82 vstem +346 92 vstem +20 513 rmoveto +7 -80 rlineto +48 6 42 4 35 0 rrcurveto +130 0 64 -52 0 -136 rrcurveto +0 -255 rlineto +92 0 rlineto +0 280 rlineto +0 162 -71 82 -209 0 rrcurveto +-42 0 -46 -4 -50 -7 rrcurveto +closepath +155 -225 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/shindagesh { +0 694 hsbw +-14 79 hstem +187 82 hstem +498 20 hstem +56 88 vstem +391 82 vstem +552 94 vstem +144 518 rmoveto +-95 0 rlineto +7 -143 rlineto +0 -225 70 -164 206 0 rrcurveto +196 0 82 142 18 198 rrcurveto +18 192 rlineto +-94 0 rlineto +-21 -222 rlineto +-13 -143 -56 -88 -125 0 rrcurveto +-87 0 -63 45 -16 71 rrcurveto +125 10 79 29 9 135 rrcurveto +12 163 rlineto +-94 0 rlineto +-10 -139 rlineto +0 -96 -67 -28 -68 0 rrcurveto +-6 33 -7 60 0 86 rrcurveto +0 84 rlineto +closepath +288 -249 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 17 -17 24 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +endchar } ND +/tavdages { +0 643 hsbw +-4 77 hstem +196 82 hstem +444 80 hstem +150 93 324 74 479 93 vstem3 +20 12 rmoveto +30 -11 30 -5 31 0 rrcurveto +93 0 39 38 0 96 rrcurveto +0 314 rlineto +47 0 rlineto +142 0 47 -46 0 -143 rrcurveto +0 -255 rlineto +93 0 rlineto +0 280 rlineto +0 194 -110 50 -197 0 rrcurveto +-77 0 -75 -5 -74 -9 rrcurveto +8 -78 rlineto +40 6 35 3 28 0 rrcurveto +0 -299 rlineto +0 -52 -14 -17 -45 0 rrcurveto +-20 0 -19 3 -16 6 rrcurveto +-16 -70 rlineto +closepath +337 266 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 25 -21 16 -20 0 rrcurveto +closepath +endchar } ND +/vavholam { +0 247 hsbw +0 20 hstem +498 20 hstem +577 82 hstem +82 82 vstem +171 518 rmoveto +-95 0 rlineto +0 -518 rlineto +95 0 rlineto +0 518 rlineto +closepath +-48 141 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +21 0 20 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +endchar } ND +/betrafe { +0 542 hsbw +0 78 hstem +443 81 hstem +611 51 hstem +134 196 vstem +344 94 vstem +438 78 rmoveto +0 202 rlineto +0 164 -80 80 -186 0 rrcurveto +-50 0 -46 -4 -44 -7 rrcurveto +8 -77 rlineto +23 1 20 3 14 3 rrcurveto +41 0 rlineto +145 0 61 -44 0 -144 rrcurveto +0 -177 rlineto +-320 0 rlineto +0 -78 rlineto +496 0 rlineto +0 78 rlineto +-82 0 rlineto +closepath +-304 533 rmoveto +196 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/kafrafe { +0 461 hsbw +-8 84 hstem +443 84 hstem +611 51 hstem +117 196 vstem +317 100 vstem +39 7 rmoveto +38 -10 34 -5 30 0 rrcurveto +168 0 108 110 0 157 rrcurveto +0 154 -103 114 -173 0 rrcurveto +-30 0 -34 -5 -38 -10 rrcurveto +13 -84 rlineto +30 10 31 5 33 0 rrcurveto +110 0 61 -76 0 -108 rrcurveto +0 -103 -65 -80 -106 0 rrcurveto +-32 0 -32 5 -30 10 rrcurveto +-13 -84 rlineto +closepath +78 604 rmoveto +196 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/perafe { +0 546 hsbw +-8 81 hstem +212 74 hstem +450 77 hstem +611 51 hstem +60 89 vstem +160 196 vstem +404 98 vstem +60 501 rmoveto +0 -153 rlineto +0 -90 50 -46 84 0 rrcurveto +25 0 22 4 19 8 rrcurveto +-10 68 rlineto +-11 -4 -14 -2 -16 0 rrcurveto +-40 0 -20 20 0 40 rrcurveto +0 95 rlineto +26 6 27 3 28 0 rrcurveto +106 0 68 -74 0 -112 rrcurveto +0 -128 -92 -63 -112 0 rrcurveto +-50 0 -40 10 -31 21 rrcurveto +-23 -77 rlineto +36 -24 51 -11 64 0 rrcurveto +185 0 110 107 0 167 rrcurveto +0 169 -114 92 -152 0 rrcurveto +-62 0 -58 -9 -56 -17 rrcurveto +closepath +100 110 rmoveto +196 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/aleflamed { +0 576 hsbw +0 20 hstem +498 20 hstem +696 20 hstem +29 93 vstem +64 485 vstem +549 0 rmoveto +-155 219 rlineto +66 41 34 49 11 102 rrcurveto +12 107 rlineto +-97 0 rlineto +-12 -104 rlineto +-10 -74 -11 -28 -40 -26 rrcurveto +-166 232 rlineto +-59 0 rlineto +0 198 rlineto +-93 0 rlineto +0 -276 rlineto +92 0 rlineto +66 -92 rlineto +-58 -30 -34 -56 -10 -83 rrcurveto +-21 -179 rlineto +97 0 rlineto +21 179 rlineto +5 50 18 34 31 17 rrcurveto +198 -280 rlineto +115 0 rlineto +closepath +endchar } ND +/zerowidthnonjoiner { +0 0 hsbw +609 20 hstem +-18 36 vstem +18 629 rmoveto +-36 0 rlineto +0 -763 rlineto +36 0 rlineto +0 763 rlineto +closepath +endchar } ND +/zerowidthjoiner { +0 0 hsbw +-134 20 hstem +586 20 hstem +-18 36 vstem +18 -134 rmoveto +0 678 rlineto +65 -66 rlineto +24 23 rlineto +-84 83 rlineto +84 82 rlineto +-24 24 rlineto +-83 -84 rlineto +-83 84 rlineto +-24 -24 rlineto +84 -82 rlineto +-84 -83 rlineto +24 -23 rlineto +65 66 rlineto +0 -678 rlineto +36 0 rlineto +closepath +endchar } ND +/lefttorightmark { +0 0 hsbw +568 35 hstem +-18 35 vstem +210 585 rmoveto +-106 105 rlineto +-24 -24 rlineto +67 -63 rlineto +-165 0 rlineto +0 -737 rlineto +35 0 rlineto +0 702 rlineto +130 0 rlineto +-67 -64 rlineto +24 -24 rlineto +106 105 rlineto +closepath +endchar } ND +/righttoleftmark { +0 0 hsbw +568 35 hstem +-18 35 vstem +17 -134 rmoveto +0 737 rlineto +-164 0 rlineto +66 63 rlineto +-23 24 rlineto +-106 -105 rlineto +106 -105 rlineto +23 24 rlineto +-66 64 rlineto +129 0 rlineto +0 -702 rlineto +35 0 rlineto +closepath +endchar } ND +/afii57388 { +0 319 hsbw +137 306 hstem +83 52 vstem +241 204 rmoveto +0 37 -26 18 -27 12 rrcurveto +-28 11 -25 10 0 18 rrcurveto +0 32 31 39 40 36 rrcurveto +-17 26 rlineto +-74 -53 -32 -54 0 -77 rrcurveto +0 -70 37 -52 51 0 rrcurveto +41 0 29 32 0 35 rrcurveto +closepath +endchar } ND +/afii57403 { +0 319 hsbw +136 113 hstem +303 306 hstem +78 51 vstem +235 370 rmoveto +0 37 -26 18 -27 12 rrcurveto +-28 11 -25 10 0 18 rrcurveto +0 32 31 39 40 36 rrcurveto +-16 26 rlineto +-74 -53 -32 -54 0 -77 rrcurveto +0 -70 37 -52 51 0 rrcurveto +40 0 29 32 0 35 rrcurveto +closepath +-13 -178 rmoveto +0 33 -24 24 -32 0 rrcurveto +-32 0 -26 -25 0 -32 rrcurveto +0 -31 27 -25 31 0 rrcurveto +30 0 26 25 0 31 rrcurveto +closepath +endchar } ND +/afii57407 { +0 356 hsbw +137 121 hstem +679 32 hstem +33 92 vstem +170 35 vstem +254 72 vstem +326 590 rmoveto +0 73 -63 48 -77 0 rrcurveto +-87 0 -66 -64 0 -88 rrcurveto +0 -69 16 -14 88 -77 rrcurveto +25 -22 8 -19 0 -18 rrcurveto +0 -39 rlineto +30 0 rlineto +3 26 2 24 0 22 rrcurveto +0 67 -12 28 -47 89 rrcurveto +-13 25 -8 20 0 16 rrcurveto +0 34 30 27 43 0 rrcurveto +33 0 23 -15 0 -22 rrcurveto +0 -7 -12 -10 -14 -11 rrcurveto +-14 -11 -13 -16 0 -22 rrcurveto +0 -30 24 -24 32 0 rrcurveto +40 0 29 39 0 40 rrcurveto +closepath +-89 -393 rmoveto +0 33 -26 28 -33 0 rrcurveto +-34 0 -27 -27 0 -34 rrcurveto +0 -32 27 -28 32 0 rrcurveto +34 0 27 26 0 34 rrcurveto +closepath +endchar } ND +/afii57409 { +0 413 hsbw +322 78 hstem +59 67 vstem +363 262 rmoveto +-47 -14 -46 -17 -45 -22 rrcurveto +-52 17 -47 19 0 34 rrcurveto +0 21 43 22 32 0 rrcurveto +12 0 17 -7 20 -12 rrcurveto +2 -2 7 -5 12 -8 rrcurveto +25 64 rlineto +-36 40 -11 8 -38 0 rrcurveto +-73 0 -79 -138 0 -42 rrcurveto +0 -14 8 -12 17 -10 rrcurveto +57 -33 rlineto +-20 -20 -12 -24 -7 -27 rrcurveto +15 -8 rlineto +60 56 66 32 97 22 rrcurveto +23 80 rlineto +closepath +endchar } ND +/afii57440 { +0 207 hsbw +143 85 hstem +0 241 vstem +241 143 rmoveto +0 85 rlineto +-241 0 rlineto +0 -85 rlineto +241 0 rlineto +closepath +endchar } ND +/afii57451 { +0 201 hsbw +34 167 vstem +201 780 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 16 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -29 -13 -26 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +32 14 27 11 26 9 rrcurveto +24 8 20 8 14 7 rrcurveto +7 7 5 4 5 4 rrcurveto +5 6 2 8 0 16 rrcurveto +closepath +endchar } ND +/afii57452 { +0 237 hsbw +605 39 hstem +695 20 hstem +764 30 hstem +85 20 vstem +139 31 vstem +202 35 vstem +237 763 rmoveto +0 16 -15 15 -17 0 rrcurveto +-35 0 -31 -40 0 -31 rrcurveto +0 -18 15 -16 14 -12 rrcurveto +-21 -16 -20 -11 -22 -6 rrcurveto +0 8 rlineto +0 9 5 14 0 11 rrcurveto +0 28 -13 25 -22 0 rrcurveto +-32 0 -5 -34 -4 -42 rrcurveto +2 7 3 4 3 3 rrcurveto +2 3 2 3 1 2 rrcurveto +6 7 6 4 7 0 rrcurveto +12 0 7 -15 0 -14 rrcurveto +0 -12 -2 -8 -11 -17 rrcurveto +-4 -5 -5 -8 -5 -12 rrcurveto +50 0 44 20 34 39 rrcurveto +42 -33 rlineto +2 13 1 14 0 16 rrcurveto +0 8 -7 7 -9 7 rrcurveto +14 22 8 21 0 24 rrcurveto +closepath +-35 -29 rmoveto +0 -6 -2 -7 -4 -6 rrcurveto +-4 6 -4 3 -4 2 rrcurveto +-4 1 -1 2 0 2 rrcurveto +-6 6 -3 7 0 6 rrcurveto +0 9 3 5 8 0 rrcurveto +12 0 9 -16 0 -14 rrcurveto +closepath +endchar } ND +/afii57453 { +0 201 hsbw +34 167 vstem +201 44 rmoveto +-34 -15 -30 -12 -25 -9 rrcurveto +-43 -18 -35 -13 0 -34 rrcurveto +65 27 47 19 30 11 rrcurveto +16 14 9 14 0 16 rrcurveto +closepath +0 -72 rmoveto +-92 -37 -75 -6 0 -59 rrcurveto +65 27 47 19 30 11 rrcurveto +16 15 9 15 0 15 rrcurveto +closepath +endchar } ND +/afii57454 { +0 201 hsbw +201 774 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 17 0 34 rrcurveto +closepath +endchar } ND +/afii57455 { +0 209 hsbw +708 20 hstem +777 40 hstem +110 25 vstem +143 66 vstem +209 686 rmoveto +0 6 -2 5 -3 4 rrcurveto +-3 2 -3 2 -2 3 rrcurveto +-2 3 -2 2 -4 1 rrcurveto +13 36 2 7 0 14 rrcurveto +0 25 -16 21 -17 0 rrcurveto +-30 0 -30 -39 0 -42 rrcurveto +0 -20 14 -16 19 -12 rrcurveto +-24 -28 -52 -40 -32 -15 rrcurveto +36 0 rlineto +16 0 20 11 24 24 rrcurveto +4 2 4 5 5 7 rrcurveto +5 7 7 7 9 8 rrcurveto +40 -25 rlineto +2 12 2 12 0 11 rrcurveto +closepath +-37 55 rmoveto +0 -5 rlineto +-1 -2 -1 -3 -1 -3 rrcurveto +-22 16 rlineto +-8 8 -4 7 0 8 rrcurveto +0 4 4 6 7 0 rrcurveto +10 0 16 -19 0 -17 rrcurveto +closepath +endchar } ND +/afii57456 { +0 201 hsbw +201 80 rmoveto +-70 -30 -49 -20 -26 -10 rrcurveto +-15 -14 -7 -13 0 -14 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 17 0 34 rrcurveto +closepath +endchar } ND +/afii57457 { +0 211 hsbw +605 109 hstem +34 22 vstem +196 10 vstem +209 721 rmoveto +0 21 rlineto +-2 6 -1 7 0 7 rrcurveto +-10 -3 rlineto +0 -28 -14 -37 -24 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-8 -22 -5 -14 0 -17 rrcurveto +0 -32 14 -20 27 0 rrcurveto +20 0 18 17 14 25 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 14 44 0 42 rrcurveto +closepath +endchar } ND +/afii57458 { +0 165 hsbw +605 49 hstem +717 39 hstem +34 20 vstem +135 30 vstem +165 683 rmoveto +0 38 -29 35 -34 0 rrcurveto +-39 0 -29 -46 0 -49 rrcurveto +0 -36 18 -20 35 0 rrcurveto +44 0 34 38 0 40 rrcurveto +closepath +-30 -13 rmoveto +0 -12 -12 -4 -17 0 rrcurveto +-30 0 -22 4 0 25 rrcurveto +0 16 12 18 18 0 rrcurveto +17 0 34 -29 0 -18 rrcurveto +closepath +endchar } ND +/afii57392 { +0 526 hsbw +344 363 rmoveto +-56 37 -23 21 -36 31 rrcurveto +-22 -63 -8 -26 -13 -60 rrcurveto +27 -22 19 -15 11 -7 rrcurveto +15 -12 22 -13 28 -15 rrcurveto +12 65 6 23 18 56 rrcurveto +closepath +endchar } ND +/afii57393 { +0 526 hsbw +143 20 hstem +696 20 hstem +292 35 vstem +327 347 rmoveto +0 144 -35 109 -98 116 rrcurveto +-47 -105 rlineto +111 -139 34 -110 0 -151 rrcurveto +0 -68 rlineto +15 0 rlineto +15 115 5 30 0 59 rrcurveto +closepath +endchar } ND +/afii57394 { +0 526 hsbw +143 20 hstem +521 92 hstem +703 20 hstem +89 302 vstem +391 638 rmoveto +0 29 -2 33 -2 23 rrcurveto +-15 0 rlineto +-11 -78 -16 -32 -67 0 rrcurveto +-64 0 -46 41 -46 69 rrcurveto +-33 -99 rlineto +138 -175 0 -36 63 -270 rrcurveto +17 0 rlineto +0 87 rlineto +0 149 -1 28 -53 114 rrcurveto +18 -3 12 -1 4 0 rrcurveto +68 0 36 51 0 70 rrcurveto +closepath +endchar } ND +/afii57395 { +0 526 hsbw +143 20 hstem +528 97 hstem +703 20 hstem +213 37 vstem +319 15 vstem +452 19 vstem +471 673 rmoveto +0 50 rlineto +-19 0 rlineto +-7 -54 -20 -27 -34 0 rrcurveto +-34 0 -18 21 -5 60 rrcurveto +-15 0 rlineto +-12 -59 -24 -39 -57 0 rrcurveto +-56 0 -40 34 -31 53 rrcurveto +-36 -115 rlineto +120 -185 30 -52 0 -217 rrcurveto +19 0 rlineto +16 100 2 21 0 42 rrcurveto +0 73 -12 48 -18 47 rrcurveto +-4 5 -4 7 -3 11 rrcurveto +-4 9 -5 10 -6 12 rrcurveto +48 0 33 19 22 36 rrcurveto +13 -24 28 -11 38 0 rrcurveto +64 0 31 43 0 82 rrcurveto +closepath +endchar } ND +/afii57396 { +0 526 hsbw +143 20 hstem +146 70 vstem +397 242 rmoveto +-69 4 -98 15 0 35 rrcurveto +0 13 11 19 23 26 rrcurveto +11 9 11 11 8 11 rrcurveto +10 12 10 10 11 10 rrcurveto +22 24 11 16 0 10 rrcurveto +0 8 -13 9 -24 11 rrcurveto +-38 12 -67 21 0 24 rrcurveto +0 17 34 20 36 14 rrcurveto +13 3 15 6 17 8 rrcurveto +15 93 rlineto +-90 -69 -110 -89 0 -81 rrcurveto +0 -34 84 -24 49 -18 rrcurveto +-14 -15 -13 -13 -11 -9 rrcurveto +-56 -46 -29 -42 0 -49 rrcurveto +0 -72 127 -9 84 0 rrcurveto +30 99 rlineto +closepath +endchar } ND +/afii57397 { +0 526 hsbw +247 89 hstem +527 95 hstem +93 48 vstem +401 37 vstem +438 450 rmoveto +0 73 -102 99 -76 0 rrcurveto +-97 0 -70 -202 0 -85 rrcurveto +0 -66 59 -22 73 0 rrcurveto +129 0 84 80 0 123 rrcurveto +closepath +-37 -52 rmoveto +0 -35 -57 -27 -78 0 rrcurveto +-71 0 -54 14 0 62 rrcurveto +0 45 28 70 43 0 rrcurveto +50 0 139 -70 0 -59 rrcurveto +closepath +endchar } ND +/afii57398 { +0 526 hsbw +545 112 hstem +85 21 vstem +297 27 vstem +410 268 rmoveto +-93 110 7 39 0 111 rrcurveto +0 41 7 42 11 66 rrcurveto +-15 -2 -11 -2 -8 -3 rrcurveto +-8 -3 -6 -1 -4 0 rrcurveto +-33 -6 -29 -3 -25 0 rrcurveto +-54 0 -20 2 -23 51 rrcurveto +-21 0 rlineto +0 -99 rlineto +0 -74 40 8 79 0 rrcurveto +23 0 28 4 42 10 rrcurveto +-7 -60 -3 -32 0 -6 rrcurveto +-2 -20 -1 -19 0 -19 rrcurveto +0 -111 8 -72 99 -64 rrcurveto +19 112 rlineto +closepath +endchar } ND +/afii57399 { +0 526 hsbw +143 20 hstem +570 140 hstem +271 7 vstem +459 710 rmoveto +-97 -112 -51 -143 -22 -165 rrcurveto +-5 0 rlineto +-41 166 -59 132 -103 120 rrcurveto +-18 -154 rlineto +106 -96 60 -115 42 -200 rrcurveto +7 0 rlineto +26 198 59 131 96 98 rrcurveto +0 140 rlineto +closepath +endchar } ND +/afii57400 { +0 526 hsbw +149 140 hstem +696 20 hstem +255 10 vstem +472 306 rmoveto +-132 116 -38 113 -37 181 rrcurveto +-10 0 rlineto +-28 -186 -44 -142 -108 -99 rrcurveto +0 -140 rlineto +108 132 26 91 37 201 rrcurveto +4 0 rlineto +30 -166 78 -155 96 -100 rrcurveto +18 154 rlineto +closepath +endchar } ND +/afii57401 { +0 526 hsbw +143 20 hstem +429 97 hstem +632 93 hstem +107 45 vstem +302 51 vstem +413 247 rmoveto +-65 71 13 35 -8 103 rrcurveto +0 133 14 136 -101 0 rrcurveto +-99 0 -60 -136 0 -75 rrcurveto +0 -55 45 -30 71 0 rrcurveto +21 0 16 3 46 16 rrcurveto +0 -157 -10 -95 87 -53 rrcurveto +30 104 rlineto +closepath +-111 286 rmoveto +-8 0 -12 -2 -12 -2 rrcurveto +-13 -2 -13 -1 -10 0 rrcurveto +-46 0 -36 15 0 28 rrcurveto +0 25 45 38 39 0 rrcurveto +52 0 14 -40 0 -59 rrcurveto +closepath +endchar } ND +/afii57381 { +0 526 hsbw +84 128 hstem +650 127 hstem +85 128 vstem +313 127 vstem +213 715 rmoveto +0 36 -28 26 -36 0 rrcurveto +-36 0 -28 -28 0 -34 rrcurveto +0 -35 29 -30 35 0 rrcurveto +36 0 28 29 0 36 rrcurveto +closepath +250 62 rmoveto +-56 0 rlineto +-342 -685 rlineto +53 0 rlineto +345 685 rlineto +closepath +-23 -630 rmoveto +0 36 -29 29 -36 0 rrcurveto +-35 0 -27 -29 0 -36 rrcurveto +0 -35 27 -28 35 0 rrcurveto +37 0 28 28 0 35 rrcurveto +closepath +endchar } ND +/afii57461 { +0 319 hsbw +159 71 vstem +230 200 rmoveto +0 37 -33 30 -37 0 rrcurveto +-35 0 -28 -30 0 -34 rrcurveto +0 -39 30 -21 32 -12 rrcurveto +0 -32 -25 -17 -40 -32 rrcurveto +21 -27 rlineto +77 58 38 43 0 76 rrcurveto +closepath +endchar } ND +/afii63167 { +0 526 hsbw +403 151 hstem +566 13 hstem +608 136 hstem +87 149 vstem +250 14 vstem +306 77 vstem +424 573 rmoveto +0 21 -16 12 -22 0 rrcurveto +-28 0 -28 -11 -42 -16 rrcurveto +-5 17 rlineto +8 3 8 4 10 5 rrcurveto +8 6 11 5 13 5 rrcurveto +28 14 14 16 0 18 rrcurveto +0 18 -14 16 -18 0 rrcurveto +-15 0 -16 -13 -14 -27 rrcurveto +0 -1 -2 -6 -7 -10 rrcurveto +-6 -9 -8 -15 -9 -21 rrcurveto +-13 5 rlineto +5 16 6 19 6 16 rrcurveto +5 17 4 17 0 14 rrcurveto +0 21 -11 15 -21 0 rrcurveto +-20 0 -11 -16 0 -20 rrcurveto +0 -16 4 -22 9 -25 rrcurveto +4 -11 3 -9 2 -6 rrcurveto +1 -7 2 -4 1 0 rrcurveto +-13 -4 rlineto +-9 16 -11 20 -13 27 rrcurveto +-13 27 -17 12 -15 0 rrcurveto +-19 0 -13 -16 0 -18 rrcurveto +0 -36 63 -24 39 -16 rrcurveto +-3 -6 -2 -6 -1 -5 rrcurveto +-18 5 -18 6 -15 7 rrcurveto +-17 5 -16 4 -14 0 rrcurveto +-23 0 -15 -13 0 -20 rrcurveto +0 -19 15 -12 23 0 rrcurveto +14 0 16 2 19 6 rrcurveto +5 2 7 2 8 2 rrcurveto +9 2 10 3 10 5 rrcurveto +1 -4 2 -5 3 -5 rrcurveto +-77 -36 -25 -8 0 -34 rrcurveto +0 -19 13 -14 19 0 rrcurveto +15 0 15 13 16 26 rrcurveto +10 20 11 21 11 21 rrcurveto +13 -4 rlineto +-5 -17 -6 -19 -6 -16 rrcurveto +-5 -17 -4 -17 0 -14 rrcurveto +0 -22 11 -13 20 0 rrcurveto +21 0 11 15 0 20 rrcurveto +0 14 -3 16 -5 20 rrcurveto +-4 11 -5 17 -6 22 rrcurveto +4 1 3 1 3 2 rrcurveto +34 -68 26 -33 17 0 rrcurveto +18 0 14 14 0 19 rrcurveto +0 17 -14 16 -28 16 rrcurveto +-58 29 rlineto +5 14 rlineto +36 -12 rlineto +24 -8 20 -4 18 0 rrcurveto +21 0 17 12 0 19 rrcurveto +closepath +-149 0 rmoveto +0 -11 -8 -8 -12 0 rrcurveto +-11 0 -8 8 0 11 rrcurveto +0 12 8 8 11 0 rrcurveto +12 0 8 -8 0 -12 rrcurveto +closepath +endchar } ND +/afii57459 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57543 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57534 { +0 282 hsbw +130 76 hstem +26 50 vstem +219 43 vstem +262 287 rmoveto +0 60 -54 25 -110 58 rrcurveto +-30 -82 rlineto +7 -2 rlineto +-22 -51 -27 -60 0 -45 rrcurveto +0 -42 41 -18 45 0 rrcurveto +107 0 43 50 0 107 rrcurveto +closepath +-43 -38 rmoveto +0 -18 -55 -25 -37 0 rrcurveto +-31 0 -20 18 0 34 rrcurveto +0 21 11 14 29 31 rrcurveto +41 -19 62 -35 0 -21 rrcurveto +closepath +endchar } ND +/afii57494 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62843 { +0 526 hsbw +461 87 hstem +671 49 hstem +213 42 vstem +77 599 rmoveto +100 -138 36 -140 0 -174 rrcurveto +17 0 rlineto +16 76 9 61 0 46 rrcurveto +0 69 -4 25 -27 61 rrcurveto +26 -19 17 -5 39 0 rrcurveto +80 0 50 51 19 96 rrcurveto +-11 4 rlineto +-40 -50 -33 -14 -53 0 rrcurveto +-20 0 -23 4 -33 11 rrcurveto +18 76 37 32 60 0 rrcurveto +14 0 16 -3 16 -5 rrcurveto +10 -4 7 -2 2 0 rrcurveto +4 6 rlineto +-30 35 -28 22 -42 0 rrcurveto +-59 0 -30 -45 -8 -105 rrcurveto +-47 26 -10 14 -58 106 rrcurveto +-37 -117 rlineto +closepath +endchar } ND +/afii62844 { +0 526 hsbw +174 91 hstem +74 69 vstem +411 30 vstem +210 601 rmoveto +39 -38 rlineto +-128 -148 -47 -84 0 -73 rrcurveto +0 -64 47 -35 61 0 rrcurveto +30 0 30 9 28 24 rrcurveto +18 -15 14 -3 19 0 rrcurveto +69 0 51 91 0 77 rrcurveto +0 122 -86 132 -113 112 rrcurveto +-32 -107 rlineto +closepath +78 -309 rmoveto +-35 -28 -19 -6 -28 0 rrcurveto +-40 0 -23 25 0 42 rrcurveto +0 67 67 106 51 51 rrcurveto +74 -85 76 -93 0 -62 rrcurveto +0 -26 -25 -18 -30 0 rrcurveto +-27 0 -27 12 -14 15 rrcurveto +closepath +endchar } ND +/afii62845 { +0 526 hsbw +443 88 hstem +644 73 hstem +99 66 vstem +168 20 vstem +168 147 rmoveto +20 0 rlineto +14 144 91 147 120 44 rrcurveto +22 93 rlineto +-80 -36 -35 -8 -56 0 rrcurveto +-62 0 -37 21 0 35 rrcurveto +0 32 52 25 82 0 rrcurveto +32 0 17 -4 48 -16 rrcurveto +5 5 rlineto +-50 61 -35 27 -34 0 rrcurveto +-65 0 -118 -157 0 -56 rrcurveto +0 -40 45 -21 98 0 rrcurveto +-52 -87 -22 -99 0 -110 rrcurveto +closepath +endchar } ND +/afii64240 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64241 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63954 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57382 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64242 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62881 { +0 211 hsbw +605 109 hstem +196 10 vstem +201 917 rmoveto +-91 -36 -76 -3 0 -61 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 15 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -14 0 -32 rrcurveto +32 14 27 11 26 9 rrcurveto +24 8 20 8 14 7 rrcurveto +7 7 5 4 5 4 rrcurveto +5 6 2 8 0 15 rrcurveto +closepath +8 -123 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -38 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-4 -12 -3 -9 -2 -5 rrcurveto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -20 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +10 -7 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +endchar } ND +/afii57504 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57369 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57370 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57371 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57372 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57373 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57374 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57375 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57391 { +0 638 hsbw +143 85 hstem +0 667 vstem +667 143 rmoveto +0 85 rlineto +-667 0 rlineto +0 -85 rlineto +667 0 rlineto +closepath +endchar } ND +/afii57471 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57460 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii52258 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57506 { +0 713 hsbw +143 85 hstem +63 35 vstem +709 39 vstem +748 143 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +-217 -116 rmoveto +-79 41 rlineto +-37 -70 rlineto +80 -41 rlineto +36 70 rlineto +closepath +-16 -131 rmoveto +-78 42 rlineto +-38 -71 rlineto +80 -42 rlineto +36 71 rlineto +closepath +-95 86 rmoveto +-79 42 rlineto +-38 -70 rlineto +80 -42 rlineto +37 70 rlineto +closepath +endchar } ND +/afii62958 { +0 713 hsbw +143 85 hstem +63 35 vstem +709 39 vstem +748 143 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +-217 -116 rmoveto +-79 41 rlineto +-37 -70 rlineto +80 -41 rlineto +36 70 rlineto +closepath +-16 -131 rmoveto +-78 42 rlineto +-38 -71 rlineto +80 -42 rlineto +36 71 rlineto +closepath +-95 86 rmoveto +-79 42 rlineto +-38 -70 rlineto +80 -42 rlineto +37 70 rlineto +closepath +endchar } ND +/afii62956 { +0 244 hsbw +143 85 hstem +243 36 vstem +227 27 rmoveto +-79 41 rlineto +-37 -70 rlineto +80 -41 rlineto +36 70 rlineto +closepath +-17 -131 rmoveto +-78 42 rlineto +-37 -71 rlineto +79 -42 rlineto +36 71 rlineto +closepath +-94 86 rmoveto +-79 42 rlineto +-38 -70 rlineto +80 -42 rlineto +37 70 rlineto +closepath +163 161 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +52 -57 7 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +279 0 rlineto +closepath +endchar } ND +/afii52957 { +0 244 hsbw +143 85 hstem +243 36 vstem +227 27 rmoveto +-79 41 rlineto +-37 -70 rlineto +80 -41 rlineto +36 70 rlineto +closepath +-17 -131 rmoveto +-78 42 rlineto +-37 -71 rlineto +79 -42 rlineto +36 71 rlineto +closepath +-94 86 rmoveto +-79 42 rlineto +-38 -70 rlineto +80 -42 rlineto +37 70 rlineto +closepath +163 161 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +52 -57 7 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +279 0 rlineto +closepath +endchar } ND +/afii57505 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62889 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62887 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62888 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57507 { +0 563 hsbw +-212 83 hstem +343 89 hstem +26 33 vstem +236 340 rmoveto +-171 -115 -39 -51 0 -135 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 173 216 54 202 34 rrcurveto +18 83 rlineto +-9 0 -18 -1 -15 -2 rrcurveto +-16 -2 -16 -2 -9 0 rrcurveto +-23 0 -27 2 -30 4 rrcurveto +-67 9 -44 5 -21 0 rrcurveto +-94 0 -34 -14 -31 -94 rrcurveto +55 11 43 8 41 0 rrcurveto +5 -3 rlineto +51 0 rlineto +closepath +182 -164 rmoveto +-79 41 rlineto +-37 -71 rlineto +80 -41 rlineto +36 71 rlineto +closepath +-17 -132 rmoveto +-78 42 rlineto +-37 -71 rlineto +79 -42 rlineto +36 71 rlineto +closepath +-94 86 rmoveto +-79 42 rlineto +-39 -70 rlineto +81 -41 rlineto +37 69 rlineto +closepath +endchar } ND +/afii62961 { +0 526 hsbw +-212 83 hstem +143 85 hstem +336 90 hstem +26 33 vstem +360 23 vstem +560 143 rmoveto +0 85 rlineto +-101 0 rlineto +-54 0 -22 13 0 49 rrcurveto +0 27 rlineto +18 4 16 3 11 2 rrcurveto +9 1 8 1 7 2 rrcurveto +7 2 7 1 8 0 rrcurveto +19 83 rlineto +-35 -6 -30 -2 -33 0 rrcurveto +-25 0 -34 4 -34 5 rrcurveto +-34 5 -37 4 -31 0 rrcurveto +-90 0 -41 -17 -31 -90 rrcurveto +79 17 6 0 59 0 rrcurveto +39 0 rlineto +12 -3 16 -2 14 0 rrcurveto +-193 -104 -44 -43 0 -145 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 133 129 53 172 52 rrcurveto +-1 -6 -1 -6 -2 -4 rrcurveto +0 -12 rlineto +-4 -19 -2 -16 0 -12 rrcurveto +0 -68 30 -27 79 0 rrcurveto +101 0 rlineto +closepath +-208 -22 rmoveto +-80 41 rlineto +-37 -71 rlineto +80 -41 rlineto +37 71 rlineto +closepath +-17 -131 rmoveto +-78 42 rlineto +-38 -72 rlineto +80 -42 rlineto +36 72 rlineto +closepath +-95 86 rmoveto +-79 42 rlineto +-38 -71 rlineto +81 -41 rlineto +36 70 rlineto +closepath +endchar } ND +/afii62959 { +0 530 hsbw +143 85 hstem +341 86 hstem +393 166 vstem +559 143 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +-185 -116 rmoveto +-79 41 rlineto +-37 -70 rlineto +80 -41 rlineto +36 70 rlineto +closepath +-17 -131 rmoveto +-78 42 rlineto +-37 -71 rlineto +79 -42 rlineto +36 71 rlineto +closepath +-94 86 rmoveto +-79 42 rlineto +-38 -70 rlineto +80 -42 rlineto +37 70 rlineto +closepath +endchar } ND +/afii62960 { +0 530 hsbw +143 85 hstem +341 86 hstem +393 166 vstem +559 143 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +-185 -116 rmoveto +-79 41 rlineto +-37 -70 rlineto +80 -41 rlineto +36 70 rlineto +closepath +-17 -131 rmoveto +-78 42 rlineto +-37 -71 rlineto +79 -42 rlineto +36 71 rlineto +closepath +-94 86 rmoveto +-79 42 rlineto +-38 -70 rlineto +80 -42 rlineto +37 70 rlineto +closepath +endchar } ND +/afii57508 { +0 489 hsbw +-91 59 hstem +616 20 hstem +703 20 hstem +488 35 vstem +523 143 rmoveto +0 119 rlineto +0 67 -29 52 -52 49 rrcurveto +-27 -77 rlineto +41 -48 32 -53 0 -50 rrcurveto +0 -93 -163 -141 -116 0 rrcurveto +-19 0 -22 3 -22 4 rrcurveto +-22 5 -23 5 -22 3 rrcurveto +-9 -20 rlineto +12 -4 12 -4 11 -5 rrcurveto +11 -5 11 -5 13 -3 rrcurveto +55 -22 44 -11 45 0 rrcurveto +84 0 155 130 0 104 rrcurveto +closepath +-109 538 rmoveto +-80 42 rlineto +-36 -71 rlineto +78 -42 rlineto +38 71 rlineto +closepath +96 -87 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -42 rlineto +37 71 rlineto +closepath +endchar } ND +/afii62962 { +0 489 hsbw +-91 59 hstem +616 20 hstem +703 20 hstem +488 35 vstem +523 143 rmoveto +0 119 rlineto +0 67 -29 52 -52 49 rrcurveto +-27 -77 rlineto +41 -48 32 -53 0 -50 rrcurveto +0 -93 -163 -141 -116 0 rrcurveto +-19 0 -22 3 -22 4 rrcurveto +-22 5 -23 5 -22 3 rrcurveto +-9 -20 rlineto +12 -4 12 -4 11 -5 rrcurveto +11 -5 11 -5 13 -3 rrcurveto +55 -22 44 -11 45 0 rrcurveto +84 0 155 130 0 104 rrcurveto +closepath +-109 538 rmoveto +-80 42 rlineto +-36 -71 rlineto +78 -42 rlineto +38 71 rlineto +closepath +96 -87 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -42 rlineto +37 71 rlineto +closepath +endchar } ND +/afii57567 { +0 812 hsbw +143 85 hstem +649 85 hstem +44 39 vstem +489 61 vstem +790 56 vstem +790 228 rmoveto +-527 0 rlineto +-98 0 -82 12 0 79 rrcurveto +0 24 5 22 22 52 rrcurveto +-16 9 rlineto +-37 -74 -13 -35 0 -45 rrcurveto +0 -116 87 -13 132 0 rrcurveto +583 0 rlineto +0 85 rlineto +-49 95 -78 85 -98 74 rrcurveto +-14 9 -14 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +98 -60 52 -44 47 -69 rrcurveto +closepath +endchar } ND +/afii62964 { +0 933 hsbw +143 85 hstem +649 85 hstem +44 39 vstem +489 61 vstem +664 31 vstem +263 143 rmoveto +205 0 rlineto +137 0 90 60 0 128 rrcurveto +16 -16 13 -13 8 -10 rrcurveto +2 -2 4 -3 5 -7 rrcurveto +34 -48 69 -89 61 0 rrcurveto +60 0 rlineto +0 85 rlineto +-64 0 rlineto +-44 0 -56 70 -28 38 rrcurveto +-52 71 -42 30 -60 45 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 25 75 20 72 24 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +48 -28 23 -16 0 -42 rrcurveto +0 -68 -104 -19 -89 0 rrcurveto +-208 0 rlineto +-98 0 -82 12 0 79 rrcurveto +0 24 5 22 22 52 rrcurveto +-16 9 rlineto +-37 -74 -13 -35 0 -45 rrcurveto +0 -116 87 -13 132 0 rrcurveto +closepath +endchar } ND +/afii52305 { +0 394 hsbw +143 85 hstem +649 85 hstem +71 61 vstem +372 56 vstem +428 143 rmoveto +0 85 rlineto +-49 95 -78 87 -98 72 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +100 -60 50 -44 47 -69 rrcurveto +-372 0 rlineto +0 -85 rlineto +428 0 rlineto +closepath +endchar } ND +/afii52306 { +0 515 hsbw +143 85 hstem +649 85 hstem +71 61 vstem +246 31 vstem +485 228 rmoveto +-43 0 -57 70 -28 38 rrcurveto +-52 71 -42 30 -60 45 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +48 -28 23 -16 0 -42 rrcurveto +0 -68 -104 -19 -89 0 rrcurveto +-53 0 rlineto +0 -85 rlineto +50 0 rlineto +137 0 90 60 0 128 rrcurveto +16 -16 13 -13 8 -10 rrcurveto +2 -2 4 -3 5 -7 rrcurveto +34 -48 69 -89 61 0 rrcurveto +60 0 rlineto +0 85 rlineto +-64 0 rlineto +closepath +endchar } ND +/afii57509 { +0 812 hsbw +143 85 hstem +634 52 hstem +785 82 hstem +44 39 vstem +489 61 vstem +790 56 vstem +790 228 rmoveto +-527 0 rlineto +-98 0 -82 12 0 79 rrcurveto +0 24 5 22 22 52 rrcurveto +-16 9 rlineto +-37 -74 -13 -35 0 -45 rrcurveto +0 -116 87 -13 132 0 rrcurveto +583 0 rlineto +0 85 rlineto +-49 95 -78 85 -98 74 rrcurveto +-14 9 -14 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +98 -60 52 -44 47 -69 rrcurveto +closepath +9 639 rmoveto +-110 -46 -175 -96 -35 -39 rrcurveto +0 -52 rlineto +73 49 129 59 118 43 rrcurveto +0 82 rlineto +closepath +endchar } ND +/afii62967 { +0 933 hsbw +143 85 hstem +634 52 hstem +785 82 hstem +44 39 vstem +489 61 vstem +664 31 vstem +263 143 rmoveto +205 0 rlineto +137 0 90 60 0 128 rrcurveto +16 -16 13 -13 8 -10 rrcurveto +2 -2 4 -3 5 -7 rrcurveto +34 -48 69 -89 61 0 rrcurveto +60 0 rlineto +0 85 rlineto +-64 0 rlineto +-44 0 -56 70 -28 38 rrcurveto +-52 71 -42 30 -60 45 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 25 75 20 72 24 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +48 -28 23 -16 0 -42 rrcurveto +0 -68 -104 -19 -89 0 rrcurveto +-208 0 rlineto +-98 0 -82 12 0 79 rrcurveto +0 24 5 22 22 52 rrcurveto +-16 9 rlineto +-37 -74 -13 -35 0 -45 rrcurveto +0 -116 87 -13 132 0 rrcurveto +closepath +536 724 rmoveto +-110 -46 -175 -96 -35 -39 rrcurveto +0 -52 rlineto +73 49 129 59 118 43 rrcurveto +0 82 rlineto +closepath +endchar } ND +/afii62965 { +0 394 hsbw +143 85 hstem +643 51 hstem +793 83 hstem +71 61 vstem +372 56 vstem +428 143 rmoveto +0 85 rlineto +-49 95 -78 87 -98 72 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +100 -60 50 -44 47 -69 rrcurveto +-372 0 rlineto +0 -85 rlineto +428 0 rlineto +closepath +-47 733 rmoveto +-110 -46 -175 -93 -35 -43 rrcurveto +0 -51 rlineto +74 49 128 59 118 42 rrcurveto +0 83 rlineto +closepath +endchar } ND +/afii62966 { +0 515 hsbw +143 85 hstem +643 51 hstem +793 83 hstem +71 61 vstem +246 31 vstem +485 228 rmoveto +-43 0 -57 70 -28 38 rrcurveto +-52 71 -42 30 -60 45 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +48 -28 23 -16 0 -42 rrcurveto +0 -68 -104 -19 -89 0 rrcurveto +-53 0 rlineto +0 -85 rlineto +50 0 rlineto +137 0 90 60 0 128 rrcurveto +16 -16 13 -13 8 -10 rrcurveto +2 -2 4 -3 5 -7 rrcurveto +34 -48 69 -89 61 0 rrcurveto +60 0 rlineto +0 85 rlineto +-64 0 rlineto +closepath +-104 648 rmoveto +-110 -46 -175 -93 -35 -43 rrcurveto +0 -51 rlineto +74 49 128 59 118 42 rrcurveto +0 83 rlineto +closepath +endchar } ND +/afii57555 { +0 638 hsbw +-43 83 hstem +167 76 hstem +383 79 hstem +24 40 vstem +339 39 vstem +532 48 vstem +606 391 rmoveto +0 42 -27 29 -42 0 rrcurveto +-99 0 -99 -165 0 -75 rrcurveto +0 -32 25 -23 28 0 rrcurveto +114 0 rlineto +18 0 8 -2 0 -13 rrcurveto +0 -31 -214 -81 -95 0 rrcurveto +-103 0 -56 40 0 79 rrcurveto +0 49 23 64 40 74 rrcurveto +-20 8 rlineto +-82 -151 -1 -20 0 -82 rrcurveto +0 -105 73 -39 110 0 rrcurveto +203 0 170 64 0 181 rrcurveto +0 20 -8 12 -16 3 rrcurveto +-16 2 -14 2 -10 2 rrcurveto +-91 0 rlineto +-35 0 -12 6 0 12 rrcurveto +0 39 82 83 50 0 rrcurveto +33 0 33 -19 23 -29 rrcurveto +0 6 1 8 3 9 rrcurveto +2 10 1 12 0 11 rrcurveto +closepath +endchar } ND +/afii52364 { +0 588 hsbw +-110 81 hstem +39 68 hstem +143 85 hstem +52 45 vstem +345 41 vstem +512 49 vstem +623 143 rmoveto +0 85 rlineto +-86 0 rlineto +-99 0 -93 -53 0 -104 rrcurveto +0 -22 15 -10 42 0 rrcurveto +12 0 48 -3 18 -2 rrcurveto +22 0 10 -6 0 -10 rrcurveto +0 -41 -113 -6 -76 0 rrcurveto +-120 0 -106 26 0 95 rrcurveto +0 22 9 30 19 36 rrcurveto +7 9 6 12 5 10 rrcurveto +6 12 6 10 7 10 rrcurveto +-20 9 rlineto +-67 -105 -23 -40 0 -73 rrcurveto +0 -106 110 -38 123 0 rrcurveto +167 0 109 28 0 150 rrcurveto +0 24 -17 6 -29 3 rrcurveto +-28 2 -14 2 -10 2 rrcurveto +-31 0 rlineto +-31 0 -15 5 0 12 rrcurveto +0 14 51 5 100 0 rrcurveto +86 0 rlineto +closepath +endchar } ND +/afii63753 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63754 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63759 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63763 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63795 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62891 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63808 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62938 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63810 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62942 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62947 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63813 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63823 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63824 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63833 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63844 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62882 { +0 226 hsbw +605 109 hstem +834 43 hstem +902 31 hstem +74 26 vstem +128 31 vstem +196 10 vstem +224 885 rmoveto +2 38 -13 10 -20 0 rrcurveto +-30 0 -35 -40 0 -32 rrcurveto +0 -19 11 -9 18 -19 rrcurveto +-21 -15 -22 -11 -22 -6 rrcurveto +2 12 3 8 3 4 rrcurveto +0 18 rlineto +0 26 -14 27 -22 0 rrcurveto +-32 0 -5 -34 -4 -42 rrcurveto +13 21 rlineto +6 8 6 4 7 0 rrcurveto +12 0 7 -16 0 -13 rrcurveto +0 -10 -4 -11 -6 -12 rrcurveto +-17 -29 rlineto +50 0 44 20 34 39 rrcurveto +42 -33 rlineto +2 17 1 14 0 12 rrcurveto +0 8 -6 6 -9 8 rrcurveto +13 22 3 14 3 15 rrcurveto +closepath +-15 -164 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-8 -22 -5 -15 0 -16 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +-18 151 rmoveto +0 -7 -2 -6 -4 -5 rrcurveto +-19 14 -7 8 0 12 rrcurveto +0 8 3 6 12 0 rrcurveto +8 0 9 -14 0 -16 rrcurveto +closepath +endchar } ND +/afii62883 { +0 211 hsbw +748 53 hstem +885 20 hstem +196 13 vstem +209 863 rmoveto +0 20 rlineto +0 7 -2 7 -1 8 rrcurveto +-10 -4 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -45 -8 -31 -30 0 rrcurveto +-12 0 -5 12 0 15 rrcurveto +0 27 rlineto +-9 -3 rlineto +-9 -27 rlineto +-3 -10 -1 -8 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 20 16 12 25 rrcurveto +10 -8 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +-5 -96 rmoveto +-70 -29 -49 -20 -27 -10 rrcurveto +-14 -14 -7 -14 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 15 rrcurveto +closepath +0 -60 rmoveto +-70 -30 -49 -20 -27 -11 rrcurveto +-14 -14 -7 -13 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/afii62884 { +0 211 hsbw +605 109 hstem +196 10 vstem +204 840 rmoveto +-70 -30 -49 -20 -26 -10 rrcurveto +-15 -14 -7 -13 0 -14 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 19 0 32 rrcurveto +closepath +5 -119 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-4 -12 -3 -9 -2 -5 rrcurveto +-3 -10 -1 -9 0 -8 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +10 -7 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +endchar } ND +/afii62885 { +0 211 hsbw +606 109 hstem +878 19 hstem +110 30 vstem +196 10 vstem +211 774 rmoveto +0 27 3 8 -26 12 rrcurveto +2 7 2 5 3 2 rrcurveto +2 3 2 3 0 1 rrcurveto +3 7 2 7 0 7 rrcurveto +0 18 -19 16 -18 0 rrcurveto +-30 0 -27 -34 0 -28 rrcurveto +0 -16 10 -11 15 -14 rrcurveto +-19 -11 -18 -9 -15 -7 rrcurveto +-4 -3 -8 -3 -9 -3 rrcurveto +-9 -4 -10 -5 -12 -6 rrcurveto +10 -6 8 -2 10 0 rrcurveto +23 0 25 9 23 20 rrcurveto +6 7 8 6 10 7 rrcurveto +11 -4 7 -2 3 0 rrcurveto +12 -3 12 -1 12 0 rrcurveto +closepath +-2 -52 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -38 -25 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-4 -12 -3 -9 -2 -5 rrcurveto +-3 -10 -1 -9 0 -8 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +10 -7 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +-37 126 rmoveto +0 -2 -1 -3 -1 -2 rrcurveto +-2 -2 -1 -3 0 -3 rrcurveto +-23 12 -4 7 0 15 rrcurveto +0 5 2 6 4 0 rrcurveto +14 0 12 -17 0 -13 rrcurveto +closepath +endchar } ND +/afii62886 { +0 211 hsbw +696 54 hstem +38 18 vstem +211 811 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -27 -13 -39 -25 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -45 -8 -31 -30 0 rrcurveto +-12 0 -5 12 0 15 rrcurveto +0 28 rlineto +-9 -5 rlineto +-1 -7 -2 -5 -2 -3 rrcurveto +-3 -3 -1 -4 0 -4 rrcurveto +-3 -10 -1 -8 0 -8 rrcurveto +0 -32 14 -20 27 0 rrcurveto +19 0 19 17 14 25 rrcurveto +12 -10 9 -2 12 0 rrcurveto +35 0 16 41 0 44 rrcurveto +closepath +-7 -104 rmoveto +-34 -16 -29 -13 -26 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/afii63846 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63849 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/uni202A { +0 0 hsbw +568 35 hstem +-18 36 vstem +18 568 rmoveto +192 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -737 rlineto +36 0 rlineto +0 702 rlineto +closepath +endchar } ND +/uni202B { +0 0 hsbw +568 35 hstem +-18 36 vstem +-210 568 rmoveto +192 0 rlineto +0 -702 rlineto +36 0 rlineto +0 737 rlineto +-228 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uni202D { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 vstem +-18 36 vstem +114 480 rmoveto +0 35 rlineto +-194 0 rlineto +0 140 rlineto +194 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni202E { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +80 34 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -35 rlineto +194 0 rlineto +0 -140 rlineto +-194 0 rlineto +closepath +endchar } ND +/uni202C { +0 0 hsbw +480 210 hstem +-18 36 vstem +114 480 rmoveto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni206E { +0 0 hsbw +506 20 hstem +644 46 hstem +-114 49 -18 36 65 49 vstem3 +18 -134 rmoveto +0 630 rlineto +96 89 rlineto +-114 105 rlineto +-114 -105 rlineto +96 -89 rlineto +0 -630 rlineto +36 0 rlineto +closepath +47 719 rmoveto +-65 -59 rlineto +-65 59 rlineto +65 59 rlineto +65 -59 rlineto +closepath +endchar } ND +/_852 { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 175 rlineto +-132 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206A { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 140 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206B { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 -18 36 80 34 vstem3 +-80 515 rmoveto +0 140 rlineto +160 0 rlineto +0 -140 rlineto +-160 0 rlineto +closepath +-34 -35 rmoveto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +closepath +endchar } ND +/_855 { +0 0 hsbw +-134 20 hstem +670 20 hstem +-18 36 vstem +18 -134 rmoveto +0 646 rlineto +96 178 rlineto +-228 0 rlineto +96 -178 rlineto +0 -646 rlineto +36 0 rlineto +closepath +endchar } ND +/uni206D { +0 0 hsbw +-134 20 hstem +670 20 hstem +-18 36 vstem +18 480 rmoveto +96 0 rlineto +-114 210 rlineto +-114 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +closepath +endchar } ND +/uniF00A { +0 0 hsbw +-208 473 hstem +421 473 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +0 -629 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +endchar } ND +/uniF00B { +0 0 hsbw +-208 35 hstem +859 35 hstem +-18 36 vstem +-114 -208 rmoveto +228 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1032 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -1032 rlineto +-96 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uniF00C { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +109 804 rmoveto +-127 90 rlineto +0 -1102 rlineto +36 0 rlineto +0 942 rlineto +91 70 rlineto +closepath +endchar } ND +/uniF00D { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-127 -90 rlineto +91 -70 rlineto +0 -942 rlineto +36 0 rlineto +0 1102 rlineto +closepath +endchar } ND +/uniF00E { +0 0 hsbw +-208 35 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -1102 rlineto +132 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1067 rlineto +closepath +endchar } ND +/currency { +0 556 hsbw +183 343 hstem +69 80 vstem +402 81 vstem +104 469 rmoveto +-24 -36 -11 -38 0 -41 rrcurveto +0 -41 11 -38 24 -36 rrcurveto +-68 -66 rlineto +56 -58 rlineto +68 68 rlineto +34 -24 39 -12 43 0 rrcurveto +42 0 39 12 35 24 rrcurveto +67 -68 rlineto +57 58 rlineto +-68 66 rlineto +23 36 12 38 0 41 rrcurveto +0 41 -12 38 -23 36 rrcurveto +68 67 rlineto +-57 58 rlineto +-67 -68 rlineto +-35 23 -39 12 -42 0 rrcurveto +-43 0 -39 -12 -34 -23 rrcurveto +-68 68 rlineto +-56 -58 rlineto +68 -67 rlineto +closepath +45 -115 rmoveto +0 70 56 57 70 0 rrcurveto +70 0 57 -57 0 -70 rrcurveto +0 -70 -57 -56 -70 0 rrcurveto +-70 0 -56 56 0 70 rrcurveto +closepath +endchar } ND +/uniFFFC { +0 1000 hsbw +0 49 hstem +187 47 hstem +342 48 hstem +484 48 hstem +670 49 hstem +0 49 vstem +109 57 vstem +360 57 vstem +444 56 vstem +624 56 vstem +813 57 vstem +951 49 vstem +1000 562 rmoveto +0 157 rlineto +-158 0 rlineto +0 -49 rlineto +109 0 rlineto +0 -108 rlineto +49 0 rlineto +closepath +-281 108 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +281 -389 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +-130 17 rmoveto +0 234 rlineto +-57 0 rlineto +0 -236 rlineto +0 -45 -16 -22 -30 0 rrcurveto +-13 0 -11 4 -8 8 rrcurveto +-35 -38 rlineto +16 -15 23 -7 28 0 rrcurveto +68 0 35 39 0 78 rrcurveto +closepath +-432 372 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +562 -670 rmoveto +0 158 rlineto +-49 0 rlineto +0 -109 rlineto +-109 0 rlineto +0 -49 rlineto +158 0 rlineto +closepath +-305 289 rmoveto +0 39 -20 27 -38 16 rrcurveto +28 17 15 23 0 30 rrcurveto +0 60 -41 31 -80 0 rrcurveto +-115 0 rlineto +0 -345 rlineto +117 0 rlineto +89 0 45 34 0 68 rrcurveto +closepath +-537 381 rmoveto +0 49 rlineto +-158 0 rlineto +0 -157 rlineto +49 0 rlineto +0 108 rlineto +109 0 rlineto +closepath +561 -670 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-302 359 rmoveto +0 113 -55 66 -100 0 rrcurveto +-99 0 -54 -66 0 -113 rrcurveto +0 -114 54 -64 99 0 rrcurveto +100 0 55 64 0 114 rrcurveto +closepath +-368 -78 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +389 -281 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-280 0 rmoveto +0 49 rlineto +-109 0 rlineto +0 109 rlineto +-49 0 rlineto +0 -158 rlineto +158 0 rlineto +closepath +466 436 rmoveto +0 -31 -25 -15 -49 0 rrcurveto +-50 0 rlineto +0 94 rlineto +44 0 rlineto +53 0 27 -16 0 -32 rrcurveto +closepath +14 -147 rmoveto +0 -37 -26 -18 -51 0 rrcurveto +-61 0 rlineto +0 108 rlineto +55 0 rlineto +55 0 28 -18 0 -35 rrcurveto +closepath +-278 70 rmoveto +0 -87 -33 -43 -65 0 rrcurveto +-64 0 -32 43 0 87 rrcurveto +0 87 32 44 64 0 rrcurveto +65 0 33 -44 0 -87 rrcurveto +closepath +endchar } ND +/afii63904 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63905 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63906 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63908 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63910 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63912 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62927 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63941 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62939 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63943 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62943 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62946 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63946 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62951 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63948 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62953 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63950 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63951 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63952 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63953 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63956 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63958 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63959 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63960 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63961 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64046 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64058 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64059 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64060 { +0 319 hsbw +-209 20 hstem +62 102 vstem +273 -188 rmoveto +-100 211 -9 85 0 186 rrcurveto +0 158 40 159 69 154 rrcurveto +-22 20 rlineto +-144 -174 -45 -133 0 -187 rrcurveto +0 -194 42 -126 148 -180 rrcurveto +21 21 rlineto +closepath +endchar } ND +/afii64061 { +0 319 hsbw +-209 20 hstem +155 102 vstem +45 -188 rmoveto +22 -21 rlineto +148 179 42 128 0 193 rrcurveto +0 186 -45 139 -144 169 rrcurveto +-23 -20 rlineto +69 -155 41 -157 0 -159 rrcurveto +0 -187 -10 -87 -100 -208 rrcurveto +closepath +endchar } ND +/afii62945 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64184 { +0 616 hsbw +143 71 hstem +504 20 hstem +525 50 hstem +619 20 hstem +10 92 vstem +219 384 vstem +374 665 rmoveto +-4 23 1 13 -15 24 rrcurveto +-4 5 -4 8 -4 10 rrcurveto +-7 13 -9 5 -12 0 rrcurveto +-12 0 -8 -7 -3 -14 rrcurveto +44 -38 14 -14 12 -32 rrcurveto +11 4 rlineto +closepath +87 -23 rmoveto +0 20 rlineto +-14 -3 rlineto +-6 -25 -9 -27 -17 0 rrcurveto +-24 0 -4 5 -6 27 rrcurveto +-11 -3 rlineto +-4 -26 -19 -35 -14 0 rrcurveto +-20 0 -9 9 0 32 rrcurveto +-15 -6 rlineto +-2 -8 -3 -17 0 -12 rrcurveto +0 -30 14 -18 27 0 rrcurveto +18 0 24 21 8 20 rrcurveto +14 -8 11 -3 16 0 rrcurveto +26 0 19 40 0 47 rrcurveto +closepath +142 -411 rmoveto +0 16 -5 31 -8 47 rrcurveto +-4 13 -4 16 -3 22 rrcurveto +-4 20 -5 23 -6 27 rrcurveto +-10 44 -5 26 -1 8 rrcurveto +-19 -23 -16 -28 0 -21 rrcurveto +0 -6 1 -10 3 -12 rrcurveto +0 -9 rlineto +2 -3 1 -6 1 -7 rrcurveto +28 -133 rlineto +-4 -26 -12 -15 -17 0 rrcurveto +-44 0 -21 29 -10 47 rrcurveto +-18 84 rlineto +-15 74 -6 31 -6 34 rrcurveto +-19 -23 -17 -26 0 -23 rrcurveto +0 -6 1 -10 3 -12 rrcurveto +0 -6 2 -9 3 -10 rrcurveto +28 -133 rlineto +-26 -40 -10 -2 -30 0 rrcurveto +-85 0 9 91 -11 71 rrcurveto +-5 26 -5 27 -4 27 rrcurveto +-19 -23 -17 -26 0 -23 rrcurveto +0 -10 5 -21 3 -9 rrcurveto +-107 -50 -85 -78 0 -54 rrcurveto +0 -18 47 -11 72 0 rrcurveto +34 0 40 28 26 38 rrcurveto +14 -39 46 -27 43 0 rrcurveto +43 0 35 19 23 41 rrcurveto +36 -49 45 -11 67 0 rrcurveto +6 12 rlineto +9 20 7 29 0 27 rrcurveto +closepath +-384 13 rmoveto +-16 -19 -21 -11 -18 0 rrcurveto +-32 0 -16 3 -14 6 rrcurveto +23 38 32 19 53 18 rrcurveto +9 -54 rlineto +closepath +endchar } ND +/afii52399 { +0 413 hsbw +322 78 hstem +59 67 vstem +363 262 rmoveto +-47 -14 -46 -17 -45 -22 rrcurveto +-52 17 -47 19 0 34 rrcurveto +0 21 43 22 32 0 rrcurveto +12 0 17 -7 20 -12 rrcurveto +2 -2 7 -5 12 -8 rrcurveto +25 64 rlineto +-36 40 -11 8 -38 0 rrcurveto +-73 0 -79 -138 0 -42 rrcurveto +0 -14 8 -12 17 -10 rrcurveto +57 -33 rlineto +-20 -20 -12 -24 -7 -27 rrcurveto +15 -8 rlineto +60 56 66 32 97 22 rrcurveto +23 80 rlineto +closepath +endchar } ND +/afii52400 { +0 207 hsbw +130 20 hstem +772 31 hstem +114 51 vstem +206 808 rmoveto +-7 6 rlineto +-17 -8 -17 -3 -17 0 rrcurveto +-21 0 -38 15 -19 5 rrcurveto +-9 3 -5 1 -2 0 rrcurveto +-22 0 -8 -6 -17 -26 rrcurveto +5 -6 rlineto +10 4 7 2 8 0 rrcurveto +1 0 5 -1 8 -3 rrcurveto +9 -3 12 -5 16 -4 rrcurveto +15 -5 15 -2 17 0 rrcurveto +26 0 24 13 21 23 rrcurveto +closepath +-41 -540 rmoveto +0 69 -15 144 -13 107 rrcurveto +-8 58 -7 56 -4 38 rrcurveto +-16 -30 -17 -35 -13 -28 rrcurveto +5 -42 5 -41 5 -40 rrcurveto +14 -132 13 -132 0 -68 rrcurveto +0 -8 -2 -31 -2 -18 rrcurveto +9 -5 rlineto +33 58 13 32 0 48 rrcurveto +closepath +endchar } ND +/afii62753 { +0 229 hsbw +143 85 hstem +772 31 hstem +264 143 rmoveto +0 85 rlineto +-69 0 rlineto +-45 0 -2 56 -8 76 rrcurveto +-6 200 2 76 -32 104 rrcurveto +-61 -94 rlineto +47 -44 2 -53 3 -82 rrcurveto +0 -20 2 -20 2 -18 rrcurveto +2 -18 1 -18 0 -19 rrcurveto +6 -121 -2 -90 89 0 rrcurveto +69 0 rlineto +closepath +-48 665 rmoveto +-7 6 rlineto +-17 -8 -17 -3 -17 0 rrcurveto +-21 0 -42 13 -16 7 rrcurveto +-9 3 -5 1 -1 0 rrcurveto +-24 0 -6 -6 -17 -26 rrcurveto +5 -6 rlineto +9 4 8 2 8 0 rrcurveto +1 0 5 -1 8 -3 rrcurveto +9 -3 12 -5 16 -4 rrcurveto +15 -5 15 -2 17 0 rrcurveto +26 0 24 13 21 23 rrcurveto +closepath +endchar } ND +/afii57411 { +0 207 hsbw +130 20 hstem +840 40 hstem +58 25 vstem +114 51 vstem +179 800 rmoveto +-20 -8 -1 0 -14 0 rrcurveto +-22 0 -39 23 0 10 rrcurveto +0 8 17 7 14 0 rrcurveto +12 0 11 -5 10 -9 rrcurveto +2 7 3 5 3 4 rrcurveto +2 5 1 4 0 5 rrcurveto +0 14 -11 10 -13 0 rrcurveto +-27 0 -49 -51 0 -22 rrcurveto +0 -16 16 -10 17 -9 rrcurveto +-33 -12 -16 -13 0 -14 rrcurveto +91 31 rlineto +23 6 23 13 0 17 rrcurveto +closepath +-14 -532 rmoveto +0 69 -15 144 -13 107 rrcurveto +-8 58 -7 56 -4 38 rrcurveto +-16 -30 -17 -35 -13 -28 rrcurveto +5 -42 5 -41 5 -40 rrcurveto +14 -132 13 -132 0 -68 rrcurveto +0 -8 -2 -31 -2 -18 rrcurveto +9 -5 rlineto +33 58 13 32 0 48 rrcurveto +closepath +endchar } ND +/afii62754 { +0 229 hsbw +143 85 hstem +840 40 hstem +58 25 vstem +179 800 rmoveto +-20 -8 -1 0 -14 0 rrcurveto +-22 0 -39 23 0 10 rrcurveto +0 8 17 7 14 0 rrcurveto +12 0 11 -5 10 -9 rrcurveto +2 7 3 5 3 4 rrcurveto +2 5 1 4 0 5 rrcurveto +0 14 -11 10 -13 0 rrcurveto +-27 0 -49 -51 0 -22 rrcurveto +0 -16 16 -10 17 -9 rrcurveto +-33 -12 -16 -13 0 -14 rrcurveto +91 31 rlineto +23 6 23 13 0 17 rrcurveto +closepath +85 -657 rmoveto +0 85 rlineto +-69 0 rlineto +-45 0 -2 56 -8 76 rrcurveto +-6 200 2 76 -32 104 rrcurveto +-61 -94 rlineto +47 -44 2 -53 3 -82 rrcurveto +0 -20 2 -20 2 -18 rrcurveto +2 -18 1 -18 0 -19 rrcurveto +6 -121 -2 -90 89 0 rrcurveto +69 0 rlineto +closepath +endchar } ND +/afii57412 { +0 432 hsbw +-77 45 hstem +142 84 hstem +306 79 hstem +515 40 hstem +228 25 vstem +298 46 vstem +434 32 vstem +466 172 rmoveto +0 56 rlineto +0 81 -11 76 -64 0 rrcurveto +-58 0 -35 -79 0 -64 rrcurveto +0 -79 54 -21 82 0 rrcurveto +-87 -118 -60 -56 -109 0 rrcurveto +-16 0 -19 3 -19 4 rrcurveto +-18 5 -20 5 -19 3 rrcurveto +-8 -17 rlineto +9 -4 11 -4 11 -3 rrcurveto +11 -3 10 -4 11 -4 rrcurveto +49 -18 39 -8 43 0 rrcurveto +111 0 102 138 0 111 rrcurveto +closepath +-30 54 rmoveto +-66 0 -26 16 0 32 rrcurveto +0 18 15 14 18 0 rrcurveto +34 0 14 -34 11 -46 rrcurveto +closepath +-87 249 rmoveto +-12 -2 -5 -3 -3 -2 rrcurveto +-15 0 rlineto +-22 0 -39 22 0 10 rrcurveto +0 8 17 7 15 0 rrcurveto +11 0 11 -5 10 -9 rrcurveto +8 12 4 8 0 10 rrcurveto +0 14 -12 10 -12 0 rrcurveto +-28 0 -49 -51 0 -22 rrcurveto +0 -16 16 -9 17 -9 rrcurveto +-33 -12 -16 -13 0 -15 rrcurveto +91 31 rlineto +24 8 22 11 0 17 rrcurveto +closepath +endchar } ND +/afii62755 { +0 432 hsbw +-77 45 hstem +142 84 hstem +306 79 hstem +515 40 hstem +228 25 vstem +298 46 vstem +434 32 vstem +466 172 rmoveto +0 56 rlineto +0 81 -11 76 -64 0 rrcurveto +-58 0 -35 -79 0 -64 rrcurveto +0 -79 54 -21 82 0 rrcurveto +-87 -118 -60 -56 -109 0 rrcurveto +-16 0 -19 3 -19 4 rrcurveto +-18 5 -20 5 -19 3 rrcurveto +-8 -17 rlineto +9 -4 11 -4 11 -3 rrcurveto +11 -3 10 -4 11 -4 rrcurveto +49 -18 39 -8 43 0 rrcurveto +111 0 102 138 0 111 rrcurveto +closepath +-30 54 rmoveto +-66 0 -26 16 0 32 rrcurveto +0 18 15 14 18 0 rrcurveto +34 0 14 -34 11 -46 rrcurveto +closepath +-87 249 rmoveto +-12 -2 -5 -3 -3 -2 rrcurveto +-15 0 rlineto +-22 0 -39 22 0 10 rrcurveto +0 8 17 7 15 0 rrcurveto +11 0 11 -5 10 -9 rrcurveto +8 12 4 8 0 10 rrcurveto +0 14 -12 10 -12 0 rrcurveto +-28 0 -49 -51 0 -22 rrcurveto +0 -16 16 -9 17 -9 rrcurveto +-33 -12 -16 -13 0 -15 rrcurveto +91 31 rlineto +24 8 22 11 0 17 rrcurveto +closepath +endchar } ND +/afii57413 { +0 207 hsbw +0 11 hstem +13 40 hstem +130 20 hstem +38 25 vstem +114 51 vstem +159 -27 rmoveto +-12 -2 -5 -3 -3 -2 rrcurveto +-15 0 rlineto +-22 0 -39 23 0 10 rrcurveto +0 6 16 8 15 0 rrcurveto +12 0 11 -5 10 -8 rrcurveto +6 10 5 9 0 10 rrcurveto +0 14 -11 10 -13 0 rrcurveto +-28 0 -48 -49 0 -24 rrcurveto +0 -13 16 -10 17 -11 rrcurveto +-33 -11 -16 -13 0 -16 rrcurveto +91 31 rlineto +6 4 5 3 6 1 rrcurveto +16 5 13 12 0 11 rrcurveto +closepath +6 295 rmoveto +0 69 -15 144 -13 107 rrcurveto +-8 58 -7 56 -4 38 rrcurveto +-16 -30 -17 -35 -13 -28 rrcurveto +5 -42 5 -41 5 -40 rrcurveto +14 -132 13 -132 0 -68 rrcurveto +0 -8 -2 -31 -2 -18 rrcurveto +9 -5 rlineto +33 58 13 32 0 48 rrcurveto +closepath +endchar } ND +/afii62756 { +0 229 hsbw +0 11 hstem +13 40 hstem +143 85 hstem +62 25 vstem +163 20 vstem +264 143 rmoveto +0 85 rlineto +-69 0 rlineto +-45 0 -2 56 -8 76 rrcurveto +-6 200 2 76 -32 104 rrcurveto +-61 -94 rlineto +47 -44 2 -53 3 -82 rrcurveto +0 -20 2 -20 2 -18 rrcurveto +2 -18 1 -18 0 -19 rrcurveto +6 -121 -2 -90 89 0 rrcurveto +69 0 rlineto +closepath +-81 -170 rmoveto +-12 -2 -5 -3 -3 -2 rrcurveto +-15 0 rlineto +-22 0 -39 23 0 10 rrcurveto +0 6 17 8 15 0 rrcurveto +11 0 11 -5 10 -8 rrcurveto +8 10 4 9 0 10 rrcurveto +0 14 -12 10 -12 0 rrcurveto +-28 0 -49 -49 0 -24 rrcurveto +0 -13 16 -10 17 -11 rrcurveto +-33 -11 -16 -13 0 -16 rrcurveto +91 31 rlineto +6 4 6 3 6 1 rrcurveto +14 5 14 12 0 11 rrcurveto +closepath +endchar } ND +/afii57414 { +0 638 hsbw +-43 83 hstem +167 76 hstem +383 79 hstem +515 40 hstem +56 25 vstem +157 20 vstem +339 39 vstem +532 48 vstem +606 391 rmoveto +0 42 -27 29 -42 0 rrcurveto +-99 0 -99 -165 0 -75 rrcurveto +0 -32 25 -23 28 0 rrcurveto +114 0 rlineto +18 0 8 -2 0 -13 rrcurveto +0 -31 -214 -81 -95 0 rrcurveto +-103 0 -56 40 0 79 rrcurveto +0 49 23 64 40 74 rrcurveto +-20 8 rlineto +-82 -151 -1 -20 0 -82 rrcurveto +0 -105 73 -39 110 0 rrcurveto +203 0 170 64 0 181 rrcurveto +0 20 -8 12 -16 3 rrcurveto +-16 2 -14 2 -10 2 rrcurveto +-91 0 rlineto +-35 0 -12 6 0 12 rrcurveto +0 39 82 83 50 0 rrcurveto +33 0 33 -19 23 -29 rrcurveto +0 6 1 8 3 9 rrcurveto +2 10 1 12 0 11 rrcurveto +closepath +-429 84 rmoveto +-12 -2 -5 -3 -3 -2 rrcurveto +-15 0 rlineto +-22 0 -39 22 0 10 rrcurveto +0 8 17 7 14 0 rrcurveto +12 0 11 -5 10 -9 rrcurveto +2 7 3 5 3 4 rrcurveto +2 5 1 4 0 5 rrcurveto +0 14 -11 10 -13 0 rrcurveto +-28 0 -48 -51 0 -22 rrcurveto +0 -16 16 -9 17 -9 rrcurveto +-33 -12 -16 -13 0 -15 rrcurveto +91 31 rlineto +23 8 23 11 0 17 rrcurveto +closepath +endchar } ND +/afii62759 { +0 588 hsbw +-110 81 hstem +39 68 hstem +143 85 hstem +451 40 hstem +85 25 vstem +186 20 vstem +345 41 vstem +512 49 vstem +623 143 rmoveto +0 85 rlineto +-86 0 rlineto +-99 0 -93 -53 0 -104 rrcurveto +0 -22 15 -10 42 0 rrcurveto +12 0 48 -3 18 -2 rrcurveto +22 0 10 -6 0 -10 rrcurveto +0 -41 -113 -6 -76 0 rrcurveto +-120 0 -106 26 0 95 rrcurveto +0 22 9 30 19 36 rrcurveto +7 9 6 12 5 10 rrcurveto +6 12 6 10 7 10 rrcurveto +-20 9 rlineto +-67 -105 -23 -40 0 -73 rrcurveto +0 -106 110 -38 123 0 rrcurveto +167 0 109 28 0 150 rrcurveto +0 24 -17 6 -29 3 rrcurveto +-28 2 -14 2 -10 2 rrcurveto +-31 0 rlineto +-31 0 -15 5 0 12 rrcurveto +0 14 51 5 100 0 rrcurveto +86 0 rlineto +closepath +-417 268 rmoveto +-12 -2 -5 -3 -3 -2 rrcurveto +-15 0 rlineto +-22 0 -39 22 0 11 rrcurveto +0 6 17 8 15 0 rrcurveto +11 0 11 -5 10 -8 rrcurveto +8 10 4 9 0 10 rrcurveto +0 14 -12 10 -12 0 rrcurveto +-28 0 -49 -51 0 -22 rrcurveto +0 -16 16 -9 17 -9 rrcurveto +-33 -12 -16 -13 0 -15 rrcurveto +91 31 rlineto +24 8 22 11 0 17 rrcurveto +closepath +endchar } ND +/afii62757 { +0 244 hsbw +143 85 hstem +628 40 hstem +104 25 vstem +243 35 vstem +278 143 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +-52 445 rmoveto +-20 -7 -1 0 -14 0 rrcurveto +-22 0 -40 22 0 11 rrcurveto +0 8 17 6 15 0 rrcurveto +12 0 11 -5 10 -8 rrcurveto +2 7 3 5 3 4 rrcurveto +2 5 1 4 0 5 rrcurveto +0 13 -11 10 -13 0 rrcurveto +-27 0 -50 -50 0 -22 rrcurveto +0 -17 16 -9 18 -9 rrcurveto +-33 -12 -16 -13 0 -15 rrcurveto +91 32 rlineto +23 6 23 13 0 16 rrcurveto +closepath +endchar } ND +/afii62758 { +0 244 hsbw +143 85 hstem +628 40 hstem +104 25 vstem +243 35 vstem +278 143 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +-52 445 rmoveto +-20 -7 -1 0 -14 0 rrcurveto +-22 0 -40 22 0 11 rrcurveto +0 8 17 6 15 0 rrcurveto +12 0 11 -5 10 -8 rrcurveto +2 7 3 5 3 4 rrcurveto +2 5 1 4 0 5 rrcurveto +0 13 -11 10 -13 0 rrcurveto +-27 0 -50 -50 0 -22 rrcurveto +0 -17 16 -9 18 -9 rrcurveto +-33 -12 -16 -13 0 -15 rrcurveto +91 32 rlineto +23 6 23 13 0 16 rrcurveto +closepath +endchar } ND +/afii57415 { +0 207 hsbw +130 20 hstem +114 51 vstem +165 268 rmoveto +0 69 -15 144 -13 107 rrcurveto +-8 58 -7 56 -4 38 rrcurveto +-16 -30 -17 -35 -13 -28 rrcurveto +5 -42 5 -41 5 -40 rrcurveto +14 -132 13 -132 0 -68 rrcurveto +0 -8 -2 -31 -2 -18 rrcurveto +9 -5 rlineto +33 58 13 32 0 48 rrcurveto +closepath +endchar } ND +/afii62760 { +0 229 hsbw +143 85 hstem +264 143 rmoveto +0 85 rlineto +-69 0 rlineto +-45 0 -2 56 -8 76 rrcurveto +-6 200 2 76 -32 104 rrcurveto +-61 -94 rlineto +47 -44 2 -53 3 -82 rrcurveto +0 -20 2 -20 2 -18 rrcurveto +2 -18 1 -18 0 -19 rrcurveto +6 -121 -2 -90 89 0 rrcurveto +69 0 rlineto +closepath +endchar } ND +/afii57416 { +0 713 hsbw +143 85 hstem +63 35 vstem +709 39 vstem +748 143 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +-280 -119 rmoveto +-81 42 rlineto +-36 -71 rlineto +79 -41 rlineto +38 70 rlineto +closepath +endchar } ND +/afii62763 { +0 713 hsbw +143 85 hstem +63 35 vstem +709 39 vstem +748 143 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +-280 -119 rmoveto +-81 42 rlineto +-36 -71 rlineto +79 -41 rlineto +38 70 rlineto +closepath +endchar } ND +/afii62761 { +0 244 hsbw +143 85 hstem +243 35 vstem +278 143 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +-49 -119 rmoveto +-82 42 rlineto +-36 -71 rlineto +79 -41 rlineto +39 70 rlineto +closepath +endchar } ND +/afii62762 { +0 244 hsbw +143 85 hstem +243 35 vstem +278 143 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +-49 -119 rmoveto +-82 42 rlineto +-36 -71 rlineto +79 -41 rlineto +39 70 rlineto +closepath +endchar } ND +/afii57417 { +0 282 hsbw +130 76 hstem +36 50 vstem +229 42 vstem +229 599 rmoveto +-81 42 rlineto +-37 -70 rlineto +79 -42 rlineto +39 70 rlineto +closepath +-113 -44 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +155 -268 rmoveto +0 61 -53 25 -111 57 rrcurveto +-29 -82 rlineto +7 -2 rlineto +-22 -51 -27 -60 0 -45 rrcurveto +0 -42 41 -18 45 0 rrcurveto +105 0 44 50 0 107 rrcurveto +closepath +-42 -38 rmoveto +0 -18 -55 -25 -37 0 rrcurveto +-31 0 -20 18 0 34 rrcurveto +0 21 11 14 29 31 rrcurveto +39 -19 64 -35 0 -21 rrcurveto +closepath +endchar } ND +/afii62764 { +0 375 hsbw +143 85 hstem +261 463 hstem +30 92 vstem +286 727 rmoveto +-81 41 rlineto +-37 -70 rlineto +80 -42 rlineto +38 71 rlineto +closepath +-113 -44 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +236 -540 rmoveto +0 85 rlineto +-70 0 rlineto +-29 0 -11 81 -13 72 rrcurveto +-15 84 rlineto +-4 21 -4 19 -4 19 rrcurveto +-3 19 -3 19 -3 21 rrcurveto +-21 -23 -15 -26 0 -23 rrcurveto +0 -6 5 -30 2 -5 rrcurveto +-110 -51 -81 -75 0 -56 rrcurveto +0 -16 55 -11 76 0 rrcurveto +33 0 31 22 20 36 rrcurveto +13 -84 26 -92 55 0 rrcurveto +70 0 rlineto +closepath +-170 218 rmoveto +-18 -20 -19 -10 -19 0 rrcurveto +-32 0 -16 2 -13 7 rrcurveto +21 36 30 17 56 22 rrcurveto +10 -54 rlineto +closepath +endchar } ND +/afii57418 { +0 713 hsbw +143 85 hstem +608 20 hstem +63 35 vstem +709 39 vstem +518 586 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -41 rlineto +37 70 rlineto +closepath +342 -399 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +endchar } ND +/afii62767 { +0 713 hsbw +143 85 hstem +608 20 hstem +63 35 vstem +709 39 vstem +518 586 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -41 rlineto +37 70 rlineto +closepath +342 -399 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +endchar } ND +/afii62765 { +0 244 hsbw +143 85 hstem +243 35 vstem +247 625 rmoveto +-81 42 rlineto +-37 -70 rlineto +79 -42 rlineto +39 70 rlineto +closepath +-113 -43 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +144 -439 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +endchar } ND +/afii62766 { +0 244 hsbw +143 85 hstem +243 35 vstem +247 625 rmoveto +-81 42 rlineto +-37 -70 rlineto +79 -42 rlineto +39 70 rlineto +closepath +-113 -43 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +144 -439 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +endchar } ND +/afii57419 { +0 713 hsbw +143 85 hstem +608 20 hstem +695 20 hstem +63 35 vstem +709 39 vstem +422 673 rmoveto +-80 42 rlineto +-36 -71 rlineto +78 -42 rlineto +38 71 rlineto +closepath +96 -87 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -41 rlineto +37 70 rlineto +closepath +342 -399 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +endchar } ND +/afii62770 { +0 713 hsbw +143 85 hstem +608 20 hstem +695 20 hstem +63 35 vstem +709 39 vstem +422 673 rmoveto +-80 42 rlineto +-36 -71 rlineto +78 -42 rlineto +38 71 rlineto +closepath +96 -87 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -41 rlineto +37 70 rlineto +closepath +342 -399 rmoveto +0 133 rlineto +0 86 8 21 -68 86 rrcurveto +-37 -80 rlineto +42 -32 16 -43 0 -73 rrcurveto +0 -13 rlineto +-414 0 rlineto +-101 0 -96 32 0 86 rrcurveto +0 31 18 40 17 36 rrcurveto +-15 9 rlineto +-44 -73 -11 -32 0 -53 rrcurveto +0 -117 95 -44 124 0 rrcurveto +466 0 rlineto +closepath +endchar } ND +/afii62768 { +0 244 hsbw +143 85 hstem +243 35 vstem +150 712 rmoveto +-79 42 rlineto +-36 -71 rlineto +78 -42 rlineto +37 71 rlineto +closepath +97 -87 rmoveto +-81 42 rlineto +-37 -70 rlineto +79 -42 rlineto +39 70 rlineto +closepath +-113 -43 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +144 -439 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +endchar } ND +/afii62769 { +0 244 hsbw +143 85 hstem +243 35 vstem +150 712 rmoveto +-79 42 rlineto +-36 -71 rlineto +78 -42 rlineto +37 71 rlineto +closepath +97 -87 rmoveto +-81 42 rlineto +-37 -70 rlineto +79 -42 rlineto +39 70 rlineto +closepath +-113 -43 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +144 -439 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +endchar } ND +/afii57420 { +0 563 hsbw +-212 83 hstem +343 89 hstem +26 33 vstem +378 128 rmoveto +-81 41 rlineto +-37 -70 rlineto +76 -44 rlineto +42 73 rlineto +closepath +-142 212 rmoveto +-171 -115 -39 -51 0 -135 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 173 216 54 202 34 rrcurveto +18 83 rlineto +-9 0 -18 -1 -15 -2 rrcurveto +-16 -2 -16 -2 -9 0 rrcurveto +-23 0 -27 2 -30 4 rrcurveto +-67 9 -44 5 -21 0 rrcurveto +-94 0 -34 -14 -31 -94 rrcurveto +55 11 43 8 41 0 rrcurveto +5 -3 rlineto +51 0 rlineto +closepath +endchar } ND +/afii62773 { +0 526 hsbw +-212 83 hstem +143 85 hstem +336 90 hstem +26 33 vstem +360 23 vstem +560 143 rmoveto +0 85 rlineto +-101 0 rlineto +-54 0 -22 13 0 49 rrcurveto +0 27 rlineto +18 4 16 3 11 2 rrcurveto +9 1 8 1 7 2 rrcurveto +7 2 7 1 8 0 rrcurveto +19 83 rlineto +-35 -6 -30 -2 -33 0 rrcurveto +-25 0 -34 4 -34 5 rrcurveto +-34 5 -37 4 -31 0 rrcurveto +-90 0 -41 -17 -31 -90 rrcurveto +79 17 6 0 59 0 rrcurveto +39 0 rlineto +12 -3 16 -2 14 0 rrcurveto +-193 -104 -44 -43 0 -145 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 133 129 53 172 52 rrcurveto +-1 -6 -1 -6 -2 -4 rrcurveto +0 -12 rlineto +-4 -19 -2 -16 0 -12 rrcurveto +0 -68 30 -27 79 0 rrcurveto +101 0 rlineto +closepath +-217 -53 rmoveto +-78 42 rlineto +-38 -71 rlineto +79 -42 rlineto +37 71 rlineto +closepath +endchar } ND +/afii62771 { +0 530 hsbw +143 85 hstem +341 86 hstem +393 166 vstem +559 143 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +-248 -106 rmoveto +-79 42 rlineto +-38 -71 rlineto +80 -41 rlineto +37 70 rlineto +closepath +endchar } ND +/afii62772 { +0 530 hsbw +143 85 hstem +341 86 hstem +393 166 vstem +559 143 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +-248 -106 rmoveto +-79 42 rlineto +-38 -71 rlineto +80 -41 rlineto +37 70 rlineto +closepath +endchar } ND +/afii57421 { +0 563 hsbw +-212 83 hstem +343 89 hstem +26 33 vstem +236 340 rmoveto +-171 -115 -39 -51 0 -135 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 173 216 54 202 34 rrcurveto +18 83 rlineto +-9 0 -18 -1 -15 -2 rrcurveto +-16 -2 -16 -2 -9 0 rrcurveto +-23 0 -27 2 -30 4 rrcurveto +-67 9 -44 5 -21 0 rrcurveto +-94 0 -34 -14 -31 -94 rrcurveto +55 11 43 8 41 0 rrcurveto +5 -3 rlineto +51 0 rlineto +closepath +endchar } ND +/afii62776 { +0 526 hsbw +-212 83 hstem +143 85 hstem +336 90 hstem +26 33 vstem +360 23 vstem +560 143 rmoveto +0 85 rlineto +-101 0 rlineto +-54 0 -22 13 0 49 rrcurveto +0 27 rlineto +18 4 16 3 11 2 rrcurveto +9 1 8 1 7 2 rrcurveto +7 2 7 1 8 0 rrcurveto +19 83 rlineto +-35 -6 -30 -2 -33 0 rrcurveto +-25 0 -34 4 -34 5 rrcurveto +-34 5 -37 4 -31 0 rrcurveto +-90 0 -41 -17 -31 -90 rrcurveto +79 17 6 0 59 0 rrcurveto +39 0 rlineto +12 -3 16 -2 14 0 rrcurveto +-193 -104 -44 -43 0 -145 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 133 129 53 172 52 rrcurveto +-1 -6 -1 -6 -2 -4 rrcurveto +0 -12 rlineto +-4 -19 -2 -16 0 -12 rrcurveto +0 -68 30 -27 79 0 rrcurveto +101 0 rlineto +closepath +endchar } ND +/afii62774 { +0 530 hsbw +143 85 hstem +341 86 hstem +393 166 vstem +559 143 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +endchar } ND +/afii62775 { +0 530 hsbw +143 85 hstem +341 86 hstem +393 166 vstem +559 143 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +endchar } ND +/afii57422 { +0 563 hsbw +-212 83 hstem +343 89 hstem +619 20 hstem +26 33 vstem +330 598 rmoveto +-80 41 rlineto +-36 -71 rlineto +78 -41 rlineto +38 71 rlineto +closepath +-94 -258 rmoveto +-171 -115 -39 -51 0 -135 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 173 216 54 202 34 rrcurveto +18 83 rlineto +-9 0 -18 -1 -15 -2 rrcurveto +-16 -2 -16 -2 -9 0 rrcurveto +-23 0 -27 2 -30 4 rrcurveto +-67 9 -44 5 -21 0 rrcurveto +-94 0 -34 -14 -31 -94 rrcurveto +55 11 43 8 41 0 rrcurveto +5 -3 rlineto +51 0 rlineto +closepath +endchar } ND +/afii62779 { +0 526 hsbw +-212 83 hstem +143 85 hstem +331 308 hstem +26 33 vstem +360 23 vstem +332 598 rmoveto +-80 41 rlineto +-36 -71 rlineto +78 -41 rlineto +38 71 rlineto +closepath +228 -455 rmoveto +0 85 rlineto +-101 0 rlineto +-54 0 -22 13 0 49 rrcurveto +0 27 rlineto +18 4 16 3 11 2 rrcurveto +9 1 8 1 7 2 rrcurveto +7 2 7 1 8 0 rrcurveto +19 83 rlineto +-35 -6 -30 -2 -33 0 rrcurveto +-25 0 -34 4 -34 5 rrcurveto +-34 5 -37 4 -31 0 rrcurveto +-90 0 -41 -17 -31 -90 rrcurveto +79 17 6 0 59 0 rrcurveto +39 0 rlineto +12 -3 16 -2 14 0 rrcurveto +-193 -104 -44 -43 0 -145 rrcurveto +0 -189 154 -62 197 0 rrcurveto +28 0 rlineto +111 78 rlineto +-3 5 rlineto +-90 0 rlineto +-189 0 -175 45 0 159 rrcurveto +0 133 129 53 172 52 rrcurveto +-1 -6 -1 -6 -2 -4 rrcurveto +0 -12 rlineto +-4 -19 -2 -16 0 -12 rrcurveto +0 -68 30 -27 79 0 rrcurveto +101 0 rlineto +closepath +endchar } ND +/afii62777 { +0 530 hsbw +143 85 hstem +341 86 hstem +619 20 hstem +393 166 vstem +325 598 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +234 -455 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +endchar } ND +/afii62778 { +0 530 hsbw +143 85 hstem +341 86 hstem +619 20 hstem +393 166 vstem +325 598 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +234 -455 rmoveto +0 85 rlineto +-29 0 rlineto +-14 0 -26 22 -40 36 rrcurveto +-95 85 -64 56 -69 0 rrcurveto +-60 0 -40 -35 -21 -55 rrcurveto +16 2 17 2 17 0 rrcurveto +89 0 64 -44 89 -69 rrcurveto +-393 0 rlineto +0 -85 rlineto +559 0 rlineto +closepath +endchar } ND +/afii57423 { +0 337 hsbw +143 85 hstem +90 11 vstem +342 30 vstem +372 143 rmoveto +0 85 rlineto +0 150 -32 117 -116 57 rrcurveto +-8 -95 rlineto +95 -31 31 -84 0 -114 rrcurveto +-189 0 rlineto +-29 0 -17 10 -6 26 rrcurveto +-11 0 rlineto +-8 -24 -1 -18 0 -25 rrcurveto +0 -30 34 -24 38 0 rrcurveto +219 0 rlineto +closepath +endchar } ND +/afii62780 { +0 337 hsbw +143 85 hstem +90 11 vstem +342 30 vstem +372 143 rmoveto +0 85 rlineto +0 150 -32 117 -116 57 rrcurveto +-8 -95 rlineto +95 -31 31 -84 0 -114 rrcurveto +-189 0 rlineto +-29 0 -17 10 -6 26 rrcurveto +-11 0 rlineto +-8 -24 -1 -18 0 -25 rrcurveto +0 -30 34 -24 38 0 rrcurveto +219 0 rlineto +closepath +endchar } ND +/afii57424 { +0 337 hsbw +143 85 hstem +90 11 vstem +342 30 vstem +242 717 rmoveto +-81 42 rlineto +-36 -71 rlineto +79 -42 rlineto +38 71 rlineto +closepath +130 -574 rmoveto +0 85 rlineto +0 150 -32 117 -116 57 rrcurveto +-8 -95 rlineto +95 -31 31 -84 0 -114 rrcurveto +-189 0 rlineto +-29 0 -17 10 -6 26 rrcurveto +-11 0 rlineto +-8 -24 -1 -18 0 -25 rrcurveto +0 -30 34 -24 38 0 rrcurveto +219 0 rlineto +closepath +endchar } ND +/afii62781 { +0 337 hsbw +143 85 hstem +90 11 vstem +342 30 vstem +242 717 rmoveto +-81 42 rlineto +-36 -71 rlineto +79 -42 rlineto +38 71 rlineto +closepath +130 -574 rmoveto +0 85 rlineto +0 150 -32 117 -116 57 rrcurveto +-8 -95 rlineto +95 -31 31 -84 0 -114 rrcurveto +-189 0 rlineto +-29 0 -17 10 -6 26 rrcurveto +-11 0 rlineto +-8 -24 -1 -18 0 -25 rrcurveto +0 -30 34 -24 38 0 rrcurveto +219 0 rlineto +closepath +endchar } ND +/afii57425 { +0 489 hsbw +-91 59 hstem +488 35 vstem +523 143 rmoveto +0 119 rlineto +0 67 -29 52 -52 49 rrcurveto +-27 -77 rlineto +41 -48 32 -53 0 -50 rrcurveto +0 -93 -163 -141 -116 0 rrcurveto +-19 0 -22 3 -22 4 rrcurveto +-22 5 -23 5 -22 3 rrcurveto +-9 -20 rlineto +12 -4 12 -4 11 -5 rrcurveto +11 -5 11 -5 13 -3 rrcurveto +55 -22 44 -11 45 0 rrcurveto +84 0 155 130 0 104 rrcurveto +closepath +endchar } ND +/afii62782 { +0 489 hsbw +-91 59 hstem +488 35 vstem +523 143 rmoveto +0 119 rlineto +0 67 -29 52 -52 49 rrcurveto +-27 -77 rlineto +41 -48 32 -53 0 -50 rrcurveto +0 -93 -163 -141 -116 0 rrcurveto +-19 0 -22 3 -22 4 rrcurveto +-22 5 -23 5 -22 3 rrcurveto +-9 -20 rlineto +12 -4 12 -4 11 -5 rrcurveto +11 -5 11 -5 13 -3 rrcurveto +55 -22 44 -11 45 0 rrcurveto +84 0 155 130 0 104 rrcurveto +closepath +endchar } ND +/afii57426 { +0 489 hsbw +-91 59 hstem +619 20 hstem +488 35 vstem +450 598 rmoveto +-80 41 rlineto +-37 -71 rlineto +79 -41 rlineto +38 71 rlineto +closepath +73 -455 rmoveto +0 119 rlineto +0 67 -29 52 -52 49 rrcurveto +-27 -77 rlineto +41 -48 32 -53 0 -50 rrcurveto +0 -93 -163 -141 -116 0 rrcurveto +-19 0 -22 3 -22 4 rrcurveto +-22 5 -23 5 -22 3 rrcurveto +-9 -20 rlineto +12 -4 12 -4 11 -5 rrcurveto +11 -5 11 -5 13 -3 rrcurveto +55 -22 44 -11 45 0 rrcurveto +84 0 155 130 0 104 rrcurveto +closepath +endchar } ND +/afii62783 { +0 489 hsbw +-91 59 hstem +619 20 hstem +488 35 vstem +450 598 rmoveto +-80 41 rlineto +-37 -71 rlineto +79 -41 rlineto +38 71 rlineto +closepath +73 -455 rmoveto +0 119 rlineto +0 67 -29 52 -52 49 rrcurveto +-27 -77 rlineto +41 -48 32 -53 0 -50 rrcurveto +0 -93 -163 -141 -116 0 rrcurveto +-19 0 -22 3 -22 4 rrcurveto +-22 5 -23 5 -22 3 rrcurveto +-9 -20 rlineto +12 -4 12 -4 11 -5 rrcurveto +11 -5 11 -5 13 -3 rrcurveto +55 -22 44 -11 45 0 rrcurveto +84 0 155 130 0 104 rrcurveto +closepath +endchar } ND +/afii57427 { +0 821 hsbw +-72 84 hstem +143 85 hstem +64 39 vstem +529 28 vstem +829 26 vstem +855 143 rmoveto +0 117 rlineto +0 63 0 12 -38 66 rrcurveto +-33 -53 rlineto +24 -29 21 -34 0 -31 rrcurveto +0 -14 -9 -11 -14 0 rrcurveto +-54 0 -19 35 -13 58 rrcurveto +-8 47 rlineto +-19 -29 rlineto +4 -23 3 -19 0 -18 rrcurveto +0 -46 -34 -6 -49 0 rrcurveto +-60 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +152 0 134 83 0 132 rrcurveto +60 0 rlineto +47 0 21 2 35 32 rrcurveto +30 -24 28 -10 39 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii62786 { +0 821 hsbw +-72 84 hstem +143 85 hstem +64 39 vstem +529 28 vstem +829 26 vstem +855 143 rmoveto +0 117 rlineto +0 63 0 12 -38 66 rrcurveto +-33 -53 rlineto +24 -29 21 -34 0 -31 rrcurveto +0 -14 -9 -11 -14 0 rrcurveto +-54 0 -19 35 -13 58 rrcurveto +-8 47 rlineto +-19 -29 rlineto +4 -23 3 -19 0 -18 rrcurveto +0 -46 -34 -6 -49 0 rrcurveto +-60 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +152 0 134 83 0 132 rrcurveto +60 0 rlineto +47 0 21 2 35 32 rrcurveto +30 -24 28 -10 39 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii62784 { +0 531 hsbw +143 85 hstem +539 26 vstem +565 143 rmoveto +0 117 rlineto +0 58 -5 33 -33 50 rrcurveto +-32 -53 rlineto +35 -46 9 -14 0 -30 rrcurveto +0 -16 -12 -13 -17 0 rrcurveto +-53 0 -11 37 -13 57 rrcurveto +-11 46 rlineto +-20 -29 rlineto +1 -12 3 -11 3 -8 rrcurveto +0 -29 rlineto +0 -42 -30 -10 -44 0 rrcurveto +-32 0 rlineto +-71 0 -15 58 -25 83 rrcurveto +-20 -29 rlineto +5 -24 2 -18 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +58 0 17 7 32 24 rrcurveto +33 -21 27 -10 31 0 rrcurveto +32 0 rlineto +47 0 23 4 39 29 rrcurveto +24 -22 28 -11 42 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii62785 { +0 531 hsbw +143 85 hstem +539 26 vstem +565 143 rmoveto +0 117 rlineto +0 58 -5 33 -33 50 rrcurveto +-32 -53 rlineto +35 -46 9 -14 0 -30 rrcurveto +0 -16 -12 -13 -17 0 rrcurveto +-53 0 -11 37 -13 57 rrcurveto +-11 46 rlineto +-20 -29 rlineto +1 -12 3 -11 3 -8 rrcurveto +0 -29 rlineto +0 -42 -30 -10 -44 0 rrcurveto +-32 0 rlineto +-71 0 -15 58 -25 83 rrcurveto +-20 -29 rlineto +5 -24 2 -18 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +58 0 17 7 32 24 rrcurveto +33 -21 27 -10 31 0 rrcurveto +32 0 rlineto +47 0 23 4 39 29 rrcurveto +24 -22 28 -11 42 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii57428 { +0 821 hsbw +-72 84 hstem +143 85 hstem +608 20 hstem +695 20 hstem +64 39 vstem +529 28 vstem +829 26 vstem +721 673 rmoveto +-80 42 rlineto +-36 -71 rlineto +78 -42 rlineto +38 71 rlineto +closepath +96 -87 rmoveto +-81 42 rlineto +-36 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-37 -70 rlineto +79 -41 rlineto +38 70 rlineto +closepath +150 -399 rmoveto +0 117 rlineto +0 63 0 12 -38 66 rrcurveto +-33 -53 rlineto +24 -29 21 -34 0 -31 rrcurveto +0 -14 -9 -11 -14 0 rrcurveto +-54 0 -19 35 -13 58 rrcurveto +-8 47 rlineto +-19 -29 rlineto +4 -23 3 -19 0 -18 rrcurveto +0 -46 -34 -6 -49 0 rrcurveto +-60 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +152 0 134 83 0 132 rrcurveto +60 0 rlineto +47 0 21 2 35 32 rrcurveto +30 -24 28 -10 39 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii62789 { +0 821 hsbw +-72 84 hstem +143 85 hstem +608 20 hstem +695 20 hstem +64 39 vstem +529 28 vstem +829 26 vstem +721 673 rmoveto +-80 42 rlineto +-36 -71 rlineto +78 -42 rlineto +38 71 rlineto +closepath +96 -87 rmoveto +-81 42 rlineto +-36 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-37 -70 rlineto +79 -41 rlineto +38 70 rlineto +closepath +150 -399 rmoveto +0 117 rlineto +0 63 0 12 -38 66 rrcurveto +-33 -53 rlineto +24 -29 21 -34 0 -31 rrcurveto +0 -14 -9 -11 -14 0 rrcurveto +-54 0 -19 35 -13 58 rrcurveto +-8 47 rlineto +-19 -29 rlineto +4 -23 3 -19 0 -18 rrcurveto +0 -46 -34 -6 -49 0 rrcurveto +-60 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +152 0 134 83 0 132 rrcurveto +60 0 rlineto +47 0 21 2 35 32 rrcurveto +30 -24 28 -10 39 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii62787 { +0 531 hsbw +143 85 hstem +608 20 hstem +695 20 hstem +539 26 vstem +425 673 rmoveto +-79 42 rlineto +-36 -71 rlineto +78 -42 rlineto +37 71 rlineto +closepath +96 -87 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -41 rlineto +37 70 rlineto +closepath +156 -399 rmoveto +0 117 rlineto +0 58 -5 33 -33 50 rrcurveto +-32 -53 rlineto +35 -46 9 -14 0 -30 rrcurveto +0 -16 -12 -13 -17 0 rrcurveto +-53 0 -11 37 -13 57 rrcurveto +-11 46 rlineto +-20 -29 rlineto +1 -12 3 -11 3 -8 rrcurveto +0 -29 rlineto +0 -42 -30 -10 -44 0 rrcurveto +-32 0 rlineto +-71 0 -15 58 -25 83 rrcurveto +-20 -29 rlineto +5 -24 2 -18 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +58 0 17 7 32 24 rrcurveto +33 -21 27 -10 31 0 rrcurveto +32 0 rlineto +47 0 23 4 39 29 rrcurveto +24 -22 28 -11 42 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii62788 { +0 531 hsbw +143 85 hstem +608 20 hstem +695 20 hstem +539 26 vstem +425 673 rmoveto +-79 42 rlineto +-36 -71 rlineto +78 -42 rlineto +37 71 rlineto +closepath +96 -87 rmoveto +-80 42 rlineto +-37 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -70 rlineto +79 -41 rlineto +37 70 rlineto +closepath +156 -399 rmoveto +0 117 rlineto +0 58 -5 33 -33 50 rrcurveto +-32 -53 rlineto +35 -46 9 -14 0 -30 rrcurveto +0 -16 -12 -13 -17 0 rrcurveto +-53 0 -11 37 -13 57 rrcurveto +-11 46 rlineto +-20 -29 rlineto +1 -12 3 -11 3 -8 rrcurveto +0 -29 rlineto +0 -42 -30 -10 -44 0 rrcurveto +-32 0 rlineto +-71 0 -15 58 -25 83 rrcurveto +-20 -29 rlineto +5 -24 2 -18 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +58 0 17 7 32 24 rrcurveto +33 -21 27 -10 31 0 rrcurveto +32 0 rlineto +47 0 23 4 39 29 rrcurveto +24 -22 28 -11 42 0 rrcurveto +38 0 rlineto +closepath +endchar } ND +/afii57429 { +0 1098 hsbw +-72 84 hstem +143 85 hstem +316 89 hstem +64 39 vstem +529 23 vstem +1053 79 vstem +1132 143 rmoveto +0 124 rlineto +0 85 -45 53 -86 0 rrcurveto +-71 0 -24 -11 -85 -56 rrcurveto +-53 -45 -102 -65 -101 0 rrcurveto +-8 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +164 0 95 58 22 157 rrcurveto +580 0 rlineto +closepath +-79 123 rmoveto +0 -26 -40 -12 -62 0 rrcurveto +-225 0 rlineto +13 5 10 6 12 8 rrcurveto +57 29 74 40 61 0 rrcurveto +53 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii62792 { +0 1098 hsbw +-72 84 hstem +143 85 hstem +316 89 hstem +64 39 vstem +529 23 vstem +1053 79 vstem +1132 143 rmoveto +0 124 rlineto +0 85 -45 53 -86 0 rrcurveto +-71 0 -24 -11 -85 -56 rrcurveto +-53 -45 -102 -65 -101 0 rrcurveto +-8 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +164 0 95 58 22 157 rrcurveto +580 0 rlineto +closepath +-79 123 rmoveto +0 -26 -40 -12 -62 0 rrcurveto +-225 0 rlineto +13 5 10 6 12 8 rrcurveto +57 29 74 40 61 0 rrcurveto +53 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii62790 { +0 846 hsbw +143 85 hstem +316 89 hstem +0 474 vstem +801 79 vstem +880 143 rmoveto +0 124 rlineto +0 84 -44 54 -87 0 rrcurveto +-58 0 -43 -16 -50 -32 rrcurveto +-4 -5 -10 -7 -15 -9 rrcurveto +-14 -9 -20 -13 -22 -17 rrcurveto +-54 -38 -86 -31 -59 0 rrcurveto +-66 0 -36 64 -20 77 rrcurveto +-20 -29 rlineto +5 -23 2 -19 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +60 0 19 7 28 24 rrcurveto +32 -21 26 -10 34 0 rrcurveto +587 0 rlineto +closepath +-79 123 rmoveto +0 -26 -32 -12 -70 0 rrcurveto +-225 0 rlineto +19 8 18 9 17 11 rrcurveto +52 29 74 31 48 0 rrcurveto +52 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii62791 { +0 846 hsbw +143 85 hstem +316 89 hstem +0 474 vstem +801 79 vstem +880 143 rmoveto +0 124 rlineto +0 84 -44 54 -87 0 rrcurveto +-58 0 -43 -16 -50 -32 rrcurveto +-4 -5 -10 -7 -15 -9 rrcurveto +-14 -9 -20 -13 -22 -17 rrcurveto +-54 -38 -86 -31 -59 0 rrcurveto +-66 0 -36 64 -20 77 rrcurveto +-20 -29 rlineto +5 -23 2 -19 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +60 0 19 7 28 24 rrcurveto +32 -21 26 -10 34 0 rrcurveto +587 0 rlineto +closepath +-79 123 rmoveto +0 -26 -32 -12 -70 0 rrcurveto +-225 0 rlineto +19 8 18 9 17 11 rrcurveto +52 29 74 31 48 0 rrcurveto +52 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii57430 { +0 1098 hsbw +-72 84 hstem +143 85 hstem +316 89 hstem +64 39 vstem +529 23 vstem +1053 79 vstem +807 549 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +325 -406 rmoveto +0 124 rlineto +0 85 -45 53 -86 0 rrcurveto +-71 0 -24 -11 -85 -56 rrcurveto +-53 -45 -102 -65 -101 0 rrcurveto +-8 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +164 0 95 58 22 157 rrcurveto +580 0 rlineto +closepath +-79 123 rmoveto +0 -26 -40 -12 -62 0 rrcurveto +-225 0 rlineto +13 5 10 6 12 8 rrcurveto +57 29 74 40 61 0 rrcurveto +53 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii62795 { +0 1098 hsbw +-72 84 hstem +143 85 hstem +316 89 hstem +64 39 vstem +529 23 vstem +1053 79 vstem +807 549 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +325 -406 rmoveto +0 124 rlineto +0 85 -45 53 -86 0 rrcurveto +-71 0 -24 -11 -85 -56 rrcurveto +-53 -45 -102 -65 -101 0 rrcurveto +-8 0 rlineto +0 81 -5 40 -41 68 rrcurveto +-40 -100 rlineto +37 -47 21 -54 0 -58 rrcurveto +0 -103 -141 -43 -118 0 rrcurveto +-108 0 -59 42 0 82 rrcurveto +0 44 10 46 46 95 rrcurveto +-19 9 rlineto +-54 -111 -22 -58 0 -84 rrcurveto +0 -112 85 -37 122 0 rrcurveto +164 0 95 58 22 157 rrcurveto +580 0 rlineto +closepath +-79 123 rmoveto +0 -26 -40 -12 -62 0 rrcurveto +-225 0 rlineto +13 5 10 6 12 8 rrcurveto +57 29 74 40 61 0 rrcurveto +53 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii62793 { +0 846 hsbw +143 85 hstem +316 89 hstem +0 474 vstem +801 79 vstem +570 549 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +310 -406 rmoveto +0 124 rlineto +0 84 -44 54 -87 0 rrcurveto +-58 0 -43 -16 -50 -32 rrcurveto +-4 -5 -10 -7 -15 -9 rrcurveto +-14 -9 -20 -13 -22 -17 rrcurveto +-54 -38 -86 -31 -59 0 rrcurveto +-66 0 -36 64 -20 77 rrcurveto +-20 -29 rlineto +5 -23 2 -19 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +60 0 19 7 28 24 rrcurveto +32 -21 26 -10 34 0 rrcurveto +587 0 rlineto +closepath +-79 123 rmoveto +0 -26 -32 -12 -70 0 rrcurveto +-225 0 rlineto +19 8 18 9 17 11 rrcurveto +52 29 74 31 48 0 rrcurveto +52 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii62794 { +0 846 hsbw +143 85 hstem +316 89 hstem +0 474 vstem +801 79 vstem +570 549 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +310 -406 rmoveto +0 124 rlineto +0 84 -44 54 -87 0 rrcurveto +-58 0 -43 -16 -50 -32 rrcurveto +-4 -5 -10 -7 -15 -9 rrcurveto +-14 -9 -20 -13 -22 -17 rrcurveto +-54 -38 -86 -31 -59 0 rrcurveto +-66 0 -36 64 -20 77 rrcurveto +-20 -29 rlineto +5 -23 2 -19 0 -18 rrcurveto +0 -46 -33 -6 -52 0 rrcurveto +-94 0 rlineto +0 -85 rlineto +94 0 rlineto +60 0 19 7 28 24 rrcurveto +32 -21 26 -10 34 0 rrcurveto +587 0 rlineto +closepath +-79 123 rmoveto +0 -26 -32 -12 -70 0 rrcurveto +-225 0 rlineto +19 8 18 9 17 11 rrcurveto +52 29 74 31 48 0 rrcurveto +52 0 47 -18 0 -32 rrcurveto +closepath +endchar } ND +/afii57431 { +0 582 hsbw +143 85 hstem +316 89 hstem +0 211 vstem +231 28 vstem +539 77 vstem +616 143 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii62798 { +0 582 hsbw +143 85 hstem +316 89 hstem +0 211 vstem +231 28 vstem +539 77 vstem +616 143 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii62796 { +0 582 hsbw +143 85 hstem +316 89 hstem +0 211 vstem +231 28 vstem +539 77 vstem +616 143 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii62797 { +0 582 hsbw +143 85 hstem +316 89 hstem +0 211 vstem +231 28 vstem +539 77 vstem +616 143 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii57432 { +0 582 hsbw +143 85 hstem +316 323 hstem +0 211 vstem +231 28 vstem +539 77 vstem +483 598 rmoveto +-81 41 rlineto +-36 -71 rlineto +79 -41 rlineto +38 71 rlineto +closepath +133 -455 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii62801 { +0 582 hsbw +143 85 hstem +316 323 hstem +0 211 vstem +231 28 vstem +539 77 vstem +483 598 rmoveto +-81 41 rlineto +-36 -71 rlineto +79 -41 rlineto +38 71 rlineto +closepath +133 -455 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii62799 { +0 582 hsbw +143 85 hstem +316 323 hstem +0 211 vstem +231 28 vstem +539 77 vstem +483 598 rmoveto +-81 41 rlineto +-36 -71 rlineto +79 -41 rlineto +38 71 rlineto +closepath +133 -455 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii62800 { +0 582 hsbw +143 85 hstem +316 323 hstem +0 211 vstem +231 28 vstem +539 77 vstem +483 598 rmoveto +-81 41 rlineto +-36 -71 rlineto +79 -41 rlineto +38 71 rlineto +closepath +133 -455 rmoveto +0 124 rlineto +0 86 -42 52 -87 0 rrcurveto +-67 0 -52 -29 -114 -65 rrcurveto +3 9 2 9 0 9 rrcurveto +1 9 1 6 2 4 rrcurveto +4 28 3 26 0 24 rrcurveto +0 54 -16 88 -24 76 rrcurveto +7 -2 rlineto +9 -3 6 -2 3 0 rrcurveto +3 16 2 8 4 10 rrcurveto +2 13 2 18 3 33 rrcurveto +-45 3 -38 15 -11 31 rrcurveto +-15 -34 -9 -37 -4 -38 rrcurveto +30 -15 rlineto +7 -32 7 -25 7 -22 rrcurveto +5 -20 4 -20 3 -18 rrcurveto +3 -19 3 -17 4 -14 rrcurveto +6 -42 3 -39 0 -34 rrcurveto +0 -78 -71 -61 -85 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +616 0 rlineto +closepath +-77 123 rmoveto +0 -26 -39 -12 -77 0 rrcurveto +-212 0 rlineto +11 7 11 7 11 6 rrcurveto +11 6 11 6 10 6 rrcurveto +54 26 61 24 48 0 rrcurveto +64 0 36 -17 0 -33 rrcurveto +closepath +endchar } ND +/afii57433 { +0 544 hsbw +-212 85 hstem +475 59 hstem +25 40 vstem +516 -130 rmoveto +0 3 rlineto +-92 0 rlineto +-181 0 -180 6 0 162 rrcurveto +0 140 150 54 198 78 rrcurveto +20 76 rlineto +-73 -19 -63 -25 -66 -35 rrcurveto +-72 9 -92 33 0 46 rrcurveto +0 69 162 8 90 0 rrcurveto +-47 35 -39 24 -42 0 rrcurveto +-86 0 -78 -84 0 -75 rrcurveto +0 -65 30 -34 75 -36 rrcurveto +-88 -88 -21 -50 0 -96 rrcurveto +0 -188 160 -30 211 0 rrcurveto +124 82 rlineto +closepath +endchar } ND +/afii62804 { +0 450 hsbw +-212 82 hstem +143 85 hstem +331 100 hstem +26 44 vstem +119 8 vstem +486 -134 rmoveto +-2 4 rlineto +-210 0 -204 15 0 166 rrcurveto +0 73 79 67 74 49 rrcurveto +33 -70 50 -27 99 0 rrcurveto +79 0 rlineto +0 85 rlineto +-79 0 rlineto +-50 0 -29 16 -36 44 rrcurveto +3 4 4 3 5 3 rrcurveto +15 12 19 19 0 22 rrcurveto +0 49 -52 31 -54 0 rrcurveto +-72 0 -25 -36 -14 -82 rrcurveto +8 0 rlineto +8 12 9 6 8 0 rrcurveto +14 0 13 -11 7 -22 rrcurveto +-122 -108 -38 -61 0 -117 rrcurveto +0 -182 156 -42 205 0 rrcurveto +99 78 rlineto +closepath +endchar } ND +/afii62802 { +0 526 hsbw +143 85 hstem +393 79 hstem +85 58 vstem +504 295 rmoveto +-123 -36 -44 -10 -108 -16 rrcurveto +-51 30 -35 44 0 32 rrcurveto +0 32 54 22 90 0 rrcurveto +38 0 34 -6 44 -12 rrcurveto +10 8 rlineto +-61 72 -23 17 -72 0 rrcurveto +-100 0 -72 -59 0 -77 rrcurveto +0 -36 13 -42 19 -30 rrcurveto +-117 0 rlineto +0 -85 rlineto +122 0 rlineto +108 0 142 28 99 36 rrcurveto +33 88 rlineto +closepath +endchar } ND +/afii62803 { +0 394 hsbw +143 85 hstem +314 104 hstem +102 253 vstem +428 143 rmoveto +0 85 rlineto +-72 0 rlineto +-20 0 -37 12 -10 15 rrcurveto +39 34 27 24 0 32 rrcurveto +0 55 -68 18 -67 0 rrcurveto +-81 0 -37 -15 0 -77 rrcurveto +0 -29 rlineto +10 0 rlineto +12 14 7 3 12 0 rrcurveto +13 0 12 -6 10 -12 rrcurveto +21 -26 rlineto +-49 -30 -49 -12 -57 0 rrcurveto +-44 0 rlineto +0 -85 rlineto +44 0 rlineto +73 0 67 19 51 46 rrcurveto +21 -41 56 -24 44 0 rrcurveto +72 0 rlineto +closepath +endchar } ND +/afii57434 { +0 544 hsbw +-212 85 hstem +475 59 hstem +25 40 vstem +243 695 rmoveto +-76 42 rlineto +-40 -71 rlineto +77 -41 rlineto +39 70 rlineto +closepath +273 -825 rmoveto +0 3 rlineto +-92 0 rlineto +-181 0 -180 6 0 162 rrcurveto +0 140 150 54 198 78 rrcurveto +20 76 rlineto +-73 -19 -63 -25 -66 -35 rrcurveto +-72 9 -92 33 0 46 rrcurveto +0 69 162 8 90 0 rrcurveto +-47 35 -39 24 -42 0 rrcurveto +-86 0 -78 -84 0 -75 rrcurveto +0 -65 30 -34 75 -36 rrcurveto +-88 -88 -21 -50 0 -96 rrcurveto +0 -188 160 -30 211 0 rrcurveto +124 82 rlineto +closepath +endchar } ND +/afii62807 { +0 450 hsbw +-212 82 hstem +143 85 hstem +331 100 hstem +619 20 hstem +26 44 vstem +119 8 vstem +292 598 rmoveto +-79 41 rlineto +-37 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +194 -732 rmoveto +-2 4 rlineto +-210 0 -204 15 0 166 rrcurveto +0 73 79 67 74 49 rrcurveto +33 -70 50 -27 99 0 rrcurveto +79 0 rlineto +0 85 rlineto +-79 0 rlineto +-50 0 -29 16 -36 44 rrcurveto +3 4 4 3 5 3 rrcurveto +15 12 19 19 0 22 rrcurveto +0 49 -52 31 -54 0 rrcurveto +-72 0 -25 -36 -14 -82 rrcurveto +8 0 rlineto +8 12 9 6 8 0 rrcurveto +14 0 13 -11 7 -22 rrcurveto +-122 -108 -38 -61 0 -117 rrcurveto +0 -182 156 -42 205 0 rrcurveto +99 78 rlineto +closepath +endchar } ND +/afii62805 { +0 526 hsbw +143 85 hstem +393 246 hstem +85 58 vstem +299 598 rmoveto +-79 41 rlineto +-37 -71 rlineto +80 -41 rlineto +36 71 rlineto +closepath +205 -303 rmoveto +-123 -36 -44 -10 -108 -16 rrcurveto +-51 30 -35 44 0 32 rrcurveto +0 32 54 22 90 0 rrcurveto +38 0 34 -6 44 -12 rrcurveto +10 8 rlineto +-61 72 -23 17 -72 0 rrcurveto +-100 0 -72 -59 0 -77 rrcurveto +0 -36 13 -42 19 -30 rrcurveto +-117 0 rlineto +0 -85 rlineto +122 0 rlineto +108 0 142 28 99 36 rrcurveto +33 88 rlineto +closepath +endchar } ND +/afii62806 { +0 394 hsbw +143 85 hstem +314 104 hstem +619 20 hstem +102 253 vstem +262 598 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +166 -455 rmoveto +0 85 rlineto +-72 0 rlineto +-20 0 -37 12 -10 15 rrcurveto +39 34 27 24 0 32 rrcurveto +0 55 -68 18 -67 0 rrcurveto +-81 0 -37 -15 0 -77 rrcurveto +0 -29 rlineto +10 0 rlineto +12 14 7 3 12 0 rrcurveto +13 0 12 -6 10 -12 rrcurveto +21 -26 rlineto +-49 -30 -49 -12 -57 0 rrcurveto +-44 0 rlineto +0 -85 rlineto +44 0 rlineto +73 0 67 19 51 46 rrcurveto +21 -41 56 -24 44 0 rrcurveto +72 0 rlineto +closepath +endchar } ND +/afii57441 { +0 789 hsbw +143 85 hstem +384 94 hstem +53 37 vstem +629 67 vstem +772 51 vstem +726 639 rmoveto +-79 42 rlineto +-41 -71 rlineto +80 -43 rlineto +40 72 rlineto +closepath +97 -496 rmoveto +0 141 rlineto +0 100 -11 94 -77 0 rrcurveto +-57 0 -49 -97 0 -59 rrcurveto +0 -54 50 -23 65 -17 rrcurveto +-360 0 rlineto +-206 0 -88 40 0 86 rrcurveto +0 24 7 25 28 56 rrcurveto +-20 11 rlineto +-3 -6 -4 -7 -4 -12 rrcurveto +-3 -9 -5 -13 -8 -12 rrcurveto +-17 -38 -8 -35 0 -28 rrcurveto +0 -155 154 -12 168 0 rrcurveto +448 0 rlineto +closepath +-51 148 rmoveto +-48 9 -28 9 0 37 rrcurveto +0 24 10 14 23 0 rrcurveto +33 0 10 -45 0 -48 rrcurveto +closepath +endchar } ND +/afii62810 { +0 789 hsbw +143 85 hstem +384 94 hstem +53 37 vstem +629 67 vstem +772 51 vstem +726 639 rmoveto +-79 42 rlineto +-41 -71 rlineto +80 -43 rlineto +40 72 rlineto +closepath +97 -496 rmoveto +0 141 rlineto +0 100 -11 94 -77 0 rrcurveto +-57 0 -49 -97 0 -59 rrcurveto +0 -54 50 -23 65 -17 rrcurveto +-360 0 rlineto +-206 0 -88 40 0 86 rrcurveto +0 24 7 25 28 56 rrcurveto +-20 11 rlineto +-3 -6 -4 -7 -4 -12 rrcurveto +-3 -9 -5 -13 -8 -12 rrcurveto +-17 -38 -8 -35 0 -28 rrcurveto +0 -155 154 -12 168 0 rrcurveto +448 0 rlineto +closepath +-51 148 rmoveto +-48 9 -28 9 0 37 rrcurveto +0 24 10 14 23 0 rrcurveto +33 0 10 -45 0 -48 rrcurveto +closepath +endchar } ND +/afii62808 { +0 268 hsbw +143 85 hstem +292 89 hstem +457 269 hstem +87 44 vstem +260 42 vstem +237 684 rmoveto +-80 42 rlineto +-36 -71 rlineto +78 -42 rlineto +38 71 rlineto +closepath +65 -541 rmoveto +0 127 rlineto +0 121 -26 153 -93 0 rrcurveto +-68 0 -28 -95 0 -80 rrcurveto +0 -50 35 -27 49 0 rrcurveto +21 0 25 7 33 11 rrcurveto +6 -26 4 -28 0 -28 rrcurveto +-260 0 rlineto +0 -85 rlineto +302 0 rlineto +closepath +-80 254 rmoveto +-16 -10 -18 -6 -14 0 rrcurveto +-29 0 -14 13 0 26 rrcurveto +0 20 12 17 18 0 rrcurveto +22 0 29 -35 10 -25 rrcurveto +closepath +endchar } ND +/afii62809 { +0 263 hsbw +143 85 hstem +408 86 hstem +100 50 vstem +265 32 vstem +254 662 rmoveto +-70 45 rlineto +-41 -69 rlineto +68 -47 rlineto +43 71 rlineto +closepath +43 -519 rmoveto +0 169 rlineto +0 83 -27 99 -69 0 rrcurveto +-62 0 -39 -82 0 -66 rrcurveto +0 -82 56 -8 109 -16 rrcurveto +-34 -11 -23 -1 -41 0 rrcurveto +-167 0 rlineto +0 -85 rlineto +297 0 rlineto +closepath +-44 170 rmoveto +-69 5 -34 6 0 48 rrcurveto +0 20 14 16 19 0 rrcurveto +35 0 20 -43 15 -52 rrcurveto +closepath +endchar } ND +/afii57442 { +0 582 hsbw +-75 87 hstem +192 93 hstem +357 88 hstem +619 20 hstem +68 38 vstem +394 46 vstem +579 37 vstem +559 642 rmoveto +-81 41 rlineto +-37 -70 rlineto +80 -42 rlineto +38 71 rlineto +closepath +-113 -44 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +170 -480 rmoveto +0 95 rlineto +0 104 -34 128 -85 0 rrcurveto +-61 0 -42 -94 0 -68 rrcurveto +0 -61 42 -30 60 0 rrcurveto +25 0 26 8 24 11 rrcurveto +6 -15 2 -10 0 -33 rrcurveto +0 -102 -148 -39 -124 0 rrcurveto +-116 0 -85 23 0 99 rrcurveto +0 60 21 59 29 67 rrcurveto +-20 9 rlineto +-43 -78 -25 -83 0 -78 rrcurveto +0 -122 99 -43 134 0 rrcurveto +165 0 150 48 0 145 rrcurveto +closepath +-78 181 rmoveto +-23 -10 -11 -4 -17 0 rrcurveto +-24 0 -23 12 0 20 rrcurveto +0 22 14 18 32 0 rrcurveto +25 0 10 -19 17 -39 rrcurveto +closepath +endchar } ND +/afii62813 { +0 582 hsbw +-75 87 hstem +192 93 hstem +357 88 hstem +619 20 hstem +68 38 vstem +394 46 vstem +579 37 vstem +559 642 rmoveto +-81 41 rlineto +-37 -70 rlineto +80 -42 rlineto +38 71 rlineto +closepath +-113 -44 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +170 -480 rmoveto +0 95 rlineto +0 104 -34 128 -85 0 rrcurveto +-61 0 -42 -94 0 -68 rrcurveto +0 -61 42 -30 60 0 rrcurveto +25 0 26 8 24 11 rrcurveto +6 -15 2 -10 0 -33 rrcurveto +0 -102 -148 -39 -124 0 rrcurveto +-116 0 -85 23 0 99 rrcurveto +0 60 21 59 29 67 rrcurveto +-20 9 rlineto +-43 -78 -25 -83 0 -78 rrcurveto +0 -122 99 -43 134 0 rrcurveto +165 0 150 48 0 145 rrcurveto +closepath +-78 181 rmoveto +-23 -10 -11 -4 -17 0 rrcurveto +-24 0 -23 12 0 20 rrcurveto +0 22 14 18 32 0 rrcurveto +25 0 10 -19 17 -39 rrcurveto +closepath +endchar } ND +/afii62811 { +0 268 hsbw +143 85 hstem +292 89 hstem +457 87 hstem +87 44 vstem +260 42 vstem +286 699 rmoveto +-80 41 rlineto +-37 -70 rlineto +79 -42 rlineto +38 71 rlineto +closepath +-112 -44 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +128 -512 rmoveto +0 127 rlineto +0 121 -26 153 -93 0 rrcurveto +-68 0 -28 -95 0 -80 rrcurveto +0 -50 35 -27 49 0 rrcurveto +21 0 25 7 33 11 rrcurveto +6 -26 4 -28 0 -28 rrcurveto +-260 0 rlineto +0 -85 rlineto +302 0 rlineto +closepath +-80 254 rmoveto +-16 -10 -18 -6 -14 0 rrcurveto +-29 0 -14 13 0 26 rrcurveto +0 20 12 17 18 0 rrcurveto +22 0 29 -35 10 -25 rrcurveto +closepath +endchar } ND +/afii62812 { +0 263 hsbw +143 85 hstem +408 319 hstem +100 50 vstem +265 32 vstem +276 687 rmoveto +-61 40 rlineto +-42 -65 rlineto +61 -40 rlineto +42 65 rlineto +closepath +-112 -29 rmoveto +-58 38 rlineto +-41 -65 rlineto +60 -40 rlineto +39 67 rlineto +closepath +133 -515 rmoveto +0 169 rlineto +0 83 -27 99 -69 0 rrcurveto +-62 0 -39 -82 0 -66 rrcurveto +0 -82 56 -8 109 -16 rrcurveto +-34 -11 -23 -1 -41 0 rrcurveto +-167 0 rlineto +0 -85 rlineto +297 0 rlineto +closepath +-44 170 rmoveto +-69 5 -34 6 0 48 rrcurveto +0 20 14 16 19 0 rrcurveto +35 0 20 -43 15 -52 rrcurveto +closepath +endchar } ND +/afii57443 { +0 601 hsbw +143 85 hstem +330 31 hstem +441 56 hstem +56 40 vstem +199 28 vstem +301 42 vstem +412 45 vstem +586 49 vstem +457 441 rmoveto +0 45 -13 15 -33 0 rrcurveto +-27 0 rlineto +-4 -2 -6 -2 -5 0 rrcurveto +-15 0 -11 4 0 11 rrcurveto +0 32 37 18 44 11 rrcurveto +9 64 rlineto +-63 -20 -69 -97 0 -54 rrcurveto +0 -20 13 -5 16 0 rrcurveto +54 0 rlineto +14 0 14 -11 0 -13 rrcurveto +0 -31 -63 -25 -74 0 rrcurveto +-6 0 -19 1 -23 3 rrcurveto +-28 0 rlineto +-9 -9 rlineto +55 -18 37 -8 39 0 rrcurveto +85 0 51 40 0 71 rrcurveto +closepath +178 -298 rmoveto +0 96 rlineto +-57 383 rlineto +23 -8 rlineto +8 20 9 43 0 31 rrcurveto +-53 19 rlineto +-24 9 -11 14 0 20 rrcurveto +-7 5 rlineto +-16 -38 -7 -38 0 -45 rrcurveto +25 -12 rlineto +61 -414 rlineto +-311 0 rlineto +-98 0 -81 11 0 80 rrcurveto +0 24 4 22 23 52 rrcurveto +-17 9 rlineto +-37 -74 -13 -35 0 -45 rrcurveto +0 -116 87 -13 132 0 rrcurveto +360 0 rlineto +closepath +endchar } ND +/afii62816 { +0 601 hsbw +143 85 hstem +330 31 hstem +441 56 hstem +56 40 vstem +199 28 vstem +301 42 vstem +412 45 vstem +586 49 vstem +457 441 rmoveto +0 45 -13 15 -33 0 rrcurveto +-27 0 rlineto +-4 -2 -6 -2 -5 0 rrcurveto +-15 0 -11 4 0 11 rrcurveto +0 32 37 18 44 11 rrcurveto +9 64 rlineto +-63 -20 -69 -97 0 -54 rrcurveto +0 -20 13 -5 16 0 rrcurveto +54 0 rlineto +14 0 14 -11 0 -13 rrcurveto +0 -31 -63 -25 -74 0 rrcurveto +-6 0 -19 1 -23 3 rrcurveto +-28 0 rlineto +-9 -9 rlineto +55 -18 37 -8 39 0 rrcurveto +85 0 51 40 0 71 rrcurveto +closepath +178 -298 rmoveto +0 96 rlineto +-57 383 rlineto +23 -8 rlineto +8 20 9 43 0 31 rrcurveto +-53 19 rlineto +-24 9 -11 14 0 20 rrcurveto +-7 5 rlineto +-16 -38 -7 -38 0 -45 rrcurveto +25 -12 rlineto +61 -414 rlineto +-311 0 rlineto +-98 0 -81 11 0 80 rrcurveto +0 24 4 22 23 52 rrcurveto +-17 9 rlineto +-37 -74 -13 -35 0 -45 rrcurveto +0 -116 87 -13 132 0 rrcurveto +360 0 rlineto +closepath +endchar } ND +/afii57410 { +0 394 hsbw +143 85 hstem +649 85 hstem +71 61 vstem +372 56 vstem +428 143 rmoveto +0 85 rlineto +-49 95 -78 87 -98 72 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +100 -60 50 -44 47 -69 rrcurveto +-372 0 rlineto +0 -85 rlineto +428 0 rlineto +closepath +endchar } ND +/afii62815 { +0 394 hsbw +143 85 hstem +649 85 hstem +71 61 vstem +372 56 vstem +428 143 rmoveto +0 85 rlineto +-49 95 -78 87 -98 72 rrcurveto +-15 9 -13 10 -11 11 rrcurveto +-22 15 -10 11 0 8 rrcurveto +0 21 84 27 63 21 rrcurveto +102 34 rlineto +0 85 rlineto +-138 -54 rlineto +-119 -46 -53 -48 0 -117 rrcurveto +0 -10 10 -13 20 -16 rrcurveto +58 -44 rlineto +16 15 rlineto +100 -60 50 -44 47 -69 rrcurveto +-372 0 rlineto +0 -85 rlineto +428 0 rlineto +closepath +endchar } ND +/afii57444 { +0 506 hsbw +7 84 hstem +69 36 vstem +500 41 vstem +541 204 rmoveto +0 35 -4 52 -8 68 rrcurveto +-4 20 -3 25 -3 28 rrcurveto +-3 29 -4 31 -6 32 rrcurveto +-11 57 -3 34 0 8 rrcurveto +28 -9 rlineto +3 21 3 11 3 11 rrcurveto +2 13 1 15 0 23 rrcurveto +-7 2 -8 4 -8 5 rrcurveto +-12 6 -10 5 -11 4 rrcurveto +-14 5 -7 10 -2 26 rrcurveto +-8 0 rlineto +-18 -36 -9 -40 0 -43 rrcurveto +22 -12 rlineto +17 -95 rlineto +19 -131 24 -153 0 -71 rrcurveto +0 -69 -136 -34 -93 0 rrcurveto +-104 0 -62 42 0 80 rrcurveto +0 60 29 60 35 65 rrcurveto +-16 9 rlineto +-54 -96 -30 -72 0 -84 rrcurveto +0 -108 85 -40 117 0 rrcurveto +152 0 118 43 0 154 rrcurveto +closepath +endchar } ND +/afii62819 { +0 506 hsbw +7 84 hstem +69 36 vstem +500 41 vstem +541 204 rmoveto +0 35 -4 52 -8 68 rrcurveto +-4 20 -3 25 -3 28 rrcurveto +-3 29 -4 31 -6 32 rrcurveto +-11 57 -3 34 0 8 rrcurveto +28 -9 rlineto +3 21 3 11 3 11 rrcurveto +2 13 1 15 0 23 rrcurveto +-7 2 -8 4 -8 5 rrcurveto +-12 6 -10 5 -11 4 rrcurveto +-14 5 -7 10 -2 26 rrcurveto +-8 0 rlineto +-18 -36 -9 -40 0 -43 rrcurveto +22 -12 rlineto +17 -95 rlineto +19 -131 24 -153 0 -71 rrcurveto +0 -69 -136 -34 -93 0 rrcurveto +-104 0 -62 42 0 80 rrcurveto +0 60 29 60 35 65 rrcurveto +-16 9 rlineto +-54 -96 -30 -72 0 -84 rrcurveto +0 -108 85 -40 117 0 rrcurveto +152 0 118 43 0 154 rrcurveto +closepath +endchar } ND +/afii62817 { +0 207 hsbw +143 85 hstem +192 49 vstem +241 143 rmoveto +0 96 rlineto +-57 383 rlineto +23 -8 rlineto +6 17 7 43 0 34 rrcurveto +-36 12 -45 13 0 37 rrcurveto +-7 5 rlineto +-16 -38 -8 -38 0 -45 rrcurveto +26 -12 rlineto +58 -414 rlineto +-192 0 rlineto +0 -85 rlineto +241 0 rlineto +closepath +endchar } ND +/afii62818 { +0 207 hsbw +143 85 hstem +192 49 vstem +241 143 rmoveto +0 96 rlineto +-57 383 rlineto +23 -8 rlineto +6 17 7 43 0 34 rrcurveto +-36 12 -45 13 0 37 rrcurveto +-7 5 rlineto +-16 -38 -8 -38 0 -45 rrcurveto +26 -12 rlineto +58 -414 rlineto +-192 0 rlineto +0 -85 rlineto +241 0 rlineto +closepath +endchar } ND +/afii57445 { +0 338 hsbw +-212 20 hstem +143 214 hstem +51 45 vstem +287 85 vstem +372 143 rmoveto +0 85 rlineto +-52 79 -35 50 -62 0 rrcurveto +-51 0 -33 -41 -22 -54 rrcurveto +23 -14 rlineto +17 21 19 16 23 0 rrcurveto +16 0 17 -7 17 -13 rrcurveto +4 -4 13 -13 21 -20 rrcurveto +-146 -15 -90 -12 0 -140 rrcurveto +0 -23 28 -85 25 -84 rrcurveto +9 -26 8 -26 7 -29 rrcurveto +9 32 4 17 0 24 rrcurveto +0 22 -4 23 -8 25 rrcurveto +-5 12 -3 13 -3 13 rrcurveto +-3 13 -4 10 -4 12 rrcurveto +-8 24 -3 23 0 22 rrcurveto +0 57 127 13 91 0 rrcurveto +58 0 rlineto +closepath +endchar } ND +/afii62822 { +0 338 hsbw +-212 20 hstem +143 214 hstem +51 45 vstem +287 85 vstem +372 143 rmoveto +0 85 rlineto +-52 79 -35 50 -62 0 rrcurveto +-51 0 -33 -41 -22 -54 rrcurveto +23 -14 rlineto +17 21 19 16 23 0 rrcurveto +16 0 17 -7 17 -13 rrcurveto +4 -4 13 -13 21 -20 rrcurveto +-146 -15 -90 -12 0 -140 rrcurveto +0 -23 28 -85 25 -84 rrcurveto +9 -26 8 -26 7 -29 rrcurveto +9 32 4 17 0 24 rrcurveto +0 22 -4 23 -8 25 rrcurveto +-5 12 -3 13 -3 13 rrcurveto +-3 13 -4 10 -4 12 rrcurveto +-8 24 -3 23 0 22 rrcurveto +0 57 127 13 91 0 rrcurveto +58 0 rlineto +closepath +endchar } ND +/afii62820 { +0 394 hsbw +143 85 hstem +372 56 vstem +428 143 rmoveto +0 85 rlineto +0 48 -39 70 -41 65 rrcurveto +-51 -14 -60 -47 -34 -50 rrcurveto +-33 -48 -41 -24 -54 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +76 0 rlineto +76 0 30 15 38 47 rrcurveto +42 -35 66 -27 49 0 rrcurveto +51 0 rlineto +closepath +-56 96 rmoveto +-4 -6 rlineto +-39 4 -49 23 -22 26 rrcurveto +18 32 17 17 30 7 rrcurveto +24 -33 18 -33 7 -37 rrcurveto +closepath +endchar } ND +/afii62821 { +0 394 hsbw +143 85 hstem +372 56 vstem +428 143 rmoveto +0 85 rlineto +0 48 -39 70 -41 65 rrcurveto +-51 -14 -60 -47 -34 -50 rrcurveto +-33 -48 -41 -24 -54 0 rrcurveto +-75 0 rlineto +0 -85 rlineto +76 0 rlineto +76 0 30 15 38 47 rrcurveto +42 -35 66 -27 49 0 rrcurveto +51 0 rlineto +closepath +-56 96 rmoveto +-4 -6 rlineto +-39 4 -49 23 -22 26 rrcurveto +18 32 17 17 30 7 rrcurveto +24 -33 18 -33 7 -37 rrcurveto +closepath +endchar } ND +/afii57446 { +0 526 hsbw +-72 84 hstem +68 38 vstem +525 35 vstem +378 518 rmoveto +-77 40 rlineto +-35 -68 rlineto +76 -42 rlineto +36 70 rlineto +closepath +182 -375 rmoveto +0 85 rlineto +0 90 -11 47 -34 52 rrcurveto +-41 -100 rlineto +35 -43 16 -57 0 -59 rrcurveto +0 -103 -136 -43 -116 0 rrcurveto +-107 0 -60 42 0 82 rrcurveto +0 44 10 46 47 95 rrcurveto +-20 9 rlineto +-54 -111 -21 -58 0 -84 rrcurveto +0 -112 84 -37 122 0 rrcurveto +179 0 107 48 0 167 rrcurveto +closepath +endchar } ND +/afii62825 { +0 526 hsbw +-72 84 hstem +68 38 vstem +525 35 vstem +378 518 rmoveto +-77 40 rlineto +-35 -68 rlineto +76 -42 rlineto +36 70 rlineto +closepath +182 -375 rmoveto +0 85 rlineto +0 90 -11 47 -34 52 rrcurveto +-41 -100 rlineto +35 -43 16 -57 0 -59 rrcurveto +0 -103 -136 -43 -116 0 rrcurveto +-107 0 -60 42 0 82 rrcurveto +0 44 10 46 47 95 rrcurveto +-20 9 rlineto +-54 -111 -21 -58 0 -84 rrcurveto +0 -112 84 -37 122 0 rrcurveto +179 0 107 48 0 167 rrcurveto +closepath +endchar } ND +/afii62823 { +0 244 hsbw +143 85 hstem +616 20 hstem +243 35 vstem +239 595 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +39 -452 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +endchar } ND +/afii62824 { +0 244 hsbw +143 85 hstem +616 20 hstem +243 35 vstem +239 595 rmoveto +-80 41 rlineto +-36 -71 rlineto +79 -41 rlineto +37 71 rlineto +closepath +39 -452 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +endchar } ND +/afii57447 { +0 282 hsbw +130 76 hstem +26 50 vstem +219 43 vstem +262 287 rmoveto +0 60 -54 25 -110 58 rrcurveto +-30 -82 rlineto +7 -2 rlineto +-22 -51 -27 -60 0 -45 rrcurveto +0 -42 41 -18 45 0 rrcurveto +107 0 43 50 0 107 rrcurveto +closepath +-43 -38 rmoveto +0 -18 -55 -25 -37 0 rrcurveto +-31 0 -20 18 0 34 rrcurveto +0 21 11 14 29 31 rrcurveto +41 -19 62 -35 0 -21 rrcurveto +closepath +endchar } ND +/afii62828 { +0 375 hsbw +143 85 hstem +261 70 hstem +30 92 vstem +409 143 rmoveto +0 85 rlineto +-70 0 rlineto +-29 0 -11 81 -13 72 rrcurveto +-15 84 rlineto +-4 21 -4 19 -4 19 rrcurveto +-3 19 -3 19 -3 21 rrcurveto +-21 -23 -15 -26 0 -23 rrcurveto +0 -6 5 -30 2 -5 rrcurveto +-110 -51 -81 -75 0 -56 rrcurveto +0 -16 55 -11 76 0 rrcurveto +33 0 31 22 20 36 rrcurveto +13 -84 26 -92 55 0 rrcurveto +70 0 rlineto +closepath +-170 218 rmoveto +-18 -20 -19 -10 -19 0 rrcurveto +-32 0 -16 2 -13 7 rrcurveto +21 36 30 17 56 22 rrcurveto +10 -54 rlineto +closepath +endchar } ND +/afii57470 { +0 450 hsbw +143 85 hstem +379 176 hstem +247 48 vstem +365 54 vstem +419 226 rmoveto +0 85 -150 176 -69 68 rrcurveto +-4 -10 -4 -8 -5 -6 rrcurveto +-19 -22 -12 -37 0 -8 rrcurveto +0 -7 11 -11 22 -15 rrcurveto +-19 -6 -8 -6 -13 -22 rrcurveto +-48 -84 rlineto +-8 -15 1 -2 0 -10 rrcurveto +0 -17 23 -15 16 -11 rrcurveto +-43 -12 -20 -3 -26 0 rrcurveto +-44 0 rlineto +0 -85 rlineto +44 0 rlineto +62 0 29 13 69 40 rrcurveto +39 -27 90 -44 30 0 rrcurveto +25 0 31 65 0 36 rrcurveto +closepath +-172 106 rmoveto +0 -22 -18 -18 -25 -16 rrcurveto +-40 22 -20 17 0 14 rrcurveto +0 28 31 22 31 0 rrcurveto +26 0 15 -18 0 -29 rrcurveto +closepath +118 -112 rmoveto +0 -10 -6 -5 -8 0 rrcurveto +-7 0 -13 3 -15 7 rrcurveto +-11 5 -9 5 -10 5 rrcurveto +-9 5 -10 5 -10 5 rrcurveto +24 14 14 31 0 32 rrcurveto +30 -35 40 -44 0 -23 rrcurveto +closepath +endchar } ND +/afii62827 { +0 394 hsbw +-69 86 143 81 357 72 hstem3 +108 30 vstem +286 45 vstem +428 143 rmoveto +0 85 rlineto +-215 0 rlineto +78 39 24 16 0 64 rrcurveto +0 38 -18 44 -20 0 rrcurveto +-71 0 -51 -116 -31 -85 rrcurveto +-124 0 rlineto +0 -85 rlineto +108 0 rlineto +0 -35 rlineto +0 -97 76 -73 89 0 rrcurveto +41 0 17 41 0 49 rrcurveto +0 47 -37 47 -44 21 rrcurveto +178 0 rlineto +closepath +-161 168 rmoveto +0 -34 -60 -25 -50 -14 rrcurveto +30 62 30 57 30 0 rrcurveto +13 0 7 -16 0 -30 rrcurveto +closepath +19 -275 rmoveto +0 -12 -13 -7 -16 0 rrcurveto +-79 0 -40 54 0 76 rrcurveto +59 -10 89 -49 0 -52 rrcurveto +closepath +endchar } ND +/afii57448 { +0 432 hsbw +-77 45 hstem +142 84 hstem +306 79 hstem +298 46 vstem +434 32 vstem +466 172 rmoveto +0 56 rlineto +0 81 -11 76 -64 0 rrcurveto +-58 0 -35 -79 0 -64 rrcurveto +0 -79 54 -21 82 0 rrcurveto +-87 -118 -60 -56 -109 0 rrcurveto +-16 0 -19 3 -19 4 rrcurveto +-18 5 -20 5 -19 3 rrcurveto +-8 -17 rlineto +9 -4 11 -4 11 -3 rrcurveto +11 -3 10 -4 11 -4 rrcurveto +49 -18 39 -8 43 0 rrcurveto +111 0 102 138 0 111 rrcurveto +closepath +-30 54 rmoveto +-66 0 -26 16 0 32 rrcurveto +0 18 15 14 18 0 rrcurveto +34 0 14 -34 11 -46 rrcurveto +closepath +endchar } ND +/afii62829 { +0 432 hsbw +-77 45 hstem +142 84 hstem +306 79 hstem +298 46 vstem +434 32 vstem +466 172 rmoveto +0 56 rlineto +0 81 -11 76 -64 0 rrcurveto +-58 0 -35 -79 0 -64 rrcurveto +0 -79 54 -21 82 0 rrcurveto +-87 -118 -60 -56 -109 0 rrcurveto +-16 0 -19 3 -19 4 rrcurveto +-18 5 -20 5 -19 3 rrcurveto +-8 -17 rlineto +9 -4 11 -4 11 -3 rrcurveto +11 -3 10 -4 11 -4 rrcurveto +49 -18 39 -8 43 0 rrcurveto +111 0 102 138 0 111 rrcurveto +closepath +-30 54 rmoveto +-66 0 -26 16 0 32 rrcurveto +0 18 15 14 18 0 rrcurveto +34 0 14 -34 11 -46 rrcurveto +closepath +endchar } ND +/afii57449 { +0 638 hsbw +-43 83 hstem +167 76 hstem +383 79 hstem +24 40 vstem +339 39 vstem +532 48 vstem +606 391 rmoveto +0 42 -27 29 -42 0 rrcurveto +-99 0 -99 -165 0 -75 rrcurveto +0 -32 25 -23 28 0 rrcurveto +114 0 rlineto +18 0 8 -2 0 -13 rrcurveto +0 -31 -214 -81 -95 0 rrcurveto +-103 0 -56 40 0 79 rrcurveto +0 49 23 64 40 74 rrcurveto +-20 8 rlineto +-82 -151 -1 -20 0 -82 rrcurveto +0 -105 73 -39 110 0 rrcurveto +203 0 170 64 0 181 rrcurveto +0 20 -8 12 -16 3 rrcurveto +-16 2 -14 2 -10 2 rrcurveto +-91 0 rlineto +-35 0 -12 6 0 12 rrcurveto +0 39 82 83 50 0 rrcurveto +33 0 33 -19 23 -29 rrcurveto +0 6 1 8 3 9 rrcurveto +2 10 1 12 0 11 rrcurveto +closepath +endchar } ND +/afii62830 { +0 588 hsbw +-110 81 hstem +39 68 hstem +143 85 hstem +52 45 vstem +345 41 vstem +512 49 vstem +623 143 rmoveto +0 85 rlineto +-86 0 rlineto +-99 0 -93 -53 0 -104 rrcurveto +0 -22 15 -10 42 0 rrcurveto +12 0 48 -3 18 -2 rrcurveto +22 0 10 -6 0 -10 rrcurveto +0 -41 -113 -6 -76 0 rrcurveto +-120 0 -106 26 0 95 rrcurveto +0 22 9 30 19 36 rrcurveto +7 9 6 12 5 10 rrcurveto +6 12 6 10 7 10 rrcurveto +-20 9 rlineto +-67 -105 -23 -40 0 -73 rrcurveto +0 -106 110 -38 123 0 rrcurveto +167 0 109 28 0 150 rrcurveto +0 24 -17 6 -29 3 rrcurveto +-28 2 -14 2 -10 2 rrcurveto +-31 0 rlineto +-31 0 -15 5 0 12 rrcurveto +0 14 51 5 100 0 rrcurveto +86 0 rlineto +closepath +endchar } ND +/afii57450 { +0 638 hsbw +-208 248 hstem +167 76 hstem +383 79 hstem +24 40 vstem +339 39 vstem +532 48 vstem +606 391 rmoveto +0 42 -27 29 -42 0 rrcurveto +-99 0 -99 -165 0 -75 rrcurveto +0 -32 25 -23 28 0 rrcurveto +114 0 rlineto +18 0 8 -2 0 -13 rrcurveto +0 -31 -214 -81 -95 0 rrcurveto +-103 0 -56 40 0 79 rrcurveto +0 49 23 64 40 74 rrcurveto +-20 8 rlineto +-82 -151 -1 -20 0 -82 rrcurveto +0 -105 73 -39 110 0 rrcurveto +203 0 170 64 0 181 rrcurveto +0 20 -8 12 -16 3 rrcurveto +-16 2 -14 2 -10 2 rrcurveto +-91 0 rlineto +-35 0 -12 6 0 12 rrcurveto +0 39 82 83 50 0 rrcurveto +33 0 33 -19 23 -29 rrcurveto +0 6 1 8 3 9 rrcurveto +2 10 1 12 0 11 rrcurveto +closepath +-184 -484 rmoveto +-81 41 rlineto +-36 -70 rlineto +79 -42 rlineto +38 71 rlineto +closepath +-112 -44 rmoveto +-81 41 rlineto +-36 -71 rlineto +79 -41 rlineto +38 71 rlineto +closepath +endchar } ND +/afii62833 { +0 588 hsbw +-212 183 hstem +39 68 hstem +143 85 hstem +52 45 vstem +345 41 vstem +512 49 vstem +623 143 rmoveto +0 85 rlineto +-86 0 rlineto +-99 0 -93 -53 0 -104 rrcurveto +0 -22 15 -10 42 0 rrcurveto +12 0 48 -3 18 -2 rrcurveto +22 0 10 -6 0 -10 rrcurveto +0 -41 -113 -6 -76 0 rrcurveto +-120 0 -106 26 0 95 rrcurveto +0 22 9 30 19 36 rrcurveto +7 9 6 12 5 10 rrcurveto +6 12 6 10 7 10 rrcurveto +-20 9 rlineto +-67 -105 -23 -40 0 -73 rrcurveto +0 -106 110 -38 123 0 rrcurveto +167 0 109 28 0 150 rrcurveto +0 24 -17 6 -29 3 rrcurveto +-28 2 -14 2 -10 2 rrcurveto +-31 0 rlineto +-31 0 -15 5 0 12 rrcurveto +0 14 51 5 100 0 rrcurveto +86 0 rlineto +closepath +-203 -313 rmoveto +-56 39 rlineto +-44 -46 rlineto +55 -35 rlineto +45 42 rlineto +closepath +-101 0 rmoveto +-55 39 rlineto +-46 -46 rlineto +57 -35 rlineto +44 42 rlineto +closepath +endchar } ND +/afii62831 { +0 244 hsbw +143 85 hstem +243 35 vstem +278 143 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +-2 -98 rmoveto +-81 42 rlineto +-36 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-81 41 rlineto +-36 -70 rlineto +79 -41 rlineto +38 70 rlineto +closepath +endchar } ND +/afii62832 { +0 244 hsbw +143 85 hstem +243 35 vstem +278 143 rmoveto +0 119 rlineto +0 95 1 24 -58 75 rrcurveto +-38 -80 rlineto +51 -57 9 -21 0 -70 rrcurveto +-243 0 rlineto +0 -85 rlineto +278 0 rlineto +closepath +-2 -98 rmoveto +-81 42 rlineto +-36 -70 rlineto +79 -42 rlineto +38 70 rlineto +closepath +-112 -44 rmoveto +-81 41 rlineto +-36 -70 rlineto +79 -41 rlineto +38 70 rlineto +closepath +endchar } ND +/afii62834 { +0 544 hsbw +79 79 hstem +501 215 hstem +718 6 hstem +772 31 hstem +380 39 vstem +420 35 vstem +507 659 rmoveto +-23 7 -56 21 -3 34 rrcurveto +-11 3 rlineto +-14 -28 -7 -36 0 -42 rrcurveto +27 -16 rlineto +0 -119 -12 -74 -43 -90 rrcurveto +-16 30 -15 28 -14 24 rrcurveto +-50 80 rlineto +-59 93 -89 142 -58 0 rrcurveto +-23 0 0 -38 0 -35 rrcurveto +0 -63 73 -79 32 0 rrcurveto +4 0 4 1 6 3 rrcurveto +9 4 7 3 5 0 rrcurveto +54 0 44 -117 62 -116 rrcurveto +-38 -48 -47 -38 -55 -29 rrcurveto +-7 -22 -6 -23 0 -24 rrcurveto +0 -16 rlineto +93 0 138 -36 0 122 rrcurveto +0 20 -4 21 -7 21 rrcurveto +-4 6 -3 7 -4 10 rrcurveto +-4 9 -5 11 -6 11 rrcurveto +48 82 25 85 0 93 rrcurveto +0 44 rlineto +28 -14 rlineto +24 88 rlineto +closepath +-127 -475 rmoveto +0 -31 -62 5 -62 0 rrcurveto +38 22 44 38 19 26 rrcurveto +20 -35 3 -11 0 -14 rrcurveto +closepath +-150 624 rmoveto +-6 6 rlineto +-18 -8 -17 -3 -17 0 rrcurveto +-22 0 -40 13 -16 7 rrcurveto +-9 3 -5 1 -1 0 rrcurveto +-24 0 -7 -6 -17 -26 rrcurveto +6 -6 rlineto +9 4 8 2 8 0 rrcurveto +1 0 4 -1 9 -3 rrcurveto +7 -4 13 -4 17 -4 rrcurveto +14 -5 16 -2 16 0 rrcurveto +28 0 24 12 19 24 rrcurveto +closepath +endchar } ND +/afii62835 { +0 601 hsbw +118 14 hstem +143 85 hstem +537 179 hstem +772 31 hstem +394 398 rmoveto +0 140 -228 178 -92 0 rrcurveto +-14 0 -6 -11 0 -20 rrcurveto +0 -69 83 -79 45 0 rrcurveto +6 0 6 6 4 7 rrcurveto +5 7 5 6 5 0 rrcurveto +51 0 92 -126 32 -72 rrcurveto +5 13 1 8 0 12 rrcurveto +closepath +236 -255 rmoveto +0 85 rlineto +-64 0 rlineto +-66 0 12 132 -12 101 rrcurveto +-11 95 -12 95 -16 82 rrcurveto +-6 -11 -6 -13 -6 -16 rrcurveto +-16 -41 rlineto +14 -59 9 -53 0 -62 rrcurveto +0 -209 -172 -64 -246 -73 rrcurveto +0 -14 rlineto +269 0 78 15 92 255 rrcurveto +0 -38 rlineto +0 -110 13 -97 82 0 rrcurveto +64 0 rlineto +closepath +-400 665 rmoveto +-6 6 rlineto +-18 -8 -17 -3 -17 0 rrcurveto +-22 0 -40 13 -16 7 rrcurveto +-9 3 -5 1 -1 0 rrcurveto +-24 0 -7 -6 -17 -26 rrcurveto +6 -6 rlineto +9 4 8 2 8 0 rrcurveto +1 0 4 -1 9 -3 rrcurveto +7 -4 13 -4 17 -4 rrcurveto +14 -5 16 -2 16 0 rrcurveto +28 0 24 12 19 24 rrcurveto +closepath +endchar } ND +/afii62836 { +0 544 hsbw +79 79 hstem +501 215 hstem +718 6 hstem +840 40 hstem +34 25 vstem +380 39 vstem +420 35 vstem +507 659 rmoveto +-23 7 -56 21 -3 34 rrcurveto +-11 3 rlineto +-14 -28 -7 -36 0 -42 rrcurveto +27 -16 rlineto +0 -119 -12 -74 -43 -90 rrcurveto +-16 30 -15 28 -14 24 rrcurveto +-50 80 rlineto +-59 93 -89 142 -58 0 rrcurveto +-23 0 0 -38 0 -35 rrcurveto +0 -63 73 -79 32 0 rrcurveto +4 0 4 1 6 3 rrcurveto +9 4 7 3 5 0 rrcurveto +54 0 44 -117 62 -116 rrcurveto +-38 -48 -47 -38 -55 -29 rrcurveto +-7 -22 -6 -23 0 -24 rrcurveto +0 -16 rlineto +93 0 138 -36 0 122 rrcurveto +0 20 -4 21 -7 21 rrcurveto +-4 6 -3 7 -4 10 rrcurveto +-4 9 -5 11 -6 11 rrcurveto +48 82 25 85 0 93 rrcurveto +0 44 rlineto +28 -14 rlineto +24 88 rlineto +closepath +-127 -475 rmoveto +0 -31 -62 5 -62 0 rrcurveto +38 22 44 38 19 26 rrcurveto +20 -35 3 -11 0 -14 rrcurveto +closepath +-225 616 rmoveto +-19 -8 -2 0 -13 0 rrcurveto +-23 0 -39 23 0 10 rrcurveto +0 8 17 7 15 0 rrcurveto +11 0 11 -5 11 -9 rrcurveto +2 7 3 5 3 4 rrcurveto +2 5 1 4 0 5 rrcurveto +0 14 -11 10 -13 0 rrcurveto +-28 0 -49 -51 0 -22 rrcurveto +0 -16 16 -10 17 -9 rrcurveto +-32 -12 -16 -13 0 -14 rrcurveto +90 31 rlineto +24 6 22 13 0 17 rrcurveto +closepath +endchar } ND +/afii62837 { +0 601 hsbw +118 14 hstem +143 85 hstem +537 179 hstem +840 40 hstem +39 25 vstem +394 398 rmoveto +0 140 -228 178 -92 0 rrcurveto +-14 0 -6 -11 0 -20 rrcurveto +0 -69 83 -79 45 0 rrcurveto +6 0 6 6 4 7 rrcurveto +5 7 5 6 5 0 rrcurveto +51 0 92 -126 32 -72 rrcurveto +5 13 1 8 0 12 rrcurveto +closepath +236 -255 rmoveto +0 85 rlineto +-64 0 rlineto +-66 0 12 132 -12 101 rrcurveto +-11 95 -12 95 -16 82 rrcurveto +-6 -11 -6 -13 -6 -16 rrcurveto +-16 -41 rlineto +14 -59 9 -53 0 -62 rrcurveto +0 -209 -172 -64 -246 -73 rrcurveto +0 -14 rlineto +269 0 78 15 92 255 rrcurveto +0 -38 rlineto +0 -110 13 -97 82 0 rrcurveto +64 0 rlineto +closepath +-470 657 rmoveto +-19 -8 -2 0 -14 0 rrcurveto +-22 0 -39 23 0 10 rrcurveto +0 8 17 7 15 0 rrcurveto +11 0 11 -5 10 -9 rrcurveto +8 12 4 8 0 10 rrcurveto +0 14 -12 10 -12 0 rrcurveto +-28 0 -49 -51 0 -22 rrcurveto +0 -16 16 -10 17 -9 rrcurveto +-33 -12 -16 -13 0 -14 rrcurveto +91 31 rlineto +24 6 22 13 0 17 rrcurveto +closepath +endchar } ND +/afii62838 { +0 544 hsbw +-4 40 hstem +79 79 hstem +501 215 hstem +718 6 hstem +183 25 vstem +285 19 vstem +380 39 vstem +420 35 vstem +507 659 rmoveto +-23 7 -56 21 -3 34 rrcurveto +-11 3 rlineto +-14 -28 -7 -36 0 -42 rrcurveto +27 -16 rlineto +0 -119 -12 -74 -43 -90 rrcurveto +-16 30 -15 28 -14 24 rrcurveto +-50 80 rlineto +-59 93 -89 142 -58 0 rrcurveto +-23 0 0 -38 0 -35 rrcurveto +0 -63 73 -79 32 0 rrcurveto +4 0 4 1 6 3 rrcurveto +9 4 7 3 5 0 rrcurveto +54 0 44 -117 62 -116 rrcurveto +-38 -48 -47 -38 -55 -29 rrcurveto +-7 -22 -6 -23 0 -24 rrcurveto +0 -16 rlineto +93 0 138 -36 0 122 rrcurveto +0 20 -4 21 -7 21 rrcurveto +-4 6 -3 7 -4 10 rrcurveto +-4 9 -5 11 -6 11 rrcurveto +48 82 25 85 0 93 rrcurveto +0 44 rlineto +28 -14 rlineto +24 88 rlineto +closepath +-127 -475 rmoveto +0 -31 -62 5 -62 0 rrcurveto +38 22 44 38 19 26 rrcurveto +20 -35 3 -11 0 -14 rrcurveto +closepath +-76 -228 rmoveto +-11 -2 -6 -3 -2 -2 rrcurveto +-15 0 rlineto +-23 0 -39 23 0 9 rrcurveto +0 8 17 7 15 0 rrcurveto +11 0 11 -4 10 -10 rrcurveto +8 12 4 8 0 10 rrcurveto +0 14 -11 10 -13 0 rrcurveto +-28 0 -49 -49 0 -24 rrcurveto +0 -13 16 -10 17 -11 rrcurveto +-33 -11 -16 -13 0 -16 rrcurveto +91 31 rlineto +6 4 6 3 6 1 rrcurveto +14 5 14 12 0 11 rrcurveto +closepath +endchar } ND +/afii62839 { +0 601 hsbw +-4 40 hstem +118 14 hstem +143 85 hstem +537 179 hstem +105 25 vstem +207 20 vstem +394 398 rmoveto +0 140 -228 178 -92 0 rrcurveto +-14 0 -6 -11 0 -20 rrcurveto +0 -69 83 -79 45 0 rrcurveto +6 0 6 6 4 7 rrcurveto +5 7 5 6 5 0 rrcurveto +51 0 92 -126 32 -72 rrcurveto +5 13 1 8 0 12 rrcurveto +closepath +236 -255 rmoveto +0 85 rlineto +-64 0 rlineto +-66 0 12 132 -12 101 rrcurveto +-11 95 -12 95 -16 82 rrcurveto +-6 -11 -6 -13 -6 -16 rrcurveto +-16 -41 rlineto +14 -59 9 -53 0 -62 rrcurveto +0 -209 -172 -64 -246 -73 rrcurveto +0 -14 rlineto +269 0 78 15 92 255 rrcurveto +0 -38 rlineto +0 -110 13 -97 82 0 rrcurveto +64 0 rlineto +closepath +-403 -187 rmoveto +-12 -2 -5 -3 -3 -2 rrcurveto +-15 0 rlineto +-22 0 -40 23 0 9 rrcurveto +0 8 17 7 15 0 rrcurveto +12 0 11 -4 10 -10 rrcurveto +2 7 3 5 3 4 rrcurveto +2 5 1 4 0 5 rrcurveto +0 14 -11 10 -13 0 rrcurveto +-28 0 -49 -49 0 -24 rrcurveto +0 -13 17 -10 17 -11 rrcurveto +-33 -11 -16 -13 0 -16 rrcurveto +91 31 rlineto +6 4 5 3 6 1 rrcurveto +14 5 15 12 0 11 rrcurveto +closepath +endchar } ND +/afii62840 { +0 544 hsbw +79 79 hstem +501 215 hstem +718 6 hstem +380 39 vstem +420 35 vstem +507 659 rmoveto +-23 7 -56 21 -3 34 rrcurveto +-11 3 rlineto +-14 -28 -7 -36 0 -42 rrcurveto +27 -16 rlineto +0 -119 -12 -74 -43 -90 rrcurveto +-16 30 -15 28 -14 24 rrcurveto +-50 80 rlineto +-59 93 -89 142 -58 0 rrcurveto +-23 0 0 -38 0 -35 rrcurveto +0 -63 73 -79 32 0 rrcurveto +4 0 4 1 6 3 rrcurveto +9 4 7 3 5 0 rrcurveto +54 0 44 -117 62 -116 rrcurveto +-38 -48 -47 -38 -55 -29 rrcurveto +-7 -22 -6 -23 0 -24 rrcurveto +0 -16 rlineto +93 0 138 -36 0 122 rrcurveto +0 20 -4 21 -7 21 rrcurveto +-4 6 -3 7 -4 10 rrcurveto +-4 9 -5 11 -6 11 rrcurveto +48 82 25 85 0 93 rrcurveto +0 44 rlineto +28 -14 rlineto +24 88 rlineto +closepath +-127 -475 rmoveto +0 -31 -62 5 -62 0 rrcurveto +38 22 44 38 19 26 rrcurveto +20 -35 3 -11 0 -14 rrcurveto +closepath +endchar } ND +/afii62841 { +0 601 hsbw +118 14 hstem +143 85 hstem +537 179 hstem +394 398 rmoveto +0 140 -228 178 -92 0 rrcurveto +-14 0 -6 -11 0 -20 rrcurveto +0 -69 83 -79 45 0 rrcurveto +6 0 6 6 4 7 rrcurveto +5 7 5 6 5 0 rrcurveto +51 0 92 -126 32 -72 rrcurveto +5 13 1 8 0 12 rrcurveto +closepath +236 -255 rmoveto +0 85 rlineto +-64 0 rlineto +-66 0 12 132 -12 101 rrcurveto +-11 95 -12 95 -16 82 rrcurveto +-6 -11 -6 -13 -6 -16 rrcurveto +-16 -41 rlineto +14 -59 9 -53 0 -62 rrcurveto +0 -209 -172 -64 -246 -73 rrcurveto +0 -14 rlineto +269 0 78 15 92 255 rrcurveto +0 -38 rlineto +0 -110 13 -97 82 0 rrcurveto +64 0 rlineto +closepath +endchar } ND +/glyph1021 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1022 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1023 { +0 201 hsbw +201 774 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 17 0 34 rrcurveto +closepath +endchar } ND +/_1024 { +0 201 hsbw +34 167 vstem +201 780 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 16 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -29 -13 -26 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +32 14 27 11 26 9 rrcurveto +24 8 20 8 14 7 rrcurveto +7 7 5 4 5 4 rrcurveto +5 6 2 8 0 16 rrcurveto +closepath +endchar } ND +/glyph1025 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1026 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1027 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1028 { +0 165 hsbw +605 49 hstem +717 39 hstem +34 20 vstem +135 30 vstem +165 683 rmoveto +0 38 -29 35 -34 0 rrcurveto +-39 0 -29 -46 0 -49 rrcurveto +0 -36 18 -20 35 0 rrcurveto +44 0 34 38 0 40 rrcurveto +closepath +-30 -13 rmoveto +0 -12 -12 -4 -17 0 rrcurveto +-30 0 -22 4 0 25 rrcurveto +0 16 12 18 18 0 rrcurveto +17 0 34 -29 0 -18 rrcurveto +closepath +endchar } ND +/_1029 { +0 211 hsbw +605 109 hstem +34 22 vstem +196 10 vstem +209 721 rmoveto +0 21 rlineto +-2 6 -1 7 0 7 rrcurveto +-10 -3 rlineto +0 -28 -14 -37 -24 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-8 -22 -5 -14 0 -17 rrcurveto +0 -32 14 -20 27 0 rrcurveto +20 0 18 17 14 25 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 14 44 0 42 rrcurveto +closepath +endchar } ND +/_1030 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1031 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1032 { +0 209 hsbw +708 20 hstem +777 40 hstem +110 25 vstem +143 66 vstem +209 686 rmoveto +0 6 -2 5 -3 4 rrcurveto +-3 2 -3 2 -2 3 rrcurveto +-2 3 -2 2 -4 1 rrcurveto +13 36 2 7 0 14 rrcurveto +0 25 -16 21 -17 0 rrcurveto +-30 0 -30 -39 0 -42 rrcurveto +0 -20 14 -16 19 -12 rrcurveto +-24 -28 -52 -40 -32 -15 rrcurveto +36 0 rlineto +16 0 20 11 24 24 rrcurveto +4 2 4 5 5 7 rrcurveto +5 7 7 7 9 8 rrcurveto +40 -25 rlineto +2 12 2 12 0 11 rrcurveto +closepath +-37 55 rmoveto +0 -5 rlineto +-1 -2 -1 -3 -1 -3 rrcurveto +-22 16 rlineto +-8 8 -4 7 0 8 rrcurveto +0 4 4 6 7 0 rrcurveto +10 0 16 -19 0 -17 rrcurveto +closepath +endchar } ND +/_1033 { +0 237 hsbw +605 39 hstem +695 20 hstem +764 30 hstem +85 20 vstem +139 31 vstem +202 35 vstem +237 763 rmoveto +0 16 -15 15 -17 0 rrcurveto +-35 0 -31 -40 0 -31 rrcurveto +0 -18 15 -16 14 -12 rrcurveto +-21 -16 -20 -11 -22 -6 rrcurveto +0 8 rlineto +0 9 5 14 0 11 rrcurveto +0 28 -13 25 -22 0 rrcurveto +-32 0 -5 -34 -4 -42 rrcurveto +2 7 3 4 3 3 rrcurveto +2 3 2 3 1 2 rrcurveto +6 7 6 4 7 0 rrcurveto +12 0 7 -15 0 -14 rrcurveto +0 -12 -2 -8 -11 -17 rrcurveto +-4 -5 -5 -8 -5 -12 rrcurveto +50 0 44 20 34 39 rrcurveto +42 -33 rlineto +2 13 1 14 0 16 rrcurveto +0 8 -7 7 -9 7 rrcurveto +14 22 8 21 0 24 rrcurveto +closepath +-35 -29 rmoveto +0 -6 -2 -7 -4 -6 rrcurveto +-4 6 -4 3 -4 2 rrcurveto +-4 1 -1 2 0 2 rrcurveto +-6 6 -3 7 0 6 rrcurveto +0 9 3 5 8 0 rrcurveto +12 0 9 -16 0 -14 rrcurveto +closepath +endchar } ND +/glyph1034 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1035 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1036 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1037 { +0 211 hsbw +605 109 hstem +196 10 vstem +204 840 rmoveto +-70 -30 -49 -20 -26 -10 rrcurveto +-15 -14 -7 -13 0 -14 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 19 0 32 rrcurveto +closepath +5 -119 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-4 -12 -3 -9 -2 -5 rrcurveto +-3 -10 -1 -9 0 -8 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +10 -7 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +endchar } ND +/_1038 { +0 211 hsbw +605 109 hstem +196 10 vstem +201 917 rmoveto +-91 -36 -76 -3 0 -61 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 15 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -14 0 -32 rrcurveto +32 14 27 11 26 9 rrcurveto +24 8 20 8 14 7 rrcurveto +7 7 5 4 5 4 rrcurveto +5 6 2 8 0 15 rrcurveto +closepath +8 -123 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -38 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-4 -12 -3 -9 -2 -5 rrcurveto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -20 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +10 -7 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +endchar } ND +/_1039 { +0 211 hsbw +696 54 hstem +38 18 vstem +211 811 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -27 -13 -39 -25 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -45 -8 -31 -30 0 rrcurveto +-12 0 -5 12 0 15 rrcurveto +0 28 rlineto +-9 -5 rlineto +-1 -7 -2 -5 -2 -3 rrcurveto +-3 -3 -1 -4 0 -4 rrcurveto +-3 -10 -1 -8 0 -8 rrcurveto +0 -32 14 -20 27 0 rrcurveto +19 0 19 17 14 25 rrcurveto +12 -10 9 -2 12 0 rrcurveto +35 0 16 41 0 44 rrcurveto +closepath +-7 -104 rmoveto +-34 -16 -29 -13 -26 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/_1040 { +0 211 hsbw +748 53 hstem +885 20 hstem +196 13 vstem +209 863 rmoveto +0 20 rlineto +0 7 -2 7 -1 8 rrcurveto +-10 -4 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -45 -8 -31 -30 0 rrcurveto +-12 0 -5 12 0 15 rrcurveto +0 27 rlineto +-9 -3 rlineto +-9 -27 rlineto +-3 -10 -1 -8 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 20 16 12 25 rrcurveto +10 -8 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +-5 -96 rmoveto +-70 -29 -49 -20 -27 -10 rrcurveto +-14 -14 -7 -14 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 15 rrcurveto +closepath +0 -60 rmoveto +-70 -30 -49 -20 -27 -11 rrcurveto +-14 -14 -7 -13 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/_1041 { +0 211 hsbw +606 109 hstem +878 19 hstem +110 30 vstem +196 10 vstem +211 774 rmoveto +0 27 3 8 -26 12 rrcurveto +2 7 2 5 3 2 rrcurveto +2 3 2 3 0 1 rrcurveto +3 7 2 7 0 7 rrcurveto +0 18 -19 16 -18 0 rrcurveto +-30 0 -27 -34 0 -28 rrcurveto +0 -16 10 -11 15 -14 rrcurveto +-19 -11 -18 -9 -15 -7 rrcurveto +-4 -3 -8 -3 -9 -3 rrcurveto +-9 -4 -10 -5 -12 -6 rrcurveto +10 -6 8 -2 10 0 rrcurveto +23 0 25 9 23 20 rrcurveto +6 7 8 6 10 7 rrcurveto +11 -4 7 -2 3 0 rrcurveto +12 -3 12 -1 12 0 rrcurveto +closepath +-2 -52 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -38 -25 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-4 -12 -3 -9 -2 -5 rrcurveto +-3 -10 -1 -9 0 -8 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +10 -7 11 -5 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +-37 126 rmoveto +0 -2 -1 -3 -1 -2 rrcurveto +-2 -2 -1 -3 0 -3 rrcurveto +-23 12 -4 7 0 15 rrcurveto +0 5 2 6 4 0 rrcurveto +14 0 12 -17 0 -13 rrcurveto +closepath +endchar } ND +/_1042 { +0 226 hsbw +605 109 hstem +834 43 hstem +902 31 hstem +74 26 vstem +128 31 vstem +196 10 vstem +224 885 rmoveto +2 38 -13 10 -20 0 rrcurveto +-30 0 -35 -40 0 -32 rrcurveto +0 -19 11 -9 18 -19 rrcurveto +-21 -15 -22 -11 -22 -6 rrcurveto +2 12 3 8 3 4 rrcurveto +0 18 rlineto +0 26 -14 27 -22 0 rrcurveto +-32 0 -5 -34 -4 -42 rrcurveto +13 21 rlineto +6 8 6 4 7 0 rrcurveto +12 0 7 -16 0 -13 rrcurveto +0 -10 -4 -11 -6 -12 rrcurveto +-17 -29 rlineto +50 0 44 20 34 39 rrcurveto +42 -33 rlineto +2 17 1 14 0 12 rrcurveto +0 8 -6 6 -9 8 rrcurveto +13 22 3 14 3 15 rrcurveto +closepath +-15 -164 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -47 -8 -29 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-8 -22 -5 -15 0 -16 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +-18 151 rmoveto +0 -7 -2 -6 -4 -5 rrcurveto +-19 14 -7 8 0 12 rrcurveto +0 8 3 6 12 0 rrcurveto +8 0 9 -14 0 -16 rrcurveto +closepath +endchar } ND +/_1043 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1044 { +0 201 hsbw +201 80 rmoveto +-70 -30 -49 -20 -26 -10 rrcurveto +-15 -14 -7 -13 0 -14 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 17 0 34 rrcurveto +closepath +endchar } ND +/_1045 { +0 201 hsbw +34 167 vstem +201 44 rmoveto +-34 -15 -30 -12 -25 -9 rrcurveto +-43 -18 -35 -13 0 -34 rrcurveto +65 27 47 19 30 11 rrcurveto +16 14 9 14 0 16 rrcurveto +closepath +0 -72 rmoveto +-92 -37 -75 -6 0 -59 rrcurveto +65 27 47 19 30 11 rrcurveto +16 15 9 15 0 15 rrcurveto +closepath +endchar } ND +/glyph1046 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1047 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1048 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1049 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1050 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1051 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1052 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1053 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1054 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1055 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1056 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1057 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1058 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1059 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1060 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1061 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1062 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1063 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1064 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1065 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1066 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1067 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1068 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1069 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1070 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1071 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1072 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1073 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1074 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1075 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1076 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1077 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1078 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1079 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1080 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1081 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1082 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1083 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1084 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1085 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1086 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1087 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1088 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1089 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1090 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1091 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1092 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1093 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1094 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1095 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1096 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1097 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1098 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1099 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1100 { +0 319 hsbw +137 120 hstem +302 412 hstem +146 28 vstem +223 639 rmoveto +0 40 -26 35 -37 0 rrcurveto +-36 0 -25 -35 0 -40 rrcurveto +0 -15 4 -28 8 -40 rrcurveto +7 -29 5 -25 3 -20 rrcurveto +2 -21 3 -14 3 -9 rrcurveto +8 -50 4 -45 0 -41 rrcurveto +28 0 rlineto +0 44 4 46 9 48 rrcurveto +0 6 2 11 5 17 rrcurveto +5 17 5 25 6 33 rrcurveto +8 37 5 31 0 22 rrcurveto +closepath +-3 -443 rmoveto +0 33 -27 28 -32 0 rrcurveto +-35 0 -26 -28 0 -33 rrcurveto +0 -32 26 -27 34 0 rrcurveto +33 0 27 27 0 32 rrcurveto +closepath +endchar } ND +/glyph1101 { +0 319 hsbw +137 130 hstem +97 129 vstem +226 202 rmoveto +0 36 -29 29 -36 0 rrcurveto +-35 0 -29 -31 0 -34 rrcurveto +0 -36 28 -29 36 0 rrcurveto +36 0 29 29 0 36 rrcurveto +closepath +endchar } ND +/glyph1102 { +0 319 hsbw +137 130 hstem +412 130 hstem +97 128 vstem +225 478 rmoveto +0 34 -29 30 -36 0 rrcurveto +-36 0 -27 -30 0 -34 rrcurveto +0 -38 28 -28 35 0 rrcurveto +36 0 29 28 0 38 rrcurveto +closepath +0 -276 rmoveto +0 36 -29 29 -36 0 rrcurveto +-36 0 -27 -31 0 -34 rrcurveto +0 -36 28 -29 35 0 rrcurveto +36 0 29 29 0 36 rrcurveto +closepath +endchar } ND +/glyph1103 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1104 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1105 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1106 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1107 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1108 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1109 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1110 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1111 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1112 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1113 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1114 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1115 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1116 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1117 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1118 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1119 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1120 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1121 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1122 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1123 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1124 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1125 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1126 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1127 { +0 125 hsbw +143 85 hstem +0 159 vstem +159 143 rmoveto +0 85 rlineto +-159 0 rlineto +0 -85 rlineto +159 0 rlineto +closepath +endchar } ND +/_1128 { +0 1000 hsbw +143 85 hstem +0 1034 vstem +1034 143 rmoveto +0 85 rlineto +-1034 0 rlineto +0 -85 rlineto +1034 0 rlineto +closepath +endchar } ND +/_1129 { +0 2000 hsbw +143 85 hstem +0 2028 vstem +2028 143 rmoveto +0 85 rlineto +-2028 0 rlineto +0 -85 rlineto +2028 0 rlineto +closepath +endchar } ND +/Ohorn { +0 857 hsbw +-12 81 hstem +622 102 hstem +48 98 vstem +635 85 vstem +786 48 vstem +146 347 rmoveto +0 180 80 120 166 0 rrcurveto +145 0 98 -115 0 -175 rrcurveto +0 -168 -87 -120 -158 0 rrcurveto +-153 0 -91 119 0 159 rrcurveto +closepath +594 275 rmoveto +46 0 rlineto +0 -62 -24 -25 -53 -29 rrcurveto +-48 136 -122 87 -148 0 rrcurveto +-216 0 -127 -158 0 -222 rrcurveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 39 -5 37 -8 36 rrcurveto +80 41 34 41 0 92 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/ohorn { +0 656 hsbw +-12 73 hstem +429 102 hstem +33 91 vstem +429 90 vstem +577 48 vstem +124 259 rmoveto +0 113 48 86 104 0 rrcurveto +100 0 53 -84 0 -112 rrcurveto +0 -117 -47 -84 -106 0 rrcurveto +-105 0 -47 85 0 113 rrcurveto +closepath +407 170 rmoveto +46 0 rlineto +0 -55 -18 -23 -44 -28 rrcurveto +-20 126 -92 81 -127 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +0 -163 88 -108 155 0 rrcurveto +143 0 100 102 0 177 rrcurveto +0 14 rlineto +75 41 31 39 0 90 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/Uhorn { +0 854 hsbw +-12 85 hstem +439 36 hstem +614 102 hstem +79 94 vstem +547 95 vstem +765 48 vstem +719 614 rmoveto +46 0 rlineto +0 -103 -42 -28 -81 -8 rrcurveto +0 241 rlineto +-95 0 rlineto +0 -413 rlineto +0 -164 -39 -66 -154 0 rrcurveto +-141 0 -40 81 0 149 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -205 71 -109 212 0 rrcurveto +189 0 91 108 0 206 rrcurveto +0 137 rlineto +110 4 61 55 0 137 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/uhorn { +0 669 hsbw +-12 76 hstem +243 37 hstem +417 102 hstem +64 88 vstem +406 78 vstem +591 48 vstem +545 417 rmoveto +46 0 rlineto +0 -93 -37 -32 -70 -12 rrcurveto +0 239 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-96 0 -11 52 0 115 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -142 69 -67 108 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +78 0 rlineto +0 243 rlineto +101 9 54 54 0 132 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +endchar } ND +/_1134 { +0 0 hsbw +876 20 hstem +-268 111 vstem +-155 64 vstem +-91 819 rmoveto +-66 77 rlineto +-111 0 rlineto +113 -77 rlineto +64 0 rlineto +closepath +endchar } ND +/_1135 { +0 0 hsbw +876 20 hstem +-477 110 vstem +-364 63 vstem +-301 819 rmoveto +-66 77 rlineto +-110 0 rlineto +113 -77 rlineto +63 0 rlineto +closepath +endchar } ND +/_1136 { +0 0 hsbw +755 137 hstem +-306 71 vstem +-235 755 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/f006 { +0 0 hsbw +876 20 hstem +-209 63 vstem +-143 110 vstem +-143 896 rmoveto +-66 -77 rlineto +63 0 rlineto +113 77 rlineto +-110 0 rlineto +closepath +endchar } ND +/f007 { +0 0 hsbw +876 20 hstem +-395 63 vstem +-329 110 vstem +-329 896 rmoveto +-66 -77 rlineto +63 0 rlineto +113 77 rlineto +-110 0 rlineto +closepath +endchar } ND +/f009 { +0 0 hsbw +755 137 hstem +-319 71 vstem +-253 892 rmoveto +-66 -137 rlineto +71 0 rlineto +113 137 rlineto +-118 0 rlineto +closepath +endchar } ND +/combininghookabove { +0 0 hsbw +738 55 hstem +849 47 hstem +-162 55 vstem +-100 81 vstem +-134 796 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 28 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-34 0 -23 -1 -13 -2 rrcurveto +5 -44 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f010 { +0 0 hsbw +803 27 hstem +866 30 hstem +-176 46 vstem +-124 76 vstem +-157 831 rmoveto +-19 -1 rlineto +0 -27 rlineto +46 0 rlineto +0 11 rlineto +56 4 26 13 0 21 rrcurveto +0 29 -44 15 -86 0 rrcurveto +-66 0 rlineto +6 -34 rlineto +12 2 25 2 5 0 rrcurveto +28 0 20 -2 12 -4 rrcurveto +9 -4 4 -3 -1 -4 rrcurveto +0 -8 -8 -5 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/f013 { +0 0 hsbw +738 55 hstem +849 47 hstem +-299 55 vstem +-237 82 vstem +-271 796 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +61 7 28 19 0 30 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +6 -44 rlineto +46 0 rlineto +40 0 38 -1 0 -30 rrcurveto +0 -9 -8 -7 -18 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f011 { +0 0 hsbw +803 27 hstem +866 30 hstem +-382 46 vstem +-330 76 vstem +-363 831 rmoveto +-19 -1 rlineto +0 -27 rlineto +46 0 rlineto +0 11 rlineto +56 4 26 13 0 21 rrcurveto +0 29 -44 15 -86 0 rrcurveto +-66 0 rlineto +6 -34 rlineto +11 2 26 2 5 0 rrcurveto +28 0 20 -2 12 -4 rrcurveto +9 -4 4 -3 -1 -4 rrcurveto +0 -8 -8 -5 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/f01c { +0 0 hsbw +787 111 hstem +-298 65 vstem +-35 64 vstem +-298 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -11 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -21 0 rrcurveto +-58 0 -41 -46 0 -65 rrcurveto +closepath +endchar } ND +/f015 { +0 0 hsbw +812 84 hstem +-505 47 vstem +-226 48 vstem +-505 811 rmoveto +47 0 rlineto +0 24 13 13 25 0 rrcurveto +22 0 21 -5 22 -10 rrcurveto +33 -15 28 -6 20 0 rrcurveto +62 0 32 28 2 56 rrcurveto +-48 0 rlineto +-3 -23 -12 -11 -20 0 rrcurveto +-22 0 -20 4 -20 8 rrcurveto +-34 14 -28 7 -21 0 rrcurveto +-58 0 -41 -31 0 -53 rrcurveto +closepath +endchar } ND +/combiningtildeaccent { +0 0 hsbw +802 65 hstem +-444 65 vstem +-181 64 vstem +-444 755 rmoveto +65 0 rlineto +0 31 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -11 -14 -20 0 rrcurveto +-11 0 -16 4 -19 10 rrcurveto +-35 18 -27 9 -21 0 rrcurveto +-58 0 -41 -46 0 -66 rrcurveto +closepath +endchar } ND +/_1147 { +0 0 hsbw +729 38 hstem +-146 38 vstem +100 39 vstem +-146 800 rmoveto +24 -50 63 -21 55 0 rrcurveto +64 0 57 18 22 53 rrcurveto +-39 0 rlineto +-19 -24 -49 -9 -36 0 rrcurveto +-37 0 -48 11 -19 22 rrcurveto +-38 0 rlineto +closepath +endchar } ND +/_1148 { +0 0 hsbw +761 28 hstem +-146 85 -44 95 68 85 vstem3 +3 761 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +endchar } ND +/f02c { +0 0 hsbw +-159 100 hstem +-124 100 vstem +-124 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/dongsign { +0 513 hsbw +120 45 hstem +207 51 hstem +536 50 hstem +631 85 hstem +78 63 vstem +336 56 vstem +331 631 rmoveto +0 -95 rlineto +-24 33 -34 17 -42 0 rrcurveto +-97 0 -56 -74 0 -116 rrcurveto +0 -101 59 -88 97 0 rrcurveto +44 0 34 18 23 36 rrcurveto +0 -45 rlineto +57 0 rlineto +0 415 rlineto +50 0 rlineto +0 45 rlineto +-50 0 rlineto +0 40 rlineto +-61 0 rlineto +0 -40 rlineto +-46 0 rlineto +0 -45 rlineto +46 0 rlineto +closepath +-190 -235 rmoveto +0 88 36 52 60 0 rrcurveto +61 0 38 -55 0 -90 rrcurveto +0 -82 -38 -51 -58 0 rrcurveto +-60 0 -39 54 0 84 rrcurveto +closepath +301 -276 rmoveto +0 45 rlineto +-364 0 rlineto +0 -45 rlineto +364 0 rlineto +closepath +endchar } ND +/onethird { +0 834 hsbw +-23 57 hstem +153 52 hstem +298 430 hstem +162 70 vstem +649 77 vstem +747 76 vstem +111 -28 rmoveto +77 0 rlineto +538 756 rlineto +-77 0 rlineto +-538 -756 rlineto +closepath +51 386 rmoveto +70 0 rlineto +0 367 rlineto +-52 0 rlineto +-35 -45 -43 -31 -50 -16 rrcurveto +0 -60 rlineto +40 10 36 19 34 26 rrcurveto +0 -270 rlineto +closepath +362 -276 rmoveto +14 -70 50 -35 87 0 rrcurveto +81 0 67 41 0 72 rrcurveto +0 48 -28 31 -56 14 rrcurveto +44 13 23 26 0 39 rrcurveto +0 61 -45 31 -89 0 rrcurveto +-79 0 -35 -24 -26 -69 rrcurveto +70 -11 rlineto +13 32 23 17 33 0 rrcurveto +38 0 20 -15 0 -28 rrcurveto +0 -34 -26 -17 -50 1 rrcurveto +-10 -52 rlineto +26 0 rlineto +52 0 26 -18 0 -36 rrcurveto +0 -36 -31 -29 -46 0 rrcurveto +-37 0 -26 15 -12 40 rrcurveto +-71 -7 rlineto +closepath +endchar } ND +/twothirds { +0 834 hsbw +-23 57 hstem +153 52 hstem +298 55 hstem +354 374 hstem +111 77 vstem +238 76 vstem +725 76 vstem +111 -28 rmoveto +77 0 rlineto +538 756 rlineto +-77 0 rlineto +-538 -756 rlineto +closepath +408 110 rmoveto +14 -70 51 -35 86 0 rrcurveto +81 0 67 41 0 72 rrcurveto +0 48 -28 31 -56 14 rrcurveto +44 13 23 26 0 39 rrcurveto +0 61 -45 31 -89 0 rrcurveto +-79 0 -35 -24 -26 -69 rrcurveto +70 -11 rlineto +13 32 23 17 34 0 rrcurveto +38 0 20 -15 0 -28 rrcurveto +0 -34 -26 -17 -51 1 rrcurveto +-10 -52 rlineto +27 0 rlineto +51 0 26 -18 0 -36 rrcurveto +0 -36 -31 -29 -45 0 rrcurveto +-38 0 -25 14 -13 41 rrcurveto +-71 -7 rlineto +closepath +-507 276 rmoveto +304 0 rlineto +0 59 rlineto +-188 0 rlineto +12 12 19 16 27 19 rrcurveto +86 60 42 30 0 71 rrcurveto +0 68 -63 32 -79 0 rrcurveto +-82 0 -50 -36 -18 -70 rrcurveto +74 -8 rlineto +13 44 18 12 43 0 rrcurveto +45 0 23 -18 0 -36 rrcurveto +0 -46 -35 -11 -67 -49 rrcurveto +-79 -57 -41 -50 -4 -42 rrcurveto +closepath +endchar } ND +/f008 { +0 0 hsbw +583 137 hstem +-161 71 vstem +-95 720 rmoveto +-66 -137 rlineto +71 0 rlineto +112 137 rlineto +-117 0 rlineto +closepath +endchar } ND +/_1154 { +0 0 hsbw +583 137 hstem +-319 71 vstem +-253 720 rmoveto +-66 -137 rlineto +71 0 rlineto +113 137 rlineto +-118 0 rlineto +closepath +endchar } ND +/_1155 { +0 0 hsbw +583 137 hstem +-133 70 vstem +-63 583 rmoveto +-65 137 rlineto +-118 0 rlineto +113 -137 rlineto +70 0 rlineto +closepath +endchar } ND +/f00f { +0 0 hsbw +583 137 hstem +-306 71 vstem +-235 583 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/f012 { +0 0 hsbw +583 59 hstem +705 51 hstem +-142 55 vstem +-80 82 vstem +-114 645 rmoveto +-28 -3 rlineto +0 -59 rlineto +55 0 rlineto +0 24 rlineto +61 8 28 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -23 -2 -13 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +40 0 38 -1 0 -30 rrcurveto +0 -12 -8 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f014 { +0 0 hsbw +583 59 hstem +705 51 hstem +-299 55 vstem +-237 82 vstem +-271 645 rmoveto +-28 -3 rlineto +0 -59 rlineto +55 0 rlineto +0 24 rlineto +61 8 28 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -13 -2 rrcurveto +6 -47 rlineto +46 0 rlineto +40 0 38 -1 0 -30 rrcurveto +0 -12 -8 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f016 { +0 0 hsbw +787 111 hstem +-527 65 vstem +-264 64 vstem +-527 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -11 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -21 0 rrcurveto +-58 0 -41 -46 0 -65 rrcurveto +closepath +endchar } ND +/f017 { +0 0 hsbw +787 111 hstem +-630 65 vstem +-367 63 vstem +-630 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 31 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-60 0 -40 -46 1 -65 rrcurveto +closepath +endchar } ND +/f018 { +0 0 hsbw +787 111 hstem +-664 65 vstem +-401 64 vstem +-664 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-11 0 -14 5 -20 10 rrcurveto +-34 17 -29 9 -20 0 rrcurveto +-58 0 -42 -46 1 -65 rrcurveto +closepath +endchar } ND +/f019 { +0 0 hsbw +642 65 hstem +-444 65 vstem +-181 64 vstem +-444 595 rmoveto +65 0 rlineto +0 26 16 21 21 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +55 0 39 36 2 75 rrcurveto +-64 0 rlineto +-4 -34 -11 -8 -20 0 rrcurveto +-11 0 -16 4 -19 10 rrcurveto +-35 18 -27 9 -21 0 rrcurveto +-59 0 -40 -47 0 -65 rrcurveto +closepath +endchar } ND +/f01a { +0 0 hsbw +642 65 hstem +-542 65 vstem +-278 63 vstem +-542 595 rmoveto +65 0 rlineto +0 26 14 21 24 0 rrcurveto +10 0 15 -6 22 -12 rrcurveto +33 -18 28 -9 20 0 rrcurveto +55 0 40 36 1 75 rrcurveto +-63 0 rlineto +-5 -34 -9 -8 -22 0 rrcurveto +-11 0 -16 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-60 0 -40 -47 0 -65 rrcurveto +closepath +endchar } ND +/f01b { +0 0 hsbw +642 65 hstem +-573 65 vstem +-310 64 vstem +-573 595 rmoveto +65 0 rlineto +0 26 16 21 21 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +55 0 39 36 2 75 rrcurveto +-64 0 rlineto +-4 -34 -11 -8 -20 0 rrcurveto +-11 0 -16 4 -19 10 rrcurveto +-35 18 -27 9 -21 0 rrcurveto +-59 0 -40 -47 0 -65 rrcurveto +closepath +endchar } ND +/f01e { +0 0 hsbw +-159 100 hstem +-382 100 vstem +-382 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f01f { +0 0 hsbw +-159 100 hstem +-439 100 vstem +-439 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f020 { +0 0 hsbw +-159 100 hstem +-517 100 vstem +-517 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f021 { +0 0 hsbw +-159 100 hstem +-406 100 vstem +-406 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f022 { +0 0 hsbw +-159 100 hstem +-551 100 vstem +-551 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/combininggraveaccent { +0 0 hsbw +755 137 hstem +-148 71 vstem +-77 755 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/combiningacuteaccent { +0 0 hsbw +755 137 hstem +-186 71 vstem +-120 892 rmoveto +-66 -137 rlineto +71 0 rlineto +113 137 rlineto +-118 0 rlineto +closepath +endchar } ND +/f01d { +0 0 hsbw +642 65 hstem +-280 65 vstem +-17 64 vstem +-280 595 rmoveto +65 0 rlineto +0 26 16 21 21 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +54 0 39 36 3 75 rrcurveto +-64 0 rlineto +-4 -34 -11 -8 -20 0 rrcurveto +-11 0 -16 4 -19 10 rrcurveto +-35 18 -27 9 -21 0 rrcurveto +-59 0 -40 -47 0 -65 rrcurveto +closepath +endchar } ND +/combiningdotbelow { +0 0 hsbw +-159 100 hstem +-382 100 vstem +-382 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f023 { +0 0 hsbw +-159 100 hstem +-329 100 vstem +-329 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f029 { +0 0 hsbw +-159 100 hstem +-192 100 vstem +-192 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f02a { +0 0 hsbw +-159 100 hstem +-158 100 vstem +-158 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f02b { +0 0 hsbw +-159 100 hstem +-385 100 vstem +-385 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f024 { +0 0 hsbw +-159 100 hstem +-322 100 vstem +-322 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f025 { +0 0 hsbw +-159 100 hstem +-332 100 vstem +-332 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f026 { +0 0 hsbw +-159 100 hstem +-430 100 vstem +-430 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f027 { +0 0 hsbw +-159 100 hstem +-365 100 vstem +-365 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f028 { +0 0 hsbw +-159 100 hstem +-479 101 vstem +-479 -159 rmoveto +101 0 rlineto +0 100 rlineto +-101 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/f02d { +0 0 hsbw +812 84 hstem +-491 48 vstem +-211 47 vstem +-491 811 rmoveto +48 0 rlineto +0 24 12 13 26 0 rrcurveto +21 0 21 -5 22 -10 rrcurveto +33 -15 28 -6 20 0 rrcurveto +62 0 32 28 2 56 rrcurveto +-47 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-22 0 -20 4 -20 8 rrcurveto +-34 14 -28 7 -21 0 rrcurveto +-58 0 -41 -31 0 -53 rrcurveto +closepath +endchar } ND +/f02e { +0 0 hsbw +787 111 hstem +-491 65 vstem +-228 64 vstem +-491 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-3 -28 -12 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -21 0 rrcurveto +-58 0 -41 -46 0 -65 rrcurveto +closepath +endchar } ND +/f02f { +0 0 hsbw +812 84 hstem +-551 47 vstem +-272 47 vstem +-551 811 rmoveto +47 0 rlineto +0 24 12 13 25 0 rrcurveto +22 0 22 -5 22 -10 rrcurveto +33 -15 28 -6 20 0 rrcurveto +62 0 31 28 2 56 rrcurveto +-47 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-22 0 -20 4 -20 8 rrcurveto +-34 14 -28 7 -20 0 rrcurveto +-60 0 -40 -31 1 -53 rrcurveto +closepath +endchar } ND +/f030 { +0 0 hsbw +787 111 hstem +-551 65 vstem +-288 63 vstem +-551 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 31 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-60 0 -40 -46 1 -65 rrcurveto +closepath +endchar } ND +/f031 { +0 222 hsbw +0 20 hstem +499 20 hstem +66 88 vstem +66 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/Adotbelow { +0 667 hsbw +-159 100 hstem +0 20 hstem +217 77 hstem +641 75 hstem +-1 100 284 92 561 100 vstem3 +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +71 -453 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/adotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +260 69 hstem +458 72 hstem +36 94 vstem +224 100 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-173 -419 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ahookabove { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +738 55 hstem +849 47 hstem +-1 100 vstem +297 55 vstem +359 81 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +120 502 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 28 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -44 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -9 -10 -7 -16 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ahookabove { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +583 59 hstem +705 51 hstem +36 94 vstem +259 54 vstem +321 81 vstem +422 92 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-110 385 rmoveto +-28 -3 rlineto +0 -59 rlineto +54 0 rlineto +0 24 rlineto +60 8 29 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -12 -10 -9 -17 -6 rrcurveto +-7 -2 rlineto +closepath +endchar } ND +/Acircumflexacute { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +741 155 hstem +-1 100 vstem +173 85 vstem +275 63 vstem +386 86 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +117 479 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +19 123 rmoveto +-66 -77 rlineto +63 0 rlineto +113 77 rlineto +-110 0 rlineto +closepath +endchar } ND +/acircumflexacute { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +666 54 hstem +755 137 hstem +36 99 230 67 397 89 vstem3 +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-121 406 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +16 226 rmoveto +-66 -137 rlineto +71 0 rlineto +113 137 rlineto +-118 0 rlineto +closepath +endchar } ND +/Acircumflexgrave { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +741 155 hstem +-1 100 vstem +173 85 vstem +307 63 vstem +386 86 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +117 479 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +48 46 rmoveto +-66 77 rlineto +-110 0 rlineto +113 -77 rlineto +63 0 rlineto +closepath +endchar } ND +/acircumflexgrave { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +666 54 hstem +755 137 hstem +36 94 vstem +249 71 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-121 406 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +44 89 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/Acircumflexhookabove { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +773 28 hstem +803 27 hstem +866 30 hstem +-1 100 vstem +173 85 vstem +303 45 vstem +355 76 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +117 479 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +0 58 rmoveto +-19 -1 rlineto +0 -27 rlineto +45 0 rlineto +0 11 rlineto +56 4 27 13 0 21 rrcurveto +0 29 -46 15 -85 0 rrcurveto +-65 0 rlineto +5 -34 rlineto +12 2 24 2 6 0 rrcurveto +34 0 39 1 0 -18 rrcurveto +0 -8 -9 -5 -15 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/acircumflexhookabove { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +666 54 hstem +738 55 hstem +849 47 hstem +36 94 vstem +248 55 vstem +310 82 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-121 406 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +0 130 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -74 21 -68 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +45 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Acircumflextilde { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +773 28 hstem +812 84 hstem +-6 105 164 41 275 95 vstem3 +443 47 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +117 479 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-158 38 rmoveto +47 0 rlineto +-1 24 13 13 27 0 rrcurveto +20 0 21 -5 22 -10 rrcurveto +33 -15 28 -6 21 0 rrcurveto +61 0 32 28 2 56 rrcurveto +-47 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-22 0 -20 4 -20 8 rrcurveto +-34 14 -28 7 -20 0 rrcurveto +-60 0 -39 -31 0 -53 rrcurveto +closepath +endchar } ND +/acircumflextilde { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +666 54 hstem +802 65 hstem +36 94 vstem +226 94 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-121 406 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +-163 89 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +62 0 31 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-60 0 -41 -46 2 -66 rrcurveto +closepath +endchar } ND +/Acircumflexdotbelow { +0 667 hsbw +-159 100 hstem +0 20 hstem +217 77 hstem +641 75 hstem +773 28 hstem +-1 100 vstem +173 85 276 93 387 85 vstem3 +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +117 479 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-46 -932 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/acircumflexdotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +260 69 hstem +458 72 hstem +666 54 hstem +36 94 vstem +224 100 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-121 406 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +-52 -825 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Abreveacute { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +729 167 hstem +-1 100 vstem +188 38 vstem +275 63 vstem +434 38 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-17 506 rmoveto +20 -51 59 -20 62 0 rrcurveto +64 0 57 18 22 53 rrcurveto +-38 0 rlineto +-19 -23 -48 -10 -38 0 rrcurveto +-38 0 -49 11 -16 22 rrcurveto +-38 0 rlineto +closepath +153 96 rmoveto +-66 -77 rlineto +63 0 rlineto +113 77 rlineto +-110 0 rlineto +closepath +endchar } ND +/abreveacute { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +588 61 hstem +695 20 hstem +755 137 hstem +36 94 vstem +142 60 vstem +225 70 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-26 455 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +-80 177 rmoveto +-66 -137 rlineto +70 0 rlineto +113 137 rlineto +-117 0 rlineto +closepath +endchar } ND +/Abrevegrave { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +729 167 hstem +-1 100 vstem +188 38 vstem +307 63 vstem +434 38 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-17 506 rmoveto +20 -51 59 -20 62 0 rrcurveto +64 0 57 18 22 53 rrcurveto +-38 0 rlineto +-19 -23 -48 -10 -38 0 rrcurveto +-38 0 -49 11 -16 22 rrcurveto +-38 0 rlineto +closepath +182 19 rmoveto +-66 77 rlineto +-110 0 rlineto +113 -77 rlineto +63 0 rlineto +closepath +endchar } ND +/abrevegrave { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +588 61 hstem +695 20 hstem +755 137 hstem +36 94 vstem +142 60 vstem +272 71 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-26 455 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +-28 40 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/Abrevehookabove { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +729 38 hstem +803 27 hstem +866 30 hstem +-1 100 vstem +188 38 vstem +303 45 vstem +355 76 vstem +434 38 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-17 506 rmoveto +20 -51 59 -20 62 0 rrcurveto +64 0 57 18 22 53 rrcurveto +-38 0 rlineto +-19 -23 -48 -10 -38 0 rrcurveto +-38 0 -49 11 -16 22 rrcurveto +-38 0 rlineto +closepath +134 31 rmoveto +-19 -1 rlineto +0 -27 rlineto +45 0 rlineto +0 11 rlineto +56 4 27 13 0 21 rrcurveto +0 29 -46 15 -85 0 rrcurveto +-65 0 rlineto +5 -34 rlineto +12 2 24 2 6 0 rrcurveto +34 0 39 1 0 -18 rrcurveto +0 -8 -9 -5 -15 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/abrevehookabove { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +588 61 hstem +695 20 hstem +738 55 hstem +849 47 hstem +36 94 vstem +142 60 vstem +258 55 vstem +320 81 vstem +422 92 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-26 455 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +-85 81 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 28 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -44 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -9 -10 -7 -17 -4 rrcurveto +-7 -2 rlineto +closepath +endchar } ND +/Abrevetilde { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +729 38 hstem +812 84 hstem +-1 100 vstem +173 48 vstem +273 102 vstem +434 38 vstem +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-17 506 rmoveto +20 -51 59 -20 62 0 rrcurveto +64 0 57 18 22 53 rrcurveto +-38 0 rlineto +-19 -23 -48 -10 -38 0 rrcurveto +-38 0 -49 11 -16 22 rrcurveto +-38 0 rlineto +closepath +-15 11 rmoveto +48 0 rlineto +-1 24 13 13 26 0 rrcurveto +21 0 21 -5 22 -10 rrcurveto +33 -15 28 -6 20 0 rrcurveto +62 0 32 28 2 56 rrcurveto +-47 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-22 0 -20 4 -20 8 rrcurveto +-34 14 -29 7 -20 0 rrcurveto +-59 0 -40 -31 0 -53 rrcurveto +closepath +endchar } ND +/abrevetilde { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +588 61 hstem +695 20 hstem +802 65 hstem +36 94 vstem +132 65 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-26 455 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +-239 40 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -28 9 -20 0 rrcurveto +-59 0 -40 -46 0 -66 rrcurveto +closepath +endchar } ND +/Abrevedotbelow { +0 667 hsbw +-159 100 hstem +0 20 hstem +217 77 hstem +641 75 hstem +729 38 hstem +-1 100 vstem +188 38 284 92 434 38 vstem3 +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +-17 506 rmoveto +20 -51 59 -20 62 0 rrcurveto +64 0 57 18 22 53 rrcurveto +-38 0 rlineto +-19 -23 -48 -10 -38 0 rrcurveto +-38 0 -49 11 -16 22 rrcurveto +-38 0 rlineto +closepath +88 -959 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/abrevedotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +260 69 hstem +458 72 hstem +588 61 hstem +695 20 hstem +36 94 vstem +142 60 vstem +224 100 vstem +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-26 455 rmoveto +-10 -46 -25 -20 -52 0 rrcurveto +-46 0 -27 22 -9 44 rrcurveto +-60 0 rlineto +9 -83 52 -44 84 0 rrcurveto +82 0 51 45 11 82 rrcurveto +-60 0 rlineto +closepath +-147 -874 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Edotbelow { +0 667 hsbw +-159 100 hstem +0 84 hstem +328 84 hstem +631 85 hstem +79 95 vstem +296 100 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +217 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/edotbelow { +0 556 hsbw +-159 100 hstem +-12 73 hstem +237 72 hstem +458 72 hstem +37 90 vstem +232 101 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +100 -468 rmoveto +101 0 rlineto +0 100 rlineto +-101 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ehookabove { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +738 55 hstem +849 47 hstem +79 95 vstem +316 55 vstem +378 82 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +265 796 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -44 rlineto +46 0 rlineto +39 0 39 -1 0 -30 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ehookabove { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +583 59 hstem +705 51 hstem +37 90 vstem +254 55 vstem +316 81 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +150 336 rmoveto +-28 -3 rlineto +0 -59 rlineto +55 0 rlineto +0 24 rlineto +60 8 28 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -12 -10 -9 -16 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Etilde { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +818 65 hstem +79 95 vstem +189 65 vstem +452 64 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +110 772 rmoveto +65 0 rlineto +-1 15 4 11 7 9 rrcurveto +6 7 9 4 12 0 rrcurveto +10 0 16 -5 22 -12 rrcurveto +33 -18 27 -10 21 0 rrcurveto +54 0 39 37 3 75 rrcurveto +-64 0 rlineto +-4 -35 -11 -8 -20 0 rrcurveto +-12 0 -16 6 -18 9 rrcurveto +-36 18 -27 8 -20 0 rrcurveto +-29 0 -23 -10 -19 -20 rrcurveto +-19 -20 -10 -27 1 -34 rrcurveto +closepath +endchar } ND +/etilde { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +642 65 hstem +37 90 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +-11 286 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 2 75 rrcurveto +-63 0 rlineto +-6 -34 -9 -8 -21 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-30 0 -24 -12 -18 -19 rrcurveto +-19 -21 -9 -26 1 -34 rrcurveto +closepath +endchar } ND +/Ecircumflexacute { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +741 155 hstem +79 95 vstem +188 85 vstem +290 63 vstem +401 85 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +258 773 rmoveto +64 -32 rlineto +85 0 rlineto +-101 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +18 123 rmoveto +-65 -77 rlineto +63 0 rlineto +113 77 rlineto +-111 0 rlineto +closepath +endchar } ND +/ecircumflexacute { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +666 54 hstem +755 137 hstem +37 90 vstem +227 70 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +145 357 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +15 226 rmoveto +-65 -137 rlineto +70 0 rlineto +113 137 rlineto +-118 0 rlineto +closepath +endchar } ND +/Ecircumflexgrave { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +741 155 hstem +79 95 vstem +188 85 vstem +321 64 vstem +401 85 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +258 773 rmoveto +64 -32 rlineto +85 0 rlineto +-101 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +48 46 rmoveto +-66 77 rlineto +-111 0 rlineto +113 -77 rlineto +64 0 rlineto +closepath +endchar } ND +/ecircumflexgrave { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +666 54 hstem +755 137 hstem +37 90 vstem +250 70 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +145 357 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +43 89 rmoveto +-66 137 rlineto +-117 0 rlineto +113 -137 rlineto +70 0 rlineto +closepath +endchar } ND +/Ecircumflexhookabove { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +773 28 hstem +803 27 hstem +866 30 hstem +79 95 vstem +188 85 vstem +313 45 vstem +365 75 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +258 773 rmoveto +64 -32 rlineto +85 0 rlineto +-101 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-5 58 rmoveto +-19 -1 rlineto +0 -27 rlineto +45 0 rlineto +0 11 rlineto +56 4 26 13 0 21 rrcurveto +0 29 -45 15 -85 0 rrcurveto +-65 0 rlineto +5 -34 rlineto +12 2 24 2 6 0 rrcurveto +34 0 39 1 0 -18 rrcurveto +0 -8 -9 -5 -16 -3 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ecircumflexhookabove { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +666 54 hstem +738 55 hstem +849 47 hstem +37 90 vstem +248 55 vstem +310 82 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +145 357 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +-1 130 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -74 21 -68 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +45 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ecircumflextilde { +0 667 hsbw +0 84 hstem +328 84 hstem +631 85 hstem +773 28 hstem +812 84 hstem +172 49 290 93 453 47 vstem3 +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +258 773 rmoveto +64 -32 rlineto +85 0 rlineto +-101 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-164 38 rmoveto +48 0 rlineto +-1 24 13 13 26 0 rrcurveto +21 0 21 -5 22 -10 rrcurveto +33 -15 28 -6 20 0 rrcurveto +62 0 32 28 2 56 rrcurveto +-47 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-22 0 -20 4 -20 8 rrcurveto +-34 14 -29 7 -20 0 rrcurveto +-59 0 -40 -31 0 -53 rrcurveto +closepath +endchar } ND +/ecircumflextilde { +0 556 hsbw +-12 73 hstem +237 72 hstem +458 72 hstem +666 54 hstem +802 65 hstem +37 90 229 91 422 90 vstem3 +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +145 357 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +-164 89 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +62 0 31 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-60 0 -41 -46 2 -66 rrcurveto +closepath +endchar } ND +/Ecircumflexdotbelow { +0 667 hsbw +-159 100 hstem +0 84 hstem +328 84 hstem +631 85 hstem +773 28 hstem +79 95 vstem +188 85 vstem +296 100 vstem +401 85 vstem +79 0 rmoveto +534 0 rlineto +0 84 rlineto +-439 0 rlineto +0 244 rlineto +396 0 rlineto +0 84 rlineto +-396 0 rlineto +0 219 rlineto +423 0 rlineto +0 85 rlineto +-518 0 rlineto +0 -716 rlineto +closepath +258 773 rmoveto +64 -32 rlineto +85 0 rlineto +-101 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-41 -932 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/ecircumflexdotbelow { +0 556 hsbw +-159 100 hstem +-12 73 hstem +237 72 hstem +458 72 hstem +666 54 hstem +37 90 vstem +232 101 vstem +422 93 vstem +421 167 rmoveto +-27 -75 -45 -31 -65 0 rrcurveto +-87 0 -64 61 -6 115 rrcurveto +388 0 rlineto +0 23 rlineto +0 172 -98 98 -138 0 rrcurveto +-144 0 -98 -101 0 -174 rrcurveto +0 -170 95 -97 152 0 rrcurveto +120 0 78 61 30 107 rrcurveto +-91 11 rlineto +closepath +-289 142 rmoveto +6 90 60 59 82 0 rrcurveto +80 0 54 -53 8 -96 rrcurveto +-290 0 rlineto +closepath +145 357 rmoveto +54 -83 rlineto +99 0 rlineto +-110 137 rlineto +-93 0 rlineto +-106 -137 rlineto +101 0 rlineto +55 83 rlineto +closepath +-45 -825 rmoveto +101 0 rlineto +0 100 rlineto +-101 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ihookabove { +0 278 hsbw +0 20 hstem +696 20 hstem +738 55 hstem +849 47 hstem +116 55 vstem +178 82 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +51 796 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +46 0 rlineto +39 0 39 -1 0 -30 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ihookabove { +0 222 hsbw +0 20 hstem +499 20 hstem +583 59 hstem +705 51 hstem +83 55 vstem +145 82 vstem +66 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +45 645 rmoveto +-28 -3 rlineto +0 -59 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 24 0 40 rrcurveto +0 55 -72 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +6 -47 rlineto +45 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -12 -9 -9 -17 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Idotbelow { +0 278 hsbw +-159 100 hstem +0 20 hstem +696 20 hstem +93 95 vstem +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +-2 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/idotbelow { +0 222 hsbw +-159 100 hstem +0 20 hstem +499 20 hstem +615 101 hstem +66 88 vstem +66 615 rmoveto +88 0 rlineto +0 101 rlineto +-88 0 rlineto +0 -101 rlineto +closepath +0 -615 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +-5 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Odotbelow { +0 778 hsbw +-159 100 hstem +-12 81 hstem +647 82 hstem +48 98 vstem +335 100 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +189 -506 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/odotbelow { +0 556 hsbw +-159 100 hstem +-12 73 hstem +458 72 hstem +33 92 230 93 429 90 vstem3 +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +99 -418 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ohookabove { +0 778 hsbw +-12 81 hstem +647 82 hstem +738 55 hstem +849 47 hstem +48 98 vstem +365 55 vstem +427 82 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +247 449 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +46 0 rlineto +39 0 39 -1 0 -30 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ohookabove { +0 556 hsbw +-12 73 hstem +458 72 hstem +583 59 hstem +705 51 hstem +33 91 vstem +254 55 vstem +316 81 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +158 386 rmoveto +-28 -3 rlineto +0 -59 rlineto +55 0 rlineto +0 24 rlineto +60 8 28 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -12 -10 -9 -16 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ocircumflexacute { +0 778 hsbw +-12 81 hstem +647 82 hstem +741 155 hstem +48 98 vstem +243 85 vstem +345 63 vstem +456 86 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +246 426 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +19 123 rmoveto +-66 -77 rlineto +63 0 rlineto +113 77 rlineto +-110 0 rlineto +closepath +endchar } ND +/ocircumflexacute { +0 556 hsbw +-12 73 hstem +458 72 hstem +666 54 hstem +755 137 hstem +33 91 vstem +227 71 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +153 407 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +16 226 rmoveto +-66 -137 rlineto +71 0 rlineto +113 137 rlineto +-118 0 rlineto +closepath +endchar } ND +/Ocircumflexgrave { +0 778 hsbw +-12 81 hstem +647 82 hstem +741 155 hstem +48 98 vstem +243 85 vstem +376 64 vstem +456 86 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +246 426 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +48 46 rmoveto +-66 77 rlineto +-110 0 rlineto +112 -77 rlineto +64 0 rlineto +closepath +endchar } ND +/ocircumflexgrave { +0 556 hsbw +-12 73 hstem +458 72 hstem +666 54 hstem +755 137 hstem +33 91 vstem +250 71 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +153 407 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +44 89 rmoveto +-66 137 rlineto +-118 0 rlineto +113 -137 rlineto +71 0 rlineto +closepath +endchar } ND +/Ocircumflexhookabove { +0 778 hsbw +-12 81 hstem +647 82 hstem +773 28 hstem +803 27 hstem +866 30 hstem +48 98 vstem +243 85 vstem +371 46 vstem +423 76 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +246 426 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-2 58 rmoveto +-19 -1 rlineto +0 -27 rlineto +46 0 rlineto +0 11 rlineto +55 4 27 13 0 21 rrcurveto +0 29 -45 15 -85 0 rrcurveto +-66 0 rlineto +6 -34 rlineto +10 2 26 2 6 0 rrcurveto +34 0 38 1 0 -18 rrcurveto +0 -8 -8 -5 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/ocircumflexhookabove { +0 556 hsbw +-12 73 hstem +458 72 hstem +666 54 hstem +738 55 hstem +849 47 hstem +33 91 vstem +248 55 vstem +310 82 vstem +429 90 vstem +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +153 407 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +-1 130 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -74 21 -68 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +45 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ocircumflextilde { +0 778 hsbw +-12 81 hstem +647 82 hstem +773 28 hstem +812 84 hstem +48 98 vstem +232 47 350 90 511 47 vstem3 +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +246 426 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-160 38 rmoveto +47 0 rlineto +-1 24 13 13 27 0 rrcurveto +20 0 21 -5 23 -10 rrcurveto +32 -14 28 -7 21 0 rrcurveto +62 0 32 28 2 56 rrcurveto +-48 0 rlineto +-4 -23 -12 -11 -19 0 rrcurveto +-23 0 -21 4 -18 8 rrcurveto +-35 15 -28 6 -20 0 rrcurveto +-59 0 -40 -31 0 -53 rrcurveto +closepath +endchar } ND +/ocircumflextilde { +0 556 hsbw +-12 73 hstem +458 72 hstem +666 54 hstem +802 65 hstem +33 92 232 89 429 90 vstem3 +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +153 407 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +-164 89 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +62 0 31 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-60 0 -41 -46 2 -66 rrcurveto +closepath +endchar } ND +/Ocircumflexdotbelow { +0 778 hsbw +-159 100 hstem +-12 81 hstem +647 82 hstem +773 28 hstem +48 98 vstem +243 85 vstem +335 100 vstem +456 86 vstem +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +246 426 rmoveto +64 -32 rlineto +86 0 rlineto +-102 60 rlineto +-95 0 rlineto +-102 -60 rlineto +85 0 rlineto +64 32 rlineto +closepath +-57 -932 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/ocircumflexdotbelow { +0 556 hsbw +-159 100 hstem +-12 73 hstem +458 72 hstem +666 54 hstem +33 92 230 93 429 90 vstem3 +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +153 407 rmoveto +54 -83 rlineto +100 0 rlineto +-110 137 rlineto +-94 0 rlineto +-105 -137 rlineto +100 0 rlineto +55 83 rlineto +closepath +-54 -825 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ohornacute { +0 857 hsbw +-12 81 hstem +622 102 hstem +760 136 hstem +48 98 vstem +331 72 vstem +635 85 vstem +786 48 vstem +146 347 rmoveto +0 180 80 120 166 0 rrcurveto +145 0 98 -115 0 -175 rrcurveto +0 -168 -87 -120 -158 0 rrcurveto +-153 0 -91 119 0 159 rrcurveto +closepath +594 275 rmoveto +46 0 rlineto +0 -62 -24 -25 -53 -29 rrcurveto +-48 136 -122 87 -148 0 rrcurveto +-216 0 -127 -158 0 -222 rrcurveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 39 -5 37 -8 36 rrcurveto +80 41 34 41 0 92 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-409 138 rmoveto +72 0 rlineto +108 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/ohornacute { +0 656 hsbw +-12 73 hstem +429 102 hstem +583 137 hstem +33 91 vstem +228 72 vstem +429 90 vstem +577 48 vstem +124 259 rmoveto +0 113 48 86 104 0 rrcurveto +100 0 53 -84 0 -112 rrcurveto +0 -117 -47 -84 -106 0 rrcurveto +-105 0 -47 85 0 113 rrcurveto +closepath +407 170 rmoveto +46 0 rlineto +0 -55 -18 -23 -44 -28 rrcurveto +-20 126 -92 81 -127 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +0 -163 88 -108 155 0 rrcurveto +143 0 100 102 0 177 rrcurveto +0 14 rlineto +75 41 31 39 0 90 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-303 154 rmoveto +72 0 rlineto +108 137 rlineto +-116 0 rlineto +-64 -137 rlineto +closepath +endchar } ND +/Ohorngrave { +0 857 hsbw +-12 81 hstem +622 102 hstem +760 136 hstem +48 98 vstem +376 71 vstem +635 85 vstem +786 48 vstem +146 347 rmoveto +0 180 80 120 166 0 rrcurveto +145 0 98 -115 0 -175 rrcurveto +0 -168 -87 -120 -158 0 rrcurveto +-153 0 -91 119 0 159 rrcurveto +closepath +594 275 rmoveto +46 0 rlineto +0 -62 -24 -25 -53 -29 rrcurveto +-48 136 -122 87 -148 0 rrcurveto +-216 0 -127 -158 0 -222 rrcurveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 39 -5 37 -8 36 rrcurveto +80 41 34 41 0 92 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-293 138 rmoveto +-66 136 rlineto +-117 0 rlineto +112 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/ohorngrave { +0 656 hsbw +-12 73 hstem +429 102 hstem +583 137 hstem +33 91 vstem +265 70 vstem +429 90 vstem +577 48 vstem +124 259 rmoveto +0 113 48 86 104 0 rrcurveto +100 0 53 -84 0 -112 rrcurveto +0 -117 -47 -84 -106 0 rrcurveto +-105 0 -47 85 0 113 rrcurveto +closepath +407 170 rmoveto +46 0 rlineto +0 -55 -18 -23 -44 -28 rrcurveto +-20 126 -92 81 -127 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +0 -163 88 -108 155 0 rrcurveto +143 0 100 102 0 177 rrcurveto +0 14 rlineto +75 41 31 39 0 90 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-196 154 rmoveto +-65 137 rlineto +-118 0 rlineto +113 -137 rlineto +70 0 rlineto +closepath +endchar } ND +/Ohornhookabove { +0 857 hsbw +-12 81 hstem +622 102 hstem +750 55 hstem +861 47 hstem +48 98 vstem +365 55 vstem +427 82 vstem +635 85 vstem +786 48 vstem +146 347 rmoveto +0 180 80 120 166 0 rrcurveto +145 0 98 -115 0 -175 rrcurveto +0 -168 -87 -120 -158 0 rrcurveto +-153 0 -91 119 0 159 rrcurveto +closepath +594 275 rmoveto +46 0 rlineto +0 -62 -24 -25 -53 -29 rrcurveto +-48 136 -122 87 -148 0 rrcurveto +-216 0 -127 -158 0 -222 rrcurveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 39 -5 37 -8 36 rrcurveto +80 41 34 41 0 92 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-347 186 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 51 -72 22 -69 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -10 -9 -6 -17 -4 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/ohornhookabove { +0 656 hsbw +-12 73 hstem +429 102 hstem +583 59 hstem +705 51 hstem +33 91 vstem +254 55 vstem +316 81 vstem +429 90 vstem +577 48 vstem +124 259 rmoveto +0 113 48 86 104 0 rrcurveto +100 0 53 -84 0 -112 rrcurveto +0 -117 -47 -84 -106 0 rrcurveto +-105 0 -47 85 0 113 rrcurveto +closepath +407 170 rmoveto +46 0 rlineto +0 -55 -18 -23 -44 -28 rrcurveto +-20 126 -92 81 -127 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +0 -163 88 -108 155 0 rrcurveto +143 0 100 102 0 177 rrcurveto +0 14 rlineto +75 41 31 39 0 90 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-249 216 rmoveto +-28 -3 rlineto +0 -59 rlineto +55 0 rlineto +0 24 rlineto +60 8 28 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -12 -10 -9 -16 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ohorntilde { +0 857 hsbw +-12 81 hstem +622 102 hstem +806 65 hstem +48 98 vstem +228 64 vstem +491 63 vstem +635 85 vstem +786 48 vstem +146 347 rmoveto +0 180 80 120 166 0 rrcurveto +145 0 98 -115 0 -175 rrcurveto +0 -168 -87 -120 -158 0 rrcurveto +-153 0 -91 119 0 159 rrcurveto +closepath +594 275 rmoveto +46 0 rlineto +0 -62 -24 -25 -53 -29 rrcurveto +-48 136 -122 87 -148 0 rrcurveto +-216 0 -127 -158 0 -222 rrcurveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 39 -5 37 -8 36 rrcurveto +80 41 34 41 0 92 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-512 138 rmoveto +64 0 rlineto +0 27 13 19 25 0 rrcurveto +10 0 16 -5 21 -12 rrcurveto +34 -19 27 -9 20 0 rrcurveto +56 0 38 37 2 75 rrcurveto +-63 0 rlineto +-6 -35 -9 -8 -21 0 rrcurveto +-12 0 -14 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-30 0 -24 -11 -18 -19 rrcurveto +-19 -21 -9 -26 1 -34 rrcurveto +closepath +endchar } ND +/ohorntilde { +0 656 hsbw +-12 73 hstem +429 102 hstem +642 65 hstem +33 91 vstem +429 90 vstem +577 48 vstem +124 259 rmoveto +0 113 48 86 104 0 rrcurveto +100 0 53 -84 0 -112 rrcurveto +0 -117 -47 -84 -106 0 rrcurveto +-105 0 -47 85 0 113 rrcurveto +closepath +407 170 rmoveto +46 0 rlineto +0 -55 -18 -23 -44 -28 rrcurveto +-20 126 -92 81 -127 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +0 -163 88 -108 155 0 rrcurveto +143 0 100 102 0 177 rrcurveto +0 14 rlineto +75 41 31 39 0 90 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-418 166 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 2 75 rrcurveto +-63 0 rlineto +-4 -34 -11 -8 -21 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-30 0 -22 -11 -19 -20 rrcurveto +-19 -20 -10 -27 1 -34 rrcurveto +closepath +endchar } ND +/Ohorndotbelow { +0 857 hsbw +-159 100 hstem +-12 81 hstem +622 102 hstem +48 98 vstem +335 100 vstem +635 85 vstem +786 48 vstem +146 347 rmoveto +0 180 80 120 166 0 rrcurveto +145 0 98 -115 0 -175 rrcurveto +0 -168 -87 -120 -158 0 rrcurveto +-153 0 -91 119 0 159 rrcurveto +closepath +594 275 rmoveto +46 0 rlineto +0 -62 -24 -25 -53 -29 rrcurveto +-48 136 -122 87 -148 0 rrcurveto +-216 0 -127 -158 0 -222 rrcurveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 39 -5 37 -8 36 rrcurveto +80 41 34 41 0 92 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-405 -781 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/ohorndotbelow { +0 656 hsbw +-159 100 hstem +-12 73 hstem +429 102 hstem +33 92 230 93 429 90 vstem3 +577 48 vstem +124 259 rmoveto +0 113 48 86 104 0 rrcurveto +100 0 53 -84 0 -112 rrcurveto +0 -117 -47 -84 -106 0 rrcurveto +-105 0 -47 85 0 113 rrcurveto +closepath +407 170 rmoveto +46 0 rlineto +0 -55 -18 -23 -44 -28 rrcurveto +-20 126 -92 81 -127 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +0 -163 88 -108 155 0 rrcurveto +143 0 100 102 0 177 rrcurveto +0 14 rlineto +75 41 31 39 0 90 rrcurveto +0 80 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-308 -588 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Udotbelow { +0 722 hsbw +-159 100 hstem +-12 85 hstem +696 20 hstem +79 94 314 92 547 94 vstem3 +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-241 -875 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/udotbelow { +0 556 hsbw +-159 100 hstem +-12 76 hstem +499 20 hstem +64 88 vstem +208 100 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-198 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Uhookabove { +0 722 hsbw +-12 85 hstem +696 20 hstem +738 55 hstem +849 47 hstem +79 94 vstem +326 55 vstem +388 82 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-193 80 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +46 0 rlineto +39 0 39 -1 0 -30 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/uhookabove { +0 556 hsbw +-12 76 hstem +499 20 hstem +583 59 hstem +705 51 hstem +64 88 vstem +247 54 vstem +309 81 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-132 645 rmoveto +-27 -3 rlineto +0 -59 rlineto +54 0 rlineto +0 24 rlineto +60 8 29 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +39 0 40 -2 0 -29 rrcurveto +0 -12 -10 -9 -17 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Uhornacute { +0 854 hsbw +-12 85 hstem +439 36 hstem +614 102 hstem +760 136 hstem +79 94 vstem +300 73 vstem +547 95 vstem +765 48 vstem +719 614 rmoveto +46 0 rlineto +0 -103 -42 -28 -81 -8 rrcurveto +0 241 rlineto +-95 0 rlineto +0 -413 rlineto +0 -164 -39 -66 -154 0 rrcurveto +-141 0 -40 81 0 149 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -205 71 -109 212 0 rrcurveto +189 0 91 108 0 206 rrcurveto +0 137 rlineto +110 4 61 55 0 137 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-419 146 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/uhornacute { +0 669 hsbw +-12 76 hstem +243 37 hstem +417 102 hstem +583 137 hstem +64 88 vstem +221 73 vstem +406 78 vstem +591 48 vstem +545 417 rmoveto +46 0 rlineto +0 -93 -37 -32 -70 -12 rrcurveto +0 239 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-96 0 -11 52 0 115 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -142 69 -67 108 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +78 0 rlineto +0 243 rlineto +101 9 54 54 0 132 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-324 166 rmoveto +73 0 rlineto +107 137 rlineto +-115 0 rlineto +-65 -137 rlineto +closepath +endchar } ND +/Uhorngrave { +0 854 hsbw +-12 85 hstem +439 36 hstem +614 102 hstem +760 136 hstem +79 94 vstem +346 71 vstem +547 95 vstem +765 48 vstem +719 614 rmoveto +46 0 rlineto +0 -103 -42 -28 -81 -8 rrcurveto +0 241 rlineto +-95 0 rlineto +0 -413 rlineto +0 -164 -39 -66 -154 0 rrcurveto +-141 0 -40 81 0 149 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -205 71 -109 212 0 rrcurveto +189 0 91 108 0 206 rrcurveto +0 137 rlineto +110 4 61 55 0 137 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-302 146 rmoveto +-66 136 rlineto +-118 0 rlineto +113 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/uhorngrave { +0 669 hsbw +-12 76 hstem +243 37 hstem +417 102 hstem +583 137 hstem +64 88 vstem +265 70 vstem +406 78 vstem +591 48 vstem +545 417 rmoveto +46 0 rlineto +0 -93 -37 -32 -70 -12 rrcurveto +0 239 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-96 0 -11 52 0 115 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -142 69 -67 108 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +78 0 rlineto +0 243 rlineto +101 9 54 54 0 132 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-210 166 rmoveto +-65 137 rlineto +-118 0 rlineto +113 -137 rlineto +70 0 rlineto +closepath +endchar } ND +/Uhornhookabove { +0 854 hsbw +-12 85 hstem +439 36 hstem +614 102 hstem +738 55 hstem +849 47 hstem +79 94 vstem +326 55 vstem +388 82 vstem +547 95 vstem +765 48 vstem +719 614 rmoveto +46 0 rlineto +0 -103 -42 -28 -81 -8 rrcurveto +0 241 rlineto +-95 0 rlineto +0 -413 rlineto +0 -164 -39 -66 -154 0 rrcurveto +-141 0 -40 81 0 149 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -205 71 -109 212 0 rrcurveto +189 0 91 108 0 206 rrcurveto +0 137 rlineto +110 4 61 55 0 137 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-365 182 rmoveto +-28 -3 rlineto +0 -55 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -44 rlineto +46 0 rlineto +39 0 39 -1 0 -30 rrcurveto +0 -9 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/uhornhookabove { +0 669 hsbw +-12 76 hstem +243 37 hstem +417 102 hstem +583 59 hstem +705 51 hstem +64 88 vstem +247 54 vstem +309 81 vstem +406 78 vstem +591 48 vstem +545 417 rmoveto +46 0 rlineto +0 -93 -37 -32 -70 -12 rrcurveto +0 239 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-96 0 -11 52 0 115 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -142 69 -67 108 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +78 0 rlineto +0 243 rlineto +101 9 54 54 0 132 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-271 228 rmoveto +-27 -3 rlineto +0 -59 rlineto +54 0 rlineto +0 24 rlineto +60 8 29 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +39 0 40 -2 0 -29 rrcurveto +0 -12 -10 -9 -17 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Uhorntilde { +0 854 hsbw +-12 85 hstem +439 36 hstem +614 102 hstem +806 65 hstem +79 94 vstem +203 65 vstem +466 64 vstem +547 95 vstem +765 48 vstem +719 614 rmoveto +46 0 rlineto +0 -103 -42 -28 -81 -8 rrcurveto +0 241 rlineto +-95 0 rlineto +0 -413 rlineto +0 -164 -39 -66 -154 0 rrcurveto +-141 0 -40 81 0 149 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -205 71 -109 212 0 rrcurveto +189 0 91 108 0 206 rrcurveto +0 137 rlineto +110 4 61 55 0 137 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-516 146 rmoveto +65 0 rlineto +0 27 14 19 23 0 rrcurveto +10 0 16 -5 22 -12 rrcurveto +33 -18 27 -10 21 0 rrcurveto +54 0 39 37 3 75 rrcurveto +-64 0 rlineto +-4 -35 -11 -8 -20 0 rrcurveto +-12 0 -14 5 -20 10 rrcurveto +-34 17 -29 9 -20 0 rrcurveto +-61 0 -38 -46 0 -65 rrcurveto +closepath +endchar } ND +/uhorntilde { +0 669 hsbw +-12 76 hstem +243 37 hstem +417 102 hstem +642 65 hstem +64 88 vstem +406 78 vstem +591 48 vstem +545 417 rmoveto +46 0 rlineto +0 -93 -37 -32 -70 -12 rrcurveto +0 239 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-96 0 -11 52 0 115 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -142 69 -67 108 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +78 0 rlineto +0 243 rlineto +101 9 54 54 0 132 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-429 178 rmoveto +65 0 rlineto +-1 15 3 12 8 8 rrcurveto +6 8 9 4 12 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 2 75 rrcurveto +-63 0 rlineto +-6 -34 -9 -8 -21 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-30 0 -22 -11 -19 -20 rrcurveto +-19 -20 -10 -27 1 -34 rrcurveto +closepath +endchar } ND +/Uhorndotbelow { +0 854 hsbw +-159 100 hstem +-12 85 hstem +439 36 hstem +614 102 hstem +79 94 314 92 547 94 vstem3 +765 48 vstem +719 614 rmoveto +46 0 rlineto +0 -103 -42 -28 -81 -8 rrcurveto +0 241 rlineto +-95 0 rlineto +0 -413 rlineto +0 -164 -39 -66 -154 0 rrcurveto +-141 0 -40 81 0 149 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -205 71 -109 212 0 rrcurveto +189 0 91 108 0 206 rrcurveto +0 137 rlineto +110 4 61 55 0 137 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-413 -773 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/uhorndotbelow { +0 669 hsbw +-159 100 hstem +-12 76 hstem +243 37 hstem +417 102 hstem +64 88 vstem +208 100 vstem +406 78 vstem +591 48 vstem +545 417 rmoveto +46 0 rlineto +0 -93 -37 -32 -70 -12 rrcurveto +0 239 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-96 0 -11 52 0 115 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -142 69 -67 108 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +78 0 rlineto +0 243 rlineto +101 9 54 54 0 132 rrcurveto +0 81 rlineto +-94 0 rlineto +0 -102 rlineto +closepath +-337 -576 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Ydotbelow { +0 667 hsbw +-159 100 hstem +0 379 hstem +696 20 hstem +3 120 293 81 549 110 vstem3 +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +-3 -159 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/ydotbelow { +0 500 hsbw +-210 85 hstem +499 20 hstem +16 95 vstem +335 100 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +273 41 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/Yhookabove { +0 667 hsbw +0 379 hstem +696 20 hstem +738 55 hstem +849 47 hstem +3 115 vstem +302 54 vstem +364 81 vstem +549 110 vstem +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +51 796 rmoveto +-28 -3 rlineto +0 -55 rlineto +54 0 rlineto +0 25 rlineto +60 7 29 20 0 33 rrcurveto +0 52 -72 21 -69 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -44 rlineto +46 0 rlineto +40 0 39 -2 0 -29 rrcurveto +0 -9 -10 -7 -17 -4 rrcurveto +-7 -2 rlineto +closepath +endchar } ND +/yhookabove { +0 500 hsbw +-210 85 hstem +499 20 hstem +583 59 hstem +705 51 hstem +16 95 vstem +229 55 vstem +292 81 vstem +403 88 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +195 845 rmoveto +-28 -3 rlineto +0 -59 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 24 0 40 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -2 -12 -2 rrcurveto +5 -47 rlineto +46 0 rlineto +39 0 40 -2 0 -29 rrcurveto +0 -12 -10 -9 -17 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ytilde { +0 667 hsbw +0 379 hstem +696 20 hstem +806 65 hstem +3 115 vstem +179 65 vstem +279 95 vstem +442 64 vstem +549 110 vstem +279 0 rmoveto +95 0 rlineto +0 303 rlineto +285 413 rlineto +-110 0 rlineto +-139 -211 rlineto +-31 -47 -26 -42 -21 -37 rrcurveto +-23 40 -24 40 -26 41 rrcurveto +-141 216 rlineto +-115 0 rlineto +276 -413 rlineto +0 -303 rlineto +closepath +-100 760 rmoveto +65 0 rlineto +0 27 14 19 23 0 rrcurveto +10 0 16 -5 22 -12 rrcurveto +33 -18 27 -10 21 0 rrcurveto +54 0 39 37 3 75 rrcurveto +-64 0 rlineto +-4 -35 -11 -8 -20 0 rrcurveto +-12 0 -14 5 -20 10 rrcurveto +-34 17 -29 9 -20 0 rrcurveto +-61 0 -38 -46 0 -65 rrcurveto +closepath +endchar } ND +/ytilde { +0 500 hsbw +-210 85 hstem +499 20 hstem +642 65 hstem +96 65 vstem +359 64 vstem +62 -200 rmoveto +20 -6 19 -4 18 0 rrcurveto +99 0 29 73 47 128 rrcurveto +197 528 rlineto +-88 0 rlineto +-111 -303 rlineto +-14 -38 -12 -40 -10 -40 rrcurveto +-11 42 -12 40 -14 38 rrcurveto +-108 301 rlineto +-95 0 rlineto +197 -520 rlineto +-3 -3 -1 -4 -1 -5 rrcurveto +-3 -9 rlineto +-26 -79 -7 -24 -69 0 rrcurveto +-15 0 -17 3 -19 5 rrcurveto +10 -83 rlineto +closepath +34 795 rmoveto +65 0 rlineto +0 26 14 21 23 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +54 0 39 36 3 75 rrcurveto +-64 0 rlineto +-4 -34 -11 -8 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -28 9 -20 0 rrcurveto +-61 0 -38 -47 0 -65 rrcurveto +closepath +endchar } ND +/uni01CD { +0 667 hsbw +0 20 hstem +217 77 hstem +641 75 hstem +754 54 hstem +-1 100 vstem +171 100 281 89 380 100 vstem3 +561 107 vstem +-1 0 rmoveto +100 0 rlineto +79 217 rlineto +299 0 rlineto +84 -217 rlineto +107 0 rlineto +-293 716 rlineto +-102 0 rlineto +-274 -716 rlineto +closepath +206 294 rmoveto +79 210 rlineto +16 45 13 46 9 46 rrcurveto +11 -39 17 -50 23 -60 rrcurveto +75 -198 rlineto +-243 0 rlineto +closepath +122 514 rmoveto +-56 83 rlineto +-100 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/uni01CE { +0 556 hsbw +-12 69 hstem +260 69 hstem +458 72 hstem +583 54 hstem +700 20 hstem +35 95 139 96 245 93 vstem3 +397 89 vstem +404 64 rmoveto +2 -25 6 -21 10 -18 rrcurveto +92 0 rlineto +-23 40 -5 14 0 163 rrcurveto +0 117 rlineto +0 156 -68 40 -133 0 rrcurveto +-117 0 -92 -44 -25 -115 rrcurveto +86 -12 rlineto +18 73 34 26 83 0 rrcurveto +76 0 49 -23 0 -83 rrcurveto +0 -23 rlineto +-34 -12 -52 -10 -71 -8 rrcurveto +-128 -18 -76 -43 0 -101 rrcurveto +0 -87 63 -62 114 0 rrcurveto +69 0 56 20 66 56 rrcurveto +closepath +-7 196 rmoveto +0 -32 rlineto +0 -117 -61 -54 -102 0 rrcurveto +-68 0 -36 35 0 47 rrcurveto +0 56 46 21 77 11 rrcurveto +64 9 48 11 32 13 rrcurveto +closepath +-102 377 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +93 0 rlineto +110 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/uni01CF { +0 278 hsbw +0 20 hstem +696 20 hstem +754 54 hstem +-17 103 93 93 195 99 vstem3 +93 0 rmoveto +95 0 rlineto +0 716 rlineto +-95 0 rlineto +0 -716 rlineto +closepath +48 808 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +94 0 rlineto +109 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/uni01D0 { +0 222 hsbw +0 20 hstem +499 20 hstem +583 54 hstem +700 20 hstem +-39 101 vstem +66 88 vstem +170 100 vstem +66 0 rmoveto +88 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -519 rlineto +closepath +51 637 rmoveto +-55 83 rlineto +-101 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/uni01D1 { +0 778 hsbw +-12 81 hstem +647 82 hstem +754 54 hstem +48 98 vstem +239 103 351 87 449 99 vstem3 +635 98 vstem +48 349 rmoveto +0 -192 144 -169 199 0 rrcurveto +193 0 149 165 0 204 rrcurveto +0 202 -142 170 -200 0 rrcurveto +-202 0 -141 -143 0 -237 rrcurveto +closepath +98 -2 rmoveto +0 216 111 84 135 0 rrcurveto +145 0 98 -133 0 -157 rrcurveto +0 -184 -103 -104 -142 0 rrcurveto +-140 0 -104 106 0 172 rrcurveto +closepath +249 461 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +93 0 rlineto +110 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/uni01D2 { +0 556 hsbw +-12 73 hstem +458 72 hstem +583 54 hstem +700 20 hstem +33 92 232 89 429 90 vstem3 +33 259 rmoveto +0 -175 97 -96 146 0 rrcurveto +144 0 99 107 0 172 rrcurveto +0 164 -101 99 -142 0 rrcurveto +-150 0 -93 -103 0 -168 rrcurveto +closepath +91 0 rmoveto +0 133 64 66 88 0 rrcurveto +86 0 67 -68 0 -128 rrcurveto +0 -136 -65 -65 -88 0 rrcurveto +-88 0 -64 66 0 132 rrcurveto +closepath +154 378 rmoveto +-55 83 rlineto +-101 0 rlineto +106 -137 rlineto +93 0 rlineto +110 137 rlineto +-99 0 rlineto +-54 -83 rlineto +closepath +endchar } ND +/uni01D3 { +0 722 hsbw +-12 85 hstem +696 20 hstem +754 54 hstem +79 94 vstem +215 100 325 89 424 100 vstem3 +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-176 92 rmoveto +-56 83 rlineto +-100 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/uni01D4 { +0 556 hsbw +-12 76 hstem +499 20 hstem +583 54 hstem +700 20 hstem +64 88 vstem +232 94 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-123 637 rmoveto +-55 83 rlineto +-101 0 rlineto +105 -137 rlineto +94 0 rlineto +110 137 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/uni01D5 { +0 722 hsbw +-12 85 hstem +696 20 hstem +730 72 hstem +843 57 hstem +79 94 vstem +240 66 vstem +426 66 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-55 127 rmoveto +0 57 rlineto +-252 0 rlineto +0 -57 rlineto +252 0 rlineto +closepath +0 -113 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-186 0 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +/uni01D6 { +0 556 hsbw +-12 76 hstem +499 20 hstem +620 100 hstem +780 72 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-269 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +-197 160 rmoveto +304 0 rlineto +0 72 rlineto +-304 0 rlineto +0 -72 rlineto +closepath +endchar } ND +/uni01D7 { +0 722 hsbw +-12 85 hstem +696 20 hstem +730 170 hstem +79 94 vstem +240 66 vstem +313 64 vstem +426 66 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-57 184 rmoveto +-111 0 rlineto +-66 -87 rlineto +64 0 rlineto +113 87 rlineto +closepath +2 -170 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-186 0 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +/uni01D8 { +0 556 hsbw +-12 76 hstem +499 20 hstem +620 100 hstem +764 136 hstem +64 88 vstem +221 73 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-269 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +-98 144 rmoveto +73 0 rlineto +107 136 rlineto +-115 0 rlineto +-65 -136 rlineto +closepath +endchar } ND +/uni01D9 { +0 722 hsbw +-12 85 hstem +696 20 hstem +730 170 hstem +79 94 vstem +240 66 334 64 426 66 vstem3 +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-55 14 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-14 170 rmoveto +-72 0 rlineto +-39 -47 rlineto +-39 47 rlineto +-73 0 rlineto +76 -86 rlineto +67 0 rlineto +80 86 rlineto +closepath +-172 -170 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +/uni01DA { +0 556 hsbw +-12 76 hstem +499 20 hstem +620 100 hstem +764 53 hstem +880 20 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-269 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +-36 197 rmoveto +-55 83 rlineto +-101 0 rlineto +105 -136 rlineto +94 0 rlineto +110 136 rlineto +-100 0 rlineto +-53 -83 rlineto +closepath +endchar } ND +/uni01DB { +0 722 hsbw +-12 85 hstem +696 20 hstem +730 170 hstem +79 94 vstem +240 66 vstem +355 64 vstem +426 66 vstem +547 95 vstem +547 716 rmoveto +0 -413 rlineto +0 -180 -55 -50 -138 0 rrcurveto +-132 0 -49 78 0 152 rrcurveto +0 413 rlineto +-94 0 rlineto +0 -414 rlineto +0 -204 88 -110 195 0 rrcurveto +189 0 91 115 0 199 rrcurveto +0 414 rlineto +-95 0 rlineto +closepath +-55 14 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-73 83 rmoveto +-66 87 rlineto +-110 0 rlineto +112 -87 rlineto +64 0 rlineto +closepath +-113 -83 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +/uni01DC { +0 556 hsbw +-12 76 hstem +499 20 hstem +620 100 hstem +764 136 hstem +64 88 vstem +406 78 vstem +406 0 rmoveto +78 0 rlineto +0 519 rlineto +-88 0 rlineto +0 -278 rlineto +0 -111 -51 -66 -86 0 rrcurveto +-91 0 -16 55 0 112 rrcurveto +0 288 rlineto +-88 0 rlineto +0 -322 rlineto +0 -146 67 -63 110 0 rrcurveto +69 0 55 29 41 59 rrcurveto +0 -76 rlineto +closepath +-269 620 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +182 0 rmoveto +92 0 rlineto +0 100 rlineto +-92 0 rlineto +0 -100 rlineto +closepath +8 144 rmoveto +-66 136 rlineto +-117 0 rlineto +112 -136 rlineto +71 0 rlineto +closepath +endchar } ND +/_1292 { +0 0 hsbw +730 72 hstem +843 57 hstem +-126 66 vstem +60 66 vstem +126 843 rmoveto +0 57 rlineto +-252 0 rlineto +0 -57 rlineto +252 0 rlineto +closepath +0 -113 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-186 0 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +/_1293 { +0 0 hsbw +730 170 hstem +-126 66 vstem +-53 64 vstem +60 66 vstem +124 900 rmoveto +-111 0 rlineto +-66 -87 rlineto +64 0 rlineto +113 87 rlineto +closepath +2 -170 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-186 0 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +/_1294 { +0 0 hsbw +730 170 hstem +-126 66 -32 64 60 66 vstem3 +126 730 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-15 170 rmoveto +-71 0 rlineto +-39 -47 rlineto +-40 47 rlineto +-72 0 rlineto +76 -86 rlineto +67 0 rlineto +79 86 rlineto +closepath +-171 -170 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +/_1295 { +0 0 hsbw +730 170 hstem +-126 66 vstem +-11 64 vstem +60 66 vstem +126 730 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +-73 83 rmoveto +-66 87 rlineto +-111 0 rlineto +113 -87 rlineto +64 0 rlineto +closepath +-113 -83 rmoveto +0 72 rlineto +-66 0 rlineto +0 -72 rlineto +66 0 rlineto +closepath +endchar } ND +end +end +readonly put +noaccess put +dup/FontName get exch definefont pop +mark currentfile closefile +cleartomark diff --git a/fonts/arial_ce_b.afm b/fonts/arial_ce_b.afm new file mode 100644 index 0000000..3149961 --- /dev/null +++ b/fonts/arial_ce_b.afm @@ -0,0 +1,2293 @@ +StartFontMetrics 4.1 +FontName Arial-BoldMT +FullName Arial Bold +Notice Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +EncodingScheme FontSpecific +FamilyName Arial +Weight Bold +Version (Version 2.90) +Characters 1320 +ItalicAngle 0.0 +Ascender 905 +Descender -212 +UnderlineThickness 105 +UnderlinePosition -106 +IsFixedPitch false +FontBBox -627 -376 2034 1010 +StartCharMetrics 1362 +C 0 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 1 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 2 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 3 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 4 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 5 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 6 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 7 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 8 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 9 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 10 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 11 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 12 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 13 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 14 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 15 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 16 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 17 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 18 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 19 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 20 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 21 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 22 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 23 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 24 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 25 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 26 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 27 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 28 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 29 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 30 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 31 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 32 ; WX 278 ; N space ; B 90 0 238 716 ; +C 33 ; WX 333 ; N exclam ; B 90 0 238 716 ; +C 34 ; WX 474 ; N quotedbl ; B 55 461 424 716 ; +C 35 ; WX 556 ; N numbersign ; B 9 -12 544 728 ; +C 36 ; WX 556 ; N dollar ; B 34 -100 512 773 ; +C 37 ; WX 889 ; N percent ; B 43 -29 842 728 ; +C 38 ; WX 722 ; N ampersand ; B 44 -19 706 728 ; +C 39 ; WX 238 ; N quotesingle ; B 45 461 194 716 ; +C 40 ; WX 333 ; N parenleft ; B 52 -210 301 728 ; +C 41 ; WX 333 ; N parenright ; B 33 -210 281 728 ; +C 42 ; WX 389 ; N asterisk ; B 14 387 368 728 ; +C 43 ; WX 584 ; N plus ; B 42 103 542 604 ; +C 44 ; WX 278 ; N comma ; B 57 -160 206 137 ; +C 45 ; WX 333 ; N hyphen ; B 32 191 301 328 ; +C 46 ; WX 278 ; N period ; B 72 0 209 137 ; +C 47 ; WX 278 ; N slash ; B -1 -12 279 728 ; +C 48 ; WX 556 ; N zero ; B 42 -12 507 719 ; +C 49 ; WX 556 ; N one ; B 79 0 394 719 ; +C 50 ; WX 556 ; N two ; B 25 0 506 719 ; +C 51 ; WX 556 ; N three ; B 38 -12 513 719 ; +C 52 ; WX 556 ; N four ; B 19 0 533 719 ; +C 53 ; WX 556 ; N five ; B 44 -12 526 706 ; +C 54 ; WX 556 ; N six ; B 42 -12 521 719 ; +C 55 ; WX 556 ; N seven ; B 42 0 512 706 ; +C 56 ; WX 556 ; N eight ; B 41 -13 511 719 ; +C 57 ; WX 556 ; N nine ; B 32 -13 510 719 ; +C 58 ; WX 333 ; N colon ; B 98 0 235 519 ; +C 59 ; WX 333 ; N semicolon ; B 83 -160 231 519 ; +C 60 ; WX 584 ; N less ; B 46 82 537 625 ; +C 61 ; WX 584 ; N equal ; B 42 182 542 524 ; +C 62 ; WX 584 ; N greater ; B 46 81 538 625 ; +C 63 ; WX 611 ; N question ; B 52 0 565 723 ; +C 64 ; WX 975 ; N at ; B 30 -210 972 729 ; +C 65 ; WX 722 ; N A ; B 0 0 718 716 ; +C 66 ; WX 722 ; N B ; B 73 0 673 716 ; +C 67 ; WX 722 ; N C ; B 47 -12 671 728 ; +C 68 ; WX 722 ; N D ; B 72 0 672 716 ; +C 69 ; WX 667 ; N E ; B 73 0 617 716 ; +C 70 ; WX 611 ; N F ; B 74 0 564 716 ; +C 71 ; WX 778 ; N G ; B 48 -12 717 728 ; +C 72 ; WX 722 ; N H ; B 73 0 646 716 ; +C 73 ; WX 278 ; N I ; B 68 0 213 716 ; +C 74 ; WX 556 ; N J ; B 17 -12 475 716 ; +C 75 ; WX 722 ; N K ; B 75 0 720 716 ; +C 76 ; WX 611 ; N L ; B 77 0 581 710 ; +C 77 ; WX 833 ; N M ; B 71 0 762 716 ; +C 78 ; WX 722 ; N N ; B 74 0 642 716 ; +C 79 ; WX 778 ; N O ; B 43 -12 738 728 ; +C 80 ; WX 667 ; N P ; B 73 0 621 716 ; +C 81 ; WX 778 ; N Q ; B 43 -72 765 728 ; +C 82 ; WX 722 ; N R ; B 73 0 717 716 ; +C 83 ; WX 667 ; N S ; B 36 -13 618 728 ; +C 84 ; WX 611 ; N T ; B 21 0 590 716 ; +C 85 ; WX 722 ; N U ; B 72 -12 643 716 ; +C 86 ; WX 667 ; N V ; B 0 0 666 716 ; +C 87 ; WX 944 ; N W ; B 3 0 943 716 ; +C 88 ; WX 667 ; N X ; B 0 0 666 716 ; +C 89 ; WX 667 ; N Y ; B -1 0 668 716 ; +C 90 ; WX 611 ; N Z ; B 11 0 592 716 ; +C 91 ; WX 333 ; N bracketleft ; B 71 -202 314 716 ; +C 92 ; WX 278 ; N backslash ; B -1 -12 279 728 ; +C 93 ; WX 333 ; N bracketright ; B 19 -202 262 716 ; +C 94 ; WX 584 ; N asciicircum ; B 56 338 527 728 ; +C 95 ; WX 556 ; N underscore ; B -9 -198 561 -109 ; +C 96 ; WX 333 ; N grave ; B 21 582 242 728 ; +C 97 ; WX 556 ; N a ; B 36 -12 522 530 ; +C 98 ; WX 611 ; N b ; B 66 -12 572 716 ; +C 99 ; WX 556 ; N c ; B 42 -12 531 530 ; +C 100 ; WX 611 ; N d ; B 41 -12 547 716 ; +C 101 ; WX 556 ; N e ; B 32 -12 519 530 ; +C 102 ; WX 333 ; N f ; B 12 0 362 728 ; +C 103 ; WX 611 ; N g ; B 41 -210 547 530 ; +C 104 ; WX 611 ; N h ; B 71 0 543 716 ; +C 105 ; WX 278 ; N i ; B 72 0 209 716 ; +C 106 ; WX 278 ; N j ; B -46 -210 206 716 ; +C 107 ; WX 556 ; N k ; B 67 0 546 716 ; +C 108 ; WX 278 ; N l ; B 72 0 209 716 ; +C 109 ; WX 889 ; N m ; B 62 0 824 530 ; +C 110 ; WX 611 ; N n ; B 71 0 543 530 ; +C 111 ; WX 611 ; N o ; B 40 -12 575 530 ; +C 112 ; WX 611 ; N p ; B 68 -197 574 530 ; +C 113 ; WX 611 ; N q ; B 44 -197 548 530 ; +C 114 ; WX 389 ; N r ; B 66 0 402 530 ; +C 115 ; WX 556 ; N s ; B 23 -12 508 530 ; +C 116 ; WX 333 ; N t ; B 15 -12 321 702 ; +C 117 ; WX 611 ; N u ; B 69 -12 541 519 ; +C 118 ; WX 556 ; N v ; B 5 0 544 519 ; +C 119 ; WX 778 ; N w ; B 4 0 777 519 ; +C 120 ; WX 556 ; N x ; B 6 0 547 519 ; +C 121 ; WX 556 ; N y ; B 7 -210 540 519 ; +C 122 ; WX 500 ; N z ; B 17 0 479 519 ; +C 123 ; WX 389 ; N braceleft ; B 29 -210 363 728 ; +C 124 ; WX 280 ; N bar ; B 86 -210 195 728 ; +C 125 ; WX 389 ; N braceright ; B 22 -210 356 728 ; +C 126 ; WX 584 ; N asciitilde ; B 33 253 551 451 ; +C 127 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 128 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 129 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 130 ; WX 278 ; N quotesinglbase ; B 57 -160 206 137 ; +C 131 ; WX 556 ; N florin ; B -10 -210 558 728 ; +C 132 ; WX 500 ; N quotedblbase ; B 51 -160 430 137 ; +C 133 ; WX 1000 ; N ellipsis ; B 98 0 902 137 ; +C 134 ; WX 556 ; N dagger ; B 33 -171 517 707 ; +C 135 ; WX 556 ; N daggerdbl ; B 33 -171 517 707 ; +C 136 ; WX 333 ; N circumflex ; B 1 584 332 728 ; +C 137 ; WX 1000 ; N perthousand ; B 0 -29 1000 728 ; +C 138 ; WX 667 ; N Scaron ; B 36 -13 618 904 ; +C 139 ; WX 333 ; N guilsinglleft ; B 37 34 299 480 ; +C 140 ; WX 1000 ; N OE ; B 35 -12 969 728 ; +C 141 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 142 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 143 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 144 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 145 ; WX 278 ; N quoteleft ; B 74 426 223 723 ; +C 146 ; WX 278 ; N quoteright ; B 57 417 206 714 ; +C 147 ; WX 500 ; N quotedblleft ; B 64 426 442 723 ; +C 148 ; WX 500 ; N quotedblright ; B 51 418 430 716 ; +C 149 ; WX 350 ; N bullet ; B 32 209 321 498 ; +C 150 ; WX 556 ; N endash ; B -2 208 554 311 ; +C 151 ; WX 1000 ; N emdash ; B 0 208 1000 311 ; +C 152 ; WX 333 ; N tilde ; B -6 588 332 713 ; +C 153 ; WX 1000 ; N trademark ; B 105 316 877 716 ; +C 154 ; WX 556 ; N scaron ; B 23 -12 508 728 ; +C 155 ; WX 333 ; N guilsinglright ; B 37 34 299 480 ; +C 156 ; WX 944 ; N oe ; B 43 -12 903 530 ; +C 157 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 158 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 159 ; WX 667 ; N Ydieresis ; B -1 0 668 875 ; +C 160 ; WX 278 ; N space ; B 90 0 238 716 ; +C 161 ; WX 333 ; N exclamdown ; B 95 -199 244 519 ; +C 162 ; WX 556 ; N cent ; B 41 -197 530 711 ; +C 163 ; WX 556 ; N sterling ; B 6 -12 541 728 ; +C 164 ; WX 556 ; N currency ; B 22 101 531 610 ; +C 165 ; WX 556 ; N yen ; B 0 0 551 716 ; +C 166 ; WX 280 ; N brokenbar ; B 86 -210 195 728 ; +C 167 ; WX 556 ; N section ; B 29 -210 521 728 ; +C 168 ; WX 333 ; N dieresis ; B 2 610 331 728 ; +C 169 ; WX 737 ; N copyright ; B -4 -18 744 730 ; +C 170 ; WX 370 ; N ordfeminine ; B 18 363 346 728 ; +C 171 ; WX 556 ; N guillemotleft ; B 47 34 500 480 ; +C 172 ; WX 584 ; N logicalnot ; B 42 184 542 524 ; +C 173 ; WX 333 ; N hyphen ; B 32 191 301 328 ; +C 174 ; WX 737 ; N registered ; B -4 -18 744 730 ; +C 175 ; WX 552 ; N overscore ; B -9 758 561 847 ; +C 176 ; WX 400 ; N degree ; B 42 417 354 728 ; +C 177 ; WX 549 ; N plusminus ; B 24 0 525 674 ; +C 178 ; WX 333 ; N twosuperior ; B 12 355 309 725 ; +C 179 ; WX 333 ; N threesuperior ; B 20 349 313 725 ; +C 180 ; WX 333 ; N acute ; B 91 582 313 728 ; +C 181 ; WX 576 ; N mu1 ; B 54 -199 526 519 ; +C 182 ; WX 556 ; N paragraph ; B -1 -197 551 716 ; +C 183 ; WX 278 ; N periodcentered ; B 72 280 209 417 ; +C 184 ; WX 333 ; N cedilla ; B 19 -205 285 -6 ; +C 185 ; WX 333 ; N onesuperior ; B 44 355 242 725 ; +C 186 ; WX 365 ; N ordmasculine ; B 13 361 352 728 ; +C 187 ; WX 556 ; N guillemotright ; B 52 34 505 480 ; +C 188 ; WX 834 ; N onequarter ; B 45 -26 824 725 ; +C 189 ; WX 834 ; N onehalf ; B 45 -26 809 725 ; +C 190 ; WX 834 ; N threequarters ; B 20 -26 824 725 ; +C 191 ; WX 611 ; N questiondown ; B 49 -205 563 519 ; +C 192 ; WX 722 ; N Agrave ; B 0 0 718 903 ; +C 193 ; WX 722 ; N Aacute ; B 0 0 718 903 ; +C 194 ; WX 722 ; N Acircumflex ; B 0 0 718 901 ; +C 195 ; WX 722 ; N Atilde ; B 0 0 718 880 ; +C 196 ; WX 722 ; N Adieresis ; B 0 0 718 875 ; +C 197 ; WX 722 ; N Aring ; B 0 0 718 858 ; +C 198 ; WX 1000 ; N AE ; B -42 0 952 716 ; +C 199 ; WX 722 ; N Ccedilla ; B 47 -205 671 728 ; +C 200 ; WX 667 ; N Egrave ; B 73 0 617 903 ; +C 201 ; WX 667 ; N Eacute ; B 73 0 617 903 ; +C 202 ; WX 667 ; N Ecircumflex ; B 73 0 617 901 ; +C 203 ; WX 667 ; N Edieresis ; B 73 0 617 875 ; +C 204 ; WX 278 ; N Igrave ; B -5 0 216 903 ; +C 205 ; WX 278 ; N Iacute ; B 52 0 273 903 ; +C 206 ; WX 278 ; N Icircumflex ; B -21 0 310 901 ; +C 207 ; WX 278 ; N Idieresis ; B -22 0 306 875 ; +C 208 ; WX 722 ; N Eth ; B -1 0 673 716 ; +C 209 ; WX 722 ; N Ntilde ; B 74 0 642 880 ; +C 210 ; WX 778 ; N Ograve ; B 43 -12 738 903 ; +C 211 ; WX 778 ; N Oacute ; B 43 -12 738 903 ; +C 212 ; WX 778 ; N Ocircumflex ; B 43 -12 738 901 ; +C 213 ; WX 778 ; N Otilde ; B 43 -12 738 880 ; +C 214 ; WX 778 ; N Odieresis ; B 43 -12 738 875 ; +C 215 ; WX 584 ; N multiply ; B 53 115 530 591 ; +C 216 ; WX 778 ; N Oslash ; B 31 -40 750 750 ; +C 217 ; WX 722 ; N Ugrave ; B 72 -12 643 903 ; +C 218 ; WX 722 ; N Uacute ; B 72 -12 643 903 ; +C 219 ; WX 722 ; N Ucircumflex ; B 72 -12 643 901 ; +C 220 ; WX 722 ; N Udieresis ; B 72 -12 643 875 ; +C 221 ; WX 667 ; N Yacute ; B -1 0 668 903 ; +C 222 ; WX 667 ; N Thorn ; B 73 0 621 716 ; +C 223 ; WX 611 ; N germandbls ; B 68 -12 576 728 ; +C 224 ; WX 556 ; N agrave ; B 36 -12 522 728 ; +C 225 ; WX 556 ; N aacute ; B 36 -12 522 728 ; +C 226 ; WX 556 ; N acircumflex ; B 36 -12 522 728 ; +C 227 ; WX 556 ; N atilde ; B 36 -12 522 713 ; +C 228 ; WX 556 ; N adieresis ; B 36 -12 522 728 ; +C 229 ; WX 556 ; N aring ; B 36 -12 522 751 ; +C 230 ; WX 889 ; N ae ; B 43 -12 842 530 ; +C 231 ; WX 556 ; N ccedilla ; B 42 -205 531 530 ; +C 232 ; WX 556 ; N egrave ; B 32 -12 519 728 ; +C 233 ; WX 556 ; N eacute ; B 32 -12 519 728 ; +C 234 ; WX 556 ; N ecircumflex ; B 32 -12 519 728 ; +C 235 ; WX 556 ; N edieresis ; B 32 -12 519 728 ; +C 236 ; WX 278 ; N igrave ; B -11 0 210 728 ; +C 237 ; WX 278 ; N iacute ; B 62 0 283 728 ; +C 238 ; WX 278 ; N icircumflex ; B -25 0 306 728 ; +C 239 ; WX 278 ; N idieresis ; B -23 0 305 728 ; +C 240 ; WX 611 ; N eth ; B 41 -12 574 716 ; +C 241 ; WX 611 ; N ntilde ; B 71 0 543 713 ; +C 242 ; WX 611 ; N ograve ; B 40 -12 575 728 ; +C 243 ; WX 611 ; N oacute ; B 40 -12 575 728 ; +C 244 ; WX 611 ; N ocircumflex ; B 40 -12 575 728 ; +C 245 ; WX 611 ; N otilde ; B 40 -12 575 713 ; +C 246 ; WX 611 ; N odieresis ; B 40 -12 575 728 ; +C 247 ; WX 549 ; N divide ; B 24 90 524 616 ; +C 248 ; WX 611 ; N oslash ; B 42 -36 578 546 ; +C 249 ; WX 611 ; N ugrave ; B 69 -12 541 728 ; +C 250 ; WX 611 ; N uacute ; B 69 -12 541 728 ; +C 251 ; WX 611 ; N ucircumflex ; B 69 -12 541 728 ; +C 252 ; WX 611 ; N udieresis ; B 69 -12 541 728 ; +C 253 ; WX 556 ; N yacute ; B 7 -210 540 728 ; +C 254 ; WX 611 ; N thorn ; B 68 -197 574 716 ; +C 255 ; WX 556 ; N ydieresis ; B 7 -210 540 728 ; +C -1 ; WX 0 ; N .null ; B 90 0 238 716 ; +C -1 ; WX 278 ; N nonmarkingreturn ; B 90 0 238 716 ; +C -1 ; WX 549 ; N notequal ; B 24 -12 524 719 ; +C -1 ; WX 713 ; N infinity ; B 74 182 640 523 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 520 708 ; +C -1 ; WX 549 ; N greaterequal ; B 29 0 520 708 ; +C -1 ; WX 494 ; N partialdiff ; B 20 -12 475 728 ; +C -1 ; WX 713 ; N summation ; B 60 -210 677 728 ; +C -1 ; WX 823 ; N product ; B 79 -210 744 728 ; +C -1 ; WX 549 ; N pi1 ; B 0 0 549 519 ; +C -1 ; WX 274 ; N integral ; B 0 -107 273 910 ; +C -1 ; WX 768 ; N Ohm ; B 27 0 747 734 ; +C -1 ; WX 549 ; N radical ; B 42 -38 550 913 ; +C -1 ; WX 549 ; N approxequal ; B 15 135 534 569 ; +C -1 ; WX 612 ; N increment ; B 14 0 600 677 ; +C -1 ; WX 494 ; N lozenge ; B 23 0 472 694 ; +C -1 ; WX 167 ; N fraction ; B -167 -26 334 725 ; +C -1 ; WX 556 ; N Euro ; B -16 -12 525 728 ; +C -1 ; WX 611 ; N fi ; B 15 0 538 728 ; +C -1 ; WX 611 ; N fl ; B 15 0 538 728 ; +C -1 ; WX 278 ; N dotlessi ; B 72 0 209 519 ; +C -1 ; WX 333 ; N macron ; B 9 604 324 694 ; +C -1 ; WX 333 ; N breve ; B 13 586 317 728 ; +C -1 ; WX 333 ; N dotaccent ; B 100 598 235 728 ; +C -1 ; WX 333 ; N ring ; B 71 560 262 751 ; +C -1 ; WX 333 ; N hungarumlaut ; B 47 584 439 730 ; +C -1 ; WX 333 ; N ogonek ; B 78 -210 295 13 ; +C -1 ; WX 333 ; N caron ; B 1 584 332 728 ; +C -1 ; WX 611 ; N Lslash ; B 5 0 584 716 ; +C -1 ; WX 278 ; N lslash ; B 5 0 276 716 ; +C -1 ; WX 611 ; N Zcaron ; B 11 0 592 904 ; +C -1 ; WX 500 ; N zcaron ; B 17 0 479 728 ; +C -1 ; WX 584 ; N minus ; B 42 289 542 417 ; +C -1 ; WX 556 ; N franc ; B 0 0 506 716 ; +C -1 ; WX 778 ; N Gbreve ; B 48 -12 717 896 ; +C -1 ; WX 611 ; N gbreve ; B 41 -210 547 728 ; +C -1 ; WX 278 ; N Idot ; B 68 0 213 887 ; +C -1 ; WX 667 ; N Scedilla ; B 36 -205 618 728 ; +C -1 ; WX 556 ; N scedilla ; B 23 -205 508 530 ; +C -1 ; WX 722 ; N Cacute ; B 47 -12 671 903 ; +C -1 ; WX 556 ; N cacute ; B 42 -12 531 728 ; +C -1 ; WX 722 ; N Ccaron ; B 47 -12 671 904 ; +C -1 ; WX 556 ; N ccaron ; B 42 -12 531 728 ; +C -1 ; WX 611 ; N dmacron ; B 41 -12 602 716 ; +C -1 ; WX 333 ; N middot ; B 239 280 376 417 ; +C -1 ; WX 722 ; N Abreve ; B 0 0 718 896 ; +C -1 ; WX 556 ; N abreve ; B 36 -12 522 728 ; +C -1 ; WX 722 ; N Aogonek ; B 0 -210 764 716 ; +C -1 ; WX 556 ; N aogonek ; B 36 -210 591 530 ; +C -1 ; WX 722 ; N Dcaron ; B 72 0 672 904 ; +C -1 ; WX 719 ; N dcaron ; B 40 -12 719 716 ; +C -1 ; WX 722 ; N Dslash ; B -1 0 673 716 ; +C -1 ; WX 667 ; N Eogonek ; B 73 -210 617 716 ; +C -1 ; WX 556 ; N eogonek ; B 32 -210 519 530 ; +C -1 ; WX 667 ; N Ecaron ; B 73 0 617 904 ; +C -1 ; WX 556 ; N ecaron ; B 32 -12 519 728 ; +C -1 ; WX 611 ; N Lacute ; B 77 0 581 903 ; +C -1 ; WX 278 ; N lacute ; B 59 0 280 898 ; +C -1 ; WX 611 ; N Lcaron ; B 77 0 581 710 ; +C -1 ; WX 385 ; N lcaron ; B 73 0 383 716 ; +C -1 ; WX 611 ; N Ldot ; B 77 0 581 710 ; +C -1 ; WX 479 ; N ldot ; B 72 0 409 716 ; +C -1 ; WX 722 ; N Nacute ; B 74 0 642 903 ; +C -1 ; WX 611 ; N nacute ; B 71 0 543 728 ; +C -1 ; WX 722 ; N Ncaron ; B 74 0 642 904 ; +C -1 ; WX 611 ; N ncaron ; B 71 0 543 728 ; +C -1 ; WX 778 ; N Odblacute ; B 43 -12 738 902 ; +C -1 ; WX 611 ; N odblacute ; B 40 -12 575 730 ; +C -1 ; WX 722 ; N Racute ; B 73 0 717 903 ; +C -1 ; WX 389 ; N racute ; B 66 0 402 728 ; +C -1 ; WX 722 ; N Rcaron ; B 73 0 717 904 ; +C -1 ; WX 389 ; N rcaron ; B 39 0 402 728 ; +C -1 ; WX 667 ; N Sacute ; B 36 -13 618 903 ; +C -1 ; WX 556 ; N sacute ; B 23 -12 508 728 ; +C -1 ; WX 611 ; N Tcedilla ; B 21 -319 590 716 ; +C -1 ; WX 333 ; N tcedilla ; B 15 -293 321 702 ; +C -1 ; WX 611 ; N Tcaron ; B 21 0 590 904 ; +C -1 ; WX 479 ; N tcaron ; B 15 -12 480 716 ; +C -1 ; WX 722 ; N Uring ; B 72 -12 643 919 ; +C -1 ; WX 611 ; N uring ; B 69 -12 541 751 ; +C -1 ; WX 722 ; N Udblacute ; B 72 -12 643 902 ; +C -1 ; WX 611 ; N udblacute ; B 69 -12 548 730 ; +C -1 ; WX 611 ; N Zacute ; B 11 0 592 903 ; +C -1 ; WX 500 ; N zacute ; B 17 0 479 728 ; +C -1 ; WX 611 ; N Zdot ; B 11 0 592 890 ; +C -1 ; WX 500 ; N zdot ; B 17 0 479 728 ; +C -1 ; WX 601 ; N Gamma ; B 75 0 579 716 ; +C -1 ; WX 778 ; N Theta ; B 42 -12 736 728 ; +C -1 ; WX 821 ; N Phi ; B 42 -29 779 734 ; +C -1 ; WX 615 ; N alpha ; B 38 -12 582 530 ; +C -1 ; WX 606 ; N delta ; B 38 -12 569 716 ; +C -1 ; WX 475 ; N epsilon ; B 38 -12 463 530 ; +C -1 ; WX 684 ; N sigma ; B 38 -12 661 530 ; +C -1 ; WX 446 ; N tau ; B 23 0 422 519 ; +C -1 ; WX 715 ; N phi ; B 38 -197 678 531 ; +C -1 ; WX 552 ; N underscoredbl ; B -9 -376 561 -109 ; +C -1 ; WX 604 ; N exclamdbl ; B 90 0 509 716 ; +C -1 ; WX 396 ; N nsuperior ; B 39 253 357 585 ; +C -1 ; WX 1094 ; N peseta ; B 20 -13 1075 716 ; +C -1 ; WX 1000 ; N arrowleft ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowup ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowright ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowdown ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowboth ; B 39 77 961 429 ; +C -1 ; WX 500 ; N arrowupdn ; B 74 -208 425 714 ; +C -1 ; WX 500 ; N arrowupdnbse ; B 74 -303 425 714 ; +C -1 ; WX 979 ; N orthogonal ; B 177 0 802 625 ; +C -1 ; WX 722 ; N intersection ; B 70 0 648 719 ; +C -1 ; WX 583 ; N equivalence ; B 42 73 542 633 ; +C -1 ; WX 604 ; N house ; B 77 0 527 563 ; +C -1 ; WX 584 ; N revlogicalnot ; B 42 184 542 524 ; +C -1 ; WX 604 ; N integraltp ; B 267 -251 477 848 ; +C -1 ; WX 604 ; N integralbt ; B 127 -251 337 848 ; +C -1 ; WX 708 ; N SF100000 ; B -11 261 719 346 ; +C -1 ; WX 625 ; N SF110000 ; B 223 -303 309 910 ; +C -1 ; WX 708 ; N SF010000 ; B 312 -303 720 346 ; +C -1 ; WX 708 ; N SF030000 ; B -11 -303 396 346 ; +C -1 ; WX 708 ; N SF020000 ; B 312 261 720 910 ; +C -1 ; WX 708 ; N SF040000 ; B -11 261 396 910 ; +C -1 ; WX 708 ; N SF080000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF090000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF060000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF070000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF050000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF430000 ; B -11 168 719 439 ; +C -1 ; WX 708 ; N SF240000 ; B 219 -303 490 910 ; +C -1 ; WX 708 ; N SF510000 ; B 312 -303 720 439 ; +C -1 ; WX 708 ; N SF520000 ; B 219 -303 720 346 ; +C -1 ; WX 708 ; N SF390000 ; B 219 -303 719 439 ; +C -1 ; WX 708 ; N SF220000 ; B -11 -303 396 439 ; +C -1 ; WX 708 ; N SF210000 ; B -11 -303 489 346 ; +C -1 ; WX 708 ; N SF250000 ; B -11 -303 489 439 ; +C -1 ; WX 708 ; N SF500000 ; B 312 168 720 910 ; +C -1 ; WX 708 ; N SF490000 ; B 219 261 720 910 ; +C -1 ; WX 708 ; N SF380000 ; B 219 168 719 910 ; +C -1 ; WX 708 ; N SF280000 ; B -11 168 396 910 ; +C -1 ; WX 708 ; N SF270000 ; B -11 261 489 910 ; +C -1 ; WX 708 ; N SF260000 ; B -11 168 489 910 ; +C -1 ; WX 708 ; N SF360000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF370000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF420000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF190000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF200000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF230000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF470000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF480000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF410000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF450000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF460000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF400000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF540000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF530000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF440000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N upblock ; B -11 303 719 910 ; +C -1 ; WX 708 ; N dnblock ; B -11 -303 719 303 ; +C -1 ; WX 708 ; N block ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N lfblock ; B -11 -303 354 910 ; +C -1 ; WX 708 ; N rtblock ; B 354 -303 720 910 ; +C -1 ; WX 708 ; N ltshade ; B 50 -246 719 910 ; +C -1 ; WX 708 ; N shade ; B -11 -246 719 910 ; +C -1 ; WX 729 ; N dkshade ; B 0 -307 729 910 ; +C -1 ; WX 604 ; N filledbox ; B 71 0 532 461 ; +C -1 ; WX 1000 ; N filledrect ; B 0 155 1000 343 ; +C -1 ; WX 990 ; N triagup ; B 148 0 842 693 ; +C -1 ; WX 990 ; N triagrt ; B 141 -15 849 692 ; +C -1 ; WX 990 ; N triagdn ; B 148 -15 842 678 ; +C -1 ; WX 990 ; N triaglf ; B 141 -15 849 692 ; +C -1 ; WX 604 ; N circle ; B 87 67 517 497 ; +C -1 ; WX 604 ; N invbullet ; B 63 0 541 479 ; +C -1 ; WX 604 ; N invcircle ; B 21 0 584 564 ; +C -1 ; WX 1021 ; N smileface ; B 199 -58 822 564 ; +C -1 ; WX 1052 ; N invsmileface ; B 215 -58 837 564 ; +C -1 ; WX 917 ; N sun ; B 8 -109 909 792 ; +C -1 ; WX 750 ; N female ; B 119 -214 630 736 ; +C -1 ; WX 750 ; N male ; B 54 -128 691 791 ; +C -1 ; WX 531 ; N spade ; B 28 0 503 601 ; +C -1 ; WX 656 ; N club ; B 27 0 629 601 ; +C -1 ; WX 594 ; N heart ; B 31 -12 563 601 ; +C -1 ; WX 510 ; N diamond ; B 31 -12 479 601 ; +C -1 ; WX 500 ; N musicalnote ; B 18 -18 482 666 ; +C -1 ; WX 750 ; N musicalnotedbl ; B 42 -63 649 742 ; +C -1 ; WX 785 ; N IJ ; B 68 -12 708 716 ; +C -1 ; WX 556 ; N ij ; B 72 -210 478 716 ; +C -1 ; WX 708 ; N napostrophe ; B -28 0 635 716 ; +C -1 ; WX 240 ; N minute ; B 69 461 247 716 ; +C -1 ; WX 479 ; N second ; B 69 461 467 716 ; +C -1 ; WX 885 ; N afii61248 ; B 17 -27 868 728 ; +C -1 ; WX 489 ; N afii61289 ; B 12 -12 453 728 ; +C -1 ; WX 604 ; N H22073 ; B 71 0 532 461 ; +C -1 ; WX 354 ; N H18543 ; B 45 198 310 463 ; +C -1 ; WX 354 ; N H18551 ; B 45 198 310 463 ; +C -1 ; WX 604 ; N H18533 ; B 87 67 517 497 ; +C -1 ; WX 354 ; N openbullet ; B 38 190 316 470 ; +C -1 ; WX 722 ; N Amacron ; B 0 0 718 871 ; +C -1 ; WX 556 ; N amacron ; B 36 -12 522 694 ; +C -1 ; WX 722 ; N Ccircumflex ; B 47 -12 671 924 ; +C -1 ; WX 556 ; N ccircumflex ; B 42 -12 531 728 ; +C -1 ; WX 722 ; N Cdot ; B 47 -12 671 910 ; +C -1 ; WX 556 ; N cdot ; B 42 -12 531 728 ; +C -1 ; WX 667 ; N Emacron ; B 73 0 617 871 ; +C -1 ; WX 556 ; N emacron ; B 32 -12 519 694 ; +C -1 ; WX 667 ; N Ebreve ; B 73 0 617 918 ; +C -1 ; WX 556 ; N ebreve ; B 32 -12 519 728 ; +C -1 ; WX 667 ; N Edot ; B 73 0 617 910 ; +C -1 ; WX 556 ; N edot ; B 32 -12 519 728 ; +C -1 ; WX 778 ; N Gcircumflex ; B 48 -12 717 924 ; +C -1 ; WX 611 ; N gcircumflex ; B 41 -210 547 728 ; +C -1 ; WX 778 ; N Gdot ; B 48 -12 717 910 ; +C -1 ; WX 611 ; N gdot ; B 41 -210 547 728 ; +C -1 ; WX 778 ; N Gcedilla ; B 48 -205 717 728 ; +C -1 ; WX 611 ; N gcedilla ; B 41 -210 547 801 ; +C -1 ; WX 722 ; N Hcircumflex ; B 73 0 646 924 ; +C -1 ; WX 611 ; N hcircumflex ; B 71 0 543 901 ; +C -1 ; WX 722 ; N Hbar ; B 2 0 716 716 ; +C -1 ; WX 611 ; N hbar ; B 12 0 544 716 ; +C -1 ; WX 278 ; N Itilde ; B -34 0 304 904 ; +C -1 ; WX 278 ; N itilde ; B -34 0 304 713 ; +C -1 ; WX 278 ; N Imacron ; B -19 0 296 871 ; +C -1 ; WX 278 ; N imacron ; B -19 0 296 694 ; +C -1 ; WX 278 ; N Ibreve ; B -15 0 290 918 ; +C -1 ; WX 278 ; N ibreve ; B -15 0 290 728 ; +C -1 ; WX 278 ; N Iogonek ; B 54 -210 271 716 ; +C -1 ; WX 278 ; N iogonek ; B 57 -210 274 716 ; +C -1 ; WX 556 ; N Jcircumflex ; B 17 -12 568 924 ; +C -1 ; WX 278 ; N jcircumflex ; B -46 -210 304 728 ; +C -1 ; WX 722 ; N Kcedilla ; B 75 -206 720 716 ; +C -1 ; WX 556 ; N kcedilla ; B 67 -206 546 716 ; +C -1 ; WX 556 ; N kgreenlandic ; B 69 0 548 519 ; +C -1 ; WX 611 ; N Lcedilla ; B 77 -206 581 710 ; +C -1 ; WX 278 ; N lcedilla ; B -9 -206 257 716 ; +C -1 ; WX 722 ; N Ncedilla ; B 74 -206 642 716 ; +C -1 ; WX 611 ; N ncedilla ; B 71 -206 543 530 ; +C -1 ; WX 723 ; N Eng ; B 76 -13 676 728 ; +C -1 ; WX 611 ; N eng ; B 69 -213 542 530 ; +C -1 ; WX 778 ; N Omacron ; B 43 -12 738 871 ; +C -1 ; WX 611 ; N omacron ; B 40 -12 575 694 ; +C -1 ; WX 778 ; N Obreve ; B 43 -12 738 918 ; +C -1 ; WX 611 ; N obreve ; B 40 -12 575 728 ; +C -1 ; WX 722 ; N Rcedilla ; B 73 -206 717 716 ; +C -1 ; WX 389 ; N rcedilla ; B 21 -206 402 530 ; +C -1 ; WX 667 ; N Scircumflex ; B 36 -13 618 924 ; +C -1 ; WX 556 ; N scircumflex ; B 23 -12 508 728 ; +C -1 ; WX 611 ; N Tbar ; B 21 0 590 716 ; +C -1 ; WX 333 ; N tbar ; B 10 -12 321 702 ; +C -1 ; WX 722 ; N Utilde ; B 72 -12 643 904 ; +C -1 ; WX 611 ; N utilde ; B 69 -12 541 713 ; +C -1 ; WX 722 ; N Umacron ; B 72 -12 643 871 ; +C -1 ; WX 611 ; N umacron ; B 69 -12 541 694 ; +C -1 ; WX 722 ; N Ubreve ; B 72 -12 643 918 ; +C -1 ; WX 611 ; N ubreve ; B 69 -12 541 728 ; +C -1 ; WX 722 ; N Uogonek ; B 72 -210 643 716 ; +C -1 ; WX 611 ; N uogonek ; B 69 -211 616 519 ; +C -1 ; WX 944 ; N Wcircumflex ; B 3 0 943 924 ; +C -1 ; WX 778 ; N wcircumflex ; B 4 0 777 728 ; +C -1 ; WX 667 ; N Ycircumflex ; B -1 0 668 924 ; +C -1 ; WX 556 ; N ycircumflex ; B 7 -210 540 728 ; +C -1 ; WX 278 ; N longs ; B 69 0 343 728 ; +C -1 ; WX 722 ; N Aringacute ; B 0 0 718 1004 ; +C -1 ; WX 556 ; N aringacute ; B 36 -12 522 926 ; +C -1 ; WX 1000 ; N AEacute ; B -42 0 952 926 ; +C -1 ; WX 889 ; N aeacute ; B 43 -12 842 728 ; +C -1 ; WX 778 ; N Oslashacute ; B 31 -40 750 926 ; +C -1 ; WX 611 ; N oslashacute ; B 42 -36 578 728 ; +C -1 ; WX 333 ; N anoteleia ; B 98 381 235 519 ; +C -1 ; WX 944 ; N Wgrave ; B 3 0 943 926 ; +C -1 ; WX 778 ; N wgrave ; B 4 0 777 728 ; +C -1 ; WX 944 ; N Wacute ; B 3 0 943 926 ; +C -1 ; WX 778 ; N wacute ; B 4 0 777 728 ; +C -1 ; WX 944 ; N Wdieresis ; B 3 0 943 898 ; +C -1 ; WX 778 ; N wdieresis ; B 4 0 777 728 ; +C -1 ; WX 667 ; N Ygrave ; B -1 0 668 926 ; +C -1 ; WX 556 ; N ygrave ; B 7 -210 540 728 ; +C -1 ; WX 278 ; N quotereversed ; B 73 418 221 716 ; +C -1 ; WX 333 ; N radicalex ; B -20 604 354 694 ; +C -1 ; WX 556 ; N afii08941 ; B 6 -12 541 728 ; +C -1 ; WX 600 ; N estimated ; B 44 -17 561 535 ; +C -1 ; WX 834 ; N oneeighth ; B 45 -26 812 725 ; +C -1 ; WX 834 ; N threeeighths ; B 20 -26 812 725 ; +C -1 ; WX 834 ; N fiveeighths ; B 23 -26 812 725 ; +C -1 ; WX 834 ; N seveneighths ; B 23 -26 812 725 ; +C -1 ; WX 333 ; N commaaccent ; B 92 -276 239 -55 ; +C -1 ; WX 333 ; N undercommaaccent ; B 19 -206 285 -10 ; +C -1 ; WX 333 ; N tonos ; B 91 582 313 728 ; +C -1 ; WX 465 ; N dieresistonos ; B -6 582 471 728 ; +C -1 ; WX 722 ; N Alphatonos ; B -12 0 721 716 ; +C -1 ; WX 853 ; N Epsilontonos ; B -34 0 803 716 ; +C -1 ; WX 906 ; N Etatonos ; B -34 0 831 716 ; +C -1 ; WX 474 ; N Iotatonos ; B -34 0 403 716 ; +C -1 ; WX 825 ; N Omicrontonos ; B -44 -12 783 728 ; +C -1 ; WX 927 ; N Upsilontonos ; B -27 0 928 716 ; +C -1 ; WX 838 ; N Omegatonos ; B -49 0 791 728 ; +C -1 ; WX 278 ; N iotadieresistonos ; B -105 0 372 728 ; +C -1 ; WX 722 ; N Alpha ; B 0 0 718 716 ; +C -1 ; WX 722 ; N Beta ; B 73 0 673 716 ; +C -1 ; WX 719 ; N Delta ; B 0 0 718 716 ; +C -1 ; WX 667 ; N Epsilon ; B 73 0 617 716 ; +C -1 ; WX 611 ; N Zeta ; B 11 0 592 716 ; +C -1 ; WX 722 ; N Eta ; B 73 0 646 716 ; +C -1 ; WX 278 ; N Iota ; B 68 0 213 716 ; +C -1 ; WX 722 ; N Kappa ; B 75 0 720 716 ; +C -1 ; WX 667 ; N Lambda ; B 0 0 667 716 ; +C -1 ; WX 833 ; N Mu ; B 71 0 762 716 ; +C -1 ; WX 722 ; N Nu ; B 74 0 642 716 ; +C -1 ; WX 644 ; N Xi ; B 50 0 594 716 ; +C -1 ; WX 778 ; N Omicron ; B 43 -12 738 728 ; +C -1 ; WX 722 ; N Pi ; B 75 0 647 716 ; +C -1 ; WX 667 ; N Rho ; B 73 0 621 716 ; +C -1 ; WX 600 ; N Sigma ; B 44 0 564 716 ; +C -1 ; WX 611 ; N Tau ; B 21 0 590 716 ; +C -1 ; WX 667 ; N Upsilon ; B -1 0 668 716 ; +C -1 ; WX 667 ; N Chi ; B 0 0 666 716 ; +C -1 ; WX 809 ; N Psi ; B 42 0 767 716 ; +C -1 ; WX 802 ; N Omega ; B 48 0 754 728 ; +C -1 ; WX 278 ; N Iotadieresis ; B -25 0 303 882 ; +C -1 ; WX 667 ; N Upsilondieresis ; B -1 0 668 882 ; +C -1 ; WX 615 ; N alphatonos ; B 38 -12 582 728 ; +C -1 ; WX 451 ; N epsilontonos ; B 38 -12 463 728 ; +C -1 ; WX 611 ; N etatonos ; B 69 -197 542 728 ; +C -1 ; WX 278 ; N iotatonos ; B 63 0 285 728 ; +C -1 ; WX 582 ; N upsilondieresistonos ; B 53 -12 529 728 ; +C -1 ; WX 610 ; N beta ; B 70 -197 573 728 ; +C -1 ; WX 556 ; N gamma ; B 7 -197 546 519 ; +C -1 ; WX 460 ; N zeta ; B 38 -210 452 716 ; +C -1 ; WX 611 ; N eta ; B 69 -197 542 530 ; +C -1 ; WX 541 ; N theta ; B 38 -12 503 728 ; +C -1 ; WX 278 ; N iota ; B 70 0 208 519 ; +C -1 ; WX 558 ; N kappa ; B 69 0 550 519 ; +C -1 ; WX 556 ; N lambda ; B 7 0 546 716 ; +C -1 ; WX 612 ; N mu ; B 70 -197 542 519 ; +C -1 ; WX 556 ; N nu ; B 5 0 544 519 ; +C -1 ; WX 445 ; N xi ; B 38 -210 445 728 ; +C -1 ; WX 611 ; N omicron ; B 40 -12 575 530 ; +C -1 ; WX 619 ; N rho ; B 58 -197 581 530 ; +C -1 ; WX 520 ; N sigma1 ; B 38 -210 503 530 ; +C -1 ; WX 582 ; N upsilon ; B 58 -12 524 519 ; +C -1 ; WX 576 ; N chi ; B 8 -197 569 519 ; +C -1 ; WX 753 ; N psi ; B 58 -197 695 519 ; +C -1 ; WX 845 ; N omega ; B 38 -12 807 519 ; +C -1 ; WX 278 ; N iotadieresis ; B -25 0 303 728 ; +C -1 ; WX 582 ; N upsilondieresis ; B 58 -12 524 728 ; +C -1 ; WX 611 ; N omicrontonos ; B 40 -12 575 728 ; +C -1 ; WX 582 ; N upsilontonos ; B 58 -12 524 728 ; +C -1 ; WX 845 ; N omegatonos ; B 38 -12 807 728 ; +C -1 ; WX 669 ; N afii10023 ; B 73 0 617 875 ; +C -1 ; WX 885 ; N afii10051 ; B 23 -6 846 716 ; +C -1 ; WX 567 ; N afii10052 ; B 75 0 579 903 ; +C -1 ; WX 711 ; N afii10053 ; B 43 -12 669 728 ; +C -1 ; WX 667 ; N afii10054 ; B 36 -13 618 728 ; +C -1 ; WX 278 ; N afii10055 ; B 68 0 213 716 ; +C -1 ; WX 276 ; N afii10056 ; B -26 0 302 875 ; +C -1 ; WX 556 ; N afii10057 ; B 17 -12 475 716 ; +C -1 ; WX 1094 ; N afii10058 ; B 13 -4 1047 716 ; +C -1 ; WX 1063 ; N afii10059 ; B 77 0 1013 716 ; +C -1 ; WX 875 ; N afii10060 ; B 27 0 803 716 ; +C -1 ; WX 610 ; N afii10061 ; B 75 0 602 903 ; +C -1 ; WX 622 ; N afii10062 ; B 0 -9 622 897 ; +C -1 ; WX 719 ; N afii10145 ; B 75 -197 644 716 ; +C -1 ; WX 722 ; N afii10017 ; B 0 0 718 716 ; +C -1 ; WX 719 ; N afii10018 ; B 76 0 674 716 ; +C -1 ; WX 722 ; N afii10019 ; B 73 0 673 716 ; +C -1 ; WX 567 ; N afii10020 ; B 80 0 565 716 ; +C -1 ; WX 712 ; N afii10021 ; B -3 -156 688 716 ; +C -1 ; WX 667 ; N afii10022 ; B 73 0 617 716 ; +C -1 ; WX 904 ; N afii10024 ; B 11 0 893 721 ; +C -1 ; WX 626 ; N afii10025 ; B 21 -12 572 728 ; +C -1 ; WX 719 ; N afii10026 ; B 75 0 644 716 ; +C -1 ; WX 719 ; N afii10027 ; B 75 0 644 894 ; +C -1 ; WX 610 ; N afii10028 ; B 75 0 602 721 ; +C -1 ; WX 702 ; N afii10029 ; B 16 -4 625 716 ; +C -1 ; WX 833 ; N afii10030 ; B 71 0 762 716 ; +C -1 ; WX 722 ; N afii10031 ; B 73 0 646 716 ; +C -1 ; WX 778 ; N afii10032 ; B 43 -12 738 728 ; +C -1 ; WX 719 ; N afii10033 ; B 75 0 644 716 ; +C -1 ; WX 667 ; N afii10034 ; B 73 0 621 716 ; +C -1 ; WX 722 ; N afii10035 ; B 47 -12 671 728 ; +C -1 ; WX 611 ; N afii10036 ; B 21 0 590 716 ; +C -1 ; WX 622 ; N afii10037 ; B 0 -9 622 716 ; +C -1 ; WX 854 ; N afii10038 ; B 43 0 810 715 ; +C -1 ; WX 667 ; N afii10039 ; B 0 0 666 716 ; +C -1 ; WX 730 ; N afii10040 ; B 75 -156 704 716 ; +C -1 ; WX 703 ; N afii10041 ; B 61 0 626 716 ; +C -1 ; WX 1005 ; N afii10042 ; B 75 0 930 716 ; +C -1 ; WX 1019 ; N afii10043 ; B 75 -156 993 716 ; +C -1 ; WX 870 ; N afii10044 ; B 13 0 823 716 ; +C -1 ; WX 979 ; N afii10045 ; B 77 0 902 716 ; +C -1 ; WX 719 ; N afii10046 ; B 76 0 673 716 ; +C -1 ; WX 711 ; N afii10047 ; B 42 -12 668 728 ; +C -1 ; WX 1031 ; N afii10048 ; B 73 -12 984 728 ; +C -1 ; WX 719 ; N afii10049 ; B 2 0 646 716 ; +C -1 ; WX 556 ; N afii10065 ; B 36 -12 522 530 ; +C -1 ; WX 618 ; N afii10066 ; B 45 -12 575 732 ; +C -1 ; WX 615 ; N afii10067 ; B 73 0 576 519 ; +C -1 ; WX 417 ; N afii10068 ; B 66 0 417 519 ; +C -1 ; WX 635 ; N afii10069 ; B -3 -137 612 519 ; +C -1 ; WX 556 ; N afii10070 ; B 32 -12 519 530 ; +C -1 ; WX 709 ; N afii10072 ; B 0 0 710 522 ; +C -1 ; WX 497 ; N afii10073 ; B 12 -12 458 530 ; +C -1 ; WX 615 ; N afii10074 ; B 68 0 546 519 ; +C -1 ; WX 615 ; N afii10075 ; B 68 0 546 729 ; +C -1 ; WX 500 ; N afii10076 ; B 66 0 501 522 ; +C -1 ; WX 635 ; N afii10077 ; B 12 -9 568 519 ; +C -1 ; WX 740 ; N afii10078 ; B 76 0 674 519 ; +C -1 ; WX 604 ; N afii10079 ; B 66 0 538 519 ; +C -1 ; WX 611 ; N afii10080 ; B 40 -12 575 530 ; +C -1 ; WX 604 ; N afii10081 ; B 66 0 527 519 ; +C -1 ; WX 611 ; N afii10082 ; B 68 -197 574 530 ; +C -1 ; WX 556 ; N afii10083 ; B 42 -12 531 530 ; +C -1 ; WX 490 ; N afii10084 ; B 10 0 479 519 ; +C -1 ; WX 556 ; N afii10085 ; B 7 -210 540 519 ; +C -1 ; WX 875 ; N afii10086 ; B 41 -197 834 716 ; +C -1 ; WX 556 ; N afii10087 ; B 6 0 547 519 ; +C -1 ; WX 615 ; N afii10088 ; B 67 -137 591 519 ; +C -1 ; WX 581 ; N afii10089 ; B 56 0 516 519 ; +C -1 ; WX 833 ; N afii10090 ; B 68 0 765 519 ; +C -1 ; WX 844 ; N afii10091 ; B 69 -137 822 519 ; +C -1 ; WX 729 ; N afii10092 ; B 20 0 689 519 ; +C -1 ; WX 854 ; N afii10093 ; B 73 0 789 519 ; +C -1 ; WX 615 ; N afii10094 ; B 75 0 575 519 ; +C -1 ; WX 552 ; N afii10095 ; B 27 -12 512 530 ; +C -1 ; WX 854 ; N afii10096 ; B 71 -12 815 530 ; +C -1 ; WX 583 ; N afii10097 ; B -2 0 516 519 ; +C -1 ; WX 556 ; N afii10071 ; B 32 -12 519 728 ; +C -1 ; WX 611 ; N afii10099 ; B 0 -210 543 716 ; +C -1 ; WX 417 ; N afii10100 ; B 66 0 417 728 ; +C -1 ; WX 552 ; N afii10101 ; B 40 -12 524 530 ; +C -1 ; WX 556 ; N afii10102 ; B 23 -12 508 530 ; +C -1 ; WX 278 ; N afii10103 ; B 72 0 209 716 ; +C -1 ; WX 281 ; N afii10104 ; B -23 0 305 728 ; +C -1 ; WX 278 ; N afii10105 ; B -46 -210 206 716 ; +C -1 ; WX 969 ; N afii10106 ; B 12 -9 931 519 ; +C -1 ; WX 906 ; N afii10107 ; B 68 0 866 519 ; +C -1 ; WX 611 ; N afii10108 ; B 0 0 543 716 ; +C -1 ; WX 500 ; N afii10109 ; B 66 0 501 728 ; +C -1 ; WX 556 ; N afii10110 ; B 7 -210 540 729 ; +C -1 ; WX 604 ; N afii10193 ; B 66 -137 537 519 ; +C -1 ; WX 487 ; N afii10050 ; B 73 0 460 872 ; +C -1 ; WX 447 ; N afii10098 ; B 66 0 416 655 ; +C -1 ; WX 1000 ; N afii00208 ; B 32 208 968 311 ; +C -1 ; WX 1115 ; N afii61352 ; B 80 0 1073 716 ; +C -1 ; WX 766 ; N pi ; B 23 0 742 519 ; +C -1 ; WX 333 ; N sheva ; B 125 -210 208 -24 ; +C -1 ; WX 333 ; N hatafsegol ; B 15 -210 318 -24 ; +C -1 ; WX 333 ; N hatafpatah ; B 24 -210 309 -24 ; +C -1 ; WX 333 ; N hatafqamats ; B 24 -210 309 -24 ; +C -1 ; WX 333 ; N hiriq ; B 125 -180 208 -98 ; +C -1 ; WX 333 ; N tsere ; B 62 -180 272 -98 ; +C -1 ; WX 333 ; N segol ; B 62 -210 271 -24 ; +C -1 ; WX 333 ; N patah ; B 68 -154 265 -103 ; +C -1 ; WX 333 ; N qamats ; B 68 -210 265 -77 ; +C -1 ; WX 333 ; N holam ; B 125 577 208 659 ; +C -1 ; WX 333 ; N qubuts ; B 8 -210 325 -25 ; +C -1 ; WX 333 ; N dagesh ; B 125 241 208 323 ; +C -1 ; WX 333 ; N meteg ; B 141 -210 192 -25 ; +C -1 ; WX 447 ; N maqaf ; B 61 408 386 518 ; +C -1 ; WX 333 ; N rafe ; B 68 611 265 662 ; +C -1 ; WX 299 ; N paseq ; B 98 -101 202 620 ; +C -1 ; WX 333 ; N shindot ; B 376 577 458 660 ; +C -1 ; WX 333 ; N sindot ; B -125 577 -42 660 ; +C -1 ; WX 333 ; N sofpasuq ; B 98 0 235 519 ; +C -1 ; WX 583 ; N alef ; B 43 0 570 518 ; +C -1 ; WX 576 ; N bet ; B 32 0 554 524 ; +C -1 ; WX 457 ; N gimel ; B 5 0 425 524 ; +C -1 ; WX 550 ; N dalet ; B 24 0 525 518 ; +C -1 ; WX 614 ; N he ; B 63 0 553 524 ; +C -1 ; WX 273 ; N vav ; B 66 0 207 518 ; +C -1 ; WX 413 ; N zayin ; B 44 0 396 518 ; +C -1 ; WX 616 ; N het ; B 66 0 550 524 ; +C -1 ; WX 626 ; N tet ; B 61 -12 570 530 ; +C -1 ; WX 273 ; N yod ; B 66 229 207 518 ; +C -1 ; WX 521 ; N finalkaf ; B 20 -199 460 524 ; +C -1 ; WX 491 ; N kaf ; B 37 -8 452 526 ; +C -1 ; WX 496 ; N lamed ; B 32 0 445 716 ; +C -1 ; WX 611 ; N finalmem ; B 66 0 550 524 ; +C -1 ; WX 630 ; N mem ; B 27 0 569 524 ; +C -1 ; WX 273 ; N finalnun ; B 66 -199 207 518 ; +C -1 ; WX 386 ; N nun ; B 37 0 325 524 ; +C -1 ; WX 613 ; N samekh ; B 39 -12 574 530 ; +C -1 ; WX 543 ; N ayin ; B 5 -77 492 518 ; +C -1 ; WX 594 ; N finalpe ; B 49 -199 533 524 ; +C -1 ; WX 587 ; N pe ; B 49 -8 548 527 ; +C -1 ; WX 500 ; N finaltsadi ; B 5 -199 458 518 ; +C -1 ; WX 512 ; N tsadi ; B 5 0 463 518 ; +C -1 ; WX 573 ; N qof ; B 63 -199 521 518 ; +C -1 ; WX 521 ; N resh ; B 20 0 460 524 ; +C -1 ; WX 715 ; N shin ; B 44 -14 676 518 ; +C -1 ; WX 673 ; N tav ; B 22 -4 607 524 ; +C -1 ; WX 546 ; N doublevav ; B 66 -199 480 518 ; +C -1 ; WX 546 ; N vavyod ; B 66 -199 480 518 ; +C -1 ; WX 546 ; N doubleyod ; B 66 229 480 518 ; +C -1 ; WX 276 ; N geresh ; B 39 312 242 518 ; +C -1 ; WX 504 ; N gershayim ; B 39 312 470 518 ; +C -1 ; WX 818 ; N newsheqelsign ; B 66 0 752 518 ; +C -1 ; WX 273 ; N vavshindot ; B -41 0 207 660 ; +C -1 ; WX 521 ; N finalkafsheva ; B 20 -199 460 524 ; +C -1 ; WX 521 ; N finalkafqamats ; B 20 -199 460 524 ; +C -1 ; WX 496 ; N lamedholam ; B -114 0 445 716 ; +C -1 ; WX 496 ; N lamedholamdagesh ; B -114 0 445 716 ; +C -1 ; WX 559 ; N altayin ; B 24 0 508 518 ; +C -1 ; WX 715 ; N shinshindot ; B 44 -14 676 660 ; +C -1 ; WX 715 ; N shinsindot ; B 44 -14 676 660 ; +C -1 ; WX 715 ; N shindageshshindot ; B 44 -14 676 660 ; +C -1 ; WX 715 ; N shindageshsindot ; B 44 -14 676 660 ; +C -1 ; WX 583 ; N alefpatah ; B 43 -154 570 518 ; +C -1 ; WX 583 ; N alefqamats ; B 43 -210 570 518 ; +C -1 ; WX 583 ; N alefmapiq ; B 43 0 570 518 ; +C -1 ; WX 576 ; N betdagesh ; B 32 0 554 524 ; +C -1 ; WX 454 ; N gimeldagesh ; B 5 0 425 524 ; +C -1 ; WX 550 ; N daletdagesh ; B 24 0 525 518 ; +C -1 ; WX 614 ; N hedagesh ; B 63 0 553 524 ; +C -1 ; WX 323 ; N vavdagesh ; B 0 0 257 518 ; +C -1 ; WX 438 ; N zayindagesh ; B 0 0 412 518 ; +C -1 ; WX 626 ; N tetdagesh ; B 61 -12 570 530 ; +C -1 ; WX 323 ; N yoddagesh ; B 0 229 257 518 ; +C -1 ; WX 521 ; N finalkafdagesh ; B 20 -199 460 524 ; +C -1 ; WX 491 ; N kafdagesh ; B 37 -8 452 526 ; +C -1 ; WX 496 ; N lameddagesh ; B 32 0 445 716 ; +C -1 ; WX 630 ; N memdagesh ; B 27 0 569 524 ; +C -1 ; WX 386 ; N nundagesh ; B 37 0 325 524 ; +C -1 ; WX 613 ; N samekhdagesh ; B 39 -12 574 530 ; +C -1 ; WX 594 ; N finalpedagesh ; B 49 -199 533 524 ; +C -1 ; WX 587 ; N pedagesh ; B 49 -8 548 527 ; +C -1 ; WX 512 ; N tsadidagesh ; B 5 0 463 518 ; +C -1 ; WX 573 ; N qofdagesh ; B 63 -199 521 518 ; +C -1 ; WX 521 ; N reshdagesh ; B 20 0 460 524 ; +C -1 ; WX 715 ; N shindagesh ; B 44 -14 676 518 ; +C -1 ; WX 673 ; N tavdages ; B 22 -4 607 524 ; +C -1 ; WX 273 ; N vavholam ; B 66 0 207 659 ; +C -1 ; WX 576 ; N betrafe ; B 32 0 554 662 ; +C -1 ; WX 491 ; N kafrafe ; B 37 -8 452 662 ; +C -1 ; WX 587 ; N perafe ; B 49 -8 548 662 ; +C -1 ; WX 607 ; N aleflamed ; B 32 0 595 716 ; +C -1 ; WX 0 ; N zerowidthnonjoiner ; B -18 -134 18 629 ; +C -1 ; WX 0 ; N zerowidthjoiner ; B -107 -134 107 690 ; +C -1 ; WX 0 ; N lefttorightmark ; B -18 -134 210 690 ; +C -1 ; WX 0 ; N righttoleftmark ; B -210 -134 17 690 ; +C -1 ; WX 319 ; N afii57388 ; B 83 137 241 443 ; +C -1 ; WX 319 ; N afii57403 ; B 78 136 235 609 ; +C -1 ; WX 356 ; N afii57407 ; B 33 137 326 711 ; +C -1 ; WX 469 ; N afii57409 ; B 62 46 422 510 ; +C -1 ; WX 198 ; N afii57440 ; B 0 143 232 276 ; +C -1 ; WX 201 ; N afii57451 ; B 34 683 201 857 ; +C -1 ; WX 237 ; N afii57452 ; B 34 683 237 872 ; +C -1 ; WX 201 ; N afii57453 ; B 34 -133 201 41 ; +C -1 ; WX 201 ; N afii57454 ; B 34 683 201 784 ; +C -1 ; WX 209 ; N afii57455 ; B 35 683 209 895 ; +C -1 ; WX 201 ; N afii57456 ; B 34 -60 201 41 ; +C -1 ; WX 211 ; N afii57457 ; B 34 683 211 840 ; +C -1 ; WX 165 ; N afii57458 ; B 34 683 165 834 ; +C -1 ; WX 562 ; N afii57392 ; B 191 206 360 457 ; +C -1 ; WX 562 ; N afii57393 ; B 164 146 359 719 ; +C -1 ; WX 562 ; N afii57394 ; B 127 143 419 718 ; +C -1 ; WX 562 ; N afii57395 ; B 77 143 476 713 ; +C -1 ; WX 562 ; N afii57396 ; B 147 145 404 710 ; +C -1 ; WX 562 ; N afii57397 ; B 114 231 448 634 ; +C -1 ; WX 562 ; N afii57398 ; B 104 149 426 718 ; +C -1 ; WX 562 ; N afii57399 ; B 76 143 457 717 ; +C -1 ; WX 562 ; N afii57400 ; B 92 149 473 724 ; +C -1 ; WX 562 ; N afii57401 ; B 116 146 427 719 ; +C -1 ; WX 526 ; N afii57381 ; B 65 84 463 777 ; +C -1 ; WX 319 ; N afii57461 ; B 94 23 230 267 ; +C -1 ; WX 526 ; N afii63167 ; B 87 403 424 744 ; +C -1 ; WX 750 ; N afii57459 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57543 ; B 125 0 625 625 ; +C -1 ; WX 343 ; N afii57534 ; B 43 126 304 519 ; +C -1 ; WX 750 ; N afii57494 ; B 125 0 625 625 ; +C -1 ; WX 562 ; N afii62843 ; B 81 143 471 737 ; +C -1 ; WX 562 ; N afii62844 ; B 92 143 461 719 ; +C -1 ; WX 562 ; N afii62845 ; B 108 143 451 729 ; +C -1 ; WX 750 ; N afii64240 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64241 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63954 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57382 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64242 ; B 125 0 625 625 ; +C -1 ; WX 211 ; N afii62881 ; B 34 683 211 995 ; +C -1 ; WX 750 ; N afii57504 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57369 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57370 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57371 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57372 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57373 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57374 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57375 ; B 125 0 625 625 ; +C -1 ; WX 612 ; N afii57391 ; B 0 143 646 276 ; +C -1 ; WX 750 ; N afii57471 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii57460 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii52258 ; B 125 0 625 625 ; +C -1 ; WX 649 ; N afii57506 ; B 62 -193 684 489 ; +C -1 ; WX 649 ; N afii62958 ; B 62 -193 684 489 ; +C -1 ; WX 271 ; N afii62956 ; B 0 -193 306 492 ; +C -1 ; WX 271 ; N afii52957 ; B 0 -193 306 492 ; +C -1 ; WX 750 ; N afii57505 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62889 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62887 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62888 ; B 125 0 625 625 ; +C -1 ; WX 577 ; N afii57507 ; B 25 -203 563 527 ; +C -1 ; WX 559 ; N afii62961 ; B 23 -201 593 527 ; +C -1 ; WX 523 ; N afii62959 ; B 0 -193 558 501 ; +C -1 ; WX 523 ; N afii62960 ; B 0 -193 558 501 ; +C -1 ; WX 433 ; N afii57508 ; B 39 -72 481 813 ; +C -1 ; WX 433 ; N afii62962 ; B 39 -72 481 813 ; +C -1 ; WX 757 ; N afii57567 ; B 54 143 791 708 ; +C -1 ; WX 879 ; N afii62964 ; B 54 143 913 722 ; +C -1 ; WX 360 ; N afii52305 ; B 0 143 395 708 ; +C -1 ; WX 542 ; N afii52306 ; B 0 143 576 722 ; +C -1 ; WX 757 ; N afii57509 ; B 54 143 791 863 ; +C -1 ; WX 879 ; N afii62967 ; B 54 143 913 876 ; +C -1 ; WX 360 ; N afii62965 ; B 0 143 395 863 ; +C -1 ; WX 542 ; N afii62966 ; B 0 143 576 876 ; +C -1 ; WX 645 ; N afii57555 ; B 74 -60 575 461 ; +C -1 ; WX 554 ; N afii52364 ; B 15 -174 588 282 ; +C -1 ; WX 750 ; N afii63753 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63754 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63759 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63763 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63795 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62891 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63808 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62938 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63810 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62942 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62947 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63813 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63823 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63824 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63833 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63844 ; B 125 0 625 625 ; +C -1 ; WX 226 ; N afii62882 ; B 23 683 226 1010 ; +C -1 ; WX 211 ; N afii62883 ; B 34 678 211 978 ; +C -1 ; WX 211 ; N afii62884 ; B 34 683 211 918 ; +C -1 ; WX 211 ; N afii62885 ; B 31 683 211 974 ; +C -1 ; WX 211 ; N afii62886 ; B 34 683 211 931 ; +C -1 ; WX 750 ; N afii63846 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63849 ; B 125 0 625 625 ; +C -1 ; WX 0 ; N uni202A ; B -18 -134 210 603 ; +C -1 ; WX 0 ; N uni202B ; B -210 -134 18 603 ; +C -1 ; WX 0 ; N uni202D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202C ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N _852 ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206A ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206B ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N _855 ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uniF00A ; B -18 -208 18 894 ; +C -1 ; WX 0 ; N uniF00B ; B -114 -208 114 894 ; +C -1 ; WX 0 ; N uniF00C ; B -18 -208 109 894 ; +C -1 ; WX 0 ; N uniF00D ; B -109 -208 18 894 ; +C -1 ; WX 0 ; N uniF00E ; B -18 -208 114 894 ; +C -1 ; WX 1000 ; N uniFFFC ; B 0 0 1000 719 ; +C -1 ; WX 750 ; N afii63904 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63905 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63906 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63908 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63910 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63912 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62927 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63941 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62939 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63943 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62943 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62946 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63946 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62951 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63948 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii62953 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63950 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63951 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63952 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63953 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63956 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63958 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63959 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63960 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii63961 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64046 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64058 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N afii64059 ; B 125 0 625 625 ; +C -1 ; WX 319 ; N afii64060 ; B 62 -209 273 785 ; +C -1 ; WX 319 ; N afii64061 ; B 50 -209 262 785 ; +C -1 ; WX 750 ; N afii62945 ; B 125 0 625 625 ; +C -1 ; WX 703 ; N afii64184 ; B 22 91 661 920 ; +C -1 ; WX 469 ; N afii52399 ; B 62 46 422 510 ; +C -1 ; WX 238 ; N afii52400 ; B 0 109 238 831 ; +C -1 ; WX 253 ; N afii62753 ; B 4 143 288 831 ; +C -1 ; WX 217 ; N afii57411 ; B 46 109 182 876 ; +C -1 ; WX 234 ; N afii62754 ; B 32 143 269 876 ; +C -1 ; WX 451 ; N afii57412 ; B 37 -71 485 661 ; +C -1 ; WX 451 ; N afii62755 ; B 37 -71 485 661 ; +C -1 ; WX 217 ; N afii57413 ; B 46 -88 181 736 ; +C -1 ; WX 234 ; N afii62756 ; B 47 -88 269 736 ; +C -1 ; WX 645 ; N afii57414 ; B 74 -60 575 546 ; +C -1 ; WX 577 ; N afii62759 ; B 23 -98 607 524 ; +C -1 ; WX 271 ; N afii62757 ; B 0 143 306 661 ; +C -1 ; WX 271 ; N afii62758 ; B 0 143 306 661 ; +C -1 ; WX 217 ; N afii57415 ; B 66 109 181 736 ; +C -1 ; WX 234 ; N afii62760 ; B 47 143 269 736 ; +C -1 ; WX 649 ; N afii57416 ; B 62 -69 684 489 ; +C -1 ; WX 649 ; N afii62763 ; B 62 -69 684 489 ; +C -1 ; WX 271 ; N afii62761 ; B 0 -69 306 492 ; +C -1 ; WX 271 ; N afii62762 ; B 0 -69 306 492 ; +C -1 ; WX 343 ; N afii57417 ; B 26 126 304 763 ; +C -1 ; WX 415 ; N afii62764 ; B 31 143 445 873 ; +C -1 ; WX 649 ; N afii57418 ; B 62 143 684 656 ; +C -1 ; WX 649 ; N afii62767 ; B 62 143 684 656 ; +C -1 ; WX 271 ; N afii62765 ; B 0 143 306 715 ; +C -1 ; WX 271 ; N afii62766 ; B 0 143 306 715 ; +C -1 ; WX 649 ; N afii57419 ; B 63 144 684 766 ; +C -1 ; WX 649 ; N afii62770 ; B 63 144 684 766 ; +C -1 ; WX 271 ; N afii62768 ; B 0 143 306 828 ; +C -1 ; WX 271 ; N afii62769 ; B 0 143 306 828 ; +C -1 ; WX 577 ; N afii57420 ; B 25 -203 563 527 ; +C -1 ; WX 559 ; N afii62773 ; B 23 -201 593 527 ; +C -1 ; WX 523 ; N afii62771 ; B 0 -74 558 501 ; +C -1 ; WX 523 ; N afii62772 ; B 0 -74 558 501 ; +C -1 ; WX 577 ; N afii57421 ; B 25 -203 563 527 ; +C -1 ; WX 559 ; N afii62776 ; B 23 -201 593 527 ; +C -1 ; WX 523 ; N afii62774 ; B 0 143 558 501 ; +C -1 ; WX 523 ; N afii62775 ; B 0 143 558 501 ; +C -1 ; WX 577 ; N afii57422 ; B 25 -203 563 746 ; +C -1 ; WX 559 ; N afii62779 ; B 23 -201 593 746 ; +C -1 ; WX 523 ; N afii62777 ; B 0 143 558 724 ; +C -1 ; WX 523 ; N afii62778 ; B 0 143 558 724 ; +C -1 ; WX 343 ; N afii57423 ; B 85 143 377 604 ; +C -1 ; WX 343 ; N afii62780 ; B 85 143 377 604 ; +C -1 ; WX 343 ; N afii57424 ; B 85 143 377 845 ; +C -1 ; WX 343 ; N afii62781 ; B 85 143 377 845 ; +C -1 ; WX 433 ; N afii57425 ; B 39 -72 467 461 ; +C -1 ; WX 433 ; N afii62782 ; B 39 -72 467 461 ; +C -1 ; WX 433 ; N afii57426 ; B 39 -72 467 693 ; +C -1 ; WX 433 ; N afii62783 ; B 39 -72 467 693 ; +C -1 ; WX 899 ; N afii57427 ; B 65 -63 934 458 ; +C -1 ; WX 899 ; N afii62786 ; B 65 -63 934 458 ; +C -1 ; WX 608 ; N afii62784 ; B 0 143 643 446 ; +C -1 ; WX 608 ; N afii62785 ; B 0 143 643 446 ; +C -1 ; WX 899 ; N afii57428 ; B 65 -63 934 774 ; +C -1 ; WX 899 ; N afii62789 ; B 65 -63 934 774 ; +C -1 ; WX 608 ; N afii62787 ; B 0 143 643 774 ; +C -1 ; WX 608 ; N afii62788 ; B 0 143 643 774 ; +C -1 ; WX 1063 ; N afii57429 ; B 65 -63 1097 504 ; +C -1 ; WX 1063 ; N afii62792 ; B 65 -63 1097 504 ; +C -1 ; WX 771 ; N afii62790 ; B 0 143 806 504 ; +C -1 ; WX 771 ; N afii62791 ; B 0 143 806 504 ; +C -1 ; WX 1063 ; N afii57430 ; B 61 -63 1092 728 ; +C -1 ; WX 1063 ; N afii62795 ; B 61 -63 1092 728 ; +C -1 ; WX 771 ; N afii62793 ; B 0 143 806 728 ; +C -1 ; WX 771 ; N afii62794 ; B 0 143 806 728 ; +C -1 ; WX 523 ; N afii57431 ; B 0 143 558 813 ; +C -1 ; WX 523 ; N afii62798 ; B 0 143 558 813 ; +C -1 ; WX 523 ; N afii62796 ; B 0 143 558 813 ; +C -1 ; WX 523 ; N afii62797 ; B 0 143 558 813 ; +C -1 ; WX 523 ; N afii57432 ; B 0 143 558 813 ; +C -1 ; WX 523 ; N afii62801 ; B 0 143 558 813 ; +C -1 ; WX 523 ; N afii62799 ; B 0 143 558 813 ; +C -1 ; WX 523 ; N afii62800 ; B 0 143 558 813 ; +C -1 ; WX 541 ; N afii57433 ; B 25 -204 535 595 ; +C -1 ; WX 469 ; N afii62804 ; B 34 -198 516 531 ; +C -1 ; WX 541 ; N afii62802 ; B 0 143 518 571 ; +C -1 ; WX 360 ; N afii62803 ; B 0 143 395 505 ; +C -1 ; WX 541 ; N afii57434 ; B 25 -204 535 822 ; +C -1 ; WX 469 ; N afii62807 ; B 34 -198 516 760 ; +C -1 ; WX 541 ; N afii62805 ; B 0 143 518 800 ; +C -1 ; WX 360 ; N afii62806 ; B 0 143 395 756 ; +C -1 ; WX 758 ; N afii57441 ; B 57 127 792 779 ; +C -1 ; WX 758 ; N afii62810 ; B 57 127 792 779 ; +C -1 ; WX 305 ; N afii62808 ; B 0 143 339 850 ; +C -1 ; WX 324 ; N afii62809 ; B 0 143 358 779 ; +C -1 ; WX 612 ; N afii57442 ; B 53 -130 646 658 ; +C -1 ; WX 612 ; N afii62813 ; B 53 -130 646 658 ; +C -1 ; WX 305 ; N afii62811 ; B 0 143 339 844 ; +C -1 ; WX 324 ; N afii62812 ; B 0 143 358 780 ; +C -1 ; WX 541 ; N afii57443 ; B 54 143 575 774 ; +C -1 ; WX 541 ; N afii62816 ; B 54 143 575 774 ; +C -1 ; WX 360 ; N afii57410 ; B 0 143 395 708 ; +C -1 ; WX 360 ; N afii62815 ; B 0 143 395 708 ; +C -1 ; WX 451 ; N afii57444 ; B 51 -36 485 773 ; +C -1 ; WX 451 ; N afii62819 ; B 51 -36 485 773 ; +C -1 ; WX 234 ; N afii62817 ; B 0 143 269 774 ; +C -1 ; WX 234 ; N afii62818 ; B 0 143 269 774 ; +C -1 ; WX 360 ; N afii57445 ; B 50 -212 395 431 ; +C -1 ; WX 360 ; N afii62822 ; B 50 -212 395 431 ; +C -1 ; WX 415 ; N afii62820 ; B 0 143 449 472 ; +C -1 ; WX 415 ; N afii62821 ; B 0 143 449 472 ; +C -1 ; WX 541 ; N afii57446 ; B 64 -63 575 612 ; +C -1 ; WX 541 ; N afii62825 ; B 64 -63 575 612 ; +C -1 ; WX 271 ; N afii62823 ; B 0 143 309 735 ; +C -1 ; WX 271 ; N afii62824 ; B 0 143 309 735 ; +C -1 ; WX 343 ; N afii57447 ; B 43 126 304 519 ; +C -1 ; WX 415 ; N afii62828 ; B 31 143 445 694 ; +C -1 ; WX 469 ; N afii57470 ; B 0 117 433 627 ; +C -1 ; WX 451 ; N afii62827 ; B 0 -101 485 560 ; +C -1 ; WX 451 ; N afii57448 ; B 37 -71 485 484 ; +C -1 ; WX 451 ; N afii62829 ; B 37 -71 485 484 ; +C -1 ; WX 645 ; N afii57449 ; B 74 -60 575 461 ; +C -1 ; WX 554 ; N afii62830 ; B 15 -174 588 282 ; +C -1 ; WX 645 ; N afii57450 ; B 74 -194 575 461 ; +C -1 ; WX 577 ; N afii62833 ; B 23 -212 607 319 ; +C -1 ; WX 271 ; N afii62831 ; B 0 -81 306 492 ; +C -1 ; WX 271 ; N afii62832 ; B 0 -81 306 492 ; +C -1 ; WX 541 ; N afii62834 ; B 0 72 525 831 ; +C -1 ; WX 596 ; N afii62835 ; B 0 94 630 831 ; +C -1 ; WX 486 ; N afii62836 ; B 17 72 471 876 ; +C -1 ; WX 541 ; N afii62837 ; B 13 94 575 876 ; +C -1 ; WX 486 ; N afii62838 ; B 17 -120 471 739 ; +C -1 ; WX 541 ; N afii62839 ; B 13 -120 575 766 ; +C -1 ; WX 486 ; N afii62840 ; B 17 72 471 739 ; +C -1 ; WX 541 ; N afii62841 ; B 13 94 575 766 ; +C -1 ; WX 750 ; N glyph1021 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1022 ; B 125 0 625 625 ; +C -1 ; WX 201 ; N _1023 ; B 34 683 201 784 ; +C -1 ; WX 201 ; N _1024 ; B 34 683 201 857 ; +C -1 ; WX 750 ; N glyph1025 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1026 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1027 ; B 125 0 625 625 ; +C -1 ; WX 165 ; N _1028 ; B 34 683 165 834 ; +C -1 ; WX 211 ; N _1029 ; B 34 683 211 840 ; +C -1 ; WX 750 ; N _1030 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1031 ; B 125 0 625 625 ; +C -1 ; WX 209 ; N _1032 ; B 35 683 209 895 ; +C -1 ; WX 237 ; N _1033 ; B 34 683 237 872 ; +C -1 ; WX 750 ; N glyph1034 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1035 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1036 ; B 125 0 625 625 ; +C -1 ; WX 211 ; N _1037 ; B 34 683 211 918 ; +C -1 ; WX 211 ; N _1038 ; B 34 683 211 995 ; +C -1 ; WX 211 ; N _1039 ; B 34 683 211 931 ; +C -1 ; WX 211 ; N _1040 ; B 34 678 211 978 ; +C -1 ; WX 211 ; N _1041 ; B 31 683 211 974 ; +C -1 ; WX 226 ; N _1042 ; B 23 683 226 1010 ; +C -1 ; WX 750 ; N _1043 ; B 125 0 625 625 ; +C -1 ; WX 201 ; N _1044 ; B 34 -60 201 41 ; +C -1 ; WX 201 ; N _1045 ; B 34 -133 201 41 ; +C -1 ; WX 750 ; N glyph1046 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1047 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1048 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1049 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1050 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1051 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1052 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1053 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1054 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1055 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1056 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1057 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1058 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1059 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1060 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1061 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1062 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1063 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1064 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1065 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1066 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1067 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1068 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1069 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1070 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1071 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1072 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1073 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1074 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1075 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1076 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1077 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1078 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1079 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1080 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1081 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1082 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1083 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1084 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1085 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1086 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1087 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1088 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1089 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1090 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1091 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1092 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1093 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1094 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1095 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1096 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N _1097 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1098 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1099 ; B 125 0 625 625 ; +C -1 ; WX 319 ; N glyph1100 ; B 99 137 223 714 ; +C -1 ; WX 319 ; N glyph1101 ; B 97 137 226 267 ; +C -1 ; WX 319 ; N glyph1102 ; B 97 137 225 542 ; +C -1 ; WX 750 ; N glyph1103 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1104 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1105 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1106 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1107 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1108 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1109 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1110 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1111 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1112 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1113 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1114 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1115 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1116 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1117 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1118 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1119 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1120 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1121 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1122 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1123 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1124 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1125 ; B 125 0 625 625 ; +C -1 ; WX 750 ; N glyph1126 ; B 125 0 625 625 ; +C -1 ; WX 125 ; N _1127 ; B 0 143 159 276 ; +C -1 ; WX 1000 ; N _1128 ; B 0 143 1034 276 ; +C -1 ; WX 2000 ; N _1129 ; B 0 143 2034 276 ; +C -1 ; WX 853 ; N Ohorn ; B 43 -12 853 728 ; +C -1 ; WX 711 ; N ohorn ; B 40 -12 711 530 ; +C -1 ; WX 830 ; N Uhorn ; B 72 -12 830 716 ; +C -1 ; WX 724 ; N uhorn ; B 69 -12 724 519 ; +C -1 ; WX 0 ; N _1134 ; B -309 820 -97 900 ; +C -1 ; WX 0 ; N _1135 ; B -531 820 -319 900 ; +C -1 ; WX 0 ; N _1136 ; B -454 754 -232 892 ; +C -1 ; WX 0 ; N f006 ; B -226 820 -13 900 ; +C -1 ; WX 0 ; N f007 ; B -416 820 -203 900 ; +C -1 ; WX 0 ; N f009 ; B -333 754 -117 892 ; +C -1 ; WX 0 ; N combininghookabove ; B -231 742 -18 906 ; +C -1 ; WX 0 ; N f010 ; B -257 820 -60 906 ; +C -1 ; WX 0 ; N f013 ; B -363 742 -150 906 ; +C -1 ; WX 0 ; N f011 ; B -449 820 -251 906 ; +C -1 ; WX 0 ; N f01c ; B -302 786 25 898 ; +C -1 ; WX 0 ; N f015 ; B -516 820 -188 903 ; +C -1 ; WX 0 ; N combiningtildeaccent ; B -445 755 -118 868 ; +C -1 ; WX 0 ; N _1147 ; B -146 740 138 804 ; +C -1 ; WX 0 ; N _1148 ; B -150 740 150 804 ; +C -1 ; WX 0 ; N f02c ; B -172 -196 -35 -59 ; +C -1 ; WX 513 ; N dongsign ; B 59 92 460 716 ; +C -1 ; WX 834 ; N onethird ; B 45 -26 818 725 ; +C -1 ; WX 834 ; N twothirds ; B 12 -26 818 725 ; +C -1 ; WX 0 ; N f008 ; B -216 582 0 720 ; +C -1 ; WX 0 ; N _1154 ; B -333 582 -117 720 ; +C -1 ; WX 0 ; N _1155 ; B -294 582 -73 720 ; +C -1 ; WX 0 ; N f00f ; B -454 582 -232 720 ; +C -1 ; WX 0 ; N f012 ; B -232 582 -19 746 ; +C -1 ; WX 0 ; N f014 ; B -363 582 -150 746 ; +C -1 ; WX 0 ; N f016 ; B -516 786 -188 898 ; +C -1 ; WX 0 ; N f017 ; B -628 786 -301 898 ; +C -1 ; WX 0 ; N f018 ; B -599 786 -271 898 ; +C -1 ; WX 0 ; N f019 ; B -445 588 -107 713 ; +C -1 ; WX 0 ; N f01a ; B -559 588 -221 713 ; +C -1 ; WX 0 ; N f01b ; B -549 588 -211 713 ; +C -1 ; WX 0 ; N f01e ; B -399 -196 -262 -59 ; +C -1 ; WX 0 ; N f01f ; B -459 -196 -322 -59 ; +C -1 ; WX 0 ; N f020 ; B -530 -196 -393 -59 ; +C -1 ; WX 0 ; N f021 ; B -428 -196 -291 -59 ; +C -1 ; WX 0 ; N f022 ; B -505 -196 -368 -59 ; +C -1 ; WX 0 ; N combininggraveaccent ; B -289 754 -68 892 ; +C -1 ; WX 0 ; N combiningacuteaccent ; B -207 754 10 892 ; +C -1 ; WX 0 ; N f01d ; B -313 588 24 713 ; +C -1 ; WX 0 ; N combiningdotbelow ; B -437 -196 -299 -59 ; +C -1 ; WX 0 ; N f023 ; B -350 -196 -212 -59 ; +C -1 ; WX 0 ; N f029 ; B -211 -196 -74 -59 ; +C -1 ; WX 0 ; N f02a ; B -216 -196 -79 -59 ; +C -1 ; WX 0 ; N f02b ; B -398 -196 -261 -59 ; +C -1 ; WX 0 ; N f024 ; B -345 -196 -208 -59 ; +C -1 ; WX 0 ; N f025 ; B -374 -196 -237 -59 ; +C -1 ; WX 0 ; N f026 ; B -472 -196 -334 -59 ; +C -1 ; WX 0 ; N f027 ; B -386 -196 -249 -59 ; +C -1 ; WX 0 ; N f028 ; B -481 -196 -344 -59 ; +C -1 ; WX 0 ; N f02d ; B -497 820 -169 903 ; +C -1 ; WX 0 ; N f02e ; B -477 786 -150 898 ; +C -1 ; WX 0 ; N f02f ; B -548 820 -221 903 ; +C -1 ; WX 0 ; N f030 ; B -567 786 -240 898 ; +C -1 ; WX 278 ; N f031 ; B 72 0 209 519 ; +C -1 ; WX 722 ; N Adotbelow ; B 0 -196 718 716 ; +C -1 ; WX 556 ; N adotbelow ; B 36 -196 522 530 ; +C -1 ; WX 722 ; N Ahookabove ; B 0 0 718 906 ; +C -1 ; WX 556 ; N ahookabove ; B 36 -12 522 746 ; +C -1 ; WX 722 ; N Acircumflexacute ; B 0 0 718 900 ; +C -1 ; WX 556 ; N acircumflexacute ; B 36 -12 522 892 ; +C -1 ; WX 722 ; N Acircumflexgrave ; B 0 0 718 900 ; +C -1 ; WX 556 ; N acircumflexgrave ; B 36 -12 522 892 ; +C -1 ; WX 722 ; N Acircumflexhookabove ; B 0 0 718 906 ; +C -1 ; WX 556 ; N acircumflexhookabove ; B 36 -12 522 906 ; +C -1 ; WX 722 ; N Acircumflextilde ; B 0 0 718 903 ; +C -1 ; WX 556 ; N acircumflextilde ; B 36 -12 522 868 ; +C -1 ; WX 722 ; N Acircumflexdotbelow ; B 0 -196 718 804 ; +C -1 ; WX 556 ; N acircumflexdotbelow ; B 36 -196 522 728 ; +C -1 ; WX 722 ; N Abreveacute ; B 0 0 718 900 ; +C -1 ; WX 556 ; N abreveacute ; B 36 -12 522 892 ; +C -1 ; WX 722 ; N Abrevegrave ; B 0 0 718 900 ; +C -1 ; WX 556 ; N abrevegrave ; B 36 -12 522 892 ; +C -1 ; WX 722 ; N Abrevehookabove ; B 0 0 718 906 ; +C -1 ; WX 556 ; N abrevehookabove ; B 36 -12 522 906 ; +C -1 ; WX 722 ; N Abrevetilde ; B 0 0 718 903 ; +C -1 ; WX 556 ; N abrevetilde ; B 36 -12 522 868 ; +C -1 ; WX 722 ; N Abrevedotbelow ; B 0 -196 718 804 ; +C -1 ; WX 556 ; N abrevedotbelow ; B 36 -196 522 728 ; +C -1 ; WX 667 ; N Edotbelow ; B 73 -196 617 716 ; +C -1 ; WX 556 ; N edotbelow ; B 32 -196 519 530 ; +C -1 ; WX 667 ; N Ehookabove ; B 73 0 617 906 ; +C -1 ; WX 556 ; N ehookabove ; B 32 -12 519 746 ; +C -1 ; WX 667 ; N Etilde ; B 73 0 617 880 ; +C -1 ; WX 556 ; N etilde ; B 32 -12 519 713 ; +C -1 ; WX 667 ; N Ecircumflexacute ; B 73 0 617 900 ; +C -1 ; WX 556 ; N ecircumflexacute ; B 32 -12 519 892 ; +C -1 ; WX 667 ; N Ecircumflexgrave ; B 73 0 617 900 ; +C -1 ; WX 556 ; N ecircumflexgrave ; B 32 -12 519 892 ; +C -1 ; WX 667 ; N Ecircumflexhookabove ; B 73 0 617 906 ; +C -1 ; WX 556 ; N ecircumflexhookabove ; B 32 -12 519 906 ; +C -1 ; WX 667 ; N Ecircumflextilde ; B 73 0 617 903 ; +C -1 ; WX 556 ; N ecircumflextilde ; B 32 -12 519 868 ; +C -1 ; WX 667 ; N Ecircumflexdotbelow ; B 73 -196 617 804 ; +C -1 ; WX 556 ; N ecircumflexdotbelow ; B 32 -196 519 728 ; +C -1 ; WX 278 ; N Ihookabove ; B 52 0 265 906 ; +C -1 ; WX 278 ; N ihookabove ; B 45 0 259 746 ; +C -1 ; WX 278 ; N Idotbelow ; B 68 -196 213 716 ; +C -1 ; WX 278 ; N idotbelow ; B 72 -196 209 716 ; +C -1 ; WX 778 ; N Odotbelow ; B 43 -196 738 728 ; +C -1 ; WX 611 ; N odotbelow ; B 40 -196 575 530 ; +C -1 ; WX 778 ; N Ohookabove ; B 43 -12 738 906 ; +C -1 ; WX 611 ; N ohookabove ; B 40 -12 575 746 ; +C -1 ; WX 778 ; N Ocircumflexacute ; B 43 -12 738 900 ; +C -1 ; WX 611 ; N ocircumflexacute ; B 40 -12 575 892 ; +C -1 ; WX 778 ; N Ocircumflexgrave ; B 43 -12 738 900 ; +C -1 ; WX 611 ; N ocircumflexgrave ; B 40 -12 575 892 ; +C -1 ; WX 778 ; N Ocircumflexhookabove ; B 43 -12 738 906 ; +C -1 ; WX 611 ; N ocircumflexhookabove ; B 40 -12 575 906 ; +C -1 ; WX 778 ; N Ocircumflextilde ; B 43 -12 738 903 ; +C -1 ; WX 611 ; N ocircumflextilde ; B 40 -12 575 868 ; +C -1 ; WX 778 ; N Ocircumflexdotbelow ; B 43 -196 738 804 ; +C -1 ; WX 611 ; N ocircumflexdotbelow ; B 40 -196 575 728 ; +C -1 ; WX 853 ; N Ohornacute ; B 43 -12 853 903 ; +C -1 ; WX 711 ; N ohornacute ; B 40 -12 711 728 ; +C -1 ; WX 853 ; N Ohorngrave ; B 43 -12 853 903 ; +C -1 ; WX 711 ; N ohorngrave ; B 40 -12 711 728 ; +C -1 ; WX 853 ; N Ohornhookabove ; B 43 -12 853 906 ; +C -1 ; WX 711 ; N ohornhookabove ; B 40 -12 711 746 ; +C -1 ; WX 853 ; N Ohorntilde ; B 43 -12 853 880 ; +C -1 ; WX 711 ; N ohorntilde ; B 40 -12 711 713 ; +C -1 ; WX 853 ; N Ohorndotbelow ; B 43 -196 853 728 ; +C -1 ; WX 711 ; N ohorndotbelow ; B 40 -196 711 530 ; +C -1 ; WX 722 ; N Udotbelow ; B 72 -196 643 716 ; +C -1 ; WX 611 ; N udotbelow ; B 69 -196 541 519 ; +C -1 ; WX 722 ; N Uhookabove ; B 72 -12 643 906 ; +C -1 ; WX 611 ; N uhookabove ; B 69 -12 541 746 ; +C -1 ; WX 830 ; N Uhornacute ; B 72 -12 830 903 ; +C -1 ; WX 724 ; N uhornacute ; B 69 -12 724 728 ; +C -1 ; WX 830 ; N Uhorngrave ; B 72 -12 830 903 ; +C -1 ; WX 724 ; N uhorngrave ; B 69 -12 724 728 ; +C -1 ; WX 830 ; N Uhornhookabove ; B 72 -12 830 906 ; +C -1 ; WX 724 ; N uhornhookabove ; B 69 -12 724 746 ; +C -1 ; WX 830 ; N Uhorntilde ; B 72 -12 830 880 ; +C -1 ; WX 724 ; N uhorntilde ; B 69 -12 724 713 ; +C -1 ; WX 830 ; N Uhorndotbelow ; B 72 -196 830 716 ; +C -1 ; WX 724 ; N uhorndotbelow ; B 69 -196 724 519 ; +C -1 ; WX 667 ; N Ydotbelow ; B -1 -196 668 716 ; +C -1 ; WX 556 ; N ydotbelow ; B 7 -210 540 519 ; +C -1 ; WX 667 ; N Yhookabove ; B -1 0 668 906 ; +C -1 ; WX 556 ; N yhookabove ; B 7 -210 540 746 ; +C -1 ; WX 667 ; N Ytilde ; B -1 0 668 880 ; +C -1 ; WX 556 ; N ytilde ; B 7 -210 540 713 ; +C -1 ; WX 722 ; N uni01CD ; B 0 0 718 904 ; +C -1 ; WX 556 ; N uni01CE ; B 36 -12 522 728 ; +C -1 ; WX 278 ; N uni01CF ; B -26 0 304 904 ; +C -1 ; WX 278 ; N uni01D0 ; B -26 0 304 728 ; +C -1 ; WX 778 ; N uni01D1 ; B 43 -12 738 904 ; +C -1 ; WX 611 ; N uni01D2 ; B 40 -12 575 728 ; +C -1 ; WX 722 ; N uni01D3 ; B 72 -12 643 904 ; +C -1 ; WX 611 ; N uni01D4 ; B 69 -12 541 728 ; +C -1 ; WX 722 ; N uni01D5 ; B 72 -12 643 900 ; +C -1 ; WX 611 ; N uni01D6 ; B 69 -12 541 900 ; +C -1 ; WX 722 ; N uni01D7 ; B 72 -12 643 900 ; +C -1 ; WX 611 ; N uni01D8 ; B 69 -12 541 900 ; +C -1 ; WX 722 ; N uni01D9 ; B 72 -12 643 900 ; +C -1 ; WX 611 ; N uni01DA ; B 69 -12 541 900 ; +C -1 ; WX 722 ; N uni01DB ; B 72 -12 643 900 ; +C -1 ; WX 611 ; N uni01DC ; B 69 -12 541 900 ; +C -1 ; WX 0 ; N _1292 ; B -128 730 128 900 ; +C -1 ; WX 0 ; N _1293 ; B -128 730 133 900 ; +C -1 ; WX 0 ; N _1294 ; B -131 730 131 900 ; +C -1 ; WX 0 ; N _1295 ; B -133 730 128 900 ; +C -1 ; WX 567 ; N uni0492 ; B -1 0 565 716 ; +C -1 ; WX 417 ; N uni0493 ; B 3 0 417 519 ; +C -1 ; WX 904 ; N uni0496 ; B 11 -156 892 721 ; +C -1 ; WX 709 ; N uni0497 ; B 0 -137 709 522 ; +C -1 ; WX 610 ; N uni049a ; B 75 -156 600 721 ; +C -1 ; WX 500 ; N uni049b ; B 66 -137 500 522 ; +C -1 ; WX 610 ; N uni049c ; B 75 0 602 721 ; +C -1 ; WX 500 ; N uni049d ; B 66 0 501 522 ; +C -1 ; WX 722 ; N uni04a2 ; B 73 -156 704 716 ; +C -1 ; WX 604 ; N uni04a3 ; B 66 -137 591 519 ; +C -1 ; WX 556 ; N uni04ae ; B 0 0 551 716 ; +C -1 ; WX 556 ; N uni04af ; B 9 -197 547 519 ; +C -1 ; WX 556 ; N uni04b0 ; B 0 0 551 716 ; +C -1 ; WX 556 ; N uni04b1 ; B 9 -197 547 519 ; +C -1 ; WX 667 ; N uni04b2 ; B 0 -156 664 716 ; +C -1 ; WX 556 ; N uni04b3 ; B 6 -137 547 519 ; +C -1 ; WX 703 ; N uni04b8 ; B 61 0 626 716 ; +C -1 ; WX 581 ; N uni04b9 ; B 56 0 516 519 ; +C -1 ; WX 703 ; N uni04ba ; B 76 0 642 716 ; +C -1 ; WX 581 ; N uni04bb ; B 65 0 525 519 ; +C -1 ; WX 726 ; N uni018f ; B 43 -12 686 728 ; +C -1 ; WX 556 ; N uni0259 ; B 37 -12 524 530 ; +C -1 ; WX 778 ; N uni04e8 ; B 42 -12 736 728 ; +C -1 ; WX 611 ; N uni04e9 ; B 40 -12 575 530 ; +EndCharMetrics +StartKernData +StartKernPairs 908 +KPX space A -37 +KPX space Y -18 +KPX space Alphatonos -37 +KPX space Alpha -37 +KPX space Delta -37 +KPX space Lambda -37 +KPX space Upsilon -18 +KPX space Upsilondieresis -18 +KPX one one -55 +KPX A space -37 +KPX A T -74 +KPX A V -74 +KPX A W -55 +KPX A Y -92 +KPX A v -37 +KPX A w -18 +KPX A y -37 +KPX A quoteright -55 +KPX F comma -111 +KPX F period -111 +KPX F A -55 +KPX L space -18 +KPX L T -74 +KPX L V -74 +KPX L W -55 +KPX L Y -92 +KPX L y -37 +KPX L quoteright -55 +KPX P space -18 +KPX P comma -129 +KPX P period -129 +KPX P A -74 +KPX R V -18 +KPX R W -18 +KPX R Y -37 +KPX T comma -111 +KPX T hyphen -55 +KPX T period -111 +KPX T colon -111 +KPX T semicolon -111 +KPX T A -74 +KPX T O -18 +KPX T a -74 +KPX T c -74 +KPX T e -74 +KPX T i -18 +KPX T o -74 +KPX T r -55 +KPX T s -74 +KPX T u -74 +KPX T w -74 +KPX T y -74 +KPX V comma -92 +KPX V hyphen -55 +KPX V period -92 +KPX V colon -55 +KPX V semicolon -55 +KPX V A -74 +KPX V a -55 +KPX V e -55 +KPX V i -18 +KPX V o -74 +KPX V r -55 +KPX V u -37 +KPX V y -37 +KPX W comma -55 +KPX W hyphen -20 +KPX W period -55 +KPX W colon -18 +KPX W semicolon -18 +KPX W A -55 +KPX W a -37 +KPX W e -18 +KPX W i -9 +KPX W o -18 +KPX W r -18 +KPX W u -18 +KPX W y -18 +KPX Y space -18 +KPX Y comma -111 +KPX Y hyphen -55 +KPX Y period -111 +KPX Y colon -74 +KPX Y semicolon -74 +KPX Y A -92 +KPX Y a -55 +KPX Y e -55 +KPX Y i -37 +KPX Y o -74 +KPX Y p -55 +KPX Y q -74 +KPX Y u -55 +KPX Y v -55 +KPX f quoteright 18 +KPX r comma -55 +KPX r period -55 +KPX r quoteright 37 +KPX v comma -74 +KPX v period -74 +KPX w comma -37 +KPX w period -37 +KPX y comma -74 +KPX y period -74 +KPX quoteleft quoteleft -37 +KPX quoteright space -55 +KPX quoteright s -37 +KPX quoteright quoteright -37 +KPX quotedblbase afii10051 -100 +KPX quotedblbase afii10060 -100 +KPX quotedblbase afii10036 -88 +KPX quotedblbase afii10041 -101 +KPX quotedblbase afii10044 -88 +KPX Gamma comma -110 +KPX Gamma period -110 +KPX Gamma Alpha -109 +KPX Gamma Delta -109 +KPX Gamma Lambda -109 +KPX Gamma iotatonos -32 +KPX Gamma iota -32 +KPX Gamma iotadieresis 46 +KPX Theta Alpha -27 +KPX Theta Delta -27 +KPX Theta Lambda -27 +KPX Theta Upsilon -28 +KPX Theta Upsilondieresis -28 +KPX Phi Alpha -27 +KPX Phi Tau -27 +KPX Phi Upsilon -28 +KPX Phi Upsilondieresis -28 +KPX delta tau -28 +KPX delta chi -36 +KPX delta pi -28 +KPX tau alpha -28 +KPX tau delta -28 +KPX tau sigma -28 +KPX tau phi -28 +KPX tau alphatonos -28 +KPX tau zeta -28 +KPX tau omicron -28 +KPX tau sigma1 -28 +KPX tau omega -28 +KPX tau omegatonos -28 +KPX phi tau -28 +KPX phi lambda -12 +KPX phi chi -36 +KPX phi pi -28 +KPX Alphatonos Theta -27 +KPX Alphatonos Phi -27 +KPX Alphatonos Omicron -27 +KPX Alphatonos Tau -83 +KPX Alphatonos Upsilon -91 +KPX Alphatonos Upsilondieresis -91 +KPX Alphatonos gamma -37 +KPX Alphatonos nu -37 +KPX Alphatonos chi -37 +KPX Omicrontonos Upsilon -28 +KPX Omicrontonos Upsilondieresis -28 +KPX Upsilontonos Theta -38 +KPX Upsilontonos Phi -38 +KPX Upsilontonos alpha -74 +KPX Upsilontonos delta -37 +KPX Upsilontonos sigma -74 +KPX Upsilontonos phi -74 +KPX Upsilontonos iotadieresistonos 125 +KPX Upsilontonos Alpha -91 +KPX Upsilontonos Delta -91 +KPX Upsilontonos Lambda -91 +KPX Upsilontonos Omicron -38 +KPX Upsilontonos Omega -38 +KPX Upsilontonos alphatonos -74 +KPX Upsilontonos etatonos -37 +KPX Upsilontonos iotatonos -37 +KPX Upsilontonos eta -37 +KPX Upsilontonos iota -37 +KPX Upsilontonos kappa -37 +KPX Upsilontonos mu -37 +KPX Upsilontonos omicron -74 +KPX Upsilontonos iotadieresis 45 +KPX Upsilontonos omicrontonos -74 +KPX Omegatonos Upsilon -28 +KPX Omegatonos Upsilondieresis -28 +KPX Alpha quoteright -55 +KPX Alpha Theta -27 +KPX Alpha Phi -27 +KPX Alpha Omicron -27 +KPX Alpha Tau -83 +KPX Alpha Upsilon -91 +KPX Alpha Upsilondieresis -91 +KPX Alpha gamma -37 +KPX Alpha nu -37 +KPX Alpha chi -37 +KPX Delta Theta -27 +KPX Delta Omicron -27 +KPX Delta Tau -83 +KPX Delta Upsilon -91 +KPX Delta Upsilondieresis -91 +KPX Kappa Theta -46 +KPX Kappa Phi -46 +KPX Kappa alpha -23 +KPX Kappa delta -23 +KPX Kappa sigma -23 +KPX Kappa phi -23 +KPX Kappa Omicron -46 +KPX Kappa alphatonos -23 +KPX Kappa zeta -23 +KPX Kappa theta -23 +KPX Kappa xi -23 +KPX Kappa omicron -23 +KPX Kappa omega -23 +KPX Kappa omicrontonos -23 +KPX Kappa omegatonos -23 +KPX Lambda Theta -27 +KPX Lambda Omicron -27 +KPX Lambda Tau -83 +KPX Lambda Upsilon -91 +KPX Lambda Upsilondieresis -91 +KPX Omicron Alpha -27 +KPX Omicron Delta -27 +KPX Omicron Lambda -27 +KPX Omicron Upsilon -28 +KPX Omicron Upsilondieresis -28 +KPX Rho comma -128 +KPX Rho period -128 +KPX Rho Alpha -74 +KPX Rho Delta -74 +KPX Rho Lambda -74 +KPX Sigma tau -17 +KPX Sigma pi -17 +KPX Tau comma -110 +KPX Tau hyphen -55 +KPX Tau period -110 +KPX Tau colon -110 +KPX Tau semicolon -110 +KPX Tau Theta -18 +KPX Tau Phi -27 +KPX Tau alpha -74 +KPX Tau delta -41 +KPX Tau epsilon -74 +KPX Tau sigma -74 +KPX Tau phi -74 +KPX Tau iotadieresistonos 118 +KPX Tau Alpha -74 +KPX Tau Delta -80 +KPX Tau Lambda -74 +KPX Tau Omicron -18 +KPX Tau Omega -18 +KPX Tau alphatonos -74 +KPX Tau epsilontonos -74 +KPX Tau gamma -74 +KPX Tau eta -74 +KPX Tau iota -18 +KPX Tau mu -74 +KPX Tau nu -74 +KPX Tau omicron -74 +KPX Tau upsilon -74 +KPX Tau chi -60 +KPX Tau psi -74 +KPX Tau iotadieresis 45 +KPX Tau upsilondieresis -74 +KPX Tau omicrontonos -74 +KPX Tau upsilontonos -74 +KPX Upsilon comma -110 +KPX Upsilon hyphen -55 +KPX Upsilon period -110 +KPX Upsilon colon -74 +KPX Upsilon semicolon -74 +KPX Upsilon Theta -38 +KPX Upsilon Phi -38 +KPX Upsilon alpha -74 +KPX Upsilon delta -37 +KPX Upsilon sigma -74 +KPX Upsilon phi -74 +KPX Upsilon iotadieresistonos 125 +KPX Upsilon Alpha -91 +KPX Upsilon Delta -91 +KPX Upsilon Lambda -91 +KPX Upsilon Omicron -38 +KPX Upsilon Omega -38 +KPX Upsilon alphatonos -74 +KPX Upsilon etatonos -37 +KPX Upsilon iotatonos -37 +KPX Upsilon gamma -41 +KPX Upsilon eta -37 +KPX Upsilon iota -37 +KPX Upsilon kappa -37 +KPX Upsilon mu -37 +KPX Upsilon omicron -74 +KPX Upsilon iotadieresis 45 +KPX Upsilon omicrontonos -74 +KPX Chi omega -13 +KPX Chi omegatonos -13 +KPX Psi alpha -18 +KPX Psi delta -18 +KPX Psi sigma -18 +KPX Psi phi -18 +KPX Psi alphatonos -18 +KPX Psi omicron -18 +KPX Psi omega -18 +KPX Psi omicrontonos -18 +KPX Psi omegatonos -18 +KPX Omega Upsilon -28 +KPX Omega Upsilondieresis -28 +KPX Upsilondieresis Theta -38 +KPX Upsilondieresis Phi -38 +KPX Upsilondieresis alpha -74 +KPX Upsilondieresis delta -37 +KPX Upsilondieresis sigma -74 +KPX Upsilondieresis phi -74 +KPX Upsilondieresis iotadieresistonos 125 +KPX Upsilondieresis Alpha -91 +KPX Upsilondieresis Delta -91 +KPX Upsilondieresis Lambda -91 +KPX Upsilondieresis Omicron -38 +KPX Upsilondieresis Omega -38 +KPX Upsilondieresis alphatonos -74 +KPX Upsilondieresis etatonos -37 +KPX Upsilondieresis iotatonos -37 +KPX Upsilondieresis eta -37 +KPX Upsilondieresis iota -37 +KPX Upsilondieresis kappa -37 +KPX Upsilondieresis mu -37 +KPX Upsilondieresis omicron -74 +KPX Upsilondieresis iotadieresis 45 +KPX Upsilondieresis omicrontonos -74 +KPX zeta alpha -56 +KPX zeta delta -37 +KPX zeta sigma -56 +KPX zeta tau -37 +KPX zeta phi -56 +KPX zeta alphatonos -56 +KPX zeta etatonos -24 +KPX zeta gamma -32 +KPX zeta eta -24 +KPX zeta theta -37 +KPX zeta iota -24 +KPX zeta kappa -24 +KPX zeta nu -32 +KPX zeta omicron -56 +KPX zeta omega -56 +KPX zeta omicrontonos -56 +KPX zeta omegatonos -56 +KPX zeta pi -37 +KPX kappa alpha -33 +KPX kappa delta -33 +KPX kappa sigma -33 +KPX kappa phi -33 +KPX kappa alphatonos -33 +KPX kappa zeta -33 +KPX kappa theta -14 +KPX kappa xi -33 +KPX kappa omicron -33 +KPX kappa sigma1 -33 +KPX kappa omega -33 +KPX kappa omicrontonos -33 +KPX kappa omegatonos -33 +KPX lambda alpha -12 +KPX lambda delta -12 +KPX lambda sigma -12 +KPX lambda phi -12 +KPX lambda alphatonos -12 +KPX lambda upsilondieresistonos -15 +KPX lambda zeta -12 +KPX lambda xi -12 +KPX lambda omicron -12 +KPX lambda sigma1 -12 +KPX lambda upsilon -15 +KPX lambda omega -12 +KPX lambda upsilondieresis -15 +KPX lambda omicrontonos -12 +KPX lambda upsilontonos -15 +KPX lambda omegatonos -12 +KPX xi alpha -12 +KPX xi delta -12 +KPX xi sigma -12 +KPX xi phi -12 +KPX xi alphatonos -12 +KPX xi zeta -12 +KPX xi xi -12 +KPX xi omicron -12 +KPX xi sigma1 -12 +KPX xi omicrontonos -12 +KPX omicron tau -28 +KPX omicron chi -36 +KPX omicron pi -28 +KPX rho tau -28 +KPX rho pi -28 +KPX chi alpha -36 +KPX chi delta -36 +KPX chi sigma -36 +KPX chi phi -36 +KPX chi alphatonos -36 +KPX chi zeta -36 +KPX chi omicron -36 +KPX chi sigma1 -36 +KPX chi omega -21 +KPX chi omicrontonos -36 +KPX chi omegatonos -21 +KPX omega tau -28 +KPX omega chi -21 +KPX omega pi -28 +KPX omicrontonos tau -28 +KPX omicrontonos chi -36 +KPX omicrontonos pi -28 +KPX omegatonos tau -28 +KPX omegatonos chi -21 +KPX omegatonos pi -28 +KPX afii10052 comma -113 +KPX afii10052 period -125 +KPX afii10052 colon -13 +KPX afii10052 semicolon -13 +KPX afii10052 guillemotleft -38 +KPX afii10052 guillemotright -38 +KPX afii10058 quoteright -100 +KPX afii10059 quoteright -100 +KPX afii10017 quoteright -51 +KPX afii10017 afii10021 37 +KPX afii10017 afii10029 12 +KPX afii10017 afii10032 -13 +KPX afii10017 afii10033 -13 +KPX afii10017 afii10035 -25 +KPX afii10017 afii10036 -50 +KPX afii10017 afii10037 -38 +KPX afii10017 afii10038 -25 +KPX afii10017 afii10041 -76 +KPX afii10017 afii10047 -25 +KPX afii10017 afii10065 12 +KPX afii10017 afii10066 -13 +KPX afii10017 afii10083 -13 +KPX afii10017 afii10084 -13 +KPX afii10017 afii10095 12 +KPX afii10018 afii10017 -38 +KPX afii10018 afii10024 -25 +KPX afii10018 afii10025 -13 +KPX afii10018 afii10029 -25 +KPX afii10018 afii10035 -13 +KPX afii10018 afii10036 -25 +KPX afii10018 afii10037 -25 +KPX afii10018 afii10038 -13 +KPX afii10018 afii10039 -25 +KPX afii10018 afii10041 -38 +KPX afii10018 afii10044 -38 +KPX afii10018 afii10047 -25 +KPX afii10018 afii10049 -25 +KPX afii10018 afii10085 -13 +KPX afii10019 afii10017 -50 +KPX afii10019 afii10021 -13 +KPX afii10019 afii10024 -38 +KPX afii10019 afii10025 -13 +KPX afii10019 afii10029 -25 +KPX afii10019 afii10032 -25 +KPX afii10019 afii10035 -38 +KPX afii10019 afii10036 -38 +KPX afii10019 afii10037 -38 +KPX afii10019 afii10038 -25 +KPX afii10019 afii10039 -38 +KPX afii10019 afii10041 -38 +KPX afii10019 afii10044 -50 +KPX afii10019 afii10049 -25 +KPX afii10019 afii10084 -13 +KPX afii10019 afii10087 -13 +KPX afii10019 afii10089 -38 +KPX afii10020 comma -113 +KPX afii10020 period -125 +KPX afii10020 colon -13 +KPX afii10020 semicolon -13 +KPX afii10020 guillemotleft -38 +KPX afii10020 guillemotright -38 +KPX afii10020 afii10017 -63 +KPX afii10020 afii10021 -25 +KPX afii10020 afii10029 -25 +KPX afii10020 afii10032 -13 +KPX afii10020 afii10035 -13 +KPX afii10020 afii10065 -13 +KPX afii10020 afii10067 -25 +KPX afii10020 afii10069 -38 +KPX afii10020 afii10070 -51 +KPX afii10020 afii10074 -25 +KPX afii10020 afii10077 -50 +KPX afii10020 afii10078 -38 +KPX afii10020 afii10079 -25 +KPX afii10020 afii10080 -50 +KPX afii10020 afii10082 -38 +KPX afii10020 afii10085 -38 +KPX afii10020 afii10093 -38 +KPX afii10020 afii10094 -38 +KPX afii10020 afii10096 -38 +KPX afii10020 afii10097 -38 +KPX afii10021 afii10025 12 +KPX afii10021 afii10037 12 +KPX afii10021 afii10038 -13 +KPX afii10021 afii10041 -13 +KPX afii10021 afii10070 12 +KPX afii10021 afii10073 25 +KPX afii10021 afii10080 12 +KPX afii10021 afii10085 12 +KPX afii10024 afii10025 12 +KPX afii10024 afii10032 -13 +KPX afii10024 afii10035 -25 +KPX afii10024 afii10036 25 +KPX afii10024 afii10037 25 +KPX afii10024 afii10041 12 +KPX afii10024 afii10044 37 +KPX afii10024 afii10065 12 +KPX afii10024 afii10080 -13 +KPX afii10025 afii10024 -25 +KPX afii10025 afii10029 -25 +KPX afii10025 afii10032 -13 +KPX afii10025 afii10035 -25 +KPX afii10025 afii10036 -38 +KPX afii10025 afii10037 -38 +KPX afii10025 afii10038 -25 +KPX afii10025 afii10041 -38 +KPX afii10025 afii10049 -25 +KPX afii10028 afii10025 37 +KPX afii10028 afii10035 -13 +KPX afii10028 afii10036 25 +KPX afii10028 afii10037 25 +KPX afii10028 afii10038 -13 +KPX afii10028 afii10041 25 +KPX afii10028 afii10047 12 +KPX afii10028 afii10065 12 +KPX afii10028 afii10073 12 +KPX afii10028 afii10083 -13 +KPX afii10029 afii10065 25 +KPX afii10030 afii10065 12 +KPX afii10030 afii10083 -13 +KPX afii10030 afii10089 -13 +KPX afii10032 afii10017 -25 +KPX afii10032 afii10021 -13 +KPX afii10032 afii10024 -13 +KPX afii10032 afii10029 -25 +KPX afii10032 afii10037 -25 +KPX afii10032 afii10039 -38 +KPX afii10032 afii10049 -13 +KPX afii10032 afii10069 -25 +KPX afii10032 afii10077 -13 +KPX afii10034 comma -138 +KPX afii10034 period -150 +KPX afii10034 colon -13 +KPX afii10034 semicolon -13 +KPX afii10034 afii10017 -88 +KPX afii10034 afii10021 -63 +KPX afii10034 afii10024 -13 +KPX afii10034 afii10025 -13 +KPX afii10034 afii10029 -63 +KPX afii10034 afii10030 -13 +KPX afii10034 afii10032 -13 +KPX afii10034 afii10035 -25 +KPX afii10034 afii10036 -13 +KPX afii10034 afii10037 -13 +KPX afii10034 afii10038 -13 +KPX afii10034 afii10039 -38 +KPX afii10034 afii10049 -25 +KPX afii10034 afii10065 -13 +KPX afii10034 afii10069 -63 +KPX afii10034 afii10070 -25 +KPX afii10034 afii10080 -25 +KPX afii10034 afii10097 -13 +KPX afii10035 afii10017 -25 +KPX afii10035 afii10021 -13 +KPX afii10035 afii10025 -13 +KPX afii10035 afii10029 -25 +KPX afii10035 afii10030 -13 +KPX afii10035 afii10032 -25 +KPX afii10035 afii10036 -25 +KPX afii10035 afii10037 -13 +KPX afii10035 afii10039 -38 +KPX afii10035 afii10041 -25 +KPX afii10035 afii10044 -13 +KPX afii10035 afii10047 -13 +KPX afii10035 afii10065 12 +KPX afii10035 afii10066 -13 +KPX afii10035 afii10072 12 +KPX afii10035 afii10083 -13 +KPX afii10035 afii10086 -13 +KPX afii10035 afii10089 -13 +KPX afii10036 comma -100 +KPX afii10036 period -113 +KPX afii10036 colon -13 +KPX afii10036 semicolon -13 +KPX afii10036 guillemotleft -25 +KPX afii10036 afii10017 -63 +KPX afii10036 afii10021 -25 +KPX afii10036 afii10024 25 +KPX afii10036 afii10029 -25 +KPX afii10036 afii10032 -25 +KPX afii10036 afii10038 -38 +KPX afii10036 afii10049 -13 +KPX afii10036 afii10065 -25 +KPX afii10036 afii10067 -38 +KPX afii10036 afii10070 -50 +KPX afii10036 afii10074 -38 +KPX afii10036 afii10076 -38 +KPX afii10036 afii10077 -63 +KPX afii10036 afii10078 -51 +KPX afii10036 afii10080 -63 +KPX afii10036 afii10081 -13 +KPX afii10036 afii10082 -38 +KPX afii10036 afii10083 -63 +KPX afii10036 afii10085 -38 +KPX afii10036 afii10087 -38 +KPX afii10036 afii10091 -13 +KPX afii10036 afii10093 -13 +KPX afii10036 afii10094 -13 +KPX afii10036 afii10096 -13 +KPX afii10036 afii10097 -25 +KPX afii10037 comma -113 +KPX afii10037 period -125 +KPX afii10037 colon -25 +KPX afii10037 semicolon -25 +KPX afii10037 guillemotleft -38 +KPX afii10037 guillemotright -38 +KPX afii10037 afii10017 -75 +KPX afii10037 afii10021 -51 +KPX afii10037 afii10029 -38 +KPX afii10037 afii10032 -25 +KPX afii10037 afii10038 -38 +KPX afii10037 afii10047 -13 +KPX afii10037 afii10049 -25 +KPX afii10037 afii10066 -25 +KPX afii10037 afii10067 -38 +KPX afii10037 afii10068 -38 +KPX afii10037 afii10069 -63 +KPX afii10037 afii10070 -63 +KPX afii10037 afii10072 -13 +KPX afii10037 afii10073 -50 +KPX afii10037 afii10074 -38 +KPX afii10037 afii10075 -38 +KPX afii10037 afii10076 -38 +KPX afii10037 afii10077 -63 +KPX afii10037 afii10078 -50 +KPX afii10037 afii10079 -38 +KPX afii10037 afii10080 -63 +KPX afii10037 afii10081 -38 +KPX afii10037 afii10082 -38 +KPX afii10037 afii10083 -63 +KPX afii10037 afii10087 -25 +KPX afii10037 afii10088 -38 +KPX afii10037 afii10090 -38 +KPX afii10037 afii10091 -38 +KPX afii10037 afii10096 -38 +KPX afii10037 afii10097 -50 +KPX afii10038 afii10017 -25 +KPX afii10038 afii10021 -51 +KPX afii10038 afii10029 -38 +KPX afii10038 afii10036 -38 +KPX afii10038 afii10037 -38 +KPX afii10038 afii10038 -13 +KPX afii10038 afii10041 -13 +KPX afii10038 afii10049 -26 +KPX afii10038 afii10077 -25 +KPX afii10039 afii10025 -13 +KPX afii10039 afii10032 -26 +KPX afii10039 afii10035 -38 +KPX afii10039 afii10038 -38 +KPX afii10039 afii10047 -25 +KPX afii10039 afii10080 -13 +KPX afii10039 afii10085 -13 +KPX afii10040 afii10065 37 +KPX afii10040 afii10070 12 +KPX afii10040 afii10080 12 +KPX afii10043 afii10065 12 +KPX afii10044 quoteright -100 +KPX afii10044 afii10049 -38 +KPX afii10046 quoteright -75 +KPX afii10046 afii10017 -25 +KPX afii10046 afii10021 -13 +KPX afii10046 afii10024 -38 +KPX afii10046 afii10025 -25 +KPX afii10046 afii10029 -38 +KPX afii10046 afii10030 -25 +KPX afii10046 afii10032 -13 +KPX afii10046 afii10035 -25 +KPX afii10046 afii10036 -101 +KPX afii10046 afii10039 -51 +KPX afii10046 afii10041 -75 +KPX afii10046 afii10047 -38 +KPX afii10046 afii10049 -38 +KPX afii10047 afii10021 -25 +KPX afii10047 afii10024 -25 +KPX afii10047 afii10025 -13 +KPX afii10047 afii10029 -38 +KPX afii10047 afii10038 -13 +KPX afii10047 afii10039 -25 +KPX afii10047 afii10049 -25 +KPX afii10047 afii10069 -13 +KPX afii10047 afii10072 12 +KPX afii10047 afii10077 -25 +KPX afii10048 afii10017 -25 +KPX afii10048 afii10021 -25 +KPX afii10048 afii10024 -25 +KPX afii10048 afii10029 -38 +KPX afii10048 afii10035 -13 +KPX afii10048 afii10036 -25 +KPX afii10048 afii10039 -38 +KPX afii10048 afii10041 -13 +KPX afii10048 afii10069 -25 +KPX afii10048 afii10072 12 +KPX afii10048 afii10077 -25 +KPX afii10065 afii10073 12 +KPX afii10065 afii10089 -25 +KPX afii10066 afii10069 -25 +KPX afii10066 afii10072 -13 +KPX afii10066 afii10073 -13 +KPX afii10066 afii10077 -25 +KPX afii10066 afii10078 -13 +KPX afii10066 afii10083 -13 +KPX afii10066 afii10085 -13 +KPX afii10066 afii10087 -25 +KPX afii10066 afii10089 -25 +KPX afii10066 afii10092 -13 +KPX afii10066 afii10095 -13 +KPX afii10066 afii10097 -13 +KPX afii10067 afii10065 -13 +KPX afii10067 afii10066 -13 +KPX afii10067 afii10070 -13 +KPX afii10067 afii10072 -13 +KPX afii10067 afii10077 -13 +KPX afii10067 afii10078 -13 +KPX afii10067 afii10080 -13 +KPX afii10067 afii10083 -25 +KPX afii10067 afii10084 -13 +KPX afii10067 afii10085 -25 +KPX afii10067 afii10086 -13 +KPX afii10067 afii10089 -38 +KPX afii10067 afii10092 -25 +KPX afii10067 afii10097 -13 +KPX afii10068 comma -88 +KPX afii10068 period -100 +KPX afii10068 afii10069 -38 +KPX afii10068 afii10077 -25 +KPX afii10068 afii10080 -13 +KPX afii10068 afii10083 -13 +KPX afii10069 afii10073 12 +KPX afii10069 afii10083 -13 +KPX afii10069 afii10085 12 +KPX afii10069 afii10092 -13 +KPX afii10070 afii10066 -13 +KPX afii10070 afii10072 -13 +KPX afii10070 afii10078 -13 +KPX afii10070 afii10083 -13 +KPX afii10070 afii10084 -13 +KPX afii10070 afii10085 -13 +KPX afii10070 afii10087 -13 +KPX afii10070 afii10089 -25 +KPX afii10072 afii10065 12 +KPX afii10072 afii10070 -13 +KPX afii10072 afii10073 12 +KPX afii10072 afii10080 -25 +KPX afii10072 afii10083 -13 +KPX afii10072 afii10089 -25 +KPX afii10073 afii10065 -13 +KPX afii10073 afii10066 -25 +KPX afii10073 afii10070 -13 +KPX afii10073 afii10072 -13 +KPX afii10073 afii10073 -13 +KPX afii10073 afii10077 -13 +KPX afii10073 afii10078 -25 +KPX afii10073 afii10080 -25 +KPX afii10073 afii10083 -25 +KPX afii10073 afii10085 -25 +KPX afii10073 afii10086 -13 +KPX afii10073 afii10089 -38 +KPX afii10073 afii10092 -25 +KPX afii10076 afii10077 12 +KPX afii10076 afii10080 -13 +KPX afii10076 afii10083 -13 +KPX afii10076 afii10086 -13 +KPX afii10076 afii10089 -13 +KPX afii10076 afii10095 -13 +KPX afii10077 afii10066 -13 +KPX afii10077 afii10070 -13 +KPX afii10077 afii10080 -13 +KPX afii10077 afii10083 -13 +KPX afii10077 afii10085 -13 +KPX afii10077 afii10089 -25 +KPX afii10078 afii10065 -13 +KPX afii10078 afii10066 -13 +KPX afii10078 afii10073 -13 +KPX afii10078 afii10080 -13 +KPX afii10078 afii10083 -13 +KPX afii10078 afii10085 -13 +KPX afii10078 afii10086 -13 +KPX afii10078 afii10095 -13 +KPX afii10080 afii10069 -13 +KPX afii10080 afii10072 -13 +KPX afii10080 afii10073 -13 +KPX afii10080 afii10077 -25 +KPX afii10080 afii10078 -13 +KPX afii10080 afii10083 -13 +KPX afii10080 afii10084 -25 +KPX afii10080 afii10085 -13 +KPX afii10080 afii10087 -25 +KPX afii10080 afii10089 -25 +KPX afii10080 afii10095 -13 +KPX afii10080 afii10097 -13 +KPX afii10082 afii10069 -25 +KPX afii10082 afii10072 -13 +KPX afii10082 afii10073 -13 +KPX afii10082 afii10077 -25 +KPX afii10082 afii10078 -13 +KPX afii10082 afii10084 -13 +KPX afii10082 afii10085 -13 +KPX afii10082 afii10087 -13 +KPX afii10082 afii10089 -25 +KPX afii10082 afii10095 -13 +KPX afii10082 afii10097 -13 +KPX afii10083 afii10065 12 +KPX afii10083 afii10066 -13 +KPX afii10083 afii10087 -13 +KPX afii10083 afii10089 -26 +KPX afii10083 afii10092 -13 +KPX afii10084 comma -75 +KPX afii10084 period -88 +KPX afii10084 afii10069 -13 +KPX afii10084 afii10072 12 +KPX afii10084 afii10077 -13 +KPX afii10084 afii10080 -13 +KPX afii10084 afii10083 -13 +KPX afii10084 afii10085 25 +KPX afii10085 comma -75 +KPX afii10085 period -88 +KPX afii10085 colon -13 +KPX afii10085 semicolon -13 +KPX afii10085 guillemotright 25 +KPX afii10085 afii10065 -13 +KPX afii10085 afii10069 -25 +KPX afii10085 afii10070 -13 +KPX afii10085 afii10072 12 +KPX afii10085 afii10073 -13 +KPX afii10085 afii10077 -13 +KPX afii10085 afii10078 -13 +KPX afii10085 afii10080 -25 +KPX afii10085 afii10082 -13 +KPX afii10085 afii10083 -25 +KPX afii10085 afii10084 12 +KPX afii10085 afii10086 -13 +KPX afii10085 afii10087 12 +KPX afii10085 afii10095 -13 +KPX afii10085 afii10097 -13 +KPX afii10086 afii10066 -13 +KPX afii10086 afii10069 -13 +KPX afii10086 afii10070 -13 +KPX afii10086 afii10077 -25 +KPX afii10086 afii10078 -13 +KPX afii10086 afii10080 -13 +KPX afii10086 afii10084 -13 +KPX afii10086 afii10085 -13 +KPX afii10086 afii10089 -25 +KPX afii10086 afii10097 -13 +KPX afii10087 afii10066 -13 +KPX afii10087 afii10070 -25 +KPX afii10087 afii10073 -13 +KPX afii10087 afii10080 -25 +KPX afii10087 afii10083 -25 +KPX afii10087 afii10085 12 +KPX afii10087 afii10086 -13 +KPX afii10087 afii10089 -25 +KPX afii10087 afii10095 -13 +KPX afii10088 afii10065 12 +KPX afii10088 afii10073 12 +KPX afii10088 afii10083 -13 +KPX afii10091 afii10065 12 +KPX afii10091 afii10080 -13 +KPX afii10094 afii10084 -88 +KPX afii10094 afii10089 -88 +KPX afii10095 afii10066 -13 +KPX afii10095 afii10069 -13 +KPX afii10095 afii10072 -13 +KPX afii10095 afii10073 -13 +KPX afii10095 afii10077 -25 +KPX afii10095 afii10078 -13 +KPX afii10095 afii10083 -13 +KPX afii10095 afii10084 -13 +KPX afii10095 afii10087 -13 +KPX afii10095 afii10097 -13 +KPX afii10096 afii10066 -13 +KPX afii10096 afii10069 -13 +KPX afii10096 afii10072 -13 +KPX afii10096 afii10077 -25 +KPX afii10096 afii10078 -13 +KPX afii10096 afii10083 -13 +KPX afii10096 afii10084 -25 +KPX afii10096 afii10087 -25 +KPX afii10096 afii10089 -38 +KPX afii10096 afii10095 -13 +KPX afii10110 comma -75 +KPX afii10110 period -88 +KPX afii10110 colon -13 +KPX afii10110 semicolon -13 +KPX afii10110 guillemotleft -25 +KPX afii10050 comma -63 +KPX afii10050 period -75 +KPX afii10050 colon -13 +KPX afii10050 semicolon -13 +KPX afii10050 guillemotleft -25 +KPX afii10050 guillemotright -25 +KPX pi alpha -28 +KPX pi delta -28 +KPX pi sigma -28 +KPX pi phi -28 +KPX pi alphatonos -28 +KPX pi zeta -28 +KPX pi lambda -37 +KPX pi omicron -28 +KPX pi sigma1 -28 +KPX pi omega -28 +KPX pi omegatonos -28 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/fonts/arial_ce_b.php b/fonts/arial_ce_b.php new file mode 100644 index 0000000..85ac8e2 --- /dev/null +++ b/fonts/arial_ce_b.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='Arial-BoldMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>32,'FontBBox'=>'[-627 -376 2034 1010]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>750); +$up=-106; +$ut=105; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>278,chr(131)=>750, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>556,chr(157)=>479,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>611,chr(164)=>556,chr(165)=>722,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>278,chr(180)=>333,chr(181)=>612,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>556,chr(187)=>556,chr(188)=>611,chr(189)=>333,chr(190)=>385,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>611, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>389,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>278,chr(230)=>556,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>719,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>549,chr(248)=>389,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>333,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce_b.z'; +$originalsize=288496; +?> diff --git a/fonts/arial_ce_b.t1a b/fonts/arial_ce_b.t1a new file mode 100644 index 0000000..4a21133 --- /dev/null +++ b/fonts/arial_ce_b.t1a @@ -0,0 +1,35021 @@ +%!PS-AdobeFont-1.0: Arial-BoldMT Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +%%CreationDate: Sun May 25 23:10:47 2003 +% Converted from TrueType font 'arial_ce_b.ttf' by ttf2pt1 program +% +%%EndComments +12 dict begin +/FontInfo 9 dict dup begin +/version (Version 2.90) readonly def +/Notice (Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved) readonly def +/FullName (Arial Bold) readonly def +/FamilyName (Arial) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0.000000 def +/isFixedPitch false def +/UnderlinePosition -106 def +/UnderlineThickness 105 def +end readonly def +/FontName /Arial-BoldMT def +/PaintType 0 def +/StrokeWidth 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox {-627 -376 2034 1010} readonly def +/Encoding 256 array +dup 0 /.notdef put +dup 1 /.notdef put +dup 2 /.notdef put +dup 3 /.notdef put +dup 4 /.notdef put +dup 5 /.notdef put +dup 6 /.notdef put +dup 7 /.notdef put +dup 8 /.notdef put +dup 9 /.notdef put +dup 10 /.notdef put +dup 11 /.notdef put +dup 12 /.notdef put +dup 13 /.notdef put +dup 14 /.notdef put +dup 15 /.notdef put +dup 16 /.notdef put +dup 17 /.notdef put +dup 18 /.notdef put +dup 19 /.notdef put +dup 20 /.notdef put +dup 21 /.notdef put +dup 22 /.notdef put +dup 23 /.notdef put +dup 24 /.notdef put +dup 25 /.notdef put +dup 26 /.notdef put +dup 27 /.notdef put +dup 28 /.notdef put +dup 29 /.notdef put +dup 30 /.notdef put +dup 31 /.notdef put +dup 32 /space put +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quotesingle put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /grave put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +dup 127 /.notdef put +dup 128 /.notdef put +dup 129 /.notdef put +dup 130 /quotesinglbase put +dup 131 /florin put +dup 132 /quotedblbase put +dup 133 /ellipsis put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 136 /circumflex put +dup 137 /perthousand put +dup 138 /Scaron put +dup 139 /guilsinglleft put +dup 140 /OE put +dup 141 /.notdef put +dup 142 /.notdef put +dup 143 /.notdef put +dup 144 /.notdef put +dup 145 /quoteleft put +dup 146 /quoteright put +dup 147 /quotedblleft put +dup 148 /quotedblright put +dup 149 /bullet put +dup 150 /endash put +dup 151 /emdash put +dup 152 /tilde put +dup 153 /trademark put +dup 154 /scaron put +dup 155 /guilsinglright put +dup 156 /oe put +dup 157 /.notdef put +dup 158 /.notdef put +dup 159 /Ydieresis put +dup 160 /space put +dup 161 /exclamdown put +dup 162 /cent put +dup 163 /sterling put +dup 164 /currency put +dup 165 /yen put +dup 166 /brokenbar put +dup 167 /section put +dup 168 /dieresis put +dup 169 /copyright put +dup 170 /ordfeminine put +dup 171 /guillemotleft put +dup 172 /logicalnot put +dup 173 /hyphen put +dup 174 /registered put +dup 175 /overscore put +dup 176 /degree put +dup 177 /plusminus put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 180 /acute put +dup 181 /mu1 put +dup 182 /paragraph put +dup 183 /periodcentered put +dup 184 /cedilla put +dup 185 /onesuperior put +dup 186 /ordmasculine put +dup 187 /guillemotright put +dup 188 /onequarter put +dup 189 /onehalf put +dup 190 /threequarters put +dup 191 /questiondown put +dup 192 /Agrave put +dup 193 /Aacute put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 196 /Adieresis put +dup 197 /Aring put +dup 198 /AE put +dup 199 /Ccedilla put +dup 200 /Egrave put +dup 201 /Eacute put +dup 202 /Ecircumflex put +dup 203 /Edieresis put +dup 204 /Igrave put +dup 205 /Iacute put +dup 206 /Icircumflex put +dup 207 /Idieresis put +dup 208 /Eth put +dup 209 /Ntilde put +dup 210 /Ograve put +dup 211 /Oacute put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 214 /Odieresis put +dup 215 /multiply put +dup 216 /Oslash put +dup 217 /Ugrave put +dup 218 /Uacute put +dup 219 /Ucircumflex put +dup 220 /Udieresis put +dup 221 /Yacute put +dup 222 /Thorn put +dup 223 /germandbls put +dup 224 /agrave put +dup 225 /aacute put +dup 226 /acircumflex put +dup 227 /atilde put +dup 228 /adieresis put +dup 229 /aring put +dup 230 /ae put +dup 231 /ccedilla put +dup 232 /egrave put +dup 233 /eacute put +dup 234 /ecircumflex put +dup 235 /edieresis put +dup 236 /igrave put +dup 237 /iacute put +dup 238 /icircumflex put +dup 239 /idieresis put +dup 240 /eth put +dup 241 /ntilde put +dup 242 /ograve put +dup 243 /oacute put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 246 /odieresis put +dup 247 /divide put +dup 248 /oslash put +dup 249 /ugrave put +dup 250 /uacute put +dup 251 /ucircumflex put +dup 252 /udieresis put +dup 253 /yacute put +dup 254 /thorn put +dup 255 /ydieresis put +readonly def +currentdict end +currentfile eexec +dup /Private 16 dict dup begin +/RD{string currentfile exch readstring pop}executeonly def +/ND{noaccess def}executeonly def +/NP{noaccess put}executeonly def +/ForceBold true def +/BlueValues [ -15 0 713 728 518 530 610 625 892 910 ] def +/OtherBlues [ -210 -196 127 143 ] def +/StdHW [ 21 ] def +/StdVW [ 17 ] def +/StemSnapH [ 21 52 72 83 86 98 106 110 113 121 124 147 ] def +/StemSnapV [ 17 57 72 83 86 119 129 135 138 142 145 150 ] def +/MinFeature {16 16} def +/password 5839 def +/Subrs 5 array +dup 0 { + 3 0 callothersubr pop pop setcurrentpoint return + } NP +dup 1 { + 0 1 callothersubr return + } NP +dup 2 { + 0 2 callothersubr return + } NP +dup 3 { + return + } NP +dup 4 { + 1 3 callothersubr pop callsubr return + } NP +ND +2 index /CharStrings 1320 dict dup begin +/.notdef { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/.null { +0 0 hsbw +endchar } ND +/nonmarkingreturn { +0 278 hsbw +endchar } ND +/space { +0 278 hsbw +endchar } ND +/exclam { +0 333 hsbw +0 137 hstem +185 531 hstem +96 137 vstem +125 185 rmoveto +78 0 rlineto +35 363 rlineto +0 168 rlineto +-148 0 rlineto +0 -168 rlineto +35 -363 rlineto +closepath +-29 -185 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/quotedbl { +0 474 hsbw +461 255 hstem +55 149 vstem +275 149 vstem +81 461 rmoveto +101 0 rlineto +22 134 rlineto +0 121 rlineto +-149 0 rlineto +0 -121 rlineto +26 -134 rlineto +closepath +220 0 rmoveto +101 0 rlineto +22 134 rlineto +0 121 rlineto +-149 0 rlineto +0 -121 rlineto +26 -134 rlineto +closepath +endchar } ND +/numbersign { +0 556 hsbw +-12 298 hstem +430 298 hstem +9 198 vstem +344 200 vstem +75 178 rmoveto +-38 -190 rlineto +110 0 rlineto +39 190 rlineto +108 0 rlineto +-38 -190 rlineto +109 0 rlineto +39 190 rlineto +140 0 rlineto +0 108 rlineto +-118 0 rlineto +29 144 rlineto +89 0 rlineto +0 108 rlineto +-67 0 rlineto +39 190 rlineto +-113 0 rlineto +-38 -190 rlineto +-108 0 rlineto +39 190 rlineto +-109 0 rlineto +-39 -190 rlineto +-139 0 rlineto +0 -108 rlineto +117 0 rlineto +-29 -144 rlineto +-88 0 rlineto +0 -108 rlineto +66 0 rlineto +closepath +161 252 rmoveto +108 0 rlineto +-29 -144 rlineto +-108 0 rlineto +29 144 rlineto +closepath +endchar } ND +/dollar { +0 556 hsbw +-100 199 hstem +290 136 hstem +619 154 hstem +54 122 vstem +239 71 vstem +392 120 vstem +239 106 rmoveto +-36 17 -32 39 -9 52 rrcurveto +-128 -13 rlineto +20 -130 71 -69 114 -13 rrcurveto +0 -89 rlineto +71 0 rlineto +0 91 rlineto +126 18 76 87 0 118 rrcurveto +0 105 -46 65 -156 42 rrcurveto +0 191 rlineto +31 -14 19 -26 8 -38 rrcurveto +124 16 rlineto +-18 97 -62 61 -102 12 rrcurveto +0 48 rlineto +-71 0 rlineto +0 -48 rlineto +-112 -11 -73 -80 0 -106 rrcurveto +0 -106 57 -75 128 -36 rrcurveto +0 -205 rlineto +closepath +0 513 rmoveto +0 -169 rlineto +-43 17 -20 32 0 35 rrcurveto +0 37 24 34 39 14 rrcurveto +closepath +71 -520 rmoveto +0 191 rlineto +58 -18 24 -33 0 -42 rrcurveto +0 -50 -34 -39 -48 -9 rrcurveto +closepath +endchar } ND +/percent { +0 889 hsbw +-29 79 hstem +272 78 hstem +651 77 hstem +43 107 vstem +250 109 vstem +526 107 vstem +733 109 vstem +43 539 rmoveto +0 -130 60 -59 100 0 rrcurveto +96 0 60 61 0 128 rrcurveto +0 129 -59 60 -100 0 rrcurveto +-96 0 -61 -61 0 -128 rrcurveto +closepath +107 1 rmoveto +0 63 2 48 48 0 rrcurveto +46 0 4 -46 0 -65 rrcurveto +0 -66 -2 -45 -48 0 rrcurveto +-49 0 -1 46 0 65 rrcurveto +closepath +155 -567 rmoveto +378 755 rlineto +-99 0 rlineto +-381 -755 rlineto +102 0 rlineto +closepath +221 188 rmoveto +0 -130 60 -60 100 0 rrcurveto +96 0 60 60 0 130 rrcurveto +0 128 -60 61 -98 0 rrcurveto +-98 0 -60 -61 0 -128 rrcurveto +closepath +107 0 rmoveto +0 64 -1 47 51 0 rrcurveto +47 0 3 -46 0 -65 rrcurveto +0 -66 -2 -45 -48 0 rrcurveto +-47 0 -3 45 0 66 rrcurveto +closepath +endchar } ND +/ampersand { +0 722 hsbw +-13 114 hstem +631 97 hstem +134 134 vstem +411 120 vstem +706 87 rmoveto +-23 12 -60 41 -30 28 rrcurveto +21 28 15 32 26 88 rrcurveto +-124 28 rlineto +-9 -34 -10 -27 -12 -20 rrcurveto +-99 131 rlineto +104 65 26 47 0 59 rrcurveto +0 90 -73 73 -124 0 rrcurveto +-128 0 -72 -69 0 -86 rrcurveto +0 -47 24 -53 50 -57 rrcurveto +-110 -55 -54 -73 0 -92 rrcurveto +0 -126 106 -83 147 0 rrcurveto +90 0 60 24 59 52 rrcurveto +37 -35 39 -27 41 -20 rrcurveto +83 106 rlineto +closepath +-373 390 rmoveto +-34 39 rlineto +-21 24 -10 20 0 17 rrcurveto +0 29 26 25 43 0 rrcurveto +45 0 29 -29 0 -34 rrcurveto +0 -21 -14 -21 -27 -21 rrcurveto +-37 -28 rlineto +closepath +-54 -149 rmoveto +139 -173 rlineto +-47 -39 -37 -15 -42 0 rrcurveto +-66 0 -41 41 0 59 rrcurveto +0 46 30 49 64 32 rrcurveto +closepath +endchar } ND +/quotesingle { +0 238 hsbw +461 255 hstem +45 149 vstem +71 461 rmoveto +101 0 rlineto +22 134 rlineto +0 121 rlineto +-149 0 rlineto +0 -121 rlineto +26 -134 rlineto +closepath +endchar } ND +/parenleft { +0 333 hsbw +-210 20 hstem +708 20 hstem +52 132 vstem +205 94 vstem +299 -210 rmoveto +-91 193 -24 117 0 156 rrcurveto +0 156 27 118 90 198 rrcurveto +-94 0 rlineto +-94 -136 -61 -160 0 -173 rrcurveto +0 -151 53 -168 100 -150 rrcurveto +94 0 rlineto +closepath +endchar } ND +/parenright { +0 333 hsbw +-210 20 hstem +708 20 hstem +33 93 vstem +149 132 vstem +34 -210 rmoveto +94 0 rlineto +98 150 55 172 0 155 rrcurveto +0 161 -57 160 -98 140 rrcurveto +-93 0 rlineto +89 -198 27 -118 0 -156 rrcurveto +0 -164 -28 -107 -87 -195 rrcurveto +closepath +endchar } ND +/asterisk { +0 389 hsbw +598 130 hstem +145 87 vstem +120 387 rmoveto +25 39 23 37 20 36 rrcurveto +66 -109 rlineto +75 49 rlineto +-8 8 -9 11 -11 14 rrcurveto +-59 66 rlineto +47 8 42 8 37 8 rrcurveto +-26 88 rlineto +-25 -10 -27 -11 -29 -13 rrcurveto +-12 -4 -9 -4 -6 -4 rrcurveto +-7 -4 -5 -2 -3 -1 rrcurveto +8 63 5 44 0 24 rrcurveto +-87 0 rlineto +0 -34 4 -43 8 -53 rrcurveto +-34 20 -39 19 -42 18 rrcurveto +-28 -86 rlineto +17 -9 94 -20 13 -2 rrcurveto +-3 -3 -6 -6 -10 -9 rrcurveto +-27 -24 -23 -26 -23 -26 rrcurveto +74 -57 rlineto +closepath +endchar } ND +/plus { +0 584 hsbw +289 128 hstem +229 125 vstem +229 103 rmoveto +125 0 rlineto +0 186 rlineto +188 0 rlineto +0 128 rlineto +-188 0 rlineto +0 187 rlineto +-125 0 rlineto +0 -187 rlineto +-187 0 rlineto +0 -128 rlineto +187 0 rlineto +0 -186 rlineto +closepath +endchar } ND +/comma { +0 278 hsbw +0 137 hstem +135 71 vstem +68 137 rmoveto +0 -137 rlineto +67 0 rlineto +-2 -56 -20 -28 -56 -19 rrcurveto +27 -57 rlineto +85 32 37 61 0 106 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +endchar } ND +/hyphen { +0 333 hsbw +191 137 hstem +32 269 vstem +32 191 rmoveto +269 0 rlineto +0 137 rlineto +-269 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/period { +0 278 hsbw +0 137 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/slash { +0 278 hsbw +-12 20 hstem +708 20 hstem +-1 101 vstem +176 103 vstem +-1 -12 rmoveto +101 0 rlineto +179 740 rlineto +-103 0 rlineto +-177 -740 rlineto +closepath +endchar } ND +/zero { +0 556 hsbw +-12 114 hstem +605 114 hstem +42 144 vstem +363 144 vstem +274 719 rmoveto +-186 0 -46 -149 0 -216 rrcurveto +0 -275 93 -91 139 0 rrcurveto +182 0 51 147 0 218 rrcurveto +0 218 -51 148 -182 0 rrcurveto +closepath +0 -114 rmoveto +97 0 -8 -110 0 -142 rrcurveto +0 -137 -4 -114 -85 0 rrcurveto +-99 0 11 110 0 141 rrcurveto +0 136 6 116 82 0 rrcurveto +closepath +endchar } ND +/one { +0 556 hsbw +0 20 hstem +413 125 hstem +699 20 hstem +256 138 vstem +394 0 rmoveto +0 719 rlineto +-112 0 rlineto +-31 -88 -100 -71 -72 -22 rrcurveto +0 -125 rlineto +68 22 59 35 50 47 rrcurveto +0 -517 rlineto +138 0 rlineto +closepath +endchar } ND +/two { +0 556 hsbw +0 127 hstem +605 114 hstem +368 138 vstem +506 127 rmoveto +-273 0 rlineto +23 40 27 21 61 56 rrcurveto +110 101 52 68 0 107 rrcurveto +0 112 -86 87 -141 0 rrcurveto +-130 0 -92 -62 -16 -150 rrcurveto +137 -14 rlineto +5 80 34 32 58 0 rrcurveto +58 0 35 -34 0 -61 rrcurveto +0 -79 -46 -34 -96 -88 rrcurveto +-155 -142 -36 -71 -10 -96 rrcurveto +481 0 rlineto +0 127 rlineto +closepath +endchar } ND +/three { +0 556 hsbw +-12 114 hstem +606 113 hstem +343 138 vstem +38 190 rmoveto +13 -120 92 -82 130 0 rrcurveto +136 0 104 101 0 126 rrcurveto +0 86 -54 66 -81 18 rrcurveto +68 37 35 50 0 63 rrcurveto +0 103 -96 81 -116 0 rrcurveto +-115 0 -83 -63 -23 -124 rrcurveto +126 -22 rlineto +8 62 35 34 48 0 rrcurveto +46 0 32 -31 0 -48 rrcurveto +0 -58 -40 -37 -74 3 rrcurveto +-15 -112 rlineto +24 6 21 4 18 0 rrcurveto +53 0 43 -44 0 -68 rrcurveto +0 -74 -45 -45 -56 0 rrcurveto +-54 0 -39 36 -9 68 rrcurveto +-132 -16 rlineto +closepath +endchar } ND +/four { +0 556 hsbw +0 265 hstem +699 20 hstem +312 132 vstem +312 0 rmoveto +132 0 rlineto +0 144 rlineto +89 0 rlineto +0 121 rlineto +-89 0 rlineto +0 454 rlineto +-115 0 rlineto +-310 -455 rlineto +0 -120 rlineto +293 0 rlineto +0 -144 rlineto +closepath +0 265 rmoveto +-165 0 rlineto +165 244 rlineto +0 -244 rlineto +closepath +endchar } ND +/five { +0 556 hsbw +-12 110 hstem +370 109 hstem +578 128 hstem +385 141 vstem +44 184 rmoveto +17 -120 88 -76 132 0 rrcurveto +142 0 103 115 0 137 rrcurveto +0 141 -97 98 -121 0 rrcurveto +-32 0 -32 -8 -30 -15 rrcurveto +21 122 rlineto +259 0 rlineto +0 128 rlineto +-363 0 rlineto +-70 -373 rlineto +111 -16 rlineto +31 35 35 18 40 0 rrcurveto +64 0 43 -44 0 -88 rrcurveto +0 -95 -46 -45 -57 0 rrcurveto +-50 0 -43 38 -8 62 rrcurveto +-137 -14 rlineto +closepath +endchar } ND +/six { +0 556 hsbw +-12 114 hstem +364 101 hstem +606 113 hstem +42 154 vstem +386 135 vstem +507 541 rmoveto +-19 114 -75 64 -109 0 rrcurveto +-155 0 -107 -109 0 -262 rrcurveto +0 -256 103 -104 146 0 rrcurveto +134 0 96 96 0 146 rrcurveto +0 138 -95 97 -114 0 rrcurveto +-51 0 -42 -21 -34 -40 rrcurveto +9 165 43 37 59 0 rrcurveto +44 0 28 -26 7 -54 rrcurveto +132 15 rlineto +closepath +-311 -300 rmoveto +0 81 41 42 54 0 rrcurveto +54 0 41 -42 0 -93 rrcurveto +0 -91 -39 -36 -50 0 rrcurveto +-52 0 -49 49 0 90 rrcurveto +closepath +endchar } ND +/seven { +0 556 hsbw +0 20 hstem +579 127 hstem +139 132 vstem +42 579 rmoveto +312 0 rlineto +-128 -163 -83 -219 -4 -197 rrcurveto +132 0 rlineto +0 192 114 290 127 124 rrcurveto +0 100 rlineto +-470 0 rlineto +0 -127 rlineto +closepath +endchar } ND +/eight { +0 556 hsbw +-13 111 hstem +328 110 hstem +610 109 hstem +59 129 vstem +359 129 vstem +160 386 rmoveto +-83 -35 -36 -69 0 -77 rrcurveto +0 -136 102 -82 137 0 rrcurveto +140 0 91 91 0 132 rrcurveto +0 81 -43 63 -78 32 rrcurveto +62 28 36 53 0 67 rrcurveto +0 106 -79 79 -136 0 rrcurveto +-138 0 -76 -79 0 -106 rrcurveto +0 -63 30 -55 71 -30 rrcurveto +closepath +28 138 rmoveto +0 52 33 34 54 0 rrcurveto +50 0 34 -35 0 -50 rrcurveto +0 -55 -33 -32 -53 0 rrcurveto +-51 0 -34 31 0 55 rrcurveto +closepath +-12 -306 rmoveto +0 53 32 57 67 0 rrcurveto +58 0 42 -44 0 -68 rrcurveto +0 -76 -41 -42 -57 0 rrcurveto +-58 0 -43 44 0 76 rrcurveto +closepath +endchar } ND +/nine { +0 556 hsbw +-13 114 hstem +242 100 hstem +605 114 hstem +32 135 vstem +368 142 vstem +45 166 rmoveto +20 -119 71 -60 112 0 rrcurveto +154 0 108 108 0 262 rrcurveto +0 257 -104 105 -145 0 rrcurveto +-134 0 -95 -98 0 -144 rrcurveto +0 -140 93 -95 114 0 rrcurveto +51 0 43 20 35 40 rrcurveto +-11 -164 -43 -37 -56 0 rrcurveto +-46 0 -28 25 -6 54 rrcurveto +-133 -14 rlineto +closepath +311 299 rmoveto +0 -80 -41 -43 -53 0 rrcurveto +-55 0 -40 41 0 94 rrcurveto +0 90 37 38 51 0 rrcurveto +53 0 48 -51 0 -89 rrcurveto +closepath +endchar } ND +/colon { +0 333 hsbw +0 137 hstem +381 138 hstem +98 137 vstem +98 381 rmoveto +137 0 rlineto +0 138 rlineto +-137 0 rlineto +0 -138 rlineto +closepath +0 -381 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/semicolon { +0 333 hsbw +0 137 hstem +381 138 hstem +161 70 vstem +94 381 rmoveto +137 0 rlineto +0 138 rlineto +-137 0 rlineto +0 -138 rlineto +closepath +0 -244 rmoveto +0 -137 rlineto +67 0 rlineto +-2 -54 -20 -30 -56 -19 rrcurveto +27 -57 rlineto +85 32 36 61 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +endchar } ND +/less { +0 584 hsbw +82 138 295 117 487 138 hstem3 +46 149 vstem +537 82 rmoveto +0 138 rlineto +-342 135 rlineto +342 131 rlineto +0 139 rlineto +-491 -212 rlineto +0 -118 rlineto +491 -213 rlineto +closepath +endchar } ND +/equal { +0 584 hsbw +182 126 hstem +398 126 hstem +42 500 vstem +42 398 rmoveto +500 0 rlineto +0 126 rlineto +-500 0 rlineto +0 -126 rlineto +closepath +0 -216 rmoveto +500 0 rlineto +0 126 rlineto +-500 0 rlineto +0 -126 rlineto +closepath +endchar } ND +/greater { +0 584 hsbw +81 138 295 116 487 138 hstem3 +389 149 vstem +46 81 rmoveto +492 214 rlineto +0 117 rlineto +-492 213 rlineto +0 -138 rlineto +343 -133 rlineto +-343 -135 rlineto +0 -138 rlineto +closepath +endchar } ND +/question { +0 611 hsbw +0 137 hstem +619 104 hstem +242 125 vstem +432 133 vstem +367 185 rmoveto +-2 74 7 14 58 48 rrcurveto +112 93 23 42 0 62 rrcurveto +0 109 -100 96 -157 0 rrcurveto +-151 0 -99 -93 -6 -116 rrcurveto +126 -16 rlineto +17 81 48 40 70 0 rrcurveto +73 0 46 -44 0 -54 rrcurveto +0 -52 -27 -13 -63 -51 rrcurveto +-75 -61 -25 -40 0 -87 rrcurveto +0 -32 rlineto +125 0 rlineto +closepath +-125 -185 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/at { +0 975 hsbw +-210 89 hstem +0 89 hstem +441 88 hstem +639 90 hstem +30 89 vstem +213 127 vstem +619 129 vstem +858 88 vstem +868 9 rmoveto +-70 -86 -112 -44 -154 0 rrcurveto +-225 0 -188 137 0 213 rrcurveto +0 216 163 194 246 0 rrcurveto +208 0 122 -122 0 -160 rrcurveto +0 -113 -99 -144 -73 0 rrcurveto +-11 0 -8 8 0 16 rrcurveto +0 6 2 15 5 22 rrcurveto +74 350 rlineto +-129 0 rlineto +-13 -54 rlineto +-28 44 -42 22 -58 0 rrcurveto +-158 0 -107 -166 0 -158 rrcurveto +0 -124 80 -81 108 0 rrcurveto +50 0 45 18 38 38 rrcurveto +9 -38 25 -18 55 0 rrcurveto +183 0 140 171 0 181 rrcurveto +0 218 -187 159 -229 0 rrcurveto +-286 0 -214 -223 0 -270 rrcurveto +0 -267 221 -179 289 0 rrcurveto +191 0 165 66 76 153 rrcurveto +-104 0 rlineto +closepath +-528 201 rmoveto +0 83 52 148 97 0 rrcurveto +52 0 39 -41 0 -73 rrcurveto +0 -99 -51 -139 -102 0 rrcurveto +-50 0 -37 38 0 83 rrcurveto +closepath +endchar } ND +/A { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +0 153 282 150 561 153 vstem3 +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +endchar } ND +/B { +0 722 hsbw +0 121 hstem +312 119 hstem +597 119 hstem +73 145 vstem +497 141 vstem +73 716 rmoveto +0 -716 rlineto +244 0 rlineto +250 0 106 52 0 156 rrcurveto +0 82 -48 64 -88 26 rrcurveto +61 28 40 60 0 68 rrcurveto +0 129 -113 51 -166 0 rrcurveto +-286 0 rlineto +closepath +145 -119 rmoveto +83 0 rlineto +133 0 63 8 0 -90 rrcurveto +0 -86 -60 2 -124 0 rrcurveto +-95 0 rlineto +0 166 rlineto +closepath +0 -285 rmoveto +116 0 rlineto +124 0 65 -6 0 -92 rrcurveto +0 -91 -53 -2 -118 0 rrcurveto +-134 0 rlineto +0 191 rlineto +closepath +endchar } ND +/C { +0 722 hsbw +-12 123 hstem +604 124 hstem +47 149 vstem +531 263 rmoveto +-24 -104 -58 -48 -77 0 rrcurveto +-104 0 -72 71 0 180 rrcurveto +0 170 72 72 107 0 rrcurveto +77 0 56 -46 18 -74 rrcurveto +143 35 rlineto +-41 141 -101 68 -145 0 rrcurveto +-200 0 -135 -139 0 -237 rrcurveto +0 -226 136 -138 191 0 rrcurveto +153 0 101 75 43 156 rrcurveto +-140 44 rlineto +closepath +endchar } ND +/D { +0 722 hsbw +0 121 hstem +595 121 hstem +72 145 vstem +523 149 vstem +72 716 rmoveto +0 -716 rlineto +272 0 rlineto +225 0 103 141 0 210 rrcurveto +0 223 -87 142 -249 0 rrcurveto +-264 0 rlineto +closepath +145 -121 rmoveto +65 0 rlineto +197 0 44 -65 0 -173 rrcurveto +0 -155 -31 -81 -167 0 rrcurveto +-108 0 rlineto +0 474 rlineto +closepath +endchar } ND +/E { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +73 144 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/F { +0 611 hsbw +0 425 hstem +595 121 hstem +74 144 vstem +74 0 rmoveto +144 0 rlineto +0 304 rlineto +299 0 rlineto +0 121 rlineto +-299 0 rlineto +0 170 rlineto +346 0 rlineto +0 121 rlineto +-490 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/G { +0 778 hsbw +-12 123 hstem +263 121 hstem +604 124 hstem +48 149 vstem +571 146 vstem +406 263 rmoveto +165 0 rlineto +0 -91 rlineto +-43 -34 -66 -27 -60 0 rrcurveto +-123 0 -82 85 0 170 rrcurveto +0 157 80 81 126 0 rrcurveto +84 0 57 -44 20 -69 rrcurveto +144 27 rlineto +-28 130 -99 80 -178 0 rrcurveto +-222 0 -133 -153 0 -215 rrcurveto +0 -205 148 -167 215 0 rrcurveto +118 0 128 52 60 59 rrcurveto +0 285 rlineto +-311 0 rlineto +0 -121 rlineto +closepath +endchar } ND +/H { +0 722 hsbw +0 434 hstem +696 20 hstem +73 145 vstem +501 145 vstem +73 0 rmoveto +145 0 rlineto +0 313 rlineto +283 0 rlineto +0 -313 rlineto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -282 rlineto +-283 0 rlineto +0 282 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/I { +0 278 hsbw +0 20 hstem +696 20 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/J { +0 556 hsbw +-12 123 hstem +696 20 hstem +331 144 vstem +331 716 rmoveto +0 -463 rlineto +0 -115 -24 -27 -64 0 rrcurveto +-65 0 -21 45 -4 81 rrcurveto +-136 -16 rlineto +1 -154 78 -79 142 0 rrcurveto +178 0 59 94 0 181 rrcurveto +0 453 rlineto +-144 0 rlineto +closepath +endchar } ND +/K { +0 722 hsbw +0 398 hstem +696 20 hstem +75 144 vstem +533 187 vstem +75 0 rmoveto +144 0 rlineto +0 216 rlineto +117 120 rlineto +197 -336 rlineto +187 0 rlineto +-284 437 rlineto +270 279 rlineto +-195 0 rlineto +-292 -318 rlineto +0 318 rlineto +-144 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/L { +0 611 hsbw +0 121 hstem +77 144 vstem +77 0 rmoveto +504 0 rlineto +0 121 rlineto +-360 0 rlineto +0 589 rlineto +-144 0 rlineto +0 -710 rlineto +closepath +endchar } ND +/M { +0 833 hsbw +0 228 hstem +563 153 hstem +71 134 347 139 628 134 vstem3 +71 0 rmoveto +134 0 rlineto +0 563 rlineto +142 -563 rlineto +139 0 rlineto +142 563 rlineto +0 -563 rlineto +134 0 rlineto +0 716 rlineto +-217 0 rlineto +-128 -488 rlineto +-130 488 rlineto +-216 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/N { +0 722 hsbw +0 238 hstem +467 249 hstem +74 134 vstem +508 134 vstem +74 0 rmoveto +134 0 rlineto +0 467 rlineto +289 -467 rlineto +145 0 rlineto +0 716 rlineto +-134 0 rlineto +0 -478 rlineto +-293 478 rlineto +-141 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/O { +0 778 hsbw +-12 123 hstem +604 124 hstem +43 149 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +endchar } ND +/P { +0 667 hsbw +0 392 hstem +595 121 hstem +73 144 vstem +472 149 vstem +73 0 rmoveto +144 0 rlineto +0 270 rlineto +95 0 rlineto +191 0 118 58 0 168 rrcurveto +0 183 -88 37 -228 0 rrcurveto +-232 0 rlineto +0 -716 rlineto +closepath +144 595 rmoveto +70 0 rlineto +119 0 66 -9 0 -92 rrcurveto +0 -86 -61 -16 -115 0 rrcurveto +-79 0 rlineto +0 203 rlineto +closepath +endchar } ND +/Q { +0 778 hsbw +-12 120 hstem +604 124 hstem +43 149 vstem +588 149 vstem +649 91 rmoveto +65 77 23 84 0 106 rrcurveto +0 233 -133 137 -212 0 rrcurveto +-215 0 -134 -137 0 -233 rrcurveto +0 -235 131 -135 222 0 rrcurveto +56 0 52 11 47 20 rrcurveto +31 -19 23 -16 15 -11 rrcurveto +49 -36 11 1 31 -10 rrcurveto +54 102 rlineto +-42 15 -39 20 -35 26 rrcurveto +closepath +-116 81 rmoveto +-44 32 -45 25 -48 17 rrcurveto +-40 -83 rlineto +30 -11 29 -15 30 -19 rrcurveto +-19 -7 -20 -3 -20 0 rrcurveto +-112 0 -82 82 0 168 rrcurveto +0 164 80 82 119 0 rrcurveto +117 0 80 -81 0 -165 rrcurveto +0 -80 -18 -62 -37 -44 rrcurveto +closepath +endchar } ND +/R { +0 722 hsbw +0 413 hstem +595 121 hstem +73 145 vstem +510 149 vstem +73 0 rmoveto +145 0 rlineto +0 299 rlineto +29 0 rlineto +114 0 6 -34 72 -109 rrcurveto +105 -156 rlineto +173 0 rlineto +-88 140 rlineto +-68 110 -29 30 -62 36 rrcurveto +125 18 64 74 0 107 rrcurveto +0 139 -103 62 -179 0 rrcurveto +-304 0 rlineto +0 -716 rlineto +closepath +145 413 rmoveto +0 182 rlineto +113 0 rlineto +126 0 53 -1 0 -88 rrcurveto +0 -92 -58 -1 -127 0 rrcurveto +-107 0 rlineto +closepath +endchar } ND +/S { +0 667 hsbw +-13 122 hstem +608 120 hstem +62 138 vstem +474 144 vstem +36 233 rmoveto +18 -160 96 -86 182 0 rrcurveto +159 0 127 84 0 137 rrcurveto +0 147 -96 55 -168 37 rrcurveto +-96 21 -58 6 0 64 rrcurveto +0 53 60 17 62 0 rrcurveto +81 0 38 -30 12 -73 rrcurveto +145 6 rlineto +-6 132 -89 85 -180 0 rrcurveto +-141 0 -120 -77 0 -123 rrcurveto +0 -120 82 -59 147 -36 rrcurveto +114 -28 69 -7 0 -70 rrcurveto +0 -54 -48 -45 -93 0 rrcurveto +-88 0 -52 43 -16 95 rrcurveto +-141 -14 rlineto +closepath +endchar } ND +/T { +0 611 hsbw +0 20 hstem +595 121 hstem +234 144 vstem +234 0 rmoveto +144 0 rlineto +0 595 rlineto +212 0 rlineto +0 121 rlineto +-569 0 rlineto +0 -121 rlineto +213 0 rlineto +0 -595 rlineto +closepath +endchar } ND +/U { +0 722 hsbw +-12 123 hstem +696 20 hstem +72 144 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +endchar } ND +/V { +0 667 hsbw +0 186 hstem +696 20 hstem +0 159 259 151 513 153 vstem3 +255 0 rmoveto +155 0 rlineto +256 716 rlineto +-153 0 rlineto +-176 -530 rlineto +-181 530 rlineto +-156 0 rlineto +255 -716 rlineto +closepath +endchar } ND +/W { +0 944 hsbw +0 216 hstem +535 181 hstem +3 148 vstem +170 161 390 163 616 153 vstem3 +797 146 vstem +174 0 rmoveto +157 0 rlineto +142 535 rlineto +143 -535 rlineto +153 0 rlineto +174 716 rlineto +-146 0 rlineto +-109 -500 rlineto +-126 500 rlineto +-172 0 rlineto +-131 -492 rlineto +-108 492 rlineto +-148 0 rlineto +171 -716 rlineto +closepath +endchar } ND +/X { +0 667 hsbw +0 20 hstem +696 20 hstem +23 169 vstem +476 168 vstem +0 0 rmoveto +173 0 rlineto +160 248 rlineto +158 -248 rlineto +175 0 rlineto +-245 368 rlineto +223 348 rlineto +-168 0 rlineto +-141 -230 rlineto +-143 230 rlineto +-169 0 rlineto +222 -342 rlineto +-245 -374 rlineto +closepath +endchar } ND +/Y { +0 667 hsbw +0 433 hstem +696 20 hstem +-1 171 264 141 501 167 vstem3 +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +endchar } ND +/Z { +0 611 hsbw +0 121 hstem +595 121 hstem +11 174 vstem +11 0 rmoveto +581 0 rlineto +0 121 rlineto +-407 0 rlineto +392 483 rlineto +0 112 rlineto +-524 0 rlineto +0 -121 rlineto +334 0 rlineto +-376 -465 rlineto +0 -130 rlineto +closepath +endchar } ND +/bracketleft { +0 333 hsbw +-202 108 hstem +608 108 hstem +71 131 vstem +71 -202 rmoveto +243 0 rlineto +0 108 rlineto +-112 0 rlineto +0 702 rlineto +112 0 rlineto +0 108 rlineto +-243 0 rlineto +0 -918 rlineto +closepath +endchar } ND +/backslash { +0 278 hsbw +-12 20 hstem +708 20 hstem +-1 101 vstem +176 103 vstem +-1 728 rmoveto +177 -740 rlineto +103 0 rlineto +-179 740 rlineto +-101 0 rlineto +closepath +endchar } ND +/bracketright { +0 333 hsbw +-202 108 hstem +609 107 hstem +131 131 vstem +262 716 rmoveto +-243 0 rlineto +0 -107 rlineto +112 0 rlineto +0 -703 rlineto +-112 0 rlineto +0 -108 rlineto +243 0 rlineto +0 918 rlineto +closepath +endchar } ND +/asciicircum { +0 584 hsbw +577 151 hstem +54 142 240 103 389 138 vstem3 +56 338 rmoveto +140 0 rlineto +96 239 rlineto +97 -239 rlineto +138 0 rlineto +-178 390 rlineto +-109 0 rlineto +-184 -390 rlineto +closepath +endchar } ND +/underscore { +0 556 hsbw +-198 89 hstem +-9 570 vstem +-9 -198 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +endchar } ND +/grave { +0 333 hsbw +582 146 hstem +155 87 vstem +242 582 rmoveto +-68 146 rlineto +-153 0 rlineto +134 -146 rlineto +87 0 rlineto +closepath +endchar } ND +/a { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +endchar } ND +/b { +0 611 hsbw +-12 109 hstem +425 105 hstem +696 20 hstem +66 127 vstem +432 140 vstem +66 0 rmoveto +127 0 rlineto +0 76 rlineto +42 -58 61 -30 59 0 rrcurveto +121 0 96 99 0 178 rrcurveto +0 170 -93 95 -125 0 rrcurveto +-58 0 -51 -24 -42 -48 rrcurveto +0 258 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +136 271 rmoveto +0 104 49 50 66 0 rrcurveto +66 0 49 -49 0 -118 rrcurveto +0 -112 -49 -49 -61 0 rrcurveto +-84 0 -36 72 0 102 rrcurveto +closepath +endchar } ND +/c { +0 556 hsbw +-12 112 hstem +422 108 hstem +42 141 vstem +524 365 rmoveto +-32 112 -73 53 -126 0 rrcurveto +-155 0 -96 -101 0 -170 rrcurveto +0 -170 97 -101 152 0 rrcurveto +133 0 79 64 28 124 rrcurveto +-135 23 rlineto +-14 -72 -33 -27 -52 0 rrcurveto +-70 0 -44 45 0 124 rrcurveto +0 110 44 43 68 0 rrcurveto +50 0 34 -28 10 -53 rrcurveto +135 24 rlineto +closepath +endchar } ND +/d { +0 611 hsbw +-12 109 hstem +425 105 hstem +696 20 hstem +41 140 vstem +420 127 vstem +547 0 rmoveto +0 716 rlineto +-137 0 rlineto +0 -258 rlineto +-42 48 -50 24 -58 0 rrcurveto +-127 0 -92 -93 0 -176 rrcurveto +0 -172 97 -101 120 0 rrcurveto +58 0 61 29 43 59 rrcurveto +0 -76 rlineto +127 0 rlineto +closepath +-366 271 rmoveto +0 102 49 52 66 0 rrcurveto +66 0 49 -48 0 -120 rrcurveto +0 -107 -52 -53 -62 0 rrcurveto +-84 0 -32 69 0 105 rrcurveto +closepath +endchar } ND +/e { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +32 140 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +endchar } ND +/f { +0 333 hsbw +0 20 hstem +411 108 hstem +623 105 hstem +88 137 vstem +12 519 rmoveto +0 -108 rlineto +76 0 rlineto +0 -411 rlineto +137 0 rlineto +0 411 rlineto +103 0 rlineto +0 108 rlineto +-103 0 rlineto +0 36 rlineto +0 53 16 15 40 0 rrcurveto +20 0 21 -3 22 -5 rrcurveto +18 95 rlineto +-38 12 -38 6 -38 0 rrcurveto +-108 0 -52 -52 0 -118 rrcurveto +0 -39 rlineto +-76 0 rlineto +closepath +endchar } ND +/g { +0 611 hsbw +-210 105 hstem +0 111 hstem +425 105 hstem +41 141 vstem +418 129 vstem +59 -34 rmoveto +0 -17 rlineto +0 -92 66 -67 176 0 rrcurveto +166 0 80 78 0 185 rrcurveto +0 466 rlineto +-129 0 rlineto +0 -73 rlineto +-42 56 -52 28 -64 0 rrcurveto +-124 0 -95 -94 0 -174 rrcurveto +0 -145 78 -117 135 0 rrcurveto +62 0 52 28 42 56 rrcurveto +0 -76 rlineto +0 -90 -32 -23 -83 0 rrcurveto +-47 0 -27 9 -5 43 rrcurveto +-157 19 rlineto +closepath +123 304 rmoveto +0 105 47 50 66 0 rrcurveto +68 0 49 -52 0 -106 rrcurveto +0 -104 -52 -52 -68 0 rrcurveto +-62 0 -48 49 0 110 rrcurveto +closepath +endchar } ND +/h { +0 611 hsbw +0 453 hstem +510 20 hstem +696 20 hstem +71 137 vstem +406 137 vstem +208 716 rmoveto +-137 0 rlineto +0 -716 rlineto +137 0 rlineto +0 260 rlineto +0 98 32 67 81 0 rrcurveto +76 0 9 -46 0 -105 rrcurveto +0 -274 rlineto +137 0 rlineto +0 304 rlineto +0 146 -56 80 -120 0 rrcurveto +-62 0 -53 -26 -44 -51 rrcurveto +0 263 rlineto +closepath +endchar } ND +/i { +0 278 hsbw +0 20 hstem +499 20 hstem +589 127 hstem +72 137 vstem +72 589 rmoveto +137 0 rlineto +0 127 rlineto +-137 0 rlineto +0 -127 rlineto +closepath +0 -589 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/j { +0 278 hsbw +-210 128 hstem +499 20 hstem +589 127 hstem +69 137 vstem +69 589 rmoveto +137 0 rlineto +0 127 rlineto +-137 0 rlineto +0 -127 rlineto +closepath +137 -70 rmoveto +-137 0 rlineto +0 -495 rlineto +0 -78 -2 -28 -55 0 rrcurveto +-15 0 rlineto +-6 0 -6 2 -7 1 rrcurveto +-24 -117 rlineto +36 -9 32 -5 27 0 rrcurveto +124 0 33 77 0 149 rrcurveto +0 503 rlineto +closepath +endchar } ND +/k { +0 556 hsbw +0 336 hstem +499 20 hstem +696 20 hstem +67 137 vstem +398 148 vstem +67 0 rmoveto +137 0 rlineto +0 166 rlineto +64 67 rlineto +130 -233 rlineto +148 0 rlineto +-190 329 rlineto +178 190 rlineto +-169 0 rlineto +-161 -183 rlineto +0 380 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/l { +0 278 hsbw +0 20 hstem +696 20 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 716 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/m { +0 889 hsbw +0 448 hstem +510 20 hstem +62 126 375 136 698 126 vstem3 +62 519 rmoveto +0 -519 rlineto +137 0 rlineto +0 252 rlineto +0 106 21 67 83 0 rrcurveto +73 0 -1 -49 0 -92 rrcurveto +0 -284 rlineto +137 0 rlineto +0 249 rlineto +0 101 24 75 78 0 rrcurveto +63 0 10 -42 0 -87 rrcurveto +0 -296 rlineto +137 0 rlineto +0 332 rlineto +0 135 -51 63 -119 0 rrcurveto +-60 0 -53 -28 -45 -54 rrcurveto +-31 54 -50 28 -65 0 rrcurveto +-63 0 -54 -28 -45 -54 rrcurveto +0 71 rlineto +-126 0 rlineto +closepath +endchar } ND +/n { +0 611 hsbw +0 442 hstem +510 20 hstem +71 127 vstem +406 137 vstem +543 0 rmoveto +0 322 rlineto +0 134 -63 74 -111 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +0 235 rlineto +0 122 25 68 88 0 rrcurveto +73 0 12 -53 0 -107 rrcurveto +0 -265 rlineto +137 0 rlineto +closepath +endchar } ND +/o { +0 611 hsbw +-12 112 hstem +418 112 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +endchar } ND +/p { +0 611 hsbw +-197 20 hstem +-12 109 hstem +422 108 hstem +68 128 vstem +434 140 vstem +68 519 rmoveto +0 -716 rlineto +137 0 rlineto +0 261 rlineto +52 -56 41 -20 58 0 rrcurveto +121 0 97 100 0 174 rrcurveto +0 169 -96 99 -121 0 rrcurveto +-68 0 -60 -36 -33 -52 rrcurveto +0 77 rlineto +-128 0 rlineto +closepath +136 -251 rmoveto +0 101 49 53 67 0 rrcurveto +65 0 49 -52 0 -109 rrcurveto +0 -116 -47 -48 -64 0 rrcurveto +-67 0 -52 55 0 116 rrcurveto +closepath +endchar } ND +/q { +0 611 hsbw +-197 20 hstem +-12 109 hstem +423 107 hstem +44 141 vstem +421 127 vstem +411 -197 rmoveto +137 0 rlineto +0 716 rlineto +-127 0 rlineto +0 -77 rlineto +-39 58 -49 30 -68 0 rrcurveto +-126 0 -95 -99 0 -166 rrcurveto +0 -154 74 -123 139 0 rrcurveto +62 0 56 29 36 46 rrcurveto +0 -260 rlineto +closepath +4 463 rmoveto +0 -112 -55 -57 -64 0 rrcurveto +-63 0 -48 46 0 115 rrcurveto +0 114 49 51 67 0 rrcurveto +65 0 49 -52 0 -105 rrcurveto +closepath +endchar } ND +/r { +0 389 hsbw +0 445 hstem +510 20 hstem +66 127 vstem +203 0 rmoveto +0 160 rlineto +0 148 -19 99 111 0 rrcurveto +20 0 21 -8 23 -14 rrcurveto +43 119 rlineto +-30 17 -30 9 -30 0 rrcurveto +-46 0 -29 -16 -44 -69 rrcurveto +0 74 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +closepath +endchar } ND +/s { +0 556 hsbw +-12 99 hstem +432 98 hstem +42 128 vstem +370 138 vstem +23 148 rmoveto +25 -99 82 -61 142 0 rrcurveto +156 0 80 79 0 95 rrcurveto +0 107 -94 28 -102 28 rrcurveto +-76 17 -66 -7 0 54 rrcurveto +0 36 43 7 50 0 rrcurveto +57 0 30 -23 11 -40 rrcurveto +129 24 rlineto +-26 90 -62 47 -141 0 rrcurveto +-150 0 -69 -70 0 -89 rrcurveto +0 -130 92 -14 180 -39 rrcurveto +37 -8 19 -8 0 -28 rrcurveto +0 -47 -45 -10 -53 0 rrcurveto +-64 0 -35 28 -12 54 rrcurveto +-138 -21 rlineto +closepath +endchar } ND +/t { +0 333 hsbw +-12 114 hstem +409 110 hstem +78 138 vstem +310 519 rmoveto +-94 0 rlineto +0 183 rlineto +-138 -80 rlineto +0 -103 rlineto +-63 0 rlineto +0 -110 rlineto +63 0 rlineto +0 -226 rlineto +0 -140 34 -55 100 0 rrcurveto +40 0 37 7 32 14 rrcurveto +-12 106 rlineto +-24 -9 -19 -4 -12 0 rrcurveto +-47 0 9 30 0 68 rrcurveto +0 209 rlineto +94 0 rlineto +0 110 rlineto +closepath +endchar } ND +/u { +0 611 hsbw +-12 105 hstem +499 20 hstem +69 137 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +endchar } ND +/v { +0 556 hsbw +0 166 hstem +499 20 hstem +2 147 214 121 403 141 vstem3 +214 0 rmoveto +124 0 rlineto +206 519 rlineto +-141 0 rlineto +-99 -265 rlineto +-3 -7 -3 -7 -1 -8 rrcurveto +-2 -8 -2 -7 -3 -7 rrcurveto +-2 -7 -5 -15 -8 -22 rrcurveto +-28 88 rlineto +-98 265 rlineto +-144 0 rlineto +209 -519 rlineto +closepath +endchar } ND +/w { +0 778 hsbw +0 179 hstem +333 186 hstem +3 135 168 125 324 133 vstem3 +479 132 vstem +642 135 vstem +168 0 rmoveto +134 0 rlineto +88 333 rlineto +89 -333 rlineto +132 0 rlineto +166 519 rlineto +-135 0 rlineto +-99 -340 rlineto +-86 340 rlineto +-133 0 rlineto +-89 -340 rlineto +-97 340 rlineto +-134 0 rlineto +164 -519 rlineto +closepath +endchar } ND +/x { +0 556 hsbw +0 20 161 197 499 20 hstem3 +6 161 vstem +370 161 vstem +6 0 rmoveto +161 0 rlineto +106 161 rlineto +105 -161 rlineto +169 0 rlineto +-192 273 rlineto +176 246 rlineto +-161 0 rlineto +-97 -143 rlineto +-92 143 rlineto +-167 0 rlineto +179 -252 rlineto +-187 -267 rlineto +closepath +endchar } ND +/y { +0 556 hsbw +-210 109 hstem +499 20 hstem +7 146 vstem +398 142 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +endchar } ND +/z { +0 500 hsbw +0 121 hstem +408 111 hstem +196 283 vstem +17 0 rmoveto +462 0 rlineto +0 121 rlineto +-237 0 rlineto +-9 -2 -18 -1 -19 -1 rrcurveto +70 76 rlineto +198 228 rlineto +0 98 rlineto +-428 0 rlineto +0 -114 rlineto +183 0 rlineto +26 0 21 1 16 2 rrcurveto +-8 -8 -10 -10 -11 -13 rrcurveto +-11 -14 -14 -16 -17 -17 rrcurveto +-194 -223 rlineto +0 -107 rlineto +closepath +endchar } ND +/braceleft { +0 389 hsbw +-210 117 201 116 611 117 hstem3 +136 127 vstem +29 200 rmoveto +111 -6 -4 -56 0 -130 rrcurveto +0 -159 49 -59 152 0 rrcurveto +26 0 rlineto +0 117 rlineto +-74 0 -26 3 0 68 rrcurveto +0 44 6 177 -97 60 rrcurveto +110 69 -18 160 0 56 rrcurveto +0 66 27 1 72 0 rrcurveto +0 117 rlineto +-26 0 rlineto +-171 0 -30 -60 0 -177 rrcurveto +0 -113 -5 -57 -102 -4 rrcurveto +0 -117 rlineto +closepath +endchar } ND +/bar { +0 280 hsbw +-210 20 hstem +708 20 hstem +86 109 vstem +86 -210 rmoveto +109 0 rlineto +0 938 rlineto +-109 0 rlineto +0 -938 rlineto +closepath +endchar } ND +/braceright { +0 389 hsbw +-210 117 201 116 611 117 hstem3 +122 127 vstem +356 200 rmoveto +0 117 rlineto +-111 6 4 56 0 130 rrcurveto +0 158 -48 61 -153 0 rrcurveto +-26 0 rlineto +0 -117 rlineto +75 0 23 -1 2 -73 rrcurveto +1 -160 -15 -52 105 -66 rrcurveto +-96 -58 5 -170 0 -56 rrcurveto +0 -66 -29 -2 -71 0 rrcurveto +0 -117 rlineto +26 0 rlineto +165 0 36 61 0 176 rrcurveto +0 109 6 57 101 7 rrcurveto +closepath +endchar } ND +/asciitilde { +0 584 hsbw +255 126 hstem +33 518 vstem +33 253 rmoveto +43 45 44 23 46 0 rrcurveto +28 0 40 -10 50 -22 rrcurveto +66 -29 23 -5 32 0 rrcurveto +57 0 59 33 30 31 rrcurveto +0 132 rlineto +-46 -48 -51 -22 -36 0 rrcurveto +-16 0 -30 10 -45 17 rrcurveto +-71 27 -25 12 -54 0 rrcurveto +-55 0 -48 -23 -41 -44 rrcurveto +0 -127 rlineto +closepath +endchar } ND +/Adieresis { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +757 118 hstem +0 153 vstem +187 118 vstem +397 118 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-265 474 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Aring { +0 722 hsbw +0 20 hstem +163 120 hstem +667 52 hstem +806 52 hstem +0 153 vstem +258 53 vstem +397 53 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-2 480 rmoveto +0 53 -43 42 -53 0 rrcurveto +-54 0 -42 -43 0 -52 rrcurveto +0 -54 42 -42 54 0 rrcurveto +53 0 43 42 0 54 rrcurveto +closepath +-53 0 rmoveto +0 -24 -19 -20 -24 0 rrcurveto +-24 0 -19 20 0 24 rrcurveto +0 24 19 19 24 0 rrcurveto +24 0 19 -19 0 -24 rrcurveto +closepath +endchar } ND +/Ccedilla { +0 722 hsbw +-205 60 hstem +-12 6 hstem +604 124 hstem +47 149 vstem +400 93 vstem +531 263 rmoveto +-24 -104 -58 -48 -77 0 rrcurveto +-104 0 -72 71 0 180 rrcurveto +0 170 72 72 107 0 rrcurveto +77 0 56 -46 18 -74 rrcurveto +143 35 rlineto +-41 141 -101 68 -145 0 rrcurveto +-200 0 -135 -139 0 -237 rrcurveto +0 -226 136 -138 191 0 rrcurveto +153 0 101 75 43 156 rrcurveto +-140 44 rlineto +closepath +-304 -460 rmoveto +21 -5 32 -3 42 0 rrcurveto +91 0 80 30 0 77 rrcurveto +0 51 -43 41 -81 0 rrcurveto +-30 0 -27 -4 -25 -9 rrcurveto +-13 -48 rlineto +22 6 21 3 21 0 rrcurveto +42 0 20 -18 0 -23 rrcurveto +0 -35 -37 -11 -44 0 rrcurveto +-28 0 -31 2 -33 4 rrcurveto +0 -58 rlineto +closepath +endchar } ND +/Eacute { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +757 146 hstem +73 144 vstem +256 87 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +183 757 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/Ntilde { +0 722 hsbw +0 238 hstem +467 249 hstem +757 80 hstem +191 63 vstem +508 134 vstem +74 0 rmoveto +134 0 rlineto +0 467 rlineto +289 -467 rlineto +145 0 rlineto +0 716 rlineto +-134 0 rlineto +0 -478 rlineto +-293 478 rlineto +-141 0 rlineto +0 -716 rlineto +closepath +180 755 rmoveto +0 32 12 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +36 -16 21 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/Odieresis { +0 778 hsbw +-12 123 hstem +604 124 hstem +757 118 hstem +43 149 vstem +218 118 vstem +428 118 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +26 399 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Udieresis { +0 722 hsbw +-12 123 hstem +696 20 hstem +757 118 hstem +195 118 vstem +405 118 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +123 41 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/aacute { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +582 146 hstem +36 137 vstem +209 87 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-149 333 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/agrave { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +582 146 hstem +36 137 vstem +262 86 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-10 333 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/acircumflex { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +657 71 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-244 335 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/adieresis { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +610 118 hstem +115 118 vstem +325 118 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-243 361 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/atilde { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +590 123 hstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-185 339 rmoveto +1 32 11 11 22 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +36 -15 22 -9 30 0 rrcurveto +50 0 37 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -19 5 -27 12 rrcurveto +-40 18 -15 7 -30 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/aring { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +560 52 hstem +699 52 hstem +36 137 vstem +183 52 vstem +322 53 vstem +387 135 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +17 406 rmoveto +0 53 -44 43 -52 0 rrcurveto +-54 0 -42 -43 0 -53 rrcurveto +0 -52 42 -43 54 0 rrcurveto +52 0 44 43 0 52 rrcurveto +closepath +-53 0 rmoveto +0 -24 -19 -19 -24 0 rrcurveto +-24 0 -20 19 0 24 rrcurveto +0 24 20 20 24 0 rrcurveto +24 0 19 -20 0 -24 rrcurveto +closepath +endchar } ND +/ccedilla { +0 556 hsbw +-205 60 hstem +-12 6 hstem +422 108 hstem +42 141 vstem +327 93 vstem +524 365 rmoveto +-32 112 -73 53 -126 0 rrcurveto +-155 0 -96 -101 0 -170 rrcurveto +0 -170 97 -101 152 0 rrcurveto +133 0 79 64 28 124 rrcurveto +-135 23 rlineto +-14 -72 -33 -27 -52 0 rrcurveto +-70 0 -44 45 0 124 rrcurveto +0 110 44 43 68 0 rrcurveto +50 0 34 -28 10 -53 rrcurveto +135 24 rlineto +closepath +-370 -562 rmoveto +22 -5 32 -3 42 0 rrcurveto +90 0 80 31 0 76 rrcurveto +0 51 -43 41 -81 0 rrcurveto +-30 0 -27 -4 -25 -9 rrcurveto +-13 -48 rlineto +22 6 21 3 21 0 rrcurveto +42 0 20 -18 0 -23 rrcurveto +0 -35 -37 -11 -43 0 rrcurveto +-28 0 -31 2 -34 4 rrcurveto +0 -58 rlineto +closepath +endchar } ND +/eacute { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +582 146 hstem +32 140 vstem +205 87 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-175 278 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/egrave { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +582 146 hstem +32 140 vstem +257 86 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-37 278 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/ecircumflex { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +657 71 hstem +32 140 vstem +109 330 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-271 280 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/edieresis { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +610 118 hstem +110 118 vstem +320 118 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-270 306 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/iacute { +0 278 hsbw +0 20 hstem +499 20 hstem +582 146 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +-10 582 rmoveto +86 0 rlineto +135 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/igrave { +0 278 hsbw +0 20 hstem +499 20 hstem +582 146 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +138 582 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/icircumflex { +0 278 hsbw +0 20 hstem +499 20 hstem +657 71 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +-97 584 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/idieresis { +0 278 hsbw +0 20 hstem +499 20 hstem +610 118 hstem +-23 117 vstem +187 118 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +-95 610 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/ntilde { +0 611 hsbw +0 442 hstem +510 20 hstem +590 123 hstem +406 137 vstem +543 0 rmoveto +0 322 rlineto +0 134 -63 74 -111 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +0 235 rlineto +0 122 25 68 88 0 rrcurveto +73 0 12 -53 0 -107 rrcurveto +0 -265 rlineto +137 0 rlineto +closepath +-342 588 rmoveto +1 32 11 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +36 -16 23 -8 30 0 rrcurveto +50 0 37 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/oacute { +0 611 hsbw +-12 112 hstem +418 112 hstem +582 146 hstem +40 141 vstem +238 87 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +57 323 rmoveto +87 0 rlineto +134 146 rlineto +-153 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/ograve { +0 611 hsbw +-12 112 hstem +418 112 hstem +582 146 hstem +40 141 vstem +290 86 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +195 323 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/ocircumflex { +0 611 hsbw +-12 112 hstem +418 112 hstem +657 71 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-39 325 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/odieresis { +0 611 hsbw +-12 112 hstem +418 112 hstem +610 118 hstem +138 118 vstem +348 118 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-43 351 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/otilde { +0 611 hsbw +-12 112 hstem +418 112 hstem +590 123 hstem +139 63 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +21 329 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 19 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-54 0 -35 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/uacute { +0 611 hsbw +-12 105 hstem +499 20 hstem +582 146 hstem +69 137 vstem +235 87 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-178 582 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/ugrave { +0 611 hsbw +-12 105 hstem +499 20 hstem +582 146 hstem +69 137 vstem +288 86 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-39 582 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/ucircumflex { +0 611 hsbw +-12 105 hstem +499 20 hstem +657 71 hstem +69 137 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-273 584 rmoveto +110 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/udieresis { +0 611 hsbw +-12 105 hstem +499 20 hstem +610 118 hstem +141 117 vstem +351 118 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-272 610 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/dagger { +0 556 hsbw +405 114 hstem +211 129 vstem +211 -171 rmoveto +129 0 rlineto +0 576 rlineto +177 0 rlineto +0 114 rlineto +-177 0 rlineto +0 188 rlineto +-129 0 rlineto +0 -188 rlineto +-178 0 rlineto +0 -114 rlineto +178 0 rlineto +0 -576 rlineto +closepath +endchar } ND +/degree { +0 400 hsbw +417 81 hstem +647 81 hstem +42 81 vstem +272 82 vstem +42 572 rmoveto +0 -86 69 -69 87 0 rrcurveto +85 0 71 69 0 86 rrcurveto +0 86 -71 70 -85 0 rrcurveto +-87 0 -69 -70 0 -86 rrcurveto +closepath +81 0 rmoveto +0 41 33 34 42 0 rrcurveto +41 0 33 -34 0 -41 rrcurveto +0 -40 -33 -34 -41 0 rrcurveto +-42 0 -33 34 0 40 rrcurveto +closepath +endchar } ND +/cent { +0 556 hsbw +-197 20 hstem +-12 112 hstem +422 108 hstem +41 141 vstem +363 396 rmoveto +12 -14 9 -18 4 -23 rrcurveto +135 24 rlineto +-22 75 -41 49 -62 24 rrcurveto +55 181 rlineto +-60 17 rlineto +-55 -184 rlineto +-16 2 -16 1 -14 0 rrcurveto +-154 0 -97 -100 0 -169 rrcurveto +0 -122 50 -93 90 -38 rrcurveto +-56 -188 rlineto +59 -17 rlineto +57 189 rlineto +16 -2 17 -2 17 0 rrcurveto +132 0 79 64 28 124 rrcurveto +-134 23 rlineto +-15 -72 -33 -27 -52 0 rrcurveto +-22 0 rlineto +89 296 rlineto +closepath +-57 26 rmoveto +-87 -291 rlineto +-25 28 -12 45 0 64 rrcurveto +0 110 44 44 68 0 rrcurveto +12 0 rlineto +closepath +endchar } ND +/sterling { +0 556 hsbw +-12 423 hstem +619 109 hstem +63 133 vstem +488 139 rmoveto +-42 -18 -33 -9 -25 0 rrcurveto +-21 0 -88 23 -11 3 rrcurveto +-31 0 rlineto +-28 0 -22 -5 -18 -8 rrcurveto +61 70 14 35 0 52 rrcurveto +0 21 rlineto +129 0 rlineto +0 108 rlineto +-153 0 rlineto +-14 37 -10 51 0 28 rrcurveto +0 52 39 40 52 0 rrcurveto +48 0 34 -29 12 -69 rrcurveto +133 19 rlineto +-18 121 -77 67 -128 0 rrcurveto +-118 0 -110 -88 0 -112 rrcurveto +0 -40 6 -39 14 -38 rrcurveto +-77 0 rlineto +0 -108 rlineto +104 0 rlineto +0 -28 rlineto +0 -54 -30 -62 -74 -53 rrcurveto +53 -118 rlineto +41 28 40 14 40 0 rrcurveto +23 0 42 -9 43 -11 rrcurveto +43 -11 46 -10 29 0 rrcurveto +45 0 52 14 38 20 rrcurveto +-53 116 rlineto +closepath +endchar } ND +/section { +0 556 hsbw +-210 105 hstem +624 104 hstem +29 124 vstem +401 120 vstem +481 563 rmoveto +-12 98 -75 67 -128 0 rrcurveto +-124 0 -72 -69 0 -88 rrcurveto +0 -39 17 -35 32 -36 rrcurveto +-62 -35 -28 -57 0 -64 rrcurveto +0 -104 62 -44 116 -75 rrcurveto +95 -62 54 3 0 -71 rrcurveto +0 -32 -28 -25 -42 0 rrcurveto +-51 0 -33 30 -12 58 rrcurveto +-134 -16 rlineto +14 -108 81 -69 131 0 rrcurveto +134 0 76 73 0 96 rrcurveto +0 46 -21 42 -38 36 rrcurveto +58 42 30 50 0 62 rrcurveto +0 99 -85 59 -106 68 rrcurveto +-66 42 -56 21 0 52 rrcurveto +0 24 22 22 42 0 rrcurveto +46 0 26 -27 3 -48 rrcurveto +134 14 rlineto +closepath +-122 -420 rmoveto +-140 95 rlineto +-44 30 -22 31 0 33 rrcurveto +0 28 20 26 22 12 rrcurveto +134 -96 rlineto +66 -50 6 -16 0 -21 rrcurveto +0 -23 -14 -23 -28 -26 rrcurveto +closepath +endchar } ND +/bullet { +0 350 hsbw +209 289 hstem +32 289 vstem +321 354 rmoveto +0 80 -66 64 -78 0 rrcurveto +-80 0 -65 -66 0 -78 rrcurveto +0 -80 65 -65 80 0 rrcurveto +78 0 66 63 0 82 rrcurveto +closepath +endchar } ND +/paragraph { +0 556 hsbw +-197 20 hstem +588 128 hstem +191 119 vstem +380 116 vstem +310 -197 rmoveto +0 785 rlineto +70 0 rlineto +0 -785 rlineto +116 0 rlineto +0 785 rlineto +55 0 rlineto +0 128 rlineto +-291 0 rlineto +-191 0 -70 -68 0 -134 rrcurveto +0 -116 69 -75 123 -9 rrcurveto +0 -511 rlineto +119 0 rlineto +closepath +endchar } ND +/germandbls { +0 611 hsbw +-12 110 hstem +621 107 hstem +68 137 vstem +438 138 vstem +68 0 rmoveto +137 0 rlineto +0 465 rlineto +0 97 3 59 72 0 rrcurveto +36 0 23 -24 0 -28 rrcurveto +0 -20 0 -6 -33 -67 rrcurveto +-22 -45 -10 -31 0 -19 rrcurveto +0 -30 27 -42 55 -52 rrcurveto +58 -54 24 -14 0 -41 rrcurveto +0 -28 -21 -22 -26 0 rrcurveto +-22 0 -16 13 -13 26 rrcurveto +-96 -56 rlineto +29 -52 61 -41 68 0 rrcurveto +101 0 73 71 0 95 rrcurveto +0 60 -28 44 -58 57 rrcurveto +-49 48 -22 12 0 36 rrcurveto +0 22 12 16 22 40 rrcurveto +18 33 9 30 0 28 rrcurveto +0 84 -66 64 -132 0 rrcurveto +-157 0 -57 -92 0 -171 rrcurveto +0 -465 rlineto +closepath +endchar } ND +/registered { +0 737 hsbw +-18 73 hstem +319 63 hstem +490 62 hstem +657 73 hstem +-4 74 vstem +194 87 437 71 671 73 vstem3 +370 730 rmoveto +-198 0 -176 -177 0 -197 rrcurveto +0 -196 177 -178 197 0 rrcurveto +192 0 182 179 0 195 rrcurveto +0 196 -178 178 -196 0 rrcurveto +closepath +0 -73 rmoveto +155 0 146 -144 0 -157 rrcurveto +0 -157 -144 -144 -157 0 rrcurveto +-157 0 -143 145 0 156 rrcurveto +0 157 142 144 158 0 rrcurveto +closepath +-169 -501 rmoveto +80 0 rlineto +0 163 rlineto +21 0 rlineto +45 0 21 -12 46 -86 rrcurveto +33 -65 rlineto +99 0 rlineto +-46 80 rlineto +-9 13 -7 12 -4 9 rrcurveto +-20 45 -14 3 -30 12 rrcurveto +66 9 40 44 0 58 rrcurveto +0 62 -42 49 -72 0 rrcurveto +-207 0 rlineto +0 -396 rlineto +closepath +80 226 rmoveto +0 108 rlineto +33 0 rlineto +79 0 44 -5 0 -48 rrcurveto +0 -55 -42 0 -81 0 rrcurveto +-33 0 rlineto +closepath +endchar } ND +/copyright { +0 737 hsbw +-18 74 hstem +147 70 hstem +494 69 hstem +657 73 hstem +-4 73 vstem +186 86 vstem +670 74 vstem +370 730 rmoveto +-198 0 -176 -177 0 -197 rrcurveto +0 -196 177 -178 197 0 rrcurveto +192 0 182 179 0 195 rrcurveto +0 196 -178 178 -196 0 rrcurveto +closepath +0 -73 rmoveto +155 0 145 -146 0 -155 rrcurveto +0 -157 -143 -143 -157 0 rrcurveto +-156 0 -145 144 0 156 rrcurveto +0 157 144 144 157 0 rrcurveto +closepath +90 -356 rmoveto +-18 -60 -33 -24 -42 0 rrcurveto +-52 0 -43 44 0 95 rrcurveto +0 94 42 44 59 0 rrcurveto +40 0 28 -20 19 -48 rrcurveto +79 19 rlineto +-30 81 -53 37 -80 0 rrcurveto +-115 0 -75 -93 0 -117 rrcurveto +0 -128 78 -78 111 0 rrcurveto +80 0 60 45 24 82 rrcurveto +-79 27 rlineto +closepath +endchar } ND +/trademark { +0 1000 hsbw +316 124 hstem +646 70 hstem +229 81 vstem +479 76 641 73 800 76 vstem3 +229 316 rmoveto +81 0 rlineto +0 330 rlineto +120 0 rlineto +0 70 rlineto +-325 0 rlineto +0 -70 rlineto +124 0 rlineto +0 -330 rlineto +closepath +250 0 rmoveto +76 0 rlineto +0 319 rlineto +86 -319 rlineto +73 0 rlineto +86 319 rlineto +0 -319 rlineto +77 0 rlineto +0 400 rlineto +-126 0 rlineto +-73 -276 rlineto +-73 276 rlineto +-126 0 rlineto +0 -400 rlineto +closepath +endchar } ND +/acute { +0 333 hsbw +582 146 hstem +91 87 vstem +91 582 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/dieresis { +0 333 hsbw +610 118 hstem +2 118 vstem +212 119 vstem +2 610 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +119 0 rlineto +0 118 rlineto +-119 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/notequal { +0 549 hsbw +-12 320 hstem +398 126 hstem +699 20 hstem +239 285 vstem +206 308 rmoveto +-182 0 rlineto +0 -126 rlineto +135 0 rlineto +-72 -194 rlineto +101 0 rlineto +73 194 rlineto +263 0 rlineto +0 126 rlineto +-216 0 rlineto +34 90 rlineto +182 0 rlineto +0 126 rlineto +-135 0 rlineto +72 195 rlineto +-103 0 rlineto +-72 -195 rlineto +-262 0 rlineto +0 -126 rlineto +215 0 rlineto +-33 -90 rlineto +closepath +endchar } ND +/AE { +0 1000 hsbw +0 121 hstem +168 125 hstem +314 122 hstem +607 109 hstem +-42 160 vstem +441 143 vstem +-42 0 rmoveto +160 0 rlineto +73 168 rlineto +248 0 rlineto +0 -168 rlineto +513 0 rlineto +0 121 rlineto +-368 0 rlineto +0 193 rlineto +327 0 rlineto +0 122 rlineto +-327 0 rlineto +0 159 rlineto +354 0 rlineto +0 121 rlineto +-646 0 rlineto +-334 -716 rlineto +closepath +287 293 rmoveto +140 314 rlineto +56 0 rlineto +0 -314 rlineto +-196 0 rlineto +closepath +endchar } ND +/Oslash { +0 778 hsbw +-12 117 hstem +605 123 hstem +43 149 vstem +588 149 vstem +605 664 rmoveto +-58 42 -72 22 -86 0 rrcurveto +-211 0 -135 -140 0 -226 rrcurveto +0 -102 23 -83 48 -63 rrcurveto +-83 -93 rlineto +69 -61 rlineto +79 89 rlineto +54 -41 71 -20 90 0 rrcurveto +206 0 137 139 0 227 rrcurveto +0 96 -25 90 -44 59 rrcurveto +82 91 rlineto +-68 60 rlineto +-77 -86 rlineto +closepath +-90 -101 rmoveto +-301 -337 rlineto +-15 36 -7 45 0 52 rrcurveto +0 164 79 82 119 0 rrcurveto +50 0 42 -14 33 -28 rrcurveto +closepath +53 -77 rmoveto +13 -34 7 -44 0 -52 rrcurveto +0 -167 -83 -84 -116 0 rrcurveto +-48 0 -40 14 -33 30 rrcurveto +300 337 rlineto +closepath +endchar } ND +/infinity { +0 713 hsbw +182 72 293 119 451 72 hstem3 +74 69 vstem +291 87 vstem +569 71 vstem +333 412 rmoveto +-40 53 -55 30 -46 0 rrcurveto +-66 0 -52 -54 0 -88 rrcurveto +0 -90 52 -54 66 0 rrcurveto +46 0 55 29 40 55 rrcurveto +48 -79 47 -32 62 0 rrcurveto +86 0 64 64 0 107 rrcurveto +0 105 -64 65 -86 0 rrcurveto +-62 0 -47 -33 -48 -78 rrcurveto +closepath +45 -58 rmoveto +53 82 28 15 34 0 rrcurveto +42 0 34 -36 0 -61 rrcurveto +0 -56 -28 -44 -49 0 rrcurveto +-54 0 -16 33 -44 67 rrcurveto +closepath +-87 0 rmoveto +-31 -40 -22 -29 -40 0 rrcurveto +-31 0 -24 26 0 44 rrcurveto +0 42 24 26 31 0 rrcurveto +29 0 31 -23 33 -46 rrcurveto +closepath +endchar } ND +/plusminus { +0 549 hsbw +0 128 hstem +360 128 hstem +212 125 vstem +212 174 rmoveto +125 0 rlineto +0 186 rlineto +188 0 rlineto +0 128 rlineto +-188 0 rlineto +0 186 rlineto +-125 0 rlineto +0 -186 rlineto +-188 0 rlineto +0 -128 rlineto +188 0 rlineto +0 -186 rlineto +closepath +-188 -174 rmoveto +501 0 rlineto +0 128 rlineto +-501 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/lessequal { +0 549 hsbw +0 128 hstem +164 138 377 118 570 138 hstem3 +29 149 vstem +520 164 rmoveto +0 138 rlineto +-342 136 rlineto +342 131 rlineto +0 139 rlineto +-491 -212 rlineto +0 -119 rlineto +491 -213 rlineto +closepath +-491 -164 rmoveto +491 0 rlineto +0 128 rlineto +-491 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/greaterequal { +0 549 hsbw +0 128 hstem +164 139 378 117 571 137 hstem3 +372 148 vstem +29 165 rmoveto +491 213 rlineto +0 118 rlineto +-491 212 rlineto +0 -137 rlineto +343 -133 rlineto +-343 -135 rlineto +0 -138 rlineto +closepath +0 -165 rmoveto +491 0 rlineto +0 128 rlineto +-491 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/yen { +0 556 hsbw +0 20 hstem +133 108 hstem +300 416 hstem +0 152 209 134 401 150 vstem3 +206 133 rmoveto +0 -133 rlineto +137 0 rlineto +0 133 rlineto +184 0 rlineto +0 108 rlineto +-184 0 rlineto +0 59 rlineto +184 0 rlineto +0 108 rlineto +-130 0 rlineto +154 308 rlineto +-150 0 rlineto +-100 -208 rlineto +-12 -25 -8 -23 -6 -21 rrcurveto +-6 20 -8 23 -12 26 rrcurveto +-98 208 rlineto +-151 0 rlineto +152 -308 rlineto +-127 0 rlineto +0 -108 rlineto +181 0 rlineto +0 -59 rlineto +-181 0 rlineto +0 -108 rlineto +181 0 rlineto +closepath +endchar } ND +/mu1 { +0 576 hsbw +-199 20 hstem +-13 111 hstem +499 20 hstem +54 136 vstem +398 128 vstem +54 519 rmoveto +0 -718 rlineto +136 0 rlineto +0 262 rlineto +28 -54 27 -22 49 0 rrcurveto +37 0 41 26 26 50 rrcurveto +0 -63 rlineto +128 0 rlineto +0 519 rlineto +-139 0 rlineto +0 -237 rlineto +0 -115 -22 -69 -77 0 rrcurveto +-84 0 -14 73 0 113 rrcurveto +0 235 rlineto +-136 0 rlineto +closepath +endchar } ND +/partialdiff { +0 494 hsbw +-12 93 hstem +639 89 hstem +20 111 vstem +401 74 vstem +183 548 rmoveto +36 70 31 21 44 0 rrcurveto +84 0 23 -79 0 -100 rrcurveto +-82 1 -70 -13 -58 -28 rrcurveto +-110 -53 -61 -98 0 -108 rrcurveto +0 -111 61 -62 90 0 rrcurveto +198 0 106 263 0 209 rrcurveto +0 151 -45 117 -133 0 rrcurveto +-79 0 -68 -46 -34 -93 rrcurveto +67 -41 rlineto +closepath +213 -178 rmoveto +-21 -152 -59 -137 -116 0 rrcurveto +-38 0 -31 33 0 51 rrcurveto +0 112 120 94 123 0 rrcurveto +5 -1 rlineto +17 0 rlineto +closepath +endchar } ND +/summation { +0 713 hsbw +-210 78 hstem +648 80 hstem +60 109 vstem +68 728 rmoveto +0 -85 rlineto +294 -377 rlineto +-302 -385 rlineto +0 -91 rlineto +617 0 rlineto +0 78 rlineto +-508 0 rlineto +317 402 rlineto +-297 378 rlineto +483 0 rlineto +0 80 rlineto +-604 0 rlineto +closepath +endchar } ND +/product { +0 823 hsbw +-210 20 hstem +643 85 hstem +79 94 vstem +650 94 vstem +79 728 rmoveto +0 -938 rlineto +94 0 rlineto +0 853 rlineto +477 0 rlineto +0 -853 rlineto +94 0 rlineto +0 938 rlineto +-665 0 rlineto +closepath +endchar } ND +/pi1 { +0 549 hsbw +0 20 hstem +420 99 hstem +82 142 vstem +326 140 vstem +0 519 rmoveto +0 -99 rlineto +82 0 rlineto +0 -420 rlineto +142 0 rlineto +0 420 rlineto +102 0 rlineto +0 -420 rlineto +140 0 rlineto +0 420 rlineto +83 0 rlineto +0 99 rlineto +-549 0 rlineto +closepath +endchar } ND +/integral { +0 274 hsbw +-107 76 hstem +834 76 hstem +98 77 vstem +98 463 rmoveto +0 -168 6 -136 12 -102 rrcurveto +3 -26 2 -19 0 -13 rrcurveto +0 -22 -9 -8 -10 0 rrcurveto +-7 0 -9 7 -9 9 rrcurveto +-9 7 -11 8 -13 0 rrcurveto +-26 0 -18 -18 0 -30 rrcurveto +0 -34 23 -25 35 0 rrcurveto +95 0 11 96 3 131 rrcurveto +2 87 3 69 3 43 rrcurveto +0 88 rlineto +0 83 -6 108 -12 134 rrcurveto +-4 33 -1 24 0 14 rrcurveto +0 22 9 9 11 0 rrcurveto +5 0 6 -4 8 -6 rrcurveto +13 -12 13 -5 12 0 rrcurveto +25 0 19 19 0 31 rrcurveto +0 26 -28 27 -33 0 rrcurveto +-65 0 -35 -95 -6 -93 rrcurveto +-8 -259 rlineto +closepath +endchar } ND +/ordfeminine { +0 370 hsbw +363 73 hstem +535 65 hstem +651 77 hstem +18 101 vstem +231 100 vstem +124 611 rmoveto +11 33 12 7 35 0 rrcurveto +31 0 18 -5 0 -36 rrcurveto +0 -10 rlineto +-15 -6 -20 -6 -26 -5 rrcurveto +-104 -20 -48 -16 0 -79 rrcurveto +0 -62 44 -43 74 0 rrcurveto +42 0 35 14 29 29 rrcurveto +3 -15 4 -11 4 -8 rrcurveto +93 0 rlineto +-12 21 -3 13 0 68 rrcurveto +0 116 rlineto +0 117 -47 21 -104 0 rrcurveto +-92 0 -42 -34 -14 -64 rrcurveto +92 -19 rlineto +closepath +107 -76 rmoveto +0 -20 rlineto +0 -51 -27 -28 -37 0 rrcurveto +-28 0 -20 18 0 22 rrcurveto +0 31 26 5 56 12 rrcurveto +13 2 10 4 7 5 rrcurveto +closepath +endchar } ND +/ordmasculine { +0 365 hsbw +361 83 hstem +643 85 hstem +13 103 vstem +246 106 vstem +13 544 rmoveto +0 -115 66 -68 103 0 rrcurveto +102 0 68 68 0 115 rrcurveto +0 116 -68 68 -102 0 rrcurveto +-103 0 -66 -68 0 -116 rrcurveto +closepath +103 -1 rmoveto +0 73 26 27 39 0 rrcurveto +37 0 28 -28 0 -72 rrcurveto +0 -71 -28 -28 -37 0 rrcurveto +-39 0 -26 28 0 71 rrcurveto +closepath +endchar } ND +/Ohm { +0 768 hsbw +0 112 hstem +627 107 hstem +38 151 vstem +226 116 vstem +583 154 vstem +226 101 rmoveto +-151 11 rlineto +-48 0 rlineto +0 -112 rlineto +315 0 rlineto +0 119 rlineto +-115 53 -38 95 0 118 rrcurveto +0 153 84 89 111 0 rrcurveto +116 0 83 -84 0 -160 rrcurveto +0 -115 -39 -96 -110 -53 rrcurveto +0 -119 rlineto +313 0 rlineto +0 113 rlineto +-35 0 rlineto +-161 -11 rlineto +126 56 60 107 0 132 rrcurveto +0 192 -142 145 -216 0 rrcurveto +-206 0 -135 -137 0 -201 rrcurveto +0 -138 55 -101 133 -56 rrcurveto +closepath +endchar } ND +/ae { +0 889 hsbw +-12 97 219 80 433 97 hstem3 +43 137 vstem +361 136 vstem +707 135 vstem +701 166 rmoveto +-18 -51 -32 -22 -46 0 rrcurveto +-56 0 -42 36 -10 90 rrcurveto +345 0 rlineto +0 190 -77 121 -171 0 rrcurveto +-54 0 -47 -16 -40 -32 rrcurveto +-38 32 -53 16 -68 0 rrcurveto +-143 0 -61 -46 -32 -100 rrcurveto +124 -24 rlineto +13 45 30 20 52 0 rrcurveto +58 0 27 -25 0 -49 rrcurveto +0 -14 rlineto +-45 -16 -72 -15 -43 -8 rrcurveto +-120 -25 -39 -44 0 -88 rrcurveto +0 -88 65 -65 111 0 rrcurveto +77 0 79 32 46 40 rrcurveto +50 -48 63 -24 72 0 rrcurveto +117 0 76 51 36 103 rrcurveto +-134 24 rlineto +closepath +6 139 rmoveto +-207 0 rlineto +-2 20 5 23 12 24 rrcurveto +17 34 29 19 39 0 rrcurveto +67 0 35 -40 5 -80 rrcurveto +closepath +-346 -57 rmoveto +0 -143 -30 -20 -74 0 rrcurveto +-46 0 -31 30 0 38 rrcurveto +0 65 52 -4 129 34 rrcurveto +closepath +endchar } ND +/oslash { +0 611 hsbw +-12 107 hstem +425 105 hstem +42 137 vstem +441 137 vstem +462 488 rmoveto +-44 28 -51 14 -57 0 rrcurveto +-158 0 -110 -112 0 -156 rrcurveto +0 -70 24 -68 39 -48 rrcurveto +-56 -65 rlineto +54 -47 rlineto +56 65 rlineto +44 -28 50 -13 56 0 rrcurveto +153 0 116 116 0 155 rrcurveto +0 69 -25 66 -38 47 rrcurveto +52 60 rlineto +-54 45 rlineto +-51 -58 rlineto +closepath +-77 -89 rmoveto +-193 -222 rlineto +-9 25 -4 29 0 33 rrcurveto +0 101 57 60 75 0 rrcurveto +27 0 25 -9 22 -17 rrcurveto +closepath +42 -60 rmoveto +9 -26 5 -28 0 -30 rrcurveto +0 -102 -58 -58 -74 0 rrcurveto +-28 0 -24 7 -22 16 rrcurveto +192 221 rlineto +closepath +endchar } ND +/questiondown { +0 611 hsbw +-205 105 hstem +381 138 hstem +49 134 vstem +249 125 vstem +373 519 rmoveto +-138 0 rlineto +0 -138 rlineto +138 0 rlineto +0 138 rlineto +closepath +-124 -185 rmoveto +0 -76 -7 -16 -56 -45 rrcurveto +-86 -69 -51 -47 0 -81 rrcurveto +0 -109 100 -96 158 0 rrcurveto +131 0 106 74 19 135 rrcurveto +-125 17 rlineto +-20 -84 -47 -37 -69 0 rrcurveto +-72 0 -47 45 0 50 rrcurveto +0 50 27 16 59 49 rrcurveto +73 60 32 43 0 84 rrcurveto +0 37 rlineto +-125 0 rlineto +closepath +endchar } ND +/exclamdown { +0 333 hsbw +-199 530 hstem +381 138 hstem +101 137 vstem +238 519 rmoveto +-137 0 rlineto +0 -138 rlineto +137 0 rlineto +0 138 rlineto +closepath +-30 -188 rmoveto +-77 0 rlineto +-36 -362 rlineto +0 -168 rlineto +149 0 rlineto +0 168 rlineto +-36 362 rlineto +closepath +endchar } ND +/logicalnot { +0 584 hsbw +399 125 hstem +417 125 vstem +417 184 rmoveto +125 0 rlineto +0 340 rlineto +-500 0 rlineto +0 -125 rlineto +375 0 rlineto +0 -215 rlineto +closepath +endchar } ND +/radical { +0 549 hsbw +501 20 hstem +514 36 vstem +514 913 rmoveto +-127 -794 rlineto +-198 402 rlineto +-147 -74 rlineto +17 -31 rlineto +97 44 rlineto +242 -498 rlineto +152 951 rlineto +-36 0 rlineto +closepath +endchar } ND +/florin { +0 556 hsbw +-210 116 hstem +416 103 hstem +611 117 hstem +251 138 vstem +135 416 rmoveto +98 0 rlineto +-73 -427 rlineto +-10 -58 -2 -25 -48 0 rrcurveto +-20 0 -27 4 -35 7 rrcurveto +-28 -108 rlineto +40 -12 46 -7 51 0 rrcurveto +101 0 42 45 18 103 rrcurveto +84 478 rlineto +100 0 rlineto +18 103 rlineto +-101 0 rlineto +5 27 rlineto +10 56 15 9 35 0 rrcurveto +20 0 26 -5 31 -8 rrcurveto +27 110 rlineto +-44 13 -43 7 -44 0 rrcurveto +-113 0 -33 -29 -22 -137 rrcurveto +-8 -43 rlineto +-99 0 rlineto +-17 -103 rlineto +closepath +endchar } ND +/approxequal { +0 549 hsbw +135 126 hstem +373 126 hstem +15 519 vstem +15 372 rmoveto +43 44 44 23 46 0 rrcurveto +28 0 40 -11 51 -22 rrcurveto +67 -29 20 -4 34 0 rrcurveto +57 0 58 33 31 32 rrcurveto +0 131 rlineto +-46 -50 -51 -20 -37 0 rrcurveto +-29 0 -23 11 -51 20 rrcurveto +-61 24 -25 11 -51 0 rrcurveto +-56 0 -48 -23 -41 -44 rrcurveto +0 -126 rlineto +closepath +0 -237 rmoveto +43 45 44 23 46 0 rrcurveto +28 0 40 -11 51 -22 rrcurveto +67 -29 20 -5 34 0 rrcurveto +57 0 58 33 31 32 rrcurveto +0 132 rlineto +-46 -50 -51 -21 -37 0 rrcurveto +-28 0 -21 12 -54 20 rrcurveto +-59 22 -28 12 -50 0 rrcurveto +-56 0 -48 -23 -41 -44 rrcurveto +0 -126 rlineto +closepath +endchar } ND +/increment { +0 612 hsbw +0 40 hstem +14 586 vstem +600 0 rmoveto +-279 677 rlineto +-307 -677 rlineto +586 0 rlineto +closepath +-115 40 rmoveto +-410 0 rlineto +215 472 rlineto +195 -472 rlineto +closepath +endchar } ND +/guillemotleft { +0 556 hsbw +34 446 hstem +47 135 vstem +238 136 vstem +393 107 vstem +309 480 rmoveto +-108 0 rlineto +-154 -220 rlineto +154 -226 rlineto +108 0 rlineto +-127 226 rlineto +127 220 rlineto +closepath +191 0 rmoveto +-107 0 rlineto +-155 -220 rlineto +155 -226 rlineto +107 0 rlineto +-126 226 rlineto +126 220 rlineto +closepath +endchar } ND +/guillemotright { +0 556 hsbw +34 446 hstem +52 108 vstem +179 135 vstem +370 135 vstem +243 34 rmoveto +108 0 rlineto +154 221 rlineto +-154 225 rlineto +-108 0 rlineto +127 -225 rlineto +-127 -221 rlineto +closepath +-191 0 rmoveto +108 0 rlineto +154 221 rlineto +-154 225 rlineto +-108 0 rlineto +127 -225 rlineto +-127 -221 rlineto +closepath +endchar } ND +/ellipsis { +0 1000 hsbw +0 137 hstem +98 137 432 136 765 137 vstem3 +765 0 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +-333 0 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +-334 0 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Agrave { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +757 146 hstem +0 153 vstem +349 86 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-17 474 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/Atilde { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +757 80 hstem +0 153 vstem +179 63 279 138 454 63 vstem3 +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-210 472 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 19 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/Otilde { +0 778 hsbw +-12 123 hstem +604 124 hstem +757 80 hstem +43 149 vstem +210 63 vstem +484 64 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +81 397 rmoveto +0 32 12 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +36 -16 21 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/OE { +0 1000 hsbw +-12 127 hstem +314 122 hstem +604 124 hstem +35 149 vstem +500 134 vstem +969 122 rmoveto +-335 0 rlineto +0 192 rlineto +294 0 rlineto +0 122 rlineto +-294 0 rlineto +0 159 rlineto +322 0 rlineto +0 121 rlineto +-447 0 rlineto +0 -79 rlineto +-42 54 -72 37 -81 0 rrcurveto +-191 0 -88 -159 0 -210 rrcurveto +0 -215 84 -156 202 0 rrcurveto +88 0 62 32 38 64 rrcurveto +0 -84 rlineto +460 0 rlineto +0 122 rlineto +closepath +-627 482 rmoveto +97 0 61 -63 0 -174 rrcurveto +0 -158 -40 -94 -118 0 rrcurveto +-135 0 -23 103 0 152 rrcurveto +0 170 62 64 96 0 rrcurveto +closepath +endchar } ND +/oe { +0 944 hsbw +-12 105 hstem +219 86 hstem +429 101 hstem +43 141 vstem +426 136 vstem +771 132 vstem +763 167 rmoveto +-19 -54 -31 -20 -42 0 rrcurveto +-60 0 -44 42 -5 84 rrcurveto +341 0 rlineto +0 163 -87 148 -154 0 rrcurveto +-71 0 -57 -24 -45 -48 rrcurveto +-48 48 -61 24 -72 0 rrcurveto +-154 0 -111 -129 0 -143 rrcurveto +0 -158 111 -112 152 0 rrcurveto +69 0 61 23 52 50 rrcurveto +48 -51 68 -22 66 0 rrcurveto +113 0 82 58 31 99 rrcurveto +-133 22 rlineto +closepath +8 138 rmoveto +-208 0 rlineto +5 75 32 49 65 0 rrcurveto +57 0 43 -40 6 -84 rrcurveto +closepath +-587 -54 rmoveto +0 112 51 54 72 0 rrcurveto +66 0 53 -56 0 -97 rrcurveto +0 -108 -53 -54 -66 0 rrcurveto +-82 0 -41 79 0 70 rrcurveto +closepath +endchar } ND +/endash { +0 556 hsbw +208 103 hstem +-2 556 vstem +-2 208 rmoveto +556 0 rlineto +0 103 rlineto +-556 0 rlineto +0 -103 rlineto +closepath +endchar } ND +/emdash { +0 1000 hsbw +208 103 hstem +0 1000 vstem +0 208 rmoveto +1000 0 rlineto +0 103 rlineto +-1000 0 rlineto +0 -103 rlineto +closepath +endchar } ND +/quotedblleft { +0 500 hsbw +426 297 hstem +64 71 vstem +293 71 vstem +202 426 rmoveto +0 137 rlineto +-67 0 rlineto +1 54 22 30 55 19 rrcurveto +-27 57 rlineto +-89 -33 -33 -61 0 -105 rrcurveto +0 -98 rlineto +138 0 rlineto +closepath +229 0 rmoveto +0 137 rlineto +-67 0 rlineto +1 54 22 30 55 19 rrcurveto +-27 57 rlineto +-87 -33 -35 -59 0 -107 rrcurveto +0 -98 rlineto +138 0 rlineto +closepath +endchar } ND +/quotedblright { +0 500 hsbw +579 137 hstem +129 71 vstem +359 71 vstem +293 716 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -55 -21 -31 -54 -17 rrcurveto +27 -58 rlineto +84 29 37 65 0 105 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-230 0 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -55 -20 -31 -56 -17 rrcurveto +27 -58 rlineto +86 29 36 64 0 106 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +endchar } ND +/quoteleft { +0 278 hsbw +426 297 hstem +74 71 vstem +211 426 rmoveto +0 137 rlineto +-66 0 rlineto +1 54 22 30 55 19 rrcurveto +-27 57 rlineto +-89 -33 -33 -61 0 -105 rrcurveto +0 -98 rlineto +137 0 rlineto +closepath +endchar } ND +/quoteright { +0 278 hsbw +577 137 hstem +135 71 vstem +68 714 rmoveto +0 -137 rlineto +67 0 rlineto +-2 -56 -20 -30 -56 -17 rrcurveto +27 -57 rlineto +86 29 36 65 0 105 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +endchar } ND +/divide { +0 549 hsbw +90 139 290 127 479 137 hstem3 +206 137 vstem +206 479 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +-182 -190 rmoveto +500 0 rlineto +0 128 rlineto +-500 0 rlineto +0 -128 rlineto +closepath +182 -199 rmoveto +137 0 rlineto +0 138 rlineto +-137 0 rlineto +0 -138 rlineto +closepath +endchar } ND +/lozenge { +0 494 hsbw +0 46 hstem +647 47 hstem +23 53 vstem +214 54 vstem +417 55 vstem +268 694 rmoveto +-54 0 rlineto +-191 -348 rlineto +191 -346 rlineto +54 0 rlineto +204 346 rlineto +-204 348 rlineto +closepath +-26 -47 rmoveto +175 -301 rlineto +-175 -300 rlineto +-166 300 rlineto +166 301 rlineto +closepath +endchar } ND +/ydieresis { +0 556 hsbw +-210 109 hstem +499 20 hstem +610 118 hstem +112 118 vstem +322 118 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +105 91 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Ydieresis { +0 667 hsbw +0 433 hstem +696 20 hstem +757 118 hstem +-1 169 vstem +171 118 vstem +381 118 vstem +501 167 vstem +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +-90 757 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/fraction { +0 167 hsbw +705 20 hstem +-167 77 vstem +257 77 vstem +-90 -26 rmoveto +424 751 rlineto +-77 0 rlineto +-424 -751 rlineto +77 0 rlineto +closepath +endchar } ND +/Euro { +0 556 hsbw +-12 123 hstem +251 76 hstem +391 76 hstem +604 124 hstem +48 149 vstem +525 698 rmoveto +-41 20 -48 10 -54 0 rrcurveto +-168 0 -121 -103 -35 -158 rrcurveto +-58 0 rlineto +-16 -76 rlineto +64 0 rlineto +0 -64 rlineto +-48 0 rlineto +-16 -76 rlineto +73 0 rlineto +30 -158 123 -105 164 0 rrcurveto +56 0 49 11 42 21 rrcurveto +0 149 rlineto +-37 -39 -50 -19 -62 0 rrcurveto +-85 0 -58 50 -21 90 rrcurveto +222 0 rlineto +16 76 rlineto +-249 0 rlineto +0 64 rlineto +262 0 rlineto +16 76 rlineto +-268 0 rlineto +17 83 65 54 86 0 rrcurveto +53 0 40 -14 28 -27 rrcurveto +29 135 rlineto +closepath +endchar } ND +/guilsinglleft { +0 333 hsbw +34 446 hstem +37 135 vstem +191 108 vstem +299 480 rmoveto +-108 0 rlineto +-154 -220 rlineto +154 -226 rlineto +108 0 rlineto +-127 226 rlineto +127 220 rlineto +closepath +endchar } ND +/guilsinglright { +0 333 hsbw +34 446 hstem +37 108 vstem +164 135 vstem +37 34 rmoveto +108 0 rlineto +154 221 rlineto +-154 225 rlineto +-108 0 rlineto +127 -225 rlineto +-127 -221 rlineto +closepath +endchar } ND +/fi { +0 611 hsbw +0 20 hstem +411 108 hstem +623 105 hstem +91 138 vstem +400 138 vstem +15 519 rmoveto +0 -108 rlineto +76 0 rlineto +0 -411 rlineto +138 0 rlineto +0 411 rlineto +102 0 rlineto +0 108 rlineto +-102 0 rlineto +0 36 rlineto +0 53 15 15 40 0 rrcurveto +20 0 21 -3 22 -5 rrcurveto +19 95 rlineto +-38 12 -38 6 -39 0 rrcurveto +-105 0 -55 -52 0 -118 rrcurveto +0 -39 rlineto +-76 0 rlineto +closepath +385 70 rmoveto +138 0 rlineto +0 127 rlineto +-138 0 rlineto +0 -127 rlineto +closepath +0 -589 rmoveto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/fl { +0 611 hsbw +0 20 hstem +411 108 hstem +623 105 hstem +91 138 vstem +400 138 vstem +15 519 rmoveto +0 -108 rlineto +76 0 rlineto +0 -411 rlineto +138 0 rlineto +0 411 rlineto +102 0 rlineto +0 108 rlineto +-102 0 rlineto +0 36 rlineto +0 53 15 15 40 0 rrcurveto +20 0 21 -3 22 -5 rrcurveto +19 95 rlineto +-38 12 -38 6 -39 0 rrcurveto +-105 0 -55 -52 0 -118 rrcurveto +0 -39 rlineto +-76 0 rlineto +closepath +385 -519 rmoveto +138 0 rlineto +0 716 rlineto +-138 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/daggerdbl { +0 556 hsbw +-8 113 hstem +426 114 hstem +213 128 vstem +213 -171 rmoveto +128 0 rlineto +0 163 rlineto +176 0 rlineto +0 113 rlineto +-176 0 rlineto +0 321 rlineto +176 0 rlineto +0 114 rlineto +-176 0 rlineto +0 167 rlineto +-128 0 rlineto +0 -167 rlineto +-180 0 rlineto +0 -114 rlineto +180 0 rlineto +0 -321 rlineto +-180 0 rlineto +0 -113 rlineto +180 0 rlineto +0 -163 rlineto +closepath +endchar } ND +/periodcentered { +0 278 hsbw +280 137 hstem +72 137 vstem +72 280 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/quotesinglbase { +0 278 hsbw +0 137 hstem +135 71 vstem +68 137 rmoveto +0 -137 rlineto +67 0 rlineto +-2 -56 -20 -28 -56 -19 rrcurveto +27 -57 rlineto +85 32 37 61 0 106 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +endchar } ND +/quotedblbase { +0 500 hsbw +0 137 hstem +129 71 vstem +359 71 vstem +293 137 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -54 -21 -30 -54 -19 rrcurveto +27 -57 rlineto +84 29 37 65 0 105 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +-230 0 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -54 -20 -30 -56 -19 rrcurveto +27 -57 rlineto +86 29 36 64 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +endchar } ND +/perthousand { +0 1000 hsbw +-29 76 hstem +271 76 hstem +353 76 hstem +652 76 hstem +0 96 vstem +186 97 vstem +390 95 vstem +576 96 vstem +717 95 vstem +903 97 vstem +0 546 rmoveto +0 -139 55 -54 86 0 rrcurveto +85 0 57 57 0 135 rrcurveto +0 124 -59 59 -82 0 rrcurveto +-83 0 -59 -61 0 -121 rrcurveto +closepath +96 -5 rmoveto +0 57 3 54 42 0 rrcurveto +38 0 7 -53 0 -58 rrcurveto +0 -59 -6 -53 -39 0 rrcurveto +-44 0 -1 53 0 59 rrcurveto +closepath +41 -566 rmoveto +96 0 rlineto +299 753 rlineto +-96 0 rlineto +-299 -753 rlineto +closepath +253 190 rmoveto +0 -139 54 -55 87 0 rrcurveto +84 0 57 58 0 136 rrcurveto +0 122 -58 60 -82 0 rrcurveto +-84 0 -58 -61 0 -121 rrcurveto +closepath +95 -6 rmoveto +0 57 8 55 37 0 rrcurveto +37 0 9 -54 0 -58 rrcurveto +0 -58 -8 -53 -38 0 rrcurveto +-39 0 -6 54 0 57 rrcurveto +closepath +232 6 rmoveto +0 -139 55 -55 86 0 rrcurveto +84 0 58 58 0 136 rrcurveto +0 122 -59 60 -82 0 rrcurveto +-84 0 -58 -61 0 -121 rrcurveto +closepath +96 -6 rmoveto +0 58 3 54 42 0 rrcurveto +37 0 8 -54 0 -58 rrcurveto +0 -59 -8 -53 -38 0 rrcurveto +-28 0 -17 30 0 50 rrcurveto +1 5 rlineto +0 27 rlineto +closepath +endchar } ND +/Acircumflex { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +830 71 hstem +0 153 vstem +188 111 vstem +409 110 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-264 474 rmoveto +111 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/Ecircumflex { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +830 71 hstem +73 144 vstem +165 330 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +92 757 rmoveto +110 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/Aacute { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +757 146 hstem +0 153 vstem +271 86 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-181 474 rmoveto +86 0 rlineto +135 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Edieresis { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +757 118 hstem +173 118 vstem +383 118 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +100 757 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Egrave { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +757 146 hstem +73 144 vstem +334 87 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +348 757 rmoveto +-67 146 rlineto +-154 0 rlineto +134 -146 rlineto +87 0 rlineto +closepath +endchar } ND +/Iacute { +0 278 hsbw +0 20 hstem +696 20 hstem +757 146 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-16 757 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Icircumflex { +0 278 hsbw +0 20 hstem +696 20 hstem +830 71 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-89 757 rmoveto +111 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/Idieresis { +0 278 hsbw +0 20 hstem +696 20 hstem +757 118 hstem +-22 118 vstem +188 118 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-90 757 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Igrave { +0 278 hsbw +0 20 hstem +696 20 hstem +757 146 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +148 757 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/Oacute { +0 778 hsbw +-12 123 hstem +604 124 hstem +757 146 hstem +43 149 vstem +302 87 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +110 399 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Ocircumflex { +0 778 hsbw +-12 123 hstem +604 124 hstem +830 71 hstem +43 149 vstem +220 111 vstem +440 110 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +28 399 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/Ograve { +0 778 hsbw +-12 123 hstem +604 124 hstem +757 146 hstem +43 149 vstem +380 86 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +274 399 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/Uacute { +0 722 hsbw +-12 123 hstem +696 20 hstem +757 146 hstem +72 144 vstem +269 86 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +197 41 rmoveto +86 0 rlineto +135 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Ucircumflex { +0 722 hsbw +-12 123 hstem +696 20 hstem +830 71 hstem +72 144 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +124 41 rmoveto +111 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/Ugrave { +0 722 hsbw +-12 123 hstem +696 20 hstem +757 146 hstem +72 144 vstem +347 86 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +361 41 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/dotlessi { +0 278 hsbw +0 20 hstem +499 20 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/circumflex { +0 333 hsbw +657 71 hstem +1 111 vstem +222 110 vstem +1 584 rmoveto +111 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/tilde { +0 333 hsbw +590 123 hstem +-6 63 vstem +268 64 vstem +57 588 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 19 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-54 0 -35 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/macron { +0 333 hsbw +604 90 hstem +9 315 vstem +9 604 rmoveto +315 0 rlineto +0 90 rlineto +-315 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/breve { +0 333 hsbw +586 142 hstem +13 67 vstem +250 67 vstem +250 728 rmoveto +-4 -47 -28 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 7 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/dotaccent { +0 333 hsbw +598 130 hstem +100 135 vstem +100 598 rmoveto +135 0 rlineto +0 130 rlineto +-135 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/ring { +0 333 hsbw +560 52 hstem +699 52 hstem +71 52 vstem +210 52 vstem +262 655 rmoveto +0 53 -43 43 -52 0 rrcurveto +-54 0 -42 -43 0 -53 rrcurveto +0 -52 42 -43 54 0 rrcurveto +52 0 43 43 0 52 rrcurveto +closepath +-52 0 rmoveto +0 -24 -19 -19 -24 0 rrcurveto +-26 0 -18 19 0 24 rrcurveto +0 24 18 20 26 0 rrcurveto +24 0 19 -20 0 -24 rrcurveto +closepath +endchar } ND +/cedilla { +0 333 hsbw +-205 60 hstem +-58 52 hstem +191 94 vstem +19 -197 rmoveto +21 -5 32 -3 42 0 rrcurveto +90 0 81 30 0 77 rrcurveto +0 51 -44 41 -81 0 rrcurveto +-30 0 -27 -4 -25 -9 rrcurveto +-13 -48 rlineto +22 6 21 3 21 0 rrcurveto +42 0 20 -18 0 -23 rrcurveto +0 -35 -37 -11 -43 0 rrcurveto +-28 0 -31 2 -33 4 rrcurveto +0 -58 rlineto +closepath +endchar } ND +/hungarumlaut { +0 333 hsbw +584 146 hstem +47 86 vstem +230 88 vstem +47 584 rmoveto +86 0 rlineto +125 146 rlineto +-143 0 rlineto +-68 -146 rlineto +closepath +183 0 rmoveto +88 0 rlineto +121 146 rlineto +-140 0 rlineto +-69 -146 rlineto +closepath +endchar } ND +/ogonek { +0 333 hsbw +-210 75 hstem +78 81 vstem +96 13 rmoveto +-12 -46 -6 -36 0 -27 rrcurveto +0 -70 45 -44 78 0 rrcurveto +30 0 31 7 33 14 rrcurveto +0 65 rlineto +-24 -7 -22 -4 -20 0 rrcurveto +-46 0 -24 25 0 52 rrcurveto +0 29 3 24 7 18 rrcurveto +-73 0 rlineto +closepath +endchar } ND +/caron { +0 333 hsbw +584 144 hstem +1 111 vstem +222 110 vstem +1 728 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/Lslash { +0 611 hsbw +0 124 188 106 361 118 hstem3 +496 118 hstem +696 20 hstem +81 144 vstem +81 357 rmoveto +-76 -63 rlineto +0 -116 rlineto +76 63 rlineto +0 -241 rlineto +503 0 rlineto +0 121 rlineto +-359 0 rlineto +0 240 rlineto +160 135 rlineto +0 118 rlineto +-160 -135 rlineto +0 237 rlineto +-144 0 rlineto +0 -359 rlineto +closepath +endchar } ND +/lslash { +0 278 hsbw +0 468 hstem +505 20 hstem +696 20 hstem +72 137 vstem +72 352 rmoveto +-67 -57 rlineto +0 -93 rlineto +67 57 rlineto +0 -259 rlineto +137 0 rlineto +0 375 rlineto +67 57 rlineto +0 93 rlineto +-67 -57 rlineto +0 248 rlineto +-137 0 rlineto +0 -364 rlineto +closepath +endchar } ND +/Scaron { +0 667 hsbw +-13 122 hstem +608 120 hstem +760 144 hstem +62 138 vstem +474 144 vstem +36 233 rmoveto +18 -160 96 -86 182 0 rrcurveto +159 0 127 84 0 137 rrcurveto +0 147 -96 55 -168 37 rrcurveto +-96 21 -58 6 0 64 rrcurveto +0 53 60 17 62 0 rrcurveto +81 0 38 -30 12 -73 rrcurveto +145 6 rlineto +-6 132 -89 85 -180 0 rrcurveto +-141 0 -120 -77 0 -123 rrcurveto +0 -120 82 -59 147 -36 rrcurveto +114 -28 69 -7 0 -70 rrcurveto +0 -54 -48 -45 -93 0 rrcurveto +-88 0 -52 43 -16 95 rrcurveto +-141 -14 rlineto +closepath +127 671 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/scaron { +0 556 hsbw +-12 99 hstem +432 98 hstem +584 144 hstem +42 128 vstem +370 138 vstem +23 148 rmoveto +25 -99 82 -61 142 0 rrcurveto +156 0 80 79 0 95 rrcurveto +0 107 -94 28 -102 28 rrcurveto +-76 17 -66 -7 0 54 rrcurveto +0 36 43 7 50 0 rrcurveto +57 0 30 -23 11 -40 rrcurveto +129 24 rlineto +-26 90 -62 47 -141 0 rrcurveto +-150 0 -69 -70 0 -89 rrcurveto +0 -130 92 -14 180 -39 rrcurveto +37 -8 19 -8 0 -28 rrcurveto +0 -47 -45 -10 -53 0 rrcurveto +-64 0 -35 28 -12 54 rrcurveto +-138 -21 rlineto +closepath +77 580 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/Zcaron { +0 611 hsbw +0 121 hstem +595 121 hstem +760 144 hstem +11 174 vstem +132 331 vstem +11 0 rmoveto +581 0 rlineto +0 121 rlineto +-407 0 rlineto +392 483 rlineto +0 112 rlineto +-524 0 rlineto +0 -121 rlineto +334 0 rlineto +-376 -465 rlineto +0 -130 rlineto +closepath +121 904 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/zcaron { +0 500 hsbw +0 121 hstem +408 111 hstem +584 144 hstem +196 283 vstem +17 0 rmoveto +462 0 rlineto +0 121 rlineto +-237 0 rlineto +-9 -2 -18 -1 -19 -1 rrcurveto +70 76 rlineto +198 228 rlineto +0 98 rlineto +-428 0 rlineto +0 -114 rlineto +183 0 rlineto +26 0 21 1 16 2 rrcurveto +-8 -8 -10 -10 -11 -13 rrcurveto +-11 -14 -14 -16 -17 -17 rrcurveto +-194 -223 rlineto +0 -107 rlineto +closepath +66 728 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/brokenbar { +0 280 hsbw +-210 386 hstem +342 386 hstem +86 109 vstem +86 342 rmoveto +109 0 rlineto +0 386 rlineto +-109 0 rlineto +0 -386 rlineto +closepath +0 -552 rmoveto +109 0 rlineto +0 386 rlineto +-109 0 rlineto +0 -386 rlineto +closepath +endchar } ND +/Eth { +0 722 hsbw +0 121 313 90 595 121 hstem3 +73 144 vstem +523 150 vstem +73 716 rmoveto +0 -313 rlineto +-74 0 rlineto +0 -90 rlineto +74 0 rlineto +0 -313 rlineto +271 0 rlineto +227 0 102 136 0 213 rrcurveto +0 224 -89 143 -248 0 rrcurveto +-263 0 rlineto +closepath +144 -121 rmoveto +65 0 rlineto +201 0 40 -65 0 -176 rrcurveto +0 -160 -32 -73 -166 0 rrcurveto +-108 0 rlineto +0 192 rlineto +153 0 rlineto +0 90 rlineto +-153 0 rlineto +0 192 rlineto +closepath +endchar } ND +/eth { +0 611 hsbw +-12 112 hstem +411 108 hstem +591 125 hstem +41 143 vstem +431 143 vstem +162 716 rmoveto +38 -28 36 -28 33 -30 rrcurveto +-107 -50 rlineto +21 -47 rlineto +122 58 rlineto +36 -46 9 -15 26 -45 rrcurveto +-45 23 -27 11 -36 0 rrcurveto +-127 0 -100 -120 0 -139 rrcurveto +0 -160 109 -112 154 0 rrcurveto +158 0 112 111 0 168 rrcurveto +0 112 -51 130 -125 126 rrcurveto +71 33 rlineto +-22 48 rlineto +-89 -44 rlineto +-17 14 -18 15 -18 15 rrcurveto +-143 0 rlineto +closepath +22 -457 rmoveto +0 96 53 56 68 0 rrcurveto +68 0 58 -60 0 -97 rrcurveto +0 -96 -56 -58 -69 0 rrcurveto +-70 0 -52 55 0 104 rrcurveto +closepath +endchar } ND +/Yacute { +0 667 hsbw +0 433 hstem +696 20 hstem +757 146 hstem +-1 171 264 141 501 167 vstem3 +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +-19 757 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/yacute { +0 556 hsbw +-210 109 hstem +499 20 hstem +582 146 hstem +7 146 vstem +204 87 vstem +398 142 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +197 63 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Thorn { +0 667 hsbw +0 20 hstem +135 121 hstem +460 256 hstem +73 144 vstem +472 149 vstem +73 0 rmoveto +144 0 rlineto +0 135 rlineto +95 0 rlineto +190 0 119 56 0 169 rrcurveto +0 185 -88 36 -228 0 rrcurveto +-88 0 rlineto +0 135 rlineto +-144 0 rlineto +0 -716 rlineto +closepath +144 460 rmoveto +70 0 rlineto +128 0 57 -12 0 -88 rrcurveto +0 -98 -53 -6 -123 0 rrcurveto +-79 0 rlineto +0 204 rlineto +closepath +endchar } ND +/thorn { +0 611 hsbw +-197 20 hstem +-12 109 hstem +425 105 hstem +696 20 hstem +68 136 vstem +434 140 vstem +68 716 rmoveto +0 -913 rlineto +137 0 rlineto +0 261 rlineto +52 -56 41 -20 58 0 rrcurveto +121 0 97 100 0 174 rrcurveto +0 169 -96 99 -121 0 rrcurveto +-59 0 -39 -18 -54 -54 rrcurveto +0 258 rlineto +-137 0 rlineto +closepath +136 -445 rmoveto +0 104 49 50 66 0 rrcurveto +66 0 49 -49 0 -118 rrcurveto +0 -112 -49 -49 -61 0 rrcurveto +-83 0 -37 71 0 103 rrcurveto +closepath +endchar } ND +/minus { +0 584 hsbw +289 128 hstem +42 500 vstem +42 289 rmoveto +500 0 rlineto +0 128 rlineto +-500 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/multiply { +0 584 hsbw +54 205 rmoveto +89 -89 rlineto +147 148 rlineto +149 -149 rlineto +91 91 rlineto +-149 148 rlineto +147 148 rlineto +-88 89 rlineto +-148 -148 rlineto +-148 148 rlineto +-91 -91 rlineto +149 -147 rlineto +-148 -148 rlineto +closepath +endchar } ND +/onesuperior { +0 333 hsbw +355 370 hstem +149 93 vstem +242 355 rmoveto +0 370 rlineto +-75 0 rlineto +-20 -50 -51 -29 -52 -13 rrcurveto +0 -75 rlineto +39 10 35 16 31 21 rrcurveto +0 -250 rlineto +93 0 rlineto +closepath +endchar } ND +/twosuperior { +0 333 hsbw +355 77 hstem +655 70 hstem +216 93 vstem +309 432 rmoveto +-154 0 rlineto +8 8 13 11 20 15 rrcurveto +82 61 31 31 0 62 rrcurveto +0 56 -50 49 -90 0 rrcurveto +-86 0 -52 -33 -9 -86 rrcurveto +92 -7 rlineto +4 42 15 14 34 0 rrcurveto +32 0 17 -16 0 -24 rrcurveto +0 -41 -29 -13 -53 -41 rrcurveto +-100 -77 -14 -34 -8 -54 rrcurveto +297 0 rlineto +0 77 rlineto +closepath +endchar } ND +/threesuperior { +0 333 hsbw +349 70 hstem +655 70 hstem +201 93 vstem +20 462 rmoveto +8 -68 53 -45 83 0 rrcurveto +89 0 60 56 0 62 rrcurveto +0 41 -24 31 -42 16 rrcurveto +24 14 23 25 0 31 rrcurveto +0 52 -51 48 -80 0 rrcurveto +-76 0 -43 -27 -19 -78 rrcurveto +87 -13 rlineto +5 34 16 14 27 0 rrcurveto +26 0 15 -14 0 -18 rrcurveto +0 -17 -10 -10 -17 -7 rrcurveto +-10 -4 -13 -2 -17 1 rrcurveto +-11 -71 rlineto +11 1 10 3 5 3 rrcurveto +18 0 rlineto +30 0 21 -20 0 -28 rrcurveto +0 -32 -23 -21 -30 0 rrcurveto +-31 0 -20 17 -5 36 rrcurveto +-89 -10 rlineto +closepath +endchar } ND +/onehalf { +0 834 hsbw +-21 77 hstem +279 70 hstem +355 370 hstem +149 93 vstem +590 78 vstem +716 93 vstem +242 355 rmoveto +0 370 rlineto +-75 0 rlineto +-20 -50 -52 -29 -50 -13 rrcurveto +0 -75 rlineto +39 10 35 16 30 21 rrcurveto +0 -250 rlineto +93 0 rlineto +closepath +2 -381 rmoveto +424 751 rlineto +-78 0 rlineto +-424 -751 rlineto +78 0 rlineto +closepath +565 82 rmoveto +-153 0 rlineto +8 8 13 11 19 15 rrcurveto +80 64 33 29 0 61 rrcurveto +0 57 -50 48 -90 0 rrcurveto +-86 0 -52 -32 -9 -86 rrcurveto +93 -8 rlineto +2 42 16 14 34 0 rrcurveto +32 0 17 -15 0 -24 rrcurveto +0 -40 -30 -14 -52 -41 rrcurveto +-100 -78 -14 -32 -8 -56 rrcurveto +297 0 rlineto +0 77 rlineto +closepath +endchar } ND +/onequarter { +0 834 hsbw +51 71 hstem +355 370 hstem +149 93 vstem +590 78 vstem +685 87 vstem +242 355 rmoveto +0 370 rlineto +-75 0 rlineto +-20 -50 -52 -29 -50 -13 rrcurveto +0 -75 rlineto +39 10 35 16 30 21 rrcurveto +0 -250 rlineto +93 0 rlineto +closepath +2 -381 rmoveto +424 751 rlineto +-78 0 rlineto +-424 -751 rlineto +78 0 rlineto +closepath +441 5 rmoveto +87 0 rlineto +0 72 rlineto +52 0 rlineto +0 71 rlineto +-52 0 rlineto +0 227 rlineto +-76 0 rlineto +-187 -229 rlineto +0 -69 rlineto +176 0 rlineto +0 -72 rlineto +closepath +0 143 rmoveto +-89 0 rlineto +89 109 rlineto +0 -109 rlineto +closepath +endchar } ND +/threequarters { +0 834 hsbw +51 71 hstem +349 70 hstem +655 70 hstem +201 93 vstem +602 77 vstem +685 86 vstem +20 462 rmoveto +8 -68 53 -45 83 0 rrcurveto +89 0 60 56 0 62 rrcurveto +0 41 -24 31 -42 16 rrcurveto +24 14 23 25 0 31 rrcurveto +0 52 -51 48 -80 0 rrcurveto +-76 0 -43 -27 -19 -78 rrcurveto +87 -13 rlineto +5 34 16 14 27 0 rrcurveto +26 0 15 -14 0 -18 rrcurveto +0 -17 -10 -10 -17 -7 rrcurveto +-10 -4 -13 -2 -17 1 rrcurveto +-11 -71 rlineto +11 1 10 3 5 3 rrcurveto +18 0 rlineto +30 0 21 -20 0 -28 rrcurveto +0 -32 -23 -21 -30 0 rrcurveto +-31 0 -20 17 -5 36 rrcurveto +-89 -10 rlineto +closepath +235 -488 rmoveto +424 751 rlineto +-77 0 rlineto +-424 -751 rlineto +77 0 rlineto +closepath +430 5 rmoveto +86 0 rlineto +0 72 rlineto +53 0 rlineto +0 71 rlineto +-53 0 rlineto +0 227 rlineto +-76 0 rlineto +-186 -229 rlineto +0 -69 rlineto +176 0 rlineto +0 -72 rlineto +closepath +0 143 rmoveto +-89 0 rlineto +89 109 rlineto +0 -109 rlineto +closepath +endchar } ND +/franc { +0 556 hsbw +0 198 hstem +304 121 hstem +595 121 hstem +74 144 vstem +74 88 rmoveto +0 -88 rlineto +144 0 rlineto +0 88 rlineto +123 0 rlineto +0 110 rlineto +-123 0 rlineto +0 106 rlineto +241 0 rlineto +0 121 rlineto +-241 0 rlineto +0 170 rlineto +288 0 rlineto +0 121 rlineto +-432 0 rlineto +0 -518 rlineto +-74 0 rlineto +0 -110 rlineto +74 0 rlineto +closepath +endchar } ND +/Gbreve { +0 778 hsbw +-12 123 hstem +263 121 hstem +604 124 hstem +754 142 hstem +48 149 vstem +260 67 vstem +498 66 vstem +571 146 vstem +406 263 rmoveto +165 0 rlineto +0 -91 rlineto +-43 -34 -66 -27 -60 0 rrcurveto +-123 0 -82 85 0 170 rrcurveto +0 157 80 81 126 0 rrcurveto +84 0 57 -44 20 -69 rrcurveto +144 27 rlineto +-28 130 -99 80 -178 0 rrcurveto +-222 0 -133 -153 0 -215 rrcurveto +0 -205 148 -167 215 0 rrcurveto +118 0 128 52 60 59 rrcurveto +0 285 rlineto +-311 0 rlineto +0 -121 rlineto +closepath +92 633 rmoveto +-6 -46 -27 -24 -53 0 rrcurveto +-54 0 -27 24 -4 46 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 7 88 rrcurveto +-66 0 rlineto +closepath +endchar } ND +/gbreve { +0 611 hsbw +-210 105 hstem +0 111 hstem +425 105 hstem +586 142 hstem +41 141 vstem +418 129 vstem +59 -34 rmoveto +0 -17 rlineto +0 -92 66 -67 176 0 rrcurveto +166 0 80 78 0 185 rrcurveto +0 466 rlineto +-129 0 rlineto +0 -73 rlineto +-42 56 -52 28 -64 0 rrcurveto +-124 0 -95 -94 0 -174 rrcurveto +0 -145 78 -117 135 0 rrcurveto +62 0 52 28 42 56 rrcurveto +0 -76 rlineto +0 -90 -32 -23 -83 0 rrcurveto +-47 0 -27 9 -5 43 rrcurveto +-157 19 rlineto +closepath +123 304 rmoveto +0 105 47 50 66 0 rrcurveto +68 0 49 -52 0 -106 rrcurveto +0 -104 -52 -52 -68 0 rrcurveto +-62 0 -48 49 0 110 rrcurveto +closepath +196 458 rmoveto +-4 -47 -28 -23 -54 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 58 -54 86 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/Idot { +0 278 hsbw +0 20 hstem +696 20 hstem +757 130 hstem +74 134 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +6 757 rmoveto +134 0 rlineto +0 130 rlineto +-134 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/Scedilla { +0 667 hsbw +-205 60 hstem +-13 7 hstem +608 120 hstem +62 138 vstem +374 93 vstem +474 144 vstem +36 233 rmoveto +18 -160 96 -86 182 0 rrcurveto +159 0 127 84 0 137 rrcurveto +0 147 -96 55 -168 37 rrcurveto +-96 21 -58 6 0 64 rrcurveto +0 53 60 17 62 0 rrcurveto +81 0 38 -30 12 -73 rrcurveto +145 6 rlineto +-6 132 -89 85 -180 0 rrcurveto +-141 0 -120 -77 0 -123 rrcurveto +0 -120 82 -59 147 -36 rrcurveto +114 -28 69 -7 0 -70 rrcurveto +0 -54 -48 -45 -93 0 rrcurveto +-88 0 -52 43 -16 95 rrcurveto +-141 -14 rlineto +closepath +165 -430 rmoveto +21 -5 32 -3 42 0 rrcurveto +90 0 81 30 0 77 rrcurveto +0 51 -44 41 -81 0 rrcurveto +-30 0 -27 -4 -25 -9 rrcurveto +-12 -48 rlineto +21 6 21 3 22 0 rrcurveto +41 0 21 -18 0 -23 rrcurveto +0 -34 -38 -12 -43 0 rrcurveto +-28 0 -31 2 -33 4 rrcurveto +0 -58 rlineto +closepath +endchar } ND +/scedilla { +0 556 hsbw +-205 60 hstem +-12 6 hstem +432 98 hstem +42 128 vstem +327 93 vstem +23 148 rmoveto +25 -99 82 -61 142 0 rrcurveto +156 0 80 79 0 95 rrcurveto +0 107 -94 28 -102 28 rrcurveto +-76 17 -66 -7 0 54 rrcurveto +0 36 43 7 50 0 rrcurveto +57 0 30 -23 11 -40 rrcurveto +129 24 rlineto +-26 90 -62 47 -141 0 rrcurveto +-150 0 -69 -70 0 -89 rrcurveto +0 -130 92 -14 180 -39 rrcurveto +37 -8 19 -8 0 -28 rrcurveto +0 -47 -45 -10 -53 0 rrcurveto +-64 0 -35 28 -12 54 rrcurveto +-138 -21 rlineto +closepath +131 -345 rmoveto +22 -5 32 -3 42 0 rrcurveto +90 0 80 31 0 76 rrcurveto +0 51 -43 41 -81 0 rrcurveto +-30 0 -27 -4 -25 -9 rrcurveto +-13 -48 rlineto +22 6 21 3 21 0 rrcurveto +42 0 20 -18 0 -23 rrcurveto +0 -35 -37 -11 -43 0 rrcurveto +-28 0 -31 2 -34 4 rrcurveto +0 -58 rlineto +closepath +endchar } ND +/Cacute { +0 722 hsbw +-12 123 hstem +604 124 hstem +757 146 hstem +47 149 vstem +282 87 vstem +531 263 rmoveto +-24 -104 -58 -48 -77 0 rrcurveto +-104 0 -72 71 0 180 rrcurveto +0 170 72 72 107 0 rrcurveto +77 0 56 -46 18 -74 rrcurveto +143 35 rlineto +-41 141 -101 68 -145 0 rrcurveto +-200 0 -135 -139 0 -237 rrcurveto +0 -226 136 -138 191 0 rrcurveto +153 0 101 75 43 156 rrcurveto +-140 44 rlineto +closepath +-249 494 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/cacute { +0 556 hsbw +-12 112 hstem +422 108 hstem +582 146 hstem +42 141 vstem +211 87 vstem +524 365 rmoveto +-32 112 -73 53 -126 0 rrcurveto +-155 0 -96 -101 0 -170 rrcurveto +0 -170 97 -101 152 0 rrcurveto +133 0 79 64 28 124 rrcurveto +-135 23 rlineto +-14 -72 -33 -27 -52 0 rrcurveto +-70 0 -44 45 0 124 rrcurveto +0 110 44 43 68 0 rrcurveto +50 0 34 -28 10 -53 rrcurveto +135 24 rlineto +closepath +-313 217 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Ccaron { +0 722 hsbw +-12 123 hstem +604 124 hstem +760 144 hstem +47 149 vstem +203 111 vstem +423 111 vstem +531 263 rmoveto +-24 -104 -58 -48 -77 0 rrcurveto +-104 0 -72 71 0 180 rrcurveto +0 170 72 72 107 0 rrcurveto +77 0 56 -46 18 -74 rrcurveto +143 35 rlineto +-41 141 -101 68 -145 0 rrcurveto +-200 0 -135 -139 0 -237 rrcurveto +0 -226 136 -138 191 0 rrcurveto +153 0 101 75 43 156 rrcurveto +-140 44 rlineto +closepath +-328 641 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/ccaron { +0 556 hsbw +-12 112 hstem +422 108 hstem +584 144 hstem +42 141 vstem +134 330 vstem +524 365 rmoveto +-32 112 -73 53 -126 0 rrcurveto +-155 0 -96 -101 0 -170 rrcurveto +0 -170 97 -101 152 0 rrcurveto +133 0 79 64 28 124 rrcurveto +-135 23 rlineto +-14 -72 -33 -27 -52 0 rrcurveto +-70 0 -44 45 0 124 rrcurveto +0 110 44 43 68 0 rrcurveto +50 0 34 -28 10 -53 rrcurveto +135 24 rlineto +closepath +-390 363 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-52 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/dmacron { +0 611 hsbw +-12 109 hstem +425 105 hstem +574 142 hstem +41 140 vstem +420 127 vstem +410 574 rmoveto +0 -116 rlineto +-42 48 -50 24 -58 0 rrcurveto +-127 0 -92 -93 0 -176 rrcurveto +0 -172 97 -101 120 0 rrcurveto +58 0 61 29 43 59 rrcurveto +0 -76 rlineto +127 0 rlineto +0 574 rlineto +55 0 rlineto +0 91 rlineto +-55 0 rlineto +0 51 rlineto +-137 0 rlineto +0 -51 rlineto +-148 0 rlineto +0 -91 rlineto +148 0 rlineto +closepath +-229 -303 rmoveto +0 102 49 52 66 0 rrcurveto +66 0 49 -48 0 -120 rrcurveto +0 -107 -52 -53 -62 0 rrcurveto +-84 0 -32 69 0 105 rrcurveto +closepath +endchar } ND +/overscore { +0 552 hsbw +758 89 hstem +-9 570 vstem +-9 758 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +endchar } ND +/middot { +0 333 hsbw +280 137 hstem +239 137 vstem +239 280 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Abreve { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +754 142 hstem +0 153 vstem +207 67 287 145 445 67 vstem3 +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-7 613 rmoveto +-6 -46 -27 -24 -53 0 rrcurveto +-54 0 -27 24 -4 46 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/abreve { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +586 142 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +5 479 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/Aogonek { +0 722 hsbw +-210 75 hstem +0 13 hstem +163 120 hstem +549 167 hstem +0 153 vstem +279 153 vstem +547 81 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +112 -270 rmoveto +-12 -46 -5 -36 0 -27 rrcurveto +0 -70 44 -44 78 0 rrcurveto +30 0 32 7 33 14 rrcurveto +0 65 rlineto +-24 -7 -22 -4 -20 0 rrcurveto +-46 0 -24 25 0 52 rrcurveto +0 29 3 24 7 18 rrcurveto +-74 0 rlineto +closepath +endchar } ND +/aogonek { +0 556 hsbw +-210 75 hstem +-12 97 hstem +249 89 hstem +425 105 hstem +36 137 vstem +374 81 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +33 -236 rmoveto +-12 -46 -5 -36 0 -27 rrcurveto +0 -70 44 -44 78 0 rrcurveto +30 0 32 7 33 14 rrcurveto +0 65 rlineto +-24 -7 -23 -4 -20 0 rrcurveto +-44 0 -25 25 0 52 rrcurveto +0 29 3 24 6 18 rrcurveto +-73 0 rlineto +closepath +endchar } ND +/Dcaron { +0 722 hsbw +0 121 hstem +595 121 hstem +760 144 hstem +72 145 vstem +134 330 vstem +523 149 vstem +72 716 rmoveto +0 -716 rlineto +272 0 rlineto +225 0 103 141 0 210 rrcurveto +0 223 -87 142 -249 0 rrcurveto +-264 0 rlineto +closepath +145 -121 rmoveto +65 0 rlineto +197 0 44 -65 0 -173 rrcurveto +0 -155 -31 -81 -167 0 rrcurveto +-108 0 rlineto +0 474 rlineto +closepath +-83 309 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-52 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/dcaron { +0 719 hsbw +-12 109 hstem +425 105 hstem +592 124 hstem +40 140 vstem +418 128 vstem +655 64 vstem +595 716 rmoveto +0 -124 rlineto +60 0 rlineto +-2 -48 -19 -28 -49 -16 rrcurveto +24 -52 rlineto +74 24 36 61 0 94 rrcurveto +0 89 rlineto +-124 0 rlineto +closepath +-49 -716 rmoveto +0 716 rlineto +-137 0 rlineto +0 -258 rlineto +-43 48 -50 24 -58 0 rrcurveto +-126 0 -92 -93 0 -176 rrcurveto +0 -172 97 -101 119 0 rrcurveto +58 0 62 29 42 59 rrcurveto +0 -76 rlineto +128 0 rlineto +closepath +-366 271 rmoveto +0 102 50 52 64 0 rrcurveto +68 0 47 -48 0 -120 rrcurveto +0 -107 -50 -53 -64 0 rrcurveto +-85 0 -30 69 0 105 rrcurveto +closepath +endchar } ND +/Dslash { +0 722 hsbw +0 121 313 90 595 121 hstem3 +73 144 vstem +523 150 vstem +73 716 rmoveto +0 -313 rlineto +-74 0 rlineto +0 -90 rlineto +74 0 rlineto +0 -313 rlineto +271 0 rlineto +227 0 102 136 0 213 rrcurveto +0 224 -89 143 -248 0 rrcurveto +-263 0 rlineto +closepath +144 -121 rmoveto +65 0 rlineto +201 0 40 -65 0 -176 rrcurveto +0 -160 -32 -73 -166 0 rrcurveto +-108 0 rlineto +0 192 rlineto +153 0 rlineto +0 90 rlineto +-153 0 rlineto +0 192 rlineto +closepath +endchar } ND +/Eogonek { +0 667 hsbw +-210 75 hstem +0 13 hstem +315 121 hstem +595 121 hstem +73 144 vstem +400 81 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +344 13 rmoveto +-12 -46 -5 -36 0 -27 rrcurveto +0 -70 44 -44 78 0 rrcurveto +30 0 32 7 33 14 rrcurveto +0 65 rlineto +-24 -7 -22 -4 -20 0 rrcurveto +-46 0 -24 25 0 52 rrcurveto +0 29 3 24 7 18 rrcurveto +-74 0 rlineto +closepath +endchar } ND +/eogonek { +0 556 hsbw +-210 75 hstem +-12 25 hstem +220 84 hstem +425 105 hstem +32 140 vstem +227 81 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-135 -291 rmoveto +-12 -46 -6 -36 0 -27 rrcurveto +0 -70 45 -44 78 0 rrcurveto +30 0 31 7 33 14 rrcurveto +0 65 rlineto +-24 -7 -22 -4 -20 0 rrcurveto +-46 0 -24 25 0 52 rrcurveto +0 29 3 24 7 18 rrcurveto +-73 0 rlineto +closepath +endchar } ND +/Ecaron { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +760 144 hstem +73 144 vstem +165 331 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +92 904 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/ecaron { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +584 144 hstem +32 140 vstem +108 331 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-272 424 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/Lacute { +0 611 hsbw +0 121 hstem +757 146 hstem +77 144 vstem +277 154 vstem +77 0 rmoveto +504 0 rlineto +0 121 rlineto +-360 0 rlineto +0 589 rlineto +-144 0 rlineto +0 -710 rlineto +closepath +133 757 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/lacute { +0 278 hsbw +0 20 hstem +696 20 hstem +752 146 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 716 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +-13 752 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Lcaron { +0 611 hsbw +0 121 hstem +573 137 hstem +77 144 vstem +476 71 vstem +77 0 rmoveto +504 0 rlineto +0 121 rlineto +-360 0 rlineto +0 589 rlineto +-144 0 rlineto +0 -710 rlineto +closepath +333 710 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -56 -22 -30 -54 -17 rrcurveto +27 -57 rlineto +86 29 36 63 0 106 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +endchar } ND +/lcaron { +0 385 hsbw +0 20 hstem +592 124 hstem +73 137 vstem +319 64 vstem +259 716 rmoveto +0 -124 rlineto +60 0 rlineto +0 -48 -21 -28 -49 -16 rrcurveto +24 -52 rlineto +76 24 34 61 0 94 rrcurveto +0 89 rlineto +-124 0 rlineto +closepath +-186 -716 rmoveto +137 0 rlineto +0 716 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Ldot { +0 611 hsbw +0 121 hstem +280 137 hstem +77 144 vstem +378 138 vstem +77 0 rmoveto +504 0 rlineto +0 121 rlineto +-360 0 rlineto +0 589 rlineto +-144 0 rlineto +0 -710 rlineto +closepath +301 280 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/ldot { +0 479 hsbw +0 20 hstem +280 137 hstem +696 20 hstem +72 137 vstem +272 137 vstem +72 0 rmoveto +137 0 rlineto +0 716 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +200 280 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Nacute { +0 722 hsbw +0 238 hstem +467 249 hstem +757 146 hstem +74 134 vstem +271 87 vstem +508 134 vstem +74 0 rmoveto +134 0 rlineto +0 467 rlineto +289 -467 rlineto +145 0 rlineto +0 716 rlineto +-134 0 rlineto +0 -478 rlineto +-293 478 rlineto +-141 0 rlineto +0 -716 rlineto +closepath +197 757 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/nacute { +0 611 hsbw +0 442 hstem +510 20 hstem +582 146 hstem +71 127 vstem +232 87 vstem +406 137 vstem +543 0 rmoveto +0 322 rlineto +0 134 -63 74 -111 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +0 235 rlineto +0 122 25 68 88 0 rrcurveto +73 0 12 -53 0 -107 rrcurveto +0 -265 rlineto +137 0 rlineto +closepath +-311 582 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Ncaron { +0 722 hsbw +0 238 hstem +467 249 hstem +760 144 hstem +74 134 vstem +508 134 vstem +74 0 rmoveto +134 0 rlineto +0 467 rlineto +289 -467 rlineto +145 0 rlineto +0 716 rlineto +-134 0 rlineto +0 -478 rlineto +-293 478 rlineto +-141 0 rlineto +0 -716 rlineto +closepath +111 904 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-110 0 rlineto +closepath +endchar } ND +/ncaron { +0 611 hsbw +0 442 hstem +510 20 hstem +584 144 hstem +71 127 vstem +406 137 vstem +543 0 rmoveto +0 322 rlineto +0 134 -63 74 -111 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +0 235 rlineto +0 122 25 68 88 0 rrcurveto +73 0 12 -53 0 -107 rrcurveto +0 -265 rlineto +137 0 rlineto +closepath +-401 728 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-110 0 rlineto +closepath +endchar } ND +/Odblacute { +0 778 hsbw +-12 123 hstem +604 124 hstem +757 145 hstem +43 149 vstem +234 86 vstem +418 88 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +42 399 rmoveto +86 0 rlineto +126 145 rlineto +-144 0 rlineto +-68 -145 rlineto +closepath +184 0 rmoveto +88 0 rlineto +120 145 rlineto +-139 0 rlineto +-69 -145 rlineto +closepath +endchar } ND +/odblacute { +0 611 hsbw +-12 112 hstem +418 112 hstem +584 146 hstem +40 141 vstem +323 88 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-42 325 rmoveto +86 0 rlineto +126 146 rlineto +-144 0 rlineto +-68 -146 rlineto +closepath +184 0 rmoveto +88 0 rlineto +120 146 rlineto +-139 0 rlineto +-69 -146 rlineto +closepath +endchar } ND +/Racute { +0 722 hsbw +0 413 hstem +595 121 hstem +757 146 hstem +73 145 vstem +229 87 vstem +510 149 vstem +73 0 rmoveto +145 0 rlineto +0 299 rlineto +29 0 rlineto +114 0 6 -34 72 -109 rrcurveto +105 -156 rlineto +173 0 rlineto +-88 140 rlineto +-68 110 -29 30 -62 36 rrcurveto +125 18 64 74 0 107 rrcurveto +0 139 -103 62 -179 0 rrcurveto +-304 0 rlineto +0 -716 rlineto +closepath +145 413 rmoveto +0 182 rlineto +113 0 rlineto +126 0 53 -1 0 -88 rrcurveto +0 -92 -58 -1 -127 0 rrcurveto +-107 0 rlineto +closepath +11 344 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/racute { +0 389 hsbw +0 445 hstem +510 20 hstem +582 146 hstem +66 127 vstem +202 154 vstem +203 0 rmoveto +0 160 rlineto +0 148 -19 99 111 0 rrcurveto +20 0 21 -8 23 -14 rrcurveto +43 119 rlineto +-30 17 -30 9 -30 0 rrcurveto +-46 0 -29 -16 -44 -69 rrcurveto +0 74 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +closepath +-68 582 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Rcaron { +0 722 hsbw +0 413 hstem +595 121 hstem +760 144 hstem +73 145 vstem +146 330 vstem +510 149 vstem +73 0 rmoveto +145 0 rlineto +0 299 rlineto +29 0 rlineto +114 0 6 -34 72 -109 rrcurveto +105 -156 rlineto +173 0 rlineto +-88 140 rlineto +-68 110 -29 30 -62 36 rrcurveto +125 18 64 74 0 107 rrcurveto +0 139 -103 62 -179 0 rrcurveto +-304 0 rlineto +0 -716 rlineto +closepath +145 413 rmoveto +0 182 rlineto +113 0 rlineto +126 0 53 -1 0 -88 rrcurveto +0 -92 -58 -1 -127 0 rrcurveto +-107 0 rlineto +closepath +-72 491 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-110 0 rlineto +closepath +endchar } ND +/rcaron { +0 389 hsbw +0 445 hstem +510 20 hstem +584 144 hstem +66 127 vstem +259 111 vstem +203 0 rmoveto +0 160 rlineto +0 148 -19 99 111 0 rrcurveto +20 0 21 -8 23 -14 rrcurveto +43 119 rlineto +-30 17 -30 9 -30 0 rrcurveto +-46 0 -29 -16 -44 -69 rrcurveto +0 74 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +closepath +-164 728 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/Sacute { +0 667 hsbw +-13 122 hstem +608 120 hstem +757 146 hstem +62 138 vstem +269 87 vstem +474 144 vstem +36 233 rmoveto +18 -160 96 -86 182 0 rrcurveto +159 0 127 84 0 137 rrcurveto +0 147 -96 55 -168 37 rrcurveto +-96 21 -58 6 0 64 rrcurveto +0 53 60 17 62 0 rrcurveto +81 0 38 -30 12 -73 rrcurveto +145 6 rlineto +-6 132 -89 85 -180 0 rrcurveto +-141 0 -120 -77 0 -123 rrcurveto +0 -120 82 -59 147 -36 rrcurveto +114 -28 69 -7 0 -70 rrcurveto +0 -54 -48 -45 -93 0 rrcurveto +-88 0 -52 43 -16 95 rrcurveto +-141 -14 rlineto +closepath +233 524 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/sacute { +0 556 hsbw +-12 99 hstem +432 98 hstem +582 146 hstem +42 128 vstem +222 87 vstem +370 138 vstem +23 148 rmoveto +25 -99 82 -61 142 0 rrcurveto +156 0 80 79 0 95 rrcurveto +0 107 -94 28 -102 28 rrcurveto +-76 17 -66 -7 0 54 rrcurveto +0 36 43 7 50 0 rrcurveto +57 0 30 -23 11 -40 rrcurveto +129 24 rlineto +-26 90 -62 47 -141 0 rrcurveto +-150 0 -69 -70 0 -89 rrcurveto +0 -130 92 -14 180 -39 rrcurveto +37 -8 19 -8 0 -28 rrcurveto +0 -47 -45 -10 -53 0 rrcurveto +-64 0 -35 28 -12 54 rrcurveto +-138 -21 rlineto +closepath +199 434 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/Tcedilla { +0 611 hsbw +-196 137 hstem +0 20 hstem +595 121 hstem +307 71 vstem +234 0 rmoveto +144 0 rlineto +0 595 rlineto +212 0 rlineto +0 121 rlineto +-569 0 rlineto +0 -121 rlineto +213 0 rlineto +0 -595 rlineto +closepath +7 -59 rmoveto +0 -137 rlineto +66 0 rlineto +-11 -30 -21 -21 -44 -15 rrcurveto +27 -57 rlineto +80 30 40 54 0 78 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +endchar } ND +/tcedilla { +0 333 hsbw +-183 124 hstem +-12 114 hstem +409 110 hstem +191 64 vstem +310 519 rmoveto +-94 0 rlineto +0 183 rlineto +-138 -80 rlineto +0 -103 rlineto +-63 0 rlineto +0 -110 rlineto +63 0 rlineto +0 -226 rlineto +0 -140 34 -55 100 0 rrcurveto +40 0 37 7 32 14 rrcurveto +-12 106 rlineto +-24 -9 -19 -4 -12 0 rrcurveto +-47 0 9 30 0 68 rrcurveto +0 209 rlineto +94 0 rlineto +0 110 rlineto +closepath +-179 -578 rmoveto +0 -124 rlineto +60 0 rlineto +-11 -28 -23 -19 -34 -12 rrcurveto +24 -51 rlineto +72 27 36 49 0 70 rrcurveto +0 88 rlineto +-124 0 rlineto +closepath +endchar } ND +/Tcaron { +0 611 hsbw +0 20 hstem +595 121 hstem +760 144 hstem +234 144 vstem +234 0 rmoveto +144 0 rlineto +0 595 rlineto +212 0 rlineto +0 121 rlineto +-569 0 rlineto +0 -121 rlineto +213 0 rlineto +0 -595 rlineto +closepath +-101 904 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/tcaron { +0 479 hsbw +-12 114 hstem +409 110 hstem +592 124 hstem +78 137 vstem +416 64 vstem +356 716 rmoveto +0 -124 rlineto +60 0 rlineto +0 -48 -21 -28 -49 -16 rrcurveto +25 -52 rlineto +73 24 36 62 0 93 rrcurveto +0 89 rlineto +-124 0 rlineto +closepath +-47 -197 rmoveto +-94 0 rlineto +0 183 rlineto +-137 -80 rlineto +0 -103 rlineto +-63 0 rlineto +0 -110 rlineto +63 0 rlineto +0 -226 rlineto +0 -140 33 -55 101 0 rrcurveto +40 0 36 7 32 14 rrcurveto +-11 106 rlineto +-25 -9 -19 -4 -12 0 rrcurveto +-44 0 6 31 0 67 rrcurveto +0 209 rlineto +94 0 rlineto +0 110 rlineto +closepath +endchar } ND +/Uring { +0 722 hsbw +-12 123 hstem +696 20 hstem +728 52 hstem +867 52 hstem +72 144 vstem +262 52 vstem +401 52 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +381 108 rmoveto +0 53 -43 42 -53 0 rrcurveto +-52 0 -43 -43 0 -52 rrcurveto +0 -54 43 -42 52 0 rrcurveto +53 0 43 42 0 54 rrcurveto +closepath +-52 0 rmoveto +0 -24 -20 -20 -24 0 rrcurveto +-24 0 -19 20 0 24 rrcurveto +0 24 19 19 24 0 rrcurveto +24 0 20 -19 0 -24 rrcurveto +closepath +endchar } ND +/uring { +0 611 hsbw +-12 105 hstem +499 20 hstem +560 52 hstem +699 52 hstem +69 137 vstem +209 52 vstem +348 52 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-13 655 rmoveto +0 53 -43 43 -52 0 rrcurveto +-54 0 -42 -43 0 -53 rrcurveto +0 -52 42 -43 54 0 rrcurveto +52 0 43 43 0 52 rrcurveto +closepath +-52 0 rmoveto +0 -24 -19 -19 -24 0 rrcurveto +-24 0 -20 19 0 24 rrcurveto +0 24 20 20 24 0 rrcurveto +24 0 19 -20 0 -24 rrcurveto +closepath +endchar } ND +/Udblacute { +0 722 hsbw +-12 123 hstem +696 20 hstem +757 145 hstem +72 144 vstem +390 88 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +134 41 rmoveto +86 0 rlineto +125 145 rlineto +-143 0 rlineto +-68 -145 rlineto +closepath +184 0 rmoveto +88 0 rlineto +120 145 rlineto +-140 0 rlineto +-68 -145 rlineto +closepath +endchar } ND +/udblacute { +0 611 hsbw +-12 105 hstem +499 20 hstem +584 146 hstem +69 137 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-257 584 rmoveto +86 0 rlineto +125 146 rlineto +-143 0 rlineto +-68 -146 rlineto +closepath +183 0 rmoveto +88 0 rlineto +121 146 rlineto +-140 0 rlineto +-69 -146 rlineto +closepath +endchar } ND +/Zacute { +0 611 hsbw +0 121 hstem +595 121 hstem +757 146 hstem +53 524 vstem +11 0 rmoveto +581 0 rlineto +0 121 rlineto +-407 0 rlineto +392 483 rlineto +0 112 rlineto +-524 0 rlineto +0 -121 rlineto +334 0 rlineto +-376 -465 rlineto +0 -130 rlineto +closepath +201 757 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/zacute { +0 500 hsbw +0 121 hstem +408 111 hstem +582 146 hstem +196 283 vstem +17 0 rmoveto +462 0 rlineto +0 121 rlineto +-237 0 rlineto +-9 -2 -18 -1 -19 -1 rrcurveto +70 76 rlineto +198 228 rlineto +0 98 rlineto +-428 0 rlineto +0 -114 rlineto +183 0 rlineto +26 0 21 1 16 2 rrcurveto +-8 -8 -10 -10 -11 -13 rrcurveto +-11 -14 -14 -16 -17 -17 rrcurveto +-194 -223 rlineto +0 -107 rlineto +closepath +138 582 rmoveto +87 0 rlineto +134 146 rlineto +-153 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/Zdot { +0 611 hsbw +0 121 hstem +595 121 hstem +760 130 hstem +11 174 vstem +247 134 vstem +11 0 rmoveto +581 0 rlineto +0 121 rlineto +-407 0 rlineto +392 483 rlineto +0 112 rlineto +-524 0 rlineto +0 -121 rlineto +334 0 rlineto +-376 -465 rlineto +0 -130 rlineto +closepath +236 760 rmoveto +134 0 rlineto +0 130 rlineto +-134 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/zdot { +0 500 hsbw +0 121 hstem +408 111 hstem +598 130 hstem +176 135 vstem +17 0 rmoveto +462 0 rlineto +0 121 rlineto +-237 0 rlineto +-9 -2 -18 -1 -19 -1 rrcurveto +70 76 rlineto +198 228 rlineto +0 98 rlineto +-428 0 rlineto +0 -114 rlineto +183 0 rlineto +26 0 21 1 16 2 rrcurveto +-8 -8 -10 -10 -11 -13 rrcurveto +-11 -14 -14 -16 -17 -17 rrcurveto +-194 -223 rlineto +0 -107 rlineto +closepath +159 598 rmoveto +135 0 rlineto +0 130 rlineto +-135 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/Gamma { +0 601 hsbw +0 20 hstem +594 122 hstem +75 145 vstem +75 716 rmoveto +0 -716 rlineto +145 0 rlineto +0 594 rlineto +359 0 rlineto +0 122 rlineto +-504 0 rlineto +closepath +endchar } ND +/Theta { +0 778 hsbw +-12 123 hstem +297 121 hstem +604 124 hstem +42 149 273 232 587 149 vstem3 +42 354 rmoveto +0 -218 128 -148 230 0 rrcurveto +202 0 134 143 0 226 rrcurveto +0 225 -130 146 -218 0 rrcurveto +-216 0 -130 -142 0 -232 rrcurveto +closepath +149 4 rmoveto +0 161 75 85 124 0 rrcurveto +121 0 76 -84 0 -160 rrcurveto +0 -171 -87 -78 -110 0 rrcurveto +-112 0 -87 80 0 167 rrcurveto +closepath +82 -61 rmoveto +232 0 rlineto +0 121 rlineto +-232 0 rlineto +0 -121 rlineto +closepath +endchar } ND +/Phi { +0 821 hsbw +-29 214 hstem +547 187 hstem +42 149 338 145 630 149 vstem3 +338 734 rmoveto +0 -64 rlineto +-177 -6 -119 -128 0 -170 rrcurveto +0 -164 109 -135 187 -10 rrcurveto +0 -86 rlineto +145 0 rlineto +0 86 rlineto +186 10 110 135 0 164 rrcurveto +0 178 -120 122 -176 4 rrcurveto +0 64 rlineto +-145 0 rlineto +closepath +0 -187 rmoveto +0 -362 rlineto +-94 8 -53 74 0 99 rrcurveto +0 106 57 67 90 8 rrcurveto +closepath +145 -362 rmoveto +0 362 rlineto +93 -7 54 -76 0 -98 rrcurveto +0 -107 -58 -65 -89 -9 rrcurveto +closepath +endchar } ND +/alpha { +0 615 hsbw +-12 109 hstem +421 109 hstem +38 141 vstem +395 122 vstem +464 519 rmoveto +-14 -36 -9 -30 -5 -24 rrcurveto +-44 67 -57 34 -70 0 rrcurveto +-143 0 -84 -114 0 -144 rrcurveto +0 -151 86 -133 140 0 rrcurveto +74 0 57 32 40 66 rrcurveto +4 -20 6 -19 8 -20 rrcurveto +3 -5 2 -5 0 -6 rrcurveto +1 -4 1 -4 1 -3 rrcurveto +116 0 rlineto +-35 78 -25 112 0 60 rrcurveto +0 48 27 145 38 76 rrcurveto +-118 0 rlineto +closepath +-285 -261 rmoveto +0 102 45 61 63 0 rrcurveto +60 0 48 -57 0 -106 rrcurveto +0 -110 -45 -51 -61 0 rrcurveto +-66 0 -44 65 0 96 rrcurveto +closepath +endchar } ND +/delta { +0 606 hsbw +-12 105 hstem +602 114 hstem +38 132 vstem +437 132 vstem +86 716 rmoveto +0 -97 rlineto +71 -55 rlineto +12 -10 25 -18 36 -25 rrcurveto +-112 -19 -80 -107 0 -124 rrcurveto +0 -155 93 -118 174 0 rrcurveto +172 0 92 121 0 146 rrcurveto +0 101 -42 70 -107 72 rrcurveto +-66 44 -47 34 -27 26 rrcurveto +244 0 rlineto +0 114 rlineto +-438 0 rlineto +closepath +84 -471 rmoveto +0 94 52 68 84 0 rrcurveto +70 0 61 -57 0 -100 rrcurveto +0 -99 -62 -58 -73 0 rrcurveto +-74 0 -58 54 0 98 rrcurveto +closepath +endchar } ND +/epsilon { +0 475 hsbw +-12 109 hstem +214 106 hstem +418 112 hstem +58 135 vstem +322 320 rmoveto +-86 0 -43 18 0 36 rrcurveto +0 24 23 20 46 0 rrcurveto +32 0 32 -9 34 -18 rrcurveto +81 87 rlineto +-50 34 -63 18 -76 0 rrcurveto +-135 0 -59 -67 0 -81 rrcurveto +0 -50 24 -37 48 -26 rrcurveto +-62 -27 -30 -42 0 -58 rrcurveto +0 -91 88 -63 116 0 rrcurveto +72 0 73 22 76 46 rrcurveto +-90 89 rlineto +-48 -32 -41 -16 -34 0 rrcurveto +-39 0 -32 22 0 34 rrcurveto +0 45 32 16 111 0 rrcurveto +0 106 rlineto +closepath +endchar } ND +/sigma { +0 684 hsbw +-12 112 hstem +418 112 hstem +38 141 vstem +432 141 vstem +661 519 rmoveto +-269 0 rlineto +-32 7 -28 4 -24 0 rrcurveto +-168 0 -102 -115 0 -158 rrcurveto +0 -160 107 -109 159 0 rrcurveto +161 0 108 122 0 151 rrcurveto +0 52 -13 48 -25 44 rrcurveto +126 0 rlineto +0 114 rlineto +closepath +-482 -260 rmoveto +0 98 52 61 75 0 rrcurveto +76 0 50 -63 0 -93 rrcurveto +0 -107 -56 -55 -70 0 rrcurveto +-75 0 -52 60 0 99 rrcurveto +closepath +endchar } ND +/tau { +0 446 hsbw +0 20 hstem +405 114 hstem +158 137 vstem +23 519 rmoveto +0 -114 rlineto +135 0 rlineto +0 -405 rlineto +137 0 rlineto +0 405 rlineto +127 0 rlineto +0 114 rlineto +-399 0 rlineto +closepath +endchar } ND +/phi { +0 715 hsbw +-197 291 hstem +418 112 hstem +38 141 290 136 537 141 vstem3 +279 530 rmoveto +-161 0 -80 -108 0 -154 rrcurveto +0 -146 96 -114 156 -22 rrcurveto +0 -183 rlineto +137 0 rlineto +0 183 rlineto +158 29 93 118 0 139 rrcurveto +0 125 -96 133 -144 0 rrcurveto +-116 0 -32 -75 0 -131 rrcurveto +0 -223 rlineto +-76 25 -35 71 0 79 rrcurveto +0 58 22 60 47 15 rrcurveto +31 121 rlineto +closepath +148 -436 rmoveto +0 212 rlineto +0 110 13 2 22 0 rrcurveto +42 0 33 -60 0 -68 rrcurveto +0 -98 -37 -66 -73 -32 rrcurveto +closepath +endchar } ND +/underscoredbl { +0 552 hsbw +-376 89 hstem +-198 89 hstem +-9 570 vstem +-9 -198 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +0 -178 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +endchar } ND +/exclamdbl { +0 604 hsbw +0 137 hstem +185 531 hstem +96 137 vstem +366 137 vstem +125 185 rmoveto +78 0 rlineto +35 363 rlineto +0 168 rlineto +-148 0 rlineto +0 -168 rlineto +35 -363 rlineto +closepath +-29 -185 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +300 185 rmoveto +78 0 rlineto +35 363 rlineto +0 168 rlineto +-149 0 rlineto +0 -168 rlineto +36 -363 rlineto +closepath +-30 -185 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/nsuperior { +0 396 hsbw +508 77 hstem +39 94 vstem +256 101 vstem +357 253 rmoveto +0 201 rlineto +0 85 -44 46 -76 0 rrcurveto +-38 0 -36 -16 -21 -20 rrcurveto +-9 -7 rlineto +0 36 rlineto +-94 0 rlineto +0 -325 rlineto +101 0 rlineto +0 148 rlineto +0 73 11 34 57 0 rrcurveto +42 0 6 -28 0 -61 rrcurveto +0 -166 rlineto +101 0 rlineto +closepath +endchar } ND +/peseta { +0 1094 hsbw +-13 103 hstem +250 125 hstem +419 102 hstem +589 127 hstem +20 153 vstem +305 145 vstem +496 141 vstem +687 121 vstem +941 134 vstem +20 716 rmoveto +0 -716 rlineto +153 0 rlineto +0 250 rlineto +43 0 rlineto +130 0 70 48 34 121 rrcurveto +46 0 rlineto +0 -283 rlineto +0 -123 50 -25 93 0 rrcurveto +27 0 rlineto +8 1 12 1 12 1 rrcurveto +0 85 rlineto +41 -76 51 -13 78 0 rrcurveto +132 0 75 72 0 103 rrcurveto +0 91 -46 31 -113 35 rrcurveto +-65 20 -43 10 0 45 rrcurveto +0 20 23 24 34 0 rrcurveto +40 0 29 -28 4 -46 rrcurveto +129 0 rlineto +-5 106 -71 64 -123 0 rrcurveto +-32 0 -31 -5 -32 -8 rrcurveto +-136 0 rlineto +0 154 rlineto +-141 0 rlineto +0 -154 rlineto +-41 0 rlineto +-16 124 -80 71 -133 0 rrcurveto +-206 0 rlineto +closepath +153 -127 rmoveto +84 0 48 -31 0 -73 rrcurveto +0 -77 -46 -33 -86 0 rrcurveto +0 214 rlineto +closepath +464 -170 rmoveto +61 0 rlineto +-8 -18 -3 -17 0 -16 rrcurveto +0 -93 65 -40 112 -35 rrcurveto +45 -14 32 -14 0 -26 rrcurveto +0 -28 -31 -28 -37 0 rrcurveto +-40 0 -27 24 -5 50 rrcurveto +-121 0 rlineto +0 -17 rlineto +0 -14 3 -16 6 -19 rrcurveto +-41 0 -11 6 0 48 rrcurveto +0 267 rlineto +closepath +endchar } ND +/arrowleft { +0 1000 hsbw +228 49 hstem +39 922 vstem +240 428 rmoveto +-86 -95 -59 -44 -56 -24 rrcurveto +0 -22 rlineto +64 -31 54 -42 84 -93 rrcurveto +38 0 rlineto +-31 65 -32 50 -34 36 rrcurveto +779 0 rlineto +0 49 rlineto +-779 0 rlineto +49 62 8 11 38 78 rrcurveto +-37 0 rlineto +closepath +endchar } ND +/arrowup { +0 500 hsbw +-209 20 hstem +415 37 hstem +226 49 vstem +75 452 rmoveto +0 -37 rlineto +39 19 22 12 20 13 rrcurveto +20 13 18 15 32 23 rrcurveto +0 -719 rlineto +49 0 rlineto +0 719 rlineto +35 -34 50 -32 66 -30 rrcurveto +0 38 rlineto +-95 84 -41 52 -30 66 rrcurveto +-23 0 rlineto +-24 -56 -44 -60 -94 -86 rrcurveto +closepath +endchar } ND +/arrowright { +0 1000 hsbw +228 49 hstem +39 922 vstem +759 428 rmoveto +-37 0 rlineto +38 -78 7 -11 50 -62 rrcurveto +-778 0 rlineto +0 -49 rlineto +778 0 rlineto +-34 -36 -32 -50 -30 -65 rrcurveto +38 0 rlineto +84 93 54 42 64 31 rrcurveto +0 22 rlineto +-56 24 -60 44 -86 95 rrcurveto +closepath +endchar } ND +/arrowdown { +0 500 hsbw +-209 20 hstem +-8 37 hstem +226 49 vstem +75 -8 rmoveto +94 -86 44 -59 24 -56 rrcurveto +23 0 rlineto +30 64 41 54 95 84 rrcurveto +0 37 rlineto +-66 -30 -50 -32 -35 -34 rrcurveto +0 720 rlineto +-49 0 rlineto +0 -720 rlineto +-63 50 -11 7 -77 38 rrcurveto +0 -37 rlineto +closepath +endchar } ND +/arrowboth { +0 1000 hsbw +229 48 hstem +39 922 vstem +961 264 rmoveto +-62 28 -52 39 -84 98 rrcurveto +-39 0 rlineto +22 -56 31 -51 41 -45 rrcurveto +-637 0 rlineto +40 45 32 51 23 56 rrcurveto +-39 0 rlineto +-86 -98 -52 -39 -60 -28 rrcurveto +0 -22 rlineto +60 -28 52 -41 86 -96 rrcurveto +39 0 rlineto +-23 56 -32 50 -40 46 rrcurveto +637 0 rlineto +-41 -46 -31 -50 -22 -56 rrcurveto +39 0 rlineto +84 96 52 41 62 28 rrcurveto +0 22 rlineto +closepath +endchar } ND +/arrowupdn { +0 500 hsbw +-208 20 hstem +-10 39 hstem +477 39 hstem +694 20 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +endchar } ND +/arrowupdnbse { +0 500 hsbw +-303 48 hstem +-208 20 hstem +-10 39 hstem +477 39 hstem +694 20 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +-164 -969 rmoveto +0 -48 rlineto +350 0 rlineto +0 48 rlineto +-350 0 rlineto +closepath +endchar } ND +/orthogonal { +0 979 hsbw +0 49 hstem +605 20 hstem +177 49 vstem +177 625 rmoveto +0 -625 rlineto +625 0 rlineto +0 49 rlineto +-576 0 rlineto +0 576 rlineto +-49 0 rlineto +closepath +endchar } ND +/intersection { +0 722 hsbw +0 20 hstem +620 99 hstem +70 100 vstem +548 100 vstem +170 0 rmoveto +0 296 rlineto +0 223 51 101 138 0 rrcurveto +142 0 47 -101 0 -223 rrcurveto +0 -296 rlineto +100 0 rlineto +0 292 rlineto +0 321 -89 106 -200 0 rrcurveto +-203 0 -86 -118 0 -309 rrcurveto +0 -292 rlineto +100 0 rlineto +closepath +endchar } ND +/equivalence { +0 583 hsbw +73 127 290 126 506 127 hstem3 +42 500 vstem +42 506 rmoveto +500 0 rlineto +0 127 rlineto +-500 0 rlineto +0 -127 rlineto +closepath +0 -216 rmoveto +500 0 rlineto +0 127 rlineto +-500 0 rlineto +0 -127 rlineto +closepath +0 -217 rmoveto +500 0 rlineto +0 127 rlineto +-500 0 rlineto +0 -127 rlineto +closepath +endchar } ND +/house { +0 604 hsbw +0 40 hstem +501 62 hstem +77 39 vstem +488 39 vstem +77 0 rmoveto +450 0 rlineto +0 310 rlineto +-225 253 rlineto +-225 -253 rlineto +0 -310 rlineto +closepath +39 40 rmoveto +0 253 rlineto +186 208 rlineto +186 -208 rlineto +0 -253 rlineto +-372 0 rlineto +closepath +endchar } ND +/revlogicalnot { +0 584 hsbw +399 125 hstem +42 125 vstem +167 184 rmoveto +0 215 rlineto +375 0 rlineto +0 125 rlineto +-500 0 rlineto +0 -340 rlineto +125 0 rlineto +closepath +endchar } ND +/integraltp { +0 604 hsbw +798 50 hstem +267 70 vstem +337 -251 rmoveto +0 962 rlineto +0 49 -9 38 35 0 rrcurveto +7 0 8 -9 7 -9 rrcurveto +13 -21 16 -9 20 0 rrcurveto +24 0 19 18 0 27 rrcurveto +0 28 -24 25 -44 0 rrcurveto +-74 0 -68 -73 0 -142 rrcurveto +0 -884 rlineto +70 0 rlineto +closepath +endchar } ND +/integralbt { +0 604 hsbw +-251 50 hstem +267 70 vstem +267 848 rmoveto +0 -962 rlineto +0 -50 10 -37 -36 0 rrcurveto +-7 0 -8 9 -7 9 rrcurveto +-14 19 -15 11 -20 0 rrcurveto +-24 0 -19 -19 0 -26 rrcurveto +0 -29 24 -24 44 0 rrcurveto +73 0 69 73 0 142 rrcurveto +0 884 rlineto +-70 0 rlineto +closepath +endchar } ND +/SF100000 { +0 708 hsbw +261 85 hstem +-11 730 vstem +719 261 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF110000 { +0 625 hsbw +890 20 hstem +223 86 vstem +223 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF010000 { +0 708 hsbw +261 85 hstem +312 85 vstem +720 346 rmoveto +-408 0 rlineto +0 -649 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +closepath +endchar } ND +/SF030000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF020000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 261 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF040000 { +0 708 hsbw +261 649 hstem +311 85 vstem +396 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF080000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF090000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -564 rlineto +closepath +endchar } ND +/SF060000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF070000 { +0 708 hsbw +261 649 hstem +311 85 vstem +719 261 rmoveto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF050000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF430000 { +0 708 hsbw +168 85 hstem +354 85 hstem +-11 730 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF240000 { +0 708 hsbw +890 20 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF510000 { +0 708 hsbw +168 85 hstem +354 85 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-408 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF520000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-501 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF390000 { +0 708 hsbw +168 85 hstem +354 85 hstem +219 85 vstem +404 86 vstem +304 -303 rmoveto +0 657 rlineto +415 0 rlineto +0 85 rlineto +-500 0 rlineto +0 -742 rlineto +85 0 rlineto +closepath +186 471 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/SF220000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 742 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF210000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-500 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF250000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 742 rlineto +-500 0 rlineto +0 -85 rlineto +415 0 rlineto +0 -657 rlineto +closepath +-186 471 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF500000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 168 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF490000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +720 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +501 0 rlineto +closepath +endchar } ND +/SF380000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +304 910 rmoveto +-85 0 rlineto +0 -742 rlineto +500 0 rlineto +0 85 rlineto +-415 0 rlineto +0 657 rlineto +closepath +186 -471 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +endchar } ND +/SF280000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +396 168 rmoveto +0 742 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF270000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +489 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +500 0 rlineto +closepath +endchar } ND +/SF260000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 910 rmoveto +0 -657 rlineto +-415 0 rlineto +0 -85 rlineto +500 0 rlineto +0 742 rlineto +-85 0 rlineto +closepath +-186 -471 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +endchar } ND +/SF360000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF370000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF420000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +185 657 rmoveto +316 0 rlineto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +closepath +0 -657 rmoveto +86 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-316 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF190000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 84 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +1 -101 rlineto +-323 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF200000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +186 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF230000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +-100 1213 rmoveto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +closepath +-86 -742 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF470000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-408 -186 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF480000 { +0 708 hsbw +261 85 hstem +218 86 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF410000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-501 -186 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +186 -471 rmoveto +85 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF450000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF460000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +719 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF400000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +304 354 rmoveto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +closepath +415 0 rmoveto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -556 rlineto +315 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF540000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF530000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF440000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 86 vstem +490 439 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +-272 0 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +0 -271 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +272 0 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/upblock { +0 708 hsbw +303 607 hstem +-11 730 vstem +719 303 rmoveto +0 607 rlineto +-730 0 rlineto +0 -607 rlineto +730 0 rlineto +closepath +endchar } ND +/dnblock { +0 708 hsbw +-303 606 hstem +-11 730 vstem +719 -303 rmoveto +0 606 rlineto +-730 0 rlineto +0 -606 rlineto +730 0 rlineto +closepath +endchar } ND +/block { +0 708 hsbw +890 20 hstem +-11 730 vstem +-11 -303 rmoveto +730 0 rlineto +0 1213 rlineto +-730 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/lfblock { +0 708 hsbw +890 20 hstem +-11 365 vstem +-11 -303 rmoveto +365 0 rlineto +0 1213 rlineto +-365 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/rtblock { +0 708 hsbw +890 20 hstem +354 366 vstem +354 -303 rmoveto +366 0 rlineto +0 1213 rlineto +-366 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/ltshade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +50 61 172 60 293 61 vstem3 +415 61 537 60 658 61 vstem3 +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +608 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +-121 -121 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/shade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +-11 61 vstem +172 60 293 61 415 60 vstem3 +537 61 vstem +659 60 vstem +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-609 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +61 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-487 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +548 -122 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +61 -121 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/dkshade { +0 729 hsbw +-307 61 -184 59 -63 61 hstem3 +57 62 180 60 302 60 hstem3 +423 61 545 61 667 61 hstem3 +789 121 hstem +61 60 vstem +182 61 vstem +365 60 vstem +486 61 vstem +669 60 vstem +729 728 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 121 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -183 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -62 rlineto +-61 0 rlineto +0 -182 rlineto +729 0 rlineto +0 61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 60 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 182 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +closepath +-668 61 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-121 -122 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-365 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +61 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-547 -121 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +243 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-61 -61 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +182 61 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 -61 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-121 -61 rmoveto +60 0 rlineto +0 -60 rlineto +-60 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 62 rlineto +60 0 rlineto +0 -62 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-121 -60 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +endchar } ND +/filledbox { +0 604 hsbw +0 461 hstem +71 461 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +endchar } ND +/filledrect { +0 1000 hsbw +155 188 hstem +0 1000 vstem +0 343 rmoveto +0 -188 rlineto +1000 0 rlineto +0 188 rlineto +-1000 0 rlineto +closepath +endchar } ND +/triagup { +0 990 hsbw +0 20 hstem +148 694 vstem +148 0 rmoveto +694 0 rlineto +-347 693 rlineto +-347 -693 rlineto +closepath +endchar } ND +/triagrt { +0 990 hsbw +-15 20 hstem +141 708 vstem +141 692 rmoveto +0 -707 rlineto +708 353 rlineto +-708 354 rlineto +closepath +endchar } ND +/triagdn { +0 990 hsbw +-15 20 hstem +148 694 vstem +842 678 rmoveto +-694 0 rlineto +347 -693 rlineto +347 693 rlineto +closepath +endchar } ND +/triaglf { +0 990 hsbw +-15 20 hstem +141 708 vstem +849 692 rmoveto +-708 -354 rlineto +708 -353 rlineto +0 707 rlineto +closepath +endchar } ND +/circle { +0 604 hsbw +67 37 hstem +460 37 hstem +87 37 vstem +480 37 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +0 -37 rmoveto +91 0 87 -88 0 -90 rrcurveto +0 -99 -80 -79 -98 0 rrcurveto +-98 0 -80 79 0 99 rrcurveto +0 89 88 89 90 0 rrcurveto +closepath +endchar } ND +/invbullet { +0 604 hsbw +0 141 hstem +338 141 hstem +63 140 vstem +400 141 vstem +63 0 rmoveto +478 0 rlineto +0 479 rlineto +-478 0 rlineto +0 -479 rlineto +closepath +239 338 rmoveto +54 0 44 -45 0 -54 rrcurveto +0 -54 -44 -44 -54 0 rrcurveto +-55 0 -44 44 0 54 rrcurveto +0 54 44 45 55 0 rrcurveto +closepath +endchar } ND +/invcircle { +0 604 hsbw +0 67 104 356 497 67 hstem3 +21 66 125 355 518 66 vstem3 +21 0 rmoveto +563 0 rlineto +0 564 rlineto +-563 0 rlineto +0 -564 rlineto +closepath +282 497 rmoveto +110 0 105 -104 0 -111 rrcurveto +0 -119 -97 -96 -118 0 rrcurveto +-120 0 -96 96 0 119 rrcurveto +0 111 105 104 111 0 rrcurveto +closepath +0 -37 rmoveto +-91 0 -87 -85 0 -93 rrcurveto +0 -99 79 -79 99 0 rrcurveto +97 0 80 79 0 99 rrcurveto +0 92 -88 86 -89 0 rrcurveto +closepath +endchar } ND +/smileface { +0 1021 hsbw +-58 45 hstem +58 42 hstem +278 79 hstem +519 45 hstem +199 46 vstem +352 79 vstem +590 79 vstem +777 45 vstem +822 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -140 -139 0 -172 rrcurveto +0 -172 140 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-45 0 rmoveto +0 -147 -120 -119 -146 0 rrcurveto +-148 0 -118 119 0 147 rrcurveto +0 146 118 120 148 0 rrcurveto +146 0 120 -120 0 -146 rrcurveto +closepath +-346 64 rmoveto +0 22 -18 18 -22 0 rrcurveto +-22 0 -17 -18 0 -22 rrcurveto +0 -22 17 -17 22 0 rrcurveto +22 0 18 17 0 22 rrcurveto +closepath +238 0 rmoveto +0 22 -18 18 -21 0 rrcurveto +-22 0 -18 -18 0 -22 rrcurveto +0 -22 18 -17 22 0 rrcurveto +21 0 18 17 0 22 rrcurveto +closepath +-302 -164 rmoveto +33 -63 47 -32 64 0 rrcurveto +62 0 49 32 32 63 rrcurveto +-30 17 rlineto +-26 -47 -38 -23 -49 0 rrcurveto +-50 0 -38 23 -26 47 rrcurveto +-30 -17 rlineto +closepath +endchar } ND +/invsmileface { +0 1052 hsbw +-58 116 hstem +170 108 hstem +357 207 hstem +215 152 446 160 685 152 vstem3 +837 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -139 -139 0 -172 rrcurveto +0 -172 139 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-391 64 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-22 0 -18 17 0 22 rrcurveto +0 22 18 18 22 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +239 0 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-23 0 -17 17 0 22 rrcurveto +0 22 17 18 23 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +-302 -164 rmoveto +30 17 rlineto +26 -47 37 -23 50 0 rrcurveto +50 0 37 23 26 47 rrcurveto +31 -17 rlineto +-32 -63 -48 -32 -64 0 rrcurveto +-63 0 -48 32 -32 63 rrcurveto +closepath +endchar } ND +/sun { +0 917 hsbw +-13 369 hstem +591 201 hstem +8 200 440 37 709 200 vstem3 +440 792 rmoveto +0 -165 rlineto +-59 -6 -46 -17 -65 -45 rrcurveto +-143 138 rlineto +-23 -28 rlineto +138 -140 rlineto +-46 -55 -19 -47 -5 -69 rrcurveto +-164 0 rlineto +0 -33 rlineto +164 0 rlineto +6 -70 21 -49 44 -54 rrcurveto +-139 -140 rlineto +24 -25 rlineto +144 136 rlineto +52 -40 44 -18 72 -9 rrcurveto +0 -165 rlineto +38 0 rlineto +0 165 rlineto +69 8 38 13 64 48 rrcurveto +138 -138 rlineto +28 24 rlineto +-139 142 rlineto +40 51 23 57 7 62 rrcurveto +163 0 rlineto +0 33 rlineto +-164 0 rlineto +-2 59 -20 55 -48 61 rrcurveto +140 140 rlineto +-25 26 rlineto +-142 -139 rlineto +-58 46 -47 19 -65 4 rrcurveto +0 165 rlineto +-38 0 rlineto +closepath +268 -451 rmoveto +0 -138 -113 -112 -137 0 rrcurveto +-139 0 -111 112 0 138 rrcurveto +0 138 111 112 139 0 rrcurveto +137 0 113 -112 0 -138 rrcurveto +closepath +endchar } ND +/female { +0 750 hsbw +0 29 hstem +225 25 hstem +708 28 hstem +119 28 361 28 604 26 vstem3 +389 225 rmoveto +134 6 107 113 0 136 rrcurveto +0 132 -122 124 -133 0 rrcurveto +-135 0 -121 -123 0 -133 rrcurveto +0 -131 128 -124 113 0 rrcurveto +0 -196 rlineto +-225 0 rlineto +0 -29 rlineto +225 0 rlineto +0 -214 rlineto +29 0 rlineto +0 214 rlineto +224 0 rlineto +0 29 rlineto +-224 0 rlineto +0 196 rlineto +closepath +-14 483 rmoveto +116 0 113 -110 0 -119 rrcurveto +0 -127 -103 -102 -126 0 rrcurveto +-127 0 -102 102 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/male { +0 750 hsbw +-128 26 hstem +357 13 hstem +734 57 hstem +54 27 vstem +539 26 vstem +594 791 rmoveto +-300 -148 rlineto +12 -26 rlineto +262 130 rlineto +-176 -377 rlineto +-29 8 -27 5 -25 0 rrcurveto +-143 0 -114 -114 0 -141 rrcurveto +0 -133 122 -123 134 0 rrcurveto +132 0 123 124 0 132 rrcurveto +0 94 -50 89 -96 48 rrcurveto +175 375 rlineto +69 -283 rlineto +28 7 rlineto +-80 325 rlineto +-17 8 rlineto +closepath +-284 -434 rmoveto +115 0 114 -109 0 -120 rrcurveto +0 -127 -103 -103 -126 0 rrcurveto +-127 0 -102 103 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/spade { +0 531 hsbw +0 18 hstem +134 20 hstem +28 243 vstem +266 601 rmoveto +-19 -92 -52 -53 -80 -69 rrcurveto +-47 -40 -40 -43 0 -62 rrcurveto +0 -59 48 -49 59 0 rrcurveto +54 0 44 31 30 62 rrcurveto +2 -139 -69 -70 -120 0 rrcurveto +-4 -18 rlineto +387 0 rlineto +0 18 rlineto +-126 5 -62 72 0 132 rrcurveto +32 -60 41 -33 52 0 rrcurveto +58 0 49 47 0 63 rrcurveto +0 62 -34 36 -70 62 rrcurveto +-78 69 -36 45 -19 83 rrcurveto +closepath +endchar } ND +/club { +0 656 hsbw +0 20 hstem +133 271 hstem +192 271 vstem +536 0 rmoveto +-4 17 rlineto +-155 29 -41 48 -3 156 rrcurveto +44 -81 54 -35 64 0 rrcurveto +73 0 61 59 0 79 rrcurveto +0 76 -56 57 -65 0 rrcurveto +-31 0 -6 -6 -42 -20 rrcurveto +22 32 12 30 0 30 rrcurveto +0 70 -60 60 -76 0 rrcurveto +-78 0 -57 -59 0 -74 rrcurveto +0 -27 5 -16 28 -46 rrcurveto +-34 16 -27 9 -19 0 rrcurveto +-62 0 -56 -58 0 -76 rrcurveto +0 -78 60 -59 76 0 rrcurveto +58 0 62 35 40 82 rrcurveto +0 -23 rlineto +0 -111 -44 -68 -153 -31 rrcurveto +-4 -17 rlineto +414 0 rlineto +closepath +endchar } ND +/heart { +0 594 hsbw +-12 490 hstem +31 532 vstem +298 -12 rmoveto +26 100 50 68 84 106 rrcurveto +81 103 24 54 0 59 rrcurveto +0 66 -56 57 -70 0 rrcurveto +-69 0 -49 -48 -21 -75 rrcurveto +-27 75 -45 48 -70 0 rrcurveto +-71 0 -54 -56 0 -72 rrcurveto +0 -76 34 -38 81 -106 rrcurveto +108 -142 24 -46 20 -77 rrcurveto +closepath +endchar } ND +/diamond { +0 510 hsbw +-12 20 hstem +31 448 vstem +254 601 rmoveto +-56 -100 -106 -137 -61 -69 rrcurveto +50 -64 30 -36 10 -11 rrcurveto +53 -72 51 -66 30 -58 rrcurveto +51 93 126 163 47 51 rrcurveto +-60 65 -107 142 -58 99 rrcurveto +closepath +endchar } ND +/musicalnote { +0 500 hsbw +-18 230 hstem +554 112 hstem +237 49 vstem +434 48 vstem +237 666 rmoveto +0 -477 rlineto +-32 15 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -66 44 -43 71 0 rrcurveto +89 0 64 56 0 108 rrcurveto +0 408 rlineto +13 0 rlineto +69 0 66 -32 0 -75 rrcurveto +0 -21 rlineto +48 0 rlineto +0 50 rlineto +0 145 -52 45 -174 0 rrcurveto +-19 0 rlineto +closepath +endchar } ND +/musicalnotedbl { +0 750 hsbw +39 229 hstem +261 48 vstem +600 49 vstem +261 621 rmoveto +0 -476 rlineto +-32 14 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -64 44 -45 71 0 rrcurveto +88 0 64 58 0 107 rrcurveto +0 408 rlineto +291 90 rlineto +0 -353 rlineto +-46 18 -12 3 -25 0 rrcurveto +-80 0 -55 -55 0 -65 rrcurveto +0 -64 45 -45 72 0 rrcurveto +87 0 63 52 0 110 rrcurveto +0 541 rlineto +-388 -121 rlineto +closepath +endchar } ND +/IJ { +0 785 hsbw +-12 123 hstem +696 20 hstem +68 145 vstem +564 144 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +496 716 rmoveto +0 -463 rlineto +0 -115 -24 -27 -64 0 rrcurveto +-65 0 -21 45 -4 81 rrcurveto +-136 -16 rlineto +0 -154 79 -79 142 0 rrcurveto +178 0 59 94 0 181 rrcurveto +0 453 rlineto +-144 0 rlineto +closepath +endchar } ND +/ij { +0 556 hsbw +-210 128 hstem +0 20 hstem +499 20 hstem +589 127 hstem +72 137 vstem +340 138 vstem +72 589 rmoveto +137 0 rlineto +0 127 rlineto +-137 0 rlineto +0 -127 rlineto +closepath +0 -589 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +268 589 rmoveto +138 0 rlineto +0 127 rlineto +-138 0 rlineto +0 -127 rlineto +closepath +138 -70 rmoveto +-138 0 rlineto +0 -495 rlineto +0 -78 -1 -28 -55 0 rrcurveto +-17 0 rlineto +-5 1 -6 1 -6 1 rrcurveto +-24 -117 rlineto +36 -9 31 -5 28 0 rrcurveto +124 0 33 77 0 149 rrcurveto +0 503 rlineto +closepath +endchar } ND +/napostrophe { +0 708 hsbw +0 442 hstem +510 20 hstem +579 137 hstem +50 71 vstem +163 127 vstem +498 137 vstem +-17 716 rmoveto +0 -137 rlineto +67 0 rlineto +-2 -56 -20 -30 -56 -17 rrcurveto +27 -57 rlineto +86 29 36 65 0 105 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +652 -716 rmoveto +0 322 rlineto +0 134 -64 74 -110 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +0 235 rlineto +0 122 25 68 88 0 rrcurveto +74 0 11 -53 0 -107 rrcurveto +0 -265 rlineto +137 0 rlineto +closepath +endchar } ND +/minute { +0 240 hsbw +461 255 hstem +69 101 vstem +69 461 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-150 0 rlineto +-26 -121 rlineto +-2 -134 rlineto +closepath +endchar } ND +/second { +0 479 hsbw +461 255 hstem +69 101 vstem +289 101 vstem +69 461 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-150 0 rlineto +-26 -121 rlineto +-2 -134 rlineto +closepath +220 0 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-150 0 rlineto +-25 -121 rlineto +-3 -134 rlineto +closepath +endchar } ND +/afii61248 { +0 885 hsbw +-8 78 hstem +292 78 hstem +653 75 hstem +17 98 vstem +183 101 vstem +495 98 vstem +770 98 vstem +354 613 rmoveto +-23 77 -52 38 -86 0 rrcurveto +-108 0 -68 -71 0 -117 rrcurveto +0 -120 67 -70 107 0 rrcurveto +93 0 55 45 19 86 rrcurveto +-94 16 rlineto +-10 -51 -24 -18 -34 0 rrcurveto +-50 0 -31 31 0 86 rrcurveto +0 78 31 30 48 0 rrcurveto +36 0 22 -19 7 -38 rrcurveto +95 17 rlineto +closepath +-70 -640 rmoveto +379 755 rlineto +-99 0 rlineto +-381 -755 rlineto +101 0 rlineto +closepath +211 213 rmoveto +0 -122 75 -72 111 0 rrcurveto +108 0 79 80 0 110 rrcurveto +0 108 -78 80 -108 0 rrcurveto +-111 0 -76 -78 0 -106 rrcurveto +closepath +98 -5 rmoveto +0 72 38 39 51 0 rrcurveto +49 0 39 -40 0 -70 rrcurveto +0 -74 -39 -38 -49 0 rrcurveto +-51 0 -38 39 0 72 rrcurveto +closepath +endchar } ND +/afii61289 { +0 489 hsbw +-12 106 hstem +616 112 hstem +336 117 vstem +33 181 rmoveto +19 8 18 8 18 10 rrcurveto +19 -143 57 -76 130 0 rrcurveto +52 0 34 12 58 37 rrcurveto +0 117 rlineto +-67 -48 -30 -12 -33 0 rrcurveto +-54 0 -32 28 0 138 rrcurveto +0 14 rlineto +169 110 62 39 0 136 rrcurveto +0 100 -68 69 -93 0 rrcurveto +-167 0 -41 -160 0 -226 rrcurveto +-72 -35 rlineto +21 -126 rlineto +closepath +189 238 rmoveto +1 124 -10 73 78 0 rrcurveto +25 0 20 -21 0 -32 rrcurveto +0 -62 -46 -32 -68 -50 rrcurveto +closepath +endchar } ND +/H22073 { +0 604 hsbw +0 37 hstem +424 37 hstem +71 37 vstem +495 37 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +37 -37 rmoveto +387 0 rlineto +0 -387 rlineto +-387 0 rlineto +0 387 rlineto +closepath +endchar } ND +/H18543 { +0 354 hsbw +198 265 hstem +45 265 vstem +310 463 rmoveto +-265 0 rlineto +0 -265 rlineto +265 0 rlineto +0 265 rlineto +closepath +endchar } ND +/H18551 { +0 354 hsbw +198 37 hstem +426 37 hstem +45 37 vstem +273 37 vstem +310 463 rmoveto +-265 0 rlineto +0 -265 rlineto +265 0 rlineto +0 265 rlineto +closepath +-37 -37 rmoveto +0 -191 rlineto +-191 0 rlineto +0 191 rlineto +191 0 rlineto +closepath +endchar } ND +/H18533 { +0 604 hsbw +67 430 hstem +87 430 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +endchar } ND +/openbullet { +0 354 hsbw +190 38 hstem +433 37 hstem +38 37 vstem +280 36 vstem +177 470 rmoveto +-78 0 -61 -63 0 -77 rrcurveto +0 -78 61 -62 78 0 rrcurveto +77 0 62 62 0 78 rrcurveto +0 77 -62 63 -77 0 rrcurveto +closepath +0 -37 rmoveto +57 0 46 -46 0 -57 rrcurveto +0 -56 -46 -46 -57 0 rrcurveto +-56 0 -46 46 0 56 rrcurveto +0 57 44 46 58 0 rrcurveto +closepath +endchar } ND +/Amacron { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +780 91 hstem +0 153 202 310 561 153 vstem3 +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-254 497 rmoveto +314 0 rlineto +0 91 rlineto +-314 0 rlineto +0 -91 rlineto +closepath +endchar } ND +/amacron { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +604 90 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-237 355 rmoveto +314 0 rlineto +0 90 rlineto +-314 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/Ccircumflex { +0 722 hsbw +-12 123 hstem +604 124 hstem +853 71 hstem +47 149 vstem +210 111 vstem +430 111 vstem +531 263 rmoveto +-24 -104 -58 -48 -77 0 rrcurveto +-104 0 -72 71 0 180 rrcurveto +0 170 72 72 107 0 rrcurveto +77 0 56 -46 18 -74 rrcurveto +143 35 rlineto +-41 141 -101 68 -145 0 rrcurveto +-200 0 -135 -139 0 -237 rrcurveto +0 -226 136 -138 191 0 rrcurveto +153 0 101 75 43 156 rrcurveto +-140 44 rlineto +closepath +-321 517 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-102 144 rlineto +-126 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/ccircumflex { +0 556 hsbw +-12 112 hstem +422 108 hstem +657 71 hstem +42 141 vstem +113 330 vstem +524 365 rmoveto +-32 112 -73 53 -126 0 rrcurveto +-155 0 -96 -101 0 -170 rrcurveto +0 -170 97 -101 152 0 rrcurveto +133 0 79 64 28 124 rrcurveto +-135 23 rlineto +-14 -72 -33 -27 -52 0 rrcurveto +-70 0 -44 45 0 124 rrcurveto +0 110 44 43 68 0 rrcurveto +50 0 34 -28 10 -53 rrcurveto +135 24 rlineto +closepath +-411 219 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/Cdot { +0 722 hsbw +-12 123 hstem +604 124 hstem +780 130 hstem +47 149 vstem +307 134 vstem +531 263 rmoveto +-24 -104 -58 -48 -77 0 rrcurveto +-104 0 -72 71 0 180 rrcurveto +0 170 72 72 107 0 rrcurveto +77 0 56 -46 18 -74 rrcurveto +143 35 rlineto +-41 141 -101 68 -145 0 rrcurveto +-200 0 -135 -139 0 -237 rrcurveto +0 -226 136 -138 191 0 rrcurveto +153 0 101 75 43 156 rrcurveto +-140 44 rlineto +closepath +-224 517 rmoveto +134 0 rlineto +0 130 rlineto +-134 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/cdot { +0 556 hsbw +-12 112 hstem +422 108 hstem +598 130 hstem +42 141 vstem +211 135 vstem +524 365 rmoveto +-32 112 -73 53 -126 0 rrcurveto +-155 0 -96 -101 0 -170 rrcurveto +0 -170 97 -101 152 0 rrcurveto +133 0 79 64 28 124 rrcurveto +-135 23 rlineto +-14 -72 -33 -27 -52 0 rrcurveto +-70 0 -44 45 0 124 rrcurveto +0 110 44 43 68 0 rrcurveto +50 0 34 -28 10 -53 rrcurveto +135 24 rlineto +closepath +-313 233 rmoveto +135 0 rlineto +0 130 rlineto +-135 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/Emacron { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +780 91 hstem +73 144 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +103 780 rmoveto +315 0 rlineto +0 91 rlineto +-315 0 rlineto +0 -91 rlineto +closepath +endchar } ND +/emacron { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +604 90 hstem +32 140 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-260 300 rmoveto +314 0 rlineto +0 90 rlineto +-314 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/Ebreve { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +776 72 hstem +73 144 vstem +180 304 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +344 918 rmoveto +-4 -47 -28 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 7 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/ebreve { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +586 142 hstem +32 140 vstem +118 305 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-24 424 rmoveto +-4 -47 -28 -23 -53 0 rrcurveto +-55 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 58 -54 87 0 rrcurveto +85 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/Edot { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +780 130 hstem +73 144 vstem +267 135 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +194 780 rmoveto +135 0 rlineto +0 130 rlineto +-135 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/edot { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +598 130 hstem +32 140 vstem +210 135 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-170 294 rmoveto +135 0 rlineto +0 130 rlineto +-135 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/Gcircumflex { +0 778 hsbw +-12 123 hstem +263 121 hstem +604 124 hstem +853 71 hstem +48 149 vstem +234 111 vstem +455 110 vstem +571 146 vstem +406 263 rmoveto +165 0 rlineto +0 -91 rlineto +-43 -34 -66 -27 -60 0 rrcurveto +-123 0 -82 85 0 170 rrcurveto +0 157 80 81 126 0 rrcurveto +84 0 57 -44 20 -69 rrcurveto +144 27 rlineto +-28 130 -99 80 -178 0 rrcurveto +-222 0 -133 -153 0 -215 rrcurveto +0 -205 148 -167 215 0 rrcurveto +118 0 128 52 60 59 rrcurveto +0 285 rlineto +-311 0 rlineto +0 -121 rlineto +closepath +-172 517 rmoveto +111 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/gcircumflex { +0 611 hsbw +-210 105 hstem +0 111 hstem +425 105 hstem +657 71 hstem +41 141 vstem +418 129 vstem +59 -34 rmoveto +0 -17 rlineto +0 -92 66 -67 176 0 rrcurveto +166 0 80 78 0 185 rrcurveto +0 466 rlineto +-129 0 rlineto +0 -73 rlineto +-42 56 -52 28 -64 0 rrcurveto +-124 0 -95 -94 0 -174 rrcurveto +0 -145 78 -117 135 0 rrcurveto +62 0 52 28 42 56 rrcurveto +0 -76 rlineto +0 -90 -32 -23 -83 0 rrcurveto +-47 0 -27 9 -5 43 rrcurveto +-157 19 rlineto +closepath +123 304 rmoveto +0 105 47 50 66 0 rrcurveto +68 0 49 -52 0 -106 rrcurveto +0 -104 -52 -52 -68 0 rrcurveto +-62 0 -48 49 0 110 rrcurveto +closepath +-41 314 rmoveto +110 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/Gdot { +0 778 hsbw +-12 123 hstem +263 121 hstem +604 124 hstem +780 130 hstem +48 149 vstem +333 135 vstem +571 146 vstem +406 263 rmoveto +165 0 rlineto +0 -91 rlineto +-43 -34 -66 -27 -60 0 rrcurveto +-123 0 -82 85 0 170 rrcurveto +0 157 80 81 126 0 rrcurveto +84 0 57 -44 20 -69 rrcurveto +144 27 rlineto +-28 130 -99 80 -178 0 rrcurveto +-222 0 -133 -153 0 -215 rrcurveto +0 -205 148 -167 215 0 rrcurveto +118 0 128 52 60 59 rrcurveto +0 285 rlineto +-311 0 rlineto +0 -121 rlineto +closepath +-73 517 rmoveto +135 0 rlineto +0 130 rlineto +-135 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/gdot { +0 611 hsbw +-210 105 hstem +0 111 hstem +425 105 hstem +598 130 hstem +29 153 239 110 418 129 vstem3 +59 -34 rmoveto +0 -17 rlineto +0 -92 66 -67 176 0 rrcurveto +166 0 80 78 0 185 rrcurveto +0 466 rlineto +-129 0 rlineto +0 -73 rlineto +-42 56 -52 28 -64 0 rrcurveto +-124 0 -95 -94 0 -174 rrcurveto +0 -145 78 -117 135 0 rrcurveto +62 0 52 28 42 56 rrcurveto +0 -76 rlineto +0 -90 -32 -23 -83 0 rrcurveto +-47 0 -27 9 -5 43 rrcurveto +-157 19 rlineto +closepath +123 304 rmoveto +0 105 47 50 66 0 rrcurveto +68 0 49 -52 0 -106 rrcurveto +0 -104 -52 -52 -68 0 rrcurveto +-62 0 -48 49 0 110 rrcurveto +closepath +57 328 rmoveto +135 0 rlineto +0 130 rlineto +-135 0 rlineto +0 -130 rlineto +closepath +endchar } ND +/Gcedilla { +0 778 hsbw +-205 60 hstem +-58 169 hstem +263 121 hstem +604 124 hstem +48 149 vstem +414 93 vstem +571 146 vstem +432 -12 rmoveto +109 4 124 55 52 52 rrcurveto +0 285 rlineto +-311 0 rlineto +0 -121 rlineto +165 0 rlineto +0 -91 rlineto +-52 -41 -56 -20 -61 0 rrcurveto +-134 0 -71 100 0 155 rrcurveto +0 154 77 84 131 0 rrcurveto +76 0 63 -40 20 -73 rrcurveto +144 27 rlineto +-32 140 -101 70 -172 0 rrcurveto +-215 0 -140 -160 0 -208 rrcurveto +0 -194 103 -148 199 -26 rrcurveto +-21 -2 -17 -4 -12 -5 rrcurveto +-12 -48 rlineto +22 6 21 3 21 0 rrcurveto +42 0 20 -19 0 -22 rrcurveto +0 -30 -28 -16 -54 0 rrcurveto +-28 0 -31 2 -32 4 rrcurveto +0 -58 rlineto +21 -5 32 -3 44 0 rrcurveto +97 0 72 40 0 66 rrcurveto +0 44 -25 29 -50 14 rrcurveto +closepath +endchar } ND +/gcedilla { +0 611 hsbw +-210 105 hstem +0 111 hstem +425 105 hstem +581 89 hstem +41 141 vstem +206 81 vstem +418 129 vstem +351 581 rmoveto +0 89 rlineto +-64 0 rlineto +4 38 14 16 48 12 rrcurveto +-19 65 rlineto +-91 -25 -37 -48 0 -103 rrcurveto +0 -44 rlineto +145 0 rlineto +closepath +-292 -615 rmoveto +0 -17 rlineto +0 -100 75 -59 168 0 rrcurveto +168 0 77 86 0 177 rrcurveto +0 466 rlineto +-129 0 rlineto +0 -73 rlineto +-42 56 -52 28 -64 0 rrcurveto +-127 0 -92 -97 0 -170 rrcurveto +0 -127 81 -136 131 0 rrcurveto +63 0 52 28 42 56 rrcurveto +0 -76 rlineto +0 -85 -30 -28 -82 0 rrcurveto +-53 0 -27 18 -2 34 rrcurveto +-157 19 rlineto +closepath +123 301 rmoveto +0 94 38 64 74 0 rrcurveto +78 0 40 -64 0 -92 rrcurveto +0 -108 -55 -50 -64 0 rrcurveto +-74 0 -37 62 0 94 rrcurveto +closepath +endchar } ND +/Hcircumflex { +0 722 hsbw +0 434 hstem +696 20 hstem +853 71 hstem +73 145 vstem +501 145 vstem +73 0 rmoveto +145 0 rlineto +0 313 rlineto +283 0 rlineto +0 -313 rlineto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -282 rlineto +-283 0 rlineto +0 282 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +123 780 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/hcircumflex { +0 611 hsbw +0 453 hstem +510 20 hstem +696 20 hstem +830 71 hstem +71 137 vstem +406 137 vstem +208 716 rmoveto +-137 0 rlineto +0 -716 rlineto +137 0 rlineto +0 260 rlineto +0 98 32 67 81 0 rrcurveto +76 0 9 -46 0 -105 rrcurveto +0 -274 rlineto +137 0 rlineto +0 304 rlineto +0 146 -56 80 -120 0 rrcurveto +-62 0 -53 -26 -44 -51 rrcurveto +0 263 rlineto +closepath +-67 41 rmoveto +110 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/Hbar { +0 722 hsbw +0 434 hstem +529 91 hstem +696 20 hstem +73 144 vstem +501 144 vstem +73 529 rmoveto +0 -529 rlineto +144 0 rlineto +0 313 rlineto +284 0 rlineto +0 -313 rlineto +144 0 rlineto +0 529 rlineto +71 0 rlineto +0 91 rlineto +-71 0 rlineto +0 96 rlineto +-144 0 rlineto +0 -96 rlineto +-284 0 rlineto +0 96 rlineto +-144 0 rlineto +0 -96 rlineto +-71 0 rlineto +0 -91 rlineto +71 0 rlineto +closepath +144 0 rmoveto +284 0 rlineto +0 -95 rlineto +-284 0 rlineto +0 95 rlineto +closepath +endchar } ND +/hbar { +0 611 hsbw +0 453 hstem +510 20 hstem +574 142 hstem +71 137 vstem +406 138 vstem +208 665 rmoveto +0 51 rlineto +-137 0 rlineto +0 -51 rlineto +-59 0 rlineto +0 -91 rlineto +59 0 rlineto +0 -574 rlineto +137 0 rlineto +0 260 rlineto +0 124 39 41 74 0 rrcurveto +78 0 7 -54 0 -97 rrcurveto +0 -274 rlineto +138 0 rlineto +0 304 rlineto +0 144 -53 82 -122 0 rrcurveto +-64 0 -53 -26 -44 -51 rrcurveto +0 121 rlineto +144 0 rlineto +0 91 rlineto +-144 0 rlineto +closepath +endchar } ND +/Itilde { +0 278 hsbw +0 20 hstem +696 20 hstem +781 123 hstem +-34 63 68 134 241 63 vstem3 +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-39 779 rmoveto +0 32 12 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +36 -16 21 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/itilde { +0 278 hsbw +0 20 hstem +499 20 hstem +590 123 hstem +-34 63 72 126 241 63 vstem3 +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +-43 588 rmoveto +1 32 11 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +38 -14 20 -10 31 0 rrcurveto +50 0 37 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -19 5 -27 12 rrcurveto +-40 18 -15 7 -30 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/Imacron { +0 278 hsbw +0 20 hstem +696 20 hstem +780 91 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-87 780 rmoveto +315 0 rlineto +0 91 rlineto +-315 0 rlineto +0 -91 rlineto +closepath +endchar } ND +/imacron { +0 278 hsbw +0 20 hstem +499 20 hstem +604 90 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +-91 604 rmoveto +315 0 rlineto +0 90 rlineto +-315 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/Ibreve { +0 278 hsbw +0 20 hstem +696 20 hstem +776 72 hstem +-15 67 68 139 223 67 vstem3 +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +155 918 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/ibreve { +0 278 hsbw +0 20 hstem +499 20 hstem +586 142 hstem +-15 67 72 131 223 67 vstem3 +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +151 728 rmoveto +-4 -47 -28 -23 -53 0 rrcurveto +-54 0 -27 23 -5 47 rrcurveto +-67 0 rlineto +8 -88 58 -54 87 0 rrcurveto +86 0 58 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/Iogonek { +0 278 hsbw +-210 75 hstem +0 20 hstem +696 20 hstem +54 80 vstem +141 0 rmoveto +71 0 rlineto +0 716 rlineto +-144 0 rlineto +0 -716 rlineto +-10 -39 -4 -31 0 -24 rrcurveto +0 -74 48 -42 71 0 rrcurveto +32 0 33 7 33 14 rrcurveto +0 65 rlineto +-25 -7 -22 -4 -19 0 rrcurveto +-48 0 -23 26 0 52 rrcurveto +0 20 2 19 5 18 rrcurveto +closepath +endchar } ND +/iogonek { +0 278 hsbw +-210 75 hstem +0 20 hstem +499 20 hstem +589 127 hstem +57 81 vstem +72 589 rmoveto +137 0 rlineto +0 127 rlineto +-137 0 rlineto +0 -127 rlineto +closepath +0 -589 rmoveto +-10 -36 -5 -31 0 -28 rrcurveto +0 -72 48 -43 71 0 rrcurveto +33 0 33 7 32 14 rrcurveto +0 65 rlineto +-25 -7 -22 -4 -19 0 rrcurveto +-47 0 -23 26 0 52 rrcurveto +0 19 2 19 4 19 rrcurveto +65 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/Jcircumflex { +0 556 hsbw +-12 123 hstem +696 20 hstem +853 71 hstem +331 144 vstem +331 716 rmoveto +0 -463 rlineto +0 -115 -24 -27 -64 0 rrcurveto +-65 0 -21 45 -4 81 rrcurveto +-136 -16 rlineto +1 -154 78 -79 142 0 rrcurveto +178 0 59 94 0 181 rrcurveto +0 453 rlineto +-144 0 rlineto +closepath +-94 64 rmoveto +111 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/jcircumflex { +0 278 hsbw +-210 128 hstem +499 20 hstem +657 71 hstem +69 137 vstem +-26 584 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +232 -65 rmoveto +-137 0 rlineto +0 -495 rlineto +0 -69 -3 -37 -54 0 rrcurveto +-16 0 rlineto +-5 1 -6 1 -7 1 rrcurveto +-24 -117 rlineto +36 -9 31 -5 27 0 rrcurveto +128 0 30 81 0 145 rrcurveto +0 503 rlineto +closepath +endchar } ND +/Kcedilla { +0 722 hsbw +-206 62 hstem +-70 60 hstem +0 398 hstem +696 20 hstem +75 144 vstem +384 95 vstem +533 187 vstem +75 0 rmoveto +144 0 rlineto +0 216 rlineto +117 120 rlineto +197 -336 rlineto +187 0 rlineto +-284 437 rlineto +270 279 rlineto +-195 0 rlineto +-292 -318 rlineto +0 318 rlineto +-144 0 rlineto +0 -716 rlineto +closepath +211 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-27 0 -26 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +121 0 62 43 0 64 rrcurveto +0 60 -47 29 -92 0 rrcurveto +-18 0 -18 -1 -18 -2 rrcurveto +closepath +endchar } ND +/kcedilla { +0 556 hsbw +-206 62 hstem +-70 60 hstem +0 336 hstem +499 20 hstem +696 20 hstem +67 137 vstem +317 96 vstem +67 0 rmoveto +137 0 rlineto +0 166 rlineto +64 67 rlineto +130 -233 rlineto +148 0 rlineto +-190 329 rlineto +178 190 rlineto +-169 0 rlineto +-161 -183 rlineto +0 380 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +152 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-26 0 -27 2 -26 3 rrcurveto +0 -59 rlineto +28 -5 27 -3 28 0 rrcurveto +122 0 62 43 0 64 rrcurveto +0 60 -47 29 -93 0 rrcurveto +-17 0 -18 -1 -19 -2 rrcurveto +closepath +endchar } ND +/kgreenlandic { +0 556 hsbw +0 336 hstem +499 20 hstem +69 137 vstem +400 148 vstem +69 0 rmoveto +137 0 rlineto +0 166 rlineto +64 67 rlineto +130 -233 rlineto +148 0 rlineto +-190 329 rlineto +178 190 rlineto +-169 0 rlineto +-161 -183 rlineto +0 183 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/Lcedilla { +0 611 hsbw +-206 62 hstem +-70 60 hstem +0 121 hstem +77 144 vstem +328 95 vstem +77 0 rmoveto +504 0 rlineto +0 121 rlineto +-360 0 rlineto +0 589 rlineto +-144 0 rlineto +0 -710 rlineto +closepath +153 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-26 0 -27 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +122 0 61 43 0 64 rrcurveto +0 60 -47 29 -92 0 rrcurveto +-18 0 -18 -1 -18 -2 rrcurveto +closepath +endchar } ND +/lcedilla { +0 278 hsbw +-206 62 hstem +-70 60 hstem +0 20 hstem +696 20 hstem +162 95 vstem +72 0 rmoveto +137 0 rlineto +0 716 rlineto +-137 0 rlineto +0 -716 rlineto +closepath +-9 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 25 -11 0 -22 rrcurveto +0 -27 -31 -14 -62 0 rrcurveto +-26 0 -26 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +121 0 62 43 0 64 rrcurveto +0 60 -47 29 -92 0 rrcurveto +-18 0 -18 -1 -19 -2 rrcurveto +closepath +endchar } ND +/Ncedilla { +0 722 hsbw +-206 62 hstem +-70 60 hstem +0 238 hstem +467 249 hstem +74 134 vstem +384 95 vstem +508 134 vstem +74 0 rmoveto +134 0 rlineto +0 467 rlineto +289 -467 rlineto +145 0 rlineto +0 716 rlineto +-134 0 rlineto +0 -478 rlineto +-293 478 rlineto +-141 0 rlineto +0 -716 rlineto +closepath +212 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-27 0 -26 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +121 0 62 43 0 64 rrcurveto +0 60 -47 29 -92 0 rrcurveto +-18 0 -18 -1 -18 -2 rrcurveto +closepath +endchar } ND +/ncedilla { +0 611 hsbw +-206 62 hstem +-70 60 hstem +0 442 hstem +510 20 hstem +71 127 vstem +328 95 vstem +543 0 rmoveto +0 322 rlineto +0 134 -63 74 -111 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +0 235 rlineto +0 122 25 68 88 0 rrcurveto +73 0 12 -53 0 -107 rrcurveto +0 -265 rlineto +137 0 rlineto +closepath +-313 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-26 0 -27 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +122 0 61 43 0 64 rrcurveto +0 60 -47 29 -92 0 rrcurveto +-18 0 -18 -1 -18 -2 rrcurveto +closepath +endchar } ND +/Eng { +0 723 hsbw +-13 122 hstem +594 20 hstem +708 20 hstem +76 144 vstem +525 151 vstem +76 716 rmoveto +0 -716 rlineto +144 0 rlineto +0 391 rlineto +0 127 60 83 107 0 rrcurveto +85 0 53 -38 0 -237 rrcurveto +0 -170 -22 -47 -54 0 rrcurveto +-22 0 -26 6 -30 13 rrcurveto +-43 -107 rlineto +39 -22 47 -12 55 0 rrcurveto +190 0 17 141 0 225 rrcurveto +0 207 -40 168 -184 0 rrcurveto +-88 0 -77 -38 -67 -76 rrcurveto +0 102 rlineto +-144 0 rlineto +closepath +endchar } ND +/eng { +0 611 hsbw +-213 130 hstem +0 442 hstem +510 20 hstem +69 128 vstem +405 137 vstem +290 -196 rmoveto +33 -11 30 -6 26 0 rrcurveto +130 0 33 82 0 157 rrcurveto +0 296 rlineto +0 131 -55 77 -118 0 rrcurveto +-70 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-128 0 rlineto +0 -519 rlineto +138 0 rlineto +0 235 rlineto +0 115 30 76 82 0 rrcurveto +76 0 10 -62 0 -99 rrcurveto +0 -262 rlineto +0 -62 -14 -24 -34 0 rrcurveto +-12 0 -14 3 -16 5 rrcurveto +-25 -121 rlineto +closepath +endchar } ND +/Omacron { +0 778 hsbw +-12 123 hstem +604 124 hstem +780 91 hstem +43 149 234 312 588 149 vstem3 +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +39 422 rmoveto +315 0 rlineto +0 91 rlineto +-315 0 rlineto +0 -91 rlineto +closepath +endchar } ND +/omacron { +0 611 hsbw +-12 112 hstem +418 112 hstem +604 90 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-33 345 rmoveto +314 0 rlineto +0 90 rlineto +-314 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/Obreve { +0 778 hsbw +-12 123 hstem +604 124 hstem +776 72 hstem +43 149 vstem +235 67 vstem +473 67 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +281 560 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/obreve { +0 611 hsbw +-12 112 hstem +418 112 hstem +586 142 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +209 469 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/Rcedilla { +0 722 hsbw +-206 62 hstem +-70 60 hstem +0 413 hstem +595 121 hstem +73 145 vstem +384 95 vstem +510 149 vstem +73 0 rmoveto +145 0 rlineto +0 299 rlineto +29 0 rlineto +114 0 6 -34 72 -109 rrcurveto +105 -156 rlineto +173 0 rlineto +-88 140 rlineto +-68 110 -29 30 -62 36 rrcurveto +125 18 64 74 0 107 rrcurveto +0 139 -103 62 -179 0 rrcurveto +-304 0 rlineto +0 -716 rlineto +closepath +145 413 rmoveto +0 182 rlineto +113 0 rlineto +126 0 53 -1 0 -88 rrcurveto +0 -92 -58 -1 -127 0 rrcurveto +-107 0 rlineto +closepath +68 -426 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-27 0 -26 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +121 0 62 43 0 64 rrcurveto +0 60 -47 29 -92 0 rrcurveto +-18 0 -18 -1 -18 -2 rrcurveto +closepath +endchar } ND +/rcedilla { +0 389 hsbw +-206 62 hstem +-70 60 hstem +0 445 hstem +510 20 hstem +191 96 vstem +203 0 rmoveto +0 160 rlineto +0 148 -19 99 111 0 rrcurveto +20 0 21 -8 23 -14 rrcurveto +43 119 rlineto +-30 17 -30 9 -30 0 rrcurveto +-46 0 -29 -16 -44 -69 rrcurveto +0 74 rlineto +-127 0 rlineto +0 -519 rlineto +137 0 rlineto +closepath +-110 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-26 0 -26 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +121 0 62 43 0 64 rrcurveto +0 60 -47 29 -93 0 rrcurveto +-17 0 -18 -1 -19 -2 rrcurveto +closepath +endchar } ND +/Scircumflex { +0 667 hsbw +-13 122 hstem +608 120 hstem +853 71 hstem +62 138 vstem +474 144 vstem +36 233 rmoveto +18 -160 96 -86 182 0 rrcurveto +159 0 127 84 0 137 rrcurveto +0 147 -96 55 -168 37 rrcurveto +-96 21 -58 6 0 64 rrcurveto +0 53 60 17 62 0 rrcurveto +81 0 38 -30 12 -73 rrcurveto +145 6 rlineto +-6 132 -89 85 -180 0 rrcurveto +-141 0 -120 -77 0 -123 rrcurveto +0 -120 82 -59 147 -36 rrcurveto +114 -28 69 -7 0 -70 rrcurveto +0 -54 -48 -45 -93 0 rrcurveto +-88 0 -52 43 -16 95 rrcurveto +-141 -14 rlineto +closepath +132 547 rmoveto +111 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/scircumflex { +0 556 hsbw +-12 99 hstem +432 98 hstem +657 71 hstem +42 128 vstem +370 138 vstem +23 148 rmoveto +25 -99 82 -61 142 0 rrcurveto +156 0 80 79 0 95 rrcurveto +0 107 -94 28 -102 28 rrcurveto +-76 17 -66 -7 0 54 rrcurveto +0 36 43 7 50 0 rrcurveto +57 0 30 -23 11 -40 rrcurveto +129 24 rlineto +-26 90 -62 47 -141 0 rrcurveto +-150 0 -69 -70 0 -89 rrcurveto +0 -130 92 -14 180 -39 rrcurveto +37 -8 19 -8 0 -28 rrcurveto +0 -47 -45 -10 -53 0 rrcurveto +-64 0 -35 28 -12 54 rrcurveto +-138 -21 rlineto +closepath +90 436 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/Tbar { +0 611 hsbw +0 361 hstem +595 121 hstem +234 144 vstem +234 270 rmoveto +0 -270 rlineto +144 0 rlineto +0 270 rlineto +154 0 rlineto +0 91 rlineto +-154 0 rlineto +0 234 rlineto +212 0 rlineto +0 121 rlineto +-569 0 rlineto +0 -121 rlineto +213 0 rlineto +0 -234 rlineto +-153 0 rlineto +0 -91 rlineto +153 0 rlineto +closepath +endchar } ND +/tbar { +0 333 hsbw +-12 118 215 81 409 110 hstem3 +79 137 vstem +216 296 rmoveto +0 113 rlineto +94 0 rlineto +0 110 rlineto +-94 0 rlineto +0 183 rlineto +-137 -80 rlineto +0 -103 rlineto +-64 0 rlineto +0 -110 rlineto +64 0 rlineto +0 -113 rlineto +-69 0 rlineto +0 -85 rlineto +69 0 rlineto +0 -28 rlineto +0 -133 24 -62 109 0 rrcurveto +40 0 37 7 32 14 rrcurveto +-12 106 rlineto +-24 -9 -19 -4 -12 0 rrcurveto +-22 0 -15 15 0 16 rrcurveto +0 78 rlineto +85 0 rlineto +0 85 rlineto +-86 0 rlineto +closepath +endchar } ND +/Utilde { +0 722 hsbw +-12 123 hstem +696 20 hstem +781 123 hstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +179 63 rmoveto +1 32 13 11 20 0 rrcurveto +14 0 27 -8 25 -9 rrcurveto +39 -14 19 -10 30 0 rrcurveto +52 0 35 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -19 5 -27 12 rrcurveto +-40 18 -15 7 -30 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/utilde { +0 611 hsbw +-12 105 hstem +499 20 hstem +590 123 hstem +133 63 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-217 588 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 19 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/Umacron { +0 722 hsbw +-12 123 hstem +696 20 hstem +780 91 hstem +72 144 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +132 64 rmoveto +314 0 rlineto +0 91 rlineto +-314 0 rlineto +0 -91 rlineto +closepath +endchar } ND +/umacron { +0 611 hsbw +-12 105 hstem +499 20 hstem +604 90 hstem +69 137 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-265 604 rmoveto +314 0 rlineto +0 90 rlineto +-314 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/Ubreve { +0 722 hsbw +-12 123 hstem +696 20 hstem +776 72 hstem +72 144 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +373 202 rmoveto +-4 -47 -28 -23 -53 0 rrcurveto +-54 0 -27 23 -5 47 rrcurveto +-66 0 rlineto +6 -88 59 -54 87 0 rrcurveto +86 0 58 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/ubreve { +0 611 hsbw +-12 105 hstem +499 20 hstem +586 142 hstem +69 137 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-23 728 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/Uogonek { +0 722 hsbw +-210 75 hstem +696 20 hstem +72 144 vstem +294 81 vstem +498 145 vstem +379 -12 rmoveto +204 11 60 105 0 236 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -17 -72 -120 0 rrcurveto +-122 0 -23 71 0 146 rrcurveto +0 388 rlineto +-144 0 rlineto +0 -382 rlineto +0 -225 55 -100 180 -19 rrcurveto +-9 -34 -4 -28 0 -22 rrcurveto +0 -74 48 -42 72 0 rrcurveto +32 0 32 7 34 14 rrcurveto +0 65 rlineto +-25 -7 -22 -4 -20 0 rrcurveto +-47 0 -23 26 0 52 rrcurveto +0 12 1 15 3 18 rrcurveto +closepath +endchar } ND +/uogonek { +0 611 hsbw +-211 75 hstem +-12 105 hstem +499 20 hstem +69 137 vstem +399 80 vstem +486 0 rmoveto +55 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -136 -13 -71 -98 0 rrcurveto +-92 0 6 71 0 116 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 60 -75 112 0 rrcurveto +69 0 67 36 36 54 rrcurveto +0 -78 rlineto +-10 -40 -4 -32 0 -23 rrcurveto +0 -76 51 -40 68 0 rrcurveto +32 0 33 7 33 14 rrcurveto +0 66 rlineto +-25 -8 -22 -4 -20 0 rrcurveto +-47 0 -23 26 0 51 rrcurveto +0 22 2 20 5 17 rrcurveto +closepath +endchar } ND +/Wcircumflex { +0 944 hsbw +0 216 hstem +535 181 hstem +853 71 hstem +3 148 vstem +307 110 vstem +527 110 vstem +797 146 vstem +174 0 rmoveto +157 0 rlineto +142 535 rlineto +143 -535 rlineto +153 0 rlineto +174 716 rlineto +-146 0 rlineto +-109 -500 rlineto +-126 500 rlineto +-172 0 rlineto +-131 -492 rlineto +-108 492 rlineto +-148 0 rlineto +171 -716 rlineto +closepath +133 780 rmoveto +110 0 rlineto +53 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/wcircumflex { +0 778 hsbw +0 179 hstem +333 186 hstem +657 71 hstem +4 134 vstem +224 111 vstem +444 111 vstem +642 135 vstem +168 0 rmoveto +134 0 rlineto +88 333 rlineto +89 -333 rlineto +132 0 rlineto +166 519 rlineto +-135 0 rlineto +-99 -340 rlineto +-86 340 rlineto +-133 0 rlineto +-89 -340 rlineto +-97 340 rlineto +-134 0 rlineto +164 -519 rlineto +closepath +56 584 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +endchar } ND +/Ycircumflex { +0 667 hsbw +0 433 hstem +696 20 hstem +853 71 hstem +-1 171 264 141 501 167 vstem3 +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +-88 780 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/ycircumflex { +0 556 hsbw +-210 109 hstem +499 20 hstem +657 71 hstem +113 111 vstem +333 110 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +106 65 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +endchar } ND +/longs { +0 278 hsbw +0 20 hstem +623 105 hstem +69 137 vstem +343 710 rmoveto +-38 12 -38 6 -39 0 rrcurveto +-101 0 -58 -53 0 -117 rrcurveto +0 -558 rlineto +137 0 rlineto +0 555 rlineto +0 50 13 18 42 0 rrcurveto +20 0 22 -3 22 -5 rrcurveto +18 95 rlineto +closepath +endchar } ND +/Aringacute { +0 722 hsbw +858 146 hstem +286 87 vstem +286 858 rmoveto +87 0 rlineto +134 146 rlineto +-153 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/aringacute { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +560 52 hstem +699 52 hstem +780 146 hstem +36 137 vstem +183 52 vstem +322 53 vstem +387 135 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +17 406 rmoveto +0 53 -44 43 -52 0 rrcurveto +-54 0 -42 -43 0 -53 rrcurveto +0 -52 42 -43 54 0 rrcurveto +52 0 44 43 0 52 rrcurveto +closepath +-53 0 rmoveto +0 -24 -19 -19 -24 0 rrcurveto +-24 0 -20 19 0 24 rrcurveto +0 24 20 20 24 0 rrcurveto +24 0 19 -20 0 -24 rrcurveto +closepath +-119 125 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/AEacute { +0 1000 hsbw +0 121 hstem +168 125 hstem +314 122 hstem +607 109 hstem +780 146 hstem +-42 160 vstem +441 143 vstem +-42 0 rmoveto +160 0 rlineto +73 168 rlineto +248 0 rlineto +0 -168 rlineto +513 0 rlineto +0 121 rlineto +-368 0 rlineto +0 193 rlineto +327 0 rlineto +0 122 rlineto +-327 0 rlineto +0 159 rlineto +354 0 rlineto +0 121 rlineto +-646 0 rlineto +-334 -716 rlineto +closepath +287 293 rmoveto +140 314 rlineto +56 0 rlineto +0 -314 rlineto +-196 0 rlineto +closepath +180 487 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/aeacute { +0 889 hsbw +-12 97 219 80 433 97 hstem3 +582 146 hstem +43 137 vstem +361 136 vstem +707 135 vstem +701 166 rmoveto +-18 -51 -32 -22 -46 0 rrcurveto +-56 0 -42 36 -10 90 rrcurveto +345 0 rlineto +0 190 -77 121 -171 0 rrcurveto +-54 0 -47 -16 -40 -32 rrcurveto +-38 32 -53 16 -68 0 rrcurveto +-143 0 -61 -46 -32 -100 rrcurveto +124 -24 rlineto +13 45 30 20 52 0 rrcurveto +58 0 27 -25 0 -49 rrcurveto +0 -14 rlineto +-45 -16 -72 -15 -43 -8 rrcurveto +-120 -25 -39 -44 0 -88 rrcurveto +0 -88 65 -65 111 0 rrcurveto +77 0 79 32 46 40 rrcurveto +50 -48 63 -24 72 0 rrcurveto +117 0 76 51 36 103 rrcurveto +-134 24 rlineto +closepath +6 139 rmoveto +-207 0 rlineto +-2 20 5 23 12 24 rrcurveto +17 34 29 19 39 0 rrcurveto +67 0 35 -40 5 -80 rrcurveto +closepath +-346 -57 rmoveto +0 -143 -30 -20 -74 0 rrcurveto +-46 0 -31 30 0 38 rrcurveto +0 65 52 -4 129 34 rrcurveto +closepath +8 334 rmoveto +87 0 rlineto +134 146 rlineto +-153 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/Oslashacute { +0 778 hsbw +-12 117 hstem +605 123 hstem +780 146 hstem +43 149 vstem +314 87 vstem +588 149 vstem +605 664 rmoveto +-58 42 -72 22 -86 0 rrcurveto +-211 0 -135 -140 0 -226 rrcurveto +0 -102 23 -83 48 -63 rrcurveto +-83 -93 rlineto +69 -61 rlineto +79 89 rlineto +54 -41 71 -20 90 0 rrcurveto +206 0 137 139 0 227 rrcurveto +0 96 -25 90 -44 59 rrcurveto +82 91 rlineto +-68 60 rlineto +-77 -86 rlineto +closepath +-90 -101 rmoveto +-301 -337 rlineto +-15 36 -7 45 0 52 rrcurveto +0 164 79 82 119 0 rrcurveto +50 0 42 -14 33 -28 rrcurveto +closepath +53 -77 rmoveto +13 -34 7 -44 0 -52 rrcurveto +0 -167 -83 -84 -116 0 rrcurveto +-48 0 -40 14 -33 30 rrcurveto +300 337 rlineto +closepath +-254 294 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/oslashacute { +0 611 hsbw +-12 107 hstem +425 105 hstem +582 146 hstem +42 137 vstem +230 87 vstem +441 137 vstem +462 488 rmoveto +-44 28 -51 14 -57 0 rrcurveto +-158 0 -110 -112 0 -156 rrcurveto +0 -70 24 -68 39 -48 rrcurveto +-56 -65 rlineto +54 -47 rlineto +56 65 rlineto +44 -28 50 -13 56 0 rrcurveto +153 0 116 116 0 155 rrcurveto +0 69 -25 66 -38 47 rrcurveto +52 60 rlineto +-54 45 rlineto +-51 -58 rlineto +closepath +-77 -89 rmoveto +-193 -222 rlineto +-9 25 -4 29 0 33 rrcurveto +0 101 57 60 75 0 rrcurveto +27 0 25 -9 22 -17 rrcurveto +closepath +42 -60 rmoveto +9 -26 5 -28 0 -30 rrcurveto +0 -102 -58 -58 -74 0 rrcurveto +-28 0 -24 7 -22 16 rrcurveto +192 221 rlineto +closepath +-197 243 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/anoteleia { +0 333 hsbw +381 138 hstem +98 137 vstem +98 381 rmoveto +137 0 rlineto +0 138 rlineto +-137 0 rlineto +0 -138 rlineto +closepath +endchar } ND +/Wgrave { +0 944 hsbw +0 216 hstem +535 181 hstem +780 146 hstem +3 148 vstem +460 87 vstem +616 153 vstem +797 146 vstem +174 0 rmoveto +157 0 rlineto +142 535 rlineto +143 -535 rlineto +153 0 rlineto +174 716 rlineto +-146 0 rlineto +-109 -500 rlineto +-126 500 rlineto +-172 0 rlineto +-131 -492 rlineto +-108 492 rlineto +-148 0 rlineto +171 -716 rlineto +closepath +373 780 rmoveto +-68 146 rlineto +-153 0 rlineto +134 -146 rlineto +87 0 rlineto +closepath +endchar } ND +/wgrave { +0 778 hsbw +0 179 hstem +333 186 hstem +582 146 hstem +4 134 vstem +168 134 vstem +377 87 vstem +479 132 vstem +642 135 vstem +168 0 rmoveto +134 0 rlineto +88 333 rlineto +89 -333 rlineto +132 0 rlineto +166 519 rlineto +-135 0 rlineto +-99 -340 rlineto +-86 340 rlineto +-133 0 rlineto +-89 -340 rlineto +-97 340 rlineto +-134 0 rlineto +164 -519 rlineto +closepath +296 582 rmoveto +-68 146 rlineto +-153 0 rlineto +134 -146 rlineto +87 0 rlineto +closepath +endchar } ND +/Wacute { +0 944 hsbw +0 216 hstem +535 181 hstem +780 146 hstem +3 148 vstem +174 157 vstem +396 87 vstem +616 153 vstem +797 146 vstem +174 0 rmoveto +157 0 rlineto +142 535 rlineto +143 -535 rlineto +153 0 rlineto +174 716 rlineto +-146 0 rlineto +-109 -500 rlineto +-126 500 rlineto +-172 0 rlineto +-131 -492 rlineto +-108 492 rlineto +-148 0 rlineto +171 -716 rlineto +closepath +222 780 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/wacute { +0 778 hsbw +0 179 hstem +333 186 hstem +582 146 hstem +4 134 vstem +168 134 vstem +313 87 vstem +479 132 vstem +642 135 vstem +168 0 rmoveto +134 0 rlineto +88 333 rlineto +89 -333 rlineto +132 0 rlineto +166 519 rlineto +-135 0 rlineto +-99 -340 rlineto +-86 340 rlineto +-133 0 rlineto +-89 -340 rlineto +-97 340 rlineto +-134 0 rlineto +164 -519 rlineto +closepath +145 582 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/Wdieresis { +0 944 hsbw +0 216 hstem +535 181 hstem +780 118 hstem +3 148 vstem +308 118 vstem +518 118 vstem +797 146 vstem +174 0 rmoveto +157 0 rlineto +142 535 rlineto +143 -535 rlineto +153 0 rlineto +174 716 rlineto +-146 0 rlineto +-109 -500 rlineto +-126 500 rlineto +-172 0 rlineto +-131 -492 rlineto +-108 492 rlineto +-148 0 rlineto +171 -716 rlineto +closepath +134 780 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/wdieresis { +0 778 hsbw +0 179 hstem +333 186 hstem +610 118 hstem +4 134 vstem +225 118 vstem +435 118 vstem +642 135 vstem +168 0 rmoveto +134 0 rlineto +88 333 rlineto +89 -333 rlineto +132 0 rlineto +166 519 rlineto +-135 0 rlineto +-99 -340 rlineto +-86 340 rlineto +-133 0 rlineto +-89 -340 rlineto +-97 340 rlineto +-134 0 rlineto +164 -519 rlineto +closepath +57 610 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Ygrave { +0 667 hsbw +0 433 hstem +696 20 hstem +780 146 hstem +-1 171 264 141 501 167 vstem3 +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +148 780 rmoveto +-68 146 rlineto +-153 0 rlineto +134 -146 rlineto +87 0 rlineto +closepath +endchar } ND +/ygrave { +0 556 hsbw +-210 109 hstem +499 20 hstem +582 146 hstem +7 146 vstem +267 86 vstem +398 142 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +346 63 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/quotereversed { +0 278 hsbw +579 137 hstem +73 71 vstem +210 716 rmoveto +-137 0 rlineto +0 -99 rlineto +0 -103 32 -62 89 -34 rrcurveto +27 58 rlineto +-50 14 -26 35 -1 54 rrcurveto +66 0 rlineto +0 137 rlineto +closepath +endchar } ND +/radicalex { +0 333 hsbw +604 90 hstem +-20 374 vstem +-20 604 rmoveto +374 0 rlineto +0 90 rlineto +-374 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/afii08941 { +0 556 hsbw +-12 323 hstem +363 91 hstem +619 109 hstem +63 133 vstem +99 220 rmoveto +-15 -43 -31 -38 -47 -33 rrcurveto +53 -118 rlineto +40 28 40 14 41 0 rrcurveto +23 0 36 -7 51 -14 rrcurveto +47 -13 39 -7 29 0 rrcurveto +48 0 45 11 43 23 rrcurveto +-53 116 rlineto +-40 -18 -34 -9 -26 0 rrcurveto +-14 0 -18 2 -22 6 rrcurveto +-47 13 -33 5 -18 0 rrcurveto +-27 0 -22 -5 -18 -8 rrcurveto +34 40 22 31 8 24 rrcurveto +140 0 rlineto +0 91 rlineto +-131 0 rlineto +0 3 -1 5 -2 9 rrcurveto +-2 7 -3 12 -2 16 rrcurveto +141 0 rlineto +0 91 rlineto +-165 0 rlineto +-8 30 -4 24 0 18 rrcurveto +0 48 32 45 59 0 rrcurveto +51 0 31 -33 12 -65 rrcurveto +133 19 rlineto +-19 126 -85 62 -118 0 rrcurveto +-132 0 -97 -80 0 -124 rrcurveto +0 -23 2 -23 6 -24 rrcurveto +-65 0 rlineto +0 -91 rlineto +89 0 rlineto +4 -16 4 -17 4 -19 rrcurveto +-101 0 rlineto +0 -91 rlineto +93 0 rlineto +closepath +endchar } ND +/estimated { +0 600 hsbw +-17 36 hstem +259 36 hstem +500 35 hstem +44 113 vstem +157 259 rmoveto +404 0 rlineto +-8 182 -111 94 -140 0 rrcurveto +-152 0 -106 -115 0 -161 rrcurveto +0 -159 104 -117 154 0 rrcurveto +80 0 70 23 78 112 rrcurveto +-35 21 rlineto +-46 -80 -65 -40 -82 0 rrcurveto +-58 0 -49 19 -38 40 rrcurveto +0 181 rlineto +closepath +291 36 rmoveto +-291 0 rlineto +0 145 rlineto +39 40 48 20 57 0 rrcurveto +56 0 49 -20 42 -40 rrcurveto +0 -145 rlineto +closepath +endchar } ND +/oneeighth { +0 834 hsbw +-26 68 hstem +142 68 hstem +282 67 hstem +355 370 hstem +149 93 vstem +533 88 vstem +710 88 vstem +242 355 rmoveto +0 370 rlineto +-75 0 rlineto +-14 -38 -51 -38 -57 -16 rrcurveto +0 -75 rlineto +39 10 35 15 30 22 rrcurveto +0 -250 rlineto +93 0 rlineto +closepath +2 -381 rmoveto +424 751 rlineto +-78 0 rlineto +-424 -751 rlineto +78 0 rlineto +closepath +337 204 rmoveto +-40 -21 -19 -30 0 -40 rrcurveto +0 -67 58 -46 90 0 rrcurveto +86 0 56 48 0 68 rrcurveto +0 42 -21 30 -40 16 rrcurveto +31 17 16 24 0 31 rrcurveto +0 62 -57 37 -76 0 rrcurveto +-84 0 -48 -43 0 -54 rrcurveto +0 -34 16 -25 32 -15 rrcurveto +closepath +40 66 rmoveto +0 25 15 13 30 0 rrcurveto +29 0 15 -12 0 -24 rrcurveto +0 -24 -15 -12 -29 0 rrcurveto +-30 0 -15 11 0 23 rrcurveto +closepath +-7 -152 rmoveto +0 30 21 20 32 0 rrcurveto +32 0 21 -20 0 -30 rrcurveto +0 -32 -23 -18 -30 0 rrcurveto +-30 0 -23 19 0 31 rrcurveto +closepath +endchar } ND +/threeeighths { +0 834 hsbw +-26 68 hstem +142 68 hstem +282 67 hstem +520 64 hstem +655 70 hstem +201 93 vstem +533 89 vstem +710 88 vstem +244 -26 rmoveto +424 751 rlineto +-77 0 rlineto +-425 -751 rlineto +78 0 rlineto +closepath +-224 488 rmoveto +6 -70 58 -43 82 0 rrcurveto +84 0 63 50 0 70 rrcurveto +0 41 -22 29 -44 16 rrcurveto +31 18 16 25 0 30 rrcurveto +0 52 -54 45 -77 0 rrcurveto +-78 0 -46 -35 -14 -70 rrcurveto +87 -13 rlineto +3 32 16 16 30 0 rrcurveto +26 0 14 -11 0 -21 rrcurveto +0 -26 -22 -13 -44 0 rrcurveto +-11 -71 rlineto +18 4 15 3 10 0 rrcurveto +32 0 19 -20 0 -28 rrcurveto +0 -31 -21 -22 -32 0 rrcurveto +-32 0 -19 17 -4 36 rrcurveto +-90 -10 rlineto +closepath +561 -284 rmoveto +-40 -20 -19 -30 0 -41 rrcurveto +0 -70 62 -43 86 0 rrcurveto +82 0 60 45 0 71 rrcurveto +0 42 -20 30 -40 16 rrcurveto +30 17 16 24 0 31 rrcurveto +0 56 -49 43 -84 0 rrcurveto +-84 0 -48 -43 0 -54 rrcurveto +0 -34 16 -25 32 -15 rrcurveto +closepath +41 66 rmoveto +0 25 14 13 30 0 rrcurveto +29 0 15 -12 0 -24 rrcurveto +0 -24 -15 -12 -29 0 rrcurveto +-30 0 -14 11 0 23 rrcurveto +closepath +-8 -152 rmoveto +0 30 20 20 34 0 rrcurveto +30 0 22 -20 0 -30 rrcurveto +0 -32 -22 -18 -30 0 rrcurveto +-31 0 -23 19 0 31 rrcurveto +closepath +endchar } ND +/fiveeighths { +0 834 hsbw +-26 68 hstem +142 68 hstem +282 67 hstem +350 375 hstem +226 94 vstem +533 89 vstem +710 88 vstem +244 -26 rmoveto +424 751 rlineto +-77 0 rlineto +-425 -751 rlineto +78 0 rlineto +closepath +-221 485 rmoveto +9 -70 56 -40 83 0 rrcurveto +96 0 53 66 0 66 rrcurveto +0 72 -57 53 -77 0 rrcurveto +-16 0 -15 -3 -15 -4 rrcurveto +8 42 rlineto +154 0 rlineto +0 77 rlineto +-225 0 rlineto +-44 -197 rlineto +75 -9 rlineto +17 17 20 9 23 0 rrcurveto +38 0 20 -20 0 -39 rrcurveto +0 -39 -22 -23 -33 0 rrcurveto +-32 0 -19 16 -4 34 rrcurveto +-93 -8 rlineto +closepath +558 -281 rmoveto +-40 -20 -19 -30 0 -41 rrcurveto +0 -70 62 -43 86 0 rrcurveto +82 0 60 45 0 71 rrcurveto +0 42 -20 30 -40 16 rrcurveto +30 17 16 24 0 31 rrcurveto +0 56 -48 43 -85 0 rrcurveto +-84 0 -48 -43 0 -54 rrcurveto +0 -34 16 -25 32 -15 rrcurveto +closepath +41 66 rmoveto +0 25 14 13 30 0 rrcurveto +29 0 15 -12 0 -24 rrcurveto +0 -24 -15 -12 -29 0 rrcurveto +-30 0 -14 11 0 23 rrcurveto +closepath +-8 -152 rmoveto +0 30 21 20 32 0 rrcurveto +32 0 21 -20 0 -30 rrcurveto +0 -32 -23 -18 -29 0 rrcurveto +-31 0 -23 19 0 31 rrcurveto +closepath +endchar } ND +/seveneighths { +0 834 hsbw +-26 68 hstem +142 68 hstem +282 443 hstem +80 89 vstem +533 89 vstem +710 88 vstem +220 -26 rmoveto +425 751 rlineto +-78 0 rlineto +-424 -751 rlineto +77 0 rlineto +closepath +-197 668 rmoveto +175 0 rlineto +-15 -19 rlineto +-47 -55 -55 -101 -1 -112 rrcurveto +89 0 rlineto +0 11 rlineto +0 94 59 128 84 71 rrcurveto +0 59 rlineto +-289 0 rlineto +0 -76 rlineto +closepath +558 -464 rmoveto +-40 -22 -19 -30 0 -38 rrcurveto +0 -71 63 -43 84 0 rrcurveto +85 0 58 48 0 67 rrcurveto +0 40 -20 29 -40 20 rrcurveto +30 18 16 24 0 30 rrcurveto +0 60 -51 39 -81 0 rrcurveto +-86 0 -47 -44 0 -53 rrcurveto +0 -34 16 -24 32 -16 rrcurveto +closepath +41 68 rmoveto +0 24 14 12 30 0 rrcurveto +29 0 15 -12 0 -24 rrcurveto +0 -24 -15 -12 -29 0 rrcurveto +-30 0 -14 12 0 24 rrcurveto +closepath +-8 -152 rmoveto +0 25 18 23 35 0 rrcurveto +35 0 18 -17 0 -33 rrcurveto +0 -32 -23 -18 -29 0 rrcurveto +-31 0 -23 18 0 34 rrcurveto +closepath +endchar } ND +/commaaccent { +0 333 hsbw +-145 90 hstem +158 81 vstem +93 -55 rmoveto +0 -90 rlineto +65 0 rlineto +0 -32 -22 -22 -44 -12 rrcurveto +18 -65 rlineto +90 24 39 49 0 104 rrcurveto +0 44 rlineto +-146 0 rlineto +closepath +endchar } ND +/undercommaaccent { +0 333 hsbw +-206 62 hstem +-70 60 hstem +189 96 vstem +91 -13 rmoveto +0 -57 rlineto +26 0 rlineto +48 0 24 -11 0 -22 rrcurveto +0 -27 -31 -14 -61 0 rrcurveto +-26 0 -26 2 -26 3 rrcurveto +0 -59 rlineto +27 -5 28 -3 28 0 rrcurveto +121 0 62 43 0 64 rrcurveto +0 60 -47 29 -92 0 rrcurveto +-18 0 -18 -1 -19 -2 rrcurveto +closepath +endchar } ND +/tonos { +0 333 hsbw +582 146 hstem +91 87 vstem +91 582 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/dieresistonos { +0 465 hsbw +582 146 hstem +-6 118 vstem +144 88 vstem +353 118 vstem +196 728 rmoveto +-52 -146 rlineto +88 0 rlineto +110 146 rlineto +-146 0 rlineto +closepath +157 -146 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +-359 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Alphatonos { +0 722 hsbw +0 20 hstem +163 120 hstem +589 127 hstem +-12 100 vstem +281 153 vstem +563 158 vstem +721 0 rmoveto +-287 716 rlineto +-153 0 rlineto +-279 -716 rlineto +154 0 rlineto +59 163 rlineto +285 0 rlineto +63 -163 rlineto +158 0 rlineto +closepath +-267 283 rmoveto +-195 0 rlineto +96 266 rlineto +99 -266 rlineto +closepath +-466 306 rmoveto +100 0 rlineto +161 127 rlineto +-183 0 rlineto +-78 -127 rlineto +closepath +endchar } ND +/Epsilontonos { +0 853 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +-34 100 vstem +259 144 vstem +259 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +-293 589 rmoveto +100 0 rlineto +161 127 rlineto +-183 0 rlineto +-78 -127 rlineto +closepath +endchar } ND +/Etatonos { +0 906 hsbw +0 434 hstem +589 127 hstem +-34 100 vstem +259 144 vstem +687 144 vstem +259 0 rmoveto +144 0 rlineto +0 313 rlineto +284 0 rlineto +0 -313 rlineto +144 0 rlineto +0 716 rlineto +-144 0 rlineto +0 -282 rlineto +-284 0 rlineto +0 282 rlineto +-144 0 rlineto +0 -716 rlineto +closepath +-293 589 rmoveto +100 0 rlineto +161 127 rlineto +-183 0 rlineto +-78 -127 rlineto +closepath +endchar } ND +/Iotatonos { +0 474 hsbw +0 20 hstem +589 127 hstem +-34 100 vstem +259 144 vstem +259 0 rmoveto +144 0 rlineto +0 716 rlineto +-144 0 rlineto +0 -716 rlineto +closepath +-293 589 rmoveto +100 0 rlineto +161 127 rlineto +-183 0 rlineto +-78 -127 rlineto +closepath +endchar } ND +/Omicrontonos { +0 825 hsbw +-12 123 hstem +604 124 hstem +-44 100 vstem +89 149 vstem +634 149 vstem +89 354 rmoveto +0 -218 128 -148 230 0 rrcurveto +202 0 134 143 0 226 rrcurveto +0 225 -130 146 -218 0 rrcurveto +-218 0 -128 -142 0 -232 rrcurveto +closepath +149 4 rmoveto +0 154 71 92 128 0 rrcurveto +121 0 76 -84 0 -160 rrcurveto +0 -171 -86 -78 -112 0 rrcurveto +-119 0 -79 91 0 156 rrcurveto +closepath +-282 231 rmoveto +100 0 rlineto +160 127 rlineto +-182 0 rlineto +-78 -127 rlineto +closepath +endchar } ND +/Upsilontonos { +0 927 hsbw +0 433 hstem +589 127 hstem +-27 99 vstem +259 172 525 140 762 166 vstem3 +521 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-166 0 rlineto +-166 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +-548 589 rmoveto +99 0 rlineto +161 127 rlineto +-182 0 rlineto +-78 -127 rlineto +closepath +endchar } ND +/Omegatonos { +0 838 hsbw +0 121 hstem +604 124 hstem +-49 100 vstem +96 149 vstem +630 149 vstem +84 0 rmoveto +328 0 rlineto +0 115 rlineto +-104 41 -63 87 0 131 rrcurveto +0 124 66 106 127 0 rrcurveto +120 0 72 -101 0 -129 rrcurveto +0 -120 -58 -98 -110 -41 rrcurveto +0 -115 rlineto +329 0 rlineto +0 121 rlineto +-140 0 rlineto +85 88 43 96 0 104 rrcurveto +0 180 -131 139 -210 0 rrcurveto +-214 0 -128 -141 0 -178 rrcurveto +0 -104 42 -96 85 -88 rrcurveto +-139 0 rlineto +0 -121 rlineto +closepath +-133 589 rmoveto +100 0 rlineto +160 127 rlineto +-182 0 rlineto +-78 -127 rlineto +closepath +endchar } ND +/iotadieresistonos { +0 278 hsbw +0 20 hstem +499 20 hstem +582 146 hstem +-105 118 70 127 254 118 vstem3 +70 0 rmoveto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -519 rlineto +closepath +27 728 rmoveto +-52 -146 rlineto +88 0 rlineto +110 146 rlineto +-146 0 rlineto +closepath +157 -146 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +-359 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Alpha { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +0 153 282 150 561 153 vstem3 +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +endchar } ND +/Beta { +0 722 hsbw +0 121 hstem +312 119 hstem +597 119 hstem +73 145 vstem +497 141 vstem +73 716 rmoveto +0 -716 rlineto +244 0 rlineto +250 0 106 52 0 156 rrcurveto +0 82 -48 64 -88 26 rrcurveto +61 28 40 60 0 68 rrcurveto +0 129 -113 51 -166 0 rrcurveto +-286 0 rlineto +closepath +145 -119 rmoveto +83 0 rlineto +133 0 63 8 0 -90 rrcurveto +0 -86 -60 2 -124 0 rrcurveto +-95 0 rlineto +0 166 rlineto +closepath +0 -285 rmoveto +116 0 rlineto +124 0 65 -6 0 -92 rrcurveto +0 -91 -53 -2 -118 0 rrcurveto +-134 0 rlineto +0 191 rlineto +closepath +endchar } ND +/Delta { +0 719 hsbw +0 121 hstem +549 167 hstem +0 718 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +718 0 rlineto +closepath +-203 121 rmoveto +-318 0 rlineto +157 428 rlineto +161 -428 rlineto +closepath +endchar } ND +/Epsilon { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +73 144 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Zeta { +0 611 hsbw +0 121 hstem +595 121 hstem +11 174 vstem +11 0 rmoveto +581 0 rlineto +0 121 rlineto +-407 0 rlineto +392 483 rlineto +0 112 rlineto +-524 0 rlineto +0 -121 rlineto +334 0 rlineto +-376 -465 rlineto +0 -130 rlineto +closepath +endchar } ND +/Eta { +0 722 hsbw +0 434 hstem +696 20 hstem +73 145 vstem +501 145 vstem +73 0 rmoveto +145 0 rlineto +0 313 rlineto +283 0 rlineto +0 -313 rlineto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -282 rlineto +-283 0 rlineto +0 282 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Iota { +0 278 hsbw +0 20 hstem +696 20 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Kappa { +0 722 hsbw +0 398 hstem +696 20 hstem +75 144 vstem +533 187 vstem +75 0 rmoveto +144 0 rlineto +0 216 rlineto +117 120 rlineto +197 -336 rlineto +187 0 rlineto +-284 437 rlineto +270 279 rlineto +-195 0 rlineto +-292 -318 rlineto +0 318 rlineto +-144 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Lambda { +0 667 hsbw +0 20 hstem +529 187 hstem +0 153 256 155 514 153 vstem3 +411 716 rmoveto +-155 0 rlineto +-256 -716 rlineto +153 0 rlineto +176 529 rlineto +181 -529 rlineto +157 0 rlineto +-256 716 rlineto +closepath +endchar } ND +/Mu { +0 833 hsbw +0 228 hstem +563 153 hstem +71 134 347 139 628 134 vstem3 +71 0 rmoveto +134 0 rlineto +0 563 rlineto +142 -563 rlineto +139 0 rlineto +142 563 rlineto +0 -563 rlineto +134 0 rlineto +0 716 rlineto +-217 0 rlineto +-128 -488 rlineto +-130 488 rlineto +-216 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Nu { +0 722 hsbw +0 238 hstem +467 249 hstem +74 134 vstem +508 134 vstem +74 0 rmoveto +134 0 rlineto +0 467 rlineto +289 -467 rlineto +145 0 rlineto +0 716 rlineto +-134 0 rlineto +0 -478 rlineto +-293 478 rlineto +-141 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Xi { +0 644 hsbw +0 121 hstem +316 122 hstem +595 121 hstem +90 464 vstem +63 716 rmoveto +0 -121 rlineto +518 0 rlineto +0 121 rlineto +-518 0 rlineto +closepath +27 -278 rmoveto +0 -122 rlineto +464 0 rlineto +0 122 rlineto +-464 0 rlineto +closepath +-40 -317 rmoveto +0 -121 rlineto +544 0 rlineto +0 121 rlineto +-544 0 rlineto +closepath +endchar } ND +/Omicron { +0 778 hsbw +-12 123 hstem +604 124 hstem +43 149 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +endchar } ND +/Pi { +0 722 hsbw +0 20 hstem +595 121 hstem +75 145 vstem +503 144 vstem +75 0 rmoveto +145 0 rlineto +0 595 rlineto +283 0 rlineto +0 -595 rlineto +144 0 rlineto +0 716 rlineto +-572 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/Rho { +0 667 hsbw +0 392 hstem +595 121 hstem +73 144 vstem +472 149 vstem +73 0 rmoveto +144 0 rlineto +0 270 rlineto +95 0 rlineto +191 0 118 58 0 168 rrcurveto +0 183 -88 37 -228 0 rrcurveto +-232 0 rlineto +0 -716 rlineto +closepath +144 595 rmoveto +70 0 rlineto +119 0 66 -9 0 -92 rrcurveto +0 -86 -61 -16 -115 0 rrcurveto +-79 0 rlineto +0 203 rlineto +closepath +endchar } ND +/Sigma { +0 600 hsbw +0 121 hstem +595 121 hstem +44 168 vstem +236 181 vstem +53 716 rmoveto +0 -129 rlineto +183 -213 rlineto +-192 -240 rlineto +0 -134 rlineto +520 0 rlineto +0 121 rlineto +-352 0 rlineto +205 253 rlineto +-186 221 rlineto +318 0 rlineto +0 121 rlineto +-496 0 rlineto +closepath +endchar } ND +/Tau { +0 611 hsbw +0 20 hstem +595 121 hstem +234 144 vstem +234 0 rmoveto +144 0 rlineto +0 595 rlineto +212 0 rlineto +0 121 rlineto +-569 0 rlineto +0 -121 rlineto +213 0 rlineto +0 -595 rlineto +closepath +endchar } ND +/Upsilon { +0 667 hsbw +0 433 hstem +696 20 hstem +-1 171 264 141 501 167 vstem3 +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +endchar } ND +/Chi { +0 667 hsbw +0 20 hstem +696 20 hstem +23 169 vstem +476 168 vstem +0 0 rmoveto +173 0 rlineto +160 248 rlineto +158 -248 rlineto +175 0 rlineto +-245 368 rlineto +223 348 rlineto +-168 0 rlineto +-141 -230 rlineto +-143 230 rlineto +-169 0 rlineto +222 -342 rlineto +-245 -374 rlineto +closepath +endchar } ND +/Psi { +0 809 hsbw +0 331 hstem +696 20 hstem +41 146 333 143 623 144 vstem3 +42 716 rmoveto +0 -192 rlineto +0 -212 85 -99 206 -5 rrcurveto +0 -208 rlineto +144 0 rlineto +0 208 rlineto +207 4 83 103 0 209 rrcurveto +0 192 rlineto +-144 0 rlineto +0 -168 rlineto +0 -135 -21 -82 -125 0 rrcurveto +0 385 rlineto +-144 0 rlineto +0 -385 rlineto +-111 1 -35 49 0 167 rrcurveto +0 168 rlineto +-145 0 rlineto +closepath +endchar } ND +/Omega { +0 802 hsbw +0 121 hstem +604 124 hstem +59 149 vstem +593 149 vstem +48 0 rmoveto +327 0 rlineto +0 115 rlineto +-110 41 -57 96 0 122 rrcurveto +0 124 66 106 127 0 rrcurveto +126 0 66 -108 0 -122 rrcurveto +0 -120 -57 -98 -110 -41 rrcurveto +0 -115 rlineto +328 0 rlineto +0 121 rlineto +-139 0 rlineto +84 88 43 96 0 104 rrcurveto +0 180 -131 139 -210 0 rrcurveto +-212 0 -130 -141 0 -178 rrcurveto +0 -104 42 -96 86 -88 rrcurveto +-139 0 rlineto +0 -121 rlineto +closepath +endchar } ND +/Iotadieresis { +0 278 hsbw +0 20 hstem +696 20 hstem +764 118 hstem +-25 117 vstem +185 118 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-93 764 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/Upsilondieresis { +0 667 hsbw +0 433 hstem +696 20 hstem +764 118 hstem +161 118 vstem +371 118 vstem +501 167 vstem +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +-100 764 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/alphatonos { +0 615 hsbw +-12 109 hstem +421 109 hstem +582 146 hstem +38 141 vstem +253 87 vstem +395 122 vstem +464 519 rmoveto +-14 -36 -9 -30 -5 -24 rrcurveto +-44 67 -57 34 -70 0 rrcurveto +-143 0 -84 -114 0 -144 rrcurveto +0 -151 86 -133 140 0 rrcurveto +74 0 57 32 40 66 rrcurveto +4 -20 6 -19 8 -20 rrcurveto +3 -5 2 -5 0 -6 rrcurveto +1 -4 1 -4 1 -3 rrcurveto +116 0 rlineto +-35 78 -25 112 0 60 rrcurveto +0 48 27 145 38 76 rrcurveto +-118 0 rlineto +closepath +-285 -261 rmoveto +0 102 45 61 63 0 rrcurveto +60 0 48 -57 0 -106 rrcurveto +0 -110 -45 -51 -61 0 rrcurveto +-66 0 -44 65 0 96 rrcurveto +closepath +74 324 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/epsilontonos { +0 451 hsbw +-12 109 hstem +214 106 hstem +418 112 hstem +582 146 hstem +58 135 vstem +227 153 vstem +322 320 rmoveto +-86 0 -43 18 0 36 rrcurveto +0 24 23 20 46 0 rrcurveto +32 0 32 -9 34 -18 rrcurveto +81 87 rlineto +-50 34 -63 18 -76 0 rrcurveto +-135 0 -59 -67 0 -81 rrcurveto +0 -50 24 -37 48 -26 rrcurveto +-62 -27 -30 -42 0 -58 rrcurveto +0 -91 88 -63 116 0 rrcurveto +72 0 73 22 76 46 rrcurveto +-90 89 rlineto +-48 -32 -41 -16 -34 0 rrcurveto +-39 0 -32 22 0 34 rrcurveto +0 45 32 16 111 0 rrcurveto +0 106 rlineto +closepath +-163 262 rmoveto +87 0 rlineto +134 146 rlineto +-153 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/etatonos { +0 611 hsbw +-197 20 hstem +0 442 hstem +510 20 hstem +582 146 hstem +69 128 vstem +230 87 vstem +405 137 vstem +542 -197 rmoveto +0 519 rlineto +0 132 -56 76 -118 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-128 0 rlineto +0 -519 rlineto +138 0 rlineto +0 235 rlineto +0 116 23 74 90 0 rrcurveto +75 0 10 -62 0 -98 rrcurveto +0 -462 rlineto +137 0 rlineto +closepath +-312 779 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/iotatonos { +0 278 hsbw +0 20 hstem +499 20 hstem +582 146 hstem +70 138 vstem +70 0 rmoveto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -519 rlineto +closepath +-7 582 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/upsilondieresistonos { +0 582 hsbw +-12 112 hstem +499 20 hstem +582 146 hstem +53 117 vstem +203 88 vstem +412 117 vstem +58 519 rmoveto +0 -244 rlineto +0 -179 75 -108 160 0 rrcurveto +155 0 76 109 0 178 rrcurveto +0 244 rlineto +-137 0 rlineto +0 -266 rlineto +0 -115 -31 -38 -65 0 rrcurveto +-56 0 -40 26 0 127 rrcurveto +0 266 rlineto +-137 0 rlineto +closepath +196 209 rmoveto +-51 -146 rlineto +88 0 rlineto +110 146 rlineto +-147 0 rlineto +closepath +158 -146 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +-359 0 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/beta { +0 610 hsbw +-197 20 hstem +-12 109 hstem +350 76 hstem +620 108 hstem +70 138 vstem +402 131 vstem +70 -197 rmoveto +138 0 rlineto +0 273 rlineto +46 -59 57 -29 69 0 rrcurveto +118 0 75 94 0 115 rrcurveto +0 93 -50 86 -109 19 rrcurveto +68 16 51 60 0 71 rrcurveto +0 110 -96 76 -124 0 rrcurveto +-122 0 -121 -63 0 -204 rrcurveto +0 -658 rlineto +closepath +200 623 rmoveto +0 -76 rlineto +110 0 52 -61 0 -89 rrcurveto +0 -60 -40 -43 -52 0 rrcurveto +-90 0 -42 94 0 111 rrcurveto +0 148 rlineto +0 97 16 73 83 0 rrcurveto +52 0 43 -38 0 -53 rrcurveto +0 -60 -50 -42 -82 -1 rrcurveto +closepath +endchar } ND +/gamma { +0 556 hsbw +-197 363 hstem +499 20 hstem +4 147 209 135 405 141 vstem3 +209 0 rmoveto +0 -197 rlineto +138 0 rlineto +0 197 rlineto +199 519 rlineto +-141 0 rlineto +-99 -265 rlineto +-3 -7 -3 -7 -2 -8 rrcurveto +-2 -8 -2 -7 -2 -7 rrcurveto +-15 -44 rlineto +-28 88 rlineto +-98 265 rlineto +-144 0 rlineto +202 -519 rlineto +closepath +endchar } ND +/zeta { +0 460 hsbw +-210 122 hstem +602 114 hstem +38 133 vstem +301 137 vstem +90 716 rmoveto +0 -114 rlineto +192 0 rlineto +-163 -141 -81 -131 0 -120 rrcurveto +0 -110 55 -91 132 -9 rrcurveto +54 -2 22 -12 0 -30 rrcurveto +0 -22 -18 -22 -33 0 rrcurveto +-21 0 rlineto +-34 -122 rlineto +181 0 62 84 0 97 rrcurveto +0 88 -58 51 -116 15 rrcurveto +-69 9 -24 28 0 58 rrcurveto +0 113 79 154 202 138 rrcurveto +0 91 rlineto +-362 0 rlineto +closepath +endchar } ND +/eta { +0 611 hsbw +-197 20 hstem +0 442 hstem +510 20 hstem +69 128 vstem +405 137 vstem +542 -197 rmoveto +0 519 rlineto +0 132 -56 76 -118 0 rrcurveto +-69 0 -57 -30 -45 -58 rrcurveto +0 77 rlineto +-128 0 rlineto +0 -519 rlineto +138 0 rlineto +0 235 rlineto +0 116 23 74 90 0 rrcurveto +75 0 10 -62 0 -98 rrcurveto +0 -462 rlineto +137 0 rlineto +closepath +endchar } ND +/theta { +0 541 hsbw +-12 112 301 114 616 112 hstem3 +38 142 vstem +361 142 vstem +271 728 rmoveto +-156 0 -77 -123 0 -245 rrcurveto +0 -272 89 -100 144 0 rrcurveto +154 0 78 123 0 247 rrcurveto +0 246 -78 124 -154 0 rrcurveto +closepath +90 -313 rmoveto +-181 0 rlineto +5 162 30 39 56 0 rrcurveto +54 0 30 -39 6 -162 rrcurveto +closepath +0 -114 rmoveto +-6 -162 -30 -39 -54 0 rrcurveto +-56 0 -30 38 -5 163 rrcurveto +181 0 rlineto +closepath +endchar } ND +/iota { +0 278 hsbw +0 20 hstem +499 20 hstem +70 138 vstem +70 0 rmoveto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/kappa { +0 558 hsbw +0 339 hstem +499 20 hstem +69 138 vstem +390 160 vstem +69 519 rmoveto +0 -519 rlineto +138 0 rlineto +0 174 rlineto +31 33 rlineto +152 -207 rlineto +160 0 rlineto +-224 299 rlineto +208 220 rlineto +-167 0 rlineto +-160 -180 rlineto +0 180 rlineto +-138 0 rlineto +closepath +endchar } ND +/lambda { +0 556 hsbw +0 20 hstem +696 20 hstem +131 135 vstem +404 142 vstem +546 0 rmoveto +-202 518 rlineto +-78 198 rlineto +-135 0 rlineto +76 -198 rlineto +-200 -518 rlineto +141 0 rlineto +89 238 rlineto +12 34 13 39 13 42 rrcurveto +15 -50 13 -39 12 -29 rrcurveto +89 -235 rlineto +142 0 rlineto +closepath +endchar } ND +/mu { +0 612 hsbw +-197 20 hstem +-12 109 hstem +499 20 hstem +70 138 vstem +415 127 vstem +70 519 rmoveto +0 -716 rlineto +138 0 rlineto +0 260 rlineto +21 -50 34 -25 48 0 rrcurveto +43 0 35 25 26 50 rrcurveto +0 -63 rlineto +127 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -238 rlineto +0 -107 -20 -77 -81 0 rrcurveto +-81 0 -14 86 0 100 rrcurveto +0 236 rlineto +-138 0 rlineto +closepath +endchar } ND +/nu { +0 556 hsbw +0 166 hstem +499 20 hstem +2 147 214 121 403 141 vstem3 +214 0 rmoveto +124 0 rlineto +206 519 rlineto +-141 0 rlineto +-99 -265 rlineto +-3 -7 -3 -7 -1 -8 rrcurveto +-2 -8 -2 -7 -3 -7 rrcurveto +-2 -7 -5 -15 -8 -22 rrcurveto +-28 88 rlineto +-98 265 rlineto +-144 0 rlineto +209 -519 rlineto +closepath +endchar } ND +/xi { +0 445 hsbw +-210 706 hstem +610 118 hstem +62 140 vstem +304 141 vstem +197 -210 rmoveto +174 0 74 80 0 96 rrcurveto +0 71 -47 49 -94 28 rrcurveto +-95 28 -30 28 0 59 rrcurveto +0 76 79 79 126 0 rrcurveto +0 112 rlineto +-25 0 rlineto +-91 0 -66 -12 0 66 rrcurveto +0 44 38 16 111 0 rrcurveto +39 0 rlineto +0 118 rlineto +-95 0 rlineto +-172 0 -61 -70 0 -84 rrcurveto +0 -66 38 -63 92 -25 rrcurveto +-103 -56 -51 -71 0 -88 rrcurveto +0 -109 67 -58 125 -33 rrcurveto +65 -17 9 -6 0 -23 rrcurveto +0 -24 -28 -20 -48 -2 rrcurveto +-31 -123 rlineto +closepath +endchar } ND +/omicron { +0 611 hsbw +-12 112 hstem +418 112 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +endchar } ND +/rho { +0 619 hsbw +-197 20 hstem +-12 112 hstem +418 112 hstem +58 137 vstem +440 141 vstem +195 32 rmoveto +46 -30 46 -14 46 0 rrcurveto +140 0 108 118 0 148 rrcurveto +0 152 -108 124 -166 0 rrcurveto +-174 0 -75 -128 0 -191 rrcurveto +0 -408 rlineto +137 0 rlineto +0 229 rlineto +closepath +0 212 rmoveto +0 130 55 44 68 0 rrcurveto +78 0 44 -61 0 -97 rrcurveto +0 -96 -50 -64 -74 0 rrcurveto +-75 0 -46 57 0 87 rrcurveto +closepath +endchar } ND +/sigma1 { +0 520 hsbw +-210 114 hstem +409 121 hstem +38 126 vstem +354 137 vstem +503 507 rmoveto +-41 15 -47 8 -52 0 rrcurveto +-177 0 -148 -135 0 -160 rrcurveto +0 -104 68 -85 160 -33 rrcurveto +68 -14 20 -14 0 -31 rrcurveto +0 -32 -32 -18 -41 0 rrcurveto +-18 0 -23 4 -27 7 rrcurveto +-28 -119 rlineto +42 -4 30 -2 19 0 rrcurveto +129 0 86 62 0 101 rrcurveto +0 92 -55 46 -129 34 rrcurveto +-107 28 -36 29 0 59 rrcurveto +0 90 88 78 120 0 rrcurveto +31 0 34 -6 38 -11 rrcurveto +28 115 rlineto +closepath +endchar } ND +/upsilon { +0 582 hsbw +-12 112 hstem +499 20 hstem +58 137 vstem +387 137 vstem +58 519 rmoveto +0 -244 rlineto +0 -179 75 -108 160 0 rrcurveto +155 0 76 109 0 178 rrcurveto +0 244 rlineto +-137 0 rlineto +0 -266 rlineto +0 -115 -31 -38 -65 0 rrcurveto +-56 0 -40 26 0 127 rrcurveto +0 266 rlineto +-137 0 rlineto +closepath +endchar } ND +/chi { +0 576 hsbw +-197 20 49 224 499 20 hstem3 +2 155 207 149 412 143 vstem3 +20 519 rmoveto +187 -355 rlineto +-199 -361 rlineto +149 0 rlineto +130 246 rlineto +125 -246 rlineto +157 0 rlineto +-199 361 rlineto +185 355 rlineto +-143 0 rlineto +-125 -240 rlineto +-116 240 rlineto +-151 0 rlineto +closepath +endchar } ND +/psi { +0 753 hsbw +-197 294 hstem +499 20 hstem +58 137 308 137 558 137 vstem3 +58 519 rmoveto +0 -258 rlineto +0 -183 78 -77 172 -16 rrcurveto +0 -182 rlineto +137 0 rlineto +0 182 rlineto +172 15 78 77 0 184 rrcurveto +0 258 rlineto +-137 0 rlineto +0 -258 rlineto +0 -100 -25 -58 -88 -6 rrcurveto +0 422 rlineto +-137 0 rlineto +0 -422 rlineto +-88 5 -25 59 0 100 rrcurveto +0 258 rlineto +-137 0 rlineto +closepath +endchar } ND +/omega { +0 845 hsbw +-12 109 hstem +97 289 hstem +499 20 hstem +38 142 355 136 667 140 vstem3 +112 519 rmoveto +-38 -62 -36 -121 0 -86 rrcurveto +0 -152 88 -110 132 0 rrcurveto +78 0 55 36 32 73 rrcurveto +30 -73 55 -36 79 0 rrcurveto +132 0 88 108 0 154 rrcurveto +0 86 -37 121 -37 62 rrcurveto +-130 0 rlineto +40 -84 24 -111 0 -74 rrcurveto +0 -110 -43 -43 -54 0 rrcurveto +-63 0 -16 57 0 75 rrcurveto +0 157 rlineto +-137 0 rlineto +0 -157 rlineto +0 -79 -17 -53 -62 0 rrcurveto +-52 0 -44 41 0 107 rrcurveto +0 93 21 91 43 90 rrcurveto +-131 0 rlineto +closepath +endchar } ND +/iotadieresis { +0 278 hsbw +0 20 hstem +499 20 hstem +610 118 hstem +-25 118 vstem +185 118 vstem +70 0 rmoveto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -519 rlineto +closepath +-95 610 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/upsilondieresis { +0 582 hsbw +-12 112 hstem +499 20 hstem +610 118 hstem +127 118 vstem +337 118 vstem +58 519 rmoveto +0 -244 rlineto +0 -179 75 -108 160 0 rrcurveto +155 0 76 109 0 178 rrcurveto +0 244 rlineto +-137 0 rlineto +0 -266 rlineto +0 -115 -31 -38 -65 0 rrcurveto +-56 0 -40 26 0 127 rrcurveto +0 266 rlineto +-137 0 rlineto +closepath +69 91 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/omicrontonos { +0 611 hsbw +-12 112 hstem +418 112 hstem +582 146 hstem +40 141 vstem +230 87 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +49 323 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/upsilontonos { +0 582 hsbw +-12 112 hstem +499 20 hstem +582 146 hstem +58 137 vstem +216 87 vstem +387 137 vstem +58 519 rmoveto +0 -244 rlineto +0 -179 75 -108 160 0 rrcurveto +155 0 76 109 0 178 rrcurveto +0 244 rlineto +-137 0 rlineto +0 -266 rlineto +0 -115 -31 -38 -65 0 rrcurveto +-56 0 -40 26 0 127 rrcurveto +0 266 rlineto +-137 0 rlineto +closepath +158 63 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/omegatonos { +0 845 hsbw +-12 109 hstem +97 289 hstem +499 20 hstem +582 146 hstem +38 142 355 136 667 140 vstem3 +112 519 rmoveto +-38 -62 -36 -121 0 -86 rrcurveto +0 -152 88 -110 132 0 rrcurveto +78 0 55 36 32 73 rrcurveto +30 -73 55 -36 79 0 rrcurveto +132 0 88 108 0 154 rrcurveto +0 86 -37 121 -37 62 rrcurveto +-130 0 rlineto +40 -84 24 -111 0 -74 rrcurveto +0 -110 -43 -43 -54 0 rrcurveto +-63 0 -16 57 0 75 rrcurveto +0 157 rlineto +-137 0 rlineto +0 -157 rlineto +0 -79 -17 -53 -62 0 rrcurveto +-52 0 -44 41 0 107 rrcurveto +0 93 21 91 43 90 rrcurveto +-131 0 rlineto +closepath +203 63 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/afii10023 { +0 669 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +757 118 hstem +174 118 vstem +384 118 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +101 757 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/afii10051 { +0 885 hsbw +-6 119 hstem +353 130 hstem +595 121 hstem +235 144 vstem +708 138 vstem +23 716 rmoveto +0 -121 rlineto +212 0 rlineto +0 -595 rlineto +144 0 rlineto +0 294 rlineto +72 39 63 20 54 0 rrcurveto +90 0 50 -57 0 -68 rrcurveto +0 -66 -50 -49 -62 0 rrcurveto +-18 0 -21 5 -23 11 rrcurveto +-23 -120 rlineto +34 -10 32 -5 30 0 rrcurveto +134 0 105 94 0 150 rrcurveto +0 156 -112 89 -153 0 rrcurveto +-62 0 -67 -17 -73 -32 rrcurveto +0 161 rlineto +213 0 rlineto +0 121 rlineto +-569 0 rlineto +closepath +endchar } ND +/afii10052 { +0 567 hsbw +0 20 hstem +594 122 hstem +757 146 hstem +75 145 vstem +246 87 vstem +75 716 rmoveto +0 -716 rlineto +145 0 rlineto +0 594 rlineto +359 0 rlineto +0 122 rlineto +-504 0 rlineto +closepath +171 41 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/afii10053 { +0 711 hsbw +-12 122 hstem +297 120 hstem +603 125 hstem +43 153 vstem +420 417 rmoveto +-224 0 rlineto +10 106 61 80 104 0 rrcurveto +70 0 61 -42 22 -76 rrcurveto +143 33 rlineto +-31 129 -103 81 -158 0 rrcurveto +-207 0 -125 -150 0 -224 rrcurveto +0 -202 108 -164 221 0 rrcurveto +161 0 102 87 34 143 rrcurveto +-145 45 rlineto +-14 -99 -60 -54 -88 0 rrcurveto +-86 0 -64 59 -16 128 rrcurveto +224 0 rlineto +0 120 rlineto +closepath +endchar } ND +/afii10054 { +0 667 hsbw +-13 122 hstem +608 120 hstem +62 138 vstem +474 144 vstem +36 233 rmoveto +18 -160 96 -86 182 0 rrcurveto +159 0 127 84 0 137 rrcurveto +0 147 -96 55 -168 37 rrcurveto +-96 21 -58 6 0 64 rrcurveto +0 53 60 17 62 0 rrcurveto +81 0 38 -30 12 -73 rrcurveto +145 6 rlineto +-6 132 -89 85 -180 0 rrcurveto +-141 0 -120 -77 0 -123 rrcurveto +0 -120 82 -59 147 -36 rrcurveto +114 -28 69 -7 0 -70 rrcurveto +0 -54 -48 -45 -93 0 rrcurveto +-88 0 -52 43 -16 95 rrcurveto +-141 -14 rlineto +closepath +endchar } ND +/afii10055 { +0 278 hsbw +0 20 hstem +696 20 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10056 { +0 276 hsbw +0 20 hstem +696 20 hstem +757 118 hstem +-26 117 vstem +184 118 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-94 757 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/afii10057 { +0 556 hsbw +-12 123 hstem +696 20 hstem +331 144 vstem +331 716 rmoveto +0 -463 rlineto +0 -115 -24 -27 -64 0 rrcurveto +-65 0 -21 45 -4 81 rrcurveto +-136 -16 rlineto +1 -154 78 -79 142 0 rrcurveto +178 0 59 94 0 181 rrcurveto +0 453 rlineto +-144 0 rlineto +closepath +endchar } ND +/afii10058 { +0 1094 hsbw +0 114 hstem +310 120 hstem +595 121 hstem +107 144 vstem +450 144 vstem +898 149 vstem +594 430 rmoveto +0 286 rlineto +-487 0 rlineto +0 -517 rlineto +0 -71 -5 -14 -36 0 rrcurveto +-10 0 -18 2 -25 5 rrcurveto +0 -121 rlineto +77 0 rlineto +139 0 22 87 0 168 rrcurveto +0 340 rlineto +199 0 rlineto +0 -595 rlineto +338 0 rlineto +161 0 98 71 0 141 rrcurveto +0 138 -110 80 -149 0 rrcurveto +-194 0 rlineto +closepath +0 -310 rmoveto +0 190 rlineto +147 0 rlineto +116 0 41 -30 0 -65 rrcurveto +0 -81 -60 -14 -103 0 rrcurveto +-141 0 rlineto +closepath +endchar } ND +/afii10059 { +0 1063 hsbw +0 120 hstem +313 403 hstem +77 144 vstem +416 144 vstem +864 149 vstem +560 434 rmoveto +0 282 rlineto +-144 0 rlineto +0 -282 rlineto +-195 0 rlineto +0 282 rlineto +-144 0 rlineto +0 -716 rlineto +144 0 rlineto +0 313 rlineto +195 0 rlineto +0 -313 rlineto +338 0 rlineto +163 0 96 71 0 142 rrcurveto +0 142 -111 79 -148 0 rrcurveto +-194 0 rlineto +closepath +0 -314 rmoveto +0 193 rlineto +148 0 rlineto +113 0 43 -31 0 -66 rrcurveto +0 -78 -59 -18 -104 0 rrcurveto +-141 0 rlineto +closepath +endchar } ND +/afii10060 { +0 875 hsbw +0 448 hstem +595 121 hstem +239 144 vstem +659 144 vstem +27 716 rmoveto +0 -121 rlineto +212 0 rlineto +0 -595 rlineto +144 0 rlineto +0 324 rlineto +46 24 48 13 50 0 rrcurveto +116 0 16 -66 0 -144 rrcurveto +0 -151 rlineto +144 0 rlineto +0 220 rlineto +0 191 -91 72 -152 0 rrcurveto +-54 0 -59 -12 -64 -23 rrcurveto +0 147 rlineto +213 0 rlineto +0 121 rlineto +-569 0 rlineto +closepath +endchar } ND +/afii10061 { +0 610 hsbw +0 411 hstem +614 106 hstem +757 146 hstem +75 145 vstem +230 87 vstem +432 170 vstem +75 716 rmoveto +0 -716 rlineto +145 0 rlineto +0 313 rlineto +56 0 37 -65 19 -37 rrcurveto +3 -6 2 -4 1 -1 rrcurveto +3 -3 2 -3 0 -4 rrcurveto +1 -2 1 -2 1 -1 rrcurveto +86 -185 rlineto +170 0 rlineto +-98 196 rlineto +-51 101 -34 53 -64 19 rrcurveto +52 29 13 28 18 52 rrcurveto +34 98 8 38 94 0 rrcurveto +20 0 rlineto +0 106 rlineto +-21 0 rlineto +-145 0 -34 -30 -56 -143 rrcurveto +-48 -123 -6 -7 -64 -6 rrcurveto +0 305 rlineto +-145 0 rlineto +closepath +155 41 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/afii10062 { +0 622 hsbw +-9 114 hstem +696 20 hstem +755 142 hstem +0 162 vstem +168 67 vstem +406 67 vstem +0 716 rmoveto +263 -514 rlineto +-27 -80 -19 -17 -68 0 rrcurveto +-55 0 rlineto +0 -105 rlineto +24 -6 33 -3 43 0 rrcurveto +86 0 48 62 52 119 rrcurveto +242 544 rlineto +-151 0 rlineto +-142 -372 rlineto +-167 372 rlineto +-162 0 rlineto +closepath +406 181 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/afii10145 { +0 719 hsbw +-197 20 hstem +0 121 hstem +696 20 hstem +75 144 300 119 500 144 vstem3 +419 0 rmoveto +225 0 rlineto +0 716 rlineto +-144 0 rlineto +0 -595 rlineto +-281 0 rlineto +0 595 rlineto +-144 0 rlineto +0 -716 rlineto +224 0 rlineto +0 -197 rlineto +120 0 rlineto +0 197 rlineto +closepath +endchar } ND +/afii10017 { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +0 153 282 150 561 153 vstem3 +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +endchar } ND +/afii10018 { +0 719 hsbw +0 120 hstem +310 120 hstem +596 120 hstem +76 144 vstem +523 151 vstem +76 716 rmoveto +0 -716 rlineto +338 0 rlineto +160 0 100 76 0 138 rrcurveto +0 136 -109 80 -151 0 rrcurveto +-194 0 rlineto +0 166 rlineto +391 0 rlineto +0 120 rlineto +-535 0 rlineto +closepath +144 -596 rmoveto +0 190 rlineto +147 0 rlineto +114 0 42 -30 0 -66 rrcurveto +0 -79 -62 -15 -100 0 rrcurveto +-141 0 rlineto +closepath +endchar } ND +/afii10019 { +0 722 hsbw +0 121 hstem +312 119 hstem +597 119 hstem +73 145 vstem +497 141 vstem +73 716 rmoveto +0 -716 rlineto +244 0 rlineto +250 0 106 52 0 156 rrcurveto +0 82 -48 64 -88 26 rrcurveto +61 28 40 60 0 68 rrcurveto +0 129 -113 51 -166 0 rrcurveto +-286 0 rlineto +closepath +145 -119 rmoveto +83 0 rlineto +133 0 63 8 0 -90 rrcurveto +0 -86 -60 2 -124 0 rrcurveto +-95 0 rlineto +0 166 rlineto +closepath +0 -285 rmoveto +116 0 rlineto +124 0 65 -6 0 -92 rrcurveto +0 -91 -53 -2 -118 0 rrcurveto +-134 0 rlineto +0 191 rlineto +closepath +endchar } ND +/afii10020 { +0 567 hsbw +0 20 hstem +596 120 hstem +80 145 vstem +80 716 rmoveto +0 -716 rlineto +145 0 rlineto +0 596 rlineto +340 0 rlineto +0 120 rlineto +-485 0 rlineto +closepath +endchar } ND +/afii10021 { +0 712 hsbw +0 120 hstem +596 120 hstem +-3 120 vstem +130 138 vstem +568 120 vstem +130 716 rmoveto +0 -76 rlineto +0 -247 -14 -151 -58 -122 rrcurveto +-61 0 rlineto +0 -276 rlineto +120 0 rlineto +0 156 rlineto +451 0 rlineto +0 -156 rlineto +120 0 rlineto +0 276 rlineto +-63 0 rlineto +0 596 rlineto +-495 0 rlineto +closepath +138 -120 rmoveto +213 0 rlineto +0 -476 rlineto +-272 0 rlineto +39 100 20 158 0 218 rrcurveto +closepath +endchar } ND +/afii10022 { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +73 144 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10024 { +0 904 hsbw +0 411 hstem +614 106 hstem +11 170 382 140 723 170 vstem3 +522 716 rmoveto +-141 0 rlineto +0 -305 rlineto +-48 4 -14 17 -44 115 rrcurveto +-54 142 -35 31 -146 0 rrcurveto +-21 0 rlineto +0 -106 rlineto +18 0 rlineto +96 0 8 -39 34 -97 rrcurveto +18 -52 13 -28 52 -29 rrcurveto +-66 -20 -35 -56 -48 -97 rrcurveto +-98 -196 rlineto +170 0 rlineto +86 185 rlineto +2 5 3 5 3 5 rrcurveto +2 3 6 11 10 20 rrcurveto +35 70 19 9 34 0 rrcurveto +0 -313 rlineto +141 0 rlineto +0 313 rlineto +34 0 18 -11 37 -68 rrcurveto +4 -10 4 -7 3 -5 rrcurveto +4 -5 2 -3 0 -4 rrcurveto +4 -8 3 -5 2 -2 rrcurveto +86 -185 rlineto +170 0 rlineto +-98 196 rlineto +-51 101 -34 52 -64 20 rrcurveto +52 29 13 28 18 52 rrcurveto +34 98 6 38 95 0 rrcurveto +21 0 rlineto +0 106 rlineto +-21 0 rlineto +-146 0 -37 -32 -53 -141 rrcurveto +-43 -114 -14 -18 -49 -4 rrcurveto +0 305 rlineto +closepath +endchar } ND +/afii10025 { +0 626 hsbw +-12 118 307 102 610 118 hstem3 +401 146 vstem +175 521 rmoveto +16 59 39 30 61 0 rrcurveto +70 0 40 -40 0 -52 rrcurveto +0 -67 -48 -42 -88 0 rrcurveto +-17 0 rlineto +0 -108 rlineto +33 0 rlineto +94 0 48 -40 0 -58 rrcurveto +0 -51 -41 -46 -90 0 rrcurveto +-67 0 -45 16 -26 86 rrcurveto +-133 -43 rlineto +44 -136 81 -41 150 0 rrcurveto +184 0 92 84 0 126 rrcurveto +0 88 -48 59 -94 32 rrcurveto +77 42 40 55 0 68 rrcurveto +0 100 -87 86 -168 0 rrcurveto +-142 0 -86 -59 -30 -116 rrcurveto +141 -32 rlineto +closepath +endchar } ND +/afii10026 { +0 719 hsbw +0 239 hstem +467 249 hstem +75 135 vstem +509 135 vstem +75 716 rmoveto +0 -716 rlineto +144 0 rlineto +290 467 rlineto +0 -467 rlineto +135 0 rlineto +0 716 rlineto +-144 0 rlineto +-290 -477 rlineto +0 477 rlineto +-135 0 rlineto +closepath +endchar } ND +/afii10027 { +0 719 hsbw +0 239 hstem +467 249 hstem +752 142 hstem +75 135 vstem +509 135 vstem +75 716 rmoveto +0 -716 rlineto +144 0 rlineto +290 467 rlineto +0 -467 rlineto +135 0 rlineto +0 716 rlineto +-144 0 rlineto +-290 -477 rlineto +0 477 rlineto +-135 0 rlineto +closepath +371 178 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/afii10028 { +0 610 hsbw +0 411 hstem +614 106 hstem +75 145 vstem +432 170 vstem +75 716 rmoveto +0 -716 rlineto +145 0 rlineto +0 313 rlineto +56 0 37 -65 19 -37 rrcurveto +3 -6 2 -4 1 -1 rrcurveto +3 -3 2 -3 0 -4 rrcurveto +1 -2 1 -2 1 -1 rrcurveto +86 -185 rlineto +170 0 rlineto +-98 196 rlineto +-51 101 -34 53 -64 19 rrcurveto +52 29 13 28 18 52 rrcurveto +34 98 8 38 94 0 rrcurveto +20 0 rlineto +0 106 rlineto +-21 0 rlineto +-145 0 -34 -30 -56 -143 rrcurveto +-48 -123 -6 -7 -64 -6 rrcurveto +0 305 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10029 { +0 702 hsbw +-4 116 hstem +595 121 hstem +124 142 vstem +481 144 vstem +124 716 rmoveto +0 -532 rlineto +0 -64 -16 -8 -60 0 rrcurveto +-32 0 rlineto +0 -112 rlineto +22 -1 22 -1 12 -2 rrcurveto +36 0 rlineto +165 0 -7 107 0 186 rrcurveto +0 306 rlineto +215 0 rlineto +0 -595 rlineto +144 0 rlineto +0 716 rlineto +-501 0 rlineto +closepath +endchar } ND +/afii10030 { +0 833 hsbw +0 228 hstem +563 153 hstem +71 134 347 139 628 134 vstem3 +71 0 rmoveto +134 0 rlineto +0 563 rlineto +142 -563 rlineto +139 0 rlineto +142 563 rlineto +0 -563 rlineto +134 0 rlineto +0 716 rlineto +-217 0 rlineto +-128 -488 rlineto +-130 488 rlineto +-216 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10031 { +0 722 hsbw +0 434 hstem +696 20 hstem +73 145 vstem +501 145 vstem +73 0 rmoveto +145 0 rlineto +0 313 rlineto +283 0 rlineto +0 -313 rlineto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -282 rlineto +-283 0 rlineto +0 282 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +endchar } ND +/afii10032 { +0 778 hsbw +-12 123 hstem +604 124 hstem +43 149 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +endchar } ND +/afii10033 { +0 719 hsbw +0 20 hstem +596 120 hstem +75 144 vstem +500 144 vstem +75 716 rmoveto +0 -716 rlineto +144 0 rlineto +0 596 rlineto +281 0 rlineto +0 -596 rlineto +144 0 rlineto +0 716 rlineto +-569 0 rlineto +closepath +endchar } ND +/afii10034 { +0 667 hsbw +0 392 hstem +595 121 hstem +73 144 vstem +472 149 vstem +73 0 rmoveto +144 0 rlineto +0 270 rlineto +95 0 rlineto +191 0 118 58 0 168 rrcurveto +0 183 -88 37 -228 0 rrcurveto +-232 0 rlineto +0 -716 rlineto +closepath +144 595 rmoveto +70 0 rlineto +119 0 66 -9 0 -92 rrcurveto +0 -86 -61 -16 -115 0 rrcurveto +-79 0 rlineto +0 203 rlineto +closepath +endchar } ND +/afii10035 { +0 722 hsbw +-12 123 hstem +604 124 hstem +47 149 vstem +531 263 rmoveto +-24 -104 -58 -48 -77 0 rrcurveto +-104 0 -72 71 0 180 rrcurveto +0 170 72 72 107 0 rrcurveto +77 0 56 -46 18 -74 rrcurveto +143 35 rlineto +-41 141 -101 68 -145 0 rrcurveto +-200 0 -135 -139 0 -237 rrcurveto +0 -226 136 -138 191 0 rrcurveto +153 0 101 75 43 156 rrcurveto +-140 44 rlineto +closepath +endchar } ND +/afii10036 { +0 611 hsbw +0 20 hstem +595 121 hstem +234 144 vstem +234 0 rmoveto +144 0 rlineto +0 595 rlineto +212 0 rlineto +0 121 rlineto +-569 0 rlineto +0 -121 rlineto +213 0 rlineto +0 -595 rlineto +closepath +endchar } ND +/afii10037 { +0 622 hsbw +-9 114 hstem +696 20 hstem +0 162 vstem +471 151 vstem +0 716 rmoveto +263 -514 rlineto +-27 -80 -19 -17 -68 0 rrcurveto +-55 0 rlineto +0 -105 rlineto +24 -6 33 -3 43 0 rrcurveto +86 0 48 62 52 119 rrcurveto +242 544 rlineto +-151 0 rlineto +-142 -372 rlineto +-167 372 rlineto +-162 0 rlineto +closepath +endchar } ND +/afii10038 { +0 854 hsbw +0 204 hstem +524 191 hstem +42 142 356 141 670 140 vstem3 +498 83 rmoveto +226 9 86 114 0 158 rrcurveto +0 158 -86 113 -226 10 rrcurveto +0 70 rlineto +-142 0 rlineto +0 -70 rlineto +-220 -10 -93 -106 0 -165 rrcurveto +0 -156 85 -116 228 -9 rrcurveto +0 -83 rlineto +142 0 rlineto +0 83 rlineto +closepath +0 121 rmoveto +0 320 rlineto +114 0 58 -52 0 -103 rrcurveto +0 -119 -70 -46 -102 0 rrcurveto +closepath +-142 0 rmoveto +-115 0 -57 52 0 104 rrcurveto +0 109 50 55 122 0 rrcurveto +0 -320 rlineto +closepath +endchar } ND +/afii10039 { +0 667 hsbw +0 20 hstem +696 20 hstem +23 169 vstem +476 168 vstem +0 0 rmoveto +173 0 rlineto +160 248 rlineto +158 -248 rlineto +175 0 rlineto +-245 368 rlineto +223 348 rlineto +-168 0 rlineto +-141 -230 rlineto +-143 230 rlineto +-169 0 rlineto +222 -342 rlineto +-245 -374 rlineto +closepath +endchar } ND +/afii10040 { +0 730 hsbw +0 120 hstem +696 20 hstem +75 145 vstem +584 120 vstem +75 716 rmoveto +0 -716 rlineto +509 0 rlineto +0 -156 rlineto +120 0 rlineto +0 276 rlineto +-59 0 rlineto +0 596 rlineto +-145 0 rlineto +0 -596 rlineto +-280 0 rlineto +0 596 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10041 { +0 703 hsbw +0 407 hstem +696 20 hstem +61 145 vstem +482 144 vstem +61 716 rmoveto +0 -242 rlineto +0 -166 108 -59 143 0 rrcurveto +54 0 57 13 59 26 rrcurveto +0 -288 rlineto +144 0 rlineto +0 716 rlineto +-144 0 rlineto +0 -309 rlineto +-35 -26 -49 -13 -61 0 rrcurveto +-114 0 -17 44 0 133 rrcurveto +0 171 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10042 { +0 1005 hsbw +0 120 hstem +696 20 hstem +75 146 434 137 785 144 vstem3 +75 716 rmoveto +0 -716 rlineto +855 0 rlineto +-1 716 rlineto +-144 0 rlineto +0 -596 rlineto +-214 0 rlineto +0 596 rlineto +-144 0 rlineto +0 -596 rlineto +-207 0 rlineto +0 596 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10043 { +0 1019 hsbw +0 120 hstem +696 20 hstem +75 145 vstem +427 144 vstem +873 120 vstem +75 716 rmoveto +0 -716 rlineto +798 0 rlineto +0 -156 rlineto +120 0 rlineto +0 276 rlineto +-64 0 rlineto +0 596 rlineto +-144 0 rlineto +0 -596 rlineto +-214 0 rlineto +0 596 rlineto +-144 0 rlineto +0 -596 rlineto +-207 0 rlineto +0 596 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10044 { +0 870 hsbw +0 120 hstem +310 120 hstem +596 120 hstem +226 145 vstem +674 149 vstem +13 716 rmoveto +0 -120 rlineto +213 0 rlineto +0 -596 rlineto +338 0 rlineto +163 0 96 73 0 140 rrcurveto +0 134 -113 83 -146 0 rrcurveto +-193 0 rlineto +0 286 rlineto +-358 0 rlineto +closepath +358 -596 rmoveto +0 190 rlineto +147 0 rlineto +116 0 40 -31 0 -65 rrcurveto +0 -79 -63 -15 -100 0 rrcurveto +-140 0 rlineto +closepath +endchar } ND +/afii10045 { +0 979 hsbw +0 120 hstem +310 406 hstem +77 144 vstem +524 150 vstem +757 145 vstem +77 716 rmoveto +0 -716 rlineto +338 0 rlineto +163 0 96 73 0 139 rrcurveto +0 135 -116 83 -143 0 rrcurveto +-194 0 rlineto +0 286 rlineto +-144 0 rlineto +closepath +144 -596 rmoveto +0 190 rlineto +147 0 rlineto +118 0 38 -32 0 -64 rrcurveto +0 -78 -60 -16 -102 0 rrcurveto +-141 0 rlineto +closepath +536 596 rmoveto +0 -716 rlineto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10046 { +0 719 hsbw +0 120 hstem +310 406 hstem +76 144 vstem +523 150 vstem +76 716 rmoveto +0 -716 rlineto +338 0 rlineto +161 0 98 71 0 141 rrcurveto +0 120 -78 98 -181 0 rrcurveto +-194 0 rlineto +0 286 rlineto +-144 0 rlineto +closepath +144 -596 rmoveto +0 190 rlineto +147 0 rlineto +114 0 42 -30 0 -66 rrcurveto +0 -78 -60 -16 -102 0 rrcurveto +-141 0 rlineto +closepath +endchar } ND +/afii10047 { +0 711 hsbw +-12 122 hstem +297 120 hstem +603 125 hstem +516 152 vstem +291 417 rmoveto +0 -120 rlineto +225 0 rlineto +-19 -131 -64 -56 -84 0 rrcurveto +-83 0 -64 49 -14 104 rrcurveto +-146 -45 rlineto +38 -154 100 -76 164 0 rrcurveto +202 0 122 159 0 207 rrcurveto +0 222 -123 152 -209 0 rrcurveto +-160 0 -103 -84 -29 -126 rrcurveto +144 -33 rlineto +21 72 54 46 78 0 rrcurveto +101 0 62 -80 12 -106 rrcurveto +-225 0 rlineto +closepath +endchar } ND +/afii10048 { +0 1031 hsbw +-12 120 299 118 608 120 hstem3 +73 145 vstem +334 145 vstem +836 148 vstem +73 716 rmoveto +0 -716 rlineto +145 0 rlineto +0 297 rlineto +116 0 rlineto +13 -178 112 -131 207 0 rrcurveto +208 0 110 161 0 210 rrcurveto +0 237 -125 132 -197 0 rrcurveto +-206 0 -105 -135 -17 -176 rrcurveto +-116 0 rlineto +0 299 rlineto +-145 0 rlineto +closepath +406 -359 rmoveto +0 173 72 73 103 0 rrcurveto +106 0 76 -74 0 -164 rrcurveto +0 -171 -59 -86 -118 0 rrcurveto +-115 0 -65 90 0 159 rrcurveto +closepath +endchar } ND +/afii10049 { +0 719 hsbw +0 413 hstem +595 121 hstem +60 149 vstem +501 145 vstem +501 0 rmoveto +145 0 rlineto +0 716 rlineto +-305 0 rlineto +-176 0 -105 -60 0 -141 rrcurveto +0 -102 55 -76 134 -21 rrcurveto +-62 -35 -29 -31 -69 -110 rrcurveto +-87 -140 rlineto +173 0 rlineto +104 156 rlineto +90 136 11 7 92 0 rrcurveto +29 0 rlineto +0 -299 rlineto +closepath +0 595 rmoveto +0 -182 rlineto +-107 0 rlineto +-121 0 -64 -3 0 96 rrcurveto +0 88 62 1 117 0 rrcurveto +113 0 rlineto +closepath +endchar } ND +/afii10065 { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +endchar } ND +/afii10066 { +0 618 hsbw +-12 114 hstem +408 109 hstem +607 106 hstem +45 94 vstem +433 142 vstem +461 732 rmoveto +-7 -13 -13 -6 -19 0 rrcurveto +-69 0 rlineto +-228 0 -80 -101 0 -249 rrcurveto +0 -242 72 -133 189 0 rrcurveto +160 0 109 121 0 144 rrcurveto +0 140 -107 124 -136 0 rrcurveto +-90 0 -63 -38 -40 -76 rrcurveto +0 147 64 57 136 0 rrcurveto +44 0 rlineto +148 0 17 42 6 83 rrcurveto +-93 0 rlineto +closepath +-276 -477 rmoveto +0 93 55 60 68 0 rrcurveto +70 0 55 -61 0 -92 rrcurveto +0 -90 -53 -63 -73 0 rrcurveto +-70 0 -52 59 0 94 rrcurveto +closepath +endchar } ND +/afii10067 { +0 615 hsbw +0 88 220 79 431 88 hstem3 +73 138 vstem +421 137 vstem +73 519 rmoveto +0 -519 rlineto +327 0 rlineto +116 0 60 56 0 80 rrcurveto +0 57 -35 53 -72 19 rrcurveto +50 13 39 47 0 58 rrcurveto +0 90 -62 46 -122 0 rrcurveto +-301 0 rlineto +closepath +138 -216 rmoveto +0 128 rlineto +89 0 rlineto +90 0 31 -17 0 -44 rrcurveto +0 -47 -36 -20 -85 0 rrcurveto +-89 0 rlineto +closepath +0 -215 rmoveto +0 132 rlineto +71 0 rlineto +118 0 32 -17 0 -50 rrcurveto +0 -50 -35 -15 -77 0 rrcurveto +-109 0 rlineto +closepath +endchar } ND +/afii10068 { +0 417 hsbw +0 20 hstem +408 111 hstem +66 138 vstem +66 519 rmoveto +0 -519 rlineto +138 0 rlineto +0 408 rlineto +213 0 rlineto +0 111 rlineto +-351 0 rlineto +closepath +endchar } ND +/afii10069 { +0 635 hsbw +0 112 hstem +406 113 hstem +-3 111 vstem +500 112 vstem +500 0 rmoveto +0 -137 rlineto +112 0 rlineto +0 249 rlineto +-55 0 rlineto +0 407 rlineto +-419 0 rlineto +-6 -270 -33 -85 -46 -52 rrcurveto +-56 0 rlineto +0 -249 rlineto +111 0 rlineto +0 137 rlineto +392 0 rlineto +closepath +-79 112 rmoveto +-234 0 rlineto +40 52 22 98 6 144 rrcurveto +166 0 rlineto +0 -294 rlineto +closepath +endchar } ND +/afii10070 { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +32 140 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +endchar } ND +/afii10072 { +0 709 hsbw +0 307 hstem +429 93 hstem +0 147 287 136 563 147 vstem3 +287 0 rmoveto +136 0 rlineto +0 221 rlineto +36 -3 15 -15 24 -53 rrcurveto +65 -150 rlineto +147 0 rlineto +-73 143 rlineto +-38 71 -38 41 -40 11 rrcurveto +30 11 23 29 16 48 rrcurveto +24 72 6 3 72 0 rrcurveto +0 93 rlineto +-54 0 rlineto +-67 0 -36 -15 -37 -105 rrcurveto +-29 -82 -12 -13 -34 0 rrcurveto +0 212 rlineto +-136 0 rlineto +0 -212 rlineto +-36 1 -10 12 -29 82 rrcurveto +-38 107 -40 13 -60 0 rrcurveto +-57 0 rlineto +0 -93 rlineto +73 0 6 -3 24 -72 rrcurveto +16 -48 22 -29 30 -11 rrcurveto +-40 -11 -39 -41 -36 -71 rrcurveto +-73 -143 rlineto +147 0 rlineto +65 150 rlineto +36 65 3 3 36 3 rrcurveto +0 -221 rlineto +closepath +endchar } ND +/afii10073 { +0 497 hsbw +-12 92 hstem +213 89 hstem +436 94 hstem +308 128 vstem +211 213 rmoveto +24 0 rlineto +52 0 35 -25 0 -40 rrcurveto +0 -36 -33 -32 -52 0 rrcurveto +-47 0 -33 25 -20 51 rrcurveto +-125 -23 rlineto +27 -97 76 -48 124 0 rrcurveto +141 0 78 68 0 80 rrcurveto +0 64 -38 41 -76 22 rrcurveto +64 30 28 32 0 54 rrcurveto +0 86 -72 65 -125 0 rrcurveto +-98 0 -86 -46 -22 -90 rrcurveto +116 -25 rlineto +24 58 26 9 38 0 rrcurveto +46 0 25 -33 0 -33 rrcurveto +0 -48 -35 -20 -62 0 rrcurveto +0 -89 rlineto +closepath +endchar } ND +/afii10074 { +0 615 hsbw +0 193 hstem +332 187 hstem +68 132 vstem +414 132 vstem +68 519 rmoveto +0 -519 rlineto +132 0 rlineto +214 332 rlineto +0 -332 rlineto +132 0 rlineto +0 519 rlineto +-135 0 rlineto +-211 -326 rlineto +0 326 rlineto +-132 0 rlineto +closepath +endchar } ND +/afii10075 { +0 615 hsbw +0 193 hstem +332 187 hstem +587 72 hstem +68 132 vstem +414 132 vstem +68 519 rmoveto +0 -519 rlineto +132 0 rlineto +214 332 rlineto +0 -332 rlineto +132 0 rlineto +0 519 rlineto +-135 0 rlineto +-211 -326 rlineto +0 326 rlineto +-132 0 rlineto +closepath +329 210 rmoveto +-4 -47 -28 -23 -53 0 rrcurveto +-55 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 58 -54 87 0 rrcurveto +85 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/afii10076 { +0 500 hsbw +0 307 hstem +429 93 hstem +66 137 vstem +354 147 vstem +66 519 rmoveto +0 -519 rlineto +137 0 rlineto +0 221 rlineto +40 0 14 -11 28 -60 rrcurveto +69 -150 rlineto +147 0 rlineto +-77 143 rlineto +-2 3 -2 3 -1 4 rrcurveto +-30 63 -37 38 -43 12 rrcurveto +30 11 23 29 16 48 rrcurveto +23 70 7 5 72 0 rrcurveto +0 93 rlineto +-55 0 rlineto +-79 0 -30 -31 -30 -89 rrcurveto +-26 -77 -12 -13 -45 -5 rrcurveto +0 212 rlineto +-137 0 rlineto +closepath +endchar } ND +/afii10077 { +0 635 hsbw +-9 108 hstem +407 112 hstem +109 136 vstem +432 136 vstem +109 519 rmoveto +0 -300 rlineto +0 -112 -4 -8 -37 0 rrcurveto +-56 0 rlineto +0 -99 rlineto +36 -6 29 -3 22 0 rrcurveto +121 0 25 55 0 128 rrcurveto +0 233 rlineto +187 0 rlineto +0 -407 rlineto +136 0 rlineto +0 519 rlineto +-459 0 rlineto +closepath +endchar } ND +/afii10078 { +0 740 hsbw +0 157 hstem +341 178 hstem +76 117 319 112 557 117 vstem3 +76 519 rmoveto +0 -519 rlineto +117 0 rlineto +0 341 rlineto +120 -341 rlineto +118 0 rlineto +126 341 rlineto +0 -341 rlineto +117 0 rlineto +0 519 rlineto +-170 0 rlineto +-129 -362 rlineto +-129 362 rlineto +-170 0 rlineto +closepath +endchar } ND +/afii10079 { +0 604 hsbw +0 329 hstem +499 20 hstem +66 138 vstem +400 138 vstem +66 519 rmoveto +0 -519 rlineto +138 0 rlineto +0 218 rlineto +196 0 rlineto +0 -218 rlineto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -190 rlineto +-196 0 rlineto +0 190 rlineto +-138 0 rlineto +closepath +endchar } ND +/afii10080 { +0 611 hsbw +-12 112 hstem +418 112 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +endchar } ND +/afii10081 { +0 604 hsbw +0 20 hstem +408 111 hstem +66 138 vstem +390 137 vstem +66 519 rmoveto +0 -519 rlineto +138 0 rlineto +0 408 rlineto +186 0 rlineto +0 -408 rlineto +137 0 rlineto +0 519 rlineto +-461 0 rlineto +closepath +endchar } ND +/afii10082 { +0 611 hsbw +-197 20 hstem +-12 109 hstem +422 108 hstem +68 128 vstem +434 140 vstem +68 519 rmoveto +0 -716 rlineto +137 0 rlineto +0 261 rlineto +52 -56 41 -20 58 0 rrcurveto +121 0 97 100 0 174 rrcurveto +0 169 -96 99 -121 0 rrcurveto +-68 0 -60 -36 -33 -52 rrcurveto +0 77 rlineto +-128 0 rlineto +closepath +136 -251 rmoveto +0 101 49 53 67 0 rrcurveto +65 0 49 -52 0 -109 rrcurveto +0 -116 -47 -48 -64 0 rrcurveto +-67 0 -52 55 0 116 rrcurveto +closepath +endchar } ND +/afii10083 { +0 556 hsbw +-12 112 hstem +422 108 hstem +42 141 vstem +524 365 rmoveto +-32 112 -73 53 -126 0 rrcurveto +-155 0 -96 -101 0 -170 rrcurveto +0 -170 97 -101 152 0 rrcurveto +133 0 79 64 28 124 rrcurveto +-135 23 rlineto +-14 -72 -33 -27 -52 0 rrcurveto +-70 0 -44 45 0 124 rrcurveto +0 110 44 43 68 0 rrcurveto +50 0 34 -28 10 -53 rrcurveto +135 24 rlineto +closepath +endchar } ND +/afii10084 { +0 490 hsbw +0 20 hstem +408 111 hstem +176 137 vstem +10 519 rmoveto +0 -111 rlineto +166 0 rlineto +0 -408 rlineto +137 0 rlineto +0 408 rlineto +166 0 rlineto +0 111 rlineto +-469 0 rlineto +closepath +endchar } ND +/afii10085 { +0 556 hsbw +-210 109 hstem +499 20 hstem +7 146 vstem +398 142 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +endchar } ND +/afii10086 { +0 875 hsbw +-197 20 hstem +-12 104 hstem +425 105 hstem +696 20 hstem +40 143 372 131 693 141 vstem3 +370 716 rmoveto +0 -260 rlineto +-35 49 -44 25 -52 0 rrcurveto +-98 0 -100 -113 0 -156 rrcurveto +0 -156 81 -117 112 0 rrcurveto +50 0 46 25 40 48 rrcurveto +0 -258 rlineto +136 0 rlineto +0 258 rlineto +37 -48 42 -25 50 0 rrcurveto +108 0 91 117 0 151 rrcurveto +0 149 -77 125 -112 0 rrcurveto +-59 0 -47 -27 -33 -50 rrcurveto +0 263 rlineto +-136 0 rlineto +closepath +-92 -291 rmoveto +44 0 50 -49 0 -113 rrcurveto +0 -106 -43 -64 -53 0 rrcurveto +-54 0 -39 66 0 100 rrcurveto +0 100 44 66 51 0 rrcurveto +closepath +321 -1 rmoveto +58 0 36 -74 0 -94 rrcurveto +0 -88 -42 -76 -52 0 rrcurveto +-51 0 -44 62 0 98 rrcurveto +0 98 39 74 56 0 rrcurveto +closepath +endchar } ND +/afii10087 { +0 556 hsbw +0 20 161 197 499 20 hstem3 +6 161 vstem +370 161 vstem +6 0 rmoveto +161 0 rlineto +106 161 rlineto +105 -161 rlineto +169 0 rlineto +-192 273 rlineto +176 246 rlineto +-161 0 rlineto +-97 -143 rlineto +-92 143 rlineto +-167 0 rlineto +179 -252 rlineto +-187 -267 rlineto +closepath +endchar } ND +/afii10088 { +0 615 hsbw +0 111 hstem +499 20 hstem +67 137 vstem +480 111 vstem +67 519 rmoveto +0 -519 rlineto +413 0 rlineto +0 -137 rlineto +111 0 rlineto +0 248 rlineto +-54 0 rlineto +0 408 rlineto +-137 0 rlineto +0 -408 rlineto +-196 0 rlineto +0 408 rlineto +-137 0 rlineto +closepath +endchar } ND +/afii10089 { +0 581 hsbw +0 297 hstem +499 20 hstem +56 138 vstem +378 138 vstem +56 519 rmoveto +0 -124 rlineto +0 -138 82 -71 118 0 rrcurveto +28 0 40 7 54 14 rrcurveto +0 -207 rlineto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -222 rlineto +-30 -11 -28 -5 -24 0 rrcurveto +-69 0 -33 35 0 79 rrcurveto +0 124 rlineto +-138 0 rlineto +closepath +endchar } ND +/afii10090 { +0 833 hsbw +0 111 hstem +499 20 hstem +68 126 354 125 639 126 vstem3 +68 519 rmoveto +0 -519 rlineto +697 0 rlineto +0 519 rlineto +-126 0 rlineto +0 -408 rlineto +-159 0 rlineto +0 408 rlineto +-126 0 rlineto +0 -408 rlineto +-160 0 rlineto +0 408 rlineto +-126 0 rlineto +closepath +endchar } ND +/afii10091 { +0 844 hsbw +0 111 hstem +499 20 hstem +69 126 vstem +353 126 vstem +711 111 vstem +69 519 rmoveto +0 -519 rlineto +642 0 rlineto +0 -137 rlineto +111 0 rlineto +0 248 rlineto +-56 0 rlineto +0 408 rlineto +-127 0 rlineto +0 -408 rlineto +-160 0 rlineto +0 408 rlineto +-126 0 rlineto +0 -408 rlineto +-158 0 rlineto +0 408 rlineto +-126 0 rlineto +closepath +endchar } ND +/afii10092 { +0 729 hsbw +0 87 hstem +219 84 hstem +408 111 hstem +189 137 vstem +548 141 vstem +20 519 rmoveto +0 -111 rlineto +169 0 rlineto +0 -408 rlineto +293 0 rlineto +160 0 47 63 0 88 rrcurveto +0 108 -91 44 -135 0 rrcurveto +-137 0 rlineto +0 216 rlineto +-306 0 rlineto +closepath +306 -432 rmoveto +0 132 rlineto +89 0 rlineto +100 0 33 -17 0 -49 rrcurveto +0 -38 -14 -28 -80 0 rrcurveto +-128 0 rlineto +closepath +endchar } ND +/afii10093 { +0 854 hsbw +0 87 hstem +219 300 hstem +73 137 vstem +432 141 vstem +651 138 vstem +73 519 rmoveto +0 -519 rlineto +293 0 rlineto +138 0 69 51 0 100 rrcurveto +0 108 -90 44 -135 0 rrcurveto +-138 0 rlineto +0 216 rlineto +-137 0 rlineto +closepath +137 -432 rmoveto +0 132 rlineto +89 0 rlineto +100 0 33 -16 0 -50 rrcurveto +0 -47 -29 -19 -66 0 rrcurveto +-127 0 rlineto +closepath +441 432 rmoveto +0 -519 rlineto +138 0 rlineto +0 519 rlineto +-138 0 rlineto +closepath +endchar } ND +/afii10094 { +0 615 hsbw +0 87 hstem +219 300 hstem +75 137 vstem +434 141 vstem +75 519 rmoveto +0 -519 rlineto +294 0 rlineto +137 0 69 51 0 100 rrcurveto +0 109 -91 43 -134 0 rrcurveto +-138 0 rlineto +0 216 rlineto +-137 0 rlineto +closepath +137 -432 rmoveto +0 132 rlineto +89 0 rlineto +98 0 35 -17 0 -49 rrcurveto +0 -36 -14 -30 -80 0 rrcurveto +-128 0 rlineto +closepath +endchar } ND +/afii10095 { +0 552 hsbw +-12 107 hstem +220 83 hstem +424 106 hstem +370 142 vstem +224 303 rmoveto +0 -83 rlineto +143 0 rlineto +-10 -84 -36 -41 -64 0 rrcurveto +-52 0 -31 27 -11 56 rrcurveto +-136 -25 rlineto +34 -110 78 -55 123 0 rrcurveto +161 0 89 98 0 175 rrcurveto +0 164 -86 105 -165 0 rrcurveto +-116 0 -74 -48 -32 -96 rrcurveto +134 -25 rlineto +9 42 41 21 42 0 rrcurveto +64 0 34 -40 7 -81 rrcurveto +-146 0 rlineto +closepath +endchar } ND +/afii10096 { +0 854 hsbw +-12 109 210 99 423 107 hstem3 +71 137 vstem +317 138 vstem +673 142 vstem +71 519 rmoveto +0 -519 rlineto +137 0 rlineto +0 200 rlineto +109 0 rlineto +6 -102 79 -110 167 0 rrcurveto +159 0 87 115 0 152 rrcurveto +0 178 -104 97 -145 0 rrcurveto +-144 0 -91 -88 -14 -133 rrcurveto +-109 0 rlineto +0 210 rlineto +-137 0 rlineto +closepath +493 -96 rmoveto +69 0 40 -36 0 -130 rrcurveto +0 -108 -35 -53 -70 0 rrcurveto +-76 0 -37 36 0 138 rrcurveto +0 106 33 47 76 0 rrcurveto +closepath +endchar } ND +/afii10097 { +0 583 hsbw +0 297 hstem +430 89 hstem +42 142 vstem +380 136 vstem +516 519 rmoveto +-270 0 rlineto +-128 0 -76 -42 0 -106 rrcurveto +0 -83 52 -59 78 -4 rrcurveto +-23 -7 -25 -25 -28 -43 rrcurveto +-98 -150 rlineto +159 0 rlineto +91 145 rlineto +8 10 rlineto +33 49 19 11 59 0 rrcurveto +13 0 rlineto +0 -215 rlineto +136 0 rlineto +0 519 rlineto +closepath +-136 -89 rmoveto +0 -133 rlineto +-90 0 rlineto +-76 0 -30 19 0 48 rrcurveto +0 46 26 20 72 0 rrcurveto +98 0 rlineto +closepath +endchar } ND +/afii10071 { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +610 118 hstem +112 117 vstem +322 118 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-268 306 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/afii10099 { +0 611 hsbw +-210 107 hstem +0 453 hstem +510 20 hstem +587 129 hstem +71 137 vstem +406 137 vstem +208 659 rmoveto +0 57 rlineto +-137 0 rlineto +0 -57 rlineto +-71 0 rlineto +0 -72 rlineto +71 0 rlineto +0 -587 rlineto +137 0 rlineto +0 260 rlineto +0 125 39 40 74 0 rrcurveto +78 0 7 -54 0 -97 rrcurveto +0 -313 rlineto +0 -52 -8 -12 -32 0 rrcurveto +-11 0 -18 4 -24 6 rrcurveto +-20 -101 rlineto +42 -10 36 -6 28 0 rrcurveto +105 0 39 60 0 125 rrcurveto +0 329 rlineto +0 145 -50 81 -124 0 rrcurveto +-63 0 -53 -25 -45 -52 rrcurveto +0 134 rlineto +168 0 rlineto +0 72 rlineto +-168 0 rlineto +closepath +endchar } ND +/afii10100 { +0 417 hsbw +0 20 hstem +408 111 hstem +582 146 hstem +66 138 vstem +66 519 rmoveto +0 -519 rlineto +138 0 rlineto +0 408 rlineto +213 0 rlineto +0 111 rlineto +-351 0 rlineto +closepath +67 63 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/afii10101 { +0 552 hsbw +-12 107 hstem +220 83 hstem +424 106 hstem +40 142 vstem +328 220 rmoveto +0 83 rlineto +-146 0 rlineto +6 81 35 40 64 0 rrcurveto +40 0 42 -21 10 -42 rrcurveto +134 25 rlineto +-34 96 -74 48 -114 0 rrcurveto +-166 0 -85 -105 0 -164 rrcurveto +0 -175 87 -98 163 0 rrcurveto +122 0 78 55 34 110 rrcurveto +-135 25 rlineto +-12 -56 -31 -27 -51 0 rrcurveto +-64 0 -37 41 -9 84 rrcurveto +143 0 rlineto +closepath +endchar } ND +/afii10102 { +0 556 hsbw +-12 99 hstem +432 98 hstem +42 128 vstem +370 138 vstem +23 148 rmoveto +25 -99 82 -61 142 0 rrcurveto +156 0 80 79 0 95 rrcurveto +0 107 -94 28 -102 28 rrcurveto +-76 17 -66 -7 0 54 rrcurveto +0 36 43 7 50 0 rrcurveto +57 0 30 -23 11 -40 rrcurveto +129 24 rlineto +-26 90 -62 47 -141 0 rrcurveto +-150 0 -69 -70 0 -89 rrcurveto +0 -130 92 -14 180 -39 rrcurveto +37 -8 19 -8 0 -28 rrcurveto +0 -47 -45 -10 -53 0 rrcurveto +-64 0 -35 28 -12 54 rrcurveto +-138 -21 rlineto +closepath +endchar } ND +/afii10103 { +0 278 hsbw +0 20 hstem +499 20 hstem +589 127 hstem +72 137 vstem +72 589 rmoveto +137 0 rlineto +0 127 rlineto +-137 0 rlineto +0 -127 rlineto +closepath +0 -589 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/afii10104 { +0 281 hsbw +0 20 hstem +499 20 hstem +610 118 hstem +-23 117 vstem +187 118 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +-95 610 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +endchar } ND +/afii10105 { +0 278 hsbw +-210 128 hstem +499 20 hstem +589 127 hstem +69 137 vstem +69 589 rmoveto +137 0 rlineto +0 127 rlineto +-137 0 rlineto +0 -127 rlineto +closepath +137 -70 rmoveto +-137 0 rlineto +0 -495 rlineto +0 -78 -2 -28 -55 0 rrcurveto +-15 0 rlineto +-6 0 -6 2 -7 1 rrcurveto +-24 -117 rlineto +36 -9 32 -5 27 0 rrcurveto +124 0 33 77 0 149 rrcurveto +0 503 rlineto +closepath +endchar } ND +/afii10106 { +0 969 hsbw +-9 112 hstem +219 84 hstem +406 113 hstem +109 139 vstem +432 136 vstem +790 141 vstem +568 303 rmoveto +0 216 rlineto +-459 0 rlineto +0 -352 rlineto +0 -50 -7 -14 -29 0 rrcurveto +-11 0 -20 1 -30 3 rrcurveto +0 -107 rlineto +47 -6 33 -3 18 0 rrcurveto +80 0 58 40 0 146 rrcurveto +0 229 rlineto +184 0 rlineto +0 -406 rlineto +293 0 rlineto +137 0 69 51 0 100 rrcurveto +0 109 -91 43 -134 0 rrcurveto +-138 0 rlineto +closepath +0 -216 rmoveto +0 132 rlineto +90 0 rlineto +118 0 14 -29 0 -37 rrcurveto +0 -36 -14 -30 -80 0 rrcurveto +-128 0 rlineto +closepath +endchar } ND +/afii10107 { +0 906 hsbw +0 87 hstem +218 301 hstem +68 138 vstem +365 136 vstem +724 142 vstem +365 0 rmoveto +294 0 rlineto +158 0 49 56 0 107 rrcurveto +0 125 -80 41 -146 0 rrcurveto +-139 0 rlineto +0 190 rlineto +-136 0 rlineto +0 -190 rlineto +-159 0 rlineto +0 190 rlineto +-138 0 rlineto +0 -519 rlineto +138 0 rlineto +0 218 rlineto +159 0 rlineto +0 -218 rlineto +closepath +136 87 rmoveto +0 131 rlineto +90 0 rlineto +98 0 35 -16 0 -49 rrcurveto +0 -46 -29 -20 -66 0 rrcurveto +-128 0 rlineto +closepath +endchar } ND +/afii10108 { +0 611 hsbw +0 453 hstem +510 20 hstem +587 129 hstem +71 137 vstem +406 137 vstem +71 659 rmoveto +-71 0 rlineto +0 -72 rlineto +71 0 rlineto +0 -587 rlineto +137 0 rlineto +0 260 rlineto +0 125 39 40 74 0 rrcurveto +78 0 7 -54 0 -97 rrcurveto +0 -274 rlineto +137 0 rlineto +0 304 rlineto +0 145 -50 81 -124 0 rrcurveto +-63 0 -53 -25 -45 -52 rrcurveto +0 134 rlineto +168 0 rlineto +0 72 rlineto +-168 0 rlineto +0 57 rlineto +-137 0 rlineto +0 -57 rlineto +closepath +endchar } ND +/afii10109 { +0 500 hsbw +0 307 hstem +429 93 hstem +582 146 hstem +66 137 vstem +354 147 vstem +66 519 rmoveto +0 -519 rlineto +137 0 rlineto +0 221 rlineto +40 0 14 -11 28 -60 rrcurveto +69 -150 rlineto +147 0 rlineto +-77 143 rlineto +-2 3 -2 3 -1 4 rrcurveto +-30 63 -37 38 -43 12 rrcurveto +30 11 23 29 16 48 rrcurveto +23 70 7 5 72 0 rrcurveto +0 93 rlineto +-55 0 rlineto +-79 0 -30 -31 -30 -89 rrcurveto +-26 -77 -12 -13 -45 -5 rrcurveto +0 212 rlineto +-137 0 rlineto +closepath +123 63 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/afii10110 { +0 556 hsbw +-210 109 hstem +499 20 hstem +587 72 hstem +127 67 vstem +365 67 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +358 210 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/afii10193 { +0 604 hsbw +0 111 hstem +499 20 hstem +65 139 247 109 400 137 vstem3 +357 0 rmoveto +180 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -408 rlineto +-196 0 rlineto +0 408 rlineto +-138 0 rlineto +0 -519 rlineto +181 0 rlineto +0 -137 rlineto +110 0 rlineto +0 137 rlineto +closepath +endchar } ND +/afii10050 { +0 487 hsbw +0 20 hstem +595 121 hstem +73 145 vstem +340 120 vstem +340 716 rmoveto +-267 0 rlineto +0 -716 rlineto +145 0 rlineto +0 595 rlineto +242 0 rlineto +0 277 rlineto +-120 0 rlineto +0 -156 rlineto +closepath +endchar } ND +/afii10098 { +0 447 hsbw +0 20 hstem +408 111 hstem +66 138 vstem +305 111 vstem +305 519 rmoveto +-239 0 rlineto +0 -519 rlineto +138 0 rlineto +0 408 rlineto +212 0 rlineto +0 247 rlineto +-111 0 rlineto +0 -136 rlineto +closepath +endchar } ND +/afii00208 { +0 1000 hsbw +208 103 hstem +32 936 vstem +32 208 rmoveto +936 0 rlineto +0 103 rlineto +-936 0 rlineto +0 -103 rlineto +closepath +endchar } ND +/afii61352 { +0 1115 hsbw +0 243 hstem +460 256 hstem +80 135 vstem +503 137 vstem +686 132 vstem +942 131 vstem +80 716 rmoveto +0 -716 rlineto +135 0 rlineto +0 460 rlineto +277 -460 rlineto +148 0 rlineto +0 716 rlineto +-137 0 rlineto +0 -473 rlineto +-282 473 rlineto +-141 0 rlineto +closepath +606 -329 rmoveto +0 -112 74 -88 122 0 rrcurveto +118 0 73 85 0 112 rrcurveto +0 116 -82 86 -113 0 rrcurveto +-112 0 -80 -77 0 -122 rrcurveto +closepath +132 -12 rmoveto +0 78 23 40 43 0 rrcurveto +38 0 20 -32 0 -64 rrcurveto +0 -78 -21 -37 -42 0 rrcurveto +-40 0 -21 30 0 63 rrcurveto +closepath +-115 -235 rmoveto +0 -108 rlineto +349 0 rlineto +0 108 rlineto +-349 0 rlineto +closepath +endchar } ND +/pi { +0 766 hsbw +0 20 hstem +405 114 hstem +161 137 vstem +467 137 vstem +23 519 rmoveto +0 -114 rlineto +138 0 rlineto +0 -405 rlineto +137 0 rlineto +0 405 rlineto +169 0 rlineto +0 -405 rlineto +137 0 rlineto +0 405 rlineto +138 0 rlineto +0 114 rlineto +-719 0 rlineto +closepath +endchar } ND +/sheva { +0 333 hsbw +-210 82 hstem +-106 82 hstem +125 83 vstem +167 -24 rmoveto +-28 0 -14 -21 0 -20 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +0 -104 rmoveto +-24 0 -18 -17 0 -24 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +endchar } ND +/hatafsegol { +0 333 hsbw +-210 82 hstem +-106 82 hstem +15 82 125 83 236 82 vstem3 +56 -24 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 19 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +111 0 rmoveto +-24 0 -18 -18 0 -23 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +110 0 rmoveto +-23 0 -18 -18 0 -23 rrcurveto +0 -24 18 -17 23 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-167 -104 rmoveto +-26 0 -15 -21 0 -20 rrcurveto +0 -23 18 -18 23 0 rrcurveto +24 0 17 19 0 22 rrcurveto +0 27 -21 14 -20 0 rrcurveto +closepath +167 0 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -22 19 -19 22 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 23 -19 18 -22 0 rrcurveto +closepath +endchar } ND +/hatafpatah { +0 333 hsbw +-210 82 hstem +-80 51 hstem +24 164 vstem +227 82 vstem +268 -24 rmoveto +-24 0 -17 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +26 0 15 20 0 21 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-244 -56 rmoveto +164 0 rlineto +0 51 rlineto +-164 0 rlineto +0 -51 rlineto +closepath +244 -48 rmoveto +-24 0 -17 -16 0 -25 rrcurveto +0 -22 17 -19 24 0 rrcurveto +26 0 15 21 0 20 rrcurveto +0 23 -21 18 -20 0 rrcurveto +closepath +endchar } ND +/hatafqamats { +0 333 hsbw +-210 82 hstem +-80 51 hstem +79 57 vstem +227 82 vstem +268 -24 rmoveto +-24 0 -17 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +26 0 15 20 0 21 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-189 -128 rmoveto +57 0 rlineto +0 72 rlineto +52 0 rlineto +0 51 rlineto +-164 0 rlineto +0 -51 rlineto +55 0 rlineto +0 -72 rlineto +closepath +189 24 rmoveto +-24 0 -17 -16 0 -25 rrcurveto +0 -22 17 -19 24 0 rrcurveto +26 0 15 21 0 20 rrcurveto +0 23 -21 18 -20 0 rrcurveto +closepath +endchar } ND +/hiriq { +0 333 hsbw +-180 82 hstem +125 83 vstem +167 -98 rmoveto +-24 0 -18 -18 0 -23 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 23 -19 18 -22 0 rrcurveto +closepath +endchar } ND +/tsere { +0 333 hsbw +-180 82 hstem +62 82 vstem +190 82 vstem +103 -98 rmoveto +-24 0 -17 -18 0 -23 rrcurveto +0 -26 21 -15 20 0 rrcurveto +24 0 17 19 0 22 rrcurveto +0 23 -21 18 -20 0 rrcurveto +closepath +128 0 rmoveto +-24 0 -17 -17 0 -24 rrcurveto +0 -22 18 -19 23 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 23 -19 18 -22 0 rrcurveto +closepath +endchar } ND +/segol { +0 333 hsbw +-210 82 hstem +-106 82 hstem +62 82 vstem +189 82 vstem +103 -24 rmoveto +-24 0 -17 -18 0 -23 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 27 -23 14 -18 0 rrcurveto +closepath +127 0 rmoveto +-22 0 -19 -18 0 -23 rrcurveto +0 -22 19 -19 22 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 20 -15 21 -26 0 rrcurveto +closepath +-63 -104 rmoveto +-24 0 -18 -17 0 -24 rrcurveto +0 -24 20 -17 22 0 rrcurveto +20 0 21 19 0 22 rrcurveto +0 22 -19 19 -22 0 rrcurveto +closepath +endchar } ND +/patah { +0 333 hsbw +-154 51 hstem +68 197 vstem +68 -154 rmoveto +197 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/qamats { +0 333 hsbw +-210 133 hstem +139 56 vstem +139 -210 rmoveto +56 0 rlineto +0 82 rlineto +70 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +71 0 rlineto +0 -82 rlineto +closepath +endchar } ND +/holam { +0 333 hsbw +577 82 hstem +125 83 vstem +167 659 rmoveto +-24 0 -18 -19 0 -22 rrcurveto +0 -24 19 -17 23 0 rrcurveto +21 0 20 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +endchar } ND +/qubuts { +0 333 hsbw +-210 82 hstem +-107 82 hstem +8 82 125 83 243 82 vstem3 +49 -25 rmoveto +-25 0 -16 -16 0 -25 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 23 -19 18 -22 0 rrcurveto +closepath +118 -53 rmoveto +-24 0 -18 -17 0 -24 rrcurveto +0 -22 20 -19 22 0 rrcurveto +20 0 21 21 0 20 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +117 -50 rmoveto +-23 0 -18 -18 0 -23 rrcurveto +0 -24 19 -17 22 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 22 -17 19 -24 0 rrcurveto +closepath +endchar } ND +/dagesh { +0 333 hsbw +241 82 hstem +125 83 vstem +167 323 rmoveto +-24 0 -18 -19 0 -22 rrcurveto +0 -23 17 -18 25 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -23 15 -18 0 rrcurveto +closepath +endchar } ND +/meteg { +0 333 hsbw +-210 185 hstem +141 51 vstem +141 -25 rmoveto +0 -185 rlineto +51 0 rlineto +0 185 rlineto +-51 0 rlineto +closepath +endchar } ND +/maqaf { +0 447 hsbw +408 110 hstem +61 325 vstem +61 408 rmoveto +325 0 rlineto +0 110 rlineto +-325 0 rlineto +0 -110 rlineto +closepath +endchar } ND +/rafe { +0 333 hsbw +611 51 hstem +68 197 vstem +68 611 rmoveto +197 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/paseq { +0 299 hsbw +600 20 hstem +98 104 vstem +98 -101 rmoveto +104 0 rlineto +0 721 rlineto +-104 0 rlineto +0 -721 rlineto +closepath +endchar } ND +/shindot { +0 333 hsbw +577 83 hstem +376 82 vstem +417 660 rmoveto +-20 0 -21 -16 0 -26 rrcurveto +0 -23 18 -18 23 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/sindot { +0 333 hsbw +577 83 hstem +-125 83 vstem +-83 660 rmoveto +-24 0 -18 -18 0 -24 rrcurveto +0 -23 18 -18 24 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/sofpasuq { +0 333 hsbw +0 137 hstem +381 138 hstem +98 137 vstem +98 381 rmoveto +137 0 rlineto +0 138 rlineto +-137 0 rlineto +0 -138 rlineto +closepath +0 -381 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/alef { +0 583 hsbw +0 20 hstem +498 20 hstem +44 133 vstem +407 127 vstem +414 220 rmoveto +64 42 36 46 14 147 rrcurveto +6 63 rlineto +-127 0 rlineto +-7 -85 rlineto +-6 -66 -15 -43 -25 -18 rrcurveto +-150 212 rlineto +-161 0 rlineto +121 -172 rlineto +-58 -36 -39 -51 -13 -149 rrcurveto +-10 -110 rlineto +133 0 rlineto +8 103 rlineto +6 79 14 51 23 23 rrcurveto +181 -256 rlineto +161 0 rlineto +-156 220 rlineto +closepath +endchar } ND +/bet { +0 576 hsbw +0 118 hstem +410 114 hstem +323 137 vstem +460 118 rmoveto +0 162 rlineto +0 169 -87 75 -189 0 rrcurveto +-51 0 -51 -6 -50 -10 rrcurveto +10 -108 rlineto +43 6 39 4 36 0 rrcurveto +120 0 43 -42 0 -113 rrcurveto +0 -137 rlineto +-285 0 rlineto +0 -118 rlineto +516 0 rlineto +0 118 rlineto +-94 0 rlineto +closepath +endchar } ND +/gimel { +0 457 hsbw +0 200 hstem +412 112 hstem +5 137 vstem +234 137 vstem +83 515 rmoveto +10 -106 rlineto +7 2 13 1 20 0 rrcurveto +74 0 27 -35 0 -65 rrcurveto +0 -100 rlineto +-92 -8 -66 -49 -41 -90 rrcurveto +-30 -65 rlineto +137 0 rlineto +33 61 rlineto +18 33 26 20 35 6 rrcurveto +34 -120 rlineto +137 0 rlineto +-54 200 rlineto +0 123 rlineto +0 142 -61 59 -130 0 rrcurveto +-40 0 -32 -3 -25 -6 rrcurveto +closepath +endchar } ND +/dalet { +0 550 hsbw +0 20 hstem +400 118 hstem +308 137 vstem +525 400 rmoveto +0 118 rlineto +-501 0 rlineto +0 -118 rlineto +284 0 rlineto +0 -400 rlineto +137 0 rlineto +0 400 rlineto +80 0 rlineto +closepath +endchar } ND +/he { +0 614 hsbw +0 269 hstem +412 112 hstem +69 138 vstem +417 136 vstem +553 0 rmoveto +0 264 rlineto +0 189 -110 71 -192 0 rrcurveto +-72 0 -63 -5 -53 -9 rrcurveto +10 -110 rlineto +56 8 51 4 48 0 rrcurveto +125 0 64 -42 0 -126 rrcurveto +0 -244 rlineto +136 0 rlineto +closepath +-346 269 rmoveto +-138 0 rlineto +0 -269 rlineto +138 0 rlineto +0 269 rlineto +closepath +endchar } ND +/vav { +0 273 hsbw +0 20 hstem +498 20 hstem +66 141 vstem +207 518 rmoveto +-141 0 rlineto +0 -518 rlineto +141 0 rlineto +0 518 rlineto +closepath +endchar } ND +/zayin { +0 413 hsbw +0 20 hstem +420 98 hstem +125 122 vstem +396 420 rmoveto +0 98 rlineto +-352 0 rlineto +0 -118 rlineto +143 0 rlineto +-42 -30 -20 -44 0 -58 rrcurveto +0 -14 1 -15 2 -22 rrcurveto +5 -54 3 -53 0 -44 rrcurveto +0 -66 rlineto +127 0 rlineto +0 78 rlineto +0 48 -3 56 -9 59 rrcurveto +-3 20 -1 17 0 13 rrcurveto +0 89 58 40 91 0 rrcurveto +closepath +endchar } ND +/het { +0 616 hsbw +0 508 hstem +510 14 hstem +66 137 vstem +413 137 vstem +550 0 rmoveto +0 280 rlineto +0 177 -99 67 -194 0 rrcurveto +-65 0 -64 -6 -62 -10 rrcurveto +0 -508 rlineto +137 0 rlineto +0 405 rlineto +18 3 24 2 29 0 rrcurveto +106 0 33 -48 0 -90 rrcurveto +0 -272 rlineto +137 0 rlineto +closepath +endchar } ND +/tet { +0 626 hsbw +-12 114 hstem +410 120 hstem +61 137 vstem +434 136 vstem +310 366 rmoveto +19 29 22 15 26 0 rrcurveto +32 0 25 -20 0 -109 rrcurveto +0 -51 rlineto +0 -82 -44 -46 -72 0 rrcurveto +-70 0 -50 45 0 115 rrcurveto +0 256 rlineto +-137 0 rlineto +0 -225 rlineto +0 -188 90 -117 167 0 rrcurveto +167 0 85 119 0 175 rrcurveto +0 141 -34 107 -124 0 rrcurveto +-62 0 -47 -31 -34 -60 rrcurveto +41 -73 rlineto +closepath +endchar } ND +/yod { +0 273 hsbw +229 289 hstem +66 141 vstem +207 518 rmoveto +-141 0 rlineto +0 -289 rlineto +141 0 rlineto +0 289 rlineto +closepath +endchar } ND +/finalkaf { +0 521 hsbw +-199 20 hstem +409 115 hstem +323 137 vstem +460 -199 rmoveto +0 479 rlineto +0 169 -93 75 -186 0 rrcurveto +-62 0 -53 -6 -46 -10 rrcurveto +9 -108 rlineto +50 6 41 3 31 0 rrcurveto +112 0 60 -36 0 -118 rrcurveto +0 -454 rlineto +137 0 rlineto +closepath +endchar } ND +/kaf { +0 491 hsbw +-8 106 hstem +420 106 hstem +308 144 vstem +37 8 rmoveto +34 -10 41 -6 47 0 rrcurveto +173 0 120 91 0 176 rrcurveto +0 174 -117 93 -176 0 rrcurveto +-48 0 -40 -6 -34 -10 rrcurveto +19 -107 rlineto +31 11 30 6 30 0 rrcurveto +101 0 60 -63 0 -98 rrcurveto +0 -99 -61 -62 -100 0 rrcurveto +-29 0 -30 5 -32 12 rrcurveto +-19 -107 rlineto +closepath +endchar } ND +/lamed { +0 496 hsbw +0 20 hstem +400 118 hstem +696 20 hstem +32 136 vstem +218 136 vstem +445 518 rmoveto +-277 0 rlineto +0 198 rlineto +-136 0 rlineto +0 -316 rlineto +276 0 rlineto +0 -65 rlineto +0 -34 -9 -29 -16 -23 rrcurveto +-13 -18 rlineto +-42 -58 -10 -27 0 -53 rrcurveto +0 -93 rlineto +136 0 rlineto +0 86 rlineto +0 37 8 19 28 40 rrcurveto +22 32 rlineto +26 38 7 35 0 98 rrcurveto +0 133 rlineto +closepath +endchar } ND +/finalmem { +0 611 hsbw +0 118 hstem +410 114 hstem +66 137 vstem +413 137 vstem +550 0 rmoveto +0 280 rlineto +0 177 -99 67 -194 0 rrcurveto +-65 0 -64 -6 -62 -10 rrcurveto +0 -508 rlineto +484 0 rlineto +closepath +-137 118 rmoveto +-210 0 rlineto +0 287 rlineto +18 3 24 2 29 0 rrcurveto +106 0 33 -48 0 -90 rrcurveto +0 -154 rlineto +closepath +endchar } ND +/mem { +0 630 hsbw +0 118 hstem +406 118 hstem +27 124 vstem +432 137 vstem +182 407 rmoveto +-31 111 rlineto +-124 0 rlineto +87 -258 rlineto +-12 -32 -13 -49 -14 -66 rrcurveto +-24 -113 rlineto +145 0 rlineto +31 175 rlineto +32 178 36 53 60 0 rrcurveto +56 0 21 -48 0 -136 rrcurveto +0 -104 rlineto +-127 0 rlineto +0 -118 rlineto +264 0 rlineto +0 215 rlineto +0 217 -79 92 -121 0 rrcurveto +-74 0 -62 -39 -51 -78 rrcurveto +closepath +endchar } ND +/finalnun { +0 273 hsbw +-199 20 hstem +498 20 hstem +66 141 vstem +207 518 rmoveto +-141 0 rlineto +0 -717 rlineto +141 0 rlineto +0 717 rlineto +closepath +endchar } ND +/nun { +0 386 hsbw +0 118 hstem +412 112 hstem +188 137 vstem +325 0 rmoveto +0 323 rlineto +0 140 -61 61 -130 0 rrcurveto +-40 0 -32 -3 -25 -6 rrcurveto +10 -106 rlineto +8 2 13 1 19 0 rrcurveto +62 0 39 -22 0 -78 rrcurveto +0 -194 rlineto +-144 0 rlineto +0 -118 rlineto +281 0 rlineto +closepath +endchar } ND +/samekh { +0 613 hsbw +-12 112 hstem +418 112 hstem +39 141 vstem +433 141 vstem +39 255 rmoveto +0 -159 109 -108 159 0 rrcurveto +158 0 109 119 0 154 rrcurveto +0 154 -110 115 -158 0 rrcurveto +-159 0 -108 -111 0 -164 rrcurveto +closepath +141 4 rmoveto +0 88 43 71 84 0 rrcurveto +76 0 50 -62 0 -96 rrcurveto +0 -98 -49 -62 -77 0 rrcurveto +-76 0 -51 63 0 96 rrcurveto +closepath +endchar } ND +/ayin { +0 543 hsbw +498 20 hstem +50 139 vstem +356 136 vstem +260 102 rmoveto +-71 416 rlineto +-139 0 rlineto +90 -457 rlineto +-38 -10 -45 -8 -52 -8 rrcurveto +17 -112 rlineto +262 43 191 57 10 309 rrcurveto +7 186 rlineto +-136 0 rlineto +-6 -245 rlineto +-2 -100 -15 -43 -73 -28 rrcurveto +closepath +endchar } ND +/finalpe { +0 594 hsbw +-199 20 hstem +150 99 hstem +418 106 hstem +49 129 vstem +396 137 vstem +178 413 rmoveto +20 3 21 2 21 0 rrcurveto +104 0 52 -31 0 -133 rrcurveto +0 -453 rlineto +137 0 rlineto +0 449 rlineto +0 213 -87 61 -211 0 rrcurveto +-62 0 -62 -6 -62 -12 rrcurveto +0 -174 rlineto +0 -120 48 -62 103 0 rrcurveto +27 0 25 5 24 10 rrcurveto +-23 84 rlineto +-18 0 rlineto +-38 0 -19 23 0 48 rrcurveto +0 93 rlineto +closepath +endchar } ND +/pe { +0 587 hsbw +-8 97 hstem +199 99 hstem +435 92 hstem +62 129 vstem +405 143 vstem +62 502 rmoveto +0 -121 rlineto +0 -125 56 -57 95 0 rrcurveto +27 0 25 5 24 10 rrcurveto +-23 84 rlineto +-18 0 rlineto +-38 0 -19 23 0 48 rrcurveto +0 60 rlineto +18 4 19 2 19 0 rrcurveto +100 0 58 -65 0 -106 rrcurveto +0 -116 -75 -59 -113 0 rrcurveto +-45 0 -47 9 -49 19 rrcurveto +-27 -92 rlineto +61 -22 60 -11 60 0 rrcurveto +189 0 129 102 0 176 rrcurveto +0 152 -117 105 -181 0 rrcurveto +-64 0 -63 -9 -61 -16 rrcurveto +closepath +endchar } ND +/finaltsadi { +0 500 hsbw +-199 487 hstem +498 20 hstem +5 162 177 123 324 134 vstem3 +300 -199 rmoveto +0 377 rlineto +82 26 52 47 14 154 rrcurveto +10 113 rlineto +-134 0 rlineto +-7 -98 rlineto +-6 -78 -17 -44 -28 -10 rrcurveto +-113 230 rlineto +-148 0 rlineto +157 -307 rlineto +0 -410 rlineto +138 0 rlineto +closepath +endchar } ND +/tsadi { +0 512 hsbw +0 118 hstem +438 80 hstem +330 128 vstem +463 518 rmoveto +-133 0 rlineto +0 -82 rlineto +0 -103 -15 -7 -32 -9 rrcurveto +-130 201 rlineto +-148 0 rlineto +261 -400 rlineto +-231 0 rlineto +0 -118 rlineto +411 0 rlineto +0 61 rlineto +-106 166 rlineto +52 26 42 46 12 49 rrcurveto +6 13 6 17 0 15 rrcurveto +0 45 rlineto +5 80 rlineto +closepath +endchar } ND +/qof { +0 573 hsbw +-199 20 hstem +0 20 hstem +400 118 hstem +63 137 vstem +384 137 vstem +63 400 rmoveto +321 0 rlineto +0 -65 rlineto +0 -34 -9 -29 -16 -23 rrcurveto +-13 -18 rlineto +-42 -58 -10 -27 0 -53 rrcurveto +0 -93 rlineto +138 0 rlineto +0 86 rlineto +0 32 3 17 31 47 rrcurveto +22 32 rlineto +28 38 5 35 0 98 rrcurveto +0 133 rlineto +-458 0 rlineto +0 -118 rlineto +closepath +0 -599 rmoveto +137 0 rlineto +0 468 rlineto +-137 0 rlineto +0 -468 rlineto +closepath +endchar } ND +/resh { +0 521 hsbw +0 20 hstem +409 115 hstem +324 136 vstem +460 0 rmoveto +0 280 rlineto +0 170 -93 74 -185 0 rrcurveto +-62 0 -54 -6 -46 -10 rrcurveto +10 -108 rlineto +50 6 40 3 31 0 rrcurveto +120 0 53 -44 0 -110 rrcurveto +0 -255 rlineto +136 0 rlineto +closepath +endchar } ND +/shin { +0 715 hsbw +-14 103 hstem +498 20 hstem +50 135 299 128 541 135 vstem3 +206 183 rmoveto +132 11 74 51 8 145 rrcurveto +7 128 rlineto +-133 0 rlineto +-5 -92 rlineto +-4 -103 -23 -53 -77 0 rrcurveto +0 32 rlineto +-3 31 -2 30 0 18 rrcurveto +0 137 rlineto +-136 0 rlineto +6 -175 rlineto +0 -239 114 -118 184 0 rrcurveto +198 0 92 108 21 226 rrcurveto +17 198 rlineto +-135 0 rlineto +-14 -190 rlineto +-15 -184 -56 -55 -110 0 rrcurveto +-67 0 -60 40 -13 54 rrcurveto +closepath +endchar } ND +/tav { +0 673 hsbw +-4 97 hstem +415 109 hstem +144 137 vstem +470 137 vstem +43 103 rmoveto +-21 -89 rlineto +38 -12 39 -6 42 0 rrcurveto +103 0 37 46 0 114 rrcurveto +0 259 rlineto +165 0 24 -28 0 -132 rrcurveto +0 -255 rlineto +137 0 rlineto +0 280 rlineto +0 191 -123 53 -193 0 rrcurveto +-91 0 -87 -6 -84 -10 rrcurveto +11 -106 rlineto +46 5 35 3 23 0 rrcurveto +0 -248 rlineto +0 -54 -10 -15 -38 0 rrcurveto +-16 0 -17 3 -20 7 rrcurveto +closepath +endchar } ND +/doublevav { +0 546 hsbw +-199 20 hstem +498 20 hstem +66 141 vstem +339 141 vstem +480 518 rmoveto +-141 0 rlineto +0 -717 rlineto +141 0 rlineto +0 717 rlineto +closepath +-273 0 rmoveto +-141 0 rlineto +0 -717 rlineto +141 0 rlineto +0 717 rlineto +closepath +endchar } ND +/vavyod { +0 546 hsbw +-199 20 hstem +229 289 hstem +66 141 vstem +339 141 vstem +480 518 rmoveto +-141 0 rlineto +0 -717 rlineto +141 0 rlineto +0 717 rlineto +closepath +-273 0 rmoveto +-141 0 rlineto +0 -289 rlineto +141 0 rlineto +0 289 rlineto +closepath +endchar } ND +/doubleyod { +0 546 hsbw +229 289 hstem +66 141 vstem +339 141 vstem +480 518 rmoveto +-141 0 rlineto +0 -289 rlineto +141 0 rlineto +0 289 rlineto +closepath +-273 0 rmoveto +-141 0 rlineto +0 -289 rlineto +141 0 rlineto +0 289 rlineto +closepath +endchar } ND +/geresh { +0 276 hsbw +312 206 hstem +39 91 vstem +39 312 rmoveto +91 0 rlineto +112 206 rlineto +-150 0 rlineto +-53 -206 rlineto +closepath +endchar } ND +/gershayim { +0 504 hsbw +312 206 hstem +39 91 vstem +267 91 vstem +39 312 rmoveto +91 0 rlineto +112 206 rlineto +-150 0 rlineto +-53 -206 rlineto +closepath +228 0 rmoveto +91 0 rlineto +112 206 rlineto +-150 0 rlineto +-53 -206 rlineto +closepath +endchar } ND +/newsheqelsign { +0 818 hsbw +0 88 hstem +430 88 hstem +66 104 260 104 454 104 vstem3 +648 104 vstem +558 385 rmoveto +0 81 -49 52 -89 0 rrcurveto +-354 0 rlineto +0 -518 rlineto +104 0 rlineto +0 430 rlineto +214 0 rlineto +49 0 21 -24 0 -58 rrcurveto +0 -180 rlineto +104 0 rlineto +0 217 rlineto +closepath +-298 -385 rmoveto +354 0 rlineto +89 0 49 50 0 83 rrcurveto +0 385 rlineto +-104 0 rlineto +0 -348 rlineto +0 -52 -16 -30 -54 0 rrcurveto +-214 0 rlineto +0 262 rlineto +-104 0 rlineto +0 -350 rlineto +closepath +endchar } ND +/vavshindot { +0 273 hsbw +0 20 hstem +498 20 hstem +577 83 hstem +-41 82 vstem +66 141 vstem +207 518 rmoveto +-141 0 rlineto +0 -518 rlineto +141 0 rlineto +0 518 rlineto +closepath +-207 142 rmoveto +-24 0 -17 -18 0 -24 rrcurveto +0 -23 17 -18 24 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/finalkafsheva { +0 521 hsbw +-199 20 hstem +50 82 hstem +154 82 hstem +409 115 hstem +129 82 vstem +323 137 vstem +460 -199 rmoveto +0 479 rlineto +0 169 -93 75 -186 0 rrcurveto +-62 0 -53 -6 -46 -10 rrcurveto +9 -108 rlineto +50 6 41 3 31 0 rrcurveto +112 0 60 -36 0 -118 rrcurveto +0 -454 rlineto +137 0 rlineto +closepath +-290 435 rmoveto +-27 0 -14 -21 0 -20 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 18 0 23 rrcurveto +0 23 -18 18 -23 0 rrcurveto +closepath +0 -104 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -25 19 -16 22 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 23 -17 18 -24 0 rrcurveto +closepath +endchar } ND +/finalkafqamats { +0 521 hsbw +-199 20 hstem +132 51 hstem +409 115 hstem +143 56 vstem +323 137 vstem +460 -199 rmoveto +0 479 rlineto +0 169 -93 75 -186 0 rrcurveto +-62 0 -53 -6 -46 -10 rrcurveto +9 -108 rlineto +50 6 41 3 31 0 rrcurveto +112 0 60 -36 0 -118 rrcurveto +0 -454 rlineto +137 0 rlineto +closepath +-317 249 rmoveto +56 0 rlineto +0 82 rlineto +70 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +71 0 rlineto +0 -82 rlineto +closepath +endchar } ND +/lamedholam { +0 496 hsbw +0 20 hstem +400 118 hstem +577 83 hstem +696 20 hstem +-114 82 vstem +32 136 vstem +218 136 vstem +445 518 rmoveto +-277 0 rlineto +0 198 rlineto +-136 0 rlineto +0 -316 rlineto +276 0 rlineto +0 -65 rlineto +0 -34 -9 -29 -16 -23 rrcurveto +-13 -18 rlineto +-42 -58 -10 -27 0 -53 rrcurveto +0 -93 rlineto +136 0 rlineto +0 86 rlineto +0 37 8 19 28 40 rrcurveto +22 32 rlineto +26 38 7 35 0 98 rrcurveto +0 133 rlineto +closepath +-518 142 rmoveto +-24 0 -17 -18 0 -24 rrcurveto +0 -23 17 -18 24 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/lamedholamdagesh { +0 496 hsbw +0 20 hstem +241 82 hstem +400 118 hstem +577 83 hstem +696 20 hstem +-114 82 vstem +107 82 vstem +218 136 vstem +445 518 rmoveto +-277 0 rlineto +0 198 rlineto +-136 0 rlineto +0 -316 rlineto +276 0 rlineto +0 -65 rlineto +0 -34 -9 -29 -16 -23 rrcurveto +-13 -18 rlineto +-42 -58 -10 -27 0 -53 rrcurveto +0 -93 rlineto +136 0 rlineto +0 86 rlineto +0 37 8 19 28 40 rrcurveto +22 32 rlineto +26 38 7 35 0 98 rrcurveto +0 133 rlineto +closepath +-518 142 rmoveto +-24 0 -17 -18 0 -24 rrcurveto +0 -23 17 -18 24 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +221 -337 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -22 19 -19 22 0 rrcurveto +24 0 17 18 0 23 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/altayin { +0 559 hsbw +0 118 hstem +498 20 hstem +66 139 vstem +372 136 vstem +194 0 rmoveto +237 0 61 86 8 212 rrcurveto +8 220 rlineto +-136 0 rlineto +-6 -245 rlineto +-3 -91 -21 -39 -69 -25 rrcurveto +-68 400 rlineto +-139 0 rlineto +79 -400 rlineto +-121 0 rlineto +0 -118 rlineto +170 0 rlineto +closepath +endchar } ND +/shinshindot { +0 715 hsbw +-14 103 hstem +498 20 hstem +577 83 hstem +50 135 vstem +294 133 vstem +571 82 vstem +206 183 rmoveto +132 11 74 51 8 145 rrcurveto +7 128 rlineto +-133 0 rlineto +-5 -92 rlineto +-4 -103 -23 -53 -77 0 rrcurveto +0 32 rlineto +-3 31 -2 30 0 18 rrcurveto +0 137 rlineto +-136 0 rlineto +6 -175 rlineto +0 -239 114 -118 184 0 rrcurveto +198 0 92 108 21 226 rrcurveto +17 198 rlineto +-135 0 rlineto +-14 -190 rlineto +-15 -184 -56 -55 -110 0 rrcurveto +-67 0 -60 40 -13 54 rrcurveto +closepath +406 477 rmoveto +-20 0 -21 -16 0 -26 rrcurveto +0 -23 18 -18 23 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/shinsindot { +0 715 hsbw +-14 103 hstem +498 20 hstem +577 83 hstem +69 82 vstem +294 133 vstem +541 135 vstem +206 183 rmoveto +132 11 74 51 8 145 rrcurveto +7 128 rlineto +-133 0 rlineto +-5 -92 rlineto +-4 -103 -23 -53 -77 0 rrcurveto +0 32 rlineto +-3 31 -2 30 0 18 rrcurveto +0 137 rlineto +-136 0 rlineto +6 -175 rlineto +0 -239 114 -118 184 0 rrcurveto +198 0 92 108 21 226 rrcurveto +17 198 rlineto +-135 0 rlineto +-14 -190 rlineto +-15 -184 -56 -55 -110 0 rrcurveto +-67 0 -60 40 -13 54 rrcurveto +closepath +-96 477 rmoveto +-24 0 -17 -18 0 -24 rrcurveto +0 -23 17 -18 24 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -16 21 -25 0 rrcurveto +closepath +endchar } ND +/shindageshshindot { +0 715 hsbw +-14 103 hstem +180 338 hstem +577 83 hstem +50 135 vstem +397 82 vstem +570 82 vstem +206 183 rmoveto +132 11 74 51 8 145 rrcurveto +7 128 rlineto +-133 0 rlineto +-5 -92 rlineto +-4 -103 -23 -53 -77 0 rrcurveto +0 32 rlineto +-3 31 -2 30 0 18 rrcurveto +0 137 rlineto +-136 0 rlineto +6 -175 rlineto +0 -239 114 -118 184 0 rrcurveto +198 0 92 108 21 226 rrcurveto +17 198 rlineto +-135 0 rlineto +-14 -190 rlineto +-15 -184 -56 -55 -110 0 rrcurveto +-67 0 -60 40 -13 54 rrcurveto +closepath +232 79 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +21 0 20 17 0 24 rrcurveto +0 22 -18 19 -23 0 rrcurveto +closepath +173 398 rmoveto +-20 0 -21 -16 0 -26 rrcurveto +0 -23 18 -18 23 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -15 21 -26 0 rrcurveto +closepath +endchar } ND +/shindageshsindot { +0 715 hsbw +-14 103 hstem +180 338 hstem +577 83 hstem +69 82 vstem +397 82 vstem +541 135 vstem +206 183 rmoveto +132 11 74 51 8 145 rrcurveto +7 128 rlineto +-133 0 rlineto +-5 -92 rlineto +-4 -103 -23 -53 -77 0 rrcurveto +0 32 rlineto +-3 31 -2 30 0 18 rrcurveto +0 137 rlineto +-136 0 rlineto +6 -175 rlineto +0 -239 114 -118 184 0 rrcurveto +198 0 92 108 21 226 rrcurveto +17 198 rlineto +-135 0 rlineto +-14 -190 rlineto +-15 -184 -56 -55 -110 0 rrcurveto +-67 0 -60 40 -13 54 rrcurveto +closepath +232 79 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +21 0 20 17 0 24 rrcurveto +0 22 -18 19 -23 0 rrcurveto +closepath +-328 398 rmoveto +-24 0 -17 -18 0 -24 rrcurveto +0 -23 17 -18 24 0 rrcurveto +22 0 19 19 0 22 rrcurveto +0 21 -16 21 -25 0 rrcurveto +closepath +endchar } ND +/alefpatah { +0 583 hsbw +-154 51 hstem +0 20 hstem +498 20 hstem +38 139 193 192 407 127 vstem3 +414 220 rmoveto +64 42 36 46 14 147 rrcurveto +6 63 rlineto +-127 0 rlineto +-7 -85 rlineto +-6 -66 -15 -43 -25 -18 rrcurveto +-150 212 rlineto +-161 0 rlineto +121 -172 rlineto +-58 -36 -39 -51 -13 -149 rrcurveto +-10 -110 rlineto +133 0 rlineto +8 103 rlineto +6 79 14 51 23 23 rrcurveto +181 -256 rlineto +161 0 rlineto +-156 220 rlineto +closepath +-221 -374 rmoveto +196 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/alefqamats { +0 583 hsbw +-210 133 hstem +0 20 hstem +498 20 hstem +38 139 263 52 407 127 vstem3 +414 220 rmoveto +64 42 36 46 14 147 rrcurveto +6 63 rlineto +-127 0 rlineto +-7 -85 rlineto +-6 -66 -15 -43 -25 -18 rrcurveto +-150 212 rlineto +-161 0 rlineto +121 -172 rlineto +-58 -36 -39 -51 -13 -149 rrcurveto +-10 -110 rlineto +133 0 rlineto +8 103 rlineto +6 79 14 51 23 23 rrcurveto +181 -256 rlineto +161 0 rlineto +-156 220 rlineto +closepath +-151 -430 rmoveto +57 0 rlineto +0 82 rlineto +69 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +70 0 rlineto +0 -82 rlineto +closepath +endchar } ND +/alefmapiq { +0 583 hsbw +0 20 hstem +36 82 hstem +498 20 hstem +44 133 vstem +226 82 vstem +407 127 vstem +414 220 rmoveto +64 42 36 46 14 147 rrcurveto +6 63 rlineto +-127 0 rlineto +-7 -85 rlineto +-6 -66 -15 -43 -25 -18 rrcurveto +-150 212 rlineto +-161 0 rlineto +121 -172 rlineto +-58 -36 -39 -51 -13 -149 rrcurveto +-10 -110 rlineto +133 0 rlineto +8 103 rlineto +6 79 14 51 23 23 rrcurveto +181 -256 rlineto +161 0 rlineto +-156 220 rlineto +closepath +-147 -102 rmoveto +-24 0 -17 -17 0 -24 rrcurveto +0 -24 19 -17 22 0 rrcurveto +21 0 20 19 0 22 rrcurveto +0 24 -19 17 -22 0 rrcurveto +closepath +endchar } ND +/betdagesh { +0 576 hsbw +0 122 225 78 410 114 hstem3 +133 82 vstem +323 137 vstem +460 118 rmoveto +0 162 rlineto +0 169 -87 75 -189 0 rrcurveto +-51 0 -51 -6 -50 -10 rrcurveto +10 -108 rlineto +43 6 39 4 36 0 rrcurveto +120 0 43 -42 0 -113 rrcurveto +0 -137 rlineto +-285 0 rlineto +0 -118 rlineto +516 0 rlineto +0 118 rlineto +-94 0 rlineto +closepath +-286 185 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -23 17 -18 24 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -23 15 -18 0 rrcurveto +closepath +endchar } ND +/gimeldagesh { +0 454 hsbw +0 330 hstem +412 112 hstem +88 82 vstem +234 137 vstem +83 515 rmoveto +10 -106 rlineto +7 2 13 1 20 0 rrcurveto +74 0 27 -35 0 -65 rrcurveto +0 -100 rlineto +-92 -8 -66 -49 -41 -90 rrcurveto +-30 -65 rlineto +137 0 rlineto +33 61 rlineto +18 33 26 20 35 6 rrcurveto +34 -120 rlineto +137 0 rlineto +-54 200 rlineto +0 123 rlineto +0 142 -61 59 -130 0 rrcurveto +-40 0 -32 -3 -25 -6 rrcurveto +closepath +46 -185 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/daletdagesh { +0 550 hsbw +0 20 hstem +221 83 hstem +400 118 hstem +167 83 vstem +308 137 vstem +525 400 rmoveto +0 118 rlineto +-501 0 rlineto +0 -118 rlineto +284 0 rlineto +0 -400 rlineto +137 0 rlineto +0 400 rlineto +80 0 rlineto +closepath +-317 -96 rmoveto +-23 0 -18 -18 0 -24 rrcurveto +0 -23 18 -18 23 0 rrcurveto +22 0 20 19 0 22 rrcurveto +0 21 -14 21 -28 0 rrcurveto +closepath +endchar } ND +/hedagesh { +0 614 hsbw +0 269 hstem +412 112 hstem +69 138 vstem +265 82 vstem +417 136 vstem +553 0 rmoveto +0 264 rlineto +0 189 -110 71 -192 0 rrcurveto +-72 0 -63 -5 -53 -9 rrcurveto +10 -110 rlineto +56 8 51 4 48 0 rrcurveto +125 0 64 -42 0 -126 rrcurveto +0 -244 rlineto +136 0 rlineto +closepath +-346 269 rmoveto +-138 0 rlineto +0 -269 rlineto +138 0 rlineto +0 269 rlineto +closepath +99 18 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +21 0 20 19 0 22 rrcurveto +0 21 -22 20 -19 0 rrcurveto +closepath +endchar } ND +/vavdagesh { +0 323 hsbw +0 20 hstem +241 82 hstem +498 20 hstem +0 82 vstem +116 141 vstem +257 518 rmoveto +-141 0 rlineto +0 -518 rlineto +141 0 rlineto +0 518 rlineto +closepath +-216 -195 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -27 21 -14 20 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/zayindagesh { +0 438 hsbw +0 20 hstem +221 82 hstem +420 98 hstem +0 82 vstem +141 122 vstem +412 420 rmoveto +0 98 rlineto +-352 0 rlineto +0 -118 rlineto +143 0 rlineto +-42 -30 -20 -44 0 -58 rrcurveto +0 -14 1 -15 2 -22 rrcurveto +5 -54 3 -53 0 -44 rrcurveto +0 -66 rlineto +127 0 rlineto +0 78 rlineto +0 48 -3 56 -9 59 rrcurveto +-3 20 -1 17 0 13 rrcurveto +0 89 58 40 91 0 rrcurveto +closepath +-371 -117 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -23 17 -18 24 0 rrcurveto +22 0 19 18 0 23 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/tetdagesh { +0 626 hsbw +-12 114 hstem +212 82 hstem +410 120 hstem +60 138 276 79 434 136 vstem3 +310 366 rmoveto +19 29 22 15 26 0 rrcurveto +32 0 25 -20 0 -109 rrcurveto +0 -51 rlineto +0 -82 -44 -46 -72 0 rrcurveto +-70 0 -50 45 0 115 rrcurveto +0 256 rlineto +-137 0 rlineto +0 -225 rlineto +0 -188 90 -117 167 0 rrcurveto +167 0 85 119 0 175 rrcurveto +0 141 -34 107 -124 0 rrcurveto +-62 0 -47 -31 -34 -60 rrcurveto +41 -73 rlineto +closepath +7 -72 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/yoddagesh { +0 323 hsbw +229 289 hstem +0 82 vstem +116 141 vstem +257 518 rmoveto +-141 0 rlineto +0 -289 rlineto +141 0 rlineto +0 289 rlineto +closepath +-216 -141 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/finalkafdagesh { +0 521 hsbw +-199 20 hstem +206 82 hstem +409 115 hstem +134 82 vstem +323 137 vstem +460 -199 rmoveto +0 479 rlineto +0 169 -93 75 -186 0 rrcurveto +-62 0 -53 -6 -46 -10 rrcurveto +9 -108 rlineto +50 6 41 3 31 0 rrcurveto +112 0 60 -36 0 -118 rrcurveto +0 -454 rlineto +137 0 rlineto +closepath +-285 487 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -24 20 -17 21 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 26 -21 15 -20 0 rrcurveto +closepath +endchar } ND +/kafdagesh { +0 491 hsbw +-8 106 220 78 420 106 hstem3 +118 82 vstem +308 144 vstem +37 8 rmoveto +34 -10 41 -6 47 0 rrcurveto +173 0 120 91 0 176 rrcurveto +0 174 -117 93 -176 0 rrcurveto +-48 0 -40 -6 -34 -10 rrcurveto +19 -107 rlineto +31 11 30 6 30 0 rrcurveto +101 0 60 -63 0 -98 rrcurveto +0 -99 -61 -62 -100 0 rrcurveto +-29 0 -30 5 -32 12 rrcurveto +-19 -107 rlineto +closepath +122 290 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 17 -17 24 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 25 -23 16 -18 0 rrcurveto +closepath +endchar } ND +/lameddagesh { +0 496 hsbw +0 20 hstem +239 82 hstem +400 118 hstem +696 20 hstem +107 82 vstem +218 136 vstem +445 518 rmoveto +-277 0 rlineto +0 198 rlineto +-136 0 rlineto +0 -316 rlineto +276 0 rlineto +0 -65 rlineto +0 -34 -9 -29 -16 -23 rrcurveto +-13 -18 rlineto +-42 -58 -10 -27 0 -53 rrcurveto +0 -93 rlineto +136 0 rlineto +0 86 rlineto +0 37 8 19 28 40 rrcurveto +22 32 rlineto +26 38 7 35 0 98 rrcurveto +0 133 rlineto +closepath +-297 -197 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -24 19 -17 22 0 rrcurveto +24 0 17 17 0 24 rrcurveto +0 25 -21 16 -20 0 rrcurveto +closepath +endchar } ND +/memdagesh { +0 630 hsbw +0 118 hstem +208 82 hstem +406 118 hstem +27 124 vstem +296 82 vstem +432 137 vstem +182 407 rmoveto +-31 111 rlineto +-124 0 rlineto +87 -258 rlineto +-12 -32 -13 -49 -14 -66 rrcurveto +-24 -113 rlineto +145 0 rlineto +31 175 rlineto +32 178 36 53 60 0 rrcurveto +56 0 21 -48 0 -136 rrcurveto +0 -104 rlineto +-127 0 rlineto +0 -118 rlineto +264 0 rlineto +0 215 rlineto +0 217 -79 92 -121 0 rrcurveto +-74 0 -62 -39 -51 -78 rrcurveto +closepath +155 -117 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/nundagesh { +0 386 hsbw +0 124 231 68 412 112 hstem3 +63 82 vstem +188 137 vstem +325 0 rmoveto +0 323 rlineto +0 140 -61 61 -130 0 rrcurveto +-40 0 -32 -3 -25 -6 rrcurveto +10 -106 rlineto +8 2 13 1 19 0 rrcurveto +62 0 39 -22 0 -78 rrcurveto +0 -194 rlineto +-144 0 rlineto +0 -118 rlineto +281 0 rlineto +closepath +-221 299 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/samekhdagesh { +0 613 hsbw +-12 112 220 78 418 112 hstem3 +39 141 266 81 433 141 vstem3 +39 255 rmoveto +0 -159 109 -108 159 0 rrcurveto +158 0 109 119 0 154 rrcurveto +0 154 -110 115 -158 0 rrcurveto +-159 0 -108 -111 0 -164 rrcurveto +closepath +141 4 rmoveto +0 88 43 71 84 0 rrcurveto +76 0 50 -62 0 -96 rrcurveto +0 -98 -49 -62 -77 0 rrcurveto +-76 0 -51 63 0 96 rrcurveto +closepath +126 39 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -24 17 -17 24 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 25 -21 16 -20 0 rrcurveto +closepath +endchar } ND +/finalpedagesh { +0 594 hsbw +-199 20 hstem +184 80 hstem +418 106 hstem +49 129 vstem +278 79 vstem +396 137 vstem +178 413 rmoveto +20 3 21 2 21 0 rrcurveto +113 0 43 -40 0 -124 rrcurveto +0 -453 rlineto +137 0 rlineto +0 439 rlineto +0 208 -90 76 -208 0 rrcurveto +-62 0 -62 -6 -62 -12 rrcurveto +0 -174 rlineto +0 -135 52 -47 88 0 rrcurveto +26 0 23 5 22 10 rrcurveto +-22 84 rlineto +-14 0 rlineto +-31 0 -15 23 0 48 rrcurveto +0 93 rlineto +closepath +100 -189 rmoveto +0 -24 17 -16 23 0 rrcurveto +22 0 17 19 0 21 rrcurveto +0 21 -20 19 -19 0 rrcurveto +-24 0 -16 -19 0 -21 rrcurveto +closepath +endchar } ND +/pedagesh { +0 587 hsbw +-8 102 226 72 435 92 hstem3 +62 129 vstem +289 79 vstem +405 143 vstem +62 502 rmoveto +0 -121 rlineto +0 -116 46 -65 98 0 rrcurveto +20 0 19 3 18 7 rrcurveto +-12 88 rlineto +-17 -4 -15 5 -12 14 rrcurveto +-11 10 -5 19 0 27 rrcurveto +0 60 rlineto +18 4 19 2 19 0 rrcurveto +100 0 58 -65 0 -106 rrcurveto +0 -116 -75 -59 -113 0 rrcurveto +-45 0 -47 9 -49 19 rrcurveto +-27 -92 rlineto +61 -22 60 -11 60 0 rrcurveto +189 0 129 102 0 176 rrcurveto +0 152 -117 105 -181 0 rrcurveto +-64 0 -63 -9 -61 -16 rrcurveto +closepath +266 -204 rmoveto +-22 0 -17 -12 0 -28 rrcurveto +0 -26 20 -14 19 0 rrcurveto +18 0 22 14 0 26 rrcurveto +0 28 -20 12 -20 0 rrcurveto +closepath +endchar } ND +/tsadidagesh { +0 512 hsbw +0 118 hstem +210 308 hstem +19 82 vstem +330 128 vstem +463 518 rmoveto +-133 0 rlineto +0 -82 rlineto +0 -103 -15 -7 -32 -9 rrcurveto +-130 201 rlineto +-148 0 rlineto +261 -400 rlineto +-231 0 rlineto +0 -118 rlineto +411 0 rlineto +0 61 rlineto +-106 166 rlineto +52 26 42 46 12 49 rrcurveto +6 13 6 17 0 15 rrcurveto +0 45 rlineto +5 80 rlineto +closepath +-403 -226 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/qofdagesh { +0 573 hsbw +-199 20 hstem +0 20 hstem +241 82 hstem +400 118 hstem +63 137 vstem +230 83 vstem +384 137 vstem +63 400 rmoveto +321 0 rlineto +0 -65 rlineto +0 -34 -9 -29 -16 -23 rrcurveto +-13 -18 rlineto +-42 -58 -10 -27 0 -53 rrcurveto +0 -93 rlineto +138 0 rlineto +0 86 rlineto +0 32 3 17 31 47 rrcurveto +22 32 rlineto +28 38 5 35 0 98 rrcurveto +0 133 rlineto +-458 0 rlineto +0 -118 rlineto +closepath +0 -599 rmoveto +137 0 rlineto +0 468 rlineto +-137 0 rlineto +0 -468 rlineto +closepath +208 522 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -23 17 -18 24 0 rrcurveto +23 0 19 18 0 23 rrcurveto +0 21 -20 20 -22 0 rrcurveto +closepath +endchar } ND +/reshdagesh { +0 521 hsbw +0 20 hstem +207 82 hstem +409 115 hstem +134 82 vstem +324 136 vstem +460 0 rmoveto +0 280 rlineto +0 170 -93 74 -185 0 rrcurveto +-62 0 -54 -6 -46 -10 rrcurveto +10 -108 rlineto +50 6 40 3 31 0 rrcurveto +120 0 53 -44 0 -110 rrcurveto +0 -255 rlineto +136 0 rlineto +closepath +-285 289 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 17 -17 24 0 rrcurveto +22 0 19 17 0 24 rrcurveto +0 25 -23 16 -18 0 rrcurveto +closepath +endchar } ND +/shindagesh { +0 715 hsbw +-14 103 hstem +180 338 hstem +50 135 vstem +397 82 vstem +541 135 vstem +206 183 rmoveto +132 11 74 51 8 145 rrcurveto +7 128 rlineto +-133 0 rlineto +-5 -92 rlineto +-4 -103 -23 -53 -77 0 rrcurveto +0 32 rlineto +-3 31 -2 30 0 18 rrcurveto +0 137 rlineto +-136 0 rlineto +6 -175 rlineto +0 -239 114 -118 184 0 rrcurveto +198 0 92 108 21 226 rrcurveto +17 198 rlineto +-135 0 rlineto +-14 -190 rlineto +-15 -184 -56 -55 -110 0 rrcurveto +-67 0 -60 40 -13 54 rrcurveto +closepath +232 79 rmoveto +-23 0 -18 -17 0 -24 rrcurveto +0 -24 17 -17 24 0 rrcurveto +21 0 20 17 0 24 rrcurveto +0 22 -18 19 -23 0 rrcurveto +closepath +endchar } ND +/tavdages { +0 673 hsbw +-4 97 hstem +193 82 hstem +415 109 hstem +144 137 338 75 470 137 vstem3 +43 103 rmoveto +-21 -89 rlineto +38 -12 39 -6 42 0 rrcurveto +103 0 37 46 0 114 rrcurveto +0 259 rlineto +165 0 24 -28 0 -132 rrcurveto +0 -255 rlineto +137 0 rlineto +0 280 rlineto +0 191 -123 53 -193 0 rrcurveto +-91 0 -87 -6 -84 -10 rrcurveto +11 -106 rlineto +46 5 35 3 23 0 rrcurveto +0 -248 rlineto +0 -54 -10 -15 -38 0 rrcurveto +-16 0 -17 3 -20 7 rrcurveto +closepath +329 172 rmoveto +-24 0 -17 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 19 0 22 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/vavholam { +0 273 hsbw +0 20 hstem +498 20 hstem +577 82 hstem +95 82 vstem +207 518 rmoveto +-141 0 rlineto +0 -518 rlineto +141 0 rlineto +0 518 rlineto +closepath +-71 141 rmoveto +-23 0 -18 -19 0 -22 rrcurveto +0 -24 18 -17 23 0 rrcurveto +23 0 18 18 0 23 rrcurveto +0 21 -19 20 -22 0 rrcurveto +closepath +endchar } ND +/betrafe { +0 576 hsbw +0 118 hstem +410 114 hstem +611 51 hstem +323 137 vstem +460 118 rmoveto +0 162 rlineto +0 169 -87 75 -189 0 rrcurveto +-51 0 -51 -6 -50 -10 rrcurveto +10 -108 rlineto +43 6 39 4 36 0 rrcurveto +120 0 43 -42 0 -113 rrcurveto +0 -137 rlineto +-285 0 rlineto +0 -118 rlineto +516 0 rlineto +0 118 rlineto +-94 0 rlineto +closepath +-312 493 rmoveto +197 0 rlineto +0 51 rlineto +-197 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/kafrafe { +0 491 hsbw +-8 106 hstem +420 106 hstem +611 51 hstem +308 144 vstem +37 8 rmoveto +34 -10 41 -6 47 0 rrcurveto +173 0 120 91 0 176 rrcurveto +0 174 -117 93 -176 0 rrcurveto +-48 0 -40 -6 -34 -10 rrcurveto +19 -107 rlineto +31 11 30 6 30 0 rrcurveto +101 0 60 -63 0 -98 rrcurveto +0 -99 -61 -62 -100 0 rrcurveto +-29 0 -30 5 -32 12 rrcurveto +-19 -107 rlineto +closepath +80 603 rmoveto +196 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/perafe { +0 587 hsbw +-8 97 hstem +199 99 hstem +435 92 hstem +611 51 hstem +62 129 vstem +405 143 vstem +62 502 rmoveto +0 -121 rlineto +0 -125 56 -57 95 0 rrcurveto +27 0 25 5 24 10 rrcurveto +-23 84 rlineto +-18 0 rlineto +-38 0 -19 23 0 48 rrcurveto +0 60 rlineto +18 4 19 2 19 0 rrcurveto +100 0 58 -65 0 -106 rrcurveto +0 -116 -75 -59 -113 0 rrcurveto +-45 0 -47 9 -49 19 rrcurveto +-27 -92 rlineto +61 -22 60 -11 60 0 rrcurveto +189 0 129 102 0 176 rrcurveto +0 152 -117 105 -181 0 rrcurveto +-64 0 -63 -9 -61 -16 rrcurveto +closepath +126 109 rmoveto +196 0 rlineto +0 51 rlineto +-196 0 rlineto +0 -51 rlineto +closepath +endchar } ND +/aleflamed { +0 607 hsbw +0 20 hstem +498 20 hstem +696 20 hstem +32 136 vstem +69 526 vstem +150 400 rmoveto +38 -54 rlineto +-58 -36 -39 -51 -12 -149 rrcurveto +-10 -110 rlineto +133 0 rlineto +7 103 rlineto +6 79 14 51 23 23 rrcurveto +182 -256 rlineto +161 0 rlineto +-157 220 rlineto +65 42 35 46 15 147 rrcurveto +6 63 rlineto +-127 0 rlineto +-7 -85 rlineto +-6 -66 -15 -43 -26 -18 rrcurveto +-149 212 rlineto +-61 0 rlineto +0 198 rlineto +-136 0 rlineto +0 -316 rlineto +118 0 rlineto +closepath +endchar } ND +/zerowidthnonjoiner { +0 0 hsbw +-134 20 hstem +609 20 hstem +-18 36 vstem +18 629 rmoveto +-36 0 rlineto +0 -763 rlineto +36 0 rlineto +0 763 rlineto +closepath +endchar } ND +/zerowidthjoiner { +0 0 hsbw +-134 20 hstem +586 20 hstem +-18 36 vstem +18 -134 rmoveto +0 678 rlineto +65 -66 rlineto +24 23 rlineto +-84 83 rlineto +84 82 rlineto +-24 24 rlineto +-83 -84 rlineto +-83 84 rlineto +-24 -24 rlineto +84 -82 rlineto +-84 -83 rlineto +24 -23 rlineto +65 66 rlineto +0 -678 rlineto +36 0 rlineto +closepath +endchar } ND +/lefttorightmark { +0 0 hsbw +568 35 hstem +-18 35 vstem +210 585 rmoveto +-106 105 rlineto +-24 -24 rlineto +67 -63 rlineto +-165 0 rlineto +0 -737 rlineto +35 0 rlineto +0 702 rlineto +130 0 rlineto +-67 -64 rlineto +24 -24 rlineto +106 105 rlineto +closepath +endchar } ND +/righttoleftmark { +0 0 hsbw +568 35 hstem +-18 35 vstem +17 -134 rmoveto +0 737 rlineto +-164 0 rlineto +66 63 rlineto +-23 24 rlineto +-106 -105 rlineto +106 -105 rlineto +23 24 rlineto +-66 64 rlineto +129 0 rlineto +0 -702 rlineto +35 0 rlineto +closepath +endchar } ND +/afii57388 { +0 319 hsbw +137 306 hstem +83 52 vstem +241 204 rmoveto +0 37 -26 18 -27 12 rrcurveto +-28 11 -25 10 0 18 rrcurveto +0 32 31 39 40 36 rrcurveto +-17 26 rlineto +-74 -53 -32 -54 0 -77 rrcurveto +0 -70 37 -52 51 0 rrcurveto +41 0 29 32 0 35 rrcurveto +closepath +endchar } ND +/afii57403 { +0 319 hsbw +136 113 hstem +303 306 hstem +78 51 vstem +235 370 rmoveto +0 37 -26 18 -27 12 rrcurveto +-28 11 -25 10 0 18 rrcurveto +0 32 31 39 40 36 rrcurveto +-16 26 rlineto +-74 -53 -32 -54 0 -77 rrcurveto +0 -70 37 -52 51 0 rrcurveto +40 0 29 32 0 35 rrcurveto +closepath +-13 -178 rmoveto +0 33 -24 24 -32 0 rrcurveto +-32 0 -26 -25 0 -32 rrcurveto +0 -31 27 -25 31 0 rrcurveto +30 0 26 25 0 31 rrcurveto +closepath +endchar } ND +/afii57407 { +0 356 hsbw +137 121 hstem +679 32 hstem +33 92 vstem +170 35 vstem +254 72 vstem +326 590 rmoveto +0 73 -63 48 -77 0 rrcurveto +-87 0 -66 -64 0 -88 rrcurveto +0 -69 16 -14 88 -77 rrcurveto +25 -22 8 -19 0 -18 rrcurveto +0 -39 rlineto +30 0 rlineto +3 26 2 24 0 22 rrcurveto +0 67 -12 28 -47 89 rrcurveto +-13 25 -8 20 0 16 rrcurveto +0 34 30 27 43 0 rrcurveto +33 0 23 -15 0 -22 rrcurveto +0 -7 -12 -10 -14 -11 rrcurveto +-14 -11 -13 -16 0 -22 rrcurveto +0 -30 24 -24 32 0 rrcurveto +40 0 29 39 0 40 rrcurveto +closepath +-89 -393 rmoveto +0 33 -26 28 -33 0 rrcurveto +-34 0 -27 -27 0 -34 rrcurveto +0 -32 27 -28 32 0 rrcurveto +34 0 27 26 0 34 rrcurveto +closepath +endchar } ND +/afii57409 { +0 469 hsbw +384 126 hstem +62 98 vstem +422 332 rmoveto +-67 -6 -24 -5 -82 -40 rrcurveto +-64 33 -25 21 0 20 rrcurveto +0 16 19 13 20 0 rrcurveto +24 0 26 -16 31 -34 rrcurveto +66 108 rlineto +-43 50 -30 18 -45 0 rrcurveto +-102 0 -64 -163 0 -50 rrcurveto +0 -28 13 -20 62 -61 rrcurveto +-41 -52 -21 -33 0 -46 rrcurveto +29 -11 rlineto +102 115 47 27 130 32 rrcurveto +39 112 rlineto +closepath +endchar } ND +/afii57440 { +0 198 hsbw +143 133 hstem +0 232 vstem +232 143 rmoveto +0 133 rlineto +-232 0 rlineto +0 -133 rlineto +232 0 rlineto +closepath +endchar } ND +/afii57451 { +0 201 hsbw +34 167 vstem +201 857 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-44 -16 -34 -15 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 15 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -14 0 -32 rrcurveto +31 15 28 11 26 8 rrcurveto +45 14 37 19 0 34 rrcurveto +closepath +endchar } ND +/afii57452 { +0 237 hsbw +683 39 hstem +774 42 hstem +841 31 hstem +85 25 vstem +139 31 vstem +202 35 vstem +237 840 rmoveto +0 17 -15 15 -17 0 rrcurveto +-34 0 -32 -41 0 -31 rrcurveto +0 -17 16 -17 13 -12 rrcurveto +-21 -16 -20 -10 -22 -6 rrcurveto +0 8 rlineto +2 7 3 15 0 12 rrcurveto +0 26 -13 26 -22 0 rrcurveto +-32 0 -5 -35 -4 -41 rrcurveto +2 7 3 4 3 3 rrcurveto +2 3 2 3 1 2 rrcurveto +6 8 6 4 7 0 rrcurveto +12 0 7 -14 0 -16 rrcurveto +0 -8 -2 -9 -4 -8 rrcurveto +-2 -3 -7 -12 -12 -21 rrcurveto +50 0 44 19 34 39 rrcurveto +42 -33 rlineto +2 14 1 14 0 15 rrcurveto +0 9 -7 7 -9 7 rrcurveto +14 22 8 20 0 24 rrcurveto +closepath +-35 -28 rmoveto +0 -7 -2 -6 -4 -6 rrcurveto +-19 14 -7 9 0 12 rrcurveto +0 8 3 5 8 0 rrcurveto +12 0 9 -15 0 -14 rrcurveto +closepath +endchar } ND +/afii57453 { +0 201 hsbw +34 167 vstem +201 41 rmoveto +-34 -15 -30 -12 -25 -9 rrcurveto +-43 -18 -35 -15 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 16 rrcurveto +closepath +0 -72 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-43 -18 -35 -15 0 -32 rrcurveto +65 27 47 19 30 11 rrcurveto +16 15 9 15 0 15 rrcurveto +closepath +endchar } ND +/afii57454 { +0 201 hsbw +201 784 rmoveto +-70 -29 -49 -20 -28 -11 rrcurveto +-14 -13 -6 -14 0 -14 rrcurveto +31 15 28 11 26 8 rrcurveto +45 14 37 19 0 34 rrcurveto +closepath +endchar } ND +/afii57455 { +0 209 hsbw +854 41 hstem +110 25 vstem +143 66 vstem +209 764 rmoveto +0 6 -2 5 -3 4 rrcurveto +-6 4 -5 4 -5 5 rrcurveto +13 36 2 8 0 12 rrcurveto +0 26 -16 21 -17 0 rrcurveto +-30 0 -30 -38 0 -44 rrcurveto +0 -20 14 -15 19 -12 rrcurveto +-23 -28 -53 -40 -32 -15 rrcurveto +36 0 rlineto +26 0 27 27 41 43 rrcurveto +40 -24 rlineto +3 18 rlineto +1 5 rlineto +0 12 rlineto +closepath +-37 55 rmoveto +0 -6 rlineto +-1 -2 -1 -3 -1 -3 rrcurveto +-22 17 rlineto +-8 7 -4 7 0 8 rrcurveto +0 5 4 5 7 0 rrcurveto +10 0 16 -18 0 -17 rrcurveto +closepath +endchar } ND +/afii57456 { +0 201 hsbw +201 41 rmoveto +-34 -16 -30 -12 -25 -9 rrcurveto +-43 -18 -35 -14 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 4 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/afii57457 { +0 211 hsbw +683 54 hstem +34 22 vstem +196 10 vstem +209 799 rmoveto +0 21 rlineto +-2 6 -1 7 0 7 rrcurveto +-10 -3 rlineto +0 -27 -13 -38 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -45 -8 -31 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-8 -22 -5 -14 0 -17 rrcurveto +0 -34 14 -18 27 0 rrcurveto +20 0 18 18 14 24 rrcurveto +12 -10 9 -3 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +endchar } ND +/afii57458 { +0 165 hsbw +683 48 hstem +794 40 hstem +34 20 vstem +135 30 vstem +165 761 rmoveto +0 38 -29 35 -34 0 rrcurveto +-39 0 -29 -46 0 -50 rrcurveto +0 -35 18 -20 35 0 rrcurveto +44 0 34 36 0 42 rrcurveto +closepath +-30 -13 rmoveto +0 -14 -12 -3 -17 0 rrcurveto +-30 0 -22 5 0 25 rrcurveto +0 14 12 19 18 0 rrcurveto +17 0 34 -29 0 -17 rrcurveto +closepath +endchar } ND +/afii57392 { +0 562 hsbw +360 361 rmoveto +-57 38 -11 10 -55 48 rrcurveto +-6 -17 -5 -15 -4 -14 rrcurveto +-3 -14 -4 -12 -4 -9 rrcurveto +-2 -6 -3 -9 -3 -14 rrcurveto +-3 -13 -4 -17 -5 -20 rrcurveto +53 -47 15 -10 66 -34 rrcurveto +6 34 5 25 5 19 rrcurveto +1 4 2 8 3 13 rrcurveto +2 14 5 18 6 20 rrcurveto +closepath +endchar } ND +/afii57393 { +0 562 hsbw +699 20 hstem +310 49 vstem +359 334 rmoveto +0 138 -20 101 -114 146 rrcurveto +-61 -150 rlineto +130 -173 16 -37 0 -213 rrcurveto +30 0 rlineto +12 82 7 62 0 44 rrcurveto +closepath +endchar } ND +/afii57394 { +0 562 hsbw +143 20 hstem +605 20 hstem +698 20 hstem +293 27 vstem +388 31 vstem +419 621 rmoveto +0 93 rlineto +-31 0 rlineto +0 -60 -28 -29 -55 0 rrcurveto +-51 0 -31 22 -49 71 rrcurveto +-47 -140 rlineto +74 -106 46 -87 17 -70 rrcurveto +3 -12 3 -7 2 -2 rrcurveto +14 -41 7 -45 0 -65 rrcurveto +27 0 rlineto +12 73 3 36 0 39 rrcurveto +0 57 -6 37 -24 84 rrcurveto +82 20 32 40 0 92 rrcurveto +closepath +endchar } ND +/afii57395 { +0 562 hsbw +143 20 hstem +595 20 hstem +693 20 hstem +205 56 vstem +320 156 vstem +476 647 rmoveto +0 66 rlineto +-25 0 rlineto +-6 -49 -19 -24 -30 0 rrcurveto +-32 0 -15 19 -5 54 rrcurveto +-24 0 rlineto +0 -62 -28 -36 -48 0 rrcurveto +-46 0 -34 27 -38 71 rrcurveto +-49 -149 rlineto +120 -171 8 -23 0 -227 rrcurveto +26 0 rlineto +24 84 6 34 0 58 rrcurveto +0 46 -6 34 -17 60 rrcurveto +38 8 10 7 26 34 rrcurveto +22 -28 14 -7 28 0 rrcurveto +66 0 34 58 0 116 rrcurveto +closepath +endchar } ND +/afii57396 { +0 562 hsbw +147 228 vstem +404 285 rmoveto +-68 7 -76 13 0 20 rrcurveto +0 18 48 54 34 34 rrcurveto +21 21 12 16 0 11 rrcurveto +0 8 -8 7 -34 11 rrcurveto +-46 15 -36 19 0 10 rrcurveto +0 13 35 18 40 10 rrcurveto +17 120 rlineto +-118 -94 -78 -101 0 -54 rrcurveto +0 -34 52 -23 61 -14 rrcurveto +-63 -66 -30 -24 0 -69 rrcurveto +0 -66 67 0 130 -20 rrcurveto +40 140 rlineto +closepath +endchar } ND +/afii57397 { +0 562 hsbw +231 147 hstem +490 144 hstem +114 68 vstem +384 64 vstem +448 451 rmoveto +0 92 -97 91 -71 0 rrcurveto +-98 0 -68 -220 0 -82 rrcurveto +0 -59 52 -42 71 0 rrcurveto +105 0 106 108 0 112 rrcurveto +closepath +-64 -49 rmoveto +0 -15 -33 -9 -53 0 rrcurveto +-72 0 -44 24 0 38 rrcurveto +0 29 21 21 31 0 rrcurveto +39 0 111 -49 0 -39 rrcurveto +closepath +endchar } ND +/afii57398 { +0 562 hsbw +511 151 hstem +698 20 hstem +104 27 vstem +301 35 vstem +426 308 rmoveto +-72 75 -18 53 0 109 rrcurveto +0 49 3 20 18 66 rrcurveto +-86 -18 -10 0 -34 0 rrcurveto +-75 0 -13 8 -8 48 rrcurveto +-27 0 rlineto +0 -128 rlineto +0 -68 34 -11 71 0 rrcurveto +24 0 26 3 42 8 rrcurveto +-1 -15 -2 -21 -3 -21 rrcurveto +-2 -21 -1 -26 0 -25 rrcurveto +0 -136 18 -46 91 -62 rrcurveto +25 159 rlineto +closepath +endchar } ND +/afii57399 { +0 562 hsbw +143 152 hstem +547 170 hstem +271 33 vstem +457 717 rmoveto +-169 -104 43 -114 -47 -204 rrcurveto +-50 188 -44 161 -96 67 rrcurveto +-18 -177 rlineto +127 -143 23 -71 45 -177 rrcurveto +33 0 rlineto +22 175 14 77 117 152 rrcurveto +0 170 rlineto +closepath +endchar } ND +/afii57400 { +0 562 hsbw +149 170 hstem +571 153 hstem +245 32 vstem +473 333 rmoveto +-132 138 -18 75 -46 178 rrcurveto +-32 0 rlineto +-28 -215 -6 -32 -115 -158 rrcurveto +0 -170 rlineto +160 107 -55 40 64 275 rrcurveto +47 -190 46 -159 97 -67 rrcurveto +18 178 rlineto +closepath +endchar } ND +/afii57401 { +0 562 hsbw +391 139 hstem +592 127 hstem +116 63 vstem +305 52 vstem +427 293 rmoveto +-71 65 1 32 0 102 rrcurveto +0 181 28 46 -118 0 rrcurveto +-79 0 -72 -113 0 -120 rrcurveto +0 -55 50 -40 68 0 rrcurveto +17 0 24 3 30 8 rrcurveto +0 -108 5 -126 82 -22 rrcurveto +35 147 rlineto +closepath +-132 243 rmoveto +-16 -4 -16 -2 -14 0 rrcurveto +-47 0 -23 10 0 20 rrcurveto +0 10 29 22 28 0 rrcurveto +33 0 20 -19 6 -37 rrcurveto +closepath +endchar } ND +/afii57381 { +0 526 hsbw +84 128 hstem +650 127 hstem +85 128 vstem +313 127 vstem +213 715 rmoveto +0 36 -28 26 -36 0 rrcurveto +-36 0 -28 -28 0 -34 rrcurveto +0 -35 29 -30 35 0 rrcurveto +36 0 28 29 0 36 rrcurveto +closepath +250 62 rmoveto +-56 0 rlineto +-342 -685 rlineto +53 0 rlineto +345 685 rlineto +closepath +-23 -630 rmoveto +0 36 -29 29 -36 0 rrcurveto +-35 0 -27 -29 0 -36 rrcurveto +0 -35 27 -28 35 0 rrcurveto +37 0 28 28 0 35 rrcurveto +closepath +endchar } ND +/afii57461 { +0 319 hsbw +159 71 vstem +230 200 rmoveto +0 37 -33 30 -37 0 rrcurveto +-35 0 -28 -30 0 -34 rrcurveto +0 -39 30 -21 32 -12 rrcurveto +0 -32 -25 -17 -40 -32 rrcurveto +21 -27 rlineto +77 58 38 43 0 76 rrcurveto +closepath +endchar } ND +/afii63167 { +0 526 hsbw +403 151 hstem +566 13 hstem +608 136 hstem +87 149 vstem +250 14 vstem +306 77 vstem +424 573 rmoveto +0 21 -16 12 -22 0 rrcurveto +-28 0 -28 -11 -42 -16 rrcurveto +-5 17 rlineto +8 3 8 4 10 5 rrcurveto +8 6 11 5 13 5 rrcurveto +28 14 14 16 0 18 rrcurveto +0 18 -14 16 -18 0 rrcurveto +-15 0 -16 -13 -14 -27 rrcurveto +0 -1 -2 -6 -7 -10 rrcurveto +-6 -9 -8 -15 -9 -21 rrcurveto +-13 5 rlineto +5 16 6 19 6 16 rrcurveto +5 17 4 17 0 14 rrcurveto +0 21 -11 15 -21 0 rrcurveto +-20 0 -11 -16 0 -20 rrcurveto +0 -16 4 -22 9 -25 rrcurveto +4 -11 3 -9 2 -6 rrcurveto +1 -7 2 -4 1 0 rrcurveto +-13 -4 rlineto +-9 16 -11 20 -13 27 rrcurveto +-13 27 -17 12 -15 0 rrcurveto +-19 0 -13 -16 0 -18 rrcurveto +0 -36 63 -24 39 -16 rrcurveto +-3 -6 -2 -6 -1 -5 rrcurveto +-18 5 -18 6 -15 7 rrcurveto +-17 5 -16 4 -14 0 rrcurveto +-23 0 -15 -13 0 -20 rrcurveto +0 -19 15 -12 23 0 rrcurveto +14 0 16 2 19 6 rrcurveto +5 2 7 2 8 2 rrcurveto +9 2 10 3 10 5 rrcurveto +1 -4 2 -5 3 -5 rrcurveto +-77 -36 -25 -8 0 -34 rrcurveto +0 -19 13 -14 19 0 rrcurveto +15 0 15 13 16 26 rrcurveto +10 20 11 21 11 21 rrcurveto +13 -4 rlineto +-5 -17 -6 -19 -6 -16 rrcurveto +-5 -17 -4 -17 0 -14 rrcurveto +0 -22 11 -13 20 0 rrcurveto +21 0 11 15 0 20 rrcurveto +0 14 -3 16 -5 20 rrcurveto +-4 11 -5 17 -6 22 rrcurveto +4 1 3 1 3 2 rrcurveto +34 -68 26 -33 17 0 rrcurveto +18 0 14 14 0 19 rrcurveto +0 17 -14 16 -28 16 rrcurveto +-58 29 rlineto +5 14 rlineto +36 -12 rlineto +24 -8 20 -4 18 0 rrcurveto +21 0 17 12 0 19 rrcurveto +closepath +-149 0 rmoveto +0 -11 -8 -8 -12 0 rrcurveto +-11 0 -8 8 0 11 rrcurveto +0 12 8 8 11 0 rrcurveto +12 0 8 -8 0 -12 rrcurveto +closepath +endchar } ND +/afii57459 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57543 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57534 { +0 343 hsbw +126 130 hstem +499 20 hstem +43 57 vstem +231 73 vstem +304 326 rmoveto +0 78 -69 47 -61 39 rrcurveto +-48 29 rlineto +-15 -30 -23 -49 -10 -30 rrcurveto +18 -12 rlineto +-40 -78 -13 -44 0 -53 rrcurveto +0 -59 32 -38 51 0 rrcurveto +89 0 89 93 0 107 rrcurveto +closepath +-73 -39 rmoveto +0 -11 -55 -20 -32 0 rrcurveto +-26 0 -18 16 0 22 rrcurveto +0 22 10 27 21 33 rrcurveto +44 -28 56 -49 0 -12 rrcurveto +closepath +endchar } ND +/afii57494 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62843 { +0 562 hsbw +143 20 hstem +428 144 hstem +600 20 hstem +699 20 hstem +223 55 vstem +81 573 rmoveto +129 -172 13 -25 0 -233 rrcurveto +26 0 rlineto +24 100 5 42 0 64 rrcurveto +0 28 -2 19 -5 35 rrcurveto +20 -3 8 0 14 0 rrcurveto +86 0 62 72 10 116 rrcurveto +-15 4 rlineto +-34 -38 -23 -10 -54 0 rrcurveto +-30 0 -14 2 -30 12 rrcurveto +19 52 29 27 56 0 rrcurveto +11 0 12 -2 11 -2 rrcurveto +10 -3 11 -3 10 -2 rrcurveto +13 18 rlineto +-46 46 -34 20 -37 0 rrcurveto +-60 0 -27 -64 -7 -72 rrcurveto +-58 38 -15 21 -30 59 rrcurveto +-58 -146 rlineto +closepath +endchar } ND +/afii62844 { +0 562 hsbw +143 137 hstem +699 20 hstem +92 93 vstem +411 50 vstem +209 578 rmoveto +7 -5 7 -7 6 -6 rrcurveto +7 -7 6 -6 4 -3 rrcurveto +-95 -117 -59 -71 0 -102 rrcurveto +0 -62 52 -49 63 0 rrcurveto +28 0 25 9 36 26 rrcurveto +22 -15 15 -3 20 0 rrcurveto +60 0 48 104 0 71 rrcurveto +0 134 -89 131 -123 119 rrcurveto +-40 -141 rlineto +closepath +64 -58 rmoveto +84 -87 54 -74 0 -37 rrcurveto +0 -21 -12 -10 -23 0 rrcurveto +-23 0 -16 9 -18 22 rrcurveto +-30 -32 -21 -10 -26 0 rrcurveto +-34 0 -23 25 0 35 rrcurveto +0 45 29 61 59 74 rrcurveto +closepath +endchar } ND +/afii62845 { +0 562 hsbw +143 20 hstem +639 90 hstem +108 76 vstem +184 143 rmoveto +36 0 rlineto +20 153 43 99 137 66 rrcurveto +31 130 rlineto +-64 -37 -48 -15 -68 0 rrcurveto +-54 0 -33 17 0 28 rrcurveto +0 33 49 22 76 0 rrcurveto +32 0 23 -3 44 -16 rrcurveto +11 19 rlineto +-51 64 -38 26 -34 0 rrcurveto +-68 0 -120 -156 0 -75 rrcurveto +0 -44 41 -26 82 -8 rrcurveto +-39 -88 -8 -53 0 -136 rrcurveto +closepath +endchar } ND +/afii64240 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64241 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63954 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57382 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64242 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62881 { +0 211 hsbw +683 53 hstem +34 167 vstem +201 995 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-44 -16 -34 -15 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 15 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -29 -13 -26 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +31 15 28 11 26 8 rrcurveto +45 14 37 20 0 34 rrcurveto +closepath +10 -123 rmoveto +0 10 -3 19 -2 12 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 16 43 0 44 rrcurveto +closepath +endchar } ND +/afii57504 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57369 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57370 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57371 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57372 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57373 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57374 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57375 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57391 { +0 612 hsbw +143 133 hstem +0 646 vstem +646 143 rmoveto +0 133 rlineto +-646 0 rlineto +0 -133 rlineto +646 0 rlineto +closepath +endchar } ND +/afii57471 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57460 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii52258 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57506 { +0 649 hsbw +-1 20 hstem +143 133 hstem +62 56 vstem +638 46 vstem +684 143 rmoveto +0 138 rlineto +0 94 -8 43 -50 71 rrcurveto +-44 -113 rlineto +20 -28 14 -7 9 -34 rrcurveto +3 -9 4 -11 6 -11 rrcurveto +-353 0 rlineto +-86 0 -81 15 0 73 rrcurveto +0 29 8 25 28 52 rrcurveto +-28 19 rlineto +-54 -77 -10 -37 0 -70 rrcurveto +0 -115 12 -47 200 0 rrcurveto +410 0 rlineto +closepath +-169 -86 rmoveto +-91 50 rlineto +-39 -77 rlineto +-70 39 rlineto +-53 -100 rlineto +89 -50 rlineto +41 80 rlineto +72 -37 rlineto +51 95 rlineto +closepath +-18 -151 rmoveto +-92 49 rlineto +-49 -101 rlineto +91 -47 rlineto +50 99 rlineto +closepath +endchar } ND +/afii62958 { +0 649 hsbw +-1 20 hstem +143 133 hstem +62 56 vstem +638 46 vstem +684 143 rmoveto +0 138 rlineto +0 94 -8 43 -50 71 rrcurveto +-44 -113 rlineto +20 -28 14 -7 9 -34 rrcurveto +3 -9 4 -11 6 -11 rrcurveto +-353 0 rlineto +-86 0 -81 15 0 73 rrcurveto +0 29 8 25 28 52 rrcurveto +-28 19 rlineto +-54 -77 -10 -37 0 -70 rrcurveto +0 -115 12 -47 200 0 rrcurveto +410 0 rlineto +closepath +-169 -86 rmoveto +-91 50 rlineto +-39 -77 rlineto +-70 39 rlineto +-53 -100 rlineto +89 -50 rlineto +41 80 rlineto +72 -37 rlineto +51 95 rlineto +closepath +-18 -151 rmoveto +-92 49 rlineto +-49 -101 rlineto +91 -47 rlineto +50 99 rlineto +closepath +endchar } ND +/afii62956 { +0 271 hsbw +-1 20 hstem +143 133 hstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-8 -86 rmoveto +-91 50 rlineto +-39 -77 rlineto +-69 39 rlineto +-54 -100 rlineto +89 -50 rlineto +41 80 rlineto +72 -37 rlineto +51 95 rlineto +closepath +-18 -151 rmoveto +-92 49 rlineto +-48 -101 rlineto +90 -47 rlineto +50 99 rlineto +closepath +endchar } ND +/afii52957 { +0 271 hsbw +-1 20 hstem +143 133 hstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-8 -86 rmoveto +-91 50 rlineto +-39 -77 rlineto +-69 39 rlineto +-54 -100 rlineto +89 -50 rlineto +41 80 rlineto +72 -37 rlineto +51 95 rlineto +closepath +-18 -151 rmoveto +-92 49 rlineto +-48 -101 rlineto +90 -47 rlineto +50 99 rlineto +closepath +endchar } ND +/afii57505 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62889 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62887 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62888 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii57507 { +0 577 hsbw +-203 131 hstem +-13 20 hstem +143 20 hstem +396 131 hstem +34 62 vstem +563 -87 rmoveto +-10 22 rlineto +-39 0 -59 -4 -26 -3 rrcurveto +-20 0 rlineto +-203 0 -110 71 0 130 rrcurveto +0 138 133 91 250 32 rrcurveto +30 120 rlineto +-77 0 -79 4 -81 8 rrcurveto +-31 3 -28 2 -15 0 rrcurveto +-100 0 -57 -61 -16 -120 rrcurveto +86 38 22 12 68 0 rrcurveto +-116 -83 -51 -101 0 -134 rrcurveto +0 -206 122 -75 218 0 rrcurveto +189 116 rlineto +closepath +-130 325 rmoveto +-91 50 rlineto +-39 -78 rlineto +-70 40 rlineto +-53 -100 rlineto +89 -50 rlineto +41 79 rlineto +72 -36 rlineto +51 95 rlineto +closepath +-18 -151 rmoveto +-92 49 rlineto +-49 -102 rlineto +91 -47 rlineto +50 100 rlineto +closepath +endchar } ND +/afii62961 { +0 559 hsbw +-200 126 hstem +136 5 hstem +143 133 hstem +394 133 hstem +32 64 vstem +334 1 vstem +338 36 vstem +593 143 rmoveto +0 133 rlineto +-111 0 rlineto +-83 0 -25 14 0 47 rrcurveto +0 8 1 19 3 12 rrcurveto +8 0 8 2 7 2 rrcurveto +22 5 24 5 30 0 rrcurveto +29 118 rlineto +-78 0 -79 6 -79 8 rrcurveto +-30 3 -27 2 -12 0 rrcurveto +-104 0 -60 -61 -14 -120 rrcurveto +80 40 23 8 62 0 rrcurveto +10 0 rlineto +-98 -54 -68 -126 0 -136 rrcurveto +0 -178 107 -100 191 0 rrcurveto +47 0 rlineto +186 119 rlineto +-9 16 rlineto +-58 -6 -45 -3 -30 0 rrcurveto +-211 0 -114 73 0 130 rrcurveto +0 120 113 86 137 32 rrcurveto +-5 -24 -3 -16 0 -6 rrcurveto +-3 -20 -1 -19 0 -20 rrcurveto +0 -92 33 -27 115 0 rrcurveto +111 0 rlineto +closepath +-258 43 rmoveto +-77 43 rlineto +-33 -66 rlineto +-59 33 rlineto +-46 -85 rlineto +75 -42 rlineto +35 67 rlineto +62 -31 rlineto +43 81 rlineto +closepath +-15 -128 rmoveto +-78 41 rlineto +-41 -86 rlineto +77 -40 rlineto +42 85 rlineto +closepath +endchar } ND +/afii62959 { +0 523 hsbw +-1 20 hstem +143 133 hstem +388 113 hstem +347 211 vstem +558 143 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-150 -86 rmoveto +-91 50 rlineto +-39 -77 rlineto +-70 39 rlineto +-53 -100 rlineto +89 -50 rlineto +41 80 rlineto +72 -37 rlineto +51 95 rlineto +closepath +-18 -151 rmoveto +-92 49 rlineto +-48 -101 rlineto +90 -47 rlineto +50 99 rlineto +closepath +endchar } ND +/afii62960 { +0 523 hsbw +-1 20 hstem +143 133 hstem +388 113 hstem +347 211 vstem +558 143 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-150 -86 rmoveto +-91 50 rlineto +-39 -77 rlineto +-70 39 rlineto +-53 -100 rlineto +89 -50 rlineto +41 80 rlineto +72 -37 rlineto +51 95 rlineto +closepath +-18 -151 rmoveto +-92 49 rlineto +-48 -101 rlineto +90 -47 rlineto +50 99 rlineto +closepath +endchar } ND +/afii57508 { +0 433 hsbw +-72 89 hstem +601 20 hstem +429 38 vstem +467 132 rmoveto +0 149 rlineto +0 76 -25 58 -45 46 rrcurveto +-27 -132 rlineto +28 -28 31 -54 0 -29 rrcurveto +0 -60 -162 -141 -79 0 rrcurveto +-42 0 -28 10 -58 39 rrcurveto +-21 -30 rlineto +96 -68 56 -40 75 0 rrcurveto +73 0 128 146 0 58 rrcurveto +closepath +-81 634 rmoveto +-91 47 rlineto +-49 -100 rlineto +91 -48 rlineto +49 101 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +endchar } ND +/afii62962 { +0 433 hsbw +-72 89 hstem +601 20 hstem +429 38 vstem +467 132 rmoveto +0 149 rlineto +0 76 -25 58 -45 46 rrcurveto +-27 -132 rlineto +28 -28 31 -54 0 -29 rrcurveto +0 -60 -162 -141 -79 0 rrcurveto +-42 0 -28 10 -58 39 rrcurveto +-21 -30 rlineto +96 -68 56 -40 75 0 rrcurveto +73 0 128 146 0 58 rrcurveto +closepath +-81 634 rmoveto +-91 47 rlineto +-49 -100 rlineto +91 -48 rlineto +49 101 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +endchar } ND +/afii57567 { +0 757 hsbw +143 133 hstem +592 116 hstem +54 61 vstem +490 100 vstem +713 78 vstem +248 143 rmoveto +543 0 rlineto +0 136 rlineto +-39 73 -55 66 -72 71 rrcurveto +-24 22 -11 12 0 4 rrcurveto +0 17 152 48 7 0 rrcurveto +0 116 rlineto +-22 -7 -17 -7 -13 -6 rrcurveto +-14 -6 -10 -4 -7 -2 rrcurveto +-110 -46 -66 -10 0 -129 rrcurveto +0 -49 18 -12 58 -55 rrcurveto +16 17 rlineto +10 -6 9 -7 9 -8 rrcurveto +9 -8 9 -7 9 -7 rrcurveto +34 -27 20 -15 22 -31 rrcurveto +-431 0 rlineto +-131 0 -36 19 0 62 rrcurveto +0 28 4 17 26 50 rrcurveto +-29 21 rlineto +-46 -82 -16 -51 0 -61 rrcurveto +0 -111 74 -25 120 0 rrcurveto +closepath +endchar } ND +/afii62964 { +0 879 hsbw +143 133 hstem +605 117 hstem +54 61 vstem +446 100 vstem +590 46 vstem +420 276 rmoveto +-138 0 rlineto +-131 0 -36 19 0 62 rrcurveto +0 28 4 17 26 50 rrcurveto +-29 21 rlineto +-46 -82 -16 -51 0 -61 rrcurveto +0 -111 74 -25 120 0 rrcurveto +150 0 rlineto +143 0 95 35 0 131 rrcurveto +70 -94 65 -72 76 0 rrcurveto +66 0 rlineto +0 133 rlineto +-70 0 rlineto +-50 0 -34 34 -57 54 rrcurveto +-37 37 -29 26 -23 17 rrcurveto +-38 28 -29 14 0 31 rrcurveto +0 10 rlineto +0 12 87 32 64 18 rrcurveto +53 16 rlineto +0 117 rlineto +-48 -18 rlineto +-116 -43 -140 -3 0 -167 rrcurveto +0 -45 20 -17 54 -51 rrcurveto +17 18 rlineto +26 -15 27 -31 0 -17 rrcurveto +0 -70 -84 13 -86 0 rrcurveto +closepath +endchar } ND +/afii52305 { +0 360 hsbw +143 133 hstem +592 116 hstem +93 101 vstem +317 78 vstem +395 143 rmoveto +0 136 rlineto +-40 73 -54 66 -72 71 rrcurveto +-24 22 -11 12 0 4 rrcurveto +0 12 65 25 52 15 rrcurveto +14 3 10 3 6 4 rrcurveto +6 2 4 1 1 0 rrcurveto +0 116 rlineto +-180 -63 -79 15 0 -169 rrcurveto +0 -49 20 -12 56 -55 rrcurveto +16 17 rlineto +10 -6 9 -7 9 -8 rrcurveto +9 -8 9 -7 9 -7 rrcurveto +7 -8 8 -6 7 -4 rrcurveto +27 -16 12 -16 16 -23 rrcurveto +-317 0 rlineto +0 -133 rlineto +395 0 rlineto +closepath +endchar } ND +/afii52306 { +0 542 hsbw +143 133 hstem +605 117 hstem +109 100 vstem +253 46 vstem +0 143 rmoveto +62 0 rlineto +143 0 94 35 0 131 rrcurveto +70 -94 65 -72 76 0 rrcurveto +66 0 rlineto +0 133 rlineto +-70 0 rlineto +-51 0 -34 34 -56 54 rrcurveto +-37 37 -29 26 -23 17 rrcurveto +-38 28 -29 14 0 31 rrcurveto +0 10 rlineto +0 12 87 32 64 18 rrcurveto +53 16 rlineto +0 117 rlineto +-48 -18 rlineto +-116 -43 -140 -3 0 -167 rrcurveto +0 -32 10 -24 33 -28 rrcurveto +8 -7 11 -10 12 -12 rrcurveto +17 18 rlineto +26 -15 27 -31 0 -17 rrcurveto +0 -70 -84 13 -86 0 rrcurveto +-83 0 rlineto +0 -133 rlineto +closepath +endchar } ND +/afii57509 { +0 757 hsbw +143 133 hstem +592 116 hstem +754 109 hstem +54 61 vstem +490 100 vstem +713 78 vstem +248 143 rmoveto +543 0 rlineto +0 136 rlineto +-39 73 -55 66 -72 71 rrcurveto +-24 22 -11 12 0 4 rrcurveto +0 17 152 48 7 0 rrcurveto +0 116 rlineto +-22 -7 -17 -7 -13 -6 rrcurveto +-14 -6 -10 -4 -7 -2 rrcurveto +-110 -46 -66 -10 0 -129 rrcurveto +0 -49 18 -12 58 -55 rrcurveto +16 17 rlineto +10 -6 9 -7 9 -8 rrcurveto +9 -8 9 -7 9 -7 rrcurveto +34 -27 20 -15 22 -31 rrcurveto +-431 0 rlineto +-131 0 -36 19 0 62 rrcurveto +0 28 4 17 26 50 rrcurveto +-29 21 rlineto +-46 -82 -16 -51 0 -61 rrcurveto +0 -111 74 -25 120 0 rrcurveto +closepath +501 720 rmoveto +-102 -42 -141 -77 -51 -51 rrcurveto +0 -75 rlineto +70 45 110 49 114 42 rrcurveto +0 109 rlineto +closepath +endchar } ND +/afii62967 { +0 879 hsbw +143 133 hstem +605 117 hstem +768 108 hstem +54 61 vstem +446 100 vstem +590 46 vstem +420 276 rmoveto +-138 0 rlineto +-131 0 -36 19 0 62 rrcurveto +0 28 4 17 26 50 rrcurveto +-29 21 rlineto +-46 -82 -16 -51 0 -61 rrcurveto +0 -111 74 -25 120 0 rrcurveto +150 0 rlineto +143 0 95 35 0 131 rrcurveto +70 -94 65 -72 76 0 rrcurveto +66 0 rlineto +0 133 rlineto +-70 0 rlineto +-50 0 -34 34 -57 54 rrcurveto +-37 37 -29 26 -23 17 rrcurveto +-38 28 -29 14 0 31 rrcurveto +0 10 rlineto +0 12 87 32 64 18 rrcurveto +53 16 rlineto +0 117 rlineto +-48 -18 rlineto +-116 -43 -140 -3 0 -167 rrcurveto +0 -45 20 -17 54 -51 rrcurveto +17 18 rlineto +26 -15 27 -31 0 -17 rrcurveto +0 -70 -84 13 -86 0 rrcurveto +closepath +330 600 rmoveto +-102 -42 -141 -76 -51 -51 rrcurveto +0 -75 rlineto +70 45 110 49 114 42 rrcurveto +0 108 rlineto +closepath +endchar } ND +/afii62965 { +0 360 hsbw +143 133 hstem +592 116 hstem +754 109 hstem +93 101 vstem +317 78 vstem +395 143 rmoveto +0 136 rlineto +-40 73 -54 66 -72 71 rrcurveto +-24 22 -11 12 0 4 rrcurveto +0 12 65 25 52 15 rrcurveto +14 3 10 3 6 4 rrcurveto +6 2 4 1 1 0 rrcurveto +0 116 rlineto +-180 -63 -79 15 0 -169 rrcurveto +0 -49 20 -12 56 -55 rrcurveto +16 17 rlineto +10 -6 9 -7 9 -8 rrcurveto +9 -8 9 -7 9 -7 rrcurveto +7 -8 8 -6 7 -4 rrcurveto +27 -16 12 -16 16 -23 rrcurveto +-317 0 rlineto +0 -133 rlineto +395 0 rlineto +closepath +-43 720 rmoveto +-102 -42 -145 -77 -46 -51 rrcurveto +0 -75 rlineto +68 45 111 49 114 42 rrcurveto +0 109 rlineto +closepath +endchar } ND +/afii62966 { +0 542 hsbw +143 133 hstem +605 117 hstem +768 108 hstem +109 100 vstem +253 46 vstem +0 143 rmoveto +62 0 rlineto +143 0 94 35 0 131 rrcurveto +70 -94 65 -72 76 0 rrcurveto +66 0 rlineto +0 133 rlineto +-70 0 rlineto +-51 0 -34 34 -56 54 rrcurveto +-37 37 -29 26 -23 17 rrcurveto +-38 28 -29 14 0 31 rrcurveto +0 10 rlineto +0 12 87 32 64 18 rrcurveto +53 16 rlineto +0 117 rlineto +-48 -18 rlineto +-116 -43 -140 -3 0 -167 rrcurveto +0 -32 10 -24 33 -28 rrcurveto +8 -7 11 -10 12 -12 rrcurveto +17 18 rlineto +26 -15 27 -31 0 -17 rrcurveto +0 -70 -84 13 -86 0 rrcurveto +-83 0 rlineto +0 -133 rlineto +closepath +413 733 rmoveto +-102 -42 -141 -76 -51 -51 rrcurveto +0 -75 rlineto +70 45 110 49 114 42 rrcurveto +0 108 rlineto +closepath +endchar } ND +/afii57555 { +0 645 hsbw +-60 107 146 101 346 107 hstem3 +74 48 vstem +320 59 vstem +498 56 vstem +575 381 rmoveto +0 48 -24 32 -38 0 rrcurveto +-80 0 -113 -160 0 -68 rrcurveto +0 -80 39 -7 82 0 rrcurveto +13 0 44 -1 0 -6 rrcurveto +0 -56 -169 -36 -103 0 rrcurveto +-70 0 -34 30 0 62 rrcurveto +0 48 24 62 48 82 rrcurveto +-23 15 rlineto +-70 -109 -27 -50 0 -111 rrcurveto +0 -90 50 -46 102 0 rrcurveto +134 0 194 99 0 162 rrcurveto +0 49 -31 -3 -55 0 rrcurveto +-29 0 rlineto +-31 0 -29 -1 0 19 rrcurveto +0 28 84 53 35 0 rrcurveto +22 0 8 -10 18 -46 rrcurveto +24 38 5 17 0 36 rrcurveto +closepath +endchar } ND +/afii52364 { +0 554 hsbw +-174 123 hstem +143 133 hstem +15 57 vstem +471 59 vstem +588 143 rmoveto +0 133 rlineto +-79 0 rlineto +-83 0 -113 -102 0 -96 rrcurveto +0 -19 12 -3 70 0 rrcurveto +28 0 48 -1 0 -6 rrcurveto +0 -35 -194 -65 -96 0 rrcurveto +-68 0 -41 37 0 60 rrcurveto +0 60 18 52 62 104 rrcurveto +-27 20 rlineto +-77 -124 -33 -62 0 -126 rrcurveto +0 -94 54 -50 106 0 rrcurveto +154 0 201 135 0 130 rrcurveto +0 13 -12 9 -12 6 rrcurveto +-14 5 -10 6 0 2 rrcurveto +0 6 16 5 24 0 rrcurveto +66 0 rlineto +closepath +endchar } ND +/afii63753 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63754 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63759 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63763 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63795 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62891 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63808 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62938 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63810 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62942 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62947 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63813 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63823 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63824 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63833 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63844 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62882 { +0 226 hsbw +683 53 hstem +912 43 hstem +980 30 hstem +74 26 vstem +128 31 vstem +191 35 vstem +226 979 rmoveto +0 17 -14 14 -18 0 rrcurveto +-33 0 -33 -41 0 -31 rrcurveto +0 -19 11 -8 18 -19 rrcurveto +-21 -15 -22 -11 -22 -6 rrcurveto +2 12 3 8 3 4 rrcurveto +0 17 rlineto +0 28 -14 26 -22 0 rrcurveto +-32 0 -5 -34 -4 -43 rrcurveto +13 22 rlineto +6 8 6 4 7 0 rrcurveto +12 0 7 -16 0 -14 rrcurveto +0 -10 -4 -10 -6 -12 rrcurveto +-17 -29 rlineto +50 0 44 19 34 39 rrcurveto +42 -32 rlineto +2 16 1 14 0 12 rrcurveto +0 9 -6 6 -9 8 rrcurveto +13 22 8 21 0 24 rrcurveto +closepath +-15 -181 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -27 -13 -39 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-3 -12 -3 -10 -3 -7 rrcurveto +-3 -9 -1 -7 0 -9 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 16 44 0 42 rrcurveto +closepath +-20 152 rmoveto +0 -8 -2 -6 -4 -5 rrcurveto +-19 14 -7 9 0 12 rrcurveto +0 8 4 6 7 0 rrcurveto +13 0 8 -16 0 -14 rrcurveto +closepath +endchar } ND +/afii62883 { +0 211 hsbw +850 58 hstem +196 13 vstem +209 936 rmoveto +0 20 rlineto +0 7 -2 7 -1 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -38 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -46 -8 -30 -30 0 rrcurveto +-12 0 -5 12 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -8 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 20 16 12 25 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 14 42 0 44 rrcurveto +closepath +-5 -96 rmoveto +-70 -29 -49 -20 -27 -10 rrcurveto +-14 -14 -7 -14 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 15 rrcurveto +closepath +0 -60 rmoveto +-70 -30 -49 -20 -27 -11 rrcurveto +-14 -14 -7 -13 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/afii62884 { +0 211 hsbw +683 53 hstem +204 918 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -16 0 -30 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 19 0 32 rrcurveto +closepath +7 -120 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -27 -13 -39 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 16 44 0 42 rrcurveto +closepath +endchar } ND +/afii62885 { +0 211 hsbw +712 198 hstem +955 19 hstem +110 30 vstem +196 15 vstem +211 851 rmoveto +0 28 2 8 -25 11 rrcurveto +2 7 3 4 2 2 rrcurveto +3 3 1 3 0 1 rrcurveto +3 8 2 7 0 7 rrcurveto +0 18 -19 16 -18 0 rrcurveto +-30 0 -27 -34 0 -28 rrcurveto +0 -16 10 -11 15 -14 rrcurveto +-19 -11 -17 -9 -16 -7 rrcurveto +-10 -6 -18 -8 -24 -10 rrcurveto +10 -6 8 -2 10 0 rrcurveto +23 0 25 9 23 20 rrcurveto +6 7 8 6 10 7 rrcurveto +11 -4 7 -2 3 0 rrcurveto +12 -3 12 -1 12 0 rrcurveto +closepath +0 -53 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 16 44 0 42 rrcurveto +closepath +-39 127 rmoveto +0 -2 -1 -3 -1 -2 rrcurveto +-2 -2 -1 -3 0 -3 rrcurveto +-23 12 -4 7 0 14 rrcurveto +0 6 2 6 4 0 rrcurveto +14 0 12 -17 0 -13 rrcurveto +closepath +endchar } ND +/afii62886 { +0 211 hsbw +774 54 hstem +886 20 hstem +38 18 vstem +196 10 vstem +209 889 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -45 -8 -30 -30 0 rrcurveto +-12 0 -5 12 0 14 rrcurveto +0 28 rlineto +-9 -4 rlineto +-1 -7 -2 -5 -2 -3 rrcurveto +-3 -3 -1 -4 0 -4 rrcurveto +-3 -10 -1 -8 0 -8 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 14 42 0 44 rrcurveto +closepath +-5 -105 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -14 0 -32 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 17 0 34 rrcurveto +closepath +endchar } ND +/afii63846 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63849 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/uni202A { +0 0 hsbw +568 35 hstem +-18 36 vstem +18 568 rmoveto +192 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -737 rlineto +36 0 rlineto +0 702 rlineto +closepath +endchar } ND +/uni202B { +0 0 hsbw +568 35 hstem +-18 36 vstem +-210 568 rmoveto +192 0 rlineto +0 -702 rlineto +36 0 rlineto +0 737 rlineto +-228 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uni202D { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 vstem +-18 36 vstem +114 480 rmoveto +0 35 rlineto +-194 0 rlineto +0 140 rlineto +194 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni202E { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +80 34 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -35 rlineto +194 0 rlineto +0 -140 rlineto +-194 0 rlineto +closepath +endchar } ND +/uni202C { +0 0 hsbw +480 210 hstem +-18 36 vstem +114 480 rmoveto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni206E { +0 0 hsbw +506 20 hstem +644 46 hstem +-114 49 -18 36 65 49 vstem3 +18 -134 rmoveto +0 630 rlineto +96 89 rlineto +-114 105 rlineto +-114 -105 rlineto +96 -89 rlineto +0 -630 rlineto +36 0 rlineto +closepath +47 719 rmoveto +-65 -59 rlineto +-65 59 rlineto +65 59 rlineto +65 -59 rlineto +closepath +endchar } ND +/_852 { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 175 rlineto +-132 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206A { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 140 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206B { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 -18 36 80 34 vstem3 +-80 515 rmoveto +0 140 rlineto +160 0 rlineto +0 -140 rlineto +-160 0 rlineto +closepath +-34 -35 rmoveto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +closepath +endchar } ND +/_855 { +0 0 hsbw +-134 20 hstem +670 20 hstem +-18 36 vstem +18 -134 rmoveto +0 646 rlineto +96 178 rlineto +-228 0 rlineto +96 -178 rlineto +0 -646 rlineto +36 0 rlineto +closepath +endchar } ND +/uni206D { +0 0 hsbw +-134 20 hstem +670 20 hstem +-18 36 vstem +18 480 rmoveto +96 0 rlineto +-114 210 rlineto +-114 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +closepath +endchar } ND +/uniF00A { +0 0 hsbw +-208 473 hstem +421 473 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +0 -629 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +endchar } ND +/uniF00B { +0 0 hsbw +-208 35 hstem +859 35 hstem +-18 36 vstem +-114 -208 rmoveto +228 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1032 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -1032 rlineto +-96 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uniF00C { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +109 804 rmoveto +-127 90 rlineto +0 -1102 rlineto +36 0 rlineto +0 942 rlineto +91 70 rlineto +closepath +endchar } ND +/uniF00D { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-127 -90 rlineto +91 -70 rlineto +0 -942 rlineto +36 0 rlineto +0 1102 rlineto +closepath +endchar } ND +/uniF00E { +0 0 hsbw +-208 35 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -1102 rlineto +132 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1067 rlineto +closepath +endchar } ND +/currency { +0 556 hsbw +139 118 hstem +454 118 hstem +590 20 hstem +60 118 vstem +375 118 vstem +86 459 rmoveto +-18 -31 -8 -36 0 -37 rrcurveto +0 -36 9 -37 19 -33 rrcurveto +-64 -64 rlineto +83 -82 rlineto +64 64 rlineto +33 -19 36 -9 36 0 rrcurveto +38 0 35 9 34 19 rrcurveto +66 -66 rlineto +82 83 rlineto +-66 65 rlineto +18 33 10 37 0 36 rrcurveto +0 38 -10 35 -18 34 rrcurveto +65 65 rlineto +-82 82 rlineto +-65 -65 rlineto +-35 18 -35 10 -37 0 rrcurveto +-36 0 -37 -10 -34 -18 rrcurveto +-66 66 rlineto +-81 -87 rlineto +64 -64 rlineto +closepath +92 -104 rmoveto +0 54 43 45 55 0 rrcurveto +54 0 45 -45 0 -54 rrcurveto +0 -55 -45 -43 -54 0 rrcurveto +-54 0 -44 43 0 55 rrcurveto +closepath +endchar } ND +/uniFFFC { +0 1000 hsbw +0 49 hstem +187 47 hstem +342 48 hstem +484 48 hstem +670 49 hstem +0 49 vstem +109 57 vstem +360 57 vstem +444 56 vstem +624 56 vstem +813 57 vstem +951 49 vstem +1000 562 rmoveto +0 157 rlineto +-158 0 rlineto +0 -49 rlineto +109 0 rlineto +0 -108 rlineto +49 0 rlineto +closepath +-281 108 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +281 -389 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +-130 17 rmoveto +0 234 rlineto +-57 0 rlineto +0 -236 rlineto +0 -45 -16 -22 -30 0 rrcurveto +-13 0 -11 4 -8 8 rrcurveto +-35 -38 rlineto +16 -15 23 -7 28 0 rrcurveto +68 0 35 39 0 78 rrcurveto +closepath +-432 372 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +562 -670 rmoveto +0 158 rlineto +-49 0 rlineto +0 -109 rlineto +-109 0 rlineto +0 -49 rlineto +158 0 rlineto +closepath +-305 289 rmoveto +0 39 -20 27 -38 16 rrcurveto +28 17 15 23 0 30 rrcurveto +0 60 -41 31 -80 0 rrcurveto +-115 0 rlineto +0 -345 rlineto +117 0 rlineto +89 0 45 34 0 68 rrcurveto +closepath +-537 381 rmoveto +0 49 rlineto +-158 0 rlineto +0 -157 rlineto +49 0 rlineto +0 108 rlineto +109 0 rlineto +closepath +561 -670 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-302 359 rmoveto +0 113 -55 66 -100 0 rrcurveto +-99 0 -54 -66 0 -113 rrcurveto +0 -114 54 -64 99 0 rrcurveto +100 0 55 64 0 114 rrcurveto +closepath +-368 -78 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +389 -281 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-280 0 rmoveto +0 49 rlineto +-109 0 rlineto +0 109 rlineto +-49 0 rlineto +0 -158 rlineto +158 0 rlineto +closepath +466 436 rmoveto +0 -31 -25 -15 -49 0 rrcurveto +-50 0 rlineto +0 94 rlineto +44 0 rlineto +53 0 27 -16 0 -32 rrcurveto +closepath +14 -147 rmoveto +0 -37 -26 -18 -51 0 rrcurveto +-61 0 rlineto +0 108 rlineto +55 0 rlineto +55 0 28 -18 0 -35 rrcurveto +closepath +-278 70 rmoveto +0 -87 -33 -43 -65 0 rrcurveto +-64 0 -32 43 0 87 rrcurveto +0 87 32 44 64 0 rrcurveto +65 0 33 -44 0 -87 rrcurveto +closepath +endchar } ND +/afii63904 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63905 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63906 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63908 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63910 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63912 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62927 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63941 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62939 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63943 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62943 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62946 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63946 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62951 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63948 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii62953 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63950 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63951 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63952 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63953 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63956 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63958 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63959 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63960 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii63961 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64046 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64058 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64059 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64060 { +0 319 hsbw +-209 20 hstem +62 102 vstem +273 -188 rmoveto +-100 211 -9 85 0 186 rrcurveto +0 158 40 159 69 154 rrcurveto +-22 20 rlineto +-144 -174 -45 -133 0 -187 rrcurveto +0 -194 42 -126 148 -180 rrcurveto +21 21 rlineto +closepath +endchar } ND +/afii64061 { +0 319 hsbw +-209 20 hstem +160 102 vstem +262 291 rmoveto +0 183 -49 146 -140 165 rrcurveto +-23 -20 rlineto +69 -155 41 -159 0 -157 rrcurveto +0 -186 -14 -84 -96 -212 rrcurveto +22 -21 rlineto +148 183 42 124 0 193 rrcurveto +closepath +endchar } ND +/afii62945 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/afii64184 { +0 703 hsbw +121 129 hstem +586 53 hstem +698 20 hstem +307 6 vstem +447 16 vstem +607 54 vstem +381 771 rmoveto +-22 77 -23 51 -64 21 rrcurveto +18 -65 rlineto +44 -28 13 -18 24 -56 rrcurveto +10 18 rlineto +closepath +82 -76 rmoveto +0 17 -2 16 -5 20 rrcurveto +-9 -4 rlineto +0 -38 -7 -31 -24 0 rrcurveto +-16 0 -5 7 -8 36 rrcurveto +-9 -3 rlineto +0 -50 -17 -26 -21 0 rrcurveto +-21 0 -6 19 0 20 rrcurveto +0 9 rlineto +-6 -3 rlineto +0 -5 -1 -5 -2 -4 rrcurveto +-2 -4 -1 -6 -2 -4 rrcurveto +0 -17 rlineto +0 -28 16 -25 19 0 rrcurveto +18 0 14 11 20 34 rrcurveto +13 -8 9 -2 8 0 rrcurveto +29 0 18 30 0 44 rrcurveto +closepath +198 -417 rmoveto +0 30 -6 25 -13 43 rrcurveto +-75 228 rlineto +-19 -40 -9 -34 0 -29 rrcurveto +0 -10 3 -16 6 -17 rrcurveto +59 -191 rlineto +-3 -10 -9 -5 -15 0 rrcurveto +-50 0 -13 15 -29 88 rrcurveto +-69 216 rlineto +-20 -38 -10 -33 0 -34 rrcurveto +0 -10 0 -5 7 -20 rrcurveto +47 -154 rlineto +-23 -24 -37 -19 -32 0 rrcurveto +-38 0 -14 17 -12 44 rrcurveto +-61 222 rlineto +-24 -50 -7 -27 0 -26 rrcurveto +0 -25 rlineto +-9 -5 -9 -5 -10 -4 rrcurveto +-27 -15 rlineto +-63 -35 -55 -137 0 -30 rrcurveto +0 -16 71 -21 70 0 rrcurveto +22 0 34 35 30 34 rrcurveto +22 -74 26 -25 51 0 rrcurveto +52 0 46 24 37 41 rrcurveto +21 -32 17 -10 52 0 rrcurveto +149 0 -61 112 0 52 rrcurveto +closepath +-431 -10 rmoveto +-11 -11 -15 -7 -8 0 rrcurveto +-16 0 -39 10 0 4 rrcurveto +0 14 29 24 44 18 rrcurveto +16 -52 rlineto +closepath +endchar } ND +/afii52399 { +0 469 hsbw +384 126 hstem +62 98 vstem +422 332 rmoveto +-67 -6 -24 -5 -82 -40 rrcurveto +-64 33 -25 21 0 20 rrcurveto +0 16 19 13 20 0 rrcurveto +24 0 26 -16 31 -34 rrcurveto +66 108 rlineto +-43 50 -30 18 -45 0 rrcurveto +-102 0 -64 -163 0 -50 rrcurveto +0 -28 13 -20 62 -61 rrcurveto +-41 -52 -21 -33 0 -46 rrcurveto +29 -11 rlineto +102 115 47 27 130 32 rrcurveto +39 112 rlineto +closepath +endchar } ND +/afii52400 { +0 238 hsbw +765 37 hstem +0 24 vstem +113 68 vstem +181 285 rmoveto +0 88 -12 84 -16 106 rrcurveto +-29 173 rlineto +-36 -70 -22 -50 0 -20 rrcurveto +0 -7 2 -11 4 -19 rrcurveto +27 -128 14 -134 0 -74 rrcurveto +0 -26 -4 -34 -7 -42 rrcurveto +29 -12 rlineto +38 81 12 37 0 58 rrcurveto +closepath +57 524 rmoveto +-9 7 rlineto +-30 -12 -8 -2 -20 0 rrcurveto +-22 0 -22 5 -27 11 rrcurveto +-20 8 -17 5 -11 0 rrcurveto +-20 0 -18 -13 -14 -25 rrcurveto +7 -7 rlineto +8 1 6 4 3 2 rrcurveto +11 0 rlineto +10 0 13 -3 19 -9 rrcurveto +28 -13 20 -3 22 0 rrcurveto +40 0 23 12 28 32 rrcurveto +closepath +endchar } ND +/afii62753 { +0 253 hsbw +143 133 hstem +765 37 hstem +4 25 vstem +108 63 vstem +288 143 rmoveto +0 133 rlineto +-69 0 rlineto +-61 0 13 82 0 91 rrcurveto +0 96 rlineto +0 80 -10 52 -42 59 rrcurveto +-53 -122 rlineto +38 -42 4 -17 0 -52 rrcurveto +0 -139 rlineto +0 -128 6 -93 105 0 rrcurveto +69 0 rlineto +closepath +-45 666 rmoveto +-9 7 rlineto +-31 -12 -8 -2 -20 0 rrcurveto +-20 0 -23 5 -28 11 rrcurveto +-20 8 -16 5 -12 0 rrcurveto +-20 0 -17 -13 -15 -25 rrcurveto +7 -7 rlineto +8 1 7 3 3 3 rrcurveto +11 0 rlineto +10 0 11 -4 20 -8 rrcurveto +30 -12 18 -4 23 0 rrcurveto +38 0 23 12 30 32 rrcurveto +closepath +endchar } ND +/afii57411 { +0 217 hsbw +109 20 hstem +771 20 hstem +836 40 hstem +63 25 vstem +114 68 vstem +181 798 rmoveto +-20 -5 -11 -2 -4 0 rrcurveto +-15 0 -43 23 0 10 rrcurveto +6 6 14 6 9 0 rrcurveto +5 0 11 -4 17 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-32 0 -46 -43 0 -30 rrcurveto +0 -10 8 -9 18 -12 rrcurveto +-13 -3 -7 -4 -6 -5 rrcurveto +-4 -8 -4 -7 -9 -9 rrcurveto +105 32 rlineto +17 4 7 9 6 17 rrcurveto +closepath +1 -513 rmoveto +0 88 -12 84 -16 106 rrcurveto +-29 173 rlineto +-36 -70 -22 -50 0 -20 rrcurveto +0 -7 2 -11 4 -19 rrcurveto +11 -52 8 -46 5 -37 rrcurveto +12 -114 rlineto +3 -39 2 -29 0 -19 rrcurveto +0 -26 -4 -34 -7 -42 rrcurveto +29 -12 rlineto +38 81 12 37 0 58 rrcurveto +closepath +endchar } ND +/afii62754 { +0 234 hsbw +143 133 hstem +836 40 hstem +49 25 vstem +90 63 vstem +269 143 rmoveto +0 133 rlineto +-68 0 rlineto +-61 0 13 82 0 91 rrcurveto +0 96 rlineto +0 80 -11 50 -42 60 rrcurveto +-53 -121 rlineto +38 -41 5 -18 0 -52 rrcurveto +0 -139 rlineto +0 -128 7 -93 104 0 rrcurveto +68 0 rlineto +closepath +-103 655 rmoveto +-20 -5 -11 -2 -4 0 rrcurveto +-14 0 -43 23 0 10 rrcurveto +6 6 13 6 9 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-30 0 -47 -43 0 -30 rrcurveto +0 -10 7 -9 19 -12 rrcurveto +-24 -10 -6 -3 -13 -24 rrcurveto +105 33 rlineto +15 4 8 9 6 17 rrcurveto +closepath +endchar } ND +/afii57412 { +0 451 hsbw +-71 99 hstem +155 121 hstem +354 130 hstem +621 40 hstem +184 24 vstem +274 64 vstem +427 58 vstem +485 177 rmoveto +0 126 rlineto +0 100 -41 81 -52 0 rrcurveto +-72 0 -46 -128 0 -86 rrcurveto +0 -74 42 -44 64 0 rrcurveto +9 0 11 1 14 2 rrcurveto +-66 -76 -62 -51 -79 0 rrcurveto +-61 0 -32 18 -56 39 rrcurveto +-21 -28 rlineto +133 -102 49 -26 54 0 rrcurveto +93 0 119 136 0 112 rrcurveto +closepath +-58 99 rmoveto +-19 0 rlineto +-43 0 -27 17 0 23 rrcurveto +0 20 13 18 20 0 rrcurveto +28 0 18 -26 10 -52 rrcurveto +closepath +-126 307 rmoveto +-20 -5 -11 -2 -4 0 rrcurveto +-15 0 -43 25 0 8 rrcurveto +6 6 14 6 9 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-32 0 -45 -44 0 -29 rrcurveto +0 -10 7 -9 18 -12 rrcurveto +-24 -10 -5 -5 -13 -22 rrcurveto +105 32 rlineto +17 4 6 10 6 17 rrcurveto +closepath +endchar } ND +/afii62755 { +0 451 hsbw +-71 99 hstem +155 121 hstem +354 130 hstem +621 40 hstem +184 24 vstem +274 64 vstem +427 58 vstem +485 177 rmoveto +0 126 rlineto +0 100 -41 81 -52 0 rrcurveto +-72 0 -46 -128 0 -86 rrcurveto +0 -74 42 -44 64 0 rrcurveto +9 0 11 1 14 2 rrcurveto +-66 -76 -62 -51 -79 0 rrcurveto +-61 0 -32 18 -56 39 rrcurveto +-21 -28 rlineto +133 -102 49 -26 54 0 rrcurveto +93 0 119 136 0 112 rrcurveto +closepath +-58 99 rmoveto +-19 0 rlineto +-43 0 -27 17 0 23 rrcurveto +0 20 13 18 20 0 rrcurveto +28 0 18 -26 10 -52 rrcurveto +closepath +-126 307 rmoveto +-20 -5 -11 -2 -4 0 rrcurveto +-15 0 -43 25 0 8 rrcurveto +6 6 14 6 9 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-32 0 -45 -44 0 -29 rrcurveto +0 -10 7 -9 18 -12 rrcurveto +-24 -10 -5 -5 -13 -22 rrcurveto +105 32 rlineto +17 4 6 10 6 17 rrcurveto +closepath +endchar } ND +/afii57413 { +0 217 hsbw +13 40 hstem +63 24 vstem +113 68 vstem +180 -24 rmoveto +-10 -2 -9 -3 -4 -3 rrcurveto +-12 0 rlineto +-15 0 -43 25 0 8 rrcurveto +6 6 14 6 9 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-32 0 -45 -40 0 -33 rrcurveto +0 -9 7 -10 18 -12 rrcurveto +-24 -9 -5 -5 -13 -23 rrcurveto +105 32 rlineto +18 4 5 12 6 16 rrcurveto +closepath +1 309 rmoveto +0 88 -12 84 -16 106 rrcurveto +-29 173 rlineto +-36 -70 -22 -50 0 -20 rrcurveto +0 -7 2 -11 4 -19 rrcurveto +27 -128 14 -134 0 -74 rrcurveto +0 -26 -4 -34 -7 -42 rrcurveto +29 -12 rlineto +38 81 12 37 0 58 rrcurveto +closepath +endchar } ND +/afii62756 { +0 234 hsbw +13 40 hstem +143 133 hstem +126 25 vstem +269 143 rmoveto +0 133 rlineto +-69 0 rlineto +-61 0 13 82 0 91 rrcurveto +0 96 rlineto +0 80 -10 52 -42 59 rrcurveto +-53 -122 rlineto +38 -42 4 -17 0 -52 rrcurveto +0 -139 rlineto +0 -128 6 -93 105 0 rrcurveto +69 0 rlineto +closepath +-26 -167 rmoveto +-10 -2 -9 -3 -4 -3 rrcurveto +-12 0 rlineto +-14 0 -43 25 0 8 rrcurveto +6 6 12 6 10 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 3 5 0 11 rrcurveto +0 13 -9 9 -12 0 rrcurveto +-30 0 -47 -40 0 -33 rrcurveto +0 -9 7 -10 19 -12 rrcurveto +-24 -9 -6 -5 -13 -23 rrcurveto +106 32 rlineto +16 4 8 12 4 16 rrcurveto +closepath +endchar } ND +/afii57414 { +0 645 hsbw +-60 107 146 101 346 107 hstem3 +506 40 hstem +108 25 vstem +320 59 vstem +498 56 vstem +575 381 rmoveto +0 48 -24 32 -38 0 rrcurveto +-80 0 -113 -160 0 -68 rrcurveto +0 -80 39 -7 82 0 rrcurveto +13 0 44 -1 0 -6 rrcurveto +0 -56 -169 -36 -103 0 rrcurveto +-70 0 -34 30 0 62 rrcurveto +0 48 24 62 48 82 rrcurveto +-23 15 rlineto +-70 -109 -27 -50 0 -111 rrcurveto +0 -90 50 -46 102 0 rrcurveto +134 0 194 99 0 162 rrcurveto +0 49 -31 -3 -55 0 rrcurveto +-29 0 rlineto +-31 0 -29 -1 0 19 rrcurveto +0 28 84 53 35 0 rrcurveto +22 0 8 -10 18 -46 rrcurveto +24 38 5 17 0 36 rrcurveto +closepath +-350 88 rmoveto +-20 -6 -11 -2 -4 0 rrcurveto +-14 0 -43 25 0 8 rrcurveto +6 6 12 6 10 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 3 6 0 10 rrcurveto +0 13 -9 9 -12 0 rrcurveto +-30 0 -47 -45 0 -27 rrcurveto +0 -11 7 -9 19 -12 rrcurveto +-24 -8 -6 -7 -13 -22 rrcurveto +106 32 rlineto +16 4 8 10 4 18 rrcurveto +closepath +endchar } ND +/afii62759 { +0 577 hsbw +-98 117 hstem +143 133 hstem +484 40 hstem +23 76 vstem +123 24 vstem +488 60 vstem +607 143 rmoveto +0 133 rlineto +-68 0 rlineto +-75 0 -78 -36 -23 -54 rrcurveto +-3 -7 -3 -7 -3 -6 rrcurveto +-11 -22 -12 -27 0 -12 rrcurveto +0 -16 18 -8 38 0 rrcurveto +50 0 51 -8 0 -8 rrcurveto +0 -16 -151 -30 -62 0 rrcurveto +-120 0 -56 32 0 70 rrcurveto +0 50 22 45 68 83 rrcurveto +-29 20 rlineto +-86 -106 -51 -65 0 -108 rrcurveto +0 -81 83 -57 123 0 rrcurveto +134 0 185 72 0 126 rrcurveto +0 14 -6 7 -15 3 rrcurveto +-8 2 -9 4 -9 6 rrcurveto +0 6 11 1 30 0 rrcurveto +65 0 rlineto +closepath +-367 304 rmoveto +-20 -6 -11 -2 -4 0 rrcurveto +-15 0 -43 25 0 8 rrcurveto +6 6 14 6 9 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 2 6 0 10 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-31 0 -46 -45 0 -27 rrcurveto +0 -11 7 -9 18 -12 rrcurveto +-24 -8 -5 -7 -13 -22 rrcurveto +105 32 rlineto +18 4 5 10 6 18 rrcurveto +closepath +endchar } ND +/afii62757 { +0 271 hsbw +143 133 hstem +621 40 hstem +174 25 vstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-15 440 rmoveto +-20 -5 -11 -2 -4 0 rrcurveto +-14 0 -43 25 0 8 rrcurveto +6 6 13 6 9 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-30 0 -47 -44 0 -29 rrcurveto +0 -10 7 -9 19 -12 rrcurveto +-24 -10 -6 -5 -13 -22 rrcurveto +106 32 rlineto +16 4 8 11 4 16 rrcurveto +closepath +endchar } ND +/afii62758 { +0 271 hsbw +143 133 hstem +621 40 hstem +174 25 vstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-15 440 rmoveto +-20 -5 -11 -2 -4 0 rrcurveto +-14 0 -43 25 0 8 rrcurveto +6 6 13 6 9 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-30 0 -47 -44 0 -29 rrcurveto +0 -10 7 -9 19 -12 rrcurveto +-24 -10 -6 -5 -13 -22 rrcurveto +106 32 rlineto +16 4 8 11 4 16 rrcurveto +closepath +endchar } ND +/afii57415 { +0 217 hsbw +113 68 vstem +181 285 rmoveto +0 88 -12 84 -16 106 rrcurveto +-29 173 rlineto +-36 -70 -22 -50 0 -20 rrcurveto +0 -7 2 -11 4 -19 rrcurveto +27 -128 14 -134 0 -74 rrcurveto +0 -26 -4 -34 -7 -42 rrcurveto +29 -12 rlineto +38 81 12 37 0 58 rrcurveto +closepath +endchar } ND +/afii62760 { +0 234 hsbw +143 133 hstem +89 63 vstem +269 143 rmoveto +0 133 rlineto +-69 0 rlineto +-61 0 13 82 0 91 rrcurveto +0 96 rlineto +0 80 -10 52 -42 59 rrcurveto +-53 -122 rlineto +38 -42 4 -17 0 -52 rrcurveto +0 -139 rlineto +0 -128 6 -93 105 0 rrcurveto +69 0 rlineto +closepath +endchar } ND +/afii57416 { +0 649 hsbw +143 133 hstem +62 56 vstem +638 46 vstem +684 143 rmoveto +0 138 rlineto +0 94 -8 43 -50 71 rrcurveto +-44 -113 rlineto +20 -28 14 -7 9 -34 rrcurveto +3 -9 4 -11 6 -11 rrcurveto +-353 0 rlineto +-86 0 -81 15 0 73 rrcurveto +0 29 8 25 28 52 rrcurveto +-28 19 rlineto +-54 -77 -10 -37 0 -70 rrcurveto +0 -115 12 -47 200 0 rrcurveto +410 0 rlineto +closepath +-191 -103 rmoveto +-114 64 rlineto +-58 -112 rlineto +113 -61 rlineto +59 109 rlineto +closepath +endchar } ND +/afii62763 { +0 649 hsbw +143 133 hstem +62 56 vstem +638 46 vstem +684 143 rmoveto +0 138 rlineto +0 94 -8 43 -50 71 rrcurveto +-44 -113 rlineto +20 -28 14 -7 9 -34 rrcurveto +3 -9 4 -11 6 -11 rrcurveto +-353 0 rlineto +-86 0 -81 15 0 73 rrcurveto +0 29 8 25 28 52 rrcurveto +-28 19 rlineto +-54 -77 -10 -37 0 -70 rrcurveto +0 -115 12 -47 200 0 rrcurveto +410 0 rlineto +closepath +-191 -103 rmoveto +-114 64 rlineto +-58 -112 rlineto +113 -61 rlineto +59 109 rlineto +closepath +endchar } ND +/afii62761 { +0 271 hsbw +143 133 hstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-50 -103 rmoveto +-113 64 rlineto +-59 -112 rlineto +113 -61 rlineto +59 109 rlineto +closepath +endchar } ND +/afii62762 { +0 271 hsbw +143 133 hstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-50 -103 rmoveto +-113 64 rlineto +-59 -112 rlineto +113 -61 rlineto +59 109 rlineto +closepath +endchar } ND +/afii57417 { +0 343 hsbw +126 130 hstem +499 20 hstem +700 20 hstem +43 57 vstem +231 73 vstem +279 713 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -49 rlineto +39 77 rlineto +70 -39 rlineto +53 99 rlineto +closepath +25 -387 rmoveto +0 78 -69 47 -61 39 rrcurveto +-48 29 rlineto +-15 -30 -23 -49 -10 -30 rrcurveto +18 -12 rlineto +-40 -78 -13 -44 0 -53 rrcurveto +0 -59 32 -38 51 0 rrcurveto +89 0 89 93 0 107 rrcurveto +closepath +-73 -39 rmoveto +0 -11 -55 -20 -32 0 rrcurveto +-26 0 -18 16 0 22 rrcurveto +0 22 10 27 21 33 rrcurveto +44 -28 56 -49 0 -12 rrcurveto +closepath +endchar } ND +/afii62764 { +0 415 hsbw +143 133 hstem +478 395 hstem +332 828 rmoveto +-87 45 rlineto +-43 -75 rlineto +-72 36 rlineto +-51 -85 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 91 rlineto +closepath +113 -685 rmoveto +0 133 rlineto +-64 0 rlineto +-52 0 1 50 -11 64 rrcurveto +-47 304 rlineto +-30 -55 -9 -36 0 -25 rrcurveto +0 -8 1 -10 2 -9 rrcurveto +-26 -15 rlineto +-115 -70 -64 -139 0 -28 rrcurveto +0 -12 5 -2 51 -10 rrcurveto +59 -11 rlineto +10 -2 8 -1 6 0 rrcurveto +29 0 30 37 38 46 rrcurveto +6 -103 18 -98 90 0 rrcurveto +64 0 rlineto +closepath +-190 276 rmoveto +-30 -22 -12 -6 -14 0 rrcurveto +-22 0 -29 4 0 10 rrcurveto +0 19 40 24 33 18 rrcurveto +5 2 8 4 11 6 rrcurveto +10 -59 rlineto +closepath +endchar } ND +/afii57418 { +0 649 hsbw +143 133 hstem +593 20 hstem +62 56 vstem +638 46 vstem +511 606 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +70 -39 rlineto +53 99 rlineto +closepath +173 -463 rmoveto +0 138 rlineto +0 94 -8 43 -50 71 rrcurveto +-44 -113 rlineto +20 -28 14 -7 9 -34 rrcurveto +3 -9 4 -11 6 -11 rrcurveto +-353 0 rlineto +-86 0 -81 15 0 73 rrcurveto +0 29 8 25 28 52 rrcurveto +-28 19 rlineto +-54 -77 -10 -37 0 -70 rrcurveto +0 -115 12 -47 200 0 rrcurveto +410 0 rlineto +closepath +endchar } ND +/afii62767 { +0 649 hsbw +143 133 hstem +593 20 hstem +62 56 vstem +638 46 vstem +511 606 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +70 -39 rlineto +53 99 rlineto +closepath +173 -463 rmoveto +0 138 rlineto +0 94 -8 43 -50 71 rrcurveto +-44 -113 rlineto +20 -28 14 -7 9 -34 rrcurveto +3 -9 4 -11 6 -11 rrcurveto +-353 0 rlineto +-86 0 -81 15 0 73 rrcurveto +0 29 8 25 28 52 rrcurveto +-28 19 rlineto +-54 -77 -10 -37 0 -70 rrcurveto +0 -115 12 -47 200 0 rrcurveto +410 0 rlineto +closepath +endchar } ND +/afii62765 { +0 271 hsbw +143 133 hstem +695 20 hstem +257 49 vstem +298 665 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 100 rlineto +closepath +8 -522 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +endchar } ND +/afii62766 { +0 271 hsbw +143 133 hstem +695 20 hstem +257 49 vstem +298 665 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 100 rlineto +closepath +8 -522 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +endchar } ND +/afii57419 { +0 649 hsbw +144 466 hstem +63 56 vstem +637 47 vstem +416 719 rmoveto +-91 47 rlineto +-50 -99 rlineto +92 -49 rlineto +49 101 rlineto +closepath +94 -115 rmoveto +-89 49 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +70 -39 rlineto +53 100 rlineto +closepath +174 -460 rmoveto +0 128 rlineto +0 58 -1 30 -14 44 rrcurveto +-3 9 -3 9 -2 7 rrcurveto +-8 27 -10 10 -18 24 rrcurveto +-43 -112 rlineto +34 -43 6 -13 15 -46 rrcurveto +-355 0 rlineto +-114 0 -49 27 0 63 rrcurveto +0 26 8 24 27 56 rrcurveto +-27 17 rlineto +-48 -76 -16 -44 0 -61 rrcurveto +0 -116 44 -48 164 0 rrcurveto +413 0 rlineto +closepath +endchar } ND +/afii62770 { +0 649 hsbw +144 466 hstem +63 56 vstem +637 47 vstem +416 719 rmoveto +-91 47 rlineto +-50 -99 rlineto +92 -49 rlineto +49 101 rlineto +closepath +94 -115 rmoveto +-89 49 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +70 -39 rlineto +53 100 rlineto +closepath +174 -460 rmoveto +0 128 rlineto +0 58 -1 30 -14 44 rrcurveto +-3 9 -3 9 -2 7 rrcurveto +-8 27 -10 10 -18 24 rrcurveto +-43 -112 rlineto +34 -43 6 -13 15 -46 rrcurveto +-355 0 rlineto +-114 0 -49 27 0 63 rrcurveto +0 26 8 24 27 56 rrcurveto +-27 17 rlineto +-48 -76 -16 -44 0 -61 rrcurveto +0 -116 44 -48 164 0 rrcurveto +413 0 rlineto +closepath +endchar } ND +/afii62768 { +0 271 hsbw +143 133 hstem +695 20 hstem +257 49 vstem +203 781 rmoveto +-91 47 rlineto +-49 -100 rlineto +91 -49 rlineto +49 102 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 100 rlineto +closepath +8 -522 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +endchar } ND +/afii62769 { +0 271 hsbw +143 133 hstem +695 20 hstem +257 49 vstem +203 781 rmoveto +-91 47 rlineto +-49 -100 rlineto +91 -49 rlineto +49 102 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 100 rlineto +closepath +8 -522 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +endchar } ND +/afii57420 { +0 577 hsbw +-203 131 hstem +396 131 hstem +34 62 vstem +563 -87 rmoveto +-10 22 rlineto +-39 0 -59 -4 -26 -3 rrcurveto +-20 0 rlineto +-203 0 -110 71 0 130 rrcurveto +0 138 133 91 250 32 rrcurveto +30 120 rlineto +-77 0 -79 4 -81 8 rrcurveto +-31 3 -28 2 -15 0 rrcurveto +-100 0 -57 -61 -16 -120 rrcurveto +86 38 22 12 68 0 rrcurveto +-116 -83 -51 -101 0 -134 rrcurveto +0 -206 122 -75 218 0 rrcurveto +189 116 rlineto +closepath +-156 260 rmoveto +-112 62 rlineto +-61 -111 rlineto +115 -63 rlineto +58 112 rlineto +closepath +endchar } ND +/afii62773 { +0 559 hsbw +-200 126 hstem +143 133 hstem +394 133 hstem +32 64 vstem +338 36 vstem +593 143 rmoveto +0 133 rlineto +-111 0 rlineto +-83 0 -25 14 0 47 rrcurveto +0 8 1 19 3 12 rrcurveto +8 0 8 2 7 2 rrcurveto +22 5 24 5 30 0 rrcurveto +29 118 rlineto +-78 0 -79 6 -79 8 rrcurveto +-30 3 -27 2 -12 0 rrcurveto +-104 0 -60 -61 -14 -120 rrcurveto +80 40 23 8 62 0 rrcurveto +10 0 rlineto +-98 -54 -68 -126 0 -136 rrcurveto +0 -178 107 -100 191 0 rrcurveto +47 0 rlineto +186 119 rlineto +-9 16 rlineto +-58 -6 -45 -3 -30 0 rrcurveto +-211 0 -114 73 0 130 rrcurveto +0 120 113 86 137 32 rrcurveto +-5 -24 -3 -16 0 -6 rrcurveto +-3 -20 -1 -19 0 -20 rrcurveto +0 -92 33 -27 115 0 rrcurveto +111 0 rlineto +closepath +-259 -8 rmoveto +-112 61 rlineto +-59 -108 rlineto +111 -63 rlineto +60 110 rlineto +closepath +endchar } ND +/afii62771 { +0 523 hsbw +143 133 hstem +388 113 hstem +347 211 vstem +558 143 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-181 -107 rmoveto +-114 61 rlineto +-60 -111 rlineto +112 -60 rlineto +62 110 rlineto +closepath +endchar } ND +/afii62772 { +0 523 hsbw +143 133 hstem +388 113 hstem +347 211 vstem +558 143 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-181 -107 rmoveto +-114 61 rlineto +-60 -111 rlineto +112 -60 rlineto +62 110 rlineto +closepath +endchar } ND +/afii57421 { +0 577 hsbw +-203 131 hstem +396 131 hstem +34 62 vstem +563 -87 rmoveto +-10 22 rlineto +-39 0 -59 -4 -26 -3 rrcurveto +-20 0 rlineto +-203 0 -110 71 0 130 rrcurveto +0 138 133 91 250 32 rrcurveto +30 120 rlineto +-77 0 -79 4 -81 8 rrcurveto +-31 3 -28 2 -15 0 rrcurveto +-100 0 -57 -61 -16 -120 rrcurveto +86 38 22 12 68 0 rrcurveto +-116 -83 -51 -101 0 -134 rrcurveto +0 -206 122 -75 218 0 rrcurveto +189 116 rlineto +closepath +endchar } ND +/afii62776 { +0 559 hsbw +-200 126 hstem +143 133 hstem +394 133 hstem +32 64 vstem +338 36 vstem +593 143 rmoveto +0 133 rlineto +-111 0 rlineto +-83 0 -25 14 0 47 rrcurveto +0 8 1 19 3 12 rrcurveto +8 0 8 2 7 2 rrcurveto +22 5 24 5 30 0 rrcurveto +29 118 rlineto +-78 0 -79 6 -79 8 rrcurveto +-30 3 -27 2 -12 0 rrcurveto +-104 0 -60 -61 -14 -120 rrcurveto +80 40 23 8 62 0 rrcurveto +10 0 rlineto +-98 -54 -68 -126 0 -136 rrcurveto +0 -178 107 -100 191 0 rrcurveto +47 0 rlineto +186 119 rlineto +-9 16 rlineto +-58 -6 -45 -3 -30 0 rrcurveto +-211 0 -114 73 0 130 rrcurveto +0 120 113 86 137 32 rrcurveto +-5 -24 -3 -16 0 -6 rrcurveto +-3 -20 -1 -19 0 -20 rrcurveto +0 -92 33 -27 115 0 rrcurveto +111 0 rlineto +closepath +endchar } ND +/afii62774 { +0 523 hsbw +143 133 hstem +388 113 hstem +347 211 vstem +558 143 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +endchar } ND +/afii62775 { +0 523 hsbw +143 133 hstem +388 113 hstem +347 211 vstem +558 143 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +endchar } ND +/afii57422 { +0 577 hsbw +-203 131 hstem +396 131 hstem +34 62 vstem +348 685 rmoveto +-115 61 rlineto +-58 -111 rlineto +114 -59 rlineto +59 109 rlineto +closepath +215 -772 rmoveto +-10 22 rlineto +-39 0 -59 -4 -26 -3 rrcurveto +-20 0 rlineto +-203 0 -110 71 0 130 rrcurveto +0 138 133 91 250 32 rrcurveto +30 120 rlineto +-77 0 -79 4 -81 8 rrcurveto +-31 3 -28 2 -15 0 rrcurveto +-100 0 -57 -61 -16 -120 rrcurveto +86 38 22 12 68 0 rrcurveto +-116 -83 -51 -101 0 -134 rrcurveto +0 -206 122 -75 218 0 rrcurveto +189 116 rlineto +closepath +endchar } ND +/afii62779 { +0 559 hsbw +-200 126 hstem +143 133 hstem +394 133 hstem +32 64 vstem +338 36 vstem +348 685 rmoveto +-113 61 rlineto +-60 -111 rlineto +114 -59 rlineto +59 109 rlineto +closepath +245 -542 rmoveto +0 133 rlineto +-111 0 rlineto +-83 0 -25 14 0 47 rrcurveto +0 8 1 19 3 12 rrcurveto +8 0 8 2 7 2 rrcurveto +22 5 24 5 30 0 rrcurveto +29 118 rlineto +-78 0 -79 6 -79 8 rrcurveto +-30 3 -27 2 -12 0 rrcurveto +-104 0 -60 -61 -14 -120 rrcurveto +80 40 23 8 62 0 rrcurveto +10 0 rlineto +-98 -54 -68 -126 0 -136 rrcurveto +0 -178 107 -100 191 0 rrcurveto +47 0 rlineto +186 119 rlineto +-9 16 rlineto +-58 -6 -45 -3 -30 0 rrcurveto +-211 0 -114 73 0 130 rrcurveto +0 120 113 86 137 32 rrcurveto +-5 -24 -3 -16 0 -6 rrcurveto +-3 -20 -1 -19 0 -20 rrcurveto +0 -92 33 -27 115 0 rrcurveto +111 0 rlineto +closepath +endchar } ND +/afii62777 { +0 523 hsbw +143 133 hstem +388 113 hstem +704 20 hstem +347 211 vstem +361 663 rmoveto +-113 61 rlineto +-60 -111 rlineto +115 -59 rlineto +58 109 rlineto +closepath +197 -520 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +endchar } ND +/afii62778 { +0 523 hsbw +143 133 hstem +388 113 hstem +704 20 hstem +347 211 vstem +361 663 rmoveto +-113 61 rlineto +-60 -111 rlineto +115 -59 rlineto +58 109 rlineto +closepath +197 -520 rmoveto +0 133 rlineto +-52 10 -13 10 -49 54 rrcurveto +-79 87 -57 64 -76 0 rrcurveto +-56 0 -43 -39 -36 -81 rrcurveto +15 1 9 3 6 3 rrcurveto +24 0 rlineto +70 0 61 -46 65 -66 rrcurveto +-347 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +endchar } ND +/afii57423 { +0 343 hsbw +143 133 hstem +94 19 vstem +331 46 vstem +377 143 rmoveto +0 157 rlineto +0 138 -22 97 -92 69 rrcurveto +-35 -152 rlineto +63 -43 27 -50 13 -83 rrcurveto +-168 0 rlineto +-26 0 -19 10 -5 23 rrcurveto +-19 0 rlineto +-6 -35 -3 -35 0 -28 rrcurveto +0 -49 25 -19 46 0 rrcurveto +221 0 rlineto +closepath +endchar } ND +/afii62780 { +0 343 hsbw +143 133 hstem +94 19 vstem +331 46 vstem +377 143 rmoveto +0 157 rlineto +0 138 -22 97 -92 69 rrcurveto +-35 -152 rlineto +63 -43 27 -50 13 -83 rrcurveto +-168 0 rlineto +-26 0 -19 10 -5 23 rrcurveto +-19 0 rlineto +-6 -35 -3 -35 0 -28 rrcurveto +0 -49 25 -19 46 0 rrcurveto +221 0 rlineto +closepath +endchar } ND +/afii57424 { +0 343 hsbw +143 133 hstem +94 19 vstem +331 46 vstem +293 785 rmoveto +-111 60 rlineto +-61 -110 rlineto +114 -60 rlineto +58 110 rlineto +closepath +84 -642 rmoveto +0 157 rlineto +0 138 -22 97 -92 69 rrcurveto +-35 -152 rlineto +63 -43 27 -50 13 -83 rrcurveto +-168 0 rlineto +-26 0 -19 10 -5 23 rrcurveto +-19 0 rlineto +-6 -35 -3 -35 0 -28 rrcurveto +0 -49 25 -19 46 0 rrcurveto +221 0 rlineto +closepath +endchar } ND +/afii62781 { +0 343 hsbw +143 133 hstem +94 19 vstem +331 46 vstem +293 785 rmoveto +-111 60 rlineto +-61 -110 rlineto +114 -60 rlineto +58 110 rlineto +closepath +84 -642 rmoveto +0 157 rlineto +0 138 -22 97 -92 69 rrcurveto +-35 -152 rlineto +63 -43 27 -50 13 -83 rrcurveto +-168 0 rlineto +-26 0 -19 10 -5 23 rrcurveto +-19 0 rlineto +-6 -35 -3 -35 0 -28 rrcurveto +0 -49 25 -19 46 0 rrcurveto +221 0 rlineto +closepath +endchar } ND +/afii57425 { +0 433 hsbw +-72 89 hstem +429 38 vstem +467 132 rmoveto +0 149 rlineto +0 76 -25 58 -45 46 rrcurveto +-27 -132 rlineto +28 -28 31 -54 0 -29 rrcurveto +0 -60 -162 -141 -79 0 rrcurveto +-42 0 -28 10 -58 39 rrcurveto +-21 -30 rlineto +96 -68 56 -40 75 0 rrcurveto +73 0 128 146 0 58 rrcurveto +closepath +endchar } ND +/afii62782 { +0 433 hsbw +-72 89 hstem +429 38 vstem +467 132 rmoveto +0 149 rlineto +0 76 -25 58 -45 46 rrcurveto +-27 -132 rlineto +28 -28 31 -54 0 -29 rrcurveto +0 -60 -162 -141 -79 0 rrcurveto +-42 0 -28 10 -58 39 rrcurveto +-21 -30 rlineto +96 -68 56 -40 75 0 rrcurveto +73 0 128 146 0 58 rrcurveto +closepath +endchar } ND +/afii57426 { +0 433 hsbw +-72 89 hstem +429 38 vstem +442 632 rmoveto +-115 61 rlineto +-58 -110 rlineto +114 -60 rlineto +59 109 rlineto +closepath +25 -500 rmoveto +0 149 rlineto +0 76 -25 58 -45 46 rrcurveto +-27 -132 rlineto +28 -28 31 -54 0 -29 rrcurveto +0 -60 -162 -141 -79 0 rrcurveto +-42 0 -28 10 -58 39 rrcurveto +-21 -30 rlineto +96 -68 56 -40 75 0 rrcurveto +73 0 128 146 0 58 rrcurveto +closepath +endchar } ND +/afii62783 { +0 433 hsbw +-72 89 hstem +429 38 vstem +442 632 rmoveto +-115 61 rlineto +-58 -110 rlineto +114 -60 rlineto +59 109 rlineto +closepath +25 -500 rmoveto +0 149 rlineto +0 76 -25 58 -45 46 rrcurveto +-27 -132 rlineto +28 -28 31 -54 0 -29 rrcurveto +0 -60 -162 -141 -79 0 rrcurveto +-42 0 -28 10 -58 39 rrcurveto +-21 -30 rlineto +96 -68 56 -40 75 0 rrcurveto +73 0 128 146 0 58 rrcurveto +closepath +endchar } ND +/afii57427 { +0 899 hsbw +-63 118 hstem +143 133 hstem +65 60 vstem +532 43 vstem +752 38 vstem +878 56 vstem +934 144 rmoveto +0 184 rlineto +0 49 -8 29 -17 40 rrcurveto +-46 -65 rlineto +-8 -12 -1 -6 0 -8 rrcurveto +0 -5 5 -13 7 -15 rrcurveto +6 -13 6 -18 0 -12 rrcurveto +-27 4 -31 8 -30 11 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-25 -16 rlineto +-19 -14 -2 -8 0 -26 rrcurveto +0 -59 -34 -20 -98 0 rrcurveto +-45 0 rlineto +0 75 -15 36 -40 71 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +163 0 99 51 0 155 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +84 -31 7 -1 72 0 rrcurveto +closepath +endchar } ND +/afii62786 { +0 899 hsbw +-63 118 hstem +143 133 hstem +65 60 vstem +532 43 vstem +752 38 vstem +878 56 vstem +934 144 rmoveto +0 184 rlineto +0 49 -8 29 -17 40 rrcurveto +-46 -65 rlineto +-8 -12 -1 -6 0 -8 rrcurveto +0 -5 5 -13 7 -15 rrcurveto +6 -13 6 -18 0 -12 rrcurveto +-27 4 -31 8 -30 11 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-25 -16 rlineto +-19 -14 -2 -8 0 -26 rrcurveto +0 -59 -34 -20 -98 0 rrcurveto +-45 0 rlineto +0 75 -15 36 -40 71 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +163 0 99 51 0 155 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +84 -31 7 -1 72 0 rrcurveto +closepath +endchar } ND +/afii62784 { +0 608 hsbw +143 133 hstem +200 29 vstem +461 38 vstem +587 56 vstem +643 143 rmoveto +0 185 rlineto +0 49 -8 29 -17 40 rrcurveto +-41 -56 rlineto +-3 -4 -3 -4 -2 -2 rrcurveto +-3 -2 0 -2 0 -1 rrcurveto +-2 -5 -1 -7 0 -8 rrcurveto +0 -6 5 -14 7 -16 rrcurveto +6 -14 6 -17 0 -11 rrcurveto +-34 4 -30 9 -24 12 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-21 -15 rlineto +-17 -14 -8 -6 0 -17 rrcurveto +0 -73 -37 -18 -79 0 rrcurveto +-60 0 rlineto +-30 0 -26 24 0 34 rrcurveto +0 32 1 26 2 22 rrcurveto +-32 5 rlineto +0 -90 -49 -53 -81 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +56 0 40 24 32 50 rrcurveto +20 -54 22 -20 44 0 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +48 -23 41 -10 74 0 rrcurveto +closepath +endchar } ND +/afii62785 { +0 608 hsbw +143 133 hstem +200 29 vstem +461 38 vstem +587 56 vstem +643 143 rmoveto +0 185 rlineto +0 49 -8 29 -17 40 rrcurveto +-41 -56 rlineto +-3 -4 -3 -4 -2 -2 rrcurveto +-3 -2 0 -2 0 -1 rrcurveto +-2 -5 -1 -7 0 -8 rrcurveto +0 -6 5 -14 7 -16 rrcurveto +6 -14 6 -17 0 -11 rrcurveto +-34 4 -30 9 -24 12 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-21 -15 rlineto +-17 -14 -8 -6 0 -17 rrcurveto +0 -73 -37 -18 -79 0 rrcurveto +-60 0 rlineto +-30 0 -26 24 0 34 rrcurveto +0 32 1 26 2 22 rrcurveto +-32 5 rlineto +0 -90 -49 -53 -81 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +56 0 40 24 32 50 rrcurveto +20 -54 22 -20 44 0 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +48 -23 41 -10 74 0 rrcurveto +closepath +endchar } ND +/afii57428 { +0 899 hsbw +-63 118 hstem +143 133 hstem +598 20 hstem +65 60 vstem +532 43 vstem +752 38 vstem +878 56 vstem +799 727 rmoveto +-91 47 rlineto +-50 -100 rlineto +92 -49 rlineto +49 102 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-73 36 rlineto +-50 -95 rlineto +90 -49 rlineto +40 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +40 -467 rmoveto +0 184 rlineto +0 49 -8 29 -17 40 rrcurveto +-46 -65 rlineto +-8 -12 -1 -6 0 -8 rrcurveto +0 -5 5 -13 7 -15 rrcurveto +6 -13 6 -18 0 -12 rrcurveto +-27 4 -31 8 -30 11 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-25 -16 rlineto +-19 -14 -2 -8 0 -26 rrcurveto +0 -59 -34 -20 -98 0 rrcurveto +-45 0 rlineto +0 75 -15 36 -40 71 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +163 0 99 51 0 155 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +84 -31 7 -1 72 0 rrcurveto +closepath +endchar } ND +/afii62789 { +0 899 hsbw +-63 118 hstem +143 133 hstem +598 20 hstem +65 60 vstem +532 43 vstem +752 38 vstem +878 56 vstem +799 727 rmoveto +-91 47 rlineto +-50 -100 rlineto +92 -49 rlineto +49 102 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-73 36 rlineto +-50 -95 rlineto +90 -49 rlineto +40 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +40 -467 rmoveto +0 184 rlineto +0 49 -8 29 -17 40 rrcurveto +-46 -65 rlineto +-8 -12 -1 -6 0 -8 rrcurveto +0 -5 5 -13 7 -15 rrcurveto +6 -13 6 -18 0 -12 rrcurveto +-27 4 -31 8 -30 11 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-25 -16 rlineto +-19 -14 -2 -8 0 -26 rrcurveto +0 -59 -34 -20 -98 0 rrcurveto +-45 0 rlineto +0 75 -15 36 -40 71 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +163 0 99 51 0 155 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +84 -31 7 -1 72 0 rrcurveto +closepath +endchar } ND +/afii62787 { +0 608 hsbw +143 133 hstem +598 20 hstem +200 29 vstem +461 38 vstem +587 56 vstem +491 727 rmoveto +-91 47 rlineto +-49 -100 rlineto +91 -49 rlineto +49 102 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +87 -49 rlineto +43 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +57 -468 rmoveto +0 185 rlineto +0 49 -8 29 -17 40 rrcurveto +-41 -56 rlineto +-3 -4 -3 -4 -2 -2 rrcurveto +-3 -2 0 -2 0 -1 rrcurveto +-2 -5 -1 -7 0 -8 rrcurveto +0 -6 5 -14 7 -16 rrcurveto +6 -14 6 -17 0 -11 rrcurveto +-34 4 -30 9 -24 12 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-21 -15 rlineto +-17 -14 -8 -6 0 -17 rrcurveto +0 -73 -37 -18 -79 0 rrcurveto +-60 0 rlineto +-30 0 -26 24 0 34 rrcurveto +0 32 1 26 2 22 rrcurveto +-32 5 rlineto +0 -90 -49 -53 -81 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +56 0 40 24 32 50 rrcurveto +20 -54 22 -20 44 0 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +48 -23 41 -10 74 0 rrcurveto +closepath +endchar } ND +/afii62788 { +0 608 hsbw +143 133 hstem +598 20 hstem +200 29 vstem +461 38 vstem +587 56 vstem +491 727 rmoveto +-91 47 rlineto +-49 -100 rlineto +91 -49 rlineto +49 102 rlineto +closepath +95 -116 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +87 -49 rlineto +43 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +57 -468 rmoveto +0 185 rlineto +0 49 -8 29 -17 40 rrcurveto +-41 -56 rlineto +-3 -4 -3 -4 -2 -2 rrcurveto +-3 -2 0 -2 0 -1 rrcurveto +-2 -5 -1 -7 0 -8 rrcurveto +0 -6 5 -14 7 -16 rrcurveto +6 -14 6 -17 0 -11 rrcurveto +-34 4 -30 9 -24 12 rrcurveto +5 29 3 24 0 18 rrcurveto +0 46 rlineto +-21 -15 rlineto +-17 -14 -8 -6 0 -17 rrcurveto +0 -73 -37 -18 -79 0 rrcurveto +-60 0 rlineto +-30 0 -26 24 0 34 rrcurveto +0 32 1 26 2 22 rrcurveto +-32 5 rlineto +0 -90 -49 -53 -81 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +56 0 40 24 32 50 rrcurveto +20 -54 22 -20 44 0 rrcurveto +79 0 rlineto +60 0 19 6 38 27 rrcurveto +48 -23 41 -10 74 0 rrcurveto +closepath +endchar } ND +/afii57429 { +0 1063 hsbw +-63 118 hstem +143 133 hstem +373 131 hstem +65 60 vstem +532 43 vstem +1032 65 vstem +1097 143 rmoveto +0 187 rlineto +0 100 -34 74 -88 0 rrcurveto +-44 0 -26 -18 -49 -35 rrcurveto +-175 -125 rlineto +-61 -45 -4 -5 -41 0 rrcurveto +0 54 -7 29 -18 39 rrcurveto +-3 5 -10 20 -17 35 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +163 0 99 51 0 155 rrcurveto +522 0 rlineto +closepath +-65 183 rmoveto +0 -34 -55 -16 -109 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +57 0 46 -23 0 -24 rrcurveto +closepath +endchar } ND +/afii62792 { +0 1063 hsbw +-63 118 hstem +143 133 hstem +373 131 hstem +65 60 vstem +532 43 vstem +1032 65 vstem +1097 143 rmoveto +0 187 rlineto +0 100 -34 74 -88 0 rrcurveto +-44 0 -26 -18 -49 -35 rrcurveto +-175 -125 rlineto +-61 -45 -4 -5 -41 0 rrcurveto +0 54 -7 29 -18 39 rrcurveto +-3 5 -10 20 -17 35 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +163 0 99 51 0 155 rrcurveto +522 0 rlineto +closepath +-65 183 rmoveto +0 -34 -55 -16 -109 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +57 0 46 -23 0 -24 rrcurveto +closepath +endchar } ND +/afii62790 { +0 771 hsbw +143 133 hstem +373 131 hstem +0 449 vstem +737 69 vstem +806 143 rmoveto +0 187 rlineto +0 101 -38 73 -88 0 rrcurveto +-39 0 -30 -21 -46 -32 rrcurveto +-175 -125 rlineto +-58 -42 -18 -8 -32 0 rrcurveto +-32 0 -21 20 0 38 rrcurveto +0 80 rlineto +-29 5 rlineto +-12 -94 -32 -49 -86 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +61 0 30 20 37 54 rrcurveto +18 -52 26 -22 47 0 rrcurveto +517 0 rlineto +closepath +-69 183 rmoveto +0 -34 -54 -16 -106 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +42 0 57 -15 0 -32 rrcurveto +closepath +endchar } ND +/afii62791 { +0 771 hsbw +143 133 hstem +373 131 hstem +0 449 vstem +737 69 vstem +806 143 rmoveto +0 187 rlineto +0 101 -38 73 -88 0 rrcurveto +-39 0 -30 -21 -46 -32 rrcurveto +-175 -125 rlineto +-58 -42 -18 -8 -32 0 rrcurveto +-32 0 -21 20 0 38 rrcurveto +0 80 rlineto +-29 5 rlineto +-12 -94 -32 -49 -86 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +61 0 30 20 37 54 rrcurveto +18 -52 26 -22 47 0 rrcurveto +517 0 rlineto +closepath +-69 183 rmoveto +0 -34 -54 -16 -106 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +42 0 57 -15 0 -32 rrcurveto +closepath +endchar } ND +/afii57430 { +0 1063 hsbw +-63 118 hstem +143 133 hstem +373 131 hstem +708 20 hstem +61 60 vstem +528 42 vstem +1028 64 vstem +839 667 rmoveto +-113 61 rlineto +-59 -110 rlineto +114 -60 rlineto +58 109 rlineto +closepath +253 -524 rmoveto +0 187 rlineto +0 100 -34 74 -88 0 rrcurveto +-44 0 -25 -18 -49 -35 rrcurveto +-175 -125 rlineto +-62 -44 -2 -6 -42 0 rrcurveto +0 82 -4 0 -52 100 rrcurveto +-43 -132 rlineto +46 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-120 0 -79 48 0 68 rrcurveto +0 52 12 34 66 110 rrcurveto +-30 21 rlineto +-74 -112 -34 -65 0 -108 rrcurveto +0 -106 88 -60 159 0 rrcurveto +165 0 97 51 0 155 rrcurveto +522 0 rlineto +closepath +-64 183 rmoveto +0 -34 -55 -16 -110 0 rrcurveto +-128 0 rlineto +102 73 45 24 43 0 rrcurveto +56 0 47 -23 0 -24 rrcurveto +closepath +endchar } ND +/afii62795 { +0 1063 hsbw +-63 118 hstem +143 133 hstem +373 131 hstem +708 20 hstem +61 60 vstem +528 42 vstem +1028 64 vstem +839 667 rmoveto +-113 61 rlineto +-59 -110 rlineto +114 -60 rlineto +58 109 rlineto +closepath +253 -524 rmoveto +0 187 rlineto +0 100 -34 74 -88 0 rrcurveto +-44 0 -25 -18 -49 -35 rrcurveto +-175 -125 rlineto +-62 -44 -2 -6 -42 0 rrcurveto +0 82 -4 0 -52 100 rrcurveto +-43 -132 rlineto +46 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-120 0 -79 48 0 68 rrcurveto +0 52 12 34 66 110 rrcurveto +-30 21 rlineto +-74 -112 -34 -65 0 -108 rrcurveto +0 -106 88 -60 159 0 rrcurveto +165 0 97 51 0 155 rrcurveto +522 0 rlineto +closepath +-64 183 rmoveto +0 -34 -55 -16 -110 0 rrcurveto +-128 0 rlineto +102 73 45 24 43 0 rrcurveto +56 0 47 -23 0 -24 rrcurveto +closepath +endchar } ND +/afii62793 { +0 771 hsbw +143 133 hstem +373 131 hstem +708 20 hstem +0 449 vstem +737 69 vstem +563 667 rmoveto +-114 61 rlineto +-59 -110 rlineto +114 -60 rlineto +59 109 rlineto +closepath +243 -524 rmoveto +0 187 rlineto +0 101 -38 73 -88 0 rrcurveto +-39 0 -30 -21 -46 -32 rrcurveto +-175 -125 rlineto +-58 -42 -18 -8 -32 0 rrcurveto +-32 0 -21 20 0 38 rrcurveto +0 80 rlineto +-29 5 rlineto +-12 -94 -32 -49 -86 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +61 0 30 20 37 54 rrcurveto +18 -52 26 -22 47 0 rrcurveto +517 0 rlineto +closepath +-69 183 rmoveto +0 -34 -54 -16 -106 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +42 0 57 -15 0 -32 rrcurveto +closepath +endchar } ND +/afii62794 { +0 771 hsbw +143 133 hstem +373 131 hstem +708 20 hstem +0 449 vstem +737 69 vstem +563 667 rmoveto +-114 61 rlineto +-59 -110 rlineto +114 -60 rlineto +59 109 rlineto +closepath +243 -524 rmoveto +0 187 rlineto +0 101 -38 73 -88 0 rrcurveto +-39 0 -30 -21 -46 -32 rrcurveto +-175 -125 rlineto +-58 -42 -18 -8 -32 0 rrcurveto +-32 0 -21 20 0 38 rrcurveto +0 80 rlineto +-29 5 rlineto +-12 -94 -32 -49 -86 0 rrcurveto +-70 0 rlineto +0 -133 rlineto +70 0 rlineto +61 0 30 20 37 54 rrcurveto +18 -52 26 -22 47 0 rrcurveto +517 0 rlineto +closepath +-69 183 rmoveto +0 -34 -54 -16 -106 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +42 0 57 -15 0 -32 rrcurveto +closepath +endchar } ND +/afii57431 { +0 523 hsbw +143 133 hstem +373 131 hstem +183 64 vstem +490 68 vstem +558 143 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii62798 { +0 523 hsbw +143 133 hstem +373 131 hstem +183 64 vstem +490 68 vstem +558 143 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii62796 { +0 523 hsbw +143 133 hstem +373 131 hstem +183 64 vstem +490 68 vstem +558 143 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii62797 { +0 523 hsbw +143 133 hstem +373 131 hstem +183 64 vstem +490 68 vstem +558 143 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii57432 { +0 523 hsbw +143 133 hstem +373 355 hstem +183 64 vstem +490 68 vstem +481 667 rmoveto +-113 61 rlineto +-59 -110 rlineto +114 -60 rlineto +58 109 rlineto +closepath +77 -524 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii62801 { +0 523 hsbw +143 133 hstem +373 355 hstem +183 64 vstem +490 68 vstem +481 667 rmoveto +-113 61 rlineto +-59 -110 rlineto +114 -60 rlineto +58 109 rlineto +closepath +77 -524 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii62799 { +0 523 hsbw +143 133 hstem +373 355 hstem +183 64 vstem +490 68 vstem +481 667 rmoveto +-113 61 rlineto +-59 -110 rlineto +114 -60 rlineto +58 109 rlineto +closepath +77 -524 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii62800 { +0 523 hsbw +143 133 hstem +373 355 hstem +183 64 vstem +490 68 vstem +481 667 rmoveto +-113 61 rlineto +-59 -110 rlineto +114 -60 rlineto +58 109 rlineto +closepath +77 -524 rmoveto +0 234 rlineto +0 80 -53 47 -79 0 rrcurveto +-32 0 -54 -35 -47 -32 rrcurveto +-10 -5 -9 -7 -7 -7 rrcurveto +-9 -7 -8 -6 -8 -6 rrcurveto +1 13 2 7 2 6 rrcurveto +0 27 rlineto +0 34 -6 35 -20 92 rrcurveto +18 -6 rlineto +6 11 3 10 2 10 rrcurveto +2 10 3 7 3 4 rrcurveto +7 21 5 24 4 26 rrcurveto +-50 17 -47 24 0 20 rrcurveto +0 13 rlineto +-20 9 rlineto +-28 -64 -5 -12 -14 -68 rrcurveto +28 -18 rlineto +16 -64 9 -35 2 -7 rrcurveto +12 -60 6 -48 0 -80 rrcurveto +-12 -8 -10 -8 -8 -8 rrcurveto +-30 -30 -47 -27 -11 0 rrcurveto +-65 0 rlineto +0 -133 rlineto +558 0 rlineto +closepath +-68 183 rmoveto +0 -34 -54 -16 -107 0 rrcurveto +-128 0 rlineto +101 73 45 24 43 0 rrcurveto +36 0 64 -25 0 -22 rrcurveto +closepath +endchar } ND +/afii57433 { +0 541 hsbw +-203 129 hstem +499 96 hstem +25 56 vstem +535 -89 rmoveto +-9 20 rlineto +-47 -5 -6 0 -37 0 rrcurveto +-12 0 rlineto +-182 0 -161 8 0 135 rrcurveto +0 96 124 90 198 47 rrcurveto +21 46 9 18 17 56 rrcurveto +-102 -23 -24 -8 -90 -38 rrcurveto +-57 23 -46 25 0 41 rrcurveto +0 36 90 21 135 0 rrcurveto +56 0 rlineto +-42 61 -62 35 -72 0 rrcurveto +-117 0 -67 -142 0 -65 rrcurveto +0 -31 29 -56 32 -37 rrcurveto +-64 -64 -24 -79 0 -96 rrcurveto +0 -149 94 -79 182 0 rrcurveto +50 0 rlineto +184 114 rlineto +closepath +endchar } ND +/afii62804 { +0 469 hsbw +-198 129 hstem +143 133 hstem +382 149 hstem +34 56 vstem +103 251 vstem +516 -89 rmoveto +0 20 rlineto +-109 0 rlineto +-219 0 -98 54 0 116 rrcurveto +0 64 40 65 74 48 rrcurveto +45 -95 51 -40 100 0 rrcurveto +103 0 rlineto +0 133 rlineto +-103 0 rlineto +-36 0 -42 20 -26 30 rrcurveto +34 16 24 40 0 41 rrcurveto +0 64 -53 44 -72 0 rrcurveto +-86 0 -40 -74 0 -88 rrcurveto +23 -5 rlineto +1 3 1 2 3 1 rrcurveto +3 1 2 3 1 3 rrcurveto +3 3 4 2 5 0 rrcurveto +14 0 9 -12 4 -24 rrcurveto +-98 -87 -44 -92 0 -118 rrcurveto +0 -170 90 -77 212 0 rrcurveto +180 109 rlineto +closepath +endchar } ND +/afii62802 { +0 541 hsbw +143 133 hstem +461 110 hstem +62 72 vstem +518 376 rmoveto +-248 -71 rlineto +-91 51 -45 37 0 23 rrcurveto +0 36 94 9 67 0 rrcurveto +44 0 22 -5 51 -18 rrcurveto +21 17 rlineto +-29 62 -70 54 -71 0 rrcurveto +-108 0 -93 -85 0 -96 rrcurveto +0 -39 7 -23 34 -49 rrcurveto +-10 -1 -11 -1 -8 -1 rrcurveto +-74 0 rlineto +0 -133 rlineto +44 0 rlineto +140 0 112 43 167 51 rrcurveto +55 139 rlineto +closepath +endchar } ND +/afii62803 { +0 360 hsbw +143 133 hstem +355 150 hstem +58 272 vstem +395 143 rmoveto +0 133 rlineto +-73 0 rlineto +-14 0 -18 8 -9 12 rrcurveto +38 52 11 23 0 34 rrcurveto +0 62 -56 38 -89 0 rrcurveto +-88 0 -39 -47 0 -117 rrcurveto +21 0 rlineto +8 13 5 1 8 0 rrcurveto +22 0 14 -24 16 -32 rrcurveto +-36 -20 -11 -3 -54 0 rrcurveto +-51 0 rlineto +0 -133 rlineto +51 0 rlineto +60 0 58 21 38 45 rrcurveto +24 -47 40 -19 51 0 rrcurveto +73 0 rlineto +closepath +endchar } ND +/afii57434 { +0 541 hsbw +-203 129 hstem +499 96 hstem +25 56 vstem +292 761 rmoveto +-113 61 rlineto +-59 -111 rlineto +114 -59 rlineto +58 109 rlineto +closepath +243 -850 rmoveto +-9 20 rlineto +-47 -5 -6 0 -37 0 rrcurveto +-12 0 rlineto +-182 0 -161 8 0 135 rrcurveto +0 96 124 90 198 47 rrcurveto +21 46 9 18 17 56 rrcurveto +-102 -23 -24 -8 -90 -38 rrcurveto +-57 23 -46 25 0 41 rrcurveto +0 36 90 21 135 0 rrcurveto +56 0 rlineto +-42 61 -62 35 -72 0 rrcurveto +-117 0 -67 -142 0 -65 rrcurveto +0 -31 29 -56 32 -37 rrcurveto +-64 -64 -24 -79 0 -96 rrcurveto +0 -149 94 -79 182 0 rrcurveto +50 0 rlineto +184 114 rlineto +closepath +endchar } ND +/afii62807 { +0 469 hsbw +-198 129 hstem +143 133 hstem +382 149 hstem +34 56 vstem +103 251 vstem +316 700 rmoveto +-113 60 rlineto +-60 -110 rlineto +114 -60 rlineto +59 110 rlineto +closepath +200 -789 rmoveto +0 20 rlineto +-109 0 rlineto +-219 0 -98 54 0 116 rrcurveto +0 64 40 65 74 48 rrcurveto +45 -95 51 -40 100 0 rrcurveto +103 0 rlineto +0 133 rlineto +-103 0 rlineto +-36 0 -42 20 -26 30 rrcurveto +34 16 24 40 0 41 rrcurveto +0 64 -53 44 -72 0 rrcurveto +-86 0 -40 -74 0 -88 rrcurveto +23 -5 rlineto +1 3 1 2 3 1 rrcurveto +3 1 2 3 1 3 rrcurveto +3 3 4 2 5 0 rrcurveto +14 0 9 -12 4 -24 rrcurveto +-98 -87 -44 -92 0 -118 rrcurveto +0 -170 90 -77 212 0 rrcurveto +180 109 rlineto +closepath +endchar } ND +/afii62805 { +0 541 hsbw +143 133 hstem +461 110 hstem +62 72 vstem +319 739 rmoveto +-111 61 rlineto +-62 -111 rlineto +114 -59 rlineto +59 109 rlineto +closepath +199 -363 rmoveto +-248 -71 rlineto +-91 51 -45 37 0 23 rrcurveto +0 36 94 9 67 0 rrcurveto +44 0 22 -5 51 -18 rrcurveto +21 17 rlineto +-29 62 -70 54 -71 0 rrcurveto +-108 0 -93 -85 0 -96 rrcurveto +0 -39 7 -23 34 -49 rrcurveto +-10 -1 -11 -1 -8 -1 rrcurveto +-74 0 rlineto +0 -133 rlineto +44 0 rlineto +140 0 112 43 167 51 rrcurveto +55 139 rlineto +closepath +endchar } ND +/afii62806 { +0 360 hsbw +143 133 hstem +355 150 hstem +58 272 vstem +269 695 rmoveto +-113 61 rlineto +-60 -110 rlineto +114 -60 rlineto +59 109 rlineto +closepath +126 -552 rmoveto +0 133 rlineto +-73 0 rlineto +-14 0 -18 8 -9 12 rrcurveto +38 52 11 23 0 34 rrcurveto +0 62 -56 38 -89 0 rrcurveto +-88 0 -39 -47 0 -117 rrcurveto +21 0 rlineto +8 13 5 1 8 0 rrcurveto +22 0 14 -24 16 -32 rrcurveto +-36 -20 -11 -3 -54 0 rrcurveto +-51 0 rlineto +0 -133 rlineto +51 0 rlineto +60 0 58 21 38 45 rrcurveto +24 -47 40 -19 51 0 rrcurveto +73 0 rlineto +closepath +endchar } ND +/afii57441 { +0 758 hsbw +127 141 hstem +416 133 hstem +57 58 vstem +552 83 vstem +716 76 vstem +754 719 rmoveto +-114 60 rlineto +-59 -110 rlineto +114 -60 rlineto +59 110 rlineto +closepath +38 -576 rmoveto +0 133 rlineto +0 139 0 134 -96 0 rrcurveto +-79 0 -65 -127 0 -87 rrcurveto +0 -31 8 -13 27 -13 rrcurveto +-43 0 -46 -1 -47 -2 rrcurveto +-44 -4 -50 -3 -51 0 rrcurveto +-112 0 -79 2 0 94 rrcurveto +0 26 11 40 24 56 rrcurveto +-32 15 rlineto +-52 -124 -9 -34 0 -73 rrcurveto +0 -112 71 -31 122 0 rrcurveto +5 0 49 2 58 3 rrcurveto +59 3 68 3 44 1 rrcurveto +36 1 34 1 32 1 rrcurveto +5 1 rlineto +152 0 rlineto +closepath +-76 195 rmoveto +-52 14 -29 17 0 22 rrcurveto +0 14 11 11 12 0 rrcurveto +24 0 11 -14 23 -64 rrcurveto +closepath +endchar } ND +/afii62810 { +0 758 hsbw +127 141 hstem +416 133 hstem +57 58 vstem +552 83 vstem +716 76 vstem +754 719 rmoveto +-114 60 rlineto +-59 -110 rlineto +114 -60 rlineto +59 110 rlineto +closepath +38 -576 rmoveto +0 133 rlineto +0 139 0 134 -96 0 rrcurveto +-79 0 -65 -127 0 -87 rrcurveto +0 -31 8 -13 27 -13 rrcurveto +-43 0 -46 -1 -47 -2 rrcurveto +-44 -4 -50 -3 -51 0 rrcurveto +-112 0 -79 2 0 94 rrcurveto +0 26 11 40 24 56 rrcurveto +-32 15 rlineto +-52 -124 -9 -34 0 -73 rrcurveto +0 -112 71 -31 122 0 rrcurveto +5 0 49 2 58 3 rrcurveto +59 3 68 3 44 1 rrcurveto +36 1 34 1 32 1 rrcurveto +5 1 rlineto +152 0 rlineto +closepath +-76 195 rmoveto +-52 14 -29 17 0 22 rrcurveto +0 14 11 11 12 0 rrcurveto +24 0 11 -14 23 -64 rrcurveto +closepath +endchar } ND +/afii62808 { +0 305 hsbw +143 133 hstem +322 120 hstem +513 124 hstem +83 67 vstem +293 46 vstem +268 789 rmoveto +-110 61 rlineto +-63 -111 rlineto +114 -59 rlineto +59 109 rlineto +closepath +71 -646 rmoveto +0 215 rlineto +0 133 -74 146 -68 0 rrcurveto +-59 0 -55 -153 0 -71 rrcurveto +0 -52 41 -39 52 0 rrcurveto +40 0 38 21 20 42 rrcurveto +16 -30 3 -27 0 -52 rrcurveto +-293 0 rlineto +0 -133 rlineto +339 0 rlineto +closepath +-106 329 rmoveto +-23 -22 -14 -8 -14 0 rrcurveto +-19 0 -13 12 0 15 rrcurveto +0 22 18 22 20 0 rrcurveto +16 0 11 -11 18 -30 rrcurveto +closepath +endchar } ND +/afii62809 { +0 324 hsbw +143 133 hstem +435 143 hstem +122 64 vstem +292 66 vstem +311 719 rmoveto +-114 60 rlineto +-59 -110 rlineto +114 -60 rlineto +59 110 rlineto +closepath +47 -576 rmoveto +0 144 rlineto +0 161 -57 130 -66 0 rrcurveto +-58 0 -55 -96 0 -101 rrcurveto +0 -68 33 -31 98 -21 rrcurveto +-23 2 -22 2 -20 3 rrcurveto +-34 4 -33 4 -33 0 rrcurveto +-88 0 rlineto +0 -133 rlineto +358 0 rlineto +closepath +-66 203 rmoveto +-58 9 -48 30 0 28 rrcurveto +0 12 10 10 14 0 rrcurveto +28 0 30 -33 24 -56 rrcurveto +closepath +endchar } ND +/afii57442 { +0 612 hsbw +-130 119 hstem +142 130 hstem +332 132 hstem +595 20 hstem +53 63 vstem +412 60 vstem +605 41 vstem +626 608 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +20 -478 rmoveto +0 86 rlineto +0 113 -27 135 -84 0 rrcurveto +-71 0 -52 -133 0 -87 rrcurveto +0 -66 42 -36 72 0 rrcurveto +16 0 26 1 34 3 rrcurveto +2 -12 1 -8 0 -9 rrcurveto +0 -67 -121 -61 -134 0 rrcurveto +-148 0 -86 47 0 79 rrcurveto +0 56 22 53 60 87 rrcurveto +-30 20 rlineto +-77 -108 -38 -66 0 -115 rrcurveto +0 -110 101 -62 180 0 rrcurveto +193 0 119 -27 0 287 rrcurveto +closepath +-88 146 rmoveto +-11 -1 -7 -1 -5 -2 rrcurveto +-22 0 rlineto +-28 0 -13 11 0 22 rrcurveto +0 16 9 11 18 0 rrcurveto +25 0 16 -15 18 -41 rrcurveto +closepath +endchar } ND +/afii62813 { +0 612 hsbw +-130 119 hstem +142 130 hstem +332 132 hstem +595 20 hstem +53 63 vstem +412 60 vstem +605 41 vstem +626 608 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 99 rlineto +closepath +20 -478 rmoveto +0 86 rlineto +0 113 -27 135 -84 0 rrcurveto +-71 0 -52 -133 0 -87 rrcurveto +0 -66 42 -36 72 0 rrcurveto +16 0 26 1 34 3 rrcurveto +2 -12 1 -8 0 -9 rrcurveto +0 -67 -121 -61 -134 0 rrcurveto +-148 0 -86 47 0 79 rrcurveto +0 56 22 53 60 87 rrcurveto +-30 20 rlineto +-77 -108 -38 -66 0 -115 rrcurveto +0 -110 101 -62 180 0 rrcurveto +193 0 119 -27 0 287 rrcurveto +closepath +-88 146 rmoveto +-11 -1 -7 -1 -5 -2 rrcurveto +-22 0 rlineto +-28 0 -13 11 0 22 rrcurveto +0 16 9 11 18 0 rrcurveto +25 0 16 -15 18 -41 rrcurveto +closepath +endchar } ND +/afii62811 { +0 305 hsbw +143 133 hstem +322 120 hstem +513 124 hstem +83 67 vstem +293 46 vstem +283 794 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -50 rlineto +39 77 rlineto +69 -39 rlineto +54 100 rlineto +closepath +56 -651 rmoveto +0 215 rlineto +0 133 -74 146 -68 0 rrcurveto +-59 0 -55 -153 0 -71 rrcurveto +0 -52 41 -39 52 0 rrcurveto +40 0 38 21 20 42 rrcurveto +16 -30 3 -27 0 -52 rrcurveto +-293 0 rlineto +0 -133 rlineto +339 0 rlineto +closepath +-106 329 rmoveto +-23 -22 -14 -8 -14 0 rrcurveto +-19 0 -13 12 0 15 rrcurveto +0 22 18 22 20 0 rrcurveto +16 0 11 -11 18 -30 rrcurveto +closepath +endchar } ND +/afii62812 { +0 324 hsbw +143 133 hstem +435 143 hstem +122 64 vstem +292 66 vstem +297 730 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -94 rlineto +91 -50 rlineto +39 77 rlineto +70 -39 rlineto +53 99 rlineto +closepath +61 -587 rmoveto +0 144 rlineto +0 161 -57 130 -66 0 rrcurveto +-58 0 -55 -96 0 -101 rrcurveto +0 -68 33 -31 98 -21 rrcurveto +-23 2 -22 2 -20 3 rrcurveto +-34 4 -33 4 -33 0 rrcurveto +-88 0 rlineto +0 -133 rlineto +358 0 rlineto +closepath +-66 203 rmoveto +-58 9 -48 30 0 28 rrcurveto +0 12 10 10 14 0 rrcurveto +28 0 30 -33 24 -56 rrcurveto +closepath +endchar } ND +/afii57443 { +0 541 hsbw +143 133 hstem +369 38 hstem +616 81 hstem +54 61 vstem +338 70 vstem +517 58 vstem +408 507 rmoveto +0 38 -15 16 -40 0 rrcurveto +-22 2 -11 5 0 7 rrcurveto +0 16 34 18 27 7 rrcurveto +0 81 rlineto +-100 -32 -14 -97 0 -61 rrcurveto +0 -28 15 -13 32 0 rrcurveto +20 -3 4 -2 0 -9 rrcurveto +0 -24 -65 -21 -65 0 rrcurveto +-8 0 rlineto +-6 -31 rlineto +34 -7 8 0 26 0 rrcurveto +92 0 54 51 0 87 rrcurveto +closepath +167 -364 rmoveto +0 133 rlineto +-53 302 rlineto +18 -7 rlineto +13 32 12 40 7 43 rrcurveto +-43 15 -35 17 0 29 rrcurveto +0 16 rlineto +-21 11 rlineto +-29 -55 -18 -41 0 -50 rrcurveto +32 -21 rlineto +59 -331 rlineto +-235 0 rlineto +-131 0 -36 19 0 62 rrcurveto +0 28 4 17 26 50 rrcurveto +-29 21 rlineto +-46 -82 -16 -51 0 -61 rrcurveto +0 -111 74 -25 120 0 rrcurveto +327 0 rlineto +closepath +endchar } ND +/afii62816 { +0 541 hsbw +143 133 hstem +369 38 hstem +616 81 hstem +54 61 vstem +338 70 vstem +517 58 vstem +408 507 rmoveto +0 38 -15 16 -40 0 rrcurveto +-22 2 -11 5 0 7 rrcurveto +0 16 34 18 27 7 rrcurveto +0 81 rlineto +-100 -32 -14 -97 0 -61 rrcurveto +0 -28 15 -13 32 0 rrcurveto +20 -3 4 -2 0 -9 rrcurveto +0 -24 -65 -21 -65 0 rrcurveto +-8 0 rlineto +-6 -31 rlineto +34 -7 8 0 26 0 rrcurveto +92 0 54 51 0 87 rrcurveto +closepath +167 -364 rmoveto +0 133 rlineto +-53 302 rlineto +18 -7 rlineto +13 32 12 40 7 43 rrcurveto +-43 15 -35 17 0 29 rrcurveto +0 16 rlineto +-21 11 rlineto +-29 -55 -18 -41 0 -50 rrcurveto +32 -21 rlineto +59 -331 rlineto +-235 0 rlineto +-131 0 -36 19 0 62 rrcurveto +0 28 4 17 26 50 rrcurveto +-29 21 rlineto +-46 -82 -16 -51 0 -61 rrcurveto +0 -111 74 -25 120 0 rrcurveto +327 0 rlineto +closepath +endchar } ND +/afii57410 { +0 360 hsbw +143 133 hstem +592 116 hstem +93 101 vstem +317 78 vstem +395 143 rmoveto +0 136 rlineto +-40 73 -54 66 -72 71 rrcurveto +-24 22 -11 12 0 4 rrcurveto +0 12 65 25 52 15 rrcurveto +14 3 10 3 6 4 rrcurveto +6 2 4 1 1 0 rrcurveto +0 116 rlineto +-180 -63 -79 15 0 -169 rrcurveto +0 -49 20 -12 56 -55 rrcurveto +16 17 rlineto +10 -6 9 -7 9 -8 rrcurveto +9 -8 9 -7 9 -7 rrcurveto +7 -8 8 -6 7 -4 rrcurveto +27 -16 12 -16 16 -23 rrcurveto +-317 0 rlineto +0 -133 rlineto +395 0 rlineto +closepath +endchar } ND +/afii62815 { +0 360 hsbw +143 133 hstem +592 116 hstem +93 101 vstem +317 78 vstem +395 143 rmoveto +0 136 rlineto +-40 73 -54 66 -72 71 rrcurveto +-24 22 -11 12 0 4 rrcurveto +0 12 65 25 52 15 rrcurveto +14 3 10 3 6 4 rrcurveto +6 2 4 1 1 0 rrcurveto +0 116 rlineto +-180 -63 -79 15 0 -169 rrcurveto +0 -49 20 -12 56 -55 rrcurveto +16 17 rlineto +10 -6 9 -7 9 -8 rrcurveto +9 -8 9 -7 9 -7 rrcurveto +7 -8 8 -6 7 -4 rrcurveto +27 -16 12 -16 16 -23 rrcurveto +-317 0 rlineto +0 -133 rlineto +395 0 rlineto +closepath +endchar } ND +/afii57444 { +0 451 hsbw +-36 134 hstem +51 56 vstem +426 59 vstem +485 155 rmoveto +0 110 rlineto +0 6 -1 10 -2 16 rrcurveto +-4 15 -3 22 -3 27 rrcurveto +-14 73 -24 131 0 10 rrcurveto +15 -6 rlineto +22 48 4 11 7 56 rrcurveto +-18 10 -18 10 -20 11 rrcurveto +-14 8 -6 11 0 13 rrcurveto +0 16 rlineto +-21 10 rlineto +-30 -66 -15 -48 0 -32 rrcurveto +25 -18 rlineto +6 -40 7 -38 8 -38 rrcurveto +14 -82 26 -124 0 -46 rrcurveto +0 -23 rlineto +0 -72 -79 -48 -114 0 rrcurveto +-80 0 -46 33 0 59 rrcurveto +0 56 19 51 51 76 rrcurveto +-30 21 rlineto +-69 -102 -27 -59 0 -109 rrcurveto +0 -102 67 -58 111 0 rrcurveto +133 0 123 91 0 100 rrcurveto +closepath +endchar } ND +/afii62819 { +0 451 hsbw +-36 134 hstem +51 56 vstem +426 59 vstem +485 155 rmoveto +0 110 rlineto +0 6 -1 10 -2 16 rrcurveto +-4 15 -3 22 -3 27 rrcurveto +-14 73 -24 131 0 10 rrcurveto +15 -6 rlineto +22 48 4 11 7 56 rrcurveto +-18 10 -18 10 -20 11 rrcurveto +-14 8 -6 11 0 13 rrcurveto +0 16 rlineto +-21 10 rlineto +-30 -66 -15 -48 0 -32 rrcurveto +25 -18 rlineto +6 -40 7 -38 8 -38 rrcurveto +14 -82 26 -124 0 -46 rrcurveto +0 -23 rlineto +0 -72 -79 -48 -114 0 rrcurveto +-80 0 -46 33 0 59 rrcurveto +0 56 19 51 51 76 rrcurveto +-30 21 rlineto +-69 -102 -27 -59 0 -109 rrcurveto +0 -102 67 -58 111 0 rrcurveto +133 0 123 91 0 100 rrcurveto +closepath +endchar } ND +/afii62817 { +0 234 hsbw +143 133 hstem +210 59 vstem +269 143 rmoveto +0 133 rlineto +-54 302 rlineto +18 -7 rlineto +14 32 12 40 6 43 rrcurveto +-42 15 -36 18 0 28 rrcurveto +0 16 rlineto +-20 11 rlineto +-29 -55 -18 -41 0 -50 rrcurveto +31 -21 rlineto +59 -331 rlineto +-210 0 rlineto +0 -133 rlineto +269 0 rlineto +closepath +endchar } ND +/afii62818 { +0 234 hsbw +143 133 hstem +210 59 vstem +269 143 rmoveto +0 133 rlineto +-54 302 rlineto +18 -7 rlineto +14 32 12 40 6 43 rrcurveto +-42 15 -36 18 0 28 rrcurveto +0 16 rlineto +-20 11 rlineto +-29 -55 -18 -41 0 -50 rrcurveto +31 -21 rlineto +59 -331 rlineto +-210 0 rlineto +0 -133 rlineto +269 0 rlineto +closepath +endchar } ND +/afii57445 { +0 360 hsbw +143 288 hstem +50 54 vstem +259 136 vstem +395 143 rmoveto +0 133 rlineto +-71 105 -51 50 -44 0 rrcurveto +-51 0 -43 -56 -28 -100 rrcurveto +23 -11 rlineto +34 44 9 8 18 0 rrcurveto +19 0 23 -18 26 -36 rrcurveto +-169 -19 -40 -72 0 -77 rrcurveto +0 -22 26 -74 11 -36 rrcurveto +6 -16 4 -13 1 -10 rrcurveto +13 -45 7 -46 4 -44 rrcurveto +24 32 7 23 0 44 rrcurveto +0 31 -6 32 -9 34 rrcurveto +-11 32 -12 37 -11 41 rrcurveto +0 25 108 24 119 0 rrcurveto +64 0 rlineto +closepath +endchar } ND +/afii62822 { +0 360 hsbw +143 288 hstem +50 54 vstem +259 136 vstem +395 143 rmoveto +0 133 rlineto +-71 105 -51 50 -44 0 rrcurveto +-51 0 -43 -56 -28 -100 rrcurveto +23 -11 rlineto +34 44 9 8 18 0 rrcurveto +19 0 23 -18 26 -36 rrcurveto +-169 -19 -40 -72 0 -77 rrcurveto +0 -22 26 -74 11 -36 rrcurveto +6 -16 4 -13 1 -10 rrcurveto +13 -45 7 -46 4 -44 rrcurveto +24 32 7 23 0 44 rrcurveto +0 31 -6 32 -9 34 rrcurveto +-11 32 -12 37 -11 41 rrcurveto +0 25 108 24 119 0 rrcurveto +64 0 rlineto +closepath +endchar } ND +/afii62820 { +0 415 hsbw +143 133 hstem +357 115 hstem +358 91 vstem +449 144 rmoveto +0 106 rlineto +0 72 -60 150 -40 0 rrcurveto +-48 0 -60 -72 -29 -66 rrcurveto +-16 -47 -43 -11 -56 0 rrcurveto +-97 0 rlineto +0 -133 rlineto +97 0 rlineto +58 0 37 18 29 44 rrcurveto +63 -33 100 -28 65 0 rrcurveto +closepath +-91 147 rmoveto +0 -5 -4 -2 -7 0 rrcurveto +-4 0 -14 5 -26 10 rrcurveto +-5 1 -6 2 -5 3 rrcurveto +-6 3 -7 3 -10 2 rrcurveto +8 29 11 15 13 0 rrcurveto +19 0 43 -51 0 -15 rrcurveto +closepath +endchar } ND +/afii62821 { +0 415 hsbw +143 133 hstem +357 115 hstem +358 91 vstem +449 144 rmoveto +0 106 rlineto +0 72 -60 150 -40 0 rrcurveto +-48 0 -60 -72 -29 -66 rrcurveto +-16 -47 -43 -11 -56 0 rrcurveto +-97 0 rlineto +0 -133 rlineto +97 0 rlineto +58 0 37 18 29 44 rrcurveto +63 -33 100 -28 65 0 rrcurveto +closepath +-91 147 rmoveto +0 -5 -4 -2 -7 0 rrcurveto +-4 0 -14 5 -26 10 rrcurveto +-5 1 -6 2 -5 3 rrcurveto +-6 3 -7 3 -10 2 rrcurveto +8 29 11 15 13 0 rrcurveto +19 0 43 -51 0 -15 rrcurveto +closepath +endchar } ND +/afii57446 { +0 541 hsbw +-63 118 hstem +592 20 hstem +64 60 vstem +531 44 vstem +415 551 rmoveto +-114 61 rlineto +-59 -111 rlineto +114 -59 rlineto +59 109 rlineto +closepath +160 -384 rmoveto +0 98 rlineto +0 79 -9 25 -47 89 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +134 0 129 63 0 167 rrcurveto +closepath +endchar } ND +/afii62825 { +0 541 hsbw +-63 118 hstem +592 20 hstem +64 60 vstem +531 44 vstem +415 551 rmoveto +-114 61 rlineto +-59 -111 rlineto +114 -59 rlineto +59 109 rlineto +closepath +160 -384 rmoveto +0 98 rlineto +0 79 -9 25 -47 89 rrcurveto +-43 -132 rlineto +45 -87 10 -28 0 -40 rrcurveto +0 -66 -91 -50 -117 0 rrcurveto +-119 0 -80 48 0 68 rrcurveto +0 52 14 34 64 110 rrcurveto +-29 21 rlineto +-74 -111 -35 -66 0 -108 rrcurveto +0 -106 89 -60 159 0 rrcurveto +134 0 129 63 0 167 rrcurveto +closepath +endchar } ND +/afii62823 { +0 271 hsbw +143 133 hstem +257 49 vstem +309 675 rmoveto +-114 60 rlineto +-59 -110 rlineto +114 -60 rlineto +59 110 rlineto +closepath +-3 -532 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +endchar } ND +/afii62824 { +0 271 hsbw +143 133 hstem +257 49 vstem +309 675 rmoveto +-114 60 rlineto +-59 -110 rlineto +114 -60 rlineto +59 110 rlineto +closepath +-3 -532 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +endchar } ND +/afii57447 { +0 343 hsbw +126 130 hstem +499 20 hstem +43 57 vstem +231 73 vstem +304 326 rmoveto +0 78 -69 47 -61 39 rrcurveto +-48 29 rlineto +-15 -30 -23 -49 -10 -30 rrcurveto +18 -12 rlineto +-40 -78 -13 -44 0 -53 rrcurveto +0 -59 32 -38 51 0 rrcurveto +89 0 89 93 0 107 rrcurveto +closepath +-73 -39 rmoveto +0 -11 -55 -20 -32 0 rrcurveto +-26 0 -18 16 0 22 rrcurveto +0 22 10 27 21 33 rrcurveto +44 -28 56 -49 0 -12 rrcurveto +closepath +endchar } ND +/afii62828 { +0 415 hsbw +143 133 hstem +445 143 rmoveto +0 133 rlineto +-64 0 rlineto +-52 0 1 50 -11 64 rrcurveto +-47 304 rlineto +-30 -55 -9 -36 0 -25 rrcurveto +0 -8 1 -10 2 -9 rrcurveto +-26 -15 rlineto +-115 -70 -64 -139 0 -28 rrcurveto +0 -12 5 -2 51 -10 rrcurveto +59 -11 rlineto +10 -2 8 -1 6 0 rrcurveto +29 0 30 37 38 46 rrcurveto +6 -103 18 -98 90 0 rrcurveto +64 0 rlineto +closepath +-190 276 rmoveto +-30 -22 -12 -6 -14 0 rrcurveto +-22 0 -29 4 0 10 rrcurveto +0 19 40 24 33 18 rrcurveto +5 2 8 4 11 6 rrcurveto +10 -59 rlineto +closepath +endchar } ND +/afii57470 { +0 469 hsbw +143 133 hstem +102 61 vstem +375 58 vstem +433 247 rmoveto +0 107 -131 187 -123 86 rrcurveto +-18 -56 -4 -17 -8 -53 rrcurveto +24 -18 rlineto +-52 -32 -19 -69 0 -73 rrcurveto +0 -18 rlineto +-14 -8 -24 -7 -20 0 rrcurveto +-44 0 rlineto +0 -133 rlineto +44 0 rlineto +54 0 59 17 39 36 rrcurveto +60 -39 84 -40 38 0 rrcurveto +31 0 24 86 0 44 rrcurveto +closepath +-193 113 rmoveto +0 -8 -6 -8 -10 -7 rrcurveto +-2 -1 -2 -1 -3 -2 rrcurveto +-1 -2 -3 -1 -5 -1 rrcurveto +-30 14 -15 13 0 13 rrcurveto +0 20 25 24 25 0 rrcurveto +17 0 10 -20 0 -33 rrcurveto +closepath +135 -90 rmoveto +0 -6 -3 -2 -6 0 rrcurveto +-18 0 -31 11 -42 24 rrcurveto +21 37 2 8 4 31 rrcurveto +41 -39 32 -46 0 -18 rrcurveto +closepath +endchar } ND +/afii62827 { +0 451 hsbw +-101 129 hstem +135 6 hstem +143 133 hstem +416 144 hstem +307 73 vstem +485 143 rmoveto +0 133 rlineto +-99 0 rlineto +-34 0 -39 -3 -46 -6 rrcurveto +63 25 32 62 0 74 rrcurveto +0 48 -22 84 -36 0 rrcurveto +-74 0 -39 -133 -50 -137 rrcurveto +-9 -2 -14 -3 -20 -4 rrcurveto +-19 -4 -18 -1 -17 0 rrcurveto +-44 0 rlineto +0 -133 rlineto +111 0 rlineto +0 -135 75 -109 91 0 rrcurveto +58 0 45 118 0 71 rrcurveto +0 13 -6 11 -11 9 rrcurveto +-12 6 -11 6 -12 8 rrcurveto +5 2 rlineto +152 0 rlineto +closepath +-199 223 rmoveto +0 -23 -24 -16 -74 -25 rrcurveto +30 78 22 36 18 0 rrcurveto +13 0 15 -33 0 -17 rrcurveto +closepath +21 -327 rmoveto +0 -8 -5 -3 -10 0 rrcurveto +-58 0 -57 49 -10 58 rrcurveto +71 -15 69 -30 0 -51 rrcurveto +closepath +endchar } ND +/afii57448 { +0 451 hsbw +-71 99 hstem +155 121 hstem +354 130 hstem +274 64 vstem +427 58 vstem +485 177 rmoveto +0 126 rlineto +0 100 -41 81 -52 0 rrcurveto +-72 0 -46 -128 0 -86 rrcurveto +0 -74 42 -44 64 0 rrcurveto +9 0 11 1 14 2 rrcurveto +-66 -76 -62 -51 -79 0 rrcurveto +-61 0 -32 18 -56 39 rrcurveto +-21 -28 rlineto +133 -102 49 -26 54 0 rrcurveto +93 0 119 136 0 112 rrcurveto +closepath +-58 99 rmoveto +-19 0 rlineto +-43 0 -27 17 0 23 rrcurveto +0 20 13 18 20 0 rrcurveto +28 0 18 -26 10 -52 rrcurveto +closepath +endchar } ND +/afii62829 { +0 451 hsbw +-71 99 hstem +155 121 hstem +354 130 hstem +274 64 vstem +427 58 vstem +485 177 rmoveto +0 126 rlineto +0 100 -41 81 -52 0 rrcurveto +-72 0 -46 -128 0 -86 rrcurveto +0 -74 42 -44 64 0 rrcurveto +9 0 11 1 14 2 rrcurveto +-66 -76 -62 -51 -79 0 rrcurveto +-61 0 -32 18 -56 39 rrcurveto +-21 -28 rlineto +133 -102 49 -26 54 0 rrcurveto +93 0 119 136 0 112 rrcurveto +closepath +-58 99 rmoveto +-19 0 rlineto +-43 0 -27 17 0 23 rrcurveto +0 20 13 18 20 0 rrcurveto +28 0 18 -26 10 -52 rrcurveto +closepath +endchar } ND +/afii57449 { +0 645 hsbw +-60 107 146 101 346 107 hstem3 +74 48 vstem +320 59 vstem +498 56 vstem +575 381 rmoveto +0 48 -24 32 -38 0 rrcurveto +-80 0 -113 -160 0 -68 rrcurveto +0 -80 39 -7 82 0 rrcurveto +13 0 44 -1 0 -6 rrcurveto +0 -56 -169 -36 -103 0 rrcurveto +-70 0 -34 30 0 62 rrcurveto +0 48 24 62 48 82 rrcurveto +-23 15 rlineto +-70 -109 -27 -50 0 -111 rrcurveto +0 -90 50 -46 102 0 rrcurveto +134 0 194 99 0 162 rrcurveto +0 49 -31 -3 -55 0 rrcurveto +-29 0 rlineto +-31 0 -29 -1 0 19 rrcurveto +0 28 84 53 35 0 rrcurveto +22 0 8 -10 18 -46 rrcurveto +24 38 5 17 0 36 rrcurveto +closepath +endchar } ND +/afii62830 { +0 554 hsbw +-174 123 hstem +143 133 hstem +15 57 vstem +471 59 vstem +588 143 rmoveto +0 133 rlineto +-79 0 rlineto +-83 0 -113 -102 0 -96 rrcurveto +0 -19 12 -3 70 0 rrcurveto +28 0 48 -1 0 -6 rrcurveto +0 -35 -194 -65 -96 0 rrcurveto +-68 0 -41 37 0 60 rrcurveto +0 60 18 52 62 104 rrcurveto +-27 20 rlineto +-77 -124 -33 -62 0 -126 rrcurveto +0 -94 54 -50 106 0 rrcurveto +154 0 201 135 0 130 rrcurveto +0 13 -12 9 -12 6 rrcurveto +-14 5 -10 6 0 2 rrcurveto +0 6 16 5 24 0 rrcurveto +66 0 rlineto +closepath +endchar } ND +/afii57450 { +0 645 hsbw +-60 107 146 101 346 107 hstem3 +74 48 vstem +320 59 vstem +498 56 vstem +575 381 rmoveto +0 48 -24 32 -38 0 rrcurveto +-80 0 -113 -160 0 -68 rrcurveto +0 -80 39 -7 82 0 rrcurveto +13 0 44 -1 0 -6 rrcurveto +0 -56 -169 -36 -103 0 rrcurveto +-70 0 -34 30 0 62 rrcurveto +0 48 24 62 48 82 rrcurveto +-23 15 rlineto +-70 -109 -27 -50 0 -111 rrcurveto +0 -90 50 -46 102 0 rrcurveto +134 0 194 99 0 162 rrcurveto +0 49 -31 -3 -55 0 rrcurveto +-29 0 rlineto +-31 0 -29 -1 0 19 rrcurveto +0 28 84 53 35 0 rrcurveto +22 0 8 -10 18 -46 rrcurveto +24 38 5 17 0 36 rrcurveto +closepath +-130 -483 rmoveto +-76 39 rlineto +-36 -62 rlineto +-73 38 rlineto +-37 -67 rlineto +75 -40 rlineto +36 64 rlineto +75 -38 rlineto +36 66 rlineto +closepath +endchar } ND +/afii62833 { +0 577 hsbw +-203 20 hstem +-171 18 hstem +-98 117 hstem +143 133 hstem +23 76 vstem +488 60 vstem +607 143 rmoveto +0 133 rlineto +-68 0 rlineto +-75 0 -78 -36 -23 -54 rrcurveto +-3 -7 -3 -7 -3 -6 rrcurveto +-11 -22 -12 -27 0 -12 rrcurveto +0 -16 18 -8 38 0 rrcurveto +50 0 51 -8 0 -8 rrcurveto +0 -16 -151 -30 -62 0 rrcurveto +-120 0 -56 32 0 70 rrcurveto +0 50 22 45 68 83 rrcurveto +-29 20 rlineto +-86 -106 -51 -65 0 -108 rrcurveto +0 -81 83 -57 123 0 rrcurveto +134 0 185 72 0 126 rrcurveto +0 14 -6 7 -15 3 rrcurveto +-8 2 -9 4 -9 6 rrcurveto +0 6 11 1 30 0 rrcurveto +65 0 rlineto +closepath +-217 -291 rmoveto +-62 39 rlineto +-38 -44 rlineto +-54 34 rlineto +-46 -59 rlineto +62 -34 rlineto +38 41 rlineto +52 -32 rlineto +48 55 rlineto +closepath +endchar } ND +/afii62831 { +0 271 hsbw +-3 20 hstem +143 133 hstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-8 -86 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -50 rlineto +39 78 rlineto +69 -39 rlineto +54 99 rlineto +closepath +endchar } ND +/afii62832 { +0 271 hsbw +-3 20 hstem +143 133 hstem +257 49 vstem +306 143 rmoveto +0 128 rlineto +0 118 -15 48 -49 55 rrcurveto +-39 -116 rlineto +36 -44 11 -14 7 -42 rrcurveto +-257 0 rlineto +0 -133 rlineto +306 0 rlineto +closepath +-8 -86 rmoveto +-89 50 rlineto +-41 -79 rlineto +-72 36 rlineto +-51 -95 rlineto +91 -50 rlineto +39 78 rlineto +69 -39 rlineto +54 99 rlineto +closepath +endchar } ND +/afii62834 { +0 541 hsbw +72 145 hstem +765 37 hstem +0 24 vstem +415 55 vstem +525 662 rmoveto +-68 21 -24 -10 0 59 rrcurveto +-21 7 rlineto +-20 -44 -7 -39 0 -40 rrcurveto +0 -18 6 -10 24 -10 rrcurveto +0 -79 -9 -70 -26 -50 rrcurveto +-16 24 -14 21 -12 17 rrcurveto +-13 16 -9 13 -6 11 rrcurveto +-60 81 -123 135 -39 0 rrcurveto +-14 0 -3 -11 0 -36 rrcurveto +0 -105 78 -99 42 0 rrcurveto +5 0 3 5 11 22 rrcurveto +55 -56 19 -23 60 -75 rrcurveto +-46 -56 -15 -13 -65 -33 rrcurveto +0 -145 rlineto +114 0 41 7 74 35 rrcurveto +2 30 3 24 3 15 rrcurveto +0 46 rlineto +0 12 -3 14 -9 15 rrcurveto +-2 2 -4 6 -4 10 rrcurveto +-4 10 -7 13 -10 15 rrcurveto +40 74 18 76 0 78 rrcurveto +35 -14 rlineto +3 14 3 11 3 7 rrcurveto +3 8 2 7 0 6 rrcurveto +4 22 2 24 0 23 rrcurveto +closepath +-128 -425 rmoveto +-36 -20 -11 -3 -49 -5 rrcurveto +38 26 7 7 28 31 rrcurveto +23 -36 rlineto +closepath +-159 572 rmoveto +-9 7 rlineto +-30 -12 -8 -2 -20 0 rrcurveto +-22 0 -22 5 -27 11 rrcurveto +-20 8 -17 5 -11 0 rrcurveto +-20 0 -18 -13 -14 -25 rrcurveto +7 -7 rlineto +8 1 6 4 3 2 rrcurveto +11 0 rlineto +10 0 13 -3 19 -9 rrcurveto +28 -13 20 -3 22 0 rrcurveto +40 0 23 12 28 32 rrcurveto +closepath +endchar } ND +/afii62835 { +0 596 hsbw +95 31 hstem +143 133 hstem +765 37 hstem +0 24 vstem +473 157 vstem +404 388 rmoveto +0 115 -232 192 -74 0 rrcurveto +-13 0 -6 -12 0 -23 rrcurveto +0 -69 99 -130 42 0 rrcurveto +12 0 6 12 0 28 rrcurveto +64 -34 43 -53 39 -86 rrcurveto +16 26 4 14 0 20 rrcurveto +closepath +226 -245 rmoveto +0 133 rlineto +-70 0 rlineto +-60 0 17 176 -3 95 rrcurveto +-5 90 -11 73 -17 56 rrcurveto +-38 -68 -18 -45 0 -22 rrcurveto +0 -30 9 -28 5 -28 rrcurveto +4 -29 3 -29 0 -30 rrcurveto +0 -207 -178 -57 -201 -67 rrcurveto +0 -31 rlineto +57 0 rlineto +195 0 94 43 60 178 rrcurveto +0 -75 34 -98 53 0 rrcurveto +70 0 rlineto +closepath +-392 666 rmoveto +-9 7 rlineto +-30 -12 -8 -2 -20 0 rrcurveto +-22 0 -22 5 -27 11 rrcurveto +-20 8 -17 5 -11 0 rrcurveto +-20 0 -18 -13 -14 -25 rrcurveto +7 -7 rlineto +8 1 6 4 3 2 rrcurveto +11 0 rlineto +10 0 13 -3 19 -9 rrcurveto +28 -13 20 -3 22 0 rrcurveto +40 0 23 12 28 32 rrcurveto +closepath +endchar } ND +/afii62836 { +0 486 hsbw +72 145 hstem +446 345 hstem +836 40 hstem +46 25 vstem +360 55 vstem +471 662 rmoveto +-70 21 -23 -9 0 58 rrcurveto +-21 7 rlineto +-19 -44 -8 -39 0 -40 rrcurveto +0 -18 7 -10 23 -10 rrcurveto +0 -79 -9 -70 -26 -50 rrcurveto +-16 24 -14 21 -12 17 rrcurveto +-13 16 -9 13 -6 11 rrcurveto +-60 81 -123 135 -39 0 rrcurveto +-14 0 -2 -11 0 -36 rrcurveto +0 -105 78 -99 42 0 rrcurveto +4 0 3 5 11 22 rrcurveto +58 -56 16 -23 60 -75 rrcurveto +-46 -56 -15 -13 -65 -33 rrcurveto +0 -145 rlineto +116 0 39 7 75 35 rrcurveto +1 30 3 24 3 15 rrcurveto +0 46 rlineto +0 12 -4 13 -7 16 rrcurveto +-3 2 -3 6 -5 10 rrcurveto +-4 10 -7 13 -10 15 rrcurveto +41 74 17 76 0 78 rrcurveto +35 -14 rlineto +3 14 3 11 3 7 rrcurveto +3 8 2 7 0 6 rrcurveto +4 22 3 24 0 23 rrcurveto +closepath +-128 -425 rmoveto +-38 -20 -10 -3 -49 -5 rrcurveto +38 26 7 7 28 31 rrcurveto +24 -36 rlineto +closepath +-179 561 rmoveto +-20 -5 -12 -2 -4 0 rrcurveto +-14 0 -43 23 0 10 rrcurveto +6 6 14 6 9 0 rrcurveto +5 0 11 -4 17 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-32 0 -46 -43 0 -30 rrcurveto +0 -10 8 -9 18 -12 rrcurveto +-24 -10 -5 -4 -13 -24 rrcurveto +105 33 rlineto +16 4 7 11 6 16 rrcurveto +closepath +endchar } ND +/afii62837 { +0 541 hsbw +95 31 hstem +143 133 hstem +461 330 hstem +836 40 hstem +46 25 vstem +418 157 vstem +350 388 rmoveto +0 115 -231 192 -76 0 rrcurveto +-13 0 -6 -12 0 -23 rrcurveto +0 -69 99 -130 42 0 rrcurveto +12 0 7 12 0 28 rrcurveto +62 -34 44 -53 39 -86 rrcurveto +16 26 5 14 0 20 rrcurveto +closepath +225 -245 rmoveto +0 133 rlineto +-70 0 rlineto +-60 0 17 176 -3 95 rrcurveto +-5 90 -11 73 -16 56 rrcurveto +-38 -68 -19 -45 0 -22 rrcurveto +0 -30 9 -28 5 -28 rrcurveto +5 -29 3 -29 0 -30 rrcurveto +0 -157 -82 -40 -176 -89 rrcurveto +-12 -6 -17 -7 -23 -8 rrcurveto +-22 -6 -25 -9 -22 -9 rrcurveto +0 -31 rlineto +56 0 rlineto +195 0 94 43 60 178 rrcurveto +0 -75 36 -98 51 0 rrcurveto +70 0 rlineto +closepath +-411 655 rmoveto +-20 -5 -12 -2 -4 0 rrcurveto +-14 0 -43 23 0 10 rrcurveto +6 6 14 6 9 0 rrcurveto +5 0 11 -4 17 -8 rrcurveto +9 14 2 5 0 11 rrcurveto +0 13 -8 9 -12 0 rrcurveto +-32 0 -46 -43 0 -30 rrcurveto +0 -10 8 -9 18 -12 rrcurveto +-24 -10 -5 -4 -13 -24 rrcurveto +105 33 rlineto +16 4 7 11 6 16 rrcurveto +closepath +endchar } ND +/afii62838 { +0 486 hsbw +-19 40 hstem +72 145 hstem +209 25 vstem +360 55 vstem +471 662 rmoveto +-70 21 -23 -9 0 58 rrcurveto +-21 7 rlineto +-19 -44 -8 -39 0 -40 rrcurveto +0 -18 7 -10 23 -10 rrcurveto +0 -79 -9 -70 -26 -50 rrcurveto +-16 24 -14 21 -12 17 rrcurveto +-13 16 -9 13 -6 11 rrcurveto +-60 81 -123 135 -39 0 rrcurveto +-14 0 -2 -11 0 -36 rrcurveto +0 -105 78 -99 42 0 rrcurveto +4 0 3 5 11 22 rrcurveto +58 -56 16 -23 60 -75 rrcurveto +-46 -56 -15 -13 -65 -33 rrcurveto +0 -145 rlineto +116 0 39 7 75 35 rrcurveto +1 30 3 24 3 15 rrcurveto +0 46 rlineto +0 12 -4 13 -7 16 rrcurveto +-3 2 -3 6 -5 10 rrcurveto +-4 10 -7 13 -10 15 rrcurveto +41 74 17 76 0 78 rrcurveto +35 -14 rlineto +3 14 3 11 3 7 rrcurveto +3 8 2 7 0 6 rrcurveto +4 22 3 24 0 23 rrcurveto +closepath +-128 -425 rmoveto +-38 -20 -10 -3 -49 -5 rrcurveto +38 26 7 7 28 31 rrcurveto +24 -36 rlineto +closepath +-17 -293 rmoveto +-11 -1 -8 -4 -4 -2 rrcurveto +-12 0 rlineto +-14 0 -43 24 0 8 rrcurveto +6 8 12 4 10 0 rrcurveto +6 0 11 -4 16 -8 rrcurveto +9 15 3 6 0 10 rrcurveto +0 12 -9 9 -12 0 rrcurveto +-30 0 -47 -45 0 -27 rrcurveto +0 -10 7 -10 19 -12 rrcurveto +-24 -8 -6 -6 -13 -23 rrcurveto +106 32 rlineto +16 6 8 10 4 16 rrcurveto +closepath +endchar } ND +/afii62839 { +0 541 hsbw +-19 40 hstem +95 31 hstem +143 133 hstem +87 25 vstem +418 157 vstem +350 388 rmoveto +0 115 -231 192 -76 0 rrcurveto +-13 0 -6 -12 0 -23 rrcurveto +0 -69 99 -130 42 0 rrcurveto +12 0 7 12 0 28 rrcurveto +62 -34 44 -53 39 -86 rrcurveto +16 26 5 14 0 20 rrcurveto +closepath +225 -245 rmoveto +0 133 rlineto +-70 0 rlineto +-60 0 17 176 -3 95 rrcurveto +-5 90 -11 73 -16 56 rrcurveto +-38 -68 -19 -45 0 -22 rrcurveto +0 -30 9 -28 5 -28 rrcurveto +5 -29 3 -29 0 -30 rrcurveto +0 -157 -82 -40 -176 -89 rrcurveto +-12 -6 -17 -7 -23 -8 rrcurveto +-22 -6 -25 -9 -22 -9 rrcurveto +0 -31 rlineto +56 0 rlineto +195 0 94 43 60 178 rrcurveto +0 -75 36 -98 51 0 rrcurveto +70 0 rlineto +closepath +-370 -199 rmoveto +-11 -1 -9 -3 -4 -3 rrcurveto +-12 0 rlineto +-14 0 -43 24 0 8 rrcurveto +6 8 14 4 9 0 rrcurveto +5 0 11 -4 17 -8 rrcurveto +9 15 2 6 0 10 rrcurveto +0 12 -8 9 -12 0 rrcurveto +-32 0 -46 -46 0 -26 rrcurveto +0 -10 8 -10 18 -12 rrcurveto +-24 -8 -5 -6 -13 -23 rrcurveto +105 32 rlineto +18 6 5 10 6 16 rrcurveto +closepath +endchar } ND +/afii62840 { +0 486 hsbw +72 145 hstem +360 55 vstem +471 662 rmoveto +-70 21 -23 -9 0 58 rrcurveto +-21 7 rlineto +-19 -44 -8 -39 0 -40 rrcurveto +0 -18 7 -10 23 -10 rrcurveto +0 -79 -9 -70 -26 -50 rrcurveto +-16 24 -14 21 -12 17 rrcurveto +-13 16 -9 13 -6 11 rrcurveto +-60 81 -123 135 -39 0 rrcurveto +-14 0 -2 -11 0 -36 rrcurveto +0 -105 78 -99 42 0 rrcurveto +4 0 3 5 11 22 rrcurveto +58 -56 16 -23 60 -75 rrcurveto +-46 -56 -15 -13 -65 -33 rrcurveto +0 -145 rlineto +116 0 39 7 75 35 rrcurveto +1 30 3 24 3 15 rrcurveto +0 46 rlineto +0 12 -4 13 -7 16 rrcurveto +-3 2 -3 6 -5 10 rrcurveto +-4 10 -7 13 -10 15 rrcurveto +41 74 17 76 0 78 rrcurveto +35 -14 rlineto +3 14 3 11 3 7 rrcurveto +3 8 2 7 0 6 rrcurveto +4 22 3 24 0 23 rrcurveto +closepath +-128 -425 rmoveto +-38 -20 -10 -3 -49 -5 rrcurveto +38 26 7 7 28 31 rrcurveto +24 -36 rlineto +closepath +endchar } ND +/afii62841 { +0 541 hsbw +95 31 hstem +143 133 hstem +418 157 vstem +350 388 rmoveto +0 115 -231 192 -76 0 rrcurveto +-13 0 -6 -12 0 -23 rrcurveto +0 -69 99 -130 42 0 rrcurveto +12 0 7 12 0 28 rrcurveto +62 -34 44 -53 39 -86 rrcurveto +16 26 5 14 0 20 rrcurveto +closepath +225 -245 rmoveto +0 133 rlineto +-70 0 rlineto +-60 0 17 176 -3 95 rrcurveto +-5 90 -11 73 -16 56 rrcurveto +-38 -68 -19 -45 0 -22 rrcurveto +0 -30 9 -28 5 -28 rrcurveto +5 -29 3 -29 0 -30 rrcurveto +0 -157 -82 -40 -176 -89 rrcurveto +-12 -6 -17 -7 -23 -8 rrcurveto +-22 -6 -25 -9 -22 -9 rrcurveto +0 -31 rlineto +56 0 rlineto +195 0 94 43 60 178 rrcurveto +0 -75 36 -98 51 0 rrcurveto +70 0 rlineto +closepath +endchar } ND +/glyph1021 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1022 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1023 { +0 201 hsbw +201 784 rmoveto +-70 -29 -49 -20 -28 -11 rrcurveto +-14 -13 -6 -14 0 -14 rrcurveto +31 15 28 11 26 8 rrcurveto +45 14 37 19 0 34 rrcurveto +closepath +endchar } ND +/_1024 { +0 201 hsbw +34 167 vstem +201 857 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-44 -16 -34 -15 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 15 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -14 0 -32 rrcurveto +31 15 28 11 26 8 rrcurveto +45 14 37 19 0 34 rrcurveto +closepath +endchar } ND +/glyph1025 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1026 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1027 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1028 { +0 165 hsbw +683 48 hstem +794 40 hstem +34 20 vstem +135 30 vstem +165 761 rmoveto +0 38 -29 35 -34 0 rrcurveto +-39 0 -29 -46 0 -50 rrcurveto +0 -35 18 -20 35 0 rrcurveto +44 0 34 36 0 42 rrcurveto +closepath +-30 -13 rmoveto +0 -14 -12 -3 -17 0 rrcurveto +-30 0 -22 5 0 25 rrcurveto +0 14 12 19 18 0 rrcurveto +17 0 34 -29 0 -17 rrcurveto +closepath +endchar } ND +/_1029 { +0 211 hsbw +683 54 hstem +34 22 vstem +196 10 vstem +209 799 rmoveto +0 21 rlineto +-2 6 -1 7 0 7 rrcurveto +-10 -3 rlineto +0 -27 -13 -38 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -45 -8 -31 -30 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 27 rlineto +-9 -4 rlineto +-8 -22 -5 -14 0 -17 rrcurveto +0 -34 14 -18 27 0 rrcurveto +20 0 18 18 14 24 rrcurveto +12 -10 9 -3 12 0 rrcurveto +35 0 14 43 0 44 rrcurveto +closepath +endchar } ND +/_1030 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1031 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1032 { +0 209 hsbw +854 41 hstem +110 25 vstem +143 66 vstem +209 764 rmoveto +0 6 -2 5 -3 4 rrcurveto +-6 4 -5 4 -5 5 rrcurveto +13 36 2 8 0 12 rrcurveto +0 26 -16 21 -17 0 rrcurveto +-30 0 -30 -38 0 -44 rrcurveto +0 -20 14 -15 19 -12 rrcurveto +-23 -28 -53 -40 -32 -15 rrcurveto +36 0 rlineto +26 0 27 27 41 43 rrcurveto +40 -24 rlineto +3 18 rlineto +1 5 rlineto +0 12 rlineto +closepath +-37 55 rmoveto +0 -6 rlineto +-1 -2 -1 -3 -1 -3 rrcurveto +-22 17 rlineto +-8 7 -4 7 0 8 rrcurveto +0 5 4 5 7 0 rrcurveto +10 0 16 -18 0 -17 rrcurveto +closepath +endchar } ND +/_1033 { +0 237 hsbw +683 39 hstem +774 42 hstem +841 31 hstem +85 25 vstem +139 31 vstem +202 35 vstem +237 840 rmoveto +0 17 -15 15 -17 0 rrcurveto +-34 0 -32 -41 0 -31 rrcurveto +0 -17 16 -17 13 -12 rrcurveto +-21 -16 -20 -10 -22 -6 rrcurveto +0 8 rlineto +2 7 3 15 0 12 rrcurveto +0 26 -13 26 -22 0 rrcurveto +-32 0 -5 -35 -4 -41 rrcurveto +2 7 3 4 3 3 rrcurveto +2 3 2 3 1 2 rrcurveto +6 8 6 4 7 0 rrcurveto +12 0 7 -14 0 -16 rrcurveto +0 -8 -2 -9 -4 -8 rrcurveto +-2 -3 -7 -12 -12 -21 rrcurveto +50 0 44 19 34 39 rrcurveto +42 -33 rlineto +2 14 1 14 0 15 rrcurveto +0 9 -7 7 -9 7 rrcurveto +14 22 8 20 0 24 rrcurveto +closepath +-35 -28 rmoveto +0 -7 -2 -6 -4 -6 rrcurveto +-19 14 -7 9 0 12 rrcurveto +0 8 3 5 8 0 rrcurveto +12 0 9 -15 0 -14 rrcurveto +closepath +endchar } ND +/glyph1034 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1035 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1036 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1037 { +0 211 hsbw +683 53 hstem +204 918 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -16 0 -30 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 19 0 32 rrcurveto +closepath +7 -120 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -27 -13 -39 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 16 44 0 42 rrcurveto +closepath +endchar } ND +/_1038 { +0 211 hsbw +683 53 hstem +34 167 vstem +201 995 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-44 -16 -34 -15 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 15 rrcurveto +closepath +0 -73 rmoveto +-34 -16 -29 -13 -26 -9 rrcurveto +-45 -16 -33 -16 0 -32 rrcurveto +31 15 28 11 26 8 rrcurveto +45 14 37 20 0 34 rrcurveto +closepath +10 -123 rmoveto +0 10 -3 19 -2 12 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 16 43 0 44 rrcurveto +closepath +endchar } ND +/_1039 { +0 211 hsbw +774 54 hstem +886 20 hstem +38 18 vstem +196 10 vstem +209 889 rmoveto +0 20 rlineto +-2 6 -1 8 0 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 15 -4 29 rrcurveto +-10 -3 rlineto +-11 -45 -8 -30 -30 0 rrcurveto +-12 0 -5 12 0 14 rrcurveto +0 28 rlineto +-9 -4 rlineto +-1 -7 -2 -5 -2 -3 rrcurveto +-3 -3 -1 -4 0 -4 rrcurveto +-3 -10 -1 -8 0 -8 rrcurveto +0 -34 14 -18 27 0 rrcurveto +19 0 19 18 14 23 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 14 42 0 44 rrcurveto +closepath +-5 -105 rmoveto +-34 -16 -30 -12 -25 -10 rrcurveto +-43 -17 -35 -14 0 -32 rrcurveto +33 13 28 11 23 9 rrcurveto +44 17 39 17 0 34 rrcurveto +closepath +endchar } ND +/_1040 { +0 211 hsbw +850 58 hstem +196 13 vstem +209 936 rmoveto +0 20 rlineto +0 7 -2 7 -1 8 rrcurveto +-10 -3 rlineto +0 -29 -13 -38 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -46 -8 -30 -30 0 rrcurveto +-12 0 -5 12 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -8 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 20 16 12 25 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 14 42 0 44 rrcurveto +closepath +-5 -96 rmoveto +-70 -29 -49 -20 -27 -10 rrcurveto +-14 -14 -7 -14 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 15 rrcurveto +closepath +0 -60 rmoveto +-70 -30 -49 -20 -27 -11 rrcurveto +-14 -14 -7 -13 0 -14 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/_1041 { +0 211 hsbw +712 198 hstem +955 19 hstem +110 30 vstem +196 15 vstem +211 851 rmoveto +0 28 2 8 -25 11 rrcurveto +2 7 3 4 2 2 rrcurveto +3 3 1 3 0 1 rrcurveto +3 8 2 7 0 7 rrcurveto +0 18 -19 16 -18 0 rrcurveto +-30 0 -27 -34 0 -28 rrcurveto +0 -16 10 -11 15 -14 rrcurveto +-19 -11 -17 -9 -16 -7 rrcurveto +-10 -6 -18 -8 -24 -10 rrcurveto +10 -6 8 -2 10 0 rrcurveto +23 0 25 9 23 20 rrcurveto +6 7 8 6 10 7 rrcurveto +11 -4 7 -2 3 0 rrcurveto +12 -3 12 -1 12 0 rrcurveto +closepath +0 -53 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -29 -13 -37 -25 0 rrcurveto +-21 0 -1 16 -4 29 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-9 -27 rlineto +-3 -10 -1 -9 0 -8 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +10 -8 11 -4 12 0 rrcurveto +35 0 16 44 0 42 rrcurveto +closepath +-39 127 rmoveto +0 -2 -1 -3 -1 -2 rrcurveto +-2 -2 -1 -3 0 -3 rrcurveto +-23 12 -4 7 0 14 rrcurveto +0 6 2 6 4 0 rrcurveto +14 0 12 -17 0 -13 rrcurveto +closepath +endchar } ND +/_1042 { +0 226 hsbw +683 53 hstem +912 43 hstem +980 30 hstem +74 26 vstem +128 31 vstem +191 35 vstem +226 979 rmoveto +0 17 -14 14 -18 0 rrcurveto +-33 0 -33 -41 0 -31 rrcurveto +0 -19 11 -8 18 -19 rrcurveto +-21 -15 -22 -11 -22 -6 rrcurveto +2 12 3 8 3 4 rrcurveto +0 17 rlineto +0 28 -14 26 -22 0 rrcurveto +-32 0 -5 -34 -4 -43 rrcurveto +13 22 rlineto +6 8 6 4 7 0 rrcurveto +12 0 7 -16 0 -14 rrcurveto +0 -10 -4 -10 -6 -12 rrcurveto +-17 -29 rlineto +50 0 44 19 34 39 rrcurveto +42 -32 rlineto +2 16 1 14 0 12 rrcurveto +0 9 -6 6 -9 8 rrcurveto +13 22 8 21 0 24 rrcurveto +closepath +-15 -181 rmoveto +0 12 -3 18 -2 12 rrcurveto +-10 -3 rlineto +0 -27 -13 -39 -25 0 rrcurveto +-21 0 -1 15 -4 30 rrcurveto +-10 -3 rlineto +-11 -48 -9 -29 -29 0 rrcurveto +-12 0 -5 13 0 15 rrcurveto +0 28 rlineto +-9 -4 rlineto +-3 -12 -3 -10 -3 -7 rrcurveto +-3 -9 -1 -7 0 -9 rrcurveto +0 -32 14 -19 27 0 rrcurveto +20 0 18 18 14 23 rrcurveto +12 -8 9 -4 12 0 rrcurveto +35 0 16 44 0 42 rrcurveto +closepath +-20 152 rmoveto +0 -8 -2 -6 -4 -5 rrcurveto +-19 14 -7 9 0 12 rrcurveto +0 8 4 6 7 0 rrcurveto +13 0 8 -16 0 -14 rrcurveto +closepath +endchar } ND +/_1043 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1044 { +0 201 hsbw +201 41 rmoveto +-34 -16 -30 -12 -25 -9 rrcurveto +-43 -18 -35 -14 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 4 rrcurveto +16 14 9 15 0 16 rrcurveto +closepath +endchar } ND +/_1045 { +0 201 hsbw +34 167 vstem +201 41 rmoveto +-34 -15 -30 -12 -25 -9 rrcurveto +-43 -18 -35 -15 0 -32 rrcurveto +34 12 28 11 22 11 rrcurveto +22 11 20 7 16 5 rrcurveto +16 14 9 14 0 16 rrcurveto +closepath +0 -72 rmoveto +-34 -15 -30 -13 -25 -9 rrcurveto +-43 -18 -35 -15 0 -32 rrcurveto +65 27 47 19 30 11 rrcurveto +16 15 9 15 0 15 rrcurveto +closepath +endchar } ND +/glyph1046 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1047 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1048 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1049 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1050 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1051 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1052 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1053 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1054 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1055 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1056 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1057 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1058 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1059 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1060 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1061 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1062 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1063 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1064 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1065 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1066 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1067 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1068 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1069 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1070 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1071 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1072 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1073 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1074 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1075 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1076 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1077 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1078 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1079 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1080 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1081 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1082 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1083 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1084 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1085 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1086 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1087 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1088 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1089 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1090 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1091 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1092 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1093 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1094 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1095 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1096 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1097 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1098 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1099 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1100 { +0 319 hsbw +137 120 hstem +302 412 hstem +146 28 vstem +223 639 rmoveto +0 40 -26 35 -37 0 rrcurveto +-36 0 -25 -35 0 -40 rrcurveto +0 -15 4 -28 8 -40 rrcurveto +7 -29 5 -25 3 -20 rrcurveto +2 -21 3 -14 3 -9 rrcurveto +8 -50 4 -45 0 -41 rrcurveto +28 0 rlineto +0 44 4 46 9 48 rrcurveto +0 6 2 11 5 17 rrcurveto +5 17 5 25 6 33 rrcurveto +8 37 5 31 0 22 rrcurveto +closepath +-3 -443 rmoveto +0 33 -27 28 -32 0 rrcurveto +-35 0 -26 -28 0 -33 rrcurveto +0 -32 26 -27 34 0 rrcurveto +33 0 27 27 0 32 rrcurveto +closepath +endchar } ND +/glyph1101 { +0 319 hsbw +137 130 hstem +97 129 vstem +226 202 rmoveto +0 36 -29 29 -36 0 rrcurveto +-35 0 -29 -31 0 -34 rrcurveto +0 -36 28 -29 36 0 rrcurveto +36 0 29 29 0 36 rrcurveto +closepath +endchar } ND +/glyph1102 { +0 319 hsbw +137 130 hstem +412 130 hstem +97 128 vstem +225 478 rmoveto +0 34 -29 30 -36 0 rrcurveto +-36 0 -27 -30 0 -34 rrcurveto +0 -38 28 -28 35 0 rrcurveto +36 0 29 28 0 38 rrcurveto +closepath +0 -276 rmoveto +0 36 -29 29 -36 0 rrcurveto +-36 0 -27 -31 0 -34 rrcurveto +0 -36 28 -29 35 0 rrcurveto +36 0 29 29 0 36 rrcurveto +closepath +endchar } ND +/glyph1103 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1104 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1105 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1106 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1107 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1108 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1109 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1110 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1111 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1112 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1113 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1114 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1115 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1116 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1117 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1118 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1119 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1120 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1121 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1122 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1123 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1124 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1125 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/glyph1126 { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/_1127 { +0 125 hsbw +143 133 hstem +0 159 vstem +159 143 rmoveto +0 133 rlineto +-159 0 rlineto +0 -133 rlineto +159 0 rlineto +closepath +endchar } ND +/_1128 { +0 1000 hsbw +143 133 hstem +0 1034 vstem +1034 143 rmoveto +0 133 rlineto +-1034 0 rlineto +0 -133 rlineto +1034 0 rlineto +closepath +endchar } ND +/_1129 { +0 2000 hsbw +143 133 hstem +0 2034 vstem +2034 143 rmoveto +0 133 rlineto +-2034 0 rlineto +0 -133 rlineto +2034 0 rlineto +closepath +endchar } ND +/Ohorn { +0 853 hsbw +-12 123 hstem +604 124 hstem +43 149 vstem +588 146 vstem +782 71 vstem +192 358 rmoveto +0 145 62 101 137 0 rrcurveto +134 0 63 -98 0 -146 rrcurveto +0 -147 -65 -102 -132 0 rrcurveto +-133 0 -66 105 0 142 rrcurveto +closepath +524 358 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -47 -19 -32 -38 -17 rrcurveto +-42 153 -122 92 -169 0 rrcurveto +-223 0 -124 -149 0 -225 rrcurveto +0 -227 134 -139 215 0 rrcurveto +210 0 136 139 0 230 rrcurveto +0 22 -2 21 -2 20 rrcurveto +84 30 35 62 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +endchar } ND +/ohorn { +0 711 hsbw +-12 112 hstem +418 112 hstem +40 141 vstem +640 71 vstem +181 259 rmoveto +0 90 44 69 83 0 rrcurveto +80 0 46 -69 0 -89 rrcurveto +0 -90 -45 -70 -81 0 rrcurveto +-84 0 -43 69 0 90 rrcurveto +closepath +393 260 rmoveto +0 -138 rlineto +66 0 rlineto +-2 -48 -21 -33 -42 -17 rrcurveto +-11 143 -109 104 -148 0 rrcurveto +-152 0 -115 -123 0 -140 rrcurveto +0 -177 115 -102 153 0 rrcurveto +135 0 112 94 17 133 rrcurveto +98 30 41 46 0 129 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +endchar } ND +/Uhorn { +0 830 hsbw +-12 123 hstem +405 55 hstem +579 137 hstem +72 144 vstem +498 145 vstem +759 71 vstem +692 716 rmoveto +0 -137 rlineto +67 0 rlineto +-3 -78 -38 -26 -75 -15 rrcurveto +0 256 rlineto +-145 0 rlineto +0 -396 rlineto +0 -138 -6 -71 -131 0 rrcurveto +-132 0 -13 60 0 157 rrcurveto +0 388 rlineto +-144 0 rlineto +0 -382 rlineto +0 -237 63 -109 231 0 rrcurveto +220 0 57 108 0 244 rrcurveto +0 65 rlineto +130 18 57 40 0 155 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +endchar } ND +/uhorn { +0 724 hsbw +-12 105 hstem +208 56 hstem +381 138 hstem +69 137 vstem +413 128 vstem +653 71 vstem +587 519 rmoveto +0 -138 rlineto +66 0 rlineto +-3 -77 -37 -27 -72 -13 rrcurveto +0 255 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 68 0 119 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -129 49 -73 123 0 rrcurveto +74 0 57 30 41 60 rrcurveto +0 -78 rlineto +128 0 rlineto +0 208 rlineto +127 20 56 43 0 149 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +endchar } ND +/_1134 { +0 0 hsbw +820 80 hstem +-184 87 vstem +-97 820 rmoveto +-58 80 rlineto +-154 0 rlineto +125 -80 rlineto +87 0 rlineto +closepath +endchar } ND +/_1135 { +0 0 hsbw +820 80 hstem +-406 87 vstem +-319 820 rmoveto +-58 80 rlineto +-154 0 rlineto +125 -80 rlineto +87 0 rlineto +closepath +endchar } ND +/_1136 { +0 0 hsbw +754 138 hstem +-319 87 vstem +-232 754 rmoveto +-68 138 rlineto +-154 0 rlineto +135 -138 rlineto +87 0 rlineto +closepath +endchar } ND +/f006 { +0 0 hsbw +820 80 hstem +-226 87 vstem +-226 820 rmoveto +87 0 rlineto +126 80 rlineto +-154 0 rlineto +-59 -80 rlineto +closepath +endchar } ND +/f007 { +0 0 hsbw +820 80 hstem +-416 87 vstem +-416 820 rmoveto +87 0 rlineto +126 80 rlineto +-153 0 rlineto +-60 -80 rlineto +closepath +endchar } ND +/f009 { +0 0 hsbw +754 138 hstem +-333 86 vstem +-333 754 rmoveto +86 0 rlineto +130 138 rlineto +-154 0 rlineto +-62 -138 rlineto +closepath +endchar } ND +/combininghookabove { +0 0 hsbw +742 54 hstem +854 51 hstem +-164 55 vstem +-102 82 vstem +-136 799 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +61 7 28 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-34 0 -23 -1 -13 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +40 0 38 -4 0 -26 rrcurveto +0 -11 -8 -8 -18 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f010 { +0 0 hsbw +820 22 hstem +875 30 hstem +-189 45 vstem +-137 75 vstem +-170 843 rmoveto +-19 -1 rlineto +0 -22 rlineto +45 0 rlineto +0 7 rlineto +56 7 26 15 0 22 rrcurveto +0 22 -44 12 -86 0 rrcurveto +-65 0 rlineto +5 -30 rlineto +42 0 rlineto +35 0 38 0 0 -17 rrcurveto +0 -6 -9 -4 -16 -3 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f013 { +0 0 hsbw +742 54 hstem +854 51 hstem +-295 54 vstem +-233 81 vstem +-268 799 rmoveto +-27 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 25 rlineto +61 7 28 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-34 0 -23 -1 -13 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -11 -9 -8 -18 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f011 { +0 0 hsbw +820 22 hstem +875 30 hstem +-381 46 vstem +-329 76 vstem +-362 843 rmoveto +-19 -1 rlineto +0 -22 rlineto +46 0 rlineto +0 7 rlineto +56 7 26 15 0 22 rrcurveto +0 22 -44 12 -86 0 rrcurveto +-66 0 rlineto +6 -30 rlineto +42 0 rlineto +28 0 20 -2 12 -4 rrcurveto +9 -3 4 -4 -1 -4 rrcurveto +0 -6 -8 -4 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/f01c { +0 0 hsbw +787 111 hstem +-302 65 vstem +-39 64 vstem +-302 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-3 -28 -12 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -21 0 rrcurveto +-58 0 -41 -46 0 -65 rrcurveto +closepath +endchar } ND +/f015 { +0 0 hsbw +822 81 hstem +-515 55 vstem +-243 55 vstem +-515 820 rmoveto +55 0 rlineto +4 24 12 13 21 0 rrcurveto +10 0 20 -5 28 -9 rrcurveto +34 -14 27 -7 20 0 rrcurveto +62 0 32 27 2 54 rrcurveto +-55 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-11 0 -18 4 -25 8 rrcurveto +-35 14 -28 7 -20 0 rrcurveto +-58 0 -42 -38 1 -44 rrcurveto +closepath +endchar } ND +/combiningtildeaccent { +0 0 hsbw +802 65 hstem +-445 65 vstem +-182 64 vstem +-445 755 rmoveto +65 0 rlineto +0 31 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -11 -14 -20 0 rrcurveto +-11 0 -16 4 -19 10 rrcurveto +-35 18 -27 9 -21 0 rrcurveto +-58 0 -41 -46 0 -66 rrcurveto +closepath +endchar } ND +/_1147 { +0 0 hsbw +740 35 hstem +-146 47 vstem +91 47 vstem +-146 804 rmoveto +23 -39 63 -25 55 0 rrcurveto +61 0 59 20 23 44 rrcurveto +-47 0 rlineto +-27 -25 -34 -4 -35 0 rrcurveto +-33 0 -39 8 -22 21 rrcurveto +-47 0 rlineto +closepath +endchar } ND +/_1148 { +0 0 hsbw +776 28 hstem +-150 96 -43 86 54 96 vstem3 +0 776 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +endchar } ND +/f02c { +0 0 hsbw +-196 137 hstem +-172 137 vstem +-172 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/dongsign { +0 513 hsbw +92 64 hstem +208 75 hstem +513 73 hstem +617 99 hstem +62 98 vstem +327 89 vstem +320 617 rmoveto +0 -81 rlineto +-30 33 -36 17 -40 0 rrcurveto +-102 0 -50 -79 0 -109 rrcurveto +0 -105 54 -85 97 0 rrcurveto +46 0 38 20 30 41 rrcurveto +0 -53 rlineto +89 0 rlineto +0 401 rlineto +38 0 rlineto +0 63 rlineto +-38 0 rlineto +0 36 rlineto +-96 0 rlineto +0 -36 rlineto +-104 0 rlineto +0 -63 rlineto +104 0 rlineto +closepath +-160 -212 rmoveto +0 59 26 49 54 0 rrcurveto +53 0 27 -39 0 -78 rrcurveto +0 -63 -27 -50 -52 0 rrcurveto +-59 0 -22 48 0 74 rrcurveto +closepath +-101 -313 rmoveto +401 0 rlineto +0 64 rlineto +-401 0 rlineto +0 -64 rlineto +closepath +endchar } ND +/onethird { +0 834 hsbw +-26 70 hstem +138 212 hstem +355 370 hstem +149 93 vstem +590 78 vstem +706 93 vstem +242 355 rmoveto +0 370 rlineto +-75 0 rlineto +-16 -39 -45 -36 -61 -17 rrcurveto +0 -75 rlineto +39 10 35 16 30 21 rrcurveto +0 -250 rlineto +93 0 rlineto +closepath +2 -381 rmoveto +424 751 rlineto +-78 0 rlineto +-424 -751 rlineto +78 0 rlineto +closepath +280 113 rmoveto +9 -70 53 -43 83 0 rrcurveto +77 0 72 48 0 70 rrcurveto +0 42 -23 30 -44 16 rrcurveto +24 12 24 29 0 29 rrcurveto +0 60 -62 40 -70 0 rrcurveto +-75 0 -43 -28 -19 -77 rrcurveto +87 -13 rlineto +4 32 16 16 28 0 rrcurveto +27 0 14 -11 0 -21 rrcurveto +0 -8 -3 -7 -4 -5 rrcurveto +-11 -13 -19 -7 -30 1 rrcurveto +-11 -71 rlineto +11 1 10 3 5 3 rrcurveto +18 0 rlineto +30 0 21 -20 0 -28 rrcurveto +0 -36 -18 -17 -36 0 rrcurveto +-32 0 -18 17 -5 36 rrcurveto +-90 -10 rlineto +closepath +endchar } ND +/twothirds { +0 834 hsbw +-26 70 hstem +138 212 hstem +355 77 hstem +655 70 hstem +216 93 vstem +590 78 vstem +706 93 vstem +244 -26 rmoveto +424 751 rlineto +-78 0 rlineto +-424 -751 rlineto +78 0 rlineto +closepath +280 113 rmoveto +9 -70 53 -43 83 0 rrcurveto +77 0 72 48 0 70 rrcurveto +0 42 -23 30 -44 16 rrcurveto +24 12 24 29 0 29 rrcurveto +0 60 -62 40 -70 0 rrcurveto +-75 0 -43 -28 -19 -77 rrcurveto +87 -13 rlineto +4 32 16 16 28 0 rrcurveto +27 0 14 -11 0 -21 rrcurveto +0 -8 -3 -7 -4 -5 rrcurveto +-11 -13 -19 -7 -30 1 rrcurveto +-11 -71 rlineto +11 1 10 3 5 3 rrcurveto +18 0 rlineto +30 0 21 -20 0 -28 rrcurveto +0 -36 -18 -17 -36 0 rrcurveto +-32 0 -18 17 -5 36 rrcurveto +-90 -10 rlineto +closepath +-215 345 rmoveto +-154 0 rlineto +7 6 14 12 20 16 rrcurveto +81 65 32 30 0 59 rrcurveto +0 66 -64 39 -76 0 rrcurveto +-88 0 -49 -40 -10 -79 rrcurveto +92 -7 rlineto +3 37 18 19 32 0 rrcurveto +32 0 17 -14 0 -26 rrcurveto +0 -41 -29 -12 -53 -42 rrcurveto +-75 -61 -36 -27 -11 -77 rrcurveto +297 0 rlineto +0 77 rlineto +closepath +endchar } ND +/f008 { +0 0 hsbw +582 138 hstem +-216 87 vstem +-216 582 rmoveto +87 0 rlineto +129 138 rlineto +-153 0 rlineto +-63 -138 rlineto +closepath +endchar } ND +/_1154 { +0 0 hsbw +582 138 hstem +-333 86 vstem +-333 582 rmoveto +86 0 rlineto +130 138 rlineto +-154 0 rlineto +-62 -138 rlineto +closepath +endchar } ND +/_1155 { +0 0 hsbw +582 138 hstem +-159 86 vstem +-73 582 rmoveto +-67 138 rlineto +-154 0 rlineto +135 -138 rlineto +86 0 rlineto +closepath +endchar } ND +/f00f { +0 0 hsbw +582 138 hstem +-319 87 vstem +-232 582 rmoveto +-68 138 rlineto +-154 0 rlineto +135 -138 rlineto +87 0 rlineto +closepath +endchar } ND +/f012 { +0 0 hsbw +582 54 hstem +694 51 hstem +-164 55 vstem +-102 81 vstem +-136 639 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 24 rlineto +60 8 28 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -23 -1 -13 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -12 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f014 { +0 0 hsbw +582 54 hstem +694 51 hstem +-295 54 vstem +-233 81 vstem +-268 639 rmoveto +-27 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 24 rlineto +61 8 28 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -23 -1 -13 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -12 -9 -7 -18 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f016 { +0 0 hsbw +787 111 hstem +-515 65 vstem +-252 64 vstem +-515 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-11 0 -14 5 -20 10 rrcurveto +-34 17 -29 9 -20 0 rrcurveto +-58 0 -42 -46 1 -65 rrcurveto +closepath +endchar } ND +/f017 { +0 0 hsbw +787 111 hstem +-627 64 vstem +-364 63 vstem +-627 786 rmoveto +64 0 rlineto +0 30 13 16 25 0 rrcurveto +10 0 15 -6 22 -12 rrcurveto +33 -18 29 -9 20 0 rrcurveto +62 0 31 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-60 0 -40 -46 1 -65 rrcurveto +closepath +endchar } ND +/f018 { +0 0 hsbw +787 111 hstem +-598 65 vstem +-335 64 vstem +-598 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-58 0 -42 -46 1 -65 rrcurveto +closepath +endchar } ND +/f019 { +0 0 hsbw +590 123 hstem +-445 63 vstem +-171 64 vstem +-382 588 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 21 -8 30 0 rrcurveto +51 0 35 35 1 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-14 0 -20 5 -27 12 rrcurveto +-40 18 -12 7 -33 0 rrcurveto +-53 0 -36 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/f01a { +0 0 hsbw +590 123 hstem +-559 63 vstem +-285 64 vstem +-496 588 rmoveto +0 32 13 11 21 0 rrcurveto +14 0 27 -7 24 -10 rrcurveto +38 -16 21 -8 30 0 rrcurveto +51 0 35 35 1 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-14 0 -20 5 -27 12 rrcurveto +-40 18 -12 7 -33 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/f01b { +0 0 hsbw +590 123 hstem +-549 63 vstem +-275 64 vstem +-486 588 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 21 -8 30 0 rrcurveto +51 0 35 35 1 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-14 0 -20 5 -27 12 rrcurveto +-40 18 -12 7 -33 0 rrcurveto +-53 0 -36 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/f01e { +0 0 hsbw +-196 137 hstem +-399 137 vstem +-399 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f01f { +0 0 hsbw +-196 137 hstem +-459 137 vstem +-459 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f020 { +0 0 hsbw +-196 137 hstem +-530 137 vstem +-530 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f021 { +0 0 hsbw +-196 137 hstem +-428 137 vstem +-428 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f022 { +0 0 hsbw +-196 137 hstem +-505 137 vstem +-505 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/combininggraveaccent { +0 0 hsbw +754 138 hstem +-154 86 vstem +-68 754 rmoveto +-67 138 rlineto +-154 0 rlineto +135 -138 rlineto +86 0 rlineto +closepath +endchar } ND +/combiningacuteaccent { +0 0 hsbw +754 138 hstem +-207 87 vstem +-207 754 rmoveto +87 0 rlineto +130 138 rlineto +-154 0 rlineto +-63 -138 rlineto +closepath +endchar } ND +/f01d { +0 0 hsbw +590 123 hstem +-313 63 vstem +-39 63 vstem +-250 588 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 27 -8 25 -9 rrcurveto +38 -15 23 -9 27 0 rrcurveto +52 0 35 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -14 -12 -22 0 rrcurveto +-14 0 -20 5 -26 12 rrcurveto +-40 18 -12 7 -34 0 rrcurveto +-52 0 -36 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/combiningdotbelow { +0 0 hsbw +-196 137 hstem +-437 138 vstem +-437 -196 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f023 { +0 0 hsbw +-196 137 hstem +-350 138 vstem +-350 -196 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f029 { +0 0 hsbw +-196 137 hstem +-211 137 vstem +-211 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f02a { +0 0 hsbw +-196 137 hstem +-216 137 vstem +-216 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f02b { +0 0 hsbw +-196 137 hstem +-398 137 vstem +-398 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f024 { +0 0 hsbw +-196 137 hstem +-345 137 vstem +-345 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f025 { +0 0 hsbw +-196 137 hstem +-374 137 vstem +-374 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f026 { +0 0 hsbw +-196 137 hstem +-472 138 vstem +-472 -196 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f027 { +0 0 hsbw +-196 137 hstem +-386 137 vstem +-386 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f028 { +0 0 hsbw +-196 137 hstem +-481 137 vstem +-481 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/f02d { +0 0 hsbw +822 81 hstem +-496 55 vstem +-224 55 vstem +-496 820 rmoveto +55 0 rlineto +4 24 12 13 21 0 rrcurveto +10 0 20 -5 28 -9 rrcurveto +34 -14 27 -7 20 0 rrcurveto +62 0 32 27 2 54 rrcurveto +-55 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-11 0 -18 4 -25 8 rrcurveto +-35 14 -28 7 -20 0 rrcurveto +-58 0 -42 -38 1 -44 rrcurveto +closepath +endchar } ND +/f02e { +0 0 hsbw +787 111 hstem +-477 65 vstem +-213 63 vstem +-477 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +11 0 15 -6 22 -12 rrcurveto +33 -18 28 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-34 17 -28 9 -20 0 rrcurveto +-60 0 -40 -46 0 -65 rrcurveto +closepath +endchar } ND +/f02f { +0 0 hsbw +822 81 hstem +-547 54 vstem +-275 54 vstem +-547 820 rmoveto +54 0 rlineto +4 24 13 13 20 0 rrcurveto +11 0 20 -5 28 -9 rrcurveto +34 -14 27 -7 20 0 rrcurveto +62 0 31 27 2 54 rrcurveto +-54 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-11 0 -18 4 -26 8 rrcurveto +-34 14 -28 7 -20 0 rrcurveto +-60 0 -40 -38 1 -44 rrcurveto +closepath +endchar } ND +/f030 { +0 0 hsbw +787 111 hstem +-567 65 vstem +-304 64 vstem +-567 786 rmoveto +65 0 rlineto +0 30 12 16 25 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +34 -18 27 -9 20 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -11 -14 -20 0 rrcurveto +-11 0 -15 5 -20 10 rrcurveto +-35 17 -28 9 -20 0 rrcurveto +-58 0 -41 -46 0 -65 rrcurveto +closepath +endchar } ND +/f031 { +0 278 hsbw +0 20 hstem +499 20 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +endchar } ND +/Adotbelow { +0 722 hsbw +-196 137 hstem +0 20 hstem +163 120 hstem +549 167 hstem +0 153 290 134 561 153 vstem3 +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-165 -479 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/adotbelow { +0 556 hsbw +-196 137 hstem +-12 97 hstem +249 89 hstem +425 105 hstem +36 141 204 123 358 133 vstem3 +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-169 -445 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Ahookabove { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +742 54 hstem +854 51 hstem +0 153 vstem +328 55 vstem +390 82 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-96 516 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +39 0 39 -5 0 -25 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ahookabove { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +582 54 hstem +694 51 hstem +36 137 vstem +247 55 vstem +309 82 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-83 390 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +45 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -12 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Acircumflexacute { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +776 28 hstem +820 80 hstem +0 153 vstem +310 86 vstem +407 96 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-99 493 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-59 44 rmoveto +87 0 rlineto +126 80 rlineto +-154 0 rlineto +-59 -80 rlineto +closepath +endchar } ND +/acircumflexacute { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +657 71 hstem +754 138 hstem +36 137 vstem +214 87 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-244 335 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +100 170 rmoveto +87 0 rlineto +130 138 rlineto +-154 0 rlineto +-63 -138 rlineto +closepath +endchar } ND +/Acircumflexgrave { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +776 28 hstem +820 80 hstem +0 153 vstem +203 96 310 86 407 96 vstem3 +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-99 493 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +58 44 rmoveto +-58 80 rlineto +-154 0 rlineto +125 -80 rlineto +87 0 rlineto +closepath +endchar } ND +/acircumflexgrave { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +657 71 hstem +754 138 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-244 335 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +231 170 rmoveto +-68 138 rlineto +-153 0 rlineto +134 -138 rlineto +87 0 rlineto +closepath +endchar } ND +/Acircumflexhookabove { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +776 28 hstem +820 22 hstem +875 30 hstem +0 153 vstem +203 96 vstem +333 45 vstem +385 76 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-99 493 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-1 67 rmoveto +-19 -1 rlineto +0 -22 rlineto +45 0 rlineto +0 7 rlineto +56 7 27 15 0 22 rrcurveto +0 22 -46 12 -84 0 rrcurveto +-66 0 rlineto +6 -30 rlineto +42 0 rlineto +34 0 38 1 0 -18 rrcurveto +0 -6 -8 -4 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/acircumflexhookabove { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +657 71 hstem +742 54 hstem +854 51 hstem +36 137 vstem +250 55 vstem +312 82 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-244 335 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +164 215 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -72 21 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +45 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Acircumflextilde { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +776 28 hstem +822 81 hstem +0 153 vstem +190 55 311 85 462 55 vstem3 +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-99 493 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-163 44 rmoveto +55 0 rlineto +3 24 12 13 22 0 rrcurveto +10 0 19 -5 29 -9 rrcurveto +33 -14 27 -7 21 0 rrcurveto +62 0 32 27 2 54 rrcurveto +-55 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-12 0 -19 3 -23 9 rrcurveto +-36 14 -27 7 -20 0 rrcurveto +-59 0 -42 -38 2 -44 rrcurveto +closepath +endchar } ND +/acircumflextilde { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +657 71 hstem +802 65 hstem +36 137 vstem +216 127 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-244 335 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +3 171 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +61 0 32 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-60 0 -41 -46 2 -66 rrcurveto +closepath +endchar } ND +/Acircumflexdotbelow { +0 722 hsbw +-196 137 hstem +0 20 hstem +163 120 hstem +549 167 hstem +776 28 hstem +0 153 290 134 561 153 vstem3 +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-99 493 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-66 -972 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/acircumflexdotbelow { +0 556 hsbw +-196 137 hstem +-12 97 hstem +249 89 hstem +425 105 hstem +657 71 hstem +36 141 204 123 358 133 vstem3 +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-244 335 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +75 -780 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Abreveacute { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +740 35 hstem +820 80 hstem +0 153 vstem +207 47 vstem +289 87 vstem +444 47 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-245 521 rmoveto +18 -39 63 -25 60 0 rrcurveto +61 0 59 20 23 44 rrcurveto +-47 0 rlineto +-27 -25 -34 -4 -35 0 rrcurveto +-35 0 -40 8 -19 21 rrcurveto +-47 0 rlineto +closepath +82 16 rmoveto +87 0 rlineto +126 80 rlineto +-154 0 rlineto +-59 -80 rlineto +closepath +endchar } ND +/abreveacute { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +586 142 hstem +754 138 hstem +36 137 vstem +214 87 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +5 479 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +-149 26 rmoveto +87 0 rlineto +130 138 rlineto +-154 0 rlineto +-63 -138 rlineto +closepath +endchar } ND +/Abrevegrave { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +740 35 hstem +820 80 hstem +0 153 vstem +207 47 vstem +319 87 vstem +444 47 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-245 521 rmoveto +18 -39 63 -25 60 0 rrcurveto +61 0 59 20 23 44 rrcurveto +-47 0 rlineto +-27 -25 -34 -4 -35 0 rrcurveto +-35 0 -40 8 -19 21 rrcurveto +-47 0 rlineto +closepath +199 16 rmoveto +-58 80 rlineto +-154 0 rlineto +125 -80 rlineto +87 0 rlineto +closepath +endchar } ND +/abrevegrave { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +586 142 hstem +754 138 hstem +36 137 vstem +258 87 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +5 479 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +-18 26 rmoveto +-68 138 rlineto +-153 0 rlineto +134 -138 rlineto +87 0 rlineto +closepath +endchar } ND +/Abrevehookabove { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +740 35 hstem +820 22 hstem +875 30 hstem +0 153 vstem +207 47 vstem +333 45 vstem +385 76 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-245 521 rmoveto +18 -39 63 -25 60 0 rrcurveto +61 0 59 20 23 44 rrcurveto +-47 0 rlineto +-27 -25 -34 -4 -35 0 rrcurveto +-35 0 -40 8 -19 21 rrcurveto +-47 0 rlineto +closepath +145 39 rmoveto +-19 -1 rlineto +0 -22 rlineto +45 0 rlineto +0 7 rlineto +56 7 27 15 0 22 rrcurveto +0 22 -46 12 -84 0 rrcurveto +-66 0 rlineto +6 -30 rlineto +42 0 rlineto +34 0 38 1 0 -18 rrcurveto +0 -6 -8 -4 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/abrevehookabove { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +586 142 hstem +742 54 hstem +854 51 hstem +36 137 vstem +250 55 vstem +312 82 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +5 479 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +-85 71 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -72 21 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +45 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Abrevetilde { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +740 35 hstem +822 81 hstem +0 153 vstem +207 47 279 140 444 47 vstem3 +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-245 521 rmoveto +18 -39 63 -25 60 0 rrcurveto +61 0 59 20 23 44 rrcurveto +-47 0 rlineto +-27 -25 -34 -4 -35 0 rrcurveto +-35 0 -40 8 -19 21 rrcurveto +-47 0 rlineto +closepath +-21 16 rmoveto +54 0 rlineto +4 24 12 13 21 0 rrcurveto +10 0 19 -5 29 -9 rrcurveto +34 -14 27 -7 21 0 rrcurveto +61 0 32 27 2 54 rrcurveto +-54 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-12 0 -18 4 -25 8 rrcurveto +-35 14 -27 7 -20 0 rrcurveto +-60 0 -41 -38 2 -44 rrcurveto +closepath +endchar } ND +/abrevetilde { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +586 142 hstem +802 65 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +5 479 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +-246 27 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +61 0 32 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-60 0 -41 -46 2 -66 rrcurveto +closepath +endchar } ND +/Abrevedotbelow { +0 722 hsbw +-196 137 hstem +0 20 hstem +163 120 hstem +549 167 hstem +740 35 hstem +0 153 vstem +207 47 287 124 444 47 vstem3 +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-245 521 rmoveto +18 -39 63 -25 60 0 rrcurveto +61 0 59 20 23 44 rrcurveto +-47 0 rlineto +-27 -25 -34 -4 -35 0 rrcurveto +-35 0 -40 8 -19 21 rrcurveto +-47 0 rlineto +closepath +80 -1000 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/abrevedotbelow { +0 556 hsbw +-196 137 hstem +-12 97 hstem +249 89 hstem +425 105 hstem +586 142 hstem +36 141 204 123 358 133 vstem3 +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +5 479 rmoveto +-6 -47 -27 -23 -53 0 rrcurveto +-54 0 -27 23 -4 47 rrcurveto +-67 0 rlineto +8 -88 57 -54 87 0 rrcurveto +86 0 59 54 8 88 rrcurveto +-67 0 rlineto +closepath +-174 -924 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Edotbelow { +0 667 hsbw +-196 137 hstem +0 121 hstem +315 121 hstem +595 121 hstem +73 144 vstem +287 137 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +214 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/edotbelow { +0 556 hsbw +-196 137 hstem +-12 103 220 78 427 103 hstem3 +32 140 vstem +209 137 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-171 -500 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Ehookabove { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +742 54 hstem +854 51 hstem +73 144 vstem +311 55 vstem +373 82 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +266 799 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -72 21 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +45 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ehookabove { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +582 54 hstem +694 51 hstem +32 140 vstem +242 55 vstem +304 82 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-110 335 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -12 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Etilde { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +757 80 hstem +169 338 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +159 755 rmoveto +1 32 11 11 22 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +36 -15 22 -9 30 0 rrcurveto +50 0 37 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -19 5 -27 12 rrcurveto +-40 18 -15 7 -30 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/etilde { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +590 123 hstem +114 338 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-203 284 rmoveto +1 32 11 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +38 -14 20 -10 31 0 rrcurveto +50 0 37 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -19 5 -27 12 rrcurveto +-40 18 -15 7 -30 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/Ecircumflexacute { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +776 28 hstem +820 80 hstem +73 144 vstem +310 86 vstem +407 96 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +280 776 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-59 44 rmoveto +87 0 rlineto +126 80 rlineto +-154 0 rlineto +-59 -80 rlineto +closepath +endchar } ND +/ecircumflexacute { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +657 71 hstem +754 138 hstem +32 140 vstem +209 87 vstem +329 110 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-271 280 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +100 170 rmoveto +87 0 rlineto +130 138 rlineto +-154 0 rlineto +-63 -138 rlineto +closepath +endchar } ND +/Ecircumflexgrave { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +776 28 hstem +820 80 hstem +73 144 vstem +310 86 vstem +407 96 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +280 776 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +58 44 rmoveto +-58 80 rlineto +-154 0 rlineto +125 -80 rlineto +87 0 rlineto +closepath +endchar } ND +/ecircumflexgrave { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +657 71 hstem +754 138 hstem +32 140 vstem +109 330 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-271 280 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +231 170 rmoveto +-68 138 rlineto +-153 0 rlineto +134 -138 rlineto +87 0 rlineto +closepath +endchar } ND +/Ecircumflexhookabove { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +776 28 hstem +820 22 hstem +875 30 hstem +73 144 vstem +333 45 vstem +385 76 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +280 776 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-1 67 rmoveto +-19 -1 rlineto +0 -22 rlineto +45 0 rlineto +0 7 rlineto +56 7 27 15 0 22 rrcurveto +0 22 -46 12 -84 0 rrcurveto +-66 0 rlineto +6 -30 rlineto +42 0 rlineto +34 0 38 1 0 -18 rrcurveto +0 -6 -8 -4 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/ecircumflexhookabove { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +657 71 hstem +742 54 hstem +854 51 hstem +32 140 vstem +245 55 vstem +307 82 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-271 280 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +164 215 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +39 0 39 -5 0 -25 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ecircumflextilde { +0 667 hsbw +0 121 hstem +315 121 hstem +595 121 hstem +776 28 hstem +822 81 hstem +73 144 vstem +310 86 vstem +462 55 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +280 776 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-163 44 rmoveto +55 0 rlineto +3 24 12 13 22 0 rrcurveto +10 0 19 -5 29 -9 rrcurveto +33 -14 27 -7 21 0 rrcurveto +62 0 32 27 2 54 rrcurveto +-55 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-12 0 -19 3 -23 9 rrcurveto +-36 14 -27 7 -20 0 rrcurveto +-59 0 -42 -38 2 -44 rrcurveto +closepath +endchar } ND +/ecircumflextilde { +0 556 hsbw +-12 103 220 78 427 103 hstem3 +657 71 hstem +802 65 hstem +32 140 vstem +109 330 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-271 280 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +8 171 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +61 0 32 37 2 74 rrcurveto +-63 0 rlineto +-4 -28 -12 -14 -20 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -27 9 -20 0 rrcurveto +-60 0 -41 -46 2 -66 rrcurveto +closepath +endchar } ND +/Ecircumflexdotbelow { +0 667 hsbw +-196 137 hstem +0 121 hstem +315 121 hstem +595 121 hstem +776 28 hstem +73 144 vstem +287 137 vstem +73 0 rmoveto +544 0 rlineto +0 121 rlineto +-400 0 rlineto +0 194 rlineto +360 0 rlineto +0 121 rlineto +-360 0 rlineto +0 159 rlineto +387 0 rlineto +0 121 rlineto +-531 0 rlineto +0 -716 rlineto +closepath +280 776 rmoveto +54 -36 rlineto +96 0 rlineto +-107 64 rlineto +-86 0 rlineto +-107 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-66 -972 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/ecircumflexdotbelow { +0 556 hsbw +-196 137 hstem +-12 103 220 78 427 103 hstem3 +657 71 hstem +32 140 vstem +209 137 vstem +372 165 rmoveto +-15 -52 -30 -22 -42 0 rrcurveto +-64 0 -47 47 -2 82 rrcurveto +344 0 rlineto +4 209 -97 101 -153 0 rrcurveto +-138 0 -100 -103 0 -172 rrcurveto +0 -159 88 -108 163 0 rrcurveto +114 0 76 54 36 100 rrcurveto +-137 23 rlineto +closepath +8 139 rmoveto +-205 0 rlineto +-1 37 10 30 20 22 rrcurveto +19 21 25 11 30 0 rrcurveto +56 0 43 -43 3 -78 rrcurveto +closepath +-271 280 rmoveto +111 0 rlineto +52 73 rlineto +57 -73 rlineto +110 0 rlineto +-101 144 rlineto +-127 0 rlineto +-102 -144 rlineto +closepath +100 -780 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Ihookabove { +0 278 hsbw +0 20 hstem +696 20 hstem +742 54 hstem +854 51 hstem +120 54 vstem +182 81 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +79 799 rmoveto +-27 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +39 0 40 -4 0 -26 rrcurveto +0 -11 -10 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ihookabove { +0 278 hsbw +0 20 hstem +499 20 hstem +582 54 hstem +694 51 hstem +113 55 vstem +175 82 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +69 639 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -12 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Idotbelow { +0 278 hsbw +-196 137 hstem +0 20 hstem +696 20 hstem +72 137 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +4 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/idotbelow { +0 278 hsbw +-196 137 hstem +0 20 hstem +499 20 hstem +589 127 hstem +72 137 vstem +72 589 rmoveto +137 0 rlineto +0 127 rlineto +-137 0 rlineto +0 -127 rlineto +closepath +0 -589 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +0 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Odotbelow { +0 778 hsbw +-196 137 hstem +-12 123 hstem +604 124 hstem +43 149 326 128 588 149 vstem3 +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +124 -554 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/odotbelow { +0 611 hsbw +-196 137 hstem +-12 112 hstem +418 112 hstem +40 141 244 127 434 141 vstem3 +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +52 -455 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Ohookabove { +0 778 hsbw +-12 123 hstem +604 124 hstem +742 54 hstem +854 51 hstem +43 149 vstem +362 55 vstem +424 82 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +198 441 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ohookabove { +0 611 hsbw +-12 112 hstem +418 112 hstem +582 54 hstem +694 51 hstem +40 141 vstem +280 54 vstem +342 81 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +127 380 rmoveto +-28 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -12 -10 -7 -17 -4 rrcurveto +-7 -2 rlineto +closepath +endchar } ND +/Ocircumflexacute { +0 778 hsbw +-12 123 hstem +604 124 hstem +776 28 hstem +820 80 hstem +43 149 vstem +330 87 vstem +442 97 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +197 418 rmoveto +53 -36 rlineto +97 0 rlineto +-107 64 rlineto +-87 0 rlineto +-106 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-59 44 rmoveto +87 0 rlineto +125 80 rlineto +-153 0 rlineto +-59 -80 rlineto +closepath +endchar } ND +/ocircumflexacute { +0 611 hsbw +-12 112 hstem +418 112 hstem +657 71 hstem +754 138 hstem +40 141 vstem +243 87 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-39 325 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +101 170 rmoveto +87 0 rlineto +129 138 rlineto +-153 0 rlineto +-63 -138 rlineto +closepath +endchar } ND +/Ocircumflexgrave { +0 778 hsbw +-12 123 hstem +604 124 hstem +776 28 hstem +820 80 hstem +43 149 vstem +239 96 vstem +360 86 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +197 418 rmoveto +53 -36 rlineto +97 0 rlineto +-107 64 rlineto +-87 0 rlineto +-106 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +57 44 rmoveto +-57 80 rlineto +-154 0 rlineto +125 -80 rlineto +86 0 rlineto +closepath +endchar } ND +/ocircumflexgrave { +0 611 hsbw +-12 112 hstem +418 112 hstem +657 71 hstem +754 138 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-39 325 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +231 170 rmoveto +-67 138 rlineto +-154 0 rlineto +135 -138 rlineto +86 0 rlineto +closepath +endchar } ND +/Ocircumflexhookabove { +0 778 hsbw +-12 123 hstem +604 124 hstem +776 28 hstem +820 22 hstem +875 30 hstem +43 149 vstem +239 96 vstem +367 46 vstem +419 76 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +197 418 rmoveto +53 -36 rlineto +97 0 rlineto +-107 64 rlineto +-87 0 rlineto +-106 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-3 67 rmoveto +-19 -1 rlineto +0 -22 rlineto +46 0 rlineto +0 7 rlineto +56 7 26 15 0 22 rrcurveto +0 22 -45 12 -85 0 rrcurveto +-66 0 rlineto +6 -30 rlineto +42 0 rlineto +34 0 38 1 0 -18 rrcurveto +0 -6 -8 -4 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/ocircumflexhookabove { +0 611 hsbw +-12 112 hstem +418 112 hstem +657 71 hstem +742 54 hstem +854 51 hstem +40 141 vstem +278 55 vstem +340 82 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-39 325 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +164 215 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ocircumflextilde { +0 778 hsbw +-12 123 hstem +604 124 hstem +776 28 hstem +822 81 hstem +43 149 vstem +226 54 346 86 498 54 vstem3 +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +197 418 rmoveto +53 -36 rlineto +97 0 rlineto +-107 64 rlineto +-87 0 rlineto +-106 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-163 44 rmoveto +54 0 rlineto +4 24 12 13 21 0 rrcurveto +10 0 20 -5 28 -9 rrcurveto +34 -14 27 -7 21 0 rrcurveto +61 0 32 27 2 54 rrcurveto +-54 0 rlineto +-4 -23 -12 -11 -20 0 rrcurveto +-12 0 -18 4 -25 8 rrcurveto +-35 14 -27 7 -20 0 rrcurveto +-60 0 -41 -38 2 -44 rrcurveto +closepath +endchar } ND +/ocircumflextilde { +0 611 hsbw +-12 112 hstem +418 112 hstem +657 71 hstem +802 65 hstem +141 65 vstem +245 127 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-39 325 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +-1 171 rmoveto +65 0 rlineto +-1 31 12 16 26 0 rrcurveto +10 0 16 -6 22 -12 rrcurveto +33 -18 27 -9 21 0 rrcurveto +62 0 32 37 2 74 rrcurveto +-64 0 rlineto +-4 -28 -12 -14 -19 0 rrcurveto +-12 0 -15 4 -19 10 rrcurveto +-35 18 -28 9 -20 0 rrcurveto +-59 0 -40 -46 0 -66 rrcurveto +closepath +endchar } ND +/Ocircumflexdotbelow { +0 778 hsbw +-196 137 hstem +-12 123 hstem +604 124 hstem +776 28 hstem +43 149 326 128 588 149 vstem3 +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +197 418 rmoveto +53 -36 rlineto +97 0 rlineto +-107 64 rlineto +-87 0 rlineto +-106 -64 rlineto +96 0 rlineto +54 36 rlineto +closepath +-73 -972 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/ocircumflexdotbelow { +0 611 hsbw +-196 137 hstem +-12 112 hstem +418 112 hstem +657 71 hstem +40 141 244 127 434 141 vstem3 +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-39 325 rmoveto +111 0 rlineto +53 73 rlineto +56 -73 rlineto +111 0 rlineto +-101 144 rlineto +-127 0 rlineto +-103 -144 rlineto +closepath +91 -780 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Ohornacute { +0 853 hsbw +-12 123 hstem +604 124 hstem +757 146 hstem +43 149 vstem +302 87 vstem +588 146 vstem +782 71 vstem +192 358 rmoveto +0 145 62 101 137 0 rrcurveto +134 0 63 -98 0 -146 rrcurveto +0 -147 -65 -102 -132 0 rrcurveto +-133 0 -66 105 0 142 rrcurveto +closepath +524 358 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -47 -19 -32 -38 -17 rrcurveto +-42 153 -122 92 -169 0 rrcurveto +-223 0 -124 -149 0 -225 rrcurveto +0 -227 134 -139 215 0 rrcurveto +210 0 136 139 0 230 rrcurveto +0 22 -2 21 -2 20 rrcurveto +84 30 35 62 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +-414 41 rmoveto +87 0 rlineto +134 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/ohornacute { +0 711 hsbw +-12 112 hstem +418 112 hstem +582 146 hstem +40 141 vstem +238 87 vstem +640 71 vstem +181 259 rmoveto +0 90 44 69 83 0 rrcurveto +80 0 46 -69 0 -89 rrcurveto +0 -90 -45 -70 -81 0 rrcurveto +-84 0 -43 69 0 90 rrcurveto +closepath +393 260 rmoveto +0 -138 rlineto +66 0 rlineto +-2 -48 -21 -33 -42 -17 rrcurveto +-11 143 -109 104 -148 0 rrcurveto +-152 0 -115 -123 0 -140 rrcurveto +0 -177 115 -102 153 0 rrcurveto +135 0 112 94 17 133 rrcurveto +98 30 41 46 0 129 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-336 63 rmoveto +87 0 rlineto +134 146 rlineto +-153 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/Ohorngrave { +0 853 hsbw +-12 123 hstem +604 124 hstem +757 146 hstem +43 149 vstem +380 86 vstem +588 146 vstem +782 71 vstem +192 358 rmoveto +0 145 62 101 137 0 rrcurveto +134 0 63 -98 0 -146 rrcurveto +0 -147 -65 -102 -132 0 rrcurveto +-133 0 -66 105 0 142 rrcurveto +closepath +524 358 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -47 -19 -32 -38 -17 rrcurveto +-42 153 -122 92 -169 0 rrcurveto +-223 0 -124 -149 0 -225 rrcurveto +0 -227 134 -139 215 0 rrcurveto +210 0 136 139 0 230 rrcurveto +0 22 -2 21 -2 20 rrcurveto +84 30 35 62 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +-250 41 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/ohorngrave { +0 711 hsbw +-12 112 hstem +418 112 hstem +582 146 hstem +40 141 vstem +290 86 vstem +640 71 vstem +181 259 rmoveto +0 90 44 69 83 0 rrcurveto +80 0 46 -69 0 -89 rrcurveto +0 -90 -45 -70 -81 0 rrcurveto +-84 0 -43 69 0 90 rrcurveto +closepath +393 260 rmoveto +0 -138 rlineto +66 0 rlineto +-2 -48 -21 -33 -42 -17 rrcurveto +-11 143 -109 104 -148 0 rrcurveto +-152 0 -115 -123 0 -140 rrcurveto +0 -177 115 -102 153 0 rrcurveto +135 0 112 94 17 133 rrcurveto +98 30 41 46 0 129 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-198 63 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/Ohornhookabove { +0 853 hsbw +-12 123 hstem +604 124 hstem +742 54 hstem +854 51 hstem +43 149 vstem +362 55 vstem +424 82 vstem +588 146 vstem +782 71 vstem +192 358 rmoveto +0 145 62 101 137 0 rrcurveto +134 0 63 -98 0 -146 rrcurveto +0 -147 -65 -102 -132 0 rrcurveto +-133 0 -66 105 0 142 rrcurveto +closepath +524 358 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -47 -19 -32 -38 -17 rrcurveto +-42 153 -122 92 -169 0 rrcurveto +-223 0 -124 -149 0 -225 rrcurveto +0 -227 134 -139 215 0 rrcurveto +210 0 136 139 0 230 rrcurveto +0 22 -2 21 -2 20 rrcurveto +84 30 35 62 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +-326 83 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -11 -9 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/ohornhookabove { +0 711 hsbw +-12 112 hstem +418 112 hstem +582 54 hstem +694 51 hstem +40 141 vstem +280 54 vstem +342 81 vstem +640 71 vstem +181 259 rmoveto +0 90 44 69 83 0 rrcurveto +80 0 46 -69 0 -89 rrcurveto +0 -90 -45 -70 -81 0 rrcurveto +-84 0 -43 69 0 90 rrcurveto +closepath +393 260 rmoveto +0 -138 rlineto +66 0 rlineto +-2 -48 -21 -33 -42 -17 rrcurveto +-11 143 -109 104 -148 0 rrcurveto +-152 0 -115 -123 0 -140 rrcurveto +0 -177 115 -102 153 0 rrcurveto +135 0 112 94 17 133 rrcurveto +98 30 41 46 0 129 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-266 120 rmoveto +-28 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -12 -10 -7 -17 -4 rrcurveto +-7 -2 rlineto +closepath +endchar } ND +/Ohorntilde { +0 853 hsbw +-12 123 hstem +604 124 hstem +757 80 hstem +43 149 vstem +210 63 vstem +484 64 vstem +588 146 vstem +782 71 vstem +192 358 rmoveto +0 145 62 101 137 0 rrcurveto +134 0 63 -98 0 -146 rrcurveto +0 -147 -65 -102 -132 0 rrcurveto +-133 0 -66 105 0 142 rrcurveto +closepath +524 358 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -47 -19 -32 -38 -17 rrcurveto +-42 153 -122 92 -169 0 rrcurveto +-223 0 -124 -149 0 -225 rrcurveto +0 -227 134 -139 215 0 rrcurveto +210 0 136 139 0 230 rrcurveto +0 22 -2 21 -2 20 rrcurveto +84 30 35 62 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +-443 39 rmoveto +0 32 12 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +36 -16 21 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/ohorntilde { +0 711 hsbw +-12 112 hstem +418 112 hstem +590 123 hstem +139 63 vstem +413 64 vstem +640 71 vstem +181 259 rmoveto +0 90 44 69 83 0 rrcurveto +80 0 46 -69 0 -89 rrcurveto +0 -90 -45 -70 -81 0 rrcurveto +-84 0 -43 69 0 90 rrcurveto +closepath +393 260 rmoveto +0 -138 rlineto +66 0 rlineto +-2 -48 -21 -33 -42 -17 rrcurveto +-11 143 -109 104 -148 0 rrcurveto +-152 0 -115 -123 0 -140 rrcurveto +0 -177 115 -102 153 0 rrcurveto +135 0 112 94 17 133 rrcurveto +98 30 41 46 0 129 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-372 69 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 19 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-54 0 -35 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/Ohorndotbelow { +0 853 hsbw +-196 137 hstem +-12 123 hstem +604 124 hstem +43 152 326 128 588 146 vstem3 +782 71 vstem +192 358 rmoveto +0 145 62 101 137 0 rrcurveto +134 0 63 -98 0 -146 rrcurveto +0 -147 -65 -102 -132 0 rrcurveto +-133 0 -66 105 0 142 rrcurveto +closepath +524 358 rmoveto +0 -137 rlineto +66 0 rlineto +-2 -47 -19 -32 -38 -17 rrcurveto +-42 153 -122 92 -169 0 rrcurveto +-223 0 -124 -149 0 -225 rrcurveto +0 -227 134 -139 215 0 rrcurveto +210 0 136 139 0 230 rrcurveto +0 22 -2 21 -2 20 rrcurveto +84 30 35 62 0 106 rrcurveto +0 98 rlineto +-137 0 rlineto +closepath +-400 -912 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/ohorndotbelow { +0 711 hsbw +-196 137 hstem +-12 112 hstem +418 112 hstem +40 141 vstem +233 138 vstem +640 71 vstem +181 259 rmoveto +0 90 44 69 83 0 rrcurveto +80 0 46 -69 0 -89 rrcurveto +0 -90 -45 -70 -81 0 rrcurveto +-84 0 -43 69 0 90 rrcurveto +closepath +393 260 rmoveto +0 -138 rlineto +66 0 rlineto +-2 -48 -21 -33 -42 -17 rrcurveto +-11 143 -109 104 -148 0 rrcurveto +-152 0 -115 -123 0 -140 rrcurveto +0 -177 115 -102 153 0 rrcurveto +135 0 112 94 17 133 rrcurveto +98 30 41 46 0 129 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-341 -715 rmoveto +138 0 rlineto +0 137 rlineto +-138 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Udotbelow { +0 722 hsbw +-196 137 hstem +-12 123 hstem +696 20 hstem +72 144 292 131 499 144 vstem3 +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +220 -912 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/udotbelow { +0 611 hsbw +-196 137 hstem +-12 105 hstem +499 20 hstem +69 137 vstem +224 137 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-189 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Uhookabove { +0 722 hsbw +-12 123 hstem +696 20 hstem +742 54 hstem +854 51 hstem +72 144 vstem +330 54 vstem +392 81 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +285 83 rmoveto +-27 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +39 0 40 -4 0 -26 rrcurveto +0 -11 -10 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/uhookabove { +0 611 hsbw +-12 105 hstem +499 20 hstem +582 54 hstem +694 51 hstem +69 137 vstem +280 55 vstem +342 82 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-105 639 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -12 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Uhornacute { +0 830 hsbw +-12 123 hstem +405 55 hstem +579 137 hstem +757 146 hstem +72 144 vstem +269 86 vstem +498 145 vstem +759 71 vstem +692 716 rmoveto +0 -137 rlineto +67 0 rlineto +-3 -78 -38 -26 -75 -15 rrcurveto +0 256 rlineto +-145 0 rlineto +0 -396 rlineto +0 -138 -6 -71 -131 0 rrcurveto +-132 0 -13 60 0 157 rrcurveto +0 388 rlineto +-144 0 rlineto +0 -382 rlineto +0 -237 63 -109 231 0 rrcurveto +220 0 57 108 0 244 rrcurveto +0 65 rlineto +130 18 57 40 0 155 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +-423 41 rmoveto +86 0 rlineto +135 146 rlineto +-154 0 rlineto +-67 -146 rlineto +closepath +endchar } ND +/uhornacute { +0 724 hsbw +-12 105 hstem +208 56 hstem +381 138 hstem +582 146 hstem +69 137 vstem +235 87 vstem +413 128 vstem +653 71 vstem +587 519 rmoveto +0 -138 rlineto +66 0 rlineto +-3 -77 -37 -27 -72 -13 rrcurveto +0 255 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 68 0 119 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -129 49 -73 123 0 rrcurveto +74 0 57 30 41 60 rrcurveto +0 -78 rlineto +128 0 rlineto +0 208 rlineto +127 20 56 43 0 149 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-352 63 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/Uhorngrave { +0 830 hsbw +-12 123 hstem +405 55 hstem +579 137 hstem +757 146 hstem +72 144 vstem +347 86 vstem +498 145 vstem +759 71 vstem +692 716 rmoveto +0 -137 rlineto +67 0 rlineto +-3 -78 -38 -26 -75 -15 rrcurveto +0 256 rlineto +-145 0 rlineto +0 -396 rlineto +0 -138 -6 -71 -131 0 rrcurveto +-132 0 -13 60 0 157 rrcurveto +0 388 rlineto +-144 0 rlineto +0 -382 rlineto +0 -237 63 -109 231 0 rrcurveto +220 0 57 108 0 244 rrcurveto +0 65 rlineto +130 18 57 40 0 155 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +-259 41 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/uhorngrave { +0 724 hsbw +-12 105 hstem +208 56 hstem +381 138 hstem +582 146 hstem +69 137 vstem +288 86 vstem +413 128 vstem +653 71 vstem +587 519 rmoveto +0 -138 rlineto +66 0 rlineto +-3 -77 -37 -27 -72 -13 rrcurveto +0 255 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 68 0 119 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -129 49 -73 123 0 rrcurveto +74 0 57 30 41 60 rrcurveto +0 -78 rlineto +128 0 rlineto +0 208 rlineto +127 20 56 43 0 149 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-213 63 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/Uhornhookabove { +0 830 hsbw +-12 123 hstem +405 55 hstem +579 137 hstem +742 54 hstem +854 51 hstem +72 144 vstem +330 54 vstem +392 81 vstem +498 145 vstem +759 71 vstem +692 716 rmoveto +0 -137 rlineto +67 0 rlineto +-3 -78 -38 -26 -75 -15 rrcurveto +0 256 rlineto +-145 0 rlineto +0 -396 rlineto +0 -138 -6 -71 -131 0 rrcurveto +-132 0 -13 60 0 157 rrcurveto +0 388 rlineto +-144 0 rlineto +0 -382 rlineto +0 -237 63 -109 231 0 rrcurveto +220 0 57 108 0 244 rrcurveto +0 65 rlineto +130 18 57 40 0 155 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +-335 83 rmoveto +-27 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +39 0 40 -4 0 -26 rrcurveto +0 -11 -10 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/uhornhookabove { +0 724 hsbw +-12 105 hstem +208 56 hstem +381 138 hstem +582 54 hstem +694 51 hstem +69 137 vstem +280 55 vstem +342 82 vstem +653 71 vstem +587 519 rmoveto +0 -138 rlineto +66 0 rlineto +-3 -77 -37 -27 -72 -13 rrcurveto +0 255 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 68 0 119 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -129 49 -73 123 0 rrcurveto +74 0 57 30 41 60 rrcurveto +0 -78 rlineto +128 0 rlineto +0 208 rlineto +127 20 56 43 0 149 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-279 120 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -71 22 -70 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +46 0 rlineto +38 0 40 -4 0 -26 rrcurveto +0 -12 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Uhorntilde { +0 830 hsbw +-12 123 hstem +405 55 hstem +579 137 hstem +757 80 hstem +498 145 vstem +759 71 vstem +692 716 rmoveto +0 -137 rlineto +67 0 rlineto +-3 -78 -38 -26 -75 -15 rrcurveto +0 256 rlineto +-145 0 rlineto +0 -396 rlineto +0 -138 -6 -71 -131 0 rrcurveto +-132 0 -13 60 0 157 rrcurveto +0 388 rlineto +-144 0 rlineto +0 -382 rlineto +0 -237 63 -109 231 0 rrcurveto +220 0 57 108 0 244 rrcurveto +0 65 rlineto +130 18 57 40 0 155 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +-441 39 rmoveto +1 32 13 11 20 0 rrcurveto +14 0 27 -8 25 -9 rrcurveto +39 -14 19 -10 30 0 rrcurveto +52 0 35 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -19 5 -27 12 rrcurveto +-40 18 -15 7 -30 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/uhorntilde { +0 724 hsbw +-12 105 hstem +208 56 hstem +381 138 hstem +590 123 hstem +133 63 vstem +413 128 vstem +653 71 vstem +587 519 rmoveto +0 -138 rlineto +66 0 rlineto +-3 -77 -37 -27 -72 -13 rrcurveto +0 255 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 68 0 119 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -129 49 -73 123 0 rrcurveto +74 0 57 30 41 60 rrcurveto +0 -78 rlineto +128 0 rlineto +0 208 rlineto +127 20 56 43 0 149 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-391 69 rmoveto +0 32 13 11 20 0 rrcurveto +14 0 28 -7 24 -10 rrcurveto +38 -16 19 -8 32 0 rrcurveto +50 0 35 35 2 88 rrcurveto +-64 0 rlineto +-4 -31 -15 -12 -20 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/Uhorndotbelow { +0 830 hsbw +-196 137 hstem +-12 123 hstem +405 55 hstem +579 137 hstem +72 144 292 131 499 144 vstem3 +759 71 vstem +692 716 rmoveto +0 -137 rlineto +67 0 rlineto +-3 -78 -38 -26 -75 -15 rrcurveto +0 256 rlineto +-145 0 rlineto +0 -396 rlineto +0 -138 -6 -71 -131 0 rrcurveto +-132 0 -13 60 0 157 rrcurveto +0 388 rlineto +-144 0 rlineto +0 -382 rlineto +0 -237 63 -109 231 0 rrcurveto +220 0 57 108 0 244 rrcurveto +0 65 rlineto +130 18 57 40 0 155 rrcurveto +0 98 rlineto +-138 0 rlineto +closepath +-400 -912 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/uhorndotbelow { +0 724 hsbw +-196 137 hstem +-12 105 hstem +208 56 hstem +381 138 hstem +69 137 vstem +224 137 vstem +413 128 vstem +653 71 vstem +587 519 rmoveto +0 -138 rlineto +66 0 rlineto +-3 -77 -37 -27 -72 -13 rrcurveto +0 255 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 68 0 119 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -129 49 -73 123 0 rrcurveto +74 0 57 30 41 60 rrcurveto +0 -78 rlineto +128 0 rlineto +0 208 rlineto +127 20 56 43 0 149 rrcurveto +0 99 rlineto +-137 0 rlineto +closepath +-363 -715 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Ydotbelow { +0 667 hsbw +-196 137 hstem +0 433 hstem +696 20 hstem +-1 171 268 133 501 167 vstem3 +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +3 -196 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/ydotbelow { +0 556 hsbw +-210 109 hstem +499 20 hstem +7 146 vstem +385 137 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +378 -715 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/Yhookabove { +0 667 hsbw +0 433 hstem +696 20 hstem +742 54 hstem +854 51 hstem +-1 169 vstem +306 54 vstem +368 81 vstem +501 167 vstem +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +72 799 rmoveto +-27 -3 rlineto +0 -54 rlineto +54 0 rlineto +0 25 rlineto +60 7 29 21 0 34 rrcurveto +0 55 -71 21 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +5 -48 rlineto +46 0 rlineto +39 0 40 -4 0 -26 rrcurveto +0 -11 -10 -8 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/yhookabove { +0 556 hsbw +-210 109 hstem +499 20 hstem +582 54 hstem +694 51 hstem +7 146 vstem +248 55 vstem +310 82 vstem +398 142 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +269 120 rmoveto +-28 -3 rlineto +0 -54 rlineto +55 0 rlineto +0 24 rlineto +60 8 29 20 0 34 rrcurveto +0 55 -72 22 -70 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +6 -48 rlineto +45 0 rlineto +40 0 39 -4 0 -26 rrcurveto +0 -12 -9 -7 -17 -4 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/Ytilde { +0 667 hsbw +0 433 hstem +696 20 hstem +757 80 hstem +-1 169 vstem +179 63 vstem +261 144 vstem +454 63 vstem +261 0 rmoveto +144 0 rlineto +0 300 rlineto +263 416 rlineto +-167 0 rlineto +-165 -283 rlineto +-168 283 rlineto +-169 0 rlineto +262 -415 rlineto +0 -301 rlineto +closepath +-19 755 rmoveto +1 32 11 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +36 -16 23 -8 30 0 rrcurveto +50 0 37 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -20 5 -26 12 rrcurveto +-39 18 -15 7 -31 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/ytilde { +0 556 hsbw +-210 109 hstem +499 20 hstem +590 123 hstem +114 338 vstem +7 519 rmoveto +197 -520 rlineto +-16 -58 -26 -42 -64 0 rrcurveto +-18 0 -19 2 -21 4 rrcurveto +12 -107 rlineto +25 -5 26 -3 27 0 rrcurveto +94 0 61 40 39 99 rrcurveto +33 91 rlineto +183 499 rlineto +-142 0 rlineto +-121 -369 rlineto +-124 369 rlineto +-146 0 rlineto +closepath +170 69 rmoveto +1 32 11 11 22 0 rrcurveto +13 0 27 -8 25 -9 rrcurveto +38 -14 20 -10 31 0 rrcurveto +50 0 37 35 0 88 rrcurveto +-63 0 rlineto +-4 -31 -15 -12 -21 0 rrcurveto +-15 0 -19 5 -27 12 rrcurveto +-40 18 -15 7 -30 0 rrcurveto +-52 0 -37 -38 0 -68 rrcurveto +0 -18 rlineto +63 0 rlineto +closepath +endchar } ND +/uni01CD { +0 722 hsbw +0 20 hstem +163 120 hstem +549 167 hstem +760 144 hstem +0 153 vstem +190 111 vstem +410 111 vstem +561 157 vstem +718 0 rmoveto +-286 716 rlineto +-153 0 rlineto +-279 -716 rlineto +153 0 rlineto +59 163 rlineto +287 0 rlineto +62 -163 rlineto +157 0 rlineto +closepath +-266 283 rmoveto +-195 0 rlineto +97 266 rlineto +98 -266 rlineto +closepath +-262 621 rmoveto +102 -144 rlineto +127 0 rlineto +102 144 rlineto +-111 0 rlineto +-56 -72 rlineto +-53 72 rlineto +-111 0 rlineto +closepath +endchar } ND +/uni01CE { +0 556 hsbw +-12 97 hstem +249 89 hstem +425 105 hstem +584 144 hstem +36 137 vstem +358 133 vstem +174 360 rmoveto +17 48 24 17 50 0 rrcurveto +72 0 21 -20 0 -53 rrcurveto +0 -14 rlineto +-25 -10 -45 -10 -63 -13 rrcurveto +-115 -24 -74 -41 0 -98 rrcurveto +0 -90 65 -64 107 0 rrcurveto +60 0 54 22 48 47 rrcurveto +0 -6 rlineto +2 -2 1 -4 1 -4 rrcurveto +4 -18 5 -14 4 -9 rrcurveto +135 0 rlineto +-24 49 -7 30 0 91 rrcurveto +0 161 rlineto +0 165 -65 34 -152 0 rrcurveto +-135 0 -61 -47 -28 -100 rrcurveto +124 -23 rlineto +closepath +184 -111 rmoveto +0 -27 rlineto +0 -102 -46 -35 -63 0 rrcurveto +-44 0 -32 32 0 39 rrcurveto +0 44 46 15 55 13 rrcurveto +34 7 33 8 17 6 rrcurveto +closepath +-245 479 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-52 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/uni01CF { +0 278 hsbw +0 20 hstem +696 20 hstem +760 144 hstem +68 145 vstem +68 0 rmoveto +145 0 rlineto +0 716 rlineto +-145 0 rlineto +0 -716 rlineto +closepath +-94 904 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -72 rlineto +-53 72 rlineto +-110 0 rlineto +closepath +endchar } ND +/uni01D0 { +0 278 hsbw +0 20 hstem +499 20 hstem +584 144 hstem +72 137 vstem +72 0 rmoveto +137 0 rlineto +0 519 rlineto +-137 0 rlineto +0 -519 rlineto +closepath +-98 728 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -73 rlineto +-53 73 rlineto +-110 0 rlineto +closepath +endchar } ND +/uni01D1 { +0 778 hsbw +-12 123 hstem +604 124 hstem +760 144 hstem +43 149 vstem +224 110 vstem +444 110 vstem +588 150 vstem +43 354 rmoveto +0 -228 135 -138 214 0 rrcurveto +209 0 137 138 0 231 rrcurveto +0 233 -138 138 -210 0 rrcurveto +-215 0 -132 -151 0 -223 rrcurveto +closepath +149 4 rmoveto +0 165 80 81 119 0 rrcurveto +118 0 79 -80 0 -164 rrcurveto +0 -166 -81 -83 -116 0 rrcurveto +-115 0 -84 85 0 162 rrcurveto +closepath +32 546 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -72 rlineto +-53 72 rlineto +-110 0 rlineto +closepath +endchar } ND +/uni01D2 { +0 611 hsbw +-12 112 hstem +418 112 hstem +584 144 hstem +40 141 vstem +434 141 vstem +40 267 rmoveto +0 -167 120 -112 148 0 rrcurveto +153 0 114 115 0 158 rrcurveto +0 154 -111 115 -157 0 rrcurveto +-149 0 -118 -126 0 -137 rrcurveto +closepath +141 -8 rmoveto +0 102 55 57 72 0 rrcurveto +70 0 56 -57 0 -101 rrcurveto +0 -104 -56 -56 -70 0 rrcurveto +-72 0 -55 56 0 103 rrcurveto +closepath +-41 469 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/uni01D3 { +0 722 hsbw +-12 123 hstem +696 20 hstem +760 144 hstem +72 144 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +124 188 rmoveto +102 -144 rlineto +127 0 rlineto +101 144 rlineto +-110 0 rlineto +-57 -72 rlineto +-52 72 rlineto +-111 0 rlineto +closepath +endchar } ND +/uni01D4 { +0 611 hsbw +-12 105 hstem +499 20 hstem +584 144 hstem +69 137 vstem +413 128 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-273 728 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -73 rlineto +-53 73 rlineto +-111 0 rlineto +closepath +endchar } ND +/uni01D5 { +0 722 hsbw +-12 123 hstem +696 20 hstem +730 75 hstem +840 60 hstem +72 144 vstem +228 68 vstem +417 68 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +410 124 rmoveto +0 60 rlineto +-252 0 rlineto +0 -60 rlineto +252 0 rlineto +closepath +3 -110 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +-189 0 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01D6 { +0 611 hsbw +-12 105 hstem +499 20 hstem +610 118 hstem +810 90 hstem +141 117 vstem +351 118 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-272 610 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +-203 200 rmoveto +314 0 rlineto +0 90 rlineto +-314 0 rlineto +0 -90 rlineto +closepath +endchar } ND +/uni01D7 { +0 722 hsbw +-12 123 hstem +696 20 hstem +730 75 hstem +813 87 hstem +72 144 vstem +228 68 vstem +304 73 vstem +417 68 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +418 184 rmoveto +-120 0 rlineto +-66 -87 rlineto +73 0 rlineto +113 87 rlineto +closepath +-5 -170 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +-189 0 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01D8 { +0 611 hsbw +-12 105 hstem +499 20 hstem +610 118 hstem +754 146 hstem +141 117 vstem +351 118 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-272 610 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +-116 144 rmoveto +87 0 rlineto +135 146 rlineto +-154 0 rlineto +-68 -146 rlineto +closepath +endchar } ND +/uni01D9 { +0 722 hsbw +-12 123 hstem +696 20 hstem +730 75 hstem +814 86 hstem +72 144 vstem +228 68 305 103 417 68 vstem3 +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +413 14 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +2 170 rmoveto +-91 0 rlineto +-39 -47 rlineto +-39 47 rlineto +-92 0 rlineto +76 -86 rlineto +106 0 rlineto +79 86 rlineto +closepath +-191 -170 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01DA { +0 611 hsbw +-12 105 hstem +499 20 hstem +610 118 hstem +756 144 hstem +141 117 vstem +351 118 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-272 610 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +-211 290 rmoveto +103 -144 rlineto +127 0 rlineto +101 144 rlineto +-111 0 rlineto +-56 -72 rlineto +-53 72 rlineto +-111 0 rlineto +closepath +endchar } ND +/uni01DB { +0 722 hsbw +-12 123 hstem +696 20 hstem +730 75 hstem +813 87 hstem +72 144 vstem +228 68 vstem +336 73 vstem +417 68 vstem +498 145 vstem +72 716 rmoveto +0 -382 rlineto +0 -235 62 -111 232 0 rrcurveto +211 0 66 106 0 246 rrcurveto +0 376 rlineto +-145 0 rlineto +0 -396 rlineto +0 -137 -14 -72 -123 0 rrcurveto +-132 0 -13 61 0 156 rrcurveto +0 388 rlineto +-144 0 rlineto +closepath +413 14 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +-76 83 rmoveto +-66 87 rlineto +-120 0 rlineto +113 -87 rlineto +73 0 rlineto +closepath +-113 -83 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01DC { +0 611 hsbw +-12 105 hstem +499 20 hstem +610 118 hstem +754 146 hstem +141 117 vstem +351 118 vstem +413 0 rmoveto +128 0 rlineto +0 519 rlineto +-138 0 rlineto +0 -219 rlineto +0 -143 -18 -64 -93 0 rrcurveto +-92 0 6 59 0 128 rrcurveto +0 239 rlineto +-137 0 rlineto +0 -329 rlineto +0 -127 64 -75 108 0 rrcurveto +68 0 66 34 38 56 rrcurveto +0 -78 rlineto +closepath +-272 610 rmoveto +117 0 rlineto +0 118 rlineto +-117 0 rlineto +0 -118 rlineto +closepath +210 0 rmoveto +118 0 rlineto +0 118 rlineto +-118 0 rlineto +0 -118 rlineto +closepath +23 144 rmoveto +-67 146 rlineto +-154 0 rlineto +135 -146 rlineto +86 0 rlineto +closepath +endchar } ND +/_1292 { +0 0 hsbw +730 75 hstem +840 60 hstem +-128 68 vstem +60 68 vstem +126 840 rmoveto +0 60 rlineto +-252 0 rlineto +0 -60 rlineto +252 0 rlineto +closepath +2 -110 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +-188 0 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/_1293 { +0 0 hsbw +730 75 hstem +813 87 hstem +-128 68 vstem +-53 74 vstem +60 68 vstem +133 900 rmoveto +-120 0 rlineto +-66 -87 rlineto +74 0 rlineto +112 87 rlineto +closepath +-5 -170 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +-188 0 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/_1294 { +0 0 hsbw +730 75 hstem +814 86 hstem +-128 68 -52 104 60 68 vstem3 +128 730 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +3 170 rmoveto +-91 0 rlineto +-39 -47 rlineto +-40 47 rlineto +-92 0 rlineto +76 -86 rlineto +107 0 rlineto +79 86 rlineto +closepath +-191 -170 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/_1295 { +0 0 hsbw +730 75 hstem +813 87 hstem +-128 68 vstem +-21 74 vstem +60 68 vstem +128 730 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +-75 83 rmoveto +-66 87 rlineto +-120 0 rlineto +112 -87 rlineto +74 0 rlineto +closepath +-113 -83 rmoveto +0 75 rlineto +-68 0 rlineto +0 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni0492 { +0 567 hsbw +0 403 hstem +596 120 hstem +80 145 vstem +565 596 rmoveto +0 120 rlineto +-485 0 rlineto +0 -313 rlineto +-81 0 rlineto +0 -90 rlineto +81 0 rlineto +0 -313 rlineto +145 0 rlineto +0 313 rlineto +144 0 rlineto +0 90 rlineto +-144 0 rlineto +0 193 rlineto +340 0 rlineto +closepath +endchar } ND +/uni0493 { +0 417 hsbw +0 296 hstem +408 111 hstem +66 138 vstem +417 408 rmoveto +0 111 rlineto +-351 0 rlineto +0 -223 rlineto +-63 0 rlineto +0 -85 rlineto +63 0 rlineto +0 -211 rlineto +138 0 rlineto +0 211 rlineto +89 0 rlineto +0 85 rlineto +-89 0 rlineto +0 112 rlineto +213 0 rlineto +closepath +endchar } ND +/uni0496 { +0 904 hsbw +0 411 hstem +614 106 hstem +11 170 vstem +381 141 vstem +772 120 vstem +892 -156 rmoveto +0 276 rlineto +-59 0 rlineto +-38 76 rlineto +-50 96 -31 58 -68 19 rrcurveto +47 25 15 24 21 60 rrcurveto +33 95 12 41 90 0 rrcurveto +21 0 rlineto +0 106 rlineto +-21 0 rlineto +-145 0 -39 -31 -52 -142 rrcurveto +-35 -96 -12 -36 -59 -4 rrcurveto +0 305 rlineto +-141 0 rlineto +0 -305 rlineto +-59 3 -11 40 -36 93 rrcurveto +-54 139 -36 34 -145 0 rrcurveto +-21 0 rlineto +0 -106 rlineto +18 0 rlineto +72 0 20 -3 28 -84 rrcurveto +4 -12 6 -16 8 -21 rrcurveto +19 -51 27 -38 37 -20 rrcurveto +-68 -20 -33 -56 -48 -97 rrcurveto +-98 -196 rlineto +170 0 rlineto +86 185 rlineto +1 2 1 2 2 3 rrcurveto +2 1 2 3 0 4 rrcurveto +8 16 40 97 58 0 rrcurveto +0 -313 rlineto +141 0 rlineto +0 313 rlineto +44 0 16 -28 29 -51 rrcurveto +8 -18 5 -11 4 -5 rrcurveto +3 -8 4 -5 2 -2 rrcurveto +86 -185 rlineto +49 0 rlineto +0 -156 rlineto +120 0 rlineto +closepath +endchar } ND +/uni0497 { +0 709 hsbw +0 307 hstem +429 93 hstem +0 147 vstem +287 136 vstem +598 111 vstem +709 -137 rmoveto +0 248 rlineto +-54 0 rlineto +-18 32 rlineto +-32 72 -38 41 -46 10 rrcurveto +30 11 23 28 16 49 rrcurveto +22 68 8 7 72 0 rrcurveto +0 93 rlineto +-54 0 rlineto +-82 0 -28 -34 -30 -86 rrcurveto +-24 -69 -8 -26 -43 0 rrcurveto +0 212 rlineto +-136 0 rlineto +0 -212 rlineto +-44 0 -7 28 -24 67 rrcurveto +-30 83 -29 37 -79 0 rrcurveto +-57 0 rlineto +0 -93 rlineto +73 0 6 -4 24 -71 rrcurveto +16 -47 22 -30 30 -11 rrcurveto +-41 -11 -38 -41 -36 -71 rrcurveto +-73 -143 rlineto +147 0 rlineto +65 150 rlineto +18 41 8 25 49 5 rrcurveto +0 -221 rlineto +136 0 rlineto +0 221 rlineto +39 -4 15 -19 21 -48 rrcurveto +65 -150 rlineto +35 0 rlineto +0 -137 rlineto +111 0 rlineto +closepath +endchar } ND +/uni049a { +0 610 hsbw +0 411 hstem +614 106 hstem +75 145 vstem +479 121 vstem +600 -156 rmoveto +0 276 rlineto +-60 0 rlineto +-36 76 rlineto +-40 80 -33 70 -76 23 rrcurveto +47 25 15 23 21 61 rrcurveto +33 95 12 41 91 0 rrcurveto +20 0 rlineto +0 106 rlineto +-21 0 rlineto +-176 0 -51 -146 -34 -90 rrcurveto +-25 -67 -18 -2 -49 -4 rrcurveto +0 305 rlineto +-145 0 rlineto +0 -716 rlineto +145 0 rlineto +0 313 rlineto +53 0 17 -19 30 -60 rrcurveto +10 -20 5 -10 3 -4 rrcurveto +3 -3 2 -3 0 -4 rrcurveto +1 -2 1 -2 1 -1 rrcurveto +86 -185 rlineto +47 0 rlineto +0 -156 rlineto +121 0 rlineto +closepath +endchar } ND +/uni049b { +0 500 hsbw +0 307 hstem +429 93 hstem +66 137 vstem +390 110 vstem +500 -137 rmoveto +0 248 rlineto +-58 0 rlineto +-18 32 rlineto +-1 2 -1 2 -1 1 rrcurveto +-2 1 0 2 0 2 rrcurveto +-30 63 -37 38 -43 12 rrcurveto +30 11 23 28 16 49 rrcurveto +22 68 8 7 71 0 rrcurveto +0 93 rlineto +-54 0 rlineto +-83 0 -26 -37 -30 -83 rrcurveto +-24 -67 -8 -24 -51 -4 rrcurveto +0 212 rlineto +-137 0 rlineto +0 -519 rlineto +137 0 rlineto +0 221 rlineto +44 0 15 -20 23 -51 rrcurveto +69 -150 rlineto +36 0 rlineto +0 -137 rlineto +110 0 rlineto +closepath +endchar } ND +/uni049c { +0 610 hsbw +0 411 hstem +614 20 hstem +700 20 hstem +75 145 vstem +264 51 vstem +432 170 vstem +602 0 rmoveto +-98 196 rlineto +-50 98 -31 56 -68 19 rrcurveto +47 25 15 23 21 61 rrcurveto +33 95 12 41 91 0 rrcurveto +20 0 rlineto +0 106 rlineto +-21 0 rlineto +-145 0 -35 -35 -55 -138 rrcurveto +-4 -10 -4 -9 -4 -9 rrcurveto +-5 -8 -3 -9 -3 -9 rrcurveto +0 121 rlineto +-51 0 rlineto +0 -193 rlineto +-12 -5 -15 -3 -17 -2 rrcurveto +0 305 rlineto +-145 0 rlineto +0 -716 rlineto +145 0 rlineto +0 313 rlineto +18 0 14 -3 12 -4 rrcurveto +0 -204 rlineto +51 0 rlineto +0 140 rlineto +8 -12 6 -11 4 -11 rrcurveto +4 -10 5 -8 4 -5 rrcurveto +86 -185 rlineto +170 0 rlineto +closepath +endchar } ND +/uni049d { +0 500 hsbw +0 307 hstem +429 93 hstem +66 137 vstem +237 37 vstem +354 147 vstem +501 0 rmoveto +-77 143 rlineto +-38 71 -25 37 -52 15 rrcurveto +30 11 23 28 16 49 rrcurveto +22 68 8 7 71 0 rrcurveto +0 93 rlineto +-54 0 rlineto +-83 0 -28 -37 -28 -83 rrcurveto +-4 -12 -4 -9 -4 -9 rrcurveto +0 89 rlineto +-37 0 rlineto +0 -145 rlineto +-9 -5 -11 -3 -14 -1 rrcurveto +0 212 rlineto +-137 0 rlineto +0 -519 rlineto +137 0 rlineto +0 221 rlineto +14 0 11 -2 9 -4 rrcurveto +0 -149 rlineto +37 0 rlineto +0 106 rlineto +2 -3 2 -4 2 -4 rrcurveto +1 -3 2 -4 2 -4 rrcurveto +69 -150 rlineto +147 0 rlineto +closepath +endchar } ND +/uni04a2 { +0 722 hsbw +0 434 hstem +696 20 hstem +73 145 vstem +584 120 vstem +704 -156 rmoveto +0 276 rlineto +-58 0 rlineto +0 596 rlineto +-145 0 rlineto +0 -282 rlineto +-283 0 rlineto +0 282 rlineto +-145 0 rlineto +0 -716 rlineto +145 0 rlineto +0 313 rlineto +283 0 rlineto +0 -313 rlineto +83 0 rlineto +0 -156 rlineto +120 0 rlineto +closepath +endchar } ND +/uni04a3 { +0 604 hsbw +0 329 hstem +499 20 hstem +66 138 vstem +480 111 vstem +591 -137 rmoveto +0 248 rlineto +-53 0 rlineto +0 408 rlineto +-138 0 rlineto +0 -190 rlineto +-196 0 rlineto +0 190 rlineto +-138 0 rlineto +0 -519 rlineto +138 0 rlineto +0 218 rlineto +196 0 rlineto +0 -218 rlineto +80 0 rlineto +0 -137 rlineto +111 0 rlineto +closepath +endchar } ND +/uni04ae { +0 556 hsbw +0 439 hstem +696 20 hstem +0 152 209 134 401 150 vstem3 +551 716 rmoveto +-150 0 rlineto +-100 -208 rlineto +-11 -23 -9 -23 -6 -23 rrcurveto +-5 19 -9 23 -12 27 rrcurveto +-98 208 rlineto +-151 0 rlineto +206 -416 rlineto +0 -300 rlineto +137 0 rlineto +0 300 rlineto +208 416 rlineto +closepath +endchar } ND +/uni04af { +0 556 hsbw +-197 348 hstem +499 20 hstem +6 147 212 132 406 141 vstem3 +547 519 rmoveto +-141 0 rlineto +-127 -368 rlineto +-126 368 rlineto +-144 0 rlineto +203 -519 rlineto +0 -197 rlineto +137 0 rlineto +0 197 rlineto +198 519 rlineto +closepath +endchar } ND +/uni04b0 { +0 556 hsbw +0 439 hstem +696 20 hstem +0 152 209 134 401 150 vstem3 +551 716 rmoveto +-150 0 rlineto +-100 -208 rlineto +-11 -23 -9 -23 -6 -23 rrcurveto +-5 19 -9 23 -12 27 rrcurveto +-98 208 rlineto +-151 0 rlineto +152 -308 rlineto +-127 0 rlineto +0 -108 rlineto +181 0 rlineto +0 -300 rlineto +137 0 rlineto +0 300 rlineto +184 0 rlineto +0 108 rlineto +-130 0 rlineto +154 308 rlineto +closepath +endchar } ND +/uni04b1 { +0 556 hsbw +-197 197 hstem +499 20 hstem +6 147 212 132 406 141 vstem3 +547 519 rmoveto +-141 0 rlineto +-127 -368 rlineto +-126 368 rlineto +-144 0 rlineto +203 -519 rlineto +-153 0 rlineto +0 -91 rlineto +153 0 rlineto +0 -106 rlineto +137 0 rlineto +0 106 rlineto +153 0 rlineto +0 91 rlineto +-153 0 rlineto +198 519 rlineto +closepath +endchar } ND +/uni04b2 { +0 667 hsbw +0 20 hstem +696 20 hstem +23 169 vstem +544 120 vstem +664 -156 rmoveto +0 276 rlineto +-77 0 rlineto +-166 248 rlineto +223 348 rlineto +-168 0 rlineto +-141 -230 rlineto +-143 230 rlineto +-169 0 rlineto +222 -342 rlineto +-245 -374 rlineto +173 0 rlineto +160 248 rlineto +158 -248 rlineto +53 0 rlineto +0 -156 rlineto +120 0 rlineto +closepath +endchar } ND +/uni04b3 { +0 556 hsbw +0 20 161 197 499 20 hstem3 +6 161 vstem +436 111 vstem +547 -137 rmoveto +0 248 rlineto +-76 0 rlineto +-116 162 rlineto +176 246 rlineto +-161 0 rlineto +-97 -143 rlineto +-92 143 rlineto +-167 0 rlineto +179 -252 rlineto +-187 -267 rlineto +161 0 rlineto +106 161 rlineto +105 -161 rlineto +58 0 rlineto +0 -137 rlineto +111 0 rlineto +closepath +endchar } ND +/uni04b8 { +0 703 hsbw +0 407 hstem +696 20 hstem +60 146 301 85 482 144 vstem3 +626 0 rmoveto +0 716 rlineto +-144 0 rlineto +0 -309 rlineto +-25 -18 -31 -12 -36 -5 rrcurveto +0 196 rlineto +-89 0 rlineto +0 -198 rlineto +-88 11 -7 35 0 129 rrcurveto +0 171 rlineto +-145 0 rlineto +0 -242 rlineto +0 -146 80 -75 160 -4 rrcurveto +0 -139 rlineto +89 0 rlineto +0 147 rlineto +6 2 rlineto +28 6 28 10 30 13 rrcurveto +0 -288 rlineto +144 0 rlineto +closepath +endchar } ND +/uni04b9 { +0 581 hsbw +0 297 hstem +499 20 hstem +56 138 262 48 378 138 vstem3 +516 0 rmoveto +0 519 rlineto +-138 0 rlineto +0 -222 rlineto +-23 -8 -21 -5 -20 -2 rrcurveto +0 135 rlineto +-52 0 rlineto +0 -132 rlineto +-47 8 -21 38 0 64 rrcurveto +0 124 rlineto +-138 0 rlineto +0 -124 rlineto +0 -142 83 -67 117 0 rrcurveto +6 0 rlineto +0 -103 rlineto +52 0 rlineto +0 109 rlineto +17 3 21 5 26 7 rrcurveto +0 -207 rlineto +138 0 rlineto +closepath +endchar } ND +/uni04ba { +0 703 hsbw +0 428 hstem +696 20 hstem +76 145 vstem +496 146 vstem +642 0 rmoveto +0 242 rlineto +0 150 -84 75 -167 0 rrcurveto +-54 0 -57 -13 -59 -26 rrcurveto +0 288 rlineto +-145 0 rlineto +0 -716 rlineto +145 0 rlineto +0 309 rlineto +35 26 48 13 62 0 rrcurveto +72 0 58 -24 0 -67 rrcurveto +0 -257 rlineto +146 0 rlineto +closepath +endchar } ND +/uni04bb { +0 581 hsbw +0 312 hstem +499 20 hstem +65 137 vstem +386 139 vstem +525 0 rmoveto +0 124 rlineto +0 134 -85 75 -116 0 rrcurveto +-28 0 -41 -7 -53 -14 rrcurveto +0 207 rlineto +-137 0 rlineto +0 -519 rlineto +137 0 rlineto +0 221 rlineto +30 11 28 6 24 0 rrcurveto +67 0 35 -33 0 -81 rrcurveto +0 -124 rlineto +139 0 rlineto +closepath +endchar } ND +/uni018f { +0 726 hsbw +-12 122 hstem +297 120 hstem +603 125 hstem +43 153 vstem +533 153 vstem +686 354 rmoveto +0 217 -120 157 -212 0 rrcurveto +-147 0 -113 -72 -32 -138 rrcurveto +143 -33 rlineto +24 78 51 40 78 0 rrcurveto +103 0 61 -78 11 -108 rrcurveto +-484 0 rlineto +-4 -28 -2 -21 0 -14 rrcurveto +0 -207 111 -159 207 0 rrcurveto +205 0 120 144 0 222 rrcurveto +closepath +-153 -57 rmoveto +-18 -131 -62 -56 -92 0 rrcurveto +-83 0 -66 59 -16 128 rrcurveto +337 0 rlineto +closepath +endchar } ND +/uni0259 { +0 556 hsbw +-12 108 222 77 428 102 hstem3 +383 141 vstem +524 263 rmoveto +0 158 -87 109 -165 0 rrcurveto +-114 0 -75 -52 -36 -102 rrcurveto +137 -22 rlineto +14 49 29 25 44 0 rrcurveto +69 0 42 -57 1 -72 rrcurveto +-343 0 rlineto +-2 -92 17 -73 36 -53 rrcurveto +42 -62 65 -31 88 0 rrcurveto +151 0 87 120 0 155 rrcurveto +closepath +-143 -48 rmoveto +0 -67 -36 -55 -67 0 rrcurveto +-66 0 -36 55 0 67 rrcurveto +205 0 rlineto +closepath +endchar } ND +/uni04e8 { +0 778 hsbw +-12 123 hstem +297 121 hstem +604 124 hstem +42 153 vstem +583 153 vstem +736 357 rmoveto +0 221 -128 150 -220 0 rrcurveto +-225 0 -121 -149 0 -225 rrcurveto +0 -215 127 -151 231 0 rrcurveto +211 0 125 154 0 215 rrcurveto +closepath +-153 61 rmoveto +-388 0 rlineto +12 112 71 74 112 0 rrcurveto +111 0 67 -72 15 -114 rrcurveto +closepath +0 -121 rmoveto +-17 -115 -73 -71 -103 0 rrcurveto +-105 0 -75 71 -15 115 rrcurveto +388 0 rlineto +closepath +endchar } ND +/uni04e9 { +0 611 hsbw +-12 112 220 78 418 112 hstem3 +40 144 vstem +431 144 vstem +575 261 rmoveto +0 157 -111 112 -157 0 rrcurveto +-152 0 -115 -123 0 -140 rrcurveto +0 -175 116 -104 152 0 rrcurveto +156 0 111 117 0 156 rrcurveto +closepath +-144 43 rmoveto +-247 0 rlineto +10 67 51 47 63 0 rrcurveto +63 0 49 -48 11 -66 rrcurveto +closepath +0 -84 rmoveto +-12 -72 -43 -48 -68 0 rrcurveto +-70 0 -46 49 -8 71 rrcurveto +247 0 rlineto +closepath +endchar } ND +end +end +readonly put +noaccess put +dup/FontName get exch definefont pop +mark currentfile closefile +cleartomark diff --git a/fonts/arial_ce_bi.afm b/fonts/arial_ce_bi.afm new file mode 100644 index 0000000..4f3530f --- /dev/null +++ b/fonts/arial_ce_bi.afm @@ -0,0 +1,1841 @@ +StartFontMetrics 4.1 +FontName Arial-BoldItalicMT +FullName Arial Bold Italic +Notice Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +EncodingScheme FontSpecific +FamilyName Arial +Weight Bold Italic +Version (Version 2.90) +Characters 956 +ItalicAngle -12.0 +Ascender 905 +Descender -212 +UnderlineThickness 105 +UnderlinePosition -106 +IsFixedPitch false +FontBBox -560 -376 1157 1000 +StartCharMetrics 998 +C 0 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 1 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 2 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 3 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 4 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 5 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 6 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 7 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 8 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 9 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 10 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 11 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 12 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 13 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 14 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 15 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 16 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 17 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 18 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 19 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 20 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 21 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 22 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 23 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 24 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 25 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 26 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 27 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 28 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 29 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 30 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 31 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 32 ; WX 278 ; N space ; B 62 0 353 716 ; +C 33 ; WX 333 ; N exclam ; B 62 0 353 716 ; +C 34 ; WX 474 ; N quotedbl ; B 151 461 507 716 ; +C 35 ; WX 556 ; N numbersign ; B 9 -12 544 728 ; +C 36 ; WX 556 ; N dollar ; B 44 -99 576 770 ; +C 37 ; WX 889 ; N percent ; B 91 -31 864 728 ; +C 38 ; WX 722 ; N ampersand ; B 83 -17 706 728 ; +C 39 ; WX 238 ; N quotesingle ; B 151 461 329 716 ; +C 40 ; WX 333 ; N parenleft ; B 66 -210 436 728 ; +C 41 ; WX 333 ; N parenright ; B -78 -210 292 728 ; +C 42 ; WX 389 ; N asterisk ; B 14 387 368 728 ; +C 43 ; WX 584 ; N plus ; B 42 103 542 604 ; +C 44 ; WX 278 ; N comma ; B 10 -155 212 135 ; +C 45 ; WX 333 ; N hyphen ; B 39 190 339 326 ; +C 46 ; WX 278 ; N period ; B 44 0 211 135 ; +C 47 ; WX 278 ; N slash ; B -43 -12 409 728 ; +C 48 ; WX 556 ; N zero ; B 64 -12 571 719 ; +C 49 ; WX 556 ; N one ; B 119 0 511 720 ; +C 50 ; WX 556 ; N two ; B 61 0 571 719 ; +C 51 ; WX 556 ; N three ; B 51 -12 560 719 ; +C 52 ; WX 556 ; N four ; B 27 0 560 716 ; +C 53 ; WX 556 ; N five ; B 63 -12 578 706 ; +C 54 ; WX 556 ; N six ; B 81 -13 576 719 ; +C 55 ; WX 556 ; N seven ; B 104 0 603 706 ; +C 56 ; WX 556 ; N eight ; B 66 -13 567 719 ; +C 57 ; WX 556 ; N nine ; B 63 -12 558 719 ; +C 58 ; WX 333 ; N colon ; B 70 0 317 519 ; +C 59 ; WX 333 ; N semicolon ; B 41 -155 320 519 ; +C 60 ; WX 584 ; N less ; B 46 82 537 625 ; +C 61 ; WX 584 ; N equal ; B 42 182 542 524 ; +C 62 ; WX 584 ; N greater ; B 46 81 538 625 ; +C 63 ; WX 611 ; N question ; B 123 0 618 728 ; +C 64 ; WX 975 ; N at ; B 30 -210 972 729 ; +C 65 ; WX 722 ; N A ; B -11 0 673 716 ; +C 66 ; WX 722 ; N B ; B 40 0 710 716 ; +C 67 ; WX 722 ; N C ; B 95 -13 746 728 ; +C 68 ; WX 722 ; N D ; B 43 0 725 716 ; +C 69 ; WX 667 ; N E ; B 41 0 721 716 ; +C 70 ; WX 611 ; N F ; B 39 0 690 716 ; +C 71 ; WX 778 ; N G ; B 88 -12 786 728 ; +C 72 ; WX 722 ; N H ; B 43 0 765 716 ; +C 73 ; WX 278 ; N I ; B 35 0 332 716 ; +C 74 ; WX 556 ; N J ; B 29 -12 600 716 ; +C 75 ; WX 722 ; N K ; B 40 0 801 716 ; +C 76 ; WX 611 ; N L ; B 45 0 582 716 ; +C 77 ; WX 833 ; N M ; B 41 0 878 716 ; +C 78 ; WX 722 ; N N ; B 45 0 763 716 ; +C 79 ; WX 778 ; N O ; B 87 -13 784 728 ; +C 80 ; WX 667 ; N P ; B 41 0 702 716 ; +C 81 ; WX 778 ; N Q ; B 87 -95 784 728 ; +C 82 ; WX 722 ; N R ; B 44 0 741 716 ; +C 83 ; WX 667 ; N S ; B 62 -12 676 728 ; +C 84 ; WX 611 ; N T ; B 120 0 709 716 ; +C 85 ; WX 722 ; N U ; B 91 -12 765 716 ; +C 86 ; WX 667 ; N V ; B 113 0 793 716 ; +C 87 ; WX 944 ; N W ; B 117 0 1068 716 ; +C 88 ; WX 667 ; N X ; B -30 0 784 716 ; +C 89 ; WX 667 ; N Y ; B 115 0 785 716 ; +C 90 ; WX 611 ; N Z ; B 25 0 668 716 ; +C 91 ; WX 333 ; N bracketleft ; B 10 -197 439 716 ; +C 92 ; WX 278 ; N backslash ; B 78 -12 287 728 ; +C 93 ; WX 333 ; N bracketright ; B -56 -197 375 716 ; +C 94 ; WX 584 ; N asciicircum ; B 56 338 527 728 ; +C 95 ; WX 556 ; N underscore ; B -9 -198 561 -109 ; +C 96 ; WX 333 ; N grave ; B 134 586 331 732 ; +C 97 ; WX 556 ; N a ; B 45 -12 533 531 ; +C 98 ; WX 611 ; N b ; B 36 -12 602 716 ; +C 99 ; WX 556 ; N c ; B 60 -12 564 531 ; +C 100 ; WX 611 ; N d ; B 59 -12 668 716 ; +C 101 ; WX 556 ; N e ; B 58 -12 555 531 ; +C 102 ; WX 333 ; N f ; B 54 0 471 728 ; +C 103 ; WX 611 ; N g ; B 31 -210 623 531 ; +C 104 ; WX 611 ; N h ; B 42 0 591 716 ; +C 105 ; WX 278 ; N i ; B 40 0 330 716 ; +C 106 ; WX 278 ; N j ; B -109 -210 331 716 ; +C 107 ; WX 556 ; N k ; B 38 0 614 716 ; +C 108 ; WX 278 ; N l ; B 39 0 329 716 ; +C 109 ; WX 889 ; N m ; B 36 0 869 531 ; +C 110 ; WX 611 ; N n ; B 42 0 591 531 ; +C 111 ; WX 611 ; N o ; B 61 -12 599 531 ; +C 112 ; WX 611 ; N p ; B -5 -198 605 531 ; +C 113 ; WX 611 ; N q ; B 60 -198 625 531 ; +C 114 ; WX 389 ; N r ; B 32 0 474 531 ; +C 115 ; WX 556 ; N s ; B 22 -12 552 531 ; +C 116 ; WX 333 ; N t ; B 75 -12 391 698 ; +C 117 ; WX 611 ; N u ; B 70 -12 619 519 ; +C 118 ; WX 556 ; N v ; B 75 0 618 519 ; +C 119 ; WX 778 ; N w ; B 72 0 840 519 ; +C 120 ; WX 556 ; N x ; B -22 0 612 519 ; +C 121 ; WX 556 ; N y ; B 6 -210 621 519 ; +C 122 ; WX 500 ; N z ; B 17 0 519 519 ; +C 123 ; WX 389 ; N braceleft ; B 40 -210 488 728 ; +C 124 ; WX 280 ; N bar ; B 86 -210 195 728 ; +C 125 ; WX 389 ; N braceright ; B -87 -210 361 728 ; +C 126 ; WX 584 ; N asciitilde ; B 33 253 551 451 ; +C 127 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 128 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 129 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 130 ; WX 278 ; N quotesinglbase ; B 10 -155 212 135 ; +C 131 ; WX 556 ; N florin ; B -10 -210 558 728 ; +C 132 ; WX 500 ; N quotedblbase ; B 3 -155 441 135 ; +C 133 ; WX 1000 ; N ellipsis ; B 93 0 907 135 ; +C 134 ; WX 556 ; N dagger ; B 84 -171 594 706 ; +C 135 ; WX 556 ; N daggerdbl ; B -1 -171 600 706 ; +C 136 ; WX 333 ; N circumflex ; B 56 584 392 731 ; +C 137 ; WX 1000 ; N perthousand ; B 68 -28 1021 728 ; +C 138 ; WX 667 ; N Scaron ; B 62 -12 676 905 ; +C 139 ; WX 333 ; N guilsinglleft ; B 60 35 378 477 ; +C 140 ; WX 1000 ; N OE ; B 69 -12 1079 728 ; +C 141 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 142 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 143 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 144 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 145 ; WX 278 ; N quoteleft ; B 109 433 311 724 ; +C 146 ; WX 278 ; N quoteright ; B 124 425 326 716 ; +C 147 ; WX 500 ; N quotedblleft ; B 125 433 563 724 ; +C 148 ; WX 500 ; N quotedblright ; B 128 425 566 716 ; +C 149 ; WX 350 ; N bullet ; B 32 209 321 498 ; +C 150 ; WX 556 ; N endash ; B -2 208 554 311 ; +C 151 ; WX 1000 ; N emdash ; B 0 208 1000 311 ; +C 152 ; WX 333 ; N tilde ; B 93 592 429 710 ; +C 153 ; WX 1000 ; N trademark ; B 105 316 877 716 ; +C 154 ; WX 556 ; N scaron ; B 22 -12 552 731 ; +C 155 ; WX 333 ; N guilsinglright ; B 10 35 319 477 ; +C 156 ; WX 944 ; N oe ; B 58 -12 944 531 ; +C 157 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 158 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 159 ; WX 667 ; N Ydieresis ; B 115 0 785 876 ; +C 160 ; WX 278 ; N space ; B 62 0 353 716 ; +C 161 ; WX 333 ; N exclamdown ; B 12 -197 305 519 ; +C 162 ; WX 556 ; N cent ; B 59 -193 563 714 ; +C 163 ; WX 556 ; N sterling ; B 21 -18 610 728 ; +C 164 ; WX 556 ; N currency ; B 22 101 531 610 ; +C 165 ; WX 556 ; N yen ; B 24 0 667 716 ; +C 166 ; WX 280 ; N brokenbar ; B 86 -210 195 728 ; +C 167 ; WX 556 ; N section ; B 21 -212 560 728 ; +C 168 ; WX 333 ; N dieresis ; B 84 597 435 717 ; +C 169 ; WX 737 ; N copyright ; B -4 -18 744 730 ; +C 170 ; WX 370 ; N ordfeminine ; B 82 363 412 728 ; +C 171 ; WX 556 ; N guillemotleft ; B 53 35 562 477 ; +C 172 ; WX 584 ; N logicalnot ; B 42 184 542 524 ; +C 173 ; WX 333 ; N hyphen ; B 39 190 339 326 ; +C 174 ; WX 737 ; N registered ; B -4 -18 744 730 ; +C 175 ; WX 552 ; N overscore ; B -9 758 561 847 ; +C 176 ; WX 400 ; N degree ; B 42 417 354 728 ; +C 177 ; WX 549 ; N plusminus ; B 24 0 525 674 ; +C 178 ; WX 333 ; N twosuperior ; B 82 355 396 725 ; +C 179 ; WX 333 ; N threesuperior ; B 76 349 390 725 ; +C 180 ; WX 333 ; N acute ; B 184 584 435 730 ; +C 181 ; WX 576 ; N mu1 ; B -37 -201 584 519 ; +C 182 ; WX 556 ; N paragraph ; B -1 -197 551 716 ; +C 183 ; WX 278 ; N periodcentered ; B 72 280 209 417 ; +C 184 ; WX 333 ; N cedilla ; B 7 -208 267 -13 ; +C 185 ; WX 333 ; N onesuperior ; B 115 355 362 726 ; +C 186 ; WX 365 ; N ordmasculine ; B 72 362 415 728 ; +C 187 ; WX 556 ; N guillemotright ; B 22 35 531 477 ; +C 188 ; WX 834 ; N onequarter ; B 100 -30 840 725 ; +C 189 ; WX 834 ; N onehalf ; B 85 -30 835 725 ; +C 190 ; WX 834 ; N threequarters ; B 76 -30 852 725 ; +C 191 ; WX 611 ; N questiondown ; B 27 -209 522 519 ; +C 192 ; WX 722 ; N Agrave ; B -11 0 673 905 ; +C 193 ; WX 722 ; N Aacute ; B -11 0 686 904 ; +C 194 ; WX 722 ; N Acircumflex ; B -11 0 673 905 ; +C 195 ; WX 722 ; N Atilde ; B -11 0 673 874 ; +C 196 ; WX 722 ; N Adieresis ; B -11 0 681 876 ; +C 197 ; WX 722 ; N Aring ; B -11 -9 673 854 ; +C 198 ; WX 1000 ; N AE ; B -32 0 1059 716 ; +C 199 ; WX 722 ; N Ccedilla ; B 95 -205 746 728 ; +C 200 ; WX 667 ; N Egrave ; B 41 0 721 905 ; +C 201 ; WX 667 ; N Eacute ; B 41 0 721 904 ; +C 202 ; WX 667 ; N Ecircumflex ; B 41 0 721 905 ; +C 203 ; WX 667 ; N Edieresis ; B 41 0 721 876 ; +C 204 ; WX 278 ; N Igrave ; B 35 0 383 905 ; +C 205 ; WX 278 ; N Iacute ; B 35 0 451 904 ; +C 206 ; WX 278 ; N Icircumflex ; B 35 0 426 905 ; +C 207 ; WX 278 ; N Idieresis ; B 35 0 453 876 ; +C 208 ; WX 722 ; N Eth ; B 37 0 725 716 ; +C 209 ; WX 722 ; N Ntilde ; B 45 0 763 874 ; +C 210 ; WX 778 ; N Ograve ; B 87 -13 784 905 ; +C 211 ; WX 778 ; N Oacute ; B 87 -13 784 904 ; +C 212 ; WX 778 ; N Ocircumflex ; B 87 -13 784 905 ; +C 213 ; WX 778 ; N Otilde ; B 87 -13 784 874 ; +C 214 ; WX 778 ; N Odieresis ; B 87 -13 784 876 ; +C 215 ; WX 584 ; N multiply ; B 53 115 530 591 ; +C 216 ; WX 778 ; N Oslash ; B 78 -60 787 767 ; +C 217 ; WX 722 ; N Ugrave ; B 91 -12 765 905 ; +C 218 ; WX 722 ; N Uacute ; B 91 -12 765 904 ; +C 219 ; WX 722 ; N Ucircumflex ; B 91 -12 765 905 ; +C 220 ; WX 722 ; N Udieresis ; B 91 -12 765 876 ; +C 221 ; WX 667 ; N Yacute ; B 115 0 785 904 ; +C 222 ; WX 667 ; N Thorn ; B 41 0 673 716 ; +C 223 ; WX 611 ; N germandbls ; B 35 -12 582 728 ; +C 224 ; WX 556 ; N agrave ; B 45 -12 533 732 ; +C 225 ; WX 556 ; N aacute ; B 45 -12 567 730 ; +C 226 ; WX 556 ; N acircumflex ; B 45 -12 533 731 ; +C 227 ; WX 556 ; N atilde ; B 45 -12 550 710 ; +C 228 ; WX 556 ; N adieresis ; B 45 -12 554 717 ; +C 229 ; WX 556 ; N aring ; B 45 -12 533 754 ; +C 230 ; WX 889 ; N ae ; B 31 -12 866 531 ; +C 231 ; WX 556 ; N ccedilla ; B 60 -204 564 531 ; +C 232 ; WX 556 ; N egrave ; B 58 -12 555 732 ; +C 233 ; WX 556 ; N eacute ; B 58 -12 562 730 ; +C 234 ; WX 556 ; N ecircumflex ; B 58 -12 555 731 ; +C 235 ; WX 556 ; N edieresis ; B 58 -12 555 717 ; +C 236 ; WX 278 ; N igrave ; B 40 0 347 732 ; +C 237 ; WX 278 ; N iacute ; B 40 0 413 730 ; +C 238 ; WX 278 ; N icircumflex ; B 40 0 390 731 ; +C 239 ; WX 278 ; N idieresis ; B 40 0 417 717 ; +C 240 ; WX 611 ; N eth ; B 61 -13 608 716 ; +C 241 ; WX 611 ; N ntilde ; B 42 0 591 710 ; +C 242 ; WX 611 ; N ograve ; B 61 -12 599 732 ; +C 243 ; WX 611 ; N oacute ; B 61 -12 599 730 ; +C 244 ; WX 611 ; N ocircumflex ; B 61 -12 599 731 ; +C 245 ; WX 611 ; N otilde ; B 61 -12 599 710 ; +C 246 ; WX 611 ; N odieresis ; B 61 -12 599 717 ; +C 247 ; WX 549 ; N divide ; B 24 90 524 616 ; +C 248 ; WX 611 ; N oslash ; B 53 -52 604 571 ; +C 249 ; WX 611 ; N ugrave ; B 70 -12 619 732 ; +C 250 ; WX 611 ; N uacute ; B 70 -12 619 730 ; +C 251 ; WX 611 ; N ucircumflex ; B 70 -12 619 731 ; +C 252 ; WX 611 ; N udieresis ; B 70 -12 619 717 ; +C 253 ; WX 556 ; N yacute ; B 6 -210 621 730 ; +C 254 ; WX 611 ; N thorn ; B -9 -198 603 716 ; +C 255 ; WX 556 ; N ydieresis ; B 6 -210 621 717 ; +C -1 ; WX 0 ; N .null ; B 62 0 353 716 ; +C -1 ; WX 278 ; N nonmarkingreturn ; B 62 0 353 716 ; +C -1 ; WX 549 ; N notequal ; B 24 -12 524 719 ; +C -1 ; WX 713 ; N infinity ; B 74 182 640 523 ; +C -1 ; WX 549 ; N lessequal ; B 29 0 520 708 ; +C -1 ; WX 549 ; N greaterequal ; B 29 0 520 708 ; +C -1 ; WX 494 ; N partialdiff ; B 20 -12 475 728 ; +C -1 ; WX 713 ; N summation ; B 60 -210 677 728 ; +C -1 ; WX 823 ; N product ; B 79 -210 744 728 ; +C -1 ; WX 549 ; N pi1 ; B 0 0 588 519 ; +C -1 ; WX 274 ; N integral ; B 0 -107 273 910 ; +C -1 ; WX 768 ; N Ohm ; B 27 0 747 734 ; +C -1 ; WX 549 ; N radical ; B 42 -38 550 913 ; +C -1 ; WX 549 ; N approxequal ; B 15 135 534 569 ; +C -1 ; WX 612 ; N increment ; B 14 0 600 677 ; +C -1 ; WX 494 ; N lozenge ; B 23 0 472 694 ; +C -1 ; WX 167 ; N fraction ; B -249 -30 492 725 ; +C -1 ; WX 556 ; N Euro ; B 27 -13 639 728 ; +C -1 ; WX 611 ; N fi ; B 58 0 662 728 ; +C -1 ; WX 611 ; N fl ; B 57 0 661 728 ; +C -1 ; WX 278 ; N dotlessi ; B 40 0 289 519 ; +C -1 ; WX 333 ; N macron ; B 85 603 417 697 ; +C -1 ; WX 333 ; N breve ; B 84 585 391 727 ; +C -1 ; WX 333 ; N dotaccent ; B 163 599 330 728 ; +C -1 ; WX 333 ; N ring ; B 150 565 339 754 ; +C -1 ; WX 333 ; N hungarumlaut ; B 33 583 466 728 ; +C -1 ; WX 333 ; N ogonek ; B 62 -208 271 9 ; +C -1 ; WX 333 ; N caron ; B 109 584 445 731 ; +C -1 ; WX 611 ; N Lslash ; B 15 0 585 716 ; +C -1 ; WX 278 ; N lslash ; B 30 0 331 716 ; +C -1 ; WX 611 ; N Zcaron ; B 25 0 668 905 ; +C -1 ; WX 500 ; N zcaron ; B 17 0 528 731 ; +C -1 ; WX 584 ; N minus ; B 42 289 542 417 ; +C -1 ; WX 556 ; N franc ; B -8 0 631 716 ; +C -1 ; WX 778 ; N Gbreve ; B 88 -12 786 888 ; +C -1 ; WX 611 ; N gbreve ; B 31 -210 623 727 ; +C -1 ; WX 278 ; N Idot ; B 35 0 364 884 ; +C -1 ; WX 667 ; N Scedilla ; B 62 -208 676 728 ; +C -1 ; WX 556 ; N scedilla ; B 22 -204 552 531 ; +C -1 ; WX 722 ; N Cacute ; B 95 -13 746 904 ; +C -1 ; WX 556 ; N cacute ; B 60 -12 564 730 ; +C -1 ; WX 722 ; N Ccaron ; B 95 -13 746 902 ; +C -1 ; WX 556 ; N ccaron ; B 60 -12 579 731 ; +C -1 ; WX 611 ; N dmacron ; B 59 -12 728 716 ; +C -1 ; WX 333 ; N middot ; B 258 290 424 426 ; +C -1 ; WX 722 ; N Abreve ; B -11 0 673 888 ; +C -1 ; WX 556 ; N abreve ; B 45 -12 542 727 ; +C -1 ; WX 722 ; N Aogonek ; B -11 -208 714 716 ; +C -1 ; WX 556 ; N aogonek ; B 45 -208 537 531 ; +C -1 ; WX 722 ; N Dcaron ; B 43 0 725 905 ; +C -1 ; WX 740 ; N dcaron ; B 59 -12 855 716 ; +C -1 ; WX 722 ; N Dslash ; B 37 0 725 716 ; +C -1 ; WX 667 ; N Eogonek ; B 41 -208 721 716 ; +C -1 ; WX 556 ; N eogonek ; B 58 -208 555 531 ; +C -1 ; WX 667 ; N Ecaron ; B 41 0 721 905 ; +C -1 ; WX 556 ; N ecaron ; B 58 -12 555 731 ; +C -1 ; WX 611 ; N Lacute ; B 45 0 582 904 ; +C -1 ; WX 278 ; N lacute ; B 39 0 423 899 ; +C -1 ; WX 611 ; N Lcaron ; B 45 0 612 716 ; +C -1 ; WX 396 ; N lcaron ; B 38 0 513 716 ; +C -1 ; WX 611 ; N Ldot ; B 45 0 582 716 ; +C -1 ; WX 479 ; N ldot ; B 39 0 461 716 ; +C -1 ; WX 722 ; N Nacute ; B 45 0 763 904 ; +C -1 ; WX 611 ; N nacute ; B 42 0 591 730 ; +C -1 ; WX 722 ; N Ncaron ; B 45 0 763 905 ; +C -1 ; WX 611 ; N ncaron ; B 42 0 595 731 ; +C -1 ; WX 778 ; N Odblacute ; B 87 -13 784 901 ; +C -1 ; WX 611 ; N odblacute ; B 61 -12 623 728 ; +C -1 ; WX 722 ; N Racute ; B 44 0 741 904 ; +C -1 ; WX 389 ; N racute ; B 32 0 492 730 ; +C -1 ; WX 722 ; N Rcaron ; B 44 0 741 905 ; +C -1 ; WX 389 ; N rcaron ; B 32 0 520 731 ; +C -1 ; WX 667 ; N Sacute ; B 62 -12 676 904 ; +C -1 ; WX 556 ; N sacute ; B 22 -12 552 730 ; +C -1 ; WX 611 ; N Tcedilla ; B 120 -298 709 716 ; +C -1 ; WX 333 ; N tcedilla ; B 66 -274 391 698 ; +C -1 ; WX 611 ; N Tcaron ; B 120 0 709 905 ; +C -1 ; WX 479 ; N tcaron ; B 77 -12 595 716 ; +C -1 ; WX 722 ; N Uring ; B 91 -12 765 905 ; +C -1 ; WX 611 ; N uring ; B 70 -12 619 754 ; +C -1 ; WX 722 ; N Udblacute ; B 91 -12 765 901 ; +C -1 ; WX 611 ; N udblacute ; B 70 -12 652 728 ; +C -1 ; WX 611 ; N Zacute ; B 25 0 668 904 ; +C -1 ; WX 500 ; N zacute ; B 17 0 519 730 ; +C -1 ; WX 611 ; N Zdot ; B 25 0 668 884 ; +C -1 ; WX 500 ; N zdot ; B 17 0 519 728 ; +C -1 ; WX 610 ; N Gamma ; B 43 0 705 716 ; +C -1 ; WX 778 ; N Theta ; B 87 -12 784 728 ; +C -1 ; WX 822 ; N Phi ; B 88 -29 833 733 ; +C -1 ; WX 620 ; N alpha ; B 61 -12 662 531 ; +C -1 ; WX 610 ; N delta ; B 62 -12 656 716 ; +C -1 ; WX 479 ; N epsilon ; B 43 -12 513 531 ; +C -1 ; WX 664 ; N sigma ; B 61 -12 717 531 ; +C -1 ; WX 409 ; N tau ; B 79 0 466 519 ; +C -1 ; WX 704 ; N phi ; B 61 -198 693 531 ; +C -1 ; WX 552 ; N underscoredbl ; B -9 -376 561 -109 ; +C -1 ; WX 604 ; N exclamdbl ; B 62 0 624 716 ; +C -1 ; WX 396 ; N nsuperior ; B 59 250 430 583 ; +C -1 ; WX 1104 ; N peseta ; B 10 -13 1088 716 ; +C -1 ; WX 1000 ; N arrowleft ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowup ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowright ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowdown ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowboth ; B 39 77 961 429 ; +C -1 ; WX 500 ; N arrowupdn ; B 74 -208 425 714 ; +C -1 ; WX 500 ; N arrowupdnbse ; B 74 -303 425 714 ; +C -1 ; WX 979 ; N orthogonal ; B 177 0 802 625 ; +C -1 ; WX 722 ; N intersection ; B 70 0 648 719 ; +C -1 ; WX 583 ; N equivalence ; B 42 73 542 633 ; +C -1 ; WX 604 ; N house ; B 77 0 527 563 ; +C -1 ; WX 584 ; N revlogicalnot ; B 42 184 542 524 ; +C -1 ; WX 604 ; N integraltp ; B 267 -251 477 848 ; +C -1 ; WX 604 ; N integralbt ; B 127 -251 337 848 ; +C -1 ; WX 708 ; N SF100000 ; B -11 261 719 346 ; +C -1 ; WX 625 ; N SF110000 ; B 223 -303 309 910 ; +C -1 ; WX 708 ; N SF010000 ; B 312 -303 720 346 ; +C -1 ; WX 708 ; N SF030000 ; B -11 -303 396 346 ; +C -1 ; WX 708 ; N SF020000 ; B 312 261 720 910 ; +C -1 ; WX 708 ; N SF040000 ; B -11 261 396 910 ; +C -1 ; WX 708 ; N SF080000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF090000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF060000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF070000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF050000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF430000 ; B -11 168 719 439 ; +C -1 ; WX 708 ; N SF240000 ; B 219 -303 490 910 ; +C -1 ; WX 708 ; N SF510000 ; B 312 -303 720 439 ; +C -1 ; WX 708 ; N SF520000 ; B 219 -303 720 346 ; +C -1 ; WX 708 ; N SF390000 ; B 219 -303 719 439 ; +C -1 ; WX 708 ; N SF220000 ; B -11 -303 396 439 ; +C -1 ; WX 708 ; N SF210000 ; B -11 -303 489 346 ; +C -1 ; WX 708 ; N SF250000 ; B -11 -303 489 439 ; +C -1 ; WX 708 ; N SF500000 ; B 312 168 720 910 ; +C -1 ; WX 708 ; N SF490000 ; B 219 261 720 910 ; +C -1 ; WX 708 ; N SF380000 ; B 219 168 719 910 ; +C -1 ; WX 708 ; N SF280000 ; B -11 168 396 910 ; +C -1 ; WX 708 ; N SF270000 ; B -11 261 489 910 ; +C -1 ; WX 708 ; N SF260000 ; B -11 168 489 910 ; +C -1 ; WX 708 ; N SF360000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF370000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF420000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF190000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF200000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF230000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF470000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF480000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF410000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF450000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF460000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF400000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF540000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF530000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF440000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N upblock ; B -11 303 719 910 ; +C -1 ; WX 708 ; N dnblock ; B -11 -303 719 303 ; +C -1 ; WX 708 ; N block ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N lfblock ; B -11 -303 354 910 ; +C -1 ; WX 708 ; N rtblock ; B 354 -303 720 910 ; +C -1 ; WX 708 ; N ltshade ; B 50 -246 719 910 ; +C -1 ; WX 708 ; N shade ; B -11 -246 719 910 ; +C -1 ; WX 729 ; N dkshade ; B 0 -307 729 910 ; +C -1 ; WX 604 ; N filledbox ; B 71 0 532 461 ; +C -1 ; WX 1000 ; N filledrect ; B 0 155 1000 343 ; +C -1 ; WX 990 ; N triagup ; B 148 0 842 693 ; +C -1 ; WX 990 ; N triagrt ; B 141 -15 849 692 ; +C -1 ; WX 990 ; N triagdn ; B 148 -15 842 678 ; +C -1 ; WX 990 ; N triaglf ; B 141 -15 849 692 ; +C -1 ; WX 604 ; N circle ; B 87 67 517 497 ; +C -1 ; WX 604 ; N invbullet ; B 63 0 541 479 ; +C -1 ; WX 604 ; N invcircle ; B 21 0 584 564 ; +C -1 ; WX 1021 ; N smileface ; B 199 -58 822 564 ; +C -1 ; WX 1052 ; N invsmileface ; B 215 -58 837 564 ; +C -1 ; WX 917 ; N sun ; B 8 -109 909 792 ; +C -1 ; WX 750 ; N female ; B 119 -214 630 736 ; +C -1 ; WX 750 ; N male ; B 54 -128 691 791 ; +C -1 ; WX 531 ; N spade ; B 28 0 503 601 ; +C -1 ; WX 656 ; N club ; B 27 0 629 601 ; +C -1 ; WX 594 ; N heart ; B 31 -12 563 601 ; +C -1 ; WX 510 ; N diamond ; B 31 -12 479 601 ; +C -1 ; WX 500 ; N musicalnote ; B 18 -18 482 666 ; +C -1 ; WX 750 ; N musicalnotedbl ; B 42 -63 649 742 ; +C -1 ; WX 782 ; N IJ ; B 35 -12 830 716 ; +C -1 ; WX 556 ; N ij ; B 46 -210 604 716 ; +C -1 ; WX 708 ; N napostrophe ; B 41 0 685 716 ; +C -1 ; WX 240 ; N minute ; B 151 461 329 716 ; +C -1 ; WX 479 ; N second ; B 151 461 507 716 ; +C -1 ; WX 885 ; N afii61248 ; B 69 -31 895 728 ; +C -1 ; WX 516 ; N afii61289 ; B 47 -12 542 728 ; +C -1 ; WX 604 ; N H22073 ; B 71 0 532 461 ; +C -1 ; WX 354 ; N H18543 ; B 45 198 310 463 ; +C -1 ; WX 354 ; N H18551 ; B 45 198 310 463 ; +C -1 ; WX 604 ; N H18533 ; B 87 67 517 497 ; +C -1 ; WX 354 ; N openbullet ; B 55 208 300 453 ; +C -1 ; WX 722 ; N Amacron ; B -11 0 673 874 ; +C -1 ; WX 556 ; N amacron ; B 45 -12 539 697 ; +C -1 ; WX 722 ; N Ccircumflex ; B 95 -13 746 927 ; +C -1 ; WX 556 ; N ccircumflex ; B 60 -12 564 731 ; +C -1 ; WX 722 ; N Cdot ; B 95 -13 746 909 ; +C -1 ; WX 556 ; N cdot ; B 60 -12 564 728 ; +C -1 ; WX 667 ; N Emacron ; B 41 0 721 874 ; +C -1 ; WX 556 ; N emacron ; B 58 -12 555 697 ; +C -1 ; WX 667 ; N Ebreve ; B 41 0 721 917 ; +C -1 ; WX 556 ; N ebreve ; B 58 -12 555 727 ; +C -1 ; WX 667 ; N Edot ; B 41 0 721 909 ; +C -1 ; WX 556 ; N edot ; B 58 -12 555 728 ; +C -1 ; WX 778 ; N Gcircumflex ; B 88 -12 786 927 ; +C -1 ; WX 611 ; N gcircumflex ; B 31 -210 623 731 ; +C -1 ; WX 778 ; N Gdot ; B 88 -12 786 909 ; +C -1 ; WX 611 ; N gdot ; B 31 -210 623 728 ; +C -1 ; WX 778 ; N Gcedilla ; B 88 -208 786 728 ; +C -1 ; WX 611 ; N gcedilla ; B 31 -210 623 801 ; +C -1 ; WX 722 ; N Hcircumflex ; B 43 0 765 927 ; +C -1 ; WX 611 ; N hcircumflex ; B 42 0 601 905 ; +C -1 ; WX 722 ; N Hbar ; B 43 0 818 716 ; +C -1 ; WX 611 ; N hbar ; B 42 0 591 716 ; +C -1 ; WX 278 ; N Itilde ; B 35 0 447 898 ; +C -1 ; WX 278 ; N itilde ; B 40 0 409 710 ; +C -1 ; WX 278 ; N Imacron ; B 35 0 443 874 ; +C -1 ; WX 278 ; N imacron ; B 40 0 405 697 ; +C -1 ; WX 278 ; N Ibreve ; B 35 0 451 917 ; +C -1 ; WX 278 ; N ibreve ; B 40 0 409 727 ; +C -1 ; WX 278 ; N Iogonek ; B 7 -208 332 716 ; +C -1 ; WX 278 ; N iogonek ; B 13 -208 330 716 ; +C -1 ; WX 556 ; N Jcircumflex ; B 29 -12 687 927 ; +C -1 ; WX 278 ; N jcircumflex ; B -109 -210 386 731 ; +C -1 ; WX 722 ; N Kcedilla ; B 40 -208 801 716 ; +C -1 ; WX 556 ; N kcedilla ; B 38 -208 614 716 ; +C -1 ; WX 556 ; N kgreenlandic ; B 40 0 617 519 ; +C -1 ; WX 611 ; N Lcedilla ; B 45 -208 582 716 ; +C -1 ; WX 278 ; N lcedilla ; B -57 -208 329 716 ; +C -1 ; WX 722 ; N Ncedilla ; B 45 -208 763 716 ; +C -1 ; WX 611 ; N ncedilla ; B 42 -208 591 531 ; +C -1 ; WX 723 ; N Eng ; B 48 -13 735 728 ; +C -1 ; WX 611 ; N eng ; B 40 -210 589 531 ; +C -1 ; WX 778 ; N Omacron ; B 87 -13 784 874 ; +C -1 ; WX 611 ; N omacron ; B 61 -12 599 697 ; +C -1 ; WX 778 ; N Obreve ; B 87 -13 784 917 ; +C -1 ; WX 611 ; N obreve ; B 61 -12 599 727 ; +C -1 ; WX 722 ; N Rcedilla ; B 44 -208 741 716 ; +C -1 ; WX 389 ; N rcedilla ; B -20 -208 474 531 ; +C -1 ; WX 667 ; N Scircumflex ; B 62 -12 676 927 ; +C -1 ; WX 556 ; N scircumflex ; B 22 -12 552 731 ; +C -1 ; WX 611 ; N Tbar ; B 100 0 709 716 ; +C -1 ; WX 333 ; N tbar ; B 21 -12 391 698 ; +C -1 ; WX 722 ; N Utilde ; B 91 -12 765 898 ; +C -1 ; WX 611 ; N utilde ; B 70 -12 619 710 ; +C -1 ; WX 722 ; N Umacron ; B 91 -12 765 874 ; +C -1 ; WX 611 ; N umacron ; B 70 -12 619 697 ; +C -1 ; WX 722 ; N Ubreve ; B 91 -12 765 917 ; +C -1 ; WX 611 ; N ubreve ; B 70 -12 619 727 ; +C -1 ; WX 722 ; N Uogonek ; B 91 -208 765 716 ; +C -1 ; WX 611 ; N uogonek ; B 70 -208 619 519 ; +C -1 ; WX 944 ; N Wcircumflex ; B 117 0 1068 927 ; +C -1 ; WX 778 ; N wcircumflex ; B 72 0 840 731 ; +C -1 ; WX 667 ; N Ycircumflex ; B 115 0 785 927 ; +C -1 ; WX 556 ; N ycircumflex ; B 6 -210 621 731 ; +C -1 ; WX 278 ; N longs ; B 39 0 456 728 ; +C -1 ; WX 722 ; N Aringacute ; B -11 -9 673 1000 ; +C -1 ; WX 556 ; N aringacute ; B 45 -12 588 927 ; +C -1 ; WX 1000 ; N AEacute ; B -32 0 1059 927 ; +C -1 ; WX 889 ; N aeacute ; B 31 -12 866 730 ; +C -1 ; WX 778 ; N Oslashacute ; B 78 -60 787 927 ; +C -1 ; WX 611 ; N oslashacute ; B 53 -52 604 730 ; +C -1 ; WX 333 ; N anoteleia ; B 150 383 317 519 ; +C -1 ; WX 944 ; N Wgrave ; B 117 0 1068 926 ; +C -1 ; WX 778 ; N wgrave ; B 72 0 840 732 ; +C -1 ; WX 944 ; N Wacute ; B 117 0 1068 927 ; +C -1 ; WX 778 ; N wacute ; B 72 0 840 730 ; +C -1 ; WX 944 ; N Wdieresis ; B 117 0 1068 900 ; +C -1 ; WX 778 ; N wdieresis ; B 72 0 840 717 ; +C -1 ; WX 667 ; N Ygrave ; B 115 0 785 926 ; +C -1 ; WX 556 ; N ygrave ; B 6 -210 621 732 ; +C -1 ; WX 278 ; N quotereversed ; B 150 425 325 716 ; +C -1 ; WX 333 ; N radicalex ; B 74 603 465 697 ; +C -1 ; WX 556 ; N afii08941 ; B 21 -18 610 728 ; +C -1 ; WX 600 ; N estimated ; B 44 -17 561 535 ; +C -1 ; WX 834 ; N oneeighth ; B 85 -30 833 725 ; +C -1 ; WX 834 ; N threeeighths ; B 77 -30 833 725 ; +C -1 ; WX 834 ; N fiveeighths ; B 83 -30 833 725 ; +C -1 ; WX 834 ; N seveneighths ; B 56 -30 833 725 ; +C -1 ; WX 333 ; N commaaccent ; B 14 -274 205 -53 ; +C -1 ; WX 333 ; N undercommaaccent ; B -30 -208 230 -12 ; +C -1 ; WX 333 ; N tonos ; B 184 584 435 730 ; +C -1 ; WX 333 ; N dieresistonos ; B -10 584 519 730 ; +C -1 ; WX 722 ; N Alphatonos ; B -9 0 675 716 ; +C -1 ; WX 854 ; N Epsilontonos ; B 56 0 909 716 ; +C -1 ; WX 906 ; N Etatonos ; B 56 0 950 716 ; +C -1 ; WX 473 ; N Iotatonos ; B 56 0 525 716 ; +C -1 ; WX 844 ; N Omicrontonos ; B 50 -12 849 728 ; +C -1 ; WX 930 ; N Upsilontonos ; B 64 0 1048 716 ; +C -1 ; WX 847 ; N Omegatonos ; B 50 0 846 728 ; +C -1 ; WX 278 ; N iotadieresistonos ; B -16 0 513 730 ; +C -1 ; WX 722 ; N Alpha ; B -11 0 673 716 ; +C -1 ; WX 722 ; N Beta ; B 40 0 710 716 ; +C -1 ; WX 671 ; N Delta ; B -39 0 646 716 ; +C -1 ; WX 667 ; N Epsilon ; B 41 0 721 716 ; +C -1 ; WX 611 ; N Zeta ; B 25 0 668 716 ; +C -1 ; WX 722 ; N Eta ; B 43 0 765 716 ; +C -1 ; WX 278 ; N Iota ; B 35 0 332 716 ; +C -1 ; WX 722 ; N Kappa ; B 40 0 801 716 ; +C -1 ; WX 667 ; N Lambda ; B -39 0 642 716 ; +C -1 ; WX 833 ; N Mu ; B 41 0 878 716 ; +C -1 ; WX 722 ; N Nu ; B 45 0 763 716 ; +C -1 ; WX 657 ; N Xi ; B 11 0 712 716 ; +C -1 ; WX 778 ; N Omicron ; B 87 -13 784 728 ; +C -1 ; WX 718 ; N Pi ; B 44 0 766 716 ; +C -1 ; WX 667 ; N Rho ; B 41 0 702 716 ; +C -1 ; WX 590 ; N Sigma ; B 19 0 679 716 ; +C -1 ; WX 611 ; N Tau ; B 120 0 709 716 ; +C -1 ; WX 667 ; N Upsilon ; B 115 0 785 716 ; +C -1 ; WX 667 ; N Chi ; B -30 0 784 716 ; +C -1 ; WX 829 ; N Psi ; B 113 0 884 716 ; +C -1 ; WX 781 ; N Omega ; B 9 0 779 728 ; +C -1 ; WX 278 ; N Iotadieresis ; B 35 0 442 876 ; +C -1 ; WX 667 ; N Upsilondieresis ; B 115 0 785 876 ; +C -1 ; WX 620 ; N alphatonos ; B 61 -12 662 730 ; +C -1 ; WX 479 ; N epsilontonos ; B 43 -12 513 730 ; +C -1 ; WX 611 ; N etatonos ; B 41 -198 590 730 ; +C -1 ; WX 278 ; N iotatonos ; B 40 0 405 730 ; +C -1 ; WX 591 ; N upsilondieresistonos ; B 74 -12 653 730 ; +C -1 ; WX 621 ; N beta ; B -6 -198 614 728 ; +C -1 ; WX 556 ; N gamma ; B 77 -198 621 519 ; +C -1 ; WX 492 ; N zeta ; B 52 -210 604 716 ; +C -1 ; WX 611 ; N eta ; B 41 -198 590 531 ; +C -1 ; WX 558 ; N theta ; B 73 -12 580 728 ; +C -1 ; WX 278 ; N iota ; B 40 0 289 519 ; +C -1 ; WX 566 ; N kappa ; B 41 0 622 519 ; +C -1 ; WX 556 ; N lambda ; B -13 0 531 716 ; +C -1 ; WX 603 ; N mu ; B -4 -198 617 519 ; +C -1 ; WX 556 ; N nu ; B 75 0 618 519 ; +C -1 ; WX 450 ; N xi ; B 55 -210 519 728 ; +C -1 ; WX 611 ; N omicron ; B 61 -12 599 531 ; +C -1 ; WX 605 ; N rho ; B -14 -198 596 531 ; +C -1 ; WX 532 ; N sigma1 ; B 62 -210 589 531 ; +C -1 ; WX 591 ; N upsilon ; B 74 -12 612 519 ; +C -1 ; WX 578 ; N chi ; B -80 -198 644 519 ; +C -1 ; WX 773 ; N psi ; B 75 -198 793 519 ; +C -1 ; WX 834 ; N omega ; B 64 -12 826 519 ; +C -1 ; WX 278 ; N iotadieresis ; B 40 0 410 717 ; +C -1 ; WX 591 ; N upsilondieresis ; B 74 -12 612 717 ; +C -1 ; WX 611 ; N omicrontonos ; B 61 -12 599 730 ; +C -1 ; WX 591 ; N upsilontonos ; B 74 -12 612 730 ; +C -1 ; WX 834 ; N omegatonos ; B 64 -12 826 730 ; +C -1 ; WX 667 ; N afii10023 ; B 41 0 721 876 ; +C -1 ; WX 886 ; N afii10051 ; B 129 -6 874 716 ; +C -1 ; WX 614 ; N afii10052 ; B 44 0 723 905 ; +C -1 ; WX 719 ; N afii10053 ; B 87 -12 739 728 ; +C -1 ; WX 667 ; N afii10054 ; B 62 -12 676 728 ; +C -1 ; WX 278 ; N afii10055 ; B 35 0 332 716 ; +C -1 ; WX 278 ; N afii10056 ; B 35 0 442 876 ; +C -1 ; WX 556 ; N afii10057 ; B 29 -12 600 716 ; +C -1 ; WX 1094 ; N afii10058 ; B -21 -12 1074 716 ; +C -1 ; WX 1042 ; N afii10059 ; B 43 0 1021 716 ; +C -1 ; WX 854 ; N afii10060 ; B 120 0 833 716 ; +C -1 ; WX 622 ; N afii10061 ; B 43 0 701 905 ; +C -1 ; WX 677 ; N afii10062 ; B 76 -11 794 899 ; +C -1 ; WX 719 ; N afii10145 ; B 43 -198 764 716 ; +C -1 ; WX 722 ; N afii10017 ; B -11 0 673 716 ; +C -1 ; WX 708 ; N afii10018 ; B 45 0 709 716 ; +C -1 ; WX 722 ; N afii10019 ; B 40 0 710 716 ; +C -1 ; WX 614 ; N afii10020 ; B 44 0 723 716 ; +C -1 ; WX 722 ; N afii10021 ; B -75 -198 756 716 ; +C -1 ; WX 667 ; N afii10022 ; B 41 0 721 716 ; +C -1 ; WX 927 ; N afii10024 ; B -15 0 1016 720 ; +C -1 ; WX 643 ; N afii10025 ; B 37 -12 649 728 ; +C -1 ; WX 719 ; N afii10026 ; B 43 0 765 716 ; +C -1 ; WX 719 ; N afii10027 ; B 43 0 765 899 ; +C -1 ; WX 615 ; N afii10028 ; B 43 0 701 716 ; +C -1 ; WX 687 ; N afii10029 ; B -19 -11 731 716 ; +C -1 ; WX 833 ; N afii10030 ; B 41 0 878 716 ; +C -1 ; WX 722 ; N afii10031 ; B 43 0 765 716 ; +C -1 ; WX 778 ; N afii10032 ; B 87 -13 784 728 ; +C -1 ; WX 719 ; N afii10033 ; B 43 0 764 716 ; +C -1 ; WX 667 ; N afii10034 ; B 41 0 702 716 ; +C -1 ; WX 722 ; N afii10035 ; B 95 -13 746 728 ; +C -1 ; WX 611 ; N afii10036 ; B 120 0 709 716 ; +C -1 ; WX 677 ; N afii10037 ; B 76 -11 794 716 ; +C -1 ; WX 781 ; N afii10038 ; B 84 -6 790 716 ; +C -1 ; WX 667 ; N afii10039 ; B -30 0 784 716 ; +C -1 ; WX 729 ; N afii10040 ; B 40 -198 762 716 ; +C -1 ; WX 708 ; N afii10041 ; B 129 0 752 716 ; +C -1 ; WX 979 ; N afii10042 ; B 43 0 1021 716 ; +C -1 ; WX 989 ; N afii10043 ; B 43 -198 1021 716 ; +C -1 ; WX 854 ; N afii10044 ; B 105 0 833 716 ; +C -1 ; WX 1000 ; N afii10045 ; B 40 0 1036 716 ; +C -1 ; WX 708 ; N afii10046 ; B 40 0 682 716 ; +C -1 ; WX 719 ; N afii10047 ; B 73 -12 725 728 ; +C -1 ; WX 1042 ; N afii10048 ; B 43 -12 1045 728 ; +C -1 ; WX 729 ; N afii10049 ; B -21 0 774 716 ; +C -1 ; WX 556 ; N afii10065 ; B 45 -12 533 531 ; +C -1 ; WX 619 ; N afii10066 ; B 64 -12 655 748 ; +C -1 ; WX 604 ; N afii10067 ; B 63 -12 567 530 ; +C -1 ; WX 534 ; N afii10068 ; B 32 -12 515 530 ; +C -1 ; WX 618 ; N afii10069 ; B 60 -12 625 748 ; +C -1 ; WX 556 ; N afii10070 ; B 58 -12 555 531 ; +C -1 ; WX 736 ; N afii10072 ; B -25 0 788 519 ; +C -1 ; WX 510 ; N afii10073 ; B 14 -12 489 530 ; +C -1 ; WX 611 ; N afii10074 ; B 70 -12 619 519 ; +C -1 ; WX 611 ; N afii10075 ; B 70 -12 619 727 ; +C -1 ; WX 507 ; N afii10076 ; B 37 0 567 519 ; +C -1 ; WX 622 ; N afii10077 ; B -24 -12 633 519 ; +C -1 ; WX 740 ; N afii10078 ; B 39 0 748 519 ; +C -1 ; WX 604 ; N afii10079 ; B 35 0 616 519 ; +C -1 ; WX 611 ; N afii10080 ; B 61 -12 599 531 ; +C -1 ; WX 611 ; N afii10081 ; B 39 0 619 519 ; +C -1 ; WX 611 ; N afii10082 ; B -5 -198 605 531 ; +C -1 ; WX 556 ; N afii10083 ; B 60 -12 564 531 ; +C -1 ; WX 889 ; N afii10084 ; B 36 0 869 531 ; +C -1 ; WX 556 ; N afii10085 ; B 6 -210 621 519 ; +C -1 ; WX 885 ; N afii10086 ; B 63 -203 876 728 ; +C -1 ; WX 556 ; N afii10087 ; B -22 0 612 519 ; +C -1 ; WX 646 ; N afii10088 ; B 66 -161 624 519 ; +C -1 ; WX 583 ; N afii10089 ; B 99 0 594 519 ; +C -1 ; WX 889 ; N afii10090 ; B 70 -12 901 519 ; +C -1 ; WX 935 ; N afii10091 ; B 70 -159 912 519 ; +C -1 ; WX 707 ; N afii10092 ; B 68 0 678 519 ; +C -1 ; WX 854 ; N afii10093 ; B 40 0 868 519 ; +C -1 ; WX 594 ; N afii10094 ; B 35 0 570 519 ; +C -1 ; WX 552 ; N afii10095 ; B 37 -12 540 530 ; +C -1 ; WX 865 ; N afii10096 ; B 40 -12 850 530 ; +C -1 ; WX 589 ; N afii10097 ; B -20 0 599 519 ; +C -1 ; WX 556 ; N afii10071 ; B 58 -12 555 717 ; +C -1 ; WX 611 ; N afii10099 ; B 42 -210 591 716 ; +C -1 ; WX 469 ; N afii10100 ; B 35 0 552 730 ; +C -1 ; WX 563 ; N afii10101 ; B 64 -12 568 530 ; +C -1 ; WX 556 ; N afii10102 ; B 22 -12 552 531 ; +C -1 ; WX 278 ; N afii10103 ; B 40 0 330 716 ; +C -1 ; WX 278 ; N afii10104 ; B 40 0 410 717 ; +C -1 ; WX 278 ; N afii10105 ; B -109 -210 331 716 ; +C -1 ; WX 969 ; N afii10106 ; B -24 -12 942 519 ; +C -1 ; WX 906 ; N afii10107 ; B 40 0 880 519 ; +C -1 ; WX 611 ; N afii10108 ; B 42 0 591 716 ; +C -1 ; WX 507 ; N afii10109 ; B 37 0 567 730 ; +C -1 ; WX 556 ; N afii10110 ; B 6 -210 621 727 ; +C -1 ; WX 611 ; N afii10193 ; B 70 -199 619 519 ; +C -1 ; WX 575 ; N afii10050 ; B 43 0 736 914 ; +C -1 ; WX 467 ; N afii10098 ; B 27 0 581 697 ; +C -1 ; WX 1000 ; N afii00208 ; B 37 208 999 311 ; +C -1 ; WX 1146 ; N afii61352 ; B 43 0 1157 716 ; +C -1 ; WX 712 ; N pi ; B 79 0 770 519 ; +C -1 ; WX 333 ; N sheva ; B 68 -306 179 -98 ; +C -1 ; WX 333 ; N hatafsegol ; B -16 -306 290 -98 ; +C -1 ; WX 333 ; N hatafpatah ; B -9 -306 280 -98 ; +C -1 ; WX 333 ; N hatafqamats ; B -9 -306 280 -98 ; +C -1 ; WX 333 ; N hiriq ; B 95 -180 179 -98 ; +C -1 ; WX 333 ; N tsere ; B 31 -180 244 -98 ; +C -1 ; WX 333 ; N segol ; B 31 -306 243 -98 ; +C -1 ; WX 333 ; N patah ; B 36 -154 243 -103 ; +C -1 ; WX 333 ; N qamats ; B 36 -236 243 -103 ; +C -1 ; WX 333 ; N holam ; B 256 577 340 659 ; +C -1 ; WX 333 ; N qubuts ; B -23 -306 270 -98 ; +C -1 ; WX 333 ; N dagesh ; B 185 241 269 323 ; +C -1 ; WX 333 ; N meteg ; B 78 -299 170 -103 ; +C -1 ; WX 447 ; N maqaf ; B 148 408 497 518 ; +C -1 ; WX 333 ; N rafe ; B 198 611 405 662 ; +C -1 ; WX 299 ; N paseq ; B 76 -101 333 620 ; +C -1 ; WX 333 ; N shindot ; B 506 577 590 660 ; +C -1 ; WX 333 ; N sindot ; B 6 577 93 660 ; +C -1 ; WX 333 ; N sofpasuq ; B 98 0 346 519 ; +C -1 ; WX 583 ; N alef ; B 44 0 645 518 ; +C -1 ; WX 576 ; N bet ; B 38 0 579 524 ; +C -1 ; WX 457 ; N gimel ; B 5 0 449 524 ; +C -1 ; WX 550 ; N dalet ; B 109 0 636 518 ; +C -1 ; WX 614 ; N he ; B 69 0 620 524 ; +C -1 ; WX 273 ; N vav ; B 66 0 317 518 ; +C -1 ; WX 413 ; N zayin ; B 129 0 506 518 ; +C -1 ; WX 616 ; N het ; B 66 0 619 524 ; +C -1 ; WX 626 ; N tet ; B 109 -12 650 530 ; +C -1 ; WX 273 ; N yod ; B 115 229 317 518 ; +C -1 ; WX 521 ; N finalkaf ; B 114 -199 529 524 ; +C -1 ; WX 491 ; N kaf ; B 38 -8 515 526 ; +C -1 ; WX 496 ; N lamed ; B 117 0 555 716 ; +C -1 ; WX 611 ; N finalmem ; B 66 0 619 524 ; +C -1 ; WX 630 ; N mem ; B 51 0 631 524 ; +C -1 ; WX 273 ; N finalnun ; B 23 -199 317 518 ; +C -1 ; WX 386 ; N nun ; B 44 0 402 524 ; +C -1 ; WX 613 ; N samekh ; B 85 -12 637 530 ; +C -1 ; WX 543 ; N ayin ; B 5 -77 603 518 ; +C -1 ; WX 594 ; N finalpe ; B 104 -199 601 524 ; +C -1 ; WX 587 ; N pe ; B 54 -8 612 527 ; +C -1 ; WX 500 ; N finaltsadi ; B 115 -199 568 518 ; +C -1 ; WX 512 ; N tsadi ; B 35 0 573 518 ; +C -1 ; WX 573 ; N qof ; B 21 -199 632 518 ; +C -1 ; WX 521 ; N resh ; B 115 0 529 524 ; +C -1 ; WX 715 ; N shin ; B 110 -14 786 518 ; +C -1 ; WX 673 ; N tav ; B 25 -4 677 524 ; +C -1 ; WX 546 ; N doublevav ; B 23 -199 590 518 ; +C -1 ; WX 546 ; N vavyod ; B 115 -199 590 518 ; +C -1 ; WX 546 ; N doubleyod ; B 115 229 590 518 ; +C -1 ; WX 276 ; N geresh ; B 105 312 353 518 ; +C -1 ; WX 504 ; N gershayim ; B 105 312 581 518 ; +C -1 ; WX 818 ; N newsheqelsign ; B 66 0 862 518 ; +C -1 ; WX 273 ; N vavshindot ; B 66 0 317 660 ; +C -1 ; WX 521 ; N finalkafsheva ; B 114 -199 529 524 ; +C -1 ; WX 521 ; N finalkafqamats ; B 95 -199 529 524 ; +C -1 ; WX 496 ; N lamedholam ; B 16 0 555 716 ; +C -1 ; WX 496 ; N lamedholamdagesh ; B 16 0 555 716 ; +C -1 ; WX 559 ; N altayin ; B 24 0 618 518 ; +C -1 ; WX 715 ; N shinshindot ; B 110 -14 786 660 ; +C -1 ; WX 715 ; N shinsindot ; B 110 -14 786 660 ; +C -1 ; WX 715 ; N shindageshshindot ; B 110 -14 786 660 ; +C -1 ; WX 715 ; N shindageshsindot ; B 110 -14 786 660 ; +C -1 ; WX 583 ; N alefpatah ; B 44 -154 645 519 ; +C -1 ; WX 583 ; N alefqamats ; B 44 -236 645 519 ; +C -1 ; WX 583 ; N alefmapiq ; B 44 0 645 519 ; +C -1 ; WX 576 ; N betdagesh ; B 38 0 579 524 ; +C -1 ; WX 454 ; N gimeldagesh ; B 5 0 449 524 ; +C -1 ; WX 550 ; N daletdagesh ; B 109 0 636 518 ; +C -1 ; WX 614 ; N hedagesh ; B 69 0 620 524 ; +C -1 ; WX 323 ; N vavdagesh ; B 59 0 367 518 ; +C -1 ; WX 438 ; N zayindagesh ; B 55 0 522 519 ; +C -1 ; WX 626 ; N tetdagesh ; B 109 -12 650 530 ; +C -1 ; WX 323 ; N yoddagesh ; B 70 229 367 518 ; +C -1 ; WX 521 ; N finalkafdagesh ; B 114 -199 529 524 ; +C -1 ; WX 491 ; N kafdagesh ; B 38 -8 516 526 ; +C -1 ; WX 496 ; N lameddagesh ; B 117 0 555 716 ; +C -1 ; WX 630 ; N memdagesh ; B 51 0 631 524 ; +C -1 ; WX 386 ; N nundagesh ; B 44 0 402 524 ; +C -1 ; WX 613 ; N samekhdagesh ; B 85 -12 638 530 ; +C -1 ; WX 594 ; N finalpedagesh ; B 110 -199 600 524 ; +C -1 ; WX 587 ; N pedagesh ; B 54 -8 612 527 ; +C -1 ; WX 512 ; N tsadidagesh ; B 35 0 573 518 ; +C -1 ; WX 573 ; N qofdagesh ; B 21 -199 632 518 ; +C -1 ; WX 521 ; N reshdagesh ; B 115 0 530 524 ; +C -1 ; WX 715 ; N shindagesh ; B 110 -14 786 518 ; +C -1 ; WX 673 ; N tavdages ; B 25 -4 677 524 ; +C -1 ; WX 273 ; N vavholam ; B 66 0 317 660 ; +C -1 ; WX 576 ; N betrafe ; B 38 0 579 662 ; +C -1 ; WX 491 ; N kafrafe ; B 38 -8 515 662 ; +C -1 ; WX 587 ; N perafe ; B 54 -8 612 662 ; +C -1 ; WX 607 ; N aleflamed ; B 69 0 669 716 ; +C -1 ; WX 0 ; N zerowidthnonjoiner ; B -18 -134 18 629 ; +C -1 ; WX 0 ; N zerowidthjoiner ; B -107 -134 107 690 ; +C -1 ; WX 0 ; N lefttorightmark ; B -18 -134 210 690 ; +C -1 ; WX 0 ; N righttoleftmark ; B -210 -134 17 690 ; +C -1 ; WX 0 ; N uni202A ; B -18 -134 210 603 ; +C -1 ; WX 0 ; N uni202B ; B -210 -134 18 603 ; +C -1 ; WX 0 ; N uni202D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202C ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206F ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206A ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206B ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206C ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uniF00A ; B -18 -208 18 894 ; +C -1 ; WX 0 ; N uniF00B ; B -114 -208 114 894 ; +C -1 ; WX 0 ; N uniF00C ; B -18 -208 109 894 ; +C -1 ; WX 0 ; N uniF00D ; B -109 -208 18 894 ; +C -1 ; WX 0 ; N uniF00E ; B -18 -208 114 894 ; +C -1 ; WX 1000 ; N uniFFFC ; B 0 0 1000 719 ; +C -1 ; WX 837 ; N _766 ; B 87 -13 959 728 ; +C -1 ; WX 671 ; N _767 ; B 61 -12 780 531 ; +C -1 ; WX 809 ; N _768 ; B 91 -12 949 716 ; +C -1 ; WX 714 ; N _769 ; B 70 -12 802 519 ; +C -1 ; WX 0 ; N _770 ; B -131 829 80 905 ; +C -1 ; WX 0 ; N _771 ; B -393 829 -181 905 ; +C -1 ; WX 0 ; N _772 ; B -306 754 -110 892 ; +C -1 ; WX 0 ; N f006 ; B -76 829 185 905 ; +C -1 ; WX 0 ; N f007 ; B -298 829 -37 905 ; +C -1 ; WX 0 ; N f009 ; B -205 753 37 892 ; +C -1 ; WX 0 ; N _776 ; B -96 747 106 906 ; +C -1 ; WX 0 ; N f010 ; B -101 809 94 906 ; +C -1 ; WX 0 ; N f013 ; B -233 747 -31 906 ; +C -1 ; WX 0 ; N f011 ; B -320 809 -125 906 ; +C -1 ; WX 0 ; N f01c ; B -179 763 169 875 ; +C -1 ; WX 0 ; N f015 ; B -395 821 -51 906 ; +C -1 ; WX 0 ; N _782 ; B -323 763 25 875 ; +C -1 ; WX 0 ; N _783 ; B -24 728 280 797 ; +C -1 ; WX 0 ; N _784 ; B -29 740 270 805 ; +C -1 ; WX 0 ; N f02c ; B -218 -194 -51 -59 ; +C -1 ; WX 513 ; N _786 ; B 32 92 552 716 ; +C -1 ; WX 834 ; N _787 ; B 85 -30 830 725 ; +C -1 ; WX 834 ; N _788 ; B 82 -30 830 725 ; +C -1 ; WX 0 ; N f008 ; B -126 584 116 723 ; +C -1 ; WX 0 ; N _790 ; B -270 584 -27 723 ; +C -1 ; WX 0 ; N _791 ; B -167 584 29 722 ; +C -1 ; WX 0 ; N f00f ; B -322 584 -126 722 ; +C -1 ; WX 0 ; N f012 ; B -117 584 86 757 ; +C -1 ; WX 0 ; N f014 ; B -274 584 -72 757 ; +C -1 ; WX 0 ; N f016 ; B -411 763 -63 875 ; +C -1 ; WX 0 ; N f017 ; B -508 763 -160 875 ; +C -1 ; WX 0 ; N f018 ; B -508 763 -160 875 ; +C -1 ; WX 0 ; N f019 ; B -354 592 -18 710 ; +C -1 ; WX 0 ; N f01a ; B -468 592 -132 710 ; +C -1 ; WX 0 ; N f01b ; B -483 592 -147 710 ; +C -1 ; WX 0 ; N f01e ; B -450 -194 -283 -59 ; +C -1 ; WX 0 ; N f01f ; B -499 -194 -332 -59 ; +C -1 ; WX 0 ; N f020 ; B -557 -194 -390 -59 ; +C -1 ; WX 0 ; N f021 ; B -473 -194 -306 -59 ; +C -1 ; WX 0 ; N f022 ; B -557 -194 -390 -59 ; +C -1 ; WX 0 ; N _806 ; B -138 754 58 892 ; +C -1 ; WX 0 ; N _807 ; B -89 753 153 892 ; +C -1 ; WX 0 ; N f01d ; B -215 592 121 710 ; +C -1 ; WX 0 ; N _809 ; B -499 -194 -332 -59 ; +C -1 ; WX 0 ; N f023 ; B -413 -194 -246 -59 ; +C -1 ; WX 0 ; N f029 ; B -282 -194 -115 -59 ; +C -1 ; WX 0 ; N f02a ; B -276 -194 -109 -59 ; +C -1 ; WX 0 ; N f02b ; B -276 -194 -109 -59 ; +C -1 ; WX 0 ; N f024 ; B -364 -194 -197 -59 ; +C -1 ; WX 0 ; N f025 ; B -413 -194 -246 -59 ; +C -1 ; WX 0 ; N f026 ; B -467 -194 -300 -59 ; +C -1 ; WX 0 ; N f027 ; B -462 -194 -295 -59 ; +C -1 ; WX 0 ; N f028 ; B -560 -194 -393 -59 ; +C -1 ; WX 0 ; N f02d ; B -341 821 3 906 ; +C -1 ; WX 0 ; N f02e ; B -345 763 3 875 ; +C -1 ; WX 0 ; N f02f ; B -444 821 -100 906 ; +C -1 ; WX 0 ; N f030 ; B -448 763 -100 875 ; +C -1 ; WX 278 ; N f031 ; B 40 0 289 519 ; +C -1 ; WX 722 ; N _824 ; B -11 -194 673 716 ; +C -1 ; WX 556 ; N _825 ; B 45 -194 533 531 ; +C -1 ; WX 722 ; N _826 ; B -11 0 673 906 ; +C -1 ; WX 556 ; N _827 ; B 45 -12 533 757 ; +C -1 ; WX 722 ; N _828 ; B -11 0 673 905 ; +C -1 ; WX 556 ; N _829 ; B 45 -12 571 892 ; +C -1 ; WX 722 ; N _830 ; B -11 0 673 905 ; +C -1 ; WX 556 ; N _831 ; B 45 -12 533 892 ; +C -1 ; WX 722 ; N _832 ; B -11 0 673 906 ; +C -1 ; WX 556 ; N _833 ; B 45 -12 533 906 ; +C -1 ; WX 722 ; N _834 ; B -11 0 673 906 ; +C -1 ; WX 556 ; N _835 ; B 45 -12 582 875 ; +C -1 ; WX 722 ; N _836 ; B -11 -194 673 805 ; +C -1 ; WX 556 ; N _837 ; B 45 -194 533 731 ; +C -1 ; WX 722 ; N _838 ; B -11 0 673 905 ; +C -1 ; WX 556 ; N _839 ; B 45 -12 571 892 ; +C -1 ; WX 722 ; N _840 ; B -11 0 673 905 ; +C -1 ; WX 556 ; N _841 ; B 45 -12 542 892 ; +C -1 ; WX 722 ; N _842 ; B -11 0 673 906 ; +C -1 ; WX 556 ; N _843 ; B 45 -12 542 906 ; +C -1 ; WX 722 ; N _844 ; B -11 0 682 906 ; +C -1 ; WX 556 ; N _845 ; B 45 -12 582 875 ; +C -1 ; WX 722 ; N _846 ; B -11 -194 673 797 ; +C -1 ; WX 556 ; N _847 ; B 45 -194 542 727 ; +C -1 ; WX 667 ; N _848 ; B 41 -194 721 716 ; +C -1 ; WX 556 ; N _849 ; B 58 -194 555 531 ; +C -1 ; WX 667 ; N _850 ; B 41 0 721 906 ; +C -1 ; WX 556 ; N _851 ; B 58 -12 555 757 ; +C -1 ; WX 667 ; N _852 ; B 41 0 721 874 ; +C -1 ; WX 556 ; N _853 ; B 58 -12 555 710 ; +C -1 ; WX 667 ; N _854 ; B 41 0 721 905 ; +C -1 ; WX 556 ; N _855 ; B 58 -12 572 892 ; +C -1 ; WX 667 ; N _856 ; B 41 0 721 905 ; +C -1 ; WX 556 ; N _857 ; B 58 -12 555 892 ; +C -1 ; WX 667 ; N _858 ; B 41 0 721 906 ; +C -1 ; WX 556 ; N _859 ; B 58 -12 555 906 ; +C -1 ; WX 667 ; N _860 ; B 41 0 721 906 ; +C -1 ; WX 556 ; N _861 ; B 58 -12 582 875 ; +C -1 ; WX 667 ; N _862 ; B 41 -194 721 805 ; +C -1 ; WX 556 ; N _863 ; B 58 -194 555 731 ; +C -1 ; WX 278 ; N _864 ; B 35 0 399 906 ; +C -1 ; WX 278 ; N _865 ; B 40 0 369 757 ; +C -1 ; WX 278 ; N _866 ; B -3 -194 332 716 ; +C -1 ; WX 278 ; N _867 ; B -3 -194 330 716 ; +C -1 ; WX 778 ; N _868 ; B 87 -194 784 728 ; +C -1 ; WX 611 ; N _869 ; B 61 -194 599 531 ; +C -1 ; WX 778 ; N _870 ; B 87 -13 784 906 ; +C -1 ; WX 611 ; N _871 ; B 61 -12 599 757 ; +C -1 ; WX 778 ; N _872 ; B 87 -13 784 905 ; +C -1 ; WX 611 ; N _873 ; B 61 -12 599 892 ; +C -1 ; WX 778 ; N _874 ; B 87 -13 784 905 ; +C -1 ; WX 611 ; N _875 ; B 61 -12 599 892 ; +C -1 ; WX 778 ; N _876 ; B 87 -13 784 906 ; +C -1 ; WX 611 ; N _877 ; B 61 -12 599 906 ; +C -1 ; WX 778 ; N _878 ; B 87 -13 784 906 ; +C -1 ; WX 611 ; N _879 ; B 61 -12 602 875 ; +C -1 ; WX 778 ; N _880 ; B 87 -194 784 805 ; +C -1 ; WX 611 ; N _881 ; B 61 -194 599 731 ; +C -1 ; WX 837 ; N _882 ; B 87 -13 959 904 ; +C -1 ; WX 671 ; N _883 ; B 61 -12 780 730 ; +C -1 ; WX 837 ; N _884 ; B 87 -13 959 905 ; +C -1 ; WX 671 ; N _885 ; B 61 -12 780 732 ; +C -1 ; WX 837 ; N _886 ; B 87 -13 959 906 ; +C -1 ; WX 671 ; N _887 ; B 61 -12 780 757 ; +C -1 ; WX 837 ; N _888 ; B 87 -13 959 874 ; +C -1 ; WX 671 ; N _889 ; B 61 -12 780 710 ; +C -1 ; WX 837 ; N _890 ; B 87 -194 959 728 ; +C -1 ; WX 671 ; N _891 ; B 61 -194 780 531 ; +C -1 ; WX 722 ; N _892 ; B 91 -194 765 716 ; +C -1 ; WX 611 ; N _893 ; B 70 -194 619 519 ; +C -1 ; WX 722 ; N _894 ; B 91 -12 765 906 ; +C -1 ; WX 611 ; N _895 ; B 70 -12 619 757 ; +C -1 ; WX 809 ; N _896 ; B 91 -12 949 904 ; +C -1 ; WX 714 ; N _897 ; B 70 -12 802 730 ; +C -1 ; WX 809 ; N _898 ; B 91 -12 949 905 ; +C -1 ; WX 714 ; N _899 ; B 70 -12 802 732 ; +C -1 ; WX 809 ; N _900 ; B 91 -12 949 906 ; +C -1 ; WX 714 ; N _901 ; B 70 -12 802 757 ; +C -1 ; WX 809 ; N _902 ; B 91 -12 949 874 ; +C -1 ; WX 714 ; N _903 ; B 70 -12 802 710 ; +C -1 ; WX 809 ; N _904 ; B 91 -194 949 716 ; +C -1 ; WX 714 ; N _905 ; B 70 -194 802 519 ; +C -1 ; WX 667 ; N _906 ; B 115 -194 785 716 ; +C -1 ; WX 556 ; N _907 ; B 6 -210 621 519 ; +C -1 ; WX 667 ; N _908 ; B 115 0 785 906 ; +C -1 ; WX 556 ; N _909 ; B 6 -210 621 757 ; +C -1 ; WX 667 ; N _910 ; B 115 0 785 874 ; +C -1 ; WX 556 ; N _911 ; B 6 -210 621 710 ; +C -1 ; WX 722 ; N uni01CD ; B -11 0 694 908 ; +C -1 ; WX 556 ; N uni01CE ; B 45 -12 562 731 ; +C -1 ; WX 278 ; N uni01CF ; B 35 0 480 908 ; +C -1 ; WX 278 ; N uni01D0 ; B 40 0 445 731 ; +C -1 ; WX 778 ; N uni01D1 ; B 87 -13 784 908 ; +C -1 ; WX 611 ; N uni01D2 ; B 61 -12 599 731 ; +C -1 ; WX 722 ; N uni01D3 ; B 91 -12 765 908 ; +C -1 ; WX 611 ; N uni01D4 ; B 70 -12 619 731 ; +C -1 ; WX 722 ; N uni01D5 ; B 91 -12 765 900 ; +C -1 ; WX 611 ; N uni01D6 ; B 70 -12 619 892 ; +C -1 ; WX 722 ; N uni01D7 ; B 91 -12 765 900 ; +C -1 ; WX 611 ; N uni01D8 ; B 70 -12 619 926 ; +C -1 ; WX 722 ; N uni01D9 ; B 91 -12 765 900 ; +C -1 ; WX 611 ; N uni01DA ; B 70 -12 645 927 ; +C -1 ; WX 722 ; N uni01DB ; B 91 -12 765 900 ; +C -1 ; WX 611 ; N uni01DC ; B 70 -12 619 927 ; +C -1 ; WX 0 ; N _928 ; B 31 730 318 900 ; +C -1 ; WX 0 ; N _929 ; B 31 730 326 900 ; +C -1 ; WX 0 ; N _930 ; B 31 730 323 900 ; +C -1 ; WX 0 ; N _931 ; B 31 730 302 900 ; +C -1 ; WX 614 ; N uni0492 ; B 28 0 723 716 ; +C -1 ; WX 469 ; N uni0493 ; B 18 0 552 519 ; +C -1 ; WX 927 ; N uni0496 ; B -15 -198 1016 720 ; +C -1 ; WX 736 ; N uni0497 ; B -25 -161 788 519 ; +C -1 ; WX 615 ; N uni049a ; B 43 -198 701 716 ; +C -1 ; WX 507 ; N uni049b ; B 37 -161 567 519 ; +C -1 ; WX 615 ; N uni049c ; B 43 0 701 716 ; +C -1 ; WX 507 ; N uni049d ; B 37 0 567 519 ; +C -1 ; WX 722 ; N uni04a2 ; B 43 -198 765 716 ; +C -1 ; WX 604 ; N uni04a3 ; B 35 -161 616 519 ; +C -1 ; WX 556 ; N uni04ae ; B 109 0 667 716 ; +C -1 ; WX 556 ; N uni04af ; B 85 -197 624 519 ; +C -1 ; WX 556 ; N uni04b0 ; B 57 0 667 716 ; +C -1 ; WX 556 ; N uni04b1 ; B 5 -197 623 519 ; +C -1 ; WX 667 ; N uni04b2 ; B -30 -198 784 716 ; +C -1 ; WX 556 ; N uni04b3 ; B -22 -161 612 519 ; +C -1 ; WX 708 ; N uni04b8 ; B 129 0 752 716 ; +C -1 ; WX 583 ; N uni04b9 ; B 99 0 594 519 ; +C -1 ; WX 708 ; N uni04ba ; B 53 0 676 716 ; +C -1 ; WX 583 ; N uni04bb ; B 45 0 540 519 ; +C -1 ; WX 748 ; N uni018f ; B 87 -12 754 728 ; +C -1 ; WX 556 ; N uni0259 ; B 49 -12 546 531 ; +C -1 ; WX 778 ; N uni04e8 ; B 87 -12 784 728 ; +C -1 ; WX 611 ; N uni04e9 ; B 61 -12 599 531 ; +EndCharMetrics +StartKernData +StartKernPairs 820 +KPX space A -37 +KPX space Y -18 +KPX space Alphatonos -37 +KPX space Alpha -37 +KPX space Delta -37 +KPX space Lambda -37 +KPX space Upsilon -18 +KPX space Upsilondieresis -18 +KPX one one -74 +KPX A space -37 +KPX A T -74 +KPX A V -74 +KPX A W -55 +KPX A Y -74 +KPX A quoteright -55 +KPX F comma -111 +KPX F period -111 +KPX F A -55 +KPX L space -18 +KPX L T -74 +KPX L V -55 +KPX L W -55 +KPX L Y -74 +KPX L quoteright -74 +KPX P space -37 +KPX P comma -129 +KPX P period -129 +KPX P A -74 +KPX R T -18 +KPX R W -18 +KPX R Y -18 +KPX T comma -74 +KPX T hyphen -55 +KPX T period -74 +KPX T colon -74 +KPX T semicolon -74 +KPX T A -74 +KPX T O -18 +KPX T a -37 +KPX T c -37 +KPX T e -37 +KPX T i -18 +KPX T o -37 +KPX T r -18 +KPX T s -37 +KPX T u -18 +KPX T w -37 +KPX T y -37 +KPX V comma -92 +KPX V hyphen -37 +KPX V period -92 +KPX V colon -37 +KPX V semicolon -37 +KPX V A -74 +KPX V a -37 +KPX V e -37 +KPX V i -37 +KPX V o -37 +KPX V r -18 +KPX V u -18 +KPX V y -18 +KPX W comma -74 +KPX W hyphen -37 +KPX W period -74 +KPX W colon -37 +KPX W semicolon -37 +KPX W A -55 +KPX W a -18 +KPX W e -18 +KPX W i -9 +KPX W o -18 +KPX W r -18 +KPX W u -18 +KPX W y -18 +KPX Y space -18 +KPX Y comma -92 +KPX Y hyphen -74 +KPX Y period -92 +KPX Y colon -55 +KPX Y semicolon -55 +KPX Y A -74 +KPX Y a -37 +KPX Y e -37 +KPX Y i -37 +KPX Y o -37 +KPX Y p -37 +KPX Y q -37 +KPX Y u -37 +KPX Y v -37 +KPX f f -18 +KPX f quoteright 18 +KPX r comma -55 +KPX r period -55 +KPX r quoteright 37 +KPX v comma -55 +KPX v period -55 +KPX w comma -37 +KPX w period -37 +KPX y comma -37 +KPX y period -37 +KPX quoteleft quoteleft -37 +KPX quoteright space -37 +KPX quoteright s -18 +KPX quoteright t 18 +KPX quoteright quoteright -37 +KPX quotedblbase afii10051 -113 +KPX quotedblbase afii10060 -125 +KPX quotedblbase afii10036 -113 +KPX quotedblbase afii10041 -63 +KPX quotedblbase afii10044 -100 +KPX Gamma comma -110 +KPX Gamma period -110 +KPX Gamma iotadieresistonos 130 +KPX Gamma Alpha -87 +KPX Gamma Delta -87 +KPX Gamma Lambda -87 +KPX Gamma iota -18 +KPX Gamma iotadieresis 64 +KPX Theta Alpha -28 +KPX Theta Upsilon -40 +KPX Theta Upsilondieresis -40 +KPX Phi Alpha -28 +KPX Phi Upsilon -54 +KPX Phi Upsilondieresis -54 +KPX delta gamma -18 +KPX delta chi -28 +KPX delta pi -17 +KPX tau phi 14 +KPX tau omega 14 +KPX tau omegatonos 14 +KPX phi gamma -18 +KPX phi lambda -28 +KPX phi chi -28 +KPX phi pi -17 +KPX Alphatonos space -37 +KPX Alphatonos Theta -57 +KPX Alphatonos Phi -57 +KPX Alphatonos Omicron -57 +KPX Alphatonos Tau -92 +KPX Alphatonos Upsilon -123 +KPX Alphatonos Upsilondieresis -123 +KPX Alphatonos gamma -29 +KPX Alphatonos nu -29 +KPX Alphatonos chi -29 +KPX Omicrontonos Upsilon -40 +KPX Omicrontonos Upsilondieresis -40 +KPX Upsilontonos alpha -37 +KPX Upsilontonos delta -37 +KPX Upsilontonos sigma -37 +KPX Upsilontonos phi -37 +KPX Upsilontonos iotadieresistonos 130 +KPX Upsilontonos Alpha -89 +KPX Upsilontonos Delta -66 +KPX Upsilontonos Lambda -55 +KPX Upsilontonos alphatonos -37 +KPX Upsilontonos etatonos -37 +KPX Upsilontonos iotatonos -37 +KPX Upsilontonos eta -37 +KPX Upsilontonos iota -37 +KPX Upsilontonos kappa -37 +KPX Upsilontonos mu -37 +KPX Upsilontonos omicron -37 +KPX Upsilontonos iotadieresis 64 +KPX Upsilontonos omicrontonos -37 +KPX Alpha space -37 +KPX Alpha quoteright -55 +KPX Alpha Theta -57 +KPX Alpha Phi -57 +KPX Alpha Omicron -57 +KPX Alpha Tau -92 +KPX Alpha Upsilon -123 +KPX Alpha Upsilondieresis -123 +KPX Alpha gamma -29 +KPX Alpha nu -29 +KPX Alpha chi -29 +KPX Delta space -37 +KPX Delta Theta -21 +KPX Delta Omicron -21 +KPX Delta Tau -92 +KPX Delta Upsilon -123 +KPX Delta Upsilondieresis -123 +KPX Kappa Theta -72 +KPX Kappa Phi -72 +KPX Kappa alpha -19 +KPX Kappa delta -19 +KPX Kappa sigma -19 +KPX Kappa phi -19 +KPX Kappa Omicron -72 +KPX Kappa alphatonos -19 +KPX Kappa zeta -19 +KPX Kappa theta -19 +KPX Kappa xi -19 +KPX Kappa omicron -19 +KPX Kappa omega -19 +KPX Kappa omicrontonos -19 +KPX Kappa omegatonos -19 +KPX Lambda space -37 +KPX Lambda Theta -21 +KPX Lambda Omicron -21 +KPX Lambda Tau -92 +KPX Lambda Upsilon -123 +KPX Lambda Upsilondieresis -123 +KPX Omicron Alpha -28 +KPX Omicron Upsilon -40 +KPX Omicron Upsilondieresis -40 +KPX Rho comma -128 +KPX Rho period -128 +KPX Rho Alpha -74 +KPX Rho Delta -74 +KPX Rho Lambda -74 +KPX Sigma tau -24 +KPX Tau comma -74 +KPX Tau hyphen -55 +KPX Tau period -74 +KPX Tau colon -74 +KPX Tau semicolon -74 +KPX Tau Theta -18 +KPX Tau Phi -18 +KPX Tau alpha -37 +KPX Tau delta -37 +KPX Tau epsilon -37 +KPX Tau sigma -37 +KPX Tau phi -37 +KPX Tau iotadieresistonos 137 +KPX Tau Alpha -74 +KPX Tau Delta -45 +KPX Tau Lambda -45 +KPX Tau Omicron -18 +KPX Tau Omega -18 +KPX Tau alphatonos -37 +KPX Tau epsilontonos -37 +KPX Tau gamma -27 +KPX Tau eta -18 +KPX Tau iota -18 +KPX Tau mu -18 +KPX Tau nu -37 +KPX Tau omicron -37 +KPX Tau upsilon -18 +KPX Tau chi -37 +KPX Tau psi -27 +KPX Tau iotadieresis 64 +KPX Tau upsilondieresis -18 +KPX Tau omicrontonos -37 +KPX Tau upsilontonos -18 +KPX Upsilon comma -91 +KPX Upsilon hyphen -74 +KPX Upsilon period -91 +KPX Upsilon colon -55 +KPX Upsilon semicolon -55 +KPX Upsilon alpha -37 +KPX Upsilon delta -37 +KPX Upsilon sigma -37 +KPX Upsilon phi -37 +KPX Upsilon iotadieresistonos 130 +KPX Upsilon Alpha -89 +KPX Upsilon Delta -66 +KPX Upsilon Lambda -55 +KPX Upsilon alphatonos -37 +KPX Upsilon etatonos -37 +KPX Upsilon iotatonos -37 +KPX Upsilon gamma -21 +KPX Upsilon eta -37 +KPX Upsilon iota -37 +KPX Upsilon kappa -37 +KPX Upsilon mu -37 +KPX Upsilon omicron -37 +KPX Upsilon iotadieresis 64 +KPX Upsilon omicrontonos -37 +KPX Chi omega -34 +KPX Chi omegatonos -34 +KPX Psi alpha -20 +KPX Psi delta -28 +KPX Psi sigma -20 +KPX Psi phi -20 +KPX Psi alphatonos -20 +KPX Psi theta -17 +KPX Psi omicron -20 +KPX Psi omega -20 +KPX Psi omicrontonos -20 +KPX Psi omegatonos -20 +KPX Omega Upsilon -40 +KPX Omega Upsilondieresis -40 +KPX Upsilondieresis alpha -37 +KPX Upsilondieresis delta -37 +KPX Upsilondieresis sigma -37 +KPX Upsilondieresis phi -37 +KPX Upsilondieresis iotadieresistonos 130 +KPX Upsilondieresis Alpha -89 +KPX Upsilondieresis Delta -66 +KPX Upsilondieresis Lambda -55 +KPX Upsilondieresis alphatonos -37 +KPX Upsilondieresis etatonos -37 +KPX Upsilondieresis iotatonos -37 +KPX Upsilondieresis eta -37 +KPX Upsilondieresis iota -37 +KPX Upsilondieresis kappa -37 +KPX Upsilondieresis mu -37 +KPX Upsilondieresis omicron -37 +KPX Upsilondieresis iotadieresis 64 +KPX Upsilondieresis omicrontonos -37 +KPX zeta alpha -108 +KPX zeta delta -36 +KPX zeta sigma -108 +KPX zeta tau -28 +KPX zeta phi -108 +KPX zeta alphatonos -108 +KPX zeta etatonos -38 +KPX zeta gamma -28 +KPX zeta eta -38 +KPX zeta theta -21 +KPX zeta iota -38 +KPX zeta kappa -38 +KPX zeta nu -28 +KPX zeta omicron -108 +KPX zeta omega -108 +KPX zeta omicrontonos -108 +KPX zeta omegatonos -108 +KPX zeta pi -28 +KPX kappa alpha -38 +KPX kappa delta -38 +KPX kappa sigma -38 +KPX kappa phi -38 +KPX kappa alphatonos -38 +KPX kappa zeta -38 +KPX kappa theta -38 +KPX kappa xi -38 +KPX kappa omicron -38 +KPX kappa sigma1 -38 +KPX kappa omega -38 +KPX kappa omicrontonos -38 +KPX kappa omegatonos -38 +KPX lambda alpha -14 +KPX lambda delta -14 +KPX lambda sigma -14 +KPX lambda phi -14 +KPX lambda alphatonos -14 +KPX lambda upsilondieresistonos -19 +KPX lambda zeta -14 +KPX lambda xi -14 +KPX lambda omicron -14 +KPX lambda sigma1 -14 +KPX lambda upsilon -19 +KPX lambda omega -14 +KPX lambda upsilondieresis -19 +KPX lambda omicrontonos -14 +KPX lambda upsilontonos -19 +KPX lambda omegatonos -14 +KPX xi alpha -21 +KPX xi delta -21 +KPX xi sigma -21 +KPX xi phi -21 +KPX xi alphatonos -21 +KPX xi zeta -21 +KPX xi xi -21 +KPX xi omicron -21 +KPX xi sigma1 -21 +KPX xi omicrontonos -21 +KPX omicron tau -17 +KPX omicron gamma -18 +KPX omicron chi -28 +KPX omicron pi -17 +KPX rho chi -28 +KPX rho pi -17 +KPX chi alpha -14 +KPX chi delta -14 +KPX chi sigma -14 +KPX chi phi -14 +KPX chi alphatonos -14 +KPX chi zeta -14 +KPX chi omicron -14 +KPX chi sigma1 -14 +KPX chi omega -14 +KPX chi omicrontonos -14 +KPX chi omegatonos -14 +KPX omega gamma -18 +KPX omega chi -28 +KPX omega pi -17 +KPX omicrontonos gamma -18 +KPX omicrontonos chi -28 +KPX omicrontonos pi -17 +KPX omegatonos gamma -18 +KPX omegatonos chi -28 +KPX omegatonos pi -17 +KPX afii10052 comma -100 +KPX afii10052 period -100 +KPX afii10058 quoteright -100 +KPX afii10059 quoteright -100 +KPX afii10017 quoteright -75 +KPX afii10017 afii10021 37 +KPX afii10017 afii10025 -38 +KPX afii10017 afii10029 12 +KPX afii10017 afii10032 -50 +KPX afii10017 afii10033 -25 +KPX afii10017 afii10035 -50 +KPX afii10017 afii10036 -101 +KPX afii10017 afii10037 -63 +KPX afii10017 afii10038 -63 +KPX afii10017 afii10041 -50 +KPX afii10017 afii10047 -50 +KPX afii10017 afii10065 12 +KPX afii10017 afii10066 -25 +KPX afii10017 afii10070 -25 +KPX afii10017 afii10080 -25 +KPX afii10017 afii10083 -25 +KPX afii10017 afii10085 -25 +KPX afii10017 afii10086 -25 +KPX afii10018 afii10017 -38 +KPX afii10018 afii10021 12 +KPX afii10018 afii10024 -13 +KPX afii10018 afii10025 -13 +KPX afii10018 afii10029 12 +KPX afii10018 afii10032 -13 +KPX afii10018 afii10035 -13 +KPX afii10018 afii10036 -38 +KPX afii10018 afii10037 -25 +KPX afii10018 afii10038 -26 +KPX afii10018 afii10039 -13 +KPX afii10018 afii10041 -13 +KPX afii10018 afii10044 -50 +KPX afii10018 afii10047 -25 +KPX afii10018 afii10049 -25 +KPX afii10018 afii10077 12 +KPX afii10018 afii10085 -13 +KPX afii10018 afii10097 12 +KPX afii10019 afii10017 -38 +KPX afii10019 afii10024 -25 +KPX afii10019 afii10025 -25 +KPX afii10019 afii10032 -25 +KPX afii10019 afii10035 -25 +KPX afii10019 afii10036 -63 +KPX afii10019 afii10037 -63 +KPX afii10019 afii10038 -38 +KPX afii10019 afii10039 -38 +KPX afii10019 afii10044 -63 +KPX afii10019 afii10049 -25 +KPX afii10019 afii10085 -13 +KPX afii10019 afii10087 -13 +KPX afii10019 afii10089 -38 +KPX afii10020 comma -63 +KPX afii10020 period -63 +KPX afii10020 afii10017 -51 +KPX afii10020 afii10021 -25 +KPX afii10020 afii10025 -13 +KPX afii10020 afii10029 -13 +KPX afii10020 afii10032 -13 +KPX afii10020 afii10049 -13 +KPX afii10020 afii10065 -13 +KPX afii10020 afii10067 -51 +KPX afii10020 afii10069 -13 +KPX afii10020 afii10070 -50 +KPX afii10020 afii10074 -38 +KPX afii10020 afii10077 -38 +KPX afii10020 afii10078 -25 +KPX afii10020 afii10079 -25 +KPX afii10020 afii10080 -50 +KPX afii10020 afii10082 -25 +KPX afii10020 afii10085 -25 +KPX afii10020 afii10093 -25 +KPX afii10020 afii10094 -25 +KPX afii10020 afii10096 -25 +KPX afii10020 afii10097 -25 +KPX afii10021 afii10038 -13 +KPX afii10021 afii10041 25 +KPX afii10021 afii10073 12 +KPX afii10021 afii10085 25 +KPX afii10022 afii10025 -13 +KPX afii10022 afii10029 12 +KPX afii10022 afii10083 12 +KPX afii10024 afii10025 -13 +KPX afii10024 afii10032 -13 +KPX afii10024 afii10035 -13 +KPX afii10024 afii10041 37 +KPX afii10024 afii10044 12 +KPX afii10024 afii10065 12 +KPX afii10024 afii10070 -13 +KPX afii10024 afii10080 -13 +KPX afii10024 afii10085 -13 +KPX afii10025 afii10024 -25 +KPX afii10025 afii10032 -25 +KPX afii10025 afii10035 -25 +KPX afii10025 afii10036 -38 +KPX afii10025 afii10037 -38 +KPX afii10025 afii10038 -25 +KPX afii10025 afii10041 25 +KPX afii10025 afii10049 -25 +KPX afii10025 afii10069 -13 +KPX afii10025 afii10077 12 +KPX afii10028 afii10032 -13 +KPX afii10028 afii10035 -13 +KPX afii10028 afii10036 12 +KPX afii10028 afii10038 -38 +KPX afii10028 afii10041 50 +KPX afii10028 afii10070 -38 +KPX afii10028 afii10073 -25 +KPX afii10028 afii10080 -38 +KPX afii10028 afii10083 -38 +KPX afii10028 afii10085 -13 +KPX afii10028 afii10095 -25 +KPX afii10029 afii10038 -13 +KPX afii10029 afii10065 12 +KPX afii10029 afii10085 12 +KPX afii10030 afii10041 37 +KPX afii10030 afii10065 12 +KPX afii10030 afii10085 12 +KPX afii10030 afii10089 -13 +KPX afii10032 afii10017 -38 +KPX afii10032 afii10021 -13 +KPX afii10032 afii10024 -38 +KPX afii10032 afii10029 -13 +KPX afii10032 afii10037 -63 +KPX afii10032 afii10039 -25 +KPX afii10032 afii10041 25 +KPX afii10032 afii10049 -25 +KPX afii10032 afii10078 12 +KPX afii10032 afii10097 12 +KPX afii10034 comma -125 +KPX afii10034 period -125 +KPX afii10034 colon -13 +KPX afii10034 semicolon -13 +KPX afii10034 guillemotright -25 +KPX afii10034 afii10017 -63 +KPX afii10034 afii10021 -38 +KPX afii10034 afii10024 -38 +KPX afii10034 afii10025 -38 +KPX afii10034 afii10029 -25 +KPX afii10034 afii10036 -38 +KPX afii10034 afii10037 -38 +KPX afii10034 afii10039 -38 +KPX afii10034 afii10049 -25 +KPX afii10034 afii10069 -13 +KPX afii10034 afii10070 -13 +KPX afii10034 afii10080 -13 +KPX afii10035 afii10017 -25 +KPX afii10035 afii10025 -25 +KPX afii10035 afii10036 -38 +KPX afii10035 afii10037 -38 +KPX afii10035 afii10039 -13 +KPX afii10035 afii10041 12 +KPX afii10035 afii10044 -50 +KPX afii10035 afii10047 -25 +KPX afii10035 afii10065 25 +KPX afii10035 afii10072 12 +KPX afii10035 afii10073 12 +KPX afii10035 afii10089 -13 +KPX afii10036 comma -38 +KPX afii10036 period -38 +KPX afii10036 afii10017 -38 +KPX afii10036 afii10024 25 +KPX afii10036 afii10030 12 +KPX afii10036 afii10032 -13 +KPX afii10036 afii10038 -13 +KPX afii10036 afii10047 12 +KPX afii10036 afii10067 -38 +KPX afii10036 afii10070 -38 +KPX afii10036 afii10074 -38 +KPX afii10036 afii10076 -25 +KPX afii10036 afii10077 -25 +KPX afii10036 afii10078 -25 +KPX afii10036 afii10080 -38 +KPX afii10036 afii10081 -13 +KPX afii10036 afii10082 -25 +KPX afii10036 afii10083 -38 +KPX afii10036 afii10085 -25 +KPX afii10036 afii10087 -25 +KPX afii10036 afii10091 -25 +KPX afii10036 afii10093 -13 +KPX afii10036 afii10094 -13 +KPX afii10036 afii10096 -13 +KPX afii10036 afii10097 -13 +KPX afii10037 comma -75 +KPX afii10037 period -75 +KPX afii10037 colon -25 +KPX afii10037 semicolon -25 +KPX afii10037 afii10017 -75 +KPX afii10037 afii10021 -38 +KPX afii10037 afii10025 -13 +KPX afii10037 afii10029 -13 +KPX afii10037 afii10032 -13 +KPX afii10037 afii10038 -38 +KPX afii10037 afii10047 -13 +KPX afii10037 afii10049 -13 +KPX afii10037 afii10066 -25 +KPX afii10037 afii10067 -50 +KPX afii10037 afii10068 -38 +KPX afii10037 afii10069 -25 +KPX afii10037 afii10070 -50 +KPX afii10037 afii10072 -13 +KPX afii10037 afii10073 -38 +KPX afii10037 afii10074 -38 +KPX afii10037 afii10075 -25 +KPX afii10037 afii10076 -25 +KPX afii10037 afii10077 -38 +KPX afii10037 afii10078 -25 +KPX afii10037 afii10079 -25 +KPX afii10037 afii10080 -63 +KPX afii10037 afii10081 -25 +KPX afii10037 afii10082 -25 +KPX afii10037 afii10083 -50 +KPX afii10037 afii10087 -25 +KPX afii10037 afii10088 -25 +KPX afii10037 afii10090 -25 +KPX afii10037 afii10091 -25 +KPX afii10037 afii10096 -25 +KPX afii10037 afii10097 -25 +KPX afii10038 afii10017 -38 +KPX afii10038 afii10021 -25 +KPX afii10038 afii10029 -25 +KPX afii10038 afii10030 12 +KPX afii10038 afii10036 -63 +KPX afii10038 afii10037 -63 +KPX afii10038 afii10041 25 +KPX afii10038 afii10049 -38 +KPX afii10038 afii10077 -13 +KPX afii10039 afii10025 12 +KPX afii10039 afii10032 -13 +KPX afii10039 afii10035 -13 +KPX afii10039 afii10038 -25 +KPX afii10039 afii10047 -13 +KPX afii10039 afii10080 -38 +KPX afii10039 afii10085 -13 +KPX afii10040 afii10065 25 +KPX afii10043 afii10065 25 +KPX afii10043 afii10085 25 +KPX afii10044 quoteright -100 +KPX afii10044 afii10049 -25 +KPX afii10046 quoteright -88 +KPX afii10046 afii10017 -25 +KPX afii10046 afii10024 -25 +KPX afii10046 afii10025 -25 +KPX afii10046 afii10030 -13 +KPX afii10046 afii10032 -38 +KPX afii10046 afii10035 -38 +KPX afii10046 afii10036 -100 +KPX afii10046 afii10039 -25 +KPX afii10046 afii10041 -38 +KPX afii10046 afii10047 -38 +KPX afii10046 afii10049 -38 +KPX afii10047 afii10021 -13 +KPX afii10047 afii10024 -25 +KPX afii10047 afii10025 -25 +KPX afii10047 afii10029 -25 +KPX afii10047 afii10039 -25 +KPX afii10047 afii10049 -38 +KPX afii10048 afii10017 -38 +KPX afii10048 afii10024 -25 +KPX afii10048 afii10036 -51 +KPX afii10048 afii10039 -13 +KPX afii10048 afii10041 12 +KPX afii10065 afii10077 12 +KPX afii10065 afii10085 -13 +KPX afii10065 afii10089 -38 +KPX afii10065 afii10095 -13 +KPX afii10066 afii10072 -13 +KPX afii10066 afii10073 -13 +KPX afii10066 afii10077 -13 +KPX afii10066 afii10078 -13 +KPX afii10066 afii10085 -25 +KPX afii10066 afii10087 -25 +KPX afii10066 afii10089 -38 +KPX afii10066 afii10092 -51 +KPX afii10066 afii10095 -13 +KPX afii10067 afii10065 -13 +KPX afii10067 afii10066 -25 +KPX afii10067 afii10069 -25 +KPX afii10067 afii10070 -25 +KPX afii10067 afii10072 -13 +KPX afii10067 afii10073 -13 +KPX afii10067 afii10078 -25 +KPX afii10067 afii10080 -25 +KPX afii10067 afii10083 -25 +KPX afii10067 afii10084 -13 +KPX afii10067 afii10085 -38 +KPX afii10067 afii10086 -25 +KPX afii10067 afii10089 -50 +KPX afii10067 afii10092 -63 +KPX afii10067 afii10097 -13 +KPX afii10068 comma -13 +KPX afii10068 period -13 +KPX afii10068 afii10065 -13 +KPX afii10068 afii10069 -38 +KPX afii10068 afii10070 -25 +KPX afii10068 afii10073 -25 +KPX afii10068 afii10078 -25 +KPX afii10068 afii10080 -25 +KPX afii10068 afii10083 -25 +KPX afii10068 afii10097 -13 +KPX afii10069 afii10073 -13 +KPX afii10070 afii10065 12 +KPX afii10070 afii10066 12 +KPX afii10070 afii10069 12 +KPX afii10070 afii10072 -13 +KPX afii10070 afii10077 12 +KPX afii10070 afii10080 12 +KPX afii10070 afii10083 12 +KPX afii10070 afii10085 -13 +KPX afii10070 afii10086 12 +KPX afii10070 afii10087 -13 +KPX afii10070 afii10089 -25 +KPX afii10072 afii10065 12 +KPX afii10072 afii10066 12 +KPX afii10072 afii10085 12 +KPX afii10072 afii10089 -13 +KPX afii10072 afii10092 12 +KPX afii10073 afii10066 -13 +KPX afii10073 afii10069 -13 +KPX afii10073 afii10070 -13 +KPX afii10073 afii10073 -13 +KPX afii10073 afii10078 -13 +KPX afii10073 afii10080 -13 +KPX afii10073 afii10083 -13 +KPX afii10073 afii10085 -38 +KPX afii10073 afii10086 -13 +KPX afii10073 afii10089 -50 +KPX afii10073 afii10092 -50 +KPX afii10076 afii10065 12 +KPX afii10076 afii10066 12 +KPX afii10076 afii10077 25 +KPX afii10076 afii10085 12 +KPX afii10076 afii10089 -13 +KPX afii10076 afii10095 12 +KPX afii10077 afii10066 -13 +KPX afii10077 afii10070 -13 +KPX afii10077 afii10080 -13 +KPX afii10077 afii10083 -13 +KPX afii10077 afii10085 -13 +KPX afii10077 afii10086 -13 +KPX afii10077 afii10089 -25 +KPX afii10078 afii10073 -13 +KPX afii10080 afii10065 12 +KPX afii10080 afii10072 -13 +KPX afii10080 afii10085 -25 +KPX afii10080 afii10087 -25 +KPX afii10080 afii10089 -50 +KPX afii10080 afii10095 -13 +KPX afii10082 afii10072 -13 +KPX afii10082 afii10073 -13 +KPX afii10082 afii10077 -13 +KPX afii10082 afii10078 -13 +KPX afii10082 afii10085 -26 +KPX afii10082 afii10087 -25 +KPX afii10082 afii10089 -50 +KPX afii10082 afii10095 -13 +KPX afii10083 afii10072 -13 +KPX afii10083 afii10073 -13 +KPX afii10083 afii10085 -13 +KPX afii10083 afii10086 -13 +KPX afii10083 afii10087 -13 +KPX afii10083 afii10089 -38 +KPX afii10083 afii10092 -25 +KPX afii10084 comma -13 +KPX afii10084 period -13 +KPX afii10084 afii10069 -13 +KPX afii10084 afii10070 -13 +KPX afii10084 afii10072 -13 +KPX afii10084 afii10073 -25 +KPX afii10084 afii10077 -13 +KPX afii10084 afii10078 -13 +KPX afii10084 afii10080 -13 +KPX afii10084 afii10083 -13 +KPX afii10084 afii10085 -25 +KPX afii10084 afii10095 -25 +KPX afii10085 comma -38 +KPX afii10085 period -38 +KPX afii10085 afii10066 12 +KPX afii10085 afii10072 12 +KPX afii10085 afii10073 12 +KPX afii10085 afii10087 12 +KPX afii10085 afii10097 12 +KPX afii10086 afii10085 -25 +KPX afii10086 afii10089 -38 +KPX afii10087 afii10065 -13 +KPX afii10087 afii10066 -13 +KPX afii10087 afii10070 -25 +KPX afii10087 afii10073 -13 +KPX afii10087 afii10080 -25 +KPX afii10087 afii10083 -25 +KPX afii10087 afii10086 -25 +KPX afii10087 afii10089 -25 +KPX afii10087 afii10095 -13 +KPX afii10088 afii10065 -13 +KPX afii10088 afii10070 -38 +KPX afii10088 afii10073 -13 +KPX afii10088 afii10080 -38 +KPX afii10088 afii10083 -38 +KPX afii10088 afii10085 -13 +KPX afii10091 afii10070 -25 +KPX afii10091 afii10080 -25 +KPX afii10094 afii10084 -25 +KPX afii10094 afii10089 -100 +KPX afii10095 afii10066 -13 +KPX afii10095 afii10070 -13 +KPX afii10095 afii10072 -13 +KPX afii10095 afii10073 -13 +KPX afii10095 afii10078 -25 +KPX afii10095 afii10080 -13 +KPX afii10095 afii10083 -13 +KPX afii10095 afii10086 -13 +KPX afii10095 afii10087 -25 +KPX afii10096 afii10066 -13 +KPX afii10096 afii10069 -13 +KPX afii10096 afii10070 -13 +KPX afii10096 afii10072 -25 +KPX afii10096 afii10077 -13 +KPX afii10096 afii10078 -13 +KPX afii10096 afii10080 -13 +KPX afii10096 afii10083 -13 +KPX afii10096 afii10084 -13 +KPX afii10096 afii10086 -13 +KPX afii10096 afii10087 -25 +KPX afii10096 afii10089 -63 +KPX afii10096 afii10095 -25 +KPX afii10110 comma -38 +KPX afii10110 period -38 +KPX afii10110 colon -13 +KPX afii10110 semicolon -13 +KPX afii10050 comma -25 +KPX afii10050 period -25 +KPX pi phi 14 +KPX pi omega 14 +KPX pi omegatonos 14 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/fonts/arial_ce_bi.php b/fonts/arial_ce_bi.php new file mode 100644 index 0000000..8cd7eab --- /dev/null +++ b/fonts/arial_ce_bi.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='Arial-BoldItalicMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>96,'FontBBox'=>'[-560 -376 1157 1000]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>750); +$up=-106; +$ut=105; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>278,chr(131)=>750, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>556,chr(157)=>479,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>611,chr(164)=>556,chr(165)=>722,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>278,chr(180)=>333,chr(181)=>603,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>556,chr(187)=>556,chr(188)=>611,chr(189)=>333,chr(190)=>396,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>611, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>389,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>278,chr(230)=>556,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>740,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>549,chr(248)=>389,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>333,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce_bi.z'; +$originalsize=226748; +?> diff --git a/fonts/arial_ce_bi.t1a b/fonts/arial_ce_bi.t1a new file mode 100644 index 0000000..1f47af8 --- /dev/null +++ b/fonts/arial_ce_bi.t1a @@ -0,0 +1,26289 @@ +%!PS-AdobeFont-1.0: Arial-BoldItalicMT Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +%%CreationDate: Sun May 25 23:11:12 2003 +% Converted from TrueType font 'arial_ce_bi.ttf' by ttf2pt1 program +% +%%EndComments +12 dict begin +/FontInfo 9 dict dup begin +/version (Version 2.90) readonly def +/Notice (Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved) readonly def +/FullName (Arial Bold Italic) readonly def +/FamilyName (Arial) readonly def +/Weight (Bold Italic) readonly def +/ItalicAngle -12.000000 def +/isFixedPitch false def +/UnderlinePosition -106 def +/UnderlineThickness 105 def +end readonly def +/FontName /Arial-BoldItalicMT def +/PaintType 0 def +/StrokeWidth 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox {-560 -376 1157 1000} readonly def +/Encoding 256 array +dup 0 /.notdef put +dup 1 /.notdef put +dup 2 /.notdef put +dup 3 /.notdef put +dup 4 /.notdef put +dup 5 /.notdef put +dup 6 /.notdef put +dup 7 /.notdef put +dup 8 /.notdef put +dup 9 /.notdef put +dup 10 /.notdef put +dup 11 /.notdef put +dup 12 /.notdef put +dup 13 /.notdef put +dup 14 /.notdef put +dup 15 /.notdef put +dup 16 /.notdef put +dup 17 /.notdef put +dup 18 /.notdef put +dup 19 /.notdef put +dup 20 /.notdef put +dup 21 /.notdef put +dup 22 /.notdef put +dup 23 /.notdef put +dup 24 /.notdef put +dup 25 /.notdef put +dup 26 /.notdef put +dup 27 /.notdef put +dup 28 /.notdef put +dup 29 /.notdef put +dup 30 /.notdef put +dup 31 /.notdef put +dup 32 /space put +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quotesingle put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /grave put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +dup 127 /.notdef put +dup 128 /.notdef put +dup 129 /.notdef put +dup 130 /quotesinglbase put +dup 131 /florin put +dup 132 /quotedblbase put +dup 133 /ellipsis put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 136 /circumflex put +dup 137 /perthousand put +dup 138 /Scaron put +dup 139 /guilsinglleft put +dup 140 /OE put +dup 141 /.notdef put +dup 142 /.notdef put +dup 143 /.notdef put +dup 144 /.notdef put +dup 145 /quoteleft put +dup 146 /quoteright put +dup 147 /quotedblleft put +dup 148 /quotedblright put +dup 149 /bullet put +dup 150 /endash put +dup 151 /emdash put +dup 152 /tilde put +dup 153 /trademark put +dup 154 /scaron put +dup 155 /guilsinglright put +dup 156 /oe put +dup 157 /.notdef put +dup 158 /.notdef put +dup 159 /Ydieresis put +dup 160 /space put +dup 161 /exclamdown put +dup 162 /cent put +dup 163 /sterling put +dup 164 /currency put +dup 165 /yen put +dup 166 /brokenbar put +dup 167 /section put +dup 168 /dieresis put +dup 169 /copyright put +dup 170 /ordfeminine put +dup 171 /guillemotleft put +dup 172 /logicalnot put +dup 173 /hyphen put +dup 174 /registered put +dup 175 /overscore put +dup 176 /degree put +dup 177 /plusminus put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 180 /acute put +dup 181 /mu1 put +dup 182 /paragraph put +dup 183 /periodcentered put +dup 184 /cedilla put +dup 185 /onesuperior put +dup 186 /ordmasculine put +dup 187 /guillemotright put +dup 188 /onequarter put +dup 189 /onehalf put +dup 190 /threequarters put +dup 191 /questiondown put +dup 192 /Agrave put +dup 193 /Aacute put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 196 /Adieresis put +dup 197 /Aring put +dup 198 /AE put +dup 199 /Ccedilla put +dup 200 /Egrave put +dup 201 /Eacute put +dup 202 /Ecircumflex put +dup 203 /Edieresis put +dup 204 /Igrave put +dup 205 /Iacute put +dup 206 /Icircumflex put +dup 207 /Idieresis put +dup 208 /Eth put +dup 209 /Ntilde put +dup 210 /Ograve put +dup 211 /Oacute put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 214 /Odieresis put +dup 215 /multiply put +dup 216 /Oslash put +dup 217 /Ugrave put +dup 218 /Uacute put +dup 219 /Ucircumflex put +dup 220 /Udieresis put +dup 221 /Yacute put +dup 222 /Thorn put +dup 223 /germandbls put +dup 224 /agrave put +dup 225 /aacute put +dup 226 /acircumflex put +dup 227 /atilde put +dup 228 /adieresis put +dup 229 /aring put +dup 230 /ae put +dup 231 /ccedilla put +dup 232 /egrave put +dup 233 /eacute put +dup 234 /ecircumflex put +dup 235 /edieresis put +dup 236 /igrave put +dup 237 /iacute put +dup 238 /icircumflex put +dup 239 /idieresis put +dup 240 /eth put +dup 241 /ntilde put +dup 242 /ograve put +dup 243 /oacute put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 246 /odieresis put +dup 247 /divide put +dup 248 /oslash put +dup 249 /ugrave put +dup 250 /uacute put +dup 251 /ucircumflex put +dup 252 /udieresis put +dup 253 /yacute put +dup 254 /thorn put +dup 255 /ydieresis put +readonly def +currentdict end +currentfile eexec +dup /Private 16 dict dup begin +/RD{string currentfile exch readstring pop}executeonly def +/ND{noaccess def}executeonly def +/NP{noaccess put}executeonly def +/ForceBold true def +/BlueValues [ -15 0 716 731 518 531 892 910 ] def +/OtherBlues [ -210 -194 ] def +/StdHW [ 21 ] def +/StdVW [ 147 ] def +/StemSnapH [ 21 52 61 84 101 106 109 118 121 124 136 147 ] def +/StemSnapV [ 37 56 62 77 86 90 129 133 136 140 143 147 ] def +/MinFeature {16 16} def +/password 5839 def +/Subrs 5 array +dup 0 { + 3 0 callothersubr pop pop setcurrentpoint return + } NP +dup 1 { + 0 1 callothersubr return + } NP +dup 2 { + 0 2 callothersubr return + } NP +dup 3 { + return + } NP +dup 4 { + 1 3 callothersubr pop callsubr return + } NP +ND +2 index /CharStrings 956 dict dup begin +/.notdef { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/.null { +0 0 hsbw +endchar } ND +/nonmarkingreturn { +0 278 hsbw +endchar } ND +/space { +0 278 hsbw +endchar } ND +/exclam { +0 333 hsbw +0 135 hstem +696 20 hstem +127 77 vstem +206 147 vstem +204 182 rmoveto +111 353 rlineto +38 181 rlineto +-147 0 rlineto +-35 -169 rlineto +-44 -365 rlineto +77 0 rlineto +closepath +-114 -47 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/quotedbl { +0 474 hsbw +461 255 hstem +151 101 vstem +329 101 vstem +151 461 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-149 0 rlineto +-26 -121 rlineto +-3 -134 rlineto +closepath +178 0 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-150 0 rlineto +-25 -121 rlineto +-3 -134 rlineto +closepath +endchar } ND +/numbersign { +0 556 hsbw +-12 298 hstem +430 298 hstem +9 198 vstem +344 200 vstem +75 178 rmoveto +-38 -190 rlineto +110 0 rlineto +39 190 rlineto +108 0 rlineto +-38 -190 rlineto +109 0 rlineto +39 190 rlineto +140 0 rlineto +0 108 rlineto +-118 0 rlineto +29 144 rlineto +89 0 rlineto +0 108 rlineto +-67 0 rlineto +39 190 rlineto +-113 0 rlineto +-38 -190 rlineto +-108 0 rlineto +39 190 rlineto +-109 0 rlineto +-39 -190 rlineto +-139 0 rlineto +0 -108 rlineto +117 0 rlineto +-29 -144 rlineto +-88 0 rlineto +0 -108 rlineto +66 0 rlineto +closepath +161 252 rmoveto +108 0 rlineto +-29 -144 rlineto +-108 0 rlineto +29 144 rlineto +closepath +endchar } ND +/dollar { +0 556 hsbw +-13 461 hstem +708 20 hstem +128 117 vstem +416 115 vstem +209 -5 rmoveto +-19 -94 rlineto +70 0 rlineto +18 86 rlineto +150 0 103 99 0 126 rrcurveto +0 89 -47 71 -116 47 rrcurveto +41 195 rlineto +25 -15 16 -25 6 -36 rrcurveto +120 6 rlineto +-8 93 -53 61 -84 22 rrcurveto +10 50 rlineto +-69 0 rlineto +-9 -42 rlineto +-26 0 rlineto +-100 0 -109 -100 0 -107 rrcurveto +0 -78 46 -77 103 -45 rrcurveto +-45 -216 rlineto +-37 16 -22 37 -6 56 rrcurveto +-123 -6 rlineto +8 -112 65 -79 92 -22 rrcurveto +closepath +95 453 rmoveto +-40 22 -19 29 0 37 rrcurveto +0 49 41 41 55 -1 rrcurveto +-37 -177 rlineto +closepath +37 -157 rmoveto +62 -34 13 -21 0 -36 rrcurveto +0 -55 -43 -44 -73 -6 rrcurveto +41 196 rlineto +closepath +endchar } ND +/percent { +0 889 hsbw +-29 82 hstem +264 83 hstem +352 83 hstem +645 83 hstem +91 103 316 100 538 103 vstem3 +764 100 vstem +91 494 rmoveto +0 -88 55 -54 80 0 rrcurveto +116 0 75 120 0 108 rrcurveto +0 93 -54 55 -81 0 rrcurveto +-122 0 -69 -110 0 -124 rrcurveto +closepath +103 -12 rmoveto +0 47 17 116 65 0 rrcurveto +24 0 16 -17 0 -28 rrcurveto +0 -79 -36 -86 -46 0 rrcurveto +-26 0 -14 15 0 32 rrcurveto +closepath +43 -513 rmoveto +596 759 rlineto +-112 0 rlineto +-597 -759 rlineto +113 0 rlineto +closepath +301 143 rmoveto +0 -87 55 -54 80 0 rrcurveto +117 0 74 121 0 107 rrcurveto +0 93 -53 55 -82 0 rrcurveto +-120 0 -71 -111 0 -124 rrcurveto +closepath +103 -11 rmoveto +0 47 17 116 65 0 rrcurveto +24 0 17 -17 0 -29 rrcurveto +0 -79 -37 -86 -46 0 rrcurveto +-26 0 -14 14 0 34 rrcurveto +closepath +endchar } ND +/ampersand { +0 722 hsbw +-12 114 hstem +637 91 hstem +83 138 vstem +235 129 vstem +483 120 vstem +605 312 rmoveto +-24 -37 -20 -27 -16 -16 rrcurveto +-29 28 -53 85 -27 48 rrcurveto +118 60 49 76 0 63 rrcurveto +0 72 -66 64 -102 0 rrcurveto +-120 0 -80 -78 0 -100 rrcurveto +0 -34 10 -40 22 -46 rrcurveto +-127 -66 -57 -63 0 -110 rrcurveto +0 -115 90 -88 148 0 rrcurveto +82 0 74 27 47 38 rrcurveto +24 -26 39 -32 23 -12 rrcurveto +88 92 rlineto +-29 24 -24 23 -18 20 rrcurveto +25 24 35 49 19 36 rrcurveto +-101 61 rlineto +closepath +-220 176 rmoveto +-14 29 -7 25 0 21 rrcurveto +0 44 29 30 40 0 rrcurveto +30 0 20 -20 0 -26 rrcurveto +0 -46 -42 -27 -56 -30 rrcurveto +closepath +-67 -156 rmoveto +36 -67 43 -63 49 -60 rrcurveto +-41 -27 -40 -13 -38 0 rrcurveto +-64 0 -42 42 0 60 rrcurveto +0 52 32 43 65 33 rrcurveto +closepath +endchar } ND +/quotesingle { +0 238 hsbw +461 255 hstem +151 101 vstem +151 461 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-149 0 rlineto +-26 -121 rlineto +-3 -134 rlineto +closepath +endchar } ND +/parenleft { +0 333 hsbw +-210 20 hstem +708 20 hstem +66 125 vstem +329 107 vstem +240 -210 rmoveto +-36 119 -13 85 0 97 rrcurveto +0 224 72 212 173 201 rrcurveto +-107 0 rlineto +-186 -210 -77 -165 0 -200 rrcurveto +0 -106 24 -133 55 -124 rrcurveto +95 0 rlineto +closepath +endchar } ND +/parenright { +0 333 hsbw +-210 20 hstem +708 20 hstem +-78 106 vstem +166 126 vstem +118 728 rmoveto +34 -120 14 -84 0 -98 rrcurveto +0 -226 -71 -207 -173 -203 rrcurveto +106 0 rlineto +181 208 83 167 0 200 rrcurveto +0 105 -26 134 -53 124 rrcurveto +-95 0 rlineto +closepath +endchar } ND +/asterisk { +0 389 hsbw +598 130 hstem +145 87 vstem +120 387 rmoveto +25 39 23 37 20 36 rrcurveto +66 -109 rlineto +75 49 rlineto +-8 8 -9 11 -11 14 rrcurveto +-59 66 rlineto +47 8 42 8 37 8 rrcurveto +-26 88 rlineto +-25 -10 -27 -11 -29 -13 rrcurveto +-12 -4 -9 -4 -6 -4 rrcurveto +-7 -4 -5 -2 -3 -1 rrcurveto +8 63 5 44 0 24 rrcurveto +-87 0 rlineto +0 -34 4 -43 8 -53 rrcurveto +-34 20 -39 19 -42 18 rrcurveto +-28 -86 rlineto +17 -9 94 -20 13 -2 rrcurveto +-3 -3 -6 -6 -10 -9 rrcurveto +-27 -24 -23 -26 -23 -26 rrcurveto +74 -57 rlineto +closepath +endchar } ND +/plus { +0 584 hsbw +289 128 hstem +229 125 vstem +229 103 rmoveto +125 0 rlineto +0 186 rlineto +188 0 rlineto +0 128 rlineto +-188 0 rlineto +0 187 rlineto +-125 0 rlineto +0 -187 rlineto +-187 0 rlineto +0 -128 rlineto +187 0 rlineto +0 -186 rlineto +closepath +endchar } ND +/comma { +0 278 hsbw +0 135 hstem +71 141 vstem +71 135 rmoveto +-29 -135 rlineto +65 0 rlineto +-12 -56 -25 -24 -46 -10 rrcurveto +-14 -65 rlineto +94 2 58 48 27 128 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/hyphen { +0 333 hsbw +190 136 hstem +39 272 vstem +67 326 rmoveto +-28 -136 rlineto +272 0 rlineto +28 136 rlineto +-272 0 rlineto +closepath +endchar } ND +/period { +0 278 hsbw +0 135 hstem +44 139 vstem +72 135 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/slash { +0 278 hsbw +-12 20 hstem +708 20 hstem +-43 98 vstem +311 98 vstem +-43 -12 rmoveto +98 0 rlineto +354 740 rlineto +-98 0 rlineto +-354 -740 rlineto +closepath +endchar } ND +/zero { +0 556 hsbw +-12 112 hstem +606 113 hstem +64 138 vstem +435 136 vstem +64 233 rmoveto +0 -159 84 -86 116 0 rrcurveto +210 0 97 290 0 195 rrcurveto +0 160 -84 86 -114 0 rrcurveto +-178 0 -131 -282 0 -204 rrcurveto +closepath +138 -28 rmoveto +0 115 18 286 148 0 rrcurveto +38 0 29 -29 0 -72 rrcurveto +0 -114 -15 -291 -151 0 rrcurveto +-40 0 -27 27 0 78 rrcurveto +closepath +endchar } ND +/one { +0 556 hsbw +0 20 hstem +700 20 hstem +219 141 vstem +425 86 vstem +119 411 rmoveto +60 13 85 34 59 38 rrcurveto +-104 -496 rlineto +141 0 rlineto +151 720 rlineto +-86 0 rlineto +-66 -70 -94 -62 -120 -52 rrcurveto +-26 -125 rlineto +closepath +endchar } ND +/two { +0 556 hsbw +0 128 hstem +609 110 hstem +435 136 vstem +264 493 rmoveto +17 88 35 28 44 0 rrcurveto +44 0 31 -33 0 -48 rrcurveto +0 -61 -53 -52 -98 -94 rrcurveto +-137 -131 -71 -57 -15 -133 rrcurveto +435 0 rlineto +26 128 rlineto +-248 0 rlineto +34 46 26 23 67 61 rrcurveto +106 96 64 76 0 97 rrcurveto +0 110 -81 82 -134 0 rrcurveto +-122 0 -85 -73 -22 -133 rrcurveto +137 -20 rlineto +closepath +endchar } ND +/three { +0 556 hsbw +-12 114 hstem +312 114 hstem +606 113 hstem +421 139 vstem +51 187 rmoveto +16 -127 83 -72 122 0 rrcurveto +135 0 119 109 0 127 rrcurveto +0 56 -28 54 -60 32 rrcurveto +76 28 46 64 0 74 rrcurveto +0 102 -69 85 -132 0 rrcurveto +-114 0 -80 -67 -36 -118 rrcurveto +128 -26 rlineto +18 72 34 26 40 0 rrcurveto +42 0 30 -29 0 -45 rrcurveto +0 -66 -41 -40 -74 0 rrcurveto +-14 0 rlineto +-24 -114 rlineto +22 0 rlineto +57 0 37 -37 0 -58 rrcurveto +0 -67 -47 -48 -64 0 rrcurveto +-48 0 -30 25 -10 76 rrcurveto +-134 -16 rlineto +closepath +endchar } ND +/four { +0 556 hsbw +0 265 hstem +696 20 hstem +278 132 vstem +439 121 vstem +309 146 rmoveto +-31 -146 rlineto +132 0 rlineto +31 146 rlineto +87 0 rlineto +25 119 rlineto +-87 0 rlineto +94 451 rlineto +-121 0 rlineto +-387 -453 rlineto +-25 -117 rlineto +282 0 rlineto +closepath +25 119 rmoveto +-143 0 rlineto +189 223 rlineto +-46 -223 rlineto +closepath +endchar } ND +/five { +0 556 hsbw +-12 115 hstem +383 103 hstem +578 128 hstem +63 136 vstem +411 139 vstem +63 205 rmoveto +1 -132 87 -85 122 0 rrcurveto +149 0 128 148 0 147 rrcurveto +0 124 -79 79 -109 0 rrcurveto +-27 0 -28 -6 -26 -12 rrcurveto +32 110 rlineto +238 0 rlineto +27 128 rlineto +-360 0 rlineto +-109 -366 rlineto +115 -8 rlineto +32 33 33 18 38 0 rrcurveto +50 0 34 -35 0 -66 rrcurveto +0 -112 -66 -67 -66 0 rrcurveto +-47 0 -33 33 0 67 rrcurveto +0 14 rlineto +-136 -12 rlineto +closepath +endchar } ND +/six { +0 556 hsbw +-13 113 hstem +385 93 hstem +607 112 hstem +81 135 vstem +404 136 vstem +576 541 rmoveto +-15 120 -65 58 -106 0 rrcurveto +-186 0 -123 -204 0 -256 rrcurveto +0 -158 71 -114 138 0 rrcurveto +137 0 113 140 0 140 rrcurveto +0 129 -81 82 -110 0 rrcurveto +-34 0 -32 -10 -30 -20 rrcurveto +23 88 32 71 72 0 rrcurveto +37 0 21 -20 6 -57 rrcurveto +132 11 rlineto +closepath +-360 -331 rmoveto +0 74 43 101 69 0 rrcurveto +42 0 34 -35 0 -74 rrcurveto +0 -91 -35 -85 -75 0 rrcurveto +-44 0 -34 35 0 75 rrcurveto +closepath +endchar } ND +/seven { +0 556 hsbw +0 20 hstem +577 129 hstem +123 133 vstem +104 577 rmoveto +306 0 rlineto +-149 -173 -112 -251 -26 -153 rrcurveto +133 0 rlineto +23 143 163 351 140 112 rrcurveto +21 100 rlineto +-473 0 rlineto +-26 -129 rlineto +closepath +endchar } ND +/eight { +0 556 hsbw +-13 110 hstem +332 107 hstem +612 107 hstem +140 128 vstem +437 130 vstem +215 394 rmoveto +-92 -31 -57 -83 0 -94 rrcurveto +0 -116 83 -83 127 0 rrcurveto +143 0 114 110 0 133 rrcurveto +0 66 -29 51 -58 36 rrcurveto +80 36 41 52 0 72 rrcurveto +0 101 -77 75 -126 0 rrcurveto +-120 0 -104 -94 0 -102 rrcurveto +0 -52 24 -44 51 -33 rrcurveto +closepath +53 120 rmoveto +0 54 42 44 52 0 rrcurveto +44 0 31 -32 0 -46 rrcurveto +0 -51 -46 -44 -49 0 rrcurveto +-44 0 -30 29 0 46 rrcurveto +closepath +-62 -331 rmoveto +0 89 52 60 59 0 rrcurveto +48 0 33 -35 0 -48 rrcurveto +0 -75 -41 -77 -72 0 rrcurveto +-47 0 -32 32 0 54 rrcurveto +closepath +endchar } ND +/nine { +0 556 hsbw +-12 112 hstem +229 92 hstem +606 113 hstem +100 135 vstem +423 135 vstem +63 165 rmoveto +8 -112 68 -65 110 0 rrcurveto +185 0 124 201 0 258 rrcurveto +0 166 -73 106 -134 0 rrcurveto +-152 0 -99 -134 0 -146 rrcurveto +0 -130 79 -80 111 0 rrcurveto +33 0 32 9 31 20 rrcurveto +-24 -89 -29 -69 -74 0 rrcurveto +-38 0 -21 20 -5 56 rrcurveto +-132 -11 rlineto +closepath +360 331 rmoveto +0 -75 -42 -100 -70 0 rrcurveto +-43 0 -33 35 0 74 rrcurveto +0 90 34 86 76 0 rrcurveto +44 0 34 -34 0 -76 rrcurveto +closepath +endchar } ND +/colon { +0 333 hsbw +0 135 hstem +383 136 hstem +99 138 vstem +179 519 rmoveto +-29 -136 rlineto +139 0 rlineto +28 136 rlineto +-138 0 rlineto +closepath +-80 -384 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/semicolon { +0 333 hsbw +0 135 hstem +383 136 hstem +153 139 vstem +181 519 rmoveto +-28 -136 rlineto +139 0 rlineto +28 136 rlineto +-139 0 rlineto +closepath +-79 -384 rmoveto +-29 -135 rlineto +64 0 rlineto +-12 -56 -25 -24 -46 -10 rrcurveto +-13 -65 rlineto +93 2 58 48 27 128 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/less { +0 584 hsbw +82 138 295 117 487 138 hstem3 +46 149 vstem +537 82 rmoveto +0 138 rlineto +-342 135 rlineto +342 131 rlineto +0 139 rlineto +-491 -212 rlineto +0 -118 rlineto +491 -213 rlineto +closepath +endchar } ND +/equal { +0 584 hsbw +182 126 hstem +398 126 hstem +42 500 vstem +42 398 rmoveto +500 0 rlineto +0 126 rlineto +-500 0 rlineto +0 -126 rlineto +closepath +0 -216 rmoveto +500 0 rlineto +0 126 rlineto +-500 0 rlineto +0 -126 rlineto +closepath +endchar } ND +/greater { +0 584 hsbw +81 138 295 116 487 138 hstem3 +389 149 vstem +46 81 rmoveto +492 214 rlineto +0 117 rlineto +-492 213 rlineto +0 -138 rlineto +343 -133 rlineto +-343 -135 rlineto +0 -138 rlineto +closepath +endchar } ND +/question { +0 611 hsbw +0 135 hstem +625 103 hstem +216 126 vstem +487 131 vstem +342 179 rmoveto +9 53 7 14 96 80 rrcurveto +150 125 14 39 0 58 rrcurveto +0 98 -84 82 -141 0 rrcurveto +-136 0 -101 -78 -33 -128 rrcurveto +128 -22 rlineto +20 86 45 39 74 0 rrcurveto +65 0 32 -31 0 -40 rrcurveto +0 -27 -2 -14 -104 -92 rrcurveto +-123 -109 -29 -47 -13 -86 rrcurveto +126 0 rlineto +closepath +-141 -44 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/at { +0 975 hsbw +-210 89 hstem +0 89 hstem +441 88 hstem +639 90 hstem +30 89 vstem +213 127 vstem +619 129 vstem +858 88 vstem +868 9 rmoveto +-70 -86 -112 -44 -154 0 rrcurveto +-225 0 -188 137 0 213 rrcurveto +0 216 163 194 246 0 rrcurveto +208 0 122 -122 0 -160 rrcurveto +0 -113 -99 -144 -73 0 rrcurveto +-11 0 -8 8 0 16 rrcurveto +0 6 2 15 5 22 rrcurveto +74 350 rlineto +-129 0 rlineto +-13 -54 rlineto +-28 44 -42 22 -58 0 rrcurveto +-158 0 -107 -166 0 -158 rrcurveto +0 -124 80 -81 108 0 rrcurveto +50 0 45 18 38 38 rrcurveto +9 -38 25 -18 55 0 rrcurveto +183 0 140 171 0 181 rrcurveto +0 218 -187 159 -229 0 rrcurveto +-286 0 -214 -223 0 -270 rrcurveto +0 -267 221 -179 289 0 rrcurveto +191 0 165 66 76 153 rrcurveto +-104 0 rlineto +closepath +-528 201 rmoveto +0 83 52 148 97 0 rrcurveto +52 0 39 -41 0 -73 rrcurveto +0 -99 -51 -139 -102 0 rrcurveto +-50 0 -37 38 0 83 rrcurveto +closepath +endchar } ND +/A { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +-11 151 vstem +534 139 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +endchar } ND +/B { +0 722 hsbw +0 115 hstem +302 125 hstem +596 120 hstem +564 146 vstem +40 0 rmoveto +337 0 rlineto +182 0 132 85 0 146 rrcurveto +0 65 -44 55 -73 22 rrcurveto +93 29 43 60 0 80 rrcurveto +0 128 -101 46 -174 0 rrcurveto +-245 0 rlineto +-150 -716 rlineto +closepath +236 427 rmoveto +36 169 rlineto +114 0 rlineto +92 0 46 -7 0 -64 rrcurveto +0 -76 -70 -22 -105 0 rrcurveto +-113 0 rlineto +closepath +-65 -312 rmoveto +39 187 rlineto +176 0 rlineto +82 0 33 -34 0 -48 rrcurveto +0 -81 -68 -24 -119 0 rrcurveto +-143 0 rlineto +closepath +endchar } ND +/C { +0 722 hsbw +-13 124 hstem +601 127 hstem +95 145 vstem +560 258 rmoveto +-32 -98 -68 -49 -76 0 rrcurveto +-83 0 -61 65 0 115 rrcurveto +0 137 87 173 143 0 rrcurveto +74 0 45 -35 15 -84 rrcurveto +142 14 rlineto +-18 144 -101 88 -154 0 rrcurveto +-220 0 -158 -206 0 -226 rrcurveto +0 -200 104 -109 175 0 rrcurveto +156 0 120 88 58 160 rrcurveto +-148 23 rlineto +closepath +endchar } ND +/D { +0 722 hsbw +0 115 hstem +598 118 hstem +577 148 vstem +43 0 rmoveto +253 0 rlineto +302 0 127 152 0 267 rrcurveto +0 187 -65 110 -274 0 rrcurveto +-193 0 rlineto +-150 -716 rlineto +closepath +172 115 rmoveto +100 483 rlineto +86 0 rlineto +137 0 39 -27 0 -148 rrcurveto +0 -200 -20 -108 -267 0 rrcurveto +-75 0 rlineto +closepath +endchar } ND +/E { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +190 531 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/F { +0 611 hsbw +0 20 hstem +305 119 hstem +596 120 hstem +39 148 vstem +189 501 vstem +39 0 rmoveto +148 0 rlineto +63 305 rlineto +347 0 rlineto +25 119 rlineto +-347 0 rlineto +36 172 rlineto +354 0 rlineto +25 120 rlineto +-501 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/G { +0 778 hsbw +-12 123 hstem +263 119 hstem +609 119 hstem +88 143 vstem +439 321 vstem +439 382 rmoveto +-24 -119 rlineto +182 0 rlineto +-22 -107 rlineto +-48 -24 -73 -21 -62 0 rrcurveto +-106 0 -55 55 0 122 rrcurveto +0 159 99 162 159 0 rrcurveto +81 0 54 -42 24 -80 rrcurveto +138 15 rlineto +-34 148 -100 78 -165 0 rrcurveto +-241 0 -158 -219 0 -223 rrcurveto +0 -189 104 -109 197 0 rrcurveto +113 0 118 39 75 48 rrcurveto +65 307 rlineto +-321 0 rlineto +closepath +endchar } ND +/H { +0 722 hsbw +0 439 hstem +696 20 hstem +43 148 vstem +193 147 vstem +468 147 vstem +618 147 vstem +535 320 rmoveto +-67 -320 rlineto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-58 -277 rlineto +-277 0 rlineto +57 277 rlineto +-147 0 rlineto +-150 -716 rlineto +148 0 rlineto +67 320 rlineto +277 0 rlineto +closepath +endchar } ND +/I { +0 278 hsbw +0 20 hstem +696 20 hstem +35 147 vstem +185 147 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/J { +0 556 hsbw +-12 123 hstem +696 20 hstem +29 136 vstem +455 145 vstem +455 716 rmoveto +-90 -429 rlineto +-26 -127 6 -49 -101 0 rrcurveto +-54 0 -25 24 0 46 rrcurveto +0 36 rlineto +-136 -15 rlineto +0 -38 rlineto +0 -108 67 -68 138 0 rrcurveto +162 0 65 64 48 230 rrcurveto +91 434 rlineto +-145 0 rlineto +closepath +endchar } ND +/K { +0 722 hsbw +0 20 hstem +412 304 hstem +40 148 vstem +189 147 vstem +549 167 vstem +40 0 rmoveto +148 0 rlineto +45 219 rlineto +140 122 rlineto +176 -341 rlineto +167 0 rlineto +-236 435 rlineto +321 281 rlineto +-197 0 rlineto +-331 -304 rlineto +63 304 rlineto +-147 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/L { +0 611 hsbw +0 120 hstem +696 20 hstem +195 147 vstem +45 0 rmoveto +512 0 rlineto +25 120 rlineto +-365 0 rlineto +125 596 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/M { +0 833 hsbw +0 214 hstem +598 118 hstem +41 132 314 139 594 132 vstem3 +453 0 rmoveto +282 594 rlineto +-141 -594 rlineto +135 0 rlineto +149 716 rlineto +-212 0 rlineto +-244 -502 rlineto +-22 502 rlineto +-210 0 rlineto +-149 -716 rlineto +132 0 rlineto +114 598 rlineto +26 -598 rlineto +140 0 rlineto +closepath +endchar } ND +/N { +0 722 hsbw +0 237 hstem +481 235 hstem +45 137 vstem +194 138 vstem +476 137 vstem +626 137 vstem +613 0 rmoveto +150 716 rlineto +-137 0 rlineto +-100 -479 rlineto +-194 479 rlineto +-138 0 rlineto +-149 -716 rlineto +137 0 rlineto +101 481 rlineto +193 -481 rlineto +137 0 rlineto +closepath +endchar } ND +/O { +0 778 hsbw +-13 123 hstem +605 123 hstem +87 146 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +endchar } ND +/P { +0 667 hsbw +0 20 hstem +273 119 hstem +598 118 hstem +41 147 vstem +555 147 vstem +188 0 rmoveto +57 273 rlineto +94 0 rlineto +252 0 111 94 0 169 rrcurveto +0 119 -86 61 -135 0 rrcurveto +-291 0 rlineto +-149 -716 rlineto +147 0 rlineto +closepath +82 392 rmoveto +43 206 rlineto +105 0 rlineto +91 0 46 -6 0 -68 rrcurveto +0 -107 -86 -25 -154 0 rrcurveto +-45 0 rlineto +closepath +endchar } ND +/Q { +0 778 hsbw +-13 124 hstem +605 123 hstem +87 146 vstem +637 147 vstem +526 14 rmoveto +38 -50 42 -37 46 -22 rrcurveto +70 91 rlineto +-35 19 -33 25 -31 31 rrcurveto +97 80 64 136 0 140 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-237 0 -164 -231 0 -214 rrcurveto +0 -176 118 -120 175 0 rrcurveto +52 0 48 10 46 17 rrcurveto +closepath +13 159 rmoveto +-33 37 -38 30 -44 23 rrcurveto +-53 -82 rlineto +28 -12 52 -39 0 -9 rrcurveto +0 -15 -36 5 -18 0 rrcurveto +-95 0 -69 68 0 112 rrcurveto +0 141 93 173 150 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -84 -40 -107 -58 -60 rrcurveto +closepath +endchar } ND +/R { +0 722 hsbw +0 20 hstem +296 108 hstem +596 120 hstem +44 147 vstem +594 147 vstem +191 0 rmoveto +62 296 rlineto +60 0 rlineto +180 0 9 -219 24 -77 rrcurveto +158 0 rlineto +-53 134 -37 102 -73 68 rrcurveto +148 18 72 84 0 122 rrcurveto +0 125 -86 63 -143 0 rrcurveto +-318 0 rlineto +-150 -716 rlineto +147 0 rlineto +closepath +85 404 rmoveto +40 192 rlineto +162 0 rlineto +76 0 40 -11 0 -59 rrcurveto +0 -97 -89 -25 -151 0 rrcurveto +-78 0 rlineto +closepath +endchar } ND +/S { +0 667 hsbw +-12 123 hstem +611 117 hstem +150 141 vstem +482 146 vstem +63 232 rmoveto +-1 -48 9 -42 18 -37 rrcurveto +40 -83 106 -34 110 0 rrcurveto +178 0 105 102 0 127 rrcurveto +0 114 -59 38 -148 60 rrcurveto +-82 33 -48 11 0 63 rrcurveto +0 42 31 33 82 0 rrcurveto +82 0 42 -37 7 -69 rrcurveto +141 7 rlineto +-10 130 -93 86 -168 0 rrcurveto +-166 0 -89 -89 0 -120 rrcurveto +0 -118 75 -40 129 -56 rrcurveto +86 -37 42 -9 0 -60 rrcurveto +0 -48 -40 -40 -96 0 rrcurveto +-100 0 -37 22 -5 106 rrcurveto +-141 -7 rlineto +closepath +endchar } ND +/T { +0 611 hsbw +0 20 hstem +596 120 hstem +330 147 vstem +353 0 rmoveto +124 596 rlineto +207 0 rlineto +25 120 rlineto +-564 0 rlineto +-25 -120 rlineto +210 0 rlineto +-125 -596 rlineto +148 0 rlineto +closepath +endchar } ND +/U { +0 722 hsbw +-12 123 hstem +231 485 hstem +91 144 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +endchar } ND +/V { +0 667 hsbw +0 174 hstem +696 20 hstem +113 147 vstem +647 146 vstem +399 0 rmoveto +394 716 rlineto +-146 0 rlineto +-296 -542 rlineto +-91 542 rlineto +-147 0 rlineto +129 -716 rlineto +157 0 rlineto +closepath +endchar } ND +/W { +0 944 hsbw +0 215 hstem +523 193 hstem +117 144 vstem +573 149 vstem +925 143 vstem +722 0 rmoveto +346 716 rlineto +-143 0 rlineto +-236 -496 rlineto +-16 496 rlineto +-160 0 rlineto +-245 -501 rlineto +-7 501 rlineto +-144 0 rlineto +27 -716 rlineto +152 0 rlineto +261 523 rlineto +16 -523 rlineto +149 0 rlineto +closepath +endchar } ND +/X { +0 667 hsbw +0 20 hstem +696 20 hstem +108 154 vstem +466 166 vstem +160 0 rmoveto +99 111 rlineto +52 60 33 40 13 19 rrcurveto +9 -25 19 -41 28 -56 rrcurveto +53 -108 rlineto +166 0 rlineto +-176 339 rlineto +328 377 rlineto +-185 0 rlineto +-113 -128 rlineto +-28 -31 -33 -40 -39 -48 rrcurveto +-3 6 -2 4 -2 3 rrcurveto +-30 61 -15 33 -2 6 rrcurveto +-70 134 rlineto +-154 0 rlineto +178 -354 rlineto +-316 -362 rlineto +190 0 rlineto +closepath +endchar } ND +/Y { +0 667 hsbw +0 20 hstem +696 20 hstem +254 147 vstem +614 171 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +endchar } ND +/Z { +0 611 hsbw +0 120 hstem +596 120 hstem +152 516 vstem +25 0 rmoveto +555 0 rlineto +25 120 rlineto +-375 0 rlineto +416 484 rlineto +22 112 rlineto +-516 0 rlineto +-25 -120 rlineto +333 0 rlineto +-412 -483 rlineto +-23 -113 rlineto +closepath +endchar } ND +/bracketleft { +0 333 hsbw +-197 104 hstem +607 109 hstem +201 238 vstem +271 -93 rmoveto +-107 0 rlineto +146 700 rlineto +107 0 rlineto +22 109 rlineto +-238 0 rlineto +-191 -913 rlineto +239 0 rlineto +22 104 rlineto +closepath +endchar } ND +/backslash { +0 278 hsbw +-12 20 hstem +708 20 hstem +78 98 vstem +189 98 vstem +189 -12 rmoveto +98 0 rlineto +-111 740 rlineto +-98 0 rlineto +111 -740 rlineto +closepath +endchar } ND +/bracketright { +0 333 hsbw +-197 109 hstem +611 105 hstem +-56 240 vstem +113 611 rmoveto +108 0 rlineto +-146 -699 rlineto +-108 0 rlineto +-23 -109 rlineto +240 0 rlineto +191 913 rlineto +-240 0 rlineto +-22 -105 rlineto +closepath +endchar } ND +/asciicircum { +0 584 hsbw +577 151 hstem +54 142 240 103 389 138 vstem3 +56 338 rmoveto +140 0 rlineto +96 239 rlineto +97 -239 rlineto +138 0 rlineto +-178 390 rlineto +-109 0 rlineto +-184 -390 rlineto +closepath +endchar } ND +/underscore { +0 556 hsbw +-198 89 hstem +-9 570 vstem +-9 -198 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +endchar } ND +/grave { +0 333 hsbw +586 146 hstem +236 95 vstem +134 732 rmoveto +102 -146 rlineto +95 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/a { +0 556 hsbw +-12 105 hstem +431 100 hstem +45 132 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +endchar } ND +/b { +0 611 hsbw +-12 106 hstem +431 100 hstem +696 20 hstem +36 128 vstem +186 140 vstem +466 136 vstem +36 0 rmoveto +128 0 rlineto +18 85 rlineto +34 -65 55 -32 74 0 rrcurveto +153 0 104 172 0 156 rrcurveto +0 140 -72 75 -109 0 rrcurveto +-54 0 -41 -16 -50 -38 rrcurveto +50 239 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +189 211 rmoveto +0 109 47 111 96 0 rrcurveto +54 0 44 -45 0 -73 rrcurveto +0 -94 -52 -125 -90 0 rrcurveto +-54 0 -45 47 0 70 rrcurveto +closepath +endchar } ND +/c { +0 556 hsbw +-12 110 hstem +427 104 hstem +60 139 vstem +392 195 rmoveto +-24 -66 -45 -31 -45 0 rrcurveto +-46 0 -33 33 0 62 rrcurveto +0 92 48 142 101 0 rrcurveto +46 0 30 -27 7 -57 rrcurveto +133 14 rlineto +-8 104 -78 70 -122 0 rrcurveto +-168 0 -128 -156 0 -166 rrcurveto +0 -138 83 -83 132 0 rrcurveto +116 0 91 65 46 120 rrcurveto +-136 22 rlineto +closepath +endchar } ND +/d { +0 611 hsbw +-12 105 hstem +427 104 hstem +696 20 hstem +59 136 vstem +386 133 vstem +528 140 vstem +519 0 rmoveto +149 716 rlineto +-140 0 rlineto +-56 -268 rlineto +-35 55 -52 28 -70 0 rrcurveto +-154 0 -102 -160 0 -166 rrcurveto +0 -143 73 -74 108 0 rrcurveto +61 0 46 20 51 48 rrcurveto +-12 -56 rlineto +133 0 rlineto +closepath +-324 211 rmoveto +0 106 58 110 83 0 rrcurveto +52 0 48 -51 0 -74 rrcurveto +0 -89 -50 -120 -94 0 rrcurveto +-55 0 -42 43 0 75 rrcurveto +closepath +endchar } ND +/e { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +endchar } ND +/f { +0 333 hsbw +0 20 hstem +416 103 hstem +622 106 hstem +54 140 vstem +401 519 rmoveto +-99 0 rlineto +8 36 rlineto +8 48 8 19 36 0 rrcurveto +20 0 27 -6 34 -12 rrcurveto +28 101 rlineto +-48 15 -46 8 -42 0 rrcurveto +-112 0 -25 -38 -25 -118 rrcurveto +-11 -53 rlineto +-78 0 rlineto +-21 -103 rlineto +78 0 rlineto +-87 -416 rlineto +140 0 rlineto +87 416 rlineto +99 0 rlineto +21 103 rlineto +closepath +endchar } ND +/g { +0 611 hsbw +-210 100 hstem +-2 104 hstem +431 100 hstem +61 137 vstem +491 132 vstem +31 -27 rmoveto +0 -21 rlineto +0 -116 76 -46 146 0 rrcurveto +166 0 70 86 44 210 rrcurveto +90 433 rlineto +-132 0 rlineto +-19 -92 rlineto +-32 65 -61 39 -69 0 rrcurveto +-145 0 -104 -163 0 -159 rrcurveto +0 -139 72 -72 102 0 rrcurveto +52 0 50 20 48 41 rrcurveto +-5 -25 rlineto +-20 -106 -18 -38 -86 0 rrcurveto +-46 0 -29 16 0 45 rrcurveto +-150 22 rlineto +closepath +167 250 rmoveto +0 76 63 132 73 0 rrcurveto +53 0 46 -50 0 -73 rrcurveto +0 -87 -57 -119 -85 0 rrcurveto +-54 0 -39 42 0 79 rrcurveto +closepath +endchar } ND +/h { +0 611 hsbw +0 20 hstem +431 100 hstem +696 20 hstem +42 140 vstem +192 140 vstem +449 142 vstem +182 0 rmoveto +43 206 rlineto +30 151 37 74 97 0 rrcurveto +37 0 23 -24 0 -33 rrcurveto +0 -10 -4 -22 -7 -33 rrcurveto +-64 -309 rlineto +140 0 rlineto +63 303 rlineto +9 44 5 32 0 21 rrcurveto +0 77 -52 54 -84 0 rrcurveto +-63 0 -50 -21 -64 -49 rrcurveto +54 255 rlineto +-140 0 rlineto +-150 -716 rlineto +140 0 rlineto +closepath +endchar } ND +/i { +0 278 hsbw +0 20 hstem +499 20 hstem +589 127 hstem +40 140 vstem +189 141 vstem +189 716 rmoveto +-26 -127 rlineto +140 0 rlineto +27 127 rlineto +-141 0 rlineto +closepath +-41 -197 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +endchar } ND +/j { +0 278 hsbw +-210 123 hstem +499 20 hstem +589 127 hstem +149 141 vstem +190 716 rmoveto +-26 -127 rlineto +141 0 rlineto +26 127 rlineto +-141 0 rlineto +closepath +-41 -197 rmoveto +-89 -430 rlineto +-38 -176 -15 0 -38 0 rrcurveto +-15 0 -19 3 -22 5 rrcurveto +-22 -116 rlineto +32 -10 35 -5 38 0 rrcurveto +156 0 4 85 42 205 rrcurveto +92 439 rlineto +-141 0 rlineto +closepath +endchar } ND +/k { +0 556 hsbw +0 20 hstem +499 20 hstem +696 20 hstem +38 140 vstem +188 140 vstem +376 141 vstem +38 0 rmoveto +140 0 rlineto +32 156 rlineto +95 84 rlineto +71 -240 rlineto +141 0 rlineto +-111 330 rlineto +208 189 rlineto +-182 0 rlineto +-182 -176 rlineto +78 373 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/l { +0 278 hsbw +0 20 hstem +696 20 hstem +39 140 vstem +189 140 vstem +39 0 rmoveto +140 0 rlineto +150 716 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/m { +0 889 hsbw +0 20 hstem +431 100 hstem +144 132 vstem +342 140 vstem +727 142 vstem +144 519 rmoveto +-108 -519 rlineto +140 0 rlineto +50 238 rlineto +24 128 35 65 81 0 rrcurveto +33 0 19 -21 0 -26 rrcurveto +0 -11 -4 -24 -7 -36 rrcurveto +-65 -313 rlineto +140 0 rlineto +49 235 rlineto +24 116 39 80 81 0 rrcurveto +34 0 18 -18 0 -29 rrcurveto +0 -6 -4 -22 -8 -39 rrcurveto +-67 -317 rlineto +141 0 rlineto +66 317 rlineto +9 44 5 31 0 18 rrcurveto +0 72 -50 49 -82 0 rrcurveto +-72 0 -73 -40 -36 -52 rrcurveto +-12 57 -42 35 -77 0 rrcurveto +-57 0 -54 -25 -51 -50 rrcurveto +13 63 rlineto +-132 0 rlineto +closepath +endchar } ND +/n { +0 611 hsbw +0 20 hstem +431 100 hstem +150 133 vstem +449 142 vstem +150 519 rmoveto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +26 141 62 77 74 0 rrcurveto +37 0 23 -22 0 -36 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-62 -294 rlineto +140 0 rlineto +61 293 rlineto +10 51 6 35 0 18 rrcurveto +0 81 -52 53 -85 0 rrcurveto +-64 0 -55 -23 -65 -57 rrcurveto +13 68 rlineto +-133 0 rlineto +closepath +endchar } ND +/o { +0 611 hsbw +-12 108 hstem +425 106 hstem +61 140 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +endchar } ND +/p { +0 611 hsbw +-198 20 hstem +-12 106 hstem +431 100 hstem +-5 140 vstem +144 133 vstem +469 136 vstem +144 519 rmoveto +-149 -717 rlineto +140 0 rlineto +56 269 rlineto +35 -56 52 -27 69 0 rrcurveto +151 0 107 154 0 165 rrcurveto +0 148 -72 76 -108 0 rrcurveto +-58 0 -45 -20 -56 -46 rrcurveto +11 54 rlineto +-133 0 rlineto +closepath +85 -298 rmoveto +0 78 49 132 93 0 rrcurveto +57 0 41 -43 0 -77 rrcurveto +0 -86 -54 -131 -87 0 rrcurveto +-54 0 -45 47 0 80 rrcurveto +closepath +endchar } ND +/q { +0 611 hsbw +-198 20 hstem +-12 104 hstem +427 104 hstem +60 135 vstem +335 141 vstem +496 129 vstem +496 519 rmoveto +-17 -82 rlineto +-34 62 -54 32 -75 0 rrcurveto +-153 0 -103 -175 0 -152 rrcurveto +0 -142 71 -74 111 0 rrcurveto +54 0 40 16 50 40 rrcurveto +-51 -242 rlineto +141 0 rlineto +149 717 rlineto +-129 0 rlineto +closepath +-301 -313 rmoveto +0 89 55 132 86 0 rrcurveto +52 0 47 -47 0 -77 rrcurveto +0 -87 -55 -124 -88 0 rrcurveto +-55 0 -42 44 0 70 rrcurveto +closepath +endchar } ND +/r { +0 389 hsbw +0 20 hstem +408 123 hstem +141 130 vstem +141 519 rmoveto +-109 -519 rlineto +140 0 rlineto +35 163 rlineto +27 142 50 103 96 0 rrcurveto +14 0 13 -3 13 -4 rrcurveto +54 115 rlineto +-24 10 -21 5 -20 0 rrcurveto +-57 0 -53 -38 -49 -75 rrcurveto +21 101 rlineto +-130 0 rlineto +closepath +endchar } ND +/s { +0 556 hsbw +-12 100 hstem +434 97 hstem +100 131 vstem +373 143 vstem +22 145 rmoveto +29 -100 78 -57 150 0 rrcurveto +150 0 87 83 0 99 rrcurveto +0 87 -65 36 -121 33 rrcurveto +-66 18 -33 -1 0 43 rrcurveto +0 25 24 23 59 0 rrcurveto +48 0 44 -17 16 -44 rrcurveto +130 22 rlineto +-19 84 -64 52 -134 0 rrcurveto +-133 0 -102 -59 0 -109 rrcurveto +0 -105 66 -13 138 -48 rrcurveto +46 -16 23 -6 0 -30 rrcurveto +0 -41 -48 -16 -49 0 rrcurveto +-63 0 -31 21 -24 58 rrcurveto +-136 -22 rlineto +closepath +endchar } ND +/t { +0 333 hsbw +-12 108 hstem +415 104 hstem +82 144 vstem +75 415 rmoveto +68 0 rlineto +-43 -209 rlineto +-12 -58 -6 -36 0 -16 rrcurveto +0 -68 42 -40 99 0 rrcurveto +25 0 25 3 24 4 rrcurveto +22 104 rlineto +-25 -2 -15 -1 -6 0 rrcurveto +-36 0 -11 12 0 22 rrcurveto +0 5 4 22 8 40 rrcurveto +45 218 rlineto +86 0 rlineto +22 104 rlineto +-86 0 rlineto +38 179 rlineto +-161 -96 rlineto +-17 -83 rlineto +-68 0 rlineto +-22 -104 rlineto +closepath +endchar } ND +/u { +0 611 hsbw +-12 100 hstem +499 20 hstem +70 142 vstem +380 131 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +endchar } ND +/v { +0 556 hsbw +0 170 hstem +499 20 hstem +179 120 vstem +467 151 vstem +299 0 rmoveto +319 519 rlineto +-151 0 rlineto +-129 -219 rlineto +-10 -15 -56 -103 -5 -12 rrcurveto +-2 20 -6 41 -10 61 rrcurveto +-37 227 rlineto +-137 0 rlineto +104 -519 rlineto +120 0 rlineto +closepath +endchar } ND +/w { +0 778 hsbw +0 171 hstem +330 189 hstem +72 124 vstem +394 127 vstem +700 140 vstem +582 0 rmoveto +258 519 rlineto +-140 0 rlineto +-161 -348 rlineto +-18 348 rlineto +-127 0 rlineto +-162 -348 rlineto +-36 348 rlineto +-124 0 rlineto +65 -519 rlineto +130 0 rlineto +158 330 rlineto +25 -330 rlineto +132 0 rlineto +closepath +endchar } ND +/x { +0 556 hsbw +0 20 hstem +499 20 hstem +86 149 vstem +354 148 vstem +279 146 rmoveto +75 -146 rlineto +148 0 rlineto +-130 250 rlineto +240 269 rlineto +-170 0 rlineto +-131 -148 rlineto +-76 148 rlineto +-149 0 rlineto +132 -253 rlineto +-240 -266 rlineto +172 0 rlineto +129 146 rlineto +closepath +endchar } ND +/y { +0 556 hsbw +-210 112 hstem +499 20 hstem +83 140 vstem +472 149 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +endchar } ND +/z { +0 500 hsbw +0 113 hstem +409 110 hstem +112 407 vstem +17 0 rmoveto +423 0 rlineto +24 113 rlineto +-249 0 rlineto +286 322 rlineto +18 84 rlineto +-407 0 rlineto +-23 -110 rlineto +232 0 rlineto +-284 -314 rlineto +-20 -95 rlineto +closepath +endchar } ND +/braceleft { +0 389 hsbw +-210 117 hstem +611 117 hstem +123 128 vstem +40 200 rmoveto +61 -3 22 -24 0 -56 rrcurveto +0 -17 -8 -43 -9 -44 rrcurveto +-9 -43 -8 -46 0 -22 rrcurveto +0 -89 65 -23 105 0 rrcurveto +26 0 rlineto +25 117 rlineto +-57 0 -32 4 0 36 rrcurveto +0 8 0 4 4 18 rrcurveto +5 23 21 105 0 37 rrcurveto +0 58 -18 33 -38 26 rrcurveto +105 57 1 31 40 164 rrcurveto +23 94 -25 6 124 0 rrcurveto +25 117 rlineto +-25 0 rlineto +-174 0 -42 -61 -35 -166 rrcurveto +-25 -119 -15 -61 -107 -4 rrcurveto +-25 -117 rlineto +closepath +endchar } ND +/bar { +0 280 hsbw +-210 20 hstem +708 20 hstem +86 109 vstem +86 -210 rmoveto +109 0 rlineto +0 938 rlineto +-109 0 rlineto +0 -938 rlineto +closepath +endchar } ND +/braceright { +0 389 hsbw +-210 117 hstem +611 117 hstem +149 129 vstem +336 200 rmoveto +25 117 rlineto +-63 4 -20 24 0 56 rrcurveto +0 17 8 44 9 43 rrcurveto +9 44 8 45 0 22 rrcurveto +0 88 -68 24 -102 0 rrcurveto +-26 0 rlineto +-25 -117 rlineto +55 0 34 1 0 -39 rrcurveto +0 -9 -1 -6 -4 -18 rrcurveto +-6 -27 -20 -99 0 -38 rrcurveto +0 -58 14 -27 43 -32 rrcurveto +-97 -50 -7 -40 -41 -162 rrcurveto +-25 -99 18 -1 -116 0 rrcurveto +-25 -117 rlineto +26 0 rlineto +165 0 49 59 35 163 rrcurveto +24 117 15 65 109 6 rrcurveto +closepath +endchar } ND +/asciitilde { +0 584 hsbw +321 126 hstem +33 518 vstem +33 253 rmoveto +43 45 44 23 46 0 rrcurveto +28 0 40 -10 50 -22 rrcurveto +65 -29 26 -6 34 0 rrcurveto +49 0 62 33 31 32 rrcurveto +0 132 rlineto +-43 -46 -45 -23 -46 0 rrcurveto +-19 0 -25 6 -33 14 rrcurveto +-97 41 -23 4 -41 0 rrcurveto +-64 0 -43 -24 -39 -43 rrcurveto +0 -127 rlineto +closepath +endchar } ND +/Adieresis { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +756 120 hstem +-11 151 vstem +330 120 vstem +536 120 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-137 599 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/Aring { +0 722 hsbw +-9 20 hstem +149 119 hstem +666 53 hstem +801 53 hstem +-11 151 vstem +381 54 vstem +517 53 vstem +510 149 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-111 492 rmoveto +0 -52 43 -42 52 0 rrcurveto +52 0 42 42 0 52 rrcurveto +0 52 -42 42 -52 0 rrcurveto +-52 0 -43 -42 0 -52 rrcurveto +closepath +54 0 rmoveto +0 22 17 19 24 0 rrcurveto +22 0 19 -19 0 -22 rrcurveto +0 -23 -19 -18 -22 0 rrcurveto +-24 0 -17 18 0 23 rrcurveto +closepath +endchar } ND +/Ccedilla { +0 722 hsbw +-205 59 hstem +-13 3 hstem +601 127 hstem +95 145 vstem +370 88 vstem +560 258 rmoveto +-32 -98 -68 -49 -76 0 rrcurveto +-83 0 -61 65 0 115 rrcurveto +0 137 87 173 143 0 rrcurveto +74 0 45 -35 15 -84 rrcurveto +142 14 rlineto +-18 144 -101 88 -154 0 rrcurveto +-220 0 -158 -206 0 -226 rrcurveto +0 -200 104 -109 175 0 rrcurveto +156 0 120 88 58 160 rrcurveto +-148 23 rlineto +closepath +-362 -463 rmoveto +48 0 rlineto +108 0 104 34 0 81 rrcurveto +0 44 -38 36 -70 0 rrcurveto +-20 0 -21 -3 -23 -6 rrcurveto +-17 -48 rlineto +18 3 15 1 11 0 rrcurveto +41 0 16 -15 0 -19 rrcurveto +0 -30 -73 -19 -47 0 rrcurveto +-28 0 rlineto +-24 -59 rlineto +closepath +endchar } ND +/Eacute { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +884 20 hstem +423 93 vstem +525 149 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +484 904 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/Ntilde { +0 722 hsbw +0 237 hstem +481 235 hstem +796 78 hstem +45 137 vstem +320 62 vstem +594 62 vstem +613 0 rmoveto +150 716 rlineto +-137 0 rlineto +-100 -479 rlineto +-194 479 rlineto +-138 0 rlineto +-149 -716 rlineto +137 0 rlineto +101 481 rlineto +193 -481 rlineto +137 0 rlineto +closepath +-231 756 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -32 -10 -6 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-57 0 -25 -46 -15 -72 rrcurveto +62 0 rlineto +closepath +endchar } ND +/Odieresis { +0 778 hsbw +-13 123 hstem +605 123 hstem +756 120 hstem +87 146 vstem +321 120 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +113 592 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/Udieresis { +0 722 hsbw +-12 123 hstem +231 485 hstem +756 120 hstem +91 144 vstem +314 120 vstem +520 120 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +148 160 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-24 -120 rlineto +120 0 rlineto +25 120 rlineto +-121 0 rlineto +closepath +endchar } ND +/aacute { +0 556 hsbw +-12 105 hstem +431 100 hstem +710 20 hstem +45 132 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +47 488 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/agrave { +0 556 hsbw +-12 105 hstem +431 100 hstem +586 146 hstem +45 132 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-117 490 rmoveto +102 -146 rlineto +95 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/acircumflex { +0 556 hsbw +-12 105 hstem +431 100 hstem +671 60 hstem +45 132 vstem +184 115 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +14 429 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/adieresis { +0 556 hsbw +-12 105 hstem +431 100 hstem +597 120 hstem +45 132 vstem +203 120 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-143 475 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/atilde { +0 556 hsbw +-12 105 hstem +431 100 hstem +632 78 hstem +45 132 vstem +214 61 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-96 350 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 27 -9 26 -10 rrcurveto +27 -10 28 -10 15 0 rrcurveto +45 0 42 37 12 80 rrcurveto +-63 0 rlineto +-10 -31 -9 -7 -14 0 rrcurveto +-10 0 -18 4 -25 10 rrcurveto +-43 17 -31 7 -16 0 rrcurveto +-59 0 -23 -44 -15 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/aring { +0 556 hsbw +-12 105 hstem +431 100 hstem +565 54 hstem +701 53 hstem +45 132 vstem +263 53 vstem +398 53 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-108 418 rmoveto +0 -52 42 -43 52 0 rrcurveto +52 0 42 43 0 52 rrcurveto +0 52 -42 42 -52 0 rrcurveto +-52 0 -42 -42 0 -52 rrcurveto +closepath +53 0 rmoveto +0 22 18 19 23 0 rrcurveto +22 0 19 -19 0 -22 rrcurveto +0 -23 -19 -18 -22 0 rrcurveto +-23 0 -18 18 0 23 rrcurveto +closepath +endchar } ND +/ccedilla { +0 556 hsbw +-204 59 hstem +-12 3 hstem +427 104 hstem +60 139 vstem +306 89 vstem +392 195 rmoveto +-24 -66 -45 -31 -45 0 rrcurveto +-46 0 -33 33 0 62 rrcurveto +0 92 48 142 101 0 rrcurveto +46 0 30 -27 7 -57 rrcurveto +133 14 rlineto +-8 104 -78 70 -122 0 rrcurveto +-168 0 -128 -156 0 -166 rrcurveto +0 -138 83 -83 132 0 rrcurveto +116 0 91 65 46 120 rrcurveto +-136 22 rlineto +closepath +-258 -399 rmoveto +48 0 rlineto +108 0 105 34 0 81 rrcurveto +0 44 -39 36 -70 0 rrcurveto +-20 0 -21 -3 -23 -6 rrcurveto +-17 -48 rlineto +18 3 15 1 11 0 rrcurveto +41 0 16 -15 0 -19 rrcurveto +0 -30 -73 -19 -47 0 rrcurveto +-28 0 rlineto +-24 -59 rlineto +closepath +endchar } ND +/eacute { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +710 20 hstem +58 135 vstem +311 93 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-14 429 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/egrave { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +586 146 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-179 431 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/ecircumflex { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +671 60 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-41 370 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/edieresis { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +597 120 hstem +58 135 vstem +210 121 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-217 416 rmoveto +-24 -120 rlineto +120 0 rlineto +25 120 rlineto +-121 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/iacute { +0 278 hsbw +0 20 hstem +499 20 hstem +710 20 hstem +162 93 vstem +264 149 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +116 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/igrave { +0 278 hsbw +0 20 hstem +499 20 hstem +586 146 hstem +252 95 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +2 213 rmoveto +102 -146 rlineto +95 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/icircumflex { +0 278 hsbw +0 20 hstem +499 20 hstem +671 60 hstem +54 115 vstem +293 97 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +107 152 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/idieresis { +0 278 hsbw +0 20 hstem +499 20 hstem +597 120 hstem +67 120 vstem +297 120 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +-56 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-25 -120 rlineto +121 0 rlineto +24 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/ntilde { +0 611 hsbw +0 20 hstem +431 100 hstem +632 78 hstem +235 61 vstem +449 142 vstem +150 519 rmoveto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +26 141 62 77 74 0 rrcurveto +37 0 23 -22 0 -36 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-62 -294 rlineto +140 0 rlineto +61 293 rlineto +10 51 6 35 0 18 rrcurveto +0 81 -52 53 -85 0 rrcurveto +-64 0 -55 -23 -65 -57 rrcurveto +13 68 rlineto +-133 0 rlineto +closepath +146 73 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 27 -9 26 -10 rrcurveto +27 -10 28 -10 15 0 rrcurveto +45 0 42 37 12 80 rrcurveto +-63 0 rlineto +-10 -31 -9 -7 -14 0 rrcurveto +-10 0 -18 4 -25 10 rrcurveto +-43 17 -31 7 -16 0 rrcurveto +-59 0 -23 -44 -15 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/oacute { +0 611 hsbw +-12 108 hstem +425 106 hstem +710 20 hstem +60 141 285 90 460 139 vstem3 +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-73 415 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/ograve { +0 611 hsbw +-12 108 hstem +425 106 hstem +586 146 hstem +61 140 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-189 417 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/ocircumflex { +0 611 hsbw +-12 108 hstem +425 106 hstem +671 60 hstem +61 140 vstem +208 115 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-51 356 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/odieresis { +0 611 hsbw +-12 108 hstem +425 106 hstem +597 120 hstem +61 140 vstem +208 121 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-227 402 rmoveto +-25 -120 rlineto +121 0 rlineto +25 120 rlineto +-121 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/otilde { +0 611 hsbw +-12 108 hstem +425 106 hstem +632 78 hstem +61 140 vstem +215 61 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-184 277 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 42 37 12 80 rrcurveto +-63 0 rlineto +-10 -31 -9 -7 -14 0 rrcurveto +-10 0 -18 4 -25 10 rrcurveto +-43 17 -31 7 -16 0 rrcurveto +-59 0 -23 -44 -15 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/uacute { +0 611 hsbw +-12 100 hstem +499 20 hstem +710 20 hstem +70 142 vstem +308 93 vstem +479 140 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +263 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/ugrave { +0 611 hsbw +-12 100 hstem +499 20 hstem +586 146 hstem +70 142 vstem +391 94 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +141 213 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/ucircumflex { +0 611 hsbw +-12 100 hstem +499 20 hstem +671 60 hstem +70 142 vstem +213 115 vstem +452 96 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +267 152 rmoveto +38 -87 rlineto +96 0 rlineto +-59 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/udieresis { +0 611 hsbw +-12 100 hstem +499 20 hstem +597 120 hstem +70 142 vstem +237 120 vstem +443 120 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +115 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/dagger { +0 556 hsbw +405 109 hstem +145 131 vstem +288 131 vstem +396 405 rmoveto +175 0 rlineto +23 109 rlineto +-175 0 rlineto +40 192 rlineto +-131 0 rlineto +-40 -192 rlineto +-181 0 rlineto +-23 -109 rlineto +181 0 rlineto +-120 -576 rlineto +131 0 rlineto +120 576 rlineto +closepath +endchar } ND +/degree { +0 400 hsbw +417 81 hstem +647 81 hstem +42 81 vstem +272 82 vstem +42 572 rmoveto +0 -86 69 -69 87 0 rrcurveto +85 0 71 69 0 86 rrcurveto +0 86 -71 70 -85 0 rrcurveto +-87 0 -69 -70 0 -86 rrcurveto +closepath +81 0 rmoveto +0 41 33 34 42 0 rrcurveto +41 0 33 -34 0 -41 rrcurveto +0 -40 -33 -34 -41 0 rrcurveto +-42 0 -33 34 0 40 rrcurveto +closepath +endchar } ND +/cent { +0 556 hsbw +-12 105 hstem +437 94 hstem +59 131 vstem +169 9 rmoveto +-73 -178 rlineto +60 -24 rlineto +75 185 rlineto +9 -1 9 -1 7 -2 rrcurveto +22 0 rlineto +113 0 93 67 42 120 rrcurveto +-129 20 rlineto +-30 -74 -42 -28 -44 0 rrcurveto +-8 0 rlineto +133 324 rlineto +19 -18 11 -24 3 -31 rrcurveto +124 13 rlineto +-6 74 -43 57 -68 27 rrcurveto +72 175 rlineto +-59 24 rlineto +-76 -183 rlineto +-31 0 rlineto +-165 0 -128 -154 0 -167 rrcurveto +0 -98 44 -73 66 -30 rrcurveto +closepath +45 110 rmoveto +-16 17 -8 26 0 35 rrcurveto +0 94 48 140 107 6 rrcurveto +-131 -318 rlineto +closepath +endchar } ND +/sterling { +0 556 hsbw +-12 123 hstem +301 110 hstem +620 108 hstem +154 129 vstem +163 411 rmoveto +-79 0 rlineto +-22 -110 rlineto +112 0 rlineto +-16 -103 -51 -53 -86 -37 rrcurveto +14 -126 rlineto +51 28 48 14 45 0 rrcurveto +28 0 40 -9 40 -9 rrcurveto +41 -9 41 -9 32 0 rrcurveto +45 0 33 8 53 22 rrcurveto +-42 119 rlineto +-38 -18 -37 -8 -36 0 rrcurveto +-17 0 -22 2 -27 6 rrcurveto +-20 3 -16 2 -12 0 rrcurveto +-24 0 -25 -5 -24 -10 rrcurveto +74 68 26 50 4 74 rrcurveto +95 0 rlineto +23 110 rlineto +-123 0 rlineto +-6 30 -2 23 0 16 rrcurveto +0 88 50 52 60 0 rrcurveto +48 0 33 -28 11 -70 rrcurveto +125 13 rlineto +-8 118 -80 75 -124 0 rrcurveto +-142 0 -102 -101 0 -136 rrcurveto +0 -26 3 -26 6 -28 rrcurveto +closepath +endchar } ND +/section { +0 556 hsbw +-212 100 hstem +631 97 hstem +68 121 vstem +416 117 vstem +21 -42 rmoveto +20 -101 84 -69 123 0 rrcurveto +124 0 75 73 0 88 rrcurveto +0 34 -14 36 -27 39 rrcurveto +84 41 43 64 0 67 rrcurveto +0 58 -15 41 -138 126 rrcurveto +-81 74 -3 14 0 27 rrcurveto +0 36 25 25 39 0 rrcurveto +42 0 28 -25 4 -57 rrcurveto +126 13 rlineto +-14 110 -63 56 -117 0 rrcurveto +-131 0 -66 -75 0 -90 rrcurveto +0 -30 10 -31 20 -32 rrcurveto +-88 -47 -43 -54 0 -77 rrcurveto +0 -110 196 -162 41 -39 rrcurveto +16 -21 -3 -6 0 -12 rrcurveto +0 -30 -23 -24 -45 0 rrcurveto +-50 0 -34 28 -17 70 rrcurveto +-128 -28 rlineto +closepath +233 442 rmoveto +4 -5 33 -32 60 -58 rrcurveto +54 -54 11 -21 0 -25 rrcurveto +0 -39 -35 -27 -36 -13 rrcurveto +-2 0 -6 5 -8 10 rrcurveto +-9 9 -13 13 -17 16 rrcurveto +-71 66 -30 13 0 53 rrcurveto +0 30 14 27 51 32 rrcurveto +closepath +endchar } ND +/bullet { +0 350 hsbw +209 289 hstem +32 289 vstem +321 354 rmoveto +0 80 -66 64 -78 0 rrcurveto +-80 0 -65 -66 0 -78 rrcurveto +0 -80 65 -65 80 0 rrcurveto +78 0 66 63 0 82 rrcurveto +closepath +endchar } ND +/paragraph { +0 556 hsbw +-197 20 hstem +588 128 hstem +191 119 vstem +380 116 vstem +310 -197 rmoveto +0 785 rlineto +70 0 rlineto +0 -785 rlineto +116 0 rlineto +0 785 rlineto +55 0 rlineto +0 128 rlineto +-291 0 rlineto +-191 0 -70 -68 0 -134 rrcurveto +0 -116 69 -75 123 -9 rrcurveto +0 -511 rlineto +119 0 rlineto +closepath +endchar } ND +/germandbls { +0 611 hsbw +-12 115 hstem +624 104 hstem +35 140 vstem +332 140 vstem +175 0 rmoveto +94 447 rlineto +22 111 18 66 76 0 rrcurveto +29 0 19 -19 0 -26 rrcurveto +0 -18 -4 -10 -30 -41 rrcurveto +-59 -81 -8 -25 0 -29 rrcurveto +0 -32 11 -32 59 -73 rrcurveto +34 -42 4 -14 0 -21 rrcurveto +0 -34 -25 -24 -33 0 rrcurveto +-24 0 -18 9 -18 27 rrcurveto +-99 -56 rlineto +38 -56 68 -39 72 0 rrcurveto +98 0 82 84 0 92 rrcurveto +0 49 -18 31 -40 52 rrcurveto +-31 41 -20 17 0 33 rrcurveto +0 27 18 16 33 40 rrcurveto +37 44 22 32 0 46 rrcurveto +0 77 -60 59 -121 0 rrcurveto +-161 0 -68 -82 -39 -177 rrcurveto +-98 -469 rlineto +140 0 rlineto +closepath +endchar } ND +/registered { +0 737 hsbw +-18 73 hstem +319 63 hstem +490 62 hstem +657 73 hstem +-4 74 vstem +194 87 437 71 671 73 vstem3 +370 730 rmoveto +-198 0 -176 -177 0 -197 rrcurveto +0 -196 177 -178 197 0 rrcurveto +192 0 182 179 0 195 rrcurveto +0 196 -178 178 -196 0 rrcurveto +closepath +0 -73 rmoveto +155 0 146 -144 0 -157 rrcurveto +0 -157 -144 -144 -157 0 rrcurveto +-157 0 -143 145 0 156 rrcurveto +0 157 142 144 158 0 rrcurveto +closepath +-169 -501 rmoveto +80 0 rlineto +0 163 rlineto +21 0 rlineto +45 0 21 -12 46 -86 rrcurveto +33 -65 rlineto +99 0 rlineto +-46 80 rlineto +-9 13 -7 12 -4 9 rrcurveto +-20 45 -14 3 -30 12 rrcurveto +66 9 40 44 0 58 rrcurveto +0 62 -42 49 -72 0 rrcurveto +-207 0 rlineto +0 -396 rlineto +closepath +80 226 rmoveto +0 108 rlineto +33 0 rlineto +79 0 44 -5 0 -48 rrcurveto +0 -55 -42 0 -81 0 rrcurveto +-33 0 rlineto +closepath +endchar } ND +/copyright { +0 737 hsbw +-18 74 hstem +147 70 hstem +494 69 hstem +657 73 hstem +-4 73 vstem +186 86 vstem +670 74 vstem +370 730 rmoveto +-198 0 -176 -177 0 -197 rrcurveto +0 -196 177 -178 197 0 rrcurveto +192 0 182 179 0 195 rrcurveto +0 196 -178 178 -196 0 rrcurveto +closepath +0 -73 rmoveto +155 0 145 -146 0 -155 rrcurveto +0 -157 -143 -143 -157 0 rrcurveto +-156 0 -145 144 0 156 rrcurveto +0 157 144 144 157 0 rrcurveto +closepath +90 -356 rmoveto +-18 -60 -33 -24 -42 0 rrcurveto +-52 0 -43 44 0 95 rrcurveto +0 94 42 44 59 0 rrcurveto +40 0 28 -20 19 -48 rrcurveto +79 19 rlineto +-30 81 -53 37 -80 0 rrcurveto +-115 0 -75 -93 0 -117 rrcurveto +0 -128 78 -78 111 0 rrcurveto +80 0 60 45 24 82 rrcurveto +-79 27 rlineto +closepath +endchar } ND +/trademark { +0 1000 hsbw +316 124 hstem +646 70 hstem +229 81 vstem +479 76 641 73 800 76 vstem3 +229 316 rmoveto +81 0 rlineto +0 330 rlineto +120 0 rlineto +0 70 rlineto +-325 0 rlineto +0 -70 rlineto +124 0 rlineto +0 -330 rlineto +closepath +250 0 rmoveto +76 0 rlineto +0 319 rlineto +86 -319 rlineto +73 0 rlineto +86 319 rlineto +0 -319 rlineto +77 0 rlineto +0 400 rlineto +-126 0 rlineto +-73 -276 rlineto +-73 276 rlineto +-126 0 rlineto +0 -400 rlineto +closepath +endchar } ND +/acute { +0 333 hsbw +710 20 hstem +184 93 vstem +286 149 vstem +286 730 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/dieresis { +0 333 hsbw +597 120 hstem +109 120 vstem +290 120 vstem +109 717 rmoveto +-25 -120 rlineto +121 0 rlineto +24 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/notequal { +0 549 hsbw +-12 320 hstem +398 126 hstem +699 20 hstem +239 285 vstem +206 308 rmoveto +-182 0 rlineto +0 -126 rlineto +135 0 rlineto +-72 -194 rlineto +101 0 rlineto +73 194 rlineto +263 0 rlineto +0 126 rlineto +-216 0 rlineto +34 90 rlineto +182 0 rlineto +0 126 rlineto +-135 0 rlineto +72 195 rlineto +-103 0 rlineto +-72 -195 rlineto +-262 0 rlineto +0 -126 rlineto +215 0 rlineto +-33 -90 rlineto +closepath +endchar } ND +/AE { +0 1000 hsbw +0 120 hstem +179 120 hstem +313 120 hstem +596 120 hstem +-32 151 vstem +546 138 vstem +459 179 rmoveto +-37 -179 rlineto +516 0 rlineto +24 120 rlineto +-378 0 rlineto +41 193 rlineto +336 0 rlineto +25 120 rlineto +-337 0 rlineto +35 163 rlineto +350 0 rlineto +25 120 rlineto +-675 0 rlineto +-416 -716 rlineto +151 0 rlineto +102 179 rlineto +238 0 rlineto +closepath +25 120 rmoveto +-194 0 rlineto +169 297 rlineto +87 0 rlineto +-62 -297 rlineto +closepath +endchar } ND +/Oslash { +0 778 hsbw +-12 118 hstem +605 123 hstem +83 146 vstem +637 143 vstem +151 84 rmoveto +-73 -88 rlineto +68 -56 rlineto +72 87 rlineto +42 -26 54 -13 65 0 rrcurveto +229 0 172 216 0 222 rrcurveto +0 81 -22 67 -42 52 rrcurveto +71 85 rlineto +-68 56 rlineto +-68 -82 rlineto +-46 28 -56 15 -66 0 rrcurveto +-236 0 -164 -230 0 -220 rrcurveto +0 -75 22 -65 46 -54 rrcurveto +closepath +96 116 rmoveto +-12 28 -6 29 0 32 rrcurveto +0 138 102 178 141 0 rrcurveto +34 0 31 -9 26 -18 rrcurveto +-316 -378 rlineto +closepath +371 308 rmoveto +12 -28 7 -28 0 -26 rrcurveto +0 -144 -103 -176 -139 0 rrcurveto +-32 0 -30 9 -27 18 rrcurveto +312 375 rlineto +closepath +endchar } ND +/infinity { +0 713 hsbw +182 72 293 119 451 72 hstem3 +74 69 vstem +291 87 vstem +569 71 vstem +333 412 rmoveto +-40 53 -55 30 -46 0 rrcurveto +-66 0 -52 -54 0 -88 rrcurveto +0 -90 52 -54 66 0 rrcurveto +46 0 55 29 40 55 rrcurveto +48 -79 47 -32 62 0 rrcurveto +86 0 64 64 0 107 rrcurveto +0 105 -64 65 -86 0 rrcurveto +-62 0 -47 -33 -48 -78 rrcurveto +closepath +45 -58 rmoveto +53 82 28 15 34 0 rrcurveto +42 0 34 -36 0 -61 rrcurveto +0 -56 -28 -44 -49 0 rrcurveto +-54 0 -16 33 -44 67 rrcurveto +closepath +-87 0 rmoveto +-31 -40 -22 -29 -40 0 rrcurveto +-31 0 -24 26 0 44 rrcurveto +0 42 24 26 31 0 rrcurveto +29 0 31 -23 33 -46 rrcurveto +closepath +endchar } ND +/plusminus { +0 549 hsbw +0 128 hstem +360 128 hstem +212 125 vstem +212 174 rmoveto +125 0 rlineto +0 186 rlineto +188 0 rlineto +0 128 rlineto +-188 0 rlineto +0 186 rlineto +-125 0 rlineto +0 -186 rlineto +-188 0 rlineto +0 -128 rlineto +188 0 rlineto +0 -186 rlineto +closepath +-188 -174 rmoveto +501 0 rlineto +0 128 rlineto +-501 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/lessequal { +0 549 hsbw +0 128 hstem +164 138 377 118 570 138 hstem3 +29 149 vstem +520 164 rmoveto +0 138 rlineto +-342 136 rlineto +342 131 rlineto +0 139 rlineto +-491 -212 rlineto +0 -119 rlineto +491 -213 rlineto +closepath +-491 -164 rmoveto +491 0 rlineto +0 128 rlineto +-491 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/greaterequal { +0 549 hsbw +0 128 hstem +164 139 378 117 571 137 hstem3 +372 148 vstem +29 165 rmoveto +491 213 rlineto +0 118 rlineto +-491 212 rlineto +0 -137 rlineto +343 -133 rlineto +-343 -135 rlineto +0 -138 rlineto +closepath +0 -165 rmoveto +491 0 rlineto +0 128 rlineto +-491 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/yen { +0 556 hsbw +0 230 hstem +292 424 hstem +209 231 vstem +507 160 vstem +316 0 rmoveto +29 136 rlineto +179 0 rlineto +20 94 rlineto +-180 0 rlineto +13 62 rlineto +180 0 rlineto +20 94 rlineto +-137 0 rlineto +227 330 rlineto +-160 0 rlineto +-62 -95 rlineto +-41 -63 -40 -70 -39 -78 rrcurveto +-17 86 -13 60 -8 33 rrcurveto +-35 127 rlineto +-143 0 rlineto +100 -330 rlineto +-133 0 rlineto +-19 -94 rlineto +182 0 rlineto +-13 -62 rlineto +-183 0 rlineto +-19 -94 rlineto +182 0 rlineto +-28 -136 rlineto +138 0 rlineto +closepath +endchar } ND +/mu1 { +0 576 hsbw +-201 20 hstem +-12 104 hstem +499 20 hstem +-37 140 vstem +115 140 vstem +350 125 vstem +115 519 rmoveto +-152 -720 rlineto +140 0 rlineto +54 256 rlineto +28 -50 27 -17 43 0 rrcurveto +33 0 21 8 51 52 rrcurveto +-10 -48 rlineto +125 0 rlineto +109 519 rlineto +-138 0 rlineto +-57 -272 rlineto +-27 -126 -42 -29 -50 0 rrcurveto +-46 0 -35 35 0 54 rrcurveto +0 12 1 13 2 14 rrcurveto +13 58 rlineto +50 241 rlineto +-140 0 rlineto +closepath +endchar } ND +/partialdiff { +0 494 hsbw +-12 93 hstem +639 89 hstem +20 111 vstem +401 74 vstem +183 548 rmoveto +36 70 31 21 44 0 rrcurveto +84 0 23 -79 0 -100 rrcurveto +-82 1 -70 -13 -58 -28 rrcurveto +-110 -53 -61 -98 0 -108 rrcurveto +0 -111 61 -62 90 0 rrcurveto +198 0 106 263 0 209 rrcurveto +0 151 -45 117 -133 0 rrcurveto +-79 0 -68 -46 -34 -93 rrcurveto +67 -41 rlineto +closepath +213 -178 rmoveto +-21 -152 -59 -137 -116 0 rrcurveto +-38 0 -31 33 0 51 rrcurveto +0 112 120 94 123 0 rrcurveto +5 -1 rlineto +17 0 rlineto +closepath +endchar } ND +/summation { +0 713 hsbw +-210 78 hstem +648 80 hstem +60 109 vstem +68 728 rmoveto +0 -85 rlineto +294 -377 rlineto +-302 -385 rlineto +0 -91 rlineto +617 0 rlineto +0 78 rlineto +-508 0 rlineto +317 402 rlineto +-297 378 rlineto +483 0 rlineto +0 80 rlineto +-604 0 rlineto +closepath +endchar } ND +/product { +0 823 hsbw +-210 20 hstem +643 85 hstem +79 94 vstem +650 94 vstem +79 728 rmoveto +0 -938 rlineto +94 0 rlineto +0 853 rlineto +477 0 rlineto +0 -853 rlineto +94 0 rlineto +0 938 rlineto +-665 0 rlineto +closepath +endchar } ND +/pi1 { +0 549 hsbw +0 20 hstem +421 98 hstem +0 141 vstem +245 139 vstem +102 519 rmoveto +-29 -101 rlineto +54 0 rlineto +-127 -418 rlineto +141 0 rlineto +127 419 rlineto +103 0 rlineto +-126 -419 rlineto +139 0 rlineto +128 421 rlineto +48 0 rlineto +28 98 rlineto +-486 0 rlineto +closepath +endchar } ND +/integral { +0 274 hsbw +-107 76 hstem +834 76 hstem +98 77 vstem +98 463 rmoveto +0 -168 6 -136 12 -102 rrcurveto +3 -26 2 -19 0 -13 rrcurveto +0 -22 -9 -8 -10 0 rrcurveto +-7 0 -9 7 -9 9 rrcurveto +-9 7 -11 8 -13 0 rrcurveto +-26 0 -18 -18 0 -30 rrcurveto +0 -34 23 -25 35 0 rrcurveto +95 0 11 96 3 131 rrcurveto +2 87 3 69 3 43 rrcurveto +0 88 rlineto +0 83 -6 108 -12 134 rrcurveto +-4 33 -1 24 0 14 rrcurveto +0 22 9 9 11 0 rrcurveto +5 0 6 -4 8 -6 rrcurveto +13 -12 13 -5 12 0 rrcurveto +25 0 19 19 0 31 rrcurveto +0 26 -28 27 -33 0 rrcurveto +-66 0 -38 -72 -3 -167 rrcurveto +-1 -51 -2 -72 -4 -85 rrcurveto +closepath +endchar } ND +/ordfeminine { +0 370 hsbw +363 70 hstem +652 76 hstem +82 96 vstem +317 95 vstem +208 612 rmoveto +14 26 22 14 30 0 rrcurveto +30 0 13 -12 0 -16 rrcurveto +0 -10 -2 -13 -4 -17 rrcurveto +-153 -17 -76 -4 0 -101 rrcurveto +0 -58 41 -41 64 0 rrcurveto +34 0 32 10 30 21 rrcurveto +0 -9 2 -8 3 -6 rrcurveto +94 0 rlineto +-7 16 -3 17 0 17 rrcurveto +0 13 9 42 11 43 rrcurveto +10 43 10 46 0 23 rrcurveto +0 56 -41 41 -92 0 rrcurveto +-83 0 -55 -38 -26 -65 rrcurveto +93 -13 rlineto +closepath +81 -97 rmoveto +-15 -64 -23 -18 -36 0 rrcurveto +-23 0 -14 14 0 19 rrcurveto +0 22 4 13 107 14 rrcurveto +closepath +endchar } ND +/ordmasculine { +0 365 hsbw +362 83 hstem +646 82 hstem +72 99 vstem +315 100 vstem +72 513 rmoveto +0 -90 60 -61 92 0 rrcurveto +112 0 79 120 0 96 rrcurveto +0 88 -63 62 -92 0 rrcurveto +-114 0 -74 -105 0 -110 rrcurveto +closepath +99 -12 rmoveto +0 70 37 75 54 0 rrcurveto +32 0 21 -20 0 -36 rrcurveto +0 -67 -38 -78 -53 0 rrcurveto +-32 0 -21 21 0 35 rrcurveto +closepath +endchar } ND +/Ohm { +0 768 hsbw +0 112 hstem +627 107 hstem +38 151 vstem +226 116 vstem +583 154 vstem +226 101 rmoveto +-151 11 rlineto +-48 0 rlineto +0 -112 rlineto +315 0 rlineto +0 119 rlineto +-115 53 -38 95 0 118 rrcurveto +0 153 84 89 111 0 rrcurveto +116 0 83 -84 0 -160 rrcurveto +0 -115 -39 -96 -110 -53 rrcurveto +0 -119 rlineto +313 0 rlineto +0 113 rlineto +-35 0 rlineto +-161 -11 rlineto +126 56 60 107 0 132 rrcurveto +0 192 -142 145 -216 0 rrcurveto +-206 0 -135 -137 0 -201 rrcurveto +0 -138 55 -101 133 -56 rrcurveto +closepath +endchar } ND +/ae { +0 889 hsbw +-12 110 224 76 431 100 hstem3 +31 126 vstem +739 127 vstem +856 215 rmoveto +6 30 4 32 0 32 rrcurveto +0 138 -85 84 -126 0 rrcurveto +-70 0 -58 -22 -44 -43 rrcurveto +-36 54 -52 11 -74 0 rrcurveto +-128 0 -81 -61 -24 -86 rrcurveto +134 -14 rlineto +14 42 24 19 50 0 rrcurveto +54 0 24 -25 0 -46 rrcurveto +0 -13 rlineto +-1 -4 -1 -5 -1 -5 rrcurveto +-20 -8 -47 -7 -66 -6 rrcurveto +-140 -13 -81 -41 0 -118 rrcurveto +0 -91 63 -61 100 0 rrcurveto +82 0 72 40 60 81 rrcurveto +37 -81 65 -40 92 0 rrcurveto +103 0 80 50 56 102 rrcurveto +-126 20 rlineto +-26 -45 -36 -22 -46 0 rrcurveto +-59 0 -47 46 -2 76 rrcurveto +357 0 rlineto +closepath +-118 85 rmoveto +-228 0 rlineto +18 85 56 46 60 0 rrcurveto +57 0 38 -41 0 -74 rrcurveto +-1 -5 rlineto +0 -11 rlineto +closepath +-371 -55 rmoveto +-17 -81 -52 -70 -74 0 rrcurveto +-42 0 -25 26 0 32 rrcurveto +0 85 88 -5 122 13 rrcurveto +closepath +endchar } ND +/oslash { +0 611 hsbw +-12 102 hstem +429 102 hstem +59 131 vstem +466 132 vstem +489 501 rmoveto +-36 20 -45 10 -54 0 rrcurveto +-186 0 -109 -141 0 -168 rrcurveto +0 -64 17 -53 36 -42 rrcurveto +-59 -68 rlineto +52 -47 rlineto +62 71 rlineto +39 -20 45 -11 51 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 65 -18 53 -36 41 rrcurveto +60 69 rlineto +-54 46 rlineto +-61 -70 rlineto +closepath +-76 -88 rmoveto +-216 -251 rlineto +-5 15 -2 15 0 16 rrcurveto +0 92 57 129 105 0 rrcurveto +23 0 20 -6 18 -10 rrcurveto +closepath +45 -58 rmoveto +5 -16 3 -16 0 -15 rrcurveto +0 -89 -61 -129 -102 0 rrcurveto +-23 0 -20 5 -18 10 rrcurveto +216 250 rlineto +closepath +endchar } ND +/questiondown { +0 611 hsbw +-209 103 hstem +383 136 hstem +27 131 vstem +303 126 vstem +444 383 rmoveto +28 136 rlineto +-139 0 rlineto +-28 -136 rlineto +139 0 rlineto +closepath +-141 -43 rmoveto +-10 -55 -7 -13 -95 -79 rrcurveto +-152 -126 -12 -40 0 -57 rrcurveto +0 -98 83 -81 142 0 rrcurveto +136 0 102 79 32 126 rrcurveto +-128 22 rlineto +-20 -86 -46 -38 -73 0 rrcurveto +-66 0 -31 30 0 40 rrcurveto +0 27 2 15 104 91 rrcurveto +124 108 27 47 14 88 rrcurveto +-126 0 rlineto +closepath +endchar } ND +/exclamdown { +0 333 hsbw +-197 20 hstem +383 136 hstem +12 147 vstem +162 77 vstem +276 383 rmoveto +29 136 rlineto +-139 0 rlineto +-28 -136 rlineto +138 0 rlineto +closepath +-114 -47 rmoveto +-113 -353 rlineto +-37 -180 rlineto +147 0 rlineto +35 168 rlineto +45 365 rlineto +-77 0 rlineto +closepath +endchar } ND +/logicalnot { +0 584 hsbw +399 125 hstem +417 125 vstem +417 184 rmoveto +125 0 rlineto +0 340 rlineto +-500 0 rlineto +0 -125 rlineto +375 0 rlineto +0 -215 rlineto +closepath +endchar } ND +/radical { +0 549 hsbw +501 20 hstem +514 36 vstem +514 913 rmoveto +-127 -794 rlineto +-198 402 rlineto +-147 -74 rlineto +17 -31 rlineto +97 44 rlineto +242 -498 rlineto +152 951 rlineto +-36 0 rlineto +closepath +endchar } ND +/florin { +0 556 hsbw +-210 116 hstem +416 103 hstem +611 117 hstem +251 138 vstem +135 416 rmoveto +98 0 rlineto +-73 -427 rlineto +-10 -58 -2 -25 -48 0 rrcurveto +-20 0 -27 4 -35 7 rrcurveto +-28 -108 rlineto +40 -12 46 -7 51 0 rrcurveto +101 0 42 45 18 103 rrcurveto +84 478 rlineto +100 0 rlineto +18 103 rlineto +-101 0 rlineto +5 27 rlineto +10 56 15 9 35 0 rrcurveto +20 0 26 -5 31 -8 rrcurveto +27 110 rlineto +-44 13 -43 7 -44 0 rrcurveto +-113 0 -33 -29 -22 -137 rrcurveto +-8 -43 rlineto +-99 0 rlineto +-17 -103 rlineto +closepath +endchar } ND +/approxequal { +0 549 hsbw +203 125 hstem +373 126 hstem +15 519 vstem +15 372 rmoveto +43 44 44 23 46 0 rrcurveto +28 0 40 -11 51 -22 rrcurveto +67 -29 20 -4 34 0 rrcurveto +57 0 58 33 31 32 rrcurveto +0 131 rlineto +-46 -50 -51 -20 -37 0 rrcurveto +-29 0 -23 11 -51 20 rrcurveto +-61 24 -25 11 -51 0 rrcurveto +-56 0 -48 -23 -41 -44 rrcurveto +0 -126 rlineto +closepath +0 -237 rmoveto +43 45 44 23 46 0 rrcurveto +28 0 40 -11 51 -22 rrcurveto +67 -29 20 -5 34 0 rrcurveto +57 0 58 33 31 32 rrcurveto +0 132 rlineto +-46 -50 -51 -21 -37 0 rrcurveto +-28 0 -21 12 -54 20 rrcurveto +-59 22 -28 12 -50 0 rrcurveto +-56 0 -48 -23 -41 -44 rrcurveto +0 -126 rlineto +closepath +endchar } ND +/increment { +0 612 hsbw +0 40 hstem +14 586 vstem +600 0 rmoveto +-279 677 rlineto +-307 -677 rlineto +586 0 rlineto +closepath +-115 40 rmoveto +-410 0 rlineto +215 472 rlineto +195 -472 rlineto +closepath +endchar } ND +/guillemotleft { +0 556 hsbw +35 442 hstem +162 98 vstem +350 101 vstem +252 270 rmoveto +98 -235 rlineto +101 0 rlineto +-62 224 rlineto +173 218 rlineto +-120 0 rlineto +-190 -207 rlineto +closepath +-199 0 rmoveto +109 -235 rlineto +98 0 rlineto +-65 225 rlineto +177 217 rlineto +-118 0 rlineto +-201 -207 rlineto +closepath +endchar } ND +/guillemotright { +0 556 hsbw +35 442 hstem +133 101 vstem +324 98 vstem +332 242 rmoveto +-98 235 rlineto +-101 0 rlineto +62 -224 rlineto +-173 -218 rlineto +120 0 rlineto +190 207 rlineto +closepath +199 1 rmoveto +-109 234 rlineto +-98 0 rlineto +65 -225 rlineto +-177 -217 rlineto +118 0 rlineto +201 208 rlineto +closepath +endchar } ND +/ellipsis { +0 1000 hsbw +0 135 hstem +93 138 417 138 741 138 vstem3 +121 135 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +324 0 rmoveto +-28 -135 rlineto +138 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +324 0 rmoveto +-28 -135 rlineto +138 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/Agrave { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +759 146 hstem +-11 151 vstem +473 94 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-122 628 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/Atilde { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +796 78 hstem +-11 151 vstem +312 61 401 156 585 61 vstem3 +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-119 479 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -32 -8 -6 -16 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -31 7 -17 0 rrcurveto +-56 0 -25 -45 -15 -73 rrcurveto +61 0 rlineto +closepath +endchar } ND +/Otilde { +0 778 hsbw +-13 123 hstem +605 123 hstem +796 78 hstem +87 146 vstem +329 62 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +158 472 rmoveto +9 30 15 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 28 -10 15 0 rrcurveto +46 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -32 -10 -6 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-56 0 -26 -45 -15 -73 rrcurveto +62 0 rlineto +closepath +endchar } ND +/OE { +0 1000 hsbw +-12 118 hstem +317 120 hstem +610 118 hstem +69 132 vstem +552 143 vstem +613 716 rmoveto +-17 -80 rlineto +-31 57 -66 35 -74 0 rrcurveto +-202 0 -154 -226 0 -222 rrcurveto +0 -182 108 -110 143 0 rrcurveto +69 0 44 20 43 50 rrcurveto +-13 -58 rlineto +499 0 rlineto +25 120 rlineto +-359 0 rlineto +41 197 rlineto +317 0 rlineto +25 120 rlineto +-316 0 rlineto +33 159 rlineto +326 0 rlineto +25 120 rlineto +-466 0 rlineto +closepath +-412 -452 rmoveto +0 147 93 199 128 0 rrcurveto +76 0 54 -54 0 -85 rrcurveto +0 -115 -43 -250 -163 0 rrcurveto +-87 0 -58 59 0 99 rrcurveto +closepath +endchar } ND +/oe { +0 944 hsbw +-12 100 218 83 431 100 hstem3 +58 140 vstem +455 141 vstem +815 129 vstem +932 214 rmoveto +8 27 4 31 0 34 rrcurveto +0 142 -80 83 -132 0 rrcurveto +-72 0 -63 -25 -55 -48 rrcurveto +-46 49 -60 24 -77 0 rrcurveto +-184 0 -117 -148 0 -162 rrcurveto +0 -132 106 -101 137 0 rrcurveto +82 0 66 26 52 51 rrcurveto +43 -52 60 -25 78 0 rrcurveto +100 0 79 50 56 101 rrcurveto +-125 22 rlineto +-25 -49 -36 -24 -48 0 rrcurveto +-58 0 -45 46 2 80 rrcurveto +350 0 rlineto +closepath +-118 87 rmoveto +-218 0 rlineto +22 93 46 37 58 0 rrcurveto +56 0 37 -39 0 -74 rrcurveto +-1 -5 rlineto +0 -12 rlineto +closepath +-616 -98 rmoveto +0 111 46 111 106 0 rrcurveto +61 0 44 -44 0 -78 rrcurveto +0 -106 -59 -102 -94 0 rrcurveto +-60 0 -44 44 0 64 rrcurveto +closepath +endchar } ND +/endash { +0 556 hsbw +208 103 hstem +-2 556 vstem +-2 208 rmoveto +556 0 rlineto +0 103 rlineto +-556 0 rlineto +0 -103 rlineto +closepath +endchar } ND +/emdash { +0 1000 hsbw +208 103 hstem +0 1000 vstem +0 208 rmoveto +1000 0 rlineto +0 103 rlineto +-1000 0 rlineto +0 -103 rlineto +closepath +endchar } ND +/quotedblleft { +0 500 hsbw +433 135 hstem +125 142 vstem +361 141 vstem +502 433 rmoveto +28 135 rlineto +-64 0 rlineto +13 57 23 23 47 11 rrcurveto +14 65 rlineto +-94 -2 -59 -48 -26 -129 rrcurveto +-23 -112 rlineto +141 0 rlineto +closepath +-235 0 rmoveto +28 135 rlineto +-65 0 rlineto +13 57 23 23 47 11 rrcurveto +14 65 rlineto +-94 -2 -57 -48 -28 -129 rrcurveto +-23 -112 rlineto +142 0 rlineto +closepath +endchar } ND +/quotedblright { +0 500 hsbw +580 136 hstem +189 142 vstem +425 141 vstem +189 716 rmoveto +-28 -136 rlineto +64 0 rlineto +-14 -56 -23 -24 -46 -10 rrcurveto +-14 -65 rlineto +94 1 58 48 27 130 rrcurveto +24 112 rlineto +-142 0 rlineto +closepath +236 0 rmoveto +-29 -136 rlineto +65 0 rlineto +-14 -56 -22 -24 -48 -10 rrcurveto +-13 -65 rlineto +93 1 58 48 28 130 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/quoteleft { +0 278 hsbw +433 135 hstem +109 141 vstem +250 433 rmoveto +29 135 rlineto +-65 0 rlineto +13 57 23 23 47 11 rrcurveto +14 65 rlineto +-94 -2 -57 -48 -28 -129 rrcurveto +-23 -112 rlineto +141 0 rlineto +closepath +endchar } ND +/quoteright { +0 278 hsbw +580 136 hstem +185 141 vstem +185 716 rmoveto +-29 -136 rlineto +64 0 rlineto +-14 -56 -23 -24 -46 -10 rrcurveto +-13 -65 rlineto +93 1 58 48 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/divide { +0 549 hsbw +90 139 290 127 479 137 hstem3 +206 137 vstem +206 479 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +-182 -190 rmoveto +500 0 rlineto +0 128 rlineto +-500 0 rlineto +0 -128 rlineto +closepath +182 -199 rmoveto +137 0 rlineto +0 138 rlineto +-137 0 rlineto +0 -138 rlineto +closepath +endchar } ND +/lozenge { +0 494 hsbw +0 46 hstem +647 47 hstem +23 53 vstem +214 54 vstem +417 55 vstem +268 694 rmoveto +-54 0 rlineto +-191 -348 rlineto +191 -346 rlineto +54 0 rlineto +204 346 rlineto +-204 348 rlineto +closepath +-26 -47 rmoveto +175 -301 rlineto +-175 -300 rlineto +-166 300 rlineto +166 301 rlineto +closepath +endchar } ND +/ydieresis { +0 556 hsbw +-210 112 hstem +499 20 hstem +597 120 hstem +194 120 vstem +424 120 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +136 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-25 -120 rlineto +121 0 rlineto +24 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/Ydieresis { +0 667 hsbw +0 20 hstem +696 20 hstem +756 120 hstem +286 120 vstem +491 120 vstem +614 171 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +-90 876 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/fraction { +0 167 hsbw +705 20 hstem +-249 85 vstem +407 85 vstem +-164 -30 rmoveto +656 755 rlineto +-85 0 rlineto +-656 -755 rlineto +85 0 rlineto +closepath +endchar } ND +/Euro { +0 556 hsbw +-13 124 hstem +251 76 hstem +391 75 hstem +601 127 hstem +104 149 vstem +639 683 rmoveto +-45 30 -55 15 -66 0 rrcurveto +-169 0 -131 -107 -52 -155 rrcurveto +-79 0 rlineto +-15 -75 rlineto +77 0 rlineto +-4 -28 -2 -21 -1 -15 rrcurveto +-55 0 rlineto +-15 -76 rlineto +68 0 rlineto +14 -166 98 -98 167 0 rrcurveto +42 0 43 8 43 16 rrcurveto +33 149 rlineto +-44 -33 -50 -16 -57 0 rrcurveto +-78 0 -61 62 -5 78 rrcurveto +239 0 rlineto +14 76 rlineto +-250 0 rlineto +2 16 2 13 2 11 rrcurveto +3 10 1 8 0 6 rrcurveto +252 0 rlineto +15 75 rlineto +-243 0 rlineto +41 90 64 45 88 0 rrcurveto +52 0 38 -17 25 -34 rrcurveto +54 133 rlineto +closepath +endchar } ND +/guilsinglleft { +0 333 hsbw +35 442 hstem +168 99 vstem +60 270 rmoveto +108 -235 rlineto +99 0 rlineto +-65 225 rlineto +176 217 rlineto +-117 0 rlineto +-201 -207 rlineto +closepath +endchar } ND +/guilsinglright { +0 333 hsbw +35 442 hstem +121 100 vstem +319 242 rmoveto +-98 235 rlineto +-100 0 rlineto +61 -224 rlineto +-172 -218 rlineto +119 0 rlineto +190 207 rlineto +closepath +endchar } ND +/fi { +0 611 hsbw +0 20 hstem +416 103 hstem +622 106 hstem +58 140 vstem +373 140 vstem +522 140 vstem +406 519 rmoveto +-99 0 rlineto +7 36 rlineto +9 48 6 19 37 0 rrcurveto +20 0 28 -6 34 -12 rrcurveto +27 101 rlineto +-48 15 -45 8 -43 0 rrcurveto +-110 0 -29 -39 -22 -117 rrcurveto +-11 -53 rlineto +-79 0 rlineto +-21 -103 rlineto +78 0 rlineto +-87 -416 rlineto +140 0 rlineto +87 416 rlineto +99 0 rlineto +22 103 rlineto +closepath +116 197 rmoveto +-26 -127 rlineto +140 0 rlineto +26 127 rlineto +-140 0 rlineto +closepath +-41 -197 rmoveto +-108 -519 rlineto +140 0 rlineto +108 519 rlineto +-140 0 rlineto +closepath +endchar } ND +/fl { +0 611 hsbw +0 20 hstem +416 103 hstem +622 106 hstem +57 140 vstem +371 140 vstem +521 140 vstem +404 519 rmoveto +-99 0 rlineto +8 36 rlineto +8 48 8 19 36 0 rrcurveto +20 0 27 -6 34 -12 rrcurveto +28 101 rlineto +-48 15 -46 8 -42 0 rrcurveto +-112 0 -25 -38 -25 -118 rrcurveto +-11 -53 rlineto +-78 0 rlineto +-22 -103 rlineto +79 0 rlineto +-87 -416 rlineto +140 0 rlineto +87 416 rlineto +99 0 rlineto +21 103 rlineto +closepath +-33 -519 rmoveto +140 0 rlineto +150 716 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/daggerdbl { +0 556 hsbw +-4 109 hstem +430 109 hstem +145 132 vstem +329 131 vstem +403 430 rmoveto +174 0 rlineto +23 109 rlineto +-175 0 rlineto +35 167 rlineto +-131 0 rlineto +-36 -167 rlineto +-181 0 rlineto +-22 -109 rlineto +181 0 rlineto +-68 -325 rlineto +-181 0 rlineto +-23 -109 rlineto +181 0 rlineto +-35 -167 rlineto +132 0 rlineto +35 167 rlineto +174 0 rlineto +23 109 rlineto +-174 0 rlineto +68 325 rlineto +closepath +endchar } ND +/periodcentered { +0 278 hsbw +280 137 hstem +72 137 vstem +72 280 rmoveto +137 0 rlineto +0 137 rlineto +-137 0 rlineto +0 -137 rlineto +closepath +endchar } ND +/quotesinglbase { +0 278 hsbw +0 135 hstem +71 141 vstem +71 135 rmoveto +-29 -135 rlineto +65 0 rlineto +-12 -56 -25 -24 -46 -10 rrcurveto +-14 -65 rlineto +94 2 58 48 27 128 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/quotedblbase { +0 500 hsbw +0 135 hstem +64 142 vstem +300 141 vstem +64 135 rmoveto +-28 -135 rlineto +64 0 rlineto +-12 -56 -25 -24 -46 -10 rrcurveto +-14 -65 rlineto +94 2 58 48 27 128 rrcurveto +24 112 rlineto +-142 0 rlineto +closepath +236 0 rmoveto +-29 -135 rlineto +65 0 rlineto +-14 -56 -22 -24 -48 -10 rrcurveto +-13 -65 rlineto +93 2 58 48 28 128 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/perthousand { +0 1000 hsbw +-26 83 hstem +267 83 hstem +353 83 hstem +645 83 hstem +68 91 vstem +270 95 vstem +387 91 vstem +589 96 vstem +724 90 vstem +926 95 vstem +68 490 rmoveto +0 -90 47 -47 70 0 rrcurveto +106 0 74 146 0 94 rrcurveto +0 85 -49 50 -74 0 rrcurveto +-120 0 -54 -159 0 -79 rrcurveto +closepath +91 -6 rmoveto +0 36 19 125 58 0 rrcurveto +18 0 16 -16 0 -26 rrcurveto +0 -53 -13 -114 -66 0 rrcurveto +-20 0 -12 12 0 36 rrcurveto +closepath +31 -512 rmoveto +466 756 rlineto +-100 0 rlineto +-463 -756 rlineto +97 0 rlineto +closepath +197 140 rmoveto +0 -91 47 -47 70 0 rrcurveto +109 0 72 146 0 95 rrcurveto +0 84 -50 51 -73 0 rrcurveto +-123 0 -52 -159 0 -79 rrcurveto +closepath +91 -7 rmoveto +0 38 18 124 59 0 rrcurveto +18 0 16 -16 0 -26 rrcurveto +0 -52 -16 -116 -62 0 rrcurveto +-22 0 -11 12 0 36 rrcurveto +closepath +246 7 rmoveto +0 -91 47 -47 70 0 rrcurveto +109 0 71 146 0 95 rrcurveto +0 84 -49 51 -74 0 rrcurveto +-120 0 -54 -159 0 -79 rrcurveto +closepath +90 -7 rmoveto +0 38 19 124 59 0 rrcurveto +18 0 16 -16 0 -26 rrcurveto +0 -52 -14 -116 -64 0 rrcurveto +-20 0 -14 12 0 36 rrcurveto +closepath +endchar } ND +/Acircumflex { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +845 60 hstem +-11 151 vstem +292 116 vstem +531 97 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +2 568 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-146 -147 rlineto +116 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Ecircumflex { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +845 60 hstem +276 116 vstem +515 97 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +437 845 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +116 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Aacute { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +884 20 hstem +-11 151 vstem +435 93 vstem +534 139 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +45 627 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/Edieresis { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +756 120 hstem +307 120 vstem +512 120 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +291 876 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/Egrave { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +759 146 hstem +484 95 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +340 905 rmoveto +103 -146 rlineto +95 0 rlineto +-63 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/Iacute { +0 278 hsbw +0 20 hstem +696 20 hstem +884 20 hstem +35 147 200 86 304 147 vstem3 +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +267 904 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/Icircumflex { +0 278 hsbw +0 20 hstem +696 20 hstem +845 60 hstem +91 115 vstem +330 96 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +257 845 rmoveto +38 -87 rlineto +96 0 rlineto +-59 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Idieresis { +0 278 hsbw +0 20 hstem +696 20 hstem +756 120 hstem +102 120 vstem +308 120 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +92 876 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/Igrave { +0 278 hsbw +0 20 hstem +696 20 hstem +759 146 hstem +35 147 vstem +288 95 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +151 905 rmoveto +102 -146 rlineto +95 0 rlineto +-63 146 rlineto +-134 0 rlineto +closepath +endchar } ND +/Oacute { +0 778 hsbw +-13 123 hstem +605 123 hstem +884 20 hstem +87 146 vstem +464 93 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +333 620 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/Ocircumflex { +0 778 hsbw +-13 123 hstem +605 123 hstem +845 60 hstem +87 146 vstem +333 115 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +301 561 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Ograve { +0 778 hsbw +-13 123 hstem +605 123 hstem +759 146 hstem +87 146 vstem +479 95 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +143 621 rmoveto +103 -146 rlineto +95 0 rlineto +-63 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/Uacute { +0 722 hsbw +-12 123 hstem +231 485 hstem +884 20 hstem +91 144 vstem +387 93 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +298 188 rmoveto +-102 -147 rlineto +93 0 rlineto +159 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/Ucircumflex { +0 722 hsbw +-12 123 hstem +231 485 hstem +845 60 hstem +91 144 vstem +295 116 vstem +534 97 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +306 129 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +116 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Ugrave { +0 722 hsbw +-12 123 hstem +231 485 hstem +759 146 hstem +91 144 vstem +462 95 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +169 189 rmoveto +102 -146 rlineto +95 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/dotlessi { +0 278 hsbw +0 20 hstem +499 20 hstem +40 140 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +endchar } ND +/circumflex { +0 333 hsbw +671 60 hstem +56 115 vstem +295 97 vstem +257 671 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/tilde { +0 333 hsbw +632 78 hstem +93 61 vstem +366 63 vstem +154 592 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 40 37 14 80 rrcurveto +-63 0 rlineto +-10 -31 -9 -7 -14 0 rrcurveto +-10 0 -18 4 -25 10 rrcurveto +-43 17 -31 7 -17 0 rrcurveto +-57 0 -24 -44 -15 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/macron { +0 333 hsbw +603 94 hstem +85 312 vstem +104 697 rmoveto +-19 -94 rlineto +312 0 rlineto +20 94 rlineto +-313 0 rlineto +closepath +endchar } ND +/breve { +0 333 hsbw +585 142 hstem +84 68 vstem +326 65 vstem +84 727 rmoveto +13 -95 51 -47 78 0 rrcurveto +73 0 65 51 27 91 rrcurveto +-65 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -23 17 -16 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/dotaccent { +0 333 hsbw +599 129 hstem +163 140 vstem +190 728 rmoveto +-27 -129 rlineto +140 0 rlineto +27 129 rlineto +-140 0 rlineto +closepath +endchar } ND +/ring { +0 333 hsbw +565 54 hstem +701 53 hstem +150 54 vstem +286 53 vstem +150 660 rmoveto +0 -52 43 -43 52 0 rrcurveto +52 0 42 43 0 52 rrcurveto +0 52 -42 42 -52 0 rrcurveto +-52 0 -43 -42 0 -52 rrcurveto +closepath +54 0 rmoveto +0 22 18 19 23 0 rrcurveto +22 0 19 -19 0 -22 rrcurveto +0 -23 -19 -18 -22 0 rrcurveto +-23 0 -18 18 0 23 rrcurveto +closepath +endchar } ND +/cedilla { +0 333 hsbw +-208 59 hstem +-65 52 hstem +178 89 vstem +7 -208 rmoveto +47 0 rlineto +109 0 104 34 0 81 rrcurveto +0 44 -37 36 -72 0 rrcurveto +-20 0 -21 -2 -23 -6 rrcurveto +-16 -49 rlineto +18 4 15 1 11 0 rrcurveto +40 0 16 -15 0 -20 rrcurveto +0 -31 -72 -18 -48 0 rrcurveto +-28 0 rlineto +-23 -59 rlineto +closepath +endchar } ND +/hungarumlaut { +0 333 hsbw +583 145 hstem +33 78 vstem +226 80 vstem +325 141 vstem +325 728 rmoveto +-99 -145 rlineto +80 0 rlineto +160 145 rlineto +-141 0 rlineto +closepath +-195 0 rmoveto +-97 -145 rlineto +78 0 rlineto +164 145 rlineto +-145 0 rlineto +closepath +endchar } ND +/ogonek { +0 333 hsbw +-208 74 hstem +62 76 vstem +271 -115 rmoveto +-36 -12 -28 -7 -21 0 rrcurveto +-31 0 -17 18 0 29 rrcurveto +0 24 8 32 18 40 rrcurveto +-70 0 rlineto +-16 -30 -16 -54 0 -42 rrcurveto +0 -58 32 -33 56 0 rrcurveto +30 0 49 14 28 16 rrcurveto +14 63 rlineto +closepath +endchar } ND +/caron { +0 333 hsbw +584 147 hstem +109 97 vstem +330 115 vstem +244 645 rmoveto +-38 86 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/Lslash { +0 611 hsbw +0 120 hstem +474 242 hstem +199 147 vstem +129 384 rmoveto +-90 -50 rlineto +-24 -115 rlineto +90 50 rlineto +-56 -269 rlineto +512 0 rlineto +24 120 rlineto +-363 0 rlineto +49 239 rlineto +183 99 rlineto +24 115 rlineto +-182 -99 rlineto +50 242 rlineto +-147 0 rlineto +-70 -332 rlineto +closepath +endchar } ND +/lslash { +0 278 hsbw +0 20 hstem +484 232 hstem +41 140 vstem +191 140 vstem +120 376 rmoveto +-71 -37 rlineto +-19 -93 rlineto +70 36 rlineto +-59 -282 rlineto +140 0 rlineto +76 362 rlineto +54 28 rlineto +20 94 rlineto +-54 -28 rlineto +54 260 rlineto +-140 0 rlineto +-71 -340 rlineto +closepath +endchar } ND +/Scaron { +0 667 hsbw +-12 123 hstem +611 117 hstem +758 147 hstem +150 141 vstem +301 96 vstem +482 146 vstem +63 232 rmoveto +-1 -48 9 -42 18 -37 rrcurveto +40 -83 106 -34 110 0 rrcurveto +178 0 105 102 0 127 rrcurveto +0 114 -59 38 -148 60 rrcurveto +-82 33 -48 11 0 63 rrcurveto +0 42 31 33 82 0 rrcurveto +82 0 42 -37 7 -69 rrcurveto +141 7 rlineto +-10 130 -93 86 -168 0 rrcurveto +-166 0 -89 -89 0 -120 rrcurveto +0 -118 75 -40 129 -56 rrcurveto +86 -37 42 -9 0 -60 rrcurveto +0 -48 -40 -40 -96 0 rrcurveto +-100 0 -37 22 -5 106 rrcurveto +-141 -7 rlineto +closepath +372 586 rmoveto +-38 87 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/scaron { +0 556 hsbw +-12 100 hstem +434 97 hstem +584 147 hstem +100 131 vstem +373 143 vstem +22 145 rmoveto +29 -100 78 -57 150 0 rrcurveto +150 0 87 83 0 99 rrcurveto +0 87 -65 36 -121 33 rrcurveto +-66 18 -33 -1 0 43 rrcurveto +0 25 24 23 59 0 rrcurveto +48 0 44 -17 16 -44 rrcurveto +130 22 rlineto +-19 84 -64 52 -134 0 rrcurveto +-133 0 -102 -59 0 -109 rrcurveto +0 -105 66 -13 138 -48 rrcurveto +46 -16 23 -6 0 -30 rrcurveto +0 -41 -48 -16 -49 0 rrcurveto +-63 0 -31 21 -24 58 rrcurveto +-136 -22 rlineto +closepath +328 500 rmoveto +-38 86 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/Zcaron { +0 611 hsbw +0 120 hstem +596 120 hstem +758 147 hstem +285 97 vstem +505 116 vstem +25 0 rmoveto +555 0 rlineto +25 120 rlineto +-375 0 rlineto +416 484 rlineto +22 112 rlineto +-516 0 rlineto +-25 -120 rlineto +333 0 rlineto +-412 -483 rlineto +-23 -113 rlineto +closepath +394 818 rmoveto +-37 87 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-116 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/zcaron { +0 500 hsbw +0 113 hstem +409 110 hstem +584 147 hstem +192 97 vstem +413 115 vstem +17 0 rmoveto +423 0 rlineto +24 113 rlineto +-249 0 rlineto +286 322 rlineto +18 84 rlineto +-407 0 rlineto +-23 -110 rlineto +232 0 rlineto +-284 -314 rlineto +-20 -95 rlineto +closepath +310 645 rmoveto +-38 86 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/brokenbar { +0 280 hsbw +-210 386 hstem +342 386 hstem +86 109 vstem +86 342 rmoveto +109 0 rlineto +0 386 rlineto +-109 0 rlineto +0 -386 rlineto +closepath +0 -552 rmoveto +109 0 rlineto +0 386 rlineto +-109 0 rlineto +0 -386 rlineto +closepath +endchar } ND +/Eth { +0 722 hsbw +0 115 hstem +313 87 hstem +598 118 hstem +110 147 vstem +577 148 vstem +43 0 rmoveto +253 0 rlineto +305 0 124 168 0 251 rrcurveto +0 188 -68 109 -271 0 rrcurveto +-190 0 rlineto +-68 -316 rlineto +-73 0 rlineto +-18 -87 rlineto +73 0 rlineto +-67 -313 rlineto +closepath +172 115 rmoveto +42 198 rlineto +153 0 rlineto +19 87 rlineto +-153 0 rlineto +42 198 rlineto +83 0 rlineto +135 0 41 -26 0 -149 rrcurveto +0 -200 -20 -108 -267 0 rrcurveto +-75 0 rlineto +closepath +endchar } ND +/eth { +0 611 hsbw +-13 108 hstem +409 110 hstem +597 119 hstem +61 138 vstem +460 145 vstem +336 716 rmoveto +24 -28 18 -24 14 -22 rrcurveto +-109 -39 rlineto +17 -48 rlineto +118 42 rlineto +22 -41 16 -46 12 -52 rrcurveto +-44 45 -39 16 -55 0 rrcurveto +-158 0 -111 -141 0 -160 rrcurveto +0 -143 93 -88 155 0 rrcurveto +182 0 114 161 0 179 rrcurveto +0 114 -22 78 -62 116 rrcurveto +87 32 rlineto +-16 49 rlineto +-99 -37 rlineto +-3 7 -4 6 -5 6 rrcurveto +-5 6 -4 6 -4 6 rrcurveto +-132 0 rlineto +closepath +124 -420 rmoveto +0 -74 -64 -127 -92 0 rrcurveto +-63 0 -42 41 0 70 rrcurveto +0 90 57 113 99 0 rrcurveto +61 0 44 -43 0 -70 rrcurveto +closepath +endchar } ND +/Yacute { +0 667 hsbw +0 20 hstem +696 20 hstem +884 20 hstem +254 147 410 90 509 147 vstem3 +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +108 904 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/yacute { +0 556 hsbw +-210 112 hstem +499 20 hstem +710 20 hstem +83 140 vstem +270 93 vstem +372 149 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +289 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/Thorn { +0 667 hsbw +0 20 hstem +137 118 hstem +461 255 hstem +41 147 vstem +193 147 vstem +526 147 vstem +188 0 rmoveto +28 137 rlineto +95 0 rlineto +247 0 115 97 0 163 rrcurveto +0 117 -67 65 -154 0 rrcurveto +-141 0 rlineto +29 137 rlineto +-147 0 rlineto +-152 -716 rlineto +147 0 rlineto +closepath +53 255 rmoveto +44 206 rlineto +105 0 rlineto +93 0 43 -10 0 -63 rrcurveto +0 -107 -86 -26 -154 0 rrcurveto +-45 0 rlineto +closepath +endchar } ND +/thorn { +0 611 hsbw +-198 20 hstem +-12 106 hstem +431 100 hstem +696 20 hstem +-9 140 vstem +185 140 vstem +466 137 vstem +185 716 rmoveto +-194 -914 rlineto +140 0 rlineto +57 269 rlineto +35 -56 52 -27 69 0 rrcurveto +151 0 108 155 0 165 rrcurveto +0 146 -73 77 -108 0 rrcurveto +-51 0 -49 -19 -47 -36 rrcurveto +50 240 rlineto +-140 0 rlineto +closepath +41 -495 rmoveto +0 78 49 132 93 0 rrcurveto +57 0 41 -43 0 -77 rrcurveto +0 -86 -54 -131 -87 0 rrcurveto +-54 0 -45 47 0 80 rrcurveto +closepath +endchar } ND +/minus { +0 584 hsbw +289 128 hstem +42 500 vstem +42 289 rmoveto +500 0 rlineto +0 128 rlineto +-500 0 rlineto +0 -128 rlineto +closepath +endchar } ND +/multiply { +0 584 hsbw +54 205 rmoveto +89 -89 rlineto +147 148 rlineto +149 -149 rlineto +91 91 rlineto +-149 148 rlineto +147 148 rlineto +-88 89 rlineto +-148 -148 rlineto +-148 148 rlineto +-91 -91 rlineto +149 -147 rlineto +-148 -148 rlineto +closepath +endchar } ND +/onesuperior { +0 333 hsbw +706 20 hstem +174 96 vstem +302 60 vstem +115 557 rmoveto +41 7 40 13 38 18 rrcurveto +-60 -240 rlineto +96 0 rlineto +92 371 rlineto +-60 0 rlineto +-42 -38 -42 -24 -84 -31 rrcurveto +-19 -76 rlineto +closepath +endchar } ND +/twosuperior { +0 333 hsbw +355 77 hstem +657 68 hstem +304 92 vstem +213 599 rmoveto +10 44 17 14 26 0 rrcurveto +24 0 14 -16 0 -18 rrcurveto +0 -16 -2 -13 -85 -68 rrcurveto +-112 -90 -15 -25 -8 -56 rrcurveto +268 0 rlineto +19 77 rlineto +-139 0 rlineto +17 16 13 11 9 5 rrcurveto +110 80 17 37 0 42 rrcurveto +0 56 -47 46 -85 0 rrcurveto +-79 0 -50 -41 -14 -74 rrcurveto +92 -11 rlineto +closepath +endchar } ND +/threesuperior { +0 333 hsbw +349 70 hstem +510 70 hstem +655 70 hstem +295 95 vstem +76 461 rmoveto +10 -72 48 -40 80 0 rrcurveto +90 0 65 62 0 60 rrcurveto +0 23 -7 18 -12 12 rrcurveto +-11 9 -6 6 0 2 rrcurveto +0 3 rlineto +2 2 7 5 14 8 rrcurveto +20 12 14 28 0 28 rrcurveto +0 53 -45 45 -80 0 rrcurveto +-70 0 -49 -30 -25 -74 rrcurveto +87 -15 rlineto +12 37 16 12 23 0 rrcurveto +18 0 18 -9 0 -21 rrcurveto +0 -27 -19 -18 -40 0 rrcurveto +-15 0 rlineto +-18 -73 rlineto +9 2 7 1 6 0 rrcurveto +32 0 16 -17 0 -24 rrcurveto +0 -27 -22 -23 -37 0 rrcurveto +-27 0 -14 11 -6 40 rrcurveto +-91 -9 rlineto +closepath +endchar } ND +/onehalf { +0 834 hsbw +-21 78 hstem +281 68 hstem +705 20 hstem +85 85 vstem +174 96 vstem +302 60 vstem +744 91 vstem +115 556 rmoveto +41 7 37 11 32 16 rrcurveto +9 4 rlineto +-60 -240 rlineto +96 0 rlineto +92 371 rlineto +-60 0 rlineto +-42 -38 -54 -30 -65 -22 rrcurveto +-3 -2 -2 -1 -2 0 rrcurveto +-19 -76 rlineto +closepath +55 -586 rmoveto +655 755 rlineto +-85 0 rlineto +-655 -755 rlineto +85 0 rlineto +closepath +483 253 rmoveto +10 45 16 13 26 0 rrcurveto +24 0 15 -15 0 -18 rrcurveto +0 -16 -3 -13 -85 -69 rrcurveto +-111 -91 -16 -24 -8 -56 rrcurveto +269 0 rlineto +19 78 rlineto +-139 0 rlineto +16 15 13 11 9 6 rrcurveto +111 76 16 42 0 40 rrcurveto +0 57 -46 45 -86 0 rrcurveto +-79 0 -50 -39 -14 -76 rrcurveto +93 -11 rlineto +closepath +endchar } ND +/onequarter { +0 834 hsbw +52 673 hstem +100 85 vstem +302 60 vstem +749 82 vstem +115 556 rmoveto +41 7 40 13 38 18 rrcurveto +-60 -240 rlineto +96 0 rlineto +92 371 rlineto +-60 0 rlineto +-42 -38 -42 -24 -84 -31 rrcurveto +-19 -76 rlineto +closepath +70 -586 rmoveto +655 755 rlineto +-85 0 rlineto +-655 -755 rlineto +85 0 rlineto +closepath +487 82 rmoveto +-18 -73 rlineto +85 0 rlineto +18 73 rlineto +51 0 rlineto +18 68 rlineto +-51 0 rlineto +56 228 rlineto +-82 0 rlineto +-231 -227 rlineto +-18 -69 rlineto +172 0 rlineto +closepath +19 68 rmoveto +-82 0 rlineto +111 111 rlineto +-29 -111 rlineto +closepath +endchar } ND +/threequarters { +0 834 hsbw +52 68 hstem +349 70 hstem +510 70 hstem +655 70 hstem +111 85 vstem +295 94 vstem +654 84 vstem +749 81 vstem +76 461 rmoveto +10 -72 48 -40 79 0 rrcurveto +90 0 66 62 0 60 rrcurveto +0 23 -7 18 -13 12 rrcurveto +-10 9 -6 6 -1 2 rrcurveto +1 3 rlineto +2 2 7 5 14 8 rrcurveto +20 12 13 28 0 28 rrcurveto +0 53 -46 45 -78 0 rrcurveto +-72 0 -46 -30 -27 -74 rrcurveto +88 -15 rlineto +10 37 17 12 23 0 rrcurveto +20 0 17 -9 0 -21 rrcurveto +0 -27 -19 -18 -41 0 rrcurveto +-14 0 rlineto +-19 -73 rlineto +9 2 8 1 6 0 rrcurveto +30 0 18 -17 0 -24 rrcurveto +0 -27 -23 -23 -36 0 rrcurveto +-28 0 -14 11 -5 40 rrcurveto +-91 -9 rlineto +closepath +120 -491 rmoveto +656 755 rlineto +-85 0 rlineto +-656 -755 rlineto +85 0 rlineto +closepath +476 82 rmoveto +-18 -73 rlineto +84 0 rlineto +18 73 rlineto +52 0 rlineto +18 68 rlineto +-51 0 rlineto +55 228 rlineto +-81 0 rlineto +-231 -227 rlineto +-18 -69 rlineto +172 0 rlineto +closepath +18 68 rmoveto +-81 0 rlineto +111 111 rlineto +-30 -111 rlineto +closepath +endchar } ND +/franc { +0 556 hsbw +0 207 hstem +305 119 hstem +596 120 hstem +39 147 vstem +188 443 vstem +57 87 rmoveto +-18 -87 rlineto +147 0 rlineto +19 87 rlineto +158 0 rlineto +25 120 rlineto +-159 0 rlineto +21 98 rlineto +288 0 rlineto +25 119 rlineto +-288 0 rlineto +36 172 rlineto +295 0 rlineto +25 120 rlineto +-443 0 rlineto +-106 -509 rlineto +-65 0 rlineto +-25 -120 rlineto +65 0 rlineto +closepath +endchar } ND +/Gbreve { +0 778 hsbw +-12 123 hstem +263 119 hstem +609 119 hstem +747 70 hstem +88 143 vstem +372 67 vstem +613 65 vstem +439 382 rmoveto +-24 -119 rlineto +182 0 rlineto +-22 -107 rlineto +-48 -24 -73 -21 -62 0 rrcurveto +-106 0 -55 55 0 122 rrcurveto +0 159 99 162 159 0 rrcurveto +81 0 54 -42 24 -80 rrcurveto +138 15 rlineto +-34 148 -100 78 -165 0 rrcurveto +-241 0 -158 -219 0 -223 rrcurveto +0 -189 104 -109 197 0 rrcurveto +113 0 118 39 75 48 rrcurveto +65 307 rlineto +-321 0 rlineto +closepath +-67 506 rmoveto +12 -95 53 -46 76 0 rrcurveto +73 0 65 51 27 90 rrcurveto +-65 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -23 19 -16 52 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/gbreve { +0 611 hsbw +-210 100 hstem +-2 104 hstem +431 100 hstem +585 142 hstem +61 137 vstem +245 68 vstem +487 64 vstem +31 -27 rmoveto +0 -21 rlineto +0 -116 76 -46 146 0 rrcurveto +166 0 70 86 44 210 rrcurveto +90 433 rlineto +-132 0 rlineto +-19 -92 rlineto +-32 65 -61 39 -69 0 rrcurveto +-145 0 -104 -163 0 -159 rrcurveto +0 -139 72 -72 102 0 rrcurveto +52 0 50 20 48 41 rrcurveto +-5 -25 rlineto +-20 -106 -18 -38 -86 0 rrcurveto +-46 0 -29 16 0 45 rrcurveto +-150 22 rlineto +closepath +167 250 rmoveto +0 76 63 132 73 0 rrcurveto +53 0 46 -50 0 -73 rrcurveto +0 -87 -57 -119 -85 0 rrcurveto +-54 0 -39 42 0 79 rrcurveto +closepath +47 504 rmoveto +13 -95 52 -47 76 0 rrcurveto +73 0 65 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/Idot { +0 278 hsbw +0 20 hstem +696 20 hstem +756 128 hstem +35 147 vstem +197 140 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +189 884 rmoveto +-27 -128 rlineto +140 0 rlineto +27 128 rlineto +-140 0 rlineto +closepath +endchar } ND +/Scedilla { +0 667 hsbw +-208 59 hstem +-65 52 hstem +-12 123 hstem +611 117 hstem +150 141 vstem +365 89 vstem +482 146 vstem +63 232 rmoveto +-1 -48 9 -42 18 -37 rrcurveto +40 -83 106 -34 110 0 rrcurveto +178 0 105 102 0 127 rrcurveto +0 114 -59 38 -148 60 rrcurveto +-82 33 -48 11 0 63 rrcurveto +0 42 31 33 82 0 rrcurveto +82 0 42 -37 7 -69 rrcurveto +141 7 rlineto +-10 130 -93 86 -168 0 rrcurveto +-166 0 -89 -89 0 -120 rrcurveto +0 -118 75 -40 129 -56 rrcurveto +86 -37 42 -9 0 -60 rrcurveto +0 -48 -40 -40 -96 0 rrcurveto +-100 0 -37 22 -5 106 rrcurveto +-141 -7 rlineto +closepath +130 -440 rmoveto +48 0 rlineto +108 0 105 34 0 81 rrcurveto +0 44 -39 36 -70 0 rrcurveto +-20 0 -21 -2 -23 -6 rrcurveto +-17 -49 rlineto +18 4 15 1 11 0 rrcurveto +41 0 16 -15 0 -20 rrcurveto +0 -30 -73 -19 -47 0 rrcurveto +-28 0 rlineto +-24 -59 rlineto +closepath +endchar } ND +/scedilla { +0 556 hsbw +-204 59 hstem +-12 3 hstem +434 97 hstem +100 131 258 88 373 131 vstem3 +22 145 rmoveto +29 -100 78 -57 150 0 rrcurveto +150 0 87 83 0 99 rrcurveto +0 87 -65 36 -121 33 rrcurveto +-66 18 -33 -1 0 43 rrcurveto +0 25 24 23 59 0 rrcurveto +48 0 44 -17 16 -44 rrcurveto +130 22 rlineto +-19 84 -64 52 -134 0 rrcurveto +-133 0 -102 -59 0 -109 rrcurveto +0 -105 66 -13 138 -48 rrcurveto +46 -16 23 -6 0 -30 rrcurveto +0 -41 -48 -16 -49 0 rrcurveto +-63 0 -31 21 -24 58 rrcurveto +-136 -22 rlineto +closepath +63 -349 rmoveto +48 0 rlineto +108 0 105 34 0 81 rrcurveto +0 44 -37 36 -72 0 rrcurveto +-20 0 -21 -3 -23 -6 rrcurveto +-17 -48 rlineto +19 3 15 1 10 0 rrcurveto +41 0 16 -15 0 -19 rrcurveto +0 -30 -73 -19 -47 0 rrcurveto +-28 0 rlineto +-24 -59 rlineto +closepath +endchar } ND +/Cacute { +0 722 hsbw +-13 124 hstem +601 127 hstem +884 20 hstem +95 145 vstem +398 94 vstem +500 150 vstem +560 258 rmoveto +-32 -98 -68 -49 -76 0 rrcurveto +-83 0 -61 65 0 115 rrcurveto +0 137 87 173 143 0 rrcurveto +74 0 45 -35 15 -84 rrcurveto +142 14 rlineto +-18 144 -101 88 -154 0 rrcurveto +-220 0 -158 -206 0 -226 rrcurveto +0 -200 104 -109 175 0 rrcurveto +156 0 120 88 58 160 rrcurveto +-148 23 rlineto +closepath +-60 646 rmoveto +-102 -147 rlineto +94 0 rlineto +158 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/cacute { +0 556 hsbw +-12 110 hstem +427 104 hstem +710 20 hstem +60 139 vstem +271 93 vstem +373 149 vstem +392 195 rmoveto +-24 -66 -45 -31 -45 0 rrcurveto +-46 0 -33 33 0 62 rrcurveto +0 92 48 142 101 0 rrcurveto +46 0 30 -27 7 -57 rrcurveto +133 14 rlineto +-8 104 -78 70 -122 0 rrcurveto +-168 0 -128 -156 0 -166 rrcurveto +0 -138 83 -83 132 0 rrcurveto +116 0 91 65 46 120 rrcurveto +-136 22 rlineto +closepath +-19 535 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/Ccaron { +0 722 hsbw +-13 124 hstem +601 127 hstem +755 147 hstem +95 145 vstem +350 96 vstem +570 115 vstem +560 258 rmoveto +-32 -98 -68 -49 -76 0 rrcurveto +-83 0 -61 65 0 115 rrcurveto +0 137 87 173 143 0 rrcurveto +74 0 45 -35 15 -84 rrcurveto +142 14 rlineto +-18 144 -101 88 -154 0 rrcurveto +-220 0 -158 -206 0 -226 rrcurveto +0 -200 104 -109 175 0 rrcurveto +156 0 120 88 58 160 rrcurveto +-148 23 rlineto +closepath +-76 557 rmoveto +-38 87 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/ccaron { +0 556 hsbw +-12 110 hstem +427 104 hstem +584 147 hstem +60 139 vstem +244 96 vstem +464 115 vstem +392 195 rmoveto +-24 -66 -45 -31 -45 0 rrcurveto +-46 0 -33 33 0 62 rrcurveto +0 92 48 142 101 0 rrcurveto +46 0 30 -27 7 -57 rrcurveto +133 14 rlineto +-8 104 -78 70 -122 0 rrcurveto +-168 0 -128 -156 0 -166 rrcurveto +0 -138 83 -83 132 0 rrcurveto +116 0 91 65 46 120 rrcurveto +-136 22 rlineto +closepath +-14 450 rmoveto +-38 86 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/dmacron { +0 611 hsbw +-12 105 hstem +427 104 hstem +579 137 hstem +59 136 vstem +386 133 vstem +528 140 vstem +500 579 rmoveto +-28 -131 rlineto +-35 55 -52 28 -70 0 rrcurveto +-154 0 -102 -160 0 -166 rrcurveto +0 -143 73 -74 108 0 rrcurveto +61 0 46 20 51 48 rrcurveto +-12 -56 rlineto +133 0 rlineto +121 579 rlineto +69 0 rlineto +19 87 rlineto +-70 0 rlineto +10 50 rlineto +-140 0 rlineto +-10 -50 rlineto +-159 0 rlineto +-18 -87 rlineto +159 0 rlineto +closepath +-305 -368 rmoveto +0 106 58 110 83 0 rrcurveto +52 0 48 -51 0 -74 rrcurveto +0 -89 -50 -120 -94 0 rrcurveto +-55 0 -42 43 0 75 rrcurveto +closepath +endchar } ND +/overscore { +0 552 hsbw +758 89 hstem +-9 570 vstem +-9 758 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +endchar } ND +/middot { +0 333 hsbw +290 136 hstem +258 138 vstem +286 426 rmoveto +-28 -136 rlineto +138 0 rlineto +28 136 rlineto +-138 0 rlineto +closepath +endchar } ND +/Abreve { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +747 70 hstem +-11 151 vstem +325 71 402 155 566 65 vstem3 +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-167 611 rmoveto +12 -95 53 -46 76 0 rrcurveto +73 0 65 51 27 90 rrcurveto +-65 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -24 19 -14 52 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/abreve { +0 556 hsbw +-12 105 hstem +431 100 hstem +585 142 hstem +45 132 vstem +236 68 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-135 485 rmoveto +13 -95 52 -47 76 0 rrcurveto +74 0 64 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/Aogonek { +0 722 hsbw +-208 74 hstem +0 9 hstem +158 119 hstem +565 151 hstem +-11 151 vstem +506 76 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +222 -392 rmoveto +-35 -12 -28 -7 -22 0 rrcurveto +-30 0 -17 18 0 29 rrcurveto +0 24 8 32 17 40 rrcurveto +-69 0 rlineto +-16 -30 -16 -54 0 -42 rrcurveto +0 -58 32 -33 56 0 rrcurveto +30 0 49 14 28 16 rrcurveto +13 63 rlineto +closepath +endchar } ND +/aogonek { +0 556 hsbw +-208 74 hstem +-12 105 hstem +431 100 hstem +45 132 vstem +329 76 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +166 -357 rmoveto +-35 -12 -28 -7 -22 0 rrcurveto +-30 0 -17 18 0 29 rrcurveto +0 24 8 32 17 40 rrcurveto +-69 0 rlineto +-16 -30 -16 -54 0 -42 rrcurveto +0 -58 32 -33 56 0 rrcurveto +29 0 50 14 28 16 rrcurveto +13 63 rlineto +closepath +endchar } ND +/Dcaron { +0 722 hsbw +0 115 hstem +598 118 hstem +758 147 hstem +290 97 vstem +577 148 vstem +43 0 rmoveto +253 0 rlineto +302 0 127 152 0 267 rrcurveto +0 187 -65 110 -274 0 rrcurveto +-193 0 rlineto +-150 -716 rlineto +closepath +172 115 rmoveto +100 483 rlineto +86 0 rlineto +137 0 39 -27 0 -148 rrcurveto +0 -200 -20 -108 -267 0 rrcurveto +-75 0 rlineto +closepath +209 703 rmoveto +-37 87 rlineto +-97 0 rlineto +60 -147 rlineto +130 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/dcaron { +0 740 hsbw +-12 105 hstem +427 104 hstem +594 122 hstem +59 136 vstem +386 133 vstem +528 140 vstem +728 127 vstem +728 716 rmoveto +-25 -122 rlineto +58 0 rlineto +-12 -51 -22 -21 -41 -10 rrcurveto +-13 -58 rlineto +84 1 53 44 24 116 rrcurveto +21 101 rlineto +-127 0 rlineto +closepath +-209 -716 rmoveto +149 716 rlineto +-140 0 rlineto +-56 -268 rlineto +-35 55 -52 28 -70 0 rrcurveto +-154 0 -102 -160 0 -166 rrcurveto +0 -143 73 -74 108 0 rrcurveto +61 0 46 20 51 48 rrcurveto +-12 -56 rlineto +133 0 rlineto +closepath +-324 211 rmoveto +0 106 58 110 83 0 rrcurveto +52 0 48 -51 0 -74 rrcurveto +0 -89 -50 -120 -94 0 rrcurveto +-55 0 -42 43 0 75 rrcurveto +closepath +endchar } ND +/Dslash { +0 722 hsbw +0 115 hstem +313 87 hstem +598 118 hstem +110 147 vstem +577 148 vstem +43 0 rmoveto +253 0 rlineto +305 0 124 168 0 251 rrcurveto +0 188 -68 109 -271 0 rrcurveto +-190 0 rlineto +-68 -316 rlineto +-73 0 rlineto +-18 -87 rlineto +73 0 rlineto +-67 -313 rlineto +closepath +172 115 rmoveto +42 198 rlineto +153 0 rlineto +19 87 rlineto +-153 0 rlineto +42 198 rlineto +83 0 rlineto +135 0 41 -26 0 -149 rrcurveto +0 -200 -20 -108 -267 0 rrcurveto +-75 0 rlineto +closepath +endchar } ND +/Eogonek { +0 667 hsbw +-208 74 hstem +0 9 hstem +314 120 hstem +596 120 hstem +376 77 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +544 -115 rmoveto +-35 -12 -28 -7 -22 0 rrcurveto +-30 0 -17 18 0 29 rrcurveto +0 24 8 32 17 40 rrcurveto +-69 0 rlineto +-18 -30 -15 -54 0 -42 rrcurveto +0 -58 33 -33 55 0 rrcurveto +30 0 50 14 28 16 rrcurveto +13 63 rlineto +closepath +endchar } ND +/eogonek { +0 556 hsbw +-208 74 hstem +-12 21 hstem +216 85 hstem +431 100 hstem +58 135 vstem +219 76 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +1 -416 rmoveto +-36 -12 -28 -7 -21 0 rrcurveto +-31 0 -17 18 0 29 rrcurveto +0 24 8 32 18 40 rrcurveto +-70 0 rlineto +-16 -30 -16 -54 0 -42 rrcurveto +0 -58 33 -33 55 0 rrcurveto +30 0 50 14 28 16 rrcurveto +13 63 rlineto +closepath +endchar } ND +/Ecaron { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +758 147 hstem +322 97 vstem +542 116 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +416 818 rmoveto +-38 87 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-116 0 rlineto +-85 -87 rlineto +closepath +endchar } ND +/ecaron { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +584 147 hstem +58 135 vstem +220 96 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-73 344 rmoveto +-38 86 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/Lacute { +0 611 hsbw +0 120 hstem +696 20 hstem +884 20 hstem +277 93 vstem +379 149 vstem +45 0 rmoveto +512 0 rlineto +25 120 rlineto +-365 0 rlineto +125 596 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +334 904 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/lacute { +0 278 hsbw +0 20 hstem +696 20 hstem +879 20 hstem +171 94 vstem +273 150 vstem +39 0 rmoveto +140 0 rlineto +150 716 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +234 899 rmoveto +-102 -147 rlineto +94 0 rlineto +158 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/Lcaron { +0 611 hsbw +0 120 hstem +580 136 hstem +195 147 vstem +471 141 vstem +45 0 rmoveto +512 0 rlineto +25 120 rlineto +-365 0 rlineto +125 596 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +426 716 rmoveto +-29 -136 rlineto +64 0 rlineto +-12 -55 -25 -25 -46 -10 rrcurveto +-13 -65 rlineto +93 1 58 48 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/lcaron { +0 396 hsbw +0 20 hstem +594 122 hstem +38 140 vstem +188 139 vstem +386 127 vstem +386 716 rmoveto +-26 -122 rlineto +58 0 rlineto +-11 -51 -22 -21 -42 -10 rrcurveto +-12 -58 rlineto +84 1 53 44 24 116 rrcurveto +21 101 rlineto +-127 0 rlineto +closepath +-348 -716 rmoveto +140 0 rlineto +149 716 rlineto +-139 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Ldot { +0 611 hsbw +0 120 hstem +290 136 hstem +696 20 hstem +195 147 vstem +425 138 vstem +45 0 rmoveto +512 0 rlineto +25 120 rlineto +-365 0 rlineto +125 596 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +380 426 rmoveto +-28 -136 rlineto +139 0 rlineto +27 136 rlineto +-138 0 rlineto +closepath +endchar } ND +/ldot { +0 479 hsbw +0 20 hstem +290 426 hstem +39 140 vstem +323 138 vstem +39 0 rmoveto +140 0 rlineto +150 716 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +284 426 rmoveto +-29 -136 rlineto +139 0 rlineto +28 136 rlineto +-138 0 rlineto +closepath +endchar } ND +/Nacute { +0 722 hsbw +0 237 hstem +481 235 hstem +884 20 hstem +45 137 vstem +194 138 vstem +377 94 vstem +476 137 vstem +626 137 vstem +613 0 rmoveto +150 716 rlineto +-137 0 rlineto +-100 -479 rlineto +-194 479 rlineto +-138 0 rlineto +-149 -716 rlineto +137 0 rlineto +101 481 rlineto +193 -481 rlineto +137 0 rlineto +closepath +-134 904 rmoveto +-102 -147 rlineto +94 0 rlineto +158 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/nacute { +0 611 hsbw +0 20 hstem +431 100 hstem +710 20 hstem +150 133 vstem +304 93 vstem +449 142 vstem +150 519 rmoveto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +26 141 62 77 74 0 rrcurveto +37 0 23 -22 0 -36 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-62 -294 rlineto +140 0 rlineto +61 293 rlineto +10 51 6 35 0 18 rrcurveto +0 81 -52 53 -85 0 rrcurveto +-64 0 -55 -23 -65 -57 rrcurveto +13 68 rlineto +-133 0 rlineto +closepath +256 211 rmoveto +-102 -146 rlineto +93 0 rlineto +159 146 rlineto +-150 0 rlineto +closepath +endchar } ND +/Ncaron { +0 722 hsbw +0 237 hstem +481 235 hstem +758 147 hstem +45 137 vstem +194 138 vstem +346 97 vstem +566 116 vstem +613 0 rmoveto +150 716 rlineto +-137 0 rlineto +-100 -479 rlineto +-194 479 rlineto +-138 0 rlineto +-149 -716 rlineto +137 0 rlineto +101 481 rlineto +193 -481 rlineto +137 0 rlineto +closepath +-133 818 rmoveto +-37 87 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-116 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/ncaron { +0 611 hsbw +0 20 hstem +431 100 hstem +584 147 hstem +259 97 vstem +449 142 vstem +150 519 rmoveto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +26 141 62 77 74 0 rrcurveto +37 0 23 -22 0 -36 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-62 -294 rlineto +140 0 rlineto +61 293 rlineto +10 51 6 35 0 18 rrcurveto +0 81 -52 53 -85 0 rrcurveto +-64 0 -55 -23 -65 -57 rrcurveto +13 68 rlineto +-133 0 rlineto +closepath +244 126 rmoveto +-38 86 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-116 0 rlineto +-85 -86 rlineto +closepath +endchar } ND +/Odblacute { +0 778 hsbw +-13 123 hstem +605 123 hstem +756 145 hstem +87 146 vstem +317 78 vstem +510 80 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +376 617 rmoveto +-99 -145 rlineto +80 0 rlineto +160 145 rlineto +-141 0 rlineto +closepath +-195 0 rmoveto +-97 -145 rlineto +78 0 rlineto +164 145 rlineto +-145 0 rlineto +closepath +endchar } ND +/odblacute { +0 611 hsbw +-12 108 hstem +425 106 hstem +583 145 hstem +61 140 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +21 413 rmoveto +-99 -145 rlineto +80 0 rlineto +161 145 rlineto +-142 0 rlineto +closepath +-194 0 rmoveto +-97 -145 rlineto +78 0 rlineto +164 145 rlineto +-145 0 rlineto +closepath +endchar } ND +/Racute { +0 722 hsbw +0 20 hstem +296 108 hstem +596 120 hstem +884 20 hstem +44 147 vstem +356 93 vstem +594 147 vstem +191 0 rmoveto +62 296 rlineto +60 0 rlineto +180 0 9 -219 24 -77 rrcurveto +158 0 rlineto +-53 134 -37 102 -73 68 rrcurveto +148 18 72 84 0 122 rrcurveto +0 125 -86 63 -143 0 rrcurveto +-318 0 rlineto +-150 -716 rlineto +147 0 rlineto +closepath +85 404 rmoveto +40 192 rlineto +162 0 rlineto +76 0 40 -11 0 -59 rrcurveto +0 -97 -89 -25 -151 0 rrcurveto +-78 0 rlineto +closepath +182 500 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/racute { +0 389 hsbw +0 20 hstem +408 123 hstem +710 20 hstem +241 93 vstem +343 149 vstem +141 519 rmoveto +-109 -519 rlineto +140 0 rlineto +35 163 rlineto +27 142 50 103 96 0 rrcurveto +14 0 13 -3 13 -4 rrcurveto +54 115 rlineto +-24 10 -21 5 -20 0 rrcurveto +-57 0 -53 -38 -49 -75 rrcurveto +21 101 rlineto +-130 0 rlineto +closepath +202 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/Rcaron { +0 722 hsbw +0 20 hstem +296 108 hstem +596 120 hstem +758 147 hstem +44 147 vstem +310 97 vstem +594 147 vstem +191 0 rmoveto +62 296 rlineto +60 0 rlineto +180 0 9 -219 24 -77 rrcurveto +158 0 rlineto +-53 134 -37 102 -73 68 rrcurveto +148 18 72 84 0 122 rrcurveto +0 125 -86 63 -143 0 rrcurveto +-318 0 rlineto +-150 -716 rlineto +147 0 rlineto +closepath +85 404 rmoveto +40 192 rlineto +162 0 rlineto +76 0 40 -11 0 -59 rrcurveto +0 -97 -89 -25 -151 0 rrcurveto +-78 0 rlineto +closepath +168 414 rmoveto +-37 87 rlineto +-97 0 rlineto +60 -147 rlineto +130 0 rlineto +146 147 rlineto +-116 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/rcaron { +0 389 hsbw +0 20 hstem +408 123 hstem +584 147 hstem +184 97 vstem +404 116 vstem +141 519 rmoveto +-109 -519 rlineto +140 0 rlineto +35 163 rlineto +27 142 50 103 96 0 rrcurveto +14 0 13 -3 13 -4 rrcurveto +54 115 rlineto +-24 10 -21 5 -20 0 rrcurveto +-57 0 -53 -38 -49 -75 rrcurveto +21 101 rlineto +-130 0 rlineto +closepath +177 126 rmoveto +-37 86 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-116 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/Sacute { +0 667 hsbw +-12 123 hstem +611 117 hstem +884 20 hstem +150 141 vstem +333 94 vstem +482 146 vstem +63 232 rmoveto +-1 -48 9 -42 18 -37 rrcurveto +40 -83 106 -34 110 0 rrcurveto +178 0 105 102 0 127 rrcurveto +0 114 -59 38 -148 60 rrcurveto +-82 33 -48 11 0 63 rrcurveto +0 42 31 33 82 0 rrcurveto +82 0 42 -37 7 -69 rrcurveto +141 7 rlineto +-10 130 -93 86 -168 0 rrcurveto +-166 0 -89 -89 0 -120 rrcurveto +0 -118 75 -40 129 -56 rrcurveto +86 -37 42 -9 0 -60 rrcurveto +0 -48 -40 -40 -96 0 rrcurveto +-100 0 -37 22 -5 106 rrcurveto +-141 -7 rlineto +closepath +373 672 rmoveto +-103 -147 rlineto +94 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/sacute { +0 556 hsbw +-12 100 hstem +434 97 hstem +710 20 hstem +100 131 257 90 373 131 vstem3 +22 145 rmoveto +29 -100 78 -57 150 0 rrcurveto +150 0 87 83 0 99 rrcurveto +0 87 -65 36 -121 33 rrcurveto +-66 18 -33 -1 0 43 rrcurveto +0 25 24 23 59 0 rrcurveto +48 0 44 -17 16 -44 rrcurveto +130 22 rlineto +-19 84 -64 52 -134 0 rrcurveto +-133 0 -102 -59 0 -109 rrcurveto +0 -105 66 -13 138 -48 rrcurveto +46 -16 23 -6 0 -30 rrcurveto +0 -41 -48 -16 -49 0 rrcurveto +-63 0 -31 21 -24 58 rrcurveto +-136 -22 rlineto +closepath +337 585 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/Tcedilla { +0 611 hsbw +-194 135 hstem +0 20 hstem +596 120 hstem +196 141 vstem +353 0 rmoveto +124 596 rlineto +207 0 rlineto +25 120 rlineto +-564 0 rlineto +-25 -120 rlineto +210 0 rlineto +-125 -596 rlineto +148 0 rlineto +closepath +-157 -59 rmoveto +-28 -135 rlineto +64 0 rlineto +-8 -17 -14 -11 -45 -11 rrcurveto +-14 -65 rlineto +88 2 59 47 16 78 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/tcedilla { +0 333 hsbw +-181 122 hstem +-12 108 hstem +415 104 hstem +82 144 vstem +75 415 rmoveto +69 0 rlineto +-44 -209 rlineto +-12 -58 -6 -36 0 -16 rrcurveto +0 -68 42 -40 100 0 rrcurveto +25 0 25 3 24 4 rrcurveto +21 104 rlineto +-25 -2 -15 -1 -6 0 rrcurveto +-36 0 -11 12 0 22 rrcurveto +0 5 4 22 8 40 rrcurveto +46 218 rlineto +85 0 rlineto +22 104 rlineto +-86 0 rlineto +38 179 rlineto +-160 -96 rlineto +-18 -83 rlineto +-68 0 rlineto +-22 -104 rlineto +closepath +32 -474 rmoveto +-25 -122 rlineto +58 0 rlineto +-8 -14 -13 -11 -40 -10 rrcurveto +-13 -58 rlineto +78 2 54 42 15 70 rrcurveto +21 101 rlineto +-127 0 rlineto +closepath +endchar } ND +/Tcaron { +0 611 hsbw +0 20 hstem +596 120 hstem +758 147 hstem +303 96 vstem +523 115 vstem +353 0 rmoveto +124 596 rlineto +207 0 rlineto +25 120 rlineto +-564 0 rlineto +-25 -120 rlineto +210 0 rlineto +-125 -596 rlineto +148 0 rlineto +closepath +84 818 rmoveto +-38 87 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/tcaron { +0 479 hsbw +-12 108 hstem +415 104 hstem +594 122 hstem +83 144 vstem +468 127 vstem +468 716 rmoveto +-26 -122 rlineto +58 0 rlineto +-11 -51 -22 -21 -41 -10 rrcurveto +-12 -58 rlineto +84 1 52 44 24 116 rrcurveto +21 101 rlineto +-127 0 rlineto +closepath +-391 -301 rmoveto +68 0 rlineto +-44 -209 rlineto +-12 -58 -6 -36 0 -16 rrcurveto +0 -68 42 -40 100 0 rrcurveto +25 0 25 3 24 4 rrcurveto +22 104 rlineto +-25 -2 -16 -1 -6 0 rrcurveto +-35 0 -12 12 0 22 rrcurveto +0 5 4 22 8 40 rrcurveto +46 218 rlineto +86 0 rlineto +21 104 rlineto +-85 0 rlineto +37 179 rlineto +-160 -96 rlineto +-17 -83 rlineto +-69 0 rlineto +-21 -104 rlineto +closepath +endchar } ND +/Uring { +0 722 hsbw +-12 123 hstem +231 485 hstem +717 53 hstem +853 52 hstem +91 144 vstem +383 54 vstem +519 53 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +192 95 rmoveto +0 -52 41 -42 54 0 rrcurveto +52 0 42 42 0 52 rrcurveto +0 52 -42 42 -52 0 rrcurveto +-54 0 -41 -42 0 -52 rrcurveto +closepath +54 0 rmoveto +0 22 17 20 24 0 rrcurveto +22 0 19 -20 0 -22 rrcurveto +0 -23 -19 -18 -22 0 rrcurveto +-24 0 -17 18 0 23 rrcurveto +closepath +endchar } ND +/uring { +0 611 hsbw +-12 100 hstem +499 20 hstem +565 54 hstem +701 53 hstem +70 142 vstem +311 53 vstem +446 54 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +164 141 rmoveto +0 -52 42 -43 52 0 rrcurveto +52 0 43 43 0 52 rrcurveto +0 52 -43 42 -52 0 rrcurveto +-52 0 -42 -42 0 -52 rrcurveto +closepath +53 0 rmoveto +0 22 18 19 23 0 rrcurveto +22 0 19 -19 0 -22 rrcurveto +0 -23 -19 -18 -22 0 rrcurveto +-23 0 -18 18 0 23 rrcurveto +closepath +endchar } ND +/Udblacute { +0 722 hsbw +-12 123 hstem +231 485 hstem +756 145 hstem +91 144 vstem +300 77 vstem +492 80 vstem +591 142 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +400 185 rmoveto +-99 -145 rlineto +80 0 rlineto +161 145 rlineto +-142 0 rlineto +closepath +-195 0 rmoveto +-96 -145 rlineto +77 0 rlineto +165 145 rlineto +-146 0 rlineto +closepath +endchar } ND +/udblacute { +0 611 hsbw +-12 100 hstem +499 20 hstem +583 145 hstem +70 142 vstem +219 77 vstem +411 80 vstem +510 142 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +363 209 rmoveto +-99 -145 rlineto +80 0 rlineto +161 145 rlineto +-142 0 rlineto +closepath +-195 0 rmoveto +-96 -145 rlineto +77 0 rlineto +164 145 rlineto +-145 0 rlineto +closepath +endchar } ND +/Zacute { +0 611 hsbw +0 120 hstem +596 120 hstem +884 20 hstem +310 93 vstem +412 150 vstem +25 0 rmoveto +555 0 rlineto +25 120 rlineto +-375 0 rlineto +416 484 rlineto +22 112 rlineto +-516 0 rlineto +-25 -120 rlineto +333 0 rlineto +-412 -483 rlineto +-23 -113 rlineto +closepath +387 904 rmoveto +-102 -147 rlineto +93 0 rlineto +159 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/zacute { +0 500 hsbw +0 113 hstem +409 110 hstem +710 20 hstem +226 93 vstem +328 149 vstem +17 0 rmoveto +423 0 rlineto +24 113 rlineto +-249 0 rlineto +286 322 rlineto +18 84 rlineto +-407 0 rlineto +-23 -110 rlineto +232 0 rlineto +-284 -314 rlineto +-20 -95 rlineto +closepath +311 730 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/Zdot { +0 611 hsbw +0 120 hstem +596 120 hstem +756 128 hstem +340 140 vstem +25 0 rmoveto +555 0 rlineto +25 120 rlineto +-375 0 rlineto +416 484 rlineto +22 112 rlineto +-516 0 rlineto +-25 -120 rlineto +333 0 rlineto +-412 -483 rlineto +-23 -113 rlineto +closepath +342 884 rmoveto +-27 -128 rlineto +140 0 rlineto +27 128 rlineto +-140 0 rlineto +closepath +endchar } ND +/zdot { +0 500 hsbw +0 113 hstem +409 110 hstem +599 129 hstem +240 140 vstem +17 0 rmoveto +423 0 rlineto +24 113 rlineto +-249 0 rlineto +286 322 rlineto +18 84 rlineto +-407 0 rlineto +-23 -110 rlineto +232 0 rlineto +-284 -314 rlineto +-20 -95 rlineto +closepath +250 728 rmoveto +-27 -129 rlineto +140 0 rlineto +27 129 rlineto +-140 0 rlineto +closepath +endchar } ND +/Gamma { +0 610 hsbw +0 20 hstem +596 120 hstem +43 147 vstem +193 512 vstem +705 716 rmoveto +-512 0 rlineto +-150 -716 rlineto +147 0 rlineto +125 596 rlineto +365 0 rlineto +25 120 rlineto +closepath +endchar } ND +/Theta { +0 778 hsbw +-12 122 hstem +298 119 hstem +605 123 hstem +87 146 307 256 637 146 vstem3 +87 281 rmoveto +0 -160 104 -133 190 0 rrcurveto +242 0 161 209 0 230 rrcurveto +0 184 -122 117 -174 0 rrcurveto +-242 0 -159 -239 0 -208 rrcurveto +closepath +146 3 rmoveto +0 162 101 159 142 0 rrcurveto +98 0 63 -75 0 -106 rrcurveto +0 -123 -96 -191 -145 0 rrcurveto +-98 0 -65 74 0 100 rrcurveto +closepath +50 14 rmoveto +280 0 rlineto +25 119 rlineto +-280 0 rlineto +-25 -119 rlineto +closepath +endchar } ND +/Phi { +0 822 hsbw +-29 244 hstem +519 214 hstem +88 146 vstem +303 145 vstem +466 145 vstem +687 146 vstem +466 733 rmoveto +-18 -87 rlineto +-236 -23 -124 -140 0 -148 rrcurveto +0 -127 105 -102 136 -13 rrcurveto +-26 -122 rlineto +145 0 rlineto +25 116 rlineto +236 22 124 141 0 148 rrcurveto +0 126 -105 104 -136 12 rrcurveto +19 93 rlineto +-145 0 rlineto +closepath +34 -518 rmoveto +65 304 rlineto +81 -12 41 -38 0 -66 rrcurveto +0 -92 -67 -76 -120 -20 rrcurveto +closepath +-79 303 rmoveto +-65 -303 rlineto +-82 10 -40 39 0 67 rrcurveto +0 89 67 76 120 22 rrcurveto +closepath +endchar } ND +/alpha { +0 620 hsbw +-12 103 hstem +426 105 hstem +61 136 vstem +434 111 vstem +513 519 rmoveto +-37 -72 rlineto +-39 56 -52 28 -64 0 rrcurveto +-156 0 -104 -156 0 -173 rrcurveto +0 -143 75 -71 116 0 rrcurveto +61 0 54 25 47 51 rrcurveto +0 -23 2 -21 5 -20 rrcurveto +135 0 rlineto +-8 74 -3 60 0 48 rrcurveto +0 34 1 28 3 24 rrcurveto +113 251 rlineto +-149 0 rlineto +closepath +-316 -297 rmoveto +0 94 58 110 84 0 rrcurveto +54 0 41 -41 0 -77 rrcurveto +0 -119 -54 -98 -84 0 rrcurveto +-62 0 -37 41 0 90 rrcurveto +closepath +endchar } ND +/delta { +0 610 hsbw +-12 105 hstem +596 120 hstem +62 133 vstem +459 137 vstem +209 716 rmoveto +-20 -92 rlineto +37 -50 33 -40 30 -30 rrcurveto +-154 -38 -73 -108 0 -129 rrcurveto +0 -144 86 -97 155 0 rrcurveto +184 0 109 146 0 147 rrcurveto +0 58 -13 60 -103 91 rrcurveto +-32 28 -33 35 -35 43 rrcurveto +250 0 rlineto +26 120 rlineto +-447 0 rlineto +closepath +-14 -507 rmoveto +0 90 60 111 98 0 rrcurveto +65 0 41 -49 0 -66 rrcurveto +0 -96 -71 -106 -88 0 rrcurveto +-59 0 -46 44 0 72 rrcurveto +closepath +endchar } ND +/epsilon { +0 479 hsbw +-12 111 hstem +420 111 hstem +114 139 vstem +513 454 rmoveto +-47 51 -67 26 -86 0 rrcurveto +-127 0 -72 -65 0 -85 rrcurveto +0 -42 24 -36 48 -29 rrcurveto +-84 -24 -59 -54 0 -68 rrcurveto +0 -72 61 -68 124 0 rrcurveto +90 0 77 24 65 50 rrcurveto +-85 93 rlineto +-60 -38 -45 -18 -31 0 rrcurveto +-28 0 -27 13 0 27 rrcurveto +0 37 45 33 83 0 rrcurveto +29 0 rlineto +23 107 rlineto +-68 1 -43 23 0 36 rrcurveto +0 24 21 20 38 0 rrcurveto +35 0 33 -14 30 -28 rrcurveto +103 76 rlineto +closepath +endchar } ND +/sigma { +0 664 hsbw +-12 108 hstem +425 106 hstem +61 140 vstem +460 139 vstem +61 215 rmoveto +0 -159 103 -68 137 0 rrcurveto +182 0 116 140 0 171 rrcurveto +0 38 -6 33 -12 29 rrcurveto +113 0 rlineto +23 120 rlineto +-272 0 rlineto +-35 8 -30 4 -26 0 rrcurveto +-178 0 -115 -123 0 -193 rrcurveto +closepath +399 100 rmoveto +0 -124 -71 -95 -81 0 rrcurveto +-67 0 -40 53 0 68 rrcurveto +0 101 59 107 96 0 rrcurveto +65 0 39 -48 0 -62 rrcurveto +closepath +endchar } ND +/tau { +0 409 hsbw +0 20 hstem +399 120 hstem +107 138 vstem +105 519 rmoveto +-26 -120 rlineto +110 0 rlineto +-82 -399 rlineto +138 0 rlineto +84 399 rlineto +111 0 rlineto +26 120 rlineto +-361 0 rlineto +closepath +endchar } ND +/phi { +0 704 hsbw +-198 310 hstem +415 116 hstem +61 142 vstem +212 138 vstem +558 135 vstem +337 531 rmoveto +-171 -14 -105 -121 0 -152 rrcurveto +0 -130 84 -94 108 -26 rrcurveto +-41 -192 rlineto +138 0 rlineto +40 189 rlineto +204 20 99 144 0 168 rrcurveto +0 118 -72 90 -112 0 rrcurveto +-95 0 -55 -41 -37 -174 rrcurveto +-44 -204 rlineto +-50 32 -25 45 0 56 rrcurveto +0 74 38 67 68 16 rrcurveto +28 129 rlineto +closepath +77 -427 rmoveto +48 222 rlineto +16 72 9 17 31 0 rrcurveto +26 0 14 -25 0 -48 rrcurveto +0 -104 -58 -114 -86 -20 rrcurveto +closepath +endchar } ND +/underscoredbl { +0 552 hsbw +-376 89 hstem +-198 89 hstem +-9 570 vstem +-9 -198 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +0 -178 rmoveto +570 0 rlineto +0 89 rlineto +-570 0 rlineto +0 -89 rlineto +closepath +endchar } ND +/exclamdbl { +0 604 hsbw +0 135 hstem +696 20 hstem +127 77 vstem +398 77 vstem +477 147 vstem +204 182 rmoveto +111 353 rlineto +38 181 rlineto +-147 0 rlineto +-35 -169 rlineto +-44 -365 rlineto +77 0 rlineto +closepath +-114 -47 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +385 47 rmoveto +111 353 rlineto +38 181 rlineto +-147 0 rlineto +-35 -169 rlineto +-44 -365 rlineto +77 0 rlineto +closepath +-114 -47 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/nsuperior { +0 396 hsbw +543 32 hstem +133 98 vstem +326 104 vstem +133 575 rmoveto +-74 -325 rlineto +104 0 rlineto +29 134 rlineto +18 83 37 42 45 0 rrcurveto +22 0 12 -11 0 -17 rrcurveto +0 -5 -3 -15 -6 -26 rrcurveto +-42 -185 rlineto +103 0 rlineto +41 182 rlineto +7 30 4 21 0 12 rrcurveto +0 52 -36 36 -60 0 rrcurveto +-40 0 -28 -13 -42 -27 rrcurveto +7 32 rlineto +-98 0 rlineto +closepath +endchar } ND +/peseta { +0 1104 hsbw +-13 99 hstem +90 76 hstem +252 121 hstem +426 95 hstem +597 119 hstem +10 143 vstem +499 135 vstem +729 122 vstem +928 126 vstem +144 716 rmoveto +-134 -716 rlineto +143 0 rlineto +48 252 rlineto +23 0 rlineto +164 0 76 41 51 133 rrcurveto +42 0 rlineto +-50 -260 rlineto +-6 -29 -2 -22 0 -16 rrcurveto +0 -75 59 -37 76 0 rrcurveto +19 0 21 2 23 3 rrcurveto +11 55 rlineto +37 -45 44 -15 58 0 rrcurveto +122 0 85 80 0 98 rrcurveto +0 68 -43 53 -87 38 rrcurveto +-43 19 -30 15 0 33 rrcurveto +0 26 21 22 31 0 rrcurveto +32 0 25 -26 0 -46 rrcurveto +128 0 rlineto +-3 100 -70 68 -106 0 rrcurveto +-28 0 -26 -5 -26 -9 rrcurveto +-125 0 rlineto +23 123 rlineto +-129 0 rlineto +-24 -123 rlineto +-50 0 rlineto +-4 118 -95 77 -116 0 rrcurveto +-165 0 rlineto +closepath +80 -343 rmoveto +42 224 rlineto +22 0 rlineto +62 0 37 -37 0 -56 rrcurveto +0 -76 -56 -55 -86 0 rrcurveto +-21 0 rlineto +closepath +463 53 rmoveto +49 0 rlineto +-5 -20 -2 -17 0 -14 rrcurveto +0 -71 33 -31 82 -45 rrcurveto +51 -28 33 -16 0 -39 rrcurveto +0 -30 -30 -29 -34 0 rrcurveto +-32 0 -25 27 0 40 rrcurveto +0 13 rlineto +-127 0 rlineto +0 -27 rlineto +0 -13 2 -16 5 -20 rrcurveto +-44 1 -9 10 0 30 rrcurveto +0 14 2 19 6 24 rrcurveto +45 238 rlineto +closepath +endchar } ND +/arrowleft { +0 1000 hsbw +228 49 hstem +39 922 vstem +240 428 rmoveto +-86 -95 -59 -44 -56 -24 rrcurveto +0 -22 rlineto +64 -31 54 -42 84 -93 rrcurveto +38 0 rlineto +-31 65 -32 50 -34 36 rrcurveto +779 0 rlineto +0 49 rlineto +-779 0 rlineto +50 62 7 11 38 78 rrcurveto +-37 0 rlineto +closepath +endchar } ND +/arrowup { +0 500 hsbw +-209 20 hstem +415 37 hstem +226 49 vstem +75 452 rmoveto +0 -37 rlineto +76 38 12 7 63 50 rrcurveto +0 -719 rlineto +49 0 rlineto +0 719 rlineto +35 -34 50 -32 66 -30 rrcurveto +0 38 rlineto +-95 84 -41 52 -30 66 rrcurveto +-23 0 rlineto +-24 -56 -44 -60 -94 -86 rrcurveto +closepath +endchar } ND +/arrowright { +0 1000 hsbw +228 49 hstem +39 922 vstem +759 428 rmoveto +-37 0 rlineto +38 -78 7 -11 50 -62 rrcurveto +-778 0 rlineto +0 -49 rlineto +778 0 rlineto +-34 -36 -32 -50 -30 -65 rrcurveto +38 0 rlineto +84 93 54 42 64 31 rrcurveto +0 22 rlineto +-56 24 -60 44 -86 95 rrcurveto +closepath +endchar } ND +/arrowdown { +0 500 hsbw +-209 20 hstem +-8 37 hstem +226 49 vstem +75 -8 rmoveto +94 -86 44 -59 24 -56 rrcurveto +23 0 rlineto +30 64 41 54 95 84 rrcurveto +0 37 rlineto +-66 -30 -50 -32 -35 -34 rrcurveto +0 720 rlineto +-49 0 rlineto +0 -720 rlineto +-63 50 -11 7 -77 38 rrcurveto +0 -37 rlineto +closepath +endchar } ND +/arrowboth { +0 1000 hsbw +229 48 hstem +39 922 vstem +961 264 rmoveto +-62 28 -52 39 -84 98 rrcurveto +-39 0 rlineto +22 -56 31 -51 41 -45 rrcurveto +-637 0 rlineto +40 45 32 51 23 56 rrcurveto +-39 0 rlineto +-86 -98 -52 -39 -60 -28 rrcurveto +0 -22 rlineto +60 -28 52 -41 86 -96 rrcurveto +39 0 rlineto +-23 56 -32 50 -40 46 rrcurveto +637 0 rlineto +-41 -46 -31 -50 -22 -56 rrcurveto +39 0 rlineto +84 96 52 41 62 28 rrcurveto +0 22 rlineto +closepath +endchar } ND +/arrowupdn { +0 500 hsbw +-208 20 hstem +-10 39 hstem +477 39 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +endchar } ND +/arrowupdnbse { +0 500 hsbw +-303 48 hstem +-208 20 hstem +-10 39 hstem +477 39 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +-164 -969 rmoveto +0 -48 rlineto +350 0 rlineto +0 48 rlineto +-350 0 rlineto +closepath +endchar } ND +/orthogonal { +0 979 hsbw +0 49 hstem +177 49 vstem +177 625 rmoveto +0 -625 rlineto +625 0 rlineto +0 49 rlineto +-576 0 rlineto +0 576 rlineto +-49 0 rlineto +closepath +endchar } ND +/intersection { +0 722 hsbw +0 20 hstem +620 99 hstem +70 100 vstem +548 100 vstem +170 0 rmoveto +0 296 rlineto +0 223 51 101 138 0 rrcurveto +142 0 47 -101 0 -223 rrcurveto +0 -296 rlineto +100 0 rlineto +0 292 rlineto +0 321 -89 106 -200 0 rrcurveto +-203 0 -86 -118 0 -309 rrcurveto +0 -292 rlineto +100 0 rlineto +closepath +endchar } ND +/equivalence { +0 583 hsbw +73 127 290 126 506 127 hstem3 +42 500 vstem +42 506 rmoveto +500 0 rlineto +0 127 rlineto +-500 0 rlineto +0 -127 rlineto +closepath +0 -216 rmoveto +500 0 rlineto +0 127 rlineto +-500 0 rlineto +0 -127 rlineto +closepath +0 -217 rmoveto +500 0 rlineto +0 127 rlineto +-500 0 rlineto +0 -127 rlineto +closepath +endchar } ND +/house { +0 604 hsbw +0 40 hstem +501 62 hstem +77 39 vstem +488 39 vstem +77 0 rmoveto +450 0 rlineto +0 310 rlineto +-225 253 rlineto +-225 -253 rlineto +0 -310 rlineto +closepath +39 40 rmoveto +0 253 rlineto +186 208 rlineto +186 -208 rlineto +0 -253 rlineto +-372 0 rlineto +closepath +endchar } ND +/revlogicalnot { +0 584 hsbw +399 125 hstem +42 125 vstem +167 184 rmoveto +0 215 rlineto +375 0 rlineto +0 125 rlineto +-500 0 rlineto +0 -340 rlineto +125 0 rlineto +closepath +endchar } ND +/integraltp { +0 604 hsbw +798 50 hstem +267 70 vstem +337 -251 rmoveto +0 962 rlineto +0 49 -9 38 35 0 rrcurveto +7 0 8 -9 7 -9 rrcurveto +13 -21 16 -9 20 0 rrcurveto +24 0 19 18 0 27 rrcurveto +0 28 -24 25 -44 0 rrcurveto +-74 0 -68 -73 0 -142 rrcurveto +0 -884 rlineto +70 0 rlineto +closepath +endchar } ND +/integralbt { +0 604 hsbw +-251 50 hstem +267 70 vstem +267 848 rmoveto +0 -962 rlineto +0 -50 10 -37 -36 0 rrcurveto +-7 0 -8 9 -7 9 rrcurveto +-14 19 -15 11 -20 0 rrcurveto +-24 0 -19 -19 0 -26 rrcurveto +0 -29 24 -24 44 0 rrcurveto +73 0 69 73 0 142 rrcurveto +0 884 rlineto +-70 0 rlineto +closepath +endchar } ND +/SF100000 { +0 708 hsbw +261 85 hstem +-11 730 vstem +719 261 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF110000 { +0 625 hsbw +890 20 hstem +223 86 vstem +223 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF010000 { +0 708 hsbw +261 85 hstem +312 85 vstem +720 346 rmoveto +-408 0 rlineto +0 -649 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +closepath +endchar } ND +/SF030000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF020000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 261 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF040000 { +0 708 hsbw +261 649 hstem +311 85 vstem +396 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF080000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF090000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -564 rlineto +closepath +endchar } ND +/SF060000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF070000 { +0 708 hsbw +261 649 hstem +311 85 vstem +719 261 rmoveto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF050000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF430000 { +0 708 hsbw +168 85 hstem +354 85 hstem +-11 730 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF240000 { +0 708 hsbw +890 20 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF510000 { +0 708 hsbw +168 85 hstem +354 85 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-408 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF520000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-501 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF390000 { +0 708 hsbw +168 85 hstem +354 85 hstem +219 85 vstem +404 86 vstem +304 -303 rmoveto +0 657 rlineto +415 0 rlineto +0 85 rlineto +-500 0 rlineto +0 -742 rlineto +85 0 rlineto +closepath +186 471 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/SF220000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 742 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF210000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-500 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF250000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 742 rlineto +-500 0 rlineto +0 -85 rlineto +415 0 rlineto +0 -657 rlineto +closepath +-186 471 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF500000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 168 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF490000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +720 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +501 0 rlineto +closepath +endchar } ND +/SF380000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +304 910 rmoveto +-85 0 rlineto +0 -742 rlineto +500 0 rlineto +0 85 rlineto +-415 0 rlineto +0 657 rlineto +closepath +186 -471 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +endchar } ND +/SF280000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +396 168 rmoveto +0 742 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF270000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +489 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +500 0 rlineto +closepath +endchar } ND +/SF260000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 910 rmoveto +0 -657 rlineto +-415 0 rlineto +0 -85 rlineto +500 0 rlineto +0 742 rlineto +-85 0 rlineto +closepath +-186 -471 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +endchar } ND +/SF360000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF370000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF420000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +185 657 rmoveto +316 0 rlineto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +closepath +0 -657 rmoveto +86 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-316 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF190000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 84 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +1 -101 rlineto +-323 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF200000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +186 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF230000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +-100 1213 rmoveto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +closepath +-86 -742 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF470000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-408 -186 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF480000 { +0 708 hsbw +261 85 hstem +218 86 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF410000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-501 -186 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +186 -471 rmoveto +85 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF450000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF460000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +719 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF400000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +304 354 rmoveto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +closepath +415 0 rmoveto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -556 rlineto +315 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF540000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF530000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF440000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 86 vstem +490 439 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +-272 0 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +0 -271 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +272 0 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/upblock { +0 708 hsbw +303 607 hstem +-11 730 vstem +719 303 rmoveto +0 607 rlineto +-730 0 rlineto +0 -607 rlineto +730 0 rlineto +closepath +endchar } ND +/dnblock { +0 708 hsbw +-303 606 hstem +-11 730 vstem +719 -303 rmoveto +0 606 rlineto +-730 0 rlineto +0 -606 rlineto +730 0 rlineto +closepath +endchar } ND +/block { +0 708 hsbw +890 20 hstem +-11 730 vstem +-11 -303 rmoveto +730 0 rlineto +0 1213 rlineto +-730 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/lfblock { +0 708 hsbw +890 20 hstem +-11 365 vstem +-11 -303 rmoveto +365 0 rlineto +0 1213 rlineto +-365 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/rtblock { +0 708 hsbw +890 20 hstem +354 366 vstem +354 -303 rmoveto +366 0 rlineto +0 1213 rlineto +-366 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/ltshade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +50 61 172 60 293 61 vstem3 +415 61 537 60 658 61 vstem3 +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +608 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +-121 -121 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/shade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +-11 61 vstem +172 60 293 61 415 60 vstem3 +537 61 vstem +659 60 vstem +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-487 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +548 -122 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +61 -121 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/dkshade { +0 729 hsbw +-307 61 -184 59 -63 61 hstem3 +57 62 180 60 302 60 hstem3 +423 61 545 61 667 61 hstem3 +789 121 hstem +61 60 vstem +182 61 vstem +365 60 vstem +486 61 vstem +669 60 vstem +729 728 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 121 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -183 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -62 rlineto +-61 0 rlineto +0 -182 rlineto +729 0 rlineto +0 61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 60 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 182 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +closepath +-668 61 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-121 -122 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-365 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +61 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-547 -121 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +243 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-61 -61 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +182 61 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 -61 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-121 -61 rmoveto +60 0 rlineto +0 -60 rlineto +-60 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 62 rlineto +60 0 rlineto +0 -62 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-121 -60 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +endchar } ND +/filledbox { +0 604 hsbw +0 461 hstem +71 461 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +endchar } ND +/filledrect { +0 1000 hsbw +155 188 hstem +0 1000 vstem +0 343 rmoveto +0 -188 rlineto +1000 0 rlineto +0 188 rlineto +-1000 0 rlineto +closepath +endchar } ND +/triagup { +0 990 hsbw +0 20 hstem +148 694 vstem +148 0 rmoveto +694 0 rlineto +-347 693 rlineto +-347 -693 rlineto +closepath +endchar } ND +/triagrt { +0 990 hsbw +-15 20 hstem +141 708 vstem +141 692 rmoveto +0 -707 rlineto +708 353 rlineto +-708 354 rlineto +closepath +endchar } ND +/triagdn { +0 990 hsbw +-15 20 hstem +148 694 vstem +842 678 rmoveto +-694 0 rlineto +347 -693 rlineto +347 693 rlineto +closepath +endchar } ND +/triaglf { +0 990 hsbw +-15 20 hstem +141 708 vstem +849 692 rmoveto +-708 -354 rlineto +708 -353 rlineto +0 707 rlineto +closepath +endchar } ND +/circle { +0 604 hsbw +67 37 hstem +460 37 hstem +87 37 vstem +480 37 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +0 -37 rmoveto +91 0 87 -88 0 -90 rrcurveto +0 -99 -80 -79 -98 0 rrcurveto +-98 0 -80 79 0 99 rrcurveto +0 98 79 80 99 0 rrcurveto +closepath +endchar } ND +/invbullet { +0 604 hsbw +0 141 hstem +338 141 hstem +63 140 vstem +400 141 vstem +63 0 rmoveto +478 0 rlineto +0 479 rlineto +-478 0 rlineto +0 -479 rlineto +closepath +239 338 rmoveto +54 0 44 -45 0 -54 rrcurveto +0 -54 -44 -44 -54 0 rrcurveto +-55 0 -44 44 0 54 rrcurveto +0 54 44 45 55 0 rrcurveto +closepath +endchar } ND +/invcircle { +0 604 hsbw +0 67 104 356 497 67 hstem3 +21 66 125 355 518 66 vstem3 +21 0 rmoveto +563 0 rlineto +0 564 rlineto +-563 0 rlineto +0 -564 rlineto +closepath +282 497 rmoveto +110 0 105 -104 0 -111 rrcurveto +0 -119 -97 -96 -118 0 rrcurveto +-120 0 -96 96 0 119 rrcurveto +0 111 105 104 111 0 rrcurveto +closepath +0 -37 rmoveto +-91 0 -87 -85 0 -93 rrcurveto +0 -99 79 -79 99 0 rrcurveto +97 0 80 79 0 99 rrcurveto +0 92 -88 86 -89 0 rrcurveto +closepath +endchar } ND +/smileface { +0 1021 hsbw +-58 45 hstem +58 42 hstem +278 79 hstem +519 45 hstem +199 46 vstem +352 79 vstem +590 79 vstem +777 45 vstem +822 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -140 -139 0 -172 rrcurveto +0 -172 140 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-45 0 rmoveto +0 -147 -120 -119 -146 0 rrcurveto +-148 0 -118 119 0 147 rrcurveto +0 146 118 120 148 0 rrcurveto +146 0 120 -120 0 -146 rrcurveto +closepath +-346 64 rmoveto +0 22 -18 18 -22 0 rrcurveto +-22 0 -17 -18 0 -22 rrcurveto +0 -22 17 -17 22 0 rrcurveto +22 0 18 17 0 22 rrcurveto +closepath +238 0 rmoveto +0 22 -18 18 -21 0 rrcurveto +-22 0 -18 -18 0 -22 rrcurveto +0 -22 18 -17 22 0 rrcurveto +21 0 18 17 0 22 rrcurveto +closepath +-302 -164 rmoveto +33 -63 47 -32 64 0 rrcurveto +62 0 49 32 32 63 rrcurveto +-30 17 rlineto +-26 -47 -38 -23 -49 0 rrcurveto +-50 0 -38 23 -26 47 rrcurveto +-30 -17 rlineto +closepath +endchar } ND +/invsmileface { +0 1052 hsbw +-58 116 hstem +170 108 hstem +357 207 hstem +215 152 446 160 685 152 vstem3 +837 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -139 -139 0 -172 rrcurveto +0 -172 139 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-391 64 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-22 0 -18 17 0 22 rrcurveto +0 22 18 18 22 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +239 0 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-23 0 -17 17 0 22 rrcurveto +0 22 17 18 23 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +-302 -164 rmoveto +30 17 rlineto +26 -47 37 -23 50 0 rrcurveto +50 0 37 23 26 47 rrcurveto +31 -17 rlineto +-32 -63 -48 -32 -64 0 rrcurveto +-63 0 -48 32 -32 63 rrcurveto +closepath +endchar } ND +/sun { +0 917 hsbw +-13 369 hstem +591 201 hstem +8 200 440 37 709 200 vstem3 +440 792 rmoveto +0 -165 rlineto +-59 -6 -46 -17 -65 -45 rrcurveto +-143 138 rlineto +-23 -28 rlineto +138 -140 rlineto +-46 -55 -19 -47 -5 -69 rrcurveto +-164 0 rlineto +0 -33 rlineto +164 0 rlineto +6 -70 21 -49 44 -54 rrcurveto +-139 -140 rlineto +24 -25 rlineto +144 136 rlineto +52 -40 44 -18 72 -9 rrcurveto +0 -165 rlineto +38 0 rlineto +0 165 rlineto +69 8 38 13 64 48 rrcurveto +138 -138 rlineto +28 24 rlineto +-139 142 rlineto +40 51 23 57 7 62 rrcurveto +163 0 rlineto +0 33 rlineto +-164 0 rlineto +-2 59 -20 55 -48 61 rrcurveto +140 140 rlineto +-25 26 rlineto +-142 -139 rlineto +-58 46 -47 19 -65 4 rrcurveto +0 165 rlineto +-38 0 rlineto +closepath +268 -451 rmoveto +0 -138 -113 -112 -137 0 rrcurveto +-139 0 -111 112 0 138 rrcurveto +0 138 111 112 139 0 rrcurveto +137 0 113 -112 0 -138 rrcurveto +closepath +endchar } ND +/female { +0 750 hsbw +0 29 hstem +225 25 hstem +708 28 hstem +119 28 361 28 604 26 vstem3 +389 225 rmoveto +134 6 107 113 0 136 rrcurveto +0 132 -122 124 -133 0 rrcurveto +-135 0 -121 -123 0 -133 rrcurveto +0 -131 128 -124 113 0 rrcurveto +0 -196 rlineto +-225 0 rlineto +0 -29 rlineto +225 0 rlineto +0 -214 rlineto +29 0 rlineto +0 214 rlineto +224 0 rlineto +0 29 rlineto +-224 0 rlineto +0 196 rlineto +closepath +-14 483 rmoveto +116 0 113 -110 0 -119 rrcurveto +0 -127 -103 -102 -126 0 rrcurveto +-127 0 -102 102 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/male { +0 750 hsbw +-128 26 hstem +357 13 hstem +734 57 hstem +54 27 vstem +539 26 vstem +594 791 rmoveto +-300 -148 rlineto +12 -26 rlineto +262 130 rlineto +-176 -377 rlineto +-29 8 -27 5 -25 0 rrcurveto +-143 0 -114 -114 0 -141 rrcurveto +0 -133 122 -123 134 0 rrcurveto +132 0 123 124 0 132 rrcurveto +0 94 -50 89 -96 48 rrcurveto +175 375 rlineto +69 -283 rlineto +28 7 rlineto +-80 325 rlineto +-17 8 rlineto +closepath +-284 -434 rmoveto +115 0 114 -109 0 -120 rrcurveto +0 -127 -103 -103 -126 0 rrcurveto +-127 0 -102 103 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/spade { +0 531 hsbw +0 18 hstem +28 243 vstem +266 601 rmoveto +-20 -96 -49 -50 -77 -64 rrcurveto +-57 -48 -35 -37 0 -64 rrcurveto +0 -59 48 -49 59 0 rrcurveto +54 0 44 31 30 62 rrcurveto +2 -139 -69 -70 -120 0 rrcurveto +-4 -18 rlineto +387 0 rlineto +0 18 rlineto +-126 5 -62 72 0 132 rrcurveto +32 -62 42 -31 51 0 rrcurveto +58 0 49 47 0 63 rrcurveto +0 62 -34 36 -70 62 rrcurveto +-78 69 -36 45 -19 83 rrcurveto +closepath +endchar } ND +/club { +0 656 hsbw +0 404 hstem +192 271 vstem +536 0 rmoveto +-4 17 rlineto +-155 29 -41 48 -3 156 rrcurveto +44 -81 54 -35 64 0 rrcurveto +73 0 61 59 0 79 rrcurveto +0 76 -56 57 -65 0 rrcurveto +-31 0 -6 -6 -42 -20 rrcurveto +22 32 12 30 0 30 rrcurveto +0 70 -60 60 -76 0 rrcurveto +-78 0 -57 -59 0 -74 rrcurveto +0 -27 5 -16 28 -46 rrcurveto +-34 16 -27 9 -19 0 rrcurveto +-62 0 -56 -58 0 -76 rrcurveto +0 -78 60 -59 76 0 rrcurveto +58 0 62 35 40 82 rrcurveto +0 -23 rlineto +0 -111 -44 -68 -153 -31 rrcurveto +-4 -17 rlineto +414 0 rlineto +closepath +endchar } ND +/heart { +0 594 hsbw +-12 490 hstem +31 532 vstem +298 -12 rmoveto +20 74 32 66 108 134 rrcurveto +82 102 23 55 0 59 rrcurveto +0 66 -56 57 -70 0 rrcurveto +-62 0 -53 -39 -24 -84 rrcurveto +-27 75 -45 48 -70 0 rrcurveto +-71 0 -54 -56 0 -72 rrcurveto +0 -76 34 -38 81 -106 rrcurveto +108 -142 24 -46 20 -77 rrcurveto +closepath +endchar } ND +/diamond { +0 510 hsbw +-12 20 hstem +31 448 vstem +254 601 rmoveto +-56 -100 -106 -137 -61 -69 rrcurveto +103 -128 88 -116 33 -63 rrcurveto +51 93 126 163 47 51 rrcurveto +-59 66 -108 141 -58 99 rrcurveto +closepath +endchar } ND +/musicalnote { +0 500 hsbw +-18 230 hstem +554 112 hstem +237 49 vstem +434 48 vstem +237 666 rmoveto +0 -477 rlineto +-32 15 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -66 44 -43 71 0 rrcurveto +89 0 64 56 0 108 rrcurveto +0 408 rlineto +13 0 rlineto +69 0 66 -32 0 -75 rrcurveto +0 -21 rlineto +48 0 rlineto +0 50 rlineto +0 145 -52 45 -174 0 rrcurveto +-19 0 rlineto +closepath +endchar } ND +/musicalnotedbl { +0 750 hsbw +39 229 hstem +261 48 vstem +600 49 vstem +261 621 rmoveto +0 -476 rlineto +-32 14 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -64 44 -45 71 0 rrcurveto +88 0 64 58 0 107 rrcurveto +0 408 rlineto +291 90 rlineto +0 -353 rlineto +-46 18 -12 3 -25 0 rrcurveto +-80 0 -55 -55 0 -65 rrcurveto +0 -64 45 -45 72 0 rrcurveto +87 0 63 52 0 110 rrcurveto +0 541 rlineto +-388 -121 rlineto +closepath +endchar } ND +/IJ { +0 782 hsbw +-12 123 hstem +696 20 hstem +35 147 vstem +259 136 vstem +685 145 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +650 716 rmoveto +-90 -429 rlineto +-26 -127 6 -49 -101 0 rrcurveto +-54 0 -25 24 0 46 rrcurveto +0 36 rlineto +-136 -15 rlineto +0 -38 rlineto +0 -108 67 -68 138 0 rrcurveto +162 0 65 64 48 230 rrcurveto +91 434 rlineto +-145 0 rlineto +closepath +endchar } ND +/ij { +0 556 hsbw +-210 123 hstem +0 20 hstem +499 20 hstem +589 127 hstem +155 140 vstem +423 140 vstem +196 716 rmoveto +-27 -127 rlineto +141 0 rlineto +26 127 rlineto +-140 0 rlineto +closepath +-41 -197 rmoveto +-109 -519 rlineto +141 0 rlineto +108 519 rlineto +-140 0 rlineto +closepath +309 197 rmoveto +-26 -127 rlineto +140 0 rlineto +26 127 rlineto +-140 0 rlineto +closepath +-41 -197 rmoveto +-90 -430 rlineto +-38 -176 -15 0 -37 0 rrcurveto +-16 0 -19 3 -22 5 rrcurveto +-22 -116 rlineto +32 -10 35 -5 39 0 rrcurveto +154 0 5 85 42 205 rrcurveto +92 439 rlineto +-140 0 rlineto +closepath +endchar } ND +/napostrophe { +0 708 hsbw +0 20 hstem +431 100 hstem +580 136 hstem +244 132 vstem +542 143 vstem +102 716 rmoveto +-29 -136 rlineto +64 0 rlineto +-14 -56 -23 -24 -46 -10 rrcurveto +-13 -65 rlineto +93 1 58 48 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +142 -197 rmoveto +-109 -519 rlineto +140 0 rlineto +45 213 rlineto +26 141 66 77 70 0 rrcurveto +38 0 22 -22 0 -36 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-62 -294 rlineto +140 0 rlineto +61 293 rlineto +11 51 6 35 0 18 rrcurveto +0 81 -53 53 -85 0 rrcurveto +-64 0 -54 -23 -66 -57 rrcurveto +13 68 rlineto +-132 0 rlineto +closepath +endchar } ND +/minute { +0 240 hsbw +461 255 hstem +151 101 vstem +151 461 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-149 0 rlineto +-26 -121 rlineto +-3 -134 rlineto +closepath +endchar } ND +/second { +0 479 hsbw +461 255 hstem +151 101 vstem +329 101 vstem +151 461 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-149 0 rlineto +-26 -121 rlineto +-3 -134 rlineto +closepath +178 0 rmoveto +101 0 rlineto +51 134 rlineto +26 121 rlineto +-150 0 rlineto +-25 -121 rlineto +-3 -134 rlineto +closepath +endchar } ND +/afii61248 { +0 885 hsbw +-8 75 hstem +294 74 hstem +656 72 hstem +69 96 vstem +522 98 vstem +799 96 vstem +298 496 rmoveto +-16 -46 -31 -22 -32 0 rrcurveto +-31 0 -23 24 0 43 rrcurveto +0 82 40 79 63 0 rrcurveto +32 0 20 -18 6 -40 rrcurveto +92 9 rlineto +-6 73 -54 48 -84 0 rrcurveto +-117 0 -88 -109 0 -113 rrcurveto +0 -96 57 -58 92 0 rrcurveto +80 0 64 45 31 83 rrcurveto +-95 16 rlineto +closepath +-86 -527 rmoveto +597 759 rlineto +-112 0 rlineto +-597 -759 rlineto +112 0 rlineto +closepath +310 180 rmoveto +0 -94 64 -63 104 0 rrcurveto +117 0 88 88 0 126 rrcurveto +0 98 -63 64 -106 0 rrcurveto +-122 0 -82 -86 0 -133 rrcurveto +closepath +277 69 rmoveto +0 -75 -38 -76 -68 0 rrcurveto +-42 0 -31 32 0 51 rrcurveto +0 69 37 75 70 0 rrcurveto +41 0 31 -30 0 -46 rrcurveto +closepath +endchar } ND +/afii61289 { +0 516 hsbw +-12 104 hstem +620 108 hstem +100 134 vstem +426 116 vstem +52 200 rmoveto +55 18 rlineto +-5 -33 -2 -24 0 -15 rrcurveto +0 -91 65 -67 106 0 rrcurveto +48 0 36 9 56 29 rrcurveto +27 126 rlineto +-67 -40 -53 -20 -40 0 rrcurveto +-27 0 -17 17 0 31 rrcurveto +0 27 7 46 16 65 rrcurveto +198 90 87 96 0 118 rrcurveto +0 81 -65 65 -85 0 rrcurveto +-159 0 -63 -166 -37 -210 rrcurveto +-28 -11 -29 -10 -29 -10 rrcurveto +5 -121 rlineto +closepath +237 224 rmoveto +28 114 22 82 56 0 rrcurveto +16 0 15 -15 0 -24 rrcurveto +0 -47 -36 -53 -101 -57 rrcurveto +closepath +endchar } ND +/H22073 { +0 604 hsbw +0 37 hstem +424 37 hstem +71 37 vstem +495 37 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +37 -37 rmoveto +387 0 rlineto +0 -387 rlineto +-387 0 rlineto +0 387 rlineto +closepath +endchar } ND +/H18543 { +0 354 hsbw +198 265 hstem +45 265 vstem +310 463 rmoveto +-265 0 rlineto +0 -265 rlineto +265 0 rlineto +0 265 rlineto +closepath +endchar } ND +/H18551 { +0 354 hsbw +198 37 hstem +426 37 hstem +45 37 vstem +273 37 vstem +310 463 rmoveto +-265 0 rlineto +0 -265 rlineto +265 0 rlineto +0 265 rlineto +closepath +-37 -37 rmoveto +0 -191 rlineto +-191 0 rlineto +0 191 rlineto +191 0 rlineto +closepath +endchar } ND +/H18533 { +0 604 hsbw +67 430 hstem +87 430 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +endchar } ND +/openbullet { +0 354 hsbw +208 37 hstem +416 37 hstem +55 37 vstem +263 37 vstem +177 453 rmoveto +-68 0 -54 -56 0 -66 rrcurveto +0 -68 54 -55 68 0 rrcurveto +68 0 55 55 0 68 rrcurveto +0 66 -55 56 -68 0 rrcurveto +closepath +0 -37 rmoveto +48 0 38 -39 0 -46 rrcurveto +0 -48 -40 -38 -46 0 rrcurveto +-47 0 -38 38 0 48 rrcurveto +0 46 38 39 47 0 rrcurveto +closepath +endchar } ND +/Amacron { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +779 95 hstem +-11 151 vstem +534 139 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-144 597 rmoveto +-20 -95 rlineto +313 0 rlineto +19 95 rlineto +-312 0 rlineto +closepath +endchar } ND +/amacron { +0 556 hsbw +-12 105 hstem +431 100 hstem +603 94 hstem +45 132 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-144 455 rmoveto +-20 -94 rlineto +313 0 rlineto +19 94 rlineto +-312 0 rlineto +closepath +endchar } ND +/Ccircumflex { +0 722 hsbw +-13 124 hstem +601 127 hstem +867 60 hstem +95 145 vstem +313 116 vstem +552 97 vstem +560 258 rmoveto +-32 -98 -68 -49 -76 0 rrcurveto +-83 0 -61 65 0 115 rrcurveto +0 137 87 173 143 0 rrcurveto +74 0 45 -35 15 -84 rrcurveto +142 14 rlineto +-18 144 -101 88 -154 0 rrcurveto +-220 0 -158 -206 0 -226 rrcurveto +0 -200 104 -109 175 0 rrcurveto +156 0 120 88 58 160 rrcurveto +-148 23 rlineto +closepath +-45 609 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +116 0 rlineto +86 87 rlineto +closepath +endchar } ND +/ccircumflex { +0 556 hsbw +-12 110 hstem +427 104 hstem +671 60 hstem +60 139 vstem +201 115 vstem +440 97 vstem +392 195 rmoveto +-24 -66 -45 -31 -45 0 rrcurveto +-46 0 -33 33 0 62 rrcurveto +0 92 48 142 101 0 rrcurveto +46 0 30 -27 7 -57 rrcurveto +133 14 rlineto +-8 104 -78 70 -122 0 rrcurveto +-168 0 -128 -156 0 -166 rrcurveto +0 -138 83 -83 132 0 rrcurveto +116 0 91 65 46 120 rrcurveto +-136 22 rlineto +closepath +10 476 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Cdot { +0 722 hsbw +-13 124 hstem +601 127 hstem +780 129 hstem +95 145 vstem +421 140 vstem +560 258 rmoveto +-32 -98 -68 -49 -76 0 rrcurveto +-83 0 -61 65 0 115 rrcurveto +0 137 87 173 143 0 rrcurveto +74 0 45 -35 15 -84 rrcurveto +142 14 rlineto +-18 144 -101 88 -154 0 rrcurveto +-220 0 -158 -206 0 -226 rrcurveto +0 -200 104 -109 175 0 rrcurveto +156 0 120 88 58 160 rrcurveto +-148 23 rlineto +closepath +-112 651 rmoveto +-27 -129 rlineto +140 0 rlineto +27 129 rlineto +-140 0 rlineto +closepath +endchar } ND +/cdot { +0 556 hsbw +-12 110 hstem +427 104 hstem +599 129 hstem +60 139 vstem +321 140 vstem +392 195 rmoveto +-24 -66 -45 -31 -45 0 rrcurveto +-46 0 -33 33 0 62 rrcurveto +0 92 48 142 101 0 rrcurveto +46 0 30 -27 7 -57 rrcurveto +133 14 rlineto +-8 104 -78 70 -122 0 rrcurveto +-168 0 -128 -156 0 -166 rrcurveto +0 -138 83 -83 132 0 rrcurveto +116 0 91 65 46 120 rrcurveto +-136 22 rlineto +closepath +-71 533 rmoveto +-27 -129 rlineto +141 0 rlineto +26 129 rlineto +-140 0 rlineto +closepath +endchar } ND +/Emacron { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +779 95 hstem +330 312 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +289 874 rmoveto +-20 -95 rlineto +313 0 rlineto +19 95 rlineto +-312 0 rlineto +closepath +endchar } ND +/emacron { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +603 94 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-194 396 rmoveto +-20 -94 rlineto +313 0 rlineto +19 94 rlineto +-312 0 rlineto +closepath +endchar } ND +/Ebreve { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +776 71 hstem +334 68 vstem +576 64 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +293 917 rmoveto +13 -94 52 -47 76 0 rrcurveto +73 0 65 51 27 90 rrcurveto +-64 0 rlineto +-26 -47 -32 -23 -39 0 rrcurveto +-38 0 -25 18 -14 52 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/ebreve { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +585 142 hstem +58 135 vstem +227 67 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-200 426 rmoveto +12 -95 53 -47 76 0 rrcurveto +73 0 65 51 27 91 rrcurveto +-65 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -23 17 -16 54 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/Edot { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +780 129 hstem +393 140 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +379 909 rmoveto +-27 -129 rlineto +140 0 rlineto +27 129 rlineto +-140 0 rlineto +closepath +endchar } ND +/edot { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +599 129 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-114 427 rmoveto +-26 -129 rlineto +140 0 rlineto +27 129 rlineto +-141 0 rlineto +closepath +endchar } ND +/Gcircumflex { +0 778 hsbw +-12 123 hstem +263 119 hstem +609 119 hstem +867 60 hstem +88 143 vstem +341 116 vstem +580 97 vstem +439 382 rmoveto +-24 -119 rlineto +182 0 rlineto +-22 -107 rlineto +-48 -24 -73 -21 -62 0 rrcurveto +-106 0 -55 55 0 122 rrcurveto +0 159 99 162 159 0 rrcurveto +81 0 54 -42 24 -80 rrcurveto +138 15 rlineto +-34 148 -100 78 -165 0 rrcurveto +-241 0 -158 -219 0 -223 rrcurveto +0 -189 104 -109 197 0 rrcurveto +113 0 118 39 75 48 rrcurveto +65 307 rlineto +-321 0 rlineto +closepath +103 485 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +116 0 rlineto +85 87 rlineto +closepath +endchar } ND +/gcircumflex { +0 611 hsbw +-210 100 hstem +-2 104 hstem +431 100 hstem +671 60 hstem +61 137 vstem +195 336 vstem +31 -27 rmoveto +0 -21 rlineto +0 -116 76 -46 146 0 rrcurveto +166 0 70 86 44 210 rrcurveto +90 433 rlineto +-132 0 rlineto +-19 -92 rlineto +-32 65 -61 39 -69 0 rrcurveto +-145 0 -104 -163 0 -159 rrcurveto +0 -139 72 -72 102 0 rrcurveto +52 0 50 20 48 41 rrcurveto +-5 -25 rlineto +-20 -106 -18 -38 -86 0 rrcurveto +-46 0 -29 16 0 45 rrcurveto +-150 22 rlineto +closepath +167 250 rmoveto +0 76 63 132 73 0 rrcurveto +53 0 46 -50 0 -73 rrcurveto +0 -87 -57 -119 -85 0 rrcurveto +-54 0 -39 42 0 79 rrcurveto +closepath +198 448 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +116 0 rlineto +85 87 rlineto +closepath +endchar } ND +/Gdot { +0 778 hsbw +-12 123 hstem +263 119 hstem +609 119 hstem +780 129 hstem +88 143 vstem +427 140 vstem +439 382 rmoveto +-24 -119 rlineto +182 0 rlineto +-22 -107 rlineto +-48 -24 -73 -21 -62 0 rrcurveto +-106 0 -55 55 0 122 rrcurveto +0 159 99 162 159 0 rrcurveto +81 0 54 -42 24 -80 rrcurveto +138 15 rlineto +-34 148 -100 78 -165 0 rrcurveto +-241 0 -158 -219 0 -223 rrcurveto +0 -189 104 -109 197 0 rrcurveto +113 0 118 39 75 48 rrcurveto +65 307 rlineto +-321 0 rlineto +closepath +15 527 rmoveto +-27 -129 rlineto +140 0 rlineto +27 129 rlineto +-140 0 rlineto +closepath +endchar } ND +/gdot { +0 611 hsbw +-210 100 hstem +-2 104 hstem +431 100 hstem +599 129 hstem +61 137 vstem +302 140 vstem +491 132 vstem +31 -27 rmoveto +0 -21 rlineto +0 -116 76 -46 146 0 rrcurveto +166 0 70 86 44 210 rrcurveto +90 433 rlineto +-132 0 rlineto +-19 -92 rlineto +-32 65 -61 39 -69 0 rrcurveto +-145 0 -104 -163 0 -159 rrcurveto +0 -139 72 -72 102 0 rrcurveto +52 0 50 20 48 41 rrcurveto +-5 -25 rlineto +-20 -106 -18 -38 -86 0 rrcurveto +-46 0 -29 16 0 45 rrcurveto +-150 22 rlineto +closepath +167 250 rmoveto +0 76 63 132 73 0 rrcurveto +53 0 46 -50 0 -73 rrcurveto +0 -87 -57 -119 -85 0 rrcurveto +-54 0 -39 42 0 79 rrcurveto +closepath +131 505 rmoveto +-27 -129 rlineto +140 0 rlineto +27 129 rlineto +-140 0 rlineto +closepath +endchar } ND +/Gcedilla { +0 778 hsbw +-208 59 hstem +-65 52 hstem +-12 123 hstem +263 119 hstem +609 119 hstem +88 143 vstem +395 88 vstem +439 382 rmoveto +-24 -119 rlineto +182 0 rlineto +-22 -107 rlineto +-48 -24 -73 -21 -62 0 rrcurveto +-106 0 -55 55 0 122 rrcurveto +0 159 99 162 159 0 rrcurveto +81 0 54 -42 24 -80 rrcurveto +138 15 rlineto +-34 148 -100 78 -165 0 rrcurveto +-241 0 -158 -219 0 -223 rrcurveto +0 -189 104 -109 197 0 rrcurveto +113 0 118 39 75 48 rrcurveto +65 307 rlineto +-321 0 rlineto +closepath +-216 -590 rmoveto +48 0 rlineto +108 0 104 34 0 81 rrcurveto +0 44 -38 36 -70 0 rrcurveto +-20 0 -21 -2 -23 -6 rrcurveto +-17 -49 rlineto +18 4 15 1 11 0 rrcurveto +41 0 16 -15 0 -20 rrcurveto +0 -31 -72 -18 -49 0 rrcurveto +-27 0 rlineto +-24 -59 rlineto +closepath +endchar } ND +/gcedilla { +0 611 hsbw +-210 100 hstem +-2 104 hstem +431 100 hstem +581 89 hstem +61 137 vstem +289 149 vstem +491 132 vstem +438 581 rmoveto +19 89 rlineto +-60 0 rlineto +4 32 22 18 40 5 rrcurveto +16 76 rlineto +-98 -6 -59 -50 -19 -93 rrcurveto +-14 -71 rlineto +149 0 rlineto +closepath +-407 -608 rmoveto +0 -21 rlineto +0 -121 90 -41 133 0 rrcurveto +191 0 43 88 45 208 rrcurveto +90 433 rlineto +-132 0 rlineto +-19 -92 rlineto +-28 57 -56 47 -77 0 rrcurveto +-151 0 -99 -170 0 -150 rrcurveto +0 -144 75 -69 98 0 rrcurveto +52 0 51 20 48 41 rrcurveto +-5 -25 rlineto +-19 -98 -15 -46 -88 0 rrcurveto +-52 0 -25 21 0 40 rrcurveto +-150 22 rlineto +closepath +167 250 rmoveto +0 88 54 120 82 0 rrcurveto +57 0 42 -57 0 -66 rrcurveto +0 -106 -60 -100 -82 0 rrcurveto +-55 0 -38 45 0 76 rrcurveto +closepath +endchar } ND +/Hcircumflex { +0 722 hsbw +0 439 hstem +696 20 hstem +867 60 hstem +43 148 vstem +311 115 vstem +549 97 vstem +535 320 rmoveto +-67 -320 rlineto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-58 -277 rlineto +-277 0 rlineto +57 277 rlineto +-147 0 rlineto +-150 -716 rlineto +148 0 rlineto +67 320 rlineto +277 0 rlineto +closepath +-23 547 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/hcircumflex { +0 611 hsbw +0 20 hstem +431 100 hstem +696 20 hstem +845 60 hstem +42 140 vstem +265 115 vstem +449 142 vstem +182 0 rmoveto +43 206 rlineto +30 151 37 74 97 0 rrcurveto +37 0 23 -24 0 -33 rrcurveto +0 -10 -4 -22 -7 -33 rrcurveto +-64 -309 rlineto +140 0 rlineto +63 303 rlineto +9 44 5 32 0 21 rrcurveto +0 77 -52 54 -84 0 rrcurveto +-63 0 -50 -21 -64 -49 rrcurveto +54 255 rlineto +-140 0 rlineto +-150 -716 rlineto +140 0 rlineto +closepath +284 845 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Hbar { +0 722 hsbw +0 439 hstem +534 182 hstem +155 147 vstem +468 147 vstem +618 147 vstem +155 534 rmoveto +-112 -534 rlineto +148 0 rlineto +67 320 rlineto +277 0 rlineto +-67 -320 rlineto +147 0 rlineto +112 534 rlineto +72 0 rlineto +19 87 rlineto +-73 0 rlineto +20 95 rlineto +-147 0 rlineto +-20 -95 rlineto +-278 0 rlineto +20 95 rlineto +-147 0 rlineto +-20 -95 rlineto +-71 0 rlineto +-19 -87 rlineto +72 0 rlineto +closepath +147 0 rmoveto +278 0 rlineto +-20 -95 rlineto +-277 0 rlineto +19 95 rlineto +closepath +endchar } ND +/hbar { +0 611 hsbw +0 20 hstem +431 100 hstem +575 141 hstem +42 140 vstem +192 140 vstem +449 142 vstem +302 575 rmoveto +148 0 rlineto +19 87 rlineto +-148 0 rlineto +11 54 rlineto +-140 0 rlineto +-12 -54 rlineto +-59 0 rlineto +-18 -87 rlineto +59 0 rlineto +-120 -575 rlineto +140 0 rlineto +43 206 rlineto +29 139 46 86 89 0 rrcurveto +38 0 22 -26 0 -29 rrcurveto +0 -12 -4 -23 -7 -32 rrcurveto +-64 -309 rlineto +140 0 rlineto +63 303 rlineto +9 44 5 32 0 21 rrcurveto +0 70 -46 61 -90 0 rrcurveto +-61 0 -59 -24 -57 -46 rrcurveto +24 114 rlineto +closepath +endchar } ND +/Itilde { +0 278 hsbw +0 20 hstem +696 20 hstem +820 78 hstem +111 62 vstem +185 147 vstem +385 62 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +138 780 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -31 -10 -7 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-57 0 -23 -44 -17 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/itilde { +0 278 hsbw +0 20 hstem +499 20 hstem +632 78 hstem +73 61 vstem +148 141 vstem +346 63 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +-14 73 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 40 37 14 80 rrcurveto +-63 0 rlineto +-10 -31 -9 -7 -14 0 rrcurveto +-10 0 -18 4 -25 10 rrcurveto +-43 17 -31 7 -17 0 rrcurveto +-57 0 -24 -44 -15 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/Imacron { +0 278 hsbw +0 20 hstem +696 20 hstem +779 95 hstem +35 147 vstem +185 147 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +95 874 rmoveto +-19 -95 rlineto +312 0 rlineto +20 95 rlineto +-313 0 rlineto +closepath +endchar } ND +/imacron { +0 278 hsbw +0 20 hstem +499 20 hstem +603 94 hstem +40 140 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +-56 178 rmoveto +-19 -94 rlineto +312 0 rlineto +20 94 rlineto +-313 0 rlineto +closepath +endchar } ND +/Ibreve { +0 278 hsbw +0 20 hstem +696 20 hstem +776 71 hstem +145 67 vstem +386 65 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +110 917 rmoveto +12 -94 53 -47 76 0 rrcurveto +73 0 65 51 27 90 rrcurveto +-65 0 rlineto +-26 -47 -32 -23 -38 0 rrcurveto +-39 0 -23 18 -16 52 rrcurveto +-67 0 rlineto +closepath +endchar } ND +/ibreve { +0 278 hsbw +0 20 hstem +499 20 hstem +585 142 hstem +103 68 vstem +345 64 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +-45 208 rmoveto +13 -95 52 -47 76 0 rrcurveto +73 0 65 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/Iogonek { +0 278 hsbw +-208 74 hstem +0 9 hstem +696 20 hstem +7 76 vstem +185 147 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +181 -115 rmoveto +-35 -12 -28 -7 -22 0 rrcurveto +-31 0 -17 18 0 29 rrcurveto +0 24 8 32 18 40 rrcurveto +-69 0 rlineto +-18 -30 -15 -54 0 -42 rrcurveto +0 -58 33 -33 55 0 rrcurveto +30 0 50 14 28 16 rrcurveto +13 63 rlineto +closepath +endchar } ND +/iogonek { +0 278 hsbw +-208 74 hstem +0 9 hstem +499 20 hstem +589 127 hstem +13 76 vstem +163 140 vstem +189 716 rmoveto +-26 -127 rlineto +140 0 rlineto +27 127 rlineto +-141 0 rlineto +closepath +-41 -197 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +73 -634 rmoveto +-35 -12 -28 -7 -22 0 rrcurveto +-30 0 -17 18 0 29 rrcurveto +0 24 8 32 17 40 rrcurveto +-69 0 rlineto +-16 -30 -16 -54 0 -42 rrcurveto +0 -58 32 -33 56 0 rrcurveto +30 0 49 14 28 16 rrcurveto +13 63 rlineto +closepath +endchar } ND +/Jcircumflex { +0 556 hsbw +-12 123 hstem +696 20 hstem +867 60 hstem +29 136 vstem +351 115 vstem +590 97 vstem +455 716 rmoveto +-90 -429 rlineto +-26 -127 6 -49 -101 0 rrcurveto +-54 0 -25 24 0 46 rrcurveto +0 36 rlineto +-136 -15 rlineto +0 -38 rlineto +0 -108 67 -68 138 0 rrcurveto +162 0 65 64 48 230 rrcurveto +91 434 rlineto +-145 0 rlineto +closepath +97 151 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/jcircumflex { +0 278 hsbw +-210 123 hstem +499 20 hstem +671 60 hstem +50 116 vstem +289 97 vstem +251 671 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +116 0 rlineto +85 87 rlineto +closepath +-102 -152 rmoveto +-89 -430 rlineto +-36 -172 -15 -4 -40 0 rrcurveto +-15 0 -19 3 -22 5 rrcurveto +-22 -116 rlineto +32 -10 35 -5 38 0 rrcurveto +143 0 24 131 35 159 rrcurveto +92 439 rlineto +-141 0 rlineto +closepath +endchar } ND +/Kcedilla { +0 722 hsbw +-208 60 hstem +-72 59 hstem +0 20 hstem +412 304 hstem +40 148 vstem +335 90 vstem +549 167 vstem +40 0 rmoveto +148 0 rlineto +45 219 rlineto +140 122 rlineto +176 -341 rlineto +167 0 rlineto +-236 435 rlineto +321 281 rlineto +-197 0 rlineto +-331 -304 rlineto +63 304 rlineto +-147 0 rlineto +-149 -716 rlineto +closepath +213 -13 rmoveto +-12 -59 rlineto +28 0 rlineto +44 0 22 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-23 -60 rlineto +43 0 rlineto +136 0 81 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-42 0 rlineto +closepath +endchar } ND +/kcedilla { +0 556 hsbw +-208 60 hstem +-72 59 hstem +0 20 hstem +499 20 hstem +696 20 hstem +38 140 vstem +280 90 vstem +376 141 vstem +38 0 rmoveto +140 0 rlineto +32 156 rlineto +95 84 rlineto +71 -240 rlineto +141 0 rlineto +-111 330 rlineto +208 189 rlineto +-182 0 rlineto +-182 -176 rlineto +78 373 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +159 -13 rmoveto +-11 -59 rlineto +27 0 rlineto +44 0 23 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-24 -60 rlineto +44 0 rlineto +134 0 83 51 0 64 rrcurveto +0 43 -32 38 -93 0 rrcurveto +-5 -1 rlineto +-43 0 rlineto +closepath +endchar } ND +/kgreenlandic { +0 556 hsbw +0 20 hstem +343 176 hstem +40 140 vstem +379 140 vstem +40 0 rmoveto +140 0 rlineto +33 156 rlineto +95 84 rlineto +71 -240 rlineto +140 0 rlineto +-111 330 rlineto +209 189 rlineto +-182 0 rlineto +-183 -176 rlineto +39 176 rlineto +-141 0 rlineto +-110 -519 rlineto +closepath +endchar } ND +/Lcedilla { +0 611 hsbw +-208 60 hstem +-72 59 hstem +0 120 hstem +696 20 hstem +279 90 vstem +45 0 rmoveto +512 0 rlineto +25 120 rlineto +-365 0 rlineto +125 596 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +152 -13 rmoveto +-12 -59 rlineto +27 0 rlineto +44 0 23 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-23 -60 rlineto +43 0 rlineto +136 0 81 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-42 0 rlineto +closepath +endchar } ND +/lcedilla { +0 278 hsbw +-208 60 hstem +-72 59 hstem +0 20 hstem +696 20 hstem +113 90 vstem +39 0 rmoveto +140 0 rlineto +150 716 rlineto +-140 0 rlineto +-150 -716 rlineto +closepath +-8 -13 rmoveto +-12 -59 rlineto +27 0 rlineto +44 0 23 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-23 -60 rlineto +43 0 rlineto +136 0 81 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-42 0 rlineto +closepath +endchar } ND +/Ncedilla { +0 722 hsbw +-208 60 hstem +-72 59 hstem +0 237 hstem +481 235 hstem +45 137 vstem +194 138 vstem +335 90 vstem +476 137 vstem +626 137 vstem +613 0 rmoveto +150 716 rlineto +-137 0 rlineto +-100 -479 rlineto +-194 479 rlineto +-138 0 rlineto +-149 -716 rlineto +137 0 rlineto +101 481 rlineto +193 -481 rlineto +137 0 rlineto +closepath +-360 -13 rmoveto +-12 -59 rlineto +28 0 rlineto +44 0 22 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-23 -60 rlineto +43 0 rlineto +136 0 81 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-42 0 rlineto +closepath +endchar } ND +/ncedilla { +0 611 hsbw +-208 60 hstem +-72 59 hstem +0 20 hstem +431 100 hstem +279 90 vstem +449 142 vstem +150 519 rmoveto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +26 141 62 77 74 0 rrcurveto +37 0 23 -22 0 -36 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-62 -294 rlineto +140 0 rlineto +61 293 rlineto +10 51 6 35 0 18 rrcurveto +0 81 -52 53 -85 0 rrcurveto +-64 0 -55 -23 -65 -57 rrcurveto +13 68 rlineto +-133 0 rlineto +closepath +47 -532 rmoveto +-12 -59 rlineto +27 0 rlineto +44 0 23 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-23 -60 rlineto +43 0 rlineto +136 0 81 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-42 0 rlineto +closepath +endchar } ND +/Eng { +0 723 hsbw +-13 119 hstem +603 125 hstem +195 145 vstem +589 146 vstem +195 716 rmoveto +-147 -716 rlineto +147 0 rlineto +76 365 rlineto +27 141 73 97 111 0 rrcurveto +61 0 46 -37 0 -74 rrcurveto +0 -124 -15 -262 -132 0 rrcurveto +-19 0 -21 9 -22 19 rrcurveto +-72 -102 rlineto +42 -30 51 -15 58 0 rrcurveto +227 0 49 314 0 202 rrcurveto +0 150 -84 75 -110 0 rrcurveto +-75 0 -74 -38 -72 -76 rrcurveto +20 102 rlineto +-145 0 rlineto +closepath +endchar } ND +/eng { +0 611 hsbw +-210 123 hstem +0 20 hstem +431 100 hstem +148 133 vstem +447 142 vstem +574 293 rmoveto +10 51 5 36 0 22 rrcurveto +0 66 -47 63 -90 0 rrcurveto +-64 0 -61 -27 -59 -53 rrcurveto +13 68 rlineto +-133 0 rlineto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +25 131 53 87 85 0 rrcurveto +36 0 23 -23 0 -32 rrcurveto +0 -10 -5 -28 -8 -44 rrcurveto +-48 -225 rlineto +-30 -145 -11 -11 -40 0 rrcurveto +-14 0 -15 2 -15 4 rrcurveto +-48 -112 rlineto +34 -11 38 -6 40 0 rrcurveto +140 0 22 92 33 157 rrcurveto +54 254 rlineto +closepath +endchar } ND +/Omacron { +0 778 hsbw +-13 123 hstem +605 123 hstem +779 95 hstem +87 146 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +152 590 rmoveto +-20 -95 rlineto +313 0 rlineto +19 95 rlineto +-312 0 rlineto +closepath +endchar } ND +/omacron { +0 611 hsbw +-12 108 hstem +425 106 hstem +603 94 hstem +61 140 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-208 382 rmoveto +-19 -94 rlineto +312 0 rlineto +20 94 rlineto +-313 0 rlineto +closepath +endchar } ND +/Obreve { +0 778 hsbw +-13 123 hstem +605 123 hstem +776 71 hstem +87 146 vstem +383 68 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +150 633 rmoveto +13 -94 52 -47 76 0 rrcurveto +74 0 64 51 27 90 rrcurveto +-64 0 rlineto +-26 -47 -32 -23 -38 0 rrcurveto +-39 0 -25 18 -14 52 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/obreve { +0 611 hsbw +-12 108 hstem +425 106 hstem +585 142 hstem +61 140 vstem +264 68 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-196 412 rmoveto +13 -95 52 -47 76 0 rrcurveto +73 0 65 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/Rcedilla { +0 722 hsbw +-208 60 hstem +-72 59 hstem +0 20 hstem +296 108 hstem +596 120 hstem +44 147 vstem +335 90 vstem +594 147 vstem +191 0 rmoveto +62 296 rlineto +60 0 rlineto +180 0 9 -219 24 -77 rrcurveto +158 0 rlineto +-53 134 -37 102 -73 68 rrcurveto +148 18 72 84 0 122 rrcurveto +0 125 -86 63 -143 0 rrcurveto +-318 0 rlineto +-150 -716 rlineto +147 0 rlineto +closepath +85 404 rmoveto +40 192 rlineto +162 0 rlineto +76 0 40 -11 0 -59 rrcurveto +0 -97 -89 -25 -151 0 rrcurveto +-78 0 rlineto +closepath +-24 -417 rmoveto +-11 -59 rlineto +27 0 rlineto +44 0 23 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-23 -60 rlineto +43 0 rlineto +136 0 81 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-43 0 rlineto +closepath +endchar } ND +/rcedilla { +0 389 hsbw +-208 60 hstem +-72 59 hstem +0 20 hstem +408 123 hstem +150 90 vstem +141 519 rmoveto +-109 -519 rlineto +140 0 rlineto +35 163 rlineto +27 142 50 103 96 0 rrcurveto +14 0 13 -3 13 -4 rrcurveto +54 115 rlineto +-24 10 -21 5 -20 0 rrcurveto +-57 0 -53 -38 -49 -75 rrcurveto +21 101 rlineto +-130 0 rlineto +closepath +-73 -532 rmoveto +-12 -59 rlineto +27 0 rlineto +44 0 23 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-23 -60 rlineto +43 0 rlineto +136 0 81 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-42 0 rlineto +closepath +endchar } ND +/Scircumflex { +0 667 hsbw +-12 123 hstem +611 117 hstem +867 60 hstem +150 141 vstem +482 146 vstem +63 232 rmoveto +-1 -48 9 -42 18 -37 rrcurveto +40 -83 106 -34 110 0 rrcurveto +178 0 105 102 0 127 rrcurveto +0 114 -59 38 -148 60 rrcurveto +-82 33 -48 11 0 63 rrcurveto +0 42 31 33 82 0 rrcurveto +82 0 42 -37 7 -69 rrcurveto +141 7 rlineto +-10 130 -93 86 -168 0 rrcurveto +-166 0 -89 -89 0 -120 rrcurveto +0 -118 75 -40 129 -56 rrcurveto +86 -37 42 -9 0 -60 rrcurveto +0 -48 -40 -40 -96 0 rrcurveto +-100 0 -37 22 -5 106 rrcurveto +-141 -7 rlineto +closepath +426 635 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/scircumflex { +0 556 hsbw +-12 100 hstem +434 97 hstem +671 60 hstem +100 131 vstem +373 143 vstem +22 145 rmoveto +29 -100 78 -57 150 0 rrcurveto +150 0 87 83 0 99 rrcurveto +0 87 -65 36 -121 33 rrcurveto +-66 18 -33 -1 0 43 rrcurveto +0 25 24 23 59 0 rrcurveto +48 0 44 -17 16 -44 rrcurveto +130 22 rlineto +-19 84 -64 52 -134 0 rrcurveto +-133 0 -102 -59 0 -109 rrcurveto +0 -105 66 -13 138 -48 rrcurveto +46 -16 23 -6 0 -30 rrcurveto +0 -41 -48 -16 -49 0 rrcurveto +-63 0 -31 21 -24 58 rrcurveto +-136 -22 rlineto +closepath +377 526 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Tbar { +0 611 hsbw +0 371 hstem +596 120 hstem +206 147 vstem +265 284 rmoveto +-59 -284 rlineto +147 0 rlineto +59 284 rlineto +165 0 rlineto +18 87 rlineto +-165 0 rlineto +48 225 rlineto +206 0 rlineto +25 120 rlineto +-563 0 rlineto +-26 -120 rlineto +210 0 rlineto +-47 -225 rlineto +-165 0 rlineto +-18 -87 rlineto +165 0 rlineto +closepath +endchar } ND +/tbar { +0 333 hsbw +-12 108 hstem +217 87 hstem +415 104 hstem +82 144 vstem +120 304 rmoveto +-80 0 rlineto +-19 -87 rlineto +81 0 rlineto +-14 -64 -6 -41 0 -17 rrcurveto +0 -72 47 -35 96 0 rrcurveto +24 0 24 3 24 4 rrcurveto +22 104 rlineto +-23 -2 -16 -1 -9 0 rrcurveto +-30 0 -15 11 0 23 rrcurveto +0 4 5 29 11 54 rrcurveto +98 0 rlineto +18 87 rlineto +-98 0 rlineto +23 111 rlineto +86 0 rlineto +22 104 rlineto +-86 0 rlineto +38 179 rlineto +-161 -96 rlineto +-17 -83 rlineto +-68 0 rlineto +-22 -104 rlineto +68 0 rlineto +-23 -111 rlineto +closepath +endchar } ND +/Utilde { +0 722 hsbw +-12 123 hstem +231 485 hstem +820 78 hstem +91 144 vstem +329 62 vstem +603 62 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +200 64 rmoveto +9 30 15 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 28 -10 15 0 rrcurveto +46 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -31 -10 -7 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-56 0 -26 -44 -15 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/utilde { +0 611 hsbw +-12 100 hstem +499 20 hstem +632 78 hstem +70 142 vstem +239 62 vstem +380 131 vstem +513 62 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +154 73 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -31 -10 -7 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-57 0 -25 -44 -15 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/Umacron { +0 722 hsbw +-12 123 hstem +231 485 hstem +779 95 hstem +91 144 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +160 158 rmoveto +-19 -95 rlineto +312 0 rlineto +20 95 rlineto +-313 0 rlineto +closepath +endchar } ND +/umacron { +0 611 hsbw +-12 100 hstem +499 20 hstem +603 94 hstem +70 142 vstem +380 131 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +119 178 rmoveto +-19 -94 rlineto +312 0 rlineto +20 94 rlineto +-313 0 rlineto +closepath +endchar } ND +/Ubreve { +0 722 hsbw +-12 123 hstem +231 485 hstem +776 71 hstem +91 144 vstem +357 68 vstem +599 64 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +166 201 rmoveto +13 -94 52 -47 76 0 rrcurveto +73 0 65 51 27 90 rrcurveto +-64 0 rlineto +-26 -47 -32 -23 -39 0 rrcurveto +-38 0 -25 18 -14 52 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/ubreve { +0 611 hsbw +-12 100 hstem +499 20 hstem +585 142 hstem +70 142 vstem +261 68 vstem +503 64 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +114 208 rmoveto +13 -95 52 -47 76 0 rrcurveto +74 0 64 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/Uogonek { +0 722 hsbw +-208 74 hstem +-12 21 hstem +231 485 hstem +91 144 vstem +268 76 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +285 -831 rmoveto +-35 -12 -28 -7 -22 0 rrcurveto +-30 0 -17 18 0 29 rrcurveto +0 24 8 32 17 40 rrcurveto +-69 0 rlineto +-16 -30 -16 -54 0 -42 rrcurveto +0 -58 32 -33 55 0 rrcurveto +30 0 50 14 28 16 rrcurveto +13 63 rlineto +closepath +endchar } ND +/uogonek { +0 611 hsbw +-208 74 hstem +-12 100 hstem +499 20 hstem +70 142 vstem +352 76 vstem +479 140 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +414 -634 rmoveto +-36 -12 -28 -7 -21 0 rrcurveto +-31 0 -17 18 0 29 rrcurveto +0 24 8 32 18 40 rrcurveto +-70 0 rlineto +-16 -30 -16 -54 0 -42 rrcurveto +0 -58 32 -33 56 0 rrcurveto +30 0 49 14 28 16 rrcurveto +14 63 rlineto +closepath +endchar } ND +/Wcircumflex { +0 944 hsbw +0 215 hstem +523 193 hstem +867 60 hstem +117 144 vstem +424 116 vstem +663 97 vstem +925 143 vstem +722 0 rmoveto +346 716 rlineto +-143 0 rlineto +-236 -496 rlineto +-16 496 rlineto +-160 0 rlineto +-245 -501 rlineto +-7 501 rlineto +-144 0 rlineto +27 -716 rlineto +152 0 rlineto +261 523 rlineto +16 -523 rlineto +149 0 rlineto +closepath +-97 867 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +116 0 rlineto +85 87 rlineto +closepath +endchar } ND +/wcircumflex { +0 778 hsbw +0 171 hstem +330 189 hstem +671 60 hstem +72 124 vstem +279 115 vstem +518 96 vstem +700 140 vstem +582 0 rmoveto +258 519 rlineto +-140 0 rlineto +-161 -348 rlineto +-18 348 rlineto +-127 0 rlineto +-162 -348 rlineto +-36 348 rlineto +-124 0 rlineto +65 -519 rlineto +130 0 rlineto +158 330 rlineto +25 -330 rlineto +132 0 rlineto +closepath +-102 671 rmoveto +38 -87 rlineto +96 0 rlineto +-59 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/Ycircumflex { +0 667 hsbw +0 20 hstem +696 20 hstem +867 60 hstem +115 156 vstem +286 115 vstem +524 97 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +86 867 rmoveto +37 -87 rlineto +97 0 rlineto +-59 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/ycircumflex { +0 556 hsbw +-210 112 hstem +499 20 hstem +671 60 hstem +192 115 vstem +431 96 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +310 152 rmoveto +38 -87 rlineto +96 0 rlineto +-59 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +endchar } ND +/longs { +0 278 hsbw +0 20 hstem +622 106 hstem +39 140 vstem +179 0 rmoveto +116 555 rlineto +12 56 8 11 32 0 rrcurveto +20 0 28 -6 34 -12 rrcurveto +27 101 rlineto +-48 15 -45 8 -43 0 rrcurveto +-97 0 -43 -45 -21 -111 rrcurveto +-120 -572 rlineto +140 0 rlineto +closepath +endchar } ND +/Aringacute { +0 722 hsbw +421 94 vstem +523 150 vstem +523 1000 rmoveto +-102 -146 rlineto +94 0 rlineto +158 146 rlineto +-150 0 rlineto +closepath +endchar } ND +/aringacute { +0 556 hsbw +337 93 vstem +439 149 vstem +439 927 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/AEacute { +0 1000 hsbw +0 120 hstem +179 120 hstem +313 120 hstem +596 120 hstem +-32 151 vstem +584 93 vstem +686 149 vstem +459 179 rmoveto +-37 -179 rlineto +516 0 rlineto +24 120 rlineto +-378 0 rlineto +41 193 rlineto +336 0 rlineto +25 120 rlineto +-337 0 rlineto +35 163 rlineto +350 0 rlineto +25 120 rlineto +-675 0 rlineto +-416 -716 rlineto +151 0 rlineto +102 179 rlineto +238 0 rlineto +closepath +25 120 rmoveto +-194 0 rlineto +169 297 rlineto +87 0 rlineto +-62 -297 rlineto +closepath +202 628 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/aeacute { +0 889 hsbw +-12 110 224 76 431 100 hstem3 +710 20 hstem +31 126 vstem +461 94 vstem +563 150 vstem +739 127 vstem +856 215 rmoveto +6 30 4 32 0 32 rrcurveto +0 138 -85 84 -126 0 rrcurveto +-70 0 -58 -22 -44 -43 rrcurveto +-36 54 -52 11 -74 0 rrcurveto +-128 0 -81 -61 -24 -86 rrcurveto +134 -14 rlineto +14 42 24 19 50 0 rrcurveto +54 0 24 -25 0 -46 rrcurveto +0 -13 rlineto +-1 -4 -1 -5 -1 -5 rrcurveto +-20 -8 -47 -7 -66 -6 rrcurveto +-140 -13 -81 -41 0 -118 rrcurveto +0 -91 63 -61 100 0 rrcurveto +82 0 72 40 60 81 rrcurveto +37 -81 65 -40 92 0 rrcurveto +103 0 80 50 56 102 rrcurveto +-126 20 rlineto +-26 -45 -36 -22 -46 0 rrcurveto +-59 0 -47 46 -2 76 rrcurveto +357 0 rlineto +closepath +-118 85 rmoveto +-228 0 rlineto +18 85 56 46 60 0 rrcurveto +57 0 38 -41 0 -74 rrcurveto +-1 -5 rlineto +0 -11 rlineto +closepath +-371 -55 rmoveto +-17 -81 -52 -70 -74 0 rrcurveto +-42 0 -25 26 0 32 rrcurveto +0 85 88 -5 122 13 rrcurveto +closepath +196 485 rmoveto +-102 -146 rlineto +94 0 rlineto +158 146 rlineto +-150 0 rlineto +closepath +endchar } ND +/Oslashacute { +0 778 hsbw +-12 118 hstem +605 123 hstem +83 146 vstem +473 93 vstem +637 143 vstem +151 84 rmoveto +-73 -88 rlineto +68 -56 rlineto +72 87 rlineto +42 -26 54 -13 65 0 rrcurveto +229 0 172 216 0 222 rrcurveto +0 81 -22 67 -42 52 rrcurveto +71 85 rlineto +-68 56 rlineto +-68 -82 rlineto +-46 28 -56 15 -66 0 rrcurveto +-236 0 -164 -230 0 -220 rrcurveto +0 -75 22 -65 46 -54 rrcurveto +closepath +96 116 rmoveto +-12 28 -6 29 0 32 rrcurveto +0 138 102 178 141 0 rrcurveto +34 0 31 -9 26 -18 rrcurveto +-316 -378 rlineto +closepath +371 308 rmoveto +12 -28 7 -28 0 -26 rrcurveto +0 -144 -103 -176 -139 0 rrcurveto +-32 0 -30 9 -27 18 rrcurveto +312 375 rlineto +closepath +-43 419 rmoveto +-102 -147 rlineto +93 0 rlineto +159 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/oslashacute { +0 611 hsbw +-12 102 hstem +429 102 hstem +710 20 hstem +59 131 vstem +322 94 vstem +466 132 vstem +489 501 rmoveto +-36 20 -45 10 -54 0 rrcurveto +-186 0 -109 -141 0 -168 rrcurveto +0 -64 17 -53 36 -42 rrcurveto +-59 -68 rlineto +52 -47 rlineto +62 71 rlineto +39 -20 45 -11 51 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 65 -18 53 -36 41 rrcurveto +60 69 rlineto +-54 46 rlineto +-61 -70 rlineto +closepath +-76 -88 rmoveto +-216 -251 rlineto +-5 15 -2 15 0 16 rrcurveto +0 92 57 129 105 0 rrcurveto +23 0 20 -6 18 -10 rrcurveto +closepath +45 -58 rmoveto +5 -16 3 -16 0 -15 rrcurveto +0 -89 -61 -129 -102 0 rrcurveto +-23 0 -20 5 -18 10 rrcurveto +216 250 rlineto +closepath +-34 375 rmoveto +-102 -146 rlineto +94 0 rlineto +158 146 rlineto +-150 0 rlineto +closepath +endchar } ND +/anoteleia { +0 333 hsbw +383 136 hstem +179 138 vstem +179 519 rmoveto +-29 -136 rlineto +139 0 rlineto +28 136 rlineto +-138 0 rlineto +closepath +endchar } ND +/Wgrave { +0 944 hsbw +0 215 hstem +523 193 hstem +780 146 hstem +117 144 vstem +609 95 vstem +925 143 vstem +722 0 rmoveto +346 716 rlineto +-143 0 rlineto +-236 -496 rlineto +-16 496 rlineto +-160 0 rlineto +-245 -501 rlineto +-7 501 rlineto +-144 0 rlineto +27 -716 rlineto +152 0 rlineto +261 523 rlineto +16 -523 rlineto +149 0 rlineto +closepath +-216 926 rmoveto +103 -146 rlineto +95 0 rlineto +-63 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/wgrave { +0 778 hsbw +0 171 hstem +330 189 hstem +586 146 hstem +72 124 vstem +459 95 vstem +700 140 vstem +582 0 rmoveto +258 519 rlineto +-140 0 rlineto +-161 -348 rlineto +-18 348 rlineto +-127 0 rlineto +-162 -348 rlineto +-36 348 rlineto +-124 0 rlineto +65 -519 rlineto +130 0 rlineto +158 330 rlineto +25 -330 rlineto +132 0 rlineto +closepath +-226 732 rmoveto +103 -146 rlineto +95 0 rlineto +-63 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/Wacute { +0 944 hsbw +0 215 hstem +523 193 hstem +117 144 vstem +556 93 vstem +658 150 vstem +925 143 vstem +722 0 rmoveto +346 716 rlineto +-143 0 rlineto +-236 -496 rlineto +-16 496 rlineto +-160 0 rlineto +-245 -501 rlineto +-7 501 rlineto +-144 0 rlineto +27 -716 rlineto +152 0 rlineto +261 523 rlineto +16 -523 rlineto +149 0 rlineto +closepath +-64 927 rmoveto +-102 -147 rlineto +93 0 rlineto +159 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/wacute { +0 778 hsbw +0 171 hstem +330 189 hstem +710 20 hstem +72 124 vstem +406 93 vstem +508 149 vstem +700 140 vstem +582 0 rmoveto +258 519 rlineto +-140 0 rlineto +-161 -348 rlineto +-18 348 rlineto +-127 0 rlineto +-162 -348 rlineto +-36 348 rlineto +-124 0 rlineto +65 -519 rlineto +130 0 rlineto +158 330 rlineto +25 -330 rlineto +132 0 rlineto +closepath +-74 730 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/Wdieresis { +0 944 hsbw +0 215 hstem +523 193 hstem +780 120 hstem +117 144 vstem +453 120 vstem +659 120 vstem +925 143 vstem +722 0 rmoveto +346 716 rlineto +-143 0 rlineto +-236 -496 rlineto +-16 496 rlineto +-160 0 rlineto +-245 -501 rlineto +-7 501 rlineto +-144 0 rlineto +27 -716 rlineto +152 0 rlineto +261 523 rlineto +16 -523 rlineto +149 0 rlineto +closepath +-244 900 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/wdieresis { +0 778 hsbw +0 171 hstem +330 189 hstem +597 120 hstem +72 124 vstem +307 120 vstem +513 120 vstem +700 140 vstem +582 0 rmoveto +258 519 rlineto +-140 0 rlineto +-161 -348 rlineto +-18 348 rlineto +-127 0 rlineto +-162 -348 rlineto +-36 348 rlineto +-124 0 rlineto +65 -519 rlineto +130 0 rlineto +158 330 rlineto +25 -330 rlineto +132 0 rlineto +closepath +-250 717 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/Ygrave { +0 667 hsbw +0 20 hstem +696 20 hstem +780 146 hstem +431 94 vstem +614 171 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +-73 926 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/ygrave { +0 556 hsbw +-210 112 hstem +499 20 hstem +586 146 hstem +83 140 vstem +348 94 vstem +472 149 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +162 213 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/quotereversed { +0 278 hsbw +580 136 hstem +150 77 vstem +325 716 rmoveto +-141 0 rlineto +-24 -112 rlineto +-7 -31 -3 -23 0 -16 rrcurveto +0 -72 37 -36 76 -1 rrcurveto +13 65 rlineto +-33 4 -16 18 0 32 rrcurveto +0 10 1 12 3 14 rrcurveto +65 0 rlineto +29 136 rlineto +closepath +endchar } ND +/radicalex { +0 333 hsbw +603 94 hstem +74 371 vstem +93 697 rmoveto +-19 -94 rlineto +371 0 rlineto +20 94 rlineto +-372 0 rlineto +closepath +endchar } ND +/afii08941 { +0 556 hsbw +-12 123 hstem +220 91 hstem +363 91 hstem +620 108 hstem +172 122 vstem +286 454 rmoveto +-2 12 -1 11 0 11 rrcurveto +0 72 45 60 66 0 rrcurveto +51 0 30 -33 10 -65 rrcurveto +125 13 rlineto +-7 110 -76 83 -129 0 rrcurveto +-148 0 -96 -108 0 -129 rrcurveto +0 -37 rlineto +-60 0 rlineto +-20 -91 rlineto +95 0 rlineto +1 -12 1 -12 1 -8 rrcurveto +0 -20 rlineto +-109 0 rlineto +-19 -91 rlineto +103 0 rlineto +-30 -52 -42 -37 -54 -23 rrcurveto +14 -126 rlineto +51 28 48 14 45 0 rrcurveto +28 0 37 -8 49 -12 rrcurveto +40 -10 36 -6 32 0 rrcurveto +42 0 43 10 46 20 rrcurveto +-42 119 rlineto +-38 -18 -37 -8 -36 0 rrcurveto +-17 0 -22 2 -27 6 rrcurveto +-20 3 -17 2 -12 0 rrcurveto +-25 0 -24 -5 -23 -10 rrcurveto +43 38 29 37 14 36 rrcurveto +95 0 rlineto +19 91 rlineto +-98 0 rlineto +0 52 rlineto +109 0 rlineto +20 91 rlineto +-137 0 rlineto +closepath +endchar } ND +/estimated { +0 600 hsbw +-17 36 hstem +259 36 hstem +500 35 hstem +44 113 vstem +157 259 rmoveto +404 0 rlineto +-7 181 -111 95 -141 0 rrcurveto +-152 0 -106 -116 0 -160 rrcurveto +0 -162 107 -114 151 0 rrcurveto +104 0 58 41 66 94 rrcurveto +-35 21 rlineto +-46 -80 -64 -40 -83 0 rrcurveto +-58 0 -49 19 -38 40 rrcurveto +0 181 rlineto +closepath +291 36 rmoveto +-291 0 rlineto +0 145 rlineto +39 40 48 20 57 0 rrcurveto +57 0 49 -20 41 -40 rrcurveto +0 -145 rlineto +closepath +endchar } ND +/oneeighth { +0 834 hsbw +-26 68 hstem +144 66 hstem +282 67 hstem +705 20 hstem +85 85 vstem +174 96 vstem +302 60 vstem +569 87 vstem +744 89 vstem +170 -30 rmoveto +655 755 rlineto +-85 0 rlineto +-655 -755 rlineto +85 0 rlineto +closepath +-56 587 rmoveto +38 6 40 12 42 20 rrcurveto +-60 -240 rlineto +96 0 rlineto +92 370 rlineto +-60 0 rlineto +-39 -34 -56 -31 -74 -27 rrcurveto +-19 -76 rlineto +closepath +662 -381 rmoveto +38 23 19 27 0 30 rrcurveto +0 54 -49 39 -77 0 rrcurveto +-84 0 -54 -49 0 -54 rrcurveto +0 -24 10 -21 22 -16 rrcurveto +-51 -28 -25 -36 0 -42 rrcurveto +0 -58 45 -47 86 0 rrcurveto +101 0 56 65 0 62 rrcurveto +0 26 -13 25 -24 24 rrcurveto +closepath +-120 65 rmoveto +0 22 23 19 27 0 rrcurveto +25 0 13 -11 0 -20 rrcurveto +0 -22 -24 -19 -26 0 rrcurveto +-26 0 -12 10 0 21 rrcurveto +closepath +-36 -164 rmoveto +0 36 24 31 36 0 rrcurveto +24 0 17 -14 0 -21 rrcurveto +0 -32 -20 -35 -40 0 rrcurveto +-28 0 -13 11 0 24 rrcurveto +closepath +endchar } ND +/threeeighths { +0 834 hsbw +-26 68 hstem +144 66 hstem +282 67 hstem +510 70 hstem +655 70 hstem +85 85 vstem +296 94 vstem +569 88 vstem +744 89 vstem +170 -30 rmoveto +655 755 rlineto +-84 0 rlineto +-656 -755 rlineto +85 0 rlineto +closepath +-93 491 rmoveto +11 -75 46 -37 80 0 rrcurveto +96 0 60 66 0 56 rrcurveto +0 26 -13 23 -24 22 rrcurveto +38 22 19 28 0 33 rrcurveto +0 54 -43 46 -81 0 rrcurveto +-73 0 -48 -35 -24 -69 rrcurveto +88 -15 rlineto +9 32 17 17 24 0 rrcurveto +24 0 13 -10 0 -20 rrcurveto +0 -30 -20 -15 -39 0 rrcurveto +-15 0 rlineto +-19 -73 rlineto +9 2 7 1 6 0 rrcurveto +32 0 17 -14 0 -27 rrcurveto +0 -27 -23 -23 -36 0 rrcurveto +-28 0 -16 17 -4 34 rrcurveto +-90 -9 rlineto +closepath +699 -285 rmoveto +38 23 19 27 0 30 rrcurveto +0 53 -48 40 -78 0 rrcurveto +-84 0 -54 -49 0 -54 rrcurveto +0 -24 10 -21 22 -16 rrcurveto +-51 -26 -25 -36 0 -44 rrcurveto +0 -58 47 -47 84 0 rrcurveto +92 0 65 59 0 68 rrcurveto +0 26 -13 25 -24 24 rrcurveto +closepath +-119 65 rmoveto +0 24 23 17 26 0 rrcurveto +25 0 13 -11 0 -20 rrcurveto +0 -22 -24 -19 -26 0 rrcurveto +-25 0 -12 10 0 21 rrcurveto +closepath +-37 -164 rmoveto +0 36 24 31 36 0 rrcurveto +24 0 18 -14 0 -20 rrcurveto +0 -34 -23 -34 -38 0 rrcurveto +-28 0 -13 11 0 24 rrcurveto +closepath +endchar } ND +/fiveeighths { +0 834 hsbw +-26 68 hstem +144 66 hstem +282 67 hstem +545 64 hstem +641 77 hstem +720 5 hstem +83 92 vstem +288 94 vstem +569 88 vstem +744 89 vstem +170 -30 rmoveto +656 755 rlineto +-85 0 rlineto +-656 -755 rlineto +85 0 rlineto +closepath +-87 500 rmoveto +0 -68 43 -53 88 0 rrcurveto +94 0 74 73 0 80 rrcurveto +0 64 -48 43 -68 0 rrcurveto +-12 0 -12 -2 -11 -2 rrcurveto +9 36 rlineto +141 0 rlineto +19 77 rlineto +-224 0 rlineto +-69 -194 rlineto +79 -5 rlineto +18 17 19 9 21 0 rrcurveto +29 0 15 -15 0 -29 rrcurveto +0 -46 -31 -35 -41 0 rrcurveto +-28 0 -13 14 0 29 rrcurveto +0 14 rlineto +-92 -7 rlineto +closepath +693 -294 rmoveto +38 23 19 27 0 30 rrcurveto +0 54 -49 39 -77 0 rrcurveto +-84 0 -54 -49 0 -54 rrcurveto +0 -24 10 -21 22 -16 rrcurveto +-51 -28 -25 -36 0 -42 rrcurveto +0 -60 51 -45 80 0 rrcurveto +92 0 65 59 0 68 rrcurveto +0 26 -13 25 -24 24 rrcurveto +closepath +-119 65 rmoveto +0 22 22 19 27 0 rrcurveto +25 0 13 -11 0 -20 rrcurveto +0 -22 -22 -19 -28 0 rrcurveto +-25 0 -12 10 0 21 rrcurveto +closepath +-37 -164 rmoveto +0 36 24 31 36 0 rrcurveto +24 0 18 -14 0 -20 rrcurveto +0 -34 -23 -34 -38 0 rrcurveto +-28 0 -13 11 0 24 rrcurveto +closepath +endchar } ND +/seveneighths { +0 834 hsbw +-26 68 hstem +144 66 hstem +282 443 hstem +56 85 vstem +569 88 vstem +744 89 vstem +141 -30 rmoveto +655 755 rlineto +-85 0 rlineto +-655 -755 rlineto +85 0 rlineto +closepath +-35 671 rmoveto +172 0 rlineto +-85 -90 -53 -95 -22 -101 rrcurveto +90 0 rlineto +28 110 86 141 79 52 rrcurveto +15 60 rlineto +-291 0 rlineto +-19 -77 rlineto +closepath +670 -465 rmoveto +38 23 19 27 0 30 rrcurveto +0 54 -49 39 -77 0 rrcurveto +-83 0 -55 -49 0 -54 rrcurveto +0 -24 10 -21 22 -16 rrcurveto +-50 -27 -25 -35 0 -44 rrcurveto +0 -58 46 -47 84 0 rrcurveto +92 0 65 59 0 68 rrcurveto +0 26 -13 25 -24 24 rrcurveto +closepath +-119 65 rmoveto +0 22 22 19 27 0 rrcurveto +25 0 13 -11 0 -20 rrcurveto +0 -20 -22 -21 -28 0 rrcurveto +-25 0 -12 10 0 21 rrcurveto +closepath +-37 -164 rmoveto +0 36 24 31 36 0 rrcurveto +24 0 18 -14 0 -21 rrcurveto +0 -32 -23 -35 -38 0 rrcurveto +-28 0 -13 11 0 24 rrcurveto +closepath +endchar } ND +/commaaccent { +0 333 hsbw +-143 90 hstem +54 151 vstem +54 -53 rmoveto +-18 -90 rlineto +60 0 rlineto +-5 -31 -22 -18 -39 -6 rrcurveto +-16 -76 rlineto +98 6 58 50 20 93 rrcurveto +15 72 rlineto +-151 0 rlineto +closepath +endchar } ND +/undercommaaccent { +0 333 hsbw +-208 60 hstem +-72 59 hstem +141 89 vstem +58 -13 rmoveto +-12 -59 rlineto +28 0 rlineto +44 0 23 -10 0 -20 rrcurveto +0 -30 -49 -16 -98 0 rrcurveto +-24 -60 rlineto +44 0 rlineto +134 0 82 51 0 64 rrcurveto +0 43 -31 38 -94 0 rrcurveto +-5 -1 rlineto +-42 0 rlineto +closepath +endchar } ND +/tonos { +0 333 hsbw +710 20 hstem +184 93 vstem +286 149 vstem +286 730 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/dieresistonos { +0 333 hsbw +584 146 hstem +-10 117 vstem +157 91 vstem +375 118 vstem +230 730 rmoveto +-73 -146 rlineto +91 0 rlineto +126 146 rlineto +-144 0 rlineto +closepath +-215 -26 rmoveto +-25 -120 rlineto +117 0 rlineto +26 120 rlineto +-118 0 rlineto +closepath +386 0 rmoveto +-26 -120 rlineto +118 0 rlineto +26 120 rlineto +-118 0 rlineto +closepath +endchar } ND +/Alphatonos { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +73 108 vstem +182 177 vstem +536 139 vstem +512 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-200 0 rlineto +158 288 rlineto +42 -288 rlineto +closepath +-312 439 rmoveto +-109 -126 rlineto +108 0 rlineto +178 126 rlineto +-177 0 rlineto +closepath +endchar } ND +/Epsilontonos { +0 854 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +56 108 vstem +165 177 vstem +378 531 vstem +229 0 rmoveto +559 0 rlineto +25 120 rlineto +-412 0 rlineto +40 194 rlineto +371 0 rlineto +25 120 rlineto +-370 0 rlineto +33 162 rlineto +384 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +-64 716 rmoveto +-109 -126 rlineto +108 0 rlineto +178 126 rlineto +-177 0 rlineto +closepath +endchar } ND +/Etatonos { +0 906 hsbw +0 439 hstem +696 20 hstem +56 108 vstem +229 147 vstem +378 147 vstem +653 147 vstem +803 147 vstem +720 320 rmoveto +-67 -320 rlineto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-58 -277 rlineto +-277 0 rlineto +57 277 rlineto +-147 0 rlineto +-149 -716 rlineto +147 0 rlineto +67 320 rlineto +277 0 rlineto +closepath +-555 396 rmoveto +-109 -126 rlineto +108 0 rlineto +178 126 rlineto +-177 0 rlineto +closepath +endchar } ND +/Iotatonos { +0 473 hsbw +0 20 hstem +696 20 hstem +56 108 vstem +229 147 vstem +378 147 vstem +229 0 rmoveto +147 0 rlineto +149 716 rlineto +-147 0 rlineto +-149 -716 rlineto +closepath +-64 716 rmoveto +-109 -126 rlineto +108 0 rlineto +178 126 rlineto +-177 0 rlineto +closepath +endchar } ND +/Omicrontonos { +0 844 hsbw +-12 122 hstem +605 123 hstem +152 146 vstem +702 147 vstem +152 281 rmoveto +0 -164 108 -129 186 0 rrcurveto +242 0 161 211 0 228 rrcurveto +0 178 -116 123 -180 0 rrcurveto +-249 0 -152 -241 0 -206 rrcurveto +closepath +146 3 rmoveto +0 169 107 152 136 0 rrcurveto +105 0 56 -80 0 -101 rrcurveto +0 -123 -96 -191 -145 0 rrcurveto +-98 0 -65 74 0 100 rrcurveto +closepath +-139 432 rmoveto +-109 -126 rlineto +108 0 rlineto +178 126 rlineto +-177 0 rlineto +closepath +endchar } ND +/Upsilontonos { +0 930 hsbw +0 20 hstem +696 20 hstem +64 108 vstem +173 177 vstem +518 147 vstem +877 171 vstem +665 0 rmoveto +55 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-5 -7 -5 -7 -4 -7 rrcurveto +-4 -7 -5 -5 -5 -7 rrcurveto +-36 -48 -28 -42 -18 -32 rrcurveto +-7 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-157 0 rlineto +198 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +-492 716 rmoveto +-109 -126 rlineto +108 0 rlineto +178 126 rlineto +-177 0 rlineto +closepath +endchar } ND +/Omegatonos { +0 847 hsbw +0 116 hstem +605 123 hstem +50 108 vstem +171 136 vstem +698 148 vstem +75 0 rmoveto +319 0 rlineto +22 101 rlineto +-73 36 -36 61 0 86 rrcurveto +0 161 87 160 144 0 rrcurveto +100 0 60 -70 0 -100 rrcurveto +0 -130 -68 -172 -141 -32 rrcurveto +-21 -101 rlineto +331 0 rlineto +25 116 rlineto +-149 0 rlineto +114 88 57 103 0 120 rrcurveto +0 182 -120 119 -173 0 rrcurveto +-220 0 -162 -194 0 -193 rrcurveto +0 -92 31 -75 62 -58 rrcurveto +-164 0 rlineto +-25 -116 rlineto +closepath +84 716 rmoveto +-109 -126 rlineto +108 0 rlineto +178 126 rlineto +-177 0 rlineto +closepath +endchar } ND +/iotadieresistonos { +0 278 hsbw +584 146 hstem +-16 118 vstem +151 91 vstem +370 117 vstem +224 730 rmoveto +-73 -146 rlineto +91 0 rlineto +126 146 rlineto +-144 0 rlineto +closepath +-215 -26 rmoveto +-25 -120 rlineto +118 0 rlineto +25 120 rlineto +-118 0 rlineto +closepath +386 0 rmoveto +-25 -120 rlineto +117 0 rlineto +26 120 rlineto +-118 0 rlineto +closepath +endchar } ND +/Alpha { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +-11 151 vstem +534 139 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +endchar } ND +/Beta { +0 722 hsbw +0 115 hstem +302 125 hstem +596 120 hstem +564 146 vstem +40 0 rmoveto +337 0 rlineto +182 0 132 85 0 146 rrcurveto +0 65 -44 55 -73 22 rrcurveto +93 29 43 60 0 80 rrcurveto +0 128 -101 46 -174 0 rrcurveto +-245 0 rlineto +-150 -716 rlineto +closepath +236 427 rmoveto +36 169 rlineto +114 0 rlineto +92 0 46 -7 0 -64 rrcurveto +0 -76 -70 -22 -105 0 rrcurveto +-113 0 rlineto +closepath +-65 -312 rmoveto +39 187 rlineto +176 0 rlineto +82 0 33 -34 0 -48 rrcurveto +0 -81 -68 -24 -119 0 rrcurveto +-143 0 rlineto +closepath +endchar } ND +/Delta { +0 671 hsbw +0 120 hstem +565 151 hstem +-39 685 vstem +646 0 rmoveto +-116 716 rlineto +-164 0 rlineto +-405 -716 rlineto +685 0 rlineto +closepath +-156 120 rmoveto +-312 0 rlineto +245 445 rlineto +67 -445 rlineto +closepath +endchar } ND +/Epsilon { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +190 531 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/Zeta { +0 611 hsbw +0 120 hstem +596 120 hstem +152 516 vstem +25 0 rmoveto +555 0 rlineto +25 120 rlineto +-375 0 rlineto +416 484 rlineto +22 112 rlineto +-516 0 rlineto +-25 -120 rlineto +333 0 rlineto +-412 -483 rlineto +-23 -113 rlineto +closepath +endchar } ND +/Eta { +0 722 hsbw +0 439 hstem +696 20 hstem +43 148 vstem +193 147 vstem +468 147 vstem +618 147 vstem +535 320 rmoveto +-67 -320 rlineto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-58 -277 rlineto +-277 0 rlineto +57 277 rlineto +-147 0 rlineto +-150 -716 rlineto +148 0 rlineto +67 320 rlineto +277 0 rlineto +closepath +endchar } ND +/Iota { +0 278 hsbw +0 20 hstem +696 20 hstem +35 147 vstem +185 147 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Kappa { +0 722 hsbw +0 20 hstem +412 304 hstem +40 148 vstem +189 147 vstem +549 167 vstem +40 0 rmoveto +148 0 rlineto +45 219 rlineto +140 122 rlineto +176 -341 rlineto +167 0 rlineto +-236 435 rlineto +321 281 rlineto +-197 0 rlineto +-331 -304 rlineto +63 304 rlineto +-147 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/Lambda { +0 667 hsbw +0 20 hstem +542 174 hstem +-39 146 vstem +495 147 vstem +356 716 rmoveto +-395 -716 rlineto +146 0 rlineto +297 542 rlineto +91 -542 rlineto +147 0 rlineto +-129 716 rlineto +-157 0 rlineto +closepath +endchar } ND +/Mu { +0 833 hsbw +0 214 hstem +598 118 hstem +41 132 314 139 594 132 vstem3 +453 0 rmoveto +282 594 rlineto +-141 -594 rlineto +135 0 rlineto +149 716 rlineto +-212 0 rlineto +-244 -502 rlineto +-22 502 rlineto +-210 0 rlineto +-149 -716 rlineto +132 0 rlineto +114 598 rlineto +26 -598 rlineto +140 0 rlineto +closepath +endchar } ND +/Nu { +0 722 hsbw +0 237 hstem +481 235 hstem +45 137 vstem +194 138 vstem +476 137 vstem +626 137 vstem +613 0 rmoveto +150 716 rlineto +-137 0 rlineto +-100 -479 rlineto +-194 479 rlineto +-138 0 rlineto +-149 -716 rlineto +137 0 rlineto +101 481 rlineto +193 -481 rlineto +137 0 rlineto +closepath +endchar } ND +/Xi { +0 657 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +145 496 vstem +193 716 rmoveto +-26 -120 rlineto +519 0 rlineto +26 120 rlineto +-519 0 rlineto +closepath +-48 -282 rmoveto +-27 -120 rlineto +497 0 rlineto +26 120 rlineto +-496 0 rlineto +closepath +-108 -314 rmoveto +-26 -120 rlineto +579 0 rlineto +26 120 rlineto +-579 0 rlineto +closepath +endchar } ND +/Omicron { +0 778 hsbw +-13 123 hstem +605 123 hstem +87 146 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +endchar } ND +/Pi { +0 718 hsbw +0 20 hstem +596 120 hstem +44 148 vstem +469 147 vstem +594 596 rmoveto +-125 -596 rlineto +147 0 rlineto +150 716 rlineto +-572 0 rlineto +-150 -716 rlineto +148 0 rlineto +125 596 rlineto +277 0 rlineto +closepath +endchar } ND +/Rho { +0 667 hsbw +0 20 hstem +273 119 hstem +598 118 hstem +41 147 vstem +555 147 vstem +188 0 rmoveto +57 273 rlineto +94 0 rlineto +252 0 111 94 0 169 rrcurveto +0 119 -86 61 -135 0 rrcurveto +-291 0 rlineto +-149 -716 rlineto +147 0 rlineto +closepath +82 392 rmoveto +43 206 rlineto +105 0 rlineto +91 0 46 -6 0 -68 rrcurveto +0 -107 -86 -25 -154 0 rrcurveto +-45 0 rlineto +closepath +endchar } ND +/Sigma { +0 590 hsbw +0 120 hstem +596 120 hstem +19 506 vstem +172 716 rmoveto +-28 -132 rlineto +154 -208 rlineto +-251 -244 rlineto +-28 -132 rlineto +506 0 rlineto +26 120 rlineto +-311 0 rlineto +245 239 rlineto +-175 237 rlineto +343 0 rlineto +26 120 rlineto +-507 0 rlineto +closepath +endchar } ND +/Tau { +0 611 hsbw +0 20 hstem +596 120 hstem +330 147 vstem +353 0 rmoveto +124 596 rlineto +207 0 rlineto +25 120 rlineto +-564 0 rlineto +-25 -120 rlineto +210 0 rlineto +-125 -596 rlineto +148 0 rlineto +closepath +endchar } ND +/Upsilon { +0 667 hsbw +0 20 hstem +696 20 hstem +254 147 vstem +614 171 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +endchar } ND +/Chi { +0 667 hsbw +0 20 hstem +696 20 hstem +108 154 vstem +466 166 vstem +160 0 rmoveto +99 111 rlineto +52 60 33 40 13 19 rrcurveto +9 -25 19 -41 28 -56 rrcurveto +53 -108 rlineto +166 0 rlineto +-176 339 rlineto +328 377 rlineto +-185 0 rlineto +-113 -128 rlineto +-28 -31 -33 -40 -39 -48 rrcurveto +-3 6 -2 4 -2 3 rrcurveto +-30 61 -15 33 -2 6 rrcurveto +-70 134 rlineto +-154 0 rlineto +178 -354 rlineto +-316 -362 rlineto +190 0 rlineto +closepath +endchar } ND +/Psi { +0 829 hsbw +0 325 hstem +326 390 hstem +113 145 vstem +303 144 vstem +454 145 vstem +738 146 vstem +168 716 rmoveto +-44 -208 rlineto +-8 -34 -3 -26 0 -19 rrcurveto +0 -130 77 -75 156 -18 rrcurveto +-43 -206 rlineto +144 0 rlineto +44 206 rlineto +176 0 125 74 43 208 rrcurveto +49 228 rlineto +-146 0 rlineto +-49 -228 rlineto +-28 -132 -48 -25 -97 -6 rrcurveto +83 391 rlineto +-145 0 rlineto +-82 -391 rlineto +-86 9 -28 51 0 48 rrcurveto +0 16 4 27 9 40 rrcurveto +42 200 rlineto +-145 0 rlineto +closepath +endchar } ND +/Omega { +0 781 hsbw +0 116 hstem +605 123 hstem +104 136 vstem +632 147 vstem +9 0 rmoveto +318 0 rlineto +22 101 rlineto +-73 36 -36 61 0 86 rrcurveto +0 161 88 160 144 0 rrcurveto +98 0 62 -70 0 -100 rrcurveto +0 -130 -68 -172 -141 -32 rrcurveto +-22 -101 rlineto +332 0 rlineto +24 116 rlineto +-149 0 rlineto +114 88 57 103 0 120 rrcurveto +0 182 -119 119 -174 0 rrcurveto +-231 0 -151 -186 0 -201 rrcurveto +0 -92 31 -75 63 -58 rrcurveto +-164 0 rlineto +-25 -116 rlineto +closepath +endchar } ND +/Iotadieresis { +0 278 hsbw +756 120 hstem +92 120 vstem +297 120 vstem +117 876 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/Upsilondieresis { +0 667 hsbw +756 120 hstem +286 120 vstem +491 120 vstem +311 876 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/alphatonos { +0 620 hsbw +-12 103 hstem +426 105 hstem +710 20 hstem +61 136 vstem +317 93 vstem +434 111 vstem +513 519 rmoveto +-37 -72 rlineto +-39 56 -52 28 -64 0 rrcurveto +-156 0 -104 -156 0 -173 rrcurveto +0 -143 75 -71 116 0 rrcurveto +61 0 54 25 47 51 rrcurveto +0 -23 2 -21 5 -20 rrcurveto +135 0 rlineto +-8 74 -3 60 0 48 rrcurveto +0 34 1 28 3 24 rrcurveto +113 251 rlineto +-149 0 rlineto +closepath +-316 -297 rmoveto +0 94 58 110 84 0 rrcurveto +54 0 41 -41 0 -77 rrcurveto +0 -119 -54 -98 -84 0 rrcurveto +-62 0 -37 41 0 90 rrcurveto +closepath +222 508 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/epsilontonos { +0 479 hsbw +-12 111 hstem +420 111 hstem +710 20 hstem +114 139 vstem +343 149 vstem +513 454 rmoveto +-47 51 -67 26 -86 0 rrcurveto +-127 0 -72 -65 0 -85 rrcurveto +0 -42 24 -36 48 -29 rrcurveto +-84 -24 -59 -54 0 -68 rrcurveto +0 -72 61 -68 124 0 rrcurveto +90 0 77 24 65 50 rrcurveto +-85 93 rlineto +-60 -38 -45 -18 -31 0 rrcurveto +-28 0 -27 13 0 27 rrcurveto +0 37 45 33 83 0 rrcurveto +29 0 rlineto +23 107 rlineto +-68 1 -43 23 0 36 rrcurveto +0 24 21 20 38 0 rrcurveto +35 0 33 -14 30 -28 rrcurveto +103 76 rlineto +closepath +-170 276 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/etatonos { +0 611 hsbw +-198 20 hstem +0 20 hstem +431 100 hstem +710 20 hstem +149 133 320 90 448 133 vstem3 +149 519 rmoveto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +25 131 55 87 82 0 rrcurveto +40 0 20 -20 0 -38 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-103 -492 rlineto +140 0 rlineto +102 491 rlineto +10 51 6 34 0 18 rrcurveto +0 80 -51 55 -86 0 rrcurveto +-64 0 -61 -27 -59 -53 rrcurveto +13 68 rlineto +-133 0 rlineto +closepath +273 211 rmoveto +-102 -146 rlineto +94 0 rlineto +158 146 rlineto +-150 0 rlineto +closepath +endchar } ND +/iotatonos { +0 278 hsbw +710 20 hstem +154 93 vstem +256 149 vstem +256 730 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/upsilondieresistonos { +0 591 hsbw +-12 104 hstem +499 20 hstem +584 146 hstem +74 135 vstem +291 91 vstem +510 117 vstem +141 519 rmoveto +-54 -262 rlineto +-4 -16 rlineto +-6 -28 -3 -27 0 -24 rrcurveto +0 -94 64 -80 150 0 rrcurveto +154 0 83 84 29 172 rrcurveto +1 6 1 5 1 2 rrcurveto +55 262 rlineto +-140 0 rlineto +-59 -282 rlineto +-27 -124 -47 -21 -48 0 rrcurveto +-51 0 -31 25 0 46 rrcurveto +0 12 2 18 5 24 rrcurveto +64 302 rlineto +-139 0 rlineto +closepath +223 211 rmoveto +-73 -146 rlineto +91 0 rlineto +126 146 rlineto +-144 0 rlineto +closepath +-215 -26 rmoveto +-25 -120 rlineto +118 0 rlineto +25 120 rlineto +-118 0 rlineto +closepath +386 0 rmoveto +-25 -120 rlineto +117 0 rlineto +26 120 rlineto +-118 0 rlineto +closepath +endchar } ND +/beta { +0 621 hsbw +-198 20 hstem +-12 103 hstem +345 106 hstem +617 111 hstem +-6 139 vstem +327 16 vstem +459 132 vstem +189 67 rmoveto +40 -53 57 -26 72 0 rrcurveto +134 0 99 104 0 127 rrcurveto +0 78 -37 56 -73 34 rrcurveto +78 29 55 65 0 79 rrcurveto +0 90 -73 78 -129 0 rrcurveto +-147 0 -90 -78 -46 -216 rrcurveto +-135 -632 rlineto +139 0 rlineto +56 265 rlineto +closepath +138 385 rmoveto +-24 -107 rlineto +16 0 rlineto +93 0 47 -39 0 -78 rrcurveto +0 -91 -65 -46 -58 0 rrcurveto +-60 0 -48 43 0 80 rrcurveto +0 21 3 27 7 33 rrcurveto +31 143 rlineto +21 105 34 74 88 0 rrcurveto +40 0 29 -28 0 -34 rrcurveto +0 -51 -41 -53 -92 0 rrcurveto +-5 1 rlineto +-16 0 rlineto +closepath +endchar } ND +/gamma { +0 556 hsbw +-198 20 hstem +499 20 hstem +139 121 vstem +469 152 vstem +302 0 rmoveto +319 519 rlineto +-152 0 rlineto +-129 -219 rlineto +-53 -96 rlineto +-3 -8 -3 -7 -4 -5 rrcurveto +-4 -4 -2 -5 -1 -5 rrcurveto +-2 16 -6 40 -11 66 rrcurveto +-36 227 rlineto +-138 0 rlineto +104 -519 rlineto +-42 -198 rlineto +121 0 rlineto +42 198 rlineto +closepath +endchar } ND +/zeta { +0 492 hsbw +-210 20 hstem +596 120 hstem +52 145 vstem +295 124 vstem +244 716 rmoveto +-25 -120 rlineto +134 0 rlineto +-187 -102 -114 -159 0 -145 rrcurveto +0 -101 59 -56 112 -36 rrcurveto +68 -22 4 -14 0 -16 rrcurveto +0 -24 -24 -13 -46 -2 rrcurveto +-58 -116 rlineto +28 0 rlineto +157 0 67 79 0 90 rrcurveto +0 65 -33 45 -87 35 rrcurveto +-79 32 -23 21 0 56 rrcurveto +0 113 95 137 292 159 rrcurveto +20 94 rlineto +-360 0 rlineto +closepath +endchar } ND +/eta { +0 611 hsbw +-198 20 hstem +0 20 hstem +431 100 hstem +149 133 vstem +448 142 vstem +149 519 rmoveto +-108 -519 rlineto +140 0 rlineto +45 213 rlineto +25 131 55 87 82 0 rrcurveto +40 0 20 -20 0 -38 rrcurveto +0 -4 -1 -9 -2 -13 rrcurveto +-4 -12 -3 -18 -3 -23 rrcurveto +-103 -492 rlineto +140 0 rlineto +102 491 rlineto +10 51 6 34 0 18 rrcurveto +0 80 -51 55 -86 0 rrcurveto +-64 0 -61 -27 -59 -53 rrcurveto +13 68 rlineto +-133 0 rlineto +closepath +endchar } ND +/theta { +0 558 hsbw +-12 114 299 118 614 114 hstem3 +73 137 vstem +443 137 vstem +73 236 rmoveto +0 -155 80 -93 119 0 rrcurveto +189 0 119 263 0 227 rrcurveto +0 170 -79 80 -120 0 rrcurveto +-186 0 -122 -262 0 -230 rrcurveto +closepath +170 181 rmoveto +32 131 44 66 56 0 rrcurveto +45 0 23 -34 0 -68 rrcurveto +0 -22 -3 -32 -6 -41 rrcurveto +-191 0 rlineto +closepath +-24 -119 rmoveto +191 0 rlineto +-30 -131 -45 -65 -58 0 rrcurveto +-44 0 -23 42 0 60 rrcurveto +0 25 3 31 6 38 rrcurveto +closepath +endchar } ND +/iota { +0 278 hsbw +0 20 hstem +499 20 hstem +40 140 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +endchar } ND +/kappa { +0 566 hsbw +0 20 hstem +349 170 hstem +41 140 vstem +379 154 vstem +151 519 rmoveto +-110 -519 rlineto +140 0 rlineto +34 164 rlineto +49 42 rlineto +115 -206 rlineto +154 0 rlineto +-176 288 rlineto +265 231 rlineto +-186 0 rlineto +-181 -170 rlineto +37 170 rlineto +-141 0 rlineto +closepath +endchar } ND +/lambda { +0 556 hsbw +0 20 hstem +348 368 hstem +-13 152 vstem +263 124 vstem +399 132 vstem +302 512 rmoveto +-315 -512 rlineto +152 0 rlineto +129 219 rlineto +28 46 23 43 19 40 rrcurveto +4 -38 6 -40 8 -44 rrcurveto +43 -226 rlineto +132 0 rlineto +-144 716 rlineto +-124 0 rlineto +39 -204 rlineto +closepath +endchar } ND +/mu { +0 603 hsbw +-198 20 hstem +-12 104 hstem +499 20 hstem +-4 140 vstem +148 140 vstem +383 125 vstem +148 519 rmoveto +-152 -717 rlineto +140 0 rlineto +54 253 rlineto +23 -45 33 -22 43 0 rrcurveto +36 0 23 13 46 47 rrcurveto +-11 -48 rlineto +125 0 rlineto +109 519 rlineto +-138 0 rlineto +-58 -272 rlineto +-27 -127 -42 -28 -49 0 rrcurveto +-44 0 -37 35 0 54 rrcurveto +0 21 4 27 8 34 rrcurveto +4 15 rlineto +50 241 rlineto +-140 0 rlineto +closepath +endchar } ND +/nu { +0 556 hsbw +0 170 hstem +499 20 hstem +179 120 vstem +467 151 vstem +299 0 rmoveto +319 519 rlineto +-151 0 rlineto +-129 -219 rlineto +-10 -15 -56 -103 -5 -12 rrcurveto +-2 20 -6 41 -10 61 rrcurveto +-37 227 rlineto +-137 0 rlineto +104 -519 rlineto +120 0 rlineto +closepath +endchar } ND +/xi { +0 450 hsbw +-210 123 hstem +378 126 hstem +607 121 hstem +55 138 vstem +275 132 vstem +519 728 rmoveto +-89 0 rlineto +-186 0 -84 -59 0 -105 rrcurveto +0 -62 32 -42 64 -22 rrcurveto +-104 -27 -97 -85 0 -124 rrcurveto +0 -78 24 -56 123 -58 rrcurveto +66 -31 7 -8 0 -24 rrcurveto +0 -22 -16 -12 -30 0 rrcurveto +-25 0 rlineto +-42 -123 rlineto +169 0 76 74 0 84 rrcurveto +0 61 -42 51 -83 41 rrcurveto +-69 34 -20 20 0 48 rrcurveto +0 86 84 89 164 0 rrcurveto +23 126 rlineto +-132 0 -33 10 0 39 rrcurveto +0 36 39 18 80 0 rrcurveto +35 0 rlineto +16 -2 16 -1 12 0 rrcurveto +22 124 rlineto +closepath +endchar } ND +/omicron { +0 611 hsbw +-12 108 hstem +425 106 hstem +61 140 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +endchar } ND +/rho { +0 605 hsbw +-198 20 hstem +-12 107 hstem +419 112 hstem +-14 139 vstem +461 135 vstem +-14 -198 rmoveto +139 0 rlineto +52 235 rlineto +44 -33 47 -16 49 0 rrcurveto +152 0 127 134 0 179 rrcurveto +0 132 -86 98 -148 0 rrcurveto +-166 0 -76 -114 -38 -181 rrcurveto +-96 -434 rlineto +closepath +232 393 rmoveto +0 114 52 110 90 0 rrcurveto +60 0 41 -48 0 -61 rrcurveto +0 -108 -69 -107 -84 0 rrcurveto +-48 0 -42 38 0 62 rrcurveto +closepath +endchar } ND +/sigma1 { +0 532 hsbw +-210 118 hstem +415 116 hstem +62 135 vstem +313 128 vstem +589 499 rmoveto +-50 21 -57 11 -64 0 rrcurveto +-207 0 -149 -139 0 -153 rrcurveto +0 -109 85 -81 116 -56 rrcurveto +41 -20 9 -9 0 -19 rrcurveto +0 -24 -23 -13 -45 0 rrcurveto +-26 0 -28 3 -32 5 rrcurveto +-52 -114 rlineto +40 -8 36 -4 32 0 rrcurveto +161 0 65 66 0 78 rrcurveto +0 58 -30 41 -102 65 rrcurveto +-88 56 -24 28 0 51 rrcurveto +0 89 90 93 123 0 rrcurveto +42 0 44 -9 44 -16 rrcurveto +49 109 rlineto +closepath +endchar } ND +/upsilon { +0 591 hsbw +-12 104 hstem +499 20 hstem +74 135 vstem +472 140 vstem +141 519 rmoveto +-54 -262 rlineto +-4 -16 rlineto +-6 -28 -3 -27 0 -24 rrcurveto +0 -94 64 -80 150 0 rrcurveto +154 0 83 84 29 172 rrcurveto +1 6 1 5 1 2 rrcurveto +55 262 rlineto +-140 0 rlineto +-59 -282 rlineto +-27 -124 -47 -21 -48 0 rrcurveto +-51 0 -31 25 0 46 rrcurveto +0 12 2 18 5 24 rrcurveto +64 302 rlineto +-139 0 rlineto +closepath +endchar } ND +/chi { +0 578 hsbw +-198 20 hstem +499 20 hstem +-80 165 vstem +98 142 vstem +337 141 vstem +307 282 rmoveto +-67 237 rlineto +-142 0 rlineto +107 -339 rlineto +-285 -378 rlineto +165 0 rlineto +186 255 rlineto +66 -255 rlineto +141 0 rlineto +-105 351 rlineto +271 366 rlineto +-171 0 rlineto +-166 -237 rlineto +closepath +endchar } ND +/psi { +0 773 hsbw +-198 297 hstem +100 419 hstem +70 149 246 123 401 139 vstem3 +657 136 vstem +142 519 rmoveto +-52 -248 rlineto +-2 -4 -1 -3 0 -4 rrcurveto +-8 -30 -4 -30 0 -31 rrcurveto +0 -104 68 -70 142 -7 rrcurveto +-39 -186 rlineto +138 0 rlineto +41 186 rlineto +208 15 62 58 40 184 rrcurveto +58 274 rlineto +-136 0 rlineto +-54 -245 rlineto +-35 -155 -47 -16 -72 -4 rrcurveto +91 420 rlineto +-139 0 rlineto +-92 -420 rlineto +-66 10 -24 20 0 59 rrcurveto +0 21 4 32 10 44 rrcurveto +52 234 rlineto +-143 0 rlineto +closepath +endchar } ND +/omega { +0 834 hsbw +-12 109 hstem +113 278 hstem +499 20 hstem +64 135 vstem +399 140 vstem +685 141 vstem +184 519 rmoveto +-64 -76 -56 -121 0 -106 rrcurveto +0 -135 71 -93 112 0 rrcurveto +78 0 56 41 34 84 rrcurveto +8 -84 51 -41 94 0 rrcurveto +156 0 102 151 0 220 rrcurveto +0 47 -6 53 -11 60 rrcurveto +-139 0 rlineto +10 -60 5 -51 0 -41 rrcurveto +0 -150 -52 -120 -74 0 rrcurveto +-30 0 -32 22 0 44 rrcurveto +0 15 4 30 10 45 rrcurveto +28 138 rlineto +-140 0 rlineto +-31 -144 rlineto +-22 -100 -34 -50 -45 0 rrcurveto +-40 0 -28 37 0 54 rrcurveto +0 80 41 111 83 140 rrcurveto +-139 0 rlineto +closepath +endchar } ND +/iotadieresis { +0 278 hsbw +597 120 hstem +60 120 vstem +265 120 vstem +84 717 rmoveto +-24 -120 rlineto +120 0 rlineto +25 120 rlineto +-121 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/upsilondieresis { +0 591 hsbw +-12 104 hstem +499 20 hstem +597 120 hstem +74 135 vstem +217 120 vstem +423 120 vstem +141 519 rmoveto +-54 -262 rlineto +-4 -16 rlineto +-6 -28 -3 -27 0 -24 rrcurveto +0 -94 64 -80 150 0 rrcurveto +154 0 83 84 29 172 rrcurveto +1 6 1 5 1 2 rrcurveto +55 262 rlineto +-140 0 rlineto +-59 -282 rlineto +-27 -124 -47 -21 -48 0 rrcurveto +-51 0 -31 25 0 46 rrcurveto +0 12 2 18 5 24 rrcurveto +64 302 rlineto +-139 0 rlineto +closepath +101 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/omicrontonos { +0 611 hsbw +710 20 hstem +323 94 vstem +425 150 vstem +425 730 rmoveto +-102 -146 rlineto +94 0 rlineto +158 146 rlineto +-150 0 rlineto +closepath +endchar } ND +/upsilontonos { +0 591 hsbw +-12 104 hstem +499 20 hstem +710 20 hstem +74 135 vstem +312 93 vstem +472 140 vstem +141 519 rmoveto +-54 -262 rlineto +-4 -16 rlineto +-6 -28 -3 -27 0 -24 rrcurveto +0 -94 64 -80 150 0 rrcurveto +154 0 83 84 29 172 rrcurveto +1 6 1 5 1 2 rrcurveto +55 262 rlineto +-140 0 rlineto +-59 -282 rlineto +-27 -124 -47 -21 -48 0 rrcurveto +-51 0 -31 25 0 46 rrcurveto +0 12 2 18 5 24 rrcurveto +64 302 rlineto +-139 0 rlineto +closepath +273 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/omegatonos { +0 834 hsbw +-12 109 hstem +113 278 hstem +499 20 hstem +710 20 hstem +64 135 vstem +403 94 vstem +505 150 vstem +685 141 vstem +184 519 rmoveto +-64 -76 -56 -121 0 -106 rrcurveto +0 -135 71 -93 112 0 rrcurveto +78 0 56 41 34 84 rrcurveto +8 -84 51 -41 94 0 rrcurveto +156 0 102 151 0 220 rrcurveto +0 47 -6 53 -11 60 rrcurveto +-139 0 rlineto +10 -60 5 -51 0 -41 rrcurveto +0 -150 -52 -120 -74 0 rrcurveto +-30 0 -32 22 0 44 rrcurveto +0 15 4 30 10 45 rrcurveto +28 138 rlineto +-140 0 rlineto +-31 -144 rlineto +-22 -100 -34 -50 -45 0 rrcurveto +-40 0 -28 37 0 54 rrcurveto +0 80 41 111 83 140 rrcurveto +-139 0 rlineto +closepath +321 211 rmoveto +-102 -146 rlineto +94 0 rlineto +158 146 rlineto +-150 0 rlineto +closepath +endchar } ND +/afii10023 { +0 667 hsbw +756 120 hstem +292 120 vstem +498 120 vstem +317 876 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-24 -120 rlineto +120 0 rlineto +25 120 rlineto +-121 0 rlineto +closepath +endchar } ND +/afii10051 { +0 886 hsbw +-6 126 hstem +350 131 hstem +592 124 hstem +339 145 vstem +731 143 vstem +154 716 rmoveto +-25 -124 rlineto +210 0 rlineto +-127 -592 rlineto +147 0 rlineto +63 292 rlineto +66 38 65 20 66 0 rrcurveto +62 0 50 -34 0 -61 rrcurveto +0 -80 -54 -55 -85 0 rrcurveto +-22 0 -25 3 -28 6 rrcurveto +-25 -120 rlineto +36 -10 37 -5 37 0 rrcurveto +152 0 120 108 0 151 rrcurveto +0 138 -104 90 -134 0 rrcurveto +-68 0 -61 -16 -55 -30 rrcurveto +32 157 rlineto +213 0 rlineto +26 124 rlineto +-569 0 rlineto +closepath +endchar } ND +/afii10052 { +0 614 hsbw +0 20 hstem +596 120 hstem +885 20 hstem +44 146 vstem +336 93 vstem +438 149 vstem +197 716 rmoveto +-153 -716 rlineto +146 0 rlineto +128 596 rlineto +380 0 rlineto +25 120 rlineto +-526 0 rlineto +closepath +241 189 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/afii10053 { +0 719 hsbw +-12 120 hstem +295 122 hstem +601 127 hstem +87 147 vstem +255 417 rmoveto +41 128 79 56 86 0 rrcurveto +78 0 45 -41 14 -81 rrcurveto +141 15 rlineto +-26 156 -91 78 -154 0 rrcurveto +-222 0 -159 -185 0 -249 rrcurveto +0 -190 102 -116 178 0 rrcurveto +173 0 122 116 38 130 rrcurveto +-146 23 rlineto +-34 -100 -59 -49 -83 0 rrcurveto +-83 0 -61 63 0 124 rrcurveto +226 0 rlineto +27 122 rlineto +-232 0 rlineto +closepath +endchar } ND +/afii10054 { +0 667 hsbw +-12 123 hstem +611 117 hstem +150 141 vstem +482 146 vstem +63 232 rmoveto +-1 -48 9 -42 18 -37 rrcurveto +40 -83 106 -34 110 0 rrcurveto +178 0 105 102 0 127 rrcurveto +0 114 -59 38 -148 60 rrcurveto +-82 33 -48 11 0 63 rrcurveto +0 42 31 33 82 0 rrcurveto +82 0 42 -37 7 -69 rrcurveto +141 7 rlineto +-10 130 -93 86 -168 0 rrcurveto +-166 0 -89 -89 0 -120 rrcurveto +0 -118 75 -40 129 -56 rrcurveto +86 -37 42 -9 0 -60 rrcurveto +0 -48 -40 -40 -96 0 rrcurveto +-100 0 -37 22 -5 106 rrcurveto +-141 -7 rlineto +closepath +endchar } ND +/afii10055 { +0 278 hsbw +0 20 hstem +696 20 hstem +35 147 vstem +185 147 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/afii10056 { +0 278 hsbw +756 120 hstem +92 120 vstem +297 120 vstem +117 876 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/afii10057 { +0 556 hsbw +-12 123 hstem +696 20 hstem +29 136 vstem +455 145 vstem +455 716 rmoveto +-90 -429 rlineto +-26 -127 6 -49 -101 0 rrcurveto +-54 0 -25 24 0 46 rrcurveto +0 36 rlineto +-136 -15 rlineto +0 -38 rlineto +0 -108 67 -68 138 0 rrcurveto +162 0 65 64 48 230 rrcurveto +91 434 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10058 { +0 1094 hsbw +-12 129 hstem +326 118 hstem +596 120 hstem +240 493 vstem +928 146 vstem +675 444 rmoveto +58 272 rlineto +-493 0 rlineto +-101 -482 rlineto +-2 -4 -1 -4 0 -4 rrcurveto +-14 -70 -26 -35 -39 0 rrcurveto +-12 0 -17 4 -22 10 rrcurveto +-27 -124 rlineto +32 -12 34 -7 37 0 rrcurveto +113 0 52 73 34 156 rrcurveto +82 379 rlineto +198 0 rlineto +-126 -596 rlineto +348 0 rlineto +196 0 95 101 0 142 rrcurveto +0 149 -113 52 -170 0 rrcurveto +-116 0 rlineto +closepath +-70 -327 rmoveto +46 209 rlineto +116 0 rlineto +94 0 67 -20 0 -76 rrcurveto +0 -84 -72 -29 -104 0 rrcurveto +-147 0 rlineto +closepath +endchar } ND +/afii10059 { +0 1042 hsbw +0 117 hstem +326 390 hstem +43 148 vstem +193 149 536 144 876 145 vstem3 +623 444 rmoveto +57 272 rlineto +-147 0 rlineto +-58 -272 rlineto +-192 0 rlineto +57 272 rlineto +-147 0 rlineto +-150 -716 rlineto +148 0 rlineto +67 326 rlineto +192 0 rlineto +-67 -326 rlineto +347 0 rlineto +197 0 94 101 0 146 rrcurveto +0 145 -110 52 -172 0 rrcurveto +-116 0 rlineto +closepath +-69 -327 rmoveto +44 209 rlineto +118 0 rlineto +97 0 63 -17 0 -78 rrcurveto +0 -87 -70 -27 -105 0 rrcurveto +-147 0 rlineto +closepath +endchar } ND +/afii10060 { +0 854 hsbw +0 475 hstem +592 124 hstem +207 146 vstem +678 155 vstem +145 716 rmoveto +-25 -124 rlineto +213 0 rlineto +-126 -592 rlineto +146 0 rlineto +68 320 rlineto +48 22 49 12 50 0 rrcurveto +73 0 37 -26 0 -53 rrcurveto +0 -21 -3 -24 -6 -27 rrcurveto +-44 -203 rlineto +146 0 rlineto +47 219 rlineto +10 44 5 33 0 21 rrcurveto +0 96 -68 62 -137 0 rrcurveto +-56 0 -60 -11 -66 -22 rrcurveto +33 150 rlineto +209 0 rlineto +24 124 rlineto +-567 0 rlineto +closepath +endchar } ND +/afii10061 { +0 622 hsbw +0 225 hstem +608 108 hstem +885 20 hstem +43 146 vstem +337 93 vstem +439 149 vstem +196 716 rmoveto +-153 -716 rlineto +146 0 rlineto +67 311 rlineto +42 -1 27 -14 13 -27 rrcurveto +10 -29 6 -16 1 -2 rrcurveto +61 -222 rlineto +151 0 rlineto +-67 225 rlineto +0 11 rlineto +-16 70 -33 43 -49 16 rrcurveto +54 13 38 35 77 144 rrcurveto +24 45 14 6 36 0 rrcurveto +24 0 rlineto +32 108 rlineto +-39 0 rlineto +-149 0 -21 -53 -78 -133 rrcurveto +-66 -112 -16 -6 -54 0 rrcurveto +64 304 rlineto +-146 0 rlineto +closepath +243 189 rmoveto +-102 -147 rlineto +93 0 rlineto +158 147 rlineto +-149 0 rlineto +closepath +endchar } ND +/afii10062 { +0 677 hsbw +-11 118 hstem +696 20 hstem +758 141 hstem +129 166 vstem +328 68 vstem +569 65 vstem +129 716 rmoveto +160 -509 rlineto +-63 -104 -38 4 -37 0 rrcurveto +-16 0 -19 2 -22 4 rrcurveto +-18 -113 rlineto +24 -7 31 -4 39 0 rrcurveto +70 0 42 22 74 102 rrcurveto +438 603 rlineto +-160 0 rlineto +-248 -365 rlineto +-91 365 rlineto +-166 0 rlineto +closepath +199 183 rmoveto +12 -94 53 -47 76 0 rrcurveto +73 0 65 51 27 90 rrcurveto +-65 0 rlineto +-26 -47 -32 -23 -38 0 rrcurveto +-39 0 -24 18 -14 52 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/afii10145 { +0 719 hsbw +-198 20 hstem +0 120 hstem +696 20 hstem +225 120 vstem +618 146 vstem +387 0 rmoveto +224 0 rlineto +153 716 rlineto +-146 0 rlineto +-128 -596 rlineto +-275 0 rlineto +127 596 rlineto +-146 0 rlineto +-153 -716 rlineto +224 0 rlineto +-42 -198 rlineto +120 0 rlineto +42 198 rlineto +closepath +endchar } ND +/afii10017 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +-11 151 vstem +534 139 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +endchar } ND +/afii10018 { +0 708 hsbw +0 117 hstem +326 118 hstem +596 120 hstem +540 147 vstem +320 596 rmoveto +362 0 rlineto +27 120 rlineto +-510 0 rlineto +-154 -716 rlineto +351 0 rlineto +190 0 101 101 0 140 rrcurveto +0 144 -106 59 -177 0 rrcurveto +-116 0 rlineto +32 152 rlineto +closepath +-102 -479 rmoveto +45 209 rlineto +116 0 rlineto +94 0 67 -20 0 -76 rrcurveto +0 -84 -71 -29 -104 0 rrcurveto +-147 0 rlineto +closepath +endchar } ND +/afii10019 { +0 722 hsbw +0 115 hstem +302 125 hstem +596 120 hstem +564 146 vstem +40 0 rmoveto +337 0 rlineto +182 0 132 85 0 146 rrcurveto +0 65 -44 55 -73 22 rrcurveto +93 29 43 60 0 80 rrcurveto +0 128 -101 46 -174 0 rrcurveto +-245 0 rlineto +-150 -716 rlineto +closepath +236 427 rmoveto +36 169 rlineto +114 0 rlineto +92 0 46 -7 0 -64 rrcurveto +0 -76 -70 -22 -105 0 rrcurveto +-113 0 rlineto +closepath +-65 -312 rmoveto +39 187 rlineto +176 0 rlineto +82 0 33 -34 0 -48 rrcurveto +0 -81 -68 -24 -119 0 rrcurveto +-143 0 rlineto +closepath +endchar } ND +/afii10020 { +0 614 hsbw +0 20 hstem +596 120 hstem +44 146 vstem +197 526 vstem +197 716 rmoveto +-153 -716 rlineto +146 0 rlineto +128 596 rlineto +380 0 rlineto +25 120 rlineto +-526 0 rlineto +closepath +endchar } ND +/afii10021 { +0 722 hsbw +-198 20 hstem +0 120 hstem +596 120 hstem +-75 119 vstem +58 153 vstem +505 120 vstem +255 716 rmoveto +-50 -260 -65 -198 -82 -138 rrcurveto +-64 0 rlineto +-69 -318 rlineto +119 0 rlineto +43 198 rlineto +461 0 rlineto +-43 -198 rlineto +120 0 rlineto +67 318 rlineto +-63 0 rlineto +127 596 rlineto +-501 0 rlineto +closepath +330 -120 rmoveto +-101 -476 rlineto +-273 0 rlineto +64 123 55 159 44 194 rrcurveto +211 0 rlineto +closepath +endchar } ND +/afii10022 { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +190 531 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/afii10024 { +0 927 hsbw +0 412 hstem +611 109 hstem +-15 177 vstem +362 145 vstem +513 147 vstem +716 151 vstem +513 716 rmoveto +-64 -304 rlineto +-10 0 rlineto +-43 0 -7 10 -31 125 rrcurveto +-27 110 -23 63 -109 0 rrcurveto +-46 0 rlineto +-22 -110 rlineto +37 0 rlineto +57 0 3 -18 10 -64 rrcurveto +16 -103 22 -42 38 -18 rrcurveto +-54 -11 -49 -35 -42 -59 rrcurveto +-184 -260 rlineto +177 0 rlineto +145 208 rlineto +8 11 rlineto +28 39 rlineto +24 32 28 19 32 2 rrcurveto +-65 -311 rlineto +145 0 rlineto +66 311 rlineto +38 0 27 -18 24 -90 rrcurveto +54 -203 rlineto +151 0 rlineto +-67 236 rlineto +-20 70 -31 43 -43 16 rrcurveto +48 13 44 44 40 78 rrcurveto +39 76 3 35 76 0 rrcurveto +8 0 12 -1 16 -2 rrcurveto +24 108 rlineto +-11 0 -9 2 -9 2 rrcurveto +-26 0 rlineto +-116 0 -45 -39 -65 -114 rrcurveto +-79 -138 -15 -16 -46 0 rrcurveto +65 303 rlineto +-147 0 rlineto +closepath +endchar } ND +/afii10025 { +0 643 hsbw +-12 120 hstem +311 116 hstem +605 123 hstem +454 150 vstem +277 521 rmoveto +17 56 41 28 65 0 rrcurveto +52 0 45 -30 0 -48 rrcurveto +0 -55 -50 -45 -72 0 rrcurveto +-16 0 -17 1 -18 4 rrcurveto +-27 -124 rlineto +12 2 11 1 11 0 rrcurveto +70 0 53 -36 0 -57 rrcurveto +0 -70 -65 -40 -81 0 rrcurveto +-74 0 -45 45 -10 56 rrcurveto +-142 -44 rlineto +26 -118 90 -59 156 0 rrcurveto +181 0 114 100 0 118 rrcurveto +0 69 -37 51 -70 34 rrcurveto +104 29 48 71 0 79 rrcurveto +0 113 -116 76 -133 0 rrcurveto +-114 0 -107 -50 -42 -125 rrcurveto +140 -32 rlineto +closepath +endchar } ND +/afii10026 { +0 719 hsbw +0 20 hstem +272 444 hstem +43 138 vstem +196 137 vstem +474 139 vstem +627 138 vstem +196 716 rmoveto +-153 -716 rlineto +138 0 rlineto +390 449 rlineto +-97 -449 rlineto +139 0 rlineto +152 716 rlineto +-138 0 rlineto +-388 -444 rlineto +94 444 rlineto +-137 0 rlineto +closepath +endchar } ND +/afii10027 { +0 719 hsbw +0 20 hstem +272 444 hstem +758 141 hstem +43 138 vstem +196 137 vstem +360 68 vstem +602 65 vstem +196 716 rmoveto +-153 -716 rlineto +138 0 rlineto +390 449 rlineto +-97 -449 rlineto +139 0 rlineto +152 716 rlineto +-138 0 rlineto +-388 -444 rlineto +94 444 rlineto +-137 0 rlineto +closepath +164 183 rmoveto +13 -94 52 -47 76 0 rrcurveto +74 0 64 51 28 90 rrcurveto +-65 0 rlineto +-26 -47 -32 -23 -38 0 rrcurveto +-39 0 -25 18 -14 52 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/afii10028 { +0 615 hsbw +0 225 hstem +608 108 hstem +43 146 vstem +196 146 vstem +416 151 vstem +196 716 rmoveto +-153 -716 rlineto +146 0 rlineto +67 311 rlineto +42 -1 27 -14 13 -27 rrcurveto +10 -29 6 -16 1 -2 rrcurveto +61 -222 rlineto +151 0 rlineto +-67 225 rlineto +0 11 rlineto +-16 70 -33 43 -49 16 rrcurveto +54 13 38 35 77 144 rrcurveto +24 45 14 6 36 0 rrcurveto +24 0 rlineto +32 108 rlineto +-39 0 rlineto +-149 0 -21 -53 -78 -133 rrcurveto +-66 -112 -16 -6 -54 0 rrcurveto +64 304 rlineto +-146 0 rlineto +closepath +endchar } ND +/afii10029 { +0 687 hsbw +-11 128 hstem +596 120 hstem +433 147 vstem +239 716 rmoveto +-102 -482 rlineto +-2 -4 -1 -4 0 -4 rrcurveto +-14 -70 -26 -35 -40 0 rrcurveto +-6 0 -15 2 -25 4 rrcurveto +-27 -123 rlineto +38 -7 33 -4 28 0 rrcurveto +130 0 45 112 25 116 rrcurveto +81 379 rlineto +199 0 rlineto +-127 -596 rlineto +147 0 rlineto +151 716 rlineto +-492 0 rlineto +closepath +endchar } ND +/afii10030 { +0 833 hsbw +0 214 hstem +598 118 hstem +41 132 314 139 594 132 vstem3 +453 0 rmoveto +282 594 rlineto +-141 -594 rlineto +135 0 rlineto +149 716 rlineto +-212 0 rlineto +-244 -502 rlineto +-22 502 rlineto +-210 0 rlineto +-149 -716 rlineto +132 0 rlineto +114 598 rlineto +26 -598 rlineto +140 0 rlineto +closepath +endchar } ND +/afii10031 { +0 722 hsbw +0 439 hstem +696 20 hstem +43 148 vstem +193 147 vstem +468 147 vstem +618 147 vstem +535 320 rmoveto +-67 -320 rlineto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-58 -277 rlineto +-277 0 rlineto +57 277 rlineto +-147 0 rlineto +-150 -716 rlineto +148 0 rlineto +67 320 rlineto +277 0 rlineto +closepath +endchar } ND +/afii10032 { +0 778 hsbw +-13 123 hstem +605 123 hstem +87 146 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +endchar } ND +/afii10033 { +0 719 hsbw +0 20 hstem +596 120 hstem +43 147 vstem +465 147 vstem +197 716 rmoveto +-154 -716 rlineto +147 0 rlineto +127 596 rlineto +275 0 rlineto +-127 -596 rlineto +147 0 rlineto +152 716 rlineto +-567 0 rlineto +closepath +endchar } ND +/afii10034 { +0 667 hsbw +0 20 hstem +273 119 hstem +598 118 hstem +41 147 vstem +555 147 vstem +188 0 rmoveto +57 273 rlineto +94 0 rlineto +252 0 111 94 0 169 rrcurveto +0 119 -86 61 -135 0 rrcurveto +-291 0 rlineto +-149 -716 rlineto +147 0 rlineto +closepath +82 392 rmoveto +43 206 rlineto +105 0 rlineto +91 0 46 -6 0 -68 rrcurveto +0 -107 -86 -25 -154 0 rrcurveto +-45 0 rlineto +closepath +endchar } ND +/afii10035 { +0 722 hsbw +-13 124 hstem +601 127 hstem +95 145 vstem +560 258 rmoveto +-32 -98 -68 -49 -76 0 rrcurveto +-83 0 -61 65 0 115 rrcurveto +0 137 87 173 143 0 rrcurveto +74 0 45 -35 15 -84 rrcurveto +142 14 rlineto +-18 144 -101 88 -154 0 rrcurveto +-220 0 -158 -206 0 -226 rrcurveto +0 -200 104 -109 175 0 rrcurveto +156 0 120 88 58 160 rrcurveto +-148 23 rlineto +closepath +endchar } ND +/afii10036 { +0 611 hsbw +0 20 hstem +596 120 hstem +330 147 vstem +353 0 rmoveto +124 596 rlineto +207 0 rlineto +25 120 rlineto +-564 0 rlineto +-25 -120 rlineto +210 0 rlineto +-125 -596 rlineto +148 0 rlineto +closepath +endchar } ND +/afii10037 { +0 677 hsbw +-11 118 hstem +696 20 hstem +129 166 vstem +634 160 vstem +129 716 rmoveto +160 -509 rlineto +-63 -104 -38 4 -37 0 rrcurveto +-16 0 -19 2 -22 4 rrcurveto +-18 -113 rlineto +24 -7 31 -4 39 0 rrcurveto +70 0 42 22 74 102 rrcurveto +438 603 rlineto +-160 0 rlineto +-248 -365 rlineto +-91 365 rlineto +-166 0 rlineto +closepath +endchar } ND +/afii10038 { +0 781 hsbw +-6 213 hstem +512 204 hstem +84 145 vstem +289 137 vstem +444 138 vstem +644 146 vstem +444 716 rmoveto +-18 -82 rlineto +-210 -22 -132 -143 0 -156 rrcurveto +0 -112 61 -96 164 -21 rrcurveto +-20 -90 rlineto +137 0 rlineto +19 90 rlineto +194 10 151 146 0 175 rrcurveto +0 125 -86 91 -141 0 rrcurveto +19 85 rlineto +-138 0 rlineto +closepath +29 -507 rmoveto +66 303 rlineto +70 -7 35 -37 0 -66 rrcurveto +0 -91 -82 -97 -89 -5 rrcurveto +closepath +-73 302 rmoveto +-66 -304 rlineto +-56 1 -49 39 0 68 rrcurveto +0 105 83 73 88 18 rrcurveto +closepath +endchar } ND +/afii10039 { +0 667 hsbw +0 20 hstem +696 20 hstem +108 154 vstem +466 166 vstem +160 0 rmoveto +99 111 rlineto +52 60 33 40 13 19 rrcurveto +9 -25 19 -41 28 -56 rrcurveto +53 -108 rlineto +166 0 rlineto +-176 339 rlineto +328 377 rlineto +-185 0 rlineto +-113 -128 rlineto +-28 -31 -33 -40 -39 -48 rrcurveto +-3 6 -2 4 -2 3 rrcurveto +-30 61 -15 33 -2 6 rrcurveto +-70 134 rlineto +-154 0 rlineto +178 -354 rlineto +-316 -362 rlineto +190 0 rlineto +closepath +endchar } ND +/afii10040 { +0 729 hsbw +-198 20 hstem +0 120 hstem +696 20 hstem +193 146 vstem +511 120 vstem +193 716 rmoveto +-153 -716 rlineto +514 0 rlineto +-43 -198 rlineto +120 0 rlineto +68 318 rlineto +-64 0 rlineto +127 596 rlineto +-145 0 rlineto +-129 -596 rlineto +-277 0 rlineto +128 596 rlineto +-146 0 rlineto +closepath +endchar } ND +/afii10041 { +0 708 hsbw +0 20 hstem +249 467 hstem +129 152 vstem +454 145 vstem +607 145 vstem +188 716 rmoveto +-44 -204 rlineto +-10 -43 -5 -37 0 -30 rrcurveto +0 -94 69 -59 136 0 rrcurveto +47 0 61 11 74 22 rrcurveto +-62 -282 rlineto +145 0 rlineto +153 716 rlineto +-145 0 rlineto +-66 -311 rlineto +-46 -24 -50 -11 -56 0 rrcurveto +-72 0 -36 35 0 48 rrcurveto +0 16 3 21 7 25 rrcurveto +0 11 rlineto +42 190 rlineto +-145 0 rlineto +closepath +endchar } ND +/afii10042 { +0 979 hsbw +0 120 hstem +696 20 hstem +196 148 538 143 877 144 vstem3 +196 716 rmoveto +-153 -716 rlineto +826 0 rlineto +152 716 rlineto +-144 0 rlineto +-127 -596 rlineto +-195 0 rlineto +126 596 rlineto +-146 0 rlineto +-127 -596 rlineto +-193 0 rlineto +127 596 rlineto +-146 0 rlineto +closepath +endchar } ND +/afii10043 { +0 989 hsbw +-198 20 hstem +0 120 hstem +696 20 hstem +196 146 vstem +535 146 vstem +769 120 vstem +895 120 rmoveto +126 596 rlineto +-144 0 rlineto +-127 -596 rlineto +-195 0 rlineto +126 596 rlineto +-146 0 rlineto +-127 -596 rlineto +-193 0 rlineto +127 596 rlineto +-146 0 rlineto +-153 -716 rlineto +769 0 rlineto +-43 -198 rlineto +120 0 rlineto +69 318 rlineto +-63 0 rlineto +closepath +endchar } ND +/afii10044 { +0 854 hsbw +0 117 hstem +326 118 hstem +596 120 hstem +131 361 vstem +687 146 vstem +131 716 rmoveto +-26 -120 rlineto +216 0 rlineto +-129 -596 rlineto +350 0 rlineto +185 0 106 90 0 154 rrcurveto +0 142 -109 58 -173 0 rrcurveto +-116 0 rlineto +57 272 rlineto +-361 0 rlineto +closepath +234 -599 rmoveto +45 209 rlineto +116 0 rlineto +96 0 65 -18 0 -78 rrcurveto +0 -55 -26 -58 -149 0 rrcurveto +-147 0 rlineto +closepath +endchar } ND +/afii10045 { +0 1000 hsbw +0 117 hstem +326 390 hstem +194 146 vstem +535 147 vstem +737 147 vstem +891 145 vstem +891 716 rmoveto +-154 -716 rlineto +147 0 rlineto +152 716 rlineto +-145 0 rlineto +closepath +-697 0 rmoveto +-154 -716 rlineto +351 0 rlineto +182 0 109 92 0 148 rrcurveto +0 150 -107 54 -176 0 rrcurveto +-116 0 rlineto +57 272 rlineto +-146 0 rlineto +closepath +19 -599 rmoveto +45 209 rlineto +117 0 rlineto +94 0 66 -19 0 -77 rrcurveto +0 -55 -26 -58 -149 0 rrcurveto +-147 0 rlineto +closepath +endchar } ND +/afii10046 { +0 708 hsbw +0 117 hstem +326 390 hstem +194 146 vstem +535 147 vstem +194 716 rmoveto +-154 -716 rlineto +351 0 rlineto +184 0 107 93 0 147 rrcurveto +0 150 -107 54 -176 0 rrcurveto +-116 0 rlineto +57 272 rlineto +-146 0 rlineto +closepath +19 -599 rmoveto +45 209 rlineto +117 0 rlineto +94 0 66 -19 0 -77 rrcurveto +0 -55 -26 -58 -149 0 rrcurveto +-147 0 rlineto +closepath +endchar } ND +/afii10047 { +0 719 hsbw +-12 123 299 118 605 123 hstem3 +577 148 vstem +353 417 rmoveto +-21 -119 rlineto +227 0 rlineto +-40 -127 -86 -60 -81 0 rrcurveto +-62 0 -65 31 -13 111 rrcurveto +-139 -47 rlineto +30 -146 88 -72 144 0 rrcurveto +241 0 149 194 0 234 rrcurveto +0 204 -118 108 -181 0 rrcurveto +-152 0 -124 -93 -25 -116 rrcurveto +142 -31 rlineto +17 64 56 50 84 0 rrcurveto +81 0 72 -57 0 -128 rrcurveto +-224 0 rlineto +closepath +endchar } ND +/afii10048 { +0 1042 hsbw +-12 123 hstem +296 123 hstem +604 124 hstem +43 145 vstem +195 146 vstem +367 150 vstem +900 145 vstem +195 716 rmoveto +-152 -716 rlineto +145 0 rlineto +63 296 rlineto +116 0 rlineto +0 -19 rlineto +0 -147 100 -142 202 0 rrcurveto +249 0 127 203 0 230 rrcurveto +0 197 -121 110 -172 0 rrcurveto +-183 0 -140 -121 -36 -188 rrcurveto +-115 0 rlineto +63 297 rlineto +-146 0 rlineto +closepath +322 -425 rmoveto +0 168 98 145 127 0 rrcurveto +85 0 73 -61 0 -126 rrcurveto +0 -179 -90 -127 -130 0 rrcurveto +-98 0 -65 73 0 107 rrcurveto +closepath +endchar } ND +/afii10049 { +0 729 hsbw +0 413 hstem +596 120 hstem +138 147 vstem +476 145 vstem +774 716 rmoveto +-359 0 rlineto +-182 0 -95 -105 0 -122 rrcurveto +0 -84 46 -73 99 -17 rrcurveto +-30 -9 -34 -27 -40 -46 rrcurveto +-200 -233 rlineto +183 0 rlineto +178 207 rlineto +64 73 33 18 86 0 rrcurveto +17 0 rlineto +-64 -298 rlineto +145 0 rlineto +153 716 rlineto +closepath +-172 -120 rmoveto +-39 -183 rlineto +-146 0 rlineto +-112 0 -20 39 0 46 rrcurveto +0 68 40 30 162 0 rrcurveto +115 0 rlineto +closepath +endchar } ND +/afii10065 { +0 556 hsbw +-12 105 hstem +431 100 hstem +45 132 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +endchar } ND +/afii10066 { +0 619 hsbw +-12 109 hstem +415 104 hstem +64 143 vstem +463 139 vstem +559 748 rmoveto +-3 -32 -5 -2 -65 -1 rrcurveto +-320 -9 -102 -256 0 -226 rrcurveto +0 -135 93 -99 150 0 rrcurveto +189 0 106 152 0 151 rrcurveto +0 138 -85 90 -125 0 rrcurveto +-48 0 -47 -17 -46 -32 rrcurveto +45 102 50 27 131 2 rrcurveto +129 1 44 28 5 118 rrcurveto +-96 0 rlineto +closepath +-352 -530 rmoveto +0 98 60 99 90 0 rrcurveto +66 0 40 -47 0 -68 rrcurveto +0 -103 -65 -100 -84 0 rrcurveto +-55 0 -52 38 0 83 rrcurveto +closepath +endchar } ND +/afii10067 { +0 604 hsbw +-12 102 hstem +218 83 hstem +429 101 hstem +63 132 vstem +441 126 vstem +451 261 rmoveto +77 24 39 42 0 66 rrcurveto +0 72 -50 65 -141 0 rrcurveto +-204 0 -109 -140 0 -176 rrcurveto +0 -142 86 -84 156 0 rrcurveto +166 0 77 73 0 86 rrcurveto +0 56 -32 38 -65 20 rrcurveto +closepath +-249 40 rmoveto +17 85 53 43 90 0 rrcurveto +53 0 26 -18 0 -36 rrcurveto +0 -50 -28 -24 -104 0 rrcurveto +-107 0 rlineto +closepath +-7 -83 rmoveto +132 0 rlineto +44 0 43 -27 0 -42 rrcurveto +0 -39 -31 -20 -61 0 rrcurveto +-98 0 -28 45 -1 83 rrcurveto +closepath +endchar } ND +/afii10068 { +0 534 hsbw +-12 99 hstem +430 100 hstem +32 130 vstem +389 126 vstem +223 372 rmoveto +12 38 31 20 50 0 rrcurveto +49 0 24 -14 0 -29 rrcurveto +0 -72 -53 15 -94 -23 rrcurveto +-134 -33 -76 -26 0 -103 rrcurveto +0 -82 66 -75 144 0 rrcurveto +148 0 79 48 28 106 rrcurveto +-132 21 rlineto +-15 -51 -38 -25 -62 0 rrcurveto +-54 0 -34 24 0 32 rrcurveto +0 56 50 -2 83 19 rrcurveto +135 31 85 21 0 115 rrcurveto +0 80 -61 67 -154 0 rrcurveto +-105 0 -67 -46 -28 -91 rrcurveto +123 -21 rlineto +closepath +endchar } ND +/afii10069 { +0 618 hsbw +-12 109 hstem +427 103 hstem +646 102 hstem +60 140 vstem +500 125 vstem +279 646 rmoveto +66 0 rlineto +117 0 38 -29 0 -94 rrcurveto +0 -46 rlineto +-42 34 -48 19 -54 0 rrcurveto +-170 0 -126 -146 0 -173 rrcurveto +0 -144 99 -79 139 0 rrcurveto +229 0 98 211 0 283 rrcurveto +0 185 -54 81 -222 0 rrcurveto +-45 0 rlineto +-25 -102 rlineto +closepath +97 -219 rmoveto +58 0 40 -34 0 -58 rrcurveto +0 -104 -71 -134 -102 0 rrcurveto +-59 0 -42 39 0 71 rrcurveto +0 101 68 119 108 0 rrcurveto +closepath +endchar } ND +/afii10070 { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +endchar } ND +/afii10072 { +0 736 hsbw +0 298 hstem +441 78 hstem +-25 152 vstem +213 358 vstem +377 519 rmoveto +-46 -221 rlineto +-35 2 -17 9 -12 78 rrcurveto +-19 123 -46 9 -48 0 rrcurveto +-48 0 rlineto +-16 -78 rlineto +27 0 rlineto +33 0 6 -7 7 -64 rrcurveto +6 -55 8 -16 36 -36 rrcurveto +-43 -3 -23 -18 -46 -65 rrcurveto +-126 -177 rlineto +152 0 rlineto +118 174 rlineto +29 42 10 7 31 0 rrcurveto +-48 -223 rlineto +137 0 rlineto +48 223 rlineto +42 0 13 -12 16 -58 rrcurveto +42 -153 rlineto +131 0 rlineto +-49 174 rlineto +-14 50 -26 30 -36 9 rrcurveto +54 14 29 26 32 68 rrcurveto +29 62 6 8 31 0 rrcurveto +19 0 rlineto +17 78 rlineto +-60 0 rlineto +-80 0 -24 -23 -46 -97 rrcurveto +-39 -82 -25 -19 -45 0 rrcurveto +47 221 rlineto +-139 0 rlineto +closepath +endchar } ND +/afii10073 { +0 510 hsbw +-12 87 217 84 443 87 hstem3 +362 127 vstem +204 379 rmoveto +22 39 30 20 36 0 rrcurveto +40 0 30 -27 0 -36 rrcurveto +0 -60 -48 -14 -75 0 rrcurveto +-11 -85 rlineto +70 0 30 -18 0 -48 rrcurveto +0 -43 -35 -32 -49 0 rrcurveto +-50 0 -33 23 -16 48 rrcurveto +-131 -13 rlineto +24 -97 73 -48 123 0 rrcurveto +164 0 72 78 0 82 rrcurveto +0 54 -40 50 -53 12 rrcurveto +57 12 55 48 0 68 rrcurveto +0 80 -61 58 -124 0 rrcurveto +-108 0 -72 -44 -36 -87 rrcurveto +116 -20 rlineto +closepath +endchar } ND +/afii10074 { +0 611 hsbw +-12 100 hstem +499 20 hstem +70 142 vstem +380 131 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +endchar } ND +/afii10075 { +0 611 hsbw +-12 100 hstem +499 20 hstem +585 142 hstem +70 142 vstem +249 68 vstem +491 64 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +102 208 rmoveto +13 -95 52 -47 76 0 rrcurveto +73 0 65 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/afii10076 { +0 507 hsbw +0 20 hstem +222 76 hstem +423 96 hstem +37 136 vstem +343 132 vstem +147 519 rmoveto +-110 -519 rlineto +136 0 rlineto +49 222 rlineto +49 0 13 -8 18 -61 rrcurveto +41 -153 rlineto +132 0 rlineto +-49 174 rlineto +-15 52 -24 30 -34 7 rrcurveto +37 9 24 8 59 99 rrcurveto +22 37 6 7 30 0 rrcurveto +17 0 rlineto +19 96 rlineto +-36 0 rlineto +-98 0 -19 -14 -74 -130 rrcurveto +-38 -67 -12 -10 -52 0 rrcurveto +47 221 rlineto +-138 0 rlineto +closepath +endchar } ND +/afii10077 { +0 622 hsbw +-12 122 hstem +409 110 hstem +384 138 vstem +190 519 rmoveto +-61 -290 rlineto +-20 -96 -14 -23 -46 0 rrcurveto +-16 0 -17 2 -18 5 rrcurveto +-22 -117 rlineto +36 -8 29 -4 24 0 rrcurveto +97 0 52 42 23 106 rrcurveto +57 273 rlineto +177 0 rlineto +-87 -409 rlineto +138 0 rlineto +111 519 rlineto +-443 0 rlineto +closepath +endchar } ND +/afii10078 { +0 740 hsbw +0 160 hstem +345 174 hstem +39 117 280 116 520 117 vstem3 +149 519 rmoveto +-110 -519 rlineto +117 0 rlineto +74 345 rlineto +49 -345 rlineto +117 0 rlineto +196 339 rlineto +-72 -339 rlineto +117 0 rlineto +111 519 rlineto +-166 0 rlineto +-208 -359 rlineto +-54 359 rlineto +-171 0 rlineto +closepath +endchar } ND +/afii10079 { +0 604 hsbw +0 327 hstem +499 20 hstem +35 138 vstem +367 138 vstem +146 519 rmoveto +-111 -519 rlineto +138 0 rlineto +47 218 rlineto +193 0 rlineto +-46 -218 rlineto +138 0 rlineto +111 519 rlineto +-139 0 rlineto +-41 -192 rlineto +-193 0 rlineto +41 192 rlineto +-138 0 rlineto +closepath +endchar } ND +/afii10080 { +0 611 hsbw +-12 108 hstem +425 106 hstem +61 140 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +endchar } ND +/afii10081 { +0 611 hsbw +0 20 hstem +409 110 hstem +39 138 vstem +370 139 vstem +149 519 rmoveto +-110 -519 rlineto +138 0 rlineto +86 409 rlineto +193 0 rlineto +-86 -409 rlineto +139 0 rlineto +110 519 rlineto +-470 0 rlineto +closepath +endchar } ND +/afii10082 { +0 611 hsbw +-198 20 hstem +-12 106 hstem +431 100 hstem +-5 140 vstem +144 133 vstem +469 136 vstem +144 519 rmoveto +-149 -717 rlineto +140 0 rlineto +56 269 rlineto +35 -56 52 -27 69 0 rrcurveto +151 0 107 154 0 165 rrcurveto +0 148 -72 76 -108 0 rrcurveto +-58 0 -45 -20 -56 -46 rrcurveto +11 54 rlineto +-133 0 rlineto +closepath +85 -298 rmoveto +0 78 49 132 93 0 rrcurveto +57 0 41 -43 0 -77 rrcurveto +0 -86 -54 -131 -87 0 rrcurveto +-54 0 -45 47 0 80 rrcurveto +closepath +endchar } ND +/afii10083 { +0 556 hsbw +-12 110 hstem +427 104 hstem +60 139 vstem +392 195 rmoveto +-24 -66 -45 -31 -45 0 rrcurveto +-46 0 -33 33 0 62 rrcurveto +0 92 48 142 101 0 rrcurveto +46 0 30 -27 7 -57 rrcurveto +133 14 rlineto +-8 104 -78 70 -122 0 rrcurveto +-168 0 -128 -156 0 -166 rrcurveto +0 -138 83 -83 132 0 rrcurveto +116 0 91 65 46 120 rrcurveto +-136 22 rlineto +closepath +endchar } ND +/afii10084 { +0 889 hsbw +0 20 hstem +431 100 hstem +144 132 vstem +342 140 vstem +727 142 vstem +144 519 rmoveto +-108 -519 rlineto +140 0 rlineto +50 238 rlineto +24 128 35 65 81 0 rrcurveto +33 0 19 -21 0 -26 rrcurveto +0 -11 -4 -24 -7 -36 rrcurveto +-65 -313 rlineto +140 0 rlineto +49 235 rlineto +24 116 39 80 81 0 rrcurveto +34 0 18 -18 0 -29 rrcurveto +0 -6 -4 -22 -8 -39 rrcurveto +-67 -317 rlineto +141 0 rlineto +66 317 rlineto +9 44 5 31 0 18 rrcurveto +0 72 -50 49 -82 0 rrcurveto +-72 0 -73 -40 -36 -52 rrcurveto +-12 57 -42 35 -77 0 rrcurveto +-57 0 -54 -25 -51 -50 rrcurveto +13 63 rlineto +-132 0 rlineto +closepath +endchar } ND +/afii10085 { +0 556 hsbw +-210 112 hstem +499 20 hstem +83 140 vstem +472 149 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +endchar } ND +/afii10086 { +0 885 hsbw +-203 20 hstem +-12 105 hstem +423 107 hstem +708 20 hstem +62 144 409 121 734 142 vstem3 +640 728 rmoveto +-138 0 rlineto +-56 -267 rlineto +-36 46 -44 23 -53 0 rrcurveto +-136 0 -114 -152 0 -173 rrcurveto +0 -134 72 -83 99 0 rrcurveto +38 0 40 15 42 30 rrcurveto +-53 -236 rlineto +137 0 rlineto +55 262 rlineto +40 -48 43 -23 47 0 rrcurveto +140 0 113 157 0 168 rrcurveto +0 133 -73 84 -97 0 rrcurveto +-50 0 -40 -17 -32 -34 rrcurveto +56 249 rlineto +closepath +-434 -510 rmoveto +0 97 64 108 62 0 rrcurveto +38 0 39 -41 0 -82 rrcurveto +0 -112 -61 -95 -62 0 rrcurveto +-50 0 -30 54 0 71 rrcurveto +closepath +325 -4 rmoveto +0 102 66 107 60 0 rrcurveto +41 0 36 -43 0 -80 rrcurveto +0 -112 -59 -95 -64 0 rrcurveto +-50 0 -30 57 0 64 rrcurveto +closepath +endchar } ND +/afii10087 { +0 556 hsbw +0 20 hstem +499 20 hstem +86 149 vstem +354 148 vstem +279 146 rmoveto +75 -146 rlineto +148 0 rlineto +-130 250 rlineto +240 269 rlineto +-170 0 rlineto +-131 -148 rlineto +-76 148 rlineto +-149 0 rlineto +132 -253 rlineto +-240 -266 rlineto +172 0 rlineto +129 146 rlineto +closepath +endchar } ND +/afii10088 { +0 646 hsbw +-12 102 hstem +499 20 hstem +66 142 vstem +456 113 vstem +146 519 rmoveto +-69 -325 rlineto +-8 -32 -3 -25 0 -16 rrcurveto +0 -74 44 -59 95 0 rrcurveto +60 0 61 26 64 54 rrcurveto +7 -45 35 -23 63 0 rrcurveto +-39 -161 rlineto +113 0 rlineto +55 255 rlineto +-28 0 rlineto +-56 0 -7 7 0 23 rrcurveto +0 7 2 14 5 22 rrcurveto +74 352 rlineto +-138 0 rlineto +-55 -263 rlineto +-22 -98 -64 -68 -66 0 rrcurveto +-42 0 -19 17 0 38 rrcurveto +0 11 2 18 6 26 rrcurveto +68 319 rlineto +-138 0 rlineto +closepath +endchar } ND +/afii10089 { +0 583 hsbw +0 281 hstem +499 20 hstem +99 140 vstem +457 137 vstem +132 519 rmoveto +-21 -104 rlineto +-2 -10 rlineto +-7 -29 -3 -26 0 -24 rrcurveto +0 -84 60 -56 95 0 rrcurveto +46 0 46 7 44 14 rrcurveto +-45 -207 rlineto +139 0 rlineto +110 519 rlineto +-137 0 rlineto +-47 -221 rlineto +-27 -12 -27 -5 -27 0 rrcurveto +-60 0 -30 21 0 44 rrcurveto +0 12 3 23 8 34 rrcurveto +22 104 rlineto +-140 0 rlineto +closepath +endchar } ND +/afii10090 { +0 889 hsbw +-12 102 hstem +499 20 hstem +70 140 vstem +457 139 vstem +662 129 vstem +151 519 rmoveto +-72 -340 rlineto +-6 -26 -3 -22 0 -18 rrcurveto +0 -82 51 -43 80 0 rrcurveto +66 0 61 30 54 59 rrcurveto +9 -48 48 -41 64 0 rrcurveto +60 0 58 25 55 52 rrcurveto +-14 -65 rlineto +129 0 rlineto +110 519 rlineto +-139 0 rlineto +-60 -284 rlineto +-22 -100 -61 -45 -50 0 rrcurveto +-31 0 -21 21 0 27 rrcurveto +0 7 2 15 5 23 rrcurveto +72 336 rlineto +-139 0 rlineto +-58 -267 rlineto +-26 -122 -64 -40 -49 0 rrcurveto +-34 0 -16 22 0 20 rrcurveto +0 8 2 16 5 23 rrcurveto +73 340 rlineto +-139 0 rlineto +closepath +endchar } ND +/afii10091 { +0 935 hsbw +-12 102 hstem +499 20 hstem +70 140 vstem +457 139 vstem +744 113 vstem +382 77 rmoveto +9 -48 48 -41 63 0 rrcurveto +62 0 58 26 54 51 rrcurveto +26 -52 19 -13 62 0 rrcurveto +-39 -159 rlineto +113 0 rlineto +55 256 rlineto +-86 0 -5 0 0 27 rrcurveto +0 8 2 14 4 21 rrcurveto +74 352 rlineto +-139 0 rlineto +-60 -284 rlineto +-22 -100 -61 -45 -50 0 rrcurveto +-31 0 -21 21 0 27 rrcurveto +0 7 2 15 5 23 rrcurveto +72 336 rlineto +-139 0 rlineto +-58 -267 rlineto +-26 -122 -64 -40 -49 0 rrcurveto +-34 0 -16 22 0 20 rrcurveto +0 8 2 16 5 23 rrcurveto +73 340 rlineto +-139 0 rlineto +-72 -340 rlineto +-6 -26 -3 -22 0 -18 rrcurveto +0 -82 51 -43 80 0 rrcurveto +66 0 61 30 54 59 rrcurveto +closepath +endchar } ND +/afii10092 { +0 707 hsbw +0 88 219 81 431 88 hstem3 +88 306 vstem +537 141 vstem +88 519 rmoveto +-20 -92 rlineto +166 0 rlineto +-90 -427 rlineto +325 0 rlineto +133 0 76 65 0 110 rrcurveto +0 85 -57 44 -114 0 rrcurveto +-160 0 rlineto +47 215 rlineto +-306 0 rlineto +closepath +213 -431 rmoveto +28 131 rlineto +75 0 rlineto +104 0 29 -16 0 -44 rrcurveto +0 -48 -32 -23 -105 0 rrcurveto +-99 0 rlineto +closepath +endchar } ND +/afii10093 { +0 854 hsbw +0 88 hstem +219 300 hstem +151 139 vstem +434 141 vstem +618 139 vstem +729 519 rmoveto +-111 -519 rlineto +139 0 rlineto +111 519 rlineto +-139 0 rlineto +closepath +-578 0 rmoveto +-111 -519 rlineto +326 0 rlineto +136 0 73 71 0 104 rrcurveto +0 85 -57 44 -114 0 rrcurveto +-160 0 rlineto +46 215 rlineto +-139 0 rlineto +closepath +47 -431 rmoveto +28 131 rlineto +75 0 rlineto +104 0 29 -16 0 -44 rrcurveto +0 -48 -33 -23 -104 0 rrcurveto +-99 0 rlineto +closepath +endchar } ND +/afii10094 { +0 594 hsbw +0 88 hstem +219 300 hstem +146 139 vstem +428 142 vstem +146 519 rmoveto +-111 -519 rlineto +325 0 rlineto +137 0 73 71 0 104 rrcurveto +0 85 -58 44 -113 0 rrcurveto +-160 0 rlineto +46 215 rlineto +-139 0 rlineto +closepath +46 -431 rmoveto +28 131 rlineto +75 0 rlineto +105 0 28 -16 0 -44 rrcurveto +0 -48 -32 -23 -104 0 rrcurveto +-100 0 rlineto +closepath +endchar } ND +/afii10095 { +0 552 hsbw +-12 105 hstem +214 85 hstem +422 108 hstem +403 137 vstem +254 299 rmoveto +-11 -85 rlineto +142 0 rlineto +-31 -82 -44 -39 -57 0 rrcurveto +-51 0 -28 27 -5 55 rrcurveto +-132 -12 rlineto +12 -112 86 -63 108 0 rrcurveto +165 0 132 157 0 161 rrcurveto +0 138 -82 86 -132 0 rrcurveto +-113 0 -79 -50 -46 -98 rrcurveto +138 -23 rlineto +28 42 32 21 38 0 rrcurveto +52 0 27 -34 0 -70 rrcurveto +0 -19 rlineto +-149 0 rlineto +closepath +endchar } ND +/afii10096 { +0 865 hsbw +-12 108 hstem +206 110 hstem +423 107 hstem +40 137 vstem +351 123 vstem +706 144 vstem +150 519 rmoveto +-110 -519 rlineto +137 0 rlineto +45 206 rlineto +112 0 rlineto +4 -134 83 -84 130 0 rrcurveto +178 0 121 154 0 172 rrcurveto +0 142 -96 74 -133 0 rrcurveto +-139 0 -99 -81 -32 -133 rrcurveto +-106 0 rlineto +43 203 rlineto +-138 0 rlineto +closepath +324 -319 rmoveto +0 118 59 105 84 0 rrcurveto +58 0 31 -33 0 -66 rrcurveto +0 -103 -51 -125 -94 0 rrcurveto +-55 0 -32 44 0 60 rrcurveto +closepath +endchar } ND +/afii10097 { +0 589 hsbw +0 288 hstem +431 88 hstem +78 140 vstem +342 139 vstem +599 519 rmoveto +-283 0 rlineto +-195 0 -43 -90 0 -88 rrcurveto +0 -74 55 -45 39 -5 rrcurveto +-29 -16 -25 -21 -21 -28 rrcurveto +-117 -152 rlineto +169 0 rlineto +87 120 rlineto +52 72 22 11 39 0 rrcurveto +39 0 rlineto +-46 -203 rlineto +139 0 rlineto +118 519 rlineto +closepath +-162 -88 rmoveto +-31 -143 rlineto +-64 0 rlineto +-106 0 -18 27 0 39 rrcurveto +0 49 41 28 79 0 rrcurveto +99 0 rlineto +closepath +endchar } ND +/afii10071 { +0 556 hsbw +597 120 hstem +187 120 vstem +393 120 vstem +212 717 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +205 0 rmoveto +-24 -120 rlineto +120 0 rlineto +25 120 rlineto +-121 0 rlineto +closepath +endchar } ND +/afii10099 { +0 611 hsbw +-210 123 hstem +0 20 hstem +431 99 hstem +588 128 hstem +42 140 vstem +192 140 vstem +449 142 vstem +165 588 rmoveto +-123 -588 rlineto +140 0 rlineto +43 206 rlineto +26 135 49 90 88 0 rrcurveto +40 0 21 -20 0 -38 rrcurveto +0 -10 -4 -21 -7 -33 rrcurveto +-45 -220 rlineto +-35 -164 -14 -12 -42 0 rrcurveto +-16 0 -19 3 -21 5 rrcurveto +-21 -116 rlineto +32 -10 35 -5 38 0 rrcurveto +143 0 29 158 29 132 rrcurveto +46 223 rlineto +9 44 5 32 0 21 rrcurveto +0 72 -48 58 -88 0 rrcurveto +-61 0 -59 -23 -57 -46 rrcurveto +27 127 rlineto +186 0 rlineto +15 71 rlineto +-186 0 rlineto +12 57 rlineto +-140 0 rlineto +-13 -57 rlineto +-63 0 rlineto +-15 -71 rlineto +64 0 rlineto +closepath +endchar } ND +/afii10100 { +0 469 hsbw +0 20 hstem +408 111 hstem +710 20 hstem +35 138 vstem +255 94 vstem +357 150 vstem +357 730 rmoveto +-102 -146 rlineto +94 0 rlineto +158 146 rlineto +-150 0 rlineto +closepath +-212 -211 rmoveto +-110 -519 rlineto +138 0 rlineto +87 408 rlineto +268 0 rlineto +24 111 rlineto +-407 0 rlineto +closepath +endchar } ND +/afii10101 { +0 563 hsbw +-12 107 hstem +211 87 hstem +425 105 hstem +64 138 vstem +219 298 rmoveto +18 74 55 53 62 0 rrcurveto +49 0 28 -28 6 -55 rrcurveto +131 12 rlineto +-11 112 -82 64 -118 0 rrcurveto +-171 0 -122 -139 0 -180 rrcurveto +0 -143 85 -80 132 0 rrcurveto +116 0 84 61 51 122 rrcurveto +-136 23 rlineto +-27 -66 -38 -33 -49 0 rrcurveto +-44 0 -36 31 0 71 rrcurveto +0 14 rlineto +142 0 rlineto +19 87 rlineto +-144 0 rlineto +closepath +endchar } ND +/afii10102 { +0 556 hsbw +-12 100 hstem +434 97 hstem +100 131 vstem +373 143 vstem +22 145 rmoveto +29 -100 78 -57 150 0 rrcurveto +150 0 87 83 0 99 rrcurveto +0 87 -65 36 -121 33 rrcurveto +-66 18 -33 -1 0 43 rrcurveto +0 25 24 23 59 0 rrcurveto +48 0 44 -17 16 -44 rrcurveto +130 22 rlineto +-19 84 -64 52 -134 0 rrcurveto +-133 0 -102 -59 0 -109 rrcurveto +0 -105 66 -13 138 -48 rrcurveto +46 -16 23 -6 0 -30 rrcurveto +0 -41 -48 -16 -49 0 rrcurveto +-63 0 -31 21 -24 58 rrcurveto +-136 -22 rlineto +closepath +endchar } ND +/afii10103 { +0 278 hsbw +0 20 hstem +499 20 hstem +589 127 hstem +40 140 vstem +189 141 vstem +189 716 rmoveto +-26 -127 rlineto +140 0 rlineto +27 127 rlineto +-141 0 rlineto +closepath +-41 -197 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +endchar } ND +/afii10104 { +0 278 hsbw +0 20 hstem +499 20 hstem +597 120 hstem +60 120 vstem +265 120 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +-64 198 rmoveto +-24 -120 rlineto +120 0 rlineto +25 120 rlineto +-121 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +endchar } ND +/afii10105 { +0 278 hsbw +-210 123 hstem +499 20 hstem +589 127 hstem +149 141 vstem +190 716 rmoveto +-26 -127 rlineto +141 0 rlineto +26 127 rlineto +-141 0 rlineto +closepath +-41 -197 rmoveto +-89 -430 rlineto +-38 -176 -15 0 -38 0 rrcurveto +-15 0 -19 3 -22 5 rrcurveto +-22 -116 rlineto +32 -10 35 -5 38 0 rrcurveto +156 0 4 85 42 205 rrcurveto +92 439 rlineto +-141 0 rlineto +closepath +endchar } ND +/afii10106 { +0 969 hsbw +-12 122 hstem +219 85 hstem +409 110 hstem +190 467 vstem +799 143 vstem +611 304 rmoveto +46 215 rlineto +-467 0 rlineto +-61 -290 rlineto +-20 -96 -14 -23 -46 0 rrcurveto +-16 0 -17 2 -18 5 rrcurveto +-22 -117 rlineto +36 -8 36 -4 35 0 rrcurveto +89 0 55 49 21 99 rrcurveto +58 273 rlineto +189 0 rlineto +-88 -409 rlineto +325 0 rlineto +133 0 77 65 0 110 rrcurveto +0 85 -58 44 -113 0 rrcurveto +-160 0 rlineto +closepath +-48 -216 rmoveto +29 131 rlineto +75 0 rlineto +104 0 28 -16 0 -44 rrcurveto +0 -31 -11 -40 -125 0 rrcurveto +-100 0 rlineto +closepath +endchar } ND +/afii10107 { +0 906 hsbw +0 88 hstem +219 300 hstem +40 138 vstem +412 137 vstem +739 141 vstem +595 519 rmoveto +-139 0 rlineto +-44 -215 rlineto +-166 0 rlineto +43 215 rlineto +-139 0 rlineto +-110 -519 rlineto +138 0 rlineto +49 219 rlineto +166 0 rlineto +-48 -219 rlineto +325 0 rlineto +141 0 69 72 0 103 rrcurveto +0 93 -57 36 -142 0 rrcurveto +-132 0 rlineto +46 215 rlineto +closepath +-92 -431 rmoveto +28 131 rlineto +75 0 rlineto +105 0 28 -16 0 -44 rrcurveto +0 -30 -10 -41 -126 0 rrcurveto +-100 0 rlineto +closepath +endchar } ND +/afii10108 { +0 611 hsbw +0 20 hstem +431 99 hstem +588 128 hstem +42 140 vstem +192 140 vstem +449 142 vstem +165 588 rmoveto +-123 -588 rlineto +140 0 rlineto +43 206 rlineto +29 140 45 85 90 0 rrcurveto +40 0 20 -27 0 -30 rrcurveto +0 -10 -4 -22 -7 -33 rrcurveto +-64 -309 rlineto +140 0 rlineto +63 303 rlineto +9 44 5 32 0 21 rrcurveto +0 72 -48 58 -88 0 rrcurveto +-61 0 -59 -23 -57 -46 rrcurveto +27 127 rlineto +209 0 rlineto +16 71 rlineto +-210 0 rlineto +12 57 rlineto +-140 0 rlineto +-12 -57 rlineto +-65 0 rlineto +-14 -71 rlineto +64 0 rlineto +closepath +endchar } ND +/afii10109 { +0 507 hsbw +0 20 hstem +222 76 hstem +423 96 hstem +710 20 hstem +37 136 vstem +270 93 vstem +372 149 vstem +147 519 rmoveto +-110 -519 rlineto +136 0 rlineto +49 222 rlineto +49 0 13 -8 18 -61 rrcurveto +41 -153 rlineto +132 0 rlineto +-49 174 rlineto +-15 52 -24 30 -34 7 rrcurveto +37 9 24 8 59 99 rrcurveto +22 37 6 7 30 0 rrcurveto +17 0 rlineto +19 96 rlineto +-36 0 rlineto +-98 0 -19 -14 -74 -130 rrcurveto +-38 -67 -12 -10 -52 0 rrcurveto +47 221 rlineto +-138 0 rlineto +closepath +225 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/afii10110 { +0 556 hsbw +585 142 hstem +211 68 vstem +453 65 vstem +211 727 rmoveto +13 -95 51 -47 78 0 rrcurveto +73 0 65 51 27 91 rrcurveto +-65 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -23 17 -16 54 rrcurveto +-68 0 rlineto +closepath +endchar } ND +/afii10193 { +0 611 hsbw +-199 20 hstem +0 20 hstem +499 20 hstem +70 142 vstem +380 131 vstem +270 -5 rmoveto +44 13 42 25 39 37 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-21 -104 -60 -79 -75 0 rrcurveto +-39 0 -20 28 0 26 rrcurveto +0 10 4 23 8 36 rrcurveto +64 308 rlineto +-141 0 rlineto +-60 -290 rlineto +-12 -54 -5 -33 0 -14 rrcurveto +0 -72 29 -44 59 -17 rrcurveto +-41 -194 rlineto +111 0 rlineto +42 194 rlineto +closepath +endchar } ND +/afii10050 { +0 575 hsbw +0 20 hstem +596 120 hstem +43 146 vstem +590 146 vstem +317 596 rmoveto +352 0 rlineto +67 318 rlineto +-146 0 rlineto +-41 -198 rlineto +-353 0 rlineto +-153 -716 rlineto +146 0 rlineto +128 596 rlineto +closepath +endchar } ND +/afii10098 { +0 467 hsbw +0 20 hstem +408 111 hstem +27 138 vstem +443 138 vstem +406 519 rmoveto +-269 0 rlineto +-110 -519 rlineto +138 0 rlineto +87 408 rlineto +269 0 rlineto +60 289 rlineto +-138 0 rlineto +-37 -178 rlineto +closepath +endchar } ND +/afii00208 { +0 1000 hsbw +208 103 hstem +37 939 vstem +60 311 rmoveto +-23 -103 rlineto +939 0 rlineto +23 103 rlineto +-939 0 rlineto +closepath +endchar } ND +/afii61352 { +0 1146 hsbw +0 240 hstem +473 243 hstem +43 136 vstem +196 135 vstem +456 147 618 119 761 129 vstem3 +1027 130 vstem +196 716 rmoveto +-153 -716 rlineto +136 0 rlineto +102 473 rlineto +184 -473 rlineto +138 0 rlineto +152 716 rlineto +-137 0 rlineto +-102 -476 rlineto +-185 476 rlineto +-135 0 rlineto +closepath +565 -356 rmoveto +0 -114 83 -59 94 0 rrcurveto +125 0 94 100 0 127 rrcurveto +0 96 -58 77 -118 0 rrcurveto +-148 0 -72 -106 0 -121 rrcurveto +closepath +129 -19 rmoveto +0 76 25 80 63 0 rrcurveto +32 0 17 -20 0 -38 rrcurveto +0 -86 -31 -75 -57 0 rrcurveto +-32 0 -17 21 0 42 rrcurveto +closepath +-166 -204 rmoveto +-24 -105 rlineto +350 0 rlineto +22 105 rlineto +-348 0 rlineto +closepath +endchar } ND +/pi { +0 712 hsbw +0 20 hstem +399 120 hstem +107 138 vstem +497 135 vstem +105 519 rmoveto +-26 -120 rlineto +111 0 rlineto +-83 -399 rlineto +138 0 rlineto +84 399 rlineto +168 0 rlineto +-86 -399 rlineto +137 0 rlineto +84 399 rlineto +111 0 rlineto +27 120 rlineto +-665 0 rlineto +closepath +endchar } ND +/sheva { +0 333 hsbw +-306 82 hstem +-180 82 hstem +68 84 vstem +146 -98 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +-27 -126 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 23 0 rrcurveto +24 0 26 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/hatafsegol { +0 333 hsbw +-306 82 hstem +-180 82 hstem +-16 84 95 84 206 84 vstem3 +35 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 12 -11 22 0 rrcurveto +25 0 25 26 0 25 rrcurveto +0 21 -11 10 -22 0 rrcurveto +closepath +111 0 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -20 11 -11 22 0 rrcurveto +26 0 25 26 0 24 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +110 0 rmoveto +-28 0 -22 -23 0 -28 rrcurveto +0 -20 11 -11 22 0 rrcurveto +25 0 26 27 0 22 rrcurveto +0 22 -12 11 -22 0 rrcurveto +closepath +-193 -126 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -20 11 -11 22 0 rrcurveto +26 0 25 25 0 26 rrcurveto +0 21 -11 10 -22 0 rrcurveto +closepath +166 0 rmoveto +-28 0 -22 -23 0 -28 rrcurveto +0 -20 11 -11 22 0 rrcurveto +25 0 26 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/hatafpatah { +0 333 hsbw +-306 82 hstem +-154 51 hstem +-9 164 vstem +196 84 vstem +247 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 11 -11 23 0 rrcurveto +26 0 24 24 0 25 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +-256 -56 rmoveto +164 0 rlineto +11 51 rlineto +-164 0 rlineto +-11 -51 rlineto +closepath +229 -70 rmoveto +-28 0 -23 -25 0 -25 rrcurveto +0 -21 11 -11 23 0 rrcurveto +26 0 25 28 0 22 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/hatafqamats { +0 333 hsbw +-306 82 hstem +-154 51 hstem +30 56 vstem +196 84 vstem +247 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 11 -11 23 0 rrcurveto +26 0 24 24 0 25 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +-217 -128 rmoveto +56 0 rlineto +16 72 rlineto +53 0 rlineto +11 51 rlineto +-164 0 rlineto +-11 -51 rlineto +54 0 rlineto +-15 -72 rlineto +closepath +190 2 rmoveto +-28 0 -23 -25 0 -25 rrcurveto +0 -21 11 -11 23 0 rrcurveto +26 0 25 28 0 22 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/hiriq { +0 333 hsbw +-180 82 hstem +95 84 vstem +146 -98 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/tsere { +0 333 hsbw +-180 82 hstem +31 85 vstem +159 85 vstem +82 -98 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -20 11 -11 23 0 rrcurveto +26 0 25 26 0 24 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +128 0 rmoveto +-27 0 -24 -23 0 -27 rrcurveto +0 -21 11 -11 23 0 rrcurveto +25 0 26 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/segol { +0 333 hsbw +-306 82 hstem +-180 82 hstem +31 84 vstem +159 84 vstem +82 -98 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -20 11 -11 22 0 rrcurveto +26 0 25 26 0 24 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +127 0 rmoveto +-27 0 -23 -24 0 -26 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +-90 -126 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 23 0 rrcurveto +24 0 26 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/patah { +0 333 hsbw +-154 51 hstem +36 196 vstem +36 -154 rmoveto +196 0 rlineto +11 51 rlineto +-197 0 rlineto +-10 -51 rlineto +closepath +endchar } ND +/qamats { +0 333 hsbw +-154 51 hstem +88 57 vstem +88 -236 rmoveto +57 0 rlineto +17 82 rlineto +70 0 rlineto +11 51 rlineto +-197 0 rlineto +-10 -51 rlineto +69 0 rlineto +-17 -82 rlineto +closepath +endchar } ND +/holam { +0 333 hsbw +577 82 hstem +256 84 vstem +307 659 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/qubuts { +0 333 hsbw +-306 82 hstem +-180 82 hstem +-23 86 83 82 186 84 vstem3 +28 -98 rmoveto +-28 0 -23 -27 0 -23 rrcurveto +0 -21 12 -11 22 0 rrcurveto +25 0 26 26 0 25 rrcurveto +0 21 -12 10 -22 0 rrcurveto +closepath +104 -63 rmoveto +-30 0 -21 -27 0 -23 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +104 -63 rmoveto +-26 0 -24 -24 0 -26 rrcurveto +0 -21 11 -11 22 0 rrcurveto +25 0 26 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/dagesh { +0 333 hsbw +241 82 hstem +185 84 vstem +235 323 rmoveto +-28 0 -22 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/meteg { +0 333 hsbw +-299 196 hstem +78 50 vstem +119 -103 rmoveto +-41 -196 rlineto +50 0 rlineto +42 196 rlineto +-51 0 rlineto +closepath +endchar } ND +/maqaf { +0 447 hsbw +408 110 hstem +148 325 vstem +148 408 rmoveto +325 0 rlineto +24 110 rlineto +-326 0 rlineto +-23 -110 rlineto +closepath +endchar } ND +/rafe { +0 333 hsbw +611 51 hstem +209 196 vstem +198 611 rmoveto +197 0 rlineto +10 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/paseq { +0 299 hsbw +76 104 vstem +229 104 vstem +76 -101 rmoveto +104 0 rlineto +153 721 rlineto +-104 0 rlineto +-153 -721 rlineto +closepath +endchar } ND +/shindot { +0 333 hsbw +577 83 hstem +506 84 vstem +557 660 rmoveto +-25 0 -26 -22 0 -29 rrcurveto +0 -22 11 -10 23 0 rrcurveto +24 0 26 23 0 27 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/sindot { +0 333 hsbw +577 83 hstem +57 660 rmoveto +-27 0 -24 -24 0 -27 rrcurveto +0 -22 11 -10 22 0 rrcurveto +27 0 17 14 6 27 rrcurveto +5 22 -13 20 -24 0 rrcurveto +closepath +endchar } ND +/sofpasuq { +0 333 hsbw +0 137 hstem +381 138 hstem +98 137 vstem +179 381 rmoveto +137 0 rlineto +30 138 rlineto +-138 0 rlineto +-29 -138 rlineto +closepath +-81 -381 rmoveto +137 0 rlineto +30 137 rlineto +-138 0 rlineto +-29 -137 rlineto +closepath +endchar } ND +/alef { +0 583 hsbw +0 306 hstem +498 20 hstem +44 133 vstem +518 127 vstem +461 220 rmoveto +96 55 31 63 37 117 rrcurveto +20 63 rlineto +-127 0 rlineto +-25 -85 rlineto +-20 -66 -25 -43 -29 -18 rrcurveto +-105 212 rlineto +-160 0 rlineto +84 -172 rlineto +-91 -50 -36 -72 -33 -114 rrcurveto +-34 -110 rlineto +133 0 rlineto +30 103 rlineto +22 80 25 51 28 22 rrcurveto +127 -256 rlineto +161 0 rlineto +-109 220 rlineto +closepath +endchar } ND +/bet { +0 576 hsbw +0 118 hstem +410 114 hstem +384 144 vstem +485 118 rmoveto +35 162 rlineto +5 28 3 25 0 24 rrcurveto +0 114 -73 53 -160 0 rrcurveto +-51 0 -52 -6 -52 -10 rrcurveto +-13 -108 rlineto +45 6 40 4 36 0 rrcurveto +89 0 47 -18 0 -79 rrcurveto +0 -17 -3 -19 -4 -22 rrcurveto +-29 -137 rlineto +-285 0 rlineto +-25 -118 rlineto +516 0 rlineto +25 118 rlineto +-94 0 rlineto +closepath +endchar } ND +/gimel { +0 457 hsbw +0 20 hstem +412 112 hstem +5 137 vstem +304 145 vstem +192 515 rmoveto +-12 -106 rlineto +8 2 13 1 19 0 rrcurveto +56 0 28 -22 0 -44 rrcurveto +0 -10 -2 -12 -2 -12 rrcurveto +-21 -100 rlineto +-94 -8 -77 -49 -60 -90 rrcurveto +-43 -65 rlineto +137 0 rlineto +46 61 rlineto +25 33 30 20 36 6 rrcurveto +9 -120 rlineto +137 0 rlineto +-11 200 rlineto +26 123 rlineto +6 27 3 24 0 22 rrcurveto +0 85 -53 43 -105 0 rrcurveto +-40 0 -33 -3 -26 -6 rrcurveto +closepath +endchar } ND +/dalet { +0 550 hsbw +0 20 hstem +400 118 hstem +308 137 vstem +610 400 rmoveto +26 118 rlineto +-501 0 rlineto +-26 -118 rlineto +284 0 rlineto +-85 -400 rlineto +137 0 rlineto +85 400 rlineto +80 0 rlineto +closepath +endchar } ND +/he { +0 614 hsbw +0 269 hstem +412 112 hstem +69 138 vstem +475 145 vstem +553 0 rmoveto +56 264 rlineto +7 32 4 28 0 25 rrcurveto +0 129 -90 46 -167 0 rrcurveto +-73 0 -64 -5 -54 -9 rrcurveto +-14 -110 rlineto +57 8 52 4 48 0 rrcurveto +98 0 62 -19 0 -91 rrcurveto +0 -18 -3 -19 -4 -21 rrcurveto +-51 -244 rlineto +136 0 rlineto +closepath +-289 269 rmoveto +-138 0 rlineto +-57 -269 rlineto +138 0 rlineto +57 269 rlineto +closepath +endchar } ND +/vav { +0 273 hsbw +0 20 hstem +498 20 hstem +66 141 vstem +317 518 rmoveto +-141 0 rlineto +-110 -518 rlineto +141 0 rlineto +110 518 rlineto +closepath +endchar } ND +/zayin { +0 413 hsbw +0 20 hstem +420 98 hstem +136 127 vstem +485 420 rmoveto +21 98 rlineto +-352 0 rlineto +-25 -118 rlineto +143 0 rlineto +-63 -39 -27 -60 -8 -84 rrcurveto +-7 -56 -8 -51 -9 -44 rrcurveto +-14 -66 rlineto +127 0 rlineto +17 78 rlineto +10 47 6 55 6 61 rrcurveto +11 114 52 65 120 0 rrcurveto +closepath +endchar } ND +/het { +0 616 hsbw +0 20 hstem +410 114 hstem +66 137 vstem +477 142 vstem +550 0 rmoveto +59 280 rlineto +6 30 4 28 0 24 rrcurveto +0 122 -83 40 -168 0 rrcurveto +-65 0 -65 -6 -64 -10 rrcurveto +-108 -508 rlineto +137 0 rlineto +86 405 rlineto +20 3 24 2 28 0 rrcurveto +79 0 37 -25 0 -65 rrcurveto +0 -14 -2 -16 -4 -18 rrcurveto +-58 -272 rlineto +137 0 rlineto +closepath +endchar } ND +/tet { +0 626 hsbw +-12 114 hstem +410 120 hstem +109 138 vstem +504 140 vstem +388 366 rmoveto +26 29 25 15 25 0 rrcurveto +25 0 15 -22 0 -30 rrcurveto +0 -19 -4 -26 -6 -32 rrcurveto +-11 -51 rlineto +-18 -82 -53 -46 -72 0 rrcurveto +-59 0 -34 35 0 62 rrcurveto +0 18 2 21 5 24 rrcurveto +55 256 rlineto +-138 0 rlineto +-47 -225 rlineto +-10 -44 -5 -39 0 -32 rrcurveto +0 -119 86 -71 121 0 rrcurveto +189 0 139 213 0 160 rrcurveto +0 60 rlineto +0 73 -49 36 -70 0 rrcurveto +-62 0 -54 -31 -47 -60 rrcurveto +26 -73 rlineto +closepath +endchar } ND +/yod { +0 273 hsbw +229 289 hstem +115 141 vstem +317 518 rmoveto +-141 0 rlineto +-61 -289 rlineto +141 0 rlineto +61 289 rlineto +closepath +endchar } ND +/finalkaf { +0 521 hsbw +-199 20 hstem +409 115 hstem +384 145 vstem +418 -199 rmoveto +102 479 rlineto +6 27 3 25 0 22 rrcurveto +0 113 -79 57 -158 0 rrcurveto +-61 0 -55 -6 -49 -10 rrcurveto +-13 -108 rlineto +52 6 41 3 31 0 rrcurveto +88 0 58 -19 0 -81 rrcurveto +0 -16 -3 -18 -4 -20 rrcurveto +-96 -454 rlineto +137 0 rlineto +closepath +endchar } ND +/kaf { +0 491 hsbw +-8 106 hstem +420 106 hstem +368 147 vstem +38 8 rmoveto +33 -10 40 -6 46 0 rrcurveto +208 0 150 163 0 178 rrcurveto +0 126 -94 67 -150 0 rrcurveto +-48 0 -42 -6 -36 -10 rrcurveto +0 -107 rlineto +34 11 28 6 30 0 rrcurveto +82 0 49 -44 0 -72 rrcurveto +0 -99 -86 -107 -114 0 rrcurveto +-29 0 -29 5 -30 12 rrcurveto +-42 -107 rlineto +closepath +endchar } ND +/lamed { +0 496 hsbw +0 20 hstem +400 118 hstem +696 20 hstem +218 136 vstem +555 518 rmoveto +-276 0 rlineto +42 198 rlineto +-137 0 rlineto +-67 -316 rlineto +276 0 rlineto +-14 -65 rlineto +-8 -35 -14 -29 -22 -22 rrcurveto +-16 -18 rlineto +-54 -58 -16 -27 -12 -53 rrcurveto +-19 -93 rlineto +136 0 rlineto +19 86 rlineto +6 30 18 32 31 34 rrcurveto +29 32 rlineto +34 38 15 34 20 99 rrcurveto +29 133 rlineto +closepath +endchar } ND +/finalmem { +0 611 hsbw +0 118 hstem +410 114 hstem +477 142 vstem +550 0 rmoveto +59 280 rlineto +6 30 4 28 0 24 rrcurveto +0 122 -83 40 -168 0 rrcurveto +-65 0 -65 -6 -64 -10 rrcurveto +-108 -508 rlineto +484 0 rlineto +closepath +-112 118 rmoveto +-210 0 rlineto +61 287 rlineto +20 3 24 2 28 0 rrcurveto +79 0 37 -25 0 -65 rrcurveto +0 -14 -2 -16 -4 -18 rrcurveto +-33 -154 rlineto +closepath +endchar } ND +/mem { +0 630 hsbw +0 118 hstem +406 118 hstem +137 124 vstem +493 138 vstem +268 407 rmoveto +-7 111 rlineto +-124 0 rlineto +32 -258 rlineto +-19 -33 -23 -49 -28 -65 rrcurveto +-48 -113 rlineto +145 0 rlineto +68 175 rlineto +50 128 35 103 92 0 rrcurveto +28 0 18 -14 6 -27 rrcurveto +0 -56 rlineto +0 -24 -6 -30 -8 -33 rrcurveto +-22 -104 rlineto +-127 0 rlineto +-25 -118 rlineto +264 0 rlineto +46 215 rlineto +10 51 6 45 0 38 rrcurveto +0 104 -49 71 -102 0 rrcurveto +-74 0 -70 -39 -68 -78 rrcurveto +closepath +endchar } ND +/finalnun { +0 273 hsbw +-199 20 hstem +498 20 hstem +23 142 vstem +176 141 vstem +317 518 rmoveto +-141 0 rlineto +-153 -717 rlineto +142 0 rlineto +152 717 rlineto +closepath +endchar } ND +/nun { +0 386 hsbw +0 118 hstem +412 112 hstem +259 143 vstem +325 0 rmoveto +69 323 rlineto +5 26 3 24 0 22 rrcurveto +0 86 -53 43 -104 0 rrcurveto +-40 0 -33 -3 -26 -6 rrcurveto +-12 -106 rlineto +8 2 13 1 19 0 rrcurveto +51 0 34 -14 0 -49 rrcurveto +0 -11 -2 -12 -3 -14 rrcurveto +-41 -194 rlineto +-144 0 rlineto +-25 -118 rlineto +281 0 rlineto +closepath +endchar } ND +/samekh { +0 613 hsbw +-12 112 hstem +418 112 hstem +85 144 vstem +494 143 vstem +419 530 rmoveto +-183 0 -151 -185 0 -157 rrcurveto +0 -124 87 -76 133 0 rrcurveto +179 0 153 169 0 171 rrcurveto +0 117 -82 85 -136 0 rrcurveto +closepath +-190 -321 rmoveto +0 87 65 122 102 0 rrcurveto +63 0 35 -47 0 -61 rrcurveto +0 -94 -73 -116 -92 0 rrcurveto +-66 0 -34 46 0 63 rrcurveto +closepath +endchar } ND +/ayin { +0 543 hsbw +102 416 hstem +161 138 vstem +466 137 vstem +282 102 rmoveto +17 416 rlineto +-138 0 rlineto +-8 -457 rlineto +-40 -10 -47 -8 -54 -8 rrcurveto +-7 -112 rlineto +275 43 187 18 89 348 rrcurveto +47 186 rlineto +-137 0 rlineto +-58 -245 rlineto +-22 -99 -22 -44 -82 -28 rrcurveto +closepath +endchar } ND +/finalpe { +0 594 hsbw +-199 20 hstem +418 106 hstem +110 133 vstem +458 143 vstem +266 413 rmoveto +21 3 21 2 21 0 rrcurveto +81 0 48 -16 0 -79 rrcurveto +0 -20 -3 -23 -5 -26 rrcurveto +-96 -453 rlineto +136 0 rlineto +96 449 rlineto +10 45 5 38 0 31 rrcurveto +0 133 -107 27 -148 0 rrcurveto +-62 0 -63 -6 -65 -12 rrcurveto +-36 -174 rlineto +-6 -23 -4 -21 0 -18 rrcurveto +0 -18 0 -15 3 -12 rrcurveto +12 -50 39 -25 68 0 rrcurveto +27 0 26 5 26 10 rrcurveto +-5 84 rlineto +-18 0 rlineto +-30 0 -15 14 0 30 rrcurveto +0 8 1 9 2 10 rrcurveto +20 93 rlineto +closepath +endchar } ND +/pe { +0 587 hsbw +-8 97 hstem +435 92 hstem +133 133 vstem +467 145 vstem +169 502 rmoveto +-26 -121 rlineto +-7 -31 -3 -26 0 -20 rrcurveto +0 -74 46 -31 76 0 rrcurveto +27 0 26 5 26 10 rrcurveto +-5 84 rlineto +-17 0 rlineto +-31 0 -15 14 0 30 rrcurveto +0 8 1 9 3 10 rrcurveto +12 60 rlineto +20 4 19 2 18 0 rrcurveto +85 0 43 -40 0 -80 rrcurveto +0 -113 -95 -113 -136 0 rrcurveto +-45 0 -45 9 -45 19 rrcurveto +-47 -92 rlineto +56 -22 59 -11 60 0 rrcurveto +208 0 175 159 0 176 rrcurveto +0 127 -102 73 -148 0 rrcurveto +-64 0 -65 -9 -64 -16 rrcurveto +closepath +endchar } ND +/finaltsadi { +0 500 hsbw +-199 20 hstem +498 20 hstem +120 137 vstem +434 134 vstem +257 -199 rmoveto +81 377 rlineto +113 32 46 71 37 124 rrcurveto +34 113 rlineto +-134 0 rlineto +-28 -98 rlineto +-22 -78 -27 -44 -30 -10 rrcurveto +-64 230 rlineto +-148 0 rlineto +92 -307 rlineto +-87 -410 rlineto +137 0 rlineto +closepath +endchar } ND +/tsadi { +0 512 hsbw +0 118 hstem +498 20 hstem +115 148 vstem +440 133 vstem +573 518 rmoveto +-133 0 rlineto +-22 -82 rlineto +-27 -100 -7 -10 -34 -9 rrcurveto +-87 201 rlineto +-148 0 rlineto +176 -400 rlineto +-231 0 rlineto +-25 -118 rlineto +411 0 rlineto +13 61 rlineto +-71 166 rlineto +77 36 51 54 22 76 rrcurveto +35 125 rlineto +closepath +endchar } ND +/qof { +0 573 hsbw +-199 20 hstem +0 20 hstem +400 118 hstem +121 136 vstem +294 138 vstem +148 400 rmoveto +321 0 rlineto +-13 -65 rlineto +-8 -35 -15 -29 -21 -22 rrcurveto +-16 -18 rlineto +-55 -58 -15 -27 -12 -53 rrcurveto +-20 -93 rlineto +138 0 rlineto +18 86 rlineto +6 30 18 32 31 34 rrcurveto +29 32 rlineto +34 38 13 34 22 99 rrcurveto +29 133 rlineto +-458 0 rlineto +-26 -118 rlineto +closepath +-127 -599 rmoveto +137 0 rlineto +99 468 rlineto +-136 0 rlineto +-100 -468 rlineto +closepath +endchar } ND +/resh { +0 521 hsbw +0 20 hstem +409 115 hstem +384 145 vstem +460 0 rmoveto +60 280 rlineto +6 27 3 25 0 23 rrcurveto +0 112 -80 57 -156 0 rrcurveto +-62 0 -55 -6 -49 -10 rrcurveto +-12 -108 rlineto +51 6 41 3 31 0 rrcurveto +101 0 45 -30 0 -73 rrcurveto +0 -16 -2 -17 -4 -18 rrcurveto +-54 -255 rlineto +136 0 rlineto +closepath +endchar } ND +/shin { +0 715 hsbw +-14 103 hstem +283 235 hstem +110 135 vstem +404 133 vstem +651 135 vstem +245 183 rmoveto +149 11 71 52 38 144 rrcurveto +34 128 rlineto +-133 0 rlineto +-25 -92 rlineto +-27 -106 -18 -50 -88 0 rrcurveto +0 13 rlineto +1 5 1 6 1 8 rrcurveto +5 38 4 26 4 15 rrcurveto +28 137 rlineto +-136 0 rlineto +-31 -175 rlineto +-9 -48 -4 -42 0 -36 rrcurveto +0 -151 83 -80 152 0 rrcurveto +202 0 110 106 70 228 rrcurveto +59 198 rlineto +-135 0 rlineto +-54 -190 rlineto +-44 -153 -50 -86 -138 0 rrcurveto +-67 0 -52 40 -1 54 rrcurveto +closepath +endchar } ND +/tav { +0 673 hsbw +-4 97 hstem +415 109 hstem +534 143 vstem +65 103 rmoveto +-40 -89 rlineto +35 -12 38 -6 42 0 rrcurveto +105 0 43 41 26 119 rrcurveto +56 259 rlineto +112 0 52 6 0 -92 rrcurveto +0 -21 -4 -25 -6 -28 rrcurveto +-54 -255 rlineto +137 0 rlineto +60 280 rlineto +6 31 4 28 0 24 rrcurveto +0 136 -115 25 -160 0 rrcurveto +-90 0 -89 -6 -86 -10 rrcurveto +-12 -106 rlineto +48 5 35 3 23 0 rrcurveto +-52 -248 rlineto +-12 -54 -13 -15 -38 0 rrcurveto +-16 0 -17 3 -18 7 rrcurveto +closepath +endchar } ND +/doublevav { +0 546 hsbw +-199 20 hstem +498 20 hstem +23 142 vstem +176 141 vstem +449 141 vstem +590 518 rmoveto +-141 0 rlineto +-153 -717 rlineto +142 0 rlineto +152 717 rlineto +closepath +-273 0 rmoveto +-141 0 rlineto +-153 -717 rlineto +142 0 rlineto +152 717 rlineto +closepath +endchar } ND +/vavyod { +0 546 hsbw +-199 20 hstem +229 289 hstem +115 141 vstem +296 142 vstem +449 141 vstem +590 518 rmoveto +-141 0 rlineto +-153 -717 rlineto +142 0 rlineto +152 717 rlineto +closepath +-273 0 rmoveto +-141 0 rlineto +-61 -289 rlineto +141 0 rlineto +61 289 rlineto +closepath +endchar } ND +/doubleyod { +0 546 hsbw +229 289 hstem +115 141 vstem +388 141 vstem +590 518 rmoveto +-141 0 rlineto +-61 -289 rlineto +141 0 rlineto +61 289 rlineto +closepath +-273 0 rmoveto +-141 0 rlineto +-61 -289 rlineto +141 0 rlineto +61 289 rlineto +closepath +endchar } ND +/geresh { +0 276 hsbw +498 20 hstem +105 92 vstem +203 150 vstem +105 312 rmoveto +92 0 rlineto +156 206 rlineto +-150 0 rlineto +-98 -206 rlineto +closepath +endchar } ND +/gershayim { +0 504 hsbw +312 206 hstem +105 92 vstem +333 92 vstem +431 150 vstem +105 312 rmoveto +92 0 rlineto +156 206 rlineto +-150 0 rlineto +-98 -206 rlineto +closepath +228 0 rmoveto +92 0 rlineto +156 206 rlineto +-150 0 rlineto +-98 -206 rlineto +closepath +endchar } ND +/newsheqelsign { +0 818 hsbw +0 88 168 182 430 88 hstem3 +66 104 vstem +334 104 vstem +531 113 vstem +758 104 vstem +640 385 rmoveto +2 12 2 12 0 12 rrcurveto +0 64 -38 33 -76 0 rrcurveto +-354 0 rlineto +-110 -518 rlineto +104 0 rlineto +91 430 rlineto +214 0 rlineto +38 0 18 -17 0 -32 rrcurveto +0 -16 rlineto +-1 -5 -1 -6 -1 -6 rrcurveto +-38 -180 rlineto +104 0 rlineto +46 217 rlineto +closepath +-380 -385 rmoveto +354 0 rlineto +88 0 60 49 18 84 rrcurveto +82 385 rlineto +-104 0 rlineto +-74 -348 rlineto +-12 -55 -29 -27 -46 0 rrcurveto +-215 0 rlineto +56 262 rlineto +-104 0 rlineto +-74 -350 rlineto +closepath +endchar } ND +/vavshindot { +0 273 hsbw +0 20 hstem +499 20 hstem +578 82 hstem +66 141 vstem +317 519 rmoveto +-141 0 rlineto +-110 -519 rlineto +141 0 rlineto +110 519 rlineto +closepath +-177 141 rmoveto +-28 0 -23 -23 0 -28 rrcurveto +0 -22 11 -9 23 0 rrcurveto +26 0 17 14 6 27 rrcurveto +5 22 -12 19 -25 0 rrcurveto +closepath +endchar } ND +/finalkafsheva { +0 521 hsbw +-199 20 hstem +-46 82 hstem +80 82 hstem +409 115 hstem +127 84 vstem +384 145 vstem +418 -199 rmoveto +102 479 rlineto +6 27 3 25 0 23 rrcurveto +0 112 -79 57 -158 0 rrcurveto +-61 0 -55 -6 -49 -10 rrcurveto +-13 -108 rlineto +52 6 41 3 31 0 rrcurveto +88 0 58 -19 0 -81 rrcurveto +0 -16 -3 -18 -4 -20 rrcurveto +-96 -454 rlineto +137 0 rlineto +closepath +-213 361 rmoveto +-27 0 -24 -23 0 -27 rrcurveto +0 -22 11 -10 23 0 rrcurveto +24 0 26 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +-27 -126 rmoveto +-27 0 -24 -23 0 -27 rrcurveto +0 -21 11 -11 23 0 rrcurveto +24 0 26 27 0 23 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/finalkafqamats { +0 521 hsbw +-199 356 hstem +409 115 hstem +165 56 vstem +384 145 vstem +418 -199 rmoveto +102 479 rlineto +6 27 3 25 0 23 rrcurveto +0 112 -79 57 -158 0 rrcurveto +-61 0 -55 -6 -49 -10 rrcurveto +-13 -108 rlineto +52 6 41 3 31 0 rrcurveto +88 0 58 -19 0 -81 rrcurveto +0 -16 -3 -18 -4 -20 rrcurveto +-96 -454 rlineto +137 0 rlineto +closepath +-271 223 rmoveto +57 0 rlineto +17 82 rlineto +70 0 rlineto +11 51 rlineto +-197 0 rlineto +-10 -51 rlineto +70 0 rlineto +-18 -82 rlineto +closepath +endchar } ND +/lamedholam { +0 496 hsbw +0 20 hstem +400 119 hstem +578 82 hstem +696 20 hstem +218 136 vstem +555 519 rmoveto +-276 0 rlineto +42 197 rlineto +-137 0 rlineto +-67 -316 rlineto +276 0 rlineto +-14 -65 rlineto +-8 -35 -14 -29 -21 -22 rrcurveto +-17 -18 rlineto +-54 -56 -17 -29 -10 -53 rrcurveto +-20 -93 rlineto +136 0 rlineto +19 86 rlineto +6 30 19 32 31 34 rrcurveto +29 32 rlineto +34 38 13 34 22 99 rrcurveto +28 134 rlineto +closepath +-488 141 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -22 11 -9 22 0 rrcurveto +27 0 17 14 6 27 rrcurveto +5 22 -12 19 -25 0 rrcurveto +closepath +endchar } ND +/lamedholamdagesh { +0 496 hsbw +0 323 hstem +400 119 hstem +578 82 hstem +696 20 hstem +167 84 vstem +555 519 rmoveto +-276 0 rlineto +42 197 rlineto +-137 0 rlineto +-67 -316 rlineto +276 0 rlineto +-14 -65 rlineto +-8 -35 -14 -29 -21 -22 rrcurveto +-17 -18 rlineto +-54 -56 -17 -29 -10 -53 rrcurveto +-20 -93 rlineto +136 0 rlineto +19 86 rlineto +6 30 19 32 31 34 rrcurveto +29 32 rlineto +34 38 13 34 22 99 rrcurveto +28 134 rlineto +closepath +-488 141 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -22 11 -9 22 0 rrcurveto +27 0 17 14 6 27 rrcurveto +5 22 -12 19 -25 0 rrcurveto +closepath +150 -337 rmoveto +-28 0 -22 -26 0 -24 rrcurveto +0 -22 11 -10 22 0 rrcurveto +25 0 26 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/altayin { +0 559 hsbw +0 118 hstem +119 399 hstem +176 139 vstem +482 136 vstem +194 0 rmoveto +225 0 88 75 56 223 rrcurveto +55 220 rlineto +-136 0 rlineto +-58 -245 rlineto +-22 -91 -31 -39 -73 -25 rrcurveto +17 400 rlineto +-139 0 rlineto +-7 -400 rlineto +-120 0 rlineto +-25 -118 rlineto +170 0 rlineto +closepath +endchar } ND +/shinshindot { +0 715 hsbw +-14 103 hstem +283 236 hstem +578 82 hstem +110 135 vstem +404 133 vstem +702 84 vstem +245 183 rmoveto +149 11 71 52 38 144 rrcurveto +34 129 rlineto +-133 0 rlineto +-24 -93 rlineto +-29 -104 -17 -52 -88 0 rrcurveto +0 13 rlineto +1 5 1 7 1 7 rrcurveto +5 38 4 26 4 15 rrcurveto +28 138 rlineto +-136 0 rlineto +-31 -176 rlineto +-9 -48 -4 -42 0 -36 rrcurveto +0 -151 83 -80 152 0 rrcurveto +202 0 110 106 70 228 rrcurveto +59 199 rlineto +-135 0 rlineto +-54 -191 rlineto +-44 -154 -51 -85 -137 0 rrcurveto +-67 0 -51 40 -2 54 rrcurveto +closepath +507 477 rmoveto +-24 0 -26 -22 0 -29 rrcurveto +0 -22 11 -9 22 0 rrcurveto +26 0 25 23 0 26 rrcurveto +0 22 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/shinsindot { +0 715 hsbw +-14 103 hstem +283 236 hstem +578 82 hstem +110 135 vstem +404 133 vstem +651 135 vstem +245 183 rmoveto +149 11 71 52 38 144 rrcurveto +34 129 rlineto +-133 0 rlineto +-24 -93 rlineto +-29 -104 -17 -52 -88 0 rrcurveto +0 13 rlineto +1 5 1 7 1 7 rrcurveto +5 38 4 26 4 15 rrcurveto +28 138 rlineto +-136 0 rlineto +-31 -176 rlineto +-9 -48 -4 -42 0 -36 rrcurveto +0 -151 83 -80 152 0 rrcurveto +202 0 110 106 70 228 rrcurveto +59 199 rlineto +-135 0 rlineto +-54 -191 rlineto +-44 -154 -51 -85 -137 0 rrcurveto +-67 0 -51 40 -2 54 rrcurveto +closepath +5 477 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -22 11 -9 22 0 rrcurveto +27 0 17 14 6 27 rrcurveto +5 22 -12 19 -25 0 rrcurveto +closepath +endchar } ND +/shindageshshindot { +0 715 hsbw +-14 103 hstem +180 339 hstem +578 82 hstem +110 135 vstem +443 84 vstem +701 84 vstem +245 183 rmoveto +149 11 71 52 38 144 rrcurveto +34 129 rlineto +-133 0 rlineto +-24 -93 rlineto +-29 -104 -17 -52 -88 0 rrcurveto +0 13 rlineto +1 5 1 7 1 7 rrcurveto +5 38 4 26 4 15 rrcurveto +28 138 rlineto +-136 0 rlineto +-31 -176 rlineto +-9 -48 -4 -42 0 -36 rrcurveto +0 -151 83 -80 152 0 rrcurveto +202 0 110 106 70 228 rrcurveto +59 199 rlineto +-135 0 rlineto +-54 -191 rlineto +-44 -154 -51 -85 -137 0 rrcurveto +-67 0 -51 40 -2 54 rrcurveto +closepath +249 79 rmoveto +-27 0 -24 -24 0 -26 rrcurveto +0 -22 11 -10 23 0 rrcurveto +25 0 25 25 0 25 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +257 398 rmoveto +-24 0 -26 -22 0 -29 rrcurveto +0 -22 11 -9 22 0 rrcurveto +26 0 25 23 0 26 rrcurveto +0 22 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/shindageshsindot { +0 715 hsbw +-14 103 hstem +180 339 hstem +578 82 hstem +110 135 vstem +443 84 vstem +651 135 vstem +245 183 rmoveto +149 11 71 52 38 144 rrcurveto +34 129 rlineto +-133 0 rlineto +-24 -93 rlineto +-29 -104 -17 -52 -88 0 rrcurveto +0 13 rlineto +1 5 1 7 1 7 rrcurveto +5 38 4 26 4 15 rrcurveto +28 138 rlineto +-136 0 rlineto +-31 -176 rlineto +-9 -48 -4 -42 0 -36 rrcurveto +0 -151 83 -80 152 0 rrcurveto +202 0 110 106 70 228 rrcurveto +59 199 rlineto +-135 0 rlineto +-54 -191 rlineto +-44 -154 -51 -85 -137 0 rrcurveto +-67 0 -51 40 -2 54 rrcurveto +closepath +249 79 rmoveto +-27 0 -24 -24 0 -26 rrcurveto +0 -22 11 -10 23 0 rrcurveto +25 0 25 25 0 25 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +-244 398 rmoveto +-27 0 -24 -23 0 -28 rrcurveto +0 -22 11 -9 22 0 rrcurveto +27 0 17 14 6 27 rrcurveto +5 22 -12 19 -25 0 rrcurveto +closepath +endchar } ND +/alefpatah { +0 583 hsbw +-154 51 hstem +0 306 hstem +499 20 hstem +44 133 vstem +518 127 vstem +461 220 rmoveto +95 54 34 63 35 119 rrcurveto +20 63 rlineto +-127 0 rlineto +-25 -85 rlineto +-20 -67 -24 -43 -30 -18 rrcurveto +-105 213 rlineto +-160 0 rlineto +84 -173 rlineto +-91 -50 -36 -70 -33 -116 rrcurveto +-34 -110 rlineto +133 0 rlineto +30 103 rlineto +23 80 25 51 28 22 rrcurveto +126 -256 rlineto +162 0 rlineto +-110 220 rlineto +closepath +-301 -374 rmoveto +196 0 rlineto +11 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/alefqamats { +0 583 hsbw +-154 51 hstem +0 306 hstem +499 20 hstem +44 133 vstem +230 57 vstem +518 127 vstem +461 220 rmoveto +95 54 34 63 35 119 rrcurveto +20 63 rlineto +-127 0 rlineto +-25 -85 rlineto +-20 -67 -24 -43 -30 -18 rrcurveto +-105 213 rlineto +-160 0 rlineto +84 -173 rlineto +-91 -50 -36 -70 -33 -116 rrcurveto +-34 -110 rlineto +133 0 rlineto +30 103 rlineto +23 80 25 51 28 22 rrcurveto +126 -256 rlineto +162 0 rlineto +-110 220 rlineto +closepath +-249 -456 rmoveto +58 0 rlineto +17 82 rlineto +69 0 rlineto +11 51 rlineto +-196 0 rlineto +-11 -51 rlineto +70 0 rlineto +-18 -82 rlineto +closepath +endchar } ND +/alefmapiq { +0 583 hsbw +0 306 hstem +499 20 hstem +44 133 vstem +241 84 vstem +518 127 vstem +461 220 rmoveto +95 54 34 63 35 119 rrcurveto +20 63 rlineto +-127 0 rlineto +-25 -85 rlineto +-20 -67 -24 -43 -30 -18 rrcurveto +-105 213 rlineto +-160 0 rlineto +84 -173 rlineto +-91 -50 -36 -70 -33 -116 rrcurveto +-34 -110 rlineto +133 0 rlineto +30 103 rlineto +23 80 25 51 28 22 rrcurveto +126 -256 rlineto +162 0 rlineto +-110 220 rlineto +closepath +-169 -102 rmoveto +-27 0 -24 -23 0 -27 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/betdagesh { +0 576 hsbw +0 122 225 78 410 114 hstem3 +188 84 vstem +384 145 vstem +485 118 rmoveto +35 162 rlineto +6 28 3 25 0 24 rrcurveto +0 116 -74 51 -160 0 rrcurveto +-51 0 -52 -6 -52 -10 rrcurveto +-13 -108 rlineto +45 6 40 4 36 0 rrcurveto +89 0 47 -18 0 -79 rrcurveto +0 -17 -3 -19 -4 -22 rrcurveto +-29 -137 rlineto +-285 0 rlineto +-25 -118 rlineto +516 0 rlineto +25 118 rlineto +-94 0 rlineto +closepath +-247 185 rmoveto +-28 0 -22 -26 0 -24 rrcurveto +0 -22 11 -10 22 0 rrcurveto +25 0 26 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/gimeldagesh { +0 454 hsbw +0 20 hstem +248 82 hstem +412 112 hstem +5 137 vstem +148 84 vstem +304 145 vstem +192 515 rmoveto +-12 -106 rlineto +8 2 13 1 19 0 rrcurveto +56 0 28 -22 0 -44 rrcurveto +0 -10 -2 -12 -2 -12 rrcurveto +-21 -100 rlineto +-94 -8 -77 -49 -60 -90 rrcurveto +-43 -65 rlineto +137 0 rlineto +46 61 rlineto +25 33 30 20 36 6 rrcurveto +9 -120 rlineto +137 0 rlineto +-11 200 rlineto +26 123 rlineto +6 27 3 24 0 22 rrcurveto +0 85 -53 43 -105 0 rrcurveto +-40 0 -33 -3 -26 -6 rrcurveto +closepath +7 -185 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 23 0 rrcurveto +26 0 24 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/daletdagesh { +0 550 hsbw +0 20 hstem +221 83 hstem +400 118 hstem +222 84 vstem +308 137 vstem +610 400 rmoveto +26 118 rlineto +-501 0 rlineto +-26 -118 rlineto +284 0 rlineto +-85 -400 rlineto +137 0 rlineto +85 400 rlineto +80 0 rlineto +closepath +-337 -96 rmoveto +-27 0 -24 -24 0 -27 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/hedagesh { +0 614 hsbw +0 269 hstem +412 112 hstem +69 138 vstem +316 84 vstem +475 145 vstem +553 0 rmoveto +56 264 rlineto +7 32 4 28 0 25 rrcurveto +0 129 -90 46 -167 0 rrcurveto +-73 0 -64 -5 -54 -9 rrcurveto +-14 -110 rlineto +57 8 52 4 48 0 rrcurveto +98 0 62 -19 0 -91 rrcurveto +0 -18 -3 -19 -4 -21 rrcurveto +-51 -244 rlineto +136 0 rlineto +closepath +-289 269 rmoveto +-138 0 rlineto +-57 -269 rlineto +138 0 rlineto +57 269 rlineto +closepath +103 18 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/vavdagesh { +0 323 hsbw +0 323 hstem +498 20 hstem +59 84 vstem +227 140 vstem +367 518 rmoveto +-140 0 rlineto +-111 -518 rlineto +141 0 rlineto +110 518 rlineto +closepath +-257 -195 rmoveto +-28 0 -23 -24 0 -28 rrcurveto +0 -20 11 -10 22 0 rrcurveto +27 0 24 23 0 28 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/zayindagesh { +0 438 hsbw +0 20 hstem +221 82 hstem +420 99 hstem +55 84 vstem +152 127 vstem +501 420 rmoveto +21 99 rlineto +-352 0 rlineto +-25 -119 rlineto +143 0 rlineto +-63 -39 -27 -60 -8 -84 rrcurveto +-7 -56 -8 -51 -9 -44 rrcurveto +-14 -66 rlineto +127 0 rlineto +17 78 rlineto +10 47 7 54 5 62 rrcurveto +9 115 55 64 119 0 rrcurveto +closepath +-396 -117 rmoveto +-28 0 -22 -26 0 -24 rrcurveto +0 -22 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/tetdagesh { +0 626 hsbw +-12 114 hstem +212 82 hstem +410 120 hstem +109 138 vstem +329 84 vstem +504 140 vstem +388 366 rmoveto +26 29 25 15 25 0 rrcurveto +25 0 15 -22 0 -30 rrcurveto +0 -19 -4 -26 -6 -32 rrcurveto +-11 -51 rlineto +-18 -82 -53 -46 -72 0 rrcurveto +-59 0 -34 35 0 62 rrcurveto +0 18 2 21 5 24 rrcurveto +55 256 rlineto +-138 0 rlineto +-47 -225 rlineto +-10 -44 -5 -39 0 -32 rrcurveto +0 -119 86 -71 121 0 rrcurveto +189 0 139 213 0 160 rrcurveto +0 60 rlineto +0 73 -49 36 -70 0 rrcurveto +-62 0 -54 -31 -47 -60 rrcurveto +26 -73 rlineto +closepath +-9 -72 rmoveto +-27 0 -23 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/yoddagesh { +0 323 hsbw +229 289 hstem +70 85 vstem +227 140 vstem +367 518 rmoveto +-140 0 rlineto +-62 -289 rlineto +141 0 rlineto +61 289 rlineto +closepath +-246 -141 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -10 23 0 rrcurveto +25 0 26 25 0 27 rrcurveto +0 20 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/finalkafdagesh { +0 521 hsbw +-199 20 hstem +206 82 hstem +409 115 hstem +186 84 vstem +384 145 vstem +418 -199 rmoveto +102 479 rlineto +6 27 3 25 0 23 rrcurveto +0 112 -79 57 -158 0 rrcurveto +-61 0 -55 -6 -49 -10 rrcurveto +-13 -108 rlineto +52 6 41 3 31 0 rrcurveto +88 0 58 -19 0 -81 rrcurveto +0 -16 -3 -18 -4 -20 rrcurveto +-96 -454 rlineto +137 0 rlineto +closepath +-181 487 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/kafdagesh { +0 491 hsbw +-8 106 220 78 420 106 hstem3 +171 84 vstem +368 148 vstem +38 8 rmoveto +33 -10 40 -6 46 0 rrcurveto +207 0 152 171 0 170 rrcurveto +0 126 -95 67 -150 0 rrcurveto +-48 0 -42 -6 -36 -10 rrcurveto +0 -107 rlineto +33 11 29 6 30 0 rrcurveto +84 0 47 -44 0 -72 rrcurveto +0 -99 -84 -107 -116 0 rrcurveto +-29 0 -29 5 -30 12 rrcurveto +-42 -107 rlineto +closepath +184 290 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 23 0 rrcurveto +25 0 25 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/lameddagesh { +0 496 hsbw +0 321 hstem +400 119 hstem +696 20 hstem +166 84 vstem +555 519 rmoveto +-276 0 rlineto +42 197 rlineto +-137 0 rlineto +-67 -316 rlineto +276 0 rlineto +-14 -65 rlineto +-8 -35 -14 -29 -21 -22 rrcurveto +-17 -18 rlineto +-54 -56 -17 -29 -10 -53 rrcurveto +-20 -93 rlineto +136 0 rlineto +19 86 rlineto +6 30 19 32 31 34 rrcurveto +29 32 rlineto +34 38 13 34 22 99 rrcurveto +28 134 rlineto +closepath +-338 -198 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +25 0 26 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/memdagesh { +0 630 hsbw +0 118 hstem +208 82 hstem +406 118 hstem +137 124 vstem +348 84 vstem +493 138 vstem +268 407 rmoveto +-7 111 rlineto +-124 0 rlineto +32 -258 rlineto +-19 -33 -23 -49 -28 -65 rrcurveto +-48 -113 rlineto +145 0 rlineto +68 175 rlineto +50 128 35 103 92 0 rrcurveto +28 0 18 -14 6 -27 rrcurveto +0 -56 rlineto +0 -24 -6 -30 -8 -33 rrcurveto +-22 -104 rlineto +-127 0 rlineto +-25 -118 rlineto +264 0 rlineto +46 215 rlineto +10 51 6 45 0 38 rrcurveto +0 104 -49 71 -102 0 rrcurveto +-74 0 -70 -39 -68 -78 rrcurveto +closepath +130 -117 rmoveto +-27 0 -23 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/nundagesh { +0 386 hsbw +0 124 231 68 412 112 hstem3 +117 84 vstem +259 143 vstem +325 0 rmoveto +69 323 rlineto +5 26 3 24 0 22 rrcurveto +0 86 -53 43 -104 0 rrcurveto +-40 0 -33 -3 -26 -6 rrcurveto +-12 -106 rlineto +8 2 13 1 19 0 rrcurveto +51 0 34 -14 0 -49 rrcurveto +0 -11 -2 -12 -3 -14 rrcurveto +-41 -194 rlineto +-144 0 rlineto +-25 -118 rlineto +281 0 rlineto +closepath +-158 299 rmoveto +-27 0 -23 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 22 0 28 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/samekhdagesh { +0 613 hsbw +-12 112 220 78 418 112 hstem3 +85 145 321 82 495 143 vstem3 +419 530 rmoveto +-183 0 -151 -182 0 -159 rrcurveto +0 -123 86 -78 134 0 rrcurveto +178 0 155 170 0 170 rrcurveto +0 116 -81 86 -138 0 rrcurveto +closepath +-190 -321 rmoveto +0 87 64 122 103 0 rrcurveto +63 0 36 -44 0 -64 rrcurveto +0 -94 -74 -116 -92 0 rrcurveto +-66 0 -34 46 0 63 rrcurveto +closepath +141 89 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/finalpedagesh { +0 594 hsbw +-199 463 hstem +418 106 hstem +110 132 vstem +458 142 vstem +266 413 rmoveto +21 3 21 2 21 0 rrcurveto +84 0 45 -21 0 -76 rrcurveto +0 -20 -3 -22 -5 -25 rrcurveto +-96 -453 rlineto +136 0 rlineto +94 439 rlineto +10 50 6 41 0 33 rrcurveto +0 121 -83 39 -171 0 rrcurveto +-62 0 -63 -6 -65 -12 rrcurveto +-36 -174 rlineto +-7 -29 -3 -25 0 -22 rrcurveto +0 -74 40 -32 71 0 rrcurveto +26 0 24 5 24 10 rrcurveto +0 84 rlineto +-18 0 rlineto +-24 0 -11 13 0 27 rrcurveto +0 8 1 11 3 12 rrcurveto +20 93 rlineto +closepath +60 -189 rmoveto +-6 -23 14 -17 23 0 rrcurveto +25 0 24 24 0 25 rrcurveto +0 20 -11 11 -21 0 rrcurveto +-25 0 -20 -18 -3 -22 rrcurveto +closepath +endchar } ND +/pedagesh { +0 587 hsbw +-8 102 226 72 435 92 hstem3 +136 131 vstem +342 82 vstem +467 145 vstem +169 502 rmoveto +-26 -121 rlineto +-5 -23 -2 -20 0 -18 rrcurveto +0 -44 rlineto +11 -51 37 -25 64 0 rrcurveto +20 0 20 3 19 7 rrcurveto +7 88 rlineto +-18 -4 -13 5 -8 10 rrcurveto +-5 7 -3 8 0 9 rrcurveto +0 11 0 11 3 14 rrcurveto +12 60 rlineto +20 4 19 2 18 0 rrcurveto +85 0 43 -40 0 -80 rrcurveto +0 -113 -95 -113 -136 0 rrcurveto +-45 0 -45 9 -45 19 rrcurveto +-47 -92 rlineto +56 -22 59 -11 60 0 rrcurveto +208 0 175 159 0 176 rrcurveto +0 127 -102 73 -148 0 rrcurveto +-64 0 -65 -9 -64 -16 rrcurveto +closepath +222 -204 rmoveto +-30 0 -19 -27 0 -23 rrcurveto +0 -20 11 -10 22 0 rrcurveto +20 0 23 16 6 24 rrcurveto +0 12 rlineto +0 18 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/tsadidagesh { +0 512 hsbw +0 118 hstem +210 308 hstem +71 84 vstem +115 458 vstem +573 518 rmoveto +-133 0 rlineto +-22 -82 rlineto +-27 -100 -7 -10 -34 -9 rrcurveto +-87 201 rlineto +-148 0 rlineto +176 -400 rlineto +-231 0 rlineto +-25 -118 rlineto +411 0 rlineto +13 61 rlineto +-71 166 rlineto +77 36 51 54 22 76 rrcurveto +35 125 rlineto +closepath +-451 -226 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/qofdagesh { +0 573 hsbw +-199 20 hstem +0 323 hstem +400 118 hstem +121 136 vstem +290 84 vstem +148 400 rmoveto +321 0 rlineto +-13 -65 rlineto +-8 -35 -15 -29 -21 -22 rrcurveto +-16 -18 rlineto +-55 -58 -15 -27 -12 -53 rrcurveto +-20 -93 rlineto +138 0 rlineto +18 86 rlineto +6 30 18 32 31 34 rrcurveto +29 32 rlineto +34 38 13 34 22 99 rrcurveto +29 133 rlineto +-458 0 rlineto +-26 -118 rlineto +closepath +-127 -599 rmoveto +137 0 rlineto +99 468 rlineto +-136 0 rlineto +-100 -468 rlineto +closepath +319 522 rmoveto +-28 0 -22 -26 0 -24 rrcurveto +0 -22 11 -10 22 0 rrcurveto +27 0 24 23 0 28 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/reshdagesh { +0 521 hsbw +0 20 hstem +207 82 hstem +409 115 hstem +186 84 vstem +384 145 vstem +461 0 rmoveto +59 280 rlineto +6 26 3 25 0 23 rrcurveto +0 113 -78 57 -158 0 rrcurveto +-62 0 -55 -6 -49 -10 rrcurveto +-12 -108 rlineto +51 6 41 3 31 0 rrcurveto +101 0 45 -30 0 -72 rrcurveto +0 -16 -2 -17 -4 -19 rrcurveto +-54 -255 rlineto +137 0 rlineto +closepath +-225 289 rmoveto +-28 0 -22 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +25 0 26 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/shindagesh { +0 715 hsbw +-14 103 hstem +180 338 hstem +110 135 vstem +443 84 vstem +651 135 vstem +245 183 rmoveto +149 11 71 52 38 144 rrcurveto +34 128 rlineto +-133 0 rlineto +-25 -92 rlineto +-27 -106 -18 -50 -88 0 rrcurveto +0 13 rlineto +1 5 1 6 1 8 rrcurveto +5 38 4 26 4 15 rrcurveto +28 137 rlineto +-136 0 rlineto +-31 -175 rlineto +-9 -48 -4 -42 0 -36 rrcurveto +0 -151 83 -80 152 0 rrcurveto +202 0 110 106 70 228 rrcurveto +59 198 rlineto +-135 0 rlineto +-54 -190 rlineto +-44 -153 -50 -86 -138 0 rrcurveto +-67 0 -52 40 -1 54 rrcurveto +closepath +249 79 rmoveto +-28 0 -23 -23 0 -28 rrcurveto +0 -21 11 -10 22 0 rrcurveto +25 0 26 25 0 25 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/tavdages { +0 673 hsbw +-4 97 hstem +193 82 hstem +415 109 hstem +380 84 vstem +534 143 vstem +65 103 rmoveto +-40 -89 rlineto +35 -12 38 -6 42 0 rrcurveto +105 0 43 41 26 119 rrcurveto +56 259 rlineto +112 0 52 6 0 -92 rrcurveto +0 -21 -4 -25 -6 -28 rrcurveto +-54 -255 rlineto +137 0 rlineto +60 280 rlineto +6 31 4 28 0 24 rrcurveto +0 136 -115 25 -160 0 rrcurveto +-90 0 -89 -6 -86 -10 rrcurveto +-12 -106 rlineto +48 5 35 3 23 0 rrcurveto +-52 -248 rlineto +-12 -54 -13 -15 -38 0 rrcurveto +-16 0 -17 3 -18 7 rrcurveto +closepath +366 172 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/vavholam { +0 273 hsbw +0 20 hstem +499 20 hstem +578 82 hstem +66 141 vstem +226 84 vstem +317 519 rmoveto +-141 0 rlineto +-110 -519 rlineto +141 0 rlineto +110 519 rlineto +closepath +-41 141 rmoveto +-27 0 -23 -24 0 -27 rrcurveto +0 -21 11 -10 22 0 rrcurveto +26 0 25 22 0 28 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/betrafe { +0 576 hsbw +0 118 hstem +410 114 hstem +611 51 hstem +384 145 vstem +485 118 rmoveto +35 162 rlineto +6 28 3 25 0 24 rrcurveto +0 116 -74 51 -160 0 rrcurveto +-51 0 -52 -6 -52 -10 rrcurveto +-13 -108 rlineto +45 6 40 4 36 0 rrcurveto +89 0 47 -18 0 -79 rrcurveto +0 -17 -3 -19 -4 -22 rrcurveto +-29 -137 rlineto +-285 0 rlineto +-25 -118 rlineto +516 0 rlineto +25 118 rlineto +-94 0 rlineto +closepath +-207 493 rmoveto +197 0 rlineto +10 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/kafrafe { +0 491 hsbw +-8 106 hstem +420 106 hstem +611 51 hstem +368 147 vstem +38 8 rmoveto +33 -10 40 -6 46 0 rrcurveto +208 0 150 163 0 178 rrcurveto +0 126 -94 67 -150 0 rrcurveto +-48 0 -42 -6 -36 -10 rrcurveto +0 -107 rlineto +34 11 28 6 30 0 rrcurveto +82 0 49 -44 0 -72 rrcurveto +0 -99 -86 -107 -114 0 rrcurveto +-29 0 -29 5 -30 12 rrcurveto +-42 -107 rlineto +closepath +209 603 rmoveto +196 0 rlineto +11 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/perafe { +0 587 hsbw +-8 97 hstem +435 92 hstem +611 51 hstem +133 134 vstem +467 145 vstem +169 502 rmoveto +-26 -121 rlineto +-7 -31 -3 -26 0 -20 rrcurveto +0 -74 46 -31 76 0 rrcurveto +27 0 26 5 26 10 rrcurveto +-5 84 rlineto +-17 0 rlineto +-31 0 -14 15 0 30 rrcurveto +0 12 rlineto +1 4 1 5 1 5 rrcurveto +12 60 rlineto +20 4 19 2 18 0 rrcurveto +85 0 43 -40 0 -80 rrcurveto +0 -113 -95 -113 -136 0 rrcurveto +-45 0 -45 9 -45 19 rrcurveto +-47 -92 rlineto +56 -22 59 -11 60 0 rrcurveto +209 0 174 162 0 174 rrcurveto +0 128 -101 71 -149 0 rrcurveto +-64 0 -64 -9 -65 -16 rrcurveto +closepath +148 109 rmoveto +197 0 rlineto +10 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/aleflamed { +0 607 hsbw +0 306 hstem +498 20 hstem +696 20 hstem +69 133 vstem +542 127 vstem +235 400 rmoveto +27 -54 rlineto +-91 -50 -36 -72 -33 -114 rrcurveto +-33 -110 rlineto +133 0 rlineto +29 103 rlineto +23 80 25 51 28 22 rrcurveto +127 -256 rlineto +161 0 rlineto +-110 220 rlineto +96 55 33 63 35 117 rrcurveto +20 63 rlineto +-127 0 rlineto +-25 -85 rlineto +-20 -66 -24 -43 -30 -18 rrcurveto +-104 212 rlineto +-60 0 rlineto +42 198 rlineto +-137 0 rlineto +-67 -316 rlineto +118 0 rlineto +closepath +endchar } ND +/zerowidthnonjoiner { +0 0 hsbw +-134 20 hstem +609 20 hstem +-18 36 vstem +18 629 rmoveto +-36 0 rlineto +0 -763 rlineto +36 0 rlineto +0 763 rlineto +closepath +endchar } ND +/zerowidthjoiner { +0 0 hsbw +-134 20 hstem +586 20 hstem +-18 36 vstem +18 -134 rmoveto +0 678 rlineto +65 -66 rlineto +24 23 rlineto +-84 83 rlineto +84 82 rlineto +-24 24 rlineto +-83 -84 rlineto +-83 84 rlineto +-24 -24 rlineto +84 -82 rlineto +-84 -83 rlineto +24 -23 rlineto +65 66 rlineto +0 -678 rlineto +36 0 rlineto +closepath +endchar } ND +/lefttorightmark { +0 0 hsbw +568 35 hstem +-18 35 vstem +210 585 rmoveto +-106 105 rlineto +-24 -24 rlineto +67 -63 rlineto +-165 0 rlineto +0 -737 rlineto +35 0 rlineto +0 702 rlineto +130 0 rlineto +-67 -64 rlineto +24 -24 rlineto +106 105 rlineto +closepath +endchar } ND +/righttoleftmark { +0 0 hsbw +568 35 hstem +-18 35 vstem +17 -134 rmoveto +0 737 rlineto +-164 0 rlineto +66 63 rlineto +-23 24 rlineto +-106 -105 rlineto +106 -105 rlineto +23 24 rlineto +-66 64 rlineto +129 0 rlineto +0 -702 rlineto +35 0 rlineto +closepath +endchar } ND +/uni202A { +0 0 hsbw +568 35 hstem +-18 36 vstem +18 568 rmoveto +192 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -737 rlineto +36 0 rlineto +0 702 rlineto +closepath +endchar } ND +/uni202B { +0 0 hsbw +568 35 hstem +-18 36 vstem +-210 568 rmoveto +192 0 rlineto +0 -702 rlineto +36 0 rlineto +0 737 rlineto +-228 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uni202D { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 vstem +-18 36 vstem +114 480 rmoveto +0 35 rlineto +-194 0 rlineto +0 140 rlineto +194 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni202E { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +80 34 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -35 rlineto +194 0 rlineto +0 -140 rlineto +-194 0 rlineto +closepath +endchar } ND +/uni202C { +0 0 hsbw +480 210 hstem +-18 36 vstem +114 480 rmoveto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni206E { +0 0 hsbw +506 20 hstem +644 46 hstem +-114 49 -18 36 65 49 vstem3 +18 -134 rmoveto +0 630 rlineto +96 89 rlineto +-114 105 rlineto +-114 -105 rlineto +96 -89 rlineto +0 -630 rlineto +36 0 rlineto +closepath +47 719 rmoveto +-65 -59 rlineto +-65 59 rlineto +65 59 rlineto +65 -59 rlineto +closepath +endchar } ND +/uni206F { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 175 rlineto +-132 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206A { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 140 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206B { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 -18 36 80 34 vstem3 +-80 515 rmoveto +0 140 rlineto +160 0 rlineto +0 -140 rlineto +-160 0 rlineto +closepath +-34 -35 rmoveto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +closepath +endchar } ND +/uni206C { +0 0 hsbw +-134 20 hstem +670 20 hstem +-18 36 vstem +18 -134 rmoveto +0 646 rlineto +96 178 rlineto +-228 0 rlineto +96 -178 rlineto +0 -646 rlineto +36 0 rlineto +closepath +endchar } ND +/uni206D { +0 0 hsbw +-134 20 hstem +670 20 hstem +-18 36 vstem +18 480 rmoveto +96 0 rlineto +-114 210 rlineto +-114 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +closepath +endchar } ND +/uniF00A { +0 0 hsbw +-208 473 hstem +421 473 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +0 -629 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +endchar } ND +/uniF00B { +0 0 hsbw +-208 35 hstem +859 35 hstem +-18 36 vstem +-114 -208 rmoveto +228 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1032 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -1032 rlineto +-96 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uniF00C { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +109 804 rmoveto +-127 90 rlineto +0 -1102 rlineto +36 0 rlineto +0 942 rlineto +91 70 rlineto +closepath +endchar } ND +/uniF00D { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-127 -90 rlineto +91 -70 rlineto +0 -942 rlineto +36 0 rlineto +0 1102 rlineto +closepath +endchar } ND +/uniF00E { +0 0 hsbw +-208 35 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -1102 rlineto +132 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1067 rlineto +closepath +endchar } ND +/currency { +0 556 hsbw +139 118 hstem +454 118 hstem +60 118 vstem +375 118 vstem +86 459 rmoveto +-18 -31 -8 -36 0 -37 rrcurveto +0 -36 9 -37 19 -33 rrcurveto +-64 -64 rlineto +83 -82 rlineto +64 64 rlineto +33 -19 36 -9 36 0 rrcurveto +38 0 35 9 34 19 rrcurveto +66 -66 rlineto +82 83 rlineto +-66 65 rlineto +18 33 10 37 0 36 rrcurveto +0 38 -10 35 -18 34 rrcurveto +65 65 rlineto +-82 82 rlineto +-65 -65 rlineto +-35 18 -35 10 -37 0 rrcurveto +-36 0 -37 -10 -34 -18 rrcurveto +-66 66 rlineto +-81 -87 rlineto +64 -64 rlineto +closepath +92 -104 rmoveto +0 54 43 45 55 0 rrcurveto +54 0 45 -45 0 -54 rrcurveto +0 -55 -45 -43 -54 0 rrcurveto +-54 0 -44 43 0 55 rrcurveto +closepath +endchar } ND +/uniFFFC { +0 1000 hsbw +0 49 hstem +187 47 hstem +342 48 hstem +484 48 hstem +670 49 hstem +0 49 vstem +109 57 vstem +360 57 vstem +444 56 vstem +624 56 vstem +813 57 vstem +951 49 vstem +1000 562 rmoveto +0 157 rlineto +-158 0 rlineto +0 -49 rlineto +109 0 rlineto +0 -108 rlineto +49 0 rlineto +closepath +-281 108 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +281 -389 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +-130 17 rmoveto +0 234 rlineto +-57 0 rlineto +0 -236 rlineto +0 -45 -16 -22 -30 0 rrcurveto +-13 0 -11 4 -8 8 rrcurveto +-35 -38 rlineto +16 -15 23 -7 28 0 rrcurveto +68 0 35 39 0 78 rrcurveto +closepath +-432 372 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +562 -670 rmoveto +0 158 rlineto +-49 0 rlineto +0 -109 rlineto +-109 0 rlineto +0 -49 rlineto +158 0 rlineto +closepath +-305 289 rmoveto +0 39 -20 27 -38 16 rrcurveto +28 17 15 23 0 30 rrcurveto +0 60 -41 31 -80 0 rrcurveto +-115 0 rlineto +0 -345 rlineto +117 0 rlineto +89 0 45 34 0 68 rrcurveto +closepath +-537 381 rmoveto +0 49 rlineto +-158 0 rlineto +0 -157 rlineto +49 0 rlineto +0 108 rlineto +109 0 rlineto +closepath +561 -670 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-302 359 rmoveto +0 113 -55 66 -100 0 rrcurveto +-99 0 -54 -66 0 -113 rrcurveto +0 -114 54 -64 99 0 rrcurveto +100 0 55 64 0 114 rrcurveto +closepath +-368 -78 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +389 -281 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-280 0 rmoveto +0 49 rlineto +-109 0 rlineto +0 109 rlineto +-49 0 rlineto +0 -158 rlineto +158 0 rlineto +closepath +466 436 rmoveto +0 -31 -25 -15 -49 0 rrcurveto +-50 0 rlineto +0 94 rlineto +44 0 rlineto +53 0 27 -16 0 -32 rrcurveto +closepath +14 -147 rmoveto +0 -37 -26 -18 -51 0 rrcurveto +-61 0 rlineto +0 108 rlineto +55 0 rlineto +55 0 28 -18 0 -35 rrcurveto +closepath +-278 70 rmoveto +0 -87 -33 -43 -65 0 rrcurveto +-64 0 -32 43 0 87 rrcurveto +0 87 32 44 64 0 rrcurveto +65 0 33 -44 0 -87 rrcurveto +closepath +endchar } ND +/_766 { +0 837 hsbw +-13 123 hstem +605 123 hstem +87 146 vstem +637 147 vstem +818 141 vstem +233 284 rmoveto +0 157 96 164 147 0 rrcurveto +98 0 63 -76 0 -105 rrcurveto +0 -136 -96 -178 -145 0 rrcurveto +-96 0 -67 74 0 100 rrcurveto +closepath +585 432 rmoveto +-28 -135 rlineto +64 0 rlineto +-11 -48 -25 -30 -39 -11 rrcurveto +-24 143 -114 93 -153 0 rrcurveto +-242 0 -159 -244 0 -203 rrcurveto +0 -154 125 -140 168 0 rrcurveto +231 0 173 216 0 224 rrcurveto +78 11 51 59 23 107 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/_767 { +0 671 hsbw +-12 108 hstem +425 106 hstem +61 140 vstem +460 139 vstem +639 141 vstem +460 315 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-63 0 -44 49 0 72 rrcurveto +0 84 57 124 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +179 204 rmoveto +-29 -136 rlineto +64 0 rlineto +-11 -48 -25 -29 -39 -11 rrcurveto +0 2 rlineto +0 144 -91 90 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +0 -129 89 -98 153 0 rrcurveto +151 0 111 105 28 136 rrcurveto +85 7 54 59 24 112 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/_768 { +0 809 hsbw +-12 123 hstem +581 135 hstem +91 144 vstem +618 147 vstem +808 141 vstem +808 716 rmoveto +-29 -135 rlineto +64 0 rlineto +-15 -70 -32 -20 -78 0 rrcurveto +47 225 rlineto +-147 0 rlineto +-82 -391 rlineto +-31 -143 -26 -71 -123 0 rrcurveto +-71 0 -50 33 0 64 rrcurveto +0 23 rlineto +103 485 rlineto +-147 0 rlineto +-79 -377 rlineto +-15 -68 -6 -27 0 -37 rrcurveto +0 -142 106 -77 152 0 rrcurveto +204 0 84 111 47 225 rrcurveto +21 102 rlineto +152 4 41 44 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/_769 { +0 714 hsbw +-12 100 hstem +383 136 hstem +70 142 vstem +380 131 vstem +661 141 vstem +661 519 rmoveto +-29 -136 rlineto +65 0 rlineto +-15 -69 -33 -21 -77 0 rrcurveto +47 226 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -55 -66 -77 0 rrcurveto +-34 0 -25 24 0 31 rrcurveto +0 8 4 22 8 38 rrcurveto +64 308 rlineto +-141 0 rlineto +-60 -290 rlineto +-12 -53 -5 -35 0 -18 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +48 229 rlineto +150 2 43 46 27 130 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +endchar } ND +/_770 { +0 0 hsbw +829 76 hstem +-6 86 vstem +80 829 rmoveto +-58 76 rlineto +-153 0 rlineto +125 -76 rlineto +86 0 rlineto +closepath +endchar } ND +/_771 { +0 0 hsbw +829 76 hstem +-268 87 vstem +-181 829 rmoveto +-58 76 rlineto +-154 0 rlineto +125 -76 rlineto +87 0 rlineto +closepath +endchar } ND +/_772 { +0 0 hsbw +754 138 hstem +-205 95 vstem +-306 892 rmoveto +101 -138 rlineto +95 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/f006 { +0 0 hsbw +885 20 hstem +-76 87 vstem +31 154 vstem +-76 829 rmoveto +87 0 rlineto +174 76 rlineto +-154 0 rlineto +-107 -76 rlineto +closepath +endchar } ND +/f007 { +0 0 hsbw +885 20 hstem +-298 87 vstem +-190 153 vstem +-298 829 rmoveto +87 0 rlineto +174 76 rlineto +-153 0 rlineto +-108 -76 rlineto +closepath +endchar } ND +/f009 { +0 0 hsbw +753 139 hstem +-205 93 vstem +-112 892 rmoveto +-93 -139 rlineto +93 0 rlineto +149 139 rlineto +-149 0 rlineto +closepath +endchar } ND +/_776 { +0 0 hsbw +854 51 hstem +-92 198 vstem +-17 794 rmoveto +-28 -3 rlineto +-12 -44 rlineto +55 0 rlineto +4 15 rlineto +56 6 48 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +30 0 21 -4 12 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-3 -13 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f010 { +0 0 hsbw +874 31 hstem +-99 187 vstem +-25 840 rmoveto +-19 -1 rlineto +-6 -30 rlineto +46 0 rlineto +2 10 rlineto +56 4 34 14 0 24 rrcurveto +0 29 -37 15 -85 0 rrcurveto +-65 0 rlineto +0 -31 rlineto +42 0 rlineto +28 0 19 -1 11 -4 rrcurveto +8 -3 4 -4 -1 -4 rrcurveto +-2 -7 -9 -5 -16 -4 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/f013 { +0 0 hsbw +854 51 hstem +-229 198 vstem +-154 794 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +56 6 48 25 0 46 rrcurveto +0 53 -63 13 -64 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +30 0 21 -4 12 -7 rrcurveto +8 -6 4 -6 -2 -7 rrcurveto +-3 -13 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f011 { +0 0 hsbw +874 31 hstem +-318 187 vstem +-244 840 rmoveto +-19 -1 rlineto +-6 -30 rlineto +45 0 rlineto +2 10 rlineto +58 4 33 14 0 24 rrcurveto +0 29 -36 15 -86 0 rrcurveto +-65 0 rlineto +0 -31 rlineto +42 0 rlineto +28 0 19 -1 11 -4 rrcurveto +8 -3 4 -4 -1 -4 rrcurveto +-2 -7 -9 -5 -16 -4 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/f01c { +0 0 hsbw +764 65 hstem +-179 65 vstem +105 64 vstem +-179 763 rmoveto +65 0 rlineto +6 30 15 16 25 0 rrcurveto +10 0 15 -6 19 -11 rrcurveto +31 -18 24 -10 21 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-64 0 rlineto +-9 -31 -14 -15 -20 0 rrcurveto +-14 0 -14 5 -16 11 rrcurveto +-29 20 -27 9 -21 0 rrcurveto +-58 0 -50 -45 -12 -66 rrcurveto +closepath +endchar } ND +/f015 { +0 0 hsbw +822 84 hstem +-395 65 vstem +-114 63 vstem +-395 821 rmoveto +65 0 rlineto +4 24 15 13 25 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +32 -15 25 -7 20 0 rrcurveto +62 0 38 28 13 56 rrcurveto +-63 0 rlineto +-8 -24 -15 -12 -20 0 rrcurveto +-10 0 -15 3 -18 8 rrcurveto +-33 15 -25 9 -21 0 rrcurveto +-58 0 -48 -31 -10 -53 rrcurveto +closepath +endchar } ND +/_782 { +0 0 hsbw +764 65 hstem +-323 65 vstem +-38 63 vstem +-323 763 rmoveto +65 0 rlineto +6 30 15 16 25 0 rrcurveto +10 0 15 -5 20 -12 rrcurveto +30 -18 25 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-63 0 rlineto +-9 -31 -15 -15 -20 0 rrcurveto +-13 0 -13 5 -17 11 rrcurveto +-30 19 -27 10 -20 0 rrcurveto +-60 0 -49 -45 -12 -66 rrcurveto +closepath +endchar } ND +/_783 { +0 0 hsbw +728 37 hstem +-24 47 vstem +231 49 vstem +-24 797 rmoveto +7 -50 62 -19 67 0 rrcurveto +72 0 55 17 41 52 rrcurveto +-49 0 rlineto +-25 -21 -50 -11 -37 0 rrcurveto +-43 0 -43 14 -10 18 rrcurveto +-47 0 rlineto +closepath +endchar } ND +/_784 { +0 0 hsbw +778 27 hstem +-29 97 vstem +86 91 vstem +130 778 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +endchar } ND +/f02c { +0 0 hsbw +-194 135 hstem +-189 138 vstem +-189 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_786 { +0 513 hsbw +92 64 hstem +208 75 hstem +513 73 hstem +617 99 hstem +93 99 vstem +326 89 vstem +418 96 vstem +404 617 rmoveto +-17 -81 rlineto +-22 33 -32 17 -41 0 rrcurveto +-123 0 -76 -143 0 -105 rrcurveto +0 -75 46 -55 72 0 rrcurveto +46 0 42 20 38 41 rrcurveto +-11 -53 rlineto +89 0 rlineto +85 401 rlineto +38 0 rlineto +14 63 rlineto +-38 0 rlineto +7 36 rlineto +-96 0 rlineto +-7 -36 rlineto +-104 0 rlineto +-13 -63 rlineto +103 0 rlineto +closepath +-212 -262 rmoveto +0 58 39 100 71 0 rrcurveto +38 0 23 -27 0 -42 rrcurveto +0 -62 -39 -99 -70 0 rrcurveto +-41 0 -21 29 0 43 rrcurveto +closepath +-160 -263 rmoveto +402 0 rlineto +13 64 rlineto +-402 0 rlineto +-13 -64 rlineto +closepath +endchar } ND +/_787 { +0 834 hsbw +-27 70 hstem +167 558 hstem +85 85 vstem +174 96 vstem +302 60 vstem +736 94 vstem +115 556 rmoveto +38 6 36 12 36 16 rrcurveto +9 4 rlineto +-60 -240 rlineto +96 0 rlineto +92 371 rlineto +-60 0 rlineto +-44 -40 -99 -53 -25 0 rrcurveto +-19 -76 rlineto +closepath +55 -586 rmoveto +655 755 rlineto +-85 0 rlineto +-655 -755 rlineto +85 0 rlineto +closepath +347 114 rmoveto +11 -74 46 -37 80 0 rrcurveto +78 0 78 53 0 68 rrcurveto +0 23 -7 18 -13 12 rrcurveto +-12 12 rlineto +-4 1 -1 2 0 2 rrcurveto +0 3 rlineto +1 1 3 2 4 2 rrcurveto +5 2 5 3 6 6 rrcurveto +21 13 12 22 0 32 rrcurveto +0 62 -56 36 -68 0 rrcurveto +-71 0 -47 -30 -27 -74 rrcurveto +88 -15 rlineto +10 33 16 17 24 0 rrcurveto +24 0 13 -10 0 -20 rrcurveto +0 -31 -20 -15 -40 0 rrcurveto +-14 0 rlineto +-19 -70 rlineto +23 0 rlineto +32 0 16 -14 0 -26 rrcurveto +0 -28 -23 -22 -36 0 rrcurveto +-26 0 -16 16 -6 34 rrcurveto +-90 -9 rlineto +closepath +endchar } ND +/_788 { +0 834 hsbw +-27 70 hstem +133 70 hstem +279 69 hstem +355 77 hstem +657 68 hstem +85 85 vstem +304 92 vstem +736 94 vstem +170 -30 rmoveto +655 755 rlineto +-85 0 rlineto +-655 -755 rlineto +85 0 rlineto +closepath +347 114 rmoveto +11 -74 46 -37 80 0 rrcurveto +78 0 78 53 0 68 rrcurveto +0 23 -7 18 -13 12 rrcurveto +-12 12 rlineto +-4 1 -1 2 0 2 rrcurveto +0 3 rlineto +1 1 3 2 4 2 rrcurveto +5 2 5 3 6 6 rrcurveto +21 13 12 22 0 32 rrcurveto +0 62 -56 36 -68 0 rrcurveto +-71 0 -47 -30 -27 -74 rrcurveto +88 -15 rlineto +10 33 16 17 24 0 rrcurveto +24 0 13 -10 0 -20 rrcurveto +0 -31 -20 -15 -40 0 rrcurveto +-14 0 rlineto +-19 -70 rlineto +23 0 rlineto +32 0 16 -14 0 -26 rrcurveto +0 -28 -23 -22 -36 0 rrcurveto +-26 0 -16 16 -6 34 rrcurveto +-90 -9 rlineto +closepath +-304 515 rmoveto +9 38 18 20 26 0 rrcurveto +25 0 13 -12 0 -22 rrcurveto +0 -42 -37 -14 -50 -41 rrcurveto +-82 -68 -42 -21 -11 -82 rrcurveto +268 0 rlineto +19 77 rlineto +-139 0 rlineto +16 14 13 11 10 7 rrcurveto +75 53 52 34 0 72 rrcurveto +0 65 -59 37 -73 0 rrcurveto +-81 0 -48 -39 -14 -76 rrcurveto +92 -11 rlineto +closepath +endchar } ND +/f008 { +0 0 hsbw +584 139 hstem +-126 93 vstem +-33 723 rmoveto +-93 -139 rlineto +93 0 rlineto +149 139 rlineto +-149 0 rlineto +closepath +endchar } ND +/_790 { +0 0 hsbw +584 139 hstem +-270 94 vstem +-177 723 rmoveto +-93 -139 rlineto +94 0 rlineto +149 139 rlineto +-150 0 rlineto +closepath +endchar } ND +/_791 { +0 0 hsbw +584 138 hstem +-66 95 vstem +-167 722 rmoveto +101 -138 rlineto +95 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/f00f { +0 0 hsbw +584 138 hstem +-221 95 vstem +-322 722 rmoveto +101 -138 rlineto +95 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/f012 { +0 0 hsbw +706 51 hstem +-77 55 vstem +-37 646 rmoveto +-29 -3 rlineto +-11 -59 rlineto +55 0 rlineto +0 24 rlineto +53 6 55 31 0 45 rrcurveto +0 53 -65 14 -63 0 rrcurveto +-34 0 -23 -2 -13 -2 rrcurveto +-5 -47 rlineto +47 0 rlineto +30 0 21 -4 12 -8 rrcurveto +8 -5 3 -6 -2 -8 rrcurveto +-2 -12 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f014 { +0 0 hsbw +706 51 hstem +-235 55 vstem +-195 646 rmoveto +-29 -3 rlineto +-11 -59 rlineto +55 0 rlineto +0 24 rlineto +55 6 53 31 0 45 rrcurveto +0 53 -63 14 -64 0 rrcurveto +-34 0 -23 -2 -14 -2 rrcurveto +0 -47 rlineto +42 0 rlineto +30 0 21 -4 12 -8 rrcurveto +8 -5 4 -6 -2 -8 rrcurveto +-3 -12 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/f016 { +0 0 hsbw +764 65 hstem +-411 65 vstem +-126 63 vstem +-411 763 rmoveto +65 0 rlineto +6 30 15 16 25 0 rrcurveto +10 0 15 -5 20 -12 rrcurveto +30 -18 25 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-63 0 rlineto +-9 -31 -14 -15 -20 0 rrcurveto +-14 0 -13 5 -17 11 rrcurveto +-30 19 -27 10 -20 0 rrcurveto +-58 0 -51 -45 -12 -66 rrcurveto +closepath +endchar } ND +/f017 { +0 0 hsbw +764 65 hstem +-508 65 vstem +-224 64 vstem +-508 763 rmoveto +65 0 rlineto +5 30 15 16 26 0 rrcurveto +10 0 15 -6 19 -11 rrcurveto +31 -18 25 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-64 0 rlineto +-8 -31 -15 -15 -20 0 rrcurveto +-14 0 -14 5 -16 11 rrcurveto +-29 20 -27 9 -21 0 rrcurveto +-58 0 -51 -45 -11 -66 rrcurveto +closepath +endchar } ND +/f018 { +0 0 hsbw +764 65 hstem +-508 65 vstem +-224 64 vstem +-508 763 rmoveto +65 0 rlineto +5 30 15 16 26 0 rrcurveto +10 0 15 -6 19 -11 rrcurveto +31 -18 25 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-64 0 rlineto +-8 -31 -15 -15 -20 0 rrcurveto +-14 0 -14 5 -16 11 rrcurveto +-29 20 -27 9 -21 0 rrcurveto +-58 0 -51 -45 -11 -66 rrcurveto +closepath +endchar } ND +/f019 { +0 0 hsbw +632 78 hstem +-354 62 vstem +-81 63 vstem +-292 592 rmoveto +10 30 15 10 18 0 rrcurveto +10 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 14 0 rrcurveto +46 0 41 37 12 80 rrcurveto +-63 0 rlineto +-8 -31 -10 -7 -15 0 rrcurveto +-9 0 -17 4 -27 10 rrcurveto +-42 16 -31 8 -17 0 rrcurveto +-56 0 -24 -44 -17 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/f01a { +0 0 hsbw +632 78 hstem +-468 61 vstem +-195 63 vstem +-407 592 rmoveto +11 30 15 10 18 0 rrcurveto +9 0 27 -9 26 -10 rrcurveto +27 -10 29 -10 14 0 rrcurveto +46 0 40 37 13 80 rrcurveto +-63 0 rlineto +-9 -31 -9 -7 -16 0 rrcurveto +-9 0 -16 4 -27 10 rrcurveto +-42 16 -31 8 -18 0 rrcurveto +-57 0 -22 -44 -17 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/f01b { +0 0 hsbw +632 78 hstem +-483 62 vstem +-209 62 vstem +-421 592 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +26 -10 30 -10 14 0 rrcurveto +47 0 40 37 12 80 rrcurveto +-62 0 rlineto +-9 -31 -10 -7 -15 0 rrcurveto +-9 0 -16 4 -27 10 rrcurveto +-43 16 -31 8 -17 0 rrcurveto +-56 0 -24 -44 -17 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/f01e { +0 0 hsbw +-194 135 hstem +-421 138 vstem +-421 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/f01f { +0 0 hsbw +-194 135 hstem +-470 138 vstem +-470 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/f020 { +0 0 hsbw +-194 135 hstem +-557 139 vstem +-529 -59 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/f021 { +0 0 hsbw +-194 135 hstem +-444 138 vstem +-444 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/f022 { +0 0 hsbw +-194 135 hstem +-557 139 vstem +-529 -59 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_806 { +0 0 hsbw +754 138 hstem +-37 95 vstem +-138 892 rmoveto +101 -138 rlineto +95 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/_807 { +0 0 hsbw +753 139 hstem +-89 93 vstem +3 892 rmoveto +-92 -139 rlineto +93 0 rlineto +149 139 rlineto +-150 0 rlineto +closepath +endchar } ND +/f01d { +0 0 hsbw +632 78 hstem +-215 62 vstem +59 62 vstem +-153 592 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +26 -10 30 -10 14 0 rrcurveto +46 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -31 -10 -7 -14 0 rrcurveto +-10 0 -15 4 -27 10 rrcurveto +-43 16 -31 8 -17 0 rrcurveto +-56 0 -24 -44 -17 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/_809 { +0 0 hsbw +-194 135 hstem +-470 138 vstem +-470 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/f023 { +0 0 hsbw +-194 135 hstem +-413 139 vstem +-385 -59 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/f029 { +0 0 hsbw +-194 135 hstem +-253 138 vstem +-253 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/f02a { +0 0 hsbw +-194 135 hstem +-276 138 vstem +-248 -59 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/f02b { +0 0 hsbw +-194 135 hstem +-276 138 vstem +-248 -59 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/f024 { +0 0 hsbw +-194 135 hstem +-364 138 vstem +-336 -59 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/f025 { +0 0 hsbw +-194 135 hstem +-413 139 vstem +-385 -59 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/f026 { +0 0 hsbw +-194 135 hstem +-438 138 vstem +-438 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/f027 { +0 0 hsbw +-194 135 hstem +-462 139 vstem +-434 -59 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/f028 { +0 0 hsbw +-194 135 hstem +-531 138 vstem +-531 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/f02d { +0 0 hsbw +822 84 hstem +-341 65 vstem +-61 64 vstem +-341 821 rmoveto +65 0 rlineto +4 24 15 13 25 0 rrcurveto +10 0 16 -5 19 -9 rrcurveto +32 -15 25 -7 20 0 rrcurveto +62 0 37 28 14 56 rrcurveto +-64 0 rlineto +-8 -24 -14 -12 -20 0 rrcurveto +-11 0 -14 3 -18 8 rrcurveto +-33 15 -25 9 -21 0 rrcurveto +-58 0 -48 -31 -10 -53 rrcurveto +closepath +endchar } ND +/f02e { +0 0 hsbw +764 65 hstem +-345 65 vstem +-61 64 vstem +-345 763 rmoveto +65 0 rlineto +6 30 15 16 25 0 rrcurveto +10 0 15 -6 19 -11 rrcurveto +31 -18 25 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-64 0 rlineto +-8 -31 -15 -15 -20 0 rrcurveto +-14 0 -14 5 -16 11 rrcurveto +-29 20 -27 9 -21 0 rrcurveto +-58 0 -50 -45 -12 -66 rrcurveto +closepath +endchar } ND +/f02f { +0 0 hsbw +822 84 hstem +-444 65 vstem +-163 63 vstem +-444 821 rmoveto +65 0 rlineto +4 24 15 13 26 0 rrcurveto +10 0 15 -5 19 -9 rrcurveto +32 -15 26 -7 20 0 rrcurveto +62 0 37 28 13 56 rrcurveto +-63 0 rlineto +-8 -24 -15 -12 -20 0 rrcurveto +-10 0 -15 3 -18 8 rrcurveto +-33 15 -25 9 -21 0 rrcurveto +-58 0 -48 -31 -10 -53 rrcurveto +closepath +endchar } ND +/f030 { +0 0 hsbw +764 65 hstem +-448 65 vstem +-163 63 vstem +-448 763 rmoveto +65 0 rlineto +6 30 15 16 25 0 rrcurveto +10 0 15 -5 20 -12 rrcurveto +30 -18 25 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-63 0 rlineto +-9 -31 -15 -15 -20 0 rrcurveto +-13 0 -13 5 -17 11 rrcurveto +-30 19 -27 10 -20 0 rrcurveto +-60 0 -49 -45 -12 -66 rrcurveto +closepath +endchar } ND +/f031 { +0 278 hsbw +0 20 hstem +499 20 hstem +40 140 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +endchar } ND +/_824 { +0 722 hsbw +-194 135 hstem +0 20 hstem +158 119 hstem +565 151 hstem +-11 163 276 122 534 139 vstem3 +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-232 -336 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_825 { +0 556 hsbw +-194 135 hstem +-12 105 hstem +431 100 hstem +45 132 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-219 -301 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_826 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +854 51 hstem +-11 151 vstem +416 198 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-1 517 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +56 6 48 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-4 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_827 { +0 556 hsbw +-12 105 hstem +431 100 hstem +706 51 hstem +45 132 vstem +323 55 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-8 404 rmoveto +-29 -3 rlineto +-11 -59 rlineto +55 0 rlineto +0 24 rlineto +55 6 53 31 0 45 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-34 0 -24 -2 -13 -2 rrcurveto +0 -47 rlineto +42 0 rlineto +30 0 21 -4 12 -8 rrcurveto +8 -5 3 -6 -1 -8 rrcurveto +-4 -12 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_828 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +740 165 hstem +-11 151 vstem +407 87 vstem +532 96 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-4 501 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +-81 51 rmoveto +87 0 rlineto +174 76 rlineto +-154 0 rlineto +-107 -76 rlineto +closepath +endchar } ND +/_829 { +0 556 hsbw +-12 105 hstem +431 100 hstem +671 60 hstem +753 139 hstem +45 132 vstem +184 115 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +14 429 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +37 221 rmoveto +-93 -139 rlineto +93 0 rlineto +149 139 rlineto +-149 0 rlineto +closepath +endchar } ND +/_830 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +778 27 hstem +829 76 hstem +-11 151 vstem +329 97 vstem +477 86 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-4 501 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +75 51 rmoveto +-57 76 rlineto +-154 0 rlineto +125 -76 rlineto +86 0 rlineto +closepath +endchar } ND +/_831 { +0 556 hsbw +-12 105 hstem +431 100 hstem +671 60 hstem +754 138 hstem +45 132 vstem +184 115 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +14 429 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-92 221 rmoveto +102 -138 rlineto +94 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/_832 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +778 27 hstem +874 31 hstem +-11 151 vstem +329 97 vstem +468 45 vstem +530 75 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-4 501 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +5 62 rmoveto +-19 -1 rlineto +-6 -30 rlineto +45 0 rlineto +2 10 rlineto +57 4 33 14 0 24 rrcurveto +0 29 -36 15 -85 0 rrcurveto +-66 0 rlineto +0 -31 rlineto +42 0 rlineto +34 0 36 2 0 -18 rrcurveto +-2 -7 -10 -5 -16 -4 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/_833 { +0 556 hsbw +-12 105 hstem +431 100 hstem +671 60 hstem +854 51 hstem +45 132 vstem +184 115 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +14 429 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +23 123 rmoveto +-29 -3 rlineto +-11 -44 rlineto +54 0 rlineto +5 15 rlineto +55 6 49 25 0 46 rrcurveto +0 53 -66 13 -62 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +-5 -48 rlineto +47 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -2 -7 rrcurveto +-3 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_834 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +778 27 hstem +822 84 hstem +-11 151 vstem +328 65 vstem +444 91 vstem +608 64 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-4 501 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +-160 43 rmoveto +65 0 rlineto +4 24 14 13 26 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +31 -14 25 -8 21 0 rrcurveto +61 0 38 28 14 56 rrcurveto +-64 0 rlineto +-8 -24 -14 -12 -20 0 rrcurveto +-12 0 -14 3 -18 8 rrcurveto +-33 15 -25 9 -20 0 rrcurveto +-59 0 -48 -31 -9 -53 rrcurveto +closepath +endchar } ND +/_835 { +0 556 hsbw +-12 105 hstem +431 100 hstem +671 60 hstem +764 65 hstem +45 132 vstem +234 65 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +14 429 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-151 92 rmoveto +65 0 rlineto +5 30 15 16 26 0 rrcurveto +10 0 14 -5 20 -12 rrcurveto +30 -18 26 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-63 0 rlineto +-10 -31 -14 -15 -20 0 rrcurveto +-14 0 -13 5 -17 11 rrcurveto +-30 19 -27 10 -20 0 rrcurveto +-59 0 -49 -45 -12 -66 rrcurveto +closepath +endchar } ND +/_836 { +0 722 hsbw +-194 135 hstem +0 20 hstem +158 119 hstem +565 151 hstem +778 27 hstem +-11 151 vstem +329 97 vstem +444 91 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-4 501 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +-228 -837 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_837 { +0 556 hsbw +-194 135 hstem +-12 105 hstem +431 100 hstem +671 60 hstem +45 132 vstem +184 115 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +14 429 rmoveto +38 -87 rlineto +97 0 rlineto +-60 147 rlineto +-131 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-233 -730 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_838 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +728 177 hstem +-11 151 vstem +343 48 vstem +407 87 vstem +599 48 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-149 520 rmoveto +7 -50 65 -19 65 0 rrcurveto +72 0 56 17 39 52 rrcurveto +-48 0 rlineto +-25 -21 -50 -11 -37 0 rrcurveto +-43 0 -44 14 -9 18 rrcurveto +-48 0 rlineto +closepath +64 32 rmoveto +87 0 rlineto +174 76 rlineto +-154 0 rlineto +-107 -76 rlineto +closepath +endchar } ND +/_839 { +0 556 hsbw +-12 105 hstem +431 100 hstem +585 142 hstem +753 139 hstem +45 132 vstem +236 68 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-135 485 rmoveto +13 -95 52 -47 76 0 rrcurveto +74 0 64 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +186 165 rmoveto +-93 -139 rlineto +93 0 rlineto +149 139 rlineto +-149 0 rlineto +closepath +endchar } ND +/_840 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +728 37 hstem +829 76 hstem +-11 151 vstem +343 48 vstem +477 86 vstem +599 48 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-149 520 rmoveto +7 -50 65 -19 65 0 rrcurveto +72 0 56 17 39 52 rrcurveto +-48 0 rlineto +-25 -21 -50 -11 -37 0 rrcurveto +-43 0 -44 14 -9 18 rrcurveto +-48 0 rlineto +closepath +220 32 rmoveto +-57 76 rlineto +-154 0 rlineto +125 -76 rlineto +86 0 rlineto +closepath +endchar } ND +/_841 { +0 556 hsbw +-12 105 hstem +431 100 hstem +585 142 hstem +754 138 hstem +45 132 vstem +236 68 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-135 485 rmoveto +13 -95 52 -47 76 0 rrcurveto +74 0 64 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +57 165 rmoveto +102 -138 rlineto +94 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/_842 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +728 37 hstem +874 31 hstem +-11 151 vstem +343 48 vstem +463 45 vstem +525 76 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-149 520 rmoveto +7 -50 65 -19 65 0 rrcurveto +72 0 56 17 39 52 rrcurveto +-48 0 rlineto +-25 -21 -50 -11 -37 0 rrcurveto +-43 0 -44 14 -9 18 rrcurveto +-48 0 rlineto +closepath +145 43 rmoveto +-19 -1 rlineto +-6 -30 rlineto +45 0 rlineto +2 10 rlineto +57 4 34 14 0 24 rrcurveto +0 29 -37 15 -85 0 rrcurveto +-65 0 rlineto +0 -31 rlineto +42 0 rlineto +34 0 35 2 0 -18 rrcurveto +-2 -7 -9 -5 -16 -4 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/_843 { +0 556 hsbw +-12 105 hstem +431 100 hstem +585 142 hstem +854 51 hstem +45 132 vstem +236 68 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-135 485 rmoveto +13 -95 52 -47 76 0 rrcurveto +74 0 64 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +168 67 rmoveto +-29 -3 rlineto +-11 -44 rlineto +54 0 rlineto +5 15 rlineto +55 6 49 25 0 46 rrcurveto +0 53 -66 13 -62 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +-5 -48 rlineto +47 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -2 -7 rrcurveto +-3 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_844 { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +728 37 hstem +822 84 hstem +-11 151 vstem +343 48 vstem +394 163 vstem +599 48 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-149 520 rmoveto +7 -50 65 -19 65 0 rrcurveto +72 0 56 17 39 52 rrcurveto +-48 0 rlineto +-25 -21 -50 -11 -37 0 rrcurveto +-43 0 -44 14 -9 18 rrcurveto +-48 0 rlineto +closepath +-6 24 rmoveto +65 0 rlineto +4 24 15 13 26 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +31 -14 25 -8 21 0 rrcurveto +61 0 38 28 14 56 rrcurveto +-64 0 rlineto +-9 -24 -14 -12 -19 0 rrcurveto +-12 0 -14 3 -18 8 rrcurveto +-33 15 -25 9 -20 0 rrcurveto +-59 0 -48 -31 -10 -53 rrcurveto +closepath +endchar } ND +/_845 { +0 556 hsbw +-12 105 hstem +431 100 hstem +585 142 hstem +764 65 hstem +45 132 vstem +234 65 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-135 485 rmoveto +13 -95 52 -47 76 0 rrcurveto +74 0 64 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +-2 36 rmoveto +65 0 rlineto +5 30 15 16 26 0 rrcurveto +10 0 14 -5 20 -12 rrcurveto +30 -18 26 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-63 0 rlineto +-10 -31 -14 -15 -20 0 rrcurveto +-14 0 -13 5 -17 11 rrcurveto +-30 19 -27 10 -20 0 rrcurveto +-59 0 -49 -45 -12 -66 rrcurveto +closepath +endchar } ND +/_846 { +0 722 hsbw +-194 135 hstem +0 20 hstem +158 119 hstem +565 151 hstem +728 37 hstem +-11 151 vstem +343 48 vstem +394 163 vstem +599 48 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +-149 520 rmoveto +7 -50 65 -19 65 0 rrcurveto +72 0 56 17 39 52 rrcurveto +-48 0 rlineto +-25 -21 -50 -11 -37 0 rrcurveto +-43 0 -44 14 -9 18 rrcurveto +-48 0 rlineto +closepath +-83 -856 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_847 { +0 556 hsbw +-194 135 hstem +-12 105 hstem +431 100 hstem +585 142 hstem +45 132 vstem +236 68 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-135 485 rmoveto +13 -95 52 -47 76 0 rrcurveto +74 0 64 51 27 91 rrcurveto +-64 0 rlineto +-26 -48 -32 -23 -38 0 rrcurveto +-39 0 -25 17 -14 54 rrcurveto +-68 0 rlineto +closepath +-84 -786 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_848 { +0 667 hsbw +-194 135 hstem +0 120 hstem +314 120 hstem +596 120 hstem +260 138 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +219 -59 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_849 { +0 556 hsbw +-194 135 hstem +-12 100 218 83 431 100 hstem3 +58 135 vstem +211 139 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-216 -360 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_850 { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +854 51 hstem +387 203 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +426 794 rmoveto +-29 -3 rlineto +-11 -44 rlineto +54 0 rlineto +5 15 rlineto +55 6 49 25 0 46 rrcurveto +0 53 -66 13 -62 0 rrcurveto +-34 0 -24 -1 -12 -2 rrcurveto +-5 -48 rlineto +47 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -2 -7 rrcurveto +-3 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_851 { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +706 51 hstem +58 135 vstem +323 55 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-64 345 rmoveto +-29 -3 rlineto +-11 -59 rlineto +55 0 rlineto +0 24 rlineto +55 6 53 31 0 45 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-34 0 -24 -2 -13 -2 rrcurveto +0 -47 rlineto +42 0 rlineto +30 0 21 -4 12 -8 rrcurveto +8 -5 3 -6 -1 -8 rrcurveto +-4 -12 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_852 { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +796 78 hstem +306 61 vstem +579 63 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +326 756 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 40 37 14 80 rrcurveto +-63 0 rlineto +-10 -32 -8 -6 -16 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -31 7 -17 0 rrcurveto +-56 0 -25 -45 -15 -73 rrcurveto +61 0 rlineto +closepath +endchar } ND +/_853 { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +632 78 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-175 291 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -31 -10 -7 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -31 7 -17 0 rrcurveto +-57 0 -23 -44 -17 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/_854 { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +740 165 hstem +393 86 vstem +517 96 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +432 778 rmoveto +44 -38 rlineto +96 0 rlineto +-92 65 rlineto +-91 0 rlineto +-116 -65 rlineto +98 0 rlineto +61 38 rlineto +closepath +-80 51 rmoveto +86 0 rlineto +174 76 rlineto +-153 0 rlineto +-107 -76 rlineto +closepath +endchar } ND +/_855 { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +671 60 hstem +753 139 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-41 370 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +36 221 rmoveto +-92 -139 rlineto +93 0 rlineto +149 139 rlineto +-150 0 rlineto +closepath +endchar } ND +/_856 { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +778 27 hstem +829 76 hstem +314 98 vstem +462 87 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +432 778 rmoveto +44 -38 rlineto +96 0 rlineto +-92 65 rlineto +-91 0 rlineto +-116 -65 rlineto +98 0 rlineto +61 38 rlineto +closepath +76 51 rmoveto +-58 76 rlineto +-154 0 rlineto +125 -76 rlineto +87 0 rlineto +closepath +endchar } ND +/_857 { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +671 60 hstem +754 138 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-41 370 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-92 221 rmoveto +101 -138 rlineto +95 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/_858 { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +778 27 hstem +874 31 hstem +314 98 vstem +453 46 vstem +517 96 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +432 778 rmoveto +44 -38 rlineto +96 0 rlineto +-92 65 rlineto +-91 0 rlineto +-116 -65 rlineto +98 0 rlineto +61 38 rlineto +closepath +5 62 rmoveto +-19 -1 rlineto +-6 -30 rlineto +46 0 rlineto +0 10 rlineto +57 4 35 14 0 24 rrcurveto +0 29 -37 15 -85 0 rrcurveto +-65 0 rlineto +0 -31 rlineto +42 0 rlineto +27 0 20 -1 11 -4 rrcurveto +9 -3 3 -4 -1 -4 rrcurveto +-2 -7 -9 -5 -16 -4 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/_859 { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +671 60 hstem +854 51 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-41 370 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +22 123 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +56 6 48 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-4 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_860 { +0 667 hsbw +0 120 hstem +314 120 hstem +596 120 hstem +778 27 hstem +822 84 hstem +313 65 vstem +430 91 vstem +594 63 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +432 778 rmoveto +44 -38 rlineto +96 0 rlineto +-92 65 rlineto +-91 0 rlineto +-116 -65 rlineto +98 0 rlineto +61 38 rlineto +closepath +-160 43 rmoveto +65 0 rlineto +4 24 14 13 26 0 rrcurveto +10 0 16 -5 19 -9 rrcurveto +32 -15 25 -7 20 0 rrcurveto +62 0 37 28 14 56 rrcurveto +-63 0 rlineto +-9 -24 -14 -12 -20 0 rrcurveto +-11 0 -14 3 -18 8 rrcurveto +-33 15 -26 9 -20 0 rrcurveto +-59 0 -48 -31 -9 -53 rrcurveto +closepath +endchar } ND +/_861 { +0 556 hsbw +-12 100 218 83 431 100 hstem3 +671 60 hstem +764 65 hstem +58 135 vstem +234 65 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-41 370 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-152 92 rmoveto +65 0 rlineto +5 30 15 16 26 0 rrcurveto +10 0 14 -5 20 -12 rrcurveto +30 -18 26 -10 20 0 rrcurveto +62 0 39 37 16 74 rrcurveto +-63 0 rlineto +-10 -31 -14 -15 -20 0 rrcurveto +-14 0 -13 5 -17 11 rrcurveto +-30 19 -27 10 -20 0 rrcurveto +-59 0 -49 -45 -12 -66 rrcurveto +closepath +endchar } ND +/_862 { +0 667 hsbw +-194 135 hstem +0 120 hstem +314 120 hstem +596 120 hstem +778 27 hstem +314 98 vstem +430 91 vstem +41 0 rmoveto +559 0 rlineto +25 120 rlineto +-416 0 rlineto +45 194 rlineto +371 0 rlineto +24 120 rlineto +-370 0 rlineto +34 162 rlineto +383 0 rlineto +25 120 rlineto +-531 0 rlineto +-149 -716 rlineto +closepath +432 778 rmoveto +44 -38 rlineto +96 0 rlineto +-92 65 rlineto +-91 0 rlineto +-116 -65 rlineto +98 0 rlineto +61 38 rlineto +closepath +-213 -837 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_863 { +0 556 hsbw +-194 135 hstem +-12 100 218 83 431 100 hstem3 +671 60 hstem +58 135 vstem +427 128 vstem +545 216 rmoveto +6 26 4 31 0 34 rrcurveto +0 141 -82 83 -126 0 rrcurveto +-175 0 -114 -139 0 -163 rrcurveto +0 -146 96 -95 139 0 rrcurveto +102 0 84 49 50 102 rrcurveto +-126 21 rlineto +-26 -48 -37 -24 -46 0 rrcurveto +-56 0 -45 45 0 70 rrcurveto +0 13 rlineto +352 0 rlineto +closepath +-118 85 rmoveto +-219 0 rlineto +16 85 50 45 58 0 rrcurveto +57 0 38 -39 0 -77 rrcurveto +0 -14 rlineto +closepath +-41 370 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-175 -730 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_864 { +0 278 hsbw +0 20 hstem +696 20 hstem +854 51 hstem +35 147 vstem +201 198 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +241 794 rmoveto +-28 -3 rlineto +-12 -44 rlineto +55 0 rlineto +4 15 rlineto +56 6 48 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +30 0 21 -4 12 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-3 -13 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_865 { +0 278 hsbw +0 20 hstem +499 20 hstem +706 51 hstem +40 140 vstem +206 55 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +98 127 rmoveto +-29 -3 rlineto +-11 -59 rlineto +55 0 rlineto +0 24 rlineto +53 6 55 31 0 45 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-35 0 -24 -2 -12 -2 rrcurveto +0 -47 rlineto +42 0 rlineto +29 0 21 -4 13 -8 rrcurveto +8 -5 3 -6 -1 -8 rrcurveto +-4 -12 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_866 { +0 278 hsbw +-194 135 hstem +0 20 hstem +696 20 hstem +-3 139 vstem +185 147 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +-10 -59 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_867 { +0 278 hsbw +-194 135 hstem +0 20 hstem +499 20 hstem +589 127 hstem +-3 139 vstem +163 140 vstem +189 716 rmoveto +-26 -127 rlineto +140 0 rlineto +27 127 rlineto +-141 0 rlineto +closepath +-41 -197 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +-123 -578 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_868 { +0 778 hsbw +-194 135 hstem +-13 123 hstem +605 123 hstem +87 146 vstem +271 138 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +66 -343 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_869 { +0 611 hsbw +-194 135 hstem +-12 108 hstem +425 106 hstem +61 140 vstem +221 138 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-239 -374 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_870 { +0 778 hsbw +-13 123 hstem +605 123 hstem +854 51 hstem +87 146 vstem +421 203 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +268 510 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +55 6 49 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +-5 -48 rlineto +47 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-4 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_871 { +0 611 hsbw +-12 108 hstem +425 106 hstem +706 51 hstem +61 140 vstem +338 55 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-82 331 rmoveto +-29 -3 rlineto +-11 -59 rlineto +55 0 rlineto +0 24 rlineto +53 6 55 31 0 45 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-35 0 -24 -2 -12 -2 rrcurveto +-5 -47 rlineto +47 0 rlineto +29 0 21 -4 13 -8 rrcurveto +8 -5 3 -6 -2 -8 rrcurveto +-3 -12 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_872 { +0 778 hsbw +-13 123 hstem +605 123 hstem +740 165 hstem +87 146 vstem +423 87 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +271 494 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +-81 51 rmoveto +87 0 rlineto +174 76 rlineto +-154 0 rlineto +-107 -76 rlineto +closepath +endchar } ND +/_873 { +0 611 hsbw +-12 108 hstem +425 106 hstem +671 60 hstem +753 139 hstem +61 140 vstem +208 115 vstem +353 93 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-51 356 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +36 221 rmoveto +-92 -139 rlineto +93 0 rlineto +149 139 rlineto +-150 0 rlineto +closepath +endchar } ND +/_874 { +0 778 hsbw +-13 123 hstem +605 123 hstem +778 27 hstem +829 76 hstem +87 146 vstem +345 97 vstem +493 87 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +271 494 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +76 51 rmoveto +-58 76 rlineto +-154 0 rlineto +125 -76 rlineto +87 0 rlineto +closepath +endchar } ND +/_875 { +0 611 hsbw +-12 108 hstem +425 106 hstem +671 60 hstem +754 138 hstem +61 140 vstem +208 115 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-51 356 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-92 221 rmoveto +101 -138 rlineto +95 0 rlineto +-61 138 rlineto +-135 0 rlineto +closepath +endchar } ND +/_876 { +0 778 hsbw +-13 123 hstem +605 123 hstem +778 27 hstem +874 31 hstem +87 146 vstem +438 187 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +271 494 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +8 62 rmoveto +-19 -1 rlineto +-6 -30 rlineto +46 0 rlineto +2 10 rlineto +56 4 34 14 0 24 rrcurveto +0 29 -37 15 -85 0 rrcurveto +-65 0 rlineto +0 -31 rlineto +42 0 rlineto +27 0 21 -1 11 -4 rrcurveto +9 -3 2 -4 -1 -4 rrcurveto +-2 -7 -9 -5 -16 -4 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/_877 { +0 611 hsbw +-12 108 hstem +425 106 hstem +671 60 hstem +854 51 hstem +61 140 vstem +208 115 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-51 356 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +28 123 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +55 6 49 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +-5 -48 rlineto +47 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-4 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_878 { +0 778 hsbw +-13 123 hstem +605 123 hstem +778 27 hstem +822 84 hstem +87 146 vstem +344 65 vstem +460 91 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +271 494 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +-160 43 rmoveto +65 0 rlineto +4 24 14 13 26 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +31 -14 25 -8 21 0 rrcurveto +61 0 38 28 14 56 rrcurveto +-63 0 rlineto +-9 -24 -14 -12 -20 0 rrcurveto +-12 0 -15 3 -16 8 rrcurveto +-33 16 -26 8 -20 0 rrcurveto +-59 0 -48 -31 -9 -53 rrcurveto +closepath +endchar } ND +/_879 { +0 611 hsbw +-12 108 hstem +425 106 hstem +671 60 hstem +764 65 hstem +61 140 vstem +253 65 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-51 356 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-156 92 rmoveto +65 0 rlineto +5 30 15 16 26 0 rrcurveto +10 0 15 -5 20 -12 rrcurveto +30 -18 25 -10 20 0 rrcurveto +62 0 39 37 17 74 rrcurveto +-64 0 rlineto +-10 -31 -14 -15 -19 0 rrcurveto +-14 0 -15 5 -15 11 rrcurveto +-32 19 -25 10 -20 0 rrcurveto +-59 0 -50 -45 -12 -66 rrcurveto +closepath +endchar } ND +/_880 { +0 778 hsbw +-194 135 hstem +-13 123 hstem +605 123 hstem +778 27 hstem +87 146 vstem +345 97 vstem +460 91 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +271 494 rmoveto +44 -38 rlineto +96 0 rlineto +-93 65 rlineto +-91 0 rlineto +-115 -65 rlineto +97 0 rlineto +62 38 rlineto +closepath +-205 -837 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_881 { +0 611 hsbw +-194 135 hstem +-12 108 hstem +425 106 hstem +671 60 hstem +61 140 vstem +208 115 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-51 356 rmoveto +37 -87 rlineto +97 0 rlineto +-60 147 rlineto +-130 0 rlineto +-145 -147 rlineto +115 0 rlineto +86 87 rlineto +closepath +-188 -730 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_882 { +0 837 hsbw +-13 123 hstem +605 123 hstem +884 20 hstem +87 146 vstem +449 93 vstem +637 147 vstem +818 141 vstem +233 284 rmoveto +0 157 96 164 147 0 rrcurveto +98 0 63 -76 0 -105 rrcurveto +0 -136 -96 -178 -145 0 rrcurveto +-96 0 -67 74 0 100 rrcurveto +closepath +585 432 rmoveto +-28 -135 rlineto +64 0 rlineto +-11 -48 -25 -30 -39 -11 rrcurveto +-24 143 -114 93 -153 0 rrcurveto +-242 0 -159 -244 0 -203 rrcurveto +0 -154 125 -140 168 0 rrcurveto +231 0 173 216 0 224 rrcurveto +78 11 51 59 23 107 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-267 188 rmoveto +-102 -147 rlineto +93 0 rlineto +159 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/_883 { +0 671 hsbw +-12 108 hstem +425 106 hstem +710 20 hstem +60 141 285 90 460 139 vstem3 +639 141 vstem +460 315 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-63 0 -44 49 0 72 rrcurveto +0 84 57 124 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +179 204 rmoveto +-29 -136 rlineto +64 0 rlineto +-11 -48 -25 -29 -39 -11 rrcurveto +0 2 rlineto +0 144 -91 90 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +0 -129 89 -98 153 0 rrcurveto +151 0 111 105 28 136 rrcurveto +85 7 54 59 24 112 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-252 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/_884 { +0 837 hsbw +-13 123 hstem +605 123 hstem +759 146 hstem +87 146 vstem +479 95 vstem +637 147 vstem +818 141 vstem +233 284 rmoveto +0 157 96 164 147 0 rrcurveto +98 0 63 -76 0 -105 rrcurveto +0 -136 -96 -178 -145 0 rrcurveto +-96 0 -67 74 0 100 rrcurveto +closepath +585 432 rmoveto +-28 -135 rlineto +64 0 rlineto +-11 -48 -25 -30 -39 -11 rrcurveto +-24 143 -114 93 -153 0 rrcurveto +-242 0 -159 -244 0 -203 rrcurveto +0 -154 125 -140 168 0 rrcurveto +231 0 173 216 0 224 rrcurveto +78 11 51 59 23 107 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-442 189 rmoveto +103 -146 rlineto +95 0 rlineto +-63 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/_885 { +0 671 hsbw +-12 108 hstem +425 106 hstem +586 146 hstem +61 140 vstem +364 94 vstem +460 139 vstem +639 141 vstem +460 315 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-63 0 -44 49 0 72 rrcurveto +0 84 57 124 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +179 204 rmoveto +-29 -136 rlineto +64 0 rlineto +-11 -48 -25 -29 -39 -11 rrcurveto +0 2 rlineto +0 144 -91 90 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +0 -129 89 -98 153 0 rrcurveto +151 0 111 105 28 136 rrcurveto +85 7 54 59 24 112 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-378 213 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/_886 { +0 837 hsbw +-13 123 hstem +605 123 hstem +854 51 hstem +87 146 vstem +421 203 vstem +637 147 vstem +818 141 vstem +233 284 rmoveto +0 157 96 164 147 0 rrcurveto +98 0 63 -76 0 -105 rrcurveto +0 -136 -96 -178 -145 0 rrcurveto +-96 0 -67 74 0 100 rrcurveto +closepath +585 432 rmoveto +-28 -135 rlineto +64 0 rlineto +-11 -48 -25 -30 -39 -11 rrcurveto +-24 143 -114 93 -153 0 rrcurveto +-242 0 -159 -244 0 -203 rrcurveto +0 -154 125 -140 168 0 rrcurveto +231 0 173 216 0 224 rrcurveto +78 11 51 59 23 107 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-317 78 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +55 6 49 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +-5 -48 rlineto +47 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-4 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_887 { +0 671 hsbw +-12 108 hstem +425 106 hstem +706 51 hstem +61 140 vstem +338 55 vstem +460 139 vstem +639 141 vstem +460 315 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-63 0 -44 49 0 72 rrcurveto +0 84 57 124 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +179 204 rmoveto +-29 -136 rlineto +64 0 rlineto +-11 -48 -25 -29 -39 -11 rrcurveto +0 2 rlineto +0 144 -91 90 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +0 -129 89 -98 153 0 rrcurveto +151 0 111 105 28 136 rrcurveto +85 7 54 59 24 112 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-261 127 rmoveto +-29 -3 rlineto +-11 -59 rlineto +55 0 rlineto +0 24 rlineto +53 6 55 31 0 45 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-35 0 -24 -2 -12 -2 rrcurveto +-5 -47 rlineto +47 0 rlineto +29 0 21 -4 13 -8 rrcurveto +8 -5 3 -6 -2 -8 rrcurveto +-3 -12 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_888 { +0 837 hsbw +-13 123 hstem +605 123 hstem +796 78 hstem +87 146 vstem +330 62 vstem +637 147 vstem +818 141 vstem +233 284 rmoveto +0 157 96 164 147 0 rrcurveto +98 0 63 -76 0 -105 rrcurveto +0 -136 -96 -178 -145 0 rrcurveto +-96 0 -67 74 0 100 rrcurveto +closepath +585 432 rmoveto +-28 -135 rlineto +64 0 rlineto +-11 -48 -25 -30 -39 -11 rrcurveto +-24 143 -114 93 -153 0 rrcurveto +-242 0 -159 -244 0 -203 rrcurveto +0 -154 125 -140 168 0 rrcurveto +231 0 173 216 0 224 rrcurveto +78 11 51 59 23 107 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-426 40 rmoveto +9 30 15 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 28 -10 15 0 rrcurveto +46 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -32 -10 -6 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-56 0 -26 -45 -15 -73 rrcurveto +62 0 rlineto +closepath +endchar } ND +/_889 { +0 671 hsbw +-12 108 hstem +425 106 hstem +632 78 hstem +61 140 vstem +210 61 vstem +460 139 vstem +639 141 vstem +460 315 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-63 0 -44 49 0 72 rrcurveto +0 84 57 124 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +179 204 rmoveto +-29 -136 rlineto +64 0 rlineto +-11 -48 -25 -29 -39 -11 rrcurveto +0 2 rlineto +0 144 -91 90 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +0 -129 89 -98 153 0 rrcurveto +151 0 111 105 28 136 rrcurveto +85 7 54 59 24 112 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-368 73 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 27 -9 26 -10 rrcurveto +27 -10 28 -10 15 0 rrcurveto +45 0 42 37 12 80 rrcurveto +-63 0 rlineto +-8 -31 -11 -7 -14 0 rrcurveto +-10 0 -16 4 -27 10 rrcurveto +-43 16 -31 8 -16 0 rrcurveto +-56 0 -26 -44 -15 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/_890 { +0 837 hsbw +-194 135 hstem +-13 123 hstem +605 123 hstem +87 146 vstem +271 138 vstem +637 147 vstem +818 141 vstem +233 284 rmoveto +0 157 96 164 147 0 rrcurveto +98 0 63 -76 0 -105 rrcurveto +0 -136 -96 -178 -145 0 rrcurveto +-96 0 -67 74 0 100 rrcurveto +closepath +585 432 rmoveto +-28 -135 rlineto +64 0 rlineto +-11 -48 -25 -30 -39 -11 rrcurveto +-24 143 -114 93 -153 0 rrcurveto +-242 0 -159 -244 0 -203 rrcurveto +0 -154 125 -140 168 0 rrcurveto +231 0 173 216 0 224 rrcurveto +78 11 51 59 23 107 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-519 -775 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_891 { +0 671 hsbw +-194 135 hstem +-12 108 hstem +425 106 hstem +61 140 vstem +221 138 vstem +460 139 vstem +639 141 vstem +460 315 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-63 0 -44 49 0 72 rrcurveto +0 84 57 124 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +179 204 rmoveto +-29 -136 rlineto +64 0 rlineto +-11 -48 -25 -29 -39 -11 rrcurveto +0 2 rlineto +0 144 -91 90 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +0 -129 89 -98 153 0 rrcurveto +151 0 111 105 28 136 rrcurveto +85 7 54 59 24 112 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-418 -578 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_892 { +0 722 hsbw +-194 135 hstem +-12 123 hstem +231 485 hstem +91 144 vstem +270 138 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +79 -775 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_893 { +0 611 hsbw +-194 135 hstem +-12 100 hstem +499 20 hstem +70 142 vstem +380 131 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +25 -578 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_894 { +0 722 hsbw +-12 123 hstem +231 485 hstem +854 51 hstem +91 144 vstem +406 198 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +290 78 rmoveto +-28 -3 rlineto +-12 -44 rlineto +55 0 rlineto +4 15 rlineto +56 6 48 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +30 0 21 -4 12 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-3 -13 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_895 { +0 611 hsbw +-12 100 hstem +499 20 hstem +706 51 hstem +70 142 vstem +362 55 vstem +479 140 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +255 127 rmoveto +-28 -3 rlineto +-12 -59 rlineto +55 0 rlineto +0 24 rlineto +55 6 53 31 0 45 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-34 0 -24 -2 -13 -2 rrcurveto +0 -47 rlineto +42 0 rlineto +30 0 21 -4 12 -8 rrcurveto +8 -5 3 -6 -1 -8 rrcurveto +-3 -12 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_896 { +0 809 hsbw +-12 123 hstem +581 135 hstem +884 20 hstem +91 144 vstem +405 94 vstem +618 147 vstem +808 141 vstem +808 716 rmoveto +-29 -135 rlineto +64 0 rlineto +-15 -70 -32 -20 -78 0 rrcurveto +47 225 rlineto +-147 0 rlineto +-82 -391 rlineto +-31 -143 -26 -71 -123 0 rrcurveto +-71 0 -50 33 0 64 rrcurveto +0 23 rlineto +103 485 rlineto +-147 0 rlineto +-79 -377 rlineto +-15 -68 -6 -27 0 -37 rrcurveto +0 -142 106 -77 152 0 rrcurveto +204 0 84 111 47 225 rrcurveto +21 102 rlineto +152 4 41 44 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-301 188 rmoveto +-102 -147 rlineto +94 0 rlineto +158 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/_897 { +0 714 hsbw +-12 100 hstem +383 136 hstem +710 20 hstem +70 142 vstem +308 93 vstem +479 140 vstem +661 141 vstem +661 519 rmoveto +-29 -136 rlineto +65 0 rlineto +-15 -69 -33 -21 -77 0 rrcurveto +47 226 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -55 -66 -77 0 rrcurveto +-34 0 -25 24 0 31 rrcurveto +0 8 4 22 8 38 rrcurveto +64 308 rlineto +-141 0 rlineto +-60 -290 rlineto +-12 -53 -5 -35 0 -18 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +48 229 rlineto +150 2 43 46 27 130 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-251 211 rmoveto +-102 -146 rlineto +93 0 rlineto +158 146 rlineto +-149 0 rlineto +closepath +endchar } ND +/_898 { +0 809 hsbw +-12 123 hstem +581 135 hstem +759 146 hstem +91 144 vstem +462 95 vstem +618 147 vstem +808 141 vstem +808 716 rmoveto +-29 -135 rlineto +64 0 rlineto +-15 -70 -32 -20 -78 0 rrcurveto +47 225 rlineto +-147 0 rlineto +-82 -391 rlineto +-31 -143 -26 -71 -123 0 rrcurveto +-71 0 -50 33 0 64 rrcurveto +0 23 rlineto +103 485 rlineto +-147 0 rlineto +-79 -377 rlineto +-15 -68 -6 -27 0 -37 rrcurveto +0 -142 106 -77 152 0 rrcurveto +204 0 84 111 47 225 rrcurveto +21 102 rlineto +152 4 41 44 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-448 189 rmoveto +102 -146 rlineto +95 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/_899 { +0 714 hsbw +-12 100 hstem +383 136 hstem +586 146 hstem +69 143 391 90 661 141 vstem3 +661 519 rmoveto +-29 -136 rlineto +65 0 rlineto +-15 -69 -33 -21 -77 0 rrcurveto +47 226 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -55 -66 -77 0 rrcurveto +-34 0 -25 24 0 31 rrcurveto +0 8 4 22 8 38 rrcurveto +64 308 rlineto +-141 0 rlineto +-60 -290 rlineto +-12 -53 -5 -35 0 -18 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +48 229 rlineto +150 2 43 46 27 130 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-373 213 rmoveto +103 -146 rlineto +94 0 rlineto +-62 146 rlineto +-135 0 rlineto +closepath +endchar } ND +/_900 { +0 809 hsbw +-12 123 hstem +581 135 hstem +854 51 hstem +88 147 421 198 808 141 vstem3 +808 716 rmoveto +-29 -135 rlineto +64 0 rlineto +-15 -70 -32 -20 -78 0 rrcurveto +47 225 rlineto +-147 0 rlineto +-82 -391 rlineto +-31 -143 -26 -71 -123 0 rrcurveto +-71 0 -50 33 0 64 rrcurveto +0 23 rlineto +103 485 rlineto +-147 0 rlineto +-79 -377 rlineto +-15 -68 -6 -27 0 -37 rrcurveto +0 -142 106 -77 152 0 rrcurveto +204 0 84 111 47 225 rrcurveto +21 102 rlineto +152 4 41 44 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-307 78 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +55 6 49 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-35 0 -24 -1 -12 -2 rrcurveto +-5 -48 rlineto +47 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-4 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_901 { +0 714 hsbw +-12 100 hstem +383 136 hstem +706 51 hstem +70 142 vstem +362 55 vstem +479 140 vstem +661 141 vstem +661 519 rmoveto +-29 -136 rlineto +65 0 rlineto +-15 -69 -33 -21 -77 0 rrcurveto +47 226 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -55 -66 -77 0 rrcurveto +-34 0 -25 24 0 31 rrcurveto +0 8 4 22 8 38 rrcurveto +64 308 rlineto +-141 0 rlineto +-60 -290 rlineto +-12 -53 -5 -35 0 -18 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +48 229 rlineto +150 2 43 46 27 130 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-259 127 rmoveto +-28 -3 rlineto +-12 -59 rlineto +55 0 rlineto +0 24 rlineto +55 6 53 31 0 45 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-34 0 -24 -2 -13 -2 rrcurveto +0 -47 rlineto +42 0 rlineto +30 0 21 -4 12 -8 rrcurveto +8 -5 3 -6 -1 -8 rrcurveto +-3 -12 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_902 { +0 809 hsbw +-12 123 hstem +581 135 hstem +796 78 hstem +91 144 vstem +330 62 vstem +604 62 vstem +808 141 vstem +808 716 rmoveto +-29 -135 rlineto +64 0 rlineto +-15 -70 -32 -20 -78 0 rrcurveto +47 225 rlineto +-147 0 rlineto +-82 -391 rlineto +-31 -143 -26 -71 -123 0 rrcurveto +-71 0 -50 33 0 64 rrcurveto +0 23 rlineto +103 485 rlineto +-147 0 rlineto +-79 -377 rlineto +-15 -68 -6 -27 0 -37 rrcurveto +0 -142 106 -77 152 0 rrcurveto +204 0 84 111 47 225 rrcurveto +21 102 rlineto +152 4 41 44 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-416 40 rmoveto +9 30 15 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 28 -10 15 0 rrcurveto +46 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -32 -10 -6 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-56 0 -26 -45 -15 -73 rrcurveto +62 0 rlineto +closepath +endchar } ND +/_903 { +0 714 hsbw +-12 100 hstem +383 136 hstem +632 78 hstem +70 153 272 48 380 131 vstem3 +532 63 vstem +661 141 vstem +661 519 rmoveto +-29 -136 rlineto +65 0 rlineto +-15 -69 -33 -21 -77 0 rrcurveto +47 226 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -55 -66 -77 0 rrcurveto +-34 0 -25 24 0 31 rrcurveto +0 8 4 22 8 38 rrcurveto +64 308 rlineto +-141 0 rlineto +-60 -290 rlineto +-12 -53 -5 -35 0 -18 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +48 229 rlineto +150 2 43 46 27 130 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-341 73 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 40 37 14 80 rrcurveto +-63 0 rlineto +-10 -31 -9 -7 -14 0 rrcurveto +-10 0 -18 4 -25 10 rrcurveto +-43 17 -31 7 -17 0 rrcurveto +-57 0 -24 -44 -15 -74 rrcurveto +61 0 rlineto +closepath +endchar } ND +/_904 { +0 809 hsbw +-194 135 hstem +-12 123 hstem +581 135 hstem +91 144 vstem +270 138 vstem +618 147 vstem +808 141 vstem +808 716 rmoveto +-29 -135 rlineto +64 0 rlineto +-15 -70 -32 -20 -78 0 rrcurveto +47 225 rlineto +-147 0 rlineto +-82 -391 rlineto +-31 -143 -26 -71 -123 0 rrcurveto +-71 0 -50 33 0 64 rrcurveto +0 23 rlineto +103 485 rlineto +-147 0 rlineto +-79 -377 rlineto +-15 -68 -6 -27 0 -37 rrcurveto +0 -142 106 -77 152 0 rrcurveto +204 0 84 111 47 225 rrcurveto +21 102 rlineto +152 4 41 44 27 130 rrcurveto +24 112 rlineto +-141 0 rlineto +closepath +-538 -775 rmoveto +-29 -135 rlineto +139 0 rlineto +28 135 rlineto +-138 0 rlineto +closepath +endchar } ND +/_905 { +0 714 hsbw +-194 135 hstem +-12 100 hstem +383 136 hstem +70 142 vstem +380 131 vstem +661 141 vstem +661 519 rmoveto +-29 -136 rlineto +65 0 rlineto +-15 -69 -33 -21 -77 0 rrcurveto +47 226 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -55 -66 -77 0 rrcurveto +-34 0 -25 24 0 31 rrcurveto +0 8 4 22 8 38 rrcurveto +64 308 rlineto +-141 0 rlineto +-60 -290 rlineto +-12 -53 -5 -35 0 -18 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +48 229 rlineto +150 2 43 46 27 130 rrcurveto +23 112 rlineto +-141 0 rlineto +closepath +-489 -578 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_906 { +0 667 hsbw +-194 135 hstem +0 20 hstem +696 20 hstem +222 138 vstem +614 171 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +-151 -59 rmoveto +-28 -135 rlineto +138 0 rlineto +29 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_907 { +0 556 hsbw +-210 112 hstem +499 20 hstem +83 140 vstem +339 139 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +284 -578 rmoveto +-28 -135 rlineto +139 0 rlineto +28 135 rlineto +-139 0 rlineto +closepath +endchar } ND +/_908 { +0 667 hsbw +0 20 hstem +696 20 hstem +854 51 hstem +372 198 vstem +614 171 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +46 794 rmoveto +-29 -3 rlineto +-11 -44 rlineto +55 0 rlineto +4 15 rlineto +56 6 48 25 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +29 0 21 -4 13 -7 rrcurveto +8 -6 3 -6 -1 -7 rrcurveto +-4 -13 -10 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_909 { +0 556 hsbw +-210 112 hstem +499 20 hstem +706 51 hstem +83 140 322 51 472 140 vstem3 +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +275 127 rmoveto +-28 -3 rlineto +-12 -59 rlineto +55 0 rlineto +0 24 rlineto +54 6 54 30 0 46 rrcurveto +0 53 -65 14 -62 0 rrcurveto +-34 0 -24 -2 -13 -2 rrcurveto +0 -47 rlineto +42 0 rlineto +30 0 21 -4 12 -8 rrcurveto +8 -5 3 -6 -1 -8 rrcurveto +-3 -12 -11 -9 -18 -6 rrcurveto +-8 -2 rlineto +closepath +endchar } ND +/_910 { +0 667 hsbw +0 20 hstem +696 20 hstem +796 78 hstem +115 156 vstem +303 61 vstem +576 63 vstem +401 0 rmoveto +56 265 rlineto +328 451 rlineto +-171 0 rlineto +-101 -145 rlineto +-68 -95 rlineto +-16 -24 -14 -23 -12 -20 rrcurveto +-8 21 -14 35 -21 49 rrcurveto +-89 202 rlineto +-156 0 rlineto +197 -437 rlineto +-58 -279 rlineto +147 0 rlineto +closepath +-37 756 rmoveto +10 30 15 10 19 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 40 37 14 80 rrcurveto +-63 0 rlineto +-10 -32 -8 -6 -16 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -31 7 -17 0 rrcurveto +-56 0 -25 -45 -15 -73 rrcurveto +61 0 rlineto +closepath +endchar } ND +/_911 { +0 556 hsbw +-210 112 hstem +499 20 hstem +632 78 hstem +200 62 vstem +474 62 vstem +83 519 rmoveto +91 -519 rlineto +-28 -65 -36 -33 -42 0 rrcurveto +-16 0 -17 3 -16 5 rrcurveto +-13 -105 rlineto +37 -10 33 -5 30 0 rrcurveto +100 0 36 53 58 106 rrcurveto +321 570 rlineto +-149 0 rlineto +-124 -230 rlineto +-32 -60 -25 -56 -18 -52 rrcurveto +-2 26 -5 47 -8 66 rrcurveto +-35 259 rlineto +-140 0 rlineto +closepath +179 73 rmoveto +10 30 14 10 20 0 rrcurveto +9 0 26 -9 26 -10 rrcurveto +27 -10 29 -10 15 0 rrcurveto +45 0 41 37 12 80 rrcurveto +-62 0 rlineto +-10 -31 -10 -7 -14 0 rrcurveto +-10 0 -17 4 -25 10 rrcurveto +-43 17 -32 7 -16 0 rrcurveto +-56 0 -26 -44 -15 -74 rrcurveto +62 0 rlineto +closepath +endchar } ND +/uni01CD { +0 722 hsbw +0 20 hstem +158 119 hstem +565 151 hstem +761 147 hstem +-11 151 vstem +358 97 vstem +579 115 vstem +510 158 rmoveto +24 -158 rlineto +139 0 rlineto +-116 716 rlineto +-163 0 rlineto +-405 -716 rlineto +151 0 rlineto +86 158 rlineto +284 0 rlineto +closepath +-18 119 rmoveto +-215 0 rlineto +173 288 rlineto +42 -288 rlineto +closepath +1 544 rmoveto +-38 87 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/uni01CE { +0 556 hsbw +-12 105 hstem +431 100 hstem +584 147 hstem +45 132 vstem +227 96 vstem +398 135 vstem +238 372 rmoveto +10 37 28 22 51 0 rrcurveto +46 0 25 -24 0 -29 rrcurveto +0 -46 -52 -14 -90 -7 rrcurveto +-158 -12 -53 -62 0 -98 rrcurveto +0 -90 62 -61 86 0 rrcurveto +54 0 56 24 42 47 rrcurveto +1 -21 3 -20 6 -18 rrcurveto +136 0 rlineto +-8 27 -4 25 0 22 rrcurveto +0 24 7 43 14 63 rrcurveto +33 148 0 9 0 31 rrcurveto +0 77 -62 62 -134 0 rrcurveto +-128 0 -76 -55 -32 -93 rrcurveto +137 -11 rlineto +closepath +133 -130 rmoveto +-4 -19 rlineto +-20 -86 -41 -44 -65 0 rrcurveto +-39 0 -25 24 0 34 rrcurveto +0 72 64 2 96 10 rrcurveto +14 2 11 2 9 3 rrcurveto +closepath +-10 403 rmoveto +-38 86 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/uni01CF { +0 278 hsbw +0 20 hstem +696 20 hstem +761 147 hstem +145 97 vstem +365 115 vstem +35 0 rmoveto +147 0 rlineto +150 716 rlineto +-147 0 rlineto +-150 -716 rlineto +closepath +244 821 rmoveto +-37 87 rlineto +-97 0 rlineto +60 -147 rlineto +130 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/uni01D0 { +0 278 hsbw +0 20 hstem +499 20 hstem +584 147 hstem +109 97 vstem +330 115 vstem +148 519 rmoveto +-108 -519 rlineto +140 0 rlineto +109 519 rlineto +-141 0 rlineto +closepath +96 126 rmoveto +-38 86 rlineto +-97 0 rlineto +60 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/uni01D1 { +0 778 hsbw +-13 123 hstem +605 123 hstem +761 147 hstem +87 146 vstem +375 97 vstem +637 147 vstem +87 281 rmoveto +0 -154 117 -140 176 0 rrcurveto +233 0 171 219 0 221 rrcurveto +0 181 -119 120 -177 0 rrcurveto +-241 0 -160 -240 0 -207 rrcurveto +closepath +146 3 rmoveto +0 160 99 161 144 0 rrcurveto +93 0 68 -68 0 -113 rrcurveto +0 -136 -99 -178 -142 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +closepath +276 537 rmoveto +-37 87 rlineto +-97 0 rlineto +60 -147 rlineto +130 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/uni01D2 { +0 611 hsbw +-12 108 hstem +425 106 hstem +584 147 hstem +61 140 vstem +251 97 vstem +460 139 vstem +61 215 rmoveto +0 -129 105 -98 137 0 rrcurveto +180 0 116 141 0 168 rrcurveto +0 142 -91 92 -153 0 rrcurveto +-176 0 -118 -124 0 -192 rrcurveto +closepath +399 100 rmoveto +0 -108 -53 -111 -99 0 rrcurveto +-62 0 -45 47 0 74 rrcurveto +0 85 57 123 98 0 rrcurveto +61 0 43 -44 0 -66 rrcurveto +closepath +-75 330 rmoveto +-37 86 rlineto +-97 0 rlineto +60 -147 rlineto +130 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/uni01D3 { +0 722 hsbw +-12 123 hstem +231 485 hstem +761 147 hstem +91 144 vstem +366 96 vstem +586 115 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +309 105 rmoveto +-38 87 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/uni01D4 { +0 611 hsbw +-12 100 hstem +499 20 hstem +584 147 hstem +70 142 vstem +271 97 vstem +491 115 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +258 126 rmoveto +-37 86 rlineto +-97 0 rlineto +60 -147 rlineto +130 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -86 rlineto +closepath +endchar } ND +/uni01D5 { +0 722 hsbw +-12 123 hstem +231 485 hstem +730 75 hstem +840 60 hstem +91 144 vstem +353 68 vstem +542 68 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +438 124 rmoveto +12 60 rlineto +-252 0 rlineto +-12 -60 rlineto +252 0 rlineto +closepath +-19 -110 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +-189 0 rmoveto +15 75 rlineto +-68 0 rlineto +-15 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01D6 { +0 611 hsbw +-12 100 hstem +499 20 hstem +597 120 hstem +798 94 hstem +70 142 vstem +237 120 vstem +443 120 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +115 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +-163 175 rmoveto +-20 -94 rlineto +313 0 rlineto +19 94 rlineto +-312 0 rlineto +closepath +endchar } ND +/uni01D7 { +0 722 hsbw +-12 123 hstem +231 485 hstem +730 170 hstem +91 144 vstem +353 68 445 73 542 68 vstem3 +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +457 184 rmoveto +-120 0 rlineto +-83 -87 rlineto +73 0 rlineto +130 87 rlineto +closepath +-38 -170 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +-189 0 rmoveto +15 75 rlineto +-68 0 rlineto +-15 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01D8 { +0 611 hsbw +-12 100 hstem +499 20 hstem +597 120 hstem +70 142 vstem +237 120 367 91 468 120 vstem3 +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +115 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +-2 209 rmoveto +-102 -147 rlineto +94 0 rlineto +158 147 rlineto +-150 0 rlineto +closepath +endchar } ND +/uni01D9 { +0 722 hsbw +-12 123 hstem +231 485 hstem +730 75 hstem +814 86 hstem +91 144 vstem +353 68 vstem +542 68 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +419 14 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +36 170 rmoveto +-92 0 rlineto +-48 -47 rlineto +-30 47 rlineto +-92 0 rlineto +59 -86 rlineto +106 0 rlineto +97 86 rlineto +closepath +-225 -170 rmoveto +15 75 rlineto +-68 0 rlineto +-15 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01DA { +0 611 hsbw +-12 100 hstem +499 20 hstem +597 120 hstem +780 60 hstem +70 142 vstem +310 96 vstem +530 115 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +115 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +-24 123 rmoveto +-38 87 rlineto +-96 0 rlineto +59 -147 rlineto +131 0 rlineto +145 147 rlineto +-115 0 rlineto +-86 -87 rlineto +closepath +endchar } ND +/uni01DB { +0 722 hsbw +-12 123 hstem +231 485 hstem +730 75 hstem +813 87 hstem +91 144 vstem +353 68 vstem +542 68 vstem +618 147 vstem +191 716 rmoveto +-79 -377 rlineto +-15 -72 -6 -20 0 -40 rrcurveto +0 -130 91 -89 167 0 rrcurveto +204 0 84 119 47 217 rrcurveto +81 392 rlineto +-147 0 rlineto +-82 -391 rlineto +-29 -143 -31 -71 -120 0 rrcurveto +-79 0 -42 41 0 56 rrcurveto +0 23 rlineto +22 96 rlineto +81 389 rlineto +-147 0 rlineto +closepath +419 14 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +-60 83 rmoveto +-49 87 rlineto +-120 0 rlineto +96 -87 rlineto +73 0 rlineto +closepath +-129 -83 rmoveto +15 75 rlineto +-68 0 rlineto +-15 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni01DC { +0 611 hsbw +-12 100 hstem +499 20 hstem +597 120 hstem +781 146 hstem +70 142 vstem +237 120 vstem +410 95 vstem +147 519 rmoveto +-60 -290 rlineto +-12 -54 -5 -35 0 -17 rrcurveto +0 -83 52 -52 86 0 rrcurveto +67 0 62 27 58 55 rrcurveto +-15 -70 rlineto +131 0 rlineto +108 519 rlineto +-140 0 rlineto +-52 -248 rlineto +-24 -117 -50 -66 -82 0 rrcurveto +-35 0 -24 24 0 31 rrcurveto +0 8 4 23 8 37 rrcurveto +64 308 rlineto +-141 0 rlineto +closepath +115 198 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +206 0 rmoveto +-25 -120 rlineto +120 0 rlineto +25 120 rlineto +-120 0 rlineto +closepath +-160 210 rmoveto +102 -146 rlineto +95 0 rlineto +-63 146 rlineto +-134 0 rlineto +closepath +endchar } ND +/_928 { +0 0 hsbw +730 75 hstem +840 60 hstem +31 68 vstem +234 68 vstem +307 840 rmoveto +11 60 rlineto +-252 0 rlineto +-11 -60 rlineto +252 0 rlineto +closepath +-19 -110 rmoveto +14 75 rlineto +-68 0 rlineto +-15 -75 rlineto +69 0 rlineto +closepath +-189 0 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/_929 { +0 0 hsbw +730 170 hstem +31 68 vstem +123 73 vstem +234 68 vstem +326 900 rmoveto +-120 0 rlineto +-83 -87 rlineto +73 0 rlineto +130 87 rlineto +closepath +-38 -170 rmoveto +14 75 rlineto +-68 0 rlineto +-15 -75 rlineto +69 0 rlineto +closepath +-189 0 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/_930 { +0 0 hsbw +730 75 hstem +814 86 hstem +31 68 vstem +234 68 vstem +288 730 rmoveto +14 75 rlineto +-68 0 rlineto +-15 -75 rlineto +69 0 rlineto +closepath +35 170 rmoveto +-91 0 rlineto +-48 -47 rlineto +-30 47 rlineto +-92 0 rlineto +59 -86 rlineto +106 0 rlineto +96 86 rlineto +closepath +-224 -170 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/_931 { +0 0 hsbw +730 75 hstem +813 87 hstem +31 68 vstem +234 68 vstem +288 730 rmoveto +14 75 rlineto +-68 0 rlineto +-15 -75 rlineto +69 0 rlineto +closepath +-60 83 rmoveto +-49 87 rlineto +-120 0 rlineto +96 -87 rlineto +73 0 rlineto +closepath +-129 -83 rmoveto +15 75 rlineto +-69 0 rlineto +-14 -75 rlineto +68 0 rlineto +closepath +endchar } ND +/uni0492 { +0 614 hsbw +0 403 hstem +596 120 hstem +129 144 vstem +723 716 rmoveto +-528 0 rlineto +-66 -313 rlineto +-82 0 rlineto +-19 -90 rlineto +81 0 rlineto +-66 -313 rlineto +145 0 rlineto +66 313 rlineto +144 0 rlineto +19 90 rlineto +-144 0 rlineto +41 193 rlineto +383 0 rlineto +26 120 rlineto +closepath +endchar } ND +/uni0493 { +0 469 hsbw +0 296 hstem +408 111 hstem +36 137 vstem +552 519 rmoveto +-406 0 rlineto +-47 -223 rlineto +-63 0 rlineto +-18 -85 rlineto +63 0 rlineto +-45 -211 rlineto +137 0 rlineto +45 211 rlineto +90 0 rlineto +18 85 rlineto +-90 0 rlineto +24 112 rlineto +269 0 rlineto +23 111 rlineto +closepath +endchar } ND +/uni0496 { +0 927 hsbw +-198 20 hstem +0 412 hstem +611 109 hstem +-15 177 vstem +362 145 vstem +513 147 vstem +704 120 vstem +1016 716 rmoveto +-11 0 -9 2 -9 2 rrcurveto +-26 0 rlineto +-148 0 -81 -143 -37 -79 rrcurveto +-37 -78 -27 -7 -36 0 rrcurveto +65 303 rlineto +-147 0 rlineto +-64 -304 rlineto +-10 0 rlineto +-56 0 1 32 -26 103 rrcurveto +-28 110 -28 63 -103 0 rrcurveto +-46 0 rlineto +-22 -110 rlineto +37 0 rlineto +54 0 6 -16 10 -66 rrcurveto +14 -90 25 -55 37 -18 rrcurveto +-55 -11 -48 -35 -42 -59 rrcurveto +-184 -260 rlineto +177 0 rlineto +145 208 rlineto +36 50 rlineto +25 34 28 18 31 1 rrcurveto +-65 -311 rlineto +145 0 rlineto +66 311 rlineto +51 0 19 -42 19 -66 rrcurveto +54 -203 rlineto +31 0 rlineto +-43 -198 rlineto +120 0 rlineto +68 318 rlineto +-57 0 rlineto +-35 116 rlineto +-21 70 -31 43 -42 16 rrcurveto +48 13 44 44 40 78 rrcurveto +44 85 10 26 64 0 rrcurveto +8 0 12 -1 16 -2 rrcurveto +24 108 rlineto +closepath +endchar } ND +/uni0497 { +0 736 hsbw +0 298 hstem +441 78 hstem +-25 152 vstem +213 358 vstem +788 519 rmoveto +-60 0 rlineto +-85 0 -23 -32 -42 -88 rrcurveto +-32 -67 -23 -34 -54 0 rrcurveto +47 221 rlineto +-139 0 rlineto +-46 -221 rlineto +-49 3 -7 28 -8 58 rrcurveto +-16 86 -20 46 -77 0 rrcurveto +-48 0 rlineto +-16 -78 rlineto +27 0 rlineto +25 0 13 -7 3 -31 rrcurveto +0 -10 2 -10 3 -13 rrcurveto +5 -52 10 -21 35 -34 rrcurveto +-48 -4 -24 -27 -40 -55 rrcurveto +-126 -177 rlineto +152 0 rlineto +118 174 rlineto +23 35 12 14 35 0 rrcurveto +-48 -223 rlineto +137 0 rlineto +48 223 rlineto +45 0 11 -18 15 -52 rrcurveto +42 -153 rlineto +22 0 rlineto +-39 -161 rlineto +114 0 rlineto +54 256 rlineto +-46 0 rlineto +-23 79 rlineto +-14 50 -26 30 -36 9 rrcurveto +57 15 29 30 29 63 rrcurveto +25 54 6 16 35 0 rrcurveto +19 0 rlineto +17 78 rlineto +closepath +endchar } ND +/uni049a { +0 615 hsbw +-198 20 hstem +0 20 hstem +608 108 hstem +43 146 vstem +196 146 vstem +405 119 vstem +701 716 rmoveto +-39 0 rlineto +-149 0 -13 -37 -86 -149 rrcurveto +-51 -88 -15 -30 -70 0 rrcurveto +64 304 rlineto +-146 0 rlineto +-153 -716 rlineto +146 0 rlineto +67 311 rlineto +64 -2 27 -54 8 -33 rrcurveto +61 -222 rlineto +31 0 rlineto +-42 -198 rlineto +119 0 rlineto +68 318 rlineto +-56 0 rlineto +-36 105 rlineto +0 11 rlineto +-16 70 -33 43 -49 16 rrcurveto +69 15 41 66 59 111 rrcurveto +19 36 16 15 39 0 rrcurveto +24 0 rlineto +32 108 rlineto +closepath +endchar } ND +/uni049b { +0 507 hsbw +0 20 hstem +222 76 hstem +423 96 hstem +37 136 vstem +327 113 vstem +567 519 rmoveto +-36 0 rlineto +-109 0 -17 -29 -65 -115 rrcurveto +-34 -59 -13 -18 -55 0 rrcurveto +47 221 rlineto +-138 0 rlineto +-110 -519 rlineto +136 0 rlineto +49 222 rlineto +54 0 11 -14 15 -55 rrcurveto +41 -153 rlineto +23 0 rlineto +-39 -161 rlineto +113 0 rlineto +55 256 rlineto +-46 0 rlineto +-23 79 rlineto +-15 52 -24 30 -34 7 rrcurveto +51 11 28 33 41 72 rrcurveto +20 32 6 12 32 0 rrcurveto +17 0 rlineto +19 96 rlineto +closepath +endchar } ND +/uni049c { +0 615 hsbw +0 225 hstem +608 108 hstem +43 146 vstem +258 52 vstem +378 52 vstem +701 716 rmoveto +-39 0 rlineto +-149 0 -14 -36 -85 -150 rrcurveto +-7 -9 -5 -9 -2 -4 rrcurveto +30 139 rlineto +-52 0 rlineto +-48 -225 rlineto +-14 -7 -18 -3 -20 0 rrcurveto +64 304 rlineto +-146 0 rlineto +-153 -716 rlineto +146 0 rlineto +67 311 rlineto +19 0 16 -3 14 -6 rrcurveto +-47 -219 rlineto +52 0 rlineto +35 168 rlineto +3 -7 2 -6 1 -5 rrcurveto +1 -6 1 -3 2 -2 rrcurveto +61 -222 rlineto +151 0 rlineto +-67 225 rlineto +0 11 rlineto +-16 70 -33 43 -49 16 rrcurveto +69 15 41 66 59 111 rrcurveto +19 36 16 15 39 0 rrcurveto +24 0 rlineto +32 108 rlineto +closepath +endchar } ND +/uni049d { +0 507 hsbw +0 461 hstem +499 20 hstem +37 136 vstem +225 37 vstem +309 37 vstem +567 519 rmoveto +-36 0 rlineto +-109 0 -18 -26 -64 -118 rrcurveto +-6 -11 -7 -12 -6 -8 rrcurveto +25 117 rlineto +-37 0 rlineto +-34 -158 rlineto +-10 -4 -13 -1 -14 0 rrcurveto +47 221 rlineto +-138 0 rlineto +-110 -519 rlineto +136 0 rlineto +49 222 rlineto +14 0 11 -2 10 -2 rrcurveto +-32 -152 rlineto +37 0 rlineto +27 124 rlineto +4 -10 5 -13 4 -14 rrcurveto +41 -153 rlineto +132 0 rlineto +-49 174 rlineto +-15 52 -24 30 -34 7 rrcurveto +51 11 28 33 41 72 rrcurveto +20 32 6 12 32 0 rrcurveto +17 0 rlineto +19 96 rlineto +closepath +endchar } ND +/uni04a2 { +0 722 hsbw +-198 20 hstem +0 439 hstem +696 20 hstem +43 148 vstem +193 147 vstem +516 120 vstem +765 716 rmoveto +-147 0 rlineto +-58 -277 rlineto +-277 0 rlineto +57 277 rlineto +-147 0 rlineto +-150 -716 rlineto +148 0 rlineto +67 320 rlineto +277 0 rlineto +-67 -320 rlineto +91 0 rlineto +-43 -198 rlineto +120 0 rlineto +68 318 rlineto +-64 0 rlineto +125 596 rlineto +closepath +endchar } ND +/uni04a3 { +0 604 hsbw +0 327 hstem +499 20 hstem +35 138 vstem +404 114 vstem +616 519 rmoveto +-139 0 rlineto +-41 -192 rlineto +-193 0 rlineto +41 192 rlineto +-138 0 rlineto +-111 -519 rlineto +138 0 rlineto +47 218 rlineto +193 0 rlineto +-46 -218 rlineto +76 0 rlineto +-39 -161 rlineto +114 0 rlineto +54 256 rlineto +-46 0 rlineto +90 424 rlineto +closepath +endchar } ND +/uni04ae { +0 556 hsbw +0 20 hstem +696 20 hstem +178 138 vstem +507 160 vstem +667 716 rmoveto +-160 0 rlineto +-62 -95 rlineto +-40 -62 -40 -70 -40 -79 rrcurveto +-10 44 -8 36 -5 32 rrcurveto +-6 30 -5 22 -4 15 rrcurveto +-35 127 rlineto +-143 0 rlineto +129 -424 rlineto +-60 -292 rlineto +138 0 rlineto +62 292 rlineto +289 424 rlineto +closepath +endchar } ND +/uni04af { +0 556 hsbw +-197 20 hstem +499 20 hstem +136 137 vstem +482 142 vstem +624 519 rmoveto +-142 0 rlineto +-205 -368 rlineto +-48 368 rlineto +-144 0 rlineto +93 -519 rlineto +-42 -197 rlineto +137 0 rlineto +42 197 rlineto +309 519 rlineto +closepath +endchar } ND +/uni04b0 { +0 556 hsbw +0 386 hstem +696 20 hstem +209 231 vstem +507 160 vstem +667 716 rmoveto +-160 0 rlineto +-62 -95 rlineto +-40 -62 -40 -70 -40 -79 rrcurveto +-10 44 -8 36 -5 32 rrcurveto +-6 30 -5 22 -4 15 rrcurveto +-35 127 rlineto +-143 0 rlineto +100 -330 rlineto +-133 0 rlineto +-19 -94 rlineto +181 0 rlineto +-60 -292 rlineto +138 0 rlineto +61 292 rlineto +180 0 rlineto +20 94 rlineto +-137 0 rlineto +227 330 rlineto +closepath +endchar } ND +/uni04b1 { +0 556 hsbw +-197 197 hstem +499 20 hstem +178 137 vstem +482 141 vstem +623 519 rmoveto +-141 0 rlineto +-206 -368 rlineto +-47 368 rlineto +-145 0 rlineto +94 -519 rlineto +-153 0 rlineto +-20 -91 rlineto +153 0 rlineto +-22 -106 rlineto +137 0 rlineto +22 106 rlineto +153 0 rlineto +20 91 rlineto +-153 0 rlineto +308 519 rlineto +closepath +endchar } ND +/uni04b2 { +0 667 hsbw +-198 20 hstem +0 20 hstem +696 20 hstem +108 154 vstem +470 120 vstem +599 185 vstem +784 716 rmoveto +-185 0 rlineto +-113 -128 rlineto +-23 -26 -33 -39 -44 -54 rrcurveto +-3 6 -2 4 -2 3 rrcurveto +-14 26 -10 22 -7 17 rrcurveto +-7 18 -5 12 -4 5 rrcurveto +-70 134 rlineto +-154 0 rlineto +178 -354 rlineto +-316 -362 rlineto +190 0 rlineto +99 111 rlineto +50 58 33 39 15 22 rrcurveto +10 -28 18 -40 28 -54 rrcurveto +53 -108 rlineto +47 0 rlineto +-43 -198 rlineto +120 0 rlineto +68 318 rlineto +-87 0 rlineto +-115 219 rlineto +328 377 rlineto +closepath +endchar } ND +/uni04b3 { +0 556 hsbw +0 20 hstem +499 20 hstem +86 149 vstem +354 114 vstem +612 519 rmoveto +-170 0 rlineto +-131 -148 rlineto +-76 148 rlineto +-149 0 rlineto +132 -253 rlineto +-240 -266 rlineto +172 0 rlineto +129 146 rlineto +75 -146 rlineto +40 0 rlineto +-40 -161 rlineto +114 0 rlineto +54 256 rlineto +-69 0 rlineto +-81 155 rlineto +240 269 rlineto +closepath +endchar } ND +/uni04b8 { +0 708 hsbw +0 20 hstem +249 467 hstem +129 152 vstem +297 89 vstem +394 89 vstem +607 145 vstem +752 716 rmoveto +-145 0 rlineto +-66 -311 rlineto +-31 -16 -33 -10 -35 -5 rrcurveto +41 194 rlineto +-89 0 rlineto +-41 -194 rlineto +-48 9 -24 26 0 44 rrcurveto +0 16 3 20 7 26 rrcurveto +0 6 2 7 3 10 rrcurveto +37 178 rlineto +-145 0 rlineto +-44 -204 rlineto +-10 -43 -5 -37 0 -30 rrcurveto +0 -107 88 -46 110 0 rrcurveto +-30 -139 rlineto +89 0 rlineto +31 148 rlineto +30 6 33 8 36 10 rrcurveto +-62 -282 rlineto +145 0 rlineto +153 716 rlineto +closepath +endchar } ND +/uni04b9 { +0 583 hsbw +0 417 hstem +499 20 hstem +99 140 vstem +247 52 vstem +318 52 vstem +457 137 vstem +594 519 rmoveto +-137 0 rlineto +-47 -221 rlineto +-23 -10 -23 -5 -23 -1 rrcurveto +29 135 rlineto +-52 0 rlineto +-28 -132 rlineto +-34 8 -17 20 0 33 rrcurveto +0 13 3 23 8 33 rrcurveto +22 104 rlineto +-140 0 rlineto +-21 -104 rlineto +-2 -10 rlineto +-7 -33 -3 -26 0 -20 rrcurveto +0 -88 66 -52 89 0 rrcurveto +15 0 rlineto +-22 -103 rlineto +52 0 rlineto +23 108 rlineto +22 3 23 5 23 8 rrcurveto +-45 -207 rlineto +139 0 rlineto +110 519 rlineto +closepath +endchar } ND +/uni04ba { +0 708 hsbw +0 467 hstem +696 20 hstem +53 145 vstem +207 145 vstem +524 152 vstem +676 314 rmoveto +0 108 -89 45 -115 0 rrcurveto +-48 0 -60 -11 -74 -22 rrcurveto +62 282 rlineto +-145 0 rlineto +-154 -716 rlineto +145 0 rlineto +67 311 rlineto +45 23 51 12 56 0 rrcurveto +71 0 36 -28 0 -55 rrcurveto +0 -16 -3 -22 -6 -24 rrcurveto +-2 -8 -1 -6 -1 -8 rrcurveto +-39 -179 rlineto +145 0 rlineto +45 204 rlineto +9 42 5 37 0 31 rrcurveto +closepath +endchar } ND +/uni04bb { +0 583 hsbw +0 333 hstem +499 20 hstem +45 138 vstem +400 140 vstem +540 192 rmoveto +0 87 -65 54 -90 0 rrcurveto +-47 0 -45 -7 -43 -14 rrcurveto +44 207 rlineto +-139 0 rlineto +-110 -519 rlineto +138 0 rlineto +46 221 rlineto +27 10 27 6 27 0 rrcurveto +60 0 30 -22 0 -42 rrcurveto +0 -14 -4 -23 -7 -32 rrcurveto +-22 -104 rlineto +140 0 rlineto +21 104 rlineto +2 9 rlineto +6 32 4 27 0 20 rrcurveto +closepath +endchar } ND +/uni018f { +0 748 hsbw +-12 123 299 118 605 123 hstem3 +87 147 vstem +606 148 vstem +754 416 rmoveto +0 193 -107 119 -192 0 rrcurveto +-140 0 -135 -81 -26 -128 rrcurveto +142 -31 rlineto +19 71 63 43 75 0 rrcurveto +100 0 53 -82 0 -103 rrcurveto +-504 0 rlineto +-10 -37 -5 -41 0 -45 rrcurveto +0 -190 103 -116 174 0 rrcurveto +235 0 155 187 0 241 rrcurveto +closepath +-167 -118 rmoveto +-32 -104 -74 -83 -100 0 rrcurveto +-105 0 -42 74 0 113 rrcurveto +353 0 rlineto +closepath +endchar } ND +/uni0259 { +0 556 hsbw +-12 100 217 85 431 100 hstem3 +49 128 vstem +411 135 vstem +546 290 rmoveto +0 141 -95 100 -140 0 rrcurveto +-109 0 -79 -51 -48 -101 rrcurveto +126 -21 rlineto +26 48 36 25 47 0 rrcurveto +59 0 42 -52 0 -64 rrcurveto +0 -12 rlineto +-352 0 rlineto +-7 -28 -3 -30 0 -34 rrcurveto +0 -136 75 -87 133 0 rrcurveto +175 0 114 136 0 166 rrcurveto +closepath +-150 -73 rmoveto +-14 -72 -42 -57 -68 0 rrcurveto +-64 0 -31 38 0 77 rrcurveto +0 14 rlineto +219 0 rlineto +closepath +endchar } ND +/uni04e8 { +0 778 hsbw +-12 122 hstem +298 119 hstem +605 123 hstem +87 146 vstem +637 147 vstem +784 427 rmoveto +0 181 -115 120 -181 0 rrcurveto +-242 0 -159 -223 0 -224 rrcurveto +0 -176 118 -117 176 0 rrcurveto +236 0 167 201 0 238 rrcurveto +closepath +-147 -10 rmoveto +-381 0 rlineto +33 98 83 90 104 0 rrcurveto +100 0 61 -80 0 -101 rrcurveto +0 -7 rlineto +closepath +-24 -119 rmoveto +-38 -104 -77 -84 -102 0 rrcurveto +-98 0 -65 75 0 99 rrcurveto +0 14 rlineto +380 0 rlineto +closepath +endchar } ND +/uni04e9 { +0 611 hsbw +-12 110 220 81 425 106 hstem3 +61 140 vstem +460 139 vstem +599 297 rmoveto +0 147 -96 87 -148 0 rrcurveto +-185 0 -109 -133 0 -183 rrcurveto +0 -129 89 -98 153 0 rrcurveto +173 0 123 134 0 175 rrcurveto +closepath +-139 18 rmoveto +0 -14 rlineto +-244 0 rlineto +2 3 1 3 0 3 rrcurveto +0 88 72 27 65 0 rrcurveto +64 0 40 -45 0 -65 rrcurveto +closepath +-17 -99 rmoveto +-24 -62 -46 -58 -65 0 rrcurveto +-68 0 -39 53 0 67 rrcurveto +242 0 rlineto +closepath +endchar } ND +end +end +readonly put +noaccess put +dup/FontName get exch definefont pop +mark currentfile closefile +cleartomark diff --git a/fonts/arial_ce_i.afm b/fonts/arial_ce_i.afm new file mode 100644 index 0000000..c62befb --- /dev/null +++ b/fonts/arial_ce_i.afm @@ -0,0 +1,1854 @@ +StartFontMetrics 4.1 +FontName Arial-ItalicMT +FullName Arial Italic +Notice Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +EncodingScheme FontSpecific +FamilyName Arial +Weight Italic +Version (Version 2.76) +Characters 932 +ItalicAngle -12.0 +Ascender 905 +Descender -212 +UnderlineThickness 73 +UnderlinePosition -106 +IsFixedPitch false +FontBBox -517 -325 1082 1025 +StartCharMetrics 974 +C 0 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 1 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 2 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 3 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 4 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 5 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 6 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 7 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 8 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 9 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 10 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 11 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 12 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 13 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 14 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 15 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 16 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 17 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 18 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 19 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 20 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 21 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 22 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 23 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 24 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 25 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 26 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 27 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 28 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 29 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 30 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 31 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 32 ; WX 278 ; N space ; B 56 0 304 716 ; +C 33 ; WX 278 ; N exclam ; B 56 0 304 716 ; +C 34 ; WX 355 ; N quotedbl ; B 135 462 429 716 ; +C 35 ; WX 556 ; N numbersign ; B 10 -12 543 728 ; +C 36 ; WX 556 ; N dollar ; B 51 -96 573 764 ; +C 37 ; WX 889 ; N percent ; B 97 -26 853 728 ; +C 38 ; WX 667 ; N ampersand ; B 79 -17 651 728 ; +C 39 ; WX 191 ; N quotesingle ; B 127 462 259 716 ; +C 40 ; WX 333 ; N parenleft ; B 84 -210 413 728 ; +C 41 ; WX 333 ; N parenright ; B -53 -210 275 728 ; +C 42 ; WX 389 ; N asterisk ; B 31 423 354 728 ; +C 43 ; WX 584 ; N plus ; B 56 116 528 589 ; +C 44 ; WX 278 ; N comma ; B 24 -145 176 100 ; +C 45 ; WX 333 ; N hyphen ; B 46 215 334 303 ; +C 46 ; WX 278 ; N period ; B 58 0 179 100 ; +C 47 ; WX 278 ; N slash ; B -51 -12 411 728 ; +C 48 ; WX 556 ; N zero ; B 71 -12 565 719 ; +C 49 ; WX 556 ; N one ; B 148 0 479 719 ; +C 50 ; WX 556 ; N two ; B 59 0 562 719 ; +C 51 ; WX 556 ; N three ; B 55 -12 557 719 ; +C 52 ; WX 556 ; N four ; B 45 0 542 716 ; +C 53 ; WX 556 ; N five ; B 69 -12 572 706 ; +C 54 ; WX 556 ; N six ; B 83 -12 568 719 ; +C 55 ; WX 556 ; N seven ; B 121 0 595 706 ; +C 56 ; WX 556 ; N eight ; B 75 -13 564 719 ; +C 57 ; WX 556 ; N nine ; B 67 -12 551 719 ; +C 58 ; WX 278 ; N colon ; B 57 0 265 519 ; +C 59 ; WX 278 ; N semicolon ; B 24 -145 262 519 ; +C 60 ; WX 584 ; N less ; B 55 110 529 595 ; +C 61 ; WX 584 ; N equal ; B 56 204 528 503 ; +C 62 ; WX 584 ; N greater ; B 55 110 529 595 ; +C 63 ; WX 556 ; N question ; B 127 0 561 728 ; +C 64 ; WX 1015 ; N at ; B 54 -210 979 729 ; +C 65 ; WX 667 ; N A ; B -20 0 617 716 ; +C 66 ; WX 667 ; N B ; B 43 0 655 716 ; +C 67 ; WX 722 ; N C ; B 91 -12 730 728 ; +C 68 ; WX 722 ; N D ; B 44 0 712 716 ; +C 69 ; WX 667 ; N E ; B 45 0 711 716 ; +C 70 ; WX 611 ; N F ; B 45 0 660 716 ; +C 71 ; WX 778 ; N G ; B 97 -12 766 728 ; +C 72 ; WX 722 ; N H ; B 42 0 754 716 ; +C 73 ; WX 278 ; N I ; B 57 0 302 716 ; +C 74 ; WX 500 ; N J ; B 33 -12 536 716 ; +C 75 ; WX 667 ; N K ; B 44 0 741 716 ; +C 76 ; WX 556 ; N L ; B 40 0 524 716 ; +C 77 ; WX 833 ; N M ; B 44 0 872 716 ; +C 78 ; WX 722 ; N N ; B 49 0 757 716 ; +C 79 ; WX 778 ; N O ; B 91 -12 772 728 ; +C 80 ; WX 667 ; N P ; B 43 0 698 716 ; +C 81 ; WX 778 ; N Q ; B 92 -82 773 728 ; +C 82 ; WX 722 ; N R ; B 47 0 730 716 ; +C 83 ; WX 667 ; N S ; B 70 -12 671 728 ; +C 84 ; WX 611 ; N T ; B 125 0 705 716 ; +C 85 ; WX 722 ; N U ; B 97 -13 754 716 ; +C 86 ; WX 667 ; N V ; B 124 0 757 716 ; +C 87 ; WX 944 ; N W ; B 125 0 1062 716 ; +C 88 ; WX 667 ; N X ; B -32 0 769 716 ; +C 89 ; WX 667 ; N Y ; B 117 0 773 716 ; +C 90 ; WX 611 ; N Z ; B 24 0 637 716 ; +C 91 ; WX 278 ; N bracketleft ; B 6 -196 391 716 ; +C 92 ; WX 278 ; N backslash ; B 85 -12 273 728 ; +C 93 ; WX 278 ; N bracketright ; B -59 -196 329 716 ; +C 94 ; WX 469 ; N asciicircum ; B 26 337 443 728 ; +C 95 ; WX 556 ; N underscore ; B -15 -199 567 -135 ; +C 96 ; WX 333 ; N grave ; B 146 582 310 716 ; +C 97 ; WX 556 ; N a ; B 44 -12 526 530 ; +C 98 ; WX 556 ; N b ; B 33 -12 535 716 ; +C 99 ; WX 500 ; N c ; B 56 -12 511 530 ; +C 100 ; WX 556 ; N d ; B 53 -12 598 716 ; +C 101 ; WX 556 ; N e ; B 52 -12 532 530 ; +C 102 ; WX 278 ; N f ; B 45 0 408 728 ; +C 103 ; WX 556 ; N g ; B 26 -208 564 530 ; +C 104 ; WX 556 ; N h ; B 33 0 529 716 ; +C 105 ; WX 222 ; N i ; B 30 0 268 716 ; +C 106 ; WX 222 ; N j ; B -121 -208 267 716 ; +C 107 ; WX 500 ; N k ; B 34 0 554 716 ; +C 108 ; WX 222 ; N l ; B 26 0 264 716 ; +C 109 ; WX 833 ; N m ; B 33 0 813 530 ; +C 110 ; WX 556 ; N n ; B 33 0 528 530 ; +C 111 ; WX 556 ; N o ; B 49 -12 540 530 ; +C 112 ; WX 556 ; N p ; B -10 -199 535 530 ; +C 113 ; WX 556 ; N q ; B 51 -199 552 530 ; +C 114 ; WX 333 ; N r ; B 33 0 419 530 ; +C 115 ; WX 500 ; N s ; B 38 -12 501 530 ; +C 116 ; WX 278 ; N t ; B 56 -9 321 707 ; +C 117 ; WX 556 ; N u ; B 63 -12 558 519 ; +C 118 ; WX 500 ; N v ; B 79 0 559 519 ; +C 119 ; WX 722 ; N w ; B 78 0 777 519 ; +C 120 ; WX 500 ; N x ; B -1 0 538 519 ; +C 121 ; WX 500 ; N y ; B 0 -210 561 519 ; +C 122 ; WX 500 ; N z ; B 20 0 512 519 ; +C 123 ; WX 334 ; N braceleft ; B 52 -210 445 728 ; +C 124 ; WX 260 ; N bar ; B 92 -210 168 728 ; +C 125 ; WX 334 ; N braceright ; B -84 -210 309 728 ; +C 126 ; WX 584 ; N asciitilde ; B 42 272 542 432 ; +C 127 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 128 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 129 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 130 ; WX 222 ; N quotesinglbase ; B -7 -145 145 100 ; +C 131 ; WX 556 ; N florin ; B 22 -210 530 729 ; +C 132 ; WX 333 ; N quotedblbase ; B -20 -145 292 100 ; +C 133 ; WX 1000 ; N ellipsis ; B 144 0 933 100 ; +C 134 ; WX 556 ; N dagger ; B 91 -170 583 706 ; +C 135 ; WX 556 ; N daggerdbl ; B 5 -170 588 706 ; +C 136 ; WX 333 ; N circumflex ; B 100 582 388 716 ; +C 137 ; WX 1000 ; N perthousand ; B 66 -27 1003 728 ; +C 138 ; WX 667 ; N Scaron ; B 70 -12 671 894 ; +C 139 ; WX 333 ; N guilsinglleft ; B 47 35 314 479 ; +C 140 ; WX 1000 ; N OE ; B 80 -13 1044 728 ; +C 141 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 142 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 143 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 144 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 145 ; WX 222 ; N quoteleft ; B 129 483 281 728 ; +C 146 ; WX 222 ; N quoteright ; B 125 468 277 713 ; +C 147 ; WX 333 ; N quotedblleft ; B 105 483 413 728 ; +C 148 ; WX 333 ; N quotedblright ; B 104 468 417 713 ; +C 149 ; WX 350 ; N bullet ; B 53 227 301 474 ; +C 150 ; WX 556 ; N endash ; B -2 224 554 294 ; +C 151 ; WX 1000 ; N emdash ; B 0 224 1000 294 ; +C 152 ; WX 333 ; N tilde ; B 94 596 424 706 ; +C 153 ; WX 1000 ; N trademark ; B 110 318 871 716 ; +C 154 ; WX 500 ; N scaron ; B 38 -12 504 716 ; +C 155 ; WX 333 ; N guilsinglright ; B 16 35 288 479 ; +C 156 ; WX 944 ; N oe ; B 63 -12 919 530 ; +C 157 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 158 ; WX 750 ; N .notdef ; B 125 0 625 625 ; +C 159 ; WX 667 ; N Ydieresis ; B 117 0 773 858 ; +C 160 ; WX 278 ; N space ; B 56 0 304 716 ; +C 161 ; WX 333 ; N exclamdown ; B 30 -197 278 519 ; +C 162 ; WX 556 ; N cent ; B 75 -199 530 726 ; +C 163 ; WX 556 ; N sterling ; B 31 -12 607 728 ; +C 164 ; WX 556 ; N currency ; B 36 115 516 594 ; +C 165 ; WX 556 ; N yen ; B 37 0 667 716 ; +C 166 ; WX 260 ; N brokenbar ; B 92 -210 168 728 ; +C 167 ; WX 556 ; N section ; B 30 -210 555 728 ; +C 168 ; WX 333 ; N dieresis ; B 116 599 409 699 ; +C 169 ; WX 737 ; N copyright ; B 1 -9 738 728 ; +C 170 ; WX 370 ; N ordfeminine ; B 82 359 409 728 ; +C 171 ; WX 556 ; N guillemotleft ; B 79 35 537 479 ; +C 172 ; WX 584 ; N logicalnot ; B 56 207 528 503 ; +C 173 ; WX 333 ; N hyphen ; B 46 215 334 303 ; +C 174 ; WX 737 ; N registered ; B 1 -9 738 728 ; +C 175 ; WX 552 ; N overscore ; B -15 765 567 828 ; +C 176 ; WX 400 ; N degree ; B 63 457 333 728 ; +C 177 ; WX 549 ; N plusminus ; B 38 0 511 600 ; +C 178 ; WX 333 ; N twosuperior ; B 74 358 401 725 ; +C 179 ; WX 333 ; N threesuperior ; B 83 349 400 725 ; +C 180 ; WX 333 ; N acute ; B 169 582 372 716 ; +C 181 ; WX 576 ; N mu1 ; B 6 -200 572 519 ; +C 182 ; WX 537 ; N paragraph ; B 69 -199 609 716 ; +C 183 ; WX 278 ; N periodcentered ; B 90 302 190 402 ; +C 184 ; WX 333 ; N cedilla ; B 38 -208 288 6 ; +C 185 ; WX 333 ; N onesuperior ; B 136 358 354 725 ; +C 186 ; WX 365 ; N ordmasculine ; B 70 360 412 728 ; +C 187 ; WX 556 ; N guillemotright ; B 41 35 505 479 ; +C 188 ; WX 834 ; N onequarter ; B 83 -30 851 728 ; +C 189 ; WX 834 ; N onehalf ; B 60 -30 827 728 ; +C 190 ; WX 834 ; N threequarters ; B 83 -30 865 728 ; +C 191 ; WX 611 ; N questiondown ; B 57 -209 490 519 ; +C 192 ; WX 667 ; N Agrave ; B -20 0 617 895 ; +C 193 ; WX 667 ; N Aacute ; B -20 0 617 894 ; +C 194 ; WX 667 ; N Acircumflex ; B -20 0 617 894 ; +C 195 ; WX 667 ; N Atilde ; B -20 0 617 868 ; +C 196 ; WX 667 ; N Adieresis ; B -20 0 617 860 ; +C 197 ; WX 667 ; N Aring ; B -20 0 617 863 ; +C 198 ; WX 1000 ; N AE ; B -41 0 1043 716 ; +C 199 ; WX 722 ; N Ccedilla ; B 91 -210 730 728 ; +C 200 ; WX 667 ; N Egrave ; B 45 0 711 895 ; +C 201 ; WX 667 ; N Eacute ; B 45 0 711 894 ; +C 202 ; WX 667 ; N Ecircumflex ; B 45 0 711 894 ; +C 203 ; WX 667 ; N Edieresis ; B 45 0 711 858 ; +C 204 ; WX 278 ; N Igrave ; B 57 0 340 895 ; +C 205 ; WX 278 ; N Iacute ; B 57 0 389 894 ; +C 206 ; WX 278 ; N Icircumflex ; B 57 0 407 894 ; +C 207 ; WX 278 ; N Idieresis ; B 57 0 414 860 ; +C 208 ; WX 722 ; N Eth ; B 36 0 712 716 ; +C 209 ; WX 722 ; N Ntilde ; B 49 0 757 868 ; +C 210 ; WX 778 ; N Ograve ; B 91 -12 772 895 ; +C 211 ; WX 778 ; N Oacute ; B 91 -12 772 894 ; +C 212 ; WX 778 ; N Ocircumflex ; B 91 -12 772 894 ; +C 213 ; WX 778 ; N Otilde ; B 91 -12 772 868 ; +C 214 ; WX 778 ; N Odieresis ; B 91 -12 772 860 ; +C 215 ; WX 584 ; N multiply ; B 79 141 504 566 ; +C 216 ; WX 778 ; N Oslash ; B 85 -50 776 765 ; +C 217 ; WX 722 ; N Ugrave ; B 97 -13 754 895 ; +C 218 ; WX 722 ; N Uacute ; B 97 -13 754 894 ; +C 219 ; WX 722 ; N Ucircumflex ; B 97 -13 754 894 ; +C 220 ; WX 722 ; N Udieresis ; B 97 -13 754 860 ; +C 221 ; WX 667 ; N Yacute ; B 117 0 773 894 ; +C 222 ; WX 667 ; N Thorn ; B 43 0 667 716 ; +C 223 ; WX 611 ; N germandbls ; B 36 -12 567 728 ; +C 224 ; WX 556 ; N agrave ; B 44 -12 526 716 ; +C 225 ; WX 556 ; N aacute ; B 44 -12 526 716 ; +C 226 ; WX 556 ; N acircumflex ; B 44 -12 526 716 ; +C 227 ; WX 556 ; N atilde ; B 44 -12 541 707 ; +C 228 ; WX 556 ; N adieresis ; B 44 -12 526 699 ; +C 229 ; WX 556 ; N aring ; B 44 -12 526 733 ; +C 230 ; WX 889 ; N ae ; B 42 -12 865 531 ; +C 231 ; WX 500 ; N ccedilla ; B 56 -199 511 530 ; +C 232 ; WX 556 ; N egrave ; B 52 -12 532 716 ; +C 233 ; WX 556 ; N eacute ; B 52 -12 532 716 ; +C 234 ; WX 556 ; N ecircumflex ; B 52 -12 532 716 ; +C 235 ; WX 556 ; N edieresis ; B 52 -12 532 699 ; +C 236 ; WX 278 ; N igrave ; B 61 0 310 716 ; +C 237 ; WX 278 ; N iacute ; B 61 0 349 716 ; +C 238 ; WX 278 ; N icircumflex ; B 61 0 372 716 ; +C 239 ; WX 278 ; N idieresis ; B 61 0 378 699 ; +C 240 ; WX 556 ; N eth ; B 49 -12 546 716 ; +C 241 ; WX 556 ; N ntilde ; B 33 0 532 706 ; +C 242 ; WX 556 ; N ograve ; B 49 -12 540 716 ; +C 243 ; WX 556 ; N oacute ; B 49 -12 540 716 ; +C 244 ; WX 556 ; N ocircumflex ; B 49 -12 540 716 ; +C 245 ; WX 556 ; N otilde ; B 49 -12 540 706 ; +C 246 ; WX 556 ; N odieresis ; B 49 -12 540 699 ; +C 247 ; WX 549 ; N divide ; B 38 156 511 550 ; +C 248 ; WX 611 ; N oslash ; B 72 -50 581 566 ; +C 249 ; WX 556 ; N ugrave ; B 63 -12 558 716 ; +C 250 ; WX 556 ; N uacute ; B 63 -12 558 716 ; +C 251 ; WX 556 ; N ucircumflex ; B 63 -12 558 716 ; +C 252 ; WX 556 ; N udieresis ; B 63 -12 558 699 ; +C 253 ; WX 500 ; N yacute ; B 0 -210 561 716 ; +C 254 ; WX 556 ; N thorn ; B -10 -199 535 716 ; +C 255 ; WX 500 ; N ydieresis ; B 0 -210 561 699 ; +C -1 ; WX 0 ; N .null ; B 56 0 304 716 ; +C -1 ; WX 278 ; N nonmarkingreturn ; B 56 0 304 716 ; +C -1 ; WX 549 ; N notequal ; B 38 -14 511 720 ; +C -1 ; WX 713 ; N infinity ; B 75 189 640 510 ; +C -1 ; WX 549 ; N lessequal ; B 38 52 512 654 ; +C -1 ; WX 549 ; N greaterequal ; B 38 52 512 654 ; +C -1 ; WX 494 ; N partialdiff ; B 25 -12 473 728 ; +C -1 ; WX 713 ; N summation ; B 60 -210 677 728 ; +C -1 ; WX 823 ; N product ; B 79 -210 744 728 ; +C -1 ; WX 549 ; N pi1 ; B 0 0 601 519 ; +C -1 ; WX 274 ; N integral ; B 0 -107 273 910 ; +C -1 ; WX 768 ; N Ohm ; B 62 0 720 734 ; +C -1 ; WX 549 ; N radical ; B 42 -38 550 913 ; +C -1 ; WX 549 ; N approxequal ; B 25 184 524 521 ; +C -1 ; WX 612 ; N increment ; B 14 0 600 677 ; +C -1 ; WX 494 ; N lozenge ; B 23 0 472 694 ; +C -1 ; WX 167 ; N fraction ; B -262 -30 505 728 ; +C -1 ; WX 556 ; N Euro ; B 40 -12 645 728 ; +C -1 ; WX 500 ; N fi ; B 54 0 545 728 ; +C -1 ; WX 500 ; N fl ; B 54 0 545 728 ; +C -1 ; WX 278 ; N dotlessi ; B 61 0 258 519 ; +C -1 ; WX 333 ; N macron ; B 98 600 416 668 ; +C -1 ; WX 333 ; N breve ; B 107 567 399 694 ; +C -1 ; WX 333 ; N dotaccent ; B 194 590 326 699 ; +C -1 ; WX 333 ; N ring ; B 160 556 338 733 ; +C -1 ; WX 333 ; N hungarumlaut ; B 86 582 454 716 ; +C -1 ; WX 333 ; N ogonek ; B 61 -208 265 13 ; +C -1 ; WX 333 ; N caron ; B 129 582 416 716 ; +C -1 ; WX 556 ; N Lslash ; B 12 0 524 716 ; +C -1 ; WX 222 ; N lslash ; B 19 0 285 716 ; +C -1 ; WX 611 ; N Zcaron ; B 24 0 637 894 ; +C -1 ; WX 500 ; N zcaron ; B 20 0 512 716 ; +C -1 ; WX 584 ; N minus ; B 56 312 528 394 ; +C -1 ; WX 556 ; N franc ; B -12 0 602 716 ; +C -1 ; WX 778 ; N Gbreve ; B 97 -12 766 886 ; +C -1 ; WX 556 ; N gbreve ; B 26 -208 564 694 ; +C -1 ; WX 278 ; N Idot ; B 57 0 334 864 ; +C -1 ; WX 667 ; N Scedilla ; B 70 -210 671 728 ; +C -1 ; WX 500 ; N scedilla ; B 38 -199 501 530 ; +C -1 ; WX 722 ; N Cacute ; B 91 -12 730 894 ; +C -1 ; WX 500 ; N cacute ; B 56 -12 511 716 ; +C -1 ; WX 722 ; N Ccaron ; B 91 -12 730 894 ; +C -1 ; WX 500 ; N ccaron ; B 56 -12 515 716 ; +C -1 ; WX 556 ; N dmacron ; B 53 -12 653 716 ; +C -1 ; WX 333 ; N middot ; B 259 308 380 408 ; +C -1 ; WX 667 ; N Abreve ; B -20 0 617 886 ; +C -1 ; WX 556 ; N abreve ; B 44 -12 526 694 ; +C -1 ; WX 667 ; N Aogonek ; B -20 -208 698 716 ; +C -1 ; WX 556 ; N aogonek ; B 44 -208 570 530 ; +C -1 ; WX 722 ; N Dcaron ; B 44 0 712 894 ; +C -1 ; WX 625 ; N dcaron ; B 55 -12 743 716 ; +C -1 ; WX 722 ; N Dslash ; B 36 0 712 716 ; +C -1 ; WX 667 ; N Eogonek ; B 45 -208 711 716 ; +C -1 ; WX 556 ; N eogonek ; B 52 -208 532 530 ; +C -1 ; WX 667 ; N Ecaron ; B 45 0 711 894 ; +C -1 ; WX 556 ; N ecaron ; B 52 -12 532 716 ; +C -1 ; WX 556 ; N Lacute ; B 40 0 524 894 ; +C -1 ; WX 222 ; N lacute ; B 26 0 351 887 ; +C -1 ; WX 556 ; N Lcaron ; B 40 0 559 716 ; +C -1 ; WX 281 ; N lcaron ; B 27 0 399 716 ; +C -1 ; WX 556 ; N Ldot ; B 40 0 524 716 ; +C -1 ; WX 400 ; N ldot ; B 26 0 369 716 ; +C -1 ; WX 722 ; N Nacute ; B 49 0 757 894 ; +C -1 ; WX 556 ; N nacute ; B 33 0 528 716 ; +C -1 ; WX 722 ; N Ncaron ; B 49 0 757 894 ; +C -1 ; WX 556 ; N ncaron ; B 33 0 530 716 ; +C -1 ; WX 778 ; N Odblacute ; B 91 -12 772 894 ; +C -1 ; WX 556 ; N odblacute ; B 49 -12 582 716 ; +C -1 ; WX 722 ; N Racute ; B 47 0 730 894 ; +C -1 ; WX 333 ; N racute ; B 33 0 419 716 ; +C -1 ; WX 722 ; N Rcaron ; B 47 0 730 894 ; +C -1 ; WX 333 ; N rcaron ; B 33 0 452 716 ; +C -1 ; WX 667 ; N Sacute ; B 70 -12 671 894 ; +C -1 ; WX 500 ; N sacute ; B 38 -12 501 716 ; +C -1 ; WX 611 ; N Tcedilla ; B 125 -275 705 716 ; +C -1 ; WX 278 ; N tcedilla ; B 47 -253 321 707 ; +C -1 ; WX 611 ; N Tcaron ; B 125 0 705 894 ; +C -1 ; WX 354 ; N tcaron ; B 53 -9 473 716 ; +C -1 ; WX 722 ; N Uring ; B 97 -13 754 934 ; +C -1 ; WX 556 ; N uring ; B 63 -12 558 733 ; +C -1 ; WX 722 ; N Udblacute ; B 97 -13 754 894 ; +C -1 ; WX 556 ; N udblacute ; B 63 -12 568 716 ; +C -1 ; WX 611 ; N Zacute ; B 24 0 637 894 ; +C -1 ; WX 500 ; N zacute ; B 20 0 512 716 ; +C -1 ; WX 611 ; N Zdot ; B 24 0 637 864 ; +C -1 ; WX 500 ; N zdot ; B 20 0 512 699 ; +C -1 ; WX 570 ; N Gamma ; B 42 0 659 716 ; +C -1 ; WX 778 ; N Theta ; B 91 -12 772 728 ; +C -1 ; WX 837 ; N Phi ; B 88 -28 826 736 ; +C -1 ; WX 570 ; N alpha ; B 50 -12 599 530 ; +C -1 ; WX 556 ; N delta ; B 48 -12 590 716 ; +C -1 ; WX 439 ; N epsilon ; B 34 -12 458 530 ; +C -1 ; WX 603 ; N sigma ; B 49 -12 645 530 ; +C -1 ; WX 374 ; N tau ; B 86 0 415 519 ; +C -1 ; WX 652 ; N phi ; B 54 -199 640 530 ; +C -1 ; WX 552 ; N underscoredbl ; B -15 -325 567 -135 ; +C -1 ; WX 500 ; N exclamdbl ; B 56 0 522 716 ; +C -1 ; WX 365 ; N nsuperior ; B 58 253 393 585 ; +C -1 ; WX 1094 ; N peseta ; B 12 -13 1075 716 ; +C -1 ; WX 1000 ; N arrowleft ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowup ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowright ; B 39 77 961 428 ; +C -1 ; WX 500 ; N arrowdown ; B 75 -209 426 654 ; +C -1 ; WX 1000 ; N arrowboth ; B 39 77 961 429 ; +C -1 ; WX 500 ; N arrowupdn ; B 74 -208 425 714 ; +C -1 ; WX 500 ; N arrowupdnbse ; B 74 -303 425 714 ; +C -1 ; WX 979 ; N orthogonal ; B 177 0 802 625 ; +C -1 ; WX 719 ; N intersection ; B 77 0 642 729 ; +C -1 ; WX 584 ; N equivalence ; B 56 95 528 611 ; +C -1 ; WX 604 ; N house ; B 77 0 527 563 ; +C -1 ; WX 584 ; N revlogicalnot ; B 55 207 528 503 ; +C -1 ; WX 604 ; N integraltp ; B 267 -251 477 848 ; +C -1 ; WX 604 ; N integralbt ; B 127 -251 337 848 ; +C -1 ; WX 708 ; N SF100000 ; B -11 261 719 346 ; +C -1 ; WX 625 ; N SF110000 ; B 223 -303 309 910 ; +C -1 ; WX 708 ; N SF010000 ; B 312 -303 720 346 ; +C -1 ; WX 708 ; N SF030000 ; B -11 -303 396 346 ; +C -1 ; WX 708 ; N SF020000 ; B 312 261 720 910 ; +C -1 ; WX 708 ; N SF040000 ; B -11 261 396 910 ; +C -1 ; WX 708 ; N SF080000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF090000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF060000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF070000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF050000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF430000 ; B -11 168 719 439 ; +C -1 ; WX 708 ; N SF240000 ; B 219 -303 490 910 ; +C -1 ; WX 708 ; N SF510000 ; B 312 -303 720 439 ; +C -1 ; WX 708 ; N SF520000 ; B 219 -303 720 346 ; +C -1 ; WX 708 ; N SF390000 ; B 219 -303 719 439 ; +C -1 ; WX 708 ; N SF220000 ; B -11 -303 396 439 ; +C -1 ; WX 708 ; N SF210000 ; B -11 -303 489 346 ; +C -1 ; WX 708 ; N SF250000 ; B -11 -303 489 439 ; +C -1 ; WX 708 ; N SF500000 ; B 312 168 720 910 ; +C -1 ; WX 708 ; N SF490000 ; B 219 261 720 910 ; +C -1 ; WX 708 ; N SF380000 ; B 219 168 719 910 ; +C -1 ; WX 708 ; N SF280000 ; B -11 168 396 910 ; +C -1 ; WX 708 ; N SF270000 ; B -11 261 489 910 ; +C -1 ; WX 708 ; N SF260000 ; B -11 168 489 910 ; +C -1 ; WX 708 ; N SF360000 ; B 312 -303 720 910 ; +C -1 ; WX 708 ; N SF370000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF420000 ; B 219 -303 720 910 ; +C -1 ; WX 708 ; N SF190000 ; B -11 -303 396 910 ; +C -1 ; WX 708 ; N SF200000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF230000 ; B -11 -303 489 910 ; +C -1 ; WX 708 ; N SF470000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF480000 ; B -11 -303 719 346 ; +C -1 ; WX 708 ; N SF410000 ; B -11 -303 719 439 ; +C -1 ; WX 708 ; N SF450000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF460000 ; B -11 261 719 910 ; +C -1 ; WX 708 ; N SF400000 ; B -11 168 719 910 ; +C -1 ; WX 708 ; N SF540000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF530000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N SF440000 ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N upblock ; B -11 303 719 910 ; +C -1 ; WX 708 ; N dnblock ; B -11 -303 719 303 ; +C -1 ; WX 708 ; N block ; B -11 -303 719 910 ; +C -1 ; WX 708 ; N lfblock ; B -11 -303 354 910 ; +C -1 ; WX 708 ; N rtblock ; B 354 -303 720 910 ; +C -1 ; WX 708 ; N ltshade ; B 50 -246 719 910 ; +C -1 ; WX 708 ; N shade ; B -11 -246 719 910 ; +C -1 ; WX 729 ; N dkshade ; B 0 -307 729 910 ; +C -1 ; WX 604 ; N filledbox ; B 71 0 532 461 ; +C -1 ; WX 1000 ; N filledrect ; B 0 155 1000 343 ; +C -1 ; WX 990 ; N triagup ; B 148 0 842 693 ; +C -1 ; WX 990 ; N triagrt ; B 141 -15 849 692 ; +C -1 ; WX 990 ; N triagdn ; B 148 -15 842 678 ; +C -1 ; WX 990 ; N triaglf ; B 141 -15 849 692 ; +C -1 ; WX 604 ; N circle ; B 87 67 517 497 ; +C -1 ; WX 604 ; N invbullet ; B 63 0 541 479 ; +C -1 ; WX 604 ; N invcircle ; B 21 0 584 564 ; +C -1 ; WX 1021 ; N smileface ; B 199 -58 822 564 ; +C -1 ; WX 1052 ; N invsmileface ; B 215 -58 837 564 ; +C -1 ; WX 917 ; N sun ; B 8 -109 909 792 ; +C -1 ; WX 750 ; N female ; B 119 -214 630 736 ; +C -1 ; WX 750 ; N male ; B 54 -128 691 791 ; +C -1 ; WX 531 ; N spade ; B 28 0 503 601 ; +C -1 ; WX 656 ; N club ; B 27 0 629 601 ; +C -1 ; WX 594 ; N heart ; B 31 -12 563 601 ; +C -1 ; WX 510 ; N diamond ; B 31 -12 479 601 ; +C -1 ; WX 500 ; N musicalnote ; B 18 -18 482 666 ; +C -1 ; WX 750 ; N musicalnotedbl ; B 42 -63 649 742 ; +C -1 ; WX 733 ; N IJ ; B 57 -12 769 716 ; +C -1 ; WX 444 ; N ij ; B 29 -208 494 716 ; +C -1 ; WX 615 ; N napostrophe ; B 49 0 590 713 ; +C -1 ; WX 188 ; N minute ; B 127 462 259 716 ; +C -1 ; WX 354 ; N second ; B 135 462 429 716 ; +C -1 ; WX 885 ; N afii61248 ; B 90 -26 870 728 ; +C -1 ; WX 323 ; N afii61289 ; B 12 -12 422 728 ; +C -1 ; WX 604 ; N H22073 ; B 71 0 532 461 ; +C -1 ; WX 354 ; N H18543 ; B 64 217 290 444 ; +C -1 ; WX 354 ; N H18551 ; B 64 217 290 444 ; +C -1 ; WX 604 ; N H18533 ; B 87 67 517 497 ; +C -1 ; WX 354 ; N openbullet ; B 55 208 300 453 ; +C -1 ; WX 667 ; N Amacron ; B -20 0 618 845 ; +C -1 ; WX 556 ; N amacron ; B 44 -12 527 668 ; +C -1 ; WX 722 ; N Ccircumflex ; B 91 -12 730 894 ; +C -1 ; WX 500 ; N ccircumflex ; B 56 -12 511 716 ; +C -1 ; WX 722 ; N Cdot ; B 91 -12 730 869 ; +C -1 ; WX 500 ; N cdot ; B 56 -12 511 699 ; +C -1 ; WX 667 ; N Emacron ; B 45 0 711 845 ; +C -1 ; WX 556 ; N emacron ; B 52 -12 532 668 ; +C -1 ; WX 667 ; N Ebreve ; B 45 0 711 886 ; +C -1 ; WX 556 ; N ebreve ; B 52 -12 532 694 ; +C -1 ; WX 667 ; N Edot ; B 45 0 711 869 ; +C -1 ; WX 556 ; N edot ; B 52 -12 532 699 ; +C -1 ; WX 778 ; N Gcircumflex ; B 97 -12 766 894 ; +C -1 ; WX 556 ; N gcircumflex ; B 26 -208 564 716 ; +C -1 ; WX 778 ; N Gdot ; B 97 -12 766 869 ; +C -1 ; WX 556 ; N gdot ; B 26 -208 564 699 ; +C -1 ; WX 778 ; N Gcedilla ; B 97 -208 766 728 ; +C -1 ; WX 556 ; N gcedilla ; B 26 -208 564 770 ; +C -1 ; WX 722 ; N Hcircumflex ; B 42 0 754 894 ; +C -1 ; WX 556 ; N hcircumflex ; B 33 0 529 894 ; +C -1 ; WX 722 ; N Hbar ; B 42 0 797 716 ; +C -1 ; WX 556 ; N hbar ; B 33 0 529 716 ; +C -1 ; WX 278 ; N Itilde ; B 57 0 438 869 ; +C -1 ; WX 278 ; N itilde ; B 30 0 378 706 ; +C -1 ; WX 278 ; N Imacron ; B 57 0 430 845 ; +C -1 ; WX 278 ; N imacron ; B 30 0 369 668 ; +C -1 ; WX 278 ; N Ibreve ; B 57 0 431 886 ; +C -1 ; WX 278 ; N ibreve ; B 30 0 362 694 ; +C -1 ; WX 278 ; N Iogonek ; B 28 -208 302 716 ; +C -1 ; WX 222 ; N iogonek ; B 0 -208 268 716 ; +C -1 ; WX 500 ; N Jcircumflex ; B 33 -12 625 894 ; +C -1 ; WX 222 ; N jcircumflex ; B -121 -208 331 716 ; +C -1 ; WX 667 ; N Kcedilla ; B 44 -208 741 716 ; +C -1 ; WX 500 ; N kcedilla ; B 34 -208 554 716 ; +C -1 ; WX 500 ; N kgreenlandic ; B 34 0 554 519 ; +C -1 ; WX 556 ; N Lcedilla ; B 40 -208 524 716 ; +C -1 ; WX 222 ; N lcedilla ; B -71 -208 264 716 ; +C -1 ; WX 722 ; N Ncedilla ; B 49 -208 757 716 ; +C -1 ; WX 556 ; N ncedilla ; B 33 -208 528 530 ; +C -1 ; WX 723 ; N Eng ; B 48 -13 715 728 ; +C -1 ; WX 556 ; N eng ; B 36 -208 530 530 ; +C -1 ; WX 778 ; N Omacron ; B 91 -12 772 845 ; +C -1 ; WX 556 ; N omacron ; B 49 -12 540 668 ; +C -1 ; WX 778 ; N Obreve ; B 91 -12 772 886 ; +C -1 ; WX 556 ; N obreve ; B 49 -12 540 694 ; +C -1 ; WX 722 ; N Rcedilla ; B 47 -208 730 716 ; +C -1 ; WX 333 ; N rcedilla ; B -28 -208 419 530 ; +C -1 ; WX 667 ; N Scircumflex ; B 70 -12 671 894 ; +C -1 ; WX 500 ; N scircumflex ; B 38 -12 501 716 ; +C -1 ; WX 611 ; N Tbar ; B 115 0 705 716 ; +C -1 ; WX 278 ; N tbar ; B 12 -9 321 707 ; +C -1 ; WX 722 ; N Utilde ; B 97 -13 754 869 ; +C -1 ; WX 556 ; N utilde ; B 63 -12 558 706 ; +C -1 ; WX 722 ; N Umacron ; B 97 -13 754 845 ; +C -1 ; WX 556 ; N umacron ; B 63 -12 558 668 ; +C -1 ; WX 722 ; N Ubreve ; B 97 -13 754 886 ; +C -1 ; WX 556 ; N ubreve ; B 63 -12 558 694 ; +C -1 ; WX 722 ; N Uogonek ; B 97 -208 754 716 ; +C -1 ; WX 556 ; N uogonek ; B 63 -208 557 519 ; +C -1 ; WX 944 ; N Wcircumflex ; B 125 0 1062 894 ; +C -1 ; WX 722 ; N wcircumflex ; B 78 0 777 716 ; +C -1 ; WX 667 ; N Ycircumflex ; B 117 0 773 894 ; +C -1 ; WX 500 ; N ycircumflex ; B 0 -210 561 716 ; +C -1 ; WX 222 ; N longs ; B 26 0 389 728 ; +C -1 ; WX 667 ; N Aringacute ; B -20 0 622 1025 ; +C -1 ; WX 556 ; N aringacute ; B 44 -12 526 914 ; +C -1 ; WX 1000 ; N AEacute ; B -41 0 1043 894 ; +C -1 ; WX 889 ; N aeacute ; B 42 -12 865 716 ; +C -1 ; WX 778 ; N Oslashacute ; B 85 -50 776 894 ; +C -1 ; WX 611 ; N oslashacute ; B 72 -50 581 716 ; +C -1 ; WX 278 ; N anoteleia ; B 145 418 265 519 ; +C -1 ; WX 944 ; N Wgrave ; B 125 0 1062 894 ; +C -1 ; WX 722 ; N wgrave ; B 78 0 777 716 ; +C -1 ; WX 944 ; N Wacute ; B 125 0 1062 894 ; +C -1 ; WX 722 ; N wacute ; B 78 0 777 716 ; +C -1 ; WX 944 ; N Wdieresis ; B 125 0 1062 860 ; +C -1 ; WX 722 ; N wdieresis ; B 78 0 777 699 ; +C -1 ; WX 667 ; N Ygrave ; B 117 0 773 894 ; +C -1 ; WX 500 ; N ygrave ; B 0 -210 561 716 ; +C -1 ; WX 222 ; N quotereversed ; B 150 468 278 713 ; +C -1 ; WX 333 ; N radicalex ; B 75 600 451 668 ; +C -1 ; WX 556 ; N afii08941 ; B 31 -12 607 728 ; +C -1 ; WX 600 ; N estimated ; B 44 -17 561 535 ; +C -1 ; WX 834 ; N oneeighth ; B 60 -30 827 728 ; +C -1 ; WX 834 ; N threeeighths ; B 72 -30 839 728 ; +C -1 ; WX 834 ; N fiveeighths ; B 72 -30 839 728 ; +C -1 ; WX 834 ; N seveneighths ; B 48 -30 819 728 ; +C -1 ; WX 333 ; N commaaccent ; B 19 -257 169 -59 ; +C -1 ; WX 333 ; N undercommaaccent ; B -16 -208 234 -24 ; +C -1 ; WX 333 ; N tonos ; B 185 582 388 716 ; +C -1 ; WX 333 ; N dieresistonos ; B 47 582 449 717 ; +C -1 ; WX 667 ; N Alphatonos ; B -21 0 615 716 ; +C -1 ; WX 789 ; N Epsilontonos ; B 48 0 831 716 ; +C -1 ; WX 846 ; N Etatonos ; B 51 0 879 716 ; +C -1 ; WX 389 ; N Iotatonos ; B 48 0 410 716 ; +C -1 ; WX 794 ; N Omicrontonos ; B 42 -12 784 728 ; +C -1 ; WX 865 ; N Upsilontonos ; B 47 0 970 716 ; +C -1 ; WX 775 ; N Omegatonos ; B 13 0 765 728 ; +C -1 ; WX 222 ; N iotadieresistonos ; B -9 0 393 717 ; +C -1 ; WX 667 ; N Alpha ; B -20 0 617 716 ; +C -1 ; WX 667 ; N Beta ; B 43 0 655 716 ; +C -1 ; WX 671 ; N Delta ; B -10 0 627 716 ; +C -1 ; WX 667 ; N Epsilon ; B 45 0 711 716 ; +C -1 ; WX 611 ; N Zeta ; B 24 0 637 716 ; +C -1 ; WX 722 ; N Eta ; B 42 0 754 716 ; +C -1 ; WX 278 ; N Iota ; B 57 0 302 716 ; +C -1 ; WX 667 ; N Kappa ; B 44 0 741 716 ; +C -1 ; WX 667 ; N Lambda ; B -10 0 623 716 ; +C -1 ; WX 833 ; N Mu ; B 44 0 872 716 ; +C -1 ; WX 722 ; N Nu ; B 49 0 757 716 ; +C -1 ; WX 648 ; N Xi ; B 4 0 691 716 ; +C -1 ; WX 778 ; N Omicron ; B 91 -12 772 728 ; +C -1 ; WX 725 ; N Pi ; B 42 0 754 716 ; +C -1 ; WX 667 ; N Rho ; B 43 0 698 716 ; +C -1 ; WX 600 ; N Sigma ; B 22 0 666 716 ; +C -1 ; WX 611 ; N Tau ; B 125 0 705 716 ; +C -1 ; WX 667 ; N Upsilon ; B 117 0 773 716 ; +C -1 ; WX 667 ; N Chi ; B -32 0 769 716 ; +C -1 ; WX 831 ; N Psi ; B 124 0 886 716 ; +C -1 ; WX 761 ; N Omega ; B 3 0 755 728 ; +C -1 ; WX 278 ; N Iotadieresis ; B 57 0 429 860 ; +C -1 ; WX 667 ; N Upsilondieresis ; B 117 0 773 860 ; +C -1 ; WX 570 ; N alphatonos ; B 50 -12 599 716 ; +C -1 ; WX 439 ; N epsilontonos ; B 34 -12 458 716 ; +C -1 ; WX 555 ; N etatonos ; B 34 -199 528 716 ; +C -1 ; WX 222 ; N iotatonos ; B 30 0 315 716 ; +C -1 ; WX 550 ; N upsilondieresistonos ; B 73 -12 559 717 ; +C -1 ; WX 571 ; N beta ; B -11 -199 556 729 ; +C -1 ; WX 500 ; N gamma ; B 77 -199 557 519 ; +C -1 ; WX 463 ; N zeta ; B 49 -208 562 716 ; +C -1 ; WX 555 ; N eta ; B 34 -199 528 530 ; +C -1 ; WX 542 ; N theta ; B 63 -12 558 730 ; +C -1 ; WX 222 ; N iota ; B 30 0 227 519 ; +C -1 ; WX 500 ; N kappa ; B 29 0 550 519 ; +C -1 ; WX 492 ; N lambda ; B -25 0 447 716 ; +C -1 ; WX 548 ; N mu ; B -12 -199 554 519 ; +C -1 ; WX 500 ; N nu ; B 79 0 559 519 ; +C -1 ; WX 447 ; N xi ; B 56 -208 505 728 ; +C -1 ; WX 556 ; N omicron ; B 49 -12 540 530 ; +C -1 ; WX 573 ; N rho ; B -14 -199 558 530 ; +C -1 ; WX 486 ; N sigma1 ; B 54 -208 536 530 ; +C -1 ; WX 550 ; N upsilon ; B 73 -12 556 519 ; +C -1 ; WX 546 ; N chi ; B -72 -199 591 519 ; +C -1 ; WX 728 ; N psi ; B 76 -199 733 519 ; +C -1 ; WX 779 ; N omega ; B 49 -12 763 519 ; +C -1 ; WX 222 ; N iotadieresis ; B 30 0 352 699 ; +C -1 ; WX 550 ; N upsilondieresis ; B 73 -12 556 699 ; +C -1 ; WX 556 ; N omicrontonos ; B 49 -12 540 716 ; +C -1 ; WX 550 ; N upsilontonos ; B 73 -12 556 716 ; +C -1 ; WX 779 ; N omegatonos ; B 49 -12 763 716 ; +C -1 ; WX 667 ; N afii10023 ; B 45 0 711 860 ; +C -1 ; WX 843 ; N afii10051 ; B 113 -12 822 716 ; +C -1 ; WX 544 ; N afii10052 ; B 42 0 656 894 ; +C -1 ; WX 708 ; N afii10053 ; B 91 -12 731 728 ; +C -1 ; WX 667 ; N afii10054 ; B 70 -12 671 728 ; +C -1 ; WX 278 ; N afii10055 ; B 57 0 302 716 ; +C -1 ; WX 278 ; N afii10056 ; B 57 0 423 860 ; +C -1 ; WX 500 ; N afii10057 ; B 33 -12 536 716 ; +C -1 ; WX 1066 ; N afii10058 ; B -11 -12 1042 716 ; +C -1 ; WX 982 ; N afii10059 ; B 42 0 958 716 ; +C -1 ; WX 844 ; N afii10060 ; B 112 0 809 716 ; +C -1 ; WX 589 ; N afii10061 ; B 42 0 674 894 ; +C -1 ; WX 639 ; N afii10062 ; B 113 -10 751 883 ; +C -1 ; WX 724 ; N afii10145 ; B 42 -199 760 716 ; +C -1 ; WX 667 ; N afii10017 ; B -20 0 617 716 ; +C -1 ; WX 651 ; N afii10018 ; B 42 0 657 716 ; +C -1 ; WX 667 ; N afii10019 ; B 43 0 655 716 ; +C -1 ; WX 544 ; N afii10020 ; B 42 0 656 716 ; +C -1 ; WX 704 ; N afii10021 ; B -63 -143 733 716 ; +C -1 ; WX 667 ; N afii10022 ; B 45 0 711 716 ; +C -1 ; WX 917 ; N afii10024 ; B -36 0 1002 721 ; +C -1 ; WX 614 ; N afii10025 ; B 48 -12 614 728 ; +C -1 ; WX 715 ; N afii10026 ; B 42 0 751 716 ; +C -1 ; WX 715 ; N afii10027 ; B 42 0 751 883 ; +C -1 ; WX 589 ; N afii10028 ; B 42 0 674 721 ; +C -1 ; WX 686 ; N afii10029 ; B -10 -8 723 716 ; +C -1 ; WX 833 ; N afii10030 ; B 44 0 872 716 ; +C -1 ; WX 722 ; N afii10031 ; B 42 0 754 716 ; +C -1 ; WX 778 ; N afii10032 ; B 91 -12 772 728 ; +C -1 ; WX 725 ; N afii10033 ; B 42 0 754 716 ; +C -1 ; WX 667 ; N afii10034 ; B 43 0 698 716 ; +C -1 ; WX 722 ; N afii10035 ; B 91 -12 730 728 ; +C -1 ; WX 611 ; N afii10036 ; B 125 0 705 716 ; +C -1 ; WX 639 ; N afii10037 ; B 113 -10 751 716 ; +C -1 ; WX 795 ; N afii10038 ; B 80 0 793 716 ; +C -1 ; WX 667 ; N afii10039 ; B -32 0 769 716 ; +C -1 ; WX 727 ; N afii10040 ; B 42 -143 759 716 ; +C -1 ; WX 673 ; N afii10041 ; B 107 0 709 716 ; +C -1 ; WX 920 ; N afii10042 ; B 42 0 956 716 ; +C -1 ; WX 923 ; N afii10043 ; B 42 -143 956 716 ; +C -1 ; WX 805 ; N afii10044 ; B 113 0 781 716 ; +C -1 ; WX 886 ; N afii10045 ; B 42 0 921 716 ; +C -1 ; WX 651 ; N afii10046 ; B 42 0 626 716 ; +C -1 ; WX 694 ; N afii10047 ; B 44 -12 687 728 ; +C -1 ; WX 1022 ; N afii10048 ; B 42 -12 1012 728 ; +C -1 ; WX 682 ; N afii10049 ; B -26 0 720 716 ; +C -1 ; WX 556 ; N afii10065 ; B 44 -12 526 530 ; +C -1 ; WX 563 ; N afii10066 ; B 58 -12 596 728 ; +C -1 ; WX 522 ; N afii10067 ; B 49 -12 509 530 ; +C -1 ; WX 493 ; N afii10068 ; B 38 -12 480 530 ; +C -1 ; WX 553 ; N afii10069 ; B 49 -12 547 728 ; +C -1 ; WX 556 ; N afii10070 ; B 52 -12 532 530 ; +C -1 ; WX 688 ; N afii10072 ; B -29 0 741 519 ; +C -1 ; WX 465 ; N afii10073 ; B 15 -12 455 530 ; +C -1 ; WX 556 ; N afii10074 ; B 63 -12 558 519 ; +C -1 ; WX 556 ; N afii10075 ; B 63 -12 558 721 ; +C -1 ; WX 472 ; N afii10076 ; B 31 0 520 519 ; +C -1 ; WX 564 ; N afii10077 ; B -20 -7 570 519 ; +C -1 ; WX 686 ; N afii10078 ; B 31 0 692 519 ; +C -1 ; WX 550 ; N afii10079 ; B 31 0 555 519 ; +C -1 ; WX 556 ; N afii10080 ; B 49 -12 540 530 ; +C -1 ; WX 550 ; N afii10081 ; B 31 0 555 519 ; +C -1 ; WX 556 ; N afii10082 ; B -10 -199 535 530 ; +C -1 ; WX 500 ; N afii10083 ; B 56 -12 511 530 ; +C -1 ; WX 833 ; N afii10084 ; B 33 0 813 530 ; +C -1 ; WX 500 ; N afii10085 ; B 0 -210 561 519 ; +C -1 ; WX 835 ; N afii10086 ; B 46 -199 823 716 ; +C -1 ; WX 500 ; N afii10087 ; B -1 0 538 519 ; +C -1 ; WX 572 ; N afii10088 ; B 61 -151 556 519 ; +C -1 ; WX 518 ; N afii10089 ; B 74 0 523 519 ; +C -1 ; WX 830 ; N afii10090 ; B 59 -12 835 519 ; +C -1 ; WX 851 ; N afii10091 ; B 59 -151 836 519 ; +C -1 ; WX 621 ; N afii10092 ; B 59 0 588 519 ; +C -1 ; WX 736 ; N afii10093 ; B 31 0 743 519 ; +C -1 ; WX 526 ; N afii10094 ; B 31 0 492 519 ; +C -1 ; WX 492 ; N afii10095 ; B 26 -12 479 530 ; +C -1 ; WX 752 ; N afii10096 ; B 31 -12 738 533 ; +C -1 ; WX 534 ; N afii10097 ; B -12 0 542 519 ; +C -1 ; WX 556 ; N afii10071 ; B 52 -12 532 699 ; +C -1 ; WX 556 ; N afii10099 ; B 34 -208 529 716 ; +C -1 ; WX 378 ; N afii10100 ; B 31 0 445 716 ; +C -1 ; WX 496 ; N afii10101 ; B 47 -12 500 530 ; +C -1 ; WX 500 ; N afii10102 ; B 38 -12 501 530 ; +C -1 ; WX 222 ; N afii10103 ; B 30 0 268 716 ; +C -1 ; WX 222 ; N afii10104 ; B 30 0 347 699 ; +C -1 ; WX 222 ; N afii10105 ; B -121 -208 267 716 ; +C -1 ; WX 910 ; N afii10106 ; B -20 -12 876 519 ; +C -1 ; WX 828 ; N afii10107 ; B 31 0 794 519 ; +C -1 ; WX 556 ; N afii10108 ; B 34 0 529 716 ; +C -1 ; WX 472 ; N afii10109 ; B 31 0 520 716 ; +C -1 ; WX 500 ; N afii10110 ; B 0 -210 561 720 ; +C -1 ; WX 556 ; N afii10193 ; B 61 -199 556 519 ; +C -1 ; WX 492 ; N afii10050 ; B 42 0 636 858 ; +C -1 ; WX 339 ; N afii10098 ; B 31 0 437 642 ; +C -1 ; WX 1000 ; N afii00208 ; B 40 224 992 294 ; +C -1 ; WX 1083 ; N afii61352 ; B 44 0 1082 716 ; +C -1 ; WX 670 ; N pi ; B 84 0 713 519 ; +C -1 ; WX 333 ; N sheva ; B 68 -306 179 -98 ; +C -1 ; WX 333 ; N hatafsegol ; B -16 -306 290 -98 ; +C -1 ; WX 333 ; N hatafpatah ; B -9 -306 280 -98 ; +C -1 ; WX 333 ; N hatafqamats ; B -9 -306 280 -98 ; +C -1 ; WX 333 ; N hiriq ; B 95 -180 179 -98 ; +C -1 ; WX 333 ; N tsere ; B 31 -180 243 -98 ; +C -1 ; WX 333 ; N segol ; B 31 -306 243 -98 ; +C -1 ; WX 333 ; N patah ; B 36 -154 243 -103 ; +C -1 ; WX 333 ; N qamats ; B 36 -236 243 -103 ; +C -1 ; WX 333 ; N holam ; B 256 577 340 659 ; +C -1 ; WX 333 ; N qubuts ; B -23 -306 270 -98 ; +C -1 ; WX 333 ; N dagesh ; B 185 241 269 323 ; +C -1 ; WX 333 ; N meteg ; B 78 -299 170 -103 ; +C -1 ; WX 383 ; N maqaf ; B 155 440 432 518 ; +C -1 ; WX 333 ; N rafe ; B 198 611 405 662 ; +C -1 ; WX 275 ; N paseq ; B 101 -10 305 625 ; +C -1 ; WX 333 ; N shindot ; B 511 577 595 660 ; +C -1 ; WX 333 ; N sindot ; B 7 577 94 660 ; +C -1 ; WX 278 ; N sofpasuq ; B 90 0 301 519 ; +C -1 ; WX 563 ; N alef ; B 51 0 614 518 ; +C -1 ; WX 542 ; N bet ; B 24 0 537 524 ; +C -1 ; WX 399 ; N gimel ; B 12 0 401 524 ; +C -1 ; WX 508 ; N dalet ; B 116 0 597 518 ; +C -1 ; WX 602 ; N he ; B 79 0 600 524 ; +C -1 ; WX 247 ; N vav ; B 76 0 281 518 ; +C -1 ; WX 382 ; N zayin ; B 125 0 471 518 ; +C -1 ; WX 599 ; N het ; B 76 0 600 524 ; +C -1 ; WX 590 ; N tet ; B 105 -14 609 529 ; +C -1 ; WX 247 ; N yod ; B 129 250 281 518 ; +C -1 ; WX 509 ; N finalkaf ; B 120 -199 507 524 ; +C -1 ; WX 461 ; N kaf ; B 41 -8 479 527 ; +C -1 ; WX 463 ; N lamed ; B 123 0 520 716 ; +C -1 ; WX 599 ; N finalmem ; B 76 0 600 524 ; +C -1 ; WX 601 ; N mem ; B 54 0 598 524 ; +C -1 ; WX 247 ; N finalnun ; B 33 -199 281 518 ; +C -1 ; WX 353 ; N nun ; B 29 0 365 524 ; +C -1 ; WX 574 ; N samekh ; B 90 -15 594 532 ; +C -1 ; WX 529 ; N ayin ; B 15 -48 574 518 ; +C -1 ; WX 566 ; N finalpe ; B 113 -199 567 524 ; +C -1 ; WX 546 ; N pe ; B 62 -8 567 527 ; +C -1 ; WX 461 ; N finaltsadi ; B 123 -199 533 518 ; +C -1 ; WX 479 ; N tsadi ; B 31 0 535 518 ; +C -1 ; WX 550 ; N qof ; B 39 -199 606 518 ; +C -1 ; WX 509 ; N resh ; B 120 0 507 524 ; +C -1 ; WX 694 ; N shin ; B 116 -14 756 518 ; +C -1 ; WX 643 ; N tav ; B 22 -4 642 524 ; +C -1 ; WX 493 ; N doublevav ; B 76 0 528 518 ; +C -1 ; WX 493 ; N vavyod ; B 129 0 528 518 ; +C -1 ; WX 493 ; N doubleyod ; B 129 250 528 518 ; +C -1 ; WX 236 ; N geresh ; B 114 330 302 518 ; +C -1 ; WX 417 ; N gershayim ; B 114 330 483 518 ; +C -1 ; WX 815 ; N newsheqelsign ; B 76 0 850 518 ; +C -1 ; WX 247 ; N vavshindot ; B 76 0 281 660 ; +C -1 ; WX 509 ; N finalkafsheva ; B 120 -199 508 524 ; +C -1 ; WX 509 ; N finalkafqamats ; B 92 -199 508 524 ; +C -1 ; WX 463 ; N lamedholam ; B 48 0 520 716 ; +C -1 ; WX 463 ; N lamedholamdagesh ; B 48 0 520 716 ; +C -1 ; WX 535 ; N altayin ; B 22 0 580 518 ; +C -1 ; WX 694 ; N shinshindot ; B 116 -14 776 660 ; +C -1 ; WX 694 ; N shinsindot ; B 116 -14 756 660 ; +C -1 ; WX 694 ; N shindageshshindot ; B 116 -14 776 660 ; +C -1 ; WX 694 ; N shindageshsindot ; B 116 -14 756 660 ; +C -1 ; WX 563 ; N alefpatah ; B 51 -154 614 519 ; +C -1 ; WX 563 ; N alefqamats ; B 51 -236 614 519 ; +C -1 ; WX 563 ; N alefmapiq ; B 51 0 614 518 ; +C -1 ; WX 542 ; N betdagesh ; B 24 0 537 524 ; +C -1 ; WX 399 ; N gimeldagesh ; B 12 0 401 524 ; +C -1 ; WX 508 ; N daletdagesh ; B 116 0 597 519 ; +C -1 ; WX 602 ; N hedagesh ; B 79 0 600 524 ; +C -1 ; WX 287 ; N vavdagesh ; B 59 0 321 518 ; +C -1 ; WX 411 ; N zayindagesh ; B 65 0 514 518 ; +C -1 ; WX 590 ; N tetdagesh ; B 112 -14 610 529 ; +C -1 ; WX 287 ; N yoddagesh ; B 75 250 321 518 ; +C -1 ; WX 509 ; N finalkafdagesh ; B 120 -199 508 524 ; +C -1 ; WX 461 ; N kafdagesh ; B 41 -8 480 527 ; +C -1 ; WX 463 ; N lameddagesh ; B 123 0 520 716 ; +C -1 ; WX 601 ; N memdagesh ; B 54 0 599 524 ; +C -1 ; WX 353 ; N nundagesh ; B 29 0 365 524 ; +C -1 ; WX 574 ; N samekhdagesh ; B 90 -15 594 532 ; +C -1 ; WX 566 ; N finalpedagesh ; B 112 -199 566 524 ; +C -1 ; WX 546 ; N pedagesh ; B 62 -8 567 527 ; +C -1 ; WX 479 ; N tsadidagesh ; B 31 0 535 519 ; +C -1 ; WX 550 ; N qofdagesh ; B 39 -199 606 519 ; +C -1 ; WX 509 ; N reshdagesh ; B 120 0 507 524 ; +C -1 ; WX 694 ; N shindagesh ; B 116 -14 756 518 ; +C -1 ; WX 643 ; N tavdages ; B 22 -4 642 524 ; +C -1 ; WX 247 ; N vavholam ; B 76 0 296 659 ; +C -1 ; WX 542 ; N betrafe ; B 24 0 537 662 ; +C -1 ; WX 461 ; N kafrafe ; B 41 -8 479 662 ; +C -1 ; WX 546 ; N perafe ; B 62 -8 567 662 ; +C -1 ; WX 576 ; N aleflamed ; B 64 0 627 716 ; +C -1 ; WX 0 ; N zerowidthnonjoiner ; B -18 -134 18 629 ; +C -1 ; WX 0 ; N zerowidthjoiner ; B -107 -134 107 690 ; +C -1 ; WX 0 ; N lefttorightmark ; B -18 -134 210 690 ; +C -1 ; WX 0 ; N righttoleftmark ; B -210 -134 17 690 ; +C -1 ; WX 0 ; N uni202A ; B -18 -134 210 603 ; +C -1 ; WX 0 ; N uni202B ; B -210 -134 18 603 ; +C -1 ; WX 0 ; N uni202D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni202C ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206E ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206F ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206A ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206B ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206C ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uni206D ; B -114 -134 114 690 ; +C -1 ; WX 0 ; N uniF00A ; B -18 -208 18 894 ; +C -1 ; WX 0 ; N uniF00B ; B -114 -208 114 894 ; +C -1 ; WX 0 ; N uniF00C ; B -18 -208 109 894 ; +C -1 ; WX 0 ; N uniF00D ; B -109 -208 18 894 ; +C -1 ; WX 0 ; N uniF00E ; B -18 -208 114 894 ; +C -1 ; WX 1000 ; N uniFFFC ; B 0 0 1000 719 ; +C -1 ; WX 812 ; N Ohorn ; B 91 -12 898 728 ; +C -1 ; WX 604 ; N ohorn ; B 49 -12 678 530 ; +C -1 ; WX 793 ; N Uhorn ; B 97 -13 921 716 ; +C -1 ; WX 634 ; N uhorn ; B 63 -12 721 519 ; +C -1 ; WX 0 ; N f00b ; B -131 822 45 894 ; +C -1 ; WX 0 ; N f00c ; B -343 822 -167 894 ; +C -1 ; WX 0 ; N f00e ; B -286 755 -122 890 ; +C -1 ; WX 0 ; N f006 ; B -82 822 94 894 ; +C -1 ; WX 0 ; N f007 ; B -260 822 -83 894 ; +C -1 ; WX 0 ; N f009 ; B -221 755 -18 890 ; +C -1 ; WX 0 ; N combininghookabove ; B -103 754 100 895 ; +C -1 ; WX 0 ; N f010 ; B -98 812 97 894 ; +C -1 ; WX 0 ; N f013 ; B -246 754 -43 895 ; +C -1 ; WX 0 ; N f011 ; B -317 812 -123 894 ; +C -1 ; WX 0 ; N f01c ; B -163 785 167 895 ; +C -1 ; WX 0 ; N f015 ; B -368 818 -55 895 ; +C -1 ; WX 0 ; N combiningtildeaccent ; B -325 756 5 866 ; +C -1 ; WX 0 ; N _783 ; B -10 721 275 787 ; +C -1 ; WX 0 ; N _784 ; B -29 743 270 803 ; +C -1 ; WX 0 ; N f02c ; B -217 -159 -96 -59 ; +C -1 ; WX 513 ; N dongsign ; B 42 108 538 716 ; +C -1 ; WX 834 ; N onethird ; B 60 -30 827 728 ; +C -1 ; WX 834 ; N twothirds ; B 60 -30 827 728 ; +C -1 ; WX 0 ; N f008 ; B -73 582 130 716 ; +C -1 ; WX 0 ; N f00a ; B -285 582 -82 716 ; +C -1 ; WX 0 ; N f00d ; B -151 582 13 716 ; +C -1 ; WX 0 ; N f00f ; B -277 582 -113 716 ; +C -1 ; WX 0 ; N f012 ; B -103 582 99 755 ; +C -1 ; WX 0 ; N f014 ; B -278 582 -76 755 ; +C -1 ; WX 0 ; N f016 ; B -384 785 -54 895 ; +C -1 ; WX 0 ; N f017 ; B -493 785 -163 895 ; +C -1 ; WX 0 ; N f018 ; B -493 785 -163 895 ; +C -1 ; WX 0 ; N f019 ; B -365 596 -35 706 ; +C -1 ; WX 0 ; N f01a ; B -429 596 -99 706 ; +C -1 ; WX 0 ; N f01b ; B -439 596 -109 706 ; +C -1 ; WX 0 ; N f01e ; B -429 -159 -308 -59 ; +C -1 ; WX 0 ; N f01f ; B -466 -159 -345 -59 ; +C -1 ; WX 0 ; N f020 ; B -500 -159 -379 -59 ; +C -1 ; WX 0 ; N f021 ; B -466 -159 -345 -59 ; +C -1 ; WX 0 ; N f022 ; B -517 -159 -396 -59 ; +C -1 ; WX 0 ; N combininggraveaccent ; B -131 755 33 890 ; +C -1 ; WX 0 ; N combiningacuteaccent ; B -86 755 117 890 ; +C -1 ; WX 0 ; N f01d ; B -188 596 142 706 ; +C -1 ; WX 0 ; N combiningdotbelow ; B -448 -159 -327 -59 ; +C -1 ; WX 0 ; N f023 ; B -427 -159 -306 -59 ; +C -1 ; WX 0 ; N f029 ; B -254 -159 -133 -59 ; +C -1 ; WX 0 ; N f02a ; B -225 -159 -104 -59 ; +C -1 ; WX 0 ; N f02b ; B -425 -159 -304 -59 ; +C -1 ; WX 0 ; N f024 ; B -378 -159 -257 -59 ; +C -1 ; WX 0 ; N f025 ; B -383 -159 -262 -59 ; +C -1 ; WX 0 ; N f026 ; B -422 -159 -301 -59 ; +C -1 ; WX 0 ; N f027 ; B -432 -159 -311 -59 ; +C -1 ; WX 0 ; N f028 ; B -517 -159 -396 -59 ; +C -1 ; WX 0 ; N f02d ; B -354 818 -40 895 ; +C -1 ; WX 0 ; N f02e ; B -338 785 -8 895 ; +C -1 ; WX 0 ; N f02f ; B -441 818 -128 895 ; +C -1 ; WX 0 ; N f030 ; B -449 785 -119 895 ; +C -1 ; WX 222 ; N f031 ; B 30 0 227 519 ; +C -1 ; WX 667 ; N Adotbelow ; B -20 -159 617 716 ; +C -1 ; WX 556 ; N adotbelow ; B 44 -159 526 530 ; +C -1 ; WX 667 ; N Ahookabove ; B -20 0 617 895 ; +C -1 ; WX 556 ; N ahookabove ; B 44 -12 526 755 ; +C -1 ; WX 667 ; N Acircumflexacute ; B -20 0 617 894 ; +C -1 ; WX 556 ; N acircumflexacute ; B 44 -12 532 890 ; +C -1 ; WX 667 ; N Acircumflexgrave ; B -20 0 617 894 ; +C -1 ; WX 556 ; N acircumflexgrave ; B 44 -12 526 890 ; +C -1 ; WX 667 ; N Acircumflexhookabove ; B -20 0 617 894 ; +C -1 ; WX 556 ; N acircumflexhookabove ; B 44 -12 529 895 ; +C -1 ; WX 667 ; N Acircumflextilde ; B -20 0 617 895 ; +C -1 ; WX 556 ; N acircumflextilde ; B 44 -12 557 866 ; +C -1 ; WX 667 ; N Acircumflexdotbelow ; B -20 -159 617 803 ; +C -1 ; WX 556 ; N acircumflexdotbelow ; B 44 -159 526 716 ; +C -1 ; WX 667 ; N Abreveacute ; B -20 0 617 894 ; +C -1 ; WX 556 ; N abreveacute ; B 44 -12 532 890 ; +C -1 ; WX 667 ; N Abrevegrave ; B -20 0 617 894 ; +C -1 ; WX 556 ; N abrevegrave ; B 44 -12 526 890 ; +C -1 ; WX 667 ; N Abrevehookabove ; B -20 0 617 894 ; +C -1 ; WX 556 ; N abrevehookabove ; B 44 -12 526 895 ; +C -1 ; WX 667 ; N Abrevetilde ; B -20 0 639 895 ; +C -1 ; WX 556 ; N abrevetilde ; B 44 -12 557 866 ; +C -1 ; WX 667 ; N Abrevedotbelow ; B -20 -159 617 787 ; +C -1 ; WX 556 ; N abrevedotbelow ; B 44 -159 526 694 ; +C -1 ; WX 667 ; N Edotbelow ; B 45 -159 711 716 ; +C -1 ; WX 556 ; N edotbelow ; B 52 -159 532 530 ; +C -1 ; WX 667 ; N Ehookabove ; B 45 0 711 895 ; +C -1 ; WX 556 ; N ehookabove ; B 52 -12 532 755 ; +C -1 ; WX 667 ; N Etilde ; B 45 0 711 868 ; +C -1 ; WX 556 ; N etilde ; B 52 -12 532 707 ; +C -1 ; WX 667 ; N Ecircumflexacute ; B 45 0 711 894 ; +C -1 ; WX 556 ; N ecircumflexacute ; B 52 -12 539 890 ; +C -1 ; WX 667 ; N Ecircumflexgrave ; B 45 0 711 894 ; +C -1 ; WX 556 ; N ecircumflexgrave ; B 52 -12 532 890 ; +C -1 ; WX 667 ; N Ecircumflexhookabove ; B 45 0 711 894 ; +C -1 ; WX 556 ; N ecircumflexhookabove ; B 52 -12 539 895 ; +C -1 ; WX 667 ; N Ecircumflextilde ; B 45 0 711 895 ; +C -1 ; WX 556 ; N ecircumflextilde ; B 52 -12 557 866 ; +C -1 ; WX 667 ; N Ecircumflexdotbelow ; B 45 -159 711 803 ; +C -1 ; WX 556 ; N ecircumflexdotbelow ; B 52 -159 532 716 ; +C -1 ; WX 278 ; N Ihookabove ; B 57 0 395 895 ; +C -1 ; WX 222 ; N ihookabove ; B 30 0 325 755 ; +C -1 ; WX 278 ; N Idotbelow ; B 27 -159 302 716 ; +C -1 ; WX 222 ; N idotbelow ; B -12 -159 268 716 ; +C -1 ; WX 778 ; N Odotbelow ; B 91 -159 772 728 ; +C -1 ; WX 556 ; N odotbelow ; B 49 -159 540 530 ; +C -1 ; WX 778 ; N Ohookabove ; B 91 -12 772 895 ; +C -1 ; WX 556 ; N ohookabove ; B 49 -12 540 755 ; +C -1 ; WX 778 ; N Ocircumflexacute ; B 91 -12 772 894 ; +C -1 ; WX 556 ; N ocircumflexacute ; B 49 -12 540 890 ; +C -1 ; WX 778 ; N Ocircumflexgrave ; B 91 -12 772 894 ; +C -1 ; WX 556 ; N ocircumflexgrave ; B 49 -12 540 890 ; +C -1 ; WX 778 ; N Ocircumflexhookabove ; B 91 -12 772 894 ; +C -1 ; WX 556 ; N ocircumflexhookabove ; B 49 -12 540 895 ; +C -1 ; WX 778 ; N Ocircumflextilde ; B 91 -12 772 895 ; +C -1 ; WX 556 ; N ocircumflextilde ; B 49 -12 557 866 ; +C -1 ; WX 778 ; N Ocircumflexdotbelow ; B 91 -159 772 825 ; +C -1 ; WX 556 ; N ocircumflexdotbelow ; B 49 -159 540 716 ; +C -1 ; WX 812 ; N Ohornacute ; B 91 -12 898 894 ; +C -1 ; WX 604 ; N ohornacute ; B 49 -12 678 716 ; +C -1 ; WX 812 ; N Ohorngrave ; B 91 -12 898 895 ; +C -1 ; WX 604 ; N ohorngrave ; B 49 -12 678 716 ; +C -1 ; WX 812 ; N Ohornhookabove ; B 91 -12 898 912 ; +C -1 ; WX 604 ; N ohornhookabove ; B 49 -12 678 755 ; +C -1 ; WX 812 ; N Ohorntilde ; B 91 -12 898 868 ; +C -1 ; WX 604 ; N ohorntilde ; B 49 -12 678 707 ; +C -1 ; WX 812 ; N Ohorndotbelow ; B 91 -159 898 728 ; +C -1 ; WX 604 ; N ohorndotbelow ; B 49 -159 678 530 ; +C -1 ; WX 722 ; N Udotbelow ; B 97 -159 754 716 ; +C -1 ; WX 556 ; N udotbelow ; B 63 -159 558 519 ; +C -1 ; WX 722 ; N Uhookabove ; B 97 -13 754 895 ; +C -1 ; WX 556 ; N uhookabove ; B 63 -12 558 755 ; +C -1 ; WX 793 ; N Uhornacute ; B 97 -13 921 894 ; +C -1 ; WX 634 ; N uhornacute ; B 63 -12 721 716 ; +C -1 ; WX 793 ; N Uhorngrave ; B 97 -13 921 895 ; +C -1 ; WX 634 ; N uhorngrave ; B 63 -12 721 716 ; +C -1 ; WX 793 ; N Uhornhookabove ; B 97 -13 921 895 ; +C -1 ; WX 634 ; N uhornhookabove ; B 63 -12 721 755 ; +C -1 ; WX 793 ; N Uhorntilde ; B 97 -13 921 868 ; +C -1 ; WX 634 ; N uhorntilde ; B 63 -12 721 707 ; +C -1 ; WX 793 ; N Uhorndotbelow ; B 97 -159 921 716 ; +C -1 ; WX 634 ; N uhorndotbelow ; B 63 -159 721 519 ; +C -1 ; WX 667 ; N Ydotbelow ; B 117 -159 773 716 ; +C -1 ; WX 500 ; N ydotbelow ; B 0 -210 561 519 ; +C -1 ; WX 667 ; N Yhookabove ; B 117 0 773 895 ; +C -1 ; WX 500 ; N yhookabove ; B 0 -210 561 755 ; +C -1 ; WX 667 ; N Ytilde ; B 117 0 773 868 ; +C -1 ; WX 500 ; N ytilde ; B 0 -210 561 707 ; +C -1 ; WX 667 ; N uni01CD ; B -20 0 628 893 ; +C -1 ; WX 556 ; N uni01CE ; B 44 -12 528 716 ; +C -1 ; WX 278 ; N uni01CF ; B 57 0 443 893 ; +C -1 ; WX 222 ; N uni01D0 ; B 30 0 375 716 ; +C -1 ; WX 778 ; N uni01D1 ; B 91 -12 772 893 ; +C -1 ; WX 556 ; N uni01D2 ; B 49 -12 540 716 ; +C -1 ; WX 722 ; N uni01D3 ; B 97 -13 754 893 ; +C -1 ; WX 556 ; N uni01D4 ; B 63 -12 558 716 ; +C -1 ; WX 722 ; N uni01D5 ; B 97 -13 754 900 ; +C -1 ; WX 556 ; N uni01D6 ; B 63 -12 558 849 ; +C -1 ; WX 722 ; N uni01D7 ; B 97 -13 754 900 ; +C -1 ; WX 556 ; N uni01D8 ; B 63 -12 558 896 ; +C -1 ; WX 722 ; N uni01D9 ; B 97 -13 754 900 ; +C -1 ; WX 556 ; N uni01DA ; B 63 -12 572 896 ; +C -1 ; WX 722 ; N uni01DB ; B 97 -13 754 900 ; +C -1 ; WX 556 ; N uni01DC ; B 63 -12 558 896 ; +C -1 ; WX 0 ; N _928 ; B 23 730 309 900 ; +C -1 ; WX 0 ; N _929 ; B 23 730 306 900 ; +C -1 ; WX 0 ; N _930 ; B 23 730 294 900 ; +C -1 ; WX 0 ; N _931 ; B 23 730 290 900 ; +EndCharMetrics +StartKernData +StartKernPairs 857 +KPX space A -37 +KPX space Y -18 +KPX space Alphatonos -37 +KPX space Upsilontonos -18 +KPX space Alpha -37 +KPX space Delta -37 +KPX space Lambda -18 +KPX space Upsilon -18 +KPX space Upsilondieresis -18 +KPX one one -74 +KPX A space -37 +KPX A T -74 +KPX A V -55 +KPX A W -18 +KPX A Y -74 +KPX A v -18 +KPX A w -18 +KPX A y -9 +KPX A quoteright -37 +KPX F space -18 +KPX F comma -129 +KPX F period -129 +KPX F A -74 +KPX L space -18 +KPX L T -74 +KPX L V -55 +KPX L W -37 +KPX L Y -92 +KPX L y -18 +KPX L quoteright -55 +KPX P space -37 +KPX P comma -129 +KPX P period -129 +KPX P A -74 +KPX R T -18 +KPX R V -18 +KPX R W -18 +KPX R Y -37 +KPX T comma -92 +KPX T hyphen -92 +KPX T period -92 +KPX T colon -74 +KPX T semicolon -74 +KPX T A -74 +KPX T O -18 +KPX T a -92 +KPX T c -92 +KPX T e -92 +KPX T i -9 +KPX T o -92 +KPX T r -74 +KPX T s -92 +KPX T u -74 +KPX T w -74 +KPX T y -74 +KPX V comma -74 +KPX V hyphen -37 +KPX V period -74 +KPX V colon -18 +KPX V semicolon -18 +KPX V A -55 +KPX V a -37 +KPX V e -37 +KPX V i -18 +KPX V o -37 +KPX V r -18 +KPX V u -18 +KPX V y -18 +KPX W comma -37 +KPX W hyphen -18 +KPX W period -37 +KPX W A -18 +KPX W a -18 +KPX W e -18 +KPX W i -9 +KPX Y space -18 +KPX Y comma -92 +KPX Y hyphen -74 +KPX Y period -92 +KPX Y colon -37 +KPX Y semicolon -37 +KPX Y A -55 +KPX Y a -74 +KPX Y e -55 +KPX Y i -18 +KPX Y o -55 +KPX Y p -55 +KPX Y q -55 +KPX Y u -37 +KPX Y v -37 +KPX f quoteright 37 +KPX r comma -55 +KPX r hyphen -18 +KPX r period -37 +KPX r quoteright 37 +KPX v comma -74 +KPX v period -74 +KPX w comma -55 +KPX w period -55 +KPX y comma -74 +KPX y period -74 +KPX quoteleft quoteleft -37 +KPX quoteright space -55 +KPX quoteright s -18 +KPX quoteright quoteright -37 +KPX quotedblbase afii10051 -122 +KPX quotedblbase afii10060 -111 +KPX quotedblbase afii10036 -134 +KPX quotedblbase afii10041 -145 +KPX quotedblbase afii10044 -111 +KPX Gamma comma -128 +KPX Gamma period -128 +KPX Gamma iotadieresistonos 102 +KPX Gamma Alpha -95 +KPX Gamma Delta -95 +KPX Gamma Lambda -95 +KPX Gamma iota -47 +KPX Gamma iotadieresis 46 +KPX Theta Alpha -11 +KPX Theta Delta -11 +KPX Theta Lambda -11 +KPX Theta Upsilon -54 +KPX Theta Upsilondieresis -54 +KPX Phi Alpha -39 +KPX Phi Upsilon -54 +KPX Phi Upsilondieresis -54 +KPX delta tau -22 +KPX delta gamma -18 +KPX delta chi -29 +KPX delta pi -22 +KPX epsilon sigma1 -27 +KPX tau alpha -14 +KPX tau delta -14 +KPX tau sigma -14 +KPX tau phi -14 +KPX tau alphatonos -14 +KPX tau zeta -14 +KPX tau omicron -14 +KPX tau sigma1 -14 +KPX tau omega -14 +KPX tau omegatonos -14 +KPX phi tau -22 +KPX phi gamma -18 +KPX phi chi -29 +KPX phi pi -22 +KPX Alphatonos space -37 +KPX Alphatonos Theta -52 +KPX Alphatonos Phi -58 +KPX Alphatonos Omicron -52 +KPX Alphatonos Tau -97 +KPX Alphatonos Upsilon -129 +KPX Alphatonos Upsilondieresis -129 +KPX Alphatonos gamma -18 +KPX Alphatonos nu -18 +KPX Alphatonos chi -18 +KPX Omicrontonos Upsilon -54 +KPX Omicrontonos Upsilondieresis -54 +KPX Upsilontonos alpha -55 +KPX Upsilontonos delta -55 +KPX Upsilontonos sigma -55 +KPX Upsilontonos phi -55 +KPX Upsilontonos iotadieresistonos 104 +KPX Upsilontonos Alpha -74 +KPX Upsilontonos Delta -74 +KPX Upsilontonos Lambda -74 +KPX Upsilontonos alphatonos -55 +KPX Upsilontonos etatonos -18 +KPX Upsilontonos iotatonos -18 +KPX Upsilontonos eta -18 +KPX Upsilontonos iota -18 +KPX Upsilontonos kappa -18 +KPX Upsilontonos mu -18 +KPX Upsilontonos omicron -55 +KPX Upsilontonos iotadieresis 52 +KPX Upsilontonos omicrontonos -55 +KPX Omegatonos Upsilon -54 +KPX Omegatonos Upsilondieresis -54 +KPX Alpha space -37 +KPX Alpha quoteright -37 +KPX Alpha Theta -52 +KPX Alpha Phi -58 +KPX Alpha Omicron -52 +KPX Alpha Tau -97 +KPX Alpha Upsilon -129 +KPX Alpha Upsilondieresis -129 +KPX Alpha gamma -18 +KPX Alpha nu -18 +KPX Alpha chi -18 +KPX Delta space -37 +KPX Delta Theta -52 +KPX Delta Omicron -52 +KPX Delta Tau -97 +KPX Delta Upsilon -129 +KPX Delta Upsilondieresis -129 +KPX Kappa Theta -48 +KPX Kappa Phi -61 +KPX Kappa alpha -12 +KPX Kappa delta -12 +KPX Kappa sigma -12 +KPX Kappa phi -12 +KPX Kappa Omicron -48 +KPX Kappa alphatonos -12 +KPX Kappa zeta -12 +KPX Kappa theta -12 +KPX Kappa xi -12 +KPX Kappa omicron -12 +KPX Kappa omega -12 +KPX Kappa omicrontonos -12 +KPX Kappa omegatonos -12 +KPX Lambda space -18 +KPX Lambda Theta -52 +KPX Lambda Omicron -52 +KPX Lambda Tau -97 +KPX Lambda Upsilon -129 +KPX Lambda Upsilondieresis -129 +KPX Omicron Alphatonos -11 +KPX Omicron Alpha -11 +KPX Omicron Delta -11 +KPX Omicron Lambda -11 +KPX Omicron Upsilon -54 +KPX Omicron Upsilondieresis -54 +KPX Rho comma -128 +KPX Rho period -128 +KPX Rho Alpha -74 +KPX Rho Delta -74 +KPX Rho Lambda -74 +KPX Sigma tau -32 +KPX Tau comma -91 +KPX Tau hyphen -91 +KPX Tau period -91 +KPX Tau colon -74 +KPX Tau semicolon -74 +KPX Tau Theta -18 +KPX Tau Phi -18 +KPX Tau alpha -91 +KPX Tau delta -33 +KPX Tau epsilon -91 +KPX Tau sigma -91 +KPX Tau phi -91 +KPX Tau iotadieresistonos 104 +KPX Tau Alpha -74 +KPX Tau Delta -74 +KPX Tau Lambda -74 +KPX Tau Omicron -18 +KPX Tau Omega -18 +KPX Tau alphatonos -91 +KPX Tau epsilontonos -91 +KPX Tau upsilondieresistonos -74 +KPX Tau gamma -43 +KPX Tau eta -74 +KPX Tau iota -8 +KPX Tau mu -74 +KPX Tau nu -43 +KPX Tau omicron -91 +KPX Tau upsilon -74 +KPX Tau chi -43 +KPX Tau psi -83 +KPX Tau iotadieresis 46 +KPX Tau upsilondieresis -74 +KPX Tau omicrontonos -91 +KPX Tau upsilontonos -74 +KPX Upsilon comma -91 +KPX Upsilon hyphen -74 +KPX Upsilon period -91 +KPX Upsilon colon -37 +KPX Upsilon semicolon -37 +KPX Upsilon alpha -55 +KPX Upsilon delta -55 +KPX Upsilon sigma -55 +KPX Upsilon phi -55 +KPX Upsilon iotadieresistonos 104 +KPX Upsilon Alpha -74 +KPX Upsilon Delta -74 +KPX Upsilon Lambda -74 +KPX Upsilon alphatonos -55 +KPX Upsilon etatonos -18 +KPX Upsilon iotatonos -18 +KPX Upsilon gamma -18 +KPX Upsilon eta -18 +KPX Upsilon iota -18 +KPX Upsilon kappa -18 +KPX Upsilon mu -18 +KPX Upsilon omicron -55 +KPX Upsilon iotadieresis 52 +KPX Upsilon omicrontonos -55 +KPX Chi omega -18 +KPX Chi omegatonos -18 +KPX Psi alpha -21 +KPX Psi delta -21 +KPX Psi sigma -21 +KPX Psi phi -21 +KPX Psi alphatonos -21 +KPX Psi omicron -21 +KPX Psi omega -21 +KPX Psi omicrontonos -21 +KPX Psi omegatonos -21 +KPX Omega Upsilon -54 +KPX Omega Upsilondieresis -54 +KPX Upsilondieresis alpha -55 +KPX Upsilondieresis delta -55 +KPX Upsilondieresis sigma -55 +KPX Upsilondieresis phi -55 +KPX Upsilondieresis iotadieresistonos 104 +KPX Upsilondieresis Alpha -74 +KPX Upsilondieresis Delta -74 +KPX Upsilondieresis Lambda -74 +KPX Upsilondieresis alphatonos -55 +KPX Upsilondieresis etatonos -18 +KPX Upsilondieresis eta -18 +KPX Upsilondieresis iota -18 +KPX Upsilondieresis kappa -18 +KPX Upsilondieresis mu -18 +KPX Upsilondieresis omicron -55 +KPX Upsilondieresis iotadieresis 52 +KPX Upsilondieresis omicrontonos -55 +KPX epsilontonos sigma1 -27 +KPX zeta alpha -50 +KPX zeta delta -29 +KPX zeta epsilon -61 +KPX zeta sigma -50 +KPX zeta tau -57 +KPX zeta phi -50 +KPX zeta alphatonos -50 +KPX zeta epsilontonos -61 +KPX zeta etatonos -56 +KPX zeta gamma -29 +KPX zeta eta -56 +KPX zeta theta -29 +KPX zeta iota -56 +KPX zeta nu -29 +KPX zeta omicron -94 +KPX zeta upsilon -61 +KPX zeta omega -50 +KPX zeta iotadieresis 55 +KPX zeta omicrontonos -50 +KPX zeta upsilontonos -61 +KPX zeta omegatonos -50 +KPX zeta pi -57 +KPX kappa alpha -12 +KPX kappa delta -12 +KPX kappa sigma -12 +KPX kappa phi -12 +KPX kappa alphatonos -12 +KPX kappa zeta -29 +KPX kappa xi -29 +KPX kappa omicron -12 +KPX kappa sigma1 -29 +KPX kappa omega -12 +KPX kappa omicrontonos -12 +KPX kappa omegatonos -12 +KPX lambda alpha -14 +KPX lambda delta -14 +KPX lambda sigma -14 +KPX lambda phi -19 +KPX lambda alphatonos -14 +KPX lambda upsilondieresistonos -32 +KPX lambda zeta -14 +KPX lambda xi -14 +KPX lambda omicron -14 +KPX lambda sigma1 -14 +KPX lambda upsilon -32 +KPX lambda omega -14 +KPX lambda upsilondieresis -32 +KPX lambda omicrontonos -14 +KPX lambda upsilontonos -32 +KPX lambda omegatonos -14 +KPX xi alpha -14 +KPX xi delta -14 +KPX xi sigma -14 +KPX xi phi -14 +KPX xi alphatonos -14 +KPX xi zeta -14 +KPX xi xi -14 +KPX xi omicron -14 +KPX xi sigma1 -14 +KPX xi omicrontonos -14 +KPX omicron tau -14 +KPX omicron gamma -18 +KPX omicron chi -29 +KPX omicron pi -14 +KPX rho tau -22 +KPX rho pi -22 +KPX chi alpha -17 +KPX chi delta -17 +KPX chi sigma -17 +KPX chi phi -17 +KPX chi alphatonos -17 +KPX chi zeta -17 +KPX chi omicron -17 +KPX chi sigma1 -17 +KPX chi omega -17 +KPX chi omicrontonos -17 +KPX chi omegatonos -17 +KPX omega tau -22 +KPX omega gamma -18 +KPX omega chi -29 +KPX omega pi -22 +KPX omicrontonos tau -22 +KPX omicrontonos gamma -18 +KPX omicrontonos chi -29 +KPX omicrontonos pi -22 +KPX omegatonos tau -22 +KPX omegatonos gamma -18 +KPX omegatonos chi -29 +KPX omegatonos pi -22 +KPX afii10052 comma -100 +KPX afii10052 period -100 +KPX afii10052 guillemotleft -56 +KPX afii10052 guillemotright -56 +KPX afii10058 quoteright -111 +KPX afii10059 quoteright -89 +KPX afii10017 quoteright -78 +KPX afii10017 afii10021 11 +KPX afii10017 afii10025 -44 +KPX afii10017 afii10032 -56 +KPX afii10017 afii10033 -23 +KPX afii10017 afii10035 -56 +KPX afii10017 afii10036 -100 +KPX afii10017 afii10037 -89 +KPX afii10017 afii10038 -45 +KPX afii10017 afii10041 -89 +KPX afii10017 afii10047 -45 +KPX afii10017 afii10066 -11 +KPX afii10017 afii10070 -11 +KPX afii10017 afii10080 -11 +KPX afii10017 afii10083 -11 +KPX afii10017 afii10085 -11 +KPX afii10017 afii10086 -11 +KPX afii10018 afii10017 -33 +KPX afii10018 afii10021 -22 +KPX afii10018 afii10024 -22 +KPX afii10018 afii10025 -22 +KPX afii10018 afii10029 -33 +KPX afii10018 afii10032 -22 +KPX afii10018 afii10035 -22 +KPX afii10018 afii10036 -67 +KPX afii10018 afii10037 -56 +KPX afii10018 afii10038 -23 +KPX afii10018 afii10039 -33 +KPX afii10018 afii10041 -56 +KPX afii10018 afii10044 -67 +KPX afii10018 afii10047 -11 +KPX afii10018 afii10049 -33 +KPX afii10018 afii10069 11 +KPX afii10018 afii10085 -22 +KPX afii10018 afii10097 11 +KPX afii10019 afii10017 -33 +KPX afii10019 afii10021 -22 +KPX afii10019 afii10024 -33 +KPX afii10019 afii10025 -22 +KPX afii10019 afii10029 -22 +KPX afii10019 afii10032 -22 +KPX afii10019 afii10035 -22 +KPX afii10019 afii10036 -67 +KPX afii10019 afii10037 -56 +KPX afii10019 afii10038 -22 +KPX afii10019 afii10039 -33 +KPX afii10019 afii10041 -34 +KPX afii10019 afii10044 -100 +KPX afii10019 afii10049 -22 +KPX afii10019 afii10085 -11 +KPX afii10019 afii10087 -33 +KPX afii10019 afii10089 -33 +KPX afii10020 comma -100 +KPX afii10020 period -100 +KPX afii10020 colon -22 +KPX afii10020 semicolon -11 +KPX afii10020 guillemotleft -56 +KPX afii10020 guillemotright -56 +KPX afii10020 afii10017 -78 +KPX afii10020 afii10021 -44 +KPX afii10020 afii10025 -11 +KPX afii10020 afii10029 -33 +KPX afii10020 afii10032 -33 +KPX afii10020 afii10035 -33 +KPX afii10020 afii10049 -22 +KPX afii10020 afii10065 -33 +KPX afii10020 afii10067 -45 +KPX afii10020 afii10069 -45 +KPX afii10020 afii10070 -44 +KPX afii10020 afii10074 -44 +KPX afii10020 afii10077 -44 +KPX afii10020 afii10078 -44 +KPX afii10020 afii10079 -44 +KPX afii10020 afii10080 -56 +KPX afii10020 afii10082 -44 +KPX afii10020 afii10085 -44 +KPX afii10020 afii10093 -44 +KPX afii10020 afii10094 -45 +KPX afii10020 afii10096 -45 +KPX afii10020 afii10097 -45 +KPX afii10021 afii10041 -11 +KPX afii10021 afii10047 11 +KPX afii10021 afii10073 22 +KPX afii10021 afii10085 11 +KPX afii10022 afii10025 -11 +KPX afii10024 afii10025 -11 +KPX afii10024 afii10032 -22 +KPX afii10024 afii10035 -22 +KPX afii10024 afii10041 -22 +KPX afii10024 afii10044 11 +KPX afii10024 afii10085 -11 +KPX afii10025 afii10021 -33 +KPX afii10025 afii10024 -33 +KPX afii10025 afii10029 -33 +KPX afii10025 afii10032 -22 +KPX afii10025 afii10035 -22 +KPX afii10025 afii10036 -45 +KPX afii10025 afii10037 -45 +KPX afii10025 afii10038 -22 +KPX afii10025 afii10041 -34 +KPX afii10025 afii10049 -22 +KPX afii10025 afii10077 -11 +KPX afii10028 afii10032 -11 +KPX afii10028 afii10035 -11 +KPX afii10028 afii10038 -23 +KPX afii10028 afii10047 -11 +KPX afii10028 afii10085 -11 +KPX afii10028 afii10095 -11 +KPX afii10029 afii10038 11 +KPX afii10029 afii10066 11 +KPX afii10030 afii10041 -22 +KPX afii10030 afii10065 11 +KPX afii10030 afii10085 11 +KPX afii10030 afii10089 -22 +KPX afii10030 afii10095 11 +KPX afii10032 afii10017 -22 +KPX afii10032 afii10021 -34 +KPX afii10032 afii10024 -33 +KPX afii10032 afii10029 -33 +KPX afii10032 afii10037 -67 +KPX afii10032 afii10039 -33 +KPX afii10032 afii10041 -33 +KPX afii10032 afii10049 -22 +KPX afii10032 afii10077 -11 +KPX afii10032 afii10087 -22 +KPX afii10034 comma -156 +KPX afii10034 period -156 +KPX afii10034 colon -11 +KPX afii10034 semicolon -11 +KPX afii10034 guillemotright -33 +KPX afii10034 afii10017 -78 +KPX afii10034 afii10021 -78 +KPX afii10034 afii10024 -44 +KPX afii10034 afii10025 -22 +KPX afii10034 afii10029 -67 +KPX afii10034 afii10030 -11 +KPX afii10034 afii10036 -56 +KPX afii10034 afii10037 -45 +KPX afii10034 afii10038 -11 +KPX afii10034 afii10039 -45 +KPX afii10034 afii10049 -11 +KPX afii10034 afii10069 -11 +KPX afii10034 afii10070 -11 +KPX afii10034 afii10080 -11 +KPX afii10034 afii10097 -11 +KPX afii10035 afii10017 -33 +KPX afii10035 afii10021 -33 +KPX afii10035 afii10025 -11 +KPX afii10035 afii10029 -33 +KPX afii10035 afii10030 -11 +KPX afii10035 afii10032 -11 +KPX afii10035 afii10036 -33 +KPX afii10035 afii10037 -56 +KPX afii10035 afii10039 -22 +KPX afii10035 afii10041 -44 +KPX afii10035 afii10044 -67 +KPX afii10035 afii10065 11 +KPX afii10035 afii10085 -11 +KPX afii10035 afii10089 -22 +KPX afii10036 comma -89 +KPX afii10036 period -89 +KPX afii10036 colon -11 +KPX afii10036 semicolon -11 +KPX afii10036 afii10017 -33 +KPX afii10036 afii10021 -22 +KPX afii10036 afii10024 11 +KPX afii10036 afii10025 -11 +KPX afii10036 afii10029 -33 +KPX afii10036 afii10030 11 +KPX afii10036 afii10032 -22 +KPX afii10036 afii10038 -33 +KPX afii10036 afii10047 -11 +KPX afii10036 afii10049 11 +KPX afii10036 afii10065 -22 +KPX afii10036 afii10067 -33 +KPX afii10036 afii10070 -33 +KPX afii10036 afii10074 -33 +KPX afii10036 afii10076 -33 +KPX afii10036 afii10077 -33 +KPX afii10036 afii10078 -33 +KPX afii10036 afii10080 -33 +KPX afii10036 afii10081 -33 +KPX afii10036 afii10082 -33 +KPX afii10036 afii10083 -33 +KPX afii10036 afii10085 -33 +KPX afii10036 afii10087 -33 +KPX afii10036 afii10091 -33 +KPX afii10036 afii10093 -33 +KPX afii10036 afii10094 -33 +KPX afii10036 afii10096 -33 +KPX afii10036 afii10097 -33 +KPX afii10037 comma -78 +KPX afii10037 period -78 +KPX afii10037 colon -22 +KPX afii10037 semicolon -22 +KPX afii10037 afii10017 -33 +KPX afii10037 afii10021 -33 +KPX afii10037 afii10025 11 +KPX afii10037 afii10029 -22 +KPX afii10037 afii10038 -11 +KPX afii10037 afii10047 11 +KPX afii10037 afii10049 11 +KPX afii10037 afii10067 -22 +KPX afii10037 afii10068 -22 +KPX afii10037 afii10069 -11 +KPX afii10037 afii10070 -22 +KPX afii10037 afii10072 -11 +KPX afii10037 afii10073 -11 +KPX afii10037 afii10074 -11 +KPX afii10037 afii10076 -11 +KPX afii10037 afii10077 -34 +KPX afii10037 afii10078 -11 +KPX afii10037 afii10079 -11 +KPX afii10037 afii10080 -22 +KPX afii10037 afii10081 -11 +KPX afii10037 afii10082 -11 +KPX afii10037 afii10083 -22 +KPX afii10037 afii10087 -11 +KPX afii10037 afii10088 -11 +KPX afii10037 afii10090 -11 +KPX afii10037 afii10091 -11 +KPX afii10037 afii10096 -11 +KPX afii10037 afii10097 -11 +KPX afii10038 afii10017 -56 +KPX afii10038 afii10021 -67 +KPX afii10038 afii10029 -56 +KPX afii10038 afii10030 -11 +KPX afii10038 afii10036 -78 +KPX afii10038 afii10037 -89 +KPX afii10038 afii10038 11 +KPX afii10038 afii10041 -34 +KPX afii10038 afii10049 -22 +KPX afii10038 afii10077 -22 +KPX afii10039 afii10025 -11 +KPX afii10039 afii10032 -34 +KPX afii10039 afii10035 -34 +KPX afii10039 afii10038 -33 +KPX afii10039 afii10080 -22 +KPX afii10039 afii10085 -22 +KPX afii10040 afii10065 33 +KPX afii10040 afii10070 22 +KPX afii10040 afii10080 22 +KPX afii10043 afii10065 22 +KPX afii10043 afii10070 11 +KPX afii10043 afii10085 11 +KPX afii10044 quoteright -111 +KPX afii10044 afii10049 -33 +KPX afii10046 quoteright -122 +KPX afii10046 afii10017 -44 +KPX afii10046 afii10021 -22 +KPX afii10046 afii10024 -56 +KPX afii10046 afii10025 -33 +KPX afii10046 afii10029 -22 +KPX afii10046 afii10030 -22 +KPX afii10046 afii10032 -45 +KPX afii10046 afii10035 -45 +KPX afii10046 afii10036 -111 +KPX afii10046 afii10039 -56 +KPX afii10046 afii10041 -100 +KPX afii10046 afii10047 -33 +KPX afii10046 afii10049 -45 +KPX afii10047 afii10021 -34 +KPX afii10047 afii10024 -23 +KPX afii10047 afii10029 -45 +KPX afii10047 afii10032 11 +KPX afii10047 afii10038 22 +KPX afii10047 afii10039 -34 +KPX afii10047 afii10049 -22 +KPX afii10047 afii10069 22 +KPX afii10047 afii10072 11 +KPX afii10047 afii10078 11 +KPX afii10047 afii10097 11 +KPX afii10048 afii10017 -44 +KPX afii10048 afii10021 -56 +KPX afii10048 afii10024 -33 +KPX afii10048 afii10029 -56 +KPX afii10048 afii10032 -11 +KPX afii10048 afii10035 -11 +KPX afii10048 afii10036 -67 +KPX afii10048 afii10039 -33 +KPX afii10048 afii10041 -45 +KPX afii10065 afii10073 -22 +KPX afii10065 afii10077 -11 +KPX afii10065 afii10081 -11 +KPX afii10065 afii10085 -33 +KPX afii10065 afii10089 -67 +KPX afii10065 afii10095 -11 +KPX afii10066 afii10069 11 +KPX afii10066 afii10072 -11 +KPX afii10066 afii10077 -22 +KPX afii10066 afii10085 -22 +KPX afii10066 afii10087 -33 +KPX afii10066 afii10089 -33 +KPX afii10066 afii10092 -33 +KPX afii10066 afii10097 -11 +KPX afii10067 afii10065 -22 +KPX afii10067 afii10066 -11 +KPX afii10067 afii10069 -22 +KPX afii10067 afii10070 -22 +KPX afii10067 afii10072 -22 +KPX afii10067 afii10073 -22 +KPX afii10067 afii10077 -33 +KPX afii10067 afii10078 -22 +KPX afii10067 afii10080 -22 +KPX afii10067 afii10083 -22 +KPX afii10067 afii10084 -11 +KPX afii10067 afii10085 -33 +KPX afii10067 afii10086 -22 +KPX afii10067 afii10089 -56 +KPX afii10067 afii10092 -45 +KPX afii10067 afii10097 -22 +KPX afii10068 afii10065 -11 +KPX afii10068 afii10069 -11 +KPX afii10068 afii10070 -11 +KPX afii10068 afii10073 -11 +KPX afii10068 afii10077 -11 +KPX afii10068 afii10078 -11 +KPX afii10068 afii10080 -11 +KPX afii10068 afii10083 -11 +KPX afii10068 afii10097 -22 +KPX afii10069 afii10085 -11 +KPX afii10070 afii10065 -11 +KPX afii10070 afii10069 -11 +KPX afii10070 afii10072 -11 +KPX afii10070 afii10073 -11 +KPX afii10070 afii10077 -33 +KPX afii10070 afii10078 -11 +KPX afii10070 afii10083 -11 +KPX afii10070 afii10084 -11 +KPX afii10070 afii10085 -33 +KPX afii10070 afii10086 -11 +KPX afii10070 afii10087 -44 +KPX afii10070 afii10089 -56 +KPX afii10072 afii10084 11 +KPX afii10072 afii10085 11 +KPX afii10072 afii10089 -22 +KPX afii10072 afii10092 11 +KPX afii10073 afii10065 -11 +KPX afii10073 afii10066 -11 +KPX afii10073 afii10069 -11 +KPX afii10073 afii10070 -11 +KPX afii10073 afii10072 -11 +KPX afii10073 afii10077 -22 +KPX afii10073 afii10078 -11 +KPX afii10073 afii10080 -11 +KPX afii10073 afii10083 -22 +KPX afii10073 afii10085 -33 +KPX afii10073 afii10086 -11 +KPX afii10073 afii10089 -56 +KPX afii10073 afii10092 -33 +KPX afii10076 afii10066 11 +KPX afii10076 afii10083 -11 +KPX afii10076 afii10084 11 +KPX afii10076 afii10089 -22 +KPX afii10077 afii10085 -11 +KPX afii10077 afii10089 -33 +KPX afii10078 afii10073 -11 +KPX afii10078 afii10083 -11 +KPX afii10078 afii10085 -11 +KPX afii10078 afii10086 -11 +KPX afii10078 afii10095 -11 +KPX afii10080 afii10072 -22 +KPX afii10080 afii10073 -11 +KPX afii10080 afii10077 -22 +KPX afii10080 afii10085 -33 +KPX afii10080 afii10087 -22 +KPX afii10080 afii10089 -45 +KPX afii10080 afii10095 -11 +KPX afii10080 afii10097 -22 +KPX afii10082 afii10072 -11 +KPX afii10082 afii10073 -11 +KPX afii10082 afii10077 -22 +KPX afii10082 afii10078 -11 +KPX afii10082 afii10085 -33 +KPX afii10082 afii10087 -33 +KPX afii10082 afii10089 -45 +KPX afii10082 afii10095 -11 +KPX afii10082 afii10097 -11 +KPX afii10083 afii10072 -11 +KPX afii10083 afii10085 -11 +KPX afii10083 afii10087 -22 +KPX afii10083 afii10089 -33 +KPX afii10083 afii10092 -22 +KPX afii10084 comma -11 +KPX afii10084 period -11 +KPX afii10084 afii10065 -11 +KPX afii10084 afii10069 -11 +KPX afii10084 afii10072 -11 +KPX afii10084 afii10073 -11 +KPX afii10084 afii10077 -22 +KPX afii10084 afii10078 -11 +KPX afii10084 afii10080 -11 +KPX afii10084 afii10082 -11 +KPX afii10084 afii10083 -11 +KPX afii10084 afii10085 -22 +KPX afii10084 afii10095 -11 +KPX afii10084 afii10097 -11 +KPX afii10085 comma -67 +KPX afii10085 period -67 +KPX afii10085 afii10066 22 +KPX afii10085 afii10072 11 +KPX afii10085 afii10077 -11 +KPX afii10085 afii10095 11 +KPX afii10086 afii10066 11 +KPX afii10086 afii10070 11 +KPX afii10086 afii10077 -22 +KPX afii10086 afii10080 11 +KPX afii10086 afii10085 -22 +KPX afii10086 afii10089 -45 +KPX afii10087 afii10065 -11 +KPX afii10087 afii10070 -11 +KPX afii10087 afii10073 -11 +KPX afii10087 afii10080 -11 +KPX afii10087 afii10083 -11 +KPX afii10087 afii10086 -22 +KPX afii10087 afii10089 -45 +KPX afii10087 afii10095 -11 +KPX afii10088 afii10065 11 +KPX afii10088 afii10085 11 +KPX afii10091 afii10065 11 +KPX afii10091 afii10085 22 +KPX afii10094 afii10089 -89 +KPX afii10095 afii10072 -11 +KPX afii10095 afii10077 -22 +KPX afii10095 afii10087 -23 +KPX afii10095 afii10097 -11 +KPX afii10096 afii10072 -11 +KPX afii10096 afii10077 -22 +KPX afii10096 afii10087 -33 +KPX afii10096 afii10089 -45 +KPX afii10110 comma -56 +KPX afii10110 period -56 +KPX afii10050 comma -56 +KPX afii10050 period -56 +KPX afii10050 guillemotleft -22 +KPX afii10050 guillemotright -22 +KPX pi alpha -14 +KPX pi delta -14 +KPX pi sigma -14 +KPX pi phi -14 +KPX pi alphatonos -14 +KPX pi zeta -14 +KPX pi omicron -14 +KPX pi sigma1 -14 +KPX pi omega -14 +KPX pi omegatonos -14 +EndKernPairs +EndKernData +EndFontMetrics diff --git a/fonts/arial_ce_i.php b/fonts/arial_ce_i.php new file mode 100644 index 0000000..691736e --- /dev/null +++ b/fonts/arial_ce_i.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='Arial-ItalicMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>96,'FontBBox'=>'[-517 -325 1082 1025]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>750); +$up=-106; +$ut=73; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>222,chr(131)=>750, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>500,chr(157)=>354,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>556,chr(164)=>556,chr(165)=>667,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>222,chr(180)=>333,chr(181)=>548,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>500,chr(187)=>556,chr(188)=>556,chr(189)=>333,chr(190)=>281,chr(191)=>500,chr(192)=>722,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>556, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>333,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>222,chr(230)=>500,chr(231)=>500,chr(232)=>500,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>625,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>549,chr(248)=>333,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>278,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce_i.z'; +$originalsize=200684; +?> diff --git a/fonts/arial_ce_i.t1a b/fonts/arial_ce_i.t1a new file mode 100644 index 0000000..38a8625 --- /dev/null +++ b/fonts/arial_ce_i.t1a @@ -0,0 +1,26272 @@ +%!PS-AdobeFont-1.0: Arial-ItalicMT Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved +%%CreationDate: Sun May 25 23:11:00 2003 +% Converted from TrueType font 'arial_ce_i.ttf' by ttf2pt1 program +% +%%EndComments +12 dict begin +/FontInfo 9 dict dup begin +/version (Version 2.76) readonly def +/Notice (Typeface © The Monotype Corporation plc. Data © The Monotype Corporation plc/Type Solutions Inc. 1990-1992. All Rights Reserved) readonly def +/FullName (Arial Italic) readonly def +/FamilyName (Arial) readonly def +/Weight (Italic) readonly def +/ItalicAngle -12.000000 def +/isFixedPitch false def +/UnderlinePosition -106 def +/UnderlineThickness 73 def +end readonly def +/FontName /Arial-ItalicMT def +/PaintType 0 def +/StrokeWidth 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox {-517 -325 1082 1025} readonly def +/Encoding 256 array +dup 0 /.notdef put +dup 1 /.notdef put +dup 2 /.notdef put +dup 3 /.notdef put +dup 4 /.notdef put +dup 5 /.notdef put +dup 6 /.notdef put +dup 7 /.notdef put +dup 8 /.notdef put +dup 9 /.notdef put +dup 10 /.notdef put +dup 11 /.notdef put +dup 12 /.notdef put +dup 13 /.notdef put +dup 14 /.notdef put +dup 15 /.notdef put +dup 16 /.notdef put +dup 17 /.notdef put +dup 18 /.notdef put +dup 19 /.notdef put +dup 20 /.notdef put +dup 21 /.notdef put +dup 22 /.notdef put +dup 23 /.notdef put +dup 24 /.notdef put +dup 25 /.notdef put +dup 26 /.notdef put +dup 27 /.notdef put +dup 28 /.notdef put +dup 29 /.notdef put +dup 30 /.notdef put +dup 31 /.notdef put +dup 32 /space put +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quotesingle put +dup 40 /parenleft put +dup 41 /parenright put +dup 42 /asterisk put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 62 /greater put +dup 63 /question put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 94 /asciicircum put +dup 95 /underscore put +dup 96 /grave put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +dup 126 /asciitilde put +dup 127 /.notdef put +dup 128 /.notdef put +dup 129 /.notdef put +dup 130 /quotesinglbase put +dup 131 /florin put +dup 132 /quotedblbase put +dup 133 /ellipsis put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 136 /circumflex put +dup 137 /perthousand put +dup 138 /Scaron put +dup 139 /guilsinglleft put +dup 140 /OE put +dup 141 /.notdef put +dup 142 /.notdef put +dup 143 /.notdef put +dup 144 /.notdef put +dup 145 /quoteleft put +dup 146 /quoteright put +dup 147 /quotedblleft put +dup 148 /quotedblright put +dup 149 /bullet put +dup 150 /endash put +dup 151 /emdash put +dup 152 /tilde put +dup 153 /trademark put +dup 154 /scaron put +dup 155 /guilsinglright put +dup 156 /oe put +dup 157 /.notdef put +dup 158 /.notdef put +dup 159 /Ydieresis put +dup 160 /space put +dup 161 /exclamdown put +dup 162 /cent put +dup 163 /sterling put +dup 164 /currency put +dup 165 /yen put +dup 166 /brokenbar put +dup 167 /section put +dup 168 /dieresis put +dup 169 /copyright put +dup 170 /ordfeminine put +dup 171 /guillemotleft put +dup 172 /logicalnot put +dup 173 /hyphen put +dup 174 /registered put +dup 175 /overscore put +dup 176 /degree put +dup 177 /plusminus put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 180 /acute put +dup 181 /mu1 put +dup 182 /paragraph put +dup 183 /periodcentered put +dup 184 /cedilla put +dup 185 /onesuperior put +dup 186 /ordmasculine put +dup 187 /guillemotright put +dup 188 /onequarter put +dup 189 /onehalf put +dup 190 /threequarters put +dup 191 /questiondown put +dup 192 /Agrave put +dup 193 /Aacute put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 196 /Adieresis put +dup 197 /Aring put +dup 198 /AE put +dup 199 /Ccedilla put +dup 200 /Egrave put +dup 201 /Eacute put +dup 202 /Ecircumflex put +dup 203 /Edieresis put +dup 204 /Igrave put +dup 205 /Iacute put +dup 206 /Icircumflex put +dup 207 /Idieresis put +dup 208 /Eth put +dup 209 /Ntilde put +dup 210 /Ograve put +dup 211 /Oacute put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 214 /Odieresis put +dup 215 /multiply put +dup 216 /Oslash put +dup 217 /Ugrave put +dup 218 /Uacute put +dup 219 /Ucircumflex put +dup 220 /Udieresis put +dup 221 /Yacute put +dup 222 /Thorn put +dup 223 /germandbls put +dup 224 /agrave put +dup 225 /aacute put +dup 226 /acircumflex put +dup 227 /atilde put +dup 228 /adieresis put +dup 229 /aring put +dup 230 /ae put +dup 231 /ccedilla put +dup 232 /egrave put +dup 233 /eacute put +dup 234 /ecircumflex put +dup 235 /edieresis put +dup 236 /igrave put +dup 237 /iacute put +dup 238 /icircumflex put +dup 239 /idieresis put +dup 240 /eth put +dup 241 /ntilde put +dup 242 /ograve put +dup 243 /oacute put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 246 /odieresis put +dup 247 /divide put +dup 248 /oslash put +dup 249 /ugrave put +dup 250 /uacute put +dup 251 /ucircumflex put +dup 252 /udieresis put +dup 253 /yacute put +dup 254 /thorn put +dup 255 /ydieresis put +readonly def +currentdict end +currentfile eexec +dup /Private 16 dict dup begin +/RD{string currentfile exch readstring pop}executeonly def +/ND{noaccess def}executeonly def +/NP{noaccess put}executeonly def +/ForceBold false def +/BlueValues [ -15 0 713 728 890 910 518 532 690 707 ] def +/OtherBlues [ -210 -196 -159 -143 ] def +/StdHW [ 21 ] def +/StdVW [ 89 ] def +/StemSnapH [ 21 49 52 61 70 73 76 79 82 86 101 135 ] def +/StemSnapV [ 37 50 62 71 74 85 89 92 96 99 102 199 ] def +/MinFeature {16 16} def +/password 5839 def +/Subrs 5 array +dup 0 { + 3 0 callothersubr pop pop setcurrentpoint return + } NP +dup 1 { + 0 1 callothersubr return + } NP +dup 2 { + 0 2 callothersubr return + } NP +dup 3 { + return + } NP +dup 4 { + 1 3 callothersubr pop callsubr return + } NP +ND +2 index /CharStrings 932 dict dup begin +/.notdef { +0 750 hsbw +0 16 hstem +609 16 hstem +125 16 vstem +609 16 vstem +125 0 rmoveto +500 0 rlineto +0 625 rlineto +-500 0 rlineto +0 -625 rlineto +closepath +16 16 rmoveto +0 593 rlineto +468 0 rlineto +0 -593 rlineto +-468 0 rlineto +closepath +endchar } ND +/.null { +0 0 hsbw +endchar } ND +/nonmarkingreturn { +0 278 hsbw +endchar } ND +/space { +0 278 hsbw +endchar } ND +/exclam { +0 278 hsbw +0 100 hstem +696 20 hstem +112 55 vstem +197 107 vstem +112 181 rmoveto +55 0 rlineto +104 376 rlineto +33 159 rlineto +-107 0 rlineto +-31 -147 rlineto +-54 -388 rlineto +closepath +-56 -181 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/quotedbl { +0 355 hsbw +462 254 hstem +135 55 vstem +297 55 vstem +135 462 rmoveto +55 0 rlineto +51 134 rlineto +26 120 rlineto +-100 0 rlineto +-26 -120 rlineto +-6 -134 rlineto +closepath +162 0 rmoveto +55 0 rlineto +51 134 rlineto +26 120 rlineto +-101 0 rlineto +-25 -120 rlineto +-6 -134 rlineto +closepath +endchar } ND +/numbersign { +0 556 hsbw +-12 281 hstem +446 73 hstem +708 20 hstem +10 171 vstem +201 73 vstem +371 172 vstem +50 -12 rmoveto +74 0 rlineto +42 208 rlineto +153 0 rlineto +-42 -208 rlineto +74 0 rlineto +42 208 rlineto +150 0 rlineto +0 73 rlineto +-135 0 rlineto +36 177 rlineto +99 0 rlineto +0 73 rlineto +-84 0 rlineto +42 209 rlineto +-73 0 rlineto +-43 -209 rlineto +-154 0 rlineto +43 209 rlineto +-73 0 rlineto +-43 -209 rlineto +-148 0 rlineto +0 -73 rlineto +134 0 rlineto +-37 -177 rlineto +-97 0 rlineto +0 -73 rlineto +83 0 rlineto +-43 -208 rlineto +closepath +131 281 rmoveto +36 177 rlineto +154 0 rlineto +-37 -177 rlineto +-153 0 rlineto +closepath +endchar } ND +/dollar { +0 556 hsbw +-13 433 hstem +655 71 hstem +136 87 vstem +382 49 vstem +439 89 vstem +222 -6 rmoveto +-19 -90 rlineto +48 0 rlineto +18 83 rlineto +14 0 rlineto +133 0 112 102 0 117 rrcurveto +0 78 -41 62 -132 55 rrcurveto +52 245 rlineto +48 -16 23 -34 10 -57 rrcurveto +85 0 rlineto +-12 96 -51 62 -88 22 rrcurveto +9 45 rlineto +-49 0 rlineto +-7 -38 rlineto +-20 0 rlineto +-124 0 -95 -94 0 -102 rrcurveto +0 -86 52 -63 105 -45 rrcurveto +-56 -270 rlineto +-54 20 -37 48 -6 78 rrcurveto +-89 -5 rlineto +6 -111 69 -84 96 -18 rrcurveto +closepath +89 426 rmoveto +-70 33 -18 33 0 50 rrcurveto +0 68 64 51 73 0 rrcurveto +-49 -235 rlineto +closepath +27 -103 rmoveto +80 -35 21 -35 0 -50 rrcurveto +0 -78 -67 -64 -88 3 rrcurveto +54 259 rlineto +closepath +endchar } ND +/percent { +0 889 hsbw +-26 58 hstem +291 437 hstem +97 75 vstem +339 77 vstem +534 75 vstem +775 78 vstem +140 -26 rmoveto +82 0 rlineto +589 754 rlineto +-80 0 rlineto +-591 -754 rlineto +closepath +-43 522 rmoveto +0 -104 46 -47 86 0 rrcurveto +123 0 64 134 0 105 rrcurveto +0 90 -48 48 -92 0 rrcurveto +-119 0 -60 -159 0 -67 rrcurveto +closepath +75 -17 rmoveto +0 66 30 118 77 0 rrcurveto +36 0 24 -26 0 -42 rrcurveto +0 -68 -33 -123 -77 0 rrcurveto +-35 0 -22 20 0 55 rrcurveto +closepath +362 -355 rmoveto +0 -104 45 -46 86 0 rrcurveto +122 0 66 134 0 105 rrcurveto +0 89 -48 48 -92 0 rrcurveto +-120 0 -59 -158 0 -68 rrcurveto +closepath +75 -17 rmoveto +0 65 31 119 75 0 rrcurveto +36 0 24 -24 0 -44 rrcurveto +0 -68 -31 -123 -78 0 rrcurveto +-35 0 -22 21 0 54 rrcurveto +closepath +endchar } ND +/ampersand { +0 667 hsbw +-16 80 hstem +657 71 hstem +79 89 vstem +229 92 vstem +475 87 vstem +496 70 rmoveto +21 -30 27 -29 34 -28 rrcurveto +67 53 rlineto +-34 38 -28 32 -21 28 rrcurveto +38 43 29 44 22 46 rrcurveto +-77 39 rlineto +-22 -39 -22 -34 -24 -29 rrcurveto +-40 49 -41 63 -42 78 rrcurveto +141 70 38 61 0 66 rrcurveto +0 76 -62 61 -92 0 rrcurveto +-96 0 -83 -87 0 -86 rrcurveto +0 -52 8 -18 30 -64 rrcurveto +-123 -56 -65 -61 0 -118 rrcurveto +0 -116 86 -86 130 0 rrcurveto +70 0 49 19 82 67 rrcurveto +closepath +-145 390 rmoveto +-20 38 -10 35 0 31 rrcurveto +0 50 40 43 46 0 rrcurveto +38 0 30 -30 0 -38 rrcurveto +0 -57 -54 -37 -70 -35 rrcurveto +closepath +94 -322 rmoveto +-48 -50 -49 -24 -49 0 rrcurveto +-74 0 -57 58 0 74 rrcurveto +0 73 48 43 87 40 rrcurveto +34 -64 47 -71 61 -79 rrcurveto +closepath +endchar } ND +/quotesingle { +0 191 hsbw +462 254 hstem +127 55 vstem +127 462 rmoveto +55 0 rlineto +51 134 rlineto +26 120 rlineto +-101 0 rlineto +-25 -120 rlineto +-6 -134 rlineto +closepath +endchar } ND +/parenleft { +0 333 hsbw +-210 20 hstem +708 20 hstem +84 87 vstem +344 69 vstem +161 -210 rmoveto +66 0 rlineto +-38 115 -18 111 0 108 rrcurveto +0 217 123 259 119 128 rrcurveto +-69 0 rlineto +-189 -213 -71 -146 0 -234 rrcurveto +0 -118 25 -115 52 -112 rrcurveto +closepath +endchar } ND +/parenright { +0 333 hsbw +-210 20 hstem +708 20 hstem +-53 69 vstem +188 87 vstem +198 728 rmoveto +-66 0 rlineto +37 -115 19 -111 0 -107 rrcurveto +0 -222 -121 -253 -120 -130 rrcurveto +69 0 rlineto +182 213 77 146 0 234 rrcurveto +0 118 -26 115 -51 112 rrcurveto +closepath +endchar } ND +/asterisk { +0 389 hsbw +607 121 hstem +157 71 vstem +31 584 rmoveto +38 -10 40 -9 42 -8 rrcurveto +-17 -15 -27 -31 -37 -46 rrcurveto +57 -42 rlineto +18 24 22 35 24 46 rrcurveto +25 -44 22 -35 20 -26 rrcurveto +58 42 rlineto +-36 44 -28 30 -20 18 rrcurveto +40 4 40 9 42 14 rrcurveto +-22 70 rlineto +-44 -15 -38 -16 -34 -16 rrcurveto +6 48 4 41 2 32 rrcurveto +-71 0 rlineto +0 -22 3 -41 7 -59 rrcurveto +-24 13 -38 16 -51 19 rrcurveto +-23 -70 rlineto +closepath +endchar } ND +/plus { +0 584 hsbw +312 82 hstem +250 83 vstem +250 116 rmoveto +83 0 rlineto +0 196 rlineto +195 0 rlineto +0 82 rlineto +-195 0 rlineto +0 195 rlineto +-83 0 rlineto +0 -195 rlineto +-194 0 rlineto +0 -82 rlineto +194 0 rlineto +0 -196 rlineto +closepath +endchar } ND +/comma { +0 278 hsbw +-145 20 hstem +0 100 hstem +75 101 vstem +54 0 rmoveto +55 0 rlineto +-13 -60 -26 -35 -38 -11 rrcurveto +-8 -39 rlineto +62 8 49 45 23 105 rrcurveto +18 87 rlineto +-101 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/hyphen { +0 333 hsbw +215 88 hstem +65 269 vstem +46 215 rmoveto +270 0 rlineto +18 88 rlineto +-269 0 rlineto +-19 -88 rlineto +closepath +endchar } ND +/period { +0 278 hsbw +0 100 hstem +58 99 vstem +58 0 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/slash { +0 278 hsbw +-12 20 hstem +708 20 hstem +-51 77 vstem +334 77 vstem +-51 -12 rmoveto +77 0 rlineto +385 740 rlineto +-77 0 rlineto +-385 -740 rlineto +closepath +endchar } ND +/zero { +0 556 hsbw +-12 70 hstem +648 71 hstem +71 85 vstem +481 84 vstem +71 235 rmoveto +0 -162 84 -85 107 0 rrcurveto +215 0 88 283 0 210 rrcurveto +0 154 -82 84 -109 0 rrcurveto +-221 0 -82 -283 0 -201 rrcurveto +closepath +85 -23 rmoveto +0 130 59 306 159 0 rrcurveto +64 0 43 -42 0 -104 rrcurveto +0 -134 -46 -310 -168 0 rrcurveto +-80 0 -31 67 0 87 rrcurveto +closepath +endchar } ND +/one { +0 556 hsbw +0 20 hstem +699 20 hstem +241 89 vstem +428 51 vstem +241 0 rmoveto +89 0 rlineto +149 719 rlineto +-51 0 rlineto +-65 -103 -93 -44 -105 -44 rrcurveto +-17 -80 rlineto +88 23 69 31 49 39 rrcurveto +-113 -541 rlineto +closepath +endchar } ND +/two { +0 556 hsbw +0 81 hstem +648 71 hstem +474 88 vstem +59 0 rmoveto +426 0 rlineto +17 81 rlineto +-320 0 rlineto +21 38 37 40 88 70 rrcurveto +162 128 72 44 0 126 rrcurveto +0 102 -98 90 -112 0 rrcurveto +-122 0 -88 -79 -17 -126 rrcurveto +87 -13 rlineto +21 102 53 45 68 0 rrcurveto +66 0 54 -53 0 -65 rrcurveto +0 -98 -59 -32 -100 -81 rrcurveto +-157 -128 -69 -36 -30 -155 rrcurveto +closepath +endchar } ND +/three { +0 556 hsbw +-12 70 hstem +334 70 hstem +648 71 hstem +469 88 vstem +55 188 rmoveto +9 -122 84 -78 130 0 rrcurveto +133 0 111 109 0 128 rrcurveto +0 61 -27 46 -56 34 rrcurveto +78 37 40 56 0 76 rrcurveto +0 102 -80 82 -117 0 rrcurveto +-111 0 -87 -68 -29 -117 rrcurveto +87 -18 rlineto +14 84 57 48 63 0 rrcurveto +64 0 51 -51 0 -66 rrcurveto +0 -71 -56 -56 -101 0 rrcurveto +-24 0 rlineto +-16 -70 rlineto +29 0 rlineto +80 0 51 -52 0 -70 rrcurveto +0 -80 -73 -74 -88 0 rrcurveto +-72 0 -46 40 -12 100 rrcurveto +-86 -10 rlineto +closepath +endchar } ND +/four { +0 556 hsbw +0 261 hstem +696 20 hstem +299 88 vstem +465 72 vstem +299 0 rmoveto +88 0 rlineto +39 183 rlineto +100 0 rlineto +16 78 rlineto +-100 0 rlineto +95 455 rlineto +-72 0 rlineto +-401 -446 rlineto +-19 -87 rlineto +292 0 rlineto +-38 -183 rlineto +closepath +55 261 rmoveto +-205 0 rlineto +267 299 rlineto +-62 -299 rlineto +closepath +endchar } ND +/five { +0 556 hsbw +-12 70 hstem +409 78 hstem +625 81 hstem +69 90 vstem +458 87 vstem +69 205 rmoveto +0 -15 rlineto +0 -104 86 -98 118 0 rrcurveto +150 0 122 141 0 155 rrcurveto +0 125 -79 78 -109 0 rrcurveto +-44 0 -43 -15 -41 -29 rrcurveto +54 182 rlineto +272 0 rlineto +17 81 rlineto +-349 0 rlineto +-108 -366 rlineto +77 -6 rlineto +40 50 46 25 51 0 rrcurveto +77 0 52 -53 0 -80 rrcurveto +0 -100 -85 -118 -94 0 rrcurveto +-66 0 -54 68 0 64 rrcurveto +0 23 rlineto +-90 -8 rlineto +closepath +endchar } ND +/six { +0 556 hsbw +-12 70 hstem +406 71 hstem +645 74 hstem +83 87 vstem +452 84 vstem +201 415 rmoveto +18 85 76 145 94 0 rrcurveto +50 0 37 -33 10 -77 rrcurveto +82 7 rlineto +-8 113 -67 64 -97 0 rrcurveto +-229 0 -84 -280 0 -200 rrcurveto +0 -162 89 -89 119 0 rrcurveto +143 0 102 134 0 149 rrcurveto +0 125 -79 81 -109 0 rrcurveto +-48 0 -50 -21 -49 -41 rrcurveto +closepath +-31 -214 rmoveto +0 120 81 85 79 0 rrcurveto +66 0 56 -58 0 -86 rrcurveto +0 -90 -77 -114 -82 0 rrcurveto +-63 0 -60 63 0 80 rrcurveto +closepath +endchar } ND +/seven { +0 556 hsbw +0 20 hstem +625 81 hstem +145 92 vstem +145 0 rmoveto +92 0 rlineto +44 217 130 262 168 146 rrcurveto +16 81 rlineto +-457 0 rlineto +-17 -81 rlineto +357 0 rlineto +-161 -155 -140 -280 -32 -190 rrcurveto +closepath +endchar } ND +/eight { +0 556 hsbw +-13 71 hstem +353 65 hstem +648 71 hstem +146 86 vstem +479 85 vstem +226 394 rmoveto +-94 -27 -57 -80 0 -105 rrcurveto +0 -111 84 -84 120 0 rrcurveto +152 0 98 119 0 128 rrcurveto +0 65 -26 47 -60 37 rrcurveto +84 33 37 58 0 70 rrcurveto +0 98 -77 77 -125 0 rrcurveto +-121 0 -95 -89 0 -106 rrcurveto +0 -54 26 -47 54 -29 rrcurveto +closepath +6 126 rmoveto +0 65 66 63 71 0 rrcurveto +68 0 42 -42 0 -61 rrcurveto +0 -71 -55 -56 -81 0 rrcurveto +-68 0 -43 40 0 62 rrcurveto +closepath +-68 -345 rmoveto +0 105 70 73 88 0 rrcurveto +70 0 48 -48 0 -66 rrcurveto +0 -88 -63 -93 -88 0 rrcurveto +-71 0 -54 54 0 63 rrcurveto +closepath +endchar } ND +/nine { +0 556 hsbw +-12 74 hstem +229 71 hstem +648 71 hstem +100 85 vstem +467 84 vstem +67 164 rmoveto +8 -112 67 -64 100 0 rrcurveto +211 0 98 271 0 208 rrcurveto +0 160 -88 92 -118 0 rrcurveto +-146 0 -99 -136 0 -146 rrcurveto +0 -122 79 -86 106 0 rrcurveto +48 0 42 16 60 46 rrcurveto +-32 -122 -55 -107 -102 0 rrcurveto +-48 0 -36 30 -12 80 rrcurveto +-83 -8 rlineto +closepath +118 283 rmoveto +0 78 67 123 91 0 rrcurveto +66 0 58 -74 0 -73 rrcurveto +0 -93 -75 -108 -86 0 rrcurveto +-66 0 -55 57 0 90 rrcurveto +closepath +endchar } ND +/colon { +0 278 hsbw +0 100 hstem +418 101 hstem +57 100 vstem +166 99 vstem +145 418 rmoveto +100 0 rlineto +20 101 rlineto +-99 0 rlineto +-21 -101 rlineto +closepath +-88 -418 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/semicolon { +0 278 hsbw +-145 20 hstem +0 100 hstem +418 101 hstem +142 99 vstem +142 418 rmoveto +99 0 rlineto +21 101 rlineto +-99 0 rlineto +-21 -101 rlineto +closepath +-88 -418 rmoveto +55 0 rlineto +-13 -60 -26 -35 -38 -11 rrcurveto +-8 -39 rlineto +62 8 49 45 23 105 rrcurveto +18 87 rlineto +-101 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/less { +0 584 hsbw +109 89 313 79 508 87 hstem3 +55 98 vstem +55 313 rmoveto +474 -203 rlineto +0 88 rlineto +-376 156 rlineto +376 154 rlineto +0 87 rlineto +-474 -200 rlineto +0 -82 rlineto +closepath +endchar } ND +/equal { +0 584 hsbw +204 82 hstem +421 82 hstem +56 472 vstem +528 421 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +0 -217 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +endchar } ND +/greater { +0 584 hsbw +109 89 313 79 508 87 hstem3 +430 99 vstem +529 313 rmoveto +0 82 rlineto +-474 200 rlineto +0 -87 rlineto +375 -154 rlineto +-375 -156 rlineto +0 -88 rlineto +474 203 rlineto +closepath +endchar } ND +/question { +0 556 hsbw +0 100 hstem +657 71 hstem +209 84 vstem +473 88 vstem +209 179 rmoveto +84 0 rlineto +10 64 16 25 85 69 rrcurveto +103 83 54 45 0 88 rrcurveto +0 97 -99 78 -108 0 rrcurveto +-114 0 -85 -68 -28 -140 rrcurveto +88 -15 rlineto +17 109 50 43 75 0 rrcurveto +68 0 48 -46 0 -52 rrcurveto +0 -57 -37 -40 -72 -57 rrcurveto +-114 -90 -31 -34 -10 -102 rrcurveto +closepath +-43 -179 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/at { +0 1015 hsbw +-210 72 hstem +-2 82 hstem +457 72 hstem +658 71 hstem +54 72 vstem +240 91 vstem +658 87 vstem +883 72 vstem +567 80 rmoveto +6 -66 23 -16 65 0 rrcurveto +155 0 139 181 0 169 rrcurveto +0 216 -186 165 -231 0 rrcurveto +-297 0 -187 -237 0 -263 rrcurveto +0 -263 229 -176 265 0 rrcurveto +193 0 175 93 63 126 rrcurveto +-88 0 rlineto +-58 -81 -116 -66 -170 0 rrcurveto +-228 0 -193 139 0 236 rrcurveto +0 223 179 198 229 0 rrcurveto +181 0 168 -132 0 -176 rrcurveto +0 -119 -109 -151 -80 0 rrcurveto +-19 0 -15 14 0 18 rrcurveto +0 4 5 26 10 46 rrcurveto +70 327 rlineto +-87 0 rlineto +-17 -76 rlineto +-38 61 -53 29 -56 0 rrcurveto +-136 0 -118 -172 0 -139 rrcurveto +0 -110 76 -109 101 0 rrcurveto +53 0 54 31 43 50 rrcurveto +closepath +-236 132 rmoveto +0 96 59 149 110 0 rrcurveto +62 0 51 -52 0 -88 rrcurveto +0 -110 -78 -136 -100 0 rrcurveto +-55 0 -49 51 0 90 rrcurveto +closepath +endchar } ND +/A { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +-20 105 vstem +386 113 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +endchar } ND +/B { +0 667 hsbw +0 81 hstem +329 81 hstem +634 82 hstem +565 90 vstem +43 0 rmoveto +347 0 rlineto +132 0 117 104 0 123 rrcurveto +0 68 -39 52 -77 27 rrcurveto +89 30 43 63 0 79 rrcurveto +0 114 -91 56 -149 0 rrcurveto +-222 0 rlineto +-150 -716 rlineto +closepath +182 410 rmoveto +47 224 rlineto +152 0 rlineto +94 0 47 -23 0 -71 rrcurveto +0 -84 -57 -46 -138 0 rrcurveto +-145 0 rlineto +closepath +-69 -329 rmoveto +52 248 rlineto +182 0 rlineto +117 0 34 -37 0 -66 rrcurveto +0 -103 -75 -42 -147 0 rrcurveto +-163 0 rlineto +closepath +endchar } ND +/C { +0 722 hsbw +-12 79 hstem +649 79 hstem +91 95 vstem +603 252 rmoveto +-36 -118 -86 -67 -100 0 rrcurveto +-116 0 -79 79 0 147 rrcurveto +0 183 108 173 175 0 rrcurveto +93 0 60 -52 19 -102 rrcurveto +89 8 rlineto +-15 137 -99 88 -152 0 rrcurveto +-225 0 -148 -197 0 -236 rrcurveto +0 -198 109 -109 174 0 rrcurveto +142 0 122 85 60 166 rrcurveto +-95 13 rlineto +closepath +endchar } ND +/D { +0 722 hsbw +0 81 hstem +634 82 hstem +615 97 vstem +44 0 rmoveto +258 0 rlineto +256 0 154 183 0 240 rrcurveto +0 173 -94 120 -208 0 rrcurveto +-216 0 rlineto +-150 -716 rlineto +closepath +113 81 rmoveto +116 553 rlineto +126 0 rlineto +156 0 60 -37 0 -169 rrcurveto +0 -217 -140 -130 -204 0 rrcurveto +-114 0 rlineto +closepath +endchar } ND +/E { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +195 516 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/F { +0 611 hsbw +0 20 hstem +325 81 hstem +634 82 hstem +45 96 vstem +195 465 vstem +45 0 rmoveto +96 0 rlineto +68 325 rlineto +376 0 rlineto +18 81 rlineto +-377 0 rlineto +47 228 rlineto +370 0 rlineto +17 82 rlineto +-465 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/G { +0 778 hsbw +-12 79 hstem +282 81 hstem +648 80 hstem +97 97 vstem +427 313 vstem +410 282 rmoveto +217 0 rlineto +-32 -154 rlineto +-72 -41 -66 -20 -62 0 rrcurveto +-126 0 -75 74 0 144 rrcurveto +0 187 117 176 176 0 rrcurveto +100 0 65 -54 20 -98 rrcurveto +94 10 rlineto +-30 149 -107 73 -139 0 rrcurveto +-232 0 -161 -208 0 -233 rrcurveto +0 -184 107 -115 192 0 rrcurveto +97 0 107 34 79 50 rrcurveto +61 291 rlineto +-313 0 rlineto +-17 -81 rlineto +closepath +endchar } ND +/H { +0 722 hsbw +0 418 hstem +696 20 hstem +42 96 vstem +192 95 vstem +509 95 vstem +658 96 vstem +42 0 rmoveto +96 0 rlineto +70 337 rlineto +371 0 rlineto +-70 -337 rlineto +95 0 rlineto +150 716 rlineto +-96 0 rlineto +-62 -298 rlineto +-371 0 rlineto +62 298 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/I { +0 278 hsbw +0 20 hstem +696 20 hstem +57 96 vstem +207 95 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/J { +0 500 hsbw +-12 79 hstem +696 20 hstem +33 89 vstem +440 96 vstem +41 208 rmoveto +-6 -21 -2 -21 0 -22 rrcurveto +0 -99 61 -57 119 0 rrcurveto +110 0 73 58 31 147 rrcurveto +109 523 rlineto +-96 0 rlineto +-106 -508 rlineto +-19 -95 -28 -46 -72 0 rrcurveto +-59 0 -34 33 0 54 rrcurveto +0 12 2 21 5 28 rrcurveto +-88 -7 rlineto +closepath +endchar } ND +/K { +0 667 hsbw +0 20 hstem +371 345 hstem +44 96 vstem +194 96 vstem +545 107 vstem +44 0 rmoveto +96 0 rlineto +49 232 rlineto +150 131 rlineto +206 -363 rlineto +107 0 rlineto +-243 424 rlineto +332 292 rlineto +-135 0 rlineto +-388 -345 rlineto +72 345 rlineto +-96 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/L { +0 556 hsbw +0 81 hstem +696 20 hstem +189 96 vstem +40 0 rmoveto +467 0 rlineto +17 81 rlineto +-371 0 rlineto +132 635 rlineto +-96 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/M { +0 833 hsbw +0 77 hstem +619 97 hstem +44 93 vstem +193 118 vstem +342 93 vstem +628 95 vstem +752 120 vstem +44 0 rmoveto +93 0 rlineto +95 457 rlineto +8 36 8 50 8 63 rrcurveto +3 -56 5 -49 7 -42 rrcurveto +71 -459 rlineto +93 0 rlineto +266 468 rlineto +30 54 26 50 20 47 rrcurveto +-32 -100 -25 -91 -17 -80 rrcurveto +-75 -348 rlineto +95 0 rlineto +149 716 rlineto +-120 0 rlineto +-251 -444 rlineto +-46 -82 -33 -65 -20 -48 rrcurveto +-4 56 -6 58 -9 61 rrcurveto +-72 464 rlineto +-118 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/N { +0 722 hsbw +0 108 hstem +606 110 hstem +49 93 vstem +199 93 vstem +513 94 vstem +664 93 vstem +49 0 rmoveto +93 0 rlineto +91 435 rlineto +14 68 9 57 5 46 rrcurveto +18 -56 24 -64 32 -72 rrcurveto +178 -414 rlineto +94 0 rlineto +150 716 rlineto +-93 0 rlineto +-88 -421 rlineto +-14 -64 -11 -63 -9 -60 rrcurveto +-42 143 -28 66 -60 130 rrcurveto +-120 269 rlineto +-93 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/O { +0 778 hsbw +-12 79 hstem +648 80 hstem +91 95 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +endchar } ND +/P { +0 667 hsbw +0 20 hstem +291 81 hstem +638 78 hstem +43 96 vstem +604 94 vstem +43 0 rmoveto +96 0 rlineto +60 291 rlineto +179 0 rlineto +152 0 168 101 0 148 rrcurveto +0 109 -72 67 -134 0 rrcurveto +-299 0 rlineto +-150 -716 rlineto +closepath +173 372 rmoveto +56 266 rlineto +184 0 rlineto +98 0 50 -20 0 -80 rrcurveto +0 -108 -87 -58 -143 0 rrcurveto +-158 0 rlineto +closepath +endchar } ND +/Q { +0 778 hsbw +-13 80 hstem +648 80 hstem +92 95 vstem +678 95 vstem +604 58 rmoveto +106 78 63 127 0 144 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-218 0 -161 -203 0 -212 rrcurveto +0 -183 161 -143 151 0 rrcurveto +44 0 46 12 49 22 rrcurveto +34 -40 39 -35 44 -28 rrcurveto +42 57 rlineto +-41 26 -33 28 -24 29 rrcurveto +closepath +-58 61 rmoveto +-50 50 -28 20 -42 19 rrcurveto +-34 -60 rlineto +30 -16 31 -22 30 -27 rrcurveto +-29 -11 -32 -5 -35 0 rrcurveto +-113 0 -87 104 0 134 rrcurveto +0 173 123 170 163 0 rrcurveto +114 0 91 -91 0 -144 rrcurveto +0 -116 -54 -117 -78 -61 rrcurveto +closepath +endchar } ND +/R { +0 722 hsbw +0 20 hstem +318 78 hstem +637 79 hstem +47 96 vstem +639 91 vstem +47 0 rmoveto +96 0 rlineto +66 318 rlineto +111 0 rlineto +144 0 13 -84 39 -101 rrcurveto +51 -133 rlineto +107 0 rlineto +-54 135 rlineto +-29 67 -30 65 -73 55 rrcurveto +170 22 72 80 0 118 rrcurveto +0 127 -87 47 -146 0 rrcurveto +-300 0 rlineto +-150 -716 rlineto +closepath +178 396 rmoveto +51 241 rlineto +233 0 rlineto +84 0 46 -29 0 -65 rrcurveto +0 -123 -98 -24 -184 0 rrcurveto +-132 0 rlineto +closepath +endchar } ND +/S { +0 667 hsbw +-12 79 hstem +648 80 hstem +159 92 vstem +579 92 vstem +70 231 rmoveto +1 -183 113 -60 162 0 rrcurveto +142 0 135 80 0 130 rrcurveto +0 104 -60 42 -128 54 rrcurveto +-119 50 -65 19 0 75 rrcurveto +0 74 71 32 84 0 rrcurveto +93 0 80 -38 0 -105 rrcurveto +92 8 rlineto +0 14 rlineto +0 112 -120 89 -141 0 rrcurveto +-131 0 -120 -70 0 -121 rrcurveto +0 -108 72 -42 138 -60 rrcurveto +103 -45 54 -19 0 -72 rrcurveto +0 -64 -62 -60 -114 0 rrcurveto +-103 0 -83 53 0 95 rrcurveto +0 25 rlineto +-94 -9 rlineto +closepath +endchar } ND +/T { +0 611 hsbw +0 20 hstem +634 82 hstem +227 96 vstem +359 96 vstem +227 0 rmoveto +96 0 rlineto +132 634 rlineto +233 0 rlineto +17 82 rlineto +-563 0 rlineto +-17 -82 rlineto +234 0 rlineto +-132 -634 rlineto +closepath +endchar } ND +/U { +0 722 hsbw +-13 80 hstem +696 20 hstem +97 94 vstem +198 96 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +endchar } ND +/V { +0 667 hsbw +0 102 hstem +696 20 hstem +124 92 vstem +262 102 vstem +658 99 vstem +262 0 rmoveto +102 0 rlineto +393 716 rlineto +-99 0 rlineto +-255 -469 rlineto +-11 -17 -11 -22 -11 -24 rrcurveto +-12 -26 -13 -27 -16 -29 rrcurveto +-5 47 -10 62 -15 78 rrcurveto +-83 427 rlineto +-92 0 rlineto +138 -716 rlineto +closepath +endchar } ND +/W { +0 944 hsbw +0 125 hstem +570 146 hstem +125 97 548 91 965 97 vstem3 +169 0 rmoveto +99 0 rlineto +248 465 rlineto +13 24 16 35 20 46 rrcurveto +1 -54 2 -46 3 -36 rrcurveto +24 -434 rlineto +102 0 rlineto +365 716 rlineto +-98 0 rlineto +-204 -403 rlineto +-7 -11 -7 -15 -8 -20 rrcurveto +-8 -19 -10 -23 -13 -26 rrcurveto +-16 -32 -10 -25 -5 -17 rrcurveto +-2 67 -2 57 -2 48 rrcurveto +-24 419 rlineto +-98 0 rlineto +-218 -412 rlineto +-10 -16 -12 -22 -13 -30 rrcurveto +-13 -30 -17 -34 -21 -40 rrcurveto +0 92 rlineto +0 37 -2 33 -2 20 rrcurveto +0 48 rlineto +-18 354 rlineto +-97 0 rlineto +44 -716 rlineto +closepath +endchar } ND +/X { +0 667 hsbw +0 20 hstem +696 20 hstem +-32 127 vstem +107 106 vstem +515 104 vstem +644 125 vstem +-32 0 rmoveto +127 0 rlineto +200 213 rlineto +25 26 21 26 18 24 rrcurveto +15 -33 13 -27 12 -20 rrcurveto +116 -209 rlineto +104 0 rlineto +-196 346 rlineto +346 370 rlineto +-125 0 rlineto +-157 -166 rlineto +-51 -53 -37 -43 -24 -32 rrcurveto +-5 11 -5 10 -5 10 rrcurveto +-5 8 -5 9 -3 9 rrcurveto +-4 7 -14 25 -24 43 rrcurveto +-92 162 rlineto +-106 0 rlineto +203 -354 rlineto +-342 -362 rlineto +closepath +endchar } ND +/Y { +0 667 hsbw +0 20 hstem +696 20 hstem +117 102 vstem +279 96 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +endchar } ND +/Z { +0 611 hsbw +0 82 hstem +640 76 hstem +126 241 vstem +24 0 rmoveto +531 0 rlineto +17 82 rlineto +-390 0 rlineto +-4 0 -10 -1 -14 -2 rrcurveto +12 14 30 35 48 57 rrcurveto +384 456 rlineto +9 75 rlineto +-494 0 rlineto +-17 -82 rlineto +241 0 rlineto +28 1 rlineto +51 0 rlineto +12 0 21 1 31 4 rrcurveto +-7 -8 -6 -8 -9 -8 rrcurveto +-7 -7 -8 -9 -7 -10 rrcurveto +-74 -90 rlineto +-358 -428 rlineto +-10 -72 rlineto +closepath +endchar } ND +/bracketleft { +0 278 hsbw +-196 68 hstem +648 68 hstem +6 196 vstem +6 -196 rmoveto +196 0 rlineto +14 68 rlineto +-108 0 rlineto +162 776 rlineto +107 0 rlineto +14 68 rlineto +-197 0 rlineto +-188 -912 rlineto +closepath +endchar } ND +/backslash { +0 278 hsbw +-12 20 hstem +708 20 hstem +85 68 vstem +205 68 vstem +205 -12 rmoveto +68 0 rlineto +-120 740 rlineto +-68 0 rlineto +120 -740 rlineto +closepath +endchar } ND +/bracketright { +0 278 hsbw +-196 68 hstem +648 68 hstem +-59 196 vstem +137 -196 rmoveto +192 912 rlineto +-197 0 rlineto +-14 -68 rlineto +108 0 rlineto +-163 -776 rlineto +-107 0 rlineto +-15 -68 rlineto +196 0 rlineto +closepath +endchar } ND +/asciicircum { +0 469 hsbw +628 100 hstem +26 93 201 69 354 89 vstem3 +117 337 rmoveto +117 291 rlineto +120 -291 rlineto +89 0 rlineto +-173 391 rlineto +-71 0 rlineto +-173 -391 rlineto +91 0 rlineto +closepath +endchar } ND +/underscore { +0 556 hsbw +-199 64 hstem +-15 582 vstem +-15 -199 rmoveto +582 0 rlineto +0 64 rlineto +-582 0 rlineto +0 -64 rlineto +closepath +endchar } ND +/grave { +0 333 hsbw +582 134 hstem +241 69 vstem +241 582 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/a { +0 556 hsbw +-12 69 hstem +458 72 hstem +44 88 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +endchar } ND +/b { +0 556 hsbw +-12 73 hstem +459 71 hstem +696 20 hstem +33 78 vstem +183 88 vstem +448 87 vstem +33 0 rmoveto +78 0 rlineto +20 98 rlineto +29 -75 53 -35 70 0 rrcurveto +143 0 109 167 0 163 rrcurveto +0 138 -73 74 -97 0 rrcurveto +-50 0 -41 -18 -56 -52 rrcurveto +53 256 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +131 213 rmoveto +0 82 85 164 90 0 rrcurveto +61 0 48 -50 0 -88 rrcurveto +0 -103 -59 -157 -115 0 rrcurveto +-63 0 -47 47 0 88 rrcurveto +0 17 rlineto +closepath +endchar } ND +/c { +0 500 hsbw +-12 69 hstem +458 72 hstem +56 90 vstem +391 189 rmoveto +-30 -90 -57 -42 -57 0 rrcurveto +-58 0 -43 44 0 88 rrcurveto +0 110 48 159 127 0 rrcurveto +61 0 40 -40 2 -65 rrcurveto +87 5 rlineto +0 104 -71 68 -110 0 rrcurveto +-171 0 -103 -176 0 -158 rrcurveto +0 -131 76 -77 114 0 rrcurveto +104 0 85 62 44 130 rrcurveto +-88 9 rlineto +closepath +endchar } ND +/d { +0 556 hsbw +-12 71 hstem +458 72 hstem +696 20 hstem +53 88 vstem +367 82 vstem +510 88 vstem +383 75 rmoveto +-16 -75 rlineto +82 0 rlineto +149 716 rlineto +-88 0 rlineto +-58 -279 rlineto +-34 62 -48 31 -64 0 rrcurveto +-145 0 -108 -169 0 -160 rrcurveto +0 -139 73 -74 99 0 rrcurveto +54 0 53 29 51 58 rrcurveto +closepath +-242 142 rmoveto +0 88 54 153 116 0 rrcurveto +65 0 48 -50 0 -81 rrcurveto +0 -131 -67 -137 -107 0 rrcurveto +-78 0 -31 68 0 90 rrcurveto +closepath +endchar } ND +/e { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +52 89 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +endchar } ND +/f { +0 278 hsbw +0 20 hstem +450 69 hstem +648 80 hstem +45 89 vstem +140 88 vstem +45 0 rmoveto +89 0 rlineto +94 450 rlineto +99 0 rlineto +14 69 rlineto +-99 0 rlineto +12 55 rlineto +13 65 15 9 34 0 rrcurveto +20 0 26 -4 30 -7 rrcurveto +16 77 rlineto +-43 9 -33 5 -22 0 rrcurveto +-90 0 -30 -40 -21 -96 rrcurveto +-15 -73 rlineto +-79 0 rlineto +-14 -69 rlineto +79 0 rlineto +-95 -450 rlineto +closepath +endchar } ND +/g { +0 556 hsbw +-208 73 hstem +0 72 hstem +459 71 hstem +49 90 vstem +483 81 vstem +26 -47 rmoveto +0 -26 rlineto +0 -92 95 -43 102 0 rrcurveto +131 0 75 84 31 142 rrcurveto +104 501 rlineto +-81 0 rlineto +-17 -85 rlineto +-37 64 -52 32 -68 0 rrcurveto +-144 0 -116 -154 0 -154 rrcurveto +0 -142 80 -80 104 0 rrcurveto +52 0 49 23 46 47 rrcurveto +-9 -42 rlineto +-26 -123 -25 -40 -107 0 rrcurveto +-26 0 -20 4 -16 7 rrcurveto +-24 11 -11 18 2 40 rrcurveto +-92 8 rlineto +closepath +113 276 rmoveto +0 69 69 161 103 0 rrcurveto +69 0 54 -55 0 -85 rrcurveto +0 -105 -81 -142 -102 0 rrcurveto +-70 0 -42 62 0 95 rrcurveto +closepath +endchar } ND +/h { +0 556 hsbw +0 20 hstem +458 72 hstem +696 20 hstem +33 89 vstem +183 88 vstem +441 88 vstem +33 0 rmoveto +89 0 rlineto +46 223 rlineto +29 147 64 88 112 0 rrcurveto +44 0 24 -25 0 -33 rrcurveto +0 -12 -5 -29 -9 -45 rrcurveto +-66 -314 rlineto +88 0 rlineto +64 306 rlineto +10 48 6 34 0 19 rrcurveto +0 73 -50 50 -86 0 rrcurveto +-60 0 -54 -25 -65 -64 rrcurveto +57 275 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/i { +0 222 hsbw +0 20 hstem +499 20 hstem +616 100 hstem +30 88 vstem +159 88 vstem +159 616 rmoveto +88 0 rlineto +21 100 rlineto +-88 0 rlineto +-21 -100 rlineto +closepath +-129 -616 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/j { +0 222 hsbw +-208 80 hstem +499 20 hstem +616 100 hstem +159 87 vstem +159 616 rmoveto +87 0 rlineto +21 100 rlineto +-87 0 rlineto +-21 -100 rlineto +closepath +-280 -811 rmoveto +33 -8 28 -5 23 0 rrcurveto +96 0 30 67 24 120 rrcurveto +113 540 rlineto +-89 0 rlineto +-109 -524 rlineto +-24 -113 -17 -10 -39 0 rrcurveto +-15 0 -18 3 -20 5 rrcurveto +-16 -75 rlineto +closepath +endchar } ND +/k { +0 500 hsbw +0 20 hstem +499 20 hstem +696 20 hstem +34 89 vstem +184 88 vstem +370 96 vstem +34 0 rmoveto +89 0 rlineto +36 173 rlineto +107 93 rlineto +104 -266 rlineto +96 0 rlineto +-133 325 rlineto +221 194 rlineto +-117 0 rlineto +-258 -247 rlineto +93 444 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/l { +0 222 hsbw +0 20 hstem +696 20 hstem +26 89 vstem +176 88 vstem +26 0 rmoveto +89 0 rlineto +149 716 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/m { +0 833 hsbw +0 20 hstem +458 72 hstem +33 88 vstem +141 88 vstem +337 88 vstem +724 89 vstem +33 0 rmoveto +88 0 rlineto +51 245 rlineto +25 123 69 90 95 0 rrcurveto +33 0 24 -24 0 -33 rrcurveto +0 -10 -3 -17 -5 -24 rrcurveto +-73 -350 rlineto +88 0 rlineto +53 251 rlineto +25 128 67 79 92 0 rrcurveto +38 0 24 -22 0 -33 rrcurveto +0 -12 -4 -20 -6 -28 rrcurveto +-71 -343 rlineto +88 0 rlineto +70 334 rlineto +8 36 4 27 0 16 rrcurveto +0 74 -44 43 -86 0 rrcurveto +-66 0 -57 -32 -53 -65 rrcurveto +-14 61 -45 36 -64 0 rrcurveto +-62 0 -45 -24 -66 -73 rrcurveto +18 86 rlineto +-88 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/n { +0 556 hsbw +0 20 hstem +458 72 hstem +33 89 vstem +142 80 vstem +440 88 vstem +33 0 rmoveto +89 0 rlineto +50 241 rlineto +33 158 75 59 91 0 rrcurveto +44 0 25 -25 0 -34 rrcurveto +0 -16 -4 -23 -6 -31 rrcurveto +-69 -329 rlineto +88 0 rlineto +66 314 rlineto +8 41 5 30 0 20 rrcurveto +0 76 -51 49 -84 0 rrcurveto +-63 0 -58 -32 -69 -70 rrcurveto +19 91 rlineto +-80 0 rlineto +-109 -519 rlineto +closepath +endchar } ND +/o { +0 556 hsbw +-12 69 hstem +462 68 hstem +49 88 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +endchar } ND +/p { +0 556 hsbw +-199 20 hstem +-12 73 hstem +459 71 hstem +-10 88 vstem +140 81 vstem +447 88 vstem +-10 -199 rmoveto +88 0 rlineto +59 282 rlineto +34 -64 48 -31 62 0 rrcurveto +152 0 102 170 0 164 rrcurveto +0 133 -72 75 -100 0 rrcurveto +-54 0 -43 -20 -60 -64 rrcurveto +15 73 rlineto +-81 0 rlineto +-150 -718 rlineto +closepath +175 411 rmoveto +0 90 63 157 109 0 rrcurveto +62 0 48 -50 0 -88 rrcurveto +0 -119 -68 -141 -102 0 rrcurveto +-78 0 -34 50 0 101 rrcurveto +closepath +endchar } ND +/q { +0 556 hsbw +-199 20 hstem +-12 73 hstem +458 72 hstem +51 88 vstem +314 89 vstem +476 76 vstem +368 59 rmoveto +-54 -258 rlineto +89 0 rlineto +149 718 rlineto +-76 0 rlineto +-20 -96 rlineto +-32 72 -55 35 -62 0 rrcurveto +-151 0 -105 -167 0 -164 rrcurveto +0 -135 76 -76 96 0 rrcurveto +46 0 48 23 51 48 rrcurveto +closepath +-229 152 rmoveto +0 96 55 151 117 0 rrcurveto +62 0 50 -52 0 -84 rrcurveto +0 -108 -72 -153 -101 0 rrcurveto +-64 0 -47 47 0 103 rrcurveto +closepath +endchar } ND +/r { +0 333 hsbw +0 20 hstem +446 84 hstem +33 84 vstem +142 78 vstem +33 0 rmoveto +84 0 rlineto +44 208 rlineto +37 178 73 60 62 0 rrcurveto +18 0 16 -6 16 -11 rrcurveto +36 82 rlineto +-26 12 -21 7 -18 0 rrcurveto +-54 0 -49 -37 -53 -80 rrcurveto +22 106 rlineto +-78 0 rlineto +-109 -519 rlineto +closepath +endchar } ND +/s { +0 500 hsbw +-12 69 hstem +462 68 hstem +114 83 vstem +375 89 vstem +42 177 rmoveto +-3 -67 21 -48 41 -29 rrcurveto +43 -30 50 -15 60 0 rrcurveto +109 0 101 65 0 93 rrcurveto +0 88 -52 29 -118 50 rrcurveto +-66 28 -31 10 0 45 rrcurveto +0 32 36 34 60 0 rrcurveto +77 0 42 -40 3 -62 rrcurveto +86 6 rlineto +-2 98 -70 66 -129 0 rrcurveto +-118 0 -68 -68 0 -81 rrcurveto +0 -82 65 -30 91 -40 rrcurveto +56 -26 49 -21 0 -47 rrcurveto +0 -42 -39 -36 -78 0 rrcurveto +-75 0 -53 46 0 80 rrcurveto +-88 -6 rlineto +closepath +endchar } ND +/t { +0 278 hsbw +-9 75 hstem +450 69 hstem +56 93 vstem +240 72 rmoveto +-16 -4 -17 -2 -19 0 rrcurveto +-28 0 -11 12 0 20 rrcurveto +0 7 3 22 8 37 rrcurveto +60 286 rlineto +87 0 rlineto +14 69 rlineto +-87 0 rlineto +40 188 rlineto +-101 -61 rlineto +-27 -127 rlineto +-70 0 rlineto +-14 -69 rlineto +70 0 rlineto +-63 -301 rlineto +-9 -42 -4 -26 0 -11 rrcurveto +0 -55 49 -24 59 0 rrcurveto +19 0 20 3 22 6 rrcurveto +15 72 rlineto +closepath +endchar } ND +/u { +0 556 hsbw +-12 73 hstem +499 20 hstem +63 89 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +endchar } ND +/v { +0 500 hsbw +0 80 hstem +499 20 hstem +79 86 vstem +466 93 vstem +164 0 rmoveto +98 0 rlineto +297 519 rlineto +-93 0 rlineto +-174 -312 rlineto +-26 -48 -22 -43 -16 -36 rrcurveto +-8 70 -6 51 -5 32 rrcurveto +-44 286 rlineto +-86 0 rlineto +85 -519 rlineto +closepath +endchar } ND +/w { +0 722 hsbw +0 96 hstem +499 20 hstem +78 85 vstem +432 91 vstem +688 89 vstem +132 0 rmoveto +93 0 rlineto +137 302 rlineto +18 40 15 37 14 36 rrcurveto +0 -55 1 -37 2 -19 rrcurveto +20 -304 rlineto +91 0 rlineto +254 519 rlineto +-89 0 rlineto +-111 -236 rlineto +-37 -78 -26 -60 -16 -43 rrcurveto +-1 65 -2 52 -2 40 rrcurveto +-17 260 rlineto +-97 0 rlineto +-123 -271 rlineto +-31 -66 -7 -20 -20 -66 rrcurveto +-2 29 -1 20 0 10 rrcurveto +-9 131 rlineto +-23 233 rlineto +-85 0 rlineto +54 -519 rlineto +closepath +endchar } ND +/x { +0 500 hsbw +0 20 hstem +499 20 hstem +95 97 vstem +353 98 vstem +-1 0 rmoveto +110 0 rlineto +155 189 rlineto +14 -34 12 -28 11 -22 rrcurveto +52 -105 rlineto +98 0 rlineto +-131 256 rlineto +218 263 rlineto +-108 0 rlineto +-150 -192 rlineto +-13 32 -15 33 -16 34 rrcurveto +-44 93 rlineto +-97 0 rlineto +129 -256 rlineto +-225 -263 rlineto +closepath +endchar } ND +/y { +0 500 hsbw +-210 85 hstem +499 20 hstem +91 87 vstem +469 92 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +endchar } ND +/z { +0 500 hsbw +0 78 hstem +451 68 hstem +111 401 vstem +20 0 rmoveto +417 0 rlineto +16 78 rlineto +-204 0 rlineto +-18 0 -34 -2 -49 -3 rrcurveto +31 31 24 25 16 18 rrcurveto +281 316 rlineto +12 56 rlineto +-401 0 rlineto +-15 -74 rlineto +193 0 rlineto +18 0 30 2 42 4 rrcurveto +-25 -24 -22 -23 -19 -22 rrcurveto +-279 -314 rlineto +-14 -68 rlineto +closepath +endchar } ND +/braceleft { +0 334 hsbw +-210 76 hstem +651 77 hstem +129 82 vstem +69 299 rmoveto +-17 -80 rlineto +50 -2 27 -26 0 -52 rrcurveto +0 -20 -6 -37 -11 -52 rrcurveto +-15 -72 -7 -46 0 -22 rrcurveto +0 -77 38 -23 87 0 rrcurveto +27 0 rlineto +16 76 rlineto +-82 0 -3 4 0 43 rrcurveto +0 13 6 29 10 48 rrcurveto +14 67 8 46 0 26 rrcurveto +0 61 -23 34 -46 22 rrcurveto +113 49 16 65 29 142 rrcurveto +20 98 4 38 90 0 rrcurveto +15 0 rlineto +16 77 rlineto +-27 0 rlineto +-168 0 -8 -96 -31 -144 rrcurveto +-22 -102 -30 -85 -90 -2 rrcurveto +closepath +endchar } ND +/bar { +0 260 hsbw +-210 20 hstem +708 20 hstem +92 76 vstem +92 -210 rmoveto +76 0 rlineto +0 938 rlineto +-76 0 rlineto +0 -938 rlineto +closepath +endchar } ND +/braceright { +0 334 hsbw +-210 76 hstem +651 77 hstem +150 82 vstem +309 299 rmoveto +-51 1 -26 27 0 52 rrcurveto +0 18 7 44 16 78 rrcurveto +10 48 6 38 0 22 rrcurveto +0 79 -40 22 -85 0 rrcurveto +-26 0 rlineto +-17 -77 rlineto +15 0 rlineto +57 0 13 -13 0 -33 rrcurveto +0 -13 -6 -31 -10 -46 rrcurveto +-15 -69 -7 -45 0 -25 rrcurveto +0 -62 18 -29 51 -26 rrcurveto +-103 -41 -24 -72 -31 -143 rrcurveto +-23 -106 12 -31 -102 0 rrcurveto +-15 0 rlineto +-17 -76 rlineto +27 0 rlineto +134 0 31 45 26 127 rrcurveto +13 89 26 164 119 4 rrcurveto +17 80 rlineto +closepath +endchar } ND +/asciitilde { +0 584 hsbw +273 92 hstem +42 500 vstem +42 272 rmoveto +54 53 32 13 42 0 rrcurveto +25 0 32 -9 39 -17 rrcurveto +62 -27 29 -12 50 0 rrcurveto +53 0 40 16 42 40 rrcurveto +0 103 rlineto +-35 -39 -49 -28 -42 0 rrcurveto +-23 0 -17 4 -44 19 rrcurveto +-80 34 -34 9 -40 0 rrcurveto +-56 0 -46 -20 -34 -39 rrcurveto +0 -100 rlineto +closepath +endchar } ND +/Adieresis { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +760 100 hstem +-20 105 vstem +301 93 vstem +502 92 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +60 480 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Aring { +0 667 hsbw +0 20 hstem +206 74 hstem +686 36 hstem +827 36 hstem +-20 105 vstem +367 36 vstem +508 36 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +126 494 rmoveto +0 -50 39 -38 50 0 rrcurveto +48 0 40 38 0 50 rrcurveto +0 49 -39 40 -49 0 rrcurveto +-50 0 -39 -39 0 -50 rrcurveto +closepath +36 0 rmoveto +0 29 23 24 30 0 rrcurveto +29 0 23 -24 0 -29 rrcurveto +0 -30 -23 -22 -29 0 rrcurveto +-30 0 -23 22 0 30 rrcurveto +closepath +endchar } ND +/Ccedilla { +0 722 hsbw +-210 59 hstem +-12 15 hstem +649 79 hstem +91 95 vstem +349 85 vstem +603 252 rmoveto +-36 -118 -86 -67 -100 0 rrcurveto +-116 0 -79 79 0 147 rrcurveto +0 183 108 173 175 0 rrcurveto +93 0 60 -52 19 -102 rrcurveto +89 8 rlineto +-15 137 -99 88 -152 0 rrcurveto +-225 0 -148 -197 0 -236 rrcurveto +0 -198 109 -109 174 0 rrcurveto +142 0 122 85 60 166 rrcurveto +-95 13 rlineto +closepath +-333 -328 rmoveto +41 0 38 -6 0 -35 rrcurveto +0 -17 -17 -17 -66 0 rrcurveto +-71 0 rlineto +-11 -54 rlineto +24 -3 27 -2 32 0 rrcurveto +90 0 77 15 0 71 rrcurveto +0 40 -31 35 -57 8 rrcurveto +12 44 rlineto +-68 0 rlineto +-20 -79 rlineto +closepath +endchar } ND +/Eacute { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +874 20 hstem +364 73 vstem +456 111 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +319 760 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Ntilde { +0 722 hsbw +0 108 hstem +606 110 hstem +758 68 hstem +49 93 vstem +199 93 vstem +323 61 vstem +594 59 vstem +664 93 vstem +49 0 rmoveto +93 0 rlineto +91 435 rlineto +14 68 9 57 5 46 rrcurveto +18 -56 24 -64 32 -72 rrcurveto +178 -414 rlineto +94 0 rlineto +150 716 rlineto +-93 0 rlineto +-88 -421 rlineto +-14 -64 -11 -63 -9 -60 rrcurveto +-42 143 -28 66 -60 130 rrcurveto +-120 269 rlineto +-93 0 rlineto +-150 -716 rlineto +closepath +274 758 rmoveto +61 0 rlineto +5 29 15 13 20 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/Odieresis { +0 778 hsbw +-12 79 hstem +648 80 hstem +760 100 hstem +91 95 vstem +334 92 vstem +514 92 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +148 465 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Udieresis { +0 722 hsbw +-13 80 hstem +696 20 hstem +760 100 hstem +97 94 vstem +198 96 vstem +343 93 vstem +544 92 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +145 44 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/aacute { +0 556 hsbw +-12 69 hstem +458 72 hstem +696 20 hstem +44 88 vstem +271 73 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-145 319 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/agrave { +0 556 hsbw +-12 69 hstem +458 72 hstem +582 134 hstem +44 88 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-42 319 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/acircumflex { +0 556 hsbw +-12 69 hstem +458 72 hstem +668 48 hstem +44 88 vstem +211 91 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-205 319 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/adieresis { +0 556 hsbw +-12 69 hstem +458 72 hstem +599 100 hstem +44 88 vstem +218 92 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-198 336 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/atilde { +0 556 hsbw +-12 69 hstem +458 72 hstem +639 68 hstem +44 88 vstem +210 61 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-206 334 rmoveto +61 0 rlineto +6 29 13 13 22 0 rrcurveto +10 0 27 -10 46 -20 rrcurveto +19 -8 17 -4 13 0 rrcurveto +48 0 42 39 7 68 rrcurveto +-60 0 rlineto +-7 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -27 12 rrcurveto +-39 16 -17 9 -28 0 rrcurveto +-48 0 -30 -24 -22 -86 rrcurveto +closepath +endchar } ND +/aring { +0 556 hsbw +-12 69 hstem +458 72 hstem +556 36 hstem +697 36 hstem +44 88 vstem +266 37 vstem +408 36 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-150 382 rmoveto +0 -51 39 -38 50 0 rrcurveto +49 0 40 38 0 51 rrcurveto +0 48 -40 40 -49 0 rrcurveto +-50 0 -39 -39 0 -49 rrcurveto +closepath +37 0 rmoveto +0 28 22 24 30 0 rrcurveto +29 0 24 -24 0 -28 rrcurveto +0 -30 -24 -23 -29 0 rrcurveto +-30 0 -22 23 0 30 rrcurveto +closepath +endchar } ND +/ccedilla { +0 500 hsbw +-199 59 hstem +-12 27 hstem +458 72 hstem +56 90 vstem +252 85 vstem +391 189 rmoveto +-30 -90 -57 -42 -57 0 rrcurveto +-58 0 -43 44 0 88 rrcurveto +0 110 48 159 127 0 rrcurveto +61 0 40 -40 2 -65 rrcurveto +87 5 rlineto +0 104 -71 68 -110 0 rrcurveto +-171 0 -103 -176 0 -158 rrcurveto +0 -131 76 -77 114 0 rrcurveto +104 0 85 62 44 130 rrcurveto +-88 9 rlineto +closepath +-219 -253 rmoveto +42 0 38 -5 0 -36 rrcurveto +0 -17 -17 -18 -66 0 rrcurveto +-71 0 rlineto +-11 -53 rlineto +24 -4 27 -2 32 0 rrcurveto +90 0 77 16 0 71 rrcurveto +0 39 -31 36 -57 8 rrcurveto +12 44 rlineto +-69 0 rlineto +-20 -79 rlineto +closepath +endchar } ND +/eacute { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +696 20 hstem +52 89 vstem +279 74 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +122 277 rmoveto +74 0 rlineto +129 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/egrave { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +582 134 hstem +52 89 vstem +375 68 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +218 277 rmoveto +68 0 rlineto +-56 134 rlineto +-108 0 rlineto +96 -134 rlineto +closepath +endchar } ND +/ecircumflex { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +668 48 hstem +52 89 vstem +217 91 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +60 277 rmoveto +91 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/edieresis { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +599 100 hstem +52 89 vstem +218 93 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +61 294 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/iacute { +0 278 hsbw +0 20 hstem +499 20 hstem +696 20 hstem +146 73 vstem +238 111 vstem +61 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +85 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/igrave { +0 278 hsbw +0 20 hstem +499 20 hstem +582 134 hstem +61 88 vstem +241 69 vstem +61 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +180 582 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/icircumflex { +0 278 hsbw +0 20 hstem +499 20 hstem +668 48 hstem +61 88 vstem +169 89 vstem +294 78 vstem +61 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +23 582 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/idieresis { +0 278 hsbw +0 20 hstem +499 20 hstem +599 100 hstem +61 88 vstem +169 89 vstem +265 92 vstem +61 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +24 599 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/ntilde { +0 556 hsbw +0 20 hstem +458 72 hstem +638 68 hstem +33 89 vstem +202 61 vstem +440 88 vstem +33 0 rmoveto +89 0 rlineto +50 241 rlineto +33 158 75 59 91 0 rrcurveto +44 0 25 -25 0 -34 rrcurveto +0 -16 -4 -23 -6 -31 rrcurveto +-69 -329 rlineto +88 0 rlineto +66 314 rlineto +8 41 5 30 0 20 rrcurveto +0 76 -51 49 -84 0 rrcurveto +-63 0 -58 -32 -69 -70 rrcurveto +19 91 rlineto +-80 0 rlineto +-109 -519 rlineto +closepath +169 597 rmoveto +61 0 rlineto +6 28 13 13 22 0 rrcurveto +10 0 28 -9 45 -20 rrcurveto +20 -9 16 -4 13 0 rrcurveto +48 0 41 40 7 67 rrcurveto +-59 0 rlineto +-8 -30 -11 -8 -16 0 rrcurveto +-10 0 -17 5 -25 11 rrcurveto +-39 17 -17 8 -29 0 rrcurveto +-47 0 -31 -23 -21 -86 rrcurveto +closepath +endchar } ND +/oacute { +0 556 hsbw +-12 69 hstem +462 68 hstem +696 20 hstem +48 89 262 65 453 87 vstem3 +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +125 376 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/ograve { +0 556 hsbw +-12 69 hstem +462 68 hstem +582 134 hstem +49 88 vstem +376 69 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +239 376 rmoveto +69 0 rlineto +-56 134 rlineto +-108 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/ocircumflex { +0 556 hsbw +-12 69 hstem +462 68 hstem +668 48 hstem +49 88 vstem +202 90 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +65 376 rmoveto +90 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/odieresis { +0 556 hsbw +-12 69 hstem +462 68 hstem +599 100 hstem +49 88 vstem +208 93 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +71 393 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +181 0 rmoveto +92 0 rlineto +20 100 rlineto +-91 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/otilde { +0 556 hsbw +-12 69 hstem +462 68 hstem +638 68 hstem +49 88 vstem +189 61 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +52 391 rmoveto +61 0 rlineto +6 28 13 13 22 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 13 0 rrcurveto +48 0 42 40 7 67 rrcurveto +-60 0 rlineto +-7 -30 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -27 11 rrcurveto +-39 16 -17 9 -28 0 rrcurveto +-48 0 -30 -23 -22 -86 rrcurveto +closepath +endchar } ND +/uacute { +0 556 hsbw +-12 73 hstem +499 20 hstem +696 20 hstem +63 89 vstem +286 73 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-101 488 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +endchar } ND +/ugrave { +0 556 hsbw +-12 73 hstem +499 20 hstem +582 134 hstem +63 89 vstem +377 69 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-10 488 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/ucircumflex { +0 556 hsbw +-12 73 hstem +499 20 hstem +668 48 hstem +63 89 vstem +208 91 vstem +418 78 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-179 488 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/udieresis { +0 556 hsbw +-12 73 hstem +499 20 hstem +599 100 hstem +63 89 vstem +221 92 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-166 505 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/dagger { +0 556 hsbw +424 282 hstem +162 88 vstem +345 88 vstem +162 -170 rmoveto +88 0 rlineto +125 594 rlineto +193 0 rlineto +15 74 rlineto +-193 0 rlineto +43 208 rlineto +-88 0 rlineto +-44 -208 rlineto +-195 0 rlineto +-15 -74 rlineto +195 0 rlineto +-124 -594 rlineto +closepath +endchar } ND +/degree { +0 400 hsbw +457 53 hstem +675 53 hstem +63 53 vstem +280 53 vstem +63 593 rmoveto +0 -76 60 -60 75 0 rrcurveto +74 0 61 61 0 75 rrcurveto +0 74 -61 61 -74 0 rrcurveto +-75 0 -60 -61 0 -74 rrcurveto +closepath +53 0 rmoveto +0 45 36 37 46 0 rrcurveto +45 0 37 -37 0 -45 rrcurveto +0 -46 -37 -37 -45 0 rrcurveto +-46 0 -36 37 0 46 rrcurveto +closepath +endchar } ND +/cent { +0 556 hsbw +-199 20 hstem +-12 69 hstem +458 72 hstem +706 20 hstem +75 90 vstem +165 13 rmoveto +-79 -189 rlineto +53 -23 rlineto +80 192 rlineto +15 -3 15 -2 16 0 rrcurveto +104 0 84 62 46 130 rrcurveto +-89 9 rlineto +-30 -90 -57 -42 -57 0 rrcurveto +-20 0 rlineto +157 382 rlineto +28 -20 10 -25 2 -41 rrcurveto +87 5 rlineto +0 77 -35 52 -61 27 rrcurveto +78 190 rlineto +-52 22 rlineto +-82 -196 rlineto +-29 0 rlineto +-172 0 -102 -176 0 -158 rrcurveto +0 -87 30 -61 60 -35 rrcurveto +closepath +31 75 rmoveto +-21 22 -10 35 0 46 rrcurveto +0 106 51 161 125 0 rrcurveto +8 0 rlineto +-153 -370 rlineto +closepath +endchar } ND +/sterling { +0 556 hsbw +-12 85 hstem +318 74 hstem +657 71 hstem +183 84 vstem +42 -12 rmoveto +58 37 39 11 55 0 rrcurveto +38 0 32 -8 40 -17 rrcurveto +42 -18 20 -5 31 0 rrcurveto +38 0 43 12 50 24 rrcurveto +-27 80 rlineto +-35 -21 -36 -10 -36 0 rrcurveto +-18 0 -23 4 -26 9 rrcurveto +-52 18 -20 3 -53 0 rrcurveto +-8 0 -13 -1 -17 -2 rrcurveto +76 56 27 69 0 67 rrcurveto +0 22 rlineto +123 0 rlineto +15 74 rlineto +-141 0 rlineto +-7 40 -3 31 0 24 rrcurveto +0 105 65 65 80 0 rrcurveto +69 0 49 -45 10 -82 rrcurveto +80 8 rlineto +-14 128 -87 62 -106 0 rrcurveto +-135 0 -101 -98 0 -128 rrcurveto +0 -30 2 -36 6 -44 rrcurveto +-84 0 rlineto +-15 -74 rlineto +110 0 rlineto +0 -22 rlineto +0 -70 -71 -100 -81 -52 rrcurveto +11 -86 rlineto +closepath +endchar } ND +/section { +0 556 hsbw +-210 65 hstem +657 71 hstem +75 80 vstem +175 84 vstem +357 84 vstem +446 83 vstem +30 -44 rmoveto +22 -102 80 -64 114 0 rrcurveto +120 0 75 74 0 84 rrcurveto +0 39 -16 37 -32 36 rrcurveto +92 42 44 62 0 63 rrcurveto +0 58 -21 29 -140 112 rrcurveto +-96 77 -13 33 0 34 rrcurveto +0 46 41 41 60 0 rrcurveto +66 0 39 -39 2 -66 rrcurveto +88 11 rlineto +-18 116 -59 49 -113 0 rrcurveto +-120 0 -70 -69 0 -92 rrcurveto +0 -34 13 -33 26 -31 rrcurveto +-102 -51 -37 -51 0 -70 rrcurveto +0 -72 36 -33 78 -62 rrcurveto +111 -89 57 -16 0 -77 rrcurveto +0 -48 -46 -45 -64 0 rrcurveto +-67 0 -53 44 -16 78 rrcurveto +-81 -21 rlineto +closepath +319 150 rmoveto +-113 91 rlineto +-53 41 -28 21 0 48 rrcurveto +0 44 31 39 64 36 rrcurveto +22 -25 38 -35 55 -45 rrcurveto +81 -66 0 -11 0 -28 rrcurveto +0 -36 -28 -42 -69 -32 rrcurveto +closepath +endchar } ND +/bullet { +0 350 hsbw +227 247 hstem +53 248 vstem +53 351 rmoveto +0 -70 56 -54 68 0 rrcurveto +68 0 56 54 0 70 rrcurveto +0 68 -56 55 -68 0 rrcurveto +-68 0 -56 -55 0 -68 rrcurveto +closepath +endchar } ND +/paragraph { +0 537 hsbw +-199 20 hstem +631 85 hstem +267 80 vstem +456 83 vstem +267 -199 rmoveto +80 0 rlineto +0 830 rlineto +109 0 rlineto +0 -830 rlineto +83 0 rlineto +0 830 rlineto +70 0 rlineto +0 85 rlineto +-309 0 rlineto +-151 0 -80 -81 0 -125 rrcurveto +0 -114 75 -79 123 -5 rrcurveto +0 -511 rlineto +closepath +endchar } ND +/germandbls { +0 611 hsbw +-12 72 hstem +660 68 hstem +36 89 vstem +337 91 vstem +461 88 vstem +36 0 rmoveto +89 0 rlineto +103 494 rlineto +23 130 57 36 78 0 rrcurveto +45 0 30 -27 0 -29 rrcurveto +0 -22 -16 -30 -31 -39 rrcurveto +-49 -61 -28 -39 0 -44 rrcurveto +0 -27 8 -21 57 -57 rrcurveto +78 -78 -2 -4 0 -21 rrcurveto +0 -50 -52 -51 -53 0 rrcurveto +-34 0 -31 19 -33 64 rrcurveto +-74 -40 rlineto +46 -77 58 -38 69 0 rrcurveto +92 0 101 82 0 88 rrcurveto +0 40 -5 19 -80 82 rrcurveto +-55 56 1 5 0 19 rrcurveto +0 32 21 24 36 46 rrcurveto +39 50 25 40 0 42 rrcurveto +0 56 -63 59 -97 0 rrcurveto +-126 0 -91 -71 -30 -153 rrcurveto +-106 -504 rlineto +closepath +endchar } ND +/registered { +0 737 hsbw +-9 61 hstem +324 55 hstem +499 53 hstem +667 61 hstem +1 62 vstem +208 64 vstem +446 68 vstem +677 61 vstem +370 728 rmoveto +-190 0 -179 -178 0 -191 rrcurveto +0 -194 177 -174 192 0 rrcurveto +193 0 175 176 0 192 rrcurveto +0 191 -178 178 -190 0 rrcurveto +closepath +0 -61 rmoveto +155 0 152 -149 0 -159 rrcurveto +0 -160 -148 -147 -159 0 rrcurveto +-160 0 -147 147 0 160 rrcurveto +0 158 149 150 158 0 rrcurveto +closepath +-162 -511 rmoveto +64 0 rlineto +0 168 rlineto +38 0 rlineto +69 0 9 -34 40 -72 rrcurveto +35 -62 rlineto +79 0 rlineto +-49 77 rlineto +-34 51 -10 29 -48 20 rrcurveto +68 5 45 48 0 59 rrcurveto +0 72 -67 35 -102 0 rrcurveto +-137 0 rlineto +0 -396 rlineto +closepath +64 223 rmoveto +0 120 rlineto +73 0 rlineto +63 0 38 -13 0 -47 rrcurveto +0 -36 -22 -24 -74 0 rrcurveto +-78 0 rlineto +closepath +endchar } ND +/copyright { +0 737 hsbw +-9 61 hstem +148 58 hstem +512 54 hstem +667 61 hstem +1 62 vstem +177 67 vstem +677 61 vstem +370 728 rmoveto +-190 0 -179 -178 0 -191 rrcurveto +0 -194 177 -174 192 0 rrcurveto +193 0 175 176 0 192 rrcurveto +0 191 -178 178 -190 0 rrcurveto +closepath +0 -61 rmoveto +155 0 152 -149 0 -159 rrcurveto +0 -160 -148 -147 -159 0 rrcurveto +-160 0 -147 147 0 160 rrcurveto +0 158 149 150 158 0 rrcurveto +closepath +118 -367 rmoveto +-14 -59 -49 -35 -58 0 rrcurveto +-72 0 -51 51 0 100 rrcurveto +0 100 53 55 76 0 rrcurveto +50 0 40 -27 20 -48 rrcurveto +58 14 rlineto +-22 70 -59 45 -85 0 rrcurveto +-121 0 -77 -87 0 -121 rrcurveto +0 -131 79 -79 115 0 rrcurveto +89 0 69 52 19 82 rrcurveto +-60 18 rlineto +closepath +endchar } ND +/trademark { +0 1000 hsbw +318 80 hstem +657 59 hstem +239 66 vstem +478 63 647 56 810 61 vstem3 +239 318 rmoveto +66 0 rlineto +0 339 rlineto +130 0 rlineto +0 59 rlineto +-325 0 rlineto +0 -59 rlineto +129 0 rlineto +0 -339 rlineto +closepath +240 0 rmoveto +62 0 rlineto +0 339 rlineto +106 -339 rlineto +61 0 rlineto +102 334 rlineto +0 -334 rlineto +61 0 rlineto +0 398 rlineto +-96 0 rlineto +-97 -318 rlineto +-101 318 rlineto +-98 0 rlineto +0 -398 rlineto +closepath +endchar } ND +/acute { +0 333 hsbw +696 20 hstem +169 73 vstem +261 111 vstem +169 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/dieresis { +0 333 hsbw +599 100 hstem +116 92 vstem +296 92 vstem +116 599 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/notequal { +0 549 hsbw +-14 300 hstem +421 299 hstem +271 240 vstem +242 204 rmoveto +269 0 rlineto +0 82 rlineto +-233 0 rlineto +59 135 rlineto +174 0 rlineto +0 82 rlineto +-138 0 rlineto +95 217 rlineto +-65 0 rlineto +-96 -217 rlineto +-269 0 rlineto +0 -82 rlineto +233 0 rlineto +-59 -135 rlineto +-174 0 rlineto +0 -82 rlineto +138 0 rlineto +-95 -218 rlineto +66 0 rlineto +95 218 rlineto +closepath +endchar } ND +/AE { +0 1000 hsbw +0 81 hstem +204 81 hstem +331 81 hstem +634 82 hstem +-41 109 vstem +557 100 vstem +-41 0 rmoveto +109 0 rlineto +122 204 rlineto +277 0 rlineto +-43 -204 rlineto +513 0 rlineto +17 81 rlineto +-412 0 rlineto +52 250 rlineto +373 0 rlineto +17 81 rlineto +-373 0 rlineto +46 222 rlineto +369 0 rlineto +17 82 rlineto +-643 0 rlineto +-441 -716 rlineto +closepath +281 285 rmoveto +214 349 rlineto +103 0 rlineto +-74 -349 rlineto +-243 0 rlineto +closepath +endchar } ND +/Oslash { +0 778 hsbw +-12 79 hstem +648 80 hstem +91 94 vstem +677 95 vstem +167 85 rmoveto +-82 -97 rlineto +46 -38 rlineto +79 95 rlineto +52 -38 60 -19 69 0 rrcurveto +211 0 170 200 0 217 rrcurveto +0 93 -25 75 -50 58 rrcurveto +79 95 rlineto +-43 39 rlineto +-78 -94 rlineto +-51 38 -62 19 -74 0 rrcurveto +-218 0 -159 -203 0 -212 rrcurveto +0 -92 25 -76 51 -60 rrcurveto +closepath +59 71 rmoveto +-28 40 -13 50 0 61 rrcurveto +0 169 126 172 160 0 rrcurveto +47 0 42 -15 38 -30 rrcurveto +-372 -447 rlineto +closepath +412 403 rmoveto +26 -42 13 -48 0 -54 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-48 0 -44 15 -39 31 rrcurveto +371 446 rlineto +closepath +endchar } ND +/infinity { +0 713 hsbw +189 55 hstem +303 93 hstem +426 54 hstem +75 54 vstem +303 67 vstem +585 55 vstem +336 396 rmoveto +-44 56 -47 28 -50 0 rrcurveto +-66 0 -54 -57 0 -73 rrcurveto +0 -75 54 -56 66 0 rrcurveto +50 0 47 28 44 56 rrcurveto +58 -77 38 -37 67 0 rrcurveto +77 0 64 63 0 101 rrcurveto +0 110 -73 47 -68 0 rrcurveto +-68 0 -35 -39 -60 -75 rrcurveto +closepath +34 -46 rmoveto +48 66 22 39 56 0 rrcurveto +50 0 39 -38 0 -69 rrcurveto +0 -67 -38 -37 -49 0 rrcurveto +-62 0 -26 43 -40 63 rrcurveto +closepath +-67 0 rmoveto +-38 -50 -36 -25 -33 0 rrcurveto +-38 0 -29 29 0 47 rrcurveto +0 46 28 29 38 0 rrcurveto +29 0 27 -12 52 -64 rrcurveto +closepath +endchar } ND +/plusminus { +0 549 hsbw +0 82 hstem +324 81 hstem +233 83 vstem +233 127 rmoveto +83 0 rlineto +0 197 rlineto +195 0 rlineto +0 81 rlineto +-195 0 rlineto +0 195 rlineto +-83 0 rlineto +0 -195 rlineto +-195 0 rlineto +0 -81 rlineto +195 0 rlineto +0 -197 rlineto +closepath +278 -127 rmoveto +0 82 rlineto +-473 0 rlineto +0 -82 rlineto +473 0 rlineto +closepath +endchar } ND +/lessequal { +0 549 hsbw +52 81 hstem +169 88 372 79 566 88 hstem3 +38 98 vstem +38 372 rmoveto +474 -203 rlineto +0 88 rlineto +-376 156 rlineto +376 153 rlineto +0 88 rlineto +-474 -200 rlineto +0 -82 rlineto +closepath +473 -320 rmoveto +0 81 rlineto +-473 0 rlineto +0 -81 rlineto +473 0 rlineto +closepath +endchar } ND +/greaterequal { +0 549 hsbw +52 81 hstem +169 88 372 79 566 88 hstem3 +413 99 vstem +512 372 rmoveto +0 82 rlineto +-474 200 rlineto +0 -88 rlineto +375 -153 rlineto +-375 -156 rlineto +0 -88 rlineto +474 203 rlineto +closepath +-1 -320 rmoveto +0 81 rlineto +-473 0 rlineto +0 -81 rlineto +473 0 rlineto +closepath +endchar } ND +/yen { +0 556 hsbw +0 227 hstem +299 417 hstem +114 89 vstem +248 155 vstem +558 109 vstem +203 0 rmoveto +89 0 rlineto +33 160 rlineto +198 0 rlineto +14 67 rlineto +-198 0 rlineto +15 72 rlineto +198 0 rlineto +14 67 rlineto +-163 0 rlineto +264 350 rlineto +-109 0 rlineto +-171 -235 rlineto +-29 -40 -21 -34 -13 -30 rrcurveto +-2 9 -3 10 -4 11 rrcurveto +-4 9 -4 12 -3 14 rrcurveto +-3 6 -15 40 -26 74 rrcurveto +-57 154 rlineto +-89 0 rlineto +134 -350 rlineto +-168 0 rlineto +-14 -67 rlineto +200 0 rlineto +-16 -72 rlineto +-199 0 rlineto +-14 -67 rlineto +199 0 rlineto +-33 -160 rlineto +closepath +endchar } ND +/mu1 { +0 576 hsbw +-200 20 hstem +-12 74 hstem +499 20 hstem +6 87 vstem +158 87 vstem +383 78 vstem +484 88 vstem +158 519 rmoveto +-152 -719 rlineto +87 0 rlineto +53 249 rlineto +33 -43 35 -18 48 0 rrcurveto +42 0 43 17 45 36 rrcurveto +-9 -41 rlineto +78 0 rlineto +111 519 rlineto +-88 0 rlineto +-58 -280 rlineto +-27 -120 -37 -57 -91 0 rrcurveto +-60 0 -37 36 0 52 rrcurveto +0 24 6 41 13 60 rrcurveto +52 244 rlineto +-87 0 rlineto +closepath +endchar } ND +/partialdiff { +0 494 hsbw +-12 67 hstem +666 62 hstem +25 88 vstem +417 56 vstem +206 556 rmoveto +30 81 41 29 40 0 rrcurveto +88 0 9 -102 3 -113 rrcurveto +-238 -5 -154 -94 0 -195 rrcurveto +0 -107 61 -62 90 0 rrcurveto +182 0 115 241 0 223 rrcurveto +0 147 -28 129 -129 0 rrcurveto +-62 0 -69 -41 -45 -102 rrcurveto +66 -29 rlineto +closepath +209 -167 rmoveto +-20 -192 -75 -142 -124 0 rrcurveto +-44 0 -39 38 0 55 rrcurveto +0 135 109 95 193 11 rrcurveto +closepath +endchar } ND +/summation { +0 713 hsbw +-210 78 hstem +648 80 hstem +60 109 vstem +68 728 rmoveto +0 -85 rlineto +294 -377 rlineto +-302 -385 rlineto +0 -91 rlineto +617 0 rlineto +0 78 rlineto +-508 0 rlineto +317 402 rlineto +-297 378 rlineto +483 0 rlineto +0 80 rlineto +-604 0 rlineto +closepath +endchar } ND +/product { +0 823 hsbw +-210 20 hstem +643 85 hstem +79 94 vstem +650 94 vstem +79 728 rmoveto +0 -938 rlineto +94 0 rlineto +0 853 rlineto +477 0 rlineto +0 -853 rlineto +94 0 rlineto +0 938 rlineto +-665 0 rlineto +closepath +endchar } ND +/pi1 { +0 549 hsbw +0 20 hstem +446 73 hstem +0 100 147 89 284 98 vstem3 +420 99 vstem +62 446 rmoveto +76 0 rlineto +-138 -446 rlineto +99 0 rlineto +137 446 rlineto +184 0 rlineto +-136 -446 rlineto +98 0 rlineto +137 446 rlineto +59 0 rlineto +23 73 rlineto +-518 0 rlineto +-21 -73 rlineto +closepath +endchar } ND +/integral { +0 274 hsbw +-107 76 hstem +834 76 hstem +98 77 vstem +98 463 rmoveto +0 -168 6 -136 12 -102 rrcurveto +3 -26 2 -19 0 -13 rrcurveto +0 -22 -9 -8 -10 0 rrcurveto +-7 0 -9 7 -9 9 rrcurveto +-9 7 -11 8 -13 0 rrcurveto +-26 0 -18 -18 0 -30 rrcurveto +0 -34 23 -25 35 0 rrcurveto +95 0 11 96 3 131 rrcurveto +2 87 3 69 3 43 rrcurveto +0 88 rlineto +0 83 -6 108 -12 134 rrcurveto +-4 33 -1 24 0 14 rrcurveto +0 22 9 9 11 0 rrcurveto +5 0 6 -4 8 -6 rrcurveto +13 -12 13 -5 12 0 rrcurveto +25 0 19 19 0 31 rrcurveto +0 26 -28 27 -33 0 rrcurveto +-65 0 -35 -95 -6 -93 rrcurveto +-8 -259 rlineto +closepath +endchar } ND +/ordfeminine { +0 370 hsbw +359 59 hstem +669 59 hstem +82 69 vstem +340 69 vstem +305 402 rmoveto +2 -14 2 -11 2 -7 rrcurveto +67 0 rlineto +-6 12 -3 16 0 19 rrcurveto +0 18 4 26 10 35 rrcurveto +18 63 8 46 0 26 rrcurveto +0 53 -46 44 -89 0 rrcurveto +-80 0 -49 -40 -30 -66 rrcurveto +69 -12 rlineto +16 40 35 19 38 0 rrcurveto +42 0 25 -23 0 -28 rrcurveto +0 -25 -47 -14 -44 -3 rrcurveto +-103 -7 -64 -32 0 -78 rrcurveto +0 -56 42 -44 67 0 rrcurveto +42 0 46 20 26 23 rrcurveto +closepath +15 129 rmoveto +-18 -78 -44 -35 -53 0 rrcurveto +-32 0 -22 20 0 27 rrcurveto +0 36 43 10 45 7 rrcurveto +32 3 31 5 18 5 rrcurveto +closepath +endchar } ND +/ordmasculine { +0 365 hsbw +360 64 hstem +664 64 hstem +70 72 vstem +339 73 vstem +70 521 rmoveto +0 -103 63 -58 95 0 rrcurveto +116 0 68 117 0 99 rrcurveto +0 89 -63 63 -90 0 rrcurveto +-112 0 -77 -118 0 -89 rrcurveto +closepath +72 3 rmoveto +0 52 54 88 63 0 rrcurveto +45 0 35 -36 0 -52 rrcurveto +0 -69 -54 -83 -65 0 rrcurveto +-50 0 -28 37 0 63 rrcurveto +closepath +endchar } ND +/Ohm { +0 768 hsbw +0 81 hstem +654 80 hstem +73 104 vstem +242 102 vstem +439 103 vstem +609 101 vstem +242 82 rmoveto +-180 0 rlineto +0 -82 rlineto +282 0 rlineto +0 88 rlineto +-104 46 -63 105 0 142 rrcurveto +0 148 64 125 152 0 rrcurveto +143 0 73 -148 0 -127 rrcurveto +0 -124 -42 -105 -128 -64 rrcurveto +0 -86 rlineto +281 0 rlineto +0 81 rlineto +-178 0 rlineto +123 79 45 85 0 146 rrcurveto +0 191 -119 152 -196 0 rrcurveto +-191 0 -131 -158 0 -184 rrcurveto +0 -141 33 -91 136 -78 rrcurveto +closepath +endchar } ND +/ae { +0 889 hsbw +-12 69 hstem +237 68 hstem +462 69 hstem +42 91 vstem +783 82 vstem +747 175 rmoveto +-39 -78 -57 -36 -58 0 rrcurveto +-67 0 -47 48 0 99 rrcurveto +0 29 rlineto +379 0 rlineto +4 32 3 25 0 20 rrcurveto +0 115 -84 101 -120 0 rrcurveto +-68 0 -57 -24 -45 -47 rrcurveto +-38 48 -54 24 -70 0 rrcurveto +-122 0 -80 -59 -34 -100 rrcurveto +88 -8 rlineto +25 66 46 32 75 0 rrcurveto +61 0 32 -31 0 -48 rrcurveto +0 -50 -57 -20 -70 -8 rrcurveto +-141 -12 -110 -34 0 -120 rrcurveto +0 -91 59 -60 106 0 rrcurveto +72 0 74 34 52 82 rrcurveto +42 -80 69 -36 75 0 rrcurveto +108 0 81 61 56 118 rrcurveto +-89 8 rlineto +closepath +-249 130 rmoveto +26 97 74 60 68 0 rrcurveto +66 0 51 -64 0 -72 rrcurveto +0 -21 rlineto +-285 0 rlineto +closepath +-103 -49 rmoveto +-20 -114 -48 -85 -99 0 rrcurveto +-62 0 -33 35 0 52 rrcurveto +0 68 43 17 93 8 rrcurveto +49 4 42 7 35 8 rrcurveto +closepath +endchar } ND +/oslash { +0 611 hsbw +-12 69 hstem +462 68 hstem +79 88 vstem +482 87 vstem +482 497 rmoveto +-35 22 -40 11 -46 0 rrcurveto +-169 0 -113 -166 0 -161 rrcurveto +0 -62 16 -49 33 -38 rrcurveto +-56 -70 rlineto +44 -34 rlineto +55 69 rlineto +35 -20 40 -11 45 0 rrcurveto +153 0 125 160 0 163 rrcurveto +0 60 -15 50 -30 38 rrcurveto +57 72 rlineto +-44 35 rlineto +-55 -69 rlineto +closepath +-49 -60 rmoveto +-250 -314 rlineto +-11 21 -5 27 0 33 rrcurveto +0 114 74 144 117 0 rrcurveto +28 0 25 -9 22 -16 rrcurveto +closepath +-214 -358 rmoveto +249 310 rlineto +9 -23 5 -25 0 -27 rrcurveto +0 -106 -71 -151 -119 0 rrcurveto +-28 0 -24 7 -21 15 rrcurveto +closepath +endchar } ND +/questiondown { +0 611 hsbw +-209 70 hstem +418 101 hstem +57 87 vstem +324 84 vstem +451 519 rmoveto +-100 0 rlineto +-21 -101 rlineto +100 0 rlineto +21 101 rlineto +closepath +-43 -180 rmoveto +-84 0 rlineto +-11 -64 -15 -26 -85 -68 rrcurveto +-104 -84 -52 -42 0 -89 rrcurveto +0 -100 100 -75 105 0 rrcurveto +116 0 84 68 28 140 rrcurveto +-88 14 rlineto +-16 -109 -52 -43 -74 0 rrcurveto +-68 0 -48 46 0 52 rrcurveto +0 57 38 40 71 57 rrcurveto +110 88 34 39 11 99 rrcurveto +closepath +endchar } ND +/exclamdown { +0 333 hsbw +-197 20 hstem +418 101 hstem +30 108 vstem +167 55 vstem +278 519 rmoveto +-100 0 rlineto +-21 -101 rlineto +100 0 rlineto +21 101 rlineto +closepath +-56 -181 rmoveto +-55 0 rlineto +-104 -377 rlineto +-33 -158 rlineto +108 0 rlineto +30 146 rlineto +54 389 rlineto +closepath +endchar } ND +/logicalnot { +0 584 hsbw +421 82 hstem +445 83 vstem +528 207 rmoveto +0 296 rlineto +-472 0 rlineto +0 -82 rlineto +389 0 rlineto +0 -214 rlineto +83 0 rlineto +closepath +endchar } ND +/radical { +0 549 hsbw +501 20 hstem +514 36 vstem +514 913 rmoveto +-127 -794 rlineto +-198 402 rlineto +-147 -74 rlineto +17 -31 rlineto +97 44 rlineto +242 -498 rlineto +152 951 rlineto +-36 0 rlineto +closepath +endchar } ND +/florin { +0 556 hsbw +-210 77 hstem +450 69 hstem +647 82 hstem +263 89 vstem +22 -198 rmoveto +42 -8 37 -4 31 0 rrcurveto +73 0 36 31 18 96 rrcurveto +93 533 rlineto +100 0 rlineto +12 69 rlineto +-100 0 rlineto +10 50 rlineto +12 68 14 10 38 0 rrcurveto +16 0 25 -4 34 -8 rrcurveto +17 75 rlineto +-44 12 -35 7 -26 0 rrcurveto +-99 0 -21 -41 -19 -105 rrcurveto +-12 -64 rlineto +-98 0 rlineto +-11 -69 rlineto +98 0 rlineto +-87 -509 rlineto +-11 -61 -17 -13 -34 0 rrcurveto +-17 0 -25 4 -32 7 rrcurveto +-18 -76 rlineto +closepath +endchar } ND +/approxequal { +0 549 hsbw +185 92 hstem +417 104 hstem +25 499 vstem +25 360 rmoveto +54 53 31 14 42 0 rrcurveto +26 0 33 -8 38 -18 rrcurveto +61 -29 28 -11 51 0 rrcurveto +53 0 40 17 42 39 rrcurveto +0 104 rlineto +-35 -39 -49 -28 -42 0 rrcurveto +-23 0 -15 4 -46 19 rrcurveto +-80 33 -35 9 -38 0 rrcurveto +-56 0 -46 -20 -34 -39 rrcurveto +0 -100 rlineto +closepath +0 -176 rmoveto +54 52 31 14 42 0 rrcurveto +26 0 33 -8 38 -18 rrcurveto +61 -29 28 -10 51 0 rrcurveto +53 0 40 16 42 39 rrcurveto +0 104 rlineto +-35 -39 -49 -28 -42 0 rrcurveto +-23 0 -16 4 -45 19 rrcurveto +-80 34 -35 8 -38 0 rrcurveto +-56 0 -46 -20 -34 -38 rrcurveto +0 -100 rlineto +closepath +endchar } ND +/increment { +0 612 hsbw +0 40 hstem +14 586 vstem +600 0 rmoveto +-279 677 rlineto +-307 -677 rlineto +586 0 rlineto +closepath +-115 40 rmoveto +-410 0 rlineto +215 472 rlineto +195 -472 rlineto +closepath +endchar } ND +/guillemotleft { +0 556 hsbw +182 67 274 70 369 67 vstem3 +461 76 vstem +171 257 rmoveto +173 222 rlineto +-70 0 rlineto +-195 -211 rlineto +103 -233 rlineto +67 0 rlineto +-78 222 rlineto +closepath +193 0 rmoveto +173 222 rlineto +-76 0 rlineto +-189 -210 rlineto +97 -234 rlineto +71 0 rlineto +-76 222 rlineto +closepath +endchar } ND +/guillemotright { +0 556 hsbw +41 79 vstem +147 71 vstem +236 70 vstem +338 66 vstem +220 254 rmoveto +-179 -219 rlineto +79 0 rlineto +192 208 rlineto +-94 236 rlineto +-71 0 rlineto +73 -225 rlineto +closepath +191 -4 rmoveto +-175 -215 rlineto +70 0 rlineto +199 207 rlineto +-101 237 rlineto +-66 0 rlineto +73 -229 rlineto +closepath +endchar } ND +/ellipsis { +0 1000 hsbw +0 100 hstem +144 99 478 100 813 99 vstem3 +144 0 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +334 0 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +334 0 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Agrave { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +760 135 hstem +-20 105 vstem +483 69 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +242 480 rmoveto +69 0 rlineto +-56 135 rlineto +-108 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/Atilde { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +758 68 hstem +-20 105 vstem +283 63 399 100 554 59 vstem3 +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +42 478 rmoveto +61 0 rlineto +5 29 15 13 20 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/Otilde { +0 778 hsbw +-12 79 hstem +648 80 hstem +758 68 hstem +91 95 vstem +312 61 vstem +583 59 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +126 463 rmoveto +61 0 rlineto +5 29 14 13 22 0 rrcurveto +10 0 27 -10 46 -19 rrcurveto +20 -8 15 -5 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -11 -8 -16 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/OE { +0 1000 hsbw +-13 80 hstem +327 81 hstem +648 80 hstem +80 94 vstem +584 85 vstem +500 53 rmoveto +-12 -53 rlineto +443 0 rlineto +17 81 rlineto +-347 0 rlineto +52 246 rlineto +313 0 rlineto +17 81 rlineto +-314 0 rlineto +48 226 rlineto +310 0 rlineto +17 82 rlineto +-406 0 rlineto +-17 -85 rlineto +-47 62 -65 35 -73 0 rrcurveto +-205 0 -151 -220 0 -219 rrcurveto +0 -196 103 -106 151 0 rrcurveto +72 0 46 22 48 44 rrcurveto +closepath +-326 247 rmoveto +0 136 91 212 164 0 rrcurveto +88 0 67 -68 0 -90 rrcurveto +0 -99 -91 -324 -151 0 rrcurveto +-114 0 -54 88 0 145 rrcurveto +closepath +endchar } ND +/oe { +0 944 hsbw +-12 69 hstem +236 68 hstem +462 68 hstem +62 87 457 68 834 85 vstem3 +471 89 rmoveto +36 -68 64 -33 75 0 rrcurveto +100 0 95 69 48 110 rrcurveto +-92 9 rlineto +-31 -68 -60 -47 -58 0 rrcurveto +-76 0 -39 68 0 74 rrcurveto +0 33 rlineto +377 0 rlineto +6 26 3 26 0 28 rrcurveto +0 130 -83 84 -120 0 rrcurveto +-79 0 -52 -27 -66 -70 rrcurveto +-36 61 -66 36 -80 0 rrcurveto +-166 0 -108 -163 0 -162 rrcurveto +0 -138 78 -79 126 0 rrcurveto +84 0 62 35 58 66 rrcurveto +closepath +-322 120 rmoveto +0 77 69 176 120 0 rrcurveto +80 0 39 -67 0 -72 rrcurveto +0 -110 -78 -156 -111 0 rrcurveto +-71 0 -48 46 0 106 rrcurveto +closepath +400 95 rmoveto +37 108 67 50 64 0 rrcurveto +70 0 47 -48 0 -86 rrcurveto +0 -24 rlineto +-285 0 rlineto +closepath +endchar } ND +/endash { +0 556 hsbw +224 70 hstem +-2 556 vstem +-2 224 rmoveto +556 0 rlineto +0 70 rlineto +-556 0 rlineto +0 -70 rlineto +closepath +endchar } ND +/emdash { +0 1000 hsbw +224 70 hstem +0 1000 vstem +0 224 rmoveto +1000 0 rlineto +0 70 rlineto +-1000 0 rlineto +0 -70 rlineto +closepath +endchar } ND +/quotedblleft { +0 333 hsbw +483 100 hstem +105 101 vstem +261 101 vstem +383 583 rmoveto +-55 0 rlineto +13 60 26 36 38 10 rrcurveto +8 39 rlineto +-63 -7 -49 -46 -21 -104 rrcurveto +-19 -88 rlineto +101 0 rlineto +21 100 rlineto +closepath +-156 0 rmoveto +-55 0 rlineto +13 60 26 36 39 10 rrcurveto +7 39 rlineto +-63 -7 -49 -46 -21 -104 rrcurveto +-19 -88 rlineto +101 0 rlineto +21 100 rlineto +closepath +endchar } ND +/quotedblright { +0 333 hsbw +613 100 hstem +156 100 vstem +317 100 vstem +135 613 rmoveto +54 0 rlineto +-13 -61 -25 -36 -38 -10 rrcurveto +-9 -38 rlineto +64 8 48 43 22 106 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +161 0 rmoveto +55 0 rlineto +-14 -61 -26 -36 -38 -10 rrcurveto +-7 -38 rlineto +62 8 49 43 22 106 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/quoteleft { +0 222 hsbw +483 100 hstem +129 100 vstem +250 583 rmoveto +-54 0 rlineto +13 60 26 36 38 10 rrcurveto +8 39 rlineto +-64 -7 -48 -46 -22 -104 rrcurveto +-18 -88 rlineto +100 0 rlineto +21 100 rlineto +closepath +endchar } ND +/quoteright { +0 222 hsbw +613 100 hstem +176 101 vstem +155 613 rmoveto +55 0 rlineto +-13 -61 -26 -36 -38 -10 rrcurveto +-8 -38 rlineto +62 8 49 43 23 106 rrcurveto +18 88 rlineto +-101 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/divide { +0 549 hsbw +156 100 312 82 450 100 hstem3 +224 100 vstem +224 450 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +287 -138 rmoveto +0 82 rlineto +-473 0 rlineto +0 -82 rlineto +473 0 rlineto +closepath +-287 -156 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/lozenge { +0 494 hsbw +0 46 hstem +647 47 hstem +23 53 vstem +214 54 vstem +417 55 vstem +268 694 rmoveto +-54 0 rlineto +-191 -348 rlineto +191 -346 rlineto +54 0 rlineto +204 346 rlineto +-204 348 rlineto +closepath +-26 -47 rmoveto +175 -301 rlineto +-175 -300 rlineto +-166 300 rlineto +166 301 rlineto +closepath +endchar } ND +/ydieresis { +0 500 hsbw +-210 85 hstem +499 20 hstem +599 100 hstem +91 87 vstem +199 93 vstem +400 92 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +199 799 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ydieresis { +0 667 hsbw +0 20 hstem +696 20 hstem +758 100 hstem +117 102 vstem +311 92 vstem +491 92 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +32 758 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/fraction { +0 167 hsbw +708 20 hstem +-262 79 vstem +420 85 vstem +-262 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +endchar } ND +/Euro { +0 556 hsbw +-12 79 hstem +261 66 hstem +391 66 hstem +649 79 hstem +92 95 vstem +374 -12 rmoveto +42 0 40 8 38 15 rrcurveto +22 104 rlineto +-39 -32 -45 -16 -51 0 rrcurveto +-116 0 -69 77 -8 117 rrcurveto +293 0 rlineto +15 66 rlineto +-309 0 rlineto +1 22 3 21 5 21 rrcurveto +313 0 rlineto +14 66 rlineto +-307 0 rlineto +39 102 97 90 117 0 rrcurveto +60 0 45 -21 30 -41 rrcurveto +41 83 rlineto +-48 38 -60 20 -73 0 rrcurveto +-167 0 -133 -119 -49 -152 rrcurveto +-62 0 rlineto +-13 -66 rlineto +59 0 rlineto +-4 -21 -3 -21 0 -22 rrcurveto +-39 0 rlineto +-13 -66 rlineto +52 0 rlineto +9 -172 104 -101 169 0 rrcurveto +closepath +endchar } ND +/guilsinglleft { +0 333 hsbw +148 67 vstem +241 73 vstem +137 257 rmoveto +177 222 rlineto +-73 0 rlineto +-194 -211 rlineto +101 -233 rlineto +67 0 rlineto +-78 222 rlineto +closepath +endchar } ND +/guilsinglright { +0 333 hsbw +16 76 vstem +120 70 vstem +193 255 rmoveto +-177 -220 rlineto +76 0 rlineto +196 210 rlineto +-98 234 rlineto +-70 0 rlineto +73 -224 rlineto +closepath +endchar } ND +/fi { +0 500 hsbw +0 20 hstem +450 69 hstem +652 76 hstem +54 89 vstem +163 88 vstem +307 89 vstem +416 88 vstem +54 0 rmoveto +89 0 rlineto +94 450 rlineto +99 0 rlineto +15 69 rlineto +-100 0 rlineto +11 51 rlineto +12 59 6 23 43 0 rrcurveto +20 0 25 -5 32 -10 rrcurveto +16 77 rlineto +-34 9 -32 5 -30 0 rrcurveto +-104 0 -18 -33 -20 -103 rrcurveto +-15 -73 rlineto +-80 0 rlineto +-14 -69 rlineto +79 0 rlineto +-94 -450 rlineto +closepath +381 612 rmoveto +88 0 rlineto +22 104 rlineto +-88 0 rlineto +-22 -104 rlineto +closepath +-128 -612 rmoveto +89 0 rlineto +108 519 rlineto +-88 0 rlineto +-109 -519 rlineto +closepath +endchar } ND +/fl { +0 500 hsbw +0 20 hstem +450 69 hstem +652 76 hstem +54 89 vstem +163 88 312 84 457 88 vstem3 +54 0 rmoveto +89 0 rlineto +94 450 rlineto +98 0 rlineto +14 69 rlineto +-98 0 rlineto +11 51 rlineto +12 59 6 23 43 0 rrcurveto +20 0 25 -5 32 -10 rrcurveto +16 77 rlineto +-34 9 -32 5 -30 0 rrcurveto +-104 0 -18 -33 -20 -103 rrcurveto +-15 -73 rlineto +-80 0 rlineto +-14 -69 rlineto +79 0 rlineto +-94 -450 rlineto +closepath +253 0 rmoveto +89 0 rlineto +149 716 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/daggerdbl { +0 556 hsbw +12 76 hstem +446 76 hstem +686 20 hstem +163 88 vstem +291 88 vstem +163 -170 rmoveto +88 0 rlineto +38 182 rlineto +193 0 rlineto +16 76 rlineto +-193 0 rlineto +74 358 rlineto +193 0 rlineto +16 76 rlineto +-192 0 rlineto +38 184 rlineto +-88 0 rlineto +-39 -184 rlineto +-195 0 rlineto +-16 -76 rlineto +195 0 rlineto +-75 -358 rlineto +-195 0 rlineto +-16 -76 rlineto +196 0 rlineto +-38 -182 rlineto +closepath +endchar } ND +/periodcentered { +0 278 hsbw +302 100 hstem +90 100 vstem +90 302 rmoveto +100 0 rlineto +0 100 rlineto +-100 0 rlineto +0 -100 rlineto +closepath +endchar } ND +/quotesinglbase { +0 222 hsbw +-145 20 hstem +0 100 hstem +44 101 vstem +23 0 rmoveto +55 0 rlineto +-13 -60 -26 -35 -38 -11 rrcurveto +-8 -39 rlineto +62 8 49 45 22 105 rrcurveto +19 87 rlineto +-101 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/quotedblbase { +0 333 hsbw +-145 20 hstem +0 100 hstem +32 100 vstem +191 101 vstem +11 0 rmoveto +54 0 rlineto +-12 -60 -26 -35 -38 -11 rrcurveto +-9 -39 rlineto +64 8 48 45 22 105 rrcurveto +18 87 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +159 0 rmoveto +55 0 rlineto +-13 -60 -26 -35 -39 -11 rrcurveto +-7 -39 rlineto +62 8 49 45 22 105 rrcurveto +19 87 rlineto +-101 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/perthousand { +0 1000 hsbw +-27 59 hstem +292 59 hstem +669 59 hstem +66 71 vstem +293 73 vstem +369 70 vstem +595 73 vstem +704 71 vstem +931 72 vstem +66 487 rmoveto +0 -91 46 -45 78 0 rrcurveto +116 0 60 149 0 100 rrcurveto +0 80 -47 48 -76 0 rrcurveto +-122 0 -55 -140 0 -101 rrcurveto +closepath +71 -2 rmoveto +0 57 33 127 70 0 rrcurveto +32 0 21 -21 0 -45 rrcurveto +0 -74 -29 -119 -74 0 rrcurveto +-32 0 -21 19 0 56 rrcurveto +closepath +-39 -511 rmoveto +73 0 rlineto +466 754 rlineto +-74 0 rlineto +-465 -754 rlineto +closepath +271 136 rmoveto +0 -91 46 -46 78 0 rrcurveto +113 0 62 147 0 103 rrcurveto +0 80 -46 48 -77 0 rrcurveto +-122 0 -54 -140 0 -101 rrcurveto +closepath +70 -2 rmoveto +0 56 32 128 71 0 rrcurveto +32 0 21 -21 0 -45 rrcurveto +0 -74 -30 -120 -72 0 rrcurveto +-34 0 -20 20 0 56 rrcurveto +closepath +265 2 rmoveto +0 -91 46 -46 78 0 rrcurveto +118 0 57 148 0 102 rrcurveto +0 80 -46 48 -76 0 rrcurveto +-122 0 -55 -140 0 -101 rrcurveto +closepath +71 -2 rmoveto +0 57 33 127 70 0 rrcurveto +32 0 21 -21 0 -45 rrcurveto +0 -74 -29 -120 -74 0 rrcurveto +-32 0 -21 20 0 56 rrcurveto +closepath +endchar } ND +/Acircumflex { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +847 47 hstem +-20 105 vstem +291 90 vstem +501 77 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +50 480 rmoveto +90 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/Ecircumflex { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +847 47 hstem +299 91 vstem +510 77 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +254 760 rmoveto +91 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/Aacute { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +874 20 hstem +-20 105 vstem +384 73 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +143 480 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Edieresis { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +758 100 hstem +320 93 vstem +521 92 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +275 758 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Egrave { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +760 135 hstem +502 69 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +457 760 rmoveto +69 0 rlineto +-57 135 rlineto +-107 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/Iacute { +0 278 hsbw +0 20 hstem +696 20 hstem +874 20 hstem +57 96 vstem +186 73 vstem +278 111 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +129 760 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Icircumflex { +0 278 hsbw +0 20 hstem +696 20 hstem +847 47 hstem +120 90 vstem +330 77 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +63 760 rmoveto +90 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/Idieresis { +0 278 hsbw +0 20 hstem +696 20 hstem +760 100 hstem +121 92 vstem +301 92 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +64 760 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Igrave { +0 278 hsbw +0 20 hstem +696 20 hstem +760 135 hstem +57 96 vstem +271 69 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +214 760 rmoveto +69 0 rlineto +-56 135 rlineto +-108 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/Oacute { +0 778 hsbw +-12 79 hstem +648 80 hstem +874 20 hstem +91 95 vstem +401 73 vstem +493 111 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +215 465 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Ocircumflex { +0 778 hsbw +-12 79 hstem +648 80 hstem +847 47 hstem +91 95 vstem +325 91 vstem +535 77 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +139 465 rmoveto +91 0 rlineto +80 87 rlineto +39 -87 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/Ograve { +0 778 hsbw +-12 79 hstem +648 80 hstem +760 135 hstem +91 95 vstem +510 69 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +324 465 rmoveto +69 0 rlineto +-57 135 rlineto +-107 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/Uacute { +0 722 hsbw +-13 80 hstem +696 20 hstem +874 20 hstem +97 94 vstem +198 96 vstem +392 73 vstem +483 112 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +194 44 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +endchar } ND +/Ucircumflex { +0 722 hsbw +-13 80 hstem +696 20 hstem +847 47 hstem +97 94 vstem +198 96 vstem +329 91 vstem +540 77 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +131 44 rmoveto +91 0 rlineto +80 87 rlineto +40 -87 rlineto +77 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/Ugrave { +0 722 hsbw +-13 80 hstem +696 20 hstem +760 135 hstem +97 94 vstem +198 96 vstem +493 69 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +295 44 rmoveto +69 0 rlineto +-57 135 rlineto +-108 0 rlineto +96 -135 rlineto +closepath +endchar } ND +/dotlessi { +0 278 hsbw +0 20 hstem +499 20 hstem +61 88 vstem +169 89 vstem +61 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/circumflex { +0 333 hsbw +668 48 hstem +100 91 vstem +311 77 vstem +100 582 rmoveto +91 0 rlineto +80 86 rlineto +40 -86 rlineto +77 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/tilde { +0 333 hsbw +638 68 hstem +94 61 vstem +365 59 vstem +94 597 rmoveto +61 0 rlineto +5 28 15 13 20 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 14 0 rrcurveto +48 0 41 40 7 67 rrcurveto +-59 0 rlineto +-8 -30 -13 -8 -14 0 rrcurveto +-10 0 -17 5 -25 11 rrcurveto +-39 17 -17 8 -29 0 rrcurveto +-48 0 -30 -23 -21 -86 rrcurveto +closepath +endchar } ND +/macron { +0 333 hsbw +600 68 hstem +98 303 vstem +98 600 rmoveto +303 0 rlineto +15 68 rlineto +-304 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/breve { +0 333 hsbw +567 127 hstem +107 58 vstem +341 58 vstem +107 694 rmoveto +4 -78 51 -49 76 0 rrcurveto +76 0 63 49 22 78 rrcurveto +-58 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -24 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/dotaccent { +0 333 hsbw +590 109 hstem +194 109 vstem +194 590 rmoveto +109 0 rlineto +23 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/ring { +0 333 hsbw +556 36 hstem +697 36 hstem +160 37 vstem +302 36 vstem +160 645 rmoveto +0 -51 39 -38 50 0 rrcurveto +49 0 40 38 0 51 rrcurveto +0 48 -40 40 -49 0 rrcurveto +-50 0 -39 -39 0 -49 rrcurveto +closepath +37 0 rmoveto +0 28 24 24 28 0 rrcurveto +29 0 24 -24 0 -28 rrcurveto +0 -30 -24 -23 -29 0 rrcurveto +-28 0 -24 23 0 30 rrcurveto +closepath +endchar } ND +/cedilla { +0 333 hsbw +-208 60 hstem +-73 79 hstem +203 85 vstem +123 -73 rmoveto +41 0 39 -6 0 -35 rrcurveto +0 -17 -17 -17 -66 0 rrcurveto +-72 0 rlineto +-10 -54 rlineto +23 -4 28 -2 32 0 rrcurveto +90 0 77 16 0 71 rrcurveto +0 40 -31 35 -57 8 rrcurveto +11 44 rlineto +-68 0 rlineto +-20 -79 rlineto +closepath +endchar } ND +/hungarumlaut { +0 333 hsbw +582 134 hstem +86 73 vstem +250 70 vstem +340 114 vstem +86 582 rmoveto +73 0 rlineto +131 134 rlineto +-113 0 rlineto +-91 -134 rlineto +closepath +164 0 rmoveto +70 0 rlineto +134 134 rlineto +-114 0 rlineto +-90 -134 rlineto +closepath +endchar } ND +/ogonek { +0 333 hsbw +-208 65 hstem +61 62 vstem +97 13 rmoveto +-24 -50 -12 -43 0 -38 rrcurveto +0 -57 30 -33 58 0 rrcurveto +32 0 35 10 36 18 rrcurveto +13 58 rlineto +-36 -14 -28 -7 -22 0 rrcurveto +-34 0 -22 22 0 36 rrcurveto +0 24 9 32 19 42 rrcurveto +-54 0 rlineto +closepath +endchar } ND +/caron { +0 333 hsbw +582 134 hstem +129 77 vstem +324 92 vstem +416 716 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/Lslash { +0 556 hsbw +0 81 hstem +437 279 hstem +191 96 vstem +103 294 rmoveto +-61 -294 rlineto +465 0 rlineto +17 81 rlineto +-370 0 rlineto +57 273 rlineto +191 107 rlineto +17 81 rlineto +-190 -105 rlineto +58 279 rlineto +-96 0 rlineto +-71 -340 rlineto +-91 -50 rlineto +-17 -83 rlineto +91 51 rlineto +closepath +endchar } ND +/lslash { +0 222 hsbw +0 20 hstem +433 283 hstem +29 89 vstem +179 88 vstem +93 304 rmoveto +-64 -304 rlineto +89 0 rlineto +74 357 rlineto +78 41 rlineto +15 76 rlineto +-77 -41 rlineto +59 283 rlineto +-88 0 rlineto +-70 -336 rlineto +-74 -39 rlineto +-16 -76 rlineto +74 39 rlineto +closepath +endchar } ND +/Scaron { +0 667 hsbw +-12 79 hstem +648 80 hstem +760 134 hstem +159 92 vstem +311 77 vstem +579 92 vstem +70 231 rmoveto +1 -183 113 -60 162 0 rrcurveto +142 0 135 80 0 130 rrcurveto +0 104 -60 42 -128 54 rrcurveto +-119 50 -65 19 0 75 rrcurveto +0 74 71 32 84 0 rrcurveto +93 0 80 -38 0 -105 rrcurveto +92 8 rlineto +0 14 rlineto +0 112 -120 89 -141 0 rrcurveto +-131 0 -120 -70 0 -121 rrcurveto +0 -108 72 -42 138 -60 rrcurveto +103 -45 54 -19 0 -72 rrcurveto +0 -64 -62 -60 -114 0 rrcurveto +-103 0 -83 53 0 95 rrcurveto +0 25 rlineto +-94 -9 rlineto +closepath +528 663 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/scaron { +0 500 hsbw +-12 69 hstem +462 68 hstem +582 134 hstem +114 83 vstem +217 77 vstem +375 89 vstem +42 177 rmoveto +-3 -67 21 -48 41 -29 rrcurveto +43 -30 50 -15 60 0 rrcurveto +109 0 101 65 0 93 rrcurveto +0 88 -52 29 -118 50 rrcurveto +-66 28 -31 10 0 45 rrcurveto +0 32 36 34 60 0 rrcurveto +77 0 42 -40 3 -62 rrcurveto +86 6 rlineto +-2 98 -70 66 -129 0 rrcurveto +-118 0 -68 -68 0 -81 rrcurveto +0 -82 65 -30 91 -40 rrcurveto +56 -26 49 -21 0 -47 rrcurveto +0 -42 -39 -36 -78 0 rrcurveto +-75 0 -53 46 0 80 rrcurveto +-88 -6 rlineto +closepath +462 539 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/Zcaron { +0 611 hsbw +0 82 hstem +640 76 hstem +760 134 hstem +260 77 vstem +456 91 vstem +24 0 rmoveto +531 0 rlineto +17 82 rlineto +-390 0 rlineto +-4 0 -10 -1 -14 -2 rrcurveto +12 14 30 35 48 57 rrcurveto +384 456 rlineto +9 75 rlineto +-494 0 rlineto +-17 -82 rlineto +241 0 rlineto +28 1 rlineto +51 0 rlineto +12 0 21 1 31 4 rrcurveto +-7 -8 -6 -8 -9 -8 rrcurveto +-7 -7 -8 -9 -7 -10 rrcurveto +-74 -90 rlineto +-358 -428 rlineto +-10 -72 rlineto +closepath +523 894 rmoveto +-91 0 rlineto +-81 -87 rlineto +-38 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/zcaron { +0 500 hsbw +0 78 hstem +451 68 hstem +582 134 hstem +199 77 vstem +395 91 vstem +20 0 rmoveto +417 0 rlineto +16 78 rlineto +-204 0 rlineto +-18 0 -34 -2 -49 -3 rrcurveto +31 31 24 25 16 18 rrcurveto +281 316 rlineto +12 56 rlineto +-401 0 rlineto +-15 -74 rlineto +193 0 rlineto +18 0 30 2 42 4 rrcurveto +-25 -24 -22 -23 -19 -22 rrcurveto +-279 -314 rlineto +-14 -68 rlineto +closepath +466 716 rmoveto +-91 0 rlineto +-82 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/brokenbar { +0 260 hsbw +-210 386 hstem +342 386 hstem +92 76 vstem +168 728 rmoveto +-76 0 rlineto +0 -386 rlineto +76 0 rlineto +0 386 rlineto +closepath +0 -552 rmoveto +-76 0 rlineto +0 -386 rlineto +76 0 rlineto +0 386 rlineto +closepath +endchar } ND +/Eth { +0 722 hsbw +0 81 325 66 635 81 hstem3 +113 96 vstem +614 98 vstem +44 0 rmoveto +258 0 rlineto +256 0 154 184 0 239 rrcurveto +0 166 -76 127 -226 0 rrcurveto +-214 0 rlineto +-69 -325 rlineto +-77 0 rlineto +-14 -66 rlineto +77 0 rlineto +-69 -325 rlineto +closepath +113 81 rmoveto +52 244 rlineto +197 0 rlineto +14 66 rlineto +-197 0 rlineto +51 243 rlineto +125 0 rlineto +153 0 62 -37 0 -169 rrcurveto +0 -218 -136 -129 -208 0 rrcurveto +-113 0 rlineto +closepath +endchar } ND +/eth { +0 556 hsbw +-12 71 hstem +448 71 hstem +601 115 hstem +49 90 vstem +306 91 vstem +452 94 vstem +306 716 rmoveto +17 -17 20 -23 22 -29 rrcurveto +-102 -46 rlineto +23 -49 rlineto +111 49 rlineto +26 -47 17 -47 9 -46 rrcurveto +-48 41 -40 17 -55 0 rrcurveto +-140 0 -117 -168 0 -151 rrcurveto +0 -128 84 -84 128 0 rrcurveto +186 0 99 180 0 176 rrcurveto +0 118 -26 82 -54 90 rrcurveto +76 34 rlineto +-22 48 rlineto +-86 -37 rlineto +-6 7 -6 6 -6 6 rrcurveto +-7 6 -6 6 -6 6 rrcurveto +-91 0 rlineto +closepath +146 -407 rmoveto +0 -98 -75 -152 -114 0 rrcurveto +-75 0 -49 49 0 95 rrcurveto +0 114 72 131 114 0 rrcurveto +76 0 51 -51 0 -88 rrcurveto +closepath +endchar } ND +/Yacute { +0 667 hsbw +0 20 hstem +696 20 hstem +874 20 hstem +117 102 vstem +369 73 vstem +461 111 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +90 760 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/yacute { +0 500 hsbw +-210 85 hstem +499 20 hstem +696 20 hstem +91 87 vstem +255 74 vstem +347 111 vstem +469 92 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +255 782 rmoveto +74 0 rlineto +129 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Thorn { +0 667 hsbw +0 20 hstem +146 570 hstem +43 96 vstem +573 94 vstem +43 0 rmoveto +96 0 rlineto +30 146 rlineto +179 0 rlineto +150 0 169 101 0 148 rrcurveto +0 109 -70 67 -136 0 rrcurveto +-201 0 rlineto +31 144 rlineto +-96 1 rlineto +-152 -716 rlineto +closepath +144 227 rmoveto +57 266 rlineto +181 0 rlineto +100 0 48 -20 0 -80 rrcurveto +0 -108 -87 -58 -143 0 rrcurveto +-156 0 rlineto +closepath +endchar } ND +/thorn { +0 556 hsbw +-199 20 hstem +-12 73 hstem +459 71 hstem +696 20 hstem +-10 88 vstem +182 88 vstem +447 88 vstem +-10 -199 rmoveto +88 0 rlineto +59 282 rlineto +34 -64 48 -31 62 0 rrcurveto +152 0 102 170 0 164 rrcurveto +0 133 -72 75 -100 0 rrcurveto +-50 0 -45 -20 -53 -53 rrcurveto +55 259 rlineto +-88 0 rlineto +-192 -915 rlineto +closepath +175 411 rmoveto +0 90 63 157 109 0 rrcurveto +62 0 48 -50 0 -88 rrcurveto +0 -119 -68 -141 -102 0 rrcurveto +-78 0 -34 50 0 101 rrcurveto +closepath +endchar } ND +/minus { +0 584 hsbw +312 82 hstem +56 472 vstem +528 312 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +endchar } ND +/multiply { +0 584 hsbw +294 119 hstem +232 119 vstem +79 200 rmoveto +59 -59 rlineto +154 153 rlineto +153 -153 rlineto +59 60 rlineto +-153 153 rlineto +152 153 rlineto +-58 59 rlineto +-153 -153 rlineto +-153 153 rlineto +-60 -59 rlineto +153 -153 rlineto +-153 -154 rlineto +closepath +endchar } ND +/onesuperior { +0 333 hsbw +705 20 hstem +205 73 vstem +300 54 vstem +205 358 rmoveto +73 0 rlineto +76 367 rlineto +-54 0 rlineto +-34 -42 -67 -39 -50 -14 rrcurveto +-13 -62 rlineto +48 10 41 16 34 24 rrcurveto +-54 -260 rlineto +closepath +endchar } ND +/twosuperior { +0 333 hsbw +358 59 hstem +666 59 hstem +327 74 vstem +74 358 rmoveto +289 0 rlineto +12 59 rlineto +-185 0 rlineto +14 17 15 12 58 35 rrcurveto +80 48 44 30 0 63 rrcurveto +0 58 -46 45 -89 0 rrcurveto +-87 0 -50 -39 -20 -69 rrcurveto +75 -7 rlineto +12 37 23 19 48 0 rrcurveto +38 0 22 -21 0 -25 rrcurveto +0 -38 -28 -12 -50 -28 rrcurveto +-116 -65 -39 -51 -20 -68 rrcurveto +closepath +endchar } ND +/threesuperior { +0 333 hsbw +349 59 hstem +519 52 hstem +672 53 hstem +326 74 vstem +83 454 rmoveto +16 -62 56 -43 80 0 rrcurveto +90 0 58 53 0 58 rrcurveto +0 37 -17 26 -48 19 rrcurveto +57 14 25 32 0 40 rrcurveto +0 53 -45 44 -90 0 rrcurveto +-79 0 -49 -38 -17 -56 rrcurveto +72 -9 rlineto +14 34 22 16 38 0 rrcurveto +37 0 23 -21 0 -26 rrcurveto +0 -35 -39 -19 -42 0 rrcurveto +-16 0 rlineto +-11 -52 rlineto +20 0 rlineto +48 0 20 -21 0 -29 rrcurveto +0 -35 -26 -26 -48 0 rrcurveto +-38 0 -26 16 -16 38 rrcurveto +-69 -8 rlineto +closepath +endchar } ND +/onehalf { +0 834 hsbw +-17 59 hstem +291 59 hstem +708 20 hstem +60 79 vstem +205 73 vstem +300 54 vstem +751 74 vstem +60 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +145 388 rmoveto +73 0 rlineto +76 367 rlineto +-54 0 rlineto +-34 -42 -67 -39 -50 -14 rrcurveto +-13 -62 rlineto +48 10 41 16 34 24 rrcurveto +-54 -260 rlineto +closepath +293 -375 rmoveto +289 0 rlineto +12 59 rlineto +-185 0 rlineto +14 17 14 13 58 34 rrcurveto +81 48 44 28 0 65 rrcurveto +0 58 -46 45 -90 0 rrcurveto +-86 0 -50 -39 -20 -69 rrcurveto +75 -7 rlineto +12 37 23 19 47 0 rrcurveto +40 0 21 -21 0 -25 rrcurveto +0 -38 -27 -11 -51 -29 rrcurveto +-115 -66 -40 -50 -20 -68 rrcurveto +closepath +endchar } ND +/onequarter { +0 834 hsbw +57 671 hstem +83 80 vstem +205 73 vstem +300 54 vstem +665 69 vstem +753 58 vstem +83 -30 rmoveto +80 0 rlineto +688 758 rlineto +-86 0 rlineto +-682 -758 rlineto +closepath +122 388 rmoveto +73 0 rlineto +76 367 rlineto +-54 0 rlineto +-34 -42 -67 -39 -50 -14 rrcurveto +-13 -62 rlineto +48 10 41 16 34 24 rrcurveto +-54 -260 rlineto +closepath +460 -375 rmoveto +69 0 rlineto +16 74 rlineto +48 0 rlineto +13 56 rlineto +-49 0 rlineto +49 237 rlineto +-58 0 rlineto +-250 -234 rlineto +-12 -59 rlineto +189 0 rlineto +-15 -74 rlineto +closepath +27 130 rmoveto +-108 0 rlineto +140 130 rlineto +-32 -130 rlineto +closepath +endchar } ND +/threequarters { +0 834 hsbw +57 56 hstem +349 59 hstem +409 319 hstem +98 79 vstem +326 74 vstem +665 69 vstem +753 58 vstem +98 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +-15 484 rmoveto +16 -62 56 -43 80 0 rrcurveto +90 0 58 53 0 58 rrcurveto +0 37 -17 26 -48 19 rrcurveto +57 14 25 32 0 40 rrcurveto +0 53 -45 44 -90 0 rrcurveto +-79 0 -49 -38 -17 -56 rrcurveto +72 -9 rlineto +14 34 22 16 38 0 rrcurveto +37 0 23 -21 0 -26 rrcurveto +0 -35 -39 -19 -42 0 rrcurveto +-16 0 rlineto +-11 -52 rlineto +20 0 rlineto +48 0 20 -21 0 -29 rrcurveto +0 -35 -26 -26 -48 0 rrcurveto +-38 0 -26 16 -16 38 rrcurveto +-69 -8 rlineto +closepath +582 -471 rmoveto +69 0 rlineto +16 74 rlineto +48 0 rlineto +13 56 rlineto +-49 0 rlineto +49 237 rlineto +-58 0 rlineto +-250 -234 rlineto +-12 -59 rlineto +189 0 rlineto +-15 -74 rlineto +closepath +27 130 rmoveto +-108 0 rlineto +140 130 rlineto +-32 -130 rlineto +closepath +endchar } ND +/franc { +0 556 hsbw +0 201 hstem +325 81 hstem +634 82 hstem +46 96 vstem +195 407 vstem +71 120 rmoveto +-25 -120 rlineto +96 0 rlineto +25 120 rlineto +163 0 rlineto +17 81 rlineto +-163 0 rlineto +25 124 rlineto +318 0 rlineto +17 81 rlineto +-317 0 rlineto +47 228 rlineto +311 0 rlineto +17 82 rlineto +-407 0 rlineto +-107 -515 rlineto +-83 0 rlineto +-17 -81 rlineto +83 0 rlineto +closepath +endchar } ND +/Gbreve { +0 778 hsbw +-12 79 hstem +282 81 hstem +648 80 hstem +759 59 hstem +97 97 vstem +389 58 vstem +623 59 vstem +410 282 rmoveto +217 0 rlineto +-32 -154 rlineto +-72 -41 -66 -20 -62 0 rrcurveto +-126 0 -75 74 0 144 rrcurveto +0 187 117 176 176 0 rrcurveto +100 0 65 -54 20 -98 rrcurveto +94 10 rlineto +-30 149 -107 73 -139 0 rrcurveto +-232 0 -161 -208 0 -233 rrcurveto +0 -184 107 -115 192 0 rrcurveto +97 0 107 34 79 50 rrcurveto +61 291 rlineto +-313 0 rlineto +-17 -81 rlineto +closepath +-21 604 rmoveto +4 -78 51 -49 76 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -24 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/gbreve { +0 556 hsbw +-208 73 hstem +0 72 hstem +459 71 hstem +567 127 hstem +49 90 vstem +236 57 vstem +470 58 vstem +26 -47 rmoveto +0 -26 rlineto +0 -92 95 -43 102 0 rrcurveto +131 0 75 84 31 142 rrcurveto +104 501 rlineto +-81 0 rlineto +-17 -85 rlineto +-37 64 -52 32 -68 0 rrcurveto +-144 0 -116 -154 0 -154 rrcurveto +0 -142 80 -80 104 0 rrcurveto +52 0 49 23 46 47 rrcurveto +-9 -42 rlineto +-26 -123 -25 -40 -107 0 rrcurveto +-26 0 -20 4 -16 7 rrcurveto +-24 11 -11 18 2 40 rrcurveto +-92 8 rlineto +closepath +113 276 rmoveto +0 69 69 161 103 0 rrcurveto +69 0 54 -55 0 -85 rrcurveto +0 -105 -81 -142 -102 0 rrcurveto +-70 0 -42 62 0 95 rrcurveto +closepath +97 465 rmoveto +4 -78 51 -49 76 0 rrcurveto +76 0 63 49 22 78 rrcurveto +-58 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -23 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/Idot { +0 278 hsbw +0 20 hstem +696 20 hstem +755 109 hstem +57 96 vstem +207 95 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +145 755 rmoveto +109 0 rlineto +23 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/Scedilla { +0 667 hsbw +-210 59 hstem +-12 15 hstem +648 80 hstem +159 92 vstem +323 85 vstem +579 92 vstem +70 231 rmoveto +1 -183 113 -60 162 0 rrcurveto +142 0 135 80 0 130 rrcurveto +0 104 -60 42 -128 54 rrcurveto +-119 50 -65 19 0 75 rrcurveto +0 74 71 32 84 0 rrcurveto +93 0 80 -38 0 -105 rrcurveto +92 8 rlineto +0 14 rlineto +0 112 -120 89 -141 0 rrcurveto +-131 0 -120 -70 0 -121 rrcurveto +0 -108 72 -42 138 -60 rrcurveto +103 -45 54 -19 0 -72 rrcurveto +0 -64 -62 -60 -114 0 rrcurveto +-103 0 -83 53 0 95 rrcurveto +0 25 rlineto +-94 -9 rlineto +closepath +174 -307 rmoveto +41 0 38 -6 0 -35 rrcurveto +0 -17 -15 -17 -68 0 rrcurveto +-71 0 rlineto +-11 -54 rlineto +24 -3 27 -2 32 0 rrcurveto +90 0 77 15 0 71 rrcurveto +0 40 -31 35 -57 8 rrcurveto +12 44 rlineto +-68 0 rlineto +-20 -79 rlineto +closepath +endchar } ND +/scedilla { +0 500 hsbw +-199 59 hstem +-12 27 hstem +462 68 hstem +114 83 vstem +254 85 vstem +375 89 vstem +42 177 rmoveto +-3 -67 21 -48 41 -29 rrcurveto +43 -30 50 -15 60 0 rrcurveto +109 0 101 65 0 93 rrcurveto +0 88 -52 29 -118 50 rrcurveto +-66 28 -31 10 0 45 rrcurveto +0 32 36 34 60 0 rrcurveto +77 0 42 -40 3 -62 rrcurveto +86 6 rlineto +-2 98 -70 66 -129 0 rrcurveto +-118 0 -68 -68 0 -81 rrcurveto +0 -82 65 -30 91 -40 rrcurveto +56 -26 49 -21 0 -47 rrcurveto +0 -42 -39 -36 -78 0 rrcurveto +-75 0 -53 46 0 80 rrcurveto +-88 -6 rlineto +closepath +133 -241 rmoveto +41 0 38 -6 0 -35 rrcurveto +0 -17 -15 -18 -68 0 rrcurveto +-71 0 rlineto +-11 -53 rlineto +24 -4 27 -2 32 0 rrcurveto +91 0 76 15 0 72 rrcurveto +0 39 -31 36 -57 8 rrcurveto +12 44 rlineto +-68 0 rlineto +-20 -79 rlineto +closepath +endchar } ND +/Cacute { +0 722 hsbw +-12 79 hstem +649 79 hstem +874 20 hstem +91 95 vstem +408 73 vstem +500 111 vstem +603 252 rmoveto +-36 -118 -86 -67 -100 0 rrcurveto +-116 0 -79 79 0 147 rrcurveto +0 183 108 173 175 0 rrcurveto +93 0 60 -52 19 -102 rrcurveto +89 8 rlineto +-15 137 -99 88 -152 0 rrcurveto +-225 0 -148 -197 0 -236 rrcurveto +0 -198 109 -109 174 0 rrcurveto +142 0 122 85 60 166 rrcurveto +-95 13 rlineto +closepath +-195 508 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/cacute { +0 500 hsbw +-12 69 hstem +458 72 hstem +696 20 hstem +56 90 vstem +286 73 vstem +377 112 vstem +391 189 rmoveto +-30 -90 -57 -42 -57 0 rrcurveto +-58 0 -43 44 0 88 rrcurveto +0 110 48 159 127 0 rrcurveto +61 0 40 -40 2 -65 rrcurveto +87 5 rlineto +0 104 -71 68 -110 0 rrcurveto +-171 0 -103 -176 0 -158 rrcurveto +0 -131 76 -77 114 0 rrcurveto +104 0 85 62 44 130 rrcurveto +-88 9 rlineto +closepath +-105 393 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +endchar } ND +/Ccaron { +0 722 hsbw +-12 79 hstem +649 79 hstem +760 134 hstem +91 95 vstem +358 77 vstem +553 92 vstem +603 252 rmoveto +-36 -118 -86 -67 -100 0 rrcurveto +-116 0 -79 79 0 147 rrcurveto +0 183 108 173 175 0 rrcurveto +93 0 60 -52 19 -102 rrcurveto +89 8 rlineto +-15 137 -99 88 -152 0 rrcurveto +-225 0 -148 -197 0 -236 rrcurveto +0 -198 109 -109 174 0 rrcurveto +142 0 122 85 60 166 rrcurveto +-95 13 rlineto +closepath +42 642 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/ccaron { +0 500 hsbw +-12 69 hstem +458 72 hstem +582 134 hstem +56 90 vstem +228 77 vstem +423 92 vstem +391 189 rmoveto +-30 -90 -57 -42 -57 0 rrcurveto +-58 0 -43 44 0 88 rrcurveto +0 110 48 159 127 0 rrcurveto +61 0 40 -40 2 -65 rrcurveto +87 5 rlineto +0 104 -71 68 -110 0 rrcurveto +-171 0 -103 -176 0 -158 rrcurveto +0 -131 76 -77 114 0 rrcurveto +104 0 85 62 44 130 rrcurveto +-88 9 rlineto +closepath +124 527 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/dmacron { +0 556 hsbw +-12 71 hstem +458 72 hstem +595 121 hstem +53 88 vstem +367 82 vstem +485 88 vstem +485 595 rmoveto +-33 -158 rlineto +-34 62 -48 31 -63 0 rrcurveto +-145 0 -109 -167 0 -162 rrcurveto +0 -139 73 -74 98 0 rrcurveto +55 0 53 29 51 58 rrcurveto +-16 -75 rlineto +82 0 rlineto +124 595 rlineto +66 0 rlineto +14 66 rlineto +-66 0 rlineto +11 55 rlineto +-88 0 rlineto +-11 -55 rlineto +-159 0 rlineto +-14 -66 rlineto +159 0 rlineto +closepath +-344 -378 rmoveto +0 91 56 150 115 0 rrcurveto +64 0 48 -50 0 -81 rrcurveto +0 -131 -67 -137 -107 0 rrcurveto +-78 0 -31 68 0 90 rrcurveto +closepath +endchar } ND +/overscore { +0 552 hsbw +765 63 hstem +-15 582 vstem +-15 765 rmoveto +582 0 rlineto +0 63 rlineto +-582 0 rlineto +0 -63 rlineto +closepath +endchar } ND +/middot { +0 333 hsbw +308 100 hstem +259 100 vstem +259 308 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Abreve { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +759 59 hstem +-20 105 vstem +314 58 vstem +386 113 vstem +548 59 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +73 606 rmoveto +4 -78 52 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -36 -25 -46 0 rrcurveto +-44 0 -26 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/abreve { +0 556 hsbw +-12 69 hstem +458 72 hstem +567 127 hstem +44 88 vstem +226 57 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-190 431 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/Aogonek { +0 667 hsbw +-208 65 hstem +0 13 hstem +206 74 hstem +638 78 hstem +-20 105 vstem +494 62 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +289 -267 rmoveto +-24 -50 -12 -43 0 -38 rrcurveto +0 -57 32 -33 56 0 rrcurveto +32 0 35 10 37 18 rrcurveto +12 58 rlineto +-36 -14 -28 -7 -22 0 rrcurveto +-34 0 -22 22 0 36 rrcurveto +0 24 9 32 19 42 rrcurveto +-54 0 rlineto +closepath +endchar } ND +/aogonek { +0 556 hsbw +-208 65 hstem +-12 69 hstem +458 72 hstem +44 88 vstem +366 62 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-14 -250 rmoveto +-24 -50 -12 -43 0 -38 rrcurveto +0 -57 32 -33 56 0 rrcurveto +32 0 35 10 37 18 rrcurveto +12 58 rlineto +-36 -14 -28 -7 -22 0 rrcurveto +-34 0 -22 22 0 36 rrcurveto +0 24 9 32 20 42 rrcurveto +-55 0 rlineto +closepath +endchar } ND +/Dcaron { +0 722 hsbw +0 81 hstem +634 82 hstem +760 134 hstem +290 77 vstem +485 92 vstem +615 97 vstem +44 0 rmoveto +258 0 rlineto +256 0 154 183 0 240 rrcurveto +0 173 -94 120 -208 0 rrcurveto +-216 0 rlineto +-150 -716 rlineto +closepath +113 81 rmoveto +116 553 rlineto +126 0 rlineto +156 0 60 -37 0 -169 rrcurveto +0 -217 -140 -130 -204 0 rrcurveto +-114 0 rlineto +closepath +420 813 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/dcaron { +0 625 hsbw +-12 71 hstem +458 72 hstem +625 91 hstem +55 88 vstem +369 82 vstem +512 88 vstem +652 91 vstem +385 75 rmoveto +-16 -75 rlineto +82 0 rlineto +149 716 rlineto +-88 0 rlineto +-58 -279 rlineto +-34 62 -48 31 -63 0 rrcurveto +-145 0 -109 -167 0 -162 rrcurveto +0 -139 73 -74 98 0 rrcurveto +55 0 53 29 51 58 rrcurveto +closepath +-242 142 rmoveto +0 91 56 150 115 0 rrcurveto +64 0 48 -50 0 -81 rrcurveto +0 -131 -67 -137 -107 0 rrcurveto +-78 0 -31 68 0 90 rrcurveto +closepath +490 408 rmoveto +50 0 rlineto +-12 -54 -23 -31 -34 -10 rrcurveto +-8 -34 rlineto +57 5 44 41 20 95 rrcurveto +16 79 rlineto +-91 0 rlineto +-19 -91 rlineto +closepath +endchar } ND +/Dslash { +0 722 hsbw +0 81 325 66 635 81 hstem3 +113 96 vstem +614 98 vstem +44 0 rmoveto +258 0 rlineto +256 0 154 184 0 239 rrcurveto +0 166 -76 127 -226 0 rrcurveto +-214 0 rlineto +-69 -325 rlineto +-77 0 rlineto +-14 -66 rlineto +77 0 rlineto +-69 -325 rlineto +closepath +113 81 rmoveto +52 244 rlineto +197 0 rlineto +14 66 rlineto +-197 0 rlineto +51 243 rlineto +125 0 rlineto +153 0 62 -37 0 -169 rrcurveto +0 -218 -136 -129 -208 0 rrcurveto +-113 0 rlineto +closepath +endchar } ND +/Eogonek { +0 667 hsbw +-208 65 hstem +0 13 hstem +330 82 hstem +634 82 hstem +380 62 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +371 13 rmoveto +-24 -50 -12 -43 0 -38 rrcurveto +0 -57 30 -33 58 0 rrcurveto +32 0 35 10 36 18 rrcurveto +12 58 rlineto +-35 -14 -28 -7 -22 0 rrcurveto +-34 0 -22 22 0 36 rrcurveto +0 24 9 32 19 42 rrcurveto +-54 0 rlineto +closepath +endchar } ND +/eogonek { +0 556 hsbw +-208 65 hstem +-12 25 hstem +237 68 hstem +461 69 hstem +52 89 vstem +199 62 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +78 -292 rmoveto +-24 -50 -12 -43 0 -38 rrcurveto +0 -57 32 -33 56 0 rrcurveto +32 0 35 10 37 18 rrcurveto +12 58 rlineto +-36 -14 -28 -7 -22 0 rrcurveto +-34 0 -22 22 0 36 rrcurveto +0 24 9 32 20 42 rrcurveto +-55 0 rlineto +closepath +endchar } ND +/Ecaron { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +760 134 hstem +325 77 vstem +521 91 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +567 894 rmoveto +-91 0 rlineto +-82 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/ecaron { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +582 134 hstem +52 89 vstem +228 77 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +358 411 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/Lacute { +0 556 hsbw +0 81 hstem +696 20 hstem +874 20 hstem +250 73 vstem +342 111 vstem +40 0 rmoveto +467 0 rlineto +17 81 rlineto +-371 0 rlineto +132 635 rlineto +-96 0 rlineto +-149 -716 rlineto +closepath +210 760 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/lacute { +0 222 hsbw +0 20 hstem +696 20 hstem +26 89 vstem +147 74 vstem +239 112 vstem +26 0 rmoveto +89 0 rlineto +149 716 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +121 752 rmoveto +74 0 rlineto +130 135 rlineto +-112 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/Lcaron { +0 556 hsbw +0 81 hstem +616 100 hstem +189 96 vstem +458 101 vstem +438 616 rmoveto +55 0 rlineto +-13 -61 -26 -35 -38 -10 rrcurveto +-9 -39 rlineto +64 8 48 45 22 104 rrcurveto +18 88 rlineto +-101 0 rlineto +-20 -100 rlineto +closepath +-398 -616 rmoveto +467 0 rlineto +17 81 rlineto +-371 0 rlineto +132 635 rlineto +-96 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/lcaron { +0 281 hsbw +0 20 hstem +625 91 hstem +27 89 vstem +177 88 vstem +309 90 vstem +27 0 rmoveto +89 0 rlineto +149 716 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +263 625 rmoveto +49 0 rlineto +-12 -54 -23 -31 -34 -10 rrcurveto +-7 -34 rlineto +56 5 44 41 20 95 rrcurveto +16 79 rlineto +-90 0 rlineto +-19 -91 rlineto +closepath +endchar } ND +/Ldot { +0 556 hsbw +0 81 hstem +308 100 hstem +696 20 hstem +189 96 vstem +371 99 vstem +40 0 rmoveto +467 0 rlineto +17 81 rlineto +-371 0 rlineto +132 635 rlineto +-96 0 rlineto +-149 -716 rlineto +closepath +331 308 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/ldot { +0 400 hsbw +0 20 hstem +308 408 hstem +26 89 vstem +176 88 vstem +269 100 vstem +26 0 rmoveto +89 0 rlineto +149 716 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +222 308 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Nacute { +0 722 hsbw +0 108 hstem +606 110 hstem +874 20 hstem +49 93 vstem +199 93 vstem +388 73 vstem +513 94 vstem +664 93 vstem +49 0 rmoveto +93 0 rlineto +91 435 rlineto +14 68 9 57 5 46 rrcurveto +18 -56 24 -64 32 -72 rrcurveto +178 -414 rlineto +94 0 rlineto +150 716 rlineto +-93 0 rlineto +-88 -421 rlineto +-14 -64 -11 -63 -9 -60 rrcurveto +-42 143 -28 66 -60 130 rrcurveto +-120 269 rlineto +-93 0 rlineto +-150 -716 rlineto +closepath +339 760 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/nacute { +0 556 hsbw +0 20 hstem +458 72 hstem +696 20 hstem +33 89 vstem +142 80 vstem +283 73 vstem +440 88 vstem +33 0 rmoveto +89 0 rlineto +50 241 rlineto +33 158 75 59 91 0 rrcurveto +44 0 25 -25 0 -34 rrcurveto +0 -16 -4 -23 -6 -31 rrcurveto +-69 -329 rlineto +88 0 rlineto +66 314 rlineto +8 41 5 30 0 20 rrcurveto +0 76 -51 49 -84 0 rrcurveto +-63 0 -58 -32 -69 -70 rrcurveto +19 91 rlineto +-80 0 rlineto +-109 -519 rlineto +closepath +250 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Ncaron { +0 722 hsbw +0 108 hstem +606 110 hstem +760 134 hstem +49 93 vstem +199 93 vstem +350 77 vstem +545 92 vstem +664 93 vstem +49 0 rmoveto +93 0 rlineto +91 435 rlineto +14 68 9 57 5 46 rrcurveto +18 -56 24 -64 32 -72 rrcurveto +178 -414 rlineto +94 0 rlineto +150 716 rlineto +-93 0 rlineto +-88 -421 rlineto +-14 -64 -11 -63 -9 -60 rrcurveto +-42 143 -28 66 -60 130 rrcurveto +-120 269 rlineto +-93 0 rlineto +-150 -716 rlineto +closepath +588 894 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +97 0 rlineto +130 134 rlineto +closepath +endchar } ND +/ncaron { +0 556 hsbw +0 20 hstem +458 72 hstem +582 134 hstem +33 89 vstem +142 80 vstem +243 77 vstem +440 88 vstem +33 0 rmoveto +89 0 rlineto +50 241 rlineto +33 158 75 59 91 0 rrcurveto +44 0 25 -25 0 -34 rrcurveto +0 -16 -4 -23 -6 -31 rrcurveto +-69 -329 rlineto +88 0 rlineto +66 314 rlineto +8 41 5 30 0 20 rrcurveto +0 76 -51 49 -84 0 rrcurveto +-63 0 -58 -32 -69 -70 rrcurveto +19 91 rlineto +-80 0 rlineto +-109 -519 rlineto +closepath +497 716 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +97 0 rlineto +130 134 rlineto +closepath +endchar } ND +/Odblacute { +0 778 hsbw +-12 79 hstem +648 80 hstem +760 134 hstem +91 95 vstem +349 73 vstem +514 69 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +163 465 rmoveto +73 0 rlineto +131 134 rlineto +-113 0 rlineto +-91 -134 rlineto +closepath +165 0 rmoveto +69 0 rlineto +134 134 rlineto +-114 0 rlineto +-89 -134 rlineto +closepath +endchar } ND +/odblacute { +0 556 hsbw +-12 69 hstem +462 68 hstem +582 134 hstem +49 88 vstem +214 73 vstem +378 70 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +77 376 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +164 0 rmoveto +70 0 rlineto +134 134 rlineto +-114 0 rlineto +-90 -134 rlineto +closepath +endchar } ND +/Racute { +0 722 hsbw +0 20 hstem +318 78 hstem +637 79 hstem +874 20 hstem +47 96 vstem +339 73 vstem +431 111 vstem +639 91 vstem +47 0 rmoveto +96 0 rlineto +66 318 rlineto +111 0 rlineto +144 0 13 -84 39 -101 rrcurveto +51 -133 rlineto +107 0 rlineto +-54 135 rlineto +-29 67 -30 65 -73 55 rrcurveto +170 22 72 80 0 118 rrcurveto +0 127 -87 47 -146 0 rrcurveto +-300 0 rlineto +-150 -716 rlineto +closepath +178 396 rmoveto +51 241 rlineto +233 0 rlineto +84 0 46 -29 0 -65 rrcurveto +0 -123 -98 -24 -184 0 rrcurveto +-132 0 rlineto +closepath +114 364 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/racute { +0 333 hsbw +0 20 hstem +446 84 hstem +696 20 hstem +33 84 vstem +205 73 vstem +297 111 vstem +33 0 rmoveto +84 0 rlineto +44 208 rlineto +37 178 73 60 62 0 rrcurveto +18 0 16 -6 16 -11 rrcurveto +36 82 rlineto +-26 12 -21 7 -18 0 rrcurveto +-54 0 -49 -37 -53 -80 rrcurveto +22 106 rlineto +-78 0 rlineto +-109 -519 rlineto +closepath +172 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Rcaron { +0 722 hsbw +0 20 hstem +318 78 hstem +637 79 hstem +760 134 hstem +47 96 vstem +318 77 vstem +513 92 vstem +639 91 vstem +47 0 rmoveto +96 0 rlineto +66 318 rlineto +111 0 rlineto +144 0 13 -84 39 -101 rrcurveto +51 -133 rlineto +107 0 rlineto +-54 135 rlineto +-29 67 -30 65 -73 55 rrcurveto +170 22 72 80 0 118 rrcurveto +0 127 -87 47 -146 0 rrcurveto +-300 0 rlineto +-150 -716 rlineto +closepath +178 396 rmoveto +51 241 rlineto +233 0 rlineto +84 0 46 -29 0 -65 rrcurveto +0 -123 -98 -24 -184 0 rrcurveto +-132 0 rlineto +closepath +380 498 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/rcaron { +0 333 hsbw +0 20 hstem +446 84 hstem +582 134 hstem +33 84 vstem +165 77 vstem +360 92 vstem +33 0 rmoveto +84 0 rlineto +44 208 rlineto +37 178 73 60 62 0 rrcurveto +18 0 16 -6 16 -11 rrcurveto +36 82 rlineto +-26 12 -21 7 -18 0 rrcurveto +-54 0 -49 -37 -53 -80 rrcurveto +22 106 rlineto +-78 0 rlineto +-109 -519 rlineto +closepath +419 716 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/Sacute { +0 667 hsbw +-12 79 hstem +648 80 hstem +874 20 hstem +159 92 vstem +351 73 vstem +579 92 vstem +70 231 rmoveto +1 -183 113 -60 162 0 rrcurveto +142 0 135 80 0 130 rrcurveto +0 104 -60 42 -128 54 rrcurveto +-119 50 -65 19 0 75 rrcurveto +0 74 71 32 84 0 rrcurveto +93 0 80 -38 0 -105 rrcurveto +92 8 rlineto +0 14 rlineto +0 112 -120 89 -141 0 rrcurveto +-131 0 -120 -70 0 -121 rrcurveto +0 -108 72 -42 138 -60 rrcurveto +103 -45 54 -19 0 -72 rrcurveto +0 -64 -62 -60 -114 0 rrcurveto +-103 0 -83 53 0 95 rrcurveto +0 25 rlineto +-94 -9 rlineto +closepath +281 529 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +endchar } ND +/sacute { +0 500 hsbw +-12 69 hstem +462 68 hstem +696 20 hstem +114 83 vstem +244 73 vstem +375 89 vstem +42 177 rmoveto +-3 -67 21 -48 41 -29 rrcurveto +43 -30 50 -15 60 0 rrcurveto +109 0 101 65 0 93 rrcurveto +0 88 -52 29 -118 50 rrcurveto +-66 28 -31 10 0 45 rrcurveto +0 32 36 34 60 0 rrcurveto +77 0 42 -40 3 -62 rrcurveto +86 6 rlineto +-2 98 -70 66 -129 0 rrcurveto +-118 0 -68 -68 0 -81 rrcurveto +0 -82 65 -30 91 -40 rrcurveto +56 -26 49 -21 0 -47 rrcurveto +0 -42 -39 -36 -78 0 rrcurveto +-75 0 -53 46 0 80 rrcurveto +-88 -6 rlineto +closepath +202 405 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Tcedilla { +0 611 hsbw +-159 100 hstem +0 20 hstem +634 82 hstem +227 96 vstem +359 96 vstem +227 0 rmoveto +96 0 rlineto +132 634 rlineto +233 0 rlineto +17 82 rlineto +-563 0 rlineto +-17 -82 rlineto +234 0 rlineto +-132 -634 rlineto +closepath +-33 -159 rmoveto +56 0 rlineto +-11 -41 -23 -26 -36 -10 rrcurveto +-8 -39 rlineto +60 8 50 45 16 76 rrcurveto +18 87 rlineto +-101 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/tcedilla { +0 278 hsbw +-149 90 hstem +-9 75 hstem +450 69 hstem +56 93 vstem +240 72 rmoveto +-16 -4 -17 -2 -19 0 rrcurveto +-28 0 -11 12 0 20 rrcurveto +0 7 3 22 8 37 rrcurveto +60 286 rlineto +87 0 rlineto +14 69 rlineto +-87 0 rlineto +40 188 rlineto +-101 -61 rlineto +-27 -127 rlineto +-70 0 rlineto +-14 -69 rlineto +70 0 rlineto +-63 -301 rlineto +-9 -42 -4 -26 0 -11 rrcurveto +0 -54 49 -25 58 0 rrcurveto +20 0 20 3 22 6 rrcurveto +15 72 rlineto +closepath +-172 -221 rmoveto +49 0 rlineto +-9 -37 -21 -23 -32 -9 rrcurveto +-8 -35 rlineto +54 7 45 42 15 66 rrcurveto +16 79 rlineto +-90 0 rlineto +-19 -90 rlineto +closepath +endchar } ND +/Tcaron { +0 611 hsbw +0 20 hstem +634 82 hstem +760 134 hstem +303 77 vstem +498 92 vstem +227 0 rmoveto +96 0 rlineto +132 634 rlineto +233 0 rlineto +17 82 rlineto +-563 0 rlineto +-17 -82 rlineto +234 0 rlineto +-132 -634 rlineto +closepath +363 894 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +97 0 rlineto +130 134 rlineto +closepath +endchar } ND +/tcaron { +0 354 hsbw +-9 75 hstem +450 69 hstem +625 91 hstem +53 93 vstem +383 90 vstem +364 625 rmoveto +49 0 rlineto +-12 -54 -23 -31 -34 -10 rrcurveto +-8 -34 rlineto +57 5 44 41 20 95 rrcurveto +16 79 rlineto +-90 0 rlineto +-19 -91 rlineto +closepath +-127 -553 rmoveto +-16 -4 -17 -2 -19 0 rrcurveto +-28 0 -11 12 0 20 rrcurveto +0 7 3 22 8 37 rrcurveto +60 286 rlineto +87 0 rlineto +14 69 rlineto +-87 0 rlineto +40 188 rlineto +-101 -61 rlineto +-27 -127 rlineto +-70 0 rlineto +-14 -69 rlineto +70 0 rlineto +-63 -301 rlineto +-9 -42 -4 -26 0 -11 rrcurveto +0 -55 49 -24 59 0 rrcurveto +19 0 20 3 22 6 rrcurveto +15 72 rlineto +closepath +endchar } ND +/Uring { +0 722 hsbw +-13 80 hstem +696 20 hstem +756 36 hstem +897 37 hstem +97 94 vstem +198 96 vstem +383 36 vstem +524 37 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +185 129 rmoveto +0 -50 39 -39 50 0 rrcurveto +48 0 41 39 0 50 rrcurveto +0 49 -40 40 -49 0 rrcurveto +-50 0 -39 -40 0 -49 rrcurveto +closepath +36 0 rmoveto +0 29 23 23 30 0 rrcurveto +29 0 23 -23 0 -29 rrcurveto +0 -30 -23 -23 -29 0 rrcurveto +-30 0 -23 23 0 30 rrcurveto +closepath +endchar } ND +/uring { +0 556 hsbw +-12 73 hstem +499 20 hstem +556 36 hstem +697 36 hstem +63 89 vstem +265 37 vstem +407 36 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-122 551 rmoveto +0 -51 39 -38 50 0 rrcurveto +49 0 40 38 0 51 rrcurveto +0 48 -40 40 -49 0 rrcurveto +-50 0 -39 -39 0 -49 rrcurveto +closepath +37 0 rmoveto +0 28 24 24 28 0 rrcurveto +29 0 24 -24 0 -28 rrcurveto +0 -30 -24 -23 -29 0 rrcurveto +-28 0 -24 23 0 30 rrcurveto +closepath +endchar } ND +/Udblacute { +0 722 hsbw +-13 80 hstem +696 20 hstem +760 134 hstem +97 94 vstem +198 96 vstem +343 73 vstem +507 70 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +145 44 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +164 0 rmoveto +70 0 rlineto +133 134 rlineto +-113 0 rlineto +-90 -134 rlineto +closepath +endchar } ND +/udblacute { +0 556 hsbw +-12 73 hstem +499 20 hstem +582 134 hstem +63 89 vstem +200 73 vstem +365 70 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-187 488 rmoveto +73 0 rlineto +131 134 rlineto +-113 0 rlineto +-91 -134 rlineto +closepath +165 0 rmoveto +70 0 rlineto +133 134 rlineto +-114 0 rlineto +-89 -134 rlineto +closepath +endchar } ND +/Zacute { +0 611 hsbw +0 82 hstem +640 76 hstem +874 20 hstem +304 73 vstem +396 111 vstem +24 0 rmoveto +531 0 rlineto +17 82 rlineto +-390 0 rlineto +-4 0 -10 -1 -14 -2 rrcurveto +12 14 30 35 48 57 rrcurveto +384 456 rlineto +9 75 rlineto +-494 0 rlineto +-17 -82 rlineto +241 0 rlineto +28 1 rlineto +51 0 rlineto +12 0 21 1 31 4 rrcurveto +-7 -8 -6 -8 -9 -8 rrcurveto +-7 -7 -8 -9 -7 -10 rrcurveto +-74 -90 rlineto +-358 -428 rlineto +-10 -72 rlineto +closepath +280 760 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/zacute { +0 500 hsbw +0 78 hstem +451 68 hstem +696 20 hstem +239 73 vstem +331 111 vstem +20 0 rmoveto +417 0 rlineto +16 78 rlineto +-204 0 rlineto +-18 0 -34 -2 -49 -3 rrcurveto +31 31 24 25 16 18 rrcurveto +281 316 rlineto +12 56 rlineto +-401 0 rlineto +-15 -74 rlineto +193 0 rlineto +18 0 30 2 42 4 rrcurveto +-25 -24 -22 -23 -19 -22 rrcurveto +-279 -314 rlineto +-14 -68 rlineto +closepath +219 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Zdot { +0 611 hsbw +0 82 hstem +640 76 hstem +755 109 hstem +323 109 vstem +24 0 rmoveto +531 0 rlineto +17 82 rlineto +-390 0 rlineto +-4 0 -10 -1 -14 -2 rrcurveto +12 14 30 35 48 57 rrcurveto +384 456 rlineto +9 75 rlineto +-494 0 rlineto +-17 -82 rlineto +241 0 rlineto +28 1 rlineto +51 0 rlineto +12 0 21 1 31 4 rrcurveto +-7 -8 -6 -8 -9 -8 rrcurveto +-7 -7 -8 -9 -7 -10 rrcurveto +-74 -90 rlineto +-358 -428 rlineto +-10 -72 rlineto +closepath +299 755 rmoveto +109 0 rlineto +23 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/zdot { +0 500 hsbw +0 78 hstem +451 68 hstem +590 109 hstem +252 109 vstem +20 0 rmoveto +417 0 rlineto +16 78 rlineto +-204 0 rlineto +-18 0 -34 -2 -49 -3 rrcurveto +31 31 24 25 16 18 rrcurveto +281 316 rlineto +12 56 rlineto +-401 0 rlineto +-15 -74 rlineto +193 0 rlineto +18 0 30 2 42 4 rrcurveto +-25 -24 -22 -23 -19 -22 rrcurveto +-279 -314 rlineto +-14 -68 rlineto +closepath +232 590 rmoveto +109 0 rlineto +23 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/Gamma { +0 570 hsbw +0 20 hstem +634 82 hstem +42 96 vstem +192 467 vstem +42 0 rmoveto +96 0 rlineto +133 634 rlineto +371 0 rlineto +17 82 rlineto +-467 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Theta { +0 778 hsbw +-12 79 hstem +317 81 hstem +648 80 hstem +91 95 307 249 677 95 vstem3 +91 312 rmoveto +0 -196 123 -128 179 0 rrcurveto +206 0 173 183 0 236 rrcurveto +0 181 -110 140 -192 0 rrcurveto +-226 0 -153 -195 0 -221 rrcurveto +closepath +95 -6 rmoveto +0 192 128 150 156 0 rrcurveto +110 0 97 -84 0 -150 rrcurveto +0 -163 -119 -184 -159 0 rrcurveto +-110 0 -103 79 0 160 rrcurveto +closepath +104 11 rmoveto +266 0 rlineto +17 81 rlineto +-266 0 rlineto +-17 -81 rlineto +closepath +endchar } ND +/Phi { +0 837 hsbw +-28 200 hstem +562 174 hstem +88 94 vstem +324 95 vstem +488 96 vstem +734 92 vstem +488 736 rmoveto +-19 -90 rlineto +-255 -8 -126 -146 0 -161 rrcurveto +0 -131 93 -93 168 -14 rrcurveto +-25 -121 rlineto +95 0 rlineto +26 117 rlineto +217 12 164 123 0 179 rrcurveto +0 129 -92 96 -170 16 rrcurveto +20 92 rlineto +-96 0 rlineto +closepath +-36 -173 rmoveto +-85 -391 rlineto +-124 8 -61 54 0 98 rrcurveto +0 118 86 98 184 15 rrcurveto +closepath +10 -390 rmoveto +85 389 rlineto +125 -7 62 -60 0 -85 rrcurveto +0 -115 -78 -104 -194 -18 rrcurveto +closepath +endchar } ND +/alpha { +0 570 hsbw +-12 73 hstem +458 72 hstem +50 87 vstem +421 62 vstem +505 94 vstem +505 519 rmoveto +-44 -95 rlineto +-35 70 -51 36 -67 0 rrcurveto +-142 0 -116 -148 0 -182 rrcurveto +0 -126 54 -86 119 0 rrcurveto +64 0 56 29 49 60 rrcurveto +9 -77 rlineto +89 0 rlineto +-5 60 -2 58 0 55 rrcurveto +0 94 rlineto +116 252 rlineto +-94 0 rlineto +closepath +-368 -326 rmoveto +0 126 75 139 103 0 rrcurveto +66 0 40 -58 0 -77 rrcurveto +0 -128 -81 -134 -97 0 rrcurveto +-60 0 -46 42 0 90 rrcurveto +closepath +endchar } ND +/delta { +0 556 hsbw +-12 69 hstem +642 74 hstem +48 89 vstem +448 91 vstem +196 716 rmoveto +-12 -58 rlineto +22 -37 43 -48 63 -58 rrcurveto +-158 -7 -106 -148 0 -158 rrcurveto +0 -119 72 -95 138 0 rrcurveto +176 0 105 157 0 159 rrcurveto +0 64 -13 53 -108 91 rrcurveto +-55 46 -45 44 -34 40 rrcurveto +291 0 rlineto +15 74 rlineto +-394 0 rlineto +closepath +-59 -514 rmoveto +0 137 88 107 104 0 rrcurveto +74 0 45 -58 0 -80 rrcurveto +0 -127 -79 -124 -108 0 rrcurveto +-72 0 -52 51 0 94 rrcurveto +closepath +endchar } ND +/epsilon { +0 439 hsbw +-12 69 hstem +458 72 hstem +103 88 vstem +458 456 rmoveto +-46 49 -57 25 -69 0 rrcurveto +-102 0 -81 -67 0 -84 rrcurveto +0 -40 17 -35 35 -30 rrcurveto +-81 -32 -40 -49 0 -66 rrcurveto +0 -78 61 -61 119 0 rrcurveto +70 0 64 25 56 50 rrcurveto +-53 57 rlineto +-45 -42 -47 -21 -48 0 rrcurveto +-52 0 -34 26 0 46 rrcurveto +0 56 59 47 83 0 rrcurveto +27 0 rlineto +14 65 rlineto +-78 5 -39 26 0 46 rrcurveto +0 44 40 40 60 0 rrcurveto +36 0 33 -16 30 -31 rrcurveto +68 45 rlineto +closepath +endchar } ND +/sigma { +0 603 hsbw +-12 69 hstem +462 68 hstem +49 88 vstem +450 88 vstem +645 519 rmoveto +-247 0 rlineto +-22 7 -23 4 -26 0 rrcurveto +-166 0 -112 -147 0 -185 rrcurveto +0 -126 80 -84 131 0 rrcurveto +172 0 106 151 0 170 rrcurveto +0 54 -13 45 -25 37 rrcurveto +129 0 rlineto +16 74 rlineto +closepath +-508 -319 rmoveto +0 134 76 128 116 0 rrcurveto +74 0 47 -53 0 -96 rrcurveto +0 -118 -72 -138 -117 0 rrcurveto +-78 0 -46 59 0 84 rrcurveto +closepath +endchar } ND +/tau { +0 374 hsbw +0 20 hstem +445 74 hstem +105 89 vstem +199 88 vstem +101 519 rmoveto +-15 -74 rlineto +113 0 rlineto +-94 -445 rlineto +89 0 rlineto +93 445 rlineto +112 0 rlineto +16 74 rlineto +-314 0 rlineto +closepath +endchar } ND +/phi { +0 652 hsbw +-199 264 hstem +458 72 hstem +54 89 vstem +209 89 vstem +556 84 vstem +323 530 rmoveto +-155 -3 -114 -146 0 -154 rrcurveto +0 -120 70 -101 124 -18 rrcurveto +-39 -187 rlineto +89 0 rlineto +38 187 rlineto +196 18 108 142 0 176 rrcurveto +0 129 -75 77 -82 0 rrcurveto +-105 0 -34 -96 -28 -127 rrcurveto +-51 -242 rlineto +-71 16 -51 54 0 83 rrcurveto +0 104 57 105 87 18 rrcurveto +36 85 rlineto +closepath +30 -464 rmoveto +52 245 rlineto +24 114 17 33 42 0 rrcurveto +41 0 27 -42 0 -81 rrcurveto +0 -131 -74 -121 -129 -17 rrcurveto +closepath +endchar } ND +/underscoredbl { +0 552 hsbw +-325 63 hstem +-199 64 hstem +-15 582 vstem +-15 -199 rmoveto +582 0 rlineto +0 64 rlineto +-582 0 rlineto +0 -64 rlineto +closepath +0 -126 rmoveto +582 0 rlineto +0 63 rlineto +-582 0 rlineto +0 -63 rlineto +closepath +endchar } ND +/exclamdbl { +0 500 hsbw +0 100 hstem +696 20 hstem +112 55 vstem +331 55 vstem +416 106 vstem +112 181 rmoveto +55 0 rlineto +104 376 rlineto +33 159 rlineto +-107 0 rlineto +-31 -147 rlineto +-54 -388 rlineto +closepath +-56 -181 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +275 181 rmoveto +55 0 rlineto +103 376 rlineto +33 159 rlineto +-106 0 rlineto +-31 -147 rlineto +-54 -388 rlineto +closepath +-56 -181 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/nsuperior { +0 365 hsbw +535 43 hstem +58 70 vstem +132 64 vstem +324 69 vstem +58 253 rmoveto +70 0 rlineto +34 151 rlineto +20 89 45 35 58 0 rrcurveto +26 0 13 -12 0 -16 rrcurveto +0 -9 -2 -14 -4 -19 rrcurveto +-47 -205 rlineto +70 0 rlineto +44 194 rlineto +5 25 3 18 0 12 rrcurveto +0 50 -35 33 -57 0 rrcurveto +-39 0 -31 -13 -45 -37 rrcurveto +10 43 rlineto +-64 0 rlineto +-74 -325 rlineto +closepath +endchar } ND +/peseta { +0 1094 hsbw +-13 72 hstem +59 137 hstem +290 80 hstem +451 70 hstem +636 80 hstem +12 96 vstem +504 100 739 69 949 88 vstem3 +166 716 rmoveto +-154 -716 rlineto +96 0 rlineto +62 290 rlineto +88 0 rlineto +176 0 74 32 42 129 rrcurveto +31 0 rlineto +-67 -317 rlineto +-7 -30 -3 -22 0 -12 rrcurveto +0 -42 34 -33 71 0 rrcurveto +14 0 21 2 26 3 rrcurveto +15 59 rlineto +47 -53 56 -19 65 0 rrcurveto +106 0 78 75 0 90 rrcurveto +0 69 -40 42 -146 81 rrcurveto +-29 16 -14 14 0 24 rrcurveto +0 38 30 31 52 0 rrcurveto +62 0 37 -28 6 -85 rrcurveto +80 0 rlineto +0 114 -73 67 -107 0 rrcurveto +-28 0 -26 -5 -25 -9 rrcurveto +-131 0 rlineto +32 150 rlineto +-88 0 rlineto +-33 -150 rlineto +-36 0 rlineto +-12 131 -87 64 -139 0 rrcurveto +-156 0 rlineto +closepath +78 -80 rmoveto +78 0 rlineto +97 0 42 -43 0 -77 rrcurveto +0 -110 -73 -36 -144 0 rrcurveto +-56 0 rlineto +56 266 rlineto +closepath +426 -185 rmoveto +72 0 rlineto +-10 -23 -5 -21 0 -20 rrcurveto +0 -56 26 -40 104 -58 rrcurveto +57 -32 35 -18 0 -42 rrcurveto +0 -44 -40 -38 -61 0 rrcurveto +-70 0 -44 44 0 66 rrcurveto +0 27 rlineto +-83 0 rlineto +-2 -13 -1 -11 0 -10 rrcurveto +0 -42 8 -23 20 -26 rrcurveto +-15 -3 -12 -1 -9 0 rrcurveto +-28 0 -14 13 0 18 rrcurveto +0 6 1 11 3 16 rrcurveto +68 320 rlineto +closepath +endchar } ND +/arrowleft { +0 1000 hsbw +228 49 hstem +39 922 vstem +240 428 rmoveto +-86 -95 -59 -44 -56 -24 rrcurveto +0 -22 rlineto +64 -31 54 -42 84 -93 rrcurveto +38 0 rlineto +-31 65 -32 50 -34 36 rrcurveto +779 0 rlineto +0 49 rlineto +-779 0 rlineto +50 62 7 11 38 78 rrcurveto +-37 0 rlineto +closepath +endchar } ND +/arrowup { +0 500 hsbw +-209 20 hstem +415 37 hstem +226 49 vstem +75 452 rmoveto +0 -37 rlineto +76 38 12 7 63 50 rrcurveto +0 -719 rlineto +49 0 rlineto +0 719 rlineto +35 -34 50 -32 66 -30 rrcurveto +0 38 rlineto +-95 84 -41 52 -30 66 rrcurveto +-23 0 rlineto +-24 -56 -44 -60 -94 -86 rrcurveto +closepath +endchar } ND +/arrowright { +0 1000 hsbw +228 49 hstem +39 922 vstem +759 428 rmoveto +-37 0 rlineto +38 -78 7 -11 50 -62 rrcurveto +-778 0 rlineto +0 -49 rlineto +778 0 rlineto +-34 -36 -32 -50 -30 -65 rrcurveto +38 0 rlineto +84 93 54 42 64 31 rrcurveto +0 22 rlineto +-56 24 -60 44 -86 95 rrcurveto +closepath +endchar } ND +/arrowdown { +0 500 hsbw +-209 20 hstem +-8 37 hstem +226 49 vstem +75 -8 rmoveto +94 -86 44 -59 24 -56 rrcurveto +23 0 rlineto +30 64 41 54 95 84 rrcurveto +0 37 rlineto +-66 -30 -50 -32 -35 -34 rrcurveto +0 720 rlineto +-49 0 rlineto +0 -720 rlineto +-63 50 -11 7 -77 38 rrcurveto +0 -37 rlineto +closepath +endchar } ND +/arrowboth { +0 1000 hsbw +229 48 hstem +39 922 vstem +961 264 rmoveto +-62 28 -52 39 -84 98 rrcurveto +-39 0 rlineto +22 -56 31 -51 41 -45 rrcurveto +-637 0 rlineto +40 45 32 51 23 56 rrcurveto +-39 0 rlineto +-86 -98 -52 -39 -60 -28 rrcurveto +0 -22 rlineto +60 -28 52 -41 86 -96 rrcurveto +39 0 rlineto +-23 56 -32 50 -40 46 rrcurveto +637 0 rlineto +-41 -46 -31 -50 -22 -56 rrcurveto +39 0 rlineto +84 96 52 41 62 28 rrcurveto +0 22 rlineto +closepath +endchar } ND +/arrowupdn { +0 500 hsbw +-208 20 hstem +-10 39 hstem +477 39 hstem +694 20 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +endchar } ND +/arrowupdnbse { +0 500 hsbw +-303 48 hstem +-208 20 hstem +-10 39 hstem +477 39 hstem +694 20 hstem +226 47 vstem +239 714 rmoveto +-28 -62 -41 -52 -96 -84 rrcurveto +0 -39 rlineto +56 22 50 31 46 42 rrcurveto +0 -638 rlineto +-46 42 -50 31 -56 22 rrcurveto +0 -39 rlineto +96 -84 41 -54 28 -60 rrcurveto +22 0 rlineto +28 60 40 54 96 84 rrcurveto +0 39 rlineto +-56 -22 -50 -31 -46 -42 rrcurveto +0 638 rlineto +46 -42 50 -31 56 -22 rrcurveto +0 39 rlineto +-96 84 -40 52 -28 62 rrcurveto +-22 0 rlineto +closepath +-164 -969 rmoveto +0 -48 rlineto +350 0 rlineto +0 48 rlineto +-350 0 rlineto +closepath +endchar } ND +/orthogonal { +0 979 hsbw +0 49 hstem +177 49 vstem +177 625 rmoveto +0 -625 rlineto +625 0 rlineto +0 49 rlineto +-576 0 rlineto +0 576 rlineto +-49 0 rlineto +closepath +endchar } ND +/intersection { +0 719 hsbw +0 20 hstem +665 64 hstem +77 66 vstem +577 65 vstem +143 0 rmoveto +0 307 rlineto +0 250 60 108 156 0 rrcurveto +160 0 58 -109 0 -249 rrcurveto +0 -307 rlineto +65 0 rlineto +0 303 rlineto +0 324 -85 102 -197 0 rrcurveto +-203 0 -80 -116 0 -310 rrcurveto +0 -303 rlineto +66 0 rlineto +closepath +endchar } ND +/equivalence { +0 584 hsbw +95 83 313 81 530 81 hstem3 +56 472 vstem +528 530 rmoveto +0 81 rlineto +-472 0 rlineto +0 -81 rlineto +472 0 rlineto +closepath +0 -218 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +0 -217 rmoveto +0 82 rlineto +-472 0 rlineto +0 -82 rlineto +472 0 rlineto +closepath +endchar } ND +/house { +0 604 hsbw +0 40 hstem +501 62 hstem +77 39 vstem +488 39 vstem +77 0 rmoveto +450 0 rlineto +0 310 rlineto +-225 253 rlineto +-225 -253 rlineto +0 -310 rlineto +closepath +39 40 rmoveto +0 253 rlineto +186 208 rlineto +186 -208 rlineto +0 -253 rlineto +-372 0 rlineto +closepath +endchar } ND +/revlogicalnot { +0 584 hsbw +421 82 hstem +55 83 vstem +55 207 rmoveto +83 0 rlineto +0 214 rlineto +390 0 rlineto +0 82 rlineto +-473 0 rlineto +0 -296 rlineto +closepath +endchar } ND +/integraltp { +0 604 hsbw +798 50 hstem +267 70 vstem +337 -251 rmoveto +0 962 rlineto +0 49 -9 38 35 0 rrcurveto +7 0 8 -9 7 -9 rrcurveto +13 -21 16 -9 20 0 rrcurveto +24 0 19 18 0 27 rrcurveto +0 28 -24 25 -44 0 rrcurveto +-74 0 -68 -73 0 -142 rrcurveto +0 -884 rlineto +70 0 rlineto +closepath +endchar } ND +/integralbt { +0 604 hsbw +-251 50 hstem +267 70 vstem +267 848 rmoveto +0 -962 rlineto +0 -50 10 -37 -36 0 rrcurveto +-7 0 -8 9 -7 9 rrcurveto +-14 19 -15 11 -20 0 rrcurveto +-24 0 -19 -19 0 -26 rrcurveto +0 -29 24 -24 44 0 rrcurveto +73 0 69 73 0 142 rrcurveto +0 884 rlineto +-70 0 rlineto +closepath +endchar } ND +/SF100000 { +0 708 hsbw +261 85 hstem +-11 730 vstem +719 261 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF110000 { +0 625 hsbw +890 20 hstem +223 86 vstem +223 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF010000 { +0 708 hsbw +261 85 hstem +312 85 vstem +720 346 rmoveto +-408 0 rlineto +0 -649 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +closepath +endchar } ND +/SF030000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF020000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 261 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF040000 { +0 708 hsbw +261 649 hstem +311 85 vstem +396 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF080000 { +0 708 hsbw +261 649 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF090000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -564 rlineto +closepath +endchar } ND +/SF060000 { +0 708 hsbw +261 85 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF070000 { +0 708 hsbw +261 649 hstem +311 85 vstem +719 261 rmoveto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF050000 { +0 708 hsbw +261 649 hstem +311 85 vstem +311 261 rmoveto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF430000 { +0 708 hsbw +168 85 hstem +354 85 hstem +-11 730 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF240000 { +0 708 hsbw +890 20 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF510000 { +0 708 hsbw +168 85 hstem +354 85 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-408 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF520000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-501 0 rlineto +0 -649 rlineto +closepath +endchar } ND +/SF390000 { +0 708 hsbw +168 85 hstem +354 85 hstem +219 85 vstem +404 86 vstem +304 -303 rmoveto +0 657 rlineto +415 0 rlineto +0 85 rlineto +-500 0 rlineto +0 -742 rlineto +85 0 rlineto +closepath +186 471 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/SF220000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 742 rlineto +-407 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF210000 { +0 708 hsbw +261 85 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 649 rlineto +-500 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF250000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 742 rlineto +-500 0 rlineto +0 -85 rlineto +415 0 rlineto +0 -657 rlineto +closepath +-186 471 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF500000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 168 rmoveto +408 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -742 rlineto +closepath +endchar } ND +/SF490000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +720 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -649 rlineto +501 0 rlineto +closepath +endchar } ND +/SF380000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +304 910 rmoveto +-85 0 rlineto +0 -742 rlineto +500 0 rlineto +0 85 rlineto +-415 0 rlineto +0 657 rlineto +closepath +186 -471 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +endchar } ND +/SF280000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +396 168 rmoveto +0 742 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +407 0 rlineto +closepath +endchar } ND +/SF270000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +489 261 rmoveto +0 649 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +500 0 rlineto +closepath +endchar } ND +/SF260000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 910 rmoveto +0 -657 rlineto +-415 0 rlineto +0 -85 rlineto +500 0 rlineto +0 742 rlineto +-85 0 rlineto +closepath +-186 -471 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +endchar } ND +/SF360000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 85 vstem +312 -303 rmoveto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF370000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 86 vstem +404 -303 rmoveto +86 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -1213 rlineto +closepath +-185 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF420000 { +0 708 hsbw +168 85 hstem +354 556 hstem +219 85 vstem +404 86 vstem +219 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +185 657 rmoveto +316 0 rlineto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +closepath +0 -657 rmoveto +86 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-316 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF190000 { +0 708 hsbw +168 85 hstem +354 556 hstem +312 84 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +1 -101 rlineto +-323 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF200000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 1213 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +186 0 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/SF230000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +404 -303 rmoveto +85 0 rlineto +0 1213 rlineto +-85 0 rlineto +0 -1213 rlineto +closepath +-100 1213 rmoveto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +closepath +-86 -742 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +endchar } ND +/SF470000 { +0 708 hsbw +168 85 hstem +354 85 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-408 -186 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF480000 { +0 708 hsbw +261 85 hstem +218 86 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 556 rlineto +100 0 rlineto +0 -556 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF410000 { +0 708 hsbw +168 85 hstem +354 85 hstem +218 86 vstem +404 85 vstem +719 354 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +-501 -186 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +186 -471 rmoveto +85 0 rlineto +0 471 rlineto +230 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +closepath +endchar } ND +/SF450000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +719 354 rmoveto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF460000 { +0 708 hsbw +261 649 hstem +218 86 vstem +404 85 vstem +719 261 rmoveto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF400000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 85 vstem +304 354 rmoveto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +closepath +415 0 rmoveto +0 85 rlineto +-230 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -556 rlineto +315 0 rlineto +closepath +0 -186 rmoveto +0 85 rlineto +-730 0 rlineto +0 -85 rlineto +730 0 rlineto +closepath +endchar } ND +/SF540000 { +0 708 hsbw +168 85 hstem +354 556 hstem +311 85 vstem +311 168 rmoveto +0 -471 rlineto +85 0 rlineto +0 471 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 101 rlineto +323 0 rlineto +0 85 rlineto +-323 0 rlineto +0 471 rlineto +-85 0 rlineto +0 -471 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +0 -101 rlineto +-322 0 rlineto +0 -85 rlineto +322 0 rlineto +closepath +endchar } ND +/SF530000 { +0 708 hsbw +261 649 hstem +219 85 vstem +404 85 vstem +218 -303 rmoveto +86 0 rlineto +0 564 rlineto +100 0 rlineto +0 -564 rlineto +85 0 rlineto +0 564 rlineto +230 0 rlineto +0 85 rlineto +-230 0 rlineto +0 564 rlineto +-85 0 rlineto +0 -564 rlineto +-100 0 rlineto +0 564 rlineto +-86 0 rlineto +0 -564 rlineto +-229 0 rlineto +0 -85 rlineto +230 0 rlineto +-1 -564 rlineto +closepath +endchar } ND +/SF440000 { +0 708 hsbw +168 85 hstem +354 556 hstem +218 86 vstem +404 86 vstem +490 439 rmoveto +0 471 rlineto +-86 0 rlineto +0 -556 rlineto +315 0 rlineto +0 85 rlineto +-229 0 rlineto +closepath +-272 0 rmoveto +-229 0 rlineto +0 -85 rlineto +315 0 rlineto +0 556 rlineto +-86 0 rlineto +0 -471 rlineto +closepath +0 -271 rmoveto +0 -471 rlineto +86 0 rlineto +0 556 rlineto +-315 0 rlineto +0 -85 rlineto +229 0 rlineto +closepath +272 0 rmoveto +229 0 rlineto +0 85 rlineto +-315 0 rlineto +0 -556 rlineto +86 0 rlineto +0 471 rlineto +closepath +endchar } ND +/upblock { +0 708 hsbw +303 607 hstem +-11 730 vstem +719 303 rmoveto +0 607 rlineto +-730 0 rlineto +0 -607 rlineto +730 0 rlineto +closepath +endchar } ND +/dnblock { +0 708 hsbw +-303 606 hstem +-11 730 vstem +719 -303 rmoveto +0 606 rlineto +-730 0 rlineto +0 -606 rlineto +730 0 rlineto +closepath +endchar } ND +/block { +0 708 hsbw +890 20 hstem +-11 730 vstem +-11 -303 rmoveto +730 0 rlineto +0 1213 rlineto +-730 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/lfblock { +0 708 hsbw +890 20 hstem +-11 365 vstem +-11 -303 rmoveto +365 0 rlineto +0 1213 rlineto +-365 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/rtblock { +0 708 hsbw +890 20 hstem +354 366 vstem +354 -303 rmoveto +366 0 rlineto +0 1213 rlineto +-366 0 rlineto +0 -1213 rlineto +closepath +endchar } ND +/ltshade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +50 61 172 60 293 61 vstem3 +415 61 537 60 658 61 vstem3 +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +608 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-366 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +-121 -121 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-244 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-243 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +121 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +244 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/shade { +0 708 hsbw +-246 62 -124 61 -2 60 hstem3 +119 61 241 60 362 61 hstem3 +484 61 606 61 728 61 hstem3 +849 61 hstem +-11 61 vstem +172 60 293 61 415 60 vstem3 +537 61 vstem +659 60 vstem +50 910 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +0 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-548 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-670 -121 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +243 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-487 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +548 -122 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +60 0 rlineto +0 61 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -60 rlineto +61 0 rlineto +0 60 rlineto +-61 0 rlineto +closepath +61 -121 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-121 0 rmoveto +0 -62 rlineto +60 0 rlineto +0 62 rlineto +-60 0 rlineto +closepath +-122 0 rmoveto +0 -62 rlineto +61 0 rlineto +0 62 rlineto +-61 0 rlineto +closepath +-61 -122 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +121 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +122 0 rmoveto +0 -61 rlineto +61 0 rlineto +0 61 rlineto +-61 0 rlineto +closepath +endchar } ND +/dkshade { +0 729 hsbw +-307 61 -184 59 -63 61 hstem3 +57 62 180 60 302 60 hstem3 +423 61 545 61 667 61 hstem3 +789 121 hstem +61 60 vstem +182 61 vstem +365 60 vstem +486 61 vstem +669 60 vstem +729 728 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 121 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +-60 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -183 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 -182 rlineto +61 0 rlineto +0 -62 rlineto +-61 0 rlineto +0 -182 rlineto +729 0 rlineto +0 61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 60 rlineto +60 0 rlineto +0 183 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 182 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 183 rlineto +closepath +-668 61 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +closepath +-121 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-122 0 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +-121 -122 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-365 -122 rmoveto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +closepath +61 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-547 -121 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +243 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +-61 -61 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +182 61 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 61 rlineto +60 0 rlineto +0 -61 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 61 rlineto +61 0 rlineto +0 -61 rlineto +closepath +-121 -61 rmoveto +60 0 rlineto +0 -60 rlineto +-60 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -60 rlineto +-61 0 rlineto +0 60 rlineto +closepath +122 -183 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-60 0 rlineto +0 62 rlineto +60 0 rlineto +0 -62 rlineto +closepath +-121 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-122 0 rmoveto +-61 0 rlineto +0 62 rlineto +61 0 rlineto +0 -62 rlineto +closepath +-121 -60 rmoveto +60 0 rlineto +0 -61 rlineto +-60 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +121 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +122 0 rmoveto +61 0 rlineto +0 -61 rlineto +-61 0 rlineto +0 61 rlineto +closepath +endchar } ND +/filledbox { +0 604 hsbw +0 461 hstem +71 461 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +endchar } ND +/filledrect { +0 1000 hsbw +155 188 hstem +0 1000 vstem +0 343 rmoveto +0 -188 rlineto +1000 0 rlineto +0 188 rlineto +-1000 0 rlineto +closepath +endchar } ND +/triagup { +0 990 hsbw +0 20 hstem +673 20 hstem +148 694 vstem +148 0 rmoveto +694 0 rlineto +-347 693 rlineto +-347 -693 rlineto +closepath +endchar } ND +/triagrt { +0 990 hsbw +-15 20 hstem +672 20 hstem +141 708 vstem +141 692 rmoveto +0 -707 rlineto +708 353 rlineto +-708 354 rlineto +closepath +endchar } ND +/triagdn { +0 990 hsbw +-15 20 hstem +148 694 vstem +842 678 rmoveto +-694 0 rlineto +347 -693 rlineto +347 693 rlineto +closepath +endchar } ND +/triaglf { +0 990 hsbw +-15 20 hstem +672 20 hstem +141 708 vstem +849 692 rmoveto +-708 -354 rlineto +708 -353 rlineto +0 707 rlineto +closepath +endchar } ND +/circle { +0 604 hsbw +67 37 hstem +460 37 hstem +87 37 vstem +480 37 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +0 -37 rmoveto +91 0 87 -88 0 -90 rrcurveto +0 -99 -80 -79 -98 0 rrcurveto +-98 0 -80 79 0 99 rrcurveto +0 89 88 89 90 0 rrcurveto +closepath +endchar } ND +/invbullet { +0 604 hsbw +0 141 hstem +338 141 hstem +63 140 vstem +400 141 vstem +63 0 rmoveto +478 0 rlineto +0 479 rlineto +-478 0 rlineto +0 -479 rlineto +closepath +239 338 rmoveto +54 0 44 -45 0 -54 rrcurveto +0 -54 -44 -44 -54 0 rrcurveto +-55 0 -44 44 0 54 rrcurveto +0 54 44 45 55 0 rrcurveto +closepath +endchar } ND +/invcircle { +0 604 hsbw +0 67 104 356 497 67 hstem3 +21 66 125 355 518 66 vstem3 +21 0 rmoveto +563 0 rlineto +0 564 rlineto +-563 0 rlineto +0 -564 rlineto +closepath +282 497 rmoveto +110 0 105 -104 0 -111 rrcurveto +0 -119 -97 -96 -118 0 rrcurveto +-120 0 -96 96 0 119 rrcurveto +0 111 105 104 111 0 rrcurveto +closepath +0 -37 rmoveto +-91 0 -87 -85 0 -93 rrcurveto +0 -99 79 -79 99 0 rrcurveto +97 0 80 79 0 99 rrcurveto +0 92 -88 86 -89 0 rrcurveto +closepath +endchar } ND +/smileface { +0 1021 hsbw +-58 45 hstem +58 42 hstem +278 79 hstem +519 45 hstem +199 46 vstem +352 79 vstem +590 79 vstem +777 45 vstem +822 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -140 -139 0 -172 rrcurveto +0 -172 140 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-45 0 rmoveto +0 -147 -120 -119 -146 0 rrcurveto +-148 0 -118 119 0 147 rrcurveto +0 146 118 120 148 0 rrcurveto +146 0 120 -120 0 -146 rrcurveto +closepath +-346 64 rmoveto +0 22 -18 18 -22 0 rrcurveto +-22 0 -17 -18 0 -22 rrcurveto +0 -22 17 -17 22 0 rrcurveto +22 0 18 17 0 22 rrcurveto +closepath +238 0 rmoveto +0 22 -18 18 -21 0 rrcurveto +-22 0 -18 -18 0 -22 rrcurveto +0 -22 18 -17 22 0 rrcurveto +21 0 18 17 0 22 rrcurveto +closepath +-302 -164 rmoveto +33 -63 47 -32 64 0 rrcurveto +62 0 49 32 32 63 rrcurveto +-30 17 rlineto +-26 -47 -38 -23 -49 0 rrcurveto +-50 0 -38 23 -26 47 rrcurveto +-30 -17 rlineto +closepath +endchar } ND +/invsmileface { +0 1052 hsbw +-58 116 hstem +170 108 hstem +357 207 hstem +215 152 446 160 685 152 vstem3 +837 253 rmoveto +0 172 -139 139 -172 0 rrcurveto +-172 0 -139 -139 0 -172 rrcurveto +0 -172 139 -139 172 0 rrcurveto +172 0 139 139 0 172 rrcurveto +closepath +-391 64 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-22 0 -18 17 0 22 rrcurveto +0 22 18 18 22 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +239 0 rmoveto +0 -22 -18 -17 -21 0 rrcurveto +-23 0 -17 17 0 22 rrcurveto +0 22 17 18 23 0 rrcurveto +21 0 18 -18 0 -22 rrcurveto +closepath +-302 -164 rmoveto +30 17 rlineto +26 -47 37 -23 50 0 rrcurveto +50 0 37 23 26 47 rrcurveto +31 -17 rlineto +-32 -63 -48 -32 -64 0 rrcurveto +-63 0 -48 32 -32 63 rrcurveto +closepath +endchar } ND +/sun { +0 917 hsbw +-13 369 hstem +591 36 hstem +677 20 hstem +8 200 440 37 709 200 vstem3 +440 792 rmoveto +0 -165 rlineto +-59 -6 -46 -17 -65 -45 rrcurveto +-143 138 rlineto +-23 -28 rlineto +138 -140 rlineto +-46 -55 -19 -47 -5 -69 rrcurveto +-164 0 rlineto +0 -33 rlineto +164 0 rlineto +6 -70 21 -49 44 -54 rrcurveto +-139 -140 rlineto +24 -25 rlineto +144 136 rlineto +52 -40 44 -18 72 -9 rrcurveto +0 -165 rlineto +38 0 rlineto +0 165 rlineto +69 8 38 13 64 48 rrcurveto +138 -138 rlineto +28 24 rlineto +-139 142 rlineto +40 51 23 57 7 62 rrcurveto +163 0 rlineto +0 33 rlineto +-164 0 rlineto +-2 59 -20 55 -48 61 rrcurveto +140 140 rlineto +-25 26 rlineto +-142 -139 rlineto +-58 46 -47 19 -65 4 rrcurveto +0 165 rlineto +-38 0 rlineto +closepath +268 -451 rmoveto +0 -138 -113 -112 -137 0 rrcurveto +-139 0 -111 112 0 138 rrcurveto +0 138 111 112 139 0 rrcurveto +137 0 113 -112 0 -138 rrcurveto +closepath +endchar } ND +/female { +0 750 hsbw +0 29 hstem +225 25 hstem +708 28 hstem +119 28 361 28 604 26 vstem3 +389 225 rmoveto +134 6 107 113 0 136 rrcurveto +0 132 -122 124 -133 0 rrcurveto +-135 0 -121 -123 0 -133 rrcurveto +0 -131 128 -124 113 0 rrcurveto +0 -196 rlineto +-225 0 rlineto +0 -29 rlineto +225 0 rlineto +0 -214 rlineto +29 0 rlineto +0 214 rlineto +224 0 rlineto +0 29 rlineto +-224 0 rlineto +0 196 rlineto +closepath +-14 483 rmoveto +116 0 113 -110 0 -119 rrcurveto +0 -127 -103 -102 -126 0 rrcurveto +-127 0 -102 102 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/male { +0 750 hsbw +-128 26 hstem +357 13 hstem +734 57 hstem +54 27 vstem +539 26 vstem +594 791 rmoveto +-300 -148 rlineto +12 -26 rlineto +262 130 rlineto +-176 -377 rlineto +-29 8 -27 5 -25 0 rrcurveto +-143 0 -114 -114 0 -141 rrcurveto +0 -133 122 -123 134 0 rrcurveto +132 0 123 124 0 132 rrcurveto +0 94 -50 89 -96 48 rrcurveto +175 375 rlineto +69 -283 rlineto +28 7 rlineto +-80 325 rlineto +-17 8 rlineto +closepath +-284 -434 rmoveto +115 0 114 -109 0 -120 rrcurveto +0 -127 -103 -103 -126 0 rrcurveto +-127 0 -102 103 0 127 rrcurveto +0 119 111 110 118 0 rrcurveto +closepath +endchar } ND +/spade { +0 531 hsbw +0 18 hstem +28 243 vstem +266 601 rmoveto +-19 -92 -52 -53 -80 -69 rrcurveto +-47 -40 -40 -43 0 -62 rrcurveto +0 -59 48 -49 59 0 rrcurveto +54 0 44 31 30 62 rrcurveto +2 -139 -69 -70 -120 0 rrcurveto +-4 -18 rlineto +387 0 rlineto +0 18 rlineto +-126 5 -62 72 0 132 rrcurveto +32 -60 41 -33 52 0 rrcurveto +58 0 49 47 0 63 rrcurveto +0 62 -34 36 -70 62 rrcurveto +-78 69 -36 45 -19 83 rrcurveto +closepath +endchar } ND +/club { +0 656 hsbw +0 404 hstem +192 271 vstem +536 0 rmoveto +-4 17 rlineto +-155 29 -41 48 -3 156 rrcurveto +44 -81 54 -35 64 0 rrcurveto +73 0 61 59 0 79 rrcurveto +0 76 -56 57 -65 0 rrcurveto +-31 0 -6 -6 -42 -20 rrcurveto +22 32 12 30 0 30 rrcurveto +0 70 -60 60 -76 0 rrcurveto +-78 0 -57 -59 0 -74 rrcurveto +0 -27 5 -16 28 -46 rrcurveto +-34 16 -27 9 -19 0 rrcurveto +-62 0 -56 -58 0 -76 rrcurveto +0 -78 60 -59 76 0 rrcurveto +58 0 62 35 40 82 rrcurveto +0 -23 rlineto +0 -111 -44 -68 -153 -31 rrcurveto +-4 -17 rlineto +414 0 rlineto +closepath +endchar } ND +/heart { +0 594 hsbw +-12 490 hstem +31 532 vstem +298 -12 rmoveto +26 100 50 68 84 106 rrcurveto +81 103 24 54 0 59 rrcurveto +0 66 -56 57 -70 0 rrcurveto +-69 0 -49 -48 -21 -75 rrcurveto +-27 75 -45 48 -70 0 rrcurveto +-71 0 -54 -56 0 -72 rrcurveto +0 -76 34 -38 81 -106 rrcurveto +108 -142 24 -46 20 -77 rrcurveto +closepath +endchar } ND +/diamond { +0 510 hsbw +-12 20 hstem +31 448 vstem +254 601 rmoveto +-56 -100 -106 -137 -61 -69 rrcurveto +50 -64 30 -36 10 -11 rrcurveto +53 -72 51 -66 30 -58 rrcurveto +51 93 126 163 47 51 rrcurveto +-60 65 -107 142 -58 99 rrcurveto +closepath +endchar } ND +/musicalnote { +0 500 hsbw +-18 230 hstem +554 112 hstem +237 49 vstem +434 48 vstem +237 666 rmoveto +0 -477 rlineto +-32 15 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -66 44 -43 71 0 rrcurveto +89 0 64 56 0 108 rrcurveto +0 408 rlineto +13 0 rlineto +69 0 66 -32 0 -75 rrcurveto +0 -21 rlineto +48 0 rlineto +0 50 rlineto +0 145 -52 45 -174 0 rrcurveto +-19 0 rlineto +closepath +endchar } ND +/musicalnotedbl { +0 750 hsbw +39 229 hstem +261 48 vstem +600 49 vstem +261 621 rmoveto +0 -476 rlineto +-32 14 -28 8 -25 0 rrcurveto +-80 0 -54 -53 0 -68 rrcurveto +0 -64 44 -45 71 0 rrcurveto +88 0 64 58 0 107 rrcurveto +0 408 rlineto +291 90 rlineto +0 -353 rlineto +-46 18 -12 3 -25 0 rrcurveto +-80 0 -55 -55 0 -65 rrcurveto +0 -64 45 -45 72 0 rrcurveto +87 0 63 52 0 110 rrcurveto +0 541 rlineto +-388 -121 rlineto +closepath +endchar } ND +/IJ { +0 733 hsbw +-12 79 hstem +696 20 hstem +57 96 vstem +267 88 vstem +674 95 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +217 208 rmoveto +-5 -21 -2 -21 0 -22 rrcurveto +0 -99 60 -57 119 0 rrcurveto +112 0 71 58 31 147 rrcurveto +109 523 rlineto +-95 0 rlineto +-107 -508 rlineto +-19 -95 -28 -46 -72 0 rrcurveto +-59 0 -34 33 0 54 rrcurveto +0 12 2 21 6 28 rrcurveto +-89 -7 rlineto +closepath +endchar } ND +/ij { +0 444 hsbw +-208 80 hstem +0 20 hstem +499 20 hstem +616 100 hstem +29 88 vstem +158 88 vstem +364 88 vstem +158 616 rmoveto +88 0 rlineto +21 100 rlineto +-88 0 rlineto +-21 -100 rlineto +closepath +-129 -616 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +356 616 rmoveto +88 0 rlineto +21 100 rlineto +-88 0 rlineto +-21 -100 rlineto +closepath +-280 -811 rmoveto +33 -8 28 -5 23 0 rrcurveto +98 0 29 67 24 120 rrcurveto +112 540 rlineto +-88 0 rlineto +-109 -524 rlineto +-24 -113 -19 -10 -37 0 rrcurveto +-16 0 -18 3 -20 5 rrcurveto +-16 -75 rlineto +closepath +endchar } ND +/napostrophe { +0 615 hsbw +0 20 hstem +458 72 hstem +613 100 hstem +95 89 vstem +204 80 vstem +502 88 vstem +95 0 rmoveto +89 0 rlineto +50 241 rlineto +33 158 75 59 91 0 rrcurveto +44 0 25 -25 0 -34 rrcurveto +0 -16 -4 -23 -6 -31 rrcurveto +-69 -329 rlineto +88 0 rlineto +66 314 rlineto +8 41 5 30 0 20 rrcurveto +0 76 -51 49 -84 0 rrcurveto +-63 0 -58 -32 -69 -70 rrcurveto +19 91 rlineto +-80 0 rlineto +-109 -519 rlineto +closepath +-15 613 rmoveto +54 0 rlineto +-13 -61 -25 -36 -38 -10 rrcurveto +-9 -38 rlineto +64 8 48 43 22 106 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/minute { +0 188 hsbw +462 254 hstem +127 55 vstem +127 462 rmoveto +55 0 rlineto +51 134 rlineto +26 120 rlineto +-101 0 rlineto +-25 -120 rlineto +-6 -134 rlineto +closepath +endchar } ND +/second { +0 354 hsbw +462 254 hstem +135 55 vstem +297 55 vstem +135 462 rmoveto +55 0 rlineto +51 134 rlineto +26 120 rlineto +-100 0 rlineto +-26 -120 rlineto +-6 -134 rlineto +closepath +162 0 rmoveto +55 0 rlineto +51 134 rlineto +26 120 rlineto +-101 0 rlineto +-25 -120 rlineto +-6 -134 rlineto +closepath +endchar } ND +/afii61248 { +0 885 hsbw +-8 47 hstem +321 407 hstem +90 62 vstem +345 60 vstem +529 62 vstem +718 80 vstem +810 60 vstem +127 -26 rmoveto +82 0 rlineto +589 754 rlineto +-80 0 rlineto +-591 -754 rlineto +closepath +195 511 rmoveto +-20 -63 -40 -29 -40 0 rrcurveto +-40 0 -30 30 0 63 rrcurveto +0 74 35 111 87 0 rrcurveto +42 0 29 -27 0 -46 rrcurveto +60 5 rlineto +0 70 -48 49 -78 0 rrcurveto +-118 0 -71 -123 0 -110 rrcurveto +0 -91 53 -53 78 0 rrcurveto +72 0 59 43 32 90 rrcurveto +-62 7 rlineto +closepath +207 -348 rmoveto +0 -88 59 -57 88 0 rrcurveto +106 0 88 89 0 138 rrcurveto +0 90 -58 59 -85 0 rrcurveto +-114 0 -84 -91 0 -140 rrcurveto +closepath +62 6 rmoveto +0 75 52 103 81 0 rrcurveto +49 0 37 -38 0 -64 rrcurveto +0 -87 -54 -93 -80 0 rrcurveto +-50 0 -35 36 0 68 rrcurveto +closepath +endchar } ND +/afii61289 { +0 323 hsbw +-12 67 hstem +670 58 hstem +36 83 vstem +354 68 vstem +12 286 rmoveto +30 -54 rlineto +44 33 rlineto +-33 -106 rlineto +-12 -37 -5 -29 0 -22 rrcurveto +0 -51 32 -32 54 0 rrcurveto +32 0 36 13 40 26 rrcurveto +20 82 rlineto +-78 -50 -14 -4 -20 0 rrcurveto +-12 0 -7 7 0 16 rrcurveto +0 9 3 15 7 21 rrcurveto +71 229 rlineto +130 109 92 100 0 75 rrcurveto +0 50 -41 42 -57 0 rrcurveto +-76 0 -35 -51 -29 -95 rrcurveto +-67 -217 rlineto +-105 -79 rlineto +closepath +223 179 rmoveto +39 128 rlineto +12 45 10 32 30 0 rrcurveto +16 0 12 -12 0 -24 rrcurveto +0 -38 -19 -35 -100 -96 rrcurveto +closepath +endchar } ND +/H22073 { +0 604 hsbw +0 37 hstem +424 37 hstem +71 37 vstem +495 37 vstem +71 461 rmoveto +0 -461 rlineto +461 0 rlineto +0 461 rlineto +-461 0 rlineto +closepath +37 -37 rmoveto +387 0 rlineto +0 -387 rlineto +-387 0 rlineto +0 387 rlineto +closepath +endchar } ND +/H18543 { +0 354 hsbw +217 227 hstem +64 226 vstem +290 444 rmoveto +-226 -1 rlineto +0 -226 rlineto +226 0 rlineto +0 227 rlineto +closepath +endchar } ND +/H18551 { +0 354 hsbw +217 37 hstem +64 37 vstem +253 37 vstem +290 444 rmoveto +-226 -1 rlineto +0 -226 rlineto +226 0 rlineto +0 227 rlineto +closepath +-37 -37 rmoveto +0 -153 rlineto +-152 0 rlineto +0 152 rlineto +152 1 rlineto +closepath +endchar } ND +/H18533 { +0 604 hsbw +67 430 hstem +87 430 vstem +302 497 rmoveto +-110 0 -105 -104 0 -111 rrcurveto +0 -119 96 -96 119 0 rrcurveto +118 0 97 96 0 119 rrcurveto +0 110 -104 105 -111 0 rrcurveto +closepath +endchar } ND +/openbullet { +0 354 hsbw +208 37 hstem +416 37 hstem +55 37 vstem +263 37 vstem +177 453 rmoveto +-68 0 -54 -56 0 -66 rrcurveto +0 -68 54 -55 68 0 rrcurveto +68 0 55 55 0 68 rrcurveto +0 66 -55 56 -68 0 rrcurveto +closepath +0 -37 rmoveto +48 0 38 -39 0 -46 rrcurveto +0 -48 -40 -38 -46 0 rrcurveto +-47 0 -38 38 0 48 rrcurveto +0 46 38 39 47 0 rrcurveto +closepath +endchar } ND +/Amacron { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +777 68 hstem +-20 105 vstem +386 113 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +59 497 rmoveto +304 0 rlineto +14 68 rlineto +-304 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/amacron { +0 556 hsbw +-12 69 hstem +458 72 hstem +600 68 hstem +44 88 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-206 337 rmoveto +303 0 rlineto +14 68 rlineto +-303 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/Ccircumflex { +0 722 hsbw +-12 79 hstem +649 79 hstem +847 47 hstem +91 95 vstem +340 91 vstem +551 77 vstem +603 252 rmoveto +-36 -118 -86 -67 -100 0 rrcurveto +-116 0 -79 79 0 147 rrcurveto +0 183 108 173 175 0 rrcurveto +93 0 60 -52 19 -102 rrcurveto +89 8 rlineto +-15 137 -99 88 -152 0 rrcurveto +-225 0 -148 -197 0 -236 rrcurveto +0 -198 109 -109 174 0 rrcurveto +142 0 122 85 60 166 rrcurveto +-95 13 rlineto +closepath +-263 508 rmoveto +91 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/ccircumflex { +0 500 hsbw +-12 69 hstem +458 72 hstem +668 48 hstem +56 90 vstem +196 91 vstem +406 77 vstem +391 189 rmoveto +-30 -90 -57 -42 -57 0 rrcurveto +-58 0 -43 44 0 88 rrcurveto +0 110 48 159 127 0 rrcurveto +61 0 40 -40 2 -65 rrcurveto +87 5 rlineto +0 104 -71 68 -110 0 rrcurveto +-171 0 -103 -176 0 -158 rrcurveto +0 -131 76 -77 114 0 rrcurveto +104 0 85 62 44 130 rrcurveto +-88 9 rlineto +closepath +-195 393 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/Cdot { +0 722 hsbw +-12 79 hstem +649 79 hstem +760 109 hstem +91 95 vstem +436 108 vstem +603 252 rmoveto +-36 -118 -86 -67 -100 0 rrcurveto +-116 0 -79 79 0 147 rrcurveto +0 183 108 173 175 0 rrcurveto +93 0 60 -52 19 -102 rrcurveto +89 8 rlineto +-15 137 -99 88 -152 0 rrcurveto +-225 0 -148 -197 0 -236 rrcurveto +0 -198 109 -109 174 0 rrcurveto +142 0 122 85 60 166 rrcurveto +-95 13 rlineto +closepath +-167 508 rmoveto +108 0 rlineto +23 109 rlineto +-109 0 rlineto +-22 -109 rlineto +closepath +endchar } ND +/cdot { +0 500 hsbw +-12 69 hstem +458 72 hstem +590 109 hstem +56 90 vstem +278 108 vstem +391 189 rmoveto +-30 -90 -57 -42 -57 0 rrcurveto +-58 0 -43 44 0 88 rrcurveto +0 110 48 159 127 0 rrcurveto +61 0 40 -40 2 -65 rrcurveto +87 5 rlineto +0 104 -71 68 -110 0 rrcurveto +-171 0 -103 -176 0 -158 rrcurveto +0 -131 76 -77 114 0 rrcurveto +104 0 85 62 44 130 rrcurveto +-88 9 rlineto +closepath +-113 401 rmoveto +108 0 rlineto +24 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/Emacron { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +777 68 hstem +311 303 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +266 777 rmoveto +303 0 rlineto +14 68 rlineto +-303 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/emacron { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +600 68 hstem +52 89 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +48 295 rmoveto +303 0 rlineto +14 68 rlineto +-303 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/Ebreve { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +759 59 hstem +319 58 vstem +553 59 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +274 886 rmoveto +4 -78 52 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -36 -25 -46 0 rrcurveto +-46 0 -24 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/ebreve { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +567 127 hstem +52 89 vstem +220 58 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +63 389 rmoveto +4 -78 51 -49 76 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -24 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/Edot { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +760 109 hstem +408 108 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +363 760 rmoveto +108 0 rlineto +24 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/edot { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +590 109 hstem +52 89 vstem +306 108 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +149 285 rmoveto +108 0 rlineto +24 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/Gcircumflex { +0 778 hsbw +-12 79 hstem +282 81 hstem +648 80 hstem +847 47 hstem +97 97 vstem +368 91 vstem +579 77 vstem +410 282 rmoveto +217 0 rlineto +-32 -154 rlineto +-72 -41 -66 -20 -62 0 rrcurveto +-126 0 -75 74 0 144 rrcurveto +0 187 117 176 176 0 rrcurveto +100 0 65 -54 20 -98 rrcurveto +94 10 rlineto +-30 149 -107 73 -139 0 rrcurveto +-232 0 -161 -208 0 -233 rrcurveto +0 -184 107 -115 192 0 rrcurveto +97 0 107 34 79 50 rrcurveto +61 291 rlineto +-313 0 rlineto +-17 -81 rlineto +closepath +-42 478 rmoveto +91 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/gcircumflex { +0 556 hsbw +-208 73 hstem +0 72 hstem +459 71 hstem +668 48 hstem +49 90 vstem +212 91 vstem +422 78 vstem +26 -47 rmoveto +0 -26 rlineto +0 -92 95 -43 102 0 rrcurveto +131 0 75 84 31 142 rrcurveto +104 501 rlineto +-81 0 rlineto +-17 -85 rlineto +-37 64 -52 32 -68 0 rrcurveto +-144 0 -116 -154 0 -154 rrcurveto +0 -142 80 -80 104 0 rrcurveto +52 0 49 23 46 47 rrcurveto +-9 -42 rlineto +-26 -123 -25 -40 -107 0 rrcurveto +-26 0 -20 4 -16 7 rrcurveto +-24 11 -11 18 2 40 rrcurveto +-92 8 rlineto +closepath +113 276 rmoveto +0 69 69 161 103 0 rrcurveto +69 0 54 -55 0 -85 rrcurveto +0 -105 -81 -142 -102 0 rrcurveto +-70 0 -42 62 0 95 rrcurveto +closepath +73 353 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/Gdot { +0 778 hsbw +-12 79 hstem +282 81 hstem +648 80 hstem +760 109 hstem +97 97 vstem +454 108 vstem +410 282 rmoveto +217 0 rlineto +-32 -154 rlineto +-72 -41 -66 -20 -62 0 rrcurveto +-126 0 -75 74 0 144 rrcurveto +0 187 117 176 176 0 rrcurveto +100 0 65 -54 20 -98 rrcurveto +94 10 rlineto +-30 149 -107 73 -139 0 rrcurveto +-232 0 -161 -208 0 -233 rrcurveto +0 -184 107 -115 192 0 rrcurveto +97 0 107 34 79 50 rrcurveto +61 291 rlineto +-313 0 rlineto +-17 -81 rlineto +closepath +44 478 rmoveto +108 0 rlineto +23 109 rlineto +-108 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/gdot { +0 556 hsbw +-208 73 hstem +0 72 hstem +459 71 hstem +590 109 hstem +49 90 vstem +306 109 vstem +483 81 vstem +26 -47 rmoveto +0 -26 rlineto +0 -92 95 -43 102 0 rrcurveto +131 0 75 84 31 142 rrcurveto +104 501 rlineto +-81 0 rlineto +-17 -85 rlineto +-37 64 -52 32 -68 0 rrcurveto +-144 0 -116 -154 0 -154 rrcurveto +0 -142 80 -80 104 0 rrcurveto +52 0 49 23 46 47 rrcurveto +-9 -42 rlineto +-26 -123 -25 -40 -107 0 rrcurveto +-26 0 -20 4 -16 7 rrcurveto +-24 11 -11 18 2 40 rrcurveto +-92 8 rlineto +closepath +113 276 rmoveto +0 69 69 161 103 0 rrcurveto +69 0 54 -55 0 -85 rrcurveto +0 -105 -81 -142 -102 0 rrcurveto +-70 0 -42 62 0 95 rrcurveto +closepath +167 361 rmoveto +109 0 rlineto +23 109 rlineto +-109 0 rlineto +-23 -109 rlineto +closepath +endchar } ND +/Gcedilla { +0 778 hsbw +-208 60 hstem +-12 79 hstem +282 81 hstem +648 80 hstem +97 97 vstem +368 85 vstem +372 -12 rmoveto +25 0 rlineto +98 0 94 28 90 56 rrcurveto +61 291 rlineto +-313 0 rlineto +-17 -81 rlineto +217 0 rlineto +-32 -154 rlineto +-72 -41 -66 -20 -61 0 rrcurveto +-114 0 -88 60 0 160 rrcurveto +0 208 120 153 174 0 rrcurveto +101 0 65 -59 18 -93 rrcurveto +94 10 rlineto +-31 146 -104 76 -140 0 rrcurveto +-233 0 -161 -216 0 -227 rrcurveto +0 -144 73 -115 136 -29 rrcurveto +-17 -70 rlineto +52 0 27 -14 0 -27 rrcurveto +0 -22 -29 -12 -56 0 rrcurveto +-69 0 rlineto +-11 -54 rlineto +24 -4 27 -2 30 0 rrcurveto +112 0 57 29 0 57 rrcurveto +0 40 -31 38 -57 6 rrcurveto +7 26 rlineto +closepath +endchar } ND +/gcedilla { +0 556 hsbw +-208 73 hstem +0 72 hstem +459 71 hstem +571 86 hstem +49 90 vstem +283 102 vstem +483 81 vstem +403 657 rmoveto +-47 0 rlineto +13 35 23 24 33 13 rrcurveto +-18 41 rlineto +-59 -22 -37 -48 -16 -72 rrcurveto +-12 -57 rlineto +102 0 rlineto +18 86 rlineto +closepath +-377 -704 rmoveto +0 -25 rlineto +0 -90 72 -46 123 0 rrcurveto +105 0 94 37 40 189 rrcurveto +104 501 rlineto +-81 0 rlineto +-17 -85 rlineto +-37 64 -52 32 -68 0 rrcurveto +-147 0 -113 -161 0 -148 rrcurveto +0 -138 76 -83 110 0 rrcurveto +50 0 49 23 46 47 rrcurveto +-9 -42 rlineto +-25 -110 -32 -53 -99 0 rrcurveto +-66 0 -32 23 0 46 rrcurveto +0 11 rlineto +-91 8 rlineto +closepath +113 255 rmoveto +0 136 76 115 98 0 rrcurveto +65 0 55 -54 0 -86 rrcurveto +0 -123 -80 -124 -102 0 rrcurveto +-68 0 -44 62 0 74 rrcurveto +closepath +endchar } ND +/Hcircumflex { +0 722 hsbw +0 418 hstem +696 20 hstem +847 47 hstem +37 101 192 86 337 91 vstem3 +547 78 vstem +658 96 vstem +42 0 rmoveto +96 0 rlineto +70 337 rlineto +371 0 rlineto +-70 -337 rlineto +95 0 rlineto +150 716 rlineto +-96 0 rlineto +-62 -298 rlineto +-371 0 rlineto +62 298 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +295 760 rmoveto +91 0 rlineto +80 87 rlineto +39 -87 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/hcircumflex { +0 556 hsbw +0 20 hstem +458 72 hstem +696 20 hstem +847 47 hstem +33 89 vstem +183 88 vstem +441 88 vstem +33 0 rmoveto +89 0 rlineto +46 223 rlineto +29 147 64 88 112 0 rrcurveto +44 0 24 -25 0 -33 rrcurveto +0 -12 -5 -29 -9 -45 rrcurveto +-66 -314 rlineto +88 0 rlineto +64 306 rlineto +10 48 6 34 0 19 rrcurveto +0 73 -50 50 -86 0 rrcurveto +-60 0 -54 -25 -65 -64 rrcurveto +57 275 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +201 760 rmoveto +91 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/Hbar { +0 722 hsbw +0 418 hstem +535 181 hstem +42 96 vstem +192 95 vstem +509 95 vstem +621 95 vstem +154 535 rmoveto +-112 -535 rlineto +96 0 rlineto +70 337 rlineto +371 0 rlineto +-70 -337 rlineto +95 0 rlineto +112 535 rlineto +67 0 rlineto +14 65 rlineto +-67 0 rlineto +24 116 rlineto +-96 0 rlineto +-24 -116 rlineto +-371 0 rlineto +24 116 rlineto +-95 0 rlineto +-25 -116 rlineto +-66 0 rlineto +-14 -65 rlineto +67 0 rlineto +closepath +96 0 rmoveto +371 0 rlineto +-25 -117 rlineto +-371 0 rlineto +25 117 rlineto +closepath +endchar } ND +/hbar { +0 556 hsbw +0 20 hstem +458 72 hstem +584 132 hstem +33 89 vstem +169 88 vstem +441 88 vstem +244 584 rmoveto +162 0 rlineto +14 66 rlineto +-163 0 rlineto +14 66 rlineto +-88 0 rlineto +-14 -66 rlineto +-62 0 rlineto +-14 -66 rlineto +62 0 rlineto +-122 -584 rlineto +89 0 rlineto +46 223 rlineto +27 135 62 100 114 0 rrcurveto +45 0 25 -24 0 -33 rrcurveto +0 -13 -5 -29 -9 -45 rrcurveto +-66 -314 rlineto +88 0 rlineto +64 306 rlineto +10 48 6 35 0 22 rrcurveto +0 72 -53 47 -80 0 rrcurveto +-62 0 -61 -30 -59 -59 rrcurveto +30 143 rlineto +closepath +endchar } ND +/Itilde { +0 278 hsbw +0 20 hstem +696 20 hstem +801 68 hstem +107 61 vstem +207 95 vstem +378 60 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +50 760 rmoveto +61 0 rlineto +6 28 13 13 22 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 13 0 rrcurveto +48 0 42 40 7 67 rrcurveto +-60 0 rlineto +-7 -30 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -27 11 rrcurveto +-39 16 -17 9 -28 0 rrcurveto +-48 0 -30 -23 -22 -86 rrcurveto +closepath +endchar } ND +/itilde { +0 278 hsbw +0 20 hstem +499 20 hstem +638 68 hstem +48 61 vstem +138 89 vstem +319 59 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +18 597 rmoveto +61 0 rlineto +6 28 13 13 22 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 13 0 rrcurveto +48 0 42 40 6 67 rrcurveto +-59 0 rlineto +-8 -30 -12 -8 -14 0 rrcurveto +-10 0 -17 5 -26 11 rrcurveto +-40 17 -15 8 -30 0 rrcurveto +-47 0 -31 -23 -21 -86 rrcurveto +closepath +endchar } ND +/Imacron { +0 278 hsbw +0 20 hstem +696 20 hstem +777 68 hstem +57 96 vstem +207 95 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +56 777 rmoveto +303 0 rlineto +14 68 rlineto +-303 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/imacron { +0 278 hsbw +0 20 hstem +499 20 hstem +600 68 hstem +30 88 vstem +138 89 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +21 600 rmoveto +303 0 rlineto +15 68 rlineto +-304 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/Ibreve { +0 278 hsbw +0 20 hstem +696 20 hstem +759 59 hstem +139 57 vstem +207 95 vstem +373 58 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +82 886 rmoveto +4 -78 51 -49 76 0 rrcurveto +76 0 63 49 22 78 rrcurveto +-58 0 rlineto +-19 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/ibreve { +0 278 hsbw +0 20 hstem +499 20 hstem +567 127 hstem +70 57 vstem +138 89 vstem +304 58 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +40 694 rmoveto +4 -78 51 -49 76 0 rrcurveto +76 0 63 49 22 78 rrcurveto +-58 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -23 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/Iogonek { +0 278 hsbw +-208 65 hstem +0 20 hstem +696 20 hstem +28 62 vstem +207 95 vstem +57 0 rmoveto +-20 -52 -9 -39 0 -28 rrcurveto +0 -59 30 -30 60 0 rrcurveto +32 0 33 10 36 18 rrcurveto +12 58 rlineto +-35 -14 -28 -7 -21 0 rrcurveto +-31 0 -26 18 0 40 rrcurveto +0 20 7 29 15 36 rrcurveto +41 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/iogonek { +0 222 hsbw +-208 65 hstem +0 20 hstem +499 20 hstem +616 100 hstem +0 63 vstem +139 88 vstem +159 616 rmoveto +88 0 rlineto +21 100 rlineto +-88 0 rlineto +-21 -100 rlineto +closepath +-129 -616 rmoveto +-20 -44 -10 -39 0 -35 rrcurveto +0 -60 30 -30 60 0 rrcurveto +32 0 34 10 36 18 rrcurveto +12 58 rlineto +-35 -14 -28 -7 -21 0 rrcurveto +-32 0 -25 18 0 40 rrcurveto +0 20 7 29 15 36 rrcurveto +34 0 rlineto +108 519 rlineto +-88 0 rlineto +-109 -519 rlineto +closepath +endchar } ND +/Jcircumflex { +0 500 hsbw +-12 79 hstem +696 20 hstem +847 47 hstem +33 89 vstem +338 91 vstem +440 96 vstem +548 77 vstem +41 208 rmoveto +-6 -21 -2 -21 0 -22 rrcurveto +0 -99 61 -57 119 0 rrcurveto +110 0 73 58 31 147 rrcurveto +109 523 rlineto +-96 0 rlineto +-106 -508 rlineto +-19 -95 -28 -46 -72 0 rrcurveto +-59 0 -34 33 0 54 rrcurveto +0 12 2 21 5 28 rrcurveto +-88 -7 rlineto +closepath +297 552 rmoveto +91 0 rlineto +80 87 rlineto +39 -87 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/jcircumflex { +0 222 hsbw +-208 80 hstem +499 20 hstem +668 48 hstem +43 91 vstem +137 89 vstem +253 78 vstem +43 582 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +-164 -777 rmoveto +33 -8 28 -5 23 0 rrcurveto +86 0 36 51 28 136 rrcurveto +113 540 rlineto +-89 0 rlineto +-109 -524 rlineto +-22 -105 -15 -18 -43 0 rrcurveto +-16 0 -18 3 -19 5 rrcurveto +-16 -75 rlineto +closepath +endchar } ND +/Kcedilla { +0 667 hsbw +-208 60 hstem +-77 52 hstem +0 20 hstem +371 345 hstem +44 96 vstem +194 96 vstem +317 84 vstem +545 107 vstem +44 0 rmoveto +96 0 rlineto +49 232 rlineto +150 131 rlineto +206 -363 rlineto +107 0 rlineto +-243 424 rlineto +332 292 rlineto +-135 0 rlineto +-388 -345 rlineto +72 345 rlineto +-96 0 rlineto +-150 -716 rlineto +closepath +196 -25 rmoveto +-11 -52 rlineto +17 0 rlineto +47 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-12 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -46 34 -90 0 rrcurveto +-5 -1 rlineto +-20 0 rlineto +closepath +endchar } ND +/kcedilla { +0 500 hsbw +-208 60 hstem +-77 52 hstem +0 20 hstem +499 20 hstem +696 20 hstem +34 89 vstem +233 85 vstem +370 96 vstem +34 0 rmoveto +89 0 rlineto +36 173 rlineto +107 93 rlineto +104 -266 rlineto +96 0 rlineto +-133 325 rlineto +221 194 rlineto +-117 0 rlineto +-258 -247 rlineto +93 444 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +123 -25 rmoveto +-12 -52 rlineto +17 0 rlineto +47 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-57 0 rlineto +-12 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -45 34 -92 0 rrcurveto +-5 -1 rlineto +-19 0 rlineto +closepath +endchar } ND +/kgreenlandic { +0 500 hsbw +0 20 hstem +272 247 hstem +34 89 vstem +143 88 vstem +370 96 vstem +34 0 rmoveto +89 0 rlineto +36 173 rlineto +107 93 rlineto +104 -266 rlineto +96 0 rlineto +-133 325 rlineto +221 194 rlineto +-117 0 rlineto +-257 -247 rlineto +51 247 rlineto +-88 0 rlineto +-109 -519 rlineto +closepath +endchar } ND +/Lcedilla { +0 556 hsbw +-208 60 hstem +-77 52 hstem +0 81 hstem +696 20 hstem +261 85 vstem +40 0 rmoveto +467 0 rlineto +17 81 rlineto +-371 0 rlineto +132 635 rlineto +-96 0 rlineto +-149 -716 rlineto +closepath +145 -25 rmoveto +-12 -52 rlineto +17 0 rlineto +47 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-11 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -47 34 -90 0 rrcurveto +-5 -1 rlineto +-19 0 rlineto +closepath +endchar } ND +/lcedilla { +0 222 hsbw +-208 60 hstem +-77 52 hstem +0 20 hstem +696 20 hstem +94 85 vstem +26 0 rmoveto +89 0 rlineto +149 716 rlineto +-88 0 rlineto +-150 -716 rlineto +closepath +-8 -25 rmoveto +-12 -52 rlineto +17 0 rlineto +47 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-11 -54 rlineto +30 -4 31 -2 30 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -47 34 -90 0 rrcurveto +-5 -1 rlineto +-19 0 rlineto +closepath +endchar } ND +/Ncedilla { +0 722 hsbw +-208 60 hstem +-77 52 hstem +0 108 hstem +606 110 hstem +41 101 199 80 344 85 vstem3 +513 94 vstem +664 93 vstem +49 0 rmoveto +93 0 rlineto +91 435 rlineto +14 68 9 57 5 46 rrcurveto +18 -56 24 -64 32 -72 rrcurveto +178 -414 rlineto +94 0 rlineto +150 716 rlineto +-93 0 rlineto +-88 -421 rlineto +-14 -64 -11 -63 -9 -60 rrcurveto +-42 143 -28 66 -60 130 rrcurveto +-120 269 rlineto +-93 0 rlineto +-150 -716 rlineto +closepath +219 -25 rmoveto +-12 -52 rlineto +17 0 rlineto +47 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-11 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -47 34 -90 0 rrcurveto +-5 -1 rlineto +-19 0 rlineto +closepath +endchar } ND +/ncedilla { +0 556 hsbw +-208 60 hstem +-77 52 hstem +0 20 hstem +458 72 hstem +33 89 vstem +142 80 vstem +262 84 vstem +440 88 vstem +33 0 rmoveto +89 0 rlineto +50 241 rlineto +33 158 75 59 91 0 rrcurveto +44 0 25 -25 0 -34 rrcurveto +0 -16 -4 -23 -6 -31 rrcurveto +-69 -329 rlineto +88 0 rlineto +66 314 rlineto +8 41 5 30 0 20 rrcurveto +0 76 -51 49 -84 0 rrcurveto +-63 0 -58 -32 -69 -70 rrcurveto +19 91 rlineto +-80 0 rlineto +-109 -519 rlineto +closepath +152 -25 rmoveto +-12 -52 rlineto +17 0 rlineto +48 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-12 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -45 34 -92 0 rrcurveto +-5 -1 rlineto +-19 0 rlineto +closepath +endchar } ND +/Eng { +0 723 hsbw +-13 82 hstem +646 82 hstem +48 96 vstem +195 96 vstem +613 102 vstem +195 716 rmoveto +-147 -716 rlineto +96 0 rlineto +84 410 rlineto +26 130 89 106 120 0 rrcurveto +88 0 62 -60 0 -129 rrcurveto +0 -154 -21 -234 -173 0 rrcurveto +-27 0 -26 7 -24 14 rrcurveto +-47 -67 rlineto +33 -24 46 -12 59 0 rrcurveto +214 0 68 277 0 187 rrcurveto +0 172 -89 105 -142 0 rrcurveto +-82 0 -70 -33 -59 -66 rrcurveto +18 87 rlineto +-96 0 rlineto +closepath +endchar } ND +/eng { +0 556 hsbw +-208 80 hstem +0 20 hstem +458 72 hstem +36 88 vstem +144 80 vstem +442 88 vstem +518 314 rmoveto +8 42 4 32 0 22 rrcurveto +0 69 -54 51 -77 0 rrcurveto +-65 0 -65 -34 -64 -68 rrcurveto +19 91 rlineto +-80 0 rlineto +-108 -519 rlineto +88 0 rlineto +50 241 rlineto +34 162 78 55 86 0 rrcurveto +46 0 24 -20 0 -40 rrcurveto +0 -14 -4 -23 -6 -32 rrcurveto +-69 -334 rlineto +-20 -101 -15 -22 -44 0 rrcurveto +-14 0 -16 4 -16 6 rrcurveto +-32 -73 rlineto +36 -11 32 -6 26 0 rrcurveto +82 0 38 50 28 137 rrcurveto +70 335 rlineto +closepath +endchar } ND +/Omacron { +0 778 hsbw +-12 79 hstem +648 80 hstem +777 68 hstem +91 95 vstem +346 303 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +160 482 rmoveto +303 0 rlineto +15 68 rlineto +-304 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/omacron { +0 556 hsbw +-12 69 hstem +462 68 hstem +600 68 hstem +49 88 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +72 394 rmoveto +304 0 rlineto +14 68 rlineto +-303 0 rlineto +-15 -68 rlineto +closepath +endchar } ND +/Obreve { +0 778 hsbw +-12 79 hstem +648 80 hstem +759 59 hstem +91 95 vstem +365 58 vstem +599 59 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +179 591 rmoveto +4 -78 51 -49 76 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -24 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/obreve { +0 556 hsbw +-12 69 hstem +462 68 hstem +567 127 hstem +49 88 vstem +228 57 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +91 488 rmoveto +2 -78 53 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -36 -25 -46 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/Rcedilla { +0 722 hsbw +-208 60 hstem +-77 52 hstem +0 20 hstem +318 78 hstem +637 79 hstem +47 101 353 76 639 91 vstem3 +47 0 rmoveto +96 0 rlineto +66 318 rlineto +111 0 rlineto +144 0 13 -84 39 -101 rrcurveto +51 -133 rlineto +107 0 rlineto +-54 135 rlineto +-29 67 -30 65 -73 55 rrcurveto +170 22 72 80 0 118 rrcurveto +0 127 -87 47 -146 0 rrcurveto +-300 0 rlineto +-150 -716 rlineto +closepath +178 396 rmoveto +51 241 rlineto +233 0 rlineto +84 0 46 -29 0 -65 rrcurveto +0 -123 -98 -24 -184 0 rrcurveto +-132 0 rlineto +closepath +43 -421 rmoveto +-12 -52 rlineto +17 0 rlineto +48 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-12 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -45 34 -92 0 rrcurveto +-5 -1 rlineto +-19 0 rlineto +closepath +endchar } ND +/rcedilla { +0 333 hsbw +-208 60 hstem +-77 52 hstem +0 20 hstem +446 84 hstem +33 84 vstem +138 84 vstem +33 0 rmoveto +84 0 rlineto +44 208 rlineto +37 178 73 60 62 0 rrcurveto +18 0 16 -6 16 -11 rrcurveto +36 82 rlineto +-26 12 -21 7 -18 0 rrcurveto +-54 0 -49 -37 -53 -80 rrcurveto +22 106 rlineto +-78 0 rlineto +-109 -519 rlineto +closepath +28 -25 rmoveto +-12 -52 rlineto +17 0 rlineto +48 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-12 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -45 34 -92 0 rrcurveto +-5 -1 rlineto +-19 0 rlineto +closepath +endchar } ND +/Scircumflex { +0 667 hsbw +-12 79 hstem +648 80 hstem +847 47 hstem +159 92 vstem +305 91 vstem +579 92 vstem +70 231 rmoveto +1 -183 113 -60 162 0 rrcurveto +142 0 135 80 0 130 rrcurveto +0 104 -60 42 -128 54 rrcurveto +-119 50 -65 19 0 75 rrcurveto +0 74 71 32 84 0 rrcurveto +93 0 80 -38 0 -105 rrcurveto +92 8 rlineto +0 14 rlineto +0 112 -120 89 -141 0 rrcurveto +-131 0 -120 -70 0 -121 rrcurveto +0 -108 72 -42 138 -60 rrcurveto +103 -45 54 -19 0 -72 rrcurveto +0 -64 -62 -60 -114 0 rrcurveto +-103 0 -83 53 0 95 rrcurveto +0 25 rlineto +-94 -9 rlineto +closepath +235 529 rmoveto +91 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/scircumflex { +0 500 hsbw +-12 69 hstem +462 68 hstem +668 48 hstem +114 83 vstem +375 89 vstem +42 177 rmoveto +-3 -67 21 -48 41 -29 rrcurveto +43 -30 50 -15 60 0 rrcurveto +109 0 101 65 0 93 rrcurveto +0 88 -52 29 -118 50 rrcurveto +-66 28 -31 10 0 45 rrcurveto +0 32 36 34 60 0 rrcurveto +77 0 42 -40 3 -62 rrcurveto +86 6 rlineto +-2 98 -70 66 -129 0 rrcurveto +-118 0 -68 -68 0 -81 rrcurveto +0 -82 65 -30 91 -40 rrcurveto +56 -26 49 -21 0 -47 rrcurveto +0 -42 -39 -36 -78 0 rrcurveto +-75 0 -53 46 0 80 rrcurveto +-88 -6 rlineto +closepath +152 405 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/Tbar { +0 611 hsbw +0 374 hstem +634 82 hstem +292 95 vstem +292 308 rmoveto +-65 -308 rlineto +96 0 rlineto +64 308 rlineto +176 0 rlineto +13 66 rlineto +-175 0 rlineto +54 260 rlineto +233 0 rlineto +17 82 rlineto +-563 0 rlineto +-17 -82 rlineto +234 0 rlineto +-54 -260 rlineto +-176 0 rlineto +-14 -66 rlineto +177 0 rlineto +closepath +endchar } ND +/tbar { +0 278 hsbw +-9 75 hstem +234 65 hstem +450 69 hstem +56 93 vstem +175 234 rmoveto +98 0 rlineto +14 65 rlineto +-98 0 rlineto +31 151 rlineto +87 0 rlineto +14 69 rlineto +-86 0 rlineto +39 188 rlineto +-101 -61 rlineto +-27 -127 rlineto +-70 0 rlineto +-14 -69 rlineto +70 0 rlineto +-31 -151 rlineto +-76 0 rlineto +-13 -65 rlineto +75 0 rlineto +-18 -85 rlineto +-9 -42 -4 -27 0 -12 rrcurveto +0 -46 44 -31 63 0 rrcurveto +20 0 20 3 22 6 rrcurveto +15 72 rlineto +-15 -4 -17 -2 -18 0 rrcurveto +-28 0 -13 10 0 20 rrcurveto +0 8 4 23 8 37 rrcurveto +14 70 rlineto +closepath +endchar } ND +/Utilde { +0 722 hsbw +-13 80 hstem +696 20 hstem +801 68 hstem +97 94 vstem +198 96 vstem +333 61 vstem +604 59 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +135 44 rmoveto +61 0 rlineto +5 28 13 13 22 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 13 0 rrcurveto +49 0 41 40 7 67 rrcurveto +-59 0 rlineto +-8 -30 -13 -8 -14 0 rrcurveto +-10 0 -17 5 -25 11 rrcurveto +-39 17 -17 8 -29 0 rrcurveto +-48 0 -30 -23 -21 -86 rrcurveto +closepath +endchar } ND +/utilde { +0 556 hsbw +-12 73 hstem +499 20 hstem +638 68 hstem +63 89 vstem +205 61 vstem +368 81 vstem +476 59 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-182 503 rmoveto +61 0 rlineto +6 28 13 13 22 0 rrcurveto +10 0 27 -10 46 -19 rrcurveto +20 -8 15 -5 14 0 rrcurveto +48 0 41 40 7 67 rrcurveto +-59 0 rlineto +-8 -30 -11 -8 -16 0 rrcurveto +-10 0 -17 5 -25 11 rrcurveto +-39 17 -17 8 -29 0 rrcurveto +-47 0 -31 -23 -21 -86 rrcurveto +closepath +endchar } ND +/Umacron { +0 722 hsbw +-13 80 hstem +696 20 hstem +777 68 hstem +97 94 vstem +198 96 vstem +348 303 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +135 61 rmoveto +304 0 rlineto +14 68 rlineto +-303 0 rlineto +-15 -68 rlineto +closepath +endchar } ND +/umacron { +0 556 hsbw +-12 73 hstem +499 20 hstem +600 68 hstem +63 89 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-178 506 rmoveto +304 0 rlineto +14 68 rlineto +-303 0 rlineto +-15 -68 rlineto +closepath +endchar } ND +/Ubreve { +0 722 hsbw +-13 80 hstem +696 20 hstem +759 59 hstem +97 94 vstem +198 96 vstem +353 58 vstem +587 59 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +155 170 rmoveto +4 -78 51 -49 76 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -24 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/ubreve { +0 556 hsbw +-12 73 hstem +499 20 hstem +567 127 hstem +63 97 238 44 368 81 vstem3 +458 59 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-162 600 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/Uogonek { +0 722 hsbw +-208 65 hstem +-122 189 hstem +696 20 hstem +97 94 vstem +277 62 vstem +659 95 vstem +357 -13 rmoveto +175 2 95 114 40 193 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-33 -154 -55 -101 -138 0 rrcurveto +-92 0 -67 52 0 75 rrcurveto +0 18 3 28 8 36 rrcurveto +92 440 rlineto +-96 0 rlineto +-81 -391 rlineto +-14 -61 -6 -43 0 -25 rrcurveto +0 -106 62 -78 144 -21 rrcurveto +-18 -41 -8 -37 0 -33 rrcurveto +0 -58 30 -30 60 0 rrcurveto +32 0 34 10 36 18 rrcurveto +12 58 rlineto +-36 -14 -28 -7 -21 0 rrcurveto +-31 0 -26 22 0 34 rrcurveto +0 18 6 24 12 32 rrcurveto +closepath +endchar } ND +/uogonek { +0 556 hsbw +-208 65 hstem +-12 73 hstem +499 20 hstem +63 89 vstem +338 62 vstem +469 88 vstem +423 0 rmoveto +26 0 rlineto +108 519 rlineto +-88 0 rlineto +-47 -225 rlineto +-29 -136 -63 -97 -108 0 rrcurveto +-47 0 -23 20 0 41 rrcurveto +0 16 3 21 6 28 rrcurveto +68 332 rlineto +-87 0 rlineto +-63 -300 rlineto +-11 -52 -5 -36 0 -19 rrcurveto +0 -82 61 -42 74 0 rrcurveto +64 0 63 35 62 71 rrcurveto +-19 -94 rlineto +-20 -45 -10 -39 0 -34 rrcurveto +0 -60 30 -30 60 0 rrcurveto +32 0 34 10 36 18 rrcurveto +12 58 rlineto +-35 -14 -28 -7 -21 0 rrcurveto +-31 0 -27 18 0 41 rrcurveto +0 20 7 28 16 36 rrcurveto +closepath +endchar } ND +/Wcircumflex { +0 944 hsbw +0 125 hstem +570 146 hstem +847 47 hstem +125 97 vstem +452 91 vstem +663 77 vstem +964 98 vstem +169 0 rmoveto +99 0 rlineto +248 465 rlineto +13 24 16 35 20 46 rrcurveto +1 -54 2 -46 3 -36 rrcurveto +24 -434 rlineto +102 0 rlineto +365 716 rlineto +-98 0 rlineto +-204 -403 rlineto +-7 -11 -7 -15 -8 -20 rrcurveto +-8 -19 -10 -23 -13 -26 rrcurveto +-16 -32 -10 -25 -5 -17 rrcurveto +-2 67 -2 57 -2 48 rrcurveto +-24 419 rlineto +-98 0 rlineto +-218 -412 rlineto +-10 -16 -12 -22 -13 -30 rrcurveto +-13 -30 -17 -34 -21 -40 rrcurveto +0 92 rlineto +0 37 -2 33 -2 20 rrcurveto +0 48 rlineto +-18 354 rlineto +-97 0 rlineto +44 -716 rlineto +closepath +283 760 rmoveto +91 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/wcircumflex { +0 722 hsbw +0 96 hstem +499 20 hstem +668 48 hstem +78 85 vstem +294 91 vstem +505 77 vstem +688 89 vstem +132 0 rmoveto +93 0 rlineto +137 302 rlineto +18 40 15 37 14 36 rrcurveto +0 -55 1 -37 2 -19 rrcurveto +20 -304 rlineto +91 0 rlineto +254 519 rlineto +-89 0 rlineto +-111 -236 rlineto +-37 -78 -26 -60 -16 -43 rrcurveto +-1 65 -2 52 -2 40 rrcurveto +-17 260 rlineto +-97 0 rlineto +-123 -271 rlineto +-31 -66 -7 -20 -20 -66 rrcurveto +-2 29 -1 20 0 10 rrcurveto +-9 131 rlineto +-23 233 rlineto +-85 0 rlineto +54 -519 rlineto +closepath +162 582 rmoveto +91 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/Ycircumflex { +0 667 hsbw +0 20 hstem +696 20 hstem +847 47 hstem +117 102 vstem +306 91 vstem +517 77 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +27 760 rmoveto +91 0 rlineto +81 87 rlineto +39 -87 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +endchar } ND +/ycircumflex { +0 500 hsbw +-210 85 hstem +499 20 hstem +668 48 hstem +91 87 vstem +184 90 vstem +394 77 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +184 782 rmoveto +90 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +endchar } ND +/longs { +0 222 hsbw +0 20 hstem +648 80 hstem +26 89 vstem +26 0 rmoveto +89 0 rlineto +120 574 rlineto +10 56 12 18 40 0 rrcurveto +21 0 25 -4 30 -7 rrcurveto +16 77 rlineto +-44 9 -34 5 -24 0 rrcurveto +-81 0 -36 -40 -20 -96 rrcurveto +-124 -592 rlineto +closepath +endchar } ND +/Aringacute { +0 667 hsbw +418 74 vstem +510 112 vstem +418 891 rmoveto +74 0 rlineto +130 134 rlineto +-112 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/aringacute { +0 556 hsbw +318 74 vstem +410 111 vstem +318 779 rmoveto +74 0 rlineto +129 135 rlineto +-111 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/AEacute { +0 1000 hsbw +0 81 hstem +204 81 hstem +331 81 hstem +634 82 hstem +874 20 hstem +-41 109 vstem +548 73 vstem +640 111 vstem +-41 0 rmoveto +109 0 rlineto +122 204 rlineto +277 0 rlineto +-43 -204 rlineto +513 0 rlineto +17 81 rlineto +-412 0 rlineto +52 250 rlineto +373 0 rlineto +17 81 rlineto +-373 0 rlineto +46 222 rlineto +369 0 rlineto +17 82 rlineto +-643 0 rlineto +-441 -716 rlineto +closepath +281 285 rmoveto +214 349 rlineto +103 0 rlineto +-74 -349 rlineto +-243 0 rlineto +closepath +308 475 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/aeacute { +0 889 hsbw +-12 69 hstem +237 68 hstem +462 69 hstem +696 20 hstem +42 91 vstem +447 73 vstem +539 111 vstem +783 82 vstem +747 175 rmoveto +-39 -78 -57 -36 -58 0 rrcurveto +-67 0 -47 48 0 99 rrcurveto +0 29 rlineto +379 0 rlineto +4 32 3 25 0 20 rrcurveto +0 115 -84 101 -120 0 rrcurveto +-68 0 -57 -24 -45 -47 rrcurveto +-38 48 -54 24 -70 0 rrcurveto +-122 0 -80 -59 -34 -100 rrcurveto +88 -8 rlineto +25 66 46 32 75 0 rrcurveto +61 0 32 -31 0 -48 rrcurveto +0 -50 -57 -20 -70 -8 rrcurveto +-141 -12 -110 -34 0 -120 rrcurveto +0 -91 59 -60 106 0 rrcurveto +72 0 74 34 52 82 rrcurveto +42 -80 69 -36 75 0 rrcurveto +108 0 81 61 56 118 rrcurveto +-89 8 rlineto +closepath +-249 130 rmoveto +26 97 74 60 68 0 rrcurveto +66 0 51 -64 0 -72 rrcurveto +0 -21 rlineto +-285 0 rlineto +closepath +-103 -49 rmoveto +-20 -114 -48 -85 -99 0 rrcurveto +-62 0 -33 35 0 52 rrcurveto +0 68 43 17 93 8 rrcurveto +49 4 42 7 35 8 rrcurveto +closepath +52 326 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Oslashacute { +0 778 hsbw +-12 79 hstem +648 80 hstem +874 20 hstem +91 94 vstem +437 73 vstem +529 111 vstem +677 95 vstem +167 85 rmoveto +-82 -97 rlineto +46 -38 rlineto +79 95 rlineto +52 -38 60 -19 69 0 rrcurveto +211 0 170 200 0 217 rrcurveto +0 93 -25 75 -50 58 rrcurveto +79 95 rlineto +-43 39 rlineto +-78 -94 rlineto +-51 38 -62 19 -74 0 rrcurveto +-218 0 -159 -203 0 -212 rrcurveto +0 -92 25 -76 51 -60 rrcurveto +closepath +59 71 rmoveto +-28 40 -13 50 0 61 rrcurveto +0 169 126 172 160 0 rrcurveto +47 0 42 -15 38 -30 rrcurveto +-372 -447 rlineto +closepath +412 403 rmoveto +26 -42 13 -48 0 -54 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-48 0 -44 15 -39 31 rrcurveto +371 446 rlineto +closepath +-201 201 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/oslashacute { +0 611 hsbw +-12 69 hstem +462 68 hstem +696 20 hstem +79 88 vstem +322 73 vstem +482 87 vstem +482 497 rmoveto +-35 22 -40 11 -46 0 rrcurveto +-169 0 -113 -166 0 -161 rrcurveto +0 -62 16 -49 33 -38 rrcurveto +-56 -70 rlineto +44 -34 rlineto +55 69 rlineto +35 -20 40 -11 45 0 rrcurveto +153 0 125 160 0 163 rrcurveto +0 60 -15 50 -30 38 rrcurveto +57 72 rlineto +-44 35 rlineto +-55 -69 rlineto +closepath +-49 -60 rmoveto +-250 -314 rlineto +-11 21 -5 27 0 33 rrcurveto +0 114 74 144 117 0 rrcurveto +28 0 25 -9 22 -16 rrcurveto +closepath +-214 -358 rmoveto +249 310 rlineto +9 -23 5 -25 0 -27 rrcurveto +0 -106 -71 -151 -119 0 rrcurveto +-28 0 -24 7 -21 15 rrcurveto +closepath +103 503 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/anoteleia { +0 278 hsbw +418 101 hstem +145 99 vstem +145 418 rmoveto +99 0 rlineto +21 101 rlineto +-99 0 rlineto +-21 -101 rlineto +closepath +endchar } ND +/Wgrave { +0 944 hsbw +0 125 hstem +570 146 hstem +760 134 hstem +125 97 vstem +592 69 vstem +964 98 vstem +169 0 rmoveto +99 0 rlineto +248 465 rlineto +13 24 16 35 20 46 rrcurveto +1 -54 2 -46 3 -36 rrcurveto +24 -434 rlineto +102 0 rlineto +365 716 rlineto +-98 0 rlineto +-204 -403 rlineto +-7 -11 -7 -15 -8 -20 rrcurveto +-8 -19 -10 -23 -13 -26 rrcurveto +-16 -32 -10 -25 -5 -17 rrcurveto +-2 67 -2 57 -2 48 rrcurveto +-24 419 rlineto +-98 0 rlineto +-218 -412 rlineto +-10 -16 -12 -22 -13 -30 rrcurveto +-13 -30 -17 -34 -21 -40 rrcurveto +0 92 rlineto +0 37 -2 33 -2 20 rrcurveto +0 48 rlineto +-18 354 rlineto +-97 0 rlineto +44 -716 rlineto +closepath +423 760 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/wgrave { +0 722 hsbw +0 96 hstem +499 20 hstem +582 134 hstem +78 85 vstem +436 68 vstem +688 89 vstem +132 0 rmoveto +93 0 rlineto +137 302 rlineto +18 40 15 37 14 36 rrcurveto +0 -55 1 -37 2 -19 rrcurveto +20 -304 rlineto +91 0 rlineto +254 519 rlineto +-89 0 rlineto +-111 -236 rlineto +-37 -78 -26 -60 -16 -43 rrcurveto +-1 65 -2 52 -2 40 rrcurveto +-17 260 rlineto +-97 0 rlineto +-123 -271 rlineto +-31 -66 -7 -20 -20 -66 rrcurveto +-2 29 -1 20 0 10 rrcurveto +-9 131 rlineto +-23 233 rlineto +-85 0 rlineto +54 -519 rlineto +closepath +304 582 rmoveto +68 0 rlineto +-56 134 rlineto +-108 0 rlineto +96 -134 rlineto +closepath +endchar } ND +/Wacute { +0 944 hsbw +0 125 hstem +570 146 hstem +874 20 hstem +125 97 vstem +520 73 vstem +595 102 vstem +964 98 vstem +169 0 rmoveto +99 0 rlineto +248 465 rlineto +13 24 16 35 20 46 rrcurveto +1 -54 2 -46 3 -36 rrcurveto +24 -434 rlineto +102 0 rlineto +365 716 rlineto +-98 0 rlineto +-204 -403 rlineto +-7 -11 -7 -15 -8 -20 rrcurveto +-8 -19 -10 -23 -13 -26 rrcurveto +-16 -32 -10 -25 -5 -17 rrcurveto +-2 67 -2 57 -2 48 rrcurveto +-24 419 rlineto +-98 0 rlineto +-218 -412 rlineto +-10 -16 -12 -22 -13 -30 rrcurveto +-13 -30 -17 -34 -21 -40 rrcurveto +0 92 rlineto +0 37 -2 33 -2 20 rrcurveto +0 48 rlineto +-18 354 rlineto +-97 0 rlineto +44 -716 rlineto +closepath +351 760 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +endchar } ND +/wacute { +0 722 hsbw +0 96 hstem +499 20 hstem +696 20 hstem +78 85 vstem +364 73 vstem +456 111 vstem +688 89 vstem +132 0 rmoveto +93 0 rlineto +137 302 rlineto +18 40 15 37 14 36 rrcurveto +0 -55 1 -37 2 -19 rrcurveto +20 -304 rlineto +91 0 rlineto +254 519 rlineto +-89 0 rlineto +-111 -236 rlineto +-37 -78 -26 -60 -16 -43 rrcurveto +-1 65 -2 52 -2 40 rrcurveto +-17 260 rlineto +-97 0 rlineto +-123 -271 rlineto +-31 -66 -7 -20 -20 -66 rrcurveto +-2 29 -1 20 0 10 rrcurveto +-9 131 rlineto +-23 233 rlineto +-85 0 rlineto +54 -519 rlineto +closepath +232 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Wdieresis { +0 944 hsbw +0 125 hstem +570 146 hstem +760 100 hstem +125 97 vstem +466 93 vstem +667 92 vstem +964 98 vstem +169 0 rmoveto +99 0 rlineto +248 465 rlineto +13 24 16 35 20 46 rrcurveto +1 -54 2 -46 3 -36 rrcurveto +24 -434 rlineto +102 0 rlineto +365 716 rlineto +-98 0 rlineto +-204 -403 rlineto +-7 -11 -7 -15 -8 -20 rrcurveto +-8 -19 -10 -23 -13 -26 rrcurveto +-16 -32 -10 -25 -5 -17 rrcurveto +-2 67 -2 57 -2 48 rrcurveto +-24 419 rlineto +-98 0 rlineto +-218 -412 rlineto +-10 -16 -12 -22 -13 -30 rrcurveto +-13 -30 -17 -34 -21 -40 rrcurveto +0 92 rlineto +0 37 -2 33 -2 20 rrcurveto +0 48 rlineto +-18 354 rlineto +-97 0 rlineto +44 -716 rlineto +closepath +297 760 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/wdieresis { +0 722 hsbw +0 96 hstem +499 20 hstem +599 100 hstem +78 85 vstem +310 92 vstem +432 91 vstem +688 89 vstem +132 0 rmoveto +93 0 rlineto +137 302 rlineto +18 40 15 37 14 36 rrcurveto +0 -55 1 -37 2 -19 rrcurveto +20 -304 rlineto +91 0 rlineto +254 519 rlineto +-89 0 rlineto +-111 -236 rlineto +-37 -78 -26 -60 -16 -43 rrcurveto +-1 65 -2 52 -2 40 rrcurveto +-17 260 rlineto +-97 0 rlineto +-123 -271 rlineto +-31 -66 -7 -20 -20 -66 rrcurveto +-2 29 -1 20 0 10 rrcurveto +-9 131 rlineto +-23 233 rlineto +-85 0 rlineto +54 -519 rlineto +closepath +178 599 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ygrave { +0 667 hsbw +0 20 hstem +696 20 hstem +760 134 hstem +117 102 vstem +279 96 vstem +453 69 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +174 760 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/ygrave { +0 500 hsbw +-210 85 hstem +499 20 hstem +582 134 hstem +91 87 vstem +324 69 vstem +469 92 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +324 782 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/quotereversed { +0 222 hsbw +613 100 hstem +150 43 vstem +256 613 rmoveto +22 100 rlineto +-101 0 rlineto +-19 -88 rlineto +-6 -25 -2 -20 0 -16 rrcurveto +0 -58 25 -32 50 -6 rrcurveto +8 38 rlineto +-27 5 -13 21 0 36 rrcurveto +0 14 2 15 6 16 rrcurveto +55 0 rlineto +closepath +endchar } ND +/radicalex { +0 333 hsbw +600 68 hstem +75 362 vstem +75 600 rmoveto +362 0 rlineto +14 68 rlineto +-362 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/afii08941 { +0 556 hsbw +-12 85 hstem +245 73 hstem +392 73 hstem +657 71 hstem +183 85 vstem +175 245 rmoveto +-17 -63 -48 -57 -79 -51 rrcurveto +11 -86 rlineto +50 32 50 16 52 0 rrcurveto +32 0 38 -9 43 -17 rrcurveto +35 -14 30 -8 25 0 rrcurveto +37 0 44 12 50 24 rrcurveto +-27 80 rlineto +-35 -21 -36 -10 -36 0 rrcurveto +-18 0 -24 4 -28 10 rrcurveto +-39 14 -42 6 -41 0 rrcurveto +-8 0 -13 -1 -17 -2 rrcurveto +51 37 32 47 14 57 rrcurveto +113 0 rlineto +16 73 rlineto +-122 0 rlineto +0 16 -2 24 -4 34 rrcurveto +143 0 rlineto +16 73 rlineto +-167 0 rlineto +0 24 rlineto +0 104 65 64 82 0 rrcurveto +66 0 50 -45 10 -82 rrcurveto +80 8 rlineto +-12 120 -82 70 -114 0 rrcurveto +-127 0 -108 -91 0 -141 rrcurveto +0 -31 rlineto +-60 0 rlineto +-16 -73 rlineto +86 0 rlineto +5 -38 3 -25 1 -11 rrcurveto +-111 0 rlineto +-15 -73 rlineto +118 0 rlineto +closepath +endchar } ND +/estimated { +0 600 hsbw +-17 36 hstem +259 36 hstem +500 35 hstem +44 113 vstem +157 259 rmoveto +404 0 rlineto +-7 181 -111 95 -141 0 rrcurveto +-152 0 -106 -116 0 -160 rrcurveto +0 -162 107 -114 151 0 rrcurveto +104 0 58 41 66 94 rrcurveto +-35 21 rlineto +-46 -80 -64 -40 -83 0 rrcurveto +-58 0 -49 20 -38 40 rrcurveto +0 180 rlineto +closepath +291 36 rmoveto +-291 0 rlineto +0 145 rlineto +39 40 48 20 57 0 rrcurveto +57 0 49 -20 41 -40 rrcurveto +0 -145 rlineto +closepath +endchar } ND +/oneeighth { +0 834 hsbw +-26 53 hstem +152 50 hstem +296 54 hstem +708 20 hstem +60 79 vstem +205 73 vstem +300 54 vstem +551 70 vstem +732 72 vstem +60 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +145 388 rmoveto +73 0 rlineto +76 367 rlineto +-54 0 rlineto +-35 -46 -79 -40 -37 -9 rrcurveto +-13 -62 rlineto +48 9 41 17 34 24 rrcurveto +-54 -260 rlineto +closepath +408 -178 rmoveto +-64 -11 -39 -39 0 -53 rrcurveto +0 -56 44 -47 94 0 rrcurveto +97 0 59 49 0 70 rrcurveto +0 43 -24 28 -46 12 rrcurveto +56 12 29 28 0 45 rrcurveto +0 53 -48 36 -85 0 rrcurveto +-78 0 -57 -36 0 -58 rrcurveto +0 -35 20 -25 42 -16 rrcurveto +closepath +8 64 rmoveto +0 33 30 19 39 0 rrcurveto +30 0 27 -15 0 -29 rrcurveto +0 -34 -30 -16 -38 0 rrcurveto +-43 0 -15 22 0 20 rrcurveto +closepath +-38 -162 rmoveto +0 42 35 28 50 0 rrcurveto +42 0 22 -19 0 -36 rrcurveto +0 -47 -40 -23 -46 0 rrcurveto +-42 0 -21 18 0 37 rrcurveto +closepath +endchar } ND +/threeeighths { +0 834 hsbw +-26 53 hstem +152 50 hstem +296 54 hstem +519 52 hstem +672 53 hstem +727 1 hstem +72 79 vstem +326 74 vstem +551 70 vstem +733 71 vstem +72 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +11 484 rmoveto +14 -60 58 -45 80 0 rrcurveto +81 0 67 45 0 66 rrcurveto +0 40 -22 27 -43 15 rrcurveto +54 13 28 29 0 44 rrcurveto +0 58 -54 39 -81 0 rrcurveto +-76 0 -54 -38 -14 -56 rrcurveto +71 -9 rlineto +12 33 25 17 38 0 rrcurveto +33 0 26 -18 0 -29 rrcurveto +0 -36 -33 -18 -64 0 rrcurveto +-11 -52 rlineto +65 0 24 -13 0 -37 rrcurveto +0 -35 -28 -26 -45 0 rrcurveto +-41 0 -27 18 -13 36 rrcurveto +-70 -8 rlineto +closepath +530 -274 rmoveto +-67 -10 -35 -44 0 -49 rrcurveto +0 -56 44 -47 94 0 rrcurveto +96 0 59 49 0 70 rrcurveto +0 43 -23 28 -46 12 rrcurveto +56 12 28 28 0 45 rrcurveto +0 54 -48 35 -84 0 rrcurveto +-79 0 -57 -36 0 -58 rrcurveto +0 -35 20 -25 42 -16 rrcurveto +closepath +8 64 rmoveto +0 33 30 19 39 0 rrcurveto +32 0 26 -15 0 -29 rrcurveto +0 -32 -30 -18 -40 0 rrcurveto +-43 0 -14 23 0 19 rrcurveto +closepath +-38 -162 rmoveto +0 42 37 28 48 0 rrcurveto +43 0 22 -19 0 -36 rrcurveto +0 -47 -41 -23 -45 0 rrcurveto +-43 0 -21 18 0 37 rrcurveto +closepath +endchar } ND +/fiveeighths { +0 834 hsbw +-26 53 hstem +152 50 hstem +296 54 hstem +552 54 hstem +657 59 hstem +718 10 hstem +104 66 vstem +315 77 vstem +551 70 vstem +732 72 vstem +72 -30 rmoveto +79 0 rlineto +688 758 rlineto +-86 0 rlineto +-681 -758 rlineto +closepath +13 489 rmoveto +4 -60 52 -50 82 0 rrcurveto +101 0 68 71 0 78 rrcurveto +0 58 -51 50 -70 0 rrcurveto +-28 0 -30 -9 -31 -18 rrcurveto +23 78 rlineto +188 0 rlineto +12 59 rlineto +-245 0 rlineto +-56 -188 rlineto +66 0 rlineto +28 18 27 6 27 0 rrcurveto +33 0 30 -23 0 -41 rrcurveto +0 -48 -35 -32 -53 0 rrcurveto +-38 0 -23 14 -8 37 rrcurveto +-73 0 rlineto +closepath +528 -279 rmoveto +-67 -10 -36 -44 0 -49 rrcurveto +0 -58 44 -45 94 0 rrcurveto +97 0 59 49 0 70 rrcurveto +0 43 -24 28 -46 12 rrcurveto +56 13 29 28 0 44 rrcurveto +0 53 -48 36 -85 0 rrcurveto +-83 0 -52 -41 0 -53 rrcurveto +0 -35 20 -25 42 -16 rrcurveto +closepath +8 64 rmoveto +0 34 30 18 39 0 rrcurveto +32 0 25 -16 0 -28 rrcurveto +0 -32 -30 -18 -38 0 rrcurveto +-44 0 -14 23 0 19 rrcurveto +closepath +-38 -162 rmoveto +0 42 35 28 50 0 rrcurveto +42 0 22 -19 0 -36 rrcurveto +0 -44 -36 -26 -50 0 rrcurveto +-42 0 -21 18 0 37 rrcurveto +closepath +endchar } ND +/seveneighths { +0 834 hsbw +-26 53 hstem +152 50 hstem +296 54 hstem +657 59 hstem +718 10 hstem +48 79 vstem +143 76 vstem +551 70 vstem +732 72 vstem +48 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +95 388 rmoveto +76 0 rlineto +18 104 79 127 79 68 rrcurveto +12 59 rlineto +-278 0 rlineto +-13 -59 rlineto +206 0 rlineto +-92 -85 -59 -100 -28 -114 rrcurveto +closepath +470 -178 rmoveto +-67 -10 -36 -44 0 -49 rrcurveto +0 -58 45 -45 94 0 rrcurveto +96 0 59 49 0 70 rrcurveto +0 43 -24 28 -46 12 rrcurveto +56 12 29 28 0 45 rrcurveto +0 54 -49 35 -84 0 rrcurveto +-78 0 -57 -36 0 -58 rrcurveto +0 -35 20 -25 42 -16 rrcurveto +closepath +8 64 rmoveto +0 34 31 18 38 0 rrcurveto +30 0 27 -15 0 -29 rrcurveto +0 -32 -30 -18 -38 0 rrcurveto +-44 0 -14 23 0 19 rrcurveto +closepath +-38 -162 rmoveto +0 40 33 30 52 0 rrcurveto +42 0 22 -19 0 -36 rrcurveto +0 -47 -40 -23 -46 0 rrcurveto +-42 0 -21 18 0 37 rrcurveto +closepath +endchar } ND +/commaaccent { +0 333 hsbw +-145 86 hstem +74 95 vstem +55 -145 rmoveto +46 0 rlineto +-17 -38 -25 -23 -32 -9 rrcurveto +-8 -42 rlineto +65 7 56 59 14 60 rrcurveto +15 72 rlineto +-95 0 rlineto +-19 -86 rlineto +closepath +endchar } ND +/undercommaaccent { +0 333 hsbw +-208 60 hstem +-77 52 hstem +150 84 vstem +73 -25 rmoveto +-11 -52 rlineto +17 0 rlineto +47 0 24 -11 0 -24 rrcurveto +0 -24 -32 -12 -64 0 rrcurveto +-58 0 rlineto +-12 -54 rlineto +30 -4 30 -2 31 0 rrcurveto +104 0 55 35 0 57 rrcurveto +0 58 -46 34 -90 0 rrcurveto +-5 -1 rlineto +-20 0 rlineto +closepath +endchar } ND +/tonos { +0 333 hsbw +696 20 hstem +185 73 vstem +277 111 vstem +185 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/dieresistonos { +0 333 hsbw +582 135 hstem +47 86 vstem +172 59 vstem +343 86 vstem +258 717 rmoveto +-86 -135 rlineto +59 0 rlineto +116 135 rlineto +-89 0 rlineto +closepath +-191 -41 rmoveto +-20 -94 rlineto +86 0 rlineto +20 94 rlineto +-86 0 rlineto +closepath +296 0 rmoveto +-20 -94 rlineto +86 0 rlineto +20 94 rlineto +-86 0 rlineto +closepath +endchar } ND +/Alphatonos { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +-21 104 vstem +114 84 vstem +204 139 vstem +384 113 vstem +522 93 vstem +-21 0 rmoveto +104 0 rlineto +115 206 rlineto +290 0 rlineto +34 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-405 -716 rlineto +closepath +260 280 rmoveto +118 212 rlineto +31 56 24 48 16 42 rrcurveto +2 -46 6 -59 12 -74 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +-125 330 rmoveto +84 0 rlineto +145 106 rlineto +-139 0 rlineto +-90 -106 rlineto +closepath +endchar } ND +/Epsilontonos { +0 789 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +48 84 vstem +139 138 vstem +314 517 vstem +48 610 rmoveto +84 0 rlineto +145 106 rlineto +-138 0 rlineto +-91 -106 rlineto +closepath +117 -610 rmoveto +545 0 rlineto +18 81 rlineto +-451 0 rlineto +52 249 rlineto +410 0 rlineto +17 82 rlineto +-410 0 rlineto +47 222 rlineto +421 0 rlineto +17 82 rlineto +-517 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/Etatonos { +0 846 hsbw +0 418 hstem +696 20 hstem +51 84 vstem +167 95 vstem +316 96 vstem +634 95 vstem +783 96 vstem +167 0 rmoveto +95 0 rlineto +71 337 rlineto +371 0 rlineto +-70 -337 rlineto +95 0 rlineto +150 716 rlineto +-96 0 rlineto +-62 -298 rlineto +-371 0 rlineto +62 298 rlineto +-96 0 rlineto +-149 -716 rlineto +closepath +-116 610 rmoveto +84 0 rlineto +145 106 rlineto +-139 0 rlineto +-90 -106 rlineto +closepath +endchar } ND +/Iotatonos { +0 389 hsbw +0 20 hstem +696 20 hstem +48 84 vstem +165 95 vstem +314 96 vstem +165 0 rmoveto +95 0 rlineto +150 716 rlineto +-96 0 rlineto +-149 -716 rlineto +closepath +-117 610 rmoveto +84 0 rlineto +145 106 rlineto +-139 0 rlineto +-90 -106 rlineto +closepath +endchar } ND +/Omicrontonos { +0 794 hsbw +-12 79 hstem +648 80 hstem +103 94 vstem +689 95 vstem +103 300 rmoveto +0 -161 127 -151 174 0 rrcurveto +209 0 171 184 0 235 rrcurveto +0 188 -117 133 -189 0 rrcurveto +-202 0 -173 -168 0 -260 rrcurveto +closepath +94 -5 rmoveto +0 183 114 170 170 0 rrcurveto +110 0 98 -84 0 -150 rrcurveto +0 -184 -123 -163 -156 0 rrcurveto +-120 0 -93 93 0 135 rrcurveto +closepath +-155 315 rmoveto +84 0 rlineto +145 106 rlineto +-138 0 rlineto +-91 -106 rlineto +closepath +endchar } ND +/Upsilontonos { +0 865 hsbw +0 20 hstem +696 20 hstem +47 84 vstem +137 139 vstem +313 103 vstem +476 96 vstem +855 115 vstem +476 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-115 0 rlineto +-167 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-21 50 -22 49 -24 48 rrcurveto +-106 209 rlineto +-103 0 rlineto +221 -439 rlineto +-58 -277 rlineto +closepath +-429 610 rmoveto +84 0 rlineto +145 106 rlineto +-139 0 rlineto +-90 -106 rlineto +closepath +endchar } ND +/Omegatonos { +0 775 hsbw +0 81 hstem +648 80 hstem +104 94 vstem +209 389 vstem +672 93 vstem +13 0 rmoveto +301 0 rlineto +17 75 rlineto +-89 46 -44 79 0 110 rrcurveto +0 181 123 157 150 0 rrcurveto +116 0 85 -94 0 -146 rrcurveto +0 -151 -76 -138 -141 -44 rrcurveto +-17 -75 rlineto +297 0 rlineto +18 81 rlineto +-155 0 rlineto +111 77 56 109 0 140 rrcurveto +0 192 -120 129 -166 0 rrcurveto +-215 0 -160 -202 0 -202 rrcurveto +0 -96 35 -81 70 -66 rrcurveto +-178 0 rlineto +-18 -81 rlineto +closepath +29 610 rmoveto +83 0 rlineto +146 106 rlineto +-139 0 rlineto +-90 -106 rlineto +closepath +endchar } ND +/iotadieresistonos { +0 222 hsbw +0 20 hstem +499 20 hstem +582 135 hstem +-9 86 vstem +116 59 vstem +287 86 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +172 717 rmoveto +-86 -135 rlineto +59 0 rlineto +116 135 rlineto +-89 0 rlineto +closepath +-191 -41 rmoveto +-20 -94 rlineto +86 0 rlineto +20 94 rlineto +-86 0 rlineto +closepath +296 0 rmoveto +-20 -94 rlineto +86 0 rlineto +20 94 rlineto +-86 0 rlineto +closepath +endchar } ND +/Alpha { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +-20 105 vstem +386 113 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +endchar } ND +/Beta { +0 667 hsbw +0 81 hstem +329 81 hstem +634 82 hstem +565 90 vstem +43 0 rmoveto +347 0 rlineto +132 0 117 104 0 123 rrcurveto +0 68 -39 52 -77 27 rrcurveto +89 30 43 63 0 79 rrcurveto +0 114 -91 56 -149 0 rrcurveto +-222 0 rlineto +-150 -716 rlineto +closepath +182 410 rmoveto +47 224 rlineto +152 0 rlineto +94 0 47 -23 0 -71 rrcurveto +0 -84 -57 -46 -138 0 rrcurveto +-145 0 rlineto +closepath +-69 -329 rmoveto +52 248 rlineto +182 0 rlineto +117 0 34 -37 0 -66 rrcurveto +0 -103 -75 -42 -147 0 rrcurveto +-163 0 rlineto +closepath +endchar } ND +/Delta { +0 671 hsbw +0 81 hstem +638 78 hstem +-10 637 vstem +-10 0 rmoveto +637 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +151 81 rmoveto +228 411 rlineto +31 56 24 48 16 42 rrcurveto +2 -52 7 -59 11 -68 rrcurveto +61 -378 rlineto +-380 0 rlineto +closepath +endchar } ND +/Epsilon { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +195 516 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Zeta { +0 611 hsbw +0 82 hstem +640 76 hstem +126 241 vstem +24 0 rmoveto +531 0 rlineto +17 82 rlineto +-390 0 rlineto +-4 0 -10 -1 -14 -2 rrcurveto +12 14 30 35 48 57 rrcurveto +384 456 rlineto +9 75 rlineto +-494 0 rlineto +-17 -82 rlineto +241 0 rlineto +28 1 rlineto +51 0 rlineto +12 0 21 1 31 4 rrcurveto +-7 -8 -6 -8 -9 -8 rrcurveto +-7 -7 -8 -9 -7 -10 rrcurveto +-74 -90 rlineto +-358 -428 rlineto +-10 -72 rlineto +closepath +endchar } ND +/Eta { +0 722 hsbw +0 418 hstem +696 20 hstem +42 96 vstem +192 95 vstem +509 95 vstem +658 96 vstem +42 0 rmoveto +96 0 rlineto +70 337 rlineto +371 0 rlineto +-70 -337 rlineto +95 0 rlineto +150 716 rlineto +-96 0 rlineto +-62 -298 rlineto +-371 0 rlineto +62 298 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Iota { +0 278 hsbw +0 20 hstem +696 20 hstem +57 96 vstem +207 95 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Kappa { +0 667 hsbw +0 20 hstem +371 345 hstem +44 96 vstem +194 96 vstem +545 107 vstem +44 0 rmoveto +96 0 rlineto +49 232 rlineto +150 131 rlineto +206 -363 rlineto +107 0 rlineto +-243 424 rlineto +332 292 rlineto +-135 0 rlineto +-388 -345 rlineto +72 345 rlineto +-96 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Lambda { +0 667 hsbw +0 20 hstem +614 102 hstem +-10 99 vstem +383 102 vstem +531 92 vstem +485 716 rmoveto +-102 0 rlineto +-393 -716 rlineto +99 0 rlineto +255 469 rlineto +19 35 25 48 30 62 rrcurveto +4 -44 10 -62 16 -82 rrcurveto +83 -426 rlineto +92 0 rlineto +-138 716 rlineto +closepath +endchar } ND +/Mu { +0 833 hsbw +0 77 hstem +619 97 hstem +44 93 vstem +193 118 vstem +342 93 vstem +628 95 vstem +752 120 vstem +44 0 rmoveto +93 0 rlineto +95 457 rlineto +8 36 8 50 8 63 rrcurveto +3 -56 5 -49 7 -42 rrcurveto +71 -459 rlineto +93 0 rlineto +266 468 rlineto +30 54 26 50 20 47 rrcurveto +-32 -100 -25 -91 -17 -80 rrcurveto +-75 -348 rlineto +95 0 rlineto +149 716 rlineto +-120 0 rlineto +-251 -444 rlineto +-46 -82 -33 -65 -20 -48 rrcurveto +-4 56 -6 58 -9 61 rrcurveto +-72 464 rlineto +-118 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/Nu { +0 722 hsbw +0 108 hstem +606 110 hstem +49 93 vstem +199 93 vstem +513 94 vstem +664 93 vstem +49 0 rmoveto +93 0 rlineto +91 435 rlineto +14 68 9 57 5 46 rrcurveto +18 -56 24 -64 32 -72 rrcurveto +178 -414 rlineto +94 0 rlineto +150 716 rlineto +-93 0 rlineto +-88 -421 rlineto +-14 -64 -11 -63 -9 -60 rrcurveto +-42 143 -28 66 -60 130 rrcurveto +-120 269 rlineto +-93 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Xi { +0 648 hsbw +0 81 hstem +329 81 hstem +634 82 hstem +116 483 vstem +188 716 rmoveto +-18 -82 rlineto +504 0 rlineto +17 82 rlineto +-503 0 rlineto +closepath +-55 -306 rmoveto +-17 -81 rlineto +483 0 rlineto +17 81 rlineto +-483 0 rlineto +closepath +-112 -329 rmoveto +-17 -81 rlineto +567 0 rlineto +17 81 rlineto +-567 0 rlineto +closepath +endchar } ND +/Omicron { +0 778 hsbw +-12 79 hstem +648 80 hstem +91 95 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +endchar } ND +/Pi { +0 725 hsbw +0 20 hstem +634 82 hstem +42 96 vstem +509 96 vstem +42 0 rmoveto +96 0 rlineto +135 634 rlineto +372 0 rlineto +-136 -634 rlineto +96 0 rlineto +149 716 rlineto +-562 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/Rho { +0 667 hsbw +0 20 hstem +291 81 hstem +638 78 hstem +43 96 vstem +604 94 vstem +43 0 rmoveto +96 0 rlineto +60 291 rlineto +179 0 rlineto +152 0 168 101 0 148 rrcurveto +0 109 -72 67 -134 0 rrcurveto +-299 0 rlineto +-150 -716 rlineto +closepath +173 372 rmoveto +56 266 rlineto +184 0 rlineto +98 0 50 -20 0 -80 rrcurveto +0 -108 -87 -58 -143 0 rrcurveto +-158 0 rlineto +closepath +endchar } ND +/Sigma { +0 600 hsbw +0 81 hstem +634 82 hstem +22 493 vstem +172 716 rmoveto +-20 -97 rlineto +199 -251 rlineto +-310 -278 rlineto +-19 -90 rlineto +493 0 rlineto +17 81 rlineto +-366 0 rlineto +308 276 rlineto +-218 277 rlineto +392 0 rlineto +18 82 rlineto +-494 0 rlineto +closepath +endchar } ND +/Tau { +0 611 hsbw +0 20 hstem +634 82 hstem +227 96 vstem +359 96 vstem +227 0 rmoveto +96 0 rlineto +132 634 rlineto +233 0 rlineto +17 82 rlineto +-563 0 rlineto +-17 -82 rlineto +234 0 rlineto +-132 -634 rlineto +closepath +endchar } ND +/Upsilon { +0 667 hsbw +0 20 hstem +696 20 hstem +117 102 vstem +279 96 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +endchar } ND +/Chi { +0 667 hsbw +0 20 hstem +696 20 hstem +-32 127 vstem +107 106 vstem +515 104 vstem +644 125 vstem +-32 0 rmoveto +127 0 rlineto +200 213 rlineto +25 26 21 26 18 24 rrcurveto +15 -33 13 -27 12 -20 rrcurveto +116 -209 rlineto +104 0 rlineto +-196 346 rlineto +346 370 rlineto +-125 0 rlineto +-157 -166 rlineto +-51 -53 -37 -43 -24 -32 rrcurveto +-5 11 -5 10 -5 10 rrcurveto +-5 8 -5 9 -3 9 rrcurveto +-4 7 -14 25 -24 43 rrcurveto +-92 162 rlineto +-106 0 rlineto +203 -354 rlineto +-342 -362 rlineto +closepath +endchar } ND +/Psi { +0 831 hsbw +0 301 hstem +302 414 hstem +124 91 vstem +329 95 vstem +480 96 vstem +790 96 vstem +172 716 rmoveto +-31 -149 rlineto +-12 -53 -5 -43 0 -33 rrcurveto +0 -130 84 -72 168 -14 rrcurveto +-47 -222 rlineto +95 0 rlineto +48 220 rlineto +214 2 111 79 50 231 rrcurveto +39 184 rlineto +-96 0 rlineto +-34 -160 rlineto +-47 -219 -76 -31 -144 -5 rrcurveto +87 415 rlineto +-96 0 rlineto +-87 -415 rlineto +-119 7 -59 43 0 78 rrcurveto +0 24 7 46 14 66 rrcurveto +32 151 rlineto +-96 0 rlineto +closepath +endchar } ND +/Omega { +0 761 hsbw +0 81 hstem +648 80 hstem +94 94 vstem +199 389 vstem +663 92 vstem +3 0 rmoveto +302 0 rlineto +16 75 rlineto +-89 46 -44 79 0 110 rrcurveto +0 181 125 157 148 0 rrcurveto +116 0 86 -94 0 -146 rrcurveto +0 -151 -77 -138 -141 -44 rrcurveto +-17 -75 rlineto +298 0 rlineto +17 81 rlineto +-155 0 rlineto +111 77 56 109 0 140 rrcurveto +0 192 -120 129 -166 0 rrcurveto +-215 0 -160 -202 0 -202 rrcurveto +0 -96 35 -81 70 -66 rrcurveto +-178 0 rlineto +-18 -81 rlineto +closepath +endchar } ND +/Iotadieresis { +0 278 hsbw +0 20 hstem +696 20 hstem +760 100 hstem +136 93 vstem +337 92 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +79 760 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Upsilondieresis { +0 667 hsbw +0 20 hstem +696 20 hstem +760 100 hstem +117 102 vstem +311 92 vstem +491 92 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +32 760 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/alphatonos { +0 570 hsbw +-12 73 hstem +458 72 hstem +696 20 hstem +50 87 vstem +273 73 vstem +421 62 vstem +505 94 vstem +505 519 rmoveto +-44 -95 rlineto +-35 70 -51 36 -67 0 rrcurveto +-142 0 -116 -148 0 -182 rrcurveto +0 -126 54 -86 119 0 rrcurveto +64 0 56 29 49 60 rrcurveto +9 -77 rlineto +89 0 rlineto +-5 60 -2 58 0 55 rrcurveto +0 94 rlineto +116 252 rlineto +-94 0 rlineto +closepath +-368 -326 rmoveto +0 126 75 139 103 0 rrcurveto +66 0 40 -58 0 -77 rrcurveto +0 -128 -81 -134 -97 0 rrcurveto +-60 0 -46 42 0 90 rrcurveto +closepath +136 389 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/epsilontonos { +0 439 hsbw +-12 69 hstem +458 72 hstem +696 20 hstem +103 88 vstem +220 73 vstem +312 111 vstem +458 456 rmoveto +-46 49 -57 25 -69 0 rrcurveto +-102 0 -81 -67 0 -84 rrcurveto +0 -40 17 -35 35 -30 rrcurveto +-81 -32 -40 -49 0 -66 rrcurveto +0 -78 61 -61 119 0 rrcurveto +70 0 64 25 56 50 rrcurveto +-53 57 rlineto +-45 -42 -47 -21 -48 0 rrcurveto +-52 0 -34 26 0 46 rrcurveto +0 56 59 47 83 0 rrcurveto +27 0 rlineto +14 65 rlineto +-78 5 -39 26 0 46 rrcurveto +0 44 40 40 60 0 rrcurveto +36 0 33 -16 30 -31 rrcurveto +68 45 rlineto +closepath +-238 126 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/etatonos { +0 555 hsbw +-199 20 hstem +0 20 hstem +458 72 hstem +696 20 hstem +34 88 vstem +142 80 vstem +279 73 vstem +440 88 vstem +34 0 rmoveto +88 0 rlineto +50 241 rlineto +36 170 83 47 79 0 rrcurveto +46 0 24 -21 0 -40 rrcurveto +0 -13 -4 -23 -6 -32 rrcurveto +-107 -528 rlineto +88 0 rlineto +105 513 rlineto +8 42 4 32 0 22 rrcurveto +0 69 -54 51 -78 0 rrcurveto +-64 0 -65 -34 -64 -68 rrcurveto +19 91 rlineto +-80 0 rlineto +-108 -519 rlineto +closepath +245 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/iotatonos { +0 222 hsbw +0 20 hstem +499 20 hstem +696 20 hstem +112 73 vstem +204 111 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +82 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/upsilondieresistonos { +0 550 hsbw +-12 73 hstem +499 20 hstem +582 135 hstem +73 83 vstem +158 86 vstem +282 60 vstem +453 86 vstem +140 519 rmoveto +-41 -196 rlineto +-3 -13 rlineto +-16 -77 -7 -52 0 -26 rrcurveto +0 -95 65 -72 120 0 rrcurveto +152 0 58 113 37 174 rrcurveto +51 244 rlineto +-89 0 rlineto +-60 -288 rlineto +-20 -104 -45 -66 -85 0 rrcurveto +-58 0 -43 31 0 59 rrcurveto +0 16 4 26 8 38 rrcurveto +60 288 rlineto +-88 0 rlineto +closepath +228 198 rmoveto +-86 -135 rlineto +60 0 rlineto +116 135 rlineto +-90 0 rlineto +closepath +-190 -41 rmoveto +-20 -94 rlineto +86 0 rlineto +20 94 rlineto +-86 0 rlineto +closepath +295 0 rmoveto +-20 -94 rlineto +86 0 rlineto +20 94 rlineto +-86 0 rlineto +closepath +endchar } ND +/beta { +0 571 hsbw +-199 20 hstem +-12 60 hstem +656 72 hstem +-11 86 vstem +474 82 vstem +-11 -199 rmoveto +86 0 rlineto +61 276 rlineto +41 -58 46 -31 84 0 rrcurveto +146 0 83 116 0 112 rrcurveto +0 70 -41 71 -80 34 rrcurveto +78 20 63 62 0 90 rrcurveto +0 97 -73 68 -104 0 rrcurveto +-166 0 -55 -121 -41 -198 rrcurveto +-128 -608 rlineto +closepath +297 618 rmoveto +-13 -59 rlineto +119 0 60 -47 0 -94 rrcurveto +0 -94 -67 -77 -82 0 rrcurveto +-68 0 -67 53 0 87 rrcurveto +0 26 4 34 9 42 rrcurveto +34 160 rlineto +28 140 63 66 76 0 rrcurveto +49 0 43 -40 0 -53 rrcurveto +0 -82 -64 -60 -124 -2 rrcurveto +closepath +endchar } ND +/gamma { +0 500 hsbw +-199 20 hstem +499 20 hstem +77 86 vstem +464 93 vstem +255 0 rmoveto +302 519 rlineto +-93 0 rlineto +-173 -312 rlineto +-27 -48 -22 -43 -16 -36 rrcurveto +-8 69 -6 51 -4 33 rrcurveto +-45 286 rlineto +-86 0 rlineto +90 -519 rlineto +-41 -199 rlineto +88 0 rlineto +41 199 rlineto +closepath +endchar } ND +/zeta { +0 463 hsbw +-208 20 hstem +642 74 hstem +49 85 vstem +308 81 vstem +236 716 rmoveto +-15 -74 rlineto +187 0 rlineto +-141 -79 -218 -216 0 -182 rrcurveto +0 -91 56 -69 103 -5 rrcurveto +64 -4 36 -5 0 -52 rrcurveto +0 -46 -35 -24 -70 -4 rrcurveto +-39 -73 rlineto +149 0 76 61 0 92 rrcurveto +0 75 -50 52 -94 4 rrcurveto +-95 2 -16 43 0 47 rrcurveto +0 149 144 195 270 143 rrcurveto +14 61 rlineto +-326 0 rlineto +closepath +endchar } ND +/eta { +0 555 hsbw +-199 20 hstem +0 20 hstem +458 72 hstem +34 88 vstem +142 80 vstem +323 88 vstem +440 88 vstem +34 0 rmoveto +88 0 rlineto +50 241 rlineto +36 170 83 47 79 0 rrcurveto +46 0 24 -21 0 -40 rrcurveto +0 -13 -4 -23 -6 -32 rrcurveto +-107 -528 rlineto +88 0 rlineto +105 513 rlineto +8 42 4 32 0 22 rrcurveto +0 69 -54 51 -78 0 rrcurveto +-64 0 -65 -34 -64 -68 rrcurveto +19 91 rlineto +-80 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/theta { +0 542 hsbw +-12 73 hstem +317 74 hstem +656 72 hstem +63 87 vstem +475 83 vstem +63 238 rmoveto +0 -156 79 -94 114 0 rrcurveto +181 0 121 254 0 244 rrcurveto +0 165 -79 77 -113 0 rrcurveto +-182 0 -121 -260 0 -230 rrcurveto +closepath +112 153 rmoveto +41 176 62 89 84 0 rrcurveto +68 0 45 -57 0 -88 rrcurveto +0 -31 -5 -40 -8 -49 rrcurveto +-287 0 rlineto +closepath +273 -74 rmoveto +-38 -159 -70 -97 -78 0 rrcurveto +-70 0 -42 61 0 94 rrcurveto +0 23 3 34 7 44 rrcurveto +288 0 rlineto +closepath +endchar } ND +/iota { +0 222 hsbw +0 20 hstem +499 20 hstem +30 88 vstem +138 89 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/kappa { +0 500 hsbw +0 20 hstem +290 229 hstem +29 89 vstem +141 88 vstem +369 101 vstem +141 519 rmoveto +-112 -519 rlineto +89 0 rlineto +41 190 rlineto +70 59 rlineto +140 -249 rlineto +101 0 rlineto +-177 303 rlineto +257 216 rlineto +-117 0 rlineto +-252 -229 rlineto +48 229 rlineto +-88 0 rlineto +closepath +endchar } ND +/lambda { +0 492 hsbw +0 20 hstem +407 309 hstem +-25 88 vstem +248 88 vstem +359 88 vstem +336 716 rmoveto +-88 0 rlineto +32 -197 rlineto +-305 -519 rlineto +88 0 rlineto +235 407 rlineto +61 -407 rlineto +88 0 rlineto +-111 716 rlineto +closepath +endchar } ND +/mu { +0 548 hsbw +-199 20 hstem +-12 74 hstem +499 20 hstem +-12 87 vstem +140 88 vstem +365 79 vstem +467 87 vstem +140 519 rmoveto +-152 -718 rlineto +87 0 rlineto +53 248 rlineto +30 -41 39 -20 46 0 rrcurveto +45 0 44 17 42 36 rrcurveto +-9 -41 rlineto +79 0 rlineto +110 519 rlineto +-87 0 rlineto +-59 -280 rlineto +-24 -109 -47 -68 -84 0 rrcurveto +-58 0 -38 34 0 54 rrcurveto +0 24 6 41 13 60 rrcurveto +52 244 rlineto +-88 0 rlineto +closepath +endchar } ND +/nu { +0 500 hsbw +0 80 hstem +499 20 hstem +79 86 vstem +466 93 vstem +164 0 rmoveto +98 0 rlineto +297 519 rlineto +-93 0 rlineto +-174 -312 rlineto +-26 -48 -22 -43 -16 -36 rrcurveto +-8 70 -6 51 -5 32 rrcurveto +-44 286 rlineto +-86 0 rlineto +85 -519 rlineto +closepath +endchar } ND +/xi { +0 447 hsbw +-208 20 hstem +407 72 hstem +656 72 hstem +56 93 vstem +163 89 vstem +313 83 vstem +505 728 rmoveto +-51 0 rlineto +-171 0 -120 -49 0 -122 rrcurveto +0 -60 31 -41 64 -23 rrcurveto +-124 -39 -78 -103 0 -108 rrcurveto +0 -102 56 -68 117 -15 rrcurveto +62 -10 22 -17 0 -36 rrcurveto +0 -42 -38 -24 -76 -4 rrcurveto +-38 -73 rlineto +127 4 108 42 0 109 rrcurveto +0 71 -46 40 -80 16 rrcurveto +-89 18 -32 24 0 70 rrcurveto +0 120 127 101 155 0 rrcurveto +15 72 rlineto +-107 0 -87 -8 0 79 rrcurveto +0 89 106 17 131 0 rrcurveto +16 72 rlineto +closepath +endchar } ND +/omicron { +0 556 hsbw +-12 69 hstem +462 68 hstem +49 88 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +endchar } ND +/rho { +0 573 hsbw +-199 20 hstem +-12 73 hstem +458 72 hstem +-14 89 vstem +471 87 vstem +75 -199 rmoveto +57 261 rlineto +37 -50 53 -24 68 0 rrcurveto +150 0 118 153 0 176 rrcurveto +0 126 -84 87 -120 0 rrcurveto +-170 0 -70 -127 -40 -196 rrcurveto +-88 -406 rlineto +89 0 rlineto +closepath +92 391 rmoveto +0 128 77 138 108 0 rrcurveto +72 0 47 -62 0 -78 rrcurveto +0 -110 -78 -147 -110 0 rrcurveto +-64 0 -52 43 0 88 rrcurveto +closepath +endchar } ND +/sigma1 { +0 486 hsbw +-208 73 hstem +458 72 hstem +54 88 vstem +306 79 vstem +536 502 rmoveto +-45 18 -45 10 -46 0 rrcurveto +-182 0 -164 -150 0 -156 rrcurveto +0 -67 25 -70 128 -69 rrcurveto +91 -49 8 -9 0 -32 rrcurveto +0 -42 -41 -21 -80 0 rrcurveto +-50 0 rlineto +-33 -73 rlineto +77 0 rlineto +152 0 54 65 0 72 rrcurveto +0 50 -20 35 -103 59 rrcurveto +-111 64 -9 41 0 47 rrcurveto +0 124 126 109 133 0 rrcurveto +35 0 34 -8 34 -14 rrcurveto +32 66 rlineto +closepath +endchar } ND +/upsilon { +0 550 hsbw +-12 73 hstem +499 20 hstem +73 83 vstem +467 89 vstem +140 519 rmoveto +-41 -196 rlineto +-3 -13 rlineto +-16 -77 -7 -52 0 -26 rrcurveto +0 -95 65 -72 120 0 rrcurveto +152 0 58 113 37 174 rrcurveto +51 244 rlineto +-89 0 rlineto +-60 -288 rlineto +-20 -104 -45 -66 -85 0 rrcurveto +-58 0 -43 31 0 59 rrcurveto +0 16 4 26 8 38 rrcurveto +60 288 rlineto +-88 0 rlineto +closepath +endchar } ND +/chi { +0 546 hsbw +-199 20 hstem +499 20 hstem +-72 107 vstem +102 90 vstem +347 96 vstem +482 109 vstem +102 519 rmoveto +104 -344 rlineto +-278 -374 rlineto +107 0 rlineto +223 303 rlineto +89 -303 rlineto +96 0 rlineto +-122 357 rlineto +270 361 rlineto +-109 0 rlineto +-210 -287 rlineto +-80 287 rlineto +-90 0 rlineto +closepath +endchar } ND +/psi { +0 728 hsbw +-199 256 hstem +499 20 hstem +76 85 vstem +240 89 vstem +392 88 vstem +646 87 vstem +140 519 rmoveto +-35 -163 rlineto +-20 -92 -9 -64 0 -37 rrcurveto +0 -92 56 -71 148 -10 rrcurveto +-40 -189 rlineto +89 0 rlineto +39 187 rlineto +204 10 69 74 40 197 rrcurveto +52 250 rlineto +-87 0 rlineto +-47 -219 rlineto +-36 -169 -31 -70 -149 -3 rrcurveto +97 461 rlineto +-88 0 rlineto +-98 -462 rlineto +-87 6 -46 27 0 68 rrcurveto +0 28 5 42 12 54 rrcurveto +51 237 rlineto +-89 0 rlineto +closepath +endchar } ND +/omega { +0 779 hsbw +-12 69 hstem +499 20 hstem +49 87 vstem +189 88 vstem +393 88 vstem +673 90 vstem +189 519 rmoveto +-92 -116 -48 -128 0 -97 rrcurveto +0 -124 67 -66 91 0 rrcurveto +64 0 69 39 40 74 rrcurveto +20 -72 51 -41 66 0 rrcurveto +136 0 110 162 0 195 rrcurveto +0 50 -8 58 -16 66 rrcurveto +-89 0 rlineto +15 -58 8 -54 0 -50 rrcurveto +0 -179 -75 -121 -78 0 rrcurveto +-44 0 -35 35 0 71 rrcurveto +0 28 6 41 12 54 rrcurveto +22 102 rlineto +-88 0 rlineto +-11 -53 rlineto +-35 -159 -28 -119 -104 0 rrcurveto +-42 0 -37 30 0 82 rrcurveto +0 94 47 117 94 139 rrcurveto +-88 0 rlineto +closepath +endchar } ND +/iotadieresis { +0 222 hsbw +0 20 hstem +499 20 hstem +599 100 hstem +30 88 138 85 243 88 vstem3 +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +29 599 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/upsilondieresis { +0 550 hsbw +-12 73 hstem +499 20 hstem +599 100 hstem +73 83 vstem +225 92 vstem +467 89 vstem +140 519 rmoveto +-41 -196 rlineto +-3 -13 rlineto +-16 -77 -7 -52 0 -26 rrcurveto +0 -95 65 -72 120 0 rrcurveto +152 0 58 113 37 174 rrcurveto +51 244 rlineto +-89 0 rlineto +-60 -288 rlineto +-20 -104 -45 -66 -85 0 rrcurveto +-58 0 -43 31 0 59 rrcurveto +0 16 4 26 8 38 rrcurveto +60 288 rlineto +-88 0 rlineto +closepath +85 80 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/omicrontonos { +0 556 hsbw +-12 69 hstem +462 68 hstem +696 20 hstem +49 88 vstem +280 73 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +143 376 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/upsilontonos { +0 550 hsbw +-12 73 hstem +499 20 hstem +696 20 hstem +73 83 278 73 473 83 vstem3 +140 519 rmoveto +-41 -196 rlineto +-3 -13 rlineto +-16 -77 -7 -52 0 -26 rrcurveto +0 -95 65 -72 120 0 rrcurveto +152 0 58 113 37 174 rrcurveto +51 244 rlineto +-89 0 rlineto +-60 -288 rlineto +-20 -104 -45 -66 -85 0 rrcurveto +-58 0 -43 31 0 59 rrcurveto +0 16 4 26 8 38 rrcurveto +60 288 rlineto +-88 0 rlineto +closepath +138 63 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/omegatonos { +0 779 hsbw +-12 69 hstem +499 20 hstem +696 20 hstem +49 87 vstem +189 88 vstem +389 73 vstem +481 111 vstem +673 90 vstem +189 519 rmoveto +-92 -116 -48 -128 0 -97 rrcurveto +0 -124 67 -66 91 0 rrcurveto +64 0 69 39 40 74 rrcurveto +20 -72 51 -41 66 0 rrcurveto +136 0 110 162 0 195 rrcurveto +0 50 -8 58 -16 66 rrcurveto +-89 0 rlineto +15 -58 8 -54 0 -50 rrcurveto +0 -179 -75 -121 -78 0 rrcurveto +-44 0 -35 35 0 71 rrcurveto +0 28 6 41 12 54 rrcurveto +22 102 rlineto +-88 0 rlineto +-11 -53 rlineto +-35 -159 -28 -119 -104 0 rrcurveto +-42 0 -37 30 0 82 rrcurveto +0 94 47 117 94 139 rrcurveto +-88 0 rlineto +closepath +200 63 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/afii10023 { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +760 100 hstem +320 93 vstem +521 92 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +275 760 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/afii10051 { +0 843 hsbw +-12 78 hstem +383 75 hstem +634 82 hstem +210 95 vstem +347 96 vstem +729 93 vstem +131 716 rmoveto +-18 -82 rlineto +234 0 rlineto +-137 -634 rlineto +95 0 rlineto +73 335 rlineto +76 32 68 16 61 0 rrcurveto +98 0 48 -57 0 -69 rrcurveto +0 -107 -76 -84 -96 0 rrcurveto +-29 0 -35 9 -40 20 rrcurveto +-18 -85 rlineto +42 -14 40 -8 38 0 rrcurveto +156 0 111 129 0 135 rrcurveto +0 109 -60 97 -169 0 rrcurveto +-60 0 -65 -15 -72 -28 rrcurveto +47 219 rlineto +233 0 rlineto +18 82 rlineto +-563 0 rlineto +closepath +endchar } ND +/afii10052 { +0 544 hsbw +0 20 hstem +634 82 hstem +874 20 hstem +42 94 vstem +324 73 vstem +416 111 vstem +194 716 rmoveto +-152 -716 rlineto +94 0 rlineto +135 634 rlineto +368 0 rlineto +17 82 rlineto +-462 0 rlineto +closepath +130 44 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/afii10053 { +0 708 hsbw +-12 76 hstem +324 85 hstem +646 82 hstem +91 95 vstem +731 500 rmoveto +-12 130 -99 98 -153 0 rrcurveto +-236 0 -140 -208 0 -231 rrcurveto +0 -202 123 -99 160 0 rrcurveto +150 0 123 97 48 150 rrcurveto +-92 13 rlineto +-44 -123 -74 -61 -102 0 rrcurveto +-120 0 -77 89 0 128 rrcurveto +0 43 rlineto +259 0 rlineto +19 85 rlineto +-261 0 rlineto +44 156 96 81 127 0 rrcurveto +96 0 57 -52 18 -102 rrcurveto +90 8 rlineto +closepath +endchar } ND +/afii10054 { +0 667 hsbw +-12 79 hstem +648 80 hstem +159 92 vstem +579 92 vstem +70 231 rmoveto +1 -183 113 -60 162 0 rrcurveto +142 0 135 80 0 130 rrcurveto +0 104 -60 42 -128 54 rrcurveto +-119 50 -65 19 0 75 rrcurveto +0 74 71 32 84 0 rrcurveto +93 0 80 -38 0 -105 rrcurveto +92 8 rlineto +0 14 rlineto +0 112 -120 89 -141 0 rrcurveto +-131 0 -120 -70 0 -121 rrcurveto +0 -108 72 -42 138 -60 rrcurveto +103 -45 54 -19 0 -72 rrcurveto +0 -64 -62 -60 -114 0 rrcurveto +-103 0 -83 53 0 95 rrcurveto +0 25 rlineto +-94 -9 rlineto +closepath +endchar } ND +/afii10055 { +0 278 hsbw +0 20 hstem +696 20 hstem +57 96 vstem +207 95 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/afii10056 { +0 278 hsbw +0 20 hstem +696 20 hstem +760 100 hstem +130 93 vstem +332 91 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +73 760 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +181 0 rmoveto +92 0 rlineto +20 100 rlineto +-91 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/afii10057 { +0 500 hsbw +-12 79 hstem +696 20 hstem +33 89 vstem +440 96 vstem +41 208 rmoveto +-6 -21 -2 -21 0 -22 rrcurveto +0 -99 61 -57 119 0 rrcurveto +110 0 73 58 31 147 rrcurveto +109 523 rlineto +-96 0 rlineto +-106 -508 rlineto +-19 -95 -28 -46 -72 0 rrcurveto +-59 0 -34 33 0 54 rrcurveto +0 12 2 21 5 28 rrcurveto +-88 -7 rlineto +closepath +endchar } ND +/afii10058 { +0 1066 hsbw +-12 79 hstem +330 81 hstem +634 82 hstem +252 453 vstem +946 96 vstem +640 411 rmoveto +65 305 rlineto +-453 0 rlineto +-102 -481 rlineto +-28 -130 -22 -38 -48 0 rrcurveto +-10 0 -16 3 -20 8 rrcurveto +-17 -78 rlineto +30 -8 23 -4 18 0 rrcurveto +124 0 29 100 33 154 rrcurveto +84 392 rlineto +262 0 rlineto +-137 -634 rlineto +248 0 rlineto +212 0 127 78 0 161 rrcurveto +0 132 -91 40 -165 0 rrcurveto +-146 0 rlineto +closepath +-69 -330 rmoveto +52 249 rlineto +150 0 rlineto +102 0 71 -12 0 -84 rrcurveto +0 -122 -118 -31 -173 0 rrcurveto +-84 0 rlineto +closepath +endchar } ND +/afii10059 { +0 982 hsbw +0 81 hstem +330 386 hstem +42 96 vstem +192 96 vstem +445 94 vstem +862 96 vstem +619 716 rmoveto +-95 0 rlineto +-62 -305 rlineto +-236 0 rlineto +62 305 rlineto +-96 0 rlineto +-150 -716 rlineto +96 0 rlineto +70 330 rlineto +237 0 rlineto +-70 -330 rlineto +244 0 rlineto +211 0 128 78 0 161 rrcurveto +0 130 -90 42 -166 0 rrcurveto +-145 0 rlineto +62 305 rlineto +closepath +-132 -635 rmoveto +52 249 rlineto +150 0 rlineto +103 0 70 -12 0 -84 rrcurveto +0 -133 -115 -20 -176 0 rrcurveto +-84 0 rlineto +closepath +endchar } ND +/afii10060 { +0 844 hsbw +0 462 hstem +634 82 hstem +208 95 vstem +346 95 vstem +715 94 vstem +130 716 rmoveto +-18 -82 rlineto +234 0 rlineto +-138 -634 rlineto +95 0 rlineto +73 335 rlineto +72 32 68 16 63 0 rrcurveto +90 0 46 -33 0 -66 rrcurveto +0 -20 -3 -23 -5 -25 rrcurveto +-48 -216 rlineto +95 0 rlineto +40 186 rlineto +10 44 5 36 0 28 rrcurveto +0 104 -77 64 -130 0 rrcurveto +-66 0 -69 -15 -73 -30 rrcurveto +47 217 rlineto +233 0 rlineto +18 82 rlineto +-562 0 rlineto +closepath +endchar } ND +/afii10061 { +0 589 hsbw +0 20 hstem +642 79 hstem +874 20 hstem +42 97 vstem +195 97 vstem +326 73 vstem +442 105 vstem +640 18 vstem +195 716 rmoveto +-153 -716 rlineto +97 0 rlineto +71 336 rlineto +80 -3 30 -33 55 -133 rrcurveto +67 -167 rlineto +105 0 rlineto +-81 201 rlineto +-38 91 -43 55 -48 19 rrcurveto +66 16 36 35 79 135 rrcurveto +31 53 16 37 48 0 rrcurveto +4 0 10 -1 13 -2 rrcurveto +18 0 rlineto +16 78 rlineto +-17 1 -14 1 -9 2 rrcurveto +-16 0 rlineto +-89 0 -42 -48 -69 -120 rrcurveto +-52 -88 -36 -65 -105 0 rrcurveto +67 316 rlineto +-97 0 rlineto +closepath +131 44 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +endchar } ND +/afii10062 { +0 639 hsbw +-10 81 hstem +696 20 hstem +756 59 hstem +113 96 vstem +289 57 vstem +522 59 vstem +649 102 vstem +113 716 rmoveto +200 -546 rlineto +-15 -24 rlineto +-32 -50 -29 -25 -26 0 rrcurveto +-4 0 -26 4 -48 8 rrcurveto +-17 -83 rlineto +26 0 rlineto +20 0 17 -2 13 -3 rrcurveto +13 -3 11 -2 7 0 rrcurveto +61 0 39 42 50 76 rrcurveto +378 608 rlineto +-102 0 rlineto +-274 -452 rlineto +-166 452 rlineto +-96 0 rlineto +closepath +176 167 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/afii10145 { +0 724 hsbw +-199 20 hstem +0 81 hstem +696 20 hstem +285 81 vstem +665 95 vstem +366 0 rmoveto +240 0 rlineto +154 716 rlineto +-95 0 rlineto +-136 -635 rlineto +-373 0 rlineto +136 635 rlineto +-95 0 rlineto +-155 -716 rlineto +243 0 rlineto +-43 -199 rlineto +82 0 rlineto +42 199 rlineto +closepath +endchar } ND +/afii10017 { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +-20 105 vstem +386 113 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +endchar } ND +/afii10018 { +0 651 hsbw +0 81 hstem +330 81 hstem +634 82 hstem +531 95 vstem +195 716 rmoveto +-153 -716 rlineto +245 0 rlineto +214 0 125 78 0 161 rrcurveto +0 132 -90 40 -166 0 rrcurveto +-145 0 rlineto +47 223 rlineto +368 0 rlineto +17 82 rlineto +-462 0 rlineto +closepath +-40 -635 rmoveto +53 249 rlineto +149 0 rlineto +102 0 72 -14 0 -81 rrcurveto +0 -126 -119 -28 -173 0 rrcurveto +-84 0 rlineto +closepath +endchar } ND +/afii10019 { +0 667 hsbw +0 81 hstem +329 81 hstem +634 82 hstem +565 90 vstem +43 0 rmoveto +347 0 rlineto +132 0 117 104 0 123 rrcurveto +0 68 -39 52 -77 27 rrcurveto +89 30 43 63 0 79 rrcurveto +0 114 -91 56 -149 0 rrcurveto +-222 0 rlineto +-150 -716 rlineto +closepath +182 410 rmoveto +47 224 rlineto +152 0 rlineto +94 0 47 -23 0 -71 rrcurveto +0 -84 -57 -46 -138 0 rrcurveto +-145 0 rlineto +closepath +-69 -329 rmoveto +52 248 rlineto +182 0 rlineto +117 0 34 -37 0 -66 rrcurveto +0 -103 -75 -42 -147 0 rrcurveto +-163 0 rlineto +closepath +endchar } ND +/afii10020 { +0 544 hsbw +0 20 hstem +634 82 hstem +42 94 vstem +194 462 vstem +194 716 rmoveto +-152 -716 rlineto +94 0 rlineto +135 634 rlineto +368 0 rlineto +17 82 rlineto +-462 0 rlineto +closepath +endchar } ND +/afii10021 { +0 704 hsbw +-143 20 hstem +0 81 hstem +634 82 hstem +-63 83 vstem +45 103 vstem +529 84 vstem +262 716 rmoveto +-61 -332 -72 -212 -84 -91 rrcurveto +-59 0 rlineto +-49 -224 rlineto +83 0 rlineto +32 143 rlineto +510 0 rlineto +-33 -143 rlineto +84 0 rlineto +50 224 rlineto +-66 0 rlineto +136 635 rlineto +-471 0 rlineto +closepath +79 -82 rmoveto +279 0 rlineto +-118 -553 rlineto +-354 0 rlineto +86 120 88 322 19 111 rrcurveto +closepath +endchar } ND +/afii10022 { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +195 516 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/afii10024 { +0 917 hsbw +0 400 hstem +642 79 hstem +-36 110 vstem +373 94 vstem +525 95 vstem +770 105 vstem +620 716 rmoveto +-95 0 rlineto +-67 -316 rlineto +-18 0 rlineto +-71 0 -34 44 -14 107 rrcurveto +-16 122 -13 47 -98 0 rrcurveto +-21 0 rlineto +-7 -1 -11 -1 -11 -1 rrcurveto +-18 -79 rlineto +22 2 14 1 6 0 rrcurveto +36 0 21 -21 6 -40 rrcurveto +9 -58 rlineto +13 -91 23 -55 55 -10 rrcurveto +-79 -26 -19 -15 -102 -124 rrcurveto +-167 -201 rlineto +110 0 rlineto +139 167 rlineto +94 114 34 52 104 3 rrcurveto +-72 -336 rlineto +94 0 rlineto +72 336 rlineto +77 -3 32 -33 54 -133 rrcurveto +68 -167 rlineto +105 0 rlineto +-85 211 rlineto +-34 82 -41 51 -49 22 rrcurveto +61 13 42 44 60 100 rrcurveto +33 58 rlineto +24 40 28 21 33 0 rrcurveto +21 0 rlineto +17 -4 rlineto +17 79 rlineto +-11 1 -11 1 -8 2 rrcurveto +-21 0 rlineto +-103 0 -31 -47 -70 -121 rrcurveto +-51 -89 -40 -64 -104 0 rrcurveto +68 316 rlineto +closepath +endchar } ND +/afii10025 { +0 614 hsbw +-12 80 hstem +331 84 hstem +649 79 hstem +476 94 vstem +258 331 rmoveto +46 0 rlineto +99 0 73 -30 0 -87 rrcurveto +0 -75 -62 -71 -113 0 rrcurveto +-102 0 -56 53 -12 107 rrcurveto +-83 -25 rlineto +28 -144 84 -71 142 0 rrcurveto +156 0 112 93 0 130 rrcurveto +0 77 -36 53 -70 30 rrcurveto +85 16 65 64 0 91 rrcurveto +0 110 -90 76 -121 0 rrcurveto +-130 0 -102 -75 -42 -134 rrcurveto +92 -20 rlineto +36 110 71 40 75 0 rrcurveto +65 0 51 -48 0 -60 rrcurveto +0 -72 -59 -54 -140 0 rrcurveto +-37 0 rlineto +-25 -84 rlineto +closepath +endchar } ND +/afii10026 { +0 715 hsbw +0 20 hstem +696 20 hstem +42 93 vstem +196 92 vstem +507 91 vstem +662 89 vstem +196 716 rmoveto +-154 -716 rlineto +93 0 rlineto +490 546 rlineto +-118 -546 rlineto +91 0 rlineto +153 716 rlineto +-89 0 rlineto +-491 -550 rlineto +117 550 rlineto +-92 0 rlineto +closepath +endchar } ND +/afii10027 { +0 715 hsbw +0 20 hstem +696 20 hstem +756 59 hstem +42 93 vstem +196 92 vstem +346 57 vstem +580 58 vstem +662 89 vstem +196 716 rmoveto +-154 -716 rlineto +93 0 rlineto +490 546 rlineto +-118 -546 rlineto +91 0 rlineto +153 716 rlineto +-89 0 rlineto +-491 -550 rlineto +117 550 rlineto +-92 0 rlineto +closepath +150 167 rmoveto +4 -78 51 -49 76 0 rrcurveto +76 0 63 49 22 78 rrcurveto +-58 0 rlineto +-19 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +endchar } ND +/afii10028 { +0 589 hsbw +0 20 hstem +642 79 hstem +42 97 vstem +195 97 vstem +442 105 vstem +640 18 vstem +195 716 rmoveto +-153 -716 rlineto +97 0 rlineto +71 336 rlineto +80 -3 30 -33 55 -133 rrcurveto +67 -167 rlineto +105 0 rlineto +-81 201 rlineto +-38 91 -43 55 -48 19 rrcurveto +66 16 36 35 79 135 rrcurveto +31 53 16 37 48 0 rrcurveto +4 0 10 -1 13 -2 rrcurveto +18 0 rlineto +16 78 rlineto +-17 1 -14 1 -9 2 rrcurveto +-16 0 rlineto +-89 0 -42 -48 -69 -120 rrcurveto +-52 -88 -36 -65 -105 0 rrcurveto +67 316 rlineto +-97 0 rlineto +closepath +endchar } ND +/afii10029 { +0 686 hsbw +-8 82 hstem +634 82 hstem +473 96 vstem +253 716 rmoveto +-103 -481 rlineto +-28 -132 -28 -29 -38 0 rrcurveto +-6 0 -16 2 -27 6 rrcurveto +-17 -82 rlineto +28 -5 21 -3 14 0 rrcurveto +110 0 38 43 44 207 rrcurveto +85 392 rlineto +280 0 rlineto +-137 -634 rlineto +96 0 rlineto +154 716 rlineto +-470 0 rlineto +closepath +endchar } ND +/afii10030 { +0 833 hsbw +0 77 hstem +619 97 hstem +44 93 vstem +193 118 vstem +342 93 vstem +628 95 vstem +752 120 vstem +44 0 rmoveto +93 0 rlineto +95 457 rlineto +8 36 8 50 8 63 rrcurveto +3 -56 5 -49 7 -42 rrcurveto +71 -459 rlineto +93 0 rlineto +266 468 rlineto +30 54 26 50 20 47 rrcurveto +-32 -100 -25 -91 -17 -80 rrcurveto +-75 -348 rlineto +95 0 rlineto +149 716 rlineto +-120 0 rlineto +-251 -444 rlineto +-46 -82 -33 -65 -20 -48 rrcurveto +-4 56 -6 58 -9 61 rrcurveto +-72 464 rlineto +-118 0 rlineto +-149 -716 rlineto +closepath +endchar } ND +/afii10031 { +0 722 hsbw +0 418 hstem +696 20 hstem +42 96 vstem +192 95 vstem +509 95 vstem +658 96 vstem +42 0 rmoveto +96 0 rlineto +70 337 rlineto +371 0 rlineto +-70 -337 rlineto +95 0 rlineto +150 716 rlineto +-96 0 rlineto +-62 -298 rlineto +-371 0 rlineto +62 298 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/afii10032 { +0 778 hsbw +-12 79 hstem +648 80 hstem +91 95 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +endchar } ND +/afii10033 { +0 725 hsbw +0 20 hstem +634 82 hstem +42 96 vstem +509 96 vstem +42 0 rmoveto +96 0 rlineto +135 634 rlineto +372 0 rlineto +-136 -634 rlineto +96 0 rlineto +149 716 rlineto +-562 0 rlineto +-150 -716 rlineto +closepath +endchar } ND +/afii10034 { +0 667 hsbw +0 20 hstem +291 81 hstem +638 78 hstem +43 96 vstem +604 94 vstem +43 0 rmoveto +96 0 rlineto +60 291 rlineto +179 0 rlineto +152 0 168 101 0 148 rrcurveto +0 109 -72 67 -134 0 rrcurveto +-299 0 rlineto +-150 -716 rlineto +closepath +173 372 rmoveto +56 266 rlineto +184 0 rlineto +98 0 50 -20 0 -80 rrcurveto +0 -108 -87 -58 -143 0 rrcurveto +-158 0 rlineto +closepath +endchar } ND +/afii10035 { +0 722 hsbw +-12 79 hstem +649 79 hstem +91 95 vstem +603 252 rmoveto +-36 -118 -86 -67 -100 0 rrcurveto +-116 0 -79 79 0 147 rrcurveto +0 183 108 173 175 0 rrcurveto +93 0 60 -52 19 -102 rrcurveto +89 8 rlineto +-15 137 -99 88 -152 0 rrcurveto +-225 0 -148 -197 0 -236 rrcurveto +0 -198 109 -109 174 0 rrcurveto +142 0 122 85 60 166 rrcurveto +-95 13 rlineto +closepath +endchar } ND +/afii10036 { +0 611 hsbw +0 20 hstem +634 82 hstem +227 96 vstem +359 96 vstem +227 0 rmoveto +96 0 rlineto +132 634 rlineto +233 0 rlineto +17 82 rlineto +-563 0 rlineto +-17 -82 rlineto +234 0 rlineto +-132 -634 rlineto +closepath +endchar } ND +/afii10037 { +0 639 hsbw +-10 81 hstem +696 20 hstem +113 96 vstem +649 102 vstem +113 716 rmoveto +200 -546 rlineto +-15 -24 rlineto +-32 -50 -29 -25 -26 0 rrcurveto +-4 0 -26 4 -48 8 rrcurveto +-17 -83 rlineto +26 0 rlineto +20 0 17 -2 13 -3 rrcurveto +13 -3 11 -2 7 0 rrcurveto +61 0 39 42 50 76 rrcurveto +378 608 rlineto +-102 0 rlineto +-274 -452 rlineto +-166 452 rlineto +-96 0 rlineto +closepath +endchar } ND +/afii10038 { +0 795 hsbw +0 163 hstem +569 147 hstem +80 96 vstem +306 95 vstem +460 92 vstem +697 96 vstem +460 716 rmoveto +-11 -62 rlineto +-243 -8 -126 -156 0 -176 rrcurveto +0 -147 106 -79 139 -5 rrcurveto +-19 -83 rlineto +95 0 rlineto +16 79 rlineto +210 5 166 150 0 184 rrcurveto +0 152 -112 76 -141 2 rrcurveto +12 68 rlineto +-92 0 rlineto +closepath +-28 -144 rmoveto +-90 -409 rlineto +-104 0 -62 54 0 86 rrcurveto +0 137 90 125 166 7 rrcurveto +closepath +3 -412 rmoveto +88 409 rlineto +109 -2 65 -48 0 -90 rrcurveto +0 -139 -94 -129 -168 -1 rrcurveto +closepath +endchar } ND +/afii10039 { +0 667 hsbw +0 20 hstem +696 20 hstem +-32 127 vstem +107 106 vstem +515 104 vstem +644 125 vstem +-32 0 rmoveto +127 0 rlineto +200 213 rlineto +25 26 21 26 18 24 rrcurveto +15 -33 13 -27 12 -20 rrcurveto +116 -209 rlineto +104 0 rlineto +-196 346 rlineto +346 370 rlineto +-125 0 rlineto +-157 -166 rlineto +-51 -53 -37 -43 -24 -32 rrcurveto +-5 11 -5 10 -5 10 rrcurveto +-5 8 -5 9 -3 9 rrcurveto +-4 7 -14 25 -24 43 rrcurveto +-92 162 rlineto +-106 0 rlineto +203 -354 rlineto +-342 -362 rlineto +closepath +endchar } ND +/afii10040 { +0 727 hsbw +-143 20 hstem +0 81 hstem +696 20 hstem +195 96 vstem +563 81 vstem +664 95 vstem +625 81 rmoveto +134 635 rlineto +-95 0 rlineto +-135 -635 rlineto +-374 0 rlineto +136 635 rlineto +-96 0 rlineto +-153 -716 rlineto +552 0 rlineto +-31 -143 rlineto +81 0 rlineto +47 224 rlineto +-66 0 rlineto +closepath +endchar } ND +/afii10041 { +0 673 hsbw +0 20 hstem +240 476 hstem +107 93 vstem +461 95 vstem +615 94 vstem +165 716 rmoveto +-42 -197 rlineto +-11 -51 -5 -39 0 -27 rrcurveto +0 -91 73 -71 128 0 rrcurveto +72 0 72 14 70 30 rrcurveto +-61 -284 rlineto +95 0 rlineto +153 716 rlineto +-94 0 rlineto +-75 -351 rlineto +-73 -32 -68 -15 -62 0 rrcurveto +-98 0 -39 47 0 51 rrcurveto +0 16 3 25 8 34 rrcurveto +49 225 rlineto +-95 0 rlineto +closepath +endchar } ND +/afii10042 { +0 920 hsbw +0 81 hstem +696 20 hstem +197 96 vstem +394 95 vstem +529 96 vstem +862 94 vstem +197 716 rmoveto +-155 -716 rlineto +761 0 rlineto +153 716 rlineto +-94 0 rlineto +-137 -635 rlineto +-236 0 rlineto +136 635 rlineto +-96 0 rlineto +-135 -635 rlineto +-239 0 rlineto +138 635 rlineto +-96 0 rlineto +closepath +endchar } ND +/afii10043 { +0 923 hsbw +-143 20 hstem +0 81 hstem +696 20 hstem +197 96 vstem +394 95 vstem +529 96 vstem +754 84 vstem +862 94 vstem +820 81 rmoveto +136 635 rlineto +-94 0 rlineto +-137 -635 rlineto +-236 0 rlineto +136 635 rlineto +-96 0 rlineto +-135 -635 rlineto +-239 0 rlineto +138 635 rlineto +-96 0 rlineto +-155 -716 rlineto +744 0 rlineto +-32 -143 rlineto +84 0 rlineto +49 224 rlineto +-67 0 rlineto +closepath +endchar } ND +/afii10044 { +0 805 hsbw +0 81 hstem +330 81 hstem +634 82 hstem +130 315 vstem +686 95 vstem +445 716 rmoveto +-315 0 rlineto +-17 -82 rlineto +220 0 rlineto +-136 -634 rlineto +245 0 rlineto +214 0 125 79 0 160 rrcurveto +0 128 -88 44 -168 0 rrcurveto +-145 0 rlineto +65 305 rlineto +closepath +-135 -635 rmoveto +52 249 rlineto +150 0 rlineto +102 0 72 -12 0 -84 rrcurveto +0 -123 -120 -30 -172 0 rrcurveto +-84 0 rlineto +closepath +endchar } ND +/afii10045 { +0 886 hsbw +0 81 hstem +330 386 hstem +195 95 vstem +531 95 683 86 826 95 vstem3 +826 716 rmoveto +-152 -716 rlineto +95 0 rlineto +152 716 rlineto +-95 0 rlineto +closepath +-631 0 rmoveto +-153 -716 rlineto +245 0 rlineto +214 0 125 78 0 161 rrcurveto +0 132 -90 40 -166 0 rrcurveto +-145 0 rlineto +65 305 rlineto +-95 0 rlineto +closepath +-40 -635 rmoveto +53 249 rlineto +149 0 rlineto +102 0 72 -14 0 -81 rrcurveto +0 -126 -119 -28 -173 0 rrcurveto +-84 0 rlineto +closepath +endchar } ND +/afii10046 { +0 651 hsbw +0 81 hstem +330 386 hstem +195 95 vstem +531 95 vstem +195 716 rmoveto +-153 -716 rlineto +245 0 rlineto +214 0 125 78 0 161 rrcurveto +0 132 -90 40 -166 0 rrcurveto +-145 0 rlineto +65 305 rlineto +-95 0 rlineto +closepath +-40 -635 rmoveto +53 249 rlineto +149 0 rlineto +102 0 72 -14 0 -81 rrcurveto +0 -126 -119 -28 -173 0 rrcurveto +-84 0 rlineto +closepath +endchar } ND +/afii10047 { +0 694 hsbw +-12 76 hstem +327 85 hstem +648 80 hstem +592 95 vstem +317 327 rmoveto +266 0 rlineto +-44 -175 -104 -88 -122 0 rrcurveto +-106 0 -64 71 -9 115 rrcurveto +-90 -25 rlineto +9 -123 91 -114 168 0 rrcurveto +222 0 153 193 0 242 rrcurveto +0 194 -113 111 -168 0 rrcurveto +-136 0 -112 -84 -56 -124 rrcurveto +86 -22 rlineto +44 100 71 50 96 0 rrcurveto +106 0 87 -74 0 -145 rrcurveto +0 -17 rlineto +-256 0 rlineto +-19 -85 rlineto +closepath +endchar } ND +/afii10048 { +0 1022 hsbw +-12 77 hstem +315 81 hstem +649 79 hstem +42 95 202 87 354 95 vstem3 +917 95 vstem +195 716 rmoveto +-153 -716 rlineto +95 0 rlineto +67 315 rlineto +150 0 rlineto +0 -18 rlineto +0 -166 99 -143 190 0 rrcurveto +213 0 156 185 0 235 rrcurveto +0 185 -101 135 -182 0 rrcurveto +-180 0 -145 -126 -41 -206 rrcurveto +-142 0 rlineto +68 320 rlineto +-94 0 rlineto +closepath +528 -67 rmoveto +104 0 90 -76 0 -158 rrcurveto +0 -171 -98 -179 -166 0 rrcurveto +-110 0 -94 81 0 147 rrcurveto +0 208 138 148 136 0 rrcurveto +closepath +endchar } ND +/afii10049 { +0 682 hsbw +0 396 hstem +634 82 hstem +-26 126 vstem +119 94 vstem +472 93 vstem +541 319 rmoveto +-69 -319 rlineto +93 0 rlineto +155 716 rlineto +-283 0 rlineto +-202 0 -116 -61 0 -159 rrcurveto +0 -98 57 -57 112 -18 rrcurveto +-38 -13 -44 -37 -52 -60 rrcurveto +-180 -213 rlineto +126 0 rlineto +184 213 rlineto +73 84 7 22 120 0 rrcurveto +57 0 rlineto +closepath +67 315 rmoveto +-51 -238 rlineto +-148 0 rlineto +-126 0 -70 15 0 89 rrcurveto +0 117 103 17 161 0 rrcurveto +131 0 rlineto +closepath +endchar } ND +/afii10065 { +0 556 hsbw +-12 69 hstem +458 72 hstem +44 88 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +endchar } ND +/afii10066 { +0 563 hsbw +-12 72 hstem +449 70 hstem +621 85 hstem +708 20 hstem +58 87 vstem +458 87 vstem +509 728 rmoveto +-5 -15 -15 -7 -26 0 rrcurveto +-78 0 rlineto +-255 0 -72 -324 0 -176 rrcurveto +0 -130 76 -88 132 0 rrcurveto +166 0 113 147 0 168 rrcurveto +0 144 -103 72 -94 0 rrcurveto +-30 0 -65 -1 -69 -64 rrcurveto +49 120 13 47 108 0 rrcurveto +90 0 rlineto +74 0 58 8 20 99 rrcurveto +-87 0 rlineto +closepath +-51 -421 rmoveto +0 -111 -77 -136 -113 0 rrcurveto +-76 0 -47 64 0 74 rrcurveto +0 132 77 119 116 0 rrcurveto +76 0 44 -57 0 -85 rrcurveto +closepath +endchar } ND +/afii10067 { +0 522 hsbw +-12 70 hstem +240 65 hstem +460 70 hstem +49 90 vstem +387 90 vstem +379 271 rmoveto +86 21 44 43 0 66 rrcurveto +0 73 -58 56 -108 0 rrcurveto +-180 0 -114 -151 0 -184 rrcurveto +0 -123 80 -84 140 0 rrcurveto +137 0 71 84 0 79 rrcurveto +0 57 -33 40 -65 23 rrcurveto +closepath +-223 37 rmoveto +28 94 74 58 82 0 rrcurveto +46 0 32 -29 0 -37 rrcurveto +0 -59 -67 -30 -133 0 rrcurveto +-18 0 -20 1 -24 2 rrcurveto +closepath +-14 -68 rmoveto +47 0 rlineto +150 0 48 -17 0 -72 rrcurveto +0 -52 -44 -41 -68 0 rrcurveto +-88 0 -48 57 0 83 rrcurveto +0 13 1 15 2 14 rrcurveto +closepath +endchar } ND +/afii10068 { +0 493 hsbw +-12 69 hstem +459 71 hstem +38 88 vstem +393 87 vstem +172 390 rmoveto +30 52 21 17 66 0 rrcurveto +69 0 35 -32 0 -36 rrcurveto +0 -59 -56 -14 -97 -21 rrcurveto +-132 -30 -70 -40 0 -98 rrcurveto +0 -79 66 -62 138 0 rrcurveto +118 0 74 55 32 112 rrcurveto +-75 6 rlineto +-28 -75 -32 -29 -82 0 rrcurveto +-67 0 -56 30 0 47 rrcurveto +0 68 66 10 92 22 rrcurveto +118 28 78 29 0 97 rrcurveto +0 80 -66 62 -122 0 rrcurveto +-98 0 -66 -45 -36 -89 rrcurveto +80 -6 rlineto +closepath +endchar } ND +/afii10069 { +0 553 hsbw +-12 72 hstem +460 70 hstem +651 77 hstem +49 88 vstem +470 77 vstem +223 651 rmoveto +57 0 rlineto +139 0 51 -59 0 -151 rrcurveto +-30 60 -47 29 -66 0 rrcurveto +-152 0 -126 -144 0 -181 rrcurveto +0 -143 90 -74 120 0 rrcurveto +185 0 103 179 0 296 rrcurveto +0 182 -80 83 -164 0 rrcurveto +-64 0 rlineto +-16 -77 rlineto +closepath +-86 -450 rmoveto +0 129 74 130 118 0 rrcurveto +76 0 46 -61 0 -80 rrcurveto +0 -127 -76 -132 -113 0 rrcurveto +-79 0 -46 57 0 84 rrcurveto +closepath +endchar } ND +/afii10070 { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +52 89 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +endchar } ND +/afii10072 { +0 688 hsbw +0 297 hstem +464 55 hstem +-29 108 vstem +263 87 vstem +375 86 vstem +552 91 vstem +375 519 rmoveto +-48 -222 rlineto +-50 0 -17 18 -18 87 rrcurveto +-16 77 -16 40 -69 0 rrcurveto +-16 0 -15 -2 -15 -4 rrcurveto +-6 -56 rlineto +10 1 8 3 4 3 rrcurveto +15 0 rlineto +28 0 7 -22 5 -35 rrcurveto +17 -92 15 -23 39 -25 rrcurveto +-46 -12 -43 -32 -40 -50 rrcurveto +-137 -173 rlineto +108 0 rlineto +107 139 rlineto +73 96 20 6 36 2 rrcurveto +-52 -243 rlineto +87 0 rlineto +52 243 rlineto +46 -8 21 -21 31 -82 rrcurveto +52 -132 rlineto +91 0 rlineto +-65 166 rlineto +-30 73 -28 17 -30 11 rrcurveto +44 15 41 39 36 65 rrcurveto +34 61 17 16 30 0 rrcurveto +8 0 9 -2 12 -4 rrcurveto +20 53 rlineto +-19 6 -18 3 -17 0 rrcurveto +-51 0 -42 -17 -56 -94 rrcurveto +-52 -87 -29 -24 -37 0 rrcurveto +-6 0 rlineto +47 222 rlineto +-86 0 rlineto +closepath +endchar } ND +/afii10073 { +0 465 hsbw +-12 68 hstem +232 69 hstem +464 66 hstem +368 87 vstem +171 384 rmoveto +33 76 36 4 38 0 rrcurveto +60 0 30 -23 0 -48 rrcurveto +0 -62 -46 -30 -92 0 rrcurveto +-22 0 rlineto +-15 -69 rlineto +83 0 58 -9 0 -71 rrcurveto +0 -58 -47 -38 -65 0 rrcurveto +-69 0 -41 31 -13 64 rrcurveto +-84 -6 rlineto +20 -105 67 -52 115 0 rrcurveto +134 0 71 80 0 90 rrcurveto +0 46 -21 36 -40 26 rrcurveto +62 28 32 45 0 60 rrcurveto +0 78 -63 53 -104 0 rrcurveto +-96 0 -60 -34 -42 -102 rrcurveto +81 -10 rlineto +closepath +endchar } ND +/afii10074 { +0 556 hsbw +-12 73 hstem +499 20 hstem +63 89 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +endchar } ND +/afii10075 { +0 556 hsbw +-12 73 hstem +499 20 hstem +594 127 hstem +63 97 235 50 368 81 vstem3 +461 59 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-160 627 rmoveto +4 -78 51 -49 76 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-19 -43 -35 -25 -46 0 rrcurveto +-46 0 -24 21 -6 47 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/afii10076 { +0 472 hsbw +0 20 hstem +243 54 hstem +448 71 hstem +31 87 vstem +145 86 vstem +339 91 vstem +145 519 rmoveto +-114 -519 rlineto +87 0 rlineto +53 243 rlineto +60 0 23 -17 36 -96 rrcurveto +49 -130 rlineto +91 0 rlineto +-60 158 rlineto +-26 65 -21 26 -44 18 rrcurveto +52 18 26 27 44 76 rrcurveto +32 56 6 4 44 0 rrcurveto +21 0 rlineto +16 71 rlineto +-41 0 rlineto +-70 0 -29 -18 -58 -97 rrcurveto +-56 -93 -20 -14 -49 0 rrcurveto +-15 0 rlineto +49 222 rlineto +-86 0 rlineto +closepath +endchar } ND +/afii10077 { +0 564 hsbw +-7 79 hstem +445 74 hstem +372 87 vstem +179 519 rmoveto +-71 -328 rlineto +-27 -115 -3 -4 -44 0 rrcurveto +-37 0 rlineto +-17 -72 rlineto +32 -4 26 -3 20 0 rrcurveto +68 0 35 36 23 107 rrcurveto +66 309 rlineto +218 0 rlineto +-96 -445 rlineto +87 0 rlineto +111 519 rlineto +-391 0 rlineto +closepath +endchar } ND +/afii10078 { +0 686 hsbw +0 105 hstem +434 85 hstem +31 87 vstem +262 79 vstem +494 87 vstem +142 519 rmoveto +-111 -519 rlineto +87 0 rlineto +93 434 rlineto +51 -434 rlineto +79 0 rlineto +243 418 rlineto +-90 -418 rlineto +87 0 rlineto +111 519 rlineto +-129 0 rlineto +-241 -414 rlineto +-49 414 rlineto +-131 0 rlineto +closepath +endchar } ND +/afii10079 { +0 550 hsbw +0 302 hstem +499 20 hstem +31 87 vstem +142 87 vstem +358 88 vstem +469 86 vstem +142 519 rmoveto +-111 -519 rlineto +87 0 rlineto +50 232 rlineto +240 0 rlineto +-50 -232 rlineto +88 0 rlineto +109 519 rlineto +-86 0 rlineto +-46 -217 rlineto +-241 0 rlineto +47 217 rlineto +-87 0 rlineto +closepath +endchar } ND +/afii10080 { +0 556 hsbw +-12 69 hstem +462 68 hstem +49 88 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +endchar } ND +/afii10081 { +0 550 hsbw +0 20 hstem +447 72 hstem +31 87 vstem +358 88 vstem +142 519 rmoveto +-111 -519 rlineto +87 0 rlineto +95 447 rlineto +240 0 rlineto +-95 -447 rlineto +88 0 rlineto +109 519 rlineto +-413 0 rlineto +closepath +endchar } ND +/afii10082 { +0 556 hsbw +-199 20 hstem +-12 73 hstem +459 71 hstem +-10 88 vstem +140 81 vstem +447 88 vstem +-10 -199 rmoveto +88 0 rlineto +59 282 rlineto +34 -64 48 -31 62 0 rrcurveto +152 0 102 170 0 164 rrcurveto +0 133 -72 75 -100 0 rrcurveto +-54 0 -43 -20 -60 -64 rrcurveto +15 73 rlineto +-81 0 rlineto +-150 -718 rlineto +closepath +175 411 rmoveto +0 90 63 157 109 0 rrcurveto +62 0 48 -50 0 -88 rrcurveto +0 -119 -68 -141 -102 0 rrcurveto +-78 0 -34 50 0 101 rrcurveto +closepath +endchar } ND +/afii10083 { +0 500 hsbw +-12 69 hstem +458 72 hstem +56 90 vstem +391 189 rmoveto +-30 -90 -57 -42 -57 0 rrcurveto +-58 0 -43 44 0 88 rrcurveto +0 110 48 159 127 0 rrcurveto +61 0 40 -40 2 -65 rrcurveto +87 5 rlineto +0 104 -71 68 -110 0 rrcurveto +-171 0 -103 -176 0 -158 rrcurveto +0 -131 76 -77 114 0 rrcurveto +104 0 85 62 44 130 rrcurveto +-88 9 rlineto +closepath +endchar } ND +/afii10084 { +0 833 hsbw +0 20 hstem +458 72 hstem +33 88 vstem +141 88 vstem +337 88 vstem +724 89 vstem +33 0 rmoveto +88 0 rlineto +51 245 rlineto +25 123 69 90 95 0 rrcurveto +33 0 24 -24 0 -33 rrcurveto +0 -10 -3 -17 -5 -24 rrcurveto +-73 -350 rlineto +88 0 rlineto +53 251 rlineto +25 128 67 79 92 0 rrcurveto +38 0 24 -22 0 -33 rrcurveto +0 -12 -4 -20 -6 -28 rrcurveto +-71 -343 rlineto +88 0 rlineto +70 334 rlineto +8 36 4 27 0 16 rrcurveto +0 74 -44 43 -86 0 rrcurveto +-66 0 -57 -32 -53 -65 rrcurveto +-14 61 -45 36 -64 0 rrcurveto +-62 0 -45 -24 -66 -73 rrcurveto +18 86 rlineto +-88 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/afii10085 { +0 500 hsbw +-210 85 hstem +499 20 hstem +91 87 vstem +469 92 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +endchar } ND +/afii10086 { +0 835 hsbw +-199 20 hstem +-12 69 hstem +457 73 hstem +696 20 hstem +46 89 vstem +292 88 403 60 487 86 vstem3 +734 89 vstem +347 55 rmoveto +-54 -254 rlineto +87 0 rlineto +59 274 rlineto +18 -43 48 -44 71 0 rrcurveto +134 0 113 161 0 178 rrcurveto +0 137 -80 66 -86 0 rrcurveto +-54 0 -45 -23 -37 -46 rrcurveto +52 255 rlineto +-86 0 rlineto +-58 -270 rlineto +-16 44 -57 40 -62 0 rrcurveto +-136 0 -112 -162 0 -177 rrcurveto +0 -126 73 -77 94 0 rrcurveto +51 0 45 22 38 45 rrcurveto +closepath +120 124 rmoveto +0 122 67 156 102 0 rrcurveto +58 0 40 -46 0 -77 rrcurveto +0 -111 -57 -166 -108 0 rrcurveto +-56 0 -46 48 0 74 rrcurveto +closepath +-64 157 rmoveto +0 -89 -55 -190 -114 0 rrcurveto +-60 0 -39 45 0 78 rrcurveto +0 141 73 136 92 0 rrcurveto +57 0 46 -48 0 -73 rrcurveto +closepath +endchar } ND +/afii10087 { +0 500 hsbw +0 20 hstem +499 20 hstem +95 97 vstem +353 98 vstem +-1 0 rmoveto +110 0 rlineto +155 189 rlineto +14 -34 12 -28 11 -22 rrcurveto +52 -105 rlineto +98 0 rlineto +-131 256 rlineto +218 263 rlineto +-108 0 rlineto +-150 -192 rlineto +-13 32 -15 33 -16 34 rrcurveto +-44 93 rlineto +-97 0 rlineto +129 -256 rlineto +-225 -263 rlineto +closepath +endchar } ND +/afii10088 { +0 572 hsbw +-151 20 hstem +-12 73 hstem +499 20 hstem +61 87 vstem +380 84 vstem +467 89 vstem +141 519 rmoveto +-69 -328 rlineto +-8 -34 -3 -26 0 -18 rrcurveto +0 -79 54 -46 75 0 rrcurveto +58 0 58 28 59 56 rrcurveto +15 14 rlineto +0 -21 rlineto +0 -47 36 -27 51 0 rrcurveto +-32 -142 rlineto +73 0 rlineto +48 213 rlineto +-59 0 rlineto +-22 0 -11 8 0 18 rrcurveto +0 4 4 20 8 38 rrcurveto +80 369 rlineto +-89 0 rlineto +-50 -230 rlineto +-34 -157 -62 -71 -101 0 rrcurveto +-48 0 -24 20 0 39 rrcurveto +0 18 3 25 8 34 rrcurveto +70 322 rlineto +-88 0 rlineto +closepath +endchar } ND +/afii10089 { +0 518 hsbw +0 20 hstem +177 342 hstem +74 88 vstem +324 89 vstem +435 88 vstem +111 519 rmoveto +-14 -69 rlineto +-16 -78 -7 -48 0 -18 rrcurveto +0 -83 63 -46 107 0 rrcurveto +38 0 41 7 44 15 rrcurveto +-43 -199 rlineto +89 0 rlineto +110 519 rlineto +-88 0 rlineto +-53 -250 rlineto +-36 -15 -38 -7 -42 0 rrcurveto +-70 0 -34 23 0 46 rrcurveto +0 22 6 38 12 56 rrcurveto +18 87 rlineto +-87 0 rlineto +closepath +endchar } ND +/afii10090 { +0 830 hsbw +-12 75 hstem +499 20 hstem +59 89 vstem +446 87 vstem +636 87 vstem +749 86 vstem +143 519 rmoveto +-67 -307 rlineto +-12 -54 -5 -38 0 -22 rrcurveto +0 -66 54 -44 72 0 rrcurveto +62 0 59 33 55 66 rrcurveto +4 -51 49 -48 71 0 rrcurveto +64 0 57 33 48 66 rrcurveto +-18 -87 rlineto +87 0 rlineto +112 519 rlineto +-86 0 rlineto +-56 -242 rlineto +0 -10 rlineto +0 -140 -111 -64 -76 0 rrcurveto +-36 0 -19 19 0 38 rrcurveto +0 14 2 20 6 26 rrcurveto +74 339 rlineto +-87 0 rlineto +-58 -264 rlineto +-28 -120 -56 -72 -97 0 rrcurveto +-39 0 -20 19 0 38 rrcurveto +0 14 3 23 7 31 rrcurveto +72 331 rlineto +-87 0 rlineto +closepath +endchar } ND +/afii10091 { +0 851 hsbw +-151 20 hstem +-12 75 hstem +499 20 hstem +59 89 vstem +446 87 vstem +659 86 vstem +749 87 vstem +361 87 rmoveto +4 -54 53 -45 64 0 rrcurveto +46 0 61 1 70 94 rrcurveto +0 -19 rlineto +0 -49 30 -24 60 0 rrcurveto +-34 -142 rlineto +74 0 rlineto +47 213 rlineto +-59 0 rlineto +-22 0 -10 8 0 17 rrcurveto +0 13 1 13 3 12 rrcurveto +87 394 rlineto +-87 0 rlineto +-56 -242 rlineto +0 -10 rlineto +0 -138 -109 -66 -78 0 rrcurveto +-36 0 -19 18 0 36 rrcurveto +0 16 2 21 6 26 rrcurveto +74 339 rlineto +-87 0 rlineto +-58 -264 rlineto +-28 -120 -56 -72 -97 0 rrcurveto +-39 0 -20 19 0 38 rrcurveto +0 14 3 23 7 31 rrcurveto +72 331 rlineto +-87 0 rlineto +-67 -307 rlineto +-12 -54 -5 -38 0 -22 rrcurveto +0 -66 54 -44 72 0 rrcurveto +62 0 59 33 55 66 rrcurveto +closepath +endchar } ND +/afii10092 { +0 621 hsbw +0 70 hstem +247 71 hstem +445 74 hstem +75 251 vstem +499 89 vstem +75 519 rmoveto +-16 -74 rlineto +164 0 rlineto +-97 -445 rlineto +221 0 rlineto +151 0 90 64 0 115 rrcurveto +0 99 -78 40 -134 0 rrcurveto +-94 0 rlineto +44 201 rlineto +-251 0 rlineto +closepath +153 -449 rmoveto +39 177 rlineto +100 0 rlineto +84 0 48 -14 0 -66 rrcurveto +0 -77 -59 -20 -99 0 rrcurveto +-113 0 rlineto +closepath +endchar } ND +/afii10093 { +0 736 hsbw +0 70 hstem +247 272 hstem +143 88 vstem +403 89 vstem +542 89 vstem +654 89 vstem +654 519 rmoveto +-112 -519 rlineto +89 0 rlineto +112 519 rlineto +-89 0 rlineto +closepath +-511 0 rmoveto +-112 -519 rlineto +220 0 rlineto +153 0 88 66 0 113 rrcurveto +0 98 -76 41 -135 0 rrcurveto +-94 0 rlineto +44 201 rlineto +-88 0 rlineto +closepath +-10 -449 rmoveto +38 177 rlineto +100 0 rlineto +86 0 46 -13 0 -67 rrcurveto +0 -77 -58 -20 -99 0 rrcurveto +-113 0 rlineto +closepath +endchar } ND +/afii10094 { +0 526 hsbw +0 70 hstem +247 272 hstem +143 88 vstem +403 89 vstem +143 519 rmoveto +-112 -519 rlineto +220 0 rlineto +153 0 88 66 0 113 rrcurveto +0 98 -76 41 -135 0 rrcurveto +-94 0 rlineto +44 201 rlineto +-88 0 rlineto +closepath +-10 -449 rmoveto +38 177 rlineto +100 0 rlineto +86 0 46 -13 0 -67 rrcurveto +0 -77 -58 -20 -99 0 rrcurveto +-113 0 rlineto +closepath +endchar } ND +/afii10095 { +0 492 hsbw +-12 71 hstem +232 71 hstem +460 70 hstem +390 89 vstem +219 232 rmoveto +159 0 rlineto +-28 -115 -55 -58 -78 0 rrcurveto +-59 0 -43 36 -2 59 rrcurveto +-87 -7 rlineto +1 -92 74 -67 108 0 rrcurveto +169 0 101 152 0 183 rrcurveto +0 130 -73 77 -116 0 rrcurveto +-103 0 -75 -57 -48 -112 rrcurveto +88 -9 rlineto +30 72 46 36 60 0 rrcurveto +66 0 36 -55 0 -64 rrcurveto +0 -38 rlineto +-157 0 rlineto +-14 -71 rlineto +closepath +endchar } ND +/afii10096 { +0 752 hsbw +-12 70 225 68 460 70 hstem3 +31 89 vstem +144 86 vstem +273 87 vstem +649 89 vstem +144 519 rmoveto +-113 -519 rlineto +89 0 rlineto +47 223 rlineto +106 0 rlineto +0 -36 rlineto +0 -106 72 -93 123 0 rrcurveto +164 0 106 160 0 175 rrcurveto +0 134 -75 73 -120 0 rrcurveto +-134 0 -101 -108 -24 -129 rrcurveto +-101 0 rlineto +47 226 rlineto +-86 0 rlineto +closepath +216 -331 rmoveto +0 140 75 132 104 0 rrcurveto +62 0 48 -42 0 -81 rrcurveto +0 -128 -62 -151 -114 0 rrcurveto +-70 0 -43 50 0 80 rrcurveto +closepath +endchar } ND +/afii10097 { +0 534 hsbw +0 285 hstem +449 70 hstem +83 89 vstem +342 87 vstem +542 519 rmoveto +-227 0 rlineto +-143 0 -89 -56 0 -108 rrcurveto +0 -68 37 -44 74 -20 rrcurveto +-38 -16 -35 -30 -34 -45 rrcurveto +-99 -132 rlineto +108 0 rlineto +98 139 rlineto +38 54 30 23 97 0 rrcurveto +29 0 rlineto +-46 -216 rlineto +87 0 rlineto +113 519 rlineto +closepath +-102 -70 rmoveto +-36 -164 rlineto +-119 0 rlineto +-77 0 -36 18 0 58 rrcurveto +0 44 11 44 135 0 rrcurveto +122 0 rlineto +closepath +endchar } ND +/afii10071 { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +599 100 hstem +52 89 vstem +218 93 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +61 294 rmoveto +93 0 rlineto +21 100 rlineto +-93 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +93 0 rlineto +20 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/afii10099 { +0 556 hsbw +-208 80 hstem +0 20 hstem +458 72 hstem +586 130 hstem +34 88 vstem +183 88 vstem +441 88 vstem +156 586 rmoveto +-122 -586 rlineto +88 0 rlineto +46 223 rlineto +28 130 61 105 115 0 rrcurveto +46 0 23 -20 0 -38 rrcurveto +0 -12 -5 -28 -9 -46 rrcurveto +-67 -322 rlineto +-23 -108 -17 -12 -40 0 rrcurveto +-16 0 -18 3 -19 5 rrcurveto +-16 -75 rlineto +33 -8 29 -5 25 0 rrcurveto +242 0 -11 560 0 59 rrcurveto +0 64 -47 55 -88 0 rrcurveto +-60 0 -60 -30 -60 -59 rrcurveto +31 145 rlineto +182 0 rlineto +16 74 rlineto +-183 0 rlineto +11 56 rlineto +-88 0 rlineto +-12 -56 rlineto +-66 0 rlineto +-16 -74 rlineto +67 0 rlineto +closepath +endchar } ND +/afii10100 { +0 378 hsbw +0 20 hstem +447 72 hstem +696 20 hstem +31 87 vstem +210 74 vstem +302 112 vstem +210 582 rmoveto +74 0 rlineto +130 134 rlineto +-112 0 rlineto +-92 -134 rlineto +closepath +235 -63 rmoveto +-304 0 rlineto +-110 -519 rlineto +87 0 rlineto +95 447 rlineto +216 0 rlineto +16 72 rlineto +closepath +endchar } ND +/afii10101 { +0 496 hsbw +-12 71 hstem +231 70 hstem +459 71 hstem +47 89 vstem +415 85 vstem +311 301 rmoveto +-159 0 rlineto +21 93 60 65 78 0 rrcurveto +53 0 51 -35 0 -70 rrcurveto +85 0 rlineto +0 114 -74 62 -108 0 rrcurveto +-174 0 -97 -159 0 -174 rrcurveto +0 -140 85 -69 104 0 rrcurveto +93 0 96 60 44 130 rrcurveto +-87 10 rlineto +-31 -86 -48 -43 -64 0 rrcurveto +-67 0 -36 50 0 71 rrcurveto +0 13 1 17 2 21 rrcurveto +156 0 rlineto +16 70 rlineto +closepath +endchar } ND +/afii10102 { +0 500 hsbw +-12 69 hstem +462 68 hstem +114 83 vstem +375 89 vstem +42 177 rmoveto +-3 -67 21 -48 41 -29 rrcurveto +43 -30 50 -15 60 0 rrcurveto +109 0 101 65 0 93 rrcurveto +0 88 -52 29 -118 50 rrcurveto +-66 28 -31 10 0 45 rrcurveto +0 32 36 34 60 0 rrcurveto +77 0 42 -40 3 -62 rrcurveto +86 6 rlineto +-2 98 -70 66 -129 0 rrcurveto +-118 0 -68 -68 0 -81 rrcurveto +0 -82 65 -30 91 -40 rrcurveto +56 -26 49 -21 0 -47 rrcurveto +0 -42 -39 -36 -78 0 rrcurveto +-75 0 -53 46 0 80 rrcurveto +-88 -6 rlineto +closepath +endchar } ND +/afii10103 { +0 222 hsbw +0 20 hstem +499 20 hstem +616 100 hstem +30 88 vstem +159 88 vstem +159 616 rmoveto +88 0 rlineto +21 100 rlineto +-88 0 rlineto +-21 -100 rlineto +closepath +-129 -616 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/afii10104 { +0 222 hsbw +0 20 hstem +499 20 hstem +599 100 hstem +30 88 vstem +138 89 vstem +234 92 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +24 599 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/afii10105 { +0 222 hsbw +-208 80 hstem +499 20 hstem +616 100 hstem +159 87 vstem +159 616 rmoveto +87 0 rlineto +21 100 rlineto +-87 0 rlineto +-21 -100 rlineto +closepath +-280 -811 rmoveto +33 -8 28 -5 23 0 rrcurveto +96 0 30 67 24 120 rrcurveto +113 540 rlineto +-89 0 rlineto +-109 -524 rlineto +-24 -113 -17 -10 -39 0 rrcurveto +-15 0 -18 3 -20 5 rrcurveto +-16 -75 rlineto +closepath +endchar } ND +/afii10106 { +0 910 hsbw +-12 80 hstem +247 71 hstem +445 74 hstem +199 413 vstem +787 89 vstem +612 519 rmoveto +-413 0 rlineto +-72 -328 rlineto +-22 -100 -14 -23 -45 0 rrcurveto +-16 0 -16 3 -16 7 rrcurveto +-18 -76 rlineto +33 -9 29 -5 25 0 rrcurveto +69 0 45 49 22 99 rrcurveto +67 309 rlineto +240 0 rlineto +-94 -445 rlineto +219 0 rlineto +153 0 88 66 0 113 rrcurveto +0 98 -76 41 -135 0 rrcurveto +-94 0 rlineto +41 201 rlineto +closepath +-95 -449 rmoveto +38 177 rlineto +101 0 rlineto +84 0 47 -14 0 -66 rrcurveto +0 -77 -58 -20 -99 0 rrcurveto +-113 0 rlineto +closepath +endchar } ND +/afii10107 { +0 828 hsbw +0 70 hstem +247 272 hstem +31 87 vstem +142 87 vstem +387 86 vstem +705 89 vstem +489 318 rmoveto +42 201 rlineto +-87 0 rlineto +-42 -201 rlineto +-215 0 rlineto +42 201 rlineto +-87 0 rlineto +-111 -519 rlineto +87 0 rlineto +50 247 rlineto +219 0 rlineto +-54 -247 rlineto +221 0 rlineto +151 0 89 67 0 112 rrcurveto +0 98 -76 41 -135 0 rrcurveto +-94 0 rlineto +closepath +-54 -248 rmoveto +38 177 rlineto +101 0 rlineto +84 0 47 -14 0 -66 rrcurveto +0 -77 -58 -20 -99 0 rrcurveto +-113 0 rlineto +closepath +endchar } ND +/afii10108 { +0 556 hsbw +0 20 hstem +458 72 hstem +586 130 hstem +34 88 vstem +183 88 vstem +441 88 vstem +171 660 rmoveto +-66 0 rlineto +-16 -74 rlineto +67 0 rlineto +-122 -586 rlineto +88 0 rlineto +46 223 rlineto +28 130 61 105 115 0 rrcurveto +46 0 23 -20 0 -38 rrcurveto +0 -12 -5 -29 -9 -45 rrcurveto +-66 -314 rlineto +89 0 rlineto +64 306 rlineto +10 49 5 35 0 22 rrcurveto +0 61 -46 57 -89 0 rrcurveto +-60 0 -60 -30 -60 -59 rrcurveto +31 145 rlineto +182 0 rlineto +16 74 rlineto +-183 0 rlineto +11 56 rlineto +-88 0 rlineto +-12 -56 rlineto +closepath +endchar } ND +/afii10109 { +0 472 hsbw +0 20 hstem +243 54 hstem +448 71 hstem +696 20 hstem +31 87 vstem +145 86 vstem +292 74 vstem +384 112 vstem +145 519 rmoveto +-114 -519 rlineto +87 0 rlineto +53 243 rlineto +60 0 23 -17 36 -96 rrcurveto +49 -130 rlineto +91 0 rlineto +-60 158 rlineto +-26 65 -21 26 -44 18 rrcurveto +52 18 26 27 44 76 rrcurveto +32 56 6 4 44 0 rrcurveto +21 0 rlineto +16 71 rlineto +-41 0 rlineto +-70 0 -29 -18 -58 -97 rrcurveto +-56 -93 -20 -14 -49 0 rrcurveto +-15 0 rlineto +49 222 rlineto +-86 0 rlineto +closepath +147 63 rmoveto +74 0 rlineto +130 134 rlineto +-112 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/afii10110 { +0 500 hsbw +-210 85 hstem +499 20 hstem +593 127 hstem +91 87 vstem +193 58 vstem +427 59 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +193 920 rmoveto +4 -78 52 -49 75 0 rrcurveto +77 0 62 48 23 79 rrcurveto +-59 0 rlineto +-18 -43 -36 -26 -46 0 rrcurveto +-46 0 -24 21 -6 48 rrcurveto +-58 0 rlineto +closepath +endchar } ND +/afii10193 { +0 556 hsbw +-199 20 hstem +0 20 hstem +499 20 hstem +61 89 vstem +366 81 vstem +468 88 vstem +229 -8 rmoveto +52 9 53 34 52 59 rrcurveto +-20 -94 rlineto +81 0 rlineto +109 519 rlineto +-88 0 rlineto +-47 -225 rlineto +-32 -137 -59 -96 -110 0 rrcurveto +-47 0 -23 20 0 40 rrcurveto +0 16 3 22 6 28 rrcurveto +70 332 rlineto +-89 0 rlineto +-62 -300 rlineto +-12 -53 -5 -38 0 -24 rrcurveto +0 -50 34 -48 64 -14 rrcurveto +-43 -191 rlineto +71 0 rlineto +42 191 rlineto +closepath +endchar } ND +/afii10050 { +0 492 hsbw +0 20 hstem +634 82 hstem +42 96 vstem +553 83 vstem +521 716 rmoveto +-328 0 rlineto +-151 -716 rlineto +96 0 rlineto +133 634 rlineto +316 0 rlineto +49 224 rlineto +-83 0 rlineto +-32 -142 rlineto +closepath +endchar } ND +/afii10098 { +0 339 hsbw +0 20 hstem +447 72 hstem +31 87 vstem +363 74 vstem +393 447 rmoveto +44 195 rlineto +-74 0 rlineto +-28 -123 rlineto +-194 0 rlineto +-110 -519 rlineto +87 0 rlineto +95 447 rlineto +180 0 rlineto +closepath +endchar } ND +/afii00208 { +0 1000 hsbw +224 70 hstem +40 937 vstem +40 224 rmoveto +937 0 rlineto +15 70 rlineto +-937 0 rlineto +-15 -70 rlineto +closepath +endchar } ND +/afii61352 { +0 1083 hsbw +0 147 hstem +182 64 hstem +568 148 hstem +44 93 vstem +199 93 vstem +488 90 vstem +722 84 vstem +998 84 vstem +199 716 rmoveto +-155 -716 rlineto +93 0 rlineto +122 568 rlineto +229 -568 rlineto +90 0 rlineto +155 716 rlineto +-92 0 rlineto +-121 -569 rlineto +-228 569 rlineto +-93 0 rlineto +closepath +523 -382 rmoveto +0 -94 62 -58 95 0 rrcurveto +126 0 77 118 0 116 rrcurveto +0 81 -53 74 -102 0 rrcurveto +-128 0 -77 -115 0 -122 rrcurveto +closepath +84 -6 rmoveto +0 85 44 93 75 0 rrcurveto +48 0 25 -39 0 -40 rrcurveto +0 -90 -46 -91 -74 0 rrcurveto +-38 0 -34 27 0 55 rrcurveto +closepath +-125 -202 rmoveto +-15 -69 rlineto +332 0 rlineto +15 69 rlineto +-332 0 rlineto +closepath +endchar } ND +/pi { +0 670 hsbw +0 20 hstem +445 74 hstem +104 89 vstem +197 89 vstem +402 89 vstem +496 88 vstem +99 519 rmoveto +-15 -74 rlineto +113 0 rlineto +-93 -445 rlineto +89 0 rlineto +93 445 rlineto +210 0 rlineto +-94 -445 rlineto +89 0 rlineto +93 445 rlineto +114 0 rlineto +15 74 rlineto +-614 0 rlineto +closepath +endchar } ND +/sheva { +0 333 hsbw +-306 82 hstem +-180 82 hstem +68 84 vstem +146 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +-27 -126 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 23 0 rrcurveto +24 0 26 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/hatafsegol { +0 333 hsbw +-306 82 hstem +-180 82 hstem +-16 84 95 84 206 84 vstem3 +35 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 12 -11 22 0 rrcurveto +23 0 27 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +111 0 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 22 0 rrcurveto +27 0 24 26 0 25 rrcurveto +0 21 -11 10 -22 0 rrcurveto +closepath +110 0 rmoveto +-27 0 -23 -22 0 -28 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +-193 -126 rmoveto +-26 0 -25 -24 0 -26 rrcurveto +0 -21 11 -11 22 0 rrcurveto +27 0 24 25 0 27 rrcurveto +0 20 -11 10 -22 0 rrcurveto +closepath +166 0 rmoveto +-27 0 -23 -22 0 -28 rrcurveto +0 -21 11 -11 22 0 rrcurveto +27 0 24 26 0 25 rrcurveto +0 21 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/hatafpatah { +0 333 hsbw +-306 82 hstem +-154 51 hstem +-9 164 vstem +196 84 vstem +247 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 11 -11 23 0 rrcurveto +26 0 24 27 0 22 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +-256 -56 rmoveto +164 0 rlineto +11 51 rlineto +-164 0 rlineto +-11 -51 rlineto +closepath +229 -70 rmoveto +-28 0 -23 -25 0 -25 rrcurveto +0 -21 11 -11 23 0 rrcurveto +25 0 26 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/hatafqamats { +0 333 hsbw +-306 82 hstem +-154 51 hstem +31 57 vstem +196 84 vstem +247 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 11 -11 23 0 rrcurveto +26 0 24 27 0 22 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +-216 -128 rmoveto +57 0 rlineto +15 72 rlineto +52 0 rlineto +11 51 rlineto +-164 0 rlineto +-11 -51 rlineto +55 0 rlineto +-15 -72 rlineto +closepath +189 2 rmoveto +-28 0 -23 -25 0 -25 rrcurveto +0 -21 11 -11 23 0 rrcurveto +25 0 26 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/hiriq { +0 333 hsbw +-180 82 hstem +95 84 vstem +146 -98 rmoveto +-28 0 -23 -24 0 -26 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/tsere { +0 333 hsbw +-180 82 hstem +31 84 vstem +159 84 vstem +82 -98 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 25 0 26 rrcurveto +0 21 -11 10 -22 0 rrcurveto +closepath +127 0 rmoveto +-28 0 -22 -24 0 -26 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 25 0 24 rrcurveto +0 22 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/segol { +0 333 hsbw +-306 82 hstem +-180 82 hstem +31 84 vstem +159 84 vstem +82 -98 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 25 0 26 rrcurveto +0 21 -11 10 -22 0 rrcurveto +closepath +127 0 rmoveto +-28 0 -22 -24 0 -26 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 25 0 24 rrcurveto +0 22 -12 11 -22 0 rrcurveto +closepath +-90 -126 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 23 0 rrcurveto +24 0 26 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/patah { +0 333 hsbw +-154 51 hstem +36 196 vstem +36 -154 rmoveto +196 0 rlineto +11 51 rlineto +-197 0 rlineto +-10 -51 rlineto +closepath +endchar } ND +/qamats { +0 333 hsbw +-154 51 hstem +88 57 vstem +88 -236 rmoveto +57 0 rlineto +18 82 rlineto +69 0 rlineto +11 51 rlineto +-197 0 rlineto +-10 -51 rlineto +70 0 rlineto +-18 -82 rlineto +closepath +endchar } ND +/holam { +0 333 hsbw +577 82 hstem +256 84 vstem +307 659 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/qubuts { +0 333 hsbw +-306 82 hstem +-180 82 hstem +-23 86 83 82 186 84 vstem3 +28 -98 rmoveto +-28 0 -23 -26 0 -24 rrcurveto +0 -21 12 -11 22 0 rrcurveto +25 0 26 26 0 25 rrcurveto +0 21 -12 10 -22 0 rrcurveto +closepath +104 -63 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 22 0 rrcurveto +26 0 25 27 0 23 rrcurveto +0 22 -11 10 -22 0 rrcurveto +closepath +104 -63 rmoveto +-27 0 -23 -22 0 -28 rrcurveto +0 -21 11 -11 22 0 rrcurveto +25 0 26 27 0 23 rrcurveto +0 22 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/dagesh { +0 333 hsbw +241 82 hstem +185 84 vstem +235 323 rmoveto +-28 0 -22 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/meteg { +0 333 hsbw +-299 196 hstem +78 50 vstem +119 -103 rmoveto +-41 -196 rlineto +50 0 rlineto +42 196 rlineto +-51 0 rlineto +closepath +endchar } ND +/maqaf { +0 383 hsbw +440 78 hstem +155 261 vstem +155 440 rmoveto +261 0 rlineto +16 78 rlineto +-261 0 rlineto +-16 -78 rlineto +closepath +endchar } ND +/rafe { +0 333 hsbw +611 51 hstem +209 196 vstem +198 611 rmoveto +197 0 rlineto +10 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/paseq { +0 275 hsbw +-10 20 hstem +101 69 vstem +235 70 vstem +101 -10 rmoveto +69 0 rlineto +135 635 rlineto +-70 0 rlineto +-134 -635 rlineto +closepath +endchar } ND +/shindot { +0 333 hsbw +577 83 hstem +511 84 vstem +562 660 rmoveto +-24 0 -27 -22 0 -29 rrcurveto +0 -22 11 -10 22 0 rrcurveto +25 0 26 23 0 27 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/sindot { +0 333 hsbw +577 83 hstem +58 660 rmoveto +-24 0 -27 -24 0 -27 rrcurveto +0 -22 11 -10 23 0 rrcurveto +26 0 17 14 6 27 rrcurveto +5 23 -12 19 -25 0 rrcurveto +closepath +endchar } ND +/sofpasuq { +0 278 hsbw +0 100 hstem +418 101 hstem +90 100 vstem +201 100 vstem +179 418 rmoveto +100 0 rlineto +22 101 rlineto +-100 0 rlineto +-22 -101 rlineto +closepath +-89 -418 rmoveto +100 0 rlineto +22 100 rlineto +-100 0 rlineto +-22 -100 rlineto +closepath +endchar } ND +/alef { +0 563 hsbw +0 20 hstem +498 20 hstem +51 97 vstem +164 114 vstem +518 96 vstem +536 0 rmoveto +-109 219 rlineto +83 43 39 54 31 95 rrcurveto +34 107 rlineto +-96 0 rlineto +-35 -104 rlineto +-26 -78 -17 -24 -45 -26 rrcurveto +-117 232 rlineto +-114 0 rlineto +84 -170 rlineto +-65 -30 -46 -56 -27 -83 rrcurveto +-59 -179 rlineto +97 0 rlineto +59 179 rlineto +16 50 26 34 34 17 rrcurveto +138 -280 rlineto +115 0 rlineto +closepath +endchar } ND +/bet { +0 542 hsbw +0 78 hstem +443 81 hstem +408 98 vstem +454 78 rmoveto +43 202 rlineto +6 28 3 25 0 24 rrcurveto +0 111 -74 56 -148 0 rrcurveto +-50 0 -48 -4 -45 -7 rrcurveto +-8 -77 rlineto +24 1 20 3 15 3 rrcurveto +40 0 rlineto +103 0 58 -28 12 -51 rrcurveto +3 -13 0 -15 0 -18 rrcurveto +0 -18 -4 -22 -6 -23 rrcurveto +-37 -177 rlineto +-320 0 rlineto +-17 -78 rlineto +496 0 rlineto +17 78 rlineto +-83 0 rlineto +closepath +endchar } ND +/gimel { +0 399 hsbw +0 20 hstem +127 69 hstem +444 80 hstem +12 95 vstem +300 96 vstem +387 335 rmoveto +5 22 4 20 0 17 rrcurveto +0 44 rlineto +0 58 -52 28 -79 0 rrcurveto +-32 0 -28 -4 -23 -7 rrcurveto +-9 -74 rlineto +16 3 19 2 20 0 rrcurveto +46 0 26 -16 0 -32 rrcurveto +0 -15 -1 -21 -6 -28 rrcurveto +-29 -136 rlineto +-74 0 -64 -39 -56 -77 rrcurveto +-58 -80 rlineto +95 0 rlineto +41 54 rlineto +36 48 38 25 41 0 rrcurveto +9 -127 rlineto +91 0 rlineto +-10 176 rlineto +34 159 rlineto +closepath +endchar } ND +/dalet { +0 508 hsbw +0 20 hstem +440 78 hstem +305 93 vstem +399 93 vstem +580 440 rmoveto +17 78 rlineto +-465 0 rlineto +-16 -78 rlineto +283 0 rlineto +-94 -440 rlineto +93 0 rlineto +94 440 rlineto +88 0 rlineto +closepath +endchar } ND +/he { +0 602 hsbw +0 292 hstem +443 81 hstem +79 93 vstem +502 98 vstem +181 509 rmoveto +-9 -80 rlineto +56 9 51 5 44 0 rrcurveto +103 0 60 -24 13 -50 rrcurveto +3 -12 0 -15 0 -19 rrcurveto +0 -19 -4 -23 -6 -26 rrcurveto +-54 -255 rlineto +93 0 rlineto +60 280 rlineto +6 28 3 26 0 24 rrcurveto +0 131 -82 35 -162 0 rrcurveto +-56 0 -58 -5 -61 -10 rrcurveto +closepath +53 -217 rmoveto +-93 0 rlineto +-62 -292 rlineto +93 0 rlineto +62 292 rlineto +closepath +endchar } ND +/vav { +0 247 hsbw +0 20 hstem +498 20 hstem +76 95 vstem +186 95 vstem +281 518 rmoveto +-95 0 rlineto +-110 -518 rlineto +95 0 rlineto +110 518 rlineto +closepath +endchar } ND +/zayin { +0 382 hsbw +0 20 hstem +452 66 hstem +125 93 vstem +457 452 rmoveto +14 66 rlineto +-314 0 rlineto +-17 -78 rlineto +131 0 rlineto +-71 -50 -25 -55 -8 -91 rrcurveto +-9 -71 -8 -53 -7 -35 rrcurveto +-18 -85 rlineto +93 0 rlineto +15 72 rlineto +7 33 7 57 9 78 rrcurveto +18 157 64 55 119 0 rrcurveto +closepath +endchar } ND +/het { +0 599 hsbw +0 20 hstem +443 81 hstem +76 93 vstem +502 98 vstem +528 0 rmoveto +61 290 rlineto +7 31 4 28 0 24 rrcurveto +0 111 -76 40 -145 0 rrcurveto +-58 0 -65 -6 -72 -11 rrcurveto +-108 -507 rlineto +93 0 rlineto +93 436 rlineto +34 4 32 3 28 0 rrcurveto +86 0 60 -22 0 -74 rrcurveto +0 -19 -3 -22 -5 -25 rrcurveto +-59 -281 rlineto +93 0 rlineto +closepath +endchar } ND +/tet { +0 590 hsbw +-14 75 hstem +446 83 hstem +115 90 vstem +516 93 vstem +179 518 rmoveto +-52 -243 rlineto +-7 -34 -5 -30 0 -27 rrcurveto +0 -67 rlineto +0 -84 90 -47 90 0 rrcurveto +178 0 78 105 40 190 rrcurveto +8 37 rlineto +6 33 4 29 0 26 rrcurveto +0 82 -35 41 -69 0 rrcurveto +-55 0 -51 -29 -47 -58 rrcurveto +20 -48 rlineto +32 34 32 18 31 0 rrcurveto +32 0 17 -21 0 -40 rrcurveto +0 -15 -3 -18 -4 -20 rrcurveto +-14 -66 rlineto +-26 -122 -40 -83 -117 0 rrcurveto +-63 0 -44 33 0 73 rrcurveto +0 23 3 27 6 32 rrcurveto +58 269 rlineto +-93 0 rlineto +closepath +endchar } ND +/yod { +0 247 hsbw +250 268 hstem +129 95 vstem +281 518 rmoveto +-95 0 rlineto +-57 -268 rlineto +95 0 rlineto +57 268 rlineto +closepath +endchar } ND +/finalkaf { +0 509 hsbw +-199 20 hstem +443 81 hstem +303 93 vstem +410 97 vstem +128 513 rmoveto +-8 -80 rlineto +49 6 42 4 36 0 rrcurveto +105 0 58 -24 0 -85 rrcurveto +0 -22 -4 -26 -7 -31 rrcurveto +-96 -454 rlineto +93 0 rlineto +102 479 rlineto +6 30 3 26 0 24 rrcurveto +0 133 -89 31 -149 0 rrcurveto +-42 0 -47 -4 -52 -7 rrcurveto +closepath +endchar } ND +/kaf { +0 461 hsbw +-8 84 hstem +443 84 hstem +378 101 vstem +41 7 rmoveto +35 -10 33 -5 31 0 rrcurveto +194 0 145 162 0 172 rrcurveto +0 123 -85 78 -141 0 rrcurveto +-30 0 -35 -5 -40 -10 rrcurveto +-5 -84 rlineto +32 10 32 5 33 0 rrcurveto +89 0 49 -53 0 -79 rrcurveto +0 -109 -87 -126 -129 0 rrcurveto +-32 0 -31 5 -28 10 rrcurveto +-30 -84 rlineto +closepath +endchar } ND +/lamed { +0 463 hsbw +0 20 hstem +440 78 hstem +696 20 hstem +182 92 vstem +232 518 rmoveto +42 198 rlineto +-92 0 rlineto +-59 -276 rlineto +287 0 rlineto +-15 -70 rlineto +-10 -42 -19 -36 -28 -28 rrcurveto +-37 -37 rlineto +-50 -52 -18 -35 -14 -70 rrcurveto +-15 -70 rlineto +93 0 rlineto +18 83 rlineto +8 40 22 38 34 36 rrcurveto +34 35 rlineto +39 40 26 53 14 64 rrcurveto +28 129 rlineto +-288 0 rlineto +closepath +endchar } ND +/finalmem { +0 599 hsbw +0 78 hstem +443 81 hstem +502 98 vstem +528 0 rmoveto +61 290 rlineto +7 31 4 28 0 24 rrcurveto +0 111 -76 40 -145 0 rrcurveto +-58 0 -65 -6 -72 -11 rrcurveto +-108 -507 rlineto +452 0 rlineto +closepath +-77 78 rmoveto +-265 0 rlineto +76 358 rlineto +34 4 32 3 28 0 rrcurveto +88 0 58 -25 0 -47 rrcurveto +0 -39 rlineto +0 -15 -3 -18 -5 -18 rrcurveto +-43 -203 rlineto +closepath +endchar } ND +/mem { +0 601 hsbw +0 78 hstem +444 80 hstem +54 94 vstem +149 92 vstem +506 91 vstem +183 302 rmoveto +-12 -23 -9 -19 -7 -19 rrcurveto +-6 -17 -6 -14 -5 -8 rrcurveto +-84 -202 rlineto +94 0 rlineto +78 192 rlineto +55 138 51 114 106 0 rrcurveto +45 0 23 -36 0 -53 rrcurveto +0 -26 -8 -43 -13 -56 rrcurveto +-32 -152 rlineto +-173 0 rlineto +-17 -78 rlineto +267 0 rlineto +49 228 rlineto +12 61 6 49 0 37 rrcurveto +0 29 rlineto +0 80 -57 40 -83 0 rrcurveto +-75 0 -82 -52 -46 -68 rrcurveto +-13 114 rlineto +-92 0 rlineto +34 -216 rlineto +closepath +endchar } ND +/finalnun { +0 247 hsbw +-199 20 hstem +498 20 hstem +33 95 vstem +186 95 vstem +281 518 rmoveto +-95 0 rlineto +-153 -717 rlineto +95 0 rlineto +153 717 rlineto +closepath +endchar } ND +/nun { +0 353 hsbw +0 78 hstem +444 80 hstem +264 96 vstem +279 0 rmoveto +72 335 rlineto +5 22 4 20 0 17 rrcurveto +0 44 rlineto +0 58 -52 28 -79 0 rrcurveto +-32 0 -28 -4 -23 -7 rrcurveto +-9 -74 rlineto +16 3 18 2 20 0 rrcurveto +46 0 27 -16 0 -32 rrcurveto +0 -15 -1 -21 -6 -28 rrcurveto +-54 -254 rlineto +-157 0 rlineto +-17 -78 rlineto +250 0 rlineto +closepath +endchar } ND +/samekh { +0 574 hsbw +-15 78 hstem +456 76 hstem +90 102 vstem +493 101 vstem +400 532 rmoveto +-172 0 -138 -194 0 -159 rrcurveto +0 -119 71 -75 123 0 rrcurveto +183 0 127 191 0 161 rrcurveto +0 112 -72 83 -122 0 rrcurveto +closepath +-208 -346 rmoveto +0 106 68 164 124 0 rrcurveto +72 0 37 -42 0 -83 rrcurveto +0 -109 -69 -159 -124 0 rrcurveto +-72 0 -36 41 0 82 rrcurveto +closepath +endchar } ND +/ayin { +0 529 hsbw +-48 81 hstem +92 426 hstem +175 98 vstem +479 95 vstem +167 63 rmoveto +-39 -12 -49 -10 -60 -8 rrcurveto +0 -81 rlineto +310 49 120 17 91 363 rrcurveto +34 137 rlineto +-95 0 rlineto +-42 -178 rlineto +-34 -134 -22 -69 -122 -45 rrcurveto +14 426 rlineto +-98 0 rlineto +-8 -455 rlineto +closepath +endchar } ND +/finalpe { +0 566 hsbw +-199 20 hstem +167 74 hstem +447 77 hstem +113 92 vstem +360 93 vstem +470 97 vstem +237 438 rmoveto +26 6 30 3 32 0 rrcurveto +87 0 58 -26 0 -52 rrcurveto +0 -39 rlineto +0 -15 -3 -17 -5 -17 rrcurveto +-102 -480 rlineto +93 0 rlineto +104 489 rlineto +6 29 4 26 0 24 rrcurveto +0 125 -93 30 -127 0 rrcurveto +-63 0 -62 -9 -62 -17 rrcurveto +-42 -195 rlineto +-4 -16 -1 -13 0 -12 rrcurveto +0 -64 37 -31 75 0 rrcurveto +24 0 23 4 21 8 rrcurveto +0 68 rlineto +-12 -4 -10 -2 -16 0 rrcurveto +-34 0 -16 13 0 28 rrcurveto +0 6 1 6 2 7 rrcurveto +29 137 rlineto +closepath +endchar } ND +/pe { +0 546 hsbw +-8 81 hstem +212 74 hstem +450 77 hstem +129 92 vstem +466 101 vstem +166 501 rmoveto +-32 -153 rlineto +-4 -15 -1 -14 0 -12 rrcurveto +0 -64 36 -31 74 0 rrcurveto +25 0 23 4 21 8 rrcurveto +5 68 rlineto +-12 -4 -14 -2 -16 0 rrcurveto +-34 0 -16 13 0 28 rrcurveto +0 19 rlineto +22 95 rlineto +28 6 27 3 28 0 rrcurveto +86 0 54 -54 0 -80 rrcurveto +0 -119 -112 -124 -138 0 rrcurveto +-50 0 -38 10 -27 21 rrcurveto +-39 -77 rlineto +32 -24 47 -11 64 0 rrcurveto +211 0 151 171 0 173 rrcurveto +0 124 -90 67 -129 0 rrcurveto +-62 0 -60 -9 -60 -17 rrcurveto +closepath +endchar } ND +/finaltsadi { +0 461 hsbw +-199 20 hstem +498 20 hstem +126 92 vstem +436 97 vstem +126 -199 rmoveto +92 0 rlineto +82 384 rlineto +94 34 62 61 28 88 rrcurveto +49 150 rlineto +-97 0 rlineto +-43 -132 rlineto +-22 -63 -23 -35 -56 -28 rrcurveto +-70 258 rlineto +-99 0 rlineto +87 -322 rlineto +-84 -395 rlineto +closepath +endchar } ND +/tsadi { +0 479 hsbw +0 78 hstem +498 20 hstem +115 106 vstem +438 97 vstem +535 518 rmoveto +-97 0 rlineto +-23 -86 rlineto +-23 -81 -18 -26 -58 -37 rrcurveto +-95 230 rlineto +-106 0 rlineto +193 -440 rlineto +-261 0 rlineto +-16 -78 rlineto +373 0 rlineto +12 55 rlineto +-75 173 rlineto +97 50 45 46 27 101 rrcurveto +25 93 rlineto +closepath +endchar } ND +/qof { +0 550 hsbw +-199 20 hstem +0 20 hstem +440 78 hstem +39 89 vstem +143 89 vstem +291 93 vstem +184 518 rmoveto +-17 -78 rlineto +330 0 rlineto +-15 -70 rlineto +-9 -42 -19 -35 -29 -29 rrcurveto +-36 -37 rlineto +-52 -52 -17 -33 -14 -72 rrcurveto +-15 -70 rlineto +93 0 rlineto +18 83 rlineto +8 40 22 38 34 36 rrcurveto +34 35 rlineto +39 41 26 52 14 64 rrcurveto +27 129 rlineto +-422 0 rlineto +closepath +-145 -717 rmoveto +89 0 rlineto +104 491 rlineto +-89 0 rlineto +-104 -491 rlineto +closepath +endchar } ND +/resh { +0 509 hsbw +0 20 hstem +443 81 hstem +409 98 vstem +128 513 rmoveto +-8 -80 rlineto +49 6 42 4 36 0 rrcurveto +96 0 54 -27 12 -54 rrcurveto +0 -45 rlineto +0 -18 -4 -20 -5 -24 rrcurveto +-54 -255 rlineto +92 0 rlineto +60 280 rlineto +6 28 3 26 0 24 rrcurveto +0 127 -81 39 -157 0 rrcurveto +-42 0 -47 -4 -52 -7 rrcurveto +closepath +endchar } ND +/shin { +0 694 hsbw +-14 79 hstem +498 20 hstem +116 93 vstem +412 94 vstem +662 94 vstem +254 518 rmoveto +-95 0 rlineto +-24 -143 rlineto +-13 -78 -6 -58 0 -36 rrcurveto +0 -132 73 -85 140 0 rrcurveto +200 0 102 125 66 215 rrcurveto +59 192 rlineto +-94 0 rlineto +-68 -222 rlineto +-47 -150 -66 -81 -130 0 rrcurveto +-87 0 -54 45 -1 71 rrcurveto +143 10 71 37 36 127 rrcurveto +47 163 rlineto +-94 0 rlineto +-40 -139 rlineto +-26 -95 -62 -29 -73 0 rrcurveto +1 32 9 60 17 87 rrcurveto +16 84 rlineto +closepath +endchar } ND +/tav { +0 643 hsbw +-4 77 hstem +444 80 hstem +545 97 vstem +22 12 rmoveto +28 -11 29 -5 31 0 rrcurveto +114 0 24 34 23 100 rrcurveto +66 314 rlineto +47 0 rlineto +88 0 73 -14 0 -64 rrcurveto +0 -24 -2 -37 -10 -50 rrcurveto +-54 -255 rlineto +93 0 rlineto +59 280 rlineto +7 33 4 29 0 26 rrcurveto +0 138 -110 18 -156 0 rrcurveto +-77 0 -76 -5 -76 -9 rrcurveto +-8 -78 rlineto +42 6 35 3 28 0 rrcurveto +-64 -299 rlineto +-11 -52 -18 -17 -45 0 rrcurveto +-20 0 -17 3 -16 6 rrcurveto +-31 -70 rlineto +closepath +endchar } ND +/doublevav { +0 493 hsbw +0 20 hstem +498 20 hstem +76 95 vstem +186 95 vstem +322 95 vstem +433 95 vstem +528 518 rmoveto +-95 0 rlineto +-111 -518 rlineto +95 0 rlineto +111 518 rlineto +closepath +-247 0 rmoveto +-95 0 rlineto +-110 -518 rlineto +95 0 rlineto +110 518 rlineto +closepath +endchar } ND +/vavyod { +0 493 hsbw +0 20 hstem +250 268 hstem +129 95 vstem +322 95 vstem +433 95 vstem +528 518 rmoveto +-95 0 rlineto +-111 -518 rlineto +95 0 rlineto +111 518 rlineto +closepath +-247 0 rmoveto +-95 0 rlineto +-57 -268 rlineto +95 0 rlineto +57 268 rlineto +closepath +endchar } ND +/doubleyod { +0 493 hsbw +250 268 hstem +129 95 vstem +433 95 vstem +528 518 rmoveto +-95 0 rlineto +-58 -268 rlineto +96 0 rlineto +57 268 rlineto +closepath +-247 0 rmoveto +-95 0 rlineto +-57 -268 rlineto +95 0 rlineto +57 268 rlineto +closepath +endchar } ND +/geresh { +0 236 hsbw +498 20 hstem +114 59 vstem +202 100 vstem +114 330 rmoveto +59 0 rlineto +129 188 rlineto +-100 0 rlineto +-88 -188 rlineto +closepath +endchar } ND +/gershayim { +0 417 hsbw +330 188 hstem +114 59 vstem +295 59 vstem +383 100 vstem +295 330 rmoveto +59 0 rlineto +129 188 rlineto +-100 0 rlineto +-88 -188 rlineto +closepath +-181 0 rmoveto +59 0 rlineto +129 188 rlineto +-100 0 rlineto +-88 -188 rlineto +closepath +endchar } ND +/newsheqelsign { +0 815 hsbw +0 70 hstem +448 70 hstem +76 82 vstem +344 82 vstem +500 82 vstem +768 82 vstem +628 386 rmoveto +2 12 2 12 0 11 rrcurveto +0 64 -38 33 -76 0 rrcurveto +-332 0 rlineto +-110 -518 rlineto +82 0 rlineto +95 448 rlineto +234 0 rlineto +48 0 19 -24 -10 -46 rrcurveto +-44 -210 rlineto +82 0 rlineto +46 218 rlineto +closepath +-358 -386 rmoveto +332 0 rlineto +85 0 63 49 18 83 rrcurveto +82 386 rlineto +-82 0 rlineto +-80 -378 rlineto +-11 -47 -29 -23 -48 0 rrcurveto +-234 0 rlineto +60 280 rlineto +-82 0 rlineto +-74 -350 rlineto +closepath +endchar } ND +/vavshindot { +0 247 hsbw +0 20 hstem +498 20 hstem +577 83 hstem +89 84 vstem +186 95 vstem +140 660 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -11 23 0 rrcurveto +25 0 25 24 0 26 rrcurveto +0 22 -11 11 -22 0 rrcurveto +closepath +141 -142 rmoveto +-95 0 rlineto +-110 -518 rlineto +95 0 rlineto +110 518 rlineto +closepath +endchar } ND +/finalkafsheva { +0 509 hsbw +-199 20 hstem +-61 82 hstem +65 82 hstem +443 81 hstem +124 84 vstem +303 93 vstem +410 98 vstem +129 514 rmoveto +-9 -80 rlineto +49 6 42 3 36 0 rrcurveto +105 0 58 -24 0 -85 rrcurveto +0 -22 -4 -26 -7 -31 rrcurveto +-96 -454 rlineto +93 0 rlineto +102 479 rlineto +6 30 4 27 0 24 rrcurveto +0 131 -89 32 -150 0 rrcurveto +-42 0 -47 -4 -51 -6 rrcurveto +closepath +73 -367 rmoveto +-28 0 -23 -26 0 -24 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +-27 -126 rmoveto +-27 0 -24 -21 0 -29 rrcurveto +0 -21 11 -11 23 0 rrcurveto +25 0 25 27 0 23 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/finalkafqamats { +0 509 hsbw +-199 20 hstem +91 51 hstem +443 81 hstem +145 56 vstem +303 93 vstem +410 98 vstem +129 514 rmoveto +-9 -80 rlineto +49 6 42 3 36 0 rrcurveto +105 0 58 -24 0 -85 rrcurveto +0 -22 -4 -26 -7 -31 rrcurveto +-96 -454 rlineto +93 0 rlineto +102 479 rlineto +6 30 4 27 0 24 rrcurveto +0 131 -89 32 -150 0 rrcurveto +-42 0 -47 -4 -51 -6 rrcurveto +closepath +16 -505 rmoveto +56 0 rlineto +18 82 rlineto +69 0 rlineto +11 51 rlineto +-196 0 rlineto +-11 -51 rlineto +70 0 rlineto +-17 -82 rlineto +closepath +endchar } ND +/lamedholam { +0 463 hsbw +0 20 hstem +440 79 hstem +578 82 hstem +696 20 hstem +48 84 vstem +182 92 vstem +232 519 rmoveto +42 197 rlineto +-92 0 rlineto +-59 -276 rlineto +287 0 rlineto +-15 -70 rlineto +-10 -42 -19 -36 -28 -28 rrcurveto +-37 -37 rlineto +-50 -52 -18 -35 -14 -70 rrcurveto +-15 -70 rlineto +93 0 rlineto +18 83 rlineto +8 40 22 38 34 36 rrcurveto +34 35 rlineto +39 40 26 53 14 64 rrcurveto +28 130 rlineto +-288 0 rlineto +closepath +-133 141 rmoveto +-27 0 -24 -24 0 -27 rrcurveto +0 -21 11 -10 23 0 rrcurveto +25 0 25 22 0 28 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/lamedholamdagesh { +0 463 hsbw +0 351 hstem +440 79 hstem +578 82 hstem +696 20 hstem +48 84 vstem +175 85 vstem +232 519 rmoveto +42 197 rlineto +-92 0 rlineto +-59 -276 rlineto +287 0 rlineto +-15 -70 rlineto +-10 -42 -19 -36 -28 -28 rrcurveto +-37 -37 rlineto +-50 -52 -18 -35 -14 -70 rrcurveto +-15 -70 rlineto +93 0 rlineto +18 83 rlineto +8 40 22 38 34 36 rrcurveto +34 35 rlineto +39 40 26 53 14 64 rrcurveto +28 130 rlineto +-288 0 rlineto +closepath +-133 141 rmoveto +-27 0 -24 -24 0 -27 rrcurveto +0 -21 11 -10 23 0 rrcurveto +25 0 25 22 0 28 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +127 -309 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +27 0 25 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/altayin { +0 535 hsbw +0 78 hstem +498 20 hstem +181 98 vstem +485 95 vstem +545 381 rmoveto +35 137 rlineto +-95 0 rlineto +-43 -178 rlineto +-37 -154 -59 -87 -82 -22 rrcurveto +15 441 rlineto +-98 0 rlineto +-8 -440 rlineto +-134 0 rlineto +-17 -78 rlineto +192 0 rlineto +208 0 65 144 58 237 rrcurveto +closepath +endchar } ND +/shinshindot { +0 694 hsbw +-14 79 hstem +499 20 hstem +578 82 hstem +116 93 vstem +412 94 vstem +692 84 vstem +254 519 rmoveto +-95 0 rlineto +-24 -144 rlineto +-13 -78 -6 -58 0 -36 rrcurveto +0 -132 73 -85 140 0 rrcurveto +200 0 103 126 66 214 rrcurveto +58 193 rlineto +-94 0 rlineto +-68 -223 rlineto +-47 -150 -66 -81 -130 0 rrcurveto +-87 0 -54 45 -1 71 rrcurveto +143 10 71 37 36 127 rrcurveto +47 164 rlineto +-94 0 rlineto +-40 -140 rlineto +-26 -95 -62 -29 -73 0 rrcurveto +1 32 9 60 17 88 rrcurveto +16 84 rlineto +closepath +489 141 rmoveto +-27 0 -24 -24 0 -27 rrcurveto +0 -21 11 -10 23 0 rrcurveto +26 0 24 22 0 28 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/shinsindot { +0 694 hsbw +-14 79 hstem +499 20 hstem +578 82 hstem +183 84 vstem +412 94 vstem +662 94 vstem +254 519 rmoveto +-95 0 rlineto +-24 -144 rlineto +-13 -78 -6 -58 0 -36 rrcurveto +0 -132 73 -85 140 0 rrcurveto +200 0 103 126 66 214 rrcurveto +58 193 rlineto +-94 0 rlineto +-68 -223 rlineto +-47 -150 -66 -81 -130 0 rrcurveto +-87 0 -54 45 -1 71 rrcurveto +143 10 71 37 36 127 rrcurveto +47 164 rlineto +-94 0 rlineto +-40 -140 rlineto +-26 -95 -62 -29 -73 0 rrcurveto +1 32 9 60 17 88 rrcurveto +16 84 rlineto +closepath +-21 141 rmoveto +-27 0 -23 -24 0 -27 rrcurveto +0 -21 11 -10 22 0 rrcurveto +26 0 25 22 0 28 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/shindageshshindot { +0 694 hsbw +-14 79 hstem +187 332 hstem +578 82 hstem +116 93 vstem +438 84 vstem +692 84 vstem +254 519 rmoveto +-95 0 rlineto +-24 -144 rlineto +-13 -78 -6 -58 0 -36 rrcurveto +0 -132 73 -85 140 0 rrcurveto +200 0 103 126 66 214 rrcurveto +58 193 rlineto +-94 0 rlineto +-68 -223 rlineto +-47 -150 -66 -81 -130 0 rrcurveto +-87 0 -54 45 -1 71 rrcurveto +143 10 71 37 36 127 rrcurveto +47 164 rlineto +-94 0 rlineto +-40 -140 rlineto +-26 -95 -62 -29 -73 0 rrcurveto +1 32 9 60 17 88 rrcurveto +16 84 rlineto +closepath +235 -250 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 23 0 rrcurveto +24 0 26 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +254 391 rmoveto +-27 0 -24 -24 0 -27 rrcurveto +0 -21 11 -10 23 0 rrcurveto +26 0 24 22 0 28 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/shindageshsindot { +0 694 hsbw +-14 79 hstem +187 332 hstem +578 82 hstem +183 84 vstem +438 84 vstem +662 94 vstem +254 519 rmoveto +-95 0 rlineto +-24 -144 rlineto +-13 -78 -6 -58 0 -36 rrcurveto +0 -132 73 -85 140 0 rrcurveto +200 0 103 126 66 214 rrcurveto +58 193 rlineto +-94 0 rlineto +-68 -223 rlineto +-47 -150 -66 -81 -130 0 rrcurveto +-87 0 -54 45 -1 71 rrcurveto +143 10 71 37 36 127 rrcurveto +47 164 rlineto +-94 0 rlineto +-40 -140 rlineto +-26 -95 -62 -29 -73 0 rrcurveto +1 32 9 60 17 88 rrcurveto +16 84 rlineto +closepath +235 -250 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 23 0 rrcurveto +24 0 26 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +-256 391 rmoveto +-27 0 -23 -24 0 -27 rrcurveto +0 -21 11 -10 22 0 rrcurveto +26 0 25 22 0 28 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/alefpatah { +0 563 hsbw +-154 51 hstem +0 20 hstem +499 20 hstem +51 97 vstem +164 114 vstem +518 96 vstem +537 0 rmoveto +-109 219 rlineto +81 43 40 54 31 95 rrcurveto +34 108 rlineto +-96 0 rlineto +-35 -105 rlineto +-26 -78 -16 -24 -46 -26 rrcurveto +-117 233 rlineto +-114 0 rlineto +84 -171 rlineto +-64 -30 -46 -56 -28 -83 rrcurveto +-59 -179 rlineto +97 0 rlineto +59 179 rlineto +16 50 26 34 34 17 rrcurveto +138 -280 rlineto +116 0 rlineto +closepath +-387 -154 rmoveto +197 0 rlineto +10 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/alefqamats { +0 563 hsbw +-154 51 hstem +0 20 hstem +499 20 hstem +51 97 vstem +221 56 vstem +518 96 vstem +537 0 rmoveto +-109 219 rlineto +81 43 40 54 31 95 rrcurveto +34 108 rlineto +-96 0 rlineto +-35 -105 rlineto +-26 -78 -16 -24 -46 -26 rrcurveto +-117 233 rlineto +-114 0 rlineto +84 -171 rlineto +-64 -30 -46 -56 -28 -83 rrcurveto +-59 -179 rlineto +97 0 rlineto +59 179 rlineto +16 50 26 34 34 17 rrcurveto +138 -280 rlineto +116 0 rlineto +closepath +-334 -236 rmoveto +57 0 rlineto +17 82 rlineto +70 0 rlineto +10 51 rlineto +-196 0 rlineto +-11 -51 rlineto +71 0 rlineto +-18 -82 rlineto +closepath +endchar } ND +/alefmapiq { +0 563 hsbw +0 20 hstem +36 482 hstem +51 97 vstem +232 83 vstem +518 96 vstem +536 0 rmoveto +-109 219 rlineto +82 42 42 57 29 93 rrcurveto +34 107 rlineto +-96 0 rlineto +-35 -104 rlineto +-22 -68 -16 -31 -50 -29 rrcurveto +-117 232 rlineto +-114 0 rlineto +84 -170 rlineto +-65 -30 -46 -56 -27 -83 rrcurveto +-59 -179 rlineto +97 0 rlineto +59 179 rlineto +16 50 26 34 34 17 rrcurveto +138 -280 rlineto +115 0 rlineto +closepath +-304 77 rmoveto +0 -23 9 -18 23 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -12 11 -22 0 rrcurveto +-23 0 -26 -19 0 -22 rrcurveto +closepath +endchar } ND +/betdagesh { +0 542 hsbw +0 78 hstem +231 82 hstem +443 81 hstem +187 84 vstem +408 98 vstem +455 78 rmoveto +42 202 rlineto +6 28 3 26 0 24 rrcurveto +0 110 -74 56 -148 0 rrcurveto +-50 0 -48 -4 -44 -6 rrcurveto +-9 -77 rlineto +45 4 33 2 21 0 rrcurveto +103 0 60 -27 13 -52 rrcurveto +0 -46 rlineto +0 -18 -4 -22 -6 -23 rrcurveto +-37 -177 rlineto +-320 0 rlineto +-17 -78 rlineto +497 0 rlineto +16 78 rlineto +-82 0 rlineto +closepath +-218 235 rmoveto +-28 0 -22 -26 0 -24 rrcurveto +0 -22 11 -10 22 0 rrcurveto +25 0 26 25 0 27 rrcurveto +0 20 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/gimeldagesh { +0 399 hsbw +0 20 hstem +127 69 hstem +275 82 hstem +444 80 hstem +12 95 vstem +172 84 vstem +300 96 vstem +387 335 rmoveto +5 22 4 20 0 17 rrcurveto +0 44 rlineto +0 58 -52 28 -79 0 rrcurveto +-32 0 -28 -4 -22 -6 rrcurveto +-10 -75 rlineto +16 3 19 2 20 0 rrcurveto +46 0 26 -16 0 -32 rrcurveto +0 -15 -1 -21 -6 -28 rrcurveto +-29 -136 rlineto +-74 0 -64 -39 -56 -77 rrcurveto +-58 -80 rlineto +95 0 rlineto +41 54 rlineto +36 48 38 25 42 0 rrcurveto +8 -127 rlineto +91 0 rlineto +-10 176 rlineto +34 159 rlineto +closepath +-164 22 rmoveto +-28 0 -23 -26 0 -24 rrcurveto +0 -22 11 -10 23 0 rrcurveto +25 0 25 25 0 27 rrcurveto +0 20 -11 10 -22 0 rrcurveto +closepath +endchar } ND +/daletdagesh { +0 508 hsbw +0 20 hstem +241 82 hstem +440 79 hstem +223 84 vstem +399 93 vstem +580 440 rmoveto +17 79 rlineto +-465 0 rlineto +-16 -79 rlineto +283 0 rlineto +-94 -440 rlineto +93 0 rlineto +94 440 rlineto +88 0 rlineto +closepath +-307 -117 rmoveto +-28 0 -22 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/hedagesh { +0 602 hsbw +0 292 hstem +443 81 hstem +79 93 vstem +309 84 vstem +502 98 vstem +182 509 rmoveto +-10 -80 rlineto +56 9 51 5 44 0 rrcurveto +119 0 60 -17 0 -91 rrcurveto +0 -22 -3 -26 -6 -32 rrcurveto +-55 -255 rlineto +94 0 rlineto +59 280 rlineto +6 28 3 27 0 24 rrcurveto +0 132 -83 33 -161 0 rrcurveto +-56 0 -58 -5 -60 -10 rrcurveto +closepath +52 -217 rmoveto +-93 0 rlineto +-62 -292 rlineto +93 0 rlineto +62 292 rlineto +closepath +125 -1 rmoveto +-28 0 -22 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/vavdagesh { +0 287 hsbw +0 323 hstem +498 20 hstem +59 84 vstem +227 94 vstem +321 518 rmoveto +-94 0 rlineto +-111 -518 rlineto +95 0 rlineto +110 518 rlineto +closepath +-211 -195 rmoveto +-28 0 -23 -24 0 -28 rrcurveto +0 -20 11 -10 22 0 rrcurveto +27 0 24 23 0 28 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/zayindagesh { +0 411 hsbw +0 20 hstem +269 82 hstem +452 66 hstem +65 84 vstem +168 94 vstem +500 452 rmoveto +14 66 rlineto +-314 0 rlineto +-16 -78 rlineto +130 0 rlineto +-71 -50 -25 -55 -8 -91 rrcurveto +-9 -71 -8 -53 -7 -35 rrcurveto +-18 -85 rlineto +94 0 rlineto +15 72 rlineto +7 33 8 56 8 79 rrcurveto +11 158 71 54 118 0 rrcurveto +closepath +-384 -101 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/tetdagesh { +0 590 hsbw +-14 75 hstem +241 82 hstem +446 83 hstem +112 93 319 84 517 93 vstem3 +179 519 rmoveto +-52 -244 rlineto +-10 -46 -5 -40 0 -32 rrcurveto +0 -106 77 -65 106 0 rrcurveto +177 0 78 105 41 190 rrcurveto +8 37 rlineto +7 33 4 29 0 26 rrcurveto +0 82 -35 41 -70 0 rrcurveto +-54 0 -51 -29 -47 -58 rrcurveto +19 -48 rlineto +32 34 32 18 32 0 rrcurveto +32 0 16 -21 0 -40 rrcurveto +0 -15 -3 -18 -4 -20 rrcurveto +-14 -66 rlineto +-26 -123 -40 -82 -117 0 rrcurveto +-63 0 -44 33 0 73 rrcurveto +0 23 3 27 7 32 rrcurveto +57 270 rlineto +-93 0 rlineto +closepath +191 -196 rmoveto +-28 0 -23 -26 0 -25 rrcurveto +0 -21 11 -10 23 0 rrcurveto +25 0 26 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/yoddagesh { +0 287 hsbw +250 268 hstem +75 84 vstem +227 94 vstem +321 518 rmoveto +-94 0 rlineto +-58 -268 rlineto +95 0 rlineto +57 268 rlineto +closepath +-196 -120 rmoveto +-28 0 -22 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 25 0 27 rrcurveto +0 20 -12 10 -22 0 rrcurveto +closepath +endchar } ND +/finalkafdagesh { +0 509 hsbw +-199 20 hstem +206 82 hstem +443 81 hstem +186 84 vstem +303 93 vstem +410 98 vstem +129 514 rmoveto +-9 -80 rlineto +49 6 42 3 36 0 rrcurveto +105 0 58 -24 0 -85 rrcurveto +0 -22 -4 -26 -7 -31 rrcurveto +-96 -454 rlineto +93 0 rlineto +102 479 rlineto +6 30 4 27 0 24 rrcurveto +0 131 -89 32 -150 0 rrcurveto +-42 0 -47 -4 -51 -6 rrcurveto +closepath +108 -226 rmoveto +-28 0 -23 -26 0 -25 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/kafdagesh { +0 461 hsbw +-8 84 221 77 443 84 hstem3 +174 84 vstem +378 102 vstem +41 7 rmoveto +35 -10 33 -5 31 0 rrcurveto +194 0 146 166 0 169 rrcurveto +0 122 -86 78 -141 0 rrcurveto +-30 0 -35 -5 -40 -9 rrcurveto +-5 -85 rlineto +32 10 32 5 33 0 rrcurveto +89 0 49 -53 0 -79 rrcurveto +0 -109 -87 -126 -129 0 rrcurveto +-32 0 -31 5 -28 10 rrcurveto +-30 -84 rlineto +closepath +184 291 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/lameddagesh { +0 463 hsbw +0 351 hstem +440 79 hstem +696 20 hstem +206 84 vstem +232 519 rmoveto +42 197 rlineto +-92 0 rlineto +-59 -276 rlineto +287 0 rlineto +-15 -70 rlineto +-10 -42 -19 -36 -28 -28 rrcurveto +-37 -37 rlineto +-50 -52 -18 -35 -14 -70 rrcurveto +-15 -70 rlineto +93 0 rlineto +18 83 rlineto +8 40 22 38 34 36 rrcurveto +34 35 rlineto +39 40 26 53 14 64 rrcurveto +28 130 rlineto +-288 0 rlineto +closepath +24 -168 rmoveto +-28 0 -22 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/memdagesh { +0 601 hsbw +0 78 hstem +208 82 hstem +444 80 hstem +54 94 vstem +149 92 333 82 507 92 vstem3 +184 302 rmoveto +-23 -48 -15 -33 -8 -19 rrcurveto +-84 -202 rlineto +94 0 rlineto +78 192 rlineto +55 138 51 114 106 0 rrcurveto +46 0 22 -35 0 -54 rrcurveto +0 -26 -8 -43 -13 -56 rrcurveto +-32 -152 rlineto +-173 0 rlineto +-17 -78 rlineto +268 0 rlineto +48 228 rlineto +13 61 7 49 0 38 rrcurveto +0 82 -47 66 -95 0 rrcurveto +-76 0 -82 -53 -45 -67 rrcurveto +-13 115 rlineto +-92 0 rlineto +35 -217 rlineto +closepath +200 -12 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -10 23 0 rrcurveto +25 0 25 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/nundagesh { +0 353 hsbw +0 78 hstem +217 82 hstem +444 80 hstem +102 85 vstem +264 96 vstem +279 0 rmoveto +72 335 rlineto +5 22 4 20 0 17 rrcurveto +0 44 rlineto +0 58 -52 28 -79 0 rrcurveto +-32 0 -28 -4 -23 -6 rrcurveto +-9 -75 rlineto +16 3 18 2 20 0 rrcurveto +46 0 27 -16 0 -32 rrcurveto +0 -15 -1 -21 -6 -28 rrcurveto +-54 -254 rlineto +-157 0 rlineto +-17 -78 rlineto +250 0 rlineto +closepath +-126 299 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -10 23 0 rrcurveto +25 0 26 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/samekhdagesh { +0 574 hsbw +-15 78 hstem +218 82 hstem +456 76 hstem +89 103 301 82 493 101 vstem3 +400 532 rmoveto +-172 0 -138 -194 0 -159 rrcurveto +0 -119 71 -75 123 0 rrcurveto +183 0 127 191 0 161 rrcurveto +0 112 -72 83 -122 0 rrcurveto +closepath +-208 -346 rmoveto +0 106 68 164 124 0 rrcurveto +72 0 37 -42 0 -83 rrcurveto +0 -109 -69 -159 -124 0 rrcurveto +-72 0 -36 41 0 82 rrcurveto +closepath +160 114 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 21 0 29 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/finalpedagesh { +0 566 hsbw +-199 475 hstem +447 77 hstem +113 92 vstem +320 85 vstem +469 97 vstem +237 438 rmoveto +26 6 30 3 32 0 rrcurveto +84 0 50 -24 10 -49 rrcurveto +0 -41 rlineto +0 -16 -3 -17 -4 -19 rrcurveto +-102 -480 rlineto +93 0 rlineto +104 489 rlineto +6 28 3 25 0 23 rrcurveto +0 121 -77 37 -142 0 rrcurveto +-63 0 -62 -9 -62 -17 rrcurveto +-42 -195 rlineto +-4 -18 -1 -15 0 -14 rrcurveto +0 -60 32 -29 66 0 rrcurveto +22 0 20 4 20 8 rrcurveto +5 68 rlineto +-11 -4 -13 -2 -14 0 rrcurveto +-24 0 -11 12 0 24 rrcurveto +0 7 1 8 2 9 rrcurveto +29 137 rlineto +closepath +134 -162 rmoveto +-28 0 -23 -26 0 -24 rrcurveto +0 -22 11 -10 23 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/pedagesh { +0 546 hsbw +-8 81 hstem +212 74 hstem +450 77 hstem +128 93 vstem +329 84 vstem +466 101 vstem +166 501 rmoveto +-34 -159 rlineto +-3 -14 -1 -13 0 -11 rrcurveto +0 -61 44 -31 55 0 rrcurveto +21 0 18 3 14 6 rrcurveto +0 65 rlineto +-9 0 rlineto +-34 0 -16 13 0 28 rrcurveto +0 19 rlineto +22 95 rlineto +28 6 27 3 28 0 rrcurveto +86 0 54 -54 0 -80 rrcurveto +0 -119 -112 -124 -138 0 rrcurveto +-50 0 -38 10 -27 21 rrcurveto +-39 -77 rlineto +32 -24 47 -11 64 0 rrcurveto +211 0 151 171 0 173 rrcurveto +0 124 -90 67 -129 0 rrcurveto +-62 0 -60 -9 -60 -17 rrcurveto +closepath +213 -195 rmoveto +-27 0 -23 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 22 0 28 rrcurveto +0 21 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/tsadidagesh { +0 479 hsbw +0 78 hstem +185 334 hstem +97 84 vstem +115 420 vstem +535 519 rmoveto +-97 0 rlineto +-23 -87 rlineto +-23 -82 -18 -25 -58 -37 rrcurveto +-95 231 rlineto +-106 0 rlineto +193 -441 rlineto +-261 0 rlineto +-16 -78 rlineto +373 0 rlineto +12 55 rlineto +-74 173 rlineto +97 51 45 46 27 100 rrcurveto +24 94 rlineto +closepath +-387 -252 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/qofdagesh { +0 550 hsbw +-199 20 hstem +0 323 hstem +440 79 hstem +39 89 vstem +143 89 vstem +282 85 vstem +184 519 rmoveto +-17 -79 rlineto +330 0 rlineto +-15 -70 rlineto +-9 -41 -19 -35 -29 -30 rrcurveto +-36 -37 rlineto +-50 -52 -19 -33 -14 -72 rrcurveto +-15 -70 rlineto +93 0 rlineto +18 83 rlineto +8 40 22 38 34 36 rrcurveto +34 35 rlineto +39 41 26 52 14 64 rrcurveto +27 130 rlineto +-422 0 rlineto +closepath +-145 -718 rmoveto +89 0 rlineto +104 491 rlineto +-89 0 rlineto +-104 -491 rlineto +closepath +294 522 rmoveto +-28 0 -23 -26 0 -25 rrcurveto +0 -21 11 -10 22 0 rrcurveto +27 0 25 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/reshdagesh { +0 509 hsbw +0 20 hstem +206 82 hstem +443 81 hstem +186 84 vstem +409 98 vstem +129 514 rmoveto +-9 -80 rlineto +49 6 42 3 36 0 rrcurveto +96 0 54 -27 12 -54 rrcurveto +0 -45 rlineto +0 -18 -4 -20 -5 -24 rrcurveto +-54 -255 rlineto +93 0 rlineto +59 280 rlineto +6 28 3 26 0 23 rrcurveto +0 130 -80 37 -158 0 rrcurveto +-42 0 -47 -4 -51 -6 rrcurveto +closepath +108 -226 rmoveto +-28 0 -23 -26 0 -25 rrcurveto +0 -21 11 -10 22 0 rrcurveto +24 0 27 24 0 27 rrcurveto +0 20 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/shindagesh { +0 694 hsbw +-14 79 hstem +187 331 hstem +116 93 vstem +438 84 vstem +662 94 vstem +254 518 rmoveto +-95 0 rlineto +-24 -143 rlineto +-13 -78 -6 -58 0 -36 rrcurveto +0 -132 73 -85 140 0 rrcurveto +200 0 102 125 66 215 rrcurveto +59 192 rlineto +-94 0 rlineto +-68 -222 rlineto +-47 -150 -66 -81 -130 0 rrcurveto +-87 0 -54 45 -1 71 rrcurveto +143 10 71 37 36 127 rrcurveto +47 163 rlineto +-94 0 rlineto +-40 -139 rlineto +-26 -95 -62 -29 -73 0 rrcurveto +1 32 9 60 17 87 rrcurveto +16 84 rlineto +closepath +235 -249 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/tavdages { +0 643 hsbw +-4 77 hstem +196 82 hstem +444 80 hstem +365 85 vstem +545 97 vstem +22 12 rmoveto +28 -11 29 -5 31 0 rrcurveto +114 0 24 34 23 100 rrcurveto +66 314 rlineto +47 0 rlineto +90 0 71 -14 0 -64 rrcurveto +0 -24 -2 -37 -10 -50 rrcurveto +-54 -255 rlineto +93 0 rlineto +60 280 rlineto +6 33 4 29 0 25 rrcurveto +0 136 -107 21 -159 0 rrcurveto +-77 0 -76 -5 -76 -9 rrcurveto +-8 -78 rlineto +42 6 35 3 28 0 rrcurveto +-64 -299 rlineto +-11 -52 -18 -17 -45 0 rrcurveto +-20 0 -17 3 -16 6 rrcurveto +-31 -70 rlineto +closepath +394 266 rmoveto +-28 0 -23 -25 0 -26 rrcurveto +0 -21 11 -10 22 0 rrcurveto +27 0 25 24 0 27 rrcurveto +0 20 -12 11 -22 0 rrcurveto +closepath +endchar } ND +/vavholam { +0 247 hsbw +0 20 hstem +498 20 hstem +577 82 hstem +76 95 vstem +212 84 vstem +281 518 rmoveto +-95 0 rlineto +-110 -518 rlineto +95 0 rlineto +110 518 rlineto +closepath +-18 141 rmoveto +-27 0 -24 -25 0 -25 rrcurveto +0 -22 11 -10 22 0 rrcurveto +26 0 25 24 0 26 rrcurveto +0 21 -11 11 -22 0 rrcurveto +closepath +endchar } ND +/betrafe { +0 542 hsbw +0 78 hstem +443 81 hstem +611 51 hstem +408 98 vstem +455 78 rmoveto +42 202 rlineto +6 28 3 26 0 24 rrcurveto +0 110 -74 56 -148 0 rrcurveto +-50 0 -48 -4 -44 -6 rrcurveto +-9 -77 rlineto +45 4 33 2 21 0 rrcurveto +103 0 60 -27 13 -52 rrcurveto +0 -46 rlineto +0 -18 -4 -22 -6 -23 rrcurveto +-37 -177 rlineto +-320 0 rlineto +-17 -78 rlineto +497 0 rlineto +16 78 rlineto +-82 0 rlineto +closepath +-191 533 rmoveto +196 0 rlineto +11 51 rlineto +-197 0 rlineto +-10 -51 rlineto +closepath +endchar } ND +/kafrafe { +0 461 hsbw +-8 84 hstem +443 84 hstem +611 51 hstem +378 101 vstem +41 7 rmoveto +35 -10 33 -5 31 0 rrcurveto +194 0 145 162 0 172 rrcurveto +0 123 -85 78 -141 0 rrcurveto +-30 0 -35 -5 -40 -10 rrcurveto +-5 -84 rlineto +32 10 32 5 33 0 rrcurveto +89 0 49 -53 0 -79 rrcurveto +0 -109 -87 -126 -129 0 rrcurveto +-32 0 -31 5 -28 10 rrcurveto +-30 -84 rlineto +closepath +206 604 rmoveto +196 0 rlineto +11 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/perafe { +0 546 hsbw +-8 81 hstem +212 74 hstem +451 76 hstem +611 51 hstem +129 92 vstem +467 100 vstem +166 501 rmoveto +-32 -153 rlineto +-4 -15 -1 -14 0 -12 rrcurveto +0 -64 37 -31 74 0 rrcurveto +24 0 23 4 21 8 rrcurveto +5 68 rlineto +-12 -4 -14 -2 -16 0 rrcurveto +-34 0 -16 13 0 28 rrcurveto +0 19 rlineto +22 95 rlineto +28 6 27 4 28 0 rrcurveto +86 0 55 -55 0 -80 rrcurveto +0 -119 -113 -124 -138 0 rrcurveto +-50 0 -38 10 -27 21 rrcurveto +-39 -77 rlineto +32 -24 47 -11 64 0 rrcurveto +212 0 150 177 0 169 rrcurveto +0 122 -92 67 -126 0 rrcurveto +-62 0 -61 -9 -60 -17 rrcurveto +closepath +124 110 rmoveto +196 0 rlineto +11 51 rlineto +-196 0 rlineto +-11 -51 rlineto +closepath +endchar } ND +/aleflamed { +0 576 hsbw +0 20 hstem +498 20 hstem +696 20 hstem +64 97 vstem +182 92 vstem +530 97 vstem +549 0 rmoveto +-109 219 rlineto +82 42 41 57 29 93 rrcurveto +35 107 rlineto +-97 0 rlineto +-34 -104 rlineto +-22 -68 -16 -31 -50 -29 rrcurveto +-117 232 rlineto +-59 0 rlineto +42 198 rlineto +-92 0 rlineto +-59 -276 rlineto +92 0 rlineto +46 -92 rlineto +-65 -30 -46 -56 -27 -83 rrcurveto +-59 -179 rlineto +97 0 rlineto +59 179 rlineto +16 50 25 34 34 17 rrcurveto +139 -280 rlineto +115 0 rlineto +closepath +endchar } ND +/zerowidthnonjoiner { +0 0 hsbw +-134 20 hstem +609 20 hstem +-18 36 vstem +18 629 rmoveto +-36 0 rlineto +0 -763 rlineto +36 0 rlineto +0 763 rlineto +closepath +endchar } ND +/zerowidthjoiner { +0 0 hsbw +478 212 hstem +-18 36 vstem +18 -134 rmoveto +0 678 rlineto +65 -66 rlineto +24 23 rlineto +-84 83 rlineto +84 82 rlineto +-24 24 rlineto +-83 -84 rlineto +-83 84 rlineto +-24 -24 rlineto +84 -82 rlineto +-84 -83 rlineto +24 -23 rlineto +65 66 rlineto +0 -678 rlineto +36 0 rlineto +closepath +endchar } ND +/lefttorightmark { +0 0 hsbw +568 122 hstem +-18 35 vstem +210 585 rmoveto +-106 105 rlineto +-24 -24 rlineto +67 -63 rlineto +-165 0 rlineto +0 -737 rlineto +35 0 rlineto +0 702 rlineto +130 0 rlineto +-67 -64 rlineto +24 -24 rlineto +106 105 rlineto +closepath +endchar } ND +/righttoleftmark { +0 0 hsbw +568 122 hstem +-18 35 vstem +17 -134 rmoveto +0 737 rlineto +-164 0 rlineto +66 63 rlineto +-23 24 rlineto +-106 -105 rlineto +106 -105 rlineto +23 24 rlineto +-66 64 rlineto +129 0 rlineto +0 -702 rlineto +35 0 rlineto +closepath +endchar } ND +/uni202A { +0 0 hsbw +568 35 hstem +-18 36 vstem +18 568 rmoveto +192 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -737 rlineto +36 0 rlineto +0 702 rlineto +closepath +endchar } ND +/uni202B { +0 0 hsbw +568 35 hstem +-18 36 vstem +-210 568 rmoveto +192 0 rlineto +0 -702 rlineto +36 0 rlineto +0 737 rlineto +-228 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uni202D { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 vstem +-18 36 vstem +114 480 rmoveto +0 35 rlineto +-194 0 rlineto +0 140 rlineto +194 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni202E { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +80 34 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -35 rlineto +194 0 rlineto +0 -140 rlineto +-194 0 rlineto +closepath +endchar } ND +/uni202C { +0 0 hsbw +480 210 hstem +-18 36 vstem +114 480 rmoveto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +closepath +endchar } ND +/uni206E { +0 0 hsbw +506 20 hstem +644 46 hstem +-114 49 -18 36 65 49 vstem3 +18 -134 rmoveto +0 630 rlineto +96 89 rlineto +-114 105 rlineto +-114 -105 rlineto +96 -89 rlineto +0 -630 rlineto +36 0 rlineto +closepath +47 719 rmoveto +-65 -59 rlineto +-65 59 rlineto +65 59 rlineto +65 -59 rlineto +closepath +endchar } ND +/uni206F { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 175 rlineto +-132 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206A { +0 0 hsbw +480 35 hstem +655 35 hstem +-18 36 vstem +-114 515 rmoveto +0 -35 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 35 rlineto +-96 0 rlineto +0 140 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -140 rlineto +-96 0 rlineto +closepath +endchar } ND +/uni206B { +0 0 hsbw +480 35 hstem +655 35 hstem +-114 34 -18 36 80 34 vstem3 +-80 515 rmoveto +0 140 rlineto +160 0 rlineto +0 -140 rlineto +-160 0 rlineto +closepath +-34 -35 rmoveto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +96 0 rlineto +0 210 rlineto +-228 0 rlineto +0 -210 rlineto +closepath +endchar } ND +/uni206C { +0 0 hsbw +512 178 hstem +-18 36 vstem +18 -134 rmoveto +0 646 rlineto +96 178 rlineto +-228 0 rlineto +96 -178 rlineto +0 -646 rlineto +36 0 rlineto +closepath +endchar } ND +/uni206D { +0 0 hsbw +670 20 hstem +-18 36 vstem +18 480 rmoveto +96 0 rlineto +-114 210 rlineto +-114 -210 rlineto +96 0 rlineto +0 -614 rlineto +36 0 rlineto +0 614 rlineto +closepath +endchar } ND +/uniF00A { +0 0 hsbw +-208 473 hstem +421 473 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +0 -629 rmoveto +-36 0 rlineto +0 -473 rlineto +36 0 rlineto +0 473 rlineto +closepath +endchar } ND +/uniF00B { +0 0 hsbw +-208 35 hstem +859 35 hstem +-18 36 vstem +-114 -208 rmoveto +228 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1032 rlineto +96 0 rlineto +0 35 rlineto +-228 0 rlineto +0 -35 rlineto +96 0 rlineto +0 -1032 rlineto +-96 0 rlineto +0 -35 rlineto +closepath +endchar } ND +/uniF00C { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +109 804 rmoveto +-127 90 rlineto +0 -1102 rlineto +36 0 rlineto +0 942 rlineto +91 70 rlineto +closepath +endchar } ND +/uniF00D { +0 0 hsbw +-208 20 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-127 -90 rlineto +91 -70 rlineto +0 -942 rlineto +36 0 rlineto +0 1102 rlineto +closepath +endchar } ND +/uniF00E { +0 0 hsbw +-208 35 hstem +874 20 hstem +-18 36 vstem +18 894 rmoveto +-36 0 rlineto +0 -1102 rlineto +132 0 rlineto +0 35 rlineto +-96 0 rlineto +0 1067 rlineto +closepath +endchar } ND +/currency { +0 556 hsbw +183 343 hstem +69 80 vstem +402 81 vstem +104 469 rmoveto +-24 -36 -11 -38 0 -41 rrcurveto +0 -41 11 -38 24 -36 rrcurveto +-68 -66 rlineto +56 -58 rlineto +68 68 rlineto +34 -24 39 -12 43 0 rrcurveto +42 0 39 12 35 24 rrcurveto +67 -68 rlineto +57 58 rlineto +-68 66 rlineto +23 36 12 38 0 41 rrcurveto +0 41 -12 38 -23 36 rrcurveto +68 67 rlineto +-57 58 rlineto +-67 -68 rlineto +-35 23 -39 12 -42 0 rrcurveto +-43 0 -39 -12 -34 -23 rrcurveto +-68 68 rlineto +-56 -58 rlineto +68 -67 rlineto +closepath +45 -115 rmoveto +0 70 56 57 70 0 rrcurveto +70 0 57 -57 0 -70 rrcurveto +0 -70 -57 -56 -70 0 rrcurveto +-70 0 -56 56 0 70 rrcurveto +closepath +endchar } ND +/uniFFFC { +0 1000 hsbw +0 49 hstem +187 47 hstem +342 48 hstem +484 48 hstem +670 49 hstem +0 49 vstem +109 57 vstem +360 57 vstem +444 56 vstem +624 56 vstem +813 57 vstem +951 49 vstem +1000 562 rmoveto +0 157 rlineto +-158 0 rlineto +0 -49 rlineto +109 0 rlineto +0 -108 rlineto +49 0 rlineto +closepath +-281 108 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +281 -389 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +-130 17 rmoveto +0 234 rlineto +-57 0 rlineto +0 -236 rlineto +0 -45 -16 -22 -30 0 rrcurveto +-13 0 -11 4 -8 8 rrcurveto +-35 -38 rlineto +16 -15 23 -7 28 0 rrcurveto +68 0 35 39 0 78 rrcurveto +closepath +-432 372 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +562 -670 rmoveto +0 158 rlineto +-49 0 rlineto +0 -109 rlineto +-109 0 rlineto +0 -49 rlineto +158 0 rlineto +closepath +-305 289 rmoveto +0 39 -20 27 -38 16 rrcurveto +28 17 15 23 0 30 rrcurveto +0 60 -41 31 -80 0 rrcurveto +-115 0 rlineto +0 -345 rlineto +117 0 rlineto +89 0 45 34 0 68 rrcurveto +closepath +-537 381 rmoveto +0 49 rlineto +-158 0 rlineto +0 -157 rlineto +49 0 rlineto +0 108 rlineto +109 0 rlineto +closepath +561 -670 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-302 359 rmoveto +0 113 -55 66 -100 0 rrcurveto +-99 0 -54 -66 0 -113 rrcurveto +0 -114 54 -64 99 0 rrcurveto +100 0 55 64 0 114 rrcurveto +closepath +-368 -78 rmoveto +0 157 rlineto +-49 0 rlineto +0 -157 rlineto +49 0 rlineto +closepath +389 -281 rmoveto +0 49 rlineto +-157 0 rlineto +0 -49 rlineto +157 0 rlineto +closepath +-280 0 rmoveto +0 49 rlineto +-109 0 rlineto +0 109 rlineto +-49 0 rlineto +0 -158 rlineto +158 0 rlineto +closepath +466 436 rmoveto +0 -31 -25 -15 -49 0 rrcurveto +-50 0 rlineto +0 94 rlineto +44 0 rlineto +53 0 27 -16 0 -32 rrcurveto +closepath +14 -147 rmoveto +0 -37 -26 -18 -51 0 rrcurveto +-61 0 rlineto +0 108 rlineto +55 0 rlineto +55 0 28 -18 0 -35 rrcurveto +closepath +-278 70 rmoveto +0 -87 -33 -43 -65 0 rrcurveto +-64 0 -32 43 0 87 rrcurveto +0 87 32 44 64 0 rrcurveto +65 0 33 -44 0 -87 rrcurveto +closepath +endchar } ND +/Ohorn { +0 812 hsbw +-12 79 hstem +648 80 hstem +91 95 vstem +677 91 vstem +798 100 vstem +186 295 rmoveto +0 189 113 164 171 0 rrcurveto +124 0 83 -100 0 -133 rrcurveto +0 -166 -118 -182 -161 0 rrcurveto +-117 0 -95 93 0 135 rrcurveto +closepath +591 321 rmoveto +55 0 rlineto +-12 -58 -24 -35 -36 -12 rrcurveto +-37 130 -109 87 -144 0 rrcurveto +-226 0 -153 -191 0 -237 rrcurveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 24 -2 22 -2 22 rrcurveto +57 16 37 51 18 86 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/ohorn { +0 604 hsbw +-12 69 hstem +462 68 hstem +49 88 vstem +453 87 vstem +578 100 vstem +137 206 rmoveto +0 130 76 126 115 0 rrcurveto +77 0 48 -63 0 -85 rrcurveto +0 -108 -74 -149 -117 0 rrcurveto +-83 0 -42 61 0 88 rrcurveto +closepath +420 212 rmoveto +54 0 rlineto +-12 -57 -23 -35 -36 -12 rrcurveto +0 132 -83 84 -125 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +0 -124 80 -85 132 0 rrcurveto +148 0 115 138 15 150 rrcurveto +62 12 40 52 19 91 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +endchar } ND +/Uhorn { +0 793 hsbw +-13 80 hstem +616 100 hstem +97 94 vstem +198 96 vstem +659 95 vstem +821 100 vstem +800 616 rmoveto +54 0 rlineto +-19 -87 -39 -30 -87 0 rrcurveto +45 217 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -49 -90 -142 0 rrcurveto +-94 0 -66 52 0 76 rrcurveto +0 18 3 27 8 36 rrcurveto +92 440 rlineto +-96 0 rlineto +-81 -391 rlineto +-14 -64 -6 -43 0 -22 rrcurveto +0 -133 100 -76 158 0 rrcurveto +174 0 99 118 39 191 rrcurveto +34 164 rlineto +123 3 53 36 26 129 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/uhorn { +0 634 hsbw +-12 73 hstem +418 101 hstem +63 89 vstem +368 81 vstem +469 89 vstem +621 100 vstem +600 418 rmoveto +54 0 rlineto +-19 -84 -39 -32 -84 0 rrcurveto +46 217 rlineto +-89 0 rlineto +-47 -225 rlineto +-31 -152 -56 -81 -113 0 rrcurveto +-47 0 -23 20 0 42 rrcurveto +0 14 3 22 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -68 54 -51 79 0 rrcurveto +65 0 64 35 62 71 rrcurveto +-19 -94 rlineto +81 0 rlineto +55 263 rlineto +120 3 53 37 26 128 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +endchar } ND +/f00b { +0 0 hsbw +874 20 hstem +-131 110 vstem +-18 63 vstem +45 822 rmoveto +-66 72 rlineto +-110 0 rlineto +113 -72 rlineto +63 0 rlineto +closepath +endchar } ND +/f00c { +0 0 hsbw +874 20 hstem +-343 110 vstem +-230 63 vstem +-167 822 rmoveto +-66 72 rlineto +-110 0 rlineto +113 -72 rlineto +63 0 rlineto +closepath +endchar } ND +/f00e { +0 0 hsbw +755 135 hstem +-190 68 vstem +-190 755 rmoveto +68 0 rlineto +-56 135 rlineto +-108 0 rlineto +96 -135 rlineto +closepath +endchar } ND +/f006 { +0 0 hsbw +874 20 hstem +-82 63 vstem +-16 110 vstem +-16 894 rmoveto +-66 -72 rlineto +63 0 rlineto +113 72 rlineto +-110 0 rlineto +closepath +endchar } ND +/f007 { +0 0 hsbw +874 20 hstem +-260 64 vstem +-194 111 vstem +-194 894 rmoveto +-66 -72 rlineto +64 0 rlineto +113 72 rlineto +-111 0 rlineto +closepath +endchar } ND +/f009 { +0 0 hsbw +870 20 hstem +-221 73 vstem +-129 111 vstem +-221 755 rmoveto +73 0 rlineto +130 135 rlineto +-111 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/combininghookabove { +0 0 hsbw +854 40 hstem +-99 199 vstem +-23 796 rmoveto +-29 -3 rlineto +-11 -39 rlineto +54 0 rlineto +5 15 rlineto +54 6 50 25 0 39 rrcurveto +0 35 -69 20 -58 0 rrcurveto +-34 0 -24 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +54 0 23 -10 -4 -20 rrcurveto +-3 -11 -11 -8 -18 -6 rrcurveto +-7 -3 rlineto +closepath +endchar } ND +/f010 { +0 0 hsbw +869 25 hstem +-96 20 vstem +-47 46 vstem +-22 834 rmoveto +-19 -1 rlineto +-6 -21 rlineto +46 0 rlineto +0 6 rlineto +57 4 31 12 4 20 rrcurveto +4 26 -41 14 -85 0 rrcurveto +-65 0 rlineto +0 -29 rlineto +8 1 6 1 6 2 rrcurveto +22 0 rlineto +28 0 19 -2 11 -4 rrcurveto +8 -4 4 -3 -1 -4 rrcurveto +-2 -8 -9 -5 -16 -3 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/f013 { +0 0 hsbw +854 40 hstem +-242 199 vstem +-167 796 rmoveto +-28 -3 rlineto +-12 -39 rlineto +55 0 rlineto +5 15 rlineto +56 6 48 25 0 39 rrcurveto +0 35 -67 20 -60 0 rrcurveto +-34 0 -24 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +54 0 24 -10 -5 -20 rrcurveto +-2 -11 -11 -8 -19 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/f011 { +0 0 hsbw +869 25 hstem +-316 187 vstem +-242 834 rmoveto +-19 -1 rlineto +-6 -21 rlineto +46 0 rlineto +2 6 rlineto +57 4 33 12 0 20 rrcurveto +0 26 -36 14 -85 0 rrcurveto +-66 0 rlineto +0 -29 rlineto +7 1 7 1 7 2 rrcurveto +21 0 rlineto +28 0 19 -2 12 -4 rrcurveto +8 -4 4 -3 -2 -4 rrcurveto +-2 -8 -9 -5 -16 -3 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/f01c { +0 0 hsbw +827 68 hstem +-163 61 vstem +108 59 vstem +-163 786 rmoveto +61 0 rlineto +6 27 14 14 21 0 rrcurveto +10 0 30 -10 43 -19 rrcurveto +21 -9 14 -4 14 0 rrcurveto +49 0 41 41 6 66 rrcurveto +-59 0 rlineto +-7 -26 -11 -13 -16 0 rrcurveto +-10 0 -16 6 -27 12 rrcurveto +-35 16 -29 8 -20 0 rrcurveto +-62 0 -20 -40 -18 -69 rrcurveto +closepath +endchar } ND +/f015 { +0 0 hsbw +820 75 hstem +-368 49 vstem +-104 49 vstem +-368 818 rmoveto +49 0 rlineto +4 24 15 13 25 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +31 -14 26 -7 20 0 rrcurveto +52 0 33 25 13 50 rrcurveto +-49 0 rlineto +-8 -25 -14 -12 -20 0 rrcurveto +-11 0 -14 4 -18 8 rrcurveto +-33 15 -25 9 -21 0 rrcurveto +-58 0 -32 -28 -10 -48 rrcurveto +closepath +endchar } ND +/combiningtildeaccent { +0 0 hsbw +756 68 hstem +-325 61 vstem +-54 59 vstem +-325 757 rmoveto +61 0 rlineto +6 27 13 14 21 0 rrcurveto +11 0 29 -10 43 -19 rrcurveto +21 -9 16 -4 13 0 rrcurveto +50 0 40 41 6 66 rrcurveto +-59 0 rlineto +-6 -26 -12 -13 -17 0 rrcurveto +-9 0 -16 6 -27 12 rrcurveto +-36 16 -29 8 -20 0 rrcurveto +-62 0 -20 -40 -17 -69 rrcurveto +closepath +endchar } ND +/_783 { +0 0 hsbw +721 34 hstem +-10 38 vstem +236 39 vstem +-10 787 rmoveto +13 -43 58 -23 56 0 rrcurveto +64 0 59 22 35 44 rrcurveto +-39 0 rlineto +-25 -23 -50 -9 -37 0 rrcurveto +-43 0 -43 9 -10 23 rrcurveto +-38 0 rlineto +closepath +endchar } ND +/_784 { +0 0 hsbw +775 28 hstem +-29 97 vstem +86 91 vstem +130 775 rmoveto +44 -32 rlineto +96 0 rlineto +-93 60 rlineto +-91 0 rlineto +-115 -60 rlineto +97 0 rlineto +62 32 rlineto +closepath +endchar } ND +/f02c { +0 0 hsbw +-159 100 hstem +-217 100 vstem +-217 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/dongsign { +0 513 hsbw +108 413 hstem +535 51 hstem +631 85 hstem +119 61 vstem +338 58 vstem +421 61 vstem +421 631 rmoveto +-24 -110 rlineto +-23 43 -34 22 -44 0 rrcurveto +-102 0 -75 -121 0 -109 rrcurveto +0 -86 41 -62 79 0 rrcurveto +38 0 37 20 36 40 rrcurveto +-12 -52 rlineto +58 0 rlineto +86 415 rlineto +46 0 rlineto +10 46 rlineto +-46 0 rlineto +8 39 rlineto +-62 0 rlineto +-8 -39 rlineto +-111 0 rlineto +-9 -46 rlineto +111 0 rlineto +closepath +-241 -263 rmoveto +0 75 47 92 73 0 rrcurveto +46 0 32 -39 0 -52 rrcurveto +0 -91 -49 -96 -72 0 rrcurveto +-58 0 -19 44 0 67 rrcurveto +closepath +-138 -260 rmoveto +380 0 rlineto +10 47 rlineto +-380 0 rlineto +-10 -47 rlineto +closepath +endchar } ND +/onethird { +0 834 hsbw +-26 59 hstem +144 52 hstem +297 53 hstem +708 20 hstem +60 79 vstem +205 73 vstem +300 54 vstem +750 74 vstem +60 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +145 388 rmoveto +73 0 rlineto +76 367 rlineto +-54 0 rlineto +-32 -40 -67 -41 -52 -14 rrcurveto +-13 -62 rlineto +48 10 41 16 34 24 rrcurveto +-54 -260 rlineto +closepath +301 -279 rmoveto +16 -68 62 -37 75 0 rrcurveto +77 0 71 43 0 68 rrcurveto +0 37 -22 27 -43 18 rrcurveto +54 13 28 29 0 44 rrcurveto +0 65 -60 32 -75 0 rrcurveto +-78 0 -49 -32 -18 -62 rrcurveto +72 -9 rlineto +14 33 24 17 35 0 rrcurveto +40 0 21 -16 0 -31 rrcurveto +0 -34 -37 -20 -44 0 rrcurveto +-16 0 rlineto +-11 -52 rlineto +20 0 rlineto +45 0 23 -17 0 -33 rrcurveto +0 -39 -34 -22 -40 0 rrcurveto +-39 0 -27 18 -14 36 rrcurveto +-70 -8 rlineto +closepath +endchar } ND +/twothirds { +0 834 hsbw +-26 59 hstem +144 52 hstem +297 53 hstem +358 59 hstem +666 59 hstem +727 1 hstem +60 79 vstem +317 74 vstem +750 74 vstem +60 -30 rmoveto +79 0 rlineto +688 758 rlineto +-85 0 rlineto +-682 -758 rlineto +closepath +446 109 rmoveto +16 -68 62 -37 75 0 rrcurveto +77 0 71 43 0 68 rrcurveto +0 37 -22 27 -43 18 rrcurveto +54 13 28 29 0 44 rrcurveto +0 65 -60 32 -75 0 rrcurveto +-78 0 -49 -32 -18 -62 rrcurveto +72 -9 rlineto +14 33 24 17 35 0 rrcurveto +40 0 21 -16 0 -31 rrcurveto +0 -34 -37 -20 -44 0 rrcurveto +-16 0 rlineto +-11 -52 rlineto +20 0 rlineto +45 0 23 -17 0 -33 rrcurveto +0 -39 -34 -22 -40 0 rrcurveto +-39 0 -27 18 -14 36 rrcurveto +-70 -8 rlineto +closepath +-442 279 rmoveto +289 0 rlineto +12 59 rlineto +-185 0 rlineto +12 15 29 21 46 28 rrcurveto +80 48 44 28 0 65 rrcurveto +0 68 -60 35 -76 0 rrcurveto +-84 0 -52 -36 -20 -72 rrcurveto +75 -7 rlineto +12 37 27 19 43 0 rrcurveto +40 0 21 -16 0 -30 rrcurveto +0 -38 -27 -12 -51 -28 rrcurveto +-96 -53 -55 -46 -24 -85 rrcurveto +closepath +endchar } ND +/f008 { +0 0 hsbw +696 20 hstem +-73 73 vstem +19 111 vstem +-73 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/f00a { +0 0 hsbw +696 20 hstem +-285 73 vstem +-193 111 vstem +-285 582 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/f00d { +0 0 hsbw +582 134 hstem +-56 69 vstem +-56 582 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/f00f { +0 0 hsbw +582 134 hstem +-182 69 vstem +-182 582 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/f012 { +0 0 hsbw +703 51 hstem +-99 198 vstem +-24 643 rmoveto +-29 -3 rlineto +-11 -58 rlineto +55 0 rlineto +5 24 rlineto +54 6 49 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +54 0 23 -10 -4 -20 rrcurveto +-4 -13 -10 -9 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/f014 { +0 0 hsbw +703 51 hstem +-274 198 vstem +-199 643 rmoveto +-29 -3 rlineto +-11 -58 rlineto +55 0 rlineto +5 24 rlineto +56 6 47 30 0 46 rrcurveto +0 53 -64 13 -63 0 rrcurveto +-33 0 -24 -1 -14 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +54 0 24 -9 -5 -21 rrcurveto +-3 -12 -11 -10 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/f016 { +0 0 hsbw +827 68 hstem +-384 61 vstem +-113 59 vstem +-384 786 rmoveto +61 0 rlineto +6 27 13 14 21 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 16 -4 13 0 rrcurveto +50 0 40 41 6 66 rrcurveto +-59 0 rlineto +-7 -26 -12 -13 -16 0 rrcurveto +-9 0 -16 6 -27 12 rrcurveto +-36 16 -29 8 -20 0 rrcurveto +-62 0 -20 -40 -17 -69 rrcurveto +closepath +endchar } ND +/f017 { +0 0 hsbw +827 68 hstem +-493 61 vstem +-222 59 vstem +-493 786 rmoveto +61 0 rlineto +6 27 13 14 21 0 rrcurveto +11 0 29 -10 43 -19 rrcurveto +21 -9 16 -4 13 0 rrcurveto +50 0 40 41 6 66 rrcurveto +-59 0 rlineto +-6 -26 -12 -13 -17 0 rrcurveto +-9 0 -16 6 -27 12 rrcurveto +-36 16 -29 8 -20 0 rrcurveto +-62 0 -20 -40 -17 -69 rrcurveto +closepath +endchar } ND +/f018 { +0 0 hsbw +827 68 hstem +-493 61 vstem +-222 59 vstem +-493 786 rmoveto +61 0 rlineto +6 27 13 14 21 0 rrcurveto +11 0 29 -10 43 -19 rrcurveto +21 -9 16 -4 13 0 rrcurveto +50 0 40 41 6 66 rrcurveto +-59 0 rlineto +-6 -26 -12 -13 -17 0 rrcurveto +-9 0 -16 6 -27 12 rrcurveto +-36 16 -29 8 -20 0 rrcurveto +-62 0 -20 -40 -17 -69 rrcurveto +closepath +endchar } ND +/f019 { +0 0 hsbw +638 68 hstem +-365 61 vstem +-94 59 vstem +-365 597 rmoveto +61 0 rlineto +6 28 14 13 20 0 rrcurveto +11 0 29 -10 43 -19 rrcurveto +21 -9 16 -4 13 0 rrcurveto +48 0 42 40 6 67 rrcurveto +-59 0 rlineto +-8 -31 -12 -8 -15 0 rrcurveto +-9 0 -15 5 -28 12 rrcurveto +-37 16 -18 9 -30 0 rrcurveto +-48 0 -29 -23 -22 -86 rrcurveto +closepath +endchar } ND +/f01a { +0 0 hsbw +638 68 hstem +-429 61 vstem +-158 59 vstem +-429 597 rmoveto +61 0 rlineto +6 28 14 13 20 0 rrcurveto +11 0 29 -10 43 -19 rrcurveto +21 -9 16 -4 13 0 rrcurveto +48 0 42 40 6 67 rrcurveto +-59 0 rlineto +-8 -30 -12 -8 -15 0 rrcurveto +-9 0 -17 5 -26 11 rrcurveto +-39 16 -16 9 -30 0 rrcurveto +-48 0 -29 -23 -22 -86 rrcurveto +closepath +endchar } ND +/f01b { +0 0 hsbw +638 68 hstem +-439 61 vstem +-168 59 vstem +-439 597 rmoveto +61 0 rlineto +6 28 13 13 21 0 rrcurveto +11 0 29 -10 43 -19 rrcurveto +21 -9 16 -4 12 0 rrcurveto +50 0 41 40 6 67 rrcurveto +-59 0 rlineto +-8 -31 -12 -8 -15 0 rrcurveto +-9 0 -15 5 -28 12 rrcurveto +-37 16 -18 9 -30 0 rrcurveto +-48 0 -29 -23 -22 -86 rrcurveto +closepath +endchar } ND +/f01e { +0 0 hsbw +-159 100 hstem +-429 100 vstem +-429 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f01f { +0 0 hsbw +-159 100 hstem +-466 100 vstem +-466 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f020 { +0 0 hsbw +-159 100 hstem +-500 100 vstem +-500 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f021 { +0 0 hsbw +-159 100 hstem +-466 100 vstem +-466 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f022 { +0 0 hsbw +-159 100 hstem +-517 100 vstem +-517 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/combininggraveaccent { +0 0 hsbw +755 135 hstem +-36 69 vstem +-36 755 rmoveto +69 0 rlineto +-56 135 rlineto +-108 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/combiningacuteaccent { +0 0 hsbw +870 20 hstem +-86 73 vstem +6 111 vstem +-86 755 rmoveto +73 0 rlineto +130 135 rlineto +-111 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/f01d { +0 0 hsbw +638 68 hstem +-188 61 vstem +83 59 vstem +-188 597 rmoveto +61 0 rlineto +6 28 13 13 21 0 rrcurveto +11 0 29 -10 43 -19 rrcurveto +21 -9 15 -4 13 0 rrcurveto +49 0 41 40 7 67 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-38 16 -17 9 -30 0 rrcurveto +-48 0 -29 -23 -22 -86 rrcurveto +closepath +endchar } ND +/combiningdotbelow { +0 0 hsbw +-159 100 hstem +-448 99 vstem +-448 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f023 { +0 0 hsbw +-159 100 hstem +-427 99 vstem +-427 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f029 { +0 0 hsbw +-159 100 hstem +-254 99 vstem +-254 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f02a { +0 0 hsbw +-159 100 hstem +-225 100 vstem +-225 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f02b { +0 0 hsbw +-159 100 hstem +-425 99 vstem +-425 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f024 { +0 0 hsbw +-159 100 hstem +-378 99 vstem +-378 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f025 { +0 0 hsbw +-159 100 hstem +-383 99 vstem +-383 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f026 { +0 0 hsbw +-159 100 hstem +-422 99 vstem +-422 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f027 { +0 0 hsbw +-159 100 hstem +-432 99 vstem +-432 -159 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f028 { +0 0 hsbw +-159 100 hstem +-517 100 vstem +-517 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/f02d { +0 0 hsbw +820 75 hstem +-354 49 vstem +-89 49 vstem +-354 818 rmoveto +49 0 rlineto +5 24 15 13 25 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +31 -14 26 -7 20 0 rrcurveto +52 0 32 25 14 50 rrcurveto +-49 0 rlineto +-8 -25 -14 -12 -20 0 rrcurveto +-11 0 -15 4 -18 8 rrcurveto +-33 15 -25 9 -20 0 rrcurveto +-58 0 -32 -28 -11 -48 rrcurveto +closepath +endchar } ND +/f02e { +0 0 hsbw +827 68 hstem +-338 61 vstem +-67 59 vstem +-338 786 rmoveto +61 0 rlineto +6 27 13 14 21 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 14 0 rrcurveto +50 0 40 41 6 66 rrcurveto +-59 0 rlineto +-7 -26 -12 -12 -16 0 rrcurveto +-9 0 -16 5 -27 12 rrcurveto +-36 16 -29 8 -20 0 rrcurveto +-62 0 -20 -40 -17 -69 rrcurveto +closepath +endchar } ND +/f02f { +0 0 hsbw +820 75 hstem +-441 48 vstem +-177 49 vstem +-441 818 rmoveto +48 0 rlineto +5 24 15 13 25 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +31 -14 26 -7 20 0 rrcurveto +52 0 33 25 13 50 rrcurveto +-49 0 rlineto +-8 -25 -14 -12 -20 0 rrcurveto +-11 0 -15 4 -18 8 rrcurveto +-33 15 -25 9 -20 0 rrcurveto +-58 0 -32 -28 -10 -48 rrcurveto +closepath +endchar } ND +/f030 { +0 0 hsbw +827 68 hstem +-449 61 vstem +-178 59 vstem +-449 786 rmoveto +61 0 rlineto +6 27 13 14 21 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 16 -4 13 0 rrcurveto +50 0 40 41 6 66 rrcurveto +-59 0 rlineto +-6 -26 -12 -12 -17 0 rrcurveto +-9 0 -16 5 -27 12 rrcurveto +-36 16 -29 8 -20 0 rrcurveto +-62 0 -20 -40 -17 -69 rrcurveto +closepath +endchar } ND +/f031 { +0 222 hsbw +0 20 hstem +499 20 hstem +30 88 vstem +138 89 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +endchar } ND +/Adotbelow { +0 667 hsbw +-159 100 hstem +0 20 hstem +206 74 hstem +638 78 hstem +-20 105 vstem +223 99 vstem +386 113 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +-18 -439 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/adotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +458 72 hstem +44 88 vstem +174 99 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-242 -422 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ahookabove { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +854 40 hstem +-20 105 vstem +385 198 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +219 516 rmoveto +-29 -3 rlineto +-11 -39 rlineto +55 0 rlineto +4 15 rlineto +55 6 49 24 0 40 rrcurveto +0 36 -69 19 -58 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-4 -11 -10 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/ahookabove { +0 556 hsbw +-12 69 hstem +458 72 hstem +703 51 hstem +44 88 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-53 380 rmoveto +-29 -3 rlineto +-11 -58 rlineto +54 0 rlineto +5 24 rlineto +56 6 48 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +53 0 24 -9 -5 -21 rrcurveto +-3 -12 -10 -10 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Acircumflexacute { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +743 151 hstem +-20 105 vstem +290 97 vstem +406 64 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +208 495 rmoveto +44 -32 rlineto +96 0 rlineto +-93 60 rlineto +-91 0 rlineto +-115 -60 rlineto +97 0 rlineto +62 32 rlineto +closepath +23 119 rmoveto +-66 -72 rlineto +64 0 rlineto +113 72 rlineto +-111 0 rlineto +closepath +endchar } ND +/acircumflexacute { +0 556 hsbw +-12 69 hstem +458 72 hstem +668 48 hstem +870 20 hstem +44 88 vstem +211 95 339 63 439 87 vstem3 +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-205 319 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +118 173 rmoveto +73 0 rlineto +130 135 rlineto +-111 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/Acircumflexgrave { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +775 119 hstem +-20 105 vstem +290 97 vstem +460 64 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +208 495 rmoveto +44 -32 rlineto +96 0 rlineto +-93 60 rlineto +-91 0 rlineto +-115 -60 rlineto +97 0 rlineto +62 32 rlineto +closepath +75 47 rmoveto +-66 72 rlineto +-110 0 rlineto +112 -72 rlineto +64 0 rlineto +closepath +endchar } ND +/acircumflexgrave { +0 556 hsbw +-12 69 hstem +458 72 hstem +668 48 hstem +755 135 hstem +44 88 vstem +211 91 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-205 319 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +193 173 rmoveto +69 0 rlineto +-57 135 rlineto +-107 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/Acircumflexhookabove { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +775 28 hstem +869 25 hstem +-20 105 vstem +379 20 vstem +428 46 vstem +524 93 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +208 495 rmoveto +44 -32 rlineto +96 0 rlineto +-93 60 rlineto +-91 0 rlineto +-115 -60 rlineto +97 0 rlineto +62 32 rlineto +closepath +4 59 rmoveto +-19 -1 rlineto +-6 -21 rlineto +46 0 rlineto +2 6 rlineto +56 4 30 12 4 20 rrcurveto +4 26 -41 14 -85 0 rrcurveto +-65 0 rlineto +0 -29 rlineto +7 1 6 1 7 2 rrcurveto +22 0 rlineto +27 0 19 -2 12 -4 rrcurveto +8 -4 4 -3 -1 -4 rrcurveto +-2 -8 -9 -5 -16 -3 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/acircumflexhookabove { +0 556 hsbw +-12 69 hstem +458 72 hstem +668 48 hstem +854 40 hstem +44 88 vstem +211 91 vstem +366 55 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-205 319 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +195 214 rmoveto +-29 -3 rlineto +-11 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 49 25 0 39 rrcurveto +0 36 -69 19 -58 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-4 -11 -10 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Acircumflextilde { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +775 28 hstem +820 75 hstem +-20 105 vstem +296 50 410 86 561 48 vstem3 +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +208 495 rmoveto +44 -32 rlineto +96 0 rlineto +-93 60 rlineto +-91 0 rlineto +-115 -60 rlineto +97 0 rlineto +62 32 rlineto +closepath +-153 43 rmoveto +49 0 rlineto +4 24 14 13 26 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +30 -14 26 -7 21 0 rrcurveto +52 0 32 25 14 50 rrcurveto +-48 0 rlineto +-9 -25 -14 -12 -20 0 rrcurveto +-12 0 -15 4 -16 8 rrcurveto +-33 16 -26 8 -20 0 rrcurveto +-59 0 -32 -28 -9 -48 rrcurveto +closepath +endchar } ND +/acircumflextilde { +0 556 hsbw +-12 69 hstem +458 72 hstem +668 48 hstem +756 68 hstem +44 88 vstem +227 61 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-205 319 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +16 175 rmoveto +61 0 rlineto +5 27 13 14 22 0 rrcurveto +10 0 27 -10 46 -19 rrcurveto +20 -8 15 -5 14 0 rrcurveto +50 0 40 41 7 66 rrcurveto +-59 0 rlineto +-8 -26 -11 -13 -16 0 rrcurveto +-10 0 -17 6 -25 12 rrcurveto +-38 16 -28 8 -19 0 rrcurveto +-64 0 -18 -40 -17 -69 rrcurveto +closepath +endchar } ND +/Acircumflexdotbelow { +0 667 hsbw +-159 100 hstem +0 20 hstem +206 74 hstem +638 78 hstem +775 28 hstem +-20 105 vstem +295 103 415 87 524 93 vstem3 +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +214 495 rmoveto +44 -32 rlineto +96 0 rlineto +-93 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +62 32 rlineto +closepath +-232 -934 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/acircumflexdotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +458 72 hstem +668 48 hstem +44 88 vstem +211 91 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-205 319 rmoveto +91 0 rlineto +80 86 rlineto +39 -86 rlineto +78 0 rlineto +-61 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +-37 -741 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Abreveacute { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +728 166 hstem +-20 105 vstem +324 38 vstem +406 64 vstem +570 38 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +83 514 rmoveto +9 -44 62 -22 56 0 rrcurveto +64 0 58 22 35 44 rrcurveto +-38 0 rlineto +-25 -22 -49 -9 -38 0 rrcurveto +-44 0 -43 8 -9 23 rrcurveto +-38 0 rlineto +closepath +148 100 rmoveto +-66 -72 rlineto +64 0 rlineto +113 72 rlineto +-111 0 rlineto +closepath +endchar } ND +/abreveacute { +0 556 hsbw +-12 69 hstem +458 72 hstem +567 127 hstem +870 20 hstem +44 88 vstem +226 57 vstem +329 73 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-190 431 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +103 61 rmoveto +73 0 rlineto +130 135 rlineto +-111 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/Abrevegrave { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +728 166 hstem +-20 105 vstem +324 38 vstem +460 64 vstem +570 38 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +83 514 rmoveto +9 -44 62 -22 56 0 rrcurveto +64 0 58 22 35 44 rrcurveto +-38 0 rlineto +-25 -22 -49 -9 -38 0 rrcurveto +-44 0 -43 8 -9 23 rrcurveto +-38 0 rlineto +closepath +200 28 rmoveto +-66 72 rlineto +-110 0 rlineto +112 -72 rlineto +64 0 rlineto +closepath +endchar } ND +/abrevegrave { +0 556 hsbw +-12 69 hstem +458 72 hstem +567 127 hstem +755 135 hstem +44 88 vstem +226 57 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-190 431 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +165 61 rmoveto +68 0 rlineto +-56 135 rlineto +-108 0 rlineto +96 -135 rlineto +closepath +endchar } ND +/Abrevehookabove { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +728 35 hstem +869 25 hstem +-20 105 vstem +324 38 445 42 570 38 vstem3 +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +83 514 rmoveto +9 -44 62 -22 56 0 rrcurveto +64 0 58 22 35 44 rrcurveto +-38 0 rlineto +-25 -22 -49 -9 -38 0 rrcurveto +-44 0 -43 8 -9 23 rrcurveto +-38 0 rlineto +closepath +142 40 rmoveto +-19 -1 rlineto +-6 -21 rlineto +46 0 rlineto +2 6 rlineto +56 4 30 12 4 20 rrcurveto +4 26 -41 14 -84 0 rrcurveto +-66 0 rlineto +0 -25 rlineto +42 0 rlineto +27 0 20 -2 12 -4 rrcurveto +8 -4 3 -3 -1 -4 rrcurveto +-2 -8 -9 -5 -16 -3 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/abrevehookabove { +0 556 hsbw +-12 69 hstem +458 72 hstem +567 127 hstem +854 40 hstem +44 88 vstem +226 57 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-190 431 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +170 102 rmoveto +-28 -3 rlineto +-12 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 50 25 0 39 rrcurveto +0 35 -69 20 -58 0 rrcurveto +-34 0 -24 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-3 -11 -11 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Abrevetilde { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +728 35 hstem +820 75 hstem +-20 105 vstem +324 38 vstem +386 113 vstem +570 38 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +83 514 rmoveto +9 -44 62 -22 56 0 rrcurveto +64 0 58 22 35 44 rrcurveto +-38 0 rlineto +-25 -22 -49 -9 -38 0 rrcurveto +-44 0 -43 8 -9 23 rrcurveto +-38 0 rlineto +closepath +1 24 rmoveto +49 0 rlineto +4 24 14 13 26 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +31 -14 26 -7 21 0 rrcurveto +51 0 33 25 14 50 rrcurveto +-49 0 rlineto +-9 -25 -14 -12 -20 0 rrcurveto +-11 0 -14 4 -18 8 rrcurveto +-33 15 -26 9 -20 0 rrcurveto +-59 0 -31 -28 -10 -48 rrcurveto +closepath +endchar } ND +/abrevetilde { +0 556 hsbw +-12 69 hstem +458 72 hstem +567 127 hstem +756 68 hstem +44 88 vstem +226 57 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-190 431 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +1 63 rmoveto +61 0 rlineto +5 27 13 14 22 0 rrcurveto +10 0 27 -10 46 -19 rrcurveto +20 -8 15 -5 14 0 rrcurveto +50 0 40 41 7 66 rrcurveto +-59 0 rlineto +-8 -26 -11 -13 -16 0 rrcurveto +-10 0 -17 6 -25 12 rrcurveto +-38 16 -28 8 -19 0 rrcurveto +-64 0 -18 -40 -17 -69 rrcurveto +closepath +endchar } ND +/Abrevedotbelow { +0 667 hsbw +-159 100 hstem +0 20 hstem +206 74 hstem +638 78 hstem +721 34 hstem +-20 105 vstem +223 99 vstem +324 38 vstem +386 113 vstem +570 38 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +83 507 rmoveto +9 -43 61 -23 57 0 rrcurveto +64 0 58 22 35 44 rrcurveto +-38 0 rlineto +-25 -22 -49 -10 -38 0 rrcurveto +-44 0 -43 9 -9 23 rrcurveto +-38 0 rlineto +closepath +-101 -946 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/abrevedotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +458 72 hstem +567 127 hstem +44 88 vstem +226 57 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +-190 431 rmoveto +4 -78 51 -49 75 0 rrcurveto +77 0 62 49 23 78 rrcurveto +-59 0 rlineto +-18 -43 -34 -25 -48 0 rrcurveto +-44 0 -24 21 -8 47 rrcurveto +-57 0 rlineto +closepath +-52 -853 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Edotbelow { +0 667 hsbw +-159 100 hstem +0 81 hstem +330 82 hstem +634 82 hstem +252 100 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +207 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/edotbelow { +0 556 hsbw +-159 100 hstem +-12 73 hstem +237 68 hstem +461 69 hstem +52 89 vstem +174 99 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +17 -464 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ehookabove { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +854 40 hstem +390 198 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +420 796 rmoveto +-29 -3 rlineto +-11 -39 rlineto +54 0 rlineto +5 15 rlineto +55 6 49 24 0 40 rrcurveto +0 36 -69 19 -58 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -11 -5 -19 rrcurveto +-3 -12 -10 -7 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/ehookabove { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +703 51 hstem +52 89 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +191 338 rmoveto +-29 -3 rlineto +-11 -58 rlineto +55 0 rlineto +5 24 rlineto +54 6 49 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-4 -13 -10 -9 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Etilde { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +758 68 hstem +299 61 vstem +570 59 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +254 758 rmoveto +61 0 rlineto +5 29 15 13 20 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/etilde { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +639 68 hstem +52 89 vstem +182 61 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +25 292 rmoveto +61 0 rlineto +5 29 15 13 20 0 rrcurveto +10 0 27 -10 46 -20 rrcurveto +19 -8 17 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/Ecircumflexacute { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +743 151 hstem +304 99 425 59 507 97 vstem3 +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +418 775 rmoveto +44 -32 rlineto +97 0 rlineto +-93 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +24 119 rmoveto +-66 -72 rlineto +63 0 rlineto +113 72 rlineto +-110 0 rlineto +closepath +endchar } ND +/ecircumflexacute { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +668 48 hstem +870 20 hstem +52 89 vstem +217 99 348 61 449 83 vstem3 +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +60 277 rmoveto +91 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +118 173 rmoveto +74 0 rlineto +130 135 rlineto +-112 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/Ecircumflexgrave { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +775 119 hstem +304 98 vstem +475 64 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +418 775 rmoveto +44 -32 rlineto +97 0 rlineto +-93 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +76 47 rmoveto +-66 72 rlineto +-111 0 rlineto +113 -72 rlineto +64 0 rlineto +closepath +endchar } ND +/ecircumflexgrave { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +668 48 hstem +755 135 hstem +52 89 vstem +217 91 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +60 277 rmoveto +91 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +193 173 rmoveto +69 0 rlineto +-57 135 rlineto +-107 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/Ecircumflexhookabove { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +775 28 hstem +869 25 hstem +304 98 vstem +443 45 vstem +507 97 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +418 775 rmoveto +44 -32 rlineto +97 0 rlineto +-93 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +5 59 rmoveto +-19 -1 rlineto +-6 -21 rlineto +45 0 rlineto +2 6 rlineto +57 4 30 12 4 20 rrcurveto +4 26 -41 14 -85 0 rrcurveto +-65 0 rlineto +0 -25 rlineto +42 0 rlineto +34 0 35 1 0 -18 rrcurveto +-2 -8 -9 -5 -16 -3 rrcurveto +-10 -2 rlineto +closepath +endchar } ND +/ecircumflexhookabove { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +668 48 hstem +854 40 hstem +52 89 vstem +217 91 vstem +376 55 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +60 277 rmoveto +91 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +199 214 rmoveto +-29 -3 rlineto +-11 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 49 25 0 39 rrcurveto +0 36 -69 19 -58 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-4 -11 -10 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Ecircumflextilde { +0 667 hsbw +0 81 hstem +330 82 hstem +634 82 hstem +775 28 hstem +820 75 hstem +315 49 vstem +420 91 vstem +580 49 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +418 775 rmoveto +44 -32 rlineto +97 0 rlineto +-93 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +-148 43 rmoveto +49 0 rlineto +4 24 15 13 26 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +30 -14 26 -7 21 0 rrcurveto +51 0 33 25 14 50 rrcurveto +-49 0 rlineto +-9 -25 -14 -12 -19 0 rrcurveto +-12 0 -14 4 -18 8 rrcurveto +-33 15 -25 9 -20 0 rrcurveto +-59 0 -32 -28 -10 -48 rrcurveto +closepath +endchar } ND +/ecircumflextilde { +0 556 hsbw +-12 73 hstem +237 68 hstem +461 69 hstem +668 48 hstem +756 68 hstem +52 89 vstem +227 61 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +60 277 rmoveto +91 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +10 175 rmoveto +61 0 rlineto +5 27 13 14 22 0 rrcurveto +10 0 27 -10 46 -19 rrcurveto +20 -8 15 -5 14 0 rrcurveto +50 0 40 41 7 66 rrcurveto +-59 0 rlineto +-8 -26 -11 -13 -16 0 rrcurveto +-10 0 -17 6 -25 12 rrcurveto +-38 16 -28 8 -19 0 rrcurveto +-64 0 -18 -40 -17 -69 rrcurveto +closepath +endchar } ND +/Ecircumflexdotbelow { +0 667 hsbw +-159 100 hstem +0 81 hstem +330 82 hstem +634 82 hstem +775 28 hstem +304 98 vstem +420 91 vstem +45 0 rmoveto +546 0 rlineto +17 81 rlineto +-450 0 rlineto +51 249 rlineto +411 0 rlineto +17 82 rlineto +-410 0 rlineto +46 222 rlineto +421 0 rlineto +17 82 rlineto +-516 0 rlineto +-150 -716 rlineto +closepath +418 775 rmoveto +44 -32 rlineto +97 0 rlineto +-93 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +-211 -934 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/ecircumflexdotbelow { +0 556 hsbw +-159 100 hstem +-12 73 hstem +237 68 hstem +461 69 hstem +668 48 hstem +52 89 vstem +217 91 vstem +449 83 vstem +414 176 rmoveto +-32 -75 -65 -40 -61 0 rrcurveto +-64 0 -51 51 0 98 rrcurveto +0 27 rlineto +384 0 rlineto +4 26 3 26 0 26 rrcurveto +0 133 -80 82 -124 0 rrcurveto +-161 0 -115 -167 0 -155 rrcurveto +0 -124 86 -96 118 0 rrcurveto +122 0 96 95 26 84 rrcurveto +-86 9 rlineto +closepath +-257 129 rmoveto +30 104 67 52 76 0 rrcurveto +69 0 50 -48 0 -89 rrcurveto +0 -19 rlineto +-292 0 rlineto +closepath +60 277 rmoveto +91 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-61 134 rlineto +-97 0 rlineto +-130 -134 rlineto +closepath +-43 -741 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ihookabove { +0 278 hsbw +0 20 hstem +696 20 hstem +854 40 hstem +57 96 vstem +197 198 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +215 796 rmoveto +-29 -3 rlineto +-11 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 49 25 0 39 rrcurveto +0 36 -69 19 -58 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-4 -11 -10 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/ihookabove { +0 222 hsbw +0 20 hstem +499 20 hstem +703 51 hstem +30 88 vstem +126 199 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +172 643 rmoveto +-29 -3 rlineto +-11 -58 rlineto +54 0 rlineto +5 24 rlineto +54 6 50 29 0 47 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -14 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +54 0 24 -9 -5 -21 rrcurveto +-3 -12 -11 -10 -18 -5 rrcurveto +-7 -3 rlineto +closepath +endchar } ND +/Idotbelow { +0 278 hsbw +-159 100 hstem +0 20 hstem +696 20 hstem +57 96 vstem +207 95 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +-30 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/idotbelow { +0 222 hsbw +-159 100 hstem +0 20 hstem +499 20 hstem +616 100 hstem +30 88 vstem +159 88 vstem +159 616 rmoveto +88 0 rlineto +21 100 rlineto +-88 0 rlineto +-21 -100 rlineto +closepath +-129 -616 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +-42 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Odotbelow { +0 778 hsbw +-159 100 hstem +-12 79 hstem +648 80 hstem +91 95 vstem +311 99 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +125 -454 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/odotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +462 68 hstem +49 88 vstem +174 99 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +37 -365 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ohookabove { +0 778 hsbw +-12 79 hstem +648 80 hstem +854 40 hstem +91 95 vstem +409 198 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +298 501 rmoveto +-28 -3 rlineto +-12 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 49 25 0 39 rrcurveto +0 36 -68 19 -59 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-3 -11 -11 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/ohookabove { +0 556 hsbw +-12 69 hstem +462 68 hstem +703 51 hstem +49 88 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +226 437 rmoveto +-29 -3 rlineto +-11 -58 rlineto +54 0 rlineto +5 24 rlineto +56 6 48 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +53 0 24 -9 -5 -21 rrcurveto +-3 -12 -10 -10 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Ocircumflexacute { +0 778 hsbw +-12 79 hstem +648 80 hstem +743 151 hstem +91 95 vstem +335 100 456 59 538 96 vstem3 +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +308 480 rmoveto +44 -32 rlineto +96 0 rlineto +-92 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +24 119 rmoveto +-66 -72 rlineto +63 0 rlineto +113 72 rlineto +-110 0 rlineto +closepath +endchar } ND +/ocircumflexacute { +0 556 hsbw +-12 69 hstem +462 68 hstem +668 48 hstem +870 20 hstem +49 88 vstem +202 90 vstem +320 73 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +65 376 rmoveto +90 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +118 173 rmoveto +73 0 rlineto +130 135 rlineto +-111 0 rlineto +-92 -135 rlineto +closepath +endchar } ND +/Ocircumflexgrave { +0 778 hsbw +-12 79 hstem +648 80 hstem +775 119 hstem +91 95 vstem +335 98 vstem +506 63 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +308 480 rmoveto +44 -32 rlineto +96 0 rlineto +-92 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +75 47 rmoveto +-66 72 rlineto +-110 0 rlineto +113 -72 rlineto +63 0 rlineto +closepath +endchar } ND +/ocircumflexgrave { +0 556 hsbw +-12 69 hstem +462 68 hstem +668 48 hstem +755 135 hstem +49 88 vstem +202 90 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +65 376 rmoveto +90 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +193 173 rmoveto +68 0 rlineto +-56 135 rlineto +-108 0 rlineto +96 -135 rlineto +closepath +endchar } ND +/Ocircumflexhookabove { +0 778 hsbw +-12 79 hstem +648 80 hstem +775 28 hstem +869 25 hstem +91 95 vstem +335 98 vstem +474 45 vstem +538 96 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +308 480 rmoveto +44 -32 rlineto +96 0 rlineto +-92 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +5 59 rmoveto +-20 -1 rlineto +-5 -21 rlineto +45 0 rlineto +2 6 rlineto +56 4 30 12 4 20 rrcurveto +4 26 -40 14 -85 0 rrcurveto +-66 0 rlineto +0 -25 rlineto +42 0 rlineto +33 0 37 2 0 -19 rrcurveto +-2 -8 -10 -5 -16 -3 rrcurveto +-9 -2 rlineto +closepath +endchar } ND +/ocircumflexhookabove { +0 556 hsbw +-12 69 hstem +462 68 hstem +668 48 hstem +854 40 hstem +49 88 vstem +202 90 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +65 376 rmoveto +90 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +194 214 rmoveto +-28 -3 rlineto +-12 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 50 25 0 39 rrcurveto +0 35 -69 20 -58 0 rrcurveto +-34 0 -24 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-3 -11 -11 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Ocircumflextilde { +0 778 hsbw +-12 79 hstem +648 80 hstem +775 28 hstem +820 75 hstem +91 95 vstem +350 48 vstem +451 91 vstem +614 49 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +308 480 rmoveto +44 -32 rlineto +96 0 rlineto +-92 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +-144 43 rmoveto +48 0 rlineto +4 24 15 13 26 0 rrcurveto +10 0 15 -5 20 -9 rrcurveto +30 -14 26 -7 21 0 rrcurveto +52 0 32 25 14 50 rrcurveto +-49 0 rlineto +-8 -25 -14 -12 -20 0 rrcurveto +-12 0 -14 4 -18 8 rrcurveto +-33 15 -25 9 -20 0 rrcurveto +-59 0 -32 -28 -9 -48 rrcurveto +closepath +endchar } ND +/ocircumflextilde { +0 556 hsbw +-12 69 hstem +462 68 hstem +668 48 hstem +756 68 hstem +49 88 vstem +227 61 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +65 376 rmoveto +90 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +25 175 rmoveto +61 0 rlineto +5 27 13 14 22 0 rrcurveto +10 0 27 -10 46 -19 rrcurveto +20 -8 15 -5 14 0 rrcurveto +50 0 40 41 7 66 rrcurveto +-59 0 rlineto +-8 -26 -11 -13 -16 0 rrcurveto +-10 0 -17 6 -25 12 rrcurveto +-38 16 -28 8 -19 0 rrcurveto +-64 0 -18 -40 -17 -69 rrcurveto +closepath +endchar } ND +/Ocircumflexdotbelow { +0 778 hsbw +-159 100 hstem +-12 79 hstem +648 80 hstem +797 28 hstem +91 95 vstem +335 98 vstem +451 91 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +308 502 rmoveto +44 -32 rlineto +96 0 rlineto +-92 60 rlineto +-91 0 rlineto +-116 -60 rlineto +98 0 rlineto +61 32 rlineto +closepath +-183 -956 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/ocircumflexdotbelow { +0 556 hsbw +-159 100 hstem +-12 69 hstem +462 68 hstem +668 48 hstem +49 88 vstem +202 90 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +65 376 rmoveto +90 0 rlineto +81 86 rlineto +39 -86 rlineto +77 0 rlineto +-60 134 rlineto +-98 0 rlineto +-129 -134 rlineto +closepath +-28 -741 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ohornacute { +0 812 hsbw +-12 79 hstem +648 80 hstem +874 20 hstem +91 95 vstem +401 73 vstem +493 111 vstem +677 91 vstem +798 100 vstem +186 295 rmoveto +0 189 113 164 171 0 rrcurveto +124 0 83 -100 0 -133 rrcurveto +0 -166 -118 -182 -161 0 rrcurveto +-117 0 -95 93 0 135 rrcurveto +closepath +591 321 rmoveto +55 0 rlineto +-12 -58 -24 -35 -36 -12 rrcurveto +-37 130 -109 87 -144 0 rrcurveto +-226 0 -153 -191 0 -237 rrcurveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 24 -2 22 -2 22 rrcurveto +57 16 37 51 18 86 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-376 144 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/ohornacute { +0 604 hsbw +-12 69 hstem +462 68 hstem +696 20 hstem +49 88 vstem +276 74 vstem +453 87 vstem +578 100 vstem +137 206 rmoveto +0 130 76 126 115 0 rrcurveto +77 0 48 -63 0 -85 rrcurveto +0 -108 -74 -149 -117 0 rrcurveto +-83 0 -42 61 0 88 rrcurveto +closepath +420 212 rmoveto +54 0 rlineto +-12 -57 -23 -35 -36 -12 rrcurveto +0 132 -83 84 -125 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +0 -124 80 -85 132 0 rrcurveto +148 0 115 138 15 150 rrcurveto +62 12 40 52 19 91 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-281 164 rmoveto +74 0 rlineto +129 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/Ohorngrave { +0 812 hsbw +-12 79 hstem +648 80 hstem +760 135 hstem +91 95 vstem +510 69 vstem +677 91 vstem +798 100 vstem +186 295 rmoveto +0 189 113 164 171 0 rrcurveto +124 0 83 -100 0 -133 rrcurveto +0 -166 -118 -182 -161 0 rrcurveto +-117 0 -95 93 0 135 rrcurveto +closepath +591 321 rmoveto +55 0 rlineto +-12 -58 -24 -35 -36 -12 rrcurveto +-37 130 -109 87 -144 0 rrcurveto +-226 0 -153 -191 0 -237 rrcurveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 24 -2 22 -2 22 rrcurveto +57 16 37 51 18 86 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-267 144 rmoveto +69 0 rlineto +-57 135 rlineto +-107 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/ohorngrave { +0 604 hsbw +-12 69 hstem +462 68 hstem +582 134 hstem +49 88 vstem +376 69 vstem +453 87 vstem +578 100 vstem +137 206 rmoveto +0 130 76 126 115 0 rrcurveto +77 0 48 -63 0 -85 rrcurveto +0 -108 -74 -149 -117 0 rrcurveto +-83 0 -42 61 0 88 rrcurveto +closepath +420 212 rmoveto +54 0 rlineto +-12 -57 -23 -35 -36 -12 rrcurveto +0 132 -83 84 -125 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +0 -124 80 -85 132 0 rrcurveto +148 0 115 138 15 150 rrcurveto +62 12 40 52 19 91 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-181 164 rmoveto +69 0 rlineto +-56 134 rlineto +-108 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/Ohornhookabove { +0 812 hsbw +-12 79 hstem +648 80 hstem +871 40 hstem +91 95 vstem +409 198 vstem +677 91 vstem +798 100 vstem +186 295 rmoveto +0 189 113 164 171 0 rrcurveto +124 0 83 -100 0 -133 rrcurveto +0 -166 -118 -182 -161 0 rrcurveto +-117 0 -95 93 0 135 rrcurveto +closepath +591 321 rmoveto +55 0 rlineto +-12 -58 -24 -35 -36 -12 rrcurveto +-37 130 -109 87 -144 0 rrcurveto +-226 0 -153 -191 0 -237 rrcurveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 24 -2 22 -2 22 rrcurveto +57 16 37 51 18 86 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-293 197 rmoveto +-28 -2 rlineto +-12 -40 rlineto +55 0 rlineto +5 15 rlineto +53 6 50 24 0 40 rrcurveto +0 36 -68 19 -59 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-3 -11 -11 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/ohornhookabove { +0 604 hsbw +-12 69 hstem +462 68 hstem +703 51 hstem +49 88 vstem +453 87 vstem +578 100 vstem +137 206 rmoveto +0 130 76 126 115 0 rrcurveto +77 0 48 -63 0 -85 rrcurveto +0 -108 -74 -149 -117 0 rrcurveto +-83 0 -42 61 0 88 rrcurveto +closepath +420 212 rmoveto +54 0 rlineto +-12 -57 -23 -35 -36 -12 rrcurveto +0 132 -83 84 -125 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +0 -124 80 -85 132 0 rrcurveto +148 0 115 138 15 150 rrcurveto +62 12 40 52 19 91 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-194 225 rmoveto +-29 -3 rlineto +-11 -58 rlineto +54 0 rlineto +5 24 rlineto +56 6 48 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +53 0 24 -9 -5 -21 rrcurveto +-3 -12 -10 -10 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Ohorntilde { +0 812 hsbw +-12 79 hstem +648 80 hstem +758 68 hstem +91 95 vstem +318 61 vstem +589 59 vstem +677 91 vstem +798 100 vstem +186 295 rmoveto +0 189 113 164 171 0 rrcurveto +124 0 83 -100 0 -133 rrcurveto +0 -166 -118 -182 -161 0 rrcurveto +-117 0 -95 93 0 135 rrcurveto +closepath +591 321 rmoveto +55 0 rlineto +-12 -58 -24 -35 -36 -12 rrcurveto +-37 130 -109 87 -144 0 rrcurveto +-226 0 -153 -191 0 -237 rrcurveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 24 -2 22 -2 22 rrcurveto +57 16 37 51 18 86 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-459 142 rmoveto +61 0 rlineto +6 29 13 13 22 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 13 0 rrcurveto +48 0 42 39 6 68 rrcurveto +-59 0 rlineto +-8 -31 -12 -8 -14 0 rrcurveto +-10 0 -16 5 -27 12 rrcurveto +-38 17 -17 8 -30 0 rrcurveto +-47 0 -31 -24 -21 -86 rrcurveto +closepath +endchar } ND +/ohorntilde { +0 604 hsbw +-12 69 hstem +462 68 hstem +639 68 hstem +49 88 vstem +182 61 vstem +453 87 vstem +578 100 vstem +137 206 rmoveto +0 130 76 126 115 0 rrcurveto +77 0 48 -63 0 -85 rrcurveto +0 -108 -74 -149 -117 0 rrcurveto +-83 0 -42 61 0 88 rrcurveto +closepath +420 212 rmoveto +54 0 rlineto +-12 -57 -23 -35 -36 -12 rrcurveto +0 132 -83 84 -125 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +0 -124 80 -85 132 0 rrcurveto +148 0 115 138 15 150 rrcurveto +62 12 40 52 19 91 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-375 179 rmoveto +61 0 rlineto +5 29 15 13 20 0 rrcurveto +10 0 27 -10 46 -20 rrcurveto +19 -8 17 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/Ohorndotbelow { +0 812 hsbw +-159 100 hstem +-12 79 hstem +648 80 hstem +91 95 vstem +315 100 vstem +677 91 vstem +798 100 vstem +186 295 rmoveto +0 189 113 164 171 0 rrcurveto +124 0 83 -100 0 -133 rrcurveto +0 -166 -118 -182 -161 0 rrcurveto +-117 0 -95 93 0 135 rrcurveto +closepath +591 321 rmoveto +55 0 rlineto +-12 -58 -24 -35 -36 -12 rrcurveto +-37 130 -109 87 -144 0 rrcurveto +-226 0 -153 -191 0 -237 rrcurveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 24 -2 22 -2 22 rrcurveto +57 16 37 51 18 86 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-462 -775 rmoveto +100 0 rlineto +22 100 rlineto +-101 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/ohorndotbelow { +0 604 hsbw +-159 100 hstem +-12 69 hstem +462 68 hstem +49 88 vstem +174 99 vstem +453 87 vstem +578 100 vstem +137 206 rmoveto +0 130 76 126 115 0 rrcurveto +77 0 48 -63 0 -85 rrcurveto +0 -108 -74 -149 -117 0 rrcurveto +-83 0 -42 61 0 88 rrcurveto +closepath +420 212 rmoveto +54 0 rlineto +-12 -57 -23 -35 -36 -12 rrcurveto +0 132 -83 84 -125 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +0 -124 80 -85 132 0 rrcurveto +148 0 115 138 15 150 rrcurveto +62 12 40 52 19 91 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-383 -577 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Udotbelow { +0 722 hsbw +-159 100 hstem +-13 80 hstem +696 20 hstem +97 94 vstem +198 96 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +54 -875 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/udotbelow { +0 556 hsbw +-159 100 hstem +-12 73 hstem +499 20 hstem +63 89 vstem +166 100 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-242 -253 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Uhookabove { +0 722 hsbw +-13 80 hstem +696 20 hstem +854 40 hstem +97 94 vstem +198 96 vstem +409 198 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +286 80 rmoveto +-28 -3 rlineto +-12 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 49 25 0 39 rrcurveto +0 36 -68 19 -59 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-3 -11 -11 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/uhookabove { +0 556 hsbw +-12 73 hstem +499 20 hstem +703 51 hstem +63 89 vstem +288 198 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-24 549 rmoveto +-29 -3 rlineto +-11 -58 rlineto +54 0 rlineto +5 24 rlineto +56 6 48 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +53 0 24 -9 -5 -21 rrcurveto +-3 -12 -10 -10 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Uhornacute { +0 793 hsbw +-13 80 hstem +616 100 hstem +874 20 hstem +97 94 vstem +198 96 vstem +413 73 vstem +505 111 vstem +659 95 vstem +821 100 vstem +800 616 rmoveto +54 0 rlineto +-19 -87 -39 -30 -87 0 rrcurveto +45 217 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -49 -90 -142 0 rrcurveto +-94 0 -66 52 0 76 rrcurveto +0 18 3 27 8 36 rrcurveto +92 440 rlineto +-96 0 rlineto +-81 -391 rlineto +-14 -64 -6 -43 0 -22 rrcurveto +0 -133 100 -76 158 0 rrcurveto +174 0 99 118 39 191 rrcurveto +34 164 rlineto +123 3 53 36 26 129 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-387 144 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/uhornacute { +0 634 hsbw +-12 73 hstem +418 101 hstem +696 20 hstem +63 89 vstem +286 73 vstem +368 81 vstem +469 89 vstem +621 100 vstem +600 418 rmoveto +54 0 rlineto +-19 -84 -39 -32 -84 0 rrcurveto +46 217 rlineto +-89 0 rlineto +-47 -225 rlineto +-31 -152 -56 -81 -113 0 rrcurveto +-47 0 -23 20 0 42 rrcurveto +0 14 3 22 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -68 54 -51 79 0 rrcurveto +65 0 64 35 62 71 rrcurveto +-19 -94 rlineto +81 0 rlineto +55 263 rlineto +120 3 53 37 26 128 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-314 164 rmoveto +73 0 rlineto +130 134 rlineto +-112 0 rlineto +-91 -134 rlineto +closepath +endchar } ND +/Uhorngrave { +0 793 hsbw +-13 80 hstem +616 100 hstem +760 135 hstem +97 94 vstem +198 96 vstem +485 69 vstem +659 95 vstem +821 100 vstem +800 616 rmoveto +54 0 rlineto +-19 -87 -39 -30 -87 0 rrcurveto +45 217 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -49 -90 -142 0 rrcurveto +-94 0 -66 52 0 76 rrcurveto +0 18 3 27 8 36 rrcurveto +92 440 rlineto +-96 0 rlineto +-81 -391 rlineto +-14 -64 -6 -43 0 -22 rrcurveto +0 -133 100 -76 158 0 rrcurveto +174 0 99 118 39 191 rrcurveto +34 164 rlineto +123 3 53 36 26 129 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-315 144 rmoveto +69 0 rlineto +-56 135 rlineto +-108 0 rlineto +95 -135 rlineto +closepath +endchar } ND +/uhorngrave { +0 634 hsbw +-12 73 hstem +418 101 hstem +582 134 hstem +63 89 vstem +347 69 vstem +469 89 vstem +621 100 vstem +600 418 rmoveto +54 0 rlineto +-19 -84 -39 -32 -84 0 rrcurveto +46 217 rlineto +-89 0 rlineto +-47 -225 rlineto +-31 -152 -56 -81 -113 0 rrcurveto +-47 0 -23 20 0 42 rrcurveto +0 14 3 22 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -68 54 -51 79 0 rrcurveto +65 0 64 35 62 71 rrcurveto +-19 -94 rlineto +81 0 rlineto +55 263 rlineto +120 3 53 37 26 128 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-253 164 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/Uhornhookabove { +0 793 hsbw +-13 80 hstem +616 100 hstem +854 40 hstem +97 94 vstem +198 96 vstem +409 198 vstem +659 95 vstem +821 100 vstem +800 616 rmoveto +54 0 rlineto +-19 -87 -39 -30 -87 0 rrcurveto +45 217 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -49 -90 -142 0 rrcurveto +-94 0 -66 52 0 76 rrcurveto +0 18 3 27 8 36 rrcurveto +92 440 rlineto +-96 0 rlineto +-81 -391 rlineto +-14 -64 -6 -43 0 -22 rrcurveto +0 -133 100 -76 158 0 rrcurveto +174 0 99 118 39 191 rrcurveto +34 164 rlineto +123 3 53 36 26 129 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-316 180 rmoveto +-28 -3 rlineto +-12 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 49 25 0 39 rrcurveto +0 36 -68 19 -59 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-3 -11 -11 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/uhornhookabove { +0 634 hsbw +-12 73 hstem +418 101 hstem +703 51 hstem +63 89 vstem +288 198 vstem +621 100 vstem +600 418 rmoveto +54 0 rlineto +-19 -84 -39 -32 -84 0 rrcurveto +46 217 rlineto +-89 0 rlineto +-47 -225 rlineto +-31 -152 -56 -81 -113 0 rrcurveto +-47 0 -23 20 0 42 rrcurveto +0 14 3 22 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -68 54 -51 79 0 rrcurveto +65 0 64 35 62 71 rrcurveto +-19 -94 rlineto +81 0 rlineto +55 263 rlineto +120 3 53 37 26 128 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-237 225 rmoveto +-29 -3 rlineto +-11 -58 rlineto +54 0 rlineto +5 24 rlineto +56 6 48 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +53 0 24 -9 -5 -21 rrcurveto +-3 -12 -10 -10 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Uhorntilde { +0 793 hsbw +-13 80 hstem +616 100 hstem +758 68 hstem +97 94 vstem +198 96 vstem +328 61 vstem +599 59 vstem +659 95 vstem +821 100 vstem +800 616 rmoveto +54 0 rlineto +-19 -87 -39 -30 -87 0 rrcurveto +45 217 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -49 -90 -142 0 rrcurveto +-94 0 -66 52 0 76 rrcurveto +0 18 3 27 8 36 rrcurveto +92 440 rlineto +-96 0 rlineto +-81 -391 rlineto +-14 -64 -6 -43 0 -22 rrcurveto +0 -133 100 -76 158 0 rrcurveto +174 0 99 118 39 191 rrcurveto +34 164 rlineto +123 3 53 36 26 129 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-472 142 rmoveto +61 0 rlineto +6 29 13 13 22 0 rrcurveto +10 0 27 -10 46 -19 rrcurveto +20 -8 15 -5 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -11 -8 -16 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-47 0 -31 -24 -21 -86 rrcurveto +closepath +endchar } ND +/uhorntilde { +0 634 hsbw +-12 73 hstem +418 101 hstem +639 68 hstem +63 89 vstem +211 61 vstem +368 81 vstem +482 59 vstem +621 100 vstem +600 418 rmoveto +54 0 rlineto +-19 -84 -39 -32 -84 0 rrcurveto +46 217 rlineto +-89 0 rlineto +-47 -225 rlineto +-31 -152 -56 -81 -113 0 rrcurveto +-47 0 -23 20 0 42 rrcurveto +0 14 3 22 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -68 54 -51 79 0 rrcurveto +65 0 64 35 62 71 rrcurveto +-19 -94 rlineto +81 0 rlineto +55 263 rlineto +120 3 53 37 26 128 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-389 179 rmoveto +61 0 rlineto +5 29 14 13 22 0 rrcurveto +10 0 27 -10 46 -20 rrcurveto +19 -8 16 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/Uhorndotbelow { +0 793 hsbw +-159 100 hstem +-13 80 hstem +616 100 hstem +97 94 vstem +198 96 vstem +659 95 vstem +821 100 vstem +800 616 rmoveto +54 0 rlineto +-19 -87 -39 -30 -87 0 rrcurveto +45 217 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -49 -90 -142 0 rrcurveto +-94 0 -66 52 0 76 rrcurveto +0 18 3 27 8 36 rrcurveto +92 440 rlineto +-96 0 rlineto +-81 -391 rlineto +-14 -64 -6 -43 0 -22 rrcurveto +0 -133 100 -76 158 0 rrcurveto +174 0 99 118 39 191 rrcurveto +34 164 rlineto +123 3 53 36 26 129 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +-548 -775 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/uhorndotbelow { +0 634 hsbw +-159 100 hstem +-12 73 hstem +418 101 hstem +63 89 vstem +166 100 vstem +368 81 vstem +469 89 vstem +621 100 vstem +600 418 rmoveto +54 0 rlineto +-19 -84 -39 -32 -84 0 rrcurveto +46 217 rlineto +-89 0 rlineto +-47 -225 rlineto +-31 -152 -56 -81 -113 0 rrcurveto +-47 0 -23 20 0 42 rrcurveto +0 14 3 22 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -68 54 -51 79 0 rrcurveto +65 0 64 35 62 71 rrcurveto +-19 -94 rlineto +81 0 rlineto +55 263 rlineto +120 3 53 37 26 128 rrcurveto +18 88 rlineto +-100 0 rlineto +-21 -101 rlineto +closepath +-455 -577 rmoveto +99 0 rlineto +22 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Ydotbelow { +0 667 hsbw +-159 100 hstem +0 20 hstem +696 20 hstem +117 102 vstem +279 96 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +-32 -159 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/ydotbelow { +0 500 hsbw +-210 20 hstem +-159 100 hstem +499 20 hstem +91 87 vstem +291 100 vstem +469 92 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +291 41 rmoveto +100 0 rlineto +21 100 rlineto +-100 0 rlineto +-21 -100 rlineto +closepath +endchar } ND +/Yhookabove { +0 667 hsbw +0 20 hstem +696 20 hstem +854 40 hstem +117 102 vstem +375 198 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +171 796 rmoveto +-29 -3 rlineto +-11 -39 rlineto +55 0 rlineto +5 15 rlineto +54 6 49 25 0 39 rrcurveto +0 36 -69 19 -58 0 rrcurveto +-34 0 -23 -1 -14 -2 rrcurveto +0 -37 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-4 -11 -10 -8 -18 -6 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/yhookabove { +0 500 hsbw +-210 85 hstem +499 20 hstem +703 51 hstem +91 87 vstem +278 198 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +353 843 rmoveto +-29 -3 rlineto +-11 -58 rlineto +55 0 rlineto +5 24 rlineto +54 6 49 30 0 46 rrcurveto +0 53 -65 13 -62 0 rrcurveto +-34 0 -24 -1 -13 -2 rrcurveto +0 -48 rlineto +42 0 rlineto +53 0 24 -10 -4 -20 rrcurveto +-4 -13 -10 -9 -18 -5 rrcurveto +-8 -3 rlineto +closepath +endchar } ND +/Ytilde { +0 667 hsbw +0 20 hstem +696 20 hstem +758 68 hstem +117 102 vstem +304 61 vstem +575 59 vstem +659 114 vstem +279 0 rmoveto +96 0 rlineto +56 270 rlineto +342 446 rlineto +-114 0 rlineto +-168 -211 rlineto +-42 -52 -33 -49 -24 -44 rrcurveto +-22 52 -23 49 -22 46 rrcurveto +-106 209 rlineto +-102 0 rlineto +220 -439 rlineto +-58 -277 rlineto +closepath +25 758 rmoveto +61 0 rlineto +5 29 15 13 20 0 rrcurveto +10 0 29 -10 44 -19 rrcurveto +21 -9 15 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/ytilde { +0 500 hsbw +-210 85 hstem +499 20 hstem +639 68 hstem +91 87 vstem +182 61 vstem +453 59 vstem +0 -200 rmoveto +19 -6 20 -4 21 0 rrcurveto +64 0 43 27 63 114 rrcurveto +331 588 rlineto +-92 0 rlineto +-232 -418 rlineto +-6 52 -6 51 -8 52 rrcurveto +-39 263 rlineto +-87 0 rlineto +86 -520 rlineto +-28 -51 rlineto +-27 -48 -17 -25 -46 0 rrcurveto +-18 0 -18 3 -18 5 rrcurveto +-5 -83 rlineto +closepath +182 797 rmoveto +61 0 rlineto +5 29 15 13 20 0 rrcurveto +10 0 27 -10 46 -20 rrcurveto +19 -8 17 -4 14 0 rrcurveto +48 0 41 39 7 68 rrcurveto +-59 0 rlineto +-8 -31 -13 -8 -14 0 rrcurveto +-10 0 -16 5 -26 12 rrcurveto +-37 17 -19 8 -29 0 rrcurveto +-48 0 -30 -24 -21 -86 rrcurveto +closepath +endchar } ND +/uni01CD { +0 667 hsbw +0 20 hstem +206 74 hstem +638 78 hstem +758 135 hstem +-20 105 vstem +341 77 vstem +536 92 vstem +-20 0 rmoveto +105 0 rlineto +115 206 rlineto +289 0 rlineto +35 -206 rlineto +93 0 rlineto +-118 716 rlineto +-113 0 rlineto +-406 -716 rlineto +closepath +261 280 rmoveto +117 212 rlineto +31 56 24 48 17 42 rrcurveto +2 -48 7 -60 11 -71 rrcurveto +28 -179 rlineto +-237 0 rlineto +closepath +387 613 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -135 rlineto +98 0 rlineto +129 135 rlineto +closepath +endchar } ND +/uni01CE { +0 556 hsbw +-12 69 hstem +458 72 hstem +582 134 hstem +44 88 vstem +241 77 vstem +439 87 vstem +383 64 rmoveto +2 -26 3 -22 5 -16 rrcurveto +89 0 rlineto +-7 30 -3 24 0 16 rrcurveto +0 26 4 33 9 41 rrcurveto +29 129 rlineto +8 36 4 33 0 28 rrcurveto +0 93 -91 41 -104 0 rrcurveto +-120 0 -80 -57 -36 -102 rrcurveto +89 -8 rlineto +21 61 47 34 75 0 rrcurveto +61 0 51 -19 0 -54 rrcurveto +0 -48 -58 -24 -71 -6 rrcurveto +-149 -6 -117 -36 0 -126 rrcurveto +0 -88 64 -63 96 0 rrcurveto +64 0 53 24 62 52 rrcurveto +closepath +33 199 rmoveto +-24 -126 -62 -80 -100 0 rrcurveto +-63 0 -35 34 0 51 rrcurveto +0 74 68 17 105 10 rrcurveto +64 6 21 3 26 11 rrcurveto +closepath +112 453 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +97 0 rlineto +130 134 rlineto +closepath +endchar } ND +/uni01CF { +0 278 hsbw +0 20 hstem +696 20 hstem +758 135 hstem +57 96 vstem +156 77 vstem +351 92 vstem +57 0 rmoveto +96 0 rlineto +149 716 rlineto +-95 0 rlineto +-150 -716 rlineto +closepath +386 893 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -135 rlineto +97 0 rlineto +130 135 rlineto +closepath +endchar } ND +/uni01D0 { +0 222 hsbw +0 20 hstem +499 20 hstem +582 134 hstem +87 78 vstem +283 92 vstem +30 0 rmoveto +88 0 rlineto +109 519 rlineto +-89 0 rlineto +-108 -519 rlineto +closepath +345 716 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-78 0 rlineto +60 -134 rlineto +98 0 rlineto +130 134 rlineto +closepath +endchar } ND +/uni01D1 { +0 778 hsbw +-12 79 hstem +648 80 hstem +758 135 hstem +91 95 vstem +373 77 vstem +568 92 vstem +677 95 vstem +91 300 rmoveto +0 -167 130 -145 170 0 rrcurveto +211 0 170 200 0 219 rrcurveto +0 196 -124 125 -178 0 rrcurveto +-210 0 -169 -174 0 -254 rrcurveto +closepath +95 -5 rmoveto +0 216 133 137 151 0 rrcurveto +117 0 90 -92 0 -141 rrcurveto +0 -158 -112 -190 -167 0 rrcurveto +-116 0 -96 107 0 121 rrcurveto +closepath +474 598 rmoveto +-92 0 rlineto +-81 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -135 rlineto +98 0 rlineto +129 135 rlineto +closepath +endchar } ND +/uni01D2 { +0 556 hsbw +-12 69 hstem +462 68 hstem +582 134 hstem +49 88 vstem +240 77 vstem +453 87 vstem +49 197 rmoveto +0 -123 93 -86 119 0 rrcurveto +154 0 125 159 0 166 rrcurveto +0 133 -84 84 -124 0 rrcurveto +-180 0 -103 -152 0 -181 rrcurveto +closepath +88 9 rmoveto +0 101 68 155 123 0 rrcurveto +72 0 53 -55 0 -93 rrcurveto +0 -112 -81 -145 -110 0 rrcurveto +-72 0 -53 50 0 99 rrcurveto +closepath +390 510 rmoveto +-91 0 rlineto +-82 -87 rlineto +-37 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/uni01D3 { +0 722 hsbw +-13 80 hstem +696 20 hstem +758 135 hstem +97 94 vstem +198 96 vstem +364 77 vstem +560 91 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +453 177 rmoveto +-91 0 rlineto +-81 -87 rlineto +-38 87 rlineto +-77 0 rlineto +60 -135 rlineto +98 0 rlineto +129 135 rlineto +closepath +endchar } ND +/uni01D4 { +0 556 hsbw +-12 73 hstem +499 20 hstem +582 134 hstem +63 89 vstem +258 77 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +158 622 rmoveto +-91 0 rlineto +-81 -87 rlineto +-38 87 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/uni01D5 { +0 722 hsbw +-13 80 hstem +696 20 hstem +730 72 hstem +843 57 hstem +97 94 vstem +198 96 vstem +356 66 vstem +542 66 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +444 184 rmoveto +-252 0 rlineto +-12 -57 rlineto +252 0 rlineto +12 57 rlineto +closepath +-19 -98 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-186 0 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +/uni01D6 { +0 556 hsbw +-12 73 hstem +499 20 hstem +599 100 hstem +781 68 hstem +63 89 vstem +221 92 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-166 505 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +-162 182 rmoveto +303 0 rlineto +14 68 rlineto +-303 0 rlineto +-14 -68 rlineto +closepath +endchar } ND +/uni01D7 { +0 722 hsbw +-13 80 hstem +696 20 hstem +730 170 hstem +97 94 vstem +198 96 vstem +356 66 vstem +446 63 vstem +542 66 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +441 184 rmoveto +-110 0 rlineto +-83 -87 rlineto +63 0 rlineto +130 87 rlineto +closepath +-16 -98 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-186 0 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +/uni01D8 { +0 556 hsbw +-12 73 hstem +499 20 hstem +599 100 hstem +876 20 hstem +63 89 vstem +221 92 vstem +335 73 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-166 505 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +-66 163 rmoveto +73 0 rlineto +130 134 rlineto +-111 0 rlineto +-92 -134 rlineto +closepath +endchar } ND +/uni01D9 { +0 722 hsbw +-13 80 hstem +696 20 hstem +730 72 hstem +814 86 hstem +97 94 vstem +198 96 vstem +356 66 vstem +463 68 vstem +542 66 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +429 184 rmoveto +-72 0 rlineto +-48 -47 rlineto +-30 47 rlineto +-73 0 rlineto +59 -86 rlineto +68 0 rlineto +96 86 rlineto +closepath +-4 -98 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-186 0 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +/uni01DA { +0 556 hsbw +-12 73 hstem +499 20 hstem +599 100 hstem +762 134 hstem +63 89 vstem +285 77 vstem +368 81 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-166 505 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +171 297 rmoveto +-92 0 rlineto +-81 -86 rlineto +-37 86 rlineto +-77 0 rlineto +60 -134 rlineto +98 0 rlineto +129 134 rlineto +closepath +endchar } ND +/uni01DB { +0 722 hsbw +-13 80 hstem +696 20 hstem +730 72 hstem +813 87 hstem +97 94 vstem +198 96 vstem +356 66 vstem +488 63 vstem +557 66 vstem +659 95 vstem +198 716 rmoveto +-81 -391 rlineto +-14 -62 -6 -43 0 -24 rrcurveto +0 -132 118 -77 140 0 rrcurveto +174 0 99 118 39 191 rrcurveto +87 420 rlineto +-95 0 rlineto +-83 -394 rlineto +-34 -165 -62 -90 -129 0 rrcurveto +-92 0 -68 50 0 78 rrcurveto +0 17 3 27 8 37 rrcurveto +92 440 rlineto +-96 0 rlineto +closepath +425 86 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-72 11 rmoveto +-49 87 rlineto +-110 0 rlineto +96 -87 rlineto +63 0 rlineto +closepath +-114 -11 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +/uni01DC { +0 556 hsbw +-12 73 hstem +499 20 hstem +599 100 hstem +762 134 hstem +63 89 vstem +221 92 vstem +377 69 vstem +469 89 vstem +387 94 rmoveto +-19 -94 rlineto +81 0 rlineto +109 519 rlineto +-89 0 rlineto +-47 -225 rlineto +-34 -155 -59 -78 -107 0 rrcurveto +-46 0 -24 22 0 40 rrcurveto +0 15 3 21 6 28 rrcurveto +69 332 rlineto +-88 0 rlineto +-63 -300 rlineto +-11 -53 -5 -37 0 -22 rrcurveto +0 -67 53 -52 80 0 rrcurveto +65 0 64 35 62 71 rrcurveto +closepath +-166 505 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +180 0 rmoveto +92 0 rlineto +21 100 rlineto +-92 0 rlineto +-21 -100 rlineto +closepath +-24 163 rmoveto +69 0 rlineto +-57 134 rlineto +-107 0 rlineto +95 -134 rlineto +closepath +endchar } ND +/_928 { +0 0 hsbw +730 72 hstem +843 57 hstem +23 66 vstem +209 66 vstem +309 900 rmoveto +-252 0 rlineto +-12 -57 rlineto +252 0 rlineto +12 57 rlineto +closepath +-19 -98 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-186 0 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +/_929 { +0 0 hsbw +730 170 hstem +23 66 vstem +113 63 vstem +209 66 vstem +306 900 rmoveto +-110 0 rlineto +-83 -87 rlineto +63 0 rlineto +130 87 rlineto +closepath +-16 -98 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-186 0 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +/_930 { +0 0 hsbw +730 72 hstem +814 86 hstem +23 66 vstem +130 68 vstem +209 66 vstem +294 900 rmoveto +-72 0 rlineto +-48 -47 rlineto +-30 47 rlineto +-73 0 rlineto +59 -86 rlineto +68 0 rlineto +96 86 rlineto +closepath +-4 -98 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-186 0 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +/_931 { +0 0 hsbw +730 72 hstem +813 87 hstem +23 66 vstem +155 63 vstem +224 66 vstem +290 802 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +-72 11 rmoveto +-49 87 rlineto +-110 0 rlineto +96 -87 rlineto +63 0 rlineto +closepath +-114 -11 rmoveto +-66 0 rlineto +-15 -72 rlineto +66 0 rlineto +15 72 rlineto +closepath +endchar } ND +end +end +readonly put +noaccess put +dup/FontName get exch definefont pop +mark currentfile closefile +cleartomark diff --git a/fonts/calibri.ttf b/fonts/calibri.ttf new file mode 100644 index 0000000..8b6e3c9 Binary files /dev/null and b/fonts/calibri.ttf differ diff --git a/fonts/glyphicons-halflings-regular.eot b/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.eot differ diff --git a/fonts/glyphicons-halflings-regular.svg b/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="400" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> +<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xa0;" /> +<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> +<glyph unicode="&#x2000;" horiz-adv-x="650" /> +<glyph unicode="&#x2001;" horiz-adv-x="1300" /> +<glyph unicode="&#x2002;" horiz-adv-x="650" /> +<glyph unicode="&#x2003;" horiz-adv-x="1300" /> +<glyph unicode="&#x2004;" horiz-adv-x="433" /> +<glyph unicode="&#x2005;" horiz-adv-x="325" /> +<glyph unicode="&#x2006;" horiz-adv-x="216" /> +<glyph unicode="&#x2007;" horiz-adv-x="216" /> +<glyph unicode="&#x2008;" horiz-adv-x="162" /> +<glyph unicode="&#x2009;" horiz-adv-x="260" /> +<glyph unicode="&#x200a;" horiz-adv-x="72" /> +<glyph unicode="&#x202f;" horiz-adv-x="260" /> +<glyph unicode="&#x205f;" horiz-adv-x="325" /> +<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> +<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> +<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> +<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> +<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> +<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> +<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> +<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> +<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> +<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> +<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> +<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> +<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> +<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> +<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> +<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> +<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> +<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> +<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> +<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> +<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> +<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> +<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> +<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> +<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> +<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> +<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> +<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> +<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> +<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> +<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> +<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> +<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> +<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> +<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> +<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> +<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> +<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> +<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> +<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> +<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> +<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> +<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> +<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> +<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> +<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> +<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> +<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> +<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> +<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> +<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> +<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> +<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> +<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> +<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> +<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> +<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> +<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> +<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> +<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> +<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> +<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> +<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> +<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> +<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> +<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> +<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> +<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> +<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> +<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> +<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> +<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> +<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> +<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> +<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> +<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> +<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> +<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> +<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> +<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> +<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> +<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> +<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> +<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> +<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> +<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> +<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> +<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> +<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> +<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> +<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> +<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> +<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> +<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> +<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> +<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> +<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> +<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> +<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> +<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> +<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> +<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> +<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> +<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> +<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> +<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> +<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> +<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> +<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> +<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> +<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> +<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> +<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> +<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> +<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> +<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> +<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> +<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> +<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> +<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> +<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> +<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> +<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> +<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> +<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> +<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> +<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> +<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> +<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> +<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> +<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> +<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> +<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> +<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> +<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> +<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> +<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> +<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> +<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> +<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> +<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> +<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> +<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> +<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> +<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> +<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> +<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> +<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> +<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> +<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> +<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> +<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> +<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> +<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> +<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> +<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> +<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> +<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> +<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> +<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> +<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> +<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> +<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> +<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/fonts/glyphicons-halflings-regular.ttf b/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.ttf differ diff --git a/fonts/glyphicons-halflings-regular.woff b/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.woff differ diff --git a/fonts/glyphicons-halflings-regular.woff2 b/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/fonts/pf_arma_five.ttf b/fonts/pf_arma_five.ttf new file mode 100644 index 0000000..db04ec3 Binary files /dev/null and b/fonts/pf_arma_five.ttf differ diff --git a/fonts/tahoma.ttf b/fonts/tahoma.ttf new file mode 100644 index 0000000..59b14a2 Binary files /dev/null and b/fonts/tahoma.ttf differ diff --git a/fonts/verdana.ttf b/fonts/verdana.ttf new file mode 100644 index 0000000..5a059d2 Binary files /dev/null and b/fonts/verdana.ttf differ diff --git a/foto/_map_01.png b/foto/_map_01.png new file mode 100644 index 0000000..f562b42 Binary files /dev/null and b/foto/_map_01.png differ diff --git a/foto/backclaud.jpg b/foto/backclaud.jpg new file mode 100644 index 0000000..aa89b8f Binary files /dev/null and b/foto/backclaud.jpg differ diff --git a/foto/map_01.png b/foto/map_01.png new file mode 100644 index 0000000..9964d2f Binary files /dev/null and b/foto/map_01.png differ diff --git a/foto/onLoad.png b/foto/onLoad.png new file mode 100644 index 0000000..d9dd260 Binary files /dev/null and b/foto/onLoad.png differ diff --git a/foto/piezometr.png b/foto/piezometr.png new file mode 100644 index 0000000..b461550 Binary files /dev/null and b/foto/piezometr.png differ diff --git a/foto/reservoir.png b/foto/reservoir.png new file mode 100644 index 0000000..ff9b6fa Binary files /dev/null and b/foto/reservoir.png differ diff --git a/foto/site201_008.png b/foto/site201_008.png new file mode 100644 index 0000000..010acf1 Binary files /dev/null and b/foto/site201_008.png differ diff --git a/foto/site201_012.png b/foto/site201_012.png new file mode 100644 index 0000000..927fe54 Binary files /dev/null and b/foto/site201_012.png differ diff --git a/foto/site201_013.png b/foto/site201_013.png new file mode 100644 index 0000000..973e5d8 Binary files /dev/null and b/foto/site201_013.png differ diff --git a/foto/site201_014.png b/foto/site201_014.png new file mode 100644 index 0000000..6ee3ce8 Binary files /dev/null and b/foto/site201_014.png differ diff --git a/foto/worldFull.png b/foto/worldFull.png new file mode 100644 index 0000000..e8c6f3e Binary files /dev/null and b/foto/worldFull.png differ diff --git a/fpdf/FAQ.htm b/fpdf/FAQ.htm new file mode 100644 index 0000000..72094a9 --- /dev/null +++ b/fpdf/FAQ.htm @@ -0,0 +1,341 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>FAQ</title> +<link type="text/css" rel="stylesheet" href="fpdf.css"> +<style type="text/css"> +ul {list-style-type:none; margin:0; padding:0} +ul#answers li {margin-top:1.8em} +.question {font-weight:bold; color:#900000} +</style> +</head> +<body> +<h1>FAQ</h1> +<ul> +<li><b>1.</b> <a href='#q1'>What's exactly the license of FPDF? Are there any usage restrictions?</a></li> +<li><b>2.</b> <a href='#q2'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</a></li> +<li><b>3.</b> <a href='#q3'>I try to generate a PDF and IE displays a blank page. What happens?</a></li> +<li><b>4.</b> <a href='#q4'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</a></li> +<li><b>5.</b> <a href='#q5'>I try to display a variable in the Header method but nothing prints.</a></li> +<li><b>6.</b> <a href='#q6'>I defined the Header and Footer methods in my PDF class but nothing appears.</a></li> +<li><b>7.</b> <a href='#q7'>Accented characters are replaced by some strange characters like é.</a></li> +<li><b>8.</b> <a href='#q8'>I try to display the Euro symbol but it doesn't work.</a></li> +<li><b>9.</b> <a href='#q9'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</a></li> +<li><b>10.</b> <a href='#q10'>I draw a frame with very precise dimensions, but when printed I notice some differences.</a></li> +<li><b>11.</b> <a href='#q11'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</a></li> +<li><b>12.</b> <a href='#q12'>How can I put a background in my PDF?</a></li> +<li><b>13.</b> <a href='#q13'>How can I set a specific header or footer on the first page?</a></li> +<li><b>14.</b> <a href='#q14'>I'd like to use extensions provided by different scripts. How can I combine them?</a></li> +<li><b>15.</b> <a href='#q15'>How can I send the PDF by email?</a></li> +<li><b>16.</b> <a href='#q16'>What's the limit of the file sizes I can generate with FPDF?</a></li> +<li><b>17.</b> <a href='#q17'>Can I modify a PDF with FPDF?</a></li> +<li><b>18.</b> <a href='#q18'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</a></li> +<li><b>19.</b> <a href='#q19'>Can I convert an HTML page to PDF with FPDF?</a></li> +<li><b>20.</b> <a href='#q20'>Can I concatenate PDF files with FPDF?</a></li> +</ul> + +<ul id='answers'> +<li id='q1'> +<p><b>1.</b> <span class='question'>What's exactly the license of FPDF? Are there any usage restrictions?</span></p> +FPDF is released under a permissive license: there is no usage restriction. You may embed it +freely in your application (commercial or not), with or without modifications. +</li> + +<li id='q2'> +<p><b>2.</b> <span class='question'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</span></p> +These "weird" characters are in fact the actual content of your PDF. This behavior is a bug of +IE6. When it first receives an HTML page, then a PDF from the same URL, it displays it directly +without launching Acrobat. This happens frequently during the development stage: on the least +script error, an HTML page is sent, and after correction, the PDF arrives. +<br> +To solve the problem, simply quit and restart IE. You can also go to another URL and come +back. +<br> +To avoid this kind of inconvenience during the development, you can generate the PDF directly +to a file and open it through the explorer. +</li> + +<li id='q3'> +<p><b>3.</b> <span class='question'>I try to generate a PDF and IE displays a blank page. What happens?</span></p> +First of all, check that you send nothing to the browser after the PDF (not even a space or a +carriage return). You can put an exit statement just after the call to the Output() method to +be sure. If it still doesn't work, it means you're a victim of the "blank page syndrome". IE +used in conjunction with the Acrobat plug-in suffers from many bugs. To avoid these problems +in a reliable manner, two main techniques exist: +<br> +<br> +- Disable the plug-in and use Acrobat as a helper application. To do this, launch Acrobat, go +to the Edit menu, Preferences, Internet, and uncheck "Display PDF in browser". Then, the next +time you load a PDF in IE, it displays the dialog box "Open it" or "Save it to disk". Uncheck +the option "Always ask before opening this type of file" and choose Open. From now on, PDF files +will open automatically in an external Acrobat window. +<br> +The drawback of the method is that you need to alter the client configuration, which you can do +in an intranet environment but not for the Internet. +<br> +<br> +- Use a redirection technique. It consists in generating the PDF in a temporary file on the server +and redirect the client to it. For example, at the end of the script, you can put the following: +<div class="doc-source"> +<pre><code>//Determine a temporary file name in the current directory +$file = basename(tempnam('.', 'tmp')); +rename($file, $file.'.pdf'); +$file .= '.pdf'; +//Save PDF to file +$pdf-&gt;Output($file, 'F'); +//Redirect +header('Location: '.$file);</code></pre> +</div> +This method turns the dynamic PDF into a static one and avoids all troubles. But you have to do +some cleaning in order to delete the temporary files. For example: +<div class="doc-source"> +<pre><code>function CleanFiles($dir) +{ + //Delete temporary files + $t = time(); + $h = opendir($dir); + while($file=readdir($h)) + { + if(substr($file,0,3)=='tmp' &amp;&amp; substr($file,-4)=='.pdf') + { + $path = $dir.'/'.$file; + if($t-filemtime($path)&gt;3600) + @unlink($path); + } + } + closedir($h); +}</code></pre> +</div> +This function deletes all files of the form tmp*.pdf older than an hour in the specified +directory. You may call it where you want, for example in the script which generates the PDF. +</li> + +<li id='q4'> +<p><b>4.</b> <span class='question'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</span></p> +You have to enclose your string with double quotes, not single ones. +</li> + +<li id='q5'> +<p><b>5.</b> <span class='question'>I try to display a variable in the Header method but nothing prints.</span></p> +You have to use the <code>global</code> keyword to access global variables, for example: +<div class="doc-source"> +<pre><code>function Header() +{ + global $title; + + $this-&gt;SetFont('Arial', 'B', 15); + $this-&gt;Cell(0, 10, $title, 1, 1, 'C'); +} + +$title = 'My title';</code></pre> +</div> +Alternatively, you can use an object property: +<div class="doc-source"> +<pre><code>function Header() +{ + $this-&gt;SetFont('Arial', 'B', 15); + $this-&gt;Cell(0, 10, $this-&gt;title, 1, 1, 'C'); +} + +$pdf-&gt;title = 'My title';</code></pre> +</div> +</li> + +<li id='q6'> +<p><b>6.</b> <span class='question'>I defined the Header and Footer methods in my PDF class but nothing appears.</span></p> +You have to create an object from the PDF class, not FPDF: +<div class="doc-source"> +<pre><code>$pdf = new PDF();</code></pre> +</div> +</li> + +<li id='q7'> +<p><b>7.</b> <span class='question'>Accented characters are replaced by some strange characters like é.</span></p> +Don't use UTF-8 encoding. Standard FPDF fonts use ISO-8859-1 or Windows-1252. +It is possible to perform a conversion to ISO-8859-1 with utf8_decode(): +<div class="doc-source"> +<pre><code>$str = utf8_decode($str);</code></pre> +</div> +But some characters such as Euro won't be translated correctly. If the iconv extension is available, the +right way to do it is the following: +<div class="doc-source"> +<pre><code>$str = iconv('UTF-8', 'windows-1252', $str);</code></pre> +</div> +</li> + +<li id='q8'> +<p><b>8.</b> <span class='question'>I try to display the Euro symbol but it doesn't work.</span></p> +The standard fonts have the Euro character at position 128. You can define a constant like this +for convenience: +<div class="doc-source"> +<pre><code>define('EURO', chr(128));</code></pre> +</div> +</li> + +<li id='q9'> +<p><b>9.</b> <span class='question'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</span></p> +You must send nothing to the browser except the PDF itself: no HTML, no space, no carriage return. A common +case is having extra blank at the end of an included script file.<br> +If you can't figure out where the problem comes from, this other message appearing just before can help you:<br> +<br> +<b>Warning:</b> Cannot modify header information - headers already sent by (output started at script.php:X)<br> +<br> +It means that script.php outputs something at line X. Go to this line and fix it. +In case the message doesn't show, first check that you didn't disable warnings, then add this at the very +beginning of your script: +<div class="doc-source"> +<pre><code>ob_end_clean();</code></pre> +</div> +If you still don't see it, disable zlib.output_compression in your php.ini and it should appear. +</li> + +<li id='q10'> +<p><b>10.</b> <span class='question'>I draw a frame with very precise dimensions, but when printed I notice some differences.</span></p> +To respect dimensions, select "None" for the Page Scaling setting instead of "Shrink to Printable Area" in the print dialog box. +</li> + +<li id='q11'> +<p><b>11.</b> <span class='question'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</span></p> +Printers have physical margins (different depending on the models); it is therefore impossible to remove +them and print on the whole surface of the paper. +</li> + +<li id='q12'> +<p><b>12.</b> <span class='question'>How can I put a background in my PDF?</span></p> +For a picture, call Image() in the Header() method, before any other output. To set a background color, use Rect(). +</li> + +<li id='q13'> +<p><b>13.</b> <span class='question'>How can I set a specific header or footer on the first page?</span></p> +Simply test the page number: +<div class="doc-source"> +<pre><code>function Header() +{ + if($this-&gt;PageNo()==1) + { + //First page + ... + } + else + { + //Other pages + ... + } +}</code></pre> +</div> +</li> + +<li id='q14'> +<p><b>14.</b> <span class='question'>I'd like to use extensions provided by different scripts. How can I combine them?</span></p> +Use an inheritance chain. If you have two classes, say A in a.php: +<div class="doc-source"> +<pre><code>require('fpdf.php'); + +class A extends FPDF +{ +... +}</code></pre> +</div> +and B in b.php: +<div class="doc-source"> +<pre><code>require('fpdf.php'); + +class B extends FPDF +{ +... +}</code></pre> +</div> +then make B extend A: +<div class="doc-source"> +<pre><code>require('a.php'); + +class B extends A +{ +... +}</code></pre> +</div> +and make your own class extend B: +<div class="doc-source"> +<pre><code>require('b.php'); + +class PDF extends B +{ +... +} + +$pdf = new PDF();</code></pre> +</div> +</li> + +<li id='q15'> +<p><b>15.</b> <span class='question'>How can I send the PDF by email?</span></p> +As any other file, but an easy way is to use <a href="http://phpmailer.codeworxtech.com">PHPMailer</a> and +its in-memory attachment: +<div class="doc-source"> +<pre><code>$mail = new PHPMailer(); +... +$doc = $pdf-&gt;Output('', 'S'); +$mail-&gt;AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf'); +$mail-&gt;Send();</code></pre> +</div> +</li> + +<li id='q16'> +<p><b>16.</b> <span class='question'>What's the limit of the file sizes I can generate with FPDF?</span></p> +There is no particular limit. There are some constraints, however: +<br> +<br> +- The maximum memory size allocated to PHP scripts is usually 8MB. For very big documents, +especially with images, this limit may be reached (the file being built into memory). The +parameter is configured in the php.ini file. +<br> +<br> +- The maximum execution time allocated defaults to 30 seconds. This limit can of course be easily +reached. It is configured in php.ini and may be altered dynamically with set_time_limit(). +<br> +<br> +- Browsers generally have a 5 minute time-out. If you send the PDF directly to the browser and +reach the limit, it will be lost. It is therefore advised for very big documents to +generate them in a file, and to send some data to the browser from time to time (with a call +to flush() to force the output). When the document is finished, you can send a redirection to +it or create a link. +<br> +Remark: even if the browser times out, the script may continue to run on the server. +</li> + +<li id='q17'> +<p><b>17.</b> <span class='question'>Can I modify a PDF with FPDF?</span></p> +It is possible to import pages from an existing PDF document thanks to the FPDI extension:<br> +<br> +<a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/" target="_blank">http://www.setasign.de/products/pdf-php-solutions/fpdi/</a><br> +<br> +You can then add some content to them. +</li> + +<li id='q18'> +<p><b>18.</b> <span class='question'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</span></p> +No. But a GPL C utility does exist, pdftotext, which is able to extract the textual content from +a PDF. It is provided with the Xpdf package:<br> +<br> +<a href="http://www.foolabs.com/xpdf/" target="_blank">http://www.foolabs.com/xpdf/</a> +</li> + +<li id='q19'> +<p><b>19.</b> <span class='question'>Can I convert an HTML page to PDF with FPDF?</span></p> +Not real-world pages. But a GPL C utility does exist, htmldoc, which allows to do it and gives good results:<br> +<br> +<a href="http://www.htmldoc.org" target="_blank">http://www.htmldoc.org</a> +</li> + +<li id='q20'> +<p><b>20.</b> <span class='question'>Can I concatenate PDF files with FPDF?</span></p> +Not directly, but it is possible to use <a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/" target="_blank">FPDI</a> +to perform this task. Some free command-line tools also exist:<br> +<br> +<a href="http://thierry.schmit.free.fr/spip/spip.php?article15&amp;lang=en" target="_blank">mbtPdfAsm</a><br> +<a href="http://www.accesspdf.com/pdftk/" target="_blank">pdftk</a> +</li> +</ul> +</body> +</html> diff --git a/fpdf/changelog.htm b/fpdf/changelog.htm new file mode 100644 index 0000000..e768b4a --- /dev/null +++ b/fpdf/changelog.htm @@ -0,0 +1,146 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Changelog</title> +<link type="text/css" rel="stylesheet" href="fpdf.css"> +<style type="text/css"> +dd {margin:1em 0 1em 1em} +</style> +</head> +<body> +<h1>Changelog</h1> +<dl> +<dt><strong>v1.7</strong> (2011-06-18)</dt> +<dd> +- The MakeFont utility has been completely rewritten and doesn't depend on ttf2pt1 anymore.<br> +- Alpha channel is now supported for PNGs.<br> +- When inserting an image, it's now possible to specify its resolution.<br> +- Default resolution for images was increased from 72 to 96 dpi.<br> +- When inserting a GIF image, no temporary file is used anymore if the PHP version is 5.1 or higher.<br> +- When output buffering is enabled and the PDF is about to be sent, the buffer is now cleared if it contains only a UTF-8 BOM and/or whitespace (instead of throwing an error).<br> +- Symbol and ZapfDingbats fonts now support underline style.<br> +- Custom page sizes are now checked to ensure that width is smaller than height.<br> +- Standard font files were changed to use the same format as user fonts.<br> +- A bug in the embedding of Type1 fonts was fixed.<br> +- A bug related to SetDisplayMode() and the current locale was fixed.<br> +- A display issue occurring with the Adobe Reader X plug-in was fixed.<br> +- An issue related to transparency with some versions of Adobe Reader was fixed.<br> +- The Content-Length header was removed because it caused an issue when the HTTP server applies compression.<br> +</dd> +<dt><strong>v1.6</strong> (2008-08-03)</dt> +<dd> +- PHP 4.3.10 or higher is now required.<br> +- GIF image support.<br> +- Images can now trigger page breaks.<br> +- Possibility to have different page formats in a single document.<br> +- Document properties (author, creator, keywords, subject and title) can now be specified in UTF-8.<br> +- Fixed a bug: when a PNG was inserted through a URL, an error sometimes occurred.<br> +- An automatic page break in Header() doesn't cause an infinite loop any more.<br> +- Removed some warning messages appearing with recent PHP versions.<br> +- Added HTTP headers to reduce problems with IE.<br> +</dd> +<dt><strong>v1.53</strong> (2004-12-31)</dt> +<dd> +- When the font subdirectory is in the same directory as fpdf.php, it's no longer necessary to define the FPDF_FONTPATH constant.<br> +- The array $HTTP_SERVER_VARS is no longer used. It could cause trouble on PHP5-based configurations with the register_long_arrays option disabled.<br> +- Fixed a problem related to Type1 font embedding which caused trouble to some PDF processors.<br> +- The file name sent to the browser could not contain a space character.<br> +- The Cell() method could not print the number 0 (you had to pass the string '0').<br> +</dd> +<dt><strong>v1.52</strong> (2003-12-30)</dt> +<dd> +- Image() now displays the image at 72 dpi if no dimension is given.<br> +- Output() takes a string as second parameter to indicate destination.<br> +- Open() is now called automatically by AddPage().<br> +- Inserting remote JPEG images doesn't generate an error any longer.<br> +- Decimal separator is forced to dot in the constructor.<br> +- Added several encodings (Turkish, Thai, Hebrew, Ukrainian and Vietnamese).<br> +- The last line of a right-aligned MultiCell() was not correctly aligned if it was terminated by a carriage return.<br> +- No more error message about already sent headers when outputting the PDF to the standard output from the command line.<br> +- The underlining was going too far for text containing characters \, ( or ).<br> +- $HTTP_ENV_VARS has been replaced by $HTTP_SERVER_VARS.<br> +</dd> +<dt><strong>v1.51</strong> (2002-08-03)</dt> +<dd> +- Type1 font support.<br> +- Added Baltic encoding.<br> +- The class now works internally in points with the origin at the bottom in order to avoid two bugs occurring with Acrobat 5 :<br>&nbsp;&nbsp;* The line thickness was too large when printed under Windows 98 SE and ME.<br>&nbsp;&nbsp;* TrueType fonts didn't appear immediately inside the plug-in (a substitution font was used), one had to cause a window refresh to make them show up.<br> +- It's no longer necessary to set the decimal separator as dot to produce valid documents.<br> +- The clickable area in a cell was always on the left independently from the text alignment.<br> +- JPEG images in CMYK mode appeared in inverted colors.<br> +- Transparent PNG images in grayscale or true color mode were incorrectly handled.<br> +- Adding new fonts now works correctly even with the magic_quotes_runtime option set to on.<br> +</dd> +<dt><strong>v1.5</strong> (2002-05-28)</dt> +<dd> +- TrueType font (AddFont()) and encoding support (Western and Eastern Europe, Cyrillic and Greek).<br> +- Added Write() method.<br> +- Added underlined style.<br> +- Internal and external link support (AddLink(), SetLink(), Link()).<br> +- Added right margin management and methods SetRightMargin(), SetTopMargin().<br> +- Modification of SetDisplayMode() to select page layout.<br> +- The border parameter of MultiCell() now lets choose borders to draw as Cell().<br> +- When a document contains no page, Close() now calls AddPage() instead of causing a fatal error.<br> +</dd> +<dt><strong>v1.41</strong> (2002-03-13)</dt> +<dd> +- Fixed SetDisplayMode() which no longer worked (the PDF viewer used its default display).<br> +</dd> +<dt><strong>v1.4</strong> (2002-03-02)</dt> +<dd> +- PHP3 is no longer supported.<br> +- Page compression (SetCompression()).<br> +- Choice of page format and possibility to change orientation inside document.<br> +- Added AcceptPageBreak() method.<br> +- Ability to print the total number of pages (AliasNbPages()).<br> +- Choice of cell borders to draw.<br> +- New mode for Cell(): the current position can now move under the cell.<br> +- Ability to include an image by specifying height only (width is calculated automatically).<br> +- Fixed a bug: when a justified line triggered a page break, the footer inherited the corresponding word spacing.<br> +</dd> +<dt><strong>v1.31</strong> (2002-01-12)</dt> +<dd> +- Fixed a bug in drawing frame with MultiCell(): the last line always started from the left margin.<br> +- Removed Expires HTTP header (gives trouble in some situations).<br> +- Added Content-disposition HTTP header (seems to help in some situations).<br> +</dd> +<dt><strong>v1.3</strong> (2001-12-03)</dt> +<dd> +- Line break and text justification support (MultiCell()).<br> +- Color support (SetDrawColor(), SetFillColor(), SetTextColor()). Possibility to draw filled rectangles and paint cell background.<br> +- A cell whose width is declared null extends up to the right margin of the page.<br> +- Line width is now retained from page to page and defaults to 0.2 mm.<br> +- Added SetXY() method.<br> +- Fixed a passing by reference done in a deprecated manner for PHP4.<br> +</dd> +<dt><strong>v1.2</strong> (2001-11-11)</dt> +<dd> +- Added font metric files and GetStringWidth() method.<br> +- Centering and right-aligning text in cells.<br> +- Display mode control (SetDisplayMode()).<br> +- Added methods to set document properties (SetAuthor(), SetCreator(), SetKeywords(), SetSubject(), SetTitle()).<br> +- Possibility to force PDF download by browser.<br> +- Added SetX() and GetX() methods.<br> +- During automatic page break, current abscissa is now retained.<br> +</dd> +<dt><strong>v1.11</strong> (2001-10-20)</dt> +<dd> +- PNG support doesn't require PHP4/zlib any more. Data are now put directly into PDF without any decompression/recompression stage.<br> +- Image insertion now works correctly even with magic_quotes_runtime option set to on.<br> +</dd> +<dt><strong>v1.1</strong> (2001-10-07)</dt> +<dd> +- JPEG and PNG image support.<br> +</dd> +<dt><strong>v1.01</strong> (2001-10-03)</dt> +<dd> +- Fixed a bug involving page break: in case when Header() doesn't specify a font, the one from previous page was not restored and produced an incorrect document.<br> +</dd> +<dt><strong>v1.0</strong> (2001-09-17)</dt> +<dd> +- First version.<br> +</dd> +</dl> +</body> +</html> diff --git a/fpdf/doc/acceptpagebreak.htm b/fpdf/doc/acceptpagebreak.htm new file mode 100644 index 0000000..8db1d26 --- /dev/null +++ b/fpdf/doc/acceptpagebreak.htm @@ -0,0 +1,63 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>AcceptPageBreak</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>AcceptPageBreak</h1> +<code><b>boolean</b> AcceptPageBreak()</code> +<h2>Description</h2> +Whenever a page break condition is met, the method is called, and the break is issued or not +depending on the returned value. The default implementation returns a value according to the +mode selected by SetAutoPageBreak(). +<br> +This method is called automatically and should not be called directly by the application. +<h2>Example</h2> +The method is overriden in an inherited class in order to obtain a 3 column layout: +<div class="doc-source"> +<pre><code>class PDF extends FPDF +{ +var $col = 0; + +function SetCol($col) +{ + // Move position to a column + $this-&gt;col = $col; + $x = 10+$col*65; + $this-&gt;SetLeftMargin($x); + $this-&gt;SetX($x); +} + +function AcceptPageBreak() +{ + if($this-&gt;col&lt;2) + { + // Go to next column + $this-&gt;SetCol($this-&gt;col+1); + $this-&gt;SetY(10); + return false; + } + else + { + // Go back to first column and issue page break + $this-&gt;SetCol(0); + return true; + } +} +} + +$pdf = new PDF(); +$pdf-&gt;AddPage(); +$pdf-&gt;SetFont('Arial','',12); +for($i=1;$i&lt;=300;$i++) + $pdf-&gt;Cell(0,5,&quot;Line $i&quot;,0,1); +$pdf-&gt;Output();</code></pre> +</div> +<h2>See also</h2> +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/addfont.htm b/fpdf/doc/addfont.htm new file mode 100644 index 0000000..6910bbb --- /dev/null +++ b/fpdf/doc/addfont.htm @@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>AddFont</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>AddFont</h1> +<code>AddFont(<b>string</b> family [, <b>string</b> style [, <b>string</b> file]])</code> +<h2>Description</h2> +Imports a TrueType, OpenType or Type1 font and makes it available. It is necessary to generate a font +definition file first with the MakeFont utility. +<br> +The definition file (and the font file itself when embedding) must be present in the font directory. +If it is not found, the error "Could not include font definition file" is raised. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>family</code></dt> +<dd> +Font family. The name can be chosen arbitrarily. If it is a standard family name, it will +override the corresponding font. +</dd> +<dt><code>style</code></dt> +<dd> +Font style. Possible values are (case insensitive): +<ul> +<li>empty string: regular</li> +<li><code>B</code>: bold</li> +<li><code>I</code>: italic</li> +<li><code>BI</code> or <code>IB</code>: bold italic</li> +</ul> +The default value is regular. +</dd> +<dt><code>file</code></dt> +<dd> +The font definition file. +<br> +By default, the name is built from the family and style, in lower case with no space. +</dd> +</dl> +<h2>Example</h2> +<div class="doc-source"> +<pre><code>$pdf-&gt;AddFont('Comic','I');</code></pre> +</div> +is equivalent to: +<div class="doc-source"> +<pre><code>$pdf-&gt;AddFont('Comic','I','comici.php');</code></pre> +</div> +<h2>See also</h2> +<a href="setfont.htm">SetFont()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/addlink.htm b/fpdf/doc/addlink.htm new file mode 100644 index 0000000..35c666d --- /dev/null +++ b/fpdf/doc/addlink.htm @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>AddLink</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>AddLink</h1> +<code><b>int</b> AddLink()</code> +<h2>Description</h2> +Creates a new internal link and returns its identifier. An internal link is a clickable area +which directs to another place within the document. +<br> +The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is +defined with SetLink(). +<h2>See also</h2> +<a href="cell.htm">Cell()</a>, +<a href="write.htm">Write()</a>, +<a href="image.htm">Image()</a>, +<a href="link.htm">Link()</a>, +<a href="setlink.htm">SetLink()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/addpage.htm b/fpdf/doc/addpage.htm new file mode 100644 index 0000000..a870812 --- /dev/null +++ b/fpdf/doc/addpage.htm @@ -0,0 +1,56 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>AddPage</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>AddPage</h1> +<code>AddPage([<b>string</b> orientation [, <b>mixed</b> size]])</code> +<h2>Description</h2> +Adds a new page to the document. If a page is already present, the Footer() method is called +first to output the footer. Then the page is added, the current position set to the top-left +corner according to the left and top margins, and Header() is called to display the header. +<br> +The font which was set before calling is automatically restored. There is no need to call +SetFont() again if you want to continue with the same font. The same is true for colors and +line width. +<br> +The origin of the coordinate system is at the top-left corner and increasing ordinates go +downwards. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>orientation</code></dt> +<dd> +Page orientation. Possible values are (case insensitive): +<ul> +<li><code>P</code> or <code>Portrait</code></li> +<li><code>L</code> or <code>Landscape</code></li> +</ul> +The default value is the one passed to the constructor. +</dd> +<dt><code>size</code></dt> +<dd> +Page size. It can be either one of the following values (case insensitive): +<ul> +<li><code>A3</code></li> +<li><code>A4</code></li> +<li><code>A5</code></li> +<li><code>Letter</code></li> +<li><code>Legal</code></li> +</ul> +or an array containing the width and the height (expressed in user unit).<br> +<br> +The default value is the one passed to the constructor. +</dd> +</dl> +<h2>See also</h2> +<a href="fpdf.htm">FPDF()</a>, +<a href="header.htm">Header()</a>, +<a href="footer.htm">Footer()</a>, +<a href="setmargins.htm">SetMargins()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/aliasnbpages.htm b/fpdf/doc/aliasnbpages.htm new file mode 100644 index 0000000..e76ec91 --- /dev/null +++ b/fpdf/doc/aliasnbpages.htm @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>AliasNbPages</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>AliasNbPages</h1> +<code>AliasNbPages([<b>string</b> alias])</code> +<h2>Description</h2> +Defines an alias for the total number of pages. It will be substituted as the document is +closed. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>alias</code></dt> +<dd> +The alias. Default value: <code>{nb}</code>. +</dd> +</dl> +<h2>Example</h2> +<div class="doc-source"> +<pre><code>class PDF extends FPDF +{ +function Footer() +{ + // Go to 1.5 cm from bottom + $this-&gt;SetY(-15); + // Select Arial italic 8 + $this-&gt;SetFont('Arial','I',8); + // Print current and total page numbers + $this-&gt;Cell(0,10,'Page '.$this-&gt;PageNo().'/{nb}',0,0,'C'); +} +} + +$pdf = new PDF(); +$pdf-&gt;AliasNbPages();</code></pre> +</div> +<h2>See also</h2> +<a href="pageno.htm">PageNo()</a>, +<a href="footer.htm">Footer()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/cell.htm b/fpdf/doc/cell.htm new file mode 100644 index 0000000..5cbfb3e --- /dev/null +++ b/fpdf/doc/cell.htm @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Cell</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Cell</h1> +<code>Cell(<b>float</b> w [, <b>float</b> h [, <b>string</b> txt [, <b>mixed</b> border [, <b>int</b> ln [, <b>string</b> align [, <b>boolean</b> fill [, <b>mixed</b> link]]]]]]])</code> +<h2>Description</h2> +Prints a cell (rectangular area) with optional borders, background color and character string. +The upper-left corner of the cell corresponds to the current position. The text can be aligned +or centered. After the call, the current position moves to the right or to the next line. It is +possible to put a link on the text. +<br> +If automatic page breaking is enabled and the cell goes beyond the limit, a page break is +done before outputting. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>w</code></dt> +<dd> +Cell width. If <code>0</code>, the cell extends up to the right margin. +</dd> +<dt><code>h</code></dt> +<dd> +Cell height. +Default value: <code>0</code>. +</dd> +<dt><code>txt</code></dt> +<dd> +String to print. +Default value: empty string. +</dd> +<dt><code>border</code></dt> +<dd> +Indicates if borders must be drawn around the cell. The value can be either a number: +<ul> +<li><code>0</code>: no border</li> +<li><code>1</code>: frame</li> +</ul> +or a string containing some or all of the following characters (in any order): +<ul> +<li><code>L</code>: left</li> +<li><code>T</code>: top</li> +<li><code>R</code>: right</li> +<li><code>B</code>: bottom</li> +</ul> +Default value: <code>0</code>. +</dd> +<dt><code>ln</code></dt> +<dd> +Indicates where the current position should go after the call. Possible values are: +<ul> +<li><code>0</code>: to the right</li> +<li><code>1</code>: to the beginning of the next line</li> +<li><code>2</code>: below</li> +</ul> +Putting <code>1</code> is equivalent to putting <code>0</code> and calling Ln() just after. +Default value: <code>0</code>. +</dd> +<dt><code>align</code></dt> +<dd> +Allows to center or align the text. Possible values are: +<ul> +<li><code>L</code> or empty string: left align (default value)</li> +<li><code>C</code>: center</li> +<li><code>R</code>: right align</li> +</ul> +</dd> +<dt><code>fill</code></dt> +<dd> +Indicates if the cell background must be painted (<code>true</code>) or transparent (<code>false</code>). +Default value: <code>false</code>. +</dd> +<dt><code>link</code></dt> +<dd> +URL or identifier returned by AddLink(). +</dd> +</dl> +<h2>Example</h2> +<div class="doc-source"> +<pre><code>// Set font +$pdf-&gt;SetFont('Arial','B',16); +// Move to 8 cm to the right +$pdf-&gt;Cell(80); +// Centered text in a framed 20*10 mm cell and line break +$pdf-&gt;Cell(20,10,'Title',1,1,'C');</code></pre> +</div> +<h2>See also</h2> +<a href="setfont.htm">SetFont()</a>, +<a href="setdrawcolor.htm">SetDrawColor()</a>, +<a href="setfillcolor.htm">SetFillColor()</a>, +<a href="settextcolor.htm">SetTextColor()</a>, +<a href="setlinewidth.htm">SetLineWidth()</a>, +<a href="addlink.htm">AddLink()</a>, +<a href="ln.htm">Ln()</a>, +<a href="multicell.htm">MultiCell()</a>, +<a href="write.htm">Write()</a>, +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/close.htm b/fpdf/doc/close.htm new file mode 100644 index 0000000..d21f881 --- /dev/null +++ b/fpdf/doc/close.htm @@ -0,0 +1,21 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Close</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Close</h1> +<code>Close()</code> +<h2>Description</h2> +Terminates the PDF document. It is not necessary to call this method explicitly because Output() +does it automatically. +<br> +If the document contains no page, AddPage() is called to prevent from getting an invalid document. +<h2>See also</h2> +<a href="output.htm">Output()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/error.htm b/fpdf/doc/error.htm new file mode 100644 index 0000000..e0097c2 --- /dev/null +++ b/fpdf/doc/error.htm @@ -0,0 +1,25 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Error</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Error</h1> +<code>Error(<b>string</b> msg)</code> +<h2>Description</h2> +This method is automatically called in case of fatal error; it simply outputs the message +and halts the execution. An inherited class may override it to customize the error handling +but should always halt the script, or the resulting document would probably be invalid. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>msg</code></dt> +<dd> +The error message. +</dd> +</dl> +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/footer.htm b/fpdf/doc/footer.htm new file mode 100644 index 0000000..0bbc12f --- /dev/null +++ b/fpdf/doc/footer.htm @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Footer</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Footer</h1> +<code>Footer()</code> +<h2>Description</h2> +This method is used to render the page footer. It is automatically called by AddPage() and +Close() and should not be called directly by the application. The implementation in FPDF is +empty, so you have to subclass it and override the method if you want a specific processing. +<h2>Example</h2> +<div class="doc-source"> +<pre><code>class PDF extends FPDF +{ +function Footer() +{ + // Go to 1.5 cm from bottom + $this-&gt;SetY(-15); + // Select Arial italic 8 + $this-&gt;SetFont('Arial','I',8); + // Print centered page number + $this-&gt;Cell(0,10,'Page '.$this-&gt;PageNo(),0,0,'C'); +} +}</code></pre> +</div> +<h2>See also</h2> +<a href="header.htm">Header()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/fpdf.htm b/fpdf/doc/fpdf.htm new file mode 100644 index 0000000..cbffba0 --- /dev/null +++ b/fpdf/doc/fpdf.htm @@ -0,0 +1,63 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>FPDF</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>FPDF</h1> +<code>FPDF([<b>string</b> orientation [, <b>string</b> unit [, <b>mixed</b> size]]])</code> +<h2>Description</h2> +This is the class constructor. It allows to set up the page size, the orientation and the +unit of measure used in all methods (except for font sizes). +<h2>Parameters</h2> +<dl class="param"> +<dt><code>orientation</code></dt> +<dd> +Default page orientation. Possible values are (case insensitive): +<ul> +<li><code>P</code> or <code>Portrait</code></li> +<li><code>L</code> or <code>Landscape</code></li> +</ul> +Default value is <code>P</code>. +</dd> +<dt><code>unit</code></dt> +<dd> +User unit. Possible values are: +<ul> +<li><code>pt</code>: point</li> +<li><code>mm</code>: millimeter</li> +<li><code>cm</code>: centimeter</li> +<li><code>in</code>: inch</li> +</ul> +A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This +is a very common unit in typography; font sizes are expressed in that unit. +<br> +<br> +Default value is <code>mm</code>. +</dd> +<dt><code>size</code></dt> +<dd> +The size used for pages. It can be either one of the following values (case insensitive): +<ul> +<li><code>A3</code></li> +<li><code>A4</code></li> +<li><code>A5</code></li> +<li><code>Letter</code></li> +<li><code>Legal</code></li> +</ul> +or an array containing the width and the height (expressed in the unit given by <code>unit</code>).<br> +<br> +Default value is <code>A4</code>. +</dd> +</dl> +<h2>Example</h2> +Example with a custom 100x150 mm page size: +<div class="doc-source"> +<pre><code>$pdf = new FPDF('P','mm',array(100,150));</code></pre> +</div> +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/getstringwidth.htm b/fpdf/doc/getstringwidth.htm new file mode 100644 index 0000000..38b4875 --- /dev/null +++ b/fpdf/doc/getstringwidth.htm @@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>GetStringWidth</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>GetStringWidth</h1> +<code><b>float</b> GetStringWidth(<b>string</b> s)</code> +<h2>Description</h2> +Returns the length of a string in user unit. A font must be selected. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>s</code></dt> +<dd> +The string whose length is to be computed. +</dd> +</dl> +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/getx.htm b/fpdf/doc/getx.htm new file mode 100644 index 0000000..401447e --- /dev/null +++ b/fpdf/doc/getx.htm @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>GetX</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>GetX</h1> +<code><b>float</b> GetX()</code> +<h2>Description</h2> +Returns the abscissa of the current position. +<h2>See also</h2> +<a href="setx.htm">SetX()</a>, +<a href="gety.htm">GetY()</a>, +<a href="sety.htm">SetY()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/gety.htm b/fpdf/doc/gety.htm new file mode 100644 index 0000000..bee0526 --- /dev/null +++ b/fpdf/doc/gety.htm @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>GetY</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>GetY</h1> +<code><b>float</b> GetY()</code> +<h2>Description</h2> +Returns the ordinate of the current position. +<h2>See also</h2> +<a href="sety.htm">SetY()</a>, +<a href="getx.htm">GetX()</a>, +<a href="setx.htm">SetX()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/header.htm b/fpdf/doc/header.htm new file mode 100644 index 0000000..b9f048b --- /dev/null +++ b/fpdf/doc/header.htm @@ -0,0 +1,37 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Header</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Header</h1> +<code>Header()</code> +<h2>Description</h2> +This method is used to render the page header. It is automatically called by AddPage() and +should not be called directly by the application. The implementation in FPDF is empty, so +you have to subclass it and override the method if you want a specific processing. +<h2>Example</h2> +<div class="doc-source"> +<pre><code>class PDF extends FPDF +{ +function Header() +{ + // Select Arial bold 15 + $this-&gt;SetFont('Arial','B',15); + // Move to the right + $this-&gt;Cell(80); + // Framed title + $this-&gt;Cell(30,10,'Title',1,0,'C'); + // Line break + $this-&gt;Ln(20); +} +}</code></pre> +</div> +<h2>See also</h2> +<a href="footer.htm">Footer()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/image.htm b/fpdf/doc/image.htm new file mode 100644 index 0000000..c550950 --- /dev/null +++ b/fpdf/doc/image.htm @@ -0,0 +1,99 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Image</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Image</h1> +<code>Image(<b>string</b> file [, <b>float</b> x [, <b>float</b> y [, <b>float</b> w [, <b>float</b> h [, <b>string</b> type [, <b>mixed</b> link]]]]]])</code> +<h2>Description</h2> +Puts an image. The size it will take on the page can be specified in different ways: +<ul> +<li>explicit width and height (expressed in user unit or dpi)</li> +<li>one explicit dimension, the other being calculated automatically in order to keep the original proportions</li> +<li>no explicit dimension, in which case the image is put at 96 dpi</li> +</ul> +Supported formats are JPEG, PNG and GIF. The GD extension is required for GIF. +<br> +<br> +For JPEGs, all flavors are allowed: +<ul> +<li>gray scales</li> +<li>true colors (24 bits)</li> +<li>CMYK (32 bits)</li> +</ul> +For PNGs, are allowed: +<ul> +<li>gray scales on at most 8 bits (256 levels)</li> +<li>indexed colors</li> +<li>true colors (24 bits)</li> +</ul> +For GIFs: in case of an animated GIF, only the first frame is displayed.<br> +<br> +Transparency is supported.<br> +<br> +The format can be specified explicitly or inferred from the file extension.<br> +<br> +It is possible to put a link on the image.<br> +<br> +Remark: if an image is used several times, only one copy is embedded in the file. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>file</code></dt> +<dd> +Path or URL of the image. +</dd> +<dt><code>x</code></dt> +<dd> +Abscissa of the upper-left corner. If not specified or equal to <code>null</code>, the current abscissa +is used. +</dd> +<dt><code>y</code></dt> +<dd> +Ordinate of the upper-left corner. If not specified or equal to <code>null</code>, the current ordinate +is used; moreover, a page break is triggered first if necessary (in case automatic page breaking is enabled) +and, after the call, the current ordinate is moved to the bottom of the image. +</dd> +<dt><code>w</code></dt> +<dd> +Width of the image in the page. There are three cases: +<ul> +<li>If the value is positive, it represents the width in user unit</li> +<li>If the value is negative, the absolute value represents the horizontal resolution in dpi</li> +<li>If the value is not specified or equal to zero, it is automatically calculated</li> +</ul> +</dd> +<dt><code>h</code></dt> +<dd> +Height of the image in the page. There are three cases: +<ul> +<li>If the value is positive, it represents the height in user unit</li> +<li>If the value is negative, the absolute value represents the vertical resolution in dpi</li> +<li>If the value is not specified or equal to zero, it is automatically calculated</li> +</ul> +</dd> +<dt><code>type</code></dt> +<dd> +Image format. Possible values are (case insensitive): <code>JPG</code>, <code>JPEG</code>, <code>PNG</code> and <code>GIF</code>. +If not specified, the type is inferred from the file extension. +</dd> +<dt><code>link</code></dt> +<dd> +URL or identifier returned by AddLink(). +</dd> +</dl> +<h2>Example</h2> +<div class="doc-source"> +<pre><code>// Insert a logo in the top-left corner at 300 dpi +$pdf-&gt;Image('logo.png',10,10,-300); +// Insert a dynamic image from a URL +$pdf-&gt;Image('http://chart.googleapis.com/chart?cht=p3&amp;chd=t:60,40&amp;chs=250x100&amp;chl=Hello|World',60,30,90,0,'PNG');</code></pre> +</div> +<h2>See also</h2> +<a href="addlink.htm">AddLink()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/index.htm b/fpdf/doc/index.htm new file mode 100644 index 0000000..143ee70 --- /dev/null +++ b/fpdf/doc/index.htm @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>FPDF 1.7 Reference Manual</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>FPDF 1.7 Reference Manual</h1> +<a href="acceptpagebreak.htm">AcceptPageBreak</a> - accept or not automatic page break<br> +<a href="addfont.htm">AddFont</a> - add a new font<br> +<a href="addlink.htm">AddLink</a> - create an internal link<br> +<a href="addpage.htm">AddPage</a> - add a new page<br> +<a href="aliasnbpages.htm">AliasNbPages</a> - define an alias for number of pages<br> +<a href="cell.htm">Cell</a> - print a cell<br> +<a href="close.htm">Close</a> - terminate the document<br> +<a href="error.htm">Error</a> - fatal error<br> +<a href="footer.htm">Footer</a> - page footer<br> +<a href="fpdf.htm">FPDF</a> - constructor<br> +<a href="getstringwidth.htm">GetStringWidth</a> - compute string length<br> +<a href="getx.htm">GetX</a> - get current x position<br> +<a href="gety.htm">GetY</a> - get current y position<br> +<a href="header.htm">Header</a> - page header<br> +<a href="image.htm">Image</a> - output an image<br> +<a href="line.htm">Line</a> - draw a line<br> +<a href="link.htm">Link</a> - put a link<br> +<a href="ln.htm">Ln</a> - line break<br> +<a href="multicell.htm">MultiCell</a> - print text with line breaks<br> +<a href="output.htm">Output</a> - save or send the document<br> +<a href="pageno.htm">PageNo</a> - page number<br> +<a href="rect.htm">Rect</a> - draw a rectangle<br> +<a href="setauthor.htm">SetAuthor</a> - set the document author<br> +<a href="setautopagebreak.htm">SetAutoPageBreak</a> - set the automatic page breaking mode<br> +<a href="setcompression.htm">SetCompression</a> - turn compression on or off<br> +<a href="setcreator.htm">SetCreator</a> - set document creator<br> +<a href="setdisplaymode.htm">SetDisplayMode</a> - set display mode<br> +<a href="setdrawcolor.htm">SetDrawColor</a> - set drawing color<br> +<a href="setfillcolor.htm">SetFillColor</a> - set filling color<br> +<a href="setfont.htm">SetFont</a> - set font<br> +<a href="setfontsize.htm">SetFontSize</a> - set font size<br> +<a href="setkeywords.htm">SetKeywords</a> - associate keywords with document<br> +<a href="setleftmargin.htm">SetLeftMargin</a> - set left margin<br> +<a href="setlinewidth.htm">SetLineWidth</a> - set line width<br> +<a href="setlink.htm">SetLink</a> - set internal link destination<br> +<a href="setmargins.htm">SetMargins</a> - set margins<br> +<a href="setrightmargin.htm">SetRightMargin</a> - set right margin<br> +<a href="setsubject.htm">SetSubject</a> - set document subject<br> +<a href="settextcolor.htm">SetTextColor</a> - set text color<br> +<a href="settitle.htm">SetTitle</a> - set document title<br> +<a href="settopmargin.htm">SetTopMargin</a> - set top margin<br> +<a href="setx.htm">SetX</a> - set current x position<br> +<a href="setxy.htm">SetXY</a> - set current x and y positions<br> +<a href="sety.htm">SetY</a> - set current y position<br> +<a href="text.htm">Text</a> - print a string<br> +<a href="write.htm">Write</a> - print flowing text<br> +</body> +</html> diff --git a/fpdf/doc/line.htm b/fpdf/doc/line.htm new file mode 100644 index 0000000..ceb4e07 --- /dev/null +++ b/fpdf/doc/line.htm @@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Line</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Line</h1> +<code>Line(<b>float</b> x1, <b>float</b> y1, <b>float</b> x2, <b>float</b> y2)</code> +<h2>Description</h2> +Draws a line between two points. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>x1</code></dt> +<dd> +Abscissa of first point. +</dd> +<dt><code>y1</code></dt> +<dd> +Ordinate of first point. +</dd> +<dt><code>x2</code></dt> +<dd> +Abscissa of second point. +</dd> +<dt><code>y2</code></dt> +<dd> +Ordinate of second point. +</dd> +</dl> +<h2>See also</h2> +<a href="setlinewidth.htm">SetLineWidth()</a>, +<a href="setdrawcolor.htm">SetDrawColor()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/link.htm b/fpdf/doc/link.htm new file mode 100644 index 0000000..66f28d6 --- /dev/null +++ b/fpdf/doc/link.htm @@ -0,0 +1,46 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Link</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Link</h1> +<code>Link(<b>float</b> x, <b>float</b> y, <b>float</b> w, <b>float</b> h, <b>mixed</b> link)</code> +<h2>Description</h2> +Puts a link on a rectangular area of the page. Text or image links are generally put via Cell(), +Write() or Image(), but this method can be useful for instance to define a clickable area inside +an image. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>x</code></dt> +<dd> +Abscissa of the upper-left corner of the rectangle. +</dd> +<dt><code>y</code></dt> +<dd> +Ordinate of the upper-left corner of the rectangle. +</dd> +<dt><code>w</code></dt> +<dd> +Width of the rectangle. +</dd> +<dt><code>h</code></dt> +<dd> +Height of the rectangle. +</dd> +<dt><code>link</code></dt> +<dd> +URL or identifier returned by AddLink(). +</dd> +</dl> +<h2>See also</h2> +<a href="addlink.htm">AddLink()</a>, +<a href="cell.htm">Cell()</a>, +<a href="write.htm">Write()</a>, +<a href="image.htm">Image()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/ln.htm b/fpdf/doc/ln.htm new file mode 100644 index 0000000..6778204 --- /dev/null +++ b/fpdf/doc/ln.htm @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Ln</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Ln</h1> +<code>Ln([<b>float</b> h])</code> +<h2>Description</h2> +Performs a line break. The current abscissa goes back to the left margin and the ordinate +increases by the amount passed in parameter. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>h</code></dt> +<dd> +The height of the break. +<br> +By default, the value equals the height of the last printed cell. +</dd> +</dl> +<h2>See also</h2> +<a href="cell.htm">Cell()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/multicell.htm b/fpdf/doc/multicell.htm new file mode 100644 index 0000000..5c3543f --- /dev/null +++ b/fpdf/doc/multicell.htm @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>MultiCell</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>MultiCell</h1> +<code>MultiCell(<b>float</b> w, <b>float</b> h, <b>string</b> txt [, <b>mixed</b> border [, <b>string</b> align [, <b>boolean</b> fill]]])</code> +<h2>Description</h2> +This method allows printing text with line breaks. They can be automatic (as soon as the +text reaches the right border of the cell) or explicit (via the \n character). As many cells +as necessary are output, one below the other. +<br> +Text can be aligned, centered or justified. The cell block can be framed and the background +painted. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>w</code></dt> +<dd> +Width of cells. If <code>0</code>, they extend up to the right margin of the page. +</dd> +<dt><code>h</code></dt> +<dd> +Height of cells. +</dd> +<dt><code>txt</code></dt> +<dd> +String to print. +</dd> +<dt><code>border</code></dt> +<dd> +Indicates if borders must be drawn around the cell block. The value can be either a number: +<ul> +<li><code>0</code>: no border</li> +<li><code>1</code>: frame</li> +</ul> +or a string containing some or all of the following characters (in any order): +<ul> +<li><code>L</code>: left</li> +<li><code>T</code>: top</li> +<li><code>R</code>: right</li> +<li><code>B</code>: bottom</li> +</ul> +Default value: <code>0</code>. +</dd> +<dt><code>align</code></dt> +<dd> +Sets the text alignment. Possible values are: +<ul> +<li><code>L</code>: left alignment</li> +<li><code>C</code>: center</li> +<li><code>R</code>: right alignment</li> +<li><code>J</code>: justification (default value)</li> +</ul> +</dd> +<dt><code>fill</code></dt> +<dd> +Indicates if the cell background must be painted (<code>true</code>) or transparent (<code>false</code>). +Default value: <code>false</code>. +</dd> +</dl> +<h2>See also</h2> +<a href="setfont.htm">SetFont()</a>, +<a href="setdrawcolor.htm">SetDrawColor()</a>, +<a href="setfillcolor.htm">SetFillColor()</a>, +<a href="settextcolor.htm">SetTextColor()</a>, +<a href="setlinewidth.htm">SetLineWidth()</a>, +<a href="cell.htm">Cell()</a>, +<a href="write.htm">Write()</a>, +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/output.htm b/fpdf/doc/output.htm new file mode 100644 index 0000000..f627b82 --- /dev/null +++ b/fpdf/doc/output.htm @@ -0,0 +1,42 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Output</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Output</h1> +<code><b>string</b> Output([<b>string</b> name, <b>string</b> dest])</code> +<h2>Description</h2> +Send the document to a given destination: browser, file or string. In the case of browser, the +plug-in may be used (if present) or a download ("Save as" dialog box) may be forced. +<br> +The method first calls Close() if necessary to terminate the document. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>name</code></dt> +<dd> +The name of the file. If not specified, the document will be sent to the browser +(destination <code>I</code>) with the name <code>doc.pdf</code>. +</dd> +<dt><code>dest</code></dt> +<dd> +Destination where to send the document. It can take one of the following values: +<ul> +<li><code>I</code>: send the file inline to the browser. The plug-in is used if available. +The name given by <code>name</code> is used when one selects the "Save as" option on the +link generating the PDF.</li> +<li><code>D</code>: send to the browser and force a file download with the name given by +<code>name</code>.</li> +<li><code>F</code>: save to a local file with the name given by <code>name</code> (may include a path).</li> +<li><code>S</code>: return the document as a string. <code>name</code> is ignored.</li> +</ul> +</dd> +</dl> +<h2>See also</h2> +<a href="close.htm">Close()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/pageno.htm b/fpdf/doc/pageno.htm new file mode 100644 index 0000000..c917d66 --- /dev/null +++ b/fpdf/doc/pageno.htm @@ -0,0 +1,18 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>PageNo</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>PageNo</h1> +<code><b>int</b> PageNo()</code> +<h2>Description</h2> +Returns the current page number. +<h2>See also</h2> +<a href="aliasnbpages.htm">AliasNbPages()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/rect.htm b/fpdf/doc/rect.htm new file mode 100644 index 0000000..ab3d017 --- /dev/null +++ b/fpdf/doc/rect.htm @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Rect</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Rect</h1> +<code>Rect(<b>float</b> x, <b>float</b> y, <b>float</b> w, <b>float</b> h [, <b>string</b> style])</code> +<h2>Description</h2> +Outputs a rectangle. It can be drawn (border only), filled (with no border) or both. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>x</code></dt> +<dd> +Abscissa of upper-left corner. +</dd> +<dt><code>y</code></dt> +<dd> +Ordinate of upper-left corner. +</dd> +<dt><code>w</code></dt> +<dd> +Width. +</dd> +<dt><code>h</code></dt> +<dd> +Height. +</dd> +<dt><code>style</code></dt> +<dd> +Style of rendering. Possible values are: +<ul> +<li><code>D</code> or empty string: draw. This is the default value.</li> +<li><code>F</code>: fill</li> +<li><code>DF</code> or <code>FD</code>: draw and fill</li> +</ul> +</dd> +</dl> +<h2>See also</h2> +<a href="setlinewidth.htm">SetLineWidth()</a>, +<a href="setdrawcolor.htm">SetDrawColor()</a>, +<a href="setfillcolor.htm">SetFillColor()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setauthor.htm b/fpdf/doc/setauthor.htm new file mode 100644 index 0000000..6cb3754 --- /dev/null +++ b/fpdf/doc/setauthor.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetAuthor</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetAuthor</h1> +<code>SetAuthor(<b>string</b> author [, <b>boolean</b> isUTF8])</code> +<h2>Description</h2> +Defines the author of the document. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>author</code></dt> +<dd> +The name of the author. +</dd> +<dt><code>isUTF8</code></dt> +<dd> +Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br> +Default value: <code>false</code>. +</dd> +</dl> +<h2>See also</h2> +<a href="setcreator.htm">SetCreator()</a>, +<a href="setkeywords.htm">SetKeywords()</a>, +<a href="setsubject.htm">SetSubject()</a>, +<a href="settitle.htm">SetTitle()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setautopagebreak.htm b/fpdf/doc/setautopagebreak.htm new file mode 100644 index 0000000..80291a2 --- /dev/null +++ b/fpdf/doc/setautopagebreak.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetAutoPageBreak</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetAutoPageBreak</h1> +<code>SetAutoPageBreak(<b>boolean</b> auto [, <b>float</b> margin])</code> +<h2>Description</h2> +Enables or disables the automatic page breaking mode. When enabling, the second parameter is +the distance from the bottom of the page that defines the triggering limit. By default, the +mode is on and the margin is 2 cm. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>auto</code></dt> +<dd> +Boolean indicating if mode should be on or off. +</dd> +<dt><code>margin</code></dt> +<dd> +Distance from the bottom of the page. +</dd> +</dl> +<h2>See also</h2> +<a href="cell.htm">Cell()</a>, +<a href="multicell.htm">MultiCell()</a>, +<a href="acceptpagebreak.htm">AcceptPageBreak()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setcompression.htm b/fpdf/doc/setcompression.htm new file mode 100644 index 0000000..ec506d9 --- /dev/null +++ b/fpdf/doc/setcompression.htm @@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetCompression</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetCompression</h1> +<code>SetCompression(<b>boolean</b> compress)</code> +<h2>Description</h2> +Activates or deactivates page compression. When activated, the internal representation of +each page is compressed, which leads to a compression ratio of about 2 for the resulting +document. +<br> +Compression is on by default. +<br> +<br> +<strong>Note:</strong> the Zlib extension is required for this feature. If not present, compression +will be turned off. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>compress</code></dt> +<dd> +Boolean indicating if compression must be enabled. +</dd> +</dl> +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setcreator.htm b/fpdf/doc/setcreator.htm new file mode 100644 index 0000000..19f820c --- /dev/null +++ b/fpdf/doc/setcreator.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetCreator</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetCreator</h1> +<code>SetCreator(<b>string</b> creator [, <b>boolean</b> isUTF8])</code> +<h2>Description</h2> +Defines the creator of the document. This is typically the name of the application that +generates the PDF. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>creator</code></dt> +<dd> +The name of the creator. +</dd> +<dt><code>isUTF8</code></dt> +<dd> +Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br> +Default value: <code>false</code>. +</dd> +</dl> +<h2>See also</h2> +<a href="setauthor.htm">SetAuthor()</a>, +<a href="setkeywords.htm">SetKeywords()</a>, +<a href="setsubject.htm">SetSubject()</a>, +<a href="settitle.htm">SetTitle()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setdisplaymode.htm b/fpdf/doc/setdisplaymode.htm new file mode 100644 index 0000000..e9deb56 --- /dev/null +++ b/fpdf/doc/setdisplaymode.htm @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetDisplayMode</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetDisplayMode</h1> +<code>SetDisplayMode(<b>mixed</b> zoom [, <b>string</b> layout])</code> +<h2>Description</h2> +Defines the way the document is to be displayed by the viewer. The zoom level can be set: pages can be +displayed entirely on screen, occupy the full width of the window, use real size, be scaled by a +specific zooming factor or use viewer default (configured in the Preferences menu of Adobe Reader). +The page layout can be specified too: single at once, continuous display, two columns or viewer +default. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>zoom</code></dt> +<dd> +The zoom to use. It can be one of the following string values: +<ul> +<li><code>fullpage</code>: displays the entire page on screen</li> +<li><code>fullwidth</code>: uses maximum width of window</li> +<li><code>real</code>: uses real size (equivalent to 100% zoom)</li> +<li><code>default</code>: uses viewer default mode</li> +</ul> +or a number indicating the zooming factor to use. +</dd> +<dt><code>layout</code></dt> +<dd> +The page layout. Possible values are: +<ul> +<li><code>single</code>: displays one page at once</li> +<li><code>continuous</code>: displays pages continuously</li> +<li><code>two</code>: displays two pages on two columns</li> +<li><code>default</code>: uses viewer default mode</li> +</ul> +Default value is <code>default</code>. +</dd> +</dl> +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setdrawcolor.htm b/fpdf/doc/setdrawcolor.htm new file mode 100644 index 0000000..1a6c736 --- /dev/null +++ b/fpdf/doc/setdrawcolor.htm @@ -0,0 +1,41 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetDrawColor</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetDrawColor</h1> +<code>SetDrawColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code> +<h2>Description</h2> +Defines the color used for all drawing operations (lines, rectangles and cell borders). It +can be expressed in RGB components or gray scale. The method can be called before the first +page is created and the value is retained from page to page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>r</code></dt> +<dd> +If <code>g</code> et <code>b</code> are given, red component; if not, indicates the gray level. +Value between 0 and 255. +</dd> +<dt><code>g</code></dt> +<dd> +Green component (between 0 and 255). +</dd> +<dt><code>b</code></dt> +<dd> +Blue component (between 0 and 255). +</dd> +</dl> +<h2>See also</h2> +<a href="setfillcolor.htm">SetFillColor()</a>, +<a href="settextcolor.htm">SetTextColor()</a>, +<a href="line.htm">Line()</a>, +<a href="rect.htm">Rect()</a>, +<a href="cell.htm">Cell()</a>, +<a href="multicell.htm">MultiCell()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setfillcolor.htm b/fpdf/doc/setfillcolor.htm new file mode 100644 index 0000000..76f8660 --- /dev/null +++ b/fpdf/doc/setfillcolor.htm @@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetFillColor</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetFillColor</h1> +<code>SetFillColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code> +<h2>Description</h2> +Defines the color used for all filling operations (filled rectangles and cell backgrounds). +It can be expressed in RGB components or gray scale. The method can be called before the first +page is created and the value is retained from page to page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>r</code></dt> +<dd> +If <code>g</code> and <code>b</code> are given, red component; if not, indicates the gray level. +Value between 0 and 255. +</dd> +<dt><code>g</code></dt> +<dd> +Green component (between 0 and 255). +</dd> +<dt><code>b</code></dt> +<dd> +Blue component (between 0 and 255). +</dd> +</dl> +<h2>See also</h2> +<a href="setdrawcolor.htm">SetDrawColor()</a>, +<a href="settextcolor.htm">SetTextColor()</a>, +<a href="rect.htm">Rect()</a>, +<a href="cell.htm">Cell()</a>, +<a href="multicell.htm">MultiCell()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setfont.htm b/fpdf/doc/setfont.htm new file mode 100644 index 0000000..6a97979 --- /dev/null +++ b/fpdf/doc/setfont.htm @@ -0,0 +1,92 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetFont</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetFont</h1> +<code>SetFont(<b>string</b> family [, <b>string</b> style [, <b>float</b> size]])</code> +<h2>Description</h2> +Sets the font used to print character strings. It is mandatory to call this method +at least once before printing text or the resulting document would not be valid. +<br> +The font can be either a standard one or a font added via the AddFont() method. Standard fonts +use the Windows encoding cp1252 (Western Europe). +<br> +The method can be called before the first page is created and the font is kept from page +to page. +<br> +If you just wish to change the current font size, it is simpler to call SetFontSize(). +<br> +<br> +<strong>Note:</strong> the font definition files must be accessible. They are searched successively in: +<ul> +<li>The directory defined by the <code>FPDF_FONTPATH</code> constant (if this constant is defined)</li> +<li>The <code>font</code> directory located in the same directory as <code>fpdf.php</code> (if it exists)</li> +<li>The directories accessible through <code>include()</code></li> +</ul> +Example using <code>FPDF_FONTPATH</code>: +<div class="doc-source"> +<pre><code>define('FPDF_FONTPATH','/home/www/font'); +require('fpdf.php');</code></pre> +</div> +If the file corresponding to the requested font is not found, the error "Could not include font +definition file" is raised. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>family</code></dt> +<dd> +Family font. It can be either a name defined by AddFont() or one of the standard families (case +insensitive): +<ul> +<li><code>Courier</code> (fixed-width)</li> +<li><code>Helvetica</code> or <code>Arial</code> (synonymous; sans serif)</li> +<li><code>Times</code> (serif)</li> +<li><code>Symbol</code> (symbolic)</li> +<li><code>ZapfDingbats</code> (symbolic)</li> +</ul> +It is also possible to pass an empty string. In that case, the current family is kept. +</dd> +<dt><code>style</code></dt> +<dd> +Font style. Possible values are (case insensitive): +<ul> +<li>empty string: regular</li> +<li><code>B</code>: bold</li> +<li><code>I</code>: italic</li> +<li><code>U</code>: underline</li> +</ul> +or any combination. The default value is regular. +Bold and italic styles do not apply to <code>Symbol</code> and <code>ZapfDingbats</code>. +</dd> +<dt><code>size</code></dt> +<dd> +Font size in points. +<br> +The default value is the current size. If no size has been specified since the beginning of +the document, the value taken is 12. +</dd> +</dl> +<h2>Example</h2> +<div class="doc-source"> +<pre><code>// Times regular 12 +$pdf-&gt;SetFont('Times'); +// Arial bold 14 +$pdf-&gt;SetFont('Arial','B',14); +// Removes bold +$pdf-&gt;SetFont(''); +// Times bold, italic and underlined 14 +$pdf-&gt;SetFont('Times','BIU');</code></pre> +</div> +<h2>See also</h2> +<a href="addfont.htm">AddFont()</a>, +<a href="setfontsize.htm">SetFontSize()</a>, +<a href="cell.htm">Cell()</a>, +<a href="multicell.htm">MultiCell()</a>, +<a href="write.htm">Write()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setfontsize.htm b/fpdf/doc/setfontsize.htm new file mode 100644 index 0000000..54fd899 --- /dev/null +++ b/fpdf/doc/setfontsize.htm @@ -0,0 +1,25 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetFontSize</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetFontSize</h1> +<code>SetFontSize(<b>float</b> size)</code> +<h2>Description</h2> +Defines the size of the current font. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>size</code></dt> +<dd> +The size (in points). +</dd> +</dl> +<h2>See also</h2> +<a href="setfont.htm">SetFont()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setkeywords.htm b/fpdf/doc/setkeywords.htm new file mode 100644 index 0000000..02eb466 --- /dev/null +++ b/fpdf/doc/setkeywords.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetKeywords</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetKeywords</h1> +<code>SetKeywords(<b>string</b> keywords [, <b>boolean</b> isUTF8])</code> +<h2>Description</h2> +Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>keywords</code></dt> +<dd> +The list of keywords. +</dd> +<dt><code>isUTF8</code></dt> +<dd> +Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br> +Default value: <code>false</code>. +</dd> +</dl> +<h2>See also</h2> +<a href="setauthor.htm">SetAuthor()</a>, +<a href="setcreator.htm">SetCreator()</a>, +<a href="setsubject.htm">SetSubject()</a>, +<a href="settitle.htm">SetTitle()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setleftmargin.htm b/fpdf/doc/setleftmargin.htm new file mode 100644 index 0000000..500c17a --- /dev/null +++ b/fpdf/doc/setleftmargin.htm @@ -0,0 +1,30 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetLeftMargin</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetLeftMargin</h1> +<code>SetLeftMargin(<b>float</b> margin)</code> +<h2>Description</h2> +Defines the left margin. The method can be called before creating the first page. +<br> +If the current abscissa gets out of page, it is brought back to the margin. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>margin</code></dt> +<dd> +The margin. +</dd> +</dl> +<h2>See also</h2> +<a href="settopmargin.htm">SetTopMargin()</a>, +<a href="setrightmargin.htm">SetRightMargin()</a>, +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>, +<a href="setmargins.htm">SetMargins()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setlinewidth.htm b/fpdf/doc/setlinewidth.htm new file mode 100644 index 0000000..fa15b7d --- /dev/null +++ b/fpdf/doc/setlinewidth.htm @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetLineWidth</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetLineWidth</h1> +<code>SetLineWidth(<b>float</b> width)</code> +<h2>Description</h2> +Defines the line width. By default, the value equals 0.2 mm. The method can be called before +the first page is created and the value is retained from page to page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>width</code></dt> +<dd> +The width. +</dd> +</dl> +<h2>See also</h2> +<a href="line.htm">Line()</a>, +<a href="rect.htm">Rect()</a>, +<a href="cell.htm">Cell()</a>, +<a href="multicell.htm">MultiCell()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setlink.htm b/fpdf/doc/setlink.htm new file mode 100644 index 0000000..654c25e --- /dev/null +++ b/fpdf/doc/setlink.htm @@ -0,0 +1,34 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetLink</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetLink</h1> +<code>SetLink(<b>int</b> link [, <b>float</b> y [, <b>int</b> page]])</code> +<h2>Description</h2> +Defines the page and position a link points to. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>link</code></dt> +<dd> +The link identifier returned by AddLink(). +</dd> +<dt><code>y</code></dt> +<dd> +Ordinate of target position; <code>-1</code> indicates the current position. +The default value is <code>0</code> (top of page). +</dd> +<dt><code>page</code></dt> +<dd> +Number of target page; <code>-1</code> indicates the current page. This is the default value. +</dd> +</dl> +<h2>See also</h2> +<a href="addlink.htm">AddLink()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setmargins.htm b/fpdf/doc/setmargins.htm new file mode 100644 index 0000000..eaa1701 --- /dev/null +++ b/fpdf/doc/setmargins.htm @@ -0,0 +1,37 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetMargins</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetMargins</h1> +<code>SetMargins(<b>float</b> left, <b>float</b> top [, <b>float</b> right])</code> +<h2>Description</h2> +Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change +them. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>left</code></dt> +<dd> +Left margin. +</dd> +<dt><code>top</code></dt> +<dd> +Top margin. +</dd> +<dt><code>right</code></dt> +<dd> +Right margin. Default value is the left one. +</dd> +</dl> +<h2>See also</h2> +<a href="setleftmargin.htm">SetLeftMargin()</a>, +<a href="settopmargin.htm">SetTopMargin()</a>, +<a href="setrightmargin.htm">SetRightMargin()</a>, +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setrightmargin.htm b/fpdf/doc/setrightmargin.htm new file mode 100644 index 0000000..ef0d942 --- /dev/null +++ b/fpdf/doc/setrightmargin.htm @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetRightMargin</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetRightMargin</h1> +<code>SetRightMargin(<b>float</b> margin)</code> +<h2>Description</h2> +Defines the right margin. The method can be called before creating the first page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>margin</code></dt> +<dd> +The margin. +</dd> +</dl> +<h2>See also</h2> +<a href="setleftmargin.htm">SetLeftMargin()</a>, +<a href="settopmargin.htm">SetTopMargin()</a>, +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>, +<a href="setmargins.htm">SetMargins()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setsubject.htm b/fpdf/doc/setsubject.htm new file mode 100644 index 0000000..64a27d8 --- /dev/null +++ b/fpdf/doc/setsubject.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetSubject</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetSubject</h1> +<code>SetSubject(<b>string</b> subject [, <b>boolean</b> isUTF8])</code> +<h2>Description</h2> +Defines the subject of the document. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>subject</code></dt> +<dd> +The subject. +</dd> +<dt><code>isUTF8</code></dt> +<dd> +Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br> +Default value: <code>false</code>. +</dd> +</dl> +<h2>See also</h2> +<a href="setauthor.htm">SetAuthor()</a>, +<a href="setcreator.htm">SetCreator()</a>, +<a href="setkeywords.htm">SetKeywords()</a>, +<a href="settitle.htm">SetTitle()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/settextcolor.htm b/fpdf/doc/settextcolor.htm new file mode 100644 index 0000000..1772712 --- /dev/null +++ b/fpdf/doc/settextcolor.htm @@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetTextColor</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetTextColor</h1> +<code>SetTextColor(<b>int</b> r [, <b>int</b> g, <b>int</b> b])</code> +<h2>Description</h2> +Defines the color used for text. It can be expressed in RGB components or gray scale. The +method can be called before the first page is created and the value is retained from page to +page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>r</code></dt> +<dd> +If <code>g</code> et <code>b</code> are given, red component; if not, indicates the gray level. +Value between 0 and 255. +</dd> +<dt><code>g</code></dt> +<dd> +Green component (between 0 and 255). +</dd> +<dt><code>b</code></dt> +<dd> +Blue component (between 0 and 255). +</dd> +</dl> +<h2>See also</h2> +<a href="setdrawcolor.htm">SetDrawColor()</a>, +<a href="setfillcolor.htm">SetFillColor()</a>, +<a href="text.htm">Text()</a>, +<a href="cell.htm">Cell()</a>, +<a href="multicell.htm">MultiCell()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/settitle.htm b/fpdf/doc/settitle.htm new file mode 100644 index 0000000..741f4c6 --- /dev/null +++ b/fpdf/doc/settitle.htm @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetTitle</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetTitle</h1> +<code>SetTitle(<b>string</b> title [, <b>boolean</b> isUTF8])</code> +<h2>Description</h2> +Defines the title of the document. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>title</code></dt> +<dd> +The title. +</dd> +<dt><code>isUTF8</code></dt> +<dd> +Indicates if the string is encoded in ISO-8859-1 (<code>false</code>) or UTF-8 (<code>true</code>).<br> +Default value: <code>false</code>. +</dd> +</dl> +<h2>See also</h2> +<a href="setauthor.htm">SetAuthor()</a>, +<a href="setcreator.htm">SetCreator()</a>, +<a href="setkeywords.htm">SetKeywords()</a>, +<a href="setsubject.htm">SetSubject()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/settopmargin.htm b/fpdf/doc/settopmargin.htm new file mode 100644 index 0000000..99339fc --- /dev/null +++ b/fpdf/doc/settopmargin.htm @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetTopMargin</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetTopMargin</h1> +<code>SetTopMargin(<b>float</b> margin)</code> +<h2>Description</h2> +Defines the top margin. The method can be called before creating the first page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>margin</code></dt> +<dd> +The margin. +</dd> +</dl> +<h2>See also</h2> +<a href="setleftmargin.htm">SetLeftMargin()</a>, +<a href="setrightmargin.htm">SetRightMargin()</a>, +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>, +<a href="setmargins.htm">SetMargins()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setx.htm b/fpdf/doc/setx.htm new file mode 100644 index 0000000..9336d76 --- /dev/null +++ b/fpdf/doc/setx.htm @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetX</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetX</h1> +<code>SetX(<b>float</b> x)</code> +<h2>Description</h2> +Defines the abscissa of the current position. If the passed value is negative, it is relative +to the right of the page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>x</code></dt> +<dd> +The value of the abscissa. +</dd> +</dl> +<h2>See also</h2> +<a href="getx.htm">GetX()</a>, +<a href="gety.htm">GetY()</a>, +<a href="sety.htm">SetY()</a>, +<a href="setxy.htm">SetXY()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/setxy.htm b/fpdf/doc/setxy.htm new file mode 100644 index 0000000..7e62fe3 --- /dev/null +++ b/fpdf/doc/setxy.htm @@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetXY</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetXY</h1> +<code>SetXY(<b>float</b> x, <b>float</b> y)</code> +<h2>Description</h2> +Defines the abscissa and ordinate of the current position. If the passed values are negative, +they are relative respectively to the right and bottom of the page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>x</code></dt> +<dd> +The value of the abscissa. +</dd> +<dt><code>y</code></dt> +<dd> +The value of the ordinate. +</dd> +</dl> +<h2>See also</h2> +<a href="setx.htm">SetX()</a>, +<a href="sety.htm">SetY()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/sety.htm b/fpdf/doc/sety.htm new file mode 100644 index 0000000..37435f6 --- /dev/null +++ b/fpdf/doc/sety.htm @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>SetY</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>SetY</h1> +<code>SetY(<b>float</b> y)</code> +<h2>Description</h2> +Moves the current abscissa back to the left margin and sets the ordinate. If the passed value +is negative, it is relative to the bottom of the page. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>y</code></dt> +<dd> +The value of the ordinate. +</dd> +</dl> +<h2>See also</h2> +<a href="getx.htm">GetX()</a>, +<a href="gety.htm">GetY()</a>, +<a href="setx.htm">SetX()</a>, +<a href="setxy.htm">SetXY()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/text.htm b/fpdf/doc/text.htm new file mode 100644 index 0000000..c79fa2d --- /dev/null +++ b/fpdf/doc/text.htm @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Text</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Text</h1> +<code>Text(<b>float</b> x, <b>float</b> y, <b>string</b> txt)</code> +<h2>Description</h2> +Prints a character string. The origin is on the left of the first character, on the baseline. +This method allows to place a string precisely on the page, but it is usually easier to use +Cell(), MultiCell() or Write() which are the standard methods to print text. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>x</code></dt> +<dd> +Abscissa of the origin. +</dd> +<dt><code>y</code></dt> +<dd> +Ordinate of the origin. +</dd> +<dt><code>txt</code></dt> +<dd> +String to print. +</dd> +</dl> +<h2>See also</h2> +<a href="setfont.htm">SetFont()</a>, +<a href="settextcolor.htm">SetTextColor()</a>, +<a href="cell.htm">Cell()</a>, +<a href="multicell.htm">MultiCell()</a>, +<a href="write.htm">Write()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/doc/write.htm b/fpdf/doc/write.htm new file mode 100644 index 0000000..c1c2e04 --- /dev/null +++ b/fpdf/doc/write.htm @@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Write</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Write</h1> +<code>Write(<b>float</b> h, <b>string</b> txt [, <b>mixed</b> link])</code> +<h2>Description</h2> +This method prints text from the current position. When the right margin is reached (or the \n +character is met) a line break occurs and text continues from the left margin. Upon method exit, +the current position is left just at the end of the text. +<br> +It is possible to put a link on the text. +<h2>Parameters</h2> +<dl class="param"> +<dt><code>h</code></dt> +<dd> +Line height. +</dd> +<dt><code>txt</code></dt> +<dd> +String to print. +</dd> +<dt><code>link</code></dt> +<dd> +URL or identifier returned by AddLink(). +</dd> +</dl> +<h2>Example</h2> +<div class="doc-source"> +<pre><code>// Begin with regular font +$pdf-&gt;SetFont('Arial','',14); +$pdf-&gt;Write(5,'Visit '); +// Then put a blue underlined link +$pdf-&gt;SetTextColor(0,0,255); +$pdf-&gt;SetFont('','U'); +$pdf-&gt;Write(5,'www.fpdf.org','http://www.fpdf.org');</code></pre> +</div> +<h2>See also</h2> +<a href="setfont.htm">SetFont()</a>, +<a href="settextcolor.htm">SetTextColor()</a>, +<a href="addlink.htm">AddLink()</a>, +<a href="multicell.htm">MultiCell()</a>, +<a href="setautopagebreak.htm">SetAutoPageBreak()</a>. +<hr style="margin-top:1.5em"> +<div style="text-align:center"><a href="index.htm">Index</a></div> +</body> +</html> diff --git a/fpdf/font/Calibri_b.php b/fpdf/font/Calibri_b.php new file mode 100644 index 0000000..f5a383d --- /dev/null +++ b/fpdf/font/Calibri_b.php @@ -0,0 +1,26 @@ +<?php +$type = 'TrueType'; +$name = 'Calibri-Bold'; +$desc = array('Ascent'=>750,'Descent'=>-250,'CapHeight'=>632,'Flags'=>32,'FontBBox'=>'[-493 -194 1239 952]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>507); +$up = -87; +$ut = 91; +$cw = array( + chr(0)=>507,chr(1)=>507,chr(2)=>507,chr(3)=>507,chr(4)=>507,chr(5)=>507,chr(6)=>507,chr(7)=>507,chr(8)=>507,chr(9)=>507,chr(10)=>507,chr(11)=>507,chr(12)=>507,chr(13)=>507,chr(14)=>507,chr(15)=>507,chr(16)=>507,chr(17)=>507,chr(18)=>507,chr(19)=>507,chr(20)=>507,chr(21)=>507, + chr(22)=>507,chr(23)=>507,chr(24)=>507,chr(25)=>507,chr(26)=>507,chr(27)=>507,chr(28)=>507,chr(29)=>507,chr(30)=>507,chr(31)=>507,' '=>226,'!'=>326,'"'=>438,'#'=>498,'$'=>507,'%'=>729,'&'=>705,'\''=>233,'('=>312,')'=>312,'*'=>498,'+'=>498, + ','=>258,'-'=>306,'.'=>267,'/'=>430,'0'=>507,'1'=>507,'2'=>507,'3'=>507,'4'=>507,'5'=>507,'6'=>507,'7'=>507,'8'=>507,'9'=>507,':'=>276,';'=>276,'<'=>498,'='=>498,'>'=>498,'?'=>463,'@'=>898,'A'=>606, + 'B'=>561,'C'=>529,'D'=>630,'E'=>488,'F'=>459,'G'=>637,'H'=>631,'I'=>267,'J'=>331,'K'=>547,'L'=>423,'M'=>874,'N'=>659,'O'=>676,'P'=>532,'Q'=>686,'R'=>563,'S'=>473,'T'=>495,'U'=>653,'V'=>591,'W'=>906, + 'X'=>551,'Y'=>520,'Z'=>478,'['=>325,'\\'=>430,']'=>325,'^'=>498,'_'=>498,'`'=>300,'a'=>494,'b'=>537,'c'=>418,'d'=>537,'e'=>503,'f'=>316,'g'=>474,'h'=>537,'i'=>246,'j'=>255,'k'=>480,'l'=>246,'m'=>813, + 'n'=>537,'o'=>538,'p'=>537,'q'=>537,'r'=>355,'s'=>399,'t'=>347,'u'=>537,'v'=>473,'w'=>745,'x'=>459,'y'=>474,'z'=>397,'{'=>344,'|'=>475,'}'=>344,'~'=>498,chr(127)=>507,chr(128)=>507,chr(129)=>507,chr(130)=>258,chr(131)=>507, + chr(132)=>435,chr(133)=>711,chr(134)=>498,chr(135)=>498,chr(136)=>507,chr(137)=>1062,chr(138)=>473,chr(139)=>344,chr(140)=>473,chr(141)=>495,chr(142)=>478,chr(143)=>478,chr(144)=>507,chr(145)=>258,chr(146)=>258,chr(147)=>435,chr(148)=>435,chr(149)=>498,chr(150)=>498,chr(151)=>905,chr(152)=>507,chr(153)=>720, + chr(154)=>399,chr(155)=>344,chr(156)=>399,chr(157)=>363,chr(158)=>397,chr(159)=>397,chr(160)=>226,chr(161)=>401,chr(162)=>385,chr(163)=>433,chr(164)=>498,chr(165)=>606,chr(166)=>498,chr(167)=>498,chr(168)=>415,chr(169)=>834,chr(170)=>473,chr(171)=>539,chr(172)=>498,chr(173)=>306,chr(174)=>507,chr(175)=>478, + chr(176)=>342,chr(177)=>498,chr(178)=>315,chr(179)=>264,chr(180)=>301,chr(181)=>563,chr(182)=>598,chr(183)=>268,chr(184)=>303,chr(185)=>494,chr(186)=>399,chr(187)=>539,chr(188)=>430,chr(189)=>486,chr(190)=>306,chr(191)=>397,chr(192)=>563,chr(193)=>606,chr(194)=>606,chr(195)=>606,chr(196)=>606,chr(197)=>423, + chr(198)=>529,chr(199)=>529,chr(200)=>529,chr(201)=>488,chr(202)=>488,chr(203)=>488,chr(204)=>488,chr(205)=>267,chr(206)=>267,chr(207)=>630,chr(208)=>639,chr(209)=>659,chr(210)=>659,chr(211)=>676,chr(212)=>676,chr(213)=>676,chr(214)=>676,chr(215)=>498,chr(216)=>563,chr(217)=>653,chr(218)=>653,chr(219)=>653, + chr(220)=>653,chr(221)=>520,chr(222)=>495,chr(223)=>555,chr(224)=>355,chr(225)=>494,chr(226)=>494,chr(227)=>494,chr(228)=>494,chr(229)=>246,chr(230)=>418,chr(231)=>418,chr(232)=>418,chr(233)=>503,chr(234)=>503,chr(235)=>503,chr(236)=>503,chr(237)=>246,chr(238)=>246,chr(239)=>597,chr(240)=>569,chr(241)=>537, + chr(242)=>537,chr(243)=>538,chr(244)=>538,chr(245)=>538,chr(246)=>538,chr(247)=>498,chr(248)=>355,chr(249)=>537,chr(250)=>537,chr(251)=>537,chr(252)=>537,chr(253)=>474,chr(254)=>347,chr(255)=>235); +$enc = 'cp1250'; +$diff = '131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdotaccent 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdotaccent /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dcroat /Nacute /Ncaron 213 /Ohungarumlaut 216 /Rcaron /Uring 219 /Uhungarumlaut 222 /Tcommaaccent 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dcroat /nacute /ncaron 245 /ohungarumlaut 248 /rcaron /uring 251 /uhungarumlaut 254 /tcommaaccent /dotaccent'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,132=>8222,133=>8230,134=>array(8224,2),137=>8240,138=>352,139=>8249,140=>346,141=>356,142=>381,143=>377,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),153=>8482,154=>353,155=>8250,156=>347,157=>357,158=>382,159=>378,160=>160,161=>711,162=>728,163=>321,164=>164,165=>260,166=>array(166,4),170=>350,171=>array(171,4),175=>379,176=>array(176,2),178=>731,179=>322,180=>array(180,5),185=>261,186=>351,187=>187,188=>317,189=>733,190=>318,191=>380,192=>340,193=>array(193,2),195=>258,196=>196,197=>313,198=>262,199=>199,200=>268,201=>201,202=>280,203=>203,204=>282,205=>array(205,2),207=>270,208=>272,209=>323,210=>327,211=>array(211,2),213=>336,214=>array(214,2),216=>344,217=>366,218=>218,219=>368,220=>array(220,2),222=>354,223=>223,224=>341,225=>array(225,2),227=>259,228=>228,229=>314,230=>263,231=>231,232=>269,233=>233,234=>281,235=>235,236=>283,237=>array(237,2),239=>271,240=>273,241=>324,242=>328,243=>array(243,2),245=>337,246=>array(246,2),248=>345,249=>367,250=>250,251=>369,252=>array(252,2),254=>355,255=>729); +$file = 'Calibri_b.z'; +$originalsize = 55864; +$subsetted = true; +?> diff --git a/fpdf/font/Calibri_b.z b/fpdf/font/Calibri_b.z new file mode 100644 index 0000000..5ed9b95 Binary files /dev/null and b/fpdf/font/Calibri_b.z differ diff --git a/fpdf/font/Calibri_i.php b/fpdf/font/Calibri_i.php new file mode 100644 index 0000000..b42bf64 --- /dev/null +++ b/fpdf/font/Calibri_i.php @@ -0,0 +1,26 @@ +<?php +$type = 'TrueType'; +$name = 'Calibri-Italic'; +$desc = array('Ascent'=>750,'Descent'=>-250,'CapHeight'=>633,'Flags'=>96,'FontBBox'=>'[-476 -194 1214 952]','ItalicAngle'=>-11,'StemV'=>70,'MissingWidth'=>507); +$up = -113; +$ut = 65; +$cw = array( + chr(0)=>507,chr(1)=>507,chr(2)=>507,chr(3)=>507,chr(4)=>507,chr(5)=>507,chr(6)=>507,chr(7)=>507,chr(8)=>507,chr(9)=>507,chr(10)=>507,chr(11)=>507,chr(12)=>507,chr(13)=>507,chr(14)=>507,chr(15)=>507,chr(16)=>507,chr(17)=>507,chr(18)=>507,chr(19)=>507,chr(20)=>507,chr(21)=>507, + chr(22)=>507,chr(23)=>507,chr(24)=>507,chr(25)=>507,chr(26)=>507,chr(27)=>507,chr(28)=>507,chr(29)=>507,chr(30)=>507,chr(31)=>507,' '=>226,'!'=>326,'"'=>401,'#'=>498,'$'=>507,'%'=>715,'&'=>682,'\''=>221,'('=>303,')'=>303,'*'=>498,'+'=>498, + ','=>250,'-'=>306,'.'=>252,'/'=>388,'0'=>507,'1'=>507,'2'=>507,'3'=>507,'4'=>507,'5'=>507,'6'=>507,'7'=>507,'8'=>507,'9'=>507,':'=>268,';'=>268,'<'=>498,'='=>498,'>'=>498,'?'=>463,'@'=>894,'A'=>579, + 'B'=>544,'C'=>522,'D'=>615,'E'=>488,'F'=>459,'G'=>631,'H'=>623,'I'=>252,'J'=>319,'K'=>520,'L'=>420,'M'=>855,'N'=>645,'O'=>654,'P'=>517,'Q'=>664,'R'=>543,'S'=>452,'T'=>487,'U'=>642,'V'=>567,'W'=>890, + 'X'=>519,'Y'=>487,'Z'=>468,'['=>307,'\\'=>384,']'=>307,'^'=>498,'_'=>498,'`'=>291,'a'=>514,'b'=>514,'c'=>416,'d'=>514,'e'=>478,'f'=>305,'g'=>514,'h'=>514,'i'=>229,'j'=>239,'k'=>455,'l'=>229,'m'=>791, + 'n'=>514,'o'=>513,'p'=>514,'q'=>514,'r'=>343,'s'=>389,'t'=>335,'u'=>514,'v'=>446,'w'=>715,'x'=>433,'y'=>447,'z'=>395,'{'=>314,'|'=>460,'}'=>314,'~'=>498,chr(127)=>507,chr(128)=>507,chr(129)=>507,chr(130)=>250,chr(131)=>507, + chr(132)=>418,chr(133)=>690,chr(134)=>498,chr(135)=>498,chr(136)=>507,chr(137)=>1038,chr(138)=>452,chr(139)=>339,chr(140)=>452,chr(141)=>487,chr(142)=>468,chr(143)=>468,chr(144)=>507,chr(145)=>250,chr(146)=>250,chr(147)=>418,chr(148)=>418,chr(149)=>498,chr(150)=>498,chr(151)=>905,chr(152)=>507,chr(153)=>705, + chr(154)=>389,chr(155)=>339,chr(156)=>389,chr(157)=>346,chr(158)=>395,chr(159)=>395,chr(160)=>226,chr(161)=>395,chr(162)=>381,chr(163)=>430,chr(164)=>498,chr(165)=>579,chr(166)=>498,chr(167)=>498,chr(168)=>393,chr(169)=>834,chr(170)=>452,chr(171)=>512,chr(172)=>498,chr(173)=>306,chr(174)=>507,chr(175)=>468, + chr(176)=>339,chr(177)=>498,chr(178)=>312,chr(179)=>248,chr(180)=>292,chr(181)=>538,chr(182)=>586,chr(183)=>252,chr(184)=>307,chr(185)=>514,chr(186)=>389,chr(187)=>512,chr(188)=>423,chr(189)=>469,chr(190)=>264,chr(191)=>395,chr(192)=>543,chr(193)=>579,chr(194)=>579,chr(195)=>579,chr(196)=>579,chr(197)=>420, + chr(198)=>522,chr(199)=>522,chr(200)=>522,chr(201)=>488,chr(202)=>488,chr(203)=>488,chr(204)=>488,chr(205)=>252,chr(206)=>252,chr(207)=>615,chr(208)=>625,chr(209)=>645,chr(210)=>645,chr(211)=>654,chr(212)=>654,chr(213)=>654,chr(214)=>654,chr(215)=>498,chr(216)=>543,chr(217)=>642,chr(218)=>642,chr(219)=>642, + chr(220)=>642,chr(221)=>487,chr(222)=>487,chr(223)=>527,chr(224)=>343,chr(225)=>514,chr(226)=>514,chr(227)=>514,chr(228)=>514,chr(229)=>229,chr(230)=>416,chr(231)=>416,chr(232)=>416,chr(233)=>478,chr(234)=>478,chr(235)=>478,chr(236)=>478,chr(237)=>229,chr(238)=>229,chr(239)=>555,chr(240)=>551,chr(241)=>514, + chr(242)=>514,chr(243)=>513,chr(244)=>513,chr(245)=>513,chr(246)=>513,chr(247)=>498,chr(248)=>343,chr(249)=>514,chr(250)=>514,chr(251)=>514,chr(252)=>514,chr(253)=>447,chr(254)=>335,chr(255)=>223); +$enc = 'cp1250'; +$diff = '131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdotaccent 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdotaccent /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dcroat /Nacute /Ncaron 213 /Ohungarumlaut 216 /Rcaron /Uring 219 /Uhungarumlaut 222 /Tcommaaccent 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dcroat /nacute /ncaron 245 /ohungarumlaut 248 /rcaron /uring 251 /uhungarumlaut 254 /tcommaaccent /dotaccent'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,132=>8222,133=>8230,134=>array(8224,2),137=>8240,138=>352,139=>8249,140=>346,141=>356,142=>381,143=>377,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),153=>8482,154=>353,155=>8250,156=>347,157=>357,158=>382,159=>378,160=>160,161=>711,162=>728,163=>321,164=>164,165=>260,166=>array(166,4),170=>350,171=>array(171,4),175=>379,176=>array(176,2),178=>731,179=>322,180=>array(180,5),185=>261,186=>351,187=>187,188=>317,189=>733,190=>318,191=>380,192=>340,193=>array(193,2),195=>258,196=>196,197=>313,198=>262,199=>199,200=>268,201=>201,202=>280,203=>203,204=>282,205=>array(205,2),207=>270,208=>272,209=>323,210=>327,211=>array(211,2),213=>336,214=>array(214,2),216=>344,217=>366,218=>218,219=>368,220=>array(220,2),222=>354,223=>223,224=>341,225=>array(225,2),227=>259,228=>228,229=>314,230=>263,231=>231,232=>269,233=>233,234=>281,235=>235,236=>283,237=>array(237,2),239=>271,240=>273,241=>324,242=>328,243=>array(243,2),245=>337,246=>array(246,2),248=>345,249=>367,250=>250,251=>369,252=>array(252,2),254=>355,255=>729); +$file = 'Calibri_i.z'; +$originalsize = 56604; +$subsetted = true; +?> diff --git a/fpdf/font/Calibri_i.z b/fpdf/font/Calibri_i.z new file mode 100644 index 0000000..6a1995e Binary files /dev/null and b/fpdf/font/Calibri_i.z differ diff --git a/fpdf/font/arial_ce.php b/fpdf/font/arial_ce.php new file mode 100644 index 0000000..9d9101c --- /dev/null +++ b/fpdf/font/arial_ce.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='ArialMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>32,'FontBBox'=>'[-664 -325 2028 1037]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>750); +$up=-106; +$ut=73; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>222,chr(131)=>750, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>500,chr(157)=>375,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>556,chr(164)=>556,chr(165)=>667,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>222,chr(180)=>333,chr(181)=>576,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>500,chr(187)=>556,chr(188)=>556,chr(189)=>333,chr(190)=>292,chr(191)=>500,chr(192)=>722,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>556, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>333,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>222,chr(230)=>500,chr(231)=>500,chr(232)=>500,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>615,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>549,chr(248)=>333,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>278,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce.z'; +$originalsize=273020; +?> diff --git a/fpdf/font/arial_ce.ttf b/fpdf/font/arial_ce.ttf new file mode 100644 index 0000000..d59f53b Binary files /dev/null and b/fpdf/font/arial_ce.ttf differ diff --git a/fpdf/font/arial_ce.z b/fpdf/font/arial_ce.z new file mode 100644 index 0000000..c1b9d54 Binary files /dev/null and b/fpdf/font/arial_ce.z differ diff --git a/fpdf/font/arial_ce_b.php b/fpdf/font/arial_ce_b.php new file mode 100644 index 0000000..85ac8e2 --- /dev/null +++ b/fpdf/font/arial_ce_b.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='Arial-BoldMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>32,'FontBBox'=>'[-627 -376 2034 1010]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>750); +$up=-106; +$ut=105; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>278,chr(131)=>750, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>556,chr(157)=>479,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>611,chr(164)=>556,chr(165)=>722,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>278,chr(180)=>333,chr(181)=>612,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>556,chr(187)=>556,chr(188)=>611,chr(189)=>333,chr(190)=>385,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>611, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>389,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>278,chr(230)=>556,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>719,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>549,chr(248)=>389,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>333,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce_b.z'; +$originalsize=288496; +?> diff --git a/fpdf/font/arial_ce_b.z b/fpdf/font/arial_ce_b.z new file mode 100644 index 0000000..d2b8605 Binary files /dev/null and b/fpdf/font/arial_ce_b.z differ diff --git a/fpdf/font/arial_ce_bi.php b/fpdf/font/arial_ce_bi.php new file mode 100644 index 0000000..8cd7eab --- /dev/null +++ b/fpdf/font/arial_ce_bi.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='Arial-BoldItalicMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>96,'FontBBox'=>'[-560 -376 1157 1000]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>750); +$up=-106; +$ut=105; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>278,chr(131)=>750, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>556,chr(157)=>479,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>611,chr(164)=>556,chr(165)=>722,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>278,chr(180)=>333,chr(181)=>603,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>556,chr(187)=>556,chr(188)=>611,chr(189)=>333,chr(190)=>396,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>611, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>389,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>278,chr(230)=>556,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>740,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>549,chr(248)=>389,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>333,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce_bi.z'; +$originalsize=226748; +?> diff --git a/fpdf/font/arial_ce_bi.z b/fpdf/font/arial_ce_bi.z new file mode 100644 index 0000000..11eb46f Binary files /dev/null and b/fpdf/font/arial_ce_bi.z differ diff --git a/fpdf/font/arial_ce_i.php b/fpdf/font/arial_ce_i.php new file mode 100644 index 0000000..691736e --- /dev/null +++ b/fpdf/font/arial_ce_i.php @@ -0,0 +1,24 @@ +<?php +$type='TrueType'; +$name='Arial-ItalicMT'; +$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>96,'FontBBox'=>'[-517 -325 1082 1025]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>750); +$up=-106; +$ut=73; +$cw=array( + chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750, + chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>222,chr(131)=>750, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>500,chr(157)=>354,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>556,chr(164)=>556,chr(165)=>667,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611, + chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>222,chr(180)=>333,chr(181)=>548,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>500,chr(187)=>556,chr(188)=>556,chr(189)=>333,chr(190)=>281,chr(191)=>500,chr(192)=>722,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>556, + chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>333,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>222,chr(230)=>500,chr(231)=>500,chr(232)=>500,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>625,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>549,chr(248)=>333,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>278,chr(255)=>333); +$enc='cp1250'; +$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdot 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdot /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dslash /Nacute /Ncaron 213 /Odblacute 216 /Rcaron /Uring 219 /Udblacute 222 /Tcedilla 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dmacron /nacute /ncaron 245 /odblacute 248 /rcaron /uring 251 /udblacute 254 /tcedilla /dotaccent'; +$file='arial_ce_i.z'; +$originalsize=200684; +?> diff --git a/fpdf/font/arial_ce_i.z b/fpdf/font/arial_ce_i.z new file mode 100644 index 0000000..e03850e Binary files /dev/null and b/fpdf/font/arial_ce_i.z differ diff --git a/fpdf/font/calibri.php b/fpdf/font/calibri.php new file mode 100644 index 0000000..ad4fd0d --- /dev/null +++ b/fpdf/font/calibri.php @@ -0,0 +1,26 @@ +<?php +$type = 'TrueType'; +$name = 'Calibri'; +$desc = array('Ascent'=>750,'Descent'=>-250,'CapHeight'=>632,'Flags'=>32,'FontBBox'=>'[-503 -307 1240 964]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>507); +$up = -113; +$ut = 65; +$cw = array( + chr(0)=>507,chr(1)=>507,chr(2)=>507,chr(3)=>507,chr(4)=>507,chr(5)=>507,chr(6)=>507,chr(7)=>507,chr(8)=>507,chr(9)=>507,chr(10)=>507,chr(11)=>507,chr(12)=>507,chr(13)=>507,chr(14)=>507,chr(15)=>507,chr(16)=>507,chr(17)=>507,chr(18)=>507,chr(19)=>507,chr(20)=>507,chr(21)=>507, + chr(22)=>507,chr(23)=>507,chr(24)=>507,chr(25)=>507,chr(26)=>507,chr(27)=>507,chr(28)=>507,chr(29)=>507,chr(30)=>507,chr(31)=>507,' '=>226,'!'=>326,'"'=>401,'#'=>498,'$'=>507,'%'=>715,'&'=>682,'\''=>221,'('=>303,')'=>303,'*'=>498,'+'=>498, + ','=>250,'-'=>306,'.'=>252,'/'=>386,'0'=>507,'1'=>507,'2'=>507,'3'=>507,'4'=>507,'5'=>507,'6'=>507,'7'=>507,'8'=>507,'9'=>507,':'=>268,';'=>268,'<'=>498,'='=>498,'>'=>498,'?'=>463,'@'=>894,'A'=>579, + 'B'=>544,'C'=>533,'D'=>615,'E'=>488,'F'=>459,'G'=>631,'H'=>623,'I'=>252,'J'=>319,'K'=>520,'L'=>420,'M'=>855,'N'=>646,'O'=>662,'P'=>517,'Q'=>673,'R'=>543,'S'=>459,'T'=>487,'U'=>642,'V'=>567,'W'=>890, + 'X'=>519,'Y'=>487,'Z'=>468,'['=>307,'\\'=>386,']'=>307,'^'=>498,'_'=>498,'`'=>291,'a'=>479,'b'=>525,'c'=>423,'d'=>525,'e'=>498,'f'=>305,'g'=>471,'h'=>525,'i'=>229,'j'=>239,'k'=>455,'l'=>229,'m'=>799, + 'n'=>525,'o'=>527,'p'=>525,'q'=>525,'r'=>349,'s'=>391,'t'=>335,'u'=>525,'v'=>452,'w'=>715,'x'=>433,'y'=>453,'z'=>395,'{'=>314,'|'=>460,'}'=>314,'~'=>498,chr(127)=>507,chr(128)=>507,chr(129)=>507,chr(130)=>250,chr(131)=>507, + chr(132)=>418,chr(133)=>690,chr(134)=>498,chr(135)=>498,chr(136)=>507,chr(137)=>1038,chr(138)=>459,chr(139)=>339,chr(140)=>459,chr(141)=>487,chr(142)=>468,chr(143)=>468,chr(144)=>507,chr(145)=>250,chr(146)=>250,chr(147)=>418,chr(148)=>418,chr(149)=>498,chr(150)=>498,chr(151)=>905,chr(152)=>507,chr(153)=>705, + chr(154)=>391,chr(155)=>339,chr(156)=>391,chr(157)=>346,chr(158)=>395,chr(159)=>395,chr(160)=>226,chr(161)=>395,chr(162)=>381,chr(163)=>430,chr(164)=>498,chr(165)=>579,chr(166)=>498,chr(167)=>498,chr(168)=>393,chr(169)=>834,chr(170)=>459,chr(171)=>512,chr(172)=>498,chr(173)=>306,chr(174)=>507,chr(175)=>468, + chr(176)=>339,chr(177)=>498,chr(178)=>312,chr(179)=>248,chr(180)=>292,chr(181)=>550,chr(182)=>586,chr(183)=>252,chr(184)=>307,chr(185)=>479,chr(186)=>391,chr(187)=>512,chr(188)=>423,chr(189)=>469,chr(190)=>264,chr(191)=>395,chr(192)=>543,chr(193)=>579,chr(194)=>579,chr(195)=>579,chr(196)=>579,chr(197)=>420, + chr(198)=>533,chr(199)=>533,chr(200)=>533,chr(201)=>488,chr(202)=>488,chr(203)=>488,chr(204)=>488,chr(205)=>252,chr(206)=>252,chr(207)=>615,chr(208)=>625,chr(209)=>646,chr(210)=>646,chr(211)=>662,chr(212)=>662,chr(213)=>662,chr(214)=>662,chr(215)=>498,chr(216)=>543,chr(217)=>642,chr(218)=>642,chr(219)=>642, + chr(220)=>642,chr(221)=>487,chr(222)=>487,chr(223)=>527,chr(224)=>349,chr(225)=>479,chr(226)=>479,chr(227)=>479,chr(228)=>479,chr(229)=>229,chr(230)=>423,chr(231)=>423,chr(232)=>423,chr(233)=>498,chr(234)=>498,chr(235)=>498,chr(236)=>498,chr(237)=>229,chr(238)=>229,chr(239)=>568,chr(240)=>552,chr(241)=>525, + chr(242)=>525,chr(243)=>527,chr(244)=>527,chr(245)=>527,chr(246)=>527,chr(247)=>498,chr(248)=>349,chr(249)=>525,chr(250)=>525,chr(251)=>525,chr(252)=>525,chr(253)=>453,chr(254)=>335,chr(255)=>226); +$enc = 'cp1250'; +$diff = '131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdotaccent 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdotaccent /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dcroat /Nacute /Ncaron 213 /Ohungarumlaut 216 /Rcaron /Uring 219 /Uhungarumlaut 222 /Tcommaaccent 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dcroat /nacute /ncaron 245 /ohungarumlaut 248 /rcaron /uring 251 /uhungarumlaut 254 /tcommaaccent /dotaccent'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,132=>8222,133=>8230,134=>array(8224,2),137=>8240,138=>352,139=>8249,140=>346,141=>356,142=>381,143=>377,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),153=>8482,154=>353,155=>8250,156=>347,157=>357,158=>382,159=>378,160=>160,161=>711,162=>728,163=>321,164=>164,165=>260,166=>array(166,4),170=>350,171=>array(171,4),175=>379,176=>array(176,2),178=>731,179=>322,180=>array(180,5),185=>261,186=>351,187=>187,188=>317,189=>733,190=>318,191=>380,192=>340,193=>array(193,2),195=>258,196=>196,197=>313,198=>262,199=>199,200=>268,201=>201,202=>280,203=>203,204=>282,205=>array(205,2),207=>270,208=>272,209=>323,210=>327,211=>array(211,2),213=>336,214=>array(214,2),216=>344,217=>366,218=>218,219=>368,220=>array(220,2),222=>354,223=>223,224=>341,225=>array(225,2),227=>259,228=>228,229=>314,230=>263,231=>231,232=>269,233=>233,234=>281,235=>235,236=>283,237=>array(237,2),239=>271,240=>273,241=>324,242=>328,243=>array(243,2),245=>337,246=>array(246,2),248=>345,249=>367,250=>250,251=>369,252=>array(252,2),254=>355,255=>729); +$file = 'calibri.z'; +$originalsize = 57908; +$subsetted = true; +?> diff --git a/fpdf/font/calibri.z b/fpdf/font/calibri.z new file mode 100644 index 0000000..90be346 Binary files /dev/null and b/fpdf/font/calibri.z differ diff --git a/fpdf/font/courier.php b/fpdf/font/courier.php new file mode 100644 index 0000000..02525f5 --- /dev/null +++ b/fpdf/font/courier.php @@ -0,0 +1,8 @@ +<?php +$type = 'Core'; +$name = 'Courier'; +$up = -100; +$ut = 50; +for($i=0;$i<=255;$i++) + $cw[chr($i)] = 600; +?> diff --git a/fpdf/font/courierb.php b/fpdf/font/courierb.php new file mode 100644 index 0000000..f472063 --- /dev/null +++ b/fpdf/font/courierb.php @@ -0,0 +1,8 @@ +<?php +$type = 'Core'; +$name = 'Courier-Bold'; +$up = -100; +$ut = 50; +for($i=0;$i<=255;$i++) + $cw[chr($i)] = 600; +?> diff --git a/fpdf/font/courierbi.php b/fpdf/font/courierbi.php new file mode 100644 index 0000000..6ce8501 --- /dev/null +++ b/fpdf/font/courierbi.php @@ -0,0 +1,8 @@ +<?php +$type = 'Core'; +$name = 'Courier-BoldOblique'; +$up = -100; +$ut = 50; +for($i=0;$i<=255;$i++) + $cw[chr($i)] = 600; +?> diff --git a/fpdf/font/courieri.php b/fpdf/font/courieri.php new file mode 100644 index 0000000..320150a --- /dev/null +++ b/fpdf/font/courieri.php @@ -0,0 +1,8 @@ +<?php +$type = 'Core'; +$name = 'Courier-Oblique'; +$up = -100; +$ut = 50; +for($i=0;$i<=255;$i++) + $cw[chr($i)] = 600; +?> diff --git a/fpdf/font/helvetica.php b/fpdf/font/helvetica.php new file mode 100644 index 0000000..891ea25 --- /dev/null +++ b/fpdf/font/helvetica.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Helvetica'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +?> diff --git a/fpdf/font/helveticab.php b/fpdf/font/helveticab.php new file mode 100644 index 0000000..6c9b972 --- /dev/null +++ b/fpdf/font/helveticab.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Helvetica-Bold'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +?> diff --git a/fpdf/font/helveticabi.php b/fpdf/font/helveticabi.php new file mode 100644 index 0000000..4720311 --- /dev/null +++ b/fpdf/font/helveticabi.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Helvetica-BoldOblique'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +?> diff --git a/fpdf/font/helveticai.php b/fpdf/font/helveticai.php new file mode 100644 index 0000000..25fb794 --- /dev/null +++ b/fpdf/font/helveticai.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Helvetica-Oblique'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +?> diff --git a/fpdf/font/symbol.php b/fpdf/font/symbol.php new file mode 100644 index 0000000..a89f295 --- /dev/null +++ b/fpdf/font/symbol.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Symbol'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, + ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, + 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768, + 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576, + 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0, + chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603, + chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768, + chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, + chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, + chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); +?> diff --git a/fpdf/font/times.php b/fpdf/font/times.php new file mode 100644 index 0000000..57b9bce --- /dev/null +++ b/fpdf/font/times.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Times-Roman'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, + 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944, + 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); +?> diff --git a/fpdf/font/timesb.php b/fpdf/font/timesb.php new file mode 100644 index 0000000..6946b9e --- /dev/null +++ b/fpdf/font/timesb.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Times-Bold'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000, + 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833, + 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +?> diff --git a/fpdf/font/timesbi.php b/fpdf/font/timesbi.php new file mode 100644 index 0000000..cd5e5f1 --- /dev/null +++ b/fpdf/font/timesbi.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Times-BoldItalic'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, + 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889, + 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); +?> diff --git a/fpdf/font/timesi.php b/fpdf/font/timesi.php new file mode 100644 index 0000000..d6da2a9 --- /dev/null +++ b/fpdf/font/timesi.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'Times-Italic'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, + 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833, + 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); +?> diff --git a/fpdf/font/zapfdingbats.php b/fpdf/font/zapfdingbats.php new file mode 100644 index 0000000..8f7d490 --- /dev/null +++ b/fpdf/font/zapfdingbats.php @@ -0,0 +1,19 @@ +<?php +$type = 'Core'; +$name = 'ZapfDingbats'; +$up = -100; +$ut = 50; +$cw = array( + chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0, + chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, + ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, + 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776, + 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873, + 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317, + chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788, + chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788, + chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, + chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, + chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); +?> diff --git a/fpdf/fpdf.css b/fpdf/fpdf.css new file mode 100644 index 0000000..8cfa33d --- /dev/null +++ b/fpdf/fpdf.css @@ -0,0 +1,21 @@ +body {font-family:"Times New Roman",serif} +h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em} +h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em} +dl.param dt {text-decoration:underline} +dl.param dd {margin-top:1em; margin-bottom:1em} +dl.param ul {margin-top:1em; margin-bottom:1em} +tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%} +div.source {margin-top:1.4em; margin-bottom:1.3em} +div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherit; font-size:100%} +div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000} +div.doc-source {margin-top:1.4em; margin-bottom:1.3em} +div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherit; font-size:100%} +div.doc-source code {display:block; background-color:#E0E0E0; padding:4px} +.kw {color:#000080; font-weight:bold} +.str {color:#CC0000} +.cmt {color:#008000} +p.demo {text-align:center; margin-top:-0.9em} +a.demo {text-decoration:none; font-weight:bold; color:#0000CC} +a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC} +a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF} +a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF} diff --git a/fpdf/fpdf.php b/fpdf/fpdf.php new file mode 100644 index 0000000..308406b --- /dev/null +++ b/fpdf/fpdf.php @@ -0,0 +1,1804 @@ +<?php +/******************************************************************************* +* FPDF * +* * +* Version: 1.7 * +* Date: 2011-06-18 * +* Author: Olivier PLATHEY * +*******************************************************************************/ + +define('FPDF_VERSION','1.7'); + +class FPDF +{ +var $page; // current page number +var $n; // current object number +var $offsets; // array of object offsets +var $buffer; // buffer holding in-memory PDF +var $pages; // array containing pages +var $state; // current document state +var $compress; // compression flag +var $k; // scale factor (number of points in user unit) +var $DefOrientation; // default orientation +var $CurOrientation; // current orientation +var $StdPageSizes; // standard page sizes +var $DefPageSize; // default page size +var $CurPageSize; // current page size +var $PageSizes; // used for pages with non default sizes or orientations +var $wPt, $hPt; // dimensions of current page in points +var $w, $h; // dimensions of current page in user unit +var $lMargin; // left margin +var $tMargin; // top margin +var $rMargin; // right margin +var $bMargin; // page break margin +var $cMargin; // cell margin +var $x, $y; // current position in user unit +var $lasth; // height of last printed cell +var $LineWidth; // line width in user unit +var $fontpath; // path containing fonts +var $CoreFonts; // array of core font names +var $fonts; // array of used fonts +var $FontFiles; // array of font files +var $diffs; // array of encoding differences +var $FontFamily; // current font family +var $FontStyle; // current font style +var $underline; // underlining flag +var $CurrentFont; // current font info +var $FontSizePt; // current font size in points +var $FontSize; // current font size in user unit +var $DrawColor; // commands for drawing color +var $FillColor; // commands for filling color +var $TextColor; // commands for text color +var $ColorFlag; // indicates whether fill and text colors are different +var $ws; // word spacing +var $images; // array of used images +var $PageLinks; // array of links in pages +var $links; // array of internal links +var $AutoPageBreak; // automatic page breaking +var $PageBreakTrigger; // threshold used to trigger page breaks +var $InHeader; // flag set when processing header +var $InFooter; // flag set when processing footer +var $ZoomMode; // zoom display mode +var $LayoutMode; // layout display mode +var $title; // title +var $subject; // subject +var $author; // author +var $keywords; // keywords +var $creator; // creator +var $AliasNbPages; // alias for total number of pages +var $PDFVersion; // PDF version number + +/******************************************************************************* +* * +* Public methods * +* * +*******************************************************************************/ +function FPDF($orientation='P', $unit='mm', $size='A4') +{ + // Some checks + $this->_dochecks(); + // Initialization of properties + $this->page = 0; + $this->n = 2; + $this->buffer = ''; + $this->pages = array(); + $this->PageSizes = array(); + $this->state = 0; + $this->fonts = array(); + $this->FontFiles = array(); + $this->diffs = array(); + $this->images = array(); + $this->links = array(); + $this->InHeader = false; + $this->InFooter = false; + $this->lasth = 0; + $this->FontFamily = ''; + $this->FontStyle = ''; + $this->FontSizePt = 12; + $this->underline = false; + $this->DrawColor = '0 G'; + $this->FillColor = '0 g'; + $this->TextColor = '0 g'; + $this->ColorFlag = false; + $this->ws = 0; + // Font path + if(defined('FPDF_FONTPATH')) + { + $this->fontpath = FPDF_FONTPATH; + if(substr($this->fontpath,-1)!='/' && substr($this->fontpath,-1)!='\\') + $this->fontpath .= '/'; + } + elseif(is_dir(dirname(__FILE__).'/font')) + $this->fontpath = dirname(__FILE__).'/font/'; + else + $this->fontpath = ''; + // Core fonts + $this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats'); + // Scale factor + if($unit=='pt') + $this->k = 1; + elseif($unit=='mm') + $this->k = 72/25.4; + elseif($unit=='cm') + $this->k = 72/2.54; + elseif($unit=='in') + $this->k = 72; + else + $this->Error('Incorrect unit: '.$unit); + // Page sizes + $this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28), + 'letter'=>array(612,792), 'legal'=>array(612,1008)); + $size = $this->_getpagesize($size); + $this->DefPageSize = $size; + $this->CurPageSize = $size; + // Page orientation + $orientation = strtolower($orientation); + if($orientation=='p' || $orientation=='portrait') + { + $this->DefOrientation = 'P'; + $this->w = $size[0]; + $this->h = $size[1]; + } + elseif($orientation=='l' || $orientation=='landscape') + { + $this->DefOrientation = 'L'; + $this->w = $size[1]; + $this->h = $size[0]; + } + else + $this->Error('Incorrect orientation: '.$orientation); + $this->CurOrientation = $this->DefOrientation; + $this->wPt = $this->w*$this->k; + $this->hPt = $this->h*$this->k; + // Page margins (1 cm) + $margin = 28.35/$this->k; + $this->SetMargins($margin,$margin); + // Interior cell margin (1 mm) + $this->cMargin = $margin/10; + // Line width (0.2 mm) + $this->LineWidth = .567/$this->k; + // Automatic page break + $this->SetAutoPageBreak(true,2*$margin); + // Default display mode + $this->SetDisplayMode('default'); + // Enable compression + $this->SetCompression(true); + // Set default PDF version number + $this->PDFVersion = '1.3'; +} + +function SetMargins($left, $top, $right=null) +{ + // Set left, top and right margins + $this->lMargin = $left; + $this->tMargin = $top; + if($right===null) + $right = $left; + $this->rMargin = $right; +} + +function SetLeftMargin($margin) +{ + // Set left margin + $this->lMargin = $margin; + if($this->page>0 && $this->x<$margin) + $this->x = $margin; +} + +function SetTopMargin($margin) +{ + // Set top margin + $this->tMargin = $margin; +} + +function SetRightMargin($margin) +{ + // Set right margin + $this->rMargin = $margin; +} + +function SetAutoPageBreak($auto, $margin=0) +{ + // Set auto page break mode and triggering margin + $this->AutoPageBreak = $auto; + $this->bMargin = $margin; + $this->PageBreakTrigger = $this->h-$margin; +} + +function SetDisplayMode($zoom, $layout='default') +{ + // Set display mode in viewer + if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom)) + $this->ZoomMode = $zoom; + else + $this->Error('Incorrect zoom display mode: '.$zoom); + if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default') + $this->LayoutMode = $layout; + else + $this->Error('Incorrect layout display mode: '.$layout); +} + +function SetCompression($compress) +{ + // Set page compression + if(function_exists('gzcompress')) + $this->compress = $compress; + else + $this->compress = false; +} + +function SetTitle($title, $isUTF8=false) +{ + // Title of document + if($isUTF8) + $title = $this->_UTF8toUTF16($title); + $this->title = $title; +} + +function SetSubject($subject, $isUTF8=false) +{ + // Subject of document + if($isUTF8) + $subject = $this->_UTF8toUTF16($subject); + $this->subject = $subject; +} + +function SetAuthor($author, $isUTF8=false) +{ + // Author of document + if($isUTF8) + $author = $this->_UTF8toUTF16($author); + $this->author = $author; +} + +function SetKeywords($keywords, $isUTF8=false) +{ + // Keywords of document + if($isUTF8) + $keywords = $this->_UTF8toUTF16($keywords); + $this->keywords = $keywords; +} + +function SetCreator($creator, $isUTF8=false) +{ + // Creator of document + if($isUTF8) + $creator = $this->_UTF8toUTF16($creator); + $this->creator = $creator; +} + +function AliasNbPages($alias='{nb}') +{ + // Define an alias for total number of pages + $this->AliasNbPages = $alias; +} + +function Error($msg) +{ + // Fatal error + die('<b>FPDF error:</b> '.$msg); +} + +function Open() +{ + // Begin document + $this->state = 1; +} + +function Close() +{ + // Terminate document + if($this->state==3) + return; + if($this->page==0) + $this->AddPage(); + // Page footer + $this->InFooter = true; + $this->Footer(); + $this->InFooter = false; + // Close page + $this->_endpage(); + // Close document + $this->_enddoc(); +} + +function AddPage($orientation='', $size='') +{ + // Start a new page + if($this->state==0) + $this->Open(); + $family = $this->FontFamily; + $style = $this->FontStyle.($this->underline ? 'U' : ''); + $fontsize = $this->FontSizePt; + $lw = $this->LineWidth; + $dc = $this->DrawColor; + $fc = $this->FillColor; + $tc = $this->TextColor; + $cf = $this->ColorFlag; + if($this->page>0) + { + // Page footer + $this->InFooter = true; + $this->Footer(); + $this->InFooter = false; + // Close page + $this->_endpage(); + } + // Start new page + $this->_beginpage($orientation,$size); + // Set line cap style to square + $this->_out('2 J'); + // Set line width + $this->LineWidth = $lw; + $this->_out(sprintf('%.2F w',$lw*$this->k)); + // Set font + if($family) + $this->SetFont($family,$style,$fontsize); + // Set colors + $this->DrawColor = $dc; + if($dc!='0 G') + $this->_out($dc); + $this->FillColor = $fc; + if($fc!='0 g') + $this->_out($fc); + $this->TextColor = $tc; + $this->ColorFlag = $cf; + // Page header + $this->InHeader = true; + $this->Header(); + $this->InHeader = false; + // Restore line width + if($this->LineWidth!=$lw) + { + $this->LineWidth = $lw; + $this->_out(sprintf('%.2F w',$lw*$this->k)); + } + // Restore font + if($family) + $this->SetFont($family,$style,$fontsize); + // Restore colors + if($this->DrawColor!=$dc) + { + $this->DrawColor = $dc; + $this->_out($dc); + } + if($this->FillColor!=$fc) + { + $this->FillColor = $fc; + $this->_out($fc); + } + $this->TextColor = $tc; + $this->ColorFlag = $cf; +} + +function Header() +{ + // To be implemented in your own inherited class +} + +function Footer() +{ + // To be implemented in your own inherited class +} + +function PageNo() +{ + // Get current page number + return $this->page; +} + +function SetDrawColor($r, $g=null, $b=null) +{ + // Set color for all stroking operations + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->DrawColor = sprintf('%.3F G',$r/255); + else + $this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255); + if($this->page>0) + $this->_out($this->DrawColor); +} + +function SetFillColor($r, $g=null, $b=null) +{ + // Set color for all filling operations + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->FillColor = sprintf('%.3F g',$r/255); + else + $this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); + $this->ColorFlag = ($this->FillColor!=$this->TextColor); + if($this->page>0) + $this->_out($this->FillColor); +} + +function SetTextColor($r, $g=null, $b=null) +{ + // Set color for text + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->TextColor = sprintf('%.3F g',$r/255); + else + $this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); + $this->ColorFlag = ($this->FillColor!=$this->TextColor); +} + +function GetStringWidth($s) +{ + // Get width of a string in the current font + $s = (string)$s; + $cw = &$this->CurrentFont['cw']; + $w = 0; + $l = strlen($s); + for($i=0;$i<$l;$i++) + $w += $cw[$s[$i]]; + return $w*$this->FontSize/1000; +} + +function SetLineWidth($width) +{ + // Set line width + $this->LineWidth = $width; + if($this->page>0) + $this->_out(sprintf('%.2F w',$width*$this->k)); +} + +function Line($x1, $y1, $x2, $y2) +{ + // Draw a line + $this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k)); +} + +function Rect($x, $y, $w, $h, $style='') +{ + // Draw a rectangle + if($style=='F') + $op = 'f'; + elseif($style=='FD' || $style=='DF') + $op = 'B'; + else + $op = 'S'; + $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op)); +} + +function AddFont($family, $style='', $file='') +{ + // Add a TrueType, OpenType or Type1 font + $family = strtolower($family); + if($file=='') + $file = str_replace(' ','',$family).strtolower($style).'.php'; + $style = strtoupper($style); + if($style=='IB') + $style = 'BI'; + $fontkey = $family.$style; + if(isset($this->fonts[$fontkey])) + return; + $info = $this->_loadfont($file); + $info['i'] = count($this->fonts)+1; + if(!empty($info['diff'])) + { + // Search existing encodings + $n = array_search($info['diff'],$this->diffs); + if(!$n) + { + $n = count($this->diffs)+1; + $this->diffs[$n] = $info['diff']; + } + $info['diffn'] = $n; + } + if(!empty($info['file'])) + { + // Embedded font + if($info['type']=='TrueType') + $this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']); + else + $this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']); + } + $this->fonts[$fontkey] = $info; +} + +function SetFont($family, $style='', $size=0) +{ + // Select a font; size given in points + if($family=='') + $family = $this->FontFamily; + else + $family = strtolower($family); + $style = strtoupper($style); + if(strpos($style,'U')!==false) + { + $this->underline = true; + $style = str_replace('U','',$style); + } + else + $this->underline = false; + if($style=='IB') + $style = 'BI'; + if($size==0) + $size = $this->FontSizePt; + // Test if font is already selected + if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size) + return; + // Test if font is already loaded + $fontkey = $family.$style; + if(!isset($this->fonts[$fontkey])) + { + // Test if one of the core fonts + if($family=='arial') + $family = 'helvetica'; + if(in_array($family,$this->CoreFonts)) + { + if($family=='symbol' || $family=='zapfdingbats') + $style = ''; + $fontkey = $family.$style; + if(!isset($this->fonts[$fontkey])) + $this->AddFont($family,$style); + } + else + $this->Error('Undefined font: '.$family.' '.$style); + } + // Select it + $this->FontFamily = $family; + $this->FontStyle = $style; + $this->FontSizePt = $size; + $this->FontSize = $size/$this->k; + $this->CurrentFont = &$this->fonts[$fontkey]; + if($this->page>0) + $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); +} + +function SetFontSize($size) +{ + // Set font size in points + if($this->FontSizePt==$size) + return; + $this->FontSizePt = $size; + $this->FontSize = $size/$this->k; + if($this->page>0) + $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); +} + +function AddLink() +{ + // Create a new internal link + $n = count($this->links)+1; + $this->links[$n] = array(0, 0); + return $n; +} + +function SetLink($link, $y=0, $page=-1) +{ + // Set destination of internal link + if($y==-1) + $y = $this->y; + if($page==-1) + $page = $this->page; + $this->links[$link] = array($page, $y); +} + +function Link($x, $y, $w, $h, $link) +{ + // Put a link on the page + $this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link); +} + +function Text($x, $y, $txt) +{ + // Output a string + $s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt)); + if($this->underline && $txt!='') + $s .= ' '.$this->_dounderline($x,$y,$txt); + if($this->ColorFlag) + $s = 'q '.$this->TextColor.' '.$s.' Q'; + $this->_out($s); +} + +function AcceptPageBreak() +{ + // Accept automatic page break or not + return $this->AutoPageBreak; +} + +function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') +{ + // Output a cell + $k = $this->k; + if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) + { + // Automatic page break + $x = $this->x; + $ws = $this->ws; + if($ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->AddPage($this->CurOrientation,$this->CurPageSize); + $this->x = $x; + if($ws>0) + { + $this->ws = $ws; + $this->_out(sprintf('%.3F Tw',$ws*$k)); + } + } + if($w==0) + $w = $this->w-$this->rMargin-$this->x; + $s = ''; + if($fill || $border==1) + { + if($fill) + $op = ($border==1) ? 'B' : 'f'; + else + $op = 'S'; + $s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op); + } + if(is_string($border)) + { + $x = $this->x; + $y = $this->y; + if(strpos($border,'L')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k); + if(strpos($border,'T')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k); + if(strpos($border,'R')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + if(strpos($border,'B')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + } + if($txt!=='') + { + if($align=='R') + $dx = $w-$this->cMargin-$this->GetStringWidth($txt); + elseif($align=='C') + $dx = ($w-$this->GetStringWidth($txt))/2; + else + $dx = $this->cMargin; + if($this->ColorFlag) + $s .= 'q '.$this->TextColor.' '; + $txt2 = str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txt))); + $s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$txt2); + if($this->underline) + $s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt); + if($this->ColorFlag) + $s .= ' Q'; + if($link) + $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link); + } + if($s) + $this->_out($s); + $this->lasth = $h; + if($ln>0) + { + // Go to next line + $this->y += $h; + if($ln==1) + $this->x = $this->lMargin; + } + else + $this->x += $w; +} + +function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false) +{ + // Output text with automatic or explicit line breaks + $cw = &$this->CurrentFont['cw']; + if($w==0) + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $s = str_replace("\r",'',$txt); + $nb = strlen($s); + if($nb>0 && $s[$nb-1]=="\n") + $nb--; + $b = 0; + if($border) + { + if($border==1) + { + $border = 'LTRB'; + $b = 'LRT'; + $b2 = 'LR'; + } + else + { + $b2 = ''; + if(strpos($border,'L')!==false) + $b2 .= 'L'; + if(strpos($border,'R')!==false) + $b2 .= 'R'; + $b = (strpos($border,'T')!==false) ? $b2.'T' : $b2; + } + } + $sep = -1; + $i = 0; + $j = 0; + $l = 0; + $ns = 0; + $nl = 1; + while($i<$nb) + { + // Get next character + $c = $s[$i]; + if($c=="\n") + { + // Explicit line break + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $i++; + $sep = -1; + $j = $i; + $l = 0; + $ns = 0; + $nl++; + if($border && $nl==2) + $b = $b2; + continue; + } + if($c==' ') + { + $sep = $i; + $ls = $l; + $ns++; + } + $l += $cw[$c]; + if($l>$wmax) + { + // Automatic line break + if($sep==-1) + { + if($i==$j) + $i++; + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + } + else + { + if($align=='J') + { + $this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0; + $this->_out(sprintf('%.3F Tw',$this->ws*$this->k)); + } + $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); + $i = $sep+1; + } + $sep = -1; + $j = $i; + $l = 0; + $ns = 0; + $nl++; + if($border && $nl==2) + $b = $b2; + } + else + $i++; + } + // Last chunk + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + if($border && strpos($border,'B')!==false) + $b .= 'B'; + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $this->x = $this->lMargin; +} + +function Write($h, $txt, $link='') +{ + // Output text in flowing mode + $cw = &$this->CurrentFont['cw']; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $s = str_replace("\r",'',$txt); + $nb = strlen($s); + $sep = -1; + $i = 0; + $j = 0; + $l = 0; + $nl = 1; + while($i<$nb) + { + // Get next character + $c = $s[$i]; + if($c=="\n") + { + // Explicit line break + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); + $i++; + $sep = -1; + $j = $i; + $l = 0; + if($nl==1) + { + $this->x = $this->lMargin; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + continue; + } + if($c==' ') + $sep = $i; + $l += $cw[$c]; + if($l>$wmax) + { + // Automatic line break + if($sep==-1) + { + if($this->x>$this->lMargin) + { + // Move to next line + $this->x = $this->lMargin; + $this->y += $h; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $i++; + $nl++; + continue; + } + if($i==$j) + $i++; + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); + } + else + { + $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link); + $i = $sep+1; + } + $sep = -1; + $j = $i; + $l = 0; + if($nl==1) + { + $this->x = $this->lMargin; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + } + else + $i++; + } + // Last chunk + if($i!=$j) + $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',0,$link); +} + +function Ln($h=null) +{ + // Line feed; default value is last cell height + $this->x = $this->lMargin; + if($h===null) + $this->y += $this->lasth; + else + $this->y += $h; +} + +function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='') +{ + // Put an image on the page + if(!isset($this->images[$file])) + { + // First use of this image, get info + if($type=='') + { + $pos = strrpos($file,'.'); + if(!$pos) + $this->Error('Image file has no extension and no type was specified: '.$file); + $type = substr($file,$pos+1); + } + $type = strtolower($type); + if($type=='jpeg') + $type = 'jpg'; + $mtd = '_parse'.$type; + if(!method_exists($this,$mtd)) + $this->Error('Unsupported image type: '.$type); + $info = $this->$mtd($file); + $info['i'] = count($this->images)+1; + $this->images[$file] = $info; + } + else + $info = $this->images[$file]; + + // Automatic width and height calculation if needed + if($w==0 && $h==0) + { + // Put image at 96 dpi + $w = -96; + $h = -96; + } + if($w<0) + $w = -$info['w']*72/$w/$this->k; + if($h<0) + $h = -$info['h']*72/$h/$this->k; + if($w==0) + $w = $h*$info['w']/$info['h']; + if($h==0) + $h = $w*$info['h']/$info['w']; + + // Flowing mode + if($y===null) + { + if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) + { + // Automatic page break + $x2 = $this->x; + $this->AddPage($this->CurOrientation,$this->CurPageSize); + $this->x = $x2; + } + $y = $this->y; + $this->y += $h; + } + + if($x===null) + $x = $this->x; + $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i'])); + if($link) + $this->Link($x,$y,$w,$h,$link); +} + +function GetX() +{ + // Get x position + return $this->x; +} + +function SetX($x) +{ + // Set x position + if($x>=0) + $this->x = $x; + else + $this->x = $this->w+$x; +} + +function GetY() +{ + // Get y position + return $this->y; +} + +function SetY($y) +{ + // Set y position and reset x + $this->x = $this->lMargin; + if($y>=0) + $this->y = $y; + else + $this->y = $this->h+$y; +} + +function SetXY($x, $y) +{ + // Set x and y positions + $this->SetY($y); + $this->SetX($x); +} + +function Output($name='', $dest='') +{ + // Output PDF to some destination + if($this->state<3) + $this->Close(); + $dest = strtoupper($dest); + if($dest=='') + { + if($name=='') + { + $name = 'doc.pdf'; + $dest = 'I'; + } + else + $dest = 'F'; + } + switch($dest) + { + case 'I': + // Send to standard output + $this->_checkoutput(); + if(PHP_SAPI!='cli') + { + // We send to a browser + header('Content-Type: application/pdf'); + header('Content-Disposition: inline; filename="'.$name.'"'); + header('Cache-Control: private, max-age=0, must-revalidate'); + header('Pragma: public'); + } + echo $this->buffer; + break; + case 'D': + // Download file + $this->_checkoutput(); + header('Content-Type: application/x-download'); + header('Content-Disposition: attachment; filename="'.$name.'"'); + header('Cache-Control: private, max-age=0, must-revalidate'); + header('Pragma: public'); + echo $this->buffer; + break; + case 'F': + // Save to local file + $f = fopen($name,'wb'); + if(!$f) + $this->Error('Unable to create output file: '.$name); + fwrite($f,$this->buffer,strlen($this->buffer)); + fclose($f); + break; + case 'S': + // Return as a string + return $this->buffer; + default: + $this->Error('Incorrect output destination: '.$dest); + } + return ''; +} + +/******************************************************************************* +* * +* Protected methods * +* * +*******************************************************************************/ +function _dochecks() +{ + // Check availability of %F + if(sprintf('%.1F',1.0)!='1.0') + $this->Error('This version of PHP is not supported'); + // Check mbstring overloading + if(ini_get('mbstring.func_overload') & 2) + $this->Error('mbstring overloading must be disabled'); + // Ensure runtime magic quotes are disabled + if(get_magic_quotes_runtime()) + @set_magic_quotes_runtime(0); +} + +function _checkoutput() +{ + if(PHP_SAPI!='cli') + { + if(headers_sent($file,$line)) + $this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)"); + } + if(ob_get_length()) + { + // The output buffer is not empty + if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents())) + { + // It contains only a UTF-8 BOM and/or whitespace, let's clean it + ob_clean(); + } + else + $this->Error("Some data has already been output, can't send PDF file"); + } +} + +function _getpagesize($size) +{ + if(is_string($size)) + { + $size = strtolower($size); + if(!isset($this->StdPageSizes[$size])) + $this->Error('Unknown page size: '.$size); + $a = $this->StdPageSizes[$size]; + return array($a[0]/$this->k, $a[1]/$this->k); + } + else + { + if($size[0]>$size[1]) + return array($size[1], $size[0]); + else + return $size; + } +} + +function _beginpage($orientation, $size) +{ + $this->page++; + $this->pages[$this->page] = ''; + $this->state = 2; + $this->x = $this->lMargin; + $this->y = $this->tMargin; + $this->FontFamily = ''; + // Check page size and orientation + if($orientation=='') + $orientation = $this->DefOrientation; + else + $orientation = strtoupper($orientation[0]); + if($size=='') + $size = $this->DefPageSize; + else + $size = $this->_getpagesize($size); + if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1]) + { + // New size or orientation + if($orientation=='P') + { + $this->w = $size[0]; + $this->h = $size[1]; + } + else + { + $this->w = $size[1]; + $this->h = $size[0]; + } + $this->wPt = $this->w*$this->k; + $this->hPt = $this->h*$this->k; + $this->PageBreakTrigger = $this->h-$this->bMargin; + $this->CurOrientation = $orientation; + $this->CurPageSize = $size; + } + if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1]) + $this->PageSizes[$this->page] = array($this->wPt, $this->hPt); +} + +function _endpage() +{ + $this->state = 1; +} + +function _loadfont($font) +{ + // Load a font definition file from the font directory + include($this->fontpath.$font); + $a = get_defined_vars(); + if(!isset($a['name'])) + $this->Error('Could not include font definition file'); + return $a; +} + +function _escape($s) +{ + // Escape special characters in strings + $s = str_replace('\\','\\\\',$s); + $s = str_replace('(','\\(',$s); + $s = str_replace(')','\\)',$s); + $s = str_replace("\r",'\\r',$s); + return $s; +} + +function _textstring($s) +{ + // Format a text string + return '('.$this->_escape($s).')'; +} + +function _UTF8toUTF16($s) +{ + // Convert UTF-8 to UTF-16BE with BOM + $res = "\xFE\xFF"; + $nb = strlen($s); + $i = 0; + while($i<$nb) + { + $c1 = ord($s[$i++]); + if($c1>=224) + { + // 3-byte character + $c2 = ord($s[$i++]); + $c3 = ord($s[$i++]); + $res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2)); + $res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F)); + } + elseif($c1>=192) + { + // 2-byte character + $c2 = ord($s[$i++]); + $res .= chr(($c1 & 0x1C)>>2); + $res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F)); + } + else + { + // Single-byte character + $res .= "\0".chr($c1); + } + } + return $res; +} + +function _dounderline($x, $y, $txt) +{ + // Underline text + $up = $this->CurrentFont['up']; + $ut = $this->CurrentFont['ut']; + $w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '); + return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); +} + +function _parsejpg($file) +{ + // Extract info from a JPEG file + $a = getimagesize($file); + if(!$a) + $this->Error('Missing or incorrect image file: '.$file); + if($a[2]!=2) + $this->Error('Not a JPEG file: '.$file); + if(!isset($a['channels']) || $a['channels']==3) + $colspace = 'DeviceRGB'; + elseif($a['channels']==4) + $colspace = 'DeviceCMYK'; + else + $colspace = 'DeviceGray'; + $bpc = isset($a['bits']) ? $a['bits'] : 8; + $data = file_get_contents($file); + return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data); +} + +function _parsepng($file) +{ + // Extract info from a PNG file + $f = fopen($file,'rb'); + if(!$f) + $this->Error('Can\'t open image file: '.$file); + $info = $this->_parsepngstream($f,$file); + fclose($f); + return $info; +} + +function _parsepngstream($f, $file) +{ + // Check signature + if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) + $this->Error('Not a PNG file: '.$file); + + // Read header chunk + $this->_readstream($f,4); + if($this->_readstream($f,4)!='IHDR') + $this->Error('Incorrect PNG file: '.$file); + $w = $this->_readint($f); + $h = $this->_readint($f); + $bpc = ord($this->_readstream($f,1)); + if($bpc>8) + $this->Error('16-bit depth not supported: '.$file); + $ct = ord($this->_readstream($f,1)); + if($ct==0 || $ct==4) + $colspace = 'DeviceGray'; + elseif($ct==2 || $ct==6) + $colspace = 'DeviceRGB'; + elseif($ct==3) + $colspace = 'Indexed'; + else + $this->Error('Unknown color type: '.$file); + if(ord($this->_readstream($f,1))!=0) + $this->Error('Unknown compression method: '.$file); + if(ord($this->_readstream($f,1))!=0) + $this->Error('Unknown filter method: '.$file); + if(ord($this->_readstream($f,1))!=0) + $this->Error('Interlacing not supported: '.$file); + $this->_readstream($f,4); + $dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w; + + // Scan chunks looking for palette, transparency and image data + $pal = ''; + $trns = ''; + $data = ''; + do + { + $n = $this->_readint($f); + $type = $this->_readstream($f,4); + if($type=='PLTE') + { + // Read palette + $pal = $this->_readstream($f,$n); + $this->_readstream($f,4); + } + elseif($type=='tRNS') + { + // Read transparency info + $t = $this->_readstream($f,$n); + if($ct==0) + $trns = array(ord(substr($t,1,1))); + elseif($ct==2) + $trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1))); + else + { + $pos = strpos($t,chr(0)); + if($pos!==false) + $trns = array($pos); + } + $this->_readstream($f,4); + } + elseif($type=='IDAT') + { + // Read image data block + $data .= $this->_readstream($f,$n); + $this->_readstream($f,4); + } + elseif($type=='IEND') + break; + else + $this->_readstream($f,$n+4); + } + while($n); + + if($colspace=='Indexed' && empty($pal)) + $this->Error('Missing palette in '.$file); + $info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns); + if($ct>=4) + { + // Extract alpha channel + if(!function_exists('gzuncompress')) + $this->Error('Zlib not available, can\'t handle alpha channel: '.$file); + $data = gzuncompress($data); + $color = ''; + $alpha = ''; + if($ct==4) + { + // Gray image + $len = 2*$w; + for($i=0;$i<$h;$i++) + { + $pos = (1+$len)*$i; + $color .= $data[$pos]; + $alpha .= $data[$pos]; + $line = substr($data,$pos+1,$len); + $color .= preg_replace('/(.)./s','$1',$line); + $alpha .= preg_replace('/.(.)/s','$1',$line); + } + } + else + { + // RGB image + $len = 4*$w; + for($i=0;$i<$h;$i++) + { + $pos = (1+$len)*$i; + $color .= $data[$pos]; + $alpha .= $data[$pos]; + $line = substr($data,$pos+1,$len); + $color .= preg_replace('/(.{3})./s','$1',$line); + $alpha .= preg_replace('/.{3}(.)/s','$1',$line); + } + } + unset($data); + $data = gzcompress($color); + $info['smask'] = gzcompress($alpha); + if($this->PDFVersion<'1.4') + $this->PDFVersion = '1.4'; + } + $info['data'] = $data; + return $info; +} + +function _readstream($f, $n) +{ + // Read n bytes from stream + $res = ''; + while($n>0 && !feof($f)) + { + $s = fread($f,$n); + if($s===false) + $this->Error('Error while reading stream'); + $n -= strlen($s); + $res .= $s; + } + if($n>0) + $this->Error('Unexpected end of stream'); + return $res; +} + +function _readint($f) +{ + // Read a 4-byte integer from stream + $a = unpack('Ni',$this->_readstream($f,4)); + return $a['i']; +} + +function _parsegif($file) +{ + // Extract info from a GIF file (via PNG conversion) + if(!function_exists('imagepng')) + $this->Error('GD extension is required for GIF support'); + if(!function_exists('imagecreatefromgif')) + $this->Error('GD has no GIF read support'); + $im = imagecreatefromgif($file); + if(!$im) + $this->Error('Missing or incorrect image file: '.$file); + imageinterlace($im,0); + $f = @fopen('php://temp','rb+'); + if($f) + { + // Perform conversion in memory + ob_start(); + imagepng($im); + $data = ob_get_clean(); + imagedestroy($im); + fwrite($f,$data); + rewind($f); + $info = $this->_parsepngstream($f,$file); + fclose($f); + } + else + { + // Use temporary file + $tmp = tempnam('.','gif'); + if(!$tmp) + $this->Error('Unable to create a temporary file'); + if(!imagepng($im,$tmp)) + $this->Error('Error while saving to temporary file'); + imagedestroy($im); + $info = $this->_parsepng($tmp); + unlink($tmp); + } + return $info; +} + +function _newobj() +{ + // Begin a new object + $this->n++; + $this->offsets[$this->n] = strlen($this->buffer); + $this->_out($this->n.' 0 obj'); +} + +function _putstream($s) +{ + $this->_out('stream'); + $this->_out($s); + $this->_out('endstream'); +} + +function _out($s) +{ + // Add a line to the document + if($this->state==2) + $this->pages[$this->page] .= $s."\n"; + else + $this->buffer .= $s."\n"; +} + +function _putpages() +{ + $nb = $this->page; + if(!empty($this->AliasNbPages)) + { + // Replace number of pages + for($n=1;$n<=$nb;$n++) + $this->pages[$n] = str_replace($this->AliasNbPages,$nb,$this->pages[$n]); + } + if($this->DefOrientation=='P') + { + $wPt = $this->DefPageSize[0]*$this->k; + $hPt = $this->DefPageSize[1]*$this->k; + } + else + { + $wPt = $this->DefPageSize[1]*$this->k; + $hPt = $this->DefPageSize[0]*$this->k; + } + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + for($n=1;$n<=$nb;$n++) + { + // Page + $this->_newobj(); + $this->_out('<</Type /Page'); + $this->_out('/Parent 1 0 R'); + if(isset($this->PageSizes[$n])) + $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageSizes[$n][0],$this->PageSizes[$n][1])); + $this->_out('/Resources 2 0 R'); + if(isset($this->PageLinks[$n])) + { + // Links + $annots = '/Annots ['; + foreach($this->PageLinks[$n] as $pl) + { + $rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]); + $annots .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] '; + if(is_string($pl[4])) + $annots .= '/A <</S /URI /URI '.$this->_textstring($pl[4]).'>>>>'; + else + { + $l = $this->links[$pl[4]]; + $h = isset($this->PageSizes[$l[0]]) ? $this->PageSizes[$l[0]][1] : $hPt; + $annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',1+2*$l[0],$h-$l[1]*$this->k); + } + } + $this->_out($annots.']'); + } + if($this->PDFVersion>'1.3') + $this->_out('/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>'); + $this->_out('/Contents '.($this->n+1).' 0 R>>'); + $this->_out('endobj'); + // Page content + $p = ($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n]; + $this->_newobj(); + $this->_out('<<'.$filter.'/Length '.strlen($p).'>>'); + $this->_putstream($p); + $this->_out('endobj'); + } + // Pages root + $this->offsets[1] = strlen($this->buffer); + $this->_out('1 0 obj'); + $this->_out('<</Type /Pages'); + $kids = '/Kids ['; + for($i=0;$i<$nb;$i++) + $kids .= (3+2*$i).' 0 R '; + $this->_out($kids.']'); + $this->_out('/Count '.$nb); + $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$wPt,$hPt)); + $this->_out('>>'); + $this->_out('endobj'); +} + +function _putfonts() +{ + $nf = $this->n; + foreach($this->diffs as $diff) + { + // Encodings + $this->_newobj(); + $this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>'); + $this->_out('endobj'); + } + foreach($this->FontFiles as $file=>$info) + { + // Font file embedding + $this->_newobj(); + $this->FontFiles[$file]['n'] = $this->n; + $font = file_get_contents($this->fontpath.$file,true); + if(!$font) + $this->Error('Font file not found: '.$file); + $compressed = (substr($file,-2)=='.z'); + if(!$compressed && isset($info['length2'])) + $font = substr($font,6,$info['length1']).substr($font,6+$info['length1']+6,$info['length2']); + $this->_out('<</Length '.strlen($font)); + if($compressed) + $this->_out('/Filter /FlateDecode'); + $this->_out('/Length1 '.$info['length1']); + if(isset($info['length2'])) + $this->_out('/Length2 '.$info['length2'].' /Length3 0'); + $this->_out('>>'); + $this->_putstream($font); + $this->_out('endobj'); + } + foreach($this->fonts as $k=>$font) + { + // Font objects + $this->fonts[$k]['n'] = $this->n+1; + $type = $font['type']; + $name = $font['name']; + if($type=='Core') + { + // Core font + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_out('/BaseFont /'.$name); + $this->_out('/Subtype /Type1'); + if($name!='Symbol' && $name!='ZapfDingbats') + $this->_out('/Encoding /WinAnsiEncoding'); + $this->_out('>>'); + $this->_out('endobj'); + } + elseif($type=='Type1' || $type=='TrueType') + { + // Additional Type1 or TrueType/OpenType font + $this->_newobj(); + $this->_out('<</Type /Font'); + $this->_out('/BaseFont /'.$name); + $this->_out('/Subtype /'.$type); + $this->_out('/FirstChar 32 /LastChar 255'); + $this->_out('/Widths '.($this->n+1).' 0 R'); + $this->_out('/FontDescriptor '.($this->n+2).' 0 R'); + if(isset($font['diffn'])) + $this->_out('/Encoding '.($nf+$font['diffn']).' 0 R'); + else + $this->_out('/Encoding /WinAnsiEncoding'); + $this->_out('>>'); + $this->_out('endobj'); + // Widths + $this->_newobj(); + $cw = &$font['cw']; + $s = '['; + for($i=32;$i<=255;$i++) + $s .= $cw[chr($i)].' '; + $this->_out($s.']'); + $this->_out('endobj'); + // Descriptor + $this->_newobj(); + $s = '<</Type /FontDescriptor /FontName /'.$name; + foreach($font['desc'] as $k=>$v) + $s .= ' /'.$k.' '.$v; + if(!empty($font['file'])) + $s .= ' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R'; + $this->_out($s.'>>'); + $this->_out('endobj'); + } + else + { + // Allow for additional types + $mtd = '_put'.strtolower($type); + if(!method_exists($this,$mtd)) + $this->Error('Unsupported font type: '.$type); + $this->$mtd($font); + } + } +} + +function _putimages() +{ + foreach(array_keys($this->images) as $file) + { + $this->_putimage($this->images[$file]); + unset($this->images[$file]['data']); + unset($this->images[$file]['smask']); + } +} + +function _putimage(&$info) +{ + $this->_newobj(); + $info['n'] = $this->n; + $this->_out('<</Type /XObject'); + $this->_out('/Subtype /Image'); + $this->_out('/Width '.$info['w']); + $this->_out('/Height '.$info['h']); + if($info['cs']=='Indexed') + $this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]'); + else + { + $this->_out('/ColorSpace /'.$info['cs']); + if($info['cs']=='DeviceCMYK') + $this->_out('/Decode [1 0 1 0 1 0 1 0]'); + } + $this->_out('/BitsPerComponent '.$info['bpc']); + if(isset($info['f'])) + $this->_out('/Filter /'.$info['f']); + if(isset($info['dp'])) + $this->_out('/DecodeParms <<'.$info['dp'].'>>'); + if(isset($info['trns']) && is_array($info['trns'])) + { + $trns = ''; + for($i=0;$i<count($info['trns']);$i++) + $trns .= $info['trns'][$i].' '.$info['trns'][$i].' '; + $this->_out('/Mask ['.$trns.']'); + } + if(isset($info['smask'])) + $this->_out('/SMask '.($this->n+1).' 0 R'); + $this->_out('/Length '.strlen($info['data']).'>>'); + $this->_putstream($info['data']); + $this->_out('endobj'); + // Soft mask + if(isset($info['smask'])) + { + $dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns '.$info['w']; + $smask = array('w'=>$info['w'], 'h'=>$info['h'], 'cs'=>'DeviceGray', 'bpc'=>8, 'f'=>$info['f'], 'dp'=>$dp, 'data'=>$info['smask']); + $this->_putimage($smask); + } + // Palette + if($info['cs']=='Indexed') + { + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal']; + $this->_newobj(); + $this->_out('<<'.$filter.'/Length '.strlen($pal).'>>'); + $this->_putstream($pal); + $this->_out('endobj'); + } +} + +function _putxobjectdict() +{ + foreach($this->images as $image) + $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R'); +} + +function _putresourcedict() +{ + $this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + $this->_out('/Font <<'); + foreach($this->fonts as $font) + $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R'); + $this->_out('>>'); + $this->_out('/XObject <<'); + $this->_putxobjectdict(); + $this->_out('>>'); +} + +function _putresources() +{ + $this->_putfonts(); + $this->_putimages(); + // Resource dictionary + $this->offsets[2] = strlen($this->buffer); + $this->_out('2 0 obj'); + $this->_out('<<'); + $this->_putresourcedict(); + $this->_out('>>'); + $this->_out('endobj'); +} + +function _putinfo() +{ + $this->_out('/Producer '.$this->_textstring('FPDF '.FPDF_VERSION)); + if(!empty($this->title)) + $this->_out('/Title '.$this->_textstring($this->title)); + if(!empty($this->subject)) + $this->_out('/Subject '.$this->_textstring($this->subject)); + if(!empty($this->author)) + $this->_out('/Author '.$this->_textstring($this->author)); + if(!empty($this->keywords)) + $this->_out('/Keywords '.$this->_textstring($this->keywords)); + if(!empty($this->creator)) + $this->_out('/Creator '.$this->_textstring($this->creator)); + $this->_out('/CreationDate '.$this->_textstring('D:'.@date('YmdHis'))); +} + +function _putcatalog() +{ + $this->_out('/Type /Catalog'); + $this->_out('/Pages 1 0 R'); + if($this->ZoomMode=='fullpage') + $this->_out('/OpenAction [3 0 R /Fit]'); + elseif($this->ZoomMode=='fullwidth') + $this->_out('/OpenAction [3 0 R /FitH null]'); + elseif($this->ZoomMode=='real') + $this->_out('/OpenAction [3 0 R /XYZ null null 1]'); + elseif(!is_string($this->ZoomMode)) + $this->_out('/OpenAction [3 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']'); + if($this->LayoutMode=='single') + $this->_out('/PageLayout /SinglePage'); + elseif($this->LayoutMode=='continuous') + $this->_out('/PageLayout /OneColumn'); + elseif($this->LayoutMode=='two') + $this->_out('/PageLayout /TwoColumnLeft'); +} + +function _putheader() +{ + $this->_out('%PDF-'.$this->PDFVersion); +} + +function _puttrailer() +{ + $this->_out('/Size '.($this->n+1)); + $this->_out('/Root '.$this->n.' 0 R'); + $this->_out('/Info '.($this->n-1).' 0 R'); +} + +function _enddoc() +{ + $this->_putheader(); + $this->_putpages(); + $this->_putresources(); + // Info + $this->_newobj(); + $this->_out('<<'); + $this->_putinfo(); + $this->_out('>>'); + $this->_out('endobj'); + // Catalog + $this->_newobj(); + $this->_out('<<'); + $this->_putcatalog(); + $this->_out('>>'); + $this->_out('endobj'); + // Cross-ref + $o = strlen($this->buffer); + $this->_out('xref'); + $this->_out('0 '.($this->n+1)); + $this->_out('0000000000 65535 f '); + for($i=1;$i<=$this->n;$i++) + $this->_out(sprintf('%010d 00000 n ',$this->offsets[$i])); + // Trailer + $this->_out('trailer'); + $this->_out('<<'); + $this->_puttrailer(); + $this->_out('>>'); + $this->_out('startxref'); + $this->_out($o); + $this->_out('%%EOF'); + $this->state = 3; +} +// End of class +} + +// Handle special IE contype request +if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT']=='contype') +{ + header('Content-Type: application/pdf'); + exit; +} + +?> diff --git a/fpdf/install.txt b/fpdf/install.txt new file mode 100644 index 0000000..62d25e6 --- /dev/null +++ b/fpdf/install.txt @@ -0,0 +1,15 @@ +The FPDF library is made up of the following elements: + +- the main file, fpdf.php, which contains the class +- the font definition files located in the font directory + +The font definition files are necessary as soon as you want to output some text in a document. +If they are not accessible, the SetFont() method will produce the following error: + +FPDF error: Could not include font definition file + + +Remarks: + +- Only the files corresponding to the fonts actually used are necessary +- The tutorials provided in this package are ready to be executed diff --git a/fpdf/license.txt b/fpdf/license.txt new file mode 100644 index 0000000..6107ee4 --- /dev/null +++ b/fpdf/license.txt @@ -0,0 +1,6 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software to use, copy, modify, distribute, sublicense, and/or sell +copies of the software, and to permit persons to whom the software is furnished +to do so. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. \ No newline at end of file diff --git a/fpdf/makefont/cp1250.map b/fpdf/makefont/cp1250.map new file mode 100644 index 0000000..ec110af --- /dev/null +++ b/fpdf/makefont/cp1250.map @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+015A Sacute +!8D U+0164 Tcaron +!8E U+017D Zcaron +!8F U+0179 Zacute +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+015B sacute +!9D U+0165 tcaron +!9E U+017E zcaron +!9F U+017A zacute +!A0 U+00A0 space +!A1 U+02C7 caron +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+0104 Aogonek +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+015E Scedilla +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+0105 aogonek +!BA U+015F scedilla +!BB U+00BB guillemotright +!BC U+013D Lcaron +!BD U+02DD hungarumlaut +!BE U+013E lcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff --git a/fpdf/makefont/cp1251.map b/fpdf/makefont/cp1251.map new file mode 100644 index 0000000..de6a198 --- /dev/null +++ b/fpdf/makefont/cp1251.map @@ -0,0 +1,255 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0402 afii10051 +!81 U+0403 afii10052 +!82 U+201A quotesinglbase +!83 U+0453 afii10100 +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+20AC Euro +!89 U+2030 perthousand +!8A U+0409 afii10058 +!8B U+2039 guilsinglleft +!8C U+040A afii10059 +!8D U+040C afii10061 +!8E U+040B afii10060 +!8F U+040F afii10145 +!90 U+0452 afii10099 +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9A U+0459 afii10106 +!9B U+203A guilsinglright +!9C U+045A afii10107 +!9D U+045C afii10109 +!9E U+045B afii10108 +!9F U+045F afii10193 +!A0 U+00A0 space +!A1 U+040E afii10062 +!A2 U+045E afii10110 +!A3 U+0408 afii10057 +!A4 U+00A4 currency +!A5 U+0490 afii10050 +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+0401 afii10023 +!A9 U+00A9 copyright +!AA U+0404 afii10053 +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+0407 afii10056 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+0406 afii10055 +!B3 U+0456 afii10103 +!B4 U+0491 afii10098 +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0451 afii10071 +!B9 U+2116 afii61352 +!BA U+0454 afii10101 +!BB U+00BB guillemotright +!BC U+0458 afii10105 +!BD U+0405 afii10054 +!BE U+0455 afii10102 +!BF U+0457 afii10104 +!C0 U+0410 afii10017 +!C1 U+0411 afii10018 +!C2 U+0412 afii10019 +!C3 U+0413 afii10020 +!C4 U+0414 afii10021 +!C5 U+0415 afii10022 +!C6 U+0416 afii10024 +!C7 U+0417 afii10025 +!C8 U+0418 afii10026 +!C9 U+0419 afii10027 +!CA U+041A afii10028 +!CB U+041B afii10029 +!CC U+041C afii10030 +!CD U+041D afii10031 +!CE U+041E afii10032 +!CF U+041F afii10033 +!D0 U+0420 afii10034 +!D1 U+0421 afii10035 +!D2 U+0422 afii10036 +!D3 U+0423 afii10037 +!D4 U+0424 afii10038 +!D5 U+0425 afii10039 +!D6 U+0426 afii10040 +!D7 U+0427 afii10041 +!D8 U+0428 afii10042 +!D9 U+0429 afii10043 +!DA U+042A afii10044 +!DB U+042B afii10045 +!DC U+042C afii10046 +!DD U+042D afii10047 +!DE U+042E afii10048 +!DF U+042F afii10049 +!E0 U+0430 afii10065 +!E1 U+0431 afii10066 +!E2 U+0432 afii10067 +!E3 U+0433 afii10068 +!E4 U+0434 afii10069 +!E5 U+0435 afii10070 +!E6 U+0436 afii10072 +!E7 U+0437 afii10073 +!E8 U+0438 afii10074 +!E9 U+0439 afii10075 +!EA U+043A afii10076 +!EB U+043B afii10077 +!EC U+043C afii10078 +!ED U+043D afii10079 +!EE U+043E afii10080 +!EF U+043F afii10081 +!F0 U+0440 afii10082 +!F1 U+0441 afii10083 +!F2 U+0442 afii10084 +!F3 U+0443 afii10085 +!F4 U+0444 afii10086 +!F5 U+0445 afii10087 +!F6 U+0446 afii10088 +!F7 U+0447 afii10089 +!F8 U+0448 afii10090 +!F9 U+0449 afii10091 +!FA U+044A afii10092 +!FB U+044B afii10093 +!FC U+044C afii10094 +!FD U+044D afii10095 +!FE U+044E afii10096 +!FF U+044F afii10097 diff --git a/fpdf/makefont/cp1252.map b/fpdf/makefont/cp1252.map new file mode 100644 index 0000000..dd490e5 --- /dev/null +++ b/fpdf/makefont/cp1252.map @@ -0,0 +1,251 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!8E U+017D Zcaron +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9E U+017E zcaron +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/fpdf/makefont/cp1253.map b/fpdf/makefont/cp1253.map new file mode 100644 index 0000000..4bd826f --- /dev/null +++ b/fpdf/makefont/cp1253.map @@ -0,0 +1,239 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+0385 dieresistonos +!A2 U+0386 Alphatonos +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff --git a/fpdf/makefont/cp1254.map b/fpdf/makefont/cp1254.map new file mode 100644 index 0000000..829473b --- /dev/null +++ b/fpdf/makefont/cp1254.map @@ -0,0 +1,249 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8A U+0160 Scaron +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9A U+0161 scaron +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff --git a/fpdf/makefont/cp1255.map b/fpdf/makefont/cp1255.map new file mode 100644 index 0000000..079e10c --- /dev/null +++ b/fpdf/makefont/cp1255.map @@ -0,0 +1,233 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AA afii57636 +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00D7 multiply +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD sfthyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 middot +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00F7 divide +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+05B0 afii57799 +!C1 U+05B1 afii57801 +!C2 U+05B2 afii57800 +!C3 U+05B3 afii57802 +!C4 U+05B4 afii57793 +!C5 U+05B5 afii57794 +!C6 U+05B6 afii57795 +!C7 U+05B7 afii57798 +!C8 U+05B8 afii57797 +!C9 U+05B9 afii57806 +!CB U+05BB afii57796 +!CC U+05BC afii57807 +!CD U+05BD afii57839 +!CE U+05BE afii57645 +!CF U+05BF afii57841 +!D0 U+05C0 afii57842 +!D1 U+05C1 afii57804 +!D2 U+05C2 afii57803 +!D3 U+05C3 afii57658 +!D4 U+05F0 afii57716 +!D5 U+05F1 afii57717 +!D6 U+05F2 afii57718 +!D7 U+05F3 gereshhebrew +!D8 U+05F4 gershayimhebrew +!E0 U+05D0 afii57664 +!E1 U+05D1 afii57665 +!E2 U+05D2 afii57666 +!E3 U+05D3 afii57667 +!E4 U+05D4 afii57668 +!E5 U+05D5 afii57669 +!E6 U+05D6 afii57670 +!E7 U+05D7 afii57671 +!E8 U+05D8 afii57672 +!E9 U+05D9 afii57673 +!EA U+05DA afii57674 +!EB U+05DB afii57675 +!EC U+05DC afii57676 +!ED U+05DD afii57677 +!EE U+05DE afii57678 +!EF U+05DF afii57679 +!F0 U+05E0 afii57680 +!F1 U+05E1 afii57681 +!F2 U+05E2 afii57682 +!F3 U+05E3 afii57683 +!F4 U+05E4 afii57684 +!F5 U+05E5 afii57685 +!F6 U+05E6 afii57686 +!F7 U+05E7 afii57687 +!F8 U+05E8 afii57688 +!F9 U+05E9 afii57689 +!FA U+05EA afii57690 +!FD U+200E afii299 +!FE U+200F afii300 diff --git a/fpdf/makefont/cp1257.map b/fpdf/makefont/cp1257.map new file mode 100644 index 0000000..2f2ecfa --- /dev/null +++ b/fpdf/makefont/cp1257.map @@ -0,0 +1,244 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8D U+00A8 dieresis +!8E U+02C7 caron +!8F U+00B8 cedilla +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!99 U+2122 trademark +!9B U+203A guilsinglright +!9D U+00AF macron +!9E U+02DB ogonek +!A0 U+00A0 space +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00D8 Oslash +!A9 U+00A9 copyright +!AA U+0156 Rcommaaccent +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00C6 AE +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00F8 oslash +!B9 U+00B9 onesuperior +!BA U+0157 rcommaaccent +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00E6 ae +!C0 U+0104 Aogonek +!C1 U+012E Iogonek +!C2 U+0100 Amacron +!C3 U+0106 Cacute +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+0118 Eogonek +!C7 U+0112 Emacron +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0179 Zacute +!CB U+0116 Edotaccent +!CC U+0122 Gcommaaccent +!CD U+0136 Kcommaaccent +!CE U+012A Imacron +!CF U+013B Lcommaaccent +!D0 U+0160 Scaron +!D1 U+0143 Nacute +!D2 U+0145 Ncommaaccent +!D3 U+00D3 Oacute +!D4 U+014C Omacron +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0172 Uogonek +!D9 U+0141 Lslash +!DA U+015A Sacute +!DB U+016A Umacron +!DC U+00DC Udieresis +!DD U+017B Zdotaccent +!DE U+017D Zcaron +!DF U+00DF germandbls +!E0 U+0105 aogonek +!E1 U+012F iogonek +!E2 U+0101 amacron +!E3 U+0107 cacute +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+0119 eogonek +!E7 U+0113 emacron +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+017A zacute +!EB U+0117 edotaccent +!EC U+0123 gcommaaccent +!ED U+0137 kcommaaccent +!EE U+012B imacron +!EF U+013C lcommaaccent +!F0 U+0161 scaron +!F1 U+0144 nacute +!F2 U+0146 ncommaaccent +!F3 U+00F3 oacute +!F4 U+014D omacron +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0173 uogonek +!F9 U+0142 lslash +!FA U+015B sacute +!FB U+016B umacron +!FC U+00FC udieresis +!FD U+017C zdotaccent +!FE U+017E zcaron +!FF U+02D9 dotaccent diff --git a/fpdf/makefont/cp1258.map b/fpdf/makefont/cp1258.map new file mode 100644 index 0000000..fed915f --- /dev/null +++ b/fpdf/makefont/cp1258.map @@ -0,0 +1,247 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!82 U+201A quotesinglbase +!83 U+0192 florin +!84 U+201E quotedblbase +!85 U+2026 ellipsis +!86 U+2020 dagger +!87 U+2021 daggerdbl +!88 U+02C6 circumflex +!89 U+2030 perthousand +!8B U+2039 guilsinglleft +!8C U+0152 OE +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!98 U+02DC tilde +!99 U+2122 trademark +!9B U+203A guilsinglright +!9C U+0153 oe +!9F U+0178 Ydieresis +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+0300 gravecomb +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+00D1 Ntilde +!D2 U+0309 hookabovecomb +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+01A0 Ohorn +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+01AF Uhorn +!DE U+0303 tildecomb +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+0301 acutecomb +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+00F1 ntilde +!F2 U+0323 dotbelowcomb +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+01A1 ohorn +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+01B0 uhorn +!FE U+20AB dong +!FF U+00FF ydieresis diff --git a/fpdf/makefont/cp874.map b/fpdf/makefont/cp874.map new file mode 100644 index 0000000..1006e6b --- /dev/null +++ b/fpdf/makefont/cp874.map @@ -0,0 +1,225 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+20AC Euro +!85 U+2026 ellipsis +!91 U+2018 quoteleft +!92 U+2019 quoteright +!93 U+201C quotedblleft +!94 U+201D quotedblright +!95 U+2022 bullet +!96 U+2013 endash +!97 U+2014 emdash +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff --git a/fpdf/makefont/iso-8859-1.map b/fpdf/makefont/iso-8859-1.map new file mode 100644 index 0000000..61740a3 --- /dev/null +++ b/fpdf/makefont/iso-8859-1.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/fpdf/makefont/iso-8859-11.map b/fpdf/makefont/iso-8859-11.map new file mode 100644 index 0000000..9168812 --- /dev/null +++ b/fpdf/makefont/iso-8859-11.map @@ -0,0 +1,248 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0E01 kokaithai +!A2 U+0E02 khokhaithai +!A3 U+0E03 khokhuatthai +!A4 U+0E04 khokhwaithai +!A5 U+0E05 khokhonthai +!A6 U+0E06 khorakhangthai +!A7 U+0E07 ngonguthai +!A8 U+0E08 chochanthai +!A9 U+0E09 chochingthai +!AA U+0E0A chochangthai +!AB U+0E0B sosothai +!AC U+0E0C chochoethai +!AD U+0E0D yoyingthai +!AE U+0E0E dochadathai +!AF U+0E0F topatakthai +!B0 U+0E10 thothanthai +!B1 U+0E11 thonangmonthothai +!B2 U+0E12 thophuthaothai +!B3 U+0E13 nonenthai +!B4 U+0E14 dodekthai +!B5 U+0E15 totaothai +!B6 U+0E16 thothungthai +!B7 U+0E17 thothahanthai +!B8 U+0E18 thothongthai +!B9 U+0E19 nonuthai +!BA U+0E1A bobaimaithai +!BB U+0E1B poplathai +!BC U+0E1C phophungthai +!BD U+0E1D fofathai +!BE U+0E1E phophanthai +!BF U+0E1F fofanthai +!C0 U+0E20 phosamphaothai +!C1 U+0E21 momathai +!C2 U+0E22 yoyakthai +!C3 U+0E23 roruathai +!C4 U+0E24 ruthai +!C5 U+0E25 lolingthai +!C6 U+0E26 luthai +!C7 U+0E27 wowaenthai +!C8 U+0E28 sosalathai +!C9 U+0E29 sorusithai +!CA U+0E2A sosuathai +!CB U+0E2B hohipthai +!CC U+0E2C lochulathai +!CD U+0E2D oangthai +!CE U+0E2E honokhukthai +!CF U+0E2F paiyannoithai +!D0 U+0E30 saraathai +!D1 U+0E31 maihanakatthai +!D2 U+0E32 saraaathai +!D3 U+0E33 saraamthai +!D4 U+0E34 saraithai +!D5 U+0E35 saraiithai +!D6 U+0E36 sarauethai +!D7 U+0E37 saraueethai +!D8 U+0E38 sarauthai +!D9 U+0E39 sarauuthai +!DA U+0E3A phinthuthai +!DF U+0E3F bahtthai +!E0 U+0E40 saraethai +!E1 U+0E41 saraaethai +!E2 U+0E42 saraothai +!E3 U+0E43 saraaimaimuanthai +!E4 U+0E44 saraaimaimalaithai +!E5 U+0E45 lakkhangyaothai +!E6 U+0E46 maiyamokthai +!E7 U+0E47 maitaikhuthai +!E8 U+0E48 maiekthai +!E9 U+0E49 maithothai +!EA U+0E4A maitrithai +!EB U+0E4B maichattawathai +!EC U+0E4C thanthakhatthai +!ED U+0E4D nikhahitthai +!EE U+0E4E yamakkanthai +!EF U+0E4F fongmanthai +!F0 U+0E50 zerothai +!F1 U+0E51 onethai +!F2 U+0E52 twothai +!F3 U+0E53 threethai +!F4 U+0E54 fourthai +!F5 U+0E55 fivethai +!F6 U+0E56 sixthai +!F7 U+0E57 seventhai +!F8 U+0E58 eightthai +!F9 U+0E59 ninethai +!FA U+0E5A angkhankhuthai +!FB U+0E5B khomutthai diff --git a/fpdf/makefont/iso-8859-15.map b/fpdf/makefont/iso-8859-15.map new file mode 100644 index 0000000..6c2b571 --- /dev/null +++ b/fpdf/makefont/iso-8859-15.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+20AC Euro +!A5 U+00A5 yen +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+017D Zcaron +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+00D0 Eth +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+00DE Thorn +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+00F0 eth +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+00FE thorn +!FF U+00FF ydieresis diff --git a/fpdf/makefont/iso-8859-16.map b/fpdf/makefont/iso-8859-16.map new file mode 100644 index 0000000..202c8fe --- /dev/null +++ b/fpdf/makefont/iso-8859-16.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0105 aogonek +!A3 U+0141 Lslash +!A4 U+20AC Euro +!A5 U+201E quotedblbase +!A6 U+0160 Scaron +!A7 U+00A7 section +!A8 U+0161 scaron +!A9 U+00A9 copyright +!AA U+0218 Scommaaccent +!AB U+00AB guillemotleft +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017A zacute +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+010C Ccaron +!B3 U+0142 lslash +!B4 U+017D Zcaron +!B5 U+201D quotedblright +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+017E zcaron +!B9 U+010D ccaron +!BA U+0219 scommaaccent +!BB U+00BB guillemotright +!BC U+0152 OE +!BD U+0153 oe +!BE U+0178 Ydieresis +!BF U+017C zdotaccent +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0106 Cacute +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+015A Sacute +!D8 U+0170 Uhungarumlaut +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0118 Eogonek +!DE U+021A Tcommaaccent +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+0107 cacute +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+015B sacute +!F8 U+0171 uhungarumlaut +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0119 eogonek +!FE U+021B tcommaaccent +!FF U+00FF ydieresis diff --git a/fpdf/makefont/iso-8859-2.map b/fpdf/makefont/iso-8859-2.map new file mode 100644 index 0000000..65ae09f --- /dev/null +++ b/fpdf/makefont/iso-8859-2.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+02D8 breve +!A3 U+0141 Lslash +!A4 U+00A4 currency +!A5 U+013D Lcaron +!A6 U+015A Sacute +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+015E Scedilla +!AB U+0164 Tcaron +!AC U+0179 Zacute +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+017B Zdotaccent +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0142 lslash +!B4 U+00B4 acute +!B5 U+013E lcaron +!B6 U+015B sacute +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+015F scedilla +!BB U+0165 tcaron +!BC U+017A zacute +!BD U+02DD hungarumlaut +!BE U+017E zcaron +!BF U+017C zdotaccent +!C0 U+0154 Racute +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+0102 Abreve +!C4 U+00C4 Adieresis +!C5 U+0139 Lacute +!C6 U+0106 Cacute +!C7 U+00C7 Ccedilla +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+011A Ecaron +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+010E Dcaron +!D0 U+0110 Dcroat +!D1 U+0143 Nacute +!D2 U+0147 Ncaron +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+0150 Ohungarumlaut +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+0158 Rcaron +!D9 U+016E Uring +!DA U+00DA Uacute +!DB U+0170 Uhungarumlaut +!DC U+00DC Udieresis +!DD U+00DD Yacute +!DE U+0162 Tcommaaccent +!DF U+00DF germandbls +!E0 U+0155 racute +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+0103 abreve +!E4 U+00E4 adieresis +!E5 U+013A lacute +!E6 U+0107 cacute +!E7 U+00E7 ccedilla +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+011B ecaron +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+010F dcaron +!F0 U+0111 dcroat +!F1 U+0144 nacute +!F2 U+0148 ncaron +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+0151 ohungarumlaut +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+0159 rcaron +!F9 U+016F uring +!FA U+00FA uacute +!FB U+0171 uhungarumlaut +!FC U+00FC udieresis +!FD U+00FD yacute +!FE U+0163 tcommaaccent +!FF U+02D9 dotaccent diff --git a/fpdf/makefont/iso-8859-4.map b/fpdf/makefont/iso-8859-4.map new file mode 100644 index 0000000..a7d87bf --- /dev/null +++ b/fpdf/makefont/iso-8859-4.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0104 Aogonek +!A2 U+0138 kgreenlandic +!A3 U+0156 Rcommaaccent +!A4 U+00A4 currency +!A5 U+0128 Itilde +!A6 U+013B Lcommaaccent +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+0160 Scaron +!AA U+0112 Emacron +!AB U+0122 Gcommaaccent +!AC U+0166 Tbar +!AD U+00AD hyphen +!AE U+017D Zcaron +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+0105 aogonek +!B2 U+02DB ogonek +!B3 U+0157 rcommaaccent +!B4 U+00B4 acute +!B5 U+0129 itilde +!B6 U+013C lcommaaccent +!B7 U+02C7 caron +!B8 U+00B8 cedilla +!B9 U+0161 scaron +!BA U+0113 emacron +!BB U+0123 gcommaaccent +!BC U+0167 tbar +!BD U+014A Eng +!BE U+017E zcaron +!BF U+014B eng +!C0 U+0100 Amacron +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+012E Iogonek +!C8 U+010C Ccaron +!C9 U+00C9 Eacute +!CA U+0118 Eogonek +!CB U+00CB Edieresis +!CC U+0116 Edotaccent +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+012A Imacron +!D0 U+0110 Dcroat +!D1 U+0145 Ncommaaccent +!D2 U+014C Omacron +!D3 U+0136 Kcommaaccent +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+0172 Uogonek +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0168 Utilde +!DE U+016A Umacron +!DF U+00DF germandbls +!E0 U+0101 amacron +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+012F iogonek +!E8 U+010D ccaron +!E9 U+00E9 eacute +!EA U+0119 eogonek +!EB U+00EB edieresis +!EC U+0117 edotaccent +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+012B imacron +!F0 U+0111 dcroat +!F1 U+0146 ncommaaccent +!F2 U+014D omacron +!F3 U+0137 kcommaaccent +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+0173 uogonek +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0169 utilde +!FE U+016B umacron +!FF U+02D9 dotaccent diff --git a/fpdf/makefont/iso-8859-5.map b/fpdf/makefont/iso-8859-5.map new file mode 100644 index 0000000..f9cd4ed --- /dev/null +++ b/fpdf/makefont/iso-8859-5.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+0401 afii10023 +!A2 U+0402 afii10051 +!A3 U+0403 afii10052 +!A4 U+0404 afii10053 +!A5 U+0405 afii10054 +!A6 U+0406 afii10055 +!A7 U+0407 afii10056 +!A8 U+0408 afii10057 +!A9 U+0409 afii10058 +!AA U+040A afii10059 +!AB U+040B afii10060 +!AC U+040C afii10061 +!AD U+00AD hyphen +!AE U+040E afii10062 +!AF U+040F afii10145 +!B0 U+0410 afii10017 +!B1 U+0411 afii10018 +!B2 U+0412 afii10019 +!B3 U+0413 afii10020 +!B4 U+0414 afii10021 +!B5 U+0415 afii10022 +!B6 U+0416 afii10024 +!B7 U+0417 afii10025 +!B8 U+0418 afii10026 +!B9 U+0419 afii10027 +!BA U+041A afii10028 +!BB U+041B afii10029 +!BC U+041C afii10030 +!BD U+041D afii10031 +!BE U+041E afii10032 +!BF U+041F afii10033 +!C0 U+0420 afii10034 +!C1 U+0421 afii10035 +!C2 U+0422 afii10036 +!C3 U+0423 afii10037 +!C4 U+0424 afii10038 +!C5 U+0425 afii10039 +!C6 U+0426 afii10040 +!C7 U+0427 afii10041 +!C8 U+0428 afii10042 +!C9 U+0429 afii10043 +!CA U+042A afii10044 +!CB U+042B afii10045 +!CC U+042C afii10046 +!CD U+042D afii10047 +!CE U+042E afii10048 +!CF U+042F afii10049 +!D0 U+0430 afii10065 +!D1 U+0431 afii10066 +!D2 U+0432 afii10067 +!D3 U+0433 afii10068 +!D4 U+0434 afii10069 +!D5 U+0435 afii10070 +!D6 U+0436 afii10072 +!D7 U+0437 afii10073 +!D8 U+0438 afii10074 +!D9 U+0439 afii10075 +!DA U+043A afii10076 +!DB U+043B afii10077 +!DC U+043C afii10078 +!DD U+043D afii10079 +!DE U+043E afii10080 +!DF U+043F afii10081 +!E0 U+0440 afii10082 +!E1 U+0441 afii10083 +!E2 U+0442 afii10084 +!E3 U+0443 afii10085 +!E4 U+0444 afii10086 +!E5 U+0445 afii10087 +!E6 U+0446 afii10088 +!E7 U+0447 afii10089 +!E8 U+0448 afii10090 +!E9 U+0449 afii10091 +!EA U+044A afii10092 +!EB U+044B afii10093 +!EC U+044C afii10094 +!ED U+044D afii10095 +!EE U+044E afii10096 +!EF U+044F afii10097 +!F0 U+2116 afii61352 +!F1 U+0451 afii10071 +!F2 U+0452 afii10099 +!F3 U+0453 afii10100 +!F4 U+0454 afii10101 +!F5 U+0455 afii10102 +!F6 U+0456 afii10103 +!F7 U+0457 afii10104 +!F8 U+0458 afii10105 +!F9 U+0459 afii10106 +!FA U+045A afii10107 +!FB U+045B afii10108 +!FC U+045C afii10109 +!FD U+00A7 section +!FE U+045E afii10110 +!FF U+045F afii10193 diff --git a/fpdf/makefont/iso-8859-7.map b/fpdf/makefont/iso-8859-7.map new file mode 100644 index 0000000..e163796 --- /dev/null +++ b/fpdf/makefont/iso-8859-7.map @@ -0,0 +1,250 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+2018 quoteleft +!A2 U+2019 quoteright +!A3 U+00A3 sterling +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AF U+2015 afii00208 +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+0384 tonos +!B5 U+0385 dieresistonos +!B6 U+0386 Alphatonos +!B7 U+00B7 periodcentered +!B8 U+0388 Epsilontonos +!B9 U+0389 Etatonos +!BA U+038A Iotatonos +!BB U+00BB guillemotright +!BC U+038C Omicrontonos +!BD U+00BD onehalf +!BE U+038E Upsilontonos +!BF U+038F Omegatonos +!C0 U+0390 iotadieresistonos +!C1 U+0391 Alpha +!C2 U+0392 Beta +!C3 U+0393 Gamma +!C4 U+0394 Delta +!C5 U+0395 Epsilon +!C6 U+0396 Zeta +!C7 U+0397 Eta +!C8 U+0398 Theta +!C9 U+0399 Iota +!CA U+039A Kappa +!CB U+039B Lambda +!CC U+039C Mu +!CD U+039D Nu +!CE U+039E Xi +!CF U+039F Omicron +!D0 U+03A0 Pi +!D1 U+03A1 Rho +!D3 U+03A3 Sigma +!D4 U+03A4 Tau +!D5 U+03A5 Upsilon +!D6 U+03A6 Phi +!D7 U+03A7 Chi +!D8 U+03A8 Psi +!D9 U+03A9 Omega +!DA U+03AA Iotadieresis +!DB U+03AB Upsilondieresis +!DC U+03AC alphatonos +!DD U+03AD epsilontonos +!DE U+03AE etatonos +!DF U+03AF iotatonos +!E0 U+03B0 upsilondieresistonos +!E1 U+03B1 alpha +!E2 U+03B2 beta +!E3 U+03B3 gamma +!E4 U+03B4 delta +!E5 U+03B5 epsilon +!E6 U+03B6 zeta +!E7 U+03B7 eta +!E8 U+03B8 theta +!E9 U+03B9 iota +!EA U+03BA kappa +!EB U+03BB lambda +!EC U+03BC mu +!ED U+03BD nu +!EE U+03BE xi +!EF U+03BF omicron +!F0 U+03C0 pi +!F1 U+03C1 rho +!F2 U+03C2 sigma1 +!F3 U+03C3 sigma +!F4 U+03C4 tau +!F5 U+03C5 upsilon +!F6 U+03C6 phi +!F7 U+03C7 chi +!F8 U+03C8 psi +!F9 U+03C9 omega +!FA U+03CA iotadieresis +!FB U+03CB upsilondieresis +!FC U+03CC omicrontonos +!FD U+03CD upsilontonos +!FE U+03CE omegatonos diff --git a/fpdf/makefont/iso-8859-9.map b/fpdf/makefont/iso-8859-9.map new file mode 100644 index 0000000..48c123a --- /dev/null +++ b/fpdf/makefont/iso-8859-9.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+0080 .notdef +!81 U+0081 .notdef +!82 U+0082 .notdef +!83 U+0083 .notdef +!84 U+0084 .notdef +!85 U+0085 .notdef +!86 U+0086 .notdef +!87 U+0087 .notdef +!88 U+0088 .notdef +!89 U+0089 .notdef +!8A U+008A .notdef +!8B U+008B .notdef +!8C U+008C .notdef +!8D U+008D .notdef +!8E U+008E .notdef +!8F U+008F .notdef +!90 U+0090 .notdef +!91 U+0091 .notdef +!92 U+0092 .notdef +!93 U+0093 .notdef +!94 U+0094 .notdef +!95 U+0095 .notdef +!96 U+0096 .notdef +!97 U+0097 .notdef +!98 U+0098 .notdef +!99 U+0099 .notdef +!9A U+009A .notdef +!9B U+009B .notdef +!9C U+009C .notdef +!9D U+009D .notdef +!9E U+009E .notdef +!9F U+009F .notdef +!A0 U+00A0 space +!A1 U+00A1 exclamdown +!A2 U+00A2 cent +!A3 U+00A3 sterling +!A4 U+00A4 currency +!A5 U+00A5 yen +!A6 U+00A6 brokenbar +!A7 U+00A7 section +!A8 U+00A8 dieresis +!A9 U+00A9 copyright +!AA U+00AA ordfeminine +!AB U+00AB guillemotleft +!AC U+00AC logicalnot +!AD U+00AD hyphen +!AE U+00AE registered +!AF U+00AF macron +!B0 U+00B0 degree +!B1 U+00B1 plusminus +!B2 U+00B2 twosuperior +!B3 U+00B3 threesuperior +!B4 U+00B4 acute +!B5 U+00B5 mu +!B6 U+00B6 paragraph +!B7 U+00B7 periodcentered +!B8 U+00B8 cedilla +!B9 U+00B9 onesuperior +!BA U+00BA ordmasculine +!BB U+00BB guillemotright +!BC U+00BC onequarter +!BD U+00BD onehalf +!BE U+00BE threequarters +!BF U+00BF questiondown +!C0 U+00C0 Agrave +!C1 U+00C1 Aacute +!C2 U+00C2 Acircumflex +!C3 U+00C3 Atilde +!C4 U+00C4 Adieresis +!C5 U+00C5 Aring +!C6 U+00C6 AE +!C7 U+00C7 Ccedilla +!C8 U+00C8 Egrave +!C9 U+00C9 Eacute +!CA U+00CA Ecircumflex +!CB U+00CB Edieresis +!CC U+00CC Igrave +!CD U+00CD Iacute +!CE U+00CE Icircumflex +!CF U+00CF Idieresis +!D0 U+011E Gbreve +!D1 U+00D1 Ntilde +!D2 U+00D2 Ograve +!D3 U+00D3 Oacute +!D4 U+00D4 Ocircumflex +!D5 U+00D5 Otilde +!D6 U+00D6 Odieresis +!D7 U+00D7 multiply +!D8 U+00D8 Oslash +!D9 U+00D9 Ugrave +!DA U+00DA Uacute +!DB U+00DB Ucircumflex +!DC U+00DC Udieresis +!DD U+0130 Idotaccent +!DE U+015E Scedilla +!DF U+00DF germandbls +!E0 U+00E0 agrave +!E1 U+00E1 aacute +!E2 U+00E2 acircumflex +!E3 U+00E3 atilde +!E4 U+00E4 adieresis +!E5 U+00E5 aring +!E6 U+00E6 ae +!E7 U+00E7 ccedilla +!E8 U+00E8 egrave +!E9 U+00E9 eacute +!EA U+00EA ecircumflex +!EB U+00EB edieresis +!EC U+00EC igrave +!ED U+00ED iacute +!EE U+00EE icircumflex +!EF U+00EF idieresis +!F0 U+011F gbreve +!F1 U+00F1 ntilde +!F2 U+00F2 ograve +!F3 U+00F3 oacute +!F4 U+00F4 ocircumflex +!F5 U+00F5 otilde +!F6 U+00F6 odieresis +!F7 U+00F7 divide +!F8 U+00F8 oslash +!F9 U+00F9 ugrave +!FA U+00FA uacute +!FB U+00FB ucircumflex +!FC U+00FC udieresis +!FD U+0131 dotlessi +!FE U+015F scedilla +!FF U+00FF ydieresis diff --git a/fpdf/makefont/koi8-r.map b/fpdf/makefont/koi8-r.map new file mode 100644 index 0000000..6ad5d05 --- /dev/null +++ b/fpdf/makefont/koi8-r.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2219 periodcentered +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+2553 SF520000 +!A5 U+2554 SF390000 +!A6 U+2555 SF220000 +!A7 U+2556 SF210000 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+255C SF270000 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+2562 SF200000 +!B5 U+2563 SF230000 +!B6 U+2564 SF470000 +!B7 U+2565 SF480000 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+256B SF530000 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff --git a/fpdf/makefont/koi8-u.map b/fpdf/makefont/koi8-u.map new file mode 100644 index 0000000..40a7e4f --- /dev/null +++ b/fpdf/makefont/koi8-u.map @@ -0,0 +1,256 @@ +!00 U+0000 .notdef +!01 U+0001 .notdef +!02 U+0002 .notdef +!03 U+0003 .notdef +!04 U+0004 .notdef +!05 U+0005 .notdef +!06 U+0006 .notdef +!07 U+0007 .notdef +!08 U+0008 .notdef +!09 U+0009 .notdef +!0A U+000A .notdef +!0B U+000B .notdef +!0C U+000C .notdef +!0D U+000D .notdef +!0E U+000E .notdef +!0F U+000F .notdef +!10 U+0010 .notdef +!11 U+0011 .notdef +!12 U+0012 .notdef +!13 U+0013 .notdef +!14 U+0014 .notdef +!15 U+0015 .notdef +!16 U+0016 .notdef +!17 U+0017 .notdef +!18 U+0018 .notdef +!19 U+0019 .notdef +!1A U+001A .notdef +!1B U+001B .notdef +!1C U+001C .notdef +!1D U+001D .notdef +!1E U+001E .notdef +!1F U+001F .notdef +!20 U+0020 space +!21 U+0021 exclam +!22 U+0022 quotedbl +!23 U+0023 numbersign +!24 U+0024 dollar +!25 U+0025 percent +!26 U+0026 ampersand +!27 U+0027 quotesingle +!28 U+0028 parenleft +!29 U+0029 parenright +!2A U+002A asterisk +!2B U+002B plus +!2C U+002C comma +!2D U+002D hyphen +!2E U+002E period +!2F U+002F slash +!30 U+0030 zero +!31 U+0031 one +!32 U+0032 two +!33 U+0033 three +!34 U+0034 four +!35 U+0035 five +!36 U+0036 six +!37 U+0037 seven +!38 U+0038 eight +!39 U+0039 nine +!3A U+003A colon +!3B U+003B semicolon +!3C U+003C less +!3D U+003D equal +!3E U+003E greater +!3F U+003F question +!40 U+0040 at +!41 U+0041 A +!42 U+0042 B +!43 U+0043 C +!44 U+0044 D +!45 U+0045 E +!46 U+0046 F +!47 U+0047 G +!48 U+0048 H +!49 U+0049 I +!4A U+004A J +!4B U+004B K +!4C U+004C L +!4D U+004D M +!4E U+004E N +!4F U+004F O +!50 U+0050 P +!51 U+0051 Q +!52 U+0052 R +!53 U+0053 S +!54 U+0054 T +!55 U+0055 U +!56 U+0056 V +!57 U+0057 W +!58 U+0058 X +!59 U+0059 Y +!5A U+005A Z +!5B U+005B bracketleft +!5C U+005C backslash +!5D U+005D bracketright +!5E U+005E asciicircum +!5F U+005F underscore +!60 U+0060 grave +!61 U+0061 a +!62 U+0062 b +!63 U+0063 c +!64 U+0064 d +!65 U+0065 e +!66 U+0066 f +!67 U+0067 g +!68 U+0068 h +!69 U+0069 i +!6A U+006A j +!6B U+006B k +!6C U+006C l +!6D U+006D m +!6E U+006E n +!6F U+006F o +!70 U+0070 p +!71 U+0071 q +!72 U+0072 r +!73 U+0073 s +!74 U+0074 t +!75 U+0075 u +!76 U+0076 v +!77 U+0077 w +!78 U+0078 x +!79 U+0079 y +!7A U+007A z +!7B U+007B braceleft +!7C U+007C bar +!7D U+007D braceright +!7E U+007E asciitilde +!7F U+007F .notdef +!80 U+2500 SF100000 +!81 U+2502 SF110000 +!82 U+250C SF010000 +!83 U+2510 SF030000 +!84 U+2514 SF020000 +!85 U+2518 SF040000 +!86 U+251C SF080000 +!87 U+2524 SF090000 +!88 U+252C SF060000 +!89 U+2534 SF070000 +!8A U+253C SF050000 +!8B U+2580 upblock +!8C U+2584 dnblock +!8D U+2588 block +!8E U+258C lfblock +!8F U+2590 rtblock +!90 U+2591 ltshade +!91 U+2592 shade +!92 U+2593 dkshade +!93 U+2320 integraltp +!94 U+25A0 filledbox +!95 U+2022 bullet +!96 U+221A radical +!97 U+2248 approxequal +!98 U+2264 lessequal +!99 U+2265 greaterequal +!9A U+00A0 space +!9B U+2321 integralbt +!9C U+00B0 degree +!9D U+00B2 twosuperior +!9E U+00B7 periodcentered +!9F U+00F7 divide +!A0 U+2550 SF430000 +!A1 U+2551 SF240000 +!A2 U+2552 SF510000 +!A3 U+0451 afii10071 +!A4 U+0454 afii10101 +!A5 U+2554 SF390000 +!A6 U+0456 afii10103 +!A7 U+0457 afii10104 +!A8 U+2557 SF250000 +!A9 U+2558 SF500000 +!AA U+2559 SF490000 +!AB U+255A SF380000 +!AC U+255B SF280000 +!AD U+0491 afii10098 +!AE U+255D SF260000 +!AF U+255E SF360000 +!B0 U+255F SF370000 +!B1 U+2560 SF420000 +!B2 U+2561 SF190000 +!B3 U+0401 afii10023 +!B4 U+0404 afii10053 +!B5 U+2563 SF230000 +!B6 U+0406 afii10055 +!B7 U+0407 afii10056 +!B8 U+2566 SF410000 +!B9 U+2567 SF450000 +!BA U+2568 SF460000 +!BB U+2569 SF400000 +!BC U+256A SF540000 +!BD U+0490 afii10050 +!BE U+256C SF440000 +!BF U+00A9 copyright +!C0 U+044E afii10096 +!C1 U+0430 afii10065 +!C2 U+0431 afii10066 +!C3 U+0446 afii10088 +!C4 U+0434 afii10069 +!C5 U+0435 afii10070 +!C6 U+0444 afii10086 +!C7 U+0433 afii10068 +!C8 U+0445 afii10087 +!C9 U+0438 afii10074 +!CA U+0439 afii10075 +!CB U+043A afii10076 +!CC U+043B afii10077 +!CD U+043C afii10078 +!CE U+043D afii10079 +!CF U+043E afii10080 +!D0 U+043F afii10081 +!D1 U+044F afii10097 +!D2 U+0440 afii10082 +!D3 U+0441 afii10083 +!D4 U+0442 afii10084 +!D5 U+0443 afii10085 +!D6 U+0436 afii10072 +!D7 U+0432 afii10067 +!D8 U+044C afii10094 +!D9 U+044B afii10093 +!DA U+0437 afii10073 +!DB U+0448 afii10090 +!DC U+044D afii10095 +!DD U+0449 afii10091 +!DE U+0447 afii10089 +!DF U+044A afii10092 +!E0 U+042E afii10048 +!E1 U+0410 afii10017 +!E2 U+0411 afii10018 +!E3 U+0426 afii10040 +!E4 U+0414 afii10021 +!E5 U+0415 afii10022 +!E6 U+0424 afii10038 +!E7 U+0413 afii10020 +!E8 U+0425 afii10039 +!E9 U+0418 afii10026 +!EA U+0419 afii10027 +!EB U+041A afii10028 +!EC U+041B afii10029 +!ED U+041C afii10030 +!EE U+041D afii10031 +!EF U+041E afii10032 +!F0 U+041F afii10033 +!F1 U+042F afii10049 +!F2 U+0420 afii10034 +!F3 U+0421 afii10035 +!F4 U+0422 afii10036 +!F5 U+0423 afii10037 +!F6 U+0416 afii10024 +!F7 U+0412 afii10019 +!F8 U+042C afii10046 +!F9 U+042B afii10045 +!FA U+0417 afii10025 +!FB U+0428 afii10042 +!FC U+042D afii10047 +!FD U+0429 afii10043 +!FE U+0427 afii10041 +!FF U+042A afii10044 diff --git a/fpdf/makefont/makefont.php b/fpdf/makefont/makefont.php new file mode 100644 index 0000000..eb92a26 --- /dev/null +++ b/fpdf/makefont/makefont.php @@ -0,0 +1,373 @@ +<?php +/******************************************************************************* +* Utility to generate font definition files * +* * +* Version: 1.2 * +* Date: 2011-06-18 * +* Author: Olivier PLATHEY * +*******************************************************************************/ + +require('ttfparser.php'); + +function Message($txt, $severity='') +{ + if(PHP_SAPI=='cli') + { + if($severity) + echo "$severity: "; + echo "$txt\n"; + } + else + { + if($severity) + echo "<b>$severity</b>: "; + echo "$txt<br>"; + } +} + +function Notice($txt) +{ + Message($txt, 'Notice'); +} + +function Warning($txt) +{ + Message($txt, 'Warning'); +} + +function Error($txt) +{ + Message($txt, 'Error'); + exit; +} + +function LoadMap($enc) +{ + $file = dirname(__FILE__).'/'.strtolower($enc).'.map'; + $a = file($file); + if(empty($a)) + Error('Encoding not found: '.$enc); + $map = array_fill(0, 256, array('uv'=>-1, 'name'=>'.notdef')); + foreach($a as $line) + { + $e = explode(' ', rtrim($line)); + $c = hexdec(substr($e[0],1)); + $uv = hexdec(substr($e[1],2)); + $name = $e[2]; + $map[$c] = array('uv'=>$uv, 'name'=>$name); + } + return $map; +} + +function GetInfoFromTrueType($file, $embed, $map) +{ + // Return informations from a TrueType font + $ttf = new TTFParser(); + $ttf->Parse($file); + if($embed) + { + if(!$ttf->Embeddable) + Error('Font license does not allow embedding'); + $info['Data'] = file_get_contents($file); + $info['OriginalSize'] = filesize($file); + } + $k = 1000/$ttf->unitsPerEm; + $info['FontName'] = $ttf->postScriptName; + $info['Bold'] = $ttf->Bold; + $info['ItalicAngle'] = $ttf->italicAngle; + $info['IsFixedPitch'] = $ttf->isFixedPitch; + $info['Ascender'] = round($k*$ttf->typoAscender); + $info['Descender'] = round($k*$ttf->typoDescender); + $info['UnderlineThickness'] = round($k*$ttf->underlineThickness); + $info['UnderlinePosition'] = round($k*$ttf->underlinePosition); + $info['FontBBox'] = array(round($k*$ttf->xMin), round($k*$ttf->yMin), round($k*$ttf->xMax), round($k*$ttf->yMax)); + $info['CapHeight'] = round($k*$ttf->capHeight); + $info['MissingWidth'] = round($k*$ttf->widths[0]); + $widths = array_fill(0, 256, $info['MissingWidth']); + for($c=0;$c<=255;$c++) + { + if($map[$c]['name']!='.notdef') + { + $uv = $map[$c]['uv']; + if(isset($ttf->chars[$uv])) + { + $w = $ttf->widths[$ttf->chars[$uv]]; + $widths[$c] = round($k*$w); + } + else + Warning('Character '.$map[$c]['name'].' is missing'); + } + } + $info['Widths'] = $widths; + return $info; +} + +function GetInfoFromType1($file, $embed, $map) +{ + // Return informations from a Type1 font + if($embed) + { + $f = fopen($file, 'rb'); + if(!$f) + Error('Can\'t open font file'); + // Read first segment + $a = unpack('Cmarker/Ctype/Vsize', fread($f,6)); + if($a['marker']!=128) + Error('Font file is not a valid binary Type1'); + $size1 = $a['size']; + $data = fread($f, $size1); + // Read second segment + $a = unpack('Cmarker/Ctype/Vsize', fread($f,6)); + if($a['marker']!=128) + Error('Font file is not a valid binary Type1'); + $size2 = $a['size']; + $data .= fread($f, $size2); + fclose($f); + $info['Data'] = $data; + $info['Size1'] = $size1; + $info['Size2'] = $size2; + } + + $afm = substr($file, 0, -3).'afm'; + if(!file_exists($afm)) + Error('AFM font file not found: '.$afm); + $a = file($afm); + if(empty($a)) + Error('AFM file empty or not readable'); + foreach($a as $line) + { + $e = explode(' ', rtrim($line)); + if(count($e)<2) + continue; + $entry = $e[0]; + if($entry=='C') + { + $w = $e[4]; + $name = $e[7]; + $cw[$name] = $w; + } + elseif($entry=='FontName') + $info['FontName'] = $e[1]; + elseif($entry=='Weight') + $info['Weight'] = $e[1]; + elseif($entry=='ItalicAngle') + $info['ItalicAngle'] = (int)$e[1]; + elseif($entry=='Ascender') + $info['Ascender'] = (int)$e[1]; + elseif($entry=='Descender') + $info['Descender'] = (int)$e[1]; + elseif($entry=='UnderlineThickness') + $info['UnderlineThickness'] = (int)$e[1]; + elseif($entry=='UnderlinePosition') + $info['UnderlinePosition'] = (int)$e[1]; + elseif($entry=='IsFixedPitch') + $info['IsFixedPitch'] = ($e[1]=='true'); + elseif($entry=='FontBBox') + $info['FontBBox'] = array((int)$e[1], (int)$e[2], (int)$e[3], (int)$e[4]); + elseif($entry=='CapHeight') + $info['CapHeight'] = (int)$e[1]; + elseif($entry=='StdVW') + $info['StdVW'] = (int)$e[1]; + } + + if(!isset($info['FontName'])) + Error('FontName missing in AFM file'); + $info['Bold'] = isset($info['Weight']) && preg_match('/bold|black/i', $info['Weight']); + if(isset($cw['.notdef'])) + $info['MissingWidth'] = $cw['.notdef']; + else + $info['MissingWidth'] = 0; + $widths = array_fill(0, 256, $info['MissingWidth']); + for($c=0;$c<=255;$c++) + { + $name = $map[$c]['name']; + if($name!='.notdef') + { + if(isset($cw[$name])) + $widths[$c] = $cw[$name]; + else + Warning('Character '.$name.' is missing'); + } + } + $info['Widths'] = $widths; + return $info; +} + +function MakeFontDescriptor($info) +{ + // Ascent + $fd = "array('Ascent'=>".$info['Ascender']; + // Descent + $fd .= ",'Descent'=>".$info['Descender']; + // CapHeight + if(!empty($info['CapHeight'])) + $fd .= ",'CapHeight'=>".$info['CapHeight']; + else + $fd .= ",'CapHeight'=>".$info['Ascender']; + // Flags + $flags = 0; + if($info['IsFixedPitch']) + $flags += 1<<0; + $flags += 1<<5; + if($info['ItalicAngle']!=0) + $flags += 1<<6; + $fd .= ",'Flags'=>".$flags; + // FontBBox + $fbb = $info['FontBBox']; + $fd .= ",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'"; + // ItalicAngle + $fd .= ",'ItalicAngle'=>".$info['ItalicAngle']; + // StemV + if(isset($info['StdVW'])) + $stemv = $info['StdVW']; + elseif($info['Bold']) + $stemv = 120; + else + $stemv = 70; + $fd .= ",'StemV'=>".$stemv; + // MissingWidth + $fd .= ",'MissingWidth'=>".$info['MissingWidth'].')'; + return $fd; +} + +function MakeWidthArray($widths) +{ + $s = "array(\n\t"; + for($c=0;$c<=255;$c++) + { + if(chr($c)=="'") + $s .= "'\\''"; + elseif(chr($c)=="\\") + $s .= "'\\\\'"; + elseif($c>=32 && $c<=126) + $s .= "'".chr($c)."'"; + else + $s .= "chr($c)"; + $s .= '=>'.$widths[$c]; + if($c<255) + $s .= ','; + if(($c+1)%22==0) + $s .= "\n\t"; + } + $s .= ')'; + return $s; +} + +function MakeFontEncoding($map) +{ + // Build differences from reference encoding + $ref = LoadMap('cp1252'); + $s = ''; + $last = 0; + for($c=32;$c<=255;$c++) + { + if($map[$c]['name']!=$ref[$c]['name']) + { + if($c!=$last+1) + $s .= $c.' '; + $last = $c; + $s .= '/'.$map[$c]['name'].' '; + } + } + return rtrim($s); +} + +function SaveToFile($file, $s, $mode) +{ + $f = fopen($file, 'w'.$mode); + if(!$f) + Error('Can\'t write to file '.$file); + fwrite($f, $s, strlen($s)); + fclose($f); +} + +function MakeDefinitionFile($file, $type, $enc, $embed, $map, $info) +{ + $s = "<?php\n"; + $s .= '$type = \''.$type."';\n"; + $s .= '$name = \''.$info['FontName']."';\n"; + $s .= '$desc = '.MakeFontDescriptor($info).";\n"; + $s .= '$up = '.$info['UnderlinePosition'].";\n"; + $s .= '$ut = '.$info['UnderlineThickness'].";\n"; + $s .= '$cw = '.MakeWidthArray($info['Widths']).";\n"; + $s .= '$enc = \''.$enc."';\n"; + $diff = MakeFontEncoding($map); + if($diff) + $s .= '$diff = \''.$diff."';\n"; + if($embed) + { + $s .= '$file = \''.$info['File']."';\n"; + if($type=='Type1') + { + $s .= '$size1 = '.$info['Size1'].";\n"; + $s .= '$size2 = '.$info['Size2'].";\n"; + } + else + $s .= '$originalsize = '.$info['OriginalSize'].";\n"; + } + $s .= "?>\n"; + SaveToFile($file, $s, 't'); +} + +function MakeFont($fontfile, $enc='cp1252', $embed=true) +{ + // Generate a font definition file + if(get_magic_quotes_runtime()) + @set_magic_quotes_runtime(0); + ini_set('auto_detect_line_endings', '1'); + + if(!file_exists($fontfile)) + Error('Font file not found: '.$fontfile); + $ext = strtolower(substr($fontfile,-3)); + if($ext=='ttf' || $ext=='otf') + $type = 'TrueType'; + elseif($ext=='pfb') + $type = 'Type1'; + else + Error('Unrecognized font file extension: '.$ext); + + $map = LoadMap($enc); + + if($type=='TrueType') + $info = GetInfoFromTrueType($fontfile, $embed, $map); + else + $info = GetInfoFromType1($fontfile, $embed, $map); + + $basename = substr(basename($fontfile), 0, -4); + if($embed) + { + if(function_exists('gzcompress')) + { + $file = $basename.'.z'; + SaveToFile($file, gzcompress($info['Data']), 'b'); + $info['File'] = $file; + Message('Font file compressed: '.$file); + } + else + { + $info['File'] = basename($fontfile); + Notice('Font file could not be compressed (zlib extension not available)'); + } + } + + MakeDefinitionFile($basename.'.php', $type, $enc, $embed, $map, $info); + Message('Font definition file generated: '.$basename.'.php'); +} + +if(PHP_SAPI=='cli') +{ + // Command-line interface + if($argc==1) + die("Usage: php makefont.php fontfile [enc] [embed]\n"); + $fontfile = $argv[1]; + if($argc>=3) + $enc = $argv[2]; + else + $enc = 'cp1252'; + if($argc>=4) + $embed = ($argv[3]=='true' || $argv[3]=='1'); + else + $embed = true; + MakeFont($fontfile, $enc, $embed); +} +?> diff --git a/fpdf/makefont/ttfparser.php b/fpdf/makefont/ttfparser.php new file mode 100644 index 0000000..2417781 --- /dev/null +++ b/fpdf/makefont/ttfparser.php @@ -0,0 +1,289 @@ +<?php +/******************************************************************************* +* Utility to parse TTF font files * +* * +* Version: 1.0 * +* Date: 2011-06-18 * +* Author: Olivier PLATHEY * +*******************************************************************************/ + +class TTFParser +{ + var $f; + var $tables; + var $unitsPerEm; + var $xMin, $yMin, $xMax, $yMax; + var $numberOfHMetrics; + var $numGlyphs; + var $widths; + var $chars; + var $postScriptName; + var $Embeddable; + var $Bold; + var $typoAscender; + var $typoDescender; + var $capHeight; + var $italicAngle; + var $underlinePosition; + var $underlineThickness; + var $isFixedPitch; + + function Parse($file) + { + $this->f = fopen($file, 'rb'); + if(!$this->f) + $this->Error('Can\'t open file: '.$file); + + $version = $this->Read(4); + if($version=='OTTO') + $this->Error('OpenType fonts based on PostScript outlines are not supported'); + if($version!="\x00\x01\x00\x00") + $this->Error('Unrecognized file format'); + $numTables = $this->ReadUShort(); + $this->Skip(3*2); // searchRange, entrySelector, rangeShift + $this->tables = array(); + for($i=0;$i<$numTables;$i++) + { + $tag = $this->Read(4); + $this->Skip(4); // checkSum + $offset = $this->ReadULong(); + $this->Skip(4); // length + $this->tables[$tag] = $offset; + } + + $this->ParseHead(); + $this->ParseHhea(); + $this->ParseMaxp(); + $this->ParseHmtx(); + $this->ParseCmap(); + $this->ParseName(); + $this->ParseOS2(); + $this->ParsePost(); + + fclose($this->f); + } + + function ParseHead() + { + $this->Seek('head'); + $this->Skip(3*4); // version, fontRevision, checkSumAdjustment + $magicNumber = $this->ReadULong(); + if($magicNumber!=0x5F0F3CF5) + $this->Error('Incorrect magic number'); + $this->Skip(2); // flags + $this->unitsPerEm = $this->ReadUShort(); + $this->Skip(2*8); // created, modified + $this->xMin = $this->ReadShort(); + $this->yMin = $this->ReadShort(); + $this->xMax = $this->ReadShort(); + $this->yMax = $this->ReadShort(); + } + + function ParseHhea() + { + $this->Seek('hhea'); + $this->Skip(4+15*2); + $this->numberOfHMetrics = $this->ReadUShort(); + } + + function ParseMaxp() + { + $this->Seek('maxp'); + $this->Skip(4); + $this->numGlyphs = $this->ReadUShort(); + } + + function ParseHmtx() + { + $this->Seek('hmtx'); + $this->widths = array(); + for($i=0;$i<$this->numberOfHMetrics;$i++) + { + $advanceWidth = $this->ReadUShort(); + $this->Skip(2); // lsb + $this->widths[$i] = $advanceWidth; + } + if($this->numberOfHMetrics<$this->numGlyphs) + { + $lastWidth = $this->widths[$this->numberOfHMetrics-1]; + $this->widths = array_pad($this->widths, $this->numGlyphs, $lastWidth); + } + } + + function ParseCmap() + { + $this->Seek('cmap'); + $this->Skip(2); // version + $numTables = $this->ReadUShort(); + $offset31 = 0; + for($i=0;$i<$numTables;$i++) + { + $platformID = $this->ReadUShort(); + $encodingID = $this->ReadUShort(); + $offset = $this->ReadULong(); + if($platformID==3 && $encodingID==1) + $offset31 = $offset; + } + if($offset31==0) + $this->Error('No Unicode encoding found'); + + $startCount = array(); + $endCount = array(); + $idDelta = array(); + $idRangeOffset = array(); + $this->chars = array(); + fseek($this->f, $this->tables['cmap']+$offset31, SEEK_SET); + $format = $this->ReadUShort(); + if($format!=4) + $this->Error('Unexpected subtable format: '.$format); + $this->Skip(2*2); // length, language + $segCount = $this->ReadUShort()/2; + $this->Skip(3*2); // searchRange, entrySelector, rangeShift + for($i=0;$i<$segCount;$i++) + $endCount[$i] = $this->ReadUShort(); + $this->Skip(2); // reservedPad + for($i=0;$i<$segCount;$i++) + $startCount[$i] = $this->ReadUShort(); + for($i=0;$i<$segCount;$i++) + $idDelta[$i] = $this->ReadShort(); + $offset = ftell($this->f); + for($i=0;$i<$segCount;$i++) + $idRangeOffset[$i] = $this->ReadUShort(); + + for($i=0;$i<$segCount;$i++) + { + $c1 = $startCount[$i]; + $c2 = $endCount[$i]; + $d = $idDelta[$i]; + $ro = $idRangeOffset[$i]; + if($ro>0) + fseek($this->f, $offset+2*$i+$ro, SEEK_SET); + for($c=$c1;$c<=$c2;$c++) + { + if($c==0xFFFF) + break; + if($ro>0) + { + $gid = $this->ReadUShort(); + if($gid>0) + $gid += $d; + } + else + $gid = $c+$d; + if($gid>=65536) + $gid -= 65536; + if($gid>0) + $this->chars[$c] = $gid; + } + } + } + + function ParseName() + { + $this->Seek('name'); + $tableOffset = ftell($this->f); + $this->postScriptName = ''; + $this->Skip(2); // format + $count = $this->ReadUShort(); + $stringOffset = $this->ReadUShort(); + for($i=0;$i<$count;$i++) + { + $this->Skip(3*2); // platformID, encodingID, languageID + $nameID = $this->ReadUShort(); + $length = $this->ReadUShort(); + $offset = $this->ReadUShort(); + if($nameID==6) + { + // PostScript name + fseek($this->f, $tableOffset+$stringOffset+$offset, SEEK_SET); + $s = $this->Read($length); + $s = str_replace(chr(0), '', $s); + $s = preg_replace('|[ \[\](){}<>/%]|', '', $s); + $this->postScriptName = $s; + break; + } + } + if($this->postScriptName=='') + $this->Error('PostScript name not found'); + } + + function ParseOS2() + { + $this->Seek('OS/2'); + $version = $this->ReadUShort(); + $this->Skip(3*2); // xAvgCharWidth, usWeightClass, usWidthClass + $fsType = $this->ReadUShort(); + $this->Embeddable = ($fsType!=2) && ($fsType & 0x200)==0; + $this->Skip(11*2+10+4*4+4); + $fsSelection = $this->ReadUShort(); + $this->Bold = ($fsSelection & 32)!=0; + $this->Skip(2*2); // usFirstCharIndex, usLastCharIndex + $this->typoAscender = $this->ReadShort(); + $this->typoDescender = $this->ReadShort(); + if($version>=2) + { + $this->Skip(3*2+2*4+2); + $this->capHeight = $this->ReadShort(); + } + else + $this->capHeight = 0; + } + + function ParsePost() + { + $this->Seek('post'); + $this->Skip(4); // version + $this->italicAngle = $this->ReadShort(); + $this->Skip(2); // Skip decimal part + $this->underlinePosition = $this->ReadShort(); + $this->underlineThickness = $this->ReadShort(); + $this->isFixedPitch = ($this->ReadULong()!=0); + } + + function Error($msg) + { + if(PHP_SAPI=='cli') + die("Error: $msg\n"); + else + die("<b>Error</b>: $msg"); + } + + function Seek($tag) + { + if(!isset($this->tables[$tag])) + $this->Error('Table not found: '.$tag); + fseek($this->f, $this->tables[$tag], SEEK_SET); + } + + function Skip($n) + { + fseek($this->f, $n, SEEK_CUR); + } + + function Read($n) + { + return fread($this->f, $n); + } + + function ReadUShort() + { + $a = unpack('nn', fread($this->f,2)); + return $a['n']; + } + + function ReadShort() + { + $a = unpack('nn', fread($this->f,2)); + $v = $a['n']; + if($v>=0x8000) + $v -= 65536; + return $v; + } + + function ReadULong() + { + $a = unpack('NN', fread($this->f,4)); + return $a['N']; + } +} +?> diff --git a/fpdf/tutorial/20k_c1.txt b/fpdf/tutorial/20k_c1.txt new file mode 100644 index 0000000..6d5b295 --- /dev/null +++ b/fpdf/tutorial/20k_c1.txt @@ -0,0 +1,10 @@ +The year 1866 was marked by a bizarre development, an unexplained and downright inexplicable phenomenon that surely no one has forgotten. Without getting into those rumors that upset civilians in the seaports and deranged the public mind even far inland, it must be said that professional seamen were especially alarmed. Traders, shipowners, captains of vessels, skippers, and master mariners from Europe and America, naval officers from every country, and at their heels the various national governments on these two continents, were all extremely disturbed by the business. +In essence, over a period of time several ships had encountered "an enormous thing" at sea, a long spindle-shaped object, sometimes giving off a phosphorescent glow, infinitely bigger and faster than any whale. +The relevant data on this apparition, as recorded in various logbooks, agreed pretty closely as to the structure of the object or creature in question, its unprecedented speed of movement, its startling locomotive power, and the unique vitality with which it seemed to be gifted. If it was a cetacean, it exceeded in bulk any whale previously classified by science. No naturalist, neither Cuvier nor Lacépède, neither Professor Dumeril nor Professor de Quatrefages, would have accepted the existence of such a monster sight unseen -- specifically, unseen by their own scientific eyes. +Striking an average of observations taken at different times -- rejecting those timid estimates that gave the object a length of 200 feet, and ignoring those exaggerated views that saw it as a mile wide and three long--you could still assert that this phenomenal creature greatly exceeded the dimensions of anything then known to ichthyologists, if it existed at all. +Now then, it did exist, this was an undeniable fact; and since the human mind dotes on objects of wonder, you can understand the worldwide excitement caused by this unearthly apparition. As for relegating it to the realm of fiction, that charge had to be dropped. +In essence, on July 20, 1866, the steamer Governor Higginson, from the Calcutta & Burnach Steam Navigation Co., encountered this moving mass five miles off the eastern shores of Australia. Captain Baker at first thought he was in the presence of an unknown reef; he was even about to fix its exact position when two waterspouts shot out of this inexplicable object and sprang hissing into the air some 150 feet. So, unless this reef was subject to the intermittent eruptions of a geyser, the Governor Higginson had fair and honest dealings with some aquatic mammal, until then unknown, that could spurt from its blowholes waterspouts mixed with air and steam. +Similar events were likewise observed in Pacific seas, on July 23 of the same year, by the Christopher Columbus from the West India & Pacific Steam Navigation Co. Consequently, this extraordinary cetacean could transfer itself from one locality to another with startling swiftness, since within an interval of just three days, the Governor Higginson and the Christopher Columbus had observed it at two positions on the charts separated by a distance of more than 700 nautical leagues. +Fifteen days later and 2,000 leagues farther, the Helvetia from the Compagnie Nationale and the Shannon from the Royal Mail line, running on opposite tacks in that part of the Atlantic lying between the United States and Europe, respectively signaled each other that the monster had been sighted in latitude 42 degrees 15' north and longitude 60 degrees 35' west of the meridian of Greenwich. From their simultaneous observations, they were able to estimate the mammal's minimum length at more than 350 English feet; this was because both the Shannon and the Helvetia were of smaller dimensions, although each measured 100 meters stem to stern. Now then, the biggest whales, those rorqual whales that frequent the waterways of the Aleutian Islands, have never exceeded a length of 56 meters--if they reach even that. +One after another, reports arrived that would profoundly affect public opinion: new observations taken by the transatlantic liner Pereire, the Inman line's Etna running afoul of the monster, an official report drawn up by officers on the French frigate Normandy, dead-earnest reckonings obtained by the general staff of Commodore Fitz-James aboard the Lord Clyde. In lighthearted countries, people joked about this phenomenon, but such serious, practical countries as England, America, and Germany were deeply concerned. +In every big city the monster was the latest rage; they sang about it in the coffee houses, they ridiculed it in the newspapers, they dramatized it in the theaters. The tabloids found it a fine opportunity for hatching all sorts of hoaxes. In those newspapers short of copy, you saw the reappearance of every gigantic imaginary creature, from "Moby Dick," that dreadful white whale from the High Arctic regions, to the stupendous kraken whose tentacles could entwine a 500-ton craft and drag it into the ocean depths. They even reprinted reports from ancient times: the views of Aristotle and Pliny accepting the existence of such monsters, then the Norwegian stories of Bishop Pontoppidan, the narratives of Paul Egede, and finally the reports of Captain Harrington -- whose good faith is above suspicion--in which he claims he saw, while aboard the Castilian in 1857, one of those enormous serpents that, until then, had frequented only the seas of France's old extremist newspaper, The Constitutionalist. diff --git a/fpdf/tutorial/20k_c2.txt b/fpdf/tutorial/20k_c2.txt new file mode 100644 index 0000000..7b5c565 --- /dev/null +++ b/fpdf/tutorial/20k_c2.txt @@ -0,0 +1,23 @@ +During the period in which these developments were occurring, I had returned from a scientific undertaking organized to explore the Nebraska badlands in the United States. In my capacity as Assistant Professor at the Paris Museum of Natural History, I had been attached to this expedition by the French government. After spending six months in Nebraska, I arrived in New York laden with valuable collections near the end of March. My departure for France was set for early May. In the meantime, then, I was busy classifying my mineralogical, botanical, and zoological treasures when that incident took place with the Scotia. +I was perfectly abreast of this question, which was the big news of the day, and how could I not have been? I had read and reread every American and European newspaper without being any farther along. This mystery puzzled me. Finding it impossible to form any views, I drifted from one extreme to the other. Something was out there, that much was certain, and any doubting Thomas was invited to place his finger on the Scotia's wound. +When I arrived in New York, the question was at the boiling point. The hypothesis of a drifting islet or an elusive reef, put forward by people not quite in their right minds, was completely eliminated. And indeed, unless this reef had an engine in its belly, how could it move about with such prodigious speed? +Also discredited was the idea of a floating hull or some other enormous wreckage, and again because of this speed of movement. +So only two possible solutions to the question were left, creating two very distinct groups of supporters: on one side, those favoring a monster of colossal strength; on the other, those favoring an "underwater boat" of tremendous motor power. +Now then, although the latter hypothesis was completely admissible, it couldn't stand up to inquiries conducted in both the New World and the Old. That a private individual had such a mechanism at his disposal was less than probable. Where and when had he built it, and how could he have built it in secret? +Only some government could own such an engine of destruction, and in these disaster-filled times, when men tax their ingenuity to build increasingly powerful aggressive weapons, it was possible that, unknown to the rest of the world, some nation could have been testing such a fearsome machine. The Chassepot rifle led to the torpedo, and the torpedo has led to this underwater battering ram, which in turn will lead to the world putting its foot down. At least I hope it will. +But this hypothesis of a war machine collapsed in the face of formal denials from the various governments. Since the public interest was at stake and transoceanic travel was suffering, the sincerity of these governments could not be doubted. Besides, how could the assembly of this underwater boat have escaped public notice? Keeping a secret under such circumstances would be difficult enough for an individual, and certainly impossible for a nation whose every move is under constant surveillance by rival powers. +So, after inquiries conducted in England, France, Russia, Prussia, Spain, Italy, America, and even Turkey, the hypothesis of an underwater Monitor was ultimately rejected. +After I arrived in New York, several people did me the honor of consulting me on the phenomenon in question. In France I had published a two-volume work, in quarto, entitled The Mysteries of the Great Ocean Depths. Well received in scholarly circles, this book had established me as a specialist in this pretty obscure field of natural history. My views were in demand. As long as I could deny the reality of the business, I confined myself to a flat "no comment." But soon, pinned to the wall, I had to explain myself straight out. And in this vein, "the honorable Pierre Aronnax, Professor at the Paris Museum," was summoned by The New York Herald to formulate his views no matter what. +I complied. Since I could no longer hold my tongue, I let it wag. I discussed the question in its every aspect, both political and scientific, and this is an excerpt from the well-padded article I published in the issue of April 30. + +"Therefore," I wrote, "after examining these different hypotheses one by one, we are forced, every other supposition having been refuted, to accept the existence of an extremely powerful marine animal. +"The deepest parts of the ocean are totally unknown to us. No soundings have been able to reach them. What goes on in those distant depths? What creatures inhabit, or could inhabit, those regions twelve or fifteen miles beneath the surface of the water? What is the constitution of these animals? It's almost beyond conjecture. +"However, the solution to this problem submitted to me can take the form of a choice between two alternatives. +"Either we know every variety of creature populating our planet, or we do not. +"If we do not know every one of them, if nature still keeps ichthyological secrets from us, nothing is more admissible than to accept the existence of fish or cetaceans of new species or even new genera, animals with a basically 'cast-iron' constitution that inhabit strata beyond the reach of our soundings, and which some development or other, an urge or a whim if you prefer, can bring to the upper level of the ocean for long intervals. +"If, on the other hand, we do know every living species, we must look for the animal in question among those marine creatures already cataloged, and in this event I would be inclined to accept the existence of a giant narwhale. +"The common narwhale, or sea unicorn, often reaches a length of sixty feet. Increase its dimensions fivefold or even tenfold, then give this cetacean a strength in proportion to its size while enlarging its offensive weapons, and you have the animal we're looking for. It would have the proportions determined by the officers of the Shannon, the instrument needed to perforate the Scotia, and the power to pierce a steamer's hull. +"In essence, the narwhale is armed with a sort of ivory sword, or lance, as certain naturalists have expressed it. It's a king-sized tooth as hard as steel. Some of these teeth have been found buried in the bodies of baleen whales, which the narwhale attacks with invariable success. Others have been wrenched, not without difficulty, from the undersides of vessels that narwhales have pierced clean through, as a gimlet pierces a wine barrel. The museum at the Faculty of Medicine in Paris owns one of these tusks with a length of 2.25 meters and a width at its base of forty-eight centimeters! +"All right then! Imagine this weapon to be ten times stronger and the animal ten times more powerful, launch it at a speed of twenty miles per hour, multiply its mass times its velocity, and you get just the collision we need to cause the specified catastrophe. +"So, until information becomes more abundant, I plump for a sea unicorn of colossal dimensions, no longer armed with a mere lance but with an actual spur, like ironclad frigates or those warships called 'rams,' whose mass and motor power it would possess simultaneously. +"This inexplicable phenomenon is thus explained away--unless it's something else entirely, which, despite everything that has been sighted, studied, explored and experienced, is still possible!" diff --git a/fpdf/tutorial/calligra.php b/fpdf/tutorial/calligra.php new file mode 100644 index 0000000..c156b4e --- /dev/null +++ b/fpdf/tutorial/calligra.php @@ -0,0 +1,23 @@ +<?php +$type = 'TrueType'; +$name = 'CalligrapherRegular'; +$desc = array('Ascent'=>899,'Descent'=>-234,'CapHeight'=>899,'Flags'=>32,'FontBBox'=>'[-173 -234 1328 899]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>800); +$up = -200; +$ut = 20; +$cw = array( + chr(0)=>800,chr(1)=>800,chr(2)=>800,chr(3)=>800,chr(4)=>800,chr(5)=>800,chr(6)=>800,chr(7)=>800,chr(8)=>800,chr(9)=>800,chr(10)=>800,chr(11)=>800,chr(12)=>800,chr(13)=>800,chr(14)=>800,chr(15)=>800,chr(16)=>800,chr(17)=>800,chr(18)=>800,chr(19)=>800,chr(20)=>800,chr(21)=>800, + chr(22)=>800,chr(23)=>800,chr(24)=>800,chr(25)=>800,chr(26)=>800,chr(27)=>800,chr(28)=>800,chr(29)=>800,chr(30)=>800,chr(31)=>800,' '=>282,'!'=>324,'"'=>405,'#'=>584,'$'=>632,'%'=>980,'&'=>776,'\''=>259,'('=>299,')'=>299,'*'=>377,'+'=>600, + ','=>259,'-'=>432,'.'=>254,'/'=>597,'0'=>529,'1'=>298,'2'=>451,'3'=>359,'4'=>525,'5'=>423,'6'=>464,'7'=>417,'8'=>457,'9'=>479,':'=>275,';'=>282,'<'=>600,'='=>600,'>'=>600,'?'=>501,'@'=>800,'A'=>743, + 'B'=>636,'C'=>598,'D'=>712,'E'=>608,'F'=>562,'G'=>680,'H'=>756,'I'=>308,'J'=>314,'K'=>676,'L'=>552,'M'=>1041,'N'=>817,'O'=>729,'P'=>569,'Q'=>698,'R'=>674,'S'=>618,'T'=>673,'U'=>805,'V'=>753,'W'=>1238, + 'X'=>716,'Y'=>754,'Z'=>599,'['=>315,'\\'=>463,']'=>315,'^'=>600,'_'=>547,'`'=>278,'a'=>581,'b'=>564,'c'=>440,'d'=>571,'e'=>450,'f'=>347,'g'=>628,'h'=>611,'i'=>283,'j'=>283,'k'=>560,'l'=>252,'m'=>976, + 'n'=>595,'o'=>508,'p'=>549,'q'=>540,'r'=>395,'s'=>441,'t'=>307,'u'=>614,'v'=>556,'w'=>915,'x'=>559,'y'=>597,'z'=>452,'{'=>315,'|'=>222,'}'=>315,'~'=>600,chr(127)=>800,chr(128)=>800,chr(129)=>800,chr(130)=>0,chr(131)=>0, + chr(132)=>0,chr(133)=>780,chr(134)=>0,chr(135)=>0,chr(136)=>278,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>1064,chr(141)=>800,chr(142)=>0,chr(143)=>800,chr(144)=>800,chr(145)=>259,chr(146)=>259,chr(147)=>470,chr(148)=>470,chr(149)=>500,chr(150)=>300,chr(151)=>600,chr(152)=>278,chr(153)=>990, + chr(154)=>0,chr(155)=>0,chr(156)=>790,chr(157)=>800,chr(158)=>800,chr(159)=>754,chr(160)=>282,chr(161)=>324,chr(162)=>450,chr(163)=>640,chr(164)=>518,chr(165)=>603,chr(166)=>0,chr(167)=>519,chr(168)=>254,chr(169)=>800,chr(170)=>349,chr(171)=>0,chr(172)=>0,chr(173)=>432,chr(174)=>800,chr(175)=>278, + chr(176)=>0,chr(177)=>0,chr(178)=>0,chr(179)=>0,chr(180)=>278,chr(181)=>614,chr(182)=>0,chr(183)=>254,chr(184)=>278,chr(185)=>0,chr(186)=>305,chr(187)=>0,chr(188)=>0,chr(189)=>0,chr(190)=>0,chr(191)=>501,chr(192)=>743,chr(193)=>743,chr(194)=>743,chr(195)=>743,chr(196)=>743,chr(197)=>743, + chr(198)=>1060,chr(199)=>598,chr(200)=>608,chr(201)=>608,chr(202)=>608,chr(203)=>608,chr(204)=>308,chr(205)=>308,chr(206)=>308,chr(207)=>308,chr(208)=>0,chr(209)=>817,chr(210)=>729,chr(211)=>729,chr(212)=>729,chr(213)=>729,chr(214)=>729,chr(215)=>0,chr(216)=>729,chr(217)=>805,chr(218)=>805,chr(219)=>805, + chr(220)=>805,chr(221)=>0,chr(222)=>0,chr(223)=>688,chr(224)=>581,chr(225)=>581,chr(226)=>581,chr(227)=>581,chr(228)=>581,chr(229)=>581,chr(230)=>792,chr(231)=>440,chr(232)=>450,chr(233)=>450,chr(234)=>450,chr(235)=>450,chr(236)=>283,chr(237)=>283,chr(238)=>283,chr(239)=>283,chr(240)=>0,chr(241)=>595, + chr(242)=>508,chr(243)=>508,chr(244)=>508,chr(245)=>508,chr(246)=>508,chr(247)=>0,chr(248)=>508,chr(249)=>614,chr(250)=>614,chr(251)=>614,chr(252)=>614,chr(253)=>0,chr(254)=>0,chr(255)=>597); +$enc = 'cp1252'; +$file = 'calligra.z'; +$originalsize = 40120; +?> diff --git a/fpdf/tutorial/calligra.ttf b/fpdf/tutorial/calligra.ttf new file mode 100644 index 0000000..9713c46 Binary files /dev/null and b/fpdf/tutorial/calligra.ttf differ diff --git a/fpdf/tutorial/calligra.z b/fpdf/tutorial/calligra.z new file mode 100644 index 0000000..1c0bebd Binary files /dev/null and b/fpdf/tutorial/calligra.z differ diff --git a/fpdf/tutorial/countries.txt b/fpdf/tutorial/countries.txt new file mode 100644 index 0000000..5a48a42 --- /dev/null +++ b/fpdf/tutorial/countries.txt @@ -0,0 +1,15 @@ +Austria;Vienna;83859;8075 +Belgium;Brussels;30518;10192 +Denmark;Copenhagen;43094;5295 +Finland;Helsinki;304529;5147 +France;Paris;543965;58728 +Germany;Berlin;357022;82057 +Greece;Athens;131625;10511 +Ireland;Dublin;70723;3694 +Italy;Roma;301316;57563 +Luxembourg;Luxembourg;2586;424 +Netherlands;Amsterdam;41526;15654 +Portugal;Lisbon;91906;9957 +Spain;Madrid;504790;39348 +Sweden;Stockholm;410934;8839 +United Kingdom;London;243820;58862 diff --git a/fpdf/tutorial/index.htm b/fpdf/tutorial/index.htm new file mode 100644 index 0000000..e2068f4 --- /dev/null +++ b/fpdf/tutorial/index.htm @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Tutorials</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Tutorials</h1> +<ul style="list-style-type:none; margin-left:0; padding-left:0"> +<li><a href="tuto1.htm">Tutorial 1</a>: Minimal example</li> +<li><a href="tuto2.htm">Tutorial 2</a>: Header, footer, page break and image</li> +<li><a href="tuto3.htm">Tutorial 3</a>: Line breaks and colors</li> +<li><a href="tuto4.htm">Tutorial 4</a>: Multi-columns</li> +<li><a href="tuto5.htm">Tutorial 5</a>: Tables</li> +<li><a href="tuto6.htm">Tutorial 6</a>: Links and flowing text</li> +<li><a href="tuto7.htm">Tutorial 7</a>: Adding new fonts and encoding support</li> +</UL> +</body> +</html> diff --git a/fpdf/tutorial/logo.png b/fpdf/tutorial/logo.png new file mode 100644 index 0000000..284a007 Binary files /dev/null and b/fpdf/tutorial/logo.png differ diff --git a/fpdf/tutorial/makefont.php b/fpdf/tutorial/makefont.php new file mode 100644 index 0000000..7a09201 --- /dev/null +++ b/fpdf/tutorial/makefont.php @@ -0,0 +1,6 @@ +<?php +// Generation of font definition file for tutorial 7 +require('../makefont/makefont.php'); + +MakeFont('calligra.ttf','cp1252'); +?> diff --git a/fpdf/tutorial/tuto1.htm b/fpdf/tutorial/tuto1.htm new file mode 100644 index 0000000..a3e993d --- /dev/null +++ b/fpdf/tutorial/tuto1.htm @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Minimal example</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Minimal example</h1> +Let's start with the classic example: +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">); + +</span>$pdf <span class="kw">= new </span>FPDF<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>16<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Hello World!'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">(); +</span>?&gt;</code></pre> +</div> +<p class='demo'><a href='tuto1.php' target='_blank' class='demo'>[Demo]</a></p> +After including the library file, we create an FPDF object. +The <a href='../doc/fpdf.htm'>FPDF()</a> constructor is used here with the default values: pages are in A4 portrait and +the unit of measure is millimeter. It could have been specified explicitly with: +<div class="source"> +<pre><code>$pdf <span class="kw">= new </span>FPDF<span class="kw">(</span><span class="str">'P'</span><span class="kw">,</span><span class="str">'mm'</span><span class="kw">,</span><span class="str">'A4'</span><span class="kw">); +</span></code></pre> +</div> +It's possible to use landscape (<code>L</code>), other page sizes (such as <code>Letter</code> and +<code>Legal</code>) and units (<code>pt</code>, <code>cm</code>, <code>in</code>). +<br> +<br> +There's no page at the moment, so we have to add one with <a href='../doc/addpage.htm'>AddPage()</a>. The origin +is at the upper-left corner and the current position is by default set at 1 cm from the +borders; the margins can be changed with <a href='../doc/setmargins.htm'>SetMargins()</a>. +<br> +<br> +Before we can print text, it's mandatory to select a font with <a href='../doc/setfont.htm'>SetFont()</a>, otherwise the +document would be invalid. We choose Arial bold 16: +<div class="source"> +<pre><code>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>16<span class="kw">); +</span></code></pre> +</div> +We could have specified italics with I, underlined with U or a regular font with an empty string +(or any combination). Note that the font size is given in points, not millimeters (or another user +unit); it's the only exception. The other standard fonts are Times, Courier, Symbol and ZapfDingbats. +<br> +<br> +We can now print a cell with <a href='../doc/cell.htm'>Cell()</a>. A cell is a rectangular area, possibly framed, +which contains a line of text. It is output at the current position. We specify its dimensions, +its text (centered or aligned), if borders should be drawn, and where the current position +moves after it (to the right, below or to the beginning of the next line). To add a frame, we would do this: +<div class="source"> +<pre><code>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Hello World !'</span><span class="kw">,</span>1<span class="kw">); +</span></code></pre> +</div> +To add a new cell next to it with centered text and go to the next line, we would do: +<div class="source"> +<pre><code>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>60<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Powered by FPDF.'</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">); +</span></code></pre> +</div> +Remark: the line break can also be done with <a href='../doc/ln.htm'>Ln()</a>. This method additionnaly allows to specify +the height of the break. +<br> +<br> +Finally, the document is closed and sent to the browser with <a href='../doc/output.htm'>Output()</a>. We could have saved +it to a file by passing the desired file name. +<br> +<br> +<strong>Caution:</strong> in case when the PDF is sent to the browser, nothing else must be output by the +script, neither before nor after (no HTML, not even a space or a carriage return). If you send something +before, you will get the error message: "Some data has already been output, can't send PDF file". If you +send something after, the document might not display. +</body> +</html> diff --git a/fpdf/tutorial/tuto1.php b/fpdf/tutorial/tuto1.php new file mode 100644 index 0000000..3ab55a1 --- /dev/null +++ b/fpdf/tutorial/tuto1.php @@ -0,0 +1,9 @@ +<?php +require('../fpdf.php'); + +$pdf = new FPDF(); +$pdf->AddPage(); +$pdf->SetFont('Arial','B',16); +$pdf->Cell(40,10,'Hello World!'); +$pdf->Output(); +?> diff --git a/fpdf/tutorial/tuto2.htm b/fpdf/tutorial/tuto2.htm new file mode 100644 index 0000000..c402cf4 --- /dev/null +++ b/fpdf/tutorial/tuto2.htm @@ -0,0 +1,80 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Header, footer, page break and image</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Header, footer, page break and image</h1> +Here's a two page example with header, footer and logo: +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">); + +class </span>PDF <span class="kw">extends </span>FPDF +<span class="kw">{ +</span><span class="cmt">// Page header +</span><span class="kw">function </span>Header<span class="kw">() +{ + </span><span class="cmt">// Logo + </span>$<span class="kw">this-&gt;</span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>6<span class="kw">,</span>30<span class="kw">); + </span><span class="cmt">// Arial bold 15 + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">); + </span><span class="cmt">// Move to the right + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>80<span class="kw">); + </span><span class="cmt">// Title + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>30<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Title'</span><span class="kw">,</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">); + </span><span class="cmt">// Line break + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>20<span class="kw">); +} + +</span><span class="cmt">// Page footer +</span><span class="kw">function </span>Footer<span class="kw">() +{ + </span><span class="cmt">// Position at 1.5 cm from bottom + </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">); + </span><span class="cmt">// Arial italic 8 + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">); + </span><span class="cmt">// Page number + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">().</span><span class="str">'/{nb}'</span><span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">); +} +} + +</span><span class="cmt">// Instanciation of inherited class +</span>$pdf <span class="kw">= new </span>PDF<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>AliasNbPages<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">); +for(</span>$i<span class="kw">=</span>1<span class="kw">;</span>$i<span class="kw">&lt;=</span>40<span class="kw">;</span>$i<span class="kw">++) + </span>$pdf<span class="kw">-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Printing line number '</span><span class="kw">.</span>$i<span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">(); +</span>?&gt;</code></pre> +</div> +<p class='demo'><a href='tuto2.php' target='_blank' class='demo'>[Demo]</a></p> +This example makes use of the <a href='../doc/header.htm'>Header()</a> and <a href='../doc/footer.htm'>Footer()</a> methods to process page headers and +footers. They are called automatically. They already exist in the FPDF class but do nothing, +therefore we have to extend the class and override them. +<br> +<br> +The logo is printed with the <a href='../doc/image.htm'>Image()</a> method by specifying its upper-left corner and +its width. The height is calculated automatically to respect the image proportions. +<br> +<br> +To print the page number, a null value is passed as the cell width. It means that the cell +should extend up to the right margin of the page; this is handy to center text. The current page +number is returned by the <a href='../doc/pageno.htm'>PageNo()</a> method; as for the total number of pages, it's obtained +via the special value <code>{nb}</code> which is substituted when the document is finished +(provided you first called <a href='../doc/aliasnbpages.htm'>AliasNbPages()</a>). +<br> +Note the use of the <a href='../doc/sety.htm'>SetY()</a> method which allows to set position at an absolute location in +the page, starting from the top or the bottom. +<br> +<br> +Another interesting feature is used here: the automatic page breaking. As soon as a cell would +cross a limit in the page (at 2 centimeters from the bottom by default), a break is issued +and the font restored. Although the header and footer select their own font (Arial), the body +continues with Times. This mechanism of automatic restoration also applies to colors and line +width. The limit which triggers page breaks can be set with <a href='../doc/setautopagebreak.htm'>SetAutoPageBreak()</a>. +</body> +</html> diff --git a/fpdf/tutorial/tuto2.php b/fpdf/tutorial/tuto2.php new file mode 100644 index 0000000..6a1b4f8 --- /dev/null +++ b/fpdf/tutorial/tuto2.php @@ -0,0 +1,41 @@ +<?php +require('../fpdf.php'); + +class PDF extends FPDF +{ +// Page header +function Header() +{ + // Logo + $this->Image('logo.png',10,6,30); + // Arial bold 15 + $this->SetFont('Arial','B',15); + // Move to the right + $this->Cell(80); + // Title + $this->Cell(30,10,'Title',1,0,'C'); + // Line break + $this->Ln(20); +} + +// Page footer +function Footer() +{ + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + // Page number + $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C'); +} +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AliasNbPages(); +$pdf->AddPage(); +$pdf->SetFont('Times','',12); +for($i=1;$i<=40;$i++) + $pdf->Cell(0,10,'Printing line number '.$i,0,1); +$pdf->Output(); +?> diff --git a/fpdf/tutorial/tuto3.htm b/fpdf/tutorial/tuto3.htm new file mode 100644 index 0000000..5d8363f --- /dev/null +++ b/fpdf/tutorial/tuto3.htm @@ -0,0 +1,115 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Line breaks and colors</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Line breaks and colors</h1> +Let's continue with an example which prints justified paragraphs. It also illustrates the use +of colors. +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">); + +class </span>PDF <span class="kw">extends </span>FPDF +<span class="kw">{ +function </span>Header<span class="kw">() +{ + global </span>$title<span class="kw">; + + </span><span class="cmt">// Arial bold 15 + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">); + </span><span class="cmt">// Calculate width of title and position + </span>$w <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetStringWidth<span class="kw">(</span>$title<span class="kw">)+</span>6<span class="kw">; + </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">((</span>210<span class="kw">-</span>$w<span class="kw">)/</span>2<span class="kw">); + </span><span class="cmt">// Colors of frame, background and text + </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>0<span class="kw">,</span>80<span class="kw">,</span>180<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>230<span class="kw">,</span>230<span class="kw">,</span>0<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>220<span class="kw">,</span>50<span class="kw">,</span>50<span class="kw">); + </span><span class="cmt">// Thickness of frame (1 mm) + </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>1<span class="kw">); + </span><span class="cmt">// Title + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">,</span>9<span class="kw">,</span>$title<span class="kw">,</span>1<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">); + </span><span class="cmt">// Line break + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>10<span class="kw">); +} + +function </span>Footer<span class="kw">() +{ + </span><span class="cmt">// Position at 1.5 cm from bottom + </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">); + </span><span class="cmt">// Arial italic 8 + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">); + </span><span class="cmt">// Text color in gray + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>128<span class="kw">); + </span><span class="cmt">// Page number + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">(),</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">); +} + +function </span>ChapterTitle<span class="kw">(</span>$num<span class="kw">, </span>$label<span class="kw">) +{ + </span><span class="cmt">// Arial 12 + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">); + </span><span class="cmt">// Background color + </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>200<span class="kw">,</span>220<span class="kw">,</span>255<span class="kw">); + </span><span class="cmt">// Title + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>6<span class="kw">,</span><span class="str">"Chapter </span>$num<span class="str"> : </span>$label<span class="str">"</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>true<span class="kw">); + </span><span class="cmt">// Line break + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>4<span class="kw">); +} + +function </span>ChapterBody<span class="kw">(</span>$file<span class="kw">) +{ + </span><span class="cmt">// Read text file + </span>$txt <span class="kw">= </span>file_get_contents<span class="kw">(</span>$file<span class="kw">); + </span><span class="cmt">// Times 12 + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">); + </span><span class="cmt">// Output justified text + </span>$<span class="kw">this-&gt;</span>MultiCell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span>$txt<span class="kw">); + </span><span class="cmt">// Line break + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + </span><span class="cmt">// Mention in italics + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span><span class="str">'(end of excerpt)'</span><span class="kw">); +} + +function </span>PrintChapter<span class="kw">(</span>$num<span class="kw">, </span>$title<span class="kw">, </span>$file<span class="kw">) +{ + </span>$<span class="kw">this-&gt;</span>AddPage<span class="kw">(); + </span>$<span class="kw">this-&gt;</span>ChapterTitle<span class="kw">(</span>$num<span class="kw">,</span>$title<span class="kw">); + </span>$<span class="kw">this-&gt;</span>ChapterBody<span class="kw">(</span>$file<span class="kw">); +} +} + +</span>$pdf <span class="kw">= new </span>PDF<span class="kw">(); +</span>$title <span class="kw">= </span><span class="str">'20000 Leagues Under the Seas'</span><span class="kw">; +</span>$pdf<span class="kw">-&gt;</span>SetTitle<span class="kw">(</span>$title<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>SetAuthor<span class="kw">(</span><span class="str">'Jules Verne'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>1<span class="kw">,</span><span class="str">'A RUNAWAY REEF'</span><span class="kw">,</span><span class="str">'20k_c1.txt'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>2<span class="kw">,</span><span class="str">'THE PROS AND CONS'</span><span class="kw">,</span><span class="str">'20k_c2.txt'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">(); +</span>?&gt;</code></pre> +</div> +<p class='demo'><a href='tuto3.php' target='_blank' class='demo'>[Demo]</a></p> +The <a href='../doc/getstringwidth.htm'>GetStringWidth()</a> method allows to determine the length of a string in the current font, +which is used here to calculate the position and the width of the frame surrounding the title. +Then colors are set (via <a href='../doc/setdrawcolor.htm'>SetDrawColor()</a>, <a href='../doc/setfillcolor.htm'>SetFillColor()</a> and <a href='../doc/settextcolor.htm'>SetTextColor()</a>) and the +thickness of the line is set to 1 mm (instead of 0.2 by default) with <a href='../doc/setlinewidth.htm'>SetLineWidth()</a>. Finally, +we output the cell (the last parameter <code>true</code> indicates that the background must +be filled). +<br> +<br> +The method used to print the paragraphs is <a href='../doc/multicell.htm'>MultiCell()</a>. Each time a line reaches the +right extremity of the cell or a carriage return character is met, a line break is issued +and a new cell automatically created under the current one. Text is justified by default. +<br> +<br> +Two document properties are defined: the title (<a href='../doc/settitle.htm'>SetTitle()</a>) and the author (<a href='../doc/setauthor.htm'>SetAuthor()</a>). +There are several ways to view them in Adobe Reader. The first one is to open the file directly with +the reader, go to the File menu and choose the Properties option. The second one, also available from +the plug-in, is to right-click and select Document Properties. The third method is to type the Ctrl+D +key combination. +</body> +</html> diff --git a/fpdf/tutorial/tuto3.php b/fpdf/tutorial/tuto3.php new file mode 100644 index 0000000..3316ddb --- /dev/null +++ b/fpdf/tutorial/tuto3.php @@ -0,0 +1,81 @@ +<?php +require('../fpdf.php'); + +class PDF extends FPDF +{ +function Header() +{ + global $title; + + // Arial bold 15 + $this->SetFont('Arial','B',15); + // Calculate width of title and position + $w = $this->GetStringWidth($title)+6; + $this->SetX((210-$w)/2); + // Colors of frame, background and text + $this->SetDrawColor(0,80,180); + $this->SetFillColor(230,230,0); + $this->SetTextColor(220,50,50); + // Thickness of frame (1 mm) + $this->SetLineWidth(1); + // Title + $this->Cell($w,9,$title,1,1,'C',true); + // Line break + $this->Ln(10); +} + +function Footer() +{ + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + // Text color in gray + $this->SetTextColor(128); + // Page number + $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C'); +} + +function ChapterTitle($num, $label) +{ + // Arial 12 + $this->SetFont('Arial','',12); + // Background color + $this->SetFillColor(200,220,255); + // Title + $this->Cell(0,6,"Chapter $num : $label",0,1,'L',true); + // Line break + $this->Ln(4); +} + +function ChapterBody($file) +{ + // Read text file + $txt = file_get_contents($file); + // Times 12 + $this->SetFont('Times','',12); + // Output justified text + $this->MultiCell(0,5,$txt); + // Line break + $this->Ln(); + // Mention in italics + $this->SetFont('','I'); + $this->Cell(0,5,'(end of excerpt)'); +} + +function PrintChapter($num, $title, $file) +{ + $this->AddPage(); + $this->ChapterTitle($num,$title); + $this->ChapterBody($file); +} +} + +$pdf = new PDF(); +$title = '20000 Leagues Under the Seas'; +$pdf->SetTitle($title); +$pdf->SetAuthor('Jules Verne'); +$pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt'); +$pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt'); +$pdf->Output(); +?> diff --git a/fpdf/tutorial/tuto4.htm b/fpdf/tutorial/tuto4.htm new file mode 100644 index 0000000..18a2108 --- /dev/null +++ b/fpdf/tutorial/tuto4.htm @@ -0,0 +1,134 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Multi-columns</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Multi-columns</h1> +This example is a variant of the previous one showing how to lay the text across multiple +columns. +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">); + +class </span>PDF <span class="kw">extends </span>FPDF +<span class="kw">{ +</span><span class="cmt">// Current column +</span><span class="kw">var </span>$col <span class="kw">= </span>0<span class="kw">; +</span><span class="cmt">// Ordinate of column start +</span><span class="kw">var </span>$y0<span class="kw">; + +function </span>Header<span class="kw">() +{ + </span><span class="cmt">// Page header + </span><span class="kw">global </span>$title<span class="kw">; + + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">); + </span>$w <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetStringWidth<span class="kw">(</span>$title<span class="kw">)+</span>6<span class="kw">; + </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">((</span>210<span class="kw">-</span>$w<span class="kw">)/</span>2<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>0<span class="kw">,</span>80<span class="kw">,</span>180<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>230<span class="kw">,</span>230<span class="kw">,</span>0<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>220<span class="kw">,</span>50<span class="kw">,</span>50<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>1<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">,</span>9<span class="kw">,</span>$title<span class="kw">,</span>1<span class="kw">,</span>1<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>10<span class="kw">); + </span><span class="cmt">// Save ordinate + </span>$<span class="kw">this-&gt;</span>y0 <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetY<span class="kw">(); +} + +function </span>Footer<span class="kw">() +{ + </span><span class="cmt">// Page footer + </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(-</span>15<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>128<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-&gt;</span>PageNo<span class="kw">(),</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">); +} + +function </span>SetCol<span class="kw">(</span>$col<span class="kw">) +{ + </span><span class="cmt">// Set position at a given column + </span>$<span class="kw">this-&gt;</span>col <span class="kw">= </span>$col<span class="kw">; + </span>$x <span class="kw">= </span>10<span class="kw">+</span>$col<span class="kw">*</span>65<span class="kw">; + </span>$<span class="kw">this-&gt;</span>SetLeftMargin<span class="kw">(</span>$x<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetX<span class="kw">(</span>$x<span class="kw">); +} + +function </span>AcceptPageBreak<span class="kw">() +{ + </span><span class="cmt">// Method accepting or not automatic page break + </span><span class="kw">if(</span>$<span class="kw">this-&gt;</span>col<span class="kw">&lt;</span>2<span class="kw">) + { + </span><span class="cmt">// Go to next column + </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>$<span class="kw">this-&gt;</span>col<span class="kw">+</span>1<span class="kw">); + </span><span class="cmt">// Set ordinate to top + </span>$<span class="kw">this-&gt;</span>SetY<span class="kw">(</span>$<span class="kw">this-&gt;</span>y0<span class="kw">); + </span><span class="cmt">// Keep on page + </span><span class="kw">return </span>false<span class="kw">; + } + else + { + </span><span class="cmt">// Go back to first column + </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>0<span class="kw">); + </span><span class="cmt">// Page break + </span><span class="kw">return </span>true<span class="kw">; + } +} + +function </span>ChapterTitle<span class="kw">(</span>$num<span class="kw">, </span>$label<span class="kw">) +{ + </span><span class="cmt">// Title + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>200<span class="kw">,</span>220<span class="kw">,</span>255<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>6<span class="kw">,</span><span class="str">"Chapter </span>$num<span class="str"> : </span>$label<span class="str">"</span><span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>true<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>4<span class="kw">); + </span><span class="cmt">// Save ordinate + </span>$<span class="kw">this-&gt;</span>y0 <span class="kw">= </span>$<span class="kw">this-&gt;</span>GetY<span class="kw">(); +} + +function </span>ChapterBody<span class="kw">(</span>$file<span class="kw">) +{ + </span><span class="cmt">// Read text file + </span>$txt <span class="kw">= </span>file_get_contents<span class="kw">(</span>$file<span class="kw">); + </span><span class="cmt">// Font + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">); + </span><span class="cmt">// Output text in a 6 cm width column + </span>$<span class="kw">this-&gt;</span>MultiCell<span class="kw">(</span>60<span class="kw">,</span>5<span class="kw">,</span>$txt<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + </span><span class="cmt">// Mention + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>0<span class="kw">,</span>5<span class="kw">,</span><span class="str">'(end of excerpt)'</span><span class="kw">); + </span><span class="cmt">// Go back to first column + </span>$<span class="kw">this-&gt;</span>SetCol<span class="kw">(</span>0<span class="kw">); +} + +function </span>PrintChapter<span class="kw">(</span>$num<span class="kw">, </span>$title<span class="kw">, </span>$file<span class="kw">) +{ + </span><span class="cmt">// Add chapter + </span>$<span class="kw">this-&gt;</span>AddPage<span class="kw">(); + </span>$<span class="kw">this-&gt;</span>ChapterTitle<span class="kw">(</span>$num<span class="kw">,</span>$title<span class="kw">); + </span>$<span class="kw">this-&gt;</span>ChapterBody<span class="kw">(</span>$file<span class="kw">); +} +} + +</span>$pdf <span class="kw">= new </span>PDF<span class="kw">(); +</span>$title <span class="kw">= </span><span class="str">'20000 Leagues Under the Seas'</span><span class="kw">; +</span>$pdf<span class="kw">-&gt;</span>SetTitle<span class="kw">(</span>$title<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>SetAuthor<span class="kw">(</span><span class="str">'Jules Verne'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>1<span class="kw">,</span><span class="str">'A RUNAWAY REEF'</span><span class="kw">,</span><span class="str">'20k_c1.txt'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>PrintChapter<span class="kw">(</span>2<span class="kw">,</span><span class="str">'THE PROS AND CONS'</span><span class="kw">,</span><span class="str">'20k_c2.txt'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">(); +</span>?&gt;</code></pre> +</div> +<p class='demo'><a href='tuto4.php' target='_blank' class='demo'>[Demo]</a></p> +The key method used is <a href='../doc/acceptpagebreak.htm'>AcceptPageBreak()</a>. It allows to accept or not an automatic page +break. By refusing it and altering the margin and current position, the desired column layout +is achieved. +<br> +For the rest, not many changes; two properties have been added to the class to save the current +column number and the position where columns begin, and the MultiCell() call specifies a +6 centimeter width. +</body> +</html> diff --git a/fpdf/tutorial/tuto4.php b/fpdf/tutorial/tuto4.php new file mode 100644 index 0000000..c326982 --- /dev/null +++ b/fpdf/tutorial/tuto4.php @@ -0,0 +1,111 @@ +<?php +require('../fpdf.php'); + +class PDF extends FPDF +{ +// Current column +var $col = 0; +// Ordinate of column start +var $y0; + +function Header() +{ + // Page header + global $title; + + $this->SetFont('Arial','B',15); + $w = $this->GetStringWidth($title)+6; + $this->SetX((210-$w)/2); + $this->SetDrawColor(0,80,180); + $this->SetFillColor(230,230,0); + $this->SetTextColor(220,50,50); + $this->SetLineWidth(1); + $this->Cell($w,9,$title,1,1,'C',true); + $this->Ln(10); + // Save ordinate + $this->y0 = $this->GetY(); +} + +function Footer() +{ + // Page footer + $this->SetY(-15); + $this->SetFont('Arial','I',8); + $this->SetTextColor(128); + $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C'); +} + +function SetCol($col) +{ + // Set position at a given column + $this->col = $col; + $x = 10+$col*65; + $this->SetLeftMargin($x); + $this->SetX($x); +} + +function AcceptPageBreak() +{ + // Method accepting or not automatic page break + if($this->col<2) + { + // Go to next column + $this->SetCol($this->col+1); + // Set ordinate to top + $this->SetY($this->y0); + // Keep on page + return false; + } + else + { + // Go back to first column + $this->SetCol(0); + // Page break + return true; + } +} + +function ChapterTitle($num, $label) +{ + // Title + $this->SetFont('Arial','',12); + $this->SetFillColor(200,220,255); + $this->Cell(0,6,"Chapter $num : $label",0,1,'L',true); + $this->Ln(4); + // Save ordinate + $this->y0 = $this->GetY(); +} + +function ChapterBody($file) +{ + // Read text file + $txt = file_get_contents($file); + // Font + $this->SetFont('Times','',12); + // Output text in a 6 cm width column + $this->MultiCell(60,5,$txt); + $this->Ln(); + // Mention + $this->SetFont('','I'); + $this->Cell(0,5,'(end of excerpt)'); + // Go back to first column + $this->SetCol(0); +} + +function PrintChapter($num, $title, $file) +{ + // Add chapter + $this->AddPage(); + $this->ChapterTitle($num,$title); + $this->ChapterBody($file); +} +} + +$pdf = new PDF(); +$title = '20000 Leagues Under the Seas'; +$pdf->SetTitle($title); +$pdf->SetAuthor('Jules Verne'); +$pdf->PrintChapter(1,'A RUNAWAY REEF','20k_c1.txt'); +$pdf->PrintChapter(2,'THE PROS AND CONS','20k_c2.txt'); +$pdf->Output(); +?> diff --git a/fpdf/tutorial/tuto5.htm b/fpdf/tutorial/tuto5.htm new file mode 100644 index 0000000..f90102b --- /dev/null +++ b/fpdf/tutorial/tuto5.htm @@ -0,0 +1,134 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Tables</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Tables</h1> +This tutorial shows different ways to make tables. +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">); + +class </span>PDF <span class="kw">extends </span>FPDF +<span class="kw">{ +</span><span class="cmt">// Load data +</span><span class="kw">function </span>LoadData<span class="kw">(</span>$file<span class="kw">) +{ + </span><span class="cmt">// Read file lines + </span>$lines <span class="kw">= </span>file<span class="kw">(</span>$file<span class="kw">); + </span>$data <span class="kw">= array(); + foreach(</span>$lines <span class="kw">as </span>$line<span class="kw">) + </span>$data<span class="kw">[] = </span>explode<span class="kw">(</span><span class="str">';'</span><span class="kw">,</span>trim<span class="kw">(</span>$line<span class="kw">)); + return </span>$data<span class="kw">; +} + +</span><span class="cmt">// Simple table +</span><span class="kw">function </span>BasicTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">) +{ + </span><span class="cmt">// Header + </span><span class="kw">foreach(</span>$header <span class="kw">as </span>$col<span class="kw">) + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>7<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + </span><span class="cmt">// Data + </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">) + { + foreach(</span>$row <span class="kw">as </span>$col<span class="kw">) + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>40<span class="kw">,</span>6<span class="kw">,</span>$col<span class="kw">,</span>1<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + } +} + +</span><span class="cmt">// Better table +</span><span class="kw">function </span>ImprovedTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">) +{ + </span><span class="cmt">// Column widths + </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">); + </span><span class="cmt">// Header + </span><span class="kw">for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++) + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + </span><span class="cmt">// Data + </span><span class="kw">foreach(</span>$data <span class="kw">as </span>$row<span class="kw">) + { + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + } + </span><span class="cmt">// Closing line + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">); +} + +</span><span class="cmt">// Colored table +</span><span class="kw">function </span>FancyTable<span class="kw">(</span>$header<span class="kw">, </span>$data<span class="kw">) +{ + </span><span class="cmt">// Colors, line width and bold font + </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>255<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>255<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetDrawColor<span class="kw">(</span>128<span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetLineWidth<span class="kw">(</span>.3<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">); + </span><span class="cmt">// Header + </span>$w <span class="kw">= array(</span>40<span class="kw">, </span>35<span class="kw">, </span>40<span class="kw">, </span>45<span class="kw">); + for(</span>$i<span class="kw">=</span>0<span class="kw">;</span>$i<span class="kw">&lt;</span>count<span class="kw">(</span>$header<span class="kw">);</span>$i<span class="kw">++) + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>$i<span class="kw">],</span>7<span class="kw">,</span>$header<span class="kw">[</span>$i<span class="kw">],</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">,</span>true<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + </span><span class="cmt">// Color and font restoration + </span>$<span class="kw">this-&gt;</span>SetFillColor<span class="kw">(</span>224<span class="kw">,</span>235<span class="kw">,</span>255<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">); + </span><span class="cmt">// Data + </span>$fill <span class="kw">= </span>false<span class="kw">; + foreach(</span>$data <span class="kw">as </span>$row<span class="kw">) + { + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>0<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>0<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>1<span class="kw">],</span>6<span class="kw">,</span>$row<span class="kw">[</span>1<span class="kw">],</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'L'</span><span class="kw">,</span>$fill<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>2<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>2<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>$w<span class="kw">[</span>3<span class="kw">],</span>6<span class="kw">,</span>number_format<span class="kw">(</span>$row<span class="kw">[</span>3<span class="kw">]),</span><span class="str">'LR'</span><span class="kw">,</span>0<span class="kw">,</span><span class="str">'R'</span><span class="kw">,</span>$fill<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(); + </span>$fill <span class="kw">= !</span>$fill<span class="kw">; + } + </span><span class="cmt">// Closing line + </span>$<span class="kw">this-&gt;</span>Cell<span class="kw">(</span>array_sum<span class="kw">(</span>$w<span class="kw">),</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'T'</span><span class="kw">); +} +} + +</span>$pdf <span class="kw">= new </span>PDF<span class="kw">(); +</span><span class="cmt">// Column headings +</span>$header <span class="kw">= array(</span><span class="str">'Country'</span><span class="kw">, </span><span class="str">'Capital'</span><span class="kw">, </span><span class="str">'Area (sq km)'</span><span class="kw">, </span><span class="str">'Pop. (thousands)'</span><span class="kw">); +</span><span class="cmt">// Data loading +</span>$data <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>LoadData<span class="kw">(</span><span class="str">'countries.txt'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>14<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>BasicTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>ImprovedTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>FancyTable<span class="kw">(</span>$header<span class="kw">,</span>$data<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">(); +</span>?&gt;</code></pre> +</div> +<p class='demo'><a href='tuto5.php' target='_blank' class='demo'>[Demo]</a></p> +A table being just a collection of cells, it's natural to build one from them. The first +example is achieved in the most basic way possible: simple framed cells, all of the same size +and left aligned. The result is rudimentary but very quick to obtain. +<br> +<br> +The second table brings some improvements: each column has its own width, headings are centered, +and numbers right aligned. Moreover, horizontal lines have been removed. This is done by means +of the <code>border</code> parameter of the <a href='../doc/cell.htm'>Cell()</a> method, which specifies which sides of the +cell must be drawn. Here we want the left (<code>L</code>) and right (<code>R</code>) ones. It remains +the problem of the horizontal line to finish the table. There are two possibilities: either +check for the last line in the loop, in which case we use <code>LRB</code> for the <code>border</code> +parameter; or, as done here, add the line once the loop is over. +<br> +<br> +The third table is similar to the second one but uses colors. Fill, text and line colors are +simply specified. Alternate coloring for rows is obtained by using alternatively transparent +and filled cells. +</body> +</html> diff --git a/fpdf/tutorial/tuto5.php b/fpdf/tutorial/tuto5.php new file mode 100644 index 0000000..252b70f --- /dev/null +++ b/fpdf/tutorial/tuto5.php @@ -0,0 +1,102 @@ +<?php +require('../fpdf.php'); + +class PDF extends FPDF +{ +// Load data +function LoadData($file) +{ + // Read file lines + $lines = file($file); + $data = array(); + foreach($lines as $line) + $data[] = explode(';',trim($line)); + return $data; +} + +// Simple table +function BasicTable($header, $data) +{ + // Header + foreach($header as $col) + $this->Cell(40,7,$col,1); + $this->Ln(); + // Data + foreach($data as $row) + { + foreach($row as $col) + $this->Cell(40,6,$col,1); + $this->Ln(); + } +} + +// Better table +function ImprovedTable($header, $data) +{ + // Column widths + $w = array(40, 35, 40, 45); + // Header + for($i=0;$i<count($header);$i++) + $this->Cell($w[$i],7,$header[$i],1,0,'C'); + $this->Ln(); + // Data + foreach($data as $row) + { + $this->Cell($w[0],6,$row[0],'LR'); + $this->Cell($w[1],6,$row[1],'LR'); + $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R'); + $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R'); + $this->Ln(); + } + // Closing line + $this->Cell(array_sum($w),0,'','T'); +} + +// Colored table +function FancyTable($header, $data) +{ + // Colors, line width and bold font + $this->SetFillColor(255,0,0); + $this->SetTextColor(255); + $this->SetDrawColor(128,0,0); + $this->SetLineWidth(.3); + $this->SetFont('','B'); + // Header + $w = array(40, 35, 40, 45); + for($i=0;$i<count($header);$i++) + $this->Cell($w[$i],7,$header[$i],1,0,'C',true); + $this->Ln(); + // Color and font restoration + $this->SetFillColor(224,235,255); + $this->SetTextColor(0); + $this->SetFont(''); + // Data + $fill = false; + foreach($data as $row) + { + $this->Cell($w[0],6,$row[0],'LR',0,'L',$fill); + $this->Cell($w[1],6,$row[1],'LR',0,'L',$fill); + $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R',$fill); + $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill); + $this->Ln(); + $fill = !$fill; + } + // Closing line + $this->Cell(array_sum($w),0,'','T'); +} +} + +$pdf = new PDF(); +// Column headings +$header = array('Country', 'Capital', 'Area (sq km)', 'Pop. (thousands)'); +// Data loading +$data = $pdf->LoadData('countries.txt'); +$pdf->SetFont('Arial','',14); +$pdf->AddPage(); +$pdf->BasicTable($header,$data); +$pdf->AddPage(); +$pdf->ImprovedTable($header,$data); +$pdf->AddPage(); +$pdf->FancyTable($header,$data); +$pdf->Output(); +?> diff --git a/fpdf/tutorial/tuto6.htm b/fpdf/tutorial/tuto6.htm new file mode 100644 index 0000000..59ef177 --- /dev/null +++ b/fpdf/tutorial/tuto6.htm @@ -0,0 +1,165 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Links and flowing text</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +</head> +<body> +<h1>Links and flowing text</h1> +This tutorial explains how to insert links (internal and external) and shows a new text writing +mode. It also contains a basic HTML parser. +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">); + +class </span>PDF <span class="kw">extends </span>FPDF +<span class="kw">{ +var </span>$B<span class="kw">; +var </span>$I<span class="kw">; +var </span>$U<span class="kw">; +var </span>$HREF<span class="kw">; + +function </span>PDF<span class="kw">(</span>$orientation<span class="kw">=</span><span class="str">'P'</span><span class="kw">, </span>$unit<span class="kw">=</span><span class="str">'mm'</span><span class="kw">, </span>$size<span class="kw">=</span><span class="str">'A4'</span><span class="kw">) +{ + </span><span class="cmt">// Call parent constructor + </span>$<span class="kw">this-&gt;</span>FPDF<span class="kw">(</span>$orientation<span class="kw">,</span>$unit<span class="kw">,</span>$size<span class="kw">); + </span><span class="cmt">// Initialization + </span>$<span class="kw">this-&gt;</span>B <span class="kw">= </span>0<span class="kw">; + </span>$<span class="kw">this-&gt;</span>I <span class="kw">= </span>0<span class="kw">; + </span>$<span class="kw">this-&gt;</span>U <span class="kw">= </span>0<span class="kw">; + </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span><span class="str">''</span><span class="kw">; +} + +function </span>WriteHTML<span class="kw">(</span>$html<span class="kw">) +{ + </span><span class="cmt">// HTML parser + </span>$html <span class="kw">= </span>str_replace<span class="kw">(</span><span class="str">"\n"</span><span class="kw">,</span><span class="str">' '</span><span class="kw">,</span>$html<span class="kw">); + </span>$a <span class="kw">= </span>preg_split<span class="kw">(</span><span class="str">'/&lt;(.*)&gt;/U'</span><span class="kw">,</span>$html<span class="kw">,-</span>1<span class="kw">,</span>PREG_SPLIT_DELIM_CAPTURE<span class="kw">); + foreach(</span>$a <span class="kw">as </span>$i<span class="kw">=&gt;</span>$e<span class="kw">) + { + if(</span>$i<span class="kw">%</span>2<span class="kw">==</span>0<span class="kw">) + { + </span><span class="cmt">// Text + </span><span class="kw">if(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">) + </span>$<span class="kw">this-&gt;</span>PutLink<span class="kw">(</span>$<span class="kw">this-&gt;</span>HREF<span class="kw">,</span>$e<span class="kw">); + else + </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$e<span class="kw">); + } + else + { + </span><span class="cmt">// Tag + </span><span class="kw">if(</span>$e<span class="kw">[</span>0<span class="kw">]==</span><span class="str">'/'</span><span class="kw">) + </span>$<span class="kw">this-&gt;</span>CloseTag<span class="kw">(</span>strtoupper<span class="kw">(</span>substr<span class="kw">(</span>$e<span class="kw">,</span>1<span class="kw">))); + else + { + </span><span class="cmt">// Extract attributes + </span>$a2 <span class="kw">= </span>explode<span class="kw">(</span><span class="str">' '</span><span class="kw">,</span>$e<span class="kw">); + </span>$tag <span class="kw">= </span>strtoupper<span class="kw">(</span>array_shift<span class="kw">(</span>$a2<span class="kw">)); + </span>$attr <span class="kw">= array(); + foreach(</span>$a2 <span class="kw">as </span>$v<span class="kw">) + { + if(</span>preg_match<span class="kw">(</span><span class="str">'/([^=]*)=["\']?([^"\']*)/'</span><span class="kw">,</span>$v<span class="kw">,</span>$a3<span class="kw">)) + </span>$attr<span class="kw">[</span>strtoupper<span class="kw">(</span>$a3<span class="kw">[</span>1<span class="kw">])] = </span>$a3<span class="kw">[</span>2<span class="kw">]; + } + </span>$<span class="kw">this-&gt;</span>OpenTag<span class="kw">(</span>$tag<span class="kw">,</span>$attr<span class="kw">); + } + } + } +} + +function </span>OpenTag<span class="kw">(</span>$tag<span class="kw">, </span>$attr<span class="kw">) +{ + </span><span class="cmt">// Opening tag + </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">) + </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>true<span class="kw">); + if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">) + </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span>$attr<span class="kw">[</span><span class="str">'HREF'</span><span class="kw">]; + if(</span>$tag<span class="kw">==</span><span class="str">'BR'</span><span class="kw">) + </span>$<span class="kw">this-&gt;</span>Ln<span class="kw">(</span>5<span class="kw">); +} + +function </span>CloseTag<span class="kw">(</span>$tag<span class="kw">) +{ + </span><span class="cmt">// Closing tag + </span><span class="kw">if(</span>$tag<span class="kw">==</span><span class="str">'B' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'I' </span><span class="kw">|| </span>$tag<span class="kw">==</span><span class="str">'U'</span><span class="kw">) + </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span>$tag<span class="kw">,</span>false<span class="kw">); + if(</span>$tag<span class="kw">==</span><span class="str">'A'</span><span class="kw">) + </span>$<span class="kw">this-&gt;</span>HREF <span class="kw">= </span><span class="str">''</span><span class="kw">; +} + +function </span>SetStyle<span class="kw">(</span>$tag<span class="kw">, </span>$enable<span class="kw">) +{ + </span><span class="cmt">// Modify style and select corresponding font + </span>$<span class="kw">this-&gt;</span>$tag <span class="kw">+= (</span>$enable <span class="kw">? </span>1 <span class="kw">: -</span>1<span class="kw">); + </span>$style <span class="kw">= </span><span class="str">''</span><span class="kw">; + foreach(array(</span><span class="str">'B'</span><span class="kw">, </span><span class="str">'I'</span><span class="kw">, </span><span class="str">'U'</span><span class="kw">) as </span>$s<span class="kw">) + { + if(</span>$<span class="kw">this-&gt;</span>$s<span class="kw">&gt;</span>0<span class="kw">) + </span>$style <span class="kw">.= </span>$s<span class="kw">; + } + </span>$<span class="kw">this-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span>$style<span class="kw">); +} + +function </span>PutLink<span class="kw">(</span>$URL<span class="kw">, </span>$txt<span class="kw">) +{ + </span><span class="cmt">// Put a hyperlink + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">,</span>0<span class="kw">,</span>255<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>true<span class="kw">); + </span>$<span class="kw">this-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span>$txt<span class="kw">,</span>$URL<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetStyle<span class="kw">(</span><span class="str">'U'</span><span class="kw">,</span>false<span class="kw">); + </span>$<span class="kw">this-&gt;</span>SetTextColor<span class="kw">(</span>0<span class="kw">); +} +} + +</span>$html <span class="kw">= </span><span class="str">'You can now easily print text mixing different styles: &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, +&lt;u&gt;underlined&lt;/u&gt;, or &lt;b&gt;&lt;i&gt;&lt;u&gt;all at once&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;!&lt;br&gt;&lt;br&gt;You can also insert links on +text, such as &lt;a href="http://www.fpdf.org"&gt;www.fpdf.org&lt;/a&gt;, or on an image: click on the logo.'</span><span class="kw">; + +</span>$pdf <span class="kw">= new </span>PDF<span class="kw">(); +</span><span class="cmt">// First page +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>20<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">"To find out what's new in this tutorial, click "</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">,</span><span class="str">'U'</span><span class="kw">); +</span>$link <span class="kw">= </span>$pdf<span class="kw">-&gt;</span>AddLink<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>5<span class="kw">,</span><span class="str">'here'</span><span class="kw">,</span>$link<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">''</span><span class="kw">); +</span><span class="cmt">// Second page +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>SetLink<span class="kw">(</span>$link<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>12<span class="kw">,</span>30<span class="kw">,</span>0<span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'http://www.fpdf.org'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>SetLeftMargin<span class="kw">(</span>45<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>SetFontSize<span class="kw">(</span>14<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>WriteHTML<span class="kw">(</span>$html<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">(); +</span>?&gt;</code></pre> +</div> +<p class='demo'><a href='tuto6.php' target='_blank' class='demo'>[Demo]</a></p> +The new method to print text is <a href='../doc/write.htm'>Write()</a>. It's very close to <a href='../doc/multicell.htm'>MultiCell()</a>; the differences are: +<ul> +<li>The end of line is at the right margin and the next line begins at the left one</li> +<li>The current position moves at the end of the text</li> +</ul> +So it allows to write a chunk of text, alter the font style, then continue from the exact +place we left it. On the other hand, you cannot justify it. +<br> +<br> +The method is used on the first page to put a link pointing to the second one. The beginning of +the sentence is written in regular style, then we switch to underline and finish it. The link +is created with <a href='../doc/addlink.htm'>AddLink()</a>, which returns a link identifier. The identifier is +passed as third parameter of Write(). Once the second page is created, we use <a href='../doc/setlink.htm'>SetLink()</a> to +make the link point to the beginning of the current page. +<br> +<br> +Then we put an image with an external link on it. An external link is just a URL. It's passed as +last parameter of <a href='../doc/image.htm'>Image()</a>. +<br> +<br> +Finally, the left margin is moved after the image with <a href='../doc/setleftmargin.htm'>SetLeftMargin()</a> and some text in +HTML format is output. A very simple HTML parser is used for this, based on regular expressions. +Recognized tags are &lt;b&gt;, &lt;i&gt;, &lt;u&gt;, &lt;a&gt; and &lt;br&gt;; the others are +ignored. The parser also makes use of the Write() method. An external link is put the same way as +an internal one (third parameter of Write()). Note that <a href='../doc/cell.htm'>Cell()</a> also allows to put links. +</body> +</html> diff --git a/fpdf/tutorial/tuto6.php b/fpdf/tutorial/tuto6.php new file mode 100644 index 0000000..d933556 --- /dev/null +++ b/fpdf/tutorial/tuto6.php @@ -0,0 +1,124 @@ +<?php +require('../fpdf.php'); + +class PDF extends FPDF +{ +var $B; +var $I; +var $U; +var $HREF; + +function PDF($orientation='P', $unit='mm', $size='A4') +{ + // Call parent constructor + $this->FPDF($orientation,$unit,$size); + // Initialization + $this->B = 0; + $this->I = 0; + $this->U = 0; + $this->HREF = ''; +} + +function WriteHTML($html) +{ + // HTML parser + $html = str_replace("\n",' ',$html); + $a = preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); + foreach($a as $i=>$e) + { + if($i%2==0) + { + // Text + if($this->HREF) + $this->PutLink($this->HREF,$e); + else + $this->Write(5,$e); + } + else + { + // Tag + if($e[0]=='/') + $this->CloseTag(strtoupper(substr($e,1))); + else + { + // Extract attributes + $a2 = explode(' ',$e); + $tag = strtoupper(array_shift($a2)); + $attr = array(); + foreach($a2 as $v) + { + if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3)) + $attr[strtoupper($a3[1])] = $a3[2]; + } + $this->OpenTag($tag,$attr); + } + } + } +} + +function OpenTag($tag, $attr) +{ + // Opening tag + if($tag=='B' || $tag=='I' || $tag=='U') + $this->SetStyle($tag,true); + if($tag=='A') + $this->HREF = $attr['HREF']; + if($tag=='BR') + $this->Ln(5); +} + +function CloseTag($tag) +{ + // Closing tag + if($tag=='B' || $tag=='I' || $tag=='U') + $this->SetStyle($tag,false); + if($tag=='A') + $this->HREF = ''; +} + +function SetStyle($tag, $enable) +{ + // Modify style and select corresponding font + $this->$tag += ($enable ? 1 : -1); + $style = ''; + foreach(array('B', 'I', 'U') as $s) + { + if($this->$s>0) + $style .= $s; + } + $this->SetFont('',$style); +} + +function PutLink($URL, $txt) +{ + // Put a hyperlink + $this->SetTextColor(0,0,255); + $this->SetStyle('U',true); + $this->Write(5,$txt,$URL); + $this->SetStyle('U',false); + $this->SetTextColor(0); +} +} + +$html = 'You can now easily print text mixing different styles: <b>bold</b>, <i>italic</i>, +<u>underlined</u>, or <b><i><u>all at once</u></i></b>!<br><br>You can also insert links on +text, such as <a href="http://www.fpdf.org">www.fpdf.org</a>, or on an image: click on the logo.'; + +$pdf = new PDF(); +// First page +$pdf->AddPage(); +$pdf->SetFont('Arial','',20); +$pdf->Write(5,"To find out what's new in this tutorial, click "); +$pdf->SetFont('','U'); +$link = $pdf->AddLink(); +$pdf->Write(5,'here',$link); +$pdf->SetFont(''); +// Second page +$pdf->AddPage(); +$pdf->SetLink($link); +$pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org'); +$pdf->SetLeftMargin(45); +$pdf->SetFontSize(14); +$pdf->WriteHTML($html); +$pdf->Output(); +?> diff --git a/fpdf/tutorial/tuto7.htm b/fpdf/tutorial/tuto7.htm new file mode 100644 index 0000000..2863018 --- /dev/null +++ b/fpdf/tutorial/tuto7.htm @@ -0,0 +1,241 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>Adding new fonts and encoding support</title> +<link type="text/css" rel="stylesheet" href="../fpdf.css"> +<style type="text/css"> +table {border-collapse:collapse; border-style:solid; border-width:2px; border-color:#A0A0A0 #000000 #000000 #A0A0A0} +table {margin:1.4em 0 1.4em 1em} +th {background-color:#E0EBFF; color:#900000; text-align:left} +th, td {border:1px solid #808080; padding:2px 10px} +tr.alt0 {background-color:#FFFFEE} +tr.alt1 {background-color:#FFFFE0} +</style> +</head> +<body> +<h1>Adding new fonts and encoding support</h1> +This tutorial explains how to use TrueType, OpenType and Type1 fonts so that you are not limited to +the standard fonts any more. The other benefit is that you can choose the font encoding, which allows +you to use other languages than the Western ones (the standard fonts having too few available characters). +<br> +<br> +Remark: for OpenType, only the format based on TrueType is supported (not the one based on Type1). +<br> +<br> +There are two ways to use a new font: embedding it in the PDF or not. When a font is not +embedded, it is searched in the system. The advantage is that the PDF file is lighter; on the other +hand, if it's not available, a substitution font is used. So it's preferable to ensure that the +needed font is installed on the client systems. If the file is to be viewed by a large audience, +it's highly recommended to embed. +<br> +<br> +Adding a new font requires two steps: +<ul> +<li>Generation of the font definition file</li> +<li>Declaration of the font in the script</li> +</ul> +For Type1, you need the corresponding AFM file. It's usually provided with the font. + +<h2>Generation of the font definition file</h2> +The first step consists in generating a PHP file containing all the information needed by FPDF; +in addition, the font file is compressed. To do this, a helper script is provided in the makefont +directory of the package: makefont.php. It contains the following function: +<br> +<br> +<code>MakeFont(<b>string</b> fontfile, [, <b>string</b> enc [, <b>boolean</b> embed]])</code> +<dl class="param" style="margin-bottom:2em"> +<dt><code>fontfile</code></dt> +<dd> +<p>Path to the .ttf, .otf or .pfb file.</p> +</dd> +<dt><code>enc</code></dt> +<dd> +<p>Name of the encoding to use. Default value: <code>cp1252</code>.</p> +</dd> +<dt><code>embed</code></dt> +<dd> +<p>Whether to embed the font or not. Default value: <code>true</code>.</p> +</dd> +</dl> +The first parameter is the name of the font file. The extension must be either .ttf, .otf or .pfb and +determines the font type. If your Type1 font is in ASCII format (.pfa), you can convert it to binary +(.pfb) with the help of <a href="http://www.lcdf.org/~eddietwo/type/#t1utils" target="_blank">t1utils</a>. +<br> +<br> +For Type1 fonts, the corresponding .afm file must be present in the same directory. +<br> +<br> +The encoding defines the association between a code (from 0 to 255) and a character. The first 128 are +always the same and correspond to ASCII; the following are variable. Encodings are stored in .map +files. The available ones are: +<ul> +<li>cp1250 (Central Europe)</li> +<li>cp1251 (Cyrillic)</li> +<li>cp1252 (Western Europe)</li> +<li>cp1253 (Greek)</li> +<li>cp1254 (Turkish)</li> +<li>cp1255 (Hebrew)</li> +<li>cp1257 (Baltic)</li> +<li>cp1258 (Vietnamese)</li> +<li>cp874 (Thai)</li> +<li>ISO-8859-1 (Western Europe)</li> +<li>ISO-8859-2 (Central Europe)</li> +<li>ISO-8859-4 (Baltic)</li> +<li>ISO-8859-5 (Cyrillic)</li> +<li>ISO-8859-7 (Greek)</li> +<li>ISO-8859-9 (Turkish)</li> +<li>ISO-8859-11 (Thai)</li> +<li>ISO-8859-15 (Western Europe)</li> +<li>ISO-8859-16 (Central Europe)</li> +<li>KOI8-R (Russian)</li> +<li>KOI8-U (Ukrainian)</li> +</ul> +Of course, the font must contain the characters corresponding to the chosen encoding. +<br> +<br> +Remark: the standard fonts use cp1252. +<br> +<br> +After you have called the function (create a new file for this and include makefont.php), a .php file +is created, with the same name as the font file. You may rename it if you wish. If the case of embedding, +the font file is compressed and gives a second file with .z as extension (except if the compression +function is not available, it requires Zlib). You may rename it too, but in this case you have to change +the variable <code>$file</code> in the .php file accordingly. +<br> +<br> +Example: +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">); + +</span>MakeFont<span class="kw">(</span><span class="str">'c:\\Windows\\Fonts\\comic.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">); +</span>?&gt;</code></pre> +</div> +which gives the files comic.php and comic.z. +<br> +<br> +Then copy the generated files to the font directory. If the font file could not be compressed, copy +it directly instead of the .z version. +<br> +<br> +Another way to call MakeFont() is through the command line: +<br> +<br> +<kbd>php makefont\makefont.php c:\Windows\Fonts\comic.ttf cp1252</kbd> +<br> +<br> +Finally, for TrueType and OpenType fonts, you can also generate the files +<a href="http://www.fpdf.org/makefont/">online</a> instead of doing it manually. + +<h2>Declaration of the font in the script</h2> +The second step is simple. You just need to call the <a href='../doc/addfont.htm'>AddFont()</a> method: +<div class="source"> +<pre><code>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'comic.php'</span><span class="kw">); +</span></code></pre> +</div> +And the font is now available (in regular and underlined styles), usable like the others. If we +had worked with Comic Sans MS Bold (comicbd.ttf), we would have written: +<div class="source"> +<pre><code>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Comic'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span><span class="str">'comicbd.php'</span><span class="kw">); +</span></code></pre> +</div> + +<h2>Example</h2> +Let's now see a complete example. We will use the font <a href="http://www.abstractfonts.com/font/52" target="_blank">Calligrapher</a>. +The first step is the generation of the font files: +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'makefont/makefont.php'</span><span class="kw">); + +</span>MakeFont<span class="kw">(</span><span class="str">'calligra.ttf'</span><span class="kw">,</span><span class="str">'cp1252'</span><span class="kw">); +</span>?&gt;</code></pre> +</div> +The script gives the following report: +<br> +<br> +<b>Warning:</b> character Euro is missing<br> +<b>Warning:</b> character zcaron is missing<br> +Font file compressed: calligra.z<br> +Font definition file generated: calligra.php<br> +<br> +The euro character is not present in the font (it's too old). Another character is missing too. +<br> +<br> +Alternatively we could have used the command line: +<br> +<br> +<kbd>php makefont\makefont.php calligra.ttf cp1252</kbd> +<br> +<br> +or used the online generator. +<br> +<br> +We can now copy the two generated files to the font directory and write the script: +<div class="source"> +<pre><code>&lt;?php +<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">); + +</span>$pdf <span class="kw">= new </span>FPDF<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>AddFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span><span class="str">'calligra.php'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>AddPage<span class="kw">(); +</span>$pdf<span class="kw">-&gt;</span>SetFont<span class="kw">(</span><span class="str">'Calligrapher'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>35<span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Write<span class="kw">(</span>10<span class="kw">,</span><span class="str">'Enjoy new fonts with FPDF!'</span><span class="kw">); +</span>$pdf<span class="kw">-&gt;</span>Output<span class="kw">(); +</span>?&gt;</code></pre> +</div> +<p class='demo'><a href='tuto7.php' target='_blank' class='demo'>[Demo]</a></p> + +<h2>About the euro symbol</h2> +The euro character is not present in all encodings, and is not always placed at the same position: +<table> +<tr><th>Encoding</th><th>Position</th></tr> +<tr class="alt0"><td>cp1250</td><td>128</td></tr> +<tr class="alt1"><td>cp1251</td><td>136</td></tr> +<tr class="alt0"><td>cp1252</td><td>128</td></tr> +<tr class="alt1"><td>cp1253</td><td>128</td></tr> +<tr class="alt0"><td>cp1254</td><td>128</td></tr> +<tr class="alt1"><td>cp1255</td><td>128</td></tr> +<tr class="alt0"><td>cp1257</td><td>128</td></tr> +<tr class="alt1"><td>cp1258</td><td>128</td></tr> +<tr class="alt0"><td>cp874</td><td>128</td></tr> +<tr class="alt1"><td>ISO-8859-1</td><td>N/A</td></tr> +<tr class="alt0"><td>ISO-8859-2</td><td>N/A</td></tr> +<tr class="alt1"><td>ISO-8859-4</td><td>N/A</td></tr> +<tr class="alt0"><td>ISO-8859-5</td><td>N/A</td></tr> +<tr class="alt1"><td>ISO-8859-7</td><td>N/A</td></tr> +<tr class="alt0"><td>ISO-8859-9</td><td>N/A</td></tr> +<tr class="alt1"><td>ISO-8859-11</td><td>N/A</td></tr> +<tr class="alt0"><td>ISO-8859-15</td><td>164</td></tr> +<tr class="alt1"><td>ISO-8859-16</td><td>164</td></tr> +<tr class="alt0"><td>KOI8-R</td><td>N/A</td></tr> +<tr class="alt1"><td>KOI8-U</td><td>N/A</td></tr> +</table> +ISO-8859-1 is widespread but does not include the euro sign. If you need it, the simplest thing +to do is to use cp1252 or ISO-8859-15 instead, which are nearly identical but contain the precious +symbol. + +<h2>Reducing the size of TrueType fonts</h2> +Font files are often quite voluminous; this is due to the fact that they contain the characters +corresponding to many encodings. Zlib compression reduces them but they remain fairly big. A +technique exists to reduce them further. It consists in converting the font to the Type1 format +with <a href="http://ttf2pt1.sourceforge.net" target="_blank">ttf2pt1</a> (the Windows binary is +available <a href="http://www.fpdf.org/fr/dl.php?id=22">here</a>) while specifying the encoding +you are interested in; all other characters will be discarded. +<br> +For example, the arial.ttf font that ships with Windows Vista weights 748 KB (it contains 3381 characters). +After compression it drops to 411. Let's convert it to Type1 by keeping only cp1250 characters: +<br> +<br> +<kbd>ttf2pt1 -b -L cp1250.map c:\Windows\Fonts\arial.ttf arial</kbd> +<br> +<br> +The .map files are located in the makefont directory of the package. The command produces +arial.pfb and arial.afm. The arial.pfb file weights only 57 KB, and 53 after compression. +<br> +<br> +It's possible to go even further. If you are interested only by a subset of the encoding (you +probably don't need all 217 characters), you can open the .map file and remove the lines you are +not interested in. This will reduce the file size accordingly. +</body> +</html> diff --git a/fpdf/tutorial/tuto7.php b/fpdf/tutorial/tuto7.php new file mode 100644 index 0000000..a7acb47 --- /dev/null +++ b/fpdf/tutorial/tuto7.php @@ -0,0 +1,11 @@ +<?php +define('FPDF_FONTPATH','.'); +require('../fpdf.php'); + +$pdf = new FPDF(); +$pdf->AddFont('Calligrapher','','calligra.php'); +$pdf->AddPage(); +$pdf->SetFont('Calligrapher','',35); +$pdf->Cell(0,10,'Enjoy new fonts with FPDF!'); +$pdf->Output(); +?> diff --git a/func.php b/func.php new file mode 100644 index 0000000..9987f3c --- /dev/null +++ b/func.php @@ -0,0 +1,4157 @@ +<?php + +function sqlValue($zapytanie) +{ + $count=0; + $wynik = mysql_query($zapytanie); + $count= mysql_result($wynik,0); + return $count; +} +// ========================================================== // +function sqlStringValue($sqlQuery, $fieldName) +{ + $wynik = mysql_query($sqlQuery); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $result=$r["$fieldName"]; + } + return $result; +} +// ========================================================== // + +function sqlStringArray($sqlQuery, $fieldName) +{ + $wynik = mysql_query($sqlQuery); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $result[]=$r["$fieldName"]; + } + return $result; +} +// ========================================================== // + +// funkcja zwraca zaytanie SQL do tablicy +// ========================================================== // +function sqlGetResAsArray($query) +{ + $res=null; + $res = array(); + + if(!$results = mysql_query($query)){ + echo mysql_error(); + return false; + } + for($i=0; $row=mysql_fetch_assoc($results); $i++) + $res[$i]=$row; + + return $res; +} +// ========================================================== // + +function getStringFloatRound($inValue) +{ + $res = null; + $inValue = str_replace(',','.',$inValue); + $inValue = round($inValue,2); + $inValue = str_replace('.',',',$inValue); + + if (empty($inValue)) $inValue=null; + + return $inValue; +} + +// ========================================================== // + + +function getFloatValue($inParam) +{ + unset($outParam); + if (!empty($inParam) || strlen($inParam)>0) + { + $inParam = str_replace(array('\'', '\"'), array('', ''), $inParam); + $inParam = (float)str_replace(',', '.', $inParam); + $outParam = round($inParam, 2); + } + else + $outParam = null; + + return $outParam; +} +// ========================================================== // + + +function getFullFloatValue($inParam) +{ + unset($outParam); + if (!empty($inParam) || strlen($inParam)>0) + { + $inParam = str_replace(array('\'', '\"'), array('', ''), $inParam); + $outParam = (float)str_replace(',', '.', $inParam); + } + else + $outParam = null; + + return $outParam; +} + +// ========================================================== // +function convertSecondsToHHMM($inParam) +{ + unset($outParam); + $hour = floor($inParam/3600); + $min = $inParam - ($hour*3600); + $min = floor($min/60); + + if ($hour<10) $hour = "0".$hour; + if ($min<10) $min = "0".$min; + + $outParam = $hour.":".$min; + + return $outParam; +} + +// ========================================================== // +// funkcja liczenia czasu i wypompowanej wody global +// ========================================================== // +// czas +// ========================================================== // +function concertDateToCompare($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' ', ':'), array('','',''), $inDate); + return $out; +} + +function getMaxIDfromMySqlTable($inTableName) +{ + try { + $tmpField = sqlStringValue("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '".$inTableName."' limit 1", "COLUMN_NAME"); + $maxID = (int) sqlValue("select max(".$tmpField.") from ".$inTableName); + } + catch (Exception $e) { + $maxID=0; + } + + return $maxID; +} + +// czas I +function getGlobalWorkingTimeInDate($inDevID, $inDate) +{ + $out_OnOff = 'OFF'; + $fnc_Last_STAT = 'OFF'; + $fnc_TPM_ON = 0; + $fnc_TPM_OFF =0; + $fnc_TIME_COUNT=0; + + unset($inArray); + $inArray = sqlGetResAsArray("select SLA_WORK_STATUS,SLA_DATETIME from seg_wells_manual_work_syndis where SLA_DRS_ID=".$inDevID." and SLA_DATETIME<='".$inDate."' order by SLA_DATETIME"); + for ($i=0; $i<count($inArray); $i++) + { + if ($fnc_Last_STAT != $inArray[$i]['SLA_WORK_STATUS']) + { + if ($inArray[$i]['SLA_WORK_STATUS']=='ON') + { + $fnc_TPM_ON = (float) strtotime($inArray[$i]['SLA_DATETIME']); + } + elseif ($inArray[$i]['SLA_WORK_STATUS']=='OFF') + { + $fnc_TPM_OFF = (float) strtotime($inArray[$i]['SLA_DATETIME']); + $fnc_TIME_COUNT = (float) ($fnc_TIME_COUNT + ($fnc_TPM_OFF - $fnc_TPM_ON)); + } + + $fnc_Last_STAT = $inArray[$i]['SLA_WORK_STATUS']; + } + } + + if ($fnc_Last_STAT=='ON') + { + $fnc_TPM_OFF = (float) strtotime($inDate); + $fnc_TIME_COUNT = (float) ($fnc_TIME_COUNT + ($fnc_TPM_OFF - $fnc_TPM_ON)); + } + + unset($inArray); + + return $fnc_TIME_COUNT; +} +// ========================================================== // + +// czas II +// ========================================================== // +//Liczenie czasu w oparciu o cykl dat - wyłączenia w tym zakresie +function liczenie_czasu_mc($devID, $dateFrom, $dateTo) +{ + unset($reaTime); + $fullWorkingTime=0; + $reaTime=0; + $onVal=0; + $offVal=0; + $offTime=0; + + $reaTime = (strtotime($dateTo) - strtotime($dateFrom)); + + $status = sqlStringValue("select SLA_WORK_STATUS from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME=(select max(SLA_DATETIME) from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME<='".$dateFrom."')", "SLA_WORK_STATUS"); + if ($status!='ON') $status='OFF'; + + //Jeśli pompa jest w stanie wyłączonym - zaczyna ilczyć od początku OD. + if ($status=='OFF') + $offVal = (float) strtotime($dateFrom); + + + $timeArray = sqlGetResAsArray("select * from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME>='".$dateFrom."' and SLA_DATETIME<='".$dateTo."' order by SLA_DATETIME"); + for($i=0; $i<count($timeArray); $i++) + { + if ($status != $timeArray[$i]['SLA_WORK_STATUS']) + { + if ($timeArray[$i]['SLA_WORK_STATUS']=='OFF') + { + $offVal = (float) strtotime($timeArray[$i]['SLA_DATETIME']); + } + elseif ($timeArray[$i]['SLA_WORK_STATUS']=='ON') + { + $onVal = (float) strtotime($timeArray[$i]['SLA_DATETIME']); + $offTime = (float) ($offTime + ($onVal - $offVal)); + } + $status = $timeArray[$i]['SLA_WORK_STATUS']; + } + } + + //Jeśli pompa jest w dalszym ciągu wyłączoa liczy czas do wskazanego jako DO + if ($status=='OFF') + { + $onVal = (float) strtotime($dateTo); + $offTime = (float) ($offTime + ($onVal - $offVal)); + } + + $fullWorkingTime = (float) ($reaTime - $offTime); + + return $fullWorkingTime; +} +// ========================================================== // + +//Czas IV +// ========================================================== // +//Liczenie czasu w oparciu o cykl dat - wyłączenia w tym zakresie +function liczCzasu($devID, $dateFrom, $dateTo) +{ + unset($reaTime); + $fullWorkingTime=0; + $reaTime=0; + $onVal=0; + $offVal=0; + $offTime=0; + + $reaTime = (strtotime($dateTo) - strtotime($dateFrom)); + + //$status = sqlStringValue("select SLA_WORK_STATUS from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME=(select max(SLA_DATETIME) from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME<='".$dateFrom."')", "SLA_WORK_STATUS"); + //$status = sqlStringValue("select DRD_AUDIT_DATE from (select DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE<='".$dateFrom."') union select DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE<='".$dateFrom."')) tb","DRD_AUDIT_DATE"); + $status = sqlStringValue("select DRD_VALUE from viw_pump_working_status where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from viw_pump_working_status where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE<='".$dateFrom."')","DRD_VALUE"); + if ($status!='ON') $status='OFF'; + + //Jeśli pompa jest w stanie wyłączonym - zaczyna ilczyć od początku OD. + if ($status=='OFF') + $offVal = (float) strtotime($dateFrom); + + + //$timeArray = sqlGetResAsArray("select * from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME>='".$dateFrom."' and SLA_DATETIME<='".$dateTo."' order by SLA_DATETIME"); + //$timeArray = sqlGetResAsArray("select * from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$dateFrom."' and DRD_AUDIT_DATE<='".$dateTo."' union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$dateFrom."' and DRD_AUDIT_DATE<='".$dateTo."') tb order by DRD_AUDIT_DATE"); + $timeArray = sqlGetResAsArray("select * from viw_pump_working_status where DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$dateFrom."' and DRD_AUDIT_DATE<='".$dateTo."' order by DRD_AUDIT_DATE"); + for($i=0; $i<count($timeArray); $i++) + { + if ($status != $timeArray[$i]['DRD_VALUE']) + { + if ($timeArray[$i]['DRD_VALUE']=='OFF') + { + $offVal = (float) strtotime($timeArray[$i]['DRD_AUDIT_DATE']); + } + elseif ($timeArray[$i]['DRD_VALUE']=='ON') + { + $onVal = (float) strtotime($timeArray[$i]['DRD_AUDIT_DATE']); + $offTime = (float) ($offTime + ($onVal - $offVal)); + } + $status = $timeArray[$i]['DRD_VALUE']; + } + } + + //Jeśli pompa jest w dalszym ciągu wyłączoa liczy czas do wskazanego jako DO + if ($status=='OFF') + { + $onVal = (float) strtotime($dateTo); + $offTime = (float) ($offTime + ($onVal - $offVal)); + } + + $fullWorkingTime = (float) ($reaTime - $offTime); + + return $fullWorkingTime; +} +// ========================================================== // + +// Czas V +// ========================================================== // +function fCzas($devID, $dateFrom, $dateTo) +{ + unset($reaTime); + $fullWorkingTime=0; + $reaTime=0; + $onVal=0; + $offVal=0; + $offTime=0; + + $reaTime = (strtotime($dateTo) - strtotime($dateFrom)); + + //$status = sqlStringValue("select SLA_WORK_STATUS from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME=(select max(SLA_DATETIME) from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME<='".$dateFrom."')", "SLA_WORK_STATUS"); + //$status = sqlStringValue("select DRD_AUDIT_DATE from (select DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE<='".$dateFrom."') union select DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE<='".$dateFrom."')) tb","DRD_AUDIT_DATE"); + //$status = sqlStringValue("select DRD_VALUE from viw_pump_working_status where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from viw_pump_working_status where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE<='".$dateFrom."')","DRD_VALUE"); + unset($status); + //$status = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE<='".$dateFrom."')","DRD_VALUE"); + $status = sqlStringValue("select WST_STATUS_VAL from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$devID." and WST_DATE<='".$dateFrom."')","WST_STATUS_VAL"); + if ($status!='ON') $status='OFF'; + + //Jeśli pompa jest w stanie wyłączonym - zaczyna ilczyć od początku OD. + if ($status=='OFF') + $offVal = (float) strtotime($dateFrom); + + //$timeArray = sqlGetResAsArray("select * from seg_wells_manual_work_syndis where SLA_DRS_ID=".$devID." and SLA_DATETIME>='".$dateFrom."' and SLA_DATETIME<='".$dateTo."' order by SLA_DATETIME"); + //$timeArray = sqlGetResAsArray("select * from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$dateFrom."' and DRD_AUDIT_DATE<='".$dateTo."' union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$dateFrom."' and DRD_AUDIT_DATE<='".$dateTo."') tb order by DRD_AUDIT_DATE"); + //$timeArray = sqlGetResAsArray("select * from ".$tbQuery." where DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$dateFrom."' and DRD_AUDIT_DATE<='".$dateTo."' order by DRD_AUDIT_DATE"); + $timeArray = sqlGetResAsArray("select * from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$devID." and WST_DATE>='".$dateFrom."' and WST_DATE<='".$dateTo."' order by WST_DATE,WST_ID"); + + for($i=0; $i<count($timeArray); $i++) + { + if ($status != $timeArray[$i]['WST_STATUS_VAL']) + { + if ($timeArray[$i]['WST_STATUS_VAL']=='OFF') + { + $offVal = (float) strtotime($timeArray[$i]['WST_DATE']); + } + elseif ($timeArray[$i]['WST_STATUS_VAL']=='ON') + { + $onVal = (float) strtotime($timeArray[$i]['WST_DATE']); + $offTime = (float) ($offTime + ($onVal - $offVal)); + } + $status = $timeArray[$i]['WST_STATUS_VAL']; + } + } + + //Jeśli pompa jest w dalszym ciągu wyłączoa liczy czas do wskazanego jako DO + if ($status=='OFF') + { + $onVal = (float) strtotime($dateTo); + $offTime = (float) ($offTime + ($onVal - $offVal)); + } + + $fullWorkingTime = (float) ($reaTime - $offTime); + + return $fullWorkingTime; +} +// ========================================================== // + + + +// woda I +// ========================================================== // +function getGlobalPumpedWaterInDate($inDevID, $inDate, $inTableName='rep_his_data_everyday') +{ + $fnc_WaterCouner = 0; + $fnc_COUNTER = 0; + $outQvalBefore = 0; + $fnc_TIME_COUNT = 0; + $fnc_TIME_BEFORE = 0; + + unset($inArray); + $inArray = sqlGetResAsArray("select RHD_DATE,RHD_Q_VAL from ".$inTableName." where RHD_DRS_ID=".$inDevID." and RHD_Q_VAL>0 and RHD_DATE>=(select min(SLA_DATETIME) from seg_wells_manual_work_syndis where SLA_DRS_ID=".$inDevID." order by SLA_DATETIME) and RHD_DATE<='".$inDate."' order by RHD_DATE;"); + for ($i=0; $i<count($inArray); $i++) + { + //outDate, outQval; + //$inArray[$i]['RHD_DATE'], $inArray[$i]['RHD_Q_VAL'] + if ($fnc_COUNTER>0) + { + //concertDateToCompare($inDate) + if (concertDateToCompare($inArray[$i]['RHD_DATE']) < concertDateToCompare($inDate)) + $fnc_TIME_COUNT = getGlobalWorkingTimeInDate($inDevID, $inArray[$i]['RHD_DATE']); + else + $fnc_TIME_COUNT = getGlobalWorkingTimeInDate($inDevID, $inDate); + + + if ($inArray[$i]['RHD_Q_VAL'] > 0) + { + $fnc_WaterCouner = $fnc_WaterCouner + ($outQvalBefore * (($fnc_TIME_COUNT/3600) - ($fnc_TIME_BEFORE/3600))); + $fnc_TIME_BEFORE = $fnc_TIME_COUNT; + } + + } + + $fnc_COUNTER = $fnc_COUNTER+1; + $outQvalBefore = (float) $inArray[$i]['RHD_Q_VAL']; + + } + + + if ($fnc_TIME_BEFORE < getGlobalWorkingTimeInDate($inDevID, $inDate)) + { + $fnc_WaterCouner = $fnc_WaterCouner + ($outQvalBefore * ((getGlobalWorkingTimeInDate($inDevID, $inDate)/3600) - ($fnc_TIME_BEFORE/3600))); + } + + + unset($inArray); + + return round($fnc_WaterCouner,2); +} +// ========================================================== // + +// woda II +// ========================================================== // +function getGlobalPumpedWaterRangeDate($inDevID, $inDateTo) +{ + $fnc_WaterCouner = 0; + $fnc_COUNTER = 0; + $outQvalBefore = 0; + $fnc_TIME_COUNT = 0; + $fnc_TIME_BEFORE = 0; + + unset($inArray); + $inArray = sqlGetResAsArray("select RHD_DATE,RHD_Q_VAL from rep_his_data_everyday where RHD_DRS_ID=".$inDevID." and RHD_Q_VAL>0 and RHD_DATE>='2016-10-01 00:00:00' and RHD_DATE<='".$inDateTo."' order by RHD_DATE;"); + for ($i=0; $i<count($inArray); $i++) + { + //outDate, outQval; + //$inArray[$i]['RHD_DATE'], $inArray[$i]['RHD_Q_VAL'] + if ($fnc_COUNTER>0) + { + //concertDateToCompare($inDate) + if (concertDateToCompare($inArray[$i]['RHD_DATE']) < concertDateToCompare($inDateTo)) + $fnc_TIME_COUNT = getGlobalWorkingTimeInDate($inDevID, $inArray[$i]['RHD_DATE']); + else + $fnc_TIME_COUNT = getGlobalWorkingTimeInDate($inDevID, $inDateTo); + + + if ($inArray[$i]['RHD_Q_VAL'] > 0) + { + $fnc_WaterCouner = $fnc_WaterCouner + ($outQvalBefore * (($fnc_TIME_COUNT/3600) - ($fnc_TIME_BEFORE/3600))); + $fnc_TIME_BEFORE = $fnc_TIME_COUNT; + } + + } + + $fnc_COUNTER = $fnc_COUNTER+1; + $outQvalBefore = (float) $inArray[$i]['RHD_Q_VAL']; + + } + + + if ($fnc_TIME_BEFORE < getGlobalWorkingTimeInDate($inDevID, $inDateTo)) + { + $fnc_WaterCouner = $fnc_WaterCouner + ($outQvalBefore * ((getGlobalWorkingTimeInDate($inDevID, $inDateTo)/3600) - ($fnc_TIME_BEFORE/3600))); + } + + + unset($inArray); + + return round($fnc_WaterCouner,2); +} +// ========================================================== // + +// woda III +// ========================================================== // +function getGlobalPumpedWater4_rep2($inDevID, $inDateTo) +{ + $fnc_WaterCouner = 0; + $fnc_COUNTER = 0; + $outQvalBefore = 0; + $fnc_TIME_COUNT = 0; + $fnc_TIME_BEFORE = 0; + + unset($inArray); + $inArray = sqlGetResAsArray(" + select RHD_DATE,RHD_Q_VAL from ( + select RHD_DATE,RHD_Q_VAL from softspm_rep.rep_002_data_pazd where RHD_Q_VAL>0 and RHD_DRS_ID=".$inDevID." and RHD_DATE>='2016-10-01 00:00:00' and RHD_DATE<='".$inDateTo."' + union + select RHD_DATE,RHD_Q_VAL from softspm_rep.rep_002_data_list where RHD_Q_VAL>0 and RHD_DRS_ID=".$inDevID." and RHD_DATE>='2016-10-01 00:00:00' and RHD_DATE<='".$inDateTo."' + union + select RHD_DATE,RHD_Q_VAL from softspm_rep.rep_002_data_grud where RHD_Q_VAL>0 and RHD_DRS_ID=".$inDevID." and RHD_DATE>='2016-10-01 00:00:00' and RHD_DATE<='".$inDateTo."' + )tb group by RHD_Q_VAL order by RHD_DATE + "); + for ($i=0; $i<count($inArray); $i++) + { + //outDate, outQval; + //$inArray[$i]['RHD_DATE'], $inArray[$i]['RHD_Q_VAL'] + if ($fnc_COUNTER>0) + { + //concertDateToCompare($inDate) + if (concertDateToCompare($inArray[$i]['RHD_DATE']) < concertDateToCompare($inDateTo)) + $fnc_TIME_COUNT = getGlobalWorkingTimeInDate($inDevID, $inArray[$i]['RHD_DATE']); + else + $fnc_TIME_COUNT = getGlobalWorkingTimeInDate($inDevID, $inDateTo); + + + if ($inArray[$i]['RHD_Q_VAL'] > 0) + { + $fnc_WaterCouner = $fnc_WaterCouner + ($outQvalBefore * (($fnc_TIME_COUNT/3600) - ($fnc_TIME_BEFORE/3600))); + $fnc_TIME_BEFORE = $fnc_TIME_COUNT; + } + + } + + $fnc_COUNTER = $fnc_COUNTER+1; + $outQvalBefore = (float) $inArray[$i]['RHD_Q_VAL']; + + } + + + if ($fnc_TIME_BEFORE < getGlobalWorkingTimeInDate($inDevID, $inDateTo)) + { + $fnc_WaterCouner = $fnc_WaterCouner + ($outQvalBefore * ((getGlobalWorkingTimeInDate($inDevID, $inDateTo)/3600) - ($fnc_TIME_BEFORE/3600))); + } + + + unset($inArray); + + return round($fnc_WaterCouner,2); +} +// ========================================================== // + + + +// getPolynomial - nowe podejście +// ========================================================== //// ========================================================== // +// ========================================================== //// ========================================================== // +function getPolynomialHp($data,$inParam) +{ + unset($outValue); + $regression = new PolynomialRegression(4); + for($i=0; $i<count($data); $i++) + $regression->addData($data[$i]['q'], $data[$i]['h']); + + + $coefficients = $regression->getCoefficients(); + $outValue = $regression->interpolate($coefficients, $inParam); + + return $outValue; +} +function getPolynomialPe($data,$inParam) +{ + unset($outValue); + $regression = new PolynomialRegression(4); + for($i=0; $i<count($data); $i++) + $regression->addData($data[$i]['q'], $data[$i]['p']); + + $coefficients = $regression->getCoefficients(); + $outValue = $regression->interpolate($coefficients, $inParam); + + return $outValue; +} +function getPolynomialEta($data,$inParam) +{ + unset($outValue); + $regression = new PolynomialRegression(4); + for($i=0; $i<count($data); $i++) + $regression->addData($data[$i]['q'], $data[$i]['n']); + + $coefficients = $regression->getCoefficients(); + $outValue = $regression->interpolate($coefficients, $inParam); + + return $outValue; +} +// ========================================================== //// ========================================================== // +// ========================================================== //// ========================================================== // + + +// getPolynomial - II sposób +// ========================================================== //// ========================================================== // +// ========================================================== //// ========================================================== // +function getPolynomialHp_second($dataArray,$inParam) +{ + require_once('./polynomial/math.php'); + + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['h']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} +function getPolynomialPe_second($dataArray,$inParam) +{ + require_once('./polynomial/math.php'); + + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['p']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} +function getPolynomialEta_second($dataArray,$inParam) +{ + require_once('./polynomial/math.php'); + + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['n']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} +// ========================================================== //// ========================================================== // +// ========================================================== //// ========================================================== // + + + + + + + + +// ========================================================== // +function getPolynomialValue_201($data,$inParam) +{ + unset($outValue); + $regression = new PolynomialRegression(4); + for($i=0; $i<count($data); $i++) + $regression->addData($data[$i]['PEP_X_PARAM'], $data[$i]['PEP_Y_PARAM']); + + $coefficients = $regression->getCoefficients(); + $outValue = $regression->interpolate($coefficients, $inParam); + + return $outValue; +} +// ========================================================== // + +function getPolynomialValue($data,$inParam) +{ + unset($outValue); + $regression = new PolynomialRegression(4); + for($i=0; $i<count($data); $i++) + $regression->addData($data[$i][0], $data[$i][1]); + + $coefficients = $regression->getCoefficients(); + $outValue = $regression->interpolate($coefficients, $inParam); + + return $outValue; +} +// ========================================================== // + +// ========================================================== // + +function getLastValueFromDevResourceDetail($dicType,$dicName,$devId) +{ + $val=""; + $dicID = sqlValue("select DIC_ID from sys_dictionaries where DIC_TYPE='$dicType' and DIC_NAME='$dicName'"); +// $maxDate = sqlStringValue("select max(DRD_AUDIT_DATE) MAX_DATE from seg_dev_resources_det where DRD_DRS_ID=$devId and DRD_RESOURCES_DETAIL=$dicID","MAX_DATE"); +// $val = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devId and DRD_RESOURCES_DETAIL=$dicID and DRD_AUDIT_DATE='$maxDate'","DRD_VALUE"); + $val = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=".$dicID." and DRD_DRS_ID=".$devId.") and DRD_RESOURCES_DETAIL=".$dicID." and DRD_DRS_ID=".$devId,"DRD_VALUE"); + + return $val; +} +// ========================================================== // + +function getLastValueForEdit($dicID,$devId) +{ + $val=""; +// $maxDate = sqlStringValue("select max(DRD_AUDIT_DATE) MAX_DATE from seg_dev_resources_det where DRD_DRS_ID=$devId and DRD_RESOURCES_DETAIL=$dicID","MAX_DATE"); +// $val = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devId and DRD_RESOURCES_DETAIL=$dicID and DRD_AUDIT_DATE='$maxDate'","DRD_VALUE"); + $val = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=".$dicID." and DRD_DRS_ID=".$devId.")","DRD_VALUE"); + + // dla Q m3/min + if ($dicID==200) $val = round($val/60,3); + + return $val; +} + +// ========================================================== // +function getAutoManualWork($devID) +{ + $res=1; + $qrs=sqlStringValue("select ARM_TYPES from seg_alarms where ARM_AUDIT_CD=(select max(ARM_AUDIT_CD) from seg_alarms where ARM_DRS_ID=$devID)","ARM_TYPES"); + if (strstr($qrs,"MAN")) + $res=0; + + return $res; +} + +// ========================================================== // +function setDictionaryFieldLanguage($lng) +{ + $val = 'DIC_ENG_LANG'; + if ($lng == 'polish') $val = 'DIC_POL_LANG'; + else if ($lng == 'english') $val = 'DIC_ENG_LANG'; + else if ($lng == 'german') $val = 'DIC_GER_LANG'; + + return $val; +} + +// ========================================================== // + +// ========================================================== // +function setDicName($dicID) +{ + if ($_SESSION['lang']=='polish') $sqlQuery = "select DIC_POL_LANG from sys_dictionaries where DIC_ID=$dicID"; + else if ($_SESSION['lang']=='english') $sqlQuery = "select DIC_ENG_LANG from sys_dictionaries where DIC_ID=$dicID"; + else if ($_SESSION['lang']=='german') $sqlQuery = "select DIC_GER_LANG from sys_dictionaries where DIC_ID=$dicID"; + else $sqlQuery = "select DIC_NAME from sys_dictionaries where DIC_ID=$dicID"; + $wynik = mysql_query($sqlQuery); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($_SESSION['lang']=='polish') $result=$r["DIC_POL_LANG"]; + else if ($_SESSION['lang']=='english') $result=$r["DIC_ENG_LANG"]; + else if ($_SESSION['lang']=='german') $result=$r["DIC_GER_LANG"]; + else $result=$r["DIC_NAME"]; + } + return $result; +} +// ========================================================== // +function selectFromDictionary($varName, $typ, $selectedID=null) +{ + if ($_SESSION['lang']=='polish') $sqlQuery = "select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='$typ' order by DIC_POL_LANG"; + else if ($_SESSION['lang']=='english') $sqlQuery = "select DIC_ID,DIC_ENG_LANG from sys_dictionaries where DIC_TYPE='$typ' order by DIC_ENG_LANG"; + else if ($_SESSION['lang']=='german') $sqlQuery = "select DIC_ID,DIC_GER_LANG from sys_dictionaries where DIC_TYPE='$typ' order by DIC_GER_LANG"; + else $sqlQuery = "select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='$typ' order by DIC_NAME"; + + echo"<select name='$varName'>"; + $wynik = mysql_query($sqlQuery); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($_SESSION['lang']=='polish') { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_POL_LANG"]; } + else if ($_SESSION['lang']=='english') { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_ENG_LANG"]; } + else if ($_SESSION['lang']=='german') { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_GER_LANG"]; } + else { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_NAME"]; } + + if ($selectedID!=null and $selectedID==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + echo"</select>"; +} +// ========================================================== // + +function selectDescriptionFromDictionary($varName, $typ, $selectedVal=null) +{ + if ($_SESSION['lang']=='polish') $sqlQuery = "select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='$typ' order by DIC_POL_LANG"; + else if ($_SESSION['lang']=='english') $sqlQuery = "select DIC_ID,DIC_ENG_LANG from sys_dictionaries where DIC_TYPE='$typ' order by DIC_ENG_LANG"; + else if ($_SESSION['lang']=='german') $sqlQuery = "select DIC_ID,DIC_GER_LANG from sys_dictionaries where DIC_TYPE='$typ' order by DIC_GER_LANG"; + else $sqlQuery = "select DIC_NAME from sys_dictionaries where DIC_TYPE='$typ'"; + + echo"<select name='$varName'>"; + echo"<option value=''>Wybierz z listy</option>"; + $wynik = mysql_query($sqlQuery); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($_SESSION['lang']=='polish') { $resDESC=$r["DIC_POL_LANG"]; } + else if ($_SESSION['lang']=='english') { $resDESC=$r["DIC_ENG_LANG"]; } + else if ($_SESSION['lang']=='german') { $resDESC=$r["DIC_GER_LANG"]; } + else { $resDESC=$r["DIC_NAME"]; } + + if ($selectedVal!=null and $selectedVal==$resDESC) + echo"<option value='$resDESC' selected>$resDESC</option>"; + else + echo"<option value='$resDESC'>$resDESC</option>"; + } + echo"</select>"; +} + + + +function selectDescriptionFromDictionaryByID($varName, $typ, $id=null) +{ + + echo"<select name='$varName'>"; + echo"<option value=''>Wybierz z listy</option>"; + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='".$typ."'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($id>0 and $id==$resID) + echo"<option value='".$resID."' selected>".$resDESC."</option>"; + else + echo"<option value='".$resID."'>".$resDESC."</option>"; + } + echo"</select>"; +} + + + + + +// ========================================================== // +function getParamsForGSMchannels($varName, $selectID=0) +{ + include"./language/".$_SESSION['lang'].".php"; + if ($_SESSION['lang']=='polish') $sqlQuery = "select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE in ('WELL_PARAMETERS','WELL_ELECTRICAL_PARAMETERS','WELL_HIDDEN_PARAMETERS','RESERVOIR_PIEZOMETER_PARAMETERS') order by DIC_ID"; + else if ($_SESSION['lang']=='english') $sqlQuery = "select DIC_ID,DIC_ENG_LANG from sys_dictionaries where DIC_TYPE in ('WELL_PARAMETERS','WELL_ELECTRICAL_PARAMETERS','WELL_HIDDEN_PARAMETERS','RESERVOIR_PIEZOMETER_PARAMETERS') order by DIC_ID"; + else if ($_SESSION['lang']=='german') $sqlQuery = "select DIC_ID,DIC_GER_LANG from sys_dictionaries where DIC_TYPE in ('WELL_PARAMETERS','WELL_ELECTRICAL_PARAMETERS','WELL_HIDDEN_PARAMETERS','RESERVOIR_PIEZOMETER_PARAMETERS') order by DIC_ID"; + else $sqlQuery = "select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE in ('WELL_PARAMETERS','WELL_ELECTRICAL_PARAMETERS','WELL_HIDDEN_PARAMETERS','RESERVOIR_PIEZOMETER_PARAMETERS') order by DIC_ID"; + + echo"<select name='$varName'>"; + echo"<option value='0'>$lab_FormSelect_001</option>"; + $wynik = mysql_query($sqlQuery); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($_SESSION['lang']=='polish') { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_POL_LANG"]; } + else if ($_SESSION['lang']=='english') { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_ENG_LANG"]; } + else if ($_SESSION['lang']=='german') { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_GER_LANG"]; } + else { $resID=$r["DIC_ID"]; $resDESC=$r["DIC_NAME"]; } + + if ($resID==$selectID) echo"<option value='$resID' selected>$resDESC</option>"; + else echo"<option value='$resID'>$resDESC</option>"; + } + echo"</select>"; +} +// ========================================================== // + + + +// ========================================================== // +function selectObject4GSMonitoring($varName, $selectID=0) +{ + include"./language/".$_SESSION['lang'].".php"; + $fieldName = setDictionaryFieldLanguage($_SESSION['lang']); + + $sqlWell = sqlStringValue("select $fieldName from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='WELL'",$fieldName); + $sqlRes = sqlStringValue("select $fieldName from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR'",$fieldName); + $sqlPie = sqlStringValue("select $fieldName from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER'",$fieldName); + + + echo"<select name='$varName'>"; + echo"<option value='0'>$lab_FormSelect_001</option>"; + $wynik = mysql_query("select DRS_ID,WLL_NAME,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID from seg_dev_resources left join seg_wells on DRS_DEV_ID=WLL_ID left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID where DRS_DEV_TYPE = (select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='WELL') order by WLL_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DRS_ID"]; + $sql01=$r["WLL_NAME"]; + $sql02=$r["RWL_PUP_DRS_ID"]; + $sql03=$r["RWL_ENG_DRS_ID"]; + + if ($resID==$selectID) echo"<option value='$resID' selected>$sqlWell $sql01 [".sqlStringValue("select PUP_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=$sql02","PUP_NAME").", ".sqlStringValue("select ENG_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=$sql03","ENG_NAME")."]</option>"; + else echo"<option value='$resID'>$sqlWell $sql01 [".sqlStringValue("select PUP_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=$sql02","PUP_NAME").", ".sqlStringValue("select ENG_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=$sql03","ENG_NAME")."]</option>"; + } + + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE = (select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR')")>0) + echo"<option value='-1'> - - - - - - - - - - - - - - - </option>"; + + $wynik = mysql_query("select DRS_ID,SRP_NAME from seg_dev_resources left join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID where DRS_DEV_TYPE = (select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR') order by SRP_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DRS_ID"]; + $sql01=$r["SRP_NAME"]; + + if ($resID==$selectID) echo"<option value='$resID' selected>$sqlRes $sql01</option>"; + else echo"<option value='$resID'>$sqlRes $sql01</option>"; + } + + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE = (select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER')")>0) + echo"<option value='-1'> - - - - - - - - - - - - - - - </option>"; + + $wynik = mysql_query("select DRS_ID,SRP_NAME from seg_dev_resources left join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID where DRS_DEV_TYPE = (select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER') order by SRP_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DRS_ID"]; + $sql01=$r["SRP_NAME"]; + + if ($resID==$selectID) echo"<option value='$resID' selected>$sqlPie $sql01</option>"; + else echo"<option value='$resID'>$sqlPie $sql01</option>"; + } + + echo"</select>"; +} +// ========================================================== // + + + + + +// Zwraca w selekcie NazwÄ™ producenta, a jako wartoĹ›c przekazuje jego ID +function selectManufacturersName($varName, $selectID=0) +{ + include"./language/".$_SESSION['lang'].".php"; + + echo"<select name='$varName'>"; + echo"<option value='0'> $lab_FormSelect_001 </option>"; + + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $mcfID=$r["MCF_ID"]; + $mcfNAME=$r["MCF_NAME"]; + if ($mcfID==$selectID) echo"<option value='$mcfID' selected>$mcfNAME</option>"; + else echo"<option value='$mcfID'>$mcfNAME</option>"; + } + echo"</select>"; +} + + +// Zwraca w selekcie nazwę producenta, a jako wartość przekazuje jego ID +function selectManufacturersNameReq($varName, $selectID=0) +{ + include"./language/".$_SESSION['lang'].".php"; + + echo"<select class='req' name='$varName' required>"; + echo"<option value='0'> $lab_FormSelect_001 </option>"; + + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $mcfID=$r["MCF_ID"]; + $mcfNAME=$r["MCF_NAME"]; + if ($mcfID==$selectID) echo"<option value='$mcfID' selected>$mcfNAME</option>"; + else echo"<option value='$mcfID'>$mcfNAME</option>"; + } + echo"</select>"; +} + + + +// ========================================================== // +// wylicza Wartość H dla zadanego parametru Q +function setPumpHparameterForQ($pumpID,$param) +{ + $result=0; + $wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from seg_pumps_xy_formula where PUF_TYPE='H' and PUF_PUP_ID=$pumpID"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fxy_A = $r["PUF_A"]; + $fxy_B = $r["PUF_B"]; + $fxy_C = $r["PUF_C"]; + $fxy_D = $r["PUF_D"]; + $result = round($fxy_A*$param*$param*$param + $fxy_B*$param*$param + $fxy_C*$param + $fxy_D,2); + } + $result = str_replace(".",",",$result); + return $result; +} +// ========================================================== // + +// wylicza Wartość H dla zadanego parametru Q +function setPumpHparameterForQafterTest($pumpID,$pumpNo,$param) +{ + $result=0; + //$wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from seg_pumps_xy_formula where PUF_TYPE='H' and PUF_PUP_ID=$pumpID"); + $wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TYPE='H' and PUF_PUP_ID=".$pumpID." and PUF_PUP_NO='".$pumpNo."'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fxy_A = $r["PUF_A"]; + $fxy_B = $r["PUF_B"]; + $fxy_C = $r["PUF_C"]; + $fxy_D = $r["PUF_D"]; + $result = round($fxy_A*$param*$param*$param + $fxy_B*$param*$param + $fxy_C*$param + $fxy_D,2); + } + $result = str_replace(".",",",$result); + return $result; +} +// ========================================================== // + +// wylicza Wartość ETA (sprawność) dla zadanego parametru Q +function setPumpETAparameterForQ($pumpID,$param) +{ + $result=0; + $wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from seg_pumps_xy_formula where PUF_TYPE='ETA' and PUF_PUP_ID=$pumpID"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fxy_A = $r["PUF_A"]; + $fxy_B = $r["PUF_B"]; + $fxy_C = $r["PUF_C"]; + $fxy_D = $r["PUF_D"]; + $result = round($fxy_A*$param*$param*$param + $fxy_B*$param*$param + $fxy_C*$param + $fxy_D,2); + } + $result = str_replace(".",",",$result); + return $result; +} +// ========================================================== // + +// wylicza Wartość ETA dla pompy po prĂłbie - NA STANIE (sprawność) dla zadanego parametru Q +function setPumpETAparameterForQafterTest($pumpID,$pumpNo,$param) +{ + $result=0; + //$wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from seg_pumps_xy_formula where PUF_TYPE='ETA' and PUF_PUP_ID=$pumpID"); + + $wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TYPE='ETA' and PUF_PUP_ID=".$pumpID." and PUF_PUP_NO='".$pumpNo."'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fxy_A = $r["PUF_A"]; + $fxy_B = $r["PUF_B"]; + $fxy_C = $r["PUF_C"]; + $fxy_D = $r["PUF_D"]; + $result = round($fxy_A*$param*$param*$param + $fxy_B*$param*$param + $fxy_C*$param + $fxy_D,2); + } + $result = str_replace(".",",",$result); + return $result; +} +// ========================================================== // + + + + + + +function draw_tag_left($head, $content) +{ + echo" + <div class='head_tag'>$head</div> + <div class='tag'>$content</div> + "; +} +// ========================================================== // +function draw_tag_center($head, $content) +{ + echo" + <div class='head_tag'>$head</div> + <div class='tag_center'>$content</div> + "; +} +// ========================================================== // +function show_tooltip_help ($content) +{ + echo"<a class='tooltip_help' href='#'><img src='./images/question.png'> <span>$content</span></a>"; +} +// ========================================================== // +function show_tooltip_warning ($content) +{ + echo"<a class='tooltip_warning' href='#'><img src='./images/warning.png'> <span>$content</span></a>"; +} +// ========================================================== // + +function showFooterWarningAccessNotification($content) +{ + echo" + <div class=tag100> + <div class=tag_warning>$content </div> + </div> + "; +} +// ========================================================== // + + + +function getPathFromSiteNumber($siteNo) +{ + include"./language/".$_SESSION['lang'].".php"; + + $pgNO = substr($siteNo, -3, 3); + $var1 = "lab_TopMenu_".$pgNO; + $var2 = "lab_SubMenu_".$pgNO; + + if ($pgNO==100 || $pgNO==200 || $pgNO==300 || $pgNO==400 || $pgNO==500 || $pgNO==600 || $pgNO==700 || $pgNO==800 || $pgNO==900) echo $$var1; + else if ($pgNO>100 && $pgNO<200) echo $lab_TopMenu_100." &raquo; ". $$var2; + else if ($pgNO>200 && $pgNO<300) echo $lab_TopMenu_200." &raquo; ". $$var2; + else if ($pgNO>300 && $pgNO<400) echo $lab_TopMenu_300." &raquo; ". $$var2; + else if ($pgNO>400 && $pgNO<500) echo $lab_TopMenu_400." &raquo; ". $$var2; + else if ($pgNO>500 && $pgNO<600) echo $lab_TopMenu_500." &raquo; ". $$var2; + else if ($pgNO>600 && $pgNO<700) echo $lab_TopMenu_600." &raquo; ". $$var2; + else if ($pgNO>700 && $pgNO<800) echo $lab_TopMenu_700." &raquo; ". $$var2; + else if ($pgNO>800 && $pgNO<900) echo $lab_TopMenu_800." &raquo; ". $$var2; + else if ($pgNO>900) echo $lab_TopMenu_900." &raquo; ". $$var2; +} +// ========================================================== // + +function delChartFiles($userName) +{ + $dir = dir("./charts/"); + while ($plik = $dir->read()) + { + if (strlen($plik)>3 && strstr($plik,$userName)) + { + unlink("./charts/".$plik); + } + } + $dir->close(); +} +// ========================================================== // +function setHPValue($devID,$Qparam) +{ + $valPRC=0; + //$PPparam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_HIDDEN_PARAMETERS' and DIC_NAME='PP') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + //$HHparam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_HIDDEN_PARAMETERS' and DIC_NAME='HH') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + + $PPparam = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','PP',$devID); + $HHparam = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','HH',$devID); + + $PupID = sqlValue("select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=$devID)"); + $pumpNo = sqlStringValue("select DRS_SN_NUMBER from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on DRS_DEV_ID=RWL_WLL_ID where DRS_ID=$devID)","DRS_SN_NUMBER"); + + $HpumpQ = str_replace(",",".",setPumpHparameterForQafterTest($PupID,$pumpNo,$Qparam)); + + + if(empty($PPparam)) $PPparam=1; + $valPRC=($HpumpQ-($PPparam-$HHparam))/($PPparam-$HHparam); + + + return $valPRC; +} +// ========================================================== // + +function setHDValue($devID) +{ + $val=0; + //$LPparam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='LPM') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + //$HHparam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_HIDDEN_PARAMETERS' and DIC_NAME='HH') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + + + $LPparam = getLastValueFromDevResourceDetail('WELL_PARAMETERS','LPM',$devID); + $HHparam = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','HH',$devID); + + //$val= getLastValueFromDevResourceDetail('WELL_PARAMETERS','HDM',$devID); + + $val = $LPparam-$HHparam; + return $val; +} +// ========================================================== // + +function setHSAValue($devID) +{ + $val=0; + //$P1param = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='P1M') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + //$P2param = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='P2M') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + + + $P1param = getLastValueFromDevResourceDetail('WELL_PARAMETERS','P1M',$devID); + $P2param = getLastValueFromDevResourceDetail('WELL_PARAMETERS','P2M',$devID); + + + + + $val = $P1param-$P2param; + return $val; +} +// ========================================================== // + +function setHSLValue($devID) +{ + $val=0; + //$PPparam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_HIDDEN_PARAMETERS' and DIC_NAME='PP') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + //$LPparam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='LPM') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + //$P1param = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='P1M') and DRD_DRS_ID=$devID)", "DRD_VALUE"); + + + $PPparam = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','PP',$devID); + $LPparam = getLastValueFromDevResourceDetail('WELL_PARAMETERS','LPM',$devID); + $P1param = getLastValueFromDevResourceDetail('WELL_PARAMETERS','P1M',$devID); + + + + $val = $PPparam-$LPparam-$P1param; + return $val; +} +// ========================================================== // + +function setRedYellowLimes($qParam) +{ + $val = 0; + + //y(x) = 0,00210526315789473x^1 + 0,267368421052632x^0 + if ($qParam>0 && $qParam<=25) + $val = 0.00210526315789473*$qParam + 0.267368421052632; + //y(x) = 0,00133333333333334x^1 + 0,286666666666667x^0 + else if ($qParam>25 && $qParam<=40) + $val = 0.00133333333333334*$qParam + 0.286666666666667; + //y(x) = 0,000749999999999997x^1 + 0,31x^0 + else if ($qParam>40 && $qParam<=60) + $val = 0.000749999999999997*$qParam + 0.31; + //y(x) = 0,000225000000000001x^1 + 0,3415x^0 + else if ($qParam>60 && $qParam<=260) + $val = 0.000225000000000001*$qParam + 0.3415; + //y(x) = 4,16666666666662E-05x^1 + 0,389166666666667x^0 + else if ($qParam>260 && $qParam<=500) + $val = 4.16666666666662E-05*$qParam + 0.389166666666667; + //y(x) = 1,99999999999997E-05x^1 + 0,4x^0 + else if ($qParam>500) + $val = 1.99999999999997E-05*$qParam + 0.4; + + return $val; +} + +// ========================================================== // + +function setYellowGreenLimes($qParam) +{ + $val = 0; + + //y(x) = 0,00999999999999998x^1 + 0,3x^0 + if ($qParam>0 && $qParam<=8) + $val = 0.00999999999999998*$qParam + 0.3; + //y(x) = 0,00545454545454544x^1 + 0,336363636363637x^0 + else if ($qParam>8 && $qParam<=19) + $val = 0.00545454545454544*$qParam + 0.336363636363637; + //y(x) = 0,00210526315789474x^1 + 0,4x^0 + else if ($qParam>19 && $qParam<=38) + $val = 0.00210526315789474*$qParam + 0.4; + //y(x) = 0,000454545454545451x^1 + 0,462727272727273x^0 + else if ($qParam>38 && $qParam<=60) + $val = 0.000454545454545451*$qParam + 0.462727272727273; + //y(x) = 0,000170454545454545x^1 + 0,479772727272727x^0 + else if ($qParam>60 && $qParam<=500) + $val = 0.000170454545454545*$qParam + 0.479772727272727; + //y(x) = 9,99999999999959E-06x^1 + 0,560000000000001x^0 + else if ($qParam>500) + $val = 9.99999999999959E-06*$qParam + 0.560000000000001; + + return $val; +} + + + + +// ========================================================== // + +function pumpImageStatus($fileName, $ryParam, $ygParam, $EtaParam) +{ +include"./language/".$_SESSION['lang'].".php"; + + + $myPicture = new pImage(40,120); + + $rY = 118 - floor((116/0.7)*$ryParam); + $yY = 118 - floor((116/0.7)*$ygParam); + $etaY = 118 - floor((116/0.7)*$EtaParam); + + if ($etaY<1) $etaY = 1; + if ($etaY>118) $etaY = 118; + + + //red + $RectangleSettings = array("R"=>255,"G"=>0,"B"=>0,"Surrounding"=>30); + $myPicture->drawFilledRectangle(6,$rY,34,118,$RectangleSettings); + + //yellow + $RectangleSettings = array("R"=>255,"G"=>255,"B"=>0,"Surrounding"=>30); + $myPicture->drawFilledRectangle(6,$yY,34,$rY,$RectangleSettings); + + //green + $RectangleSettings = array("R"=>11,"G"=>116,"B"=>76,"Surrounding"=>30); + $myPicture->drawFilledRectangle(6,2,34,$yY,$RectangleSettings); + + //bell + $RectangleSettings = array("R"=>0,"G"=>0,"B"=>0,"Surrounding"=>30); + $myPicture->drawFilledRectangle(0,$etaY-0.5,40,$etaY+0.5,$RectangleSettings); + + $myPicture->Render($fileName); + +// if ($EtaParam<0 || $EtaParam>1) +// echo('<script>sweetAlert("Uwaga!", "Błędna ocena energochłonności z uwagi na błędne dane! Należy sprawdzić poprawność parametrów pracy studni i układu pompowego.", "error");</script>'); + +} +// ========================================================== // + +// nowa wersja +function createChartFileNamePng($inParam) +{ + unset($outParam); + $outParam = "./charts/".date("YmdHis")."_".str_replace(array('@','.','_'), array('','',''), $_SESSION['user'])."_".$inParam.".png"; + + return $outParam; +} +function pumpImageEnergy($fileName, $ryParam, $ygParam, $EtaParam) +{ + include"./language/".$_SESSION['lang'].".php"; + + $myPicture = new pImage(450,100); + + $rY = 450 - floor((450/0.7)*$ryParam); + $yY = 450 - floor((450/0.7)*$ygParam); + $etaY = 450 - floor((450/0.7)*$EtaParam); + + + if ($etaY<1) $etaY = 1; + if ($etaY>450) $etaY = 450; + + //red + $a = 100/(450-$rY); $licz=0; + for ($i=$rY; $i<450; $i++) + { + $myPicture->drawFilledRectangle($i,30,$i+1,70,array("R"=>(255-($a*$licz)),"G"=>0,"B"=>0,"Surrounding"=>30)); + $licz++; + } + + //yellow + $RectangleSettings = array("R"=>255,"G"=>255,"B"=>0,"Surrounding"=>30); + $myPicture->drawFilledRectangle($yY,30,$rY-1,70,$RectangleSettings); + + + //green + $a = 100/$yY; $licz=0; + for ($i=0; $i<$yY; $i++) + { + $myPicture->drawFilledRectangle($i,30,$i+1,70,array("R"=>0,"G"=>(150+($a*$licz)),"B"=>0,"Surrounding"=>30)); + $licz++; + } + + + //bell + $RectangleSettings = array("R"=>0,"G"=>0,"B"=>0,"Surrounding"=>30); + $myPicture->drawFilledRectangle($etaY-1,20,$etaY+1,80,$RectangleSettings); + + $myPicture->Render($fileName); +} +// ========================================================== // + + + +function pumpImageGreyBell($fileName) +{ + $myPicture = new pImage(40,120); + //grey + $RectangleSettings = array("R"=>195,"G"=>195,"B"=>195,"Surrounding"=>30); + $myPicture->drawFilledRectangle(6,6,34,114,$RectangleSettings); + $myPicture->Render($fileName); +} +// ========================================================== // +// nowe podejście +function pumpImageEnergyGreyBell($fileName) +{ + + $myPicture = new pImage(450,100); + + //grey + $RectangleSettings = array("R"=>195,"G"=>195,"B"=>195,"Surrounding"=>30); + $myPicture->drawFilledRectangle(0,30,450,70,$RectangleSettings); + + $myPicture->drawText(180,45,"Brak oceny",array("R"=>0,"G"=>0,"B"=>0,"Align"=>TEXT_ALIGN_TOPLEFT,"FontSize"=>11)); + + $myPicture->Render($fileName); +} +// ========================================================== // + + + + +function usrLoginAndSiteAccess($login, $passwd, $lang='polish', $sys_type) +{ + if (sqlValue("select count(1) from sys_users where USR_USERNAME='$login' and USR_PASSWORD='".md5($passwd)."' and USR_STATUS='1'")>0) + { + $_SESSION['user']=$login; + $_SESSION['lang']=$lang; + $_SESSION['user_id']=sqlValue("select USR_ID from sys_users where USR_USERNAME='$login' and USR_PASSWORD='".md5($passwd)."' and USR_STATUS='1'"); + if (!empty($sys_type)) + $_SESSION['sys_typ']=$sys_type; + else + $_SESSION['sys_typ']=sqlStringValue("select PRT_SYSTEM_TYPE from sys_users left join sys_participants on USR_PRT_ID=PRT_ID where USR_ID=".$_SESSION['user_id'], "PRT_SYSTEM_TYPE"); + + //wpis do bazy - audyt lohowaĹ„ dla poszczegĂłlnych uĹĽytkownikĂłw + mysql_query("INSERT INTO sys_users_access_log SET UAL_USR_ID=".$_SESSION['user_id'].",UAL_SYSTEM_TYPE='$sys_type',UAL_LANGUAGE='$lang',UAL_IP_ADDRESS='".$_SERVER['REMOTE_ADDR']."',UAL_AUDIT_CD=now()"); + + //ustalamy poziom dostÄ™pu w zaleĹĽnoĹ›ci - uniwersalne ustawienia + //if ($_SESSION['sys_typ'] =='SoftSPM_bas') $_SESSION['access_level']=1; + //else if ($_SESSION['sys_typ'] =='SoftSPM_std') $_SESSION['access_level']=2; + //else if ($_SESSION['sys_typ'] =='SoftSPM_ent') $_SESSION['access_level']=3; + //else $_SESSION['access_level']=sqlValue("select PRT_SYSTEM_ACCESS_LEVEL from sys_users left join sys_participants on USR_PRT_ID=PRT_ID where USR_ID=".$_SESSION['user_id']); + + // dla Myszkowa mamy BASIC + $_SESSION['access_level']=1; + + delChartFiles($login); + + $wynik = mysql_query("select SAC_URL_NAME from sys_user_profiles left join sys_profile_site on PSA_PRO_ID=SUP_PRO_ID left join sys_site_access on SAC_ID=PSA_SAC_ID where SUP_USR_ID=".$_SESSION['user_id']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $siteNO = $r["SAC_URL_NAME"]; + if ($siteNO=='site201') $_SESSION['site201']=1; + else if ($siteNO=='site202') $_SESSION['site202']=1; + else if ($siteNO=='site203') $_SESSION['site203']=1; + else if ($siteNO=='site204') $_SESSION['site204']=1; + else if ($siteNO=='site205') $_SESSION['site205']=1; + else if ($siteNO=='site206') $_SESSION['site206']=1; + else if ($siteNO=='site207') $_SESSION['site207']=1; + else if ($siteNO=='site208') $_SESSION['site208']=1; + + else if ($siteNO=='site301') $_SESSION['site301']=1; + else if ($siteNO=='site302') $_SESSION['site302']=1; + else if ($siteNO=='site303') $_SESSION['site303']=1; + else if ($siteNO=='site304') $_SESSION['site304']=1; + else if ($siteNO=='site305') $_SESSION['site305']=1; + else if ($siteNO=='site306') $_SESSION['site306']=1; + else if ($siteNO=='site307') $_SESSION['site307']=1; + else if ($siteNO=='site308') $_SESSION['site308']=1; + else if ($siteNO=='site309') $_SESSION['site309']=1; + else if ($siteNO=='site310') $_SESSION['site310']=1; + + else if ($siteNO=='site401') $_SESSION['site401']=1; + else if ($siteNO=='site402') $_SESSION['site402']=1; + else if ($siteNO=='site403') $_SESSION['site403']=1; + else if ($siteNO=='site404') $_SESSION['site404']=1; + else if ($siteNO=='site405') $_SESSION['site405']=1; + else if ($siteNO=='site406') $_SESSION['site406']=1; + + else if ($siteNO=='site801') $_SESSION['site801']=1; + else if ($siteNO=='site802') $_SESSION['site802']=1; + else if ($siteNO=='site803') $_SESSION['site803']=1; + else if ($siteNO=='site805') $_SESSION['site805']=1; + else if ($siteNO=='site806') $_SESSION['site806']=1; + else if ($siteNO=='site807') $_SESSION['site807']=1; + else if ($siteNO=='site809') $_SESSION['site809']=1; + else if ($siteNO=='site810') $_SESSION['site810']=1; + + + // prawa do zmian [dodawanie/edycja] dla poszczegĂłlnych stron + else if ($siteNO=='site203_edit') $_SESSION['site203_edit']=1; + else if ($siteNO=='site204_edit') $_SESSION['site204_edit']=1; + else if ($siteNO=='site205_edit') $_SESSION['site205_edit']=1; + else if ($siteNO=='site206_edit') $_SESSION['site206_edit']=1; + else if ($siteNO=='site207_edit') $_SESSION['site207_edit']=1; + else if ($siteNO=='site208_edit') $_SESSION['site208_edit']=1; + + + else if ($siteNO=='site301_edit') $_SESSION['site301_edit']=1; + else if ($siteNO=='site302_edit') $_SESSION['site302_edit']=1; + else if ($siteNO=='site303_edit') $_SESSION['site303_edit']=1; + else if ($siteNO=='site304_edit') $_SESSION['site304_edit']=1; + else if ($siteNO=='site306_edit') $_SESSION['site306_edit']=1; + else if ($siteNO=='site307_edit') $_SESSION['site307_edit']=1; + else if ($siteNO=='site308_edit') $_SESSION['site308_edit']=1; + else if ($siteNO=='site309_edit') $_SESSION['site309_edit']=1; + else if ($siteNO=='site310_edit') $_SESSION['site310_edit']=1; + + + else if ($siteNO=='site401_edit') $_SESSION['site401_edit']=1; + else if ($siteNO=='site401_well_onoff') $_SESSION['site401_well_onoff']=1; + else if ($siteNO=='site401_edit_chpar') $_SESSION['site401_edit_chpar']=1; + else if ($siteNO=='site401_edit_param') $_SESSION['site401_edit_param']=1; + else if ($siteNO=='site402_edit') $_SESSION['site402_edit']=1; + else if ($siteNO=='site404_edit') $_SESSION['site404_edit']=1; + else if ($siteNO=='site405_edit') $_SESSION['site405_edit']=1; + + + else if ($siteNO=='site801_edit') $_SESSION['site801_edit']=1; + else if ($siteNO=='site802_edit') $_SESSION['site802_edit']=1; + else if ($siteNO=='site803_edit') $_SESSION['site803_edit']=1; + else if ($siteNO=='site805_edit') $_SESSION['site805_edit']=1; + else if ($siteNO=='site810_edit') $_SESSION['site810_edit']=1; + + + + } + } + else + { + session_destroy(); + } + +} + + +// ========================================================== // +function sendEmailNotification($address, $temat, $tresc) +{ + + require_once('./libmail/class.phpmailer.php'); + + $tresc_maila = "Wiadomość wysĹ‚ana automatycznie dnia ".date('d.m.Y, H:i')." z systemu SoftSPM <br/><br/>"; + $tresc_maila .= $tresc; + $tresc_maila .= "<br/><br/>"; + $tresc_maila .= "Pozdrawiamy,<br/>"; + $tresc_maila .= "SoftSPM<br/>"; + $tresc_maila .= "<a href='http://softspm.com'>http://softspm.com</a><br/>"; + $tresc_maila .= "<a href='http://serwis.softspm.com'>http://serwis.softspm.com</a><br/><br/>"; + + + $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch + $mail->IsSMTP(); // telling the class to use SMTP + $mail->CharSet = "UTF-8"; + try { + +//$mail->Host = "smtp.gmail.com"; // SMTP server + $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) + $mail->SMTPAuth = true; // enable SMTP authentication + $mail->SMTPSecure = 'ssl'; + $mail->Host = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_SERVER'","SSP_VALUE"); // sets the SMTP server + $mail->Port = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_PORT'","SSP_VALUE"); // set the SMTP port for the GMAIL server + $mail->Username = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_USERNAME'","SSP_VALUE"); // SMTP account username + $mail->Password = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_PASSWORD'","SSP_VALUE"); // SMTP account password + //$mail->AddAddress($address, $address); + $mail->SetFrom(sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='MAIL'","SSP_VALUE"), sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='MAIL_NAME'","SSP_VALUE")); + $mail->Subject = $temat; + $mail->Body = $tresc_maila; + $mail->WordWrap = 50; + $mail->IsHTML(true); +//$mail->MsgHTML(file_get_contents('contents.html')); +//$mail->AddAttachment('images/phpmailer.gif'); // attachment +//$mail->AddAttachment('images/phpmailer_mini.gif'); // attachment + + // jeĹ›li jest podany wiÄ™cej niĹĽ jeden adres e-mail rozdzielony Ĺ›rednikiem lub spacjÄ… + $address = str_replace(" ", ";", $address); + if (strstr($address, ';')) + { + $adrtab = explode(";", $address); + foreach ($adrtab as $adrcmail) + { + if (strlen($adrcmail)>3) + $mail->AddAddress($adrcmail, $adrcmail); + } + $mail->Send(); + } + else + { + $mail->AddAddress($address, $address); + $mail->Send(); + } + + + } catch (phpmailerException $e) { + echo $e->errorMessage(); //Pretty error messages from PHPMailer + } catch (Exception $e) { + echo $e->getMessage(); //Boring error messages from anything else! + } + + + +} + + +// ========================================================== // +function delPolishAndBlankCharactersFromFileName($inText) +{ + $val = str_replace(",","",$inText); + $val = str_replace("!","",$val); + $val = str_replace("@","",$val); + $val = str_replace("#","",$val); + $val = str_replace("$","",$val); + $val = str_replace("%","",$val); + $val = str_replace("^","",$val); + $val = str_replace("^","",$val); + $val = str_replace("*","",$val); + $val = str_replace("(","",$val); + $val = str_replace(")","",$val); + $val = str_replace("-","_",$val); + $val = str_replace("+","",$val); + $val = str_replace(" ","_",$val); + $val = str_replace("Ä…","a",$val); + $val = str_replace("ĹĽ","z",$val); + $val = str_replace("Ĺş","z",$val); + $val = str_replace("ć","c",$val); + $val = str_replace("Ĺ›","s",$val); + $val = str_replace("Ä™","e",$val); + $val = str_replace("Ăł","o",$val); + $val = str_replace("Ĺ‚","l",$val); + $val = str_replace("?","",$val); + $val = str_replace("/","",$val); + $val = str_replace("","",$val); + $val = str_replace("'","",$val); + $val = str_replace("{","",$val); + $val = str_replace("}","",$val); + $val = str_replace("[","",$val); + $val = str_replace("]","",$val); + $val = str_replace("|","",$val); + + return $val; +} + +// ========================================================== // +function getPumpStatusWork($devID) +{ + $res=1; + if (getLastValueFromDevResourceDetail("WELL_STATUSES","ON_OFF",$devID)!="ON") + $res=0; + return $res; +} +// ========================================================== // +function getLinkToShowHistoricalData($dicType,$dicName,$devId,$pgName) +{ + $val=""; + $dicID = sqlValue("select DIC_ID from sys_dictionaries where DIC_TYPE='$dicType' and DIC_NAME='$dicName'"); + $maxDate = sqlStringValue("select max(DRD_AUDIT_DATE) MAX_DATE from seg_dev_resources_det where DRD_DRS_ID=$devId and DRD_RESOURCES_DETAIL=$dicID","MAX_DATE"); + $val = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devId and DRD_RESOURCES_DETAIL=$dicID and DRD_AUDIT_DATE='$maxDate'","DRD_VALUE"); + + if (strlen($val)>0) $valToShow = round($val,2); + else $valToShow = $val; + // sprawdza, jeĹ›li pompa jest wyłączona to ustawia ZERA na wskazaniach + if (getPumpStatusWork($devId)==0) + { + if ($dicType=="WELL_PARAMETERS" && $dicName=="QM3H") $valToShow=0; + else if ($dicType=="WELL_ELECTRICAL_PARAMETERS" && $dicName=="POWER_EKW") $valToShow=0; + else if ($dicType=="WELL_ELECTRICAL_PARAMETERS" && $dicName=="ELECTRIC_CURRENT") $valToShow=0; + else if ($dicType=="WELL_ELECTRICAL_PARAMETERS" && $dicName=="COSINUS_FI") $valToShow=0; + // ukrywa informacje o zwierciadle dynamicznym + else if ($dicType=="WELL_PARAMETERS" && $dicName=="HDM") $valToShow="&nbsp;"; + } + else + { + // jesli pompa pracuje to ukrywa informacje o zwierciadle statycznym + if ($dicType=="WELL_PARAMETERS" && $dicName=="HSTM") $valToShow="&nbsp;"; + if ($dicType=="WELL_PARAMETERS" && $dicName=="QM3H") $valToShow = round($valToShow/60,3); + + } + + + $val = "<a href=?pg=$pgName&dev=$devId&dic=$dicID style='text-decoration: none;'>".str_replace('.',',',$valToShow)."</a>"; + return $val; +} + +function getLinkToShowHistoricalData_01($dicID,$dicType,$dicName,$devId,$pgName) +{ + $val=""; + $val = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=".$dicID." and DRD_DRS_ID=".$devId.")","DRD_VALUE"); + + if (strlen($val)>0) $valToShow = round($val,2); + else $valToShow = $val; + // sprawdza, jeĹ›li pompa jest wyłączona to ustawia ZERA na wskazaniach + if (getPumpStatusWork($devId)==0) + { + if ($dicType=="WELL_PARAMETERS" && $dicName=="QM3H") $valToShow=0; + else if ($dicType=="WELL_ELECTRICAL_PARAMETERS" && $dicName=="POWER_EKW") $valToShow=0; + else if ($dicType=="WELL_ELECTRICAL_PARAMETERS" && $dicName=="ELECTRIC_CURRENT") $valToShow=0; + else if ($dicType=="WELL_ELECTRICAL_PARAMETERS" && $dicName=="COSINUS_FI") $valToShow=0; + // ukrywa informacje o zwierciadle dynamicznym + else if ($dicType=="WELL_PARAMETERS" && $dicName=="HDM") $valToShow="&nbsp;"; + } + else + { + // jesli pompa pracuje to ukrywa informacje o zwierciadle statycznym + if ($dicType=="WELL_PARAMETERS" && $dicName=="HSTM") $valToShow="&nbsp;"; + if ($dicType=="WELL_PARAMETERS" && $dicName=="QM3H") $valToShow = round($valToShow/60,3); + + } + + + $val = "<a href=?pg=$pgName&dev=$devId&dic=$dicID style='text-decoration: none;'>".str_replace('.',',',$valToShow)."</a>"; + return $val; +} + + + +// oblicza różnice rzędnych - ścięice +// ========================================================== // +function getSciecie($inDevID) +{ + unset($outParam); unset($rzP); unset($rzA); + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=".$inDevID); + $rzP = getFullFloatValue($tmpArray[0]['OHC_RZEDNA_TEREN']); + $rzA = getFullFloatValue($tmpArray[0]['OHC_RZEDNA_TERENU_ACT']); + unset($tmpArray); + + $outParam = (float) ($rzP - $rzA); + //if ($outParam<0) $outParam=0; + + return $outParam; +} +// ========================================================== // + +// oblicza aktualną głębokość względem karty otworu +// ========================================================== // +function getGlebokoscAct($inDevID) +{ + unset($outParam); unset($rzP); unset($rzA); unset($glO); + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=".$inDevID); + $glO = getFullFloatValue($tmpArray[0]['OHC_GLEB_OSTAT']); + $rzP = getFullFloatValue($tmpArray[0]['OHC_RZEDNA_TEREN']); + $rzA = getFullFloatValue($tmpArray[0]['OHC_RZEDNA_TERENU_ACT']); + unset($tmpArray); + + $outParam = (float) ($glO - ($rzP - $rzA)); + //if ($outParam<0) $outParam=0; + + return $outParam; +} +// ========================================================== // + +// Zapewnia istnienie karty otworu (nagłówka) dla danego obiektu. +// Studnie/piezometry zaciągnięte z SYNDIS-a nie mają wiersza w +// seg_object_hole_cards, przez co edycja karty otworu (site310) nie +// zapisywała danych - UPDATE ... WHERE OHC_DRS_ID=dev trafiał w 0 wierszy. +// Funkcja tworzy brakujący nagłówek oraz bazowy wpis historii rzędnej, +// pobierając nazwę / UJ / oddział z definicji studni lub piezometru. +// Jest idempotentna (gdy karta już istnieje - nie robi nic). +// ========================================================== // +function ensureHoleCardExists($devID) +{ + $devID = (int) $devID; + if ($devID <= 0) return false; + + // karta już istnieje - nic nie rób + if (sqlValue("select count(1) from seg_object_hole_cards where OHC_DRS_ID=".$devID) > 0) + return true; + + // ustal typ obiektu i pobierz nazwę / UJ / oddział + unset($info); + $info = sqlGetResAsArray("select WLL_NAME OBJ_NAME,WLL_BARIERA OBJ_UJ,DRS_DEPARTMENT OBJ_PLC from seg_dev_resources join seg_wells on DRS_DEV_ID=WLL_ID where DRS_DEV_TYPE=12 and DRS_ID=".$devID); + + // gdy to nie studnia - sprawdź czy piezometr + if (empty($info)) + $info = sqlGetResAsArray("select SRP_NAME OBJ_NAME,SRP_BARIERA OBJ_UJ,DRS_DEPARTMENT OBJ_PLC from seg_dev_resources join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID where DRS_DEV_TYPE=601 and DRS_ID=".$devID); + + // brak studni/piezometru o tym DRS_ID - nie tworzymy karty + if (empty($info)) return false; + + $objName = mysql_real_escape_string($info[0]['OBJ_NAME']); + $objUj = mysql_real_escape_string($info[0]['OBJ_UJ']); + $objPlc = mysql_real_escape_string($info[0]['OBJ_PLC']); + + // nagłówek karty otworu - pozostałe pola uzupełniane w zakładce 1 + mysql_query("INSERT INTO seg_object_hole_cards SET OHC_DRS_ID=".$devID.",OHC_NAME='".$objName."',OHC_UJ='".$objUj."',OHC_PLC='".$objPlc."'"); + + // bazowy wpis historii rzędnej - wymagany m.in. przez dodawanie pozycji w zakładce 6 + if (sqlValue("select count(1) from seg_object_hole_cards_his where OHH_DRS_ID=".$devID) == 0) + mysql_query("INSERT INTO seg_object_hole_cards_his SET OHH_DRS_ID=".$devID.",OHH_NAME='".$objName."',OHH_UJ='".$objUj."',OHH_PLC='".$objPlc."'"); + + return true; +} +// ========================================================== // + + +// oblicza czas pracy agregatu dla aktualnego agregatu +function getWorkingTime4ActAggregate($devID) +{ + unset($res); $pupSTAT="OFF"; $fullTIME=0; + + unset($tmpArray); + $tmoArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged where WLE_ID=(select max(WLE_ID) from seg_wells_exchanged,seg_dev_resources where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLE_WLL_ID and DRS_ID=".$devID.")"); + + if (strlen($tmoArray[0]['WLE_DATE_FROM'])>8 && strlen($tmoArray[0]['WLE_DATE_TO'])>8) + $query = "select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_DATE>='".$tmoArray[0]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$tmoArray[0]['WLE_DATE_TO']."' and DRD_DRS_ID=".$devID." order by DRD_ID"; + elseif (strlen($tmoArray[0]['WLE_DATE_FROM'])>8 && strlen($tmoArray[0]['WLE_DATE_TO'])<8) + $query = "select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_DATE>='".$tmoArray[0]['WLE_DATE_FROM']."' and DRD_DRS_ID=".$devID." order by DRD_ID"; + + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $reV = $r["DRD_VALUE"]; + $reD = $r["DRD_AUDIT_DATE"]; + + if ($reV!=$pupSTAT && $reV=='ON') + { + $startTIME = strtotime($reD); + $pupSTAT=$reV; + } + + else if ($reV!=$pupSTAT && $reV=='OFF') + { + $fullTIME += strtotime($reD)-$startTIME; + $pupSTAT=$reV; + } + } + if ($pupSTAT=='ON') $fullTIME += strtotime(date('Y-m-d H:i:s'))-$startTIME; + + $hours = intval($fullTIME/(60*60)); + if ($hours>0) + { + $fullTIME = $fullTIME - ($hours*60*60); + $res .= $hours ." h."; + } + + $min = intval($fullTIME/60); + if ($min>0) $res .= " ".$min ." min."; + + return $res; +} + + + +// oblicza czas pracy agregatu dla aktualnego agregatu +function getWorkingTime4AggDate($devID,$dateTime) +{ + unset($res); $pupSTAT="OFF"; $fullTIME=0; + + unset($tmpArray); + $tmoArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged where WLE_ID=(select max(WLE_ID) from seg_wells_exchanged,seg_dev_resources where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLE_WLL_ID and DRS_ID=".$devID.")"); + + if (strlen($tmoArray[0]['WLE_DATE_FROM'])>8 && strlen($tmoArray[0]['WLE_DATE_TO'])>8) + $query = "select DRD_VALUE,DRD_AUDIT_DATE from (select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$tmoArray[0]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$tmoArray[0]['WLE_DATE_TO']."' union select DRD_VALUE,DRD_AUDIT_DATE from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$tmoArray[0]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$tmoArray[0]['WLE_DATE_TO']."') tb order by DRD_AUDIT_DATE"; + elseif (strlen($tmoArray[0]['WLE_DATE_FROM'])>8 && strlen($tmoArray[0]['WLE_DATE_TO'])<8) + $query = "select DRD_VALUE,DRD_AUDIT_DATE from (select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$tmoArray[0]['WLE_DATE_FROM']."' union select DRD_VALUE,DRD_AUDIT_DATE from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$tmoArray[0]['WLE_DATE_FROM']."') tb order by DRD_AUDIT_DATE"; + + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $reV = $r["DRD_VALUE"]; + $reD = $r["DRD_AUDIT_DATE"]; + + if ($reV!=$pupSTAT && $reV=='ON') + { + $startTIME = strtotime($reD); + $pupSTAT=$reV; + } + + else if ($reV!=$pupSTAT && $reV=='OFF') + { + $fullTIME += strtotime($reD)-$startTIME; + $pupSTAT=$reV; + } + } + if ($pupSTAT=='ON') $fullTIME += strtotime(date('Y-m-d H:i:s'))-$startTIME; + + $hours = intval($fullTIME/(60*60)); + if ($hours>0) + { + $fullTIME = $fullTIME - ($hours*60*60); + $res .= $hours ." h."; + } + + $min = intval($fullTIME/60); + if ($min>0) $res .= " ".$min ." min."; + + return $res; +} + + + +// ========================================================== // +function getWellWorkingTime($devID) +{ + unset($res); $pupSTAT="OFF"; $fullTIME=0; + //$wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE from (select DRD_DRS_ID,DRD_VALUE,DRD_AUDIT_DATE,DRD_RESOURCES_DETAIL from seg_dev_resources_det union select DRD_DRS_ID,DRD_VALUE,DRD_AUDIT_DATE,DRD_RESOURCES_DETAIL from seg_dev_resources_det_his) vTb where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_STATUSES' and DIC_NAME='ON_OFF') and DRD_VALUE in ('ON','OFF') and DRD_DRS_ID=$devID order by DRD_AUDIT_DATE"); + $wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE from viw_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID." order by DRD_AUDIT_DATE"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $reV = $r["DRD_VALUE"]; + $reD = $r["DRD_AUDIT_DATE"]; + + if ($reV!=$pupSTAT && $reV=='ON') + { + $startTIME = strtotime($reD); + $pupSTAT=$reV; + } + + else if ($reV!=$pupSTAT && $reV=='OFF') + { + $fullTIME += strtotime($reD)-$startTIME; + $pupSTAT=$reV; + } + } + if ($pupSTAT=='ON') $fullTIME += strtotime(date('Y-m-d H:i:s'))-$startTIME; + + /* + $week = intval($fullTIME/(7*24*60*60)); + if ($week>0) { $res .= "<b>".$week ."</b>tyg."; $fullTIME %= (7*24*60*60); } + + $day = intval($fullTIME/(24*60*60)); + if ($day>0) { $res .= " <b>".$day ."</b>dn."; $fullTIME %= (24*60*60); } + + $hours = intval($fullTIME/(60*60)); + if ($hours>0) { $res .= " <b>".$hours ."</b>godz."; $fullTIME %= (60*60); } + */ + $hours = intval($fullTIME/(60*60)); + if ($hours>0) + { + $fullTIME = $fullTIME - ($hours*60*60); + $res .= $hours ." h."; + } + + $min = intval($fullTIME/60); + if ($min>0) $res .= " ".$min ." min."; + + return $res; +} + +//aktualizauje czas pracy agregatu pompowego +// ========================================================== // +function updateWellTimeWorking($devID) +{ + $dicID = sqlStringValue("select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_ELECTRICAL_PARAMETERS' and DIC_NAME='WORKING_TIME'","DIC_ID"); + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=$dicID and DRD_DRS_ID=$devID"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$devID,DRD_RESOURCES_DETAIL=$dicID,DRD_VALUE='".getWellWorkingTime($devID)."',DRD_AUDIT_USR='SYSTEM',DRD_AUDIT_DATE=now()"); +} + +// ========================================================== // +function generateReservoir($devID, $fName) +{ + + $imageTLO=imagecreatefrompng("./foto/reservoir.png"); + + $image=imagecreatetruecolor(350,400); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + + $red = imagecolorallocate($image, 255, 0, 0); + $yellow = imagecolorallocate($image, 255, 201, 14); + $blue = imagecolorallocate($image, 0, 0, 255); + $white = imagecolorallocate($image, 255, 255, 255); + $black = imagecolorallocate($image, 0, 0, 0); + + $wRed = imagecolorallocatealpha($image, 255, 0, 0,20); + $wYellow = imagecolorallocatealpha($image, 255, 201, 14,20); + $wBlue = imagecolorallocatealpha($image, 0, 0, 255,30); + + + imagecopy($image,$imageTLO,42,20,0,0,imagesx($imageTLO),imagesy($imageTLO)); + + $dolZbiornika = 361; + $poziomWody = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_PARAMETERS','WATER_LEVEL',$devID); + + $wys = getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','HEIGHT',$devID); + $maxK = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_ACCEPTABLE',$devID); + $maxO = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_WARNING',$devID); + $minO = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_WARNING',$devID); + $minK = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_ACCEPTABLE',$devID); + + + $wsp = 320/$wys; + + // rysuje wodÄ™ + imagefilledellipse($image, 150, 360, 210, 35, $blue); + imagefilledellipse($image, 150, $dolZbiornika-($wsp*$poziomWody), 210, 35, $blue); + imageellipse($image, 150, $dolZbiornika-($wsp*$poziomWody), 210, 35, $blue); + imagefilledrectangle($image, 45, $dolZbiornika-($wsp*$poziomWody), 255, 360, $blue); + + imageellipse($image, 150, $dolZbiornika-($wsp*$poziomWody), 210, 35, $black); + imagestring($image, 5, 130, $dolZbiornika-($wsp*$poziomWody)-10, str_replace(".",",",$poziomWody)."[m]", $white); + + + // maxKrytyczne + $style = array($red, $red, $red, $white, $black); + imagesetstyle($image, $style); + + imagerectangle($image, 30, $dolZbiornika-($wsp*$maxK), 42, $dolZbiornika-($wsp*$maxK)-1, $red); + imagerectangle($image, 258, $dolZbiornika-($wsp*$maxK), 280, $dolZbiornika-($wsp*$maxK)-1, $red); + imageellipse($image, 150, $dolZbiornika-($wsp*$maxK), 210, 35, IMG_COLOR_STYLED); + imagestring($image, 3, 285, $dolZbiornika-($wsp*$maxK)-8, str_replace(".",",",$maxK)."[m]", $black); + + // maxOstrzegawcze + $style = array($yellow, $yellow, $yellow, $white, $black); + imagesetstyle($image, $style); + + imagerectangle($image, 30, $dolZbiornika-($wsp*$maxO), 42, $dolZbiornika-($wsp*$maxO)-1, $yellow); + imagerectangle($image, 258, $dolZbiornika-($wsp*$maxO), 280, $dolZbiornika-($wsp*$maxO)-1, $yellow); + imageellipse($image, 150, $dolZbiornika-($wsp*$maxO), 210, 35, IMG_COLOR_STYLED); + imagestring($image, 3, 285, $dolZbiornika-($wsp*$maxO)-8, str_replace(".",",",$maxO)."[m]", $black); + + // minOstrzegawcze + imagerectangle($image, 30, $dolZbiornika-($wsp*$minO), 42, $dolZbiornika-($wsp*$minO)-1, $yellow); + imagerectangle($image, 258, $dolZbiornika-($wsp*$minO), 280, $dolZbiornika-($wsp*$minO)-1, $yellow); + imageellipse($image, 150, $dolZbiornika-($wsp*$minO), 210, 35, IMG_COLOR_STYLED); + imagestring($image, 3, 285, $dolZbiornika-($wsp*$minO)-8, str_replace(".",",",$minO)."[m]", $black); + + // minKrytyczne + $style = array($red, $red, $red, $white, $black); + imagesetstyle($image, $style); + + imagerectangle($image, 30, $dolZbiornika-($wsp*$minK), 42, $dolZbiornika-($wsp*$minK)-1, $red); + imagerectangle($image, 258, $dolZbiornika-($wsp*$minK), 280, $dolZbiornika-($wsp*$minK)-1, $red); + imageellipse($image, 150, $dolZbiornika-($wsp*$minK), 210, 35, IMG_COLOR_STYLED); + imagestring($image, 3, 285, $dolZbiornika-($wsp*$minK)-8, str_replace(".",",",$minK)."[m]", $black); + + + + /* Rysuje przerywanÄ… linie, 5 red pixels, 5 biaĹ‚yc pixels */ + $style = array($black, $black, $black, $black, $black, $white, $white, $white, $white, $white); + imagesetstyle($image, $style); + + imageline($image, 15, $dolZbiornika, 42, $dolZbiornika, $black); + imageline($image, 15, $dolZbiornika-320, 42, $dolZbiornika-320, $black); + imagestringup ($image , 3, 0 , 200 , str_replace(".",",",$wys)."[m]" , $black ); + + + imageline($image, 15, $dolZbiornika-315, 15, $dolZbiornika, IMG_COLOR_STYLED); + + + imagepng($image,$fName); +} +// ========================================================== // + + + +// ========================================================== // +function generatePiezometer($devID, $fName) +{ + + $imageTLO=imagecreatefrompng("./foto/piezometr.png"); + + $image=imagecreatetruecolor(400,400); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + + $red = imagecolorallocate($image, 255, 0, 0); + $yellow = imagecolorallocate($image, 255, 201, 14); + $blue = imagecolorallocate($image, 0, 0, 255); + $white = imagecolorallocate($image, 255, 255, 255); + $black = imagecolorallocate($image, 0, 0, 0); + + $wRed = imagecolorallocatealpha($image, 255, 0, 0,20); + $wYellow = imagecolorallocatealpha($image, 255, 201, 14,20); + $wBlue = imagecolorallocatealpha($image, 0, 0, 255,30); + + + imagecopy($image,$imageTLO,15,19,0,0,imagesx($imageTLO),imagesy($imageTLO)); + + $dolZbiornika = 351; + $goraZbiornika=29; + //$poziomWody = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_PARAMETERS','WATER_LEVEL',$devID); + $poziomWody = getLastValueFromDevResourceDetail('WELL_PARAMETERS','HSTM',$devID); + + //$wys = getLastValueFromDevResourceDetail('WELL_TECHNICAL_PARAMETERS','LS',$devID); + $wys = getGlebokoscAct($devID); + + $valRep = getLastValueFromDevResourceDetail('PIEZOMETER_WATER_LEVEL','REPAIR_LEVEL',$devID); + //$valFlUp = getLastValueFromDevResourceDetail('PIEZOMETER_WATER_LEVEL','FILTER_UP',$devID); + //$valFlDown = getLastValueFromDevResourceDetail('PIEZOMETER_WATER_LEVEL','FILTER_DOWN',$devID); + + //$valFl = sqlGetResAsArray("select CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$devID); + //$valFl = sqlGetResAsArray("select CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$devID." and CLF_TO=(select max(CLF_TO) from seg_object_column_filters where CLF_DRS_ID=".$devID.") limit 1"); + $valFl = sqlGetResAsArray("select CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$devID." and CLF_TO=(select max(CLF_TO) from seg_object_column_filters where CLF_DRS_ID=".$devID.") limit 1"); + + + + + $valFlUp = getFloatValue($valFl[0]['CLF_FROM'])-getSciecie($devID); + $valFlDown = getFloatValue($valFl[0]['CLF_TO'])-getSciecie($devID); + + $valSonda = getLastValueFromDevResourceDetail('WELL_PARAMETERS','LPM',$devID); + + + $wsp = 323/$wys; + + // rysuje wodÄ™ + imagefilledrectangle($image, 172, 357, 228, 357, $blue); + imagefilledrectangle($image, 171, 356, 229, 356, $blue); + imagefilledrectangle($image, 170, 355, 230, 355, $blue); + imagefilledrectangle($image, 169, 354, 231, 354, $blue); + imagefilledrectangle($image, 168, 353, 232, 353, $blue); + imagefilledrectangle($image, 167, 352, 233, 352, $blue); + imagefilledrectangle($image, 166, 351, 234, 351, $blue); + + imagefilledrectangle($image, 166, $dolZbiornika, 234, $goraZbiornika+($wsp*$poziomWody), $blue); + + + // $valRep + if ($valRep>0) + { + $style = array($red, $red, $red, $white, $black); + imagesetstyle($image, $style); + imagerectangle($image, 145, $goraZbiornika+($wsp*$valRep), 165, $goraZbiornika+($wsp*$valRep)-1, $red); + imageline($image, 166, $goraZbiornika+($wsp*$valRep), 234, $goraZbiornika+($wsp*$valRep), IMG_COLOR_STYLED); + imagerectangle($image, 235, $goraZbiornika+($wsp*$valRep), 257, $goraZbiornika+($wsp*$valRep)-1, $red); + imagestring($image, 3, 265, $goraZbiornika+($wsp*$valRep)-8, str_replace(".",",",$valRep)."[m]", $black); + } + + + + // $valFlUp + if ($valFlUp>0) + { + $style = array($yellow, $yellow, $yellow, $white, $black); + imagesetstyle($image, $style); + imagerectangle($image, 145, $goraZbiornika + ($wsp * $valFlUp), 165, $goraZbiornika + ($wsp * $valFlUp) - 1, $yellow); + imageline($image, 166, $goraZbiornika + ($wsp * $valFlUp), 234, $goraZbiornika + ($wsp * $valFlUp), IMG_COLOR_STYLED); + imagerectangle($image, 235, $goraZbiornika + ($wsp * $valFlUp), 257, $goraZbiornika + ($wsp * $valFlUp) - 1, $yellow); + imagestring($image, 3, 265, $goraZbiornika + ($wsp * $valFlUp) - 8, str_replace(".", ",", $valFlUp) . "[m]", $black); + } + + // $valFlDown + if ($valFlDown>0) + { + $style = array($yellow, $yellow, $yellow, $white, $black); + imagesetstyle($image, $style); + imagerectangle($image, 145, $goraZbiornika + ($wsp * $valFlDown), 165, $goraZbiornika + ($wsp * $valFlDown) - 1, $yellow); + imageline($image, 166, $goraZbiornika + ($wsp * $valFlDown), 234, $goraZbiornika + ($wsp * $valFlDown), IMG_COLOR_STYLED); + imagerectangle($image, 235, $goraZbiornika + ($wsp * $valFlDown), 257, $goraZbiornika + ($wsp * $valFlDown) - 1, $yellow); + imagestring($image, 3, 265, $goraZbiornika + ($wsp * $valFlDown) - 8, str_replace(".", ",", $valFlDown) . "[m]", $black); + } + + if ($valFlUp>0 && $valFlDown>0) + { + imagefilledrectangle($image, 150, $goraZbiornika + ($wsp * $valFlUp), 158, $goraZbiornika + ($wsp * $valFlDown) - 1, $yellow); + imagefilledrectangle($image, 242, $goraZbiornika + ($wsp * $valFlUp), 250, $goraZbiornika + ($wsp * $valFlDown) - 1, $yellow); + } + + + //sonda + if ($valSonda>0) + { + imagefilledellipse($image,202,$goraZbiornika + ($wsp * $valSonda),6,6,$white); + + + } + + + + /* + // Rysuje przerywanÄ… linie, 5 red pixels, 5 biaĹ‚yc pixels + $style = array($black, $black, $black, $black, $black, $white, $white, $white, $white, $white); + imagesetstyle($image, $style); + + + imageline($image, 15, $dolZbiornika, 42, $dolZbiornika, $black); + imagestringup ($image , 3, 0 , 200 , $wys."[m]" , $black ); + + + imageline($image, 15, $dolZbiornika-315, 15, $dolZbiornika, IMG_COLOR_STYLED); + */ + //napis - poziom wody + imagestring($image, 3, 175, $goraZbiornika+($wsp*$poziomWody)-15, str_replace(".",",",$poziomWody)."[m]", $black); + + $style = array($black, $black, $black, $black, $black, $white, $white, $white, $white, $white); + imagesetstyle($image, $style); + imageline($image, 134, $dolZbiornika-323, 134, $dolZbiornika, IMG_COLOR_STYLED); + + imageline($image, 134, $dolZbiornika, 164, $dolZbiornika, $black); + imagestringup ($image , 3, 118 , 200 , str_replace(".",",",$wys)."[m]" , $black ); + + imagepng($image,$fName); +} +// ========================================================== // + + +// ============================================================================================ // +// funkcja generuje tabelÄ™ z historycznymi danymi oraz plik XLSX odwzorowujÄ…cy te dane. +function getHistoryData($devID, $dicID) +{ + +// echo"<div id='loader-wrapper'><div id='loader'></div></div>"; + + if ($_GET['sh']=="full" && !empty($_POST['inDateFrom'])) + { + if (empty($_POST['inDateFrom'])) $_POST['inDateFrom']=date('Y-m')."-01"; + if (empty($_POST['inDateTo'])) $_POST['inDateTo']=date('Y-m-d'); + + //$sqlQuery = "select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_RESOURCES_DETAIL=$dicID order by DRD_AUDIT_DATE desc limit 100"; + //$sqlQuery = "select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE from (select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE,DRD_DRS_ID,DRD_RESOURCES_DETAIL from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_RESOURCES_DETAIL=$dicID union select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE,DRD_DRS_ID,DRD_RESOURCES_DETAIL from seg_dev_resources_det_his where DRD_DRS_ID=$devID and DRD_RESOURCES_DETAIL=$dicID ) vtb order by DRD_AUDIT_DATE desc"; + //$sqlQuery = "select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE from (select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE,DRD_DRS_ID,DRD_RESOURCES_DETAIL from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_RESOURCES_DETAIL=$dicID and DRD_AUDIT_DATE>='".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<='".$_POST['inDateTo']." 23:59:59' union select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE,DRD_DRS_ID,DRD_RESOURCES_DETAIL from seg_dev_resources_det_his where DRD_DRS_ID=$devID and DRD_RESOURCES_DETAIL=$dicID and DRD_AUDIT_DATE>='".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<='".$_POST['inDateTo']." 23:59:59') vtb order by DRD_AUDIT_DATE desc"; + $sqlQuery = "select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE from viw_dev_resources_det where DRD_DRS_ID=".$devID." and DRD_RESOURCES_DETAIL=".$dicID." and DRD_AUDIT_DATE>='".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<='".$_POST['inDateTo']." 23:59:59' order by DRD_AUDIT_DATE desc"; + } + else + $sqlQuery = "select DRD_VALUE,DRD_AUDIT_USR,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_RESOURCES_DETAIL=$dicID order by DRD_AUDIT_DATE desc limit 20"; + + $allRec = sqlValue("select count(1) from seg_dev_resources_det where DRD_DRS_ID=$devID and DRD_RESOURCES_DETAIL=$dicID"); + + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); + require_once dirname(__FILE__) . '/PHPExcel.php'; + include"./language/".$_SESSION['lang'].".php"; + $fieldName = setDictionaryFieldLanguage($_SESSION['lang']); + $dataName = sqlStringValue("select $fieldName from sys_dictionaries where DIC_ID=$dicID",$fieldName); + $objPHPExcel = new PHPExcel(); + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_HisData_".$devID."_".$dicID.".xlsx"; + + +// Add some data + $objPHPExcel->setActiveSheetIndex(0) + ->setCellValue('A1', '') + ->setCellValue('B1', $lab_HistoricalData_002) + ->setCellValue('C1', $lab_HistoricalData_003) + ->setCellValue('D1', $lab_HistoricalData_004); + + +echo" +<div class='tag100'> + <div class='head_tag' style='height: 30px;'> + <div style='display:inline-block;vertical-align: top; margin-left: 5px; padding: 5px;width: 48%; color: #ffffff;font-size: 14px;font-weight: bold;'> + $lab_HistoricalData_001 - $dataName + </div> + <div style='display:inline-block;vertical-align: top; margin-left: 5px; padding: 5px;width: 48%; text-align: right;'> + <a href='$fileName' target='_blank' title='$lab_HistoricalData_005'><img src='./images/excel_ico.png' border='0'></a> + </div> + </div> + + <div class='tag'> +"; + + if ($allRec>18) + { + echo"<table WIDTH='100%'> + <tr><td>&nbsp;</td></tr> + <tr> + <td> + <form action='?pg=site401inf&dev=".$devID."&dic=".$dicID."&sh=full' method='post'> + <table> + <tr> + <td>WyĹ›wietl dane za okres od:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDateFrom' value='".$_POST['inDateFrom']."' SIZE='10'></td> + <td style='width: 15px;'></td> + <td>do:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDateTo' value='".$_POST['inDateTo']."' SIZE='10'></td> + <td style='width: 20px;'></td> + <td><input type='submit' name='sub_search' value='PokaĹĽ' style='width: 100px;' onclick=".chr(34)."makeRequest('?pg=site401inf')".chr(34)."></td> + </tr> + </table> + </form> + </td> + </tr> + <tr><td>&nbsp;</td></tr> + </table>"; + + } + +echo" + + <table WIDTH='100%' class='tag'> + <TR> + <TD class='label'>&nbsp;</TD> + <TD class='label'>$lab_HistoricalData_002 </TD> + <TD class='label'>$lab_HistoricalData_003 </TD> + <TD class='label'>$lab_HistoricalData_004 </TD> + </TR> +"; + $lp=1; + $wynik = mysql_query($sqlQuery); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r['DRD_VALUE']; if ($dicID==200) $sql_1 = $sql_1/60; $sql_1=round($sql_1,2); $sql_1 = str_replace('.',',', $sql_1); + $sql_2 = $r['DRD_AUDIT_USR']; + $sql_3 = $r['DRD_AUDIT_DATE']; + + echo" + <TR> + <TD class='field_center'>$lp.</TD> + <TD class='field_right'>$sql_1</TD> + <TD class='field_center'>$sql_2</TD> + <TD class='field_center'>$sql_3</TD> + </TR> + "; + $aRowNum = "A".($lp+1); + $bRowNum = "B".($lp+1); + $cRowNum = "C".($lp+1); + $dRowNum = "D".($lp+1); + + $objPHPExcel->setActiveSheetIndex(0) + ->setCellValue($aRowNum, $lp) + ->setCellValue($bRowNum, $sql_1) + ->setCellValue( $cRowNum, $sql_2) + ->setCellValue($dRowNum, $sql_3); + $lp++; + } + + echo" + </table> + </div> +</div> +"; + +// Rename worksheet + $dataName = str_replace('<sub>','',$dataName); $dataName = str_replace('</sub>','',$dataName); $dataName = str_replace('<sup>','',$dataName); $dataName = str_replace('</sup>','',$dataName); + $dataName = str_replace('[','',$dataName); $dataName = str_replace(']','',$dataName); $dataName = str_replace('/','',$dataName); $dataName = str_replace(',','',$dataName); + $dataName = str_replace('.','',$dataName); + $objPHPExcel->getActiveSheet()->setTitle($lab_HistoricalData_001); + $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save($fileName); + + + + + // alert na zakres dat + if ($_GET['sh']=="full" && empty($_POST['inDateFrom'])) + echo('<script>sweetAlert("Błąd formularza", "Nie podano zakresu dat!\n Wybierz zakres dat i spróbuj ponownie.", "warning");</script>'); + //echo"<script>alert('Nie podano zakresu dat!');</script>"; + + if (!empty($_POST['inDateFrom']) || !empty($_POST['inDateTo'])) + { + if (str_replace('-','',$_POST['inDateFrom'])>str_replace('-','',$_POST['inDateTo'])) + echo('<script>sweetAlert("Błąd formularza", "Data początkowa nie może być większa od daty końcowej!", "error");</script>'); + } + +} +// ============================================================================================ // + +function setImageRSSIgnalValue($image,$rssi,$x,$y) +{ + $grey = imagecolorallocate($image, 120, 120, 120); + $red = imagecolorallocate($image, 255, 0, 50); + $blue = imagecolorallocate($image, 0, 0, 255); + + + if (25 < $rssi) + { + imagefilledrectangle($image, $x, $y, $x+2, $y+2, $blue); + imagefilledrectangle($image, $x+4, $y-2, $x+6, $y+2, $blue); + imagefilledrectangle($image, $x+8, $y-4, $x+10, $y+2, $blue); + imagefilledrectangle($image, $x+12, $y-6, $x+14, $y+2, $blue); + imagefilledrectangle($image, $x+16, $y-8, $x+18, $y+2, $blue); + } + else if (19 < $rssi && $rssi <= 25) + { + imagefilledrectangle($image, $x, $y, $x+2, $y+2, $blue); + imagefilledrectangle($image, $x+4, $y-2, $x+6, $y+2, $blue); + imagefilledrectangle($image, $x+8, $y-4, $x+10, $y+2, $blue); + imagefilledrectangle($image, $x+12, $y-6, $x+14, $y+2, $blue); + imagefilledrectangle($image, $x+16, $y-8, $x+18, $y+2, $grey); + } + else if (13 < $rssi && $rssi<= 19) + { + imagefilledrectangle($image, $x, $y, $x+2, $y+2, $blue); + imagefilledrectangle($image, $x+4, $y-2, $x+6, $y+2, $blue); + imagefilledrectangle($image, $x+8, $y-4, $x+10, $y+2, $blue); + imagefilledrectangle($image, $x+12, $y-6, $x+14, $y+2, $grey); + imagefilledrectangle($image, $x+16, $y-8, $x+18, $y+2, $grey); + } + else if (7 < $rssi && $rssi<= 13) + { + imagefilledrectangle($image, $x, $y, $x+2, $y+2, $blue); + imagefilledrectangle($image, $x+4, $y-2, $x+6, $y+2, $blue); + imagefilledrectangle($image, $x+8, $y-4, $x+10, $y+2, $grey); + imagefilledrectangle($image, $x+12, $y-6, $x+14, $y+2, $grey); + imagefilledrectangle($image, $x+16, $y-8, $x+18, $y+2, $grey); + } + else if (1 < $rssi && $rssi<= 7) + { + imagefilledrectangle($image, $x, $y, $x+2, $y+2, $blue); + imagefilledrectangle($image, $x+4, $y-2, $x+6, $y+2, $grey); + imagefilledrectangle($image, $x+8, $y-4, $x+10, $y+2, $grey); + imagefilledrectangle($image, $x+12, $y-6, $x+14, $y+2, $grey); + imagefilledrectangle($image, $x+16, $y-8, $x+18, $y+2, $grey); + } + else + { + imagefilledrectangle($image, $x, $y, $x+2, $y+2, $grey); + imagefilledrectangle($image, $x+4, $y-2, $x+6, $y+2, $grey); + imagefilledrectangle($image, $x+8, $y-4, $x+10, $y+2, $grey); + imagefilledrectangle($image, $x+12, $y-6, $x+14, $y+2, $grey); + imagefilledrectangle($image, $x+16, $y-8, $x+18, $y+2, $grey); + imageString($image,5,$x-2,$y-14,"*",$red); + } +} + +// ============================================================================================ // + +function getLastRSSIvalue($devID) +{ + $res=0; + $res = sqlStringValue("select RSS_VALUE from seg_rss_signal_values where RSS_AUDIT_CD=(select max(RSS_AUDIT_CD) from seg_rss_signal_values where RSS_DRS_ID=$devID)","RSS_VALUE"); + return $res; +} + + + +// ============================================================================= // +function setReservoirOnlyDate($devID) +{ + $mobNo = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='MOBILE' and SSP_PARAM1=(select SSP_PARAM1 from sys_setup_parameters where SSP_NAME='DEVICE' and SSP_VALUE='".$devID."')", "SSP_VALUE"); + $min = dechex(date('i')); if (strlen($min)<2) $min="0".$min; + $godz = dechex(date('H')); if (strlen($godz)<2) $godz="0".$godz; + $dzen = dechex(date('j')); if (strlen($dzen)<2) $dzen="0".$dzen; + $step_01 = strtoupper($min.$godz.$dzen."FFFF00"); + if (strlen($mobNo)>8) + mysql_query("INSERT INTO seg_ap_call_programming SET APC_ID=0,APC_PHONE_NO='".$mobNo."',APC_STEP_01='".$step_01."',APC_STATUS='0',APC_AUDIT_CU='SYSTEM',APC_AUDIT_CD=now()"); +} +// ============================================================================= // +function setReservoirParameters($devID) +{ + $mobNo = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='MOBILE' and SSP_PARAM1=(select SSP_PARAM1 from sys_setup_parameters where SSP_NAME='DEVICE' and SSP_VALUE='".$devID."')", "SSP_VALUE"); + $refTime = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='REFRESH' and SSP_PARAM1=(select SSP_PARAM1 from sys_setup_parameters where SSP_NAME='DEVICE' and SSP_VALUE='".$devID."')", "SSP_VALUE"); + if ($refTime>0 && $refTime<60) + $rt2HEX = "01"; + else if ($refTime>=60 && $refTime<120) + $rt2HEX = "02"; + else if ($refTime>=120 && $refTime<480) + $rt2HEX = "04"; + else $rt2HEX = "05"; + + + $gMAX = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_ACCEPTABLE',$devID); + $gMAX2HEX = ($gMAX*100)/5; $gMAX2HEX = dechex($gMAX2HEX); if (strlen($gMAX2HEX)<2) $gMAX2HEX="0".$gMAX2HEX; + + $gWAR = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_WARNING',$devID); + $gWAR2HEX = ($gWAR*100)/5; $gWAR2HEX = dechex($gWAR2HEX); if (strlen($gWAR2HEX)<2) $gMAX2HEX="0".$gWAR2HEX; + + $dWAR = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_WARNING',$devID); + $dWAR2HEX = ($dWAR*100)/5; $dWAR2HEX = dechex($dWAR2HEX); if (strlen($dWAR2HEX)<2) $dWAR2HEX="0".$dWAR2HEX; + + $dMAX = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_ACCEPTABLE',$devID); + $dMAX2HEX = ($dMAX*100)/5; $dMAX2HEX = dechex($dMAX2HEX); if (strlen($dMAX2HEX)<2) $gMAX2HEX="0".$dMAX2HEX; + + $glZab = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','PROBE_DEPTH_INSTALLATION',$devID); + if (strrpos($glZab, ".") && $glZab>0) + { + $licz = strrpos($glZab, "."); + $glZab_j = substr($glZab,0,$licz); $glZab_j = dechex($glZab_j); if (strlen($glZab_j)<2) $glZab_j="0".$glZab_j; + $glZab_d = substr($glZab,$licz+1); $glZab_d = dechex($glZab_d); if (strlen($glZab_d)<2) $glZab_d="0".$glZab_d; + } + else + { + $glZab_j = dechex($glZab); if (strlen($glZab_j)<2) $glZab_j="0".$glZab_j; + $glZab_d = "00"; + } + + $step_01 = strtoupper("FFFFFFFFFFFF"); + $step_02 = strtoupper($gMAX2HEX.$gWAR2HEX."08FF64".$dWAR2HEX.$dMAX2HEX."FF0A".$rt2HEX.$glZab_j.$glZab_d.$glZab_j.$glZab_d); + + //08FF64!!! + + if (strlen($mobNo)>8) + mysql_query("INSERT INTO seg_ap_call_programming SET APC_ID=0,APC_PHONE_NO='".$mobNo."',APC_STEP_01='".$step_01."',APC_STEP_02='".$step_02."',APC_STATUS='0',APC_AUDIT_CU='SYSTEM',APC_AUDIT_CD=now()"); +} +// ============================================================================= // + + + +function getRYGwellParam($devID,$well_ID) +{ + $qParam = getLastValueFromDevResourceDetail('WELL_PARAMETERS','QM3H',$devID); + $resHD = getLastValueFromDevResourceDetail('WELL_PARAMETERS','HDM',$devID); + $P2param = getLastValueFromDevResourceDetail('WELL_PARAMETERS','P2M',$devID); + $PEparam = getLastValueFromDevResourceDetail('WELL_ELECTRICAL_PARAMETERS','POWER_EKW',$devID); + if (empty($PEparam)) $PEparam=1; + + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=$devID))")); + $YellowGreenParam = setYellowGreenLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=$devID))")); + + if ($resETA<=$RedYellowParam) + $eng = "R"; + else if ($RedYellowParam<$resETA && $resETA<=$YellowGreenParam) + $eng = "Y"; + else if ($resETA>$YellowGreenParam) + $eng = "G"; + + return $eng; +} + + +function getHP0forWellSelection($q,$testID) +{ + $var=0; + $res = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TYPE='H' and PUF_TST_ID=".$testID); + if($res)while ($r1 = mysql_fetch_array($res)) + { + $a = $r1["PUF_A"]; + $b = $r1["PUF_B"]; + $c = $r1["PUF_C"]; + $d = $r1["PUF_D"]; + } + return round(($a*$q*$q*$q) + ($b*$q*$q) + ($c*$q) +$d,2); +} + +function getETA0forWellSelection($q,$testID) +{ + $var=0; + $res = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TYPE='ETA' and PUF_TST_ID=".$testID); + if($res)while ($r1 = mysql_fetch_array($res)) + { + $a = $r1["PUF_A"]; + $b = $r1["PUF_B"]; + $c = $r1["PUF_C"]; + $d = $r1["PUF_D"]; + } + return round(($a*$q*$q*$q) + ($b*$q*$q) + ($c*$q) +$d,2); +} + +function getP0forWellSelection($q,$testID) +{ + $var=0; + $res = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TYPE='P' and PUF_TST_ID=".$testID); + if($res)while ($r1 = mysql_fetch_array($res)) + { + $a = $r1["PUF_A"]; + $b = $r1["PUF_B"]; + $c = $r1["PUF_C"]; + $d = $r1["PUF_D"]; + } + return round(($a*$q*$q*$q) + ($b*$q*$q) + ($c*$q) +$d,2); +} + + + +function loadSelectionArray($qQuery,$Hp,$Hp_min,$Hp_max) +{ + + $wynik = mysql_query("select PUP_ID from seg_pumps where PUP_Q_MIN<".$qQuery." and ".$qQuery."<PUP_Q_MAX"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D,PUF_TST_ID from tst_xy_formula where PUF_TYPE='H' and PUF_PUP_ID=".$r["PUP_ID"]); + if($res)while ($r1 = mysql_fetch_array($res)) + { + $a = $r1["PUF_A"]; + $b = $r1["PUF_B"]; + $c = $r1["PUF_C"]; + $d = $r1["PUF_D"]; + $tst = $r1["PUF_TST_ID"]; + + $h4search = ($a*$qQuery*$qQuery*$qQuery) + ($b*$qQuery*$qQuery) + ($c*$qQuery) +$d; + $eta = getETA0forWellSelection($qQuery,$tst); + $deltaH = abs($Hp-$h4search); + + if ($h4search>=$Hp_min && $h4search<=$Hp_max) + { + //$resT = mysql_query("select PUP_NAME,TST_PUP_SN_NO,ENG_NAME,TST_ENG_SN_NO,ENG_POWER,(select DRS_STATUS_DIC_ID from seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=TST_PUP_ID and DRS_SN_NUMBER=TST_PUP_SN_NO limit 1) PUP_STAT from tst_tests left join seg_pumps on PUP_ID=TST_PUP_ID left join seg_engines on ENG_ID=TST_ENG_ID where TST_ID=".$tst); + $resT = mysql_query("select PUP_NAME,TST_PUP_SN_NO,ENG_NAME,TST_ENG_SN_NO,ENG_POWER,(select DRS_RESOURCES_DIC_ID from seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=TST_PUP_ID and DRS_SN_NUMBER=TST_PUP_SN_NO limit 1) PUP_STAT from tst_tests left join seg_pumps on PUP_ID=TST_PUP_ID left join seg_engines on ENG_ID=TST_ENG_ID where TST_ID=".$tst); + if($resT)while ($rT = mysql_fetch_array($resT)) + { + $r_pName = $rT["PUP_NAME"]; + $r_pSN = $rT["TST_PUP_SN_NO"]; + $r_eName = $rT["ENG_NAME"]; + $r_eSN = $rT["TST_ENG_SN_NO"]; + $r_eP = $rT["ENG_POWER"]; + $r_pStat = setDicName($rT["PUP_STAT"]); + + $isQuery = null; + $isQuery = "select count(1) from rep_object_departments where WLE_PUMP_NAME='$r_pName' and WLE_PUMP_NO='$r_pSN' and WLE_ENG_NAME='$r_eName' and WLE_ENG_NO='$r_eSN'"; + + if (!empty($_SESSION['eq_stock_param3_1']) || !empty($_SESSION['eq_stock_param3_1']) || !empty($_SESSION['eq_stock_param3_1'])) $isQuery .= "and ("; + if (!empty($_SESSION['eq_stock_param3_1'])) $isQuery .= "SOD_PLC='".$_SESSION['eq_stock_param3_1']."'"; + if (!empty($_SESSION['eq_stock_param3_2'])) $isQuery .= " OR SOD_PLC='".$_SESSION['eq_stock_param3_2']."'"; + if (!empty($_SESSION['eq_stock_param3_3'])) $isQuery .= " OR SOD_PLC='".$_SESSION['eq_stock_param3_3']."'"; + if (!empty($_SESSION['eq_stock_param3_1']) || !empty($_SESSION['eq_stock_param3_1']) || !empty($_SESSION['eq_stock_param3_1'])) $isQuery .= ")"; + + if (sqlValue($isQuery)>0) + $tablica[] = array ('tst'=>$tst,'popma'=>$r_pName,'nrpompy'=>$r_pSN,'silnik'=>$r_eName,'nrsilnika'=>$r_eSN,'qsz'=>$qQuery,'hpod'=>round($h4search,2),'eta'=>$eta,'deltah'=>$deltaH,'mocsilnika'=>$r_eP,'pupStatus'=>$r_pStat); + } + + } + } + + } + + return $tablica; +} + + +function loadSelectionArray_New($qQuery,$Hp,$Hp_min,$Hp_max) +{ + + + unset($tablica); + unset($tpmArray_01); + $tpmArray_01 = sqlGetResAsArray("select PUP_ID from seg_pumps where PUP_Q_MIN<".$qQuery." and ".$qQuery."<PUP_Q_MAX"); + for($i=0; $i<count($tpmArray_01); $i++) + { + unset($tpmArray_02); + $tpmArray_02 = sqlGetResAsArray("select max(TST_ID) TST_ID, TST_PUP_SN_NO, DRS_RESOURCES_DIC_ID from tst_tests,seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=TST_PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER and DRS_RESOURCES_DIC_ID in (1,2,3,707) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and TST_PUP_ID=".$tpmArray_01[$i]['PUP_ID']." GROUP by TST_PUP_SN_NO"); + + for($i2=0; $i2<count($tpmArray_02); $i2++) + { + unset($testArray);unset($h4search);unset($eta); + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_test_details where TSD_TST_ID=".$tpmArray_02[$i2]['TST_ID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $testArray[] = array( + 'q' => getFloatValue($r["TSD_VAL_04"]), + 'h' => getFloatValue($r["TSD_VAL_08"]), + 'p' => getFloatValue($r["TSD_VAL_14"]), + 'n' => getFloatValue($r["TSD_VAL_18"]) + ); + } + + $h4search = (float) getPolynomialHp_second($testArray,$qQuery); + + if ($h4search>=$Hp_min && $h4search<=$Hp_max) + { + $eta = getPolynomialEta_second($testArray,$qQuery); + $deltaH = abs($Hp-$h4search); + + unset($tpmArray_03); + $tpmArray_03 = sqlGetResAsArray("select PUP_NAME,PUP_Q_N,PUP_H_P,TST_PUP_SN_NO,ENG_NAME,ENG_VOLTAGE,ENG_POWER,ENG_ELECTRICITY,TST_ENG_SN_NO from tst_tests left join seg_pumps on PUP_ID=TST_PUP_ID left join seg_engines on ENG_ID=TST_ENG_ID where TST_ID=".$tpmArray_02[$i2]['TST_ID']); + + + $tablica[] = array( + 'tst' => $tpmArray_02[$i2]['TST_ID'], + 'popma' => $tpmArray_03[0]['PUP_NAME'], + 'nrpompy' => $tpmArray_03[0]['TST_PUP_SN_NO'], + 'silnik' => $tpmArray_03[0]['ENG_NAME'], + 'nrsilnika' => $tpmArray_03[0]['TST_ENG_SN_NO'], + 'qsz' => $qQuery, + 'hpod' => $h4search, + 'eta' => $eta, + 'deltah' => $deltaH, + 'mocsilnika'=> $tpmArray_03[0]['ENG_POWER'], + 'pupStatus' => setDicName($tpmArray_02[$i2]['DRS_RESOURCES_DIC_ID']) + ); + + } + } + } + + return $tablica; +} + + + +function sortmddata($array, $by, $order, $type) +{ + $sortby = "sort$by"; //This sets up what you are sorting by + $firstval = current($array); //Pulls over the first array + $vals = array_keys($firstval); //Grabs the associate Arrays + foreach ($vals as $init){ + $keyname = "sort$init"; + $$keyname = array(); + } + + foreach ($array as $key => $row) { + foreach ($vals as $names){ + $keyname = "sort$names"; + $test = array(); + $test[$key] = $row[$names]; + $$keyname = array_merge($$keyname,$test); + } + } + + if ($order == "DESC"){ + if ($type == "num"){ + array_multisort($$sortby,SORT_DESC, SORT_NUMERIC,$array); + } else { + array_multisort($$sortby,SORT_DESC, SORT_STRING,$array); + } + } else { + if ($type == "num"){ + array_multisort($$sortby,SORT_ASC, SORT_NUMERIC,$array); + } else { + array_multisort($$sortby,SORT_ASC, SORT_STRING,$array); + } + } + + return $array; +} + + +// ============================================================================================= // +function wellEvaluation4_q($qNominal, $currentQ) +{ + include"./language/".$_SESSION['lang'].".php"; + $resVal=null; + + if ($currentQ>0) + { + if (0.7*$qNominal<=$currentQ && $currentQ<=1.22*$qNominal) + { + $resVal=array( + 'grid_style' => 'green_value', + 'grid_text' => $lab_Field_site401_006 + ); + } + else if ((0.55*$qNominal<=$currentQ && $currentQ<0.7*$qNominal) || (1.22*$qNominal<$currentQ && $currentQ<=1.35*$qNominal)) + { + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_007 + ); + } + else if ((0<$currentQ && $currentQ<0.55*$qNominal) || 1.35*$qNominal<$currentQ) + { + $resVal=array( + 'grid_style' => 'red_value', + 'grid_text' => $lab_Field_site401_008 + ); + } + } + else + { + $resVal=array( + 'grid_style' => 'red_value', + 'grid_text' => $lab_Field_site401_018 + ); + } + + return $resVal; +} +// ============================================================================================= // +// ============================================================================================= // + + +// ============================================================================================= // + +function wellEvaluation4_HfQ($currentHP,$currentPP) +{ + include"./language/".$_SESSION['lang'].".php"; + $resVal=null; + + if ($currentHP>=-0.05 && $currentHP<=0.05) + { + $resVal=array( + 'grid_style' => 'green_value', + 'grid_text' => $lab_Field_site401_006, + 'point_color' => 'Green' + ); + } + else if (($currentHP<-0.05 && $currentHP>=-0.07) || ($currentHP>0.05 && $currentHP<=0.07)) + { + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_010, + 'point_color' => 'Yellow' + ); + } + else if ($currentHP<-0.07 || $currentHP>0.07) + { + $resVal=array( + 'grid_style' => 'red_value', + 'grid_text' => $lab_Field_site401_011, + 'point_color' => 'Red' + ); + } + + if (empty($currentPP) || $currentPP==0) + $resVal=null; + + + return $resVal; +} + +// ============================================================================================= // +//2016-09-13 +// ============================================================================================= // +function wellEvaluation4_HfQ_new($HPS,$PP,$HH) +{ + include"./language/".$_SESSION['lang'].".php"; + $resVal=null; + + if (($PP-$HH)!=0) + $currentHP = (float) ($HPS-($PP-$HH))/$HPS; + + if ($currentHP>=-0.05 && $currentHP<=0.05) + { + $resVal=array( + 'grid_style' => 'green_value', + 'grid_text' => $lab_Field_site401_006, + 'point_color' => 'Green', + 'point_value' => '1' + ); + } + elseif (($currentHP<-0.05 && $currentHP>=-0.07) || ($currentHP>0.05 && $currentHP<=0.07)) + { + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_010, + 'point_color' => 'Yellow', + 'point_value' => '2' + ); + } + elseif ($currentHP<-0.07 || $currentHP>0.07) + { + $resVal=array( + 'grid_style' => 'red_value', + 'grid_text' => $lab_Field_site401_011, + 'point_color' => 'Red', + 'point_value' => '3' + ); + } + + if (empty($PP) || $PP==0) + $resVal=null; + + + return $resVal; +} + + +// ============================================================================================= // +// ============================================================================================= // + +// ============================================================================================= // +function wellEvaluation4_Throt($currentHD,$currentP1,$currentP2) +{ + include"./language/".$_SESSION['lang'].".php"; + $resVal=null; + $resHSA = $currentP1 - $currentP2; + + if ( + + ( $currentHD<50 && $resHSA <=6 ) || + ( 50<=$currentHD && $currentHD<100 && $resHSA<=8) || + ( 100<=$currentHD && $currentHD<200 && $resHSA<=10) || + ( 200<=$currentHD && $currentHD<350 && $resHSA<=13) || + ( 350<=$currentHD && $currentHD<450 && $resHSA<=16) + ) + { + $resVal=array( + 'grid_style' => 'green_value', + 'grid_text' => $lab_Field_site401_006, + 'image' => 'G' + ); + } + else if ( + + ( $currentHD<50 && 6<$resHSA && $resHSA<=15 ) || + ( 50<=$currentHD && $currentHD<100 && 8<$resHSA && $resHSA<=20) || + ( 100<=$currentHD && $currentHD<200 && 10<$resHSA && $resHSA<=28) || + ( 200<=$currentHD && $currentHD<350 && 13<$resHSA && $resHSA<=35) || + ( 350<=$currentHD && $currentHD<450 && 16<$resHSA && $resHSA<=39) + ) + { + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_013, + 'image' => 'Y' + ); + } + else if ( + + ( $currentHD<50 && $resHSA>15 ) || + ( 50<=$currentHD && $currentHD<100 && $resHSA>20) || + ( 100<=$currentHD && $currentHD<200 && $resHSA>28) || + ( 200<=$currentHD && $currentHD<350 && $resHSA>35) || + ( 350<=$currentHD && $currentHD<450 && $resHSA>39) + ) + { + $resVal=array( + 'grid_style' => 'red_value', + 'grid_text' => $lab_Field_site401_014, + 'image' => 'R' + ); + } + + return $resVal; +} +// ============================================================================================= // +// ============================================================================================= // + + +// ============================================================================================= // +function wellEvaluation4_LineLoss($currentP1,$currentPP,$LPparam,$DRparam) +{ + include"./language/".$_SESSION['lang'].".php"; + $resVal=null; + $resHSL = $currentPP-$LPparam-$currentP1; + + //if (0.09<$DRparam && $DRparam<=0.11) + if (0.04<$DRparam && $DRparam < 0.145) + { + // =============================================================== // + if ( + ( $LPparam<50 && $resHSL<=3.5) || + ( 50<=$LPparam && $LPparam<100 && $resHSL<=6.4) || + ( 100<=$LPparam && $LPparam<200 && $resHSL<=10) || + ( 200<=$LPparam && $LPparam<300 && $resHSL<=18) || + ( 300<=$LPparam && $LPparam<450 && $resHSL<=25) + ) + { + $resVal=array( + 'grid_style' => 'green_value', + 'grid_text' => $lab_Field_site401_006, + 'image' => 'G' + ); + } + else if ( + ( $LPparam<50 && 3.5<$resHSL && $resHSL<=4.9) || + ( 50<=$LPparam && $LPparam<100 && 6.4<$resHSL && $resHSL<=9.5) || + ( 100<=$LPparam && $LPparam<200 && 10<$resHSL && $resHSL<=16) || + ( 200<=$LPparam && $LPparam<300 && 18<$resHSL && $resHSL<=24) || + ( 300<=$LPparam && $LPparam<450 && 25<$resHSL && $resHSL<=35) + ) + { + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_016, + 'image' => 'Y' + ); + } + else if ( + ( $LPparam<50 && $resHSL>4.9) || + ( 50<=$LPparam && $LPparam<100 && $resHSL>9.5) || + ( 100<=$LPparam && $LPparam<200 && $resHSL>16) || + ( 200<=$LPparam && $LPparam<300 && $resHSL>24) || + ( 300<=$LPparam && $LPparam<450 && $resHSL>35) + ) + { + //zamina 2016-09-14 (red_value->yellow_value) oraz (R->Y) + dopisane wymaganie + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_017.". Wymagana weryfikacja p1 i p2", + 'image' => 'Y' + ); + } + // =============================================================== // + } + else if (0.145<$DRparam && $DRparam<=0.160) + { + // =============================================================== // + if ( + ( $LPparam<50 && $resHSL<=2.3) || + ( 50<=$LPparam && $LPparam<100 && $resHSL<=4.3) || + ( 100<=$LPparam && $LPparam<200 && $resHSL<=8.6) || + ( 200<=$LPparam && $LPparam<300 && $resHSL<=12) || + ( 300<=$LPparam && $LPparam<450 && $resHSL<=21) + ) + { + $resVal=array( + 'grid_style' => 'green_value', + 'grid_text' => $lab_Field_site401_006, + 'image' => 'G' + ); + } + else if ( + ( $LPparam<50 && 2.3<$resHSL && $resHSL<=4.5) || + ( 50<=$LPparam && $LPparam<100 && 4.3<$resHSL && $resHSL<=7.2) || + ( 100<=$LPparam && $LPparam<200 && 8.6<$resHSL && $resHSL<=14) || + ( 200<=$LPparam && $LPparam<300 && 12<$resHSL && $resHSL<=18) || + ( 300<=$LPparam && $LPparam<450 && 21<$resHSL && $resHSL<=27) + ) + { + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_016, + 'image' => 'Y' + ); + } + else if ( + ( $LPparam<50 && $resHSL>4.5) || + ( 50<=$LPparam && $LPparam<100 && $resHSL>7.2) || + ( 100<=$LPparam && $LPparam<200 && $resHSL>14) || + ( 200<=$LPparam && $LPparam<300 && $resHSL>18) || + ( 300<=$LPparam && $LPparam<450 && $resHSL>27) + ) + { + $resVal=array( + 'grid_style' => 'red_value', + 'grid_text' => $lab_Field_site401_017, + 'image' => 'R' + ); + } + // =============================================================== // + } + else if (0.195<$DRparam && $DRparam<=0.215) + { + // =============================================================== // + if ( + ( $LPparam<50 && $resHSL<=2) || + ( 50<=$LPparam && $LPparam<100 && $resHSL<=3) || + ( 100<=$LPparam && $LPparam<200 && $resHSL<=6.5) || + ( 200<=$LPparam && $LPparam<300 && $resHSL<=9.5) || + ( 300<=$LPparam && $LPparam<450 && $resHSL<=12) + ) + { + $resVal=array( + 'grid_style' => 'green_value', + 'grid_text' => $lab_Field_site401_006, + 'image' => 'G' + ); + } + else if ( + ( $LPparam<50 && 2<$resHSL && $resHSL<=3) || + ( 50<=$LPparam && $LPparam<100 && 3<$resHSL && $resHSL<=5.5) || + ( 100<=$LPparam && $LPparam<200 && 5.5<$resHSL && $resHSL<=11) || + ( 200<=$LPparam && $LPparam<300 && 9.5<$resHSL && $resHSL<=15) || + ( 300<=$LPparam && $LPparam<450 && 12<$resHSL && $resHSL<=18) + ) + { + $resVal=array( + 'grid_style' => 'yellow_value', + 'grid_text' => $lab_Field_site401_016, + 'image' => 'Y' + ); + } + else if ( + ( $LPparam<50 && $resHSL>3) || + ( 50<=$LPparam && $LPparam<100 && $resHSL>5.5) || + ( 100<=$LPparam && $LPparam<200 && $resHSL>11) || + ( 200<=$LPparam && $LPparam<300 && $resHSL>15) || + ( 300<=$LPparam && $LPparam<450 && $resHSL>18) + ) + { + $resVal=array( + 'grid_style' => 'red_value', + 'grid_text' => $lab_Field_site401_017, + 'image' => 'R' + ); + } + + } + + + if (empty($currentPP) || $currentPP==0) + $resVal=null; + + return $resVal; + +} +// ============================================================================================= // +// ============================================================================================= // + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function pagination_grid($site_url, $pgn=1, $rec_counts) +{ + //ilość stron + $pgs_cnt = ceil($rec_counts/20); + //if ($pgs_cnt>5) $pgs_cnt=5; + + $prev = (int) $pgn-1; + $next = (int) $pgn+1; + + if ($prev<2) $prev=1; + if ($next>$pgs_cnt) $next=$pgs_cnt; + + $start=1; + if ($pgn>5) $start=$pgn-4; + + if ($pgs_cnt<5) $stop=$pgs_cnt; + else $stop=5; + + if ($pgn>5) $stop=$pgn; + + + + echo" + <nav> + <ul class='pagination pagination-sm'> + + <li> + <a href='".$site_url."&pgn=1' title='Pierwszy'> + <span aria-hidden='true'>&leftarrow;</span> + </a> + </li> + + <li> + <a href='".$site_url."&pgn=".$prev."' title='Poprzedni'> + <span aria-hidden='true'>&laquo;</span> + </a> + </li>"; + for ($i=$start; $i<=$stop; $i++) + + { + if ($i==$pgn) + echo "<li class='active'><a href='".$site_url."&pgn=".$i."'>".$i."</a></li>"; + else echo "<li><a href='".$site_url."&pgn=".$i."'>".$i."</a></li>"; + + } + + echo" + <li> + <a href='".$site_url."&pgn=".$next."' title='Następny'> + <span aria-hidden='true'>&raquo;</span> + </a> + </li> + + <li> + <a href='".$site_url."&pgn=".$pgs_cnt."' title='Ostatni'> + <span aria-hidden='true'>&rightarrow;</span> + </a> + </li> + </ul> + </nav> + "; + +} + +// pobiera aktualne wartoĹ›ci głębokoĹ›ci i Ĺ›rednicy dla "najgłębszej kolumny" +function getDiameterDepthAsArray($devID) +{ + $res=null;$tmp=null; + $tmp=sqlGetResAsArray("select COL_ID,COL_DRS_ID,COL_NAME,COL_DIAMETER,COL_DEPTH from (select max(COL_DEPTH) DEPTH ,COL_DRS_ID ID from seg_object_columns where COL_DRS_ID=".$devID." group by COL_DRS_ID)tb,seg_object_columns where COL_DRS_ID=ID and COL_DEPTH=DEPTH"); + + $res = array( + 'colID' => $tmp[0]['COL_ID'], + 'drsID' => $tmp[0]['COL_DRS_ID'], + 'colName' => $tmp[0]['COL_NAME'], + 'diameter' => $tmp[0]['COL_DIAMETER'], + 'depth' => $tmp[0]['COL_DEPTH'], + ); + return $res; +} + +// ustawia aktualne wartoĹ›ci głębokoĹ›ci i Ĺ›rednicy +function setDiameterAndDepth($devID,$desc=null) +{ + unset($resArray); + $resArray = getDiameterDepthAsArray($devID); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=100,DRD_VALUE='".$resArray['diameter']."',DRD_DESCRIPTION='".$desc."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".$resArray['depth']."',DRD_DESCRIPTION='".$desc."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + unset($resArray); +} + +// ustawia nowe parametry, gdy studnia jest Ĺ›cinana - nowa rzÄ™dna +function setNewWellConstructionParameters($devID,$rzednaOld,$rzednaNew,$desc=null) +{ +// unset($depDiaArray); $depDiaArray = getDiameterDepthAsArray($devID); + $rzednaOld = (float) str_replace(',','.',$rzednaOld); + $rzednaNew = (float) str_replace(',','.',$rzednaNew); + $rzednaDiff = $rzednaOld - $rzednaNew; + +// $newDetph = round(($depDiaArray['depth']) - $rzednaDiff,2); + + // obcina kolumny + $columnArray = sqlGetResAsArray("select COL_ID,COL_DEPTH from seg_object_columns where COL_DRS_ID=".$devID); + for($i=0;$i<count($columnArray);$i++) + mysql_query("UPDATE seg_object_columns SET COL_DEPTH=".(($columnArray[$i]['COL_DEPTH'])-($rzednaDiff))." WHERE COL_ID=".$columnArray[$i]['COL_ID']); + unset($columnArray); + + //obcina filtry + $filterArray = sqlGetResAsArray("select CLF_ID,CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$devID); + for($i=0;$i<count($filterArray);$i++) + mysql_query("UPDATE seg_object_column_filters SET CLF_FROM=".(($filterArray[$i]['CLF_FROM'])-($rzednaDiff)).",CLF_TO=".(($filterArray[$i]['CLF_TO'])-($rzednaDiff))." WHERE CLF_ID=".$filterArray[$i]['CLF_ID']); + unset($filterArray); + + //obcina obsypkÄ™ + $fillingArray = sqlGetResAsArray("select CLO_ID,CLO_FROM,CLO_TO from seg_object_column_fillings where CLO_DRS_ID=".$devID); + for($i=0;$i<count($fillingArray);$i++) + mysql_query("UPDATE seg_object_column_fillings SET CLO_FROM=".(($fillingArray[$i]['CLO_FROM'])-($rzednaDiff)).",CLO_TO=".(($fillingArray[$i]['CLO_TO'])-($rzednaDiff))." WHERE CLO_ID=".$fillingArray[$i]['CLO_ID']); + unset($fillingArray); + + setDiameterAndDepth($devID,$desc); + +} + + + + +function delSearchSessionData() +{ + //203 + unset($_SESSION['site203_array']); + unset($_SESSION['site203_input']); + unset($_SESSION['site203_sr_param']); + + //204 + unset($_SESSION['site204_array']); + unset($_SESSION['site204_input']); + unset($_SESSION['site204_sr_param']); + + + //206 + unset($_SESSION['site206_array']); + unset($_SESSION['site206_input']); + + //207 + unset($_SESSION['site207_array']); + unset($_SESSION['site207_input']); + + //208 + unset($_SESSION['site208_array']); + unset($_SESSION['site208_input']); + + + // 301 + unset($_SESSION['site301_array']); + unset($_SESSION['site301_input']); + unset($_SESSION['site301_newAgg_array']); + + + // 303 + unset($_SESSION['site303_array']); + unset($_SESSION['site303_print_array']); + unset($_SESSION['site303_pb_id']); + + //304 + unset($_SESSION['site304_array']); + unset($_SESSION['site304_print_array']); + unset($_SESSION['site304_input']); + unset($_SESSION['site304_eb_id']); + + unset($_SESSION['site309_array']); + unset($_SESSION['site309_input']); + + unset($_SESSION['site309inf_array']); + unset($_SESSION['site309inf_filters']); + + // 310 + unset($_SESSION['site310_array']); + unset($_SESSION['site310_tab6']); + unset($_SESSION['site310_tab6_LS']); + unset($_SESSION['310_direct']); + unset($_SESSION['site310_tab3']); + unset($_SESSION['site310_tab4']); + unset($_SESSION['site310F_tab4']); + + + + // 401 + unset($_SESSION['site401_array']); + unset($_SESSION['site401_input']); + + unset($_SESSION['site401ahis_array']); + unset($_SESSION['site401ahis_from']); + unset($_SESSION['site401ahis_to']); + unset($_SESSION['site401ahis_site']); + unset($_SESSION['site401ahis_ilosc']); + + //401mark, inf, mhis + unset($_SESSION['well_details']); + unset($_SESSION['site401_scope']); + unset($_SESSION['site401_lift_xy']); + unset($_SESSION['site401_eta_xy']); + unset($_SESSION['site401_minmax_params']); + + + unset($_SESSION['site401mhis_working_params']); + unset($_SESSION['site401mhis_inDate']); + unset($_SESSION['site401mhis_sel_data']); + unset($_SESSION['site401mhis_exch_info']); + + unset($_SESSION['site401pdet_array']); + unset($_SESSION['site401chart_x']); + unset($_SESSION['site401chart_y']); + + + + + unset($_SESSION['site404_array']); + unset($_SESSION['site404_input']); + + unset($_SESSION['site404chart_array']); + unset($_SESSION['site404chart_x']); + unset($_SESSION['site404chart_y']); + unset($_SESSION['inDateFrom']); + unset($_SESSION['inDateTo']); + unset($_SESSION['site404inf_array']); + + + + unset($_SESSION['site405_array']); + unset($_SESSION['site405inf_array']); + + + unset($_SESSION['site810_array']); + unset($_SESSION['site810_input']); + unset($_SESSION['site810_sr_status']); + unset($_SESSION['site810_sr_filtr']); + unset($_SESSION['site810_sr_all']); + unset($_SESSION['site810_inDatefrom']); + unset($_SESSION['site810_inDateto']); + + unset($_SESSION['site810A_OrderID']); + unset($_SESSION['site810A_inOrderNo']); + unset($_SESSION['site810A_beforeNo']); + unset($_SESSION['site810A_OrderBranch']); + unset($_SESSION['site810A_noID']); + unset($_SESSION['site810A_issetNoID']); + unset($_SESSION['site810A_inOrderScope']); + unset($_SESSION['site810A_inOrderStatus']); + unset($_SESSION['site810A_inOrderRegDate']); + unset($_SESSION['site810A_inOrderOwner']); + unset($_SESSION['site810A_inOrderObjectType']); + unset($_SESSION['site810A_inOrderBranch']); + unset($_SESSION['site810_well_array']); + + unset($_SESSION['site810_newAggId']); + unset($_SESSION['site810_newSnd_array']); + + unset($_SESSION['site810A_inOrderWell']); + unset($_SESSION['site810A_inOrderBariera']); + unset($_SESSION['site810A_inOrderPump']); + unset($_SESSION['site810A_inOrderPumpSn']); + unset($_SESSION['site810A_inOrderEng']); + unset($_SESSION['site810A_inOrderEngSn']); + unset($_SESSION['site810A_inOrderLS']); + unset($_SESSION['site810A_inOrderRzdna']); + unset($_SESSION['site810A_inOrderDST']); + unset($_SESSION['site810A_inOrderLZ']); + unset($_SESSION['site810A_inOrderLP']); + unset($_SESSION['site810A_inOrderKT']); + unset($_SESSION['site810A_inOrderIlCln']); + unset($_SESSION['site810A_inOrderZwr']); + unset($_SESSION['site810A_inOrderZwrDate']); + + unset($_SESSION['site810A_inOrderSndHyd']); + unset($_SESSION['site810A_inOrderSndHydSN']); + unset($_SESSION['site810A_inOrderSndHydDlKb']); + unset($_SESSION['site810A_inOrderMetan']); + unset($_SESSION['site810A_inOrderDelivery']); + unset($_SESSION['site810A_inOrderDesc']); + + unset($_SESSION['site810inf_ordMainArray']); + + unset($_SESSION['site810_piezo_array']); + unset($_SESSION['site810A_inOrderPiezo']); + unset($_SESSION['site810A_inOrderPiezoSn']); + unset($_SESSION['site810E_ordMainArray']); + unset($_SESSION['site810_newAgg_array']); + unset($_SESSION['site810inf_newAggArray']); + + + + + unset($_SESSION['site809_rap001']); + unset($_SESSION['site809_rap002']); + unset($_SESSION['site809_rap003']); + unset($_SESSION['site809_rap004']); + unset($_SESSION['site809_rap005']); + + + unset($_SESSION['rap002_array']); + unset($_SESSION['rap004_array_01']); + unset($_SESSION['rap004_array_02']); + unset($_SESSION['rap004_array_date']); + + unset($_SESSION['rep005_date']); +} + + + + +function array_orderby() +{ + $args = func_get_args(); + $data = array_shift($args); + foreach ($args as $n => $field) { + if (is_string($field)) { + $tmp = array(); + foreach ($data as $key => $row) + $tmp[$key] = $row[$field]; + $args[$n] = $tmp; + } + } + $args[] = &$data; + call_user_func_array('array_multisort', $args); + return array_pop($args); +} + +// ==================================================================================================================== +function getSelectHours($selParamName) +{ + echo'<select name="'.$selParamName.'" id="'.$selParamName.'">'; + for ($i=0; $i<24; $i++) + { + if ($i<10) $val="0".$i; + else $val=$i; + + if ($val==date('H')) + echo'<option value="'.$val.'" selected>'.$val.'</option>'; + else + echo'<option value="'.$val.'">'.$val.'</option>'; + + } + echo'</select>'; +} +// ==================================================================================================================== +function getSelectMinutes($selParamName) +{ + echo'<select name="'.$selParamName.'" id="'.$selParamName.'">'; + for ($i=0; $i<60; $i++) + { + if ($i<10) $val="0".$i; + else $val=$i; + + if ($val==date('i')) + echo'<option value="'.$val.'" selected>'.$val.'</option>'; + else + echo'<option value="'.$val.'">'.$val.'</option>'; + + } + echo'</select>'; +} + + +// ==================================================================================================================== + +function getSelectValueAsArray($selParamName, $arrayData, $selectedVal=null) +{ + echo'<select name="'.$selParamName.'" id="'.$selParamName.'">'; + for ($i=0; $i<count($arrayData); $i++) + { + if ($arrayData[$i]['id']==$selectedVal) + echo'<option value="'.$arrayData[$i]['id'].'" selected>'.$arrayData[$i]['value'].'</option>'; + else + echo'<option value="'.$arrayData[$i]['id'].'">'.$arrayData[$i]['value'].'</option>'; + + } + echo'</select>'; +} +// ==================================================================================================================== + + +// ==================================================================================================================== +// ==================================================================================================================== +// ==================================================================================================================== +// ==================================================================================================================== +// ==================================================================================================================== +function getParentAndValue4rep003($devID) +{ + // poziom pierwszy + unset($tmpArray01); + $tmpArray01 = sqlGetResAsArray("select WWD_ID,WWD_NAME,WWD_PARENT_ID from seg_water_drainage where WWD_PARENT_ID is null"); + for($i01=0; $i01<count($tmpArray01); $i01++) + { + $wi1 = $tmpArray01[$i01]['WWD_ID']; + if ($tmpArray01[$i01]['WWD_PARENT_ID']>0) $pt1 = $tmpArray01[$i01]['WWD_PARENT_ID']; else $pt1='null'; + + unset($tmpSubArray01); + $tmpSubArray01 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where DRS_ID=".$devID); + if ($tmpSubArray01[0]['WWD_ID'] == $tmpArray01[$i01]['WWD_ID']) + { + mysql_query("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."'"); +// echo("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."';"); + + break; + } + + // poziom drugi + $tmpArray02 = sqlGetResAsArray("select WWD_ID,WWD_NAME,WWD_PARENT_ID from seg_water_drainage where WWD_PARENT_ID=".$tmpArray01[$i01]['WWD_ID']); + for($i02=0; $i02<count($tmpArray02); $i02++) + { + $wi2 = $tmpArray02[$i02]['WWD_ID']; + if ($tmpArray02[$i02]['WWD_PARENT_ID']>0) $pt2 = $tmpArray02[$i02]['WWD_PARENT_ID']; else $pt2='null'; + + unset($tmpSubArray02); + $tmpSubArray02 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where DRS_ID=".$devID); + if ($tmpSubArray02[0]['WWD_ID'] == $tmpArray02[$i02]['WWD_ID']) + { + mysql_query("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."'"); +// echo("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."';"); + break; + } + + // poziom trzeci + $tmpArray03 = sqlGetResAsArray("select WWD_ID,WWD_NAME,WWD_PARENT_ID from seg_water_drainage where WWD_PARENT_ID=".$tmpArray02[$i02]['WWD_ID']); + for($i03=0; $i03<count($tmpArray03); $i03++) + { + $wi3 = $tmpArray03[$i03]['WWD_ID']; + if ($tmpArray03[$i03]['WWD_PARENT_ID']>0) $pt3 = $tmpArray03[$i03]['WWD_PARENT_ID']; else $pt3='null'; + + unset($tmpSubArray03); + $tmpSubArray03 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where DRS_ID=".$devID); + if ($tmpSubArray03[0]['WWD_ID'] == $tmpArray03[$i03]['WWD_ID']) + { + mysql_query("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."'"); +// echo("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."';"); + break; + } + + + // poziom czwarty + $tmpArray04 = sqlGetResAsArray("select WWD_ID,WWD_NAME,WWD_PARENT_ID from seg_water_drainage where WWD_PARENT_ID=".$tmpArray03[$i03]['WWD_ID']); + for($i04=0; $i04<count($tmpArray04); $i04++) + { + $wi4 = $tmpArray04[$i04]['WWD_ID']; + if ($tmpArray04[$i04]['WWD_PARENT_ID']>0) $pt4 = $tmpArray04[$i04]['WWD_PARENT_ID']; else $pt4='null'; + + unset($tmpSubArray04); + $tmpSubArray04 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where DRS_ID=".$devID); + if ($tmpSubArray04[0]['WWD_ID'] == $tmpArray04[$i04]['WWD_ID']) + { + mysql_query("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",WI4_ID=".$wi4.",PT4_ID=".$pt4.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."'"); +// echo("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",WI4_ID=".$wi4.",PT4_ID=".$pt4.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."';"); + break; + } + + + // poziom piąty + $tmpArray05 = sqlGetResAsArray("select WWD_ID,WWD_NAME,WWD_PARENT_ID from seg_water_drainage where WWD_PARENT_ID=".$tmpArray04[$i04]['WWD_ID']); + for($i05=0; $i05<count($tmpArray05); $i05++) + { + $wi5 = $tmpArray05[$i05]['WWD_ID']; + if ($tmpArray05[$i05]['WWD_PARENT_ID']>0) $pt5 = $tmpArray05[$i05]['WWD_PARENT_ID']; else $pt5='null'; + + unset($tmpSubArray05); + $tmpSubArray05 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where DRS_ID=".$devID); + if ($tmpSubArray05[0]['WWD_ID'] == $tmpArray05[$i05]['WWD_ID']) + { + mysql_query("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",WI4_ID=".$wi4.",PT4_ID=".$pt4.",WI5_ID=".$wi5.",PT5_ID=".$pt5.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."'"); +// echo("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",WI4_ID=".$wi4.",PT4_ID=".$pt4.",WI5_ID=".$wi5.",PT5_ID=".$pt5.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."';"); + break; + } + + + // poziom szósty + $tmpArray06 = sqlGetResAsArray("select WWD_ID,WWD_NAME,WWD_PARENT_ID from seg_water_drainage where WWD_PARENT_ID=".$tmpArray05[$i05]['WWD_ID']); + for($i06=0; $i06<count($tmpArray06); $i06++) + { + $wi6 = $tmpArray06[$i06]['WWD_ID']; + if ($tmpArray06[$i06]['WWD_PARENT_ID']>0) $pt6 = $tmpArray06[$i06]['WWD_PARENT_ID']; else $pt6='null'; + + + unset($tmpSubArray06); + $tmpSubArray06 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where DRS_ID=".$devID); + if ($tmpSubArray06[0]['WWD_ID'] ==$tmpArray06[$i06]['WWD_ID']) + { + mysql_query("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",WI4_ID=".$wi4.",PT4_ID=".$pt4.",WI5_ID=".$wi5.",PT5_ID=".$pt5.",WI6_ID=".$wi6.",PT6_ID=".$pt6.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."'"); +// echo("INSERT INTO softspm_rep.rep_003_data_ready SET WLL_ID=".$tmpSubArray01[0]['WLL_ID'].",DRS_ID=".$devID.",WLL_BARIERA='".$tmpSubArray01[0]['WLL_BARIERA']."',WLL_NAME='".$tmpSubArray01[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tmpSubArray01[0]['WLL_CAT_DIC_ID'].",WI1_ID=".$wi1.",PT1_ID=".$pt1.",WI2_ID=".$wi2.",PT2_ID=".$pt2.",WI3_ID=".$wi3.",PT3_ID=".$pt3.",WI4_ID=".$wi4.",PT4_ID=".$pt4.",WI5_ID=".$wi5.",PT5_ID=".$pt5.",WI6_ID=".$wi6.",PT6_ID=".$pt6.",Q_H=".$tmpSubArray01[0]['Q_H'].",Q_MIN=".$tmpSubArray01[0]['Q_MIN'].",DRS_DEPARTMENT='".$tmpSubArray01[0]['DRS_DEPARTMENT']."',WLL_AUDIT_CD='".$tmpSubArray01[0]['WLL_AUDIT_CD']."';"); + break; + } + } + } + } + } + } + } +} +// ==================================================================================================================== + +// ==================================================================================================================== +function findTreeLevel($treeID) +{ + unset($res); + $cont=0; + for ($i=0; $i<10; $i++) + { + unset($tmpVAL); + $tmpVAL = sqlStringValue("select WWD_PARENT_ID from seg_water_drainage where WWD_ID=".$treeID, "WWD_PARENT_ID"); + + if ($tmpVAL>0) + { + $res[] = array( + 'id' => $treeID, + 'par' => $tmpVAL + ); + $treeID=$tmpVAL; + $cont++; + } + else + { + $res[] = array( + 'id' => $treeID, + 'par' => null + ); + break; + } + } + + + unset($outArray); + for ($i=0; $i<count($res); $i++) + { + $curVal01 = (int) count($res)-($i+1); + + $outArray[]=array( + 'id' => $res[$curVal01]['id'], + 'par' => $res[$curVal01]['par'], + ); + + } + + return $outArray; +} +// ==================================================================================================================== + + + +// funkcja zwracająca dane historyczne w zależności od wybranej daty baza softspm_his +// tabele seg_dev_resources_det_YYYY_QX +function getHistoricalDataFrom_softspm_his($inParam,$inDevId,$inStartDate,$inEndDate=null) +{ + $inStartDate = substr($inStartDate,0,10); + $inEndDate = substr($inEndDate,0,10); + + // jeśli mamy wskazaną konkretną datę + // ================== ================== ================== ================== ================== ================== + if ($inEndDate==null) + { + //echo'dla jednej daty <br/>'; + + // dla bieżącego roku + if (substr($inStartDate, 0,4)==date('Y')) + { + //echo'Bieżący rok <br/>'; + $tbname = "seg_dev_resources_det"; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + + if (count($outArray)<=0) + { + $tbname = "seg_dev_resources_det_his"; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + } + + + + // jeśli nie ma wyników w bierzącym roku to zaczyna szukać po danych historycznych + //============================================================================= + if (count($outArray)<=0) + { + $tb = "softspm_his.seg_dev_resources_det_"; + $year = date('Y') - 1; + $q=4; + + $tbname = $tb.$year."_q".$q; + + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + + // sprawdza wartość w poprzednim kwartale + if (count($outArray)<=0 && $q>1) + { + while($q>1 && count($outArray)<=0) + { + if ($q>1) $q--; + $tbname = $tb.$year."_q".$q; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + } + } + + // jeśli nie znalazł schodzi rok niżej + if (count($outArray)<=0 && $q==1 && $year>2014) + { + $year--; + $q=5; + + while($q>1 && count($outArray)<=0) + { + if ($q>1) $q--; + $tbname = $tb.$year."_q".$q; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + } + } + } + + //============================================================================= + + + + } + // dane historyczne + else + { + $tb = "softspm_his.seg_dev_resources_det_"; + $year = (int) substr($inStartDate, 0,4); + if ($year<2014) $year=2014; + + if (substr($inStartDate, 5,2)=='01' || substr($inStartDate, 5,2)=='02' || substr($inStartDate, 5,2)=='03') $q=1; + elseif (substr($inStartDate, 5,2)=='04' || substr($inStartDate, 5,2)=='05' || substr($inStartDate, 5,2)=='06') $q=2; + elseif (substr($inStartDate, 5,2)=='07' || substr($inStartDate, 5,2)=='08' || substr($inStartDate, 5,2)=='09') $q=3; + elseif (substr($inStartDate, 5,2)=='10' || substr($inStartDate, 5,2)=='11' || substr($inStartDate, 5,2)=='12') $q=4; + + $tbname = $tb.$year."_q".$q; + + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + + // sprawdza wartość w poprzednim kwartale + if (count($outArray)<=0 && $q>1) + { + while($q>1 && count($outArray)<=0) + { + if ($q>1) $q--; + $tbname = $tb.$year."_q".$q; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + + + } + } + + // jeśli nie znalazł schodzi rok niżej + if (count($outArray)<=0 && $q==1 && $year>2014) + { + $year--; + $q=5; + + while($q>1 && count($outArray)<=0) + { + if ($q>1) $q--; + $tbname = $tb.$year."_q".$q; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where DRD_ID=(select max(DRD_ID) from ".$tbname." where DRD_RESOURCES_DETAIL=".$inParam." and DRD_DRS_ID=".$inDevId." and DRD_AUDIT_DATE<='".$inStartDate." 23:59:59')"); + } + } + } + } + // ================================================================================================================= + + // jeśli mamy wskazany zakres dat + // ================== ================== ================== ================== ================== ================== + else + { + //echo'dla zakredu dat'; + } + // ================================================================================================================= + + return $outArray; +} +// ==================================================================================================================== + +// funkcja zwracająca dane historyczne w zależności od wybranej daty baza rep_his_data_everyday +// tabele rep_his_data_everyday_YYYY_QX +function getHistoricalDataFrom_everyday_his($inDevId,$inStartDate,$inEndDate=null) +{ + $inStartDate = substr($inStartDate,0,10); + $inEndDate = substr($inEndDate,0,10); + + // jeśli mamy wskazaną konkretną datę + // ================== ================== ================== ================== ================== ================== + if ($inEndDate==null) + { + //echo'dla jednej daty <br/>'; + + // dla bieżącego roku + if (substr($inStartDate, 0,4)==date('Y')) + { + //echo'Bieżący rok <br/>'; + $tbname = "rep_his_data_everyday"; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where RHD_ID=(select max(RHD_ID) from ".$tbname." where RHD_DRS_ID=".$inDevId." and RHD_DATE<='".$inStartDate." 23:59:59')"); + + if (count($outArray)<=0) + { + $tbname = "rep_his_data_everyday_his"; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where RHD_ID=(select max(RHD_ID) from ".$tbname." where RHD_DRS_ID=".$inDevId." and RHD_DATE<='".$inStartDate." 23:59:59')"); + } + + + } + // dane historyczne + else + { + $tb = "softspm_his.rep_his_data_everyday_"; + $year = (int) substr($inStartDate, 0,4); + if ($year<2014) $year=2014; + + if (substr($inStartDate, 5,2)=='01' || substr($inStartDate, 5,2)=='02' || substr($inStartDate, 5,2)=='03') $q=1; + elseif (substr($inStartDate, 5,2)=='04' || substr($inStartDate, 5,2)=='05' || substr($inStartDate, 5,2)=='06') $q=2; + elseif (substr($inStartDate, 5,2)=='07' || substr($inStartDate, 5,2)=='08' || substr($inStartDate, 5,2)=='09') $q=3; + elseif (substr($inStartDate, 5,2)=='10' || substr($inStartDate, 5,2)=='11' || substr($inStartDate, 5,2)=='12') $q=4; + + $tbname = $tb.$year."_q".$q; + + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where RHD_ID=(select max(RHD_ID) from ".$tbname." where RHD_DRS_ID=".$inDevId." and RHD_DATE<='".$inStartDate." 23:59:59')"); + + // sprawdza wartość w poprzednim kwartale + if (count($outArray)<=0 && $q>1) + { + while($q>1 && count($outArray)<=0) + { + if ($q>1) $q--; + $tbname = $tb.$year."_q".$q; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where RHD_ID=(select max(RHD_ID) from ".$tbname." where RHD_DRS_ID=".$inDevId." and RHD_DATE<='".$inStartDate." 23:59:59')"); + } + } + + // jeśli nie znalazł schodzi rok niżej + if (count($outArray)<=0 && $q==1 && $year>2014) + { + $year--; + $q=5; + + while($q>1 && count($outArray)<=0) + { + if ($q>1) $q--; + $tbname = $tb.$year."_q".$q; + unset($outArray); + $outArray = sqlGetResAsArray("select * from ".$tbname." where RHD_ID=(select max(RHD_ID) from ".$tbname." where RHD_DRS_ID=".$inDevId." and RHD_DATE<='".$inStartDate." 23:59:59')"); + } + } + } + } + // ================================================================================================================= + + // jeśli mamy wskazany zakres dat + // ================== ================== ================== ================== ================== ================== + else + { + //echo'dla zakredu dat'; + } + // ================================================================================================================= + + return $outArray; +} +// ==================================================================================================================== + + +// funkcja zwracająca średią z danych historycznych +// tabele seg_dev_resources_det_YYYY_QX +function getAvgHistoricalData_everyday_his($inParam,$inDevId,$inStartDate,$inEndDate) +{ + $inStartDate = substr($inStartDate,0,10); + $inEndDate = substr($inEndDate,0,10); + + + if (substr($inStartDate, 0,4)==date('Y')) + { + unset($outArray); + $outArray = sqlGetResAsArray(" + select avg(".$inParam.") ".$inParam." from + ( + select ".$inParam." from rep_his_data_everyday where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59' + union + select ".$inParam." from rep_his_data_everyday_his where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59' + ) tb + "); + + } + elseif(substr($inStartDate, 0,4)<date('Y') && substr($inStartDate, 0,4)>2013) + { + unset($query); + $uno_counter=0; + $yearTO = substr($inEndDate, 0,4); + + if (substr($inEndDate, 0,4)==date('Y')) + { + $query = " + select ".$inParam." from rep_his_data_everyday where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59' + union + select ".$inParam." from rep_his_data_everyday_his where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59' + "; + $uno_counter++; + $yearTO=($yearTO-1); + } + + for ($i=substr($inStartDate, 0,4); $i<=$yearTO; $i++) + { + if ($uno_counter>0) $query .= " union "; + + $tbname = "softspm_his.rep_his_data_everyday_".$i."_q1"; + $query .= "select ".$inParam." from ".$tbname." where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59'"; + + $tbname = "softspm_his.rep_his_data_everyday_".$i."_q2"; + $query .= " union select ".$inParam." from ".$tbname." where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59'"; + + $tbname = "softspm_his.rep_his_data_everyday_".$i."_q3"; + $query .= " union select ".$inParam." from ".$tbname." where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59'"; + + $tbname = "softspm_his.rep_his_data_everyday_".$i."_q4"; + $query .= " union select ".$inParam." from ".$tbname." where ".$inParam." is not null and RHD_DRS_ID=".$inDevId." and RHD_DATE>='".$inStartDate." 00:00:00' and RHD_DATE<='".$inEndDate." 23:59:59'"; + + $uno_counter++; + } + + + unset($outArray); + $outArray = sqlGetResAsArray("select avg(".$inParam.") ".$inParam." from (".$query.") tb"); + //$aaa = "select avg(".$inParam.") ".$inParam." from (".$query.") tb"; + } + + return $outArray; +} +// ==================================================================================================================== + + + +// wskazuje tabele w zależności od daty everyday_his +function getTableNameFrom_everyday_his($inStartDate) +{ + $inStartDate = substr($inStartDate,0,10); + + $inYear = (int) substr($inStartDate, 0,4); + $inMonth = (int) substr($inStartDate, 5,2); + $inDay = (int) substr($inStartDate, 8,2); + + if (substr($inStartDate, 0,4)==date('Y') && $inMonth>=1) + { + $tbname = 'rep_his_data_everyday'; + if ((strtotime(date('Y-m-d')) - strtotime($inStartDate)) / (60*60*24) > 180) + $tbname = 'rep_his_data_everyday_his'; + } + + else + { + //if (substr($inStartDate, 5,2)=='01') + //Jeżeli jest wybrana data na początku roku - musi brać dane z końca poprzedniego roku + if ($inMonth==1 && $inDay<=3) + { + $inYear--; + $inMonth=12; + } + elseif ($inMonth>1 && $inDay<=3) + { + $inMonth--; + } + + unset($quarter); + + if ($inMonth<=3) $quarter=1; + elseif ($inMonth>3 && $inMonth<=6) $quarter=2; + elseif ($inMonth>6 && $inMonth<=9) $quarter=3; + elseif ($inMonth>9 && $inMonth<=12) $quarter=4; + + $tbname = 'softspm_his.rep_his_data_everyday_'.$inYear.'_q'.$quarter; + } + + if ($inYear<2014) $tbname = 'softspm_his.rep_his_data_everyday_2014_q1'; + + return $tbname; +} +// ==================================================================================================================== + +// wskazuje tabele w zależności od daty seg_dev_resources_det +function getTableNameFrom_resources_det($inStartDate) +{ + $inStartDate = substr($inStartDate,0,10); + + $inYear = (int) substr($inStartDate, 0,4); + $inMonth = (int) substr($inStartDate, 5,2); + $inDay = (int) substr($inStartDate, 8,2); + + if (substr($inStartDate, 0,4)==date('Y') && $inMonth>=1) + { + $tbname = 'seg_dev_resources_det'; + if ((strtotime(date('Y-m-d')) - strtotime($inStartDate)) / (60*60*24) > 180) + $tbname = 'seg_dev_resources_det_his'; + } + + else + { + //if (substr($inStartDate, 5,2)=='01') + //Jeżeli jest wybrana data na początku roku - musi brać dane z końca poprzedniego roku + if ($inMonth==1 && $inDay<=3) + { + $inYear--; + $inMonth=12; + } + elseif ($inMonth>1 && $inDay<=3) + { + $inMonth--; + } + + unset($quarter); + + if ($inMonth<=3) $quarter=1; + elseif ($inMonth>3 && $inMonth<=6) $quarter=2; + elseif ($inMonth>6 && $inMonth<=9) $quarter=3; + elseif ($inMonth>9 && $inMonth<=12) $quarter=4; + + $tbname = 'softspm_his.seg_dev_resources_det_'.$inYear.'_q'.$quarter; + } + + if ($inYear<2014) $tbname = 'softspm_his.seg_dev_resources_det_2014_q1'; + + return $tbname; +} + // ==================================================================================================================== + +function getQuery_everyday_his($inStartDate,$inEndDate,$inCondition=null) +{ + $startYear = (int) substr($inStartDate, 0,4); + $inMonth = (int) substr($inStartDate, 5,2); + + $endYear = (int) substr($inEndDate, 0,4); + $endMonth = (int) substr($inEndDate, 5,2); + + if ($inMonth<=3) $quarter=1; + elseif ($inMonth>3 && $inMonth<=6) $quarter=2; + elseif ($inMonth>6 && $inMonth<=9) $quarter=3; + elseif ($inMonth>9 && $inMonth<=12) $quarter=4; + + if ($endMonth<=3) $quEnd=1; + elseif ($endMonth>3 && $endMonth<=6) $quEnd=2; + elseif ($endMonth>6 && $endMonth<=9) $quEnd=3; + elseif ($endMonth>9 && $endMonth<=12) $quEnd=4; + + $endWhile=5; + + $licznik=0; + unset($tb); + + if ($startYear<2014 && $endYear<2014) + { + $tb = "select * from softspm_his.rep_his_data_everyday_2014_q1 ".$inCondition." "; + } + elseif ($endYear>2013 && $startYear<date('Y')) + { + if ($startYear<2014) { $startYear=2014; $quarter=1;} + + if ($endYear==date('Y')) $end = $endYear-1; + else $end=$endYear; + + for ($i=$startYear; $i<=$end; $i++) + { + // do którego kwartału ma dokładać kwartały + if ($i==$end) $endWhile = $quEnd+1; + if ($i==$end && $endYear==date('Y')) $endWhile = 5; + + while($quarter<$endWhile) + { + if ($licznik==0) $tb = "select * from softspm_his.rep_his_data_everyday_".$i."_q".$quarter." ".$inCondition." "; + else + { + $tb .= "union select * from softspm_his.rep_his_data_everyday_".$i."_q".$quarter." ".$inCondition." "; + } + $quarter++; + $licznik++; + } + $quarter=1; + } + + if ($endYear==date('Y')) + { + $roznica = (strtotime(date("Y-m-d")) - strtotime(substr($inEndDate,0,10))) / (60*60*24); + if ($roznica>180) + $tb .= "union select * from rep_his_data_everyday_his ".$inCondition." "; + + $tb .= "union select * from rep_his_data_everyday ".$inCondition." "; + } + } + else + { + $tb = "select * from rep_his_data_everyday ".$inCondition." "; + + $roznica = (strtotime(date("Y-m-d")) - strtotime(substr($inEndDate,0,10))) / (60*60*24); + if ($roznica>180) + $tb .= "union select * from rep_his_data_everyday_his ".$inCondition." "; + } + + return $tb; +} +// ==================================================================================================================== + + +// sprawdza ilość licenji na aktywne, zautomatyzowane studnie +// ==================================================================================================================== +function getActiveAutomationWells() +{ + $outParam=0; + $outParam = sqlValue("select count(WLL_ID) from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_STATUS_DIC_ID=3 and DRS_DEV_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); + + return $outParam; +} +// ==================================================================================================================== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +function checkYourBrowser() +{ + $isOK = 0; + $yourBrow = get_browser(null,true); + if (strstr(strtolower($yourBrow['parent']),strtolower('IE')) ) + { + $ver = str_replace('ie','',strtolower($yourBrow['parent'])); + $ver = str_replace(' ','',$ver); + + if ($ver>7) + $isOK = 1; + + } + else if (strstr(strtolower($yourBrow['parent']),strtolower('Firefox')) ) + { + $ver = str_replace('firefox','',strtolower($yourBrow['parent'])); + $ver = str_replace(' ','',$ver); + + if ($ver>27) + $isOK = 1; + } + else if (strstr(strtolower($yourBrow['parent']),strtolower('Chrome')) ) + { + $ver = str_replace('chrome','',strtolower($yourBrow['parent'])); + $ver = str_replace(' ','',$ver); + + if ($ver>32) + $isOK = 1; + } + + else if (strstr(strtolower($yourBrow['parent']),strtolower('Android')) ) + { + $isOK = 1; + } + + else if (strstr(strtolower($yourBrow['parent']),strtolower('Safari')) ) + { + $isOK = 1; + } + return $isOK; +} +// ========================================================== // +function showBrowserAttention() +{ + echo"<br/><br/> + <body bgcolor=#00BEFA> + <span style='color:red; padding: 5px; font-weight: bold;'>WAĹ»NA INFORMACJA</span><br/> + <span style='color: #ffffff; font-weight:normal; padding: 5px;'>Posiadasz przeglÄ…darkÄ™ internetowÄ… poprzednich generacji nie obsĹ‚ugujÄ…cych programĂłw nowego typu.</span><br/> + <span style='color: #ffffff; font-weight:normal; padding: 5px;'>W celu prawidĹ‚owej obsĹ‚ugi systemu zaktualizuj aktualnÄ… przeglÄ…darkÄ™ lub zainstaluj innÄ…, speĹ‚niajÄ…ca wymogi współczesnych technologii informatycznych..</span><br/> + <span style='color: #ffffff; font-weight:normal; padding: 5px;'>Aktualizacja Twojej aktualnej przeglÄ…darki lub instalacja innej jest bezpĹ‚atna i trwa zaledwie kilka minut.</span><br/> + <span style='color: #ffffff; font-weight:bold; padding: 5px;'>Ĺ»yczymy powodzenia w aktualizacji Twojego sprzÄ™tu - SoftSPM.</span><br/> + </span> + <br/><br/><br/> + <span style='color:red; padding: 5px; font-weight: bold;'>IMPORTANT INFORMATION</span><br/> + <span style='color: #ffffff; font-weight:normal; padding: 5px;'>Your web browser is previous generation and does not support new type of systems.</span><br/> + <span style='color: #ffffff; font-weight:normal; padding: 5px;'>You have to upgrade your browser to newest version or install another one.</span><br/> + <span style='color: #ffffff; font-weight:normal; padding: 5px;'>This operation is totally free of charge, and will be completed in a few minutes.</span><br/> + <span style='color: #ffffff; font-weight:bold; padding: 5px;'>Good luck in updating your web browser - SoftSPM.</span><br/> + </span><br/><br/><br/><br/> + <table style='width:100%;padding-bottom:50px;padding-right:10%;background-color:#00BEFA' border='0'> + <tbody> + <tr> + <td style='text-align:right;vertical-align:middle'> + <a href='http://www.microsoft.com/windows/Internet-explorer/default.aspx' target='_blank'> + <img title='Internet Explorer' style='border-width:0px' src='./images/iexplorer_ico.png' /> + </a> + </td> + <td style='text-align:center;vertical-align:middle'> + <a href='http://www.mozilla.com' target='_blank'> + <img title='Firefox' style='border-width:0px' src='./images/firefox_ico.png' /> + </a> + </td> + <td style='text-align:left;vertical-align:middle'> + <a href='http://www.opera.com/browser/' target='_blank'> + <img title='Opera' style='border-width:0px;height' src='./images/opera_ico.png' /> + </a> + </td> + </tr> + <tr style='height: 50px;'></tr> + <tr> + <td></td> + <form action='./' method='post'><td align='center'><input class='well_extra_button' type='submit' name='subAttentionAccept' value='OK'></td></form> + </tr> + </tbody> + </table> + </body> + "; +} + + +// ========================================================== // +// ========================================================== // + + + +?> \ No newline at end of file diff --git a/get_daily_piezo.php b/get_daily_piezo.php new file mode 100644 index 0000000..33d2bc6 --- /dev/null +++ b/get_daily_piezo.php @@ -0,0 +1,108 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); + +ini_set('soap.wsdl_cache_enabled',0); +ini_set('soap.wsdl_cache_ttl',0); +$cl = new SyndisConnector("http://172.22.64.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.22.64.101:3615/'); + +echo 'connected ...<br>'; + +function objectToArray($d) { + if (is_object($d)) { + $d = get_object_vars($d); + } + if (is_array($d)) { + return array_map(__FUNCTION__, $d); + } + else { + return $d; + } +} + +function sqlQuery($query) +{ + mysqli_query($GLOBALS['dbconn'],$query); +} + +function sqlGetResAsArray($query) +{ + $res=null; + $res = array(); + if(!$results = mysqli_query($GLOBALS['dbconn'],$query)){ + echo mysqli_error($GLOBALS['dbconn']); + return false; + } + for($i=0; $row=mysqli_fetch_assoc($results); $i++) + $res[$i]=$row; + return $res; +} +// ========================================================== // + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +$scriptDate = date("Y-m-d H:i:s"); + + +// wykonuje tylko dla godziny ZERO +$curHur = (int) date('H'); +if ($curHur<1) +{ +// ========================================================================================================================================================== // + $GLOBALS['dbconn'] = mysqli_connect("172.22.64.101", "root", "Mikronika123") or die ('cannot connect to db'); + mysqli_select_db($GLOBALS['dbconn'],"softspm"); + sqlQuery("SET NAMES utf8"); + sqlQuery("SET CHARACTER_SET utf8_general_ci"); + + unset($piezoArray); + $piezoArray = sqlGetResAsArray("select SRP_NAME from seg_reservoirs_piezometers,seg_dev_resources where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601 and DRS_RESOURCES_DIC_ID=941 and DRS_STATUS_DIC_ID=3 and SRP_MCF_ID=1500"); + + + unset($piezoWater); + foreach ($piezoArray as $tb) + $piezoWater[] = $tb['SRP_NAME']; + + unset($pz); + $pz = $cl->GetPiezometersDataAsArray($piezoWater); + + for ($i=0; $i<count($pz["piezometers"]); $i++) + { + if ($pz["piezometers"][$i]['staticWaterTable']['value']>0) + { + unset($pzIdArray); + $pzIdArray = sqlGetResAsArray("select DRS_ID from seg_reservoirs_piezometers,seg_dev_resources where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601 and SRP_NAME='".$pz["piezometers"][$i]['piezometer']['id']."'"); + + /* + echo'ID: '.$pz["piezometers"][$i]['piezometer']['id'].'<br/>'; + echo'VAL: '.$pz["piezometers"][$i]['staticWaterTable']['value'].'<br/>'; + echo'DATE: '.$pz["piezometers"][$i]['staticWaterTable']['date'].'<br/>'; + echo'FLAG: '.$pz["piezometers"][$i]['staticWaterTable']['flag'].'<br/>'; + */ + + sqlQuery("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$pzIdArray[0]['DRS_ID'].",DRD_RESOURCES_DETAIL=210,DRD_VALUE='".round($pz["piezometers"][$i]['staticWaterTable']['value'],2)."',DRD_DESCRIPTION='SYNDIS morning',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".date('Y-m-d')."'"); + + //echo'<br/>'; + //echo'<br/>'; + } + + } + + mysqli_close($GLOBALS['dbconn']); +// ========================================================================================================================================================== // +} + + +echo 'finish processing ...<br>'; + + +?> \ No newline at end of file diff --git a/his_data.php b/his_data.php new file mode 100644 index 0000000..3bfb60f --- /dev/null +++ b/his_data.php @@ -0,0 +1,89 @@ +<?php +require_once("./func.php"); +require_once("./dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +header('refresh: 1;'); +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + +unset($wellArray); +$wellArray = sqlGetResAsArray("select * from aaa_aaa_wells where STAT=0 order by WLL_NAME limit 20"); +//print_r($wellArray); +for($i=0; $i<count($wellArray); $i++) +//for($i=0; $i<1; $i++) +{ + unset($oldData); + unset($singleArray); + $valH1='null';$valH2='null';$valHD='null';$valHST='null';$valQ='null';$valIR='null';$valE='null';$valFI='null';$valPE='null';$valURS='null';$valV='null';$valH0S='null';$valDGN='null'; + + $singleArray = sqlGetResAsArray("select * from stp_stpar where stp_stpar_var in ('H1','H2','HD','HST','Q','IR','E','FI','PE','URS','V','H0S','DGN') and stp_stpar_stud='".$wellArray[$i]['WLL_NAME']."' order by stp_stpar_data"); + for($s=0; $s<count($singleArray); $s++) + { + if ($s==0) $oldData = $singleArray[$s]['stp_stpar_data']; + + if ($singleArray[$s]['stp_stpar_data'] != $oldData) + { + + + mysql_query(" + INSERT INTO rep_his_data_everyday_his SET + RHD_DRS_ID=".$wellArray[$i]['DRS_ID'].", + RHD_DATE='".$oldData."', + RHD_HST0_VAL=".$valH0S.", + RHD_HST_VAL=".$valHST.", + RHD_HD_VAL=".$valHD.", + RHD_Q_VAL=".$valQ.", + RHD_P1_VAL=".$valH1.", + RHD_P2_VAL=".$valH2.", + RHD_I_VAL=".$valIR.", + RHD_U_VAL=".$valURS.", + RHD_PE_VAL=".$valPE.", + RHD_COS_VAL=".$valFI.", + RHD_VM3_VAL=".$valV.", + RHD_DGN_VAL=".$valDGN.", + RHD_AUDIT_CD=now() + "); + + + $oldData = $singleArray[$s]['stp_stpar_data']; + $valH1='null';$valH2='null';$valHD='null';$valHST='null';$valQ='null';$valIR='null';$valE='null';$valFI='null';$valPE='null';$valURS='null';$valV='null';$valH0S='null';$valDGN='null'; + } + + if ($singleArray[$s]['stp_stpar_var'] == 'H1')$valH1 = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'H2') $valH2 = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'HD') $valHD = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'HST') $valHST = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'Q') $valQ = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'IR') $valIR = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'E') $valE = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'FI') $valFI = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'PE') $valPE = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'URS') $valURS = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'V') $valV = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'H0S') $valH0S = getFloatValue($singleArray[$s]['stp_stpar_val1']); + elseif ($singleArray[$s]['stp_stpar_var'] == 'DGN') $valDGN = getFloatValue($singleArray[$s]['stp_stpar_val1']); + + + + } + + + + mysql_query("UPDATE aaa_aaa_wells SET STAT=1 WHERE DRS_ID=".$wellArray[$i]['DRS_ID']); + + //select * from stp_stpar where stp_stpar_var in ('H1','H2','HD','HST','Q','IR','E','FI','PE','URS','V','H0S','DGN') and stp_stpar_stud='G50' order by stp_stpar_data + +// getParentAndValue4rep003($przelicz[$p]['DRS_ID']); + + + +} + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; + + +mysql_close($polacz); +?> \ No newline at end of file diff --git a/historia.php b/historia.php new file mode 100644 index 0000000..4e47458 --- /dev/null +++ b/historia.php @@ -0,0 +1,22 @@ +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +//$reArray = getAvgHistoricalData_everyday_his('RHD_I_VAL',4596,'2017-01-26','2017-03-26'); + +echo getQuery_everyday_his('2015-10-10 23:23:23','2017-06-10 23:23:23','where RHD_DRS_ID=17293'); + + +//print_r($reArray); +//echo $reArray; + +mysql_close($polacz); + + +//51.287500 diff --git a/images/Arrow-Back-2-icon.png b/images/Arrow-Back-2-icon.png new file mode 100644 index 0000000..7f6628a Binary files /dev/null and b/images/Arrow-Back-2-icon.png differ diff --git a/images/Arrow-Left-2-icon.png b/images/Arrow-Left-2-icon.png new file mode 100644 index 0000000..b7fb488 Binary files /dev/null and b/images/Arrow-Left-2-icon.png differ diff --git a/images/Arrow-Left-icon.png b/images/Arrow-Left-icon.png new file mode 100644 index 0000000..5c8bc82 Binary files /dev/null and b/images/Arrow-Left-icon.png differ diff --git a/images/Arrow-Next-icon.png b/images/Arrow-Next-icon.png new file mode 100644 index 0000000..4bce849 Binary files /dev/null and b/images/Arrow-Next-icon.png differ diff --git a/images/Arrow-Right-2-icon.png b/images/Arrow-Right-2-icon.png new file mode 100644 index 0000000..2a98dc7 Binary files /dev/null and b/images/Arrow-Right-2-icon.png differ diff --git a/images/Arrow-Right-icon.png b/images/Arrow-Right-icon.png new file mode 100644 index 0000000..97d6c49 Binary files /dev/null and b/images/Arrow-Right-icon.png differ diff --git a/images/Calendar-icon.png b/images/Calendar-icon.png new file mode 100644 index 0000000..b4c6857 Binary files /dev/null and b/images/Calendar-icon.png differ diff --git a/images/Eraser-2-icon.png b/images/Eraser-2-icon.png new file mode 100644 index 0000000..346f47f Binary files /dev/null and b/images/Eraser-2-icon.png differ diff --git a/images/File-PDF-icon.png b/images/File-PDF-icon.png new file mode 100644 index 0000000..0becb2e Binary files /dev/null and b/images/File-PDF-icon.png differ diff --git a/images/File-XLS-icon.png b/images/File-XLS-icon.png new file mode 100644 index 0000000..c7100a8 Binary files /dev/null and b/images/File-XLS-icon.png differ diff --git a/images/GG_SPM_BASE_english.png b/images/GG_SPM_BASE_english.png new file mode 100644 index 0000000..d14f969 Binary files /dev/null and b/images/GG_SPM_BASE_english.png differ diff --git a/images/GG_SPM_BASE_polish.png b/images/GG_SPM_BASE_polish.png new file mode 100644 index 0000000..305dc89 Binary files /dev/null and b/images/GG_SPM_BASE_polish.png differ diff --git a/images/GG_SPM_MIN_english.png b/images/GG_SPM_MIN_english.png new file mode 100644 index 0000000..fbe7bd4 Binary files /dev/null and b/images/GG_SPM_MIN_english.png differ diff --git a/images/GG_SPM_MIN_polish.png b/images/GG_SPM_MIN_polish.png new file mode 100644 index 0000000..bdaf264 Binary files /dev/null and b/images/GG_SPM_MIN_polish.png differ diff --git a/images/GG_SPM_OPT_english.png b/images/GG_SPM_OPT_english.png new file mode 100644 index 0000000..5f98209 Binary files /dev/null and b/images/GG_SPM_OPT_english.png differ diff --git a/images/GG_SPM_OPT_polish.png b/images/GG_SPM_OPT_polish.png new file mode 100644 index 0000000..553f6cb Binary files /dev/null and b/images/GG_SPM_OPT_polish.png differ diff --git a/images/GR_SPM_BASE_english.png b/images/GR_SPM_BASE_english.png new file mode 100644 index 0000000..df6ee50 Binary files /dev/null and b/images/GR_SPM_BASE_english.png differ diff --git a/images/GR_SPM_BASE_polish.png b/images/GR_SPM_BASE_polish.png new file mode 100644 index 0000000..682d096 Binary files /dev/null and b/images/GR_SPM_BASE_polish.png differ diff --git a/images/GR_SPM_MIN_english.png b/images/GR_SPM_MIN_english.png new file mode 100644 index 0000000..1dfc2fd Binary files /dev/null and b/images/GR_SPM_MIN_english.png differ diff --git a/images/GR_SPM_MIN_polish.png b/images/GR_SPM_MIN_polish.png new file mode 100644 index 0000000..1402e9a Binary files /dev/null and b/images/GR_SPM_MIN_polish.png differ diff --git a/images/GR_SPM_OPT_english.png b/images/GR_SPM_OPT_english.png new file mode 100644 index 0000000..d421f99 Binary files /dev/null and b/images/GR_SPM_OPT_english.png differ diff --git a/images/GR_SPM_OPT_polish.png b/images/GR_SPM_OPT_polish.png new file mode 100644 index 0000000..e146d84 Binary files /dev/null and b/images/GR_SPM_OPT_polish.png differ diff --git a/images/GY_SPM_BASE_english.png b/images/GY_SPM_BASE_english.png new file mode 100644 index 0000000..e0ddc2d Binary files /dev/null and b/images/GY_SPM_BASE_english.png differ diff --git a/images/GY_SPM_BASE_polish.png b/images/GY_SPM_BASE_polish.png new file mode 100644 index 0000000..4aa9c3b Binary files /dev/null and b/images/GY_SPM_BASE_polish.png differ diff --git a/images/GY_SPM_MIN_english.png b/images/GY_SPM_MIN_english.png new file mode 100644 index 0000000..51ec01d Binary files /dev/null and b/images/GY_SPM_MIN_english.png differ diff --git a/images/GY_SPM_MIN_polish.png b/images/GY_SPM_MIN_polish.png new file mode 100644 index 0000000..8858045 Binary files /dev/null and b/images/GY_SPM_MIN_polish.png differ diff --git a/images/GY_SPM_OPT_english.png b/images/GY_SPM_OPT_english.png new file mode 100644 index 0000000..ca52946 Binary files /dev/null and b/images/GY_SPM_OPT_english.png differ diff --git a/images/GY_SPM_OPT_polish.png b/images/GY_SPM_OPT_polish.png new file mode 100644 index 0000000..38862ab Binary files /dev/null and b/images/GY_SPM_OPT_polish.png differ diff --git a/images/RG_SPM_BASE_english.png b/images/RG_SPM_BASE_english.png new file mode 100644 index 0000000..9c94c39 Binary files /dev/null and b/images/RG_SPM_BASE_english.png differ diff --git a/images/RG_SPM_BASE_polish.png b/images/RG_SPM_BASE_polish.png new file mode 100644 index 0000000..0f7ae04 Binary files /dev/null and b/images/RG_SPM_BASE_polish.png differ diff --git a/images/RG_SPM_MIN_english.png b/images/RG_SPM_MIN_english.png new file mode 100644 index 0000000..da21dd6 Binary files /dev/null and b/images/RG_SPM_MIN_english.png differ diff --git a/images/RG_SPM_MIN_polish.png b/images/RG_SPM_MIN_polish.png new file mode 100644 index 0000000..fb5ad6f Binary files /dev/null and b/images/RG_SPM_MIN_polish.png differ diff --git a/images/RG_SPM_OPT_english.png b/images/RG_SPM_OPT_english.png new file mode 100644 index 0000000..a74a02f Binary files /dev/null and b/images/RG_SPM_OPT_english.png differ diff --git a/images/RG_SPM_OPT_polish.png b/images/RG_SPM_OPT_polish.png new file mode 100644 index 0000000..19b1ed9 Binary files /dev/null and b/images/RG_SPM_OPT_polish.png differ diff --git a/images/RR_SPM_BASE_english.png b/images/RR_SPM_BASE_english.png new file mode 100644 index 0000000..34d686e Binary files /dev/null and b/images/RR_SPM_BASE_english.png differ diff --git a/images/RR_SPM_BASE_polish.png b/images/RR_SPM_BASE_polish.png new file mode 100644 index 0000000..0c3fe40 Binary files /dev/null and b/images/RR_SPM_BASE_polish.png differ diff --git a/images/RR_SPM_MIN_english.png b/images/RR_SPM_MIN_english.png new file mode 100644 index 0000000..fbcd378 Binary files /dev/null and b/images/RR_SPM_MIN_english.png differ diff --git a/images/RR_SPM_MIN_polish.png b/images/RR_SPM_MIN_polish.png new file mode 100644 index 0000000..43db2ef Binary files /dev/null and b/images/RR_SPM_MIN_polish.png differ diff --git a/images/RR_SPM_OPT_english.png b/images/RR_SPM_OPT_english.png new file mode 100644 index 0000000..2f37cfe Binary files /dev/null and b/images/RR_SPM_OPT_english.png differ diff --git a/images/RR_SPM_OPT_polish.png b/images/RR_SPM_OPT_polish.png new file mode 100644 index 0000000..f304037 Binary files /dev/null and b/images/RR_SPM_OPT_polish.png differ diff --git a/images/RY_SPM_BASE_english.png b/images/RY_SPM_BASE_english.png new file mode 100644 index 0000000..012166c Binary files /dev/null and b/images/RY_SPM_BASE_english.png differ diff --git a/images/RY_SPM_BASE_polish.png b/images/RY_SPM_BASE_polish.png new file mode 100644 index 0000000..cb44d8a Binary files /dev/null and b/images/RY_SPM_BASE_polish.png differ diff --git a/images/RY_SPM_MIN_english.png b/images/RY_SPM_MIN_english.png new file mode 100644 index 0000000..7190b88 Binary files /dev/null and b/images/RY_SPM_MIN_english.png differ diff --git a/images/RY_SPM_MIN_polish.png b/images/RY_SPM_MIN_polish.png new file mode 100644 index 0000000..ebd2978 Binary files /dev/null and b/images/RY_SPM_MIN_polish.png differ diff --git a/images/RY_SPM_OPT_english.png b/images/RY_SPM_OPT_english.png new file mode 100644 index 0000000..75297a1 Binary files /dev/null and b/images/RY_SPM_OPT_english.png differ diff --git a/images/RY_SPM_OPT_polish.png b/images/RY_SPM_OPT_polish.png new file mode 100644 index 0000000..2bc8571 Binary files /dev/null and b/images/RY_SPM_OPT_polish.png differ diff --git a/images/SEGAP_polish.png b/images/SEGAP_polish.png new file mode 100644 index 0000000..ca67eda Binary files /dev/null and b/images/SEGAP_polish.png differ diff --git a/images/SMP_full.png b/images/SMP_full.png new file mode 100644 index 0000000..ca67eda Binary files /dev/null and b/images/SMP_full.png differ diff --git a/images/SMP_full_old.jpg b/images/SMP_full_old.jpg new file mode 100644 index 0000000..189ae4e Binary files /dev/null and b/images/SMP_full_old.jpg differ diff --git a/images/SPM_BASE_english.png b/images/SPM_BASE_english.png new file mode 100644 index 0000000..6f682fb Binary files /dev/null and b/images/SPM_BASE_english.png differ diff --git a/images/SPM_BASE_polish.png b/images/SPM_BASE_polish.png new file mode 100644 index 0000000..798cd4c Binary files /dev/null and b/images/SPM_BASE_polish.png differ diff --git a/images/SPM_FULL_polish.png b/images/SPM_FULL_polish.png new file mode 100644 index 0000000..c9a186a Binary files /dev/null and b/images/SPM_FULL_polish.png differ diff --git a/images/SPM_MIN_english.png b/images/SPM_MIN_english.png new file mode 100644 index 0000000..67c0333 Binary files /dev/null and b/images/SPM_MIN_english.png differ diff --git a/images/SPM_MIN_polish.png b/images/SPM_MIN_polish.png new file mode 100644 index 0000000..1599fa9 Binary files /dev/null and b/images/SPM_MIN_polish.png differ diff --git a/images/SPM_OPT_english.png b/images/SPM_OPT_english.png new file mode 100644 index 0000000..321527a Binary files /dev/null and b/images/SPM_OPT_english.png differ diff --git a/images/SPM_OPT_polish.png b/images/SPM_OPT_polish.png new file mode 100644 index 0000000..96f9adf Binary files /dev/null and b/images/SPM_OPT_polish.png differ diff --git a/images/SoftSPM.ico b/images/SoftSPM.ico new file mode 100644 index 0000000..b4605c1 Binary files /dev/null and b/images/SoftSPM.ico differ diff --git a/images/SoftSPM.png b/images/SoftSPM.png new file mode 100644 index 0000000..a3f53bc Binary files /dev/null and b/images/SoftSPM.png differ diff --git a/images/SoftSPM_bas.png b/images/SoftSPM_bas.png new file mode 100644 index 0000000..6a4eb4f Binary files /dev/null and b/images/SoftSPM_bas.png differ diff --git a/images/SoftSPM_ent.png b/images/SoftSPM_ent.png new file mode 100644 index 0000000..e7bc3e4 Binary files /dev/null and b/images/SoftSPM_ent.png differ diff --git a/images/SoftSPM_std.png b/images/SoftSPM_std.png new file mode 100644 index 0000000..1caac29 Binary files /dev/null and b/images/SoftSPM_std.png differ diff --git a/images/SoftTITLE.png b/images/SoftTITLE.png new file mode 100644 index 0000000..4fd90b9 Binary files /dev/null and b/images/SoftTITLE.png differ diff --git a/images/YG_SPM_BASE_english.png b/images/YG_SPM_BASE_english.png new file mode 100644 index 0000000..1cf0dfa Binary files /dev/null and b/images/YG_SPM_BASE_english.png differ diff --git a/images/YG_SPM_BASE_polish.png b/images/YG_SPM_BASE_polish.png new file mode 100644 index 0000000..a5fdf05 Binary files /dev/null and b/images/YG_SPM_BASE_polish.png differ diff --git a/images/YG_SPM_MIN_english.png b/images/YG_SPM_MIN_english.png new file mode 100644 index 0000000..df4db61 Binary files /dev/null and b/images/YG_SPM_MIN_english.png differ diff --git a/images/YG_SPM_MIN_polish.png b/images/YG_SPM_MIN_polish.png new file mode 100644 index 0000000..4424bd1 Binary files /dev/null and b/images/YG_SPM_MIN_polish.png differ diff --git a/images/YG_SPM_OPT_english.png b/images/YG_SPM_OPT_english.png new file mode 100644 index 0000000..c8a97b9 Binary files /dev/null and b/images/YG_SPM_OPT_english.png differ diff --git a/images/YG_SPM_OPT_polish.png b/images/YG_SPM_OPT_polish.png new file mode 100644 index 0000000..9246df2 Binary files /dev/null and b/images/YG_SPM_OPT_polish.png differ diff --git a/images/YR_SPM_BASE_english.png b/images/YR_SPM_BASE_english.png new file mode 100644 index 0000000..c99018d Binary files /dev/null and b/images/YR_SPM_BASE_english.png differ diff --git a/images/YR_SPM_BASE_polish.png b/images/YR_SPM_BASE_polish.png new file mode 100644 index 0000000..b35daee Binary files /dev/null and b/images/YR_SPM_BASE_polish.png differ diff --git a/images/YR_SPM_MIN_english.png b/images/YR_SPM_MIN_english.png new file mode 100644 index 0000000..6ea8812 Binary files /dev/null and b/images/YR_SPM_MIN_english.png differ diff --git a/images/YR_SPM_MIN_polish.png b/images/YR_SPM_MIN_polish.png new file mode 100644 index 0000000..0e21fff Binary files /dev/null and b/images/YR_SPM_MIN_polish.png differ diff --git a/images/YR_SPM_OPT_english.png b/images/YR_SPM_OPT_english.png new file mode 100644 index 0000000..2d1b250 Binary files /dev/null and b/images/YR_SPM_OPT_english.png differ diff --git a/images/YR_SPM_OPT_polish.png b/images/YR_SPM_OPT_polish.png new file mode 100644 index 0000000..f23cc42 Binary files /dev/null and b/images/YR_SPM_OPT_polish.png differ diff --git a/images/YY_SPM_BASE_english.png b/images/YY_SPM_BASE_english.png new file mode 100644 index 0000000..c2b1aa6 Binary files /dev/null and b/images/YY_SPM_BASE_english.png differ diff --git a/images/YY_SPM_BASE_polish.png b/images/YY_SPM_BASE_polish.png new file mode 100644 index 0000000..7a4c663 Binary files /dev/null and b/images/YY_SPM_BASE_polish.png differ diff --git a/images/YY_SPM_MIN_english.png b/images/YY_SPM_MIN_english.png new file mode 100644 index 0000000..f2b6b78 Binary files /dev/null and b/images/YY_SPM_MIN_english.png differ diff --git a/images/YY_SPM_MIN_polish.png b/images/YY_SPM_MIN_polish.png new file mode 100644 index 0000000..f04ee4b Binary files /dev/null and b/images/YY_SPM_MIN_polish.png differ diff --git a/images/YY_SPM_OPT_english.png b/images/YY_SPM_OPT_english.png new file mode 100644 index 0000000..e3fa9e1 Binary files /dev/null and b/images/YY_SPM_OPT_english.png differ diff --git a/images/YY_SPM_OPT_polish.png b/images/YY_SPM_OPT_polish.png new file mode 100644 index 0000000..71df10d Binary files /dev/null and b/images/YY_SPM_OPT_polish.png differ diff --git a/images/_polish.png b/images/_polish.png new file mode 100644 index 0000000..d4cf128 Binary files /dev/null and b/images/_polish.png differ diff --git a/images/_tlo.jpg b/images/_tlo.jpg new file mode 100644 index 0000000..c9ddbee Binary files /dev/null and b/images/_tlo.jpg differ diff --git a/images/a_test.png b/images/a_test.png new file mode 100644 index 0000000..69bc7e5 Binary files /dev/null and b/images/a_test.png differ diff --git a/images/add_ico.png b/images/add_ico.png new file mode 100644 index 0000000..6881c40 Binary files /dev/null and b/images/add_ico.png differ diff --git a/images/animated-arrow.gif b/images/animated-arrow.gif new file mode 100644 index 0000000..d889d3e Binary files /dev/null and b/images/animated-arrow.gif differ diff --git a/images/applications-icon.png b/images/applications-icon.png new file mode 100644 index 0000000..5de39f7 Binary files /dev/null and b/images/applications-icon.png differ diff --git a/images/arrows-down-ico.png b/images/arrows-down-ico.png new file mode 100644 index 0000000..0622539 Binary files /dev/null and b/images/arrows-down-ico.png differ diff --git a/images/arrows-up-ico.png b/images/arrows-up-ico.png new file mode 100644 index 0000000..d89df06 Binary files /dev/null and b/images/arrows-up-ico.png differ diff --git a/images/bg.jpg b/images/bg.jpg new file mode 100644 index 0000000..f27ff6c Binary files /dev/null and b/images/bg.jpg differ diff --git a/images/bin_ico.png b/images/bin_ico.png new file mode 100644 index 0000000..6e7d76e Binary files /dev/null and b/images/bin_ico.png differ diff --git a/images/blueMark.png b/images/blueMark.png new file mode 100644 index 0000000..b3fe69b Binary files /dev/null and b/images/blueMark.png differ diff --git a/images/bullet_green_16.png b/images/bullet_green_16.png new file mode 100644 index 0000000..8179fa6 Binary files /dev/null and b/images/bullet_green_16.png differ diff --git a/images/bullet_green_32.png b/images/bullet_green_32.png new file mode 100644 index 0000000..eddecda Binary files /dev/null and b/images/bullet_green_32.png differ diff --git a/images/bullet_grey_16.png b/images/bullet_grey_16.png new file mode 100644 index 0000000..73818ab Binary files /dev/null and b/images/bullet_grey_16.png differ diff --git a/images/bullet_grey_32.png b/images/bullet_grey_32.png new file mode 100644 index 0000000..52d1bcb Binary files /dev/null and b/images/bullet_grey_32.png differ diff --git a/images/bullet_red_16.png b/images/bullet_red_16.png new file mode 100644 index 0000000..c33f7b0 Binary files /dev/null and b/images/bullet_red_16.png differ diff --git a/images/bullet_red_32.png b/images/bullet_red_32.png new file mode 100644 index 0000000..96468ac Binary files /dev/null and b/images/bullet_red_32.png differ diff --git a/images/bullet_yellow_16.png b/images/bullet_yellow_16.png new file mode 100644 index 0000000..f22f0f0 Binary files /dev/null and b/images/bullet_yellow_16.png differ diff --git a/images/bullet_yellow_32.png b/images/bullet_yellow_32.png new file mode 100644 index 0000000..a23b0fb Binary files /dev/null and b/images/bullet_yellow_32.png differ diff --git a/images/cancel-16.png b/images/cancel-16.png new file mode 100644 index 0000000..a9be534 Binary files /dev/null and b/images/cancel-16.png differ diff --git a/images/cancel.png b/images/cancel.png new file mode 100644 index 0000000..3916656 Binary files /dev/null and b/images/cancel.png differ diff --git a/images/chart-icon.png b/images/chart-icon.png new file mode 100644 index 0000000..0fd784f Binary files /dev/null and b/images/chart-icon.png differ diff --git a/images/chrome_ico.png b/images/chrome_ico.png new file mode 100644 index 0000000..9bd9935 Binary files /dev/null and b/images/chrome_ico.png differ diff --git a/images/creator.jpg b/images/creator.jpg new file mode 100644 index 0000000..1778abb Binary files /dev/null and b/images/creator.jpg differ diff --git a/images/diag_error.png b/images/diag_error.png new file mode 100644 index 0000000..ae280bd Binary files /dev/null and b/images/diag_error.png differ diff --git a/images/diag_ok.png b/images/diag_ok.png new file mode 100644 index 0000000..d5e0720 Binary files /dev/null and b/images/diag_ok.png differ diff --git a/images/diag_warning.png b/images/diag_warning.png new file mode 100644 index 0000000..78a787b Binary files /dev/null and b/images/diag_warning.png differ diff --git a/images/divx_ico.png b/images/divx_ico.png new file mode 100644 index 0000000..4aa23e9 Binary files /dev/null and b/images/divx_ico.png differ diff --git a/images/edit.png b/images/edit.png new file mode 100644 index 0000000..046811e Binary files /dev/null and b/images/edit.png differ diff --git a/images/edit_black.png b/images/edit_black.png new file mode 100644 index 0000000..e440e17 Binary files /dev/null and b/images/edit_black.png differ diff --git a/images/en.png b/images/en.png new file mode 100644 index 0000000..f44e664 Binary files /dev/null and b/images/en.png differ diff --git a/images/english.png b/images/english.png new file mode 100644 index 0000000..581a8d0 Binary files /dev/null and b/images/english.png differ diff --git a/images/eraser-icon.png b/images/eraser-icon.png new file mode 100644 index 0000000..bc6a3fa Binary files /dev/null and b/images/eraser-icon.png differ diff --git a/images/excel_ico.png b/images/excel_ico.png new file mode 100644 index 0000000..96cbc55 Binary files /dev/null and b/images/excel_ico.png differ diff --git a/images/file-HTML-icon.png b/images/file-HTML-icon.png new file mode 100644 index 0000000..e199134 Binary files /dev/null and b/images/file-HTML-icon.png differ diff --git a/images/file_ico.png b/images/file_ico.png new file mode 100644 index 0000000..081b382 Binary files /dev/null and b/images/file_ico.png differ diff --git a/images/firefox_ico.png b/images/firefox_ico.png new file mode 100644 index 0000000..0ccf90a Binary files /dev/null and b/images/firefox_ico.png differ diff --git a/images/generate_report_16.png b/images/generate_report_16.png new file mode 100644 index 0000000..1536733 Binary files /dev/null and b/images/generate_report_16.png differ diff --git a/images/generate_report_32.png b/images/generate_report_32.png new file mode 100644 index 0000000..8fac1b2 Binary files /dev/null and b/images/generate_report_32.png differ diff --git a/images/ger.png b/images/ger.png new file mode 100644 index 0000000..8749a0c Binary files /dev/null and b/images/ger.png differ diff --git a/images/german.png b/images/german.png new file mode 100644 index 0000000..577f98b Binary files /dev/null and b/images/german.png differ diff --git a/images/greenButtonOFF.png b/images/greenButtonOFF.png new file mode 100644 index 0000000..120709c Binary files /dev/null and b/images/greenButtonOFF.png differ diff --git a/images/greenButtonON.png b/images/greenButtonON.png new file mode 100644 index 0000000..b7feb95 Binary files /dev/null and b/images/greenButtonON.png differ diff --git a/images/greenMarkOFF.png b/images/greenMarkOFF.png new file mode 100644 index 0000000..5f5ff04 Binary files /dev/null and b/images/greenMarkOFF.png differ diff --git a/images/greenMarkON.png b/images/greenMarkON.png new file mode 100644 index 0000000..769de11 Binary files /dev/null and b/images/greenMarkON.png differ diff --git a/images/greenPiez.png b/images/greenPiez.png new file mode 100644 index 0000000..3192790 Binary files /dev/null and b/images/greenPiez.png differ diff --git a/images/greenRes.png b/images/greenRes.png new file mode 100644 index 0000000..d20ea2c Binary files /dev/null and b/images/greenRes.png differ diff --git a/images/greenRes_mini.png b/images/greenRes_mini.png new file mode 100644 index 0000000..252ec5d Binary files /dev/null and b/images/greenRes_mini.png differ diff --git a/images/green_ONOFF.png b/images/green_ONOFF.png new file mode 100644 index 0000000..c8206e2 Binary files /dev/null and b/images/green_ONOFF.png differ diff --git a/images/green_ONOFF_ON.png b/images/green_ONOFF_ON.png new file mode 100644 index 0000000..66adb9f Binary files /dev/null and b/images/green_ONOFF_ON.png differ diff --git a/images/green_off.png b/images/green_off.png new file mode 100644 index 0000000..d2ceef5 Binary files /dev/null and b/images/green_off.png differ diff --git a/images/green_off_A.png b/images/green_off_A.png new file mode 100644 index 0000000..d39b43b Binary files /dev/null and b/images/green_off_A.png differ diff --git a/images/green_off_M.png b/images/green_off_M.png new file mode 100644 index 0000000..9aac776 Binary files /dev/null and b/images/green_off_M.png differ diff --git a/images/green_off_min.png b/images/green_off_min.png new file mode 100644 index 0000000..b5c2940 Binary files /dev/null and b/images/green_off_min.png differ diff --git a/images/green_on.png b/images/green_on.png new file mode 100644 index 0000000..baefd23 Binary files /dev/null and b/images/green_on.png differ diff --git a/images/green_on_A.png b/images/green_on_A.png new file mode 100644 index 0000000..b6d74c7 Binary files /dev/null and b/images/green_on_A.png differ diff --git a/images/green_on_M.png b/images/green_on_M.png new file mode 100644 index 0000000..b0d98f9 Binary files /dev/null and b/images/green_on_M.png differ diff --git a/images/green_on_min.png b/images/green_on_min.png new file mode 100644 index 0000000..c20c93c Binary files /dev/null and b/images/green_on_min.png differ diff --git a/images/green_piezo.png b/images/green_piezo.png new file mode 100644 index 0000000..6dbed1e Binary files /dev/null and b/images/green_piezo.png differ diff --git a/images/green_res.png b/images/green_res.png new file mode 100644 index 0000000..c8f672a Binary files /dev/null and b/images/green_res.png differ diff --git a/images/green_res_min.png b/images/green_res_min.png new file mode 100644 index 0000000..676be17 Binary files /dev/null and b/images/green_res_min.png differ diff --git a/images/green_stac_off.png b/images/green_stac_off.png new file mode 100644 index 0000000..fb91a18 Binary files /dev/null and b/images/green_stac_off.png differ diff --git a/images/green_stac_off_A.png b/images/green_stac_off_A.png new file mode 100644 index 0000000..b24ab13 Binary files /dev/null and b/images/green_stac_off_A.png differ diff --git a/images/green_stac_off_M.png b/images/green_stac_off_M.png new file mode 100644 index 0000000..a688c6a Binary files /dev/null and b/images/green_stac_off_M.png differ diff --git a/images/green_stac_on.png b/images/green_stac_on.png new file mode 100644 index 0000000..7852f52 Binary files /dev/null and b/images/green_stac_on.png differ diff --git a/images/green_stac_on_A.png b/images/green_stac_on_A.png new file mode 100644 index 0000000..9d2af85 Binary files /dev/null and b/images/green_stac_on_A.png differ diff --git a/images/green_stac_on_M.png b/images/green_stac_on_M.png new file mode 100644 index 0000000..5899923 Binary files /dev/null and b/images/green_stac_on_M.png differ diff --git a/images/greyMark.png b/images/greyMark.png new file mode 100644 index 0000000..de6809e Binary files /dev/null and b/images/greyMark.png differ diff --git a/images/icons_black.png b/images/icons_black.png new file mode 100644 index 0000000..90acfdb Binary files /dev/null and b/images/icons_black.png differ diff --git a/images/iexplorer_ico.png b/images/iexplorer_ico.png new file mode 100644 index 0000000..e6658b9 Binary files /dev/null and b/images/iexplorer_ico.png differ diff --git a/images/load_google_map.png b/images/load_google_map.png new file mode 100644 index 0000000..b1bd4e3 Binary files /dev/null and b/images/load_google_map.png differ diff --git a/images/loader.gif b/images/loader.gif new file mode 100644 index 0000000..180c87c Binary files /dev/null and b/images/loader.gif differ diff --git a/images/logged.png b/images/logged.png new file mode 100644 index 0000000..d40736c Binary files /dev/null and b/images/logged.png differ diff --git a/images/logged_fill.png b/images/logged_fill.png new file mode 100644 index 0000000..d3e2815 Binary files /dev/null and b/images/logged_fill.png differ diff --git a/images/logged_left.png b/images/logged_left.png new file mode 100644 index 0000000..bbc641f Binary files /dev/null and b/images/logged_left.png differ diff --git a/images/logged_middle.png b/images/logged_middle.png new file mode 100644 index 0000000..02487dc Binary files /dev/null and b/images/logged_middle.png differ diff --git a/images/logged_right.png b/images/logged_right.png new file mode 100644 index 0000000..ea89b3a Binary files /dev/null and b/images/logged_right.png differ diff --git a/images/logo_head_pge.jpg b/images/logo_head_pge.jpg new file mode 100644 index 0000000..33794b1 Binary files /dev/null and b/images/logo_head_pge.jpg differ diff --git a/images/logo_head_pge.png b/images/logo_head_pge.png new file mode 100644 index 0000000..3ce9303 Binary files /dev/null and b/images/logo_head_pge.png differ diff --git a/images/logo_pge.gif b/images/logo_pge.gif new file mode 100644 index 0000000..0932a6d Binary files /dev/null and b/images/logo_pge.gif differ diff --git a/images/main.png b/images/main.png new file mode 100644 index 0000000..8b71f21 Binary files /dev/null and b/images/main.png differ diff --git a/images/menu.png b/images/menu.png new file mode 100644 index 0000000..8380a85 Binary files /dev/null and b/images/menu.png differ diff --git a/images/offStatus_ico.png b/images/offStatus_ico.png new file mode 100644 index 0000000..1052a85 Binary files /dev/null and b/images/offStatus_ico.png differ diff --git a/images/off_icon.png b/images/off_icon.png new file mode 100644 index 0000000..a9ba1d6 Binary files /dev/null and b/images/off_icon.png differ diff --git a/images/onStatus_ico.png b/images/onStatus_ico.png new file mode 100644 index 0000000..7210197 Binary files /dev/null and b/images/onStatus_ico.png differ diff --git a/images/on_icon.png b/images/on_icon.png new file mode 100644 index 0000000..f467733 Binary files /dev/null and b/images/on_icon.png differ diff --git a/images/opera_ico.png b/images/opera_ico.png new file mode 100644 index 0000000..41b5f14 Binary files /dev/null and b/images/opera_ico.png differ diff --git a/images/order_step_1.png b/images/order_step_1.png new file mode 100644 index 0000000..d154722 Binary files /dev/null and b/images/order_step_1.png differ diff --git a/images/order_step_2.png b/images/order_step_2.png new file mode 100644 index 0000000..49f9839 Binary files /dev/null and b/images/order_step_2.png differ diff --git a/images/order_step_3.png b/images/order_step_3.png new file mode 100644 index 0000000..e95c162 Binary files /dev/null and b/images/order_step_3.png differ diff --git a/images/padlock-lock-icon.png b/images/padlock-lock-icon.png new file mode 100644 index 0000000..2548275 Binary files /dev/null and b/images/padlock-lock-icon.png differ diff --git a/images/pdf-icon.png b/images/pdf-icon.png new file mode 100644 index 0000000..47516a2 Binary files /dev/null and b/images/pdf-icon.png differ diff --git a/images/pdf_ico.png b/images/pdf_ico.png new file mode 100644 index 0000000..b6c35d9 Binary files /dev/null and b/images/pdf_ico.png differ diff --git a/images/photo_ico.png b/images/photo_ico.png new file mode 100644 index 0000000..118332f Binary files /dev/null and b/images/photo_ico.png differ diff --git a/images/pl.png b/images/pl.png new file mode 100644 index 0000000..16fc4bd Binary files /dev/null and b/images/pl.png differ diff --git a/images/polish.png b/images/polish.png new file mode 100644 index 0000000..16fc4bd Binary files /dev/null and b/images/polish.png differ diff --git a/images/power_off.png b/images/power_off.png new file mode 100644 index 0000000..5932556 Binary files /dev/null and b/images/power_off.png differ diff --git a/images/power_on.png b/images/power_on.png new file mode 100644 index 0000000..0efe7c3 Binary files /dev/null and b/images/power_on.png differ diff --git a/images/ppoint_ico.png b/images/ppoint_ico.png new file mode 100644 index 0000000..e766b9c Binary files /dev/null and b/images/ppoint_ico.png differ diff --git a/images/preloader.gif b/images/preloader.gif new file mode 100644 index 0000000..974e8cf Binary files /dev/null and b/images/preloader.gif differ diff --git a/images/print-icon.png b/images/print-icon.png new file mode 100644 index 0000000..dc81530 Binary files /dev/null and b/images/print-icon.png differ diff --git a/images/printer-icon.png b/images/printer-icon.png new file mode 100644 index 0000000..2a8c5a4 Binary files /dev/null and b/images/printer-icon.png differ diff --git a/images/ps_step_1.png b/images/ps_step_1.png new file mode 100644 index 0000000..f83cbf8 Binary files /dev/null and b/images/ps_step_1.png differ diff --git a/images/ps_step_2.png b/images/ps_step_2.png new file mode 100644 index 0000000..aee90fe Binary files /dev/null and b/images/ps_step_2.png differ diff --git a/images/ps_step_3.png b/images/ps_step_3.png new file mode 100644 index 0000000..417eb3b Binary files /dev/null and b/images/ps_step_3.png differ diff --git a/images/ps_step_4.png b/images/ps_step_4.png new file mode 100644 index 0000000..3824ddf Binary files /dev/null and b/images/ps_step_4.png differ diff --git a/images/ps_step_5.png b/images/ps_step_5.png new file mode 100644 index 0000000..c015ae6 Binary files /dev/null and b/images/ps_step_5.png differ diff --git a/images/pumpOFF.png b/images/pumpOFF.png new file mode 100644 index 0000000..4487cee Binary files /dev/null and b/images/pumpOFF.png differ diff --git a/images/pumpON.png b/images/pumpON.png new file mode 100644 index 0000000..4ccd83b Binary files /dev/null and b/images/pumpON.png differ diff --git a/images/question - Kopia.png b/images/question - Kopia.png new file mode 100644 index 0000000..759a07b Binary files /dev/null and b/images/question - Kopia.png differ diff --git a/images/question.png b/images/question.png new file mode 100644 index 0000000..a8318d3 Binary files /dev/null and b/images/question.png differ diff --git a/images/question_ico.png b/images/question_ico.png new file mode 100644 index 0000000..22ee7d1 Binary files /dev/null and b/images/question_ico.png differ diff --git a/images/r_off.png b/images/r_off.png new file mode 100644 index 0000000..fc0a7fe Binary files /dev/null and b/images/r_off.png differ diff --git a/images/redButtonOFF.png b/images/redButtonOFF.png new file mode 100644 index 0000000..5e6e05d Binary files /dev/null and b/images/redButtonOFF.png differ diff --git a/images/redButtonON.png b/images/redButtonON.png new file mode 100644 index 0000000..71bc383 Binary files /dev/null and b/images/redButtonON.png differ diff --git a/images/redMarkOFF.png b/images/redMarkOFF.png new file mode 100644 index 0000000..f6365ee Binary files /dev/null and b/images/redMarkOFF.png differ diff --git a/images/redMarkON.png b/images/redMarkON.png new file mode 100644 index 0000000..2b71e47 Binary files /dev/null and b/images/redMarkON.png differ diff --git a/images/redPiez.png b/images/redPiez.png new file mode 100644 index 0000000..913c706 Binary files /dev/null and b/images/redPiez.png differ diff --git a/images/redRes.png b/images/redRes.png new file mode 100644 index 0000000..8ef1625 Binary files /dev/null and b/images/redRes.png differ diff --git a/images/redRes_mini.png b/images/redRes_mini.png new file mode 100644 index 0000000..e034438 Binary files /dev/null and b/images/redRes_mini.png differ diff --git a/images/red_ONOFF.png b/images/red_ONOFF.png new file mode 100644 index 0000000..a8bf219 Binary files /dev/null and b/images/red_ONOFF.png differ diff --git a/images/red_ONOFF_OFF.png b/images/red_ONOFF_OFF.png new file mode 100644 index 0000000..ac7d8c7 Binary files /dev/null and b/images/red_ONOFF_OFF.png differ diff --git a/images/red_off.png b/images/red_off.png new file mode 100644 index 0000000..905f215 Binary files /dev/null and b/images/red_off.png differ diff --git a/images/red_off_A.png b/images/red_off_A.png new file mode 100644 index 0000000..7de037a Binary files /dev/null and b/images/red_off_A.png differ diff --git a/images/red_off_M.png b/images/red_off_M.png new file mode 100644 index 0000000..f3ef25a Binary files /dev/null and b/images/red_off_M.png differ diff --git a/images/red_on.png b/images/red_on.png new file mode 100644 index 0000000..4faaaf1 Binary files /dev/null and b/images/red_on.png differ diff --git a/images/red_on_A.png b/images/red_on_A.png new file mode 100644 index 0000000..767df93 Binary files /dev/null and b/images/red_on_A.png differ diff --git a/images/red_on_M.png b/images/red_on_M.png new file mode 100644 index 0000000..cdb8926 Binary files /dev/null and b/images/red_on_M.png differ diff --git a/images/red_piezo.png b/images/red_piezo.png new file mode 100644 index 0000000..796dd84 Binary files /dev/null and b/images/red_piezo.png differ diff --git a/images/red_res.png b/images/red_res.png new file mode 100644 index 0000000..64ba62e Binary files /dev/null and b/images/red_res.png differ diff --git a/images/red_stac_off.png b/images/red_stac_off.png new file mode 100644 index 0000000..145ca17 Binary files /dev/null and b/images/red_stac_off.png differ diff --git a/images/red_stac_off_A.png b/images/red_stac_off_A.png new file mode 100644 index 0000000..2384a11 Binary files /dev/null and b/images/red_stac_off_A.png differ diff --git a/images/red_stac_off_M.png b/images/red_stac_off_M.png new file mode 100644 index 0000000..f9d7ae3 Binary files /dev/null and b/images/red_stac_off_M.png differ diff --git a/images/red_stac_on.png b/images/red_stac_on.png new file mode 100644 index 0000000..e9e1e3e Binary files /dev/null and b/images/red_stac_on.png differ diff --git a/images/red_stac_on_A.png b/images/red_stac_on_A.png new file mode 100644 index 0000000..d4eaa3c Binary files /dev/null and b/images/red_stac_on_A.png differ diff --git a/images/red_stac_on_M.png b/images/red_stac_on_M.png new file mode 100644 index 0000000..f12ab39 Binary files /dev/null and b/images/red_stac_on_M.png differ diff --git a/images/red_stac_piezo.png b/images/red_stac_piezo.png new file mode 100644 index 0000000..796dd84 Binary files /dev/null and b/images/red_stac_piezo.png differ diff --git a/images/refresh.png b/images/refresh.png new file mode 100644 index 0000000..3dc5197 Binary files /dev/null and b/images/refresh.png differ diff --git a/images/remove_ico.png b/images/remove_ico.png new file mode 100644 index 0000000..a3f5d74 Binary files /dev/null and b/images/remove_ico.png differ diff --git a/images/save-icon.png b/images/save-icon.png new file mode 100644 index 0000000..3451103 Binary files /dev/null and b/images/save-icon.png differ diff --git a/images/save_to_db_16.png b/images/save_to_db_16.png new file mode 100644 index 0000000..6e11a47 Binary files /dev/null and b/images/save_to_db_16.png differ diff --git a/images/save_to_db_32.png b/images/save_to_db_32.png new file mode 100644 index 0000000..595aa62 Binary files /dev/null and b/images/save_to_db_32.png differ diff --git a/images/search-icon.png b/images/search-icon.png new file mode 100644 index 0000000..258b3f2 Binary files /dev/null and b/images/search-icon.png differ diff --git a/images/softSPM.JPG b/images/softSPM.JPG new file mode 100644 index 0000000..0d8effb Binary files /dev/null and b/images/softSPM.JPG differ diff --git a/images/sort_down.png b/images/sort_down.png new file mode 100644 index 0000000..a1f382f Binary files /dev/null and b/images/sort_down.png differ diff --git a/images/sort_up.png b/images/sort_up.png new file mode 100644 index 0000000..96d7837 Binary files /dev/null and b/images/sort_up.png differ diff --git a/images/spm_logo_new.png b/images/spm_logo_new.png new file mode 100644 index 0000000..cbd9435 Binary files /dev/null and b/images/spm_logo_new.png differ diff --git a/images/stan_OFF.png b/images/stan_OFF.png new file mode 100644 index 0000000..0b15674 Binary files /dev/null and b/images/stan_OFF.png differ diff --git a/images/stan_ON.png b/images/stan_ON.png new file mode 100644 index 0000000..2b04c1b Binary files /dev/null and b/images/stan_ON.png differ diff --git a/images/switch.png b/images/switch.png new file mode 100644 index 0000000..7accb6a Binary files /dev/null and b/images/switch.png differ diff --git a/images/systemOnLoginName.png b/images/systemOnLoginName.png new file mode 100644 index 0000000..f008630 Binary files /dev/null and b/images/systemOnLoginName.png differ diff --git a/images/tlo.jpg b/images/tlo.jpg new file mode 100644 index 0000000..0d8effb Binary files /dev/null and b/images/tlo.jpg differ diff --git a/images/tlo.png b/images/tlo.png new file mode 100644 index 0000000..f5b1a97 Binary files /dev/null and b/images/tlo.png differ diff --git a/images/traffic.png b/images/traffic.png new file mode 100644 index 0000000..75215fd Binary files /dev/null and b/images/traffic.png differ diff --git a/images/traffic_g.png b/images/traffic_g.png new file mode 100644 index 0000000..316c320 Binary files /dev/null and b/images/traffic_g.png differ diff --git a/images/traffic_r.png b/images/traffic_r.png new file mode 100644 index 0000000..5ba1ab6 Binary files /dev/null and b/images/traffic_r.png differ diff --git a/images/treemenu_add.png b/images/treemenu_add.png new file mode 100644 index 0000000..28ed347 Binary files /dev/null and b/images/treemenu_add.png differ diff --git a/images/treemenu_delete.png b/images/treemenu_delete.png new file mode 100644 index 0000000..9d51fcc Binary files /dev/null and b/images/treemenu_delete.png differ diff --git a/images/treemenu_edit.png b/images/treemenu_edit.png new file mode 100644 index 0000000..fd413f4 Binary files /dev/null and b/images/treemenu_edit.png differ diff --git a/images/treemenu_main_add.png b/images/treemenu_main_add.png new file mode 100644 index 0000000..f531221 Binary files /dev/null and b/images/treemenu_main_add.png differ diff --git a/images/treemenu_minus.png b/images/treemenu_minus.png new file mode 100644 index 0000000..4047dd8 Binary files /dev/null and b/images/treemenu_minus.png differ diff --git a/images/treemenu_plus.png b/images/treemenu_plus.png new file mode 100644 index 0000000..3e8b4bf Binary files /dev/null and b/images/treemenu_plus.png differ diff --git a/images/user-icon.png b/images/user-icon.png new file mode 100644 index 0000000..71de6b9 Binary files /dev/null and b/images/user-icon.png differ diff --git a/images/valve - Kopia.png b/images/valve - Kopia.png new file mode 100644 index 0000000..da33888 Binary files /dev/null and b/images/valve - Kopia.png differ diff --git a/images/valve.jpg b/images/valve.jpg new file mode 100644 index 0000000..187f69e Binary files /dev/null and b/images/valve.jpg differ diff --git a/images/valve.png b/images/valve.png new file mode 100644 index 0000000..614ea08 Binary files /dev/null and b/images/valve.png differ diff --git a/images/valve_close.jpg b/images/valve_close.jpg new file mode 100644 index 0000000..d59cb57 Binary files /dev/null and b/images/valve_close.jpg differ diff --git a/images/valve_close.png b/images/valve_close.png new file mode 100644 index 0000000..4ff7fa6 Binary files /dev/null and b/images/valve_close.png differ diff --git a/images/valve_open.jpg b/images/valve_open.jpg new file mode 100644 index 0000000..d4873ec Binary files /dev/null and b/images/valve_open.jpg differ diff --git a/images/valve_open.png b/images/valve_open.png new file mode 100644 index 0000000..e4c3a79 Binary files /dev/null and b/images/valve_open.png differ diff --git a/images/warning.png b/images/warning.png new file mode 100644 index 0000000..5177258 Binary files /dev/null and b/images/warning.png differ diff --git a/images/well_off.png b/images/well_off.png new file mode 100644 index 0000000..4ae21cf Binary files /dev/null and b/images/well_off.png differ diff --git a/images/well_on.png b/images/well_on.png new file mode 100644 index 0000000..8fbb4cb Binary files /dev/null and b/images/well_on.png differ diff --git a/images/word_ico.png b/images/word_ico.png new file mode 100644 index 0000000..2578f65 Binary files /dev/null and b/images/word_ico.png differ diff --git a/images/xls-icon.png b/images/xls-icon.png new file mode 100644 index 0000000..93d725c Binary files /dev/null and b/images/xls-icon.png differ diff --git a/images/yellowMarkOFF.png b/images/yellowMarkOFF.png new file mode 100644 index 0000000..8c20fa5 Binary files /dev/null and b/images/yellowMarkOFF.png differ diff --git a/images/yellowMarkON.png b/images/yellowMarkON.png new file mode 100644 index 0000000..27acc04 Binary files /dev/null and b/images/yellowMarkON.png differ diff --git a/images/yellowPiez.png b/images/yellowPiez.png new file mode 100644 index 0000000..94d5965 Binary files /dev/null and b/images/yellowPiez.png differ diff --git a/images/yellowRes.png b/images/yellowRes.png new file mode 100644 index 0000000..ce2f011 Binary files /dev/null and b/images/yellowRes.png differ diff --git a/images/yellowRes_mini.png b/images/yellowRes_mini.png new file mode 100644 index 0000000..c8b16c1 Binary files /dev/null and b/images/yellowRes_mini.png differ diff --git a/images/yellow_off.png b/images/yellow_off.png new file mode 100644 index 0000000..1187cf6 Binary files /dev/null and b/images/yellow_off.png differ diff --git a/images/yellow_off_A.png b/images/yellow_off_A.png new file mode 100644 index 0000000..80bb0d8 Binary files /dev/null and b/images/yellow_off_A.png differ diff --git a/images/yellow_off_M.png b/images/yellow_off_M.png new file mode 100644 index 0000000..1e64983 Binary files /dev/null and b/images/yellow_off_M.png differ diff --git a/images/yellow_on.png b/images/yellow_on.png new file mode 100644 index 0000000..77f24d4 Binary files /dev/null and b/images/yellow_on.png differ diff --git a/images/yellow_on_A.png b/images/yellow_on_A.png new file mode 100644 index 0000000..3a09ea3 Binary files /dev/null and b/images/yellow_on_A.png differ diff --git a/images/yellow_on_M.png b/images/yellow_on_M.png new file mode 100644 index 0000000..b8fc302 Binary files /dev/null and b/images/yellow_on_M.png differ diff --git a/images/yellow_piezo.png b/images/yellow_piezo.png new file mode 100644 index 0000000..bff08e1 Binary files /dev/null and b/images/yellow_piezo.png differ diff --git a/images/yellow_res.png b/images/yellow_res.png new file mode 100644 index 0000000..ca6c67d Binary files /dev/null and b/images/yellow_res.png differ diff --git a/images/yellow_stac_off.png b/images/yellow_stac_off.png new file mode 100644 index 0000000..54dbdeb Binary files /dev/null and b/images/yellow_stac_off.png differ diff --git a/images/yellow_stac_off_A.png b/images/yellow_stac_off_A.png new file mode 100644 index 0000000..ea32ac3 Binary files /dev/null and b/images/yellow_stac_off_A.png differ diff --git a/images/yellow_stac_off_M.png b/images/yellow_stac_off_M.png new file mode 100644 index 0000000..5d332fe Binary files /dev/null and b/images/yellow_stac_off_M.png differ diff --git a/images/yellow_stac_on.png b/images/yellow_stac_on.png new file mode 100644 index 0000000..e707cf3 Binary files /dev/null and b/images/yellow_stac_on.png differ diff --git a/images/yellow_stac_on_A.png b/images/yellow_stac_on_A.png new file mode 100644 index 0000000..72ce007 Binary files /dev/null and b/images/yellow_stac_on_A.png differ diff --git a/images/yellow_stac_on_M.png b/images/yellow_stac_on_M.png new file mode 100644 index 0000000..e514f54 Binary files /dev/null and b/images/yellow_stac_on_M.png differ diff --git a/images/zapis_danych_dyn.gif b/images/zapis_danych_dyn.gif new file mode 100644 index 0000000..fa8aa7c Binary files /dev/null and b/images/zapis_danych_dyn.gif differ diff --git a/index.php b/index.php new file mode 100644 index 0000000..089bb75 --- /dev/null +++ b/index.php @@ -0,0 +1,435 @@ +<?PHP session_start(); +//setcookie ("odwiedz", "jest", time()+600); +if ($_GET['evnt']=='out') { unset($_SESSION['user']); session_destroy();} +//Sprawdza, czy nie został przełączony jakiś inny użytkownik. Jeśli tak, to czyście zmianne sesyjne. +// =========================================================================================================== // +if (!empty($_GET['auth']) && $_GET['auth']!=$_SESSION['syndis_auth']){ unset($_SESSION['user']); $_SESSION = array();} + + +// =========================================================================================================== // +?> +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + +<link rel="shortcut icon" href="./images/SoftSPM.ico"> +<LINK href="./style/theme.css" type="text/css" rel="stylesheet"> +<LINK href="./style/style.css" type="text/css" rel="stylesheet"> +<LINK href="./style/topmenu.css" type="text/css" rel="stylesheet"> +<LINK href="./style/tooltip.css" type="text/css" rel="stylesheet"> +<LINK href="./style/cointainers.css" type="text/css" rel="stylesheet"> +<LINK href="./style/map_tooltip.css" type="text/css" rel="stylesheet"> +<LINK href="./style/tables.css" type="text/css" rel="stylesheet"> +<LINK href="./style/links.css" type="text/css" rel="stylesheet"> +<LINK href="./style/forms.css" type="text/css" rel="stylesheet"> +<LINK href="./style/multi-select.css" type="text/css" rel="stylesheet"> +<link rel="stylesheet" href="./style/sweetalert.css"> +<link rel="stylesheet" href="./style/preloader.css"> +<link rel="stylesheet" href="./datepicker/images/jquery-ui.css"> +<link rel="stylesheet" href="./datepicker/images/style.css"> +<script src="./datepicker/js/jquery-1.9.1.js"></script> +<script src="./datepicker/js/jquery-ui.js"></script> +<script src="./datepicker/js/jquery.multi-select.js"></script> +<script src="./js/jquery.multi-select.js" type="text/javascript"></script> +<script src="./js/application.js" type="text/javascript"></script> +<script src="./js/jquery.validate.js"></script> +<script src="./js/myValidations.js" type="text/javascript"></script> +<script src="./js/dynamicForms.js"></script> +<script src="./js/sweetalert.min.js"></script> + + +<TITLE>..:: SoftSPM ::..</TITLE> +</HEAD> + +<?php +// sprawdza rodzaj i wersje przeglądarki +//if (empty($_SESSION['attention'])) if (checkYourBrowser()==1) $_SESSION['attention']='accept'; +//if ((empty($_SESSION['attention']) && $_POST['subAttentionAccept']=='OK') || $_POST['in_subOK']==" ok ") $_SESSION['attention']='accept'; +//if (empty($_SESSION['attention'])) +// showBrowserAttention(); +// ======================================== +//else +//{ +?> + +<BODY style="background-repeat: repeat-x;" BACKGROUND="./images/bg.jpg" > + + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + +//usuwa zmienne sesyjne, jeśli otwarto nowe okno +if(!empty($_GET['auth'])) +{ + delSearchSessionData(); + $_SESSION['syndis_close_window']=600; + //echo('<script>sweetAlert("Ważna informacja!", "W celu uniknięcia potencjalnych błędów proszę zamknąć wcześniej pootwierane okna systemu SoftSPM. Proszę pracować tylko i wyłącznie na aktualnie otwartej karcie! Niedostosowanie się do niniejszego komunikatu może generować błędy w systemie.", "warning");</script>'); +} + + + + + +// sprawdza, czy URL jest skierowany z SYNDISA +if (!empty($_GET['auth']) && !$_SESSION['user']) +{ + $_SESSION['active_automation_wells']= getActiveAutomationWells(); + + if ($_GET['auth']=="6e19274776a47c204d6b412756a60d78") + usrLoginAndSiteAccess("syndis", "syndis", "polish", "SoftSPM_bas"); + else + { + $wynik = mysql_query("select USR_USERNAME,md5(USR_USERNAME) ATH from sys_users where USR_STATUS='1'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $uName=$r["USR_USERNAME"]; + $authMd5=$r["ATH"]; + + if ($_GET['auth']==$authMd5) + { + usrLoginAndSiteAccess($uName, $uName.".123", "polish", "SoftSPM_bas"); + $_SESSION['syndis_auth']=$authMd5; + + // pobiera informacje o dostępie do regionu + $access_reg=""; $reg_count=1; + $wynik_reg = mysql_query("select URG_DESC from sys_users_regions where URG_USR_ID=".$_SESSION['user_id']); + if($wynik_reg)while ($r_reg = mysql_fetch_array($wynik_reg)) + { + if ($reg_count==1) { $access_reg = $r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_1'] = $r_reg["URG_DESC"]; } + else if ($reg_count==2) { $access_reg .= ";".$r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_2'] = $r_reg["URG_DESC"]; } + else if ($reg_count==3) { $access_reg .= ";".$r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_3'] = $r_reg["URG_DESC"]; } + $reg_count++; + } + $reg_count--; + $_SESSION['syndis_eq_stock']=$access_reg; + + //warunek na wybieranie oddziału w jaki chce użytkownik pracować + if ($reg_count>1) + { + //pobiera informacje z URL i przypisuje Oddział oraz wchodzi w dany obiekt + $tmpDevID=sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_GET['obj']."'", "DRS_ID"); + if ($tmpDevID>0) + { + $tmpPlc=sqlStringValue("select SOD_PLC from seg_object_def where SOD_NAME='".$_GET['obj']."'", "SOD_PLC"); + $_SESSION['syndis_eq_stock'] = $tmpPlc; + $_SESSION['eq_stock_param3_1'] = $tmpPlc; + unset($_SESSION['eq_stock_param3_2']); + unset($_SESSION['eq_stock_param3_3']); + + header("Location: ?pg=site401mark&dev=$tmpDevID"); + + } + else{ + //sprawdza, czy nie jest to piezometr + $tmpDevID=sqlStringValue("select DRS_ID from seg_dev_resources,seg_reservoirs_piezometers where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and SRP_NAME='".$_GET['obj']."'", "DRS_ID"); + if ($tmpDevID>0) + { + $tmpPlc=sqlStringValue("select SOD_PLC from seg_object_def where SOD_NAME='".$_GET['obj']."'", "SOD_PLC"); + $_SESSION['syndis_eq_stock'] = $tmpPlc; + $_SESSION['eq_stock_param3_1'] = $tmpPlc; + unset($_SESSION['eq_stock_param3_2']); + unset($_SESSION['eq_stock_param3_3']); + + header("Location: ?pg=site404inf&dev=$tmpDevID"); + } + else{ + $dalej="./?pg=seldep"; + header("Location: $dalej"); + } + } + } + + //zerowanie wszystkich danych sesyjnych z wyszukiwarek + delSearchSessionData(); + + } + } + } +} + +//zwykłe logowanie +if ($_POST['in_subOK']=="Zaloguj" && strlen($_POST['in_login'])>3) +{ + $_SESSION['active_automation_wells']= getActiveAutomationWells(); + + usrLoginAndSiteAccess($_POST['in_login'], $_POST['in_pass'], $_POST['in_lang'], $_POST['in_system']); + //dodawanie informacji o wydziale + if (!empty($_SESSION['user'])) + { + //uprawnienia do oddziłu + $_SESSION['eq_stock_param3_1'] = $_POST['in_branch']; + $_SESSION['syndis_eq_stock'] = $_POST['in_branch']; + } +} + + +if (!empty($_SESSION['user'])) + { + if ($_SESSION['lang']) + { + include"./language/".$_SESSION['lang'].".php"; + $fileFlag = "./images/".$_SESSION['lang'].".png"; + } + if ($_SESSION['sys_typ']) + //$fileSys = "./images/".$_SESSION['sys_typ'].".png"; + $fileSys = "./images/SoftSPM_ent.png"; +?> + + +<?php +// sprawdza, czu użytkownik jest przypisany do jakiegoś wydziału +if ((empty($_SESSION['eq_stock_param3_1']) && empty($_SESSION['eq_stock_param3_1']) && empty($_SESSION['eq_stock_param3_1'])) && empty($_SESSION['war_about_priv']) && !empty($_SESSION['user'])) +{ + echo('<script>sweetAlert("Uwaga!", "Aktualnie zalogowany użytkownik nie jest przypisany do żadnego z wydziałów! Należy skontaktować się z administratorem w celu nadania odpowiednich ról w systemie.\n W niektórych przypadkach system będzie pokazywał wszystkie obiekty lub nie będzie pokazywał żadnego.\n\n Inną przyczyną może być pominięcie logowania bezpośrednio z systemu SYNDIS!", "warning");</script>'); + $_SESSION['war_about_priv']='Show'; +} +?> + + + + +<div class="main"> + + <div class="LogLog"> + <div class="logo_name"> + <?php echo"<img src='$fileSys' border='0'>"; ?> + </div> + <div class="logged_block"> + <a class='tooltip_logout' href='./?evnt=out'><img src="./images/logged.png" border="0"> <span><?php echo $lab_MenuOut ;?></span></a> + </div> + <span class="login_name"><?php echo $_SESSION['user'] ;?></span> + + <div class="language"> + <?php echo"<img style='max-height: 30px;' src='$fileFlag' border='0'>"; ?> + </div> + </div> + + <div class="system_name"><?php echo"<img src='./images/SoftTITLE.png' border='0'>"; ?></div> + <div class="head_space" style="text-align: center; color: #ffff00;"> + <?php if ($_SESSION['active_automation_wells']>570): ?> + UWAGA: Została przekroczona liczba dostępnych licencji na obiekty objęte automatyką. + <?php endif; ?> + </div> + + <div class="work_area"> + <div class="topmenu"> + <ul id="menu"> + <li><a href="#">&nbsp;&nbsp; <?php echo $lab_TopMenu_200 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site203'])) echo"<li><a href='?pg=site203'>&nbsp; $lab_SubMenu_203 </a></li>"; ?> + <?php if (!empty($_SESSION['site204'])) echo"<li><a href='?pg=site204'>&nbsp; $lab_SubMenu_204 </a></li>"; ?> + <?php if (!empty($_SESSION['site205'])) echo"<li><a href='?pg=site205'>&nbsp; $lab_SubMenu_205 </a></li>"; ?> + <?php if (!empty($_SESSION['site201'])) echo"<li><a href='?pg=site201'>&nbsp; $lab_SubMenu_201 </a></li>"; ?> + <?php if (!empty($_SESSION['site206'])) echo"<li><a href='?pg=site206'>&nbsp; $lab_SubMenu_206 </a></li>"; ?> + <?php if (!empty($_SESSION['site207'])) echo"<li><a href='?pg=site207'>&nbsp; $lab_SubMenu_207 </a></li>"; ?> + <?php if (!empty($_SESSION['site208'])) echo"<li><a href='?pg=site208'>&nbsp; $lab_SubMenu_208 </a></li>"; ?> + </ul> + </li> + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_300 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site303'])) echo"<li><a href='?pg=site303'>&nbsp; $lab_SubMenu_303 </a></li>"; ?> + <?php if (!empty($_SESSION['site304'])) echo"<li><a href='?pg=site304'>&nbsp; $lab_SubMenu_304 </a></li>"; ?> + <?php if (!empty($_SESSION['site301'])) echo"<li><a href='?pg=site301'>&nbsp; $lab_SubMenu_301 </a></li>"; ?> + <?php if (!empty($_SESSION['site302'])) echo"<li><a href='?pg=site302'>&nbsp; $lab_SubMenu_302 </a></li>"; ?> + <?php if (!empty($_SESSION['site309'])) echo"<li><a href='?pg=site309'>&nbsp; $lab_SubMenu_309 </a></li>"; ?> + <?php if (!empty($_SESSION['site306'])) echo"<li><a href='?pg=site306'>&nbsp; $lab_SubMenu_306 </a></li>"; ?> + <?php if (!empty($_SESSION['site307'])) echo"<li><a href='?pg=site307'>&nbsp; $lab_SubMenu_307 </a></li>"; ?> + <?php if (!empty($_SESSION['site308'])) echo"<li><a href='?pg=site308'>&nbsp; $lab_SubMenu_308 </a></li>"; ?> + </ul> + </li> + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_400 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site401'])) echo"<li><a href='?pg=site401'>&nbsp; $lab_SubMenu_401 </a></li>"; ?> + <?php if (!empty($_SESSION['site402'])) echo"<li><a href='?pg=site402'>&nbsp; $lab_SubMenu_402 </a></li>"; ?> + <?php if (!empty($_SESSION['site404'])) echo"<li><a href='?pg=site404'>&nbsp; $lab_SubMenu_404 </a></li>"; ?> + <?php if (!empty($_SESSION['site405'])) echo"<li><a href='?pg=site405'>&nbsp; $lab_SubMenu_405 </a></li>"; ?> + <?php if (!empty($_SESSION['site406'])) echo"<li><a href='?pg=site406'>&nbsp; $lab_SubMenu_406 </a></li>"; ?> + <?php if (!empty($_SESSION['site403'])) echo"<li><a href='?pg=site403'>&nbsp; $lab_SubMenu_403 </a></li>"; ?> + <?php if (!empty($_SESSION['site401'])) echo"<li><a href='?pg=site407'>&nbsp; Zrzut wody - rejestr </a></li>"; ?> + </ul> + </li> + + +<?php if (!empty($_SESSION['siteXXX'])) echo"<li><a href='?pg=siteXXX'>&nbsp; $lab_SubMenu_XXX </a></li>"; ?> + + + <?php + // dla STANDARD + if ($_SESSION['access_level']>1) + { + echo" + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_500 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site501>&nbsp; $lab_SubMenu_501 </a></li> + <li><a href=?pg=site502>&nbsp; $lab_SubMenu_502 </a></li> + <li><a href=?pg=site503>&nbsp; $lab_SubMenu_503 </a></li> + <li><a href=?pg=site504>&nbsp; $lab_SubMenu_504 </a></li> + </ul> + </li>"; + } + // dla ENTERPRICE + if ($_SESSION['access_level']>2) + { + echo" + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_600 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site601>&nbsp; $lab_SubMenu_601 </a></li> + <li><a href=?pg=site602>&nbsp; $lab_SubMenu_602 </a></li> + <li><a href=?pg=site603>&nbsp; $lab_SubMenu_603 </a></li> + </ul> + </li> + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_700 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site701>&nbsp; $lab_SubMenu_701 </a></li> + <li><a href=?pg=site702>&nbsp; $lab_SubMenu_702 </a></li> + <li><a href=?pg=site703>&nbsp; $lab_SubMenu_703 </a></li> + <li><a href=?pg=site704>&nbsp; $lab_SubMenu_704 </a></li> + </ul> + </li>"; + } + ?> + + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_800 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site801'])) echo"<li><a href='?pg=site801'>&nbsp; $lab_SubMenu_801 </a></li>"; ?> + <?php if (!empty($_SESSION['site802'])) echo"<li><a href='?pg=site802'>&nbsp; $lab_SubMenu_802 </a></li>"; ?> + <?php if (!empty($_SESSION['site805'])) echo"<li><a href='?pg=site805'>&nbsp; $lab_SubMenu_805 </a></li>"; ?> + <?php if (!empty($_SESSION['site803'])) echo"<li><a href='?pg=site803'>&nbsp; $lab_SubMenu_803 </a></li>"; ?> + <?php if (!empty($_SESSION['site806'])) echo"<li><a href='?pg=site806'>&nbsp; $lab_SubMenu_806 </a></li>"; ?> + <?php if (!empty($_SESSION['site807'])) echo"<li><a href='?pg=site807'>&nbsp; $lab_SubMenu_807 </a></li>"; ?> + <?php if (!empty($_SESSION['site809'])) echo"<li><a href='?pg=site809'>&nbsp; $lab_SubMenu_809 </a></li>"; ?> + <?php if (!empty($_SESSION['site810'])) echo"<li><a href='?pg=site810'>&nbsp; $lab_SubMenu_810 </a></li>"; ?> + <li><a href=?pg=site804>&nbsp; <?php echo $lab_SubMenu_804 ;?> </a></li> + </ul> + </li> + + <li><a href="?pg=site900">|&nbsp;&nbsp; <?php echo $lab_TopMenu_900 ;?> &nbsp;&nbsp;</a></li> + + <li style="float: right; display: block; "><a href=./><?php echo $_SESSION['syndis_eq_stock'] ;?> &nbsp;&nbsp;</a></li> + + + </ul> + + + + + </div> + + <br/> + <!-- buduje �ż�cie�ż�k�ż� w ramach kt�ż�rej si�ż� znajdujemy --> + <div class="path_map"> + <?php + if (!($_GET['pg'])) $_GET['pg']='site401'; + getPathFromSiteNumber($_GET['pg']); + + ?> + </div> + <br/> + + <?php + if ($_GET['pg']) + include'./sites/'.$_GET['pg'].'.php'; + else + include'./sites/site401.php'; + ?> + + </div> + + <div class="footer">&copy; SoftSPM, <?php echo date('Y'); ?>, v.1.25</div> + +</div> + +<?php +mysql_close($polacz); + + } +else + { +?> +<link rel="stylesheet" href="./style/login.css"> + +<div class="spm-auth"> + + <!-- LEWA KOLUMNA: ciemny panel + animacja "wave mesh" (napis SoftSPM) --> + <div class="spm-auth__visual"> + <canvas id="spm-mesh" class="spm-auth__canvas" data-mode="text" data-text="SoftSPM"></canvas> + <div class="spm-auth__visual-top"> + <p class="spm-auth__kicker">Submersible Pumps Management</p> + <p class="spm-auth__lead">Inteligentny Nadzór Eksploatacji Pomp Głębinowych i Raportowanie</p> + </div> + </div> + + <!-- PRAWA KOLUMNA: formularz logowania --> + <div class="spm-auth__panel"> + <div class="spm-auth__card"> + <img class="spm-auth__logo" src="./images/spm_logo_new.png" alt="SoftSPM"> + <h1 class="spm-auth__heading">Logowanie</h1> + <p class="spm-auth__sub">Zaloguj się do systemu SoftSPM</p> + + <form action="./" method="post" autocomplete="off"> + <input type="hidden" name="in_system" value="SoftSPM_bas"> + <input type="hidden" name="in_lang" value="polish"> + + <div class="spm-field"> + <svg class="spm-field__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="4"/><path d="M4 20c0-4 4-6 8-6s8 2 8 6"/></svg> + <input class="spm-input" type="text" name="in_login" placeholder="Nazwa użytkownika" autofocus> + </div> + + <div class="spm-field"> + <svg class="spm-field__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="11" width="16" height="9" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3"/></svg> + <input class="spm-input" type="password" name="in_pass" placeholder="Hasło"> + </div> + + <div class="spm-field"> + <svg class="spm-field__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 21V5l8-3 8 3v16"/><path d="M9 21v-5h6v5"/><path d="M8 8h.01M12 8h.01M16 8h.01M8 12h.01M12 12h.01M16 12h.01"/></svg> + <select class="spm-select" name="in_branch"> + <option value="P/Szczerców">P/Szczerców</option> + <option value="P/Bełchatów">P/Bełchatów</option> + <option value="Dębina">Dębina</option> + </select> + </div> + + <input class="spm-btn" name="in_subOK" type="submit" value="Zaloguj"> + </form> + + <div class="spm-auth__foot">&copy; <b>SoftSPM</b> <?php echo date('Y'); ?> &middot; v.1.25</div> + </div> + </div> +</div> + +<script>document.body.className += ' spm-login-body';</script> +<script src="./js/login-mesh.js"></script> + + +<?php + + } +//} + +?> + +<?php +//zamyka okienko dla sesji przeglądarki SYNDIS +//if (!empty($_SESSION['syndis_close_window'])) +// echo'<meta http-equiv="refresh" content="'.$_SESSION['syndis_close_window'].'; url=./?pg=closewindow">'; + + +?> + + +</BODY> +</HTML> + + diff --git a/js/application.js b/js/application.js new file mode 100644 index 0000000..52e339c --- /dev/null +++ b/js/application.js @@ -0,0 +1,110 @@ +// Put your application scripts here +(function($){ + $(function(){ + $('#aloha').multiSelect({ + keepOrder: true + }); + $('.multiselect').multiSelect({}); + + $('.searchable').multiSelect({ + selectableHeader: "<input type='text' class='search-input' autocomplete='off' placeholder='try \"12\"'>", + selectionHeader: "<input type='text' class='search-input' autocomplete='off' placeholder='try \"4\"'>", + afterInit: function(ms){ + var that = this, + $selectableSearch = that.$selectableUl.prev(), + $selectionSearch = that.$selectionUl.prev(), + selectableSearchString = '#'+that.$container.attr('id')+' .ms-elem-selectable:not(.ms-selected)', + selectionSearchString = '#'+that.$container.attr('id')+' .ms-elem-selection.ms-selected'; + + that.qs1 = $selectableSearch.quicksearch(selectableSearchString) + .on('keydown', function(e){ + if (e.which === 40){ + that.$selectableUl.focus(); + return false; + } + }); + + that.qs2 = $selectionSearch.quicksearch(selectionSearchString) + .on('keydown', function(e){ + if (e.which == 40){ + that.$selectionUl.focus(); + return false; + } + }); + }, + afterSelect: function(){ + this.qs1.cache(); + this.qs2.cache(); + }, + afterDeselect: function(){ + this.qs1.cache(); + this.qs2.cache(); + } + }); + + + $('#keep-order').multiSelect({ + keepOrder: true + }); + + $('#optgroup').multiSelect({ + selectableOptgroup: true + }); + + + $('#custom-headers').multiSelect({ + selectableHeader: "<div class='custom-header'>Selectable item</div>", + selectionHeader: "<div class='custom-header'>Selection items</div>", + selectableFooter: "<div class='custom-header'>Selectable Footer</div>", + selectionFooter: "<div class='custom-header'>Selection Footer</div>" + }); + + $('#callbacks').multiSelect({ + afterSelect: function(values){ + alert("Select value: "+values); + }, + afterDeselect: function(values){ + alert("Deselect value: "+values); + } + }); + + $('#refresh').on('click', function(){ + $('#public-methods').multiSelect('refresh'); + return false; + }); + + $('#public-methods').multiSelect({}); + + $('#select-all').click(function(){ + $('#public-methods').multiSelect('select_all'); + return false; + }); + $('#deselect-all').click(function(){ + $('#public-methods').multiSelect('deselect_all'); + return false; + }); + + var arr = []; + + for (var i = 0; i < 100; i++){ + arr[i] = 'elem_'+(i+1); + } + + $('#select-100').click(function(){ + $('#public-methods').multiSelect('select', arr); + return false; + }); + $('#deselect-100').click(function(){ + $('#public-methods').multiSelect('deselect', arr); + return false; + }); + + $('#add-option').on('click', function(){ + $('#public-methods').multiSelect('addOption', { value: 42, text: 'test 42', index: 0 }); + return false; + }); + + }); +})(jQuery); + + diff --git a/js/dynamicForms.js b/js/dynamicForms.js new file mode 100644 index 0000000..ca27c7e --- /dev/null +++ b/js/dynamicForms.js @@ -0,0 +1,159 @@ +/** + * Created by Przemek on 2015-10-22. + */ + +$(document).ready(function(){ + + //ładowanie dynamicznych pól dla zleceń (pierwsza strona) + // =================================================================== + $('#selectObj').change(function(){ + $('#selectScp').empty(); + + if ($('#selectObj').val()==12) + { + $('#selectScp').append( '<option value="801">Wymiana agregatu pompowego</option>' ); + $('#selectScp').append( '<option value="802">Wybudowa agregatu pompowego</option>' ); + $('#selectScp').append( '<option value="803">Zabudowa agregatu pompowego</option>' ); + $('#selectScp').append( '<option value="804">Uaktywnianie studni</option>' ); + $('#selectScp').append( '<option value="805">Czyszczenie studni</option>' ); + $('#selectScp').append( '<option value="806">Rekonstrukcja studni</option>' ); + $('#selectScp').append( '<option value="807">Instrumentacja studni</option>' ); + $('#selectScp').append( '<option value="808">Likwidacja studni</option>' ); + $('#selectScp').append( '<option value="809">Inne prace</option>' ); + + + } + else if ($('#selectObj').val()==601) + { + $('#selectScp').append( '<option value="831">Uaktywnianie piezometru</option>' ); + $('#selectScp').append( '<option value="832">Czyszczenie piezometru</option>' ); + $('#selectScp').append( '<option value="833">Rekonstrukcja piezometru</option>' ); + $('#selectScp').append( '<option value="834">Instrumentacja piezometru</option>' ); + $('#selectScp').append( '<option value="835">Likwidacja piezometru</option>' ); + } + }); + // =================================================================== + + // uzupełnianie formularza dla studni (zlecenie 2 karta) + // =================================================================== + $('#site810A_2_inOrderWell').change(function(){ + //alert($('#site810A_2_inOrderWell').val()); + $.post( + './pop_selects.php', + {site_810A_2_well_array_id:$('#site810A_2_inOrderWell').val()}, + function(res){ + $('#site810A_2').html(res); + } + ); + }); + // =================================================================== + + // uzupełnianie formularza dla piezometru (zlecenie 2 karta) + // =================================================================== + $('#site810A_2_inOrderPiezo').change(function(){ + //alert($('#site810A_2_inOrderWell').val()); + $.post( + './pop_selects.php', + {site_810A_2_piezo_array_id:$('#site810A_2_inOrderPiezo').val()}, + function(res){ + $('#site810A_2').html(res); + } + ); + }); + + // =================================================================== + + //czyszczenie formularzy + // =================================================================== + //edycja zleceń + $('#cleanRegDate').click(function(){ + $('#data_01').val(''); + }); + $('#cleanStartDate').click(function(){ + $('#data_02').val(''); + }); + $('#cleanFinishDate').click(function(){ + $('#data_03').val(''); + }); + + // =================================================================== + // dynamiczne liczenie "Ilośc metrów do wyczyszczenia": Ls-Lz + // =================================================================== + $('#inLS').keyup(function(){ + //alert($('#inLS').val()); + $('#inLS').val($('#inLS').val().replace(',','.')); + + var newCln; + newCln = (($('#inLS').val()) - ($('#inLZ').val())); + $('#inIlCln').val(newCln.toFixed(2)); + }); + $('#inLZ').keyup(function(){ + //alert($('#inLS').val()); + $('#inLZ').val($('#inLZ').val().replace(',','.')); + + var newCln; + newCln = (($('#inLS').val()) - ($('#inLZ').val())); + $('#inIlCln').val(newCln.toFixed(2)); + + + }); + + + // =================================================================== + // =================================================================== + + // =================================================================== + // odejmowanie głębokości zasypu dla karty otworu #inRzNew + // =================================================================== + + + // =================================================================== + // =================================================================== + + + + + // =================================================================== + // liczenie ilości equipment na + // =================================================================== + $('#inRuValue').focus(); + $('#inRuValue').blur(function(){ + var avVal = parseInt($('#inAvValue').val(),10); + var inVal = parseInt($('#inRuValue').val(),10); + + if (inVal>avVal) { + $('#subRuSave').attr("disabled", true); + sweetAlert("Operacja niepoprawna!", "Wprowadzona wartość jest większa od dostępnej ilości.\n Spróbuj ponownie.", "warning"); + $('#inRuValue').focus(); + $('#inRuValue').val(''); + } + else + $('#subRuSave').attr("disabled", false); + + }); + // =================================================================== + + + + + + // Zamienia "w locie" przecinek na kropkę + // =================================================================== + + $('#inNumberValidate').keyup(function(){ + var inVal; + inVal = $('#inNumberValidate').val().replace(',','.'); + $('#inNumberValidate').val(inVal); + + }); + + + + + + + + + + +}); diff --git a/js/jquery.confirm.js b/js/jquery.confirm.js new file mode 100644 index 0000000..53ac77c --- /dev/null +++ b/js/jquery.confirm.js @@ -0,0 +1,143 @@ +/*! + * jquery.confirm + * + * @version 2.3.1 + * + * @author My C-Labs + * @author Matthieu Napoli <matthieu@mnapoli.fr> + * @author Russel Vela + * @author Marcus Schwarz <msspamfang@gmx.de> + * + * @license MIT + * @url http://myclabs.github.io/jquery.confirm/ + */ +(function ($) { + + /** + * Confirm a link or a button + * @param [options] {{title, text, confirm, cancel, confirmButton, cancelButton, post, confirmButtonClass}} + */ + $.fn.confirm = function (options) { + if (typeof options === 'undefined') { + options = {}; + } + + this.click(function (e) { + e.preventDefault(); + + var newOptions = $.extend({ + button: $(this) + }, options); + + $.confirm(newOptions, e); + }); + + return this; + }; + + /** + * Show a confirmation dialog + * @param [options] {{title, text, confirm, cancel, confirmButton, cancelButton, post, confirmButtonClass}} + * @param [e] {Event} + */ + $.confirm = function (options, e) { + // Do nothing when active confirm modal. + if ($('.confirmation-modal').length > 0) + return; + + // Parse options defined with "data-" attributes + var dataOptions = {}; + if (options.button) { + var dataOptionsMapping = { + 'title': 'title', + 'text': 'text', + 'confirm-button': 'confirmButton', + 'cancel-button': 'cancelButton', + 'confirm-button-class': 'confirmButtonClass' + }; + $.each(dataOptionsMapping, function(attributeName, optionName) { + var value = options.button.data(attributeName); + if (value) { + dataOptions[optionName] = value; + } + }); + } + + // Default options + var settings = $.extend({}, $.confirm.options, { + confirm: function () { + var url = e && (('string' === typeof e && e) || (e.currentTarget && e.currentTarget.attributes['href'].value)); + if (url) { + if (options.post) { + var form = $('<form method="post" class="hide" action="' + url + '"></form>'); + $("body").append(form); + form.submit(); + } else { + window.location = url; + } + } + }, + cancel: function (o) { + }, + button: null + }, dataOptions, options); + + // Modal + var modalHeader = ''; + if (settings.title !== '') { + modalHeader = + '<div class=modal-header>' + + '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>' + + '<h4 class="modal-title">' + settings.title+'</h4>' + + '</div>'; + } + var modalHTML = + '<div class="confirmation-modal modal fade" tabindex="-1" role="dialog">' + + '<div class="modal-dialog">' + + '<div class="modal-content">' + + modalHeader + + '<div class="modal-body">' + settings.text + '</div>' + + '<div class="modal-footer">' + + '<button class="confirm btn ' + settings.confirmButtonClass + '" type="button" data-dismiss="modal">' + + settings.confirmButton + + '</button>' + + '<button class="cancel btn btn-default" type="button" data-dismiss="modal">' + + settings.cancelButton + + '</div>' + + '</div>' + + '</div>' + + '</div>' + + '</div>'; + + var modal = $(modalHTML); + + modal.on('shown.bs.modal', function () { + modal.find(".btn-primary:first").focus(); + }); + modal.on('hidden.bs.modal', function () { + modal.remove(); + }); + modal.find(".confirm").click(function () { + settings.confirm(settings.button); + }); + modal.find(".cancel").click(function () { + settings.cancel(settings.button); + }); + + // Show the modal + $("body").append(modal); + modal.modal('show'); + }; + + /** + * Globally definable rules + */ + $.confirm.options = { + text: "Are you sure?", + title: "", + confirmButton: "Yes", + cancelButton: "Cancel", + post: false, + confirmButtonClass: "btn-primary" + } +})(jQuery); diff --git a/js/jquery.js b/js/jquery.js new file mode 100644 index 0000000..006e953 --- /dev/null +++ b/js/jquery.js @@ -0,0 +1,5 @@ +/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; +return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); \ No newline at end of file diff --git a/js/jquery.multi-select.js b/js/jquery.multi-select.js new file mode 100644 index 0000000..d7c4be6 --- /dev/null +++ b/js/jquery.multi-select.js @@ -0,0 +1,529 @@ +/* +* MultiSelect v0.9.11 +* Copyright (c) 2012 Louis Cuny +* +* This program is free software. It comes without any warranty, to +* the extent permitted by applicable law. You can redistribute it +* and/or modify it under the terms of the Do What The Fuck You Want +* To Public License, Version 2, as published by Sam Hocevar. See +* http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +!function ($) { + + "use strict"; + + + /* MULTISELECT CLASS DEFINITION + * ====================== */ + + var MultiSelect = function (element, options) { + this.options = options; + this.$element = $(element); + this.$container = $('<div/>', { 'class': "ms-container" }); + this.$selectableContainer = $('<div/>', { 'class': 'ms-selectable' }); + this.$selectionContainer = $('<div/>', { 'class': 'ms-selection' }); + this.$selectableUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' }); + this.$selectionUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' }); + this.scrollTo = 0; + this.elemsSelector = 'li:visible:not(.ms-optgroup-label,.ms-optgroup-container,.'+options.disabledClass+')'; + }; + + MultiSelect.prototype = { + constructor: MultiSelect, + + init: function(){ + var that = this, + ms = this.$element; + + if (ms.next('.ms-container').length === 0){ + ms.css({ position: 'absolute', left: '-9999px' }); + ms.attr('id', ms.attr('id') ? ms.attr('id') : Math.ceil(Math.random()*1000)+'multiselect'); + this.$container.attr('id', 'ms-'+ms.attr('id')); + this.$container.addClass(that.options.cssClass); + ms.find('option').each(function(){ + that.generateLisFromOption(this); + }); + + this.$selectionUl.find('.ms-optgroup-label').hide(); + + if (that.options.selectableHeader){ + that.$selectableContainer.append(that.options.selectableHeader); + } + that.$selectableContainer.append(that.$selectableUl); + if (that.options.selectableFooter){ + that.$selectableContainer.append(that.options.selectableFooter); + } + + if (that.options.selectionHeader){ + that.$selectionContainer.append(that.options.selectionHeader); + } + that.$selectionContainer.append(that.$selectionUl); + if (that.options.selectionFooter){ + that.$selectionContainer.append(that.options.selectionFooter); + } + + that.$container.append(that.$selectableContainer); + that.$container.append(that.$selectionContainer); + ms.after(that.$container); + + that.activeMouse(that.$selectableUl); + that.activeKeyboard(that.$selectableUl); + + var action = that.options.dblClick ? 'dblclick' : 'click'; + + that.$selectableUl.on(action, '.ms-elem-selectable', function(){ + that.select($(this).data('ms-value')); + }); + that.$selectionUl.on(action, '.ms-elem-selection', function(){ + that.deselect($(this).data('ms-value')); + }); + + that.activeMouse(that.$selectionUl); + that.activeKeyboard(that.$selectionUl); + + ms.on('focus', function(){ + that.$selectableUl.focus(); + }) + } + + var selectedValues = ms.find('option:selected').map(function(){ return $(this).val(); }).get(); + that.select(selectedValues, 'init'); + + if (typeof that.options.afterInit === 'function') { + that.options.afterInit.call(this, this.$container); + } + }, + + 'generateLisFromOption' : function(option, index, $container){ + var that = this, + ms = that.$element, + attributes = "", + $option = $(option); + + for (var cpt = 0; cpt < option.attributes.length; cpt++){ + var attr = option.attributes[cpt]; + + if(attr.name !== 'value' && attr.name !== 'disabled'){ + attributes += attr.name+'="'+attr.value+'" '; + } + } + var selectableLi = $('<li '+attributes+'><span>'+that.escapeHTML($option.text())+'</span></li>'), + selectedLi = selectableLi.clone(), + value = $option.val(), + elementId = that.sanitize(value); + + selectableLi + .data('ms-value', value) + .addClass('ms-elem-selectable') + .attr('id', elementId+'-selectable'); + + selectedLi + .data('ms-value', value) + .addClass('ms-elem-selection') + .attr('id', elementId+'-selection') + .hide(); + + if ($option.prop('disabled') || ms.prop('disabled')){ + selectedLi.addClass(that.options.disabledClass); + selectableLi.addClass(that.options.disabledClass); + } + + var $optgroup = $option.parent('optgroup'); + + if ($optgroup.length > 0){ + var optgroupLabel = $optgroup.attr('label'), + optgroupId = that.sanitize(optgroupLabel), + $selectableOptgroup = that.$selectableUl.find('#optgroup-selectable-'+optgroupId), + $selectionOptgroup = that.$selectionUl.find('#optgroup-selection-'+optgroupId); + + if ($selectableOptgroup.length === 0){ + var optgroupContainerTpl = '<li class="ms-optgroup-container"></li>', + optgroupTpl = '<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>'+optgroupLabel+'</span></li></ul>'; + + $selectableOptgroup = $(optgroupContainerTpl); + $selectionOptgroup = $(optgroupContainerTpl); + $selectableOptgroup.attr('id', 'optgroup-selectable-'+optgroupId); + $selectionOptgroup.attr('id', 'optgroup-selection-'+optgroupId); + $selectableOptgroup.append($(optgroupTpl)); + $selectionOptgroup.append($(optgroupTpl)); + if (that.options.selectableOptgroup){ + $selectableOptgroup.find('.ms-optgroup-label').on('click', function(){ + var values = $optgroup.children(':not(:selected)').map(function(){ return $(this).val() }).get(); + that.select(values); + }); + $selectionOptgroup.find('.ms-optgroup-label').on('click', function(){ + var values = $optgroup.children(':selected').map(function(){ return $(this).val() }).get(); + that.deselect(values); + }); + } + that.$selectableUl.append($selectableOptgroup); + that.$selectionUl.append($selectionOptgroup); + } + index = index == undefined ? $selectableOptgroup.children().length : index + 1; + selectableLi.insertAt(index, $selectableOptgroup.children()); + selectedLi.insertAt(index, $selectionOptgroup.children()); + } else { + index = index == undefined ? that.$selectableUl.children().length : index; + + selectableLi.insertAt(index, that.$selectableUl); + selectedLi.insertAt(index, that.$selectionUl); + } + }, + + 'addOption' : function(options){ + var that = this; + + if (options.value) options = [options]; + $.each(options, function(index, option){ + if (option.value && that.$element.find("option[value='"+option.value+"']").length === 0){ + var $option = $('<option value="'+option.value+'">'+option.text+'</option>'), + index = parseInt((typeof option.index === 'undefined' ? that.$element.children().length : option.index)), + $container = option.nested == undefined ? that.$element : $("optgroup[label='"+option.nested+"']") + + $option.insertAt(index, $container); + that.generateLisFromOption($option.get(0), index, option.nested); + } + }) + }, + + 'escapeHTML' : function(text){ + return $("<div>").text(text).html(); + }, + + 'activeKeyboard' : function($list){ + var that = this; + + $list.on('focus', function(){ + $(this).addClass('ms-focus'); + }) + .on('blur', function(){ + $(this).removeClass('ms-focus'); + }) + .on('keydown', function(e){ + switch (e.which) { + case 40: + case 38: + e.preventDefault(); + e.stopPropagation(); + that.moveHighlight($(this), (e.which === 38) ? -1 : 1); + return; + case 37: + case 39: + e.preventDefault(); + e.stopPropagation(); + that.switchList($list); + return; + case 9: + if(that.$element.is('[tabindex]')){ + e.preventDefault(); + var tabindex = parseInt(that.$element.attr('tabindex'), 10); + tabindex = (e.shiftKey) ? tabindex-1 : tabindex+1; + $('[tabindex="'+(tabindex)+'"]').focus(); + return; + }else{ + if(e.shiftKey){ + that.$element.trigger('focus'); + } + } + } + if($.inArray(e.which, that.options.keySelect) > -1){ + e.preventDefault(); + e.stopPropagation(); + that.selectHighlighted($list); + return; + } + }); + }, + + 'moveHighlight': function($list, direction){ + var $elems = $list.find(this.elemsSelector), + $currElem = $elems.filter('.ms-hover'), + $nextElem = null, + elemHeight = $elems.first().outerHeight(), + containerHeight = $list.height(), + containerSelector = '#'+this.$container.prop('id'); + + // Deactive mouseenter event when move is active + // It fixes a bug when mouse is over the list + $elems.off('mouseenter'); + + $elems.removeClass('ms-hover'); + if (direction === 1){ // DOWN + + $nextElem = $currElem.nextAll(this.elemsSelector).first(); + if ($nextElem.length === 0){ + var $optgroupUl = $currElem.parent(); + + if ($optgroupUl.hasClass('ms-optgroup')){ + var $optgroupLi = $optgroupUl.parent(), + $nextOptgroupLi = $optgroupLi.next(':visible'); + + if ($nextOptgroupLi.length > 0){ + $nextElem = $nextOptgroupLi.find(this.elemsSelector).first(); + } else { + $nextElem = $elems.first(); + } + } else { + $nextElem = $elems.first(); + } + } + } else if (direction === -1){ // UP + + $nextElem = $currElem.prevAll(this.elemsSelector).first(); + if ($nextElem.length === 0){ + var $optgroupUl = $currElem.parent(); + + if ($optgroupUl.hasClass('ms-optgroup')){ + var $optgroupLi = $optgroupUl.parent(), + $prevOptgroupLi = $optgroupLi.prev(':visible'); + + if ($prevOptgroupLi.length > 0){ + $nextElem = $prevOptgroupLi.find(this.elemsSelector).last(); + } else { + $nextElem = $elems.last(); + } + } else { + $nextElem = $elems.last(); + } + } + } + if ($nextElem.length > 0){ + $nextElem.addClass('ms-hover'); + var scrollTo = $list.scrollTop() + $nextElem.position().top - + containerHeight / 2 + elemHeight / 2; + + $list.scrollTop(scrollTo); + } + }, + + 'selectHighlighted' : function($list){ + var $elems = $list.find(this.elemsSelector), + $highlightedElem = $elems.filter('.ms-hover').first(); + + if ($highlightedElem.length > 0){ + if ($list.parent().hasClass('ms-selectable')){ + this.select($highlightedElem.data('ms-value')); + } else { + this.deselect($highlightedElem.data('ms-value')); + } + $elems.removeClass('ms-hover'); + } + }, + + 'switchList' : function($list){ + $list.blur(); + if ($list.parent().hasClass('ms-selectable')){ + this.$selectionUl.focus(); + } else { + this.$selectableUl.focus(); + } + }, + + 'activeMouse' : function($list){ + var that = this; + + $list.on('mousemove', function(){ + var elems = $list.find(that.elemsSelector); + + elems.on('mouseenter', function(){ + elems.removeClass('ms-hover'); + $(this).addClass('ms-hover'); + }); + }); + }, + + 'refresh' : function() { + this.destroy(); + this.$element.multiSelect(this.options); + }, + + 'destroy' : function(){ + $("#ms-"+this.$element.attr("id")).remove(); + this.$element.removeData('multiselect'); + }, + + 'select' : function(value, method){ + if (typeof value === 'string'){ value = [value]; } + + var that = this, + ms = this.$element, + msIds = $.map(value, function(val){ return(that.sanitize(val)); }), + selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable').filter(':not(.'+that.options.disabledClass+')'), + selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection').filter(':not(.'+that.options.disabledClass+')'), + options = ms.find('option:not(:disabled)').filter(function(){ return($.inArray(this.value, value) > -1); }); + + if (method === 'init'){ + selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'), + selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection'); + } + + if (selectables.length > 0){ + selectables.addClass('ms-selected').hide(); + selections.addClass('ms-selected').show(); + options.prop('selected', true); + + var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container'); + if (selectableOptgroups.length > 0){ + selectableOptgroups.each(function(){ + var selectablesLi = $(this).find('.ms-elem-selectable'); + if (selectablesLi.length === selectablesLi.filter('.ms-selected').length){ + $(this).find('.ms-optgroup-label').hide(); + } + }); + + var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container'); + selectionOptgroups.each(function(){ + var selectionsLi = $(this).find('.ms-elem-selection'); + if (selectionsLi.filter('.ms-selected').length > 0){ + $(this).find('.ms-optgroup-label').show(); + } + }); + } else { + if (that.options.keepOrder && method !== 'init'){ + var selectionLiLast = that.$selectionUl.find('.ms-selected'); + if((selectionLiLast.length > 1) && (selectionLiLast.last().get(0) != selections.get(0))) { + selections.insertAfter(selectionLiLast.last()); + } + } + } + if (method !== 'init'){ + ms.trigger('change'); + if (typeof that.options.afterSelect === 'function') { + that.options.afterSelect.call(this, value); + } + } + } + }, + + 'deselect' : function(value){ + if (typeof value === 'string'){ value = [value]; } + + var that = this, + ms = this.$element, + msIds = $.map(value, function(val){ return(that.sanitize(val)); }), + selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'), + selections = this.$selectionUl.find('#' + msIds.join('-selection, #')+'-selection').filter('.ms-selected').filter(':not(.'+that.options.disabledClass+')'), + options = ms.find('option').filter(function(){ return($.inArray(this.value, value) > -1); }); + + if (selections.length > 0){ + selectables.removeClass('ms-selected').show(); + selections.removeClass('ms-selected').hide(); + options.prop('selected', false); + + var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container'); + if (selectableOptgroups.length > 0){ + selectableOptgroups.each(function(){ + var selectablesLi = $(this).find('.ms-elem-selectable'); + if (selectablesLi.filter(':not(.ms-selected)').length > 0){ + $(this).find('.ms-optgroup-label').show(); + } + }); + + var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container'); + selectionOptgroups.each(function(){ + var selectionsLi = $(this).find('.ms-elem-selection'); + if (selectionsLi.filter('.ms-selected').length === 0){ + $(this).find('.ms-optgroup-label').hide(); + } + }); + } + ms.trigger('change'); + if (typeof that.options.afterDeselect === 'function') { + that.options.afterDeselect.call(this, value); + } + } + }, + + 'select_all' : function(){ + var ms = this.$element, + values = ms.val(); + + ms.find('option:not(":disabled")').prop('selected', true); + this.$selectableUl.find('.ms-elem-selectable').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').hide(); + this.$selectionUl.find('.ms-optgroup-label').show(); + this.$selectableUl.find('.ms-optgroup-label').hide(); + this.$selectionUl.find('.ms-elem-selection').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').show(); + this.$selectionUl.focus(); + ms.trigger('change'); + if (typeof this.options.afterSelect === 'function') { + var selectedValues = $.grep(ms.val(), function(item){ + return $.inArray(item, values) < 0; + }); + this.options.afterSelect.call(this, selectedValues); + } + }, + + 'deselect_all' : function(){ + var ms = this.$element, + values = ms.val(); + + ms.find('option').prop('selected', false); + this.$selectableUl.find('.ms-elem-selectable').removeClass('ms-selected').show(); + this.$selectionUl.find('.ms-optgroup-label').hide(); + this.$selectableUl.find('.ms-optgroup-label').show(); + this.$selectionUl.find('.ms-elem-selection').removeClass('ms-selected').hide(); + this.$selectableUl.focus(); + ms.trigger('change'); + if (typeof this.options.afterDeselect === 'function') { + this.options.afterDeselect.call(this, values); + } + }, + + sanitize: function(value){ + var hash = 0, i, char; + if (value.length == 0) return hash; + var ls = 0; + for (i = 0, ls = value.length; i < ls; i++) { + char = value.charCodeAt(i); + hash = ((hash<<5)-hash)+char; + hash |= 0; // Convert to 32bit integer + } + return hash; + } + }; + + /* MULTISELECT PLUGIN DEFINITION + * ======================= */ + + $.fn.multiSelect = function () { + var option = arguments[0], + args = arguments; + + return this.each(function () { + var $this = $(this), + data = $this.data('multiselect'), + options = $.extend({}, $.fn.multiSelect.defaults, $this.data(), typeof option === 'object' && option); + + if (!data){ $this.data('multiselect', (data = new MultiSelect(this, options))); } + + if (typeof option === 'string'){ + data[option](args[1]); + } else { + data.init(); + } + }); + }; + + $.fn.multiSelect.defaults = { + keySelect: [32], + selectableOptgroup: false, + disabledClass : 'disabled', + dblClick : false, + keepOrder: false, + cssClass: '' + }; + + $.fn.multiSelect.Constructor = MultiSelect; + + $.fn.insertAt = function(index, $parent) { + return this.each(function() { + if (index === 0) { + $parent.prepend(this); + } else { + $parent.children().eq(index - 1).after(this); + } + }); +} + +}(window.jQuery); diff --git a/js/jquery.validate.js b/js/jquery.validate.js new file mode 100644 index 0000000..88ba300 --- /dev/null +++ b/js/jquery.validate.js @@ -0,0 +1,1231 @@ +/*! + * jQuery Validation Plugin 1.11.1 + * + * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ + * http://docs.jquery.com/Plugins/Validation + * + * Copyright 2013 Jörn Zaefferer + * Released under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + */ + +(function($) { + +$.extend($.fn, { + // http://docs.jquery.com/Plugins/Validation/validate + validate: function( options ) { + + // if nothing is selected, return nothing; can't chain anyway + if ( !this.length ) { + if ( options && options.debug && window.console ) { + console.warn( "Nothing selected, can't validate, returning nothing." ); + } + return; + } + + // check if a validator for this form was already created + var validator = $.data( this[0], "validator" ); + if ( validator ) { + return validator; + } + + // Add novalidate tag if HTML5. + this.attr( "novalidate", "novalidate" ); + + validator = new $.validator( options, this[0] ); + $.data( this[0], "validator", validator ); + + if ( validator.settings.onsubmit ) { + + this.validateDelegate( ":submit", "click", function( event ) { + if ( validator.settings.submitHandler ) { + validator.submitButton = event.target; + } + // allow suppressing validation by adding a cancel class to the submit button + if ( $(event.target).hasClass("cancel") ) { + validator.cancelSubmit = true; + } + + // allow suppressing validation by adding the html5 formnovalidate attribute to the submit button + if ( $(event.target).attr("formnovalidate") !== undefined ) { + validator.cancelSubmit = true; + } + }); + + // validate the form on submit + this.submit( function( event ) { + if ( validator.settings.debug ) { + // prevent form submit to be able to see console output + event.preventDefault(); + } + function handle() { + var hidden; + if ( validator.settings.submitHandler ) { + if ( validator.submitButton ) { + // insert a hidden input as a replacement for the missing submit button + hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val( $(validator.submitButton).val() ).appendTo(validator.currentForm); + } + validator.settings.submitHandler.call( validator, validator.currentForm, event ); + if ( validator.submitButton ) { + // and clean up afterwards; thanks to no-block-scope, hidden can be referenced + hidden.remove(); + } + return false; + } + return true; + } + + // prevent submit for invalid forms or custom submit handlers + if ( validator.cancelSubmit ) { + validator.cancelSubmit = false; + return handle(); + } + if ( validator.form() ) { + if ( validator.pendingRequest ) { + validator.formSubmitted = true; + return false; + } + return handle(); + } else { + validator.focusInvalid(); + return false; + } + }); + } + + return validator; + }, + // http://docs.jquery.com/Plugins/Validation/valid + valid: function() { + if ( $(this[0]).is("form")) { + return this.validate().form(); + } else { + var valid = true; + var validator = $(this[0].form).validate(); + this.each(function() { + valid = valid && validator.element(this); + }); + return valid; + } + }, + // attributes: space seperated list of attributes to retrieve and remove + removeAttrs: function( attributes ) { + var result = {}, + $element = this; + $.each(attributes.split(/\s/), function( index, value ) { + result[value] = $element.attr(value); + $element.removeAttr(value); + }); + return result; + }, + // http://docs.jquery.com/Plugins/Validation/rules + rules: function( command, argument ) { + var element = this[0]; + + if ( command ) { + var settings = $.data(element.form, "validator").settings; + var staticRules = settings.rules; + var existingRules = $.validator.staticRules(element); + switch(command) { + case "add": + $.extend(existingRules, $.validator.normalizeRule(argument)); + // remove messages from rules, but allow them to be set separetely + delete existingRules.messages; + staticRules[element.name] = existingRules; + if ( argument.messages ) { + settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages ); + } + break; + case "remove": + if ( !argument ) { + delete staticRules[element.name]; + return existingRules; + } + var filtered = {}; + $.each(argument.split(/\s/), function( index, method ) { + filtered[method] = existingRules[method]; + delete existingRules[method]; + }); + return filtered; + } + } + + var data = $.validator.normalizeRules( + $.extend( + {}, + $.validator.classRules(element), + $.validator.attributeRules(element), + $.validator.dataRules(element), + $.validator.staticRules(element) + ), element); + + // make sure required is at front + if ( data.required ) { + var param = data.required; + delete data.required; + data = $.extend({required: param}, data); + } + + return data; + } +}); + +// Custom selectors +$.extend($.expr[":"], { + // http://docs.jquery.com/Plugins/Validation/blank + blank: function( a ) { return !$.trim("" + $(a).val()); }, + // http://docs.jquery.com/Plugins/Validation/filled + filled: function( a ) { return !!$.trim("" + $(a).val()); }, + // http://docs.jquery.com/Plugins/Validation/unchecked + unchecked: function( a ) { return !$(a).prop("checked"); } +}); + +// constructor for validator +$.validator = function( options, form ) { + this.settings = $.extend( true, {}, $.validator.defaults, options ); + this.currentForm = form; + this.init(); +}; + +$.validator.format = function( source, params ) { + if ( arguments.length === 1 ) { + return function() { + var args = $.makeArray(arguments); + args.unshift(source); + return $.validator.format.apply( this, args ); + }; + } + if ( arguments.length > 2 && params.constructor !== Array ) { + params = $.makeArray(arguments).slice(1); + } + if ( params.constructor !== Array ) { + params = [ params ]; + } + $.each(params, function( i, n ) { + source = source.replace( new RegExp("\\{" + i + "\\}", "g"), function() { + return n; + }); + }); + return source; +}; + +$.extend($.validator, { + + defaults: { + messages: {}, + groups: {}, + rules: {}, + errorClass: "error", + validClass: "valid", + errorElement: "label", + focusInvalid: true, + errorContainer: $([]), + errorLabelContainer: $([]), + onsubmit: true, + ignore: ":hidden", + ignoreTitle: false, + onfocusin: function( element, event ) { + this.lastActive = element; + + // hide error label and remove error class on focus if enabled + if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { + if ( this.settings.unhighlight ) { + this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); + } + this.addWrapper(this.errorsFor(element)).hide(); + } + }, + onfocusout: function( element, event ) { + if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { + this.element(element); + } + }, + onkeyup: function( element, event ) { + if ( event.which === 9 && this.elementValue(element) === "" ) { + return; + } else if ( element.name in this.submitted || element === this.lastElement ) { + this.element(element); + } + }, + onclick: function( element, event ) { + // click on selects, radiobuttons and checkboxes + if ( element.name in this.submitted ) { + this.element(element); + } + // or option elements, check parent select in that case + else if ( element.parentNode.name in this.submitted ) { + this.element(element.parentNode); + } + }, + highlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName(element.name).addClass(errorClass).removeClass(validClass); + } else { + $(element).addClass(errorClass).removeClass(validClass); + } + }, + unhighlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName(element.name).removeClass(errorClass).addClass(validClass); + } else { + $(element).removeClass(errorClass).addClass(validClass); + } + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults + setDefaults: function( settings ) { + $.extend( $.validator.defaults, settings ); + }, + + messages: { + required: "This field is required.", + remote: "Please fix this field.", + email: "Please enter a valid email address.", + url: "Please enter a valid URL.", + date: "Please enter a valid date.", + dateISO: "Please enter a valid date (ISO).", + number: "Please enter a valid number.", + digits: "Please enter only digits.", + creditcard: "Please enter a valid credit card number.", + equalTo: "Please enter the same value again.", + maxlength: $.validator.format("Please enter no more than {0} characters."), + minlength: $.validator.format("Please enter at least {0} characters."), + rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."), + range: $.validator.format("Please enter a value between {0} and {1}."), + max: $.validator.format("Please enter a value less than or equal to {0}."), + min: $.validator.format("Please enter a value greater than or equal to {0}.") + }, + + autoCreateRanges: false, + + prototype: { + + init: function() { + this.labelContainer = $(this.settings.errorLabelContainer); + this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); + this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer ); + this.submitted = {}; + this.valueCache = {}; + this.pendingRequest = 0; + this.pending = {}; + this.invalid = {}; + this.reset(); + + var groups = (this.groups = {}); + $.each(this.settings.groups, function( key, value ) { + if ( typeof value === "string" ) { + value = value.split(/\s/); + } + $.each(value, function( index, name ) { + groups[name] = key; + }); + }); + var rules = this.settings.rules; + $.each(rules, function( key, value ) { + rules[key] = $.validator.normalizeRule(value); + }); + + function delegate(event) { + var validator = $.data(this[0].form, "validator"), + eventType = "on" + event.type.replace(/^validate/, ""); + if ( validator.settings[eventType] ) { + validator.settings[eventType].call(validator, this[0], event); + } + } + $(this.currentForm) + .validateDelegate(":text, [type='password'], [type='file'], select, textarea, " + + "[type='number'], [type='search'] ,[type='tel'], [type='url'], " + + "[type='email'], [type='datetime'], [type='date'], [type='month'], " + + "[type='week'], [type='time'], [type='datetime-local'], " + + "[type='range'], [type='color'] ", + "focusin focusout keyup", delegate) + .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate); + + if ( this.settings.invalidHandler ) { + $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/form + form: function() { + this.checkForm(); + $.extend(this.submitted, this.errorMap); + this.invalid = $.extend({}, this.errorMap); + if ( !this.valid() ) { + $(this.currentForm).triggerHandler("invalid-form", [this]); + } + this.showErrors(); + return this.valid(); + }, + + checkForm: function() { + this.prepareForm(); + for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { + this.check( elements[i] ); + } + return this.valid(); + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/element + element: function( element ) { + element = this.validationTargetFor( this.clean( element ) ); + this.lastElement = element; + this.prepareElement( element ); + this.currentElements = $(element); + var result = this.check( element ) !== false; + if ( result ) { + delete this.invalid[element.name]; + } else { + this.invalid[element.name] = true; + } + if ( !this.numberOfInvalids() ) { + // Hide error containers on last error + this.toHide = this.toHide.add( this.containers ); + } + this.showErrors(); + return result; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/showErrors + showErrors: function( errors ) { + if ( errors ) { + // add items to error list and map + $.extend( this.errorMap, errors ); + this.errorList = []; + for ( var name in errors ) { + this.errorList.push({ + message: errors[name], + element: this.findByName(name)[0] + }); + } + // remove items from success list + this.successList = $.grep( this.successList, function( element ) { + return !(element.name in errors); + }); + } + if ( this.settings.showErrors ) { + this.settings.showErrors.call( this, this.errorMap, this.errorList ); + } else { + this.defaultShowErrors(); + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/resetForm + resetForm: function() { + if ( $.fn.resetForm ) { + $(this.currentForm).resetForm(); + } + this.submitted = {}; + this.lastElement = null; + this.prepareForm(); + this.hideErrors(); + this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" ); + }, + + numberOfInvalids: function() { + return this.objectLength(this.invalid); + }, + + objectLength: function( obj ) { + var count = 0; + for ( var i in obj ) { + count++; + } + return count; + }, + + hideErrors: function() { + this.addWrapper( this.toHide ).hide(); + }, + + valid: function() { + return this.size() === 0; + }, + + size: function() { + return this.errorList.length; + }, + + focusInvalid: function() { + if ( this.settings.focusInvalid ) { + try { + $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []) + .filter(":visible") + .focus() + // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find + .trigger("focusin"); + } catch(e) { + // ignore IE throwing errors when focusing hidden elements + } + } + }, + + findLastActive: function() { + var lastActive = this.lastActive; + return lastActive && $.grep(this.errorList, function( n ) { + return n.element.name === lastActive.name; + }).length === 1 && lastActive; + }, + + elements: function() { + var validator = this, + rulesCache = {}; + + // select all valid inputs inside the form (no submit or reset buttons) + return $(this.currentForm) + .find("input, select, textarea") + .not(":submit, :reset, :image, [disabled]") + .not( this.settings.ignore ) + .filter(function() { + if ( !this.name && validator.settings.debug && window.console ) { + console.error( "%o has no name assigned", this); + } + + // select only the first element for each name, and only those with rules specified + if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) { + return false; + } + + rulesCache[this.name] = true; + return true; + }); + }, + + clean: function( selector ) { + return $(selector)[0]; + }, + + errors: function() { + var errorClass = this.settings.errorClass.replace(" ", "."); + return $(this.settings.errorElement + "." + errorClass, this.errorContext); + }, + + reset: function() { + this.successList = []; + this.errorList = []; + this.errorMap = {}; + this.toShow = $([]); + this.toHide = $([]); + this.currentElements = $([]); + }, + + prepareForm: function() { + this.reset(); + this.toHide = this.errors().add( this.containers ); + }, + + prepareElement: function( element ) { + this.reset(); + this.toHide = this.errorsFor(element); + }, + + elementValue: function( element ) { + var type = $(element).attr("type"), + val = $(element).val(); + + if ( type === "radio" || type === "checkbox" ) { + return $("input[name='" + $(element).attr("name") + "']:checked").val(); + } + + if ( typeof val === "string" ) { + return val.replace(/\r/g, ""); + } + return val; + }, + + check: function( element ) { + element = this.validationTargetFor( this.clean( element ) ); + + var rules = $(element).rules(); + var dependencyMismatch = false; + var val = this.elementValue(element); + var result; + + for (var method in rules ) { + var rule = { method: method, parameters: rules[method] }; + try { + + result = $.validator.methods[method].call( this, val, element, rule.parameters ); + + // if a method indicates that the field is optional and therefore valid, + // don't mark it as valid when there are no other rules + if ( result === "dependency-mismatch" ) { + dependencyMismatch = true; + continue; + } + dependencyMismatch = false; + + if ( result === "pending" ) { + this.toHide = this.toHide.not( this.errorsFor(element) ); + return; + } + + if ( !result ) { + this.formatAndAdd( element, rule ); + return false; + } + } catch(e) { + if ( this.settings.debug && window.console ) { + console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e ); + } + throw e; + } + } + if ( dependencyMismatch ) { + return; + } + if ( this.objectLength(rules) ) { + this.successList.push(element); + } + return true; + }, + + // return the custom message for the given element and validation method + // specified in the element's HTML5 data attribute + customDataMessage: function( element, method ) { + return $(element).data("msg-" + method.toLowerCase()) || (element.attributes && $(element).attr("data-msg-" + method.toLowerCase())); + }, + + // return the custom message for the given element name and validation method + customMessage: function( name, method ) { + var m = this.settings.messages[name]; + return m && (m.constructor === String ? m : m[method]); + }, + + // return the first defined argument, allowing empty strings + findDefined: function() { + for(var i = 0; i < arguments.length; i++) { + if ( arguments[i] !== undefined ) { + return arguments[i]; + } + } + return undefined; + }, + + defaultMessage: function( element, method ) { + return this.findDefined( + this.customMessage( element.name, method ), + this.customDataMessage( element, method ), + // title is never undefined, so handle empty string as undefined + !this.settings.ignoreTitle && element.title || undefined, + $.validator.messages[method], + "<strong>Warning: No message defined for " + element.name + "</strong>" + ); + }, + + formatAndAdd: function( element, rule ) { + var message = this.defaultMessage( element, rule.method ), + theregex = /\$?\{(\d+)\}/g; + if ( typeof message === "function" ) { + message = message.call(this, rule.parameters, element); + } else if (theregex.test(message)) { + message = $.validator.format(message.replace(theregex, "{$1}"), rule.parameters); + } + this.errorList.push({ + message: message, + element: element + }); + + this.errorMap[element.name] = message; + this.submitted[element.name] = message; + }, + + addWrapper: function( toToggle ) { + if ( this.settings.wrapper ) { + toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); + } + return toToggle; + }, + + defaultShowErrors: function() { + var i, elements; + for ( i = 0; this.errorList[i]; i++ ) { + var error = this.errorList[i]; + if ( this.settings.highlight ) { + this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass ); + } + this.showLabel( error.element, error.message ); + } + if ( this.errorList.length ) { + this.toShow = this.toShow.add( this.containers ); + } + if ( this.settings.success ) { + for ( i = 0; this.successList[i]; i++ ) { + this.showLabel( this.successList[i] ); + } + } + if ( this.settings.unhighlight ) { + for ( i = 0, elements = this.validElements(); elements[i]; i++ ) { + this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass ); + } + } + this.toHide = this.toHide.not( this.toShow ); + this.hideErrors(); + this.addWrapper( this.toShow ).show(); + }, + + validElements: function() { + return this.currentElements.not(this.invalidElements()); + }, + + invalidElements: function() { + return $(this.errorList).map(function() { + return this.element; + }); + }, + + showLabel: function( element, message ) { + var label = this.errorsFor( element ); + if ( label.length ) { + // refresh error/success class + label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); + // replace message on existing label + label.html(message); + } else { + // create label + label = $("<" + this.settings.errorElement + ">") + .attr("for", this.idOrName(element)) + .addClass(this.settings.errorClass) + .html(message || ""); + if ( this.settings.wrapper ) { + // make sure the element is visible, even in IE + // actually showing the wrapped element is handled elsewhere + label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); + } + if ( !this.labelContainer.append(label).length ) { + if ( this.settings.errorPlacement ) { + this.settings.errorPlacement(label, $(element) ); + } else { + label.insertAfter(element); + } + } + } + if ( !message && this.settings.success ) { + label.text(""); + if ( typeof this.settings.success === "string" ) { + label.addClass( this.settings.success ); + } else { + this.settings.success( label, element ); + } + } + this.toShow = this.toShow.add(label); + }, + + errorsFor: function( element ) { + var name = this.idOrName(element); + return this.errors().filter(function() { + return $(this).attr("for") === name; + }); + }, + + idOrName: function( element ) { + return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); + }, + + validationTargetFor: function( element ) { + // if radio/checkbox, validate first element in group instead + if ( this.checkable(element) ) { + element = this.findByName( element.name ).not(this.settings.ignore)[0]; + } + return element; + }, + + checkable: function( element ) { + return (/radio|checkbox/i).test(element.type); + }, + + findByName: function( name ) { + return $(this.currentForm).find("[name='" + name + "']"); + }, + + getLength: function( value, element ) { + switch( element.nodeName.toLowerCase() ) { + case "select": + return $("option:selected", element).length; + case "input": + if ( this.checkable( element) ) { + return this.findByName(element.name).filter(":checked").length; + } + } + return value.length; + }, + + depend: function( param, element ) { + return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; + }, + + dependTypes: { + "boolean": function( param, element ) { + return param; + }, + "string": function( param, element ) { + return !!$(param, element.form).length; + }, + "function": function( param, element ) { + return param(element); + } + }, + + optional: function( element ) { + var val = this.elementValue(element); + return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch"; + }, + + startRequest: function( element ) { + if ( !this.pending[element.name] ) { + this.pendingRequest++; + this.pending[element.name] = true; + } + }, + + stopRequest: function( element, valid ) { + this.pendingRequest--; + // sometimes synchronization fails, make sure pendingRequest is never < 0 + if ( this.pendingRequest < 0 ) { + this.pendingRequest = 0; + } + delete this.pending[element.name]; + if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { + $(this.currentForm).submit(); + this.formSubmitted = false; + } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) { + $(this.currentForm).triggerHandler("invalid-form", [this]); + this.formSubmitted = false; + } + }, + + previousValue: function( element ) { + return $.data(element, "previousValue") || $.data(element, "previousValue", { + old: null, + valid: true, + message: this.defaultMessage( element, "remote" ) + }); + } + + }, + + classRuleSettings: { + required: {required: true}, + email: {email: true}, + url: {url: true}, + date: {date: true}, + dateISO: {dateISO: true}, + number: {number: true}, + digits: {digits: true}, + creditcard: {creditcard: true} + }, + + addClassRules: function( className, rules ) { + if ( className.constructor === String ) { + this.classRuleSettings[className] = rules; + } else { + $.extend(this.classRuleSettings, className); + } + }, + + classRules: function( element ) { + var rules = {}; + var classes = $(element).attr("class"); + if ( classes ) { + $.each(classes.split(" "), function() { + if ( this in $.validator.classRuleSettings ) { + $.extend(rules, $.validator.classRuleSettings[this]); + } + }); + } + return rules; + }, + + attributeRules: function( element ) { + var rules = {}; + var $element = $(element); + var type = $element[0].getAttribute("type"); + + for (var method in $.validator.methods) { + var value; + + // support for <input required> in both html5 and older browsers + if ( method === "required" ) { + value = $element.get(0).getAttribute(method); + // Some browsers return an empty string for the required attribute + // and non-HTML5 browsers might have required="" markup + if ( value === "" ) { + value = true; + } + // force non-HTML5 browsers to return bool + value = !!value; + } else { + value = $element.attr(method); + } + + // convert the value to a number for number inputs, and for text for backwards compability + // allows type="date" and others to be compared as strings + if ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) { + value = Number(value); + } + + if ( value ) { + rules[method] = value; + } else if ( type === method && type !== 'range' ) { + // exception: the jquery validate 'range' method + // does not test for the html5 'range' type + rules[method] = true; + } + } + + // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs + if ( rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength) ) { + delete rules.maxlength; + } + + return rules; + }, + + dataRules: function( element ) { + var method, value, + rules = {}, $element = $(element); + for (method in $.validator.methods) { + value = $element.data("rule-" + method.toLowerCase()); + if ( value !== undefined ) { + rules[method] = value; + } + } + return rules; + }, + + staticRules: function( element ) { + var rules = {}; + var validator = $.data(element.form, "validator"); + if ( validator.settings.rules ) { + rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; + } + return rules; + }, + + normalizeRules: function( rules, element ) { + // handle dependency check + $.each(rules, function( prop, val ) { + // ignore rule when param is explicitly false, eg. required:false + if ( val === false ) { + delete rules[prop]; + return; + } + if ( val.param || val.depends ) { + var keepRule = true; + switch (typeof val.depends) { + case "string": + keepRule = !!$(val.depends, element.form).length; + break; + case "function": + keepRule = val.depends.call(element, element); + break; + } + if ( keepRule ) { + rules[prop] = val.param !== undefined ? val.param : true; + } else { + delete rules[prop]; + } + } + }); + + // evaluate parameters + $.each(rules, function( rule, parameter ) { + rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; + }); + + // clean number parameters + $.each(['minlength', 'maxlength'], function() { + if ( rules[this] ) { + rules[this] = Number(rules[this]); + } + }); + $.each(['rangelength', 'range'], function() { + var parts; + if ( rules[this] ) { + if ( $.isArray(rules[this]) ) { + rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; + } else if ( typeof rules[this] === "string" ) { + parts = rules[this].split(/[\s,]+/); + rules[this] = [Number(parts[0]), Number(parts[1])]; + } + } + }); + + if ( $.validator.autoCreateRanges ) { + // auto-create ranges + if ( rules.min && rules.max ) { + rules.range = [rules.min, rules.max]; + delete rules.min; + delete rules.max; + } + if ( rules.minlength && rules.maxlength ) { + rules.rangelength = [rules.minlength, rules.maxlength]; + delete rules.minlength; + delete rules.maxlength; + } + } + + return rules; + }, + + // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} + normalizeRule: function( data ) { + if ( typeof data === "string" ) { + var transformed = {}; + $.each(data.split(/\s/), function() { + transformed[this] = true; + }); + data = transformed; + } + return data; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/addMethod + addMethod: function( name, method, message ) { + $.validator.methods[name] = method; + $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name]; + if ( method.length < 3 ) { + $.validator.addClassRules(name, $.validator.normalizeRule(name)); + } + }, + + methods: { + + // http://docs.jquery.com/Plugins/Validation/Methods/required + required: function( value, element, param ) { + // check if dependency is met + if ( !this.depend(param, element) ) { + return "dependency-mismatch"; + } + if ( element.nodeName.toLowerCase() === "select" ) { + // could be an array for select-multiple or a string, both are fine this way + var val = $(element).val(); + return val && val.length > 0; + } + if ( this.checkable(element) ) { + return this.getLength(value, element) > 0; + } + return $.trim(value).length > 0; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/email + email: function( value, element ) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ + return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/url + url: function( value, element ) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ + return this.optional(element) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/date + date: function( value, element ) { + return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString()); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/dateISO + dateISO: function( value, element ) { + return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/number + number: function( value, element ) { + return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/digits + digits: function( value, element ) { + return this.optional(element) || /^\d+$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/creditcard + // based on http://en.wikipedia.org/wiki/Luhn + creditcard: function( value, element ) { + if ( this.optional(element) ) { + return "dependency-mismatch"; + } + // accept only spaces, digits and dashes + if ( /[^0-9 \-]+/.test(value) ) { + return false; + } + var nCheck = 0, + nDigit = 0, + bEven = false; + + value = value.replace(/\D/g, ""); + + for (var n = value.length - 1; n >= 0; n--) { + var cDigit = value.charAt(n); + nDigit = parseInt(cDigit, 10); + if ( bEven ) { + if ( (nDigit *= 2) > 9 ) { + nDigit -= 9; + } + } + nCheck += nDigit; + bEven = !bEven; + } + + return (nCheck % 10) === 0; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/minlength + minlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || length >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/maxlength + maxlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || length <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/rangelength + rangelength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element); + return this.optional(element) || ( length >= param[0] && length <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/min + min: function( value, element, param ) { + return this.optional(element) || value >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/max + max: function( value, element, param ) { + return this.optional(element) || value <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/range + range: function( value, element, param ) { + return this.optional(element) || ( value >= param[0] && value <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/equalTo + equalTo: function( value, element, param ) { + // bind to the blur event of the target in order to revalidate whenever the target field is updated + // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead + var target = $(param); + if ( this.settings.onfocusout ) { + target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() { + $(element).valid(); + }); + } + return value === target.val(); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/remote + remote: function( value, element, param ) { + if ( this.optional(element) ) { + return "dependency-mismatch"; + } + + var previous = this.previousValue(element); + if (!this.settings.messages[element.name] ) { + this.settings.messages[element.name] = {}; + } + previous.originalMessage = this.settings.messages[element.name].remote; + this.settings.messages[element.name].remote = previous.message; + + param = typeof param === "string" && {url:param} || param; + + if ( previous.old === value ) { + return previous.valid; + } + + previous.old = value; + var validator = this; + this.startRequest(element); + var data = {}; + data[element.name] = value; + $.ajax($.extend(true, { + url: param, + mode: "abort", + port: "validate" + element.name, + dataType: "json", + data: data, + success: function( response ) { + validator.settings.messages[element.name].remote = previous.originalMessage; + var valid = response === true || response === "true"; + if ( valid ) { + var submitted = validator.formSubmitted; + validator.prepareElement(element); + validator.formSubmitted = submitted; + validator.successList.push(element); + delete validator.invalid[element.name]; + validator.showErrors(); + } else { + var errors = {}; + var message = response || validator.defaultMessage( element, "remote" ); + errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message; + validator.invalid[element.name] = true; + validator.showErrors(errors); + } + previous.valid = valid; + validator.stopRequest(element, valid); + } + }, param)); + return "pending"; + } + + } + +}); + +// deprecated, use $.validator.format instead +$.format = $.validator.format; + +}(jQuery)); + +// ajax mode: abort +// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); +// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() +(function($) { + var pendingRequests = {}; + // Use a prefilter if available (1.5+) + if ( $.ajaxPrefilter ) { + $.ajaxPrefilter(function( settings, _, xhr ) { + var port = settings.port; + if ( settings.mode === "abort" ) { + if ( pendingRequests[port] ) { + pendingRequests[port].abort(); + } + pendingRequests[port] = xhr; + } + }); + } else { + // Proxy ajax + var ajax = $.ajax; + $.ajax = function( settings ) { + var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, + port = ( "port" in settings ? settings : $.ajaxSettings ).port; + if ( mode === "abort" ) { + if ( pendingRequests[port] ) { + pendingRequests[port].abort(); + } + pendingRequests[port] = ajax.apply(this, arguments); + return pendingRequests[port]; + } + return ajax.apply(this, arguments); + }; + } +}(jQuery)); + +// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation +// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target +(function($) { + $.extend($.fn, { + validateDelegate: function( delegate, type, handler ) { + return this.bind(type, function( event ) { + var target = $(event.target); + if ( target.is(delegate) ) { + return handler.apply(target, arguments); + } + }); + } + }); +}(jQuery)); diff --git a/js/login-mesh.js b/js/login-mesh.js new file mode 100644 index 0000000..a14fd63 --- /dev/null +++ b/js/login-mesh.js @@ -0,0 +1,311 @@ +/* ============================================================================ + * SoftSPM — animowane tlo "flowing wave mesh" (Canvas 2D, bez bibliotek) + * ---------------------------------------------------------------------------- + * Tryby: + * 'text' - wezly ukladaja sie w podany napis (drgaja z mala amplituda), + * 'wave' - pasmo falujacych linii (suma sinusow, ruch organiczny). + * + * Sterowanie z HTML przez atrybuty canvasu: + * data-mode="text|wave" data-text="SoftSPM" + * + * Wszystkie parametry w jednym obiekcie CONFIG ponizej. + * Zgodne z PHP 5.4 / starymi przegladarkami (czysty ES5, requestAnimationFrame). + * ========================================================================== */ +(function () { + 'use strict'; + + var CONFIG = { + mode: 'text', // 'text' | 'wave' + text: 'SoftSPM', + + // --- siatka / probkowanie --- + grid: 7, // odleglosc miedzy wezlami [px] (mniej = gesciej) + alphaThreshold: 120, // min. alfa piksela litery, by postawic wezel + + // --- tekst --- + fontWeight: '700', + fontFamily: '"Segoe UI", Roboto, Arial, sans-serif', + textHeightRatio: 0.17, // wysokosc fontu wzgledem wysokosci canvasu + textAnchor: { x: 0.07, y: 0.90 }, // kotwica napisu (ulamek szer./wys.) -> dol-lewo + + // --- ruch --- + amplitude: 1.7, // amplituda drgania wezlow [px] (maly = czytelny napis) + speed: 0.0016, // mnoznik czasu + + // --- kolor / poswiata --- + color: { r: 41, g: 171, b: 226 }, // turkus marki SoftSPM (rgb 41,171,226) + opacity: 0.85, + glow: 8, // shadowBlur (poswiata neonowa) + lineWidth: 1, + nodeRadius: 1.15, + drawNodes: true, + + // --- reflektor (jasnosc wygasa przy krawedziach) --- + edgeFalloff: 0.55, // 0 = brak, 1 = pelne wygaszenie na krawedziach + spotlightCenter: null, // null = auto (srodek napisu / 0.5 dla fali) + + // --- tryb 'wave' --- + waveCols: 90, + waveRows: 13, + bandCenter: 0.72, // srodek pasma (ulamek wysokosci) + bandWidth: 0.40, // szerokosc pasma (ulamek wysokosci) + connectorEvery: 3, // co ile kolumn pionowy lacznik (efekt siatki) + // skladowe fal: [amplituda(px), czestotliwosc, predkosc, faza] + waves: [ + [22, 0.018, 0.9, 0.0], + [14, 0.035, -1.4, 1.7], + [9, 0.061, 2.1, 3.1], + [6, 0.090, -2.8, 0.6] + ] + }; + + function MeshAnim(canvas, cfg) { + this.canvas = canvas; + this.cfg = cfg; + this.ctx = canvas.getContext('2d'); + this.dpr = window.devicePixelRatio || 1; + this.w = 0; + this.h = 0; + this.nodes = []; + this.edges = []; + this.spotX = 0.5; + this.raf = 0; + this._resizeTimer = 0; + + var self = this; + this._onResize = function () { + clearTimeout(self._resizeTimer); + self._resizeTimer = setTimeout(function () { self.resize(); }, 120); + }; + window.addEventListener('resize', this._onResize); + } + + MeshAnim.prototype.resize = function () { + var rect = this.canvas.getBoundingClientRect(); + this.dpr = window.devicePixelRatio || 1; + this.w = Math.max(1, Math.round(rect.width)); + this.h = Math.max(1, Math.round(rect.height)); + this.canvas.width = Math.round(this.w * this.dpr); + this.canvas.height = Math.round(this.h * this.dpr); + this.ctx.setTransform(this.dpr, 0, 0, this.dpr, 0, 0); + this.build(); + }; + + MeshAnim.prototype.build = function () { + if (this.cfg.mode === 'wave') this.buildWave(); + else this.buildText(); + + // srodek reflektora + if (this.cfg.spotlightCenter != null) { + this.spotX = this.cfg.spotlightCenter; + } else if (this.cfg.mode === 'text' && this.nodes.length) { + var minX = Infinity, maxX = -Infinity, i; + for (i = 0; i < this.nodes.length; i++) { + if (this.nodes[i].bx < minX) minX = this.nodes[i].bx; + if (this.nodes[i].bx > maxX) maxX = this.nodes[i].bx; + } + this.spotX = ((minX + maxX) / 2) / this.w; + } else { + this.spotX = 0.5; + } + }; + + // --- model TEKST: render na ukrytym canvasie -> probkowanie pikseli --- + MeshAnim.prototype.buildText = function () { + var cfg = this.cfg, w = this.w, h = this.h; + this.nodes = []; + this.edges = []; + if (!w || !h) return; + + var off = document.createElement('canvas'); + off.width = w; off.height = h; + var octx = off.getContext('2d'); + var size = Math.round(h * cfg.textHeightRatio); + octx.font = cfg.fontWeight + ' ' + size + 'px ' + cfg.fontFamily; + octx.textBaseline = 'alphabetic'; + octx.textAlign = 'left'; + octx.fillStyle = '#fff'; + octx.fillText(cfg.text, Math.round(w * cfg.textAnchor.x), Math.round(h * cfg.textAnchor.y)); + + var img = octx.getImageData(0, 0, w, h).data; + var step = cfg.grid; + var cols = Math.floor(w / step); + var rows = Math.floor(h / step); + var indexMap = {}; // "c_r" -> node index + var c, r, px, py, a, idx; + + for (r = 0; r < rows; r++) { + for (c = 0; c < cols; c++) { + px = c * step + (step >> 1); + py = r * step + (step >> 1); + a = img[(py * w + px) * 4 + 3]; + if (a >= cfg.alphaThreshold) { + indexMap[c + '_' + r] = this.nodes.length; + this.nodes.push({ + bx: px, by: py, + ph: (c * 0.7 + r * 1.3), // faza drgania + fx: 0.9 + (c % 5) * 0.06, // lekko rozne czestotliwosci + fy: 1.1 + (r % 4) * 0.05 + }); + } + } + } + // krawedzie: prawo, dol, skos prawy-dol (siatka trojkatna) + var neigh = [[1, 0], [0, 1], [1, 1]]; + for (r = 0; r < rows; r++) { + for (c = 0; c < cols; c++) { + idx = indexMap[c + '_' + r]; + if (idx == null) continue; + for (var n = 0; n < neigh.length; n++) { + var j = indexMap[(c + neigh[n][0]) + '_' + (r + neigh[n][1])]; + if (j != null) this.edges.push([idx, j]); + } + } + } + }; + + // --- model FALA: pasmo wezlow, ruch = suma sinusow --- + MeshAnim.prototype.buildWave = function () { + var cfg = this.cfg, w = this.w, h = this.h; + this.nodes = []; + this.edges = []; + if (!w || !h) return; + + var cols = cfg.waveCols, rows = cfg.waveRows; + var band = cfg.bandWidth * h; + var top = cfg.bandCenter * h - band / 2; + var grid = []; + var c, r; + for (r = 0; r < rows; r++) { + grid[r] = []; + for (c = 0; c < cols; c++) { + var bx = (cols === 1 ? 0 : c / (cols - 1)) * w; + var by = top + (rows === 1 ? 0.5 : r / (rows - 1)) * band; + grid[r][c] = this.nodes.length; + this.nodes.push({ bx: bx, by: by, col: c, row: r }); + } + } + for (r = 0; r < rows; r++) { + for (c = 0; c < cols; c++) { + if (c < cols - 1) this.edges.push([grid[r][c], grid[r][c + 1]]); // poziome + if (r < rows - 1 && c % cfg.connectorEvery === 0) { + this.edges.push([grid[r][c], grid[r + 1][c]]); // pionowe laczniki + } + } + } + }; + + MeshAnim.prototype.nodePos = function (nd, t) { + var cfg = this.cfg; + if (cfg.mode === 'wave') { + var y = nd.by, wv = cfg.waves, k; + for (k = 0; k < wv.length; k++) { + y += wv[k][0] * Math.sin(nd.bx * wv[k][1] + t * wv[k][2] + wv[k][3] + nd.row * 0.4); + } + return [nd.bx, y]; + } + // tryb tekstu: drobne drganie (napis czytelny) + var a = cfg.amplitude; + return [ + nd.bx + a * Math.sin(t * nd.fx + nd.ph), + nd.by + a * Math.cos(t * nd.fy + nd.ph * 1.3) + ]; + }; + + MeshAnim.prototype.frame = function (now) { + var self = this; + var cfg = this.cfg, ctx = this.ctx, w = this.w, h = this.h; + var t = now * cfg.speed; + ctx.clearRect(0, 0, w, h); + + if (this.nodes.length) { + // policz pozycje raz na klatke + var pos = new Array(this.nodes.length), i; + for (i = 0; i < this.nodes.length; i++) pos[i] = this.nodePos(this.nodes[i], t); + + var col = cfg.color; + var stroke = 'rgb(' + col.r + ',' + col.g + ',' + col.b + ')'; + ctx.lineWidth = cfg.lineWidth; + ctx.lineCap = 'round'; + ctx.shadowColor = stroke; + ctx.shadowBlur = cfg.glow; + ctx.strokeStyle = stroke; + + // kubelki jasnosci (reflektor) -> 1 stroke na kubelek = wydajnie z glow + var BUCKETS = 6, b, paths = []; + for (b = 0; b < BUCKETS; b++) paths[b] = []; + var e, a, bxC, fac, bk; + for (i = 0; i < this.edges.length; i++) { + e = this.edges[i]; + a = pos[e[0]]; var b2 = pos[e[1]]; + bxC = ((a[0] + b2[0]) / 2) / w; // srodek krawedzi (ulamek szer.) + fac = 1 - cfg.edgeFalloff * Math.pow(Math.abs(bxC - this.spotX) * 2, 2); + if (fac <= 0.02) continue; + bk = Math.min(BUCKETS - 1, Math.max(0, Math.floor(fac * BUCKETS))); + paths[bk].push(a, b2); + } + for (b = 0; b < BUCKETS; b++) { + if (!paths[b].length) continue; + ctx.globalAlpha = cfg.opacity * ((b + 0.5) / BUCKETS); + ctx.beginPath(); + for (i = 0; i < paths[b].length; i += 2) { + ctx.moveTo(paths[b][i][0], paths[b][i][1]); + ctx.lineTo(paths[b][i + 1][0], paths[b][i + 1][1]); + } + ctx.stroke(); + } + + // wezly jako drobne punkty (jeden fill) + if (cfg.drawNodes) { + ctx.globalAlpha = cfg.opacity; + ctx.fillStyle = stroke; + ctx.beginPath(); + for (i = 0; i < pos.length; i++) { + ctx.moveTo(pos[i][0] + cfg.nodeRadius, pos[i][1]); + ctx.arc(pos[i][0], pos[i][1], cfg.nodeRadius, 0, Math.PI * 2); + } + ctx.fill(); + } + ctx.globalAlpha = 1; + ctx.shadowBlur = 0; + } + + this.raf = window.requestAnimationFrame(function (ts) { self.frame(ts); }); + }; + + MeshAnim.prototype.start = function () { + var self = this; + this.resize(); + this.raf = window.requestAnimationFrame(function (ts) { self.frame(ts); }); + }; + + MeshAnim.prototype.destroy = function () { + window.cancelAnimationFrame(this.raf); + window.removeEventListener('resize', this._onResize); + }; + + function boot() { + var canvas = document.getElementById('spm-mesh'); + if (!canvas) return; + var cfg = {}; + for (var k in CONFIG) if (CONFIG.hasOwnProperty(k)) cfg[k] = CONFIG[k]; + if (canvas.getAttribute('data-mode')) cfg.mode = canvas.getAttribute('data-mode'); + if (canvas.getAttribute('data-text')) cfg.text = canvas.getAttribute('data-text'); + + var anim = new MeshAnim(canvas, cfg); + window.spmMesh = anim; + + // przy wlasnej czcionce poczekaj na gotowosc fontow (czytelny napis) + if (cfg.mode === 'text' && document.fonts && document.fonts.ready) { + document.fonts.ready.then(function () { anim.start(); }); + } else { + anim.start(); + } + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', boot); + } else { + boot(); + } +})(); diff --git a/js/myJsScripts.js b/js/myJsScripts.js new file mode 100644 index 0000000..c2a10ff --- /dev/null +++ b/js/myJsScripts.js @@ -0,0 +1,23 @@ +/** + * Created by Przemek on 30.03.15. + */ +function ukryj(id) { + document.getElementById(id).style.display="none"; + document.getElementById(id).style.position="absolute"; +} + +function show(id) { + document.getElementById(id).style.display="block"; + document.getElementById(id).style.position="relative"; +} + +function pokaz(id) +{ + if(document.getElementById(id).style.display=="block") + { + ukryj(id); + } + else { + show(id); + } +} diff --git a/js/myValidations.js b/js/myValidations.js new file mode 100644 index 0000000..395a830 --- /dev/null +++ b/js/myValidations.js @@ -0,0 +1,768 @@ +$().ready(function() +{ + + // validate PumpCatalogueForm form on keyup and submit + // ====================================================================== // + $("#PumpCatalogueForm").validate( + { + rules: { + inPumpName: "required", + inPumpQn: "required", + inPumpHp: "required", + inPumpEta: "required" + }, + messages: { + inPumpName: "Please enter a pump type or name", + inPumpQn: "Pole wymagane.", + inPumpHp: "Pole wymagane.", + inPumpEta: "Pole wymagane." + } + }); + // ====================================================================== // + + + // validate AddUserForm form on keyup and submit + // ====================================================================== // + $("#AddUserForm").validate( + { + rules: { + inUserFName: "required", + inUserLName: "required", + inUserLogin: { + required: true, + minlength: 3 + }, + inUserMail: { + required: true, + email: true + } + }, + messages: { + inUserFName: "Please enter your firstname", + inUserLName: "Please enter your lastname", + inUserLogin: { + required: "Please enter a login", + minlength: "Your login must consist of at least 3 characters" + }, + inUserMail: "Please enter a valid email address" + } + }); + // ====================================================================== // + + + // validate EditProfileForm form on keyup and submit + // ====================================================================== // + $("#EditProfileForm").validate( + { + rules: { + inProfileName: "required" + }, + messages: { + inProfileName: "Please enter a profilename" + } + }); + // ====================================================================== // + + // validate ManufacturesForm form on keyup and submit + // ====================================================================== // + $("#ManufacturesForm").validate( + { + rules: { + inManufName: "required" + }, + messages: { + inManufName: "Please enter a manufacture name" + } + }); + // ====================================================================== // + + + // validate ChangeUserPasswordForm form on keyup and submit + // ====================================================================== // + $("#ChangeUserPasswordForm").validate( + { + rules: { + inOldPass: "required", + inNewPass: { + required: true, + minlength: 5 + }, + inReNewPass: { + required: true, + minlength: 5, + equalTo: "#inNewPass" + } + }, + messages: { + inOldPass: "Pole wymagane.", + inNewPass: { + required: "Please provide a password", + minlength: "Your password must be at least 5 characters long" + }, + inReNewPass: { + required: "Please provide a password", + minlength: "Your password must be at least 5 characters long", + equalTo: "Please enter the same password as above" + } + } + }); + // ====================================================================== // + + + // validate AddNewWellParameter form on keyup and submit + // ====================================================================== // + $("#AddNewWellParameter").validate( + { + rules: { + inWellParamDate: "required", + inWellParamValue: "required" + }, + messages: { + inWellParamDate: "Please click on the field and select the date from the calendar", + inWellParamValue: "Pole wymagane." + } + }); + // ====================================================================== // + + + // validate AddNewWell form on keyup and submit + // ====================================================================== // + $("#AddNewWell").validate( + { + rules: { + inWellName: "required", + inWellDiame: { + required: true + }, + inWellZas: { + required: true + }, + inWellDepth: { + required: true + }, + inWellLat: { + required: true + }, + inWellLong: { + required: true + } + + }, + messages: { + inWellName: "Pole wymagane.", + inWellDiame: { + required: "Pole wymagane." + }, + inWellZas: { + required: "Pole wymagane." + }, + inWellDepth: { + required: "Pole wymagane." + }, + inWellLat: { + required: "Pole wymagane." + }, + inWellLong: { + required: "Pole wymagane." + } + } + }); + // ====================================================================== // + + + // validate AddKnowledgeFile form on keyup and submit + // ====================================================================== // + $("#AddKnowledgeFile").validate( + { + rules: { + inKnowledgeFile: "required", + inKnowledgeNAme: "required" + }, + messages: { + inKnowledgeFile: "Please choose the file", + inKnowledgeNAme: "Pole wymagane." + } + }); + // ====================================================================== // + + // validate AddParamInDictionary form on keyup and submit + // ====================================================================== // + $("#AddParamInDictionary").validate( + { + rules: { + inDictionaryPolish: "required" + }, + messages: { + inDictionaryPolish: "Pole wymagane." + } + }); + // ====================================================================== // + + // validate CableCatalogueForm form on keyup and submit + // ====================================================================== // + $("#CableCatalogueForm").validate( + { + rules: { + inCableName: "required", + inCableManufID: { + required: true, + min: 1 + } + }, + messages: { + inCableName: "Pole wymagane.", + inCableManufID: "Please select the manufacturer." + } + }); + // ====================================================================== // + + // validate PipingCatalogueForm form on keyup and submit + // ====================================================================== // + $("#PipingCatalogueForm").validate( + { + rules: { + inCableName: "required", + inCableManufID: { + required: true, + min: 1 + }, + inPipingDiameter: "required" + }, + messages: { + inCableName: "Pole wymagane.", + inCableManufID: "Please select the manufacturer.", + inPipingDiameter: "Pole wymagane." + } + }); + // ====================================================================== // + + // validate AddNewRePie form on keyup and submit + // ====================================================================== // + $("#AddNewRePie").validate( + { + rules: { + inRePieName: "required", + inRePieNManufID: { + required: true, + min: 1 + }, + inRePieHeight: "required", + inRePieMaxAcc: "required", + inRePieMaxWar: "required", + inRePieMinWar: "required", + inRePieMinAcc: "required", + inRePieLat: "required", + inRePieLong: "required" + + }, + messages: { + inRePieName: "Pole wymagane.", + inRePieNManufID: "Please select the manufacturer.", + inRePieHeight: "Pole wymagane.", + inRePieMaxAcc: "Pole wymagane.", + inRePieMaxWar: "Pole wymagane.", + inRePieMinWar: "Pole wymagane.", + inRePieMinAcc: "Pole wymagane.", + inRePieLat: "Pole wymagane.", + inRePieLong: "Pole wymagane." + } + }); + // ====================================================================== // + + // validate AddNewRePiezom form on keyup and submit + // ====================================================================== // + $("#AddNewRePiezom").validate( + { + rules: { + inRePieName: "required", + inRePieDepth: "required", + inRePieDiameter: "required", + inRePieLat: "required", + inRePieLong: "required" + + }, + messages: { + inRePieName: "Pole wymagane.", + inRePieDepth: "Pole wymagane.", + inRePieDiameter: "Pole wymagane.", + inRePieLat: "Pole wymagane.", + inRePieLong: "Pole wymagane." + } + }); + // ====================================================================== // + + // validate ConfigMailForm form on keyup and submit + // ====================================================================== // + $("#ConfigMailForm").validate( + { + rules: { + inMailName: "required", + inMailSMTP: "required", + inMailSMTPort: "required", + inMailSMTPuser: "required", + inMailSMTPass: "required" + }, + messages: { + inMailName: "Pole wymagane.", + inMailSMTP: "Pole wymagane.", + inMailSMTPort: "Pole wymagane.", + inMailSMTPuser: "Pole wymagane.", + inMailSMTPass: "Pole wymagane." + } + }); + // ====================================================================== // + + // validate ConfigGSMForm form on keyup and submit + // ====================================================================== // + $("#ConfigGSMForm").validate( + { + rules: { + inGSMno: "required", + inGSMparamFrom: "required", + inGSMparamTo: "required", + inGSMdrs: { + required: true, + min: 1 + } + }, + messages: { + inGSMno: "Pole wymagane.", + inGSMparamFrom: "Pole wymagane.", + inGSMparamTo: "Pole wymagane.", + inGSMdrs: "Please select the object." + } + }); + // ====================================================================== // + + // validate AddNewCable form on keyup and submit + // ====================================================================== // + $("#AddNewCable").validate( + { + rules: { + inCablePis: "required", + inCableBuyDate: "required" + }, + messages: { + inCablePis: "Pole wymagane.", + inCableBuyDate: "Pole wymagane.", + } + }); + // ====================================================================== // + + + // validate Orders step ONE form on keyup and submit + // ====================================================================== // + $("#AddOrders_1").validate( + { + rules: { + inOrderObjectType: { + required: true, + min: 1 + }, + inOrderOwner: "required" + }, + messages: { + inOrderObjectType: "Proszę wybrać obiekt z listy.", + inOrderOwner: "Pole wymagane." + } + }); + // ====================================================================== // + + // validate Orders step ONE form on keyup and submit + // ====================================================================== // + $("#AddOrders_2w").validate( + { + rules: { + inOrderWell: { + required: true, + min: 0 + }, + }, + messages: { + inOrderWell: "Proszę wybrać studnię z listy.", + } + }); + + $("#AddOrders_2p").validate( + { + rules: { + inOrderPiezo: { + required: true, + min: 0 + }, + }, + messages: { + inOrderPiezo: "Proszę wybrać piezometr z listy.", + } + }); + // ====================================================================== // + + + // validate Orders step ONE form on keyup and submit + // ====================================================================== // + $("#AddOrders_3").validate( + { + rules: { + inNewPump: "required", + inNewEng: "required" + }, + messages: { + inNewPump: "Pole wymagane.", + inNewEng: "Pole wymagane." + } + }); + // ====================================================================== // + + + + + + + // zapis dynamicznych danych dla studni + // ====================================================================== // + $('#imgEditAction').show(); + $('#imgCleanAction').hide(); + $('#imgCancelAction').hide(); + $('#imgSaveAction').hide(); + $('#in401_date').hide(); + + $('#imgEditAction').click(function(){ + + $('#imgEditAction').hide(); + $('#imgCleanAction').show(); + $('#imgCancelAction').show(); + $('#imgSaveAction').show(); + $('#in401_date').show(); + + //data pomiaru + $("#data_01").prop('disabled', false); + $("#data_01").addClass("readonly_show"); + + //$("#data_01").focus(); + + //parametry pracy + $("#in401_200").prop('disabled', false); + $("#in401_205").prop('disabled', false); + $("#in401_210").prop('disabled', false); + $("#in401_212").prop('disabled', false); + $("#in401_215").prop('disabled', false); + $("#in401_220").prop('disabled', false); + $("#in401_225").prop('disabled', false); + $("#in401_230").prop('disabled', false); + $("#in401_245").prop('disabled', false); + $("#in401_401").prop('disabled', false); + $("#in401_402").prop('disabled', false); + $("#in401_730").prop('disabled', false); + + + $("#in401_200").addClass("readonly_show"); + $("#in401_205").addClass("readonly_show"); + $("#in401_210").addClass("readonly_show"); + $("#in401_212").addClass("readonly_show"); + $("#in401_215").addClass("readonly_show"); + $("#in401_220").addClass("readonly_show"); + $("#in401_225").addClass("readonly_show"); + $("#in401_230").addClass("readonly_show"); + $("#in401_245").addClass("readonly_show"); + $("#in401_401").addClass("readonly_show"); + $("#in401_402").addClass("readonly_show"); + $("#in401_730").addClass("readonly_show"); + + + //parametry elektryczne + $("#in401_260").prop('disabled', false); + $("#in401_265").prop('disabled', false); + $("#in401_270").prop('disabled', false); + $("#in401_275").prop('disabled', false); + $("#in401_280").prop('disabled', false); + $("#in401_290").prop('disabled', false); + $("#in401_721").prop('disabled', false); + + $("#in401_260").addClass("readonly_show"); + $("#in401_265").addClass("readonly_show"); + $("#in401_270").addClass("readonly_show"); + $("#in401_275").addClass("readonly_show"); + $("#in401_280").addClass("readonly_show"); + $("#in401_290").addClass("readonly_show"); + $("#in401_721").addClass("readonly_show"); + + + }); + + // ====================================================================== // + $('#imgSaveAction').click(function(){ + + $('#imgEditAction').show(); + $('#imgSaveAction').hide(); + $('#imgCleanAction').hide(); + $('#imgCancelAction').hide(); + $('#in401_date').hide(); + + + //data pomiaru + $("#data_01").prop('disabled', true); + $("#data_01").removeClass("readonly_show"); + + var dateVal = $("#data_01").val(); + var timehVal = $("#inTimeH").val(); + var timemVal = $("#inTimeM").val(); + + var devVal = $("#inDevID").val(); + var qVal = $("#in401_200").val(); + var hdVal = $("#in401_205").val(); + var hsVal = $("#in401_210").val(); + var hs0Val = $("#in401_212").val(); + var p1Val = $("#in401_215").val(); + var p2Val = $("#in401_220").val(); + var pbVal = $("#in401_225").val(); + var vVal = $("#in401_230").val(); + var twVal = $("#in401_245").val(); + var ppVal = $("#in401_401").val(); + var hhVal = $("#in401_402").val(); + var zasVal = $("#in401_730").val(); + + var peVal = $("#in401_260").val(); + var kwcVal = $("#in401_265").val(); + var iVal = $("#in401_270").val(); + var uVal = $("#in401_275").val(); + var fiVal = $("#in401_280").val(); + var timeVal = $("#in401_290").val(); + var engVal = $("#in401_721").val(); + + $.post('./ajax_func.php',{ + post_site: 'site401inf', + post_action: 'edit_param', + post_date: dateVal+' '+timehVal+':'+timemVal+':00', + post_dev: devVal, + post_q: qVal, + post_hd: hdVal, + post_hs: hsVal, + post_h0: hs0Val, + post_p1: p1Val, + post_p2: p2Val, + post_pb: pbVal, + post_v: vVal, + post_tw: twVal, + post_pp: ppVal, + post_hh: hhVal, + post_zas: zasVal, + + post_i: iVal, + post_u: uVal, + post_fi: fiVal, + post_time: timeVal, + post_pe: peVal, + post_en: engVal, + post_kwc: kwcVal + + } + ); + + + + + //parametry pracy + $("#in401_200").prop('disabled', true); + $("#in401_205").prop('disabled', true); + $("#in401_210").prop('disabled', true); + $("#in401_212").prop('disabled', true); + $("#in401_215").prop('disabled', true); + $("#in401_220").prop('disabled', true); + $("#in401_225").prop('disabled', true); + $("#in401_230").prop('disabled', true); + $("#in401_245").prop('disabled', true); + $("#in401_401").prop('disabled', true); + $("#in401_402").prop('disabled', true); + $("#in401_730").prop('disabled', true); + + $("#in401_200").removeClass("readonly_show"); + $("#in401_205").removeClass("readonly_show"); + $("#in401_210").removeClass("readonly_show"); + $("#in401_212").removeClass("readonly_show"); + $("#in401_215").removeClass("readonly_show"); + $("#in401_220").removeClass("readonly_show"); + $("#in401_225").removeClass("readonly_show"); + $("#in401_230").removeClass("readonly_show"); + $("#in401_245").removeClass("readonly_show"); + $("#in401_401").removeClass("readonly_show"); + $("#in401_402").removeClass("readonly_show"); + $("#in401_730").removeClass("readonly_show"); + + + //parametry elektryczne + $("#in401_260").prop('disabled', true); + $("#in401_265").prop('disabled', true); + $("#in401_270").prop('disabled', true); + $("#in401_275").prop('disabled', true); + $("#in401_280").prop('disabled', true); + $("#in401_290").prop('disabled', true); + $("#in401_721").prop('disabled', true); + + $("#in401_260").removeClass("readonly_show"); + $("#in401_265").removeClass("readonly_show"); + $("#in401_270").removeClass("readonly_show"); + $("#in401_275").removeClass("readonly_show"); + $("#in401_280").removeClass("readonly_show"); + $("#in401_290").removeClass("readonly_show"); + $("#in401_721").removeClass("readonly_show"); + + swal("Sukces!", "Dane zostały zapisane!", "success"); + + + }); + + // ====================================================================== // + $('#imgCancelAction').click(function(){ + $('#imgEditAction').show(); + $('#imgCleanAction').hide(); + $('#imgCancelAction').hide(); + $('#imgSaveAction').hide(); + $('#in401_date').hide(); + + + //parametry pracy + $("#in401_200").prop('disabled', true); + $("#in401_205").prop('disabled', true); + $("#in401_210").prop('disabled', true); + $("#in401_212").prop('disabled', true); + $("#in401_215").prop('disabled', true); + $("#in401_220").prop('disabled', true); + $("#in401_225").prop('disabled', true); + $("#in401_230").prop('disabled', true); + $("#in401_245").prop('disabled', true); + $("#in401_401").prop('disabled', true); + $("#in401_402").prop('disabled', true); + $("#in401_730").prop('disabled', true); + + $("#in401_200").removeClass("readonly_show"); + $("#in401_205").removeClass("readonly_show"); + $("#in401_210").removeClass("readonly_show"); + $("#in401_212").removeClass("readonly_show"); + $("#in401_215").removeClass("readonly_show"); + $("#in401_220").removeClass("readonly_show"); + $("#in401_225").removeClass("readonly_show"); + $("#in401_230").removeClass("readonly_show"); + $("#in401_245").removeClass("readonly_show"); + $("#in401_401").removeClass("readonly_show"); + $("#in401_402").removeClass("readonly_show"); + $("#in401_730").removeClass("readonly_show"); + + + //parametry elektryczne + $("#in401_260").prop('disabled', true); + $("#in401_265").prop('disabled', true); + $("#in401_270").prop('disabled', true); + $("#in401_275").prop('disabled', true); + $("#in401_280").prop('disabled', true); + $("#in401_290").prop('disabled', true); + $("#in401_721").prop('disabled', true); + + $("#in401_260").removeClass("readonly_show"); + $("#in401_265").removeClass("readonly_show"); + $("#in401_270").removeClass("readonly_show"); + $("#in401_275").removeClass("readonly_show"); + $("#in401_280").removeClass("readonly_show"); + $("#in401_290").removeClass("readonly_show"); + $("#in401_721").removeClass("readonly_show"); + + + }); + + // ====================================================================== // + $('#imgCleanAction').click(function(){ + + $("#data_01").val(''); + $("#in401_200").val(''); + $("#in401_205").val(''); + $("#in401_210").val(''); + $("#in401_212").val(''); + $("#in401_215").val(''); + $("#in401_220").val(''); + $("#in401_225").val(''); + $("#in401_230").val(''); + $("#in401_245").val(''); + $("#in401_401").val(''); + $("#in401_402").val(''); + $("#in401_730").val(''); + $("#in401_260").val(''); + $("#in401_265").val(''); + $("#in401_270").val(''); + $("#in401_275").val(''); + $("#in401_280").val(''); + $("#in401_290").val(''); + $("#in401_721").val(''); + + }); + + // ====================================================================== // + + + // ====================================================================== // + // potwierdzenie, o usunięciu - sweetalert + // ====================================================================== // + $('.confirmation').click(function(e) { + e.preventDefault(); // Prevent the href from redirecting directly + var linkURL = $(this).attr("href"); + warnBeforeDelete(linkURL); + }); + + function warnBeforeDelete(linkURL) { + swal({ + title: "Usuwanie danych", + text: "Potwierdzenie spowoduje nieodwracalny proces usunięcia danych z systemu! Czy jesteś pewien, że chcesz usunąć?", + type: "warning", + confirmButtonText: "Tak", + confirmButtonColor: '#DD6B55', + cancelButtonText: "Nie", + cancelButtonColor: '#d33', + showCancelButton: true + }, function() { + window.location.href = linkURL; + }); + } + // ====================================================================== // + + // ====================================================================== // + // potwierdzenie, o usunięciu - powiązania (urządzeń, kabli, armatury) + // ====================================================================== // + $('.confirm_tools').click(function(e) { + e.preventDefault(); // Prevent the href from redirecting directly + var linkURL = $(this).attr("href"); + warnBeforeDelTool(linkURL); + }); + + function warnBeforeDelTool(linkURL) { + swal({ + title: "Usuwanie powiązania", + text: "Potwierdzenie spowoduje proces usunięcia powiązanych obiektów! Czy jesteś pewien, że chcesz usunąć?", + type: "warning", + confirmButtonText: "Tak", + confirmButtonColor: '#DD6B55', + cancelButtonText: "Nie", + cancelButtonColor: '#d33', + showCancelButton: true + }, function() { + window.location.href = linkURL; + }); + } + // ====================================================================== // + + + + +}); + + + + +function makeRequest(url){ + $('#preloader').show(); + $('#loader-wrapper').show(); +} + +// onclick=".chr(34)."makeRequest('?pg=site401inf')".chr(34)." + +$(window).load(function() { + // Animate loader off screen + $('#loader-wrapper').hide(); +}); diff --git a/js/select2.min.js b/js/select2.min.js new file mode 100644 index 0000000..43f0a65 --- /dev/null +++ b/js/select2.min.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">&times;</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change"); +if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b),d=g.$element.find("option").filter(function(){return a(this).val()===c.id});if(!d.length){var e=g.option(c);e.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([e])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},a.prototype._handleSelectOnClose=function(a,b){if(b&&null!=b.originalSelect2Event){var c=b.originalSelect2Event;if("select"===c._type||"unselect"===c._type)return}var d=this.getHighlightedResults();if(!(d.length<1)){var e=d.data("data");null!=e.element&&e.element.selected||null==e.element&&e.selected||this.trigger("select",{data:e})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null; +},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/js/sweetalert.min.js b/js/sweetalert.min.js new file mode 100644 index 0000000..d81d1e9 --- /dev/null +++ b/js/sweetalert.min.js @@ -0,0 +1 @@ +!function(e,t,n){"use strict";!function o(e,t,n){function a(s,l){if(!t[s]){if(!e[s]){var i="function"==typeof require&&require;if(!l&&i)return i(s,!0);if(r)return r(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var c=t[s]={exports:{}};e[s][0].call(c.exports,function(t){var n=e[s][1][t];return a(n?n:t)},c,c.exports,o,e,t,n)}return t[s].exports}for(var r="function"==typeof require&&require,s=0;s<n.length;s++)a(n[s]);return a}({1:[function(o,a){var r,s,l,i,u=function(e){return e&&e.__esModule?e:{"default":e}},c=o("./modules/handle-dom"),d=o("./modules/utils"),f=o("./modules/handle-swal-dom"),p=o("./modules/handle-click"),m=o("./modules/handle-key"),v=u(m),y=o("./modules/default-params"),h=u(y),g=o("./modules/set-params"),b=u(g);l=i=function(){function o(e){var t=a;return t[e]===n?h["default"][e]:t[e]}var a=arguments[0];if(c.addClass(t.body,"stop-scrolling"),f.resetInput(),a===n)return d.logStr("SweetAlert expects at least 1 attribute!"),!1;var l=d.extend({},h["default"]);switch(typeof a){case"string":l.title=a,l.text=arguments[1]||"",l.type=arguments[2]||"";break;case"object":if(a.title===n)return d.logStr('Missing "title" argument!'),!1;l.title=a.title;for(var i in h["default"])l[i]=o(i);l.confirmButtonText=l.showCancelButton?"Confirm":h["default"].confirmButtonText,l.confirmButtonText=o("confirmButtonText"),l.doneFunction=arguments[1]||null;break;default:return d.logStr('Unexpected type of argument! Expected "string" or "object", got '+typeof a),!1}b["default"](l),f.fixVerticalPosition(),f.openModal();for(var u=f.getModal(),m=u.querySelectorAll("button"),y=["onclick","onmouseover","onmouseout","onmousedown","onmouseup","onfocus"],g=function(e){return p.handleButton(e,l,u)},w=0;w<m.length;w++)for(var C=0;C<y.length;C++){var S=y[C];m[w][S]=g}f.getOverlay().onclick=g,r=e.onkeydown;var x=function(e){return v["default"](e,l,u)};e.onkeydown=x,e.onfocus=function(){setTimeout(function(){s!==n&&(s.focus(),s=n)},0)}},l.setDefaults=i.setDefaults=function(e){if(!e)throw new Error("userParams is required");if("object"!=typeof e)throw new Error("userParams has to be a object");d.extend(h["default"],e)},l.close=i.close=function(){var o=f.getModal();c.fadeOut(f.getOverlay(),5),c.fadeOut(o,5),c.removeClass(o,"showSweetAlert"),c.addClass(o,"hideSweetAlert"),c.removeClass(o,"visible");var a=o.querySelector(".sa-icon.sa-success");c.removeClass(a,"animate"),c.removeClass(a.querySelector(".sa-tip"),"animateSuccessTip"),c.removeClass(a.querySelector(".sa-long"),"animateSuccessLong");var l=o.querySelector(".sa-icon.sa-error");c.removeClass(l,"animateErrorIcon"),c.removeClass(l.querySelector(".sa-x-mark"),"animateXMark");var i=o.querySelector(".sa-icon.sa-warning");return c.removeClass(i,"pulseWarning"),c.removeClass(i.querySelector(".sa-body"),"pulseWarningIns"),c.removeClass(i.querySelector(".sa-dot"),"pulseWarningIns"),c.removeClass(t.body,"stop-scrolling"),e.onkeydown=r,e.previousActiveElement&&e.previousActiveElement.focus(),s=n,clearTimeout(o.timeout),!0},l.showInputError=i.showInputError=function(e){var t=f.getModal(),n=t.querySelector(".sa-input-error");c.addClass(n,"show");var o=t.querySelector(".sa-error-container");c.addClass(o,"show"),o.querySelector("p").innerHTML=e,t.querySelector("input").focus()},l.resetInputError=i.resetInputError=function(e){if(e&&13===e.keyCode)return!1;var t=f.getModal(),n=t.querySelector(".sa-input-error");c.removeClass(n,"show");var o=t.querySelector(".sa-error-container");c.removeClass(o,"show")},"function"==typeof define&&define.amd?define(function(){return l}):"undefined"!=typeof e?e.sweetAlert=e.swal=l:"undefined"!=typeof a&&a.exports&&(a.exports=l)},{"./modules/default-params":2,"./modules/handle-click":3,"./modules/handle-dom":4,"./modules/handle-key":5,"./modules/handle-swal-dom":6,"./modules/set-params":8,"./modules/utils":9}],2:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var o={title:"",text:"",type:null,allowOutsideClick:!1,showConfirmButton:!0,showCancelButton:!1,closeOnConfirm:!0,closeOnCancel:!0,confirmButtonText:"OK",confirmButtonColor:"#AEDEF4",cancelButtonText:"Cancel",imageUrl:null,imageSize:null,timer:null,customClass:"",html:!1,animation:!0,allowEscapeKey:!0,inputType:"text",inputPlaceholder:""};n["default"]=o,t.exports=n["default"]},{}],3:[function(t,n,o){Object.defineProperty(o,"__esModule",{value:!0});var a=t("./utils"),r=(t("./handle-swal-dom"),t("./handle-dom")),s=function(t,n,o){function s(e){m&&n.confirmButtonColor&&(p.style.backgroundColor=e)}var u,c,d,f=t||e.event,p=f.target||f.srcElement,m=-1!==p.className.indexOf("confirm"),v=-1!==p.className.indexOf("sweet-overlay"),y=r.hasClass(o,"visible"),h=n.doneFunction&&"true"===o.getAttribute("data-has-done-function");switch(m&&n.confirmButtonColor&&(u=n.confirmButtonColor,c=a.colorLuminance(u,-.04),d=a.colorLuminance(u,-.14)),f.type){case"mouseover":s(c);break;case"mouseout":s(u);break;case"mousedown":s(d);break;case"mouseup":s(c);break;case"focus":var g=o.querySelector("button.confirm"),b=o.querySelector("button.cancel");m?b.style.boxShadow="none":g.style.boxShadow="none";break;case"click":var w=o===p,C=r.isDescendant(o,p);if(!w&&!C&&y&&!n.allowOutsideClick)break;m&&h&&y?l(o,n):h&&y||v?i(o,n):r.isDescendant(o,p)&&"BUTTON"===p.tagName&&sweetAlert.close()}},l=function(e,t){var n=!0;r.hasClass(e,"show-input")&&(n=e.querySelector("input").value,n||(n="")),t.doneFunction(n),t.closeOnConfirm&&sweetAlert.close()},i=function(e,t){var n=String(t.doneFunction).replace(/\s/g,""),o="function("===n.substring(0,9)&&")"!==n.substring(9,10);o&&t.doneFunction(!1),t.closeOnCancel&&sweetAlert.close()};o["default"]={handleButton:s,handleConfirm:l,handleCancel:i},n.exports=o["default"]},{"./handle-dom":4,"./handle-swal-dom":6,"./utils":9}],4:[function(n,o,a){Object.defineProperty(a,"__esModule",{value:!0});var r=function(e,t){return new RegExp(" "+t+" ").test(" "+e.className+" ")},s=function(e,t){r(e,t)||(e.className+=" "+t)},l=function(e,t){var n=" "+e.className.replace(/[\t\r\n]/g," ")+" ";if(r(e,t)){for(;n.indexOf(" "+t+" ")>=0;)n=n.replace(" "+t+" "," ");e.className=n.replace(/^\s+|\s+$/g,"")}},i=function(e){var n=t.createElement("div");return n.appendChild(t.createTextNode(e)),n.innerHTML},u=function(e){e.style.opacity="",e.style.display="block"},c=function(e){if(e&&!e.length)return u(e);for(var t=0;t<e.length;++t)u(e[t])},d=function(e){e.style.opacity="",e.style.display="none"},f=function(e){if(e&&!e.length)return d(e);for(var t=0;t<e.length;++t)d(e[t])},p=function(e,t){for(var n=t.parentNode;null!==n;){if(n===e)return!0;n=n.parentNode}return!1},m=function(e){e.style.left="-9999px",e.style.display="block";var t,n=e.clientHeight;return t="undefined"!=typeof getComputedStyle?parseInt(getComputedStyle(e).getPropertyValue("padding-top"),10):parseInt(e.currentStyle.padding),e.style.left="",e.style.display="none","-"+parseInt((n+t)/2)+"px"},v=function(e,t){if(+e.style.opacity<1){t=t||16,e.style.opacity=0,e.style.display="block";var n=+new Date,o=function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(){e.style.opacity=+e.style.opacity+(new Date-n)/100,n=+new Date,+e.style.opacity<1&&setTimeout(o,t)});o()}e.style.display="block"},y=function(e,t){t=t||16,e.style.opacity=1;var n=+new Date,o=function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(){e.style.opacity=+e.style.opacity-(new Date-n)/100,n=+new Date,+e.style.opacity>0?setTimeout(o,t):e.style.display="none"});o()},h=function(n){if("function"==typeof MouseEvent){var o=new MouseEvent("click",{view:e,bubbles:!1,cancelable:!0});n.dispatchEvent(o)}else if(t.createEvent){var a=t.createEvent("MouseEvents");a.initEvent("click",!1,!1),n.dispatchEvent(a)}else t.createEventObject?n.fireEvent("onclick"):"function"==typeof n.onclick&&n.onclick()},g=function(t){"function"==typeof t.stopPropagation?(t.stopPropagation(),t.preventDefault()):e.event&&e.event.hasOwnProperty("cancelBubble")&&(e.event.cancelBubble=!0)};a.hasClass=r,a.addClass=s,a.removeClass=l,a.escapeHtml=i,a._show=u,a.show=c,a._hide=d,a.hide=f,a.isDescendant=p,a.getTopMargin=m,a.fadeIn=v,a.fadeOut=y,a.fireClick=h,a.stopEventPropagation=g},{}],5:[function(t,o,a){Object.defineProperty(a,"__esModule",{value:!0});var r=t("./handle-dom"),s=t("./handle-swal-dom"),l=function(t,o,a){var l=t||e.event,i=l.keyCode||l.which,u=a.querySelector("button.confirm"),c=a.querySelector("button.cancel"),d=a.querySelectorAll("button[tabindex]");if(-1!==[9,13,32,27].indexOf(i)){for(var f=l.target||l.srcElement,p=-1,m=0;m<d.length;m++)if(f===d[m]){p=m;break}9===i?(f=-1===p?u:p===d.length-1?d[0]:d[p+1],r.stopEventPropagation(l),f.focus(),o.confirmButtonColor&&s.setFocusStyle(f,o.confirmButtonColor)):13===i?("INPUT"===f.tagName&&(f=u,u.focus()),f=-1===p?u:n):27===i&&o.allowEscapeKey===!0?(f=c,r.fireClick(f,l)):f=n}};a["default"]=l,o.exports=a["default"]},{"./handle-dom":4,"./handle-swal-dom":6}],6:[function(n,o,a){var r=function(e){return e&&e.__esModule?e:{"default":e}};Object.defineProperty(a,"__esModule",{value:!0});var s=n("./utils"),l=n("./handle-dom"),i=n("./default-params"),u=r(i),c=n("./injected-html"),d=r(c),f=".sweet-alert",p=".sweet-overlay",m=function(){var e=t.createElement("div");for(e.innerHTML=d["default"];e.firstChild;)t.body.appendChild(e.firstChild)},v=function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(){var e=t.querySelector(f);return e||(m(),e=v()),e}),y=function(){var e=v();return e?e.querySelector("input"):void 0},h=function(){return t.querySelector(p)},g=function(e,t){var n=s.hexToRgb(t);e.style.boxShadow="0 0 2px rgba("+n+", 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)"},b=function(){var n=v();l.fadeIn(h(),10),l.show(n),l.addClass(n,"showSweetAlert"),l.removeClass(n,"hideSweetAlert"),e.previousActiveElement=t.activeElement;var o=n.querySelector("button.confirm");o.focus(),setTimeout(function(){l.addClass(n,"visible")},500);var a=n.getAttribute("data-timer");"null"!==a&&""!==a&&(n.timeout=setTimeout(function(){swal.close()},a))},w=function(){var e=v(),t=y();l.removeClass(e,"show-input"),t.value="",t.setAttribute("type",u["default"].inputType),t.setAttribute("placeholder",u["default"].inputPlaceholder),C()},C=function(e){if(e&&13===e.keyCode)return!1;var t=v(),n=t.querySelector(".sa-input-error");l.removeClass(n,"show");var o=t.querySelector(".sa-error-container");l.removeClass(o,"show")},S=function(){var e=v();e.style.marginTop=l.getTopMargin(v())};a.sweetAlertInitialize=m,a.getModal=v,a.getOverlay=h,a.getInput=y,a.setFocusStyle=g,a.openModal=b,a.resetInput=w,a.resetInputError=C,a.fixVerticalPosition=S},{"./default-params":2,"./handle-dom":4,"./injected-html":7,"./utils":9}],7:[function(e,t,n){Object.defineProperty(n,"__esModule",{value:!0});var o='<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert"><div class="sa-icon sa-error">\n <span class="sa-x-mark">\n <span class="sa-line sa-left"></span>\n <span class="sa-line sa-right"></span>\n </span>\n </div><div class="sa-icon sa-warning">\n <span class="sa-body"></span>\n <span class="sa-dot"></span>\n </div><div class="sa-icon sa-info"></div><div class="sa-icon sa-success">\n <span class="sa-line sa-tip"></span>\n <span class="sa-line sa-long"></span>\n\n <div class="sa-placeholder"></div>\n <div class="sa-fix"></div>\n </div><div class="sa-icon sa-custom"></div><h2>Title</h2>\n <p>Text</p>\n <fieldset>\n <input type="text" tabIndex="3" />\n <div class="sa-input-error"></div>\n </fieldset><div class="sa-error-container">\n <div class="icon">!</div>\n <p>Not valid!</p>\n </div><div class="sa-button-container">\n <button class="cancel" tabIndex="2">Cancel</button>\n <button class="confirm" tabIndex="1">OK</button>\n </div></div>';n["default"]=o,t.exports=n["default"]},{}],8:[function(e,t,o){Object.defineProperty(o,"__esModule",{value:!0});var a=e("./utils"),r=e("./handle-swal-dom"),s=e("./handle-dom"),l=["error","warning","info","success","input","prompt"],i=function(e){var t=r.getModal(),o=t.querySelector("h2"),i=t.querySelector("p"),u=t.querySelector("button.cancel"),c=t.querySelector("button.confirm");if(o.innerHTML=e.html?e.title:s.escapeHtml(e.title).split("\n").join("<br>"),i.innerHTML=e.html?e.text:s.escapeHtml(e.text||"").split("\n").join("<br>"),e.text&&s.show(i),e.customClass)s.addClass(t,e.customClass),t.setAttribute("data-custom-class",e.customClass);else{var d=t.getAttribute("data-custom-class");s.removeClass(t,d),t.setAttribute("data-custom-class","")}if(s.hide(t.querySelectorAll(".sa-icon")),e.type&&!a.isIE8()){var f=function(){for(var o=!1,a=0;a<l.length;a++)if(e.type===l[a]){o=!0;break}if(!o)return logStr("Unknown alert type: "+e.type),{v:!1};var i=["success","error","warning","info"],u=n;-1!==i.indexOf(e.type)&&(u=t.querySelector(".sa-icon.sa-"+e.type),s.show(u));var c=r.getInput();switch(e.type){case"success":s.addClass(u,"animate"),s.addClass(u.querySelector(".sa-tip"),"animateSuccessTip"),s.addClass(u.querySelector(".sa-long"),"animateSuccessLong");break;case"error":s.addClass(u,"animateErrorIcon"),s.addClass(u.querySelector(".sa-x-mark"),"animateXMark");break;case"warning":s.addClass(u,"pulseWarning"),s.addClass(u.querySelector(".sa-body"),"pulseWarningIns"),s.addClass(u.querySelector(".sa-dot"),"pulseWarningIns");break;case"input":case"prompt":c.setAttribute("type",e.inputType),c.setAttribute("placeholder",e.inputPlaceholder),s.addClass(t,"show-input"),setTimeout(function(){c.focus(),c.addEventListener("keyup",swal.resetInputError)},400)}}();if("object"==typeof f)return f.v}if(e.imageUrl){var p=t.querySelector(".sa-icon.sa-custom");p.style.backgroundImage="url("+e.imageUrl+")",s.show(p);var m=80,v=80;if(e.imageSize){var y=e.imageSize.toString().split("x"),h=y[0],g=y[1];h&&g?(m=h,v=g):logStr("Parameter imageSize expects value with format WIDTHxHEIGHT, got "+e.imageSize)}p.setAttribute("style",p.getAttribute("style")+"width:"+m+"px; height:"+v+"px")}t.setAttribute("data-has-cancel-button",e.showCancelButton),e.showCancelButton?u.style.display="inline-block":s.hide(u),t.setAttribute("data-has-confirm-button",e.showConfirmButton),e.showConfirmButton?c.style.display="inline-block":s.hide(c),e.cancelButtonText&&(u.innerHTML=s.escapeHtml(e.cancelButtonText)),e.confirmButtonText&&(c.innerHTML=s.escapeHtml(e.confirmButtonText)),e.confirmButtonColor&&(c.style.backgroundColor=e.confirmButtonColor,r.setFocusStyle(c,e.confirmButtonColor)),t.setAttribute("data-allow-outside-click",e.allowOutsideClick);var b=e.doneFunction?!0:!1;t.setAttribute("data-has-done-function",b),e.animation?"string"==typeof e.animation?t.setAttribute("data-animation",e.animation):t.setAttribute("data-animation","pop"):t.setAttribute("data-animation","none"),t.setAttribute("data-timer",e.timer)};o["default"]=i,t.exports=o["default"]},{"./handle-dom":4,"./handle-swal-dom":6,"./utils":9}],9:[function(t,n,o){Object.defineProperty(o,"__esModule",{value:!0});var a=function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},r=function(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?parseInt(t[1],16)+", "+parseInt(t[2],16)+", "+parseInt(t[3],16):null},s=function(){return e.attachEvent&&!e.addEventListener},l=function(t){e.console&&e.console.log("SweetAlert: "+t)},i=function(e,t){e=String(e).replace(/[^0-9a-f]/gi,""),e.length<6&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),t=t||0;var n,o,a="#";for(o=0;3>o;o++)n=parseInt(e.substr(2*o,2),16),n=Math.round(Math.min(Math.max(0,n+n*t),255)).toString(16),a+=("00"+n).substr(n.length);return a};o.extend=a,o.hexToRgb=r,o.isIE8=s,o.logStr=l,o.colorLuminance=i},{}]},{},[1])}(window,document); \ No newline at end of file diff --git a/language/english.php b/language/english.php new file mode 100644 index 0000000..456376f --- /dev/null +++ b/language/english.php @@ -0,0 +1,237 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPml92BITOF6xJ2sTb+XMObF0EbiUoApgIgwiDiOborsb7oKALNEEzU3M2Zcjzcz0aWgPBHMv +Poicb7sx0SqEUjvuCgvOsvTbwCHQLe7iGKVmnI4wlrO0lLN7d8ofqZbQi64idQRN6ZI1nNw6Tn+C +kFY+aVhmPjxvitU0QhM7ngQGZdTvKDE+//V5DbZ5VEigccBAteoTAPg3Dgw+t+3ptXAhyhbBjpYr +RkeGMSvAOWhNAPj1SBubdCYAKC2vALpoZJ2EA3DV3/XcOawSaNEaarLsCNDckRmSQzpI8RyOC6sK +i1QDzH1QryXEoNGkmORfqYjq4mK6VqUtPkuBAfERyERRuvGulW92qIMI+yyae1WSp+Mi+dES3lL6 +Dpdlo1NXO/1nN8AX/iUnsyEzMRhiuwjrGPIV2aMN761B2ozfEGUavkgBdC5MasAw3EhTyxLTlp4f +ZNYhO7UoOiHNwTb0jAo+Uk1THc7rTtH3O/QdrAsS24ikR8Z7/1zmBculaMXP+DWZGdg0ZXHM/Ata +GgNzRX0fhEm3l+5CCuU0+J5SJUFl1R22oNyimtUqjU9suNSzA+fLAoFQ4RSAFgtM8lY/KvjFyp9V +qJjxoazQqszBcL48xgGHRo6DVFUd+Mt/s00sG2fekg78Edc6S5XWa/q6G35vMJQ8BE4XsEdohFMd +Nz/fVCY7a52u4mkUu8j7sBsA9hCGRye8Q1qS4MV/ZXdk6cSZoyt+/sxomxUTfLEdqVaKL/NKYFdb +ADVJG7blQeCAvvh4uA4UePDBZzw3vwGDPF/9r2ZXn4HoJGzd7uy4M3KxiCMo9LnnHO0zb1Y2Z4/p +QSNVqhYNH1n69dbaJ1gNQal2A6d14KpWUNZjJj9UNwQ/3+3UILrBALB+W19Uozsa2amrhB1sAjgk +bZZXAaImra2Rf6TPA04xEUAblaMSAcYjy0az7DwO0cUR3ee0ISEG6Cp06lean7OfJMJQKv85OocG +hIPyb0WRt2+i9mHLgVYqLonO5Q+o+vHWpIHGzZvnl3rZaw/PwueX8++lsNJYbjyoGKjAGRcsekKC +AHSpIUSLRMx1yyBWUz5NgN2TksCHY3/0uM7kp1+uWx9ewVZL0ErvkGGGXo/Ix0hzm7pEA1tJWyBm +5XZK0yPo42x0XoBvBM2fO9NCjpdHoiYOJcmTGfDXAMNXed+k+xF6OyNd+w8cW0Dwl+/mmvydiKk9 +Q2exb6v/BwfhWpQiflkhL2tDwbUBMWyqaWYfmUf05fWbrmyGi5LuzOPwSfRhHFhT2h3WpmSQJid9 +K7JTzG+dpElTTzr3Mb87LTQhu8dYCWQHatAJy7Ss/x7bDZ4YxD3b47LLTb/RUu5N9F4j4tfvVgqw +LZt+1ikAbRpdDfKgrw/XW7fIvS4vOyrvKic1pYn+ac8qzr7N8imVKkTgC5hSDOVHnMntHu4Md0Ck +PxZe+dF98xfgUjX/eSKYQsfqnpyiZxmpTi29HlXSXzWncxC5K/ivTiCv/y2gMslTHG2z9vIw0yvO +yNpaAKPor8ZwFMrJLKHsJ4FoE9pkXK4S3ckcpckQKh78WFiLjVg2j6wDGjh+N/2By0l0dBeMg0dt +C0ttLb4bEdV6iUBioUTYLDY03dZW513EUPnrDv6nlYI9RIomrNjddEPJAMuWMITzdFsvbdQKw/YU +lJ+RYBOEMFJkPqiKONuZdJfdimxzggnt7AGna0XwszSL9iHnGJCuZ5d5fd0RgNXDXdvY5tU0KUOS +4cVROal8/dcXAN5GnNwrskLdoFrLifyb4Ve33SJEEtf0AJ8aWegnCNb0OINuVSRSy+fiXPbQVlBP +34pDTMAWzzSr8M1ylOWb4nAHNBJbFwtxB8FdnzcQD5udY3zpnBzyuusvUwUVma1Z/8jF4nrztvem +g5u2yjCNfA6k1oCes5S3juS6Sa2zybdR8l3QwjlLhUA3yTcqifuqWmYAVxiJB3B9nu1BKaF/MVoP +ksO0gox3oFhVIBKfc4sgRv+0IoamSwBIhmgXOJ0hhwDF3/yTshUIVc/mJyWA5mmch2HejeABErEE +Kn63An5X+FW66jW6LPwGN7krgf7GlEKFlUDymngI7RQcI+JgUsgGRspee14lWW8GFQl3MOuXVNaq +cLuDrP3T/z10CsQhi2XI2ulwLIToq7Isu27KrFiEiJdvktlUhbEOMuv2dU5HL45kqleobv3QTG8H +vthnHPkhKQN/F+USmhV12TtJZQTZ3iGu6c5kwfw9WofM+A35mCgKOwwfP69JkjstFqsoRfRy6QQv +oWPHIqq8lxxLIKIlop7BPwgNnUFlYTKIXaC5wnoMsHhJLQfdX3QToCfEOEygQbuWe3KjQ9eU03CO +dxpxV9D8/9RaBy75+OXxNcOd1KvzykEZmR5ysIhA4TVdrZesWwzEbcp8taIxxf5corAvzvsXFKkh +iSkx5cQZW6wmS8YAaMs2/kbb7thCB2+ExOMPxqc26nium7FMaBpGPhYv4bPsrliMDNZMHg2nSC2w +31QBttQpvcMnPJ1cSFIRUsjYV1uwAcWlt/FAFnTQ8nzrAxeLHYIsOr1LWxYzTXW5HOFXPPW+rqiz +oxvmpObYUGcMgK/jZoH5oTXPjnKfGy8he9c8zwokZDxebjV4edZQ2MHFoD1l6H4b/ePwcWMNRY99 +nUTghO9Q4tBV3ZNL/gi1E1oOYMzgglT28f+WsHgKQOXX5G9SMGNya8bIp4gOCHlxwTCe2Tw9c2wy +7q4hiTel1aKjA2akgC8WZJw2CfwxQjJepNd9Y8TX9rbtUrNH2LR7eCqZaULn8hD/6HRU/583IUs2 +UaFXenWxUx+g6AdfGKRplP3QLMGSwJ3IaU8aAQUWWZilCJ1wsGyQ4YR9hstwVe+nINougb1o4ml/ +VBTNvrcw4LQZBMOark6puusJWL1vBOLVsiac0VnKLX529PGEo32c5ESrTett05JREaEpCdUneolk +kCAwqXzdb9jY64YXZgAZs6T1CeW23Wg/bKFlh6Ioaj4KweQD6q63TMnhoUbPgN6o7RT5q8GXG7PH +yCUjvKI5XL060colEl+RHy1uoz0KzgEi1mkOy3kjcYkBMFDe0df9LN7ShkjIl08GmUbqHAiRlUc3 +QiUKPUe1dB0GuKZFaFiiV2v+8jcSl0J7VIecYdfCBg2oR3cThhzfD2FW8j6VmbJ2iw0SkRt++eya +vIWZce0RbT7nL8ieRyalmshBt4+Ecq8Am/eLtQcnXaNZutbSjhvqoaHdJySxkzqtZ5FxmL0LgkmW +LCmj0MvOmGJc0Q/0YPhGBTEXMi3zk3KzJspY2fbM4fnIX1UpkOIiZAzB+nrVwmcOaV1CnuV1qr42 +RsOlKdpp5V+DXr8eY3rwBpAtHaNX870VGMvIi0Ufehl7eU73tt9equuOVYKbjsqZQgEbbpYLK7Vo +PocnNQVvsBzmiMSYPaLheEKddc/d0wzkJntYBNXJcpHi0vv6epXDJ7kKP6WNW7TOMB1iWoPADbWI +XO/o+ITrASxR18l21mUD7Z/Emu3CUxUhYJxyol87/8yzlhXKBxDDJUrC067Bd1DqlBWjWN7VzvW5 +EWXfdSTc5SFIAvfGKMXiRlC093AUK09RcqkMkMIrH4TPz38ml0qpFZ+cOtlY9oDMtvsabiquEkb1 +AEkXX6zwAiSIueFKxyVaJypuCo0veLt2+haN5lkzmN3cIHOIWBtdXRyncqBy9hg0g5ld6NKgsN61 +TBWUCf5nSmxzFGcTRp698u6zP9f00Xw69qlXuusR6KiQvfdsc+eRkaATo+UaKU+V2JvHueatIMwr +8deRZ6CmXnnVSgAiTIyIxCXpOgaHyYjxWd7WwsUYAYEUZvPG2dkY/1ofdbmn9oT6SyDXAj5feNtU +60XM/2mNiP/AcCQNvTvg163hwsKR0eryteKp1d6RD05Ge1oX0BmWlCfwwQMUG695VJaxjEi1DdRR +y2GD9QEtaSPO8Y4OczxkeGQh8yfSocz0tuGHs3vjjbGLIykw+pskJFj6qgVh4PFa0jOu5Koc4fw4 +EJ+XWb1kCco8FTWpPuir3tMHHLTkUyf6f9tSKXhGdB3wl2IrO3NYSMbspctSdhbKNlQYlvkqHp/w +ThryrLS4IiZbmndxQ4eel4jw1PUik8PVNKSYZWFTeL6J0Y29KhQrz8CwFUfs2qpra6TyNCOqpOhK +4dkVsoush6C7RcC9u9v0wGg3kYTx0cI7mL6EGpHqtn4WytN2ifL55pTPnIK82z6vZUX0SQsyzOrg +cPnFpcQUxJWJ+nkOrAPMcG+gWzzHOycGTkRTAoATMlpmGLFw88sOUZcSJZCBjjJwEHFhqXVSCkOl +HIqVRRT9q68XE/TmQlsCARPEuk6MB1qZiFuZoggJ5wiMrbiacfd2ET53oq+Oc5o02ZbPCfFJ9nqI +gKIT1KmTwSaiaSQcb0JngieMCHokolxGmBSQrFr2EiMXsWTh/y15JwcnMiY8OSxn5F/z4yJgLNJC +tqiM6zp0ezLi4KQcijXpf+m8uedea1N/Sc88gMQ1iytjk1JNsAuOf2+7JaKZbHgW8NoxfIknHIDc +rZ6zoT5H3zY6cnawthKDV5JC5isLY5OpKlcHBAiZjJjqoHme0xqJ0FvoDaiTo2sWrivXMrzXrAQx +Cqlw2vhpdBK/9D6lgDNhIfIzeCNhbfyqUzc9wU4EJv56SxjsmwtIqysBBluwfNnfIAAn5oHqmhhX +J4CLyCvVyb5CW4uXxUhRh6J448+2i1Iewtc6bjvjoRaAYWi3a4WVA8PJO06XuREG1TAddJAPUXD9 +gCmg0JQk90mTEaGsnsYrd1CzimYC0SXh9W4g9zJOn7NNvuefUXsCpr5zo17bio6YOGD29gf+4RkU +xCLaGuKKMOajhbnWZASjnShJRwag2m/G5fM2PhrvUGyCoGQVm7OINQc97yva6MwFui7SZDftHPO5 +IsoPxnQyfdct49A3tkZ/Yiv2db4zwND4+5QGgJ2zxv49B3R9U608PmATn0G8x05GIBebv4MHwqvZ +ZWFusxkT8xoFZSar8AU7+vkstpHwQxgqSTCnvYHn3yNPJaEx093QNpBexwtBaaW30WRfYR0GoL03 +zag8/DPzW2izZh2LGrjasqP6WNAafawMkb37WfQYYlkXvktPwmtS1aEq4VzMmBvCRUnT+iX6Ktdv +HiqjLKg8+qgTQ23mI9qg6AIFdi9ON7yFirbXIXaEt7IaGwa9gxqttrE2ulpfhlAJIvsljuwSCO2b ++25jqNqDdHMf7aVvzcrwioKOa8yWeC/1JiQcatfdnrq+qnMi79DRXt0s3ioegVbzc3vLPvxrVje7 +c4MtG87YKV5hyqZi3QuSfv4ZLuoU0pPSYBl5HcbrSwRK9x05ZmPyu5a9dsovUYRtTFMVPR+VoUrf +UPCo0GtUwMT1wFVTIBggV6PQKCOXeXvpD0BIvvdylu5Js47jGsKzLtv6j4PDrbm2De/LdwI3SYQg +NAx3L7LkSLxLDNpzsbLZOpdyNFdqQJ/hRYfo9E4ruuOj1ueuzBSpqwhrAdwhlTimit8qXkkVCdYa +gENqkhSRWMwKO2cvYGniLzUoabNNMgBE+Viu2VLK4VFM+je9VdY7dBCMY7zHrXOwDpqLYiWRkoW6 +VuF07uHbclGiK5cwcfhUHDtfqhR+fkWr7B7eKWEDep7HlyUBdj2GPuAb6cG+jSJlVIPmIeUggx1L +gA5UM6T5Z2d1wKO5BuVKPD2s6JSdxOYW6RZHFcdihJGTmnpDiDPvFuLIRc8cUD5VqfVay5zmCfK1 +y+NTvVNkz7PIb1czay/xlL21nv9zLbUVasSMwzf1SVMoDduwdlXsmQVJGdHSPkRcAWh9EwSpTgoa +s7IGr33CAH2tniBidNpOo7xCJVPJK4oHe/HEReDTOhiQnOldzB+M4FlI14hildcHd9sB+TWn1r4M +iu4pcSBUAssxnWjAE0H+Wwt8kLCwU5BwH2ZYPYy+9VYWTm+p5YohieDZEP6M17LJKOhrz4/R9i+N +39MXj+wxAroodjvI23fgt5ogA2NIZVH753++QaPJXC8cSwkzw+FuDCGQGau3n2kpaXejM///ApiX +9ZNOcNDWAna32mXxyg8hl5C31/gmukLvYdfmDTcZlLG8hmTVLZyGxy29En9w0xPxbacel5X0d9WO +BehW2FUB0Y+OBvb81yjbAAU2mpSMOAq7A+NLpIrYPAmrG0H7+EM13Jbv7TqRDJEze7VUyRm6lIgw +c6y8mbjCfBQoqiblwoRlI4jaLU4xuSCZyvvtq9vwM6uDctB7qrSdine/sOagoB/GAvJnPF15sDBd +qzui206tb8HdHEWsM/mUOs69gQsgYmPquqYRUoOm04KcASGtECMIqrFbgOih6Z5y8Rb49tr50mjj +egYSFzHzsBUUbiUYxjbIzClzEflNMrbOOQC8l8lY7nw3yo3y5h8fnG7vX/MjxL8dslcmp+qPZLr8 +7m0dWreIgLm8TR2R9psG9udYZmYf6xOgxFNyYzLy6Noqqs0wgDCc+op8qn0sBLAhUEE4HoWIO9qL +tmfH8uYX+6cpdfDNxe5EtO4PaJP/86jOrZ+QGuRZzULvb8Jv+y5RZTe5wJihk8b45lWqOi/TPkzf +DmgF8seDjHQ1OzoHETSr5/2on3CPQyD0V3wXvHGOC9g76tuzJSlj5vZTT3LVeWo3tCxk0OYD95up +clTiSfbK3UDxnf7KogeRfwLOYgjPly5I76Fr1khj49F0mFEEHGJunyWd3XvmCiV82rcxRzUH0gwS +IooTWHAPlddDDjr6q+b/1tjWTa1i/bRX+5xpr+H4Hb6zSXRwP9wuyHdiO7RjWUN9reSkdBoLuNWV +/pCV1hu84J/NQAb27spfiES239PP7FAUSaLfc49a+Zh/gjmi7DTDT2giAlKLxuRr7O8P6wxY7uO5 +wcGtvnp0IS5kFJyuZew5n7v+xiDzdQ5sE7ROHLlPrYqweEPsx6JfydexcYq4WNSJKsBrcIrM8+XC +f0N8H2Khj41d4vptwCdaWseC4jcushgf/c2k42Hl5zIP0EjL4ngSCkTGJkMLaEyN5PQ9pBWukwY3 +w7Vc1Rbje2Em7oWo2MIVfIwVQBEavqB2mwEFbXzjNk3QXmBy8IpdgUbfa2ZuziVuXjD/o6OLmBb+ +86xdxrB0Pwg6Da17iPmCQSAKZqPCTYiX9a2ZyBZWvyQsPFg5ZDaiae+BIa0tGYBz/xJP1RnzSzNG +//k1HFzXQLbT3czoZyGhm4YOaDsD2wXjK5Fvn8nyOtFU8X7sDm3m9MVhyqjP2SMad2NRDiMpDyxo +fOtWe4pEOWpHq39T6UAEfPe9sJSvaPnaXJ+mHAi7Ym8Jkrq5z40+4xg9aXDzt6cwaM54EGpThIYg +ZbFio8HB030+HJCwSbe2kY5WZ0HVA1hP+Y4bCD61WTQMk07eTcjMvWHzuPQEaRpppzH0EylarNws +YN5AdiVEWb7HUoN9zsKq3Phqr9L2349gk70tkgl+lsu7PH0RZVcstlPUIBA95TuIgaCCslL/Y6ux +gQ5Iyyaq4uMaO+9vCILrE14cSLcXEFYhK8OvrTECcmL//pX+fUbM28LYa0wET8ZJlScj+YdFFkwx +2/CsZ6Bot77hFaqNJr1ETJNile1YHQj0j8r0AtY2kQ9opV/OFzsQmalZy2poj7T4WZUXAEwy9x4n +h8Q5NZhoI7azw7z/42Wo3ZV4IY/SU1VdKxIE21zfri/VfxbqiiT0haUGsdqCgdwMV7ZLthlb8+6a +vI7jllV9JoKDuI7m1vzY4Rs4zZ3kYAGtFnwBlWKTBqs49H7SHttcegwlnmuL3qBCGn3g+MaLIahf +7Pqss6pNErR+s5b6URbCwgvlUuN1Otr8Y+962YX2ULgJg9ECu2HSarxQ/6lqy+nWLYUw3/wH4Dw+ +NNv7ILkI+2th0ZG4AYgDXFMbTYlcV1dwWMO+S93tLOTst8QAKE+NH+NOf+R9CUgCujD2usL+0ORt +Ye8OFt76JdZEdne3/Bf4uOdlCVVX+aj9kiDm6fz+S1pfIHja7cB94W0sjcYazZAHp2zBDWGAUKyY +QQ7DPk5bL/zSd9Hzum1HLQDhCXoU6ExiEbhi7XR8OP6BNRe/22ARfH4Nk6Wd4UMOyn03d8npz/H0 +mHyWubfrqH+HgHTKPi8jlNqx41a5Iq058OYPW5QwADXAgQZhIrbTrTOkc9cmSVaV5FCQC1kKPfle +7pVLhxuQT02r+AWlE5bJeBCCtvcs/31BlvKg+mpnU6CcLzb++cI27wd5srWbqrKlNqYYs/ykoyJn +TF8qVN37HwfrTtSRwp2L/tzmToQemfenowQ3IkB83/A+WDOqOOKEaGa0faf2tEXij6bumaH/Iurm +W6FLz19/YkLjU0ltuWVmoQmP96rICGqxUxGOH/CwwpQzfY2+CBEpbLY5Lu3tMG8qbUJeDZVzhPW+ +4iOitUJkvIO9OUR2x3HhS2+HrgdxBra+PgQShgLdU+4OpYFI0sL1dvzrLNo8icXFRmnRAhEGjSlQ +BxJfodNfyNBBNds1SyUxNO4BftbECElFvyqQeR+U3+hBUUv5teGZm6omXW5y/UhGxcezVoQEuIcJ +RbIW/0Sbdf8Z4A+aOzKd3DpcphvbN19opyKlX8TA19DQ9Cd9+vq3v4Q22oJqg1Lw9NrPnaBHQ/PY +C5mI8tmATNKXRFgHbBzclW6idwsDYDWV7eb64VfIyfdJY717a+6eoAetMqBqfsCvesNsiJjhuylb +5paA03BxhuiIqQj0YqK9nt0ebyuQjOJArr421f8sr7kQDTMGChd7Mb3s9OR8jE6TJOAg31qLeqGl +l/aHfvMl2U+4Lp9UNsLXe3gPpAt1hmC9WwlI9sClcgpyu7054+D0H1CSkoL3dqq7YOi6lB04ot3A +wELZFRRAc4nAPqNNsfpZCqrcnDnh4FZvVP4FkaOjMmovNm0uuLuJz33kawFv/mlgl2R/22cPFsax +q/sFhvsScoUOVftCDWgo8/cDf6HO/y9eE0hnirpBxwpurjjvOYPbzaxP73RttS1SjapMTNcj2Fpb +JiBrNHRf1rGWruKdgprVcXTueN5lwIwgPyXqa2WLr/IS9PjEG/0onnQbLiCORPusC7/XKRQu0nNb +pas3sFnXmJ26fOJd6sbge9twVZCFOS/u82jOVRyZ45RZ9JlRU0cijc49b4B4dbQMGtUrXXv17Xco +fjpx2KPESOco1H7KfjVwm+61yZCqy4WlQX+26ZsXbRKZpjCBJyhYH8yZDjRjfu1wzLtD6Lr7sbHI +gS/9u/GJOHuGZDrOu5G1csVfCjWCMX3N1wZVtj1vjvWoehG4tsCKcdnrCvXPPG3p7/Rkjgmugl1F +3lB/4cfC4JESxJ8XUoiLvEs7jOyBNomjwPl3sNPH6Z1bTv7p3vMnMmiZOC1BJmd94PV9H9kT6wuG +S6WRgpiWXwyNhSrklQUzD52056HlWqigqvOeL+sG6BlMTmeikZUbdK3w7AlzVXyqDYIIVQZDJ1uh +1F0A/p+9PTkFNmE5Arz1fh9fBO8IHe8/nb+ujJ46+zhlzrzFozo3wA0ZAtKoEk0lYmCljESrPNL2 +JqZi4lWRpZITBQhMkEFu2ICAZVHWnl9/cQO1BfMs/FyuoH06OEJv4Gf7+5HKrM26FXix3n1hVWIT +YBKvUzdAigG6eDZyCX213xx80uwG91dQxTB1O3R4daeeCiW6m1zAW5s1T8raI39FK1m+btR2O5lE +UTNQgua6bp6rpFbbgqdjAdj8RvUrrLC5sFqo0yVdj8K1pAam2kp4y2/02Oam6/ya5Cyn5Oe2hIVv +MeRFsx/BfDnRqNzvW9bw38Fq0xNcBjDosS6HAZx8IzDSsA9c3XuCFstkeZHDW47D4XLDvbxj62h6 +nlSnZ4IQLQ3bjvn9vLdeOYdLZ1Ca0KR6MzJsXg7306Eq0Bt70fwup63Ud+ShBfa7A4u9WpBxtNka +E/KjHhHUKs2YwQxSK51cPGHc8sl9ybsX/wkqzrLvKcsem5vEjWZe0mZkY5SnxBKEN7jjr/FXgpxi +s6jAh+JA5dSODu6Ac2OsLwPjUVlL8WZuXNyMhME3AlUycTAfoP+XNZN+R03rK4eJG5fQmjYHHm5e +dbfFQk2pAhEMLASL5zVvIDqBu7ejQvILszCXYIGXpLbiTb7Tc5LsGl2uiZgsrlwLlYFfKOQZG03R +gV1Aw/noX91Gb2rv+F2Il1vOsdqYGBcl25JzfSHfutftmHPNbeELSHqBLtRw322rVXx9GIEFp4v5 +H1FBjMB4ZGXofy6ZZeSD/2rEw1/QA0otN1laiFm/hyLf/T+uaxSYFlq4oyEOz9mXS2OBhjj774KJ +aQrVw2Mqaj7pXzLTRl+vc1xPgoJ0Mz+hFoZXq4o7Khf/XEpouw+wsr8BXULCBv33C1QfIhBbo4E0 +PFf/BrgsPLTOkHzAWvKjwhz7409szx5m+fidiOXjL1eN8dcWVv972dmeEEv9wO2GksnDRaI6aL5v +WwPZ4KrJAZWZ7n/lIt2wEH5NyUX1MYBfE7ggK6LZj9y8U9Vo0YRTEbmg5xTAzrlC1R8c+GWb7rih +q/bdWYpY3Kd1eqYNlwzaJNnY68wCQgV5Bb0MhReTXtqx9Ltjk54K2v133BtV9R2RXPc5ZZA3tgP6 +8WFeH/WtszICQg527IHsRK0sRVQWyg0p7Kg/gyoxgVMYXIWtWZ18ANGa/ty45qvs6IlOMJKXfxA4 +pIo8UdMvK4lS/im5q4Ph4hDOJrGRbvkAprABCiN7A/rS5BLt1ZXSf9BVir3esTFGWp1eY3tgqiFD +XvxMxDvvT1kNwNHYzDJwvSh36a6u/+EhGLkxXJDeVO/SFxFMLWcctK3BaOUgfGSlth+n9gZckFpd +wIpFsH8EyCbU8lQRTJlnjdAm/bSN2Cph3mYUO1f+BR9usEXE5Xtil375+v5cLthQqpX9a84pObtG +FSCofHmakzkgDOgz132uSmRb4/L5gKQmTIyZkXyFgRLGgOl5sQp2Z4IswiamUUlMIgzSYSx8S2c4 +w4K34OPRUHXxWjurvNSdDLkHY8fGhDwN9hFpssk9Nel/s3eL/hQhPOyI4KUv77MCf2G3ZaU9b+HG +7qzKXjDlR+1zauv1qiI52uGOEwm4VkuHAaBNBj4uBMAGrHq9sXiaQZF6dU+jdHEvPDcZKLwjMDz9 +cp3WdJKsCbBv7piC4kkt64bowmEZyo08zcAr5yVfvLzS3VlCXkL2bXCvxST9YBHanQKRS9UA9eBS +X3z46CKbdVagKVF8bcWFUlXR6vhu18gUt+/WjPefz7yTbpL0L2Lle6PjAFP0DyE6/s6hXAv3ct1k +VbvUgny5gSTeWTXGkVk+pDSokj1Rkry4IoTJtc8XJ2+J+kTM0YkzWcTHNhTwusw9r2QMLQxdYRnO +/vydmXUtQ41T6Q/XAFLAgrP+fy1drrrqaQlre7+H/tD27IXa4lGSPQiIaODewQ+SGDJ6cIzqzO6n +F+m9tt/QrOmIuJlsBhrT5/m1oXstN5trrz57VtjA2B3h+RD1f9oZXgJhZtnKMYd3Eg+PJyiTAnQ5 +EXQO/Te3kuD6uHf08e7+lScQ5efy8noLnAfOsB9RJS4YZScT4ff8tfF8LDyngjlSeiOAVcF5yRLU +Kh49s7K/D0NQSYYxvHecrlwp6EHZmblxREWz5Qswsrd2vio4n6i7EUVflwghaV3tyknF7BT4kfVB +RZ2ilKyJAAURttdVw0eqnomMxsZ3pOt7M1qSMt7/5vQybqT/fNymjEMbd8zU+4Lww1HcOqnhbCqW +pyWkf9/qST/k5qh76TgCRczaVBuChmi9pS3GpQPppHSPzAIewpEbQxD4K5iCk06BQHr9J50uGshe +Xlrcza0oUb7mYMFbCQiIPjl5rj2elSq02z0KBDZ796zsvHPzjyqkdL1N5cfi+jND6dY28UvM4hTI +oovgJZE22o9yb+io0AnCkdbodN9FSvXJv6u4EUQejxx8lrexh3GUciBnlY+HHogkRAWJmLb6HOwP +sHIrZB2gdtbxTZiSST6Rt24HWyFAExJ1oUphGeaAJjDaNAnvLTl5r5P2WBKgGXfANsv0G5MNyjsv +1//YrC+DwkblWBCc2KwDbvF6/mj8KrtCsnH1ERdYeL7zFGNa8Z1MM+YlD/4T76oa8DKGdaXG6jIA +V6qX2bxnWAR2Yq8FTwUdDHYzBb2BfjT+ANDKNRchuWcE3BgIWxjUAqc8M9BZMLodgfULJsbp6NCi +8upQ3TJ0agqtaUfaJly09CF8S3qbrY85ApQZh9hCeqh6XiKJS8Z5lGvEcM1/SqP42oyIxzTvQaZL ++quKMS+SzMjy3uPzYPOvZzZ4lbT+MqCwNpziHkvCC9ud7nxcqrqxYO89bWpWWgGKZZR5CyIBMP97 +Zypd4E6Drunc1htR5Gfs0GDBAaGljqjhh9oWadb/Y00gFjmt/c1RJAWEi2crDm33mgb+ddv+oFo8 +EDgG2FOs2DXeN40NpKl+jXNt0qvQERUZAqDNBRiLSi+LIFTvk/Jj0XuGHunH2z0f+Z5NT63NpQda +iocVeaKwfmDL1VG8U+95zzGcCez/RmlDBOtLCwQGMadbhjTF15BmBeC6Grc70rJXwZuXuwYVwt48 +kFr6/w42n2kHdYXjTINQk6WOJgqxuODKDKjs+nBi40cy+jAuH1Mpdr2dQpIwbv+3MD6LX37MgBL1 +FZNvbeGnRVpWZYYeRfXrfuRbXswRW1zchIc2TPbxR5y1g21RrkBdW3w9b43sVTyS/OzSBkq3YsUf +MddzWaVkIMp/nqmKkS7YInQ2Dw/uzSbtvZQ8soHB3vIgyKSfqYLGvHnEPtjb5/BZWMnVLoKk8xfc +pwqmIPbj9l6ptvIxbTy+1H2D17BrjiDGae6aOIHTbthlySqZweBJPLQzaea99/uvYDUqeZifnnI6 +hrsr7vqjUx28qQ9muD5SjC8v8Si9/jmp9pDqbUWvdwG/YItqrj1rGy3MjBGr+w1ZpfUuCeH9fRGo +0kU33iC2sjNJEz11GapvUJ1nmEZ3tnCs1ZQUd54FWgawuHyHECMVN0PQ14zUbJvtE5pG8nXMcUEc +NGIcF+FR5pSGmw0J3VIl/ndGijPSoTy8+GPnrZUI+FOU05Pc2l/n201GOBm/0AGV5/Hym9bW3c6e +/+tBh9eJnH0CttL8ELcc5Jt6NcY4DjGt2CS8erLRnNmAlpqLI5SXd5MhtF/kAhoJ9mIBdHiJS+ww +7LdGjVV9XuTfawmMKIygKim8tWiqd1K6ImxfuAcetUmGxvONQg0qlZ32K+7rpxrB2FJddmvTxYM/ +E+CBuf2YVv1UHZfrG7fRSbc5ySBQUD/g8t3WDwOA4WxCASqh0a34SOjLJKeK3mWSfEmGGc2kZ626 +X+GgqfP+4ZA9Vl9Eq/kvT1I+VafNARhFqzi6bK4c5Cjo8NgBpfqUBP2rsePIZIpwD4gRho2bBk3y +pkiBRcQD70uV/wByDIJvFaoFIDgbaWYzoT37NEpHziUjI0UW8cm4qBZsmVGLmS9ueUT9SYv8IcWg +nObyw46WSHaUTSYcvkLI2gRU6AcXtUHfqeem5UupiJ72rNnFCVHS9xp2R6WR8xeRvAHSPGtFtZd+ +vnfRcuj4KdaQkUwrBizWjXT5Sh8BiSAbN9bAz/wFUb91s0SSRjXIpeH4ktzDNkMk/wV5I3+zUPA+ +aJYjgG2U8AHFK0FoXQ/P3HflBAEK4rwIMQWUksshw4gvfLhwYHApunGM7YHZt6KDKiRa6xmTkrhB +dKcFpiqmocbQXSxmuxOE+wa9jCgl3bIaPTN8zDzokeO7wXApx6zRCHx9aAmgps1Nx4S7xjl61AzT +80+3tVd2BXnVKBPdqceS250VYGSktwfzXKWwz11Q7LwnY6BADZE4+v9qMZwlf6qqNslDg0erCqdh +Dp7z6a4PQRmey/hbg41HoO/YBAFDUgy3yvc/B6Zz1A0XbyxJpTk64QA1TZEzhc8MWbE7/UQ0wShb +ogkj6XpYhz02QOJwYnPtnkozI6zeRITSc0KoF+LMTYQmrweEsMnEEDWu63hy5OSMivqJYPB/G2cy +5GhFSIH1p4RiNP0HUibCb4k0BxQ16nXAtAyjvjKA9JOUuFGzCeamkULYSqX45qInUpvniBXTpg01 +n5sBUfBhqyqzQZfB5cvSJPeA7uiuNCrzaEUB+bC8cl8C1qBYjwYh2nc+ZfCZYtvBpaSu+mGlgR5T +Bz7nTpGhtEUUM5gUrttXSB4DPNUtUvcneJU43yXvVGqSbG6KLMHf+jyCGSkIxKLqj1lS8qf+Ogcu +us5qI/JJm0SwbfRaJdXkJ1PtV9z72aT5+0RXUidUWxMRMCDDz7/Alm9B3Gn5tYmwZgzi85svn2FW +mykljIIT/63lKzIpqasRdvqb3aAcRTFCLazQv/ddpBdfXHVzwjivfl8W8VzA3huhPQMDRhVzqLKg +dNIu8Q5fCEAezEvGFLUaZBQ0hO6EVpON7oGHjFwBX1jxkDq/VuKmfR3MdXroIm8BnmtR/H/3iw0/ +WxyTr327b1hIP8/1apWz/d6Ot3w/BAuWH9Ucoc/7krCS4ZboAzJoj/gdUv12GHlaiRX7Ji0Zh9zZ +3epBqp3R1jeFU5u2wSR6gYV7VKFDtwq9DG3Z/dkHePuwt3/1jlutrffc0+pSQ5srBBs4NYn3VoBX +KAnmvn9hFHhYl9wbVABzFj/HAt/+11L6os+3TgpYHuEFh1c6IunpNf7WD2Er6c55fO9cWvKj4lWA +ixO2f1LdsLxvOxdXmoyDQ1240SsB728tsf9a8c4vHdkx1gEfD3d+0GfSq2OpLuWfmC50B2m5LYrf +y0/c6bQjMpUHvaMst+misxY6w3VNPGYJftPBDbRqCEuK0Fa3W8OUXUPisI5oa5sy0EhsorP2c7qE +g3/5RML4YzUOHQMIRbXHyJzK+eVieG709Ki5uOAJBWtlYYKBVQ2MBNrsEt37owjRUiy17hojzL+J +cw8aJeOnbOTbYE263nLGmzDvz/ln65+6IuX/DutdBBp/Wj74E+OQvj7+3qrXJzR552jION3LE/L0 +Y7vKQwTaX10UirOEVHE0q7B+TCRDE5U/v3tJlXKHOWC/hOjGkayauT07AmcRzVpX4PrwR0UCVvUa +vzMhDVXxotPMgx+nvpUpJ9lVmfYcEIgs+9xPiDL08ECfWv6GaTUwAU35XxeNJiohG0kzqqkBIF+M +lhHgQe1EVHKofTkSYHBeNO3eHKly9Q+ZBBw08QiuHSVStRX54LhPFslMZgHphXrBk4T4slv73m4f +G+2EKUExcut15WqsjonAXU2aFmnucuLgPRQkKsRx/AKOj1ip4weHxtRxK/e8c52BmhVyZHJMzxnW +7ZywJOG+5ttUtBIvkU1/E0QxI0nOr7xMkmIwnSFIurrNJ4JfiYcuz0NsH7rErOXderNOoqlr4/yp +G3abPx4CaYKQvZG2WLSCtALvY75izSdXGEob0YfDk3hjQkB/nSOIcoSrDwMO9flWr+TiECIOGau1 +eEfncFWHmJX+tXws37AdmjDcd2IlbReHLYLVL88Kto/z6Drs2ezo1gEqPPwqCt2Lz30Bl1YZmmq2 +4sER1KBL0DEU4K4fz8jA32Jp+CheA6KQNobACjfLhGZzK4VjVAQ/XYjrIiXKUEKd1nYXCXT3Cf+H +AQfJro3kJ5YyBGOYdFi1+BkEqVhJOU1aL2YD1RMmoKWAdG5+1W4xfsMN6yKmGsO8u9SD17U5eLdn +EohTAhpv1cADiE6pTghjGCbowp7r80FXeYr6ydqk4YNq32BR1X1BLTwlyWmiAcc5oLCBMIhuaFNz +hIHURHqenMSDjlyPfLqX0KAMpA9WK5JxNvP0eiraTu4f+jO8SVDsxw2xdQes2Ky30otL/KdLLz4r +4rcmlr2HY5DIpO8HxwlE0xTnZUrrjho8RbOcnZYY+Gh4akEG/Cf7r2bUOwNjkxdCJcUfYIvN/Xg5 +9wL+QoeP9o1q1EcU4XQNNrMsYqIusjS1X81EU890cUrH3qtRrVhubpgWDarJkTk6q3Ai+x+dahcA +HaIRKEJHxw5cESpi1xZw/+Sd/knP5zqfb9XpPel/cO2h8e3ZXarvFVCASF5kmD+W4Xgih1R1gDBN +5HemkAAFl6+PENHEVBU8hHtnYsISXW+1o5cGnkSYCaOKAq5Asnvk7uRcwkkw2E/LJm8IaYT0lblJ +ypSflvxHvAZY7tQVn4+byQHtEYT+CfT5u8inosiYIHvMBl/6TMIsgosw4QQRIvpVDNkoD1bT455I +BXAL9Ugn7OII4VEyGRYtuDSTsOdFlBmMOywaLmuZ3I8E4VkCsRl95lM+Xc2vFJeaavHtQWmcfUQ1 +0hkkAzfw7zrylqZQHKDmu3DaxKiSq2Nb68KQjYher8FNKwaaWWeaO4jBQ7HPgJj+tR8u5uduZqGL +LcY+czC3uCSfJqEYMORqKim6h77PpTGpwHTLGyCqptlW81G7Qjb832TeXiV43EuhbFF4sdjbaUS+ +Ec6VQMCRA4KkyxsSmsA3gIRwPjaS75wRVl75TaVB6rlfjtevP6k2VK9Ovs8lInW2AB1gHpeLxuDV +GZ3pPgKnSTrMio8cCDkYi1CDMRx+ZPykr2NRsiJkPCmsbNwnZYjPxg9+PkvBQWUikVkvg2autext +Cad7jhHe4oKMDf/Bme4ZEoXT9HcdHqaOhIrDCX8cUS34WWhqkHQNb2pOqeVYdg9xgjrYOlAp//vy +OfQzt2oAaNqACrW2ud+hUaeq+RkLsr9uYLhR+Z1QXjRZn02dLfRCLhsZWcr1L9EnAmpSlac8Kd8X +EmteAOg/V5dCpyl/4gKVO93I4BZIMaiVzcai5lLkMZDBdrQtxrATDeGeZZXdVhhUEtDNddVfXeAK +vX9kUrus8RjvQEauN74UFuVlMLmBkxihitemwpa8DIapETs4/MYAQayJh4sTLK42SDMCBdJhjugr +rWXIOeyj2klo6mLwdawOT03SIr+L99KEHLvdIVz113S4qNeXQavLDLM12YhYCI+UfU8p9uKU1SsG +DMy0MZ07EJw8fz5pkIBY+ssAikK42Bsgo0tZhOes/HgS0vDUsz01ddHMKP2SV286c7zcucxrOzzL +nZvaoLW6N7WRgk+y3O5EmENPcWSFxCjBHm+Jo2XLPvOoMeaYhwOnBSFlEWZNUWKufd8ZFPDrjdHB +QY/j8RNci6vCZVC7nS8305ZvG/wXCqgTQzZvPh/A9Ms0XQYqHdxmP22XGhhei/XRuWnMvLHImpEM +/AS3VzetSXQp57qSfTbI5GInA9pSbKrSWCX0nXxu0H3e9KhMZrjaBB+wHLW0ytXXSMfbI2IpmjmM +/8Chu2XGe8rOSlHNjfGxD5HtcJQLIp/hQwptaNqLmsQY/MFtkay7lNGjX4XjpSKon9jhqXVRAVLD +tkMJKMMF+Mu6Kwd9f2LcmiwWbWH1oxSxmUn823Ten2R8WkNXK8Tld5L7UI/ORtTTtQKj1zfk4c/N +KV/4Gn237WobG3jgub7QJcHJIrVBcwsc6TFyvHQJoOyqcxTk2LM7nRifip3/MV2eCFXJsSGN8zCo +nh2NhFkp4JZGa5km9Rk2uxOD9cRWkuwunYamx0w4FglvjzQurMHpzuyf7Mo8AmWj6PLlOZ5JkWLk +2U40NB2IwT5o1RNZ5e0Wqyyre1vd+AxU28k+gWBUnPv+QEN3rUvZFXCxBvEw3nTWWnLq2f4aIy1Y +uaIWYYQ3hCmB719o3tSWxGXbIcFp56WF6zqLJ6Upxgwxa6cCjMrF2hm= \ No newline at end of file diff --git a/language/german.php b/language/german.php new file mode 100644 index 0000000..800205d --- /dev/null +++ b/language/german.php @@ -0,0 +1,242 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPu24jPe2FGxTps4WkMEcdiiwyonhOQHV1RsiAdVbM6fKalFGtFpGV2UWGxDLN7n74yN239F/ +owht2erRy2Ae+s+pTNkNOeL0GpMh1mHkdKvRtHSToJeJg8Zc7ioVryOu17hs30Duud+0Qym3/Yqg +hqm9Bf9PPIzy0qTFQp7dU1vLPXQ33ug/ekUnbQ5fqLrQY2JSvxnVQOAoSvRSlDPkVO2NJ3Izr04S +/fmYHbB9o0AaJEvlUuIhdCYAKC2vALpoZJ2EA3DV3y9VjP5zZjRCZchbS7CElhnCQi4wPNQoJVzg +ETConFxeEcNqdmIk8MAO6KcCzVYdmwM8vyEqgVj6zIfy+vjB8pFom5lz6s7JND+QMkHSAMJiYtr2 +NS4YdVkQvN+GRIre85uXnKRqvKHK79jwIQBtayev8XLtk2MA49wlqE2CPGQK0FD4oUI69yo/P7y9 +Z4UYhD2K/ktbbshafic2R/GR/7lGpwRaadSJ5fbf3xPVpSDdhpNNff89/DoweZjiI0xeR1ZUBGjd +Do3+ysvYaF3hjwx2rw4z47uDFR+WdkO8hFIMV0BatPGZwqUxE4udduvk/2XxAGZcwC/5sYXPMKBX +lBLhZ4Yqa8FHfZ/q6ej1FMtDPvUQOeMuIou0C6pu8Z11n/cMJSSmSxxA4qE8WJbb+8CWRPEgAhCS +ZCBTyCKH+THWUlm5E5avYuuEpsv5Yf5ytskxQJwcRA+51XUu8YhA/L1ekvQABq8vjD0Dp8/X369m +E/3b+pZVtGWuCWX4YphVNxRIEulgUGbpKnNnZb8sgyMdrqNRR/Fi0Ia/KSnuBrX2YKWZqNIpYPsi +MJLSyCGM0M1pHOkPt8e1Dqv0lRrnqt05WhsRk+ONInmt314XnfamZlPJLFIXq5jXGbozcvW+Dctv +Hl6/GDu2bjN4xZr4/QV7v6btDV/YLreP84bIEsd15OZ47Z1xiUOq3ZhIA8eDR8A1Dwd8IdURy2oH +t8/sym+VEwRnxWfMbLazjEesbr9ULQiTZps2ZI2+H8lGldZCn+m6RfzxTCH5owm6N0PfmIeMqvmw +A0M9VZwdRdWZrJVgqC9d01RDLT/OSR14iJK62MJoR1uWgNvRZ6/SKfDemA39mgLnWIDkXmUCUy+o +QhLOh5qLzi+CV2B4JwYq3ebCFzVtPLORAEmCAxbnp8oC76r92C2sSW6dDOJ3JOTonai42ONspqSz +/D8tLb1qaX6pcrsnGTGio8x8qqGn7PwiVzsrjUG2J/rmFeRGf1o2Kg6gOIg7GdydI2/8ldmLkYv4 +00mPPBbPVRy6UYys7+oPhDzak3rYxvMl2EDfzICk5F/pfWm2wj1AiosSZNqvma4XVcMOq1L56vNd +c5hMS9R6RB1P9vRENTvMmOLxJRqscKrqa/Qd2SkEYRdL0Zl2UGKLytp9abHJQ4RJ+jnr+nGuINcH +4uAC6OI0Mq2xghl+LJjgdsIcnmWnCk75/93iJiRiOinrcn9Tc6EPO+HfLZ8LrsFME9MZBs71ZIvL +gY4/0PPGsTIfA7ouQHPw3rqgxKq6ib4kEpcgGbv39kkTiCbQjCIK8jh4bAotSV60GYJtLB9/Embs +dD+QXwmZOQQ6UkdiaQ7/+GpKm3dfsCDUKQBHG1jEh3c5aYGmgK78PhzvjwBr2j5RvALVpgYZpxBY +uXOMLMcjvmQR4VHwRGGBpgDFpa9pYI1tpnCn9ycOGYHClZa27Ek6TlkCS0TLqw6Dweiq+n02zaSc +zi/kAaAdmCu2qmdOH1T3tlxi7H5WuLvzHWmSIW9YVxEMG5QfVUytefPRPBqV0MAgARWYc2n2ALjW +ce4mPAd8ttnejeiHz9pBknv6U4FBq0gkgoA3+juz2/tJ84jyB28GLbPYfduMaUgTpHwfG9GV1QGu +3hbZdPJzZ9gYDDynATQ4Z78gHXJ9BgPkR8725EaGS3DqPBU5ZX41wk+OLoB4XaWl+vogSx2sh8zu +qm+xrrik9HpYaoZYTD7WvxJgOZM9+M9+zfIpFhLd9JLFt652Ufo+AhhuMkctbzhYKpsHrtL1lxmp +t7DlPQFaLWipK0gaQio2Dvoh9RsqPbC7i7X+Nk7nLy7YzRAVvv3W832z5165WO09lBwKPaLVbAaV +9UQm/StnSlqYJ9sxL1C/u7WPuniiz6wS89BVeuGvhJWGpUDbuPJ/LTqRbYRFe5vXsKYD7yFYjRjL +PVsjNffN0YACe7WOmoWtMqCPy1xw8ba/nU/26ieko8o3pJKb2tmrzpGTjsblHKg+6INP87I7oh1v +mb/77m+UPDhNL7MgH1hJ4yMVs/BPGOHahioFVsxKRjmRMm1kbRiw7AU8SLWEgZq4lKIaFPVOG0r8 +tIeLPmdZfFpxC76k9xaAKVL1pZgXPlgEXB5IXz8zU1Ucg7ViLUIK7wg1geZCwqdDtwS7/GkPJAMa +WkhAmzZa1Djz8CrnBu95FkDOkSTUVji+fnn7+Vik8/KtMHlYCe6rOmiI7YUTSDwOyrn7+UJyWIBV +czMPRjf/C6N6EP05RutfB5Z0eNZjmoWKoDqUDlRTI+in0FhsBJ2L2XDDW6WVqLOkU3sEVXmoi6QN +YurLmuzFaDvKWoym1sOlD196uyxdjhKI4LoWuE0tnCWaJANvkjH4xpfoGn2052ywIDPuAMrWqgDE +jVl0us91u3q9wvOwEa6v2GYN2RSC64QfPjTlDVo7l81Mx1Q/hp638pzFVeC0c1M+MvQM5uziDEXQ ++w0YJGKiqzYegQLmhDtJXo492CBMiPPc6M5Swg7izAkx6eGp9xG5eSmwxYvz5cZIrcMiriy7TSM/ +gjPTWkXWMuI044fWkEgFoI88Iuc6d5VeseTHyzJG6uJeaU9QSCjez59GvAPALP6nPiBx4HLm48yA +Le2MXWt7csqHMyGnBCaGCXpXjRbN+nITIXNX9h9vsdaABqLDWkS8snEO/eWwCxzAfhZ1YCFcaNyN +X9iIVrkaBfSMgIivZ/89Q9tyxgKIyUCpSEF1EFMwg9FiT0mYL3qBSffat1lMbj72DT4tceFQCUC1 +9SXUMbVXjWpM5iHahXwwTK7z3AQvRtempxlxzThyBvK4OXVgb1PUsfM4BfJDMA2yBERnyAAp5Mpw +iH/Ow8NNOtDmmZK+6vT+rWC65kI6MBQwXIhKTH/pCvQZ5eWlbTvfsuXRm9qTPcTdIW698Op/Tb0E +8O0aCi+mgyI/JVj6T+nYuiZiglQtjof30HCEroG53Rn42Ul9IYDeO6DhwrJ/NqWFWK0fLkMiCmTP +e1TEGJ3yotKpZuuT84qn87D5hxCrNsqICpuIyjcPNcsNSrzl06EteIjKG8j6OCZHBy4qiZbLc2pZ +/4xBFH6vGTssdkCLz9Gm+qG/r6u2WnYilGobj6GtES0G4k0V6hGpiaMsXe5O404aVyZ/2clXaaob +wKlSjrNtVzozpP/NSGtklyXDqdqQ2lPF32rNdxWdZCMfFoRI+AHpsGXhWcdv6iySJiI0TGNfbOJU +n8OSPDcM1+XIymXht5vaBPeOe5BxCs1NCnTlN/aHN/rmUOXjREG8V37VlmWuTfyPBtoMaO9YEZD5 +qBoXqvfwC4M0aC/plyZ21AWRxFmAteFEdhwBZGkXvDGHu5EK1Ydh+JXUW/pDUeBHzYR2rzy4yScl +/CDUC+p7vfSZzP8lxPRIMjr9jQajxvzXRX5SjZADh5EuNFdLfcqXcGDpJCvxC2Giwd7zYUumhDys +HUbX7u0wVDvycwg2rEWG6C3NIviYbdRvQ9OSgzf8m2BPzuvcn/ZZ4QD2uvI6i+xY4ENmoCOr8EJZ +rQHMfp8MwXWJxioqmbGHBQyza7yLW1o2Y07pltN4Hq/BpbY3ddonT2FHgTalLCqUmvsDode/orEY +UkXy1r0pO93H04dP+vu4gWwV7RAxtxJmlVy8uVFUeOx/dYalFemXzfSix1ibSespryWkTnjtB8bs +LWlHiOY0HJ/W5xC6YrLD5MylL8Fo7rrSMxp4M9nW6bDThMcJmJ/lyWauDomG9qHX56BS5J71wLLG +c93tLcl5YOeRHzou1EHU4gPB29xVEidKQzCZn0yX/0lxvSZHjikkdyVp6eQyJvJxgeC45TGI/BrT +9YB/aImaS8g6CljNBkq39od8h33HNpERAQzBr5scgZZIs5/6izEx0LOOX9IjgeUZcgsWsMfI/M6m +xNtNNUqAUEySUz1UJcT2N8gETwbX8sqj76JSYbz0cXjqCjTDjS9Gs787pVRFMmrVqLugrA5uKVNl +JoU8udpHo128OZtLFr51bBa9MEfhxRg5ZpVDmb2Jh7hNLZTznUQP+mz9cMcDh0GoJUhuk5+D1GXf +j2rT6WcEORo9/Au5fJNt7kB+dZR6wu2DE7TzFgXVmTydHTGA/ioteJ+XRHUkSFr52UGQwrkoABv5 +NcwmQF08/1JX2NzliNyMds62mo4S2FY3IsH2iA/q4PWRphybV0R1HdPYG0cKBGmaJnkm2W8qKIA6 +qGWGblRMc4//wMNIVJtxfniUi5vlAtXJfwnee0IEsz/dxaRcla2YtvZmDJEGM5uJaankJinDr70G +WLi0CfaLIPV23QaViw41nLwb8NIpB+kumTA9PK72r4M/MCLpXTR7q8MJcpTgOqimrkSm8bVRm0hL +lPGoaea91vUtD9YgKP7FOcRo/lqqOI+mEiNEyf1ZLBl5xoLXhygHZXJXeHWXe7xaasd7cV4NtheY +9VbuaBwvHdq0kVogWR2lXQHAEe3uUmrENQ25tLP0qx2wSxmm9eUDKeXVoPiB7nXxGOozNpWGm6BZ +89tWiDKM5BdICkxNBV+I01O7ho5LFIjI+HNFblbhJ/ewOeXANDcMNHg4R1WBqSYn/XOSLgLGlZO0 +rwkyaB7dS7kA13u7hOgwAZ7RDUT3DKIg2Vf76RJvYGeg5SeSR7GpG7MtHzws6gwT+7UoWPEBrN6Q +fXGApX17wh356raoJS/AE5MJYnFjlFlgaY14iSyPwDTy/tJMJZD5BHLTOCydZyPhGNawOmDFltZJ +ST7D48SqTpI0aGvNFutrkbEKwup2uAQYbTOB9k37gphsCLZ3HUINdvgv/6x912BKeTP+UJ02R0fw +vbyCMsUPvm3iM89w9cHR0PN5vkNEcgH9tVtTBThyP1BzcJjjQkyz/cfkJv1Vvw2v5RMzwWLgFhxS +jzEgHxcCt17VM1tF2rv6UP4/KvKTHbW9BKkV3xiL0obnfAHc3cG+j72sScSr7YzqgECPcPEfjRaz +GkVheBkZ3QYLxl6N8+4xgkdK95ebX3usC9tB2Y55vOLqQPrCYbsA5n+GbWXAyuU8i+o7VUJJh9+Y +dooy3jQ92Oc1PY3uNatkY3DFg0aE5D/UnUNLQJ9w3pU0GOqnUUZr+v5YzLcZR6HtmhPUa7/P4FYr +jeoJPB4fxdSdYO9/Nj7Cw1j/loh833qBTsocCnZv4y+FkC6xQV7IgF73xc5+N67Xms6WCXvEtckB ++F2MCmQC7CitTW8iYM3FHy3jS47gm4QWntrnMthvlkHbHRZ1etWTSx/sCXRNqdiDJLq6LjNZNKMu +sWtXgmjU52JPBBjFLysdJMygeTGrN3X6v8zn7GxpquR0Rqnv3vRi3WvAeJj3+pjFzMR2/Kw1WJWw +QtRNFthhtkH/m7f6dSysGLGxSDnPoh1jPEaiEr+IKGXSoXPot8h0Y2hAWXCjNCPCs8hhX9JMWA8z +zT3WgKZk86aPWrKlnQV77kGr/zuxvKsWTWzgQDHwYqTp1z/psfs7Tby+/Rojfce6QhOoV0lLrFnY +xSLeM5tDrWZqubT4rPoBdc+iQkId1CfsE1hY6i7flwM/G465OG6oos16UDjv7eiLGoFAjEEsj5Uf +ha+OKbLiv8nZ7vTobJzfuO1uDBHMzCrcHCLnwy/e5mhdO3WdrSmiRjpvcgMUFZwt4OWDRZc7ni+a +p/6LdYcxIWzWJ8CM5PsDXiHVscN98ApWq4fZH/T4rsiQ5RUr+q9zAGlWGAPlvUoY4bdrNOfbSwv7 +SDpUG6ccVMhofEw4DJUg1sLZ/RHfXlGtbDqGu3la90+rHVw6pPfoB5oUEwn0Gjbmb03SCkD0ohLF +cYu28VrV/wQiPKZ3yGfdil/ouNBZlP3jsWs0HHNGBJMBYChvAFvOefen2vIja4Qh8TxC8T8ROSz0 +qlAKGYFd850vQLdLmH8l3GA8DvjPYHsGtN7yrMcrDaOm1aS0+cSmSqrpoC9MPV1+G93YuH+0SC/f +X+vA3tWwzry+MyR8Qd4War02e0erfnlt/pzhZrTopInVr+ButP2sb2cKYpLAddALfrxnuURAB633 +Vh+g5e8ctGdYkMb3auGIsXjsEXf/Hr6EETR+YhR2VoV7bVLrz89zs+zXeaGDIzeb+widTvXydVqs +RdSxsgw39MWGx875s2twpQHzMPQtV9n4PfmrCdusUI9aAqPBLU709dSh42pnSB/LCTNblrKXOiw1 +sXmMaF6RGIyESDx1HicdYDf5o0kZul/qep+liXQja7/KWdP+pkcKiN3i3pQD8X2svf0lukqXH3st +m7qCHxKjLX2Rz1nlTkfT+GA98ych7CE0IsHYwUHc1vm/LbVE1sawJOazBlVWBMrM5nfpKS/7uGzz +uIIDXCXkmGvhzR+NO5ze7RrEXBscvOx3ihljpK7EnG7Zd8PMHh62icmS0G7sFPr/hopyCEfzo8J6 +lCW3tWgatXJwBvX4diS4ZqZWM3T8sOt/s1L/+gW0vvKud2mea7USw+9bCFiuCN9tArB/Q+zgaZVK +OrspSN06FtIkqkraFHkrKorcLmpq9fTr5NYtcPyPO6fNO+Nenxw48hY1zmw6WonCTOTRUT+0y+eK +Ne58zWIs4uPPsQGGuh66l9Da+9A7xbfvwUYEJfjkwN2IeNOOj2HTC2siHhalgrTdJPhmx26R/26A +T35ywM8HYGRf0VlIY/D+cTIcrwd9DXIUBAQ2QF2fE6PjMrkYBSkDp2ucgQvcAxE3Ju2MNaxZtPZT +88tt4SPOp5FMnxQgmyGR1hTI4MtdzynEBg3/oJVQC9qNZpxrTj2RXy73sS1ppB3/vQJK9VG5xnsW +WmLL2yUWRpFfxSDfZJZmmFq9vL8TEA+kWJXlO3YxkPXBjsvlhf66AgquUjaLxxJl2hmT5lzFXtLk +Ff+FJyKLMg0FeRRzPej5Zo+1Bf3/nPZp09gVJDAg49CmlcJZZlqR5I5jkVCpR5lk9vBg0a8TZikV +f8T3tms8DJHQpJ9uFHVDumJozgKtX0Y6aeZZ/rWInfzNg6hkGbtQQEvso3jkTKiM/Kh5GyhZWbvz +9LBpY2wuvHlN6131E37BuRZV6zSQ3xIX35DylgL58bqO0IqDL+nELL1p6lxkvjiZWe6FpGHGAlkz +9wlnibDWr9Ez4AiQPwbQuxhbc00+LBh0s+FIPeqp0tPUsVYy6zIPGuh0nf0seeXqd9UJ/9Jt1GbI +pI7q8BjXfSQCij6jDAE7KSgkm3kcit7/ssZNmkXu5TlRT8BOxDdQGOOMvAoUPLVSEyP5DBiCai1V +8kCdBhoOhmXBpcWRmk/bndwCvaMQMZH9W/nQO7rXVdNClsfg2REjjBkO3MkJylUrECgWen74Vf3J +yZkC5Rx7QMIKFiq3YFjJ0ueSyBM9e+HU2VF10QxC6CGLcmD7ATmSi0j2BczbbyeY/2GWsqGXr+zF +w4QpdHUQJGa9a0bPuGq6qY5MLRk3Of/k0Upwq2VXoGphJnVZwRxqYZ2p8x/nmGWgG4jfY4DsGQ66 +oxm3Hh2mC+zSz4W/ArFLaSixblXr/r54sPYdk1VkLmjoYyNdJIP07Dv8QklJreb7PqiuGodN5HHG +Wi+el/pBaCnGCe5ZBHluJVavNn2/nd1mQ8Bvh5FMwFGEbuud1X9AXCVKLJCm24Whp2NpFV7EvbdR +wAEfvOTuR9CCbgX/Iw3w8t5ueDxDinDdSdEtLWaC3GPHHlupVT/zNw06orVgQzAlkZsH+BBCSAVV +aC22L2gQl9a6ofHmwwsBxdphYnUi+ZxmHnCWUmuM9PytJ0Sm85eGBvd7ZEmcgqBmwZ/4T84Oi833 +Bs7vfELFn7XWNhLYR+djyeaErQT4zpSMzf4QMmHV4QkC0FChuw7cZ98mhB9+VfFyx3JF0wIyvcQV +BeKZpJqGcXRWHcDALLdTkJ3NcJ7A+RV/whPSVTJAHqhdt+p+6cw2oDqxfBZpxbxEGFtwqnzzZHN4 +kcYVK1CGhpijDhTEJRIKtA57LwEmFg3qHX+OCwp7E2e+pnH1gZS5e2Vi0k0NeWqhsyRHsa10jZKp +UgICJNMHRatqZn2MQ9zRGDMoTmRbyEJmGrlCiKOGh0qd7etXAJBnxHpKCE00aA9TrNjqO2J8s1Zz +KIhSYbhftGEqPbIgZsfPHKY9Ek8X7S/cTegLJ59K9OdNRA1Np2jyQe4TWNW5xPXGl6dJcfIXUvVi +PS50WQAZ3xx8EgD7WoG7fuNf+5SdOnQnErSb2i7pvqbJ1nk9kIdwi35zonzEbWIkk+WUaIwOttYg +z6MEj01yDbf8rYaFYNeEjNm9R83ieCE8kcIfBfQiv6hXQm3knqzAXAXYSJXDc2DaweDZTk4ahF8h +2cN8tSiQ1x2NC9OLwATDcIcVt+qTJUdHTAU4qw6M/6HR6277xyWnofSLtAiia3kWw8Rw8FSl6Ylq +ks75HuBlzY6OvVufMKnM5r+juSmQtFXuIsneKigG5VcEwfaxlGqFsnFqSCbFs05HBEJb6NGEo7mF +mTHci1AEs+tVvEeK7U+OvJE3qwT0ZT25bMG9S5VtNAV9TjstFtjn1DCVHpGE0ycDAwK72x4J26+5 +Rg4hxaV1UQSCJqrolvKaoWzx+DYshvH3H5T6rU6S96xN9FBmN9iT5dAQYkX37fMNisEallQSWbzl +LkOYGVbToru4Aq9WasA9981MTsn3dwo/9qS8CAwk6iEACfvLMeqqKOCs0x/teVeBG3TT008JQyCu +d9IJlclwg7HMEH9B1/uI32iwFl3EI5++890BdRO31cYShR9Wdo6FlqlNzrhhkVPOYsRNJ1zrsaTq +7FSS/gy3Q343TtBFTMngoRfly76YCtG9deVABh2F0H4aaCQcfh6J+tI6jJK+ZexVeV4QWqX1gqd2 +d3cKex7EdrN0E0t4xxhGe4gFjjlGovAJkVNFhsvvDGEShlQJ+A2vtRcL/9ZULcBF9hMR2AGEjIR6 +gJtO3rG/4u2W9wGJGsO4jhqXTYfd0WkqpH5xLZ7Z30VSMObyQ70XwU1kyMEvYKLqQ5mZq5r2Qz0j +259S43Q02Q1MYVybcYw2x3txuzFBeYd/782hn4/GvHGhZYExZ+Mawfjcn/QTGhrQ8gCWLnoGLn6a +CMCMAZZWNNSjJbA+pRlnPvH5i9JO3XhMbjMQVC73OHd5A4v0mjYj2C+XK0mbW9EYc8wEPalgXWmF +iZMbJBrell6ZMjaOh0fKbZuc9QeHY1NyXDCfc/GUmVwGs2VyI5Prbfsplz25gCT5C5Y48xUAZ8SC +rkawgOSohgF5DV19tU26onLJmM0VCGr/8JFL1PAHHD25yZyLORNzqfQIpjelw7VT6Pmd+30flQ+7 +YSWuKHAqrpBjp8ZBuecPncTyQLoVO0465hlgiF0Htw/oLoEanDnRFzOgsOELs3aOl3hQEX6RtkiO +FK1pxPoUD+ahc04VWpIV2//bMN/ajfdjaHQIg0usPOGxWlVVz5pjSZIZK1zWkFkzTH0dKe9Xr3OV +9goCTws7PtvV/eFCxTiuijFs3hJnPh0pUSJS6s1QU0XG2cfi9H29p5bnD7xLpoVAcE8KtLV1W8fv +Ep028nV4I0PTTi+XfgVandtO+R2gizs65Vfr4CZWVveTJhNPWux2q3B02VrJoksRV5e1Hbp7IcN+ +XAYEV3ReeJ72kh38vSZz8+a6IA4kOcA5M5pGgacOgwuL1CKEdVptIU9ZWvZeK5C1LGQGJ04rssoI +yZl6jTRZZaFvRZHZkWSXs5YmD41YI2hmkqbNvli2hEnd/Q/o27J+hKtEedvi/yFXU3VYkdKeRz62 +V1Z4EOHqceNSsx1w0r8uHpjxJeO+N9YPFmKWXnTKnxaf9TcvmSRebwXCaphfASTb2j0VW475s7/n +NPcH9BVP87aBInYuBevocbyiwLjAHPBxXzS8bbn5LPJqIIbX5KZLksvdUnXBmTL/mZY78tR3dFop +phIGmugvvxdNqOHn0DoaS9M4JRY5UuZsL/yXnDKmdHsCJZu+ycbsNXMSkzHNqMVC7gu3VpZRQ6ge +MTfJfuF3Ufz7WDlci2XoKaW+aBzwAqpDgE0e0ZtEVeH6ZVbA3utgskyUgCJhRmzDGPKJAfTUYIfl +O3RWj4k2pPd/QKE3PyX/C7Z/8SRvWYB6YqDaVdlwSXb0KfFIHqDJF+5FXvR8b4GgPPlN3J7t9Or5 +lDzwlkw+X2Ndh9aT8mXe+3z6sZNa8TPjMlogozYQzbfNVqSEzTB/bB2urVSLTZTVgEZOSkrmhxyq +gDQ/w+K3dIdHyDuwU1EQvhPex5wkmvY/RmxA32xlpfghNbgHJTqSqWeC8vxMt2zmQDmzOEZEK8a7 +9n37Vo+YZhg7Txq6iaQjwLmKbjd8ahb68AJs1TWEUzk0VGJ0sXVoyrJTJNeIHSeZGYBAuO8tG1oS +QzkXa9RD4rghRdsS8lVZwFxxwvbsZDBCiFCQMlqhayatINNLvRorohzSIsJSPF+Dddz78+Uf8c3d +Kkq1yegm0ga8kqumxlyPM6uLLD1OA3i2xQ6ekeTtumMP+weOfN0hbxyHO82jirDwdoVQ3ZLwwhju +Qe21QLB0IEnApL1mrKgCkY7PnkQVu6rF5yZe7GFSVpbfn0yGYRrrrcCVTFYwEjrhuqb3sCoYSM/r +lLOjwR2FcKxbDbP015M3NtItgGHCoSDkKVi67bzJQ1w3GidwBzkxCBV/HbNJ/bkcfG+Q5I+ZRvRL +b66CzQKYSRgLNNicE4rAWawc/I3OqO2AzwKju60D54M2+qE+5KyuBxMFvN2AZMGjiDJUjNpIr7fv +jML/DZJW63lOpo97bHIGpDspKTR0p2F/dcT56zKiEey7JFxzhNloXZchh4mIv7KZncntK7S9iwkw +0UvQDlG3HuGl3JvESGoii05kPCoYjD2Xs7quyQN5GbeE6WH/Bs+RngNKSLhTqA7bylj0CrNHoEVJ +u9XCXMfwl337etldl2to+oaqhXgqN2LIdtX9kGv0lvwnDK+Ezm5oy7/ftG/4/YUQZdkucEWVv8vh +c+dZIL+ZvtGqcfq555cPa6b7P/7I6lN8BxO0h2PqCawKaWOZaaRO6k6UOX1whHZk5R87p3wEQ1OX +Pgk/Ue+dF/qG356lCb3Q2ytjArROXcLfFHE6EPJorstUQ2zyBONbGyRenN1cBdR+wC1rLyKK/Jtv +9RIEbka/wgpU55T5jRE79b2OihIy3G9aT3UZmSKlizzbQD462skokEVm6RmazkfdSTqkOynb70ys +teN+WnaWUJNssdqS5yRZRqS1VpCgESWACI7ZtOe2Jo9WCrV/4hfsABu7pJwM/l+qq2p1c+rwzvWB +KoHfhsCa6k6lX3yOHxI23cMpp/FP7zT5EaDZaBN7DcgiO65Z9uJQUQLhjgcjgW/DYJWIEnp+10kD +KQOT5bb4mc2TM1Fyv+QJQZj4o9slKPTUIZcJAQgPpjhjYgEh4eLKMz/CnQQqjpCDrCKxKl/nroFF +nHZJ4PDHwsWWOwu7Vwlh9ufazyNBOZ8agY8v/x+DD2m0PmBmUWus/4FrUWApZXIzdzAQD9yYd2nn +aF/MNxoZH7DvUMd5+nyqoLitVxSQG+gGn9ozCTblya0ovdSAA57S+vge4ynu+3jh1iax3sDlih9A +M7MHQwdm6dpa/IHDKuQXrBy+5IVXCiPUoodRwNf0RaB6MeZus/mUSel5wo3GNWqhIQnDW5wPZ7q6 +Bjgs15rHOPmowKu6HvyGXxlXLYblhnKw++jE3a5241PPipe5QSdT5erjxa03/zW4c59tMi9fqZV/ +jxaCaHbWOhEnlCjdnT2iJPTcCrLZdfrkgORuGSyPi27wB6e06DrL05qwVoeNi1rfKmJJzWfKtpB/ +5kJDd7RfHHxlpa+2YXAEkYwMbKKHjuYXwpBDIRz5BSi2R7K039sq3L8JZ3co5XqbnADkX4bMUy1E +8Twe0nYZTKQeouuzJdmnspE9/b5shBwXZXCX6DHCfUTXhIduxqTjxDk3+P+CT85wbTa/cEIPqx3e +A79Pp7dnPpya0Ml8eJKh2wWljhBbNXjWU1LO/RbgD0rotA7a7eG5mqV0M9plkFiqniEnR3+KVky9 +BSefpe8es+0R56NYqDgdlsKwKqkGPuAq+3b0b4DuzVitzFKqietW/lSGI0RJZLCLIvHoYeD4JHH4 +Ror2AOS+zsNzIKjCarnB7YXeIB4IfPqjO7DQ3VymCgQlibOC67HHBzmnGCms7Z9pSVRm4RroJgks +l1+ShFDasSHBD+tI1vcP4SqWwmBPKoOl1j4PwzpmwGVyJyRLn055vvBgTmtK26Q1MJVK1yzNpG0e +T0YWVgMnaMJsZ+y55tYkx5UIzXVBCVAwIDCAIlgcBVOoDU69G8BkByGA7jVCmxWDAE7qHQw6JZ62 +rV3wXaXZdMT9FObHg5J7ItBLmWSgDsVv4yplGCmPFvwy7H5h9JebwSTkdcZKydtnlTYMC6j8UTT2 +FcdkYsoAOKhkOm0VyE+IIkKGohLK8ZbVfdMBIMgRuureWN3zRG5KMPz03wTmiJ/qzJxOCSnkZpiS +/xBspf9ABZrrt5WKNyFk5bDURGIaAOIVaIbBaaTZqELvTNsTuFZHu+2bMdkHNyojGm3g8BHCFt0o +VUS6l3RHGyNjv2FK7ATrJhxZurftva3tXkqzCsqSCBqXG7C5gkknfXj7rsped8vBZZznprzcFJQ0 +qzYynXdEPv7TQjcenwq3JCwIlOn7VWOM70z8MJSdRYLAzlT4XNmVU/EIOal46waxSPEz0xxtX5Hy +XEhUtDVIceYd/VaoUdUJ/AlzgfxwftkXyvrty7P42HH5olbXtR1s5i8cO+2aykfkVPKdOl3+JdW0 +kiZnS8ExL4QkaFvZ/puE8NCfrrZCI1/JL1BnR3yN21TfbuotnStBVlXX0NprrhIsG3VaMlAVVt/d +QOHMKfut8cZpMpM99jNdv+lUY2k+DhGDwbGAG3OYdLps0US+FawK1saJHaBqKQhdrzSRFKts4oei +ZB5DPLBbXqUHPj6PtIUyOT0Sds7K0hhA7GaM9GMA51z1K74K5WNXN0Vw6iGAaeT7R23HVHm9du7X +LejTMWr75MwzTDwh61WKsiBYJWSayDoQVz2/yarOafAhC1CNFd00UC4W9CycH3urHijHNoyagZyi +dT38MTdAL5DMmDA0uKg6A9E5GxiKODPzdCXPkuKTDLbhgyeFyYGMnOGN1c66zkbZSvo8TzKe9Yuj +BAEF9zL7IQFelQ/pgvCrHGdN7MSFLWBsWEHKdQwNYZdInjD4h14L4DvTn3xItOmOO4WJQanb5r3Y +am9d/oSo+1XY/G3xMznJ3uD0v6kDp3QyeHMtVK5qQYyNr8j+3vM5q72OQ9zFJne5orTTUHEPUGdO +U0qojXcIsUQsyxK6/7TyCNb6qATeje/EJDDhwyRU/+n2y08mmYufcX1iY+nBZPskSx98a3fUIRrr +21t13O45SDHb4K3aaTL0Nif4p2MAbXHrB4pB4nA4e6gdruOgX+kt5Qp96fXUx5A7h5SfBHWAuj9u +vdwlGS4oVsSWVFUjGV6P3fOKMwBpJJtkfOGsKjrRa2z3Uoz7FY8PPIJB1DqJh56AARUCluusvR3u +IVE0ZrM3wjcIh8/efEjci0B6kxzCub/YA7yvJcxDHQu3+Hc62bQOZmDuXqelFmljMBXHtIdxlMx4 +LR21kOqoCcV0Q7SrWoRdUCKHZSSAnYoTGFmbm8E30eh5MfraJCJ9I3WJlI4vFMqAkG1QmeyY7o47 +p/Wr7YWpzPd8lFwpS1rideQH0byAlbDptPGEGIRO/SsVtbO/oVzpr/R9XIE6I+2ydOvGMwlr0FGV +L42bzJJV+bnElddoZoOrrueMYGMN1XrtioFiRwaje2U45zpxEcyPVT5UbcnX7ePgKJic9m6ELLNw +YCdyIl/q9U08mT7DCLZcqgUSI1l/4LcDvy+Drhwa8Ttq9sq03O0u63g+tcLi2mp9JwI20cMbJk0S +3FX3zdk3kNnizmz8RH1OgC8c4AJyBKcXjoAcjhsbwaBeImPwGDvnBAqEe1mRz2SCEAs5Hma5QDXz +8MT6ORjtYyxhfTKIO7oN06RmkfOurGpJJ76tEoytRh+y5Vn/Tvhr1RlgCz4CRj7oc0pH8aVH1VYT +IH1PAmI5bfvDyWbE9dkr+QWW1WOhd6clWH3ys2baCsRdQGlYbbuEJjOI3+0moTx8DdgLiFD6dDDK +2EdNRWhrYvjp0Q+zPfv3vtRIDqjG+/k6Emqa1C5j6wdqq74HRqzF/Dup2x4Z7ij59raRfd/btBvZ +sFcVXfIQQ+eEPMNP2zGYe5NLMyk8a92tpEbfUMfhp7RwPi9oC+aGrdQB6ZuXcDsjZyk3cU95aH9B +o05axS7E5pubIG3PL2IvjcYAsEkTnYeCleVy7AKrwsoFc2OM98/DBvdjiNDemWm2W0FtQ4JcTxiE +fXCFmhGhkvBhzuIO4F4FqX4jbKHzBmXv8cKY8Nu54mzn1wih2qWwCCEWD1qNxjtNmpJ5exQTnJS/ +ppSh6MeGDVzxUFIvIBR/4J8TeHiUMj1U7y6kyBAGnBXUac4TMG4gYpKF+oavpoIN9S0qqhbe/7bf +i4S7aFG2PNoXCULEcCNJxHX1I5lw3BGd/+2C5/7giflpOSQcZjvg1EGVtestb8+RpGw2OmE7+Ate +IE1vuTzpTnsh8r4Cw8JkTC/p4L7BQ/n9LBpKtVUQjADWMB9vw/11vc8blLgNIYibxYxnv6MpKd7W +1Fma2r+gbUNpRLe+UrKc1NIqZsCZNtblX6rO0kKcTrwOwHmAH8RT/wV2UaIj8cQFA1qgWKpa+mpJ +OXM4DTlL5KdddrW1w/y0K/Lk0ogkNZrwlWDEACsRJmBXGo+SNcHlhI8o+nnRpG0BvVbI8kt8jIo5 +S3joaTa4L0/i7l4/oNlJWCbSdQhulLwf71tE6ouN4EgA17P7gne8MQ93mwkE7LbMPOy+hY5BPBDL +Mf4Ym1VXmb9aawyBBKkk//w7Lw3FnL/N7ty43qXVcgIzGhlPvavnIdtOVmSmIhLFEIW057UAPd7K +necmBP3JFkqS91usrzFeWQbyit0sVnagE/GlYJVaJJWwBvWx7iquqeG6T9VqH1yD/tAlwHtyfx7E +QXRqqZbPgjkmHwEmIogoPww7rPkHhT3r8uC35+KwC5w/OvfM+6Q4MbAcbxB0nvEdvv+UplFaPx7P +1OcgnwN1mDKI0FHgyVigDHQfYY+3WahPf8/BMewGrJ4tumJKstXKcy3xnAK6ta4jSgyZuwhv/Oip +aZ0SToSTOD+BEKo3ryKzhofysxJkt6ENoYk6VNe8ATz7d2atzSzgWHKhz5mabZCl1sGnctQdx/t0 +arJkTXhlO6MAwLYTDqqqWigIm0PJITigxZSH7esk1a2Z+NiJ/M5rZJZITu1xp+ELzCod+c5dE8JQ +rmjV2VngzQYOJIB2YuIE2jBOWnHNAUlrYfHGxoQlQzYHc5DGp9qHRZ7pLTk4Lo+MjL5WD/FN84kA +C3V0c1eb56l9I3z16xlE/l0n6eAjaITfbRm+svcSA2NOZlvMKlH582+7YUAs06Ewo0ekn0+ijfBU +83ts3ob4fGpFuN4xdTPHdrTUoMCjTrJ1V/Umii3aD09wMLD8jVhMUC+lYrVe7lPcp0qQmvPn1jtj +EMM61viTH8CgPJfp9Tw0o5RB67KaBBuVGZ0DoA459dAMsEFYZ9vepR/iYc6RDaNOeNZPurJ0NzK7 +yPwafwDb1lF3VJbppPGIW4bMdJTBGmYa7nagH2BS8e0XCk06b+8Mci+4dV3EQT+PDhT6cj1mvMw1 +U1DicRWmPGnhuH2DnTgxpHbtNBpmdUhvqOKZb1wzdukBpMnssjF3dAk88zjBnb2Bk8i2KjmRNDVY +J/sJR+R4m1WXjy+fOJ12qR2U67MtXvoUgkluOCFDKM+jIFpUlphW1oJoSMv/I1ZgUYZKBh5eFMKC +StCvWUH3LfTvmGOkGuhRQYQbXkudz2m+xWM+GFP5NBE78VUUlfGoPax/zpzJIL4ca8YcVj37DHnU +hR/1ABS4V+2Y3eQtHWjOn9l/OijNIAhPu2G3Q7XJi8lWxe73LE1N7vjoDJ47EYMQBG8M8ztx+KUA +9lDWcg3y2PkBgG1IRdkLCuxR3/koKI6H9Nm8MA2w1fqcQt/SIK8ktmne2coUwcnN/GDmOq3Iprv7 +91YmmKvezmwQObRFXPPxKuX+Cdtzyj7QvzPvuy8F7I2x7CWfxJ7IwGAqs7MOLXvOeh252aT8aPdX +8zxlBc0TpVx39SbUSwtz1SzMPx9M7K4vQ4fCeLvtYlGjVEsZEJ7B5eRKRyrtqtmLNTWtoz1J796G +zdIvmapbzJAniUWU3PJ4GqHrXXaORlPhUe3aEpTNetcslxtMTaNIeDkj3Ng8LlH9Cjfubd7pqM+t +C8uem7fOxCZQdfvDpvCedgkpkWR0lGtJzMNIjmRvMp17dlW/X2yeILgr+zs0Uxtp5GtQ+w2ywXdc +maWIt1byGUYzW1kDInxYEIVw7uHQ2SIoB3NNn6CuWmc20PxG+MgAbmUu9KwnpJKMZJ12Qdo1R+l1 +tGATe2ENepaZ+e7XvTbLtLtKyajcwsYjbErIxOnWFb90iK99eFHVIHfhllXKXueqOsg96FmvGRT8 +zxKtp0e/a5a3wjuUBb4SsT9mfUHsgjtozUS0jLcxAg4B3CyGFSNu6pyWJEWv/v5J20r/Hv6QzfYj +GgCwlrjn4JzdWopYR9PeeXKU1oULdrcgGqkH/UH5G7hEfesG1HElJOd3Tg069LHba7cmBjnELesC ++n2kCuttaGvuG7BEyIEBx4NU4SPOObrfZ5uiMpJGBTpgK5k54PSpfLd0tnkEOWFMoEiR8g9kw1DM +1NVxWH1qFsz7MzmhCgrxAwpd2IZ7BFKx9rDgL5r9zMN0VMG9Gn2OQLw5RCOZZh/kgA7+WHltH67x +p3Hm/my9s87yPweZCryusYmLowLKJm4Ayouq+ZZ2/xbkRs+YnyBiK7FZbdFy6e1wQB2Be0p5HMzC +O+O9VaELGAu/qcyNexbW36F81bJt/4ktzbol0+SjfvXPldzn85U9mZHLbqBNeNIP1eTrPlAfHjDD +KPvtZvhZBtS67UJq0ySNIraBKiOpu30d0gaVFg7HLZ2DllxB1/cd+Kcq4CQSf7e2h5Zae6ktg53K +J/4jhnsF2FQOa28zhgawSMWxLCZPNIoh/8nQI2r3DxrcaSismrs7KRuDBFcs2vW0kab48VJETbz3 +uIUKQo3RZNDqgr3FL8Wdw25Ev9+TaCPxyqu85tsN47+C6C5Jh8EtwU5ZTs353L635HusKqEirzNp +BekbO2vZbNf/JTQ0CXxJ4te/HFQBegbEOH7VJmro4+2//jrOGJX4fonNkFerrV1m3F/gaVqul5se +49f8XYbLnKvc/y5qOYxlNKur9RwMLGbUc99CzELdWq3YR1neCjV68goMMpZT4WqJxecj+Eu/uGbe +mb1yPjzS+lpp4PYTbfnWSXVQvchZdyX8RvwtiCveGGrEQLQrWd0GsSiOE8Ps18kkCcBqODMNIyuw +koJljFUzdecYTAe/2gBHBE+BysQWvB0ceHQYyEyNOjFBdTsS+hDSjDz4jr3CQWX2FqVudVdi61RD +2qsV2hpiUGSiclNEDhA8cyIMxZdC7mGj7eWAfyaBlxjfm7LKLdEAFvcXuQTOdW8pj2KOkVzeL3GK +5NEsUiiTJkW6L2SWm3riIzEQTFz7MtycvIBJcTmL4+r9kn00JQPIvMVu50iFbZbP1jdoLJG0C2VC +BmLdxufqjyGCGeI9UNIa7xjH2w1x0CLH8/e8ZpqjLU1n0dords7OtTvvgDHvuQP0Dk2SXJXS9MYY +ikt4jm== \ No newline at end of file diff --git a/language/polish.php b/language/polish.php new file mode 100644 index 0000000..70b0032 --- /dev/null +++ b/language/polish.php @@ -0,0 +1,1064 @@ +<?php +// ======================================================================== // +$lab_SystemName = "SYSTEM MONITOROWANIA STUDNI"; // nazwa systemu pod logo +$lab_MenuOut = "Wyloguj"; +$lab_Field_Lp = "Lp."; // liczba porzadkowa - naglowek kolumny na listach +// ======================================================================== // + +// nazwy Menu głównego +// ======================================================================== // +$lab_TopMenu_100 = "Start"; // pierwszy blok w ramach g�rnego MENU +$lab_TopMenu_200 = "Katalogi"; // drugi blok w ramach g�rnego MENU +$lab_TopMenu_300 = "Stan"; // trzeci blok w ramach g�rnego MENU +$lab_TopMenu_400 = "Eksploatacja"; // trzeci blok w ramach g�rnego MENU +// standard +$lab_TopMenu_500 = "Stacja prób"; // pi�ty blok w ramach g�rnego MENU +// enterprice +$lab_TopMenu_600 = "Remonty"; // sz�sty blok w ramach g�rnego MENU +$lab_TopMenu_700 = "Gospodarka"; // sz�sty blok w ramach g�rnego MENU + +$lab_TopMenu_800 = "Administracja"; // czwarty blok w ramach g�rnego MENU +$lab_TopMenu_900 = "Baza wiedzy"; // sz�sty blok w ramach g�rnego MENU +// ======================================================================== // + +// standardowe przyciski +// ======================================================================== // +$lab_ButtonName_Add = "Dodaj"; +$lab_ButtonName_Save = "Zapisz"; +$lab_ButtonName_Update = "Aktualizuj"; +$lab_ButtonName_Edit = "Edytuj"; +$lab_ButtonName_Modify = "Modyfikuj"; +$lab_ButtonName_Cancel = "Anuluj"; +$lab_ButtonName_Back = "Cofnij"; +$lab_ButtonName_Recount = "Przelicz"; +$lab_ButtonName_Search = "Szukaj"; +$lab_ButtonName_Show = "Pokaż"; +$lab_ButtonName_ResPasswd = "Reset hasła"; +$lab_ButtonName_Sync = "Synchronizuj z SYNDIS"; +$lab_ButtonName_Delete = "Usuń"; +$lab_ButtonName_ChemicalParam = "Parametry chemiczne"; +$lab_ButtonName_Calibration = "Kalibracja"; +$lab_ButtonName_Associate = "Powiąż"; +$lab_ButtonName_Next = "Dalej"; +$lab_ButtonName_Print = "Drukuj"; +$lab_ButtonName_Return = "Wstecz"; +$lab_ButtonName_FinishSave = "Zapisz i zakończ"; +$lab_ButtonName_FinishNext = "Zapisz i przejdź dalej"; +$lab_ButtonName_Finish = "Zakończ"; +$lab_ButtonName_BackToList = "Wróć do listy"; + + + +$lab_ButtonName_BuildIn = "Zabuduj agregat"; +$lab_ButtonName_BuildOut = "Wybuduj agregat"; + +$lab_ButtonName_OperateIn = "Wprowadź do eksploatacji"; +$lab_ButtonName_OperateOut = "Zdejmij z eksploatacji"; + +$lab_ButtonName_Operate2Piezo = "Przekształć w piezometr"; +$lab_ButtonName_Operate2Studn = "Przekształć w studnię"; + +$lab_ButtonName_HoleCard_001 = "Wyniki wiercenia"; +$lab_ButtonName_HoleCard_002 = "Próbne pompowanie"; +$lab_ButtonName_HoleCard_003 = "Profil litologiczny"; +$lab_ButtonName_HoleCard_004 = "Konstrukcja otworu"; +$lab_ButtonName_HoleCard_005 = "Uwagi"; +$lab_ButtonName_HoleCard_006 = "Zmiany"; + + +// standardowe ikonki +// ======================================================================== // +// sortowanie +$lab_Icon_SortUp = "<img src='./images/sort_up.png' title='Sortuj rosnąco'>"; +$lab_Icon_SortDown = "<img src='./images/sort_down.png' title='Sortuj malejąco'>"; +// ======================================================================== // + + +// standardowe komunikaty +// ======================================================================== // +$lab_FooterWarningAccessNotification_001 = "Brak uprawnień do przeglądania zawartości strony."; + +$lab_SaveRecordNotification_001 = "Rekord został pomyślnie zapisany w systemie."; +$lab_SaveRecordNotification_002 = "Plik z danymi ze Stacji Prób został pomyślnie zapisany w systemie."; +$lab_SaveRecordNotification_003 = "Proces wczytywania danych został przerwany. System napotkał na poniższe błędy: <br/>"; +$lab_SaveRecordNotification_004 = "Operacja anulowana. Pompa o podanym numerze seryjnym istnieje już w bazie."; +$lab_SaveRecordNotification_005 = "Operacja anulowana. Silnik o podanym numerze seryjnym istnieje już w bazie."; + + +$lab_UpdateRecordNotification_001 = "Rekord został pomyślnie zaktualizowany w systemie."; +$lab_UpdateRecordNotification_002 = "Powiązanie zostało pomyślnie utworzone w systemie."; + +$lab_DeleteRecordNotification_001 = "Rekord został pomyślnie usunięty z systemu."; +$lab_DeleteRecordNotification_002 = "Powiązanie zostało pomyślnie usunięte z systemu."; +$lab_DeleteRecordNotification_003 = "Nie może usunąć rekordu, gdyż jest on powiązany z innymi obiektami w systemie."; + +// standardowy napis +// ======================================================================== // +$lab_International_Field_001 ="Lorem ipsum dolor sit amet, consectetur adipisicing elit. Proin nibh augue, suscipit a, scelerisque sed, lacinia in, mi. Cras vel lorem. Etiam pellentesque aliquet tellus. Phasellus pharetra nulla ac diam. Quisque semper justo at risus. Donec venenatis, turpis vel hendrerit interdum, dui ligula ultricies purus, sed posuere libero dui id orci. Nam congue, pede vitae dapibus aliquet, elit magna vulputate arcu, vel tempus metus leo non est. Etiam sit amet lectus quis est congue mollis. Phasellus congue lacus eget neque. Phasellus ornare, ante vitae consectetuer consequat, purus sapien ultricies dolor, et mollis pede metus eget nisi. Praesent sodales velit quis augue. Cras suscipit, urna at aliquam rhoncus, urna quam viverra nisi, in interdum massa nibh nec erat."; + +$lab_NumberResults_001 = "Wyników"; + +// Parametry wykorzystywane w ramach całego systemu +// ======================================================================== // +$lab_FormSelect_001 = "Wybierz z listy"; +$lab_HistoricalData_001 = "Dane historyczne"; +$lab_HistoricalData_002 = "Wartość"; +$lab_HistoricalData_003 = "Modyfikowane przez"; +$lab_HistoricalData_004 = "Data modyfikacji"; +$lab_HistoricalData_005 = "Pobierz w formacie Excel"; +$lab_HistoricalData_006 = "Pokaż wszystko"; +$lab_HistoricalData_007 = "Pokaż wszystkie"; +$lab_HistoricalData_008 = "Historia dla danego parametru"; + +// Standard daty +// ======================================================================== // +$lab_FormDate_format_01 = "RRRR-MM-DD"; + + + +// podmenu dla poszczeg�lnych blok�w tematycznych +// ======================================================================== // +$lab_SubMenu_101 = "Parametry studni 01"; +$lab_SubMenu_102 = "Parametry studni 02"; + +$lab_SubMenu_201 = "Wybór agregatu pompowego"; +//$lab_SubMenu_202 = "Katalog piezometrów"; +$lab_SubMenu_203 = "Katalog pomp"; +$lab_SubMenu_204 = "Katalog silników"; +$lab_SubMenu_205 = "Katalog agregatów"; +$lab_SubMenu_206 = "Katalog kabli"; +$lab_SubMenu_207 = "Katalog orurowania i armatury"; +$lab_SubMenu_208 = "Katalog opomiarowania"; + +$lab_SubMenu_301 = "Stan studni"; +$lab_SubMenu_302 = "Stan zbiorników"; +$lab_SubMenu_303 = "Stan pomp"; +$lab_SubMenu_304 = "Stan silników"; +$lab_SubMenu_305 = "Stan agregatów"; +$lab_SubMenu_306 = "Stan kabli"; +$lab_SubMenu_307 = "Stan orurowania i armatury"; +$lab_SubMenu_308 = "Stan opomiarowania"; +$lab_SubMenu_309 = "Stan piezometrów"; + +$lab_SubMenu_401 = "Eksploatacja studni"; +$lab_SubMenu_402 = "Eksploatacja zbiorników"; +$lab_SubMenu_403 = "Parametry stałe"; +$lab_SubMenu_404 = "Eksploatacja piezometrów"; +$lab_SubMenu_405 = "Eksploatacja ujęć"; +$lab_SubMenu_406 = "Kreator doboru pompy"; + +$lab_SubMenu_501 = "Pompy"; +$lab_SubMenu_502 = "Silniki"; +$lab_SubMenu_503 = "Agregaty"; +$lab_SubMenu_504 = "Kable"; + +$lab_SubMenu_601 = "Demontaż"; +$lab_SubMenu_602 = "Weryfikacja"; +$lab_SubMenu_603 = "Jakość remontów"; + +$lab_SubMenu_701 = "Statystyki rezerw studni"; +$lab_SubMenu_702 = "Rezerwy częci nowych"; +$lab_SubMenu_703 = "Rezerwy częci regenerowanych"; +$lab_SubMenu_704 = "Rezerwy drutów i kabli"; + +$lab_SubMenu_801 = "Zarządzanie użytkownikami"; +$lab_SubMenu_802 = "Zarządzanie profilami"; +$lab_SubMenu_803 = "Producenci"; +$lab_SubMenu_804 = "Zmiana hasła"; +$lab_SubMenu_805 = "Zarządzanie bazą wiedzy"; +$lab_SubMenu_806 = "Słowniki"; +$lab_SubMenu_807 = "Parametryzacja"; +$lab_SubMenu_809 = "Raporty"; +$lab_SubMenu_810 = "Zlecenia"; + + +// ======================================================================== // + + + +// nazwy p�l (tooltip�w) dla dla strony startowej - mapa pomp (formatek/plik�w, np. dla pliku site100.php mamy '$lab_site100_001') +// ======================================================================== // +$lab_site100_001 = "Parametry studni 01"; +$lab_site100_002 = "Parametry studni 02"; +// ======================================================================== // + + +// nazwy dla nag��wk�w w tagach +// ======================================================================== // +$lab_Tag_PumpPerformance = "Wydajność "; +$lab_Tag_PompDistribution = "Rozmieszczenie studni - PGE TEST"; +// ======================================================================== // + +// napisy dla nag��wk�w dla poszczeg�lnych tag�w +// ======================================================================== // +$lab_Tag_standard_name = "Tytuł "; +$lab_Tag_standard_content = "Treść "; +// ======================================================================== // +$lab_Tag_site201_001 = "Wysokość podnoszenia dla posiadanych typów pomp"; +$lab_Tag_site201_002 = "Lista pomp dla zadanego Q"; + + +///////////////////////////////////////////////////// + + + +$lab_Tag_site203_001 = "Katalog pomp"; +$lab_Tag_site203_002 = "Dane techniczne pompy"; +$lab_Tag_site203_003 = "Parametry energetyczne"; +$lab_Tag_site203_004 = "Wysokość podnoszenia"; +$lab_Tag_site203_005 = "Sprawność"; +$lab_Tag_site203_006 = "Lista silników dla pompy: "; +$lab_Tag_site203_007 = "Nowa pompa"; +$lab_Tag_site203_008 = "Parametry energetyczne na zadane Q"; +///////////////////////////////////////////////////// + + +$lab_Tag_site204_001 = "Katalog silników"; +$lab_Tag_site204_002 = "Dane techniczne silnika"; +$lab_Tag_site204_003 = "Lista pomp dla silnika: "; +///////////////////////////////////////////////////// + +$lab_Tag_site205_001 = "Katalog agregatów"; +///////////////////////////////////////////////////// + + +$lab_Tag_site206_001 = "Katalog kabli"; +$lab_Tag_site206_002 = "Nowy typ kabla"; + +///////////////////////////////////////////////////// + + +$lab_Tag_site207_001 = "Katalog orurowania i armatury"; +$lab_Tag_site207_002 = "Przedmiot"; + +///////////////////////////////////////////////////// + +$lab_Tag_site208_001 = "Katalog opomiarowania"; +$lab_Tag_site208_002 = "Urządzenie"; + +///////////////////////////////////////////////////// + + +$lab_Tag_site301_001 = "Katalog studni"; +$lab_Tag_site301_002 = "Wprowadzanie nowej studni na stan"; +$lab_Tag_site301_003 = "Lista dostępnych pomp"; +$lab_Tag_site301_004 = "Układ pompowy"; +$lab_Tag_site301_005 = "Agregat studni"; +$lab_Tag_site301_006 = "Parametry techniczne studni"; +$lab_Tag_site301_007 = "Położenie geograficzne"; +$lab_Tag_site301_008 = "Parametry chemiczne wody"; +$lab_Tag_site301_009 = "Edycja"; +$lab_Tag_site301_010 = "Wybudowa agregatu"; +$lab_Tag_site301_011 = "Zabudowa agregatu"; +$lab_Tag_site301_012 = "Odprowadzenie"; +$lab_Tag_site301_013 = "Długość kabla"; +$lab_Tag_site301_014 = "Kabel – zlecenie"; + + + +///////////////////////////////////////////////////// +$lab_Tag_site302_001 = "Lista Zbiorników"; +$lab_Tag_site302_002 = "Nowy zbiornik"; +$lab_Tag_site302_003 = "Typ"; +$lab_Tag_site302_004 = "Nazwa"; +$lab_Tag_site302_005 = "Zbiornik"; + + + + +///////////////////////////////////////////////////// +$lab_Tag_site303_001 = "Lista pomp"; +$lab_Tag_site303_002 = "Wprowadzanie nowej pompy na stan"; +$lab_Tag_site303_003 = "Wybierz typ pompy"; +$lab_Tag_site303_004 = "Dane pompy"; +$lab_Tag_site303_005 = "Dane ewidencyjne"; +$lab_Tag_site303_006 = "Eksploatacja"; +$lab_Tag_site303_007 = "Dane historyczne"; + +///////////////////////////////////////////////////// + +$lab_Tag_site304_001 = "Lista silników"; +$lab_Tag_site304_002 = "Wprowadzanie nowego silnika na stan"; +$lab_Tag_site304_003 = "Wybierz typ silnika"; +$lab_Tag_site304_004 = "Dane silnika"; + + + +///////////////////////////////////////////////////// +$lab_Tag_site306_001 = "Lista"; +$lab_Tag_site306_002 = "Wybierz z katalogu"; +$lab_Tag_site306_003 = "Wprowadzanie na stan"; +$lab_Tag_site306_004 = "Edycja danych"; + + +///////////////////////////////////////////////////// +$lab_Tag_site307_001 = "Lista poszczególnych zakupów"; +$lab_Tag_site307_002 = "Lista powiązanych obiektów"; + + + +///////////////////////////////////////////////////// +$lab_Tag_site308_001 = "Lista urządzeń do opomiarowania"; +$lab_Tag_site308_002 = "Wprowadzanie nowego urządzenia na stan"; +$lab_Tag_site308_003 = "Wybierz urządzenie"; +$lab_Tag_site308_004 = "Konfiguracja urządzenia"; +$lab_Tag_site308_005 = "Zainstalowano na obiekcie"; +$lab_Tag_site308_006 = "Aktualizacja danych urządzenia"; + + + +///////////////////////////////////////////////////// +$lab_Tag_site309_001 = "Lista piezometrów"; +$lab_Tag_site309_002 = "Nowy piezometr"; +$lab_Tag_site309_003 = "Piezometr"; + + + + +///////////////////////////////////////////////////// + +$lab_Tag_site401_001 = "Sterowanie studnią"; +$lab_Tag_site401_002 = "Parametry pracy studni i układu pompowego"; +$lab_Tag_site401_003 = "Parametry elektryczne"; +$lab_Tag_site401_004 = "Parametry chemiczne medium - parametry podstawowe"; +$lab_Tag_site401_005 = "Oceny pracy układu pompowego oraz energochłonności"; +$lab_Tag_site401_006 = "Parametry chemiczne medium - parametry uzupełniające"; +$lab_Tag_site401_007 = "Parametry chemiczne medium - metale ciężkie"; +$lab_Tag_site401_008 = "Lista podłączonych zbiorników"; +$lab_Tag_site401_009 = "Studnia jest wyłączana – proszę czekać!"; +$lab_Tag_site401_010 = "Studnia jest włączana – proszę czekać!"; +$lab_Tag_site401_011 = "Diagnostyka prądowa"; +$lab_Tag_site401_012 = "Pomiary dla wybranej daty"; +$lab_Tag_site401_013 = "Lista studni"; +$lab_Tag_site401_014 = "Historia po zadanym parametrze"; + + + +///////////////////////////////////////////////////// +$lab_Tag_site402_001 = "Parametry pracy"; +$lab_Tag_site402_002 = "Powiązane studnie"; + + + +///////////////////////////////////////////////////// +$lab_Tag_site403_001 = "Schemat"; +$lab_Tag_site403_002 = "Dane instalacyjne"; +$lab_Tag_site403_003 = "Parametry mierzone – hydrauliczne układu pompowego studni"; +$lab_Tag_site403_004 = "Parametry wyznaczane – hydrauliczne układu pompowego studni"; +$lab_Tag_site403_005 = "Parametry elektryczne zasilania, pracy i zabudowy silnika głębinowego"; +$lab_Tag_site403_006 = "Parametry okresowe dla pompowanego medium w układzie pompowym"; +$lab_Tag_site403_007 = "Parametry katalogowe głębinowego agregatu pompowego"; + +///////////////////////////////////////////////////// +$lab_Tag_site405_001 = "Lista Ujęć"; +$lab_Tag_site405_002 = "Dodawanie nowego ujęcia"; +$lab_Tag_site405_003 = "Ujęcie"; +$lab_Tag_site405_004 = "Powiązane studnie"; +$lab_Tag_site405_005 = "Powiązane pompy stacjonarne"; +$lab_Tag_site405_006 = "Powiązane zbiorniki"; +$lab_Tag_site405_007 = "Powiązane piezometry"; +$lab_Tag_site405_008 = "Powiązane ujęcie"; +$lab_Tag_site405_009 = "Lista nieprzypisanych zbiorników do ujęć"; + + +///////////////////////////////////////////////////// +$lab_Tag_site406_001 = "Dobór pompy"; + + +///////////////////////////////////////////////////// + +$lab_Tag_site801_001 = "Lista użytkowników"; +$lab_Tag_site801_002 = "Szczegóły użytkownika"; +$lab_Tag_site801_003 = "Nowy użytkownik"; +$lab_Tag_site801_004 = "Przypisz do profili"; +$lab_Tag_site801_005 = "Synchronizacja z SYNDIS"; +$lab_Tag_site801_007 = "Wynik synchronizacji - utworzone konta"; + + +///////////////////////////////////////////////////// +$lab_Tag_site802_001 = "Lista profili"; +$lab_Tag_site802_002 = "Szczegóły profilu"; +$lab_Tag_site802_003 = "Zakres dostępów"; + + +// dodawanie - po zmianach +$lab_Tag_site803_001 = "Spis producentów"; +$lab_Tag_site803A_001 = "Nowy producent"; +$lab_Tag_site803E_001 = "Aktualizacja danych"; +///////////////////////////////////////////////////// + + +$lab_Tag_site804_001 = "Zmiana hasła"; +///////////////////////////////////////////////////// + +$lab_Tag_site805_001 = "Wykaz plików w bazie wiedzy"; +$lab_Tag_site805_002 = "Dodawanie nowego pliku do bazy wiedzy"; + +///////////////////////////////////////////////////// + +$lab_Tag_site806_001 = "Lista słowników"; +$lab_Tag_site806_002 = "Nowy parametr"; +$lab_Tag_site806_003 = "Aktualizacja parametru"; + +///////////////////////////////////////////////////// +$lab_Tag_site807_001 = "Konfiguracja skrzynki e-mail"; + + +///////////////////////////////////////////////////// +$lab_Tag_site810_001 = "Lista zleceń"; +$lab_Tag_site810_002 = "Nowe zlecenie"; +$lab_Tag_site810_003 = "Zlecenie"; + + +///////////////////////////////////////////////////// + +// nazwy poszczeg�lnych p�l na formularzach i stronach +// ======================================================================== // +$lab_Form_standard_name = "Pole "; +// ======================================================================== // +$lab_Field_site201_001 = "Wprowadź parametry poszukiwanej pompy"; +$lab_Field_site201_002 = "Zadana wysokość podnoszenia H:"; +$lab_Field_site201_003 = "Zadana wydajność pompy Q<sub>sz</sub>:"; +$lab_Field_site201_004 = "Dla Q [m<sup>3</sup>/h]"; +$lab_Field_site201_004a = "Dla Q [m<sup>3</sup>/min]"; +$lab_Field_site201_005 = "Wysokość podnoszenia H [m]"; +$lab_Field_site201_006 = "Brak pomp spelniajacych wprowadzone parametry"; +$lab_Field_site201_007 = "Typ agregatu"; +$lab_Field_site201_008 = "Q [m<sup>3</sup>/h]"; +$lab_Field_site201_009 = "P<sub>s</sub> [kW]"; + + + +///////////////////////////////////////////////////// + + + +// dodawanie - po zmianach +$lab_Field_site203_001 = "Typ pompy"; +$lab_Field_site203_002 = "Q<sub>n</sub> [m<sup>3</sup>/h]"; +$lab_Field_site203_002a = "Q<sub>n</sub> [m<sup>3</sup>/min]"; + +$lab_Field_site203_003 = "H<sub>p</sub> [m]"; +$lab_Field_site203_004 = "Producent"; +$lab_Field_site203_005 = "Q<sub>min</sub> [m<sup>3</sup>/h]"; +$lab_Field_site203_006 = "Q<sub>max</sub> [m<sup>3</sup>/h]"; +$lab_Field_site203_005a = "Q<sub>min</sub> [m<sup>3</sup>/min]"; +$lab_Field_site203_006a = "Q<sub>max</sub> [m<sup>3</sup>/min]"; + +$lab_Field_site203_007 = "H<sub>min</sub> [m]"; +$lab_Field_site203_008 = "H<sub>max</sub> [m]"; +$lab_Field_site203_009 = "&eta; <sub>max</sub>"; +$lab_Field_site203_010 = "Długość [mm]"; +$lab_Field_site203_011 = "Średnica [mm]"; +$lab_Field_site203_012 = "Masa [kg]"; +$lab_Field_site203_013 = "Q [m<sup>3</sup>/h]"; +$lab_Field_site203_013a = "Q [m<sup>3</sup>/min]"; +$lab_Field_site203_014 = "H [m]"; +$lab_Field_site203_015 = "&eta;"; +$lab_Field_site203_016 = "Q [m3/h]"; +$lab_Field_site203_017 = "Brak parametrów energetycznych dla pompy"; +$lab_Field_site203_018 = "Dla Q [m3/h]"; +$lab_Field_site203_018a = "Dla Q [m3/min]"; +$lab_Field_site203_019 = "Wartość H [m]"; +$lab_Field_site203_020 = "Wartość &eta;"; +$lab_Field_site203_021 = "poza zakresem"; +$lab_Field_site203_022 = "Przypisana do"; +$lab_Field_site203_023 = "H [m]"; + + + + +///////////////////////////////////////////////////// + +$lab_Field_site204_001 = "Typ silnika"; +$lab_Field_site204_002 = "Napięcie [V]"; +$lab_Field_site204_003 = "Moc [kW]"; +$lab_Field_site204_004 = "Producent"; +$lab_Field_site204_005 = "Prąd [A]"; +$lab_Field_site204_006 = "Sprawność"; +$lab_Field_site204_007 = "Wsp. mocy [cos(&#966;)]"; +$lab_Field_site204_008 = "Obroty [1/min]"; +$lab_Field_site204_009 = "Długość [mm]"; +$lab_Field_site204_010 = "Masa [kg]"; +$lab_Field_site204_011 = "Średnica [mm]"; +$lab_Field_site204_012 = "Wprowadzenie przewodów"; + + + +///////////////////////////////////////////////////// +$lab_Field_site206_001 = "Typ kabla"; +$lab_Field_site206_002 = "Producent"; +$lab_Field_site206_003 = "Opis"; +$lab_Field_site206_004 = "Dokumentacja katalogowa"; +$lab_Field_site206_005 = "Zdjęcie"; + +///////////////////////////////////////////////////// +$lab_Field_site207_001 = "Nazwa"; +$lab_Field_site207_002 = "Średnica [mm]"; +$lab_Field_site207_003 = "Długość [m] / Ciśnienie [bar] "; +$lab_Field_site207_004 = "Producent"; + +///////////////////////////////////////////////////// +$lab_Field_site208_001 = "Nazwa"; +$lab_Field_site208_002 = "Producent"; + + + +///////////////////////////////////////////////////// +$lab_Field_site301_001 = "Studnia"; +$lab_Field_site301_002 = "Pompa"; +$lab_Field_site301_003 = "Numer fabryczny pompy [S/N]"; +$lab_Field_site301_004 = "Silnik"; +$lab_Field_site301_005 = "Numer fabryczny silnika [S/N]"; +$lab_Field_site301_006 = "Data zabudowy pompy"; +$lab_Field_site301_007 = "Typ"; + +//$lab_Field_site301_008 = "Szerokość geograficzna"; +//$lab_Field_site301_009 = "Długość geograficzna"; +$lab_Field_site301_008 = "Długość geograficzna X";//"Współrzędna X"; +$lab_Field_site301_009 = "Szerokość geograficzna Y";//"Współrzędna Y"; +$lab_Field_site301_010 = "Wybierz dostępną pompe"; +$lab_Field_site301_011 = "Wybierz dostępny silnik"; +$lab_Field_site301_012 = "Średnica D<sub>ST</sub> [mm]"; +$lab_Field_site301_013 = "Głębokość L<sub>S</sub> [m]"; +$lab_Field_site301_014 = "Ujęcie / Bariera"; +$lab_Field_site301_015 = "Kabel"; +$lab_Field_site301_016 = "Nazwa"; +$lab_Field_site301_017 = "Kategoria SPM"; +$lab_Field_site301_018 = "Głębokość filtrów L<sub>F</sub> [m]"; +$lab_Field_site301_019 = "Głębokość zasypu L<sub>Z</sub> [m]"; +$lab_Field_site301_020 = "Data wybudowy"; +$lab_Field_site301_021 = "Powód wybudowy"; +$lab_Field_site301_022 = "Agregat został pomyślnie wybudowany ze studni"; +$lab_Field_site301_023 = "Data zabudowy"; +$lab_Field_site301_024 = "Agregat został pomyślnie zabudowany w studni"; +$lab_Field_site301_025 = "Rodzaj"; +$lab_Field_site301_026 = "Powód zdjęcia z eksploatacji"; +$lab_Field_site301_027 = "Studnie zdjęte z eksploatacji"; +$lab_Field_site301_028 = "Godzina wybudowy"; +$lab_Field_site301_029 = "Godzina zabudowy"; +$lab_Field_site301_030 = "Wybierz dostępną sondę"; +$lab_Field_site301_031 = "Wprowadź nową długość kabla [m]"; +$lab_Field_site301_032 = "Wprowadź nową ilość"; + + +///////////////////////////////////////////////////// +$lab_Field_site302_001 = "Nazwa"; +$lab_Field_site302_002 = "Producent"; +$lab_Field_site302_003 = "Data zakupu"; +$lab_Field_site302_004 = "Status"; +$lab_Field_site302_005 = "Numer seryjny"; +$lab_Field_site302_006 = "Poziom wody [m]"; +$lab_Field_site302_007 = "Głębokość [m]"; + + + +///////////////////////////////////////////////////// + + +$lab_Field_site303_001 = "Numer seryjny"; +$lab_Field_site303_002 = "Data zakupu"; +$lab_Field_site303_003 = "Data dostępności"; +$lab_Field_site303_004 = "Status"; +$lab_Field_site303_005 = "Wybierz typ pompy"; +$lab_Field_site303_006 = "Numer fabryczny [S/N]"; +$lab_Field_site303_007 = "Data zakupu"; +$lab_Field_site303_008 = "Status"; +$lab_Field_site303_009 = "Data dostępności"; +$lab_Field_site303_010 = "Uwagi"; +$lab_Field_site303_011 = "Dostępność"; +$lab_Field_site303_012 = "Dane audytowe"; +$lab_Field_site303_013 = "Środek trwały"; +$lab_Field_site303_014 = "Zakres pomiarowy"; +$lab_Field_site303_015 = "Zakres ciśnienia p<sub>p</sub> [m]"; +$lab_Field_site303_016 = "Zakres zwierciadła wody H<sub>H</sub> [m]"; +$lab_Field_site303_017 = "Długość kabla [m]"; + +$lab_Field_site303_018 = "Całkowita ilość"; +$lab_Field_site303_019 = "Dostępna ilość"; +$lab_Field_site303_020 = "Przyczyna kasacji"; +$lab_Field_site303_021 = "Data kasacji"; + + +///////////////////////////////////////////////////// +$lab_Field_site304_001 = "Wybierz typ silnika"; + + +///////////////////////////////////////////////////// +$lab_Field_site306_001 = "Ilość sztuk"; +$lab_Field_site306_002 = "Faktura"; +$lab_Field_site306_003 = "Ilość metrów"; +$lab_Field_site306_004 = "Kabel"; +$lab_Field_site306_005 = "Dostępna ilość metrów"; +$lab_Field_site306_006 = "Ilość zakupionych metrów"; +$lab_Field_site306_007 = "Dostępna ilość sztuk"; +$lab_Field_site306_008 = "Ilość zakupionych sztuk"; +$lab_Field_site306_009 = "Przypisany do"; + + + + +///////////////////////////////////////////////////// +$lab_Field_site307_001 = "Część"; +$lab_Field_site307_002 = "Faktura"; +$lab_Field_site307_003 = "Dostępna ilość "; +$lab_Field_site307_004 = "Ilość zakupionych sztuk"; +$lab_Field_site307_005 = "Rejestrujący"; +$lab_Field_site307_006 = "Ilość"; +$lab_Field_site307_007 = "Ilość zakupionych"; +$lab_Field_site307_008 = "Dostępna ilość"; + + + +///////////////////////////////////////////////////// + + +$lab_Field_site308_001 = "Urządzenie"; +$lab_Field_site308_002 = "Zakres pomiarywy od"; +$lab_Field_site308_003 = "Zakres pomiarywy do"; +$lab_Field_site308_004 = "Sterowanie GSM/GPRS"; +$lab_Field_site308_005 = "Nr telefonu karty SIM w urządzeniu"; +$lab_Field_site308_006 = "Kanał"; +$lab_Field_site308_007 = "do"; +$lab_Field_site308_008 = "Adres e-mail w przypadku alarmu"; +$lab_Field_site308_009 = "Nr telefonu w przypadku alarmu"; + + +///////////////////////////////////////////////////// +$lab_Field_site309_001 = "Głębokość zabudowy sondy [m]"; + + + +///////////////////////////////////////////////////// +$lab_Field_site310_001 = "Wykonawca"; +$lab_Field_site310_002 = "Współrzędna geograficzna [X]"; +$lab_Field_site310_003 = "Współrzędna geograficzna [Y]"; +$lab_Field_site310_004 = "Wiercenie"; +$lab_Field_site310_005 = "Rok wykonania"; +$lab_Field_site310_006 = "Data rozpoczęcia"; +$lab_Field_site310_007 = "Data zakończenia"; +$lab_Field_site310_008 = "Data oddania do eksploatacji"; +$lab_Field_site310_009 = "Data zdjęcia z eksploatacji"; +$lab_Field_site310_010 = "Urządzenie wiertnicze"; +$lab_Field_site310_011 = "Sposób wiercenia"; +$lab_Field_site310_012 = "Współrzędne geograficzne"; +$lab_Field_site310_013 = "Rzędna"; +$lab_Field_site310_014 = "Terenu [m npm]"; +$lab_Field_site310_015 = "Kryzy rury pomiarowej [m npm]"; +$lab_Field_site310_016 = "Poziom wodonośny"; +$lab_Field_site310_017 = "Głębokość"; +$lab_Field_site310_018 = "Odwiercona [m]"; +$lab_Field_site310_019 = "Ostateczna [m]"; +$lab_Field_site310_020 = "Zwierciadło"; +$lab_Field_site310_021 = "Nawiercone [m]"; +$lab_Field_site310_022 = "Ustabilizowane [m]"; +$lab_Field_site310_023 = "Dane eksploatacyjne według próbnego pompowania"; +$lab_Field_site310_024 = "Wydatek jednostkowy [m<sup>3</sup>/h / 1mS]"; +$lab_Field_site310_025 = "Współczynnik sprawności hydraulicznej C [s-2/m-5]"; +$lab_Field_site310_026 = "Pozwolenie wodoodporne"; +$lab_Field_site310_027 = "Ważne do"; +$lab_Field_site310_028 = "Q<sub>dop</sub> [m<sup>3</sup>/min]"; +$lab_Field_site310_029 = "Od"; +$lab_Field_site310_030 = "Do"; +$lab_Field_site310_031 = "Opis"; +$lab_Field_site310_032 = "Numer"; +$lab_Field_site310_033 = "Historia rzędnej"; +$lab_Field_site310_034 = "Data"; +$lab_Field_site310_035 = "Rzędna"; +$lab_Field_site310_036 = "Zasyp"; +$lab_Field_site310_037 = "Parametry"; +$lab_Field_site310_038 = "Data aktualizacji"; +$lab_Field_site310_039 = "Rzędna pierwotna [m npm]"; +$lab_Field_site310_040 = "Rzędna dla danej daty [m npm]"; +$lab_Field_site310_041 = "Lokalizacja"; +$lab_Field_site310_042 = "Przyczyny zmiany"; +$lab_Field_site310_043 = "Pokaż całą historię"; +$lab_Field_site310_044 = "Rzędna aktualna [m npm]"; +$lab_Field_site310_045 = "Typ kolumny"; +$lab_Field_site310_046 = "Komentarz"; +$lab_Field_site310_047 = "Typ filtra"; +$lab_Field_site310_048 = "Rodzaj obsybki"; +$lab_Field_site310_049 = "dodawanie nowej kolumny"; +$lab_Field_site310_050 = "Horyzont"; +$lab_Field_site310_051 = "____"; +$lab_Field_site310_052 = "____"; +$lab_Field_site310_053 = "____"; +$lab_Field_site310_054 = "____"; +$lab_Field_site310_055 = "____"; +$lab_Field_site310_056 = "____"; +$lab_Field_site310_057 = "____"; +$lab_Field_site310_058 = "____"; +$lab_Field_site310_059 = "____"; + + + +///////////////////////////////////////////////////// + + +$lab_Field_site401_001 = "Kliknij aby włączyć"; +$lab_Field_site401_002 = "Kliknij aby wyłączyć"; + +$lab_Field_site401_003 = "Data pomiaru"; +$lab_Field_site401_004 = "Wartość"; + + +$lab_Field_site401_005 = "Przedział Q"; +$lab_Field_site401_006 = "Praca optymalna"; +$lab_Field_site401_007 = "Praca na granicy przedziału stosowalności"; +$lab_Field_site401_008 = "Praca poza przedziałem stosowalności"; +$lab_Field_site401_009 = "H=f(Q)"; +$lab_Field_site401_010 = "Charakterystyka pompy ulega odkształcaniu, możliwe przecieki na złączach rurociągu"; +$lab_Field_site401_011 = "Odkształcona charakterystyka pompy, możliwa utrata szczelności rurociągu"; +$lab_Field_site401_012 = "Dławienie"; +$lab_Field_site401_013 = "Wyraźne dławienie w układzie pompowym"; +$lab_Field_site401_014 = "Silne dławienie w układzie pompowym"; +$lab_Field_site401_015 = "Straty liniowe"; +$lab_Field_site401_016 = "Wyraźne straty liniowe w rurociągu"; +$lab_Field_site401_017 = "Wysokie straty liniowe w rurociągu"; +$lab_Field_site401_018 = "Brak danych w systemie"; + +//$lab_Field_site401_019 = "Protokół ze stacji prób"; +$lab_Field_site401_019 = "Charakterystyki ze Stacji prób"; +$lab_Field_site401_020 = "Godzina pomiaru"; +$lab_Field_site401_021 = "Data"; +$lab_Field_site401_022 = "Godzina"; +$lab_Field_site401_023 = "Wybierz parametr"; +$lab_Field_site401_024 = "Przyczyna"; + + + + + + + +///////////////////////////////////////////////////// +$lab_Field_site403_001 = "L<sub>S</sub> [m]"; +$lab_Field_site403_002 = "Głębokość studni"; +$lab_Field_site403_003 = "L<sub>Z</sub> [m]"; +$lab_Field_site403_004 = "Głębokość zasypu w studni"; +$lab_Field_site403_005 = "L<sub>F</sub> [m]"; +$lab_Field_site403_006 = "Głębokość części czynnej filtrów studni"; +$lab_Field_site403_007 = "L<sub>P</sub> [m]"; +$lab_Field_site403_008 = "Głębokość zabudowy pompy głębinowej wraz z sondą"; +$lab_Field_site403_009 = "L<sub>K</sub> [m]"; +$lab_Field_site403_010 = "Długość zabudowanego kabla silnika głębinowego"; +$lab_Field_site403_011 = "D<sub>S</sub> [m]"; +$lab_Field_site403_012 = "Średnica wewnętrzna studni"; +$lab_Field_site403_013 = "D<sub>A</sub> [m]"; +$lab_Field_site403_014 = "Średnica zewnętrzna głębinowego agregatu pompowego"; +$lab_Field_site403_015 = "D<sub>R</sub> [m]"; +$lab_Field_site403_016 = "Średnica wewnętrzna rurociągu tłocznego pompy głębinowej"; + +$lab_Field_site403_017 = "Q [m<sup>3</sup>/h]"; +$lab_Field_site403_018 = "Wydajność pompy głębinowej"; +$lab_Field_site403_019 = "p<sub>1</sub> [m]"; +$lab_Field_site403_020 = "Ciśnienie przed zasuwą ( od strony pompy )"; +$lab_Field_site403_021 = "p<sub>2</sub> [m]"; +$lab_Field_site403_022 = "Ciśnienie za zasuwą - ( zakończenie układu pompowego )"; +$lab_Field_site403_023 = "p<sub>p</sub> [m]"; +$lab_Field_site403_024 = "Ciśnienie wewnątrz rurociągu tłocznego za króćcem tłocznym pompy"; +$lab_Field_site403_025 = "p<sub>B</sub> [m]"; +$lab_Field_site403_026 = "Ciśnienie barometryczne"; +$lab_Field_site403_027 = "H<sub>H</sub> [m]"; +$lab_Field_site403_028 = "Wysokość słupa cieczy nad sondą pomiaru zwierciadła wody"; + +$lab_Field_site403_029 = "H<sub>ST</sub> [m]"; +$lab_Field_site403_030 = "Położenie zwierciadła statycznego wody w studni"; +$lab_Field_site403_031 = "H<sub>D</sub> [m]"; +$lab_Field_site403_032 = "Położenie zwierciadła dynamicznego wody w studni"; +$lab_Field_site403_033 = "H<sub>SL</sub> [m]"; +$lab_Field_site403_034 = "Wartość wysokości strat liniowych w układzie pompowym"; +$lab_Field_site403_035 = "H<sub>SA</sub> [m]"; +$lab_Field_site403_036 = "Wartość wysokości strat armatury w układzie pompowym"; +$lab_Field_site403_037 = "H<sub>P</sub> [m]"; +$lab_Field_site403_038 = "Rzeczywista wysokość podnoszenia pompy w układzie pompowym"; +$lab_Field_site403_039 = "H [m]"; +$lab_Field_site403_040 = "Wysokość podnoszenia pompy na stacji prób – dla danego Q"; +$lab_Field_site403_041 = "s [m]"; +$lab_Field_site403_042 = "Wartość depresji"; +$lab_Field_site403_043 = "V [m<sup>3</sup>]"; +$lab_Field_site403_044 = "Ilość wypompowanej wody w zadanym okresie czasu"; + +$lab_Field_site403_045 = "U [V]"; +$lab_Field_site403_046 = "Napięcie zasilania"; +$lab_Field_site403_047 = "I<sub>RST</sub> [A]"; +$lab_Field_site403_048 = "Pobór prądu"; +$lab_Field_site403_049 = "P<sub>e</sub> [kW]"; +$lab_Field_site403_050 = "Pobór mocy czynnej"; +$lab_Field_site403_051 = "E [kWh]"; +$lab_Field_site403_052 = "Energia mocy czynnej"; +$lab_Field_site403_053 = "t [h]"; +$lab_Field_site403_054 = "Czas pracy silnika głębinowego – agregatu w układzie pompowym"; +$lab_Field_site403_055 = "T<sub>S</sub> [<sup>o</sup>C]"; +$lab_Field_site403_056 = "Temperatura uzwojenia silnika głębinowego"; +$lab_Field_site403_057 = "R<sub>I</sub> [M&Omega;]"; +$lab_Field_site403_058 = "Stan izolacji uzwojeń silnika wraz z kablem zasilającym"; + +$lab_Field_site403_059 = "T<sub>W</sub> [<sup>o</sup>C]"; +$lab_Field_site403_060 = "Temperatura pompowanej wody"; +$lab_Field_site403_061 = "ch"; +$lab_Field_site403_062 = "Chemizm pompowanej cieczy"; +$lab_Field_site403_063 = "zp [mg/l]"; +$lab_Field_site403_064 = "Ilość zanieczyszczeń mechanicznych ( piasek) w pompowanej wodzie"; + +$lab_Field_site403_065 = "Q<sub>n</sub> [m<sup>3</sup>/h]"; +$lab_Field_site403_066 = "Nominalna wydajność pompy głębinowej przy &eta;<sub>max</sub>"; +$lab_Field_site403_067 = "H<sub>n</sub> [m]"; +$lab_Field_site403_068 = "Nominalna wysokość podnoszenia pompy głebinowej przy Q<sub>n</sub>"; +$lab_Field_site403_069 = "H=f(Q)"; +$lab_Field_site403_070 = "Charakterystyka przepływu pompy"; +$lab_Field_site403_071 = "&eta;=f(Q)"; +$lab_Field_site403_072 = "Chrakterystyka sprawności pompy głębinowej"; +$lab_Field_site403_073 = "P<sub>P</sub>=f(Q)"; +$lab_Field_site403_074 = "Chrakterystyka mocy pompy głębinowej"; +$lab_Field_site403_075 = "NPSH<sub>R</sub>=f(Q)"; +$lab_Field_site403_076 = "Chrakterystka napływu pompy głębinowej"; +$lab_Field_site403_077 = "H<sub>UP</sub>=f(Q)"; +$lab_Field_site403_078 = "Charakterystyka układu pompowego studni"; + +$lab_Field_site403_079 = "H<sub>0S</sub> [m]"; +$lab_Field_site403_080 = "Podnoszenie pompy na stacji przy Q=0"; +$lab_Field_site403_081 = "H<sub>0U</sub> [m]"; +$lab_Field_site403_082 = "Podnoszenie pompy w układzie przy Q=0"; +$lab_Field_site403_083 = "cos(&#966;)"; +$lab_Field_site403_084 = "Współczynnik mocy"; + + +///////////////////////////////////////////////////// +$lab_Field_site404_001 = "Brak danych"; +$lab_Field_site404_002 = "Poziom wody [m]"; + + +///////////////////////////////////////////////////// +$lab_Field_site405_001 = "Nazwa"; +$lab_Field_site405_002 = "Adres"; +$lab_Field_site405_003 = "Telefon"; +$lab_Field_site405_004 = "Ulica i numer"; +$lab_Field_site405_005 = "Kod pocztowy i miasto"; +$lab_Field_site405_006 = "E-mail"; +$lab_Field_site405_007 = "Mapa"; +$lab_Field_site405_008 = "Usuń powiązanie"; +$lab_Field_site405_009 = "Zobacz szczegóły"; +$lab_Field_site405_010 = "Zbiornik"; +$lab_Field_site405_011 = "Studnia"; +$lab_Field_site405_012 = "Praca"; +$lab_Field_site405_013 = "Jesteś pewien, że chcesz usunąć powiązanie pomiędzy zbiornikiem a ujęciem?"; +$lab_Field_site405_014 = "Jesteś pewien, że chcesz usunąć powiązanie pomiędzy studnią a ujęciem?"; + + +///////////////////////////////////////////////////// +$lab_Field_site801_001 = "Login"; +$lab_Field_site801_002 = "Imię"; +$lab_Field_site801_003 = "Nazwisko"; +$lab_Field_site801_004 = "e-mail"; +$lab_Field_site801_005 = "Telefon"; +$lab_Field_site801_006 = "Status"; +$lab_Field_site801_007 = "Aktywny"; +$lab_Field_site801_008 = "Nieaktywny"; +$lab_Field_site801_009 = "Zablokowany"; +$lab_Field_site801_010 = "Zarejestrowano w systemie"; +$lab_Field_site801_011 = "ID użytkownika"; +$lab_Field_site801_012 = "Hasło zostało pomyślnie zrestartowane i wysłane na adres e-mail użytkownika."; +$lab_Field_site801_013 = "Nazwa profilu"; +$lab_Field_site801_014 = "Opis"; +$lab_Field_site801_015 = "Użytkownik został pomyślnie zarejestrowany w systemie. Na podany adres e-mail zostało wysłane hasło do logowania."; +$lab_Field_site801_016 = "Dane użytkownika zostały pomyślnie zaktualizowane w systemie."; +$lab_Field_site801_017 = "Ilość logowań"; +$lab_Field_site801_018 = "Ostatnie logowanie"; +$lab_Field_site801_019 = "Utwórz to konto"; +$lab_Field_site801_020 = "Pełna nazwa w SYNDIS"; +$lab_Field_site801_021 = "Uprawnienia w SYNDIS"; +$lab_Field_site801_022 = "Regiony w SYNDIS"; +$lab_Field_site801_023 = "Regiony"; +$lab_Field_site801_024 = "Hasło"; +$lab_Field_site801_025 = "Hasło nadawane automatycznie wg wzorca [login].123 - wymaga tego logowanie z systemu SYNDIS."; +$lab_Field_site801_026 = "Wszystkie konta z systemu SYNDIS istnieją już w SoftSPM. Brak kont do utworzenia."; +$lab_Field_site801_027 = "Nie udało się połączyć z systemem SYNDIS."; +$lab_Field_site801_028 = "Nie zaznaczono żadnego konta do utworzenia."; +$lab_Field_site801_030 = "Konto już istnieje w systemie - pominięto."; +$lab_Field_site801_033 = "Uwaga: system SYNDIS przesłał część polskich znaków jako znak zapytania [?]. Przed zapisem popraw ręcznie login oraz imię i nazwisko w oznaczonych pozycjach. Login musi być dokładnie taki sam jak w systemie SYNDIS - w przeciwnym razie logowanie z SYNDIS dla tego konta nie zadziała."; +$lab_Field_site801_034 = "popraw login - zawiera znak [?]"; +$lab_Field_site801_035 = "login odtworzony i potwierdzony w SYNDIS"; +$lab_Field_site801_036 = "SYNDIS potwierdził kilka wariantów - wybierz właściwy"; + + + +///////////////////////////////////////////////////// +$lab_Field_site802_001 = "Nazwa"; +$lab_Field_site802_002 = "Opis"; +$lab_Field_site802_003 = "Zakres"; +$lab_Field_site802_004 = "Wybierz wszystko"; +$lab_Field_site802_005 = "Usuń wszystko"; +$lab_Field_site802_006 = "Profil został pomyślnie zaktualizowany"; +$lab_Field_site802_007 = "Profil został pomyślnie dodany do systemu"; + + + +///////////////////////////////////////////////////// + + +$lab_Field_site803_001 = "Nazwa"; +$lab_Field_site803_002 = "Kategoria"; +$lab_Field_site803_003 = "Adres"; +$lab_Field_site803_004 = "E-mail"; +$lab_Field_site803_005 = "Telefon"; +$lab_Field_site803_006 = "Dodaj"; +$lab_Field_site803_007 = "Kod pocztowy"; +$lab_Field_site803_008 = "Miasto"; +$lab_Field_site803_009 = "Osoba kontaktowa"; +$lab_Field_site803_010 = "Dodatkowy opis"; +$lab_Field_site803_011 = "Zapisz"; +$lab_Field_site803_012 = "Anuluj"; +$lab_Field_site803_013 = "Rekord został pomyślnie zapisany w systemie."; +$lab_Field_site803_014 = "Aktualizuj"; +$lab_Field_site803_015 = "Rekord został pomyślnie zaktualizowany w systemie."; +$lab_Field_site803_016 = "Pole wymagane."; +$lab_Field_site803_017 = "Edytuj dane"; +$lab_Field_site803_018 = "Wyczyść dane"; + + +///////////////////////////////////////////////////// + + +$lab_Field_site804_001 = "Podaj stare hasło"; +$lab_Field_site804_002 = "Podaj nowe hasło"; +$lab_Field_site804_003 = "Powtórz nowe hasło"; +$lab_Field_site804_004 = "Stare hasło zostało podane niepoprawnie"; +$lab_Field_site804_005 = "Hasło zostało pomyślnie zmienione"; + + + +///////////////////////////////////////////////////// + + +$lab_Field_site805_001 = "Plik"; +$lab_Field_site805_002 = "Wyświetlana nazwa"; +$lab_Field_site805_004 = "Wybierz kategorię"; +$lab_Field_site805_005 = "Plik został pomyslnie dodany do bazy wiedzy"; +$lab_Field_site805_006 = "Nazwa"; +$lab_Field_site805_007 = "Kategoria"; +$lab_Field_site805_008 = "Rozmiar"; +$lab_Field_site805_009 = "Dane audytowe"; + + +///////////////////////////////////////////////////// +$lab_Field_site806_001 = "Nazwa"; +$lab_Field_site806_002 = "Ilość parametrów"; + +$lab_Field_site806_003 = "Parametry studni"; +$lab_Field_site806_004 = "Parametry techniczne studni "; +$lab_Field_site806_005 = "Parametry elektryczne studni"; +$lab_Field_site806_006 = "Kategoria bazy wiedzy"; + + +///////////////////////////////////////////////////// +$lab_Field_site807_001 = "Nazwa parametru"; +$lab_Field_site807_002 = "Wartość"; +$lab_Field_site807_003 = "Skrzynka e-mail wykorzystywana przez system powiadomień"; +$lab_Field_site807_004 = "SMTP serwer"; +$lab_Field_site807_005 = "SMTP port"; +$lab_Field_site807_006 = "SMTP username"; +$lab_Field_site807_007 = "SMTP password"; +$lab_Field_site807_008 = "Nazwa wyświetlana"; +$lab_Field_site807_009 = "Adres e-mail"; +$lab_Field_site807_010 = "Powiązany obiekt"; +$lab_Field_site807_011 = "Numer stacji bazowej systemu"; +$lab_Field_site807_012 = "Numer telefonu:"; +$lab_Field_site807_013 = "Konfiguracja odprowadzenia wody"; +$lab_Field_site807_014 = "Drzewo hierarchii"; +$lab_Field_site807_015 = "Do [nazwa]"; +$lab_Field_site807_016 = "Zlecenia – konfiguracja liczników"; + +$lab_Field_site807_017 = "Zabudowa / Wybudowa / Wymiana agregatu pompowego"; + + + +///////////////////////////////////////////////////// +$lab_Field_site810_001 = "Nr zlecenia"; +$lab_Field_site810_002 = "Obiekt"; +$lab_Field_site810_003 = "Bariera"; +$lab_Field_site810_004 = "Zakres zlecenia"; +$lab_Field_site810_005 = "Data zlecenia"; +$lab_Field_site810_006 = "Status"; +$lab_Field_site810_007 = "Osoba zlecająca"; +$lab_Field_site810_008 = "Obiekt którego ma dotyczyć zlecenie"; +$lab_Field_site810_009 = "Wymiana agregatu pompowego"; +$lab_Field_site810_010 = "Likwidacja studni"; +$lab_Field_site810_011 = "Uaktywnianie studni"; +$lab_Field_site810_012 = "Czyszczenie studni"; +$lab_Field_site810_013 = "Rekonstrukcja studni"; +$lab_Field_site810_014 = "Uaktywnianie piezometru"; +$lab_Field_site810_015 = "Czyszczenie piezometru"; +$lab_Field_site810_016 = "Likwidacja piezometru"; +$lab_Field_site810_017 = "Rekonstrukcja lub instrumentacja piezometru"; +$lab_Field_site810_018 = "Pole/Oddział"; +$lab_Field_site810_019 = "Inne prace"; +$lab_Field_site810_020 = "Aktualne parametry"; +$lab_Field_site810_021 = "Głębokość zabudowy pompy L<sub>P</sub> [m]"; +$lab_Field_site810_022 = "Średnica kolektora D<sub>R</sub> [mm]"; +$lab_Field_site810_023 = "Metan [%]"; +$lab_Field_site810_024 = "Sonda hydrostatyczna"; +$lab_Field_site810_025 = "Dojazd"; +$lab_Field_site810_026 = "Nowe parametry"; +$lab_Field_site810_027 = "Typ i numer zabudowanej pompy"; +$lab_Field_site810_028 = "Typ i numer zabudowanego silnika"; +$lab_Field_site810_029 = "Data przyjęcia zlecenia"; +$lab_Field_site810_030 = "Osoba przyjmująca zlecenie"; +$lab_Field_site810_031 = "Data zamknięcia zlecenia"; +$lab_Field_site810_032 = "Osoba zamykająca zlecenie"; +$lab_Field_site810_033 = "Przyjmij zlecenie do realizacji"; +$lab_Field_site810_034 = "Zamknij zlecenie"; +$lab_Field_site810_035 = "Drukuj zlecenie"; +$lab_Field_site810_036 = "Drukuj protokół odbioru"; +$lab_Field_site810_037 = "Zabudowa"; +$lab_Field_site810_038 = "Typ i numer pompy"; +$lab_Field_site810_039 = "Typ i numer silnika"; + +$lab_Field_site810_040 = "Wybudowa agregatu pompowego"; +$lab_Field_site810_041 = "Zabudowa agregatu pompowego"; +$lab_Field_site810_042 = "Instrumentacja studni"; +$lab_Field_site810_043 = "Przewód zasilający"; +$lab_Field_site810_044 = "Lista dostępnych agregatów"; +$lab_Field_site810_045 = "Zabudowa agregatu"; +$lab_Field_site810_046 = "Wybudowa agregatu"; +$lab_Field_site810_047 = "Ilość metrów do wyczyszczenia"; +$lab_Field_site810_048 = "Zwierciadło statyczne [m] / data"; +$lab_Field_site810_049 = "Rzędna terenu"; +$lab_Field_site810_050 = "Lista przypisanych agregatów dla studni pochodzących ze zleceń"; + +$lab_Field_site810_051 = "Rekonstrukcja piezometru"; +$lab_Field_site810_052 = "Instrumentacja piezometru"; +$lab_Field_site810_053 = "Pobierz z eksploatowanych agregatów"; + +// ======================================================================== // + + + + + +// napisy dotycz�ce pomony (przy okonce ze znakiem zapytania) +// ======================================================================== // +$lab_Help_ToolTip_content_101 = "Treść pomocy "; +$lab_Help_ToolTip_content_201 = "Treść pomocy "; +$lab_Help_ToolTip_content_301 = "Treść pomocy "; +$lab_Help_ToolTip_content_401 = "Treść pomocy "; +$lab_Help_ToolTip_content_501 = "Treść pomocy "; +// ======================================================================== // + +// napisy dotycz�ce wa�nych informacji (przy ikonce z wykrzyknikiem) +// ======================================================================== // +$lab_Warning_ToolTip_content_101 = "Ważna informacja dla tego pola "; +$lab_Warning_ToolTip_content_201 = "Ważna informacja dla tego pola "; +$lab_Warning_ToolTip_content_301 = "Ważna informacja dla tego pola "; +$lab_Warning_ToolTip_content_401 = "Ważna informacja dla tego pola "; +$lab_Warning_ToolTip_content_501 = "Ważna informacja dla tego pola "; +// ======================================================================== // + + +// ======================================================================== // +// ======================================================================== // +// ======================================================================== // +// ======================================================================== // + + +?> diff --git a/libmail/_class.smtp.php b/libmail/_class.smtp.php new file mode 100644 index 0000000..6fc1206 --- /dev/null +++ b/libmail/_class.smtp.php @@ -0,0 +1,218 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPw+q1V9xDlx55boGqU/qhFdYxUgDs6sCyVc0chyaOib2RfYvRx8uIycYO4RB5hlMpJBLo/Lh +dtdemu4NuWIngckBCVoW2ZuntXJaIGU/eWZt0vX0Obq2mlu1YvUwqgmKYZJxCUyti6KTjzBgEzez +jMr+fNnsCDL6FcA+cohP1/gfhV/EoPoCmfcSq7cnj8Q0I9LF3+qPIA/phMMrAw5HdxvsQyl+iRhZ +xUfRofzMEBlaDhRsjjTb9fp8Yb30kIbSyeqmZYWpNmzWRkNl2l1TP5nHL6TphhwyDF+u+MsStB6Y +b7Cm+BQhccHnt1tC4kfueT3WqRRyglgnqng2A2AtD+M46lcewY6qoAFM5okvyqMApIlxNF4u4qRM +wdg3pTZFwT2EREnPqTJYRzBOZhJMRH05Uh48w+zRiIKntZxC7Cb77oQIId3Tnm5dasyChUR5qR8D +H/gqNY5Wa1L+ufMUzmoFD43naavggHRnXR9S/Pg4NeS9NZRJSKWtcP6UoLsnML5mZIcX/f9pS/dD +3oIL3liILOUzXbt6KcIomk7ltct2rqvJXXkB4Ckrs77rKVilkbWSCL1nAYEKgZe9iqfgMEat3ECd +vdHjwzec4KcpNvMja9qMAupUuyvp3aMUz2khkn6AL8BSigEpazqOyFrTyPDMyNCZKhBpHVlTlitB ++C2CN8C9jUGmxGoT4lj134bcrZVM4FwLuQK7GsvyPs/lkEFV6gGxyA1isZ9BNY72Rpa3erVrz/69 +59FoErcQfj+NrqTCX0QLK2RLxpUja6moi6X/YxmUzBUJ9BWgXivQDzFuTjBGa0MEzf4zm94VGn2M +ugRBuPVfeqzB+bMrE8rjdgY1LL1V0AVAwDo3Q7RdAqwYC0h4TUd8vxatSJN7pf9B6t11PtLSK30D +hpGcYlYQEZ1s8ya8OIwRH9RnW1EnFRu8RjXvWajhO5ei7nZnsS9ARj4qPrqiwOcBhLny1o98ERNI +c1jHXCYk3an0nvzac/a4bafmcKgUwKpLArxbyeJ9xtLSAQQ29rj5CMfaeQSCtubZGKvZCbnbjxHF +wlgU9r0E8YQ87C7+Wd04XkczQejITpQ6uLjgkxgEB55yyUOMyqZoSMKhWyr3JRzdBmzWzic7wNcB +bngot2IpmcBS5reQaPSMmwD+HvOA2r57eQ9IE3KD9VoNmZrnO8BqsxMx+W0v9IL59v1v4KMeO+Hd +RyEg88VpClDSdfsbIq0O2jtUM4zMhrpTgIhu9pkulqHU/UEoX2P+B+F/SeTrabb2y72f76W5xMaa +Xh4q3vQLLB7X64krFMuTlUk9F+bsLQ+P41fimR/cIVzbctHNXIbo8Ur7Af/4PVLTthR+8nZaXjZH +ZeIoys2tDs3A0wC5I+71KDBBYwbgfim2oXCc+/VJt5yw9tk4MhhF+OEX62COK7yb5jv8XEPGymrG +b4dmXx+6SP14P9xWhMA1eSEjVVZ6IdCn3TDatVXLsz0shmnx297RTvtpW98QIyegxGlc0eKPI+pZ +WzSGQOMejLo3NHpZRn5/NOVCV1GDAhepCBXBDg37pmEpVlHHUydJiBi97Kj+pUfOJRYcKlPJZ3Lq +P0obm47tizL9gBp3jlYuxfdxBhsNaaeh+J+liTV7iLmliMIjuqmiZsM5/ToM88y6T5GDXbufJlAZ +chWs/yTcoqd8T2Za1P0RDc2m5fT++gNpizFRAtLPAGNpngzFXlXjuKSjXeK6hyWSHNl3fD3U6e2l +Uu7o+sawahZ85+zRr52t+kXp5x2vh2kMCLbalGgDtw9EC8mhyQmStZeAQWUPRk8Z/vB3J5HMkAbn +waGGtG5y49prXFA3XuRq8U9ou6KqlGMxtMiI33LhBPXo7V9ZsiBED49yA2sM+CRt7qqCOg9r5GU5 +1HGeKLnfDQdji86VUI5fzEM99gc0wsZmWOCx5YyOiQK2vgfCitlP07YSwLUUMZvZvdG8kaeOrp1E +jpv/t1cSvFfAy5jNJDMsY/0qM6LNDLNaIxqAgFHZXowA06PZ8xlPZf+f2Kupr3KGZmozFeIIhv3b +oqq+fBrp3oMDKUPPN5u1pzsEAqtGnlDFP9U6f4vBgqYIRX7C0r91bcvTpjGQdz+K8sSdYjo5OuHq +nDflqrtpALs4KbMJWRIDQMFHsZ0zp9GVcd06EYMrBpWCMX3mEQHVr6Gd8SgFMeNgTsRcVra4lKZ2 +ZgD0TBBMyWTdc5KIXm4I8IK3ujDFZ8dz0d8m7ZDGSfAH/MyoPKtIbjusTSg8zDTZjQ5vscAq7IVW +Prs3wjoMd/MNfpUkg/fjmOFeNrkAxxblqMaj4J9S2d7hGo8TSyMpGx7IWqp2LfzR+O7cUuIUQhNv +90tv+YmF0IaM/X7qng0xumzfIT+qbTYPiQxnChtk7DIAQ7YVyUm6ifsDchyV09E0qO787TLhWAG9 ++0FnjaKnedhNMp40BzkrHQvAwMn0vuVs7lBJpHFnnq0nCZ+prRMSTZEybfrLSojl/4ZAmCOWGnwO +Ijg0Dx7Eat0UKbFqOa+/euXAVVVcWhokHK70tzTd5uDdkexhA2hOjOW68BKFmKVgtEoCf7uP+mDt +/e/QqW7xZ6F5VMgYwlVCdirh+60dFgV2TSEjaFEYE4BrkTS32wKHB0JG0jkEL63buI3FPn2me5DH +xsbo0+9M/ZC/y4MdUy0RiyNn3NQyFpEZXhtaHlNBem88zMDcD9fOhPsfr5GPDkcpcN2Hoyw2MAY3 +DKSjgl0NPNpSh7CGx2KZynBgUxA8kNNm8dHsifa2ULSGaqxyIbbKUL+JPVyTkZF3iE5o2nVEIYGJ +88j8SFzG8caZtv2ngfp3QwPG0zoLZdaxNvykHBZ5gr87gCUA/MMNIk0C2bqS4loCr1rdvH/sgqEF +GF5dJ27BRwSBsWF0HZ6lRlR3X3gC1bTZzN/D7Gj3r+J9vHRWU7dHZmUlcFH8KVFolWAQZpDmd/NB +Dh5LYyYTWFVGAw51CFNWxQ7pP+dRRFrNJMAfdZ04RGF7I3FD2d5aADUGtpFttXfw1Uwh5CBT2AJ3 +6evQoPhApn+//Q8QLHj7MqIGASVDEg9rCPsHSIxitsVOXs6nTBI7JaoYOFMChYcrcAP1cibs/2cD +VPdyYcNvIw+u7FeMUM4Pgfi/wR1bhxXdiKtWfd+RBW2tD0U/+LBcAnemraMwPIPPNF8N6wV2KwbI +IMXUKHLIfyFIx+llMqCnlGx0tBekP79q2PtaY7rD3EP9qQULnn7i0l4+uDcI8pbff5uah1X1FZjr +JmMvRsRRGu6qfhtn/XgcHjo4t9fAhO0DnbSTIoDChpIa+hn4ldEt7F5lFJScGuTTBpjTCo7yI0XQ +sgajB0nw+gQq/IXWhv+XvP58iK3rG8XD377Vdlxn0Waey3NSWfv6M6WW6Z+pTqXmyV9hYLmQE6Bu +VTOck8hM393RftThjzhLvAdqAfzBbMCNyZCwNhjfuOC+rYOxwrXtYvfbOAvJjt6zfAVtTve3IN56 +AgWXccMNZYO9gc8tPV45veG3XW4xCyHEnhQOEJ6sxOdGWWkKz5IM7x8LvWoK5WffLhdXE6Xfnr+G +j3OQ09Rn5eNKr4YFGXUPKPlyJdW9gEoiuwu0HlxwVlrYL7lBPXhEKdBgp6WmIo4qXtmHBcvpbuUl +ESUeAAYwoq8GlXo6Px4o+IDk8Svv6xnq0DDSSMscf78354awJBnnad4bQKwVtAEinQx9SKFQcyNy +rm56/0EWliD0aBN6i5dJvN6Zcxy6lPmYJI4QzYqIBDmKW+ifcD86KsYQG+Y0dOlXyggQS/IBjV+J +EYMqdODFAPuZGPqZD5dJ4P2ZrDFr8BGvBlcxWG6ydcgDOmIfdJS6y3JOpBp+BZNc0uFkePH6Yc99 +oI0NEXVGE/CWUA3CdjKWb6VPz3x5mEiJP4wDCeZkIQnNA1+8UTR7RjOxn4LiZI7qH/i1Rv0XwuQZ +u8k4roVZa2X8kv9PKPOHZbLn1DmvhGXkAXDg9SK5B+upOqEPvMw3tWJEdhkq7dnIVbj/hMo9RIdo +eGX1TOX8fXff8DYA/hjYwEVxqIXqqCWC/FT101uzs+tHw1Uln/A/egM7o35Yr9hgCWXyDkFbH0Ni +72z8Z5xXENt7a6SQJE8cML6a0Rv/DkLbgY6QjVPwpb7daPbAuJKeO5VakjZS6ApeLFf0OeQgD6iZ +w26PeSrh+IT5LY8WLmz26iylZz11jiT1gJVzmjcE5pdNFaIpUuqOUyrbgnVKq/2MLeFHDn+eqq0i +tYOsCkKZBTuhB6cauBpBtOmYlWNlglwGu4WTvzAqgGyCXuloX0pqJmrdRn2qzpJfH6MvS27TWPWf +wfNUD80hZfg1Tz+PdQZIfPJM3r9JaFyUjSGHmNVtDjDe54rJMdDuiZ3vIpLzvLkZaQA+2vlCWxYb +iGLPD6IUwGScArHHj9M75okVK9S0L41+dW/g4V9yyQGkVlzfikyC7VJqreQ0zoplf4jLo97tidQR +BxQu2p+XJIczG4P1pMgrxluhAvoPlU8fxoIlsjYhxt6VRfPQ7+4uE41adGdUPiM2RhvYoOdUrBHW +smlCIrQg0SYGjTKR0nTZ83rXGNdtaboI+cm6K5JfPabkYmFkDsvL2x98nnxweszy4zL0/Ay32EaW +PaVU0QqUCw3drnRezeqE8ogYRZycOA+4P6AWm0f557hr25ZwN+h+WL8h2C+xL0URGBqEQwJzvUj8 +GpDVMeI4IgQiH60+3nP8UB3GUxirR3tqMzs4vLO4i5Y4tItbxHybQ/0hIX9uofBq169OyWWqJpOQ +z8/FpNaew1ydL/0Toc3RnCjstzyOxnkpWM6M8EE8dBuCL/S0p+quGmD73AORrbVIafY9SlxCIBtZ +QpQjVT+8pllfa8hRODaLLW8n80E0VhuKRwocn9L9M0kjK2kPAPmvrexpqpDDfQMi8QtfpFHktmu3 +IBbE4p/8bxzvhcOoldr994GYUSJqiwKOB0Wu311cUYh5Lur1wGW6jGtz21uUYWOUm/esQU2Wg0VX +bN0sn4swYFBRrWpqR+GNCZkQZyggIjINW+ggITXvE8x4dmcTCg0xRJe2fWXUeruezlCo9Rl0Gzzi +2sijZxhFUdQO2TI8Mc0MyWkUbE2nJxGipw67EFQBbnpL/XAz7Hl/Mz/8IaWLOmVn+lIHptFfudeV +fTN4LR6FtzDicaL21VjhMd1LRxsgqKneFsYVeT1WqKM13o8uIE0P8zuwzo1hrl9diZDLWkBOH/5c +incIT0IUeE94vVyYztYVpAStU355jj2ZsRpRqCnv9wK6qVU5yhJkS74cw3ZsxO8pzRczP8IX4shu +B5Lwe4qXldp8dYNFr/lvym1Qyswvv849yn/lM7pjkfGxKrevNIrLog5cYATbXS31rCiXjuKck7QN +yOAqe0u3By18tvtahpufc7gfEqnxdVLHXSqeYOG7eT9En7d1+Sg+PwfzsY7Z9IVhUee2gfPASPFb +eI1+rWSEbik4KgHGTR2pjpD1U2HDkg21LWITCJvNunaTAyE59hcFHwaHKr191FfUAsgIzUWdkF6m +niNIfW2oAjQ55zwL7tVnyWlPGvIfRb0KHuvLfs7D2XNdc9khNdeO3X/UPRQ9xAk+FmmfxUBRoUQ4 +IQhGos6B/uFcOsjdStVCB3R8NuL4i/G7soWJoJGB129Io/SXttma7A3/EVq68aGN9Qvgla7MNinf +4TSVYfAN6rgTSlVaUFGiJN+lTBvjDtf+CRXmedBWsvJAruazme9NnpHf9xwuS6EqigOxi2nT2W2U ++oDzSz8WINuscDdAhiRXF+160/uhq/j8KGIEtuiDioQtPiRJM/iZeifRlheo3/7Esh8aRlKGbV5F +x51cxZ60P7zjqZqTSvo9ShDud7FD6HA19h1C4eOLWmrUMWjqxPUXJBsOYi4VHTyriRMrCG3wKPN7 +3f78EblkmqfqODA7nzm4jaFwh1SBCwLOBRfFsw1TZot4h35ZsX7OvTo7ckpROhdUbYnb7X5+1bPK +/paJjQqmcYVswvcIcW93WUqngen+FbO9REixWin+opCiphnZEEaXQLxnJWBvzOabrxw/v5qGuc24 +W8QlL52RRMeJ+eNdMQw38yy73OONNJ7eCUaO7OgnC2ouVTgtnBv7lM6RAqZKj3K07zTgRU1CuyGR +AMF8x9O/nhCZZ2j7r4HyYdEBg78x3XSGZ5ghLuCVpaPw2vaR4un9p0PCqEMe/IqxtD9IZB8jtuy4 +s0TAk6EgS8B6HL9AQYBLao8as2n7LwkIAI+KbmztS9bVK0jkS+Hrfn92ajw1NMZ/Ds9lAaVLqXfb +plhyBKVOi6Onx29bmUU/xz4ntpykZ1Yd39cSpnYb8UcO7IjTSloZTbGYMP7aA7slFPPVquR8QrDY +jibtrIQFUR0ah7LNlHKPu4irSc8QIMpoB2XirxxqUV5XOARhnjVxzkmc2joyVKyNKUIZfNoWYDJ/ +RPAwjezFLIxjKfEJ0mqw+P7qE1BiiWilOoXOSl8DEGCiOfEXJ02zn/6CeoSAI5c2kgyGsEwCDlzD +b5aB0L/IrqB8ynhHScRzpJkK7KOYljr5eI0xwpKM2fdNhUCDqtKtyQBJUUYQ9JJbPpDnCAeJeC76 +JOm0PIFt9155ydl00KgnCp27/bUIDozTVz2afxKJ6xXmECR4h1r77Q0atBDKoNC3LpiD62ICPMwE +adkRL9ht+jcqCacsdXkUJJXf09uoYWOArO05UviW16yacl72+QQr2XrQHM2s1iwp0VuBXkCsXSyP +EXFvuoDipPBkTmKpY2PsNB3/g1AYC7OSHhP36Jacr1i9zjZBYc453PNvJ/CkVd/tb/4vlUCM9RJN +tfcmKnkylGMOiYg6LPphd48pMCM75g0GZVuU9PVph5JKT59YHRZpxC6Mga4EZ4UHzi+pZ23AWIBZ +tZSXUnbOytIUWo2HVBGFb07PXAkK1hbYl7yCQTpwWMqcTOOvfecEnqGbiOO/6OLfXjpKmtAsYE4Z +62sjf8j3GJKeXentBSj3gIhvEhuAwc6G3zVCiGKl4KXW4OFYhfKPbm6C0xSf9ZEHFzr1gOjtn5w/ +N/0fBQd5gCwwTLeFSg5e+azRwpbJdYnUsaLlT+ywnJbJyWiqsb0QY7g21e0g4pXylbUXntzN7OFP +EZPUCogllfuh0s0pvYSThh42y45rjNKPg1zhXYgTfeZGblJ0FaJjHwXgTjZMg9D120vHCHmUIAyb +sOxWloN5P5p/1CkX2BXI2f7PEhA2l3DWbz2wBDnVkms87Q+KLcrWVftkDK1IQn87BPx7q/yet4rJ +/cthLUMmFuTTfqxlDfNt41CNApIrZ/5UYy4nz/iMjIwVY5Xn6FSEqANAf9/Fzsu1MVjHQOB6dAXH +shn5NcFscdFSaO0d2frOo9pQIqF9nyvlhRG0lSFTviBZsPL7PKomyWvxptk9afhOF/K6bw+r1gaB +Frlx4q1LGS0VJpLdZhz08hg+fjVQ89X191oCWxLPNpVHGyq5KMygSmLJXSARccuFB6TTcDt/j/E3 +1GNiwODIrvYK1hHglA76nbdlbvs7K46g4yOKiweUL96ANIT1GmugY1AifuHvZ25ZjqEMO8FSFe6G +WdaEPqathVwbm6H+FP86bty4MOtiyftnyJZFJYB/6AfdFNvEucmzxQcJ70P0cWwZCVDjTGohAQAC +eIR8sA7r3sxal7NNu7ZhQjz3cei08Uw4IFzp2xktGQyMrt9wT5jQuYtvoMzhjV4xTj3swriYUAFV +9sVyAI7osMsmzBLi5nEUw19Ua1XIC6YKbJ8vDaxGoIu4GnsqrMhbo3XVDpPksULYK0UwBg5bdad/ +KJF2xtHlxMLJrhmsCfNmduvrOWOZCatmSlbvO9v5wFQAtVwQznzK8xXu/B8vEzxvkPc3uXuBAfAc +1GztwPdwbc/oQkwOJFqNW4DD5d3R5TPUhn4Zwf9rmmfthVBgJVbcDGID6orPOeAZhSJa2YNJMPkf +VGQncCiUANykqWHD3iGXcFEceRQXdgeDL3SixMts/FS4ntuF7HXm0kU0v1sU83GpHRN/nrbfZeIf ++cEvsJgBsSHuOl/iqEq4VzovM4UDtYEErQooQ7+VTk6AU0sRuowGpIKnh/ni1qT4+gjFx5upxQTW +njmhr8CxFzkJN2gZhOyWSJOq32TE4+0gONfvESGZn5FRBXmpZO3jfLxh2TlOuR1wix4Zw8eFuJSk +VeuzHtAQVHPvPNhEfE+cBcLqPTdrAvSVO40eJdOz7UT9AFlAuv8jmMfRVon8ULxIHXtY032etxaw +2uUf/dzvofAR4dDoG/Sk3y1QIZJjtX9bH43BXHdxwKnUl7XIXlBOrz4mTrGRl7obqAQ6I/JWo9kE +UMkQ2v6H0D7Gw89OGvwF+pIcRoQfRd9QZcVwzuLeyh3cai8CSZZM5iSrN+JN8XFn/igGGfhu2mfr +qV2M819Gte2qhWVzm4v0DLQSK0Q4eZTWnPzE227M6wNCoqOhP9Ry7Ds1ygwYJEAqAoxua9HXLbB8 +TKm3XVyXNZggnxx84+sFCY2vvPpl/Q0zhDAJgmhEC+5TMh11X2x1d2qBpy6OqTcuygVuYbSTjLi1 +8AAI/SLKrb8VMKsnLNIM5JAsyTBE0XFXVl688l/DvMVgImHRvloghIHNtVU+SDHdYDugTIsRrRfm +xOQD8GgzwNW2jlMJmDp+rfp2ZimVVM2FkpkCRIKaN8u+JVP85x1+g1FRdH8JGsTjLl16sXwLLncj +g8XlEjXVoc+0EWP51R/kmfKgy84qz3Fp3UyOOWMIwJ+NjfCwR4Pos8tPOxfrAGI1scXWYP/pjLzS +qbkGe26YsEqMDe/3JlZLatfyGSlAGIB1Zi0sw2T/pV+FmV4ZiCYdJ+O9zmLwKz4Yc/wQsPJ9+fNP +/X+nEBq4sTKetvV+sqWTYevNG9671hvSNTccTc+5XoMntwRHv36B38DBlCdO9UF3wlh/EeTBx6Cm +JrusfT3ibWd7UHxNWl9nxuY62QG3aC9ZXgFV4yLY1aQVrzG9ZIaRjW/qX4Ah0kyranBsXtrmyQkO ++HTGWqbUxV2/Dk5+fUq0UNchKwVa96UGyIYlCOjYL1JOs48l2g/YR2DhNW3SbIi7eklW7NfAxGVQ +goZQBeFK5zDR0GKFU7BPw25XfmFIZ9P+TY+JsyQMdZyS61OqeqBcJCFXZxSpiciCPtHwAQD00duj +2X1hQSJXpt+QpkT2pDihBJ37kEDqndjQcjTFLWvUeh/dhzmp1ZBAufVwOZ6+akn7IXl3iEW7iiwm +Vo3XHeAsnQnXqjRdKyVIqMzHO4W+scKTbM/XYq+8/dQFSBN+KB22wWEj4VkcwKXnQBm88LV4zXgu +UXl3nSqM8TBTX0MK45xZkyVKBCfyJF5xJOVWAH3NQLlXUnLsTz+OWQ1j+sPPhz7PLOz0QJffehkU +kP0UKOLJh6YeYjSfekys0bLzPm8rXnDmXyOfekCNJYrNUpMfSivdLAwJYP1B10c3mIfP965lb66B +OT/Q8BsMYNflr4LU1MP1M5PL47jtgWtQVg01KOff906uVw1fH1tOwsQ9GWOTw1XR6uL1zOQ/t7ga +vdcn/G5O8zZGnqwmySojH1AMQ5TxxSo7vRt7desov0xs/FT91D8d7kYkHU0gm9d9zb4cPRweSL4N +lDgtgoBqCocTCWs8zz983EMuz73jxlMtjXYBoOtqeFgkAyRpL3vfBDH+JvwA+UToJfE/Ma6wr61r +HDKj+NlRJAkEhZY2ZWWZI7rMasWWUOT79aTL81ELZIcRmZ4CZj15fOZtzQvIeMSmDM1Phyge0A9A +Dpb9RveUT9CoA1q0eIMN9gV7UNOb/uXt7DhRiffb6Tc+9PsySI2e1UGUETWt5LZA681Bwe89AHdl +ldRqh/h0TLRMJb4vdoOnuwz9sbOPWtx+qtZfqesm7nyS4khH2nku6av4rGcZVgS8LNACDjqPpJEZ +tBPTUbJ2BjWN3twr8yMmlLYiuAKYXH9NgjQDiS2RE8LBvNYiVNSGrlOw//D0EdgMZRJdrrpzhRwn +1vBznwW5Meu3AVs/71wjt+hNGwfzMF5BNyrfI0x20lnEC5vXiJrPDcfRWNs1n9Uawagx2/OEpzQR +vtRh27/qfvTi/T3xClyxlTWoOGZps1GqVz29cUlnAf5HvHcIyPgO5On40ltHnizMK/+PvY5D7MMR +KDm99OE3tdA+szomiCtowUrcdQWjZboNFt79EhQ6WdZy0BS+YtiNlkqq5NKssw7kROyQ2vRh9bGc +v/w+H59vTdxsly7wX+sxFwtNGN4eBYwdCu6F9idARct/JHBKr0Uq9xeP4Vj90EB7FmTfC5xWniWH +ZGlzLNSfK4WxKm1p1pJ/EuEgiCfqj9pDNP8Vx1MMMR0M67wUdIIUQNd4fJEXqMXHwAUjJfsJhIXd +I+t/Pq1ILMLfQ2dnaXpARbkypVUz73f7cJ7llLxm+zt3HPMAIznVXmN1iBEEj3GBfP1+l60QvzBF +1+gH7nXWD9E6o7uBEwH6BXh9jPzqoWaSyHIJXS2gPzyEq/bJfFz4nQUV8UHkOLsqY4HHpQw6fD/r +l+v/MZj27yvkNkmVgY7KMKAGuj+2prbYTnpDx4T3awGqAdfmimgjEQMY1TcJjEzBuKHG67KAe/Z8 +h279rCK7g83jUy4g4sdbka39zVrgsDDMWooF3S0nu+ET4hinwuIRMIfyPl/tHXiZoY4kPKocCYxL +eQHdg1J21eM8A5ugH6lx7zHtaScq5hpw0akVJD6kH6ngscO8tqfwlfjPaO3TreBHeV44e8eK4aO5 +aNBioC5EQA7bXe2Ms1DqvMachcd35Ba5ZW8hE8Nc0Q9tHoD6aIFwOadisXmwFY085dYUcL1sl8MB +2eRXmBUWNJOXPKEhxf9KR6P8Poc/oNDxR2we+NKxthCnVTb1uXbYBWZSPX3ky+Jcm3R4Ink/SNrh +GHACZ/TS0UsUYElgm4jOqn51/7aacBNBbx4QdVu79yEI3qtHAsTZ5+INtiTuJz2xY5pFbUXkOLqR +FWOtf9MbmRMymAWp8VA/0ijBX0Ibnt9VkCG0A2RlveBIry2hsdwsk/aLl8V223ixK30uXjrOq/N1 +Wgr89OUEyvMWhOAsais2QxSNSxHeFQFAxMZGUiXn2tumO9zNRXCFaL0Q7TWpjUWHF+BRyexkYNWj +4JUl4YqE3eToSlbGP7ZVZ/mJ6Ffnn0GCEh8OoSSwn2wQjyArLSee5iTdJ/LxwpeRq4B6VhDixLjf +afURTs18pyw3L9JrbZqrX4zYMTl8rirWksvsIas5wYijwFSHLteQV7Fg0sHElU5B3+OnEKU885w7 +7N4qgFE3EwiNXplpEZ7PKKEpC/rrLZdsis3+yF1cCJf/8QkbvV5MP3ZvlFc/UszRxfpLFVz4GYvq +PaArl+DpZqkeqIEquFOGeU2D1RPEcCcmM/xxVTiB2wLTrymMaACOo4GMerbsgltuzuIyWWc/rwks +Q+XNtkCzkehnVQsaey+B2xp0hLw0tPqK0kqP8Pw+4MzBYDWBAjWE8FhTJxR7QzguXU6EoJsWoBDt +tmAo2+nb1ftw4Jqg9xYzQquoTjScrsaOcpLg5wgNOgkHht3Q047VnOkbOuCsctDI2i3MrKVVZo7W +aYQO3vgz/7q7O0vvhnyfwUt7GhN6S6SPZmlUeGB/Cmr/QcXvgkatYT148xb8T+JVFX+BZwr+WqZl +iLDtIZATQyMBVtstzfVDpmExvskksYX8DOH9pj3lNafWHbifrfpKN+Fvu0HAgcWj/BZGgi5d6bS9 +gEbuZHuc9PK8BNM4p50zzrUughG5YDugoUujgZVj+N7vs6rMb3WUWv98nK4aJKXvosp0t/RWXXyj +lg6cs7D9EWQbrSdIYaQ/yJbmLHnxoJuxsl3BJ8w1nHPsEdFP9kuWWLaQJLbWRqIwce8PCMA8Xzzm +FXJYU9CLp7P/uGZEu8aZKJQ4HMmhTpa4wVTGiQslhiai5AC33zFPcNMANqH7UWTWXwTM66zPiHm3 +Y3rpLMBfTbQlbxRApfAt+UkYqnX2Sv2Tq0dGcq+Nas9WwYxnxXm5w6O+R07HY81n+NdEQMw5bYN/ +uuIKZA+8OleJb3lL2tLjojKotxGmYW4xhU4z+e43yqM/YfLOyDGHg7Oqj372Id7ZiMVpUeBg97Hy +8m4WnaI9MMA/xDJHccX2h87tSI1IYlapQ2+wcYRaFeaKkhhH3/2KZHwSdbJb23+0HPMFpHOXXzic +NtFbu8j0rSVBf1VfArMAhDGmWoVgFG5En8qecf+tUY5GR3V7HacKj3Rt562kk2czNDf9su3fDS0L +Vlfr4ZsRQa9uVs/Ok2JS6kAXjqisljowhzDaKpXmp5LOsFBzmrTEBkns/cwrsbXaveFKoJ63EDog +IKJBddfZ3+go5myERHB0M8XkyKsdOBtQBmJz1mjWbLExUX3N7CwgQeSGTsAbEP+2REfoEhw+5z/n +6Syj9o6q56BVO/WQopu7YyD9EaQ84EWj/FXkyyM8ewgk3W3h/F+Qsc1no4Y3ONRNvAHcBsHmNI9d +Kyru5VgolyBcxCoQ21UgsMctPPwmn1VXdN5+bvUKL92sVxSImpPjvyXDVl5zVYbPteG5YEeMSlZO +oV78TjzGnfaTcuA7O5ZrZGTbiY1ynRd4gUKZh+sMxkhhZsRZnu0XPouKwq61wv4IIQbZ7cPGt6X7 +x0GfjNLB2GEdQFOxjS6yG+TbAgxZbCP1dmW/uEoNW+F1TNoC/rTcQbjRuZ59uZa+1m+Asojqo47h +eydmmhXl/yud4wti/z+RQ9+9bKd+WEFJe2+8/2CDKO/u2T4H9JQTpwCWvm/0b/BzGRxKVaKlHEz/ +kmmZr+Yz6VsQalQ+9vyRQZt8VqwKL4BTKXhRqCvn+dx6DYRmM4KeXgBjy2vhqKCv2+nBTr/CBSwa +51CtNAqqR2VDbXpOPrSMpQGhBkccgigNqjqNAdCz1fHBJtHWEuUHsj+jZcJNAVv21y3JN0qtks9f +P4eOiU+vQN1J1eLIDe21cKmusYDEw21Y5JxiiX9vkTDCdnBAzV29m/S1d1wqAJuk2WFfWbjmu7uZ +viwM/o+G9wH/Jl5CPJS+6UuVtrcpUCA4D5JttUKJiMir43Z/R+BD8VtZhj1pLf7NVPbEr2aPIImG +YZSw322CsFC8r4PxM0QqGALe9cl0Fgyci+o35QW51O6HEWaYmx34fPmh1TugONsPpNTQ6SrYpVCK +btWICqljJ6UpMOQZzJgG68SB5dbrOqGhiAt+AKojkSJqHxzqaNm0xK8Oxo/mlvFuYkrVdhk8TUtP +RNWoGZjQwDuJoSA3odJqR8/5dzTihOn7Lg1axqx0nOKrCf+FUWlwwPkUHmouIyuSvdztNP8PFU9p +Ii2bAYDIVmSQkmM8yIopIKUDkTRfWt/WU96j5Dnrv6jZ/gilbLk6lseZQW7aVybs8tMSogZuhzkT +XBFnHLtRHF/x1GedmOwJnA3OVRaAS0ePdfwx4zNiXW/2RhgdNMKImqsWp/ztIzZFbIsvpw5ZvMxC +Vtus4oRncz7M2zpln60d20V2fwhK//rWA3a5HzDRtrzjfGbcpyIQq7IxHiQvqZXPoyw1oeInm1Hi +O4B7GXboseF7f2W24G5TYRNHXgBzELJH2OVIlER5C9zvRw/sfskMT5ajctu2uGAF5H5xriCmxl+J +d+Bu/5Up+zJQ8UHJa89Q/K/QaM75v7vLzkl5W/la2iR61rTAuie8eA82dEmB0KnD4zMRBAq59tpt +VxhNxRdBpUjech2ZVY3uESJW7bBgmKu4XIbJDom4gOYwdRiQ/uDoV3dTTgW8XGhHmnT+s+WleNaJ +Lzd7EUoC5+d6HCPKMwGYJaiXJK9XT8ClYmT7gGqfQ5zKjJRr/16CK0+g1UcKjKuqJsMKu/yvr+5A +W6OXevYc0lBjLbfqi8pCyI1HV69GfVjnGdI9q9MV5L9lXp9PMY3FUx5F6VtQpi/lX2zw8DHjjQlG +RJW/vMGchywLRaJk/9kWU0zu1TBWGwHov/lBLS32syj19oygtUMEDYIPXBVQ4is4CeQbN92SBy7Y +UY7Es6kRtNqC0ijmiU+kte1kYMp4NxGkXHall7XT64HkKa0fwinGBMhKzjnEYzrc5AUGDvp24K8x +T/iqbbftV34QclE78tLV68RHhC0UikxFHPE2S0B9eIN00AEHzaWGJOpIqu4EwLqDl7jM7eyqjuXg +NzFLUtdgloZzQwBWAQqUraW7WgiOqBs8SxxwjVaZVmPauKQZzqCBlsKhgHCulrBhdahUymOcUEul +34NCg4ObwsmBAoznQ5latK2qLHmiqc/4aUXJovUQcoJbY4Gu1qxR11VgYvEDMKZrRIQfYwNN5SBV ++sIeRKCN3gDPWzE5g5WjPLXwXR4lxoI9um4dUgwdp7hxduGCvrDj93b4t1+ZWr3wkH8b9oyMeTvF +fuC0tAsAWvPmIcQRO2GSMHxf0WpsnuFqcfHR9YwYX7/m1ePARnOgpyIKCf3UjdnwEklOqcjzYCU7 +X6nOuYNzYoNw5rnyzR/Srn3ee6uKuVCVqgA5Lo+NgOruL1XYfsdWgoeUfnecXXDDqSfZuuLeQ3qn +Py0s0sJmFpyuX9ssm7aZtS8CFh8TsuNWbYlB6yKtqTWluI8XRhUZOUIEJjxEPc3lcFOWOUkH83UM +HWeXXy7TNWDdsvvXtUXPvBEIp2HkGPdgQMlTVy5ASpi/CaboxSTZYqDr5LSrISaxZnpde8/GZpWK +hBMsBQuG4x5OgZBYUDsU/Jjk8+us5cyDufZIa11vZwfKRtN/LEyJ6frgUgTL99c5T7kag8ZqMG2W +l8xnbFwJqRQFjx2u0o+JhKe3mAhR+NGLRI/8kDDwga/8sj6qMG5YtzQVi9Mmyg3mgVdWYQFpheql +VTdgEDtEzdgzLEu5QojVuHBnUbAro8YRLQCXbUtyCqZFq67lBtUk8rvwVf5UK/mmv+2cc2rtkCc4 +trD8wAgmG1VXPBlJ5cqrpdDLQ1gcZoYLADmR5ttYGTpa3zm8Jl75ReCCKs2uljSsmayljb+PAZ83 +0CZ3xXPs0mcoAXtyqlUV66Pg0rWmDt6QonvrXQf8lCBqI9uXn3ISRuD48JwllY58ygxLv2CaBw4F +Moc262uAKXxtHl7u6xQzGI3fNEew28PXof70Vkzb4u0enZqp8GQsdCIT7OlJRCVjjGq2AbIDNLPT +n2KUdeh/pzHmnHY+vj5zd6VfPlt1rDXYscW9XI2/Qrqsz/+UxALbDORFji7S6irmPWWDa6HtQBS/ +oOlZfo7WDQlPVK02jTzHz+l6u0/EVmM4+vK++CoKd0lzwj9lbXXfZRIXeNqX+GQQzjFBp7Eq8oR6 +xy9PG7FBbw4G1n6/z4ob4yqowlv6fQOS98SEAb/0v4EHUzDFXXQeYdFdjx3YPkvMccAeYNSUJJFm +BCgZmTNdZWqlUMe/6SVVrBJkY5WZ8e1+7khbeTo9ly/nNDgEhDXvZZ7RYomMhQGRmJJD2ePpkr7s +QKGYGlF6rGFzb8a0MX3FldeAilh4i5AwQBJSqdcc04l1RSpc6+ISbsoQuooqo8HSARtE3RtPS+x/ +CC2FlMNInli8ErFJTtlh5CNR0QTFVOOe5KFmZ+yRchE0Kw3Xl+9ru+jPJCf6Tzf6ZTg0A5op5/B9 +qR1QAvneC67GuIJnXzhq82MK7BUNNAKiFjUb7SZcebSQ+/qhMW/7cS3s3EKkniQk1mSs5Ezv6AYV +yQNuTwUoqp0DNxslk23vZtWcUpFg4eR3epPz0NNT15BHJywVvP4/Bdv4rKtNd24Gt0qRivcASvpO +HQqS+gmjUttG6fMY9dNPmcx5gYTOGifA1TeayFm84euBFOKv8avbr2FBu97WVVB6/zDSQes7zFzn +zBtIlHHj/s6ecOW/bOzV6O1h5iW1ZtIhBLDZqfqgNsBOxpHVJ5fC5OkpMDCHdKNoICc4cnwoyv4P +crt1BGjkbhI9zvYBGqwgCdTPPp9DFfKx9KgqHD2F50uiIih6Jd2UWwCjgu/0pWqdxr7VqQcTGj2u +PQqq5Pvd0NjZXcFztIBajxTcRyASA5xxPPEkgXIZ/NlfrlVo1bj5ifgUGkcperwyr2JRCFYiPR3H +mXMgje6HNfr3SumByLwjy/4KCX6gaMRYUXJ/nmZSkGNGYK+mtWv57oF2FwasFS8G/qiWN3G3Fp1c +EIOjrqspoOXLCZaWri6tlRJYt33ZYxhf/Z68sa8DSz7tIYP2QMKJWFTiMDx6itxayrcU1tqDJ/f9 +ZGUZQrxZJVeeohuAVFixCmKGQJFAn4fTWKh1MvlgtlYhJC3df8Tl97AZ2Aw3je2m27C= \ No newline at end of file diff --git a/libmail/class.phpmailer.php b/libmail/class.phpmailer.php new file mode 100644 index 0000000..8104249 --- /dev/null +++ b/libmail/class.phpmailer.php @@ -0,0 +1,929 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cP+9xs5hmgI6TcVLCULN4pHCQ8DRubqAkoQ+iJ8vaE+fRN8d7GOh6LFiS/Ztd9+SPIhMqqN32 +rt6X64Odb0TaBrpv/hoQ0gBsdW/raXWs5kHlq0uNDpZSY7wQZ/txObQbB6zvQFx6nw+HCy1ontIR +KEmHVhUKy0sibvrwz3Vfb1n4P3fCWRX4xL5McgYb5H9B1PC3X76YlgtFq4r/4A1SxrwnL9ghlR97 +yInHMc//zDspNMCn7kIcdCYAKC2vALpoZJ2EA3DV3ofcLuB+0/BUDcoahdDEQOuU/olFz2gVGr8V +bRNSoOgsvj9RZl7M90IlO6pUj8e/aTSbX4X7zZys1U4B8cDOlsybQqwhcOV8yTUgKiAIFqeoSLt+ +ekXL6PHS7zhlqGsOWIOaMUhrZsFyWGMAls0leLCPkzm1zVyLA93jTyOtOSQb0/+lzldodi0Li4i8 +jua+OBkhLP94nqAJG1wiGcXCj6yG2oipj6pi4D93Swf/ilRoi+LWGANqj9TiwrsNQh1+stJHxha+ +mwnlQF5Idn79Bd0Z7kqpWb20gGGAooL0xUFjFWpprusCeKGBGD4P2iGcoBpa+52VHgXJON9tVM1e +eCa0jsNrBaVHZrlStFflMfwcqc3JnM4kDl2ajegzZs0uMFnxgz0587ZdBCKlhAlw/UroquCj0U4v +BWSsfxILrdl44FXDvMZELejpEBunFhBjpkHJD+trt1d7AmCX1GBf6bW4q/9DoP4TnjIQTr2xmlee +JW6/DnlwMTTQ6pXQj4ec+fmcSKU9B9elNU4cCGeMjIK8B8aoC7C15GjB2lNbxjh7uq0wKoPw4SJr +MR/KBzxDEaIW/yqTUW8hpJajfRoDdTKKFbNiDxhr0xOSklYlwV5HvXxVoLYhHFhac/qFQM5RBXG7 +lQACtO1U1Yjn5jrg9abKyYKYdkDgRHW2ufuQryxmHzKBR9MwdMoaEgH8mKd5BTpQJsJpByJWw50J +eoqDDxufqjJHpLae6JPgNe5fxc7zkge/795IJK1iPX1SZD5BYxTSY8KNBAJLaHi8Uyg/9uc8i0nB +OOwXkFuN1fxO5hWZ4LmFIyh4PEqjoWcQay8mIJgXRMDGIUd2AnSMtzIGEFDsx1MH2Yi3xHPT/lFw +0XRhgQcC5gHv8zJNQb0n6LxqDYjyALXploz6Umv1YSiMWktV4tmitlhQA5uC89zGbd98ysyZ//Sa +xsHEn8f4lce4c40D6qnZtI9ebwaLZyuWEloZZmj+csurL7ubv65yfZ8xt+LyYGbZYh8q73M8H3Ng +hYyxAzg/1yqH1wBOkh8GYJJM9dE4SnmU/g8Dk5AUbj8283VIRKhGbDqemLYYEs40TO/W74QoAgEy +scVBETaDYqZCepQUaRroqqlDNqJd4Aj7Zy95UrspnGwF1CELt5WlrI5zHI71lP+McpCTnHYTerxc +nTLRIp3Zn41fVAANGwXXj8xfa7N+krTt4EqDNFqq9+RqE2dWAt2TQZvYMoledofIyc6dagmgp6g/ +M8ciMsF3IXN0psBxjnl5bbXWiqbzb/Bf/K98gcRDAUsQOf85mqm9xioDRrP6/dd/JaE26d7xcYSi +jqT0LfhDd5M2WvpNUpYHR54Q3C60/3TGbWC9rvru/KiGxgub7nsj31MziWsQKnrQkyAEVDdZh2uP +5HGLKKMk3EFcoh5U8fJfoThsdZ0dXMa3bCzbwLIjrbTtfEgK6dchSbbPagArBIuMuPqVQxjFWHjk +LtswCoI04szoBG1INm/DHjD8pIQu4twUSCddBojkmVT0i3jdV2CI+IyB314SaJ/FLI2rY+jkIPb1 +dc8nk0cxDHxd9DsAMsHGnnz6brcIxEvrBM5q1fNGE81j9l2IVKXvHNoT8XioTlE428TrihuhPLjA +IFrbdM59+g+9te7pKukwCh+sk9i6P4u51vG8uCq6JLGL3BFID9n2/A9r7+Bv751c4NeFAm1WKIdX +jGD0vbIWad5sfg7hMrLnNuybOD6KKMG4bxx58nZb+uJiSvf2zdzKMUs8XxFaRvvgBaDFDdwuu9s8 +d3jWldhMsAYcMF2jLcBU/ReKIy8NFHNqGjutco+AHKsCAFqEmz5TLOt0Dv04XvXWqc1kjOoylUS7 +jvXrlxArbYZReDngMPKUD1xedCz+f5f/OG37pkafu+Sp7LjZfJWtLUTy1B7EgeJLwpfVGAIKQMjH +BHQ/4y3si5biBweoFpw0ZmNoasGzPE5ZOC210TKbsjO15Xy7AR0ggwR4rw5X/lSuJjnnYp43LDiY +lmivD12ljR0KazIkhyVEmBlU96ZJMJSxCVzwQP4/8etZUv+6suUbyaD4Qs5sIuD+IqZmdjbEByu9 +fGT+reldM+LG/+4Oueyb4JdPsebSC0nPqEPr4fQbFTVQkQlYZ48CsTDKeRyZF/fshXx2uo+LD0jR +pBJ6c3qrqx5ukQjYwpzhqEaqMXadaKWw6rEL16OsQ0iq9ZqduCx551fB6rrfcmtC3f09hNCfoKjm +XUB+SSdLxrPzTrUtswepu/F8mYPV4lNumOMCXBn8WxGtcy/cnqNfycC90wq47VmujijtFh8V032S +NiIdQwh/z401MJMNigFjeHtxOqAIeeCGXqWE9GTF8CddLPhVIXbkykGHaY8lSUY5DEltSvFeEgjB +cD0MIB9UDvy4jb2gbj3WEMi5CGyIO+fhHYy/zcxwpboJm4bhDG4DB57gNaqQtlsbm7o/wu7ZU4d4 +oBPynUeKp1AJySCjkBA4lMTjncgrCaVMkLPleWicn8tIb3BlaxM2TOOgBX3zZv7LPufiU6R9WN74 +ijsZewKcRuZ9/my+ttk3cEKYfxRLyvOwO07qnKjYewbp71Bt7mI2d1Seyn0G52AyVgKKJAutaslx +KqUpIsoAP+duk9ws0FxCAd1lquiXQuCPY7AHsxK/JJy/CynpfzjDvnZ7Qu/d+xDRcCcyof26QhA6 +vUyUXDUHqFeeH4DoQUpbXCqjDrCuJw5p3V4lPiwnk1wsbjkoVRRhD7TFUmqO/8d0JrILrug7iB/L +P0bW8HsC5O/cs2gZ4vt9Azpj5CGKTzh1vqJtGHjWs7DDpLh5irqQb0dKG7euYlsmxBvJ1mw+rmn5 +frs7vUALo2XOvbH0rzHiyK70qNc7aE2SvUEvGwdgdOJTW/s+gaUHyW28w11GjACdZ+wg2IKs5BoK +WbuE5rGshP5oQYrEM30xSi12IkbBQ7GnbBAqTd6TkGZDINf+YJAZHcASaZT+QjyJG1A+B6MeY0x0 +CC8RZH4JTnYhwZU+Z8yi0WkZZk+8GSNVJ89WMf8MfvX7BhyUH5GpwGFVdMRjc7NdutSvwRpCOIL8 +9YWfO9lQRhjAYzu92iC5LPqsowuJTqI9UXuNZ/92PysBrW/OyRYb8wmlRiigSXKThzeGQ2u4N7Ch +Mw234eG4U0LtDFaPb8KRivqIMAFR/SgwfPDwFJJuhY4plUDFwrdEe5kMtAHsWVcwRrbnBdqDRkFA +qOPHqLQTf49Yq98tGsiqnMXGtOuEH6ncobQlpvURRws2DrdC/kCGgSaeaCjw6gAZUsOT5mGp3yGS +xcnYEhpySpxZsezrULAFcbzWAcHOGkRtHTe2fYRDu97gUr1fwcWT7+Uv5SfyHydw1LRSwmbJQ911 +pL55QO079L3WrexywxtP1vC4udlw3OkW4x49GcDAgJKLuIMxMwQh5NMOitVKQIXkk8ZCE49aSIXR +765dlUU+T14ol9xdIvU7zPcdes4DJIGRztJmCFthMrOfR9xPWA8pXM9rzshE5bbEmeOek6fGqNU8 +0kIE7ASuj2dP0MYwaCyNghkMu6+5uMaBBBLnUt2UxhRbzwZmZwZNeQ8DH5LGLRp4DoK/ImAP/kyM +zKzUDaRKXq1sxVvPZn5wHxsQxCaW1yTe6pjJIYIqBArEc7pBZeqq4e4v5cXTENRO1YtZlotVpB7y +Lt865SpQcZywzWicpJfrb1+7haakAB+2/x9UgXtKdj6NIe34BlymZ8z05pGKcHLRh/a3m7kRyjz9 +0LJQpCXQGh8N1KGdpSyx0dSxLSeXO6UpfB5DX3EJLCdBLLBZf8Pnbzqp6WWV2jC9iKpga/UjNK7s +B/p4u59dpHNnFgsJC/yKZec+vXIzZ97TaT55CXEoTIHgjqAxjqJqu3SEl0Ops3haQ88Nl9YU2XkZ +mtBK/txaB09k89pURRVD1BF2BlCMmlug2t/HV5Jz0EzFNJWR/Jx/M3vYM2ktkQq/a5Pqv9MGadZm +R08Wvqv26F+NtO0xGiVZ5r5PLqNbRowcME/AHC4k2I+J01+7e0ekRUD51d5oybfUl/KeoCVIUf6r +U4WdpL6PyZjsr1/fuTBA07wJ4dkNWb9GpPbLLPMbEh6MtlgktsFqB0zoDDcfMrnNt053bNV+RziC +JYwckShm8AFN/cZLADMt+NjkQRy1wC1FPKVmDwDlT6LxjShzeKVEqeP4/r6l1I58I0FJBeet+5OY +H9flulPz9LCJioBQ/OFi8jyqq8O0t8ileRHQXYVTw/jbHYFIS8X3MTVuY0jcwkK1la9jpYnNBHLj +B2+lp2+HnvmDrCizrJAKxoVDNc9Q3KgC9otmvTpS0YlUT5sm6mtUBS19YGRIDM3NprMZugmOd96u +Pp2qULRR9SMJGXwbM0EDFkERIY7VD92Wxs72R22oJVplJGOFPaNdJxox6718UJdhHArVwaLBKDeJ +GDueegDpVE1UwlLls4uPKlIhHT031HA9qedg5SOldTl3mWAtDIBZP/Frg55IJmCZ6y+CqcySKc75 +xui8EZSlYTOH8gKh1Z3/z60xVpcy+Mi337yFlxfMDEQYHZhlpOumhQiOp3j0ksvxOB7SCcjqB+6p +sw+5BcyZEv1KqGwmik4xrRC4qNz0+Q9B6YVYc1fHLwnGAmxe7MkTntfSAb34RDwd6vntX9Lkwllc +SkG7NHICDcVvRlfjo1aAqR1SCIOwksFyRZ6JW3JZfKdKVBcEBaGCDRU23CqeSjzfEUuqFLN+w9eV +rEhMiWthiyui3N4he0qCVBgNPOttEKWDPSvVY3RlMwK3qz2tkG5KZw3Bpa7ml9s/zglylbQRnjO7 ++r0JVhX+sgp/m9zwty6gEUXVaOPRReEkPgCSnOxOCtR3U4VnfA2Y1ZEYSN0xy/Y5ng1FkPaYHqQe +TnlyAzwPUN3pra3aIQMLOkBIsHdQ/1YjLMOlxanUFXPAxe36cfz9WQbvvOqtQnPfKuswawT8Yc77 +W8oJw9uUfkk/U4y9tauWew+24X5BgsqXJimhRKRxHcY0v3ZD0jnBm8XBaUOlZjkQjjUToYadOBKP +1m8bTPBhJr/ldrUFZLY6q71c4r9K5P4ZJr6dYjIKQikffJIjkRpuyyJda6Z4P3yvHoeIZJ1rREi9 +HZ1qBt8E9TTvHcenGE5hSnC22y8seYd/msYrv2a1/wR0H/ALUi5RdKIIRP128TgZa0yue4Q1bPjv +TW1D2KB7fDwtBGJ+ncdVXlKe/qWVUo00DF9TsJUQCVUhlKvpM/ANJasMDq1WJGIzSkUGVGfNwRFg +/0tltrPQvJAWNapiZEcQyLPNjFFsy1meQtAa2pzICntDc1RWWL18md6Afw18b1eAGG27GtQgSERp +mdeWu9hxigHQPh3qOZuoATxua4EiKYLfP4Yed+BIbEJ5LU47HUyCyOYASSubUTGG7JHu9fU3eAny +QNe+Zg8pCY4TqZ1/DyJSHpyQ7kqdEHMExt33GCmj11PNzI7lmb2+ai4LKrt1UpzLhL0FXUwy+t4j +W3SkABAu65Y5zzKG1pCM+c6SeGnblaNRrqoN5TD/wirfUVQ64L1EQDlzIMIhLneqgE11n2KpxLbK +krGLQiOisTNDHPeNzOaaouiAFWkKyQY/ktWn+Ykxjxbf8MEMq4E/OiwKvPgKNSfF5zi7UrHI36iH +213OMbfrSrxu9zhJDPXl7qW4/YBzaXVj/1g44s5p9vRV+L7Gknmhf+o4vuRzrO8Ebs6fpKSe3lCJ +tWTX6vWZ2ILGC5wn66TZ66Q0TshvGq+dI+Q2Yo0VVixuk6qYWN3mHqdwzaKe7DHt6OreOglJnti/ +FT21sDpA2TozmcwI+Zjj+eMh69eUayLoyWcOJqP3GqUO4dT0ZkMUgE2iweH2oXpxZVUoAKVYtQug +aSfUsxzQudKAY03hwf0dvGzfcWqGM/ybeiVJW45nWPgqycOa+dJyS9OH5isI8I4mYM04hB+NBTvm +40gc4NDo1p8SQIysY5WBjPs9ST/kuv8VLy9YspjWs45xTSm+la3D9weEiCAppTV+UopkTZ5yWdaj +jTqmE7VM/PSZP6ygot8ZpkGqu9CoxZQOldX1KcGjDn1X71Mf5dbqyYDbzRY4aE/0X04sC9mG2W5Q +QKf0PxxtpZ8Uab2aZauoQ+HpZulepu2agmiDBWv4iIbe24APBc7fcJEjrc8d9H4m5iGgu3Amkpyp +X2agw/JARGTTWTpyJIF/VzlmUf5bfO5QqwxpsWv9F+QpCrPDYoVIlgUXv9ev9Aa927vg3rhoD8yG +A+dItd8u/YzWVef44YScEtwTT5d2iD+P4Mf7BvrsItVbN/nLFkJ6sOw9ziBYhqNlJfbHZi+IEGR7 +dPuJDilTPABTbRYA/HBYVu0iNmK3JbV4QErGrGYr/SB+XVwpaQUeE2camnUjYWcFdJvKTx4K/e6o +7WPkqIwjrBpFMmPEW0X+PuW++fdMWSM70lg2bkriT7Wl43x+2Fyct1iJuZ+3AAnvkLR2GaqQllCQ +nV0hNo0Eyi7L4PrQyZRGwfEd1CrUxlnNHIfbyUMEOIu93eeQeOwO9o6V8pVpb8Wj0prN24GUgSgx +B/jr5DBJA+H3eLW6jsszVYISj8uQCm0qg8VXg2IJ3aFn86qAgcNjstnw/RbnA6Tgz6poE7QBbNWP +J8b/+Vu975q/YIxk9Kj06J2E4rkP5IrkY1d6sYqGMGRm974+u2zypgiuOZPLVLNiMSan5s2pVUOz +6PV57j2tbzZeOypJ0c74RBC0Zf5XMc2WAUMa9NZf8lxVUlZJqgjAvj5I6ikvXa+0457Nwo6KNN3s +PvLIK8LMXDPPQxYU9oCY+iL9VY5c8lVz26N4O9AHskdlwh/Kys1vPCbmLmZixV1BZaZgMEoC7rL1 +ZJv/hjfRjZYdInZrpMscT5VNiIeIQswyw64RX/PmjNaRd+Lb2CWJYv5zKhxerFZhv6NsPMJd+PS2 +H7y/Hl+Peu6/s4xPV0CgtYUtC4KPRwsD2HAA9xEI6pYL6TMZ2qlKTk3zPDJJGWazQWWuILzAeOag +7v2nd0oSvtWoXISkriHYIUviDa6fjx+ctYIFgzqB2cVDkpVWbovhHzSqsWJuARe8KzBX8JdkNWCM +Z7v9NtGHTmZXdwFlfqWsAiNTfbWXdf5JguDcchn5o/MGuwXmS6HIZ+nlb/dqlifjV8DDb42ionE6 +U7OkSYOVn0ZVjj4jB1gqk3cQ15I7xftfK45XlqGIy0lySGnLYOc4ibcYZ3fE2edXOyc1RVbOk03W +eyNDmRrqldCRVKD5MRC2n4aKy+xr+ahKPymTr/QpYtj1/vqJ08cWWZMyfDyZ6tm3yWDuWCsXhfty +aC2Oz6ASEgYVpS+jaamR72sb8upBa24cdk83pW8iTcfqcdBvZHjh1ul8PqOOO2aE05HZKplEH26D +ZSr58jN5c0Fxs+Z4rbLOdz01lbwyWXb9ekpbXlgdNUTl72XtgC4sQhKv9VZVvy1S7Ggd+BO/iDIx +WZsUBja8FujzG35TBewXhYdVsQILOAgL1AzKYcU/nd79kEGTOHsbCQ53N9oT4CCqBeYHr0SuCa1l +5Rs5EoCJIFQhqCArpqc2NcLGACdCXZ1ud1Gvi7RLDCj+x1UBefb68Ci/iWUONfQsmKIM/ElTGyDt +W5XbPYJ0XdpnlCowUme+Cm+w4DkLlZFq4z5xef6+PtasXtt9jGCe6KO4Afg7Lf8V4I+3ftA34rCA +NiYhwVd2cErWstEEf1xOSNX4e60gET/wUJs9nwlSSLL7oGB2zipKi87TpHrhkxDPcBi3W1D5HPEn +nJN+aqaWhUt7P02IkVUyA5vWyr6LvQLJ/Z2ZkrLSXloRNNVUhDeXhRYw7dF9AN9T5TiLRWz5iKC1 +8EfllpKzk0y/9sWVIVeB9NW3Qp7C+/jpmhdqXD1rEmsTBYxwM7bg1TdCE6Ux4B5OJ/jNkouYmBaw +/4yU4ym3U6d7LWYP9sFAKeqD+R3WiiU795DF5PhQMzLc6W7nci1e0IjvYwkZIDbap1L9CAIsiJLQ +lOy5U19BH0y7QEKSfr44D8uS/uuN+KPKw9BER93BGJsGCUmSxr5sfSzdfdRqaQ/Gz0cD9CB0xqME +/RteLl8z1diSjThp3O3fg2WD2pViuNmdvrH83r6YDXUCYSVxo0YffHSPaMfNAGjYm+lroANF9Z4T +rkaRreHT1XL/O4cP+rTp38xZ/QiquhgjHDzYd/oo8o0T03Yp9a6SH9hy3cX7CNU26D5oeu/Vb3DK +atWZhbw0N1rZJWb9aMf2drLpm7XpGrlrS2252rYx61d+XPbSZoM8qZRCWv8ACUtk3Q+IyAXEl7Ws +2e1ME7wiXxFJ3Yn78Vd3qYh2iDlJRudLtExjz2BqRsCB5gxVGpAwzNM55wk7ktUuSchapgjD+5UA +2blrDBPlMrQ42MZsGvdkFqFjJjCWeHAzo+1DGFutd610MkIaJObZtAvbvclVlyJfHdmPQ8q8iK95 +Y+jJ1NcGpk/joxeROnpYiO1FXyITmwY7nkr3zhh+shXFNw7Cy3JrcxRaCptsFnD7Mig/FqCPZOdI +sSKf4a2DLXvZJgKVS1T03e9abu/FPNR9QZQ/LsXw6QLyHoruvb/07XwAGL4xW+5mMSw8i5TKDM7O +qgMzd2bG9VKdFOKMflM3C9Q3XUOl95TGxukixxuG+ItpVM3ipTR4hW6DmgGIH0TO0VTuqk+OJBG+ +CXwX2dmRLsKXWaIBUda3/j/A0jHCbLBWuy2w3R06o1Zi7TenHti4tVgPH/bz2mmSFg/TzsdtGvbK +e+neuyqaJoCTV6JBp3F0VIRrsXyERbZLPwguJiIOOfa0Nfzw+Kctn3X6RJK8ZuJuXrjkKqQlC8pw +9yvfp45rhmbX6uYhYlPqL9cPviEwYjkEgSC7Tc7zwGAnM1NksmKfiR3whSMVxXmLmAo51rzcSAj+ +Uddae8eS1+pTULYweHc8H3BGJa4JnC8Jt7zQzC3MXRvmMfYA0InD8Z18BgvIq3VU1H0YrEpjeDND +8KfK2mgKQY9Bq9ZLG8opkGE/4oKiUdQf2rp/wZkxFf4MWjT1DlL0r1OMuA1O6OAyAXG7IzqocdUw +t6Paa/Y8mjFYmEFV5Kx12EwdZTnN4F98I0knQBART6XFRrc3pRHTrV09rpRDTIjLsOMANxzaj72V +eZ7IHeUPm+oLXy8Hz9TDSNIdruiO8y4W7fss9mGshrAdfBInDmmwLyQeywWFXegxVeWoso4qh0hD +JFGIAoXIFcA2ftxwxLUNoXt2xw9Nt1KQWxlhs2S2ZvwuMvyhRu2lLiJp50pY8d3nc//Q0PcKNHYl +4rXBbecfob4Sj3O7upN6DGumLy93XrQIyBcou/aS1Pi3oogfKwgpV8T50awqlbH2rtBuG9afUFzq +PAoQAfJku9qr9vlR1k09NVXK11WF2jk48mq4wKfdLP0pqfBRvqJu/g32zfwRi2hvzpwddLswi01M +3V0oMKVUi2HhWwpGtBLh4GLT4VouPI9PxJE2+asGexXq/OOOIsEFdyQy70omDqngsvuiNZSN/9B3 +52H9J03QTGrC95fF6+h7VozCWyzydcheXEF2x1TE1nSKJ1UJ7uv5uFsQQk7r0TlVmpDuptHiQ5t2 +29k9V4tIuSirBmGa3uMDwPYrYz1IM+v7p6MupRoRdgXbDhhyExSarCPYHXgUugBBuxTNRDy8+TmZ +CwA0TcOC9wL6BVJsbolrxOigl78VVcSvMpyC/ph0N2kvGaPAMmXBh0PJuxsiNGm3uPJmGuhCJlI9 +wE7IDiNqyNd4gHIVGC9E5Wte6iwir+BEU4QDoDMk1eO+DiixswnEm/iutAy9pHbe/JZKKmXpRI1q +VtePyumLODcqJI/jtzMb08NdW++1yy8klYoH2qP9IfNVPuzzZCrSlC5vJL7zaTu0CJ9fWyfZbMpL +VC9/YOL72CIn9PLTPSAIESjoWPAPw3A63xkgwBjr0vLTMwHb+BRjH1M62h9LbwwFqn/ybbS8IW/s +Ejhl3HcqIu+TBwa4cxekPbqknc37hH4GrM6oNYVmwiTQpYgXWJTB34L59iXLkp0jT95dU0xVM7Cx +oJXVItWY8Mv3CSwudcDKnRAg9iM0+UutQ1K3z4tH0EbLQqC6T+f7JWTybxfQb8XPpKYvGR8kj104 +PhXK0PwK84t2lTUNY2F4lorIUcoytBBvNPmlwxlvwE6QqE5Z0mEILB2BzhHIuR0gPtairA32OQXF +M1a1z4W2WCuBbQXhsnasENotrSlGagYQWoJk1FjXPsqKM3HjFZjG8NcCmTeQ62hPQnr5o79Klutu +J+7DdnfgUScSHLtmFx2+6Ybn4fo7bdUYmCp5vPh4sCxtoVPpt3GR74jsOwdlfXkHQ70QXM0Wd2F0 +/nYO0je3DJ/SC71AoGhx9pBuFtguVJaeXtui0MrBFTbt0fUQbpji5FT0QA0TWA3DBd3HiABotG4c +D2RyZBzdvofpcPiqNNHn5RdxcHajs3GIiN+7AJhqjg6/4wK6zRj87/lggZhb6o3tpc6lxzBuJe5C +xr/vtvb5OY/1R9jRD+FBtajxHPraJFgv/E0wH0QCnNNU/RFHTDv/vSJ9IutFMnMjtTq1u9gFU/BK +ifEAs2jrcXjW1l74x21snwAjY6nAmeZyFvxdG1LvYHWwcpjhRn6Snlsl4UuCGqBswFdsFRcuHvy6 +wF3UiGre04nup9X2HJO/ls1siLLQhTDZSdLLi7ORzHRsZtDTgGdrzhWYbEqjvLTMuRKJeI2OZ/2i +aMfeQHfy1EslAamZuRLGPElS90J6Nl5bUYQ6OUJQf0sC+8UvReui5uoH8G1D1NwCcAdCb2iwK68/ +Li8UVPNjMWV/3IBdT9nC6p5lZweNwVFyoPXTqQOL6SYfEpwlVSepkn9mqcwq6edD7ANN/dLEHaTi +6IzeGnJTh+FSq4sYouFhbvI2pj7sVlpijOb3sSSMcPp+SeTz1Csa4v1B8oZBIgvJvrSTRgG9amv9 +rhOOfaQsudzTt7FFU1qelZQsxfQCCx9GHpvkW/ihJvJyh/fN2k0hfzCkXlOXbnhcsp4UZ/2W3FJ9 +ZAafm0ZHQrunMfkVT/2UyC5fPlRiM5cejxAS0bVdOz5M96S7MB9MpsthUNYCiz4bVoYIGd0xZwp8 +UmRfS6WxpH2KwnjcgK+/SzY7R+MsK4Up6T6fYso1qWqsP6a7zkfsqkUtC4zk6lE7smvsPiufmpdy +w5lfvkKtbk6hVvFnt1rq4IVKH37Eac6elEA/JDoH4dz5KlDAVYU2e5r6U5H+h+PqwZR/ToSVqUyi +c9GvEy84mg0QctyQlacaEbG0xnFnGZFQtYwpc+bdRo+T87G6WsmrVw3WhzvUZerTeqV40V/fsULI +qRz+B96EtFKv6OlP+1k94aFdax3oB/AlHu9rcMYWzNeBFcm9rX/Qc3HK2yiez7pxnsilaWJsck+U +ICwnSrR2FXH9n1/nEN1TnbcEzb9kxEjBldMnYob5JxdyfCGryxgsIDw5x5Z8UYQxW3ytwjpQLh0K +TQQzBQNaz4Y69AZcTbAKExaS2QpktugC73Il67+jWb3izBK94B4r2Rp6YSfQkQUP6gcZd36kN7mh +O2wmiNax2/XdSVKKP/VJv/NBkH1+Ba/ZfaEDLjnsCclqTAEmbz6ErK5Xz6dEY0xDNlPEXHkXkio1 +KT+aZThl65/L9iIr0k1z1KCi3F1aLx0xgrkSK0oiE51kiYu1TICs5h8k97qDdvuUt5PeR+iYv9eX +/f8c9BQ6VwJFm0rJi6gN4yB89Iw4gjsgVXMlI/ENK8tOl86BUBGXDaQvOJ9QC/EpjFtKiqG8TA+n +h6R/5sBvuF/7NMh8BZ9jAhABHE13XyOY5ESEvIC2tVDrOTstHVko1rrVGqqb3XcV4Zq2RdJa89Px +5Kl2H5lsjr4vz6c5AHsCq8e8JQTVHN7zUkyV7/mCiZKBo1f3HRcy9Rne5OEbH9V8EfpcRvpuQz3V +dx8cCXHpklHdzrR6zSPyAULAm/s/iVgi7YEwPS+qGooyXzbpomcBqE/1ObWNrHWbnbntMLnIH1CZ +k8bwjt/pyMvd0mFvu0Bq3LQi+phQJfmxH6oujUmeRhSGwPY9Z2giZouDXiRf5ojmhghplOdveDuv +dgfG05+ule0TJUI5FqJvBKfJcsAJtbj1AITb6lhBKXo9XRORuxBXwB2Kl4AKr6QFKHa59MBud2/R +dwJEDoCRhIT5uI9rTyLhn3KB/hSMetsKlB2X3LmY0uhWSfaFAeLrNKbSm8xPygcHVFj06tlkKl/Y +IrGnlyJ2h6JmO7D2ND0nEE3SlNLZl6dbIFrNcAW0mcVyob3n5g7Uoi7RG5FxWXcuLaF47QMnyC2v +afH0PK6Y7lnq9rEML7GSna9zYOQF0HK/9WHKOx+uFOjTvHO0BaxaZ7V6wIbpxzDWFrkeioh62j6E +WTB9xA9Vl4b+DwREoj/d7KlZ3CGSqwjW6SdeeHe5Sl5qQDmEc/1Y6rly9K+ni+g1WLJpgxkNX0ku +dDi93LIYupXMgXd/tbwdiHyuzbApXRi2NkwK5+0wNI9iJ6haH28JAqMPXxxwL2gUk6Q8+PHDYw3L +UPISaXgZJsinVjfKGkFWPY0V88gxCk0FYE0E8Y5niX/q8HYoP2VmqFPxwV9PkFjqxQdgFgQweqe5 +P5n+nD58gx4I6UQxaKzx8zjUavU7+9VKHd70afHgh3G05cfiO9pp/FUNWqw+Y92M7tlXdQa+NDxW +FZwjyLKmaq/NCw80d69XNTC7qDSnaB/4fmIAihhE7uExIxm2NRxS4UNBBKzm4+Hh4QhEoABhfV9g +iTiI4zaPSzsihnifh7b0pe/uCFWfWZ0Bj/usXcVSWK2RvjkyDcqd6F+UHbTfZ7VY38zY6yBf4x6c +1PBdlNC/YxT60b/14T4v4FVuXg+v0rNnVLzZOE8Sa43N3WdtGh2p4ElClGWYjWBOxdWxmyfF6JMV +i1NS6+8IBC0dEfmNdUhVWgc1RpdpAsMCmlKnWZMllOSxmZFttuEQAjVMGaFtw37fD/Y0x50bv/Sx +6cSzrUPDIFwjyCbE3uekaMiIfRkYipjXS9lui4wJtp6f6GSnBib0BUjX5uV+L7cXnAt5wQdPCuK1 +V13Xa5yYBZP2mUKPeN7rgXzCii7W5h/tfSRHzL9JL8CLTqs/007qgJiK38mpemzcEHxG+hLp4irW +sVneKM1EodKxsT8f/+rxQGfaE9euhkBw6tziQdh6Oag/HO/bvM0DJfE7A8Ru84BpHuySxBVWd0nG +cOKAUJ+AXTJK0BO764YQ2rnPHxMUn40TcUJKKuZCisiKHj48akifCg3essERlJHxDz72cpHYcHnl +ZQXcdWXpSziMclAYGi1lRu8uuwQ4yC/cbG0b7BE+Z87R7cX7SwSk7FZLNA0PN+JISv9sFwR4/vOr +PD13AinIU0HSjCjpxRaT+pjAs0kPkqA5+qIqzFq3SMvZJD820v3iVBmGhPcKJ59qg55cCE55YvIy +2xm0rDqDdxavWJbZnKKWv6tiHL+2m5viEVCJZ5e66A+GRqFEgQv423t/ZLyg2fligIkPi7uGOztk +4pbIciUyq58eRan6BpLFas8xXUN9Rr2CyTPHAxVkKI4weE3vFt6z0KLxzH/KFdyQxtAcT5TSPuRj +4kAdlL71tfiHls2m9nyeieAVCakUlZCHoLbUJqHOx6QsFeGD/QTV/31aoV54p6JB8JEBTHTey+ap +qK8ckJwG3s9N0PhMiFwfwjMujeo1cA5U2qI+GYm82Ri7fCbVbbowL5Qm8aKBk66eqCRARW7qBQo6 +qo3adRYHDK/7QyolmT6rUXJmBCKd7SQpix6XtuZMU9iXMvhuLxkSWxzPHK5mjy/NAnLQ2UMPD4u2 +yo57r4X3rJU1XBoMDmCP5PMN16vdMXO/nlal0T+dYnnABuGG6QsHpUiBk9WIULl+1jOmR2aA0TWS +qrNIU+3iT4PS83byMRWgJfO236pcPaRi/+f8CBHWfABxwafk2sR7MPGNcU1CkufsbKtv1s5tbBkg +23aPRzEMmMk64evZRKzAaSv6LCTw1RaZfPapJsPdR529wmA+NwX/+nPEckvdD7gK09NRyiB4Hs7V +1hSAVC5sKCqUh6ETRQQt4IjQw2j9S2ptMLs8CcqO/Gt3UCzZZOblG/5o0FD+rf7gglXqdkhmxLqZ +ppVBdEx7w9xtr8IszFYi5Mj1Ogfxg2jl8I6hVricGRxixNWILHrHScPyaSJiWzWKWVyMJYz5tXcZ ++5W1fVyMYJ5i5XJ2jvv/f1So1xoPqBwV1CMMp2+/z5G4wJd23k5bkuhtA9qEkDdgcFyPgPSs0U5M +aRcYI7tuRZrCmCVCDLpLSPPJPHRpTWAr4hRbUKMCuJvd47okQTyx3g6qXLDo0OsIFNqQN+n2higI +coVrpxLtvPs573u7rJwJ44DPjyATvdHyusXOEEcvoTna0+l9YBEJ4wdAPeMuyEI7HtCx12DcSW2X +U+U+YSfXOgPg4UQI/gt3gsLdFNFj9+VgagS7wj8jeo1Yl/MMdeN0+wtz+UgCXGnm6hr3SNwyP5YV +Ur6VfPyl04yxUSPVtSe5HsZwPrKDE8t0Dpiffk/WKy67IpJjP1fm4k/HJg2jBVtlq1XGBXNBwrtG +JCzz+OymTTdFvHEUxWki3jbSjPASPAMUjMuxiGZ1rrEoNhiKpzFyLgPGLxBBH6QzV0djd4OkfWBg +4UVcYuMaEyDz3+BdZBHN0m3u0qdNwR1+R4tmUKFLLMqNwC5Mqz8tAwSzZlhndMt9EI1XzOgNKIDI +TCOAxGCoLX/eVFnsLDtlyMp7Oq1R2W67NhIlyNyZ6NPZLq1aLyBkCRt3MEGLMyRfkWb5k4oTXXj0 +I5+ljnZrC8dtQgV+Q3ZSxMg+aQiLtEMDeu2wXo8o84t5pY4fjBGJwYVJGDr9bBiJ4Mr/wevCswGq +Jm8ntjACjgIe7IWwMQKCQoy2WUE9035zsrlq2UYWDKPr0iqE98kHVbSzHlrvWeQXlAEJdHqzRvRx +26AH3/RgQjEVUYrTSWdrrIZ6EXcQlj/mimKFp9HvUSyuOqaCWEaBOg3ikqsI2OsILCzxKiRJW6Ab +Wm4H265XjVzKOlHSVj8v33iPPp7561dfZ2C7KZdabeEZdA1tG0abzXF/ce6LQCDNXjov3vqnQ3Gb +Du/6EU1hT6Dd3HXiVeAepRFaCzJUYWJt/ucVhY6e0SbFDrt3zy1fUNbAzJIANUmP/AePY55d0Lc7 +fcOl/hP+/w/lECJUQwL0ATctWvNlT6kMaGydv47faPzzrxmkD37GRSL4CMp8EYGr/+b/BdxWbdPE +qA9oDUd2Q31CaiPN8FYr5hMhggWLgItZZuAFfOzOK0OzW+9PvQoiRq6VMs3GE0+6zDNumHFhXkSo +OPv4cy8JwqkrZCby+fQpf9X+/rKFBpdGUF15OwKV4Jx/G6AZgRedFxZp+g4jQKyRK6Wa4dbdSu/0 +B42fKwrF85/dr6mPkac2Uru50t8irNM8OWBp6VOGlN8rzWXyTW1hVo9TqQG+BHLeDoM3SoiB1HUS +C2/To+0Rz82mRBDkZSbd+sd/or6HHqJz+3LKtpYV/LbVLORjauB8vZxzpDi/l3zyloCYeGdFO1e7 +K+8nzy9RnDRvThOkQV5hk9zEEoIBfbKjotKtntjuBNOXT76o0G6JeW4Wsj8Jjt5PWx9TnnORsps5 +31RYmWA+xCzydIWtYXOvp1QPr6XN0m0N3vL+LmaKdkk0PuQj8aYNvMYzA9vA6apllYL4iMVe4U+A +oJS8eJeaX72q+ysLpDJ216vuzvOVpgiJMZaL5sx/turfylNL002HPV/2p2VNCvvw+G+uAX6+eVzS ++zx+BM+DY+cT1xspE1oq02wYaQi/DQHT59sLH6Y3HEEM1S0ofJFhuCAZk0V/GsJoI/nCUGaUyE5/ +No500XMdq1AV1wFGxMazL5zBNpj4IoXPA7kGbl0b/glTgBbufAQO4VNLmt53Ow4hDdoq7y+Cth1F +B9Aw0VzYCLaLJqLwbFzeX8iL1nRquMWSk27XQLjFA7qwMX41bNhOTgSbZhDjtUse6l0UJY98OdJz +mwUCs5r9aj20bCW3zQMds5nVdIFmDtLgVIHzNse7ZzA/w+1Yl0/GXuHlQU4GFkNR2uXT2wPd+spN +LyDnj9E4nwJ2guH9HTERQuRUTjvo/oEe18oOgGsvt3rBVIe13oPhGwNhmxJ7PQtmnlJAUKrDCsKk +K3iJczRRNCaAq5gzx4U1g8RyZVoeUyEfdnH3od9YcbRbcXWTZ0ZivNcJtCdkHcLdfn6/IK7AS04b +sJ1KE87abQ1FxFsR5dMusfcroUNh62Ca4uZZUgDB6t5O/uCSCDV2hCmTRusExL1sRFR/dKECTD+D +MQ51gQZv9VJEcmAiLd7C91DcX5KnbESPZSUAqZzAjs9JwKeae1AXLYOx2Tl619GG+Syap4QerWGv +wAnS00y6CS1KBzGzac6g0rt7jdHfpyajjcTmjrXT+90Mt2qW+sVnBn99yfLbsPhZCEBNw+itC9r2 +TFCOyVqz2+LRul6nMdzEa+A4TY2JPnzAG4m5Vuc1ibElFV5TPKV67FBbSR9xRTR8TgdKKDBMA9Tb ++beGQ0YzzBZ3S0qrUuYPUBMncKes/yXiXB+juGj4d95RmYCiMNCixSm747QJvGJnJhs6HE4QLCK3 +i/QoJKl/IUG8WVV0AaZPUAk4ascJ8yc7tv+Ow+CFoi4bi6bzaTJtcMkhctVmPyZpE3flIPvy3GI+ +n6wkPi1h6n+owVgMiuPK64e2UhpN1DEFEWMaaLvObJ+wZ0uXR50O1FMY3PtSj8BHBna0By5gjgyJ +ym/dIeQyX++LNYgmJaJYX5lfTQ/VlWsfjIi7x1F6s68EH60YRQHQ/Sjou5uNR/rBIk/EByYDwm7h +O+8uR/5jC7Z53ftwHLDSP2+vqjO8pS09IGLMyjgK9qMNQCv/BykzMOBY/L/3Tb656LTOYdgJGteh +GITakBp5QLpGTNT4j54+GUlsCEAn1jXVQV5a87cDffah7pjMuNwod2OMXyRBWjnF0dnmLZbS2dKk +LkJGN2VeOm94HWfjZXitd9DIAfIN1dG6wQ0VPStd7cy/rSlUQf+FRbgR0VGWGFlQomeGqSoRgXWW +Dk7JXtBLgvdneHDhlnNzlrUiunJgIA1qEoCxyZ3JKF8/WvCQnmx0VOkOeBj7qrvFTGRrDxtWVEoi +aOWkx4E2+3wWgw3HEjGf8kEEqK9ewUHY8g/HRdSJir1HfxJfDinVzQCRGSgdKMo6LI8Bz0/ziUzq +L/v5EFThwDUr110+e5+lTcdUiBGzwY7rDbOZuWK1aToXpcvi4wtCsBPLUgB2jwd98KL2vLo+9RHg +5WQgXQKJFftbzcTTMB+3bemeL19TwHMFwSqXGvgf+GYN6Jy4qAYl2OC7fYGRNNKxyWTpFrvivU/S +HClDeD980IkwYQkwC41wn1PsSHvVbgfT56ZfzSYdOI4XncXHHLmnBKLHQtoTaWyESXMU/s6IOQzp +h/0EsfAFl21vPakAI7H5Q3x3aJSwVtuDIClJdg4rWeLm8JC5S56KG/g/52+bo1KNuu/kKZFB3tic +pr8qxq0kjFRZD8hgR8sU/hLSmDznrazfgxlIun07t5SgquSuDKIjEasqgI6FkdYBsT2X5od7MWYj +DTSszuu1zlT60VBZxg8L+e3tLHsz2BxOQ69TJYqkEWvFqnHrAMexo6JQYGb9RonpHmRhFsvq/Ktm +dWQrlLftmvYFXFHCbOohLnByGuu3tnSgNZF92pCkHGGZzcBuBZgm2LY8kJs+xxlUQJDFSgeNS2cd +lnGgqN5tHxY52Yhb5ypDB2LPYtLMIGftPoZp9aLvvm5lvChW5r2I/Zd6ZvXZvXODNqBSiefCUlNF +gmcW+6aDn2Pua7QckR3W+pvQ/Dmt413A/B0DY/I4+VJOtgRHdqndnzjJ6mhgPu3NXh94dF0u1JQd +9DHD+17zOBZhOqoYIOghNVeFxyCtphNNM2RU8jM8MNV4wPFwPEMgFlHeizFsDDWqsqT/ddVStxbS +JeOQHXCjXQ2sK/hhmMsiWLq7FxQz2frkTrGx22bzyjAtcdIQtvnNlj9Ty8hTZwJz2VyVMsQeDbYx +STTsb3KcA93SLnrf/Y3LHORVjsefU4goUZ7VhPW8CNoiE0ml4tULl2xeUr+ERtfMSXK/TpENYZMg +61A9ouv7SM10U3G/nKlx7NbKKt8J8oR3fHIW2CLhe2FKBNX4XmkQyeDgrh6wdC+tX2afMiD9cGm1 +1kNdPcdg4OT1mBZ0QmcgJaqw8H/OE9n+45tKzqXzbDZ5GW4TgAW7LYeFPl7w3mdeYY2kTWdVVgXi +UGUUo1JBxOjHHzRc9IfeGID1l/Zynqn/aIKrm1a9attQbfGgQAC12m7CWAw1EpJJnAwV+rcHtSG+ +/pvpixpRG2rD0KXxRSMwX82cRgGhhnJgxNmClzX2cs+mw4Btziu8JIiHL/2BbyvcAc1PfK/WE3CK +u9xM2AAXMdgRvCZ0mRp7HE4BDnzYGVLZl/z+ImhxNVYfQFLvlwgeiuYBYsFqa2EzT0nuE32lioKj +dQjp9j/lqLzo/d/H2A1ke0l4tAjHyEHbBwex9TnCWWlmDYUZuz4PPLPpdcCPWA1QKY397GKTNggy +WuGvtAub5RZKGC9CSTU36LQArCDw7wegOyl4XwRZW0QEFPqQv/6uc414Wug22YVDVDBOkQeWi4KH +WKzGK0Z55cSKw3NzgLVNjJgDW7rD8tHBboksxHSS48onCIifaMDG7XWZfUUQPOqR3Km+D2gJr2R6 +YvUj9JCB9K3RC6eaOTdMCYZI3wB88uyLSwgbV+seC1g9bPT5h6KsYxvdrUZ/pT/fxAfpUFZjdko5 +1HgktdOkAnxCoAT7ZWDSV2ghDFTLeAzmIfZEp2ohV6UfbNC3F+pneremDeMMELK5Qog8Ivq/0v2k +l/N++XdhO62cXUjpvQKok73H8Lnubji7DYt96G8Q6E6U70M5v1Dez6G1VRXtEk9fPfpnrvp9616d +CvMR5gByDteZFmLaCszFqfgj2/SKVMtPd6043BPCJEbPPFLeDSwZLBLMBxFGV3Bv9dhPcEzT8ymB +8oW/aVHsPJP202PKNTOwL8jMGnppskwQHuahWEuCaPEdOukdAH9vre17s/Q477iEabCsn7oaIVtV +Q/D5XhM5Wt4E9pKxz8lmM6h3x23wLuUH8mDyLelFZd5IaTla+yw7oV11J1NKN32kkXOtuA9S8H6d +nN8t9KcOd+nIOPW+s1A/4lNwB5tM63NzV0nhZREQtVxXRGyEwVjrNLqKSpv2S6qZkuIRFQJfRe50 +jF9Mj5qK8ao2ICAi66pI7DAWDrm/vAATZBtXJi6j5QV9XG8LEODw2n+rcNAPoaIvkdROoZHi1MVH +86WLjD2Uq1j8T8p82NHRYpi77FVlKdDwu7MddakRcbW/DJThVNoGSzhabzzOC9Sz/mw5YRxNGROF +Ym7nhthTPFyJB2T4jWenwK8qfQXSU3R79Xy6A2au0bjnQHZ5YuNcvJTznQLZJtzNlKM3irqUAXNn +qLcI7KPS2vKBgDENFQoAFreuv8TsCRhTAyEOQdYD7Rs+Ik8XuucCivwA7Wy/VTYOXmkt33wNrTPu +i0G6An9xWZE3gzdNLOk8d41xYmmIfUwomm8gDlOO9iWfZSkQI/OeShP0vZfZgPR8/AXbmgcjyZy4 +tNb/WUGhW5B9StXcQbUGoNK82J2Yxo2YCcfDRIRyJ2LLbjv0V8UHea8VTRjNbr1kEhpQYlEvw5A2 +KAE3EY1yxRXkyxt7d8joHVy/G3M8HjLoF/mPv/Kedc0x0kGN2aNIwPy1KL1HZtq0l1YJ56zeaf/I +U2fnFfOaY9mSpzVgsW/74ap9+YDEUrVsnm6FWMVqD7ph/lcMQNh7sSebOQguygdDeSpUa1C+K+zg +Gth3/pO98x/Z0tAJUvRooPeiX1iZwp/uJHYob6/4lQlyAEgVep5NE5pDrvKNS7QcXZBcU+SZ6WBN +sS2uL8P+A4W9PNkaeG0feu/829IiyMpjMGRiQlEsdXKBKj8l2amtwfOjtwIi56cqGrElYupCIUKg +DmH3u2Kf6pL8lvqrTbkK2aaUdG7RJXa81xqa/Qa8qW+4m6BFj9fSz1U6t8DHfL+dI8NJIbwr6BBL +tAQFxBqew4VVCtCmty4uAqPY48JrOua1LUkv7Og80GvqD03O5VwUTlqp36PMqEymSsXROvn+E42h +1P3Qy0jMRJXbv81DWjdoEqc5UtRFFgovqG/pSlIK3kbiYXyNeBDex9zE4zFBAgg9Xyylxqb3sKH/ +VNEAKsMQs9zUT25Qbprh983W6O5qoW5OTmQre2dT0EHCBF43jsb4On5rS2SfDaGK1AwG057ntW2I +7ggwJLBJrJjNY28EYYNM35IjskxIoYgyc/DAkZf5TLE7SUthezSkXinQ5FmAssQDBE+JQ80NhPVp +3fLMl7zHDBnvMQZPNYa+GSyoz7eI34BeD1qN/szEjpiEuOzAUnQffaEPSZ7Z7SoDxQ/Djw+2TJPG +3a4STozjCzDg5P0hrHCxcbICrLTSQGz1KCS1UAForLOS/sjULN/HeZVPR6Dmn8t+49FdsYb+ZNuR +nwvK9iikYTjuc2DrE9FyGut2fH9Pk0NDBjfEjdpZRSL91kxyteWaSgzojP9fVEBB4jEXz1NTYeLR +BUCWerA2VE1BtHaqg861KhGAVJI61Z4pSIq1QTgeqAfSm5/h37S1sMnAwiyhWJXS1w5cAOzYDaIa +ekUOiC0ua/DaFOSY8D4ddwjuUUtMFK5gAY+QZ7DaTK4pvIxuQGOLWZTaBic8nUXY9Quft897uMF/ +ylKjD1odV9dA63qSaLxB7emUr96SEOxTYmQMgIZ7hL0Z16JHHtZHWu1tDoiqcsuOCZW0cw+d/Wkr +z6IECR0VkR4rsP9XtyvPa0QlldrxvygAbN60Em0euwSLfVzOXZhHy3LsvxNIuxaCe8ytUke0TGCi +PKGXNevLya1N91z54uDxve0kegE/86ZzqR49DegnLwCvfHDUJ69HjYrxqG2ppAs5Mh4vFSPAalm3 +Fsr+FprqwkXryzH/lMtezpr6UEEDRNl1Z8J+quiXxLRv71/iYYIeudsTGK/fmi2xSh/JBAVuy7e+ +06QSzVhhwK7GZBrUVOlXPMlsbqtFeAn4rpUhA25/DmH8vvcuoCLqGeq4DrCEw9sQvi3/eoQQOYrr +mn/clJs8E5pTSXLcD+Uce4rCmxd/2VUmryXshj5OKnGY1Ay2W1qSIZKkk5ZHW6nwdVJeQi1x0EYZ +meCPT4sTe9rDolPmG+H3hXTSKihkbLaul/IkwJXdywFDNH2uogd1bB7F55dnVNtW2tYshBD+gw+r +xhCiEhSMvj/ufrBykYSnd6k/7QWhttF6+sRJv8C2iRfpuld943NLpia0Wu1ci+1C2Q12pEawKfMN +pJNId45asIcLiL8dGg7Th4xitqSrtIJABQ89TEOR3mm3vC1sMg+NArzEs0r2JJFSE2ur62tQxIkV +G95iMXmZIpEaqsbXe7rE63YRsSlKIC/lcBQIomLDzNIkPZAlPNWFNoSozYZXN/RHObiFx+aBTeXd +IPjvTOT5fP7f4GqoTC6U92n6Lp+sdQXB7kU46oJcQqocfeWIBenL6mI39CRncrYq95TjxWcV7I9D +Vq+3mQruQ7cOArUZ1nrE6VKGiTQht3qiG1UroXKQ7Q2Fp8bKM9rZ1EKYA8hs/dsxWoRuRL7V4zcO +mMhUiRoonj8QIYUjeuQWEuIWRbxnM6Od01bLTR4caUeSnrOEPhwN7f0YCQq8CJvy13361plyZffR +JpVJpJXplpLxUHmHGC0WaZeoK8sdfiAmT/SCsJX8FGuuFwB6Grya8rqdNWTVIM5JOA5NddylIPi8 +u3v/0zHDVwQSTfcyWqgmQ+esjB3q7bbqJC4DkIUxv+uxmq56YrDQjUBYx4b9k/jpAfzDdPb06cV5 +Pg/agkYxLUppwEc4lFIFUJub6fNdYN3mjlGB3RZus9LY3Wx3jCoOvtVLGlleQ99MxDGA99/8Xfv5 +Pn4xTSrS3LR71H1qyrRaSo/zwOTXTdLw/ZKQPlYiL7RXWVgeqitTEOjpyveZ7VtTiyNen7aZiEtP +oBFFqyq6ABtOXQyGDlrXsKEirUkyN/zH3YniLjkrW8XjXVAldvwA4oZVKHfqfQ+li5adb0K/IOjj +yRh4/G6RTC0iaW2qiHF/NUnzE/yRGC6wD9ufvQZ+sE3h8zXxs1E5i/uZHLqhzr+RYXOW3kQ3pYpe +/usSz+nXzC14hHrvVpa120b+K3VxljD1u2UgsXWkKUx+LmISnAHpuuZqiKU2Vc3Ske+qN06/mA1y +suFEPakY9MLpEUzI8pAQPoVWqMpvUI7zTMnKr9R4cHK6baNR9orwbv1TtdEANWafUrv0AqN7plr6 +1oxzu4FgVbOXfCGVqKfks/yVRD7+IC9OAnEq/Am7j2tXgWUw2lJ1ePRRJiT6mJcAdTf+nRhHsagq +nj7tBGykojtOj0kfX66wIDkB5JNHEKlfoz9XgDM9g00Pg0YWEwwjhMtrDO3I1++1b1DuqEklczGL +Ycx/oxvqg051+bm1eLa2pldoaFqtlTshqwQDcUS/z2/0vor9O9yfVATkqAPzE4RY2WlNg+I1Fn1K +hNnC1Zd6HP9OBZRTQ1w8989PFGn/jiAQlXn9d/pgaDkL2i3Iey01dKWnkh9OgdrmPkuM9kyArpLU ++cW/M5z/alBJgzY/dFLKPFaIJYFW7QPGsRDpzZjNrcW/1+w17GOao8ujuLVwJGesrGjQHrFUQHaP +abNP+0U6cBO2XKu9h2XTEkLvA3j8uL530kmqb8mdxkvNVAdUMaW5t8lQaTVjAvcREZcAU1qIeFYO +7ttNbUa0HFQFNA2R6hmRMPq8hf7RmN1Jh68JRDYPUgzyUvKcNBM2wxSsmG2m81Un34yPbRBpkuCi +k8uT/7RAbUH2UTVWlofO9AUOQfdX+TxUNmAuVmElL1kGp3W/DSRY+r9E2neNiW2UsFFpvB4FECvO +NfsjVkH+5iTwduv+8FQAYU7/ws16qKLIMafzFQvExwHh3bU60j9Ts8D+f0Iyrn07EohdNX3k2Rhe +4R7xmOvlNdXef3Itw42PIcenclcvY9EOqQMMQEG+Jf+L08W6cWmhJyHQp3cEBFQyBC4Ohg6NyCx/ +vb3fzFW6jfzQoUshP2baM/TXRQeUxJ6tCWxfg24Eaan7vHFpK1BiIu6RLArfKszp/GQP5d6eTUvI +kmGTi9ft/t30MvjkO1FJI9yc0c8VI5HHOry2LZiilbOeHXBKYvRAjsoRA3F1FyWIOOApwfXh96cj +NfZZ2op/ASFD7cs/ddtTnF+8vMWM0GbIkYBrB79WIMWxeLZYIfo8Wo6QbLO5zYvtGjaLwTkuUqci +BdiWPd4m5VkFT3QZqPrGRaeoCqCEq24GV5P+pThEhfIRgJIzQZ6DoACvEcqcASNcxpvCB5u8AE0A +ob40JI+l4/NnTL/iyDku1qd8ViSQu3uhwlHpqMwFMIaf09RWWfN6HbpKRDwXciqWx7Tx+6xWTti6 +IRc53S+Yq5WA5QfzlB5WcWc1SQ5UhBU7Tdr6SLIk+BrQwn9uLPcTOpeKLk/fSoacxJxlcizwX2s+ +M3iKEHB7zHdpqqdNpiXEixEPA3PI5XIycCDtM5x9Oxh0VFJjl0fzZi3PgGYjvrLNGjuJGElZmm5s +TJQbyCtkbJ5hutNgvf6h2PVjcNZbZR8nQSFlKSOH7GOqZ49fUiikzdvCaki6Xf1RHqd2vAMBQAiU +0rvXEWV+m771JsWe/Yorpj0F57b+TXk6UJE40KpPPjE0HiQneuxrfDecjgpJM2/SzzsgTJ+4L/Ee +g/ARl4WZdDOHcC6gEOpCJYbNVHcPynbC/yY2RGFyREAWQiqu4M6Fpi1Ano0ouWMLvj3XMBvZocGR +/vVVBzKPrUQu0///0GBuL3RulizVLtCqUhsGZ6BngljE9GDykXo+8xFlSBC+w7Xk4nITiqjOEMM4 +6Ah3JU6eA/JGofOJ3ygizAGRqx6W8BswaHBh5EPBexmU8x5qV7Vf3TDvJBSGU8Jqcks5fmzJGxam +WVJ39HPN8VWtl8ln3rKtkTbott/OmPqfyrmeA6I6GyuKNwJtsLG7S23ZxXNFl6ecBUwNFl7LdFjc +RjnVZ21gSoVY/a0jHLbtFfgQFKyfnTTnGomhMNzFeXcMycaJsDj/AVrnJJ6i8Z2uw3qDIaSZlLPK +Pn4MK7ZvKfpCc/nIhJaQz4QGDpe348UqzcnhGkpr91t+xTg/Kbfopxy3TfyljP6Vb4lzumJFlr0e +lR7oI9aUaHtkAyhoj8qx2CREg4WhZub+KgETzzsX4DMBSrclPcDEBLvnEuLEGio9SHXGCDgjupzs +D83bBeAxyGhV9A+oHUKTVqgiEwEt6yh+99gHIJahsja1ajn7Yi5xlDydrNLG0eTSX2PCKM9EJMh5 +CuNWryNqS7RTA6rolqEXkClGxf9u5XDXN9zd5XR915sXaXfONR433yVilz/U73y0vVMNUIsPm6NG +MNSIQKLGoM4W7arOLsiHhJrkP9BhLoyT3+99iYhJuPG/LeeDUKOgSJJMAqoUpc9IzNL764eoQ+0Q +nHvC/VkXo4OJ2/43C4EqQUOoL0qm6mAra6xfssgrHgEhTA6WE8LPuHRkl/jCSuI0ACGZz5AHZhK0 +hq3NZLmv7FZFTW1fdRr2s5PC0/fdaGjMFP1SN3zgrGVEWMOZk57wONc437KPqZaAmb61dQAiWWz8 +Eyr1Ox5B9UAAf+VzZWlV9/9Jqe6JGdAumTKrN31u6v8kXm+6LXnwCfObp2PL7A3HVWbwsLfQsYc7 +Lvf1Jm917oMTFnIrrZ81I3VJSsOCBcHzWpfVIdC6xHDRV1hG3Oj5AtAajupKcrpCrobSo1DT4IN0 +H5fUiMHviqTi75cZKeew+sn/f1FPhVMQELxU2uVhTc32Zvgl+Ax/G2uuwxiFAB08+hJ7sZ/1cMU1 +Ft5biUcalq25YtGbLRlHoV2+PBCUnBfjphMDuaZClum+SqbTqWmjfZVNb0LpX7RXe7cOu3kVnTF5 +cxlKUwpLVt4jZuaM/yZWVti2/+MvRLeAIL0TI8yi0SleQdIkByICEfRqjvVagbuZvRZGmcetPwoo +9JVH4vz6J0WnXtPRp031hMKMbB24JgJz2t1aCsaFOb0Gt5C6zi//yqTIosp9oQLhBycyJuWgQKvD +Wwmn/WbGOHr9sfZqiyKbWDEi003Pj93JGBD65mLmt6Nb3yGPiowS9Q1dLBArzRC5H6V5nb5YWLln +O8631+DoXY2gdQKsi7oDbHdKNAKeNEc6qxjsbNH+o0mrioc7/t+ZI632o/YX7+qAetWHAuZvsUbE +5nq+HJy9ogsUsFHjJ09IBknSauE/ScUQVO9kIl2JHaEKi46wNPdJ2mPEyohWKzfhsnlmg1eVC53v +YDj5ebh5sYBRyWbOhgmJQBBr1sGimLvg1+jiil8LCOAYUuvaBp1puXjiEB+NcALFDifzIUTjInby +QwpORypd8z8jBIoIqwu/K5TfnjLRwC6pBhtbJocjvZNKZE1mAIATwt4eY+5p5BHgD0xrXB1+jF1j +PxPJIPEZooM75j3p61t/MOGKNHXVmtznCXpkUe854448jhf0twJ7I+Pd/2HXDUX++FL5IbI/sWV4 +YjwVQ/x504UDj/xisqnKSSd9offsZsIQPAJLFrHARKcB1QEjXfi979s/oPIGh1fUdpA8h295jXqB +upQ1ou9BdH5Cc/E8jDVGntVNjJZXEDmtkUilaePwY1aVU5D855bwK4CG2JGr1P0OkD95qX+qBPSY +eI7EZ6EhvcC1pFN5Ei6v1sannusCmdQAFp/JHY7/4S8bHfTYBqGgMVWkZFMJFJu9cehOd28EltPf +9JHk2NsPz8U/Ql5OkCOhsKgKUJy/xL6qbJQXMRQPCWJeD0NjZLaw43V4UffVLotET+8H05r89hOQ +NEwsrnVc1Dno6oX/cuMY8KVSAUe9YngzC0Nh3RH3phj1vJxH+K9iVHvutcM7aP/8OHeNTkUMKqc6 +m1onz26XlmsR3pFn0XD6HHvSBi0LJEWQ2oAuCOPhglBnrPqiboozWfVvK4iF+K7X7H6q3j6sdX/6 +rLBVSXcec3/lnExS26e5ADqjWActNMsomOTrE6wGvkSVFvKdtj/KNnq9EyNM30BInvFRSHoHXsDm +Qc7ekE7F13rhf66kp7CRJ4xeGWXNAEo7lDxExFlL/tvJoPHDFjYDib1AdXw3dx/xslI/cjU+mOFR +lrJ5oUlOSw0vUXNN1YxvCXtdcEe5hOmuxdYaAIir+mN8/cLiDQnOQ9GrgncRFs5bVEMY4Iydtoco +zE9b//jnPEs8CRzLEuD/Vb/GCA8rkLGhnyLoD1j60Ju065HCRmdVmNIokNblsDAsoQkjfC6O56hM +mpLHwhwoZP4BpE2fzLqC8adny9ChDE07xkP2SljuMTOtPBSqHv9c48r/uAG/Nal/CQOSm1b4cuS0 +ai3V4ZcRd80dvEJdB4Bc0LZ6laD9EQ8oOZdU4aThujAyi2Ug85Eelj/g74n28/GsCxFa9u1ptIw8 +0Y0D13SWOpDwiMTrQ40ZRBxLw3jxUy0clMLR0n8WzvZU2aSJzKHsnh1F98sMFR0BVZ4h61XgTNkL +ArCOPVcCYdpgu7dwuPccoP8TSzOJqnHjhDnrVfL8fYM7n3tdgaymRPjGJtL/Py7D0SFF01eUb/Hw +gAUnHASPtWj4gv6SnUXMfgnQC2PVJfrlNHp8pL7aeSqMqJ+MfsrUW9n6ZEaYNaq0OJU7dQrTeso2 +ZFdGIp6IASsxA1RvW0FetD23kja4w+USRtvwkmQBKQAE5L8UFwpayKJcGkOmHn5vx98C7nPfXG8r +TzixRSaVFtQH3tz1zu3otDzFoMhRCkP4YRlrM8ovgFK72DMAMMpvLD0XJ79is+0bx3h0CHJdVFgy +LZNUYAjcsllq+oUZ2cTXUcLVYg9ltBMKr0T2fhGLlkLaX9dutvagO4/9P7emnvydJlBlGrfZ/fwO +8KdnGjX73wqMdDb5kvfz2q6y+u3KVlUJ9cMblG08canF+v4Ri3Rt8/1/VMH5rW5O7G/WyzoUNBB8 +Lac3emCD+Kb1hs7vkiZfxsOYpk+JTdJmEAITlfw4fOP1GC4FRt6hZI9ESrblGLp9ydgm2iXGQGV6 +LS/3DLYA326DEcykMh9JmLXWgkBCcz79o8kDUGzQCZs0blBvy2qVgBEclAjZUtls9Tgv/WWpuMcF +XoFUV+Eh1Kq7B8+IBr6etbrxAZ70pEkC8Glvy31oWmSmsO2TybCtsfH3x+5cVTmX3+NASHnHf70H +h8kDWazGUF7jETJng7nMOSZLC+PKmhqulagB93g/cWXCzVkdz0fP/p8Xfkh0Vjk1LvkyLjC0lbo4 +z8RYhih85H+Uq5ToB0sy4GZrTDQkjcVC44mjb8SMtbXAymAnpTmpHz1ptKPZKrM4vE9XIvZvVzpK +/Reo8Cd7LdByBgqtPP5FrMJGdTMVvRQQUPoxRFU8MBagjglT8IEEofS8uj7gB98vrcphs1lvUx7W +uha4MFUPABxW1c42z8IAXb7jDSVYEj1mhmCVAnRSwmYouNo/dlbzHJsCxWSoW6DHt2p6h+wY2+U9 +UABT5es8xU2Fd8aJFIy/J46btMGMoRlKKoBqX8GBumRVBEb3blAZ+aylxjqFL3MUlSsQfCaA7P9E +88BiaPcqVRtX3NFEohPZhmI17qNHKE14fMtzFUaGulYLn9W6RBk0y62gAkRaqpWsv78C9K1wehqk +a9lpFa4EttB+kJgOXklh5DVUcKYkkk20iLe+wg1M1Qy0AqD8ZccU1b9eBnC46CvYW1kM3/fmY8ij +Sxm8Iw/jVLySpXvFJ7BrrxwkoFiuxkcjyWKQlVhTq/n/VvgivEodfSENC0KcYPq3qJ0F2ezlJwEU +ZVtafC7VxU4QPz4rhr2Z6Oq8zYrbRa1dLx2IP0DNUpCZs0fPbsOaYOzNo6PAAncJQ7C2uWkJ078j +3cVvyJNEb1p58QQMm6Q3RxCjj4yOk3SNHWFEMZFCWsEYfNRwEIvlGNda7XYVV//XCWymyCoHDV8D +HTqp5jrokBPyoR77VpTc0d8G4rVebNwccDUCqDpgrXeDsb4m1qIPznKkL6n0ECN95Fp9l4uOLwcr +0F4lzfjC712ymWJSEB6UaJdoYSYak85cZt7XCblQHqhhuoYiA1rGUwXIaRz/hj1eL4hq+SD1P9J/ +PZsdjYtiJQANC+EjwU6nnizMJyxh3O9w4WGHBag5X7EpqrCWaAQz1FKYi/rG0Wy9qsZ2Z1tjjP0U +E5kMoK+GjtHeYz5Mb7Lvwwj/m7IVkjGMaWUl7C/Ah8FMSbFgVm7lf1080kYvFm63qQv20uXJCD+c +xFlLA9xXMvSVmwUQav6frKyoeqxDv4m0Qdz0wQvhBp/DA7txbipxNPOI7XVqJwTFONeHWeKN3MSq +bVTEktLD3pVXKAM3ZrKFXVhIvkB0YT7JrKbrr+nB5QdkbRtaH2MZzGWkYVDxhz3yf8KZs2RG1JhW +OC23OfAnUQY2ZucNn/5JvQM7G7pCVBR0b4o0viYBIF8ozt0CqFopdkpYSLW4EreY6JRGDCQxc31U +Tuq5Ihl6E/AFlO2IHXbRWhqRy4LsnO1M40ei4SsWTAD8nN4D/+JIQTjdLN/TcSKUewzOlGujiDtA +U88FODh+pwV/2UBHrPptcDHY1qbKdvlUkDkhYNZ9vkfo4bjgQ9Yylcks8s/iWWiMybp/k1VzfFrc +/1gSXUtMYl5DM++F8rS/LGPfknhM9kR4Xsz3VB/X7EPAJDWxrmmvsRKwALh10B0Ftqt9w6q0weyX +YWiVCrLCyeMD469f23QBOxdz/BwuJvgfGQdZPSoYpt3UzeQxoofSfrKiCyBYogMqBmu9nKKh/CxJ +1VaE7rMKWcDKjKfq2Q63t8CP5gWnDO1ff0FnuIYGgZqnrXuxFjwmUG8SRn2lbyFVwqlfjHcqEi4f +Hf1WR8sm4JhCjp0aGJTm8aL95opZcl+hWr1FT3JLU52VNnOEE7Y++uJzDOaOnLvpVRdyZ6VGbEgO +8H/UGqPydb9ydOBOEeQnwd2th3092nKFIAe0TY7iZf4biEGKkyZVb8V3f2cBxmbIdA59ATKXg3kB +kF+0dd6LBxvJnkisvE20EHPQ8wuo/VCrXPKk9PukIlUxEGBfwTBarFH8UYdv+Xqnh/6L0D7m1xCE +grr9B0ib0LJ6zRMRfc8j6eb1AvP0IiKrDYWj2puhvz12R/UoYFpZDRt081OzP+jtgQufqpRJDyiF +NLUDsftuPa8uRTvw/mJqS/v6Vo+BA3AjK9vRxQx96fnz0/PXCpOx/ELrr51rSD1YkoxLXNBKfWOt +i0FB/OEtg34tK7aN5Qz7RODpvHqBWdXsH1L8hHx12XMe2iMqcoLWLtll93ruXDdBsCecflNZA3+7 +7IZ3BiDprhl3UETKmiVMhk2xMjEIBJgQ05EXmIkTBuPjcTYNT/niXIx42sFrntVBwlwvkJ0eJboB +IEQrsR9Z2zSJ6Svw/jLnQEpgZQyBYqvHDqX2AYYb0slnUcum3Ps1odyAe99VdJYA49O3sejpuPfJ +1HVYGvP8o5tT/+sVG8uMzZzuZLQMJnsW9ryDCh/evpkXr4/ubH3YMl2ecTAMmYZim1P+moHEZoMX +PrLgAOlLrNbsh8v3TEHaNbylHcbJ6TdF8vT6Y8SwEe2QSmMa4lA7Lt6TlAqxxvczU+vhMQo0oCdI +eX2Wuo0sw+eQ4LZEVLbp5nMaoikIpQIVWKnJqZdcPH9GwLS/dRXn+MhJ+AUqwAhvUbju0J+aNYB9 +1zBm22KGB/KdhFIwgnAaNcrzGvj20ydlbeqR2ujoYteMWLQEYMPGw86CAAy+L32+bsxcSSVdpQZc +I2ykON5PRmEHFzyG7/+/ZiFLQRBqoVY7fjm/aMhgbFWMMPbaws8JXkZNQz0jxQKBjraFm2Bbxc4d +wmCdvfGX/UKC4y64lu6B7weJRQvDL095YlotFvK1opx3aYHcawBWVUUEJfSoouNjdsOrtg0gUHtP +kHIdl0Vdl7mnnVRA8IIqiD+y07OlhPZkhWhbLso/2sBdneFTMnLwa6O05QzRUfdOPIm0NR+j3l5x +okBg4/8k26V/fxCLhh+aSymFpGvhkfSNrJcygyZ7Sp9WPESl07h5akTkrf+r7omHjoE4rKwRXctf +OnARMj31Xd9iy9P9iJEWocCIv02Tc4eW4QlVPqaCucX4EXcz9K2vme1zT/bydnOPYkBGdlH2AU2l +gsaD8KoKKNMDNLM8DkFEv/uQuKrMi40EMaonffmnGQpJ4cYSZVRcHSOBvQntjICCvUI+4/g4MIkK ++1XUth5HqFmjbvUmmxb+6LKHMYYDtkgQixAGAInxjyzMxvwv0LCmXsr2Fh9NZ80N9Xmpi/qsQzZj +8BM4DUZIldq/cS9uguQrbkiG5qbc1Hp1cwQD+SwIEiW7ghc8S2L+zJaotV5+QYn/+T5MammOai2f +QR1S4Va9vsyOREchU0XvJ3JRa7qiP07DQF8tPdINGnn0dLvnsA/63MYl+3QUOsowg11U4oUCEi9l +A+qfNGNZkMlAHjLIXLZynMp3C2KURpPw2lSeshvTnLmnSe2Sq8pBqj1vdScnyn6hRjDKXfHJST0e +FPUL5Y6LwisCwdrqm/7FsVnou+foL+xTRt9yBC2vN7pMIk5xIhfFYQvuFtQaAPTTn2B67V7ogI6s +42sopG251VRrcjie2tcMBl8sgV5z9LDD82mXUYxY8Ou5+M1UZnLgOE5ASkHJFKf3e+35N76wD4rI +WQ63el1Dl/qbuRT+ajnH/rT4UwRvRxp6nWYOrLdUV3BsBvk/+PCr5hRccR5FXRUCrErMwQtNCc0g +WW0rxN9I4oRybMG3Td84J87nvspmN+ZmOAs2g/rnqir4I701wq8/0l2EUFkYjtUn1WIIiu6GN6/T +WBmN4kegx/tRJvDwSZDT20q+ZB+2AJU3VdYM5qkLTZve/BzdLM6xXNWF6oS56MgRugDEoc/vv6tT +uaV0W1szcHh69Jj5H97pT6BJj0Kr7FNcNaUohyM+WS9nCv2xZciAki90eZHZH19NywBPLmLNLbz9 +xBvr7es015/hy5+ND2q2hcA4uC1mnm2sz2orUuYInHor7qux302tXIg+BbcNf38Sd1Bj2Tr9Zcsb +5mtar3KmAEQ99yYhk3fAz3KjR5W7e7N4okQxGlsGUvm+iFOBFiNUPM3D4Rzg+ZyapbgcITCjXKDa +d9iC2aTaw814CH0wTaykJndK00ID7RcqnH5GOvNPukkmF/+v/hVMwkMYp7Zs9cfz0ROD712jctnu +J+xxQaI5X09/dGQIHYKxRJuctFFfw9R1Jvdc46VBzFr04KH0X3cBkX4zudynyucdQA6PST7JJj29 +q9/tyx23cl4i2HtZ9UDEiJ1bfxBLS7fGmQyi0aMSAdODuzhSV1ZUKm38FgkNNWvwginbwJwB7yx5 +l3v0CqNflpZI6moZJM7Y4KpBKlzz+ufF3sf38mS8SSO6+eUYbQgz4Bn5PfAegfHb9FA9zEdVdCXv +Sd/hcnVenp2VXJVc4Aq3zElwV0yoDylepi9GdVsTlmI43apsmx9Dhe2JvBoXdCFg3nF+yN48o4VM +FVUa0kUN4YNZeoKtr+aWh/seVMDZIWWtpjymLhnBcofn7+aGDhoNPMgd+YdfmWQXdF2JiKMfS+hk +1QLxaCJf0PRr+k3cfiNyTaGjJ+D6SUfS+WJYLuoGgImnUhqW7BPkpg2cbT3CmSjy1BJvtHFxby/Q +7V1kkopgLmBMcDLi/9NTMvOCZQmdUSME1i7R2klB6CMuuDkanTzdrA9MZNp4Gkzi/v5uPhNICZX4 +xgGRxqaXRXmljz9kvzgB1dfnp1sKy5J6YzGxtCzhPEbM1675wvyFKQmaWcImuMTPP8sPCJjR7tuf +KjyfQOsUtwd8N8aICRfrsn9Oc88kmJLv7jIjzNZbRqMmiUtPPccGCWsrbZ2rZKdCKTFwbgHwYOKC +KJL4b8bGSCOLJnJjy2pZNUbI7ttRpQwwNCNuul2N4XVFEBfS2Q2MkURLLoj2nIbqtscezHGrSMZK +SPA2K48DmhhyZwo1NwiL7UnT0l5BtuPihLbGLIXAMnATzKNKQvFr4tVBnaxi/MO/TdW1NssUknU2 +GAD9BLciJOKB9NGK7wG6RbXaY1bPYZb4hJkjcHEiNhjfB3NxRttz8o9Tw05Gm96darPmYkV5w21e +poApzPj5myZfGWxzqri7GfQGEiG4MuJFQXNlCBXxmd6j3F2Vynw2C/0zoV5o2GZL1+LAYjAPihV/ +E1Lr+2EbLx9b4rCx8rCfuHY0d+8RiCzSgDvHHE/3mY5p1bvDgDT75XryY+RAwTFb59KIEOI8sWl8 +0DuIXNJLh2KNG6GKPiC+19ZBpHdy+dTi9cKQub4gXFpaVwS9OPcAGCbLDHOh9lzRIlUoBG2zv8Q2 +rMjozPkz7NMdmnQM//w6h2W7bnVWMsdex6Ji5TDfvAK5EfEnWj6XFTasUstlIZHatC7g1NZ2s1IJ +DeTNqL3Y289URNIYTps8KIqPXFGHFd0usjmmZ+Lawu5WcdBz8wG03Fa3kuEaYOe0L7mqiZCt0o51 +tL5fwF3M/Kt580uPdiuKJ8Anl1nwyGSvJc8lzejDjNTxiWnTVBH9vbQ/A6KEn9rXz1k4igUZog5a +Idi/eQoyp8z7nc/MTe3c1a7BZwC5IvIMHLW3Vb1jc6rASvyxoYVWmsNm3YCxv7VXsONNeysWNXNR +Es4w87fH4b59QbtUEDEU6ujQWxtVGoKJ5xPb9XsNnG+lHgm3C4X0Qiq9qf6qZ4/l2JMLmWGz7yiF +wiVRMAUabXidfy+wJxwJNnTt57QRuunb7IN26ixGg9EoA4DudsU2nCxuQptCAPXAtu0+vxzz97YV +P2pa3HMAIrLL6KmGFwfWhRTdMnZQX1Ze0/o16Bh4v09FgOQhmMh3IVzYNQxDbPsdngDGqO8UYd8E +oASP6rlnNYsv4UXrbO+uiJ8vJub6SxoyDQOkEuyoMX7wm6QvP4X3YkS8tpxD1f4lJt8fMtL62cLo +N5s3H4fBegQcLrM4pS5lGdQpMTLSBGxxKvXwG2J+tROOShn+eSQuf9I309iei/im1Quady+a+FFf +25j9/prXTuU0Wcmw4oMKIiowrLGfZSVRW+6d9cnenZvmR84iPBjwNKNGYFuPQntsUJ03FKFT+yRU +luE1AZlZoI0I7w4+6Y7//mpPardfollF34ftmeMrWGuYU4IciOPhdCP4+UevN77JFW3PvJ3oPR+B +DAWL9g+19EIr8A/K06KKQlV1Viw5oooKQccbRfBz++Xou8GaFuV174+HSbPEU5XwysqTzCxegTYI +abjM/oVJcOxAg1p31dO6ltibYJfrQmFMLBrWpfwb5biobX4G1OiC6Ou2UggXIXsZO2Q2sDGujeLu +wMEQhCXWqY0PkZ7k+y146V8ipsbnoBjfkhI+JfBnw2dcNP73PrkyA6QsBUPW4cxoKukt1zzF9IZX +6xACoRKTQa58UwguCsRcncVNdzjIDErhNU50QtWaAJ4FSPECCLc348mjRl+XAn0+Ozy77U7BQ/yo +8htiyrT+G31XeeGbXck4+B4Daczte+HUNoRRISeYaNkGiOQuo5qK4AclCuNZZoFaRzp7N1Fog/dR +gsJwoI4kx/vdXd1ti89HcwZFH/FGDLfkoR7Xmy9Bx1p8yWlfr7ecs+4xEc5073av+Qin7yJ7/hkk +wva2KB/9ssX+xqCbJ2j9PtjsEQ+z6kte+lQeoWDwg9PAjB8eHPH8ZE/2vpO9J1Bnotdzn47A2e8/ +Dx2CiNkg0SfjOK7EH8mDoAC6ASEnZYHWrwsf7521GA2wf0D7mJuWanokr6m2DBorbLN0tMyM0LbT +bd7TSICSWOYXC96GS6iw/pk2zlpywNrl2KLbLfSoTu4kjY62+Y1FUB0RI6UsE5FQlGV4ZIgIz9Vi +prh6LvqYzjLmf7Uks5lgg1OXo6mlk8bRJiAg8kGqPNp/7jYPMlx+u0wNdQMqF+eMSODfRMgbHQls +2JSIURABnQUtRxVQn7LKNo+auIITm1nyhp8UbG7s3UkI4TOMwt04iQj/5oLEMfhLZanEJVf7xUMm +S2WQeYQ6OuwamDwYtVv5D2/GWRPNDscLM/gI+AJzHnROIwBYVMEwVkWDP4Ow8MpCYAwMxcNFV66K +6cTXNd0roJQWmQAG3fyKDlf3uOQE4yAPBUUYwBpeEc+pcxlF3V5pGZBnNX045Mhk+90b7lguTD1u +sj30JrijkwqSfBPkaLAuPY75QjcoxI4e8taZZoPHHlvT+LEEsEVriyW2wsGGJ8U053Xl3p6et9gk +i1XUuALKSFMiha6H/YgcCtERaVrj3Batq1INu9YJ2JbSQ8M8Da3avTqZwIq2lzlKv1+Ng3dKsbJS +OQI+VA6fQ4nUrU0oxa0dg2kQGh4PPV8R4gzS0xoVW0PoUQxrPnD0AMcSZ3KMuhsRYhD7bkP2yXyH +M11+h7NrFPWHlJNGWu+igR4Qt01neZZSjJM1UmM4ZHWZuUsYugfqCTZUtQkVlb0gV65FqCH3zAmv +HyBtlbb7xjC6GVpVONA5itZ3Glysekr52BwyGD2mNiWS+OZFDbv6rc62gGNuFPnnPTujMPdhP+dQ +q/qRQLDGRh6SuopBkocrT/adLO761HlDYLnILXvoFY8cEcOJVphsFPJ1n8NibZ0MbEPRkjg3rIjI +OimFBx2CCVf6nfoJTdszW1yVh+r5KGnWJNPcOUke36/oGUCK/7naMVsvLOXzGeCHvuUAXr4A810W +FKOTq2qc24CEM4/nJlq9IpxNVIiXC3WNOLQj8VEl59YUcYfnBqaoX5BTULhnVdwTisniOU7Y1Ny+ +oI0MEWv8OS+Zo/jAlB2tumBMp/2HnO2LP7u8hi7WbyQN/J7ygRCx0UfZC5SU7zDP/wFt+t6iO5Uk +/4c4mYYp6ANT2noVAb04sjnujQ5qkimO0IgJ2yEblZNo87XjheazzlUOY/pJGySgXhXrWDR4Rfl2 +AkpS6CWtK8Su3v95soTD6Mwjb33c4YJ3/1rL06F5mxvIC7SMMHXDxsqOO0lQecWHPrbdZMEC8whd +o+YZo6qrv8hgtIx40cKBGjlNILtTBj/XCprb35hFAvj1oRNB3PnbHD4MqN4OiRqx3bARL5tzi5S1 +1YqjafmG3cDOfTMV1nki5jrQIG80jKc7eitc3MFyHbztvjOFfD4mso5TrU75mXT1S8VIEkrs2/fK +Mem2LVgyf+O1WSQCE0LkIiAiNdd/hTlomRFn0ptIeLJiHI9EsZ7WpQqK4BVhcF4sGnMsq3LC+DTD +vm+A5IO1ixcZc95XfAx7OHqBO1p2vq1SNvuh3cCgCNL9fi6HuJ5QXAlwosI4w+SrKtxQ2jS/Jp8W +4HE1ChYhGHeUKe4SkIWdy7Y0jQA2P83Rap8gLGdoQgQsPkQzn4yxgvOnbdeZ9mSFT4F2a9vm590C +0xf7xmLiCCTtAKvNvUd5uF7sU++f/BTp4CAT+994nG7KUUzYPcsgk6E0gyHdTVHbM2wZVDsS9iE2 +bVG+VUJvv32E3Mn27Rlig/ec4rP4EnXGh1M77N8sMR+uIavgYKCba8ORdKWSoMJf5Lxw+uyKZ9B+ +I56yKFf9LEjIsfSCY7SPzGZHatfWXW38YpD8iMCzdNmk2EsPj7xc3hJWA7QJBeSXWE2DmNY//u42 +/RHN2iNDkvJRoZ+EtIgkd44fNlIEiW6Bbm2qwSR+bQKA0OMAh62Uzq0msO/yIoylPYn8EW1tOX+f +JEQ+h/5Ih75EgldsXhN74k0CT8qBmPs/0cL1o65nWWwlpxZPoIEMIUyT0Z33tYcBvE9RxnWqDCmP +5DDJqvcfgljIWrNsz1QQobCTl94t2VrJQWY/3byHs2SoWG5q//bo+BW9TnqZo/o2aqmQr5LTPWdA +SbdsdXOd0RflLneSfkRErSeEqkWHYkZeJyWVzWcQ+H/mipAaJ/8/ow3OTXbUJAcrsT3yJukR6QZ7 ++DDOmFW5szsBA44i6ymChZURGMb3IzpxcOHgGQ+wxFu9vtr31IFxqepwqw43bLIBPfAcNcIlNSex +M2PRL/CYEhTALbtSxSlqqE/Oa/gmHqVZhIqrbFvHm0J+Jq7Jwd9Q8xvWlnFHn03WLoInY20kV2j0 +HLXdRryDRvWwUxsTAdkPZyla+MKaAUd0uaDNJgdIMmwOOZA/qRRFz1XqANum0IW9r8MHgJi7p/BG +g9tkFhwrcLlPe77YLYNlcQeZ0LKNVkwxyurRoxkhsBWINvFw2QTU4Xn9lLPgX9zB3mZFSnxLwsUW +hZROcH0dVa9C9ptYBIYg9CZPnN+1wqSSAO8sj9Rq5UDTB5c8+jFJojIkX6E+v1vV3hxlLrl5r89q +vyp79fCON+Ar7jQsTvgFY9zYJGrAphukO2Qicc5dgR66HHQxZX+v8eU+/vbbcE1JkrSYUvtChPVl +d99huO8eXcWHKh3IbuTbauNS+0rlZX6FHjUNS0UfPC2iYQi/hjiBIRfHoQ7SUcgmERHhbctVHldF +8BLp5YEUYGPR5pgBdRaAmLOVKEK01sAjweSOI/8ZR+KipC2zldiO8twcmXg/M1sxbe5j9WBMi4lw +qIB7LZB2RYxo4A4Hn9GlUBltKlaO5585Uhfa6wQUNVXvQl/B0w3AtLVbXsXCy2gl+61vESIoadaD +POsLX5Ah1Cwd264YEx9gsgpRUNcAEAHICh9zqzx03WVaE0iYf9Ja9JLKZX0YWKrkPD0lsMIjCrHA +sYk92k3SacP9rMKkqJR5PAu1juaAutRqRboG9d+aChU1Jr/xJPFJ9gIOoZtGGkGxjG8UyW1qzhrY +RypMuvoP9RLSMuaLz22QK27YUbBGkYxWqFNmCIDBnBsakSbCmPyibc6W2n4wDbERkJLBAx5xOCWm +diaJU5ojfIGidi4kIv6ire+sxSOiYSA6b//bz3hu64pdGrN8JD3aiHr1aQCPDvDC1Q+v9LldZTrl +5tKI/qD8e7oG6ATzMINGHP3MWfhJyeWAKgJZCxGsOwAtFKbVTAVmO5sF5UCIiNQOoSFW426yXl6i +7tzhy49mLr/FUbsBNXRedxseegGi1bDbMqRYeqWwj6XoOMt9zgFI3fa4XvrgLy+DX4GxOxnKYJHZ +qixZR6iSFi3MHAh5Y2ecmzbFXaJUleSVA54Lo/uGvMAvcnbMVscVY8sdDHW817E0aqFGAvY8ba49 +3flL6lH9MRPLWPqzL5NvWS3ddNJHhhow+wuuHtrJadA6m6839uRAoUJB8kv/N8MsaF0eaR4dE7u7 +xrZ9r/upj9ck1pZ6RLWwbgmgG+SA3zvF8IPojqDtX2sU6y7RX/qAztJ/h+tDA+83dwDgmB4J8l8d +8i3BDyddAxcu9W8X77aJhdf61RfC/DSP4tLBx/OiCCz6KClgenVPMUDb6zQEQ4ud3ndr7U5rdU3/ +VVeMy7OAZGvKgvk38bKLgOYHvPIMlNkkWBMIbRTyvllGzckzhQe8xIOh5tTWhX4/8zqukfu0GAGA +sxOryRkKUcieP0WiA6qQkFVWqYgMYidg6+KZH0pBy/o2B+LDvrDkrYU9dOrTire5gvr52Xs2pRpB +SxAliFSA0/2sPNfViRdfQjw7UTCx+LSzDFIEHR0ujGjJTTRLwl2z+KR+cROo+DS2Q5OfogCcbiLi +Dv9whQuTnnR7kabWLl/sm+RF8muDNM51uJwymanaXQ+d096QvLY3wb5dPau+vmcKj1JY8eDCSU4K +dOtnwkw/e2p04QMv1qwEie/igmE0IGzjLPeM2gon5Sx086m0j46Rw55nagBJhsTSE2mQTUVvZorn +KYLLM6KtBMGb46ZiKj6GiStbjA89sn8ijqA9K5tYaV5FLwkPvfM9Xsv6PY8ipuhKdj1JchgtNSa4 +M0F0UiDHm/CzYu8RONBR1gBPltAJckvbwwXj0bFbcz6V6NupuR1IELVP9ElO5Qncfwc8yUiI8lSA +/CflguDcs+DrT21w6tq/Vgp0kwQ7u7zWvBFUmFlOpD+6xfsBWk5T3hvk4TQikwyHfISGmf7wo/nN +UZOJZd0lObhFEbRJLpUxdCpYu+T2NWMK0Y+NU2TB/6sNu30mT7P8fHdl2aynAVMZ7fyGaz6nwDWZ +cWbK3w3TMN73WQeZOpSSKgCpt0v+W7mILkMk4V9pwMmSb0ou90Ldulli2Wzdo4XFZwTDYjp/S1nA +RF0gizU/ZFHRU8Id/yqAY1JfHNc1wjU42ZY3EmfCneFLNbcZHi1+W2ri3oa2U3kWqCtmFfVp2q+O +tHqsWlgMmNJTmHsg9OXgs+ttc5t2gtk+Ynf+imN8bCWrpKzEoLJ7JjwsU7DcR2ueiJD2jEAO06Oq +FynXN5IAyvKZrKgO/cgoUh/qdaJ/lO5UwmJYAzp+nWO87ZX4saiKt7/Lzy0bN7+8lmd7/6QaCRMr ++qNlYx7KDOutu8UO4Bj6alVRZ12uwxnMSJbY7tkIrplkTG/9AbVishovdxk+KvNcHnRgbS7R+44L +GfGDvUyB+aVoS9Gu+BJmN5TIbWVB2cVniYW61pcvBmk3U5RxRtPAvXJGKYp6LHY/2v3sUntkeMlW +EOHSCICqsRWb7fl/XfwjmkooR9tMdYAGTKBcRrvvpmx5Ic7CRU8gNUqeBdHj97NuN96+qhr/wgzt +xXKnRrywfP+RlCiQ1LWqQPcEi8TY8JYKUD3dkdL8cU4TNalD940T9ArX1mL8cgheE/yWiZT9TUcg +1v/X9Av7LpwCewlQHo6do6MObpK3XGYWLyEHGkh9G2K1Kb6ee4e49/R4H4zyn8KmaLhvwdlkbyPr +E5YG5j120EjTkSSpBU4EtlPXA4qDCSKp40vpyI9o029RO+QS+CXNizLvZH0XbxWv7ueqWJVMIgye +W7aK5NfbbAp9tfabiY1dgfMwxWNBEyqwtver0xhkcdf5f7NLnwqMM6Biljyb1wau0ReWlRkc3aZD +YlytpwF/s2Zyo0y5a9rNfOpz2YO3fYxYZm6f91izTxBGpHdmtdYoYNCHOePpH2sRcrB55g1qq+xO +pahDDI6pOc7r/C7jl/uZ1aOx0X1brr/3i48Nn6tE+K3L4V7XxCkAIAx7Hy2C3GkwTNaXUtQDPsNu +45RTon1QpsB2OZdY/Gt8RElvLzKlZhe/FSjcsEsSJsFJ5PHqgBekmzKLqoyzHx7etsbFWP1yH+tH +JDj9rdCNNuGJEtqizQB+P+MEgsHIi8wHGJDnBpBY2dJnxwZ0FuYq6qbTXvjI4gaQj60qKZH3HKN5 +AMqlPSLn29MtoDSTxPD4JBwCbGDtuEPs6vrKjOUyx41obZgXr6diGn8lFo5BFxja8ehV9NPmDGNu +n43oARXyRAyTXLrI9uEu84tK5Nkl8xIbC1W0c8vPk83aCS9idD29UVGjSvqpFNdeDcBfJbciAv4Q +08R0LMoC+HtWRnYKbQ2DuUCMzUP5qqQ+V5Xk1bi5HT+egm2/3Cp1BBY3lKLHL96QyDY9x0Oxk4d9 +AYlolCo0FeCq9FCbZwg/wcv/6xl25tx4tqVdyi91YmCG7WYgBDDbqwwUB8ALPiTtYYnNr0LPFVuh +PWXXo94Y4ZHpE8VAqjaUJKaLfF/E21PoHOipj3t53xFjcMjjrLz73jmt8400itakEr+XC7ars9dh +45A8s1xHbYpCaz3Qw6Td7XCi0yTRROrFsONx7wmC3/0YCAC6m9zuXRAmKWcQU9axlW6KTKWgFME5 +OWCdOUll1DxKlUhkttmG5KALtnJz8MDwD1BSInFqHwL9sYIeGFZTUDOnzDSavazTY/4hwqcQS7cI +TobuZz8vSMp7MSv/LCcw0mli8Rmw1IyPDaRmlG0INWVpyl4pcPzL7GpspVc+2lj04uoxXlNn2ntv +cQcA1O1YlFfuGOV1AKeXWXVWKsT5GoF8DJrvLT+jHxWkPx4LOpuh2+9eSNc9FZN/nFwvwRtVYtqM +Yu+wLN5YzJsbE1kOj1E1QJEbkxJF6tdYV5NASBm97DBnNeE4iihVO7XauatWWidditd2C4PcNXCN +IF49rN3WT3RVY/TrxunWj7ELoRkV+DD+IdjuUYoKcV3l9m6dIsnax0PYqAEoQPqZil0ki17N1IBJ +CXXhdj8eLap6B5rNJLRD+MYCt4IBzOcJ6qh0PwH81gkT2GkOWbcq/FlUNh3yPxu51CJEvJEfvsLm +JWZgOmaxv++pwqEVVAXJD06H0S/y7yL9l9aSyuGNtQp25V7kNLYkxPdUkugVugUJ9ycjv0nmLH1k +Coa9xklrGz6WUfo1cw0ZekqACQ3Yc3SvJ91CbAtuB3WMx9giWrEc4tLRDnmtz7vhYm1C4zJPuVqB +D0dFK93aiU7F1GAHxi2CMbLCZc7ON9XIgbB7KIbk3Px/B+TGeYQGCcb7uJtXCdjpyJCKeKUAfNsa +GF6Xp+2jrNFyDH6/SsXX9Dp1JzKd1JCBQ0n5HDCu97YBs1lV/2N/aK0ApomzUvIBCTMsAhJaH3wP +uDqN8Kzg6SN7D2G4QRlVJvCiNy18stpgs/YmeO2z1YySdKECnc2Zu8Nag+VEVGNqwDUci0T0ZUzm +Q1NQ9TwlrYYuhTnvsmAKYOiQWNwbkP9lpTjPN/omzrix6tK6o5WLurrDflg/9FCBuycjnUzF5z9U +vZTo3Vsr0N7xGxvEMKKG3+DJ2bnwEi36hsx8XHB37ubVI2wSGT+/jbX9wRMtg3X5gzHk1M+yWOPp +iDFiXLGXOFNUS/u4VVqZrxOIpJyJjNUsL8UH1q2cHDTLA7V26nmT/3A3AjHJWuyeAa0FiPa3BiZ6 +Yc2VNS0izZTVUwnZoEWHJE6kH6IJqnaRf/eVPQTI7iq+2RJGrcS+VMMffmQCHa9qOKPO1B+zi3Jq +iTH5YBMx7R2UxsUzSeGetLJdn4kFb5IQLbtpKaePKNfZjSssvHUCtjb7OkdmWb9pIrZm+3v2FfX9 +nu2XceAYaK8qsiYX6Kr/DfRoCDruN0XMZeVQNa4xLgXkIngdl3WrBO4WgvltRYo+UItzIcnTw0d/ +JfR09J+I5p4goJ9SczjZKhHNFXjpMf56h45LQrvp8f2iNvKCJJSG+OHSkR1DVJ8J9lW/O+GdcM/T +LE6+dCAdJP/a3Io7WQR5u5l4JDr2n7InAc3RvDB7siV4EROHy3Hpt0PdIPV22/UHQCqPG4OGe4xs +WIHjCQE0SJLtedozJVCkfxDchOJj9WuBS0VG13+WwBJhClaOku0osrm32wIKen2FsqOCX/zFeuve +p5g7SaIrl7F1A7tHkDe5fiOMZudynJJlSOxkgWw5OLiBzmnB3VF8GGzoMT6gbToYjPTIwA5rQFtA +pNqgQv/uNGJ9HwKt5rmFX6finWakehX2eVuUFnCKUiwLtsbdmiZRjhf8voLKkChpTUmz7k7/Cz+G +2OBRUa/a8AyTMPTVXcradHzioTx2uOr2It2zDihfn9+GMcoppi1oKbNP+yGkGG3Z/zwM//Kcx5Vn +x9pER9FJBloJnJa6NsjC2pF/BASWOxVN3JTbhpw+/zzkKkDg6mmkbcuXrrLPAsLYfi/to8fUUPu/ +WSb5mM2X9hrrRA7pfWa6AAantjR/Q9PY8jQHseHk0VHwXlJlNIGknpLFgzy7gusrR9mlbSDcjcmF +sKwHrz4Wjg6kWq1x54c637MJ5O+1aaeEvrybaEnPQSa7IfCzEsKpDo5aAX28RCxAl63NoD5Ods93 +lCW+mIu6XtU1ET3SFpNyi0GWCm1WmCLJQtSPBEaBcyshnm9mlmq2VAGuAyKrGEEAsBHLcvFu7Rlf +YKTFxz+o3BgAymmXVdIRIX8eRvypJeqH0ASj1KWdBtRMvIBnN0DTsJ4h8rC7Bl//9JPvomunZaj+ +ExwVh9wczFHUT+esRQ5InykrDtLm81/mMpL3iyGsMrLb96cAz/KTPtN5c/sHPOa6LR0plN5ZRkfA +ajRK1+9Os6jNizYkMbH2YdFeH3PZpDCRaDOqe7oOO+/f9g/Dv4yRv2CUwjlUoA6MWIjxxYeCoAfW +Dp69Zxq50CztesxWeJEkkqgTgMveJglDSrBoX/zpPaf2/x6niBr8pjTs2KjLl45VH4+PUYolIvlQ +h59+kJHFb8+1AJe8KFTkk482TwEnh3ztL2mMM2FP4ODhHbarSr5sc1ZA78b0HXNksOrQGPoqvQhb +89m/J6WzEC91WraK/AD7By5e/uugLjqphJIOCvgCStb9XHIH7dATRAGthdjeQmukEWCbAov3ka2d +lGWZpGqH8X18qB3tFXMsgnz3ctebOkQc21kPZSDIhwtagsCPfoHtNEOEvGVc39NmlX93My4t+MPc +YM0UNAI2xlzlho94Qie8Wh2SAOK95AaQ8j0EMrERH1U62+e2MAl+v0Z5cxsE8Gp1m2Dg2U8JLm8L +J2ottyiEoBE0gcyC0L763zAqP8a6Y2uVUBk9hTe1rpc2hSAGcoNKEcW8Aw5OsTwNqMLf7Srwr0lz +8oAmUECde9/i12uI1YawwfbiX+U4gVergOZdT1QHFK0pihLJ3AXnO5hXDX2XuLXn/X/OjkVw7BnF +W9E9kS9TuOLNhfpm0HQgKun2jCMnf2QJaPN6NgdeLOpkjDSj1KEQ39Uf1YsbSdB1dyOuk7FuyZB1 +tsMxhEWF0cqIk7NBd1hiifmM8BVjN0BCwF+qIi+JyTUnsiMZ48XXLNXKC1hycAwO16oDEO8nusFl +0isfW2+UrwBdv3HTLdrnRN+JZShseuNUSqrBiQDX03yBnfRDnCykLE7Yc+xUE5p5o70Cq3QSm/lD ++jfAcglvWSXPQKHcZv/JxpkwRt+LU2fdOdjsAO8WagpuglBCYIqiJoHw/DcwO94pepG2PjnlTQl7 +LDq4gJKzvC8Dqigm4sVEj80fHyUQCuoYQvTzoL0H095j/EiuQt2TjbG1RaaGkvvJNLaWoHpniGn8 +MRv876lyjUY+akFpLVuT2qtQXrT79+rVOt7zdY2YhaD2vqn3yj/nPbyz4ABwdjYKqbmGMaDjJlND +zq7tdSadm690BtkvIO7cAVr67x1G0k3/OrJbiLPjfUcHj5kv2RavO4p+MGZQF/xv/fDflBp2sETu +SgdIgcWol2s3xQ0++5b+bRHuEeaTzpLnYU//XRogFPmSzXDSP0B/o00CWXklaPoYnny50qumVrlq +CPWl63MNIo6Aie6HULpm4SJ5tIJFNbTF2/+6BAMBPd1mAkZMGkl64C4mbKXHxuiIk6cEZHW2TF6e +AsJ/5z28EmWEeXHC8JfSJ3vWo/MgJ2lotpIeUheZ2WMdbNBU46zu7Q8U9Edrgq2YrT0QWDj5T8Pb +2IUX1shDQrgJvK8ofwPi3hZqOtQuC1F7Aprfx5oysSNqdWBb21Xr94azoOpdug62hCCR/wIFt0Jz +8qkL4NfOP/F4KEGVj4mD2qDYU+4RNnQgXzxaA8AVGtjbHB/68bAR9XejudMbiVuXY7ARSTwJSMCz +pTPg+iNrREBMoQXYq0iUdbd0nfGAkg8L0DnQJurP4YCs2xvuarYcYiJ+hkLS57M12JL1dpES+xsY +BW8DHU7UdT+3zcXNLYXU2vb6au9Vw9tQgs05dYixLJRAldr247AlmcMmFnkqWHf5AK38kDSA6kSp +8rjOzri9UneVNta5eIPnQh2nc81Urh2wXhwNE3ML8sceZpyL7gx/gGIq4J3I7tYZsELFCqfdDKHs +H7eEN21rpLZCmWFigq9xgrhiFmGDtviQRmARVuuASVnqiqj70wFgqqHC0DdI/RlERmk9MXamzQAE +PZVUBsWKF/dlzpfIMP1PRwsDZYCSAuCWA3IazyqKB6dR4YpI1QLsBn3fvXu7f6fOJv9yx1INrHua +GyLnhZbbH21ngCXRiqYMbbD16DE4A3hSFdmg8O3DYIPz7yYZSiTVm8A8gCr3qv4bAM0nyuu86B2R +5pAy7Pnjy/z60YxlXczZ7XWCOlc9gCIvtGpVKzGObVVOCEqiI68qy4yZAg3mIuFo7jrwkcEGla48 +Ff+6G8ldAhxEy7T+O6qIiIoPrK9Q4XRezClXZVw+t18m2jaTXvESFmyAy/k4ItJT5EK3hgFRK875 +rE0pr7V6gUgcjJQMVmKavo6fG+5l9G08KIH/HEluuiMKXX3reFXG8lANG2BxMVY+dCWfg4x8tdZT +605Hv1BrRPEX64cS22ABS1c3abOuygtqiUKo80Uk6V8NGsarZWoeBGN8BGMvv+gD/hx8jV/uLZu9 +5ux5CprK1m283nGPzjfWoyK5S/Da+vPAeJukrp6hi1Xgu2AnFNfGBi7Nm6Z23ktRrXX7GfoIcJsN +uoqmjiEDnfGdScoGjtpZak/YSDQW98wD8bnwCsCFcE1Q1cNeWWp0WzlGziDLULPgOOdQxLN5kqYC +3AwvYywxNkoZl50J8PjMMI/NCz1QIAa0E1Ud43kLC4yx5XFis4ZBTfPiWzZJfBWDvi1BYaNpbDhC +ud5PwzrVeb6FtPX/P+S8sXAACjtLgU/aXcPwpY+YRYL9Eo3UyTZ29UnLFxN2q2Fu4p0X8Z9+oFbo +EbsAEAqARJdO77E8YIS89zGGq1RHPwc7Y2upY7sT9hvZSWcSpFUt7kWuzpjA/0yV3KaAtLG0yEzt +q6iT+V0rdrgRoddTKbVbaieVZjpR9F+PnG5K5GY4rdurmDrtST36euWvf7gKrkkKD3B+qwHjzZIf +I7qpYdI6ixQxDhRLSsHvSMilIkqCh+6B2zMtmoXUsGFiy/s3pMdQUOQmEVGs5M/WRk0IAAFEnWT2 +6fyKg6H3VtJfLPBCi12/JHOc+tbKgq+yPPMzCyaSUE0IZiMcjTxdXHvaJkZsnSGEsOHlY2tzlaJl +tYjFqZZLwZ12fVGO+vnvlR3p7yiQct5KCEA6PmSsYMA6vVj6StXoMmi4mF1FmT7RWBD19+vABQe0 +D5dgsgCPWT+UBGEWMwOaS8sd73v1bTJDmgkzHup1SFxmtj+LbVxxNjXLX0ok49kZ77yVyodu4ITO +1OpFbAqZHU0ZXwauVgfDmAiSq9S+D0+sDeEQRPbTKwHI6CJFX3tKb5Lw3snmuEL294jAwy8fMQT4 +sCkrqfU5GODVPel5dcyDdMPkq99zoIFU+m8NelMkLK7w5/yrJuLhBpxFb9daz+huR7mxDwE60u1s +EBnW0kiuoLeZ56uijf/I8/WVTxJEeia0QabnOvQYYxuoma1+p7t4t5P/bT3xoSN2yB/Bq5EJ8JHn +tFmJT5DfQYe/eMUDS3RVxnsPIuEni+Z54zrhsCxN8L5avTkP6kgN9/9Gb8hA+eVSwxJyN18LG1GM +JYY9Z6ubQ2FjKvzI70jzSs8MUy4qwD8Ys0//GQxWFLz8YTpy5AJqhQdwHyXn2H055BveSFpBV8hP +W7XidZyk1QEwIqScY2Mx21z+G5L4eC6gV5QGNGp2U3Qqv68iCWI5YVUQmo4fUw96e0zttbx+Ket3 +Pp4urkefuvNU7UgPcWwkKyyw77/WRPkPNd/YVaCbxbJDhOCrou5zq3CWfjApU5K2hCqK01bl+F08 +EZgffo5MSBwk/wGVrGvnoBfMkJ+1m55ZgcItUZTRr5pVAGxO0LXzfEFBYcU0A2RK0mTRTgV+KxDi +Y7Y/kuHFUjsdKqkq6+UaqYjOL+kJlJroLOBl3RVyPQqDJGCYstk54j+YrlQe4UH1LpycVWSs1V/M +hHhhYa3abPHnvKfxNiE0opGGHiZ61YASCcmI/IxsrpdfEjJ6ZMB4acaWb1zp3rZsZ8J3lWgpXi3W +CA3wgPSJOnk+AHu5tcdItb+xat6PfM1fZhQrmzu7XVfEnHeCgMJFuKrrGxIeoLrn9E+MgPqFQK2L +AOlDtK1BsbzHtoQ0hzCUmSLbvHjBwbvb0xvkmo0LGcMnAG8qWrYCjeOY/mfF5YpqwsArVABYLS9j +ki+RlfaaLxG2E7604y3JFi7X2nPfGWpIlTk8mafYiIxM/WGZWU2u6ekCWry/3XbeMsZ3QRIOZP5I +b/4XFib5dBU4ITfwp3qkREbPx8V9jqfvvpX///iD4bp/m9JmZ79aZ3zom6pk5aND1A6qqQGt3YYB +87bCcqyfie2ObE2zbTdnurGEIYNL04fpmLvq1+ccGuSbubc4rWHZHDFvOrMH1dztIgaO2koVDz2m +eh1P9DzicsNqkR+AZoAXgLQ93Ej5Awno5jL6Lj8r2hn+jhwVlSEt3KPuHwgiXgJiegrSfB9SF/wA +CQUY1a9FHUaD/AUzQiVBDNShnZRImWB6oLlfGeKFLRtWQacogp3ox2HBbArPydoFjm093GA+bMD+ +yRkN0Tk2yX7pjext6o/M7lJx0I7RqY3wgnWfjXNJwTfQaplvaWLIX1/TgcL6jXVMbkN7s8jJl5i5 +1r+DDXcRCqdvFhwYYM/fbtV/uOm6mZRawwWYIpB5TGv5mleIrl0BQJi0pFMbl5igNb6QkIYk7M6q +m5EQOtU7o3kVk5pKN7ndAMBbVwJi9WVc8FdbOwwJT/LcFGG4kar9C+JbsCpjIiY4mOgqa2Vn468e +iszfHuSP9qvgV+hGBNbiiQopVPHNHafVkP8okMov1UTkal0C7BisjQw2VNVVb1WtPnJyn8vAT0ow +CigB7KtHV1wOWeymkh4eEGPp7FfWlv7ci8pcETxdH3jh2pCw5BWLUJce0eAEXKmDxsV4DnPtiabS +pKaeIxm43+NBX8vTCqngUelZdf/ejOxHbjOU3Kn8UIDG6n2H3BbkRTYDUMWgYVlV/o4V4u1y9/e6 ++ueCSLFifrD9cvcPPelPNqim/1vLIVauLv1qU1AX3S2FC4Y0pGxLg1aGDA7qpEIsY3VxjHxveh6A +4tRdFwgYurMorkipFzB7lYIJmzDTno6hLsR5P5l9qvbK38DrwsW/3qGQGp5XEUgFuN9X3/rrstob +4nlkvMPfH54R+p6xMkmVqih+z4L24wEBPg1dca3mCYqn1I5hw4Y4Xf4QJuj6PEK7mr8mhDMLNHHQ +08DnaJx8L+r2YjexJzYidA9uckE/veQK3nGWmSqEYEEEGe2ytKSxCjKek+VQ+a7dq7wspT1pNzDK +WkMFp0EcdkLv/qhO9YU0E9ShdZ65kbvVW99sJ0uZ+eIxrdfmTfO98Cxaq6vb2hNIrhUyjFWAy+pX +wqQZSJzkRx50rD5T0X99y+ZAjIgakre77/Ik1HFRMzFBvnbIPyR4o2GPJ4hr/LQubYwCK2MkZLkZ +piYXxvXjU2NJan0hoRUfwWHdqECqvjcf+HDabclDV34EKj5cty2A2+76ZaFIetcUaDET44rUB90J +150sBSh7XMGozPtt9V394NaY+K441vkeRdNGnQxxbrGg/DAsCR1IVsPDB4CmVjneNkHn+G3zfVRl +6hj1j624UxJ+DN3ZTPEja+wHphuIsnphCLPAjTW+vrLtjCXrapr1doUaveIreD2O2c6fmb/UjNc0 +x2wgOrUK5ExFkhVf3acCg5Oj+w3X6Wv0HjKwSYN/Wf2yLiYXPafPJ4f6IphVmyAThMWEWPpj5KzG +GcrLEEQyiA+8H5KDO0vxvsriIPrfqx3j/vMI3Q2/Q2fbeIF8dAsyCxK1OQOQ/7ZJ39Dt0WnQ7cPB +R0s0uXs/eza2Ftr2VQrP3iQpcodzswmscTL+kBIa2FirZUQTPmrfPFuw+coPMDgsNxmeGHzBUh3r +b9Bc7iqo0pcM4HhFGtJQILvTWta2oYt4B1KtsU9r+esQdVLX4rBQPQRWr+H/sI1WuA0gXdRRSbZ0 +wYyj2BXDF/qtIxRC2Jrp9/8WLnkfsauOM77PEIl00mu/3KuTj4z1R0HlbxIJDeMNV2tZ58r/SbeM +cF4RZ6Zz8HRGDD0AKR9dToTfuxPbTq7f9Q/DunXV66n9xGuKeQhQxbk4ea/aWXfWcGiKtSrHzu0m +Hr/GA7h/aYOFqENrQif/FKS6SFP0woqLHh2FoqGGspAMfEyzxBu74JLy9qFfUxy2Sc5D9xoMyLbv +rJCNm+epEshg85PaH1GcdNReMeKuAwl1y4h6QYYBSS3qzEw1NJzccgiBZ82wa+E6+d1xS1TpAM/I +RFH1++U1xC1UaYrobzaom2yidBaH0I70g5ABzjXw+44nPEZfHMg+HI8VlS8g1HIYw3qs/vjyxBX/ +62VUJlCI3Sa10whyPzKVBR/eT2OS0DQoBLO+vSGpjGbA9CeeNrUC/xpFEk/tEmGtyPNwOXgDt/vD +YlsxaWgPsONuukOnzzIRPiK1pQtWbjMDpCel4CPuI5Y9Ho9Jn+t6qof1uOO+AP3zosHURatRw+i3 +IBnaW411eSAfrNEas7rINqi+kr154inIfhy38OB8CoELLvHsHThbM53yRglX/6l6SsQy+FFqh/Tr +UJzbbR/5IGal68kVpsvdD6wN9ZW4yYSCjMRIiGNgDm0aTemnNgeCBIdm30sXxstd6zz555LHBXgB +CjSRK3QTTkthDO+I6nCNKQxK7URSfoqPbdw3kuWMLz7v/N0/A1Bsc14UkJZ+0h8f2er1AKcZoA7w +ung23unjgEvVSqy5yA+MmyZnYYeB3q4/2yW5FTcjEXgud+ZwvfGcp42Ja9ziTiI4eUkxXdp27Opm +roo4A4secNWUSE2VYNiAcvvCShjw1y1pn9d9dpST6O7k3DhqbMfAlh3maPex95zaFg5bHMCmQrBM +kl4MqnafonIt+PgdWuQZWfVEw3I29HKeLYDh90DScFykvPoV9vRrBKuLk+5Mc8hVcmQ5ORlDwdTO ++PfJuyFcahUSIOrEAMtFFKhl+jcJsmx07g9+iSH3NRsMyE3+IzyGfgc7w/5kTSGaycvYQExfNJv1 +C49J9NuvO6BbJQNMbyi/PGGJuYSrNQla0xIMAKcC9eZMNeibVyQHxOC9J/0/0N67mNjMoF+RRkYT +KMYJu0qN+JyXcSEG7HiJ0wTj6vjtsCGAC1Aa/x8PG2qFQvjeHAXqp6Dh01t2nzqNrcWZMmbJbZcI +4TKPzxgfA4oLM45ojoqrwASAZLYlxnQowbKkMhZmiM9C0eoWsC7sxN7EAJ8/O/7ORh1Z5T36x2ww +jPpMa4nk8E0sH3b9MII5ZlnHvakJvVAkG2GBC+KtgmVJ3L9NudEtrGOzq1SYvW5/OeCW7yvJuMjN +xvega5ebTrfyqqqxcdQFsFrzjfW67ctgvQJCnokoFoHPp/jK/vPWt6OSBncO8JkS3A7pQegShGP6 +LP11yvFLseaCqvQqCoXR5gAIBQb2EuufWXkVrYe/lVHP9rebkOPBavXXZJVOX0x6O9bs4eh256tq +yjPKFwuhkKsG03jj4uX+WL3M79YfpOWAVJll7XIDA9ZEfWF6q8Fb8DfUFV3VWbbhs8m9U1592K/t +ijYgWn8SK7WBjtjIi4YRalusWpcz26fPS39MXIB/dWy5a0d3dJPzrVzCaCdVw9wFEBzcAIAjflcT +rrEmiagmlteVgIgGdVlF6OyoZlLYl0UicQ939z1pExNbrWKwMOP4mWH8wZf55CwJTnoCi/DG8cbS +6g6XeejM6GF/p1WXwuKcc5MSXmh1X26QFzUe1iXwgHNTmI6uJEvH4e6x2O/jWM2J13RUmZ5ID9CG +mVo9UOOtSJLIKvEK629WbAkc1bzLSd5eXc+STKHJJSGDy5F5mX20wqBfNiNz/jsmmXDVAfxXFz2Q +B7LfnDFUjhtDFl7+Y1Izqc2rU+zkx7za4EPGbw+sm8PvMQQwnkADZKCfo3JBPkyewsl9m0/PETmK +V4Uzl2uJfHe7RO+SNeCwYzy3RAkhXVxIgfFTCMPN6iqY7zAmscDdO92xKwC0x0eksUx79ATZQBji +4zjA2/KcN8XEe0lZJ1CFMk10jjg/T6g9OyCTlet+74bCLo9SN/pJCwrWmijPrwP/GNTqAbaMA3X9 +gcHZlFz5RYMiE8JDjy9R/4cDEHtTI9EhnNBlnNA3kukFt9cYYch3c4R8ZulS1MWNmK2TC7yi6YCU +JnjzkMwW6Mg41mAIxMPOI93u5XzfYjMMBhKfId8qe9JnN7hBPDAGaG8YWLojSw1pmN2wU26V1R5Q +TomJS1oD0l5+ZlZgfBsb+oulwjqhioFst19+dPJj3P63kU6TJ3Vz1byOqRhJJ2MmfUBC2C/+2txC +OyV6Qce6qaUnqxVA9PY7I9VXIUpEPx6jzXER9n2VpK4AnQJ2qPLlmDPhsleWSKlSg51U2DftqMKa +NLlOm5kVDtS2kADB/+8G3ypsSE60/NL3tmWrlKXLTAiNhJT6db7hds77rtxgBTQVrKPNtfgEofdd +mkU6uAsPh6FAn851rZY3XU1feXTmSZfo/IBsalLwksfRtceir8fx/z2KElg3KqoqIgbI5Vj9B9WR +b1qLCgACIOat13EadxCGt6BrHPlafIEo78/iDL7j+BS6qEScx3DxmkCMkkxT+Ym43ySwyEzgm2ss +SEYdYogjZ3qpw4MLJsQIzwUF1flMhf0laDUIdajtpK6MD4+f//1MRrrSBYKAlo+BebulFqluuo+o +VcfSLsvxvCYnA+Y5KX5LxSvh3Zdn0U8gpb4gKlNcyjfzKyFvQN+z94N/+iuaRkpQi+M0J1S6ALnR +7oY3eTawlLX2WkbdtrukKjTDm5xD0SF1aH2J3VNDdiqCvOQy95x0ogcdychMN7wwjlpaBKcnXDev +eA9nDrcB22M1+gRuyx+nNEh0d2Dku0a7hax8W6iFUUKQNyOa4PODyk4P6Wgj6VNdvF24s0Z1jlqG +1nYorojCH3QekH7bonOMvzz+Wj6Avh6BAfng2Ti+C//fkyUvrdPx3MW/+AI+IwC1eHHiz61uJpOA +6VHIcaNRsMbLs8isAAVpqcVxn2vMldZAH6Xvu0DXXX7vn+tWvUQimcUXZHGLrG6MQ6o65iUwk0qU +U9aMMXkhboeruhr88mC9LCY3rbZxnAhzC8SYYFtEr6xFgwfJpohgnI1Xg96U2FszevG69q+GLIpd +DgQBD+Ej/7ubMQsHF+BQ2MH3oEhYJkuIHzyhgQngSKBBlQ3FCaMOv/ek8F1pNDm6ChssUEhnh01z +vJCUX2AvkaIbDEozceP5+kfCj2F0L4BoSS2+SS2jWXkdwqWDRCkEYFEP068ris/PYLL+mBx7uIfo +o/+AceEBLy+EviLpzB2ZOSHcLdTQzoEw2Kmr/X3b7u93h8S+pu7Xdq3rM/+Czcma2Mx4GSRjD4aa +zByxmfEQT7qty245t6stXq6xDEQMIIw/qVhbXwV0ccMGPYkulj6qhASNowO1DM7zYX7nsC7qLrZZ +5OBvJ8jQ22WFTsNVTN5kOm+4VFZADP2E0gHQQ6v48xFybLDHuRjVFq4YWJHBoPjpZVozt9PIbTRz +nHVaDi2Igmf/OGePKpP/MpYHFc8TQN/QrfHSi3q4ab7C+hkVO2TmlpKPbfojCQJCFKZiOwBQokv/ +w1Lq+2Egk7LIMoBFUviL/sS/jdnXr6r/zu4imQv13mZFxGD9HUyrxRGNKUKozU7yrY/vbkRowQUg +ceqokfXF6CTRVq9YYX2MjSVYtTo5rEnap9SJb6Uiw2KQqqcA9bsty/PcSikSe5XAtZUobn7rQ1VP ++hRCGi2OwFFp4is9b1cpe5yYe5t/yH5cPTzAbnbKH8sHV3yeeoXgG69BdFmeGbaSKG36+sP/KXMV +o8kRGU7qjoLhuc6HI+1FS5gF4h+GCLCnaSGAodCvfedeJDjD0b+t16OCV9Rt9HiZO9sEgfK5mOXt +Q6hmVSUZf97DY9JbyikD34bkCNjr9GUCpmcTAU4P2ktwq2nyWDIz3B5Wb9qa/xVDmTs2l/FN65Ez +r3f7dXg7S5sWxL9yYUVNcVLfdk5GMMbU5K6ctQ/P0E+qtU+baKSLXuAD4RDViFtJJdSjnYfK9FrI +xYhvfFooT/tsSLBwoPLWAoarLlyeu0cWxIX9slWEHy+dcsVcpjHuzsBnzGJn/0iX8VzT374K3aib +tmHMNFJDVEEm/MqDDb75MlN9dEn1pLek/5kkhR7AU1bbUutWzPUyfOv8wiQKmokm2G4ZcVAOZ1Ww +ePpmeNvRu+fwO4nIPajgab+qQ14+jVGm8eJBtOilTE2MZovavXHe174ewJzBe1pblizhfJcTkC3d +h163d9aBKiMMUhlRuND7dsWPi/s6rEPTSaMm6MToelYaMjEL6soUNysZCKpS6i4XFsNpryRXh2za +LWNNYnAu0hKnRoblG8sHVTlT/sdJyFnbNIFjNStN/AmO7iRt+x7gjJsMHEJnxFcMRR3pqRU40zGp +SYpV/VScI9gnc8grGObhFuGh1Cz1YqgfuoCeP/NM6WKYmKrtOsz2k16zShpUXg4HTJKNlJZvfdd4 +dqM8y+g7Tw/vXFLfEx1IFPFiREDmz9KGyZzzyjxXD8F/ltP8ygIUQ9tqzatFYMMZl27V88mj5anY ++UTjgbOgkUs5RC4No2+jN5dyrz0BHlGU8SYEt2LV8/Fhm0jN9HyX3dqbmRxq8aI1rm9pqeF1xCes +JMchgKxRD+wyaAYWUZTuWVrdzxCBe8PtKpXNmlHmESIKNTVFJgP5IFze0NwNT+/+c+in7+VsgHd8 +RxbrRiw7a6huqXsi777IDDW903unVzox5ONq5JtwduyeK/xV4iOoEgdWjw7s9irrzskN4tg86e9M +RwJ0rDS2zIEipksDsrysxqwnkBJZbpQnGfOCgCeNo4935gqlxldGSlmMtt4s6K2APiLd04wGARBa +pLG/0nIMo466HxbmyEmj53YBk19btr6VAjBSZxTw4D7QlV19MxtNcQreD+pc4PQ+cRZGyfJqlaRT +BW30JOO25iM/Jx/fPLE+h839Rfh937OFVNsUr1RDrDxG0n7mmMkf4nHTYgH5xJF9kUP0/bXm5AaA +KySjC2+VeDQVHL8cysNa9xgh6QtRdgpOPYLFoBNBxH79DjzHNwixCt7BPc+rWknlBZX9EKgMTean +7DPJa5sEqORgybK5bUbCsFnUwNW5xdP2O+Ez4F/ITT0hKCTllPShIG2UQQQXRsCbAc0fkK4G4tKu +3Z9sLBdPVpjMZFRop+KryROSHpTgMyA7GYlKctIN/ri5ekETFxRfbPJ7zbRuwfj56hAL0ol2ZwDw +5pJKmZZv/hoLo2tA6Xe2s4pawbKVoccmmwHI29pH+a+n+MxTerQ2wWJd0seCirMa7f828mXs5do/ +Vjye6qpNiypq7bqRcdO2raM5gMHWCQ25UWOor/kJWh08GUAPyWBjUBZOPTIGHkS1e1Vt0rIH8/NY +AQph/aKOwilMjlyaAEhqaL6GW9Yyn3CZrVGsTsJGbcH217HAZ7aic7v/8DarvX4Y1Gmpchg9jA4D +/vH1EPVoTSY9p42zfuvK0cnxdXUm8HUa7W9mlfNA56nRbtWQi9QU9s5sh6UZ/ZL3R3VlxfB4IU+7 +VZKS8uU/26aYLSvRnD2fkLYUw3h9kHbxlT5i6lUnPNBCeidbH3qH3vjBOwUX7Hugy3w5w9l2dLnR +k38euy4o0qpBC0RTDQc3byJXZukAQIqX1fZOWDrZiX7vNbQf3y8Nd/RqhWvtHdumRA7q5uBXIC0b +UxeUxRdq0pyU5NNLxtdpAjtgNoLuBQV9PxoeHKxQZFQi77UoJgVDgMHDMf2yIAWs0hwzzubExfiv +JdN+uMCs1HzGHbdRUBhIrm5oyFdBUlzCr+z97m8xbLiC5baG5/+BQdZJMpu4xMIFOAXNVCr5pVNr +6Olrw8vBXb0MA2JOPdakaiCOQd7A6xUp6jIKH9oUP5D00PI0sGB2jSRPG7yI5l2uMG9G+RNpndbN +UXP5rwvI4fJFQdFICwyUNqRn9Na3ASilE9D2Ncw3jsqO9fTNUGiSoDisvlNE3Tg4+YZtRVeXwa6d +PkbiXFVPAImKFIbt4pbxtY6LuoRYwOdPHfmnkcU8fXttn+ir0OdERGiFE55c+xvxsrZGo39x9lxO +nbLjBPtQ7v3P0c2wFl7g2BS29PcUfGnKyFoiGy8K92bLQsB5EA1LqBQszP+crKFkFjh10GZ4CHQF +EtHxXJcy5CO1ZdXjl+b8OV2ng4sWXCJPWvMRs+zX9lY4+qtfFQTMGf/HiznkFK2SP4/g/IfW8BBW +tkvXJJsqeyK41mtNAw1L65bIVCYBsVg7i/3y40YR78UWGQ2WkD2aCntQcmvxjXjxcaJkXkPUvaiF +CL1XYSQxCPZAUnJUkXdDbW6QapZJdey301BM1IsA1fkbE7nJCDEQWFhtwLdJx1aJRp9+aZamjmqq +yoM9PREvp9OE/n7tEdQkzvv8t7iDZz/pRgcMd6rB+wK/wAvH2M9hcOaT/WhxZQfPstEDdrx3JtfE +Ai3SOyXv/pzOKQzUDMBBfr5sq/DdWqRTMLZ17qAOTrI0TB/X3CQJwUFJ/enrE8UtyjcbjAgT889s +iEoESMz8BedOPNpUIH3JvuPWkmlN+AKt4a0UZg4FAIM2MIxLUKkWmGKdd9zy6v3IKxA3HLyn6IU9 +S+8SQeeNcVSzSbALXkx9qu/iAUMZ/9kP+gdX066S0JRL7m9zrXm+uwAnE5Jcq7uRVlrajxWDc3Fg +3LvDvg6NlMVkZFEOX7ztDQj+4GLf0nKNAJbvyvqI+5A2F/KIs1lp+qJjNtHWAWQpLNUIqUvK721N +FhjvtYmP1UwtQjd2QLvAoberCucejY47N4stxAEw2LBsGjTW17U7SAmbAKpAmgBezFvxyZcKpVwW +5EERxpTkVSjCEXGdO0ADC48pov4kXnJWzSGLYnSSQGryh9Wa99dHAqQKbabTqZ1yzglP/ba1Yj+s +jNTmf4Y8D2CIDNIflrbkAQCzkSrl1TJII/WXPQDn56lZbL2zKHx7LKcRwwcubw9UqrZxV5lonenw +PDOgm/fERtGT69VFhHPdROfa310hPh/L4TXt3CklNixQ06jqcx/KxgFx18wQGZHm3s2Ydsq3V+rW +JQmMoXkXnWq5vslxlbiCje5pwKcdnM9hdD389NJBj+kehTJe2h1j8zpXWcS5GY1g1ZNb5E70O3/X +r3RsOWZRkE94Z9YSOL1uYUdmPSJdlfEe05RLnJ7WUEACtqZVLGAUMGtGxoFEOFPhBbZ+AyVx+o12 +JXwtJTxZGxAJ/tpE5uKBe7NbF/R8UkUbMaysmtIa8PRMfz+WVoueGCtytc1Viuaj5CQfFINfiClM +mIgm8aYEPw2dW108l9utcxaHsJXAD6A9i54GwGqdqCBeTRyzFsjF3w23mtP1gMiYC0xDesa7cf4X +jabOrzO5TWQoNC4wbHqWohZHggPDarniGQegHB9DXMs5yHCQHdbKIrgflvyIfb6PebgFx6c1TswY +R2qvJlEpSifmJ9O6DHugqZuZz8czXw1BbTgoszuX6PWbwqHjYAu+0jRce6njqhPnmvZEwbez2LCo +ew16T00TaERQ/OjbPvFfB53mYO2nmEDYk+L3Mktz8ZIK+qLujxrW92xgrAngjYC3gQGF2+Jyeh2D +cHbffyJfqecqxe5VALUkL0Dnhbe2+KIJTR6tWhOtoWdJu2fVVjj8FKIXdX1aW1mvfJZ00oGPtTik +cyXxSZkoAB0GQztc8elrVKdPixLr9zBy5IDjUpdfgALYjjGuF+paNEQUMqHp+v89wo0/5A4B8B07 +N35kJa5QkrEnCd1fVjJ4L28KeeUaQz6k8SLHL8UTmqUecKwTnIrocHHGSKr9CaFGmjax3m3/l0nU +z2aJrisLW5aH9Ppt6NltdZNJ6dUZlt4UO5aYk4WER2vQ7/cRVw10rBdlVeFuwDw3p7kI8d5QWVuA +id3Q1GjBWQUU+UTTctLwigFQqYC6YhQTAXNQWibqouIV2cc310t8rgMzCYRRgQ1jqKt53/bsIvOa +FabqTMErIJdaZHvINPe+JxuZpexNdse+moPOnpX/Ya6ulUqv5JYjR2RDB1UcasZoEXK6katmIijA +SoSKVMqW6VBwbR6WszxRY4c+W/qtx8icG7taob4/necjIjuuyzd0uer3hIb44Ld6mU62j5AZiDMS +EW1ne84iPRfy1bhcFTOJxT6g4CTr9KOY/OU/D/ziky1K/xoVyiYoWMcG1qBzRIXdvacyLaCzuHTn +XxR+gH00hbxKB+rmOlkTw2+8dGHVw6w6QhRUGvTCOf40x0BMfozMAiVFxqrg/nAqex38TSB0wx+x +otJl4IMsAD+N0jtucEA1JXts/mdsirx/t0BxgBxnpYAx1nNBqnMKGcct39j67Ir+C+u4dtQeK+WE +4VilqZjoOkjbKd+FSniTRxyfQWyHgVkbAU/Jhc5gkwm9O1zRQSpT6iLiNCYRqXAA0VHYwHFG/YD5 +HUh81iWvM04C6bD9si3x93zO9qcJYmaBdf+p1Til9QEfuTnuwuy38zCKUMzID6YJY/YkwFsvy00E +E+A/JgqkiEUZeOBS8+SEd/cTJ5cJVTml5MyJcBm59xo53YsqIgidpTxHWNfTdpffhIpFe9BLOdu8 +RTbtWnnWOgUQi8c21SoCMAZeG2xZjh/SeNfSkrGuvufHu75q47kNBbB1RXgvZV3CWTQ/Ak/CYqhx +iVHZEX0nmiVw6ZhjVmPZ5iW3cgiuu3zyMo0TwrIgiXCTBHI9dAb4Vb5OFvLksdCPBMcHnlu/fVKa +Nez12ZOR6B7J9WHSSyad56QJ7HrMpjswtbBc8G4JTuz6yTHCn+G7HaG9Kr0RnOfiOTVPNR0KXLyh +z4aolHEK0rvUBMAKqScOUHXMc7/oYqcV/R/TomuHGkIbAEaY/wnaz+xqRf+zaIPk3VvWrGFrJ/Uk +pgVpSmwWnAo/rL0GciHJSFK2TUQasNRdpSrkbRarJCN3v4qZXGRSbvr8ZReOvsDwS88jOalhNosF +Uvp5IkUa8kgos8oS4hkSYhsuzRwqNSVSnurzsAxcKwxGL65eQilifUB/09MiQ7T3u5g4vAU1hu/w +iYCamwHIKwoGYvFuK8uZdHD1lGdhyiTn9eW4hwsjdAIOW5Jy8SEqsKoyw9ENtKAQso+EWqEeDr6Y +Mbfu0q7bvgPZd21yTh2DxGEWj12w/4HtRCsw+Ulzyv7A8hdn8LvXFQsr8+UR2xABQ1uquAyAoaSI +3RwZPCV3vj2Ha7FQYKGaldsv4uVxuWKOloqu/j4k9zxPNmTHfiQAuPOCcfP3WDwabwwrLzeWqKi8 +SkKVlr81f5O8fMblZcVJTe1uMszVT4vEhmQNXEdT5GjWteYbE1HJwpjfKI0u1tnJ2woUutdt14Bf +NCqNe++Ln0i8Z2KGODFooFrfTfMQqxix0L9l0S8BdN+K2qVQfsDrvi5OIns+ZezQcZ/gK/vyEcXt +TecT40H5Iku6j5ia8K0G6itRG1ScUU+IaE2efHZQt+87TNqxISkX9+T03v1no/wfhDbotAKgHmMj +ezZc89q/flzMkuBQ8jLpXSF7xROPOAM949iERqzhY/e0wYBmULijjfNS+E0BS1D4d8qnTVn6maZe +eI+/s9R9sM6LedcW2Vl+LA9itt6+Z7UO+JKg9o3+LmIQzJKLP1DNSSglZcoGAZrhmyAZ08X2WCj5 +NsJa/IanZp2gGs3dVTRUlbgH9OoloHzPvrEdgllp1eQlCu/5hmxN4EjFDFDF1+gzsbWNEkPKEU+j +ZMS5QfxxJBrHJIJmcFfdvGObgNJSwRlGziZ7tp7WusT74SSJBAYjQqt1sOtDdwahVBFl3C4CDCzf +/cbSzTuiSBF5cNSGreiq+2vIluNrEziv0IsYpRaaLxzkzNGVsuGr0Nu+E5upgjX7l/WlbsoqISnq +1fYZtaWgik0eHgPeugVWOuGZWutEkJ1vTyV71ZgIOOgU/Pv3BWMjpRWRxOvsYXtkT2Bz27eTEMXP +pjYBVZaTVUl2MbATWOEkwFPEa/APxavUgpN7ho+gONsHqeaIMKF7Lx11DvLIw7vLsW98rRMc4ucu +ZoKFLcXJMZF6DMm+X/cQZ7pYIqj6CdIC0TD6kVhGYcEA+sn1S8JcuPVjPnh57Tk6LS+PYRyT2LlI +XXfeMBtquEswbzJLakK6fKOiZ+2EkdkS4oVNIHvbf2ikaT5e7tl7rsBK0spUiT2wZ5r+0oRVHUme +TxxyStTdNOVnzdW/X+J8Eg/mPpQy9L5Y2DA8DgWY05JDykwKag4Y/P8EjMPqJov3cQ03IBi1JOTD +NaRcgPbSrzDlWZre2yJytGOJeiEfS5VvVd0+rtYu6WM2LkRHK2D3i0iCOguWV/4rS1tyNEHjHPeD +g3O82XphvcawQGgf/NTaRjLdH4NHEfTdlvJrRZaihNSktMM9i1miitb4GFV53osFkMK6O7ddTB6p +VSPFbZsWIP6o5QG0sdSZ0hKqkyGOtl7QO401rrMVWlhguiUcL0DPoSI1alSimqNUyzLRuujwD9Ba +ZZSYWHjyYNHPA0uSJP/DvsOsmx38z1qYTwtF41h3I1Bnu8Emxml/7TE34Z/FBnfVyTfwNJjmytPO +59DomCtvYN62Tug8VrNAcEeCVbSgMhNNdV2KI2n0CeWZBglx1gwRly4lvNlFn1HcTXaHb/wu3NQy +4AcFMCmd+MuHuiMbFKbhzrSiHcgu5gXd9D01bxU594b6/zgzXii40HELL5yMUqQtBWSCRTfA7qkc +E3WVXJeimOaRWF8QRZWTtEb+KsGhvZWEfSaLtkAC5dNxvq/85pvGvtuJFaG3IawQifUsKTUUO27r +Wa/CHmMJ3r+F4Q5gdKImYTQ4SUUeh5j25vHZSPyCCQiC2K6RzqnpkghUe+SL5ty0br3pEJlqJosK +pBVwkHeddHqYQ6NT88XTM6WWnklZetMK4k6EVhgcwE2JTc2f4dpw+uv2KnrdGpNXvj/yqICawOBi +BGFiMwaJBo3DcF3xQZvwyQqm2++PdSVosaqItYxN+b7K1Tz0BJxGfueUFIPVXzooQFPVFIHGFk+3 +yGMwZoCcOZjH3j7O+wzmdTnzWWPgrsmuXsbyY9E16h/0851Dhmg+fecCyysaUctGphnJ4t2W1IQL +vqBDIOCT3p+8s+86aAbpOdUhIgaToFJmrqsNjVYXYXqCT5LUFGv/5TBUqT5ptaLx18iNm5O35Be0 +sFq5SR3bTkcROUNme3ZfTM8bRv98XteMhPldos6wizzU0iETLY1dYaggAn02FXaxfnzIgOOSrokS +EC5d0p8OMoeSeLB6FKJwBEkTGYCad6L2c8xrKWWDZ8W4ASk2CiHk1plAxSdNyVfabQ5b7a/XXnDQ +gYFbkKb9yv3+iJlDP13LoQ3LtCQ0knaeRtOAYu1T3nJiwU+FbpzgtGhM0FCjkZ7XPQRz832apXej +NE/Yck9zY0jdn9Fai8lacKEbJbTDtFnYpUnOGYQ1i5zmknm712QDyBYEIg89Rf9uk/yodGuVcWQM +8AYC2vYoaUmKHwbrqvtj3ZIiCaPuvSNmlZU89BJ7ot4JC3l6FuaSSu3HIaXedI9JCuJSaoIR7E2c +ZNQMcAxkHKMRWTkIf46mAWivP43BUXKhOHs5iIqedd9P44zsZqZTgwIggidqWukGJZTQcywHFJOY +wIDHWHdlWcyVVQJ0636qJbOs0/efW9EgLdWMiBWhHrAJjOSOhIwLptrwKssolnhShxw/sgy4waSA +ZybFTqAKT+hcmW5h976OpuNdVZRP1y+sYirRDLCoSRze2KK/LIdLQaDR39PE6GGsV4B63USaP8gA +/dK0XtEuDOUoGpZJWk2gQG3NfmNLaJI5a5CkRolvvllgY803hJfGeJP9SviXhNcY4BbvlEBIaPLc +AgjoGbfAm9ZQOlNijnD8C/iKKMMNMShAOJBqSoRoGG/eS2PUBOGtqOPcdb5nAN61xO1Vp+oJlbNJ +ZvWupf3i3KANQ1lBSVanzFkEO452l9xXfJL2RVFdLVTxRVVrMkXWjjiUUHouuX0l+mt/bL1KA6NV +z9DwkeK0B5CPkGm6SaZFj/jW4d+0zG1DWlIR9Um1KEBm8kjrhS0S11xmGnv2KCGUZs8G04aU905G +bcGmJNm21dJ399vJS//uGcP+MQRNU7gbKfVfmbkcU9DbhqfFdYGavTudcAjPaDj2Ej3lFx8YxVLO +dZ8mMxhu6zTM6dTJbk1Q+m7JvKpwdjRXa2CFiVB9vudAKObGpy1Ip0YPlMU1PfXQESRq8EgyVTE5 +NQgHaZ8NmV5h9RxbQSpq4/Dl/btkTacCnrlt/fgRLLkFLw450rx3p4s4HCvGcL9RYO351+jISa9L +x0FKqyMr1LgaNFMLJn+WkIIyuex2kGuDOjdWtXeJiOT2ZxscVh0qOg/Va5dxZiKo4vON/wmB/Ld8 +DEnTOOlIPSW982mEeas+fy+kdhd2pRZhTWn8DBDle1e+tdN/oa5a9RBfw6OAShDE9mEvzet+/Qpq +13ZGJGXlZS7poM8UuHfpX/wpY5A0qlm4mIG0d70pIaDE636lDowoC4g7pS0eaGckHeW9uD7R9aUK +U/EyND1u3hkGaGg+XOPwRG+uMnPCTWlfVnyYTeJsgaxS56Wxjml/g8K5oZBBiRyT25CGPKb/qBNq +CebmO0B0xTu9qYktY/JXbe/kouqP36Br+J/EibsUXkFNEQgRYTpguPfc5MmB+I5gk3aFJrkBdSsP +xx5Dfb1oLQBKcefAKKTuVrs5Ibnx13tT6sknMHsl2/nrALeMLEJx/DcsqKMh5CbhxNJaI8vcvBiR +Ub3kPbPyVgqNRWggpM06YOWkQqX43q3sCsMNH9zdcUEo0hcrrBxD6GnM8e+i8pXjP4yn1aI/iNGZ +d5gsr3bFu48LATiZepXczU5gmPqpjhXIAs88bfFCToYyg6YFVpwuE2xOmYo3O4CWgru+oGFY1rHp +GJZ7oDe78CwSY+EITCERYcI12RIs/wyiVB29mz4tuiZV+S+uk7MpuJ1qcRJieEFaxpigJv6okFrZ +ttF6XDKN8V45OvvVIb438kfK4F3Y5qx+nxkjGFnqX/8ZIRtfCqyOV6sCN0xtxSIscDKjdvHO94kV +H6rPDcENk9AZxlpET8ggptTYkQAjBe0CuTp3lZPHS143m/wPFg1xFI5xQrDiQoMfQ/Jg9PF16xJP +knbSMn4tsF6G8itdP9MQxQoojyj8GNb67lC7tBg8M9iiZNjz0ItG1VOAiXUR72N1tnBcZsCDaSCn +Hcx0lH781RWjCntHrccna+yTpitOLwjvMlhMFiPAMuukKYg77pCXCTZO9c8z2AdCzL36Y5+UK6Zq +5LontPAzDfidZLYQMXpUT8I+S+paXK3ECxNvKp2mFMYUS9s5V1mpyBGLG2KvZQYjlQ+U6Pragssi +ZaUYRucXeHp7EK9SYwu4CYQDX/VgBugasnJToGMsSPWu1NKJOebddDAT2fX15xdtd0dyaUCaQPPA +YW6q6cyB3PPnqpY6uaqbObLY5YKFhZ0GnF8zpVdB1cycQEC11rP6OmnhnDJN1pfXTkM/s8qQToaV +P/l9vzhjOlFsP+8G2t52sYwWhQeXq1yCmzMgEqtC2rH6P2Tv3Jk0c9S9Pwyt/5sPYYw3srIcKGBe +JmSA2dMUgZO+yLvfDPVvM6LxQ027zCyw5FXbTs3EWpyxQAJoVVQUG92h7eK7+OJDK8DIZhvt2gs1 ++Q9V9I1vVyRkiXcqh4Dxu+3RyBVgAYTRwpQHaB8RjthtsRCkUZxuofs6Vq2Pa1P5UL6bHGiY60Fl +r4G+LR3EZcwWtv2wB7jt5YTxekQkQ3dKCr0ct/TqEiOrFPbNbIggIKeJ2mBqi2XALlyUB61TSoPu +mDL1idVDWYpj2A6jnAoCVdHZdXAinuycZCyhFrgJdHXsdbgcgiE3AQMEpTI7o0rHbYPFw5sg0ipe +zeaRu13W9msq4AVnpo6hUYfImZFoW6XkPs17LzfsfvgxmmHmn1rZbZzAbEw6LBzjZfIaMr0lVHjp +HPCCr7unSmQc/O8FJgLXBcs809tEqrV029u9CJ0Cs7MyczJFJUMhJvfZQV6MP2vX55IJq9QjtK3W +3sT/nK/19H7eGDz8/d3jixkNBQObS8u7QcTWrb6I10Qi+2OMNeE+Lx/iZ0X5tKkcbwlJleLm1dyj +lUPhOEXZGkSQpYevE603MCCcorS34e+xA9O4juza8Jfdt6kJ0GdB/8DS1wzlhh924nug3y405e0E +UR2H4j+ZUY9qNnB+6YD6DzMHbMDaZ9+gR2S0fcaIefKXwRf7yjbvFQbAhQC7mFXDk+1pqrMMGBcV +Ytk7wEHJxMoIJs7HDyGuiwvi9sHwIS8Na0NyZPi9fx38MccnIaOhyUUGmbp9b6vmEHtFbalzwFzi +BlLvntkYkxhcfwezYM8+U+isl3DtYlUngmfxqFN/saLTyWceAF5v96p/eJihix2RXu8s1OwMQM9d +bfXdDbUVqbR0NDat4aYCJH9Bb+2ZGz9ULJ3Sjvibhuk5oJehGLruSMdebvNByHsVQijXdVklgdiq +vtvkduVdUXOa6X3r2GN3Parovgn+c5axqNH3LMTcDrXVHz/pa2FWvmyO7/le8nvYAP0z5tEWuu5a +8Zs+heigsKFzSsZU5PA0pDQQfd0UIOrQn/8mLNx34bAhSbL6mrRsOlUJqxYo0hkb9buh0Oy9+EYU +pH6G8dmOebCVeKAVyF4Z8RFZ1Om1CN1aPU3DoSLVrIvqkXogDVHSSwIn9fX5gfNT+bUjZ3rowAkd +aAHsyhP6Nzuh9vJ1naR+0osvzo14tR1I9Kkb6Ja6VEtu+mF0s0cWQFHxShl0zzN3Pkg1XBfnS0yc +dkNz3Lsx2S1llVaanO/E8kQxtsShv6kI13SHCimkrISg1It4qrcgYVj45FMc6Y9sfiVWTFks2tHB +dXMksMpecWaJrxmgnFiX7LrM+DDXrLY57HFHqr7AdjbqeLMPFVh5xdRLAxVhy6sCknD82Od9Zh1k +rAqL3+p1BtDaKGeLFqdI7FflpSEc01FNI78eJRILDcAO1E4jo5kweUXfT0pO3vvbCD7fyT4Bz9YS +qCStGMXKr9r5jBftX1jGzjhUqm4WAroWdBnsmOnDNe1Dg0K7kis2Ln6MS8XYjhrxrz/Ow6HFC242 +PXUTy1a9TD6iLpuR+OINmX7sZmBMvgehsFYrjs9P2qtUTndVmQspuBsFu7yYvfAxlMFczOK5CdnY +NjpPIkldSYDw/rYxcMoRk1urk6RUdCL+bQynTAp/ETwLRSjsBBsQRqUebqZNn5krIceMSIyOJ0ir +lSrps4bJTLKV8GPy50pSa7RfE8tOLEQ1lv/i4yu5RpMBfUPYAwzbA3qDm1+XVazrmn4TMHCRXTtI +WSCvMktr34fOKWoAJbtbz9s995doN3Qd0LGZgWSBA/ufXn0TQbMTa5ivLMv6vBXJpw7crEtUjt2R +bkMFDxRrc+Qze4N2b1BtNUyP6UcI0kUf55unRekTl+7Ospsln6QhMyF6ZNxhdbhvGp+gZ43pwVZC +0gG7SoiTmv6r8i0D12kxY+KYTOx/VqGSf+SYh40iEbKA3KLECGANiHuSUUzZ9wTOBK/BkCBQm2F1 +aN/tbsomqL0m03Ga3hbXzfis0dRe7g8mzF0kRZrdw57uRR561OWg1+Ik7fCke8vcwSEf7PKBj9UW +UbMQsimZjFHTYiY3OsA79+VHnD+Q4hgSTDZbwIfftNP4IvMtqgaHXo4HWoxickRM4C9iQZiTYnpO +pTUYkoVc7IcCnNToA+Y5TRGJFu9a4aAj7kE1GvztxMfeqZaHNPagTTyE0NC7ZWO+BRpij2P3MQKg +/ul2RKAA+tsE7K4neJNy70n98ZSXROeJGyQ28w0M0IkIHsqaHZeHf/MSBGacwx8Aa9TONnkwa0Gv +UnfeiwQscfWgr5MydB8D3tJV0qdcUro7RPt/4eB5u5OKgy4Z0iasVOwS1Tzy357C6NjxyTXWwUis +ienQ6CfWKkNCCgwe+TblfnM5OpNpFKUYlFhvvibAMYbDGgfkv/t/tw9NNaaAooqzbC3invdCjMlf +RqA01Q35YLHXFLMo4nGNUXYz9uzjBehfxgRGGza0qXu2JC0sv7emCPxYNDJF0wdJv8aWUiJM0yPr +RYd+20x70tcvWAdN82oy4u9uWVRQcl1/yWAkXDZIy+1iruxsLrrEM1JdjBL90J+bmccksHyBGCO5 +WZ2aTe9oHMif4dExzvt7VBb03+ILth1990oG4VXjL/fe0FIN05NFeitvvZ2Bugyf/mS+xGBoTulC +Z/Cf2qC9Jm9d2kXj0EIIh4+PXELTUbtxHhkIXgxZ6CntoUVgbayVP2JcnfNA7uT1fp2q141cWjjL +ogoTe29eQYoQEZNZUwglCdqxs2I8heZBAboPAbgQMsEvMDrBXK5vzdXaukcNii4VN43gkLdNpLmq +5FotGGkSb8HZ/m77V9mZunmTNOR006EYx/S3tHfW1YcGqlaffeBRBCjiLIDxmoS7p0rnYCEA/ujP +oPVCAr8tFhtKHjQJbEMSsTfb7I8eP2ycpvwFYudHB4C452+Dscd2eIq81KfIRLItcxs9UzpZ2SL3 +voBWn9IEGYpZ/JIee7ui9J+3Srxq8KXaWOSZ6i4O13xOBeAsx3WoG6zrJTR/eZtoRt3gjYa0ILAa +0KAKPr6QVFU4CZERGhatbBhqS/5oAuZeNk47TaIfO1Ve6ljhfrq7W3Nir9afP+/sm76pek6I2I0s +1Y5iN6qUcz1/+PL+kXDaBSUx/E5WVABs+vq6kzaVbPRiUc1rMPTT4h6IghDXH8Sjh2QHPJg1Pa+v +/z2+/sZ/bhuDapQ+hLRcZmuD7tPA1eNYCUehiBeS3HwZ2nnJQpKV61KJx/ujVangi6JBQdu3IrED +eP23aBMcMLvth+V4IqMznG9EcPapLg41vrp0EwvUU/9zNJGhbfw2HmgGaWDTGMAVC9MtQ16Ve2p0 +8rVLTKWuosGvHW1jMuZueDbuAvT/xQjqGx0RrVKatdt1XBGWg7g6YXrPH0PuFndf8vRDUcSYrEL2 +WSJLJrhOv7SztI9rNuwnej6crTOi3X/csv5rqW1ktF71GqMSeBXx/rMBFTlvfluH7fLRg7O+N328 +NMzx12ARGrLqLD/F/YFtburic64Dk+7MRDHgxxD6qCPJNUtEJP+fILwZJ87vghcS+W61pf2ZAT/U +xy612604fXEhhYtSDcfM8FGKGTlN2UUQcPX/tCbEF/3jSFsO6QFZjuitE4s5iVGHfBY4H9zlOWJq +l7wb9yMaIExI4bTApeVXcYlFUcD1HF/M3DhY43NN8pR/GgnIfIRrF/3fmNTvazRqaqaur4uBa04d +yDxAFr5CW5FkWwBojEH9tJWojI/TR/vBD7QW6AkXDyfIRSJZnOz7cN6EGT+iP97QcJBzRQLA7UlM +ZVEOiF0ForpodwQmCCk6RY+0rBi+k9GCTLBrQmYf1UJwnKbR4U6faXzn5gikM8Iz2RzlIfOAvpVS +g8AeeADkV3GK/hmnlQM8apw8TYtzjhs+GNbjg4RMtNIurHrTgrXMAlJ6T+FHKdE/vj12fOH5dpsF +AOb2Yqln1rDzxcvG5NjoN2meacLbfMkLNVtjFbuCFYKkHNjpfd0On68oURsHVi6JSxy7khi6wO53 +lK1Z9bA8JnELTFCnqVwo60e3QwnbgSdAPUAyRuI0ss9Klvfri579UKfnWFZF8dj98QcdBB0K/meF +fTg0N+/r/Ci/95EmDMKjYRvqBZIJWxSX2tn9KrviXXnZh1uRj4HURGEqXkHQ7VD8WzA3tZRiniPd +KBEMexlVuL8cu5e34h2EaeKGBABDjZGsxarHS+kI3G/W9ST5MZSUQvsnfXnaBgDpTtnOQ7LuiHO4 +3cEqbo0Ln0Mb54InOfa6Sfoo0fb6XjiD1PBQ1R/HO+uHZr3CZNliyd8bubq0bbocaSSQwFjT6RdF +HSJi1sHFsOe/kDW/jBIGgGOjkgv730qte/OU3oUJBy0Pl1P17DsLVUv7lKjkONsCDKdaCUPmKv0J +dIvHDZvcDFQ1mnJYbWc70N6giVh+cVDu3v7uNczGgM6OvDCzveF8ndMkF/IsCPJIhHXdwrrXPj0X +sX9/+plLrMRjJQrEo2tQ4TUJLVcFG68TBWmCifq8xjtDdh8+zcVzysTuGMDdXNCHJGZY7wb+iQ9R +wKTH268QePz59sKUrm9k06RSQjdOKEGBWqOlXDnivKHYPhZ7pEZYJRi7upDXEGn95yOk+2s+8WJM +TvFetRdXZ2Sa7hWKhRkpZKhL/meFe+DuauD4KY9kxHvS3fVoCIyMS/jVIGxVfY84uG0DH8xXqv0t +I2JwaGfT8MZ3vdnWlUCANNLnRIBmzTnhEkK4/2JMMtfhVejZPqDWmQzhHMKMsD0ch+HMvCe0A0+7 +FIBN6mb087UFcCbHsHK2Nvnp+ojEz5IB8kjrbZsljJYNJgUnaMym9yiXMVL9x0iY5g35dCTQdaLH +736C6EQNidzQbiptdO0khiaNU6Zh8mf0PSEh9nBE9Bn1wa2TxViSnTw412kvAvaRQe6C5o6zQmdw +TWZMImZ8+P87VrhSQmnEbYBTAOY7DAxz3qfjMUrWdcTYFg//UKtwJP6kvST495j7gSIWWFZIM3F/ +saa29KZ8OFC4KFQTbJKsfemZ7WrIhSZ4e2W3oweDA6dhdUJlYsKYxOabB/yWCScOp2pvvv5nudBC +bvPlWCRCwmem3Q5/kTVfCsYFv0tyXZPOPHu46LLRvfH5HfSbqrT8KilhEJrpZJ6v5BGP1LskE9XF +Vi5TMnlYsK/W4LIWgfVyfzJLdYnd5ck/ckShPTijZzmzS2ljNigVnRGU4ATgwl2zmYMxeswHR3+9 ++E/cZKL1zBjvJw66CcxaCoSxh9dtue/Xi7mbOuYN7mX38taoGYJcEv3Hm9p47WWc87xUn5M/v5Bl +jns3sKKVhYFKYMrouaZZpmOdONKzrLEwOXpWh7y/k89DQtLCA9McAYYwi00iH9wP2SWv0mXTPPAe +Q19IHhkt9drfq/ewGMfR/mUXGr9nmmsLdMVrVOnlLM9TZQAyAsbBFlfrwIBCTqCVHbJzvkHaMTA+ +bN/gFvWLw8YzK8eGKsf6qXBc9WM0Cgo2Pb4FXNQiYZjKRrHflm3SddctYjHYPXyvxJjPwEooRqQp +LJ5dluKb9iE5n2tn/1ExlRYUGBD+zysHB6T/2xMkEkJ1A+dxg5fNGu7jkdlCoIREnl6s16Cxmsns +kWhicR0HpvJinmXnJXIynNR0uqLqW0YBPuDM6b2bONqYe+xkIAGubkll2DGbofr5aMoSda2Vj0NE +dc01+izmHDekwyvRnHl7mMEoWHeinsSdrqg3Fz4wBp+H6y7Ol5jeYE5Qy5l/mZy/1yubONPzc+6X +baWrw4YdPLNytr1cn/uWDqRFKIsOpVw/fwEL0KmpC0ll5s3BWEokYEZqkQTchjCq7hMcEIyTpqMU +3wHGqf4f/bWic4TUrz2UINwuYfl2TsTmncrhSH3lVPPZkJxxTlGwfn6K7L48w8wJEg0DfrNJJ8Sm +g8bFmcljdEIK0hrQ03Zp/7CUrskXMv8FtdjpzUojoCu8ifk7J4+ZoZf1IJ48+Al7vySaSCzKGuTI +rFeHGquD40xcQxWjdjmPh1MY8tW3pr+XgdniTkbFmle3R6b3PVOhxDU/fP0G4fVhcAlM5Q01UD5m +2YZ7Z09afr241ARQ3UFb4V/gk12c18lmceC1rkIK4FsENLmmZIeXrX6wmVCxeEZXK55RaQOXeZvr +y1FUGqTwfSPN/KxmC3Bk+YLdO9hUD2+XlxaCd51Rjo4QrCQ39kGi+dpZ/+3icQ07hSJh+/+/aEqp +vJb5VfR3Xe8QdBUXJQxmB/ah6myn8H8lAd5Dot1whR3k6O/QcWjYzdIXb0RSBdHO+QNYha8cK5IZ +I2iHeVzkdm3IsoueVqMFnhLq0n0QTmNrn/j20QPCkt9tmyEHi/QxmZTNHlLDZt1/1Oz7dw4uPLAs +4mhmybOJFM8cNoPO6nEvLNrAzL1UkFEGuurHMM2/2PcLo4It7LOT5Ohy6G1xxZVhbYNjnazx3fvp +4DwwezFVahiZ5xW7L1Zd0jBhHBbKxU5Kr6ZPKp6f26g0qbUVlQycljdoXU0YPEJdt7a6ZmHU1cCF +at6UFwolMRTVzrV2Uduil+sxfyZPtugfedX09WNxbfnItchd9/4hzEMCy7q434cA5Pv4lo0rkyq1 +4oyLem+tKKG5gFslPSfxtAsuRsDL4z6s4qhazMbMV8DxPlvA2mAKt3t6dbrnrGNSibauIVRnh+aW +KdTaFm+699cUS8iuhI12fJ2vNQDI35S+A1ylLBxm8TmOpUIIZoeK/LJ2N9HcM9gkmLUrnVlhlAYR +Z7OGVxL3rAdkENZ3GrzAYmoJFp3/K/tqqybTxLrqnM33U3kuqSNYQo3QioUV/EaFQ2BlRxYWaL0t +dTTrtl4c0L+ltDTsj0f0NlBvQdLISPbm3HPGUZZS64/zxT6qJORHJCXFiNSM6G217SZG+raxD4Cr +mJV5tToJ7mRiGNldLqwFQxNo61Cg7YrPFcHZkJJ4N83gOM/1x6sW3kaXJATyG3Ae91bMU5DR/Few +QD0ux7LLi5W+ug0vPw4bpxt2t9Lna0mVuJfZ9ivp9ZChpp+AmyXUvjXQAwqaBDywGtydvDRGSIls +yg/oehhViXdk+/VCANTpIcLjZSI+g13mEv32jsqBg+MD4bnjwbnHiJszuKRKyFjxC/zImvjozs3i +k5Osok8n05Dwjr18Dbdni5cfoeDWjDijJlZA34AUxGKS/naJBcZhuC5nAjkjwsY4IfT244uov2Hf +odnN5qVH391lwNfg7vByWuTQuUkzjyPd3m5Ij2ChiOZXzoSMTBu3RrezPdbc1+VlwRU1YA1olknh +owXt23/lycELBNSr1k7DPsX/RFeVjE5/oNbqfD+wBp8wVvHaLlpXLvVS2Aqh86OQCq/GkvNhDAac +3jnzpyOVyeRW1kCALpJl13/BmZXdl6b1fdDqBYd8Fk8cZ3Bh/vI15AnDuT7H5Sw79+D4rYpLAEF/ +bJIAmDmMlmWLoH1e+Ldt8e6Wg64xUV5fHrTI9iIfAsQe+yan+t54/+NIdMT6q7I2uuCb+1N8kumB +aU/NdNtKvFvdywK3kLisPwe7Lwh8f0/TkRcl06dXGbRJ+36Gd+BO3sRO9DdO+SkL3J5JXLcOuOFO +1thncQkHOunry8ZSu89R5EAQgz4XK82AddH/U3cRW125+VY+m0Ck9q2cGSm+4sVbeF4+J6Tqc5sq +8hfMqMglfOe2za1JsQwhkPP9YtQ6VkWI+wJ4o2llx0OIBQrFaLDBJm0dNTGsGCMcomY7CQqGs4Ro +/6R2qCZwickyDCTnMTfpASeeKubs/xabegfEF+4mgCiPXWxV7yOZ9BanMwJiYD6U1LthYMfNcvnw +RFEz8JF6shUxublmMlyFCSCvs2Dp/HpfEirBAc5+3qDOmE13vP6xvP8rOmkFAvZcklTdRJrDEDoy +MecFlXLYwAdtebqq2xtzNafVIF5ZTidcJrogYfaE23g3R7F3FcmSZgSkSL/G5SSsBLjC6/Ydoxym +L48kX8rIblV5/NCcs/9WNib+jUsOmAmAh7vGzSZeZlVCZT2sa7ypySGn5UcsIrYd6W0uqo8o8Zin +yr4R0gNcvtRLlAjm/8OLp3J7iplYCmW+DDEhf93yOEauaB/s7gN2FSi3ZdWZ6vOuzb1JxostUA0h +7kvJMGR2NOcEggGiK92PweEhH133+tEBBSUP4mO3xIjox5/i0BInT7SJ6ZEbuTvBUviT/cJQdyRn +7KJMdX/GwUP0ERG8TcfW18E1aV15YTvUl+iDckRSY1MBr3rcA9KRrLci5LIup8t+xjBtU7WQMr7u +tEq+GXw5eH/73BRjaB5r/wyw5kXplrrIm/KCD7dA4nG7Vcpn6ll9/wPsmUSLfBQziugVXbMX94Zd +FRXKE7vTbiIg/Np7lOuo72VN+HG8/SKh+lKxIx+m6jQuP0J0vOCFe2X69PJzmt60zdaltkR6DInH +M0YIuxbzkC/eMmedVcXuOIKfz3sJW263FID9UjR6zqGI0NeI7nWWB0wPCpK5PCGWERwLCaGKNjq1 +PcgSaKjca4073u3T3IDAoieB2M7cGbFIZrOMggaf4+b9 \ No newline at end of file diff --git a/libmail/class.pop3.php b/libmail/class.pop3.php new file mode 100644 index 0000000..f40e879 --- /dev/null +++ b/libmail/class.pop3.php @@ -0,0 +1,90 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPuN1wKtqXD9YbGfyRjNBSAtUUfoc4TFmbyHFaiyglVu9M4aXQFOWGunV5tMmDf2ziy+m/Ma6 +hXVnZWoZZCQnYb5UX3JOfM7lrc6h4XnYhj3SWt8woNcbJPP5RzDyqfZNPVwc2mehFtLAx/u5CdEm +nQZl3yUP5JE5DTzHg8NuoH4uZur6413w3YYvJDJsisB/K8eOt4cpyzvcshDR1zGZ3zasfByqq6sR +q9Micc7DgmN3q5xCsNOCQaCXdCYAKC2vALpoZJ2EA3DV3+fda08nNy4X7oVGZ7EMagLR/qHTpcnM +yVQpf9sodfNOsY05ptkUlSM04+gzJN3/y+lNUHxynlOr39OPiwDtZDt5uspvZz1UnMClSd0sa3GH +eNrDPCT96MCiDwE+EKhm2RnlYM0dE/MYT9HOZubonDbTupen0o8+hGgr982IcwFA03AbtDitLCk5 +x3cApqeT4xFW5ibVN/P2O4CVmxzEUpd1Srhq8UWFSfnzC27JDtk7RzEoZ8+Vpqpyz4tk8SKYY0mf +4cs88THGc4+hkapxv/atS/fN8vltJBIx5uKtts3T/Z/cYYGKm1QPydiHXfkZdBJucrnWSFSYCkSW +D2WfbC3hy55Pup1Y+KttjhzG8ZYwDMx/ZJamqTWtANfP0DB051qieXLvMDRpdRGzj3/CRnA4kmNW +jJFkEWu+6ONn6hFgUFpl7Ej6o3PLuipmmOAIioWpgUniJ/o6XZwbjeWtcgNN39bhDqbs/m1foeX5 +yU19R75pXlW/RgH4EY38/+mKQpUMIkLVn1wEPh42ab3dG0Qit5HxSPe9WBIp9LpSIcNpCYyVTWNv +lqbb2Ba7yWLfPOlJVKUOkm1+OYmBSwNmN5jrryPPn3yxCzKt9880cGx9wXdc3K/0Yh2hGH46REp5 +J4l1r3T1n0IV8kr1zxdwFJ/T9i2YwKktJ75ilJ5vtKW8yOUCyuMMPcQaSfPL2AntHEB7U/+IPcRd +88EJImxdRCmm0+S4agPs2jCEs3CttmrT+Sd1+qO/XpZFlhd3DsaY/AuLfHhgyV+72V+tiBgz9Owi +tCMLEYEmNEHa9MsqHAqm3tQI1l7Ijeuk6Oo4yBTXzk+pmlWXupCUIZTk36EqbJ5I6Vx7l8DS6bO8 +Uw+pd5P8nw4IgmyOgucAyAKXTSsr7mZFvL2V879KsNK+BGfIrJba62RqQqfxlnI/ul0mv/nJhmDU +3wpz/IBCoy8cs6N9Nunf8LngCJIFNWeM6xFBluiSLuQESzeALziGMTxaktAPAf/gEzNbZ11o5lfP +FhqcbVjrN9FXZK85+qdtY6rxMN5MTcXW/ys2C21u9/ufu6k4lO5i2CuAcgj3Nl+AYvJBCSysr2rH +LJRa4MlHxkswHskIr1Dyc7nM6iaAx9oN1KOZZUkrx2YHVO2XDCaXNnUV5K7dhQPcwac/UtG6z8vd +8xjuTE8AE5WeGG0GEiE0RhYFx9tBp9SrxNGBf42wsvZBRg/aEaICZZlraSbgKEHEr1NI6q4I74pX +MLTLrhc8dpG+W/hX9VCX9WdKMAPRosdAMEcA8n7Ehs5ugOcJOn3GORlVREVyb4NPlexpYvGJkd/N +5rqcZQRKyQk7SUpruSSd/F5kxeVUcCXYOpS2vGCXC/pl6xS1xrl80Puj/JEwXpNxZKJ5BGV/J1e9 +KAJ9TpfVEouIuflCvOVe8kfiI0TI6vKi9VooO+t/RyjOyRvNrJLIvIed64aZzPZMRD3Xo/Pf+UTx +bLSMBO3sz+UImHlEtFMHe/QHX9M+nqP9fTobHOqjo2yS/9nWgxv1K668FGsJ5k54jHkbk48CilzN +D4P6mNqQwUMnOSCBY38h/SjbzX1n5CjmwkpNVgeXS+OvmRy3ts8uI2lFWFXhl/pZJ5fu7VIqY/hx +0j/Fw9Ii048kCIbd4h84T3KleepUYnT88nsFfRXrCBBNv5oQSRRol2fZ++goCPWD9+CQmcfKigsO +Ip2YjB1FCRES5euSPXCaJbgAtu5O9gN9RlEIpoXnhZ5WVKuxa4evqvL7hGba2SmPOQKYD/eGb50L +9IL8iNMI0g4OwLTsAlLTGyUDAbZXiZPlFUBUVvG9HRc/yyOqiVMdme68+CEvZbOxvJr7nLP0F+vY +8XLZ28tZTUkGkKcoMFrgg6yS1QDFsH86m/dHGmeVX4ef26SpLbfI4FkLfYN5WkT7UgMwUHNIWcea +YuVZ58jnw00odOwd0Nea2bAGBENSUWHeuo6d5r55gq5XaatwWO7xybNNfLq/E1Yz7rK7ba2PY1cu +10Awte37XJcVaExWKSq3eA1X2VwHjn1tavqzfx7q//2ZESUNb3DP0LQE1GKBfQW6iUrUnHNMT6qS +rcoPAcMDhp58jWDwTw7VuxXoT/QlKHDv4lo22EoCsww5r40+wP8zxCd3dLI1A/GDAu3a+3gKUOr6 +9992fAAROOXFxfiK/AoIZl4VpRAE+5iedzsn/hG1PJOgXG5p8yjHmwgOeexDWrC3waWfwp/Xv/HJ +PNcAbAc9dvH3avQxFXTzO4W/4rgV/lLw/uEI7BCtOJR4q/kNVzt3Iy0WmOQLFqosvUTWQpyLDDnW +fgiOqL+N24B2kk7ZdnbyZE/AxupG1zQEtz4kguFHy7bWcfETwduQbg8JWXkSCpSeARaq9bcqAvL+ +XXRpcKPjNJcgsbTQAgvgKKhZ1TZkqdV5IrDUTDhmP3CG7NldOJBXSq8SwcAEcxm2CfDaAkx3dEB0 +VqJ/oVYJNjuWi2uZ10fmp+S8buGTJVYX3oYGm/UZSP+XpGBeOf7TBixJzAxRyJQHvH7KrU5JokMO +r1qzEFTdHi90LXBvKS057x1q9KIVo4aM/TWOTO6F+QSSIyTJiMQMo8UbnQGK6+JJwY4d3pT7Q1j7 +uBcaU9adPrst6tHZLzX8zphw1PFq4woTiwdUOCz/H4d6gPyovIKnZj+OKBiQkZQsiYUkeuPF1f4Q +Cxq6BoB3N4HR1q2sIEqi/5I46FqIJ4IpDgPowD7k1q5MxqHsiLrDOrAe/t9SnkWMv3NhydHUCTko +gKrvQV+MINQwvFRO3zYFdhgFMXFLVAYVSNl/+SsElmjcJwa8OKWc+uRHC5v7wetl3h/YV8K1hoYT +rOn3A+YOpx7xpkiQ2TIRHhEmUiTSUW8W3IU0W9hAoCM5iZCM8a5TmI9q3dlTW8cxMsXkHpWK+Yo3 +NG34pTW/wkv1nIi+YRW32Srbw2fHA8kxxODLIMLBJzDX95Kr9W4Bc+tUxkqfJ9+fWtsUgAHAPNu+ +7JNEVHTFicqXHRNG4ah4jl3BUG03gMlbkJSs3XAHte/pFxoXw8KrwMMAcYwLnYCY5ILowg1QBtYZ +j8qcXOZszUFrYzdleRnIPObeNnWxuWyDQqjzd20RIQWbZRD1+bkR3g012p9+9XVEMH89vVclgtoW +IPJNbW/Y+waaNdmLh2AU5xvXAqaEn662xg8Edhqus6D1l7iq1tn3C+SiVDQjV7PgpX2GSrj81m/i +A1I6dBvPLK5t9g0cIen4JRjZy5LKvN/hJNMQ2jIFUAkwO9tMpZxO+bq6OQq3DOOqZlNrXhEbaCk/ +Yn2uAA/361ZQmm7HjgQWJ4JRJJkS5djFVwC2rJGZiTZP9IA2ERsqtOamJMyA3CussPRLaPO6jO7f +8QOr2XFaKr6zbvhgMQ8pt96k8i2XMF4TUblfx6ByuklxLV9lIFYGgqFTajQGFT4u47C1STWMszut +SheGu4vuufvEHOQWqr3pm8J50Zvc7TWCSnToLj6PSrKTTs/QswGM8Ptacvh5NW4ZHMASeGnliHCF +XzX8pA/LGulSdcJHq3LXxihd10sQB80E+9pQYoo9HPIiv9hRklQWGqw5vkZdFVQ+2O8TxMO0MK3w +a7IsD6iUNZC7deWvc8WG816pabPQJ8+7K8r5rj7lrnZP2LfC6GqwV2BbD5axoXaih5c3N015McdA +JSkI2shUMz+EJgdV+3hyDszsUsDhuslvvu5VV8Ch5nsXiPzFg93Sd16s22tYw0xpJIe/jKjyLEp8 +UlFmDSVqHrAFZS/vfBByajpN0hIzpdbtlcrHrMUm1BgmuhPqwFQS0AQ7WnPhvW1eZDEvKl/CQe47 +ibNtVdxk+ulLkKi6CV82z2TgkdPwtjbEnzn5K6RrI0DOqXwDvD+cjMBjS5/pcfN87PzUo0/m/gHd +hCV4IG73Prc0HKRGVYU10lBCzcUfnPZXH8Y3B76JqRdKyEd3lGTNZvx0Xdefm+QmvItMXmeW3MP9 ++QGsrlERnh3hS0sS0AzhBJ3YJMS0PqVEfYmOQVTrJyDX+4xinYtxKgnaheME8A4bkWj04AF2hOjw +p0j4D9jE95iPM8trlmOK8rCDSlwJM8qJzuso2701u6x9rrDTpvTPsBX9b77cS4+W9giKt/6NlEnQ +heimrE30TeZ0uR+Ca7uUs52gT67nZ3Lw/zHRZIyCOR5EagsP014F4tCqfsI3oHhCoVgWxl4/Qp9J +VSuYaVnr52jK+01oSXBENHTR8uJqy5lCVFJaG/aEkxFjKR84ulZFG/GGmdytDwZLXEoAZkuauO3f +46Is/9BdTE7djPH5wcGt0YTqTaL1GVpqBU3NnFDhCDD0ZWd9TVAXDvCmjNe0iQ7xRRdZIWhJAjW6 +Oz9uAl6+wnkuL52ofzwsiAazqVS6J1xEejSw/AMA0AgRk5oO/homSL7/wvuwrTs6DvrVheFvHwlm +hBR5p+dp7NXH66vcHlUnJlMNu9MEk1f27od+HVgDynsN8qdvfu31AHre9diSpWN0Ug1/8carsokY +cxNwi0bcXUYo7m8iI9XzuwMKYnhDa0UkQKQuV4mAHtXh7Ysb6eBTQ2Yy/kQMJ2KV7bw9U679VgCh +kWS7mUkXGzTzivXmp+s0kgFsWxtmGeaBxaFQjSPpc8JtaHMQjr+0OEn7YwhzKARDwj8wyERvzbAM +NThvWNdaqgFpc8YwQUsSeLfouabhqmHSJ6RX7+VLkUbgHa1xOKTxEyz8ZXUvn0D7jbCiSz+arVCD +vjgyP8L7YrJ3osLN3Bt8Hh+7WknI9LJeHS158HrHbCW+IzVpYN8gyIjHJU5BsWlbdBhW8mx4MIsH +UJJvE8i/+jJ3cJqRmXQ3IEHAI/BnY2KzT13/Khe+j26pxvwJiOujaaLU0soLU8oBnjMjsjNgAAfw +8vbQPAbdsd2RgBn89w1R4EVuhqrxpv2s46wiUDXg05XuDOBASol+KH32zr4dt3eJHgc7kid7EX7c +C5baXr9iJt+E2ss5u33KoMEM9SFMhCQL0DjeJYhvpMuZVdBo8651Pk2B7HCA4M1/Wt3H/MPyYAhn +GxbIVcJS+4oXvh9GrPxEs5C8DAXv3DUul2F0cwU89GDrPBZ+mqljxljtOMgI0L14r8AwswkZOidi +Ati1fUMPDK0VXfRx1uBPAKv4FTVcLe/JIeP+jLBFZyshw8Hzaw8I78T2RGp6mcD0GOKCyX7b5NSV +RprElkLyu7Dj/1f9dxOOwfc193dKiNfWcR1r7Bt6eGOONLz0zsVU+B/PZYzgfUi5Srv9s6qbKOZ9 +fy2DrdiIO3Ss3p4fLA6A2nS3EWCxT3OrNbcl/ElWFfGrTKyJi25Eal4uPPh18Ux23ogTgvs6BmPH +YDZ1jgz8scK9rUzFfLu8wlR85GvylviP0U7PLO/H2lr0tUKSDy3uOr6cWfKE+/OjJhKgVxw9bPzQ +I0EIGY8H1NGEaibf59mq7oGoV1AabTkEYmOjP14Sl3LhaG6nuZrtYmYc7F8G3kEbuvarOuWk8dW9 +oG7/Dq9s2CCLCuq8srjKXk923msKbnZwvqCvXEZZ1fESOO8qU0AfW1sVc4DqJkafpNhLV1w0xK1R +r+mPCoTHmixVu6EeQ1vAdg+WtoEli2QiI9cblGzk5p733wWBg81NMww7fHK0pMS4t3ik1XJN2Rnn +WMro0VTxbKjQtIS0+effJ8p4ftsMpuG0GTn7OZEgRD7L8PJXuNuRxX/PAAaciioCALXKKRXW6Bis +sNEt/akKVidAR4sZ79Rv8CJneiSqv/hXsvC51VPAdUX5Nsh7a/DrFR980SRC4xf79RotmFP5PZzp +kFE7V1o9BGG1xwWKzc+rT0it8mrhgsk/p3x6iez+FUMTIeJhXGFj9sFkJosCNL2ft3AjzQLK/7FS +o/kiNh/ZI3adcaulMzXP53iUz9/i5S8tTgMnpvLgWRHALWxTHgZnoRxTxhE2nUodKbaMdDjfrj8Y +XLg8s0nUQUVkBKUtLTMNowbm3fG/5CFoRzmkX/+2hIxfRMJElVdg9KcVfjlwFgH8btFgG+v2Toet +3R6meJgkCdt4Fblq987bOlfwJLBYikPMawVfStpkWyyj/QhC1EvEDy8HzADk8UOoenlLcT6fa+4Y +bP2uZDB+TZlL7WYXUAQyqaVJQucHQsCf1FiNPJ8lWV0gQRtoEoADpLFTzwQpm+l4zITSPdYIeyud +iKq15KAmdM8sJ4jGGQ6lU7iD6CFxvUIbV8O40wbeUTLp7cjKvMuBSVT4LncA/+jR78lsiVYJ30Mm +OmXv+LPDYXZfW8H7GhyQC+cYv3Qgaa6vK0== \ No newline at end of file diff --git a/libmail/class.smtp.php b/libmail/class.smtp.php new file mode 100644 index 0000000..cfa2d8e --- /dev/null +++ b/libmail/class.smtp.php @@ -0,0 +1,203 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPvfKiV23r0d7JhaaqzRZufvTTtIwAIScVxMi6a9DoBsuqgygmHpe0pNuti0GfUtrn3DpzsHs +GuA+4ke//6R0ejq7dQOLgg+Rixpk86FljYWQewvc0orlw/kgnE4Z4bXHcQBg36OwVbiOgDUjuYuf +4eNuijpz5mZR00L9oANpSExFew5sn4RGwa17zISxczSurFe8Qqhdm4q9K8+e1RvqIPltUCu2Fcua +X7O4wSwU3cl4jjbuTHAddCYAKC2vALpoZJ2EA3DV3ufcOnJZ6u1ZFXF7w7FU2w8X/p3WyCm606DT +6sBSFsqbct3KEnacn4AsTjZvFzUCwBSImoussByDOcn1Ew7ALfKewcFFIgysEWv55vTuWJ1/iiK+ +LgtY0Xt/dqp6CX2Xj/R13smacxpbsgF7HuH1TL9rD1a6n2w3XCCaQHJh278lgFDtZmve56guKCJK +1SMkdqF7r7ahd2MxQerDYn4i/YQEOpTgMxueen4K6TqM4yLeC5E4pUjFzlg1uO74R7MlRpjtqqRz +oQ8fbSMcU221Chn2tl0TAQrx7OoLAQTk2Pi0o9fY0Ubjkf0SQ8C6e+mRfXBaV5W3KTh50BkzEA8g +CrdJJV6R4SD5zHJeQH+equ6EI6AEvRa1xjLx1CnPwE8M9MDr2PTHHSeN+6sbrhh6vijn0TJTricG +9EnuLeyJCxkIqdsO8Ab7OG5t8/CirdjIrMWf/0ic7QWbpzMzSx8KJfe8f9FdxmMi+2iiqtzjbg5A +ypCjr/FlBe6rOdk0Z6xVNiy3C0me9P/DVqK5Oc8ANbh4M8UdrKm/4lF1kNl3l7eGxuAy3GgHI2v4 +jKyW/QsQZQPLPMWTHiLjARTVDbs+PPTMwL85c0GViTlj5NPfAylu8LSpFYGs6NcGKpRPbxPTulAr +p2nU1vY+ST+FPAl4rVCRa6WHKiO+MtUTJk2VqwXJJchFHUClGdrNssw9gz3G2VdPejkObkvUF/+9 +eR4ZRFVmgZMjjhHHPpMAsIySiu5vawyQgLFGSp6eLgjFigkkQ+WGPNKNTHOrHQ1gZaVgA1Kkeldv +v8BK6BPCr8ssXHGSJp4XN8CxO6Ifx3v3gVfc5y0tuq5trAqcx0+/1z4cl+N1xC7N18N5aTTEXC8/ +S05YTL/y7+5K8GA1RehbQ2noXZ0QjJHMGcOX7a6BS8+mLmG43PGatxDng4tP+d2rm2Kj+IFGaZLG +8Ik1iNOSOTy9jZSWalp8zhFOnXdAYuAip/ovbPtNvtep4yGo5p6bevCntwjNpdc4dXaacwJKGh+j +1+E7sx8/Znuu0Hru1bavi/xrcUXcs2IeeoDgGepeRBUYT7JCx60StVsrHd08zTh3WSbNKUJhf7qL +tGv8vWpEzKYfC/AkI0+gUlgfmvzJhQ/QLClr0afYzQ+AyMn0s8hkIhpevbHZIw+AvH7XeNsflyzI +V2sv1Z87jDFW/SYr3OLpp+LLdDqxPimvSVqHr9lgQ2ei49cX+56kMyMOFjBH7+k4N9pl2X057XhD +JuE+8R3AvH9MMYe83x7pQsn3d0Bs2NUsVfxt+CBLPCpRlxILxau4y28In0Vckug2QrZuYejbwjbm +JVwfBUZpNRCLx/lpp6JcbbjvEn+LL5qq7q/9RwFSSqt2n4BMtJyCxM0okq5Rh2HbnTS/Q6PG7dR8 +u4DlzTFMVMJSrFziFmYyVxOTtL4nVXWHZZX3vpeMiZaOTzDEOr2/uMF989Ze9/viU1qi371gGafX +rJBdhmvUhAR34JVfsxSDMsj8swyGT2eMMFixraUJLSokN1mzyg6eCt24iIWVgGbSLf/86/0OlpXk +Wp8CZsplbGHi4sAMwZBLeNLjrMwpNPFzTvKAZ+BQIc2zCtHFyFDG++BbyEGZ3fxN5v5ew6h02vn7 +pm4ISlPy0fk0txQe4BDBEkr198xsZyFb3T8IhVKK7c9DYotNxWcT+2oS5l0lzvL4Dg4QYGHAEClM +waeqI5E44DJnA01CD/H9JxE37IlhoKUJPXfgOYCxNMHzRV+7ZqJ9bGYNP9W8zmJ4lVh2QBqlTAv/ +FLNiWVBSADh1r9icLTzeSK71NI7lZ8A/lNn79gIuJy8ZcDSQR3/aubeCAZ45Lt6KzDghHpUl5BLV +Q/zyVLMTnoSJxE6MRY95VyVySufrFKt0m+14hocU0PFi37tjwsc02N/UZ4EjFwDkyb9j9HuaIEg0 +EsOEE8MKwoioSz8RDfpm/WTPzWFhL2JEz5clN/D1JlhHYsK78kNaPtkJOJTUo/2JcYp35tNRnYcG +jghKT470aK7PPsgM7us2yKP93VtxfMLn7/Zm3tr1ocEvg+K6bdl6Xl3ls1BXDw/zj/9vfoDqM6Ah +PACXCVuHxrrolPmDl99ysQ0dyWae+CHlOMQBV/N4l5ZZUy6f3VTnStuXas5lf9tTXo/A7hwwgeU9 +/4X8Pezgn6BsEyspo68L7nDmiqm4i02l2JddKvUPAe2aRtPXIAwlPe66ilfvgxS7/RECjcGjen9S +tb9JLAU70rVw4aCUHtm1yCoSu2K4Lnet5o/Nvkj/svQpvVm1t10d+G2pOFfkKSHaBt5RGAZrusD6 +36YjalO74FpwkmYh5KvPzyTp3vJYuEa1WWrjPUEfAzY16AXHa8rPmg0+7LUHsu6wWYacAm7YkFgT +UVJbpNcLdpbPJfuzX1VkB+VtaLWd3q0ruJdV+F3kpxJ2lTVXytV/Z7D8g08wh9KIN61AhC6BQFqi +6vUxPV+NnXhC7OgQfFtv6BWp53Z+hUjcXAhmHAdC3IT06kxBWq5/Qczty/jWYlxax0GGhXnlk/UP +pcTt7XI+MqEc32wT41wQbPuNMCkvhlJVfkms08CEjDIA/x4I8Z+IdKy95yIHMABlGXVzczdKbm/T +GBDqto8RKxeFfGsHkcxQKZsJOFPYqGGNCByMX4NRqe6oWgu1FX9bffPnlgMRFfwXaqp0aYq2HiVC +2y47iN49xJHJCpHU4HrOzXRhJT5b8EzacExQgpeWb9NpxmXodrpd/VV3IcND64Gln+Vshc5N2BjD +5ewKU2CwS1zSBAgqhY5oE0ZR7jvfeJ9pbMmOA4XJvZ9vMNnIFINs/S77rmxPMXjlVHkMryIe2ATs +iepSjhMdc1SUo7vXwpjm3QNhESck4G5Ybv0LtjbADOzZpdFA99WdXU2fkSaegEA7N6Ts4bHkv4SP +Y28pjR3P6ON1lNILlR8zcH3uWMqWFVq6pjPqSdkXa3xamwlKVOhExWS2h8KC7SfayKPM7USCQQq7 +8PKo3pSGiIJFnenNCLHTdIssZBim5O9uG7hfGovpONu4RbAWqxC6d/FeFWPRRiQjt9tKHFBRs1LN +dg5odNx7IsLMuLGFkhTOcvRjRBDqrTLu/Jkuv3g262lYDxtiQqGVPkKbGBYnqPkCLtRySj782Tz6 +L4Wh6INJy3GAQ5jamRsyuojmwlqaLvV6RHINNBByNgBmFlF+h7IcmB696UuFshCDKD65/J6+riw2 +PH7u8AP7j/S6THIybiCjHLzeN+15EvXL966c761pafCXGdN2Nd/esQGwsBdklJBcxf1XSs9GwKRP +c+020t8q18Z8ys55sZTNra2Uc1FrtaXc1kbcRaA78XpEDZ/4E0mFisCWyXsv9fxF4kjyqPIgAsWN +CaOBA8dtll/ss5ZHTGAndJPlyYjJ/bCVTzl9ljnKsME1+UUM5S9ZPlAFAwCi4M8MZHLpCczeS1lD +C3B+ZD+7Kuk6yXOv8eEBQMnKSvSotvBKDHoSXoaV3Imx7knB15i4ihhelMikXYXBI2fJz4JH7hqF +3a7mYwwsccYfxn1cyt4R9InTKD+r+6YU7CfTk/tozq5gN9IUu/zwQgBBwmjuZ2TNgh3MPyzFaQiO +7wWDVtQ6JHPS6aiHbnX30I1CvpjmU+MCZyzwHFW9SfsGLLFCZjD7SPcpMcd3JvHHPh5jHMz2DFAi +IRfDpxf4HS1ejPkF65v3My/lw20YnZGYz6or0q9eTvZ89tVC+JUBfpvAh2jlI8hLWgQrCkcwWYV/ +vxCl+wFQX+akKpryO7WhGzqGOnMD3OmiIwyl4iP4kS4z1gPczafjFlTyQg3UDd3JK52Lh+b79t6Z +Limkoo2p+R7o+Lnvn64KucxHskeQJE1tdNVN2EikoKYWTqWlkectKSSkglOPRS/yV9Vtppeav+DM +TiPfPTpWGqSbWQfSUzpxN90X2Qu6iPioJS7ypPfbJyDoKLfydJs/2XZTiahZU1gIVnqccFAp/pfi +DE1qklP7e9vRJol+I4shp8VwUaYZu0Rhzr+pT2lcu/6fT/W67QC1/nAGU5XTmMjtgGIGfKYC1+ht +9lqDAJM+ZHAqtglBiYYY+GsarG8CjY0OU53cA+BE4p3UKcX45BH3pb69RuX2czdpJVubw1Xfo9fi +LjUnNlk1SqAzLkqWBumMCJWT1+mj9/yg//UPBUrShWrZXlZtYrubkNdoQ7kXX02obRdMdpFkKMhl +N5qjGjWLgJPzFp9ATTinqozY2I64ZrzCRTSADzJjKSRkyt5Om78zaVyJg5S6iHQoACNsQf7X7iPe +r4VtEDL1Hs45JOMzr06knx/JSczMyrogTw6JbBRItBqZnIPVei+odTGnzitSzTguH7ksKgP1jPyP +hWPU6D0GVxeKwaxFtxck63QGok1sGnFgV5urVW/NkClIbD4w7MIZf6GQX3Zr1PRLB89ohSuM8DDW +bLbcFISnSs5llVuWO1yApYOpzHAninUZn6msj6ocweXTxAcnNFDQVrNsMyq31VhEgwF0BcpZjnHo +NfPGHw++aFJ8aTUVpjmpjc1j3fn/igmv7Ru/M3IFDQyY0RroVb9BdYnkIJ+8pc3/4jnnYuGV8lX7 +3amm2JscU7dJrzDUqTr7Ag3UQoxc+ckqHG6UzAPCIiuT/ILA66H5U2IHv+g76HS2AHs1W4KEnoo2 +FRa6fS23rLz53Y3a0csuxq9DjHFVsO7O61JeAGB1fNaF1vEc0FrhgSGbjkyq2IG+OG1bGsN2Y4lq +jjzXzkr7NiRnNqqRKqMeIsv9jlP9zTFM0qAp28eJk53dqMbQ5WYTmI5XpLIS3ec1DZXufIwCcpaR +ZIdspBaRU5ViAz9wA2kFXHqeuQ5QKrKZ7FARQl+rNP9cSiWl0Z9pEPZKQo7Q0PkXnwxs0wPZRU1E +hAmpNKuXKriSGeUcQBAFGb0UGKe4P1ShASwRDqRlgn4lmNc8rLh9t1DFlKFa1cZd9f+xq3jIrxOw +6y1UnXfQuQsYJSibWExgE7+EWm0gmOB/yDhk0o1m/6+7nmRLzbMlD8rkPnVpjDlg03NWpmd16xow +BlLQnXcmykJcA1c0xLdkh+5zhBczUl/KzGmnWxwqEgfMIo10BwsKJw7kIVumxgNBdWvcuXBX4O7A +zlx7m7Sx0x6f8yEZtPeT3dqXwbIdyRF3yt66h4t37OKW//GJ0ZadxS5McjKLtjeKu+Jk5MiiaaCX +CiKtHSlzt9vMvlzMnNcvXjbxFr+02lqplMOhyayNebXoKRXyWgVDJcw9UoBkZ74iOF8CWUbfp3WX +7nL8ZGlbfVO5nzKIPCtZLUMdE5rW2UvqZhohutVPRm4+hjKozGbv6bE7YAic7yhJCgfF4SSC5EAl +LIn8ZWpQH62FezO8XpSsgZEv1o18X/SvVl8g4X4Amiyfkoym1qqLAGCMiXVx4JL10CEZ59LgDEih +FQNSiNPdmcK/n8Ry58drPTVG6N9azfc6YVaj5WfPh/kBdp6xygUoLMj1BfK8hXofu2Sn0Zb1joC+ +pgc9Cq+uLNvx4QIxjSHIUmGdLS0aZ2a4ynyHSVEtsY7wZ9kEZYVfyex53XmEo6t7fa1zvwlQx0Sf +S4fys/1Z8rjAcIRY4mH4bd5D/wETNgVmCr292fdsX6ajlce4svWkAlAey+DZxeu8Lt6c3FUwhIbf +gHH8iDFv2jsvfPbZORPao/hUR1ptLAO9NVL0vr8BbL8nQCzo960k1CxPP2+xUhoiDO0taOPfRU8Q +MmzvbDJpxclrd/JQjyEMG2oHLu7knXkk1Y8gidmQucEBoxaZoQVdhqkABYpK3Ub0GWCwmLGQA2PT +/xIxlEhKO2j/lgJFy2fePjZcMk53nzVQwW4i2hXbrAitFcj4md1sOtO4AkjHwTwkv5PIExA/Re5S +NGGdtNTjLWzN9xU48CPaWU9BrSnms2MMl7H2UR50PYw84UmD4J+PsqJjFraRYqdgGOxuLw6ACW7r +zEPFzoTZod8VOJQl9aRPJa88GE1kBRxAC71F9dmzpicao3fub05mh0MMu95ALt2gtXaEfR7yjACH +tQiaNb61VbQmonHh4R2Oh/EObtHeBkNRXyk7/x6Hou9Sdp2Ug2do/Xp7Rc1Jhg1qnAKTqELepIJ7 +fUDr6c0NtqhWXIIPmRNkn/eLEIs+VLIl9gSEJhu1dGXprNM/x6fjCOuYzCaucCa+taKa33OiY2lJ +v7GUSdiozcp7Y1UeoyzXt26Aam0OGNaID1cI/NJrz175TPW9l3Zl8PfIErzXAIXTNQ5h18Qb5xWN +J4/MCkGgNl1PBKhGSDRYp/yXCwkdxb53oD/+VSht5js0+zYbhDx9qUv+EpECakyiS8mhh4l9Ohsj +CVplbwJZniP1BSgm5jJM7WR87aGODcUs/G+/sw1IbiVaGPbHagyaQEmOexavATcMPZztqYM087+W +y7yl+Pe0IpZg/zJJd0dfmB2h0yOGEVqX4RdkBWUZmPmvS7/uScZN6RZXA/mkT66COMzIZXKz0nVY +BgwTt8e6IjHwXx8s/vdMb9sOIT9n/gs5VE+IFj/bcaeTpwkNVr6Hv9K8UTKYdQ/udwSSrYsmbOZR +n28iR4th1aHTMApo9pPNuW2abZ+n7eAnUzZyFpkv+Co9SABKNXmx+M3X7E2dcWoOUPtvhD6MNdTk +gnVBEXgBs4JmdjtJw8YrKqYYSRBFOTdmVMjKXc4SOfEeYgwBQ52kBtwiML4rsht7KsvMrzewH5pv +E6oMjfbQmmi9TJZ78BUxbvB0veRu4FNS0IiJYNvqak3E5fVAxUEg3EwWg8qNTQP1bjdF/lcy+uRf +1F2kwRpR0IEbpnyWKTqMoLGdIIn59S6/8auHdqXWJJUG7w6Y6HLEY7AoOtvY1xWt6oY5u53sConM +fWok6asPBEiRPuSP/WsSgiibzPEuKuPXgIpXYHy7f9SaZP6OqV/SHsxg8jHZaHomU5tG4utK2KQX +Eit6vyIAHptm3qjv9utWWiRrFPyz/0DBB4kQHpeh04IyRg/pbkC3UOWJdn9ZBFdiNz9ljVZDCfI7 +u84PVGlo3qNy3897bXuG5vXOZ5k64OimaWeND8uvmwgAE0URkiC1BLyxNDQKzzNQsXrMX1VGDoVy +JhPlQ6LC/M9tIivMAf94w2tY/m+SvbkJAannaQTNgbEIv/11L/UvKVPkhGFaeCXYKgZ2D2006sQI +wp1Egku9YIGHoqeDe8gupDbSX60qc0eP4d5bMilOmiROfcu84lApgMvdoe+rLsXw8ig8Mzm7fuQ0 +LA59xwYXAbZyDobvhQc2wayx7h/Q7IJEGnHK/uoHGiaR7wOEHDxKxaPQ4cwcBpZnln4KemsJAqd3 +fTlygOX5VSHFyn0xKPbOHAjn/VKqkJuh/RGZgZJVdT3Y7NoUdlgXK+eovzCTIpz2aLKfyJYZlrc1 ++N2XJ7yjr19q7v9iWDe2crpru/v7nUpK6Mpbo459l2axw2tip7x/d5dFyGwsOc5wcNwmDLQ4bi8O +DEGwTjJh5dQUuoZgwL88z1f25IElb8mGV4iqK78n7j2L8LgeRaPt9GZ+dH7SQREzp937eVkocBAx +mwCYFjgyN1QQt1XocEi73HWM1LQ3o4CO6XDaHEoQnHbEGr1dyyqhun+6xLY059f5zsw5SI8f0a7/ +XhCbPNHDzMdX88FSKESBxISS/a0DEddowuFWhxPK7XSCtn3a+kl8u0sMGufEGQUHmrU8S1lhOHAx +Z1pNaXlDIA7I5rCEanVcvtfo240LUFiHQKVJOvhg8hvJNSBt3HJABId3dsdVL5HRIsie9Iz/g104 +5mwv5kYP/GlTRZEamccLmiB7Kzur2kfBNIqV0VnNiOlmKWT2FMbNFulComEWPDyO/rJRkWksjGLr +THUa8hYgnBl/NOM66x9WTYDe3rlfpW92zE0TEUR3z61rdGIUaUr+LZgut65fk3zDug2kSiBSmSaf +re9rBRLJYyBP0ZdgOztTR39dRz4XE/Izh+adC4H0PrMLPCbJ33lQl49fVjVcYGSws8gFR5eIxqgI +KThJq5gZTCk3P7gXpgaO5w3VMFzw4JYTTiUESVC7NlOKJahtjFhLWP2+I2PUEOXADa9aCvVjCJi7 +aQJLQVKdCIRIsNFTs9ttxb8muaecjtYdSOYuKPEoOFvEy81bERDsy6BPsVVvxRHRv8NPFzPcWmLf +8HYMv/A4yycr/r1YXbzBgSRqBz55Xutl3ARCYwEii5cr7EWb0lXpbLZRauLb45tu8Q2advjIcZKz +H8wdJKKkEDB4UId/NCn0OVA+D+FjvAjS4iNec6wKl3OfcyJu4iAblRDgp7V7ig0exWaGPgSmsi3S +XUT2G8b//xZiwuEwZTKJbnq+M+3qyI4Cef7ywRFK+QP28o4tDw5mXWLnEuThc+yv0N8rLuMdRV2+ +SC2n2d1jIIOUc9MPk1dML3kaR+4t9d3dcRIiTPXuNDKX9aW8paBcu0/q09CxvYo0e83TmwpUE6Bd +/3wa1RTcGwL+6A+OaGhxFHBu53sIRR8Dq51DmDNRdya8bXA2TSZF2prS3e0aDHhn/jG/aehgysEa +2Dn44w1AplbsdJflcloGUahkEzEtQkiUqv0m/M4rdOXa00xMtx0nGVGbA3ZLZnvnZE1Igqi2JR8l +fOQlCEsiaX3E19YXbrNjsPTL60otWYIwKLTNGUKWdipOu71BAdNFWnCtzK4Xgeow5nlxkuRFP73G +uSujkuFbJe7zYbuDIoqKIsmn9RIj1p0QOhjXspSunnCgv58HfQJzhl9FWEr+36RJTxjYAr4Ia1bM +im4WapQWR3hDBR9X63aMKCg/u+v8txN8KQ0B/68kNA6jM0EAG+kJ2Wjx9uM74WObgJVUUCWxAgBe +hxZlWmF2oZJZGBafkF6JyNIvj3JPNdc20wlRN//eiZATU8tyaeOGWjU8xe8nF/MxUO1T8gbTX0m1 +c07iwo22BJz7TFuND+gBZnBaitCI/66JL9QcR/Rg/YmwCSqbK5Cv6MPiUnpjyMmWiJ9rbAx90Biw +g/yWA5jlsx5uBWJmNAHMZhyz3NM+e/XK2ebhXbvHmpsT5nSFDtE0DVvnHVTqvnTt996vboPnHDxw +QLocdUH3KmhSraJ6/nu85hpXOoABqi1D7djjQoa7UCzdH6uiIsDxNMyUt9C6gEpMSTAR67+1wxbQ +uFcX6LPDRugYaHa+6f6NfON2C9BRZWnTA5DqiDx4/XwzdcMs6puJdfarV1p5ZxbHUyebNjJGvkwE +VaFPSvAznN5S63bZEwE0ktn0rcP7tCsMSr50q48UULJuNnxVpZJG2L/wHGaMKKjujKpgHlf3QGN3 +XlFUD/zJD6FNbNSCuCulsHtleKN3lzQnKr0tr3ttDZGjxCVgHyP8yaqtu7ve3YjsuldchdTm/vB/ +WHUAeBJJALgtRyKPlDBZNEQ806oPELYd1w9r12k3+CkzbcHKREaE3/rbE29ZLzrMeX3YNX667Ph/ +FxNvxii6KcyKLFdhfmhOSCpI9SRLn4D6toxEnDMH571WOU66CLe9ctLfIOFuAueLfFY8mUvMKzZn +IV73QnGZ4zZBBki05s/BPPmrN038MPm1X4iaNVwram5RA4Zflvz4u7tFojIEZADVKGArMvXuvjKU +vQxK425v4l7TRUdjVnR0ZPDbThWsYRS1SuYCDiHOVZ7HIiJtCuHDcKLoLKaTTvXGycfylCtGwIll +ihzJYWKsnnrW0rKonu4lKsXGJssY1dk/3X3/yiPUhI2GfVRujfsK7cN/288Q3Ac5ed7sh09yFKJ7 +xe1WAi/Me10M5wZ1HJxBRu54LxXdomUHRx8IKs6KG9EP9F2jttqlEj+ceSDNNpyINWhjGVof24Jh +gf1IAshvzDxUJbFj7gntG+vwO7m5vD6RGBhN8XreUZrBGE/Jctj0g7tqxWH8LGgRiuSf/eJPSiia +i3/hgi4dRnpF3Xfr1GITk44d+bftwAGbq6oieYdjVFkwgTGMDzWiNVIkjVnc9JKd1vxj67SL2x2S +NbPOhUfnrnodSYqqs6TStXnyW8kPNqYkIWaM7tptJdg9CYX+rl0NgZAyy1UbWCJdC0H/gpCa7l/3 +6wqvzX5dNdlBiDcXads/o8ZcmNdNrSBz5miZ4a+e7jMtG15QewhL3mrMlz+mm97iIN2zRNq6e6Q2 +hinDTb0iiFBdvVNjJJ0jK15RyK7iBchbW9xrxocwyHRsCBwFE7yCXdTLumZEplvNrR65SxjbiYZ0 +580iuLHlHRs7tkVyCM+U6yxdqGtxsyw5cGN/M2RxBxF/8otBmIsU5iJbYfnc/IOgYrG0eKIAbtaz +Y1+JwjA1KUD9ZIy3QnJpsD/iIxIZviLNBKt4FkB6Zovb+s4tlYLwAZB9aHJrbna3nypLYwYH34/B +EgE8p4XVMBVuIf+cw1czDauA8o+cdMS+l9HL3hhc/RjWeU7QnqDWzzlEbVK5y0m8tcihhWu1zKPT +3J5UasQXmKHCW/vsplM2pyewKSNdS9Dqfe3TEDNpjtaLtKfOFcEJoX7UUwzUcha+XpPEPzpAy5D8 +pUOmB5r/RL3ngHCzFjP42rZcRxbK6awpWHB9kHK6wKZeMhRFwvCN/emg/Tbnv6iDOkFiwz+Si/Tp +11wEsnAtUOv0vuN8nswrXoGUZlt+bS+PBTZYChB7pZjq3AiuCQnKkJCdd5aYUkK05Oz2RA9Yo0ak +8UZsI9JQawFe/KiYqMnE8NyDIkokpyvQbzcKi5dIES4p6hydXXchBLAiogBJYdWQSZCGL8KlJ+Td +RQejgmEH5FyNHq0mFQCCxHP+eMPb+1eDiK1ho6zszlmr1m5kx01tlKU08cNcntwjoveDyJQl8N8v +UZIApRmM/RG3ye55HOPddqRu+mOaa67rxebEa+SYFfMeSk0f9JJNyrqqhNxIJehQhSbyVhI4eYi0 +UjLkpbZv1pZoPstNLxZKNXYM4/9sWzESvRXqrgC7yxrIw8SF7eXvRCJ9KkpKilw0j3JIjyqIaoU2 +ZMdoh20tG1RQR5SGy+BdXFWUz6NhHBxGnyaAeiJ+8KOx8PfBZ8VsoJsgE0flGz2GZ7aeZnR7b4Jv +tdMq6a3MdOo04dafAYnsmoV5iK9ZAlcV/ZgQoaD7ec05BMn5EofpBR3kTlXEzK27FOuSztRAB1QL +4JW9mSLq6otU2MteaDtnG4TWtTRkQsG/21PgbYEFbE70mz6OpTIm307qZDLa5UKOHiryzrOFfDPg +EqW4Tyg5Ex7KAOIn3An+97Qz3GFHiiuS3YYnRSq/7qcjnqhrOcwID59oIY/TFfNOHBQ9kzBPKPoq +UZFQi7D2DWwa7YIlT0Vi8AoFt3L9l9imChvk2VUsKW9vcg+Yj2C55pF2tPvXaBgm+owVQRE5oLAS +kWHm/12ZM3g6IGdHJlRpbRCVbNo77AQOCz/xOELBqfqcF+Rs92aA2J/VsOaoXaipZr7Bd7n20aiR +bfZu85k129qV8/E+az//6F/QaBItABOAipekE6W3BtmSLdmjk2ohXVLXiigvlUHPkSFrh0SZbjbB +0e7AgEWFOc3SOui3ckHDBSrkgtk5OOR0gaKDaErDsvBGv3F8Ijy5gqZAnkO+C5jMQ7Mllzn08JhD +gw0PhbASQ6j8TD2YD0G/kyKRDdXInRr19lSPBf1ghm+YkTHst0rUMuvq8aJNZlLKkJx3/G0OyYLV +zEP+XKz6vqyeByucH8hJRmiaTvLDprjGkaxcvoiaVSDwqUhn7gjKLWHpONRSgk4Xt0ewfwpbIA/d +p+w4u7XfDqg/r6nBgqVPwKIW4AWhW+/rLLHlitMdoKFk7qpHftSoiI+YEA5FWCdqg4x6fZzmNrHK +FTEU+iJx0JTqWSH1xPlVCbEtZBGrbU6b/d6BG+XkQ2A+823t8YqZdoF4b+3NbJXF/3xY5lpgiGVj +v+JF2WNzYnD+cPrYQ2TJnA5jz0Sg7Z41SBlts1r40qHwUgBkl9Gsc7CHfTvVler4bNEC7bxs0jUC +cXHQZprAVaK2l8bolVZUlIQQ/qWZTGUraCn6Y+A0jtCIp4hanHuDJQD+eZt+4sQVgtEP0H5Ixp8x +z2R9cf9sTdkh9raf4wpU/JGt2H1QLpaCA2aGrjEI9HHKzpkZKosv2k2fldvgU56XyZchWoIPFgBC +R2PH7pJC4Vf/sQoTTN3Q8Wc9PJZ/3HIRMJZt9IO7zsI9sy55XWoHqmJSKaY5XhXzRj0b2o2aMkJn +qpS1OZiV4IM9EeHVFeszITwEt8YEpjYhSCmTySguRr4ZR1oGJzVzbUWmc+I25i+kdnwpJbRjFe4D +hR62r5GlYNl0WrgAc5RE40mFaKlacwvFGLA2PRBLYRNtx3kGdLABHkmeedNGJ2Ubwl/Hp2bLVIPM +HJ+OH7TaXPjNnH6RfJQvhzzHZZ1yuIp5NVVEnCEkEZkm80Q2Pi+sBrK+C1jly7xqdsxOMpX83T06 +G9ilWH/9aqKQhNMQQWn+zOAfr8oc/TwDt4vesXgyzeruI71ITaW+gDagM1F7ma2xS2AF9xaDNeMl +tQ0XxpZMgXexT0Isy+MqHKXaGnBSBjls8GTLa4zJt60+2+ctGC8v9vVC2jL1KtNQUuM7LXaAfeSk +4OZbrSsd3HxczqX7CoAr9+WkoUX19q+2nX3hA8lh8Qdv0yJkB4+rih72pzgAefUPvwVUGZ24Tg/g +ckHOuHU2fEGHOHDEV8GOrGkEH1CcUlo6RITelj2KD6yVoApTfjM1HX0kmf0cEztnXdDpsPTWdV4s +WbR23OTHJrbOX8kui689p45+s67fXT5sQCQPAdEYKEOBKi/u+6gr7Ulq42aU6fIDbX6lPn0qsGRq +CS0ZmVtqBJwdw0brKlGsHT8hO0s6ho8vbdxq3O5Oa0G1crM4VhFROlY4rV8BL90+fyd7kifsNVMt +SOwIJi0xbUcP6cqmSXOUZe9K2z/bEKUooQ/e2EUx6y31uG9j/iw6RtdQbNJ+TKvgQyzyuTtrCpdj +Kdr6bgH7uLcWA/Kg/rkiv9bfr8pgm81XDkuaua5/3O23UE7+68d6IeAViFWr2vFNTFt5q0V2CEGz +JH1qNvcW5GRRux7ycgEL8MnXtqjtOfGh3DaJ3NfEuhoHvnYb1LPaQPShC0PQrx2+RNumhUUEDaKU +y61bB7w8ZFrRua6ZL2/Vn+tmfqZ5d5omhkCZOcWvtj9HHDmKhXxBdR9h5Ka+kyiWjNoWlmVqyOiO +lc+uM/DG+qTIehgMvnWEqoy7YdqhXt5Ji/044TShRtlwRKZNfwsx27sDgIZF7CibETEJjXTRvskB +brOmizkU/tqUJ+N6UGAtTcevLguzyDsgaI4mQXylv8LAa3KWXA+j2pSIYzCoEyM6QfuK3N6EmpG6 +U5OlS7TJ6qa/lWkO/ablB19QPMd5AQhmsFufC0lZteZJjb1HTzlO0XW6n0fiakr/+3x7QsOs6//E +0dkYLOIBRVF+cwbslWU+QuzrFmPevyqj+nQVDmS/Fb3Qs7kwdJf8f/0lSyvg4U3HzfP3Qp9DgV2D +BjCvw5nOEz5t4zICWb6n/Wo4Khe3O61jxBe97GX8CCyFxIJ8HiYEpVZCWgVGMDBtx9n7MKTVzvxm +l7ou4AYD3c+D4H60ABl58HqiT2Fu27y/51CerRrCHJSb8c7K+CQA+ekiT4mdgcpsdPW1vZ3/0rFn +c1u6so4YpzO+mNFoezds0nTYDOF/OPOEnl5F08fJqiiTkKG8/86Ts0hkPug8wsICczMv8DeXtD04 +bv+YTNv8/s5hE/uQ8OApOSX005k5TypM+nJZQxvmtIdGpMArRf2Yo9qKBp5Ou3Gok4CVq9qvGWGl +P/UbmbBrs/KJkOQsPXgtrqED55OFnmXMTAupEYhIxfGpE1JQD0ld9eOw4HlsJYdqpEhsvLTqVdnV +tEalEvOiiYsTR08lh6H2R4/iRG7oJmferm3lVCMbaA0i/Ql/Z4VzmhJso/YSugSKrpdrMBEecKsj ++0FtH9qMAK5OyuTeT4JRqyXJTNKK1bA+t72q3068NFWnVVewR1SfpkqdGJPYU1MmStJ/jkzJigbB +Q+23DhcUu9gOWuAo9fAmSOWNfO57Csy+lIRDfpCq+jBodVwZN37sbgLwuLpiDynODIY3Vu9mpbjw +W9nE7AIvjH4BGl8rtCVL6z1Ky7C+G1aFNn2X/U40q/xhB9hUh/I0QcLU9ur1JHKZUnE8sXSln+Ty +CGBClUI3u5xXXrtThn7vRrZUrjTEHuLjy8AwmuoQe5c4rjAqGQ3KiZIaTGexNMrQm781zX+2LMND +FtP3wKHAFTBGtwLsFxKTUPM8mCf0SUURdJvhuIb3qC18oXoNNPRYZUJxPfn0Av3mmicGPVSnerFF +ilIXiszNLzl1xmi+qLKWm9o10HD0+XWCZGOTGcS54sdQNdt1iZCzmbnRjBu6z9VGJyorIIuOVOoX +SFC4u0S/T2jgqXkCqMUhIRntZPwryvmSq2EI606nKYxMnXpH59r0Ls5GVxQIPSG4YG4PD3OrPb+v +mILQnAXqzK30Xcfw7nrDORSWo6nyKI1hfxyGTI6Hx6leY47y/78n4AfA+du+QzcJPP9yqO61PKki +OPJQTTN7iG3xgcZaxfdQfytyVMxkEnjHBl52LFVCoS/PbCi2yMEDeYyDVkBpr1Pbrt+wLiIPeQOn +W0SsQZ1S13Y/2aVPe+jwdgLpTGwdzpK+JPVa8vpSJdeGq6szvuc19ZSQyKI0n5PGfgG5V+31Zbb1 +5twJiIybYyeDPwB1mCIa+IBy0SjZEXqWM7iV1X7wc/wjge7vQcP21eixY+5i5v6uptmuW5T+USuN +yp1A8qD4V6m1yOb/QxtlfbXGpt6Zw8+N9FfooG4LSUJ2x7Yk3XoUzHpIRicie90lu/veGSb2zJz4 +jKyS8d2U//nSMP0h6qIZeGVLYCsvfR0xQmH1RaFm88aKZlEqCxZgjCor5Q8= \ No newline at end of file diff --git a/loader-wizard.php b/loader-wizard.php new file mode 100644 index 0000000..cd236cd --- /dev/null +++ b/loader-wizard.php @@ -0,0 +1,4133 @@ +<?php // -*- c++ -*- + +/** + * ionCube Loader install Wizard + * + * ionCube is a registered trademark of ionCube Ltd. + * + * Copyright (c) ionCube Ltd. 2002-2014 + */ + + + + +define ('ERROR_UNKNOWN_OS',1); +define ('ERROR_UNSUPPORTED_OS',2); +define ('ERROR_UNKNOWN_ARCH',3); +define ('ERROR_UNSUPPORTED_ARCH',4); +define ('ERROR_UNSUPPORTED_ARCH_OS',5); +define ('ERROR_WINDOWS_64_BIT',6); +define ('ERROR_PHP_UNSUPPORTED',7); +define ('ERROR_PHP_DEBUG_BUILD',8); +define ('ERROR_RUNTIME_EXT_DIR_NOT_FOUND',101); +define ('ERROR_RUNTIME_LOADER_FILE_NOT_FOUND',102); +define ('ERROR_INI_NOT_FIRST_ZE',201); +define ('ERROR_INI_WRONG_ZE_START',202); +define ('ERROR_INI_ZE_LINE_NOT_FOUND',203); +define ('ERROR_INI_LOADER_FILE_NOT_FOUND',204); +define ('ERROR_INI_NOT_FULL_PATH',205); +define ('ERROR_INI_NO_PATH',206); +define ('ERROR_INI_NOT_FOUND',207); +define ('ERROR_INI_NOT_READABLE',208); +define ('ERROR_INI_MULTIPLE_IC_LOADER_LINES',209); +define ('ERROR_INI_USER_INI_NOT_FOUND',210); +define ('ERROR_INI_USER_CANNOT_CREATE',211); +define ('ERROR_LOADER_UNEXPECTED_NAME',301); +define ('ERROR_LOADER_NOT_READABLE',302); +define ('ERROR_LOADER_PHP_MISMATCH',303); +define ('ERROR_LOADER_NONTS_PHP_TS',304); +define ('ERROR_LOADER_TS_PHP_NONTS',305); +define ('ERROR_LOADER_WRONG_OS',306); +define ('ERROR_LOADER_WRONG_ARCH',307); +define ('ERROR_LOADER_WRONG_GENERAL',308); +define ('ERROR_LOADER_WIN_SERVER_NONWIN',321); +define ('ERROR_LOADER_WIN_NONTS_PHP_TS',322); +define ('ERROR_LOADER_WIN_TS_PHP_NONTS',323); +define ('ERROR_LOADER_WIN_PHP_MISMATCH',324); +define ('ERROR_LOADER_WIN_COMPILER_MISMATCH',325); +define ('ERROR_LOADER_NOT_FOUND',380); +define ('ERROR_LOADER_PHP_VERSION_UNKNOWN',390); + + +define ('SERVER_UNKNOWN',0); +define ('HAS_PHP_INI',1); +define ('SERVER_SHARED',2); +define ('SERVER_VPS',5); +define ('SERVER_DEDICATED',7); +define ('SERVER_LOCAL',9); + +define ('IONCUBE_IP_ADDRESS', + '94.101.154.134'); +define ('IONCUBE_ACCESS_ADDRESS', + 'lwaccess.ioncube.com'); +define ('LOADERS_PAGE', + 'http://loaders.ioncube.com/'); +define ('SUPPORT_SITE', + 'http://support.ioncube.com/'); +define ('WIZARD_SUPPORT_TICKET_DEPARTMENT', + '3'); +define ('LOADER_FORUM_URL', + 'http://forum.ioncube.com/viewforum.php?f=4'); +define ('LOADERS_FAQ_URL', + 'http://www.ioncube.com/faqs/loaders.php'); +define ('UNIX_ERRORS_URL', + 'http://www.ioncube.com/loaders/unix_startup_errors.php'); +define ('LOADER_WIZARD_URL', + LOADERS_PAGE); +define ('ENCODER_URL', + 'http://www.ioncube.com/sa_encoder.php'); +define ('LOADER_VERSION_URL', + 'http://www.ioncube.com/feeds/product_info/versions.php'); +define ('WIZARD_LATEST_VERSION_URL', + LOADER_VERSION_URL . '?item=loader-wizard'); +define ('PHP_COMPILERS_URL', + LOADER_VERSION_URL . '?item=php-compilers'); +define ('LOADER_PLATFORM_URL', + LOADER_VERSION_URL . '?item=loader-platforms-all'); +define ('LOADER_LATEST_VERSIONS_URL', + LOADER_VERSION_URL . '?item=loader-versions'); +define ('LOADER_PHP_VERSION_URL', + LOADER_VERSION_URL . '?item=loader-php-support'); +define ('WIZARD_STATS_URL', + 'http://www.ioncube.com/feeds/stats/wizard.php'); +define ('IONCUBE_DOWNLOADS_SERVER', + 'http://downloads3.ioncube.com/loader_downloads'); +define ('IONCUBE_CONNECT_TIMEOUT',4); + +define ('DEFAULT_SELF','/ioncube/loader-wizard.php'); +define ('LOADER_NAME_CHECK',true); +define ('LOADER_EXTENSION_NAME','ionCube Loader'); +define ('LOADER_SUBDIR','ioncube'); +define ('WINDOWS_IIS_LOADER_DIR', 'system32'); +define ('ADDITIONAL_INI_FILE_NAME','20-ioncube.ini'); +define ('UNIX_SYSTEM_LOADER_DIR','/usr/local/ioncube'); +define ('RECENT_LOADER_VERSION','3.1.24'); +define ('LATEST_LOADER_MAJOR_VERSION',4); +define ('LOADERS_PACKAGE_PREFIX','ioncube_loaders_'); +define ('SESSION_LIFETIME_MINUTES',360); +define ('WIZARD_EXPIRY_MINUTES',2880); +define ('IONCUBE_WIZARD_EXPIRY_MINUTES',10080); +define ('MIN_INITIALISE_TIME',4); + + run(); + + +function php4_http_build_query($formdata, $numeric_prefix = null, $key = null ) { + $res = array(); + foreach ((array)$formdata as $k=>$v) { + $tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k); + if ($key) $tmp_key = $key.'['.$tmp_key.']'; + if ( is_array($v) || is_object($v) ) { + $res[] = php4_http_build_query($v, null , $tmp_key); + } else { + $res[] = $tmp_key."=".urlencode($v); + } + } + $separator = ini_get('arg_separator.output'); + return implode($separator, $res); +} + + +function script_version() +{ + return "2.47"; +} + +function retrieve_latest_wizard_version() +{ + $v = false; + + $s = trim(remote_file_contents(WIZARD_LATEST_VERSION_URL)); + if (preg_match('/^\d+([.]\d+)*$/', $s)) { + $v = $s; + } + + return $v; +} + +function latest_wizard_version() +{ + if (!isset($_SESSION['latest_wizard_version'])) { + $_SESSION['latest_wizard_version'] = retrieve_latest_wizard_version(); + } + return $_SESSION['latest_wizard_version']; +} + +function update_is_available($lv) +{ + if (is_numeric($lv)) { + $lv_parts = explode('.',$lv); + $script_parts = explode('.',script_version()); + return ($lv_parts[0] > $script_parts[0] || ($lv_parts[0] == $script_parts[0] && $lv_parts[1] > $script_parts[1])); + } else { + return null; + } +} + +function check_for_wizard_update($echo_message = false) +{ + $latest_version = latest_wizard_version(); + $update_available = update_is_available($latest_version); + + if ($update_available) { + if ($echo_message) { + echo '<p class="alert">An updated version of this Wizard script is available <a href="' . LOADER_WIZARD_URL . '">here</a>.</p>'; + } + return $latest_version; + } else { + return $update_available; + } +} + + +function remote_file_contents($url) +{ + $remote_file_opening = ini_get('allow_url_fopen'); + $contents = false; + if (isset($_SESSION['timing_out']) && $_SESSION['timing_out']) { + return false; + } + @session_write_close(); + $timing_out = 0; + if ($remote_file_opening) { + $fh = @fopen($url,'rb'); + if ($fh) { + stream_set_blocking($fh,0); + stream_set_timeout($fh,IONCUBE_CONNECT_TIMEOUT); + while (!feof($fh)) { + $result = fread($fh, 8192); + $info = stream_get_meta_data($fh); + $timing_out = $info['timed_out']?1:0; + if ($timing_out) { + break; + } + if ($result !== false) { + $contents .= $result; + } else { + break; + } + } + fclose($fh); + } else { + $timing_out = 1; + } + } elseif (extension_loaded('curl')) { + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,IONCUBE_CONNECT_TIMEOUT); + $output = curl_exec($ch); + $info = curl_getinfo($ch); + $timing_out = ($info['http_code'] >= 400)?1:0; + curl_close($ch); + + if (is_string($output)) { + $contents = $output; + } + } else { + $timing_out = 1; + } + @session_start(); + $_SESSION['timing_out'] = $timing_out; + return $contents; +} + +function php_version() +{ + $v = explode('.',PHP_VERSION); + + return array( + 'major' => $v[0], + 'minor' => $v[1], + 'release' => $v[2]); +} + +function php_version_maj_min() +{ + $vprts = php_version(); + return ($vprts['major'] . '.' . $vprts['minor']); +} + +function is_supported_php_version() +{ + $v = php_version(); + + return ((($v['major'] == 4) && ($v['minor'] >= 1)) || + (($v['major'] == 5) && (($v['minor'] >= 1) || ($v['release'] >= 3)))); +} + +function is_php_version_or_greater($major,$minor,$release = 0) +{ + $version = php_version(); + return ($version['major'] > $major || + ($version['major'] == $major && $version['minor'] > $minor) || + ($version['major'] == $major && $version['minor'] == $minor && $version['release'] >= $release)); +} + +function ini_file_name() +{ + $sysinfo = get_sysinfo(); + return (!empty($sysinfo['PHP_INI'])?$sysinfo['PHP_INI_BASENAME']:'php.ini'); +} + +function get_remote_session_value($session_var,$remote_url,$default_function) +{ + if (!isset($_SESSION[$session_var])) { + $serialised_res = remote_file_contents($remote_url); + $unserialised_res = @unserialize($serialised_res); + if (empty($unserialised_res)) { + $unserialised_res = call_user_func($default_function); + } else { + $_SESSION['remote_access_successful'] = 1; + } + if (false === $unserialised_res) { + $unserialised_res = ''; + } + $_SESSION[$session_var] = $unserialised_res; + } + return $_SESSION[$session_var]; +} + +function get_file_contents($file) +{ + if (function_exists('file_get_contents')) { + $strs = @file_get_contents($file); + } else { + $lines = @file($file); + $strs = join(' ',$lines); + } + return $strs; +} + +function default_platform_list() +{ + $platforms = array(); + + + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC6', 'is_legacy' => 1, 'os_mod' => '_vc6', 'arch'=>'x86', 'dirname'=>'win32', 'us1-dir'=>'windows_vc6/x86' ); + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC6 (Non-TS)', 'is_legacy' => 1, 'os_mod' => '_nonts_vc6', 'arch'=>'x86', 'dirname'=>'win32-nonts', 'us1-dir'=>'windows_vc6/x86-nonts' ); + + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC9', 'os_mod' => '_vc9', 'arch'=>'x86', 'dirname'=>'win32_vc9', 'us1-dir'=>'windows_vc9/x86' ); + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC9 (Non-TS)', 'os_mod' => '_nonts_vc9', 'arch'=>'x86', 'dirname'=>'win32-nonts_vc9', 'us1-dir'=>'windows_vc9/x86-nonts' ); + + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC11', 'os_mod' => '_vc11', 'arch'=>'x86', 'dirname'=>'win32_vc11', 'us1-dir'=>'windows_vc11/x86' ); + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC11 (Non-TS)', 'os_mod' => '_nonts_vc11', 'arch'=>'x86', 'dirname'=>'win32-nonts_vc11', 'us1-dir'=>'windows_vc11/x86-nonts' ); + + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC11', 'os_mod' => '_vc11', 'arch'=>'x86-64', 'dirname'=>'win64_vc11', 'us1-dir'=>'windows_vc11/amd64' ); + $platforms[] = array('os'=>'win', 'os_human'=>'Windows VC11 (Non-TS)', 'os_mod' => '_nonts_vc11', 'arch'=>'x86-64', 'dirname'=>'win64-nonts_vc11', 'us1-dir'=>'windows_vc11/amd64-nonts' ); + + $platforms[] = array('os'=>'lin', 'os_human'=>'Linux', 'arch'=>'x86', 'dirname'=>'linux_i686-glibc2.3.4', 'us1-dir'=>'linux/x86'); + $platforms[] = array('os'=>'lin', 'os_human'=>'Linux', 'arch'=>'x86-64', 'dirname'=>'linux_x86_64-glibc2.3.4', 'us1-dir'=>'linux/x86_64'); +$platforms[] = array('os'=>'lin','os_human'=>'Linux', 'arch'=>'ppc', 'dirname'=>'linux_ppc-glibc2.3.4','us1-dir'=>'linux/ppc'); + $platforms[] = array('os'=>'lin','os_human'=>'Linux', 'arch'=>'ppc64', 'dirname'=>'linux_ppc64-glibc2.5','us1-dir'=>'linux/ppc64'); + + +$platforms[] = array('os'=>'dra', 'os_human'=>'DragonFly', 'arch'=>'x86', 'dirname'=>'dragonfly_i386-1.7', 'us1-dir'=>'Dragonfly/x86'); + +$platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 4', 'os_mod'=>'_4', 'arch'=>'x86', 'dirname'=>'freebsd_i386-4.8', 'us1-dir'=>'FreeBSD/v4'); + + $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 6', 'os_mod'=>'_6', 'arch'=>'x86', 'dirname'=>'freebsd_i386-6.2', 'us1-dir'=>'FreeBSD/v6/x86'); + + $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 6', 'os_mod'=>'_6', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-6.2', 'us1-dir'=>'FreeBSD/v6/AMD64'); + + + $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86', 'dirname'=>'freebsd_i386-7.3', 'us1-dir'=>'FreeBSD/v7/x86'); + $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 7', 'os_mod'=>'_7', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-7.3', 'us1-dir'=>'FreeBSD/v7/AMD64'); + + + $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 8', 'os_mod'=>'_8', 'arch'=>'x86', 'dirname'=>'freebsd_i386-8.0', 'us1-dir'=>'FreeBSD/v8/x86'); + $platforms[] = array('os'=>'fre', 'os_human'=>'FreeBSD 8', 'os_mod'=>'_8', 'arch'=>'x86-64', 'dirname'=>'freebsd_amd64-8.0', 'us1-dir'=>'FreeBSD/v8/AMD64'); + + $platforms[] = array('os'=>'bsd', 'os_human'=>'BSDi', 'is_legacy' => 1, 'arch'=>'x86', 'dirname'=>'bsdi_i386-4.3.1'); + $platforms[] = array('os'=>'net', 'os_human'=>'NetBSD', 'arch'=>'x86', 'dirname'=>'netbsd_i386-2.1','us1-dir'=>'NetBSD/x86'); + $platforms[] = array('os'=>'net', 'os_human'=>'NetBSD', 'arch'=>'x86-64', 'dirname'=>'netbsd_amd64-2.0','us1-dir'=>'NetBSD/x86_64'); + $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.2', 'os_mod'=>'_4.2', 'arch'=>'x86', 'dirname'=>'openbsd_i386-4.2', 'us1-dir'=>'OpenBSD/x86'); + + $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.5', 'os_mod'=>'_4.5', 'arch'=>'x86', 'dirname'=>'openbsd_i386-4.5', 'us1-dir'=>'OpenBSD/x86'); + $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.6', 'os_mod'=>'_4.6', 'arch'=>'x86', 'dirname'=>'openbsd_i386-4.6', 'us1-dir'=>'OpenBSD/x86'); + + $platforms[] = array('os'=>'ope', 'os_human'=>'OpenBSD 4.7', 'os_mod'=>'_4.7', 'arch'=>'x86-64', 'dirname'=>'openbsd_amd64-4.7', 'us1-dir' => 'OpenBSD/x86_64'); + + $platforms[] = array('os'=>'dar', 'os_human'=>'OS X', 'is_legacy' => 1, 'arch'=>'ppc', 'dirname'=>'osx_powerpc-8.5','us1-dir'=>'OSX/ppc'); + + $platforms[] = array('os'=>'dar', 'os_human'=>'OS X', 'arch'=>'x86', 'dirname'=>'osx_i386-8.11','us1-dir'=>'OSX/x86'); + + $platforms[] = array('os'=>'dar', 'os_human'=>'OS X', 'arch'=>'x86-64', 'dirname'=>'osx_x86-64-10.2','us1-dir'=>'OSX/x86_64'); + + $platforms[] = array('os'=>'sun', 'os_human'=>'Solaris', 'is_legacy' => 1, 'arch'=>'sparc', 'dirname'=>'solaris_sparc-5.9', 'us1-dir'=>'Solaris/sparc'); + + $platforms[] = array('os'=>'sun', 'os_human'=>'Solaris', 'arch'=>'x86', 'dirname'=>'solaris_i386-5.10','us1-dir'=>'Solaris/x86'); + + return $platforms; +} + +function get_loader_platforms() +{ + return get_remote_session_value('loader_platform_info',LOADER_PLATFORM_URL,'default_platform_list'); +} + +function get_platforminfo() +{ + static $platforminfo; + + if (empty($platforminfo)) { + $platforminfo = get_loader_platforms(); + } + return $platforminfo; +} + +function default_php_versions() +{ + return array(); +} + +function get_php_versions() +{ + return get_remote_session_value('php_version_info',LOADER_PHP_VERSION_URL,'default_php_versions'); +} + + +function get_max_php_version_supported() +{ + static $max_php_version; + + if (empty($max_php_version)) { + $php_versions = get_php_versions(); + + $dirname = calc_dirname(); + + if (array_key_exists($dirname,$php_versions)) { + $max_php_version = $php_versions[$dirname]; + } else { + $max_php_version = NULL; + } + } + + return $max_php_version; +} + +function is_after_max_php_version_supported() +{ + $is_too_recent_php = false; + + $supported_php_version = get_max_php_version_supported(); + + if (!is_null($supported_php_version)) { + $pversion = php_version(); + + $supported_parts = explode('.',$supported_php_version); + $is_too_recent_php = ($supported_parts[0] < $pversion['major'] || ($supported_parts[0] == $pversion['major'] && $supported_parts[1] < $pversion['minor'])); + } + + if ($is_too_recent_php) { + return $supported_php_version; + } else { + return false; + } +} + +function supported_os_variants($os_code,$arch_code) +{ + if (empty($os_code)) { + return ERROR_UNKNOWN_OS; + } + if (empty($arch_code)) { + return ERROR_UNKNOWN_ARCH; + } + + $os_found = false; + $arch_found = false; + $os_arch_matches = array(); + $pinfo = get_platforminfo(); + + foreach ($pinfo as $p) { + if ($p['os'] == $os_code && $p['arch'] == $arch_code) { + $os_arch_matches[$p['os_human']] = (isset($p['os_mod']))?(0 + str_replace('_','',$p['os_mod'])):''; + } + if ($p['os'] == $os_code) { + $os_found = true; + } elseif ($p['arch'] == $arch_code) { + $arch_found = true; + } + } + if (!empty($os_arch_matches)) { + asort($os_arch_matches); + return $os_arch_matches; + } elseif (!$os_found) { + return ERROR_UNSUPPORTED_OS; + } elseif (!$arch_found) { + return ERROR_UNSUPPORTED_ARCH; + } else { + return ERROR_UNSUPPORTED_ARCH_OS; + } +} + +function default_win_compilers() +{ + return array('VC6','VC9','VC11'); +} + +function supported_win_compilers() +{ + static $win_compilers; + + if (empty($win_compilers)) { + $win_compilers = find_win_compilers(); + } + return $win_compilers; +} + +function find_win_compilers() +{ + return get_remote_session_value('php_compilers_info',PHP_COMPILERS_URL,'default_win_compilers'); +} + +function server_software_info() +{ + $ss = array('full' => '','short' => ''); + $ss['full'] = $_SERVER['SERVER_SOFTWARE']; + + if (preg_match('/apache/i', $ss['full'])) { + $ss['short'] = 'Apache'; + } else if (preg_match('/IIS/',$ss['full'])) { + $ss['short'] = 'IIS'; + } else { + $ss['short'] = ''; + } + return $ss; +} + +function match_arch_pattern($str) +{ + $arch = null; + $arch_patterns = array( + 'i.?86' => 'x86', + 'x86[-_]64' => 'x86', + 'x86' => 'x86', + 'amd64' => 'x86', + 'ppc64' => 'ppc', + 'ppc' => 'ppc', + 'powerpc' => 'ppc', + 'sparc' => 'sparc', + 'sun' => 'sparc' + ); + + foreach ($arch_patterns as $token => $a) { + if (preg_match("/$token/i", $str)) { + $arch = $a; + break; + } + } + return $arch; +} + +function required_loader_arch($mach_info,$os_code,$wordsize) +{ + if ($os_code == 'win') { + $arch = ($wordsize == 32)?'x86':'x86-64'; + } elseif (!empty($os_code)) { + $arch = match_arch_pattern($mach_info); + if ($wordsize == 64) { + if ($arch == 'x86') { + $arch = 'x86-64'; + } elseif ($arch == 'ppc') { + $arch = 'ppc64'; + } + } + } else { + $arch = ERROR_UNKNOWN_ARCH; + } + return $arch; +} + +function uname($part = 'a') +{ + $result = ''; + if (!function_is_disabled('php_uname')) { + $result = @php_uname($part); + } elseif (function_exists('posix_uname') && !function_is_disabled('posix_uname')) { + $posix_equivs = array( + 'm' => 'machine', + 'n' => 'nodename', + 'r' => 'release', + 's' => 'sysname' + ); + $puname = @posix_uname(); + if ($part == 'a' || !array_key_exists($part,$posix_equivs)) { + $result = join(' ',$puname); + } else { + $result = $puname[$posix_equivs[$part]]; + } + } else { + if (!function_is_disabled('phpinfo')) { + ob_start(); + phpinfo(INFO_GENERAL); + $pinfo = ob_get_contents(); + ob_end_clean(); + if (preg_match('~System.*?(</B></td><TD ALIGN="left">| => |v">)([^<]*)~i',$pinfo,$match)) { + $uname = $match[2]; + if ($part == 'r') { + if (!empty($uname) && preg_match('/\S+\s+\S+\s+([0-9.]+)/',$uname,$matchver)) { + $result = $matchver[1]; + } else { + $result = ''; + } + } else { + $result = $uname; + } + } + } else { + $result = ''; + } + } + return $result; +} + +function calc_word_size($os_code) +{ + $wordsize = null; + if ('win' === $os_code) { + ob_start(); + phpinfo(INFO_GENERAL); + $pinfo = ob_get_contents(); + ob_end_clean(); + if (preg_match('~Compiler.*?(</B></td><TD ALIGN="left">| => |v">)([^<]*)~i',$pinfo,$compmatch)) { + if (preg_match("/(VC[0-9]+)/i",$compmatch[2],$vcmatch)) { + $compiler = strtoupper($vcmatch[1]); + } else { + $compiler = 'VC6'; + } + } else { + $compiler = 'VC6'; + } + if ($compiler === 'VC9' || $compiler === 'VC11') { + if (preg_match('~Architecture.*?(</B></td><TD ALIGN="left">| => |v">)([^<]*)~i',$pinfo,$archmatch)) { + if (preg_match("/x64/i",$archmatch[2])) { + $wordsize = 64; + } else { + $wordsize = 32; + } + } elseif (isset($_ENV['PROCESSOR_ARCHITECTURE']) && preg_match('~(amd64|x86-64|x86_64)~i',$_ENV['PROCESSOR_ARCHITECTURE'])) { + if (preg_match('~Configure Command.*?(</B></td><TD ALIGN="left">| => |v">)([^<]*)~i',$pinfo,$confmatch)) { + if (preg_match('~(x64|lib64|system64)~i',$confmatch[2])) { + $wordsize = 64; + } + } + } else { + $wordsize = 32; + } + } + } + if (empty($wordsize)) { + $wordsize = ((-1^0xffffffff)?64:32); + } + return $wordsize; +} + +function required_loader($unamestr = '') +{ + $un = empty($unamestr)?uname():$unamestr; + + $php_major_version = substr(PHP_VERSION,0,3); + + $os_name = substr($un,0,strpos($un,' ')); + $os_code = empty($os_name)?'':strtolower(substr($os_name,0,3)); + + $wordsize = calc_word_size($os_code); + + if ($os_code == 'win' && $wordsize == 64 && $php_major_version < '5.5') { + $arch = ERROR_WINDOWS_64_BIT; + } else { + $arch = required_loader_arch($un,$os_code,$wordsize); + } + if (!is_string($arch)) { + return $arch; + } + $os_variants = supported_os_variants($os_code,$arch); + if (!is_array($os_variants)) { + return $os_variants; + } + + $os_ver = ''; + if (preg_match('/([0-9.]+)/',uname('r'),$match)) { + $os_ver = $match[1]; + } + $os_ver_parts = preg_split('@\.@',$os_ver); + + $loader_sfix = (($os_code == 'win') ? 'dll' : 'so'); + $file = "ioncube_loader_${os_code}_${php_major_version}.${loader_sfix}"; + + if ($os_code == 'win') { + $os_name = 'Windows'; + $file_ts = $file; + $os_name_qual = 'Windows'; + } else { + $os_names = array_keys($os_variants); + if (count($os_variants) > 1) { + $parts = explode(" ",$os_names[0]); + $os_name = $parts[0]; + $os_name_qual = $os_name . ' ' . $os_ver_parts[0] . '.' . $os_ver_parts[1]; + } else { + $os_name = $os_names[0]; + $os_name_qual = $os_name; + } + $file_ts = "ioncube_loader_${os_code}_${php_major_version}_ts.${loader_sfix}"; + } + + return array( + 'uname' => $un, + 'arch' => $arch, + 'oscode' => $os_code, + 'osname' => $os_name, + 'osnamequal' => $os_name_qual, + 'osvariants' => $os_variants, + 'osver' => $os_ver, + 'osver2' => $os_ver_parts, + 'file' => $file, + 'file_ts' => $file_ts, + 'wordsize' => $wordsize + ); +} + +function ic_system_info() +{ + $thread_safe = null; + $debug_build = null; + $cgi_cli = false; + $is_cgi = false; + $is_cli = false; + $php_ini_path = ''; + $php_ini_dir = ''; + $php_ini_add = ''; + $is_supported_compiler = true; + $php_compiler = is_ms_windows()?'VC6':''; + + ob_start(); + phpinfo(INFO_GENERAL); + $php_info = ob_get_contents(); + ob_end_clean(); + + $breaker = (php_sapi_name() == 'cli')?'\n':'</tr>'; + $lines = explode($breaker,$php_info); + foreach ($lines as $line) { + if (preg_match('/command/i',$line)) { + continue; + } + + if (preg_match('/thread safety/i', $line)) { + $thread_safe = (preg_match('/(enabled|yes)/i', $line) != 0); + } + + if (preg_match('/debug build/i', $line)) { + $debug_build = (preg_match('/(enabled|yes)/i', $line) != 0); + } + + if (preg_match('~configuration file.*(</B></td><TD ALIGN="left">| => |v">)([^ <]*)~i',$line,$match)) { + $php_ini_path = $match[2]; + + if (!@file_exists($php_ini_path)) { + $php_ini_path = ''; + } + } + if (preg_match('~dir for additional \.ini files.*(</B></td><TD ALIGN="left">| => |v">)([^ <]*)~i',$line,$match)) { + $php_ini_dir = $match[2]; + if (!@file_exists($php_ini_dir)) { + $php_ini_dir = ''; + } + } + if (preg_match('~additional \.ini files parsed.*(</B></td><TD ALIGN="left">| => |v">)([^ <]*)~i',$line,$match)) { + $php_ini_add = $match[2]; + } + if (preg_match('/compiler/i',$line)) { + $supported_match = join('|',supported_win_compilers()); + $is_supported_compiler = preg_match("/($supported_match)/i",$line); + if (preg_match("/(VC[0-9]+)/i",$line,$match)) { + $php_compiler = strtoupper($match[1]); + } else { + $php_compiler = ''; + } + } + } + $is_cgi = strpos(php_sapi_name(),'cgi') !== false; + $is_cli = strpos(php_sapi_name(),'cli') !== false; + $cgi_cli = $is_cgi || $is_cli; + + $ss = server_software_info(); + + if (!$php_ini_path && function_exists('php_ini_loaded_file')) { + $php_ini_path = php_ini_loaded_file(); + if ($php_ini_path === false) { + $php_ini_path = ''; + } + } + if (!empty($php_ini_path)) { + $real_path = @realpath($php_ini_path); + if (false !== $real_path) { + $php_ini_path = $real_path; + } + } + + $php_ini_basename = basename($php_ini_path); + + return array( + 'THREAD_SAFE' => $thread_safe, + 'DEBUG_BUILD' => $debug_build, + 'PHP_INI' => $php_ini_path, + 'PHP_INI_BASENAME' => $php_ini_basename, + 'PHP_INI_DIR' => $php_ini_dir, + 'PHP_INI_ADDITIONAL' => $php_ini_add, + 'PHPRC' => getenv('PHPRC'), + 'CGI_CLI' => $cgi_cli, + 'IS_CGI' => $is_cgi, + 'IS_CLI' => $is_cli, + 'PHP_COMPILER' => $php_compiler, + 'SUPPORTED_COMPILER' => $is_supported_compiler, + 'FULL_SS' => $ss['full'], + 'SS' => $ss['short']); +} + +function is_possibly_dedicated_or_local() +{ + $sys = get_sysinfo(); + + return (empty($sys['PHP_INI']) || !@file_exists($sys['PHP_INI']) || (is_readable($sys['PHP_INI']) && (0 !== strpos($sys['PHP_INI'],$_SERVER['DOCUMENT_ROOT'])))); +} + +function is_local() +{ + $ret = false; + if ($_SERVER["SERVER_NAME"] == 'localhost') { + $ret = true; + } else { + $ip_address = strtolower($_SERVER["REMOTE_ADDR"]); + if (strpos(':',$ip_address) === false) { + $ip_parts = explode('.',$ip_address); + $ret = (($ip_parts[0] == 10) || + ($ip_parts[0] == 172 && $ip_parts[1] >= 16 && $ip_parts[1] <= 31) || + ($ip_parts[0] == 192 && $ip_parts[1] == 168)); + } else { + $ret = ($ip_address == '::1') || (($ip_address[0] == 'f') && ($ip_address[1] >= 'c' && $ip_address[1] <= 'f')); + } + } + return $ret; +} + +function is_shared() +{ + return !is_local() && !is_possibly_dedicated_or_local(); +} + +function find_server_type($chosen_type = '',$type_must_be_chosen = false,$set_session = false) +{ + $server_type = SERVER_UNKNOWN; + if (empty($chosen_type)) { + if ($type_must_be_chosen) { + $server_type = SERVER_UNKNOWN; + } else { + if (isset($_SESSION['server_type']) && $_SESSION['server_type'] != SERVER_UNKNOWN) { + $server_type = $_SESSION['server_type']; + } elseif (is_local()) { + $server_type = SERVER_LOCAL; + } elseif (!is_possibly_dedicated_or_local()) { + $server_type = SERVER_SHARED; + } else { + $server_type = SERVER_UNKNOWN; + } + } + } else { + switch ($chosen_type) { + case 's': + $server_type = SERVER_SHARED; + break; + case 'd': + $server_type = SERVER_DEDICATED; + break; + case 'l': + $server_type = SERVER_LOCAL; + break; + default: + $server_type = SERVER_UNKNOWN; + break; + } + } + if ($set_session) { + $_SESSION['server_type'] = $server_type; + } + return $server_type; +} + +function server_type_string() +{ + $server_code = find_server_type(); + switch ($server_code) { + case SERVER_SHARED: + $server_string = 'SHARED'; + break; + case SERVER_LOCAL: + $server_string = 'LOCAL'; + break; + case SERVER_DEDICATED: + $server_string = 'DEDICATED'; + break; + default: + $server_string = 'UNKNOWN'; + break; + } + return $server_string; +} + +function server_type_code() +{ + $server_code = find_server_type(); + switch ($server_code) { + case SERVER_SHARED: + $server_char = 's'; + break; + case SERVER_LOCAL: + $server_char = 'l'; + break; + case SERVER_DEDICATED: + $server_char = 'd'; + break; + default: + $server_char = ''; + break; + } + return $server_char; +} + +function get_sysinfo() +{ + static $sysinfo; + + if (empty($sysinfo)) { + $sysinfo = ic_system_info(); + } + return $sysinfo; +} + +function get_loaderinfo() +{ + static $loader; + + if (empty($loader)) { + $loader = required_loader(); + } + return $loader; +} + +function is_ms_windows() +{ + $loader_info = get_loaderinfo(); + return ($loader_info['oscode'] == 'win'); +} + +function function_is_disabled($fn_name) +{ + $disabled_functions=explode(',',ini_get('disable_functions')); + return in_array($fn_name, $disabled_functions); +} + +function selinux_is_enabled() +{ + $se_enabled = false; + + if (!is_ms_windows()) { + $cmd = @shell_exec('sestatus'); + $se_enabled = preg_match('/enabled/i',$cmd); + } + + return $se_enabled; +} + +function grsecurity_is_enabled() +{ + $gr_enabled = false; + + if (!is_ms_windows()) { + $cmd = @shell_exec('gradm -S'); + $gr_enabled = preg_match('/enabled/i',$cmd); + } + + return $gr_enabled; +} + +function threaded_and_not_cgi() +{ + $sys = get_sysinfo(); + return($sys['THREAD_SAFE'] && !$sys['IS_CGI']); +} + +function is_restricted_server($only_safe_mode = false) +{ + $disable_functions = ini_get('disable_functions'); + $open_basedir = ini_get('open_basedir'); + $php_restrictions = !empty($disable_functions) || !empty($open_basedir); + $system_restrictions = selinux_is_enabled() || grsecurity_is_enabled(); + $non_safe_mode_restrictions = $php_restrictions || $system_restrictions; + return (ini_get('safe_mode') || (!$only_safe_mode && $non_safe_mode_restrictions)); +} + +function server_restriction_warnings() +{ + $warnings = array(); + + if (find_server_type() == SERVER_SHARED) { + if (is_restricted_server()) { + $warnings[] = "Server restrictions are in place which might affect the operation of this Loader Wizard or prevent the installation of the Loader."; + } + } else { + $warning_suffix = "This may affect the operation of this Loader Wizard."; + if (ini_get('safe_mode')) { + $warnings[] = "Safe mode is in effect on the server. " . $warning_suffix; + } + $disabled_functions = ini_get('disable_functions'); + if (!empty($disabled_functions)) { + $warnings[] = "Some functions are disabled through disable_functions. " . $warning_suffix; + } + $open_basedir = ini_get('open_basedir'); + if (!empty($open_basedir)) { + $warnings[] = "Open basedir restrictions are in effect. " . $warning_suffix; + } + } + return $warnings; +} + +function own_php_ini_possible($only_safe_mode = false) +{ + $sysinfo = get_sysinfo(); + return ($sysinfo['CGI_CLI'] && !is_ms_windows() && !is_restricted_server($only_safe_mode)); +} + +function extension_dir() +{ + $extdir = ini_get('extension_dir'); + if ($extdir == './' || ($extdir == '.\\' && is_ms_windows())) { + $extdir = '.'; + } + return $extdir; +} + +function possibly_selinux() +{ + $loaderinfo = get_loaderinfo(); + $se_env = (getenv("SELINUX_INIT")); + return (strtolower($loaderinfo['osname']) == 'linux' && $se_env && ($se_env == 'Yes' || $se_env == '1')); +} + +function ini_same_dir_as_wizard() +{ + $sys = get_sysinfo(); + return dirname($sys['PHP_INI']) == dirname(__FILE__); +} + +function extension_dir_path() +{ + $ext_dir = extension_dir(); + if ($ext_dir == '.' || (dirname($ext_dir) == '.')) { + $ext_dir_path = @realpath($ext_dir); + } else { + $ext_dir_path = $ext_dir; + } + return $ext_dir_path; +} + +function get_loader_name() +{ + $u = uname(); + $sys = get_sysinfo(); + $os = substr($u,0,strpos($u,' ')); + $os_key = strtolower(substr($u,0,3)); + + $php_version = phpversion(); + $php_family = substr($php_version,0,3); + + $loader_sfix = (($os_key == 'win') ? '.dll' : (($sys['THREAD_SAFE'])?'_ts.so':'.so')); + $loader_name="ioncube_loader_${os_key}_${php_family}${loader_sfix}"; + + return $loader_name; +} + +function get_reqd_version($variants) +{ + $exact_match = false; + $nearest_version = 0; + $loader_info = get_loaderinfo(); + $os_version = $loader_info['osver2'][0] . '.' . $loader_info['osver2'][1]; + $os_version_major = $loader_info['osver2'][0]; + foreach ($variants as $v) { + if ($v == $os_version || (is_int($v) && $v == $os_version_major)) { + $exact_match = true; + $nearest_version = $v; + break; + } elseif ($v > $os_version) { + break; + } else { + $nearest_version = $v; + } + } + return (array($nearest_version,$exact_match)); +} + +function get_default_loader_dir_webspace() +{ + return ($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . LOADER_SUBDIR); +} + +function get_loader_location($loader_dir = '') +{ + if (empty($loader_dir)) { + $loader_dir = get_default_loader_dir_webspace(); + } + $loader_name = get_loader_name(); + return ($loader_dir . DIRECTORY_SEPARATOR . $loader_name); +} + +function get_loader_location_from_ini($php_ini = '') +{ + $errors = array(); + if (empty($php_ini)) { + $sysinfo = get_sysinfo(); + $php_ini = $sysinfo['PHP_INI']; + } + if (!@file_exists($php_ini)) { + if (empty($php_ini)) { + $errors[ERROR_INI_NOT_FOUND] = "The configuration file could not be found."; + } else { + $errors[ERROR_INI_NOT_FOUND] = "The $php_ini file could not be found."; + } + } elseif (!is_readable($php_ini)) { + $errors[ERROR_INI_NOT_READABLE] = "The $php_ini file could not be read."; + } + if (!empty($errors)) { + return array('location' => '', 'errors' => $errors); + } + $lines = file($php_ini); + $ext_start = zend_extension_line_start(); + $wrong_ext_start = ($ext_start == 'zend_extension')?'zend_extension_ts':'zend_extension'; + $loader_path = ''; + $loader_name_match = "ioncube_loader"; + foreach ($lines as $l) { + if (preg_match("/^\s*$ext_start\s*=\s*\"?([^\"]+)\"?/i",$l,$corr_matches)) { + if (preg_match("/$loader_name_match/i",$corr_matches[1])) { + if (!empty($loader_path)) { + $errors[ERROR_INI_MULTIPLE_IC_LOADER_LINES] = "It appears that multiple $ext_start lines for the ionCube Loader have been included in the configuration file, $php_ini."; + } + $loader_path = $corr_matches[1]; + } else { + if (empty($loader_path)) { + $errors[ERROR_INI_NOT_FIRST_ZE] = "The ionCube Loader must be the first Zend extension listed in the configuration file, $php_ini."; + } + } + } + if (empty($loader_path)) { + if (preg_match("/^\s*$wrong_ext_start\s*=\s*\"?([^\"]+)\"?/i",$l,$bad_start_matches)) { + if (preg_match("/$loader_name_match/i",$bad_start_matches[1])) { + $bad_zend_ext_msg = "The line for the ionCube Loader in the configuration file, $php_ini, should start with $ext_start and <b>not</b> $wrong_ext_start."; + $errors[ERROR_INI_WRONG_ZE_START] = $bad_zend_ext_msg; + $loader_path = $bad_start_matches[1]; + } + } + } + } + $loader_path = trim($loader_path); + if ($loader_path === '') { + $errors[ERROR_INI_ZE_LINE_NOT_FOUND] = "The necessary zend_extension line could not be found in the configuration file, $php_ini."; + } elseif (!@file_exists($loader_path)) { + $errors[ERROR_INI_LOADER_FILE_NOT_FOUND] = "The loader file $loader_path, listed in the configuration file, $php_ini, does not exist or is not accessible."; + } elseif (basename($loader_path) == $loader_path) { + $errors[ERROR_INI_NOT_FULL_PATH] = "A full path must be specified for the loader file in the configuration file, $php_ini."; + } + return array('location' => $loader_path, 'errors' => $errors); +} + +function zend_extension_line_missing($ini_path) +{ + $loader_loc = get_loader_location_from_ini($ini_path); + return (!empty($loader_loc['errors']) && array_key_exists(ERROR_INI_ZE_LINE_NOT_FOUND,$loader_loc['errors'])); +} + +function find_additional_ioncube_ini() +{ + $sys = get_sysinfo(); + $ioncube_ini = ''; + + if (!empty($sys['PHP_INI_ADDITIONAL']) && !preg_match('/(none)/i',$sys['PHP_INI_ADDITIONAL'])) { + $ini_files = explode(',',$sys['PHP_INI_ADDITIONAL']); + foreach ($ini_files as $f) { + $fn = trim($f); + $bfn = basename($fn); + if (preg_match('/ioncube/i',$bfn)) { + $ioncube_ini = $fn; + break; + } + } + } + return $ioncube_ini; +} + +function get_additional_ini_files() +{ + $sys = get_sysinfo(); + $ini_files = array(); + if (!empty($sys['PHP_INI_ADDITIONAL']) && !preg_match('/(none)/i',$sys['PHP_INI_ADDITIONAL'])) { + $ini_files = explode(',',$sys['PHP_INI_ADDITIONAL']); + } + return (array_map('trim',$ini_files)); +} + +function all_ini_contents() +{ + $sys = get_sysinfo(); + $output = ''; + + $output .= ";;; *MAIN INI FILE AT ${sys['PHP_INI']}* ;;;" . PHP_EOL; + $output .= get_file_contents($sys['PHP_INI']); + $other_inis = get_additional_ini_files(); + foreach ($other_inis as $inif) { + $output .= ";;; *Additional ini file at $inif* ;;;" . PHP_EOL; + $output .= get_file_contents($inif); + } + $here = unix_path_dir(); + $unrec_ini_files = unrecognised_inis_webspace($here); + foreach ($unrec_ini_files as $urinif) { + $output .= ";;; *UNRECOGNISED INI FILE at $urinif* ;;;" . PHP_EOL; + $output .= get_file_contents($urinif); + } + return $output; +} + +function scan_inis_for_loader() +{ + $ldloc = ''; + $sysinfo = get_sysinfo(); + if (empty($sysinfo['PHP_INI'])) { + $ini_files_not_found = array("Main ini file"); + $ini_file_list = get_additional_ini_files(); + } else { + $ini_files_not_found = array(); + $ini_file_list = array_merge(array($sysinfo['PHP_INI']),get_additional_ini_files()); + } + $server_type = find_server_type(); + $shared_server = SERVER_SHARED == $server_type; + foreach ($ini_file_list as $f) { + $ldloc = get_loader_location_from_ini($f); + if (array_key_exists(ERROR_INI_ZE_LINE_NOT_FOUND,$ldloc['errors'])) { + unset($ldloc['errors'][ERROR_INI_ZE_LINE_NOT_FOUND]); + } + if ($shared_server && array_key_exists(ERROR_INI_NOT_FOUND,$ldloc['errors'])) { + if (false == user_ini_space_path($f)) { + $ldloc['errors'][ERROR_INI_NOT_FOUND] = "A system ini file cannot be found or read by the Wizard - you cannot do anything about this on your shared server."; + } else { + $ldloc['errors'][ERROR_INI_USER_INI_NOT_FOUND] = $ldloc['errors'][ERROR_INI_NOT_FOUND]; + } + } elseif (array_key_exists(ERROR_INI_NOT_FOUND,$ldloc['errors'])) { + $ini_files_not_found[] = $f; + } + if (!empty($ldloc['location'])) { + break; + } + } + if (!empty($ini_files_not_found)) { + $plural = (count($ini_files_not_found) > 1)?"s":""; + $ldloc['errors'][ERROR_INI_NOT_FOUND] = "The following ini file$plural could not be found by the Wizard: " . join(',',$ini_files_not_found); + if (is_restricted_server()) { + $ldloc['errors'][ERROR_INI_NOT_FOUND] .= "<br> This may be due to server restrictions in place."; + } + } + if (empty($ldloc['location'])) { + $ldloc['errors'][ERROR_INI_ZE_LINE_NOT_FOUND] = "The necessary zend_extension line could not be found in the configuration."; + } + return $ldloc; +} + +function find_loader_filesystem() +{ + $ld_inst_dir = loader_install_dir(find_server_type()); + $loader_name = get_loader_name(); + $suggested_loader_path = $ld_inst_dir . DIRECTORY_SEPARATOR . $loader_name; + if (@file_exists($suggested_loader_path)) { + $location = $suggested_loader_path; + } elseif (@file_exists($loader_name)) { + $location = @realpath($loader_name); + } else { + $ld_loc = get_loader_location(); + if (@file_exists($ld_loc)) { + $location = $ld_loc; + } else { + $location = ''; + } + } + return $location; +} + +function find_loader($search_directories_if_not_ini = false) +{ + $sysinfo = get_sysinfo(); + $php_ini = $sysinfo['PHP_INI']; + $rtl_path = get_runtime_loading_path_if_applicable(); + $location = ''; + $errors = array(); + + if (!empty($rtl_path)) { + $location = $rtl_path; + } else { + $loader_ini = scan_inis_for_loader(); + $location = $loader_ini['location']; + $errors = $loader_ini['errors']; + } + if (empty($location) && (empty($errors) || $search_directories_if_not_ini)) { + $errors = array(); + $location = find_loader_filesystem(); + if (empty($location)) { + $errors[ERROR_LOADER_NOT_FOUND] = 'The loader file could not be found in standard locations.'; + } + } + if (!empty($errors)) { + return $errors; + } else { + return $location; + } +} + +function zend_extension_line_start() +{ + $sysinfo = get_sysinfo(); + $is_53_or_later = is_php_version_or_greater(5,3); + return (is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'] && !$is_53_or_later ? 'zend_extension_ts' : 'zend_extension'); +} + +function ioncube_loader_version_information() +{ + $old_version = true; + $liv = ""; + $lv = ""; + $mv = 0; + if (function_exists('ioncube_loader_iversion')) { + $liv = ioncube_loader_iversion(); + $lv = sprintf("%d.%d.%d", $liv / 10000, ($liv / 100) % 100, $liv % 100); + + $latest_version = get_latestversion(); + + $lat_parts = explode('.',$latest_version); + $cur_parts = explode('.',$lv); + + if (($cur_parts[0] > $lat_parts[0]) || + ($cur_parts[0] == $lat_parts[0] && $cur_parts[1] > $lat_parts[1]) || + ($cur_parts[0] == $lat_parts[0] && $cur_parts[1] == $lat_parts[1] && $cur_parts[2] >= $lat_parts[2])) { + $old_version = false; + } else { + $old_version = $latest_version; + } + $mv = $cur_parts[0]; + } + return array($lv,$mv,$old_version); +} + +function default_loader_version_info() +{ + return array(); +} + +function get_loader_version_info() +{ + return get_remote_session_value('loader_version_info',LOADER_LATEST_VERSIONS_URL,'default_loader_version_info'); +} + +function calc_platform() +{ + $platform = array(); + $platform_info = get_platforminfo(); + $loader = get_loaderinfo(); + $multiple_os_versions = false; + if (is_array($loader) && array_key_exists('osvariants',$loader) && is_array($loader['osvariants'])) { + $versions = array_values($loader['osvariants']); + $multiple_os_versions = !empty($versions[0]); + } + if ($multiple_os_versions) { + list($osvar,$exact_match) = get_reqd_version($loader['osvariants']); + } else { + $osvar = null; + if (is_ms_windows()) { + $sys = get_sysinfo(); + $phpc = (empty($sys['PHP_COMPILER']))?'vc6':strtolower($sys['PHP_COMPILER']); + $osvar = ($sys['THREAD_SAFE']?'':'nonts_') . $phpc; + } + } + foreach ($platform_info as $p) { + if ($p['os'] == $loader['oscode'] && $p['arch'] == $loader['arch'] && (empty($osvar) || $p['os_mod'] == "_" . $osvar)) { + $platform = $p; + break; + } + } + return $platform; +} + +function get_platform() +{ + static $this_platform; + + if (!isset($this_platform)) { + $this_platform = calc_platform(); + } + + return $this_platform; +} + +function is_legacy_platform() +{ + $platform = get_platform(); + return array_key_exists('is_legacy',$platform); +} + +function calc_dirname() +{ + $dirname = ''; + $platform = get_platform(); + if (!empty($platform)) { + $dirname = $platform['dirname']; + } + return $dirname; +} + +function calc_loader_latest_version() +{ + $lv_info = get_loader_version_info(); + $latest_version = RECENT_LOADER_VERSION; + if (!empty($lv_info)) { + $dirname = calc_dirname(); + + if (!empty($dirname)) { + $compiler_specific_version = false; + if (is_ms_windows()) { + $sys = get_sysinfo(); + $phpc = strtolower($sys['PHP_COMPILER']); + if (!empty($phpc)) { + $dirname_comp = $dirname . "_" . $phpc; + if (array_key_exists($dirname_comp,$lv_info)) { + $latest_version = $lv_info[$dirname_comp]; + $compiler_specific_version = true; + } + } + } + if (!$compiler_specific_version && array_key_exists($dirname,$lv_info)) { + $latest_version = $lv_info[$dirname]; + } + } + } + return $latest_version; +} + +function get_latestversion() +{ + static $latest_version; + + if (empty($latest_version)) { + $latest_version = calc_loader_latest_version(); + } + return $latest_version; +} + + +function runtime_loader_location() +{ + $loader_path = false; + $ext_path = extension_dir_path(); + if ($ext_path !== false) { + $id = $ext_path; + $here = dirname(__FILE__); + if (isset($id[1]) && $id[1] == ':') { + $id = str_replace('\\','/',substr($id,2)); + $here = str_replace('\\','/',substr($here,2)); + } + $rd=str_repeat('/..',substr_count($id,'/')).$here.'/'; + $i=strlen($rd); + + $loader_loc = DIRECTORY_SEPARATOR . basename($here) . DIRECTORY_SEPARATOR . get_loader_name(); + while($i--) { + if($rd[$i]=='/') { + $loader_path = runtime_location_exists($ext_path,$rd,$i,$loader_loc); + if ($loader_path !== false) { + break; + } + } + } + + if (!$loader_path && !empty($loader_loc) && @file_exists($loader_loc)) { + $loader_path = basename($loader_loc); + } + } + return $loader_path; +} + +function runtime_location_exists($ext_dir,$path_str,$sep_pos,$loc_name) +{ + $sub_path = substr($path_str,0,$sep_pos); + $lp = $sub_path . $loc_name; + $fqlp = $ext_dir.$lp; + + if(@file_exists($fqlp)) { + return $lp; + } else { + return false; + } +} + +function runtime_loading_is_possible() { + return !((is_php_version_or_greater(5,2,5)) || is_restricted_server() || !ini_get('enable_dl') || !function_exists('dl') || function_is_disabled('dl') || threaded_and_not_cgi()); +} + +function shared_and_runtime_loading() +{ + return (find_server_type() == SERVER_SHARED && empty($_SESSION['use_ini_method']) && runtime_loading_is_possible()); +} + +function get_valid_runtime_loading_path($ignore_loading_check = false) +{ + if ($ignore_loading_check || runtime_loading_is_possible()) { + return runtime_loader_location(); + } else { + return false; + } +} + +function runtime_loading($rtl_path = null) +{ + if (empty($rtl_path)) { + $rtl_path = get_valid_runtime_loading_path(); + } + if (!empty($rtl_path) && @dl($rtl_path)) { + return $rtl_path; + } else { + return false; + } +} + +function get_runtime_loading_path_if_applicable() +{ + $rtl = null; + if (shared_and_runtime_loading()) { + $rtl = get_valid_runtime_loading_path(); + } + return $rtl; +} + +function try_runtime_loading_if_applicable() +{ + $rtl_path = get_runtime_loading_path_if_applicable(); + if (!empty($rtl_path)) { + return runtime_loading($rtl_path); + } else { + return $rtl_path; + } +} + +function runtime_loading_instructions() +{ + $default = get_default_address(); + echo '<h4>Runtime Loading Instructions</h4>'; + echo '<div class=panel>'; + echo '<p>On your shared server the Loader can be installed using the runtime loading method.'; + echo " (<a href=\"{$default}&amp;manual=1\">Please click here if you are <strong>not</strong> on a shared server</a>.)</p>"; + + if ('.' == extension_dir()) { + $dirphrase = is_ms_windows()?'folder':'directory'; + echo "Please note that on your system the Loader <em>must</em> be present in the same " . $dirphrase . " as the first encoded file accessed."; + } + echo '<ol>'; + loader_download_instructions(); + $loader_dir = loader_install_instructions(SERVER_SHARED,dirname(__FILE__)); + shared_test_instructions(); + echo '</ol>'; + echo '</div>'; +} + +function runtime_loading_errors() +{ + $errors = array(); + $ext_path = extension_dir_path(); + if (false === $ext_path) { + $errors[ERROR_RUNTIME_EXT_DIR_NOT_FOUND] = "Extensions directory cannot be found."; + } else { + $expected_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . get_loader_name(); + if (!@file_exists($expected_file)) { + $errors[ERROR_RUNTIME_LOADER_FILE_NOT_FOUND] = "The Loader file was expected to be at $expected_file but could not be found."; + } else { + $errors = loader_compatibility_test($expected_file); + } + } + return $errors; +} + + +function windows_package_name() +{ + $sys = get_sysinfo(); + $loader = get_loaderinfo(); + return (LOADERS_PACKAGE_PREFIX . 'win' . '_' . ($sys['THREAD_SAFE']?'':'nonts_') . strtolower($sys['PHP_COMPILER']) . '_' . $loader['arch']); +} + +function unix_package_name() +{ + $sysinfo = get_sysinfo(); + $loader = get_loaderinfo(); + $multiple_os_versions = false; + if (is_array($loader) && array_key_exists('osvariants',$loader) && is_array($loader['osvariants'])) { + $versions = array_values($loader['osvariants']); + $multiple_os_versions = !empty($versions[0]); + } + if ($multiple_os_versions) { + list($reqd_version,$exact_match) = get_reqd_version($loader['osvariants']); + if ($reqd_version) { + $basename = LOADERS_PACKAGE_PREFIX . $loader['oscode'] . '_' . $reqd_version . '_' . $loader['arch']; + } else { + $basename = ""; + } + } else { + $basename = LOADERS_PACKAGE_PREFIX . $loader['oscode'] . '_' . $loader['arch']; + } + return array($basename,$multiple_os_versions); +} + +function loader_download_instructions() +{ + $sysinfo = get_sysinfo(); + $loader = get_loaderinfo(); + $multiple_os_versions = false; + + if (is_ms_windows()) { + if (is_bool($sysinfo['THREAD_SAFE'])) { + $download_str = '<li>Download one of the following archives of Windows ' . $sysinfo['PHP_COMPILER']; + if (!$sysinfo['THREAD_SAFE']) { + $download_str .= ' non-TS'; + } + $download_str .= ' ' . $loader['arch'] . ' Loaders:'; + echo $download_str; + $basename = windows_package_name(); + echo make_archive_list($basename,array('zip','ipf.zip')); + echo "<p>Please note that the MS Windows installer version is suitable either for direct installation on a Windows machine or for + uploading from a local PC to your server.<br>"; + echo 'A Loaders archive can also be downloaded from <a href="' . LOADERS_PAGE . '" target="loaders">' . LOADERS_PAGE . '</a>.'; + } else { + echo '<li>Download a Windows Loaders archive from <a href="' . LOADERS_PAGE . '" target=loaders>here</a>. If PHP is built with thread safety disabled, use the Windows non-TS Loaders.'; + } + } else { + list($basename,$multiple_os_versions) = unix_package_name(); + if ($basename == "") { + echo '<li>Download a ' . $loader['osname'] . ' ' . $loader['arch'] . ' Loaders archive from <a href="' . LOADERS_PAGE . '" target="loaders">here</a>.'; + echo "<br>Your system appears to be ${loader['osnamequal']} for ${loader['wordsize']} bit. If Loaders are not available for that exact release of ${loader['osname']}, Loaders built for an earlier release should work. Note that you may need to install back compatibility libraries for the operating system."; + echo '<br>If you cannot find a suitable loader then please raise a ticket at <a href="'. SUPPORT_SITE . '">our support helpdesk</a>.'; + } else { + echo '<li>Download one of the following archives of Loaders for ' . $loader['osnamequal'] . ' ' . $loader['arch'] . ':'; + if (SERVER_SHARED == find_server_type()) { + $archives = array('zip','tar.gz','tar.bz2','ipf.zip'); + } else { + $archives = array('tar.gz','tar.bz2','ipf.zip'); + } + echo make_archive_list($basename,$archives); + echo "<p>Please note that the MS Windows installer version is suitable for uploading from a Windows PC to your ${loader['osname']} server.<br>"; + echo "</p>"; + if ($multiple_os_versions && !$exact_match) { + echo "<p>Note that you may need to install back compatibility libraries for ${loader['osname']}.</p>"; + } + } + } + + echo '</li>'; +} + +function ini_dir() +{ + $sysinfo = get_sysinfo(); + $parent_dir = ''; + if (!empty($sysinfo['PHP_INI'])) { + $parent_dir = dirname($sysinfo['PHP_INI']); + } else { + $parent_dir = $_SERVER["PHPRC"]; + if (@is_file($parent_dir)) { + $parent_dir = dirname($parent_dir); + } + } + return $parent_dir; +} + +function unix_install_dir() +{ + $ext_dir = extension_dir_path(); + $cur_dir = @realpath('.'); + if (empty($ext_dir) || $ext_dir == $cur_dir) { + $loader_dir = UNIX_SYSTEM_LOADER_DIR; + } else { + $loader_dir = $ext_dir; + } + return $loader_dir; +} + +function windows_install_dir() +{ + $sysinfo = get_sysinfo(); + if ($sysinfo['SS'] == 'IIS') { + if (false === ($ext_dir = extension_dir_path())) { + $parent_dir = ini_dir(); + $ext_dir = $parent_dir . '\\ext'; + if (!empty($parent_dir) && @file_exists($ext_dir)) { + $loader_dir = $ext_dir; + } else { + $loader_dir = $_SERVER['windir'] . '\\' . WINDOWS_IIS_LOADER_DIR; + } + } else { + $loader_dir = $ext_dir; + } + } else { + $parent_dir = ini_dir(); + $loader_dir = $parent_dir . '\\' . 'ioncube'; + } + return $loader_dir; +} + +function loader_install_dir($server_type) +{ + if (SERVER_SHARED == $server_type && own_php_ini_possible()) { + $loader_dir = get_default_loader_dir_webspace(); + } elseif (is_ms_windows()) { + $loader_dir = windows_install_dir(); + } else { + $loader_dir = unix_install_dir(); + } + return $loader_dir; +} + +function writeable_directories() +{ + $root_path = @realpath($_SERVER['DOCUMENT_ROOT']); + $above_root_path = @realpath($_SERVER['DOCUMENT_ROOT'] . "/.."); + $root_path_cgi_bin = @realpath($_SERVER['DOCUMENT_ROOT'] . "/cgi-bin"); + $above_root_cgi_bin = @realpath($_SERVER['DOCUMENT_ROOT'] . "/../cgi-bin"); + + $paths = array(); + foreach (array($root_path,$above_root_path,$root_path_cgi_bin,$above_root_cgi_bin) as $p) { + if (@is_writeable($p)) { + $paths[] = $p; + } + } + return $paths; +} + +function loader_install_instructions($server_type,$loader_dir = '') +{ + if (empty($loader_dir)) { + $loader_dir = loader_install_dir($server_type); + } + if (SERVER_LOCAL == $server_type) { + echo "<li>Put the Loader files in <code>$loader_dir</code></li>"; + } else { + echo "<li>Transfer the Loaders to your web server and install in <code>$loader_dir</code></li>"; + } + return $loader_dir; +} + +function zend_extension_lines($loader_dir) +{ + $zend_extension_lines = array(); + $sysinfo = get_sysinfo(); + $qt = (is_ms_windows()?'"':''); + $loader = get_loaderinfo(); + + if (!is_bool($sysinfo['THREAD_SAFE']) || !$sysinfo['THREAD_SAFE']) { + $path = $qt . $loader_dir . DIRECTORY_SEPARATOR . $loader['file'] . $qt; + $zend_extension_lines[] = "zend_extension = " . $path; + } + if ((!is_bool($sysinfo['THREAD_SAFE']) && !is_php_version_or_greater(5,3)) || $sysinfo['THREAD_SAFE']) { + $line_start = is_php_version_or_greater(5,3)?'zend_extension':'zend_extension_ts'; + $path = $qt . $loader_dir . DIRECTORY_SEPARATOR . $loader['file_ts'] . $qt; + $zend_extension_lines[] = $line_start . " = " . $path; + } + return $zend_extension_lines; +} + +function user_ini_base() +{ + $doc_root_path = realpath($_SERVER['DOCUMENT_ROOT']); + $above_root_path = @realpath($_SERVER['DOCUMENT_ROOT'] . "/.."); + if (!empty($above_root_path) && @is_writeable($above_root_path)) { + $start_path = $above_root_path; + } else { + $start_path = $doc_root_path; + } + return $start_path; +} + +function user_ini_space_path($file) +{ + $user_base = user_ini_base(); + $fpath = @realpath($file); + if (!empty($fpath) && (0 === strpos($fpath,$user_base))) { + return $fpath; + } else { + return false; + } +} + +function default_ini_path() +{ + return (realpath($_SERVER['DOCUMENT_ROOT'])); +} + +function shared_ini_location() +{ + $phprc = getenv('PHPRC'); + if (!empty($phprc)) { + $phprc_path = user_ini_space_path($phprc); + if (false !== $phprc_path) { + return $phprc_path; + } else { + return default_ini_path(); + } + } else { + return default_ini_path(); + } +} + + +function zend_extension_instructions($server_type,$loader_dir) +{ + $sysinfo = get_sysinfo(); + $base = get_base_address(); + $editing_ini = true; + + $php_ini_name = ini_file_name(); + + if (isset($sysinfo['PHP_INI']) && @file_exists($sysinfo['PHP_INI'])) { + $php_ini_path = $sysinfo['PHP_INI']; + } else { + $php_ini_path = ''; + } + + if (is_bool($sysinfo['THREAD_SAFE'])) { + $kwd = zend_extension_line_start(); + } else { + $kwd = 'zend_extension/zend_extension_ts'; + } + + $server_type_code = server_type_code(); + + $zend_extension_lines = zend_extension_lines($loader_dir); + + if (SERVER_SHARED == $server_type && own_php_ini_possible()) { + $ini_dir = shared_ini_location(); + $php_ini_path = $ini_dir . DIRECTORY_SEPARATOR . $php_ini_name; + if (@file_exists($php_ini_path)) { + $edit_line = "<li>Edit the <code>$php_ini_name</code> in the <code>$ini_dir</code> directory"; + if (zend_extension_line_missing($php_ini_path) && @is_writeable($php_ini_path) && @is_writeable($ini_dir)) { + if (function_exists('file_get_contents')) { + $ini_strs = @file_get_contents($php_ini_path); + } else { + $lines = @file($php_ini_path); + $ini_strs = join(' ',$lines); + } + $fh = @fopen($php_ini_path,"wb"); + if ($fh !== false) { + foreach ($zend_extension_lines as $zl) { + fwrite($fh,$zl . PHP_EOL); + } + fwrite($fh,$ini_strs); + fclose($fh); + $editing_ini = false; + echo "<li>Your php.ini file at $php_ini_path has been modified to include the necessary line for the ionCube Loader."; + } else { + echo $edit_line; + } + } else { + echo $edit_line; + } + } else { + $download_ini_file = "<li><a href=\"$base&amp;page=phpconfig&amp;ininame=$php_ini_name&amp;stype=$server_type_code&amp;download=1&amp;prepend=1\">Save this <code>$php_ini_name</code> file</a> and upload it to <code>$ini_dir</code> (full path on your server)."; + if (@is_writeable($ini_dir)) { + $fh = @fopen($php_ini_path,"wb"); + if ($fh !== false) { + foreach ($zend_extension_lines as $zl) { + fwrite($fh,$zl . PHP_EOL); + } + if (!empty($sysinfo['PHP_INI']) && is_readable($sysinfo['PHP_INI'])) { + if (function_exists('file_get_contents')) { + $ini_strs = @file_get_contents($sysinfo['PHP_INI']); + } else { + $lines = @file($sysinfo['PHP_INI']); + $ini_strs = join(' ',$lines); + } + fwrite($fh,$ini_strs); + } + fclose($fh); + echo "<li>A <code>$php_ini_name</code> file has been created for you in <code>$ini_dir</code>."; + } else { + echo $download_ini_file; + } + } else { + echo $download_ini_file; + } + $editing_ini = false; + } + } elseif (!empty($sysinfo['PHP_INI'])) { + if (empty($sysinfo['PHP_INI_DIR'])) { + echo "<li>Edit the file <code>${sysinfo['PHP_INI']}</code>"; + } else { + $php_ini_path = find_additional_ioncube_ini(); + if (empty($php_ini_path)) { + $php_ini_name = ADDITIONAL_INI_FILE_NAME; + echo "<li><a href=\"$base&amp;page=phpconfig&amp;download=1&amp;newlinesonly=1&amp;ininame=$php_ini_name&amp;stype=$server_type_code\">Save this $php_ini_name file</a> and put it in your ini files directory, <code>${sysinfo['PHP_INI_DIR']}</code>"; + $editing_ini = false; + } else { + $php_ini_name = basename($php_ini_path); + echo "<li>Edit the file <code>$php_ini_path</code>"; + } + } + } else { + echo "<li>Edit the system <code>$php_ini_name</code> file"; + } + if ($editing_ini) { + echo " and <b>before</b> any other $kwd lines ensure that the following is included:<br>"; + foreach ($zend_extension_lines as $zl) { + echo "<code>$zl</code><br>"; + } + if (!empty($php_ini_path)) { + if (zend_extension_line_missing($php_ini_path)) { + echo "<a>Alternatively, replace your current <code>$php_ini_path</code> file with <a href=\"$base&amp;page=phpconfig&amp;ininame=$php_ini_name&amp;stype=$server_type_code&amp;download=1&amp;prepend=1\">this new $php_ini_name file</a>."; + } + } + } + echo '</li>'; +} + +function server_restart_instructions() +{ + $sysinfo = get_sysinfo(); + $base = get_base_address(); + + if ($sysinfo['SS']) { + echo "<li>Restart the ${sysinfo['SS']} server software.</li>"; + } else { + echo "<li>Restart the server software.</li>"; + } + + echo "<li>When the server software has restarted, <a href=\"$base&amp;page=loader_check\" onclick=\"showOverlay();\">click here to test the Loader</a>.</li>"; + + if ($sysinfo['SS'] == 'Apache' && !is_ms_windows()) { + echo '<li>If the Loader installation failed, check the Apache error log file for errors and see our guide to <a target="unix_errors" href="'. UNIX_ERRORS_URL . '">Unix related errors</a>.</li>'; + } +} + +function shared_test_instructions() +{ + $base = get_base_address(); + echo "<li><a href=\"$base&amp;page=loader_check\" onclick=\"showOverlay();\">Click here to test the Loader</a>.</li>"; +} + +function link_to_php_ini_instructions() +{ + $default = get_default_address(); + echo "<p><a href=\"{$default}&amp;stype=s&amp;ini=1\">Please click here for instructions on using the php.ini method instead</a>.</p>"; +} + +function php_ini_instruction_list($server_type) +{ + echo '<h4>Installation Instructions</h4>'; + echo '<div class=panel>'; + echo '<ol>'; + + loader_download_instructions(); + $loader_dir = loader_install_instructions($server_type); + zend_extension_instructions($server_type,$loader_dir); + if ($server_type != SERVER_SHARED || !own_php_ini_possible()) { + server_restart_instructions(); + } else { + shared_test_instructions(); + } + echo '</ol>'; + echo '</div>'; +} + +function php_ini_install_shared($give_preamble = true) +{ + $php_ini_name = ini_file_name(); + $default = get_default_address(); + if ($give_preamble) { + echo "<p>On your <strong>shared</strong> server, the Loader should be installed using a <code>$php_ini_name</code> configuration file."; + echo " (<a href=\"{$default}&amp;manual=1\">Please click here if you are <strong>not</strong> on a shared server</a>.)</p>"; + } + + if (own_php_ini_possible()) { + echo '<p>With your hosting account, you may be able to use your own PHP configuration file.</p>'; + } else { + echo "<p>It appears that you cannot install the ionCube Loader using the <code>$php_ini_name</code> file. Your server provider or system administrator should be able to perform the installation for you. Please refer them to the following instructions.</p>"; + } + + php_ini_instruction_list(SERVER_SHARED); +} + +function php_ini_install($server_type_desc = null, $server_type = SERVER_DEDICATED, $required = true) +{ + $php_ini_name = ini_file_name(); + $default = get_default_address(); + + echo '<p>'; + if ($server_type_desc) { + echo "For a <strong>$server_type_desc</strong> server "; + } else { + echo "For this server "; + } + + if ($required) { + echo "you should install the ionCube Loader using the <code>$php_ini_name</code> configuration file."; + } else { + echo "installing the ionCube Loader using the <code>$php_ini_name</code> file is recommended."; + } + if ($server_type_desc) { + echo " (<a href=\"{$default}&amp;manual=1\">Please click here if you are <strong>not</strong> on a $server_type_desc server</a>.)"; + } + echo '</p>'; + + php_ini_instruction_list($server_type); +} + + + +function help_resources($error_list = array()) +{ + $self = get_self(); + $base = get_base_address(); + $server_type_code = server_type_code(); + $server_type = find_server_type(); + $sysinfo = get_sysinfo(); + $resources = array( + '<a target="_blank" href="' . LOADERS_FAQ_URL . '">ionCube Loaders FAQ</a>', + '<a target="_blank" href="' . LOADER_FORUM_URL . '">ionCube Loader Forum</a>' + ); + if (SERVER_SHARED != $server_type || own_php_ini_possible(true)) { + $support_info = array ( + 'department' => WIZARD_SUPPORT_TICKET_DEPARTMENT, + 'subject' => "ionCube Loader installation problem", + 'message' => support_ticket_information() + ); + if (SERVER_LOCAL == $server_type && !info_should_be_disabled()) { + $temp_files = system_info_temporary_files(); + } else { + $temp_files = NULL; + } + if (!empty($temp_files)) { + $support_info['ini'] = base64_encode(file_get_contents($temp_files['ini'])); + $support_info['phpinfo'] = base64_encode(file_get_contents($temp_files['phpinfo'])); + $support_info['additional'] = base64_encode(file_get_contents($temp_files['additional'])); + + $loader_path = find_loader(true); + if (is_string($loader_path)) { + $support_info['loader'] = base64_encode(file_get_contents($loader_path)); + $support_info['loader_name'] = basename($loader_path); + } else { + $support_info['loader'] = ''; + $support_info['loader_name'] = ''; + } + } else { + $support_info['ini'] = ''; + $support_info['phpinfo'] = ''; + $support_info['additional'] = ''; + $support_info['loader'] = ''; + $support_info['loader_name'] = ''; + } + + $resources[2] = '<form action="' . SUPPORT_SITE . 'lw_index.php' .'" method="POST" id="support-ticket"><a href="" onclick="document.getElementById(\'support-ticket\').submit(); return false;">Raise a support ticket through our helpdesk</a>'; + $resources[2] .= '<input type="hidden" name="department" value="' . $support_info['department'] . '"/>'; + $resources[2] .= '<input type="hidden" name="subject" value="' . $support_info['subject'] . '"/>'; + $resources[2] .= '<input type="hidden" name="message" value="' . $support_info['message'] . '"/>'; + if (!empty($temp_files)) { + $resources[2] .= '<input type="hidden" name="phpinfo" value="' . $support_info['phpinfo'] . '"/>'; + $resources[2] .= '<input type="hidden" name="ini" value="' . $support_info['ini'] . '"/>'; + $resources[2] .= '<input type="hidden" name="additional" value="' . $support_info['additional'] . '"/>'; + $resources[2] .= '<input type="hidden" name="loader" value="' . $support_info['loader'] . '"/>'; + $resources[2] .= '<input type="hidden" name="loader_name" value="' . $support_info['loader_name'] . '"/>'; + } + $resources[2] .= '</form>'; + } + + if (SERVER_SHARED == $server_type && own_php_ini_possible(true) && !user_ini_space_path($sysinfo['PHP_INI'])) { + $resources[3] = '<strong>Please check with your host that you can create php.ini files that will override the system one.</strong>'; + } + return $resources; +} + +function system_info_temporary_files() +{ + $tmpfname_ini = tempnam("/tmp", "INI"); + $tmpfname_ini .= ".ini"; + $fh_ini = @fopen($tmpfname_ini,'wb'); + if ($fh_ini) { + $config = all_ini_contents(); + fwrite($fh_ini,$config); + fclose($fh_ini); + } else { + $tmpfname_ini = ''; + } + + $tmpfname_pinf = tempnam("/tmp", "PIN"); + $tmpfname_pinf .= ".html"; + $fh_pinfo = @fopen($tmpfname_pinf,'wb'); + if ($fh_pinfo) { + ob_start(); + @phpinfo(); + $pinfo = ob_get_contents(); + ob_end_clean(); + fwrite($fh_pinfo,$pinfo); + fclose($fh_pinfo); + } else { + $tmpfname_pinf = ''; + } + + $tmpfname_add = tempnam("/tmp", "ADD"); + $tmpfname_add .= ".html"; + $fh_add = @fopen($tmpfname_add,'wb'); + if ($fh_add) { + ob_start(); + extra_page(false); + $extra = ob_get_contents(); + ob_end_clean(); + fwrite($fh_add,$extra); + fclose($fh_add); + } else { + $tmpfname_add = ''; + } + + if (empty($tmpfname_ini) || empty($tmpfname_pinf) || empty($tmpfname_add)) { + return (array()); + } else { + return (array('ini' => $tmpfname_ini, + 'phpinfo' => $tmpfname_pinf, + 'additional' => $tmpfname_add)); + } +} + +function system_info_archive_page() +{ + info_disabled_check(); + $server_type = find_server_type(); + if (SERVER_LOCAL != $server_type) { + exit; + } + $loader = find_loader(true); + if (is_string($loader)) { + $loader_file = $loader; + } else { + $loader_file = ''; + } + $all_files = system_info_temporary_files(); + if (!empty($all_files)) { + if (!empty($loader_file)) { + $all_files['loader'] = $loader_file; + } + $archive_name = tempnam('/tmp',"ARC"); + if (extension_loaded('zip')) { + $archive_name .= '.zip'; + $zip = @new ZipArchive(); + $mode = @constant("ZIPARCHIVE::OVERWRITE"); + if (!$zip || $zip->open($archive_name, $mode)!==TRUE) { + $archive_name = ''; + } else { + foreach($all_files as $f) { + $zip->addFile($f,basename($f)); + } + $zip->close(); + } + } elseif (extension_loaded('zlib') && !is_ms_windows()) { + $tar_name = $archive_name . ".tar"; + $all_files_str = join(' ',$all_files); + $script = "tar -chf $tar_name $all_files_str"; + $result = @system($script,$retval); + if ($result !== false) { + $archive_name = $tar_name . '.gz'; + $zp = gzopen($archive_name,"w9"); + $tar_contents = get_file_contents($tar_name); + gzwrite($zp,$tar_contents); + gzclose($zp); + } else { + $archive_name = ''; + } + } else { + $archive_name = ''; + } + } else { + $archive_name = ''; + } + if ($archive_name) { + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename='. $archive_name); + @readfile($archive_name); + } else { + $self = get_self(); + $base = get_base_address(); + $server_type_code = server_type_code(); + heading(); + echo "<p>A downloadable archive of system information could not be created.<br> + <strong>Please save each of the following and then attach those files to the support ticket:</strong></p>"; + echo "<ul>"; + echo "<li><a href=\"$base&amp;page=phpinfo\" target=\"phpinfo\">phpinfo()</a></li>"; + echo "<li><a href=\"$base&amp;page=phpconfig\" target=\"phpconfig\">config</a></li>"; + echo "<li><a href=\"$base&amp;page=extra&amp;stype=$server_type_code\" target=\"extra\">additional information</a></li>"; + echo "<li><a href=\"$self?page=loaderbin\">loader file</a></li>"; + echo "</ul>"; + footer(true); + } +} + +function support_ticket_information($error_list = array()) +{ + $sys = get_sysinfo(); + $ld = get_loaderinfo(); + + $ticket_strs = array(); + $ticket_strs[] = "PLEASE DO NOT REMOVE THE FOLLOWING INFORMATION\r\n"; + $ticket_strs[] = "==============\r\n"; + if (!empty($error_list)) { + $ticket_strs[] = "[hr]"; + $ticket_strs[] = "ERRORS"; + $ticket_strs[] = "[table]"; + $ticket_strs[] = '[tr][td]' . join('[/td][/tr][tr][td]',$error_list) . '[/td][/tr]'; + $ticket_strs[] = "[/table]"; + } + $ticket_strs[] = "[hr]"; + $ticket_strs[] = "SYSTEM INFORMATION"; + $info_lines = array(); + $info_lines["Wizard version"] = script_version(); + $info_lines["PHP uname"] = $ld['uname']; + $info_lines["Machine architecture"] = $ld['arch']; + $info_lines["Word size"] = $ld['wordsize']; + $info_lines["Operating system"] = $ld['osname'] . ' ' . $ld['osver']; + if (selinux_is_enabled() || possibly_selinux()) { + $info_lines["Security enhancements"] = "SELinux"; + } elseif (grsecurity_is_enabled()) { + $info_lines["Security enhancements"] = "Grsecurity"; + } else { + $info_lines["Security enhancements"] = "None"; + } + $info_lines["PHP version"] = PHP_VERSION; + if ($sys['DEBUG_BUILD']) { + $info_lines["DEBUG BUILD"] = "DEBUG BUILD OF PHP"; + } + if (!$sys['SUPPORTED_COMPILER']) { + $info_lines["SUPPORTED PHP COMPILER"] = "FALSE"; + $info_lines["PHP COMPILER"] = $sys['PHP_COMPILER']; + } + $info_lines["Is CLI?"] = ($sys['IS_CLI']?"Yes":"No"); + $info_lines["Is CGI?"] = ($sys['IS_CGI']?"Yes":"No"); + $info_lines["Is thread-safe?"] = ($sys['THREAD_SAFE']?"Yes":"No"); + $info_lines["Web server"] = $sys['FULL_SS']; + $info_lines["Server type"] = server_type_string(); + $info_lines["PHP ini file"] = $sys['PHP_INI']; + if (!@file_exists($sys['PHP_INI'])) { + $info_lines["Ini file found"] = "INI FILE NOT FOUND"; + } else { + if (is_readable($sys['PHP_INI'])) { + $info_lines["Ini file found"] = "INI FILE READABLE"; + } else { + $fh = @fopen($sys['PHP_INI'],"rb"); + if ($fh === false) { + $info_lines["Ini file found"] = "INI FILE FOUND BUT POSSIBLY NOT READABLE"; + } else { + $info_lines["Ini file found"] = "INI FILE READABLE"; + } + } + } + $info_lines["PHPRC"] = $sys['PHPRC']; + $loader_path = find_loader(); + if (is_string($loader_path)) { + $info_lines["Loader path"] = $loader_path; + $info_lines["Loader file size"] = filesize($loader_path) . " bytes."; + $info_lines["Loader MD5 sum"] = md5_file($loader_path); + } else { + $info_lines["Loader path"] = "LOADER PATH NOT FOUND"; + } + $server_type_code = server_type_code(); + if (!empty($_SESSION['hostprovider'])) { + $info_lines['Hosting provider'] = $_SESSION['hostprovider']; + $info_lines['Provider URL'] = $_SESSION['hosturl']; + } + $info_lines["Wizard script path"] = '[url]http://' . $_SERVER["HTTP_HOST"] . get_self() . '?stype='. $server_type_code . '[/url]'; + $ticket_strs[] = "[table]"; + foreach ($info_lines as $h => $i) { + $value = (empty($i))?'EMPTY':$i; + $ticket_strs[] = '[tr][td]' . $h . '[/td]' . '[td]' . $value . '[/td][/tr]'; + } + $ticket_strs[] = '[/table]'; + $ticket_strs[] = '[hr]'; + $ticket_strs[] = "\r\n==============\r\n"; + $ticket_strs[] = "PLEASE ENTER ANY ADDITIONAL INFORMATION BELOW\r\n"; + + $support_ticket_str = join('',$ticket_strs); + return urlencode($support_ticket_str); +} + +function wizard_stats_data($page_id) +{ + $data = array(); + + try_runtime_loading_if_applicable(); + $sysinfo = get_sysinfo(); + $ldinfo = get_loaderinfo(); + + $data['sessionid'] = session_id(); + $data['wizard_version'] = script_version(); + $data['server_type'] = server_type_code(); + $data['hostprovider'] = (isset($_SESSION['hostprovider']))?$_SESSION['hostprovider']:''; + $data['hosturl'] = (isset($_SESSION['hosturl']))?$_SESSION['hosturl']:''; + $data['page_id'] = $page_id; + $data['loader_state'] = (extension_loaded(LOADER_EXTENSION_NAME))?'installed':'failure'; + $data['ini_location'] = $sysinfo['PHP_INI']; + $data['is_cgi'] = ($sysinfo['IS_CGI'])?"yes":"no"; + $data['is_ts'] = ($sysinfo['THREAD_SAFE'])?"yes":"no"; + $data['arch'] = $ldinfo['arch']; + $data['php_version'] = PHP_VERSION; + $data['os'] = $ldinfo['osname']; + $data['word_size'] = $ldinfo['wordsize']; + $data['referrer'] = $_SERVER["HTTP_HOST"] . get_self(); + + return $data; +} + +function send_stats($page_id = 'default') +{ + $server_type = find_server_type(); + $res = false; + + if (SERVER_LOCAL != $server_type) { + $stats_data = wizard_stats_data($page_id); + + if (!isset($_SESSION['stats_sent'][$page_id][$stats_data['loader_state']])) { + $url = WIZARD_STATS_URL; + + if (!empty($stats_data)) { + if(function_exists('http_build_query')) { + $qparams = http_build_query($stats_data); + } else { + $qparams = php4_http_build_query($stats_data); + } + $url .= '?' . $qparams; + $res = remote_file_contents($url); + } + $_SESSION['stats_sent'][$page_id][$stats_data['loader_state']] = 1; + } else { + $res = true; + } + } else { + $res = 'LOCAL'; + } + return $res; +} + +function os_arch_string_check($loader_str) +{ + $errors = array(); + if (preg_match("/target os:\s*(([^_]+)_([^-]*)-([[:graph:]]*))/i",$loader_str,$os_matches)) { + $loader_info = get_loaderinfo(); + $dirname = calc_dirname(); + $packed_osname = preg_replace('/\s/','',strtolower($loader_info['osname'])); + if (strtolower($dirname) != $os_matches[1] && $packed_osname != $os_matches[2]) { + $errors[ERROR_LOADER_WRONG_OS] = "You have the wrong loader for your operating system, ". $loader_info['osname'] . "."; + } else { + $loader_wordsize = (strpos($os_matches[3],'64') === false)?32:64; + if ($loader_info['arch'] != ($ap = required_loader_arch($os_matches[3],$loader_info['oscode'],$loader_wordsize))) { + $err_str = "You have the wrong loader for your machine architecture."; + $err_str .= " Your system is " . $loader_info['arch']; + $err_str .= " but the loader you are using is for " . $ap . "."; + $errors[ERROR_LOADER_WRONG_ARCH] = $err_str; + } + } + } + return $errors; +} + +function get_loader_strings($loader_location) +{ + if (function_exists('file_get_contents')) { + $loader_strs = @file_get_contents($loader_location); + } else { + $lines = @file($loader_location); + $loader_strs = join(' ',$lines); + } + return $loader_strs; +} + +function loader_system($loader_location) +{ + $loader_system = array(); + $loader_strs = get_loader_strings($loader_location); + + if (!empty($loader_strs)) { + + if (preg_match("/ioncube_loader_.\.._(.)\.(.)\.(..?)(_nonts)?(_amd64)?\.dll/i",$loader_strs,$version_matches)) { + $loader_system['oscode'] = 'win'; + $loader_system['thread_safe'] = (isset($version_matches[4]) && $version_matches[4] == '_nonts')?0:1; + $loader_system['wordsize'] = (isset($version_matches[5]) && $version_matches[5] == '_amd64')?64:32; + $loader_system['arch'] = ($loader_system['wordsize'] == 64)?'x86-64':'x86'; + $loader_system['php_version_major'] = $version_matches[1]; + $loader_system['php_version_minor'] = $version_matches[2]; + if ($loader_system['php_version_major'] == 5 && $loader_system['php_version_minor'] >= 5) { + $loader_system['compiler'] = 'VC11'; + } elseif (preg_match("/assemblyIdentity.*version=\"([^.]+)\./",$loader_strs,$compiler_matches)) { + $loader_system['compiler'] = "VC" . strtoupper($compiler_matches[1]); + } else { + $loader_system['compiler'] = 'VC6'; + } + } elseif (preg_match("/php version:\s*(.)\.(.)\.(..?)(-ts)?/i",$loader_strs,$version_matches)) { + $loader_system['thread_safe'] = (isset($version_matches[4]) && $version_matches[4] == '-ts')?1:0; + $loader_system['php_version_major'] = $version_matches[1]; + $loader_system['php_version_minor'] = $version_matches[2]; + if (preg_match("/target os:\s*(([^_]+)_([^-]*)-([[:graph:]]*))/i",$loader_strs,$os_matches)) { + $loader_system['oscode'] = strtolower(substr($os_matches[2],0,3)); + $loader_system['wordsize'] = (strpos($os_matches[3],'64') === false)?32:64; + $loader_system['arch'] = required_loader_arch($os_matches[3],$loader_system['oscode'],$loader_system['wordsize']); + $loader_system['compiler'] = $os_matches[4]; + } + } + if (preg_match("/ionCube Loader Version\s+(\S+)/",$loader_strs,$loader_version)) { + $loader_system['loader_version'] = $loader_version[1]; + } else { + $loader_system['loader_version'] = 'UNKNOWN'; + } + if (isset($loader_system['php_version_major'])) { + $loader_system['php_version'] = $loader_system['php_version_major'] . '.' . $loader_system['php_version_minor']; + } + } + return $loader_system; +} + +function loader_compatibility_test($loader_location) +{ + $errors = array(); + + $sysinfo = get_sysinfo(); + if (LOADER_NAME_CHECK) { + $installed_loader_name = basename($loader_location); + $expected_loader_name = get_loader_name(); + if ($installed_loader_name != $expected_loader_name) { + $errors[ERROR_LOADER_UNEXPECTED_NAME] = "The installed loader (<code>$installed_loader_name</code>) does not have the name expected (<code>$expected_loader_name</code>) for your system. Please check that you have the correct loader for your system."; + } + } + if (empty($errors) && !is_readable($loader_location)) { + $execute_error = "The loader at $loader_location does not appear to be readable."; + $execute_error .= "<br>Please check that it exists and is readable."; + $execute_error .= "<br>Please also check the permissions of the containing "; + $execute_error .= (is_ms_windows()?'folder':'directory') . '.'; + if (($sysinfo['SS'] == 'IIS') || !($sysinfo['IS_CGI'] || $sysinfo['IS_CLI'])) { + $execute_error .= "<br>Please also check that the web server has been restarted."; + } + $execute_error .= "."; + $errors[ERROR_LOADER_NOT_READABLE] = $execute_error; + } + $loader_strs = get_loader_strings($loader_location); + $phpv = php_version(); + if (preg_match("/php version:\s*(.)\.(.)\.(..?)(-ts)?/i",$loader_strs,$version_matches)) { + if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) { + $loader_php = $version_matches[1] . "." . $version_matches[2]; + $server_php = $phpv['major'] . "." . $phpv['minor']; + $errors[ERROR_LOADER_PHP_MISMATCH] = "The installed loader is for PHP $loader_php but your server is running PHP $server_php."; + } + if (is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'] && !is_ms_windows() && !(isset($version_matches[4]) && $version_matches[4] == '-ts')) { + $errors[ERROR_LOADER_NONTS_PHP_TS] = "Your server is running a thread-safe version of PHP but the loader is not a thread-safe version."; + } elseif (isset($version_matches[4]) && $version_matches[4] == '-ts' && !(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE'])) { + $errors[ERROR_LOADER_TS_PHP_NONTS] = "Your server is running a non-thread-safe version of PHP but the loader is a thread-safe version."; + } + } elseif (preg_match("/ioncube_loader_.\.._(.)\.(.)\.(..?)(_nonts)?(_amd64)?\.dll/i",$loader_strs,$version_matches)) { + if (!is_ms_windows()) { + $errors[ERROR_LOADER_WIN_SERVER_NONWIN] = "You have a Windows loader but your server does not appear to be running Windows."; + } else { + if (isset($version_matches[4]) && $version_matches[4] == '_nonts' && is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) { + $errors[ERROR_LOADER_WIN_NONTS_PHP_TS] = "You have the non-thread-safe version of the Windows loader but you need the thread-safe one."; + } elseif (!(is_bool($sysinfo['THREAD_SAFE']) && $sysinfo['THREAD_SAFE']) && !(isset($version_matches[4]) && $version_matches[4] == '_nonts')) { + $errors[ERROR_LOADER_WIN_TS_PHP_NONTS] = "You have the thread-safe version of the Windows loader but you need the non-thread-safe one."; + } + if ($version_matches[1] != $phpv['major'] || $version_matches[2] != $phpv['minor']) { + $loader_php = $version_matches[1] . "." . $version_matches[2]; + $server_php = $phpv['major'] . "." . $phpv['minor']; + $errors[ERROR_LOADER_WIN_PHP_MISMATCH] = "The installed loader is for PHP $loader_php but your server is running PHP $server_php."; + } + if ($version_matches[1]== 5 && $version_matches[2] >= 5) { + $loader_compiler = 'VC11'; + } elseif (preg_match("/assemblyIdentity.*version=\"([^.]+)\./",$loader_strs,$compiler_matches)) { + $loader_compiler = "VC" . strtoupper($compiler_matches[1]); + } else { + $loader_compiler = 'VC6'; + } + if ($loader_compiler != $sysinfo['PHP_COMPILER']) { + $errors[ERROR_LOADER_WIN_COMPILER_MISMATCH] = "Your loader was built using $loader_compiler but you need the loader built using ${sysinfo['PHP_COMPILER']}."; + } + } + } else { + $errors[ERROR_LOADER_PHP_VERSION_UNKNOWN] = "The PHP version for the loader cannot be determined - please check that you have a valid ionCube Loader."; + } + $errors += os_arch_string_check($loader_strs); + + return $errors; +} + + +function shared_server() +{ + if (!$rtl_path = runtime_loading()) { + if (empty($_SESSION['use_ini_method']) && runtime_loading_is_possible()) { + runtime_loading_instructions(); + } else { + php_ini_install_shared(); + } + } else { + list($lv,$mv,$newer_version) = ioncube_loader_version_information(); + $phpv = php_version_maj_min(); + echo "<p>The ionCube Loader $lv for PHP $phpv has been successfully installed.</p>"; + $is_legacy_loader = loader_major_version_instructions($mv); + if ($is_legacy_loader) { + loader_upgrade_instructions($lv,$newer_version); + } + successful_install_end_instructions($rtl_path); + } +} + +function dedicated_server() +{ + php_ini_install('dedicated or VPS', SERVER_DEDICATED, true); +} + +function local_install() +{ + php_ini_install('local',SERVER_LOCAL, true); +} + + +function unregister_globals() +{ + if (!ini_get('register_globals')) { + return; + } + + if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) { + die('GLOBALS overwrite attempt detected'); + } + + $noUnset = array('GLOBALS', '_GET', + '_POST', '_COOKIE', + '_REQUEST', '_SERVER', + '_ENV', '_FILES'); + + $input = array_merge($_GET, $_POST, + $_COOKIE, $_SERVER, + $_ENV, $_FILES, + isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()); + + foreach ($input as $k => $v) { + if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) { + unset($GLOBALS[$k]); + } + } +} + +function clear_session($persist = array()) +{ + $persist['not_go_daddy'] = empty($_SESSION['not_go_daddy'])?0:1; + $persist['use_ini_method'] = empty($_SESSION['use_ini_method'])?0:1; + $persist['server_type'] = empty($_SESSION['server_type'])?SERVER_UNKNOWN:$_SESSION['server_type']; + @session_destroy(); + $_SESSION = array(); + $_SESSION['CREATED'] = time(); + $_SESSION = $persist; +} + +function can_archive() +{ + return (extension_loaded('zip') || (extension_loaded('zlib') && !is_ms_windows())); +} + +function is_ioncube() +{ + return (($_SERVER["REMOTE_ADDR"] == IONCUBE_IP_ADDRESS) || ($_SERVER["REMOTE_ADDR"] == gethostbyname(IONCUBE_ACCESS_ADDRESS))); +} + +function can_reach_ioncube() +{ + return (isset($_SESSION['remote_access_successful'])); +} + +function info_should_be_disabled($only_allow_ioncube = false) +{ + $elapsed = time() - max(filemtime(__FILE__),filectime(__FILE__)); + + if (is_ioncube()) { + $cutoff_time = IONCUBE_WIZARD_EXPIRY_MINUTES * 60; + } else { + if (!$only_allow_ioncube && !extension_loaded(LOADER_EXTENSION_NAME)) { + $cutoff_time = WIZARD_EXPIRY_MINUTES * 60; + } else { + return true; + } + } + + return ($elapsed > $cutoff_time); +} + +function info_disabled_text() +{ + return "The information you have tried to access has been disabled for security reasons. Please re-install this Loader Wizard script and try again."; +} + +function info_disabled_check() +{ + if (info_should_be_disabled()) { + heading(); + echo info_disabled_text(); + footer(true); + exit; + } +} + +function run() +{ + + $user_agent = $_SERVER['HTTP_USER_AGENT']; + if (preg_match('/googlebot/i',$user_agent)) { + exit; + } + unregister_globals(); + if (is_php_version_or_greater(4,3,0)) { + ini_set('session.use_only_cookies',1); + } + $session_ok = @session_start(); + + if (!defined('PHP_EOL')) { + if (is_ms_windows()) { + define('PHP_EOL',"\r\n"); + } else { + define('PHP_EOL',"\n"); + } + } + + if (!isset($_SESSION['CREATED'])) { + $_SESSION['CREATED'] = time(); + } elseif (time() - $_SESSION['CREATED'] > SESSION_LIFETIME_MINUTES * 60 ) { + clear_session(); + } + if (!isset($_SERVER)) $_SERVER =& $HTTP_SERVER_VARS; + + (php_sapi_name() == 'cli') && die("This script should only be run by a web server.\n"); + + $page = get_request_parameter('page'); + $host = get_request_parameter('host'); + $clear = get_request_parameter('clear'); + $ini = get_request_parameter('ini'); + $timeout = get_request_parameter('timeout'); + + if ($timeout) { + $_SESSION['timing_out'] = 1; + $_SESSION['initial_run'] = 0; + } + + if (!empty($host)) { + if ($host == 'ngd') { + $_SESSION['not_go_daddy'] = 1; + } + } + if (!empty($ini)) { + $_SESSION['use_ini_method'] = 1; + } + + if (!empty($clear)) { + clear_session(); + unset($_SESSION['not_go_daddy']); + unset($_SESSION['use_ini_method']); + unset($_SESSION['server_type']); + } else { + $stype = get_request_parameter('stype'); + $hostprovider = get_request_parameter('hostprovider'); + $hosturl = get_request_parameter('hosturl'); + if (!empty($hostprovider)) { + $_SESSION['hostprovider'] = $hostprovider; + $_SESSION['hosturl'] = $hosturl; + } + $server_type = find_server_type($stype,false,true); + } + if ($session_ok && !$timeout && !isset($_SESSION['initial_run']) && empty($page)) { + $_SESSION['initial_run'] = 1; + initial_page(); + @session_write_close(); + exit; + } else { + $_SESSION['initial_run'] = 0; + } + + if (empty($_SESSION['server_type'])) { + $_SESSION['server_type'] = SERVER_UNKNOWN; + } + + if (empty($page) || !function_exists($page . "_page")) { + $page = get_default_page(); + } + + $fn = "${page}_page"; + $fn(); + + @session_write_close(); + exit(0); +} + +function wizardversion_page() +{ + $start_time = time(); + $wizard_version_only = get_request_parameter('wizard_only'); + $clear_session_info = get_request_parameter('clear_info'); + if ($clear_session_info) { + unset($_SESSION['timing_out']); + unset($_SESSION['latest_wizard_version']); + } + $wizard_version = latest_wizard_version(); + $message = ''; + if (false === $wizard_version) { + $message = "0"; + } elseif (update_is_available($wizard_version)) { + $message = "$wizard_version"; + } else { + $message = "1"; + } + echo $message; + @session_write_close(); + exit(0); +} + +function platforminfo_page() +{ + $message = ''; + $platforms = get_loader_platforms(); + $message = empty($platforms)?0:1; + echo $message; + @session_write_close(); + exit(0); +} + +function loaderversion_page() +{ + $message = ''; + $loader_versions = get_loader_version_info(); + $message = empty($loader_versions)?0:1; + echo $message; + @session_write_close(); + exit(0); +} + +function compilerversion_page() +{ + $message = ''; + $compiler_versions = find_win_compilers(); + $message = empty($compiler_versions)?0:1; + echo $message; + @session_write_close(); + exit(0); +} + +function initial_page() +{ + $self = get_self(); + $start_page = get_default_address(false); + $stage_timeout = 7000; + $step_lag = 500; + + echo <<<EOT + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "http://www.w3.org/TR/html4/loose.dtd"> + <html> + <head> + <title>ionCube Loader Wizard</title> + <link rel="stylesheet" type="text/css" href="$self?page=css"> + <style type="text/css"> + body { + height: 100%; + width: 100%; + } + </style> + <script type="text/javascript"> + var timingOut = 0; + var xmlHttpTimeout; + var ajax; + var statusPar; + var stage_timeout = $stage_timeout; + var step_lag = $step_lag; + + function checkNextStep(ajax,expected,continuation) { + if (ajax.readyState==4 && ajax.status==200) + { + clearTimeout(xmlHttpTimeout); + if (ajax.responseText == expected) { + setTimeout('',step_lag); + continuation(); + } else { + statusPar.innerHTML = 'Unable to check for update<br>script continuing'; + setTimeout("window.location.href = '$start_page&timeout=1'",1000); + } + } + } + + function getXmlHttp() { + if (window.XMLHttpRequest) { + xmlhttp=new XMLHttpRequest(); + } else { + xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); + } + return xmlhttp; + } + var startMainLoaderWizard = function() { + window.location.href = '$start_page'; + } + var loaderVersionCheck = function() { + statusPar.innerHTML = 'Stage 4/4: Getting latest loader versions'; + var xmlHttp = getXmlHttp(); + xmlHttp.onreadystatechange=function() { + checkNextStep(xmlHttp,"1",startMainLoaderWizard); + } + xmlHttp.open("GET","$self?page=loaderversion",true); + xmlHttp.send(""); + ajax = xmlHttp; + xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout); + } + var platformCheck = function() { + statusPar.innerHTML = 'Stage 3/4: Getting platform information'; + var xmlHttp = getXmlHttp(); + xmlHttp.onreadystatechange=function() { + checkNextStep(xmlHttp,"1",loaderVersionCheck); + } + xmlHttp.open("GET","$self?page=platforminfo",true); + xmlHttp.send(""); + ajax = xmlHttp; + xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout); + } + var compilerVersionCheck = function() { + statusPar.innerHTML = 'Stage 2/4: Getting compiler versions'; + var xmlHttp = getXmlHttp(); + xmlHttp.onreadystatechange=function() { + checkNextStep(xmlHttp,"1",platformCheck); + } + xmlHttp.open("GET","$self?page=compilerversion",true); + xmlHttp.send(""); + ajax = xmlHttp; + xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout); + } + var startChecks = function() { + statusPar = document.getElementById('status'); + statusPar.innerHTML = 'Stage 1/4: Getting Loader Wizard version'; + var xmlHttp = getXmlHttp(); + xmlHttp.onreadystatechange=function() { + checkNextStep(xmlHttp,"1",compilerVersionCheck); + } + xmlHttp.open("GET","$self?page=wizardversion",true); + xmlHttp.send(""); + ajax = xmlHttp; + xmlHttpTimeout=setTimeout('ajaxTimeout()',stage_timeout); + } + function ajaxTimeout(){ + ajax.abort(); + statusPar.innerHTML = 'Cannot reach server<br>script continuing'; + setTimeout("window.location.href = '$start_page&timeout=1'",1000); + } + </script> + </head> + <body> + + <div id="loading"><script type="text/javascript">document.write('<p>Initialising<br>ionCube Loader Wizard<br><span id="status"></span></p>');</script><p id="noscript">Your browser does not support JavaScript so the ionCube Loader Wizard initialisation cannot be made now. This script can get the latest loader version information from the ionCube server when you go to the next page.<br>Please choose one of the following. <br>If the script appears to hang please restart the script and choose the "NO" option.<br><br><br><a href="$start_page">YES - my server DOES have internet access</a><br><br><a href="$start_page&timeout=1">NO - my server does NOT have internet access</a></p></div> + <script type="text/javascript"> + document.getElementById('noscript').style.display = 'none'; + window.onload = startChecks; + </script> + </body> + </html> +EOT; +} + +function default_page($loader_extension = LOADER_EXTENSION_NAME) +{ + $self = get_self(); + foreach (array('self') as $vn) { + if (empty($$vn)) { + $server_data = print_r($_SERVER,true); + error("Unable to initialise ($vn)". ' $_SERVER is: ' . $server_data); + } + } + + heading(); + + $wizard_update = check_for_wizard_update(true); + + $rtl = try_runtime_loading_if_applicable(); + + $server_type = find_server_type(); + + if (extension_loaded($loader_extension) && $server_type != SERVER_UNKNOWN) { + loader_already_installed($rtl); + } else { + loader_not_installed(); + } + send_stats('default'); + + footer($wizard_update); +} + +function uninstall_wizard_instructions() +{ + echo '<p><strong>For security reasons we advise that you remove this Wizard script from your server now that the ionCube Loader is installed.</strong></p>'; +} + +function contact_script_provider_instructions() +{ + echo '<p>Please contact the script provider if you do experience any problems running encoded files.</p>'; +} + +function may_need_to_copy_ini() +{ + $sys = get_sysinfo(); + if (ini_same_dir_as_wizard() && $sys['IS_CGI']) { + $dirphrase = is_ms_windows()?'folder':'directory'; + $ini = ini_file_name(); + echo "<p>Please note that if encoded files in a different $dirphrase from the Wizard fail then you should attempt to copy the $ini file to each $dirphrase in which you have encoded files.</p>"; + } +} + +function successful_install_end_instructions($rtl_path = null) +{ + if (empty($rtl_path)) { + may_need_to_copy_ini(); + } elseif (is_string($rtl_path)) { + echo "<p>The runtime loading method of installation was used with path <code>$rtl_path</code></p>"; + } + contact_script_provider_instructions(); + if (is_legacy_platform()) { + legacy_platform_instructions(); + } + uninstall_wizard_instructions(); +} + +function loader_major_version_instructions($mv) +{ + if ($mv < LATEST_LOADER_MAJOR_VERSION) { + echo "<p><strong>The installed version of the Loader cannot run files produced by the most recent ionCube Encoder.</strong>"; + echo " You will need a version " . LATEST_LOADER_MAJOR_VERSION . " ionCube Loader to run such files.</p>"; + } + return ($mv < LATEST_LOADER_MAJOR_VERSION); +} + +function loader_already_installed($rtl = null) +{ + list($lv,$mv,$newer_version) = ioncube_loader_version_information(); + $phpv = php_version_maj_min(); + $php_str = ' for PHP ' . $phpv; + echo '<div class="success">'; + echo '<h4>Loader Installed</h4>'; + if ($newer_version) { + echo '<p>The ionCube Loader version ' . $lv . $php_str . ' is <strong>already installed</strong> but it is an old version.'; + echo ' It is recommended that the Loader be upgraded to the latest version if possible.</p>'; + $know_latest_version = is_string($newer_version); + $is_legacy_loader = loader_major_version_instructions($mv); + echo '</div>'; + loader_upgrade_instructions($lv,$newer_version); + } else { + echo '<p>The ionCube Loader version ' . $lv . $php_str . ' is already installed and encoded files should run without problems.</p>'; + echo '</div>'; + $is_legacy_loader = loader_major_version_instructions($mv,true); + if ($is_legacy_loader) { + loader_upgrade_instructions($lv,true); + } + } + + successful_install_end_instructions($rtl); +} + +function loader_upgrade_instructions($installed_version,$newer_version) +{ + if ($newer_version) { + echo '<div class="panel">'; + echo '<h4>Loader Upgrade Instructions</h4>'; + $restart_needed = true; + $server_type = find_server_type(); + if ($server_type == SERVER_SHARED || $server_type == SERVER_UNKNOWN) { + $loader_path = find_loader(true); + if (!is_string($loader_path) || false === user_ini_space_path($loader_path)) { + $verb_case = ($server_type == SERVER_UNKNOWN)?"may":"will"; + echo "<p>Please note that you $verb_case need your system administrator to do the following to upgrade. The web server will need to be restarted after the loader file is changed.</p>"; + } + $restart_needed = false; + } + if (is_string($newer_version)) { + $version_str = "version $newer_version"; + } else { + $version_str = "a newer version"; + } + $loader_name = get_loader_name(); + echo "<p>To upgrade from version $installed_version to $version_str of the ionCube Loader, please replace your existing loader file, $loader_name, with + the file of the same name from one of the following packages:</p>"; + if (is_ms_windows()) { + $basename = windows_package_name(); + } else { + list($basename,$multiple_os_versions) = unix_package_name(); + } + echo make_archive_list($basename,array('zip','tar.gz')); + if ($restart_needed) { + echo "<p>Once you have replaced the loader file please restart your web server.</p>"; + } + echo '</div>'; + } +} + +function legacy_platform_warning() +{ + $leg_warn = '<p><strong>You are on a platform on which ionCube Loaders are no longer being developed. '; + $leg_warn .= 'Loaders on your platform may not be able to run files produced by the latest ionCube Encoder. '; + $leg_warn .= 'Please switch, if possible, to a platform on which loaders are currently supported. '; + $leg_warn .= 'A list of currently supported platforms is shown on our <a href="' . LOADERS_PAGE . '" target="loaders">loaders page</a>.</strong></p>'; + + return $leg_warn; +} + +function legacy_platform_instructions() +{ + echo legacy_platform_warning(); +} + +function loader_not_installed() +{ + $loader = get_loaderinfo(); + $sysinfo = get_sysinfo(); + + $stype = get_request_parameter('stype'); + $manual_select = get_request_parameter('manual'); + $host_type = find_server_type($stype,$manual_select,true); + + if ($host_type != SERVER_UNKNOWN && is_array($loader) && !$sysinfo['DEBUG_BUILD']) { + $warnings = server_restriction_warnings(); + if (is_legacy_platform()) { + $warnings[] = legacy_platform_warning(); + } + if (empty($_SESSION['use_ini_method']) && $host_type == SERVER_SHARED && runtime_loading_is_possible()) { + $errors = runtime_loading_errors(); + } else { + $errors = ini_loader_errors(); + $warnings = array_merge($warnings,ini_loader_warnings()); + } + if (!empty($errors)) { + if (count($errors) > 1) { + $problem_str = "Please note that the following problems currently exist"; + } else { + $problem_str = "Please note that the following problem currently exists"; + } + echo '<div class="alert">' .$problem_str . ' with the ionCube Loader installation:'; + echo make_list($errors,"ul"); + echo '</div>'; + } + if (!empty($warnings)) { + $addword = empty($errors)?'':'also'; + $plural = (count($warnings)>1)?'s':''; + echo '<div class="warning">'; + echo "Please note $addword the following issue$plural:"; + echo make_list($warnings,"ul"); + echo '</div>'; + } + } + if (!isset($stype)) { + echo '<p>To use files that have been protected by the <a href="' . ENCODER_URL . '" target=encoder>ionCube PHP Encoder</a>, a component called the ionCube Loader must be installed.</p>'; + } + + if (!is_supported_php_version()) { + echo '<p>Your server is running PHP version ' . PHP_VERSION . ' and is + unsupported by ionCube Loaders. Recommended PHP 4 versions are PHP 4.2 or higher, + and PHP 5.1 or higher for PHP 5.</p>'; + } elseif ($latest_supported_php_version = is_after_max_php_version_supported()) { + echo '<strong>Your server is running PHP version ' . PHP_VERSION . ' and is + currently unsupported by any ionCube Loaders. <br/>This may change in the future if a Loader is produced for your PHP platform.<br/>In the meantime please downgrade PHP to version ' . $latest_supported_php_version . '.</strong>'; + } elseif ($sysinfo['DEBUG_BUILD']) { + echo '<p>Your server is currently running a debug build of PHP. The Loader cannot be installed with a debug build of PHP. Please ensure that PHP is reconfigured with debug disabled. Note that debug builds of PHP cannot help in debugging PHP scripts.</p>'; + } elseif (!is_array($loader)) { + if ($loader == ERROR_WINDOWS_64_BIT) { + echo '<p>Loaders for 64-bit PHP on Windows are not currently available. However, if you <b>install and run 32-bit PHP</b> the corresponding 32-bit loader for Windows should work.</p>'; + if ($sysinfo['THREAD_SAFE']) { + echo '<li>Download one of the following archives of 32-bit Windows x86 loaders:'; + } else { + echo '<li>Download one of the following archives of 32-bit Windows non-TS x86 loaders:'; + } + echo make_archive_list(windows_package_name()); + } else { + echo '<p>There may not be an ionCube Loader available for your type of system at the moment. However, if you create a <a href="' . SUPPORT_SITE . '">support ticket</a> more advice and information may be available to assist. Please include the URL for this Wizard in your ticket.</p>'; + } + } elseif (!$sysinfo['SUPPORTED_COMPILER']) { + $supported_compilers = supported_win_compilers(); + $supported_compiler_string = join('/',$supported_compilers); + echo '<p>At the current time the ionCube Loader requires PHP to be built with ' . $supported_compiler_string . '. Your PHP software has been built using ' . $sysinfo['PHP_COMPILER'] . '. Supported builds of PHP are available from <a href="http://windows.php.net/download/">PHP.net</a>.'; + } else { + switch ($host_type) { + case SERVER_SHARED: + shared_server(); + break; + case SERVER_DEDICATED: + dedicated_server(); + break; + case SERVER_LOCAL: + local_install(); + break; + default: + echo server_selection_form(); + break; + } + } +} + +function server_selection_form() +{ + $self = get_self(); + $timeout = (isset($_SESSION['timing_out']) && $_SESSION['timing_out'])?1:0; + $hostprovider = (!empty($_SESSION['hostprovider']))?$_SESSION['hostprovider']:''; + $hostprovider = htmlspecialchars($hostprovider, ENT_QUOTES, 'UTF-8'); + $hosturl = (!empty($_SESSION['hosturl']))?$_SESSION['hosturl']:''; + $hosturl = htmlspecialchars($hosturl, ENT_QUOTES, 'UTF-8'); + $form = <<<EOT + <p>This Wizard will give you information on how to install the ionCube Loader.</p> + <p>Please select the type of web server that you have and then click Next.</p> + <script type=text/javascript> + function trim(s) { + return s.replace(/^\s+|\s+$/g,""); + } + function input_ok() { + var l = document.getElementById('local'); + if (l.checked) { + return true; + } + + var s = document.getElementById('shared'); + var d = document.getElementById('dedi'); + + if (!s.checked && !d.checked) { + alert("Please select one of the server types."); + return false; + } else { + var hn = document.getElementById('hostprovider'); + var hu = document.getElementById('hosturl'); + var hostprovider = trim(hn.value); + var hosturl = trim(hu.value); + + if (!hostprovider || !hosturl) { + alert("Please enter both a hosting provider name and their URL."); + return false; + } + if (hostprovider.length < 4) { + alert("The hosting provider name should be at least 4 characters in length."); + return false; + } + if (!hosturl.match(/[A-Za-z0-9-_]+\.[A-Za-z0-9-_%&\?\/.=]+/)) { + alert("The hosting provider URL is invalid."); + return false; + } + if (hosturl.length < 5) { + alert("The hosting provider URL should be at least 5 characters in length."); + return false; + } + } + return true; + } + </script> + <form method=GET action=$self> + <input type="hidden" name="page" value="default"> + <input type="hidden" name="timeout" value="$timeout"> + <input type=radio id=shared name=stype value=s onclick="document.getElementById('hostinginfo').style.display = 'block';"><label for=shared>Shared <small>(for example, server with FTP access only and no access to php.ini)</small></label><br> + <input type=radio id=dedi name=stype value=d onclick="document.getElementById('hostinginfo').style.display = 'block';"><label for=dedi>Dedicated or VPS <small>(server with full root ssh access)</small></label><br> + <div id="hostinginfo" style="display: none">If you are on a shared or dedicated server, please give your hosting provider and their URL: + <table> + <tr><td><label for=hostprovider>Name of your hosting provider</label></td><td><input type=text id="hostprovider" name=hostprovider value="$hostprovider"></td></tr> + <tr><td><label for=hosturl>URL of your hosting provider</label></td><td><input type=text id="hosturl" name=hosturl value="$hosturl"></td></tr> + </table> + </div> + <input type=radio id=local name=stype value=l onclick="document.getElementById('hostinginfo').style.display = 'none';"><label for=local>Local install</label> + <p><input type=submit value=Next onclick="return (input_ok(this) && showOverlay());"></p> + </form> +EOT; + return $form; +} + +function phpinfo_page() +{ + info_disabled_check(); + if (function_is_disabled('phpinfo')) { + echo "phpinfo is disabled on this server"; + } else { + @phpinfo(); + } +} + +function loader_check_page($ext_name = LOADER_EXTENSION_NAME) +{ + heading(); + + $rtl_path = try_runtime_loading_if_applicable(); + + if (extension_loaded($ext_name)) { + list($lv,$mv,$newer_version) = ioncube_loader_version_information(); + $phpv = php_version_maj_min(); + $php_str = ' for PHP ' . $phpv; + echo '<div class="success">'; + echo '<h4>Loader Installed Successfully</h4>'; + echo '<p>The ionCube Loader version ' . $lv . $php_str . ' <strong>is installed</strong> and encoded files should run successfully.'; + if ($newer_version) { + echo ' Please note though that you have an old version of the ionCube Loader.</p>'; + $is_legacy_loader = loader_major_version_instructions($mv); + echo '</div>'; + loader_upgrade_instructions($lv,$newer_version); + } else { + echo '</p>'; + $is_legacy_loader = loader_major_version_instructions($mv); + echo '</div>'; + if ($is_legacy_loader) { + loader_upgrade_instructions($lv,true); + } + } + successful_install_end_instructions($rtl_path); + } else { + echo '<div class="failure">'; + echo '<h4>Loader Not Installed</h4>'; + echo '<p>The ionCube Loader is <b>not</b> currently installed successfully.</p>'; + + if (!is_null($rtl_path)) { + echo '<p>Runtime loading was attempted but has failed.</p>'; + echo '</div>'; + $rt_errors = runtime_loading_errors(); + if (!empty($rt_errors)) { + list_loader_errors($rt_errors); + } + link_to_php_ini_instructions(); + } else { + echo '</div>'; + list_loader_errors(); + } + } + + send_stats('check'); + footer(true); +} + +function ini_loader_errors() +{ + $errors = array(); + if (SERVER_SHARED == find_server_type() && !own_php_ini_possible(true)) { + $errors[ERROR_INI_USER_CANNOT_CREATE] = "It appears that you are not be able to create your own ini files on your shared server. <br><strong>You will need to ask your server administrator to install the ionCube Loader for you.</strong>"; + } + $loader_loc = find_loader(false); + if (is_string($loader_loc)) { + if (!shared_and_runtime_loading()) { + $sys = get_sysinfo(); + if (empty($sys['PHP_INI'])) { + $errors[ERROR_INI_NO_PATH] = 'No file path found for the PHP configuration file (php.ini).'; + } elseif (!@file_exists($sys['PHP_INI'])) { + $errors[ERROR_INI_NOT_FOUND] = 'The PHP configuration file (' . $sys['PHP_INI'] .') cannot be found.'; + } + } + $errors = $errors + loader_compatibility_test($loader_loc); + } else { + $errors = $errors + $loader_loc; + $fs_location = find_loader_filesystem(); + if (!empty($fs_location)) { + $fs_loader_errors = loader_compatibility_test($fs_location); + if (!empty($fs_loader_errors)) { + $errors[ERROR_LOADER_WRONG_GENERAL] = "The loader file found at $fs_location is not the correct one for your system."; + } + $errors = $errors + $fs_loader_errors; + } + } + return $errors; +} + +function unix_path_dir($dir = '') +{ + if (empty($dir)) { + $dir = dirname(__FILE__); + } + if (is_ms_windows()) { + $dir = str_replace('\\','/',substr($dir,2)); + } + return $dir; +} + +function unrecognised_inis_webspace($startdir) +{ + $ini_list = array(); + + $ini_name = ini_file_name(); + $sys = get_sysinfo(); + $depth = substr_count($startdir,'/'); + + $rel_path = ''; + $rootpath = realpath($_SERVER['DOCUMENT_ROOT']); + for ($seps = 0; $seps < $depth; $seps++) { + $full_ini_loc = @realpath($startdir . '/' . $rel_path) . DIRECTORY_SEPARATOR . $ini_name; + if (@file_exists($full_ini_loc) && $sys['PHP_INI'] != $full_ini_loc) { + $ini_list[] = @realpath($full_ini_loc); + } + + if (dirname($full_ini_loc) == $rootpath) { + break; + } + $rel_path .= '../'; + } + return $ini_list; +} + +function correct_loader_wrong_location() +{ + $loader_location_pair = array(); + $loader_location = find_loader_filesystem(); + if (is_string($loader_location)) { + $loader_errors = loader_compatibility_test($loader_location); + if (empty($loader_errors)) { + $ini_loader = scan_inis_for_loader(); + if (!empty($ini_loader['location'])) { + $ini_loader_errors = loader_compatibility_test($ini_loader['location']); + if (!empty($ini_loader_errors)) { + $loader_location_pair['loader'] = $loader_location; + $loader_location_pair['newloc'] = dirname($ini_loader['location']); + } + } else { + $std_dir = loader_install_dir(find_server_type()); + $std_ld_path = $std_dir . DIRECTORY_SEPARATOR . get_loader_name(); + if (@file_exists($std_ld_path)) { + $stdloc_loader_errors = loader_compatibility_test($std_ld_path); + } else { + $stdloc_loader_errors = array("Loader file does not exist."); + } + if (!empty($stdloc_loader_errors)) { + $loader_location_pair['loader'] = $loader_location; + $loader_location_pair['newloc'] = $std_dir; + } + } + } + } + return $loader_location_pair; +} + +function ini_loader_warnings() +{ + $warnings = array(); + if (find_server_type() == SERVER_SHARED) + { + if (own_php_ini_possible()) { + $sys = get_sysinfo(); + $ini_name = ini_file_name(); + $rootpath = realpath($_SERVER['DOCUMENT_ROOT']); + $root_ini_file = $rootpath . DIRECTORY_SEPARATOR . $ini_name; + $cgibinpath = @realpath($_SERVER['DOCUMENT_ROOT'] . "/cgi-bin"); + $cgibin_ini_file = (empty($cgibinpath))?'':$cgibinpath . DIRECTORY_SEPARATOR . $ini_name; + $here = unix_path_dir(); + $ini_files = unrecognised_inis_webspace($here); + $shared_ini_loc = shared_ini_location(); + $shared_ini_file = $shared_ini_loc . DIRECTORY_SEPARATOR . $ini_name; + $ini_dir = dirname($sys['PHP_INI']); + $all_ini_locations_used = !empty($ini_files); + foreach ($ini_files as $full_ini_loc) { + $advice = "The file $full_ini_loc is not being recognised by PHP."; + $advice .= " Please check that the name and location of the file are correct."; + if (!ini_same_dir_as_wizard()) { + $ini_loc_dir = dirname($full_ini_loc); + if (!@file_exists($shared_ini_file) && !empty($shared_ini_loc) && $ini_loc_dir != $shared_ini_loc && $ini_dir != $shared_ini_loc) { + $all_ini_locations_used = false; + $advice .= " Please try copying the <code>$full_ini_loc</code> file to <code>" . $shared_ini_loc . "</code>."; + } else { + if (!@file_exists($root_ini_file) && $rootpath != $shared_ini_loc && $full_ini_loc != $rootpath) { + $all_ini_locations_used = false; + $advice .= " Please try copying the <code>$full_ini_loc</code> file to <code>" . $rootpath . "</code>."; + } + if (!empty($cgibin_ini_file) && !@file_exists($cgibin_ini_file) && $cgibinpath != $shared_ini_loc && $full_ini_loc != $cgibinpath && $cgibinpath != $rootpath) { + $all_ini_locations_used = false; + $advice .= " Please try copying the <code>$full_ini_loc</code> file to <code>" . $cgibinpath . "</code>."; + } + $herepath = realpath($here); + $here_ini_file = $herepath . DIRECTORY_SEPARATOR . $ini_name; + if (!@file_exists($here_ini_file) && $herepath != $rootpath && $herepath != $cgibinpath) { + $all_ini_locations_used = false; + $advice .= " It may be necessary to copy the <code>$full_ini_loc</code> file to <code>$herepath</code> and to all " . (is_ms_windows()?'folders':'directories') . ' in which you have encoded files'; + } + } + } else { + $all_ini_locations_used = false; + } + $warnings[] = $advice; + } + if ($all_ini_locations_used) { + $warnings[] = "<strong>It looks as if ini files are not being recognised in any of the standard locations in your webspace. Please contact your hosting provider to check whether you can create your own PHP ini file and where it should go.</strong>"; + } + } else { + if (own_php_ini_possible(true)) { + $warnings[] = "You may not be able to create your own ini files on your shared server. <br><strong>You might need to ask your server administrator to install the ionCube Loader for you.</strong>"; + } + } + } else { + $loader_dir_pair = correct_loader_wrong_location(); + if (!empty($loader_dir_pair)) { + $advice = "The correct loader for your system has been found at <code>${loader_dir_pair['loader']}</code>."; + if ($loader_dir_pair['loader'] != $loader_dir_pair['newloc']) { + $advice .= " You may wish to copy the loader from <code>${loader_dir_pair['loader']}</code> to <code>${loader_dir_pair['newloc']}</code>."; + } + $warnings[] = $advice; + } + } + return $warnings; +} + +function list_loader_errors($errors = array(),$warnings = array(),$suggest_restart = true) +{ + $default = get_default_address(); + $retry_message = ''; + + + if (empty($errors)) { + $errors = ini_loader_errors(); + if (empty($warnings)) { + $warnings = ini_loader_warnings(); + } + } + + if (!empty($errors)) { + $try_again = '<a href="#" onClick="window.location.href=window.location.href">try again</a>'; + + echo '<div class="alert">'; + if (count($errors) > 1) { + echo 'The following problems have been found with the ionCube Loader installation:'; + $retry_message = "Please correct those errors and $try_again."; + } else { + echo 'The following problem has been found with the ionCube Loader installation:'; + $retry_message = "Please correct that error and $try_again."; + } + if (array_key_exists(ERROR_INI_USER_CANNOT_CREATE,$errors)) { + $retry_message = ''; + } + echo make_list($errors,"ul"); + echo '</div>'; + if (!empty($warnings)) { + echo '<div class="warning">'; + echo 'Please also note the following:'; + echo make_list($warnings,"ul"); + echo '</div>'; + } + } elseif (!empty($warnings)) { + echo '<div class="warning">'; + echo 'There are the following potential problems:'; + echo make_list($warnings,"ul"); + echo '</div>'; + } elseif ($suggest_restart) { + if (SERVER_SHARED == find_server_type()) { + echo "<p>Please contact your server administrator about installing the ionCube Loader.</p>"; + } else { + if (selinux_is_enabled()) { + echo "<p>It appears that SELinux is enabled on your server. This might be solved by running the command <code>restorecon [full path to loader file]</code> as root. If that does not solve the problem then please follow the instructions at <a target=\"_blank\" href=\"http://www.cuteshift.com/57/install-ioncube-loader-while-selinux-enabled/\">http://www.cuteshift.com/57/install-ioncube-loader-while-selinux-enabled/</a> for installing the ionCube Loader when SELinux is enabled.</p>"; + } elseif (grsecurity_is_enabled()) { + echo "<p>It appears that grsecurity is enabled on your server. Please run the command, <code>execstack -c [full path to loader file]</code> and then restart your web server.</p>"; + } else { + $sysinfo = get_sysinfo(); + $ss = $sysinfo['SS']; + if (!$sysinfo['CGI_CLI'] || is_ms_windows()) { + echo "<p>Please check that the $ss web server software has been restarted.</p>"; + } + } + } + } + echo '<div>'; + echo $retry_message; + echo " You may wish to view the following for further help:"; + echo make_list(help_resources($errors),"ul"); + echo '<a href="' . $default . '">Click here to go back to the start of the Loader Wizard</a>.</div>'; +} + +function phpconfig_page() +{ + info_disabled_check(); + $sys = get_sysinfo(); + $download = get_request_parameter('download'); + $ini_file_name = ''; + if (!empty($download)) { + $ini_file_name = get_request_parameter('ininame'); + if (empty($ini_file_name)) { + $ini_file_name = ini_file_name(); + } else { + if (!preg_match('`^.*\.ini$`',$ini_file_name) || preg_match('`/`',$ini_file_name) || preg_match('`\\\`',$ini_file_name)) { + die("Illegal file name $ini_file_name"); + } + } + header('Content-Type: text/plain'); + header('Content-Disposition: attachment; filename=' . $ini_file_name); + } else { + header('Content-Type: text/plain'); + } + $exclude_original = get_request_parameter('newlinesonly'); + $prepend = get_request_parameter('prepend'); + $stype = get_request_parameter('stype'); + $server_type = find_server_type($stype); + if (!empty($exclude_original) || !empty($prepend)) { + $loader_dir = loader_install_dir($server_type); + $zend_lines = zend_extension_lines($loader_dir); + echo join(PHP_EOL,$zend_lines); + echo PHP_EOL; + } + if (empty($ini_file_name) || empty($sys['PHP_INI_DIR']) || ($sys['PHP_INI_BASENAME'] == $ini_file_name)) { + $original_ini_file = isset($sys['PHP_INI'])?$sys['PHP_INI']:''; + } else { + $original_ini_file = $sys['PHP_INI_DIR'] . DIRECTORY_SEPARATOR . $ini_file_name; + } + if (empty($exclude_original) && !empty($original_ini_file) && @file_exists($original_ini_file)) { + if (!empty($download)) { + @readfile($original_ini_file); + } else { + echo all_ini_contents(); + } + } +} + +function extra_page($check_access_to_info = true) +{ + if ($check_access_to_info) { + info_disabled_check(); + } + heading(); + $sys = get_sysinfo(); + $ini_loader = scan_inis_for_loader(); + $ini_loader_path = $ini_loader['location']; + $loader_path = find_loader(true); + $ldinf = get_loaderinfo(); + $self = get_self(); + echo "<h4>Additional Information</h4>"; + echo "<table>"; + $lines = array(); + if (is_string($loader_path)) { + $lines['Loader is at'] = $loader_path; + $loader_system = loader_system($loader_path); + if (!empty($loader_system)) { + $lines['Loader OS code'] = $loader_system['oscode']; + $lines['Loader architecture'] = $loader_system['arch']; + $lines['Loader word size'] = $loader_system['wordsize']; + $lines['Loader PHP version'] = $loader_system['php_version']; + $lines['Loader thread safety'] = $loader_system['thread_safe']?'Yes':'No'; + $lines['Loader compiler'] = $loader_system['compiler']; + $lines['Loader version'] = $loader_system['loader_version']; + $lines['File size is'] = filesize($loader_path) . " bytes."; + $lines['MD5 sum is'] = md5_file($loader_path); + } + $lines['Loader file'] = "<a href=\"$self?page=loaderbin\">Download loader file</a>"; + } else { + $lines['Loader file'] = "Loader cannot be found."; + } + $lines['Loader found in ini file'] = empty($ini_loader_path)?"No":"Yes"; + if (!empty($ini_loader_path) && (!is_string($loader_path) || $ini_loader_path != $loader_path)) { + $lines['Loader location found in ini file'] = $ini_loader_path; + $loader_system = loader_system($ini_loader_path); + if (!empty($loader_system)) { + $lines['Ini Loader OS code'] = $loader_system['oscode']; + $lines['Ini Loader architecture'] = $loader_system['arch']; + $lines['Ini Loader word size'] = $loader_system['wordsize']; + $lines['Ini Loader PHP version'] = $loader_system['php_version']; + $lines['Ini Loader thread safety'] = $loader_system['thread_safe']?'Yes':'No'; + $lines['Ini Loader compiler'] = $loader_system['compiler']; + $lines['Ini Loader version'] = $loader_system['loader_version']; + } + } + $lines["OS extra security"] = (selinux_is_enabled() || possibly_selinux())?"SELinux":(grsecurity_is_enabled()?"Grsecurity":"None"); + $lines['PHPRC is'] = $sys['PHPRC']; + $lines['INI DIR is'] = $sys['PHP_INI_DIR']; + $lines['Additional INI files'] = $sys['PHP_INI_ADDITIONAL']; + $stype = get_request_parameter('stype'); + $server_type = find_server_type($stype); + $lines['Server type is'] = server_type_string(); + $lines["PHP uname"] = $ldinf['uname']; + $lines['Server word size is'] = $ldinf['wordsize']; + $lines['Disabled functions'] = ini_get('disable_functions'); + $writeable_dirs = writeable_directories(); + $lines['Writeable loader locations'] = (empty($writeable_dirs))?"<em>None</em>":join(", ",$writeable_dirs); + if (!empty($_SESSION['hostprovider'])) { + $lines['Hosting provider'] = $_SESSION['hostprovider']; + $lines['Provider URL'] = $_SESSION['hosturl']; + } + foreach ($lines as $h => $i) { + $v = (empty($i))?'<em>EMPTY</em>':$i; + echo '<tr><th>'. $h . ':</th>' . '<td>' . $v . '</td></tr>'; + } + echo "</table>"; + footer(true); +} + +function loaderbin_page() +{ + info_disabled_check(); + $loader_path = find_loader(true); + if (is_string($loader_path)) { + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename='. basename($loader_path)); + @readfile($loader_path); + } +} + + + +function GoDaddy_root($html_root = '') +{ + if (empty($_SESSION['not_go_daddy']) && empty($_SESSION['godaddy_root'])) { + $godaddy_pattern = "[\\/]home[\\/]content[\\/][0-9a-z][\\/][0-9a-z][\\/][0-9a-z][\\/][0-9a-z]+[\\/]html"; + + if (empty($html_root)) { + $html_root = $_SERVER['DOCUMENT_ROOT']; + } + if (preg_match("@$godaddy_pattern@i",$html_root,$matches)) { + $_SESSION['godaddy_root'] = $matches[0]; + } else { + $_SESSION['not_go_daddy'] = 1; + $_SESSION['godaddy_root'] = ''; + } + } elseif (!empty($_SESSION['not_go_daddy'])) { + $_SESSION['godaddy_root'] = ''; + } + if (!empty($_SESSION['godaddy_root'])) { + $_SESSION['hostprovider'] = 'GoDaddy'; + $_SESSION['hosturl'] = 'www.godaddy.com'; + } + return $_SESSION['godaddy_root']; +} + +function GoDaddy_windows_instructions() +{ + $instr = "It appears that you are hosted on a Windows server at GoDaddy.<br/>"; + $instr .= "Please change to a Linux hosting plan at GoDaddy.<br />"; + $instr .= "If you <a href=\"http://help.godaddy.com/\">contact their support team</a> they should be able to switch you to a Linux server."; + + echo $instr; +} + +function GoDaddy_linux_instructions($html_dir) +{ + $base = get_base_address(); + $loader_name = get_loader_name(); + $zend_extension_line="<code>zend_extension = $html_dir/ioncube/$loader_name</code>"; + $php_ini_name = is_php_version_or_greater(5,0)?'php5.ini':'php.ini'; + $ini_path = $html_dir . '/' . $php_ini_name; + + $instr = array(); + $instr[] = 'In your html directory, ' . $html_dir . ', create a sub-directory called <b>ioncube</b>.'; + if (@file_exists($ini_path)) { + $instr[] = "Edit the $php_ini_name in your $html_dir and add the following line to the <b>top</b> of the file:<br>" . $zend_extension_line ; + } else { + $instr[] = "<a href=\"$base&amp;page=phpconfig&amp;ininame=$php_ini_name&amp;stype=s&amp;download=1&amp;prepend=1\">Save this $php_ini_name file</a> and upload it to your html directory, $html_dir"; + } + $instr[] = 'Download the <a target="_blank" href="' . IONCUBE_DOWNLOADS_SERVER . '"/ioncube_loaders_lin_x86.zip">Linux ionCube Loaders</a>.'; + $instr[] = 'Unzip the loaders and upload them into the ioncube directory you created previously.'; + $instr[] = 'The encoded files should now be working.'; + + echo '<div class=panel>'; + echo (make_list($instr)); + echo '</div>'; +} + +function GoDaddy_page() +{ + $base = get_base_address(); + + heading(); + + $inst_str = '<h4>GoDaddy Installation Instructions</h4>'; + $inst_str .= '<p>It appears that you are hosted with GoDaddy (<a target="_blank" href="http://www.godaddy.com/">www.godaddy.com</a>). '; + $inst_str .= "If that is <b>not</b> the case then please <a href=\"$base&amp;page=default&amp;host=ngd\">click here to go to the main page of this installation wizard</a>.</p>"; + $inst_str .= "<p>If you have already installed the loader then please <a href=\"$base&amp;page=loader_check\" onclick=\"showOverlay();\">click here to test the loader</a>.</p>"; + + echo $inst_str; + + if (is_ms_windows()) { + GoDaddy_windows_instructions(); + } else { + GoDaddy_linux_instructions($_SESSION['godaddy_root']); + } + + send_stats('gd_default'); + + footer(true); +} + + + +function get_request_parameter($param_name) +{ + static $request_array; + + if (!isset($request_array)) { + if (isset($_GET)) { + $request_array = $_GET; + } elseif (isset($HTTP_GET_VARS)) { + $request_array = $HTTP_GET_VARS; + } + } + + if (isset($request_array[$param_name])) { + $return_value = strip_tags($request_array[$param_name]); + } else { + $return_value = null; + } + return $return_value; +} + +function make_list($list_items,$list_type='ol') +{ + $html = ''; + if (!empty($list_items)) { + $html .= "<$list_type>"; + $html .= '<li>'; + $html .= join('</li><li>',$list_items); + $html .= '</li>'; + $html .= "</$list_type>"; + } + return $html; +} + +function make_archive_list($basename,$archives_list = array(),$download_server = IONCUBE_DOWNLOADS_SERVER) +{ + if (empty($archives_list)) { + $archives_list = array('tar.gz','tar.bz2','zip','ipf.zip'); + } + + foreach ($archives_list as $a) { + $link_text = ($a == 'ipf.zip')?'MS Windows installer':$a; + $ext_sep = ($a == 'ipf.zip')?'_':'.'; + $archive_list[] = "<a href=\"$download_server/$basename$ext_sep$a\">$link_text</a>"; + } + + return make_list($archive_list,"ul"); +} + +function error($m) +{ + die("<b>ERROR:</b> <span class=\"error\">$m</span><p>Please help us improve this script by <a href=\"". SUPPORT_SITE . "\">reporting this error</a> and including the URL to the script so that we can test it."); +} + + +function filter_server_input($server_var) +{ + $res = htmlspecialchars($_SERVER[$server_var], ENT_QUOTES, "UTF-8"); + return $res; +} + +function failsafe_get_self() +{ + $result = ''; + $sfn = filter_server_input('SCRIPT_FILENAME'); + $dr = $_SERVER['DOCUMENT_ROOT']; + if (!empty($sfn) && !empty($dr)) { + if ($dr == '/' || $dr == '\\') { + $result = $sfn; + } else { + $drpos = strpos($sfn,$dr); + if ($drpos === 0) { + $drlen = strlen($dr); + $result = substr($sfn,$drlen); + } + } + $result = str_replace('\\','/',$result); + } + if (empty($result)) { + $result = DEFAULT_SELF; + } + return $result; +} + +function get_self() +{ + $page = ''; + if (empty($_SERVER['PHP_SELF'])) { + if (empty($_SERVER['SCRIPT_NAME'])) { + if (empty($_SERVER['REQUEST_URI'])) { + $page = failsafe_get_self(); + } else { + $page = filter_server_input('REQUEST_URI'); + } + } else { + $page = filter_server_input('SCRIPT_NAME'); + } + } else { + $page = filter_server_input('PHP_SELF'); + } + return $page; +} + +function get_default_page() +{ + $godaddy_root = GoDaddy_root(); + if (empty($godaddy_root)) { + $page = 'default'; + } else { + $page = 'GoDaddy'; + } + return $page; +} + +function get_base_address() +{ + $self = get_self(); + $remote_timeout = (isset($_SESSION['timing_out']) && $_SESSION['timing_out'])?'timeout=1':'timeout=0'; + $using_ini = (isset($_SESSION['use_ini_method']) && $_SESSION['use_ini_method'])?'ini=1':'ini=0'; + return $self . '?' . $remote_timeout . '&' . $using_ini; +} + +function get_default_address($include_timeout = true) +{ + if ($include_timeout) { + $base = get_base_address(); + $base .= "&amp;"; + } else { + $base = get_self(); + $base .= "?"; + } + $page = get_default_page(); + + return $base . 'page=' . $page; +} + +function heading() +{ + $self = get_self(); + + echo <<<EOT + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "http://www.w3.org/TR/html4/loose.dtd"> + <html> + <head> + <title>ionCube Loader Wizard</title> + <link rel="stylesheet" type="text/css" href="$self?page=css"> + <script type="text/javascript"> + function showOverlay() + { + document.getElementById('overlay').style.display = 'block'; + return true; + } + + function hideOverlay() + { + document.getElementById('overlay').style.display = 'none'; + return true; + } + </script> + </head> + <body onload="hideOverlay()"> + <div id="overlay"> + <div id="inner_overlay">Checking server configuration<br>Please wait</div> + </div> + <div id="header"> + <img src="?page=logo" alt="ionCube logo"> + </div> + <div id="important"> + <h3 class="important">IMPORTANT: Ensure that This Script Is Removed When No Longer Required</h3> + </div> + <div id="main"> + <h2>ionCube Loader Wizard</h2> +EOT; +} + +function footer($update_info = null) +{ + $self = get_self(); + $base = get_base_address(); + $default = get_default_address(false); + $year = gmdate("Y"); + + echo "</div>"; + echo "<div id=\"footer\">" . + "Copyright ionCube Ltd. 2002-$year | " . + "Loader Wizard version " . script_version() . " "; + + if ($update_info === true) { + $update_info = check_for_wizard_update(false); + } + $loader_wizard_loc = LOADER_WIZARD_URL; + $wizard_version_string =<<<EOT + <script type="text/javascript"> + var xmlhttp; + function version_check() + { + var body = document.getElementsByTagName('body')[0]; + var ldel = document.getElementById('loading'); + if (!ldel) { + body.innerHTML += '<div id="loading"></div>'; + ldel = document.getElementById('loading'); + } + ldel.innerHTML = '<p>Retrieving Wizard version information<br>Please wait</p>'; + ldel.style.display = 'block'; + ldel.style.height = '300px'; + ldel.style.left = '200px'; + ldel.style.border = '4px #660000 solid'; + if (window.XMLHttpRequest) { + xmlhttp=new XMLHttpRequest(); + } else { + xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); + } + xmlhttp.onreadystatechange=function() + { + var loadedOkay = 0; + if (xmlhttp.readyState==4 && xmlhttp.status==200) + { + var wizardversion = xmlhttp.responseText; + var msg; + clearTimeout(xmlHttpTimeout); + buttons = ''; + if (wizardversion == '1') { + msg = 'You have the current version of the<br>ionCube Loader Wizard'; + } else if (wizardversion != '0') { + msg = 'A new version, ' + wizardversion + ', of the loader wizard is available'; + buttons = '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; window.open(\'$loader_wizard_loc\'); return false">Get new version</button> &nbsp;'; + } else { + msg = 'Wizard version information cannot be obtained from the<br>ionCube server'; + } + buttons += '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; return false">Close this box</button>'; + ldel.innerHTML = '<p>' + msg + '<br>' + buttons + '</p>'; + } + } + xmlhttp.open("GET",'$self?page=wizardversion&wizard_only=1&clear_info=1',true); + xmlhttp.send(); + var xmlHttpTimeout=setTimeout(ajaxTimeout,7000); + } + function ajaxTimeout(){ + xmlhttp.abort(); + msg = 'Wizard version information cannot be obtained from the<br>ionCube server'; + button = '<button onclick="document.getElementById(\'loading\').style.display=\'none\'; return false">Close this box</button>'; + var ldel = document.getElementById('loading'); + ldel.innerHTML = '<p>' + msg + '<br>' + button + '</p>'; + } + </script> +EOT; + + $wizard_version_string .= '('; + if ($update_info === null) { + $wizard_version_string .= '<a target="_blank" href="' . $loader_wizard_loc . '" onclick="version_check();return false;">check for new version</a>'; + } else if ($update_info !== false) { + $wizard_version_string .= '<a href="' . LOADERS_PAGE .'" target="_blank">download version ' . $update_info . '</a>'; + } else { + $wizard_version_string .= "current"; + } + $wizard_version_string .= ')'; + echo $wizard_version_string; + + $server_type_code = server_type_code(); + + if (!info_should_be_disabled(true)) { + echo " | <a href=\"$base&amp;page=phpinfo\" target=\"phpinfo\">phpinfo</a>"; + echo " | <a href=\"$base&amp;page=phpconfig\" target=\"phpconfig\">config</a>"; + echo " | <a href=\"$base&amp;page=extra&amp;stype=$server_type_code\" target=\"extra\">additional</a>"; + } + + echo " | <a href=\"$default\" onclick=\"showOverlay();\">wizard start</a>"; + echo " | <a href=\"$base&amp;page=loader_check\" onclick=\"showOverlay();\">loader test</a>"; + echo ' | <a href="' . LOADERS_PAGE . '" target="loaders">loaders</a>'; + + echo "</div>\n"; + echo "\n</body></html>\n"; +} + +function css_page() +{ + header('Content-Type: text/css'); + echo <<<EOT + body { + font-family: verdana, helvetica, arial, sans-serif; + font-size: 10pt; + line-height: 150%; + margin: 0px; + min-height: 400px; + position: relative; + } + + code { + color: #c00080; + } + + li { + margin-top: 10px; + } + #overlay { + display: block; + z-index: 100; + position: absolute; + top: 0; + left: 0; + padding: 0; + margin: 0; + width: 100%; + height: 100%; + background-color: white; + } + #inner_overlay { + display: block; + z-index: 100; + position: absolute; + font-size: 200%; + color: #660000; + top: 50%; + left: 25%; + width: 460px; + height: 460px; + line-height: 200%; + text-align: center; + vertical-align: middle; + } + + #loading { + display: block; + position: absolute; + top: 33%; + left: 25%; + margin: auto; + height: 320px; + width: 460px; + padding: 4px; + color: #660000; + background-color: white; + z-index: 100; + } + + #loading p { + position: absolute; + margin-top: 10px; + text-align: center; + vertical-align: middle; + padding-left: 40px; + padding-right: 30px; + font-size: 200%; + line-height: 200%; + } + + #loading p span#status{ + font-size: 60%; + line-height: 120%; + } + #loading p#noscript { + font-size: 120%; + line-height: 120%; + position: absolute; + text-align: left; + padding-top: 10px; + bottom: 0; + } + #loading p#noscript a { + text-align: center; + } + + #loading button { + margin-top: 20px; + line-height: 100%; + padding-top: 4px; + padding-bottom: 4px; + } + + + h4 { + margin-bottom: 0; + padding-bottom: 4px; + } + + p,#main div { + max-width: 1000px; + width: 75%; + } + + #hostinginfo { + margin-top: 10px; + margin-left: 20px; + } + #hostinginfo table { + font-size: 1.00em; + } + #hostinginfo table td { + padding-right: 4px; + } + #hostinginfo input { + margin-top: 6px; + } + + #hostinginfo label { + margin-left: 6px; + } + + th { + text-align: left; + } + + #important { + margin-top: 12px; + } + h3.important { + margin: 0; + border: 0; + border-top: 1px solid #660000; + border-bottom: 1px solid #660000; + padding: 1ex 0 1ex 0; + background-color: #770000; + text-align: center; + color: #ffffff; + width: 100%; + } + + .alert { + margin: 2ex 0; + border: 1px solid #660000; + padding: 1ex 1em; + background-color: #ffeeee; + color: #660000; + width: 75%; + } + + .warning { + margin: 2ex 0; + border: 1px solid #FFBF00; + padding: 1ex 1em; + background-color: #FDF5E6; + color: #000000; + width: 75%; + } + + .success { + margin: 2ex 0; + border: 1px solid #006600; + padding: 1ex 1em; + background-color: #EEFFEE; + color: #000000; + width: 75%; + } + + .error { + color: #FF0000; + } + + .panel { + border: 1px solid #c0c0c0; + background-color: #f0f0f0; + width: 75%; + padding: 1ex 1em; + } + + #header { + background: #3f0f0f; + } + + #footer { + border-top: 1px solid #404040; + margin-top: 20px; + padding-top: 10px; + padding-left: 20px; + font-size: 75%; + text-align: left; + } + + #main { + margin: 20px; + } + +EOT; +} + +function logo_page() +{ +$img_encoded = 'iVBORw0KGgoAAAANSUhEUgAAAU4AAABQCAMAAABBJmwEAAADAFBMVEVBLA49Dg44Dg5FDg46DAxLIBIwCgoyCgpBDQ00FAtLLhA0DAwuCwuBYhwtEwltTxhmSBY2CgoSBARNOBErCQkqCgo4Cws4DAwsCgo0JAtFMQ9VPxNJMxBlQhYNAwMmCAh6XBs+Ig5VOhNhQhVmTRYsCAgXBQUgBwcwDAwVBARRNRIhBwdbMhUtHQlRORIcBgZFKRB4WxpGGhFXQBMWBQVVLBRUNRJoThdwVRkeBgYxHgtBFBBcQRR0VRk5FQwkCAgdEQYiBwdNNBEuCQk+Fw1fRxVPMBJXOxMnCgphRxUQAwMjEQc8Kw0aCgVADg5fQhUlFgg/HQ5ZPBRaQBRyVRleQRVCDQ05Gw1DIg4aBgYTCQRrThcjBwc6HA1YPxM2Dg45IAwZBQU+Dg4uDAw3JQwqGAlFJBAqDgpZQBMKAgIxGQsuDwpFKA8xDwtHMxB9XBslCwlIKA8wCQljSBYYBgYeCAhTPhIqHQlcNxRDJw4OAwM0GAw8JQ0WBgY8Gw0cBQUOCAM3Gw0GAQHv6+F/XRxDDw9JDw/OAAD0AADtAADNAAD+AAD/AADPAADRAAD4AADTAADXAAD8AAD9AADg18PAr4eRcy339fBHDg46Dg5GDg7eAAA9DAyokVrQw6XYzbRIDw91URqZfTwpCAjqAADmAADaAADcAAD1AADZAADrAADxAADsAADWAADSAADQAADMAAD2AADyAADwAADuAADoAADkAADlAADdAADYAADUAADVAADbAADvAADnAAD3AADpAAD5AADzAABDDg64pXjIuZahh0s1Cws7Dg4/DQ3n4dI8Dw8+DQ02DQ1qRBg8DAywm2lgOBYyDAxwSxk0DQ0oCAhrRRhgORaEYx3jAADfAADhAADiAADgAAA0CgpmPxc1CgqZmZk3DQ00Cwt6VxtQJhNCDg4+DAw3DAwzDAxlPhcqCQlGDw82DAwoCQlHDw8/DAw8DQ1BDw8yDQ06Dw5EDQ09DQ1sThc1Dg5dPBQ0HwtLOBCJaR5KDw////89Dw9KsskKAAAAAWJLR0QAiAUdSAAAF3VJREFUeNrtnAl4E9e1gIk0jBQiAhWScIFa0KRaEKAANkZAaowehShhaVrUmKg0SkJTB5K+UNI2TlvSyPXbd83IdrXY8tv3fd+1WcK2hFfeBvlssAMOJKTLey+Vxz333hntsi2Pg/P1y/kSjXTnLuf+99xz77kzZtnMh7KIsmypFfjJkg9xLqp8iHNR5UOciyof4lxUuRs4a7sup9OXB6+XuHWpJd1VW7LQ9cGWS7PWCkX782vvT+Mi6EZhk/D78sjynNJ83oIay+giGucvipdsZV1uD8d5AtH+omb6Uy7O3VVSg8GAi907m+YtLi6dX3uac7XwNwqa7Pe5PR5/bn183lzZy7rK6PLBwgn9Yxg/x/kKx77WxyWY8JZytII75oMzW3sOzvwmt/g4V8TvSuW0n49z+cjlmzM7gsWIFwnnL4iX/I6PjviK7bDLzQVHS9OcucQG+2dmkxycfO35OHOavJbg2KsjebM7H+eI33MZbDjIzu5fPjg4+V52If+0d7QljTxZfxqSwAFuuUbcHNhI+toW/kJc446rLemWqzuQW0O5bu7lky7l4ySfBTizWbLshKZxEvGf8Mkrgn9ncvSnR6BJlAMltcwPdBmcvyFeCnFe9nguu9wp8E9djIsDT3YpyCEJjoQT4ObYS9dZv4dLRPkLLrSFjbhgnrK1LS63D3Ix/eDhUJKvvwAnqr0IJ0rkrTOFl6VaoWmMk+SHTx9WxId+5+bwpxKcK9U/0w9JrjI+aYlwjg6muECLy8UlIjDF3UyAc7Es4wEPx/q5QJjxuNjBAOdn3EH+ggrtYBNcALK6u1pcHs4d8HDhLTuCHj8AjS7Pm+yo9kHAkUYiTHaciLJsiXq4QBRMLtP0jjycQaxIEP3Oy8EFoEnfljBSQhTOXxcveTgZUNGDEEWuXQ1zka7RQfi8ijvt45jBLTfhM80lro121fIXdO9qhAsPjg5GOAZ+hbsGo3Br5ublkatRzj+StxSh2q+nOUHS2USswc2om4MiW7JN5+FswYpgxLk5ON8gjIgbCLOjg/OiebdwcpzLH7wJX9gdaP3Zke3FiJ9jwiBYbX+0q5a/ZKcsrLjuHF+4fIT1hbHBZnCS2qFKjx+JB5fkE4nUdoGvYHKaLsZJvuXnIN8Yzp0S5zsXVfAy0QJzDWvNYxBwQReJuLvYAHyyteSSs7agSwYnuFaSO3ey49pxvpGREaFmkijIFpYD351puhzO/Bz8kgW+wBWcF8+7hTP7BZnI8pm9Qi/AVbLY43XVXh8MRmBKkosAZe/M8jzrhPzIy+XjJO0ULUUZWc4nZ5sm/6OVqsg6c3KQtL032fA8t6R3H+cow/nBPTG876xNcf5rV0evdtVeahkZxZzwhfedzOBol58L5++GrgYrw9kfbRkBx+vuyjaN8sKCHx3sChOc7MhyMrFzc5A6B0EHd97wVIrz38RLOZx7+cUzwe4QrDURYSJoesOKjsjxF7Syw+IKPwR2vHNAK3slOPey4EbRGl2bbRrlhZXJE3BzHnARfs7tZ3NWdj4HqTMQgACL7BEWiPNXxEs5nDO1/GZyC/kNO70Eiq+DLPTYxfTzF3zvEtqDuhiyMJHytawbNoOJxLVKcKIW3BDAZ5vGeZFTTPjcrpblUKkH4yzIgT8jeCd6fWYecjdwCmc/whch1OF/7x29hk9/rg9eTreM7uUv5B6KkOAHnxN/1nZBiHJNCJtyas89UcomYp6oBXxalGmaREA3UfzVBd+g0ss3cVp+Dvx5lY+TFo7zX8TLvJr/SZMyOP9MvCx1z5ZEyuD8XfGy1D1bEimD82fFy1L3bEnkQ5yLKmVw/rt4WeqeLYmUwfnn4mWpe7YkUgbnH4iXpe5ZWbl4sae9vb3n4sW7h/MvxMtSUytLs13Sh0TS/j7wLIPzn8RLbg+IvB9siKm1E3ObTwtAc8igqFIYht4PnmVw/qV4yelyu0TSNyaR9Cyy+qTivqGhGzduDA2BvQGgOZu4KBn6GD4Q/NiQ5K7h/Dnxku20pG/AoDAstjlc7JGMDUHFVWr14cOH1WowuIF5zOCePgN5CJJ+pq99Ie1OgywlTkmf4YnV6S/vemFI0rOYMPtuGNRnNm1etQob26pVmx86o5h7yNr7qnicasNY5Q6IoCwLtAzOPxQvQlU9YwOPRwOciznxwqJNL2TxNxTqTatZH+MmT0fcbibFrv7inE20D6l5nA1VC9BnegYbZ4U4f1+8ZPV/gfUg/Zldir7vLwpPMM0hg3rzRl+Ay5dA9NN9c5inZOAwj9OsNVTsfgAjKluWZxmcvylehK5LbnwqjPV3bVR/T7IY6ztanBWbVvtcXJGEPzXXDM7iPK9XV2ye0xyHrBM+K8L5r+Ili3MXwz/9rlcsxnQHmgPqQ2yAKyHsc1U3Zh+yLE6l+fZA5ThnsHFWiPOvxEtG/6FPR8lM/IrlcOXTq5hmD6IZ9fAAXX4m5QNh/C7UxMuHDWPt88PZfF5rGKtwceRy/qsA5z+LF6Gq9j7FA+jRuCe6p7Fe0SfaPGHjqD7k42n6o9t3vvjsVpAXd24PMuFl5rlmQBZndU29oa9SnGiiw8d0ZTh/S7zkdP9bx3wMw66xnTdV7q1K0FQIthkI7jze3NxsQwLX/S8uq2msVw/ME2eTEUa3Ypxous9MV4jzb8RLpv9gnrc3HdhwpFl53pSzNxHiw4LgEFJBcBrJUXAftuGbyE6BYw5uRSiVSmMNEiV80Znr1QaIjgqOOHJOPQpwSnrKB6glFOR4ohVO9r8WLxmlkK+rN39TqazJzkQSHw4hQcFhpu8X+QMKSXtPj5AjL3iElU29mqxC4VMngabSeL7RbH5Zr9e//DJcTYcVA0OFRxy5px45OJUmteG+Pl6H9oIQGGkyxmuYoyBHHGcZmuVw/sdsMt+ZIfRlzKCutzSeP2/WHzbgbSHswlHgCeEhEoUBFOY7Qw4oULg41ifkwMGj0NmePsVm8joms766GcE0m+oPk4pwsFlFGwwFRxx5px65OC1adVaHsdwdAdJwCAewBQpyXPZz/jj/ezapEKdw5nDCdPsZHGfi7lWdWXHsYUhduerxz6sVAAx35qLkezjzAxDjQ47VkOPh1SvOKG7wyzUyzo14v+muO1ndDAZv0iLeA2BEAwMA0vC9AUPhEUfeqUcOTluj/uzjOERFOuSeKRANX921eiPcfPjYQ+qc6JVs4yvD+V+zSWU4s2cO9bCNB6XAmQ5Ufe4YG/Yn0ILvjkQ3bkadQePf3vdFbHu+TdrnTrDhAORIBMLsITUxayBj2ESMM/pRoPlNcJUwFGMSXsb6xr5wQ1F4xJF36pHF+Xr1ho2pCA5RQYdVZ6sGBGQwoZCGQSaARi7hTyEF57UnKYPzf2aTynBmzxzqq+5DTkjSZ1AfCvpzNt+u8Kqzasyzve9V/Iq3770NLJO570kd+xzhCZUdwyUDB5uqbd+0aKsGsNvjBRaxsaGiI468Uw+JQcC5f30qJ65yB7Nj1l6ooQsUeGau8HUWnP85m1SIM3PmYFLfAGSg6+ePhT1cnrjBAFEECnMZZ/atieaFkP59zyn+r30GTdWVuGjqo03NNWYtnoQXSzeXOeLIS+rL4GT9eSp4wvsOK77Qwzv7EwUa+vd9ez575jI4vzubVIYz/8xBArq+eiy/I7gz0QNowyhkDkcLeDP7biNjy8z1dFO1srG+aqjoTLrEEUde0hAt/HAX6gA8DTCkaCdyghwzcAm3O5Ed0L7vz4nzOyXlu+JFqOrom4JtnK+nJffcs1ZxIkIIMlFw9EGGmKGLfUVBPX0PnzmCX8ZmIHiM8Fbqe6Vq7Ol378jIAYC7rsl2vr7q1j1HCzXPb+7pdwuTbo3zPyLYywRBhSjDj110c9Xa3nePSmieJsPurqvbHSTqMh9X3/rhu9+ZXcrg/FvxUtw/pUV1i5LIdqXwzwC75jRswvev4yed+0mtjLrnFsmM/gSQ2b5hz549a3Ju3+mV0KuwUTHrmpTmqXGqiGZ+c2/e825h0rhMnfmTBGjhUdj9H1/Dn6e4NqIBv3PfS/iQweM7dQRCA9v+9Riuh31OMfb0wnD+jngp7p+t8fZ9b8ZeYF1kLdkD8QxS9/h6Aix8YCpG3RI664muOVJTY4TbB0lfg/er77szphBwVhtNVYRWOZyouTtHC5Nk9JSAM7z+iFGnQ21sPcirsG54fOxWFWnDt82IRdm8Hs8IZpt2/M4c5rlsuqT8o3gRqurw0kJnnJ94k/oIma0udg+KCRudTqfxOAHs2uiQURo+M5daYzPCTadOuZU/fT6gjXmT/G3f12zOqVi8o7VI87zmKHtbYVIsZuVbYL5ardRduGC+YAYVtmMVErsdtCb2BHbPkVPGGp3TbLaYdUewBp6VJtorbZ2eTcrg/G3xUty/Zmf3ldg5sgsPr7Mpa5wWh3ZY2+BcR1yV7ylVLMbvGt0PNtmMZoupocFi3IlNJ/CInqYoAedWm8UKsGbDCc1p5G2FSW8IOF3sazZjox40uI1U4Hezzw/TNAlig4+iIwCTdnjY0bgtQvQb1ky0zcqzDM7fEy8l+yeTkcNP13YIEJ0mrVUWG6e1F4htRLY5aBnf2fBjTTadXquy0qqGb6TI6gP2uNYq4FQC3FBnsebzxsmse91WY9Gq6FwVmA3622dYvJLvbIbpgTSwduvf85GbDbLejoXg/DvxUqp/wzKazPXItmqbztQt0yTjvUmZ9uMRMtXMU7SKZGZfg7VGa41RVMz6Kjl+Thu1slgWZ5mZN2+c0eOvkxa88TiocIAhHt1pWhHmx7NZCTi7Vaph/RGWDKhZRUk7p2eRMjh/TbyUxElbiZtPPdusNA/LKLlU2hFK0q+QxT6tq1d1Z0JAncOq8con4jGtsC6b6HEr2cWHH1M6ZJOicKZfb6oxWWNeu7SjI+Sln/IRYkbzITy20QcfrKt78slVSJ6sS5ObOq3GPutsv8s4z1kfxtvi4H6bzkFT8o7O1tbOo7F7yR8PR0/rh4eFA4pm81RsMtTWGaJUwkJiscoyGyUlTDyROJvN3Ve8obZWUGEiRqY4NKJ7koTx+cLPj3qZvGMBOP9IvJTqn9YqoGmyAa24tBN0aw1RvEn69pi1gik2gS3itUaaFM40bGaVjF8nAgfhtkicTTa9lZJjY2uVUlNCFuNn+TioWGB+lJ4Sc+H8B/EyO85qpYXmV2boi0rAqXMIOKuN2nHMS5oLY5z3va7tNsu5H86Os3ounEaHzMu7wowKoFiaK4/TQidndZ5lcP69eJnDOnFfMI4cnFt1DfVCt3TDMTyx8mCMX3mC39EcN1upOXDqeJzS0jhhwISda+u8cLq2Ky2KktuJuXD+qngpg5MsJcH9NY7xOI8zRH2S+E72pM7kyOIsbVukAv9OgDUx60YpizNpLYlTaCFHhcTuaht/u1i2rzPC7sz+wcEJSxG/sn8U5jLv1dvksZf4lb26Ri/gbNaVmqoxDY2fMkME/ahj/J2OEjgn6QJcYHpz4ewUVHDXVdt2Y9/JvvZ6UzMJg0ks3FxdjZfPhVjnH4uXkjhp+nG8DYmsUdZfiXeQiTZJk72J+8Hqmox1ll5IYhQfAnKR9bAJLGEpHb0yYr/gOQiuTrtGWLZzcbInYbITnK1QiOjFrKtWPhIgA/56tQ1CekEgdjfq9MPj3oX4zl8WLyVxymTECmAp0ZOVubXNrhHeCVvXrGuYHafGS/H2zfm2mc4lQ5057hN2PK3TbXEZyRB+jOBCrM6minGi+2/gFpAKKhL7QvBqJBv6yI+amo0X9FmxWPSOYVoj/wDhhJidRxdecwEZV2trW4iiD5HnGLAZdTrmwDn5TuwsMU9PdFs97FylbZ2daOfY1tYBIUFbJ7iOzF6qAVa7Nqlco/pfdzFO94MwokkpKgqBxCFyCLeyWql7nhzPsfttZscUxJggKixW+oqmN7SQbfyfiJeSON/QyATft6eBpo5KQ3KKXhHkV5dqZXbfWQan3H6H3scfP/s+85w1lozL7aGQ3S6P9072ykMdHXYN/4pZcOsFlcYb92qsh1JcZu+UwQkj6hyOTU6E7KDCWX5+rGk2mvVkHx/5qs2srZJdQSJD8sablBca6FwAzl8SLyVxxijNt8gqHjj4nvacBoXkK9gEv/eBlWh4Lpw/mNDcyxfgGPbAvQpZTIMkJpP91Ne//q5dGqKEV8wOntarZOP0mcz7Yfk4wbx/ulu2ltKMW1d81k3G+KRN16DlQ97wztMOFX0lFothnBcp7zsTMBcWcgTyfuHUeJOyE8R4Auy2+4dVU587FCRwmPXVtkaHangOnB3SSdkKln/i4WKCDx/a9QTIS7se2BhkmK8nJ6S9MhLIcv7tG57atGnzRvTswiPgvMLjxOf9Gw98u1t179kTggpr0PxQDfOvmfjZfa+cUaGp/q2X/v/L7PJJ+1vgV6YXgPNnxEtpnHG55oWvEG09DH5QEyGm4995stlo6bZ2z4ETBfGKA2wmEExE0BMlXwq/kJh4WDMZkmtWpATa6E1F/NgpUogz5cEZoul0MOXneHM+aasxqWTnNvHVe/wp8s++RFMRV2CQmnh7dph3H6fcLr+yiS2Oiv07j1crnfVW4YCuPM7Wt+2aqocKnuoKwkoouZ3iA/useKJMIU5ftLBsgt3aDMYp02joFdFiDT0rY5M/6GxdEM6fFy8ZnL2yDI4p2GdIk/SKz0YKdGV2HrcpdXrVlRidm7mtuHzbdCes1d3Pf6nUu9xc6qWPeOXx2BP5A+aKrvFlcZ4jOL/qK3iSzj5ms+lMVk1vnFKsKPFyc/TT+ARsiXHCziXzpAZwdLxtp6z3n/LlPuX2B08dsSlrzMMyDXUlN3NbcXm0L5fGYyrLhu2pwi57/MF7afAnXvCuOQPGsBv2YJzB/c6pNzTfx3t639d+lPueh9v3peM2G1LBO4G2Vk894nMX1v3JWK+0bUE4/1S8ZHDaKQHHhSlhsjZ8oy7KoH8BFr2CFPzSaSXYpllLU/HJtXmZS5Sfxjw1qgbdswfZFMO/VuB2R5joyn3PO1Sx3gnY+dz/mSCu3xUIs6eOGAlO3x6E8zr+zp5sOr4ziIu73Ey07lkboqlFZ7BvI576b9QFmQCu3OMOML6V+16dQtvcBeFcRIG5Sd5fO2U0o6dl051vySmro/H0i3UrIXX3I8seRS+8Oi1aMKyJUDw/c4nyKPyRvqOhtWbjkWfX1e3GN+vqtm04raxxNkyNT4ak4D4b7t+A6t9+cNkRY41Od4qvQaVJJnF1p9B7to9uQMW310FR/K6t1qpBZ7BouKwO56MvHsSVr6x7ZMN7SEEFurvEOFvbpN4rKofTaHTiA2EUIh+l6GG906gk7w4bITQ2m7qBprSjozBzifKQ1ik9moREs04JdeC3uREPANKgik1KO2DAzgFtWzN+BVTnvGAxX3BC2O1sUFDvyKFk/QUIw1GqzojON4y4rB4GlEQ9ZLgsRENUd02N7gOCE3iEcNdBXVkSn8e0dkzc+YhVqzc78elCo9li0qpkVBw8U3HmEuURz7ZQfK3sE1qTGWEy4iFpbLQ0kKgaGqBkiDZKbzSjp7/dWofFYhqGSMwuvxOzak2QONU97LBgJZyQCVQQYkgYronkG0TDGnQO4nSa9fVT6NnWkuOcbn0rlIxVTWmnaH50AZo0TsXoKW29CcSh7bbKNEk59vNFmUsm4SrsvWvHaZW2voGcUTSQeiZDHRDDt030vgn3HEL1sRhknVIh83v7rQlvTKGa4hOhPIh2WEXH0AkA2afj4eI1hKpNfN1zROx3Byeyr16IAmMZdTCMOIR3NG21Wmm4k8xEw0WZSybhHkvlvRSk40qgGlQPFbejelADci+6x1cfj6OsMY0Xbnd22CfRd6o33pvk89DjqKhAM0dDmVA5yhBa4EZpkXF2doTi3qQ3Rx0Ewy7vTVJIkr3yUKYnJTMXJeEeQx0hedxLCeLtldulJAvg6Ajx9SfjUL1UKo/39hJinahp9F0qzeRBRfMC8jwN+Qxz0Zz+MVlFohLr6XtqAAAAR3RFWHRTb2Z0d2FyZQBAKCMpSW1hZ2VNYWdpY2sgNS4xLjAgMDAvMDEvMDEgUTo4IGNyaXN0eUBteXN0aWMuZXMuZHVwb250LmNvbYZbzesAAAAqdEVYdFNpZ25hdHVyZQAzOWY4N2UxZWUxYTI1ZjhjZmYwZjkzYjAwMGY3OWE5NLBiqVIAAAAASUVORK5CYII='; + + header('Content-Type: image/png'); + header('Cache-Control: public'); + echo base64_decode($img_encoded); +} diff --git a/naprawa_20210312.php b/naprawa_20210312.php new file mode 100644 index 0000000..beaf7b7 --- /dev/null +++ b/naprawa_20210312.php @@ -0,0 +1,224 @@ +<?php session_start(); +error_reporting(E_ALL); + +function sqlGetResAsArray($query) +{ + $res=null; + $res = array(); + + if(!$results = mysqli_query($GLOBALS['dbconn'],$query)){ + echo mysqli_error($GLOBALS['dbconn']); + return false; + } + for($i=0; $row=mysqli_fetch_assoc($results); $i++) + $res[$i]=$row; + + return $res; +} +// ========================================================== // +function sqlQuery($query) +{ + mysqli_query($GLOBALS['dbconn'],$query); +} +// ========================================================== // +function getFloatValue($inParam) +{ + unset($outParam); + if (!empty($inParam) || strlen($inParam)>0) + { + $inParam = str_replace(array('\'', '\"'), array('', ''), $inParam); + $inParam = (float)str_replace(',', '.', $inParam); + $outParam = round($inParam, 2); + } + else + $outParam = 0; + + return $outParam; +} +// ========================================================== // +function toDate($inParam) +{ + unset($outParam); + $outParam = date_format($inParam,"Y-m-d H:i:s"); + + return $outParam; +} +// ========================================================== // + + +// ========================================================== // + +date_default_timezone_set('Europe/Warsaw'); +$GLOBALS['dbconn'] = mysqli_connect("localhost", "spm_local", "ff8efe59e7265fe9680b0c325e44cb53") or die ('cannot connect to db'); +mysqli_select_db($GLOBALS['dbconn'],"softspm_naprawa"); +sqlQuery("SET NAMES utf8"); +sqlQuery("SET CHARACTER_SET utf8_general_ci"); + + +//studnie +//$paramName = "Q"; +//$tb_pName = "RHD_Q_VAL"; + +//$paramName = "Hs"; +//$tb_pName = "RHD_HD_VAL"; + + +unset($p_belchatowArray); +$p_Q = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','Q') ORDER BY PARAM,NAME"); +$p_Hd = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','Hd') ORDER BY PARAM,NAME"); + +$p_P1 = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','p1') ORDER BY PARAM,NAME"); +$p_P2 = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','p2') ORDER BY PARAM,NAME"); + +$p_I2 = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','I2') ORDER BY PARAM,NAME"); +$p_U12 = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','U12') ORDER BY PARAM,NAME"); +$p_Pe = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','P') ORDER BY PARAM,NAME"); +$p_cos = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','cos') ORDER BY PARAM,NAME"); +$p_pp = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','pp') ORDER BY PARAM,NAME"); +$p_diagnostyka = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','diagnostyka') ORDER BY PARAM,NAME"); +$p_HH = sqlGetResAsArray("SELECT * FROM s_szczercow WHERE PARAM IN ('','HH') ORDER BY PARAM,NAME"); + + + + + + + + + + + + +//foreach ($p_belchatowArray as $tb) +for ($z=0; $z<count($p_Q); $z++) +{ + unset($pDetailsBel); + $pDetailsBel = sqlGetResAsArray("SELECT * FROM softspm.seg_wells,softspm.seg_dev_resources where WLL_ID=DRS_DEV_ID AND DRS_DEV_TYPE=12 AND WLL_NAME='".$p_Q[$z]['NAME']."'"); + + echo("SELECT * FROM softspm.seg_wells,softspm.seg_dev_resources where WLL_ID=DRS_DEV_ID AND DRS_DEV_TYPE=12 AND WLL_NAME='".$p_Q[$z]['NAME']."'"); + echo'<br/>'; + + if($pDetailsBel[0]['DRS_ID']>0) + { + echo"DRS: ".$pDetailsBel[0]['DRS_ID']."<br/>"; + + unset($lpArray); + $lpArray = sqlGetResAsArray("SELECT * FROM softspm.seg_dev_resources_det WHERE DRD_ID=(SELECT MAX(DRD_ID) FROM softspm.seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=240 AND DRD_DRS_ID=".$pDetailsBel[0]['DRS_ID'].")"); + + $lastVAL = 0; + + for($i=1; $i<89; $i++) + { + if ($i<10) $fied = "TIME_0".$i; + else $fied = "TIME_".$i; + + //echo"Data: ".$p_belchatowArray[0][$fied]." >>> Wynik: ".getFloatValue($tb[$fied]); + + //if ( $lastVAL!=getFloatValue($tb[$fied]) && getFloatValue($tb[$fied])>0 ) + if (getFloatValue($p_Q[$z][$fied])>0 && getFloatValue($p_I2[$z][$fied])>0 && getFloatValue($p_U12[$z][$fied])>10) + { + sqlQuery("INSERT INTO softspm_naprawa.his_data_p_szczercow SET RHD_DRS_ID=".$pDetailsBel[0]['DRS_ID']." + ,RHD_DATE='".$p_Q[0][$fied]."' + ,RHD_Q_VAL='".(60* getFloatValue($p_Q[$z][$fied]))."' + ,RHD_HD_VAL='".getFloatValue($p_Hd[$z][$fied])."' + ,RHD_P1_VAL='".getFloatValue($p_P1[$z][$fied])."' + ,RHD_P2_VAL='".getFloatValue($p_P2[$z][$fied])."' + ,RHD_I_VAL='".getFloatValue($p_I2[$z][$fied])."' + ,RHD_U_VAL='".getFloatValue($p_U12[$z][$fied])."' + ,RHD_PE_VAL='".getFloatValue($p_Pe[$z][$fied])."' + ,RHD_COS_VAL='".getFloatValue($p_cos[$z][$fied])."' + ,RHD_PP_VAL='".getFloatValue($p_pp[$z][$fied])."' + ,RHD_DGN_VAL='".getFloatValue($p_diagnostyka[$z][$fied])."' + ,RHD_HH_VAL='".(getFloatValue($lpArray[0]['DRD_VALUE']) - getFloatValue($p_Hd[$z][$fied]))."' + ,RHD_AUDIT_CD='".$p_Q[0][$fied]."'"); + + + +/* + sqlQuery("UPDATE softspm_naprawa.his_data_p_belchatow SET ".$tb_pName."='".getFloatValue($tb[$fied])."' + WHERE RHD_DRS_ID=".$pDetailsBel[0]['DRS_ID']." + AND RHD_AUDIT_CD='".$p_belchatowArray[0][$fied]."'"); +*/ +// $lastVAL=getFloatValue($tb[$fied]); + + echo"<br/>"; + + } + + + } + + //echo "<br/><br/>"; + + + } + + + + +} + + + +// piezometry +// DIC_ID = 210 - poziom wody +// DIC_ID = 1500 - AUTO; 1501 - MANUAL + +// dla bełchatowa + +/* +unset($p_belchatowArray); +$p_belchatowArray = sqlGetResAsArray("SELECT * FROM p_szczercow"); +foreach ($p_belchatowArray as $tb) +{ + + + unset($pDetailsBel); + $pDetailsBel = sqlGetResAsArray("SELECT * FROM softspm.seg_reservoirs_piezometers,softspm.seg_dev_resources WHERE SRP_ID=DRS_DEV_ID AND DRS_DEV_TYPE=SRP_TYPE_DIC_ID AND SRP_NAME='".$tb['NAME']."'"); + + echo "Z bazy naprawczej: ".$tb['NAME'].", =>".$pDetailsBel[0]['SRP_NAME']." , ID= ".$pDetailsBel[0]['DRS_ID']." oarz typ: ".$pDetailsBel[0]['SRP_MCF_ID']."<br/>"; + + if($pDetailsBel[0]['DRS_ID']>0 && $pDetailsBel[0]['SRP_MCF_ID']==1500) + { + $lastHST = 0; + + for($i=1; $i<88; $i++) + { + if ($i<10) $fied = "TIME_0".$i; + else $fied = "TIME_".$i; + + echo"Data: ".$p_belchatowArray[0][$fied]." >>> Wynik: ".getFloatValue($tb[$fied]); + + if ( $lastHST!=getFloatValue($tb[$fied]) ) + { + sqlQuery("INSERT INTO softspm_naprawa.resources_det_p_szczercow SET DRD_DRS_ID=".$pDetailsBel[0]['DRS_ID']." + ,DRD_RESOURCES_DETAIL='210' + ,DRD_VALUE='".getFloatValue($tb[$fied])."' + ,DRD_EXPORT_SEGAP='1' + ,DRD_AUDIT_USR='naprawa po backupie' + ,DRD_AUDIT_DATE='".$p_belchatowArray[0][$fied]."'"); + + echo" --- DODAJE"; + $lastHST=getFloatValue($tb[$fied]); + } + + + echo"<br/>"; + } + + echo "<br/><br/>"; + + } + + + +} +*/ + + + +mysqli_close($GLOBALS['dbconn']); + + + +?> \ No newline at end of file diff --git a/new_debina_historia_onoff.php b/new_debina_historia_onoff.php new file mode 100644 index 0000000..0043974 --- /dev/null +++ b/new_debina_historia_onoff.php @@ -0,0 +1,72 @@ +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +require_once('./polynomial/PolynomialRegression.php' ); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + +<?php +//studnie +echo "On Off<br/>"; + +mysql_query("delete from seg_wells_manual_work_syndis where SLA_DATETIME<='2016-10-18 23:59:59' and SLA_DRS_ID in (select distinct DRS_ID from a_ademb_wyniki_onoff_02)"); +mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_DATE<='2016-10-18 23:59:59' and DRD_DRS_ID in (select distinct DRS_ID from a_ademb_wyniki_onoff_02)"); +//mysql_query("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_DATE<='2016-10-18 23:59:59' and DRD_DRS_ID in (select distinct DRS_ID from a_ademb_wyniki_onoff_02)"); + +unset($wellArray); + +$id=0; +$stat = 'OFF'; +$last='2016-10-01 00:00:00'; + +$wellArray = sqlGetResAsArray("select * from a_ademb_wyniki_onoff_02 where data_pom<='2016-10-18 23:59:59' order by WLL_ID,data_pom"); +for($i=0; $i<count($wellArray); $i++) +{ + if ($id!=$wellArray[$i]['DRS_ID']) + { + $stat = 'OFF'; + $id=$wellArray[$i]['DRS_ID']; + $last='2016-10-01 00:00:00'; + } + + + + +// if ($stat!=$wellArray[$i]['ONOFF'] && ((strtotime($wellArray[$i]['data_pom']) - strtotime($last))/3600)>1) + if ($stat!=$wellArray[$i]['ONOFF'] && $last!=$wellArray[$i]['data_pom']) + { + // wstawia do tabeli do obliczeń czasu pracy + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$wellArray[$i]['WLL_ID'].",SLA_DRS_ID=".$wellArray[$i]['DRS_ID'].",SLA_NAME='".$wellArray[$i]['WLL_NAME']."',SLA_WORK_STATUS='".$wellArray[$i]['ONOFF']."',SLA_DATETIME='".$wellArray[$i]['data_pom']."',SLA_AUDIT_CD=now()"); + + // wstawia do tabeli details + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$wellArray[$i]['ONOFF']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$wellArray[$i]['data_pom']."'"); + + + echo "Studnia: ".$wellArray[$i]['WLL_NAME']." zmieniła status na: ".$wellArray[$i]['ONOFF'].", data: ".$wellArray[$i]['data_pom']."<br/>"; + $stat=$wellArray[$i]['ONOFF']; + $last = $wellArray[$i]['data_pom']; + + } + + +} + + + + + +?> + + + + +<?php +mysql_close($polacz); + +?> \ No newline at end of file diff --git a/new_debina_historia_pom.php b/new_debina_historia_pom.php new file mode 100644 index 0000000..31bcd41 --- /dev/null +++ b/new_debina_historia_pom.php @@ -0,0 +1,63 @@ +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +require_once('./polynomial/PolynomialRegression.php' ); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + +<?php +//studnie +echo "On Off<br/>"; + +mysql_query("delete from rep_his_data_everyday where RHD_DATE>='2016-10-01 00:00:00' and RHD_DATE<='2016-10-23 23:59:59' and RHD_DRS_ID in (select distinct DRS_ID from a_ademb_wyniki_pom_01)"); + +unset($wellArray); + +$wellArray = sqlGetResAsArray("select * from a_ademb_wyniki_pom_04 order by data_pom"); +for($i=0; $i<count($wellArray); $i++) +{ + if ($wellArray[$i]['HD']>0 && $wellArray[$i]['Q']>0) + { + unset($czas); + $czas = getGlobalWorkingTimeInDate($wellArray[$i]['DRS_ID'], $wellArray[$i]['data_pom']); + $czas = round($czas/3600,2); + + $wellArray[$i]['Q'] = floatval($wellArray[$i]['Q']*60); + + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$wellArray[$i]['DRS_ID'].",RHD_DATE='".$wellArray[$i]['data_pom']."',RHD_HD_VAL=".$wellArray[$i]['HD'].",RHD_Q_VAL=".$wellArray[$i]['Q'].",RHD_VM3_VAL=".$wellArray[$i]['V3MIN'].",RHD_WORK_TIME_VAL=".$czas.",RHD_AUDIT_CD=now()"); + echo("INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$wellArray[$i]['DRS_ID'].",RHD_DATE='".$wellArray[$i]['data_pom']."',RHD_HD_VAL=".$wellArray[$i]['HD'].",RHD_Q_VAL=".$wellArray[$i]['Q'].",RHD_VM3_VAL=".$wellArray[$i]['V3MIN'].",RHD_WORK_TIME_VAL=".$czas.",RHD_AUDIT_CD=now()"); + echo"<br>"; + } +} + +$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday,seg_dev_resources where DRS_ID=RHD_DRS_ID and DRS_DEPARTMENT='Dębina' and RHD_DATE>='206-0-0 00:00:00'"); +for($i=0; $i<count($wellArray); $i++) +{ + if ($wellArray[$i]['RHD_Q_VAL']>0 || $wellArray[$i]['RHD_I_VAL']>0) + { + unset($czas); + $czas = getGlobalWorkingTimeInDate($wellArray[$i]['RHD_DRS_ID'], $wellArray[$i]['RHD_DATE']); + $czas = round($czas/3600,2); + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo"<br>"; + } +} + + +?> + + + + +<?php +mysql_close($polacz); + +?> \ No newline at end of file diff --git a/new_glebokosc.php b/new_glebokosc.php new file mode 100644 index 0000000..424ffab --- /dev/null +++ b/new_glebokosc.php @@ -0,0 +1,115 @@ +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + +<?php +//studnie +echo "STUDNIE:<br/>"; + +unset($wellArray); +$wellArray = sqlGetResAsArray("select DRS_ID,WLL_NAME from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12"); +for($i=0; $i<count($wellArray); $i++) +{ + /* + unset($detArray); + $detArray = sqlGetResAsArray("select * from stp_studnie where stp_studnie_stud='".$wellArray[$i]['WLL_NAME']."'"); + + if(getFloatValue($detArray[0]['stp_studnie_zs'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=110 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_zs'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_zasyp'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=130 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=130,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_zasyp'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_d'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=100 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=100,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_d'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_dr'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=235 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=235,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_dr'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_zp'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=240 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=240,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_zp'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + + + + //mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=110 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".$actGlebokosc."',DRD_DESCRIPTION='Głębokość',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + + echo "Studnia: ".$wellArray[$i]['WLL_NAME']."<br/>"; + + */ + + +} + +echo "<br/><br/><br/>"; + + +//piezometry +echo "PIEZOMETRY:<br/>"; + +unset($wellArray); +$wellArray = sqlGetResAsArray("select DRS_ID,SRP_NAME from seg_reservoirs_piezometers,seg_dev_resources where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601"); +for($i=0; $i<count($wellArray); $i++) +{ + + unset($detArray); + $detArray = sqlGetResAsArray("select * from stp_studnie where stp_studnie_stud='".$wellArray[$i]['SRP_NAME']."'"); + + if(getFloatValue($detArray[0]['stp_studnie_zs'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=110 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_zs'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_zasyp'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=130 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=130,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_zasyp'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_d'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=100 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=100,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_d'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_dr'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=235 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=235,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_dr'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + if(getFloatValue($detArray[0]['stp_studnie_zp'])>0) + { + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=240 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=240,DRD_VALUE='".getFloatValue($detArray[0]['stp_studnie_zp'])."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + } + + echo "Piezometr: ".$wellArray[$i]['SRP_NAME']."<br/>"; +} + + + +?> + + + + +<?php +mysql_close($polacz); + +?> \ No newline at end of file diff --git a/new_power_inne.php b/new_power_inne.php new file mode 100644 index 0000000..9475b06 --- /dev/null +++ b/new_power_inne.php @@ -0,0 +1,110 @@ +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +require_once('./polynomial/PolynomialRegression.php' ); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + +<?php +//studnie +echo "Pierwsze podejście<br/>"; +unset($wellArray); +$wellArray = sqlGetResAsArray("select WLL_ID,WLL_NAME,DRS_ID,RHD_ID,RHD_DATE,RHD_Q_VAL,RHD_PE_VAL from seg_wells,seg_dev_resources left join rep_his_data_everyday on RHD_DRS_ID=DRS_ID where WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID=20 and DRS_STATUS_DIC_ID=3 and RHD_Q_VAL>0 and (RHD_PE_VAL is null or RHD_PE_VAL<=0)"); +for($i=0; $i<count($wellArray); $i++) +{ + //$wellArray[$i]['_______'] + // + unset($agregatArray); + $agregatArray = sqlGetResAsArray("select * from seg_wells_exchanged where WLE_WLL_ID=".$wellArray[$i]['WLL_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."' and (WLE_DATE_TO>'".$wellArray[$i]['RHD_DATE']."' or WLE_DATE_TO is null) limit 1"); + + $testID=0; + $testID = (int) sqlStringValue("select max(stp_protokoly_nr) TID from stp_protokoly where stp_protokoly_pomp='".$agregatArray[0]['WLE_PUMP_NAME']."' and stp_protokoly_pomp_nr='".$agregatArray[0]['WLE_PUMP_NO']."' and stp_protokoly_sil='".$agregatArray[0]['WLE_ENG_NAME']."' and stp_protokoly_sil_nr='".$agregatArray[0]['WLE_ENG_NO']."'", "TID"); + + unset($testArray); + if ($testID>0) + { + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_test_details where TSD_TST_ID=".$testID." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $testArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"], + 'n' => (float) $r["TSD_VAL_18"] + ); + } + + $peVal=0; + $peVal = (float) getPolynomialPe($testArray,($wellArray[$i]['RHD_Q_VAL'])); //moc ze stacji + echo "Studnia [".$wellArray[$i]['RHD_ID']."]: ".$wellArray[$i]['WLL_NAME'].", nr ptóby: ".$testID.", Moc: ".getFloatValue($peVal).", Data pomiaru: ".$wellArray[$i]['RHD_DATE']."<br>"; + + + if ($peVal>0 && $wellArray[$i]['RHD_ID']>0) + { + mysql_query("UPDATE rep_his_data_everyday SET RHD_PE_VAL=".getFloatValue($peVal)." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + } + + } + +} + +echo "<br/><br/>"; +echo "Drugie podejście<br/>"; +unset($wellArray); +$wellArray = sqlGetResAsArray("select WLL_ID,WLL_NAME,DRS_ID,RHD_ID,RHD_DATE,RHD_Q_VAL,RHD_PE_VAL from seg_wells,seg_dev_resources left join rep_his_data_everyday on RHD_DRS_ID=DRS_ID where WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID=20 and DRS_STATUS_DIC_ID=3 and RHD_Q_VAL>0 and (RHD_PE_VAL is null or RHD_PE_VAL<=0)"); +for($i=0; $i<count($wellArray); $i++) +{ + //$wellArray[$i]['_______'] + // + unset($agregatArray); + $agregatArray = sqlGetResAsArray("select * from seg_wells_exchanged where WLE_WLL_ID=".$wellArray[$i]['WLL_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."' and (WLE_DATE_TO>'".$wellArray[$i]['RHD_DATE']."' or WLE_DATE_TO is null) limit 1"); + + $testID=0; + $testID = (int) sqlStringValue("select max(stp_protokoly_nr) TID from stp_protokoly where stp_protokoly_pomp='".$agregatArray[0]['WLE_PUMP_NAME']."' and stp_protokoly_pomp_nr='".$agregatArray[0]['WLE_PUMP_NO']."' and stp_protokoly_sil='".$agregatArray[0]['WLE_ENG_NAME']."' and stp_protokoly_sil_nr='".$agregatArray[0]['WLE_ENG_NO']."'", "TID"); + + unset($testArray); + if ($testID>0) + { + $wynik = mysql_query("select round(REPLACE(stp_protdata_q,',','.'),2) TSD_VAL_04,round(REPLACE(stp_protdata_h,',','.'),2) TSD_VAL_08,round(REPLACE(stp_protdata_p1,',','.'),2) TSD_VAL_14,round(REPLACE(stp_protdata_pp,',','.')/REPLACE(stp_protdata_p1,',','.'),2) TSD_VAL_18 from stp_protdata where stp_protdata_nr_prot=".$testID." order by stp_protdata_q"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $testArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"], + 'n' => (float) $r["TSD_VAL_18"] + ); + } + + $peVal=0; + $peVal = (float) getPolynomialPe($testArray,($wellArray[$i]['RHD_Q_VAL'])); //moc ze stacji + echo "Studnia [".$wellArray[$i]['RHD_ID']."]: ".$wellArray[$i]['WLL_NAME'].", nr ptóby: ".$testID.", Moc: ".getFloatValue($peVal).", Data pomiaru: ".$wellArray[$i]['RHD_DATE']."<br>"; + + if ($peVal>0 && $wellArray[$i]['RHD_ID']>0) + { + mysql_query("UPDATE rep_his_data_everyday SET RHD_PE_VAL=".getFloatValue($peVal)." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + } + + } + +} + + + + + +?> + + + + +<?php +mysql_close($polacz); + +?> \ No newline at end of file diff --git a/new_sciecia.php b/new_sciecia.php new file mode 100644 index 0000000..b1105b3 --- /dev/null +++ b/new_sciecia.php @@ -0,0 +1,98 @@ +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + +<?php +//studnie +echo "STUDNIE:<br/>"; +unset($wellArray); +$wellArray = sqlGetResAsArray("select DRS_ID,WLL_NAME from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12"); +for($i=0; $i<count($wellArray); $i++) +{ + //select OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=2839 + unset($hcArray); + $hcArray = sqlGetResAsArray("select OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=".$wellArray[$i]['DRS_ID']); + $rzDIV = 0; + + //Sprawdza, czy rzędna się zmianiła + $rzDIV = (float) round(($hcArray[0]['OHC_RZEDNA_TEREN'] - $hcArray[0]['OHC_RZEDNA_TERENU_ACT']),2); + if ($rzDIV>0) + { + echo"Aktualizauje studnie: ".$wellArray[$i]['WLL_NAME']."<br/>"; + $newGleb = (float) ($hcArray[0]['OHC_GLEB_OSTAT'] - $rzDIV); + // wstawia głębokość + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=110 and DRD_DRS_ID=".$wellArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".$newGleb."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + + // aktualizacja kolumn + //update seg_object_columns set COL_DEPTH=(COL_DEPTH-10) where COL_DRS_ID=2839 + mysql_query("update seg_object_columns set COL_DEPTH=(COL_DEPTH-".$rzDIV.") where COL_DRS_ID=".$wellArray[$i]['DRS_ID']); + + // aktualizacja filtrów + //update seg_object_column_filters set where CLF_FROM=(CLF_FROM-10),CLF_TO=(CLF_TO-10) CLF_DRS_ID=3034 + mysql_query("update seg_object_column_filters set CLF_FROM=(CLF_FROM-".$rzDIV."),CLF_TO=(CLF_TO-".$rzDIV.") where CLF_DRS_ID=".$wellArray[$i]['DRS_ID']); + + //aktualizacja obsybki + //update seg_object_column_fillings set CLO_FROM=(CLO_FROM-10), CLO_TO=(CLO_TO-10) where CLO_DRS_ID=6744 + mysql_query("update seg_object_column_fillings set CLO_FROM=(CLO_FROM-".$rzDIV."), CLO_TO=(CLO_TO-".$rzDIV.") where CLO_DRS_ID=".$wellArray[$i]['DRS_ID']); + } + +} + + +echo "<br/><br/><br/>"; + + +//piezometry +echo "PIEZOMETRY:<br/>"; + +unset($piezoArray); +$piezoArray = sqlGetResAsArray("select DRS_ID,SRP_NAME from seg_reservoirs_piezometers,seg_dev_resources where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601"); +for($i=0; $i<count($piezoArray); $i++) +{ + //select OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=2839 + unset($hcArray); + $hcArray = sqlGetResAsArray("select OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=".$piezoArray[$i]['DRS_ID']); + $rzDIV = 0; + + //Sprawdza, czy rzędna się zmianiła + $rzDIV = (float) round(($hcArray[0]['OHC_RZEDNA_TEREN'] - $hcArray[0]['OHC_RZEDNA_TERENU_ACT']),2); + if ($rzDIV>0) + { + echo"Aktualizauje studnie: ".$piezoArray[$i]['SRP_NAME']."<br/>"; + $newGleb = (float) ($hcArray[0]['OHC_GLEB_OSTAT'] - $rzDIV); + + // wstawia głębokość + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=609 and DRD_DRS_ID=".$piezoArray[$i]['DRS_ID']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$piezoArray[$i]['DRS_ID'].",DRD_RESOURCES_DETAIL=609,DRD_VALUE='".$newGleb."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='reczna aktualizacja',DRD_AUDIT_DATE=now()"); + + // aktualizacja kolumn + //update seg_object_columns set COL_DEPTH=(COL_DEPTH-10) where COL_DRS_ID=2839 + mysql_query("update seg_object_columns set COL_DEPTH=(COL_DEPTH-".$rzDIV.") where COL_DRS_ID=".$piezoArray[$i]['DRS_ID']); + + // aktualizacja filtrów + //update seg_object_column_filters set where CLF_FROM=(CLF_FROM-10),CLF_TO=(CLF_TO-10) CLF_DRS_ID=3034 + mysql_query("update seg_object_column_filters set CLF_FROM=(CLF_FROM-".$rzDIV."),CLF_TO=(CLF_TO-".$rzDIV.") where CLF_DRS_ID=".$piezoArray[$i]['DRS_ID']); + + //aktualizacja obsybki + //update seg_object_column_fillings set CLO_FROM=(CLO_FROM-10), CLO_TO=(CLO_TO-10) where CLO_DRS_ID=6744 + mysql_query("update seg_object_column_fillings set CLO_FROM=(CLO_FROM-".$rzDIV."), CLO_TO=(CLO_TO-".$rzDIV.") where CLO_DRS_ID=".$piezoArray[$i]['DRS_ID']); + } +} + +?> + + + + +<?php +mysql_close($polacz); + +?> \ No newline at end of file diff --git a/pChart/_pCache.class b/pChart/_pCache.class new file mode 100644 index 0000000..2bcd6b0 --- /dev/null +++ b/pChart/_pCache.class @@ -0,0 +1,119 @@ +<?php + /* + pCache - Faster renderding using data cache + Copyright (C) 2008 Jean-Damien POGOLOTTI + Version 1.1.2 last updated on 06/17/08 + + http://pchart.sourceforge.net + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 1,2,3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + Class initialisation : + pCache($CacheFolder="Cache/") + Cache management : + IsInCache($Data) + GetFromCache($ID,$Data) + WriteToCache($ID,$Data,$Picture) + DeleteFromCache($ID,$Data) + ClearCache() + Inner functions : + GetHash($ID,$Data) + */ + + /* pCache class definition */ + class pCache + { + var $HashKey = ""; + var $CacheFolder = "Cache/"; + + /* Create the pCache object */ + function pCache($CacheFolder="Cache/") + { + $this->CacheFolder = $CacheFolder; + } + + /* This function is clearing the cache folder */ + function ClearCache() + { + if ($handle = opendir($this->CacheFolder)) + { + while (false !== ($file = readdir($handle))) + { + if ( $file != "." && $file != ".." ) + unlink($this->CacheFolder.$file); + } + closedir($handle); + } + } + + /* This function is checking if we have an offline version of this chart */ + function IsInCache($ID,$Data,$Hash="") + { + if ( $Hash == "" ) + $Hash = $this->GetHash($ID,$Data); + + if ( file_exists($this->CacheFolder.$Hash) ) + return(TRUE); + else + return(FALSE); + } + + /* This function is making a copy of drawn chart in the cache folder */ + function WriteToCache($ID,$Data,$Picture) + { + $Hash = $this->GetHash($ID,$Data); + $FileName = $this->CacheFolder.$Hash; + + imagepng($Picture->Picture,$FileName); + } + + /* This function is removing any cached copy of this chart */ + function DeleteFromCache($ID,$Data) + { + $Hash = $this->GetHash($ID,$Data); + $FileName = $this->CacheFolder.$Hash; + + if ( file_exists($FileName ) ) + unlink($FileName); + } + + /* This function is retrieving the cached picture if applicable */ + function GetFromCache($ID,$Data) + { + $Hash = $this->GetHash($ID,$Data); + if ( $this->IsInCache("","",$Hash ) ) + { + $FileName = $this->CacheFolder.$Hash; + + header('Content-type: image/png'); + @readfile($FileName); + exit(); + } + } + + /* This function is building the graph unique hash key */ + function GetHash($ID,$Data) + { + $mKey = "$ID"; + foreach($Data as $key => $Values) + { + $tKey = ""; + foreach($Values as $Serie => $Value) + $tKey = $tKey.$Serie.$Value; + $mKey = $mKey.md5($tKey); + } + return(md5($mKey)); + } + } +?> \ No newline at end of file diff --git a/pChart/_pChart.class b/pChart/_pChart.class new file mode 100644 index 0000000..c407b7e --- /dev/null +++ b/pChart/_pChart.class @@ -0,0 +1,3489 @@ +<?php + /* + pChart - a PHP class to build charts! + Copyright (C) 2008 Jean-Damien POGOLOTTI + Version 1.27d last updated on 09/30/08 + + http://pchart.sourceforge.net + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 1,2,3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + Class initialisation : + pChart($XSize,$YSize) + Draw methods : + drawBackground($R,$G,$B) + drawRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B) + drawFilledRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B,$DrawBorder=TRUE,$Alpha=100) + drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$R,$G,$B) + drawFilledRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$R,$G,$B) + drawCircle($Xc,$Yc,$Height,$R,$G,$B,$Width=0) + drawFilledCircle($Xc,$Yc,$Height,$R,$G,$B,$Width=0) + drawEllipse($Xc,$Yc,$Height,$Width,$R,$G,$B) + drawFilledEllipse($Xc,$Yc,$Height,$Width,$R,$G,$B) + drawLine($X1,$Y1,$X2,$Y2,$R,$G,$B,$GraphFunction=FALSE) + drawDottedLine($X1,$Y1,$X2,$Y2,$DotSize,$R,$G,$B) + drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B) + drawFromPNG($FileName,$X,$Y,$Alpha=100) + drawFromGIF($FileName,$X,$Y,$Alpha=100) + drawFromJPG($FileName,$X,$Y,$Alpha=100) + Graph setup methods : + addBorder($Width=3,$R=0,$G=0,$B=0) + clearScale() + clearShadow() + createColorGradientPalette($R1,$G1,$B1,$R2,$G2,$B2,$Shades) + drawGraphArea($R,$G,$B,$Stripe=FALSE) + drawScale($Data,$DataDescription,$ScaleMode,$R,$G,$B,$DrawTicks=TRUE,$Angle=0,$Decimals=1,$WithMargin=FALSE,$SkipLabels=1,$RightScale=FALSE) + drawRightScale($Data,$DataDescription,$ScaleMode,$R,$G,$B,$DrawTicks=TRUE,$Angle=0,$Decimals=1,$WithMargin=FALSE,$SkipLabels=1) + drawXYScale($Data,$DataDescription,$YSerieName,$XSerieName,$R,$G,$B,$WithMargin=0,$Angle=0,$Decimals=1) + drawGrid($LineWidth,$Mosaic=TRUE,$R=220,$G=220,$B=220,$Alpha=100) + drawLegend($XPos,$YPos,$DataDescription,$R,$G,$B,$Rs=-1,$Gs=-1,$Bs=-1,$Rt=0,$Gt=0,$Bt=0,$Border=FALSE) + drawPieLegend($XPos,$YPos,$Data,$DataDescription,$R,$G,$B) + drawTitle($XPos,$YPos,$Value,$R,$G,$B,$XPos2=-1,$YPos2=-1,$Shadow=FALSE) + drawTreshold($Value,$R,$G,$B,$ShowLabel=FALSE,$ShowOnRight=FALSE,$TickWidth=4,$FreeText=NULL) + drawArea($Data,$Serie1,$Serie2,$R,$G,$B,$Alpha = 50) + drawRadarAxis($Data,$DataDescription,$Mosaic=TRUE,$BorderOffset=10,$A_R=60,$A_G=60,$A_B=60,$S_R=200,$S_G=200,$S_B=200,$MaxValue=-1) + drawGraphAreaGradient($R,$G,$B,$Decay,$Target=TARGET_GRAPHAREA) + drawTextBox($X1,$Y1,$X2,$Y2,$Text,$Angle=0,$R=255,$G=255,$B=255,$Align=ALIGN_LEFT,$Shadow=TRUE,$BgR=-1,$BgG=-1,$BgB=-1,$Alpha=100) + getLegendBoxSize($DataDescription) + loadColorPalette($FileName,$Delimiter=",") + reportWarnings($Interface="CLI") + setGraphArea($X1,$Y1,$X2,$Y2) + setLabel($Data,$DataDescription,$SerieName,$ValueName,$Caption,$R=210,$G=210,$B=210) + setColorPalette($ID,$R,$G,$B) + setCurrency($Currency) + setDateFormat($Format) + setFontProperties($FontName,$FontSize) + setLineStyle($Width=1,$DotSize=0) + setFixedScale($VMin,$VMax,$Divisions=5,$VXMin=0,$VXMin=0,$XDivisions=5) + setShadowProperties($XDistance=1,$YDistance=1,$R=60,$G=60,$B=60,$Alpha) + writeValues($Data,$DataDescription,$Series) + Graphs methods : + drawPlotGraph($Data,$DataDescription,$BigRadius=5,$SmallRadius=2,$R2=-1,$G2=-1,$B2=-1,$Shadow=FALSE) + drawXYPlotGraph($Data,$DataDescription,$YSerieName,$XSerieName,$PaletteID=0,$BigRadius=5,$SmallRadius=2,$R2=-1,$G2=-1,$B2=-1) + drawLineGraph($Data,$DataDescription,$SerieName="") + drawXYGraph($Data,$DataDescription,$YSerieName,$XSerieName,$PaletteID=0) + drawFilledLineGraph($Data,$DataDescription,$Alpha=100,$AroundZero=FALSE) + drawCubicCurve($Data,$DataDescription,$Accuracy=.1,$SerieName="") + drawFilledCubicCurve($Data,$DataDescription,$Accuracy=.1,$Alpha=100,$AroundZero=FALSE) + drawOverlayBarGraph($Data,$DataDescription,$Alpha=50) + drawBarGraph($Data,$DataDescription,$Shadow=FALSE) + drawStackedBarGraph($Data,$DataDescription,$Alpha=50,$Contiguous=FALSE) + drawLimitsGraph($Data,$DataDescription,$R=0,$G=0,$B=0) + drawRadar($Data,$DataDescription,$BorderOffset=10,$MaxValue=-1) + drawFilledRadar($Data,$DataDescription,$Alpha=50,$BorderOffset=10,$MaxValue=-1) + drawBasicPieGraph($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$R=255,$G=255,$B=255,$Decimals=0) + drawFlatPieGraph($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$SpliceDistance=0,$Decimals = 0) + drawFlatPieGraphWithShadow($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$SpliceDistance=0,$Decimals = 0) + drawPieGraph($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$EnhanceColors=TRUE,$Skew=60,$SpliceHeight=20,$SpliceDistance=0,$Decimals=0) + Other methods : + setImageMap($Mode=TRUE,$GraphID="MyGraph") + getImageMap($MapName,$Flush=TRUE) + Render($FileName) + Stroke() + */ + + /* Declare some script wide constants */ + define("SCALE_NORMAL",1); + define("SCALE_ADDALL",2); + define("SCALE_START0",3); + define("SCALE_ADDALLSTART0",4); + define("PIE_PERCENTAGE", 1); + define("PIE_LABELS",2); + define("PIE_NOLABEL",3); + define("PIE_PERCENTAGE_LABEL", 4); + define("TARGET_GRAPHAREA",1); + define("TARGET_BACKGROUND",2); + define("ALIGN_TOP_LEFT",1); + define("ALIGN_TOP_CENTER",2); + define("ALIGN_TOP_RIGHT",3); + define("ALIGN_LEFT",4); + define("ALIGN_CENTER",5); + define("ALIGN_RIGHT",6); + define("ALIGN_BOTTOM_LEFT",7); + define("ALIGN_BOTTOM_CENTER",8); + define("ALIGN_BOTTOM_RIGHT",9); + + /* pChart class definition */ + class pChart + { + /* Palettes definition */ + var $Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46), + "1"=>array("R"=>224,"G"=>100,"B"=>46), + "2"=>array("R"=>224,"G"=>214,"B"=>46), + "3"=>array("R"=>46,"G"=>151,"B"=>224), + "4"=>array("R"=>176,"G"=>46,"B"=>224), + "5"=>array("R"=>224,"G"=>46,"B"=>117), + "6"=>array("R"=>92,"G"=>224,"B"=>46), + "7"=>array("R"=>224,"G"=>176,"B"=>46)); + + /* Some static vars used in the class */ + var $XSize = NULL; + var $YSize = NULL; + var $Picture = NULL; + var $ImageMap = NULL; + + /* Error management */ + var $ErrorReporting = FALSE; + var $ErrorInterface = "CLI"; + var $Errors = NULL; + var $ErrorFontName = "Fonts/pf_arma_five.ttf"; + var $ErrorFontSize = 6; + + /* vars related to the graphing area */ + var $GArea_X1 = NULL; + var $GArea_Y1 = NULL; + var $GArea_X2 = NULL; + var $GArea_Y2 = NULL; + var $GAreaXOffset = NULL; + var $VMax = NULL; + var $VMin = NULL; + var $VXMax = NULL; + var $VXMin = NULL; + var $Divisions = NULL; + var $XDivisions = NULL; + var $DivisionHeight = NULL; + var $XDivisionHeight = NULL; + var $DivisionCount = NULL; + var $XDivisionCount = NULL; + var $DivisionRatio = NULL; + var $XDivisionRatio = NULL; + var $DivisionWidth = NULL; + var $DataCount = NULL; + var $Currency = "\$"; + + /* Text format related vars */ + var $FontName = NULL; + var $FontSize = NULL; + var $DateFormat = "d/m/Y"; + + /* Lines format related vars */ + var $LineWidth = 1; + var $LineDotSize = 0; + + /* Layer related vars */ + var $Layers = NULL; + + /* Set antialias quality : 0 is maximum, 100 minimum*/ + var $AntialiasQuality = 0; + + /* Shadow settings */ + var $ShadowActive = FALSE; + var $ShadowXDistance = 1; + var $ShadowYDistance = 1; + var $ShadowRColor = 60; + var $ShadowGColor = 60; + var $ShadowBColor = 60; + var $ShadowAlpha = 50; + var $ShadowBlur = 0; + + /* Image Map settings */ + var $BuildMap = FALSE; + var $MapFunction = NULL; + var $tmpFolder = "tmp/"; + var $MapID = NULL; + + /* This function create the background picture */ + function pChart($XSize,$YSize) + { + $this->XSize = $XSize; + $this->YSize = $YSize; + $this->Picture = imagecreatetruecolor($XSize,$YSize); + + $C_White =$this->AllocateColor($this->Picture,255,255,255); + imagefilledrectangle($this->Picture,0,0,$XSize,$YSize,$C_White); + imagecolortransparent($this->Picture,$C_White); + + $this->setFontProperties("tahoma.ttf",8); + } + + /* Set if warnings should be reported */ + function reportWarnings($Interface="CLI") + { + $this->ErrorReporting = TRUE; + $this->ErrorInterface = $Interface; + } + + /* Set the font properties */ + function setFontProperties($FontName,$FontSize) + { + $this->FontName = $FontName; + $this->FontSize = $FontSize; + } + + /* Set the shadow properties */ + function setShadowProperties($XDistance=1,$YDistance=1,$R=60,$G=60,$B=60,$Alpha=50,$Blur=0) + { + $this->ShadowActive = TRUE; + $this->ShadowXDistance = $XDistance; + $this->ShadowYDistance = $YDistance; + $this->ShadowRColor = $R; + $this->ShadowGColor = $G; + $this->ShadowBColor = $B; + $this->ShadowAlpha = $Alpha; + $this->ShadowBlur = $Blur; + } + + /* Remove shadow option */ + function clearShadow() + { + $this->ShadowActive = FALSE; + } + + /* Set Palette color */ + function setColorPalette($ID,$R,$G,$B) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $this->Palette[$ID]["R"] = $R; + $this->Palette[$ID]["G"] = $G; + $this->Palette[$ID]["B"] = $B; + } + + /* Create a color palette shading from one color to another */ + function createColorGradientPalette($R1,$G1,$B1,$R2,$G2,$B2,$Shades) + { + $RFactor = ($R2-$R1)/$Shades; + $GFactor = ($G2-$G1)/$Shades; + $BFactor = ($B2-$B1)/$Shades; + + for($i=0;$i<=$Shades-1;$i++) + { + $this->Palette[$i]["R"] = $R1+$RFactor*$i; + $this->Palette[$i]["G"] = $G1+$GFactor*$i; + $this->Palette[$i]["B"] = $B1+$BFactor*$i; + } + } + + /* Load Color Palette from file */ + function loadColorPalette($FileName,$Delimiter=",") + { + $handle = @fopen($FileName,"r"); + $ColorID = 0; + if ($handle) + { + while (!feof($handle)) + { + $buffer = fgets($handle, 4096); + $buffer = str_replace(chr(10),"",$buffer); + $buffer = str_replace(chr(13),"",$buffer); + $Values = split($Delimiter,$buffer); + if ( count($Values) == 3 ) + { + $this->Palette[$ColorID]["R"] = $Values[0]; + $this->Palette[$ColorID]["G"] = $Values[1]; + $this->Palette[$ColorID]["B"] = $Values[2]; + $ColorID++; + } + } + } + } + + /* Set line style */ + function setLineStyle($Width=1,$DotSize=0) + { + $this->LineWidth = $Width; + $this->LineDotSize = $DotSize; + } + + /* Set currency symbol */ + function setCurrency($Currency) + { + $this->Currency = $Currency; + } + + /* Set the graph area location */ + function setGraphArea($X1,$Y1,$X2,$Y2) + { + $this->GArea_X1 = $X1; + $this->GArea_Y1 = $Y1; + $this->GArea_X2 = $X2; + $this->GArea_Y2 = $Y2; + } + + /* Prepare the graph area */ + function drawGraphArea($R,$G,$B,$Stripe=FALSE) + { + $this->drawFilledRectangle($this->GArea_X1,$this->GArea_Y1,$this->GArea_X2,$this->GArea_Y2,$R,$G,$B,FALSE); + $this->drawRectangle($this->GArea_X1,$this->GArea_Y1,$this->GArea_X2,$this->GArea_Y2,$R-40,$G-40,$B-40); + + if ( $Stripe ) + { + $R2 = $R-15; if ( $R2 < 0 ) { $R2 = 0; } + $G2 = $R-15; if ( $G2 < 0 ) { $G2 = 0; } + $B2 = $R-15; if ( $B2 < 0 ) { $B2 = 0; } + + $LineColor =$this->AllocateColor($this->Picture,$R2,$G2,$B2); + $SkewWidth = $this->GArea_Y2-$this->GArea_Y1-1; + + for($i=$this->GArea_X1-$SkewWidth;$i<=$this->GArea_X2;$i=$i+4) + { + $X1 = $i; $Y1 = $this->GArea_Y2; + $X2 = $i+$SkewWidth; $Y2 = $this->GArea_Y1; + + + if ( $X1 < $this->GArea_X1 ) + { $X1 = $this->GArea_X1; $Y1 = $this->GArea_Y1 + $X2 - $this->GArea_X1 + 1; } + + if ( $X2 >= $this->GArea_X2 ) + { $Y2 = $this->GArea_Y1 + $X2 - $this->GArea_X2 +1; $X2 = $this->GArea_X2 - 1; } +// * Fixed in 1.27 * { $X2 = $this->GArea_X2 - 1; $Y2 = $this->GArea_Y2 - ($this->GArea_X2 - $X1); } + + imageline($this->Picture,$X1,$Y1,$X2,$Y2+1,$LineColor); + } + } + } + + /* Allow you to clear the scale : used if drawing multiple charts */ + function clearScale() + { + $this->VMin = NULL; + $this->VMax = NULL; + $this->VXMin = NULL; + $this->VXMax = NULL; + $this->Divisions = NULL; + $this->XDivisions = NULL; } + + /* Allow you to fix the scale, use this to bypass the automatic scaling */ + function setFixedScale($VMin,$VMax,$Divisions=5,$VXMin=0,$VXMax=0,$XDivisions=5) + { + $this->VMin = $VMin; + $this->VMax = $VMax; + $this->Divisions = $Divisions; + + if ( !$VXMin == 0 ) + { + $this->VXMin = $VXMin; + $this->VXMax = $VXMax; + $this->XDivisions = $XDivisions; + } + } + + /* Wrapper to the drawScale() function allowing a second scale to be drawn */ + function drawRightScale($Data,$DataDescription,$ScaleMode,$R,$G,$B,$DrawTicks=TRUE,$Angle=0,$Decimals=1,$WithMargin=FALSE,$SkipLabels=1) + { + $this->drawScale($Data,$DataDescription,$ScaleMode,$R,$G,$B,$DrawTicks,$Angle,$Decimals,$WithMargin,$SkipLabels,TRUE); + } + + /* Compute and draw the scale */ + function drawScale($Data,$DataDescription,$ScaleMode,$R,$G,$B,$DrawTicks=TRUE,$Angle=0,$Decimals=1,$WithMargin=FALSE,$SkipLabels=1,$RightScale=FALSE) + { + /* Validate the Data and DataDescription array */ + $this->validateData("drawScale",$Data); + + $C_TextColor =$this->AllocateColor($this->Picture,$R,$G,$B); + + $this->drawLine($this->GArea_X1,$this->GArea_Y1,$this->GArea_X1,$this->GArea_Y2,$R,$G,$B); + $this->drawLine($this->GArea_X1,$this->GArea_Y2,$this->GArea_X2,$this->GArea_Y2,$R,$G,$B); + + if ( $this->VMin == NULL && $this->VMax == NULL) + { + if (isset($DataDescription["Values"][0])) + { + $this->VMin = $Data[0][$DataDescription["Values"][0]]; + $this->VMax = $Data[0][$DataDescription["Values"][0]]; + } + else { $this->VMin = 2147483647; $this->VMax = -2147483647; } + + /* Compute Min and Max values */ + if ( $ScaleMode == SCALE_NORMAL || $ScaleMode == SCALE_START0 ) + { + if ( $ScaleMode == SCALE_START0 ) { $this->VMin = 0; } + + foreach ( $Data as $Key => $Values ) + { + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + if (isset($Data[$Key][$ColName])) + { + $Value = $Data[$Key][$ColName]; + + if ( is_numeric($Value) ) + { + if ( $this->VMax < $Value) { $this->VMax = $Value; } + if ( $this->VMin > $Value) { $this->VMin = $Value; } + } + } + } + } + } + elseif ( $ScaleMode == SCALE_ADDALL || $ScaleMode == SCALE_ADDALLSTART0 ) /* Experimental */ + { + if ( $ScaleMode == SCALE_ADDALLSTART0 ) { $this->VMin = 0; } + + foreach ( $Data as $Key => $Values ) + { + $Sum = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + if (isset($Data[$Key][$ColName])) + { + $Value = $Data[$Key][$ColName]; + if ( is_numeric($Value) ) + $Sum += $Value; + } + } + if ( $this->VMax < $Sum) { $this->VMax = $Sum; } + if ( $this->VMin > $Sum) { $this->VMin = $Sum; } + } + } + + if ( $this->VMax > preg_replace('/\.[0-9]+/','',$this->VMax) ) + $this->VMax = preg_replace('/\.[0-9]+/','',$this->VMax)+1; + + /* If all values are the same */ + if ( $this->VMax == $this->VMin ) + { + if ( $this->VMax >= 0 ) { $this->VMax++; } + else { $this->VMin--; } + } + + $DataRange = $this->VMax - $this->VMin; + if ( $DataRange == 0 ) { $DataRange = .1; } + + /* Compute automatic scaling */ + $ScaleOk = FALSE; $Factor = 1; + $MinDivHeight = 25; $MaxDivs = ($this->GArea_Y2 - $this->GArea_Y1) / $MinDivHeight; + + if ( $this->VMin == 0 && $this->VMax == 0 ) + { $this->VMin = 0; $this->VMax = 2; $Scale = 1; $Divisions = 2;} + elseif ($MaxDivs > 1) + { + while(!$ScaleOk) + { + $Scale1 = ( $this->VMax - $this->VMin ) / $Factor; + $Scale2 = ( $this->VMax - $this->VMin ) / $Factor / 2; + $Scale4 = ( $this->VMax - $this->VMin ) / $Factor / 4; + + if ( $Scale1 > 1 && $Scale1 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale1); $Scale = 1;} + if ( $Scale2 > 1 && $Scale2 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale2); $Scale = 2;} + if (!$ScaleOk) + { + if ( $Scale2 > 1 ) { $Factor = $Factor * 10; } + if ( $Scale2 < 1 ) { $Factor = $Factor / 10; } + } + } + + if ( floor($this->VMax / $Scale / $Factor) != $this->VMax / $Scale / $Factor) + { + $GridID = floor ( $this->VMax / $Scale / $Factor) + 1; + $this->VMax = $GridID * $Scale * $Factor; + $Divisions++; + } + + if ( floor($this->VMin / $Scale / $Factor) != $this->VMin / $Scale / $Factor) + { + $GridID = floor( $this->VMin / $Scale / $Factor); + $this->VMin = $GridID * $Scale * $Factor; + $Divisions++; + } + } + else /* Can occurs for small graphs */ + $Scale = 1; + + if ( !isset($Divisions) ) + $Divisions = 2; + + if ($Scale == 1 && $Divisions%2 == 1) + $Divisions--; + } + else + $Divisions = $this->Divisions; + + $this->DivisionCount = $Divisions; + + $DataRange = $this->VMax - $this->VMin; + if ( $DataRange == 0 ) { $DataRange = .1; } + + $this->DivisionHeight = ( $this->GArea_Y2 - $this->GArea_Y1 ) / $Divisions; + $this->DivisionRatio = ( $this->GArea_Y2 - $this->GArea_Y1 ) / $DataRange; + + $this->GAreaXOffset = 0; + if ( count($Data) > 1 ) + { + if ( $WithMargin == FALSE ) + $this->DivisionWidth = ( $this->GArea_X2 - $this->GArea_X1 ) / (count($Data)-1); + else + { + $this->DivisionWidth = ( $this->GArea_X2 - $this->GArea_X1 ) / (count($Data)); + $this->GAreaXOffset = $this->DivisionWidth / 2; + } + } + else + { + $this->DivisionWidth = $this->GArea_X2 - $this->GArea_X1; + $this->GAreaXOffset = $this->DivisionWidth / 2; + } + + $this->DataCount = count($Data); + + if ( $DrawTicks == FALSE ) + return(0); + + $YPos = $this->GArea_Y2; $XMin = NULL; + for($i=1;$i<=$Divisions+1;$i++) + { + if ( $RightScale ) + $this->drawLine($this->GArea_X2,$YPos,$this->GArea_X2+5,$YPos,$R,$G,$B); + else + $this->drawLine($this->GArea_X1,$YPos,$this->GArea_X1-5,$YPos,$R,$G,$B); + + $Value = $this->VMin + ($i-1) * (( $this->VMax - $this->VMin ) / $Divisions); + $Value = round($Value * pow(10,$Decimals)) / pow(10,$Decimals); + if ( $DataDescription["Format"]["Y"] == "number" ) + $Value = $Value.$DataDescription["Unit"]["Y"]; + if ( $DataDescription["Format"]["Y"] == "time" ) + $Value = $this->ToTime($Value); + if ( $DataDescription["Format"]["Y"] == "date" ) + $Value = $this->ToDate($Value); + if ( $DataDescription["Format"]["Y"] == "metric" ) + $Value = $this->ToMetric($Value); + if ( $DataDescription["Format"]["Y"] == "currency" ) + $Value = $this->ToCurrency($Value); + + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value); + $TextWidth = $Position[2]-$Position[0]; + + if ( $RightScale ) + { + imagettftext($this->Picture,$this->FontSize,0,$this->GArea_X2+10,$YPos+($this->FontSize/2),$C_TextColor,$this->FontName,$Value); + if ( $XMin < $this->GArea_X2+15+$TextWidth || $XMin == NULL ) { $XMin = $this->GArea_X2+15+$TextWidth; } + } + else + { + imagettftext($this->Picture,$this->FontSize,0,$this->GArea_X1-10-$TextWidth,$YPos+($this->FontSize/2),$C_TextColor,$this->FontName,$Value); + if ( $XMin > $this->GArea_X1-10-$TextWidth || $XMin == NULL ) { $XMin = $this->GArea_X1-10-$TextWidth; } + } + + $YPos = $YPos - $this->DivisionHeight; + } + + /* Write the Y Axis caption if set */ + if ( isset($DataDescription["Axis"]["Y"]) ) + { + $Position = imageftbbox($this->FontSize,90,$this->FontName,$DataDescription["Axis"]["Y"]); + $TextHeight = abs($Position[1])+abs($Position[3]); + $TextTop = (($this->GArea_Y2 - $this->GArea_Y1) / 2) + $this->GArea_Y1 + ($TextHeight/2); + + if ( $RightScale ) + imagettftext($this->Picture,$this->FontSize,90,$XMin+$this->FontSize,$TextTop,$C_TextColor,$this->FontName,$DataDescription["Axis"]["Y"]); + else + imagettftext($this->Picture,$this->FontSize,90,$XMin-$this->FontSize,$TextTop,$C_TextColor,$this->FontName,$DataDescription["Axis"]["Y"]); + } + + /* Horizontal Axis */ + $XPos = $this->GArea_X1 + $this->GAreaXOffset; + $ID = 1; $YMax = NULL; + foreach ( $Data as $Key => $Values ) + { + if ( $ID % $SkipLabels == 0 ) + { + $this->drawLine(floor($XPos),$this->GArea_Y2,floor($XPos),$this->GArea_Y2+5,$R,$G,$B); + $Value = $Data[$Key][$DataDescription["Position"]]; + if ( $DataDescription["Format"]["X"] == "number" ) + $Value = $Value.$DataDescription["Unit"]["X"]; + if ( $DataDescription["Format"]["X"] == "time" ) + $Value = $this->ToTime($Value); + if ( $DataDescription["Format"]["X"] == "date" ) + $Value = $this->ToDate($Value); + if ( $DataDescription["Format"]["X"] == "metric" ) + $Value = $this->ToMetric($Value); + if ( $DataDescription["Format"]["X"] == "currency" ) + $Value = $this->ToCurrency($Value); + + $Position = imageftbbox($this->FontSize,$Angle,$this->FontName,$Value); + $TextWidth = abs($Position[2])+abs($Position[0]); + $TextHeight = abs($Position[1])+abs($Position[3]); + + if ( $Angle == 0 ) + { + $YPos = $this->GArea_Y2+18; + imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)-floor($TextWidth/2),$YPos,$C_TextColor,$this->FontName,$Value); + } + else + { + $YPos = $this->GArea_Y2+10+$TextHeight; + if ( $Angle <= 90 ) + imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)-$TextWidth+5,$YPos,$C_TextColor,$this->FontName,$Value); + else + imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)+$TextWidth+5,$YPos,$C_TextColor,$this->FontName,$Value); + } + if ( $YMax < $YPos || $YMax == NULL ) { $YMax = $YPos; } + } + + $XPos = $XPos + $this->DivisionWidth; + $ID++; + } + + /* Write the X Axis caption if set */ + if ( isset($DataDescription["Axis"]["X"]) ) + { + $Position = imageftbbox($this->FontSize,90,$this->FontName,$DataDescription["Axis"]["X"]); + $TextWidth = abs($Position[2])+abs($Position[0]); + $TextLeft = (($this->GArea_X2 - $this->GArea_X1) / 2) + $this->GArea_X1 + ($TextWidth/2); + imagettftext($this->Picture,$this->FontSize,0,$TextLeft,$YMax+$this->FontSize+5,$C_TextColor,$this->FontName,$DataDescription["Axis"]["X"]); + } + } + + /* Compute and draw the scale for X/Y charts */ + function drawXYScale($Data,$DataDescription,$YSerieName,$XSerieName,$R,$G,$B,$WithMargin=0,$Angle=0,$Decimals=1) + { + /* Validate the Data and DataDescription array */ + $this->validateData("drawScale",$Data); + + $C_TextColor =$this->AllocateColor($this->Picture,$R,$G,$B); + + $this->drawLine($this->GArea_X1,$this->GArea_Y1,$this->GArea_X1,$this->GArea_Y2,$R,$G,$B); + $this->drawLine($this->GArea_X1,$this->GArea_Y2,$this->GArea_X2,$this->GArea_Y2,$R,$G,$B); + + /* Process Y scale */ + if ( $this->VMin == NULL && $this->VMax == NULL) + { + $this->VMin = $Data[0][$YSerieName]; + $this->VMax = $Data[0][$YSerieName]; + + foreach ( $Data as $Key => $Values ) + { + if (isset($Data[$Key][$YSerieName])) + { + $Value = $Data[$Key][$YSerieName]; + if ( $this->VMax < $Value) { $this->VMax = $Value; } + if ( $this->VMin > $Value) { $this->VMin = $Value; } + } + } + + if ( $this->VMax > preg_replace('/\.[0-9]+/','',$this->VMax) ) + $this->VMax = preg_replace('/\.[0-9]+/','',$this->VMax)+1; + + $DataRange = $this->VMax - $this->VMin; + if ( $DataRange == 0 ) { $DataRange = .1; } + + /* Compute automatic scaling */ + $ScaleOk = FALSE; $Factor = 1; + $MinDivHeight = 25; $MaxDivs = ($this->GArea_Y2 - $this->GArea_Y1) / $MinDivHeight; + + if ( $this->VMin == 0 && $this->VMax == 0 ) + { $this->VMin = 0; $this->VMax = 2; $Scale = 1; $Divisions = 2;} + elseif ($MaxDivs > 1) + { + while(!$ScaleOk) + { + $Scale1 = ( $this->VMax - $this->VMin ) / $Factor; + $Scale2 = ( $this->VMax - $this->VMin ) / $Factor / 2; + $Scale4 = ( $this->VMax - $this->VMin ) / $Factor / 4; + + if ( $Scale1 > 1 && $Scale1 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale1); $Scale = 1;} + if ( $Scale2 > 1 && $Scale2 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale2); $Scale = 2;} + if (!$ScaleOk) + { + if ( $Scale2 > 1 ) { $Factor = $Factor * 10; } + if ( $Scale2 < 1 ) { $Factor = $Factor / 10; } + } + } + + if ( floor($this->VMax / $Scale / $Factor) != $this->VMax / $Scale / $Factor) + { + $GridID = floor ( $this->VMax / $Scale / $Factor) + 1; + $this->VMax = $GridID * $Scale * $Factor; + $Divisions++; + } + + if ( floor($this->VMin / $Scale / $Factor) != $this->VMin / $Scale / $Factor) + { + $GridID = floor( $this->VMin / $Scale / $Factor); + $this->VMin = $GridID * $Scale * $Factor; + $Divisions++; + } + } + else /* Can occurs for small graphs */ + $Scale = 1; + + if ( !isset($Divisions) ) + $Divisions = 2; + + if ( $this->isRealInt(($this->VMax-$this->VMin)/($Divisions-1))) + $Divisions--; + elseif ( $this->isRealInt(($this->VMax-$this->VMin)/($Divisions+1))) + $Divisions++; + } + else + $Divisions = $this->Divisions; + + $this->DivisionCount = $Divisions; + + $DataRange = $this->VMax - $this->VMin; + if ( $DataRange == 0 ) { $DataRange = .1; } + + $this->DivisionHeight = ( $this->GArea_Y2 - $this->GArea_Y1 ) / $Divisions; + $this->DivisionRatio = ( $this->GArea_Y2 - $this->GArea_Y1 ) / $DataRange; + + $YPos = $this->GArea_Y2; $XMin = NULL; + for($i=1;$i<=$Divisions+1;$i++) + { + $this->drawLine($this->GArea_X1,$YPos,$this->GArea_X1-5,$YPos,$R,$G,$B); + $Value = $this->VMin + ($i-1) * (( $this->VMax - $this->VMin ) / $Divisions); + $Value = round($Value * pow(10,$Decimals)) / pow(10,$Decimals); + if ( $DataDescription["Format"]["Y"] == "number" ) + $Value = $Value.$DataDescription["Unit"]["Y"]; + if ( $DataDescription["Format"]["Y"] == "time" ) + $Value = $this->ToTime($Value); + if ( $DataDescription["Format"]["Y"] == "date" ) + $Value = $this->ToDate($Value); + if ( $DataDescription["Format"]["Y"] == "metric" ) + $Value = $this->ToMetric($Value); + if ( $DataDescription["Format"]["Y"] == "currency" ) + $Value = $this->ToCurrency($Value); + + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value); + $TextWidth = $Position[2]-$Position[0]; + imagettftext($this->Picture,$this->FontSize,0,$this->GArea_X1-10-$TextWidth,$YPos+($this->FontSize/2),$C_TextColor,$this->FontName,$Value); + + if ( $XMin > $this->GArea_X1-10-$TextWidth || $XMin == NULL ) { $XMin = $this->GArea_X1-10-$TextWidth; } + + $YPos = $YPos - $this->DivisionHeight; + } + + /* Process X scale */ + if ( $this->VXMin == NULL && $this->VXMax == NULL) + { + $this->VXMin = $Data[0][$XSerieName]; + $this->VXMax = $Data[0][$XSerieName]; + + foreach ( $Data as $Key => $Values ) + { + if (isset($Data[$Key][$XSerieName])) + { + $Value = $Data[$Key][$XSerieName]; + if ( $this->VXMax < $Value) { $this->VXMax = $Value; } + if ( $this->VXMin > $Value) { $this->VXMin = $Value; } + } + } + + if ( $this->VXMax > preg_replace('/\.[0-9]+/','',$this->VXMax) ) + $this->VXMax = preg_replace('/\.[0-9]+/','',$this->VXMax)+1; + + $DataRange = $this->VMax - $this->VMin; + if ( $DataRange == 0 ) { $DataRange = .1; } + + /* Compute automatic scaling */ + $ScaleOk = FALSE; $Factor = 1; + $MinDivWidth = 25; $MaxDivs = ($this->GArea_X2 - $this->GArea_X1) / $MinDivWidth; + + if ( $this->VXMin == 0 && $this->VXMax == 0 ) + { $this->VXMin = 0; $this->VXMax = 2; $Scale = 1; $XDivisions = 2;} + elseif ($MaxDivs > 1) + { + while(!$ScaleOk) + { + $Scale1 = ( $this->VXMax - $this->VXMin ) / $Factor; + $Scale2 = ( $this->VXMax - $this->VXMin ) / $Factor / 2; + $Scale4 = ( $this->VXMax - $this->VXMin ) / $Factor / 4; + + if ( $Scale1 > 1 && $Scale1 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $XDivisions = floor($Scale1); $Scale = 1;} + if ( $Scale2 > 1 && $Scale2 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $XDivisions = floor($Scale2); $Scale = 2;} + if (!$ScaleOk) + { + if ( $Scale2 > 1 ) { $Factor = $Factor * 10; } + if ( $Scale2 < 1 ) { $Factor = $Factor / 10; } + } + } + + if ( floor($this->VXMax / $Scale / $Factor) != $this->VXMax / $Scale / $Factor) + { + $GridID = floor ( $this->VXMax / $Scale / $Factor) + 1; + $this->VXMax = $GridID * $Scale * $Factor; + $XDivisions++; + } + + if ( floor($this->VXMin / $Scale / $Factor) != $this->VXMin / $Scale / $Factor) + { + $GridID = floor( $this->VXMin / $Scale / $Factor); + $this->VXMin = $GridID * $Scale * $Factor; + $XDivisions++; + } + } + else /* Can occurs for small graphs */ + $Scale = 1; + + if ( !isset($XDivisions) ) + $XDivisions = 2; + + if ( $this->isRealInt(($this->VXMax-$this->VXMin)/($XDivisions-1))) + $XDivisions--; + elseif ( $this->isRealInt(($this->VXMax-$this->VXMin)/($XDivisions+1))) + $XDivisions++; + } + else + $XDivisions = $this->XDivisions; + + $this->XDivisionCount = $Divisions; + $this->DataCount = $Divisions + 2; + + $XDataRange = $this->VXMax - $this->VXMin; + if ( $XDataRange == 0 ) { $XDataRange = .1; } + + $this->DivisionWidth = ( $this->GArea_X2 - $this->GArea_X1 ) / $XDivisions; + $this->XDivisionRatio = ( $this->GArea_X2 - $this->GArea_X1 ) / $XDataRange; + + $XPos = $this->GArea_X1; $YMax = NULL; + for($i=1;$i<=$XDivisions+1;$i++) + { + $this->drawLine($XPos,$this->GArea_Y2,$XPos,$this->GArea_Y2+5,$R,$G,$B); + + $Value = $this->VXMin + ($i-1) * (( $this->VXMax - $this->VXMin ) / $XDivisions); + $Value = round($Value * pow(10,$Decimals)) / pow(10,$Decimals); + if ( $DataDescription["Format"]["Y"] == "number" ) + $Value = $Value.$DataDescription["Unit"]["Y"]; + if ( $DataDescription["Format"]["Y"] == "time" ) + $Value = $this->ToTime($Value); + if ( $DataDescription["Format"]["Y"] == "date" ) + $Value = $this->ToDate($Value); + if ( $DataDescription["Format"]["Y"] == "metric" ) + $Value = $this->ToMetric($Value); + if ( $DataDescription["Format"]["Y"] == "currency" ) + $Value = $this->ToCurrency($Value); + + $Position = imageftbbox($this->FontSize,$Angle,$this->FontName,$Value); + $TextWidth = abs($Position[2])+abs($Position[0]); + $TextHeight = abs($Position[1])+abs($Position[3]); + + if ( $Angle == 0 ) + { + $YPos = $this->GArea_Y2+18; + imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)-floor($TextWidth/2),$YPos,$C_TextColor,$this->FontName,$Value); + } + else + { + $YPos = $this->GArea_Y2+10+$TextHeight; + if ( $Angle <= 90 ) + imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)-$TextWidth+5,$YPos,$C_TextColor,$this->FontName,$Value); + else + imagettftext($this->Picture,$this->FontSize,$Angle,floor($XPos)+$TextWidth+5,$YPos,$C_TextColor,$this->FontName,$Value); + } + + if ( $YMax < $YPos || $YMax == NULL ) { $YMax = $YPos; } + + $XPos = $XPos + $this->DivisionWidth; + } + + /* Write the Y Axis caption if set */ + if ( isset($DataDescription["Axis"]["Y"]) ) + { + $Position = imageftbbox($this->FontSize,90,$this->FontName,$DataDescription["Axis"]["Y"]); + $TextHeight = abs($Position[1])+abs($Position[3]); + $TextTop = (($this->GArea_Y2 - $this->GArea_Y1) / 2) + $this->GArea_Y1 + ($TextHeight/2); + imagettftext($this->Picture,$this->FontSize,90,$XMin-$this->FontSize,$TextTop,$C_TextColor,$this->FontName,$DataDescription["Axis"]["Y"]); + } + + /* Write the X Axis caption if set */ + if ( isset($DataDescription["Axis"]["X"]) ) + { + $Position = imageftbbox($this->FontSize,90,$this->FontName,$DataDescription["Axis"]["X"]); + $TextWidth = abs($Position[2])+abs($Position[0]); + $TextLeft = (($this->GArea_X2 - $this->GArea_X1) / 2) + $this->GArea_X1 + ($TextWidth/2); + imagettftext($this->Picture,$this->FontSize,0,$TextLeft,$YMax+$this->FontSize+5,$C_TextColor,$this->FontName,$DataDescription["Axis"]["X"]); + } + } + + /* Compute and draw the scale */ + function drawGrid($LineWidth,$Mosaic=TRUE,$R=220,$G=220,$B=220,$Alpha=100) + { + /* Draw mosaic */ + if ( $Mosaic ) + { + $LayerWidth = $this->GArea_X2-$this->GArea_X1; + $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; + + $this->Layers[0] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White =$this->AllocateColor($this->Layers[0],255,255,255); + imagefilledrectangle($this->Layers[0],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[0],$C_White); + + $C_Rectangle =$this->AllocateColor($this->Layers[0],250,250,250); + + $YPos = $LayerHeight; //$this->GArea_Y2-1; + $LastY = $YPos; + for($i=0;$i<=$this->DivisionCount;$i++) + { + $LastY = $YPos; + $YPos = $YPos - $this->DivisionHeight; + + if ( $YPos <= 0 ) { $YPos = 1; } + + if ( $i % 2 == 0 ) + { + imagefilledrectangle($this->Layers[0],1,$YPos,$LayerWidth-1,$LastY,$C_Rectangle); + } + } + imagecopymerge($this->Picture,$this->Layers[0],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[0]); + } + + /* Horizontal lines */ + $YPos = $this->GArea_Y2 - $this->DivisionHeight; + for($i=1;$i<=$this->DivisionCount;$i++) + { + if ( $YPos > $this->GArea_Y1 && $YPos < $this->GArea_Y2 ) + $this->drawDottedLine($this->GArea_X1,$YPos,$this->GArea_X2,$YPos,$LineWidth,$R,$G,$B); + + $YPos = $YPos - $this->DivisionHeight; + } + + /* Vertical lines */ + if ( $this->GAreaXOffset == 0 ) + { $XPos = $this->GArea_X1 + $this->DivisionWidth + $this->GAreaXOffset; $ColCount = $this->DataCount-2; } + else + { $XPos = $this->GArea_X1 + $this->GAreaXOffset; $ColCount = floor( ($this->GArea_X2 - $this->GArea_X1) / $this->DivisionWidth ); } + + for($i=1;$i<=$ColCount;$i++) + { + if ( $XPos > $this->GArea_X1 && $XPos < $this->GArea_X2 ) + $this->drawDottedLine(floor($XPos),$this->GArea_Y1,floor($XPos),$this->GArea_Y2,$LineWidth,$R,$G,$B); + $XPos = $XPos + $this->DivisionWidth; + } + } + + /* retrieve the legends size */ + function getLegendBoxSize($DataDescription) + { + if ( !isset($DataDescription["Description"]) ) + return(-1); + + /* <-10->[8]<-4->Text<-10-> */ + $MaxWidth = 0; $MaxHeight = 8; + foreach($DataDescription["Description"] as $Key => $Value) + { + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value); + $TextWidth = $Position[2]-$Position[0]; + $TextHeight = $Position[1]-$Position[7]; + if ( $TextWidth > $MaxWidth) { $MaxWidth = $TextWidth; } + $MaxHeight = $MaxHeight + $TextHeight + 4; + } + $MaxHeight = $MaxHeight - 3; + $MaxWidth = $MaxWidth + 32; + + return(array($MaxWidth,$MaxHeight)); + } + + /* Draw the data legends */ + function drawLegend($XPos,$YPos,$DataDescription,$R,$G,$B,$Rs=-1,$Gs=-1,$Bs=-1,$Rt=0,$Gt=0,$Bt=0,$Border=TRUE) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawLegend",$DataDescription); + + if ( !isset($DataDescription["Description"]) ) + return(-1); + + $C_TextColor =$this->AllocateColor($this->Picture,$Rt,$Gt,$Bt); + + /* <-10->[8]<-4->Text<-10-> */ + $MaxWidth = 0; $MaxHeight = 8; + foreach($DataDescription["Description"] as $Key => $Value) + { + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value); + $TextWidth = $Position[2]-$Position[0]; + $TextHeight = $Position[1]-$Position[7]; + if ( $TextWidth > $MaxWidth) { $MaxWidth = $TextWidth; } + $MaxHeight = $MaxHeight + $TextHeight + 4; + } + $MaxHeight = $MaxHeight - 5; + $MaxWidth = $MaxWidth + 32; + + if ( $Rs == -1 || $Gs == -1 || $Bs == -1 ) + { $Rs = $R-30; $Gs = $G-30; $Bs = $B-30; } + + if ( $Border ) + { + $this->drawFilledRoundedRectangle($XPos+1,$YPos+1,$XPos+$MaxWidth+1,$YPos+$MaxHeight+1,5,$Rs,$Gs,$Bs); + $this->drawFilledRoundedRectangle($XPos,$YPos,$XPos+$MaxWidth,$YPos+$MaxHeight,5,$R,$G,$B); + } + + $YOffset = 4 + $this->FontSize; $ID = 0; + foreach($DataDescription["Description"] as $Key => $Value) + { + $this->drawFilledRoundedRectangle($XPos+10,$YPos+$YOffset-4,$XPos+14,$YPos+$YOffset-4,2,$this->Palette[$ID]["R"],$this->Palette[$ID]["G"],$this->Palette[$ID]["B"]); + imagettftext($this->Picture,$this->FontSize,0,$XPos+22,$YPos+$YOffset,$C_TextColor,$this->FontName,$Value); + + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value); + $TextHeight = $Position[1]-$Position[7]; + + $YOffset = $YOffset + $TextHeight + 4; + $ID++; + } + } + + /* Draw the data legends */ + function drawPieLegend($XPos,$YPos,$Data,$DataDescription,$R,$G,$B) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawPieLegend",$DataDescription,FALSE); + $this->validateData("drawPieLegend",$Data); + + if ( !isset($DataDescription["Position"]) ) + return(-1); + + $C_TextColor =$this->AllocateColor($this->Picture,0,0,0); + + /* <-10->[8]<-4->Text<-10-> */ + $MaxWidth = 0; $MaxHeight = 8; + foreach($Data as $Key => $Value) + { + $Value2 = $Value[$DataDescription["Position"]]; + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value2); + $TextWidth = $Position[2]-$Position[0]; + $TextHeight = $Position[1]-$Position[7]; + if ( $TextWidth > $MaxWidth) { $MaxWidth = $TextWidth; } + + $MaxHeight = $MaxHeight + $TextHeight + 4; + } + $MaxHeight = $MaxHeight - 3; + $MaxWidth = $MaxWidth + 32; + + $this->drawFilledRoundedRectangle($XPos+1,$YPos+1,$XPos+$MaxWidth+1,$YPos+$MaxHeight+1,5,$R-30,$G-30,$B-30); + $this->drawFilledRoundedRectangle($XPos,$YPos,$XPos+$MaxWidth,$YPos+$MaxHeight,5,$R,$G,$B); + + $YOffset = 4 + $this->FontSize; $ID = 0; + foreach($Data as $Key => $Value) + { + $Value2 = $Value[$DataDescription["Position"]]; + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value2); + $TextHeight = $Position[1]-$Position[7]; + $this->drawFilledRectangle($XPos+10,$YPos+$YOffset-6,$XPos+14,$YPos+$YOffset-2,$this->Palette[$ID]["R"],$this->Palette[$ID]["G"],$this->Palette[$ID]["B"]); + + imagettftext($this->Picture,$this->FontSize,0,$XPos+22,$YPos+$YOffset,$C_TextColor,$this->FontName,$Value2); + $YOffset = $YOffset + $TextHeight + 4; + $ID++; + } + } + + /* Draw the graph title */ + function drawTitle($XPos,$YPos,$Value,$R,$G,$B,$XPos2=-1,$YPos2=-1,$Shadow=FALSE) + { + $C_TextColor = $this->AllocateColor($this->Picture,$R,$G,$B); + + if ( $XPos2 != -1 ) + { + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value); + $TextWidth = $Position[2]-$Position[0]; + $XPos = floor(( $XPos2 - $XPos - $TextWidth ) / 2 ) + $XPos; + } + + if ( $YPos2 != -1 ) + { + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Value); + $TextHeight = $Position[5]-$Position[3]; + $YPos = floor(( $YPos2 - $YPos - $TextHeight ) / 2 ) + $YPos; + } + + if ( $Shadow ) + { + $C_ShadowColor = $this->AllocateColor($this->Picture,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor); + imagettftext($this->Picture,$this->FontSize,0,$XPos+$this->ShadowXDistance,$YPos+$this->ShadowYDistance,$C_ShadowColor,$this->FontName,$Value); + } + + imagettftext($this->Picture,$this->FontSize,0,$XPos,$YPos,$C_TextColor,$this->FontName,$Value); + } + + /* Draw a text box with text align & alpha properties */ + function drawTextBox($X1,$Y1,$X2,$Y2,$Text,$Angle=0,$R=255,$G=255,$B=255,$Align=ALIGN_LEFT,$Shadow=TRUE,$BgR=-1,$BgG=-1,$BgB=-1,$Alpha=100) + { + $Position = imageftbbox($this->FontSize,$Angle,$this->FontName,$Text); + $TextWidth = $Position[2]-$Position[0]; + $TextHeight = $Position[5]-$Position[3]; + $AreaWidth = $X2 - $X1; + $AreaHeight = $Y2 - $Y1; + + if ( $BgR != -1 && $BgG != -1 && $BgB != -1 ) + $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$BgR,$BgG,$BgB,FALSE,$Alpha); + + if ( $Align == ALIGN_TOP_LEFT ) { $X = $X1+1; $Y = $Y1+$this->FontSize+1; } + if ( $Align == ALIGN_TOP_CENTER ) { $X = $X1+($AreaWidth/2)-($TextWidth/2); $Y = $Y1+$this->FontSize+1; } + if ( $Align == ALIGN_TOP_RIGHT ) { $X = $X2-$TextWidth-1; $Y = $Y1+$this->FontSize+1; } + if ( $Align == ALIGN_LEFT ) { $X = $X1+1; $Y = $Y1+($AreaHeight/2)-($TextHeight/2); } + if ( $Align == ALIGN_CENTER ) { $X = $X1+($AreaWidth/2)-($TextWidth/2); $Y = $Y1+($AreaHeight/2)-($TextHeight/2); } + if ( $Align == ALIGN_RIGHT ) { $X = $X2-$TextWidth-1; $Y = $Y1+($AreaHeight/2)-($TextHeight/2); } + if ( $Align == ALIGN_BOTTOM_LEFT ) { $X = $X1+1; $Y = $Y2-1; } + if ( $Align == ALIGN_BOTTOM_CENTER ) { $X = $X1+($AreaWidth/2)-($TextWidth/2); $Y = $Y2-1; } + if ( $Align == ALIGN_BOTTOM_RIGHT ) { $X = $X2-$TextWidth-1; $Y = $Y2-1; } + + $C_TextColor =$this->AllocateColor($this->Picture,$R,$G,$B); + $C_ShadowColor =$this->AllocateColor($this->Picture,0,0,0); + if ( $Shadow ) + imagettftext($this->Picture,$this->FontSize,$Angle,$X+1,$Y+1,$C_ShadowColor,$this->FontName,$Text); + + imagettftext($this->Picture,$this->FontSize,$Angle,$X,$Y,$C_TextColor,$this->FontName,$Text); + } + + /* Compute and draw the scale */ + function drawTreshold($Value,$R,$G,$B,$ShowLabel=FALSE,$ShowOnRight=FALSE,$TickWidth=4,$FreeText=NULL) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $C_TextColor =$this->AllocateColor($this->Picture,$R,$G,$B); + $Y = $this->GArea_Y2 - ($Value - $this->VMin) * $this->DivisionRatio; + + if ( $Y <= $this->GArea_Y1 || $Y >= $this->GArea_Y2 ) + return(-1); + + if ( $TickWidth == 0 ) + $this->drawLine($this->GArea_X1,$Y,$this->GArea_X2,$Y,$R,$G,$B); + else + $this->drawDottedLine($this->GArea_X1,$Y,$this->GArea_X2,$Y,$TickWidth,$R,$G,$B); + + if ( $ShowLabel ) + { + if ( $FreeText == NULL ) + { $Label = $Value; } else { $Label = $FreeText; } + + if ( $ShowOnRight ) + imagettftext($this->Picture,$this->FontSize,0,$this->GArea_X2+2,$Y+($this->FontSize/2),$C_TextColor,$this->FontName,$Label); + else + imagettftext($this->Picture,$this->FontSize,0,$this->GArea_X1+2,$Y-($this->FontSize/2),$C_TextColor,$this->FontName,$Label); + } + } + + /* This function put a label on a specific point */ + function setLabel($Data,$DataDescription,$SerieName,$ValueName,$Caption,$R=210,$G=210,$B=210) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("setLabel",$DataDescription); + $this->validateData("setLabel",$Data); + $ShadowFactor = 100; + $C_Label =$this->AllocateColor($this->Picture,$R,$G,$B); + $C_Shadow =$this->AllocateColor($this->Picture,$R-$ShadowFactor,$G-$ShadowFactor,$B-$ShadowFactor); + $C_TextColor =$this->AllocateColor($this->Picture,0,0,0); + + $Cp = 0; $Found = FALSE; + foreach ( $Data as $Key => $Value ) + { + if ( $Data[$Key][$DataDescription["Position"]] == $ValueName ) + { $NumericalValue = $Data[$Key][$SerieName]; $Found = TRUE; } + if ( !$Found ) + $Cp++; + } + + $XPos = $this->GArea_X1 + $this->GAreaXOffset + ( $this->DivisionWidth * $Cp ) + 2; + $YPos = $this->GArea_Y2 - ($NumericalValue - $this->VMin) * $this->DivisionRatio; + + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Caption); + $TextHeight = $Position[3] - $Position[5]; + $TextWidth = $Position[2]-$Position[0] + 2; + $TextOffset = floor($TextHeight/2); + + // Shadow + $Poly = array($XPos+1,$YPos+1,$XPos + 9,$YPos - $TextOffset,$XPos + 8,$YPos + $TextOffset + 2); + imagefilledpolygon($this->Picture,$Poly,3,$C_Shadow); + $this->drawLine($XPos,$YPos+1,$XPos + 9,$YPos - $TextOffset - .2,$R-$ShadowFactor,$G-$ShadowFactor,$B-$ShadowFactor); + $this->drawLine($XPos,$YPos+1,$XPos + 9,$YPos + $TextOffset + 2.2,$R-$ShadowFactor,$G-$ShadowFactor,$B-$ShadowFactor); + $this->drawFilledRectangle($XPos + 9,$YPos - $TextOffset-.2,$XPos + 13 + $TextWidth,$YPos + $TextOffset + 2.2,$R-$ShadowFactor,$G-$ShadowFactor,$B-$ShadowFactor); + + // Label background + $Poly = array($XPos,$YPos,$XPos + 8,$YPos - $TextOffset - 1,$XPos + 8,$YPos + $TextOffset + 1); + imagefilledpolygon($this->Picture,$Poly,3,$C_Label); + $this->drawLine($XPos-1,$YPos,$XPos + 8,$YPos - $TextOffset - 1.2,$R,$G,$B); + $this->drawLine($XPos-1,$YPos,$XPos + 8,$YPos + $TextOffset + 1.2,$R,$G,$B); + $this->drawFilledRectangle($XPos + 8,$YPos - $TextOffset - 1.2,$XPos + 12 + $TextWidth,$YPos + $TextOffset + 1.2,$R,$G,$B); + + imagettftext($this->Picture,$this->FontSize,0,$XPos + 10,$YPos + $TextOffset,$C_TextColor,$this->FontName,$Caption); + } + + /* This function draw a plot graph */ + function drawPlotGraph($Data,$DataDescription,$BigRadius=5,$SmallRadius=2,$R2=-1,$G2=-1,$B2=-1,$Shadow=FALSE) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawPlotGraph",$DataDescription); + $this->validateData("drawPlotGraph",$Data); + + $GraphID = 0; + $Ro = $R2; $Go = $G2; $Bo = $B2; + + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $R = $this->Palette[$ColorID]["R"]; + $G = $this->Palette[$ColorID]["G"]; + $B = $this->Palette[$ColorID]["B"]; + $R2 = $Ro; $G2 = $Go; $B2 = $Bo; + + if ( isset($DataDescription["Symbol"][$ColName]) ) + { + $Is_Alpha = ((ord ( file_get_contents ($DataDescription["Symbol"][$ColName], false, null, 25, 1)) & 6) & 4) == 4; + + $Infos = getimagesize($DataDescription["Symbol"][$ColName]); + $ImageWidth = $Infos[0]; + $ImageHeight = $Infos[1]; + $Symbol = imagecreatefromgif($DataDescription["Symbol"][$ColName]); + } + + $XPos = $this->GArea_X1 + $this->GAreaXOffset; + $Hsize = round($BigRadius/2); + $R3 = -1; $G3 = -1; $B3 = -1; + foreach ( $Data as $Key => $Values ) + { + $Value = $Data[$Key][$ColName]; + $YPos = $this->GArea_Y2 - (($Value-$this->VMin) * $this->DivisionRatio); + + /* Save point into the image map if option activated */ + if ( $this->BuildMap ) + $this->addToImageMap($XPos-$Hsize,$YPos-$Hsize,$XPos+1+$Hsize,$YPos+$Hsize+1,$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"Plot"); + + if ( is_numeric($Value) ) + { + if ( !isset($DataDescription["Symbol"][$ColName]) ) + { + + if ( $Shadow ) + { + if ( $R3 !=-1 && $G3 !=-1 && $B3 !=-1 ) + $this->drawFilledCircle($XPos+2,$YPos+2,$BigRadius,$R3,$G3,$B3); + else + { + $R3 = $this->Palette[$ColorID]["R"]-20; if ( $R3 < 0 ) { $R3 = 0; } + $G3 = $this->Palette[$ColorID]["G"]-20; if ( $G3 < 0 ) { $G3 = 0; } + $B3 = $this->Palette[$ColorID]["B"]-20; if ( $B3 < 0 ) { $B3 = 0; } + $this->drawFilledCircle($XPos+2,$YPos+2,$BigRadius,$R3,$G3,$B3); + } + } + + $this->drawFilledCircle($XPos+1,$YPos+1,$BigRadius,$R,$G,$B); + + if ( $SmallRadius != 0 ) + { + if ( $R2 !=-1 && $G2 !=-1 && $B2 !=-1 ) + $this->drawFilledCircle($XPos+1,$YPos+1,$SmallRadius,$R2,$G2,$B2); + else + { + $R2 = $this->Palette[$ColorID]["R"]-15; if ( $R2 < 0 ) { $R2 = 0; } + $G2 = $this->Palette[$ColorID]["G"]-15; if ( $G2 < 0 ) { $G2 = 0; } + $B2 = $this->Palette[$ColorID]["B"]-15; if ( $B2 < 0 ) { $B2 = 0; } + + $this->drawFilledCircle($XPos+1,$YPos+1,$SmallRadius,$R2,$G2,$B2); + } + } + } + else + { + imagecopymerge($this->Picture,$Symbol,$XPos+1-$ImageWidth/2,$YPos+1-$ImageHeight/2,0,0,$ImageWidth,$ImageHeight,100); + } + } + + $XPos = $XPos + $this->DivisionWidth; + } + $GraphID++; + } + } + + /* This function draw a plot graph in an X/Y space */ + function drawXYPlotGraph($Data,$DataDescription,$YSerieName,$XSerieName,$PaletteID=0,$BigRadius=5,$SmallRadius=2,$R2=-1,$G2=-1,$B2=-1,$Shadow=TRUE) + { + $R = $this->Palette[$PaletteID]["R"]; + $G = $this->Palette[$PaletteID]["G"]; + $B = $this->Palette[$PaletteID]["B"]; + $R3 = -1; $G3 = -1; $B3 = -1; + + $YLast = -1; $XLast = -1; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$YSerieName]) && isset($Data[$Key][$XSerieName]) ) + { + $X = $Data[$Key][$XSerieName]; + $Y = $Data[$Key][$YSerieName]; + + $Y = $this->GArea_Y2 - (($Y-$this->VMin) * $this->DivisionRatio); + $X = $this->GArea_X1 + (($X-$this->VXMin) * $this->XDivisionRatio); + + + if ( $Shadow ) + { + if ( $R3 !=-1 && $G3 !=-1 && $B3 !=-1 ) + $this->drawFilledCircle($X+2,$Y+2,$BigRadius,$R3,$G3,$B3); + else + { + $R3 = $this->Palette[$PaletteID]["R"]-20; if ( $R < 0 ) { $R = 0; } + $G3 = $this->Palette[$PaletteID]["G"]-20; if ( $G < 0 ) { $G = 0; } + $B3 = $this->Palette[$PaletteID]["B"]-20; if ( $B < 0 ) { $B = 0; } + $this->drawFilledCircle($X+2,$Y+2,$BigRadius,$R3,$G3,$B3); + } + } + + $this->drawFilledCircle($X+1,$Y+1,$BigRadius,$R,$G,$B); + + if ( $R2 !=-1 && $G2 !=-1 && $B2 !=-1 ) + $this->drawFilledCircle($X+1,$Y+1,$SmallRadius,$R2,$G2,$B2); + else + { + $R2 = $this->Palette[$PaletteID]["R"]+20; if ( $R > 255 ) { $R = 255; } + $G2 = $this->Palette[$PaletteID]["G"]+20; if ( $G > 255 ) { $G = 255; } + $B2 = $this->Palette[$PaletteID]["B"]+20; if ( $B > 255 ) { $B = 255; } + $this->drawFilledCircle($X+1,$Y+1,$SmallRadius,$R2,$G2,$B2); + } + } + } + + } + + /* This function draw an area between two series */ + function drawArea($Data,$Serie1,$Serie2,$R,$G,$B,$Alpha = 50) + { + /* Validate the Data and DataDescription array */ + $this->validateData("drawArea",$Data); + + $LayerWidth = $this->GArea_X2-$this->GArea_X1; + $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; + + $this->Layers[0] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White =$this->AllocateColor($this->Layers[0],255,255,255); + imagefilledrectangle($this->Layers[0],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[0],$C_White); + + $C_Graph =$this->AllocateColor($this->Layers[0],$R,$G,$B); + + $XPos = $this->GAreaXOffset; + $LastXPos = -1; + foreach ( $Data as $Key => $Values ) + { + $Value1 = $Data[$Key][$Serie1]; + $Value2 = $Data[$Key][$Serie2]; + $YPos1 = $LayerHeight - (($Value1-$this->VMin) * $this->DivisionRatio); + $YPos2 = $LayerHeight - (($Value2-$this->VMin) * $this->DivisionRatio); + + if ( $LastXPos != -1 ) + { + $Points = ""; + $Points[] = $LastXPos; $Points[] = $LastYPos1; + $Points[] = $LastXPos; $Points[] = $LastYPos2; + $Points[] = $XPos; $Points[] = $YPos2; + $Points[] = $XPos; $Points[] = $YPos1; + + imagefilledpolygon($this->Layers[0],$Points,4,$C_Graph); + } + + $LastYPos1 = $YPos1; + $LastYPos2 = $YPos2; + $LastXPos = $XPos; + + $XPos = $XPos + $this->DivisionWidth; + } + + imagecopymerge($this->Picture,$this->Layers[0],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[0]); + } + + + /* This function write the values of the specified series */ + function writeValues($Data,$DataDescription,$Series) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("writeValues",$DataDescription); + $this->validateData("writeValues",$Data); + + if ( !is_array($Series) ) { $Series = array($Series); } + + foreach($Series as $Key => $Serie) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $Serie ) { $ColorID = $ID; }; $ID++; } + + $XPos = $this->GArea_X1 + $this->GAreaXOffset; + $XLast = -1; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$Serie]) && is_numeric($Data[$Key][$Serie])) + { + $Value = $Data[$Key][$Serie]; + $YPos = $this->GArea_Y2 - (($Value-$this->VMin) * $this->DivisionRatio); + + $Positions = imagettfbbox($this->FontSize,0,$this->FontName,$Value); + $Width = $Positions[2] - $Positions[6]; $XOffset = $XPos - ($Width/2); + $Height = $Positions[3] - $Positions[7]; $YOffset = $YPos - 4; + + $C_TextColor =$this->AllocateColor($this->Picture,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + imagettftext($this->Picture,$this->FontSize,0,$XOffset,$YOffset,$C_TextColor,$this->FontName,$Value); + } + $XPos = $XPos + $this->DivisionWidth; + } + + } + } + + /* This function draw a line graph */ + function drawLineGraph($Data,$DataDescription,$SerieName="") + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawLineGraph",$DataDescription); + $this->validateData("drawLineGraph",$Data); + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + if ( $SerieName == "" || $SerieName == $ColName ) + { + $XPos = $this->GArea_X1 + $this->GAreaXOffset; + $XLast = -1; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + { + $Value = $Data[$Key][$ColName]; + $YPos = $this->GArea_Y2 - (($Value-$this->VMin) * $this->DivisionRatio); + + /* Save point into the image map if option activated */ + if ( $this->BuildMap ) + $this->addToImageMap($XPos-3,$YPos-3,$XPos+3,$YPos+3,$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"Line"); + + if (!is_numeric($Value)) { $XLast = -1; } + if ( $XLast != -1 ) + $this->drawLine($XLast,$YLast,$XPos,$YPos,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"],TRUE); + + $XLast = $XPos; + $YLast = $YPos; + if (!is_numeric($Value)) { $XLast = -1; } + } + $XPos = $XPos + $this->DivisionWidth; + } + $GraphID++; + } + } + } + + /* This function draw a line graph */ + function drawXYGraph($Data,$DataDescription,$YSerieName,$XSerieName,$PaletteID=0) + { + $YLast = -1; $XLast = -1; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$YSerieName]) && isset($Data[$Key][$XSerieName]) ) + { + $X = $Data[$Key][$XSerieName]; + $Y = $Data[$Key][$YSerieName]; + + $Y = $this->GArea_Y2 - (($Y-$this->VMin) * $this->DivisionRatio); + $X = $this->GArea_X1 + (($X-$this->VXMin) * $this->XDivisionRatio); + + if ($XLast != -1 && $YLast != -1) + { + $this->drawLine($XLast,$YLast,$X,$Y,$this->Palette[$PaletteID]["R"],$this->Palette[$PaletteID]["G"],$this->Palette[$PaletteID]["B"],TRUE); + } + + $XLast = $X; + $YLast = $Y; + } + } + } + + /* This function draw a cubic curve */ + function drawCubicCurve($Data,$DataDescription,$Accuracy=.1,$SerieName="") + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawCubicCurve",$DataDescription); + $this->validateData("drawCubicCurve",$Data); + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + if ( $SerieName == "" || $SerieName == $ColName ) + { + $XIn = ""; $Yin = ""; $Yt = ""; $U = ""; + $XIn[0] = 0; $YIn[0] = 0; + + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $Index = 1; + $XLast = -1; $Missing = ""; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName]) ) + { + $Value = $Data[$Key][$ColName]; + $XIn[$Index] = $Index; + $YIn[$Index] = $Value; + if ( !is_numeric($Value) ) { $Missing[$Index] = TRUE; } + $Index++; + } + } + $Index--; + + $Yt[0] = 0; + $Yt[1] = 0; + $U[1] = 0; + for($i=2;$i<=$Index-1;$i++) + { + $Sig = ($XIn[$i] - $XIn[$i-1]) / ($XIn[$i+1] - $XIn[$i-1]); + $p = $Sig * $Yt[$i-1] + 2; + $Yt[$i] = ($Sig - 1) / $p; + $U[$i] = ($YIn[$i+1] - $YIn[$i]) / ($XIn[$i+1] - $XIn[$i]) - ($YIn[$i] - $YIn[$i-1]) / ($XIn[$i] - $XIn[$i-1]); + $U[$i] = (6 * $U[$i] / ($XIn[$i+1] - $XIn[$i-1]) - $Sig * $U[$i-1]) / $p; + } + + $qn = 0; + $un = 0; + $Yt[$Index] = ($un - $qn * $U[$Index-1]) / ($qn * $Yt[$Index-1] + 1); + + for($k=$Index-1;$k>=1;$k--) + $Yt[$k] = $Yt[$k] * $Yt[$k+1] + $U[$k]; + + $XPos = $this->GArea_X1 + $this->GAreaXOffset; + for($X=1;$X<=$Index;$X=$X+$Accuracy) + { + $klo = 1; + $khi = $Index; + $k = $khi - $klo; + while($k > 1) + { + $k = $khi - $klo; + If ( $XIn[$k] >= $X ) + $khi = $k; + else + $klo = $k; + } + $klo = $khi - 1; + + $h = $XIn[$khi] - $XIn[$klo]; + $a = ($XIn[$khi] - $X) / $h; + $b = ($X - $XIn[$klo]) / $h; + $Value = $a * $YIn[$klo] + $b * $YIn[$khi] + (($a*$a*$a - $a) * $Yt[$klo] + ($b*$b*$b - $b) * $Yt[$khi]) * ($h*$h) / 6; + + $YPos = $this->GArea_Y2 - (($Value-$this->VMin) * $this->DivisionRatio); + + if ( $XLast != -1 && !isset($Missing[floor($X)]) && !isset($Missing[floor($X+1)]) ) + $this->drawLine($XLast,$YLast,$XPos,$YPos,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"],TRUE); + + $XLast = $XPos; + $YLast = $YPos; + $XPos = $XPos + $this->DivisionWidth * $Accuracy; + } + + // Add potentialy missing values + $XPos = $XPos - $this->DivisionWidth * $Accuracy; + if ( $XPos < ($this->GArea_X2 - $this->GAreaXOffset) ) + { + $YPos = $this->GArea_Y2 - (($YIn[$Index]-$this->VMin) * $this->DivisionRatio); + $this->drawLine($XLast,$YLast,$this->GArea_X2-$this->GAreaXOffset,$YPos,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"],TRUE); + } + + $GraphID++; + } + } + } + + /* This function draw a filled cubic curve */ + function drawFilledCubicCurve($Data,$DataDescription,$Accuracy=.1,$Alpha=100,$AroundZero=FALSE) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawFilledCubicCurve",$DataDescription); + $this->validateData("drawFilledCubicCurve",$Data); + + $LayerWidth = $this->GArea_X2-$this->GArea_X1; + $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; + $YZero = $LayerHeight - ((0-$this->VMin) * $this->DivisionRatio); + if ( $YZero > $LayerHeight ) { $YZero = $LayerHeight; } + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $XIn = ""; $Yin = ""; $Yt = ""; $U = ""; + $XIn[0] = 0; $YIn[0] = 0; + + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $Index = 1; + $XLast = -1; $Missing = ""; + foreach ( $Data as $Key => $Values ) + { + $Value = $Data[$Key][$ColName]; + $XIn[$Index] = $Index; + $YIn[$Index] = $Value; + if ( !is_numeric($Value) ) { $Missing[$Index] = TRUE; } + $Index++; + } + $Index--; + + $Yt[0] = 0; + $Yt[1] = 0; + $U[1] = 0; + for($i=2;$i<=$Index-1;$i++) + { + $Sig = ($XIn[$i] - $XIn[$i-1]) / ($XIn[$i+1] - $XIn[$i-1]); + $p = $Sig * $Yt[$i-1] + 2; + $Yt[$i] = ($Sig - 1) / $p; + $U[$i] = ($YIn[$i+1] - $YIn[$i]) / ($XIn[$i+1] - $XIn[$i]) - ($YIn[$i] - $YIn[$i-1]) / ($XIn[$i] - $XIn[$i-1]); + $U[$i] = (6 * $U[$i] / ($XIn[$i+1] - $XIn[$i-1]) - $Sig * $U[$i-1]) / $p; + } + + $qn = 0; + $un = 0; + $Yt[$Index] = ($un - $qn * $U[$Index-1]) / ($qn * $Yt[$Index-1] + 1); + + for($k=$Index-1;$k>=1;$k--) + $Yt[$k] = $Yt[$k] * $Yt[$k+1] + $U[$k]; + + $Points = ""; + $Points[] = $this->GAreaXOffset; + $Points[] = $LayerHeight; + + $this->Layers[0] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White =$this->AllocateColor($this->Layers[0],255,255,255); + imagefilledrectangle($this->Layers[0],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[0],$C_White); + + $YLast = NULL; + $XPos = $this->GAreaXOffset; $PointsCount = 2; + for($X=1;$X<=$Index;$X=$X+$Accuracy) + { + $klo = 1; + $khi = $Index; + $k = $khi - $klo; + while($k > 1) + { + $k = $khi - $klo; + If ( $XIn[$k] >= $X ) + $khi = $k; + else + $klo = $k; + } + $klo = $khi - 1; + + $h = $XIn[$khi] - $XIn[$klo]; + $a = ($XIn[$khi] - $X) / $h; + $b = ($X - $XIn[$klo]) / $h; + $Value = $a * $YIn[$klo] + $b * $YIn[$khi] + (($a*$a*$a - $a) * $Yt[$klo] + ($b*$b*$b - $b) * $Yt[$khi]) * ($h*$h) / 6; + + $YPos = $LayerHeight - (($Value-$this->VMin) * $this->DivisionRatio); + + if ( $YLast != NULL && $AroundZero && !isset($Missing[floor($X)]) && !isset($Missing[floor($X+1)])) + { + $aPoints = ""; + $aPoints[] = $XLast; + $aPoints[] = $YLast; + $aPoints[] = $XPos; + $aPoints[] = $YPos; + $aPoints[] = $XPos; + $aPoints[] = $YZero; + $aPoints[] = $XLast; + $aPoints[] = $YZero; + + $C_Graph =$this->AllocateColor($this->Layers[0],$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + imagefilledpolygon($this->Layers[0],$aPoints,4,$C_Graph); + } + + if ( !isset($Missing[floor($X)]) || $YLast == NULL ) + { + $PointsCount++; + $Points[] = $XPos; + $Points[] = $YPos; + } + else + { + $PointsCount++; $Points[] = $XLast; $Points[] = $LayerHeight; + } + + $YLast = $YPos; $XLast = $XPos; + $XPos = $XPos + $this->DivisionWidth * $Accuracy; + } + + // Add potentialy missing values + $XPos = $XPos - $this->DivisionWidth * $Accuracy; + if ( $XPos < ($LayerWidth-$this->GAreaXOffset) ) + { + $YPos = $LayerHeight - (($YIn[$Index]-$this->VMin) * $this->DivisionRatio); + + if ( $YLast != NULL && $AroundZero ) + { + $aPoints = ""; + $aPoints[] = $XLast; + $aPoints[] = $YLast; + $aPoints[] = $LayerWidth-$this->GAreaXOffset; + $aPoints[] = $YPos; + $aPoints[] = $LayerWidth-$this->GAreaXOffset; + $aPoints[] = $YZero; + $aPoints[] = $XLast; + $aPoints[] = $YZero; + + $C_Graph =$this->AllocateColor($this->Layers[0],$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + imagefilledpolygon($this->Layers[0],$aPoints,4,$C_Graph); + } + + if ( $YIn[$klo] != "" && $YIn[$khi] != "" || $YLast == NULL ) + { + $PointsCount++; + $Points[] = $LayerWidth-$this->GAreaXOffset; + $Points[] = $YPos; + } + } + + $Points[] = $LayerWidth-$this->GAreaXOffset; + $Points[] = $LayerHeight; + + if ( !$AroundZero ) + { + $C_Graph =$this->AllocateColor($this->Layers[0],$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + imagefilledpolygon($this->Layers[0],$Points,$PointsCount,$C_Graph); + } + + imagecopymerge($this->Picture,$this->Layers[0],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[0]); + + $this->drawCubicCurve($Data,$DataDescription,$Accuracy,$ColName); + + $GraphID++; + } + } + + /* This function draw a filled line graph */ + function drawFilledLineGraph($Data,$DataDescription,$Alpha=100,$AroundZero=FALSE) + { + $Empty = -2147483647; + + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawFilledLineGraph",$DataDescription); + $this->validateData("drawFilledLineGraph",$Data); + + $LayerWidth = $this->GArea_X2-$this->GArea_X1; + $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $aPoints = ""; + $aPoints[] = $this->GAreaXOffset; + $aPoints[] = $LayerHeight; + + $this->Layers[0] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White = $this->AllocateColor($this->Layers[0],255,255,255); + imagefilledrectangle($this->Layers[0],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[0],$C_White); + + $XPos = $this->GAreaXOffset; + $XLast = -1; $PointsCount = 2; + $YZero = $LayerHeight - ((0-$this->VMin) * $this->DivisionRatio); + if ( $YZero > $LayerHeight ) { $YZero = $LayerHeight; } + + $YLast = $Empty; + foreach ( $Data as $Key => $Values ) + { + $Value = $Data[$Key][$ColName]; + $YPos = $LayerHeight - (($Value-$this->VMin) * $this->DivisionRatio); + + /* Save point into the image map if option activated */ + if ( $this->BuildMap ) + $this->addToImageMap($XPos-3,$YPos-3,$XPos+3,$YPos+3,$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"FLine"); + + if ( !is_numeric($Value) ) + { + $PointsCount++; + $aPoints[] = $XLast; + $aPoints[] = $LayerHeight; + + $YLast = $Empty; + } + else + { + $PointsCount++; + if ( $YLast <> $Empty ) + { $aPoints[] = $XPos; $aPoints[] = $YPos; } + else + { $PointsCount++; $aPoints[] = $XPos; $aPoints[] = $LayerHeight; $aPoints[] = $XPos; $aPoints[] = $YPos; } + + if ($YLast <> $Empty && $AroundZero) + { + $Points = ""; + $Points[] = $XLast; $Points[] = $YLast; + $Points[] = $XPos; + $Points[] = $YPos; + $Points[] = $XPos; + $Points[] = $YZero; + $Points[] = $XLast; + $Points[] = $YZero; + + $C_Graph = $this->AllocateColor($this->Layers[0],$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + imagefilledpolygon($this->Layers[0],$Points,4,$C_Graph); + } + $YLast = $YPos; + } + + $XLast = $XPos; + $XPos = $XPos + $this->DivisionWidth; + } + $aPoints[] = $LayerWidth - $this->GAreaXOffset; + $aPoints[] = $LayerHeight; + + if ( $AroundZero == FALSE ) + { + $C_Graph = $this->AllocateColor($this->Layers[0],$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + imagefilledpolygon($this->Layers[0],$aPoints,$PointsCount,$C_Graph); + } + + imagecopymerge($this->Picture,$this->Layers[0],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[0]); + $GraphID++; + $this->drawLineGraph($Data,$DataDescription,$ColName); + } + } + + /* This function draw a bar graph */ + function drawOverlayBarGraph($Data,$DataDescription,$Alpha=50) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawOverlayBarGraph",$DataDescription); + $this->validateData("drawOverlayBarGraph",$Data); + + $LayerWidth = $this->GArea_X2-$this->GArea_X1; + $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $this->Layers[$GraphID] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White = $this->AllocateColor($this->Layers[$GraphID],255,255,255); + $C_Graph = $this->AllocateColor($this->Layers[$GraphID],$this->Palette[$GraphID]["R"],$this->Palette[$GraphID]["G"],$this->Palette[$GraphID]["B"]); + imagefilledrectangle($this->Layers[$GraphID],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[$GraphID],$C_White); + + $XWidth = $this->DivisionWidth / 4; + $XPos = $this->GAreaXOffset; + $YZero = $LayerHeight - ((0-$this->VMin) * $this->DivisionRatio); + $XLast = -1; $PointsCount = 2; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName]) ) + { + $Value = $Data[$Key][$ColName]; + if ( is_numeric($Value) ) + { + $YPos = $LayerHeight - (($Value-$this->VMin) * $this->DivisionRatio); + + imagefilledrectangle($this->Layers[$GraphID],$XPos-$XWidth,$YPos,$XPos+$XWidth,$YZero,$C_Graph); + + $X1 = floor($XPos - $XWidth + $this->GArea_X1); $Y1 = floor($YPos+$this->GArea_Y1) + .2; + $X2 = floor($XPos + $XWidth + $this->GArea_X1); $Y2 = $this->GArea_Y2 - ((0-$this->VMin) * $this->DivisionRatio); + if ( $X1 <= $this->GArea_X1 ) { $X1 = $this->GArea_X1 + 1; } + if ( $X2 >= $this->GArea_X2 ) { $X2 = $this->GArea_X2 - 1; } + + /* Save point into the image map if option activated */ + if ( $this->BuildMap ) + $this->addToImageMap($X1,min($Y1,$Y2),$X2,max($Y1,$Y2),$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"oBar"); + + $this->drawLine($X1,$Y1,$X2,$Y1,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"],TRUE); + } + } + $XPos = $XPos + $this->DivisionWidth; + } + + $GraphID++; + } + + for($i=0;$i<=($GraphID-1);$i++) + { + imagecopymerge($this->Picture,$this->Layers[$i],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[$i]); + } + } + + /* This function draw a bar graph */ + function drawBarGraph($Data,$DataDescription,$Shadow=FALSE,$Alpha=100) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawBarGraph",$DataDescription); + $this->validateData("drawBarGraph",$Data); + + $GraphID = 0; + $Series = count($DataDescription["Values"]); + $SeriesWidth = $this->DivisionWidth / ($Series+1); + $SerieXOffset = $this->DivisionWidth / 2 - $SeriesWidth / 2; + + $YZero = $this->GArea_Y2 - ((0-$this->VMin) * $this->DivisionRatio); + if ( $YZero > $this->GArea_Y2 ) { $YZero = $this->GArea_Y2; } + + $SerieID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $XPos = $this->GArea_X1 + $this->GAreaXOffset - $SerieXOffset + $SeriesWidth * $SerieID; + $XLast = -1; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + { + if ( is_numeric($Data[$Key][$ColName]) ) + { + $Value = $Data[$Key][$ColName]; + $YPos = $this->GArea_Y2 - (($Value-$this->VMin) * $this->DivisionRatio); + + /* Save point into the image map if option activated */ + if ( $this->BuildMap ) + { + $this->addToImageMap($XPos+1,min($YZero,$YPos),$XPos+$SeriesWidth-1,max($YZero,$YPos),$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"Bar"); + } + + if ( $Shadow && $Alpha == 100 ) + $this->drawRectangle($XPos+1,$YZero,$XPos+$SeriesWidth-1,$YPos,25,25,25,TRUE,$Alpha); + + $this->drawFilledRectangle($XPos+1,$YZero,$XPos+$SeriesWidth-1,$YPos,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"],TRUE,$Alpha); + } + } + $XPos = $XPos + $this->DivisionWidth; + } + $SerieID++; + } + } + + /* This function draw a stacked bar graph */ + function drawStackedBarGraph($Data,$DataDescription,$Alpha=50,$Contiguous=FALSE) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawBarGraph",$DataDescription); + $this->validateData("drawBarGraph",$Data); + + $GraphID = 0; + $Series = count($DataDescription["Values"]); + if ( $Contiguous ) + $SeriesWidth = $this->DivisionWidth; + else + $SeriesWidth = $this->DivisionWidth * .8; + + $YZero = $this->GArea_Y2 - ((0-$this->VMin) * $this->DivisionRatio); + if ( $YZero > $this->GArea_Y2 ) { $YZero = $this->GArea_Y2; } + + $SerieID = 0; $LastValue = ""; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $XPos = $this->GArea_X1 + $this->GAreaXOffset - $SeriesWidth / 2; + $XLast = -1; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + { + if ( is_numeric($Data[$Key][$ColName]) ) + { + $Value = $Data[$Key][$ColName]; + + if ( isset($LastValue[$Key]) ) + { + $YPos = $this->GArea_Y2 - ((($Value+$LastValue[$Key])-$this->VMin) * $this->DivisionRatio); + $YBottom = $this->GArea_Y2 - (($LastValue[$Key]-$this->VMin) * $this->DivisionRatio); + $LastValue[$Key] += $Value; + } + else + { + $YPos = $this->GArea_Y2 - (($Value-$this->VMin) * $this->DivisionRatio); + $YBottom = $YZero; + $LastValue[$Key] = $Value; + } + + /* Save point into the image map if option activated */ + if ( $this->BuildMap ) + $this->addToImageMap($XPos+1,min($YBottom,$YPos),$XPos+$SeriesWidth-1,max($YBottom,$YPos),$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"sBar"); + + $this->drawFilledRectangle($XPos+1,$YBottom,$XPos+$SeriesWidth-1,$YPos,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"],TRUE,$Alpha); + } + } + $XPos = $XPos + $this->DivisionWidth; + } + $SerieID++; + } + } + + /* This function draw a limits bar graphs */ + function drawLimitsGraph($Data,$DataDescription,$R=0,$G=0,$B=0) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawLimitsGraph",$DataDescription); + $this->validateData("drawLimitsGraph",$Data); + + $XWidth = $this->DivisionWidth / 4; + $XPos = $this->GArea_X1 + $this->GAreaXOffset; + + foreach ( $Data as $Key => $Values ) + { + $Min = $Data[$Key][$DataDescription["Values"][0]]; + $Max = $Data[$Key][$DataDescription["Values"][0]]; + $GraphID = 0; $MaxID = 0; $MinID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + if ( isset($Data[$Key][$ColName]) ) + { + if ( $Data[$Key][$ColName] > $Max && is_numeric($Data[$Key][$ColName])) + { $Max = $Data[$Key][$ColName]; $MaxID = $GraphID; } + } + if ( isset($Data[$Key][$ColName]) && is_numeric($Data[$Key][$ColName])) + { + if ( $Data[$Key][$ColName] < $Min ) + { $Min = $Data[$Key][$ColName]; $MinID = $GraphID; } + $GraphID++; + } + } + + $YPos = $this->GArea_Y2 - (($Max-$this->VMin) * $this->DivisionRatio); + $X1 = floor($XPos - $XWidth); $Y1 = floor($YPos) - .2; + $X2 = floor($XPos + $XWidth); + if ( $X1 <= $this->GArea_X1 ) { $X1 = $this->GArea_X1 + 1; } + if ( $X2 >= $this->GArea_X2 ) { $X2 = $this->GArea_X2 - 1; } + + $YPos = $this->GArea_Y2 - (($Min-$this->VMin) * $this->DivisionRatio); + $Y2 = floor($YPos) + .2; + + $this->drawLine(floor($XPos)-.2,$Y1+1,floor($XPos)-.2,$Y2-1,$R,$G,$B,TRUE); + $this->drawLine(floor($XPos)+.2,$Y1+1,floor($XPos)+.2,$Y2-1,$R,$G,$B,TRUE); + $this->drawLine($X1,$Y1,$X2,$Y1,$this->Palette[$MaxID]["R"],$this->Palette[$MaxID]["G"],$this->Palette[$MaxID]["B"],FALSE); + $this->drawLine($X1,$Y2,$X2,$Y2,$this->Palette[$MinID]["R"],$this->Palette[$MinID]["G"],$this->Palette[$MinID]["B"],FALSE); + + $XPos = $XPos + $this->DivisionWidth; + } + } + + /* This function draw radar axis centered on the graph area */ + function drawRadarAxis($Data,$DataDescription,$Mosaic=TRUE,$BorderOffset=10,$A_R=60,$A_G=60,$A_B=60,$S_R=200,$S_G=200,$S_B=200,$MaxValue=-1) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawRadarAxis",$DataDescription); + $this->validateData("drawRadarAxis",$Data); + + $C_TextColor = $this->AllocateColor($this->Picture,$A_R,$A_G,$A_B); + + /* Draw radar axis */ + $Points = count($Data); + $Radius = ( $this->GArea_Y2 - $this->GArea_Y1 ) / 2 - $BorderOffset; + $XCenter = ( $this->GArea_X2 - $this->GArea_X1 ) / 2 + $this->GArea_X1; + $YCenter = ( $this->GArea_Y2 - $this->GArea_Y1 ) / 2 + $this->GArea_Y1; + + /* Search for the max value */ + if ( $MaxValue == -1 ) + { + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + if ( $Data[$Key][$ColName] > $MaxValue ) { $MaxValue = $Data[$Key][$ColName]; } + } + } + } + + /* Draw the mosaic */ + if ( $Mosaic ) + { + $RadiusScale = $Radius / $MaxValue; + for ( $t=1; $t<=$MaxValue-1; $t++) + { + $TRadius = $RadiusScale * $t; + $LastX1 = -1; + + for ( $i=0; $i<=$Points; $i++) + { + $Angle = -90 + $i * 360/$Points; + $X1 = cos($Angle * 3.1418 / 180 ) * $TRadius + $XCenter; + $Y1 = sin($Angle * 3.1418 / 180 ) * $TRadius + $YCenter; + $X2 = cos($Angle * 3.1418 / 180 ) * ($TRadius+$RadiusScale) + $XCenter; + $Y2 = sin($Angle * 3.1418 / 180 ) * ($TRadius+$RadiusScale) + $YCenter; + + if ( $t % 2 == 1 && $LastX1 != -1) + { + $Plots = ""; + $Plots[] = $X1; $Plots[] = $Y1; + $Plots[] = $X2; $Plots[] = $Y2; + $Plots[] = $LastX2; $Plots[] = $LastY2; + $Plots[] = $LastX1; $Plots[] = $LastY1; + + $C_Graph = $this->AllocateColor($this->Picture,250,250,250); + imagefilledpolygon($this->Picture,$Plots,(count($Plots)+1)/2,$C_Graph); + } + + $LastX1 = $X1; $LastY1= $Y1; + $LastX2 = $X2; $LastY2= $Y2; + } + } + } + + + /* Draw the spider web */ + for ( $t=1; $t<=$MaxValue; $t++) + { + $TRadius = ( $Radius / $MaxValue ) * $t; + $LastX = -1; + + for ( $i=0; $i<=$Points; $i++) + { + $Angle = -90 + $i * 360/$Points; + $X = cos($Angle * 3.1418 / 180 ) * $TRadius + $XCenter; + $Y = sin($Angle * 3.1418 / 180 ) * $TRadius + $YCenter; + + if ( $LastX != -1 ) + $this->drawDottedLine($LastX,$LastY,$X,$Y,4,$S_R,$S_G,$S_B); + + $LastX = $X; $LastY= $Y; + } + } + + /* Draw the axis */ + for ( $i=0; $i<=$Points; $i++) + { + $Angle = -90 + $i * 360/$Points; + $X = cos($Angle * 3.1418 / 180 ) * $Radius + $XCenter; + $Y = sin($Angle * 3.1418 / 180 ) * $Radius + $YCenter; + + $this->drawLine($XCenter,$YCenter,$X,$Y,$A_R,$A_G,$A_B); + + $XOffset = 0; $YOffset = 0; + if (isset($Data[$i][$DataDescription["Position"]])) + { + $Label = $Data[$i][$DataDescription["Position"]]; + + $Positions = imagettfbbox($this->FontSize,0,$this->FontName,$Label); + $Width = $Positions[2] - $Positions[6]; + $Height = $Positions[3] - $Positions[7]; + + if ( $Angle >= 0 && $Angle <= 90 ) + $YOffset = $Height; + + if ( $Angle > 90 && $Angle <= 180 ) + { $YOffset = $Height; $XOffset = -$Width; } + + if ( $Angle > 180 && $Angle <= 270 ) + { $XOffset = -$Width; } + + imagettftext($this->Picture,$this->FontSize,0,$X+$XOffset,$Y+$YOffset,$C_TextColor,$this->FontName,$Label); + } + } + + /* Write the values */ + for ( $t=1; $t<=$MaxValue; $t++) + { + $TRadius = ( $Radius / $MaxValue ) * $t; + + $Angle = -90 + 360 / $Points; + $X1 = $XCenter; + $Y1 = $YCenter - $TRadius; + $X2 = cos($Angle * 3.1418 / 180 ) * $TRadius + $XCenter; + $Y2 = sin($Angle * 3.1418 / 180 ) * $TRadius + $YCenter; + + $XPos = floor(($X2-$X1)/2) + $X1; + $YPos = floor(($Y2-$Y1)/2) + $Y1; + + $Positions = imagettfbbox($this->FontSize,0,$this->FontName,$t); + $X = $XPos - ( $X+$Positions[2] - $X+$Positions[6] ) / 2; + $Y = $YPos + $this->FontSize; + + $this->drawFilledRoundedRectangle($X+$Positions[6]-2,$Y+$Positions[7]-1,$X+$Positions[2]+4,$Y+$Positions[3]+1,2,240,240,240); + $this->drawRoundedRectangle($X+$Positions[6]-2,$Y+$Positions[7]-1,$X+$Positions[2]+4,$Y+$Positions[3]+1,2,220,220,220); + imagettftext($this->Picture,$this->FontSize,0,$X,$Y,$C_TextColor,$this->FontName,$t); + } + } + + /* This function draw a radar graph centered on the graph area */ + function drawRadar($Data,$DataDescription,$BorderOffset=10,$MaxValue=-1) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawRadar",$DataDescription); + $this->validateData("drawRadar",$Data); + + $Points = count($Data); + $Radius = ( $this->GArea_Y2 - $this->GArea_Y1 ) / 2 - $BorderOffset; + $XCenter = ( $this->GArea_X2 - $this->GArea_X1 ) / 2 + $this->GArea_X1; + $YCenter = ( $this->GArea_Y2 - $this->GArea_Y1 ) / 2 + $this->GArea_Y1; + + /* Search for the max value */ + if ( $MaxValue == -1 ) + { + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + if ( $Data[$Key][$ColName] > $MaxValue ) { $MaxValue = $Data[$Key][$ColName]; } + } + } + } + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $Angle = -90; + $XLast = -1; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + { + $Value = $Data[$Key][$ColName]; + $Strength = ( $Radius / $MaxValue ) * $Value; + + $XPos = cos($Angle * 3.1418 / 180 ) * $Strength + $XCenter; + $YPos = sin($Angle * 3.1418 / 180 ) * $Strength + $YCenter; + + if ( $XLast != -1 ) + $this->drawLine($XLast,$YLast,$XPos,$YPos,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + + if ( $XLast == -1 ) + { $FirstX = $XPos; $FirstY = $YPos; } + + $Angle = $Angle + (360/$Points); + $XLast = $XPos; + $YLast = $YPos; + } + } + $this->drawLine($XPos,$YPos,$FirstX,$FirstY,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + $GraphID++; + } + } + + /* This function draw a radar graph centered on the graph area */ + function drawFilledRadar($Data,$DataDescription,$Alpha=50,$BorderOffset=10,$MaxValue=-1) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawFilledRadar",$DataDescription); + $this->validateData("drawFilledRadar",$Data); + + $Points = count($Data); + $LayerWidth = $this->GArea_X2-$this->GArea_X1; + $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; + $Radius = ( $this->GArea_Y2 - $this->GArea_Y1 ) / 2 - $BorderOffset; + $XCenter = ( $this->GArea_X2 - $this->GArea_X1 ) / 2; + $YCenter = ( $this->GArea_Y2 - $this->GArea_Y1 ) / 2; + + /* Search for the max value */ + if ( $MaxValue == -1 ) + { + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + if ( $Data[$Key][$ColName] > $MaxValue && is_numeric($Data[$Key][$ColName])) { $MaxValue = $Data[$Key][$ColName]; } + } + } + } + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; } + + $Angle = -90; + $XLast = -1; + $Plots = ""; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + { + $Value = $Data[$Key][$ColName]; + if ( !is_numeric($Value) ) { $Value = 0; } + $Strength = ( $Radius / $MaxValue ) * $Value; + + $XPos = cos($Angle * 3.1418 / 180 ) * $Strength + $XCenter; + $YPos = sin($Angle * 3.1418 / 180 ) * $Strength + $YCenter; + + $Plots[] = $XPos; + $Plots[] = $YPos; + + $Angle = $Angle + (360/$Points); + $XLast = $XPos; + $YLast = $YPos; + } + } + + if (isset($Plots[0])) + { + $Plots[] = $Plots[0]; + $Plots[] = $Plots[1]; + + $this->Layers[0] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White = $this->AllocateColor($this->Layers[0],255,255,255); + imagefilledrectangle($this->Layers[0],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[0],$C_White); + + $C_Graph = $this->AllocateColor($this->Layers[0],$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + imagefilledpolygon($this->Layers[0],$Plots,(count($Plots)+1)/2,$C_Graph); + + imagecopymerge($this->Picture,$this->Layers[0],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[0]); + + for($i=0;$i<=count($Plots)-4;$i=$i+2) + $this->drawLine($Plots[$i]+$this->GArea_X1,$Plots[$i+1]+$this->GArea_Y1,$Plots[$i+2]+$this->GArea_X1,$Plots[$i+3]+$this->GArea_Y1,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + } + + $GraphID++; + } + } + + /* This function draw a flat pie chart */ + function drawBasicPieGraph($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$R=255,$G=255,$B=255,$Decimals=0) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawBasicPieGraph",$DataDescription,FALSE); + $this->validateData("drawBasicPieGraph",$Data); + + /* Determine pie sum */ + $Series = 0; $PieSum = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + if ( $ColName != $DataDescription["Position"] ) + { + $Series++; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + $PieSum = $PieSum + $Data[$Key][$ColName]; $iValues[] = $Data[$Key][$ColName]; $iLabels[] = $Data[$Key][$DataDescription["Position"]]; + } + } + } + + /* Validate serie */ + if ( $Series != 1 ) + RaiseFatal("Pie chart can only accept one serie of data."); + + $SpliceRatio = 360 / $PieSum; + $SplicePercent = 100 / $PieSum; + + /* Calculate all polygons */ + $Angle = 0; $TopPlots = ""; + foreach($iValues as $Key => $Value) + { + $TopPlots[$Key][] = $XPos; + $TopPlots[$Key][] = $YPos; + + /* Process labels position & size */ + $Caption = ""; + if ( !($DrawLabels == PIE_NOLABEL) ) + { + $TAngle = $Angle+($Value*$SpliceRatio/2); + if ($DrawLabels == PIE_PERCENTAGE) + $Caption = (round($Value * pow(10,$Decimals) * $SplicePercent)/pow(10,$Decimals))."%"; + elseif ($DrawLabels == PIE_LABELS) + $Caption = $iLabels[$Key]; + elseif ($DrawLabels == PIE_PERCENTAGE_LABEL) + $Caption = $iLabels[$Key]."\r\n".(round($Value * pow(10,$Decimals) * $SplicePercent)/pow(10,$Decimals))."%"; + elseif ($DrawLabels == PIE_PERCENTAGE_LABEL) + $Caption = $iLabels[$Key]."\r\n".(round($Value * pow(10,$Decimals) * $SplicePercent)/pow(10,$Decimals))."%"; + + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Caption); + $TextWidth = $Position[2]-$Position[0]; + $TextHeight = abs($Position[1])+abs($Position[3]); + + $TX = cos(($TAngle) * 3.1418 / 180 ) * ($Radius+10) + $XPos; + + if ( $TAngle > 0 && $TAngle < 180 ) + $TY = sin(($TAngle) * 3.1418 / 180 ) * ($Radius+10) + $YPos + 4; + else + $TY = sin(($TAngle) * 3.1418 / 180 ) * ($Radius+4) + $YPos - ($TextHeight/2); + + if ( $TAngle > 90 && $TAngle < 270 ) + $TX = $TX - $TextWidth; + + $C_TextColor = $this->AllocateColor($this->Picture,70,70,70); + imagettftext($this->Picture,$this->FontSize,0,$TX,$TY,$C_TextColor,$this->FontName,$Caption); + } + + /* Process pie slices */ + for($iAngle=$Angle;$iAngle<=$Angle+$Value*$SpliceRatio;$iAngle=$iAngle+.5) + { + $TopX = cos($iAngle * 3.1418 / 180 ) * $Radius + $XPos; + $TopY = sin($iAngle * 3.1418 / 180 ) * $Radius + $YPos; + + $TopPlots[$Key][] = $TopX; + $TopPlots[$Key][] = $TopY; + } + + $TopPlots[$Key][] = $XPos; + $TopPlots[$Key][] = $YPos; + + $Angle = $iAngle; + } + $PolyPlots = $TopPlots; + + /* Set array values type to float --- PHP Bug with imagefilledpolygon casting to integer */ + foreach ($TopPlots as $Key => $Value) + { foreach ($TopPlots[$Key] as $Key2 => $Value2) { settype($TopPlots[$Key][$Key2],"float"); } } + + /* Draw Top polygons */ + foreach ($PolyPlots as $Key => $Value) + { + $C_GraphLo = $this->AllocateColor($this->Picture,$this->Palette[$Key]["R"],$this->Palette[$Key]["G"],$this->Palette[$Key]["B"]); + imagefilledpolygon($this->Picture,$PolyPlots[$Key],(count($PolyPlots[$Key])+1)/2,$C_GraphLo); + } + + $this->drawCircle($XPos-.5,$YPos-.5,$Radius,$R,$G,$B); + $this->drawCircle($XPos-.5,$YPos-.5,$Radius+.5,$R,$G,$B); + + /* Draw Top polygons */ + foreach ($TopPlots as $Key => $Value) + { + for($j=0;$j<=count($TopPlots[$Key])-4;$j=$j+2) + $this->drawLine($TopPlots[$Key][$j],$TopPlots[$Key][$j+1],$TopPlots[$Key][$j+2],$TopPlots[$Key][$j+3],$R,$G,$B); + } + } + + function drawFlatPieGraphWithShadow($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$SpliceDistance=0,$Decimals=0) + { + $this->drawFlatPieGraph($Data,$DataDescription,$XPos+$this->ShadowXDistance,$YPos+$this->ShadowYDistance,$Radius,PIE_NOLABEL,$SpliceDistance,$Decimals,TRUE); + $this->drawFlatPieGraph($Data,$DataDescription,$XPos,$YPos,$Radius,$DrawLabels,$SpliceDistance,$Decimals,FALSE); + } + + /* This function draw a flat pie chart */ + function drawFlatPieGraph($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$SpliceDistance=0,$Decimals=0,$AllBlack=FALSE) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawFlatPieGraph",$DataDescription,FALSE); + $this->validateData("drawFlatPieGraph",$Data); + + $ShadowStatus = $this->ShadowActive ; $this->ShadowActive = FALSE; + + /* Determine pie sum */ + $Series = 0; $PieSum = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + if ( $ColName != $DataDescription["Position"] ) + { + $Series++; + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName])) + $PieSum = $PieSum + $Data[$Key][$ColName]; $iValues[] = $Data[$Key][$ColName]; $iLabels[] = $Data[$Key][$DataDescription["Position"]]; + } + } + } + + /* Validate serie */ + if ( $Series != 1 ) + { + RaiseFatal("Pie chart can only accept one serie of data."); + return(0); + } + + $SpliceRatio = 360 / $PieSum; + $SplicePercent = 100 / $PieSum; + + /* Calculate all polygons */ + $Angle = 0; $TopPlots = ""; + foreach($iValues as $Key => $Value) + { + $XOffset = cos(($Angle+($Value/2*$SpliceRatio)) * 3.1418 / 180 ) * $SpliceDistance; + $YOffset = sin(($Angle+($Value/2*$SpliceRatio)) * 3.1418 / 180 ) * $SpliceDistance; + + $TopPlots[$Key][] = round($XPos + $XOffset); + $TopPlots[$Key][] = round($YPos + $YOffset); + + if ( $AllBlack ) + { $Rc = $this->ShadowRColor; $Gc = $this->ShadowGColor; $Bc = $this->ShadowBColor; } + else + { $Rc = $this->Palette[$Key]["R"]; $Gc = $this->Palette[$Key]["G"]; $Bc = $this->Palette[$Key]["B"]; } + + $XLineLast = ""; $YLineLast = ""; + + /* Process labels position & size */ + $Caption = ""; + if ( !($DrawLabels == PIE_NOLABEL) ) + { + $TAngle = $Angle+($Value*$SpliceRatio/2); + if ($DrawLabels == PIE_PERCENTAGE) + $Caption = (round($Value * pow(10,$Decimals) * $SplicePercent)/pow(10,$Decimals))."%"; + elseif ($DrawLabels == PIE_LABELS) + $Caption = $iLabels[$Key]; + elseif ($DrawLabels == PIE_PERCENTAGE_LABEL) + $Caption = $iLabels[$Key]."\r\n".(round($Value * pow(10,$Decimals) * $SplicePercent)/pow(10,$Decimals))."%"; + elseif ($DrawLabels == PIE_PERCENTAGE_LABEL) + $Caption = $iLabels[$Key]."\r\n".(round($Value * pow(10,$Decimals) * $SplicePercent)/pow(10,$Decimals))."%"; + + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Caption); + $TextWidth = $Position[2]-$Position[0]; + $TextHeight = abs($Position[1])+abs($Position[3]); + + $TX = cos(($TAngle) * 3.1418 / 180 ) * ($Radius+10+$SpliceDistance) + $XPos; + + if ( $TAngle > 0 && $TAngle < 180 ) + $TY = sin(($TAngle) * 3.1418 / 180 ) * ($Radius+10+$SpliceDistance) + $YPos + 4; + else + $TY = sin(($TAngle) * 3.1418 / 180 ) * ($Radius+$SpliceDistance+4) + $YPos - ($TextHeight/2); + + if ( $TAngle > 90 && $TAngle < 270 ) + $TX = $TX - $TextWidth; + + $C_TextColor = $this->AllocateColor($this->Picture,70,70,70); + imagettftext($this->Picture,$this->FontSize,0,$TX,$TY,$C_TextColor,$this->FontName,$Caption); + } + + /* Process pie slices */ + if ( !$AllBlack ) + $LineColor = $this->AllocateColor($this->Picture,$Rc,$Gc,$Bc); + else + $LineColor = $this->AllocateColor($this->Picture,$Rc,$Gc,$Bc); + + $XLineLast = ""; $YLineLast = ""; + for($iAngle=$Angle;$iAngle<=$Angle+$Value*$SpliceRatio;$iAngle=$iAngle+.5) + { + $PosX = cos($iAngle * 3.1418 / 180 ) * $Radius + $XPos + $XOffset; + $PosY = sin($iAngle * 3.1418 / 180 ) * $Radius + $YPos + $YOffset; + + $TopPlots[$Key][] = round($PosX); $TopPlots[$Key][] = round($PosY); + + if ( $iAngle == $Angle || $iAngle == $Angle+$Value*$SpliceRatio || $iAngle +.5 > $Angle+$Value*$SpliceRatio) + $this->drawLine($XPos+$XOffset,$YPos+$YOffset,$PosX,$PosY,$Rc,$Gc,$Bc); + + if ( $XLineLast != "" ) + $this->drawLine($XLineLast,$YLineLast,$PosX,$PosY,$Rc,$Gc,$Bc); + + $XLineLast = $PosX; $YLineLast = $PosY; + } + + $TopPlots[$Key][] = round($XPos + $XOffset); $TopPlots[$Key][] = round($YPos + $YOffset); + + $Angle = $iAngle; + } + $PolyPlots = $TopPlots; + + /* Draw Top polygons */ + foreach ($PolyPlots as $Key => $Value) + { + if ( !$AllBlack ) + $C_GraphLo = $this->AllocateColor($this->Picture,$this->Palette[$Key]["R"],$this->Palette[$Key]["G"],$this->Palette[$Key]["B"]); + else + $C_GraphLo = $this->AllocateColor($this->Picture,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor); + + imagefilledpolygon($this->Picture,$PolyPlots[$Key],(count($PolyPlots[$Key])+1)/2,$C_GraphLo); + } + $this->ShadowActive = $ShadowStatus; + } + + /* This function draw a pseudo-3D pie chart */ + function drawPieGraph($Data,$DataDescription,$XPos,$YPos,$Radius=100,$DrawLabels=PIE_NOLABEL,$EnhanceColors=TRUE,$Skew=60,$SpliceHeight=20,$SpliceDistance=0,$Decimals=0) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawPieGraph",$DataDescription,FALSE); + $this->validateData("drawPieGraph",$Data); + + /* Determine pie sum */ + $Series = 0; $PieSum = 0; $rPieSum = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + if ( $ColName != $DataDescription["Position"] ) + { + $Series++; + foreach ( $Data as $Key => $Values ) + if ( isset($Data[$Key][$ColName])) + { + if ( $Data[$Key][$ColName] == 0 ) + { $iValues[] = 0; $rValues[] = 0; $iLabels[] = $Data[$Key][$DataDescription["Position"]]; } + // Removed : $PieSum++; $rValues[] = 1; + else + { $PieSum += $Data[$Key][$ColName]; $iValues[] = $Data[$Key][$ColName]; $iLabels[] = $Data[$Key][$DataDescription["Position"]]; $rValues[] = $Data[$Key][$ColName]; $rPieSum += $Data[$Key][$ColName];} + } + } + } + + /* Validate serie */ + if ( $Series != 1 ) + RaiseFatal("Pie chart can only accept one serie of data."); + + $SpliceDistanceRatio = $SpliceDistance; + $SkewHeight = ($Radius * $Skew) / 100; + $SpliceRatio = (360 - $SpliceDistanceRatio * count($iValues) ) / $PieSum; + $SplicePercent = 100 / $PieSum; + $rSplicePercent = 100 / $rPieSum; + + /* Calculate all polygons */ + $Angle = 0; $CDev = 5; + $TopPlots = ""; $BotPlots = ""; + $aTopPlots = ""; $aBotPlots = ""; + foreach($iValues as $Key => $Value) + { + $XCenterPos = cos(($Angle-$CDev+($Value*$SpliceRatio+$SpliceDistanceRatio)/2) * 3.1418 / 180 ) * $SpliceDistance + $XPos; + $YCenterPos = sin(($Angle-$CDev+($Value*$SpliceRatio+$SpliceDistanceRatio)/2) * 3.1418 / 180 ) * $SpliceDistance + $YPos; + $XCenterPos2 = cos(($Angle+$CDev+($Value*$SpliceRatio+$SpliceDistanceRatio)/2) * 3.1418 / 180 ) * $SpliceDistance + $XPos; + $YCenterPos2 = sin(($Angle+$CDev+($Value*$SpliceRatio+$SpliceDistanceRatio)/2) * 3.1418 / 180 ) * $SpliceDistance + $YPos; + + $TopPlots[$Key][] = round($XCenterPos); $BotPlots[$Key][] = round($XCenterPos); + $TopPlots[$Key][] = round($YCenterPos); $BotPlots[$Key][] = round($YCenterPos + $SpliceHeight); + $aTopPlots[$Key][] = $XCenterPos; $aBotPlots[$Key][] = $XCenterPos; + $aTopPlots[$Key][] = $YCenterPos; $aBotPlots[$Key][] = $YCenterPos + $SpliceHeight; + + /* Process labels position & size */ + $Caption = ""; + if ( !($DrawLabels == PIE_NOLABEL) ) + { + $TAngle = $Angle+($Value*$SpliceRatio/2); + if ($DrawLabels == PIE_PERCENTAGE) + $Caption = (round($rValues[$Key] * pow(10,$Decimals) * $rSplicePercent)/pow(10,$Decimals))."%"; + elseif ($DrawLabels == PIE_LABELS) + $Caption = $iLabels[$Key]; + elseif ($DrawLabels == PIE_PERCENTAGE_LABEL) + $Caption = $iLabels[$Key]."\r\n".(round($Value * pow(10,$Decimals) * $SplicePercent)/pow(10,$Decimals))."%"; + + $Position = imageftbbox($this->FontSize,0,$this->FontName,$Caption); + $TextWidth = $Position[2]-$Position[0]; + $TextHeight = abs($Position[1])+abs($Position[3]); + + $TX = cos(($TAngle) * 3.1418 / 180 ) * ($Radius + 10)+ $XPos; + + if ( $TAngle > 0 && $TAngle < 180 ) + $TY = sin(($TAngle) * 3.1418 / 180 ) * ($SkewHeight + 10) + $YPos + $SpliceHeight + 4; + else + $TY = sin(($TAngle) * 3.1418 / 180 ) * ($SkewHeight + 4) + $YPos - ($TextHeight/2); + + if ( $TAngle > 90 && $TAngle < 270 ) + $TX = $TX - $TextWidth; + + $C_TextColor = $this->AllocateColor($this->Picture,70,70,70); + imagettftext($this->Picture,$this->FontSize,0,$TX,$TY,$C_TextColor,$this->FontName,$Caption); + } + + /* Process pie slices */ + for($iAngle=$Angle;$iAngle<=$Angle+$Value*$SpliceRatio;$iAngle=$iAngle+.5) + { + $TopX = cos($iAngle * 3.1418 / 180 ) * $Radius + $XPos; + $TopY = sin($iAngle * 3.1418 / 180 ) * $SkewHeight + $YPos; + + $TopPlots[$Key][] = round($TopX); $BotPlots[$Key][] = round($TopX); + $TopPlots[$Key][] = round($TopY); $BotPlots[$Key][] = round($TopY + $SpliceHeight); + $aTopPlots[$Key][] = $TopX; $aBotPlots[$Key][] = $TopX; + $aTopPlots[$Key][] = $TopY; $aBotPlots[$Key][] = $TopY + $SpliceHeight; + } + + $TopPlots[$Key][] = round($XCenterPos2); $BotPlots[$Key][] = round($XCenterPos2); + $TopPlots[$Key][] = round($YCenterPos2); $BotPlots[$Key][] = round($YCenterPos2 + $SpliceHeight); + $aTopPlots[$Key][] = $XCenterPos2; $aBotPlots[$Key][] = $XCenterPos2; + $aTopPlots[$Key][] = $YCenterPos2; $aBotPlots[$Key][] = $YCenterPos2 + $SpliceHeight; + + $Angle = $iAngle + $SpliceDistanceRatio; + } + + /* Draw Bottom polygons */ + foreach($iValues as $Key => $Value) + { + $C_GraphLo = $this->AllocateColor($this->Picture,$this->Palette[$Key]["R"],$this->Palette[$Key]["G"],$this->Palette[$Key]["B"],-20); + imagefilledpolygon($this->Picture,$BotPlots[$Key],(count($BotPlots[$Key])+1)/2,$C_GraphLo); + + if ( $EnhanceColors ) { $En = -10; } else { $En = 0; } + + for($j=0;$j<=count($aBotPlots[$Key])-4;$j=$j+2) + $this->drawLine($aBotPlots[$Key][$j],$aBotPlots[$Key][$j+1],$aBotPlots[$Key][$j+2],$aBotPlots[$Key][$j+3],$this->Palette[$Key]["R"]+$En,$this->Palette[$Key]["G"]+$En,$this->Palette[$Key]["B"]+$En); + } + + /* Draw pie layers */ + if ( $EnhanceColors ) { $ColorRatio = 30 / $SpliceHeight; } else { $ColorRatio = 25 / $SpliceHeight; } + for($i=$SpliceHeight-1;$i>=1;$i--) + { + foreach($iValues as $Key => $Value) + { + $C_GraphLo = $this->AllocateColor($this->Picture,$this->Palette[$Key]["R"],$this->Palette[$Key]["G"],$this->Palette[$Key]["B"],-10); + $Plots = ""; $Plot = 0; + foreach($TopPlots[$Key] as $Key2 => $Value2) + { + $Plot++; + if ( $Plot % 2 == 1 ) + $Plots[] = $Value2; + else + $Plots[] = $Value2+$i; + } + imagefilledpolygon($this->Picture,$Plots,(count($Plots)+1)/2,$C_GraphLo); + + $Index = count($Plots); + if ($EnhanceColors ) {$ColorFactor = -20 + ($SpliceHeight - $i) * $ColorRatio; } else { $ColorFactor = 0; } + + $this->drawAntialiasPixel($Plots[0],$Plots[1],$this->Palette[$Key]["R"]+$ColorFactor,$this->Palette[$Key]["G"]+$ColorFactor,$this->Palette[$Key]["B"]+$ColorFactor); + $this->drawAntialiasPixel($Plots[2],$Plots[3],$this->Palette[$Key]["R"]+$ColorFactor,$this->Palette[$Key]["G"]+$ColorFactor,$this->Palette[$Key]["B"]+$ColorFactor); + $this->drawAntialiasPixel($Plots[$Index-4],$Plots[$Index-3],$this->Palette[$Key]["R"]+$ColorFactor,$this->Palette[$Key]["G"]+$ColorFactor,$this->Palette[$Key]["B"]+$ColorFactor); + } + } + + /* Draw Top polygons */ + for($Key=count($iValues)-1;$Key>=0;$Key--) + { + $C_GraphLo = $this->AllocateColor($this->Picture,$this->Palette[$Key]["R"],$this->Palette[$Key]["G"],$this->Palette[$Key]["B"]); + imagefilledpolygon($this->Picture,$TopPlots[$Key],(count($TopPlots[$Key])+1)/2,$C_GraphLo); + + if ( $EnhanceColors ) { $En = 10; } else { $En = 0; } + for($j=0;$j<=count($aTopPlots[$Key])-4;$j=$j+2) + $this->drawLine($aTopPlots[$Key][$j],$aTopPlots[$Key][$j+1],$aTopPlots[$Key][$j+2],$aTopPlots[$Key][$j+3],$this->Palette[$Key]["R"]+$En,$this->Palette[$Key]["G"]+$En,$this->Palette[$Key]["B"]+$En); + } + } + + /* This function can be used to set the background color */ + function drawBackground($R,$G,$B) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $C_Background = $this->AllocateColor($this->Picture,$R,$G,$B); + imagefilledrectangle($this->Picture,0,0,$this->XSize,$this->YSize,$C_Background); + } + + /* This function can be used to set the background color */ + function drawGraphAreaGradient($R,$G,$B,$Decay,$Target=TARGET_GRAPHAREA) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + if ( $Target == TARGET_GRAPHAREA ) { $X1 = $this->GArea_X1+1; $X2 = $this->GArea_X2-1; $Y1 = $this->GArea_Y1+1; $Y2 = $this->GArea_Y2; } + if ( $Target == TARGET_BACKGROUND ) { $X1 = 0; $X2 = $this->XSize; $Y1 = 0; $Y2 = $this->YSize; } + + /* Positive gradient */ + if ( $Decay > 0 ) + { + $YStep = ($Y2 - $Y1 - 2) / $Decay; + for($i=0;$i<=$Decay;$i++) + { + $R-=1;$G-=1;$B-=1; + $Yi1 = $Y1 + ( $i * $YStep ); + $Yi2 = ceil( $Yi1 + ( $i * $YStep ) + $YStep ); + if ( $Yi2 >= $Yi2 ) { $Yi2 = $Y2-1; } + + $C_Background = $this->AllocateColor($this->Picture,$R,$G,$B); + imagefilledrectangle($this->Picture,$X1,$Yi1,$X2,$Yi2,$C_Background); + } + } + + /* Negative gradient */ + if ( $Decay < 0 ) + { + $YStep = ($Y2 - $Y1 - 2) / -$Decay; + $Yi1 = $Y1; $Yi2 = $Y1+$YStep; + for($i=-$Decay;$i>=0;$i--) + { + $R+=1;$G+=1;$B+=1; + $C_Background = $this->AllocateColor($this->Picture,$R,$G,$B); + imagefilledrectangle($this->Picture,$X1,$Yi1,$X2,$Yi2,$C_Background); + + $Yi1+= $YStep; + $Yi2+= $YStep; + if ( $Yi2 >= $Yi2 ) { $Yi2 = $Y2-1; } + } + } + } + + /* This function create a rectangle with antialias */ + function drawRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $C_Rectangle = $this->AllocateColor($this->Picture,$R,$G,$B); + + $X1=$X1-.2;$Y1=$Y1-.2; + $X2=$X2+.2;$Y2=$Y2+.2; + $this->drawLine($X1,$Y1,$X2,$Y1,$R,$G,$B); + $this->drawLine($X2,$Y1,$X2,$Y2,$R,$G,$B); + $this->drawLine($X2,$Y2,$X1,$Y2,$R,$G,$B); + $this->drawLine($X1,$Y2,$X1,$Y1,$R,$G,$B); + } + + /* This function create a filled rectangle with antialias */ + function drawFilledRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B,$DrawBorder=TRUE,$Alpha=100,$NoFallBack=FALSE) + { + if ( $X2 < $X1 ) { list($X1, $X2) = array($X2, $X1); } + if ( $Y2 < $Y1 ) { list($Y1, $Y2) = array($Y2, $Y1); } + + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + if ( $Alpha == 100 ) + { + /* Process shadows */ + if ( $this->ShadowActive && !$NoFallBack ) + { + $this->drawFilledRectangle($X1+$this->ShadowXDistance,$Y1+$this->ShadowYDistance,$X2+$this->ShadowXDistance,$Y2+$this->ShadowYDistance,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor,FALSE,$this->ShadowAlpha,TRUE); + if ( $this->ShadowBlur != 0 ) + { + $AlphaDecay = ($this->ShadowAlpha / $this->ShadowBlur); + + for($i=1; $i<=$this->ShadowBlur; $i++) + $this->drawFilledRectangle($X1+$this->ShadowXDistance-$i/2,$Y1+$this->ShadowYDistance-$i/2,$X2+$this->ShadowXDistance-$i/2,$Y2+$this->ShadowYDistance-$i/2,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor,FALSE,$this->ShadowAlpha-$AlphaDecay*$i,TRUE); + for($i=1; $i<=$this->ShadowBlur; $i++) + $this->drawFilledRectangle($X1+$this->ShadowXDistance+$i/2,$Y1+$this->ShadowYDistance+$i/2,$X2+$this->ShadowXDistance+$i/2,$Y2+$this->ShadowYDistance+$i/2,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor,FALSE,$this->ShadowAlpha-$AlphaDecay*$i,TRUE); + } + } + + $C_Rectangle = $this->AllocateColor($this->Picture,$R,$G,$B); + imagefilledrectangle($this->Picture,round($X1),round($Y1),round($X2),round($Y2),$C_Rectangle); + } + else + { + $LayerWidth = abs($X2-$X1)+2; + $LayerHeight = abs($Y2-$Y1)+2; + + $this->Layers[0] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White = $this->AllocateColor($this->Layers[0],255,255,255); + imagefilledrectangle($this->Layers[0],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[0],$C_White); + + $C_Rectangle = $this->AllocateColor($this->Layers[0],$R,$G,$B); + imagefilledrectangle($this->Layers[0],round(1),round(1),round($LayerWidth-1),round($LayerHeight-1),$C_Rectangle); + + imagecopymerge($this->Picture,$this->Layers[0],round(min($X1,$X2)-1),round(min($Y1,$Y2)-1),0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[0]); + } + + if ( $DrawBorder ) + { + $ShadowSettings = $this->ShadowActive; $this->ShadowActive = FALSE; + $this->drawRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B); + $this->ShadowActive = $ShadowSettings; + } + } + + /* This function create a rectangle with rounded corners and antialias */ + function drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$R,$G,$B) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $C_Rectangle = $this->AllocateColor($this->Picture,$R,$G,$B); + + $Step = 90 / ((3.1418 * $Radius)/2); + + for($i=0;$i<=90;$i=$i+$Step) + { + $X = cos(($i+180)*3.1418/180) * $Radius + $X1 + $Radius; + $Y = sin(($i+180)*3.1418/180) * $Radius + $Y1 + $Radius; + $this->drawAntialiasPixel($X,$Y,$R,$G,$B); + + $X = cos(($i-90)*3.1418/180) * $Radius + $X2 - $Radius; + $Y = sin(($i-90)*3.1418/180) * $Radius + $Y1 + $Radius; + $this->drawAntialiasPixel($X,$Y,$R,$G,$B); + + $X = cos(($i)*3.1418/180) * $Radius + $X2 - $Radius; + $Y = sin(($i)*3.1418/180) * $Radius + $Y2 - $Radius; + $this->drawAntialiasPixel($X,$Y,$R,$G,$B); + + $X = cos(($i+90)*3.1418/180) * $Radius + $X1 + $Radius; + $Y = sin(($i+90)*3.1418/180) * $Radius + $Y2 - $Radius; + $this->drawAntialiasPixel($X,$Y,$R,$G,$B); + } + + $X1=$X1-.2;$Y1=$Y1-.2; + $X2=$X2+.2;$Y2=$Y2+.2; + $this->drawLine($X1+$Radius,$Y1,$X2-$Radius,$Y1,$R,$G,$B); + $this->drawLine($X2,$Y1+$Radius,$X2,$Y2-$Radius,$R,$G,$B); + $this->drawLine($X2-$Radius,$Y2,$X1+$Radius,$Y2,$R,$G,$B); + $this->drawLine($X1,$Y2-$Radius,$X1,$Y1+$Radius,$R,$G,$B); + } + + /* This function create a filled rectangle with rounded corners and antialias */ + function drawFilledRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$R,$G,$B) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $C_Rectangle = $this->AllocateColor($this->Picture,$R,$G,$B); + + $Step = 90 / ((3.1418 * $Radius)/2); + + for($i=0;$i<=90;$i=$i+$Step) + { + $Xi1 = cos(($i+180)*3.1418/180) * $Radius + $X1 + $Radius; + $Yi1 = sin(($i+180)*3.1418/180) * $Radius + $Y1 + $Radius; + + $Xi2 = cos(($i-90)*3.1418/180) * $Radius + $X2 - $Radius; + $Yi2 = sin(($i-90)*3.1418/180) * $Radius + $Y1 + $Radius; + + $Xi3 = cos(($i)*3.1418/180) * $Radius + $X2 - $Radius; + $Yi3 = sin(($i)*3.1418/180) * $Radius + $Y2 - $Radius; + + $Xi4 = cos(($i+90)*3.1418/180) * $Radius + $X1 + $Radius; + $Yi4 = sin(($i+90)*3.1418/180) * $Radius + $Y2 - $Radius; + + imageline($this->Picture,$Xi1,$Yi1,$X1+$Radius,$Yi1,$C_Rectangle); + imageline($this->Picture,$X2-$Radius,$Yi2,$Xi2,$Yi2,$C_Rectangle); + imageline($this->Picture,$X2-$Radius,$Yi3,$Xi3,$Yi3,$C_Rectangle); + imageline($this->Picture,$Xi4,$Yi4,$X1+$Radius,$Yi4,$C_Rectangle); + + $this->drawAntialiasPixel($Xi1,$Yi1,$R,$G,$B); + $this->drawAntialiasPixel($Xi2,$Yi2,$R,$G,$B); + $this->drawAntialiasPixel($Xi3,$Yi3,$R,$G,$B); + $this->drawAntialiasPixel($Xi4,$Yi4,$R,$G,$B); + } + + imagefilledrectangle($this->Picture,$X1,$Y1+$Radius,$X2,$Y2-$Radius,$C_Rectangle); + imagefilledrectangle($this->Picture,$X1+$Radius,$Y1,$X2-$Radius,$Y2,$C_Rectangle); + + $X1=$X1-.2;$Y1=$Y1-.2; + $X2=$X2+.2;$Y2=$Y2+.2; + $this->drawLine($X1+$Radius,$Y1,$X2-$Radius,$Y1,$R,$G,$B); + $this->drawLine($X2,$Y1+$Radius,$X2,$Y2-$Radius,$R,$G,$B); + $this->drawLine($X2-$Radius,$Y2,$X1+$Radius,$Y2,$R,$G,$B); + $this->drawLine($X1,$Y2-$Radius,$X1,$Y1+$Radius,$R,$G,$B); + } + + /* This function create a circle with antialias */ + function drawCircle($Xc,$Yc,$Height,$R,$G,$B,$Width=0) + { + if ( $Width == 0 ) { $Width = $Height; } + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $C_Circle = $this->AllocateColor($this->Picture,$R,$G,$B); + $Step = 360 / (2 * 3.1418 * max($Width,$Height)); + + for($i=0;$i<=360;$i=$i+$Step) + { + $X = cos($i*3.1418/180) * $Height + $Xc; + $Y = sin($i*3.1418/180) * $Width + $Yc; + $this->drawAntialiasPixel($X,$Y,$R,$G,$B); + } + } + + /* This function create a filled circle/ellipse with antialias */ + function drawFilledCircle($Xc,$Yc,$Height,$R,$G,$B,$Width=0) + { + if ( $Width == 0 ) { $Width = $Height; } + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $C_Circle = $this->AllocateColor($this->Picture,$R,$G,$B); + $Step = 360 / (2 * 3.1418 * max($Width,$Height)); + + for($i=90;$i<=270;$i=$i+$Step) + { + $X1 = cos($i*3.1418/180) * $Height + $Xc; + $Y1 = sin($i*3.1418/180) * $Width + $Yc; + $X2 = cos((180-$i)*3.1418/180) * $Height + $Xc; + $Y2 = sin((180-$i)*3.1418/180) * $Width + $Yc; + + $this->drawAntialiasPixel($X1-1,$Y1-1,$R,$G,$B); + $this->drawAntialiasPixel($X2-1,$Y2-1,$R,$G,$B); + + if ( ($Y1-1) > $Yc - max($Width,$Height) ) + imageline($this->Picture,$X1,$Y1-1,$X2-1,$Y2-1,$C_Circle); + } + } + + /* This function will draw a filled ellipse */ + function drawEllipse($Xc,$Yc,$Height,$Width,$R,$G,$B) + { $this->drawCircle($Xc,$Yc,$Height,$R,$G,$B,$Width); } + + /* This function will draw an ellipse */ + function drawFilledEllipse($Xc,$Yc,$Height,$Width,$R,$G,$B) + { $this->drawFilledCircle($Xc,$Yc,$Height,$R,$G,$B,$Width); } + + /* This function create a line with antialias */ + function drawLine($X1,$Y1,$X2,$Y2,$R,$G,$B,$GraphFunction=FALSE) + { + if ( $this->LineDotSize > 1 ) { $this->drawDottedLine($X1,$Y1,$X2,$Y2,$this->LineDotSize,$R,$G,$B,$GraphFunction); return(0); } + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $Distance = sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1)); + if ( $Distance == 0 ) + return(-1); + $XStep = ($X2-$X1) / $Distance; + $YStep = ($Y2-$Y1) / $Distance; + + for($i=0;$i<=$Distance;$i++) + { + $X = $i * $XStep + $X1; + $Y = $i * $YStep + $Y1; + + if ( ($X >= $this->GArea_X1 && $X <= $this->GArea_X2 && $Y >= $this->GArea_Y1 && $Y <= $this->GArea_Y2) || !$GraphFunction ) + { + if ( $this->LineWidth == 1 ) + $this->drawAntialiasPixel($X,$Y,$R,$G,$B); + else + { + $StartOffset = -($this->LineWidth/2); $EndOffset = ($this->LineWidth/2); + for($j=$StartOffset;$j<=$EndOffset;$j++) + $this->drawAntialiasPixel($X+$j,$Y+$j,$R,$G,$B); + } + } + } + } + + /* This function create a line with antialias */ + function drawDottedLine($X1,$Y1,$X2,$Y2,$DotSize,$R,$G,$B,$GraphFunction=FALSE) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $Distance = sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1)); + + $XStep = ($X2-$X1) / $Distance; + $YStep = ($Y2-$Y1) / $Distance; + + $DotIndex = 0; + for($i=0;$i<=$Distance;$i++) + { + $X = $i * $XStep + $X1; + $Y = $i * $YStep + $Y1; + + if ( $DotIndex <= $DotSize) + { + if ( ($X >= $this->GArea_X1 && $X <= $this->GArea_X2 && $Y >= $this->GArea_Y1 && $Y <= $this->GArea_Y2) || !$GraphFunction ) + { + if ( $this->LineWidth == 1 ) + $this->drawAntialiasPixel($X,$Y,$R,$G,$B); + else + { + $StartOffset = -($this->LineWidth/2); $EndOffset = ($this->LineWidth/2); + for($j=$StartOffset;$j<=$EndOffset;$j++) + $this->drawAntialiasPixel($X+$j,$Y+$j,$R,$G,$B); + } + } + } + + $DotIndex++; + if ( $DotIndex == $DotSize * 2 ) + $DotIndex = 0; + } + } + + /* Load a PNG file and draw it over the chart */ + function drawFromPNG($FileName,$X,$Y,$Alpha=100) + { $this->drawFromPicture(1,$FileName,$X,$Y,$Alpha); } + + /* Load a GIF file and draw it over the chart */ + function drawFromGIF($FileName,$X,$Y,$Alpha=100) + { $this->drawFromPicture(2,$FileName,$X,$Y,$Alpha); } + + /* Load a JPEG file and draw it over the chart */ + function drawFromJPG($FileName,$X,$Y,$Alpha=100) + { $this->drawFromPicture(3,$FileName,$X,$Y,$Alpha); } + + /* Generic loader function for external pictures */ + function drawFromPicture($PicType,$FileName,$X,$Y,$Alpha=100) + { + if ( file_exists($FileName)) + { + $Infos = getimagesize($FileName); + $Width = $Infos[0]; + $Height = $Infos[1]; + if ( $PicType == 1 ) { $Raster = imagecreatefrompng($FileName); } + if ( $PicType == 2 ) { $Raster = imagecreatefromgif($FileName); } + if ( $PicType == 3 ) { $Raster = imagecreatefromjpeg($FileName); } + + imagecopymerge($this->Picture,$Raster,$X,$Y,0,0,$Width,$Height,$Alpha); + imagedestroy($Raster); + } + } + + /* Draw an alpha pixel */ + function drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize ) + return(-1); + + $RGB2 = imagecolorat($this->Picture, $X, $Y); + $R2 = ($RGB2 >> 16) & 0xFF; + $G2 = ($RGB2 >> 8) & 0xFF; + $B2 = $RGB2 & 0xFF; + + $iAlpha = (100 - $Alpha)/100; + $Alpha = $Alpha / 100; + + $Ra = floor($R*$Alpha+$R2*$iAlpha); + $Ga = floor($G*$Alpha+$G2*$iAlpha); + $Ba = floor($B*$Alpha+$B2*$iAlpha); + + $C_Aliased = $this->AllocateColor($this->Picture,$Ra,$Ga,$Ba); + imagesetpixel($this->Picture,$X,$Y,$C_Aliased); + } + + /* Color helper */ + function AllocateColor($Picture,$R,$G,$B,$Factor=0) + { + $R = $R + $Factor; + $G = $G + $Factor; + $B = $B + $Factor; + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + return(imagecolorallocate($Picture,$R,$G,$B)); + } + + /* Add a border to the picture */ + function addBorder($Size=3,$R=0,$G=0,$B=0) + { + $Width = $this->XSize+2*$Size; + $Height = $this->YSize+2*$Size; + + $Resampled = imagecreatetruecolor($Width,$Height); + $C_Background = $this->AllocateColor($Resampled,$R,$G,$B); + imagefilledrectangle($Resampled,0,0,$Width,$Height,$C_Background); + + imagecopy($Resampled,$this->Picture,$Size,$Size,0,0,$this->XSize,$this->YSize); + imagedestroy($this->Picture); + + $this->XSize = $Width; + $this->YSize = $Height; + + $this->Picture = imagecreatetruecolor($this->XSize,$this->YSize); + $C_White = $this->AllocateColor($this->Picture,255,255,255); + imagefilledrectangle($this->Picture,0,0,$this->XSize,$this->YSize,$C_White); + imagecolortransparent($this->Picture,$C_White); + imagecopy($this->Picture,$Resampled,0,0,0,0,$this->XSize,$this->YSize); + } + + /* Render the current picture to a file */ + function Render($FileName) + { + if ( $this->ErrorReporting ) + $this->printErrors($this->ErrorInterface); + + /* Save image map if requested */ + if ( $this->BuildMap ) + $this->SaveImageMap(); + + imagepng($this->Picture,$FileName); + } + + /* Render the current picture to STDOUT */ + function Stroke() + { + if ( $this->ErrorReporting ) + $this->printErrors("GD"); + + /* Save image map if requested */ + if ( $this->BuildMap ) + $this->SaveImageMap(); + + header('Content-type: image/png'); + imagepng($this->Picture); + } + + /* Private functions for internal processing */ + function drawAntialiasPixel($X,$Y,$R,$G,$B,$Alpha=100,$NoFallBack=FALSE) + { + /* Process shadows */ + if ( $this->ShadowActive && !$NoFallBack ) + { + $this->drawAntialiasPixel($X+$this->ShadowXDistance,$Y+$this->ShadowYDistance,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor,$this->ShadowAlpha,TRUE); + if ( $this->ShadowBlur != 0 ) + { + $AlphaDecay = ($this->ShadowAlpha / $this->ShadowBlur); + + for($i=1; $i<=$this->ShadowBlur; $i++) + $this->drawAntialiasPixel($X+$this->ShadowXDistance-$i/2,$Y+$this->ShadowYDistance-$i/2,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor,$this->ShadowAlpha-$AlphaDecay*$i,TRUE); + for($i=1; $i<=$this->ShadowBlur; $i++) + $this->drawAntialiasPixel($X+$this->ShadowXDistance+$i/2,$Y+$this->ShadowYDistance+$i/2,$this->ShadowRColor,$this->ShadowGColor,$this->ShadowBColor,$this->ShadowAlpha-$AlphaDecay*$i,TRUE); + } + } + + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $Plot = ""; + $Xi = floor($X); + $Yi = floor($Y); + + if ( $Xi == $X && $Yi == $Y) + { + if ( $Alpha == 100 ) + { + $C_Aliased = $this->AllocateColor($this->Picture,$R,$G,$B); + imagesetpixel($this->Picture,$X,$Y,$C_Aliased); + } + else + $this->drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B); + } + else + { + $Alpha1 = (((1 - ($X - floor($X))) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha; + if ( $Alpha1 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi,$Alpha1,$R,$G,$B); } + + $Alpha2 = ((($X - floor($X)) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha; + if ( $Alpha2 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi,$Alpha2,$R,$G,$B); } + + $Alpha3 = (((1 - ($X - floor($X))) * ($Y - floor($Y)) * 100) / 100) * $Alpha; + if ( $Alpha3 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi+1,$Alpha3,$R,$G,$B); } + + $Alpha4 = ((($X - floor($X)) * ($Y - floor($Y)) * 100) / 100) * $Alpha; + if ( $Alpha4 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi+1,$Alpha4,$R,$G,$B); } + } + } + + /* Validate data contained in the description array */ + function validateDataDescription($FunctionName,&$DataDescription,$DescriptionRequired=TRUE) + { + if (!isset($DataDescription["Position"])) + { + $this->Errors[] = "[Warning] ".$FunctionName." - Y Labels are not set."; + $DataDescription["Position"] = "Name"; + } + + if ( $DescriptionRequired ) + { + if (!isset($DataDescription["Description"])) + { + $this->Errors[] = "[Warning] ".$FunctionName." - Series descriptions are not set."; + foreach($DataDescription["Values"] as $key => $Value) + { + $DataDescription["Description"][$Value] = $Value; + } + } + + if (count($DataDescription["Description"]) < count($DataDescription["Values"])) + { + $this->Errors[] = "[Warning] ".$FunctionName." - Some series descriptions are not set."; + foreach($DataDescription["Values"] as $key => $Value) + { + if ( !isset($DataDescription["Description"][$Value])) + $DataDescription["Description"][$Value] = $Value; + } + } + } + } + + /* Validate data contained in the data array */ + function validateData($FunctionName,&$Data) + { + $DataSummary = array(); + + foreach($Data as $key => $Values) + { + foreach($Values as $key2 => $Value) + { + if (!isset($DataSummary[$key2])) + $DataSummary[$key2] = 1; + else + $DataSummary[$key2]++; + } + } + + if ( max($DataSummary) == 0 ) + $this->Errors[] = "[Warning] ".$FunctionName." - No data set."; + + foreach($DataSummary as $key => $Value) + { + if ($Value < max($DataSummary)) + { + $this->Errors[] = "[Warning] ".$FunctionName." - Missing data in serie ".$key."."; + } + } + } + + /* Print all error messages on the CLI or graphically */ + function printErrors($Mode="CLI") + { + if (count($this->Errors) == 0) + return(0); + + if ( $Mode == "CLI" ) + { + foreach($this->Errors as $key => $Value) + echo $Value."\r\n"; + } + elseif ( $Mode == "GD" ) + { + $this->setLineStyle($Width=1); + $MaxWidth = 0; + foreach($this->Errors as $key => $Value) + { + $Position = imageftbbox($this->ErrorFontSize,0,$this->ErrorFontName,$Value); + $TextWidth = $Position[2]-$Position[0]; + if ( $TextWidth > $MaxWidth ) { $MaxWidth = $TextWidth; } + } + $this->drawFilledRoundedRectangle($this->XSize-($MaxWidth+20),$this->YSize-(20+(($this->ErrorFontSize+4)*count($this->Errors))),$this->XSize-10,$this->YSize-10,6,233,185,185); + $this->drawRoundedRectangle($this->XSize-($MaxWidth+20),$this->YSize-(20+(($this->ErrorFontSize+4)*count($this->Errors))),$this->XSize-10,$this->YSize-10,6,193,145,145); + + $C_TextColor = $this->AllocateColor($this->Picture,133,85,85); + $YPos = $this->YSize - (18 + (count($this->Errors)-1) * ($this->ErrorFontSize + 4)); + foreach($this->Errors as $key => $Value) + { + imagettftext($this->Picture,$this->ErrorFontSize,0,$this->XSize-($MaxWidth+15),$YPos,$C_TextColor,$this->ErrorFontName,$Value); + $YPos = $YPos + ($this->ErrorFontSize + 4); + } + } + } + + /* Activate the image map creation process */ + function setImageMap($Mode=TRUE,$GraphID="MyGraph") + { + $this->BuildMap = $Mode; + $this->MapID = $GraphID; + } + + /* Add a box into the image map */ + function addToImageMap($X1,$Y1,$X2,$Y2,$SerieName,$Value,$CallerFunction) + { + if ( $this->MapFunction == NULL || $this->MapFunction == $CallerFunction ) + { + $this->ImageMap[] = round($X1).",".round($Y1).",".round($X2).",".round($Y2).",".$SerieName.",".$Value; + $this->MapFunction = $CallerFunction; + } + } + + /* Load and cleanup the image map from disk */ + function getImageMap($MapName,$Flush=TRUE) + { + /* Strip HTML query strings */ + $Values = $this->tmpFolder.$MapName; + $Value = split("\?",$Values); + $FileName = $Value[0]; + + if ( file_exists($FileName) ) + { + $Handle = fopen($FileName, "r"); + $MapContent = fread($Handle, filesize($FileName)); + fclose($Handle); + echo $MapContent; + + if ( $Flush ) + unlink($FileName); + + exit(); + } + else + { + header("HTTP/1.0 404 Not Found"); + exit(); + } + } + + /* Save the image map to the disk */ + function SaveImageMap() + { + if ( !$this->BuildMap ) { return(-1); } + + if ( $this->ImageMap == NULL ) + { + $this->Errors[] = "[Warning] SaveImageMap - Image map is empty."; + return(-1); + } + + $Handle = fopen($this->tmpFolder.$this->MapID, 'w'); + if ( !$Handle ) + { + $this->Errors[] = "[Warning] SaveImageMap - Cannot save the image map."; + return(-1); + } + else + { + foreach($this->ImageMap as $Key => $Value) + fwrite($Handle, htmlentities($Value)."\r"); + } + fclose ($Handle); + } + + /* Convert seconds to a time format string */ + function ToTime($Value) + { + $Hour = floor($Value/3600); + $Minute = floor(($Value - $Hour*3600)/60); + $Second = floor($Value - $Hour*3600 - $Minute*60); + + if (strlen($Hour) == 1 ) { $Hour = "0".$Hour; } + if (strlen($Minute) == 1 ) { $Minute = "0".$Minute; } + if (strlen($Second) == 1 ) { $Second = "0".$Second; } + + return($Hour.":".$Minute.":".$Second); + } + + /* Convert to metric system */ + function ToMetric($Value) + { + $Go = floor($Value/1000000000); + $Mo = floor(($Value - $Go*1000000000)/1000000); + $Ko = floor(($Value - $Go*1000000000 - $Mo*1000000)/1000); + $o = floor($Value - $Go*1000000000 - $Mo*1000000 - $Ko*1000); + + if ($Go != 0) { return($Go.".".$Mo."g"); } + if ($Mo != 0) { return($Mo.".".$ko."m"); } + if ($Ko != 0) { return($Ko.".".$o)."k"; } + return($o); + } + + /* Convert to curency */ + function ToCurrency($Value) + { + $Go = floor($Value/1000000000); + $Mo = floor(($Value - $Go*1000000000)/1000000); + $Ko = floor(($Value - $Go*1000000000 - $Mo*1000000)/1000); + $o = floor($Value - $Go*1000000000 - $Mo*1000000 - $Ko*1000); + + if ( strlen($o) == 1 ) { $o = "00".$o; } + if ( strlen($o) == 2 ) { $o = "0".$o; } + + $ResultString = $o; + if ( $Ko != 0 ) { $ResultString = $Ko.".".$ResultString; } + if ( $Mo != 0 ) { $ResultString = $Mo.".".$ResultString; } + if ( $Go != 0 ) { $ResultString = $Go.".".$ResultString; } + + $ResultString = $this->Currency.$ResultString; + return($ResultString); + } + + /* Set date format for axis labels */ + function setDateFormat($Format) + { + $this->DateFormat = $Format; + } + + /* Convert TS to a date format string */ + function ToDate($Value) + { + return(date($this->DateFormat,$Value)); + } + + /* Check if a number is a full integer (for scaling) */ + function isRealInt($Value) + { + if ($Value == floor($Value)) + return(TRUE); + return(FALSE); + } + } + + function RaiseFatal($Message) + { + echo "[FATAL] ".$Message."\r\n"; + exit(); + } +?> \ No newline at end of file diff --git a/pChart/_pData.class b/pChart/_pData.class new file mode 100644 index 0000000..49d2fcc --- /dev/null +++ b/pChart/_pData.class @@ -0,0 +1,260 @@ +<?php + /* + pData - Simplifying data population for pChart + Copyright (C) 2008 Jean-Damien POGOLOTTI + Version 1.13 last updated on 08/17/08 + + http://pchart.sourceforge.net + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 1,2,3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + Class initialisation : + pData() + Data populating methods : + ImportFromCSV($FileName,$Delimiter=",",$DataColumns=-1,$HasHeader=FALSE,$DataName=-1) + AddPoint($Value,$Serie="Serie1",$Description="") + Series manipulation methods : + AddSerie($SerieName="Serie1") + AddAllSeries() + RemoveSerie($SerieName="Serie1") + SetAbsciseLabelSerie($SerieName = "Name") + SetSerieName($Name,$SerieName="Serie1") + + SetSerieSymbol($Name,$Symbol) + SetXAxisName($Name="X Axis") + SetYAxisName($Name="Y Axis") + SetXAxisFormat($Format="number") + SetYAxisFormat($Format="number") + SetXAxisUnit($Unit="") + SetYAxisUnit($Unit="") + removeSerieName($SerieName) + removeAllSeries() + Data retrieval methods : + GetData() + GetDataDescription() + */ + + /* pData class definition */ + class pData + { + var $Data; + var $DataDescription; + + function pData() + { + $this->Data = ""; + $this->DataDescription = ""; + $this->DataDescription["Position"] = "Name"; + $this->DataDescription["Format"]["X"] = "number"; + $this->DataDescription["Format"]["Y"] = "number"; + $this->DataDescription["Unit"]["X"] = NULL; + $this->DataDescription["Unit"]["Y"] = NULL; + } + + function ImportFromCSV($FileName,$Delimiter=",",$DataColumns=-1,$HasHeader=FALSE,$DataName=-1) + { + $handle = @fopen($FileName,"r"); + if ($handle) + { + $HeaderParsed = FALSE; + while (!feof($handle)) + { + $buffer = fgets($handle, 4096); + $buffer = str_replace(chr(10),"",$buffer); + $buffer = str_replace(chr(13),"",$buffer); + $Values = split($Delimiter,$buffer); + + if ( $buffer != "" ) + { + if ( $HasHeader == TRUE && $HeaderParsed == FALSE ) + { + if ( $DataColumns == -1 ) + { + $ID = 1; + foreach($Values as $key => $Value) + { $this->SetSerieName($Value,"Serie".$ID); $ID++; } + } + else + { + $SerieName = ""; + + foreach($DataColumns as $key => $Value) + $this->SetSerieName($Values[$Value],"Serie".$Value); + } + $HeaderParsed = TRUE; + } + else + { + if ( $DataColumns == -1 ) + { + $ID = 1; + foreach($Values as $key => $Value) + { $this->AddPoint(intval($Value),"Serie".$ID); $ID++; } + } + else + { + $SerieName = ""; + if ( $DataName != -1 ) + $SerieName = $Values[$DataName]; + + foreach($DataColumns as $key => $Value) + $this->AddPoint($Values[$Value],"Serie".$Value,$SerieName); + } + } + } + } + fclose($handle); + } + } + + function AddPoint($Value,$Serie="Serie1",$Description="") + { + if (is_array($Value) && count($Value) == 1) + $Value = $Value[0]; + + $ID = 0; + for($i=0;$i<=count($this->Data);$i++) + { if(isset($this->Data[$i][$Serie])) { $ID = $i+1; } } + + if ( count($Value) == 1 ) + { + $this->Data[$ID][$Serie] = $Value; + if ( $Description != "" ) + $this->Data[$ID]["Name"] = $Description; + elseif (!isset($this->Data[$ID]["Name"])) + $this->Data[$ID]["Name"] = $ID; + } + else + { + foreach($Value as $key => $Val) + { + $this->Data[$ID][$Serie] = $Val; + if (!isset($this->Data[$ID]["Name"])) + $this->Data[$ID]["Name"] = $ID; + $ID++; + } + } + } + + function AddSerie($SerieName="Serie1") + { + if ( !isset($this->DataDescription["Values"]) ) + { + $this->DataDescription["Values"][] = $SerieName; + } + else + { + $Found = FALSE; + foreach($this->DataDescription["Values"] as $key => $Value ) + if ( $Value == $SerieName ) { $Found = TRUE; } + + if ( !$Found ) + $this->DataDescription["Values"][] = $SerieName; + } + } + + function AddAllSeries() + { + unset($this->DataDescription["Values"]); + + if ( isset($this->Data[0]) ) + { + foreach($this->Data[0] as $Key => $Value) + { + if ( $Key != "Name" ) + $this->DataDescription["Values"][] = $Key; + } + } + } + + function RemoveSerie($SerieName="Serie1") + { + if ( !isset($this->DataDescription["Values"]) ) + return(0); + + $Found = FALSE; + foreach($this->DataDescription["Values"] as $key => $Value ) + { + if ( $Value == $SerieName ) + unset($this->DataDescription["Values"][$key]); + } + } + + function SetAbsciseLabelSerie($SerieName = "Name") + { + $this->DataDescription["Position"] = $SerieName; + } + + function SetSerieName($Name,$SerieName="Serie1") + { + $this->DataDescription["Description"][$SerieName] = $Name; + } + + function SetXAxisName($Name="X Axis") + { + $this->DataDescription["Axis"]["X"] = $Name; + } + + function SetYAxisName($Name="Y Axis") + { + $this->DataDescription["Axis"]["Y"] = $Name; + } + + function SetXAxisFormat($Format="number") + { + $this->DataDescription["Format"]["X"] = $Format; + } + + function SetYAxisFormat($Format="number") + { + $this->DataDescription["Format"]["Y"] = $Format; + } + + function SetXAxisUnit($Unit="") + { + $this->DataDescription["Unit"]["X"] = $Unit; + } + + function SetYAxisUnit($Unit="") + { + $this->DataDescription["Unit"]["Y"] = $Unit; + } + + function SetSerieSymbol($Name,$Symbol) + { + $this->DataDescription["Symbol"][$Name] = $Symbol; + } + + function removeSerieName($SerieName) + { + if ( isset($this->DataDescription["Description"][$SerieName]) ) + unset($this->DataDescription["Description"][$SerieName]); + } + + function removeAllSeries() + { + foreach($this->DataDescription["Values"] as $Key => $Value) + unset($this->DataDescription["Values"][$Key]); + } + + function GetData() + { + return($this->Data); + } + + function GetDataDescription() + { + return($this->DataDescription); + } + } +?> \ No newline at end of file diff --git a/pChart/pBarcode128.class.php b/pChart/pBarcode128.class.php new file mode 100644 index 0000000..b351c57 --- /dev/null +++ b/pChart/pBarcode128.class.php @@ -0,0 +1,184 @@ +<?php + /* + pBarcode128 - class to create barcodes (128B) + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + /* pData class definition */ + class pBarcode128 + { + var $Codes; + var $Reverse; + var $Result; + var $pChartObject; + var $CRC; + + /* Class creator */ + function pBarcode128($BasePath="") + { + $this->Codes = ""; + $this->Reverse = ""; + + $FileHandle = @fopen($BasePath."data/128B.db", "r"); + + if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."128B.db)."); } + + while (!feof($FileHandle)) + { + $Buffer = fgets($FileHandle,4096); + $Buffer = str_replace(chr(10),"",$Buffer); + $Buffer = str_replace(chr(13),"",$Buffer); + $Values = preg_split("/;/",$Buffer); + + $this->Codes[$Values[1]]["ID"] = $Values[0]; + $this->Codes[$Values[1]]["Code"] = $Values[2]; + $this->Reverse[$Values[0]]["Code"] = $Values[2]; + $this->Reverse[$Values[0]]["Asc"] = $Values[1]; + } + fclose($FileHandle); + } + + /* Return the projected size of a barcode */ + function getSize($TextString,$Format="") + { + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0; + $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE; + $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5; + $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12; + $Height = isset($Format["Height"]) ? $Format["Height"] : 30; + + $TextString = $this->encode128($TextString); + $BarcodeLength = strlen($this->Result); + + if ( $DrawArea ) { $WOffset = 20; } else { $WOffset = 0; } + if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; } + + $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength); + $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength); + + $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height); + $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height); + + + $AreaWidth = max(abs($X1),abs($X2)); + $AreaHeight = max(abs($Y1),abs($Y2)); + + return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight)); + } + + function encode128($Value,$Format="") + { + $this->Result = "11010010000"; + $this->CRC = 104; + $TextString = ""; + + for($i=1;$i<=strlen($Value);$i++) + { + $CharCode = ord($this->mid($Value,$i,1)); + if ( isset($this->Codes[$CharCode]) ) + { + $this->Result = $this->Result.$this->Codes[$CharCode]["Code"]; + $this->CRC = $this->CRC + $i*$this->Codes[$CharCode]["ID"]; + $TextString = $TextString.chr($CharCode); + } + } + $this->CRC = $this->CRC - floor($this->CRC/103)*103; + + $this->Result = $this->Result.$this->Reverse[$this->CRC]["Code"]; + $this->Result = $this->Result."1100011101011"; + + return($TextString); + } + + /* Create the encoded string */ + function draw($Object,$Value,$X,$Y,$Format="") + { + $this->pChartObject = $Object; + + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Height = isset($Format["Height"]) ? $Format["Height"] : 30; + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0; + $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE; + $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5; + $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE; + $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255; + $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255; + $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255; + $AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR; + $AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG; + $AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB; + + $TextString = $this->encode128($Value); + + if ( $DrawArea ) + { + $X1 = $X + cos(($Angle-135) * PI / 180) * 10; + $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10; + + $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20); + $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20); + + if ( $ShowLegend ) + { + $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10); + $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10); + } + else + { + $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20); + $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20); + } + + $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20); + $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20); + + $Polygon = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4); + $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB); + $this->pChartObject->drawPolygon($Polygon,$Settings); + } + + for($i=1;$i<=strlen($this->Result);$i++) + { + if ( $this->mid($this->Result,$i,1) == 1 ) + { + $X1 = $X + cos($Angle * PI / 180) * $i; + $Y1 = $Y + sin($Angle * PI / 180) * $i; + $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height; + $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height; + + $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings); + } + } + + if ( $ShowLegend ) + { + $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2); + $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2); + + $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset); + $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset); + + $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE); + $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings); + } + } + + function left($value,$NbChar) { return substr($value,0,$NbChar); } + function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); } + function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); } + } +?> \ No newline at end of file diff --git a/pChart/pBarcode39.class.php b/pChart/pBarcode39.class.php new file mode 100644 index 0000000..2305f54 --- /dev/null +++ b/pChart/pBarcode39.class.php @@ -0,0 +1,200 @@ +<?php + /* + pBarcode39 - class to create barcodes (39B) + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + /* pData class definition */ + class pBarcode39 + { + var $Codes; + var $Reverse; + var $Result; + var $pChartObject; + var $CRC; + var $MOD43; + + /* Class creator */ + function pBarcode39($BasePath="",$EnableMOD43=FALSE) + { + $this->MOD43 = $EnableMOD43; + $this->Codes = ""; + $this->Reverse = ""; + + $FileHandle = @fopen($BasePath."data/39.db", "r"); + + if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."data/39.db)."); } + + while (!feof($FileHandle)) + { + $Buffer = fgets($FileHandle,4096); + $Buffer = str_replace(chr(10),"",$Buffer); + $Buffer = str_replace(chr(13),"",$Buffer); + $Values = preg_split("/;/",$Buffer); + + $this->Codes[$Values[0]] = $Values[1]; + } + fclose($FileHandle); + } + + /* Return the projected size of a barcode */ + function getSize($TextString,$Format="") + { + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0; + $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE; + $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5; + $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12; + $Height = isset($Format["Height"]) ? $Format["Height"] : 30; + + $TextString = $this->encode39($TextString); + $BarcodeLength = strlen($this->Result); + + if ( $DrawArea ) { $WOffset = 20; } else { $WOffset = 0; } + if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; } + + $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength); + $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength); + + $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height); + $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height); + + + $AreaWidth = max(abs($X1),abs($X2)); + $AreaHeight = max(abs($Y1),abs($Y2)); + + return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight)); + } + + /* Create the encoded string */ + function encode39($Value) + { + $this->Result = "100101101101"."0"; + $TextString = ""; + for($i=1;$i<=strlen($Value);$i++) + { + $CharCode = ord($this->mid($Value,$i,1)); + if ( $CharCode >= 97 && $CharCode <= 122 ) { $CharCode = $CharCode - 32; } + + if ( isset($this->Codes[chr($CharCode)]) ) + { + $this->Result = $this->Result.$this->Codes[chr($CharCode)]."0"; + $TextString = $TextString.chr($CharCode); + } + } + + if ( $this->MOD43 ) + { + $Checksum = $this->checksum($TextString); + $this->Result = $this->Result.$this->Codes[$Checksum]."0"; + } + + $this->Result = $this->Result."100101101101"; + $TextString = "*".$TextString."*"; + + return($TextString); + } + + /* Create the encoded string */ + function draw($Object,$Value,$X,$Y,$Format="") + { + $this->pChartObject = $Object; + + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Height = isset($Format["Height"]) ? $Format["Height"] : 30; + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0; + $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE; + $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5; + $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE; + $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255; + $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255; + $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255; + $AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR; + $AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG; + $AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB; + + $TextString = $this->encode39($Value); + + if ( $DrawArea ) + { + $X1 = $X + cos(($Angle-135) * PI / 180) * 10; + $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10; + + $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20); + $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20); + + if ( $ShowLegend ) + { + $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10); + $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10); + } + else + { + $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20); + $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20); + } + + $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20); + $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20); + + $Polygon = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4); + $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB); + $this->pChartObject->drawPolygon($Polygon,$Settings); + } + + for($i=1;$i<=strlen($this->Result);$i++) + { + if ( $this->mid($this->Result,$i,1) == 1 ) + { + $X1 = $X + cos($Angle * PI / 180) * $i; + $Y1 = $Y + sin($Angle * PI / 180) * $i; + $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height; + $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height; + + $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings); + } + } + + if ( $ShowLegend ) + { + $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2); + $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2); + + $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset); + $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset); + + $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE); + $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings); + } + } + + function checksum( $string ) + { + $checksum = 0; + $length = strlen( $string ); + $charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%'; + + for( $i=0; $i < $length; ++$i ) + $checksum += strpos( $charset, $string[$i] ); + + return substr( $charset, ($checksum % 43), 1 ); + } + + function left($value,$NbChar) { return substr($value,0,$NbChar); } + function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); } + function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); } + } +?> \ No newline at end of file diff --git a/pChart/pBubble.class.php b/pChart/pBubble.class.php new file mode 100644 index 0000000..7282ecd --- /dev/null +++ b/pChart/pBubble.class.php @@ -0,0 +1,326 @@ +<?php + /* + pBubble - class to draw bubble charts + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("BUBBLE_SHAPE_ROUND" , 700001); + define("BUBBLE_SHAPE_SQUARE" , 700002); + + /* pBubble class definition */ + class pBubble + { + var $pChartObject; + var $pDataObject; + + /* Class creator */ + function pBubble($pChartObject,$pDataObject) + { + $this->pChartObject = $pChartObject; + $this->pDataObject = $pDataObject; + } + + /* Prepare the scale */ + function bubbleScale($DataSeries,$WeightSeries) + { + if ( !is_array($DataSeries) ) { $DataSeries = array($DataSeries); } + if ( !is_array($WeightSeries) ) { $WeightSeries = array($WeightSeries); } + + /* Parse each data series to find the new min & max boundaries to scale */ + $NewPositiveSerie = ""; $NewNegativeSerie = ""; $MaxValues = 0; $LastPositive = 0; $LastNegative = 0; + foreach($DataSeries as $Key => $SerieName) + { + $SerieWeightName = $WeightSeries[$Key]; + + $this->pDataObject->setSerieDrawable($SerieWeightName,FALSE); + + if ( count($this->pDataObject->Data["Series"][$SerieName]["Data"]) > $MaxValues ) { $MaxValues = count($this->pDataObject->Data["Series"][$SerieName]["Data"]); } + + foreach($this->pDataObject->Data["Series"][$SerieName]["Data"] as $Key => $Value) + { + if ( $Value >= 0 ) + { + $BubbleBounds = $Value + $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key]; + + if ( !isset($NewPositiveSerie[$Key]) ) + { $NewPositiveSerie[$Key] = $BubbleBounds; } + elseif ( $NewPositiveSerie[$Key] < $BubbleBounds ) + { $NewPositiveSerie[$Key] = $BubbleBounds; } + + $LastPositive = $BubbleBounds; + } + else + { + $BubbleBounds = $Value - $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key]; + + if ( !isset($NewNegativeSerie[$Key]) ) + { $NewNegativeSerie[$Key] = $BubbleBounds; } + elseif ( $NewNegativeSerie[$Key] > $BubbleBounds ) + { $NewNegativeSerie[$Key] = $BubbleBounds; } + + $LastNegative = $BubbleBounds; + } + } + } + + /* Check for missing values and all the fake positive serie */ + if ( $NewPositiveSerie != "" ) + { + for ($i=0; $i<$MaxValues; $i++) { if (!isset($NewPositiveSerie[$i])) { $NewPositiveSerie[$i] = $LastPositive; } } + + $this->pDataObject->addPoints($NewPositiveSerie,"BubbleFakePositiveSerie"); + } + + /* Check for missing values and all the fake negative serie */ + if ( $NewNegativeSerie != "" ) + { + for ($i=0; $i<$MaxValues; $i++) { if (!isset($NewNegativeSerie[$i])) { $NewNegativeSerie[$i] = $LastNegative; } } + + $this->pDataObject->addPoints($NewNegativeSerie,"BubbleFakeNegativeSerie"); + } + } + + function resetSeriesColors() + { + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + $ID = 0; + foreach($Data["Series"] as $SerieName => $SeriesParameters) + { + if ( $SeriesParameters["isDrawable"] ) + { + $this->pDataObject->Data["Series"][$SerieName]["Color"]["R"] = $Palette[$ID]["R"]; + $this->pDataObject->Data["Series"][$SerieName]["Color"]["G"] = $Palette[$ID]["G"]; + $this->pDataObject->Data["Series"][$SerieName]["Color"]["B"] = $Palette[$ID]["B"]; + $this->pDataObject->Data["Series"][$SerieName]["Color"]["Alpha"] = $Palette[$ID]["Alpha"]; + $ID++; + } + } + } + + /* Prepare the scale */ + function drawBubbleChart($DataSeries,$WeightSeries,$Format="") + { + $ForceAlpha = isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : VOID; + $DrawBorder = isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE; + $BorderWidth = isset($Format["BorderWidth"]) ? $Format["BorderWidth"] : 1; + $Shape = isset($Format["Shape"]) ? $Format["Shape"] : BUBBLE_SHAPE_ROUND; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + if ( !is_array($DataSeries) ) { $DataSeries = array($DataSeries); } + if ( !is_array($WeightSeries) ) { $WeightSeries = array($WeightSeries); } + + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + if ( isset($Data["Series"]["BubbleFakePositiveSerie"] ) ) { $this->pDataObject->setSerieDrawable("BubbleFakePositiveSerie",FALSE); } + if ( isset($Data["Series"]["BubbleFakeNegativeSerie"] ) ) { $this->pDataObject->setSerieDrawable("BubbleFakeNegativeSerie",FALSE); } + + $this->resetSeriesColors(); + + list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings(); + + foreach($DataSeries as $Key => $SerieName) + { + $AxisID = $Data["Series"][$SerieName]["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + if (isset($Data["Series"][$SerieName]["Description"])) { $SerieDescription = $Data["Series"][$SerieName]["Description"]; } else { $SerieDescription = $SerieName; } + + $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; + + $X = $this->pChartObject->GraphAreaX1 + $XMargin; + $Y = $this->pChartObject->GraphAreaY1 + $XMargin; + + $Color = array("R"=>$Palette[$Key]["R"],"G"=>$Palette[$Key]["G"],"B"=>$Palette[$Key]["B"],"Alpha"=>$Palette[$Key]["Alpha"]); + + if ( $ForceAlpha != VOID ) { $Color["Alpha"]=$ForceAlpha; } + + if ( $DrawBorder ) + { + if ( $BorderWidth != 1 ) + { + if ( $Surrounding != NULL ) + { $BorderR = $Palette[$Key]["R"]+$Surrounding; $BorderG = $Palette[$Key]["G"]+$Surrounding; $BorderB = $Palette[$Key]["B"]+$Surrounding; } + else + { $BorderR = $BorderR; $BorderG = $BorderG; $BorderB = $BorderB; } + if ( $ForceAlpha != VOID ) { $BorderAlpha = $ForceAlpha/2; } + $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha); + } + else + { + $Color["BorderAlpha"] = $BorderAlpha; + + if ( $Surrounding != NULL ) + { $Color["BorderR"] = $Palette[$Key]["R"]+$Surrounding; $Color["BorderG"] = $Palette[$Key]["G"]+$Surrounding; $Color["BorderB"] = $Palette[$Key]["B"]+$Surrounding; } + else + { $Color["BorderR"] = $BorderR; $Color["BorderG"] = $BorderG; $Color["BorderB"] = $BorderB; } + if ( $ForceAlpha != VOID ) { $Color["BorderAlpha"] = $ForceAlpha/2; } + } + } + + foreach($Data["Series"][$SerieName]["Data"] as $iKey => $Point) + { + $Weight = $Point + $Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]; + + $PosArray = $this->pChartObject->scaleComputeY($Point,array("AxisID"=>$AxisID)); + $WeightArray = $this->pChartObject->scaleComputeY($Weight,array("AxisID"=>$AxisID)); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; } + $Y = floor($PosArray); $CircleRadius = floor(abs($PosArray - $WeightArray)/2); + + if ( $Shape == BUBBLE_SHAPE_SQUARE ) + { + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$CircleRadius).",".floor($Y-$CircleRadius).",".floor($X+$CircleRadius).",".floor($Y+$CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); } + + if ( $BorderWidth != 1 ) + { + $this->pChartObject->drawFilledRectangle($X-$CircleRadius-$BorderWidth,$Y-$CircleRadius-$BorderWidth,$X+$CircleRadius+$BorderWidth,$Y+$CircleRadius+$BorderWidth,$BorderColor); + $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color); + } + else + $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color); + } + elseif ( $Shape == BUBBLE_SHAPE_ROUND ) + { + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); } + + if ( $BorderWidth != 1 ) + { + $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius+$BorderWidth,$BorderColor); + $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color); + } + else + $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color); + } + + $X = $X + $XStep; + } + elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM ) + { + if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; } + $X = floor($PosArray); $CircleRadius = floor(abs($PosArray - $WeightArray)/2); + + if ( $Shape == BUBBLE_SHAPE_SQUARE ) + { + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$CircleRadius).",".floor($Y-$CircleRadius).",".floor($X+$CircleRadius).",".floor($Y+$CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); } + + if ( $BorderWidth != 1 ) + { + $this->pChartObject->drawFilledRectangle($X-$CircleRadius-$BorderWidth,$Y-$CircleRadius-$BorderWidth,$X+$CircleRadius+$BorderWidth,$Y+$CircleRadius+$BorderWidth,$BorderColor); + $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color); + } + else + $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color); + } + elseif ( $Shape == BUBBLE_SHAPE_ROUND ) + { + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); } + + if ( $BorderWidth != 1 ) + { + $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius+$BorderWidth,$BorderColor); + $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color); + } + else + $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color); + } + + $Y = $Y + $XStep; + } + } + } + } + + function writeBubbleLabel($SerieName,$SerieWeightName,$Points,$Format="") + { + $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL; + $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX; + + if ( !is_array($Points) ) { $Point = $Points; $Points = ""; $Points[] = $Point; } + + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + if ( !isset($Data["Series"][$SerieName]) || !isset($Data["Series"][$SerieWeightName]) ) + return(0); + + list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings(); + + $AxisID = $Data["Series"][$SerieName]["Axis"]; + $AxisMode = $Data["Axis"][$AxisID]["Display"]; + $AxisFormat = $Data["Axis"][$AxisID]["Format"]; + $AxisUnit = $Data["Axis"][$AxisID]["Unit"]; + $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; + + $X = $this->pChartObject->GraphAreaX1 + $XMargin; + $Y = $this->pChartObject->GraphAreaY1 + $XMargin; + + $Color = array("R"=>$Data["Series"][$SerieName]["Color"]["R"],"G"=>$Data["Series"][$SerieName]["Color"]["G"],"B"=>$Data["Series"][$SerieName]["Color"]["B"],"Alpha"=>$Data["Series"][$SerieName]["Color"]["Alpha"]); + + foreach($Points as $Key => $Point) + { + $Value = $Data["Series"][$SerieName]["Data"][$Point]; + $PosArray = $this->pChartObject->scaleComputeY($Value,array("AxisID"=>$AxisID)); + + if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Point]) ) + $Abscissa = $Data["Series"][$Data["Abscissa"]]["Data"][$Point]." : "; + else + $Abscissa = ""; + + $Value = $this->pChartObject->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit); + $Weight = $Data["Series"][$SerieWeightName]["Data"][$Point]; + $Caption = $Abscissa.$Value." / ".$Weight; + + if ( isset($Data["Series"][$SerieName]["Description"]) ) + $Description = $Data["Series"][$SerieName]["Description"]; + else + $Description = "No description"; + + $Series = ""; + $Series[] = array("Format"=>$Color,"Caption"=>$Caption); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; } + + $X = floor($X + $Point * $XStep); + $Y = floor($PosArray); + } + else + { + if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; } + + $X = floor($PosArray); + $Y = floor($Y + $Point * $YStep); + } + + if ( $DrawPoint == LABEL_POINT_CIRCLE ) + $this->pChartObject->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + elseif ( $DrawPoint == LABEL_POINT_BOX ) + $this->pChartObject->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + + $this->pChartObject->drawLabelBox($X,$Y-3,$Description,$Series,$Format); + } + } + } +?> \ No newline at end of file diff --git a/pChart/pCache.class.php b/pChart/pCache.class.php new file mode 100644 index 0000000..cf35561 --- /dev/null +++ b/pChart/pCache.class.php @@ -0,0 +1,280 @@ +<?php + /* + pCache - speed up the rendering by caching up the pictures + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + /* pData class definition */ + class pCache + { + var $CacheFolder; + var $CacheIndex; + var $CacheDB; + + /* Class creator */ + function pCache($Settings="") + { + $CacheFolder = isset($Settings["CacheFolder"]) ? $Settings["CacheFolder"] : "cache"; + $CacheIndex = isset($Settings["CacheIndex"]) ? $Settings["CacheIndex"] : "index.db"; + $CacheDB = isset($Settings["CacheDB"]) ? $Settings["CacheDB"] : "cache.db"; + + $this->CacheFolder = $CacheFolder; + $this->CacheIndex = $CacheIndex; + $this->CacheDB = $CacheDB; + + if (!file_exists($this->CacheFolder."/".$this->CacheIndex)) { touch($this->CacheFolder."/".$this->CacheIndex); } + if (!file_exists($this->CacheFolder."/".$this->CacheDB)) { touch($this->CacheFolder."/".$this->CacheDB); } + } + + /* Flush the cache contents */ + function flush() + { + if (file_exists($this->CacheFolder."/".$this->CacheIndex)) { unlink($this->CacheFolder."/".$this->CacheIndex); touch($this->CacheFolder."/".$this->CacheIndex); } + if (file_exists($this->CacheFolder."/".$this->CacheDB)) { unlink($this->CacheFolder."/".$this->CacheDB); touch($this->CacheFolder."/".$this->CacheDB); } + } + + /* Return the MD5 of the data array to clearly identify the chart */ + function getHash($Data,$Marker="") + { return(md5($Marker.serialize($Data->Data))); } + + /* Write the generated picture to the cache */ + function writeToCache($ID,$pChartObject) + { + /* Compute the paths */ + $TemporaryFile = $this->CacheFolder."/tmp_".rand(0,1000).".png"; + $Database = $this->CacheFolder."/".$this->CacheDB; + $Index = $this->CacheFolder."/".$this->CacheIndex; + + /* Flush the picture to a temporary file */ + imagepng($pChartObject->Picture ,$TemporaryFile); + + /* Retrieve the files size */ + $PictureSize = filesize($TemporaryFile); + $DBSize = filesize($Database); + + /* Save the index */ + $Handle = fopen($Index,"a"); + fwrite($Handle, $ID.",".$DBSize.",".$PictureSize.",".time().",0 \r\n"); + fclose($Handle); + + /* Get the picture raw contents */ + $Handle = fopen($TemporaryFile,"r"); + $Raw = fread($Handle,$PictureSize); + fclose($Handle); + + /* Save the picture in the solid database file */ + $Handle = fopen($Database,"a"); + fwrite($Handle, $Raw); + fclose($Handle); + + /* Remove temporary file */ + unlink($TemporaryFile); + } + + /* Remove object older than the specified TS */ + function removeOlderThan($Expiry) + { $this->dbRemoval(array("Expiry"=>$Expiry)); } + + /* Remove an object from the cache */ + function remove($ID) + { $this->dbRemoval(array("Name"=>$ID)); } + + /* Remove with specified criterias */ + function dbRemoval($Settings) + { + $ID = isset($Settings["Name"]) ? $Settings["Name"] : NULL; + $Expiry = isset($Settings["Expiry"]) ? $Settings["Expiry"] : -(24*60*60); + $TS = time()-$Expiry; + + /* Compute the paths */ + $Database = $this->CacheFolder."/".$this->CacheDB; + $Index = $this->CacheFolder."/".$this->CacheIndex; + $DatabaseTemp = $this->CacheFolder."/".$this->CacheDB.".tmp"; + $IndexTemp = $this->CacheFolder."/".$this->CacheIndex.".tmp"; + + /* Single file removal */ + if ( $ID != NULL ) + { + /* Retrieve object informations */ + $Object = $this->isInCache($ID,TRUE); + + /* If it's not in the cache DB, go away */ + if ( !$Object ) { return(0); } + } + + /* Create the temporary files */ + if (!file_exists($DatabaseTemp)) { touch($DatabaseTemp); } + if (!file_exists($IndexTemp)) { touch($IndexTemp); } + + /* Open the file handles */ + $IndexHandle = @fopen($Index, "r"); + $IndexTempHandle = @fopen($IndexTemp, "w"); + $DBHandle = @fopen($Database, "r"); + $DBTempHandle = @fopen($DatabaseTemp, "w"); + + /* Remove the selected ID from the database */ + while (!feof($IndexHandle)) + { + $Entry = fgets($IndexHandle, 4096); + $Entry = str_replace("\r","",$Entry); + $Entry = str_replace("\n","",$Entry); + $Settings = preg_split("/,/",$Entry); + + if ( $Entry != "" ) + { + $PicID = $Settings[0]; + $DBPos = $Settings[1]; + $PicSize = $Settings[2]; + $GeneratedTS = $Settings[3]; + $Hits = $Settings[4]; + + if ( $Settings[0] != $ID && $GeneratedTS > $TS) + { + $CurrentPos = ftell($DBTempHandle); + fwrite($IndexTempHandle, $PicID.",".$CurrentPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n"); + + fseek($DBHandle,$DBPos); + $Picture = fread($DBHandle,$PicSize); + fwrite($DBTempHandle,$Picture); + } + } + } + + /* Close the handles */ + fclose($IndexHandle); + fclose($IndexTempHandle); + fclose($DBHandle); + fclose($DBTempHandle); + + /* Remove the prod files */ + unlink($Database); + unlink($Index); + + /* Swap the temp & prod DB */ + rename($DatabaseTemp,$Database); + rename($IndexTemp,$Index); + } + + function isInCache($ID,$Verbose=FALSE,$UpdateHitsCount=FALSE) + { + /* Compute the paths */ + $Index = $this->CacheFolder."/".$this->CacheIndex; + + /* Search the picture in the index file */ + $Handle = @fopen($Index, "r"); + while (!feof($Handle)) + { + $IndexPos = ftell($Handle); + $Entry = fgets($Handle, 4096); + if ( $Entry != "" ) + { + $Settings = preg_split("/,/",$Entry); + $PicID = $Settings[0]; + if ( $PicID == $ID ) + { + fclose($Handle); + + $DBPos = $Settings[1]; + $PicSize = $Settings[2]; + $GeneratedTS = $Settings[3]; + $Hits = intval($Settings[4]); + + if ( $UpdateHitsCount ) + { + $Hits++; + if ( strlen($Hits) < 7 ) { $Hits = $Hits.str_repeat(" ",7-strlen($Hits)); } + + $Handle = @fopen($Index, "r+"); + fseek($Handle,$IndexPos); + fwrite($Handle, $PicID.",".$DBPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n"); + fclose($Handle); + } + + if ($Verbose) + { return(array("DBPos"=>$DBPos,"PicSize"=>$PicSize,"GeneratedTS"=>$GeneratedTS,"Hits"=>$Hits)); } + else + { return(TRUE); } + } + } + } + fclose($Handle); + + /* Picture isn't in the cache */ + return(FALSE); + } + + /* Automatic output method based on the calling interface */ + function autoOutput($ID,$Destination="output.png") + { + if (php_sapi_name() == "cli") + $this->saveFromCache($ID,$Destination); + else + $this->strokeFromCache($ID); + } + + function strokeFromCache($ID) + { + /* Get the raw picture from the cache */ + $Picture = $this->getFromCache($ID); + + /* Do we have a hit? */ + if ( $Picture == NULL ) { return(FALSE); } + + header('Content-type: image/png'); + echo $Picture; + + return(TRUE); + } + + function saveFromCache($ID,$Destination) + { + /* Get the raw picture from the cache */ + $Picture = $this->getFromCache($ID); + + /* Do we have a hit? */ + if ( $Picture == NULL ) { return(FALSE); } + + /* Flush the picture to a file */ + $Handle = fopen($Destination,"w"); + fwrite($Handle,$Picture); + fclose($Handle); + + /* All went fine */ + return(TRUE); + } + + function getFromCache($ID) + { + /* Compute the path */ + $Database = $this->CacheFolder."/".$this->CacheDB; + + /* Lookup for the picture in the cache */ + $CacheInfo = $this->isInCache($ID,TRUE,TRUE); + + /* Not in the cache */ + if (!$CacheInfo) { return(NULL); } + + /* Get the database extended information */ + $DBPos = $CacheInfo["DBPos"]; + $PicSize = $CacheInfo["PicSize"]; + + /* Extract the picture from the solid cache file */ + $Handle = @fopen($Database, "r"); + fseek($Handle,$DBPos); + $Picture = fread($Handle,$PicSize); + fclose($Handle); + + /* Return back the raw picture data */ + return($Picture); + } + } +?> \ No newline at end of file diff --git a/pChart/pData.class.php b/pChart/pData.class.php new file mode 100644 index 0000000..224739f --- /dev/null +++ b/pChart/pData.class.php @@ -0,0 +1,788 @@ +<?php + /* + pDraw - class to manipulate data arrays + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + /* Axis configuration */ + define("AXIS_FORMAT_DEFAULT" , 680001); + define("AXIS_FORMAT_TIME" , 680002); + define("AXIS_FORMAT_DATE" , 680003); + define("AXIS_FORMAT_METRIC" , 680004); + define("AXIS_FORMAT_CURRENCY" , 680005); + define("AXIS_FORMAT_TRAFFIC" , 680006); + define("AXIS_FORMAT_CUSTOM" , 680007); + + /* Axis position */ + define("AXIS_POSITION_LEFT" , 681001); + define("AXIS_POSITION_RIGHT" , 681002); + define("AXIS_POSITION_TOP" , 681001); + define("AXIS_POSITION_BOTTOM" , 681002); + + /* Families of data points */ + define("SERIE_SHAPE_FILLEDCIRCLE" , 681011); + define("SERIE_SHAPE_FILLEDTRIANGLE" , 681012); + define("SERIE_SHAPE_FILLEDSQUARE" , 681013); + define("SERIE_SHAPE_FILLEDDIAMOND" , 681017); + define("SERIE_SHAPE_CIRCLE" , 681014); + define("SERIE_SHAPE_TRIANGLE" , 681015); + define("SERIE_SHAPE_SQUARE" , 681016); + define("SERIE_SHAPE_DIAMOND" , 681018); + + /* Axis position */ + define("AXIS_X" , 682001); + define("AXIS_Y" , 682002); + + /* Define value limits */ + define("ABSOLUTE_MIN" , -10000000000000); + define("ABSOLUTE_MAX" , 10000000000000); + + /* Replacement to the PHP NULL keyword */ + define("VOID" , 0.123456789); + + /* Euro symbol for GD fonts */ + define("EURO_SYMBOL" , utf8_encode("&#8364;")); + + /* pData class definition */ + class pData + { + var $Data; + + var $Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100), + "1"=>array("R"=>224,"G"=>100,"B"=>46,"Alpha"=>100), + "2"=>array("R"=>224,"G"=>214,"B"=>46,"Alpha"=>100), + "3"=>array("R"=>46,"G"=>151,"B"=>224,"Alpha"=>100), + "4"=>array("R"=>176,"G"=>46,"B"=>224,"Alpha"=>100), + "5"=>array("R"=>224,"G"=>46,"B"=>117,"Alpha"=>100), + "6"=>array("R"=>92,"G"=>224,"B"=>46,"Alpha"=>100), + "7"=>array("R"=>224,"G"=>176,"B"=>46,"Alpha"=>100)); + + /* Class creator */ + function pData() + { + $this->Data = ""; + $this->Data["XAxisDisplay"] = AXIS_FORMAT_DEFAULT; + $this->Data["XAxisFormat"] = NULL; + $this->Data["XAxisName"] = NULL; + $this->Data["XAxisUnit"] = NULL; + $this->Data["Abscissa"] = NULL; + $this->Data["AbsicssaPosition"] = AXIS_POSITION_BOTTOM; + + $this->Data["Axis"][0]["Display"] = AXIS_FORMAT_DEFAULT; + $this->Data["Axis"][0]["Position"] = AXIS_POSITION_LEFT; + $this->Data["Axis"][0]["Identity"] = AXIS_Y; + } + + /* Add a single point or an array to the given serie */ + function addPoints($Values,$SerieName="Serie1") + { + if (!isset($this->Data["Series"][$SerieName])) + $this->initialise($SerieName); + + if ( is_array($Values) ) + { + foreach($Values as $Key => $Value) + { $this->Data["Series"][$SerieName]["Data"][] = $Value; } + } + else + $this->Data["Series"][$SerieName]["Data"][] = $Values; + + if ( $Values != VOID ) + { + $StrippedData = $this->stripVOID($this->Data["Series"][$SerieName]["Data"]); + if ( empty($StrippedData) ) { $this->Data["Series"][$SerieName]["Max"] = 0; $this->Data["Series"][$SerieName]["Min"] =0; return(0); } + $this->Data["Series"][$SerieName]["Max"] = max($StrippedData); + $this->Data["Series"][$SerieName]["Min"] = min($StrippedData); + } + } + + /* Strip VOID values */ + function stripVOID($Values) + { if (!is_array($Values)) { return(array()); } $Result = array(); foreach($Values as $Key => $Value) { if ( $Value != VOID ) { $Result[] = $Value; } } return($Result); } + + /* Return the number of values contained in a given serie */ + function getSerieCount($Serie) + { if (isset($this->Data["Series"][$Serie]["Data"])) { return(sizeof($this->Data["Series"][$Serie]["Data"])); } else { return(0); } } + + /* Remove a serie from the pData object */ + function removeSerie($Series) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie])) { unset($this->Data["Series"][$Serie]); } } + } + + /* Return a value from given serie & index */ + function getValueAt($Serie,$Index=0) + { if (isset($this->Data["Series"][$Serie]["Data"][$Index])) { return($this->Data["Series"][$Serie]["Data"][$Index]); } else { return(NULL); } } + + /* Return the values array */ + function getValues($Serie) + { if (isset($this->Data["Series"][$Serie]["Data"])) { return($this->Data["Series"][$Serie]["Data"]); } else { return(NULL); } } + + /* Reverse the values in the given serie */ + function reverseSerie($Series) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]["Data"])) { $this->Data["Series"][$Serie]["Data"] = array_reverse($this->Data["Series"][$Serie]["Data"]); } } + } + + /* Return the sum of the serie values */ + function getSum($Serie) + { if (isset($this->Data["Series"][$Serie])) { return(array_sum($this->Data["Series"][$Serie]["Data"])); } else { return(NULL); } } + + /* Return the max value of a given serie */ + function getMax($Serie) + { if (isset($this->Data["Series"][$Serie]["Max"])) { return($this->Data["Series"][$Serie]["Max"]); } else { return(NULL); } } + + /* Return the min value of a given serie */ + function getMin($Serie) + { if (isset($this->Data["Series"][$Serie]["Min"])) { return($this->Data["Series"][$Serie]["Min"]); } else { return(NULL); } } + + /* Set the description of a given serie */ + function setSerieShape($Series,$Shape=SERIE_SHAPE_FILLEDCIRCLE) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Shape"] = $Shape; } } + } + + /* Set the description of a given serie */ + function setSerieDescription($Series,$Description="My serie") + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Description"] = $Description; } } + } + + /* Set a serie as "drawable" while calling a rendering function */ + function setSerieDrawable($Series,$Drawable=TRUE) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["isDrawable"] = $Drawable; } } + } + + /* Set the icon associated to a given serie */ + function setSeriePicture($Series,$Picture=NULL) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Picture"] = $Picture; } } + } + + /* Set the name of the X Axis */ + function setXAxisName($Name) + { $this->Data["XAxisName"] = $Name; } + + /* Set the display mode of the X Axis */ + function setXAxisDisplay($Mode,$Format=NULL) + { $this->Data["XAxisDisplay"] = $Mode; $this->Data["XAxisFormat"] = $Format; } + + /* Set the unit that will be displayed on the X axis */ + function setXAxisUnit($Unit) + { $this->Data["XAxisUnit"] = $Unit; } + + /* Set the serie that will be used as abscissa */ + function setAbscissa($Serie) + { if (isset($this->Data["Series"][$Serie])) { $this->Data["Abscissa"] = $Serie; } } + + function setAbsicssaPosition($Position = AXIS_POSITION_BOTTOM) + { $this->Data["AbsicssaPosition"] = $Position; } + + /* Set the name of the abscissa axis */ + function setAbscissaName($Name) + { $this->Data["AbscissaName"] = $Name; } + + /* Create a scatter group specifyin X and Y data series */ + function setScatterSerie($SerieX,$SerieY,$ID=0) + { if (isset($this->Data["Series"][$SerieX]) && isset($this->Data["Series"][$SerieY]) ) { $this->initScatterSerie($ID); $this->Data["ScatterSeries"][$ID]["X"] = $SerieX; $this->Data["ScatterSeries"][$ID]["Y"] = $SerieY; } } + + /* Set the shape of a given sctatter serie */ + function setScatterSerieShape($ID,$Shape=SERIE_SHAPE_FILLEDCIRCLE) + { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Shape"] = $Shape; } } + + /* Set the description of a given scatter serie */ + function setScatterSerieDescription($ID,$Description="My serie") + { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Description"] = $Description; } } + + /* Set the icon associated to a given scatter serie */ + function setScatterSeriePicture($ID,$Picture=NULL) + { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Picture"] = $Picture; } } + + /* Set a scatter serie as "drawable" while calling a rendering function */ + function setScatterSerieDrawable($ID ,$Drawable=TRUE) + { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["isDrawable"] = $Drawable; } } + + /* Define if a scatter serie should be draw with ticks */ + function setScatterSerieTicks($ID,$Width=0) + { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Ticks"] = $Width; } } + + /* Define if a scatter serie should be draw with a special weight */ + function setScatterSerieWeight($ID,$Weight=0) + { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Weight"] = $Weight; } } + + /* Associate a color to a scatter serie */ + function setScatterSerieColor($ID,$Format) + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + + if ( isset($this->Data["ScatterSeries"][$ID]) ) + { + $this->Data["ScatterSeries"][$ID]["Color"]["R"] = $R; + $this->Data["ScatterSeries"][$ID]["Color"]["G"] = $G; + $this->Data["ScatterSeries"][$ID]["Color"]["B"] = $B; + $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = $Alpha; + } + } + + /* Compute the series limits for an individual and global point of view */ + function limits() + { + $GlobalMin = ABSOLUTE_MAX; + $GlobalMax = ABSOLUTE_MIN; + + foreach($this->Data["Series"] as $Key => $Value) + { + if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"] == TRUE) + { + if ( $GlobalMin > $this->Data["Series"][$Key]["Min"] ) { $GlobalMin = $this->Data["Series"][$Key]["Min"]; } + if ( $GlobalMax < $this->Data["Series"][$Key]["Max"] ) { $GlobalMax = $this->Data["Series"][$Key]["Max"]; } + } + } + $this->Data["Min"] = $GlobalMin; + $this->Data["Max"] = $GlobalMax; + + return(array($GlobalMin,$GlobalMax)); + } + + /* Mark all series as drawable */ + function drawAll() + { foreach($this->Data["Series"] as $Key => $Value) { if ( $this->Data["Abscissa"] != $Key ) { $this->Data["Series"][$Key]["isDrawable"]=TRUE; } } } + + /* Return the average value of the given serie */ + function getSerieAverage($Serie) + { + if ( isset($this->Data["Series"][$Serie]) ) + { + $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]); + return(array_sum($SerieData)/sizeof($SerieData)); + } + else + return(NULL); + } + + /* Return the geometric mean of the given serie */ + function getGeometricMean($Serie) + { + if ( isset($this->Data["Series"][$Serie]) ) + { + $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]); + $Seriesum = 1; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum * $Value; } + return(pow($Seriesum,1/sizeof($SerieData))); + } + else + return(NULL); + } + + /* Return the harmonic mean of the given serie */ + function getHarmonicMean($Serie) + { + if ( isset($this->Data["Series"][$Serie]) ) + { + $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]); + $Seriesum = 0; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum + 1/$Value; } + return(sizeof($SerieData)/$Seriesum); + } + else + return(NULL); + } + + /* Return the standard deviation of the given serie */ + function getStandardDeviation($Serie) + { + if ( isset($this->Data["Series"][$Serie]) ) + { + $Average = $this->getSerieAverage($Serie); + $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]); + + $DeviationSum = 0; + foreach($SerieData as $Key => $Value) + $DeviationSum = $DeviationSum + ($Value-$Average)*($Value-$Average); + + $Deviation = sqrt($DeviationSum/count($SerieData)); + + return($Deviation); + } + else + return(NULL); + } + + /* Return the Coefficient of variation of the given serie */ + function getCoefficientOfVariation($Serie) + { + if ( isset($this->Data["Series"][$Serie]) ) + { + $Average = $this->getSerieAverage($Serie); + $StandardDeviation = $this->getStandardDeviation($Serie); + + if ( $StandardDeviation != 0 ) + return($StandardDeviation/$Average); + else + return(NULL); + } + else + return(NULL); + } + + /* Return the median value of the given serie */ + function getSerieMedian($Serie) + { + if ( isset($this->Data["Series"][$Serie]) ) + { + $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]); + sort($SerieData); + $SerieCenter = floor(sizeof($SerieData)/2); + + if ( isset($SerieData[$SerieCenter]) ) + return($SerieData[$SerieCenter]); + else + return(NULL); + } + else + return(NULL); + } + + /* Return the x th percentil of the given serie */ + function getSeriePercentile($Serie="Serie1",$Percentil=95) + { + if (!isset($this->Data["Series"][$Serie]["Data"])) { return(NULL); } + + $Values = count($this->Data["Series"][$Serie]["Data"])-1; + if ( $Values < 0 ) { $Values = 0; } + + $PercentilID = floor(($Values/100)*$Percentil+.5); + $SortedValues = $this->Data["Series"][$Serie]["Data"]; + sort($SortedValues); + + if ( is_numeric($SortedValues[$PercentilID]) ) + return($SortedValues[$PercentilID]); + else + return(NULL); + } + + /* Add random values to a given serie */ + function addRandomValues($SerieName="Serie1",$Options="") + { + $Values = isset($Options["Values"]) ? $Options["Values"] : 20; + $Min = isset($Options["Min"]) ? $Options["Min"] : 0; + $Max = isset($Options["Max"]) ? $Options["Max"] : 100; + $withFloat = isset($Options["withFloat"]) ? $Options["withFloat"] : FALSE; + + for ($i=0;$i<=$Values;$i++) + { + if ( $withFloat ) { $Value = rand($Min*100,$Max*100)/100; } else { $Value = rand($Min,$Max); } + $this->addPoints($Value,$SerieName); + } + } + + /* Test if we have valid data */ + function containsData() + { + if (!isset($this->Data["Series"])) { return(FALSE); } + + $Result = FALSE; + foreach($this->Data["Series"] as $Key => $Value) + { if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"]==TRUE) { $Result=TRUE; } } + return($Result); + } + + /* Set the display mode of an Axis */ + function setAxisDisplay($AxisID,$Mode=AXIS_FORMAT_DEFAULT,$Format=NULL) + { + if ( isset($this->Data["Axis"][$AxisID] ) ) + { + $this->Data["Axis"][$AxisID]["Display"] = $Mode; + if ( $Format != NULL ) { $this->Data["Axis"][$AxisID]["Format"] = $Format; } + } + } + + /* Set the position of an Axis */ + function setAxisPosition($AxisID,$Position=AXIS_POSITION_LEFT) + { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Position"] = $Position; } } + + /* Associate an unit to an axis */ + function setAxisUnit($AxisID,$Unit) + { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Unit"] = $Unit; } } + + /* Associate a name to an axis */ + function setAxisName($AxisID,$Name) + { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Name"] = $Name; } } + + /* Associate a color to an axis */ + function setAxisColor($AxisID,$Format) + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + + if ( isset($this->Data["Axis"][$AxisID] ) ) + { + $this->Data["Axis"][$AxisID]["Color"]["R"] = $R; + $this->Data["Axis"][$AxisID]["Color"]["G"] = $G; + $this->Data["Axis"][$AxisID]["Color"]["B"] = $B; + $this->Data["Axis"][$AxisID]["Color"]["Alpha"] = $Alpha; + } + } + + + /* Design an axis as X or Y member */ + function setAxisXY($AxisID,$Identity=AXIS_Y) + { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Identity"] = $Identity; } } + + /* Associate one data serie with one axis */ + function setSerieOnAxis($Series,$AxisID) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) + { + $PreviousAxis = $this->Data["Series"][$Serie]["Axis"]; + + /* Create missing axis */ + if ( !isset($this->Data["Axis"][$AxisID] ) ) + { $this->Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; $this->Data["Axis"][$AxisID]["Identity"] = AXIS_Y;} + + $this->Data["Series"][$Serie]["Axis"] = $AxisID; + + /* Cleanup unused axis */ + $Found = FALSE; + foreach($this->Data["Series"] as $SerieName => $Values) { if ( $Values["Axis"] == $PreviousAxis ) { $Found = TRUE; } } + if (!$Found) { unset($this->Data["Axis"][$PreviousAxis]); } + } + } + + /* Define if a serie should be draw with ticks */ + function setSerieTicks($Series,$Width=0) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Ticks"] = $Width; } } + } + + /* Define if a serie should be draw with a special weight */ + function setSerieWeight($Series,$Weight=0) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Weight"] = $Weight; } } + } + + /* Returns the palette of the given serie */ + function getSeriePalette($Serie) + { + if ( !isset($this->Data["Series"][$Serie]) ) { return(NULL); } + + $Result = ""; + $Result["R"] = $this->Data["Series"][$Serie]["Color"]["R"]; + $Result["G"] = $this->Data["Series"][$Serie]["Color"]["G"]; + $Result["B"] = $this->Data["Series"][$Serie]["Color"]["B"]; + $Result["Alpha"] = $this->Data["Series"][$Serie]["Color"]["Alpha"]; + + return($Result); + } + + /* Set the color of one serie */ + function setPalette($Series,$Format=NULL) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + + foreach($Series as $Key => $Serie) + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + + if ( isset($this->Data["Series"][$Serie]) ) + { + $OldR = $this->Data["Series"][$Serie]["Color"]["R"]; $OldG = $this->Data["Series"][$Serie]["Color"]["G"]; $OldB = $this->Data["Series"][$Serie]["Color"]["B"]; + $this->Data["Series"][$Serie]["Color"]["R"] = $R; + $this->Data["Series"][$Serie]["Color"]["G"] = $G; + $this->Data["Series"][$Serie]["Color"]["B"] = $B; + $this->Data["Series"][$Serie]["Color"]["Alpha"] = $Alpha; + + /* Do reverse processing on the internal palette array */ + foreach ($this->Palette as $Key => $Value) + { if ($Value["R"] == $OldR && $Value["G"] == $OldG && $Value["B"] == $OldB) { $this->Palette[$Key]["R"] = $R; $this->Palette[$Key]["G"] = $G; $this->Palette[$Key]["B"] = $B; $this->Palette[$Key]["Alpha"] = $Alpha;} } + } + } + } + + /* Load a palette file */ + function loadPalette($FileName,$Overwrite=FALSE) + { + if ( !file_exists($FileName) ) { return(-1); } + if ( $Overwrite ) { $this->Palette = ""; } + + $fileHandle = @fopen($FileName, "r"); + if (!$fileHandle) { return(-1); } + while (!feof($fileHandle)) + { + $buffer = fgets($fileHandle, 4096); + if ( preg_match("/,/",$buffer) ) + { + list($R,$G,$B,$Alpha) = preg_split("/,/",$buffer); + if ( $this->Palette == "" ) { $ID = 0; } else { $ID = count($this->Palette); } + $this->Palette[$ID] = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + } + } + fclose($fileHandle); + + /* Apply changes to current series */ + $ID = 0; + if ( isset($this->Data["Series"])) + { + foreach($this->Data["Series"] as $Key => $Value) + { + if ( !isset($this->Palette[$ID]) ) + $this->Data["Series"][$Key]["Color"] = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>0); + else + $this->Data["Series"][$Key]["Color"] = $this->Palette[$ID]; + $ID++; + } + } + } + + /* Initialise a given scatter serie */ + function initScatterSerie($ID) + { + if ( isset($this->Data["ScatterSeries"][$ID]) ) { return(0); } + + $this->Data["ScatterSeries"][$ID]["Description"] = "Scatter ".$ID; + $this->Data["ScatterSeries"][$ID]["isDrawable"] = TRUE; + $this->Data["ScatterSeries"][$ID]["Picture"] = NULL; + $this->Data["ScatterSeries"][$ID]["Ticks"] = 0; + $this->Data["ScatterSeries"][$ID]["Weight"] = 0; + + if ( isset($this->Palette[$ID]) ) + $this->Data["ScatterSeries"][$ID]["Color"] = $this->Palette[$ID]; + else + { + $this->Data["ScatterSeries"][$ID]["Color"]["R"] = rand(0,255); + $this->Data["ScatterSeries"][$ID]["Color"]["G"] = rand(0,255); + $this->Data["ScatterSeries"][$ID]["Color"]["B"] = rand(0,255); + $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = 100; + } + } + + /* Initialise a given serie */ + function initialise($Serie) + { + if ( isset($this->Data["Series"]) ) { $ID = count($this->Data["Series"]); } else { $ID = 0; } + + $this->Data["Series"][$Serie]["Description"] = $Serie; + $this->Data["Series"][$Serie]["isDrawable"] = TRUE; + $this->Data["Series"][$Serie]["Picture"] = NULL; + $this->Data["Series"][$Serie]["Max"] = NULL; + $this->Data["Series"][$Serie]["Min"] = NULL; + $this->Data["Series"][$Serie]["Axis"] = 0; + $this->Data["Series"][$Serie]["Ticks"] = 0; + $this->Data["Series"][$Serie]["Weight"] = 0; + $this->Data["Series"][$Serie]["Shape"] = SERIE_SHAPE_FILLEDCIRCLE; + + if ( isset($this->Palette[$ID]) ) + $this->Data["Series"][$Serie]["Color"] = $this->Palette[$ID]; + else + { + $this->Data["Series"][$Serie]["Color"]["R"] = rand(0,255); + $this->Data["Series"][$Serie]["Color"]["G"] = rand(0,255); + $this->Data["Series"][$Serie]["Color"]["B"] = rand(0,255); + $this->Data["Series"][$Serie]["Color"]["Alpha"] = 100; + } + } + + function normalize($NormalizationFactor=100,$UnitChange=NULL,$Round=1) + { + $Abscissa = $this->Data["Abscissa"]; + + $SelectedSeries = ""; + $MaxVal = 0; + foreach($this->Data["Axis"] as $AxisID => $Axis) + { + if ( $UnitChange != NULL ) { $this->Data["Axis"][$AxisID]["Unit"] = $UnitChange; } + + foreach($this->Data["Series"] as $SerieName => $Serie) + { + if ($Serie["Axis"] == $AxisID && $Serie["isDrawable"] == TRUE && $SerieName != $Abscissa) + { + $SelectedSeries[$SerieName] = $SerieName; + + if ( count($Serie["Data"] ) > $MaxVal ) { $MaxVal = count($Serie["Data"]); } + } + } + } + + for($i=0;$i<=$MaxVal-1;$i++) + { + $Factor = 0; + foreach ($SelectedSeries as $Key => $SerieName ) + { + $Value = $this->Data["Series"][$SerieName]["Data"][$i]; + if ( $Value != VOID ) + $Factor = $Factor + abs($Value); + } + + if ( $Factor != 0 ) + { + $Factor = $NormalizationFactor / $Factor; + + foreach ($SelectedSeries as $Key => $SerieName ) + { + $Value = $this->Data["Series"][$SerieName]["Data"][$i]; + + if ( $Value != VOID && $Factor != $NormalizationFactor ) + $this->Data["Series"][$SerieName]["Data"][$i] = round(abs($Value)*$Factor,$Round); + elseif ( $Value == VOID || $Value == 0 ) + $this->Data["Series"][$SerieName]["Data"][$i] = VOID; + elseif ( $Factor == $NormalizationFactor ) + $this->Data["Series"][$SerieName]["Data"][$i] = $NormalizationFactor; + } + } + } + + foreach ($SelectedSeries as $Key => $SerieName ) + { + $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"])); + $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"])); + } + } + + /* Load data from a CSV (or similar) data source */ + function importFromCSV($FileName,$Options="") + { + $Delimiter = isset($Options["Delimiter"]) ? $Options["Delimiter"] : ","; + $GotHeader = isset($Options["GotHeader"]) ? $Options["GotHeader"] : FALSE; + $SkipColumns = isset($Options["SkipColumns"]) ? $Options["SkipColumns"] : array(-1); + $DefaultSerieName = isset($Options["DefaultSerieName"]) ? $Options["DefaultSerieName"] : "Serie"; + + $Handle = @fopen($FileName,"r"); + if ($Handle) + { + $HeaderParsed = FALSE; $SerieNames = ""; + while (!feof($Handle)) + { + $Buffer = fgets($Handle, 4096); + $Buffer = str_replace(chr(10),"",$Buffer); + $Buffer = str_replace(chr(13),"",$Buffer); + $Values = preg_split("/".$Delimiter."/",$Buffer); + + if ( $Buffer != "" ) + { + if ( $GotHeader && !$HeaderParsed ) + { + foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $Name; } } + $HeaderParsed = TRUE; + } + else + { + if ($SerieNames == "" ) { foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $DefaultSerieName.$Key; } } } + foreach($Values as $Key => $Value) { if ( !in_array($Key,$SkipColumns) ) { $this->addPoints($Value,$SerieNames[$Key]); } } + } + } + } + fclose($Handle); + } + } + + /* Create a dataset based on a formula */ + function createFunctionSerie($SerieName,$Formula="",$Options="") + { + $MinX = isset($Options["MinX"]) ? $Options["MinX"] : -10; + $MaxX = isset($Options["MaxX"]) ? $Options["MaxX"] : 10; + $XStep = isset($Options["XStep"]) ? $Options["XStep"] : 1; + $AutoDescription = isset($Options["AutoDescription"]) ? $Options["AutoDescription"] : FALSE; + $RecordAbscissa = isset($Options["RecordAbscissa"]) ? $Options["RecordAbscissa"] : FALSE; + $AbscissaSerie = isset($Options["AbscissaSerie"]) ? $Options["AbscissaSerie"] : "Abscissa"; + + if ( $Formula == "" ) { return(0); } + + $Result = ""; $Abscissa = ""; + for($i=$MinX; $i<=$MaxX; $i=$i+$XStep) + { + $Expression = "\$return = '!'.(".str_replace("z",$i,$Formula).");"; + if ( @eval($Expression) === FALSE ) { $return = VOID; } + if ( $return == "!" ) { $return = VOID; } else { $return = $this->right($return,strlen($return)-1); } + if ( $return == "NAN" ) { $return = VOID; } + if ( $return == "INF" ) { $return = VOID; } + if ( $return == "-INF" ) { $return = VOID; } + + $Abscissa[] = $i; + $Result[] = $return; + } + + $this->addPoints($Result,$SerieName); + if ( $AutoDescription ) { $this->setSerieDescription($SerieName,$Formula); } + if ( $RecordAbscissa ) { $this->addPoints($Abscissa,$AbscissaSerie); } + } + + function negateValues($Series) + { + if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); } + foreach($Series as $Key => $SerieName) + { + if (isset($this->Data["Series"][$SerieName])) + { + $Data = ""; + foreach($this->Data["Series"][$SerieName]["Data"] as $Key => $Value) + { if ( $Value == VOID ) { $Data[] = VOID; } else { $Data[] = -$Value; } } + $this->Data["Series"][$SerieName]["Data"] = $Data; + + $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"])); + $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"])); + } + } + } + + /* Return the data & configuration of the series */ + function getData() + { return($this->Data); } + + /* Save a palette element */ + function savePalette($ID,$Color) + { $this->Palette[$ID] = $Color; } + + /* Return the palette of the series */ + function getPalette() + { return($this->Palette); } + + /* Called by the scaling algorithm to save the config */ + function saveAxisConfig($Axis) { $this->Data["Axis"]=$Axis; } + + /* Save the Y Margin if set */ + function saveYMargin($Value) { $this->Data["YMargin"]=$Value; } + + /* Save extended configuration to the pData object */ + function saveExtendedData($Tag,$Values) { $this->Data["Extended"][$Tag]=$Values; } + + /* Called by the scaling algorithm to save the orientation of the scale */ + function saveOrientation($Orientation) { $this->Data["Orientation"]=$Orientation; } + + /* Convert a string to a single elements array */ + function convertToArray($Value) + { $Values = ""; $Values[] = $Value; return($Values); } + + /* Class string wrapper */ + function __toString() + { return("pData object."); } + + function left($value,$NbChar) { return substr($value,0,$NbChar); } + function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); } + function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); } + } +?> \ No newline at end of file diff --git a/pChart/pDraw.class.php b/pChart/pDraw.class.php new file mode 100644 index 0000000..b83e948 --- /dev/null +++ b/pChart/pDraw.class.php @@ -0,0 +1,6216 @@ +<?php + /* + pDraw - class extension with drawing methods + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("DIRECTION_VERTICAL" , 690001); + define("DIRECTION_HORIZONTAL" , 690002); + + define("SCALE_POS_LEFTRIGHT" , 690101); + define("SCALE_POS_TOPBOTTOM" , 690102); + + define("SCALE_MODE_FLOATING" , 690201); + define("SCALE_MODE_START0" , 690202); + define("SCALE_MODE_ADDALL" , 690203); + define("SCALE_MODE_ADDALL_START0" , 690204); + define("SCALE_MODE_MANUAL" , 690205); + + define("SCALE_SKIP_NONE" , 690301); + define("SCALE_SKIP_SAME" , 690302); + define("SCALE_SKIP_NUMBERS" , 690303); + + define("TEXT_ALIGN_TOPLEFT" , 690401); + define("TEXT_ALIGN_TOPMIDDLE" , 690402); + define("TEXT_ALIGN_TOPRIGHT" , 690403); + define("TEXT_ALIGN_MIDDLELEFT" , 690404); + define("TEXT_ALIGN_MIDDLEMIDDLE" , 690405); + define("TEXT_ALIGN_MIDDLERIGHT" , 690406); + define("TEXT_ALIGN_BOTTOMLEFT" , 690407); + define("TEXT_ALIGN_BOTTOMMIDDLE" , 690408); + define("TEXT_ALIGN_BOTTOMRIGHT" , 690409); + + define("POSITION_TOP" , 690501); + define("POSITION_BOTTOM" , 690502); + + define("LABEL_POS_LEFT" , 690601); + define("LABEL_POS_CENTER" , 690602); + define("LABEL_POS_RIGHT" , 690603); + define("LABEL_POS_TOP" , 690604); + define("LABEL_POS_BOTTOM" , 690605); + define("LABEL_POS_INSIDE" , 690606); + define("LABEL_POS_OUTSIDE" , 690607); + + define("ORIENTATION_HORIZONTAL" , 690701); + define("ORIENTATION_VERTICAL" , 690702); + define("ORIENTATION_AUTO" , 690703); + + define("LEGEND_NOBORDER" , 690800); + define("LEGEND_BOX" , 690801); + define("LEGEND_ROUND" , 690802); + + define("LEGEND_VERTICAL" , 690901); + define("LEGEND_HORIZONTAL" , 690902); + + define("LEGEND_FAMILY_BOX" , 691051); + define("LEGEND_FAMILY_CIRCLE" , 691052); + define("LEGEND_FAMILY_LINE" , 691053); + + define("DISPLAY_AUTO" , 691001); + define("DISPLAY_MANUAL" , 691002); + + define("LABELING_ALL" , 691011); + define("LABELING_DIFFERENT" , 691012); + + define("BOUND_MIN" , 691021); + define("BOUND_MAX" , 691022); + define("BOUND_BOTH" , 691023); + + define("BOUND_LABEL_POS_TOP" , 691031); + define("BOUND_LABEL_POS_BOTTOM" , 691032); + define("BOUND_LABEL_POS_AUTO" , 691033); + + define("CAPTION_LEFT_TOP" , 691041); + define("CAPTION_RIGHT_BOTTOM" , 691042); + + define("GRADIENT_SIMPLE" , 691051); + define("GRADIENT_EFFECT_CAN" , 691052); + + define("LABEL_TITLE_NOBACKGROUND" , 691061); + define("LABEL_TITLE_BACKGROUND" , 691062); + + define("LABEL_POINT_NONE" , 691071); + define("LABEL_POINT_CIRCLE" , 691072); + define("LABEL_POINT_BOX" , 691073); + + define("ZONE_NAME_ANGLE_AUTO" , 691081); + + define("PI" , 3.14159265); + define("ALL" , 69); + define("NONE" , 31); + define("AUTO" , 690000); + define("OUT_OF_SIGHT" , -10000000000000); + + class pDraw + { + /* Returns the number of drawable series */ + function countDrawableSeries() + { + $Results = 0; + $Data = $this->DataSet->getData(); + + foreach($Data["Series"] as $SerieName => $Serie) + { if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) { $Results++; } } + + return($Results); + } + + /* Fix box coordinates */ + function fixBoxCoordinates($Xa,$Ya,$Xb,$Yb) + { + $X1 = min($Xa,$Xb); $Y1 = min($Ya,$Yb); + $X2 = max($Xa,$Xb); $Y2 = max($Ya,$Yb); + + return(array($X1,$Y1,$X2,$Y2)); + } + + /* Draw a polygon */ + function drawPolygon($Points,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $NoFill = isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE; + $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B; + $BorderAlpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $Alpha / 2; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $SkipX = isset($Format["SkipX"]) ? $Format["SkipX"] : OUT_OF_SIGHT; + $SkipY = isset($Format["SkipY"]) ? $Format["SkipY"] : OUT_OF_SIGHT; + + /* Calling the ImageFilledPolygon() function over the $Points array will round it */ + $Backup = $Points; + + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + + if ( $SkipX != OUT_OF_SIGHT ) { $SkipX = floor($SkipX); } + if ( $SkipY != OUT_OF_SIGHT ) { $SkipY = floor($SkipY); } + + $RestoreShadow = $this->Shadow; + if ( !$NoFill ) + { + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + for($i=0;$i<=count($Points)-1;$i=$i+2) + { $Shadow[] = $Points[$i] + $this->ShadowX; $Shadow[] = $Points[$i+1] + $this->ShadowY; } + $this->drawPolygon($Shadow,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"NoBorder"=>TRUE)); + } + + $FillColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + + if ( count($Points) >= 6 ) + { ImageFilledPolygon($this->Picture,$Points,count($Points)/2,$FillColor); } + } + + if ( !$NoBorder ) + { + $Points = $Backup; + + if ( $NoFill ) + $BorderSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + else + $BorderSettings = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha); + + for($i=0;$i<=count($Points)-1;$i=$i+2) + { + if ( isset($Points[$i+2]) ) + { + if ( !($Points[$i] == $Points[$i+2] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[$i+3] && $Points[$i+1] == $SkipY ) ) + $this->drawLine($Points[$i],$Points[$i+1],$Points[$i+2],$Points[$i+3],$BorderSettings); + } + else + { + if ( !($Points[$i] == $Points[0] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[1] && $Points[$i+1] == $SkipY ) ) + $this->drawLine($Points[$i],$Points[$i+1],$Points[0],$Points[1],$BorderSettings); + } + } + } + + $this->Shadow = $RestoreShadow; + } + + /* Apply AALias correction to the rounded box boundaries */ + function offsetCorrection($Value,$Mode) + { + $Value = round($Value,1); + + if ( $Value == 0 && $Mode == 1 ) { return(.9); } + if ( $Value == 0 ) { return(0); } + + if ( $Mode == 1) + { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.9); }; if ( $Value == .2 ) { return(.8); }; if ( $Value == .3 ) { return(.8); }; if ( $Value == .4 ) { return(.7); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.6); }; if ( $Value == .9 ) { return(.9); }; } + + if ( $Mode == 2) + { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.8); }; if ( $Value == .9 ) { return(.9); }; } + + if ( $Mode == 3) + { if ( $Value == 1 ) { return(.1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.9); }; if ( $Value == .6 ) { return(.6); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.4); }; if ( $Value == .9 ) { return(.5); }; } + + if ( $Mode == 4) + { if ( $Value == 1 ) { return(-1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.1); }; if ( $Value == .5 ) { return(-.1); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.1); }; if ( $Value == .8 ) { return(.1); }; if ( $Value == .9 ) { return(.1); }; } + } + + /* Draw a rectangle with rounded corners */ + function drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + + list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2); + + if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1))/2); } + if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1))/2); } + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE); + + if ( $Radius <= 0 ) { $this->drawRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); } + + if ( $this->Antialias ) + { + $this->drawLine($X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color); + $this->drawLine($X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color); + $this->drawLine($X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color); + $this->drawLine($X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color); + } + else + { + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + imageline($this->Picture,$X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color); + imageline($this->Picture,$X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color); + imageline($this->Picture,$X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color); + imageline($this->Picture,$X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color); + } + + $Step = 360 / (2 * PI * $Radius); + for($i=0;$i<=90;$i=$i+$Step) + { + $X = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius; + $Y = sin(($i+180)*PI/180) * $Radius + $Y1 + $Radius; + $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + $X = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius; + $Y = sin(($i+90)*PI/180) * $Radius + $Y2 - $Radius; + $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + $X = cos($i*PI/180) * $Radius + $X2 - $Radius; + $Y = sin($i*PI/180) * $Radius + $Y2 - $Radius; + $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + $X = cos(($i+270)*PI/180) * $Radius + $X2 - $Radius; + $Y = sin(($i+270)*PI/180) * $Radius + $Y1 + $Radius; + $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + } + } + + /* Draw a rectangle with rounded corners */ + function drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + + /* Temporary fix for AA issue */ + $Y1 = floor($Y1); $Y2 = floor($Y2); $X1 = floor($X1); $X2 = floor($X2); + + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; } + + list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2); + + if ( $X2 - $X1 < $Radius*2 ) { $Radius = floor((($X2-$X1))/4); } + if ( $Y2 - $Y1 < $Radius*2 ) { $Radius = floor((($Y2-$Y1))/4); } + + $RestoreShadow = $this->Shadow; + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa)); + } + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE); + + if ( $Radius <= 0 ) { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); } + + $YTop = $Y1+$Radius; + $YBottom = $Y2-$Radius; + + $Step = 360 / (2 * PI * $Radius); + $Positions = ""; $Radius--; $MinY = ""; $MaxY = ""; + for($i=0;$i<=90;$i=$i+$Step) + { + $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius; + $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius; + $Yp = floor(sin(($i+180)*PI/180) * $Radius + $YTop); + if ( $MinY == "" || $Yp > $MinY ) { $MinY = $Yp; } + + if ( $Xp1 <= floor($X1) ) { $Xp1++; } + if ( $Xp2 >= floor($X2) ) { $Xp2--; } + $Xp1++; + + if ( !isset($Positions[$Yp]) ) + { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; } + else + { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; } + + $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius; + $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius; + $Yp = floor(sin(($i+90)*PI/180) * $Radius + $YBottom); + if ( $MaxY == "" || $Yp < $MaxY ) { $MaxY = $Yp; } + + if ( $Xp1 <= floor($X1) ) { $Xp1++; } + if ( $Xp2 >= floor($X2) ) { $Xp2--; } + $Xp1++; + + if ( !isset($Positions[$Yp]) ) + { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; } + else + { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; } + } + + $ManualColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + foreach($Positions as $Yp => $Bounds) + { + $X1 = $Bounds["X1"]; $X1Dec = $this->getFirstDecimal($X1); if ( $X1Dec != 0 ) { $X1 = floor($X1)+1; } + $X2 = $Bounds["X2"]; $X2Dec = $this->getFirstDecimal($X2); if ( $X2Dec != 0 ) { $X2 = floor($X2)-1; } + imageline($this->Picture,$X1,$Yp,$X2,$Yp,$ManualColor); + } + $this->drawFilledRectangle($X1,$MinY+1,floor($X2),$MaxY-1,$Color); + + $Radius++; + $this->drawRoundedRectangle($X1,$Y1,$X2+1,$Y2-1,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + + $this->Shadow = $RestoreShadow; + } + + /* Draw a rectangle with rounded corners */ + function drawRoundedFilledRectangle_deprecated($X1,$Y1,$X2,$Y2,$Radius,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; } + + list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2); + + if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1)+2)/2); } + if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1)+2)/2); } + + $RestoreShadow = $this->Shadow; + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa)); + } + + if ( $this->getFirstDecimal($X2) >= 5 ) { $XOffset2 = 1; } else { $XOffset2 = 0; } + if ( $this->getFirstDecimal($X1) <= 5 ) { $XOffset1 = 1; } else { $XOffset1 = 0; } + + if ( !$this->Antialias ) { $XOffset1 = 1; $XOffset2 = 1; } + + $YTop = floor($Y1+$Radius); + $YBottom = floor($Y2-$Radius); + + $this->drawFilledRectangle($X1-$XOffset1,$YTop,$X2+$XOffset2,$YBottom,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE)); + + $Step = 360 / (2 * PI * $Radius); + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + $Color2 = $this->allocateColor($this->Picture,255,0,0,$Alpha); + $Drawn = ""; + + if ( $Alpha < 100 ) { $Drawn[$YTop] = FALSE; } + if ( $Alpha < 100 ) { $Drawn[$YBottom] = TRUE; } + + for($i=0;$i<=90;$i=$i+$Step) + { + $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius; + $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius; + $Yp = sin(($i+180)*PI/180) * $Radius + $YTop; + + if ( $this->getFirstDecimal($Xp1) > 5 ) { $XOffset1 = 1; } else { $XOffset1 = 0; } + if ( $this->getFirstDecimal($Xp2) > 5 ) { $XOffset2 = 1; } else { $XOffset2 = 0; } + if ( $this->getFirstDecimal($Yp) > 5 ) { $YOffset = 1; } else { $YOffset = 0; } + + if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 ) + imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color); + + $Drawn[$Yp+$YOffset] = $Xp2; + + $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius; + $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius; + $Yp = sin(($i+90)*PI/180) * $Radius + $YBottom; + + if ( $this->getFirstDecimal($Xp1) > 7 ) { $XOffset1 = 1; } else { $XOffset1 = 0; } + if ( $this->getFirstDecimal($Xp2) > 7 ) { $XOffset2 = 1; } else { $XOffset2 = 0; } + if ( $this->getFirstDecimal($Yp) > 5 ) { $YOffset = 1; } else { $YOffset = 0; } + + if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 ) + imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color); + + $Drawn[$Yp+$YOffset] = $Xp2; + } + + $this->drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + + $this->Shadow = $RestoreShadow; + } + + /* Draw a rectangle */ + function drawRectangle($X1,$Y1,$X2,$Y2,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE; + + if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); } + if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); } + + if ( $this->Antialias ) + { + if ( $NoAngle ) + { + $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + $this->drawLine($X2,$Y1+1,$X2,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + $this->drawLine($X1,$Y1+1,$X1,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + } + else + { + $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + $this->drawLine($X2,$Y1,$X2,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + $this->drawLine($X1,$Y1,$X1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + } + } + else + { + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + imagerectangle($this->Picture,$X1,$Y1,$X2,$Y2,$Color); + } + } + + /* Draw a filled rectangle */ + function drawFilledRectangle($X1,$Y1,$X2,$Y2,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : NULL; + $Dash = isset($Format["Dash"]) ? $Format["Dash"] : FALSE; + $DashStep = isset($Format["DashStep"]) ? $Format["DashStep"] : 4; + $DashR = isset($Format["DashR"]) ? $Format["DashR"] : 0; + $DashG = isset($Format["DashG"]) ? $Format["DashG"] : 0; + $DashB = isset($Format["DashB"]) ? $Format["DashB"] : 0; + $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE; + + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + + if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); } + if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); } + + $RestoreShadow = $this->Shadow; + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + $this->drawFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle)); + } + + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + if ( $NoAngle ) + { + imagefilledrectangle($this->Picture,ceil($X1)+1,ceil($Y1),floor($X2)-1,floor($Y2),$Color); + imageline($this->Picture,ceil($X1),ceil($Y1)+1,ceil($X1),floor($Y2)-1,$Color); + imageline($this->Picture,floor($X2),ceil($Y1)+1,floor($X2),floor($Y2)-1,$Color); + } + else + imagefilledrectangle($this->Picture,ceil($X1),ceil($Y1),floor($X2),floor($Y2),$Color); + + if ( $Dash ) + { + if ( $BorderR != -1 ) { $iX1=$X1+1; $iY1=$Y1+1; $iX2=$X2-1; $iY2=$Y2-1; } else { $iX1=$X1; $iY1=$Y1; $iX2=$X2; $iY2=$Y2; } + + $Color = $this->allocateColor($this->Picture,$DashR,$DashG,$DashB,$Alpha); + $Y=$iY1-$DashStep; + for($X=$iX1; $X<=$iX2+($iY2-$iY1); $X=$X+$DashStep) + { + $Y=$Y+$DashStep; + if ( $X > $iX2 ) { $Xa = $X-($X-$iX2); $Ya = $iY1+($X-$iX2); } else { $Xa = $X; $Ya = $iY1; } + if ( $Y > $iY2 ) { $Xb = $iX1+($Y-$iY2); $Yb = $Y-($Y-$iY2); } else { $Xb = $iX1; $Yb = $Y; } + imageline($this->Picture,$Xa,$Ya,$Xb,$Yb,$Color); + } + } + + if ( $this->Antialias && !$NoBorder ) + { + if ( $X1 < ceil($X1) ) + { + $AlphaA = $Alpha * (ceil($X1) - $X1); + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA); + imageline($this->Picture,ceil($X1)-1,ceil($Y1),ceil($X1)-1,floor($Y2),$Color); + } + + if ( $Y1 < ceil($Y1) ) + { + $AlphaA = $Alpha * (ceil($Y1) - $Y1); + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA); + imageline($this->Picture,ceil($X1),ceil($Y1)-1,floor($X2),ceil($Y1)-1,$Color); + } + + if ( $X2 > floor($X2) ) + { + $AlphaA = $Alpha * (.5-($X2 - floor($X2))); + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA); + imageline($this->Picture,floor($X2)+1,ceil($Y1),floor($X2)+1,floor($Y2),$Color); + } + + if ( $Y2 > floor($Y2) ) + { + $AlphaA = $Alpha * (.5-($Y2 - floor($Y2))); + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA); + imageline($this->Picture,ceil($X1),floor($Y2)+1,floor($X2),floor($Y2)+1,$Color); + } + } + + if ( $BorderR != -1 ) + $this->drawRectangle($X1,$Y1,$X2,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle)); + + $this->Shadow = $RestoreShadow; + } + + /* Draw a rectangular marker of the specified size */ + function drawRectangleMarker($X,$Y,$Format="") + { + $Size = isset($Format["Size"]) ? $Format["Size"] : 4; + + $HalfSize = floor($Size/2); + $this->drawFilledRectangle($X-$HalfSize,$Y-$HalfSize,$X+$HalfSize,$Y+$HalfSize,$Format); + } + + /* Drawn a spline based on the bezier function */ + function drawSpline($Coordinates,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Force = isset($Format["Force"]) ? $Format["Force"] : 30; + $Forces = isset($Format["Forces"]) ? $Format["Forces"] : NULL; + $ShowC = isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + $PathOnly = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE; + $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL; + + $Cpt = NULL; $Mode = NULL; $Result = ""; + for($i=1;$i<=count($Coordinates)-1;$i++) + { + $X1 = $Coordinates[$i-1][0]; $Y1 = $Coordinates[$i-1][1]; + $X2 = $Coordinates[$i][0]; $Y2 = $Coordinates[$i][1]; + + if ( $Forces != NULL ) { $Force = $Forces[$i]; } + + /* First segment */ + if ( $i == 1 ) + { $Xv1 = $X1; $Yv1 = $Y1; } + else + { + $Angle1 = $this->getAngle($XLast,$YLast,$X1,$Y1); + $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2); + $XOff = cos($Angle2 * PI / 180) * $Force + $X1; + $YOff = sin($Angle2 * PI / 180) * $Force + $Y1; + + $Xv1 = cos($Angle1 * PI / 180) * $Force + $XOff; + $Yv1 = sin($Angle1 * PI / 180) * $Force + $YOff; + } + + /* Last segment */ + if ( $i == count($Coordinates)-1 ) + { $Xv2 = $X2; $Yv2 = $Y2; } + else + { + $Angle1 = $this->getAngle($X2,$Y2,$Coordinates[$i+1][0],$Coordinates[$i+1][1]); + $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2); + $XOff = cos(($Angle2+180) * PI / 180) * $Force + $X2; + $YOff = sin(($Angle2+180) * PI / 180) * $Force + $Y2; + + $Xv2 = cos(($Angle1+180) * PI / 180) * $Force + $XOff; + $Yv2 = sin(($Angle1+180) * PI / 180) * $Force + $YOff; + } + + $Path = $this->drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format); + if ($PathOnly) { $Result[] = $Path; } + + $XLast = $X1; $YLast = $Y1; + } + + return($Result); + } + + /* Draw a bezier curve with two controls points */ + function drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $ShowC = isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE; + $Segments = isset($Format["Segments"]) ? $Format["Segments"] : NULL; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + $NoDraw = isset($Format["NoDraw"]) ? $Format["NoDraw"] : FALSE; + $PathOnly = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE; + $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL; + $DrawArrow = isset($Format["DrawArrow"]) ? $Format["DrawArrow"] : FALSE; + $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 10; + $ArrowRatio = isset($Format["ArrowRatio"]) ? $Format["ArrowRatio"] : .5; + $ArrowTwoHeads = isset($Format["ArrowTwoHeads"]) ? $Format["ArrowTwoHeads"] : FALSE; + + if ( $Segments == NULL ) + { + $Length = $this->getLength($X1,$Y1,$X2,$Y2); + $Precision = ($Length*125)/1000; + } + else + $Precision = $Segments; + + $P[0]["X"] = $X1; $P[0]["Y"] = $Y1; + $P[1]["X"] = $Xv1; $P[1]["Y"] = $Yv1; + $P[2]["X"] = $Xv2; $P[2]["Y"] = $Yv2; + $P[3]["X"] = $X2; $P[3]["Y"] = $Y2; + + /* Compute the bezier points */ + $Q = ""; $ID = 0; $Path = ""; + for($i=0;$i<=$Precision;$i=$i+1) + { + $u = $i / $Precision; + + $C = ""; + $C[0] = (1 - $u) * (1 - $u) * (1 - $u); + $C[1] = ($u * 3) * (1 - $u) * (1 - $u); + $C[2] = 3 * $u * $u * (1 - $u); + $C[3] = $u * $u * $u; + + for($j=0;$j<=3;$j++) + { + if ( !isset($Q[$ID]) ) { $Q[$ID] = ""; } + if ( !isset($Q[$ID]["X"]) ) { $Q[$ID]["X"] = 0; } + if ( !isset($Q[$ID]["Y"]) ) { $Q[$ID]["Y"] = 0; } + + $Q[$ID]["X"] = $Q[$ID]["X"] + $P[$j]["X"] * $C[$j]; + $Q[$ID]["Y"] = $Q[$ID]["Y"] + $P[$j]["Y"] * $C[$j]; + } + $ID++; + } + $Q[$ID]["X"] = $X2; $Q[$ID]["Y"] = $Y2; + + if ( !$NoDraw ) + { + /* Display the control points */ + if ( $ShowC && !$PathOnly ) + { + $Xv1 = floor($Xv1); $Yv1 = floor($Yv1); $Xv2 = floor($Xv2); $Yv2 = floor($Yv2); + + $this->drawLine($X1,$Y1,$X2,$Y2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>30)); + + $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4); + $this->drawRectangleMarker($Xv1,$Yv1,$MyMarkerSettings); + $this->drawText($Xv1+4,$Yv1,"v1"); + $MyMarkerSettings = array("R"=>0,"G"=>0,"B"=>255,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4); + $this->drawRectangleMarker($Xv2,$Yv2,$MyMarkerSettings); + $this->drawText($Xv2+4,$Yv2,"v2"); + } + + /* Draw the bezier */ + $LastX = NULL; $LastY = NULL; $Cpt = NULL; $Mode = NULL; $ArrowS = NULL; + foreach ($Q as $Key => $Point) + { + $X = $Point["X"]; $Y = $Point["Y"]; + + /* Get the first segment */ + if ( $ArrowS == NULL && $LastX != NULL && $LastY != NULL ) + { $ArrowS["X2"] = $LastX; $ArrowS["Y2"] = $LastY; $ArrowS["X1"] = $X; $ArrowS["Y1"] = $Y; } + + if ( $LastX != NULL && $LastY != NULL && !$PathOnly) + list($Cpt,$Mode) = $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Cpt"=>$Cpt,"Mode"=>$Mode,"Weight"=>$Weight)); + + /* Get the last segment */ + $ArrowE["X1"] = $LastX; $ArrowE["Y1"] = $LastY; $ArrowE["X2"] = $X; $ArrowE["Y2"] = $Y; + + $LastX = $X; $LastY = $Y; + } + + if ( $DrawArrow && !$PathOnly ) + { + $ArrowSettings = array("FillR"=>$R,"FillG"=>$G,"FillB"=>$B,"Alpha"=>$Alpha,"Size"=>$ArrowSize,"Ratio"=>$ArrowRatio); + if ( $ArrowTwoHeads ) + $this->drawArrow($ArrowS["X1"],$ArrowS["Y1"],$ArrowS["X2"],$ArrowS["Y2"],$ArrowSettings); + + $this->drawArrow($ArrowE["X1"],$ArrowE["Y1"],$ArrowE["X2"],$ArrowE["Y2"],$ArrowSettings); + } + } + return($Q); + } + + /* Draw a line between two points */ + function drawLine($X1,$Y1,$X2,$Y2,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + $Cpt = isset($Format["Cpt"]) ? $Format["Cpt"] : 1; + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : 1; + $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL; + $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL; + + if ( $this->Antialias == FALSE && $Ticks == NULL ) + { + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa); + imageline($this->Picture,$X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$ShadowColor); + } + + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + imageline($this->Picture,$X1,$Y1,$X2,$Y2,$Color); + return(0); + } + + $Distance = sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1)); + if ( $Distance == 0 ) { return(-1); } + + /* Derivative algorithm for overweighted lines, re-route to polygons primitives */ + if ( $Weight != NULL ) + { + $Angle = $this->getAngle($X1,$Y1,$X2,$Y2); + $PolySettings = array ("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderAlpha"=>$Alpha); + + if ( $Ticks == NULL ) + { + $Points = ""; + $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y1; + $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y1; + $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y2; + $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y2; + + $this->drawPolygon($Points,$PolySettings); + } + else + { + for($i=0;$i<=$Distance;$i=$i+$Ticks*2) + { + $Xa = (($X2-$X1)/$Distance) * $i + $X1; $Ya = (($Y2-$Y1)/$Distance) * $i + $Y1; + $Xb = (($X2-$X1)/$Distance) * ($i+$Ticks) + $X1; $Yb = (($Y2-$Y1)/$Distance) * ($i+$Ticks) + $Y1; + + $Points = ""; + $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Ya; + $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Ya; + $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Yb; + $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Yb; + + $this->drawPolygon($Points,$PolySettings); + } + } + + return(1); + } + + $XStep = ($X2-$X1) / $Distance; + $YStep = ($Y2-$Y1) / $Distance; + + for($i=0;$i<=$Distance;$i++) + { + $X = $i * $XStep + $X1; + $Y = $i * $YStep + $Y1; + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + + if ( $Threshold != NULL ) + { + foreach($Threshold as $Key => $Parameters) + { + if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"]) + { + if ( isset($Parameters["R"]) ) { $RT = $Parameters["R"]; } else { $RT = 0; } + if ( isset($Parameters["G"]) ) { $GT = $Parameters["G"]; } else { $GT = 0; } + if ( isset($Parameters["B"]) ) { $BT = $Parameters["B"]; } else { $BT = 0; } + if ( isset($Parameters["Alpha"]) ) { $AlphaT = $Parameters["Alpha"]; } else { $AlphaT = 0; } + $Color = array("R"=>$RT,"G"=>$GT,"B"=>$BT,"Alpha"=>$AlphaT); + } + } + } + + if ( $Ticks != NULL ) + { + if ( $Cpt % $Ticks == 0 ) + { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } } + + if ( $Mode == 1 ) + $this->drawAntialiasPixel($X,$Y,$Color); + + $Cpt++; + } + else + $this->drawAntialiasPixel($X,$Y,$Color); + } + + return(array($Cpt,$Mode)); + } + + /* Draw a circle */ + function drawCircle($Xc,$Yc,$Height,$Width,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + + $Height = abs($Height); + $Width = abs($Width); + + if ( $Height == 0 ) { $Height = 1; } + if ( $Width == 0 ) { $Width = 1; } + $Xc = floor($Xc); $Yc = floor($Yc); + + $RestoreShadow = $this->Shadow; + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + $this->drawCircle($Xc+$this->ShadowX,$Yc+$this->ShadowY,$Height,$Width,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks)); + } + + if ( $Width == 0 ) { $Width = $Height; } + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + $Step = 360 / (2 * PI * max($Width,$Height)); + $Mode = 1; $Cpt = 1; + for($i=0;$i<=360;$i=$i+$Step) + { + $X = cos($i*PI/180) * $Height + $Xc; + $Y = sin($i*PI/180) * $Width + $Yc; + + if ( $Ticks != NULL ) + { + if ( $Cpt % $Ticks == 0 ) + { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } } + + if ( $Mode == 1 ) + $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + $Cpt++; + } + else + $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + } + $this->Shadow = $RestoreShadow; + } + + /* Draw a filled circle */ + function drawFilledCircle($X,$Y,$Radius,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + + if ( $Radius == 0 ) { $Radius = 1; } + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + $X = floor($X); $Y = floor($Y); + + $Radius = abs($Radius); + + $RestoreShadow = $this->Shadow; + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + $this->drawFilledCircle($X+$this->ShadowX,$Y+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks)); + } + + $this->Mask = ""; + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + for ($i=0; $i<=$Radius*2; $i++) + { + $Slice = sqrt($Radius * $Radius - ($Radius - $i) * ($Radius - $i)); + $XPos = floor($Slice); + $YPos = $Y + $i - $Radius; + $AAlias = $Slice - floor($Slice); + + $this->Mask[$X-$XPos][$YPos] = TRUE; + $this->Mask[$X+$XPos][$YPos] = TRUE; + imageline($this->Picture,$X-$XPos,$YPos,$X+$XPos,$YPos,$Color); + } + if ( $this->Antialias ) + $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + + $this->Mask = ""; + + if ( $BorderR != -1 ) + $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks)); + + $this->Shadow = $RestoreShadow; + } + + /* Write text */ + function drawText($X,$Y,$Text,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : $this->FontColorR; + $G = isset($Format["G"]) ? $Format["G"] : $this->FontColorG; + $B = isset($Format["B"]) ? $Format["B"] : $this->FontColorB; + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0; + $Align = isset($Format["Align"]) ? $Format["Align"] : TEXT_ALIGN_BOTTOMLEFT; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA; + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize; + $ShowOrigine = isset($Format["ShowOrigine"]) ? $Format["ShowOrigine"] : FALSE; + $TOffset = isset($Format["TOffset"]) ? $Format["TOffset"] : 2; + $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : FALSE; + $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : TRUE; + $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 6; + $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : FALSE; + $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 6; + $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 255; + $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 255; + $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 255; + $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50; + $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : ""; + $BoxBorderR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0; + $BoxBorderG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0; + $BoxBorderB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0; + $BoxBorderAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50; + $NoShadow = isset($Format["NoShadow"]) ? $Format["NoShadow"] : FALSE; + + $Shadow = $this->Shadow; + if ( $NoShadow ) { $this->Shadow = FALSE; } + + if ( $BoxSurrounding != "" ) { $BoxBorderR = $BoxR - $BoxSurrounding; $BoxBorderG = $BoxG - $BoxSurrounding; $BoxBorderB = $BoxB - $BoxSurrounding; $BoxBorderAlpha = $BoxAlpha; } + + if ( $ShowOrigine ) + { + $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4); + $this->drawRectangleMarker($X,$Y,$MyMarkerSettings); + } + + $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text); + + if ( $DrawBox && ($Angle == 0 || $Angle == 90 || $Angle == 180 || $Angle == 270)) + { + $T[0]["X"]=0;$T[0]["Y"]=0;$T[1]["X"]=0;$T[1]["Y"]=0;$T[2]["X"]=0;$T[2]["Y"]=0;$T[3]["X"]=0;$T[3]["Y"]=0; + if ( $Angle == 0 ) { $T[0]["X"]=-$TOffset;$T[0]["Y"]=$TOffset;$T[1]["X"]=$TOffset;$T[1]["Y"]=$TOffset;$T[2]["X"]=$TOffset;$T[2]["Y"]=-$TOffset;$T[3]["X"]=-$TOffset;$T[3]["Y"]=-$TOffset; } + + $X1 = min($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) - $BorderOffset + 3; + $Y1 = min($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) - $BorderOffset; + $X2 = max($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) + $BorderOffset + 3; + $Y2 = max($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) + $BorderOffset - 3; + + $X1 = $X1 - $TxtPos[$Align]["X"] + $X + $T[0]["X"]; + $Y1 = $Y1 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"]; + $X2 = $X2 - $TxtPos[$Align]["X"] + $X + $T[0]["X"]; + $Y2 = $Y2 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"]; + + $Settings = array("R"=>$BoxR,"G"=>$BoxG,"B"=>$BoxB,"Alpha"=>$BoxAlpha,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"BorderAlpha"=>$BoxBorderAlpha); + + if ( $BoxRounded ) + { $this->drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$RoundedRadius,$Settings); } + else + { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Settings); } + } + + $X = $X - $TxtPos[$Align]["X"] + $X; + $Y = $Y - $TxtPos[$Align]["Y"] + $Y; + + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $C_ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa); + imagettftext($this->Picture,$FontSize,$Angle,$X+$this->ShadowX,$Y+$this->ShadowY,$C_ShadowColor,$FontName,$Text); + } + + $C_TextColor = $this->AllocateColor($this->Picture,$R,$G,$B,$Alpha); + imagettftext($this->Picture,$FontSize,$Angle,$X,$Y,$C_TextColor,$FontName,$Text); + + $this->Shadow = $Shadow; + + return($TxtPos); + } + + /* Draw a gradient within a defined area */ + function drawGradientArea($X1,$Y1,$X2,$Y2,$Direction,$Format="") + { + $StartR = isset($Format["StartR"]) ? $Format["StartR"] : 90; + $StartG = isset($Format["StartG"]) ? $Format["StartG"] : 90; + $StartB = isset($Format["StartB"]) ? $Format["StartB"] : 90; + $EndR = isset($Format["EndR"]) ? $Format["EndR"] : 0; + $EndG = isset($Format["EndG"]) ? $Format["EndG"] : 0; + $EndB = isset($Format["EndB"]) ? $Format["EndB"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Levels = isset($Format["Levels"]) ? $Format["Levels"] : NULL; + + $Shadow = $this->Shadow; + $this->Shadow = FALSE; + + if ( $StartR == $EndR && $StartG == $EndG && $StartB == $EndB ) + { + $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,array("R"=>$StartR,"G"=>$StartG,"B"=>$StartB,"Alpha"=>$Alpha)); + return(0); + } + + if ( $Levels != NULL ) + { $EndR=$StartR+$Levels; $EndG=$StartG+$Levels; $EndB=$StartB+$Levels; } + + if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); } + if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); } + + if ( $Direction == DIRECTION_VERTICAL ) { $Width = abs($Y2-$Y1); } + if ( $Direction == DIRECTION_HORIZONTAL ) { $Width = abs($X2-$X1); } + + $Step = max(abs($EndR-$StartR),abs($EndG-$StartG),abs($EndB-$StartB)); + $StepSize = $Width/$Step; + $RStep = ($EndR-$StartR)/$Step; + $GStep = ($EndG-$StartG)/$Step; + $BStep = ($EndB-$StartB)/$Step; + + $R=$StartR;$G=$StartG;$B=$StartB; + switch($Direction) + { + case DIRECTION_VERTICAL: + $StartY = $Y1; $EndY = floor($Y2)+1; $LastY2 = $StartY; + for($i=0;$i<=$Step;$i++) + { + $Y2 = floor($StartY + ($i * $StepSize)); + + if ($Y2 > $EndY) { $Y2 = $EndY; } + if (($Y1 != $Y2 && $Y1 < $Y2) || $Y2 == $EndY) + { + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color); + $LastY2 = max($LastY2,$Y2); + $Y1 = $Y2+1; + } + $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep; + } + if ( $LastY2 < $EndY && isset($Color)) { for ($i=$LastY2+1;$i<=$EndY;$i++) { $this->drawLine($X1,$i,$X2,$i,$Color); } } + break; + + case DIRECTION_HORIZONTAL: + $StartX = $X1; $EndX = $X2; + for($i=0;$i<=$Step;$i++) + { + $X2 = floor($StartX + ($i * $StepSize)); + + if ($X2 > $EndX) { $X2 = $EndX; } + if (($X1 != $X2 && $X1 < $X2) || $X2 == $EndX) + { + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color); + $X1 = $X2+1; + } + $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep; + } + if ( $X2 < $EndX && isset($Color)) { $this->drawFilledRectangle($X2,$Y1,$EndX,$Y2,$Color); } + break; + } + + $this->Shadow = $Shadow; + + } + + /* Draw an aliased pixel */ + function drawAntialiasPixel($X,$Y,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + + if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize ) + return(-1); + + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + if ( !$this->Antialias ) + { + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa); + imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor); + } + + $PlotColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + imagesetpixel($this->Picture,$X,$Y,$PlotColor); + + return(0); + } + + $Plot = ""; + $Xi = floor($X); + $Yi = floor($Y); + + if ( $Xi == $X && $Yi == $Y) + { + if ( $Alpha == 100 ) + $this->drawAlphaPixel($X,$Y,100,$R,$G,$B); + else + $this->drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B); + } + else + { + $Alpha1 = (((1 - ($X - floor($X))) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha; + if ( $Alpha1 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi,$Alpha1,$R,$G,$B); } + + $Alpha2 = ((($X - floor($X)) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha; + if ( $Alpha2 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi,$Alpha2,$R,$G,$B); } + + $Alpha3 = (((1 - ($X - floor($X))) * ($Y - floor($Y)) * 100) / 100) * $Alpha; + if ( $Alpha3 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi+1,$Alpha3,$R,$G,$B); } + + $Alpha4 = ((($X - floor($X)) * ($Y - floor($Y)) * 100) / 100) * $Alpha; + if ( $Alpha4 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi+1,$Alpha4,$R,$G,$B); } + } + } + + /* Draw a semi-transparent pixel */ + function drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B) + { + if ( isset($this->Mask[$X])) { if ( isset($this->Mask[$X][$Y]) ) { return(0); } } + + if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize ) + return(-1); + + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $AlphaFactor = floor(($Alpha / 100) * $this->Shadowa); + $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$AlphaFactor); + imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor); + } + + $C_Aliased = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + imagesetpixel($this->Picture,$X,$Y,$C_Aliased); + } + + /* Convert apha to base 10 */ + function convertAlpha($AlphaValue) + { return((127/100)*(100-$AlphaValue)); } + + /* Allocate a color with transparency */ + function allocateColor($Picture,$R,$G,$B,$Alpha=100) + { + if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } + if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + if ( $Alpha < 0 ) { $Alpha = 0; } + if ( $Alpha > 100) { $Alpha = 100; } + + $Alpha = $this->convertAlpha($Alpha); + return(imagecolorallocatealpha($Picture,$R,$G,$B,$Alpha)); + } + + /* Load a PNG file and draw it over the chart */ + function drawFromPNG($X,$Y,$FileName) + { $this->drawFromPicture(1,$FileName,$X,$Y); } + + /* Load a GIF file and draw it over the chart */ + function drawFromGIF($X,$Y,$FileName) + { $this->drawFromPicture(2,$FileName,$X,$Y); } + + /* Load a JPEG file and draw it over the chart */ + function drawFromJPG($X,$Y,$FileName) + { $this->drawFromPicture(3,$FileName,$X,$Y); } + + function getPicInfo($FileName) + { + $Infos = getimagesize($FileName); + $Width = $Infos[0]; + $Height = $Infos[1]; + $Type = $Infos["mime"]; + + if ( $Type == "image/png") { $Type = 1; } + if ( $Type == "image/gif") { $Type = 2; } + if ( $Type == "image/jpeg ") { $Type = 3; } + + return(array($Width,$Height,$Type)); + } + + /* Generic loader function for external pictures */ + function drawFromPicture($PicType,$FileName,$X,$Y) + { + if ( file_exists($FileName)) + { + list($Width,$Height) = $this->getPicInfo($FileName); + + if ( $PicType == 1 ) + { $Raster = imagecreatefrompng($FileName); } + elseif ( $PicType == 2 ) + { $Raster = imagecreatefromgif($FileName); } + elseif ( $PicType == 3 ) + { $Raster = imagecreatefromjpeg($FileName); } + else + { return(0); } + + + $RestoreShadow = $this->Shadow; + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + if ( $PicType == 3 ) + $this->drawFilledRectangle($X+$this->ShadowX,$Y+$this->ShadowY,$X+$Width+$this->ShadowX,$Y+$Height+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa)); + else + { + $TranparentID = imagecolortransparent($Raster); + for ($Xc=0;$Xc<=$Width-1;$Xc++) + { + for ($Yc=0;$Yc<=$Height-1;$Yc++) + { + $RGBa = imagecolorat($Raster,$Xc,$Yc); + $Values = imagecolorsforindex($Raster,$RGBa); + if ( $Values["alpha"] < 120 ) + { + $AlphaFactor = floor(($this->Shadowa / 100) * ((100 / 127) * (127-$Values["alpha"]))); + $this->drawAlphaPixel($X+$Xc+$this->ShadowX,$Y+$Yc+$this->ShadowY,$AlphaFactor,$this->ShadowR,$this->ShadowG,$this->ShadowB); + } + } + } + } + } + $this->Shadow = $RestoreShadow; + + imagecopy($this->Picture,$Raster,$X,$Y,0,0,$Width,$Height); + imagedestroy($Raster); + } + } + + /* Draw an arrow */ + function drawArrow($X1,$Y1,$X2,$Y2,$Format="") + { + $FillR = isset($Format["FillR"]) ? $Format["FillR"] : 0; + $FillG = isset($Format["FillG"]) ? $Format["FillG"] : 0; + $FillB = isset($Format["FillB"]) ? $Format["FillB"] : 0; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Size = isset($Format["Size"]) ? $Format["Size"] : 10; + $Ratio = isset($Format["Ratio"]) ? $Format["Ratio"] : .5; + $TwoHeads = isset($Format["TwoHeads"]) ? $Format["TwoHeads"] : FALSE; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : FALSE; + + /* Calculate the line angle */ + $Angle = $this->getAngle($X1,$Y1,$X2,$Y2); + + /* Override Shadow support, this will be managed internally */ + $RestoreShadow = $this->Shadow; + if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 ) + { + $this->Shadow = FALSE; + $this->drawArrow($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("FillR"=>$this->ShadowR,"FillG"=>$this->ShadowG,"FillB"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Size"=>$Size,"Ratio"=>$Ratio,"TwoHeads"=>$TwoHeads,"Ticks"=>$Ticks)); + } + + /* Draw the 1st Head */ + $TailX = cos(($Angle-180)*PI/180)*$Size+$X2; + $TailY = sin(($Angle-180)*PI/180)*$Size+$Y2; + + $Points = ""; + $Points[] = $X2; $Points[] = $Y2; + $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY; + $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY; + $Points[] = $X2; $Points[] = $Y2; + + /* Visual correction */ + if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; } + if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; } + + $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha); + ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor); + + $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + + /* Draw the second head */ + if ( $TwoHeads ) + { + $Angle = $this->getAngle($X2,$Y2,$X1,$Y1); + + $TailX2 = cos(($Angle-180)*PI/180)*$Size+$X1; + $TailY2 = sin(($Angle-180)*PI/180)*$Size+$Y1; + + $Points = ""; + $Points[] = $X1; $Points[] = $Y1; + $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY2; + $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY2; + $Points[] = $X1; $Points[] = $Y1; + + /* Visual correction */ + if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; } + if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; } + + $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha); + ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor); + + $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + + $this->drawLine($TailX,$TailY,$TailX2,$TailY2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + } + else + $this->drawLine($X1,$Y1,$TailX,$TailY,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + + /* Re-enable shadows */ + $this->Shadow = $RestoreShadow; + } + + /* Draw a label with associated arrow */ + function drawArrowLabel($X1,$Y1,$Text,$Format="") + { + $FillR = isset($Format["FillR"]) ? $Format["FillR"] : 0; + $FillG = isset($Format["FillG"]) ? $Format["FillG"] : 0; + $FillB = isset($Format["FillB"]) ? $Format["FillB"] : 0; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB; + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Length = isset($Format["Length"]) ? $Format["Length"] : 50; + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 315; + $Size = isset($Format["Size"]) ? $Format["Size"] : 10; + $Position = isset($Format["Position"]) ? $Format["Position"] : POSITION_TOP; + $RoundPos = isset($Format["RoundPos"]) ? $Format["RoundPos"] : FALSE; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + + $Angle = $Angle % 360; + + $X2 = sin(($Angle+180)*PI/180)*$Length+$X1; + $Y2 = cos(($Angle+180)*PI/180)*$Length+$Y1; + + if ( $RoundPos && $Angle > 0 && $Angle < 180 ) { $Y2 = ceil($Y2); } + if ( $RoundPos && $Angle > 180 ) { $Y2 = floor($Y2); } + + $this->drawArrow($X2,$Y2,$X1,$Y1,$Format); + + $Size = imagettfbbox($FontSize,0,$FontName,$Text); + $TxtWidth = max(abs($Size[2]-$Size[0]),abs($Size[0]-$Size[6])); + $TxtHeight = max(abs($Size[1]-$Size[7]),abs($Size[3]-$Size[1])); + + if ( $Angle > 0 && $Angle < 180 ) + { + $this->drawLine($X2,$Y2,$X2-$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + if ( $Position == POSITION_TOP ) + $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_BOTTOMRIGHT)); + else + $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPRIGHT)); + } + else + { + $this->drawLine($X2,$Y2,$X2+$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + if ( $Position == POSITION_TOP ) + $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha)); + else + $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPLEFT)); + } + } + + /* Draw a progress bar filled with specified % */ + function drawProgress($X,$Y,$Percent,$Format="") + { + if ( $Percent > 100 ) { $Percent = 100; } + if ( $Percent < 0 ) { $Percent = 0; } + + $Width = isset($Format["Width"]) ? $Format["Width"] : 200; + $Height = isset($Format["Height"]) ? $Format["Height"] : 20; + $Orientation = isset($Format["Orientation"]) ? $Format["Orientation"] : ORIENTATION_HORIZONTAL; + $ShowLabel = isset($Format["ShowLabel"]) ? $Format["ShowLabel"] : FALSE; + $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : LABEL_POS_INSIDE; + $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 10; + $R = isset($Format["R"]) ? $Format["R"] : 130; + $G = isset($Format["G"]) ? $Format["G"] : 130; + $B = isset($Format["B"]) ? $Format["B"] : 130; + $RFade = isset($Format["RFade"]) ? $Format["RFade"] : -1; + $GFade = isset($Format["GFade"]) ? $Format["GFade"] : -1; + $BFade = isset($Format["BFade"]) ? $Format["BFade"] : -1; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B; + $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 0; + $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 0; + $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 0; + $BoxBackR = isset($Format["BoxBackR"]) ? $Format["BoxBackR"] : 255; + $BoxBackG = isset($Format["BoxBackG"]) ? $Format["BoxBackG"] : 255; + $BoxBackB = isset($Format["BoxBackB"]) ? $Format["BoxBackB"] : 255; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : NULL; + $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE; + + if ( $RFade != -1 && $GFade != -1 && $BFade != -1 ) + { + $RFade = (($RFade-$R)/100)*$Percent+$R; + $GFade = (($GFade-$G)/100)*$Percent+$G; + $BFade = (($BFade-$B)/100)*$Percent+$B; + } + + if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; } + if ( $BoxSurrounding != NULL ) { $BoxBorderR = $BoxBackR + $Surrounding; $BoxBorderG = $BoxBackG + $Surrounding; $BoxBorderB = $BoxBackB + $Surrounding; } + + if ( $Orientation == ORIENTATION_VERTICAL ) + { + $InnerHeight = (($Height-2)/100)*$Percent; + $this->drawFilledRectangle($X,$Y,$X+$Width,$Y-$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle)); + + $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; + if ( $RFade != -1 && $GFade != -1 && $BFade != -1 ) + { + $GradientOptions = array("StartR"=>$RFade,"StartG"=>$GFade,"StartB"=>$BFade,"EndR"=>$R,"EndG"=>$G,"EndB"=>$B); + $this->drawGradientArea($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,DIRECTION_VERTICAL,$GradientOptions); + + if ( $Surrounding ) + $this->drawRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding)); + } + else + $this->drawFilledRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + + $this->Shadow = $RestoreShadow; + + if ( $ShowLabel && $LabelPos == LABEL_POS_BOTTOM ) { $this->drawText($X+($Width/2),$Y+$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_TOPMIDDLE)); } + if ( $ShowLabel && $LabelPos == LABEL_POS_TOP ) { $this->drawText($X+($Width/2),$Y-$Height-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); } + if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE ) { $this->drawText($X+($Width/2),$Y-$InnerHeight-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT,"Angle"=>90)); } + if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER ) { $this->drawText($X+($Width/2),$Y-($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"Angle"=>90)); } + } + else + { + if ( $Percent == 100 ) + $InnerWidth = $Width-1; + else + $InnerWidth = (($Width-2)/100)*$Percent; + + $this->drawFilledRectangle($X,$Y,$X+$Width,$Y+$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle)); + + $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; + if ( $RFade != -1 && $GFade != -1 && $BFade != -1 ) + { + $GradientOptions = array("StartR"=>$R,"StartG"=>$G,"StartB"=>$B,"EndR"=>$RFade,"EndG"=>$GFade,"EndB"=>$BFade); + $this->drawGradientArea($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,DIRECTION_HORIZONTAL,$GradientOptions); + + if ( $Surrounding ) + $this->drawRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding)); + } + else + $this->drawFilledRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + + $this->Shadow = $RestoreShadow; + + if ( $ShowLabel && $LabelPos == LABEL_POS_LEFT ) { $this->drawText($X-$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); } + if ( $ShowLabel && $LabelPos == LABEL_POS_RIGHT ) { $this->drawText($X+$Width+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); } + if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER ) { $this->drawText($X+($Width/2),$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); } + if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE ) { $this->drawText($X+$InnerWidth+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); } + } + } + + /* Get the legend box size */ + function getLegendSize($Format="") + { + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize; + $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5; + $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5; + $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND; + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL; + $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5; + $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5; + $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth; + $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight; + $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5; + + $Data = $this->DataSet->getData(); + + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"])) + { + list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]); + if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; } + if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; } + } + } + + $YStep = max($this->FontSize,$IconAreaHeight) + 5; + $XStep = $IconAreaWidth + 5; + $XStep = $XSpacing; + + $X=100; $Y=100; + + $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X; + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + if ( $Mode == LEGEND_VERTICAL ) + { + $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Lines = preg_split("/\n/",$Serie["Description"]); + $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + $Lines = preg_split("/\n/",$Serie["Description"]); + $Width = ""; + foreach($Lines as $Key => $Value) + { + $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Width[] = $BoxArray[1]["X"]; + } + + $vX=max($Width)+$XStep; + } + } + } + $vY=$vY-$YStep; $vX=$vX-$XStep; + + $TopOffset = $Y - $Boundaries["T"]; + if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; } + + $Width = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin); + $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin); + + return(array("Width"=>$Width,"Height"=>$Height)); + } + + /* Draw the legend of the active series */ + function drawLegend($X,$Y,$Format="") + { + $Family = isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX; + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize; + $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->FontColorR; + $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->FontColorG; + $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->FontColorB; + $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5; + $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5; + $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth; + $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight; + $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5; + $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5; + $R = isset($Format["R"]) ? $Format["R"] : 200; + $G = isset($Format["G"]) ? $Format["G"] : 200; + $B = isset($Format["B"]) ? $Format["B"] : 200; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND; + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL; + + if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; } + + $Data = $this->DataSet->getData(); + + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"])) + { + list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]); + if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; } + if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; } + } + } + + $YStep = max($this->FontSize,$IconAreaHeight) + 5; + $XStep = $IconAreaWidth + 5; + $XStep = $XSpacing; + + $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X; + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + if ( $Mode == LEGEND_VERTICAL ) + { + $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Lines = preg_split("/\n/",$Serie["Description"]); + $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + $Lines = preg_split("/\n/",$Serie["Description"]); + $Width = ""; + foreach($Lines as $Key => $Value) + { + $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Width[] = $BoxArray[1]["X"]; + } + + $vX=max($Width)+$XStep; + } + } + } + $vY=$vY-$YStep; $vX=$vX-$XStep; + + $TopOffset = $Y - $Boundaries["T"]; + if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; } + + if ( $Style == LEGEND_ROUND ) + $this->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + elseif ( $Style == LEGEND_BOX ) + $this->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + + $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; + $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"]; + + if ( isset($Serie["Picture"]) ) + { + $Picture = $Serie["Picture"]; + list($PicWidth,$PicHeight) = $this->getPicInfo($Picture); + $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2; + + $this->drawFromPNG($PicX-$PicWidth/2,$PicY-$PicHeight/2,$Picture); + } + else + { + if ( $Family == LEGEND_FAMILY_BOX ) + { + if ( $BoxWidth != $IconAreaWidth ) { $XOffset = floor(($IconAreaWidth-$BoxWidth)/2); } else { $XOffset = 0; } + if ( $BoxHeight != $IconAreaHeight ) { $YOffset = floor(($IconAreaHeight-$BoxHeight)/2); } else { $YOffset = 0; } + + $this->drawFilledRectangle($X+1+$XOffset,$Y+1+$YOffset,$X+$BoxWidth+$XOffset+1,$Y+$BoxHeight+1+$YOffset,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); + $this->drawFilledRectangle($X+$XOffset,$Y+$YOffset,$X+$BoxWidth+$XOffset,$Y+$BoxHeight+$YOffset,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20)); + } + elseif ( $Family == LEGEND_FAMILY_CIRCLE ) + { + $this->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); + $this->drawFilledCircle($X+$IconAreaWidth/2,$Y+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20)); + } + elseif ( $Family == LEGEND_FAMILY_LINE ) + { + $this->drawLine($X+1,$Y+1+$IconAreaHeight/2,$X+1+$IconAreaWidth,$Y+1+$IconAreaHeight/2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20,"Ticks"=>$Ticks,"Weight"=>$Weight)); + $this->drawLine($X,$Y+$IconAreaHeight/2,$X+$IconAreaWidth,$Y+$IconAreaHeight/2,array("R"=>$R,"G"=>$G,"B"=>$B,"Ticks"=>$Ticks,"Weight"=>$Weight)); + } + } + + if ( $Mode == LEGEND_VERTICAL ) + { + $Lines = preg_split("/\n/",$Serie["Description"]); + foreach($Lines as $Key => $Value) + $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName)); + + $Y=$Y+max($this->FontSize*count($Lines),$IconAreaHeight) + 5; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + $Lines = preg_split("/\n/",$Serie["Description"]); + $Width = ""; + foreach($Lines as $Key => $Value) + { + $BoxArray = $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName)); + $Width[] = $BoxArray[1]["X"]; + } + $X=max($Width)+2+$XStep; + } + } + } + + + $this->Shadow = $RestoreShadow; + } + + function drawScale($Format="") + { + $Pos = isset($Format["Pos"]) ? $Format["Pos"] : SCALE_POS_LEFTRIGHT; + $Floating = isset($Format["Floating"]) ? $Format["Floating"] : FALSE; + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING; + $RemoveXAxis = isset($Format["RemoveXAxis"]) ? $Format["RemoveXAxis"] : FALSE; + $MinDivHeight = isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20; + $Factors = isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5); + $ManualScale = isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100)); + $XMargin = isset($Format["XMargin"]) ? $Format["XMargin"] : AUTO; + $YMargin = isset($Format["YMargin"]) ? $Format["YMargin"] : 0; + $ScaleSpacing = isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15; + $InnerTickWidth = isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2; + $OuterTickWidth = isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2; + $DrawXLines = isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : TRUE; + $DrawYLines = isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL; + $GridTicks = isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4; + $GridR = isset($Format["GridR"]) ? $Format["GridR"] : 255; + $GridG = isset($Format["GridG"]) ? $Format["GridG"] : 255; + $GridB = isset($Format["GridB"]) ? $Format["GridB"] : 255; + $GridAlpha = isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40; + $AxisRo = isset($Format["AxisR"]) ? $Format["AxisR"] : 0; + $AxisGo = isset($Format["AxisG"]) ? $Format["AxisG"] : 0; + $AxisBo = isset($Format["AxisB"]) ? $Format["AxisB"] : 0; + $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100; + $TickRo = isset($Format["TickR"]) ? $Format["TickR"] : 0; + $TickGo = isset($Format["TickG"]) ? $Format["TickG"] : 0; + $TickBo = isset($Format["TickB"]) ? $Format["TickB"] : 0; + $TickAlpha = isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100; + $DrawSubTicks = isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE; + $InnerSubTickWidth = isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0; + $OuterSubTickWidth = isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2; + $SubTickR = isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255; + $SubTickG = isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0; + $SubTickB = isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0; + $SubTickAlpha = isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100; + $AutoAxisLabels = isset($Format["AutoAxisLabels"]) ? $Format["AutoAxisLabels"] : TRUE; + $XReleasePercent = isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1; + $DrawArrows = isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE; + $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8; + $CycleBackground = isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE; + $BackgroundR1 = isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255; + $BackgroundG1 = isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255; + $BackgroundB1 = isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255; + $BackgroundAlpha1 = isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 20; + $BackgroundR2 = isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230; + $BackgroundG2 = isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230; + $BackgroundB2 = isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230; + $BackgroundAlpha2 = isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 20; + $LabelingMethod = isset($Format["LabelingMethod"]) ? $Format["LabelingMethod"] : LABELING_ALL; + $LabelSkip = isset($Format["LabelSkip"]) ? $Format["LabelSkip"] : 0; + $LabelRotation = isset($Format["LabelRotation"]) ? $Format["LabelRotation"] : 0; + $RemoveSkippedAxis = isset($Format["RemoveSkippedAxis"]) ? $Format["RemoveSkippedAxis"] : FALSE; + $SkippedAxisTicks = isset($Format["SkippedAxisTicks"]) ? $Format["SkippedAxisTicks"] : $GridTicks+2; + $SkippedAxisR = isset($Format["SkippedAxisR"]) ? $Format["SkippedAxisR"] : $GridR; + $SkippedAxisG = isset($Format["SkippedAxisG"]) ? $Format["SkippedAxisG"] : $GridG; + $SkippedAxisB = isset($Format["SkippedAxisB"]) ? $Format["SkippedAxisB"] : $GridB; + $SkippedAxisAlpha = isset($Format["SkippedAxisAlpha"]) ? $Format["SkippedAxisAlpha"] : $GridAlpha-30; + $SkippedTickR = isset($Format["SkippedTickR"]) ? $Format["SkippedTickR"] : $TickRo; + $SkippedTickG = isset($Format["SkippedTickG"]) ? $Format["SkippedTickG"] : $TickGo; + $SkippedTickB = isset($Format["SkippedTicksB"]) ? $Format["SkippedTickB"] : $TickBo; + $SkippedTickAlpha = isset($Format["SkippedTickAlpha"]) ? $Format["SkippedTickAlpha"] : $TickAlpha-80; + $SkippedInnerTickWidth = isset($Format["SkippedInnerTickWidth"]) ? $Format["SkippedInnerTickWidth"] : 0; + $SkippedOuterTickWidth = isset($Format["SkippedOuterTickWidth"]) ? $Format["SkippedOuterTickWidth"] : 2; + + /* Floating scale require X & Y margins to be set manually */ + if ( $Floating && ( $XMargin == AUTO || $YMargin == 0 ) ) { $Floating = FALSE; } + + /* Skip a NOTICE event in case of an empty array */ + if ( $DrawYLines == NONE || $DrawYLines == FALSE ) { $DrawYLines = array("zarma"=>"31"); } + + /* Define the color for the skipped elements */ + $SkippedAxisColor = array("R"=>$SkippedAxisR,"G"=>$SkippedAxisG,"B"=>$SkippedAxisB,"Alpha"=>$SkippedAxisAlpha,"Ticks"=>$SkippedAxisTicks); + $SkippedTickColor = array("R"=>$SkippedTickR,"G"=>$SkippedTickG,"B"=>$SkippedTickB,"Alpha"=>$SkippedTickAlpha); + + $Data = $this->DataSet->getData(); + if ( isset($Data["Abscissa"]) ) { $Abscissa = $Data["Abscissa"]; } else { $Abscissa = NULL; } + + /* Unset the abscissa axis, needed if we display multiple charts on the same picture */ + if ( $Abscissa != NULL ) + { + foreach($Data["Axis"] as $AxisID => $Parameters) + { if ($Parameters["Identity"] == AXIS_X) { unset($Data["Axis"][$AxisID]); } } + } + + /* Build the scale settings */ + $GotXAxis = FALSE; + foreach($Data["Axis"] as $AxisID => $AxisParameter) + { + if ( $AxisParameter["Identity"] == AXIS_X ) { $GotXAxis = TRUE; } + + if ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_Y) + { $Height = $this->GraphAreaY2-$this->GraphAreaY1 - $YMargin*2; } + elseif ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_X) + { $Height = $this->GraphAreaX2-$this->GraphAreaX1; } + elseif ( $Pos == SCALE_POS_TOPBOTTOM && $AxisParameter["Identity"] == AXIS_Y) + { $Height = $this->GraphAreaX2-$this->GraphAreaX1 - $YMargin*2;; } + else + { $Height = $this->GraphAreaY2-$this->GraphAreaY1; } + + $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT; + if ( $Mode == SCALE_MODE_FLOATING || $Mode == SCALE_MODE_START0 ) + { + foreach($Data["Series"] as $SerieID => $SerieParameter) + { + if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] && $Data["Abscissa"] != $SerieID) + { + $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]); + $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]); + } + } + $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent; + + $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin; + if ( $Mode == SCALE_MODE_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; } + } + elseif ( $Mode == SCALE_MODE_MANUAL ) + { + if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) ) + { + $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"]; + $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"]; + } + else + { echo "Manual scale boundaries not set."; exit(); } + } + elseif ( $Mode == SCALE_MODE_ADDALL || $Mode == SCALE_MODE_ADDALL_START0 ) + { + $Series = ""; + foreach($Data["Series"] as $SerieID => $SerieParameter) + { if ( $SerieParameter["Axis"] == $AxisID && $SerieParameter["isDrawable"] && $Data["Abscissa"] != $SerieID ) { $Series[$SerieID] = count($Data["Series"][$SerieID]["Data"]); } } + + for ($ID=0;$ID<=max($Series)-1;$ID++) + { + $PointMin = 0; $PointMax = 0; + foreach($Series as $SerieID => $ValuesCount ) + { + if (isset($Data["Series"][$SerieID]["Data"][$ID]) && $Data["Series"][$SerieID]["Data"][$ID] != NULL ) + { + $Value = $Data["Series"][$SerieID]["Data"][$ID]; + if ( $Value > 0 ) { $PointMax = $PointMax + $Value; } else { $PointMin = $PointMin + $Value; } + } + } + $AxisMax = max($AxisMax,$PointMax); + $AxisMin = min($AxisMin,$PointMin); + } + $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent; + $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin; + } + $MaxDivs = floor($Height/$MinDivHeight); + + if ( $Mode == SCALE_MODE_ADDALL_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; } + + $Scale = $this->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID); + + $Data["Axis"][$AxisID]["Margin"] = $AxisParameter["Identity"] == AXIS_X ? $XMargin : $YMargin; + $Data["Axis"][$AxisID]["ScaleMin"] = $Scale["XMin"]; + $Data["Axis"][$AxisID]["ScaleMax"] = $Scale["XMax"]; + $Data["Axis"][$AxisID]["Rows"] = $Scale["Rows"]; + $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"]; + + if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; } + + if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; } + if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; } + if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; } + } + + /* Still no X axis */ + if ( $GotXAxis == FALSE ) + { + if ( $Abscissa != NULL ) + { + $Points = count($Data["Series"][$Abscissa]["Data"]); + if ( $AutoAxisLabels ) + $AxisName = isset($Data["Series"][$Abscissa]["Description"]) ? $Data["Series"][$Abscissa]["Description"] : NULL; + else + $AxisName = NULL; + } + else + { + $Points = 0; + $AxisName = isset($Data["XAxisName"]) ? $Data["XAxisName"] : NULL; + foreach($Data["Series"] as $SerieID => $SerieParameter) + { if ( $SerieParameter["isDrawable"] ) { $Points = max($Points,count($SerieParameter["Data"])); } } + } + + $AxisID = count($Data["Axis"]); + $Data["Axis"][$AxisID]["Identity"] = AXIS_X; + if ( $Pos == SCALE_POS_LEFTRIGHT ) { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_BOTTOM; } else { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; } + if ( isset($Data["AbscissaName"]) ) { $Data["Axis"][$AxisID]["Name"] = $Data["AbscissaName"]; } + if ( $XMargin == AUTO ) + { + if ( $Pos == SCALE_POS_LEFTRIGHT ) + { $Height = $this->GraphAreaX2-$this->GraphAreaX1; } + else + { $Height = $this->GraphAreaY2-$this->GraphAreaY1; } + + if ( $Points == 1 ) + $Data["Axis"][$AxisID]["Margin"] = $Height / 2; + else + $Data["Axis"][$AxisID]["Margin"] = ($Height/$Points) / 2; + } + else + { $Data["Axis"][$AxisID]["Margin"] = $XMargin; } + $Data["Axis"][$AxisID]["Rows"] = $Points-1; + if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; } + if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; } + if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; } + } + + /* Do we need to reverse the abscissa position? */ + if ( $Pos != SCALE_POS_LEFTRIGHT ) + { + if ( $Data["AbsicssaPosition"] == AXIS_POSITION_BOTTOM ) + { $Data["AbsicssaPosition"] = AXIS_POSITION_LEFT; } + else + { $Data["AbsicssaPosition"] = AXIS_POSITION_RIGHT; } + } + $Data["Axis"][$AxisID]["Position"] = $Data["AbsicssaPosition"]; + + $this->DataSet->saveOrientation($Pos); + $this->DataSet->saveAxisConfig($Data["Axis"]); + $this->DataSet->saveYMargin($YMargin); + + $FontColorRo = $this->FontColorR; $FontColorGo = $this->FontColorG; $FontColorBo = $this->FontColorB; + + $AxisPos["L"] = $this->GraphAreaX1; $AxisPos["R"] = $this->GraphAreaX2; $AxisPos["T"] = $this->GraphAreaY1; $AxisPos["B"] = $this->GraphAreaY2; + foreach($Data["Axis"] as $AxisID => $Parameters) + { + if ( isset($Parameters["Color"]) ) + { + $AxisR = $Parameters["Color"]["R"]; $AxisG = $Parameters["Color"]["G"]; $AxisB = $Parameters["Color"]["B"]; + $TickR = $Parameters["Color"]["R"]; $TickG = $Parameters["Color"]["G"]; $TickB = $Parameters["Color"]["B"]; + $this->setFontProperties(array("R"=>$Parameters["Color"]["R"],"G"=>$Parameters["Color"]["G"],"B"=>$Parameters["Color"]["B"])); + } + else + { + $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo; + $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo; + $this->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo)); + } + + $LastValue = "w00t"; $ID = 1; + if ( $Parameters["Identity"] == AXIS_X ) + { + if ( $Pos == SCALE_POS_LEFTRIGHT ) + { + if ( $Parameters["Position"] == AXIS_POSITION_BOTTOM ) + { + if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 2; } + if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; } + if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 5; } + if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; } + + if ( !$RemoveXAxis ) + { + if ( $Floating ) + { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + } + + $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2; + + if ($Parameters["Rows"] == 0 ) { $Step = $Width; } else { $Step = $Width / ($Parameters["Rows"]); } + + $MaxBottom = $AxisPos["B"]; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i; + $YPos = $AxisPos["B"]; + + if ( $Abscissa != NULL ) + { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } } + else + { + if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) ) + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); + else + $Value = $i; + } + + $ID++; $Skipped = TRUE; + if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis) + { + $Bounds = $this->drawText($XPos,$YPos+$OuterTickWidth+$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign)); + $TxtBottom = $YPos+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]); + $MaxBottom = max($MaxBottom,$TxtBottom); + $LastValue = $Value; + $Skipped = FALSE; + } + + if ( $RemoveXAxis ) { $Skipped = FALSE; } + + if ( $Skipped ) + { + if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); } + if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis) { $this->drawLine($XPos,$YPos-$SkippedInnerTickWidth,$XPos,$YPos+$SkippedOuterTickWidth,$SkippedTickColor); } + } + else + { + if ( $DrawXLines && ($XPos != $this->GraphAreaX1 && $XPos != $this->GraphAreaX2) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); } + } + } + + if ( isset($Parameters["Name"]) && !$RemoveXAxis) + { + $YPos = $MaxBottom+2; + $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE)); + $MaxBottom = $Bounds[0]["Y"]; + + $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize; + } + + $AxisPos["B"] = $MaxBottom + $ScaleSpacing; + } + elseif ( $Parameters["Position"] == AXIS_POSITION_TOP ) + { + if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 2; } + if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; } + if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 5; } + if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; } + + if ( !$RemoveXAxis ) + { + if ( $Floating ) + { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + } + + $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2; + + if ($Parameters["Rows"] == 0 ) { $Step = $Width; } else { $Step = $Width / $Parameters["Rows"]; } + + $MinTop = $AxisPos["T"]; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i; + $YPos = $AxisPos["T"]; + + if ( $Abscissa != NULL ) + { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } } + else + { + if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) ) + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); + else + $Value = $i; + } + + $ID++; $Skipped = TRUE; + if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis) + { + $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign)); + $TxtBox = $YPos-$OuterTickWidth-2-($Bounds[0]["Y"]-$Bounds[2]["Y"]); + $MinTop = min($MinTop,$TxtBox); + $LastValue = $Value; + $Skipped = FALSE; + } + + if ( $RemoveXAxis ) { $Skipped = FALSE; } + + if ( $Skipped ) + { + if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); } + if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis ) { $this->drawLine($XPos,$YPos+$SkippedInnerTickWidth,$XPos,$YPos-$SkippedOuterTickWidth,$SkippedTickColor); } + } + else + { + if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos+$InnerTickWidth,$XPos,$YPos-$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); } + } + + } + + if ( isset($Parameters["Name"]) && !$RemoveXAxis ) + { + $YPos = $MinTop-2; + $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + $MinTop = $Bounds[2]["Y"]; + + $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop; + } + + $AxisPos["T"] = $MinTop - $ScaleSpacing; + } + } + elseif ( $Pos == SCALE_POS_TOPBOTTOM ) + { + if ( $Parameters["Position"] == AXIS_POSITION_LEFT ) + { + if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -2; } + if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -6; } + if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -2; } + if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -5; } + + if ( !$RemoveXAxis ) + { + if ( $Floating ) + { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + } + + $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2; + + if ($Parameters["Rows"] == 0 ) { $Step = $Height; } else { $Step = $Height / $Parameters["Rows"]; } + + $MinLeft = $AxisPos["L"]; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $YPos = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i; + $XPos = $AxisPos["L"]; + + if ( $Abscissa != NULL ) + { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } } + else + { + if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) ) + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); + else + $Value = $i; + } + + $ID++; $Skipped = TRUE; + if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis) + { + $Bounds = $this->drawText($XPos-$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign)); + $TxtBox = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]); + $MinLeft = min($MinLeft,$TxtBox); + $LastValue = $Value; + $Skipped = FALSE; + } + + if ( $RemoveXAxis ) { $Skipped = FALSE; } + + if ( $Skipped ) + { + if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); } + if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis ) { $this->drawLine($XPos-$SkippedOuterTickWidth,$YPos,$XPos+$SkippedInnerTickWidth,$YPos,$SkippedTickColor); } + } + else + { + if ( $DrawXLines && ($YPos != $this->GraphAreaY1 && $YPos != $this->GraphAreaY2) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); } + } + + } + if ( isset($Parameters["Name"]) && !$RemoveXAxis ) + { + $XPos = $MinLeft-2; + $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90)); + $MinLeft = $Bounds[0]["X"]; + + $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft; + } + + $AxisPos["L"] = $MinLeft - $ScaleSpacing; + } + elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT ) + { + if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 2; } + if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 6; } + if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 5; } + if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 7; } + + if ( !$RemoveXAxis ) + { + if ( $Floating ) + { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + } + + $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2; + + if ($Parameters["Rows"] == 0 ) { $Step = $Height; } else { $Step = $Height / $Parameters["Rows"]; } + + $MaxRight = $AxisPos["R"]; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $YPos = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i; + $XPos = $AxisPos["R"]; + + if ( $Abscissa != NULL ) + { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } } + else + { + if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) ) + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); + else + $Value = $i; + } + + $ID++; $Skipped = TRUE; + if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis) + { + $Bounds = $this->drawText($XPos+$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign)); + $TxtBox = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]); + $MaxRight = max($MaxRight,$TxtBox); + $LastValue = $Value; + $Skipped = FALSE; + } + + if ( $RemoveXAxis ) { $Skipped = FALSE; } + + if ( $Skipped ) + { + if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); } + if ( ($SkippedInnerTickWidth != 0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis ) { $this->drawLine($XPos+$SkippedOuterTickWidth,$YPos,$XPos-$SkippedInnerTickWidth,$YPos,$SkippedTickColor); } + } + else + { + if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + if ( ($InnerTickWidth != 0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos+$OuterTickWidth,$YPos,$XPos-$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); } + } + + } + + if ( isset($Parameters["Name"]) && !$RemoveXAxis) + { + $XPos = $MaxRight+4; + $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270)); + $MaxRight = $Bounds[1]["X"]; + + $this->DataSet->Data["GraphArea"]["X2"] = $MaxRight + $this->FontSize; + } + + $AxisPos["R"] = $MaxRight + $ScaleSpacing; + } + } + } + + + + if ( $Parameters["Identity"] == AXIS_Y ) + { + if ( $Pos == SCALE_POS_LEFTRIGHT ) + { + if ( $Parameters["Position"] == AXIS_POSITION_LEFT ) + { + + if ( $Floating ) + { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2; + $Step = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"]; + $LastY = NULL; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $YPos = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i; + $XPos = $AxisPos["L"]; + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); } + + if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + + if ( $DrawSubTicks && $i != $Parameters["Rows"] ) + $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); + $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]); + $MinLeft = min($MinLeft,$TxtLeft); + + $LastY = $YPos; + } + + if ( isset($Parameters["Name"]) ) + { + $XPos = $MinLeft-2; + $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90)); + $MinLeft = $Bounds[2]["X"]; + + $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft; + } + + $AxisPos["L"] = $MinLeft - $ScaleSpacing; + } + elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT ) + { + if ( $Floating ) + { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2; + $Step = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"]; + $LastY = NULL; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $YPos = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i; + $XPos = $AxisPos["R"]; + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); } + + if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + + if ( $DrawSubTicks && $i != $Parameters["Rows"] ) + $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); + $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]); + $MaxLeft = max($MaxLeft,$TxtLeft); + + $LastY = $YPos; + } + + if ( isset($Parameters["Name"]) ) + { + $XPos = $MaxLeft+6; + $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270)); + $MaxLeft = $Bounds[2]["X"]; + + $this->DataSet->Data["GraphArea"]["X2"] = $MaxLeft + $this->FontSize; + } + $AxisPos["R"] = $MaxLeft + $ScaleSpacing; + } + } + elseif ( $Pos == SCALE_POS_TOPBOTTOM ) + { + if ( $Parameters["Position"] == AXIS_POSITION_TOP ) + { + if ( $Floating ) + { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2; + $Step = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"]; + $LastX = NULL; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i; + $YPos = $AxisPos["T"]; + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastX != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); } + + if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + + if ( $DrawSubTicks && $i != $Parameters["Rows"] ) + $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-2,$Value,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + $TxtHeight = $YPos-$OuterTickWidth-2-($Bounds[1]["Y"]-$Bounds[2]["Y"]); + $MinTop = min($MinTop,$TxtHeight); + + $LastX = $XPos; + } + + if ( isset($Parameters["Name"]) ) + { + $YPos = $MinTop-2; + $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + $MinTop = $Bounds[2]["Y"]; + + $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop; + } + + $AxisPos["T"] = $MinTop - $ScaleSpacing; + } + elseif ( $Parameters["Position"] == AXIS_POSITION_BOTTOM ) + { + if ( $Floating ) + { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2; + $Step = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"]; + $LastX = NULL; + for($i=0;$i<=$Parameters["Rows"];$i++) + { + $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i; + $YPos = $AxisPos["B"]; + $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastX != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); } + + if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + + if ( $DrawSubTicks && $i != $Parameters["Rows"] ) + $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->drawText($XPos,$YPos+$OuterTickWidth+2,$Value,array("Align"=>TEXT_ALIGN_TOPMIDDLE)); + $TxtHeight = $YPos+$OuterTickWidth+2+($Bounds[1]["Y"]-$Bounds[2]["Y"]); + $MaxBottom = max($MaxBottom,$TxtHeight); + + $LastX = $XPos; + } + + if ( isset($Parameters["Name"]) ) + { + $YPos = $MaxBottom+2; + $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2; + $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE)); + $MaxBottom = $Bounds[0]["Y"]; + + $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize; + } + + $AxisPos["B"] = $MaxBottom + $ScaleSpacing; + } + } + } + } + } + + function isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) + { + if ( $LabelingMethod == LABELING_DIFFERENT && $Value != $LastValue ) { return(TRUE); } + if ( $LabelingMethod == LABELING_DIFFERENT && $Value == $LastValue ) { return(FALSE); } + if ( $LabelingMethod == LABELING_ALL && $LabelSkip == 0 ) { return(TRUE); } + if ( $LabelingMethod == LABELING_ALL && ($ID+$LabelSkip) % ($LabelSkip+1) != 1 ) { return(FALSE); } + + return(TRUE); + } + + /* Compute the scale, check for the best visual factors */ + function computeScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID=0) + { + /* Compute each factors */ + $Results = ""; + foreach ($Factors as $Key => $Factor) + $Results[$Factor] = $this->processScale($XMin,$XMax,$MaxDivs,array($Factor),$AxisID); + + /* Remove scales that are creating to much decimals */ + $GoodScaleFactors = ""; + foreach ($Results as $Key => $Result) + { + $Decimals = preg_split("/\./",$Result["RowHeight"]); + if ( (!isset($Decimals[1])) || (strlen($Decimals[1]) < 6) ) { $GoodScaleFactors[] = $Key; } + } + + /* Found no correct scale, shame,... returns the 1st one as default */ + if ( $GoodScaleFactors == "" ) { return($Results[$Factors[0]]); } + + /* Find the factor that cause the maximum number of Rows */ + $MaxRows = 0; $BestFactor = 0; + foreach($GoodScaleFactors as $Key => $Factor) + { if ( $Results[$Factor]["Rows"] > $MaxRows ) { $MaxRows = $Results[$Factor]["Rows"]; $BestFactor = $Factor; } } + + /* Return the best visual scale */ + return($Results[$BestFactor]); + } + + /* Compute the best matching scale based on size & factors */ + function processScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID) + { + $ScaleHeight = abs(ceil($XMax)-floor($XMin)); + + if ( isset($this->DataSet->Data["Axis"][$AxisID]["Format"]) ) + $Format = $this->DataSet->Data["Axis"][$AxisID]["Format"]; + else + $Format = NULL; + + if ( isset($this->DataSet->Data["Axis"][$AxisID]["Display"]) ) + $Mode = $this->DataSet->Data["Axis"][$AxisID]["Display"]; + else + $Mode = AXIS_FORMAT_DEFAULT; + + $Scale = ""; + if ( $XMin != $XMax ) + { + $Found = FALSE; $Rescaled = FALSE; $Scaled10Factor = .0001; $Result = 0; + while(!$Found) + { + foreach($Factors as $Key => $Factor) + { + if ( !$Found ) + { + if ( !($this->modulo($XMin,$Factor*$Scaled10Factor) == 0) || ($XMin != floor($XMin))) { $XMinRescaled = floor($XMin/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor; } else { $XMinRescaled = $XMin; } + if ( !($this->modulo($XMax,$Factor*$Scaled10Factor) == 0) || ($XMax != floor($XMax))) { $XMaxRescaled = floor($XMax/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor+($Factor*$Scaled10Factor); } else { $XMaxRescaled = $XMax; } + $ScaleHeightRescaled = abs($XMaxRescaled-$XMinRescaled); + + if ( !$Found && floor($ScaleHeightRescaled/($Factor*$Scaled10Factor)) <= $MaxDivs ) { $Found = TRUE; $Rescaled = TRUE; $Result = $Factor * $Scaled10Factor; } + } + } + $Scaled10Factor = $Scaled10Factor * 10; + } + + /* ReCall Min / Max / Height */ + if ( $Rescaled ) { $XMin = $XMinRescaled; $XMax = $XMaxRescaled; $ScaleHeight = $ScaleHeightRescaled; } + + /* Compute rows size */ + $Rows = floor($ScaleHeight / $Result); if ( $Rows == 0 ) { $Rows = 1; } + $RowHeight = $ScaleHeight / $Rows; + + /* Return the results */ + $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin; $Scale["XMax"] = $XMax; + + /* Compute the needed decimals for the metric view to avoid repetition of the same X Axis labels */ + if ( $Mode == AXIS_FORMAT_METRIC && $Format == NULL ) + { + $Done = FALSE; $GoodDecimals = 0; + for($Decimals=0;$Decimals<=10;$Decimals++) + { + if ( !$Done ) + { + $LastLabel = "zob"; $ScaleOK = TRUE; + for($i=0;$i<=$Rows;$i++) + { + $Value = $XMin + $i*$RowHeight; + $Label = $this->scaleFormat($Value,AXIS_FORMAT_METRIC,$Decimals); + + if ( $LastLabel == $Label ) { $ScaleOK = FALSE; } + $LastLabel = $Label; + } + if ( $ScaleOK ) { $Done = TRUE; $GoodDecimals = $Decimals; } + } + } + + $Scale["Format"] = $GoodDecimals; + } + } + else + { + /* If all values are the same we keep a +1/-1 scale */ + $Rows = 2; $XMin = $XMax-1; $XMax = $XMax+1; $RowHeight = 1; + + /* Return the results */ + $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin; $Scale["XMax"] = $XMax; + } + + return($Scale); + } + + function modulo($Value1,$Value2) + { + if (floor($Value2) == 0) { return(0); } + if (floor($Value2) != 0) { return($Value1 % $Value2); } + + $MinValue = min($Value1,$Value2); $Factor = 10; + while ( floor($MinValue*$Factor) == 0 ) + { $Factor = $Factor * 10; } + + return(($Value1*$Factor) % ($Value2*$Factor)); + } + + /* Draw an X threshold */ + function drawXThreshold($Value,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 255; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 50; + $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 6; + $Wide = isset($Format["Wide"]) ? $Format["Wide"] : FALSE; + $WideFactor = isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5; + $WriteCaption = isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE; + $Caption = isset($Format["Caption"]) ? $Format["Caption"] : NULL; + $CaptionAlign = isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP; + $CaptionOffset = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 5; + $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255; + $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255; + $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255; + $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100; + $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE; + $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE; + $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 3; + $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE; + $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3; + $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0; + $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0; + $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0; + $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 30; + $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : ""; + $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255; + $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255; + $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255; + $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100; + $ValueIsLabel = isset($Format["ValueIsLabel"]) ? $Format["ValueIsLabel"] : FALSE; + + $Data = $this->DataSet->getData(); + $AbscissaMargin = $this->getAbscissaMargin($Data); + $XScale = $this->scaleGetXSettings(); + + if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawXThreshold($ID,$Format); } return(0); } + + if ( $ValueIsLabel ) + { + $Format["ValueIsLabel"] = FALSE; + foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $SerieValue) + { if ( $SerieValue == $Value ) { $this->drawXThreshold($Key,$Format); } } + + return(0); + } + + $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius, + "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding, + "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha, + "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha); + + if ( $Caption == NULL ) + { + if ( isset($Data["Abscissa"]) ) + { + if ( isset($Data["Series"][$Data["Abscissa"]]["Data"][$Value]) ) + $Caption = $Data["Series"][$Data["Abscissa"]]["Data"][$Value]; + else + $Caption = $Value; + } + else + $Caption = $Value; + } + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1]; + $XPos = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value; + $YPos1 = $this->GraphAreaY1 + $Data["YMargin"]; + $YPos2 = $this->GraphAreaY2 - $Data["YMargin"]; + + if ( $XPos >= $this->GraphAreaX1 + $AbscissaMargin && $XPos <= $this->GraphAreaX2 - $AbscissaMargin ) + { + $this->drawLine($XPos,$YPos1,$XPos,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $Wide ) + { + $this->drawLine($XPos-1,$YPos1,$XPos-1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + $this->drawLine($XPos+1,$YPos1,$XPos+1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + } + + if ( $WriteCaption ) + { + if ( $CaptionAlign == CAPTION_LEFT_TOP ) + { $Y = $YPos1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; } + else + { $Y = $YPos2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; } + + $this->drawText($XPos,$Y,$Caption,$CaptionSettings); + } + + return(array("X"=>$XPos)); + } + } + elseif( $Data["Orientation"] == SCALE_POS_TOPBOTTOM ) + { + $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1]; + $XPos = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value; + $YPos1 = $this->GraphAreaX1 + $Data["YMargin"]; + $YPos2 = $this->GraphAreaX2 - $Data["YMargin"]; + + if ( $XPos >= $this->GraphAreaY1 + $AbscissaMargin && $XPos <= $this->GraphAreaY2 - $AbscissaMargin ) + { + $this->drawLine($YPos1,$XPos,$YPos2,$XPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $Wide ) + { + $this->drawLine($YPos1,$XPos-1,$YPos2,$XPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + $this->drawLine($YPos1,$XPos+1,$YPos2,$XPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + } + + if ( $WriteCaption ) + { + if ( $CaptionAlign == CAPTION_LEFT_TOP ) + { $Y = $YPos1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; } + else + { $Y = $YPos2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; } + + $this->drawText($Y,$XPos,$Caption,$CaptionSettings); + } + + return(array("X"=>$XPos)); + } + } + } + + /* Draw an X threshold area */ + function drawXThresholdArea($Value1,$Value2,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 255; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 20; + $Border = isset($Format["Border"]) ? $Format["Border"] : TRUE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20; + $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2; + $AreaName = isset($Format["AreaName"]) ? $Format["AreaName"] : NULL; + $NameAngle = isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO; + $NameR = isset($Format["NameR"]) ? $Format["NameR"] : 255; + $NameG = isset($Format["NameG"]) ? $Format["NameG"] : 255; + $NameB = isset($Format["NameB"]) ? $Format["NameB"] : 255; + $NameAlpha = isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100; + $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE; + + $RestoreShadow = $this->Shadow; + if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; } + + if ($BorderAlpha >100) { $BorderAlpha = 100;} + + $Data = $this->DataSet->getData(); + $XScale = $this->scaleGetXSettings(); + $AbscissaMargin = $this->getAbscissaMargin($Data); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1]; + $XPos1 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value1; + $XPos2 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value2; + $YPos1 = $this->GraphAreaY1 + $Data["YMargin"]; + $YPos2 = $this->GraphAreaY2 - $Data["YMargin"]; + + if ( $XPos1 < $this->GraphAreaX1 + $XScale[0] ) { $XPos1 = $this->GraphAreaX1 + $XScale[0]; } + if ( $XPos1 > $this->GraphAreaX2 - $XScale[0] ) { $XPos1 = $this->GraphAreaX2 - $XScale[0]; } + if ( $XPos2 < $this->GraphAreaX1 + $XScale[0] ) { $XPos2 = $this->GraphAreaX1 + $XScale[0]; } + if ( $XPos2 > $this->GraphAreaX2 - $XScale[0] ) { $XPos2 = $this->GraphAreaX2 - $XScale[0]; } + + $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + if ( $Border ) + { + $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + } + + if ( $AreaName != NULL ) + { + $XPos = ($XPos2-$XPos1)/2 + $XPos1; + $YPos = ($YPos2-$YPos1)/2 + $YPos1; + + if ( $NameAngle == ZONE_NAME_ANGLE_AUTO ) + { + $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName); + $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"]; + if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; } + } + $this->Shadow = $RestoreShadow; + $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); + if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; } + } + + $this->Shadow = $RestoreShadow; + return(array("X1"=>$XPos1,"X2"=>$XPos2)); + } + elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM ) + { + $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1]; + $XPos1 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value1; + $XPos2 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value2; + $YPos1 = $this->GraphAreaX1 + $Data["YMargin"]; + $YPos2 = $this->GraphAreaX2 - $Data["YMargin"]; + + if ( $XPos1 < $this->GraphAreaY1 + $XScale[0] ) { $XPos1 = $this->GraphAreaY1 + $XScale[0]; } + if ( $XPos1 > $this->GraphAreaY2 - $XScale[0] ) { $XPos1 = $this->GraphAreaY2 - $XScale[0]; } + if ( $XPos2 < $this->GraphAreaY1 + $XScale[0] ) { $XPos2 = $this->GraphAreaY1 + $XScale[0]; } + if ( $XPos2 > $this->GraphAreaY2 - $XScale[0] ) { $XPos2 = $this->GraphAreaY2 - $XScale[0]; } + + $this->drawFilledRectangle($YPos1,$XPos1,$YPos2,$XPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + if ( $Border ) + { + $this->drawLine($YPos1,$XPos1,$YPos2,$XPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + $this->drawLine($YPos1,$XPos2,$YPos2,$XPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + } + + if ( $AreaName != NULL ) + { + $XPos = ($XPos2-$XPos1)/2 + $XPos1; + $YPos = ($YPos2-$YPos1)/2 + $YPos1; + + $this->Shadow = $RestoreShadow; + $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); + if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; } + } + + $this->Shadow = $RestoreShadow; + return(array("X1"=>$XPos1,"X2"=>$XPos2)); + } + } + + /* Draw an Y threshold with the computed scale */ + function drawThreshold($Value,$Format="") + { + $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0; + $R = isset($Format["R"]) ? $Format["R"] : 255; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 50; + $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 6; + $Wide = isset($Format["Wide"]) ? $Format["Wide"] : FALSE; + $WideFactor = isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5; + $WriteCaption = isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE; + $Caption = isset($Format["Caption"]) ? $Format["Caption"] : NULL; + $CaptionAlign = isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP; + $CaptionOffset = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 10; + $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255; + $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255; + $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255; + $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100; + $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE; + $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE; + $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5; + $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE; + $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3; + $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0; + $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0; + $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0; + $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20; + $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : ""; + $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255; + $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255; + $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255; + $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100; + $NoMargin = isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE; + + if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawThreshold($ID,$Format); } return(0); } + + $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius, + "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding, + "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha, + "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha); + + $Data = $this->DataSet->getData(); + $AbscissaMargin = $this->getAbscissaMargin($Data); + + if ( $NoMargin ) { $AbscissaMargin = 0; } + if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); } + if ( $Caption == NULL ) { $Caption = $Value; } + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + $YPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID)); + if ( $YPos >= $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] && $YPos <= $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) + { + $X1 = $this->GraphAreaX1 + $AbscissaMargin; + $X2 = $this->GraphAreaX2 - $AbscissaMargin; + + $this->drawLine($X1,$YPos,$X2,$YPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $Wide ) + { + $this->drawLine($X1,$YPos-1,$X2,$YPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + $this->drawLine($X1,$YPos+1,$X2,$YPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + } + + if ( $WriteCaption ) + { + if ( $CaptionAlign == CAPTION_LEFT_TOP ) + { $X = $X1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; } + else + { $X = $X2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; } + + $this->drawText($X,$YPos,$Caption,$CaptionSettings); + } + } + + return(array("Y"=>$YPos)); + } + + if ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM ) + { + $XPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID)); + if ( $XPos >= $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] && $XPos <= $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) + { + $Y1 = $this->GraphAreaY1 + $AbscissaMargin; + $Y2 = $this->GraphAreaY2 - $AbscissaMargin; + + $this->drawLine($XPos,$Y1,$XPos,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $Wide ) + { + $this->drawLine($XPos-1,$Y1,$XPos-1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + $this->drawLine($XPos+1,$Y1,$XPos+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + } + + if ( $WriteCaption ) + { + if ( $CaptionAlign == CAPTION_LEFT_TOP ) + { $Y = $Y1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; } + else + { $Y = $Y2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; } + + $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; + $this->drawText($XPos,$Y,$Caption,$CaptionSettings); + } + } + + return(array("Y"=>$XPos)); + } + } + + /* Draw a threshold with the computed scale */ + function drawThresholdArea($Value1,$Value2,$Format="") + { + $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0; + $R = isset($Format["R"]) ? $Format["R"] : 255; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 20; + $Border = isset($Format["Border"]) ? $Format["Border"] : TRUE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20; + $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2; + $AreaName = isset($Format["AreaName"]) ? $Format["AreaName"] : NULL; + $NameAngle = isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO; + $NameR = isset($Format["NameR"]) ? $Format["NameR"] : 255; + $NameG = isset($Format["NameG"]) ? $Format["NameG"] : 255; + $NameB = isset($Format["NameB"]) ? $Format["NameB"] : 255; + $NameAlpha = isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100; + $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE; + $NoMargin = isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE; + + if ($Value1 > $Value2) { list($Value1, $Value2) = array($Value2, $Value1); } + + $RestoreShadow = $this->Shadow; + if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; } + + if ($BorderAlpha >100) { $BorderAlpha = 100;} + + $Data = $this->DataSet->getData(); + $AbscissaMargin = $this->getAbscissaMargin($Data); + + if ( $NoMargin ) { $AbscissaMargin = 0; } + if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); } + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + $XPos1 = $this->GraphAreaX1 + $AbscissaMargin; + $XPos2 = $this->GraphAreaX2 - $AbscissaMargin; + $YPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID)); + $YPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID)); + + if ( $YPos1 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; } + if ( $YPos1 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; } + if ( $YPos2 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; } + if ( $YPos2 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; } + + $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + if ( $Border ) + { + $this->drawLine($XPos1,$YPos1,$XPos2,$YPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + $this->drawLine($XPos1,$YPos2,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + } + + if ( $AreaName != NULL ) + { + $XPos = ($XPos2-$XPos1)/2 + $XPos1; + $YPos = ($YPos2-$YPos1)/2 + $YPos1; + $this->Shadow = $RestoreShadow; + $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); + if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; } + } + + $this->Shadow = $RestoreShadow; + return(array("Y1"=>$YPos1,"Y2"=>$YPos2)); + } + elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM ) + { + $YPos1 = $this->GraphAreaY1 + $AbscissaMargin; + $YPos2 = $this->GraphAreaY2 - $AbscissaMargin; + $XPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID)); + $XPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID)); + + if ( $XPos1 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; } + if ( $XPos1 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; } + if ( $XPos2 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; } + if ( $XPos2 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; } + + $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + if ( $Border ) + { + $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + } + + if ( $AreaName != NULL ) + { + $XPos = ($YPos2-$YPos1)/2 + $YPos1; + $YPos = ($XPos2-$XPos1)/2 + $XPos1; + + if ( $NameAngle == ZONE_NAME_ANGLE_AUTO ) + { + $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName); + $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"]; + if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; } + } + $this->Shadow = $RestoreShadow; + $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); + if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; } + } + + $this->Shadow = $RestoreShadow; + return(array("Y1"=>$XPos1,"Y2"=>$XPos2)); + } + } + + function scaleGetXSettings() + { + $Data = $this->DataSet->getData(); + foreach($Data["Axis"] as $AxisID => $Settings) + { + if ( $Settings["Identity"] == AXIS_X ) + { + $Rows = $Settings["Rows"]; + + return(array($Settings["Margin"],$Rows)); + } + } + } + + function scaleComputeY($Values,$Option="",$ReturnOnly0Height=FALSE) + { + $AxisID = isset($Option["AxisID"]) ? $Option["AxisID"] : 0; + $SerieName = isset($Option["SerieName"]) ? $Option["SerieName"] : NULL; + + $Data = $this->DataSet->getData(); + if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); } + + if ( $SerieName != NULL ) { $AxisID = $Data["Series"][$SerieName]["Axis"]; } + if ( !is_array($Values) ) { $tmp = $Values; $Values = ""; $Values[0] = $tmp; } + + $Result = ""; + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2; + $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"]; + $Step = $Height / $ScaleHeight; + + if ( $ReturnOnly0Height ) + { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } } + else + { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } } + } + else + { + $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2; + $ScaleWidth = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"]; + $Step = $Width / $ScaleWidth; + + if ( $ReturnOnly0Height ) + { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } } + else + { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } } + } + + if ( count($Result) == 1 ) + return($Result[0]); + else + return($Result); + } + + /* Format the axis values */ + function scaleFormat($Value,$Mode=NULL,$Format=NULL,$Unit=NULL) + { + if ( $Value == VOID ) { return(""); } + + if ( $Mode == AXIS_FORMAT_TRAFFIC ) + { + if ( $Value == 0 ) { return("0B"); } + $Units = array("B","KB","MB","GB","TB","PB"); + $Sign = ""; if ( $Value < 0 ) { $Value = abs($Value); $Sign = "-"; } + + $Value = number_format($Value/pow(1024,($Scale=floor(log($Value,1024)))),2,",","."); + return($Sign.$Value." ".$Units[$Scale]); + } + + if ( $Mode == AXIS_FORMAT_CUSTOM ) + { if ( function_exists($Format) ) { return(call_user_func($Format,$Value)); } } + + if ( $Mode == AXIS_FORMAT_DATE ) + { if ( $Format == NULL ) { $Pattern = "d/m/Y"; } else { $Pattern = $Format; } return(gmdate($Pattern,$Value)); } + + if ( $Mode == AXIS_FORMAT_TIME ) + { if ( $Format == NULL ) { $Pattern = "H:i:s"; } else { $Pattern = $Format; } return(gmdate($Pattern,$Value)); } + + if ( $Mode == AXIS_FORMAT_CURRENCY ) + { return($Format.number_format($Value,2)); } + + if ( $Mode == AXIS_FORMAT_METRIC ) + { + if (abs($Value) > 1000000000) + return(round($Value/1000000000,$Format)."g".$Unit); + if (abs($Value) > 1000000) + return(round($Value/1000000,$Format)."m".$Unit); + elseif (abs($Value) >= 1000) + return(round($Value/1000,$Format)."k".$Unit); + + } + return($Value.$Unit); + } + + /* Write Max value on a chart */ + function writeBounds($Type=BOUND_BOTH,$Format=NULL) + { + $MaxLabelTxt = isset($Format["MaxLabelTxt"]) ? $Format["MaxLabelTxt"] : "max="; + $MinLabelTxt = isset($Format["MinLabelTxt"]) ? $Format["MinLabelTxt"] : "min="; + $Decimals = isset($Format["Decimals"]) ? $Format["Decimals"] : 1; + $ExcludedSeries = isset($Format["ExcludedSeries"]) ? $Format["ExcludedSeries"] : ""; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $MaxDisplayR = isset($Format["MaxDisplayR"]) ? $Format["MaxDisplayR"] : 0; + $MaxDisplayG = isset($Format["MaxDisplayG"]) ? $Format["MaxDisplayG"] : 0; + $MaxDisplayB = isset($Format["MaxDisplayB"]) ? $Format["MaxDisplayB"] : 0; + $MinDisplayR = isset($Format["MinDisplayR"]) ? $Format["MinDisplayR"] : 255; + $MinDisplayG = isset($Format["MinDisplayG"]) ? $Format["MinDisplayG"] : 255; + $MinDisplayB = isset($Format["MinDisplayB"]) ? $Format["MinDisplayB"] : 255; + $MinLabelPos = isset($Format["MinLabelPos"]) ? $Format["MinLabelPos"] : BOUND_LABEL_POS_AUTO; + $MaxLabelPos = isset($Format["MaxLabelPos"]) ? $Format["MaxLabelPos"] : BOUND_LABEL_POS_AUTO; + $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE; + $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE; + $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5; + $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE; + $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3; + $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0; + $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0; + $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0; + $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20; + $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : ""; + $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255; + $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255; + $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255; + $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100; + + $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius, + "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding, + "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha); + + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + $Data = $this->DataSet->getData(); + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && !isset($ExcludedSeries[$SerieName])) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $MinValue = $this->DataSet->getMin($SerieName); + $MaxValue = $this->DataSet->getMax($SerieName); + + $MinPos = VOID; $MaxPos = VOID; + foreach($Serie["Data"] as $Key => $Value) + { + if ( $Value == $MinValue && $MinPos == VOID ) { $MinPos = $Key; } + if ( $Value == $MaxValue ) { $MaxPos = $Key; } + } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; + $X = $this->GraphAreaX1 + $XMargin; + $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0; + + if ( $Type == BOUND_MAX || $Type == BOUND_BOTH ) + { + if ( $MaxLabelPos == BOUND_LABEL_POS_TOP || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; } + if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; } + + $XPos = $X + $MaxPos*$XStep + $SerieOffset; + $Label = $MaxLabelTxt.$this->scaleFormat(round($MaxValue,$Decimals),$Mode,$Format,$Unit); + + $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label); + $XOffset = 0; $YOffset = 0; + if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); } + if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); } + if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; } + if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); } + + $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG; + $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align; + + $this->drawText($XPos+$XOffset,$YPos+$YOffset,$Label,$CaptionSettings); + } + + if ( $Type == BOUND_MIN || $Type == BOUND_BOTH ) + { + if ( $MinLabelPos == BOUND_LABEL_POS_TOP || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; } + if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; } + + $XPos = $X + $MinPos*$XStep + $SerieOffset; + $Label = $MinLabelTxt.$this->scaleFormat(round($MinValue,$Decimals),$Mode,$Format,$Unit); + + $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label); + $XOffset = 0; $YOffset = 0; + if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); } + if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); } + if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; } + if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); } + + $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG; + $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align; + + $this->drawText($XPos+$XOffset,$YPos-$DisplayOffset+$YOffset,$Label,$CaptionSettings); + } + } + else + { + $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; + $X = $this->GraphAreaY1 + $XMargin; + $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0; + + if ( $Type == BOUND_MAX || $Type == BOUND_BOTH ) + { + if ( $MaxLabelPos == BOUND_LABEL_POS_TOP || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; } + if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; } + + $XPos = $X + $MaxPos*$XStep + $SerieOffset; + $Label = $MaxLabelTxt.$this->scaleFormat($MaxValue,$Mode,$Format,$Unit); + + $TxtPos = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label); + $XOffset = 0; $YOffset = 0; + if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; } + if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); } + if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; } + if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);} + + $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG; + $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align; + + $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings); + } + + if ( $Type == BOUND_MIN || $Type == BOUND_BOTH ) + { + if ( $MinLabelPos == BOUND_LABEL_POS_TOP || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; } + if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; } + + $XPos = $X + $MinPos*$XStep + $SerieOffset; + $Label = $MinLabelTxt.$this->scaleFormat($MinValue,$Mode,$Format,$Unit); + + $TxtPos = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label); + $XOffset = 0; $YOffset = 0; + if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; } + if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); } + if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; } + if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);} + + $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG; + $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align; + + $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings); + } + } + } + } + } + + /* Draw a plot chart */ + function drawPlotChart($Format=NULL) + { + $PlotSize = isset($Format["PlotSize"]) ? $Format["PlotSize"] : NULL; + $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 50; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 50; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 50; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30; + $BorderSize = isset($Format["BorderSize"]) ? $Format["BorderSize"] : 2; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + if ( isset($Serie["Weight"]) ) { $SerieWeight = $Serie["Weight"] + 2; } else { $SerieWeight = 2; } + if ( $PlotSize != NULL ) { $SerieWeight = $PlotSize; } + + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; + if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; } + if ( isset($Serie["Picture"]) ) + { $Picture = $Serie["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->getPicInfo($Picture); } + else { $Picture = NULL; $PicOffset = 0; } + + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $AxisID = $Serie["Axis"]; + $Shape = $Serie["Shape"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; } + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + if ( $Picture != NULL ) { $PicOffset = $PicHeight / 2; $SerieWeight = 0; } + $X = $this->GraphAreaX1 + $XMargin; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $Y) + { + if ( $DisplayValues ) + $this->drawText($X,$Y-$DisplayOffset-$SerieWeight-$BorderSize-$PicOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + + if ( $Y != VOID ) + { + if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Picture != NULL ) + { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); } + else + { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); } + } + $X = $X + $XStep; + } + } + else + { + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + if ( $Picture != NULL ) { $PicOffset = $PicWidth / 2; $SerieWeight = 0; } + $Y = $this->GraphAreaY1 + $XMargin; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $X) + { + if ( $DisplayValues ) + $this->drawText($X+$DisplayOffset+$SerieWeight+$BorderSize+$PicOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + + if ( $X != VOID ) + { + if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Picture != NULL ) + { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); } + else + { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); } + } + $Y = $Y + $YStep; + } + } + } + } + } + + /* Draw a spline chart */ + function drawSplineChart($Format=NULL) + { + $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE; + $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4; + $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL; // 234 + $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL; // 55 + $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL; // 26 + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"]; + + if ( $BreakR == NULL ) + $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks); + else + $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight); + + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; } + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; $WayPoints = ""; + $Force = $XStep / 5; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1; + foreach($PosArray as $Key => $Y) + { + if ( $DisplayValues ) + $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + + if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Y == VOID && $LastY != NULL ) + { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; } + + if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid ) + { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); } + + if ( $Y != VOID ) + $WayPoints[] = array($X,$Y); + + if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; } + if ( $Y == VOID ) { $Y = NULL; } + + $LastX = $X; $LastY = $Y; + $X = $X + $XStep; + } + $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + } + else + { + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; $WayPoints = ""; + $Force = $YStep / 5; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1; + foreach($PosArray as $Key => $X) + { + if ( $DisplayValues ) + $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + + if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $X == VOID && $LastX != NULL ) + { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; } + + if ( $X != VOID && $LastX == NULL && $LastGoodX != NULL && !$BreakVoid ) + { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); } + + if ( $X != VOID ) + $WayPoints[] = array($X,$Y); + + if ( $X != VOID ) { $LastGoodX = $X; $LastGoodY = $Y; } + if ( $X == VOID ) { $X = NULL; } + + $LastX = $X; $LastY = $Y; + $Y = $Y + $YStep; + } + $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + } + } + } + } + + /* Draw a filled spline chart */ + function drawFilledSplineChart($Format=NULL) + { + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE; + $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + if ( $AroundZero ) { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); } + + if ( $Threshold != NULL ) + { + foreach($Threshold as $Key => $Params) + { + $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"])); + $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"])); + } + } + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; $WayPoints = ""; + $Force = $XStep / 5; + + if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; } + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; } + + $LastX = ""; $LastY = ""; + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $Y) + { + if ( $DisplayValues ) + $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + + if ( $Y == VOID ) + { + $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE)); + + if ( $Area != "" ) + { + foreach ($Area as $key => $Points) + { + $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero; + foreach($Points as $subKey => $Point) + { + if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; } + $Corners[] = $Point["Y"]+1; + } + $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero; + + $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold)); + } + $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + } + + $WayPoints = ""; + } + else + $WayPoints[] = array($X,$Y-.5); /* -.5 for AA visual fix */ + + $X = $X + $XStep; + } + $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE)); + + if ( $Area != "" ) + { + foreach ($Area as $key => $Points) + { + $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero; + foreach($Points as $subKey => $Point) + { + if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; } + $Corners[] = $Point["Y"]+1; + } + $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero; + + $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold)); + } + $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + } + } + else + { + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; $WayPoints = ""; + $Force = $YStep / 5; + + if ( !$AroundZero ) { $YZero = $this->GraphAreaX1+1; } + if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; } + if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; } + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $X) + { + if ( $DisplayValues ) + $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + + if ( $X == VOID ) + { + $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE)); + + if ( $Area != "" ) + { + foreach ($Area as $key => $Points) + { + $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"]; + foreach($Points as $subKey => $Point) + { + if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; } + $Corners[] = $Point["Y"]; + } + $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1; + + $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold)); + } + $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + } + + $WayPoints = ""; + } + else + $WayPoints[] = array($X,$Y); + + $Y = $Y + $YStep; + } + $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE)); + + if ( $Area != "" ) + { + foreach ($Area as $key => $Points) + { + $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"]; + foreach($Points as $subKey => $Point) + { + if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; } + $Corners[] = $Point["Y"]; + } + $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1; + + $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold)); + } + $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks)); + } + + } + } + } + } + + /* Draw a line chart */ + function drawLineChart($Format=NULL) + { + $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE; + $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4; + $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL; + $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL; + $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL; + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5; + $ForceColor = isset($Format["ForceColor"]) ? $Format["ForceColor"] : FALSE; + $ForceR = isset($Format["ForceR"]) ? $Format["ForceR"] : 0; + $ForceG = isset($Format["ForceG"]) ? $Format["ForceG"] : 0; + $ForceB = isset($Format["ForceB"]) ? $Format["ForceB"] : 0; + $ForceAlpha = isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : 100; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"]; + + if ( $ForceColor ) + { $R = $ForceR; $G = $ForceG; $B = $ForceB; $Alpha = $ForceAlpha; } + + if ( $BreakR == NULL ) + $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight); + else + $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight); + + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; } + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; + foreach($PosArray as $Key => $Y) + { + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { + if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; } + $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align)); + } + + if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Y != VOID && $LastX != NULL && $LastY != NULL ) + $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid ) + { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; } + + if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; } + if ( $Y == VOID ) { $Y = NULL; } + + $LastX = $X; $LastY = $Y; + $X = $X + $XStep; + } + } + else + { + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; + foreach($PosArray as $Key => $X) + { + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { $this->drawText($X+$DisplayOffset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); } + + if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $X != VOID && $LastX != NULL && $LastY != NULL ) + $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid ) + { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; } + + if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; } + if ( $X == VOID ) { $X = NULL; } + + $LastX = $X; $LastY = $Y; + $Y = $Y + $YStep; + } + } + } + } + } + + /* Draw a line chart */ + function drawZoneChart($SerieA,$SerieB,$Format=NULL) + { + $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0; + $LineR = isset($Format["LineR"]) ? $Format["LineR"] : 150; + $LineG = isset($Format["LineG"]) ? $Format["LineG"] : 150; + $LineB = isset($Format["LineB"]) ? $Format["LineB"] : 150; + $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 50; + $LineTicks = isset($Format["LineTicks"]) ? $Format["LineTicks"] : 1; + $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 150; + $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 150; + $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 150; + $AreaAlpha = isset($Format["AreaAlpha"]) ? $Format["AreaAlpha"] : 5; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + if ( !isset($Data["Series"][$SerieA]["Data"]) || !isset($Data["Series"][$SerieB]["Data"]) ) { return(0); } + $SerieAData = $Data["Series"][$SerieA]["Data"]; + $SerieBData = $Data["Series"][$SerieB]["Data"]; + + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + $PosArrayA = $this->scaleComputeY($SerieAData,array("AxisID"=>$AxisID)); + $PosArrayB = $this->scaleComputeY($SerieBData,array("AxisID"=>$AxisID)); + if ( count($PosArrayA) != count($PosArrayB) ) { return(0); } + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL; + + $LastX = NULL; $LastY1 = NULL; $LastY2 = NULL; + $BoundsA = ""; $BoundsB = ""; + foreach($PosArrayA as $Key => $Y1) + { + $Y2 = $PosArrayB[$Key]; + + $BoundsA[] = $X; $BoundsA[] = $Y1; + $BoundsB[] = $X; $BoundsB[] = $Y2; + + $LastX = $X; + $LastY1 = $Y1; $LastY2 = $Y2; + + $X = $X + $XStep; + } + $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB)); + $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha)); + + for($i=0;$i<=count($BoundsA)-4;$i=$i+2) + { + $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks)); + $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks)); + } + } + else + { + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL; + + $LastY = NULL; $LastX1 = NULL; $LastX2 = NULL; + $BoundsA = ""; $BoundsB = ""; + foreach($PosArrayA as $Key => $X1) + { + $X2 = $PosArrayB[$Key]; + + $BoundsA[] = $X1; $BoundsA[] = $Y; + $BoundsB[] = $X2; $BoundsB[] = $Y; + + $LastY = $Y; + $LastX1 = $X1; $LastX2 = $X2; + + $Y = $Y + $YStep; + } + $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB)); + $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha)); + + for($i=0;$i<=count($BoundsA)-4;$i=$i+2) + { + $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks)); + $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks)); + } + } + } + + /* Draw a step chart */ + function drawStepChart($Format=NULL) + { + $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : FALSE; + $ReCenter = isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE; + $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4; + $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL; + $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL; + $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL; + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"]; + + if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; } + + if ( $BreakR == NULL ) + $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight); + else + $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight); + + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight); + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE; + foreach($PosArray as $Key => $Y) + { + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { + if ( $Y <= $LastY ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; } + $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align)); + } + + if ( $Y != VOID && $LastX != NULL && $LastY != NULL ) + { + $this->drawLine($LastX,$LastY,$X,$LastY,$Color); + $this->drawLine($X,$LastY,$X,$Y,$Color); + if ( $ReCenter && $X+$XStep < $this->GraphAreaX2 - $XMargin ) + { + $this->drawLine($X,$Y,$X+$XStep,$Y,$Color); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + else + { if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } } + } + + if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid ) + { + if ( $ReCenter ) + { + $this->drawLine($LastGoodX+$XStep,$LastGoodY,$X,$LastGoodY,$BreakSettings); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX+$XStep-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + else + { + $this->drawLine($LastGoodX,$LastGoodY,$X,$LastGoodY,$BreakSettings); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + + $this->drawLine($X,$LastGoodY,$X,$Y,$BreakSettings); + $LastGoodY = NULL; + } + elseif( !$BreakVoid && $LastGoodY == NULL && $Y != VOID ) + { + $this->drawLine($this->GraphAreaX1 + $XMargin,$Y,$X,$Y,$BreakSettings); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($this->GraphAreaX1+$XMargin-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + + if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; } + if ( $Y == VOID ) { $Y = NULL; } + + if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; } + $LastX = $X; $LastY = $Y; + if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; } + $X = $X + $XStep; + } + if ( $ReCenter ) + { + $this->drawLine($LastX,$LastY,$this->GraphAreaX2 - $XMargin,$LastY,$Color); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($this->GraphAreaX2-$XMargin+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + } + else + { + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE; + foreach($PosArray as $Key => $X) + { + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { + if ( $X >= $LastX ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; } + $this->drawText($X+$Offset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align)); + } + + if ( $X != VOID && $LastX != NULL && $LastY != NULL ) + { + $this->drawLine($LastX,$LastY,$LastX,$Y,$Color); + $this->drawLine($LastX,$Y,$X,$Y,$Color); + + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + + if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid ) + { + $this->drawLine($LastGoodX,$LastGoodY,$LastGoodX,$LastGoodY+$YStep,$Color); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($LastGoodY+$YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + $this->drawLine($LastGoodX,$LastGoodY+$YStep,$LastGoodX,$Y,$BreakSettings); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY+$YStep-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + $this->drawLine($LastGoodX,$Y,$X,$Y,$BreakSettings); + $LastGoodY = NULL; + } + elseif ( $X != VOID && $LastGoodY == NULL && !$BreakVoid ) + { + $this->drawLine($X,$this->GraphAreaY1 + $XMargin,$X,$Y,$BreakSettings); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($this->GraphAreaY1+$XMargin-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + + if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; } + if ( $X == VOID ) { $X = NULL; } + + if ( !$Init && $ReCenter ) { $Y = $Y - $YStep/2; $Init = TRUE; } + $LastX = $X; $LastY = $Y; + if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; } + $Y = $Y + $YStep; + } + if ( $ReCenter ) + { + $this->drawLine($LastX,$LastY,$LastX,$this->GraphAreaY2 - $XMargin,$Color); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$ImageMapPlotSize).",".floor($this->GraphAreaY2-$XMargin+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + } + } + } + } + + /* Draw a step chart */ + function drawFilledStepChart($Format=NULL) + { + $ReCenter = isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE; + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"]; + + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B); + if ( $ForceTransparency != NULL ) { $Color["Alpha"] = $ForceTransparency; } else { $Color["Alpha"] = $Alpha; } + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; } + + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; } + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; $Points = ""; $Init = FALSE; + foreach($PosArray as $Key => $Y) + { + if ( $Y == VOID && $LastX != NULL && $LastY != NULL && $Points !="" ) + { + $Points[] = $LastX; $Points[] = $LastY; + $Points[] = $X; $Points[] = $LastY; + $Points[] = $X; $Points[] = $YZero; + $this->drawPolygon($Points,$Color); + $Points = ""; + } + + if ( $Y != VOID && $LastX != NULL && $LastY != NULL ) + { + if ( $Points == "") { $Points[] = $LastX; $Points[] = $YZero; } + $Points[] = $LastX; $Points[] = $LastY; + $Points[] = $X; $Points[] = $LastY; + $Points[] = $X; $Points[] = $Y; + } + + if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; } + if ( $Y == VOID ) { $Y = NULL; } + + if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; } + $LastX = $X; $LastY = $Y; + if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; } + $X = $X + $XStep; + } + + if ( $ReCenter ) + { + $Points[] = $LastX+$XStep/2; $Points[] = $LastY; + $Points[] = $LastX+$XStep/2; $Points[] = $YZero; + } + else + { $Points[] = $LastX; $Points[] = $YZero; } + + $this->drawPolygon($Points,$Color); + } + else + { + if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; } + if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; } + + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $LastGoodY = NULL; $LastGoodX = NULL; $Points = ""; + foreach($PosArray as $Key => $X) + { + if ( $X == VOID && $LastX != NULL && $LastY != NULL && $Points !="" ) + { + $Points[] = $LastX; $Points[] = $LastY; + $Points[] = $LastX; $Points[] = $Y; + $Points[] = $YZero; $Points[] = $Y; + $this->drawPolygon($Points,$Color); + $Points = ""; + } + + if ( $X != VOID && $LastX != NULL && $LastY != NULL ) + { + if ( $Points == "") { $Points[] = $YZero; $Points[] = $LastY; } + $Points[] = $LastX; $Points[] = $LastY; + $Points[] = $LastX; $Points[] = $Y; + $Points[] = $X; $Points[] = $Y; + } + + if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; } + if ( $X == VOID ) { $X = NULL; } + + if ( $LastX == NULL && $ReCenter ) { $Y = $Y - $YStep/2; } + $LastX = $X; $LastY = $Y; + if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; } + $Y = $Y + $YStep; + } + + if ( $ReCenter ) + { + $Points[] = $LastX; $Points[] = $LastY+$YStep/2; + $Points[] = $YZero; $Points[] = $LastY+$YStep/2; + } + else + { $Points[] = $YZero; $Points[] = $LastY; } + + $this->drawPolygon($Points,$Color); + } + } + } + } + + /* Draw an area chart */ + function drawAreaChart($Format=NULL) + { + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : 25; + $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE; + $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); + + if ( $Threshold != NULL ) + { + foreach($Threshold as $Key => $Params) + { + $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"])); + $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"])); + } + } + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + + $Areas = ""; $AreaID = 0; + $Areas[$AreaID][] = $this->GraphAreaX1 + $XMargin; + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; } + + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $Y) + { + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { + if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; } + $this->drawText($X,$Y-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align)); + } + + if ( $Y == VOID && isset($Areas[$AreaID]) ) + { + if($LastX == NULL) + { $Areas[$AreaID][] = $X; } + else + { $Areas[$AreaID][] = $LastX; } + + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; } + $AreaID++; + } + elseif ($Y != VOID) + { + if ( !isset($Areas[$AreaID]) ) + { + $Areas[$AreaID][] = $X; + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; } + } + + $Areas[$AreaID][] = $X; + $Areas[$AreaID][] = $Y; + } + + $LastX = $X; + $X = $X + $XStep; + } + $Areas[$AreaID][] = $LastX; + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; } + + /* Handle shadows in the areas */ + if ( $this->Shadow ) + { + $ShadowArea = ""; + foreach($Areas as $Key => $Points) + { + $ShadowArea[$Key] = ""; + foreach($Points as $Key2 => $Value) + { + if ( $Key2 % 2 == 0 ) + { $ShadowArea[$Key][] = $Value + $this->ShadowX; } + else + { $ShadowArea[$Key][] = $Value + $this->ShadowY; } + } + } + + foreach($ShadowArea as $Key => $Points) + $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa)); + } + + $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha; + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold); + + foreach($Areas as $Key => $Points) + $this->drawPolygonChart($Points,$Color); + } + else + { + if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; } + if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; } + + $Areas = ""; $AreaID = 0; + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; } + $Areas[$AreaID][] = $this->GraphAreaY1 + $XMargin; + + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $X) + { + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { + if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; } + $this->drawText($X+$Offset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align)); + } + + if ( $X == VOID && isset($Areas[$AreaID]) ) + { + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; } + + if($LastY == NULL) + { $Areas[$AreaID][] = $Y; } + else + { $Areas[$AreaID][] = $LastY; } + + $AreaID++; + } + elseif ($X != VOID) + { + if ( !isset($Areas[$AreaID]) ) + { + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; } + $Areas[$AreaID][] = $Y; + } + + $Areas[$AreaID][] = $X; + $Areas[$AreaID][] = $Y; + } + + $LastX = $X; $LastY = $Y; + $Y = $Y + $YStep; + } + if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; } + $Areas[$AreaID][] = $LastY; + + /* Handle shadows in the areas */ + if ( $this->Shadow ) + { + $ShadowArea = ""; + foreach($Areas as $Key => $Points) + { + $ShadowArea[$Key] = ""; + foreach($Points as $Key2 => $Value) + { + if ( $Key2 % 2 == 0 ) + { $ShadowArea[$Key][] = $Value + $this->ShadowX; } + else + { $ShadowArea[$Key][] = $Value + $this->ShadowY; } + } + } + + foreach($ShadowArea as $Key => $Points) + $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa)); + } + + $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha; + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold); + + foreach($Areas as $Key => $Points) + $this->drawPolygonChart($Points,$Color); + } + } + } + } + + + /* Draw a bar chart */ + function drawBarChart($Format=NULL) + { + $Floating0Serie = isset($Format["Floating0Serie"]) ? $Format["Floating0Serie"] : NULL; + $Floating0Value = isset($Format["Floating0Value"]) ? $Format["Floating0Value"] : NULL; + $Draw0Line = isset($Format["Draw0Line"]) ? $Format["Draw0Line"] : FALSE; + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE; + $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_HORIZONTAL; + $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayFont = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontName; + $DisplaySize = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize; + $DisplayPos = isset($Format["DisplayPos"]) ? $Format["DisplayPos"] : LABEL_POS_OUTSIDE; + $DisplayShadow = isset($Format["DisplayShadow"]) ? $Format["DisplayShadow"] : TRUE; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE; + $Interleave = isset($Format["Interleave"]) ? $Format["Interleave"] : .5; + $Rounded = isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE; + $RoundRadius = isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1; + $Gradient = isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE; + $GradientMode = isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE; + $GradientAlpha = isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20; + $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255; + $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255; + $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255; + $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0; + $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0; + $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0; + $TxtMargin = isset($Format["TxtMargin"]) ? $Format["TxtMargin"] : 6; + $OverrideColors = isset($Format["OverrideColors"]) ? $Format["OverrideColors"] : NULL; + $OverrideSurrounding = isset($Format["OverrideSurrounding"]) ? $Format["OverrideSurrounding"] : 30; + $InnerSurrounding = isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL; + $InnerBorderR = isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1; + $InnerBorderG = isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1; + $InnerBorderB = isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + if ( $OverrideColors != NULL ) + { + $OverrideColors = $this->validatePalette($OverrideColors,$OverrideSurrounding); + $this->DataSet->saveExtendedData("Palette",$OverrideColors); + } + + $RestoreShadow = $this->Shadow; + + $SeriesCount = $this->countDrawableSeries(); + $CurrentSerie = 0; + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; } + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; } + if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); } + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB); + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; } + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + if ( $Floating0Value != NULL ) + { $YZero = $this->scaleComputeY($Floating0Value,array("AxisID"=>$Serie["Axis"])); } + else + { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); } + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; } + + if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; + + if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; } + if ( $XDivs == 0 ) { $XSize = ($this->GraphAreaX2-$this->GraphAreaX1)/($SeriesCount+$Interleave); } else { $XSize = ($XStep / ($SeriesCount+$Interleave) ); } + + $XOffset = -($XSize*$SeriesCount)/2 + $CurrentSerie * $XSize; + if ( $X + $XOffset <= $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $X + 1 ; } + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $XOffset + $XSize / 2; + + if ( $Rounded || $BorderR != -1) { $XSpace = 1; } else { $XSpace = 0; } + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + + $ID = 0; + foreach($PosArray as $Key => $Y2) + { + if ( $Floating0Serie != NULL ) + { + if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) ) + { $Value = $Data["Series"][$Floating0Serie]["Data"][$Key]; } + else + { $Value = 0; } + + $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"])); + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; } + + if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; } + } + + if ( $OverrideColors != NULL ) + { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } } + + if ( $Y2 != VOID ) + { + $BarHeight = $Y1 - $Y2; + + if ( $Serie["Data"][$Key] == 0 ) + { + $this->drawLine($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y1,$Color); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1-1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y1+1),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + else + { + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Rounded ) + $this->drawRoundedFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$RoundRadius,$Color); + else + { + $this->drawFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$Color); + + if ( $InnerColor != NULL ) { $this->drawRectangle($X+$XOffset+$XSpace+1,min($Y1,$Y2)+1,$X+$XOffset+$XSize-$XSpace-1,max($Y1,$Y2)-1,$InnerColor); } + + if ( $Gradient ) + { + $this->Shadow = FALSE; + + if ( $GradientMode == GRADIENT_SIMPLE ) + { + if ( $Serie["Data"][$Key] >= 0 ) + $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + else + $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha); + + $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_VERTICAL,$GradienColor); + } + elseif ( $GradientMode == GRADIENT_EFFECT_CAN ) + { + $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha); + $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + $XSpan = floor($XSize / 3); + + $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSpan-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor1); + $this->drawGradientArea($X+$XOffset+$XSpan+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor2); + } + $this->Shadow = $RestoreShadow; + } + } + + if ( $Draw0Line ) + { + $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20); + + if ( abs($Y1 - $Y2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; } + if ( $Y1 - $Y2 < 0 ) { $Line0Width = -$Line0Width; } + + $this->drawFilledRectangle($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1)-$Line0Width,$Line0Color); + $this->drawLine($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1),$Line0Color); + } + } + + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { + if ( $DisplayShadow ) { $this->Shadow = TRUE; } + + $Caption = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit); + $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,90,$Caption); + $TxtHeight = $TxtPos[0]["Y"] - $TxtPos[1]["Y"] + $TxtMargin; + + if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtHeight) < abs($BarHeight) ) + { + $CenterX = (($X+$XOffset+$XSize-$XSpace)-($X+$XOffset+$XSpace))/2 + $X+$XOffset+$XSpace; + $CenterY = ($Y2-$Y1)/2 + $Y1; + + $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"Angle"=>90)); + } + else + { + if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; } + $this->drawText($X+$XOffset+$XSize/2,$Y2-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize)); + } + + $this->Shadow = $RestoreShadow; + } + } + + $X = $X + $XStep; + $ID++; + } + } + else + { + if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; } + if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; } + + if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + + $Y = $this->GraphAreaY1 + $XMargin; + + if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; } + if ( $XDivs == 0 ) { $YSize = ($this->GraphAreaY2-$this->GraphAreaY1)/($SeriesCount+$Interleave); } else { $YSize = ($YStep / ($SeriesCount+$Interleave) ); } + + $YOffset = -($YSize*$SeriesCount)/2 + $CurrentSerie * $YSize; + if ( $Y + $YOffset <= $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $Y + 1 ; } + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $YOffset + $YSize / 2; + + if ( $Rounded || $BorderR != -1 ) { $YSpace = 1; } else { $YSpace = 0; } + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + + $ID = 0 ; + foreach($PosArray as $Key => $X2) + { + if ( $Floating0Serie != NULL ) + { + if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) ) + $Value = $Data["Series"][$Floating0Serie]["Data"][$Key]; + else { $Value = 0; } + + $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"])); + if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; } + if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; } + if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; } + } + + if ( $OverrideColors != NULL ) + { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } } + + if ( $X2 != VOID ) + { + $BarWidth = $X2 - $X1; + + if ( $Serie["Data"][$Key] == 0 ) + { + $this->drawLine($X1,$Y+$YOffset+$YSpace,$X1,$Y+$YOffset+$YSize-$YSpace,$Color); + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1-1).",".floor($Y+$YOffset+$YSpace).",".floor($X1+1).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + } + else + { + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1).",".floor($Y+$YOffset+$YSpace).",".floor($X2).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Rounded ) + $this->drawRoundedFilledRectangle($X1+1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$RoundRadius,$Color); + else + { + $this->drawFilledRectangle($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$Color); + + if ( $InnerColor != NULL ) { $this->drawRectangle(min($X1,$X2)+1,$Y+$YOffset+$YSpace+1,max($X1,$X2)-1,$Y+$YOffset+$YSize-$YSpace-1,$InnerColor); } + + if ( $Gradient ) + { + $this->Shadow = FALSE; + + if ( $GradientMode == GRADIENT_SIMPLE ) + { + if ( $Serie["Data"][$Key] >= 0 ) + $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + else + $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha); + + $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_HORIZONTAL,$GradienColor); + } + elseif ( $GradientMode == GRADIENT_EFFECT_CAN ) + { + $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha); + $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + $YSpan = floor($YSize / 3); + + $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSpan-$YSpace,DIRECTION_VERTICAL,$GradienColor1); + $this->drawGradientArea($X1,$Y+$YOffset+$YSpan,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_VERTICAL,$GradienColor2); + } + $this->Shadow = $RestoreShadow; + } + } + + if ( $Draw0Line ) + { + $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20); + + if ( abs($X1 - $X2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; } + if ( $X2 - $X1 < 0 ) { $Line0Width = -$Line0Width; } + + $this->drawFilledRectangle(floor($X1),$Y+$YOffset+$YSpace,floor($X1)+$Line0Width,$Y+$YOffset+$YSize-$YSpace,$Line0Color); + $this->drawLine(floor($X1),$Y+$YOffset+$YSpace,floor($X1),$Y+$YOffset+$YSize-$YSpace,$Line0Color); + } + } + + if ( $DisplayValues && $Serie["Data"][$Key] != VOID ) + { + if ( $DisplayShadow ) { $this->Shadow = TRUE; } + + $Caption = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit); + $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption); + $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"] + $TxtMargin; + + if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtWidth) < abs($BarWidth) ) + { + $CenterX = ($X2-$X1)/2 + $X1; + $CenterY = (($Y+$YOffset+$YSize-$YSpace)-($Y+$YOffset+$YSpace))/2 + ($Y+$YOffset+$YSpace); + + $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize)); + } + else + { + if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; } + $this->drawText($X2+$Offset,$Y+$YOffset+$YSize/2,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize)); + } + + $this->Shadow = $RestoreShadow; + } + } + $Y = $Y + $YStep; + $ID++; + } + } + $CurrentSerie++; + } + } + } + + /* Draw a bar chart */ + function drawStackedBarChart($Format=NULL) + { + $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE; + $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_AUTO; + $DisplayRound = isset($Format["DisplayRound"]) ? $Format["DisplayRound"] : 0; + $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL; + $DisplayFont = isset($Format["DisplayFont"]) ? $Format["DisplayFont"] : $this->FontName; + $DisplaySize = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize; + $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0; + $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0; + $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0; + $Interleave = isset($Format["Interleave"]) ? $Format["Interleave"] : .5; + $Rounded = isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE; + $RoundRadius = isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1; + $Gradient = isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE; + $GradientMode = isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE; + $GradientAlpha = isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20; + $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255; + $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255; + $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255; + $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0; + $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0; + $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0; + $InnerSurrounding = isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL; + $InnerBorderR = isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1; + $InnerBorderG = isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1; + $InnerBorderB = isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $FontFactor = isset($Format["FontFactor"]) ? $Format["FontFactor"] : 8; + + $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + $RestoreShadow = $this->Shadow; + + $LastX = ""; $LastY = ""; + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; + if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = 255; $DisplayG = 255; $DisplayB = 255; } + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; } + if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); } + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; } + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE); + $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + $Color = array("TransCorner"=>TRUE,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; + + $XSize = ($XStep / (1+$Interleave) ); + $XOffset = -($XSize/2); + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $Height) + { + if ( $Height != VOID && $Serie["Data"][$Key] != 0 ) + { + if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; } + + if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; } + if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; } + + $Y1 = $LastY[$Key][$Pos]; + $Y2 = $Y1 - $Height; + + if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $Y1 != $YZero) ) { $YSpaceUp = 1; } else { $YSpaceUp = 0; } + if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $Y1 != $YZero) ) { $YSpaceDown = 1; } else { $YSpaceDown = 0; } + + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset).",".floor($Y1-$YSpaceUp+$YSpaceDown).",".floor($X+$XOffset+$XSize).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Rounded ) + $this->drawRoundedFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$RoundRadius,$Color); + else + { + $this->drawFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$Color); + + if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X+$XOffset+1,$X+$XOffset+$XSize),min($Y1-$YSpaceUp+$YSpaceDown,$Y2)+1,max($X+$XOffset+1,$X+$XOffset+$XSize)-1,max($Y1-$YSpaceUp+$YSpaceDown,$Y2)-1,$InnerColor); $this->Shadow = $RestoreShadow;} + + if ( $Gradient ) + { + $this->Shadow = FALSE; + + if ( $GradientMode == GRADIENT_SIMPLE ) + { + $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + $this->drawGradientArea($X+$XOffset,$Y1-1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+1,DIRECTION_VERTICAL,$GradientColor); + } + elseif ( $GradientMode == GRADIENT_EFFECT_CAN ) + { + $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha); + $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + $XSpan = floor($XSize / 3); + + $this->drawGradientArea($X+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSpan,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor1); + $this->drawGradientArea($X+$XSpan+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor2); + } + $this->Shadow = $RestoreShadow; + } + } + + if ( $DisplayValues ) + { + $BarHeight = abs($Y2-$Y1)-2; + $BarWidth = $XSize+($XOffset/2)-$FontFactor; + + $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit); + $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption); + $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]); + $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]); + + $XCenter = ( ($X+$XOffset+$XSize) - ($X+$XOffset) ) / 2 + $X+$XOffset; + $YCenter = ( ($Y2) - ($Y1-$YSpaceUp+$YSpaceDown) ) / 2 + $Y1-$YSpaceUp+$YSpaceDown; + + $Done = FALSE; + if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO ) + { + if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth ) + { + $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont)); + $Done = TRUE; + } + } + + if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) ) + { + if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight ) + $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Angle"=>90,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont)); + } + } + + $LastY[$Key][$Pos] = $Y2; + } + + $X = $X + $XStep; + } + } + else + { + if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; } + if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; } + + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; + + $YSize = $YStep / (1+$Interleave); + $YOffset = -($YSize/2); + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + foreach($PosArray as $Key => $Width) + { + if ( $Width != VOID && $Serie["Data"][$Key] != 0 ) + { + if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; } + + if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; } + if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; } + + $X1 = $LastX[$Key][$Pos]; + $X2 = $X1 + $Width; + + if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $X1 != $YZero) ) { $XSpaceLeft = 2; } else { $XSpaceLeft = 0; } + if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $X1 != $YZero) ) { $XSpaceRight = 2; } else { $XSpaceRight = 0; } + + if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1+$XSpaceLeft).",".floor($Y+$YOffset).",".floor($X2-$XSpaceRight).",".floor($Y+$YOffset+$YSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } + + if ( $Rounded ) + $this->drawRoundedFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$RoundRadius,$Color); + else + { + $this->drawFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$Color); + + if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X1+$XSpaceLeft,$X2-$XSpaceRight)+1,min($Y+$YOffset,$Y+$YOffset+$YSize)+1,max($X1+$XSpaceLeft,$X2-$XSpaceRight)-1,max($Y+$YOffset,$Y+$YOffset+$YSize)-1,$InnerColor); $this->Shadow = $RestoreShadow;} + + if ( $Gradient ) + { + $this->Shadow = FALSE; + + if ( $GradientMode == GRADIENT_SIMPLE ) + { + $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_HORIZONTAL,$GradientColor); + } + elseif ( $GradientMode == GRADIENT_EFFECT_CAN ) + { + $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha); + $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha); + $YSpan = floor($YSize / 3); + + $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSpan,DIRECTION_VERTICAL,$GradientColor1); + $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset+$YSpan,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_VERTICAL,$GradientColor2); + } + $this->Shadow = $RestoreShadow; + } + } + + if ( $DisplayValues ) + { + $BarWidth = abs($X2-$X1)-$FontFactor; + $BarHeight = $YSize+($YOffset/2)-$FontFactor/2; + $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit); + $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption); + $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]); + $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]); + + $XCenter = ( $X2 - $X1 ) / 2 + $X1; + $YCenter = ( ($Y+$YOffset+$YSize) - ($Y+$YOffset) ) / 2 + $Y+$YOffset; + + $Done = FALSE; + if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO ) + { + if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth ) + { + $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont)); + $Done = TRUE; + } + } + + if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) ) + { + if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight ) + $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Angle"=>90,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont)); + } + } + + $LastX[$Key][$Pos] = $X2; + } + + $Y = $Y + $YStep; + } + } + } + } + } + + /* Draw a stacked area chart */ + function drawStackedAreaChart($Format=NULL) + { + $DrawLine = isset($Format["DrawLine"]) ? $Format["DrawLine"] : FALSE; + $LineSurrounding = isset($Format["LineSurrounding"]) ? $Format["LineSurrounding"] : NULL; + $LineR = isset($Format["LineR"]) ? $Format["LineR"] : VOID; + $LineG = isset($Format["LineG"]) ? $Format["LineG"] : VOID; + $LineB = isset($Format["LineB"]) ? $Format["LineB"] : VOID; + $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100; + $DrawPlot = isset($Format["DrawPlot"]) ? $Format["DrawPlot"] : FALSE; + $PlotRadius = isset($Format["PlotRadius"]) ? $Format["PlotRadius"] : 2; + $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : 1; + $PlotBorderSurrounding = isset($Format["PlotBorderSurrounding"]) ? $Format["PlotBorderSurrounding"] : NULL; + $PlotBorderR = isset($Format["PlotBorderR"]) ? $Format["PlotBorderR"] : 0; + $PlotBorderG = isset($Format["PlotBorderG"]) ? $Format["PlotBorderG"] : 0; + $PlotBorderB = isset($Format["PlotBorderB"]) ? $Format["PlotBorderB"] : 0; + $PlotBorderAlpha = isset($Format["PlotBorderAlpha"]) ? $Format["PlotBorderAlpha"] : 50; + $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL; + + $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + $RestoreShadow = $this->Shadow; + $this->Shadow = FALSE; + + /* Build the offset data series */ + $OffsetData = ""; + $OverallOffset = ""; + $SerieOrder = ""; + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $SerieOrder[] = $SerieName; + + foreach($Serie["Data"] as $Key => $Value) + { + if ( $Value == VOID ) { $Value = 0; } + if ($Value >= 0) { $Sign = "+"; } else { $Sign = "-"; } + if ( !isset($OverallOffset[$Key]) || !isset($OverallOffset[$Key][$Sign]) ) { $OverallOffset[$Key][$Sign] = 0; } + + if ( $Sign == "+" ) + { $Data["Series"][$SerieName]["Data"][$Key] = $Value + $OverallOffset[$Key][$Sign]; } + else + { $Data["Series"][$SerieName]["Data"][$Key] = $Value - $OverallOffset[$Key][$Sign]; } + + $OverallOffset[$Key][$Sign] = $OverallOffset[$Key][$Sign] + abs($Value); + } + } + } + $SerieOrder = array_reverse($SerieOrder); + + $LastX = ""; $LastY = ""; + foreach($SerieOrder as $Key => $SerieName) + { + $Serie = $Data["Series"][$SerieName]; + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; + if ( $ForceTransparency != NULL ) { $Alpha = $ForceTransparency; } + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + + if ( $LineSurrounding != NULL ) + $LineColor = array("R"=>$R+$LineSurrounding,"G"=>$G+$LineSurrounding,"B"=>$B+$LineSurrounding,"Alpha"=>$Alpha); + elseif ( $LineR != VOID ) + $LineColor = array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha); + else + $LineColor = $Color; + + if ( $PlotBorderSurrounding != NULL ) + $PlotBorderColor = array("R"=>$R+$PlotBorderSurrounding,"G"=>$G+$PlotBorderSurrounding,"B"=>$B+$PlotBorderSurrounding,"Alpha"=>$PlotBorderAlpha); + else + $PlotBorderColor = array("R"=>$PlotBorderR,"G"=>$PlotBorderG,"B"=>$PlotBorderB,"Alpha"=>$PlotBorderAlpha); + + $AxisID = $Serie["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE); + $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); + + $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; } + if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; } + + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + + $Plots = ""; $Plots[] = $X; $Plots[] = $YZero; + foreach($PosArray as $Key => $Height) + { + if ( $Height != VOID ) { $Plots[] = $X; $Plots[] = $YZero-$Height; } + $X = $X + $XStep; + } + $Plots[] = $X-$XStep; $Plots[] = $YZero; + + $this->drawPolygon($Plots,$Color); + + $this->Shadow = $RestoreShadow; + if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } } + if ( $DrawPlot ) + { + for($i=2; $i<=count($Plots)-4; $i=$i+2) + { + if ( $PlotBorder != 0 ) + { $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius+$PlotBorder,$PlotBorderColor); } + + $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color); + } + } + $this->Shadow = FALSE; + } + elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM ) + { + if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; } + if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; } + + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + + $Plots = ""; $Plots[] = $YZero; $Plots[] = $Y; + foreach($PosArray as $Key => $Height) + { + if ( $Height != VOID ) { $Plots[] = $YZero+$Height; $Plots[] = $Y; } + $Y = $Y + $YStep; + } + $Plots[] = $YZero; $Plots[] = $Y-$YStep; + + $this->drawPolygon($Plots,$Color); + + $this->Shadow = $RestoreShadow; + if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } } + if ( $DrawPlot ) + { + for($i=2; $i<=count($Plots)-4; $i=$i+2) + { + if ( $PlotBorder != 0 ) + { $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius+$PlotBorder,$PlotBorderColor); } + + $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color); + } + } + $this->Shadow = FALSE; + } + } + } + $this->Shadow = $RestoreShadow; + } + + /* Returns a random color */ + function getRandomColor($Alpha=100) + { return(array("R"=>rand(0,255),"G"=>rand(0,255),"B"=>rand(0,255),"Alpha"=>$Alpha)); } + + /* Validate a palette */ + function validatePalette($Colors,$Surrounding=NULL) + { + $Result = ""; + + if ( !is_array($Colors) ) { return($this->getRandomColor()); } + + foreach($Colors as $Key => $Values) + { + if ( isset($Values["R"]) ) { $Result[$Key]["R"] = $Values["R"]; } else { $Result[$Key]["R"] = rand(0,255); } + if ( isset($Values["G"]) ) { $Result[$Key]["G"] = $Values["G"]; } else { $Result[$Key]["G"] = rand(0,255); } + if ( isset($Values["B"]) ) { $Result[$Key]["B"] = $Values["B"]; } else { $Result[$Key]["B"] = rand(0,255); } + if ( isset($Values["Alpha"]) ) { $Result[$Key]["Alpha"] = $Values["Alpha"]; } else { $Result[$Key]["Alpha"] = 100; } + + if ( $Surrounding != NULL ) + { + $Result[$Key]["BorderR"] = $Result[$Key]["R"] + $Surrounding; + $Result[$Key]["BorderG"] = $Result[$Key]["G"] + $Surrounding; + $Result[$Key]["BorderB"] = $Result[$Key]["B"] + $Surrounding; + } + else + { + if ( isset($Values["BorderR"]) ) { $Result[$Key]["BorderR"] = $Values["BorderR"]; } else { $Result[$Key]["BorderR"] = $Result[$Key]["R"]; } + if ( isset($Values["BorderG"]) ) { $Result[$Key]["BorderG"] = $Values["BorderG"]; } else { $Result[$Key]["BorderG"] = $Result[$Key]["G"]; } + if ( isset($Values["BorderB"]) ) { $Result[$Key]["BorderB"] = $Values["BorderB"]; } else { $Result[$Key]["BorderB"] = $Result[$Key]["B"]; } + if ( isset($Values["BorderAlpha"]) ) { $Result[$Key]["BorderAlpha"] = $Values["BorderAlpha"]; } else { $Result[$Key]["BorderAlpha"] = $Result[$Key]["Alpha"]; } + } + } + + return($Result); + } + + /* Draw the derivative chart associated to the data series */ + function drawDerivative($Format=NULL) + { + $Offset = isset($Format["Offset"]) ? $Format["Offset"] : 10; + $SerieSpacing = isset($Format["SerieSpacing"]) ? $Format["SerieSpacing"] : 3; + $DerivativeHeight = isset($Format["DerivativeHeight"]) ? $Format["DerivativeHeight"] : 4; + $ShadedSlopeBox = isset($Format["ShadedSlopeBox"]) ? $Format["ShadedSlopeBox"] : FALSE; + $DrawBackground = isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE; + $BackgroundR = isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255; + $BackgroundG = isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255; + $BackgroundB = isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255; + $BackgroundAlpha = isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 20; + $DrawBorder = isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100; + $Caption = isset($Format["Caption"]) ? $Format["Caption"] : TRUE; + $CaptionHeight = isset($Format["CaptionHeight"]) ? $Format["CaptionHeight"] : 10; + $CaptionWidth = isset($Format["CaptionWidth"]) ? $Format["CaptionWidth"] : 20; + $CaptionMargin = isset($Format["CaptionMargin"]) ? $Format["CaptionMargin"] : 4; + $CaptionLine = isset($Format["CaptionLine"]) ? $Format["CaptionLine"] : FALSE; + $CaptionBox = isset($Format["CaptionBox"]) ? $Format["CaptionBox"] : FALSE; + $CaptionBorderR = isset($Format["CaptionBorderR"]) ? $Format["CaptionBorderR"] : 0; + $CaptionBorderG = isset($Format["CaptionBorderG"]) ? $Format["CaptionBorderG"] : 0; + $CaptionBorderB = isset($Format["CaptionBorderB"]) ? $Format["CaptionBorderB"] : 0; + $CaptionFillR = isset($Format["CaptionFillR"]) ? $Format["CaptionFillR"] : 255; + $CaptionFillG = isset($Format["CaptionFillG"]) ? $Format["CaptionFillG"] : 255; + $CaptionFillB = isset($Format["CaptionFillB"]) ? $Format["CaptionFillB"] : 255; + $CaptionFillAlpha = isset($Format["CaptionFillAlpha"]) ? $Format["CaptionFillAlpha"] : 80; + $PositiveSlopeStartR = isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 184; + $PositiveSlopeStartG = isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 234; + $PositiveSlopeStartB = isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 88; + $PositiveSlopeEndR = isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 239; + $PositiveSlopeEndG = isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 31; + $PositiveSlopeEndB = isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 36; + $NegativeSlopeStartR = isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 184; + $NegativeSlopeStartG = isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 234; + $NegativeSlopeStartB = isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 88; + $NegativeSlopeEndR = isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 67; + $NegativeSlopeEndG = isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 124; + $NegativeSlopeEndB = isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 227; + + $Data = $this->DataSet->getData(); + + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + $YPos = $this->DataSet->Data["GraphArea"]["Y2"] + $Offset; + else + $XPos = $this->DataSet->Data["GraphArea"]["X2"] + $Offset; + + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"]; + + $AxisID = $Serie["Axis"]; + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $Caption ) + { + if ( $CaptionLine ) + { + $StartX = floor($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin); + $EndX = floor($this->GraphAreaX1-$CaptionMargin+$XMargin); + + $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight); + if ( $CaptionBox ) { $this->drawFilledRectangle($StartX,$YPos,$EndX,$YPos+$CaptionHeight,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); } + $this->drawLine($StartX+2,$YPos+($CaptionHeight/2),$EndX-2,$YPos+($CaptionHeight/2),$CaptionSettings); + } + else + $this->drawFilledRectangle($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin,$YPos,$this->GraphAreaX1-$CaptionMargin+$XMargin,$YPos+$CaptionHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB)); + } + + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; + + $TopY = $YPos + ($CaptionHeight/2) - ($DerivativeHeight/2); + $BottomY = $YPos + ($CaptionHeight/2) + ($DerivativeHeight/2); + + $StartX = floor($this->GraphAreaX1+$XMargin); + $EndX = floor($this->GraphAreaX2-$XMargin); + + if ( $DrawBackground ) { $this->drawFilledRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); } + if ( $DrawBorder ) { $this->drawRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); } + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + + $RestoreShadow = $this->Shadow; + $this->Shadow = FALSE; + + /* Determine the Max slope index */ + $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1; + foreach($PosArray as $Key => $Y) + { + if ( $Y != VOID && $LastX != NULL ) + { $Slope = ($LastY - $Y); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } } + + if ( $Y == VOID ) + { $LastX = NULL; $LastY = NULL; } + else + { $LastX = $X; $LastY = $Y; } + } + + $LastX = NULL; $LastY = NULL; $LastColor = NULL; + foreach($PosArray as $Key => $Y) + { + if ( $Y != VOID && $LastY != NULL ) + { + $Slope = ($LastY - $Y); + + if ( $Slope >= 0 ) + { + $SlopeIndex = (100 / $MaxSlope) * $Slope; + $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR; + $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG; + $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB; + } + elseif ( $Slope < 0 ) + { + $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope); + $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR; + $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG; + $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB; + } + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B); + + if ( $ShadedSlopeBox && $LastColor != NULL ) // && $Slope != 0 + { + $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B); + $this->drawGradientArea($LastX,$TopY,$X,$BottomY,DIRECTION_HORIZONTAL,$GradientSettings); + } + elseif ( !$ShadedSlopeBox || $LastColor == NULL ) // || $Slope == 0 + $this->drawFilledRectangle(floor($LastX),$TopY,floor($X),$BottomY,$Color); + + $LastColor = $Color; + } + + if ( $Y == VOID ) + { $LastY = NULL; } + else + { $LastX = $X; $LastY = $Y; } + + $X = $X + $XStep; + } + + $YPos = $YPos + $CaptionHeight + $SerieSpacing; + } + else + { + if ( $Caption ) + { + $StartY = floor($this->GraphAreaY1-$CaptionWidth+$XMargin-$CaptionMargin); + $EndY = floor($this->GraphAreaY1-$CaptionMargin+$XMargin); + if ( $CaptionLine ) + { + $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight); + if ( $CaptionBox ) { $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); } + $this->drawLine($XPos+($CaptionHeight/2),$StartY+2,$XPos+($CaptionHeight/2),$EndY-2,$CaptionSettings); + } + else + $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB)); + } + + + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; + + $TopX = $XPos + ($CaptionHeight/2) - ($DerivativeHeight/2); + $BottomX = $XPos + ($CaptionHeight/2) + ($DerivativeHeight/2); + + $StartY = floor($this->GraphAreaY1+$XMargin); + $EndY = floor($this->GraphAreaY2-$XMargin); + + if ( $DrawBackground ) { $this->drawFilledRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); } + if ( $DrawBorder ) { $this->drawRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); } + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + + $RestoreShadow = $this->Shadow; + $this->Shadow = FALSE; + + /* Determine the Max slope index */ + $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1; + foreach($PosArray as $Key => $X) + { + if ( $X != VOID && $LastX != NULL ) + { $Slope = ($X - $LastX); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } } + + if ( $X == VOID ) + { $LastX = NULL; } + else + { $LastX = $X; } + } + + $LastX = NULL; $LastY = NULL; $LastColor = NULL; + foreach($PosArray as $Key => $X) + { + if ( $X != VOID && $LastX != NULL ) + { + $Slope = ($X - $LastX); + + if ( $Slope >= 0 ) + { + $SlopeIndex = (100 / $MaxSlope) * $Slope; + $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR; + $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG; + $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB; + } + elseif ( $Slope < 0 ) + { + $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope); + $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR; + $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG; + $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB; + } + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B); + + if ( $ShadedSlopeBox && $LastColor != NULL ) + { + $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B); + + $this->drawGradientArea($TopX,$LastY,$BottomX,$Y,DIRECTION_VERTICAL,$GradientSettings); + } + elseif ( !$ShadedSlopeBox || $LastColor == NULL ) + $this->drawFilledRectangle($TopX,floor($LastY),$BottomX,floor($Y),$Color); + + $LastColor = $Color; + } + + if ( $X == VOID ) + { $LastX = NULL; } + else + { $LastX = $X; $LastY = $Y; } + + $Y = $Y + $XStep; + } + + $XPos = $XPos + $CaptionHeight + $SerieSpacing; + } + + $this->Shadow = $RestoreShadow; + } + } + } + + /* Draw the line of best fit */ + function drawBestFit($Format="") + { + $OverrideTicks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL; + $OverrideR = isset($Format["R"]) ? $Format["R"] : VOID; + $OverrideG = isset($Format["G"]) ? $Format["G"] : VOID; + $OverrideB = isset($Format["B"]) ? $Format["B"] : VOID; + $OverrideAlpha = isset($Format["Alpha"]) ? $Format["Alpha"] : VOID; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + foreach($Data["Series"] as $SerieName => $Serie) + { + if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) + { + if ( $OverrideR != VOID && $OverrideG != VOID && $OverrideB != VOID ) { $R = $OverrideR; $G = $OverrideG; $B = $OverrideB; } else { $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; } + if ( $OverrideTicks == NULL ) { $Ticks = $Serie["Ticks"]; } else { $Ticks = $OverrideTicks; } + if ( $OverrideAlpha == VOID ) { $Alpha = $Serie["Color"]["Alpha"]; } else { $Alpha = $OverrideAlpha; } + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks); + + $AxisID = $Serie["Axis"]; + $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"])); + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0; + foreach($PosArray as $Key => $Y) + { + if ( $Y != VOID ) + { + $Sxy = $Sxy + $X*$Y; + $Sx = $Sx + $X; + $Sy = $Sy + $Y; + $Sxx = $Sxx + $X*$X; + } + + $X = $X + $XStep; + } + $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray); + $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx)); + $B = (($Sy)-($M*$Sx))/($n); + + $X1 = $this->GraphAreaX1 + $XMargin; + $Y1 = $M * $X1 + $B; + $X2 = $this->GraphAreaX2 - $XMargin; + $Y2 = $M * $X2 + $B; + + if ( $Y1 < $this->GraphAreaY1 ) { $X1 = $X1 + ($this->GraphAreaY1-$Y1); $Y1 = $this->GraphAreaY1; } + if ( $Y1 > $this->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->GraphAreaY2); $Y1 = $this->GraphAreaY2; } + if ( $Y2 < $this->GraphAreaY1 ) { $X2 = $X2 - ($this->GraphAreaY1-$Y2); $Y2 = $this->GraphAreaY1; } + if ( $Y2 > $this->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->GraphAreaY2); $Y2 = $this->GraphAreaY2; } + + $this->drawLine($X1,$Y1,$X2,$Y2,$Color); + } + else + { + if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin; + + if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; } + $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0; + foreach($PosArray as $Key => $X) + { + if ( $X != VOID ) + { + $Sxy = $Sxy + $X*$Y; + $Sx = $Sx + $Y; + $Sy = $Sy + $X; + $Sxx = $Sxx + $Y*$Y; + } + + $Y = $Y + $YStep; + } + $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray); + $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx)); + $B = (($Sy)-($M*$Sx))/($n); + + $Y1 = $this->GraphAreaY1 + $XMargin; + $X1 = $M * $Y1 + $B; + $Y2 = $this->GraphAreaY2 - $XMargin; + $X2 = $M * $Y2 + $B; + + if ( $X1 < $this->GraphAreaX1 ) { $Y1 = $Y1 + ($this->GraphAreaX1-$X1); $X1 = $this->GraphAreaX1; } + if ( $X1 > $this->GraphAreaX2 ) { $Y1 = $Y1 + ($X1-$this->GraphAreaX2); $X1 = $this->GraphAreaX2; } + if ( $X2 < $this->GraphAreaX1 ) { $Y2 = $Y2 - ($this->GraphAreaY1-$X2); $X2 = $this->GraphAreaX1; } + if ( $X2 > $this->GraphAreaX2 ) { $Y2 = $Y2 - ($X2-$this->GraphAreaX2); $X2 = $this->GraphAreaX2; } + + $this->drawLine($X1,$Y1,$X2,$Y2,$Color); + } + } + } + } + + /* Write labels */ + function writeLabel($SeriesName,$Indexes,$Format="") + { + $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL; + $ForceLabels = isset($Format["ForceLabels"]) ? $Format["ForceLabels"] : NULL; + $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX; + $DrawVerticalLine = isset($Format["DrawVerticalLine"]) ? $Format["DrawVerticalLine"] : FALSE; + $VerticalLineR = isset($Format["VerticalLineR"]) ? $Format["VerticalLineR"] : 0; + $VerticalLineG = isset($Format["VerticalLineG"]) ? $Format["VerticalLineG"] : 0; + $VerticalLineB = isset($Format["VerticalLineB"]) ? $Format["VerticalLineB"] : 0; + $VerticalLineAlpha = isset($Format["VerticalLineAlpha"]) ? $Format["VerticalLineAlpha"] : 40; + $VerticalLineTicks = isset($Format["VerticalLineTicks"]) ? $Format["VerticalLineTicks"] : 2; + + $Data = $this->DataSet->getData(); + list($XMargin,$XDivs) = $this->scaleGetXSettings(); + + if ( !is_array($Indexes) ) { $Index = $Indexes; $Indexes = ""; $Indexes[] = $Index; } + if ( !is_array($SeriesName) ) { $SerieName = $SeriesName; $SeriesName = ""; $SeriesName[] = $SerieName; } + if ( $ForceLabels != NULL && !is_array($ForceLabels) ) { $ForceLabel = $ForceLabels; $ForceLabels = ""; $ForceLabels[] = $ForceLabel; } + + foreach ($Indexes as $Key => $Index) + { + $Series = ""; + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; } + $X = $this->GraphAreaX1 + $XMargin + $Index * $XStep; + + if ( $DrawVerticalLine ) { $this->drawLine($X,$this->GraphAreaY1+$Data["YMargin"],$X,$this->GraphAreaY2-$Data["YMargin"],array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); } + + $MinY = $this->GraphAreaY2; + foreach ($SeriesName as $iKey => $SerieName) + { + if ( isset($Data["Series"][$SerieName]["Data"][$Index]) ) + { + $AxisID = $Data["Series"][$SerieName]["Axis"]; + $XAxisMode = $Data["XAxisDisplay"]; + $XAxisFormat = $Data["XAxisFormat"]; + $XAxisUnit = $Data["XAxisUnit"]; + $AxisMode = $Data["Axis"][$AxisID]["Display"]; + $AxisFormat = $Data["Axis"][$AxisID]["Format"]; + $AxisUnit = $Data["Axis"][$AxisID]["Unit"]; + + if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) ) + $XLabel = $this->scaleFormat($Data["Series"][$Data["Abscissa"]]["Data"][$Index],$XAxisMode,$XAxisFormat,$XAxisUnit); + else + $XLabel = ""; + + if ( $OverrideTitle != NULL) + $Description = $OverrideTitle; + elseif ( count($SeriesName) == 1 ) + { + $Description = $Data["Series"][$SerieName]["Description"]." - ".$XLabel; + } + elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) ) + $Description = $XLabel; + + $Serie = ""; + $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"]; + $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"]; + $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"]; + $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"]; + + if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) ) + $SerieOffset = $Data["Series"][$SerieName]["XOffset"]; + else + $SerieOffset = 0; + + $Value = $Data["Series"][$SerieName]["Data"][$Index]; + if ( $Value == VOID ) { $Value = "NaN"; } + + if ( $ForceLabels != NULL ) + $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set"; + else + $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit); + + if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED ) + { + if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; } + + $Value = 0; $Done = FALSE; + foreach($Data["Series"] as $Name => $SerieLookup) + { + if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done ) + { + if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID ) + { + if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; } + if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" ) { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; } + if ($Name == $SerieName ) { $Done = TRUE; } + } + } + } + } + + $X = floor($this->GraphAreaX1 + $XMargin + $Index * $XStep + $SerieOffset); + $Y = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID))); + + if ($Y < $MinY) { $MinY = $Y; } + + if ( $DrawPoint == LABEL_POINT_CIRCLE ) + $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + elseif ( $DrawPoint == LABEL_POINT_BOX ) + $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + + $Series[] = array("Format"=>$Serie,"Caption"=>$Caption); + } + } + $this->drawLabelBox($X,$MinY-3,$Description,$Series,$Format); + + } + else + { + if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; } + $Y = $this->GraphAreaY1 + $XMargin + $Index * $XStep; + + if ( $DrawVerticalLine ) { $this->drawLine($this->GraphAreaX1+$Data["YMargin"],$Y,$this->GraphAreaX2-$Data["YMargin"],$Y,array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); } + + $MinX = $this->GraphAreaX2; + foreach ($SeriesName as $Key => $SerieName) + { + if ( isset($Data["Series"][$SerieName]["Data"][$Index]) ) + { + $AxisID = $Data["Series"][$SerieName]["Axis"]; + $XAxisMode = $Data["XAxisDisplay"]; + $XAxisFormat = $Data["XAxisFormat"]; + $XAxisUnit = $Data["XAxisUnit"]; + $AxisMode = $Data["Axis"][$AxisID]["Display"]; + $AxisFormat = $Data["Axis"][$AxisID]["Format"]; + $AxisUnit = $Data["Axis"][$AxisID]["Unit"]; + + if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) ) + $XLabel = $this->scaleFormat($Data["Series"][$Data["Abscissa"]]["Data"][$Index],$XAxisMode,$XAxisFormat,$XAxisUnit); + else + $XLabel = ""; + + if ( $OverrideTitle != NULL) + $Description = $OverrideTitle; + elseif ( count($SeriesName) == 1 ) + { + if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) ) + $Description = $Data["Series"][$SerieName]["Description"]." - ".$XLabel; + } + elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) ) + $Description = $XLabel; + + $Serie = ""; + if ( isset($Data["Extended"]["Palette"][$Index] ) ) + { + $Serie["R"] = $Data["Extended"]["Palette"][$Index]["R"]; + $Serie["G"] = $Data["Extended"]["Palette"][$Index]["G"]; + $Serie["B"] = $Data["Extended"]["Palette"][$Index]["B"]; + $Serie["Alpha"] = $Data["Extended"]["Palette"][$Index]["Alpha"]; + } + else + { + $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"]; + $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"]; + $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"]; + $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"]; + } + + if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) ) + $SerieOffset = $Data["Series"][$SerieName]["XOffset"]; + else + $SerieOffset = 0; + + $Value = $Data["Series"][$SerieName]["Data"][$Index]; + if ( $ForceLabels != NULL ) + $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set"; + else + $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit); + if ( $Value == VOID ) { $Value = "NaN"; } + + if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED ) + { + if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; } + + $Value = 0; $Done = FALSE; + foreach($Data["Series"] as $Name => $SerieLookup) + { + if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done ) + { + if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID ) + { + if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; } + if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" ) { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; } + if ($Name == $SerieName ) { $Done = TRUE; } + } + } + } + } + + $X = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID))); + $Y = floor($this->GraphAreaY1 + $XMargin + $Index * $XStep + $SerieOffset); + + if ($X < $MinX) { $MinX = $X; } + + if ( $DrawPoint == LABEL_POINT_CIRCLE ) + $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + elseif ( $DrawPoint == LABEL_POINT_BOX ) + $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + + $Series[] = array("Format"=>$Serie,"Caption"=>$Caption); + } + } + $this->drawLabelBox($MinX,$Y-3,$Description,$Series,$Format); + + } + } + } + + /* Draw a label box */ + function drawLabelBox($X,$Y,$Title,$Captions,$Format="") + { + $NoTitle = isset($Format["NoTitle"]) ? $Format["NoTitle"] : NULL; + $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 50; + $DrawSerieColor = isset($Format["DrawSerieColor"]) ? $Format["DrawSerieColor"] : TRUE; + $SerieR = isset($Format["SerieR"]) ? $Format["SerieR"] : NULL; + $SerieG = isset($Format["SerieG"]) ? $Format["SerieG"] : NULL; + $SerieB = isset($Format["SerieB"]) ? $Format["SerieB"] : NULL; + $SerieAlpha = isset($Format["SerieAlpha"]) ? $Format["SerieAlpha"] : NULL; + $SerieBoxSize = isset($Format["SerieBoxSize"]) ? $Format["SerieBoxSize"] : 6; + $SerieBoxSpacing = isset($Format["SerieBoxSpacing"]) ? $Format["SerieBoxSpacing"] : 4; + $VerticalMargin = isset($Format["VerticalMargin"]) ? $Format["VerticalMargin"] : 10; + $HorizontalMargin = isset($Format["HorizontalMargin"]) ? $Format["HorizontalMargin"] : 8; + $R = isset($Format["R"]) ? $Format["R"] : $this->FontColorR; + $G = isset($Format["G"]) ? $Format["G"] : $this->FontColorG; + $B = isset($Format["B"]) ? $Format["B"] : $this->FontColorB; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA; + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize; + $TitleMode = isset($Format["TitleMode"]) ? $Format["TitleMode"] : LABEL_TITLE_NOBACKGROUND; + $TitleR = isset($Format["TitleR"]) ? $Format["TitleR"] : $R; + $TitleG = isset($Format["TitleG"]) ? $Format["TitleG"] : $G; + $TitleB = isset($Format["TitleB"]) ? $Format["TitleB"] : $B; + $TitleAlpha = isset($Format["TitleAlpha"]) ? $Format["TitleAlpha"] : 100; + $TitleBackgroundR = isset($Format["TitleBackgroundR"]) ? $Format["TitleBackgroundR"] : 0; + $TitleBackgroundG = isset($Format["TitleBackgroundG"]) ? $Format["TitleBackgroundG"] : 0; + $TitleBackgroundB = isset($Format["TitleBackgroundB"]) ? $Format["TitleBackgroundB"] : 0; + $TitleBackgroundAlpha = isset($Format["TitleBackgroundAlpha"]) ? $Format["TitleBackgroundAlpha"] : 100; + $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255; + $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255; + $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255; + $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 220; + $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 220; + $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 220; + $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 100; + + if ( !$DrawSerieColor ) { $SerieBoxSize = 0; $SerieBoxSpacing = 0; } + + $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Title); + $TitleWidth = ($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2; + $TitleHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]); + + if ( $NoTitle ) { $TitleWidth = 0; $TitleHeight = 0; } + + $CaptionWidth = 0; $CaptionHeight = -$HorizontalMargin; + foreach($Captions as $Key =>$Caption) + { + $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Caption["Caption"]); + $CaptionWidth = max($CaptionWidth,($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2); + $CaptionHeight = $CaptionHeight + max(($TxtPos[0]["Y"] - $TxtPos[2]["Y"]),($SerieBoxSize+2)) + $HorizontalMargin; + } + + if ( $CaptionHeight <= 5 ) { $CaptionHeight = $CaptionHeight + $HorizontalMargin/2; } + + if ( $DrawSerieColor ) { $CaptionWidth = $CaptionWidth + $SerieBoxSize + $SerieBoxSpacing; } + + $BoxWidth = max($BoxWidth,$TitleWidth,$CaptionWidth); + + $XMin = $X - 5 - floor(($BoxWidth-10) / 2); + $XMax = $X + 5 + floor(($BoxWidth-10) / 2); + + $RestoreShadow = $this->Shadow; + if ( $this->Shadow == TRUE ) + { + $this->Shadow = FALSE; + + $Poly = ""; + $Poly[] = $X+$this->ShadowX; $Poly[] = $Y+$this->ShadowX; + $Poly[] = $X+5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX; + $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX; + + if ( $NoTitle ) + { + $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX; + $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX; + } + else + { + $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX; + $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX; + } + + $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX; + $Poly[] = $X-5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX; + $this->drawPolygon($Poly,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa)); + } + + /* Draw the background */ + $GradientSettings = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$BoxAlpha); + if ( $NoTitle ) + $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings); + else + $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings); + $Poly = ""; $Poly[] = $X; $Poly[] = $Y; $Poly[] = $X-5; $Poly[] = $Y-5; $Poly[] = $X+5; $Poly[] = $Y-5; + $this->drawPolygon($Poly,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB,"Alpha"=>$BoxAlpha,"NoBorder"=>TRUE)); + + /* Outer border */ + $OuterBorderColor = $this->allocateColor($this->Picture,100,100,100,$BoxAlpha); + imageline($this->Picture,$XMin,$Y-5,$X-5,$Y-5,$OuterBorderColor); + imageline($this->Picture,$X,$Y,$X-5,$Y-5,$OuterBorderColor); + imageline($this->Picture,$X,$Y,$X+5,$Y-5,$OuterBorderColor); + imageline($this->Picture,$X+5,$Y-5,$XMax,$Y-5,$OuterBorderColor); + if ( $NoTitle ) + { + imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin,$Y-5,$OuterBorderColor); + imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5,$OuterBorderColor); + imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$OuterBorderColor); + } + else + { + imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin,$Y-5,$OuterBorderColor); + imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5,$OuterBorderColor); + imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$OuterBorderColor); + } + + /* Inner border */ + $InnerBorderColor = $this->allocateColor($this->Picture,255,255,255,$BoxAlpha); + imageline($this->Picture,$XMin+1,$Y-6,$X-5,$Y-6,$InnerBorderColor); + imageline($this->Picture,$X,$Y-1,$X-5,$Y-6,$InnerBorderColor); + imageline($this->Picture,$X,$Y-1,$X+5,$Y-6,$InnerBorderColor); + imageline($this->Picture,$X+5,$Y-6,$XMax-1,$Y-6,$InnerBorderColor); + if ( $NoTitle ) + { + imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin+1,$Y-6,$InnerBorderColor); + imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-6,$InnerBorderColor); + imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$InnerBorderColor); + } + else + { + imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin+1,$Y-6,$InnerBorderColor); + imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-6,$InnerBorderColor); + imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$InnerBorderColor); + } + + /* Draw the separator line */ + if ( $TitleMode == LABEL_TITLE_NOBACKGROUND && !$NoTitle ) + { + $YPos = $Y-7-$CaptionHeight-$HorizontalMargin-$HorizontalMargin/2; + $XMargin = $VerticalMargin / 2; + $this->drawLine($XMin+$XMargin,$YPos+1,$XMax-$XMargin,$YPos+1,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB,"Alpha"=>$BoxAlpha)); + $this->drawLine($XMin+$XMargin,$YPos,$XMax-$XMargin,$YPos,array("R"=>$GradientStartR,"G"=>$GradientStartG,"B"=>$GradientStartB,"Alpha"=>$BoxAlpha)); + } + elseif ( $TitleMode == LABEL_TITLE_BACKGROUND ) + { + $this->drawFilledRectangle($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2,array("R"=>$TitleBackgroundR,"G"=>$TitleBackgroundG,"B"=>$TitleBackgroundB,"Alpha"=>$BoxAlpha)); + imageline($this->Picture,$XMin+1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$XMax-1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$InnerBorderColor); + } + + /* Write the description */ + if ( !$NoTitle ) + $this->drawText($XMin+$VerticalMargin,$Y-7-$CaptionHeight-$HorizontalMargin*2,$Title,array("Align"=>TEXT_ALIGN_BOTTOMLEFT,"R"=>$TitleR,"G"=>$TitleG,"B"=>$TitleB)); + + /* Write the value */ + $YPos = $Y-5-$HorizontalMargin; $XPos = $XMin+$VerticalMargin+$SerieBoxSize+$SerieBoxSpacing; + foreach($Captions as $Key => $Caption) + { + $CaptionTxt = $Caption["Caption"]; + $TxtPos = $this->getTextBox($XPos,$YPos,$FontName,$FontSize,0,$CaptionTxt); + $CaptionHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]); + + /* Write the serie color if needed */ + if ( $DrawSerieColor ) + { + $BoxSettings = array("R"=>$Caption["Format"]["R"],"G"=>$Caption["Format"]["G"],"B"=>$Caption["Format"]["B"],"Alpha"=>$Caption["Format"]["Alpha"],"BorderR"=>0,"BorderG"=>0,"BorderB"=>0); + $this->drawFilledRectangle($XMin+$VerticalMargin,$YPos-$SerieBoxSize,$XMin+$VerticalMargin+$SerieBoxSize,$YPos,$BoxSettings); + } + + $this->drawText($XPos,$YPos,$CaptionTxt,array("Align"=>TEXT_ALIGN_BOTTOMLEFT)); + + $YPos = $YPos - $CaptionHeight - $HorizontalMargin; + } + + $this->Shadow = $RestoreShadow; + } + + /* Draw a basic shape */ + function drawShape($X,$Y,$Shape,$PlotSize,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha) + { + if ( $Shape == SERIE_SHAPE_FILLEDCIRCLE ) + { + if ( $PlotBorder ) { $this->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); } + $this->drawFilledCircle($X,$Y,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + } + elseif ( $Shape == SERIE_SHAPE_FILLEDSQUARE ) + { + if ( $PlotBorder ) { $this->drawFilledRectangle($X-$PlotSize-$BorderSize,$Y-$PlotSize-$BorderSize,$X+$PlotSize+$BorderSize,$Y+$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); } + $this->drawFilledRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + } + elseif ( $Shape == SERIE_SHAPE_FILLEDTRIANGLE ) + { + if ( $PlotBorder ) + { + $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize; + $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); + } + + $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X-$PlotSize; $Pos[]=$Y+$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y+$PlotSize; + $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + } + elseif ( $Shape == SERIE_SHAPE_TRIANGLE ) + { + $this->drawLine($X,$Y-$PlotSize,$X-$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + $this->drawLine($X-$PlotSize,$Y+$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + $this->drawLine($X+$PlotSize,$Y+$PlotSize,$X,$Y-$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + } + elseif ( $Shape == SERIE_SHAPE_SQUARE ) + $this->drawRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + elseif ( $Shape == SERIE_SHAPE_CIRCLE ) + $this->drawCircle($X,$Y,$PlotSize,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + elseif ( $Shape == SERIE_SHAPE_DIAMOND ) + { + $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize; + $this->drawPolygon($Pos,array("NoFill"=>TRUE,"BorderR"=>$R,"BorderG"=>$G,"BorderB"=>$B,"BorderAlpha"=>$Alpha)); + } + elseif ( $Shape == SERIE_SHAPE_FILLEDDIAMOND ) + { + if ( $PlotBorder ) + { + $Pos = ""; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize+$BorderSize; + $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); + } + + $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize; + $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + } + } + + function drawPolygonChart($Points,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $NoFill = isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE; + $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha / 2; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL; + + if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; } + + $RestoreShadow = $this->Shadow; + $this->Shadow = FALSE; + + $AllIntegers = TRUE; + for($i=0;$i<=count($Points)-2;$i=$i+2) + { if ( $this->getFirstDecimal($Points[$i+1]) != 0 ) { $AllIntegers = FALSE; } } + + /* Convert polygon to segments */ + $Segments = ""; + for($i=2;$i<=count($Points)-2;$i=$i+2) + { $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[$i],"Y2"=>$Points[$i+1]); } + $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[0],"Y2"=>$Points[1]); + + /* Simplify straight lines */ + $Result = ""; $inHorizon = FALSE; $LastX = VOID; + foreach($Segments as $Key => $Pos) + { + if ( $Pos["Y1"] != $Pos["Y2"] ) + { + if ( $inHorizon ) { $inHorizon = FALSE; $Result[] = array("X1"=>$LastX,"Y1"=>$Pos["Y1"],"X2"=>$Pos["X1"],"Y2"=>$Pos["Y1"]); } + + $Result[] = array("X1"=>$Pos["X1"],"Y1"=>$Pos["Y1"],"X2"=>$Pos["X2"],"Y2"=>$Pos["Y2"]); + } + else { if ( !$inHorizon ) { $inHorizon = TRUE; $LastX = $Pos["X1"];} } + } + $Segments = $Result; + + /* Do we have something to draw */ + if ( $Segments == "" ) { return(0); } + + /* For segments debugging purpose */ + //foreach($Segments as $Key => $Pos) + // echo $Pos["X1"].",".$Pos["Y1"].",".$Pos["X2"].",".$Pos["Y2"]."\r\n"; + + /* Find out the min & max Y boundaries */ + $MinY = OUT_OF_SIGHT; $MaxY = OUT_OF_SIGHT; + foreach($Segments as $Key => $Coords) + { + if ( $MinY == OUT_OF_SIGHT || $MinY > min($Coords["Y1"],$Coords["Y2"]) ) { $MinY = min($Coords["Y1"],$Coords["Y2"]); } + if ( $MaxY == OUT_OF_SIGHT || $MaxY < max($Coords["Y1"],$Coords["Y2"]) ) { $MaxY = max($Coords["Y1"],$Coords["Y2"]); } + } + + if ( $AllIntegers ) { $YStep = 1; } else { $YStep = .5; } + + $MinY = floor($MinY); $MaxY = floor($MaxY); + + /* Scan each Y lines */ + $DefaultColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + $DebugLine = 0; $DebugColor = $this->allocateColor($this->Picture,255,0,0,100); + + $MinY = floor($MinY); $MaxY = floor($MaxY); $YStep = 1; + + if ( !$NoFill ) + { + //if ( $DebugLine ) { $MinY = $DebugLine; $MaxY = $DebugLine; } + for($Y=$MinY;$Y<=$MaxY;$Y=$Y+$YStep) + { + $Intersections = ""; $LastSlope = NULL; $RestoreLast = "-"; + foreach($Segments as $Key => $Coords) + { + $X1 = $Coords["X1"]; $X2 = $Coords["X2"]; $Y1 = $Coords["Y1"]; $Y2 = $Coords["Y2"]; + + if ( min($Y1,$Y2) <= $Y && max($Y1,$Y2) >= $Y ) + { + if ( $Y1 == $Y2 ) + { $X = $X1; } + else + { $X = $X1 + ( ($Y-$Y1)*$X2 - ($Y-$Y1)*$X1 ) / ($Y2-$Y1); } + + $X = floor($X); + + if ( $X2 == $X1 ) + { $Slope = "!"; } + else + { + $SlopeC = ($Y2 - $Y1) / ($X2 - $X1); + if( $SlopeC == 0 ) + { $Slope = "="; } + elseif( $SlopeC > 0 ) + { $Slope = "+"; } + elseif ( $SlopeC < 0 ) + { $Slope = "-"; } + } + + if ( !is_array($Intersections) ) + { $Intersections[] = $X; } + elseif( !in_array($X,$Intersections) ) + { $Intersections[] = $X; } + elseif( in_array($X,$Intersections) ) + { + if ($Y == $DebugLine) { echo $Slope."/".$LastSlope."(".$X.") "; } + + if ( $Slope == "=" && $LastSlope == "-" ) { $Intersections[] = $X; } + if ( $Slope != $LastSlope && $LastSlope != "!" && $LastSlope != "=" ) { $Intersections[] = $X; } + if ( $Slope != $LastSlope && $LastSlope == "!" && $Slope == "+" ) { $Intersections[] = $X; } + } + + if ( is_array($Intersections) && in_array($X,$Intersections) && $LastSlope == "=" && ($Slope == "-" )) { $Intersections[] = $X; } + + $LastSlope = $Slope; + } + } + if ( $RestoreLast != "-" ) { $Intersections[] = $RestoreLast; echo "@".$Y."\r\n"; } + + if ( is_array($Intersections) ) + { + sort($Intersections); + + if ($Y == $DebugLine) { print_r($Intersections); } + + /* Remove NULL plots */ + $Result = ""; + for($i=0;$i<=count($Intersections)-1;$i=$i+2) + { + if ( isset($Intersections[$i+1]) ) + { if ( $Intersections[$i] != $Intersections[$i+1] ) { $Result[] = $Intersections[$i]; $Result[] = $Intersections[$i+1]; } } + } + + if ( is_array($Result) ) + { + $Intersections = $Result; + + $LastX = OUT_OF_SIGHT; + foreach($Intersections as $Key => $X) + { + if ( $LastX == OUT_OF_SIGHT ) + $LastX = $X; + elseif ( $LastX != OUT_OF_SIGHT ) + { + if ( $this->getFirstDecimal($LastX) > 1 ) { $LastX++; } + + $Color = $DefaultColor; + if ( $Threshold != NULL ) + { + foreach($Threshold as $Key => $Parameters) + { + if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"]) + { + if ( isset($Parameters["R"]) ) { $R = $Parameters["R"]; } else { $R = 0; } + if ( isset($Parameters["G"]) ) { $G = $Parameters["G"]; } else { $G = 0; } + if ( isset($Parameters["B"]) ) { $B = $Parameters["B"]; } else { $B = 0; } + if ( isset($Parameters["Alpha"]) ) { $Alpha = $Parameters["Alpha"]; } else { $Alpha = 100; } + $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha); + } + } + } + + imageline($this->Picture,$LastX,$Y,$X,$Y,$Color); + + if ( $Y == $DebugLine) { imageline($this->Picture,$LastX,$Y,$X,$Y,$DebugColor); } + + $LastX = OUT_OF_SIGHT; + } + } + } + } + } + } + + /* Draw the polygon border, if required */ + if ( !$NoBorder) + { + foreach($Segments as $Key => $Coords) + $this->drawLine($Coords["X1"],$Coords["Y1"],$Coords["X2"],$Coords["Y2"],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Threshold"=>$Threshold)); + } + + $this->Shadow = $RestoreShadow; + } + + /* Return the abscissa margin */ + function getAbscissaMargin($Data) + { + foreach($Data["Axis"] as $AxisID => $Values) { if ( $Values["Identity"] == AXIS_X ) { return($Values["Margin"]); } } + return(0); + } + + } +?> \ No newline at end of file diff --git a/pChart/pImage.class.php b/pChart/pImage.class.php new file mode 100644 index 0000000..00ac7f0 --- /dev/null +++ b/pChart/pImage.class.php @@ -0,0 +1,472 @@ +<?php + /* + pDraw - pChart core class + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + /* The GD extension is mandatory */ + if (!extension_loaded('gd') && !extension_loaded('gd2')) + { + echo "GD extension must be loaded. \r\n"; + exit(); + } + + /* Image map handling */ + define("IMAGE_MAP_STORAGE_FILE" , 680001); + define("IMAGE_MAP_STORAGE_SESSION" , 680002); + + /* Last generated chart layout */ + define("CHART_LAST_LAYOUT_REGULAR" , 680011); + define("CHART_LAST_LAYOUT_STACKED" , 680012); + + /* ImageMap string delimiter */ + define("IMAGE_MAP_DELIMITER" , chr(1)); + + class pImage extends pDraw + { + /* Image settings, size, quality, .. */ + var $XSize = NULL; // Width of the picture + var $YSize = NULL; // Height of the picture + var $Picture = NULL; // GD picture object + var $Antialias = TRUE; // Turn antialias on or off + var $AntialiasQuality = 0; // Quality of the antialiasing implementation (0-1) + var $Mask = ""; // Already drawn pixels mask (Filled circle implementation) + var $TransparentBackground = FALSE; // Just to know if we need to flush the alpha channels when rendering + + /* Graph area settings */ + var $GraphAreaX1 = NULL; // Graph area X origin + var $GraphAreaY1 = NULL; // Graph area Y origin + var $GraphAreaX2 = NULL; // Graph area bottom right X position + var $GraphAreaY2 = NULL; // Graph area bottom right Y position + + /* Scale settings */ + var $ScaleMinDivHeight = 20; // Minimum height for scame divs + + /* Font properties */ + var $FontName = "fonts/GeosansLight.ttf"; // Default font file + var $FontSize = 12; // Default font size + var $FontBox = NULL; // Return the bounding box of the last written string + var $FontColorR = 0; // Default color settings + var $FontColorG = 0; // Default color settings + var $FontColorB = 0; // Default color settings + var $FontColorA = 100; // Default transparency + + /* Shadow properties */ + var $Shadow = FALSE; // Turn shadows on or off + var $ShadowX = NULL; // X Offset of the shadow + var $ShadowY = NULL; // Y Offset of the shadow + var $ShadowR = NULL; // R component of the shadow + var $ShadowG = NULL; // G component of the shadow + var $ShadowB = NULL; // B component of the shadow + var $Shadowa = NULL; // Alpha level of the shadow + + /* Image map */ + var $ImageMap = NULL; // Aray containing the image map + var $ImageMapIndex = "pChart"; // Name of the session array + var $ImageMapStorageMode = NULL; // Save the current imagemap storage mode + var $ImageMapAutoDelete = TRUE; // Automatic deletion of the image map temp files + + /* Data Set */ + var $DataSet = NULL; // Attached dataset + + /* Last generated chart info */ + var $LastChartLayout = CHART_LAST_LAYOUT_REGULAR; // Last layout : regular or stacked + + /* Class constructor */ + function pImage($XSize,$YSize,$DataSet=NULL,$TransparentBackground=FALSE) + { + $this->TransparentBackground = $TransparentBackground; + + if ( $DataSet != NULL ) { $this->DataSet = $DataSet; } + + $this->XSize = $XSize; + $this->YSize = $YSize; + $this->Picture = imagecreatetruecolor($XSize,$YSize); + + if ( $this->TransparentBackground ) + { + imagealphablending($this->Picture,FALSE); + imagefilledrectangle($this->Picture, 0,0,$XSize, $YSize, imagecolorallocatealpha($this->Picture, 255, 255, 255, 127)); + imagealphablending($this->Picture,TRUE); + imagesavealpha($this->Picture,true); + } + else + { + $C_White = $this->AllocateColor($this->Picture,255,255,255); + imagefilledrectangle($this->Picture,0,0,$XSize,$YSize,$C_White); + } + } + + /* Enable / Disable and set shadow properties */ + function setShadow($Enabled=TRUE,$Format="") + { + $X = isset($Format["X"]) ? $Format["X"] : 2; + $Y = isset($Format["Y"]) ? $Format["Y"] : 2; + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 10; + + $this->Shadow = $Enabled; + $this->ShadowX = $X; + $this->ShadowY = $Y; + $this->ShadowR = $R; + $this->ShadowG = $G; + $this->ShadowB = $B; + $this->Shadowa = $Alpha; + } + + /* Set the graph area position */ + function setGraphArea($X1,$Y1,$X2,$Y2) + { + if ( $X2 < $X1 || $X1 == $X2 || $Y2 < $Y1 || $Y1 == $Y2 ) { return(-1); } + + $this->GraphAreaX1 = $X1; $this->DataSet->Data["GraphArea"]["X1"] = $X1; + $this->GraphAreaY1 = $Y1; $this->DataSet->Data["GraphArea"]["Y1"] = $Y1; + $this->GraphAreaX2 = $X2; $this->DataSet->Data["GraphArea"]["X2"] = $X2; + $this->GraphAreaY2 = $Y2; $this->DataSet->Data["GraphArea"]["Y2"] = $Y2; + } + + /* Return the width of the picture */ + function getWidth() + { return($this->XSize); } + + /* Return the heigth of the picture */ + function getHeight() + { return($this->YSize); } + + /* Render the picture to a file */ + function render($FileName) + { + if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); } + imagepng($this->Picture,$FileName); + } + + /* Render the picture to a web browser stream */ + function stroke($BrowserExpire=FALSE) + { + if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); } + + if ( $BrowserExpire ) + { + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Cache-Control: no-cache"); + header("Pragma: no-cache"); + } + + header('Content-type: image/png'); + imagepng($this->Picture); + } + + /* Automatic output method based on the calling interface */ + function autoOutput($FileName="output.png") + { + if (php_sapi_name() == "cli") + $this->Render($FileName); + else + $this->Stroke(); + } + + /* Return the length between two points */ + function getLength($X1,$Y1,$X2,$Y2) + { return(sqrt(pow(max($X1,$X2)-min($X1,$X2),2)+pow(max($Y1,$Y2)-min($Y1,$Y2),2))); } + + /* Return the orientation of a line */ + function getAngle($X1,$Y1,$X2,$Y2) + { + $Opposite = $Y2 - $Y1; $Adjacent = $X2 - $X1;$Angle = rad2deg(atan2($Opposite,$Adjacent)); + if ($Angle > 0) { return($Angle); } else { return(360-abs($Angle)); } + } + + /* Return the surrounding box of text area */ + function getTextBox_deprecated($X,$Y,$FontName,$FontSize,$Angle,$Text) + { + $Size = imagettfbbox($FontSize,$Angle,$FontName,$Text); + $Width = $this->getLength($Size[0],$Size[1],$Size[2],$Size[3])+1; + $Height = $this->getLength($Size[2],$Size[3],$Size[4],$Size[5])+1; + + $RealPos[0]["X"] = $X; $RealPos[0]["Y"] = $Y; + $RealPos[1]["X"] = cos((360-$Angle)*PI/180)*$Width + $RealPos[0]["X"]; $RealPos[1]["Y"] = sin((360-$Angle)*PI/180)*$Width + $RealPos[0]["Y"]; + $RealPos[2]["X"] = cos((270-$Angle)*PI/180)*$Height + $RealPos[1]["X"]; $RealPos[2]["Y"] = sin((270-$Angle)*PI/180)*$Height + $RealPos[1]["Y"]; + $RealPos[3]["X"] = cos((180-$Angle)*PI/180)*$Width + $RealPos[2]["X"]; $RealPos[3]["Y"] = sin((180-$Angle)*PI/180)*$Width + $RealPos[2]["Y"]; + + $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"]; + $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"]; $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"]; + + return($RealPos); + } + + /* Return the surrounding box of text area */ + function getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text) + { + $coords = imagettfbbox($FontSize, 0, $FontName, $Text); + + $a = deg2rad($Angle); $ca = cos($a); $sa = sin($a); $RealPos = array(); + for($i = 0; $i < 7; $i += 2) + { + $RealPos[$i/2]["X"] = $X + round($coords[$i] * $ca + $coords[$i+1] * $sa); + $RealPos[$i/2]["Y"] = $Y + round($coords[$i+1] * $ca - $coords[$i] * $sa); + } + + $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"]; + $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"]; $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"]; + $RealPos[TEXT_ALIGN_TOPLEFT]["X"] = $RealPos[3]["X"]; $RealPos[TEXT_ALIGN_TOPLEFT]["Y"] = $RealPos[3]["Y"]; + $RealPos[TEXT_ALIGN_TOPRIGHT]["X"] = $RealPos[2]["X"]; $RealPos[TEXT_ALIGN_TOPRIGHT]["Y"] = $RealPos[2]["Y"]; + $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["X"] = ($RealPos[1]["X"]-$RealPos[0]["X"])/2+$RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["Y"] = ($RealPos[0]["Y"]-$RealPos[1]["Y"])/2+$RealPos[1]["Y"]; + $RealPos[TEXT_ALIGN_TOPMIDDLE]["X"] = ($RealPos[2]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_TOPMIDDLE]["Y"] = ($RealPos[3]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"]; + $RealPos[TEXT_ALIGN_MIDDLELEFT]["X"] = ($RealPos[0]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_MIDDLELEFT]["Y"] = ($RealPos[0]["Y"]-$RealPos[3]["Y"])/2+$RealPos[3]["Y"]; + $RealPos[TEXT_ALIGN_MIDDLERIGHT]["X"] = ($RealPos[1]["X"]-$RealPos[2]["X"])/2+$RealPos[2]["X"]; $RealPos[TEXT_ALIGN_MIDDLERIGHT]["Y"] = ($RealPos[1]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"]; + $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["X"] = ($RealPos[1]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["Y"] = ($RealPos[0]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"]; + + return($RealPos); + } + + /* Set current font properties */ + function setFontProperties($Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : -1; + $G = isset($Format["G"]) ? $Format["G"] : -1; + $B = isset($Format["B"]) ? $Format["B"] : -1; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : NULL; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : NULL; + + if ( $R != -1) { $this->FontColorR = $R; } + if ( $G != -1) { $this->FontColorG = $G; } + if ( $B != -1) { $this->FontColorB = $B; } + if ( $Alpha != NULL) { $this->FontColorA = $Alpha; } + + if ( $FontName != NULL ) + $this->FontName = $FontName; + + if ( $FontSize != NULL ) + $this->FontSize = $FontSize; + } + + /* Returns the 1st decimal values (used to correct AA bugs) */ + function getFirstDecimal($Value) + { + $Values = preg_split("/\./",$Value); + if ( isset($Values[1]) ) { return(substr($Values[1],0,1)); } else { return(0); } + } + + /* Attach a dataset to your pChart Object */ + function setDataSet(&$DataSet) + { $this->DataSet = $DataSet; } + + /* Print attached dataset contents to STDOUT */ + function printDataSet() + { print_r($this->DataSet); } + + /* Initialise the image map methods */ + function initialiseImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp") + { + $this->ImageMapIndex = $Name; + $this->ImageMapStorageMode = $StorageMode; + + if ($StorageMode == IMAGE_MAP_STORAGE_SESSION) + { + if(!isset($_SESSION)) { session_start(); } + $_SESSION[$this->ImageMapIndex] = NULL; + } + elseif($StorageMode == IMAGE_MAP_STORAGE_FILE) + { + $this->ImageMapFileName = $UniqueID; + $this->ImageMapStorageFolder = $StorageFolder; + + if (file_exists($StorageFolder."/".$UniqueID.".map")) { unlink($StorageFolder."/".$UniqueID.".map"); } + } + } + + /* Add a zone to the image map */ + function addToImageMap($Type,$Plots,$Color=NULL,$Title=NULL,$Message=NULL,$HTMLEncode=FALSE) + { + if ( $this->ImageMapStorageMode == NULL ) { $this->initialiseImageMap(); } + + /* Encode the characters in the imagemap in HTML standards */ + $Title = str_replace("&#8364;","\u20AC",$Title); + $Title = htmlentities($Title,ENT_QUOTES,"ISO-8859-15"); + if ( $HTMLEncode ) + { + $Message = htmlentities($Message,ENT_QUOTES,"ISO-8859-15"); + $Message = str_replace("&lt;","<",$Message); + $Message = str_replace("&gt;",">",$Message); + } + + if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION ) + { + if(!isset($_SESSION)) { $this->initialiseImageMap(); } + $_SESSION[$this->ImageMapIndex][] = array($Type,$Plots,$Color,$Title,$Message); + } + elseif($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE) + { + $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'a'); + fwrite($Handle, $Type.IMAGE_MAP_DELIMITER.$Plots.IMAGE_MAP_DELIMITER.$Color.IMAGE_MAP_DELIMITER.$Title.IMAGE_MAP_DELIMITER.$Message."\r\n"); + fclose($Handle); + } + } + + /* Remove VOID values from an imagemap custom values array */ + function removeVOIDFromArray($SerieName, $Values) + { + if ( !isset($this->DataSet->Data["Series"][$SerieName]) ) { return(-1); } + + $Result = ""; + foreach($this->DataSet->Data["Series"][$SerieName]["Data"] as $Key => $Value) + { if ( $Value != VOID && isset($Values[$Key]) ) { $Result[] = $Values[$Key]; } } + return($Result); + } + + /* Replace the title of one image map serie */ + function replaceImageMapTitle($OldTitle, $NewTitle) + { + if ( $this->ImageMapStorageMode == NULL ) { return(-1); } + + if ( is_array($NewTitle) ) { $NewTitle = $this->removeVOIDFromArray($OldTitle, $NewTitle); } + + if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION ) + { + if(!isset($_SESSION)) { return(-1); } + if ( is_array($NewTitle) ) + { $ID = 0; foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $OldTitle && isset($NewTitle[$ID])) { $_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle[$ID]; $ID++; } } } + else + { foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $OldTitle ) { $_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle; } } } + } + elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE ) + { + $TempArray = ""; + $Handle = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r"); + if ($Handle) + { + while (($Buffer = fgets($Handle, 4096)) !== false) + { + $Fields = preg_split("/".IMAGE_MAP_DELIMITER."/",str_replace(array(chr(10),chr(13)),"",$Buffer)); + $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]); + } + fclose($Handle); + + if ( is_array($NewTitle) ) + { $ID = 0; foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle && isset($NewTitle[$ID]) ) { $TempArray[$Key][3] = $NewTitle[$ID]; $ID++; } } } + else + { foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle ) { $TempArray[$Key][3] = $NewTitle; } } } + + $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w'); + foreach($TempArray as $Key => $Settings) + { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); } + fclose($Handle); + } + } + } + + /* Replace the values of the image map contents */ + function replaceImageMapValues($Title, $Values) + { + if ( $this->ImageMapStorageMode == NULL ) { return(-1); } + + $Values = $this->removeVOIDFromArray($Title, $Values); + $ID = 0; + if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION ) + { + if(!isset($_SESSION)) { return(-1); } + foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $_SESSION[$this->ImageMapIndex][$Key][4] = $Values[$ID]; } $ID++; } } + } + elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE ) + { + $TempArray = ""; + $Handle = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r"); + if ($Handle) + { + while (($Buffer = fgets($Handle, 4096)) !== false) + { + $Fields = preg_split("/".IMAGE_MAP_DELIMITER."/",str_replace(array(chr(10),chr(13)),"",$Buffer)); + $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]); + } + fclose($Handle); + + foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $TempArray[$Key][4] = $Values[$ID]; } $ID++; } } + + $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w'); + foreach($TempArray as $Key => $Settings) + { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); } + fclose($Handle); + } + } + } + + /* Dump the image map */ + function dumpImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp") + { + $this->ImageMapIndex = $Name; + $this->ImageMapStorageMode = $StorageMode; + + if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION ) + { + if(!isset($_SESSION)) { session_start(); } + if ( $_SESSION[$Name] != NULL ) + { + foreach($_SESSION[$Name] as $Key => $Params) + { echo $Params[0].IMAGE_MAP_DELIMITER.$Params[1].IMAGE_MAP_DELIMITER.$Params[2].IMAGE_MAP_DELIMITER.$Params[3].IMAGE_MAP_DELIMITER.$Params[4]."\r\n"; } + } + } + elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE ) + { + if (file_exists($StorageFolder."/".$UniqueID.".map")) + { + $Handle = @fopen($StorageFolder."/".$UniqueID.".map", "r"); + if ($Handle) { while (($Buffer = fgets($Handle, 4096)) !== false) { echo $Buffer; } } + fclose($Handle); + + if ( $this->ImageMapAutoDelete ) { unlink($StorageFolder."/".$UniqueID.".map"); } + } + } + + /* When the image map is returned to the client, the script ends */ + exit(); + } + + /* Return the HTML converted color from the RGB composite values */ + function toHTMLColor($R,$G,$B) + { + $R=intval($R); $G=intval($G); $B=intval($B); + $R=dechex($R<0?0:($R>255?255:$R)); $G=dechex($G<0?0:($G>255?255:$G));$B=dechex($B<0?0:($B>255?255:$B)); + $Color="#".(strlen($R) < 2?'0':'').$R; $Color.=(strlen($G) < 2?'0':'').$G; $Color.= (strlen($B) < 2?'0':'').$B; + return($Color); + } + + /* Reverse an array of points */ + function reversePlots($Plots) + { + $Result = ""; + for($i=count($Plots)-2;$i>=0;$i=$i-2) { $Result[] = $Plots[$i]; $Result[] = $Plots[$i+1]; } + return($Result); + } + + /* Mirror Effect */ + function drawAreaMirror($X,$Y,$Width,$Height,$Format="") + { + $StartAlpha = isset($Format["StartAlpha"]) ? $Format["StartAlpha"] : 80; + $EndAlpha = isset($Format["EndAlpha"]) ? $Format["EndAlpha"] : 0; + + $AlphaStep = ($StartAlpha-$EndAlpha)/$Height; + + $Picture = imagecreatetruecolor($this->XSize,$this->YSize); + imagecopy($Picture,$this->Picture,0,0,0,0,$this->XSize,$this->YSize); + + for($i=1;$i<=$Height;$i++) + { + if ( $Y+($i-1) < $this->YSize && $Y-$i > 0 ) { imagecopymerge($Picture,$this->Picture,$X,$Y+($i-1),$X,$Y-$i,$Width,1,$StartAlpha-$AlphaStep*$i); } + } + + imagecopy($this->Picture,$Picture,0,0,0,0,$this->XSize,$this->YSize); + } + } +?> \ No newline at end of file diff --git a/pChart/pIndicator.class.php b/pChart/pIndicator.class.php new file mode 100644 index 0000000..5112416 --- /dev/null +++ b/pChart/pIndicator.class.php @@ -0,0 +1,241 @@ +<?php + /* + pIndicator - class to draw indicators + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("INDICATOR_CAPTION_DEFAULT" , 700001); + define("INDICATOR_CAPTION_EXTENDED" , 700002); + + define("INDICATOR_CAPTION_INSIDE" , 700011); + define("INDICATOR_CAPTION_BOTTOM" , 700012); + + define("INDICATOR_VALUE_BUBBLE" , 700021); + define("INDICATOR_VALUE_LABEL" , 700022); + + /* pIndicator class definition */ + class pIndicator + { + var $pChartObject; + + /* Class creator */ + function pIndicator($pChartObject) + { + $this->pChartObject = $pChartObject; + } + + /* Draw an indicator */ + function draw($X,$Y,$Width,$Height,$Format="") + { + $Values = isset($Format["Values"]) ? $Format["Values"] : VOID; + $IndicatorSections = isset($Format["IndicatorSections"]) ? $Format["IndicatorSections"] : NULL; + $ValueDisplay = isset($Format["ValueDisplay"]) ? $Format["ValueDisplay"] : INDICATOR_VALUE_BUBBLE; + $SectionsMargin = isset($Format["SectionsMargin"]) ? $Format["SectionsMargin"] : 4; + $DrawLeftHead = isset($Format["DrawLeftHead"]) ? $Format["DrawLeftHead"] : TRUE; + $DrawRightHead = isset($Format["DrawRightHead"]) ? $Format["DrawRightHead"] : TRUE; + $HeadSize = isset($Format["HeadSize"]) ? $Format["HeadSize"] : floor($Height/4); + $TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 4; + $CaptionLayout = isset($Format["CaptionLayout"]) ? $Format["CaptionLayout"] : INDICATOR_CAPTION_EXTENDED; + $CaptionPosition = isset($Format["CaptionPosition"]) ? $Format["CaptionPosition"] : INDICATOR_CAPTION_INSIDE; + $CaptionColorFactor = isset($Format["CaptionColorFactor"]) ? $Format["CaptionColorFactor"] : NULL; + $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255; + $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255; + $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255; + $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100; + $SubCaptionColorFactor = isset($Format["SubCaptionColorFactor"]) ? $Format["SubCaptionColorFactor"] : NULL; + $SubCaptionR = isset($Format["SubCaptionR"]) ? $Format["SubCaptionR"] : 50; + $SubCaptionG = isset($Format["SubCaptionG"]) ? $Format["SubCaptionG"] : 50; + $SubCaptionB = isset($Format["SubCaptionB"]) ? $Format["SubCaptionB"] : 50; + $SubCaptionAlpha = isset($Format["SubCaptionAlpha"]) ? $Format["SubCaptionAlpha"] : 100; + $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName; + $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize; + $CaptionFontName = isset($Format["CaptionFontName"]) ? $Format["CaptionFontName"] : $this->pChartObject->FontName; + $CaptionFontSize = isset($Format["CaptionFontSize"]) ? $Format["CaptionFontSize"] : $this->pChartObject->FontSize; + $Unit = isset($Format["Unit"]) ? $Format["Unit"] : ""; + + /* Convert the Values to display to an array if needed */ + if ( !is_array($Values) ) { $Value = $Values; $Values = ""; $Values[] = $Value; } + + /* No section, let's die */ + if ( $IndicatorSections == NULL ) { return(0); } + + /* Determine indicator visual configuration */ + $OverallMin = $IndicatorSections[0]["End"]; $OverallMax = $IndicatorSections[0]["Start"]; + foreach ($IndicatorSections as $Key => $Settings) + { + if ( $Settings["End"] > $OverallMax ) { $OverallMax = $Settings["End"]; } + if ( $Settings["Start"] < $OverallMin ) { $OverallMin = $Settings["Start"]; } + } + $RealWidth = $Width - (count($IndicatorSections)-1)*$SectionsMargin; + $XScale = $RealWidth / ($OverallMax-$OverallMin); + + $X1 = $X; $ValuesPos = ""; + foreach ($IndicatorSections as $Key => $Settings) + { + $Color = array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"]); + $Caption = $Settings["Caption"]; + $SubCaption = $Settings["Start"]." - ".$Settings["End"]; + + $X2 = $X1 + ($Settings["End"] - $Settings["Start"]) * $XScale; + + if ( $Key == 0 && $DrawLeftHead ) + { + $Poly = ""; $Poly[] = $X1-1; $Poly[] = $Y; $Poly[] = $X1-1; $Poly[] = $Y+$Height; $Poly[] = $X1-1-$HeadSize; $Poly[] = $Y+($Height/2); + $this->pChartObject->drawPolygon($Poly,$Color); + $this->pChartObject->drawLine($X1-2,$Y,$X1-2-$HeadSize,$Y+($Height/2),$Color); + $this->pChartObject->drawLine($X1-2,$Y+$Height,$X1-2-$HeadSize,$Y+($Height/2),$Color); + } + + /* Determine the position of the breaks */ + $Break = ""; + foreach($Values as $iKey => $Value) + { + if ( $Value >= $Settings["Start"] && $Value <= $Settings["End"] ) + { + $XBreak = $X1 + ($Value - $Settings["Start"]) * $XScale; + $ValuesPos[$Value] = $XBreak; + $Break[] = floor($XBreak); + } + } + + if ( $ValueDisplay == INDICATOR_VALUE_LABEL ) + { + if ( $Break == "" ) + $this->pChartObject->drawFilledRectangle($X1,$Y,$X2,$Y+$Height,$Color); + else + { + sort($Break); + $Poly = ""; $Poly[] = $X1; $Poly[] = $Y; $LastPointWritten = FALSE; + foreach($Break as $iKey => $Value) + { + if ( $Value-5 >= $X1 ) + { $Poly[] = $Value-5; $Poly[] = $Y; } + elseif ($X1 - ($Value-5) > 0 ) + { + $Offset = $X1 - ($Value-5); + $Poly = ""; $Poly[] = $X1; $Poly[] = $Y + $Offset; + } + + $Poly[] = $Value; $Poly[] = $Y+5; + + if ( $Value+5 <= $X2 ) + { $Poly[] = $Value+5; $Poly[] = $Y; } + elseif (($Value+5) > $X2 ) + { + $Offset = ($Value+5) - $X2; + $Poly[] = $X2; $Poly[] = $Y + $Offset; + $LastPointWritten = TRUE; + } + + } + if ( !$LastPointWritten ) { $Poly[] = $X2; $Poly[] = $Y; } + $Poly[] = $X2; $Poly[] = $Y+$Height; + $Poly[] = $X1; $Poly[] = $Y+$Height; + + $this->pChartObject->drawPolygon($Poly,$Color); + } + } + else + $this->pChartObject->drawFilledRectangle($X1,$Y,$X2,$Y+$Height,$Color); + + if ( $Key == count($IndicatorSections)-1 && $DrawRightHead ) + { + $Poly = ""; $Poly[] = $X2+1; $Poly[] = $Y; $Poly[] = $X2+1; $Poly[] = $Y+$Height; $Poly[] = $X2+1+$HeadSize; $Poly[] = $Y+($Height/2); + $this->pChartObject->drawPolygon($Poly,$Color); + $this->pChartObject->drawLine($X2+1,$Y,$X2+1+$HeadSize,$Y+($Height/2),$Color); + $this->pChartObject->drawLine($X2+1,$Y+$Height,$X2+1+$HeadSize,$Y+($Height/2),$Color); + } + + if ( $CaptionPosition == INDICATOR_CAPTION_INSIDE ) + { + $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$Caption); + $YOffset = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding; + + if ( $CaptionLayout == INDICATOR_CAPTION_EXTENDED ) + { + $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$SubCaption); + $YOffset = $YOffset + ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding*2; + } + + $XOffset = $TextPadding; + } + else + { $YOffset = 0; $XOffset = 0; } + + if ( $CaptionColorFactor == NULL ) + { $CaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha); } + else + { $CaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$Settings["R"]+$CaptionColorFactor,"G"=>$Settings["G"]+$CaptionColorFactor,"B"=>$Settings["B"]+$CaptionColorFactor); } + + if ( $SubCaptionColorFactor == NULL ) + $SubCaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$SubCaptionR,"G"=>$SubCaptionG,"B"=>$SubCaptionB,"Alpha"=>$SubCaptionAlpha); + else + $SubCaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$Settings["R"]+$SubCaptionColorFactor,"G"=>$Settings["G"]+$SubCaptionColorFactor,"B"=>$Settings["B"]+$SubCaptionColorFactor); + + $RestoreShadow = $this->pChartObject->Shadow; + $this->pChartObject->Shadow = FALSE; + + if ( $CaptionLayout == INDICATOR_CAPTION_DEFAULT ) + $this->pChartObject->drawText($X1,$Y+$Height+$TextPadding,$Caption,$CaptionColor); + elseif ( $CaptionLayout == INDICATOR_CAPTION_EXTENDED ) + { + $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$Caption); + $CaptionHeight = $TxtPos[0]["Y"] - $TxtPos[2]["Y"]; + + $this->pChartObject->drawText($X1+$XOffset,$Y+$Height-$YOffset+$TextPadding,$Caption,$CaptionColor); + $this->pChartObject->drawText($X1+$XOffset,$Y+$Height-$YOffset+$CaptionHeight+$TextPadding*2,$SubCaption,$SubCaptionColor); + } + + $this->pChartObject->Shadow = $RestoreShadow; + + $X1 = $X2 + $SectionsMargin; + } + + $RestoreShadow = $this->pChartObject->Shadow; + $this->pChartObject->Shadow = FALSE; + + foreach($Values as $Key => $Value) + { + if ( $Value >= $OverallMin && $Value <= $OverallMax ) + { + foreach ($IndicatorSections as $Key => $Settings) + { + if ( $Value >= $Settings["Start"] && $Value <= $Settings["End"] ) + { + $X1 = $ValuesPos[$Value]; //$X + $Key*$SectionsMargin + ($Value - $OverallMin) * $XScale; + + if ( $ValueDisplay == INDICATOR_VALUE_BUBBLE ) + { + $TxtPos = $this->pChartObject->getTextBox($X1,$Y,$ValueFontName,$ValueFontSize,0,$Value.$Unit); + $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $TextPadding*4)/2); + + $this->pChartObject->drawFilledCircle($X1,$Y,$Radius+4,array("R"=>$Settings["R"]+20,"G"=>$Settings["G"]+20,"B"=>$Settings["B"]+20)); + $this->pChartObject->drawFilledCircle($X1,$Y,$Radius,array("R"=>255,"G"=>255,"B"=>255)); + + $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize); + $this->pChartObject->drawText($X1-1,$Y-1,$Value.$Unit,$TextSettings); + } + elseif( $ValueDisplay == INDICATOR_VALUE_LABEL ) + { + $Caption = ""; + $Caption[] = array("Format"=>array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"],"Alpha"=>100),"Caption"=>$Value.$Unit); + $this->pChartObject->drawLabelBox(floor($X1),floor($Y)+2,"Value - ".$Settings["Caption"],$Caption); + } + } + $X1 = $X2 + $SectionsMargin; + } + } + } + $this->pChartObject->Shadow = $RestoreShadow; + } + } +?> \ No newline at end of file diff --git a/pChart/pPie.class.php b/pChart/pPie.class.php new file mode 100644 index 0000000..f651f58 --- /dev/null +++ b/pChart/pPie.class.php @@ -0,0 +1,1500 @@ +<?php + /* + pPie - class to draw pie charts + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + /* Class return codes */ + define("PIE_NO_ABSCISSA" , 140001); + define("PIE_NO_DATASERIE" , 140002); + define("PIE_SUMISNULL" , 140003); + define("PIE_RENDERED" , 140000); + + define("PIE_LABEL_COLOR_AUTO" , 140010); + define("PIE_LABEL_COLOR_MANUAL", 140011); + + define("PIE_VALUE_NATURAL" , 140020); + define("PIE_VALUE_PERCENTAGE" , 140021); + + define("PIE_VALUE_INSIDE" , 140030); + define("PIE_VALUE_OUTSIDE" , 140031); + + /* pPie class definition */ + class pPie + { + var $pChartObject; + var $pDataObject; + var $LabelPos = "" ; + + /* Class creator */ + function pPie($Object,$pDataObject) + { + /* Cache the pChart object reference */ + $this->pChartObject = $Object; + + /* Cache the pData object reference */ + $this->pDataObject = $pDataObject; + } + + /* Draw a pie chart */ + function draw2DPie($X,$Y,$Format="") + { + $Radius = isset($Format["Radius"]) ? $Format["Radius"] : 60; + $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0; + $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 0; + $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 0; + $SecondPass = isset($Format["SecondPass"]) ? $Format["SecondPass"] : TRUE; + $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255; + $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE; + $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE; + $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE; + $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL; + $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0; + $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0; + $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0; + $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100; + $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; + $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE; + $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 15; + $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : ""; + $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255; + $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255; + $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255; + $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + /* Data Processing */ + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + /* Do we have an abscissa serie defined? */ + if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); } + + /* Try to find the data serie */ + $DataSerie = ""; + foreach ($Data["Series"] as $SerieName => $SerieData) + { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } } + + /* Do we have data to compute? */ + if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); } + + /* Remove unused data */ + list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]); + + /* Compute the pie sum */ + $SerieSum = $this->pDataObject->getSum($DataSerie); + + /* Do we have data to draw? */ + if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); } + + /* Dump the real number of data to draw */ + $Values = ""; + foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value) + { if ($Value != 0) { $Values[] = $Value; } } + + /* Compute the wasted angular space between series */ + if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; } + + /* Compute the scale */ + $ScaleFactor = (360 - $WastedAngular) / $SerieSum; + + $RestoreShadow = $this->pChartObject->Shadow; + if ( $this->pChartObject->Shadow ) + { + $this->pChartObject->Shadow = FALSE; + + $ShadowFormat = $Format; $ShadowFormat["Shadow"] = TRUE; + $this->draw2DPie($X+$this->pChartObject->ShadowX,$Y+$this->pChartObject->ShadowY,$ShadowFormat); + } + + /* Draw the polygon pie elements */ + $Step = 360 / (2 * PI * $Radius); + $Offset = 0; $ID = 0; + foreach($Values as $Key => $Value) + { + if ( $Shadow ) + $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa); + else + { + if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); } + $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]); + } + + if ( !$SecondPass && !$Shadow ) + { + if ( !$Border ) + $Settings["Surrounding"] = 10; + else + { $Settings["BorderR"] = $BorderR; $Settings["BorderG"] = $BorderG; $Settings["BorderB"] = $BorderB; } + } + + $Plots = ""; + $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; } + + $Angle = ($EndAngle - $Offset)/2 + $Offset; + if ($DataGapAngle == 0) + { $X0 = $X; $Y0 = $Y; } + else + { + $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X; + $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius + $Y; + } + + $Plots[] = $X0; $Plots[] = $Y0; + + + for($i=$Offset;$i<=$EndAngle;$i=$i+$Step) + { + $Xc = cos(($i-90)*PI/180) * $Radius + $X; + $Yc = sin(($i-90)*PI/180) * $Radius + $Y; + + if ( $SecondPass && ( $i<90 )) { $Yc++; } + if ( $SecondPass && ( $i>180 && $i<270 )) { $Xc++; } + if ( $SecondPass && ( $i>=270 )) { $Xc++; $Yc++; } + + $Plots[] = $Xc; $Plots[] = $Yc; + } + + $this->pChartObject->drawPolygon($Plots,$Settings); + if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); } + + if ( $DrawLabels && !$Shadow && !$SecondPass ) + { + if ( $LabelColor == PIE_LABEL_COLOR_AUTO ) + { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);} + else + { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); } + + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $Xc = cos(($Angle-90)*PI/180) * $Radius + $X; + $Yc = sin(($Angle-90)*PI/180) * $Radius + $Y; + + $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key]; + + if ( $LabelStacked ) + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius); + else + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE); + } + + $Offset = $i + $DataGapAngle; $ID++; + } + + /* Second pass to smooth the angles */ + if ( $SecondPass ) + { + $Step = 360 / (2 * PI * $Radius); + $Offset = 0; $ID = 0; + foreach($Values as $Key => $Value) + { + $FirstPoint = TRUE; + if ( $Shadow ) + $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa); + else + { + if ( $Border ) + $Settings = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB); + else + $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]); + } + + $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; } + + if ($DataGapAngle == 0) + { $X0 = $X; $Y0 = $Y; } + else + { + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X; + $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius + $Y; + } + $Plots[] = $X0; $Plots[] = $Y0; + + for($i=$Offset;$i<=$EndAngle;$i=$i+$Step) + { + $Xc = cos(($i-90)*PI/180) * $Radius + $X; + $Yc = sin(($i-90)*PI/180) * $Radius + $Y; + + if ( $FirstPoint ) { $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); } { $FirstPoint = FALSE; } + + $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings); + } + $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); + + if ( $DrawLabels && !$Shadow ) + { + if ( $LabelColor == PIE_LABEL_COLOR_AUTO ) + { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);} + else + { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); } + + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $Xc = cos(($Angle-90)*PI/180) * $Radius + $X; + $Yc = sin(($Angle-90)*PI/180) * $Radius + $Y; + + $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key]; + + if ( $LabelStacked ) + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius); + else + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE); + } + + $Offset = $i + $DataGapAngle; $ID++; + } + } + + if ( $WriteValues != NULL && !$Shadow ) + { + $Step = 360 / (2 * PI * $Radius); + $Offset = 0; $ID = count($Values)-1; + $Settings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB,"Alpha"=>$ValueAlpha); + foreach($Values as $Key => $Value) + { + $EndAngle = ($Value*$ScaleFactor) + $Offset; if ( (int)$EndAngle > 360 ) { $EndAngle = 0; } + $Angle = ($EndAngle - $Offset)/2 + $Offset; + + if ( $ValuePosition == PIE_VALUE_OUTSIDE ) + { + $Xc = cos(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $X; + $Yc = sin(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $Y; + } + else + { + $Xc = cos(($Angle-90)*PI/180) * ($Radius)/2 + $X; + $Yc = sin(($Angle-90)*PI/180) * ($Radius)/2 + $Y; + } + + if ( $WriteValues == PIE_VALUE_PERCENTAGE ) + $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%"; + elseif ( $WriteValues == PIE_VALUE_NATURAL ) + $Display = $Value.$ValueSuffix; + + $this->pChartObject->drawText($Xc,$Yc,$Display,$Settings); + + $Offset = $EndAngle + $DataGapAngle; $ID--; + } + } + + if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); } + + $this->pChartObject->Shadow = $RestoreShadow; + + return(PIE_RENDERED); + } + + /* Draw a 3D pie chart */ + function draw3DPie($X,$Y,$Format="") + { + /* Rendering layout */ + $Radius = isset($Format["Radius"]) ? $Format["Radius"] : 80; + $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0; + $SkewFactor = isset($Format["SkewFactor"]) ? $Format["SkewFactor"] : .5; + $SliceHeight = isset($Format["SliceHeight"]) ? $Format["SliceHeight"] : 20; + $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 0; + $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 0; + $SecondPass = isset($Format["SecondPass"]) ? $Format["SecondPass"] : TRUE; + $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE; + $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE; + $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE; + $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE; + $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL; + $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0; + $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0; + $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0; + $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100; + $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; //PIE_VALUE_PERCENTAGE + $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_INSIDE; + $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 15; + $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : ""; + $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255; + $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255; + $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255; + $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + /* Error correction for overlaying rounded corners */ + if ( $SkewFactor < .5 ) { $SkewFactor = .5; } + + /* Data Processing */ + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + /* Do we have an abscissa serie defined? */ + if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); } + + /* Try to find the data serie */ + $DataSerie = ""; + foreach ($Data["Series"] as $SerieName => $SerieData) + { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } } + + /* Do we have data to compute? */ + if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); } + + /* Remove unused data */ + list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]); + + /* Compute the pie sum */ + $SerieSum = $this->pDataObject->getSum($DataSerie); + + /* Do we have data to draw? */ + if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); } + + /* Dump the real number of data to draw */ + $Values = ""; + foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value) + { if ($Value != 0) { $Values[] = $Value; } } + + /* Compute the wasted angular space between series */ + if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; } + + /* Compute the scale */ + $ScaleFactor = (360 - $WastedAngular) / $SerieSum; + + $RestoreShadow = $this->pChartObject->Shadow; + if ( $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; } + + /* Draw the polygon pie elements */ + $Step = 360 / (2 * PI * $Radius); + $Offset = 360; $ID = count($Values)-1; + $Values = array_reverse($Values); + $Slice = 0; $Slices = ""; $SliceColors = ""; $Visible = ""; $SliceAngle = ""; + foreach($Values as $Key => $Value) + { + if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); } + $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]); + + $SliceColors[$Slice] = $Settings; + + $StartAngle = $Offset; + $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; } + + if ( $StartAngle > 180 ) { $Visible[$Slice]["Start"] = TRUE; } else { $Visible[$Slice]["Start"] = TRUE; } + if ( $EndAngle < 180 ) { $Visible[$Slice]["End"] = FALSE; } else { $Visible[$Slice]["End"] = TRUE; } + + if ($DataGapAngle == 0) + { $X0 = $X; $Y0 = $Y; } + else + { + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X; + $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius*$SkewFactor + $Y; + } + $Slices[$Slice][] = $X0; $Slices[$Slice][] = $Y0; $SliceAngle[$Slice][] = 0; + + for($i=$Offset;$i>=$EndAngle;$i=$i-$Step) + { + $Xc = cos(($i-90)*PI/180) * $Radius + $X; + $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y; + + if ( ($SecondPass || $RestoreShadow ) && ( $i<90 )) { $Yc++; } + if ( ($SecondPass || $RestoreShadow ) && ( $i>90 && $i<180 )) { $Xc++; } + if ( ($SecondPass || $RestoreShadow ) && ( $i>180 && $i<270 )) { $Xc++; } + if ( ($SecondPass || $RestoreShadow ) && ( $i>=270 )) { $Xc++; $Yc++; } + + $Slices[$Slice][] = $Xc; $Slices[$Slice][] = $Yc; $SliceAngle[$Slice][] = $i; + } + + $Offset = $i - $DataGapAngle; $ID--; $Slice++; + } + + /* Draw the bottom shadow if needed */ + if ( $RestoreShadow && ($this->pChartObject->ShadowX != 0 || $this->pChartObject->ShadowY !=0 )) + { + foreach($Slices as $SliceID => $Plots) + { + $ShadowPie = ""; + for($i=0;$i<count($Plots);$i=$i+2) + { $ShadowPie[] = $Plots[$i]+$this->pChartObject->ShadowX; $ShadowPie[] = $Plots[$i+1]+$this->pChartObject->ShadowY; } + + $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa,"NoBorder"=>TRUE); + $this->pChartObject->drawPolygon($ShadowPie,$Settings); + } + + $Step = 360 / (2 * PI * $Radius); + $Offset = 360; + foreach($Values as $Key => $Value) + { + $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; } + + for($i=$Offset;$i>=$EndAngle;$i=$i-$Step) + { + $Xc = cos(($i-90)*PI/180) * $Radius + $X + $this->pChartObject->ShadowX; + $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y + $this->pChartObject->ShadowY; + + $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings); + } + + $Offset = $i - $DataGapAngle; $ID--; + } + } + + /* Draw the bottom pie splice */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $this->pChartObject->drawPolygon($Plots,$Settings); + + if ( $SecondPass ) + { + $Settings = $SliceColors[$SliceID]; + if ( $Border ) + { $Settings["R"]+= 30; $Settings["G"]+= 30; $Settings["B"]+= 30;; } + + if ( isset($SliceAngle[$SliceID][1]) ) /* Empty error handling */ + { + $Angle = $SliceAngle[$SliceID][1]; + $Xc = cos(($Angle-90)*PI/180) * $Radius + $X; + $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y; + $this->pChartObject->drawLine($Plots[0],$Plots[1],$Xc,$Yc,$Settings); + + $Angle = $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1]; + $Xc = cos(($Angle-90)*PI/180) * $Radius + $X; + $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y; + $this->pChartObject->drawLine($Plots[0],$Plots[1],$Xc,$Yc,$Settings); + } + } + } + + /* Draw the two vertical edges */ + $Slices = array_reverse($Slices); + $SliceColors = array_reverse($SliceColors); + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; + $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE; + + if ( $Visible[$SliceID]["Start"] && isset($Plots[2])) /* Empty error handling */ + { + $this->pChartObject->drawLine($Plots[2],$Plots[3],$Plots[2],$Plots[3]- $SliceHeight,array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"])); + $Border = ""; + $Border[] = $Plots[0]; $Border[] = $Plots[1]; $Border[] = $Plots[0]; $Border[] = $Plots[1] - $SliceHeight; + $Border[] = $Plots[2]; $Border[] = $Plots[3] - $SliceHeight; $Border[] = $Plots[2]; $Border[] = $Plots[3]; + $this->pChartObject->drawPolygon($Border,$Settings); + } + } + + $Slices = array_reverse($Slices); + $SliceColors = array_reverse($SliceColors); + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; + $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE; + if ( $Visible[$SliceID]["End"] ) + { + $this->pChartObject->drawLine($Plots[count($Plots)-2],$Plots[count($Plots)-1],$Plots[count($Plots)-2],$Plots[count($Plots)-1]- $SliceHeight,array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"])); + + $Border = ""; + $Border[] = $Plots[0]; $Border[] = $Plots[1]; $Border[] = $Plots[0]; $Border[] = $Plots[1] - $SliceHeight; + $Border[] = $Plots[count($Plots)-2]; $Border[] = $Plots[count($Plots)-1] - $SliceHeight; $Border[] = $Plots[count($Plots)-2]; $Border[] = $Plots[count($Plots)-1]; + $this->pChartObject->drawPolygon($Border,$Settings); + } + } + + /* Draw the rounded edges */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; + $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE; + + for ($j=2;$j<count($Plots)-2;$j=$j+2) + { + $Angle = $SliceAngle[$SliceID][$j/2]; + if ( $Angle < 270 && $Angle > 90 ) + { + $Border = ""; + $Border[] = $Plots[$j]; $Border[] = $Plots[$j+1]; + $Border[] = $Plots[$j+2]; $Border[] = $Plots[$j+3]; + $Border[] = $Plots[$j+2]; $Border[] = $Plots[$j+3] - $SliceHeight; + $Border[] = $Plots[$j]; $Border[] = $Plots[$j+1] - $SliceHeight; + $this->pChartObject->drawPolygon($Border,$Settings); + } + } + + if ( $SecondPass ) + { + $Settings = $SliceColors[$SliceID]; + if ( $Border ) + { $Settings["R"]+= 30; $Settings["G"]+= 30; $Settings["B"]+= 30; } + + if ( isset($SliceAngle[$SliceID][1]) ) /* Empty error handling */ + { + $Angle = $SliceAngle[$SliceID][1]; + if ( $Angle < 270 && $Angle > 90 ) + { + $Xc = cos(($Angle-90)*PI/180) * $Radius + $X; + $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y; + $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings); + } + } + + $Angle = $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1]; + if ( $Angle < 270 && $Angle > 90 ) + { + $Xc = cos(($Angle-90)*PI/180) * $Radius + $X; + $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y; + $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings); + } + + if ( isset($SliceAngle[$SliceID][1]) && $SliceAngle[$SliceID][1] > 270 && $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1] < 270 ) + { + $Xc = cos((270-90)*PI/180) * $Radius + $X; + $Yc = sin((270-90)*PI/180) * $Radius*$SkewFactor + $Y; + $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings); + } + + if ( isset($SliceAngle[$SliceID][1]) && $SliceAngle[$SliceID][1] > 90 && $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1] < 90 ) + { + $Xc = cos((0)*PI/180) * $Radius + $X; + $Yc = sin((0)*PI/180) * $Radius*$SkewFactor + $Y; + $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings); + } + + } + } + + /* Draw the top splice */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; + $Settings["R"]+= 20; $Settings["G"]+= 20; $Settings["B"]+= 20; + + $Top = ""; + for($j=0;$j<count($Plots);$j=$j+2) { $Top[] = $Plots[$j]; $Top[] = $Plots[$j+1]- $SliceHeight; } + $this->pChartObject->drawPolygon($Top,$Settings); + + if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Top),$this->pChartObject->toHTMLColor($Settings["R"],$Settings["G"],$Settings["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][count($Slices)-$SliceID-1],$Values[$SliceID]); } + } + + + /* Second pass to smooth the angles */ + if ( $SecondPass ) + { + $Step = 360 / (2 * PI * $Radius); + $Offset = 360; $ID = count($Values)-1; + foreach($Values as $Key => $Value) + { + $FirstPoint = TRUE; + if ( $Shadow ) + $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa); + else + { + if ( $Border ) + { $Settings = array("R"=>$Palette[$ID]["R"]+30,"G"=>$Palette[$ID]["G"]+30,"B"=>$Palette[$ID]["B"]+30,"Alpha"=>$Palette[$ID]["Alpha"]); } + else + $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]); + } + + $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; } + + if ($DataGapAngle == 0) + { $X0 = $X; $Y0 = $Y- $SliceHeight; } + else + { + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X; + $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius*$SkewFactor + $Y - $SliceHeight; + } + $Plots[] = $X0; $Plots[] = $Y0; + + for($i=$Offset;$i>=$EndAngle;$i=$i-$Step) + { + $Xc = cos(($i-90)*PI/180) * $Radius + $X; + $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y - $SliceHeight; + + if ( $FirstPoint ) { $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); } { $FirstPoint = FALSE; } + + $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings); + if ($i < 270 && $i > 90 ) { $this->pChartObject->drawAntialiasPixel($Xc,$Yc+$SliceHeight,$Settings); } + } + $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); + + $Offset = $i - $DataGapAngle; $ID--; + } + } + + if ( $WriteValues != NULL ) + { + $Step = 360 / (2 * PI * $Radius); + $Offset = 360; $ID = count($Values)-1; + $Settings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB,"Alpha"=>$ValueAlpha); + foreach($Values as $Key => $Value) + { + $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; } + + $Angle = ($EndAngle - $Offset)/2 + $Offset; + + if ( $ValuePosition == PIE_VALUE_OUTSIDE ) + { + $Xc = cos(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $X; + $Yc = sin(($Angle-90)*PI/180) * (($Radius*$SkewFactor)+$ValuePadding) + $Y - $SliceHeight; + } + else + { + $Xc = cos(($Angle-90)*PI/180) * ($Radius)/2 + $X; + $Yc = sin(($Angle-90)*PI/180) * ($Radius*$SkewFactor)/2 + $Y - $SliceHeight; + } + + if ( $WriteValues == PIE_VALUE_PERCENTAGE ) + $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%"; + elseif ( $WriteValues == PIE_VALUE_NATURAL ) + $Display = $Value.$ValueSuffix; + + $this->pChartObject->drawText($Xc,$Yc,$Display,$Settings); + + $Offset = $EndAngle - $DataGapAngle; $ID--; + } + } + + if ( $DrawLabels ) + { + $Step = 360 / (2 * PI * $Radius); + $Offset = 360; $ID = count($Values)-1; + foreach($Values as $Key => $Value) + { + if ( $LabelColor == PIE_LABEL_COLOR_AUTO ) + { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);} + else + { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); } + + $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; } + + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $Xc = cos(($Angle-90)*PI/180) * $Radius + $X; + $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y - $SliceHeight; + + if ( isset($Data["Series"][$Data["Abscissa"]]["Data"][$ID]) ) + { + $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$ID]; + + if ( $LabelStacked ) + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius,TRUE); + else + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE); + } + + $Offset = $EndAngle - $DataGapAngle; $ID--; + } + } + + if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); } + + $this->pChartObject->Shadow = $RestoreShadow; + + return(PIE_RENDERED); + } + + /* Draw the legend of pie chart */ + function drawPieLegend($X,$Y,$Format="") + { + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize; + $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->pChartObject->FontColorR; + $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->pChartObject->FontColorG; + $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->pChartObject->FontColorB; + $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5; + $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5; + $R = isset($Format["R"]) ? $Format["R"] : 200; + $G = isset($Format["G"]) ? $Format["G"] : 200; + $B = isset($Format["B"]) ? $Format["B"] : 200; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND; + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL; + + if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; } + + $YStep = max($this->pChartObject->FontSize,$BoxSize) + 5; + $XStep = $BoxSize + 5; + + /* Data Processing */ + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + /* Do we have an abscissa serie defined? */ + if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); } + + $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X; + foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $Value) + { + $BoxArray = $this->pChartObject->getTextBox($vX+$BoxSize+4,$vY+$BoxSize/2,$FontName,$FontSize,0,$Value); + + if ( $Mode == LEGEND_VERTICAL ) + { + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$BoxSize/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$BoxSize/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$BoxSize/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$BoxSize/2; } + $vY=$vY+$YStep; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$BoxSize/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$BoxSize/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$BoxSize/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$BoxSize/2; } + $vX=$Boundaries["R"]+$XStep; + } + } + $vY=$vY-$YStep; $vX=$vX-$XStep; + + $TopOffset = $Y - $Boundaries["T"]; + if ( $Boundaries["B"]-($vY+$BoxSize) < $TopOffset ) { $Boundaries["B"] = $vY+$BoxSize+$TopOffset; } + + if ( $Style == LEGEND_ROUND ) + $this->pChartObject->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + elseif ( $Style == LEGEND_BOX ) + $this->pChartObject->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + + $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE; + foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $Value) + { + $R = $Palette[$Key]["R"]; $G = $Palette[$Key]["G"]; $B = $Palette[$Key]["B"]; + + $this->pChartObject->drawFilledRectangle($X+1,$Y+1,$X+$BoxSize+1,$Y+$BoxSize+1,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); + $this->pChartObject->drawFilledRectangle($X,$Y,$X+$BoxSize,$Y+$BoxSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20)); + if ( $Mode == LEGEND_VERTICAL ) + { + $this->pChartObject->drawText($X+$BoxSize+4,$Y+$BoxSize/2,$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontName"=>$FontName,"FontSize"=>$FontSize)); + $Y=$Y+$YStep; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + $BoxArray = $this->pChartObject->drawText($X+$BoxSize+4,$Y+$BoxSize/2,$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontName"=>$FontName,"FontSize"=>$FontSize)); + $X=$BoxArray[1]["X"]+2+$XStep; + } + } + + $this->Shadow = $RestoreShadow; + } + + /* Set the color of the specified slice */ + function setSliceColor($SliceID,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + + $this->pDataObject->Palette[$SliceID]["R"] = $R; + $this->pDataObject->Palette[$SliceID]["G"] = $G; + $this->pDataObject->Palette[$SliceID]["B"] = $B; + $this->pDataObject->Palette[$SliceID]["Alpha"] = $Alpha; + } + + /* Internally used compute the label positions */ + function writePieLabel($X,$Y,$Label,$Angle,$Settings,$Stacked,$Xc=0,$Yc=0,$Radius=0,$Reversed=FALSE) + { + $LabelOffset = 30; + $FontName = $this->pChartObject->FontName; + $FontSize = $this->pChartObject->FontSize; + + if ( !$Stacked ) + { + $Settings["Angle"] = 360-$Angle; + $Settings["Length"] = 25; + $Settings["Size"] = 8; + + $this->pChartObject->drawArrowLabel($X,$Y," ".$Label." ",$Settings); + } + else + { + $X2 = cos(deg2rad($Angle-90))*20+$X; + $Y2 = sin(deg2rad($Angle-90))*20+$Y; + + $TxtPos = $this->pChartObject->getTextBox($X,$Y,$FontName,$FontSize,0,$Label); + $Height = $TxtPos[0]["Y"] - $TxtPos[2]["Y"]; + $YTop = $Y2 - $Height/2 - 2; + $YBottom = $Y2 + $Height/2 + 2; + + if ( $this->LabelPos != "" ) + { + $Done = FALSE; + foreach($this->LabelPos as $Key => $Settings) + { + if ( !$Done ) + { + if ( $Angle <= 90 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"]))) + { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; } + if ( $Angle > 90 && $Angle <= 180 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"]))) + { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; } + if ( $Angle > 180 && $Angle <= 270 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"]))) + { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; } + if ( $Angle > 270 && $Angle <= 360 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"]))) + { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; } + } + } + } + + $LabelSettings = array("YTop"=>$YTop,"YBottom"=>$YBottom,"Label"=>$Label,"Angle"=>$Angle,"X1"=>$X,"Y1"=>$Y,"X2"=>$X2,"Y2"=>$Y2); + if ( $Angle <= 180 ) { $LabelSettings["X3"] = $Xc+$Radius+$LabelOffset; } + if ( $Angle > 180 ) { $LabelSettings["X3"] = $Xc-$Radius-$LabelOffset; } + $this->LabelPos[] = $LabelSettings; + } + } + + /* Internally used to shift label positions */ + function shift($StartAngle,$EndAngle,$Offset,$Reversed) + { + if ( $Reversed ) { $Offset = -$Offset; } + foreach($this->LabelPos as $Key => $Settings) + { + if ( $Settings["Angle"] > $StartAngle && $Settings["Angle"] <= $EndAngle ) { $this->LabelPos[$Key]["YTop"] = $Settings["YTop"] + $Offset; $this->LabelPos[$Key]["YBottom"] = $Settings["YBottom"] + $Offset; $this->LabelPos[$Key]["Y2"] = $Settings["Y2"] + $Offset; } + } + } + + /* Internally used to write the re-computed labels */ + function writeShiftedLabels() + { + if ( $this->LabelPos == "" ) { return(0); } + foreach($this->LabelPos as $Key => $Settings) + { + $X1 = $Settings["X1"]; $Y1 = $Settings["Y1"]; + $X2 = $Settings["X2"]; $Y2 = $Settings["Y2"]; + $X3 = $Settings["X3"]; + $Angle = $Settings["Angle"]; + $Label = $Settings["Label"]; + + $this->pChartObject->drawArrow($X2,$Y2,$X1,$Y1,array("Size"=>8)); + if ( $Angle <= 180 ) + { + $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2); + $this->pChartObject->drawText($X3+2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); + } + else + { + $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2); + $this->pChartObject->drawText($X3-2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); + } + } + } + + /* Draw a ring chart */ + function draw2DRing($X,$Y,$Format="") + { + $OuterRadius = isset($Format["Radius"]) ? $Format["Radius"] : 60; + $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0; + $InnerRadius = isset($Format["Radius"]) ? $Format["Radius"] : 30; + $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100; + $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE; + $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE; + $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE; + $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL; + $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0; + $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0; + $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0; + $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100; + $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; //PIE_VALUE_PERCENTAGE + $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 5; + $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE; + $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : ""; + $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255; + $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255; + $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255; + $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + /* Data Processing */ + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + /* Do we have an abscissa serie defined? */ + if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); } + + /* Try to find the data serie */ + $DataSerie = ""; + foreach ($Data["Series"] as $SerieName => $SerieData) + { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } } + + /* Do we have data to compute? */ + if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); } + + /* Remove unused data */ + list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]); + + /* Compute the pie sum */ + $SerieSum = $this->pDataObject->getSum($DataSerie); + + /* Do we have data to draw? */ + if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); } + + /* Dump the real number of data to draw */ + $Values = ""; + foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value) + { if ($Value != 0) { $Values[] = $Value; } } + + /* Compute the wasted angular space between series */ + if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = 0; } // count($Values) + + /* Compute the scale */ + $ScaleFactor = (360 - $WastedAngular) / $SerieSum; + + $RestoreShadow = $this->pChartObject->Shadow; + if ( $this->pChartObject->Shadow ) + { + $this->pChartObject->Shadow = FALSE; + + $ShadowFormat = $Format; $ShadowFormat["Shadow"] = TRUE; + $this->draw2DRing($X+$this->pChartObject->ShadowX,$Y+$this->pChartObject->ShadowY,$ShadowFormat); + } + + /* Draw the polygon pie elements */ + $Step = 360 / (2 * PI * $OuterRadius); + $Offset = 0; $ID = 0; + foreach($Values as $Key => $Value) + { + if ( $Shadow ) + { + $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa); + $BorderColor = $Settings; + } + else + { + if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); } + $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]); + + if ( $Border ) + $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha); + else + $BorderColor = $Settings; + } + + $Plots = ""; $Boundaries = ""; $AAPixels = ""; + $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; } + for($i=$Offset;$i<=$EndAngle;$i=$i+$Step) + { + $Xc = cos(($i-90)*PI/180) * $OuterRadius + $X; + $Yc = sin(($i-90)*PI/180) * $OuterRadius + $Y; + + if ( !isset($Boundaries[0]["X1"]) ) { $Boundaries[0]["X1"] = $Xc; $Boundaries[0]["Y1"] = $Yc; } + $AAPixels[] = array($Xc,$Yc); + + if ( $i<90 ) { $Yc++; } + if ( $i>180 && $i<270 ) { $Xc++; } + if ( $i>=270 ) { $Xc++; $Yc++; } + + $Plots[] = $Xc; $Plots[] = $Yc; + } + $Boundaries[1]["X1"] = $Xc; $Boundaries[1]["Y1"] = $Yc; + $Lasti = $EndAngle; + + for($i=$EndAngle;$i>=$Offset;$i=$i-$Step) + { + $Xc = cos(($i-90)*PI/180) * ($InnerRadius-1) + $X; + $Yc = sin(($i-90)*PI/180) * ($InnerRadius-1) + $Y; + + if ( !isset($Boundaries[1]["X2"]) ) { $Boundaries[1]["X2"] = $Xc; $Boundaries[1]["Y2"] = $Yc; } + $AAPixels[] = array($Xc,$Yc); + + $Xc = cos(($i-90)*PI/180) * $InnerRadius + $X; + $Yc = sin(($i-90)*PI/180) * $InnerRadius + $Y; + + if ( $i<90 ) { $Yc++; } + if ( $i>180 && $i<270 ) { $Xc++; } + if ( $i>=270 ) { $Xc++; $Yc++; } + + $Plots[] = $Xc; $Plots[] = $Yc; + } + $Boundaries[0]["X2"] = $Xc; $Boundaries[0]["Y2"] = $Yc; + + /* Draw the polygon */ + $this->pChartObject->drawPolygon($Plots,$Settings); + if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); } + + /* Smooth the edges using AA */ + foreach($AAPixels as $iKey => $Pos ) { $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$BorderColor); } + $this->pChartObject->drawLine($Boundaries[0]["X1"],$Boundaries[0]["Y1"],$Boundaries[0]["X2"],$Boundaries[0]["Y2"],$BorderColor); + $this->pChartObject->drawLine($Boundaries[1]["X1"],$Boundaries[1]["Y1"],$Boundaries[1]["X2"],$Boundaries[1]["Y2"],$BorderColor); + + if ( $DrawLabels && !$Shadow ) + { + if ( $LabelColor == PIE_LABEL_COLOR_AUTO ) + { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);} + else + { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); } + + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $Xc = cos(($Angle-90)*PI/180) * $OuterRadius + $X; + $Yc = sin(($Angle-90)*PI/180) * $OuterRadius + $Y; + + $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key]; + + if ( $LabelStacked ) + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius); + else + $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE); + } + + $Offset = $Lasti; $ID++; + } + + if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); } + + if ( $WriteValues && !$Shadow ) + { + $Step = 360 / (2 * PI * $OuterRadius); + $Offset = 0; + foreach($Values as $Key => $Value) + { + $EndAngle = $Offset+($Value*$ScaleFactor); + if ( $EndAngle > 360 ) { $EndAngle = 360; } + + $Angle = $Offset+($Value*$ScaleFactor)/2; + if ( $ValuePosition == PIE_VALUE_OUTSIDE ) + { + $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $X; + $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $Y; + if ( $Angle >=0 && $Angle <= 90 ) { $Align = TEXT_ALIGN_BOTTOMLEFT; } + if ( $Angle > 90 && $Angle <= 180 ) { $Align = TEXT_ALIGN_TOPLEFT; } + if ( $Angle > 180 && $Angle <= 270 ) { $Align = TEXT_ALIGN_TOPRIGHT; } + if ( $Angle > 270 ) { $Align = TEXT_ALIGN_BOTTOMRIGHT; } + } + else + { + $Xc = cos(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $X; + $Yc = sin(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $Y; + $Align = TEXT_ALIGN_MIDDLEMIDDLE; + } + + if ( $WriteValues == PIE_VALUE_PERCENTAGE ) + $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%"; + elseif ( $WriteValues == PIE_VALUE_NATURAL ) + $Display = $Value.$ValueSuffix; + else + $Label = ""; + + $this->pChartObject->drawText($Xc,$Yc,$Display,array("Align"=>$Align,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB)); + $Offset = $EndAngle; + } + } + + $this->pChartObject->Shadow = $RestoreShadow; + + return(PIE_RENDERED); + } + + /* Draw a 3D ring chart */ + function draw3DRing($X,$Y,$Format="") + { + $OuterRadius = isset($Format["OuterRadius"]) ? $Format["OuterRadius"] : 100; + $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0; + $InnerRadius = isset($Format["InnerRadius"]) ? $Format["InnerRadius"] : 30; + $SkewFactor = isset($Format["SkewFactor"]) ? $Format["SkewFactor"] : .6; + $SliceHeight = isset($Format["SliceHeight"]) ? $Format["SliceHeight"] : 10; + $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 10; + $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 10; + $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE; + $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE; + $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE; + $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE; + $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL; + $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0; + $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0; + $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0; + $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100; + $Cf = isset($Format["Cf"]) ? $Format["Cf"] : 20; + $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : PIE_VALUE_NATURAL; + $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : $SliceHeight + 15; + $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE; + $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : ""; + $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255; + $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255; + $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255; + $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + /* Error correction for overlaying rounded corners */ + if ( $SkewFactor < .5 ) { $SkewFactor = .5; } + + /* Data Processing */ + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + /* Do we have an abscissa serie defined? */ + if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); } + + /* Try to find the data serie */ + $DataSerie = ""; + foreach ($Data["Series"] as $SerieName => $SerieData) + { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } } + + /* Do we have data to compute? */ + if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); } + + /* Remove unused data */ + list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]); + + /* Compute the pie sum */ + $SerieSum = $this->pDataObject->getSum($DataSerie); + + /* Do we have data to draw? */ + if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); } + + /* Dump the real number of data to draw */ + $Values = ""; + foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value) + { if ($Value != 0) { $Values[] = $Value; } } + + /* Compute the wasted angular space between series */ + if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; } + + /* Compute the scale */ + $ScaleFactor = (360 - $WastedAngular) / $SerieSum; + + $RestoreShadow = $this->pChartObject->Shadow; + if ( $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; } + + /* Draw the polygon ring elements */ + $Offset = 360; $ID = count($Values)-1; + $Values = array_reverse($Values); + $Slice = 0; $Slices = ""; $SliceColors = ""; $Visible = ""; $SliceAngle = ""; + foreach($Values as $Key => $Value) + { + if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); } + $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]); + + $SliceColors[$Slice] = $Settings; + + $StartAngle = $Offset; + $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; } + + if ( $StartAngle > 180 ) { $Visible[$Slice]["Start"] = TRUE; } else { $Visible[$Slice]["Start"] = TRUE; } + if ( $EndAngle < 180 ) { $Visible[$Slice]["End"] = FALSE; } else { $Visible[$Slice]["End"] = TRUE; } + + $Step = (360 / (2 * PI * $OuterRadius))/2; + $OutX1 = VOID; $OutY1 = VOID; + for($i=$Offset;$i>=$EndAngle;$i=$i-$Step) + { + $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2) + $X; + $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2)*$SkewFactor + $Y; + $Slices[$Slice]["AA"][] = array($Xc,$Yc); + + $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1) + $X; + $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1)*$SkewFactor + $Y; + $Slices[$Slice]["AA"][] = array($Xc,$Yc); + + $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X; + $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y; + $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings); + + if ( $OutX1 == VOID ) { $OutX1 = $Xc; $OutY1 = $Yc; } + + if ( $i<90 ) { $Yc++; } + if ( $i>90 && $i<180 ) { $Xc++; } + if ( $i>180 && $i<270 ) { $Xc++; } + if ( $i>=270 ) { $Xc++; $Yc++; } + + $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc); + $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight; + $Slices[$Slice]["Angle"][] = $i; + } + $OutX2 = $Xc; $OutY2 = $Yc; + + $Slices[$Slice]["Angle"][] = VOID; + $Lasti = $i; + + $Step = (360 / (2 * PI * $InnerRadius))/2; + $InX1 = VOID; $InY1 = VOID; + for($i=$EndAngle;$i<=$Offset;$i=$i+$Step) + { + $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1) + $X; + $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1)*$SkewFactor + $Y; + $Slices[$Slice]["AA"][] = array($Xc,$Yc); + + $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius) + $X; + $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius)*$SkewFactor + $Y; + $Slices[$Slice]["AA"][] = array($Xc,$Yc); + + if ( $InX1 == VOID ) { $InX1 = $Xc; $InY1 = $Yc; } + + if ( $i<90 ) { $Yc++; } + if ( $i>90 && $i<180 ) { $Xc++; } + if ( $i>180 && $i<270 ) { $Xc++; } + if ( $i>=270 ) { $Xc++; $Yc++; } + + $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc); + $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight; + $Slices[$Slice]["Angle"][] = $i; + } + $InX2 = $Xc; $InY2 = $Yc; + + $Slices[$Slice]["InX1"] = $InX1; $Slices[$Slice]["InY1"] = $InY1; + $Slices[$Slice]["InX2"] = $InX2; $Slices[$Slice]["InY2"] = $InY2; + $Slices[$Slice]["OutX1"] = $OutX1; $Slices[$Slice]["OutY1"] = $OutY1; + $Slices[$Slice]["OutX2"] = $OutX2; $Slices[$Slice]["OutY2"] = $OutY2; + + $Offset = $Lasti - $DataGapAngle; $ID--; $Slice++; + } + + /* Draw the bottom pie splice */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $this->pChartObject->drawPolygon($Plots["BottomPoly"],$Settings); + + foreach($Plots["AA"] as $Key => $Pos) + $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$Settings); + + $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["OutX2"],$Plots["OutY2"],$Settings); + $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["OutX1"],$Plots["OutY1"],$Settings); + } + + $Slices = array_reverse($Slices); + $SliceColors = array_reverse($SliceColors); + + /* Draw the vertical edges (semi-visible) */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf; + + $StartAngle = $Plots["Angle"][0]; + foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } } + + if ( $StartAngle >= 270 || $StartAngle <= 90 ) + $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings); + if ( $StartAngle >= 270 || $StartAngle <= 90 ) + $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings); + + $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Settings); + $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Settings); + } + + /* Draw the inner vertical slices */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf; + + $Outer = TRUE; $Inner = FALSE; + $InnerPlotsA = ""; $InnerPlotsB = ""; + foreach($Plots["Angle"] as $ID => $Angle) + { + if ( $Angle == VOID ) + { $Outer = FALSE; $Inner = TRUE; } + elseif( $Inner ) + { + if (( $Angle < 90 || $Angle > 270 ) && isset($Plots["BottomPoly"][$ID*2]) ) + { + $Xo = $Plots["BottomPoly"][$ID*2]; + $Yo = $Plots["BottomPoly"][$ID*2+1]; + + $InnerPlotsA[] = $Xo; $InnerPlotsA[] = $Yo; + $InnerPlotsB[] = $Xo; $InnerPlotsB[] = $Yo-$SliceHeight; + } + } + } + + if ( $InnerPlotsA != "" ) + { $InnerPlots = array_merge($InnerPlotsA,$this->arrayReverse($InnerPlotsB)); $this->pChartObject->drawPolygon($InnerPlots,$Settings); } + } + + /* Draw the splice top and left poly */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $Settings["R"] = $Settings["R"]+$Cf*1.5; $Settings["G"] = $Settings["G"]+$Cf*1.5; $Settings["B"] = $Settings["B"]+$Cf*1.5; + + $StartAngle = $Plots["Angle"][0]; + foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } } + + if ( $StartAngle < 180 ) + { + $Points = ""; + $Points[] = $Plots["InX2"]; + $Points[] = $Plots["InY2"]; + $Points[] = $Plots["InX2"]; + $Points[] = $Plots["InY2"]-$SliceHeight; + $Points[] = $Plots["OutX1"]; + $Points[] = $Plots["OutY1"]-$SliceHeight; + $Points[] = $Plots["OutX1"]; + $Points[] = $Plots["OutY1"]; + + $this->pChartObject->drawPolygon($Points,$Settings); + } + + if ( $EndAngle > 180 ) + { + $Points = ""; + $Points[] = $Plots["InX1"]; + $Points[] = $Plots["InY1"]; + $Points[] = $Plots["InX1"]; + $Points[] = $Plots["InY1"]-$SliceHeight; + $Points[] = $Plots["OutX2"]; + $Points[] = $Plots["OutY2"]-$SliceHeight; + $Points[] = $Plots["OutX2"]; + $Points[] = $Plots["OutY2"]; + + $this->pChartObject->drawPolygon($Points,$Settings); + } + } + + + /* Draw the vertical edges (visible) */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf; + + $StartAngle = $Plots["Angle"][0]; + foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } } + + if ( $StartAngle <= 270 && $StartAngle >= 90 ) + $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings); + if ( $EndAngle <= 270 && $EndAngle >= 90 ) + $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings); + } + + + /* Draw the outer vertical slices */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf; + + $Outer = TRUE; $Inner = FALSE; + $OuterPlotsA = ""; $OuterPlotsB = ""; $InnerPlotsA = ""; $InnerPlotsB = ""; + foreach($Plots["Angle"] as $ID => $Angle) + { + if ( $Angle == VOID ) + { $Outer = FALSE; $Inner = TRUE; } + elseif( $Outer ) + { + if ( ( $Angle > 90 && $Angle < 270 ) && isset($Plots["BottomPoly"][$ID*2]) ) + { + $Xo = $Plots["BottomPoly"][$ID*2]; + $Yo = $Plots["BottomPoly"][$ID*2+1]; + + $OuterPlotsA[] = $Xo; $OuterPlotsA[] = $Yo; + $OuterPlotsB[] = $Xo; $OuterPlotsB[] = $Yo-$SliceHeight; + } + } + } + if ( $OuterPlotsA != "" ) + { $OuterPlots = array_merge($OuterPlotsA,$this->arrayReverse($OuterPlotsB)); $this->pChartObject->drawPolygon($OuterPlots,$Settings); } + } + + $Slices = array_reverse($Slices); + $SliceColors = array_reverse($SliceColors); + + + /* Draw the top pie splice */ + foreach($Slices as $SliceID => $Plots) + { + $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE; + $Settings["R"] = $Settings["R"]+$Cf*2; $Settings["G"] = $Settings["G"]+$Cf*2; $Settings["B"] = $Settings["B"]+$Cf*2; + + $this->pChartObject->drawPolygon($Plots["TopPoly"],$Settings); + + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots["TopPoly"]),$this->pChartObject->toHTMLColor($Settings["R"],$Settings["G"],$Settings["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$SliceID],$Data["Series"][$DataSerie]["Data"][count($Slices)-$SliceID-1]); } + + foreach($Plots["AA"] as $Key => $Pos) + $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1]-$SliceHeight,$Settings); + + $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings); + $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings); + } + + if ( $DrawLabels ) + { + $Offset = 360; + foreach($Values as $Key => $Value) + { + $StartAngle = $Offset; + $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; } + + if ( $LabelColor == PIE_LABEL_COLOR_AUTO ) + { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);} + else + { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); } + + $Angle = ($EndAngle - $Offset)/2 + $Offset; + $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X; + $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y; + + if ( $WriteValues == PIE_VALUE_PERCENTAGE ) + $Label = $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%"; + elseif ( $WriteValues == PIE_VALUE_NATURAL ) + $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key]; + else + $Label = ""; + + if ( $LabelStacked ) + $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius); + else + $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,FALSE); + + $Offset = $EndAngle - $DataGapAngle; $ID--; $Slice++; + } + } + if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); } + + $this->pChartObject->Shadow = $RestoreShadow; + + return(PIE_RENDERED); + } + + /* Serialize an array */ + function arraySerialize($Data) + { + $Result = ""; + foreach($Data as $Key => $Value) + { if ($Result == "") { $Result = floor($Value); } else { $Result = $Result.",".floor($Value); } } + + return($Result); + } + + /* Reverse an array */ + function arrayReverse($Plots) + { + $Result = ""; + + for($i=count($Plots)-1;$i>=0;$i=$i-2) + { $Result[] = $Plots[$i-1]; $Result[] = $Plots[$i]; } + + return($Result); + } + + /* Remove unused series & values */ + function clean0Values($Data,$Palette,$DataSerie,$AbscissaSerie) + { + $NewPalette = ""; $NewData = ""; $NewAbscissa = ""; + + /* Remove unused series */ + foreach($Data["Series"] as $SerieName => $SerieSettings) + { if ( $SerieName != $DataSerie && $SerieName != $AbscissaSerie ) { unset($Data["Series"][$SerieName]); } } + + /* Remove NULL values */ + foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value) + { + if ($Value != 0 ) + { + $NewData[] = $Value; + $NewAbscissa[] = $Data["Series"][$AbscissaSerie]["Data"][$Key]; + if ( isset($Palette[$Key]) ) { $NewPalette[] = $Palette[$Key]; } + } + } + $Data["Series"][$DataSerie]["Data"] = $NewData; + $Data["Series"][$AbscissaSerie]["Data"] = $NewAbscissa; + + return(array($Data,$NewPalette)); + } + } +?> \ No newline at end of file diff --git a/pChart/pRadar.class.php b/pChart/pRadar.class.php new file mode 100644 index 0000000..a4fe28b --- /dev/null +++ b/pChart/pRadar.class.php @@ -0,0 +1,681 @@ +<?php + /* + pRadar - class to draw radar charts + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("SEGMENT_HEIGHT_AUTO" , 690001); + + define("RADAR_LAYOUT_STAR" , 690011); + define("RADAR_LAYOUT_CIRCLE" , 690012); + + define("RADAR_LABELS_ROTATED" , 690021); + define("RADAR_LABELS_HORIZONTAL" , 690022); + + /* pRadar class definition */ + class pRadar + { + var $pChartObject; + + /* Class creator */ + function pRadar() + { } + + /* Draw a radar chart */ + function drawRadar($Object,$Values,$Format="") + { + $this->pChartObject = $Object; + + $FixedMax = isset($Format["FixedMax"]) ? $Format["FixedMax"] : VOID; + $AxisR = isset($Format["AxisR"]) ? $Format["AxisR"] : 60; + $AxisG = isset($Format["AxisG"]) ? $Format["AxisG"] : 60; + $AxisB = isset($Format["AxisB"]) ? $Format["AxisB"] : 60; + $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 50; + $AxisRotation = isset($Format["AxisRotation"]) ? $Format["AxisRotation"] : 0; + $DrawTicks = isset($Format["DrawTicks"]) ? $Format["DrawTicks"] : TRUE; + $TicksLength = isset($Format["TicksLength"]) ? $Format["TicksLength"] : 2; + $DrawAxisValues = isset($Format["DrawAxisValues"]) ? $Format["DrawAxisValues"] : TRUE; + $AxisBoxRounded = isset($Format["AxisBoxRounded"]) ? $Format["AxisBoxRounded"] : TRUE; + $AxisFontName = isset($Format["AxisFontName"]) ? $Format["AxisFontName"] : $this->pChartObject->FontName; + $AxisFontSize = isset($Format["AxisFontSize"]) ? $Format["AxisFontSize"] : $this->pChartObject->FontSize; + $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : FALSE; + $WriteValuesInBubble = isset($Format["WriteValuesInBubble"]) ? $Format["WriteValuesInBubble"] : TRUE; + $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName; + $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize; + $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 4; + $OuterBubbleRadius = isset($Format["OuterBubbleRadius"]) ? $Format["OuterBubbleRadius"] : 2; + $OuterBubbleR = isset($Format["OuterBubbleR"]) ? $Format["OuterBubbleR"] : VOID; + $OuterBubbleG = isset($Format["OuterBubbleG"]) ? $Format["OuterBubbleG"] : VOID; + $OuterBubbleB = isset($Format["OuterBubbleB"]) ? $Format["OuterBubbleB"] : VOID; + $OuterBubbleAlpha = isset($Format["OuterBubbleAlpha"]) ? $Format["OuterBubbleAlpha"] : 100; + $InnerBubbleR = isset($Format["InnerBubbleR"]) ? $Format["InnerBubbleR"] : 255; + $InnerBubbleG = isset($Format["InnerBubbleG"]) ? $Format["InnerBubbleG"] : 255; + $InnerBubbleB = isset($Format["InnerBubbleB"]) ? $Format["InnerBubbleB"] : 255; + $InnerBubbleAlpha = isset($Format["InnerBubbleAlpha"]) ? $Format["InnerBubbleAlpha"] : 100; + $DrawBackground = isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE; + $BackgroundR = isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255; + $BackgroundG = isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255; + $BackgroundB = isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255; + $BackgroundAlpha = isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 50; + $BackgroundGradient= isset($Format["BackgroundGradient"]) ? $Format["BackgroundGradient"] : NULL; + $Layout = isset($Format["Layout"]) ? $Format["Layout"] : RADAR_LAYOUT_STAR; + $SegmentHeight = isset($Format["SegmentHeight"]) ? $Format["SegmentHeight"] : SEGMENT_HEIGHT_AUTO; + $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 4; + $WriteLabels = isset($Format["WriteLabels"]) ? $Format["WriteLabels"] : TRUE; + $SkipLabels = isset($Format["SkipLabels"]) ? $Format["SkipLabels"] : 1; + $LabelMiddle = isset($Format["LabelMiddle"]) ? $Format["LabelMiddle"] : FALSE; + $LabelsBackground = isset($Format["LabelsBackground"]) ? $Format["LabelsBackground"] : TRUE; + $LabelsBGR = isset($Format["LabelsBGR"]) ? $Format["LabelsBGR"] : 255; + $LabelsBGG = isset($Format["LabelsBGR"]) ? $Format["LabelsBGG"] : 255; + $LabelsBGB = isset($Format["LabelsBGR"]) ? $Format["LabelsBGB"] : 255; + $LabelsBGAlpha = isset($Format["LabelsBGAlpha"]) ? $Format["LabelsBGAlpha"] : 50; + $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : RADAR_LABELS_ROTATED; + $LabelPadding = isset($Format["LabelPadding"]) ? $Format["LabelPadding"] : 4; + $DrawPoints = isset($Format["DrawPoints"]) ? $Format["DrawPoints"] : TRUE; + $PointRadius = isset($Format["PointRadius"]) ? $Format["PointRadius"] : 4; + $PointSurrounding = isset($Format["PointRadius"]) ? $Format["PointRadius"] : -30; + $DrawLines = isset($Format["DrawLines"]) ? $Format["DrawLines"] : TRUE; + $LineLoopStart = isset($Format["LineLoopStart"]) ? $Format["LineLoopStart"] : TRUE; + $DrawPoly = isset($Format["DrawPoly"]) ? $Format["DrawPoly"] : FALSE; + $PolyAlpha = isset($Format["PolyAlpha"]) ? $Format["PolyAlpha"] : 40; + $FontSize = $Object->FontSize; + $X1 = $Object->GraphAreaX1; + $Y1 = $Object->GraphAreaY1; + $X2 = $Object->GraphAreaX2; + $Y2 = $Object->GraphAreaY2; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + /* Cancel default tick length if ticks not enabled */ + if ( $DrawTicks == FALSE ) { $TicksLength = 0; } + + /* Data Processing */ + $Data = $Values->getData(); + $Palette = $Values->getPalette(); + + /* Catch the number of required axis */ + $LabelSerie = $Data["Abscissa"]; + if ( $LabelSerie != "" ) + { $Points = count($Data["Series"][$LabelSerie]["Data"]); } + else + { + $Points = 0; + foreach($Data["Series"] as $SerieName => $DataArray) + { if ( count($DataArray["Data"]) > $Points ) { $Points = count($DataArray["Data"]); } } + } + + /* Draw the axis */ + $CenterX = ($X2-$X1)/2 + $X1; + $CenterY = ($Y2-$Y1)/2 + $Y1; + + $EdgeHeight = min(($X2-$X1)/2,($Y2-$Y1)/2); + if ( $WriteLabels ) + $EdgeHeight = $EdgeHeight - $FontSize - $LabelPadding - $TicksLength; + + /* Determine the scale if set to automatic */ + if ( $SegmentHeight == SEGMENT_HEIGHT_AUTO) + { + if ( $FixedMax != VOID ) + $Max = $FixedMax; + else + { + $Max = 0; + foreach($Data["Series"] as $SerieName => $DataArray) + { + if ( $SerieName != $LabelSerie ) + { + if ( max($DataArray["Data"]) > $Max ) { $Max = max($DataArray["Data"]); } + } + } + } + $MaxSegments = $EdgeHeight/20; + $Scale = $Object->computeScale(0,$Max,$MaxSegments,array(1,2,5)); + + $Segments = $Scale["Rows"]; + $SegmentHeight = $Scale["RowHeight"]; + } + + if ( $LabelMiddle && $SkipLabels == 1 ) + { $Axisoffset = (360/$Points)/2; } + elseif ( $LabelMiddle && $SkipLabels != 1 ) + { $Axisoffset = (360/($Points/$SkipLabels))/2; } + elseif ( !$LabelMiddle ) + { $Axisoffset = 0; } + + /* Background processing */ + if ( $DrawBackground ) + { + $RestoreShadow = $Object->Shadow; + $Object->Shadow = FALSE; + + if ($BackgroundGradient == NULL) + { + if ( $Layout == RADAR_LAYOUT_STAR ) + { + $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha); + $PointArray = ""; + for($i=0;$i<=360;$i=$i+(360/$Points)) + { + $PointArray[] = cos(deg2rad($i+$AxisRotation)) * $EdgeHeight + $CenterX; + $PointArray[] = sin(deg2rad($i+$AxisRotation)) * $EdgeHeight + $CenterY; + } + $Object->drawPolygon($PointArray,$Color); + } + elseif ( $Layout == RADAR_LAYOUT_CIRCLE ) + { + $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha); + $Object->drawFilledCircle($CenterX,$CenterY,$EdgeHeight,$Color); + } + } + else + { + $GradientROffset = ($BackgroundGradient["EndR"] - $BackgroundGradient["StartR"]) / $Segments; + $GradientGOffset = ($BackgroundGradient["EndG"] - $BackgroundGradient["StartG"]) / $Segments; + $GradientBOffset = ($BackgroundGradient["EndB"] - $BackgroundGradient["StartB"]) / $Segments; + $GradientAlphaOffset = ($BackgroundGradient["EndAlpha"] - $BackgroundGradient["StartAlpha"]) / $Segments; + + if ( $Layout == RADAR_LAYOUT_STAR ) + { + for($j=$Segments;$j>=1;$j--) + { + $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j); + $PointArray = ""; + + for($i=0;$i<=360;$i=$i+(360/$Points)) + { + $PointArray[] = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX; + $PointArray[] = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY; + } + $Object->drawPolygon($PointArray,$Color); + } + } + elseif ( $Layout == RADAR_LAYOUT_CIRCLE ) + { + for($j=$Segments;$j>=1;$j--) + { + $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j); + $Object->drawFilledCircle($CenterX,$CenterY,($EdgeHeight/$Segments)*$j,$Color); + } + } + } + $Object->Shadow = $RestoreShadow; + } + + /* Axis to axis lines */ + $Color = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha); + $ColorDotted = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha*.8, "Ticks"=>2); + if ( $Layout == RADAR_LAYOUT_STAR ) + { + for($j=1;$j<=$Segments;$j++) + { + for($i=0;$i<360;$i=$i+(360/$Points)) + { + $EdgeX1 = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX; + $EdgeY1 = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY; + $EdgeX2 = cos(deg2rad($i+$AxisRotation+(360/$Points))) * ($EdgeHeight/$Segments)*$j + $CenterX; + $EdgeY2 = sin(deg2rad($i+$AxisRotation+(360/$Points))) * ($EdgeHeight/$Segments)*$j + $CenterY; + + $Object->drawLine($EdgeX1,$EdgeY1,$EdgeX2,$EdgeY2,$Color); + } + } + } + elseif ( $Layout == RADAR_LAYOUT_CIRCLE ) + { + for($j=1;$j<=$Segments;$j++) + { + $Radius = ($EdgeHeight/$Segments)*$j; + $Object->drawCircle($CenterX,$CenterY,$Radius,$Radius,$Color); + } + } + + if ( $DrawAxisValues ) + { + if ( $LabelsBackground ) + $Options = array("DrawBox"=>TRUE, "Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"BoxR"=>$LabelsBGR,"BoxG"=>$LabelsBGG,"BoxB"=>$LabelsBGB,"BoxAlpha"=>$LabelsBGAlpha); + else + $Options = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE); + + if ( $AxisBoxRounded ) { $Options["BoxRounded"] = TRUE; } + + $Options["FontName"] = $AxisFontName; + $Options["FontSize"] = $AxisFontSize; + + $Angle = 360 / ($Points*2); + for($j=1;$j<=$Segments;$j++) + { + $Label = $j * $SegmentHeight; + + if ( $Layout == RADAR_LAYOUT_CIRCLE ) + { + $EdgeX1 = cos(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX; + $EdgeY1 = sin(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY; + } + elseif ( $Layout == RADAR_LAYOUT_STAR ) + { + $EdgeX1 = cos(deg2rad($AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX; + $EdgeY1 = sin(deg2rad($AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY; + $EdgeX2 = cos(deg2rad((360 / $Points) + $AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX; + $EdgeY2 = sin(deg2rad((360 / $Points) + $AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY; + + $EdgeX1 = ($EdgeX2 - $EdgeX1)/2 + $EdgeX1; + $EdgeY1 = ($EdgeY2 - $EdgeY1)/2 + $EdgeY1; + } + + $Object->drawText($EdgeX1,$EdgeY1,$Label,$Options); + } + } + + /* Axis lines */ + $ID = 0; + for($i=0;$i<360;$i=$i+(360/$Points)) + { + $EdgeX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterX; + $EdgeY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterY; + + if ($ID % $SkipLabels == 0) + { $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$Color); } + else + { $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$ColorDotted); } + + if ( $WriteLabels ) + { + $LabelX = cos(deg2rad($i+$AxisRotation+$Axisoffset)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterX; + $LabelY = sin(deg2rad($i+$AxisRotation+$Axisoffset)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterY; + + if ( $LabelSerie != "" ) + { $Label = isset($Data["Series"][$LabelSerie]["Data"][$ID]) ? $Data["Series"][$LabelSerie]["Data"][$ID] : ""; } + else + $Label = $ID; + + if ($ID % $SkipLabels == 0) + { + if ( $LabelPos == RADAR_LABELS_ROTATED ) + $Object->drawText($LabelX,$LabelY,$Label,array("Angle"=>(360-($i+$AxisRotation+$Axisoffset))-90,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + else + { + if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); } + if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMLEFT)); } + if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); } + if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPLEFT)); } + if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT)); } + if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); } + if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPRIGHT)); } + if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPMIDDLE)); } + } + } + } + $ID++; + } + + /* Compute the plots position */ + $ID = 0; $Plot = ""; + foreach($Data["Series"] as $SerieName => $DataS) + { + if ( $SerieName != $LabelSerie ) + { + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding); + foreach($DataS["Data"] as $Key => $Value) + { + $Angle = (360/$Points) * $Key; + $Length = ($EdgeHeight/($Segments*$SegmentHeight))*$Value; + + $X = cos(deg2rad($Angle+$AxisRotation)) * $Length + $CenterX; + $Y = sin(deg2rad($Angle+$AxisRotation)) * $Length + $CenterY; + + $Plot[$ID][] = array($X,$Y,$Value); + + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PointRadius),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$DataS["Description"],$Data["Series"][$LabelSerie]["Data"][$Key]." = ".$Value); } + } + $ID++; + } + } + + /* Draw all that stuff! */ + foreach($Plot as $ID => $Points) + { + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding); + + /* Draw the polygons */ + if ( $DrawPoly ) + { + if ($PolyAlpha != NULL) + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$PolyAlpha,"Surrounding"=>$PointSurrounding); + + $PointsArray = ""; + for($i=0; $i<count($Points);$i++) + { $PointsArray[] = $Points[$i][0]; $PointsArray[] = $Points[$i][1]; } + $Object->drawPolygon($PointsArray,$Color); + } + + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding); + + /* Bubble and labels settings */ + $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize,"R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"]); + $InnerColor = array("R"=>$InnerBubbleR,"G"=>$InnerBubbleG,"B"=>$InnerBubbleB,"Alpha"=>$InnerBubbleAlpha); + if ( $OuterBubbleR != VOID ) + $OuterColor = array("R"=>$OuterBubbleR,"G"=>$OuterBubbleG,"B"=>$OuterBubbleB,"Alpha"=>$OuterBubbleAlpha); + else + $OuterColor = array("R"=>$Palette[$ID]["R"]+20,"G"=>$Palette[$ID]["G"]+20,"B"=>$Palette[$ID]["B"]+20,"Alpha"=>$Palette[$ID]["Alpha"]); + + /* Loop to the starting points if asked */ + if ( $LineLoopStart && $DrawLines ) + $Object->drawLine($Points[count($Points)-1][0],$Points[count($Points)-1][1],$Points[0][0],$Points[0][1],$Color); + + /* Draw the lines & points */ + for($i=0; $i<count($Points);$i++) + { + if ( $DrawLines && $i < count($Points)-1) + $Object->drawLine($Points[$i][0],$Points[$i][1],$Points[$i+1][0],$Points[$i+1][1],$Color); + + if ( $DrawPoints ) + $Object->drawFilledCircle($Points[$i][0],$Points[$i][1],$PointRadius,$Color); + + if ( $WriteValuesInBubble && $WriteValues ) + { + $TxtPos = $this->pChartObject->getTextBox($Points[$i][0],$Points[$i][1],$ValueFontName,$ValueFontSize,0,$Points[$i][2]); + $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $ValuePadding*2)/2); + + $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius+$OuterBubbleRadius,$OuterColor); + $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius,$InnerColor); + } + + if ( $WriteValues ) + $this->pChartObject->drawText($Points[$i][0]-1,$Points[$i][1]-1,$Points[$i][2],$TextSettings); + } + } + } + + + + /* Draw a radar chart */ + function drawPolar($Object,$Values,$Format="") + { + $this->pChartObject = $Object; + + $FixedMax = isset($Format["FixedMax"]) ? $Format["FixedMax"] : VOID; + $AxisR = isset($Format["AxisR"]) ? $Format["AxisR"] : 60; + $AxisG = isset($Format["AxisG"]) ? $Format["AxisG"] : 60; + $AxisB = isset($Format["AxisB"]) ? $Format["AxisB"] : 60; + $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 50; + $AxisRotation = isset($Format["AxisRotation"]) ? $Format["AxisRotation"] : -90; + $DrawTicks = isset($Format["DrawTicks"]) ? $Format["DrawTicks"] : TRUE; + $TicksLength = isset($Format["TicksLength"]) ? $Format["TicksLength"] : 2; + $DrawAxisValues = isset($Format["DrawAxisValues"]) ? $Format["DrawAxisValues"] : TRUE; + $AxisBoxRounded = isset($Format["AxisBoxRounded"]) ? $Format["AxisBoxRounded"] : TRUE; + $AxisFontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName; + $AxisFontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize; + $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : FALSE; + $WriteValuesInBubble = isset($Format["WriteValuesInBubble"]) ? $Format["WriteValuesInBubble"] : TRUE; + $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName; + $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize; + $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 4; + $OuterBubbleRadius = isset($Format["OuterBubbleRadius"]) ? $Format["OuterBubbleRadius"] : 2; + $OuterBubbleR = isset($Format["OuterBubbleR"]) ? $Format["OuterBubbleR"] : VOID; + $OuterBubbleG = isset($Format["OuterBubbleG"]) ? $Format["OuterBubbleG"] : VOID; + $OuterBubbleB = isset($Format["OuterBubbleB"]) ? $Format["OuterBubbleB"] : VOID; + $OuterBubbleAlpha = isset($Format["OuterBubbleAlpha"]) ? $Format["OuterBubbleAlpha"] : 100; + $InnerBubbleR = isset($Format["InnerBubbleR"]) ? $Format["InnerBubbleR"] : 255; + $InnerBubbleG = isset($Format["InnerBubbleG"]) ? $Format["InnerBubbleG"] : 255; + $InnerBubbleB = isset($Format["InnerBubbleB"]) ? $Format["InnerBubbleB"] : 255; + $InnerBubbleAlpha = isset($Format["InnerBubbleAlpha"]) ? $Format["InnerBubbleAlpha"] : 100; + $DrawBackground = isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE; + $BackgroundR = isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255; + $BackgroundG = isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255; + $BackgroundB = isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255; + $BackgroundAlpha = isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 50; + $BackgroundGradient= isset($Format["BackgroundGradient"]) ? $Format["BackgroundGradient"] : NULL; + $AxisSteps = isset($Format["AxisSteps"]) ? $Format["AxisSteps"] : 20; + $SegmentHeight = isset($Format["SegmentHeight"]) ? $Format["SegmentHeight"] : SEGMENT_HEIGHT_AUTO; + $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 4; + $WriteLabels = isset($Format["WriteLabels"]) ? $Format["WriteLabels"] : TRUE; + $LabelsBackground = isset($Format["LabelsBackground"]) ? $Format["LabelsBackground"] : TRUE; + $LabelsBGR = isset($Format["LabelsBGR"]) ? $Format["LabelsBGR"] : 255; + $LabelsBGG = isset($Format["LabelsBGR"]) ? $Format["LabelsBGG"] : 255; + $LabelsBGB = isset($Format["LabelsBGR"]) ? $Format["LabelsBGB"] : 255; + $LabelsBGAlpha = isset($Format["LabelsBGAlpha"]) ? $Format["LabelsBGAlpha"] : 50; + $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : RADAR_LABELS_ROTATED; + $LabelPadding = isset($Format["LabelPadding"]) ? $Format["LabelPadding"] : 4; + $DrawPoints = isset($Format["DrawPoints"]) ? $Format["DrawPoints"] : TRUE; + $PointRadius = isset($Format["PointRadius"]) ? $Format["PointRadius"] : 4; + $PointSurrounding = isset($Format["PointRadius"]) ? $Format["PointRadius"] : -30; + $DrawLines = isset($Format["DrawLines"]) ? $Format["DrawLines"] : TRUE; + $LineLoopStart = isset($Format["LineLoopStart"]) ? $Format["LineLoopStart"] : FALSE; + $DrawPoly = isset($Format["DrawPoly"]) ? $Format["DrawPoly"] : FALSE; + $PolyAlpha = isset($Format["PolyAlpha"]) ? $Format["PolyAlpha"] : NULL; + $FontSize = $Object->FontSize; + $X1 = $Object->GraphAreaX1; + $Y1 = $Object->GraphAreaY1; + $X2 = $Object->GraphAreaX2; + $Y2 = $Object->GraphAreaY2; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + + if ( $AxisBoxRounded ) { $DrawAxisValues = TRUE; } + + /* Cancel default tick length if ticks not enabled */ + if ( $DrawTicks == FALSE ) { $TicksLength = 0; } + + /* Data Processing */ + $Data = $Values->getData(); + $Palette = $Values->getPalette(); + + /* Catch the number of required axis */ + $LabelSerie = $Data["Abscissa"]; + if ( $LabelSerie != "" ) + { $Points = count($Data["Series"][$LabelSerie]["Data"]); } + else + { + $Points = 0; + foreach($Data["Series"] as $SerieName => $DataArray) + { if ( count($DataArray["Data"]) > $Points ) { $Points = count($DataArray["Data"]); } } + } + + /* Draw the axis */ + $CenterX = ($X2-$X1)/2 + $X1; + $CenterY = ($Y2-$Y1)/2 + $Y1; + + $EdgeHeight = min(($X2-$X1)/2,($Y2-$Y1)/2); + if ( $WriteLabels ) + $EdgeHeight = $EdgeHeight - $FontSize - $LabelPadding - $TicksLength; + + /* Determine the scale if set to automatic */ + if ( $SegmentHeight == SEGMENT_HEIGHT_AUTO) + { + if ( $FixedMax != VOID ) + $Max = $FixedMax; + else + { + $Max = 0; + foreach($Data["Series"] as $SerieName => $DataArray) + { + if ( $SerieName != $LabelSerie ) + { + if ( max($DataArray["Data"]) > $Max ) { $Max = max($DataArray["Data"]); } + } + } + } + $MaxSegments = $EdgeHeight/20; + $Scale = $Object->computeScale(0,$Max,$MaxSegments,array(1,2,5)); + + $Segments = $Scale["Rows"]; + $SegmentHeight = $Scale["RowHeight"]; + } + + + /* Background processing */ + if ( $DrawBackground ) + { + $RestoreShadow = $Object->Shadow; + $Object->Shadow = FALSE; + + if ($BackgroundGradient == NULL) + { + $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha); + $Object->drawFilledCircle($CenterX,$CenterY,$EdgeHeight,$Color); + } + else + { + $GradientROffset = ($BackgroundGradient["EndR"] - $BackgroundGradient["StartR"]) / $Segments; + $GradientGOffset = ($BackgroundGradient["EndG"] - $BackgroundGradient["StartG"]) / $Segments; + $GradientBOffset = ($BackgroundGradient["EndB"] - $BackgroundGradient["StartB"]) / $Segments; + $GradientAlphaOffset = ($BackgroundGradient["EndAlpha"] - $BackgroundGradient["StartAlpha"]) / $Segments; + + for($j=$Segments;$j>=1;$j--) + { + $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j); + $Object->drawFilledCircle($CenterX,$CenterY,($EdgeHeight/$Segments)*$j,$Color); + } + } + $Object->Shadow = $RestoreShadow; + } + + /* Axis to axis lines */ + $Color = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha); + for($j=1;$j<=$Segments;$j++) + { + $Radius = ($EdgeHeight/$Segments)*$j; + $Object->drawCircle($CenterX,$CenterY,$Radius,$Radius,$Color); + } + + if ( $DrawAxisValues ) + { + if ( $LabelsBackground ) + $Options = array("DrawBox"=>TRUE, "Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"BoxR"=>$LabelsBGR,"BoxG"=>$LabelsBGG,"BoxB"=>$LabelsBGB,"BoxAlpha"=>$LabelsBGAlpha); + else + $Options = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE); + + if ( $AxisBoxRounded ) { $Options["BoxRounded"] = TRUE; } + + $Options["FontName"] = $AxisFontName; + $Options["FontSize"] = $AxisFontSize; + + $Angle = 360 / ($Points*2); + for($j=1;$j<=$Segments;$j++) + { + $EdgeX1 = cos(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX; + $EdgeY1 = sin(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY; + $Label = $j*$SegmentHeight; + + $Object->drawText($EdgeX1,$EdgeY1,$Label,$Options); + } + } + + /* Axis lines */ + $ID = 0; + for($i=0;$i<=359;$i=$i+$AxisSteps) + { + $EdgeX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterX; + $EdgeY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterY; + + $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$Color); + + if ( $WriteLabels ) + { + $LabelX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterX; + $LabelY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterY; + $Label = $i."°"; + + if ( $LabelPos == RADAR_LABELS_ROTATED ) + $Object->drawText($LabelX,$LabelY,$Label,array("Angle"=>(360-$i),"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + else + { + if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); } + if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMLEFT)); } + if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); } + if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPLEFT)); } + if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT)); } + if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); } + if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPRIGHT)); } + if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPMIDDLE)); } + } + } + $ID++; + } + + /* Compute the plots position */ + $ID = 0; $Plot = ""; + foreach($Data["Series"] as $SerieName => $DataSet) + { + if ( $SerieName != $LabelSerie ) + { + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding); + foreach($DataSet["Data"] as $Key => $Value) + { + $Angle = $Data["Series"][$LabelSerie]["Data"][$Key]; + $Length = ($EdgeHeight/($Segments*$SegmentHeight))*$Value; + + $X = cos(deg2rad($Angle+$AxisRotation)) * $Length + $CenterX; + $Y = sin(deg2rad($Angle+$AxisRotation)) * $Length + $CenterY; + + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PointRadius),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$DataSet["Description"],$Data["Series"][$LabelSerie]["Data"][$Key]."&deg = ".$Value); } + + $Plot[$ID][] = array($X,$Y,$Value); + } + $ID++; + } + } + + /* Draw all that stuff! */ + foreach($Plot as $ID => $Points) + { + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding); + + /* Draw the polygons */ + if ( $DrawPoly ) + { + if ($PolyAlpha != NULL) + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$PolyAlpha,"Surrounding"=>$PointSurrounding); + + $PointsArray = ""; + for($i=0; $i<count($Points);$i++) + { $PointsArray[] = $Points[$i][0]; $PointsArray[] = $Points[$i][1]; } + + $Object->drawPolygon($PointsArray,$Color); + } + + $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding); + + /* Bubble and labels settings */ + $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize,"R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"]); + $InnerColor = array("R"=>$InnerBubbleR,"G"=>$InnerBubbleG,"B"=>$InnerBubbleB,"Alpha"=>$InnerBubbleAlpha); + if ( $OuterBubbleR != VOID ) + $OuterColor = array("R"=>$OuterBubbleR,"G"=>$OuterBubbleG,"B"=>$OuterBubbleB,"Alpha"=>$OuterBubbleAlpha); + else + $OuterColor = array("R"=>$Palette[$ID]["R"]+20,"G"=>$Palette[$ID]["G"]+20,"B"=>$Palette[$ID]["B"]+20,"Alpha"=>$Palette[$ID]["Alpha"]); + + /* Loop to the starting points if asked */ + if ( $LineLoopStart && $DrawLines ) + $Object->drawLine($Points[count($Points)-1][0],$Points[count($Points)-1][1],$Points[0][0],$Points[0][1],$Color); + + /* Draw the lines & points */ + for($i=0; $i<count($Points);$i++) + { + if ( $DrawLines && $i < count($Points)-1) + $Object->drawLine($Points[$i][0],$Points[$i][1],$Points[$i+1][0],$Points[$i+1][1],$Color); + + if ( $DrawPoints ) + $Object->drawFilledCircle($Points[$i][0],$Points[$i][1],$PointRadius,$Color); + + if ( $WriteValuesInBubble && $WriteValues ) + { + $TxtPos = $this->pChartObject->getTextBox($Points[$i][0],$Points[$i][1],$ValueFontName,$ValueFontSize,0,$Points[$i][2]); + $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $ValuePadding*2)/2); + + $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius+$OuterBubbleRadius,$OuterColor); + $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius,$InnerColor); + } + + if ( $WriteValues ) + $this->pChartObject->drawText($Points[$i][0]-1,$Points[$i][1]-1,$Points[$i][2],$TextSettings); + } + } + } + } +?> \ No newline at end of file diff --git a/pChart/pScatter.class.php b/pChart/pScatter.class.php new file mode 100644 index 0000000..be80ae2 --- /dev/null +++ b/pChart/pScatter.class.php @@ -0,0 +1,1158 @@ +<?php + /* + pScatter - class to draw scatter charts + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("SCATTER_MISSING_X_SERIE" , 190001); + define("SCATTER_MISSING_Y_SERIE" , 190002); + + /* pScatter class definition */ + class pScatter + { + var $pChartObject; + var $pDataObject; + + /* Class creator */ + function pScatter($pChartObject,$pDataObject) + { + $this->pChartObject = $pChartObject; + $this->pDataObject = $pDataObject; + } + + /* Prepare the scale */ + function drawScatterScale($Format="") + { + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING; + $Floating = isset($Format["Floating"]) ? $Format["Floating"] : FALSE; + $XLabelsRotation = isset($Format["XLabelsRotation"]) ? $Format["XLabelsRotation"] : 90; + $MinDivHeight = isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20; + $Factors = isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5); + $ManualScale = isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100)); + $XMargin = isset($Format["XMargin"]) ? $Format["XMargin"] : 0; + $YMargin = isset($Format["YMargin"]) ? $Format["YMargin"] : 0; + $ScaleSpacing = isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15; + $InnerTickWidth = isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2; + $OuterTickWidth = isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2; + $DrawXLines = isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : ALL; + $DrawYLines = isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL; + $GridTicks = isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4; + $GridR = isset($Format["GridR"]) ? $Format["GridR"] : 255; + $GridG = isset($Format["GridG"]) ? $Format["GridG"] : 255; + $GridB = isset($Format["GridB"]) ? $Format["GridB"] : 255; + $GridAlpha = isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40; + $AxisRo = isset($Format["AxisR"]) ? $Format["AxisR"] : 0; + $AxisGo = isset($Format["AxisG"]) ? $Format["AxisG"] : 0; + $AxisBo = isset($Format["AxisB"]) ? $Format["AxisB"] : 0; + $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100; + $TickRo = isset($Format["TickR"]) ? $Format["TickR"] : 0; + $TickGo = isset($Format["TickG"]) ? $Format["TickG"] : 0; + $TickBo = isset($Format["TickB"]) ? $Format["TickB"] : 0; + $TickAlpha = isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100; + $DrawSubTicks = isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE; + $InnerSubTickWidth = isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0; + $OuterSubTickWidth = isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2; + $SubTickR = isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255; + $SubTickG = isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0; + $SubTickB = isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0; + $SubTickAlpha = isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100; + $XReleasePercent = isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1; + $DrawArrows = isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE; + $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8; + $CycleBackground = isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE; + $BackgroundR1 = isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255; + $BackgroundG1 = isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255; + $BackgroundB1 = isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255; + $BackgroundAlpha1 = isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 10; + $BackgroundR2 = isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230; + $BackgroundG2 = isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230; + $BackgroundB2 = isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230; + $BackgroundAlpha2 = isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 10; + + /* Check if we have at least both one X and Y axis */ + $GotXAxis = FALSE; $GotYAxis = FALSE; + foreach($this->pDataObject->Data["Axis"] as $AxisID => $AxisSettings) + { + if ( $AxisSettings["Identity"] == AXIS_X ) { $GotXAxis = TRUE; } + if ( $AxisSettings["Identity"] == AXIS_Y ) { $GotYAxis = TRUE; } + } + if ( !$GotXAxis ) { return(SCATTER_MISSING_X_SERIE); } + if ( !$GotYAxis ) { return(SCATTER_MISSING_Y_SERIE); } + + /* Skip a NOTICE event in case of an empty array */ + if ( $DrawYLines == NONE ) { $DrawYLines = array("zarma"=>"31"); } + + $Data = $this->pDataObject->getData(); + + foreach($Data["Axis"] as $AxisID => $AxisSettings) + { + if ( $AxisSettings["Identity"] == AXIS_X) + { $Width = $this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin*2; } + else + { $Width = $this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $YMargin*2; } + + $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT; + if ( $Mode == SCALE_MODE_FLOATING ) + { + foreach($Data["Series"] as $SerieID => $SerieParameter) + { + if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] ) + { + $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]); + $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]); + } + } + $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent; + + $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin; + } + elseif ( $Mode == SCALE_MODE_MANUAL ) + { + if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) ) + { + $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"]; + $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"]; + } + else + { echo "Manual scale boundaries not set."; exit(); } + } + + /* Full manual scale */ + if ( isset($ManualScale[$AxisID]["Rows"]) && isset($ManualScale[$AxisID]["RowHeight"]) ) + $Scale = array("Rows"=>$ManualScale[$AxisID]["Rows"],"RowHeight"=>$ManualScale[$AxisID]["RowHeight"],"XMin"=>$ManualScale[$AxisID]["Min"],"XMax"=>$ManualScale[$AxisID]["Max"]); + else + { + $MaxDivs = floor($Width/$MinDivHeight); + $Scale = $this->pChartObject->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID); + } + + $Data["Axis"][$AxisID]["Margin"] = $AxisSettings["Identity"] == AXIS_X ? $XMargin : $YMargin; + $Data["Axis"][$AxisID]["ScaleMin"] = $Scale["XMin"]; + $Data["Axis"][$AxisID]["ScaleMax"] = $Scale["XMax"]; + $Data["Axis"][$AxisID]["Rows"] = $Scale["Rows"]; + $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"]; + + if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; } + + if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; } + if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; } + if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; } + } + + /* Get the default font color */ + $FontColorRo = $this->pChartObject->FontColorR; $FontColorGo = $this->pChartObject->FontColorG; $FontColorBo = $this->pChartObject->FontColorB; + + /* Set the original boundaries */ + $AxisPos["L"] = $this->pChartObject->GraphAreaX1; $AxisPos["R"] = $this->pChartObject->GraphAreaX2; $AxisPos["T"] = $this->pChartObject->GraphAreaY1; $AxisPos["B"] = $this->pChartObject->GraphAreaY2; + + foreach($Data["Axis"] as $AxisID => $AxisSettings) + { + if ( isset($AxisSettings["Color"]) ) + { + $AxisR = $AxisSettings["Color"]["R"]; $AxisG = $AxisSettings["Color"]["G"]; $AxisB = $AxisSettings["Color"]["B"]; + $TickR = $AxisSettings["Color"]["R"]; $TickG = $AxisSettings["Color"]["G"]; $TickB = $AxisSettings["Color"]["B"]; + $this->pChartObject->setFontProperties(array("R"=>$AxisSettings["Color"]["R"],"G"=>$AxisSettings["Color"]["G"],"B"=>$AxisSettings["Color"]["B"])); + } + else + { + $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo; + $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo; + $this->pChartObject->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo)); + } + + $LastValue = "w00t"; $ID = 1; + if ( $AxisSettings["Identity"] == AXIS_X ) + { + if ( $AxisSettings["Position"] == AXIS_POSITION_BOTTOM ) + { + if ( $XLabelsRotation == 0 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 2; } + if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; } + if ( $XLabelsRotation == 180 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 5; } + if ( $XLabelsRotation > 180 && $XLabelsRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; } + + if ( $Floating ) + { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["B"],$this->pChartObject->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2; + $Step = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"]; + $LastX = NULL; + for($i=0;$i<=$AxisSettings["Rows"];$i++) + { + $XPos = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i; + $YPos = $AxisPos["B"]; + $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastX != NULL && $CycleBackground && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) { $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor); } + + if ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) ) { $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + if ( $DrawSubTicks && $i != $AxisSettings["Rows"] ) + $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$InnerSubTickWidth,$XPos+$SubTicksSize,$YPos+$OuterSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->pChartObject->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->pChartObject->drawText($XPos,$YPos+$OuterTickWidth+$LabelOffset,$Value,array("Angle"=>$XLabelsRotation,"Align"=>$LabelAlign)); + $TxtBottom = $YPos+2+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]); + $MaxBottom = max($MaxBottom,$TxtBottom); + + $LastX = $XPos; + } + + if ( isset($AxisSettings["Name"]) ) + { + $YPos = $MaxBottom+2; + $XPos = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2; + $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE)); + $MaxBottom = $Bounds[0]["Y"]; + + $this->pDataObject->Data["GraphArea"]["Y2"] = $MaxBottom + $this->pChartObject->FontSize; + } + + $AxisPos["B"] = $MaxBottom + $ScaleSpacing; + } + elseif ( $AxisSettings["Position"] == AXIS_POSITION_TOP ) + { + if ( $XLabelsRotation == 0 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 2; } + if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; } + if ( $XLabelsRotation == 180 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 5; } + if ( $XLabelsRotation > 180 && $SLabelxRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; } + + if ( $Floating ) + { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["T"],$this->pChartObject->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2; + $Step = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"]; + $LastX = NULL; + for($i=0;$i<=$AxisSettings["Rows"];$i++) + { + $XPos = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i; + $YPos = $AxisPos["T"]; + $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastX != NULL && $CycleBackground && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) { $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor); } + + if ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) ) { $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + + if ( $DrawSubTicks && $i != $AxisSettings["Rows"] ) + $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->pChartObject->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->pChartObject->drawText($XPos,$YPos-$OuterTickWidth-$LabelOffset,$Value,array("Angle"=>$XLabelsRotation,"Align"=>$LabelAlign)); + $TxtBox = $YPos-$OuterTickWidth-4-($Bounds[0]["Y"]-$Bounds[2]["Y"]); + $MinTop = min($MinTop,$TxtBox); + + $LastX = $XPos; + } + + if ( isset($AxisSettings["Name"]) ) + { + $YPos = $MinTop-2; + $XPos = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2; + $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); + $MinTop = $Bounds[2]["Y"]; + + $this->pDataObject->Data["GraphArea"]["Y1"] = $MinTop; + } + + $AxisPos["T"] = $MinTop - $ScaleSpacing; + } + } + elseif ( $AxisSettings["Identity"] == AXIS_Y ) + { + if ( $AxisSettings["Position"] == AXIS_POSITION_LEFT ) + { + + if ( $Floating ) + { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1,$AxisPos["L"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2; + $Step = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"]; + $LastY = NULL; + for($i=0;$i<=$AxisSettings["Rows"];$i++) + { + $YPos = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i; + $XPos = $AxisPos["L"]; + $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); } + + if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + + if ( $DrawSubTicks && $i != $AxisSettings["Rows"] ) + $this->pChartObject->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->pChartObject->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->pChartObject->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); + $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]); + $MinLeft = min($MinLeft,$TxtLeft); + + $LastY = $YPos; + } + + if ( isset($AxisSettings["Name"]) ) + { + $XPos = $MinLeft-2; + $YPos = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2; + $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90)); + $MinLeft = $Bounds[2]["X"]; + + $this->pDataObject->Data["GraphArea"]["X1"] = $MinLeft; + } + + $AxisPos["L"] = $MinLeft - $ScaleSpacing; + } + elseif ( $AxisSettings["Position"] == AXIS_POSITION_RIGHT ) + { + + if ( $Floating ) + { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + else + { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1,$AxisPos["R"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); } + + if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); } + + $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2; + $Step = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"]; + $LastY = NULL; + for($i=0;$i<=$AxisSettings["Rows"];$i++) + { + $YPos = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i; + $XPos = $AxisPos["R"]; + $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]); + + if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); } + if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); } + + if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines)) ) { $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); } + + if ( $DrawSubTicks && $i != $AxisSettings["Rows"] ) + $this->pChartObject->drawLine($XPos-$InnerSubTickWidth,$YPos-$SubTicksSize,$XPos+$OuterSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha)); + + $this->pChartObject->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); + $Bounds = $this->pChartObject->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); + $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]); + $MaxLeft = max($MaxLeft,$TxtLeft); + + $LastY = $YPos; + } + + if ( isset($AxisSettings["Name"]) ) + { + $XPos = $MaxLeft+6; + $YPos = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2; + $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270)); + $MaxLeft = $Bounds[2]["X"]; + + $this->pDataObject->Data["GraphArea"]["X2"] = $MaxLeft + $this->pChartObject->FontSize; + } + + $AxisPos["R"] = $MaxLeft + $ScaleSpacing; + } + } + } + + $this->pDataObject->saveAxisConfig($Data["Axis"]); + } + + /* Draw a scatter plot chart */ + function drawScatterPlotChart($Format=NULL) + { + $PlotSize = isset($Format["PlotSize"]) ? $Format["PlotSize"] : 3; + $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 250; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 250; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 250; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30; + $BorderSize = isset($Format["BorderSize"]) ? $Format["BorderSize"] : 1; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL; + $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2; + + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha); + + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE ) + { + $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"]; + $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"]; + + if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; } + + if ( isset($Series["Picture"]) && $Series["Picture"] != "" ) + { $Picture = $Series["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->pChartObject->getPicInfo($Picture); } + else + { $Picture = NULL; } + + $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis); + if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; } + $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis); + if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; } + + $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]); + + foreach($PosArrayX as $Key => $Value) + { + $X = $Value; $Y = $PosArrayY[$Key]; + + if ( $X != VOID && $Y != VOID ) + { + $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2); + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PlotSize+$BorderSize),$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); } + + if( isset($Series["Shape"]) ) + { $this->pChartObject->drawShape($X,$Y,$Series["Shape"],$PlotSize,$PlotBorder,$BorderSize,$Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"],$Series["Color"]["Alpha"],$BorderR,$BorderG,$BorderB,$BorderAlpha); } + elseif ( $Picture == NULL ) + { + if ( $PlotBorder ) { $this->pChartObject->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,$BorderColor); } + $this->pChartObject->drawFilledCircle($X,$Y,$PlotSize,$Color); + } + else + { $this->pChartObject->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); } + } + } + } + } + } + + /* Draw a scatter line chart */ + function drawScatterLineChart($Format=NULL) + { + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL; + $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 10; + $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2; + + /* Parse all the series to draw */ + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE ) + { + $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"]; + $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"]; + $Ticks = $Series["Ticks"]; + $Weight = $Series["Weight"]; + + if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; } + + $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis); + if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; } + $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis); + if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; } + + $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]); + if ( $Ticks != 0 ) { $Color["Ticks"] = $Ticks; } + if ( $Weight != 0 ) { $Color["Weight"] = $Weight; } + + $LastX = VOID; $LastY = VOID; + foreach($PosArrayX as $Key => $Value) + { + $X = $Value; $Y = $PosArrayY[$Key]; + + if ( $X != VOID && $Y != VOID ) + { + $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2); + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); } + } + + if ( $X != VOID && $Y != VOID && $LastX != VOID && $LastY != VOID) + $this->pChartObject->drawLine($LastX,$LastY,$X,$Y,$Color); + + $LastX = $X; $LastY = $Y; + } + } + } + } + + /* Draw a scatter spline chart */ + function drawScatterSplineChart($Format=NULL) + { + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL; + $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 10; + $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2; + + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE ) + { + $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"]; + $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"]; + $Ticks = $Series["Ticks"]; + $Weight = $Series["Weight"]; + + if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; } + + $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis); + if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; } + $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis); + if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; } + + $SplineSettings = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]); + if ( $Ticks != 0 ) { $SplineSettings["Ticks"] = $Ticks; } + if ( $Weight != 0 ) { $SplineSettings["Weight"] = $Weight; } + + $LastX = VOID; $LastY = VOID; $WayPoints = ""; $Forces = ""; + foreach($PosArrayX as $Key => $Value) + { + $X = $Value; $Y = $PosArrayY[$Key]; + $Force = $this->pChartObject->getLength($LastX,$LastY,$X,$Y)/5; + + if ( $X != VOID && $Y != VOID ) + { + $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2); + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); } + } + + if ( $X != VOID && $Y != VOID ) + { $WayPoints[] = array($X,$Y); $Forces[] = $Force; } + + if ( $Y == VOID || $X == VOID ) + { $SplineSettings["Forces"] = $Forces; $this->pChartObject->drawSpline($WayPoints,$SplineSettings); $WayPoints = ""; $Forces = "";} + + $LastX = $X; $LastY = $Y; + } + $SplineSettings["Forces"] = $Forces; + $this->pChartObject->drawSpline($WayPoints,$SplineSettings); + } + } + } + + /* Return the scaled plot position */ + function getPosArray($Values,$AxisID) + { + $Data = $this->pDataObject->getData(); + + if ( !is_array($Values) ) { $Values = array($Values); } + + if ( $Data["Axis"][$AxisID]["Identity"] == AXIS_X ) + { + $Height = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2; + $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"]; + $Step = $Height / $ScaleHeight; + + $Result = ""; + foreach($Values as $Key => $Value) + { + if ( $Value == VOID ) + $Result[] = VOID; + else + $Result[] = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); + } + + if ( count($Result) == 1 ) { return($Result[0]); } else { return($Result); } + } + else + { + $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2; + $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"]; + $Step = $Height / $ScaleHeight; + + $Result = ""; + foreach($Values as $Key => $Value) + { + if ( $Value == VOID ) + $Result[] = VOID; + else + $Result[] = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); + } + + if ( count($Result) == 1 ) { return($Result[0]); } else { return($Result); } + } + } + + /* Draw the legend of the active series */ + function drawScatterLegend($X,$Y,$Format="") + { + $Family = isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX; + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize; + $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->pChartObject->FontColorR; + $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->pChartObject->FontColorG; + $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->pChartObject->FontColorB; + $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5; + $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5; + $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth; + $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight; + $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5; + $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5; + $R = isset($Format["R"]) ? $Format["R"] : 200; + $G = isset($Format["G"]) ? $Format["G"] : 200; + $B = isset($Format["B"]) ? $Format["B"] : 200; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND; + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL; + + if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; } + + $Data = $this->pDataObject->getData(); + + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE && isset($Series["Picture"])) + { + list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Series["Picture"]); + if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; } + if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; } + } + } + + $YStep = max($this->pChartObject->FontSize,$IconAreaHeight) + 5; + $XStep = $IconAreaWidth + 5; + $XStep = $XSpacing; + + $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X; + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE ) + { + if ( $Mode == LEGEND_VERTICAL ) + { + $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Series["Description"]); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Lines = preg_split("/\n/",$Series["Description"]); + $vY = $vY + max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + $Lines = preg_split("/\n/",$Series["Description"]); + $Width = ""; + foreach($Lines as $Key => $Value) + { + $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$FontName,$FontSize,0,$Value); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Width[] = $BoxArray[1]["X"]; + } + + $vX=max($Width)+$XStep; + } + } + } + $vY=$vY-$YStep; $vX=$vX-$XStep; + + $TopOffset = $Y - $Boundaries["T"]; + if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; } + + if ( $Style == LEGEND_ROUND ) + $this->pChartObject->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + elseif ( $Style == LEGEND_BOX ) + $this->pChartObject->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB)); + + $RestoreShadow = $this->pChartObject->Shadow; $this->Shadow = FALSE; + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE ) + { + $R = $Series["Color"]["R"]; $G = $Series["Color"]["G"]; $B = $Series["Color"]["B"]; + $Ticks = $Series["Ticks"]; $Weight = $Series["Weight"]; + + if ( isset($Series["Picture"]) ) + { + $Picture = $Series["Picture"]; + list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Picture); + $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2; + + $this->pChartObject->drawFromPNG($PicX-$PicWidth/2,$PicY-$PicHeight/2,$Picture); + } + else + { + if ( $Family == LEGEND_FAMILY_BOX ) + { + if ( $BoxWidth != $IconAreaWidth ) { $XOffset = floor(($IconAreaWidth-$BoxWidth)/2); } else { $XOffset = 0; } + if ( $BoxHeight != $IconAreaHeight ) { $YOffset = floor(($IconAreaHeight-$BoxHeight)/2); } else { $YOffset = 0; } + + $this->pChartObject->drawFilledRectangle($X+1+$XOffset,$Y+1+$YOffset,$X+$BoxWidth+$XOffset+1,$Y+$BoxHeight+1+$YOffset,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); + $this->pChartObject->drawFilledRectangle($X+$XOffset,$Y+$YOffset,$X+$BoxWidth+$XOffset,$Y+$BoxHeight+$YOffset,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20)); + } + elseif ( $Family == LEGEND_FAMILY_CIRCLE ) + { + $this->pChartObject->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20)); + $this->pChartObject->drawFilledCircle($X+$IconAreaWidth/2,$Y+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20)); + } + elseif ( $Family == LEGEND_FAMILY_LINE ) + { + $this->pChartObject->drawLine($X+1,$Y+1+$IconAreaHeight/2,$X+1+$IconAreaWidth,$Y+1+$IconAreaHeight/2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20,"Ticks"=>$Ticks,"Weight"=>$Weight)); + $this->pChartObject->drawLine($X,$Y+$IconAreaHeight/2,$X+$IconAreaWidth,$Y+$IconAreaHeight/2,array("R"=>$R,"G"=>$G,"B"=>$B,"Ticks"=>$Ticks,"Weight"=>$Weight)); + } + } + + if ( $Mode == LEGEND_VERTICAL ) + { + $Lines = preg_split("/\n/",$Series["Description"]); + foreach($Lines as $Key => $Value) + $this->pChartObject->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT)); + + $Y=$Y+max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + $Lines = preg_split("/\n/",$Series["Description"]); + $Width = ""; + foreach($Lines as $Key => $Value) + { + $BoxArray = $this->pChartObject->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT)); + $Width[] = $BoxArray[1]["X"]; + } + $X=max($Width)+2+$XStep; + } + } + } + + $this->Shadow = $RestoreShadow; + } + + /* Get the legend box size */ + function getScatterLegendSize($Format="") + { + $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName; + $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize; + $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5; + $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5; + $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND; + $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL; + + $YStep = max($this->pChartObject->FontSize,$BoxSize) + 5; + $XStep = $BoxSize + 5; + + $X=100; $Y=100; + + $Data = $this->pDataObject->getData(); + + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE && isset($Series["Picture"])) + { + list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Series["Picture"]); + if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; } + if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; } + } + } + + $YStep = max($this->pChartObject->FontSize,$IconAreaHeight) + 5; + $XStep = $IconAreaWidth + 5; + $XStep = $XSpacing; + + $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X; + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE ) + { + if ( $Mode == LEGEND_VERTICAL ) + { + $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Series["Description"]); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Lines = preg_split("/\n/",$Series["Description"]); + $vY = $vY + max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5; + } + elseif ( $Mode == LEGEND_HORIZONTAL ) + { + $Lines = preg_split("/\n/",$Series["Description"]); + $Width = ""; + foreach($Lines as $Key => $Value) + { + $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$FontName,$FontSize,0,$Value); + + if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; } + if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; } + if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; } + + $Width[] = $BoxArray[1]["X"]; + } + + $vX=max($Width)+$XStep; + } + } + } + $vY=$vY-$YStep; $vX=$vX-$XStep; + + $TopOffset = $Y - $Boundaries["T"]; + if ( $Boundaries["B"]-($vY+$BoxSize) < $TopOffset ) { $Boundaries["B"] = $vY+$BoxSize+$TopOffset; } + + $Width = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin); + $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin); + + return(array("Width"=>$Width,"Height"=>$Height)); + } + + /* Draw the line of best fit */ + function drawScatterBestFit($Format="") + { + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 0; + + $Data = $this->pDataObject->getData(); + + foreach($Data["ScatterSeries"] as $Key => $Series) + { + if ( $Series["isDrawable"] == TRUE ) + { + $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"]; + $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"]; + + $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]); + $Color["Ticks"] = $Ticks; + + $PosArrayX = $Data["Series"][$Series["X"]]["Data"]; + $PosArrayY = $Data["Series"][$Series["Y"]]["Data"]; + + $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0; + foreach($PosArrayX as $Key => $Value) + { + $X = $Value; $Y = $PosArrayY[$Key]; + + $Sxy = $Sxy + $X*$Y; + $Sx = $Sx + $X; + $Sy = $Sy + $Y; + $Sxx = $Sxx + $X*$X; + } + + $n = count($PosArrayX); + + if ((($n*$Sxx) == ($Sx*$Sx))) + { + $X1 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"],$SerieXAxis); + $X2 = $X1; + $Y1 = $this->pChartObject->GraphAreaY1; + $Y2 = $this->pChartObject->GraphAreaY2; + } + else + { + $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx)); + $B = (($Sy)-($M*$Sx))/($n); + + $X1 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"],$SerieXAxis); + $Y1 = $this->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMin"] + $B,$SerieYAxis); + $X2 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMax"],$SerieXAxis); + $Y2 = $this->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMax"] + $B,$SerieYAxis); + + $RealM = -($Y2-$Y1)/($X2-$X1); + + if ( $Y1 < $this->pChartObject->GraphAreaY1 ) { $X1 = $X1 + ($this->pChartObject->GraphAreaY1-$Y1/$RealM); $Y1 = $this->pChartObject->GraphAreaY1; } + if ( $Y1 > $this->pChartObject->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->pChartObject->GraphAreaY2)/$RealM; $Y1 = $this->pChartObject->GraphAreaY2; } + if ( $Y2 < $this->pChartObject->GraphAreaY1 ) { $X2 = $X2 - ($this->pChartObject->GraphAreaY1-$Y2)/$RealM; $Y2 = $this->pChartObject->GraphAreaY1; } + if ( $Y2 > $this->pChartObject->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->pChartObject->GraphAreaY2)/$RealM; $Y2 = $this->pChartObject->GraphAreaY2; } + } + + $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Color); + } + } + } + + function writeScatterLabel($ScatterSerieID,$Points,$Format="") + { + $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL; + $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX; + $Decimals = isset($Format["Decimals"]) ? $Format["Decimals"] : NULL; + + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + if ( !is_array($Points) ) { $Point = $Points; $Points = ""; $Points[0] = $Point; } + + if ( !isset($Data["ScatterSeries"][$ScatterSerieID]) ) + return(0); + + $Series = $Data["ScatterSeries"][$ScatterSerieID]; + $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"]; + $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"]; + + $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis); + if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; } + $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis); + if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; } + + foreach($Points as $Key => $Point) + { + if ( isset($PosArrayX[$Point]) && isset($PosArrayY[$Point]) ) + { + $X = floor($PosArrayX[$Point]); + $Y = floor($PosArrayY[$Point]); + + if ( $DrawPoint == LABEL_POINT_CIRCLE ) + $this->pChartObject->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + elseif ( $DrawPoint == LABEL_POINT_BOX ) + $this->pChartObject->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0)); + + $Serie = ""; + $Serie["R"] = $Series["Color"]["R"]; + $Serie["G"] = $Series["Color"]["G"]; + $Serie["B"] = $Series["Color"]["B"]; + $Serie["Alpha"] = $Series["Color"]["Alpha"]; + + $XAxisMode = $Data["Axis"][$SerieXAxis]["Display"]; + $XAxisFormat = $Data["Axis"][$SerieXAxis]["Format"]; + $XAxisUnit = $Data["Axis"][$SerieXAxis]["Unit"]; + if ( $Decimals == NULL ) { $XValue = $SerieValuesX[$Point]; } else { $XValue = round($SerieValuesX[$Point],$Decimals); } + $XValue = $this->pChartObject->scaleFormat($XValue,$XAxisMode,$XAxisFormat,$XAxisUnit); + + $YAxisMode = $Data["Axis"][$SerieYAxis]["Display"]; + $YAxisFormat = $Data["Axis"][$SerieYAxis]["Format"]; + $YAxisUnit = $Data["Axis"][$SerieYAxis]["Unit"]; + if ( $Decimals == NULL ) { $YValue = $SerieValuesY[$Point]; } else { $YValue = round($SerieValuesY[$Point],$Decimals); } + $YValue = $this->pChartObject->scaleFormat($YValue,$YAxisMode,$YAxisFormat,$YAxisUnit); + + $Caption = $XValue." / ".$YValue; + + if ( isset($Series["Description"]) ) + $Description = $Series["Description"]; + else + $Description = "No description"; + + $Series = ""; + $Series[] = array("Format"=>$Serie,"Caption"=>$Caption); + + $this->pChartObject->drawLabelBox($X,$Y-3,$Description,$Series,$Format); + } + } + } + + /* Draw a Scatter threshold */ + function drawScatterThreshold($Value,$Format="") + { + $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0; + $R = isset($Format["R"]) ? $Format["R"] : 255; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 50; + $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 3; + $Wide = isset($Format["Wide"]) ? $Format["Wide"] : FALSE; + $WideFactor = isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5; + $WriteCaption = isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE; + $Caption = isset($Format["Caption"]) ? $Format["Caption"] : NULL; + $CaptionAlign = isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP; + $CaptionOffset = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 10; + $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255; + $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255; + $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255; + $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100; + $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE; + $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE; + $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5; + $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE; + $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3; + $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0; + $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0; + $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0; + $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20; + $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : ""; + $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255; + $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255; + $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255; + $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100; + + $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius, + "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding, + "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha, + "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha); + + if ( $Caption == NULL ) { $Caption = $Value; } + + $Data = $this->pDataObject->getData(); + + if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); } + + if ( $Data["Axis"][$AxisID]["Identity"] == AXIS_Y ) + { + $X1 = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"]; + $X2 = $this->pChartObject->GraphAreaX2 - $Data["Axis"][$AxisID]["Margin"]; + $Y = $this->getPosArray($Value,$AxisID); + + $this->pChartObject->drawLine($X1,$Y,$X2,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $Wide ) + { + $this->pChartObject->drawLine($X1,$Y-1,$X2,$Y-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + $this->pChartObject->drawLine($X1,$Y+1,$X2,$Y+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + } + + if ( $WriteCaption ) + { + if ( $CaptionAlign == CAPTION_LEFT_TOP ) + { $X = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; } + else + { $X = $this->pChartObject->GraphAreaX2 - $Data["Axis"][$AxisID]["Margin"] - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; } + + $this->pChartObject->drawText($X,$Y,$Caption,$CaptionSettings); + } + + return(array("Y"=>$Y)); + } + elseif ( $Data["Axis"][$AxisID]["Identity"] == AXIS_X ) + { + $X = $this->getPosArray($Value,$AxisID); + $Y1 = $this->pChartObject->GraphAreaY1 + $Data["Axis"][$AxisID]["Margin"]; + $Y2 = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"]; + + $this->pChartObject->drawLine($X,$Y1,$X,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); + + if ( $Wide ) + { + $this->pChartObject->drawLine($X-1,$Y1,$X-1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + $this->pChartObject->drawLine($X+1,$Y1,$X+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks)); + } + + if ( $WriteCaption ) + { + if ( $CaptionAlign == CAPTION_LEFT_TOP ) + { $Y = $this->pChartObject->GraphAreaY1 + $Data["Axis"][$AxisID]["Margin"] + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; } + else + { $Y = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; } + + $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; + $this->pChartObject->drawText($X,$Y,$Caption,$CaptionSettings); + } + + return(array("X"=>$X)); + } + } + + /* Draw a Scatter threshold area */ + function drawScatterThresholdArea($Value1,$Value2,$Format="") + { + $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0; + $R = isset($Format["R"]) ? $Format["R"] : 255; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 20; + $Border = isset($Format["Border"]) ? $Format["Border"] : TRUE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B; + $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20; + $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2; + $AreaName = isset($Format["AreaName"]) ? $Format["AreaName"] : "La ouate de phoque"; //NULL; + $NameAngle = isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO; + $NameR = isset($Format["NameR"]) ? $Format["NameR"] : 255; + $NameG = isset($Format["NameG"]) ? $Format["NameG"] : 255; + $NameB = isset($Format["NameB"]) ? $Format["NameB"] : 255; + $NameAlpha = isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100; + $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE; + + if ($Value1 > $Value2) { list($Value1, $Value2) = array($Value2, $Value1); } + + $RestoreShadow = $this->pChartObject->Shadow; + if ( $DisableShadowOnArea && $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; } + + if ($BorderAlpha >100) { $BorderAlpha = 100;} + + $Data = $this->pDataObject->getData(); + + if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); } + + if ( $Data["Axis"][$AxisID]["Identity"] == AXIS_X ) + { + $Y1 = $this->pChartObject->GraphAreaY1 + $Data["Axis"][$AxisID]["Margin"]; + $Y2 = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"]; + $X1 = $this->getPosArray($Value1,$AxisID); + $X2 = $this->getPosArray($Value2,$AxisID); + + if ( $X1 <= $this->pChartObject->GraphAreaX1 ) { $X1 = $this->pChartObject->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; } + if ( $X2 >= $this->pChartObject->GraphAreaX2 ) { $X2 = $this->pChartObject->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; } + + $this->pChartObject->drawFilledRectangle($X1,$Y1,$X2,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + if ( $Border ) + { + $this->pChartObject->drawLine($X1,$Y1,$X1,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + $this->pChartObject->drawLine($X2,$Y1,$X2,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + } + + if ( $AreaName != NULL ) + { + $XPos = ($X2-$X1)/2 + $X1; + $YPos = ($Y2-$Y1)/2 + $Y1; + + if ( $NameAngle == ZONE_NAME_ANGLE_AUTO ) + { + $TxtPos = $this->pChartObject->getTextBox($XPos,$YPos,$this->pChartObject->FontName,$this->pChartObject->FontSize,0,$AreaName); + $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"]; + if ( abs($X2 - $X1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; } + } + $this->pChartObject->Shadow = $RestoreShadow; + $this->pChartObject->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); + if ( $DisableShadowOnArea ) { $this->pChartObject->Shadow = FALSE; } + } + + $this->pChartObject->Shadow = $RestoreShadow; + return(array("X1"=>$X1,"X2"=>$X2)); + } + elseif ( $Data["Axis"][$AxisID]["Identity"] == AXIS_Y ) + { + $X1 = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"]; + $X2 = $this->pChartObject->GraphAreaX2 - $Data["Axis"][$AxisID]["Margin"]; + $Y1 = $this->getPosArray($Value1,$AxisID); + $Y2 = $this->getPosArray($Value2,$AxisID); + + if ( $Y1 >= $this->pChartObject->GraphAreaY2 ) { $Y1 = $this->pChartObject->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; } + if ( $Y2 <= $this->pChartObject->GraphAreaY1 ) { $Y2 = $this->pChartObject->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; } + + $this->pChartObject->drawFilledRectangle($X1,$Y1,$X2,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha)); + + if ( $Border ) + { + $this->pChartObject->drawLine($X1,$Y1,$X2,$Y1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + $this->pChartObject->drawLine($X1,$Y2,$X2,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks)); + } + + if ( $AreaName != NULL ) + { + $XPos = ($X2-$X1)/2 + $X1; + $YPos = ($Y2-$Y1)/2 + $Y1; + + $this->pChartObject->Shadow = $RestoreShadow; + $this->pChartObject->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); + if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; } + } + + $this->pChartObject->Shadow = $RestoreShadow; + return(array("Y1"=>$Y1,"Y2"=>$Y2)); + } + } + } +?> \ No newline at end of file diff --git a/pChart/pSplit.class.php b/pChart/pSplit.class.php new file mode 100644 index 0000000..cbcf88c --- /dev/null +++ b/pChart/pSplit.class.php @@ -0,0 +1,131 @@ +<?php + /* + pSplit - class to draw spline splitted charts + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("TEXT_POS_TOP" , 690001); + define("TEXT_POS_RIGHT" , 690002); + + /* pSplit class definition */ + class pSplit + { + var $pChartObject; + + /* Class creator */ + function pSplit() + { } + + /* Create the encoded string */ + function drawSplitPath($Object,$Values,$Format="") + { + $this->pChartObject = $Object; + + $Spacing = isset($Format["Spacing"]) ? $Format["Spacing"] : 20; + $TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 2; + $TextPos = isset($Format["TextPos"]) ? $Format["TextPos"] : TEXT_POS_TOP; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL; + $Force = isset($Format["Force"]) ? $Format["Force"] : 70; + $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 15; + $FontSize = $Object->FontSize; + $X1 = $Object->GraphAreaX1; + $Y1 = $Object->GraphAreaY1; + $X2 = $Object->GraphAreaX2; + $Y2 = $Object->GraphAreaY2; + + /* Data Processing */ + $Data = $Values->getData(); + $Palette = $Values->getPalette(); + + $LabelSerie = $Data["Abscissa"]; + $DataSerie = ""; + + foreach($Data["Series"] as $SerieName => $Value) + { if ( $SerieName != $LabelSerie && $DataSerie == "" ) { $DataSerie = $SerieName; } } + + $DataSerieSum = array_sum($Data["Series"][$DataSerie]["Data"]); + $DataSerieCount = count($Data["Series"][$DataSerie]["Data"]); + + /* Scale Processing */ + if ( $TextPos == TEXT_POS_RIGHT ) + $YScale = (($Y2-$Y1) - (($DataSerieCount+1)*$Spacing)) / $DataSerieSum; + else + $YScale = (($Y2-$Y1) - ($DataSerieCount*$Spacing)) / $DataSerieSum; + $LeftHeight = $DataSerieSum * $YScale; + + /* Re-compute graph width depending of the text mode choosen */ + if ( $TextPos == TEXT_POS_RIGHT ) + { + $MaxWidth = 0; + foreach($Data["Series"][$LabelSerie]["Data"] as $Key => $Label) + { + $Boundardies = $Object->getTextBox(0,0,$Object->FontName,$Object->FontSize,0,$Label); + if ( $Boundardies[1]["X"] > $MaxWidth ) { $MaxWidth = $Boundardies[1]["X"] + $TextPadding*2; } + } + $X2 = $X2 - $MaxWidth; + } + + /* Drawing */ + $LeftY = ((($Y2-$Y1) / 2) + $Y1) - ($LeftHeight/2); + $RightY = $Y1; + $VectorX = (($X2-$X1) / 2); + + foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value) + { + if ( isset($Data["Series"][$LabelSerie]["Data"][$Key]) ) + $Label = $Data["Series"][$LabelSerie]["Data"][$Key]; + else + $Label = "-"; + + $LeftY1 = $LeftY; + $LeftY2 = $LeftY + $Value * $YScale; + + $RightY1 = $RightY + $Spacing; + $RightY2 = $RightY + $Spacing + $Value * $YScale;; + + $Settings = array("R"=>$Palette[$Key]["R"],"G"=>$Palette[$Key]["G"],"B"=>$Palette[$Key]["B"],"Alpha"=>$Palette[$Key]["Alpha"],"NoDraw"=>TRUE,"Segments"=>$Segments,"Surrounding"=>$Surrounding); + + $PolyGon = ""; + + $Angle = $Object->getAngle($X2,$RightY1,$X1,$LeftY1); + $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 + $X1; + $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1; + $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 + $X1; + $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1; + + $Points = $Object->drawBezier($X1,$LeftY1,$X2,$RightY1,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings); + foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; } + + + $Angle = $Object->getAngle($X2,$RightY2,$X1,$LeftY2); + $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 +$X1; + $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2; + $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 +$X1; + $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2; + + $Points = $Object->drawBezier($X1,$LeftY2,$X2,$RightY2,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings); + $Points = array_reverse($Points); + foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; } + + $Object->drawPolygon($PolyGon,$Settings); + + if ( $TextPos == TEXT_POS_RIGHT ) + $Object->drawText($X2+$TextPadding,($RightY2-$RightY1)/2+$RightY1,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); + else + $Object->drawText($X2,$RightY1-$TextPadding,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT)); + + $LeftY = $LeftY2; + $RightY = $RightY2; + } + } + } +?> \ No newline at end of file diff --git a/pChart/pSpring.class.php b/pChart/pSpring.class.php new file mode 100644 index 0000000..1a63b13 --- /dev/null +++ b/pChart/pSpring.class.php @@ -0,0 +1,868 @@ +<?php + /* + pSpring - class to draw spring graphs + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("NODE_TYPE_FREE" , 690001); + define("NODE_TYPE_CENTRAL" , 690002); + + define("NODE_SHAPE_CIRCLE" , 690011); + define("NODE_SHAPE_TRIANGLE" , 690012); + define("NODE_SHAPE_SQUARE" , 690013); + + define("ALGORITHM_RANDOM" , 690021); + define("ALGORITHM_WEIGHTED" , 690022); + define("ALGORITHM_CIRCULAR" , 690023); + define("ALGORITHM_CENTRAL" , 690024); + + define("LABEL_CLASSIC" , 690031); + define("LABEL_LIGHT" , 690032); + + /* pSpring class definition */ + class pSpring + { + var $History; + var $pChartObject; + var $Data; + var $Links; + var $X1; + var $Y1; + var $X2; + var $Y2; + var $AutoComputeFreeZone; + var $Labels; + + /* Class creator */ + function pSpring() + { + /* Initialise data arrays */ + $this->Data = ""; + $this->Links = ""; + + /* Set nodes defaults */ + $this->Default["R"] = 255; + $this->Default["G"] = 255; + $this->Default["B"] = 255; + $this->Default["Alpha"] = 100; + $this->Default["BorderR"] = 0; + $this->Default["BorderG"] = 0; + $this->Default["BorderB"] = 0; + $this->Default["BorderAlpha"] = 100; + $this->Default["Surrounding"] = NULL; + $this->Default["BackgroundR"] = 255; + $this->Default["BackgroundG"] = 255; + $this->Default["BackgroundB"] = 255; + $this->Default["BackgroundAlpha"] = 0; + $this->Default["Force"] = 1; + $this->Default["NodeType"] = NODE_TYPE_FREE; + $this->Default["Size"] = 5; + $this->Default["Shape"] = NODE_SHAPE_CIRCLE; + $this->Default["FreeZone"] = 40; + $this->Default["LinkR"] = 0; + $this->Default["LinkG"] = 0; + $this->Default["LinkB"] = 0; + $this->Default["LinkAlpha"] = 0; + + $this->Labels["Type"] = LABEL_CLASSIC; + $this->Labels["R"] = 0; + $this->Labels["G"] = 0; + $this->Labels["B"] = 0; + $this->Labels["Alpha"] = 100; + + $this->AutoComputeFreeZone = FALSE; + } + + /* Set default links options */ + function setLinkDefaults($Settings="") + { + if ( isset($Settings["R"]) ) { $this->Default["LinkR"] = $Settings["R"]; } + if ( isset($Settings["G"]) ) { $this->Default["LinkG"] = $Settings["G"]; } + if ( isset($Settings["B"]) ) { $this->Default["LinkB"] = $Settings["B"]; } + if ( isset($Settings["Alpha"]) ) { $this->Default["LinkAlpha"] = $Settings["Alpha"]; } + } + + /* Set default links options */ + function setLabelsSettings($Settings="") + { + if ( isset($Settings["Type"]) ) { $this->Labels["Type"] = $Settings["Type"]; } + if ( isset($Settings["R"]) ) { $this->Labels["R"] = $Settings["R"]; } + if ( isset($Settings["G"]) ) { $this->Labels["G"] = $Settings["G"]; } + if ( isset($Settings["B"]) ) { $this->Labels["B"] = $Settings["B"]; } + if ( isset($Settings["Alpha"]) ) { $this->Labels["Alpha"] = $Settings["Alpha"]; } + } + + /* Auto compute the FreeZone size based on the number of connections */ + function autoFreeZone() + { + /* Check connections reciprocity */ + foreach($this->Data as $Key => $Settings) + { + if ( isset($Settings["Connections"]) ) + { $this->Data[$Key]["FreeZone"] = count($Settings["Connections"])*10 + 20; } + else + { $this->Data[$Key]["FreeZone"] = 20; } + } + + } + + /* Set link properties */ + function linkProperties($FromNode,$ToNode,$Settings) + { + if ( !isset($this->Data[$FromNode]) ) { return(0); } + if ( !isset($this->Data[$ToNode]) ) { return(0); } + + $R = isset($Settings["R"]) ? $Settings["R"] : 0; + $G = isset($Settings["G"]) ? $Settings["G"] : 0; + $B = isset($Settings["B"]) ? $Settings["B"] : 0; + $Alpha = isset($Settings["Alpha"]) ? $Settings["Alpha"] : 100; + $Name = isset($Settings["Name"]) ? $Settings["Name"] : NULL; + $Ticks = isset($Settings["Ticks"]) ? $Settings["Ticks"] : NULL; + + $this->Links[$FromNode][$ToNode]["R"] = $R; $this->Links[$ToNode][$FromNode]["R"] = $R; + $this->Links[$FromNode][$ToNode]["G"] = $G; $this->Links[$ToNode][$FromNode]["G"] = $G; + $this->Links[$FromNode][$ToNode]["B"] = $B; $this->Links[$ToNode][$FromNode]["B"] = $B; + $this->Links[$FromNode][$ToNode]["Alpha"] = $Alpha; $this->Links[$ToNode][$FromNode]["Alpha"] = $Alpha; + $this->Links[$FromNode][$ToNode]["Name"] = $Name; $this->Links[$ToNode][$FromNode]["Name"] = $Name; + $this->Links[$FromNode][$ToNode]["Ticks"] = $Ticks; $this->Links[$ToNode][$FromNode]["Ticks"] = $Ticks; + } + + function setNodeDefaults($Settings="") + { + if ( isset($Settings["R"]) ) { $this->Default["R"] = $Settings["R"]; } + if ( isset($Settings["G"]) ) { $this->Default["G"] = $Settings["G"]; } + if ( isset($Settings["B"]) ) { $this->Default["B"] = $Settings["B"]; } + if ( isset($Settings["Alpha"]) ) { $this->Default["Alpha"] = $Settings["Alpha"]; } + if ( isset($Settings["BorderR"]) ) { $this->Default["BorderR"] = $Settings["BorderR"]; } + if ( isset($Settings["BorderG"]) ) { $this->Default["BorderG"] = $Settings["BorderG"]; } + if ( isset($Settings["BorderB"]) ) { $this->Default["BorderB"] = $Settings["BorderB"]; } + if ( isset($Settings["BorderAlpha"]) ) { $this->Default["BorderAlpha"] = $Settings["BorderAlpha"]; } + if ( isset($Settings["Surrounding"]) ) { $this->Default["Surrounding"] = $Settings["Surrounding"]; } + if ( isset($Settings["BackgroundR"]) ) { $this->Default["BackgroundR"] = $Settings["BackgroundR"]; } + if ( isset($Settings["BackgroundG"]) ) { $this->Default["BackgroundG"] = $Settings["BackgroundG"]; } + if ( isset($Settings["BackgroundB"]) ) { $this->Default["BackgroundB"] = $Settings["BackgroundB"]; } + if ( isset($Settings["BackgroundAlpha"]) ) { $this->Default["BackgroundAlpha"] = $Settings["BackgroundAlpha"]; } + if ( isset($Settings["NodeType"]) ) { $this->Default["NodeType"] = $Settings["NodeType"]; } + if ( isset($Settings["Size"]) ) { $this->Default["Size"] = $Settings["Size"]; } + if ( isset($Settings["Shape"]) ) { $this->Default["Shape"] = $Settings["Shape"]; } + if ( isset($Settings["FreeZone"]) ) { $this->Default["FreeZone"] = $Settings["FreeZone"]; } + } + + /* Add a node */ + function addNode($NodeID,$Settings="") + { + /* if the node already exists, ignore */ + if (isset($this->Data[$NodeID])) { return(0); } + + $Name = isset($Settings["Name"]) ? $Settings["Name"] : "Node ".$NodeID; + $Connections = isset($Settings["Connections"]) ? $Settings["Connections"] : NULL; + + $R = isset($Settings["R"]) ? $Settings["R"] : $this->Default["R"]; + $G = isset($Settings["G"]) ? $Settings["G"] : $this->Default["G"]; + $B = isset($Settings["B"]) ? $Settings["B"] : $this->Default["B"]; + $Alpha = isset($Settings["Alpha"]) ? $Settings["Alpha"] : $this->Default["Alpha"]; + $BorderR = isset($Settings["BorderR"]) ? $Settings["BorderR"] : $this->Default["BorderR"]; + $BorderG = isset($Settings["BorderG"]) ? $Settings["BorderG"] : $this->Default["BorderG"]; + $BorderB = isset($Settings["BorderB"]) ? $Settings["BorderB"] : $this->Default["BorderB"]; + $BorderAlpha = isset($Settings["BorderAlpha"]) ? $Settings["BorderAlpha"] : $this->Default["BorderAlpha"]; + $Surrounding = isset($Settings["Surrounding"]) ? $Settings["Surrounding"] : $this->Default["Surrounding"]; + $BackgroundR = isset($Settings["BackgroundR"]) ? $Settings["BackgroundR"] : $this->Default["BackgroundR"]; + $BackgroundG = isset($Settings["BackgroundG"]) ? $Settings["BackgroundG"] : $this->Default["BackgroundG"]; + $BackgroundB = isset($Settings["BackgroundB"]) ? $Settings["BackgroundB"] : $this->Default["BackgroundB"]; + $BackgroundAlpha = isset($Settings["BackgroundAlpha"]) ? $Settings["BackgroundAlpha"] : $this->Default["BackgroundAlpha"]; + $Force = isset($Settings["Force"]) ? $Settings["Force"] : $this->Default["Force"]; + $NodeType = isset($Settings["NodeType"]) ? $Settings["NodeType"] : $this->Default["NodeType"]; + $Size = isset($Settings["Size"]) ? $Settings["Size"] : $this->Default["Size"]; + $Shape = isset($Settings["Shape"]) ? $Settings["Shape"] : $this->Default["Shape"]; + $FreeZone = isset($Settings["FreeZone"]) ? $Settings["FreeZone"] : $this->Default["FreeZone"]; + + if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; } + + $this->Data[$NodeID]["R"] = $R; $this->Data[$NodeID]["G"] = $G; $this->Data[$NodeID]["B"] = $B; $this->Data[$NodeID]["Alpha"] = $Alpha; + $this->Data[$NodeID]["BorderR"] = $BorderR; $this->Data[$NodeID]["BorderG"] = $BorderG; $this->Data[$NodeID]["BorderB"] = $BorderB; $this->Data[$NodeID]["BorderAlpha"] = $BorderAlpha; + $this->Data[$NodeID]["BackgroundR"] = $BackgroundR; $this->Data[$NodeID]["BackgroundG"] = $BackgroundG; $this->Data[$NodeID]["BackgroundB"] = $BackgroundB; $this->Data[$NodeID]["BackgroundAlpha"] = $BackgroundAlpha; + $this->Data[$NodeID]["Name"] = $Name; + $this->Data[$NodeID]["Force"] = $Force; + $this->Data[$NodeID]["Type"] = $NodeType; + $this->Data[$NodeID]["Size"] = $Size; + $this->Data[$NodeID]["Shape"] = $Shape; + $this->Data[$NodeID]["FreeZone"] = $FreeZone; + if ( $Connections != NULL ) + { + if ( is_array($Connections ) ) + { + foreach($Connections as $Key => $Value) + $this->Data[$NodeID]["Connections"][] = $Value; + } + else + $this->Data[$NodeID]["Connections"][] = $Connections; + } + } + + /* Set color attribute for a list of nodes */ + function setNodesColor($Nodes,$Settings="") + { + if ( is_array($Nodes) ) + { + foreach ($Nodes as $Key => $NodeID) + { + if (isset($this->Data[$NodeID]) ) + { + if ( isset($Settings["R"]) ) { $this->Data[$NodeID]["R"] = $Settings["R"]; } + if ( isset($Settings["G"]) ) { $this->Data[$NodeID]["G"] = $Settings["G"]; } + if ( isset($Settings["B"]) ) { $this->Data[$NodeID]["B"] = $Settings["B"]; } + if ( isset($Settings["Alpha"]) ) { $this->Data[$NodeID]["Alpha"] = $Settings["Alpha"]; } + if ( isset($Settings["BorderR"]) ) { $this->Data[$NodeID]["BorderR"] = $Settings["BorderR"]; } + if ( isset($Settings["BorderG"]) ) { $this->Data[$NodeID]["BorderG"] = $Settings["BorderG"]; } + if ( isset($Settings["BorderB"]) ) { $this->Data[$NodeID]["BorderB"] = $Settings["BorderB"]; } + if ( isset($Settings["BorderAlpha"]) ) { $this->Data[$NodeID]["BorderAlpha"] = $Settings["BorderAlpha"]; } + if ( isset($Settings["Surrounding"]) ) { $this->Data[$NodeID]["BorderR"] = $this->Data[$NodeID]["R"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderG"] = $this->Data[$NodeID]["G"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderB"] = $this->Data[$NodeID]["B"] + $Settings["Surrounding"]; } + } + } + } + else + { + if ( isset($Settings["R"]) ) { $this->Data[$Nodes]["R"] = $Settings["R"]; } + if ( isset($Settings["G"]) ) { $this->Data[$Nodes]["G"] = $Settings["G"]; } + if ( isset($Settings["B"]) ) { $this->Data[$Nodes]["B"] = $Settings["B"]; } + if ( isset($Settings["Alpha"]) ) { $this->Data[$Nodes]["Alpha"] = $Settings["Alpha"]; } + if ( isset($Settings["BorderR"]) ) { $this->Data[$Nodes]["BorderR"] = $Settings["BorderR"]; } + if ( isset($Settings["BorderG"]) ) { $this->Data[$Nodes]["BorderG"] = $Settings["BorderG"]; } + if ( isset($Settings["BorderB"]) ) { $this->Data[$Nodes]["BorderB"] = $Settings["BorderB"]; } + if ( isset($Settings["BorderAlpha"]) ) { $this->Data[$Nodes]["BorderAlpha"] = $Settings["BorderAlpha"]; } + if ( isset($Settings["Surrounding"]) ) { $this->Data[$Nodes]["BorderR"] = $this->Data[$NodeID]["R"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderG"] = $this->Data[$NodeID]["G"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderB"] = $this->Data[$NodeID]["B"] + $Settings["Surrounding"]; } + } + } + + /* Returns all the nodes details */ + function dumpNodes() + { return($this->Data); } + + /* Check if a connection exists and create it if required */ + function checkConnection($SourceID, $TargetID) + { + if ( isset($this->Data[$SourceID]["Connections"]) ) + { + foreach ($this->Data[$SourceID]["Connections"] as $Key => $ConnectionID) + { if ( $TargetID == $ConnectionID ) { return(TRUE); } } + } + $this->Data[$SourceID]["Connections"][] = $TargetID; + } + /* Get the median linked nodes position */ + function getMedianOffset($Key,$X,$Y) + { + $Cpt = 1; + if ( isset($this->Data[$Key]["Connections"]) ) + { + foreach($this->Data[$Key]["Connections"] as $ID => $NodeID) + { + if ( isset($this->Data[$NodeID]["X"]) && isset($this->Data[$NodeID]["Y"]) ) + { + $X = $X + $this->Data[$NodeID]["X"]; + $Y = $Y + $this->Data[$NodeID]["Y"]; + $Cpt++; + } + } + } + return(array("X"=>$X/$Cpt,"Y"=>$Y/$Cpt)); + } + + /* Return the ID of the attached partner with the biggest weight */ + function getBiggestPartner($Key) + { + if ( !isset($this->Data[$Key]["Connections"]) ) { return(""); } + + $MaxWeight = 0; $Result = ""; + foreach($this->Data[$Key]["Connections"] as $Key => $PeerID) + { + if ( $this->Data[$PeerID]["Weight"] > $MaxWeight ) + { $MaxWeight = $this->Data[$PeerID]["Weight"]; $Result = $PeerID; } + } + return($Result); + } + + /* Do the initial node positions computing pass */ + function firstPass($Algorithm) + { + $CenterX = ($this->X2 - $this->X1) / 2 + $this->X1; + $CenterY = ($this->Y2 - $this->Y1) / 2 + $this->Y1; + + /* Check connections reciprocity */ + foreach($this->Data as $Key => $Settings) + { + if ( isset($Settings["Connections"]) ) + { + foreach($Settings["Connections"] as $ID => $ConnectionID) + $this->checkConnection($ConnectionID,$Key); + } + } + + if ( $this->AutoComputeFreeZone ) { $this->autoFreeZone(); } + + /* Get the max number of connections */ + $MaxConnections = 0; + foreach($this->Data as $Key => $Settings) + { if ( isset($Settings["Connections"]) ) { if ( $MaxConnections < count($Settings["Connections"] ) ) { $MaxConnections = count($Settings["Connections"]); } } } + + if ( $Algorithm == ALGORITHM_WEIGHTED ) + { + foreach($this->Data as $Key => $Settings) + { + if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; } + if ( $Settings["Type"] == NODE_TYPE_FREE ) + { + if ( isset($Settings["Connections"]) ) + { $Connections = count($Settings["Connections"]); } + else + { $Connections = 0; } + + $Ring = $MaxConnections - $Connections; + $Angle = rand(0,360); + + $this->Data[$Key]["X"] = cos(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterX; + $this->Data[$Key]["Y"] = sin(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterY; + } + } + } + elseif ( $Algorithm == ALGORITHM_CENTRAL ) + { + /* Put a weight on each nodes */ + foreach($this->Data as $Key => $Settings) + { + if ( isset($Settings["Connections"]) ) + $this->Data[$Key]["Weight"] = count($Settings["Connections"]); + else + $this->Data[$Key]["Weight"] = 0; + } + + $MaxConnections = $MaxConnections + 1; + for($i=$MaxConnections;$i>=0;$i--) + { + foreach($this->Data as $Key => $Settings) + { + if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; } + if ( $Settings["Type"] == NODE_TYPE_FREE ) + { + if ( isset($Settings["Connections"]) ) + { $Connections = count($Settings["Connections"]); } + else + { $Connections = 0; } + + if ( $Connections == $i ) + { + $BiggestPartner = $this->getBiggestPartner($Key); + if ( $BiggestPartner != "" ) + { + $Ring = $this->Data[$BiggestPartner]["FreeZone"]; + $Weight = $this->Data[$BiggestPartner]["Weight"]; + $AngleDivision = 360 / $this->Data[$BiggestPartner]["Weight"]; + $Done = FALSE; $Tries = 0; + while (!$Done && $Tries <= $Weight*2) + { + $Tries++; + $Angle = floor(rand(0,$Weight)*$AngleDivision); + if ( !isset($this->Data[$BiggestPartner]["Angular"][$Angle]) || !isset($this->Data[$BiggestPartner]["Angular"]) ) + { + $this->Data[$BiggestPartner]["Angular"][$Angle] = $Angle; + $Done = TRUE; + } + } + if ( !$Done ) + { $Angle = rand(0,360); $this->Data[$BiggestPartner]["Angular"][$Angle] = $Angle; } + + $X = cos(deg2rad($Angle)) * ($Ring) + $this->Data[$BiggestPartner]["X"]; + $Y = sin(deg2rad($Angle)) * ($Ring) + $this->Data[$BiggestPartner]["Y"]; + + $this->Data[$Key]["X"] = $X; + $this->Data[$Key]["Y"] = $Y; + } + } + } + } + } + } + elseif ( $Algorithm == ALGORITHM_CIRCULAR ) + { + $MaxConnections = $MaxConnections + 1; + for($i=$MaxConnections;$i>=0;$i--) + { + foreach($this->Data as $Key => $Settings) + { + if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; } + if ( $Settings["Type"] == NODE_TYPE_FREE ) + { + if ( isset($Settings["Connections"]) ) + { $Connections = count($Settings["Connections"]); } + else + { $Connections = 0; } + + if ( $Connections == $i ) + { + $Ring = $MaxConnections - $Connections; + $Angle = rand(0,360); + + $X = cos(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterX; + $Y = sin(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterY; + + $MedianOffset = $this->getMedianOffset($Key,$X,$Y); + + $this->Data[$Key]["X"] = $MedianOffset["X"]; + $this->Data[$Key]["Y"] = $MedianOffset["Y"]; + } + } + } + } + } + elseif ( $Algorithm == ALGORITHM_RANDOM ) + { + foreach($this->Data as $Key => $Settings) + { + if ( $Settings["Type"] == NODE_TYPE_FREE ) + { + $this->Data[$Key]["X"] = $CenterX + rand(-20,20); + $this->Data[$Key]["Y"] = $CenterY + rand(-20,20); + } + if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; } + } + } + } + + /* Compute one pass */ + function doPass() + { + /* Compute vectors */ + foreach($this->Data as $Key => $Settings) + { + if ( $Settings["Type"] != NODE_TYPE_CENTRAL ) + { + unset($this->Data[$Key]["Vectors"]); + + $X1 = $Settings["X"]; + $Y1 = $Settings["Y"]; + + /* Repulsion vectors */ + foreach($this->Data as $Key2 => $Settings2) + { + if ( $Key != $Key2 ) + { + $X2 = $this->Data[$Key2]["X"]; + $Y2 = $this->Data[$Key2]["Y"]; + $FreeZone = $this->Data[$Key2]["FreeZone"]; + + $Distance = $this->getDistance($X1,$Y1,$X2,$Y2); + $Angle = $this->getAngle($X1,$Y1,$X2,$Y2) + 180; + + /* Nodes too close, repulsion occurs */ + if ( $Distance < $FreeZone ) + { + $Force = log(pow(2,$FreeZone-$Distance)); + if ( $Force > 1 ) + { $this->Data[$Key]["Vectors"][] = array("Type"=>"R","Angle"=>$Angle % 360,"Force"=>$Force); } + } + } + } + + /* Attraction vectors */ + if ( isset($Settings["Connections"]) ) + { + foreach($Settings["Connections"] as $ID => $NodeID) + { + if ( isset($this->Data[$NodeID]) ) + { + $X2 = $this->Data[$NodeID]["X"]; + $Y2 = $this->Data[$NodeID]["Y"]; + $FreeZone = $this->Data[$Key2]["FreeZone"]; + + $Distance = $this->getDistance($X1,$Y1,$X2,$Y2); + $Angle = $this->getAngle($X1,$Y1,$X2,$Y2); + + if ( $Distance > $FreeZone ) + $Force = log(($Distance-$FreeZone)+1); + else + { $Force = log(($FreeZone-$Distance)+1); ($Angle = $Angle + 180); } + + if ( $Force > 1 ) + $this->Data[$Key]["Vectors"][] = array("Type"=>"A","Angle"=>$Angle % 360,"Force"=>$Force); + } + } + } + } + } + + /* Move the nodes accoding to the vectors */ + foreach($this->Data as $Key => $Settings) + { + $X = $Settings["X"]; + $Y = $Settings["Y"]; + + if ( isset($Settings["Vectors"]) && $Settings["Type"] != NODE_TYPE_CENTRAL ) + { + foreach($Settings["Vectors"] as $ID => $Vector) + { + $Type = $Vector["Type"]; + $Force = $Vector["Force"]; + $Angle = $Vector["Angle"]; + $Factor = $Type == "A" ? $this->MagneticForceA : $this->MagneticForceR; + + $X = cos(deg2rad($Angle)) * $Force * $Factor + $X; + $Y = sin(deg2rad($Angle)) * $Force * $Factor + $Y; + } + } + + $this->Data[$Key]["X"] = $X; + $this->Data[$Key]["Y"] = $Y; + } + } + + function lastPass() + { + /* Put everything inside the graph area */ + foreach($this->Data as $Key => $Settings) + { + $X = $Settings["X"]; + $Y = $Settings["Y"]; + + if ( $X < $this->X1 ) { $X = $this->X1; } + if ( $X > $this->X2 ) { $X = $this->X2; } + if ( $Y < $this->Y1 ) { $Y = $this->Y1; } + if ( $Y > $this->Y2 ) { $Y = $this->Y2; } + + $this->Data[$Key]["X"] = $X; + $this->Data[$Key]["Y"] = $Y; + } + + /* Dump all links */ + $Links = ""; + foreach($this->Data as $Key => $Settings) + { + $X1 = $Settings["X"]; + $Y1 = $Settings["Y"]; + + if ( isset($Settings["Connections"]) ) + { + foreach ($Settings["Connections"] as $ID => $NodeID) + { + if ( isset($this->Data[$NodeID]) ) + { + $X2 = $this->Data[$NodeID]["X"]; + $Y2 = $this->Data[$NodeID]["Y"]; + + $Links[] = array("X1"=>$X1,"Y1"=>$Y1,"X2"=>$X2,"Y2"=>$Y2,"Source"=>$Settings["Name"],"Destination"=>$this->Data[$NodeID]["Name"]); + } + } + } + } + + /* Check collisions */ + $Conflicts = 0; + foreach($this->Data as $Key => $Settings) + { + $X1 = $Settings["X"]; + $Y1 = $Settings["Y"]; + + if ( isset($Settings["Connections"]) ) + { + foreach ($Settings["Connections"] as $ID => $NodeID) + { + if ( isset($this->Data[$NodeID]) ) + { + $X2 = $this->Data[$NodeID]["X"]; + $Y2 = $this->Data[$NodeID]["Y"]; + + foreach($Links as $IDLinks => $Link) + { + $X3 = $Link["X1"]; $Y3 = $Link["Y1"]; $X4 = $Link["X2"]; $Y4 = $Link["Y2"]; + + if ( !($X1 == $X3 && $X2 == $X4 && $Y1 == $Y3 && $Y2 == $Y4 ) ) + { + if ( $this->intersect($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4) ) + { + if ( $Link["Source"] != $Settings["Name"] && $Link["Source"] != $this->Data[$NodeID]["Name"] && $Link["Destination"] != $Settings["Name"] && $Link["Destination"] != $this->Data[$NodeID]["Name"] ) + { $Conflicts++; } + } + } + } + } + } + } + } + return($Conflicts/2); + } + + /* Center the graph */ + function center() + { + /* Determine the real center */ + $TargetCenterX = ($this->X2 - $this->X1) / 2 + $this->X1; + $TargetCenterY = ($this->Y2 - $this->Y1) / 2 + $this->Y1; + + /* Get current boundaries */ + $XMin = $this->X2; $XMax = $this->X1; + $YMin = $this->Y2; $YMax = $this->Y1; + foreach($this->Data as $Key => $Settings) + { + $X = $Settings["X"]; + $Y = $Settings["Y"]; + + if ( $X < $XMin) { $XMin = $X; } + if ( $X > $XMax) { $XMax = $X; } + if ( $Y < $YMin) { $YMin = $Y; } + if ( $Y > $YMax) { $YMax = $Y; } + } + $CurrentCenterX = ($XMax - $XMin) / 2 + $XMin; + $CurrentCenterY = ($YMax - $YMin) / 2 + $YMin; + + /* Compute the offset to apply */ + $XOffset = $TargetCenterX - $CurrentCenterX; + $YOffset = $TargetCenterY - $CurrentCenterY; + + /* Correct the points position */ + foreach($this->Data as $Key => $Settings) + { + $this->Data[$Key]["X"] = $Settings["X"] + $XOffset; + $this->Data[$Key]["Y"] = $Settings["Y"] + $YOffset; + } + } + + /* Create the encoded string */ + function drawSpring($Object,$Settings="") + { + $this->pChartObject = $Object; + + $Pass = isset($Settings["Pass"]) ? $Settings["Pass"] : 50; + $Retries = isset($Settings["Retry"]) ? $Settings["Retry"] : 10; + $this->MagneticForceA = isset($Settings["MagneticForceA"]) ? $Settings["MagneticForceA"] : 1.5; + $this->MagneticForceR = isset($Settings["MagneticForceR"]) ? $Settings["MagneticForceR"] : 2; + $this->RingSize = isset($Settings["RingSize"]) ? $Settings["RingSize"] : 40; + $DrawVectors = isset($Settings["DrawVectors"]) ? $Settings["DrawVectors"] : FALSE; + $DrawQuietZone = isset($Settings["DrawQuietZone"]) ? $Settings["DrawQuietZone"] : FALSE; + $CenterGraph = isset($Settings["CenterGraph"]) ? $Settings["CenterGraph"] : TRUE; + $TextPadding = isset($Settings["TextPadding"]) ? $Settings["TextPadding"] : 4; + $Algorithm = isset($Settings["Algorithm"]) ? $Settings["Algorithm"] : ALGORITHM_WEIGHTED; + + $FontSize = $Object->FontSize; + $this->X1 = $Object->GraphAreaX1; + $this->Y1 = $Object->GraphAreaY1; + $this->X2 = $Object->GraphAreaX2; + $this->Y2 = $Object->GraphAreaY2; + + $Conflicts = 1; $Jobs = 0; $this->History["MinimumConflicts"] = -1; + while ($Conflicts != 0 && $Jobs < $Retries ) + { + $Jobs++; + + /* Compute the initial settings */ + $this->firstPass($Algorithm); + + /* Apply the vectors */ + if ( $Pass > 0 ) + { + for ($i=0; $i<=$Pass; $i++) { $this->doPass(); } + } + + $Conflicts = $this->lastPass(); + if ( $this->History["MinimumConflicts"] == -1 || $Conflicts < $this->History["MinimumConflicts"] ) + { $this->History["MinimumConflicts"] = $Conflicts; $this->History["Result"] = $this->Data; } + } + + $Conflicts = $this->History["MinimumConflicts"]; + $this->Data = $this->History["Result"]; + + if ( $CenterGraph ) { $this->center(); } + + /* Draw the connections */ + $Drawn = ""; + foreach($this->Data as $Key => $Settings) + { + $X = $Settings["X"]; + $Y = $Settings["Y"]; + + if ( isset($Settings["Connections"]) ) + { + foreach ($Settings["Connections"] as $ID => $NodeID) + { + if ( !isset($Drawn[$Key]) ) { $Drawn[$Key] = ""; } + if ( !isset($Drawn[$NodeID]) ) { $Drawn[$NodeID] = ""; } + + if ( isset($this->Data[$NodeID]) && !isset($Drawn[$Key][$NodeID]) && !isset($Drawn[$NodeID][$Key]) ) + { + $Color = array("R"=>$this->Default["LinkR"],"G"=>$this->Default["LinkG"],"B"=>$this->Default["LinkB"],"Alpha"=>$this->Default["Alpha"]); + + if ( $this->Links != "" ) + { + if ( isset($this->Links[$Key][$NodeID]["R"]) ) + { $Color = array("R"=>$this->Links[$Key][$NodeID]["R"],"G"=>$this->Links[$Key][$NodeID]["G"],"B"=>$this->Links[$Key][$NodeID]["B"],"Alpha"=>$this->Links[$Key][$NodeID]["Alpha"]); } + + if ( isset($this->Links[$Key][$NodeID]["Ticks"]) ) + { $Color["Ticks"] = $this->Links[$Key][$NodeID]["Ticks"]; } + } + + $X2 = $this->Data[$NodeID]["X"]; + $Y2 = $this->Data[$NodeID]["Y"]; + $this->pChartObject->drawLine($X,$Y,$X2,$Y2,$Color); + $Drawn[$Key][$NodeID] = TRUE; + + if ( isset($this->Links) && $this->Links != "" ) + { + if ( isset($this->Links[$Key][$NodeID]["Name"]) || isset($this->Links[$NodeID][$Key]["Name"]) ) + { + $Name = isset($this->Links[$Key][$NodeID]["Name"]) ? $this->Links[$Key][$NodeID]["Name"] : $this->Links[$NodeID][$Key]["Name"]; + $TxtX = ($X2 - $X)/2 + $X; + $TxtY = ($Y2 - $Y)/2 + $Y; + + if ( $X <= $X2 ) + $Angle = (360-$this->getAngle($X,$Y,$X2,$Y2)) % 360; + else + $Angle = (360-$this->getAngle($X2,$Y2,$X,$Y)) % 360; + + $Settings = $Color; + $Settings["Angle"] = $Angle; + $Settings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; + $this->pChartObject->drawText($TxtX,$TxtY,$Name,$Settings); + } + } + } + } + } + } + + /* Draw the quiet zones */ + if ( $DrawQuietZone ) + { + foreach($this->Data as $Key => $Settings) + { + $X = $Settings["X"]; + $Y = $Settings["Y"]; + $FreeZone = $Settings["FreeZone"]; + + $this->pChartObject->drawFilledCircle($X,$Y,$FreeZone,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>2)); + } + } + + + /* Draw the nodes */ + foreach($this->Data as $Key => $Settings) + { + $X = $Settings["X"]; + $Y = $Settings["Y"]; + $Name = $Settings["Name"]; + $FreeZone = $Settings["FreeZone"]; + $Shape = $Settings["Shape"]; + $Size = $Settings["Size"]; + + $Color = array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"],"Alpha"=>$Settings["Alpha"],"BorderR"=>$Settings["BorderR"],"BorderG"=>$Settings["BorderG"],"BorderB"=>$Settings["BorderB"],"BorderApha"=>$Settings["BorderAlpha"]); + + if ( $Shape == NODE_SHAPE_CIRCLE ) + { + $this->pChartObject->drawFilledCircle($X,$Y,$Size,$Color); + } + elseif ( $Shape == NODE_SHAPE_TRIANGLE ) + { + $Points = ""; + $Points[] = cos(deg2rad(270)) * $Size + $X; $Points[] = sin(deg2rad(270)) * $Size + $Y; + $Points[] = cos(deg2rad(45)) * $Size + $X; $Points[] = sin(deg2rad(45)) * $Size + $Y; + $Points[] = cos(deg2rad(135)) * $Size + $X; $Points[] = sin(deg2rad(135)) * $Size + $Y; + $this->pChartObject->drawPolygon($Points,$Color); + } + elseif ( $Shape == NODE_SHAPE_SQUARE ) + { + $Offset = $Size/2; $Size = $Size / 2; + $this->pChartObject->drawFilledRectangle($X-$Offset,$Y-$Offset,$X+$Offset,$Y+$Offset,$Color); + } + + if ( $Name != "" ) + { + $LabelOptions = array("R"=>$this->Labels["R"],"G"=>$this->Labels["G"],"B"=>$this->Labels["B"],"Alpha"=>$this->Labels["Alpha"]); + + if ( $this->Labels["Type"] == LABEL_LIGHT ) + { + $LabelOptions["Align"] = TEXT_ALIGN_BOTTOMLEFT; + $this->pChartObject->drawText($X,$Y,$Name,$LabelOptions); + } + elseif ( $this->Labels["Type"] == LABEL_CLASSIC ) + { + $LabelOptions["Align"] = TEXT_ALIGN_TOPMIDDLE; + $LabelOptions["DrawBox"] = TRUE; + $LabelOptions["BoxAlpha"] = 50; + $LabelOptions["BorderOffset"] = 4; + $LabelOptions["RoundedRadius"] = 3; + $LabelOptions["BoxRounded"] = TRUE; + $LabelOptions["NoShadow"] = TRUE; + + $this->pChartObject->drawText($X,$Y+$Size+$TextPadding,$Name,$LabelOptions); + } + } + } + + /* Draw the vectors */ + if ( $DrawVectors ) + { + foreach($this->Data as $Key => $Settings) + { + $X1 = $Settings["X"]; + $Y1 = $Settings["Y"]; + + if ( isset($Settings["Vectors"]) && $Settings["Type"] != NODE_TYPE_CENTRAL ) + { + foreach($Settings["Vectors"] as $ID => $Vector) + { + $Type = $Vector["Type"]; + $Force = $Vector["Force"]; + $Angle = $Vector["Angle"]; + $Factor = $Type == "A" ? $this->MagneticForceA : $this->MagneticForceR; + $Color = $Type == "A" ? array("FillR"=>255,"FillG"=>0,"FillB"=>0) : array("FillR"=>0,"FillG"=>255,"FillB"=>0); + + $X2 = cos(deg2rad($Angle)) * $Force * $Factor + $X1; + $Y2 = sin(deg2rad($Angle)) * $Force * $Factor + $Y1; + + $this->pChartObject->drawArrow($X1,$Y1,$X2,$Y2,$Color); + } + } + } + } + + return(array("Pass"=>$Jobs,"Conflicts"=>$Conflicts)); + } + + /* Return the distance between two points */ + function getDistance($X1,$Y1,$X2,$Y2) + { return (sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1))); } + + /* Return the angle made by a line and the X axis */ + function getAngle($X1,$Y1,$X2,$Y2) + { + $Opposite = $Y2 - $Y1; $Adjacent = $X2 - $X1;$Angle = rad2deg(atan2($Opposite,$Adjacent)); + if ($Angle > 0) { return($Angle); } else { return(360-abs($Angle)); } + } + + function intersect($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4) + { + $A = (($X3 * $Y4 - $X4 * $Y3) * ($X1 - $X2) - ($X1 * $Y2 - $X2 * $Y1) * ($X3 - $X4)); + $B = (($Y1 - $Y2) * ($X3 - $X4) - ($Y3 - $Y4) * ($X1 - $X2)); + + if ( $B == 0 ) { return(FALSE); } + $Xi = $A / $B; + + $C = ($X1 - $X2); + if ( $C == 0 ) { return(FALSE); } + $Yi = $Xi * (($Y1 - $Y2)/$C) + (($X1 * $Y2 - $X2 * $Y1)/$C); + + if ( $Xi >= min($X1,$X2) && $Xi >= min($X3,$X4) && $Xi <= max($X1,$X2) && $Xi <= max($X3,$X4)) + { + if ( $Yi >= min($Y1,$Y2) && $Yi >= min($Y3,$Y4) && $Yi <= max($Y1,$Y2) && $Yi <= max($Y3,$Y4)) + { return(TRUE); } + } + + return(FALSE); + } + } +?> \ No newline at end of file diff --git a/pChart/pStock.class.php b/pChart/pStock.class.php new file mode 100644 index 0000000..be89fee --- /dev/null +++ b/pChart/pStock.class.php @@ -0,0 +1,216 @@ +<?php + /* + pStock - class to draw stock charts + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("STOCK_MISSING_SERIE" , 180001); + + /* pStock class definition */ + class pStock + { + var $pChartObject; + var $pDataObject; + + /* Class creator */ + function pStock($pChartObject,$pDataObject) + { + $this->pChartObject = $pChartObject; + $this->pDataObject = $pDataObject; + } + + /* Draw a stock chart */ + function drawStockChart($Format="") + { + $SerieOpen = isset($Format["SerieOpen"]) ? $Format["SerieOpen"] : "Open"; + $SerieClose = isset($Format["SerieClose"]) ? $Format["SerieClose"] : "Close"; + $SerieMin = isset($Format["SerieMin"]) ? $Format["SerieMin"] : "Min"; + $SerieMax = isset($Format["SerieMax"]) ? $Format["SerieMax"] : "Max"; + $SerieMedian = isset($Format["SerieMedian"]) ? $Format["SerieMedian"] : NULL; + $LineWidth = isset($Format["LineWidth"]) ? $Format["LineWidth"] : 1; + $LineR = isset($Format["LineR"]) ? $Format["LineR"] : 0; + $LineG = isset($Format["LineG"]) ? $Format["LineG"] : 0; + $LineB = isset($Format["LineB"]) ? $Format["LineB"] : 0; + $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100; + $ExtremityWidth = isset($Format["ExtremityWidth"]) ? $Format["ExtremityWidth"] : 1; + $ExtremityLength = isset($Format["ExtremityLength"]) ? $Format["ExtremityLength"] : 3; + $ExtremityR = isset($Format["ExtremityR"]) ? $Format["ExtremityR"] : 0; + $ExtremityG = isset($Format["ExtremityG"]) ? $Format["ExtremityG"] : 0; + $ExtremityB = isset($Format["ExtremityB"]) ? $Format["ExtremityB"] : 0; + $ExtremityAlpha = isset($Format["ExtremityAlpha"]) ? $Format["ExtremityAlpha"] : 100; + $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 8; + $BoxUpR = isset($Format["BoxUpR"]) ? $Format["BoxUpR"] : 188; + $BoxUpG = isset($Format["BoxUpG"]) ? $Format["BoxUpG"] : 224; + $BoxUpB = isset($Format["BoxUpB"]) ? $Format["BoxUpB"] : 46; + $BoxUpAlpha = isset($Format["BoxUpAlpha"]) ? $Format["BoxUpAlpha"] : 100; + $BoxUpSurrounding = isset($Format["BoxUpSurrounding"]) ? $Format["BoxUpSurrounding"] : NULL; + $BoxUpBorderR = isset($Format["BoxUpBorderR"]) ? $Format["BoxUpBorderR"] : $BoxUpR-20; + $BoxUpBorderG = isset($Format["BoxUpBorderG"]) ? $Format["BoxUpBorderG"] : $BoxUpG-20; + $BoxUpBorderB = isset($Format["BoxUpBorderB"]) ? $Format["BoxUpBorderB"] : $BoxUpB-20; + $BoxUpBorderAlpha = isset($Format["BoxUpBorderAlpha"]) ? $Format["BoxUpBorderAlpha"] : 100; + $BoxDownR = isset($Format["BoxDownR"]) ? $Format["BoxDownR"] : 224; + $BoxDownG = isset($Format["BoxDownG"]) ? $Format["BoxDownG"] : 100; + $BoxDownB = isset($Format["BoxDownB"]) ? $Format["BoxDownB"] : 46; + $BoxDownAlpha = isset($Format["BoxDownAlpha"]) ? $Format["BoxDownAlpha"] : 100; + $BoxDownSurrounding= isset($Format["BoxDownSurrounding"]) ? $Format["BoxDownSurrounding"] : NULL; + $BoxDownBorderR = isset($Format["BoxDownBorderR"]) ? $Format["BoxDownBorderR"] : $BoxDownR-20; + $BoxDownBorderG = isset($Format["BoxDownBorderG"]) ? $Format["BoxDownBorderG"] : $BoxDownG-20; + $BoxDownBorderB = isset($Format["BoxDownBorderB"]) ? $Format["BoxDownBorderB"] : $BoxDownB-20; + $BoxDownBorderAlpha= isset($Format["BoxDownBorderAlpha"]) ? $Format["BoxDownBorderAlpha"] : 100; + $ShadowOnBoxesOnly = isset($Format["ShadowOnBoxesOnly"]) ? $Format["ShadowOnBoxesOnly"] : TRUE; + $MedianR = isset($Format["MedianR"]) ? $Format["MedianR"] : 255; + $MedianG = isset($Format["MedianG"]) ? $Format["MedianG"] : 0; + $MedianB = isset($Format["MedianB"]) ? $Format["MedianB"] : 0; + $MedianAlpha = isset($Format["MedianAlpha"]) ? $Format["MedianAlpha"] : 100; + $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE; + $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : "Stock Chart"; + + + /* Data Processing */ + $Data = $this->pDataObject->getData(); + $Palette = $this->pDataObject->getPalette(); + + if ( $BoxUpSurrounding != NULL ) { $BoxUpBorderR = $BoxUpR + $BoxUpSurrounding; $BoxUpBorderG = $BoxUpG + $BoxUpSurrounding; $BoxUpBorderB = $BoxUpB + $BoxUpSurrounding; } + if ( $BoxDownSurrounding != NULL ) { $BoxDownBorderR = $BoxDownR + $BoxDownSurrounding; $BoxDownBorderG = $BoxDownG + $BoxDownSurrounding; $BoxDownBorderB = $BoxDownB + $BoxDownSurrounding; } + + if ( $LineWidth != 1 ) { $LineOffset = $LineWidth / 2; } + $BoxOffset = $BoxWidth / 2; + + $Data = $this->pChartObject->DataSet->getData(); + list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings(); + + if ( !isset($Data["Series"][$SerieOpen]) || !isset($Data["Series"][$SerieClose]) || !isset($Data["Series"][$SerieMin]) || !isset($Data["Series"][$SerieMax]) ) + return(STOCK_MISSING_SERIE); + + $Plots = ""; + foreach($Data["Series"][$SerieOpen]["Data"] as $Key => $Value) + { + $Point = ""; + if ( isset($Data["Series"][$SerieClose]["Data"][$Key]) || isset($Data["Series"][$SerieMin]["Data"][$Key]) || isset($Data["Series"][$SerieMax]["Data"][$Key]) ) + $Point = array($Value,$Data["Series"][$SerieClose]["Data"][$Key],$Data["Series"][$SerieMin]["Data"][$Key],$Data["Series"][$SerieMax]["Data"][$Key]); + if ( $SerieMedian != NULL && isset($Data["Series"][$SerieMedian]["Data"][$Key]) ) + $Point[] = $Data["Series"][$SerieMedian]["Data"][$Key]; + + $Plots[] = $Point; + } + + $AxisID = $Data["Series"][$SerieOpen]["Axis"]; + $Mode = $Data["Axis"][$AxisID]["Display"]; + $Format = $Data["Axis"][$AxisID]["Format"]; + $Unit = $Data["Axis"][$AxisID]["Unit"]; + + $YZero = $this->pChartObject->scaleComputeY(0,array("AxisID"=>$AxisID)); + $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; + + $X = $this->pChartObject->GraphAreaX1 + $XMargin; + $Y = $this->pChartObject->GraphAreaY1 + $XMargin; + + $LineSettings = array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha); + $ExtremitySettings = array("R"=>$ExtremityR,"G"=>$ExtremityG,"B"=>$ExtremityB,"Alpha"=>$ExtremityAlpha); + $BoxUpSettings = array("R"=>$BoxUpR,"G"=>$BoxUpG,"B"=>$BoxUpB,"Alpha"=>$BoxUpAlpha,"BorderR"=>$BoxUpBorderR,"BorderG"=>$BoxUpBorderG,"BorderB"=>$BoxUpBorderB,"BorderAlpha"=>$BoxUpBorderAlpha); + $BoxDownSettings = array("R"=>$BoxDownR,"G"=>$BoxDownG,"B"=>$BoxDownB,"Alpha"=>$BoxDownAlpha,"BorderR"=>$BoxDownBorderR,"BorderG"=>$BoxDownBorderG,"BorderB"=>$BoxDownBorderB,"BorderAlpha"=>$BoxDownBorderAlpha); + $MedianSettings = array("R"=>$MedianR,"G"=>$MedianG,"B"=>$MedianB,"Alpha"=>$MedianAlpha); + + foreach($Plots as $Key =>$Points) + { + $PosArray = $this->pChartObject->scaleComputeY($Points,array("AxisID"=>$AxisID)); + + $Values = "Open :".$Data["Series"][$SerieOpen]["Data"][$Key]."<BR>Close : ".$Data["Series"][$SerieClose]["Data"][$Key]."<BR>Min : ".$Data["Series"][$SerieMin]["Data"][$Key]."<BR>Max : ".$Data["Series"][$SerieMax]["Data"][$Key]."<BR>"; + if ( $SerieMedian != NULL ) { $Values = $Values."Median : ".$Data["Series"][$SerieMedian]["Data"][$Key]."<BR>"; } + if ( $PosArray[0] > $PosArray[1] ) { $ImageMapColor = $this->pChartObject->toHTMLColor($BoxUpR,$BoxUpG,$BoxUpB); } else { $ImageMapColor = $this->pChartObject->toHTMLColor($BoxDownR,$BoxDownG,$BoxDownB); } + + if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT ) + { + if ( $YZero > $this->pChartObject->GraphAreaY2-1 ) { $YZero = $this->pChartObject->GraphAreaY2-1; } + if ( $YZero < $this->pChartObject->GraphAreaY1+1 ) { $YZero = $this->pChartObject->GraphAreaY1+1; } + + if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; } + + if ( $ShadowOnBoxesOnly ) { $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE; } + + if ( $LineWidth == 1 ) + $this->pChartObject->drawLine($X,$PosArray[2],$X,$PosArray[3],$LineSettings); + else + $this->pChartObject->drawFilledRectangle($X-$LineOffset,$PosArray[2],$X+$LineOffset,$PosArray[3],$LineSettings); + + if ( $ExtremityWidth == 1 ) + { + $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[2],$X+$ExtremityLength,$PosArray[2],$ExtremitySettings); + $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[3],$X+$ExtremityLength,$PosArray[3],$ExtremitySettings); + + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$ExtremityLength).",".floor($PosArray[2]).",".floor($X+$ExtremityLength).",".floor($PosArray[3]),$ImageMapColor,$ImageMapTitle,$Values); } + } + else + { + $this->pChartObject->drawFilledRectangle($X-$ExtremityLength,$PosArray[2],$X+$ExtremityLength,$PosArray[2]-$ExtremityWidth,$ExtremitySettings); + $this->pChartObject->drawFilledRectangle($X-$ExtremityLength,$PosArray[3],$X+$ExtremityLength,$PosArray[3]+$ExtremityWidth,$ExtremitySettings); + + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$ExtremityLength).",".floor($PosArray[2]-$ExtremityWidth).",".floor($X+$ExtremityLength).",".floor($PosArray[3]+$ExtremityWidth),$ImageMapColor,$ImageMapTitle,$Values); } + } + + if ( $ShadowOnBoxesOnly ) { $this->pChartObject->Shadow = $RestoreShadow; } + + if ( $PosArray[0] > $PosArray[1] ) + $this->pChartObject->drawFilledRectangle($X-$BoxOffset,$PosArray[0],$X+$BoxOffset,$PosArray[1],$BoxUpSettings); + else + $this->pChartObject->drawFilledRectangle($X-$BoxOffset,$PosArray[0],$X+$BoxOffset,$PosArray[1],$BoxDownSettings); + + if ( isset($PosArray[4]) ) + $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[4],$X+$ExtremityLength,$PosArray[4],$MedianSettings); + + $X = $X + $XStep; + } + elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM ) + { + if ( $YZero > $this->pChartObject->GraphAreaX2-1 ) { $YZero = $this->pChartObject->GraphAreaX2-1; } + if ( $YZero < $this->pChartObject->GraphAreaX1+1 ) { $YZero = $this->pChartObject->GraphAreaX1+1; } + + if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; } + + if ( $LineWidth == 1 ) + $this->pChartObject->drawLine($PosArray[2],$Y,$PosArray[3],$Y,$LineSettings); + else + $this->pChartObject->drawFilledRectangle($PosArray[2],$Y-$LineOffset,$PosArray[3],$Y+$LineOffset,$LineSettings); + + if ( $ShadowOnBoxesOnly ) { $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE; } + + if ( $ExtremityWidth == 1 ) + { + $this->pChartObject->drawLine($PosArray[2],$Y-$ExtremityLength,$PosArray[2],$Y+$ExtremityLength,$ExtremitySettings); + $this->pChartObject->drawLine($PosArray[3],$Y-$ExtremityLength,$PosArray[3],$Y+$ExtremityLength,$ExtremitySettings); + + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($PosArray[2]).",".floor($Y-$ExtremityLength).",".floor($PosArray[3]).",".floor($Y+$ExtremityLength),$ImageMapColor,$ImageMapTitle,$Values); } + } + else + { + $this->pChartObject->drawFilledRectangle($PosArray[2],$Y-$ExtremityLength,$PosArray[2]-$ExtremityWidth,$Y+$ExtremityLength,$ExtremitySettings); + $this->pChartObject->drawFilledRectangle($PosArray[3],$Y-$ExtremityLength,$PosArray[3]+$ExtremityWidth,$Y+$ExtremityLength,$ExtremitySettings); + + if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($PosArray[2]-$ExtremityWidth).",".floor($Y-$ExtremityLength).",".floor($PosArray[3]+$ExtremityWidth).",".floor($Y+$ExtremityLength),$ImageMapColor,$ImageMapTitle,$Values); } + } + + if ( $ShadowOnBoxesOnly ) { $this->pChartObject->Shadow = $RestoreShadow; } + + if ( $PosArray[0] < $PosArray[1] ) + $this->pChartObject->drawFilledRectangle($PosArray[0],$Y-$BoxOffset,$PosArray[1],$Y+$BoxOffset,$BoxUpSettings); + else + $this->pChartObject->drawFilledRectangle($PosArray[0],$Y-$BoxOffset,$PosArray[1],$Y+$BoxOffset,$BoxDownSettings); + + if ( isset($PosArray[4]) ) + $this->pChartObject->drawLine($PosArray[4],$Y-$ExtremityLength,$PosArray[4],$Y+$ExtremityLength,$MedianSettings); + + $Y = $Y + $XStep; + } + } + } + } +?> \ No newline at end of file diff --git a/pChart/pSurface.class.php b/pChart/pSurface.class.php new file mode 100644 index 0000000..00ad5e4 --- /dev/null +++ b/pChart/pSurface.class.php @@ -0,0 +1,315 @@ +<?php + /* + pSurface - class to draw surface charts + + Version : 2.1.4 + Made by : Jean-Damien POGOLOTTI + Last Update : 19/01/2014 + + This file can be distributed under the license you can find at : + + http://www.pchart.net/license + + You can find the whole class documentation on the pChart web site. + */ + + define("UNKNOWN" , 0.123456789); + define("IGNORED" , -1); + + define("LABEL_POSITION_LEFT" , 880001); + define("LABEL_POSITION_RIGHT" , 880002); + define("LABEL_POSITION_TOP" , 880003); + define("LABEL_POSITION_BOTTOM" , 880004); + + /* pStock class definition */ + class pSurface + { + var $pChartObject; + var $GridSizeX; + var $GridSizeY; + var $Points; + + /* Class creator */ + function pSurface($pChartObject) + { + $this->pChartObject = $pChartObject; + $this->GridSize = 10; + $this->Points = ""; + } + + /* Define the grid size and initialise the 2D matrix */ + function setGrid($XSize=10,$YSize=10) + { + for($X=0; $X<=$XSize; $X++) { for($Y=0; $Y<=$YSize; $Y++) { $this->Points[$X][$Y]=UNKNOWN; } } + + $this->GridSizeX = $XSize; + $this->GridSizeY = $YSize; + } + + /* Add a point on the grid */ + function addPoint($X,$Y,$Value,$Force=TRUE) + { + if ( $X < 0 || $X >$this->GridSizeX ) { return(0); } + if ( $Y < 0 || $Y >$this->GridSizeY ) { return(0); } + + if ( $this->Points[$X][$Y] == UNKNOWN || $Force ) + $this->Points[$X][$Y] = $Value; + elseif ( $this->Points[$X][$Y] == UNKNOWN ) + $this->Points[$X][$Y] = $Value; + else + $this->Points[$X][$Y] = ($this->Points[$X][$Y] + $Value)/2; + } + + /* Write the X labels */ + function writeXLabels($Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR; + $G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG; + $B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA; + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0; + $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5; + $Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_TOP; + $Labels = isset($Format["Labels"]) ? $Format["Labels"] : NULL; + $CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0; + + if ( $Labels != NULL && !is_array($Labels) ) { $Label = $Labels; $Labels = ""; $Labels[] = $Label; } + + $X0 = $this->pChartObject->GraphAreaX1; + $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1); + + $Settings = array("Angle"=>$Angle,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + if ( $Position == LABEL_POSITION_TOP ) + { + $YPos = $this->pChartObject->GraphAreaY1 - $Padding; + if ($Angle == 0 ) { $Settings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; } + if ($Angle != 0 ) { $Settings["Align"] = TEXT_ALIGN_MIDDLELEFT; } + } + elseif ( $Position == LABEL_POSITION_BOTTOM ) + { + $YPos = $this->pChartObject->GraphAreaY2 + $Padding; + if ($Angle == 0 ) { $Settings["Align"] = TEXT_ALIGN_TOPMIDDLE; } + if ($Angle != 0 ) { $Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT; } + } + else + return(-1); + + for($X=0;$X<=$this->GridSizeX;$X++) + { + $XPos = floor($X0+$X*$XSize + $XSize/2); + + if( $Labels == NULL || !isset($Labels[$X]) ) + $Value = $X+$CountOffset; + else + $Value = $Labels[$X]; + + $this->pChartObject->drawText($XPos,$YPos,$Value,$Settings); + } + } + + /* Write the Y labels */ + function writeYLabels($Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR; + $G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG; + $B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA; + $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0; + $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5; + $Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_LEFT; + $Labels = isset($Format["Labels"]) ? $Format["Labels"] : NULL; + $CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0; + + if ( $Labels != NULL && !is_array($Labels) ) { $Label = $Labels; $Labels = ""; $Labels[] = $Label; } + + $Y0 = $this->pChartObject->GraphAreaY1; + $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1); + + $Settings = array("Angle"=>$Angle,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + if ( $Position == LABEL_POSITION_LEFT ) + { $XPos = $this->pChartObject->GraphAreaX1 - $Padding; $Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT; } + elseif ( $Position == LABEL_POSITION_RIGHT ) + { $XPos = $this->pChartObject->GraphAreaX2 + $Padding; $Settings["Align"] = TEXT_ALIGN_MIDDLELEFT; } + else + return(-1); + + for($Y=0;$Y<=$this->GridSizeY;$Y++) + { + $YPos = floor($Y0+$Y*$YSize + $YSize/2); + + if( $Labels == NULL || !isset($Labels[$Y]) ) + $Value = $Y+$CountOffset; + else + $Value = $Labels[$Y]; + + $this->pChartObject->drawText($XPos,$YPos,$Value,$Settings); + } + } + + /* Draw the area arround the specified Threshold */ + function drawContour($Threshold,$Format="") + { + $R = isset($Format["R"]) ? $Format["R"] : 0; + $G = isset($Format["G"]) ? $Format["G"] : 0; + $B = isset($Format["B"]) ? $Format["B"] : 0; + $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100; + $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 3; + $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 0; + + $X0 = $this->pChartObject->GraphAreaX1; + $Y0 = $this->pChartObject->GraphAreaY1; + $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1); + $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1); + + $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks); + + for($X=0;$X<=$this->GridSizeX;$X++) + { + for($Y=0;$Y<=$this->GridSizeY;$Y++) + { + $Value = $this->Points[$X][$Y]; + + if ( $Value != UNKNOWN && $Value != IGNORED && $Value >= $Threshold) + { + $X1 = floor($X0+$X*$XSize)+$Padding; + $Y1 = floor($Y0+$Y*$YSize)+$Padding; + $X2 = floor($X0+$X*$XSize+$XSize); + $Y2 = floor($Y0+$Y*$YSize+$YSize); + + if ( $X > 0 && $this->Points[$X-1][$Y] != UNKNOWN && $this->Points[$X-1][$Y] != IGNORED && $this->Points[$X-1][$Y] < $Threshold) + $this->pChartObject->drawLine($X1,$Y1,$X1,$Y2,$Color); + if ( $Y > 0 && $this->Points[$X][$Y-1] != UNKNOWN && $this->Points[$X][$Y-1] != IGNORED && $this->Points[$X][$Y-1] < $Threshold) + $this->pChartObject->drawLine($X1,$Y1,$X2,$Y1,$Color); + if ( $X < $this->GridSizeX && $this->Points[$X+1][$Y] != UNKNOWN && $this->Points[$X+1][$Y] != IGNORED && $this->Points[$X+1][$Y] < $Threshold) + $this->pChartObject->drawLine($X2,$Y1,$X2,$Y2,$Color); + if ( $Y < $this->GridSizeY && $this->Points[$X][$Y+1] != UNKNOWN && $this->Points[$X][$Y+1] != IGNORED && $this->Points[$X][$Y+1] < $Threshold) + $this->pChartObject->drawLine($X1,$Y2,$X2,$Y2,$Color); + } + } + } + } + + /* Draw the surface chart */ + function drawSurface($Format="") + { + $Palette = isset($Format["Palette"]) ? $Format["Palette"] : NULL; + $ShadeR1 = isset($Format["ShadeR1"]) ? $Format["ShadeR1"] : 77; + $ShadeG1 = isset($Format["ShadeG1"]) ? $Format["ShadeG1"] : 205; + $ShadeB1 = isset($Format["ShadeB1"]) ? $Format["ShadeB1"] : 21; + $ShadeA1 = isset($Format["ShadeA1"]) ? $Format["ShadeA1"] : 40; + $ShadeR2 = isset($Format["ShadeR2"]) ? $Format["ShadeR2"] : 227; + $ShadeG2 = isset($Format["ShadeG2"]) ? $Format["ShadeG2"] : 135; + $ShadeB2 = isset($Format["ShadeB2"]) ? $Format["ShadeB2"] : 61; + $ShadeA2 = isset($Format["ShadeA2"]) ? $Format["ShadeA2"] : 100; + $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE; + $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0; + $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0; + $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0; + $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : -1; + $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 1; + + $X0 = $this->pChartObject->GraphAreaX1; + $Y0 = $this->pChartObject->GraphAreaY1; + $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1); + $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1); + + for($X=0;$X<=$this->GridSizeX;$X++) + { + for($Y=0;$Y<=$this->GridSizeY;$Y++) + { + $Value = $this->Points[$X][$Y]; + + if ( $Value != UNKNOWN && $Value != IGNORED ) + { + $X1 = floor($X0+$X*$XSize)+$Padding; + $Y1 = floor($Y0+$Y*$YSize)+$Padding; + $X2 = floor($X0+$X*$XSize+$XSize); + $Y2 = floor($Y0+$Y*$YSize+$YSize); + + if ( $Palette != NULL ) + { + if ( isset($Palette[$Value]) && isset($Palette[$Value]["R"]) ) { $R = $Palette[$Value]["R"]; } else { $R = 0; } + if ( isset($Palette[$Value]) && isset($Palette[$Value]["G"]) ) { $G = $Palette[$Value]["G"]; } else { $G = 0; } + if ( isset($Palette[$Value]) && isset($Palette[$Value]["B"]) ) { $B = $Palette[$Value]["B"]; } else { $B = 0; } + if ( isset($Palette[$Value]) && isset($Palette[$Value]["Alpha"]) ) { $Alpha = $Palette[$Value]["Alpha"]; } else { $Alpha = 1000; } + } + else + { + $R = (($ShadeR2-$ShadeR1)/100)*$Value + $ShadeR1; + $G = (($ShadeG2-$ShadeG1)/100)*$Value + $ShadeG1; + $B = (($ShadeB2-$ShadeB1)/100)*$Value + $ShadeB1; + $Alpha = (($ShadeA2-$ShadeA1)/100)*$Value + $ShadeA1; + } + + $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha); + if ( $Border ) { $Settings["BorderR"] = $BorderR; $Settings["BorderG"] = $BorderG; $Settings["BorderB"] = $BorderB; } + if ( $Surrounding != -1 ) { $Settings["BorderR"] = $R+$Surrounding; $Settings["BorderG"] = $G+$Surrounding; $Settings["BorderB"] = $B+$Surrounding; } + + $this->pChartObject->drawFilledRectangle($X1,$Y1,$X2-1,$Y2-1,$Settings); + } + } + } + } + + /* Compute the missing points */ + function computeMissing() + { + $Missing = ""; + for($X=0;$X<=$this->GridSizeX;$X++) + { + for($Y=0;$Y<=$this->GridSizeY;$Y++) + { + if ( $this->Points[$X][$Y] == UNKNOWN ) + $Missing[] = $X.",".$Y; + } + } + shuffle($Missing); + + foreach($Missing as $Key => $Pos) + { + $Pos = preg_split("/,/",$Pos); + $X = $Pos[0]; + $Y = $Pos[1]; + + if ( $this->Points[$X][$Y] == UNKNOWN ) + { + $NearestNeighbor = $this->getNearestNeighbor($X,$Y); + + $Value = 0; $Points = 0; + for($Xi=$X-$NearestNeighbor;$Xi<=$X+$NearestNeighbor;$Xi++) + { + for($Yi=$Y-$NearestNeighbor;$Yi<=$Y+$NearestNeighbor;$Yi++) + { + if ($Xi >=0 && $Yi >= 0 && $Xi <= $this->GridSizeX && $Yi <= $this->GridSizeY && $this->Points[$Xi][$Yi] != UNKNOWN && $this->Points[$Xi][$Yi] != IGNORED) + { + $Value = $Value + $this->Points[$Xi][$Yi]; $Points++; + } + } + } + + if ( $Points != 0 ) { $this->Points[$X][$Y] = $Value / $Points; } + } + } + } + + /* Return the nearest Neighbor distance of a point */ + function getNearestNeighbor($Xp,$Yp) + { + $Nearest = UNKNOWN; + for($X=0;$X<=$this->GridSizeX;$X++) + { + for($Y=0;$Y<=$this->GridSizeY;$Y++) + { + if ( $this->Points[$X][$Y] != UNKNOWN && $this->Points[$X][$Y] != IGNORED ) + { + $DistanceX = max($Xp,$X)-min($Xp,$X); + $DistanceY = max($Yp,$Y)-min($Yp,$Y); + $Distance = max($DistanceX,$DistanceY); + if ( $Distance < $Nearest || $Nearest == UNKNOWN ) { $Nearest = $Distance; } + } + } + } + return($Nearest); + } + } +?> \ No newline at end of file diff --git a/palettes/autumn.color b/palettes/autumn.color new file mode 100644 index 0000000..032b020 --- /dev/null +++ b/palettes/autumn.color @@ -0,0 +1,6 @@ +185,106,154,100 +216,137,184,100 +156,192,137,100 +216,243,201,100 +253,232,215,100 +255,255,255,100 diff --git a/palettes/blind.color b/palettes/blind.color new file mode 100644 index 0000000..94355e2 --- /dev/null +++ b/palettes/blind.color @@ -0,0 +1,6 @@ +109,152,171,100 +0,39,94,100 +254,183,41,100 +168,177,184,100 +255,255,255,100 +0,0,0,100 diff --git a/palettes/evening.color b/palettes/evening.color new file mode 100644 index 0000000..8c9b71a --- /dev/null +++ b/palettes/evening.color @@ -0,0 +1,6 @@ +242,245,237,100 +255,194,0,100 +255,91,0,100 +184,0,40,100 +132,0,46,100 +74,192,242,100 diff --git a/palettes/kitchen.color b/palettes/kitchen.color new file mode 100644 index 0000000..c60d3b6 --- /dev/null +++ b/palettes/kitchen.color @@ -0,0 +1,6 @@ +155,225,251,100 +197,239,253,100 +189,32,49,100 +35,31,32,100 +255,255,255,100 +0,98,149,100 diff --git a/palettes/light.color b/palettes/light.color new file mode 100644 index 0000000..08954f0 --- /dev/null +++ b/palettes/light.color @@ -0,0 +1,7 @@ +239,210,121,100 +149,203,233,100 +2,71,105,100 +175,215,117,100 +44,87,0,100 +222,157,127,100 + diff --git a/palettes/navy.color b/palettes/navy.color new file mode 100644 index 0000000..cede58c --- /dev/null +++ b/palettes/navy.color @@ -0,0 +1,6 @@ +25,78,132,100 +59,107,156,100 +31,36,42,100 +55,65,74,100 +96,187,34,100 +242,186,187,100 diff --git a/palettes/shade.color b/palettes/shade.color new file mode 100644 index 0000000..ba9bcd5 --- /dev/null +++ b/palettes/shade.color @@ -0,0 +1,6 @@ +117,113,22,100 +174,188,33,100 +217,219,86,100 +0,71,127,100 +76,136,190,100 +141,195,233,100 diff --git a/palettes/spring.color b/palettes/spring.color new file mode 100644 index 0000000..d7af18b --- /dev/null +++ b/palettes/spring.color @@ -0,0 +1,6 @@ +146,123,81,100 +168,145,102,100 +128,195,28,100 +188,221,90,100 +255,121,0,100 +251,179,107,100 diff --git a/palettes/summer.color b/palettes/summer.color new file mode 100644 index 0000000..f7aacc7 --- /dev/null +++ b/palettes/summer.color @@ -0,0 +1,6 @@ +253,184,19,100 +246,139,31,100 +241,112,34,100 +98,194,204,100 +228,246,248,100 +238,246,108,100 diff --git a/paradox/pompy.db b/paradox/pompy.db new file mode 100644 index 0000000..7206f64 Binary files /dev/null and b/paradox/pompy.db differ diff --git a/paradox/relap_s.db b/paradox/relap_s.db new file mode 100644 index 0000000..89330eb Binary files /dev/null and b/paradox/relap_s.db differ diff --git a/paradox/siln.db b/paradox/siln.db new file mode 100644 index 0000000..2f50695 Binary files /dev/null and b/paradox/siln.db differ diff --git a/polynomial/ClipCircle.php b/polynomial/ClipCircle.php new file mode 100644 index 0000000..b74b887 --- /dev/null +++ b/polynomial/ClipCircle.php @@ -0,0 +1,129 @@ +<?php +/*=========================================================================*/ +/* Name: ClipCircle.php */ +/* Uses: Draw a circle clipped within boundaries */ +/* Date: 1/1/2008 */ +/* Author: Andrew Que (http://www.DrQue.net/) */ +/* Revisions: */ +/* 1.0 - 1/1/2008 - QUE - Creatuib */ +/* */ +/* ----------------------------------------------------------------------- */ +/* */ +/* X/Y trend with linear regression script */ +/* Copyright (C) 2008 Andrew Que */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 3 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* */ +/* ----------------------------------------------------------------------- */ +/* */ +/* (C) Copyright 2008 */ +/* Andrew Que */ +/* ð|> */ +/*=========================================================================*/ +/** + * Clip circle + * + * Contains a function to draw a circle clipped within boundaries + * @package XY_Plot + * @author Andrew Que ({@link http://www.DrQue.net/}) + * @copyright Copyright (c) 2008, Andrew Que + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * + */ + +/** + * Draw a circle with clipping + * + * <p> + * Draw a filled circle and do not allow it to extend byond a defined set of + * boundaries. + * <p> + * This isn't the most efficent implementation, so don't use when speed is + * essential + * @param $Image Image to draw circle onto + * @param $CenterX X-coordinate of center of circle + * @param $CenterY Y-coordinate of center of circle + * @param $Diameter Diameter of circle + * @param $Color Color of circle + * @param $ClipLeft Left boundary + * @param $ClipTop Top boundary + * @param $ClipRight Right boundary + * @param $ClipBottom Bottom doundary + */ +function ClippedFilledCircle( + $Image , + $CenterX , + $CenterY , + $Diameter , + $Color , + $ClipLeft = null , + $ClipTop = null , + $ClipRight = null , + $ClipBottom = null ) +{ + $Radius = $Diameter / 2.0; + $Count = round( -$Radius ); + while ( $Count <= $Radius ) + { + $y = $CenterY + $Count; + $yy = $CenterY + $Count; + + $Delta = ( $Radius * $Radius ) - ( $Count * $Count ); + + ++$Count; + + if ( $Delta < 0 ) + continue; + + $Delta = sqrt( $Delta ); + + $x = ceil( $CenterX - $Delta ); + $xx = floor( $CenterX + $Delta ); + + // Above the top margin? + if ( ( $ClipTop !== null ) + && ( $y < $ClipTop ) ) + continue; + + // Below the bottm margin? + if ( ( $ClipBottom !== null ) + && ( $yy > $ClipBottom ) ) + continue; + + // Byond left margin? + if ( ( $ClipLeft !== null ) + && ( $x < $ClipLeft ) ) + $x = $ClipLeft; + + // Byond right margin? + if ( ( $ClipRight !== null ) + && ( $xx > $ClipRight ) ) + $xx = $ClipRight; + + // Off the chat? + if ( ( $ClipLeft !== null ) + && ( $xx < $ClipLeft ) ) + continue; + + if ( ( $ClipLeft !== null ) + && ( $x > $ClipRight ) ) + continue; + + // Draw line + ImageLine( $Image , $x , $y , $xx , $y , $Color ); + } + +} + +?> diff --git a/polynomial/ClipLine.php b/polynomial/ClipLine.php new file mode 100644 index 0000000..7f46ee9 --- /dev/null +++ b/polynomial/ClipLine.php @@ -0,0 +1,977 @@ +<?php +/*=========================================================================*/ +/* Name: ClipLine.php */ +/* Uses: Used for clipping a line in a define square */ +/* Date: 12/7/2007 */ +/* Authors: */ +/* Andrew Que (http://www.DrQue.net/) */ +/* References: */ +/* This unit was constructed mostly from an example in Wikipedia, which */ +/* had the following credit: */ +/* "Mark S. Sobkow, Paul Pospisil and Yee-Hong Yang. A Fast Two- */ +/* Dimensional Line Clipping Algorithm via Line Encoding//Computer & */ +/* Graphics, Vol. 11, No. 4, pp. 459-467, 1987." */ +/* The port to PHP was done by Andrew Que */ +/* Revisions: */ +/* 1.0 - 12/7/2007 - QUE - Creation */ +/* 1.1 - 12/31/2007 - QUE - Clipping for complete out-of-bounds */ +/* */ +/* ----------------------------------------------------------------------- */ +/* */ +/* Line clipping function */ +/* Copyright (C) 2007 Andrew Que */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 3 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* */ +/* ----------------------------------------------------------------------- */ +/* */ +/* (C) Copyright 2007 */ +/* Andrew Que */ +/* ð|> */ +/*=========================================================================*/ +/** + * Used for clipping a line in a define square + * + * <p> + * This unit was constructed mostly from an example in Wikipedia, which + * had the following credit: + * <p> + * "Mark S. Sobkow, Paul Pospisil and Yee-Hong Yang. A Fast Two- + * Dimensional Line Clipping Algorithm via Line Encoding//Computer & + * Graphics, Vol. 11, No. 4, pp. 459-467, 1987." + * <p> + * The port to PHP was done by Andrew Que + * + * @package XY_Plot + * @author Andrew Que ({@link http://www.DrQue.net/}) + * @copyright Copyright (c) 2007, Andrew Que + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * + */ + +/** + * Implementation of the Fast-Clipping algorithm. + * + * This is a class, but acts more like a function. The reason + * implementation is done this way is because of the sub-functions that + * need access to the local variables. + */ +class ClipLine +{ + /**#@+ @ignore */ + public $x; + public $y; + public $xx; + public $yy; + + public $X_Min; + public $Y_Min; + public $X_Max; + public $Y_Max; + /**#@-*/ + + /** + * Constructor + * @param x Left corner of line + * @param y Top corner of line + * @param xx Right corner of line + * @param yy Bottom corner of line + * @param X_Min Left edge of frame + * @param Y_Min Top edge of frame + * @param X_Max Right edge of frame + * @param Y_Max Bottom edge of frame + */ + public function __construct + ( + &$x , &$y , &$xx , &$yy , + $X_Min , $Y_Min , $X_Max , $Y_Max + ) + { + // Set local variables + $this->x = &$x; + $this->y = &$y; + $this->xx = &$xx; + $this->yy = &$yy; + $this->X_Min = &$X_Min; + $this->Y_Min = &$Y_Min; + $this->X_Max = &$X_Max; + $this->Y_Max = &$Y_Max; + + // Clip the line + $this->Clip(); + } + + //------------------------------------------------------ + // Clipping function + // (There is one clipping function for each of the 8 areas) + //------------------------------------------------------ + + /** + * Start top + */ + private function clipStartTop() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->x += $DeltaX * ( $this->Y_Min - $this->y ) / $DeltaY; + $this->y = $this->Y_Min; + } + + /** + * Start bottom + */ + private function clipStartBottom() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->x += $DeltaX * ( $this->Y_Max - $this->y ) / $DeltaY; + $this->y = $this->Y_Max; + } + + /** + * Start right + */ + private function clipStartRight() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->y += $DeltaY * ( $this->X_Max - $this->x ) / $DeltaX; + $this->x = $this->X_Max; + } + + /** + * Start left + */ + private function clipStartLeft() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->y += $DeltaY * ( $this->X_Min - $this->x ) / $DeltaX; + $this->x = $this->X_Min; + } + + /** + * End top + */ + private function clipEndTop() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->xx += $DeltaX * ( $this->Y_Min - $this->yy ) / $DeltaY; + $this->yy = $this->Y_Min; + } + + /** + * End bottom + */ + private function clipEndBottom() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->xx += $DeltaX * ( $this->Y_Max - $this->yy ) / $DeltaY; + $this->yy = $this->Y_Max; + } + + /** + * End right + */ + private function clipEndRight() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->yy += $DeltaY * ( $this->X_Max - $this->xx ) / $DeltaX; + $this->xx = $this->X_Max; + } + + /** + * End Left + */ + private function clipEndLeft() + { + $DeltaX = $this->xx - $this->x; + $DeltaY = $this->yy - $this->y; + $this->yy += $DeltaY * ( $this->X_Min - $this->xx ) / $DeltaX; + $this->xx = $this->X_Min; + } + + /** + * Main body of clipping function + * + * This function does all the clipping work + */ + private function Clip() + { + $LineCode = 0; + + // Figure out which sides clip + if ( $this->y < $this->Y_Min ) + $LineCode |= 0x80; // BIT8 + else + if ( $this->y > $this->Y_Max ) + $LineCode |= 0x40; // BIT7 + + if ( $this->x > $this->X_Max ) + $LineCode |= 0x20; // BIT6 + else + if ( $this->x < $this->X_Min ) + $LineCode |= 0x10; // BIT5 + + if ( $this->yy < $this->Y_Min ) + $LineCode |= 0x08; // BIT4 + else + if ( $this->yy > $this->Y_Max ) + $LineCode |= 0x04; // BIT3 + + if ( $this->xx > $this->X_Max ) + $LineCode |= 0x02; // BIT2 + else + if ( $this->xx < $this->X_Min ) + $LineCode |= 0x01; // BIT1 + + // Completely out of bounds? (i.e. not visible on screen) + if ( ( ( $LineCode & ( 0x80 | 0x08 ) ) == ( 0x80 | 0x08 ) ) + || ( ( $LineCode & ( 0x40 | 0x04 ) ) == ( 0x40 | 0x04 ) ) + || ( ( $LineCode & ( 0x20 | 0x02 ) ) == ( 0x20 | 0x02 ) ) + || ( ( $LineCode & ( 0x10 | 0x01 ) ) == ( 0x10 | 0x01 ) ) ) + { + $this->x = $this->y = $this->xx = $this->yy = 0; + return; + } + + // 9 - 8 - A + // | | | + // 1 - 0 - 2 + // | | | + // 5 - 4 - 6 + switch ( $LineCode ) + { + //------------------------------ + // Center + //------------------------------ + + case 0x00: + { + // Line is perfect, no clipping needed + break; + } + + case 0x01: + { + $this->clipEndLeft(); + break; + } + + case 0x02: + { + $this->clipEndRight(); + break; + } + + case 0x04: + { + $this->clipEndBottom(); + break; + } + + case 0x05: + { + $this->clipEndLeft(); + + if ( $this->yy > $this->Y_Max ) + $this->clipEndBottom(); + + break; + } + + case 0x06: + { + $this->clipEndRight(); + + if ( $this->yy > $this->Y_Max ) + $this->clipEndBottom(); + + break; + } + + case 0x08: + { + $this->clipEndTop(); + break; + } + + case 0x09: + { + $this->clipEndLeft(); + + if ( $this->yy < $this->Y_Min ) + $this->clipEndTop(); + + break; + } + + case 0x0A: + { + $this->clipEndRight(); + + if ( $this->yy < $this->Y_Min ) + $this->clipEndTop(); + + break; + } + + //------------------------------ + // Left + //------------------------------ + + case 0x10: + { + $this->clipStartLeft(); + break; + } + + case 0x12: + { + $this->clipStartLeft(); + $this->clipEndRight(); + break; + } + + case 0x14: + { + $this->clipStartLeft(); + + if ( $this->y > $this->Y_Max ) + break; + + $this->clipEndBottom(); + + break; + } + + case 0x16: + { + $this->clipStartLeft(); + + if ( $this->y > $this->Y_Max ) + break; + + $this->clipEndBottom(); + + if ( $this->xx > $this->X_Max ) + $this->clipEndRight(); + + break; + } + + case 0x18: + { + $this->clipStartLeft(); + + if ( $this->y < $this->Y_Min ) + break; + + $this->clipEndTop(); + + break; + } + + case 0x1A: + { + $this->clipStartLeft(); + + if ( $this->y < $this->Y_Min ) + break; + + $this->clipEndTop(); + + if ( $this->xx > $this->X_Max ) + $this->clipEndRight(); + + break; + } + + //------------------------------ + // Right + //------------------------------ + + case 0x20: + { + $this->clipStartRight(); + break; + } + + case 0x21: + { + $this->clipStartRight(); + $this->clipEndLeft(); + break; + } + + case 0x24: + { + $this->clipStartRight(); + + if ( $this->y > $this->Y_Max ) + break; + + $this->clipEndBottom(); + + break; + } + + case 0x25: + { + $this->clipStartRight(); + if ( $this->y > $this->Y_Max ) + break; + + $this->clipEndBottom(); + + if ( $this->xx < $this->X_Min ) + $this->clipEndLeft(); + + break; + } + + case 0x28: + { + $this->clipStartRight(); + + if ( $this->y < $this->Y_Min ) + break; + + $this->clipEndTop(); + + break; + } + + case 0x29: + { + $this->clipStartRight(); + + if ( $this->y < $this->Y_Min ) + break; + + $this->clipEndTop(); + + if ( $this->xx < $this->X_Min ) + $this->clipEndLeft(); + + break; + } + + //------------------------------ + // Bottom + //------------------------------ + + case 0x40: + { + $this->clipStartBottom(); + break; + } + + case 0x41: + { + $this->clipStartBottom(); + + if ( $this->x < $this->X_Min ) + break; + + $this->clipEndLeft(); + + if ( $this->yy > $this->Y_Max ) + $this->clipEndBottom(); + + break; + } + + case 0x42: + { + $this->clipStartBottom(); + + if ( $this->x > $this->X_Max ) + break; + + $this->clipEndRight(); + + break; + } + + case 0x48: + { + $this->clipStartBottom(); + $this->clipEndTop(); + + break; + } + + case 0x49: + { + $this->clipStartBottom(); + + if ( $this->x < $this->X_Min ) + break; + + $this->clipEndLeft(); + + if ( $this->yy < $this->Y_Min ) + $this->clipEndTop(); + + break; + } + + case 0x4A: + { + $this->clipStartBottom(); + + if ( $this->x > $this->X_Max ) + break; + + $this->clipEndRight(); + + if ( $this->yy < $this->Y_Min ) + $this->clipEndTop(); + + break; + } + + //------------------------------ + // Bottom-left + //------------------------------ + + case 0x50: + { + $this->clipStartLeft(); + + if ( $this->y > $this->Y_Max ) + $this->clipStartBottom(); + + break; + } + + case 0x52: + { + $this->clipEndRight(); + if ( $this->yy > $this->Y_Max ) + break; + + $this->clipStartBottom(); + + if ( $this->x < $this->X_Min ) + $this->clipStartLeft(); + + break; + } + + case 0x58: + { + $this->clipEndTop(); + + if ( $this->xx < $this->X_Min ) + break; + + $this->clipStartBottom(); + + if ( $this->x < $this->X_Min ) + $this->clipStartLeft(); + + break; + } + + case 0x5A: + { + $this->clipStartLeft(); + + if ( $this->y < $this->Y_Min ) + break; + + $this->clipEndRight(); + + if ( $this->yy > $this->Y_Max ) + break; + + if ( $this->y > $this->Y_Max ) + $this->clipStartBottom(); + + if ( $this->yy < $this->Y_Min ) + $this->clipEndTop(); + + break; + } + + //------------------------------ + // Bottom-right + //------------------------------ + + case 0x60: + { + $this->clipStartRight(); + + if ( $this->y > $this->Y_Max ) + $this->clipStartBottom(); + + break; + } + + case 0x61: + { + $this->clipEndLeft(); + + if ( $this->yy > $this->Y_Max ) + break; + + $this->clipStartBottom(); + + if ( $this->x > $this->X_Max ) + $this->clipStartRight(); + + break; + } + + case 0x68: + { + $this->clipEndTop(); + + if ( $this->xx > $this->X_Max ) + break; + + $this->clipStartRight(); + + if ( $this->y > $this->Y_Max ) + $this->clipStartBottom(); + + break; + } + + case 0x69: + { + $this->clipEndLeft(); + + if ( $this->yy > $this->Y_Max ) + break; + + $this->clipStartRight(); + + if ( $this->y < $this->Y_Min ) + break; + + if ( $this->yy < $this->Y_Min ) + $this->clipEndTop(); + + if ( $this->y > $this->Y_Max ) + $this->clipStartBottom(); + + break; + } + + //------------------------------ + // Top + //------------------------------ + + case 0x80: + { + $this->clipStartTop(); + break; + } + + case 0x81: + { + $this->clipStartTop(); + + if ( $this->x < $this->X_Min ) + break; + + $this->clipEndLeft(); + + break; + } + + case 0x82: + { + $this->clipStartTop(); + + if ( $this->x > $this->X_Max ) + break; + + $this->clipEndRight(); + + break; + } + + case 0x84: + { + $this->clipStartTop(); + $this->clipEndBottom(); + break; + } + + case 0x85: + { + $this->clipStartTop(); + + if ( $this->x < $this->X_Min ) + break; + + $this->clipEndLeft(); + + if ( $this->yy > $this->Y_Max ) + $this->clipEndBottom(); + + break; + } + + case 0x86: + { + $this->clipStartTop(); + + if ( $this->x > $this->X_Max ) + break; + + $this->clipEndRight(); + + if ( $this->yy > $this->Y_Max ) + $this->clipEndBottom(); + + break; + } + + //------------------------------ + // Top-left + //------------------------------ + + case 0x90: + { + $this->clipStartLeft(); + + if ( $this->y < $this->Y_Min ) + $this->clipStartTop(); + + break; + } + + case 0x92: + { + $this->clipEndRight(); + + if ( $this->yy < $this->Y_Min ) + break; + + $this->clipStartTop(); + + if ( $this->x < $this->X_Min ) + $this->clipStartLeft(); + + break; + } + + case 0x94: + { + $this->clipEndBottom(); + + if ( $this->xx < $this->X_Min ) + break; + + $this->clipStartLeft(); + + if ( $this->y < $this->Y_Min ) + $this->clipStartTop(); + + break; + } + + case 0x96: + { + $this->clipStartLeft(); + + if ( $this->y > $this->Y_Max ) + break; + + $this->clipEndRight(); + + if ( $this->yy < $this->Y_Min ) + break; + + if ( $this->y < $this->Y_Min ) + $this->clipStartTop(); + + if ( $this->yy > $this->Y_Max ) + $this->clipEndBottom(); + + break; + } + + //------------------------------ + // Top-right + //------------------------------ + + case 0xA0: + { + $this->clipStartRight(); + + if ( $this->y < $this->Y_Min ) + $this->clipStartTop(); + + break; + } + + case 0xA1: + { + $this->clipEndLeft(); + + if ( $this->yy < $this->Y_Min ) + break; + + $this->clipStartTop(); + + if ( $this->x > $this->X_Max ) + $this->clipStartRight(); + + break; + } + + case 0xA4: + { + $this->clipEndBottom(); + + if ( $this->xx > $this->X_Max ) + break; + + $this->clipStartRight(); + + if ( $this->y < $this->Y_Min ) + $this->clipStartTop(); + + break; + } + + case 0xA5: + { + $this->clipEndLeft(); + + if ( $this->yy < $this->Y_Min ) + break; + + $this->clipStartRight(); + + if ( $this->y > $this->Y_Max ) + break; + + if ( $this->yy > $this->Y_Max ) + $this->clipEndBottom(); + + if ( $this->y < $this->Y_Min ) + $this->clipStartTop(); + + break; + } + } + + // Round result + $this->x = round( $this->x ); + $this->y = round( $this->y ); + $this->xx = round( $this->xx ); + $this->yy = round( $this->yy ); + } +} + +/** + * Clip line + * + * <p> + * This will take the corners of a line segment and clip them in a define + * area. + * <p> + * Examples of use: + * <code> + * $x = 5; + * $y = 8; + * $xx = 70; + * $yy = 65; + * ClipLine( + * $x , $y , $xx , $yy , + * 10 , 10 , 50 , 50 ); + * </code> + * <p> + * In this example, the values in <var>$x</var>, <var>$y</var>, + * <var>$xx</var>, <var>$yy</var> will be adjusted so they are within + * the (10,10) (50,50) window. + * @param x Left corner of line + * @param y Top corner of line + * @param xx Right corner of line + * @param yy Bottom corner of line + * @param X_Min Left edge of frame + * @param Y_Min Top edge of frame + * @param X_Max Right edge of frame + * @param Y_Max Bottom edge of frame + * @return x, y, xx, yy are all modified (if necessary) + */ +function ClipLine( + &$x , &$y , &$xx , &$yy , + $X_Min , $Y_Min , $X_Max , $Y_Max ) +{ + // All of the work is done simply by creating a clip class + $Clip = new + ClipLine + ( + $x , $y , $xx , $yy , + $X_Min , $Y_Min , $X_Max , $Y_Max + ); +} + +/** + * Draw clipped line + * + * <p> + * Draw a line that has been clipped into the specified image. + * <p> + * Examples of use: + * <code> + * DrawClippedLine( + * $Image , + * 5 , 8 , 70 , 65 , + * 10 , 10 , 50 , 50 , + * $Black ); + * </code> + * In this example, a line will be drawn onto <var>$Image</var> clipped + * within the window (10,10) (50,50). + * @param image Image to draw line on + * @param x Left corner of line + * @param y Top corner of line + * @param xx Right corner of line + * @param yy Bottom corner of line + * @param X_Min Left edge of frame + * @param Y_Min Top edge of frame + * @param X_Max Right edge of frame + * @param Y_Max Bottom edge of frame + * @param Color Color of line + */ +function DrawClippedLine( + $Image , + $x , $y , $xx , $yy , + $X_Min , $Y_Min , $X_Max , $Y_Max , + $Color ) +{ + // Clip this line + ClipLine( + $x , $y , $xx , $yy , + $X_Min , $Y_Min , $X_Max , $Y_Max ); + + // Draw the results + imageline( $Image , $x , $y , $xx , $yy , $Color ); +} + +// "Those who dream by day are cognizant of many things which escape those +// who dream only by night." - Edgar Allan Poe + +?> \ No newline at end of file diff --git a/polynomial/PolynomialRegression.php b/polynomial/PolynomialRegression.php new file mode 100644 index 0000000..3d80ea9 --- /dev/null +++ b/polynomial/PolynomialRegression.php @@ -0,0 +1,395 @@ +<?php +/*=========================================================================*/ +/* Name: PolynomialRegression.php */ +/* Uses: Calculates and returns coefficients for polynomial regression. */ +/* Date: 06/01/2009 */ +/* Author: Andrew Que (http://www.DrQue.net/) */ +/* Revisions: */ +/* 0.8 - 06/01/2009- QUE - Creation. */ +/* 0.9 - 06/14/2012- QUE - */ +/* + Bug fix: removed notice causes by uninitialized variable. */ +/* + Converted naming convention. */ +/* + Fix spelling errors (or the ones I found). */ +/* + Changed to row-echelon method for solving matrix which is much */ +/* faster than the determinant method. */ +/* 0.91 - 05/17/2013- QUE - */ +/* = Changed name to Polynonial regression as this is more fitting to */ +/* to the function. */ +/* 0.92 - 12/28/2013- QUE - */ +/* + Added forced offset. */ +/* 1.00 - 12/29/2013 - QUE - */ +/* + Forced offset changed to allow any term to be forced. */ +/* Unit complete. Correlation coefficient (r-squared) has been */ +/* implemented externally in the demos. */ +/* */ +/* This project is maintained at: */ +/* http://www.drque.net/Projects/PolynomialRegression/ */ +/* */ +/* ----------------------------------------------------------------------- */ +/* */ +/* Polynomial regression class. */ +/* Copyright (C) 2009, 2012-2013 Andrew Que */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 3 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* */ +/* ----------------------------------------------------------------------- */ +/* */ +/* (C) Copyright 2009, 2012-2013 */ +/* Andrew Que */ +/* �|> */ +/*=========================================================================*/ +/** + * Polynomial regression. + * + * <p> + * Used for calculating polynomial regression coefficients. Useful for + * linear and non-linear regression, and polynomial curve fitting. + * + * @package PolynomialRegression + * @author Andrew Que ({@link http://www.DrQue.net/}) + * @copyright Copyright (c) 2009, 2012-2013, Andrew Que + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * @version 1.0 + */ + +/** + * Used for calculating polynomial regression coefficients and interpolation using + * those coefficients. Useful for linear and non-linear regression, and polynomial + * curve fitting. + * + * Note: Requires BC math to be compiled into PHP. Higher-degree polynomials end up + * with very large/small numbers, requiring an arbitrary precision arithmetic. Make sure + * to set "bcscale" as coefficients will likely have decimal values. + * + * Quick example of using this unit to calculate linear regression (1st degree polynomial): + * + * <code> + * $regression = new PolynomialRegression( 2 ); + * // ... + * $regression->addData( $x, $y ); + * // ... + * $coefficients = $regression->getCoefficients(); + * // ... + * $y = $regression->interpolate( $coefficients, $x ); + * </code> + * + * + * @package PolynomialRegression + */ +class PolynomialRegression +{ + private $X_Powers; + private $XY_Powers; + private $degree; + private $forcedValue; + + /** + * Constructor + * + * Create new class. + * @param int $degree Degree + 1 of polynomial. + */ + public function __construct( $degree = 3 ) + { + $this->degree = $degree; + $this->reset(); + + } // __construct + + /** + * Reset data. + * + * Clear all internal data and prepare for new calculation. + * Must be called *after* setDegree if degree is changed. + */ + public function reset() + { + $this->forcedValue = array(); + $this->X_Powers = array(); + $this->XY_Powers = array(); + + $squares = ( $this->degree - 1 ) * 2; + + // Initialize power arrays. + for ( $index = 0; $index <= $squares; ++$index ) + { + $this->X_Powers[ $index ] = 0; + $this->XY_Powers[ $index ] = 0; + } + + } // reset + + /** + * Set degree. + * + * This is the maximum degree polynomial function that will be + * calculated. Note that the request for coefficients can be lower + * then this value. If degree is higher, data must be reset and + * added again. + * @param int $degree Max degree + */ + public function setDegree( $degree ) + { + $this->degree = $degree; + + } // setDegree + + /** + * Set a forced coefficient. + * + * Force a coefficient to be assumed a specific value for the calculation. + * Most often used to force an offset of zero, but can be used to set any + * known coefficient for a set of data. + * @param int $coefficient Which coefficient to force. + * @param int $value Value to force this coefficient. + */ + public function setForcedCoefficient( $coefficient, $value ) + { + $this->forcedValue[ $coefficient ] = $value; + + } // setForcedCoefficient + + /** + * Add data. + * + * Add a data point to calculation. + * @param float $x Some real value. + * @param float $y Some real value corresponding to $x. + */ + public function addData( $x, $y ) + { + $squares = ( $this->degree - 1 ) * 2; + + // Remove the effect of the forced coefficient from this value. + foreach ( $this->forcedValue as $coefficient => $value ) + { + $sub = bcpow( $x, $coefficient ); + $sub = bcmul( $sub, $value ); + $y = bcsub( $y, $sub ); + } + + // Accumulate new data to power sums. + for ( $index = 0; $index <= $squares; ++$index ) + { + $this->X_Powers[ $index ] = + bcadd( $this->X_Powers[ $index ], bcpow( $x, $index ) ); + + $this->XY_Powers[ $index ] = + bcadd + ( + $this->XY_Powers[ $index ], + bcmul( $y, bcpow( $x, $index ) ) + ); + } + + } // addData + + /** + * Get coefficients. + * + * Calculate and return coefficients based on current data. + * @param int $degree Integer value of the degree polynomial desired. Default + * is -1 which is the max degree set by class. + * @return array Array of coefficients (as BC strings). + */ + public function getCoefficients( $degree = -1 ) + { + // If no degree specified, use standard. + if ( $degree == -1 ) + $degree = $this->degree; + + // Build a matrix. + // The matrix is made up of the sum of powers. So if the number represents the power, + // the matrix will look like this for a 4th degree polynomial: + // [ 0 1 2 3 4 ] + // [ 1 2 3 4 5 ] + // [ 2 3 4 5 6 ] + // [ 3 4 5 6 7 ] + // [ 4 5 6 7 8 ] + // + $matrix = array(); + for ( $row = 0; $row < $degree; ++$row ) + { + $matrix[ $row ] = array(); + for ( $column = 0; $column < $degree; ++$column ) + $matrix[ $row ][ $column ] = + $this->X_Powers[ $row + $column ]; + } + + // Create augmented matrix by adding X*Y powers. + for ( $row = 0; $row < $degree; ++$row ) + $matrix[ $row ][ $degree ] = $this->XY_Powers[ $row ]; + + // Add in the forced coefficients. This is done by nulling the row and column + // for each forced coefficient. For example, a 3th degree polynomial + // matrix with have the 2nd coefficient set to F: + // [ a b c d w ] [ a 0 c d w ] + // [ b c d e x ] -> [ 0 1 0 0 F ] + // [ c d e f y ] [ c 0 e f y ] + // [ d e f g z ] [ d 0 f g z ] + foreach ( $this->forcedValue as $coefficient => $value ) + { + for ( $index = 0; $index < $degree; ++$index ) + { + $matrix[ $index ][ $coefficient ] = "0"; + $matrix[ $coefficient ][ $index ] = "0"; + } + + $matrix[ $coefficient ][ $coefficient ] = "1"; + $matrix[ $coefficient ][ $degree ] = $value; + } + + // Determine number of rows in matrix. + $rows = count( $matrix ); + + // Initialize done. + $isDone = array(); + for ( $column = 0; $column < $rows; ++$column ) + $isDone[ $column ] = false; + + // This loop will result in an upper-triangle matrix with the + // diagonals all 1--the first part of row-reduction--using 2 + // elementary row operations: multiplying a row by a scalar, and + // subtracting a row by a multiple of an other row. + // NOTE: This loop can be done out-of-order. That is, the first + // row may not begin with the first term. Order is tracked in the + // "order" array. + $order = array(); + for ( $column = 0; $column < $rows; ++$column ) + { + // Find a row to work with. + // A row that has a term in this column, and has not yet been + // reduced. + $activeRow = 0; + while ( ( ( 0 == $matrix[ $activeRow ][ $column ] ) + || ( $isDone[ $activeRow ] ) ) + && ( $activeRow < $rows ) ) + { + ++$activeRow; + } + + // Do we have a term in this row? + if ( $activeRow < $rows ) + { + // Remember the order. + $order[ $column ] = $activeRow; + + // Normalize row--results in the first term being 1. + $firstTerm = $matrix[ $activeRow ][ $column ]; + for ( $subColumn = $column; $subColumn <= $rows; ++$subColumn ) + $matrix[ $activeRow ][ $subColumn ] = + bcdiv( $matrix[ $activeRow ][ $subColumn ], $firstTerm ); + + // This row is finished. + $isDone[ $activeRow ] = true; + + // Subtract the active row from all rows that are not finished. + for ( $row = 0; $row < $rows; ++$row ) + if ( ( ! $isDone[ $row ] ) + && ( 0 != $matrix[ $row ][ $column ] ) ) + { + // Get first term in row. + $firstTerm = $matrix[ $row ][ $column ]; + for ( $subColumn = $column; $subColumn <= $rows; ++$subColumn ) + { + $accumulator = bcmul( $firstTerm, $matrix[ $activeRow ][ $subColumn ] ); + $matrix[ $row ][ $subColumn ] = + bcsub( $matrix[ $row ][ $subColumn ], $accumulator ); + } + } + } + } + + // Reset done. + for ( $row = 0; $row < $rows; ++$row ) + $isDone[ $row ] = false; + + $coefficients = array(); + + // Back-substitution. + // This will solve the matrix completely, resulting in the identity + // matrix in the x-locations, and the coefficients in the last column. + // | 1 0 0 ... 0 c0 | + // | 0 1 0 ... 0 c1 | + // | . . . . . | + // | . . . . . | + // | 0 0 0 ... 1 cn | + for ( $column = ( $rows - 1 ); $column >= 0; --$column ) + { + // The active row is based on order. + $activeRow = $order[ $column ]; + + // The active row is now finished. + $isDone[ $activeRow ] = true; + + // For all rows not finished... + for ( $row = 0; $row < $rows; ++$row ) + if ( ! $isDone[ $row ] ) + { + $firstTerm = $matrix[ $row ][ $column ]; + + // Back substitution. + for ( $subColumn = $column; $subColumn <= $rows; ++$subColumn ) + { + $accumulator = + bcmul( $firstTerm, $matrix[ $activeRow ][ $subColumn ] ); + $matrix[ $row ][ $subColumn ] = + bcsub( $matrix[ $row ][ $subColumn ], $accumulator ); + } + } + + // Save this coefficient for the return. + $coefficients[ $column ] = $matrix[ $activeRow ][ $rows ]; + } + + // Coefficients are stored backward, so sort them. + ksort( $coefficients ); + + // Return the coefficients. + return $coefficients; + + } // getCoefficients + + /** + * Interpolate + * + * Return y point for given x and coefficient set. + * @param array $coefficients Coefficients as calculated by 'getCoefficients'. + * @param float $x X-coordinate from which to calculate Y. + * @return float Y-coordinate (as floating-point). + */ + public function interpolate( $coefficients, $x ) + { + $degree = count( $coefficients ); + + $y = 0; + for ( $coefficentIndex = 0; $coefficentIndex < $degree; ++$coefficentIndex ) + $y = + bcadd + ( + $y, + bcmul + ( + $coefficients[ $coefficentIndex ], + bcpow( $x, $coefficentIndex ) + ) + ); + + return floatval( $y ); + + } // interpolate + +} // Class + +?> diff --git a/polynomial/XY_Plot.php b/polynomial/XY_Plot.php new file mode 100644 index 0000000..427c6ab --- /dev/null +++ b/polynomial/XY_Plot.php @@ -0,0 +1,1985 @@ +<?php +/*=========================================================================*/ +/* Name: XY_Plot.php */ +/* Uses: Creates a trend with X/Y data */ +/* Date: 4/12/2007 */ +/* Author: Andrew Que (http://www.DrQue.net/) */ +/* Revisions: */ +/* 0.1 - 4/12/2007 - QUE - Creation */ +/* 1.0 - 4/29/2007 - QUE - Base functionality */ +/* 1.1 - 11/24/2007 - QUE - Added linear regression */ +/* 1.1.1 - 12/15/2007 - QUE - Added line clipping */ +/* 1.1.2 - 12/24/2007 - QUE - PHPDoc documentation added */ +/* 1.1.3 - 12/28/2007 - QUE - Small bug fixes */ +/* 1.2 - 12/29/2007 - QUE - Grid lines and lables */ +/* 1.2.1 - 1/1/2008 - QUE - Added circle clipping */ +/* */ +/* Website: http://xyplot.drque.net/ */ +/* The newest version and information about this project are on the */ +/* website. */ +/* ----------------------------------------------------------------------- */ +/* */ +/* X/Y trend with linear regression script */ +/* Copyright (C) 2007 Andrew Que */ +/* */ +/* This program is free software: you can redistribute it and/or modify */ +/* it under the terms of the GNU General Public License as published by */ +/* the Free Software Foundation, either version 3 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* */ +/* ----------------------------------------------------------------------- */ +/* */ +/* (C) Copyright 2007-2008 */ +/* Andrew Que */ +/* �|> */ +/*=========================================================================*/ +/** + * X/Y plot + * + * <p> + * Used for creating graphs of X/Y data and includes functions for + * drawing mean average and linear regression. Functions include: + * <ul> + * <li>Line drawing. Lines are drawen between each point</li> + * <li>Point drawing. Each point is charted</li> + * <li>Mean average. A line denoting the average</li> + * <li>Linear regression. Linear regression line</li> + * <li>Grid lines and lables.</li> + * </ul> + * + * @package XY_Plot + * @author Andrew Que ({@link http://www.DrQue.net/}) + * @copyright Copyright (c) 2007-2008, Andrew Que + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + * + */ + +/** + * Requirenments + */ +require_once('./polynomial/ClipLine.php'); +require_once('./polynomial/ClipCircle.php'); + +/** + * A rectangular area define by the upper left corner and the lower right + * @package XY_Plot + */ +class Window +{ + protected $x; + protected $y; + protected $xx; + protected $yy; + + /** + * Constructor + * + * Create a new window with specified area + * @param $x left edge + * @param $y top edge + * @param $xx right edge + * @param $yy bottom edge + */ + public function __construct( $x , $y , $xx , $yy ) + { + $this->x = $x; + $this->y = $y; + $this->xx = $xx; + $this->yy = $yy; + } + + /** + * Resize window + * + * Change the size of the window to the new area + * @param $x left edge + * @param $y top edge + * @param $xx right edge + * @param $yy bottom edge + */ + public function Resize( $x , $y , $xx , $yy ) + { + $this->x = $x; + $this->y = $y; + $this->xx = $xx; + $this->yy = $yy; + } + + /** + * Get left coordinate + */ + public function GetX() + { + return $this->x; + } + + /** + * Get top coordinate + */ + public function GetY() + { + return $this->y; + } + + /** + * Get right coordinate + */ + public function GetXX() + { + return $this->xx; + } + + /** + * Get bottom coordinate + */ + public function GetYY() + { + return $this->yy; + } + + /** + * Return width (delta x) + */ + public function GetWidth() + { + return $this->xx - $this->x; + } + + /** + * Return height (delta y) + */ + public function GetHeigth() + { + return $this->yy - $this->y; + } +} + +/** + * X/Y plot class + * + * <p> + * Used to create a plot of X/Y data + * <p> + * Examples of use: + * <code> + * $Plot = new XY_PlotClass( $Image ); // <- Initilize + * $Plot->AddData( 1 , 5 ); // <- Add some data + * $Plot->AddData( 3 , 2 ); + * $Plot->AddData( 4 , 4 ); + * $Plot->SetColor( $Black ); // <- Line color + * $Plot->RenderWithLines(); // <- Draw lines into $Image + * </code> + * @package XY_Plot + */ +class XY_PlotClass +{ + /**#@+ @ignore */ + protected $Image; + protected $Window; + protected $X_Max = -1; + protected $X_Min = -1; + protected $Y_Min = 0; + protected $Y_Max = 100; + protected $Color = 0; + protected $LinearRegressionColor = 0; + protected $LinearRegressionThickness = 4; + protected $LinearAverageColor = 0; + protected $Data = array(); + protected $WindowedData = array(); + protected $RenderMethod = "Points"; + protected $Slope; + protected $Correlation; + protected $Y_Intercept; + protected $Average; + protected $MaxX_Distance = 0; + protected $CircleSize = 5; + protected $AverageWidth = 1; + protected $IsDataCalculated = false; + + protected $Y_MajorDivisionExtention = 0; + protected $Y_MajorDivisionScale = 1; + protected $Y_MajorDivisionColor; + protected $Y_MajorDivisionTextColor; + protected $Y_MajorTextCallback = null; + protected $Y_MajorTextFontSize = 2; + protected $Y_MinorDivisionScale = 1; + protected $Y_MinorDivisionColor; + + protected $X_MajorDivisionExtention = 0; + protected $X_MajorDivisionScale = 1; + protected $X_MajorDivisionColor; + protected $X_MajorDivisionTextColor; + protected $X_MajorTextCallback = null; + protected $X_MajorTextFontSize = 2; + + protected $X_MajorCustomStart = null; + protected $X_MajorCustomIncrement = null; + protected $X_MajorCustomEnd = null; + + protected $X_MinorDivisionScale = 1; + protected $X_MinorDivisionColor; + protected $X_MinorTextFontSize = 2; + + protected $X_MinorCustomStart = null; + protected $X_MinorCustomIncrement = null; + protected $X_MinorCustomEnd = null; + /**#@-*/ + + /** + * Constructor + * @param $Image The image to use for the plot + */ + public function __construct( $Image ) + { + $this->Image = $Image; + + // Assume graph uses entire window + $this->Window = + new Window( + 0 , 0 , + imagesx( $this->Image ) , imagesy( $this->Image ) ); + } + + /** + * Set the width of the mean average plot + * + * Set the width of the mean average plot line + * @param $Value New width + */ + public function SetAverageWidth( $Value ) + { + $this->AverageWidth = $Value; + } + + /** + * Get mean average width + * + * Return mean average width + * @return mean average width + */ + public function GetAverageWidth() + { + return $this->AverageWidth; + } + + /** + * Set the max and max X-span + * + * The values for X-min and X-max further narrow down the data added + * to the plot. This specifies a range of X values that will be on the + * the chart. + * @param $X_Min The lowest X-value to include in chart + * @param $X_Max The highest X-value to include in chart + */ + public function SetX_Span( $X_Min , $X_Max ) + { + $this->X_Max = $X_Max; + $this->X_Min = $X_Min; + $IsDataCalculated = false; + } + + /** + * Limit Y-axis range + * + * Set the range for Y values. Values above and below the min and + * max values will be clipped. + * @param $Y_Min The lowest Y-value to include in chart + * @param $Y_Max The highest Y-value to include in chart + */ + public function SetY_Span( $Y_Min , $Y_Max ) + { + $this->Y_Min = $Y_Min; + $this->Y_Max = $Y_Max; + } + + /** + * Resize the viewing window + * @param $x left edge + * @param $y top edge + * @param $xx right edge + * @param $yy bottom edge + */ + public function SizeWindow( $x , $y , $xx , $yy ) + { + $this->Window->Resize( $x , $y , $xx , $yy ); + } + + /** + * Set the color of the line plot + * + * This is the color of the line created by <b>RenderWithLines()</b>. + * @param $Color Color of the line + */ + public function SetColor( $Color ) + { + $this->Color = $Color; + } + + /** + * Set color of the linear regression line + * + * This is the color of the line created by <b>RenderLinearRegression()</b>. + * @param $Color Color of the line + */ + public function SetLinearRegressionColor( $Color ) + { + $this->LinearRegressionColor = $Color; + } + + /** + * Set color of the average line + * + * This is the color of the line created by <b>RenderMeanPlot()</b>. + * @param $Color Color of the line + */ + public function SetAverageColor( $Color ) + { + $this->LinearAverageColor = $Color; + } + + /** + * Flush all data + * + * This will remove add data points from the plot. Useful for adding more + * then one plot to an image. + */ + public function ResetData() + { + $this->Data = array(); + $IsDataCalculated = false; + } + + /** + * Add a data point + * + * This called for every data point to be part of the chart. + * @param $x X-cord of data point + * @param $y Y value of point at X + */ + public function AddData( $x , $y ) + { + $this->Data[ "$x" ] = (float)$y; + $IsDataCalculated = false; + } + + /** + * Max gab between x values + * + * Set the maximum gap between x values before a line no longer + * connects them. Useful when areas of data are missing. Set to + * 0 to disable (default). + * @param $Distance Max distance between x values + */ + public function SetMaxX_Distance( $Distance ) + { + $this->MaxX_Distance = $Distance; + } + + /** + * Get the max gab between x balues + */ + public function GetMaxX_Distance( $Distance ) + { + return $this->MaxX_Distance; + } + + /** + * Linear regression line thickness + * + * Set thickness of linear regression line. Default is 4 pixels. + * @param $Value Thickness + */ + public function SetLinearRegressionThickness( $Value ) + { + $this->LinearRegressionThickness = $Value; + } + + /** + * Get Linear regression line thickness + * + * Return thickness of linear regression line. + * @return Thickness + */ + public function GetLinearRegressionThickness() + { + return $this->LinearRegressionThickness; + } + + /** + * Set circle size for data points + * + * The circle size is a parameter for the <b>RenderPoints()</b> + * method. The size is the dimeter of the circle used to denote a point + * on the chart. Default size is 5 pixels. + * @param $Size Dimeter of circle + */ + public function SetCircleSize( $Size ) + { + $this->CircleSize = $Size; + } + + /** + * Return the lowest Y data scale + */ + public function GetY_Min() + { + return $this->Y_Min; + } + + /** + * Return the highest Y data scale + */ + public function GetY_Max() + { + return $this->Y_Max; + } + + /** + * Return the lowest X data scale + */ + public function GetX_Min() + { + return $this->X_Min; + } + + /** + * Return the highest x data scale + */ + public function GetX_Max() + { + return $this->X_Max; + } + + /** + * Computed slope + * + * <p> + * Return the slope computer through linear regression. Requires a call + * to <b>CalculateLinearRegression()</b> before containing + * valid data. + * <p> + * This is the <i>m</i> part of the standard line function <i>y = mx + b</i> + * @return Slope of linear regression line + */ + public function GetSlope() + { + return $this->Slope; + } + + /** + * Computed Y-intercept + * + * <p> + * Returns the Y-intercept computed through linear regression. Requires + * a call to <b>CalculateLinearRegression()</b> before containing + * valid data. + * <p> + * This is the <i>b</i> part of the standard line function <i>y = mx + b</i> + * @return Y-intercept + */ + public function GetY_Intercept() + { + return $this->Y_Intercept; + } + + /** + * Correlation coefficient + * + * Returns the correlation coefficient computed through linear regression. Requires + * a call to <b>CalculateLinearRegression()</b> before containing + * valid data. + * @return Correlation coefficient + */ + public function GetCorrelation() + { + return $this->Correlation; + } + + /** + * Mean average + * + * Return the mean average of data within X span. Requires a call + * to <b>CalculateMeanAverage</b> before containing valid data. + * @return Mean average + */ + public function GetAverage() + { + return $this->Average; + } + + //------------------------------------------------------------------------ + + /** + * Build an array narrowed in on the x-frame + */ + private function BuildWindowArray() + { + // Have we built this array already? + if ( ! $IsDataCalculated ) + { + // Sort data + ksort( $this->Data ); + + // Clear array + $this->WindowedData = array(); + + // For all samples + foreach ( $this->Data as $x => $y ) + { + // Within sample window? + if ( ( $x < $this->X_Min ) + || ( $x > $this->X_Max ) ) + continue; + + // Add to windowed data + $this->WindowedData[] = + array( "x" => $x , "y" => $y ); + } + + // Data is now calculated + $IsDataCalculated = true; + } + + return $this->WindowedData; + } + + /** + * Scale a Y data point into the Y window scale + * + * This function will translate the value in $y to a verticle + * pixel location in the image window. This function can be useful + * for drawing grid lines. + * @param $y The Y-value to translate + * @return translated Y-value + */ + public function ScaleY( $y ) + { + // Compute delta Y + $Y_Delta = $this->Y_Max - $this->Y_Min; + + // Strip minimum value + $y -= $this->Y_Min; + + // Scale data + if ( $Y_Delta != 0 ) + $y = ( $y * $this->Window->GetHeigth() ) / $Y_Delta; + else + $y = 0; + + // Adjust for window height + $y = $this->Window->GetHeigth() - $y; + + return $y; + } + + /** + * Scale a X data point into the X window scale + * + * This function will translate the value in $x to a horizontal + * pixel location in the image window. + * @since verion 1.2 + * @param $x The X-value to translate + * @return translated X-value + */ + public function ScaleX( $x ) + { + // Scale x + $x -= $this->X_Min; + $x = $x * $this->Window->GetWidth(); + $x /= $this->X_Max - $this->X_Min; + $x = round( $x ); + + return $x; + } + + /** + * Calculate the lowest value of Y data + * + * @return Lowest Y value in data + */ + public function FindY_Min() + { + $WindowArray = $this->BuildWindowArray(); + $Min = $WindowArray[ 0 ][ "y" ]; + + // For all data + for ( $Index = 0; $Index < count( $WindowArray ); ++$Index ) + $Min = Min( $Min , $WindowArray[ $Index ][ "y" ] ); + + return $Min; + } + + /** + * Calculate the highest value of Y data + * + * @return Highest Y value in data + */ + public function FindY_Max() + { + $WindowArray = $this->BuildWindowArray(); + $Max = $WindowArray[ 0 ][ "y" ]; + + // For all data + for ( $Index = 0; $Index < count( $WindowArray ); ++$Index ) + $Max = Max( $Max , $WindowArray[ $Index ][ "y" ] ); + + return $Max; + } + + /** + * Number of data points + * + * Find the number of data points in the window + * @return Number of data points + */ + public function FindNumberOfDataPoints() + { + $WindowArray = $this->BuildWindowArray(); + return count( $WindowArray ); + } + + /** + * Calculate the lowest value of X data + * + * @return Lowest X value in data + */ + public function FindX_Min() + { + $Min = min( array_keys( $this->Data ) ); + + return $Min; + } + + /** + * Calculate the highest value of X data + * @return Highest X value in data + */ + public function FindX_Max() + { + $Max = max( array_keys( $this->Data ) ); + + return $Max; + } + + /** + * Automaticlly adjust the min and max values + * + * Scale Y min/max to fit all the data. This will find the min and + * max values of Y and set Y-min and Y-max accordingly. A rounding + * paremters can be used to round down/up and min/max values. For + * example, a round value of 0.1 will round to the nearest 10th. If + * Y-max was .22 and Y-min was .15, the values used with be .3 and .1 + * @param $Round Decimal to round to + */ + public function AutoScaleY_MinMax( $Round ) + { + // Fetch data + $WindowArray = $this->BuildWindowArray(); + $First = current( $WindowArray ); + $Y_Max = $Y_Min = $First[ "y" ]; + + // For all data points + foreach ( $WindowArray as $Data ) + { + $Y_Min = Min( $Y_Min , $Data[ "y" ] ); + $Y_Max = Max( $Y_Max , $Data[ "y" ] ); + } + + // If rounding + if ( $Round > 0 ) + { + $Round = 1 / $Round; + $Y_Min = floor( $Y_Min * $Round ) / $Round; + $Y_Max = ceil( $Y_Max * $Round ) / $Round; + } + + // Set this as the new span + $this->SetY_Span( $Y_Min , $Y_Max ); + } + + /** + * Automaticlly adjust the Y min and max values + * + * @deprecated Use AutoScaleY_MinMax + */ + public function AdjustMinMax( $Round ) + { + $this->AutoScaleY_MinMax( $Round ); + } + + /** + * Automaticlly adjust the X min and max values + * + * Scale X min/max to fit all the data. This will find the min and + * max values of X and set X-min and X-max accordingly. A rounding + * paremters can be used to round down/up and min/max values. For + * example, a round value of 0.1 will round to the nearest 10th. If + * X-max was .22 and X-min was .15, the values used with be .3 and .1 + * @param $Round Decimal to round to + */ + public function AutoScaleX_MinMax( $Round = 0 ) + { + $X_Min = min( array_keys( $this->Data ) ); + $X_Max = max( array_keys( $this->Data ) ); + + // If rounding + if ( $Round > 0 ) + { + $Round = 1 / $Round; + $X_Min = floor( $X_Min * $Round ) / $Round; + $X_Max = ceil( $X_Max * $Round ) / $Round; + } + + // Set this as the new span + $this->SetX_Span( $X_Min , $X_Max ); + } + + + /** + * Calculate mean average + * + * Calculate the mean average of data inside the plot + * @return Average + */ + public function CalculateMeanAverage() + { + // Fetch data + $WindowArray = $this->BuildWindowArray(); + $Count = $n = count( $WindowArray ); + + // Do all sumations + $Average = 0.0; + for ( $Index = 0; $Index < $Count; ++$Index ) + $Average += $WindowArray[ $Index ][ "y" ]; + + $Average /= $Count; + + $this->Average = $Average; + } + + /** + * Calculate slope and y-intercept of least square linear regression + * + * This function is needed if the data from the linear regression + * calculation is needed but the linear regression plot hasn't been drawn. + * After this function is called, <b>GetSlope</b> and <b>GetY_Intercept</b> + * will return valid information. + */ + public function CalculateLinearRegression() + { + $DeltaX = $this->X_Max - $this->X_Min; + + // Fetch data + $WindowArray = $this->BuildWindowArray(); + $Count = $n = count( $WindowArray ); + + // No data? + if ( $Count == 0 ) + { + $this->Slope = $m = 0; + $this->Y_Intercept = $b = 0; + return; + } + + // Do all sumations + $SumX = $SumY = $SumXY = $SumXX = $SumYY = 0.0; + for ( $Index = 0; $Index < $Count; ++$Index ) + { + $x = $WindowArray[ $Index ][ "x" ] - $this->X_Min; + $y = $WindowArray[ $Index ][ "y" ]; + $SumX += $x; // � x + $SumY += $y; // � y + $SumXY += $x * $y; // � xy + $SumXX += $x * $x; // � x^2 + $SumYY += $y * $y; // � y^2 + } + + $SumX_SumX = $SumX * $SumX; // ( �x )^2 + $SumY_SumY = $SumY * $SumY; // ( �y )^2 + + // Slope: + // n �xy - �x �y + // m = ------------------- + // n �x^2 - ( �x )^2 + // + $Numerator = ( $n * $SumXY ) - ( $SumX * $SumY ); + $Denominator = ( $n * $SumXX ) - $SumX_SumX; + + if ( $Denominator ) + $m = $Numerator / $Denominator; + else + $m = 0; + + // Y-intercept: + // �y - m �x + // b = ----------- + // n + // + $b = ( $SumY - ( $m * $SumX ) ) / $n; + + // Correlation coefficient + // n �xy - �x �y + // r = --------------------------------------------- + // �[ n �x^2 - ( �x )^2 ][ n �y^2 - ( �y )^2 ] + // + $Numerator = ( $n * $SumXY ) - ( $SumX * $SumY ); + + $AccumulatorX = ( $n * $SumXX ) - $SumX_SumX; + $AccumulatorY = ( $n * $SumYY ) - $SumY_SumY; + $Denominator = sqrt( $AccumulatorX * $AccumulatorY ); + + if ( $Denominator ) + $r = $Numerator / $Denominator; + else + $r = 0; + + // Save information + $this->Slope = $m; + $this->Y_Intercept = $b; + $this->Correlation = $r; + } + + //------------------------------------------------------------------------ + + /** + * Draw points for each data point given + * + * This creates a point plot in the image specified during creation of + * the class. Each point is of the size specified by <b>SetCircleSize</b> + * and of the color specified by <b>SetColor</b> + */ + public function RenderPoints() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + $MarginBottom = $this->Window->GetYY(); + + $Height = $this->Window->GetHeigth(); + + // Delta Y + $Y_Delta = $this->Y_Max - $this->Y_Min; + + // Delta X + $DeltaX = $this->X_Max - $this->X_Min; + + // Get data points + $WindowArray = $this->BuildWindowArray(); + + // Number of data points + $IndexMax = count( $WindowArray ) ; + + // For each point + for ( $Index = 0; $Index < $IndexMax; ++$Index ) + { + // Scale x + $x = $this->ScaleX( $WindowArray[ $Index ][ "x" ] ); + + // Scale y + $y = $this->ScaleY( $WindowArray[ $Index ][ "y" ] ); + + // Draw point + ClippedFilledCircle( + $this->Image , + $MarginLeft + $x , + $MarginTop + $y , + $this->CircleSize , + $this->Color , + $MarginLeft , + $MarginTop , + $MarginRight , + $MarginBottom + ); + + } + + } + + /** + * Draw lines from point to point + * + * This creates a line plot in the image specified during creation of + * the class. Lines will connect all the points in the graph, sorted by + * their x-values. A gap in the chart will be left if the distance + * between two points is over the values specified with <b>SetMaxX_Distance</b>. + * The color of the lines is specified with <b>SetColor</b> + */ + public function RenderWithLines() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + $MarginBottom = $this->Window->GetYY(); + + // Delta Y + $Y_Delta = $this->Y_Max - $this->Y_Min; + + // Delta X + $DeltaX = $this->X_Max - $this->X_Min; + + // Get data points + $WindowArray = $this->BuildWindowArray(); + + // Number of data points + $IndexMax = count( $WindowArray ) ; + + $LastY = null; + $LastX = 0; + $LastRawX = null; + + // For each point + for ( $Index = 0; $Index < $IndexMax; ++$Index ) + { + // Scale x + $x = $this->ScaleX( $WindowArray[ $Index ][ "x" ] ); + + // Scale y + $y = $this->ScaleY( $WindowArray[ $Index ][ "y" ] ); + + // Delta X between this sample and last + $X_Span = $WindowArray[ $Index ][ "x" ] - $LastRawX; + + // Is this distance too great? + if ( ( $LastY === null ) + || ( ( $this->MaxX_Distance != 0 ) + && ( $X_Span > $this->MaxX_Distance ) ) ) + { + $LastX = $x; + $LastY = $y; + $LastRawX = $WindowArray[ $Index ][ "x" ]; + + // Skip plotting this line + continue; + } + + // Locations of line + $PointX = $MarginLeft + $LastX; + $PointY = $MarginTop + $LastY; + $PointXX = $MarginLeft + $x; + $PointYY = $MarginTop + $y; + + // Draw clipped line + DrawClippedLine( + $this->Image , + $PointX , $PointY , + $PointXX , $PointYY , + $MarginLeft , $MarginTop , + $MarginRight , $MarginBottom , + $this->Color ); + + // Set last coordinates to current + $LastX = $x; + $LastY = $y; + $LastRawX = $WindowArray[ $Index ][ "x" ]; + } + + } + + /** + * Draw linear regression plot + * + * This function will compute and draw a line representing the mean + * square linear regression of the data within the window. + */ + public function RenderLinearRegression() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + $MarginBottom = $this->Window->GetYY(); + + // Calculate linear regression data + $this->CalculateLinearRegression(); + + $DeltaX = $this->X_Max - $this->X_Min; + $m = $this->Slope; + $b = $this->Y_Intercept; + + // Standard line function is y = mx + b + $y = $this->ScaleY( $b , false ); + $yy = $this->ScaleY( ( $m * $DeltaX ) + $b , false ); + + $x = $MarginLeft; + $y = $MarginTop + $y + $Index; + $xx = $MarginRight; + $yy = $MarginTop + $yy + $Index; + + // Draw line + for ( $Index = 0; $Index < $this->LinearRegressionThickness; ++$Index ) + { + $Y_Offset = floor( $Index - ( $this->LinearRegressionThickness / 2 ) ); + DrawClippedLine( + $this->Image , + $x , $y + $Y_Offset , + $xx , $yy + $Y_Offset , + $MarginLeft , $MarginTop , + $MarginRight , $MarginBottom , + $this->LinearRegressionColor ); + } + } + + /** + * Draw mean average line + * + * This creates a line denoting the mean average in the image specified + * during creation of the class. + */ + public function RenderMeanPlot() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + + // Calculate average + $this->CalculateMeanAverage(); + + // Standard line function is y = mx + b + $y = $this->ScaleY( $this->Average ); + + // Draw average + for ( $Index = 0; $Index < $this->AverageWidth; ++$Index ) + imageline( + $this->Image , + $MarginLeft , $MarginTop + $y + $Index , + $MarginRight , $MarginTop + $y + $Index , + $this->LinearAverageColor ); + } + + //------------------------------------------------------------------------ + // Grids + //------------------------------------------------------------------------ + + /** + * Font size for verticle major divisions + * + * This sets the size of the font (PHP's internal fonts for GD) used + * for verticle lables + * @param $Value new font size must be between 1 and 5 + * @since verion 1.2 + */ + function SetY_MajorTextFontSize( $Value ) + { + assert( $Value >= 1 ); + assert( $Value <= 5 ); + $this->Y_MajorTextFontSize = $Value; + } + + /** + * Get font size for verticle divisions + * + * Return the font size for verticle divisison + * @return font size for verticle divisions + * @since verion 1.2 + */ + function GetY_MajorTextFontSize() + { + return $this->Y_MajorTextFontSize; + } + + /** + * Major verticle division extention + * + * Number of pixels past the margin to extend major verticle divisions + * Default is 0. + * @param $Value Pixel to extend + * @since verion 1.2 + */ + function SetY_MajorDivisionExtention( $Value ) + { + $this->Y_MajorDivisionExtention = $Value; + } + + /** + * Major verticle division extention + * + * Current number of pixels past the margin to extend major verticle + * divisions + * @return verticle division extention + * @since verion 1.2 + */ + function GetY_MajorDivisionExtention() + { + return $this->Y_MajorDivisionExtention; + } + + /** + * Major verticle scale + * + * These are the increments in which the major verticle scale + * is labled. For example, a value of 50 would place divides every + * 50 units. + * @param $Value Scale + * @since verion 1.2 + */ + function SetY_MajorDivisionScale( $Value ) + { + $this->Y_MajorDivisionScale = $Value; + } + + /** + * Get major verticle scale + * + * Return increments in which the major verticle scale + * is labled. + * @return increments of scale + * @since verion 1.2 + */ + function GetY_MajorDivisionScale() + { + return $this->Y_MajorDivisionScale; + } + + /** + * Color of major verticle divisions + * + * Set the color of major verticle divisions + * @param $Value Allocated color in the image + * @since verion 1.2 + */ + function SetY_MajorDivisionColor( $Value ) + { + $this->Y_MajorDivisionColor = $Value; + } + + /** + * Get color of major verticle divisions + * + * Return the color of major verticle divisions + * @return color + * @since verion 1.2 + */ + function GetY_MajorDivisionColor() + { + return $this->Y_MajorDivisionColor; + } + + /** + * Color of major verticle division lables + * + * Set color of major verticle divisions lables + * @param $Value Allocated color in the image + * @since verion 1.2 + */ + function SetY_MajorDivisionTextColor( $Value ) + { + $this->Y_MajorDivisionTextColor = $Value; + } + + /** + * Get color of major verticle division lables + * + * Return the current color of text lables for verticle division lables + * @return color + * @since verion 1.2 + */ + function GetY_MajorDivisionTextColor() + { + return $this->Y_MajorDivisionTextColor; + } + + /** + * Text callback for verticle division lables + * + * <p> + * Assigns a custom callback for creating a string for verticle + * lables. The callback function is passed 3 parameters: a value, + * x location and y location. The callback function can do one of two + * things. + * <p> + * The callback function may return a string with the value properly + * formatted. + * <code> + * function FormatCallback( $Value ) + * { + * return "$" . number_format( $Value , 2 ); + * } + * </code> + * <p> + * This function is an example of a simple callback, formatting the + * number as a dollor amount. + * <p> + * The other option is to make place custom text at the location + * <code> + * function FormatCallback( $Value , $x , $y ) + * { + * // Price for this division + * imagestring( + * $Image , + * $FontSize , + * $x + $CenterBias , $y , + * $String , + * $ColorMap[ "Black" ] ); + * + * return ""; + * } + * </code> + * <p> + * This example (which is not functional) shows how such a function might + * look. The parameters of $x and $y are the location of the point at + * which the text is to be placed. By returning nothing, XY Plot will + * print nothing to the chart. + * @param $Value callback function + * @since verion 1.2 + */ + function SetY_MajorTextCallback( $Value ) + { + $this->Y_MajorTextCallback = $Value; + } + + /** + * Get text callback for verticle division lables + * + * Return the callback function for verticle division lables + * @return function name + * @since verion 1.2 + */ + function GetY_MajorTextCallback() + { + return $this->Y_MajorTextCallback; + } + + + /** + * Major verticle divisions + * + * Draw major verticle (top to bottom) divisions and add text lables + * @since verion 1.2 + */ + function DrawY_MajorDivisions() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + $MarginBottom = $this->Window->GetYY(); + + // Round off start and end of horizontal divisions + $Round = 1.0 / $this->Y_MajorDivisionScale; + $Y_MinStart = floor( $this->Y_Min * $Round ) / $Round; + $Y_MaxStart = ceil( $this->Y_Max * $Round ) / $Round; + $Y_Position = $Y_MaxStart; + + // While more divisions remain to be drawn + while ( $Y_Position >= $Y_MinStart ) + { + // Get vertical location of line + $y = round( $this->ScaleY( $Y_Position , false ) ); + $y += $MarginTop; + + // Is this within the margins? + if ( ( $y < $MarginTop ) + || ( $y > $MarginBottom ) ) + { + $Y_Position -= $this->Y_MajorDivisionScale; + continue; + } + + $x = $MarginRight + $this->Y_MajorDivisionExtention; + + // Division line + imageline( + $this->Image , + $MarginLeft , + $y , + $x , + $y , + $this->Y_MajorDivisionColor ); + + $Callback = $this->Y_MajorTextCallback; + + // Lable for division + if ( $Callback ) + $String = $Callback( $Y_Position , $x , $y ); + else + $String = number_format( $Y_Position , 0 ); + + // If there is a string to print + if ( $String != "" ) + { + $CenterBias = ImageFontHeight( $this->Y_MajorTextFontSize ); + $CenterBias /= 2; + $CenterBias = -round( $CenterBias ); + + // Price for this division + imagestring( + $this->Image , + $this->Y_MajorTextFontSize , + $x + 4 , $y + $CenterBias , + $String , + $this->Y_MajorDivisionTextColor ); + } + + // Next... + $Y_Position -= $this->Y_MajorDivisionScale; + } + + } + + /** + * Minor verticle scale + * + * These are the increments in which the minor verticle scale + * is labled. For example, a value of 50 would place divides every + * 50 units. + * @param $Value Scale + * @since verion 1.2 + */ + function SetY_MinorDivisionScale( $Value ) + { + $this->Y_MinorDivisionScale = $Value; + } + + /** + * Get minor verticle scale + * + * Return increments in which the minor verticle scale + * is labled. + * @return increments of scale + * @since verion 1.2 + */ + function GetY_MinorDivisionScale() + { + return $this->Y_MinorDivisionScale; + } + + /** + * Color of minor verticle divisions + * + * Set the color of minor verticle divisions + * @param $Value Allocated color in the image + * @since verion 1.2 + */ + function SetY_MinorDivisionColor( $Value ) + { + $this->Y_MinorDivisionColor = $Value; + } + + /** + * Get color of minor verticle divisions + * + * Return the color of minor verticle divisions + * @return color + * @since verion 1.2 + */ + function GetY_MinorDivisionColor() + { + return $this->Y_MinorDivisionColor; + } + + /** + * Minor verticle divisions + * + * Draw minor verticle (top to bottom) divisions + * @since verion 1.2 + */ + function DrawY_MinorDivisions() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + $MarginBottom = $this->Window->GetYY(); + + // Round off start and end of horizontal divisions + $Round = 1.0 / $this->Y_MinorDivisionScale; + $Y_MinStart = floor( $this->Y_Min * $Round ) / $Round; + $Y_MaxStart = ceil( $this->Y_Max * $Round ) / $Round; + $Y_Position = $Y_MaxStart; + + // While more divisions remain to be drawn + while ( $Y_Position >= $Y_MinStart ) + { + // Get vertical location of line + $y = round( $this->ScaleY( $Y_Position , false ) ); + $y += $MarginTop; + + // Is this within the margins? + if ( ( $y < $MarginTop ) + || ( $y > $MarginBottom ) ) + { + $Y_Position -= $this->Y_MinorDivisionScale; + continue; + } + + $x = $MarginRight + $this->Y_MinorDivisionExtention; + + // Division line + imageline( + $this->Image , + $MarginLeft , + $y , + $x , + $y , + $this->Y_MinorDivisionColor ); + + // Next... + $Y_Position -= $this->Y_MinorDivisionScale; + } + + } + + /** + * Custom major horizontal start value + * + * This is the value from which to start the grid lines. + * Set to null to disable (default). + * @param $Value Value to start from + * @since verion 1.2 + */ + function SetX_MajorCustomStart( $Value ) + { + $this->X_MajorCustomStart = $Value; + } + + /** + * Return custom start value + * @return Custom start value + * @since verion 1.2 + */ + function GetX_MajorCustomStart() + { + return $this->X_MajorCustomStart; + } + + /** + * Custom major horizontal division increment function + * + * The custom increment function must take a value and return + * the next value. This function is useful if the graph is not + * split up linearly, such as with logarithmic divisions or divisions + * by month. + * @param $Value A custom increment function + * @since verion 1.2 + */ + function SetX_MajorCustomIncrement( $Value ) + { + $this->X_MajorCustomIncrement = $Value; + } + + /** + * Get custom major horizontal division increment function + * + * @return major horizontal division increment function + * @since verion 1.2 + */ + function GetX_MajorCustomIncrement() + { + return $this->X_MajorCustomIncrement; + } + + /** + * Custom major horizontal division end value + * + * A value at which to stop making division marks. This can be useful + * if the division lines stop before the end of the chat + * @param $Value X value at which to stop + * @since verion 1.2 + */ + function SetX_MajorCustomEnd( $Value ) + { + $this->X_MajorCustomEnd = $Value; + } + + /** + * Get custom major horizontal division end value + * @return custom major horizontal division end value + * @since verion 1.2 + */ + function GetX_MajorCustomEnd() + { + return $this->X_MajorCustomEnd; + } + + /** + * Font size for horizontal major divisions + * + * This sets the size of the font (PHP's internal fonts for GD) used + * for horizontal lables + * @param $Value new font size (must be between 1 and 5) + * @since verion 1.2 + */ + function SetX_MajorTextFontSize( $Value ) + { + assert( $Value >= 1 ); + assert( $Value <= 5 ); + $this->X_MajorTextFontSize = $Value; + } + + /** + * Get font size for horizontal divisions + * + * Return the font size for horizontal divisison + * @return font size for horizontal divisions + * @since verion 1.2 + */ + function GetX_MajorTextFontSize() + { + return $this->X_MajorTextFontSize; + } + + /** + * Major horizontal division extention + * + * Number of pixels past the margin to extend major horizontal divisions + * Default is 0. + * @param $Value Pixel to extend + * @since verion 1.2 + */ + function SetX_MajorDivisionExtention( $Value ) + { + $this->X_MajorDivisionExtention = $Value; + } + + /** + * Major horizontal division extention + * + * Current number of pixels past the margin to extend major horizontal + * divisions + * @return horizontal division extention + * @since verion 1.2 + */ + function GetX_MajorDivisionExtention() + { + return $this->X_MajorDivisionExtention; + } + + /** + * Major horizontal scale + * + * These are the increments in which the major horizontal scale + * is labled. For example, a value of 50 would place divides every + * 50 units. + * @param $Value Scale + * @since verion 1.2 + */ + function SetX_MajorDivisionScale( $Value ) + { + $this->X_MajorDivisionScale = $Value; + } + + /** + * Get major horizontal scale + * + * Return increments in which the major horizontal scale + * is labled. + * @return increments of scale + * @since verion 1.2 + */ + function GetX_MajorDivisionScale() + { + return $this->X_MajorDivisionScale; + } + + /** + * Color of horizontal divisions + * + * Set the color of major horizontal divisions + * @param $Value Allocated color in the image + * @since verion 1.2 + */ + function SetX_MajorDivisionColor( $Value ) + { + $this->X_MajorDivisionColor = $Value; + } + + /** + * Get color of major horitontal divisions + * + * Return the color of major horitontal divisions + * @return color + * @since verion 1.2 + */ + function GetX_MajorDivisionColor() + { + return $this->X_MajorDivisionColor; + } + + /** + * Color of major horitontal division lables + * + * Set color of major horitontal divisions lables + * @param $Value Allocated color in the image + * @since verion 1.2 + */ + function SetX_MajorDivisionTextColor( $Value ) + { + $this->X_MajorDivisionTextColor = $Value; + } + + /** + * Get color of major horitontal division lables + * + * Return the current color of text lables for horitontal division lables + * @return color + * @since verion 1.2 + */ + function GetX_MajorDivisionTextColor() + { + return $this->X_MajorDivisionTextColor; + } + + /** + * Text callback for horitontal division lables + * + * <p> + * Assigns a custom callback for creating a string for verticle + * lables. The callback function is passed 3 parameters: a value, + * x location and y location. The callback function can do one of two + * things. + * <p> + * The callback function may return a string with the value properly + * formatted. + * <code> + * function FormatCallback( $Value ) + * { + * return "$" . number_format( $Value , 2 ); + * } + * </code> + * <p> + * This function is an example of a simple callback, formatting the + * number as a dollor amount. + * <p> + * The other option is to make place custom text at the location + * <code> + * function FormatCallback( $Value , $x , $y ) + * { + * // Price for this division + * imagestring( + * $Image , + * $FontSize , + * $x + $CenterBias , $y , + * $String , + * $ColorMap[ "Black" ] ); + * + * return ""; + * } + * </code> + * <p> + * This example (which is not functional) shows how such a function might + * look. The parameters of $x and $y are the location of the point at + * which the text is to be placed. By returning nothing, XY Plot will + * print nothing to the chart. + * @param $Value callback function + * @since verion 1.2 + */ + function SetX_MajorTextCallback( $Value ) + { + $this->X_MajorTextCallback = $Value; + } + + /** + * Get text callback for horitontal division lables + * + * Return the callback function for horitontal division lables + * @return function name + * @since verion 1.2 + */ + function GetX_MajorTextCallback() + { + return $this->X_MajorTextCallback; + } + + /** + * Major horizontal divisions + * + * Draw major horizontal (left to right) divisions and add text lables + * @since verion 1.2 + */ + function DrawX_MajorDivisions() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + $MarginBottom = $this->Window->GetYY(); + + // Round off start and end of horizontal divisions + $Round = 1.0 / $this->X_MajorDivisionScale; + + // Start + if ( $this->X_MajorCustomStart === null ) + $X_Position = $X_MinStart = floor( $this->X_Min * $Round ) / $Round; + else + $X_Position = $this->X_MajorCustomStart; + + // End + if ( $this->X_MajorCustomEnd === null ) + $X_MaxStart = ceil( $this->X_Max * $Round ) / $Round; + else + $X_MaxStart = $this->X_MajorCustomEnd; + + $IncFunction = $this->X_MajorCustomIncrement; + + // While more divisions remain to be drawn + while ( $X_Position <= $X_MaxStart ) + { + // Get vertical location of line + $x = round( $this->ScaleX( $X_Position , false ) ); + $x += $MarginLeft; + + // Is this within the margins? + if ( ( $x < $MarginLeft ) + || ( $x > $MarginRight ) ) + { + if ( $IncFunction === null ) + $X_Position += $this->X_MajorDivisionScale; + else + $X_Position = $IncFunction( $X_Position ); + + continue; + } + + $y = $MarginBottom + $this->X_MajorDivisionExtention; + + // Division line + imageline( + $this->Image , + $x , + $MarginTop , + $x , + $y , + $this->X_MajorDivisionColor ); + + $Callback = $this->X_MajorTextCallback; + + // Lable for division + if ( $Callback ) + $String = $Callback( $X_Position , $x , $y ); + else + $String = number_format( $X_Position , 0 ); + + if ( $String != "" ) + { + // Center the text + $CenterBias = strlen( $String ); + $CenterBias *= ImageFontWidth( $this->X_MajorTextFontSize ); + $CenterBias /= 2; + $CenterBias = -round( $CenterBias ); + + // Price for this division + imagestring( + $this->Image , + $this->X_MajorTextFontSize , + $x + $CenterBias , $y , + $String , + $this->X_MajorDivisionTextColor ); + } + + // Next... + if ( $IncFunction === null ) + $X_Position += $this->X_MajorDivisionScale; + else + $X_Position = $IncFunction( $X_Position ); + } + + } + + /** + * Custom Minor horizontal start value + * + * This is the value from which to start the grid lines. + * Set to null to disable (default). + * @param $Value Value to start from + * @since verion 1.2 + */ + function SetX_MinorCustomStart( $Value ) + { + $this->X_MinorCustomStart = $Value; + } + + /** + * Return custom start value + * @return Custom start value + * @since verion 1.2 + */ + function GetX_MinorCustomStart() + { + return $this->X_MinorCustomStart; + } + + /** + * Custom Minor horizontal division increment function + * + * The custom increment function must take a value and return + * the next value. This function is useful if the graph is not + * split up linearly, such as with logarithmic divisions or divisions + * by month. + * @param $Value A custom increment function + * @since verion 1.2 + */ + function SetX_MinorCustomIncrement( $Value ) + { + $this->X_MinorCustomIncrement = $Value; + } + + /** + * Get custom Minor horizontal division increment function + * + * @return Minor horizontal division increment function + * @since verion 1.2 + */ + function GetX_MinorCustomIncrement() + { + return $this->X_MinorCustomIncrement; + } + + /** + * Custom Minor horizontal division end value + * + * A value at which to stop making division marks. This can be useful + * if the division lines stop before the end of the chat + * @param $Value X value at which to stop + * @since verion 1.2 + */ + function SetX_MinorCustomEnd( $Value ) + { + $this->X_MinorCustomEnd = $Value; + } + + /** + * Get custom Minor horizontal division end value + * @return custom Minor horizontal division end value + * @since verion 1.2 + */ + function GetX_MinorCustomEnd() + { + return $this->X_MinorCustomEnd; + } + + /** + * Minor horizontal scale + * + * These are the increments in which the minor horizontal scale + * is labled. For example, a value of 50 would place divides every + * 50 units. + * @param $Value Scale + * @since verion 1.2 + */ + function SetX_MinorDivisionScale( $Value ) + { + $this->X_MinorDivisionScale = $Value; + } + + /** + * Get minor horizontal scale + * + * Return increments in which the minor horizontal scale + * is labled. + * @return increments of scale + * @since verion 1.2 + */ + function GetX_MinorDivisionScale() + { + return $this->X_MinorDivisionScale; + } + + /** + * Color of horizontal divisions + * + * Set the color of minor horizontal divisions + * @param $Value Allocated color in the image + * @since verion 1.2 + */ + function SetX_MinorDivisionColor( $Value ) + { + $this->X_MinorDivisionColor = $Value; + } + + /** + * Get color of minor horitontal divisions + * + * Return the color of minor horitontal divisions + * @return color + * @since verion 1.2 + */ + function GetX_MinorDivisionColor() + { + return $this->X_MinorDivisionColor; + } + + /** + * Minor horizontal divisions + * + * Draw minor horizontal (left to right) divisions + * @since verion 1.2 + */ + function DrawX_MinorDivisions() + { + // Margins + $MarginLeft = $this->Window->GetX(); + $MarginTop = $this->Window->GetY(); + $MarginRight = $this->Window->GetXX(); + $MarginBottom = $this->Window->GetYY(); + + // Round off start and end of horizontal divisions + $Round = 1.0 / $this->X_MinorDivisionScale; + + // Start + if ( $this->X_MinorCustomStart === null ) + $X_Position = $X_MinStart = floor( $this->X_Min * $Round ) / $Round; + else + $X_Position = $this->X_MinorCustomStart; + + // End + if ( $this->X_MinorCustomEnd === null ) + $X_MaxStart = ceil( $this->X_Max * $Round ) / $Round; + else + $X_MaxStart = $this->X_MinorCustomEnd; + + $IncFunction = $this->X_MinorCustomIncrement; + + // While more divisions remain to be drawn + while ( $X_Position <= $X_MaxStart ) + { + // Get vertical location of line + $x = round( $this->ScaleX( $X_Position , false ) ); + $x += $MarginLeft; + + // Is this within the margins? + if ( ( $x < $MarginLeft ) + || ( $x > $MarginRight ) ) + { + if ( $IncFunction === null ) + $X_Position += $this->X_MinorDivisionScale; + else + $X_Position = $IncFunction( $X_Position ); + + continue; + } + + $y = $MarginBottom + $this->X_MinorDivisionExtention; + + // Division line + imageline( + $this->Image , + $x , + $MarginTop , + $x , + $y , + $this->X_MinorDivisionColor ); + + // Next... + if ( $IncFunction === null ) + $X_Position += $this->X_MinorDivisionScale; + else + $X_Position = $IncFunction( $X_Position ); + } + + } +} + +// Hardware: the parts of a computer that can be kicked. ~Jeff Pesis + +?> \ No newline at end of file diff --git a/polynomial/_testeta.php b/polynomial/_testeta.php new file mode 100644 index 0000000..d4e9ea6 --- /dev/null +++ b/polynomial/_testeta.php @@ -0,0 +1,91 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPn1e+cDJ/otUL3wZRq2+D7gSwMzjE2NZpu6igabRcNenRPLiAdBWrBQu8Kq0Or2eM4FIyk0p +HWr9Lr7GoUvIK1JzCTOxpYv2VLfhsna4lZhYEjMYXDEWoZJ88BznCv6sKCRSPy312YVhKMtHImWq +VeYk7DAaxVBybrBJYya6g06Sh+n5/dcJ5quDswt5gIkbWxGJe2pOZmeJlaP2C8enGFjGNjt6v47E +koBikrOm/Rl6Ry/DnnmTg2/VVARQ9u72uNtBq/nSalnbnL1CMaGAU65w8yJXJtfm52dOTAeoG7wu +ZSdlJjqZt1qHClOWa81sb9U6KxW8EDYYWdBxnNkEFSjFXyGV8hIT81o8ule9+uukw3zE//F9rrVn +TuE9uWZt4Fue2Dv7jytEN8BXkL+MGPvXYmGoTHM3p8AmwOzyyWXxXHdgK8jh/r/e15l4pcOoRKdo +9uWBzFzUmyYSkOX75+NfZmEYLzAqLojqzjWdGtNQYktx4H9wXAZML2wSordTWgkCJqcMX1bLNB33 +SJ56sIl5RphmcptTQfXm7PqFWz2Gip+cE6hWgjuuUb7bnmyd3glAiYDRENyibf4ehKEZ8JwyxKKw +In2+AmTF3PwyxSsqJIqejOV9z32hT2Tkxcx/P5kq4qSe4xDKcEkBjybYDPRBQUm4PAiXKVMuv2G4 +C4P5g4uwILbBDDNqBReTWqsUH01MYCR0w9QrCmGmgEggTIQop9yQPUikHJvqfI/4m8MxLTnl7Yyn +zwNdN4JJrOU5oHChHk8Y2oyuw++gDMSUe2+/An8ia4PUBCAtrkdc1y0nYWuWh9pIDyx8JQTDMxsi +i1MTZnov+OMuGBAt1ZfLU5g10Xj7H2ZZk1rXhqVT8mF+7M9P34QceUMKwanuJfQCDVUaBiK6kDep +rtRDzLqfN1efC8vSXsJ5XXoP0aaNzbMulRxFZD22cYr/JnoiZde0Uo1eJoXzppF4r5FbfePN0603 +nEO9htpOMjTBJ6asagIxn7+IEnfO/FWOE/obQO+5Idm/sWtDa2aKKL5T6+B9YL+Nle8JBDZU/r2b +cR+2lkm6pMvnSQkAgPtyiqLCS9Z0ElEgI6hOTkoJnZ3dh89SE+E0JsUUGEl6XebT+NldTAaKxC1F +1EXS3AXQcuren+4ex1NLLg3eHHLRLMXMHXOdOetM3gx10p0aKebWO7HWDVyHTJbU6OzNWXD2q/6O +4zF5hvZLoocYjmCa43Y1sa9FXC6+gZBaoh67N5gv517DHjee/PR4OOklbfKd2qXxkQiIaM0t2i5s +rLz9OkEFHtN2Fy2FE6fWgw5JALt15L3PYgHSzDXJ0OQJFIG4IHFWW8HVG/W6b9hJYOuf1GnoFgJI +8M45eKNlT3tXsQmgsx6MicSodxIthq5MR/ybN5TqaZbmRG2jCK9m2ykSYqjhmFal2h7CYmsq5287 +qNJGagtqhVmSiXaXNS7zxxMyWVSP0mx4eV9AgE+iH1s8cardYjvH5XnZ8im9afakNR9iHb8vsrei +kpkzbwGC90keTfNlfoZiibJ0Qv760i33xaMsgfaE45TdYh5y52DT2p40xqjTK2WCSBBN/uYvZotT +yn5Chae6a98NsCBgOBlZQWEIVLfhBCZ4Fw2NJDgCU3DUkj/cNQsFHVdxHnmdcESTKtXRvia+ya2g +jq983KTSlqR/2sOfOVDU8/qIC0UoTYrfVlMVAXvlQ+FbFpBVQ3VHVZgH81nP51m2rM/L8ZT7BU16 +bAYxf+d14lZ5Tvx30VItT4Csz7edvWO50lU+kaW5mdVtECZzvLc1B2nwh3+Mb/umWJJPYFLiB1Pq +kILZybQT056bf/gMEUpPIVLmntNBjm11YLiM83erWiFLM92S9vd0YkT/yUE+ga8bONvTJ1nmE4QR +9ZWj3YFNuf4LHRmEnzkQFWnIA7XCGG0mssrRwNP5zt7K+/3ukzmYLZ2njOsL5c+APwwiflWNpM7F +jL8PYWC0aWxGTddhXr++74HeMALXkxaRvibk1tqZzcI4JddXJmIRtDXqZvm+305EeYhY/IQLb5BZ +NPvhTEtYMqBE9iuQxCS17sEbBshnRfY273KKKAe5g9jVTJq0nDArUA7KYxeTJhoYrVUsGEGI0kQu +12k/K0Eu+BDbcFSAXQGZKsx25FBZIPeKNu9PFscuvj980aNRRyyS+BA/9hjAlskrAMOSIQ12hZrc +olvdmaR/PhfgFsa3KKsMtk7F1E55mmO0MfM12XtJ8dzuX3B0IyitIwQxqk/uNhJ5jNlmy+FTzoRV +98/Bsb2icNtYVUxzJeLoesQ1kcHiuGmoRUf3YREq2JemilbZ9PXSOOd9KKSPWCWA9TKX/rULrheA +FrlkfgP76ozXao5U5ni2zBAI1CTRL4fFYpK2GyRwt7DesSrM1HK92Q7+u3/K7nzjDXdd2ig5nYKX +weJIN9+qpoJn9KhTUZlhsgnyUvJSXcylsrlGv44f2h1rUkya9p7mJFMGUo/QTFtnIf+khxwn2RJJ +u0SgGaE5ulh4WJt/r2NF7196Ix3Do5pS3uOvC8MXfNoINrI85Ml7bY028R1Kd8pz7Zb9oEEd1qZV +akUFrdWOkp5ATNLdNZtAsul0wZXVdxwMm/e0mMNd+8txyqvR4J4MuAEhVl8xCAEgEsZixZEeDqjz +D5ZTOb5+WhpEodV1Ha+Uu2FNDuvUDOzWetmiCtZ9nro2Q64A20OKNKgNrKLmzbNcyk8uHryCaCZx +E2Ev+6LkJoPQAo7JerEmVNfpU2ANbWRg8fW0ymV8g2tgf/zSbBqb93+EjjYWtggKo8FeZX+guXxU +dczAQTE5Y8k1/Mkv35ZQzNQ4khoD4NfljK1X2qMZ5/u4lPOcA6StWaATWPmiK3JRazl2Oq9iNK5f +ij+OhWfFS5WxO1ovtf6AVC4mCSXtH0kZOje/cYk017xE1M2FcpJctenXSoXI06spIUsKq75piISu +Dt7elwXHLHKm86ElGiGKl6g4eiFCA49t+wz4gZPuu54I3YX+DbHGK0czMfqztVkh8WAL4LSOoKsW +FGi2z0sWaOMkxoI3x72OiZy7YOEZAVMh7j4WxzeaCVtkm5ztn90rAJXQRiDMqv3HDVsjshwbsdbB +8T1etZIumFNAaGKUAnwPuDsYH+lkgGlQQxZUOofFOVkK/iGM2rFnUjXiEhfYtu3R95IRzrj8oLF1 +Gv0Zo/gCehigRadeTrDHpk4m6lcPxgr17gJd+LFhClLgtPjZcWA10inRE8plIJM+dQwnslFyK/Gc +bN016tVzTjKYIbT4DPxkauLzeOgrQW3nvZ1en79ZVcxaDm2iqbAvGAtgWffb8sDnps9Bn/WMpjGW +ENmiRBxJXhSwWwwhC/2EguJCipsd5D60k7ULOCSa5l6MJlGIybRAlubqGGcqfcHr3rSlEkX7/oFL +CwXjHrJRRMpaHGCi8IOTHjXCm56Lpj34iDJCzmBqbNhwQqZshgEJFu1Oy00JWzziGwfKKsVHO3Ak +gqAG1sRiValkqP3rpcsj0M1gCWVRmjaUf9PJxrHWZllaBx0PmgmRzVMV/GOCQXTbDO/ZfPf+GBVu +6NtYABSrs28daNhAgYSStpiu58BOlAXhhZxzhyOJS5RgES4mIu8VCIw+1LhQMwpfOCnVvrrlqTfz +ZwfDm7bx8hPHnAP820092z9WcL9dAXp2OZ8JL27VezvcoPzS3wNivwLvmeuwbQX4BW+0bGzDijBL +wXzSnk1wrw1W2n7ZZ/nQKYrus51ThdHPr13zIzv1pNxaq+d33i3RERggNv6AI71n2F5fMhC+pU43 +DWK8WM9C3Z7hUgO0+vkynFXeNH+LjRA8e5vVfFiHJKtQCcy6PisRLsUfnQgLo1N0qefXJuUHvYqf +I9HWpjd10qzDELo/7FfewqaLg2jzdKtDj1SAgzRBPRvfcXRkJZ1tfut2K8XX2WTJ7rUaHcq25X2m +0BqBy4u/iyQAHF9ViHxvWLR8ovqehdDwqX56hU50LmNEHHi/FPxVBPI/zB54R4vdjSfKAORRLGdN +B1cYlwgFOGdvCtAPM4ZWY83Xz4ZfAUMYppjAk+eTcxSGldUFka8ezq9jt1qlHSigutKB4f1pIW7I +AK1fpVWfAPd8yiRXItnjZ/JhsxNjN1cWw5vaz+fvpWwNyyYilbme9THqrj6zjUXaPHslcoxnci0x +TVFCY8/NdyiPYU8G8w7boaxZgjNBvjLq3D7vNZZ6fGUGaYK4uTpW9k6tJxahych9aBHJcfTuGvSn +pp1yt1fvSMrzElHKe4dAfx2HODeDTiF4x/rZaqxhsIMfJipVP751RVFpPsL9hvJTbohrtuyMAf/x +adel8nsggT0KtnkS1QBCqqz4STlc7Z1VCLihstwJbwByLCiEh9l9KJH0Rx+mm8gp8kmtJ2QcIXBi +EzotdNckDvda2AfkBah3wo9N6tat/jFUSQ7ZTYU7lF6QbPewQHh2/HeW6eAQ0RaKnnz3r0CLozQJ +k0E8TNfRj1KTncdRlLzOwbGfsUb0lR2opSokkTVaUgqnmNWUK3hQIZ/JFcJLMdwT8C5/AMAHk5vw +aF4x0290IDuntrM50YCoRjuNDZyvht3UZYJlnPfh7PMbb0mlCxaMmuvG0jQswkL4izpGRYcsMGmu +IgvvnFYmeStSPM+m+v461/IzA0/LcCgu3KYQf4GQT2NLMihXIE+fjalhxs0+9BTKGuXzrCFUMjWp +cygLM9X2SjKLb4vz7jPkU7aCLeERHgpKeqOFfPRMdeDBWgC/kiiIGD33MQh6tD593lrY5vRrLjva +mF82XS4WaX2ad1oBb353LpsPoGkSuswUzk+xYX6A15v84ui+FlEoXdZWukSHPXWWwShSPkrFA66v +JnqLjLIQ4Y6XTL1UV2dUyBGq6CZbMmR/C4z/xbrwDreBUmBGz+wPii3P7E4/uVvZJRHTmRe/jAna +QEzFuLfmAO5hVmCoN9zDIXfgYa76Mn4QTUOeJYP0DAO9HPMLu9okJpX2xqGoZZQbQxd9CPQmNXhi +/yvAif6t+IXgJ/AV5f/i8ixSSlHLQzCS1i504QIjhSvFrKFiA2BUSuyx7JfsbENTCaOIO5b1bLoZ +r3W/JOvE5DJY4UXwP797HrbcKcvRwvhUWqnzKpdYVU0wj17xqH51JjFYtaqcKlz1/6tlk2A/kw7p +zSVv1XGU0+jSfNcNQMt6LVJhkHKor9fuz1YUc5nlVJ6/uQJUMW/Mq2jHNIneHN4AueckB7wujoXq +YPm6rm7ZiK04CysY829jQC4wuzuHZifFpOj1/UyQ3c4j6g6//xRnrHTSeBRHpa46L7C7u4oSpiib +rKctNWaot6pA6U1n6wXgoa1kZENzucaK3U1PHtcFqQ+s+RYQr+7E+9TcSsB1HC5XTJGlbszH9U4p +qm7/g6RWhyp3Dt3lZftgqZLPnDnHNtmVbManjF3d0iO/2cKrLFUAS8gc45cUpAX1PPPdnE1lSgv3 +9qavAhCxTTYRnmoxQdt7PnbokePMvQ3ssQY5MrIq2gq+s23OMZwOUGT2xySuYg+uxDO+iieNqO6M +FWIX92PlZ7LfTq93zyZ7vLJefkqsCHrWYZs2LKyTbZbfBJzurvBv4XFelHxmC8HhKTZ9b2poI9iF +IyQl+40nIFwLt7IjqJZi43uNI57w6+oGyAdIWwDKT96OQl8ErMstzxUjDPaOIgvj/txJRUM4z+p8 +qelMyWpJ6jM1ww+DuneMwjwpbb9f+LmS2E/I6RXrwmxM2vBUTqHlzSFMeluJIhQ68kgZ9fELrJgC +qN+WNfURNeW8aW1p5QVXYpugErTtoGCO3FOGNFlmz4syhnUlipgfdKqgqezSgRDyeceG8RAjtBtU +xaAhoHplJ7KulOeK8K8X1FlHZZQ96gUUheP5j8+1EhckvpU9Xz0zvkWFqqXXQblRJu+AQ9OhayMV +V3eZBpjd9oj08k3ufCC7mVEYAX2hWGk1k1QhNUJpA4IiZEIkaLMdAHrxqM5cT00r80tzb5DTKtO9 +okQTNlvSD3UtqYbEf8tRScDICFgz5+vkCS81t4uXU91UVBwy6HJvXDJKqolF/ZiPLYIP8b5aRLtP +ideR71ZDFltaKtY58KGhIeNleYMPgdM9TW+tPRqD+kZ7sclgeA1edqwqFd911pAfITw2COZfObhK +coCznmtcUEQxQVEGfEf7FcmL3KobUG5SPmRdCuX1GshqKLqEEqNVaUJQfWavx1KmVNowUn8cvtJD +yFDyfEOv1j6hq3MVhqEqYAb9pXiFS0suV4Fu5pDuXZOCpzwgojWh4RnRKlWOHxzt6yWqSmmBKXky +lCkuziX10wFDxvd1hPdpETGVhFMrq67i1g7mMjujoyITGxUGAkWmpvw9wk+A7KVp0JW7a+KhDak9 +1fz6SZT6At653y181RjBW1fN6VbFc0qgwGB/tq6XFSf0emHLp8Rj7N4tpMKp7OYWymbfbuiM2Z+3 +3LOq5K3nFWqXo8HWAfb/xK5IlB5sKnZ0q6Uuvb5v+a5tqcMd36iCF+5KJcwsDfzJNB19je7sznAQ +MZ2DOCjEBwT4kBpQg+mqrzYVaIKVlwVzEUlpuukW0dciWjs7/gbTOyheL3O7RxClkq45DfCMfvSo +It0= \ No newline at end of file diff --git a/polynomial/_testh.php b/polynomial/_testh.php new file mode 100644 index 0000000..6b4790e --- /dev/null +++ b/polynomial/_testh.php @@ -0,0 +1,132 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPveZRTP8a5KQ0VxuzRwIJZvzhs0w4tsqpTTelHbfwzDZZrL1m8mUzZMz8SjJiEs8Vvf04O/C +vYmzuOYEPBHz35uWSGYQWfCSN7miPuHxPpVDZHxcS6BTnevJJMEne2Zr03AK0TaPNpWGPohiba4j +xzfBn5DqsXvxerYmTYmcsGewToUuGp3mX6ljbzgJiNIm6JxeJxpidq3BxUbhW6XVKhCp2acJrLZo +lmUGct38P7vKQRhXB8C5DwWlttocsYU1mk5zozFyN9AVOWl9jec5vaDiEO/4YNwFE23RbDa9239w +7ACr2chgEG1p4WVqCDLl2umbc/Vjd7pokvWAOQsRWqJ5v8Ua0crQAp6q+r3pNRQnq14jCjqUIC+M +8eqh2mVfcIfX4D/Oci6T6VJkaFTeVaTomDJrBeGoze78Jegyo2Pz1/GNPuju/nFXaFPlhykL3q0w +0vRjMQLnZGq1yTRL5+A37NrHq7wHd9c8Le8G/kWn+33rFuosgEQtE2YxFZZutHysGDbAcV+pjY6P +YU61JT1DCsJy3BXGDyMYEtAPgj7wpOAe+3ltT1khEu5yTJ14YtxW3ZZefCwTnjhQKIkKtJzQHPM5 +J7ehEstzsbqJaNBYWbCaq1DrmnQI9euYZnb9/te3Soj9qlAXsXTE67vXNgX13BNymJPs5X+3Dnix +jtaaLxgoh3J2c7fnOMpHrhKgRyR+9uH2uTzfzviBgOiifnAcJVwDB9Jf98Si8WZJFQvucNn6Z4gG +i9y6rB9EyDi3Ca/nFMPaqQVXHPRJNUQ6WFiDQgYs+QPrUhraRD2J037ZgEqfB7pQOw7iJccYpdmR +rHioy0pyecPyXWYPWKv6vmxo1vXMq5wyyE9DnadLCfGM1IzyMiHSKLFK7L0/91TfYQ20zhYOzF2p +D0K6wxDx1QRJAo3dm+RJt2mKwRDmZmy3OgI0cPiJWzGhCG9R9IVveSgqdpq1Pas9egg6HBix8XV/ +GnlyHYjl7Q4MQM1672jlOZgidLSdg6j+Ho54kstJeSiZdQcVrdNWByItASecG/WRtlXQUA7vlCw6 +5+s24c5/w3EvYqUVHwsfVjT3KL/2di4VYTJYWyBuAey+OK4oWNOXWY9zXggh1jG1CjGKKQhrfDgF +jplS+K0/uyaD1suD9QaVt0o62M4DJZJnlOndcJg+iSj42mylqqmb8Eusb2PWNNoAzROFBQuAzQFX +Nl4STYHx2Bz5eO8Zgyv5l+A03uquYksXrbVQW0xy+T1t7p7mkSIE+8RgrYY2vac1MIdl92MNHAc2 +Yb8Mk+rQzqUM8Lzz+DVZpcLFZGvXbqcfjpPdNbuiyN6uZ1VTpNvB3wsykHSf5T9MlWbWWxPorqjI +vwMDVotE0FFCgae/g/IEZTwCR+K8r+Wf6zndGX4PBYAhiRon1KwFRksQJhkdblznLGw4wt3M5Oja +qQ8sjmKYZl1Rdb5m4fcVR88JG8opckcxvKIjd/Amt91OL8qxSJWugornoVC/dMZe/aeBJ+pA7fA2 +zzwZ7MA66Hxlr70Z0etbkPyjXSd4Q2KSJTw8XkD5qEQji7kJLfy94vx7o9W32dqK3AhpW7JQSzax +TxcT+yhVpVvbaUDL+dmkb8fZQGQzZMhnyFWYKyEeVgx3NFNkOzeKejAU9zPu/1nMO5rKsa5Sfyoa +oiFdk2WtwjHAhHzYHoa6c1cfsGHgDc/WcVg7FGFFmD+chCmB345jIVSc4Z3o+nPeIXX7Bx3tsvte +MMw8X5pr9JG4gTSB9SOBlxfysMuK4hiHIqvwIeVgD1CpOfoVPnLZYSrdzcHc6Vf5wK740wWYzOai +Siimhi5kL+kIRnAsKw+Mc6nzScf1nDhikcOT1XISew+9CoIAKi2m3nN8qhjxkLx++X1bJWBecZku ++ZqZ6RmlUuuT3S+D0CtqONRFI1ktL6UnUAdj2MnFbYXVPQ8qS/vNEp8FMbBixUd+HLcj5ckWR2p8 +d6DQ1gyJCdNA7PYAKPS56HG1nCMStNXRlZR1ddBVBN1Xh7cuoZZ/Fgiai3u5hgMgT1g7DT0fRdDF +vI+RaGiAi58kcII1oe+RKr1qj6UpMIRuPPDEwE34RgSlp//eC8AyjWDSa1FNblU0JBc7CF8Q2wHZ +1cbt+qDpXKAsryVKfnjcOd1g4OHCIg0Wjnjmw9Uu/9l0Fowcj03/+yxQxP3cR01vjYFNpuKhuyvM +l946pHdbsi7ef0TLTeLKIy4DAqoniZMY0hMSKGHSJyC3+TU2f6d5TkEPy43iadzZVOKOf8uGexsO +Nw1XAGg2ZTc8//BPuBilaLThL2EvlTFdwZcJRzDCoDGL5Px06BFSa0K7HU5cekE7KByTsNZWCdWb +bcgfUAzNMZ/sR//WjbOlkGmHa8p+QUKlVBKSD0xwk4m+5/Ql9Pmhl2WDfdgCFItpqVFvWaRpGiwQ +5EVf2onWw9tlffvVmjruV8bGiPX/zL7Zpm+e1hHdoqbTwexGVFIOmyccpf2Y7s1X6AjhMNukoAb3 +HOmFmqhdTH9KdAqPTry+QN/jX9y+Dc8TXDW8XHNkd/ndjjtiGh5IRe5kgUloWfcqRLJ4+vbCN919 +j+kGKb4D6X9fX9XeYx8cz1Sn7Sw84Aq0KqT6ZmJ7jEpxFPl1JwLM/wA2tjKU5HfrHDM+uwcNW8H5 +UaBQarCAdS2qliyrkzzJWDI+juwQ8yTy8kHN2uyHgvbAyZh9XTv3G0sB49HQm+Krm1f2J6gP7k+u +5GzrLN0IC5tE0CfE+bFCwCRfEYm4Z7HvN2QebQVXVqRMBqAslOFme23Kym13M1U3e0Y+664PxBS4 +S9kBkY8F7FcyDA1vgVD460WINYkA94JjiFTm048hXOWwUPIaXuyjLuKbihFRjFi1NkD/MoxnIvkl +7MWwwPinu43udQR8rulfdMhGMEQE1JRTUOcCnKu3k/FJRct+q199Glr3wOGGCY2kAid56/vFGV1N +BLSfld9G20cWRyUEFoPB7UsV4PBuI17yUGmjI4/gvh6qgeoW8OUuyrwFB6MjesN7RznEWqjXM5q/ +f5WQKPE0TD8XhETv4J0DXvB5D0im1WdcsyOlxv2b7omzlvW+HR5yFuYnipvQ4oIcWxz6ZUkQOqWe +vI96ceGwi/kXL9UF9K2mNZWhqPygMxAgWkHi+NIIKPHnQEXIXkIY63DGFwA4B1VtJpEIS75xyQxm +9+IVBXoCgvPkVJtZE3cwOw3/CV3WWRNEpkRISlvWHIqRVs7nnhIeANDtSqgKakrFYvtdVCkCe3Od +b5gfrCfieciMPqU//uXQjNL0MQ0+/5igbQG++65UsMN6oRtLJRkgmpMxnWky3Yw0Xjv7hPsbruzK +SbFu275GjzQghlEjpEbguFg6Ha3Mo8fpcn/MCD7Nstjl3s4CE08drHj7e09anApckO/22m7XVt8S +wMluBorZ5uQDTKqujhQrtQmjqCuTH7AIqRj99Cx2TMDU/OxEcsY+ygTyoYR0aQuWlwWTgKFPm3zu +taOb8TB9985t7IV3J31stGS2ebzNUG2BTH6VrwFeaRszDw+byke6O6YS/RJMdUfkn1Cg9rbb3YMV +Eqeuo2iGBkuI5F9EtSLh9y7uHNfSiH44ybIDZkMiV+0YkhsomYTsTGwxCb3JkolUi410XX1+cVkw +QRYA5NPJbdEXXGRpqGWni8zZfqggo48d3ecnCf+j/z1sgW6lXprb2MvkDGrlMXj42NDWQ/q+otJY +oipgQpUbIp6MhP5XxkNZbVcAp9gyt7t4blcTAeoWamoFVmUp0H/xclUKvQEB3v4VhEBcflp+u8mq ++HzRmqPM1mXbbVGpA/1VlMXhHzZfBMoJ0dMOUXOYiyVH7D9ZzCQh4daHAEMPulpjJMuVFmnTwluk +TbNQtu3inRbtAssNSQLOegoXArjHEwYTLACg/j9w7JLHm9E4t+7z2VXl8lULnZhtTLGUBpdoj1m3 +bK5QBw05njqavXXNt/wcjZ/NCIrlSY4IyK47fTvQ6WrYZ+AMBgpNTeHhaS67Q49AyWED4GUDvGLB +BK3E3WF0BaSYMv54BCNUit4bXApiyZAC2rLeEqDzClZew/3PKqIwycnVTWjvJTcFXCckXM/jr8aO +bJMONs/7yWLx//gG9iovSOzgDnZ8roYTFTGNHU9vMNaSVh7YFzLuOkLhA5CgegCJw3kwdLgrh17Q +aiXHlFis6Mlhqo1Nhm3sV0WU5wiuDfcQPfrkVsSNbOn8Tv1vRJ3XNZML8UmzsjGHycOMp68sIE3K +Y8tBNj7oBMzaOLP8Y/QtxzNyfkkW3bnSeF4lUE+xFLhbwX+jXl8nykcIKiPZLblBLypqjfsLfPng +iTr74ZEzWB5gRRIQ0Q/5HcknJJBofYOCScxSKxbBM2cw3nhJTwM9RnXrE7OHbegzCgAguezExYVZ +OR/b2K8mVCaDpWd59gM6/MSfSV8e4CeVTvB+xEfS16ZDIx1eiJV/tFPwLC8ddaZfSHHqMPMvzHOJ +fvO9iGATfkngSLuEpY68Jku4gq4XjIWppJZvmyb2OeQz+rgZ3a6EzgxK3nZTBORhJe19PmEm/AfY +h/fiW8iVNO7vYmN95+OHfGgrPSnQl+fSgNBZTMyLsIZK4Hk8gqhJcXzZ/lHFzN5FRQUwNxrIzM0G +O+KWzH0FVwwnl/45wXTAROm+ZNOtDb43zCH+R6wCfN+DNj/KmObLNJzFwpLFxwoR7obtQvlLL0tB +5Z9k8whA60W8p3uWw7QAv8DRTxwI3SEBfYFWpfzZ/9690LyCt3luZV3D5wln5vYvCzcwepcsJlUa +OvgpHtfK5b97TV+LjI5dJRxVNyFffwWB6gFr9Hn11q1fC0FMoRBK2MXfZ9xn7FDyPdQpoi5PtFny +p8lYuu5igmIr61VNFJtECwhMNdStaO1ttRmopm2/iLJ6qUl+eR/Msle8oVMu8Vv3jjQGD7mjcqTO +At5tQJF504IXol+RMp7NHouHvr7m/whsQKTMvcz3mWvP2nUEMfBYPkmjWsBW9aSBJhJkMc0W3Qvv +1sM4kHDGwalcUqrelz9Zs4y6Ijm7d5h+wyLtWDqs0xMbFWPHZnq0tgIF26+J+GMBpy68Dzqv3ddr +q97lprsYA8v2RCiKdfhkZfFFsRSfHd3nf0ODZjWwizPldHVonle4/se1HK4PnEldmRORXO+C4T7w +0a0N2AmBvj4pVXTU1uvPPxRFBRI5RcQNnWqBi3CSwhy1cYNzEnJOHxcEUii/z5OS5ztrg73fkaBr +8OTI+2c5do6ZqA65qcsyGYixas+rLX4hATishSK6iV2Uu30Tv/0v5aA66fDFJ6CjpRkeSOq+mKqt +rsNIBv49gZD34CX6C/p3o88QSlMEmtSputXTLpx3DzGNpDnXQfe0L8IgI5YwlttzTLc5qp9f+IIr +D1NpaqvazmiTro21McKMfRL/sDJlUGBfOvV1BgiCnZZRQXvxpPZ14N32wMIUsdcCh6Duoq2gIFo9 +qkrAAnUV69AJmdx/fqDxzjWbelqH3XmM4BJpN6ZxSwez5UEa/qlFUgX2LtSRQf9t2H/tWPIx4Ft+ +RlXw6kP0qhObmrfEYDkltK6nwonRH7SrLixc6PRG815ACVL0pdVAmIWbv75q4krBaNd5q89aGhvi +XAXG6J4zDvcUXvJkU7xI94j8KBgyV1VLPaB8zLOMS1wdnbCl5SaLEcgRWjlPrOrWzo1LL3TiihZu +IEiJkWf2FyvQQOYmAoKXhiIllC8atoD0isWZuQ/NicRxd+2Z2ZVkvSqtMNT/qoRqsxD9zAnN0BIX +QnQ+mTskcRIVNZCZEStNs7x4SE+uD9MEijYELOBUv2/RMQRFugbZFLQHhBiNM6NR3C9in+yXZ+1c +XUKt+L4XCIJumM/k5zrDq99QEPT0roaVjSjBTUSqz9RzkB64JZH/pD8WgGqMblFHebdcVVLnPqPQ +mcpF9G+mFWNHIKrdtfstOw9Dr2z+nnTFMyP/jMxZYD4l1wPnDLAm0BhWKJ3PQ0eip6boGHK8iZz4 +clDudRh6fd5dCngx1NeuG4dXeQfGbcEEjYoeGW29x7xv9/9obNyPwQav/BU0T/35BYkU75r4skKM +qIsuNRJnVp4GTSgH0NI3N9W8A/yEA1q33J/IVO9Z+5Fa2JHOSwqRDG2oQYW63wXa5ujITfZx21Lj +E/EV81KpdVQ3EXe5ZR3j1wrTw6tcw2eaYx8drKBsBJD1UL/zKsV46cPLMgamxxViHQ7e5L3P/AsO +ZbKDIhS02Y7QmLrLQ8rV/3CvAtA3+LV77Wgssqi/POP4pcWC5V69tY0H9gCQyn3N7C0CcJ940pkN +aut2FhmR61rEjiLMhvmv54HtLzVXjXsmRg5G7yfUm3O12Dq9vM+E/Ltiocoh+2XHgRiKbQ4pbSrt +T1/v/mUYDpIEuJWatSmxWSvuxRSwQOLvEgCmmvi90L94Pf0C/RPP6MeDY0SMK2kXmynv1Co+4vAu +0kg2ruJ75hbDOFltxc0+E0yk3cNg8rYT+ISMRqc7o/u+8xthSAr8CAWE/AfX5CRxQGt/9gIHSCBf +s+0mht+F++2xaJ1VKsHvPVZ1yXMWeuBe3vMg9f6oLfomExbqsICUlGQgvCRYmrwhcM6tHKvjIk8K +XaTdpX8pY7PsS7z2JH2EFv6rxUk+E4dpo/MzN7HmR+dWQgo9u5SVb5rpceGUSCY44jpPPx1Xh7US +dQDFDD/QIYyd91y1sllrdaVLhMkEBVdcHs6AhXAf/hVphD7QCPdlWkNe7euxAjZaDNqZ96UsMC/9 +8qz5FRPSATFoX/PSivWUN9z+ghCFJ4M6r+5/sw6tBJr5lRXirm9WbsSCHQExdXmEz64x6ExiDQ9Z +m8zhEDVaQr/6psa3xtxIK8A0OE8jAV/LkDWYY5NW9r+ty+uO/A5Ln4bwHbKbqMJRCXd8tkPCtvBa ++Ktreo7UI/7SOzeRZ7rI2d+TYWEj5OnXB85C6Y8ATFaw1OA4lbEro5adp7fKXybVq20uaVNnj6RK +/KXWg4SiEiEc4xjzX68/agIY2ZYMAmMQodmjOL9YzW1eeL8cMS1F0a17rX5AIImI5476m5lgZik1 +CqGLKuVDa3RHuI6EC58QkAFKzTZj21yB2ItEq4E5KQTN2rhG9jIL7OC6qWV5kBpBZ1TCs4cbBNdB +N2jBSjQAlnBbPcX5dWbfsysUidBuC7InVT5NDhb+rj7tEUEaVZXbuIIX2hebn6t5QPa3/tVlezT6 +BTzo9Yf79BRprWEnjaMDE9116JqwTXIcQt90AVZmFoF4Rf4kmp50vWKHamaAoWM41ORIkbvfvg6C +uKsoZX7HWwF7wlcGoVC9KYEmsGgU+wo3aOBiHi7Q0nNZFWXzCjb5HQhGBUruKtOYVdgKYMhwstXH +J8Wtn4lqEkcGBxYS/n1wf0KdU0IihajXrE85cHMSgmlFUahvWdQhk3CgypBjfijwmonJiMeSrFO5 +ZcYbLo/hwF/uytaSyUp+rOCDQcEdNTZ4U+pW4Rp+UoztQuLH2LKty4YWVwJcwtd7pOjhbG3KkXyF +3BKSTKiqksV4ORHE17OGHdtI50iutWt/VjAwcMTBttmuPg3+dcnz5p5v6QOpxJcOmQHTiPPNEvO+ +jTdLFoLFSg/vGUkQbQcZ/RSdZwEN9qumkfyVdHZ/dAfgJnZPOJExL8MEhr7FRHdW3kkupSrVropl +kferZXU6DhPZE8uEmuuQAVazmnuxO471s467vMjB/N2EAwkLt5A7R836RowFw4ZeP+9NfD0muJO4 +q1eP7hyAEcbUSB1f2apC/K8Gzx94CmjED2P+Vn6j2Si27WYG2RScnQEk8BDc//vZJDEQAveNWpU0 +iqQ2QRlgUsCe2V0VL+M+77izgyY4tN7wJryF5QD8qZGWsZFBYo4CTbz5a2/mDWD7s8c+EnZc11oK +kgiEKoCVJH7DlRPnNyseZnJ7GvER+HZcs7DyXVrkCV8PqM/OEj+Ct1AbAHVW66EJmlKG2qUYDohs +SrumdomSSQZuXtfNJ0Oa+rd/1yTo8hx9hckbi5t6fzdNROquvxaeTwbyVy2VbwL80PcFINDxqq0C +XZwSlFsSpOr3cdotxq6qgAKlvILLHCkywxe5OrZqiaaNafrbC7VtziV8bOH8vr28VG9Fd5jXojVk +leYBYeJ2XsJ0qvtB3ZFMnU5yOXvZKAhW9sXjRUoBqBHHk0WOIa1KzIJ0YuTfFQaNreZp2a1bfWk4 +zOVrf7fjbVdlGhC48Uc/xDqOdtVEY5Xk53KqXyiv+KuPx8xbAk6BlsmROfWZerlOUo/E/wfU4647 +0kWIYrhWuFLJFiz1tl3bwxICob58GT1xa2YGvUS3/Wyws1sxSU0Jm+wzdA4xEWtp6k7YoiKS/kjl +mhjp2pP8ssEiwd2EaAl0XWePBzMBFkHUXM3NsDQ1SoaCDqDEk1SNmvo1saw0Nh056vJBJtVaxnDl +hMxAa85Ruvm1JdohkrB+hFqB2dCmxo4WHI8Y4cl1i8yHYtyKBVgHdKhlt3JumbdoCtIXRAUDQY8t ++iaah9xKQnp6bTkxzGunhy7L1PiVY8h9KIFHe6lhCfBDCGgV/3l02XQQEpiPgTz6idoLOBg/rdqM +NGR//mTorq0kjt8gf36DYL0wnaHQPzRmaOwCT9Xc9/6/d4COhMuEY7hw13fQTbyIKAso7Z2ZYbC2 +5IeUVZYvkjBiYRhzhUABUflkxAM77rF0C22zPO6yGfn1jo5Keq5TkK8VIMAJv4ZmWsL4e/ITtsfH +IYRzGxW3OXBQ6ftF6CAJDVi/L23lt73lwPdtCvHAHRrVaKRwfJ/vCH+/nsPfq3q4nxNl5qXAvFnO +BtRe6oYXTIEHYDrgZW8bctAzOGcZwYuK0BOz/JVT5qf/nQ8sW6zsqLXlwciSbayek+kMFgYN/suP +bUJAqKbgMItZu/vmu0ZFt+BU5+HPC567T/gGRIBb20R+AQ1Q1o68r6FFtJgn6JgOFsWDLXouB3A3 +zCnvgSaG92SqhGlZU+xqZqZp9K0PIxH0mvq5CphEbb+Nh0xfQUtCf/0INOrG6cXyDeOlgVlmRhhE +nXuRMLzgJWDl1b3E+lAdiH1sWPsKmK7jFqMomBwXsxVG2OxGt5h/QpKx8eoSdEQtl3+AoxgISPiA +hokdQvM5vXg9v95dwCdh4BDrHGWhybUPbS+f1xFM3qtuj4NoICqiteWjyrVTjygo2rWM+rJves3g +z3HRmUFjzIpGFzPryV37sPjbZfeUW+GK3tCMQthfo5jwWkZfqvsxO9IWTHYOHKB09XnL+C6plt7C +wm0nFSGNvuidB2e+K4LUnNoOHjvfoH+eMtPh8vjCgiNKlp/GufSiT8olqdyDYjSPTtF6r8EMYX3B +Z5ZSnNPwqRtl/mmTkrj5O3q6+klNZxB2MV51DTVMV+jRGn6ZdlGthjFoHJgd2S1F74ax0gwsDNkM +/933DLGRMo8CMxHEJCvI7mM2nh8fveWC/5pgKB8SE9zP6P7wPLbhfWot//XoMYs5wY0lqjwyCCb3 +CwZYsynQyFqKGRvK4yapkhKKFKNOpCWXyd2cod1sEQMpvnr5QJ1s1xtkk0D2V80UVyc90ovHr59m +I1qKm32ccwA1ut7mZiYDNRJtUCM6C9UulQwry2CL1TqqrtJTCFniA1BNJ6js0C2r9JAgFoOBs/ik +XwepY7V0wPLxddjLwK+Gqn1oD4oI1z4rYF9jl4BR9D1iV6Abc6ysBw5NFqQL6/oPx9FsFiPtgr9G ++PLtFKlLdobETA9oWOOtdcJ1y7Nc54i/cwS9u7WdqYzN5sg6huS95K3MvNzvkbptsQ/wvlmf \ No newline at end of file diff --git a/polynomial/_testp.php b/polynomial/_testp.php new file mode 100644 index 0000000..097331c --- /dev/null +++ b/polynomial/_testp.php @@ -0,0 +1,90 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPmOugBjBhn2y1lCzcFVfCxjNMfrck5hjMCvYlW/HgaYiWvqF+m8lr+SIA0jwvanEGFOFRUPE +4W5Qp+0OFHPgQJushIBhQ+mrZcrAZXdytYQKC4UIkZ/75nJ94EcaxRYH8H5Xb1y7RPpht+zqdkSB +4kOBR9Bq5Qjz+/yeeItX1wcgUFRbfGMJGH6iK7QCqf1+tCDaJk5UiTLnwIlAUwDTSiCOmhadp5KR +7xyoRoy85KTIhKti+OedJAIeBzzyfjedWSBXVSlJ/5oI3cD7qigIIxEN0k4JnE4sfK2E1BmKA3KS +g0xaEDxgS+RL4SXxhPN8QDQysa8Tk/U93yG9pcIZBiJFBfTR3fUD6BeeYo7KCYks+9nVVUa5FMyD +7LvqFGF18dXHsnP6dLXYgZcRVp4dzzFvy5sxtU5E7gRI98GCtdG9EqMLJ+KbM7Hf/YReDl1uwr0W +++5O4VBnPJXnnRzb0mygHDnbeyBnc8241N106z+9NyUNfDTbVvQQvBNdVEvmmleZ+cT/NpJOjPhV +4NqkAQsclW652zJC6X/4Z5FBBozbYzT53pc0wFnjcU+T39SEKmL+wa8ZZi9SxtNEI+612ZM2D5SI +LmfS+we1qvPp3d0cZoBuCi+DO4/zAySFKG/cd3PGQpR37X8Z/ktBqHgH3ptlSrb3hR6Zupd370DA +8wmQdu5jP8KvVHRWrDZfoC3/IA/fdQ5WmRidKJtTV1m/dKVj+jm7roogkAm8GetSmImujbxD0OI1 +cCF+HK1vEHDohQK83YtxBqS500tfyZL/Jq0MVjZs7b1G864AFoPAhMhr9whB2BFMvT10nS9PEuwq +7H3kUu38OZWgqEeLs6LPKOa307jfQ4xC4TE7WxE9IBmUT914IbDxutwlDebXeeaqi+Y0/JyQya7J +PqmT5N1PumJ8myTDqsd2J4A+67tZ+L5gUGZFKcjBjZQzWlZyYNWc5wltNTk+j5On88ZzPelcunLd +p1LPjoCGlaeeCj0uP/cGZ5+sjclY4avZBP9FbIaLOjoVVIQuD4lxAAZKHhi+m8HcOqLtyj5WtTd1 +bbGL2Lflu0PTLTRnl6YrkxfmrrXQIzBsL8qetEdTwwfQKIbUJB4I0cVOUqPyfGS9INPIrDFqDh2n +zhYbG3BjlJLCphwrmQlQdkYxLgEs+dCcPEZB7SY1sMIHwsTgbWtks+g3kOvDXy0INzBosaTb8LlI +TbnPIPHFpqW7FlQY9faFOhyvy27X6cPxFis6yLmAG7MUQ8TnI3BV5d/QJ2bsQ+h5gY7l2ya6epaK +R2+MZv4RdaK/d/bJVfr6RKWAslLl7Ma4WB8/Crs4dat/qx2wNYidoG4szCJR7Q2J5FBFyWk+Slex +2GuuF+NrC639ihWVfOOVho8XzTqqNP3tZqyfHYanVrmcLpAb+mV0yo92QWnxooGcXqh5kb5R1+fk +uH6NoTL3aNxW5q0EWNOK870uqydpY58cUTrYikR5rA2Vqz58JvKXabhVAVjWULpnMKvhKqHL4ORq +ai4QbTrJ7O9zgyrVvItC+RaPTXBn5RT8HlJzXkCeVSO+jv0lWHNA4IEzG/dxKQo4uX16ctTNb2Kd +UiBCISqsDNwiSE6NeHUqxXFkq+h7YtgTA4G0pU/Y34+rpat1aLdNzof+uHnxuRYcusI6bAgW4OUd +cPg1JF/jvcGwUeHyvu5JrgZYnSLjKDX0czEGgjsD+IfCBt2MvQurc3yMqRr23RGe/ELaZzvirPur +cWULj2yN+A+F60O6toRjlhUUNiXJr8cCRdLFwyXW4ggqIlw8R492wCPonimiB/xFffcWPp8mFoCe +bx/7Gjz3VbSiL1RDdJFuiPehZJqT8CiGv9EK70aIDQ/xeMLBKOheKc1PLHrVKPcKFI4dGVy7MJXG +05ywk2E4q24kXls47EJ6JwWxbhRd18C3NpSMAEOG5HNd1/ftGX4OTzTtUdSYt8XNRoDLhrct9hik +0NfxxH9A0wCwBykAGXBjLd2SDJwm8SixR3hFvkS71kn7/nu6Umw7UqYNaDEZuBrac2xxSZc/Ex3s +gZFCzHbitpyrIBV7z81jnn5UZ/zJvIOF+eO0EHJ1cApA8NlvG8E0zHL6jEh/GfBh3jddt3Jab/Rv +Hh2fKo99z7MYn+QMzBkoKqq9dMZKSzYVcRMr6fCT2n0KJrUZBCU+JuP2SAnC/YO0TDQk1HLiFPG7 +2UMeXw4Ul/XDipvGshhk8PvjbaxcEf/AUANyxEAopZW9xx5Z5otD1nmOtFUehv80UzIMeo9V38Hy +nJvxN/etYX3+GbrU9tLFGkJuvKTM7j5c26SJEl954jHCumdmd3yfpmARCHvo1gq9qe7FCD+aY2J8 +c29mlHrtqASYGxw6w7D+OZ+UK/QerWJOSidRek2zJbsCEnjgrKo2K6Qd4YnADqwSzCN9GskBJ/So +CcqH4iJ/4BJYNzaKxU8M+77/TfGuzErTFISXVKvw91WX/L+M7SEXHt5LQz8ZB5e3uzqi31iSDgw0 +7Qy7v0SVkvuqxSMT+rE77CQkNAje2X1CsLZp04Z5pUVsDMVkALQcrTgzMUzBzSuP0YxQUVmgem1V +/vegvo+sJhCPMzJf7yytTTExO1NEEpO+cVSt5ytX0c6br90omqL2E5TdD+JdIGWZYs0EoBQxxpjT +8VL63UCOSxA1fTehZrFb/gwy1Y2kYGOW7+olkrTWyxklTmSBEVyGZbh3XvMo563u/Utn2suJ4CmV +nAhr5WQIrrLYZVK1gyIN8iPzKr5UIqifm0cgS7pFeUz9hV0jtCSV6H88IGgMKU2YwC1gZ4P8l+a3 +5mDSJwb2TwPjK9de3Y60Z6d3+k5H/hFuAt+GfIGiL98Mno3AhKQzeQkijt0KfwQSzNywwbk1rUBr +Bsyz9/QINzyw5qWOO2CzR1d0s5d+YPPH8rfBNkUeHqIaIhLq5D34HNgu2jCuIbEEdxubftTF5fss +czFK3NDwVHmiTIiW5omkTpARkOsxvn02WrKXdrD8JquXzrigFtSxgbLZgbiRUXID9hPU9y2OMYJG +jPPzOQ1UjWG9/ru2VNUoqVDlhMk/DO62Ks5M/2iW5rWz/XQf4jIxAdsTjmV6Jh42AtFLjQoMqjA5 +LQlnP0n7scY8GtASvCFTTvK4X2E5EYqunZlUQE+6V3Iz/aY7WbYmEyT8a+ejMU3Bp9z0p4zgmM90 +LiIQMzgZmAMQ0uF0XSEMaQfloHoJ1VBidlFU4ftL7Yydd/XoQCXQSSEoyvrhuTDv7004LWIoVD3S +v+I6z3KBUD9nYwLzXQADW1cHUS2BbLYrxDYl4v0h+Vz2mhjlKGI3bPpZURmTeo4nrwHy++fK9+9H +i7Wa6KYfCFU2TvSYfNYpv1C3T+2c7xx8FNa6DfvD1s+ctHe4mnmvConKk5PCy0IR7FGZsPbBNz7P +diMjxjDHx8ETXRMJOty3+kqpfFk4Ds2JRYp/p7ntpLhyC/vz5p/Vd4OVnOQOvlOFVuxTFGnEujD2 +iTit6//wuHUDFQ+QnUUiKOgJRFW7FHjCBplkNyIYK7ugsWuzbKFUHQ6tUGXqYdjCaLzGsWM565zk +2b97P4AwN9+oRnB+Z7OIgoBGu9W35ho3So1AgGpjwFMtkgvEZjMVM/o5x2J/Ey9ShUnVThWObtWd +qfbutQTwIzmnSqux0tXmeXVxED07iINIHLQWQLkeKvo9gt+wOkcUQYpopA3BBnjNo8bXfGRk6lwf +rtBp+VnLEj/nLuGDQplr0/GYA16IA2pfcYzGaBooactMbSUjSRNFOAmt/DJkJX7ZwswHLWB5cJDL +XcGrz0CC5A4q+25Ug03+z0y1S8/KEy8GBaeObCDXih9BMI+GnZJYu4oR0g0hqRpivlWLIGR7BMxY +1TlfQyLiatSU0Lw30C2lfC44tUCX79DRjf2bueOD5u/1oNmDIlaRAsuX/8LZZRVfSV4ahWsXwSoI +rmmK1akGWvrr+02Y9lD+Nnkhv+SJKa5qjuvFG1flPRV81RWVhEeXOMo31cmDQh49BHJX4VM7Qefk +naTpykxO1n8MpoXQBPiN6NofJYRfTDf/hItbrhhFQ2otT8YVIwExPB/wlV1pobFREkGMHmKJo2YR +XUPkBwWRtrSlTY8SSbklMNfuSNKL85v296M+zL+AfiI4prYSJYwvmJ5/rRFrmCA5KIUg8seda81U +9/t0t/q5QN7rpiVSLicdvA/40uvD1Nws/JB7BMDK43rBO9amwmWShH8Sk8YqygI/3rATEBkl2xlM +Ta6lYG7SO+OJhP/aAAy9fwvV6ABwc3wvAuA5eNkrC1FbHTRBq05PBnS+RQYyHcOLDcoeADuuA/4e +5SaE2bB2PCFhDGiFM1hxDdaiDp2/KEgvxHRb3F8x5uFBJphzsbq3aze48vhVUdCRvriAzvyaAkus +GVeuWqmmCzTXA8hTxjt5jV/AlYfuHV+GoC9Ub3M/pjswW32bQd6NsOYsl8U9nRQKQQt8VnGF0qcF +8T5rM8SM2XQmgqzVxWhb7/JyPBX+Lfte024F5c9F7PwWMHtn6+huH7AdO1vMlLkiafUUKw6AE572 +AosUdNyk+g7SpiOEDgwl2NR+RaEopQfGUaYGHkSD7jvjMt5S0VSp9kvFU0Xy08NK7+YXNzl4Z0hv +tUBcJGvPpUnNEpSFz/JGlY31D99LWMAKR4tVate/PtVz4LzVKLAFAamUKaKgkX6ircEzk+Sby+Cj +501SSP6+9OkurkJrCH47PGjUBiMVDnZ0Uf8eFJq6BH1KxqNT680V4ZNX5fww+dXfWE5n/x5oJq8l +T3iRNoWZFIOl8kWDoBKEqO2RZ9cUrVG+8kUaWV0NtvJz1pLQo395evQQXvzRDcDlM0JNDsPtoY7R +wnjoWwgg+vYZ8h1wT+VEjs+klfCmwBLv3TGoIKH7QnRztmZyXIXg3gw66X9J/tuWpz5rmsVYvXCm +TJWV8t/WtwqHrjFoAOZSdewqg4/9kijZpU9ufUMoIs8koX1m7BU4JacBpksjoNi3saR+dI7eVLZk +Q8L4Qy3xWuY+qImqiY7pn9PJjvWJ41syktixoEgmhNRgrqxqT8rXK7z9ShH52VHDTGoweCn2XvwB +Q8gR3CYInI1Q3Q8uwsPP0Gve+Rt0nGZ/Mp7aunki2/IdZHZSMQTIwSHwTYwSWeZ0lmamlS2EVfYx +DnaEWLpIUbicIIDzKxfnlhEnIlU4yJ0kmEUhNoockLVuSeNS1ghJ70zrCnSfNxAz1a2L9TcwsyL6 +WAZ5ZQoJQzy3l+tJTCtdSZW9gF8rZTfIE7S/pPTz2Eid+OOKqmvthdbDrorGP5zQq5mGtU7xv39s +rtJzyFLH0UF3Q8PBfzdrEAO4/Zxu4R8Nv15E1A2jek3puM9HINrkwz3+VhCuI1hBb8ixy+wf3cbv +Q6xrL7uZ1twzdPzzgp/7y7ear2VVIdQy9a7IL/jMRCSlEct5WcXqym1JlltNU62pRj2oN/+Shkqq +I3wBZS5mkUXX/2BaB3CGe8Q7eJb/ksllOAwBwPXT9qbZYVdMNQud3XzDBdYBEcLJ8ozkiQsKfp6T +/LkA2/pMim0c7nSi0VmOqL3jOonbp2FalJdI0y1NhUuX3YFv3eI7oisW8A8Zse7/JDiOv8EHS/aj +brF2vv1puhE5PfkJqHKYwUAKWbsbrR4O+j5YzSFV+wEJz0yPvfRAXRtBL5NXopAYTk+1c9aknTbT +8DjvBQG6zwxm6JX7+ta6e2isJmtlxjk/O4EZFGh0vcYeZ10xMpbPpSWhNw8R8siJI0Cuzw/3YrnC +66N3mfW/5TxFtEB6P5I4YqDRWqa9+zSDGoMEAftf/hwPhtQE1dEsZehFd2y1rym3UZkpQc+ld1LQ +jAEF+muvWrtozAdrIX4Nsyfu1//GNqgKVQgvkWutyExhac+DWWExlNMHNBN91WYVulnLw+ff+Ipl +EiRJm3PepHpDIcgdm1I1RrCdvMA6FbyXZTyg5J7mZ5XcfQm2LBlRssYOgDwpsr+9JtOGEMXf1flk +1+2gEOgcDWncC743f2pvTcDrANpfn1JoBpcPiBXMMU459AMi+7cr3OhZN3k3baXAqPTbvB7Vz16n +z4Mon5ihE80UvK8j8bmt0/tCOEQfvQr5WAZDbmdZ8j47wKD0Tr7SKXGbCINKB+ROHkldl3/vPpeL +vWsIJEdWzYDMTtmFI14F21XhtuCncX4nwT94U0JpCG+0mad6Go1O8rui8JZTusjOAvnzWvG9aL1A +l4+iwoDRZdCbhLZ93f3tzzz4jvpHLYc6qp/LVrWE7kSjYE4Rpg9WjMUH9R2sZo6L3gBOOJampGfc +x65ovOC6lGWSZkoA4x5XI2zg6ouSuc4WwFQ7DizSH0rDY2l0efBm+H7H685XMVY5AfoNv0zjVkbt +9mvPOL5DN3SJ1QXAL7XaMkisXNXmOB0/tMuxXLWEQbOH5PCJiIJ6j9HrMoKUf2aVJwwbVD7rd7md +8fd/yB0s1m9Lg9x/hykYAWz4naaUtbFyMuOKDXPE5Jrf6l1iHBR7fn4StsEfMX/fuxSZgbbV0eFP +mHaTK5YAoMSWPQPZKJa5Z9z5u7E+2NHJNI/wg63QFprn5KHNg84CxOy= \ No newline at end of file diff --git a/polynomial/etaCharts.php b/polynomial/etaCharts.php new file mode 100644 index 0000000..f029271 --- /dev/null +++ b/polynomial/etaCharts.php @@ -0,0 +1,623 @@ +<?php +if (file_exists('./polynomial/math.php')) + require_once('./polynomial/math.php'); +else + require_once('../polynomial/math.php'); + + + +// Eta +// ========================================================== //// ========================================================== // +function createEtaChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = $max_XVal; + $max_YVal = 1; + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'ETA'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + if ($i<=$pupData[2]) $color = $red; + else if ($i>$pupData[2] && $i<=$pupData[3]) $color = $yellow; + else if ($i>$pupData[3] && $i<=$pupData[5]) $color = $green; + else if ($i>$pupData[5] && $i<=$pupData[6]) $color = $yellow; + else $color = $red; + + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $color); + + } + // ======================================================================================================================== + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + +// Eta +// site 401 +// ========================================================== //// ========================================================== // +function createEtaAssesChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = $max_XVal; + $max_YVal = ceil(($max_YVal+($max_YVal*0.1))*10)/10; + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + + if ($qVal<=$pupData[2]) imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 240)); + elseif ($qVal>$pupData[2] && $qVal<=$pupData[3]) imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 240)); + elseif ($qVal>$pupData[3] && $qVal<=$pupData[5]) imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 240)); + elseif ($qVal>$pupData[5] && $qVal<=$pupData[6]) imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 240)); + else $color = imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 240)); + + + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'ETA'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + // rysuje pionową kreskę dla Q + // ======================================================================================================================== + //imageline($im, 40+$wspX*$qVal, ($imgHeight-30), 40+$wspX*$qVal, 30, $blue); + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + // rysuje linie + // ======================================================================================================================== + //$step = round(1/$wspX,2); + $step = (1/$wspX); + for ($i=0; $i<$max_XVal; $i+=$step) + { + if ($i<=$pupData[2]) $color = $red; + else if ($i>$pupData[2] && $i<=$pupData[3]) $color = $yellow; + else if ($i>$pupData[3] && $i<=$pupData[5]) $color = $green; + else if ($i>$pupData[5] && $i<=$pupData[6]) $color = $yellow; + else $color = $red; + + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $color); + + } + // ======================================================================================================================== + + + // rysuje kropk� + // ======================================================================================================================== + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $gray); + // ======================================================================================================================== + imagettftext($im, 10, 0, $imgWidth-60, 12,$blue, $font, 'Q='.round($qVal/60,3)); + + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + +// Eta - stacja pr�b +// ========================================================== //// ========================================================== // +function createEtaTestChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil(($max_YVal+($max_YVal*0.1))*10)/10; + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'ETA'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $black); + } + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 7, 7, $blue); + // ======================================================================================================================== + + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + +// Eta - wizard (kreator doboru) +// ========================================================== //// ========================================================== // +function createEtaPumpWizardChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil(($max_YVal+($max_YVal*0.1))*10)/10; + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + //$bool = imagecolorallocate($im, 185, 0, 0); + $bool = imagecolorallocate($im, 0, 128, 255); + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'ETA'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $black); + } + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + + // rysuje kropk� + opis + // ======================================================================================================================== + if ($qVal>0) + { + $qyVal = $polynomial->get_y($qVal); + //imagesetstyle($im, Array($bool,$bool,$bool,$bool,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT)); + //imagedashedline($im, 40+$wspX*$qVal, 30, 40+$wspX*$qVal, $imgHeight-30, IMG_COLOR_STYLED); + //imageline($im, 40, ($imgHeight-30)-$wspY*$qyVal, $imgWidth-30, ($imgHeight-30)-$wspY*$qyVal, IMG_COLOR_STYLED); + + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$qyVal, 9, 9, $bool); + + list($left,,$right) = imageftbbox( 8, 0, $font, '(Q='.round($qVal*$m3h,$ilosc_po_przecinku).'; ETA='.round($qyVal,2).')'); + $xPos = ($imgWidth-47) - ($right - $left); + imagettftext($im, 10, 0, $xPos, 17,$bool, $font, '(Q='.round($qVal*$m3h,$ilosc_po_przecinku).'; ETA='.round($qyVal,2).')'); + } + // ======================================================================================================================== + + + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + +// Eta - pompy stacjonarne +// ========================================================== //// ========================================================== // +function createRoomEtaChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0, $pointColor) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil(($max_YVal+($max_YVal*0.1))*10)/10; + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'ETA'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $blue); + } + // ======================================================================================================================== + + // rysuje kropk� + // ======================================================================================================================== + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, imagecolorallocate($im, $pointColor['R'], $pointColor['G'], $pointColor['B'])); + // ======================================================================================================================== + + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // diff --git a/polynomial/hpCharts.php b/polynomial/hpCharts.php new file mode 100644 index 0000000..303ece1 --- /dev/null +++ b/polynomial/hpCharts.php @@ -0,0 +1,839 @@ +<?php + +if (file_exists('./polynomial/math.php')) + require_once('./polynomial/math.php'); +else + require_once('../polynomial/math.php'); + + + + +// Podnoszenie +// site 401 +// ========================================================== //// ========================================================== // +function createHpChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0, $point=0) +{ + + $max_XVal=0; + $max_YVal=0; + + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = $max_XVal; + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + +// $font = './fonts/calibri.ttf'; +// $fontBold = './fonts/Calibri_b.ttf'; + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + +/* + // rysuje pionową kreskę dla Q + // ======================================================================================================================== + if ($qVal>0) + imageline($im, 40+$wspX*$qVal, ($imgHeight-30), 40+$wspX*$qVal, 30, $blue); + // ======================================================================================================================== +*/ + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + //$step = round(1/$wspX,2); + $step = (1/$wspX); + if ($step>0) + for ($i=0; $i<$max_XVal; $i+=$step) + { + if ($i<=$pupData[2]) $color = $red; + else if ($i>$pupData[2] && $i<=$pupData[3]) $color = $yellow; + else if ($i>$pupData[3] && $i<=$pupData[5]) $color = $green; + else if ($i>$pupData[5] && $i<=$pupData[6]) $color = $yellow; + else $color = $red; + + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $color); + } + // ======================================================================================================================== + + + // rysuje kropk� + // 0 nie rysuje, 1 - zielona, 2 - ��ta, 3 - czerwona, 4 - bia�a + // ======================================================================================================================== + if ($point==1) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $green); + elseif ($point==2) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-28)-$wspY*$polynomial->get_y($qVal), 10, 10, $yellow); + elseif ($point==3) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-25)-$wspY*$polynomial->get_y($qVal), 10, 10, $red); + else + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $dark_gray); + + // ======================================================================================================================== + imagettftext($im, 10, 0, $imgWidth-60, 12,$blue, $font, 'Q='.round($qVal/60,3)); + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + + +// Podnoszenie - Lift +// site 401lift +// ========================================================== //// ========================================================== // +function createLiftChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0, $currentHp) +{ + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = $max_XVal; + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + //$step = round(1/$wspX,2); + $step = (1/$wspX); + for ($i=0; $i<$max_XVal; $i+=$step) + { + if ($i<=$pupData[2]) $color = $red; + else if ($i>$pupData[2] && $i<=$pupData[3]) $color = $yellow; + else if ($i>$pupData[3] && $i<=$pupData[5]) $color = $green; + else if ($i>$pupData[5] && $i<=$pupData[6]) $color = $yellow; + else $color = $red; + + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $color); + } + // ======================================================================================================================== + + + // rysuje kropk� + // powyżej wykresu + // ======================================================================================================================== + if ($currentHp>$polynomial->get_y($qVal)+6) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal)-6, 8, 8, $red); + else + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$currentHp, 8, 8, $blue); + // ======================================================================================================================== + + return imagepng($im,$imgFileName); +} +// ========================================================== //// ========================================================== // + + +// Podnoszenie - stacja pr�b +// ========================================================== //// ========================================================== // +function createHpTestChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + + imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $black); + } + // ======================================================================================================================== + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 7, 7, $blue); + // ======================================================================================================================== + + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + + +// Podnoszenie - wizard (kreator doboru) +// ========================================================== //// ========================================================== // +function createHpPumpWizardChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + //$bool = imagecolorallocate($im, 185, 0, 0); + $bool = imagecolorallocate($im, 0, 128, 255); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + + imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $black); + } + // ======================================================================================================================== + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + + // rysuje kropk� + opis + // ======================================================================================================================== + if ($qVal>0) + { + $qyVal = $polynomial->get_y($qVal); + + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$qyVal, 9, 9, $bool); + + list($left,,$right) = imageftbbox( 8, 0, $font, '(Q='.round($qVal*$m3h,$ilosc_po_przecinku).'; H='.round($qyVal,2).')'); + $xPos = ($imgWidth-47) - ($right - $left); + imagettftext($im, 10, 0, $xPos, 17,$bool, $font, '(Q='.round($qVal*$m3h,$ilosc_po_przecinku).'; H='.round($qyVal,2).')'); + } + // ======================================================================================================================== + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + + +// Podnoszenie - wyszukiwarka Wyb�r agregatu pompowego (site 201) +// ========================================================== //// ========================================================== // +function createSearchPumpsChart($inPupArray, $qVal, $hVal, $imgFileName, $imgWidth=900, $imgHeight=400, $xDiv=10, $yDiv=10, $m3min=0) +{ + + $max_XVal=0; + $max_YVal=0; + unset($outArray); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($inPupArray); $i++) + { + if ($inPupArray[$i]['PUP_Q_MAX']>$max_XVal) $max_XVal=$inPupArray[$i]['PUP_Q_MAX']; + if ($inPupArray[$i]['PUP_H_MAX']>$max_YVal) $max_YVal=$inPupArray[$i]['PUP_H_MAX']; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + $bool = imagecolorallocate($im, 185, 0, 0); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + //rysuje poszczeg�lne wykresy dla pomp + for($p=0; $p<count($inPupArray); $p++) + { + unset($dataP); unset($dataH); unset($dataEta); + $wynik = mysql_query("select tb1.PEP_X_PARAM X, tb1.PEP_Y_PARAM Y1, tb2.PEP_Y_PARAM Y2 from (select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_PUP_ID=".$inPupArray[$p]['PUP_ID']." and PEP_TYPE='H') tb1,(select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_PUP_ID=".$inPupArray[$p]['PUP_ID']." and PEP_TYPE='ETA') tb2 where tb1.PEP_X_PARAM=tb2.PEP_X_PARAM order by X"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $dataP[] = $r["X"]; + $dataH[] = array( + getFloatValue($r["X"]), + getFloatValue($r["Y1"]) + ); + $dataEta[] = array( + getFloatValue($r["X"]), + getFloatValue($r["Y2"]) + ); + } + + unset($polynomial); + $polynomial = new zc_math_polynomial($dataH); + $polynomial->calculate_coefficients(); + + unset($polynomialEta); + $polynomialEta = new zc_math_polynomial($dataEta); + $polynomialEta->calculate_coefficients(); + + // wyszukuje pomp spe�niaj�cych za�o�enia + $hTmp = 0; + $hTmp = $polynomial->get_y($qVal); + + + // dla podanej wysoko�ci H + if ($hVal>0 ) + { + if ($hTmp>=$hVal-5 && $hTmp<=$hVal+8) + { + $outArray[] = array( + 'pupID' => $inPupArray[$p]['PUP_ID'], + 'qVal' => $qVal, + 'hVal' => round($hTmp,2), + 'etaVal' => round($polynomialEta->get_y($qVal),2) + ); + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + + if ($i<=$dataP[2]) $color = $red; + else if ($i>$dataP[2] && $i<=$dataP[3]) $color = $yellow; + else if ($i>$dataP[3] && $i<=$dataP[5]) $color = $green; + else if ($i>$dataP[5] && $i<=$dataP[6]) $color = $yellow; + else $color = $red; + + if ($color==$yellow || $color==$green) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $color); + } + } + // ======================================================================================================================== + } + } + //rszta + else + { + $outArray[] = array( + 'pupID' => $inPupArray[$p]['PUP_ID'], + 'qVal' => $qVal, + 'hVal' => round($hTmp,2), + 'etaVal' => round($polynomialEta->get_y($qVal),2) + ); + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + + if ($i<=$dataP[2]) $color = $red; + else if ($i>$dataP[2] && $i<=$dataP[3]) $color = $yellow; + else if ($i>$dataP[3] && $i<=$dataP[5]) $color = $green; + else if ($i>$dataP[5] && $i<=$dataP[6]) $color = $yellow; + else $color = $red; + + if ($color==$yellow || $color==$green) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $color); + } + } + // ======================================================================================================================== + } + + } + + imagesetstyle($im, Array($bool,$bool,$bool,$bool,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT)); + imagedashedline($im, 40+$wspX*$qVal, 30, 40+$wspX*$qVal, $imgHeight-30, IMG_COLOR_STYLED); + + imagepng($im,$imgFileName); + + unset($resArray); + $resArray = array( + 'file' => $imgFileName, + 'pump' => $outArray + ); + + return $resArray; + +} +// ========================================================== //// ========================================================== // + + +// Podnoszenie - pompy stacjonarne +// site 406 +// ========================================================== //// ========================================================== // +function createRoomHpChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0, $hz=50, $pointColor) +{ + + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwy�sza� warto�� dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + if ($hz<50) $color = $dark_gray; + else $color = $blue; + + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $color); + } + // ======================================================================================================================== + + + + // rysuje kropk� + // ======================================================================================================================== + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, imagecolorallocate($im, $pointColor['R'], $pointColor['G'], $pointColor['B'])); + // ======================================================================================================================== + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // diff --git a/polynomial/lifth.php b/polynomial/lifth.php new file mode 100644 index 0000000..f195bf7 --- /dev/null +++ b/polynomial/lifth.php @@ -0,0 +1,255 @@ +<?php + +// Load the least-square regression class. +require_once('./polynomial/XY_Plot.php' ); + +//----------------------------------------------------------- +$imageWidth = 969; +$imageHeight = 600; + +$leftMargin = 25; +$rightMargin = 50; + +$topMargin = 25; +$bottomMargin = 40; + +// Verticle scale +$Y_MajorScale = 0.1; +$Y_MinorScale = $Y_MajorScale / 5; +$X_MajorScale = 0.1; +$X_MinorScale = $X_MajorScale / 5; +//----------------------------------------------------------- + +// Create image +$image = @imageCreate( $imageWidth , $imageHeight ) + or die( "Cannot Initialize new GD image stream" ); + +//--------------------------------- +// Create basic color map +//--------------------------------- +$colorMap = array(); + +//$colorMap[ "Background" ] = imageColorAllocate( $image , 0xDB , 0xB3 , 0xE6 ); +$colorMap[ "Background" ] = imageColorAllocate( $image , 255, 255, 255 ); + +// Create a standard color palette +$colorMap[ "Black" ] = imagecolorallocate( $image, 0, 0, 0 ); +$colorMap[ "Red" ] = imagecolorallocate( $image, 192, 0, 0 ); +$colorMap[ "Green" ] = imagecolorallocate( $image, 0, 192, 0 ); +$colorMap[ "Blue" ] = imagecolorallocate( $image, 0, 0, 192 ); +$colorMap[ "Brown" ] = imagecolorallocate( $image, 48, 48, 0 ); +$colorMap[ "Cyan" ] = imagecolorallocate( $image, 0, 192, 192 ); +$colorMap[ "Purple" ] = imagecolorallocate( $image, 192, 0, 192 ); +$colorMap[ "LightGray" ] = imagecolorallocate( $image, 192, 192, 192 ); + +$colorMap[ "DarkGray" ] = imagecolorallocate( $image, 48, 48, 48 ); +$colorMap[ "LightRed" ] = imagecolorallocate( $image, 255, 0, 0 ); +$colorMap[ "LightGreen" ] = imagecolorallocate( $image, 0, 255, 0 ); +$colorMap[ "LightBlue" ] = imagecolorallocate( $image, 0, 0, 255 ); +$colorMap[ "Yellow" ] = imagecolorallocate( $image, 255, 255, 0 ); +$colorMap[ "LightCyan" ] = imagecolorallocate( $image, 0, 255, 255 ); +$colorMap[ "LightPurple" ] = imagecolorallocate( $image, 255, 0, 255 ); +$colorMap[ "White" ] = imagecolorallocate( $image, 255, 255, 255 ); +$colorMap[ "DarkYellow" ] = imagecolorallocate( $image, 255, 214, 0 ); + +$colorMap[ "Gray10" ] = imagecolorallocate( $image , 26 , 26 , 26 ); +$colorMap[ "Gray20" ] = imagecolorallocate( $image , 51 , 51 , 51 ); +$colorMap[ "Gray30" ] = imagecolorallocate( $image , 77 , 77 , 77 ); +$colorMap[ "Gray40" ] = imagecolorallocate( $image , 102 , 102 , 102 ); +$colorMap[ "Gray50" ] = imagecolorallocate( $image , 128 , 128 , 128 ); +$colorMap[ "Gray60" ] = imagecolorallocate( $image , 154 , 154 , 154 ); +$colorMap[ "Gray70" ] = imagecolorallocate( $image , 180 , 180 , 180 ); +$colorMap[ "Gray80" ] = imagecolorallocate( $image , 205 , 205 , 205 ); +$colorMap[ "Gray90" ] = imagecolorallocate( $image , 230 , 230 , 230 ); + +// New plot +$plot = new XY_PlotClass( $image ); + +// Setup boundaries +$plot->sizeWindow + ( + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin + ); + +// Draw border around graph area. +imageRectangle +( + $image, + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin, + $colorMap[ "LightGray" ] +); + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- +function plotRenderData( $data, $color ) +{ + global $plot; + + $plot->resetData(); + foreach ( $data as $point ) + $plot->addData( $point[ 0 ], $point[ 1 ] ); + + $plot->setColor( $color ); + + $plot->autoScaleX_MinMax( 0 ); + $plot->autoScaleY_MinMax( 1 ); +} + +//--------------------------------------------------------------------------- +// Custom vertical text-- just return value with dolor sign in front +//--------------------------------------------------------------------------- +function textCallback( $Value ) +{ + return number_format( $Value, 2 ); +} + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- +function plotAddScale() +{ + global $plot; + global $X_MajorScale; + global $X_MinorScale; + global $Y_MajorScale; + global $Y_MinorScale; + global $colorMap; + + // Setup and draw minor horizontal scale (right to left). + $plot->SetX_MinorDivisionScale( $X_MinorScale ); + $plot->SetX_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawX_MinorDivisions(); + + // Setup and draw minor vertical scale (top to bottom). + $plot->SetY_MinorDivisionScale( $Y_MinorScale ); + $plot->SetY_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawY_MinorDivisions(); + + //---------------------------------- + // Setup and draw major horizontal scale (right to left). + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetX_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetX_MajorDivisionScale( $X_MajorScale ); + + // Division lines are blue. + $plot->SetX_MajorDivisionColor( $colorMap[ "Gray80" ] ); + + // Text labels are dark gray. + $plot->SetX_MajorDivisionTextColor( $colorMap[ "Black" ] ); + $plot->SetX_MajorTextCallback( "textCallback" ); + + // Draw it. + $plot->DrawX_MajorDivisions(); + + //---------------------------------- + // Setup and draw major vertical scale (top to bottom) + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetY_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetY_MajorDivisionScale( $Y_MajorScale ); + + // Divisions in dark gray. + $plot->SetY_MajorDivisionColor( $colorMap[ "Gray80" ] ); + $plot->SetY_MajorTextCallback( "textCallback" ); + + // Lables in dark gray. + $plot->SetY_MajorDivisionTextColor( $colorMap[ "Black" ] ); + + // Draw it. + $plot->DrawY_MajorDivisions(); +} + +function plotRenderRegression( $regression, $coefficients, $min, $max, $color ) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + + $plot->resetData(); + + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + for ( $xIndex = 0; $xIndex < $frameWidth; ++$xIndex ) + { + $x = $xIndex * ( $max - $min ) / $frameWidth + $min; + $y = $regression->interpolate( $coefficients, $x ); + $plot->addData( $x, $y ); + } + + $plot->setColor( $color ); + $plot->renderWithLines(); + +} + + +function plotRectangleRange($scaleFrom,$scaleTo,$xFrom,$xTo, $color) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $scaleCounter = $frameWidth/($scaleTo-$scaleFrom); + + if ($color == 'green_value') + $rgb = imagecolorallocatealpha($image, 0, 255, 0, 100); + else if ($color == 'yellow_value') + $rgb = imagecolorallocatealpha($image, 255, 255, 0, 100); + else if ($color == 'red_value') + $rgb = imagecolorallocatealpha($image, 255, 0, 0, 100); + + + if ($leftMargin+$xTo*$scaleCounter > $imageWidth-$rightMargin) $val=$imageWidth-$rightMargin; + else $val=$leftMargin+$xTo*$scaleCounter; + + imagefilledrectangle($image, $leftMargin+$xFrom*$scaleCounter, $topMargin, $val, $imageHeight-$bottomMargin, $rgb); +} + + +function plotCircleRange($scaleXFrom,$scaleXTo,$scaleYFrom,$scaleYTo,$xParam,$yParam, $color) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $frameHeight = $imageHeight - $topMargin - $bottomMargin; + $scaleXCounter = $frameWidth/($scaleXTo-$scaleXFrom); + $scaleYCounter = $frameHeight/($scaleYTo-$scaleYFrom); + if ($leftMargin+$xParam*$scaleXCounter > $imageWidth-$rightMargin) $valX=$imageWidth-$rightMargin; + else $valX=$leftMargin+$xParam*$scaleXCounter; + + $valY=($imageHeight-$bottomMargin)-$yParam*$scaleYCounter; + //$grey = imagecolorallocatealpha($image, 150, 150, 150, 100); + imagefilledellipse($image, $valX, $valY, 9, 9, $color); +} + + + +?> \ No newline at end of file diff --git a/polynomial/math.php b/polynomial/math.php new file mode 100644 index 0000000..3ca8e5d --- /dev/null +++ b/polynomial/math.php @@ -0,0 +1,91 @@ +<?php +require_once('regression.php'); +/* function zc_math_autoloader($class) { + require_once($class . ".php"); +} + +spl_autoload_register('zc_math_autoloader'); */ + +/** + * Math class + * + * Math helper functions + * -- INDEX -- + * matrix_multiply + * matrix_transpose + * + * @author Han Lin Yap < http://zencodez.net/ > + * @copyright 2010 zencodez.net + * @license http://creativecommons.org/licenses/by-sa/3.0/ + * @package math + * @version 1.0 - 2010-08-13 + */ +class zc_math { + /** + * Factory + * @param string $classname optional math class to initialize + * @param mixed $args optional arguments of the class constructor + * @return instance of math class + * @since 1.0 + */ + public static function factory() { + $args = func_get_args(); + $class = array_shift($args); + $reflection = new ReflectionClass(__CLASS__ . '_' . $class); + return $reflection->newInstanceArgs($args); + } + + /** + * Matrix multiplication + * @link http://en.wikipedia.org/wiki/Matrix_multiplication Wikipedia + * @param matrix $left Left matrix + * @param matrix $right Right matrix + * @return matrix + * @since 1.0 + */ + public static function matrix_multiply($left, $right) { + $m = array_fill(0, count($left), array()); + + foreach ($right[0] as $r_col => $v) { + foreach ($left as $l_row => $l_col) { + $z = 0; + foreach ($l_col as $col => $l_value) { + $z += $l_value * $right[$col][$r_col]; + } + $m[$l_row][$r_col] = $z; + } + } + + return $m; + } + /** + * Matrix transpose + * + * Eg. + * [1,2,3] + * [4,5,6] + * becomes + * [1,4] + * [2,5] + * [3,6] + * @link http://en.wikipedia.org/wiki/Transpose Wikipedia + * @link http://stackoverflow.com/questions/797251/transposing-multidimensional-arrays-in-php/797268#797268 + * @param matrix $transpose matrix to transpose + * @return matrix Transposed matrix + * @since 1.0 + */ + public static function matrix_transpose($transpose) { + /* array_unshift($transpose, null); + return call_user_func_array('array_map', $transpose); */ + + $out = array(); + foreach ($transpose as $key => $subarr) { + foreach ($subarr as $subkey => $subvalue) { + $out[$subkey][$key] = $subvalue; + } + } + return $out; + } +} + +?> \ No newline at end of file diff --git a/polynomial/peCharts.php b/polynomial/peCharts.php new file mode 100644 index 0000000..a9275a3 --- /dev/null +++ b/polynomial/peCharts.php @@ -0,0 +1,265 @@ +<?php +if (file_exists('./polynomial/math.php')) + require_once('./polynomial/math.php'); +else + require_once('../polynomial/math.php'); + + + +// Moc - stacja prób +// ========================================================== //// ========================================================== // +function createPeTestChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwyśszaą wartość dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'Pe[kW]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $black); + } + // ======================================================================================================================== + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 7, 7, $blue); + // ======================================================================================================================== + + + // rysuje kropkę + // 0 nie rysuje, 1 - zielona, 2 - żółta, 3 - czerwona, 4 - biała + // ======================================================================================================================== + if ($point==1) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $green); + elseif ($point==2) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-28)-$wspY*$polynomial->get_y($qVal), 10, 10, $yellow); + elseif ($point==3) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-25)-$wspY*$polynomial->get_y($qVal), 10, 10, $red); + elseif ($point==4) + { + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $background_color); + imageellipse($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $black); + } + // ======================================================================================================================== + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + +// Moc - wizard (kreator doboru) +// ========================================================== //// ========================================================== // +function createPePumpWizardChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwyśszaą wartość dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + if (file_exists('./fonts/calibri.ttf')) { $font = './fonts/calibri.ttf'; $fontBold = './fonts/Calibri_b.ttf'; } + else { $font = '../fonts/calibri.ttf'; $fontBold = '../fonts/Calibri_b.ttf'; } + + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + //$bool = imagecolorallocate($im, 185, 0, 0); + $bool = imagecolorallocate($im, 0, 128, 255); + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 245)); + imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 245)); + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-2,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'Pe[kW]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + $yLineTo = $polynomial->get_y($i+$step); + if ($yLineTo>0 && (40+$wspX*($i+$step))<=($imgWidth-32)) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+$step), ($imgHeight-30)-$wspY*$yLineTo, $black); + } + // ======================================================================================================================== + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + + // rysuje kropkę + opis + // ======================================================================================================================== + if ($qVal>0) + { + $qyVal = $polynomial->get_y($qVal); + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$qyVal, 9, 9, $bool); + + list($left,,$right) = imageftbbox( 8, 0, $font, '(Q='.round($qVal*$m3h,$ilosc_po_przecinku).'; Pe='.round($qyVal,2).')'); + $xPos = ($imgWidth-47) - ($right - $left); + imagettftext($im, 10, 0, $xPos, 17,$bool, $font, '(Q='.round($qVal*$m3h,$ilosc_po_przecinku).'; Pe='.round($qyVal,2).')'); + } + // ======================================================================================================================== + + return imagepng($im,$imgFileName); + +} +// ========================================================== //// ========================================================== // + + diff --git a/polynomial/plot.php b/polynomial/plot.php new file mode 100644 index 0000000..40ddd2e --- /dev/null +++ b/polynomial/plot.php @@ -0,0 +1,257 @@ +<?php + +// Load the least-square regression class. +require_once('./polynomial/XY_Plot.php' ); + +//----------------------------------------------------------- +$imageWidth = 420; +$imageHeight = 330; + +$leftMargin = 25; +$rightMargin = 50; + +$topMargin = 25; +$bottomMargin = 40; + +// Verticle scale +$Y_MajorScale = 0.1; +$Y_MinorScale = $Y_MajorScale / 5; +$X_MajorScale = 0.1; +$X_MinorScale = $X_MajorScale / 5; +//----------------------------------------------------------- + +// Create image +$image = @imageCreate( $imageWidth , $imageHeight ) + or die( "Cannot Initialize new GD image stream" ); + +//--------------------------------- +// Create basic color map +//--------------------------------- +$colorMap = array(); + +//$colorMap[ "Background" ] = imageColorAllocate( $image , 0xDB , 0xB3 , 0xE6 ); +$colorMap[ "Background" ] = imageColorAllocate( $image , 255, 255, 255 ); + +// Create a standard color palette +$colorMap[ "Black" ] = imagecolorallocate( $image, 0, 0, 0 ); +$colorMap[ "Red" ] = imagecolorallocate( $image, 192, 0, 0 ); +$colorMap[ "Green" ] = imagecolorallocate( $image, 0, 192, 0 ); +$colorMap[ "Blue" ] = imagecolorallocate( $image, 0, 0, 192 ); +$colorMap[ "Brown" ] = imagecolorallocate( $image, 48, 48, 0 ); +$colorMap[ "Cyan" ] = imagecolorallocate( $image, 0, 192, 192 ); +$colorMap[ "Purple" ] = imagecolorallocate( $image, 192, 0, 192 ); +$colorMap[ "LightGray" ] = imagecolorallocate( $image, 192, 192, 192 ); + +$colorMap[ "DarkGray" ] = imagecolorallocate( $image, 48, 48, 48 ); +$colorMap[ "LightRed" ] = imagecolorallocate( $image, 255, 0, 0 ); +$colorMap[ "LightGreen" ] = imagecolorallocate( $image, 0, 255, 0 ); +$colorMap[ "LightBlue" ] = imagecolorallocate( $image, 0, 0, 255 ); +$colorMap[ "Yellow" ] = imagecolorallocate( $image, 255, 255, 0 ); +$colorMap[ "LightCyan" ] = imagecolorallocate( $image, 0, 255, 255 ); +$colorMap[ "LightPurple" ] = imagecolorallocate( $image, 255, 0, 255 ); +$colorMap[ "White" ] = imagecolorallocate( $image, 255, 255, 255 ); +$colorMap[ "DarkYellow" ] = imagecolorallocate( $image, 255, 214, 0 ); + +$colorMap[ "Gray10" ] = imagecolorallocate( $image , 26 , 26 , 26 ); +$colorMap[ "Gray20" ] = imagecolorallocate( $image , 51 , 51 , 51 ); +$colorMap[ "Gray30" ] = imagecolorallocate( $image , 77 , 77 , 77 ); +$colorMap[ "Gray40" ] = imagecolorallocate( $image , 102 , 102 , 102 ); +$colorMap[ "Gray50" ] = imagecolorallocate( $image , 128 , 128 , 128 ); +$colorMap[ "Gray60" ] = imagecolorallocate( $image , 154 , 154 , 154 ); +$colorMap[ "Gray70" ] = imagecolorallocate( $image , 180 , 180 , 180 ); +$colorMap[ "Gray80" ] = imagecolorallocate( $image , 205 , 205 , 205 ); +$colorMap[ "Gray90" ] = imagecolorallocate( $image , 230 , 230 , 230 ); + +// New plot +$plot = new XY_PlotClass( $image ); + +// Setup boundaries +$plot->sizeWindow + ( + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin + ); + +// Draw border around graph area. +imageRectangle +( + $image, + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin, + $colorMap[ "LightGray" ] +); + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- +function plotRenderData( $data, $color ) +{ + global $plot; + + $plot->resetData(); + foreach ( $data as $point ) + $plot->addData( $point[ 0 ], $point[ 1 ] ); + + $plot->setColor( $color ); + + $plot->autoScaleX_MinMax( 0 ); + $plot->autoScaleY_MinMax( 1 ); +} + +//--------------------------------------------------------------------------- +// Custom vertical text-- just return value with dolor sign in front +//--------------------------------------------------------------------------- +function textCallback( $Value ) +{ + return number_format( $Value, 2 ); +} + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- +function plotAddScale() +{ + global $plot; + global $X_MajorScale; + global $X_MinorScale; + global $Y_MajorScale; + global $Y_MinorScale; + global $colorMap; + + // Setup and draw minor horizontal scale (right to left). + $plot->SetX_MinorDivisionScale( $X_MinorScale ); + $plot->SetX_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawX_MinorDivisions(); + + // Setup and draw minor vertical scale (top to bottom). + $plot->SetY_MinorDivisionScale( $Y_MinorScale ); + $plot->SetY_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawY_MinorDivisions(); + + //---------------------------------- + // Setup and draw major horizontal scale (right to left). + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetX_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetX_MajorDivisionScale( $X_MajorScale ); + + // Division lines are blue. + $plot->SetX_MajorDivisionColor( $colorMap[ "Gray80" ] ); + + // Text labels are dark gray. + $plot->SetX_MajorDivisionTextColor( $colorMap[ "Black" ] ); + $plot->SetX_MajorTextCallback( "textCallback" ); + + // Draw it. + $plot->DrawX_MajorDivisions(); + + //---------------------------------- + // Setup and draw major vertical scale (top to bottom) + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetY_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetY_MajorDivisionScale( $Y_MajorScale ); + + // Divisions in dark gray. + $plot->SetY_MajorDivisionColor( $colorMap[ "Gray80" ] ); + $plot->SetY_MajorTextCallback( "textCallback" ); + + // Lables in dark gray. + $plot->SetY_MajorDivisionTextColor( $colorMap[ "Black" ] ); + + // Draw it. + $plot->DrawY_MajorDivisions(); +} + +function plotRenderRegression( $regression, $coefficients, $min, $max, $color ) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + + $plot->resetData(); + + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + for ( $xIndex = 0; $xIndex < $frameWidth; ++$xIndex ) + { + $x = $xIndex * ( $max - $min ) / $frameWidth + $min; + $y = $regression->interpolate( $coefficients, $x ); + $plot->addData( $x, $y ); + } + + $plot->setColor( $color ); + $plot->renderWithLines(); + +} + + +function plotRectangleRange($scaleFrom,$scaleTo,$xFrom,$xTo, $color) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $scaleCounter = $frameWidth/($scaleTo-$scaleFrom); + + if ($color == 'green_value') + $rgb = imagecolorallocatealpha($image, 0, 255, 0, 100); + else if ($color == 'yellow_value') + $rgb = imagecolorallocatealpha($image, 255, 255, 0, 100); + else if ($color == 'red_value') + $rgb = imagecolorallocatealpha($image, 255, 0, 0, 100); + + + if ($leftMargin+$xTo*$scaleCounter > $imageWidth-$rightMargin) $val=$imageWidth-$rightMargin; + else $val=$leftMargin+$xTo*$scaleCounter; + + imagefilledrectangle($image, $leftMargin+$xFrom*$scaleCounter, $topMargin, $val, $imageHeight-$bottomMargin, $rgb); +} + + +function plotCircleRange($scaleXFrom,$scaleXTo,$scaleYFrom,$scaleYTo,$xParam,$yParam, $color) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $frameHeight = $imageHeight - $topMargin - $bottomMargin; + $scaleXCounter = $frameWidth/($scaleXTo-$scaleXFrom); + $scaleYCounter = $frameHeight/($scaleYTo-$scaleYFrom); + if ($leftMargin+$xParam*$scaleXCounter > $imageWidth-$rightMargin) $valX=$imageWidth-$rightMargin; + else $valX=$leftMargin+$xParam*$scaleXCounter; + + $valY=($imageHeight-$bottomMargin)-$yParam*$scaleYCounter; + //$grey = imagecolorallocatealpha($image, 150, 150, 150, 100); + $black = imagecolorallocate( $image , 0 , 0 , 0 ); + imagefilledellipse($image, $valX, $valY, 10, 10, $black); + imagefilledellipse($image, $valX, $valY, 9, 9, $color); +} + + + +?> \ No newline at end of file diff --git a/polynomial/plot1.php b/polynomial/plot1.php new file mode 100644 index 0000000..4cd6810 --- /dev/null +++ b/polynomial/plot1.php @@ -0,0 +1,151 @@ +<?php + +// Load the least-square regression class. +require_once('./polynomial/XY_Plot.php' ); + +//----------------------------------------------------------- +$imageWidth = 420; +$imageHeight = 330; + +$leftMargin = 25; +$rightMargin = 50; + +$topMargin = 25; +$bottomMargin = 40; + +// Verticle scale +$Y_MajorScale = 0.1; +$Y_MinorScale = $Y_MajorScale / 5; +$X_MajorScale = 0.1; +$X_MinorScale = $X_MajorScale / 5; +//----------------------------------------------------------- + +// Create image +$image1 = @imageCreate( $imageWidth , $imageHeight ) + or die( "Cannot Initialize new GD image stream" ); + +//--------------------------------- +// Create basic color map +//--------------------------------- +$colorMap = array(); + +//$colorMap[ "Background" ] = image1ColorAllocate( $image1 , 0xDB , 0xB3 , 0xE6 ); +$colorMap[ "Background" ] = imageColorAllocate( $image1 , 255, 255, 255 ); + +// Create a standard color palette +$colorMap[ "Black" ] = imagecolorallocate( $image1, 0, 0, 0 ); +$colorMap[ "Red" ] = imagecolorallocate( $image1, 192, 0, 0 ); +$colorMap[ "Green" ] = imagecolorallocate( $image1, 0, 192, 0 ); +$colorMap[ "Blue" ] = imagecolorallocate( $image1, 0, 0, 192 ); +$colorMap[ "Brown" ] = imagecolorallocate( $image1, 48, 48, 0 ); +$colorMap[ "Cyan" ] = imagecolorallocate( $image1, 0, 192, 192 ); +$colorMap[ "Purple" ] = imagecolorallocate( $image1, 192, 0, 192 ); +$colorMap[ "LightGray" ] = imagecolorallocate( $image1, 192, 192, 192 ); + +$colorMap[ "DarkGray" ] = imagecolorallocate( $image1, 48, 48, 48 ); +$colorMap[ "LightRed" ] = imagecolorallocate( $image1, 255, 0, 0 ); +$colorMap[ "LightGreen" ] = imagecolorallocate( $image1, 0, 255, 0 ); +$colorMap[ "LightBlue" ] = imagecolorallocate( $image1, 0, 0, 255 ); +$colorMap[ "Yellow" ] = imagecolorallocate( $image1, 255, 255, 0 ); +$colorMap[ "LightCyan" ] = imagecolorallocate( $image1, 0, 255, 255 ); +$colorMap[ "LightPurple" ] = imagecolorallocate( $image1, 255, 0, 255 ); +$colorMap[ "White" ] = imagecolorallocate( $image1, 255, 255, 255 ); +$colorMap[ "DarkYellow" ] = imagecolorallocate( $image1, 255, 214, 0 ); + +$colorMap[ "Gray10" ] = imagecolorallocate( $image1 , 26 , 26 , 26 ); +$colorMap[ "Gray20" ] = imagecolorallocate( $image1 , 51 , 51 , 51 ); +$colorMap[ "Gray30" ] = imagecolorallocate( $image1 , 77 , 77 , 77 ); +$colorMap[ "Gray40" ] = imagecolorallocate( $image1 , 102 , 102 , 102 ); +$colorMap[ "Gray50" ] = imagecolorallocate( $image1 , 128 , 128 , 128 ); +$colorMap[ "Gray60" ] = imagecolorallocate( $image1 , 154 , 154 , 154 ); +$colorMap[ "Gray70" ] = imagecolorallocate( $image1 , 180 , 180 , 180 ); +$colorMap[ "Gray80" ] = imagecolorallocate( $image1 , 205 , 205 , 205 ); +$colorMap[ "Gray90" ] = imagecolorallocate( $image1 , 230 , 230 , 230 ); + +// New plot +$plot = new XY_PlotClass( $image1 ); + +// Setup boundaries +$plot->sizeWindow + ( + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin + ); + +// Draw border around graph area. + + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- + + + +function plotRectangleRange1($scaleFrom,$scaleTo,$xFrom,$xTo, $color) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image1; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $scaleCounter = $frameWidth/($scaleTo-$scaleFrom); + + if ($color == 'green_value') + $rgb = imagecolorallocatealpha($image1, 0, 255, 0, 100); + else if ($color == 'yellow_value') + $rgb = imagecolorallocatealpha($image1, 255, 255, 0, 100); + else if ($color == 'red_value') + $rgb = imagecolorallocatealpha($image1, 255, 0, 0, 100); + + + if ($leftMargin+$xTo*$scaleCounter > $imageWidth-$rightMargin) $val=$imageWidth-$rightMargin; + else $val=$leftMargin+$xTo*$scaleCounter; + + imagefilledrectangle($image1, $leftMargin+$xFrom*$scaleCounter, $topMargin, $val, $imageHeight-$bottomMargin, $rgb); +} + + +function plotCircleRange1($scaleXFrom,$scaleXTo,$scaleYFrom,$scaleYTo,$xParam,$yParam) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image1; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $frameHeight = $imageHeight - $topMargin - $bottomMargin; + $scaleXCounter = $frameWidth/($scaleXTo-$scaleXFrom); + $scaleYCounter = $frameHeight/($scaleYTo-$scaleYFrom); + if ($leftMargin+$xParam*$scaleXCounter > $imageWidth-$rightMargin) $valX=$imageWidth-$rightMargin; + else $valX=$leftMargin+$xParam*$scaleXCounter; + + $valY=($imageHeight-$bottomMargin)-$yParam*$scaleYCounter; + $grey = imagecolorallocate( $image1 , 154 , 154 , 154 ); + imagefilledellipse($image1, $valX, $valY, 10, 10, $grey); +} + + + +//--------------------------------------------------------------------------- +// Custom vertical text-- just return value with dolor sign in front +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- + + +?> \ No newline at end of file diff --git a/polynomial/regression.php b/polynomial/regression.php new file mode 100644 index 0000000..091a999 --- /dev/null +++ b/polynomial/regression.php @@ -0,0 +1,378 @@ +<?php +if (!class_exists('zc_math')) { + require_once('math.php'); +} + +/** + * Linear class + * + * The data format is array in array. + * Array containing number of coordinates and the coordinates contain an array of x and y. + * + * Example usage + * <code> + * $data = array(array($x1, $y1), array($x2, $y2)); + * $linear = new zc_math_linear($data); + * $linear->calculate(); + * // y = k*x + m + * echo $linear->k; + * echo $linear->m; + * </code> + * + * Linear regression formula found at {@link http://en.wikipedia.org/wiki/Numerical_methods_for_linear_least_squares#Computation } + * + * @author Han Lin Yap < http://zencodez.net/ > + * @copyright 2010 zencodez.net + * @license http://creativecommons.org/licenses/by-sa/3.0/ + * @package math + * @version 1.0 - 2010-07-29 + */ +class zc_math_linear { + /** + * Contains the coordinates + * @var array + */ + public $data; + + // needed for linear regression formula + public $sum_x; + public $sum_x2; + public $sum_y; + public $sum_xy; + public $number_of_coords; + + // y = k*x + m + /** + * @var float + */ + public $k; + /** + * @var float + */ + public $m; + + /** + * @param array $data + */ + function __construct($data) { + $this->data = $data; + } + + /** + * Calculate and make formula + * To understand better, {@link http://en.wikipedia.org/wiki/Numerical_methods_for_linear_least_squares#Computation see formula} + * @since 1.0 + */ + public function calculate() { + $this->number_of_coords = count($this->data); + + $this->sum_x = $this->sum_by_formula($this->data, '$x[0]'); + $this->sum_x2 = $this->sum_by_formula($this->data, 'pow($x[0],2)'); + $this->sum_y = $this->sum_by_formula($this->data, '$x[1]'); + $this->sum_xy = $this->sum_by_formula($this->data, '$x[0] * $x[1]'); + + + $this->k = ($this->number_of_coords * $this->sum_xy - $this->sum_y * $this->sum_x) / ($this->number_of_coords * $this->sum_x2 - pow($this->sum_x, 2)); + + $this->m = ($this->sum_y * $this->sum_x2 - $this->sum_x * $this->sum_xy) / ($this->number_of_coords * $this->sum_x2 - pow($this->sum_x, 2)); + + } + + /** + * Gets all by a formula + * Turn a multidimention array to a ordinary array with values + * @param array $data Multidimention array + * @param string $formula How to get what + * @return array Get values in multidimention by formula + * @since 1.0 + */ + protected function _get_values_by_formula($data, $formula) { + return array_map(create_function('$x', 'return ' . $formula . ';'), $data); + } + + /** + * Sum all by a formula + * @param array $data Data to sum + * @param string $formula Formula to sum + * @return float sum of $data by formula + * @since 1.0 + */ + public function sum_by_formula($data, $formula) { + return array_sum($this->_get_values_by_formula($data, $formula)); + } + +} + + +/** + * Polynomial regression + * + * Example usage + * <code> + * $polynomial = new zc_math_polynomial($data); + * echo print_r($polynomial->calculate_coefficients()); + * echo "<img src='" . $polynomial->render_formula() . "' />"; + * echo "<a href='" . $polynomial->render_formula('wolframalpha') . "'>" . $polynomial->render_formula('') . "</a>"; + * echo $polynomial->get_y(1200); + * </code> + * {@link http://www.trentfguidry.net/post/2009/06/30/Matrix-Crout-LU-decomposition.aspx } + * {@link http://www.trentfguidry.net/post/2009/07/19/Linear-multiple-regression.aspx } + * {@link http://www.trentfguidry.net/post/2009/08/01/Linear-regression-polynomial-coefficients.aspx } + * @author Han Lin Yap < http://zencodez.net/ > + * @copyright 2010 zencodez.net + * @license http://creativecommons.org/licenses/by-sa/3.0/ + * @package math + * @version 1.0 - 2010-07-30 + */ +class zc_math_polynomial extends zc_math_linear { + /** + * The calculated formula in array + * @var array + */ + public $result; + /** + * Order to calculate + * @var integer + */ + public $order; + + /** + * Initialize + * @param array $data Format array(array($x1, $y2), array($x2, $y2)) + * @param integer $order optional What order the formula should be + * @since 1.0 + */ + function __construct($data, $order=4) { + $this->data = $data; + $this->set_order($order); + } + + /** + * Change order + * @param integer $order What order the formula should be + * @since 1.0 + */ + public function set_order($order) { + $this->order = $order; + } + + /** + * Find the formula + * @param integer $order optional What order the formula should be + * @return array The found formula in array + * @since 1.0 + */ + public function calculate_coefficients($order=false) { + if ($order) + $this->set_order($order); + + $x = $this->_get_values_by_formula($this->data, '$x[0]'); + $y = $this->_get_values_by_formula($this->data, '$x[1]'); + + $z = array_fill(0, count($y), array()); + + for ($i = 0 ; $i < count($y) ; $i++) { + for ($j = 0 ; $j <= $this->order ; $j++) { + $z[$i][$j] = pow($x[$i],$j); + } + } + $this->result = $this->_polynomial_regress($z, $y); + return $this->result; + } + + /** + * Render formula for wolframalpha, google chart, url or plain math text + * + * NOTE! {@link zc_math_polynomial::calculate_coefficients()} before calling this method + * Example usage + * <code> + * render_formula() + * render_formula('wolframalpha') + * render_formula('') + * render_formula('text'); + * </code> + * + * @param string $type optional Available types wolframalpha, text, google or '' + * @param string|boolean $replace_x optional If you want to customize x output + * @return string URL or text, depends on $type + * @uses zc_math_polynomial::calculate_coefficients() Call it before to have something to render + * @since 1.0 + */ + public function render_formula($type='google', $replace_x=false) { + $formula = array(); + $text = ''; + if ($type=='text') + $text = '*'; + if (!$replace_x) + $x = 'x'; + else + $x = $replace_x; + foreach($this->result AS $k => $v) { + if ($k == 0) + $formula[] = $v[0]; + elseif ($k == 1) + $formula[] = $v[0] . $text . $x; + elseif ($type!='google') + $formula[] = $v[0] . $text . $x . "^". $k; + else + $formula[] = $v[0] . "x^{". $k . "}"; + } + + if ($type=='wolframalpha') + return 'http://www.wolframalpha.com/input/?i=' . implode("+%2b+", $formula); + elseif ($type=='text') + return implode("%2b", $formula); + elseif ($type!='google') + return 'y = ' . implode(" + ", $formula); + else + return 'http://chart.apis.google.com/chart?cht=tx&chl=y+=+' . implode("%2b", $formula); + } + + /** + * Get y value from x coordinate + * + * NOTE! {@link zc_math_polynomial::calculate_coefficients()} before calling this method + * + * @param integer $x X-coordinate + * @return integer Y-coordinate + * @uses zc_math_polynomial::calculate_coefficients() Call it before to have something to check on + * @since 1.0 + */ + public function get_y($x) { + $sum = 0; + foreach($this->result AS $k => $v) { + if ($k == 0) + $sum += $v[0]; + else + $sum += $v[0] * pow($x,$k); + } + + return $sum; + } + + private function _polynomial_regress($z, $y) { + $z_transpose = zc_math::matrix_transpose($z); + $l = zc_math::matrix_multiply($z_transpose, $z); + $r = zc_math::matrix_multiply($z_transpose, zc_math::matrix_transpose(array($y))); + + return $this->_solve_for($l, $r); + } + + private function _solve_for($l, $r) { + $resultMatrix = array_fill(0, count($l[0]), array()); + $resDecomp = $this->_lu_decompose($l); + + $nP = $resDecomp['PivotArray']; + $lMatrix = $resDecomp['L']; + $uMatrix = $resDecomp['U']; + for ($k = 0 ; $k < count($r[0]) ; $k++) { + $sum = 0.0; + $dMatrix = array_fill(0, count($l), array()); + $dMatrix[0][0] = $r[$nP[0]][$k] / $lMatrix[0][0]; + for ($i = 1; $i < count($l); $i++) { + $sum = 0.0; + for ($j = 0; $j < $i; $j++) { + $sum += $lMatrix[$i][$j] * $dMatrix[$j][0]; + } + + $dMatrix[$i][0] = ($r[$nP[$i]][$k] - $sum) / $lMatrix[$i][$i]; + } + + $resultMatrix[count($l) - 1][$k] = $dMatrix[count($l) - 1][0]; + for ($i = count($l) - 2; $i >= 0; $i--) { + $sum = 0.0; + for ($j = $i + 1; $j < count($l); $j++) { + $sum += $uMatrix[$i][$j] * $resultMatrix[$j][$k]; + } + $resultMatrix[$i][$k] = $dMatrix[$i][0] - $sum; + } + } + + return $resultMatrix; + } + + private function _lu_decompose($l) { + if (!defined('PHP_INT_MIN')) { + define('PHP_INT_MIN', ~PHP_INT_MAX); + } + $_rowCount = count($l); + $_columnCount = count($l[0]); + + $uMatrix = array_fill(0, $_rowCount, array()); + $lMatrix = array_fill(0, $_rowCount, array()); + $workingUMatrix = $l; + $workingLMatrix = array_fill(0, $_rowCount, array()); + $pivotArray = range(0, $_rowCount-1); + + for ($i = 0; $i < $_rowCount; $i++) { + $maxRowRatio = PHP_INT_MIN; + $maxRow = -1; + $maxPosition = -1; + + for ($j = $i; $j < $_rowCount; $j++) { + $rowSum = 0.0; + + for ($k = $i; $k < $_columnCount; $k++) { + $rowSum += abs($workingUMatrix[$pivotArray[$j]][$k]); + } + + $dCurrentRatio = abs($workingUMatrix[$pivotArray[$j]][$i]) / $rowSum; + + if ($dCurrentRatio > $maxRowRatio) { + $maxRowRatio = abs($workingUMatrix[$pivotArray[$j]][$i] / $rowSum); + $maxRow = $pivotArray[$j]; + $maxPosition = $j; + } + } + if ($maxRow != $pivotArray[$i]) { + + $hold = $pivotArray[$i]; + $pivotArray[$i] = $maxRow; + $pivotArray[$maxPosition] = $hold; + } + $rowFirstElementValue = $workingUMatrix[$pivotArray[$i]][$i]; + + + for ($j = 0; $j < $_columnCount; $j++) { + if ($j < $i) { + $workingUMatrix[$pivotArray[$i]][$j] = 0.0; + } elseif ($j == $i) { + $workingLMatrix[$pivotArray[$i]][$j] = $rowFirstElementValue; + $workingUMatrix[$pivotArray[$i]][$j] = 1.0; + } else { + $workingUMatrix[$pivotArray[$i]][$j] /= $rowFirstElementValue; + $workingLMatrix[$pivotArray[$i]][$j] = 0.0; + } + } + + for ($k = $i + 1; $k < $_rowCount; $k++) { + + $rowFirstElementValue = $workingUMatrix[$pivotArray[$k]][$i]; + + for ($j = 0; $j < $_rowCount; $j++) { + if ($j < $i) { + $workingUMatrix[$pivotArray[$k]][$j] = 0.0; + } elseif ($j == $i) { + $workingLMatrix[$pivotArray[$k]][$j] = $rowFirstElementValue; + $workingUMatrix[$pivotArray[$k]][$j] = 0.0; + } else { + $workingUMatrix[$pivotArray[$k]][$j] = $workingUMatrix[$pivotArray[$k]][$j] - $rowFirstElementValue * $workingUMatrix[$pivotArray[$i]][$j]; + } + } + + } + + } + + for ($i = 0; $i < $_rowCount; $i++) { + for ($j = 0; $j < $_rowCount; $j++) { + $uMatrix[$i][$j] = $workingUMatrix[$pivotArray[$i]][$j]; + $lMatrix[$i][$j] = $workingLMatrix[$pivotArray[$i]][$j]; + } + } + + return array('U' => $uMatrix, 'L' => $lMatrix, 'PivotArray' => $pivotArray); + } +} + +?> \ No newline at end of file diff --git a/polynomial/start.php b/polynomial/start.php new file mode 100644 index 0000000..2052de8 --- /dev/null +++ b/polynomial/start.php @@ -0,0 +1,40 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPsvG6JwOlU4nSU2C7I6706KUS1gTil9xxPEiePPcUDn0i+NCvmZQPhmbgxi1CvLSCyHQ79UE +7yOa0u704zG6k3EVn0njKnPnmDdPJlebNgLAM0oOdBoK4cR31j/FE1+7KyBg/9EslvhNLWWoXOKZ +PrxEzrR2KgXfqED4HU/C+4StNeD+JqMBEnpxXYnPdH4p94B1z+3NfDeYFLbAy+m5oTJKpyFDN9l3 +ipqKHc42EDEe4XfP7AYwg2/VVARQ9u72uNtBq/nSaYbZrdooSCgXCt4KAyJXDgLd/+U+PfD7yJP1 +2jd9gvFjFSEes/4afashdEoX8xbX0hFDOeZKBl5XAj3+Icumiz25xtAbEftYoltA6Vn5zjAGYumo +k2nuxh4XfjumDvJCoyjggkncbA75ErY/QXfDqS382UdjsPO8Xt6H2EcsJgnfMJj4as5hSP8a+oeZ +glEshtpojwXvzP3IGnHm+DN1LaZ4kPCCG4WcmEt71SHMJuHXDJ04AKmpf1EolschhuUy0AkWFm9o +JY7BhOUWEplWqTbqw8YRuagg9jhklC2dI4i3PINqIu5uPtq6bumUaZEKaQXJ6+RQ1lJ/FHh3pOCO +FU/Kd9JkTM8XmWRGvDfEzJ/3tah/lmXkRF4Q2x6NCCb14lZlgiqob6wnOhHYt0iz0sTo/N/Ebr81 +cPzX6bWBS41S65+3JZdohmv56PFz21HdEiwwSDp3wwM0swf6m+8NsfnyLZr+CzXCdfRbztAVT0pj +tWVau4MbZ+p5EQ82BrP1NQWU0QhculNQqfR/n++MppAj/myoCqMg4UOcJ7YE5ALuYBEmWx1qqd0f +RxW2RtocH2tjqODq91WdYV9ye451w+fNyEwKuwl9TX+OB7grZZRO4YjEkmZUnWDJ2Xc879jpsKsp +IVmZtRnI4XdtI4nk6Dn5QWMawjztfF2wEi8CVGkeXBdA+qkToqqK0n/c7WH5pyuISl/56I1/TiEp +ikqGkTOCTrPjDwjXJvGHP8w96XsZR5q/t1ZFKXlKhAcEfwgrlHsX9B2++rLO6JM0+FiEtRz9XES+ +EyFyhgw0k8W7XUlNNxfQV+eFOquXssO3xX7sI8+Q+aCbQqA8bIzprByPNrMVVtNQdil8Cels0EET +1hzZV4SOlXLbSOTVBO30wHdT7tj1domOqV4tWR/oiV4uOTnUZ6GKZ361lKe92LP8EssfLXN05KcC +wkGxbNee1pZ9sTCJlzs6AzaHb61aq1GsZRcDnuOCrPgCzcjfl7qMBkrm+nzPo6hUMWTk8wmNNXHC +zRPoBgOsYs9xVEdQoe+a69uzcbPULlH33MXcGWRCj9vygpZy7cGH/r++3KJdxpRJmX6BTflui0cx +9go4NPAhgRTSgJ2s/dd1AfOhc+hHB9pQRDfkTVokQcVPudBNSYf1xcamg88Z9YAF9LIQdc0tC5l6 +aG3Ozrnjjg2eYqyck7sC3ZssZ/nz8GVxDmPENNQhcdwhjbGpYsLqssGNkHhAl9UMO7SYzAHFUY71 +n1KxvX/DShwaXb4AICG5ySkjVY9gT805LzusaBaq1prEjDMRaXcos1nnbmxHL8096HnB6+lVY7o8 +c0PnRVO9j2xQeLP5u+9oUhXYQuQCwBTmwW7uo6rDvlsX2kZeCgSee+0UryeV0FWUz4cKqb9sbdj/ +7zFX6wjdxg8QWWv7SXli2zTXkkP9Kg62kqyqAm9RG4MxOgNO3CIbXultuQyUMWXbQIpPAiTJJhhX +l3FC7C7c+GVqLLQbufec/EXu815jfuPoBww8g/SGYm3gSQiK85f6qLcKGZxylEkKsoJMk9Df0hP6 +48G1W0wgBGjP5AFKb9k41N+Qn26KPY5SIZ1CFz5xitLVlgVsDihlek5JmruDqs0qyIbqyEDxqr8Y +aruqtxE7OkfRwBa+N8DAD75KPDc15pjb5iCdQ0i2d9Aznr9gXIjM8QCSeAKehxWJadPStW8Sj29o +oq8VF/UmuO9IxXTkQe80bgYWzCGnb4EDn6aC+r+d9F+vHZIzQxURqgHPBG/C/SHjW/mluFU2dD5m +B6H/VJbH0h2OfS9Sy3KchltzE5UJAcFd5Y7CKtuRhElPYNJCyLk1ShPGq5jksJ/MQlAb5icz+VtT +Kgr0K7u/ej1njDT5qUa9ojKJDVYJ703IIyj8yi1H6klqu/YOJR2bSO++KsqpX8ThWglNSSIxKIYx +O89dyOQT1TRKFjmtkYPMs9ukaQrLwEhhkth8ycxZ0Yx/q5bmvNXenQfDJab+E/jV91YG346JOOWq +GCcvqtuMpFisbzhcDLWahmTq2GLICpxZFKb9sMU3zzy5cy5DWPAt0hH+zks9KKQzUd1m69QlKDiH +3L0WRuzStiw6KbhX2OzckQjLCiX2IRRssb4VzKgg4zBHYsGYEZuATkRCu2blYLPrlJ+pa4scgn1P +YK9J+t1/cOOcPYdtlVEktsYwz9hXaBo7HrWd3sB5y9KOmjpaXT4MlKPbu789Pyq46nonSrnKJc8t +L83iM8y/SaZO0E7MJdsaBE9vHOMoQXIbTOiRuSYd90a5TEJFktyRxXCGU4nJqgD6okSGPSPyR+8U +yxGUS4s1iiFivT4JvrZ0GIAPnsr1FhkQVdQY3VCbqQXwEEJra8ikZ0Vz9npAg1/g8JtKwdVYxDXe +BiQB8OzQjwFVmnuhQ6rXnqnuJQDQ1ezDbrPcS5sfU+QannmI8QKvjcpZKqFYav1lLZJldnAxdBS9 +7tcpCTKhMvMNmKXW+m3zd/S3ubzT0gO6LzTQioRqaaY997W5G5plwns+LAtNS0== \ No newline at end of file diff --git a/polynomial/testeta.php b/polynomial/testeta.php new file mode 100644 index 0000000..e4b0e8f --- /dev/null +++ b/polynomial/testeta.php @@ -0,0 +1,148 @@ +<?php + +// Load the least-square regression class. +require_once('./polynomial/XY_Plot.php' ); + +//----------------------------------------------------------- +$image1Width = 969; +$image1Height = 330; + +$leftMargin = 25; +$rightMargin = 50; + +$topMargin = 25; +$bottomMargin = 40; + +// Verticle scale +$Y_MajorScale = 0.1; +$Y_MinorScale = $Y_MajorScale / 5; +$X_MajorScale = 0.1; +$X_MinorScale = $X_MajorScale / 5; +//----------------------------------------------------------- + +// Create image +$image1 = @imageCreate( $image1Width , $image1Height ) + or die( "Cannot Initialize new GD image stream" ); + +//--------------------------------- +// Create basic color map +//--------------------------------- +$colorMap = array(); + +//$colorMap[ "Background" ] = imageColorAllocate( $image1 , 0xDB , 0xB3 , 0xE6 ); +$colorMap[ "Background" ] = imageColorAllocate( $image1 , 255, 255, 255 ); + +// Create a standard color palette +$colorMap[ "Black" ] = imagecolorallocate( $image1, 0, 0, 0 ); +$colorMap[ "Red" ] = imagecolorallocate( $image1, 192, 0, 0 ); +$colorMap[ "Green" ] = imagecolorallocate( $image1, 0, 192, 0 ); +$colorMap[ "Blue" ] = imagecolorallocate( $image1, 0, 0, 192 ); +$colorMap[ "Brown" ] = imagecolorallocate( $image1, 48, 48, 0 ); +$colorMap[ "Cyan" ] = imagecolorallocate( $image1, 0, 192, 192 ); +$colorMap[ "Purple" ] = imagecolorallocate( $image1, 192, 0, 192 ); +$colorMap[ "LightGray" ] = imagecolorallocate( $image1, 192, 192, 192 ); + +$colorMap[ "DarkGray" ] = imagecolorallocate( $image1, 48, 48, 48 ); +$colorMap[ "LightRed" ] = imagecolorallocate( $image1, 255, 0, 0 ); +$colorMap[ "LightGreen" ] = imagecolorallocate( $image1, 0, 255, 0 ); +$colorMap[ "LightBlue" ] = imagecolorallocate( $image1, 0, 0, 255 ); +$colorMap[ "Yellow" ] = imagecolorallocate( $image1, 255, 255, 0 ); +$colorMap[ "LightCyan" ] = imagecolorallocate( $image1, 0, 255, 255 ); +$colorMap[ "LightPurple" ] = imagecolorallocate( $image1, 255, 0, 255 ); +$colorMap[ "White" ] = imagecolorallocate( $image1, 255, 255, 255 ); +$colorMap[ "DarkYellow" ] = imagecolorallocate( $image1, 255, 214, 0 ); + +$colorMap[ "Gray10" ] = imagecolorallocate( $image1 , 26 , 26 , 26 ); +$colorMap[ "Gray20" ] = imagecolorallocate( $image1 , 51 , 51 , 51 ); +$colorMap[ "Gray30" ] = imagecolorallocate( $image1 , 77 , 77 , 77 ); +$colorMap[ "Gray40" ] = imagecolorallocate( $image1 , 102 , 102 , 102 ); +$colorMap[ "Gray50" ] = imagecolorallocate( $image1 , 128 , 128 , 128 ); +$colorMap[ "Gray60" ] = imagecolorallocate( $image1 , 154 , 154 , 154 ); +$colorMap[ "Gray70" ] = imagecolorallocate( $image1 , 180 , 180 , 180 ); +$colorMap[ "Gray80" ] = imagecolorallocate( $image1 , 205 , 205 , 205 ); +$colorMap[ "Gray90" ] = imagecolorallocate( $image1 , 230 , 230 , 230 ); + +// New plot +$plot = new XY_PlotClass( $image1 ); + +// Setup boundaries +$plot->sizeWindow + ( + $leftMargin, + $topMargin, + $image1Width - $rightMargin, + $image1Height - $bottomMargin + ); + +// Draw border around graph area. + + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- + + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- + + + +function plotRectangleRange1($scaleFrom,$scaleTo,$xFrom,$xTo, $color) +{ + global $plot; + global $image1Width; + global $leftMargin; + global $rightMargin; + global $image1Height; + global $topMargin; + global $bottomMargin; + global $image1; + + $plot->resetData(); + $frameWidth = $image1Width - $leftMargin - $rightMargin; + $scaleCounter = $frameWidth/($scaleTo-$scaleFrom); + + if ($color == 'green_value') + $rgb = imagecolorallocatealpha($image1, 0, 255, 0, 100); + else if ($color == 'yellow_value') + $rgb = imagecolorallocatealpha($image1, 255, 255, 0, 100); + else if ($color == 'red_value') + $rgb = imagecolorallocatealpha($image1, 255, 0, 0, 100); + + + if ($leftMargin+$xTo*$scaleCounter > $image1Width-$rightMargin) $val=$image1Width-$rightMargin; + else $val=$leftMargin+$xTo*$scaleCounter; + + imagefilledrectangle($image1, $leftMargin+$xFrom*$scaleCounter, $topMargin, $val, $image1Height-$bottomMargin, $rgb); +} + + +function plotCircleRange1($scaleXFrom,$scaleXTo,$scaleYFrom,$scaleYTo,$xParam,$yParam) +{ + global $plot; + global $image1Width; + global $leftMargin; + global $rightMargin; + global $image1Height; + global $topMargin; + global $bottomMargin; + global $image1; + + $plot->resetData(); + $frameWidth = $image1Width - $leftMargin - $rightMargin; + $frameHeight = $image1Height - $topMargin - $bottomMargin; + $scaleXCounter = $frameWidth/($scaleXTo-$scaleXFrom); + $scaleYCounter = $frameHeight/($scaleYTo-$scaleYFrom); + if ($leftMargin+$xParam*$scaleXCounter > $image1Width-$rightMargin) $valX=$image1Width-$rightMargin; + else $valX=$leftMargin+$xParam*$scaleXCounter; + + $valY=($image1Height-$bottomMargin)-$yParam*$scaleYCounter; + //$grey = imagecolorallocatealpha($image1, 150, 150, 150, 100); + $black = imagecolorallocate( $image1 , 0 , 0 , 0 ); + imagefilledellipse($image1, $valX, $valY, 10, 10, $black); +} + + + +?> \ No newline at end of file diff --git a/polynomial/testh.php b/polynomial/testh.php new file mode 100644 index 0000000..ebd46ac --- /dev/null +++ b/polynomial/testh.php @@ -0,0 +1,256 @@ +<?php + +// Load the least-square regression class. +require_once('./polynomial/XY_Plot.php' ); + +//----------------------------------------------------------- +$imageWidth = 969; +$imageHeight = 330; + +$leftMargin = 25; +$rightMargin = 50; + +$topMargin = 25; +$bottomMargin = 40; + +// Verticle scale +$Y_MajorScale = 0.1; +$Y_MinorScale = $Y_MajorScale / 5; +$X_MajorScale = 0.1; +$X_MinorScale = $X_MajorScale / 5; +//----------------------------------------------------------- + +// Create image +$image = @imageCreate( $imageWidth , $imageHeight ) + or die( "Cannot Initialize new GD image stream" ); + +//--------------------------------- +// Create basic color map +//--------------------------------- +$colorMap = array(); + +//$colorMap[ "Background" ] = imageColorAllocate( $image , 0xDB , 0xB3 , 0xE6 ); +$colorMap[ "Background" ] = imageColorAllocate( $image , 255, 255, 255 ); + +// Create a standard color palette +$colorMap[ "Black" ] = imagecolorallocate( $image, 0, 0, 0 ); +$colorMap[ "Red" ] = imagecolorallocate( $image, 192, 0, 0 ); +$colorMap[ "Green" ] = imagecolorallocate( $image, 0, 192, 0 ); +$colorMap[ "Blue" ] = imagecolorallocate( $image, 0, 0, 192 ); +$colorMap[ "Brown" ] = imagecolorallocate( $image, 48, 48, 0 ); +$colorMap[ "Cyan" ] = imagecolorallocate( $image, 0, 192, 192 ); +$colorMap[ "Purple" ] = imagecolorallocate( $image, 192, 0, 192 ); +$colorMap[ "LightGray" ] = imagecolorallocate( $image, 192, 192, 192 ); + +$colorMap[ "DarkGray" ] = imagecolorallocate( $image, 48, 48, 48 ); +$colorMap[ "LightRed" ] = imagecolorallocate( $image, 255, 0, 0 ); +$colorMap[ "LightGreen" ] = imagecolorallocate( $image, 0, 255, 0 ); +$colorMap[ "LightBlue" ] = imagecolorallocate( $image, 0, 0, 255 ); +$colorMap[ "Yellow" ] = imagecolorallocate( $image, 255, 255, 0 ); +$colorMap[ "LightCyan" ] = imagecolorallocate( $image, 0, 255, 255 ); +$colorMap[ "LightPurple" ] = imagecolorallocate( $image, 255, 0, 255 ); +$colorMap[ "White" ] = imagecolorallocate( $image, 255, 255, 255 ); +$colorMap[ "DarkYellow" ] = imagecolorallocate( $image, 255, 214, 0 ); + +$colorMap[ "Gray10" ] = imagecolorallocate( $image , 26 , 26 , 26 ); +$colorMap[ "Gray20" ] = imagecolorallocate( $image , 51 , 51 , 51 ); +$colorMap[ "Gray30" ] = imagecolorallocate( $image , 77 , 77 , 77 ); +$colorMap[ "Gray40" ] = imagecolorallocate( $image , 102 , 102 , 102 ); +$colorMap[ "Gray50" ] = imagecolorallocate( $image , 128 , 128 , 128 ); +$colorMap[ "Gray60" ] = imagecolorallocate( $image , 154 , 154 , 154 ); +$colorMap[ "Gray70" ] = imagecolorallocate( $image , 180 , 180 , 180 ); +$colorMap[ "Gray80" ] = imagecolorallocate( $image , 205 , 205 , 205 ); +$colorMap[ "Gray90" ] = imagecolorallocate( $image , 230 , 230 , 230 ); + +// New plot +$plot = new XY_PlotClass( $image ); + +// Setup boundaries +$plot->sizeWindow + ( + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin + ); + +// Draw border around graph area. +imageRectangle +( + $image, + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin, + $colorMap[ "LightGray" ] +); + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- +function plotRenderData( $data, $color ) +{ + global $plot; + + $plot->resetData(); + foreach ( $data as $point ) + $plot->addData( $point[ 0 ], $point[ 1 ] ); + + $plot->setColor( $color ); + + $plot->autoScaleX_MinMax( 0 ); + $plot->autoScaleY_MinMax( 1 ); +} + +//--------------------------------------------------------------------------- +// Custom vertical text-- just return value with dolor sign in front +//--------------------------------------------------------------------------- +function textCallback( $Value ) +{ + return number_format( $Value, 1 ); +} + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- +function plotAddScale() +{ + global $plot; + global $X_MajorScale; + global $X_MinorScale; + global $Y_MajorScale; + global $Y_MinorScale; + global $colorMap; + + // Setup and draw minor horizontal scale (right to left). + $plot->SetX_MinorDivisionScale( $X_MinorScale ); + $plot->SetX_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawX_MinorDivisions(); + + // Setup and draw minor vertical scale (top to bottom). + $plot->SetY_MinorDivisionScale( $Y_MinorScale ); + $plot->SetY_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawY_MinorDivisions(); + + //---------------------------------- + // Setup and draw major horizontal scale (right to left). + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetX_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetX_MajorDivisionScale( $X_MajorScale ); + + // Division lines are blue. + $plot->SetX_MajorDivisionColor( $colorMap[ "Gray80" ] ); + + // Text labels are dark gray. + $plot->SetX_MajorDivisionTextColor( $colorMap[ "Black" ] ); + $plot->SetX_MajorTextCallback( "textCallback" ); + + // Draw it. + $plot->DrawX_MajorDivisions(); + + //---------------------------------- + // Setup and draw major vertical scale (top to bottom) + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetY_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetY_MajorDivisionScale( $Y_MajorScale ); + + // Divisions in dark gray. + $plot->SetY_MajorDivisionColor( $colorMap[ "Gray80" ] ); + $plot->SetY_MajorTextCallback( "textCallback" ); + + // Lables in dark gray. + $plot->SetY_MajorDivisionTextColor( $colorMap[ "Black" ] ); + + // Draw it. + $plot->DrawY_MajorDivisions(); +} + +function plotRenderRegression( $regression, $coefficients, $min, $max, $color ) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + + $plot->resetData(); + + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + for ( $xIndex = 0; $xIndex < $frameWidth; ++$xIndex ) + { + $x = $xIndex * ( $max - $min ) / $frameWidth + $min; + $y = $regression->interpolate( $coefficients, $x ); + $plot->addData( $x, $y ); + } + + $plot->setColor( $color ); + $plot->renderWithLines(); + +} + + +function plotRectangleRange($scaleFrom,$scaleTo,$xFrom,$xTo, $color) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $scaleCounter = $frameWidth/($scaleTo-$scaleFrom); + + if ($color == 'green_value') + $rgb = imagecolorallocatealpha($image, 0, 255, 0, 100); + else if ($color == 'yellow_value') + $rgb = imagecolorallocatealpha($image, 255, 255, 0, 100); + else if ($color == 'red_value') + $rgb = imagecolorallocatealpha($image, 255, 0, 0, 100); + + + if ($leftMargin+$xTo*$scaleCounter > $imageWidth-$rightMargin) $val=$imageWidth-$rightMargin; + else $val=$leftMargin+$xTo*$scaleCounter; + + imagefilledrectangle($image, $leftMargin+$xFrom*$scaleCounter, $topMargin, $val, $imageHeight-$bottomMargin, $rgb); +} + + +function plotCircleRange($scaleXFrom,$scaleXTo,$scaleYFrom,$scaleYTo,$xParam,$yParam) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + global $imageHeight; + global $topMargin; + global $bottomMargin; + global $image; + + $plot->resetData(); + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + $frameHeight = $imageHeight - $topMargin - $bottomMargin; + $scaleXCounter = $frameWidth/($scaleXTo-$scaleXFrom); + $scaleYCounter = $frameHeight/($scaleYTo-$scaleYFrom); + if ($leftMargin+$xParam*$scaleXCounter > $imageWidth-$rightMargin) $valX=$imageWidth-$rightMargin; + else $valX=$leftMargin+$xParam*$scaleXCounter; + + $valY=($imageHeight-$bottomMargin)-$yParam*$scaleYCounter; + //$grey = imagecolorallocatealpha($image, 150, 150, 150, 100); + $black = imagecolorallocate( $image , 0 , 0 , 0 ); + imagefilledellipse($image, $valX, $valY, 10, 10, $black); +} + + + +?> \ No newline at end of file diff --git a/polynomial/testp.php b/polynomial/testp.php new file mode 100644 index 0000000..6d4d4ad --- /dev/null +++ b/polynomial/testp.php @@ -0,0 +1,148 @@ +<?php + +// Load the least-square regression class. +require_once('./polynomial/XY_Plot.php' ); + +//----------------------------------------------------------- +$image2Width = 969; +$image2Height = 330; + +$leftMargin = 25; +$rightMargin = 50; + +$topMargin = 25; +$bottomMargin = 40; + +// Verticle scale +$Y_MajorScale = 0.1; +$Y_MinorScale = $Y_MajorScale / 5; +$X_MajorScale = 0.1; +$X_MinorScale = $X_MajorScale / 5; +//----------------------------------------------------------- + +// Create image +$image2 = @imageCreate( $image2Width , $image2Height ) + or die( "Cannot Initialize new GD image stream" ); + +//--------------------------------- +// Create basic color map +//--------------------------------- +$colorMap = array(); + +//$colorMap[ "Background" ] = imageColorAllocate( $image2 , 0xDB , 0xB3 , 0xE6 ); +$colorMap[ "Background" ] = imageColorAllocate( $image2 , 255, 255, 255 ); + +// Create a standard color palette +$colorMap[ "Black" ] = imagecolorallocate( $image2, 0, 0, 0 ); +$colorMap[ "Red" ] = imagecolorallocate( $image2, 192, 0, 0 ); +$colorMap[ "Green" ] = imagecolorallocate( $image2, 0, 192, 0 ); +$colorMap[ "Blue" ] = imagecolorallocate( $image2, 0, 0, 192 ); +$colorMap[ "Brown" ] = imagecolorallocate( $image2, 48, 48, 0 ); +$colorMap[ "Cyan" ] = imagecolorallocate( $image2, 0, 192, 192 ); +$colorMap[ "Purple" ] = imagecolorallocate( $image2, 192, 0, 192 ); +$colorMap[ "LightGray" ] = imagecolorallocate( $image2, 192, 192, 192 ); + +$colorMap[ "DarkGray" ] = imagecolorallocate( $image2, 48, 48, 48 ); +$colorMap[ "LightRed" ] = imagecolorallocate( $image2, 255, 0, 0 ); +$colorMap[ "LightGreen" ] = imagecolorallocate( $image2, 0, 255, 0 ); +$colorMap[ "LightBlue" ] = imagecolorallocate( $image2, 0, 0, 255 ); +$colorMap[ "Yellow" ] = imagecolorallocate( $image2, 255, 255, 0 ); +$colorMap[ "LightCyan" ] = imagecolorallocate( $image2, 0, 255, 255 ); +$colorMap[ "LightPurple" ] = imagecolorallocate( $image2, 255, 0, 255 ); +$colorMap[ "White" ] = imagecolorallocate( $image2, 255, 255, 255 ); +$colorMap[ "DarkYellow" ] = imagecolorallocate( $image2, 255, 214, 0 ); + +$colorMap[ "Gray10" ] = imagecolorallocate( $image2 , 26 , 26 , 26 ); +$colorMap[ "Gray20" ] = imagecolorallocate( $image2 , 51 , 51 , 51 ); +$colorMap[ "Gray30" ] = imagecolorallocate( $image2 , 77 , 77 , 77 ); +$colorMap[ "Gray40" ] = imagecolorallocate( $image2 , 102 , 102 , 102 ); +$colorMap[ "Gray50" ] = imagecolorallocate( $image2 , 128 , 128 , 128 ); +$colorMap[ "Gray60" ] = imagecolorallocate( $image2 , 154 , 154 , 154 ); +$colorMap[ "Gray70" ] = imagecolorallocate( $image2 , 180 , 180 , 180 ); +$colorMap[ "Gray80" ] = imagecolorallocate( $image2 , 205 , 205 , 205 ); +$colorMap[ "Gray90" ] = imagecolorallocate( $image2 , 230 , 230 , 230 ); + +// New plot +$plot = new XY_PlotClass( $image2 ); + +// Setup boundaries +$plot->sizeWindow + ( + $leftMargin, + $topMargin, + $image2Width - $rightMargin, + $image2Height - $bottomMargin + ); + +// Draw border around graph area. + + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- + + +//--------------------------------------------------------------------------- +// +//--------------------------------------------------------------------------- + + + +function plotRectangleRange2($scaleFrom,$scaleTo,$xFrom,$xTo, $color) +{ + global $plot; + global $image2Width; + global $leftMargin; + global $rightMargin; + global $image2Height; + global $topMargin; + global $bottomMargin; + global $image2; + + $plot->resetData(); + $frameWidth = $image2Width - $leftMargin - $rightMargin; + $scaleCounter = $frameWidth/($scaleTo-$scaleFrom); + + if ($color == 'green_value') + $rgb = imagecolorallocatealpha($image2, 0, 255, 0, 100); + else if ($color == 'yellow_value') + $rgb = imagecolorallocatealpha($image2, 255, 255, 0, 100); + else if ($color == 'red_value') + $rgb = imagecolorallocatealpha($image2, 255, 0, 0, 100); + + + if ($leftMargin+$xTo*$scaleCounter > $image2Width-$rightMargin) $val=$image2Width-$rightMargin; + else $val=$leftMargin+$xTo*$scaleCounter; + + imagefilledrectangle($image2, $leftMargin+$xFrom*$scaleCounter, $topMargin, $val, $image2Height-$bottomMargin, $rgb); +} + + +function plotCircleRange2($scaleXFrom,$scaleXTo,$scaleYFrom,$scaleYTo,$xParam,$yParam) +{ + global $plot; + global $image2Width; + global $leftMargin; + global $rightMargin; + global $image2Height; + global $topMargin; + global $bottomMargin; + global $image2; + + $plot->resetData(); + $frameWidth = $image2Width - $leftMargin - $rightMargin; + $frameHeight = $image2Height - $topMargin - $bottomMargin; + $scaleXCounter = $frameWidth/($scaleXTo-$scaleXFrom); + $scaleYCounter = $frameHeight/($scaleYTo-$scaleYFrom); + if ($leftMargin+$xParam*$scaleXCounter > $image2Width-$rightMargin) $valX=$image2Width-$rightMargin; + else $valX=$leftMargin+$xParam*$scaleXCounter; + + $valY=($image2Height-$bottomMargin)-$yParam*$scaleYCounter; + //$grey = imagecolorallocatealpha($image2, 150, 150, 150, 100); + $black = imagecolorallocate( $image2 , 0 , 0 , 0 ); + imagefilledellipse($image2, $valX, $valY, 10, 10, $black); +} + + + +?> \ No newline at end of file diff --git a/polynomial/uniwersalplot.php b/polynomial/uniwersalplot.php new file mode 100644 index 0000000..363af84 --- /dev/null +++ b/polynomial/uniwersalplot.php @@ -0,0 +1,102 @@ +<?php +require_once('./polynomial/XY_Plot.php' ); + +function plotRenderData( $data, $color ) +{ + global $plot; + + $plot->resetData(); + foreach ( $data as $point ) + $plot->addData( $point[ 0 ], $point[ 1 ] ); + + $plot->setColor( $color ); + + $plot->autoScaleX_MinMax( 0 ); + $plot->autoScaleY_MinMax( 1 ); +} +function textCallback( $Value ) +{ + return number_format( $Value, 1 ); +} +function plotAddScale() +{ + global $plot; + global $X_MajorScale; + global $X_MinorScale; + global $Y_MajorScale; + global $Y_MinorScale; + global $colorMap; + + // Setup and draw minor horizontal scale (right to left). + $plot->SetX_MinorDivisionScale( $X_MinorScale ); + $plot->SetX_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawX_MinorDivisions(); + + // Setup and draw minor vertical scale (top to bottom). + $plot->SetY_MinorDivisionScale( $Y_MinorScale ); + $plot->SetY_MinorDivisionColor( $colorMap[ "Gray90" ] ); + $plot->DrawY_MinorDivisions(); + + //---------------------------------- + // Setup and draw major horizontal scale (right to left). + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetX_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetX_MajorDivisionScale( $X_MajorScale ); + + // Division lines are blue. + $plot->SetX_MajorDivisionColor( $colorMap[ "Gray80" ] ); + + // Text labels are dark gray. + $plot->SetX_MajorDivisionTextColor( $colorMap[ "Black" ] ); + $plot->SetX_MajorTextCallback( "textCallback" ); + + // Draw it. + $plot->DrawX_MajorDivisions(); + + //---------------------------------- + // Setup and draw major vertical scale (top to bottom) + //---------------------------------- + + // Extend lines 5 pixels past margins for label. + $plot->SetY_MajorDivisionExtention( 5 ); + + // Scale. + $plot->SetY_MajorDivisionScale( $Y_MajorScale ); + + // Divisions in dark gray. + $plot->SetY_MajorDivisionColor( $colorMap[ "Gray80" ] ); + $plot->SetY_MajorTextCallback( "textCallback" ); + + // Lables in dark gray. + $plot->SetY_MajorDivisionTextColor( $colorMap[ "Black" ] ); + + // Draw it. + $plot->DrawY_MajorDivisions(); +} +function plotRenderRegression( $regression, $coefficients, $min, $max, $color ) +{ + global $plot; + global $imageWidth; + global $leftMargin; + global $rightMargin; + + $plot->resetData(); + + $frameWidth = $imageWidth - $leftMargin - $rightMargin; + for ( $xIndex = 0; $xIndex < $frameWidth; ++$xIndex ) + { + $x = $xIndex * ( $max - $min ) / $frameWidth + $min; + $y = $regression->interpolate( $coefficients, $x ); + $plot->addData( $x, $y ); + } + + $plot->setColor( $color ); + $plot->renderWithLines(); + +} + +?> \ No newline at end of file diff --git a/pop_selects.php b/pop_selects.php new file mode 100644 index 0000000..d56e1da --- /dev/null +++ b/pop_selects.php @@ -0,0 +1,150 @@ +<?php session_start();?> +<?php +require_once'func.php'; +require_once("dbaccess.php"); +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +$id=null; +?> + +<?php if (isset($_POST['site_810A_2_well_array_id']) && $_POST['site_810A_2_well_array_id']!=""): ?> + + <?php + $id = $_POST['site_810A_2_well_array_id']; + $devID = $_SESSION['site810_well_array'][$id]['devID']; + $bariera = $_SESSION['site810_well_array'][$id]['bariera']; + $pumpName = $_SESSION['site810_well_array'][$id]['pumpName']; + $pumpSN = $_SESSION['site810_well_array'][$id]['pumpSN']; + $engName = $_SESSION['site810_well_array'][$id]['engName']; + $engSN = $_SESSION['site810_well_array'][$id]['engSN']; + //$ls = getLastValueFromDevResourceDetail("WELL_TECHNICAL_PARAMETERS","LS",$devID); + $ls = getGlebokoscAct($devID); + $dst = getLastValueFromDevResourceDetail("WELL_TECHNICAL_PARAMETERS","DST",$devID); + $dr = getLastValueFromDevResourceDetail("WELL_PARAMETERS","DR",$devID); + $lz = getLastValueFromDevResourceDetail("WELL_TECHNICAL_PARAMETERS","LZ",$devID); + $lp = getLastValueFromDevResourceDetail("WELL_PARAMETERS","LPM",$devID); + + if ($_SESSION['site810A_inOrderScope']==801 || $_SESSION['site810A_inOrderScope']==802) + { + $wynik = mysql_query("select SUBSTRING_INDEX(EQU_NAME, ' ', -1) EQU_NAME,DRS_SN_NUMBER,SDE_DRS_EQU_ID from seg_dev_equipments_rel INNER join seg_dev_resources on DRS_ID=SDE_DRS_EQU_ID left join seg_equipments on EQU_ID=DRS_DEV_ID where UPPER(EQU_NAME) like UPPER('%SGP%') and SDE_DRS_DEV_ID=".$devID); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sndId = $r["SDE_DRS_EQU_ID"]; + $sndName = $r["EQU_NAME"]; + $sndSN = $r["DRS_SN_NUMBER"]; + $sndDlKb = getLastValueFromDevResourceDetail("DEV_RESOURCES_DETAIL","SG_P_21_WIRE",$sndId); + + } + } + + if ($_SESSION['site810A_inOrderScope']==805 || $_SESSION['site810A_inOrderScope']==808) + { + $wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_ID=(select MAX(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$devID.")"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $zsV = $r["DRD_VALUE"]; + $zsT = $r["DRD_AUDIT_DATE"]; + } + } + + if ($_SESSION['site810A_inOrderScope']==804) + $rzT = sqlStringValue("select OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_NAME='".$_SESSION['site810_well_array'][$id]['wellName']."' limit 1","OHC_RZEDNA_TERENU_ACT"); + + + // + + ?> + + <script> + + $(document).ready(function(){ + // your code here + $('#inBariera').val('<?php echo $bariera;?>'); + $('#inPump').val('<?php echo $pumpName;?>'); + $('#inPumpSn').val('<?php echo $pumpSN;?>'); + $('#inEng').val('<?php echo $engName;?>'); + $('#inEngSn').val('<?php echo $engSN;?>'); + $('#devid').val('<?php echo $devID;?>'); + $('#inLS').val('<?php echo getFloatValue($ls,2);?>'); + + $('#inRzdna').val('<?php echo getFloatValue($rzT,2);?>'); + + + $('#inDST').val('<?php echo getFloatValue($dst,2);?>'); + $('#inKT').val('<?php echo getFloatValue($dr,2);?>'); + $('#inLZ').val('<?php echo getFloatValue($lz,2);?>'); + $('#inLP').val('<?php echo getFloatValue($lp,2);?>'); + $('#inIlCln').val('<?php echo getFloatValue($ls-$lz,2);?>'); + + $('#inZwr').val('<?php echo str_replace('.',',',$zsV);?>'); + $('#inZwrDate').val('<?php echo substr($zsT,0,10);?>'); + + + $('#inSndHyd').val('<?php echo $sndName;?>'); + $('#inSndHydSN').val('<?php echo $sndSN;?>'); + $('#inSndHydDlKb').val('<?php echo getFloatValue($sndDlKb,2);?>'); + + $('#inNewLPid').val('<?php echo getFloatValue($lp,2);?>'); + $('#inNewKTid').val('<?php echo getFloatValue($dr,2);?>'); + $('#inSndHydid').val('<?php echo $sndName;?>'); + $('#inSndHydSNid').val('<?php echo $sndSN;?>'); + $('#inSndHydDlKbid').val('<?php echo getFloatValue($sndDlKb,2);?>'); + + + }); + </script> + +<?php endif; ?> + + + +<?php if (isset($_POST['site_810A_2_piezo_array_id']) && $_POST['site_810A_2_piezo_array_id']!=""): ?> + <?php + $id = $_POST['site_810A_2_piezo_array_id']; + $bariera = $_SESSION['site810_piezo_array'][$id]['bariera']; + //$glebokosc = $_SESSION['site810_piezo_array'][$id]['glebokosc']; + $glebokosc = getGlebokoscAct($_SESSION['site810_piezo_array'][$id]['devID']); + $srednica = $_SESSION['site810_piezo_array'][$id]['srednica']; + + if ($_SESSION['site810A_inOrderScope']==835) + { + $wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_ID=(select MAX(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$_SESSION['site810_piezo_array'][$id]['devID'].")"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $zsV = $r["DRD_VALUE"]; + $zsT = $r["DRD_AUDIT_DATE"]; + } + } + + if ($_SESSION['site810A_inOrderScope']==831) + $rzT = sqlStringValue("select OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_NAME='".$_SESSION['site810_piezo_array'][$id]['piezoName']."' limit 1","OHC_RZEDNA_TERENU_ACT"); + + + ?> + <script> + $(document).ready(function(){ + // your code here + $('#inBariera').val('<?php echo $bariera;?>'); + $('#inLS').val('<?php echo getFloatValue($glebokosc,2);?>'); + $('#inDST').val('<?php echo getFloatValue($srednica,2);?>'); + + $('#inRzdna').val('<?php echo getFloatValue($rzT,2);?>'); + + $('#inZwr').val('<?php echo str_replace('.',',',$zsV);?>'); + $('#inZwrDate').val('<?php echo getFloatValue($zsT,0,10);?>'); + + }); + </script> + + +<?php endif; ?> + + + + + +<?php +mysql_close($con); +?> \ No newline at end of file diff --git a/przelicz_moce_20.php b/przelicz_moce_20.php new file mode 100644 index 0000000..aa059bf --- /dev/null +++ b/przelicz_moce_20.php @@ -0,0 +1,110 @@ +<head> + <meta http-equiv="Refresh" content="1" /> +</head> + +<?php +require_once('./func.php'); +require_once('./dbaccess.php'); +require_once('./polynomial/math.php'); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + + + +function getPolyHp($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['h']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} +function getPolyPe($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['p']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} + + + +unset($wellArray); +$wellArray = sqlGetResAsArray("select * from a_power_data_everyday_20 where STAT is null limit 100"); +for ($i=0; $i<count($wellArray); $i++) +{ + unset($wellExch); + $wellExch = sqlGetResAsArray("select * from seg_wells_exchanged where WLE_WLL_ID=".$wellArray[$i]['WLL_ID']." and WLE_NR_EXCHANGE=(select max(WLE_NR_EXCHANGE) from seg_wells_exchanged where WLE_WLL_ID=".$wellArray[$i]['WLL_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."')"); + + unset($testIDArray); + if (strlen($wellExch[0]['WLE_PUMP_NO'])>0 && strlen($wellExch[0]['WLE_ENG_NO'])>0) + { + $testIDArray = sqlGetResAsArray("select max(TST_ID) TST_ID from tst_tests where TST_PUP_SN_NO='".$wellExch[0]['WLE_PUMP_NO']."' and TST_ENG_SN_NO='".$wellExch[0]['WLE_ENG_NO']."' and TST_AUDIT_CD<='".$wellExch[0]['WLE_DATE_FROM']."'"); + } + + + unset($probaArray); + unset($mocSP); + + if ($testIDArray[0]['TST_ID']>0) + { + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$testIDArray[0]['TST_ID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $probaArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"] + ); + } + + $mocSP = (float) getPolyPe($probaArray,$wellArray[$i]['RHD_Q_VAL']); + + // + if ($mocSP>0) + { + mysql_query("UPDATE rep_his_data_everyday SET RHD_PE_VAL='".$mocSP."' WHERE RHD_ID=".$wellArray[$i]['ID']); + echo("UPDATE rep_his_data_everyday SET RHD_PE_VAL='".$mocSP."' WHERE RHD_ID=".$wellArray[$i]['ID']); + echo'<br>'; + } + + } + + + mysql_query("UPDATE a_power_data_everyday_20 SET STAT='1' WHERE ID=".$wellArray[$i]['ID']); + echo("UPDATE a_power_data_everyday_20 SET STAT='1' WHERE ID=".$wellArray[$i]['ID']); + echo'<br>'; + echo'<br>'; + +} + + + + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; + +mysql_close($polacz); diff --git a/przelicz_moce_his.php b/przelicz_moce_his.php new file mode 100644 index 0000000..57c77b4 --- /dev/null +++ b/przelicz_moce_his.php @@ -0,0 +1,128 @@ +<head> + <meta http-equiv="Refresh" content="1" /> +</head> + +<?php +require_once('./func.php'); +require_once('./dbaccess.php'); +require_once('./polynomial/math.php'); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + + + +function getPolyHp($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['h']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} +function getPolyPe($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['p']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} + + + +$tableName = 'softspm_his.rep_his_data_everyday_2014_q1'; + + +unset($wellArray); +$wellArray = sqlGetResAsArray("select * from ".$tableName." where RHD_Q_VAL>0 and (RHD_PE_VAL<0 or RHD_PE_VAL is null) limit 200"); + +for ($i=0; $i<count($wellArray); $i++) +{ + unset($wellInfoDet); + $wellInfoDet = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + + + echo'Studnia: '.$wellInfoDet[0]['WLL_NAME'].', id='.$wellInfoDet[0]['WLL_ID'].'<br/>'; + + + unset($wellExch); + $wellExch = sqlGetResAsArray("select * from seg_wells_exchanged where WLE_WLL_ID=".$wellInfoDet[0]['WLL_ID']." and WLE_NR_EXCHANGE=(select max(WLE_NR_EXCHANGE) from seg_wells_exchanged where WLE_WLL_ID=".$wellInfoDet[0]['WLL_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."')"); + + unset($testIDArray); + if (strlen($wellExch[0]['WLE_PUMP_NO'])>0 && strlen($wellExch[0]['WLE_ENG_NO'])>0) + { + $testIDArray = sqlGetResAsArray("select max(TST_ID) TST_ID from tst_tests where TST_PUP_SN_NO='".$wellExch[0]['WLE_PUMP_NO']."' and TST_ENG_SN_NO='".$wellExch[0]['WLE_ENG_NO']."' and TST_AUDIT_CD<='".$wellExch[0]['WLE_DATE_FROM']."'"); + } + + + unset($probaArray); + unset($mocSP); + + if ($testIDArray[0]['TST_ID']>0) + { + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$testIDArray[0]['TST_ID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $probaArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"] + ); + } + + $mocSP = (float) getPolyPe($probaArray,$wellArray[$i]['RHD_Q_VAL']); + + // + if ($mocSP>0) + { + mysql_query("UPDATE ".$tableName." SET RHD_PE_VAL='".$mocSP."' WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE ".$tableName." SET RHD_PE_VAL='".$mocSP."' WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo'<br>'; + } + + } + else { + unset($engArray); + $engArray = sqlGetResAsArray("select * from seg_engines where ENG_NAME='".$wellExch[0]['WLE_ENG_NAME']."'"); + + if ($engArray[0]['ENG_POWER']>0) + { + mysql_query("UPDATE ".$tableName." SET RHD_PE_VAL='".$engArray[0]['ENG_POWER']."' WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE ".$tableName." SET RHD_PE_VAL='".$engArray[0]['ENG_POWER']."' WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo'<br>'; + } + + } + + +} + + + + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; + +mysql_close($polacz); diff --git a/pumps_xy_formula.php b/pumps_xy_formula.php new file mode 100644 index 0000000..9860169 --- /dev/null +++ b/pumps_xy_formula.php @@ -0,0 +1,152 @@ +<?php +// Load the polynomial regression class. +require_once('./polynomial/PolynomialRegression.php' ); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + +mysql_query("truncate table seg_pumps_xy_formula"); +$wynik = mysql_query("select distinct PEP_PUP_ID from seg_pump_eng_param order by PEP_PUP_ID"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $pupID[] = $r["PEP_PUP_ID"]; +} + +foreach ( $pupID as $value ) +{ +// dla H +$i=0; $j=0; +$wynik = mysql_query("select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$value." order by PEP_X_PARAM"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; +} +$data = $newParam; +bcscale( 10 ); +$polynomialRegression = new PolynomialRegression( 4 ); +foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); +$coefficients = $polynomialRegression->getCoefficients(); +$functionText = ""; +foreach ( $coefficients as $power => $coefficient ) +{ + if ( $power > 0 ) + $functionText .= "#+"; + + $functionText .= round( $coefficient, 20 ); + + if ( $power > 0 ) + { + $functionText .= "x"; + if ( $power > 1 ) + $functionText .= "^" . $power; + } +} + + $functionText = str_replace('+-', '-', $functionText); + $fx_parameters= $functionText; + + $functionText = str_replace('#', '', $functionText); + + $d = strtok($fx_parameters, '#'); + $c = strtok('#'); + $b = strtok('#'); + $a = strtok('#'); + + $a = str_replace('x^3','',$a); $a = str_replace('+','',$a); + $b = str_replace('x^2','',$b); $b = str_replace('+','',$b); + $c = str_replace('x','',$c); $c = str_replace('+','',$c); + $d = str_replace('+','',$d); + + mysql_query("INSERT INTO seg_pumps_xy_formula SET PUF_PUP_ID=$value,PUF_XY_FORMULA='y = $functionText',PUF_A='$a',PUF_B='$b',PUF_C='$c',PUF_D='$d',PUF_TYPE='H'"); + +// Place text +unset($data); +unset($newParam); +unset($dataPoint); +unset($power); +unset($coefficients); +unset($functionText); +unset($fx_parameters); +unset($polynomialRegression); + + + +// dla ETA + $i=0; $j=0; + $wynik = mysql_query("select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$value." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + $data = $newParam; + bcscale( 10 ); + + // Symulacja żeby sprawność wykreślała parabole x^2 +// $polynomialRegression = new PolynomialRegression( 3 ); + $polynomialRegression = new PolynomialRegression( 4 ); + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + $coefficients = $polynomialRegression->getCoefficients(); + $functionText = ""; + foreach ( $coefficients as $power => $coefficient ) + { + if ( $power > 0 ) + $functionText .= "#+"; + + $functionText .= round( $coefficient, 20 ); + + if ( $power > 0 ) + { + $functionText .= "x"; + if ( $power > 1 ) + $functionText .= "^" . $power; + } + } + + $functionText = str_replace('+-', '-', $functionText); + $fx_parameters= $functionText; + + $functionText = str_replace('#', '', $functionText); + + $d = strtok($fx_parameters, '#'); + $c = strtok('#'); + $b = strtok('#'); + $a = strtok('#'); + + $a = str_replace('x^3','',$a); $a = str_replace('+','',$a); + $b = str_replace('x^2','',$b); $b = str_replace('+','',$b); + $c = str_replace('x','',$c); $c = str_replace('+','',$c); + $d = str_replace('+','',$d); + + mysql_query("INSERT INTO seg_pumps_xy_formula SET PUF_PUP_ID=$value,PUF_XY_FORMULA='y = $functionText',PUF_A='$a',PUF_B='$b',PUF_C='$c',PUF_D='$d',PUF_TYPE='ETA'"); + + +// Place text + unset($data); + unset($newParam); + unset($dataPoint); + unset($power); + unset($coefficients); + unset($functionText); + unset($fx_parameters); + unset($polynomialRegression); +} + +echo"Funkcje dla poszczególnych pomp przeliczone, dane zaczytane do tabeli <b>seg_pumps_xy_formula</b> <br/>"; +mysql_close($polacz); + +?> \ No newline at end of file diff --git a/repair_20210313_data.php b/repair_20210313_data.php new file mode 100644 index 0000000..0ce9c81 --- /dev/null +++ b/repair_20210313_data.php @@ -0,0 +1,172 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> + +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + +//mysql_query("TRUNCATE table a_getpumpswitchhistory_ins"); + +unset($recArray); +$recArray = sqlGetResAsArray("select * from rep_onoff_proccessing where W_STATUS=0 limit 1"); + + + +unset($wellArray); +unset($devID); $devID=0; + + + +$recArray[0]['W_NAME'] = 'A1'; + +//unset($lasArrayOnOff); +//$lasArrayOnOff = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=27229 and DRD_AUDIT_USR='SYNDIS')"); + +echo'<br/><br/>'; + +$getCurMonth = (int) date('m'); + +if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; +else + $offset = 60 * 60; + +echo $offset; +echo'<br/><br/>'; + +$utcDate = date('Y-m-d\TH:i:s\Z', strtotime('2021-03-12T01:56:19Z')- $offset); +echo $utcDate; + +echo'<br/><br/>'; + + + +if (!empty($recArray[0]['W_NAME'])) +{ +// $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($_GET['w'],date('Y-m').'-01T00:00:00Z')); + $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($recArray[0]['W_NAME'],$utcDate)); + + print_r($wellArray); + +/* + $devID = sqlStringValue("select DRS_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID in (18,19) and WLL_NAME='".$recArray[0]['W_NAME']."'", "DRS_ID"); + + if (count($wellArray['probes'])>0 && $devID>0) + { + //mysql_query("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + //mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + echo("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + echo'<br>'; + echo("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + echo'<br>'; + + + for ($i=0; $i<count($wellArray['probes']); $i++) + { + echo"Pomiar[".$i."] dla stuID=".$devID."<br/>"; + echo $wellArray['probes'][$i]['value']." ".$wellArray['probes'][$i]['date']." ".$wellArray['probes'][$i]['flag']." ".$wellArray['probes'][$i]['reason']."<br/>"; + echo"<br/>"; + + // jeśli załącz + if ($wellArray['probes'][$i]['value'] == 1) + { + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo'<br>'; + + } + + // jeśli wyłącz + if ($wellArray['probes'][$i]['value'] == 0) + { + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo'<br>'; + + } + + } + + echo'<br>'; + echo'<br>'; + + + + } + +*/ +} + +//mysql_query("UPDATE rep_onoff_proccessing SET W_STATUS=1 WHERE W_ID=".$recArray[0]['W_ID']); + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/reports/ajax_gen_reports.php b/reports/ajax_gen_reports.php new file mode 100644 index 0000000..9d69797 --- /dev/null +++ b/reports/ajax_gen_reports.php @@ -0,0 +1,3785 @@ +<?php session_start();?> +<?php +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' ',':'), array('','',''), $inDate); + return $out; +} + +function quarter($dateIn, $tbName) +{ + unset($outParam); unset($fix); + + if (substr($dateIn, 0,4)!=date('Y')) + { + // jeśli data jest sprzed 2014 roku + if (substr($dateIn, 0,4)<2014) + $dateIn = str_replace(substr($dateIn, 0,4), 2014, $dateIn); + + if (substr($dateIn, 5,2)=='01' || substr($dateIn, 5,2)=='02' || substr($dateIn, 5,2)=='03') $fix='q1'; + elseif (substr($dateIn, 5,2)=='04' || substr($dateIn, 5,2)=='05' || substr($dateIn, 5,2)=='06') $fix='q2'; + elseif (substr($dateIn, 5,2)=='07' || substr($dateIn, 5,2)=='08' || substr($dateIn, 5,2)=='09') $fix='q3'; + elseif (substr($dateIn, 5,2)=='10' || substr($dateIn, 5,2)=='11' || substr($dateIn, 5,2)=='12') $fix='q4'; + + $outParam = "softspm_his.".$tbName."_".substr($dateIn, 0,4)."_".$fix; + } + else + $outParam = $tbName; + + return $outParam; +} + + + + +?> + +<?php +// Raport nr 2 +// ================================================================================================================================== +if ($_POST['post_action']=='rep002' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_dt_from']) && !empty($_POST['post_dt_to'])) +{ + $hst0startDate = $_POST['post_dt_from'].' 00:00:00'; + $maxDate = sqlStringValue("select CONCAT(max(AVG_DATE),' 23:59:59') AVG_DATE from softspm_rep.rep_002_avg_efficiency", "AVG_DATE"); + + + + if (cdt($_POST['post_dt_to'])>=cdt($maxDate)) + $dateTo = $maxDate; + else + $dateTo = $_POST['post_dt_to']; + + echo' + <h3>Okres rozliczeniowy od: <i style="color: #B22222;">'.$_POST['post_dt_from'].'</i> do: <i style="color: #B22222;">'.$dateTo.'</i></h3> + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Agregat pompowy <br/> [pompa / silnik]</th> + <th>Moc silnika <br/> [kW]</th> + <th>Czas pracy <br/> [godz:min]</th> + <th>Ilość wypompowanej wody <br/> [m<sup>3</sup>]</th> + <th>Wydajność średnia <br/> [m<sup>3</sup>/min]</th> + <th>Zwierciadło statyczne <br/> [m]</th> + <th>Zwierciadło dynamiczne <br/> [m]</th> + <th>Temperatura wody <br/> [<sup>o</sup>C]</th> + <th>Stężenie chlorków</th> + <th>Kategoria</th> + </tr> + </thead> + '; + + unset($rep002Array); + $rep002Array = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,DRS_DEPARTMENT from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_dt_from']."') and WLE_DATE_FROM<='".$dateTo."' and DRS_DEPARTMENT='".$_POST['dep']."' order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + //$rep002Array = sqlGetResAsArray("select * from seg_dev_resources,seg_wells left join seg_wells_exchanged on WLL_ID=WLE_WLL_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_POST['dep']."' and WLE_DATE_FROM<='".$dateTo."' and (WLE_DATE_TO>='".$_POST['post_dt_from']."' or WLE_DATE_TO is null) group by WLL_BARIERA,WLL_NAME order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + + unset($isTransmisionArray); + $isTransmisionArray[]=0; + $wynik = mysql_query("select SQD_DRS_ID from softspm_rep.syndis_quality_data where SQD_FLG_Q<>'CORRECT'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $isTransmisionArray[]=$r["SQD_DRS_ID"]; + } + + unset($res); + unset($_SESSION['rap002_array']); + + $bariera = ""; + $licznik_bariera=0; + $bariera_woda=0; + $calosc_woda=0; + unset($isTransmisionBreak); $isTransmisionBreak=false; + + + for($i=0;$i<count($rep002Array);$i++) + { + + if ($bariera!=$rep002Array[$i]['WLL_BARIERA']) + { + if ($licznik_bariera>0) + { + echo"<tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='5'>Razem bariera: ".$bariera."</td> + <td style='font-weight: bolder;'>".round(getFloatValue($bariera_woda),0)."</td> + <td colspan='6'></td> + </tr>"; + echo"<tr><td colspan='12'></td></tr>"; + $bariera_woda=0; + } + + echo"<tr style='font-weight: bolder; background-color: #F4F4F4;'><td colspan='14'>Bariera: ".$rep002Array[$i]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep002Array[$i]['WLL_BARIERA']; + $licznik_bariera++; + } + + unset($mocSilnika); + $mocSilnika = sqlStringValue("select ENG_POWER from seg_engines,seg_dev_resources where DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 and ENG_NAME='".$rep002Array[$i]['WLE_ENG_NAME']."' and DRS_SN_NUMBER='".$rep002Array[$i]['WLE_ENG_NO']."'", "ENG_POWER"); + + //czas pracy + unset($minTime);unset($maxTime);unset($valTime);unset($finDate); unset($valTime);unset($valHst0);unset($valHd);unset($valTw);unset($valHdTw);unset($valClor); unset($valVm3); unset($minVpup); unset($maxVpup); + + if (strlen($rep002Array[$i]['WLE_DATE_TO'])>8) + $finDate = $rep002Array[$i]['WLE_DATE_TO']; + else $finDate = $dateTo; + + // sprawdza dla zwierciadła statyczniego warunek na daty + unset($hst0Date); + if (cdt($rep002Array[$i]['WLE_DATE_FROM'])>cdt($_POST['post_dt_from'])) + $hst0Date = $rep002Array[$i]['WLE_DATE_FROM']; + else { + $hst0Date = $_POST['post_dt_from']; +//2016-12-02 + $hst0startDate = $_POST['post_dt_from']; + } + + + unset($isTransmisionColor); $isTransmisionColor=""; + if (array_search($rep002Array[$i]['DRS_ID'],$isTransmisionArray)>0) + { + $isTransmisionColor="style='background-color: #ffff00;'"; + $isTransmisionBreak=true; + } + + if (strlen($rep002Array[$i]['WLE_DATE_TO'])>8) + { + //sprawdza, czy wybudowa nie jest starsza od daty końcowej. + if (cdt($rep002Array[$i]['WLE_DATE_TO'])>=cdt($dateTo)) + $rep002Array[$i]['WLE_DATE_TO'] = $dateTo; + +//2016-12-15 + $newTime=0; + //$newTime=liczenie_czasu_mc($rep002Array[$i]['DRS_ID'], $hst0Date, $rep002Array[$i]['WLE_DATE_TO']); + $newTime=fCzas($rep002Array[$i]['DRS_ID'], $hst0Date, $rep002Array[$i]['WLE_DATE_TO']); + + $newWater=0; + if($newTime>0) + { + //$newWater=sqlStringValue("select AVG(RHD_Q_VAL) RHD_Q_VAL from softspm_rep.".$tbaName." where RHD_Q_VAL>0 and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_DATE>='".$hst0Date."' and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."'", "RHD_Q_VAL"); + //if (empty($newWater) || $newWater<=0) + // $newWater=sqlStringValue("select RHD_Q_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')", "RHD_Q_VAL"); + + $newWater=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep002Array[$i]['DRS_ID']." and AVG_DATE>=SUBSTRING('".$hst0Date."',1,10) and AVG_DATE<=SUBSTRING('".$rep002Array[$i]['WLE_DATE_TO']."',1,10)", "AVG_Q_VAL"); + //$valHd=sqlStringValue("select DMM_HD_VAL from softspm_rep.rep_002_avg_dyn_mirror where DMM_ID=(select max(DMM_ID) from softspm_rep.rep_002_avg_dyn_mirror where DMM_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DMM_DATE>='".$hst0startDate."' and DMM_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')", "DMM_HD_VAL"); + $valHd=sqlStringValue("select DMM_HD_VAL from softspm_rep.rep_002_avg_dyn_mirror where DMM_ID=(select max(DMM_ID) from softspm_rep.rep_002_avg_dyn_mirror where DMM_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DMM_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')", "DMM_HD_VAL"); + $valTw=sqlStringValue("select WTP_WT_VAL from softspm_rep.rep_002_avg_water_temp where WTP_ID=(select max(WTP_ID) from softspm_rep.rep_002_avg_water_temp where WTP_DRS_ID=".$rep002Array[$i]['DRS_ID']." and WTP_DATE>='".$hst0startDate."' and WTP_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')", "WTP_WT_VAL"); + $valClor=sqlStringValue("select CLO_CLO_VAL from softspm_rep.rep_002_avg_chlorine where CLO_ID=(select max(CLO_ID) from softspm_rep.rep_002_avg_chlorine where CLO_DRS_ID=".$rep002Array[$i]['DRS_ID']." and CLO_DATE>='".$hst0startDate."' and CLO_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')", "CLO_CLO_VAL"); + + if ($valHd>0) $valHd = round($valHd,1); + } + + + +// $valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$hst0Date."' and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')"); +//2016-12-02 ($hst0startDate) + //$valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$hst0startDate."' and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')"); + $valHst0=sqlStringValue("select MIR_HST_VAL from softspm_rep.rep_002_avg_mirror where MIR_ID=(select max(MIR_ID) from softspm_rep.rep_002_avg_mirror where MIR_DRS_ID=".$rep002Array[$i]['DRS_ID']." and MIR_DATE>='".$hst0startDate."' and MIR_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')", "MIR_HST_VAL"); + if ($valHst0>0) $valHst0 = round($valHst0,1); + + /* + $valHdTw = sqlGetResAsArray("select RHD_HD_VAL,RHD_WTEMP_VAL from softspm_rep.".$tbaName." where RHD_ID=(select MAX(RHD_ID) from softspm_rep.".$tbaName." where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_HD_VAL>0)"); + + if (empty($valHdTw[0]['RHD_WTEMP_VAL']) || $valHdTw[0]['RHD_WTEMP_VAL']<=0) + { + unset($valTw); + $valTw = sqlGetResAsArray("select RHD_WTEMP_VAL from softspm_rep.".$tbaName." where RHD_ID=(select MAX(RHD_ID) from softspm_rep.".$tbaName." where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_WTEMP_VAL>0)"); + $valHdTw[0]['RHD_WTEMP_VAL'] = $valTw[0]['RHD_WTEMP_VAL']; + } + */ + +// $valClor = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=719 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')"); + + } + else + { + +//2016-12-15 + $newTime=0; + //$newTime=liczenie_czasu_mc($rep002Array[$i]['DRS_ID'], $hst0Date, $dateTo); + $newTime=fCzas($rep002Array[$i]['DRS_ID'], $hst0Date, $dateTo); + + $newWater=0; + if($newTime>0) + { + //$newWater=sqlStringValue("select AVG(RHD_Q_VAL) RHD_Q_VAL from softspm_rep.".$tbaName." where RHD_Q_VAL>0 and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_DATE>='".$hst0Date."' and RHD_DATE<='".$dateTo."'", "RHD_Q_VAL"); + //if (empty($newWater) || $newWater<=0) + // $newWater=sqlStringValue("select RHD_Q_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_DATE<='".$dateTo."')", "RHD_Q_VAL"); + + $newWater=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep002Array[$i]['DRS_ID']." and AVG_DATE>=SUBSTRING('".$hst0Date."',1,10) and AVG_DATE<=SUBSTRING('".$dateTo."',1,10)", "AVG_Q_VAL"); + //$valHd=sqlStringValue("select DMM_HD_VAL from softspm_rep.rep_002_avg_dyn_mirror where DMM_ID=(select max(DMM_ID) from softspm_rep.rep_002_avg_dyn_mirror where DMM_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DMM_DATE>='".$hst0startDate."' and DMM_DATE<='".$dateTo."')", "DMM_HD_VAL"); + $valHd=sqlStringValue("select DMM_HD_VAL from softspm_rep.rep_002_avg_dyn_mirror where DMM_ID=(select max(DMM_ID) from softspm_rep.rep_002_avg_dyn_mirror where DMM_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DMM_DATE<='".$dateTo."')", "DMM_HD_VAL"); + $valTw=sqlStringValue("select WTP_WT_VAL from softspm_rep.rep_002_avg_water_temp where WTP_ID=(select max(WTP_ID) from softspm_rep.rep_002_avg_water_temp where WTP_DRS_ID=".$rep002Array[$i]['DRS_ID']." and WTP_DATE>='".$hst0startDate."' and WTP_DATE<='".$dateTo."')", "WTP_WT_VAL"); + $valClor=sqlStringValue("select CLO_CLO_VAL from softspm_rep.rep_002_avg_chlorine where CLO_ID=(select max(CLO_ID) from softspm_rep.rep_002_avg_chlorine where CLO_DRS_ID=".$rep002Array[$i]['DRS_ID']." and CLO_DATE>='".$hst0startDate."' and CLO_DATE<='".$dateTo."')", "CLO_CLO_VAL"); + + if ($valHd>0) $valHd = round($valHd,1); + } + + +// $valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$hst0Date."' and DRD_AUDIT_DATE<='".$dateTo."')"); +//2016-12-02 ($hst0startDate) + //$valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$hst0startDate."' and DRD_AUDIT_DATE<='".$dateTo."')"); + $valHst0=sqlStringValue("select MIR_HST_VAL from softspm_rep.rep_002_avg_mirror where MIR_ID=(select max(MIR_ID) from softspm_rep.rep_002_avg_mirror where MIR_DRS_ID=".$rep002Array[$i]['DRS_ID']." and MIR_DATE>='".$hst0startDate."' and MIR_DATE<='".$dateTo."')", "MIR_HST_VAL"); + if ($valHst0>0) $valHst0 = round($valHst0,1); + /* + + $valHdTw = sqlGetResAsArray("select RHD_HD_VAL,RHD_WTEMP_VAL from softspm_rep.".$tbaName." where RHD_ID=(select MAX(RHD_ID) from softspm_rep.".$tbaName." where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$dateTo."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_HD_VAL>0)"); + + if (empty($valHdTw[0]['RHD_WTEMP_VAL']) || $valHdTw[0]['RHD_WTEMP_VAL']<=0) + { + unset($valTw); + $valTw = sqlGetResAsArray("select RHD_WTEMP_VAL from softspm_rep.".$tbaName." where RHD_ID=(select MAX(RHD_ID) from softspm_rep.".$tbaName." where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$dateTo."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_WTEMP_VAL>0)"); + $valHdTw[0]['RHD_WTEMP_VAL'] = $valTw[0]['RHD_WTEMP_VAL']; + } + */ + + //$valClor = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=719 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$dateTo."')"); + + } + + //$valTime = (float) round(($maxTime - $minTime)/3600,2); + //$valVm3 = (float) ($maxVpup - $minVpup); + + //unset($qSred); + //if ($valTime>0) + //$qSred = (float) round(($valVm3/$valTime),3); + + unset($qSred); + if ($newTime>0) + { + $valVm3 = (float) round(($newTime/3600)*$newWater,3); + $valVm3 = round($valVm3,0); + } + + + //2021-10-03 + // oblicza różnice 2 dat + $roznica = floor(abs((strtotime($dateTo) - strtotime($hst0Date)))/86400); + + //2022-08-25 + // poprawka na studnie, które kończą/są wybodowywane w ciągu okresy rozliczeniowego + if (strlen($rep002Array[$i]['WLE_DATE_TO'])>8 && (strtotime($dateTo)-strtotime($rep002Array[$i]['WLE_DATE_TO']))>0 ) + $roznica = floor(abs((strtotime($rep002Array[$i]['WLE_DATE_TO']) - strtotime($hst0Date)))/86400); + + $date = strtotime($hst0Date); // your date + + + $newW2021=0; + $newT2021=0; + $newVm3_2021=0; + $newV2021=0; + + $newWater = 0; + + //jeśli jed w zakresie do jednej doby + $newW2021=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep002Array[$i]['DRS_ID']." and AVG_DATE>=SUBSTRING('".$hst0Date."',1,10) and AVG_DATE<=SUBSTRING('".$hst0Date."',1,10)", "AVG_Q_VAL"); + $newT2021=fCzas($rep002Array[$i]['DRS_ID'], $hst0Date, substr($hst0Date, 0,10).' 23:59:59'); + + if( ($newT2021/3600)<=24 ) + { + if ($newT2021>0 && $newW2021<=0) + { + $newW2021=sqlStringValue("select AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_ID=(select max(AVG_ID) from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep002Array[$i]['DRS_ID']." and AVG_DATE<=SUBSTRING('".$hst0Date."',1,10))", "AVG_Q_VAL"); + } + + $newVm3_2021 = (float) round(($newT2021/3600)*$newW2021,3); + } + + + + if ($roznica>0) + { + for($cntD=1; $cntD<=$roznica; $cntD++) + { + $newDate = date('Y-m-d', strtotime("+1 day", $date)); // day after original date + $newW2021=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep002Array[$i]['DRS_ID']." and AVG_DATE>=SUBSTRING('".$newDate."',1,10) and AVG_DATE<=SUBSTRING('".$newDate."',1,10)", "AVG_Q_VAL"); + $newT2021=fCzas($rep002Array[$i]['DRS_ID'], $newDate.' 00:00:00', $newDate.' 23:59:59'); + + // sprawdza, czy aby na pewno nie ma wydajności + if ($newT2021>0 && $newW2021<=0) + { + $newW2021=sqlStringValue("select AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_ID=(select max(AVG_ID) from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep002Array[$i]['DRS_ID']." and AVG_DATE<=SUBSTRING('".$newDate."',1,10))", "AVG_Q_VAL"); + } + + + $newV2021 = (float) round(($newT2021/3600)*$newW2021,3); + $newVm3_2021 += $newV2021; + $date=strtotime($newDate); + + + if (($newT2021/3600)>24) $roznica--; + // 2021-10-31 w przypadku zmiany agregatu sprawdza, czy data wybudowy nie jest mniejsza niż kolejny liczony dzień. + if(strlen($rep002Array[$i]['WLE_DATE_TO'])>8 && cdt($newDate)>=cdt(substr($rep002Array[$i]['WLE_DATE_TO'], 0,10)) ) + { + //echo'<h1>Przerywam i wychodzę! </h1><br/>'; + break; + } + + } + } + + $newVm3_2021 = round($newVm3_2021,0); + + $newWater = $newVm3_2021/($newTime/3600); + + echo" + <tr ".$isTransmisionColor."> + <td>".($i+1).".</td> + <td>".$rep002Array[$i]['WLL_NAME']."</td> + <td>".$rep002Array[$i]['WLE_PUMP_NAME']." / ".$rep002Array[$i]['WLE_ENG_NAME']."</td> + <td>".round(getFloatValue($mocSilnika),1)."</td> + <td>".round($newTime/3600,0)."</td> + <td>".$newVm3_2021."</td> + <td>".round($newWater/60,3)."</td> + <td>".$valHst0."</td> + <td>".$valHd."</td> + <td>".$valTw."</td> + <td>".$valClor."</td> + <td>".setDicName($rep002Array[$i]['WLL_CAT_DIC_ID'])."</td> + + </tr> + "; + + + $res[]=array( + 'id' => $rep002Array[$i]['DRS_ID'], + 'bariera' => $rep002Array[$i]['WLL_BARIERA'], + 'studnia' => $rep002Array[$i]['WLL_NAME'], + 'agregat' => $rep002Array[$i]['WLE_PUMP_NAME']." / ".$rep002Array[$i]['WLE_ENG_NAME'], + 'moc' => round(getFloatValue($mocSilnika),1), + 'czas_pracy' => round($newTime/3600,0), + 'il_wody' => $newVm3_2021, + 'srednia_q' => round($newWater/60,3), + 'hst0' => $valHst0, + 'hd' => $valHd, + 'temp_wody' => $valTw, + 'chlorki' => $valClor, + 'date_from' => $_POST['post_dt_from'], + 'date_to' => $dateTo + ); + + //$bariera_woda+= (float) $valVm3; + //$calosc_woda += (float) $valVm3; + + $bariera_woda+= (float) $newVm3_2021; + $calosc_woda += (float) $newVm3_2021; + + + } + + unset($_SESSION['rap002_array']); + $_SESSION['rap002_array']=$res; + + echo"<tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='5'>Razem bariera: ".$bariera."</td> + <td style='font-weight: bolder;'>".round(getFloatValue($bariera_woda),0)."</td> + <td colspan='6'></td> + </tr>"; + + + echo"<tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='5'>Razem wszystkie studnie:</td> + <td style='font-weight: bolder;'>".round(getFloatValue($calosc_woda),0)."</td> + <td colspan='6'></td> + </tr>"; + + echo'</table>'; +} +// ================================================================================================================================== + +// Raport nr 2 - save to archiwum +// ================================================================================================================================== +if ($_POST['post_action']=='save_rep2' && $_POST['done']=='create') +{ + if (!empty($_SESSION['rap002_array']) && count($_SESSION['rap002_array'])>0) + { + $rapName = date('Ymd_His')."_".$_SESSION['user']."_rap002"; + $genDate = date('Y-m-d H:i:s'); + + for($i=0; $i<count($_SESSION['rap002_array']); $i++) + { + unset($query); + $query = "INSERT INTO softspm_rep.rep_002_history_saved SET + DHS_DRS_ID=".$_SESSION['rap002_array'][$i]['id'].", + DHS_REPORT_NAME='".$rapName."', + DHS_AUDIT_CU='".$_SESSION['user']."', + DHS_AUDIT_CD='".$genDate."', + DHS_AUDIT_DEP='".$_SESSION['syndis_eq_stock']."', + DHS_BARIERA='".$_SESSION['rap002_array'][$i]['bariera']."', + DHS_WELL='".$_SESSION['rap002_array'][$i]['studnia']."', + DHS_AGREGAT='".$_SESSION['rap002_array'][$i]['agregat']."'"; + + if ($_SESSION['rap002_array'][$i]['moc']>0) $query.=",DHS_P_VAL=".$_SESSION['rap002_array'][$i]['moc']; + if ($_SESSION['rap002_array'][$i]['czas_pracy']>0) $query.=",DHS_WORK_TIME_VAL=".$_SESSION['rap002_array'][$i]['czas_pracy']; + if ($_SESSION['rap002_array'][$i]['il_wody']>0) $query.=",DHS_VM3_VAL=".$_SESSION['rap002_array'][$i]['il_wody']; + if ($_SESSION['rap002_array'][$i]['srednia_q']>0) $query.=",DHS_QS_VAL=".$_SESSION['rap002_array'][$i]['srednia_q']; + if ($_SESSION['rap002_array'][$i]['hst0']>0) $query.=",DHS_HST0_VAL=".$_SESSION['rap002_array'][$i]['hst0']; + if ($_SESSION['rap002_array'][$i]['hd']>0) $query.=",DHS_HD_VAL=".$_SESSION['rap002_array'][$i]['hd']; + if ($_SESSION['rap002_array'][$i]['temp_wody']>0) $query.=",DHS_WTEMP_VAL=".$_SESSION['rap002_array'][$i]['temp_wody']; + if ($_SESSION['rap002_array'][$i]['chlorki']>0) $query.=",DHS_CL_VAL=".$_SESSION['rap002_array'][$i]['chlorki']; + + $query.=",DHS_DATE_FROM='".$_SESSION['rap002_array'][$i]['date_from']."',DHS_DATE_TO='".$_SESSION['rap002_array'][$i]['date_to']."'"; + + mysql_query($query); + } + + echo'<script>sweetAlert("Zapisano!", "Wygenerowany raport został zapisany i jest dostępny w archiwum.", "success");</script>'; + } +} +// ================================================================================================================================== + + +// Raport nr 3 +// ================================================================================================================================== +if ($_POST['post_action']=='rep003' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_date'])) +{ + +/* + if (substr($_POST['post_date'],5,2)=='01') $tbaName = "rep_002_data_styc"; + elseif (substr($_POST['post_date'],5,2)=='02') $tbaName = "rep_002_data_luty"; + elseif (substr($_POST['post_date'],5,2)=='03') $tbaName = "rep_002_data_marz"; + elseif (substr($_POST['post_date'],5,2)=='04') $tbaName = "rep_002_data_kwie"; + elseif (substr($_POST['post_date'],5,2)=='05') $tbaName = "rep_002_data_maj"; + elseif (substr($_POST['post_date'],5,2)=='06') $tbaName = "rep_002_data_czer"; + elseif (substr($_POST['post_date'],5,2)=='07') $tbaName = "rep_002_data_lipi"; + elseif (substr($_POST['post_date'],5,2)=='08') $tbaName = "rep_002_data_sier"; + elseif (substr($_POST['post_date'],5,2)=='09') $tbaName = "rep_002_data_wrze"; + elseif (substr($_POST['post_date'],5,2)=='10') $tbaName = "rep_002_data_pazd"; + elseif (substr($_POST['post_date'],5,2)=='11') $tbaName = "rep_002_data_list"; + elseif (substr($_POST['post_date'],5,2)=='12') $tbaName = "rep_002_data_grud"; + else $tbaName = "rep_002_data_lipi"; +*/ + + $tbaName = getTableNameFrom_everyday_his($_POST['post_date']); + + //2018-04-03 + // warunke na nowe agregaty + + + // Przygotowanie danych + // ==================================== ==================================== ==================================== ==================================== + mysql_query("drop temporary table if exists softspm_rep.rap_".session_id()."_1"); + mysql_query("CREATE temporary TABLE softspm_rep.rap_".session_id()."_1 (WLL_ID int(11) DEFAULT NULL,DRS_ID int(11) unsigned NOT NULL DEFAULT '0',WLL_BARIERA varchar(32) DEFAULT NULL,WLL_NAME varchar(255) DEFAULT NULL,WWD_ID int(11) DEFAULT NULL,WWD_PARENT_ID int(11) DEFAULT NULL,WWD_NAME varchar(255) DEFAULT NULL,WLL_CAT_DIC_ID int(11) DEFAULT NULL,Q_H float(9,2) DEFAULT NULL,Q_MIN float(9,3) DEFAULT NULL,DRS_DEPARTMENT varchar(255) DEFAULT NULL,WLL_AUDIT_CD datetime DEFAULT NULL,PRIMARY KEY (DRS_ID)) ENGINE=InnoDB DEFAULT CHARSET=utf8"); + + mysql_query("drop temporary table if exists softspm_rep.rap_".session_id()."_2"); + mysql_query("CREATE temporary TABLE softspm_rep.rap_".session_id()."_2 (WLL_ID int(11) DEFAULT NULL,DRS_ID int(11) unsigned NOT NULL DEFAULT '0',WLL_BARIERA varchar(32) DEFAULT NULL,WLL_NAME varchar(255) DEFAULT NULL,WLL_CAT_DIC_ID int(11) DEFAULT NULL,WI1_ID int(11) DEFAULT NULL,PT1_ID int(11) DEFAULT NULL,WI2_ID int(11) DEFAULT NULL,PT2_ID int(11) DEFAULT NULL,WI3_ID int(11) DEFAULT NULL,PT3_ID int(11) DEFAULT NULL,WI4_ID int(11) DEFAULT NULL,PT4_ID int(11) DEFAULT NULL,WI5_ID int(11) DEFAULT NULL,PT5_ID int(11) DEFAULT NULL,WI6_ID int(11) DEFAULT NULL,PT6_ID int(11) DEFAULT NULL,Q_H float(9,2) DEFAULT NULL,Q_MIN float(9,3) DEFAULT NULL,DRS_DEPARTMENT varchar(255) DEFAULT NULL,WLL_AUDIT_CD datetime DEFAULT NULL,PRIMARY KEY (DRS_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8"); + + unset($rep003Array_01); + //$rep003Array_01 = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_BARIERA,WLL_NAME,WLL_CAT_DIC_ID,WWD_ID,WWD_PARENT_ID,WWD_NAME,DRS_DEPARTMENT from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID left join seg_well_water_drainage on WLD_DRS_ID=DRS_ID left join seg_water_drainage on WLD_WWD_ID=WWD_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' and DRS_DEPARTMENT='".$_POST['dep']."' and getValueInDate(507, DRS_ID, '".$_POST['post_date']."')='ON' order by WLL_BARIERA,WLL_NAME"); + $rep003Array_01 = sqlGetResAsArray("select DRS_ID,(select WLL_ID from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_ID,(select WLL_BARIERA from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_BARIERA,(select WLL_NAME from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_NAME,(select WLL_CAT_DIC_ID from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_CAT_DIC_ID,WWD_ID,WWD_PARENT_ID,WWD_NAME,DRS_DEPARTMENT from seg_dev_resources tb3,seg_well_water_drainage left join seg_water_drainage on WLD_WWD_ID=WWD_ID where WLD_DRS_ID=tb3.DRS_ID and tb3.DRS_DEPARTMENT='".$_POST['dep']."' and getWellStatusOnOff(tb3.DRS_ID, '".$_POST['post_date']."')='ON' order by WWD_PARENT_ID,WLL_BARIERA,WLL_NAME"); + for($i1=0;$i1<count($rep003Array_01);$i1++) + { + // $rep003Array_01[$i1]['WLL_ID'] + unset($rep003Array_02); + $rep003Array_02 = sqlGetResAsArray("select RHD_Q_VAL, round(RHD_Q_VAL/60,3) Q_MIN from ".$tbaName." where RHD_ID=(select max(RHD_ID) from ".$tbaName." where RHD_DRS_ID=".$rep003Array_01[$i1]['DRS_ID']." and RHD_Q_VAL>0 and RHD_DATE<='".$_POST['post_date']."')"); + + if ($rep003Array_02[0]['RHD_Q_VAL']>0) + { + unset($wwd_id); + if ($rep003Array_01[$i1]['WWD_ID']>0 ) $wwd_id = ",WWD_ID=".$rep003Array_01[$i1]['WWD_ID']; + unset($wwd_parent_id); + if ($rep003Array_01[$i1]['WWD_PARENT_ID']>0 ) $wwd_parent_id = ",WWD_PARENT_ID=".$rep003Array_01[$i1]['WWD_PARENT_ID']; + + mysql_query("INSERT INTO softspm_rep.rap_".session_id()."_1 SET WLL_ID=".$rep003Array_01[$i1]['WLL_ID'].",DRS_ID=".$rep003Array_01[$i1]['DRS_ID'].",WLL_BARIERA='".$rep003Array_01[$i1]['WLL_BARIERA']."',WLL_NAME='".$rep003Array_01[$i1]['WLL_NAME']."'".$wwd_id.$wwd_parent_id.",WWD_NAME='".$rep003Array_01[$i1]['WWD_NAME']."',WLL_CAT_DIC_ID=".$rep003Array_01[$i1]['WLL_CAT_DIC_ID'].",Q_H=".$rep003Array_02[0]['RHD_Q_VAL'].",Q_MIN=".$rep003Array_02[0]['Q_MIN'].",DRS_DEPARTMENT='".$_POST['dep']."',WLL_AUDIT_CD=now()"); + } + } + + unset($tbArray); + $tbArray = sqlGetResAsArray("select * from softspm_rep.rap_".session_id()."_1"); + for($i=0; $i<count($tbArray); $i++) + { + unset($tb); + $tb = findTreeLevel($tbArray[$i]['WWD_ID']); + + unset($query); + $query = "INSERT INTO softspm_rep.rap_".session_id()."_2 SET WLL_ID=".$tbArray[$i]['WLL_ID'].",DRS_ID=".$tbArray[$i]['DRS_ID'].",WLL_BARIERA='".$tbArray[$i]['WLL_BARIERA']."',WLL_NAME='".$tbArray[$i]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tbArray[$i]['WLL_CAT_DIC_ID']; + + if ($tb[0]['id']>0) $query .= ",WI1_ID=".$tb[0]['id']; + if ($tb[0]['par']>0) $query .= ",PT1_ID=".$tb[0]['par']; + + if ($tb[1]['id']>0) $query .= ",WI2_ID=".$tb[1]['id']; + if ($tb[1]['par']>0) $query .= ",PT2_ID=".$tb[1]['par']; + + if ($tb[2]['id']>0) $query .= ",WI3_ID=".$tb[2]['id']; + if ($tb[2]['par']>0) $query .= ",PT3_ID=".$tb[2]['par']; + + if ($tb[3]['id']>0) $query .= ",WI4_ID=".$tb[3]['id']; + if ($tb[3]['par']>0) $query .= ",PT4_ID=".$tb[3]['par']; + + if ($tb[4]['id']>0) $query .= ",WI5_ID=".$tb[4]['id']; + if ($tb[4]['par']>0) $query .= ",PT5_ID=".$tb[4]['par']; + + if ($tb[5]['id']>0) $query .= ",WI6_ID=".$tb[5]['id']; + if ($tb[5]['par']>0) $query .= ",PT6_ID=".$tb[5]['par']; + + $query .=",Q_H=".$tbArray[$i]['Q_H'].",Q_MIN=".$tbArray[$i]['Q_MIN'].",DRS_DEPARTMENT='".$tbArray[$i]['DRS_DEPARTMENT']."',WLL_AUDIT_CD=now()"; + + mysql_query($query); + } + // ==================================== ==================================== ==================================== ==================================== + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th style="width: 20%">Zrzut</th> + <th style="width: 30%"></th> + <th>[m<sup>3</sup>/min]</th> + <th>[m<sup>3</sup>/h]</th> + </tr> + </thead> + '; + // dopisuje do tablicy + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'red', + 'col_1' => 'Grupa', + 'col_2' => 'Bariera', + 'col_3' => 'Studnia', + 'col_4' => '', + 'col_5' => '', + 'col_6' => 'Zrzut [m3/min]', + 'col_7' => 'Zrzut [m3/h]' + ); + // ===================================================== + + + // System + // ========================================================== *** ========================================================== // + echo" + <tr style='font-weight: bolder; background-color: #FF0000; color: #ffffff;'> + <td></td> + <td style='width: 15%;'>SYSTEM</td> + <td></td> + <td></td> + </tr> + "; + // dopisuje do tablicy + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => 'SYSTEM', + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => 'SYSTEM', + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + + + + + $roow=0; $licz_roow=0; $licznik=0; + unset($mainArray01); + $mainArray01 = sqlGetResAsArray("select WI1_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI1_ID=WWD_ID group by WI1_ID"); + for($i01=0; $i01<count($mainArray01); $i01++) + { + echo" + <tr> + <td></td> + <td style='font-weight: bolder; background-color: #B22222; color: #ffffff;'>".$mainArray01[$i01]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #B22222; color: #ffffff;'>".$mainArray01[$i01]['Q_MIN']."</td> + <td style='font-weight: bolder; background-color: #B22222; color: #ffffff;'>".($mainArray01[$i01]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => '', + 'col_2' => '', + 'col_3' => $mainArray01[$i01]['WWD_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $mainArray01[$i01]['Q_MIN'], + 'col_7' => ($mainArray01[$i01]['Q_MIN'] * 60) + ); + // ===================================================== + + + $licz_roow += $mainArray01[$i01]['Q_MIN']; + } + if (count($mainArray01)>0) + { + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$licz_roow."</td> + <td>".($licz_roow * 60)."</td> + + </tr><tr style='height: 30px;'><tr> + "; + // dopisuje do tablicy + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'blue', + 'col_1' => 'Razem grupa:', + 'col_2' => '', + 'col_3' => '', + 'col_4' => '', + 'col_5' => '', + 'col_6' => $licz_roow, + 'col_7' => ($licz_roow * 60) + ); + // ===================================================== + + } + // ========================================================== *** ========================================================== // + // ========================================================== *** ========================================================== // + + + + // poziom 1 + // ========================================================== *** ========================================================== // + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select WI1_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI1_ID=WWD_ID group by WI1_ID"); + for($i=0; $i<count($tmpArray); $i++) + { + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$tmpArray[$i]['WWD_NAME']."</td> + <td>&mdash; &mdash; &mdash; &rang; &nbsp;&nbsp;&nbsp; SYSTEM</td> + <td>".$tmpArray[$i]['Q_MIN']."</td> + <td>".($tmpArray[$i]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy nagłówek + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => $tmpArray[$i]['WWD_NAME'], + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => 'SYSTEM', + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + + $licz_roow=0; + + //Studnie + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from softspm_rep.rap_".session_id()."_2 where WI1_ID=".$tmpArray[$i]['WI1_ID']." and PT1_ID is null and PT2_ID is null order by WI1_ID,WLL_BARIERA,WLL_NAME"); + for($w=0; $w<count($wellArray); $w++) + { + echo" + <tr> + <td>".$wellArray[$w]['WLL_BARIERA']."</td> + <td>".$wellArray[$w]['WLL_NAME']."</td> + <td>".$wellArray[$w]['Q_MIN']."</td> + <td>".($wellArray[$w]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy studnie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI1_ID'], + 'col_2' => $wellArray[$w]['WLL_BARIERA'], + 'col_3' => $wellArray[$w]['WLL_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $wellArray[$w]['Q_MIN'], + 'col_7' => ($wellArray[$w]['Q_MIN'] * 60) + ); + // ===================================================== + + $licz_roow += (float) $wellArray[$w]['Q_MIN']; + } + + // Pompownie + unset($rivArray); + $rivArray = sqlGetResAsArray("select WI2_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI2_ID=WWD_ID where WI1_ID=".$tmpArray[$i]['WI1_ID']." and PT1_ID is null and PT2_ID is not null group by WI2_ID order by WWD_NAME"); + for($r=0; $r<count($rivArray); $r++) + { + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rivArray[$r]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".$rivArray[$r]['Q_MIN']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".($rivArray[$r]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy pompownie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI1_ID'], + 'col_2' => '', + 'col_3' => $rivArray[$r]['WWD_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $rivArray[$r]['Q_MIN'], + 'col_7' => ($rivArray[$r]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $rivArray[$r]['Q_MIN']; + } + + + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$licz_roow."</td> + <td>".($licz_roow * 60)."</td> + </tr><tr style='height: 20px;'><tr> + "; + // dopisuje do tablicy podsumowanie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'blue', + 'col_1' => 'Razem grupa:', + 'col_2' => '', + 'col_3' => '', + 'col_4' => '', + 'col_5' => '', + 'col_6' => $licz_roow, + 'col_7' => ($licz_roow * 60) + ); + // ===================================================== + } + // ========================================================== *** ========================================================== // + // ========================================================== *** ========================================================== // + + + + // poziom 2 + // ========================================================== *** ========================================================== // + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select WI2_ID,sum(Q_MIN) Q_MIN,WWD_NAME,WWD_PARENT_ID from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI2_ID=WWD_ID where PT2_ID is not null group by WI2_ID order by WWD_PARENT_ID,WWD_NAME"); + for($i=0; $i<count($tmpArray); $i++) + { + $parent = sqlStringValue("select WWD_NAME from seg_water_drainage where WWD_ID=".$tmpArray[$i]['WWD_PARENT_ID'], "WWD_NAME"); + + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$tmpArray[$i]['WWD_NAME']."</td> + <td>&mdash; &mdash; &mdash; &rang; &nbsp;&nbsp;&nbsp; ".$parent."</td> + <td>".$tmpArray[$i]['Q_MIN']."</td> + <td>".($tmpArray[$i]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy nagłówek + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => $tmpArray[$i]['WWD_NAME'], + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => $parent, + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + + $licz_roow=0; + + //Studnie + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from softspm_rep.rap_".session_id()."_2 where WI2_ID=".$tmpArray[$i]['WI2_ID']." and PT2_ID is not null and PT3_ID is null order by WI2_ID,WLL_BARIERA,WLL_NAME"); + for($w=0; $w<count($wellArray); $w++) + { + echo" + <tr> + <td>".$wellArray[$w]['WLL_BARIERA']."</td> + <td>".$wellArray[$w]['WLL_NAME']."</td> + <td>".$wellArray[$w]['Q_MIN']."</td> + <td>".($wellArray[$w]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy studnie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI2_ID'], + 'col_2' => $wellArray[$w]['WLL_BARIERA'], + 'col_3' => $wellArray[$w]['WLL_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $wellArray[$w]['Q_MIN'], + 'col_7' => ($wellArray[$w]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $wellArray[$w]['Q_MIN']; + } + + + // Pompownie + unset($rivArray); + $rivArray = sqlGetResAsArray("select WI3_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI3_ID=WWD_ID where WI2_ID=".$tmpArray[$i]['WI2_ID']." and PT3_ID is not null group by WI3_ID order by WWD_NAME"); + for($r=0; $r<count($rivArray); $r++) + { + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rivArray[$r]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".$rivArray[$r]['Q_MIN']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".($rivArray[$r]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy pompownie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI2_ID'], + 'col_2' => '', + 'col_3' => $rivArray[$r]['WWD_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $rivArray[$r]['Q_MIN'], + 'col_7' => ($rivArray[$r]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $rivArray[$r]['Q_MIN']; + } + + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$licz_roow."</td> + <td>".($licz_roow * 60)."</td> + </tr><tr style='height: 20px;'><tr> + "; + // dopisuje do tablicy podsumowanie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'blue', + 'col_1' => 'Razem grupa:', + 'col_2' => '', + 'col_3' => '', + 'col_4' => '', + 'col_5' => '', + 'col_6' => $licz_roow, + 'col_7' => ($licz_roow * 60) + ); + // ===================================================== + } + // ========================================================== *** ========================================================== // + // ========================================================== *** ========================================================== // + + + + // poziom 3 + // ========================================================== *** ========================================================== // + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select WI3_ID,sum(Q_MIN) Q_MIN,WWD_NAME,WWD_PARENT_ID from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI3_ID=WWD_ID where PT3_ID is not null group by WI3_ID order by WWD_PARENT_ID,WWD_NAME"); + for($i=0; $i<count($tmpArray); $i++) + { + $parent = sqlStringValue("select WWD_NAME from seg_water_drainage where WWD_ID=".$tmpArray[$i]['WWD_PARENT_ID'], "WWD_NAME"); + + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$tmpArray[$i]['WWD_NAME']."</td> + <td>&mdash; &mdash; &mdash; &rang; &nbsp;&nbsp;&nbsp; ".$parent."</td> + <td>".$tmpArray[$i]['Q_MIN']."</td> + <td>".($tmpArray[$i]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy nagłówek + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => $tmpArray[$i]['WWD_NAME'], + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => $parent, + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + + $licz_roow=0; + + //Studnie + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from softspm_rep.rap_".session_id()."_2 where WI3_ID=".$tmpArray[$i]['WI3_ID']." and PT3_ID is not null and PT4_ID is null order by WI3_ID,WLL_BARIERA,WLL_NAME"); + for($w=0; $w<count($wellArray); $w++) + { + echo" + <tr> + <td>".$wellArray[$w]['WLL_BARIERA']."</td> + <td>".$wellArray[$w]['WLL_NAME']."</td> + <td>".$wellArray[$w]['Q_MIN']."</td> + <td>".($wellArray[$w]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy studnie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI3_ID'], + 'col_2' => $wellArray[$w]['WLL_BARIERA'], + 'col_3' => $wellArray[$w]['WLL_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $wellArray[$w]['Q_MIN'], + 'col_7' => ($wellArray[$w]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $wellArray[$w]['Q_MIN']; + } + + // Pompownie + unset($rivArray); + $rivArray = sqlGetResAsArray("select WI4_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI4_ID=WWD_ID where WI3_ID=".$tmpArray[$i]['WI3_ID']." and PT4_ID is not null group by WI4_ID order by WWD_NAME"); + for($r=0; $r<count($rivArray); $r++) + { + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rivArray[$r]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".$rivArray[$r]['Q_MIN']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".($rivArray[$r]['Q_MIN']*60)."</td> + </tr> + "; + // dopisuje do tablicy pompownie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI3_ID'], + 'col_2' => '', + 'col_3' => $rivArray[$r]['WWD_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $rivArray[$r]['Q_MIN'], + 'col_7' => ($rivArray[$r]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $rivArray[$r]['Q_MIN']; + } + + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$licz_roow."</td> + <td>".($licz_roow * 60)."</td> + </tr><tr style='height: 20px;'><tr> + "; + // dopisuje do tablicy podsumowanie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'blue', + 'col_1' => 'Razem grupa:', + 'col_2' => '', + 'col_3' => '', + 'col_4' => '', + 'col_5' => '', + 'col_6' => $licz_roow, + 'col_7' => ($licz_roow * 60) + ); + // ===================================================== + } + // ========================================================== *** ========================================================== // + // ========================================================== *** ========================================================== // + + + + // poziom 4 + // ========================================================== *** ========================================================== // + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select WI4_ID,sum(Q_MIN) Q_MIN,WWD_NAME,WWD_PARENT_ID from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI4_ID=WWD_ID where PT4_ID is not null group by WI4_ID order by WWD_PARENT_ID,WWD_NAME"); + for($i=0; $i<count($tmpArray); $i++) + { + $parent = sqlStringValue("select WWD_NAME from seg_water_drainage where WWD_ID=".$tmpArray[$i]['WWD_PARENT_ID'], "WWD_NAME"); + + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$tmpArray[$i]['WWD_NAME']."</td> + <td>&mdash; &mdash; &mdash; &rang; &nbsp;&nbsp;&nbsp; ".$parent."</td> + <td>".$tmpArray[$i]['Q_MIN']."</td> + <td>".($tmpArray[$i]['Q_MIN']*60)."</td> + </tr> + "; + // dopisuje do tablicy nagłówek + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => $tmpArray[$i]['WWD_NAME'], + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => $parent, + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + $licz_roow=0; + + //Studnie + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from softspm_rep.rap_".session_id()."_2 where WI4_ID=".$tmpArray[$i]['WI4_ID']." and PT4_ID is not null and PT5_ID is null order by WI4_ID,WLL_BARIERA,WLL_NAME"); + for($w=0; $w<count($wellArray); $w++) + { + echo" + <tr> + <td>".$wellArray[$w]['WLL_BARIERA']."</td> + <td>".$wellArray[$w]['WLL_NAME']."</td> + <td>".$wellArray[$w]['Q_MIN']."</td> + <td>".($wellArray[$w]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy studnie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI4_ID'], + 'col_2' => $wellArray[$w]['WLL_BARIERA'], + 'col_3' => $wellArray[$w]['WLL_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $wellArray[$w]['Q_MIN'], + 'col_7' => ($wellArray[$w]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $wellArray[$w]['Q_MIN']; + } + + // Pompownie + unset($rivArray); + $rivArray = sqlGetResAsArray("select WI5_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI5_ID=WWD_ID where WI4_ID=".$tmpArray[$i]['WI4_ID']." and PT5_ID is not null group by WI5_ID order by WWD_NAME"); + for($r=0; $r<count($rivArray); $r++) + { + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rivArray[$r]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".$rivArray[$r]['Q_MIN']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".($rivArray[$r]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy pompownie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI4_ID'], + 'col_2' => '', + 'col_3' => $rivArray[$r]['WWD_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $rivArray[$r]['Q_MIN'], + 'col_7' => ($rivArray[$r]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $rivArray[$r]['Q_MIN']; + } + + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$licz_roow."</td> + <td>".($licz_roow*60)."</td> + </tr><tr style='height: 20px;'><tr> + "; + // dopisuje do tablicy podsumowanie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'blue', + 'col_1' => 'Razem grupa:', + 'col_2' => '', + 'col_3' => '', + 'col_4' => '', + 'col_5' => '', + 'col_6' => $licz_roow, + 'col_7' => ($licz_roow * 60) + ); + // ===================================================== + } + // ========================================================== *** ========================================================== // + // ========================================================== *** ========================================================== // + + + + // poziom 5 + // ========================================================== *** ========================================================== // + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select WI5_ID,sum(Q_MIN) Q_MIN,WWD_NAME,WWD_PARENT_ID from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI5_ID=WWD_ID where PT5_ID is not null group by WI5_ID order by WWD_PARENT_ID,WWD_NAME"); + for($i=0; $i<count($tmpArray); $i++) + { + $parent = sqlStringValue("select WWD_NAME from seg_water_drainage where WWD_ID=".$tmpArray[$i]['WWD_PARENT_ID'], "WWD_NAME"); + + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$tmpArray[$i]['WWD_NAME']."</td> + <td>&mdash; &mdash; &mdash; &rang; &nbsp;&nbsp;&nbsp; ".$parent."</td> + <td>".$tmpArray[$i]['Q_MIN']."</td> + <td>".($tmpArray[$i]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy nagłówek + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => $tmpArray[$i]['WWD_NAME'], + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => $parent, + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + $licz_roow=0; + + //Studnie + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from softspm_rep.rap_".session_id()."_2 where WI5_ID=".$tmpArray[$i]['WI5_ID']." and PT5_ID is not null and PT6_ID is null order by WI5_ID,WLL_BARIERA,WLL_NAME"); + for($w=0; $w<count($wellArray); $w++) + { + echo" + <tr> + <td>".$wellArray[$w]['WLL_BARIERA']."</td> + <td>".$wellArray[$w]['WLL_NAME']."</td> + <td>".$wellArray[$w]['Q_MIN']."</td> + <td>".($wellArray[$w]['Q_MIN']*60)."</td> + </tr> + "; + // dopisuje do tablicy studnie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI5_ID'], + 'col_2' => $wellArray[$w]['WLL_BARIERA'], + 'col_3' => $wellArray[$w]['WLL_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $wellArray[$w]['Q_MIN'], + 'col_7' => ($wellArray[$w]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $wellArray[$w]['Q_MIN']; + } + + // Pompownie + unset($rivArray); + $rivArray = sqlGetResAsArray("select WI6_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI6_ID=WWD_ID where WI5_ID=".$tmpArray[$i]['WI5_ID']." and PT6_ID is not null group by WI6_ID order by WWD_NAME"); + for($r=0; $r<count($rivArray); $r++) + { + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rivArray[$r]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".$rivArray[$r]['Q_MIN']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".($rivArray[$r]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy pompownie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI5_ID'], + 'col_2' => '', + 'col_3' => $rivArray[$r]['WWD_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $rivArray[$r]['Q_MIN'], + 'col_7' => ($rivArray[$r]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $rivArray[$r]['Q_MIN']; + } + + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$licz_roow."</td> + <td>".($licz_roow * 60)."</td> + </tr><tr style='height: 20px;'><tr> + "; + // dopisuje do tablicy podsumowanie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'blue', + 'col_1' => 'Razem grupa:', + 'col_2' => '', + 'col_3' => '', + 'col_4' => '', + 'col_5' => '', + 'col_6' => $licz_roow, + 'col_7' => ($licz_roow * 60) + ); + // ===================================================== + } + // ========================================================== *** ========================================================== // + // ========================================================== *** ========================================================== // + + + + // poziom 6 + // ========================================================== *** ========================================================== // + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select WI6_ID,sum(Q_MIN) Q_MIN,WWD_NAME,WWD_PARENT_ID from softspm_rep.rap_".session_id()."_2 left join seg_water_drainage on WI6_ID=WWD_ID where PT6_ID is not null group by WI6_ID order by WWD_PARENT_ID,WWD_NAME"); + for($i=0; $i<count($tmpArray); $i++) + { + $parent = sqlStringValue("select WWD_NAME from seg_water_drainage where WWD_ID=".$tmpArray[$i]['WWD_PARENT_ID'], "WWD_NAME"); + + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$tmpArray[$i]['WWD_NAME']."</td> + <td>&mdash; &mdash; &mdash; &rang; &nbsp;&nbsp;&nbsp; ".$parent."</td> + <td>".$tmpArray[$i]['Q_MIN']."</td> + <td>".($tmpArray[$i]['Q_MIN']*60)."</td> + </tr> + "; + // dopisuje do tablicy nagłówek + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => $tmpArray[$i]['WWD_NAME'], + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => $parent, + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + $licz_roow=0; + + //Studnie + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from softspm_rep.rap_".session_id()."_2 where WI6_ID=".$tmpArray[$i]['WI6_ID']." and PT6_ID is not null order by WI6_ID,WLL_BARIERA,WLL_NAME"); + for($w=0; $w<count($wellArray); $w++) + { + echo" + <tr> + <td>".$wellArray[$w]['WLL_BARIERA']."</td> + <td>".$wellArray[$w]['WLL_NAME']."</td> + <td>".$wellArray[$w]['Q_MIN']."</td> + <td>".($wellArray[$w]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy studnie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => $tmpArray[$i]['WI6_ID'], + 'col_2' => $wellArray[$w]['WLL_BARIERA'], + 'col_3' => $wellArray[$w]['WLL_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $wellArray[$w]['Q_MIN'], + 'col_7' => ($wellArray[$w]['Q_MIN'] * 60) + ); + // ===================================================== + $licz_roow += (float) $wellArray[$w]['Q_MIN']; + } + //Pompowni brak - koniec drzewa + + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$licz_roow."</td> + <td>".($licz_roow * 60)."</td> + </tr><tr style='height: 20px;'><tr> + "; + // dopisuje do tablicy podsumowanie + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'blue', + 'col_1' => 'Razem grupa:', + 'col_2' => '', + 'col_3' => '', + 'col_4' => '', + 'col_5' => '', + 'col_6' => $licz_roow, + 'col_7' => ($licz_roow * 60) + ); + // ===================================================== + + } + // ========================================================== *** ========================================================== // + // ========================================================== *** ========================================================== // + + + echo'</table>'; + + mysql_query("drop temporary table if exists softspm_rep.rap_".session_id()."_1"); + mysql_query("drop temporary table if exists softspm_rep.rap_".session_id()."_2"); +} +// ================================================================================================================================== + + + + + +// Raport nr 4 +// ================================================================================================================================== +if ($_POST['post_action']=='rep004' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_date'])) +{ + $tbaName = getTableNameFrom_everyday_his($_POST['post_date']); + + unset($wellFullArray); + $wellFullArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells left join seg_wells_exchanged on WLL_ID=WLE_WLL_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_POST['dep']."' and WLE_DATE_FROM<='".$_POST['post_date']."' and (WLE_DATE_TO>='".$_POST['post_date']."' or WLE_DATE_TO is null) group by WLL_BARIERA,WLL_NAME order by WLL_BARIERA"); + + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Bariera</th> + <th>Ilość studni z agregatem</th> + <th>Ilość studni wyłączonych</th> + <th>Moc znamionowa [kW]</th> + <th>Moc pobierana [kW]</th> + <th>Wydajność Q [m<sup>3</sup>/min]</th> + </tr> + </thead> + '; + + + + $bariera=$wellFullArray[0]['WLL_BARIERA']; + $licznik=0; $licznik_sum=0; + $ile_pracuje=0; $ile_pracuje_sum=0; + $moc_znamionowa=0; $moc_znamionowa_sum=0; + $moc_pobierana=0; $moc_pobierana_sum=0; + $wydajnosc=0; $wydajnosc_sum = 0; + + unset($wellOff); + unset($res); + + for($i=0; $i<count($wellFullArray); $i++) + { + //echo $wellFullArray[$i]['WLL_BARIERA']; + //echo'<br>'; + if ($bariera!=$wellFullArray[$i]['WLL_BARIERA']) + { + echo" + <tr> + <td>".$bariera."</td> + <td>".$licznik."</td> + <td>".($licznik-$ile_pracuje)."</td> + <td>".$moc_znamionowa."</td> + <td>".$moc_pobierana."</td> + <td>".$wydajnosc."</td> + </tr> + "; + + $res[]=array( + 'bariera' => $bariera, + 'ile' => $licznik, + 'wylaczone' => ($licznik-$ile_pracuje), + 'moc_zn' => $moc_znamionowa, + 'moc_pob' => $moc_pobierana, + 'q' => $wydajnosc + ); + + + $licznik_sum += $licznik; + $ile_pracuje_sum += $licznik-$ile_pracuje; + $moc_znamionowa_sum += $moc_znamionowa; + $moc_pobierana_sum += $moc_pobierana; + $wydajnosc_sum += $wydajnosc; + + $bariera=$wellFullArray[$i]['WLL_BARIERA']; + $licznik=0; + $ile_pracuje=0; + $moc_znamionowa=0; + $moc_pobierana=0; + $wydajnosc=0; + } + + + unset($wellOnOffStatus); + $wellOnOffStatus = sqlGetResAsArray("select * from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$wellFullArray[$i]['DRS_ID']." and WST_DATE<='".$_POST['post_date']."')"); + //echo("select * from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$wellFullArray[$i]['DRS_ID']." and WST_DATE<='".$_POST['post_date']."')"); + //echo'<br>'; + unset($powerEngineArray); + $powerEngineArray = sqlGetResAsArray("select * from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and ENG_NAME='".$wellFullArray[$i]['WLE_ENG_NAME']."' and DRS_SN_NUMBER='".$wellFullArray[$i]['WLE_ENG_NO']."'"); + + $moc_znamionowa += $powerEngineArray[0]['ENG_POWER']; + + // dorobić tablice dla niepracujących + if ($wellOnOffStatus[0]['WST_STATUS_VAL']=='ON') + { + unset($peqValArrays); + $peqValArrays = sqlGetResAsArray("select * from ".$tbaName." where RHD_ID=(select max(RHD_ID) from ".$tbaName." where RHD_DRS_ID=".$wellFullArray[$i]['DRS_ID']." and RHD_DATE<='".$_POST['post_date']."' and RHD_PE_VAL>0 && RHD_Q_VAL>0)"); + if (count($peqValArrays)<=0) + { + unset($peqValArrays); + $peqValArrays = sqlGetResAsArray("select * from ".$tbaName." where RHD_ID=(select max(RHD_ID) from ".$tbaName." where RHD_DRS_ID=".$wellFullArray[$i]['DRS_ID']." and RHD_DATE<='".$_POST['post_date']."' and RHD_Q_VAL>0)"); + } + + $moc_pobierana += $peqValArrays[0]['RHD_PE_VAL']; + $wydajnosc += round($peqValArrays[0]['RHD_Q_VAL']/60,3); + $ile_pracuje++; + } + else + { + $wellOff[] = array( + 'id' => $wellFullArray[$i]['DRS_ID'], + 'bariera' => $wellFullArray[$i]['WLL_BARIERA'], + 'studnia' => $wellFullArray[$i]['WLL_NAME'], + 'pompa' => $wellFullArray[$i]['WLE_PUMP_NAME'], + 'silnik' => $wellFullArray[$i]['WLE_ENG_NAME'], + 'powod' => setDicName($wellOnOffStatus[0]['WST_DESCRIPTION']) + ); + } + + + $licznik++; + + } + + echo" + <tr> + <td>".$bariera."</td> + <td>".$licznik."</td> + <td>".($licznik-$ile_pracuje)."</td> + <td>".$moc_znamionowa."</td> + <td>".$moc_pobierana."</td> + <td>".$wydajnosc."</td> + </tr> + "; + + $res[]=array( + 'bariera' => $bariera, + 'ile' => $licznik, + 'wylaczone' => ($licznik-$ile_pracuje), + 'moc_zn' => $moc_znamionowa, + 'moc_pob' => $moc_pobierana, + 'q' => $wydajnosc + ); + + + $licznik_sum += $licznik; + $ile_pracuje_sum += $licznik-$ile_pracuje; + $moc_znamionowa_sum += $moc_znamionowa; + $moc_pobierana_sum += $moc_pobierana; + $wydajnosc_sum += $wydajnosc; + + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td>Razem</td> + <td>".$licznik_sum."</td> + <td>".$ile_pracuje_sum."</td> + <td>".$moc_znamionowa_sum."</td> + <td>".$moc_pobierana_sum."</td> + <td>".$wydajnosc_sum."</td> + </tr> + "; + echo'</table>'; + + + unset($_SESSION['rap004_array_01']); + $_SESSION['rap004_array_01']=$res; + + unset($res); + + $res[]=array( + 'bariera' => $rep004Array_02[$i1]['WLL_BARIERA'], + 'studnia' => $rep004Array_02[$i1]['WLL_NAME'], + 'pompa' => $rep004Array_02[$i1]['PUP_NAME'], + 'silnik' => $rep004Array_02[$i1]['ENG_NAME'], + 'powod' => setDicName($rep004Array_OffReason[0]['DRD_DESCRIPTION']) + ); + + + + echo' + <br/><br/><br/> + <h4>Wykaz studni wyłączonych z zabudowanymi agregatami</h4> + <table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Bariera</th> + <th>Studnia</th> + <th>Typ pompy</th> + <th>Typ silnika</th> + <th>Powód wyłączenia</th> + </tr> + </thead> + '; + + + + for($i=0; $i<count($wellOff); $i++) + { + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$wellOff[$i]['bariera']."</td> + <td>".$wellOff[$i]['studnia']."</td> + <td>".$wellOff[$i]['pompa']."</td> + <td>".$wellOff[$i]['silnik']."</td> + <td>".$wellOff[$i]['powod']."</td> + </tr> + "; + + $res[]=array( + 'bariera' => $wellOff[$i]['bariera'], + 'studnia' => $wellOff[$i]['studnia'], + 'pompa' => $wellOff[$i]['pompa'], + 'silnik' => $wellOff[$i]['silnik'], + 'powod' => $wellOff[$i]['powod'] + ); + + } + + echo'</table>'; + + unset($_SESSION['rap004_array_02']); + $_SESSION['rap004_array_02']=$res; + + +} +// ================================================================================================================================== + + + + +// Raport nr 5 +// ================================================================================================================================== +if ($_POST['post_action']=='rep005' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_date'])) +{ + $_SESSION['rep005_date'] = $_POST['post_date']; + + unset($res); + $lp=1; + $bariera = ""; + unset($rep005Array_01); + //$rep005Array_01 = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,DRS_DEPARTMENT from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and ((WLE_DATE_FROM<='".$_POST['post_date']." 00:00:00' and WLE_DATE_TO>='".$_POST['post_date']." 23:59:59') or (WLE_DATE_FROM<='".$_SESSION['rep005_date']." 00:00:00' and WLE_DATE_TO is null)) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO "); + //$rep005Array_01 = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=(select DRD_DESCRIPTION from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_DRS_ID=DRS_ID and DRD_RESOURCES_DETAIL=507) limit 1)) POWOD from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' and DRS_DEPARTMENT='".$_POST['dep']."' and (getValueInDate(507, DRS_ID, '".$_POST['post_date']."')='OFF' or getValueInDate(507, DRS_ID, '".$_POST['post_date']."') is null) order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + //$rep005Array_01 = sqlGetResAsArray("select * from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_DEPARTMENT='".$_POST['dep']."' and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' and DRS_ID not in (select WST_DRS_ID from softspm_rep.rep_002_avg_pump_working where WST_ID in (select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DATE<='".$_POST['post_date']."' group by WST_DRS_ID) and WST_STATUS_VAL='ON') order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + $rep005Array_01 = sqlGetResAsArray("select * from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_DEPARTMENT='".$_POST['dep']."' and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th></th> + <th>Studnia</th> + <th>Typ pompy</th> + <th>Numer pompy</th> + <th>Typ silnika</th> + <th>Numer silnika</th> + <th>Postój od</th> + <th>Postój do</th> + <th>Powód wyłączenia</th> + <th>Kategoria</th> + </tr> + </thead> + '; + + + + for ($i=0; $i<count($rep005Array_01); $i++) + { + unset($rep005Array_02); + $rep005Array_02 = sqlGetResAsArray("select WST_STATUS_VAL,WST_DATE from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DATE<='".$_POST['post_date']."' and WST_DRS_ID=".$rep005Array_01[$i]['DRS_ID'].")"); + if ($rep005Array_02[0]['WST_STATUS_VAL'] != 'ON') + { + + if ($bariera!=$rep005Array_01[$i]['WLL_BARIERA']) + { + echo"<tr style='font-weight: bolder; background-color: #F4F4F4;'><td colspan='10'>Bariera: ".$rep005Array_01[$i]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep005Array_01[$i]['WLL_BARIERA']; + } + + // powód wyłączenia + unset($drdID); $drdID=0; unset($rep005Array_OFF); + $drdID = sqlStringValue("select max(DRD_ID) DRD_ID from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and DRD_DRS_ID=".$rep005Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE<='".$_POST['post_date']."'", "DRD_ID"); + if ($drdID>0) + $rep005Array_OFF = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=".$drdID); + else { + $drdID = sqlStringValue("select max(DRD_ID) DRD_ID from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and DRD_DRS_ID=".$rep005Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE<='".$_POST['post_date']."'", "DRD_ID"); + if ($drdID>0) + $rep005Array_OFF = sqlGetResAsArray("select * from seg_dev_resources_det_his where DRD_ID=".$drdID); + } + + // data włączenia (postój do) + unset($drdID); $drdID=0; unset($rep005Array_ON); + $drdID = sqlStringValue("select min(DRD_ID) DRD_ID from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='ON' and DRD_DRS_ID=".$rep005Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$_POST['post_date']."'", "DRD_ID"); + if ($drdID>0) + $rep005Array_ON = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=".$drdID); + else { + $drdID = sqlStringValue("select min(DRD_ID) DRD_ID from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='ON' and DRD_DRS_ID=".$rep005Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$_POST['post_date']."'", "DRD_ID"); + if ($drdID>0) + $rep005Array_ON = sqlGetResAsArray("select * from seg_dev_resources_det_his where DRD_ID=".$drdID); + } + + + echo" + <tr> + <td>".$lp.".</td> + <td>".$rep005Array_01[$i]['WLL_NAME']."</td> + <td>".$rep005Array_01[$i]['WLE_PUMP_NAME']."</td> + <td>".$rep005Array_01[$i]['WLE_PUMP_NO']."</td> + <td>".$rep005Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$rep005Array_01[$i]['WLE_ENG_NO']."</td> + <td>".$rep005Array_02[0]['WST_DATE']."</td> + <td>".$rep005Array_ON[0]['DRD_AUDIT_DATE']."</td> + <td>".setDicName($rep005Array_OFF[0]['DRD_DESCRIPTION'])."</td> + <td>".setDicName($rep005Array_01[$i]['WLL_CAT_DIC_ID'])."</td> + + </tr> + "; + $lp++; + + + $res[]=array( + 'data' => $_SESSION['rep005_date'], + 'bariera' => $rep005Array_01[$i]['WLL_BARIERA'], + 'studnia' => $rep005Array_01[$i]['WLL_NAME'], + 'pompa' => $rep005Array_01[$i]['WLE_PUMP_NAME'], + 'pompa_no' => $rep005Array_01[$i]['WLE_PUMP_NO'], + 'silnik' => $rep005Array_01[$i]['WLE_ENG_NAME'], + 'silnik_no' => $rep005Array_01[$i]['WLE_ENG_NO'], + 'data_od' => $rep005Array_02[0]['WST_DATE'], + 'data_do' => $rep005Array_ON[0]['DRD_AUDIT_DATE'], + 'powod' => setDicName($rep005Array_OFF[0]['DRD_DESCRIPTION']) + ); + + + + + + + } + + + + } + + +/* + for($i1=0;$i1<count($rep005Array_01);$i1++) + { + unset($rep005Array_02); + $rep005Array_02 = sqlGetResAsArray(" + select * from ( + select DRD_VALUE,DRD_AUDIT_DATE,DRD_DESCRIPTION from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." + union + select DRD_VALUE,DRD_AUDIT_DATE,DRD_DESCRIPTION from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." + ) tb1 where DRD_AUDIT_DATE= + ( + select max(DRD_AUDIT_DATE) from ( + select DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." and DRD_AUDIT_DATE<='".$_POST['post_date']."' + union + select DRD_AUDIT_DATE from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." and DRD_AUDIT_DATE<='".$_POST['post_date']."' + ) tb2) + "); + + if ($rep005Array_02[0]['DRD_VALUE']!='ON') + { + + if ($bariera!=$rep005Array_01[$i1]['WLL_BARIERA']) + { + echo"<tr style='font-weight: bolder; background-color: #F4F4F4;'><td colspan='10'>Bariera: ".$rep005Array_01[$i1]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep005Array_01[$i1]['WLL_BARIERA']; + } + + + unset($rep005Array_03); + $rep005Array_03 = sqlGetResAsArray(" + select * from ( + select DRD_VALUE,DRD_AUDIT_DATE,DRD_DESCRIPTION from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." + union + select DRD_VALUE,DRD_AUDIT_DATE,DRD_DESCRIPTION from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." + ) tb1 where DRD_AUDIT_DATE= + ( + select min(DRD_AUDIT_DATE) from ( + select DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='ON' and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." and DRD_AUDIT_DATE>='".$_POST['post_date']."' + union + select DRD_AUDIT_DATE from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='ON' and DRD_DRS_ID=".$rep005Array_01[$i1]['DRS_ID']." and DRD_AUDIT_DATE>='".$_POST['post_date']."' + ) tb2) + "); + + + echo" + <tr> + <td>".$lp.".</td> + <td>".$rep005Array_01[$i1]['WLL_NAME']."</td> + <td>".$rep005Array_01[$i1]['WLE_PUMP_NAME']."</td> + <td>".$rep005Array_01[$i1]['WLE_PUMP_NO']."</td> + <td>".$rep005Array_01[$i1]['WLE_ENG_NAME']."</td> + <td>".$rep005Array_01[$i1]['WLE_ENG_NO']."</td> + <td>".$rep005Array_02[0]['DRD_AUDIT_DATE']."</td> + <td>".$rep005Array_03[0]['DRD_AUDIT_DATE']."</td> + <td>".setDicName($rep005Array_02[0]['DRD_DESCRIPTION'])."</td> + <td>".setDicName($rep005Array_01[$i1]['WLL_CAT_DIC_ID'])."</td> + + </tr> + "; + $lp++; + + + $res[]=array( + 'data' => $_SESSION['rep005_date'], + 'bariera' => $rep005Array_01[$i1]['WLL_BARIERA'], + 'studnia' => $rep005Array_01[$i1]['WLL_NAME'], + 'pompa' => $rep005Array_01[$i1]['WLE_PUMP_NAME'], + 'pompa_no' => $rep005Array_01[$i1]['WLE_PUMP_NO'], + 'silnik' => $rep005Array_01[$i1]['WLE_ENG_NAME'], + 'silnik_no' => $rep005Array_01[$i1]['WLE_ENG_NO'], + 'data_od' => $rep005Array_02[0]['DRD_AUDIT_DATE'], + 'data_do' => $rep005Array_03[0]['DRD_AUDIT_DATE'], + 'powod' => setDicName($rep005Array_02[0]['DRD_DESCRIPTION']) + ); + + + + } + + + + + + } + +*/ + echo'</table>'; + + + unset($_SESSION['rep005_array']); + $_SESSION['rep005_array']=$res; + + // +} +// ================================================================================================================================== + + +// Raport nr 6 +// ================================================================================================================================== +if ($_POST['post_action']=='rep006' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_date']) && !empty($_POST['post_typ'])) +{ + unset($_SESSION['rep006Array']); + unset($rep006Array); + //$rep006Array = sqlGetResAsArray("select SRP_ID,DRS_ID,SRP_BARIERA,SRP_NAME,DRS_RESOURCES_DIC_ID,(select OHC_POZIOM_WODONOS from seg_object_hole_cards where OHC_DRS_ID=DRS_ID limit 1) POZIOM_WOD,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=SRP_MCF_ID limit 1) SPM from seg_reservoirs_piezometers,seg_dev_resources where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID=3 and SRP_SYS_TYPE='".$_POST['post_typ']."' order by SRP_BARIERA,SRP_NAME"); + $rep006Array = sqlGetResAsArray("select * from seg_reservoirs_piezometers,seg_dev_resources left join seg_object_hole_cards on DRS_ID=OHC_DRS_ID where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=SRP_TYPE_DIC_ID and DRS_DEV_TYPE=601 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and SRP_SYS_TYPE='".$_POST['post_typ']."' and OHC_DATA_ODDANIA<='".$_POST['post_date']."' and (OHC_ZDJECIE_EXPL_DATE>='".$_POST['post_date']."' or OHC_ZDJECIE_EXPL_DATE is null) order by SRP_BARIERA,SRP_NAME"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th></th> + <th>Bariera</th> + <th>Nazwa</th> + <th>Gł. rurki [m]</th> + <th>Rzędna aktualna [m npm]</th> + <th>Poziom wodonośny</th> + <th>HST [m]</th> + <th>Data pomiaru</th> + <th>Status</th> + <th>Typ</th> + <th>Kategoria</th> + </tr> + </thead> + '; + + for($i=0; $i<count($rep006Array); $i++) + { + $hisType = sqlGetResAsArray("select * from seg_dev_resources_his where DRS_ID=".$rep006Array[$i]['DRS_ID']." and DRS_AUDIT_DATE=(select max(DRS_AUDIT_DATE) from seg_dev_resources_his where DRS_ID=".$rep006Array[$i]['DRS_ID']." and DRS_AUDIT_DATE<='".$_POST['post_date']." 23:59:59')"); + if ($hisType[0]['DRS_RESOURCES_DIC_ID']>0) $rep006Array[$i]['DRS_RESOURCES_DIC_ID'] = $hisType[0]['DRS_RESOURCES_DIC_ID']; + + + unset($reArray); + $reArray = getHistoricalDataFrom_softspm_his(210,$rep006Array[$i]['DRS_ID'],$_POST['post_date']); + + if (empty($reArray[0]['DRD_VALUE']) || $reArray[0]['DRD_VALUE']<=0) unset($reArray); + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep006Array[$i]['SRP_BARIERA']."</td> + <td>".$rep006Array[$i]['SRP_NAME']."</td> + <td>".getGlebokoscAct($rep006Array[$i]['DRS_ID'])."</td> + <td>".$rep006Array[$i]['OHC_RZEDNA_TERENU_ACT']."</td> + <td>".$rep006Array[$i]['OHC_POZIOM_WODONOS']."</td> + <td>".$reArray[0]['DRD_VALUE']."</td> + <td>".substr($reArray[0]['DRD_AUDIT_DATE'],0,10)."</td> + <td>".setDicName($rep006Array[$i]['DRS_RESOURCES_DIC_ID'])."</td> + <td>".$_POST['post_typ']."</td> + <td>".setDicName($rep006Array[$i]['SRP_MCF_ID'])."</td> + <tr> + "; + + $_SESSION['rep006Array'][] = array( + 'typ' => $_POST['post_typ'], + 'date' => $_POST['post_date'], + 'bariera' => $rep006Array[$i]['SRP_BARIERA'], + 'piezometr' => $rep006Array[$i]['SRP_NAME'], + 'glebokosc' => getGlebokoscAct($rep006Array[$i]['DRS_ID']), + 'rzedna' => $rep006Array[$i]['OHC_RZEDNA_TERENU_ACT'], + 'poziom' => $rep006Array[$i]['OHC_POZIOM_WODONOS'], + 'hst' => $reArray[0]['DRD_VALUE'], + 'data' => substr($reArray[0]['DRD_AUDIT_DATE'],0,10), + 'status' => setDicName($rep006Array[$i]['DRS_RESOURCES_DIC_ID']) + ); + + } + + echo'</table>'; + +} +// ================================================================================================================================== + + + +// Raport nr 7 +// ================================================================================================================================== +if ($_POST['post_action']=='rep007' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_date'])) +{ +/* + if (substr($_POST['post_date'],5,2)=='01') $tbaName = "rep_002_data_styc"; + elseif (substr($_POST['post_date'],5,2)=='02') $tbaName = "rep_002_data_luty"; + elseif (substr($_POST['post_date'],5,2)=='03') $tbaName = "rep_002_data_marz"; + elseif (substr($_POST['post_date'],5,2)=='04') $tbaName = "rep_002_data_kwie"; + elseif (substr($_POST['post_date'],5,2)=='05') $tbaName = "rep_002_data_maj"; + elseif (substr($_POST['post_date'],5,2)=='06') $tbaName = "rep_002_data_czer"; + elseif (substr($_POST['post_date'],5,2)=='07') $tbaName = "rep_002_data_lipi"; + elseif (substr($_POST['post_date'],5,2)=='08') $tbaName = "rep_002_data_sier"; + elseif (substr($_POST['post_date'],5,2)=='09') $tbaName = "rep_002_data_wrze"; + elseif (substr($_POST['post_date'],5,2)=='10') $tbaName = "rep_002_data_pazd"; + elseif (substr($_POST['post_date'],5,2)=='11') $tbaName = "rep_002_data_list"; + elseif (substr($_POST['post_date'],5,2)=='12') $tbaName = "rep_002_data_grud"; + else $tbaName = "rep_002_data_lipi"; +*/ + $tbaName = getTableNameFrom_everyday_his($_POST['post_date']); + + unset($_SESSION['rep007Array']); + unset($rep007_his_Array_01); + $rep007_his_Array_01 = sqlGetResAsArray("select * from seg_dev_resources,seg_wells left join seg_wells_exchanged on WLL_ID=WLE_WLL_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_POST['dep']."' and WLE_DATE_FROM<='".$_POST['post_date']."' and (WLE_DATE_TO>='".$_POST['post_date']."' or WLE_DATE_TO is null) group by WLL_BARIERA,WLL_NAME order by WLL_BARIERA,WLL_NAME"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th></th> + <th>Studnia</th> + <th>Agregat pompowy</th> + <th>Moc Pe [kW]</th> + <th>Czas pracy [h]</th> + <th>Jednostkowe zużycie energii [Wh/m<sup>3</sup>/m]</th> + <th>HST<sub>0</sub> [m]</th> + <th>HD [m]</th> + <th>Wydajność Q [m<sup>3</sup>/min]</th> + <th>Ciśnienie p<sub>1</sub> [m]</th> + <th>Ciśnienie p<sub>2</sub> [m]</th> + <th>Temp. wody [<sup>o</sup>C]</th> + <th>Stężenie chlorków Cl [mg/l]</th> + <th>Kategoria SPM</th> + </tr> + </thead> + '; + + $licznik=1; + $bariera = ""; + for($i=0; $i<count($rep007_his_Array_01); $i++) + { + + unset($wellOnOffStatus); + $wellOnOffStatus = sqlGetResAsArray("select * from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$rep007_his_Array_01[$i]['DRS_ID']." and WST_DATE<='".$_POST['post_date']."')"); + if ($wellOnOffStatus[0]['WST_STATUS_VAL']=='ON') + { + unset($wellParamArray); + $wellParamArray = sqlGetResAsArray("select * from ".$tbaName." where RHD_ID=(select max(RHD_ID) from ".$tbaName." where RHD_DRS_ID=".$rep007_his_Array_01[$i]['DRS_ID']." and RHD_DATE<='".$_POST['post_date']."' and RHD_Q_VAL>0)"); + + unset($hstVal); + $hstVal = sqlGetResAsArray("select MIR_HST_VAL from softspm_rep.rep_002_avg_mirror where MIR_ID=(select max(MIR_ID) from softspm_rep.rep_002_avg_mirror where MIR_DATE<'".$_POST['post_date']."' and MIR_DRS_ID=".$rep007_his_Array_01[$i]['DRS_ID'].")"); + + unset($engVal); + $engVal = sqlGetResAsArray("select UEC_ENG_VAL from softspm_rep.rep_002_avg_energy where UEC_ID=(select max(UEC_ID) from softspm_rep.rep_002_avg_energy where UEC_DRS_ID=".$rep007_his_Array_01[$i]['DRS_ID']." and UEC_DATE<=SUBSTRING('".$_POST['post_date']."',1,10))"); + + unset($clVal); + $clVal = sqlGetResAsArray("select CLO_CLO_VAL from softspm_rep.rep_002_avg_chlorine where CLO_ID=(select max(CLO_ID) from softspm_rep.rep_002_avg_chlorine where CLO_DATE<='".$_POST['post_date']."' and CLO_DRS_ID=".$rep007_his_Array_01[$i]['DRS_ID'].")"); + + + if ($bariera!=$rep007_his_Array_01[$i]['WLL_BARIERA']) + { + echo"<tr style='font-weight: bolder; background-color: #F4F4F4;'><td colspan='14'>Bariera: ".$rep007_his_Array_01[$i]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep007_his_Array_01[$i]['WLL_BARIERA']; + } + + echo" + <tr> + <td>".$licznik."</td> + <td>".$rep007_his_Array_01[$i]['WLL_NAME']."</td> + <td>".$rep007_his_Array_01[$i]['WLE_PUMP_NAME']." / ".$rep007_his_Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$wellParamArray[0]['RHD_PE_VAL']."</td> + <td>".$wellParamArray[0]['RHD_WORK_TIME_VAL']."</td> + <td>".$engVal[0]['UEC_ENG_VAL']."</td> + <td>".$hstVal[0]['MIR_HST_VAL']."</td> + <td>".$wellParamArray[0]['RHD_HD_VAL']."</td> + <td>".round($wellParamArray[0]['RHD_Q_VAL']/60,3)."</td> + <td>".$wellParamArray[0]['RHD_P1_VAL']."</td> + <td>".$wellParamArray[0]['RHD_P2_VAL']."</td> + <td>".$wellParamArray[0]['RHD_WTEMP_VAL']."</td> + <td>".$clVal[0]['CLO_CLO_VAL']."</td> + <td>".setDicName($rep007_his_Array_01[$i]['WLL_CAT_DIC_ID'])."</td> + <tr> + "; + $licznik++; + + + $_SESSION['rep007Array'][] = array( + 'date' => $_POST['post_date'], + 'bariera' => $rep007_his_Array_01[$i]['WLL_BARIERA'], + 'well' => $rep007_his_Array_01[$i]['WLL_NAME'], + 'agregat' => $rep007_his_Array_01[$i]['WLE_PUMP_NAME']." / ".$rep007_his_Array_01[$i]['WLE_ENG_NAME'], + 'moc' => $wellParamArray[0]['RHD_PE_VAL'], + 'czas' => $wellParamArray[0]['RHD_WORK_TIME_VAL'], + 'jzu' => $engVal[0]['UEC_ENG_VAL'], + 'hst' => $hstVal[0]['MIR_HST_VAL'], + 'hd' => $wellParamArray[0]['RHD_HD_VAL'], + 'q' => round($wellParamArray[0]['RHD_Q_VAL']/60,3), + 'p1' => $wellParamArray[0]['RHD_P1_VAL'], + 'p2' => $wellParamArray[0]['RHD_P2_VAL'], + 'temp' => $wellParamArray[0]['RHD_WTEMP_VAL'], + 'clor' => $clVal[0]['CLO_CLO_VAL'] + ); + + } + } + + + echo'</table>'; + + + + +} +// ================================================================================================================================== + + +// Raport nr 8 +// ================================================================================================================================== +if ($_POST['post_action']=='rep008' && $_POST['done']=='create' && $_POST['well']>0) +{ + + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists( $filename)) unlink($filename); + + + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + // + unset($rep008_his_Array_01); + $rep008_his_Array_01 = sqlGetResAsArray("select DRS_ID,WLE_ID,WLL_BARIERA,WLL_NAME,WLL_CAT_DIC_ID,WLE_NR_EXCHANGE,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_ZP,WLE_DR,WLE_REASON from seg_dev_resources,seg_wells left join seg_wells_exchanged on WLE_WLL_ID=WLL_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_ID=".$_POST['well']." order by WLE_NR_EXCHANGE"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Pompa</th> + <th>Numer</th> + <th>Silnik</th> + <th>Numer</th> + <th>Data zabudowy</th> + <th>Głębokość zabudowy [m]</th> + <th>Średnica rurociągu [mm]</th> + <th>Ostatnie zw. statyczne [m]</th> + <th>Ostatnie zw. dynamiczne [m]</th> + <th>Czas pracy [h]</th> + <th>Ilość wypompowanej wody [m<sup>3</sup>]</th> + <th>Średnia wydajność [m<sup>3</sup>/min]</th> + <th>Rzędna położenia studni [m n.p.m.]</th> + <th>Data wybudowy</th> + <th>Powód wymiany</th> + </tr> + </thead> + '; + + //$rep008_his_Array_01[0]['DRS_ID'] + //$rep008_his_Array_01[0]['WLE_DATE_FROM'] + //$rep008_his_Array_01[0]['WLE_DATE_TO'] + + + for($i=0; $i<count($rep008_his_Array_01); $i++) + { + // jeśli jest wybodowany agregat + if (!empty($rep008_his_Array_01[$i]['WLE_DATE_TO']) || strlen($rep008_his_Array_01[$i]['WLE_DATE_TO'])>8) + { + + //2017-01 + + unset($tbName_f);unset($tbName_t); + $tbName_f = quarter($rep008_his_Array_01[$i]['WLE_DATE_FROM'],"rep_his_data_everyday"); + $tbName_t = quarter($rep008_his_Array_01[$i]['WLE_DATE_TO'],"rep_his_data_everyday"); + + unset($rep008_HST0); + $rep008_HST0 = sqlGetResAsArray("select * from ".$tbName_f." where RHD_ID=(select max(RHD_ID) from ".$tbName_f." where RHD_HST0_VAL>0 and RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE<=DATE_ADD('".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."',INTERVAL 10 DAY))"); + + unset($rep008_Mes); + $rep008_Mes = sqlGetResAsArray("select * from ".$tbName_t." where RHD_ID=(select max(RHD_ID) from ".$tbName_t." where RHD_HD_VAL>0 and RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + + unset($rep008_qAVG); + $rep008_qAVG = sqlGetResAsArray("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and AVG_DATE BETWEEN '".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and '".$rep008_his_Array_01[$i]['WLE_DATE_TO']."'"); + + unset($rep008_RZ); + $rep008_RZ = sqlGetResAsArray("select OHH_RZEDNA from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_RZEDNA>0 and OHH_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and OHH_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + + } + else + { + $rep008_his_Array_01[$i]['WLE_DATE_TO'] = date('Y-m-d H:i:s'); + + unset($tbName_f);unset($tbName_t); + $tbName_f = quarter($rep008_his_Array_01[$i]['WLE_DATE_FROM'],"rep_his_data_everyday"); + $tbName_t = quarter($rep008_his_Array_01[$i]['WLE_DATE_TO'],"rep_his_data_everyday"); + + unset($rep008_HST0); + $rep008_HST0 = sqlGetResAsArray("select * from ".$tbName_f." where RHD_ID=(select max(RHD_ID) from ".$tbName_f." where RHD_HST0_VAL>0 and RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE<=DATE_ADD('".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."',INTERVAL 10 DAY))"); + + unset($rep008_Mes); + $rep008_Mes = sqlGetResAsArray("select * from ".$tbName_t." where RHD_ID=(select max(RHD_ID) from ".$tbName_t." where RHD_HD_VAL>0 and RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + + unset($rep008_qAVG); + $rep008_qAVG = sqlGetResAsArray("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and AVG_DATE BETWEEN '".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and '".$rep008_his_Array_01[$i]['WLE_DATE_TO']."'"); + + unset($rep008_RZ); + $rep008_RZ = sqlGetResAsArray("select OHH_RZEDNA from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_RZEDNA>0 and OHH_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and OHH_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + + + unset($rep008_his_Array_01[$i]['WLE_DATE_TO']); + } + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep008_his_Array_01[$i]['WLE_PUMP_NAME']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_PUMP_NO']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_ENG_NO']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_ZP']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_DR']."</td> + <td>".$rep008_HST0[0]['RHD_HST0_VAL']."</td> + <td>".$rep008_Mes[0]['RHD_HD_VAL']."</td> + <td>".$rep008_Mes[0]['RHD_SPM_WT']."</td> + <td>".$rep008_Mes[0]['RHD_SPM_PW']."</td> + <td>".round($rep008_qAVG[0]['AVG_Q_VAL']/60,3)."</td> + <td>".$rep008_RZ[0]['OHH_RZEDNA']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_DATE_TO']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_REASON']."</td> + <tr> + "; + + + + fwrite($myfile, + $rep008_his_Array_01[0]['WLL_NAME']."|" + .($i+1)."|" + .$rep008_his_Array_01[$i]['WLE_PUMP_NAME']."|" + .$rep008_his_Array_01[$i]['WLE_PUMP_NO']."|" + .$rep008_his_Array_01[$i]['WLE_ENG_NAME']."|" + .$rep008_his_Array_01[$i]['WLE_ENG_NO']."|" + .$rep008_his_Array_01[$i]['WLE_DATE_FROM']."|" + .$rep008_his_Array_01[$i]['WLE_ZP']."|" + .$rep008_his_Array_01[$i]['WLE_DR']."|" + .$rep008_HST0[0]['RHD_HST0_VAL']."|" + .$rep008_Mes[0]['RHD_HD_VAL']."|" + .$rep008_Mes[0]['RHD_SPM_WT']."|" + .$rep008_Mes[0]['RHD_SPM_PW']."|" + .round($rep008_qAVG[0]['AVG_Q_VAL']/60,3)."|" + .$rep008_RZ[0]['OHH_RZEDNA']."|" + .$rep008_his_Array_01[$i]['WLE_DATE_TO']."|" + .$rep008_his_Array_01[$i]['WLE_REASON']."\r\n"); + } + + fclose($myfile); + + + + + + +/* + * +-- hst00 +select * from softspm_his.rep_his_data_everyday_2017_q3 where RHD_ID=(select max(RHD_ID) from softspm_his.rep_his_data_everyday_2017_q3 where RHD_HST0_VAL>0 and RHD_DRS_ID=26822 and RHD_DATE<=DATE_ADD('2017-07-28 09:00:00',INTERVAL 10 DAY)) + +-- pomiary +select * from softspm_his.rep_his_data_everyday_2017_q3 where RHD_ID=(select max(RHD_ID) from softspm_his.rep_his_data_everyday_2017_q3 where RHD_HD_VAL>0 and RHD_DRS_ID=26822 and RHD_DATE<='2017-08-09 16:00:00') + +-- srednia wydajność +select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=26822 and AVG_DATE BETWEEN '2017-07-28 09:00:00' and '2017-08-09 16:00:00' + +--rzędna +select OHH_RZEDNA from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_RZEDNA>0 and OHH_DRS_ID=26822 and `OHH_DATE`<='2017-08-09 16:00:00') + + * + */ + + +/* + for($i=0; $i<count($rep008_his_Array_01); $i++) + { + unset($czas);unset($woda);unset($srednia);unset($hd); + + unset($hst);unset($rzedna); + + //dla SPM inne + if ($rep008_his_Array_01[$i]['WLL_CAT_DIC_ID']==20) + { + unset($rep008_his_Array_02); + if (strlen($rep008_his_Array_01[$i]['WLE_DATE_TO'])>8) + { + if (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20150101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2014 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2014 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20150101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20160101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2015 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2015 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20160101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20170101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2016 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2016 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20170101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20180101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2017 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2017 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20180101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20190101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2018 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2018 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20190101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20200101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2019 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2019 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + else + { + $hst = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + if (empty($hst) || $hst<=0) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + } + + unset($dathisArray); + $roznica = (strtotime(date("Y-m-d")) - strtotime($rep008_his_Array_01[$i]['WLE_DATE_TO'])) / (60*60*24); + if ($roznica>180) + $dathisArray = sqlGetResAsArray("select * from softspm_his.rep_his_data_everyday_his where RHD_ID=(select max(RHD_ID) from softspm_his.rep_his_data_everyday_his where RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and RHD_DATE<'".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + else + $dathisArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and RHD_DATE<'".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + + $hd = $dathisArray[0]['RHD_HD_VAL']; + + + $czas = (float) sqlStringValue("select SDC_VALUE from seg_dev_counters where SDC_ID=(select max(SDC_ID) from seg_dev_counters where SDC_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and SDC_TYPE_DIC_ID=290 and SDC_MEASURE_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')", "SDC_VALUE"); + $woda = (float) sqlStringValue("select SDC_VALUE from seg_dev_counters where SDC_ID=(select max(SDC_ID) from seg_dev_counters where SDC_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and SDC_TYPE_DIC_ID=230 and SDC_MEASURE_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')", "SDC_VALUE"); + + if ($czas>0 && $woda>0) + $srednia = round(($woda/$czas)/60,3); + else + { + $czas = ""; + $woda = ""; + $srednia = ""; + } + + $rzedna = sqlStringValue("select OHH_RZEDNA from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and OHH_RZEDNA>0 and OHH_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')", "OHH_RZEDNA"); + } + else + { + if (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20150101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2014 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2014 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20150101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20160101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2015 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2015 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20160101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20170101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2016 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2016 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20170101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20180101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2017 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2017 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20180101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20190101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2018 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2018 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20190101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20200101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2019 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2019 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + + else + { + $hst = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + if (empty($hst) || $hst<=0) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + } + + unset($dathisArray); + $dathisArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID'].")"); + + $hd = $dathisArray[0]['RHD_HD_VAL']; + + $czas = (float) round(sqlStringValue("select getWellWorkingTimeInDate(".$rep008_his_Array_01[$i]['DRS_ID'].",now()) SDC_VALUE", "SDC_VALUE")/3600,2); + $woda = (float) sqlStringValue("select getWellPumpedWaterInDate(".$rep008_his_Array_01[$i]['DRS_ID'].",now()) SDC_VALUE", "SDC_VALUE"); + + if ($czas>0 && $woda>0) + $srednia = round(($woda/$czas)/60,3); + else + { + $czas = ""; + $woda = ""; + $srednia = ""; + } + + + $rzedna = sqlStringValue("select OHH_RZEDNA from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and OHH_RZEDNA>0)", "OHH_RZEDNA"); + + + } + + + } + // dla SPM Base oraz Opt + else + { + unset($rep008_his_Array_02); + if (strlen($rep008_his_Array_01[$i]['WLE_DATE_TO'])>8) + { + if (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20150101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2014 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2014 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20150101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20160101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2015 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2015 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20160101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20170101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2016 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2016 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20170101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20180101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2017 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2017 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20180101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20190101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2018 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2018 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20190101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20200101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2019 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2019 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + + else + { + $hst = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + if (empty($hst) || $hst<=0) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + } + + unset($dathisArray); + $roznica = (strtotime(date("Y-m-d")) - strtotime($rep008_his_Array_01[$i]['WLE_DATE_TO'])) / (60*60*24); + if ($roznica>180) + $dathisArray = sqlGetResAsArray("select * from softspm_his.rep_his_data_everyday_his where RHD_ID=(select max(RHD_ID) from softspm_his.rep_his_data_everyday_his where RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and RHD_DATE<'".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + else + $dathisArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and RHD_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and RHD_DATE<'".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')"); + + $hd = $dathisArray[0]['RHD_HD_VAL']; + $czas = $dathisArray[0]['RHD_WORK_TIME_VAL']; + $woda = $dathisArray[0]['RHD_VM3_VAL']; + + //if ($czas>0 && $woda>0) + // $srednia = round($woda/$czas,3); + //else $srednia = round($dathisArray[0]['RHD_Q_VAL']/60,2); + + $srednia = round($dathisArray[0]['RHD_Q_VAL']/60,3); + + $rzedna = sqlStringValue("select OHH_RZEDNA from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and OHH_RZEDNA>0 and OHH_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')", "OHH_RZEDNA"); + } + else + { + if (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20150101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2014 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2014 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20150101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20160101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2015 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2015 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20160101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20170101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2016 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2016 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20170101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20180101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2017 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2017 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20180101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20190101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2018 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2018 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + elseif (cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])>20190101000000 && cdt($rep008_his_Array_01[$i]['WLE_DATE_TO'])<20200101000000) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_2019 where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_2019 where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + + else + { + $hst = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."')","DRD_VALUE"); + if (empty($hst) || $hst<=0) + $hst = sqlStringValue("select DRD_VALUE from softspm_his.seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep008_his_Array_01[$i]['WLE_DATE_TO']."')","DRD_VALUE"); + } + + unset($dathisArray); + $dathisArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID'].")"); + + $hd = $dathisArray[0]['RHD_HD_VAL']; + $czas = $dathisArray[0]['RHD_WORK_TIME_VAL']; + $woda = $dathisArray[0]['RHD_VM3_VAL']; + + //if ($czas>0 && $woda>0) + // $srednia = round($woda/$czas,3); + //else $srednia = round($dathisArray[0]['RHD_Q_VAL']/60,3); + + $srednia = round($dathisArray[0]['RHD_Q_VAL']/60,3); + + $rzedna = sqlStringValue("select OHH_RZEDNA from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID']." and OHH_RZEDNA>0)", "OHH_RZEDNA"); + + } + + } + + + if (empty($rzedna) || $rzedna<=0) + $rzedna = sqlStringValue("select OHC_RZEDNA_TEREN from seg_object_hole_cards where OHC_DRS_ID=".$rep008_his_Array_01[$i]['DRS_ID'], "OHC_RZEDNA_TEREN"); + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep008_his_Array_01[$i]['WLE_PUMP_NAME']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_PUMP_NO']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_ENG_NO']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_DATE_FROM']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_ZP']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_DR']."</td> + <td>".$hst."</td> + <td>".$hd."</td> + <td>".$czas."</td> + <td>".$woda."</td> + <td>".$srednia."</td> + <td>".$rzedna."</td> + <td>".$rep008_his_Array_01[$i]['WLE_DATE_TO']."</td> + <td>".$rep008_his_Array_01[$i]['WLE_REASON']."</td> + <tr> + "; + + + fwrite($myfile, + $rep008_his_Array_01[0]['WLL_NAME']."|" + .($i+1)."|" + .$rep008_his_Array_01[$i]['WLE_PUMP_NAME']."|" + .$rep008_his_Array_01[$i]['WLE_PUMP_NO']."|" + .$rep008_his_Array_01[$i]['WLE_ENG_NAME']."|" + .$rep008_his_Array_01[$i]['WLE_ENG_NO']."|" + .$rep008_his_Array_01[$i]['WLE_DATE_FROM']."|" + .$rep008_his_Array_01[$i]['WLE_ZP']."|" + .$rep008_his_Array_01[$i]['WLE_DR']."|" + .$hst."|" + .$hd."|" + .$czas."|" + .$woda."|" + .$srednia."|" + .$rzedna."|" + .$rep008_his_Array_01[$i]['WLE_DATE_TO']."|" + .$rep008_his_Array_01[$i]['WLE_REASON']."\r\n"); + + } + + fclose($myfile); + +*/ + + echo'</table>'; + + +} +// ================================================================================================================================== + + +// Raport nr 9 +// ================================================================================================================================== +if ($_POST['post_action']=='rep009' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_date'])) +{ + + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists( $filename)) unlink($filename); + + + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + /* + if (substr($_POST['post_date'],5,2)=='01') $tbaName = "rep_002_data_styc"; + elseif (substr($_POST['post_date'],5,2)=='02') $tbaName = "rep_002_data_luty"; + elseif (substr($_POST['post_date'],5,2)=='03') $tbaName = "rep_002_data_marz"; + elseif (substr($_POST['post_date'],5,2)=='04') $tbaName = "rep_002_data_kwie"; + elseif (substr($_POST['post_date'],5,2)=='05') $tbaName = "rep_002_data_maj"; + elseif (substr($_POST['post_date'],5,2)=='06') $tbaName = "rep_002_data_czer"; + elseif (substr($_POST['post_date'],5,2)=='07') $tbaName = "rep_002_data_lipi"; + elseif (substr($_POST['post_date'],5,2)=='08') $tbaName = "rep_002_data_sier"; + elseif (substr($_POST['post_date'],5,2)=='09') $tbaName = "rep_002_data_wrze"; + elseif (substr($_POST['post_date'],5,2)=='10') $tbaName = "rep_002_data_pazd"; + elseif (substr($_POST['post_date'],5,2)=='11') $tbaName = "rep_002_data_list"; + elseif (substr($_POST['post_date'],5,2)=='12') $tbaName = "rep_002_data_grud"; + else $tbaName = "rep_002_data_lipi"; + */ + + $tbaName = getTableNameFrom_everyday_his($_POST['post_date']); + + unset($rep009_his_Array_01); + //$rep009_his_Array_01 = sqlGetResAsArray("select * from (select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_ZP,WLE_DR,(select PUP_Q_N from seg_pumps,seg_dev_resources where DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 and PUP_NAME=WLE_PUMP_NAME and DRS_SN_NUMBER=WLE_PUMP_NO limit 1) PUP_Q_N from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' and DRS_DEPARTMENT='".$_POST['dep']."') tb order by WLE_PUMP_NAME,PUP_Q_N"); + $rep009_his_Array_01 = sqlGetResAsArray("select * from seg_dev_resources,seg_wells left join seg_wells_exchanged on WLL_ID=WLE_WLL_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_POST['dep']."' and WLE_DATE_FROM<='".$_POST['post_date']."' and (WLE_DATE_TO>='".$_POST['post_date']."' or WLE_DATE_TO is null) group by WLL_BARIERA,WLL_NAME order by WLE_PUMP_NAME,WLE_PUMP_NO"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp</th> + <th>Typ pompy</th> + <th>Numer pompy</th> + <th>Typ silnika</th> + <th>Numer silnika</th> + <th>Studnia</th> + <th>Gł.zab.[m]</th> + <th>Średnica rurociągu<br/>[mm]</th> + <th>Średnica D<sub>ST</sub><br/>[mm]</th> + <th>Hst [m]</th> + <th>Hd [m]</th> + <th>Q ostatnie <br/>[m³/min]</th> + <th>Q średnie <br/>[m³/min]</th> + <th>Data uruchomienia</th> + <th>Czas pracy [h]</th> + <th>Kategoria</th> + </tr> + </thead> + '; + + for($i=0; $i<count($rep009_his_Array_01); $i++) + { + + unset($valDetArray); + $valDetArray = sqlGetResAsArray("select * from ".$tbaName." where RHD_ID=(select max(RHD_ID) from ".$tbaName." where RHD_DATE<='".$_POST['post_date']."' and RHD_Q_VAL>0 and RHD_DRS_ID=".$rep009_his_Array_01[$i]['DRS_ID'].")"); + + unset($qSredVal); + $qSredVal = sqlStringValue("select AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DATE>='".$rep009_his_Array_01[$i]['WLE_DATE_FROM']."' and AVG_DATE<='".$_POST['post_date']."' and AVG_DRS_ID=".$rep009_his_Array_01[$i]['DRS_ID'], "AVG_Q_VAL"); + + unset($hstVal); + $hstVal = sqlStringValue("select MIR_HST_VAL from softspm_rep.rep_002_avg_mirror where MIR_ID=(select max(MIR_ID) from softspm_rep.rep_002_avg_mirror where MIR_DATE<'".$_POST['post_date']."' and MIR_DRS_ID=".$rep009_his_Array_01[$i]['DRS_ID'].")", "MIR_HST_VAL"); + + unset($wellTime); + $wellTime=fCzas($rep009_his_Array_01[$i]['DRS_ID'], $rep009_his_Array_01[$i]['WLE_DATE_FROM'], $_POST['post_date']); + $wellTime = round($wellTime/3600,0); + + //20230728 + unset($rep009DSTArray); + $rep009DSTArray = sqlGetResAsArray("SELECT * FROM seg_dev_resources_det WHERE DRD_ID=(SELECT max(DRD_ID) FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=100 AND DRD_DRS_ID=".$rep009_his_Array_01[$i]['DRS_ID'].")"); + + + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep009_his_Array_01[$i]['WLE_PUMP_NAME']."</td> + <td>".$rep009_his_Array_01[$i]['WLE_PUMP_NO']."</td> + <td>".$rep009_his_Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$rep009_his_Array_01[$i]['WLE_ENG_NO']."</td> + <td>".$rep009_his_Array_01[$i]['WLL_NAME']."</td> + <td>".$rep009_his_Array_01[$i]['WLE_ZP']."</td> + <td>".$rep009_his_Array_01[$i]['WLE_DR']."</td> + <td>".$rep009DSTArray[0]['DRD_VALUE']."</td> + <td>".$hstVal."</td> + <td>".$valDetArray[0]['RHD_HD_VAL']."</td> + <td>".round($valDetArray[0]['RHD_Q_VAL']/60,3)."</td> + <td>".round($qSredVal/60,3)."</td> + <td>".$rep009_his_Array_01[$i]['WLE_DATE_FROM']."</td> + <td>".$wellTime."</td> + <td>".setDicName($rep009_his_Array_01[$i]['WLL_CAT_DIC_ID'])."</td> + <tr> + "; + + + fwrite($myfile, + $_POST['post_date']."|" + .($i+1)."|" + .$rep009_his_Array_01[$i]['WLE_PUMP_NAME']."|" + .$rep009_his_Array_01[$i]['WLE_PUMP_NO']."|" + .$rep009_his_Array_01[$i]['WLE_ENG_NAME']."|" + .$rep009_his_Array_01[$i]['WLE_ENG_NO']."|" + .$rep009_his_Array_01[$i]['WLL_NAME']."|" + .$rep009_his_Array_01[$i]['WLE_ZP']."|" + .$rep009_his_Array_01[$i]['WLE_DR']."|" + .$rep009DSTArray[0]['DRD_VALUE']."|" + .$hstVal."|" + .$valDetArray[0]['RHD_HD_VAL']."|" + .round($valDetArray[0]['RHD_Q_VAL']/60,3)."|" + .round($qSredVal/60,3)."|" + .$rep009_his_Array_01[$i]['WLE_DATE_FROM']."|" + .$wellTime."|" + .setDicName($rep009_his_Array_01[$i]['WLL_CAT_DIC_ID'])."\r\n"); + + + } + fclose($myfile); + echo'</table>'; +// + + + + +} +// ================================================================================================================================== + +// Raport nr 10 +// ================================================================================================================================== +if ($_POST['post_action']=='rep010' && $_POST['done']=='create' && !empty($_POST['post_date'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists($filename)) unlink($filename); + + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + unset($rep010Array_01); +// $rep010Array_01 = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_ZP from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' and DRS_DEPARTMENT='".$_POST['dep']."' and (getValueInDate(507, DRS_ID, '".$_POST['post_date']."')='OFF' or getValueInDate(507, DRS_ID, '".$_POST['post_date']."') is null) order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + //$rep010Array_01 = sqlGetResAsArray("select * from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and PUP_ID=DRS_DEV_ID and DRS_DEV_ATTENTION=1401 and DRS_DEPARTMENT='".$_POST['dep']."' order by DRS_DEV_TYPE,DRS_SN_NUMBER"); + $rep010Array_01 = sqlGetResAsArray("select RWS_WLL_ID,RWS_DRS_ID,WLL_BARIERA,WLL_NAME,RWS_PUP_DRS_ID,RWS_ENG_DRS_ID,(select PUP_NAME from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_ID=RWS_PUP_DRS_ID limit 1) PUP_NAME,(select DRS_SN_NUMBER from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_ID=RWS_PUP_DRS_ID limit 1) PUP_SN_NUMBER,(select ENG_NAME from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_ID=RWS_ENG_DRS_ID limit 1) ENG_NAME,(select DRS_SN_NUMBER from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_ID=RWS_ENG_DRS_ID limit 1) ENG_SN_NUMBER,RWS_DESC from seg_wells,seg_wellsink_pump_eng_rel left join seg_dev_resources on DRS_ID=RWS_DRS_ID where WLL_ID=RWS_WLL_ID and RWS_DEPARTMENT='".$_POST['dep']."' order by WLL_BARIERA,WLL_NAME"); + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Bariera</th> + <th>Studnia</th> + <th>Typ pompy</th> + <th>Numer pompy</th> + <th>Typ silnika</th> + <th>Numer silnika</th> + <th>Głębokość LP [m]</th> + <th>Data uruchomienia</th> + <th>Data zatopienia</th> + <th>Powód</th> + </tr> + </thead> + '; + for($i=0; $i<count($rep010Array_01); $i++) + { + unset($rep010Array_02); + //$rep010Array_02 = sqlGetResAsArray("select DRD_AUDIT_DATE,DRD_DESCRIPTION from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and DRD_DRS_ID=".$rep010Array_01[$i]['DRS_ID'].")"); + //$rep010Array_02 = sqlGetResAsArray("select * from seg_wells_exchanged,seg_wells where WLL_ID=WLE_WLL_ID and WLE_PUMP_NAME='".$rep010Array_01[$i]['PUP_NAME']."' and WLE_PUMP_NO='".$rep010Array_01[$i]['DRS_SN_NUMBER']."' and WLE_DATE_FROM=(select max(WLE_DATE_FROM) from seg_wells_exchanged where WLE_PUMP_NAME='".$rep010Array_01[$i]['PUP_NAME']."' and WLE_PUMP_NO='".$rep010Array_01[$i]['DRS_SN_NUMBER']."')"); + + if ($rep010Array_01[$i]['RWS_PUP_DRS_ID']>0) $subQuery_01 = "and WLE_PUMP_NAME='".$rep010Array_01[$i]['PUP_NAME']."' and WLE_PUMP_NO='".$rep010Array_01[$i]['PUP_SN_NUMBER']."'"; + else unset($subQuery_01); + + if ($rep010Array_01[$i]['RWS_ENG_DRS_ID']>0) $subQuery_02 = "and WLE_ENG_NAME='".$rep010Array_01[$i]['ENG_NAME']."' and WLE_ENG_NO='".$rep010Array_01[$i]['ENG_SN_NUMBER']."'"; + else unset($subQuery_02); + + $rep010Array_02 = sqlGetResAsArray("select * from seg_wells_exchanged where WLE_ID=(select max(WLE_ID) from seg_wells_exchanged where WLE_WLL_ID=".$rep010Array_01[$i]['RWS_WLL_ID']." ".$subQuery_01." ".$subQuery_02.")"); + + echo" + <tr> + <td>".$rep010Array_01[$i]['WLL_BARIERA']."</td> + <td>".$rep010Array_01[$i]['WLL_NAME']."</td> + <td>".$rep010Array_01[$i]['PUP_NAME']."</td> + <td>".$rep010Array_01[$i]['PUP_SN_NUMBER']."</td> + <td>".$rep010Array_01[$i]['ENG_NAME']."</td> + <td>".$rep010Array_01[$i]['ENG_SN_NUMBER']."</td> + <td>".$rep010Array_02[0]['WLE_ZP']."</td> + <td>".$rep010Array_02[0]['WLE_DATE_FROM']."</td> + <td>".$rep010Array_02[0]['WLE_DATE_TO']."</td> + <td>".$rep010Array_01[$i]['RWS_DESC']."</td> + <tr> + "; + + fwrite($myfile, + $_POST['post_date']."|" + .($i+1)."|" + .$rep010Array_01[$i]['WLL_BARIERA']."|" + .$rep010Array_01[$i]['WLL_NAME']."|" + .$rep010Array_01[$i]['PUP_NAME']."|" + .$rep010Array_01[$i]['PUP_SN_NUMBER']."|" + .$rep010Array_01[$i]['ENG_NAME']."|" + .$rep010Array_01[$i]['ENG_SN_NUMBER']."|" + .$rep010Array_02[0]['WLE_ZP']."|" + .$rep010Array_02[0]['WLE_DATE_FROM']."|" + .$rep010Array_02[0]['WLE_DATE_TO']."|" + .$rep010Array_01[$i]['RWS_DESC']."\r\n"); + + } + fclose($myfile); + + echo'</table>'; + +} +// ================================================================================================================================== + + +// Raport nr 11 +// ================================================================================================================================== +if ($_POST['post_action']=='rep011' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_date'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists($filename)) { + unlink($filename); + } + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + unset($rep011_his_Array_01); + $rep011_his_Array_01 = sqlGetResAsArray("select DRS_ID,DRS_BUY_DATE,DRS_AVAILABLE_DATE,DRS_CASSATION_DATE,WLL_ID,WLL_BARIERA,WLL_NAME,WLL_CAT_DIC_ID,WLL_SYS_TYPE,WLL_STAT_DESC,OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT,OHC_DL_GEOGR,OHC_SZER_GEOGR,OHC_DATA_ODDANIA from seg_wells ,seg_dev_resources left join seg_object_hole_cards on OHC_DRS_ID=DRS_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_STATUS_DIC_ID=3 and DRS_DEPARTMENT='".$_POST['dep']."' and DRS_BUY_DATE<='".$_POST['post_date']."' order by WLL_BARIERA,WLL_NAME"); + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp</th> + <th>Studnia</th> + <th>Typ obiektu</th> + <th>Data przyjęcia</th> + <th colspan=2>Współrzędne</th> + <th>Rzędna wiercenia [m n.p.m.]</th> + <th>Rzędna aktualna [m n.p.m.]</th> + <th>Głębokość aktualna [m]</th> + <th>Lokalizacja</th> + <th>Uwagi</th> + <th>Kategoria</th> + </tr> + </thead> + '; + + $bariera = ""; + for($i=0; $i<count($rep011_his_Array_01); $i++) + { + + if ($bariera!=$rep011_his_Array_01[$i]['WLL_BARIERA']) + { + echo"<tr style='font-weight: bolder; background-color: #F4F4F4;'><td colspan='13'>Bariera: ".$rep011_his_Array_01[$i]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep011_his_Array_01[$i]['WLL_BARIERA']; + } + + unset($gleb); + $gleb = (float) ($rep011_his_Array_01[$i]['OHC_GLEB_OSTAT'] - ($rep011_his_Array_01[$i]['OHC_RZEDNA_TEREN'] - $rep011_his_Array_01[$i]['OHC_RZEDNA_TERENU_ACT'])); + + unset($local); + $local = sqlStringValue("select OHH_ZMIAN_UMIEJ_LOCAL from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where LENGTH(OHH_ZMIAN_UMIEJ_LOCAL)>0 and OHH_DRS_ID=".$rep011_his_Array_01[$i]['DRS_ID'].")", "OHH_ZMIAN_UMIEJ_LOCAL"); + unset($reason); + $reason = sqlStringValue("select OHH_ZMIAN_UMIEJ_REASON from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where LENGTH(OHH_ZMIAN_UMIEJ_REASON)>0 and OHH_DRS_ID=".$rep011_his_Array_01[$i]['DRS_ID'].")", "OHH_ZMIAN_UMIEJ_REASON"); + + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep011_his_Array_01[$i]['WLL_NAME']."</td> + <td>".$rep011_his_Array_01[$i]['WLL_SYS_TYPE']."</td> + <td>".$rep011_his_Array_01[$i]['OHC_DATA_ODDANIA']."</td> + <td>".$rep011_his_Array_01[$i]['OHC_DL_GEOGR']."</td> + <td>".$rep011_his_Array_01[$i]['OHC_SZER_GEOGR']."</td> + <td>".$rep011_his_Array_01[$i]['OHC_RZEDNA_TEREN']."</td> + <td>".$rep011_his_Array_01[$i]['OHC_RZEDNA_TERENU_ACT']."</td> + <td>".$gleb."</td> + <td>".$local."</td> + <td>".$reason."</td> + <td>".setDicName($rep011_his_Array_01[$i]['WLL_CAT_DIC_ID'])."</td> + <tr> + "; + + fwrite($myfile, + $_POST['post_date']."|" + .($i+1)."|" + .$rep011_his_Array_01[$i]['WLL_BARIERA']."|" + .$rep011_his_Array_01[$i]['WLL_NAME']."|" + .$rep011_his_Array_01[$i]['WLL_SYS_TYPE']."|" + .$rep011_his_Array_01[$i]['OHC_DATA_ODDANIA']."|" + .$rep011_his_Array_01[$i]['OHC_DL_GEOGR']."|" + .$rep011_his_Array_01[$i]['OHC_SZER_GEOGR']."|" + .$rep011_his_Array_01[$i]['OHC_RZEDNA_TEREN']."|" + .$rep011_his_Array_01[$i]['OHC_RZEDNA_TERENU_ACT']."|" + .$gleb."|" + .$local."|" + .$reason."|" + .setDicName($rep011_his_Array_01[$i]['WLL_CAT_DIC_ID'])."\r\n"); + + } + fclose($myfile); + + echo'</table>'; +} +// ================================================================================================================================== + + + +// Raport nr 12 +// ================================================================================================================================== +if ($_POST['post_action']=='rep012' && $_POST['done']=='create' && !empty($_POST['dep']) && !empty($_POST['post_typ'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists($filename)) { + unlink($filename); + } + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + unset($rep012_his_Array_01); + //$rep012_his_Array_01 = sqlGetResAsArray("select DRS_ID,DRS_BUY_DATE,DRS_AVAILABLE_DATE,DRS_CASSATION_DATE,SRP_ID,SRP_BARIERA,SRP_NAME,SRP_MCF_ID,SRP_SYS_TYPE,SRP_STAT_DESC,OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT,OHC_DL_GEOGR,OHC_SZER_GEOGR,OHC_DATA_ODDANIA,OHC_ZDJECIE_EXPL_DATE from seg_reservoirs_piezometers,seg_dev_resources left join seg_object_hole_cards on OHC_DRS_ID=DRS_ID where DRS_DEV_TYPE=601 and DRS_DEV_ID=SRP_ID and DRS_STATUS_DIC_ID=3 and DRS_DEPARTMENT='".$_POST['dep']."' and SRP_SYS_TYPE='".$_POST['post_typ']."' order by SRP_BARIERA,SRP_NAME"); + $rep012_his_Array_01 = sqlGetResAsArray("select * from seg_reservoirs_piezometers,seg_dev_resources left join seg_object_hole_cards on DRS_ID=OHC_DRS_ID where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=SRP_TYPE_DIC_ID and DRS_DEV_TYPE=601 and DRS_DEPARTMENT='".$_POST['dep']."' and SRP_SYS_TYPE='".$_POST['post_typ']."' and OHC_DATA_ODDANIA<=now() and OHC_ZDJECIE_EXPL_DATE is null order by SRP_BARIERA,SRP_NAME"); + + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp</th> + <th>Piezometr</th> + <th>Typ obiektu</th> + <th>Data przyjęcia</th> + <th colspan=2>Współrzędne</th> + <th>Rzędna wiercenia [m n.p.m.]</th> + <th>Rzędna aktualna [m n.p.m.]</th> + <th>Głębokość aktualna [m]</th> + <th>Lokalizacja</th> + <th>Uwagi</th> + <th>Sterowanie</th> + </tr> + </thead> + '; + + $bariera = ""; + for($i=0; $i<count($rep012_his_Array_01); $i++) + { + + if ($bariera!=$rep012_his_Array_01[$i]['SRP_BARIERA']) + { + echo"<tr style='font-weight: bolder; background-color: #F4F4F4;'><td colspan='13'>Bariera: ".$rep012_his_Array_01[$i]['SRP_BARIERA']."</td></tr>"; + $bariera=$rep012_his_Array_01[$i]['SRP_BARIERA']; + } + + unset($gleb); + $gleb = (float) ($rep012_his_Array_01[$i]['OHC_GLEB_OSTAT'] - ($rep012_his_Array_01[$i]['OHC_RZEDNA_TEREN'] - $rep012_his_Array_01[$i]['OHC_RZEDNA_TERENU_ACT'])); + + unset($local); + $local = sqlStringValue("select OHH_ZMIAN_UMIEJ_LOCAL from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where LENGTH(OHH_ZMIAN_UMIEJ_LOCAL)>0 and OHH_DRS_ID=".$rep012_his_Array_01[$i]['DRS_ID'].")", "OHH_ZMIAN_UMIEJ_LOCAL"); + unset($reason); + $reason = sqlStringValue("select OHH_ZMIAN_UMIEJ_REASON from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where LENGTH(OHH_ZMIAN_UMIEJ_REASON)>0 and OHH_DRS_ID=".$rep012_his_Array_01[$i]['DRS_ID'].")", "OHH_ZMIAN_UMIEJ_REASON"); + + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep012_his_Array_01[$i]['SRP_NAME']."</td> + <td>".$rep012_his_Array_01[$i]['SRP_SYS_TYPE']."</td> + <td>".$rep012_his_Array_01[$i]['OHC_DATA_ODDANIA']."</td> + <td>".$rep012_his_Array_01[$i]['OHC_DL_GEOGR']."</td> + <td>".$rep012_his_Array_01[$i]['OHC_SZER_GEOGR']."</td> + <td>".$rep012_his_Array_01[$i]['OHC_RZEDNA_TEREN']."</td> + <td>".$rep012_his_Array_01[$i]['OHC_RZEDNA_TERENU_ACT']."</td> + <td>".$gleb."</td> + <td>".$local."</td> + <td>".$reason."</td> + + + <td>".setDicName($rep012_his_Array_01[$i]['SRP_MCF_ID'])."</td> + <tr> + "; + + fwrite($myfile, + ($i+1)."|" + .$rep012_his_Array_01[$i]['SRP_BARIERA']."|" + .$rep012_his_Array_01[$i]['SRP_NAME']."|" + .$rep012_his_Array_01[$i]['SRP_SYS_TYPE']."|" + .$rep012_his_Array_01[$i]['OHC_DATA_ODDANIA']."|" + .$rep012_his_Array_01[$i]['OHC_DL_GEOGR']."|" + .$rep012_his_Array_01[$i]['OHC_SZER_GEOGR']."|" + .$rep012_his_Array_01[$i]['OHC_RZEDNA_TEREN']."|" + .$rep012_his_Array_01[$i]['OHC_RZEDNA_TERENU_ACT']."|" + .$gleb."|" + .$local."|" + .$reason."|" + .setDicName($rep012_his_Array_01[$i]['SRP_MCF_ID'])."\r\n"); + + } + fclose($myfile); + + echo'</table>'; +} +// ================================================================================================================================== + + + + +// Raport nr 13 +// ================================================================================================================================== +if ($_POST['post_action']=='rep013' && $_POST['done']=='create' && !empty($_POST['dep'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists($filename)) { + unlink($filename); + } + + if (file_exists( $filename)) unlink($filename); + + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + + unset($rep013_his_Array_01); + $rep013_his_Array_01 = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_BARIERA,WLL_NAME,WLL_CAT_DIC_ID,WLE_NR_EXCHANGE,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_REASON,WLE_ZP,WLE_DR from seg_wells_exchanged,seg_wells left join seg_dev_resources on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where WLE_WLL_ID=WLL_ID and ((WLE_DATE_TO>='".$_POST['post_date_f']." 00:00:00' and WLE_DATE_TO<='".$_POST['post_date_t']." 23:59:59') or (WLE_DATE_FROM>='".$_POST['post_date_f']." 00:00:00' and WLE_DATE_FROM<='".$_POST['post_date_t']." 23:59:59')) and DRS_DEPARTMENT='".$_POST['dep']."' order by WLL_BARIERA,WLL_NAME,WLE_NR_EXCHANGE desc"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Studnia</th> + <th>Nr wymiany</th> + <th>Typ pompy</th> + <th>Numer pompy</th> + <th>Typ silnika</th> + <th>Numer silnika</th> + <th>Moc [kW]</th> + <th>Data zabudowy</th> + <th>Data wybudowy</th> + <th>Czas pracy [h]</th> + <th>Powód wymiany</th> + <th>Głębokość zabudowy [m]</th> + <th>Średnica rurociągu [mm]</th> + <th>Kategoria</th> + </tr> + </thead> + '; + $licznik=1; + for($i=0; $i<count($rep013_his_Array_01); $i++) + { + if (strlen($rep013_his_Array_01[$i]['WLE_DATE_TO'])>8) + { + unset($tbName_t); + $tbName_t = quarter($rep013_his_Array_01[$i]['WLE_DATE_TO'],"rep_his_data_everyday"); + + unset($mesArray); + $mesArray = sqlGetResAsArray("select * from ".$tbName_t." where RHD_ID=(select max(RHD_ID) from ".$tbName_t." where RHD_Q_VAL>0 and RHD_DRS_ID=".$rep013_his_Array_01[$i]['DRS_ID']." and RHD_DATE<='".$rep013_his_Array_01[$i]['WLE_DATE_TO']."')"); + if (count($mesArray)<=0) + { + unset($czas); + $mesArray[0]['RHD_SPM_WT']=round(fCzas($rep013_his_Array_01[$i]['DRS_ID'], $rep013_his_Array_01[$i]['WLE_DATE_FROM'], $rep013_his_Array_01[$i]['WLE_DATE_TO'])/3600,0); + + } + + unset($powVal); + $powVal = sqlGetResAsArray("select * from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and ENG_NAME='".$rep013_his_Array_01[$i]['WLE_ENG_NAME']."' and DRS_SN_NUMBER='".$rep013_his_Array_01[$i]['WLE_ENG_NO']."'"); + + + + echo" + <tr> + <td>".$rep013_his_Array_01[$i]['WLL_NAME']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_NR_EXCHANGE']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_PUMP_NAME']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_PUMP_NO']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_ENG_NO']."</td> + <td>".$powVal[0]['ENG_POWER']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_DATE_FROM']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_DATE_TO']."</td> + <td>".$mesArray[0]['RHD_SPM_WT']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_REASON']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_ZP']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_DR']."</td> + <td>".setDicName($rep013_his_Array_01[$i]['WLL_CAT_DIC_ID'])."</td> + <tr> + "; + + fwrite($myfile, + $_POST['post_date_f']."|" + .$_POST['post_date_t']."|" + .$licznik."|" + .$rep013_his_Array_01[$i]['WLL_NAME']."|" + .$rep013_his_Array_01[$i]['WLE_NR_EXCHANGE']."|" + .$rep013_his_Array_01[$i]['WLE_PUMP_NAME']."|" + .$rep013_his_Array_01[$i]['WLE_PUMP_NO']."|" + .$rep013_his_Array_01[$i]['WLE_ENG_NAME']."|" + .$rep013_his_Array_01[$i]['WLE_ENG_NO']."|" + .$powVal[0]['ENG_POWER']."|" + .$rep013_his_Array_01[$i]['WLE_DATE_FROM']."|" + .$rep013_his_Array_01[$i]['WLE_DATE_TO']."|" + .$mesArray[0]['RHD_SPM_WT']."|" + .$rep013_his_Array_01[$i]['WLE_REASON']."|" + .$rep013_his_Array_01[$i]['WLE_ZP']."|" + .$rep013_his_Array_01[$i]['WLE_DR']."|" + .setDicName($rep013_his_Array_01[$i]['WLL_CAT_DIC_ID'])."\r\n"); + + $licznik++; + } + } + fclose($myfile); + + + +// unset($tbName_f);unset($tbName_t); +// $tbName_f = quarter($rep008_his_Array_01[$i]['WLE_DATE_FROM'],"rep_his_data_everyday"); + + +/* + for($i=0; $i<count($rep013_his_Array_01); $i++) + { + unset($tmpArray);unset($moc);unset($czas); + + // jeśli jest SPM inne + if ($rep013_his_Array_01[$i]['WLL_CAT_DIC_ID']==20) + { + if (strlen($rep013_his_Array_01[$i]['WLE_DATE_TO'])>8) + { + unset($czas); + $czas=fCzas($rep013_his_Array_01[$i]['DRS_ID'], $rep013_his_Array_01[$i]['WLE_DATE_FROM'], $rep013_his_Array_01[$i]['WLE_DATE_TO']); + $czas = round($czas/3600,0); + } + else + { + unset($czas); + $czas=fCzas($rep013_his_Array_01[$i]['DRS_ID'], $rep013_his_Array_01[$i]['WLE_DATE_FROM'], $_POST['post_date_t'].' '.date('H:i:s')); + $czas = round($czas/3600,0); + } + $moc = sqlStringValue("select ENG_POWER from seg_dev_resources,seg_engines where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME='".$rep013_his_Array_01[$i]['WLE_ENG_NAME']."' and DRS_SN_NUMBER='".$rep013_his_Array_01[$i]['WLE_ENG_NO']."' limit 1", "ENG_POWER"); + + } + + else + { + if (strlen($rep013_his_Array_01[$i]['WLE_DATE_TO'])>8) + { + $tmpArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$rep013_his_Array_01[$i]['DRS_ID']." and RHD_DATE<='".$rep013_his_Array_01[$i]['WLE_DATE_TO']."' and RHD_Q_VAL>0 and RHD_WORK_TIME_VAL>0)"); + $moc = $tmpArray[0]['RHD_PE_VAL']; + $czas = round($tmpArray[0]['RHD_WORK_TIME_VAL'],0); + } + else + { + $tmpArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$rep013_his_Array_01[$i]['DRS_ID']." and RHD_Q_VAL>0 and RHD_WORK_TIME_VAL>0)"); + $moc = $tmpArray[0]['RHD_PE_VAL']; + $czas = round($tmpArray[0]['RHD_WORK_TIME_VAL'],0); + } + + } + + + echo" + <tr> + <td>".$rep013_his_Array_01[$i]['WLL_NAME']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_NR_EXCHANGE']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_PUMP_NAME']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_PUMP_NO']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_ENG_NO']."</td> + <td>".$moc."</td> + <td>".$rep013_his_Array_01[$i]['WLE_DATE_FROM']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_DATE_TO']."</td> + <td>".$czas."</td> + <td>".$rep013_his_Array_01[$i]['WLE_REASON']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_ZP']."</td> + <td>".$rep013_his_Array_01[$i]['WLE_DR']."</td> + <td>".setDicName($rep013_his_Array_01[$i]['WLL_CAT_DIC_ID'])."</td> + <tr> + "; + + fwrite($myfile, + $_POST['post_date_f']."|" + .$_POST['post_date_t']."|" + .($i+1)."|" + .$rep013_his_Array_01[$i]['WLL_NAME']."|" + .$rep013_his_Array_01[$i]['WLE_NR_EXCHANGE']."|" + .$rep013_his_Array_01[$i]['WLE_PUMP_NAME']."|" + .$rep013_his_Array_01[$i]['WLE_PUMP_NO']."|" + .$rep013_his_Array_01[$i]['WLE_ENG_NAME']."|" + .$rep013_his_Array_01[$i]['WLE_ENG_NO']."|" + .$moc."|" + .$rep013_his_Array_01[$i]['WLE_DATE_FROM']."|" + .$rep013_his_Array_01[$i]['WLE_DATE_TO']."|" + .$czas."|" + .$rep013_his_Array_01[$i]['WLE_REASON']."|" + .$rep013_his_Array_01[$i]['WLE_ZP']."|" + .$rep013_his_Array_01[$i]['WLE_DR']."\r\n"); + + } + fclose($myfile); +*/ + + + echo'</table>'; + +} +// ================================================================================================================================== + + + + + +// Raport nr 14 +// ================================================================================================================================== +if ($_POST['post_action']=='rep014' && $_POST['done']=='create' && !empty($_POST['post_date'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists($filename)) { + unlink($filename); + } + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + + unset($rep014_his_Array_01); + $rep014_his_Array_01 = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_ZP,WLE_DR,WLE_REASON from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' and DRS_DEPARTMENT='".$_POST['dep']."' order by WLL_BARIERA,WLL_NAME"); + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Typ pompy</th> + <th>Numer pompy</th> + <th>Typ silnika</th> + <th>Numer silnika</th> + <th>Gł.zab. L<sub>p</sub> [m]</th> + <th>Data uruchomienia</th> + <th>Data wypięcia</th> + <th>Powód wypięcia</th> + <th>Kategoria</th> + </tr> + </thead> + '; + + $bariera=""; + for($i=0; $i<count($rep014_his_Array_01); $i++) + { + + if ($bariera!=$rep014_his_Array_01[$i]['WLL_BARIERA']) + { + echo"<tr style='font-weight: bolder; background-color: #F4F4F4;'><td colspan='11'>Bariera: ".$rep014_his_Array_01[$i]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep014_his_Array_01[$i]['WLL_BARIERA']; + } + + + + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep014_his_Array_01[$i]['WLL_NAME']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_PUMP_NAME']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_PUMP_NO']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_ENG_NAME']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_ENG_NO']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_ZP']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_DATE_FROM']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_DATE_TO']."</td> + <td>".$rep014_his_Array_01[$i]['WLE_REASON']."</td> + <td>".setDicName($rep014_his_Array_01[$i]['WLL_CAT_DIC_ID'])."</td> + <tr> + "; + + + fwrite($myfile, + $_POST['post_date']."|" + .$rep014_his_Array_01[$i]['WLL_BARIERA']."|" + .($i+1)."|" + .$rep014_his_Array_01[$i]['WLL_NAME']."|" + .$rep014_his_Array_01[$i]['WLE_PUMP_NAME']."|" + .$rep014_his_Array_01[$i]['WLE_PUMP_NO']."|" + .$rep014_his_Array_01[$i]['WLE_ENG_NAME']."|" + .$rep014_his_Array_01[$i]['WLE_ENG_NO']."|" + .$rep014_his_Array_01[$i]['WLE_ZP']."|" + .$rep014_his_Array_01[$i]['WLE_DATE_FROM']."|" + .$rep014_his_Array_01[$i]['WLE_DATE_TO']."|" + .$rep014_his_Array_01[$i]['WLE_REASON']."|" + .setDicName($rep014_his_Array_01[$i]['WLL_CAT_DIC_ID'])."\r\n"); + } + fclose($myfile); + + echo'</table>'; +} +// ================================================================================================================================== + + +// Raport nr 15 +// ================================================================================================================================== +if ($_POST['post_action']=='rep015' && $_POST['done']=='create' && !empty($_POST['dep'])) +{ + //lista rekrdów + $filename="../charts/".base64_decode($_POST['file']); + if (file_exists($filename)) unlink ($filename); + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + //plik na podsumowanie + $filename1=$filename.'_sum'; + if (file_exists($filename1)) unlink ($filename1); + $myfile1 = fopen($filename1, "a+") or die("Unable to open file!"); + + unset($rep015_his_Array_01); + $rep015_his_Array_01= sqlGetResAsArray("select * from seg_dev_resources,seg_wells left join seg_wells_exchanged on WLL_ID=WLE_WLL_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_POST['dep']."' and WLE_DATE_FROM<=now() and (WLE_DATE_TO>=now() or WLE_DATE_TO is null) group by WLL_BARIERA,WLL_NAME order by WLL_BARIERA"); + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th style="vertical-align: middle;" rowspan=2>Lp.</th> + <th style="vertical-align: middle;" rowspan=2>Bariera</th> + <th style="vertical-align: middle;" rowspan=2>Studnia</th> + <th style="vertical-align: middle;" rowspan=2>Typ silnika</th> + <th style="vertical-align: middle;" rowspan=2>Numer silnika</th> + <th style="vertical-align: middle;" rowspan=2>Napięcie [V]</th> + <th style="vertical-align: middle; text-align: center;" colspan=3>Wydana - ZLECENIA w SoftSPM</th> + <th style="vertical-align: middle; text-align: center;" colspan=3>Zabudowana</th> + <th style="vertical-align: middle;" rowspan=2>Kategoria</th> + </tr> + + <tr> + <th>Data zlecenia</th> + <th>Typ kabla</th> + <th>Długość [m]</th> + <th>Data zabudowy</th> + <th>Długość [m]</th> + <th>Ciezar [kg]</th> + </tr> + </thead> + '; + + unset($tempTb); + unset($calbeArray); + unset($cableCounter); + + for ($i=0; $i<count($rep015_his_Array_01); $i++) + { + unset($rep15Stany); + $rep15Stany= sqlGetResAsArray("select * from softspm_rep.rep_015_stany where PUP_TYPE='".$rep015_his_Array_01[$i]['WLE_PUMP_NAME']."' and PUP_NO='".$rep015_his_Array_01[$i]['WLE_PUMP_NO']."' and ENG_TYPE='".$rep015_his_Array_01[$i]['WLE_ENG_NAME']."' and ENG_NO='".$rep015_his_Array_01[$i]['WLE_ENG_NO']."'"); + + unset($rep15Data); + $rep15Data = sqlGetResAsArray("select * from softspm_rep.rep_015_data where stp_stamot_typ_m='".$rep015_his_Array_01[$i]['WLE_ENG_NAME']."' and stp_stamot_nr_m='".$rep015_his_Array_01[$i]['WLE_ENG_NO']."'"); + + + unset($dataZlecenie); + $dataZlecenie = sqlGetResAsArray("select * from seg_orders,seg_order_new_agg_params where ORD_ID=ONA_ORD_ID and ONA_ORD_ID =(select max(ORD_ID) from seg_orders,seg_order_new_agg_params where ORD_ID=ONA_ORD_ID and ORD_OBJ_NAME='".$rep015_his_Array_01[$i]['WLL_NAME']."')"); + + + if (empty($rep15Stany[0]['CBL_TYPE'])) $rep15Stany[0]['CBL_TYPE'] = substr($dataZlecenie[0]['ONA_CABLE'], 0, strpos($dataZlecenie[0]['ONA_CABLE'],'/')); + + unset($il_1_tmp); + $il_1_tmp = substr($dataZlecenie[0]['ONA_CABLE'], strpos($dataZlecenie[0]['ONA_CABLE'],'/'), strpos($dataZlecenie[0]['ONA_CABLE'],'(')-strpos($dataZlecenie[0]['ONA_CABLE'],'/')); + $il_1_tmp = (double) str_replace(array(' ','/','-',','), array('','','','.'), $il_1_tmp); + + + $calbeArray[] = array( + date('Y-m-d'), + ($i+1), + $rep015_his_Array_01[$i]['WLL_BARIERA'], + $rep015_his_Array_01[$i]['WLL_NAME'], + $rep015_his_Array_01[$i]['WLE_ENG_NAME'], + $rep015_his_Array_01[$i]['WLE_ENG_NO'], + $rep15Stany[0]['ENG_VOLTAGE'], + + //$rep15Data[0]['dl_date'], + $dataZlecenie[0]['ORD_AUDIT_DATE'], + $rep15Stany[0]['CBL_TYPE'], + $dataZlecenie[0]['ONA_CABLE'], + + $rep015_his_Array_01[$i]['WLE_DATE_FROM'], + $rep15Data[0]['dl_ilosc'], + $rep15Data[0]['dl_ciezar'], + //$rep15Data[0]['dl_date'], + setDicName($rep015_his_Array_01[$i]['WLL_CAT_DIC_ID']), + $il_1_tmp + ); + + } + + unset($resArray); + $resArray = sortmddata($calbeArray,8,'ASC','str'); + + for($i=0; $i<count($resArray); $i++) + { + echo" + <tr> + <td>".($i+1)."</td> + <td>".$resArray[$i][2]."</td> + <td>".$resArray[$i][3]."</td> + <td>".$resArray[$i][4]."</td> + <td>".$resArray[$i][5]."</td> + <td>".$resArray[$i][6]."</td> + <td>".$resArray[$i][7]."</td> + <td>".$resArray[$i][8]."</td> + <td>".$resArray[$i][9]."</td> + <td>".$resArray[$i][10]."</td> + <td>".$resArray[$i][11]."</td> + <td>".$resArray[$i][12]."</td> + <td>".$resArray[$i][13]."</td> + <tr> + "; + + fwrite($myfile, + $resArray[$i][0]."|" + .($i+1)."|" + .$resArray[$i][2]."|" + .$resArray[$i][3]."|" + .$resArray[$i][4]."|" + .$resArray[$i][5]."|" + .$resArray[$i][6]."|" + .$resArray[$i][7]."|" + .$resArray[$i][8]."|" + .$resArray[$i][9]."|" + .$resArray[$i][10]."|" + .$resArray[$i][11]."|" + .$resArray[$i][12]."|" + .$resArray[$i][13]."|" + .$resArray[$i][14]."\r\n"); + + + } + fclose($myfile); + + echo'</table>'; + + echo'</br></br><h3>Podsumowanie</h3><table class="table table-bordered" >'; + echo' + <thead> + <tr> + <th style="vertical-align: middle;">Typ kabla</th> + <th style="vertical-align: middle;">Suma [m] (Długość - zlecenie)</th> + <th style="vertical-align: middle;">Suma [m] (Długość - zabudowa)</th> + <th style="vertical-align: middle;">Suma [kg] (Ciężar - zabudowa)</th> + </tr> + </thead> + '; + + //print_r($resArray); + $typVal=0; + + $typ=str_replace(array(' ',',','.'), array('','',''), $resArray[0][8]); + $typName = $resArray[0][8]; + + $typVal=$resArray[0][14]; + $typDlZabVal=$resArray[0][11]; + $typCiZabVal=$resArray[0][12]; + + + for($i=1; $i<count($resArray); $i++) + { + $newType = str_replace(array(' ',',','.'), array('','',''), $resArray[$i][8]); + if ($typ!=$newType) + { + + echo' + <tr> + <td>'.$typName.'</td> + <td>'.$typVal.'</td> + <td>'.$typDlZabVal.'</td> + <td>'.$typCiZabVal.'</td> + </tr> + '; + + fwrite($myfile1, + $typName."|" + .$typVal."|" + .$typDlZabVal."|" + .$typCiZabVal."\r\n"); + + + $typVal=0; + $typDlZabVal=0; + $typCiZabVal=0; + + + $typ=$newType; + $typName = $resArray[$i][8]; + + $typVal+=$resArray[$i][14]; + $typDlZabVal+=$resArray[$i][11]; + $typCiZabVal+=$resArray[$i][12]; + + + } + else + { + $typVal+=$resArray[$i][14]; + $typDlZabVal+=$resArray[$i][11]; + $typCiZabVal+=$resArray[$i][12]; + } + + + } + + echo' + <tr> + <td>'.$typName.'</td> + <td>'.$typVal.'</td> + <td>'.$typDlZabVal.'</td> + <td>'.$typCiZabVal.'</td> + </tr> + '; + + fwrite($myfile1, + $typName."|" + .$typVal."|" + .$typDlZabVal."|" + .$typCiZabVal."\r\n"); + + fclose($myfile1); + + echo'</table>'; + +} +// ================================================================================================================================== + + + + + +// Raport nr 16 +// ================================================================================================================================== +if ($_POST['post_action']=='rep016' && $_POST['done']=='create' && !empty($_POST['dep'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + unset($rep016_his_Array_01); + $rep016_his_Array_01 = sqlGetResAsArray("select mn1.WLL_BARIERA,mn2.WLE_DR,round(sum(mn2.WLE_ZP),2) WLE_ZP from (select DRS_ID,WLL_ID,WLL_BARIERA,WLL_NAME from seg_well_pump_eng_rel,seg_wells left join seg_dev_resources on DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID where WLL_ID=RWL_WLL_ID and DRS_DEPARTMENT='".$_POST['dep']."' order by WLL_BARIERA) mn1,(select * from seg_wells_exchanged,(select WLE_WLL_ID ID,max(WLE_NR_EXCHANGE) NR_EXCHANGE from seg_wells_exchanged GROUP by WLE_WLL_ID) tb where WLE_WLL_ID=ID and WLE_NR_EXCHANGE=NR_EXCHANGE and WLE_DR>0 and WLE_ZP>0) mn2 where mn1.WLL_ID=mn2.ID group by mn1.WLL_BARIERA,mn2.WLE_DR order by mn1.WLL_BARIERA,mn2.WLE_DR"); + unset($rep016_his_Array_02); + $rep016_his_Array_02 = sqlGetResAsArray("select WLE_DR, sum(WLE_ZP) ZP from (select mn1.WLL_BARIERA,mn2.WLE_DR,round(sum(mn2.WLE_ZP),2) WLE_ZP from (select DRS_ID,WLL_ID,WLL_BARIERA,WLL_NAME from seg_well_pump_eng_rel,seg_wells left join seg_dev_resources on DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID where WLL_ID=RWL_WLL_ID and DRS_DEPARTMENT='".$_POST['dep']."' order by WLL_BARIERA) mn1,(select * from seg_wells_exchanged,(select WLE_WLL_ID ID,max(WLE_NR_EXCHANGE) NR_EXCHANGE from seg_wells_exchanged GROUP by WLE_WLL_ID) tb where WLE_WLL_ID=ID and WLE_NR_EXCHANGE=NR_EXCHANGE and WLE_DR>0 and WLE_ZP>0) mn2 where mn1.WLL_ID=mn2.ID group by mn1.WLL_BARIERA,mn2.WLE_DR order by mn1.WLL_BARIERA,mn2.WLE_DR) tb group by WLE_DR order by ZP"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Bariera</th> + <th>Średnica kol. tłocznego [mm]</th> + <th>Suma długość kol. tłocznych [m]</th> + </tr> + </thead> + '; + unset($sumsArray); + + for ($i=0; $i<count($rep016_his_Array_01); $i++) + { + echo" + <tr> + <td>".$rep016_his_Array_01[$i]['WLL_BARIERA']."</td> + <td>".$rep016_his_Array_01[$i]['WLE_DR']."</td> + <td>".$rep016_his_Array_01[$i]['WLE_ZP']."</td> + <tr> + "; + + fwrite($myfile, + date('Y-m-d')."|" + .($i+1)."|" + .$rep016_his_Array_01[$i]['WLL_BARIERA']."|" + .$rep016_his_Array_01[$i]['WLE_DR']."|" + .$rep016_his_Array_01[$i]['WLE_ZP']."\r\n"); + + } + echo'</table>'; + + echo'<br/><br/>'; + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>RAZEM</th> + <th>Średnica kol. tłocznego [mm]</th> + <th>Suma długość kol. tłocznych [m]</th> + </tr> + </thead> + '; + + + + for ($i=0; $i<count($rep016_his_Array_02); $i++) + { + echo" + <tr> + <td></td> + <td>".$rep016_his_Array_02[$i]['WLE_DR']."</td> + <td>".$rep016_his_Array_02[$i]['ZP']."</td> + <tr> + "; + + fwrite($myfile, + date('Y-m-d')."|" + ."RAZEM"."|" + .$rep016_his_Array_02[$i]['WLL_BARIERA']."|" + .$rep016_his_Array_02[$i]['WLE_DR']."|" + .$rep016_his_Array_02[$i]['ZP']."\r\n"); + + } + echo'</table>'; + fclose($myfile); + + + +} +// ================================================================================================================================== + + + + +//Raporty EXTRA + +// Raport nr 17 - historia agregatów (pomiarów) dla studni +// ================================================================================================================================== +if ($_POST['post_action']=='rep017' && $_POST['done']=='create' && $_POST['well']>0 && !empty($_POST['date_f']) && !empty($_POST['date_t'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + unset($rep017Array); unset($wellName); + + //$rep017Array = sqlGetResAsArray("select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from (select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from rep_his_data_everyday where RHD_DATE>='".$_POST['date_f']." 00:00:00' and RHD_DATE<='".$_POST['date_t']." 23:59:59' and RHD_DRS_ID=".$_POST['well']." union select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from softspm_his.rep_his_data_everyday_his where RHD_DATE>='".$_POST['date_f']." 00:00:00' and RHD_DATE<='".$_POST['date_t']." 23:59:59' and RHD_DRS_ID=".$_POST['well'].") tb order by RHD_DATE desc"); + $rep017Array = sqlGetResAsArray("select * from (".getQuery_everyday_his($_POST['date_f'].' 00:00:00',$_POST['date_t'].' 23:59:59'," where RHD_DRS_ID=".$_POST['well']." and RHD_DATE>='".$_POST['date_f']." 00:00:00' && RHD_DATE<='".$_POST['date_t']." 23:59:59'").") tb order by RHD_DATE desc"); + $wellName = sqlStringValue("select WLL_NAME from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_ID=".$_POST['well'], WLL_NAME); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Data</th> + <th>HST0 [m]</th> + <th>HST [m]</th> + <th>HD [m]</th> + <th>Q [m3/min]</th> + <th>p1 [m]</th> + <th>p2 [m]</th> + <th>I [A]</th> + <th>U [V]</th> + <th>Pe [kW]</th> + <th>cos(φ)</th> + <th>Czas pracy [h]</th> + <th>Ilość wody [m3]</th> + </tr> + </thead> + '; + + for ($i=0; $i<count($rep017Array); $i++) + { + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep017Array[$i]['RHD_DATE']."</td> + <td>".$rep017Array[$i]['RHD_HST0_VAL']."</td> + <td>".$rep017Array[$i]['RHD_HST_VAL']."</td> + <td>".$rep017Array[$i]['RHD_HD_VAL']."</td> + <td>".round($rep017Array[$i]['RHD_Q_VAL']/60,3)."</td> + <td>".$rep017Array[$i]['RHD_P1_VAL']."</td> + <td>".$rep017Array[$i]['RHD_P2_VAL']."</td> + <td>".$rep017Array[$i]['RHD_I_VAL']."</td> + <td>".$rep017Array[$i]['RHD_U_VAL']."</td> + <td>".$rep017Array[$i]['RHD_PE_VAL']."</td> + <td>".$rep017Array[$i]['RHD_COS_VAL']."</td> + <td>".$rep017Array[$i]['RHD_WORK_TIME_VAL']."</td> + <td>".$rep017Array[$i]['RHD_VM3_VAL']."</td> + <tr> + "; + + fwrite($myfile, + $wellName."|" + .$_POST['well']."|" + .$_POST['date_f']." 00:00:00|" + .$_POST['date_t']." 23:59:59|" + .$rep017Array[$i]['RHD_DATE']."|" + .$rep017Array[$i]['RHD_HST0_VAL']."|" + .$rep017Array[$i]['RHD_HST_VAL']."|" + .$rep017Array[$i]['RHD_HD_VAL']."|" + .round($rep017Array[$i]['RHD_Q_VAL']/60,3)."|" + .$rep017Array[$i]['RHD_P1_VAL']."|" + .$rep017Array[$i]['RHD_P2_VAL']."|" + .$rep017Array[$i]['RHD_I_VAL']."|" + .$rep017Array[$i]['RHD_U_VAL']."|" + .$rep017Array[$i]['RHD_PE_VAL']."|" + .$rep017Array[$i]['RHD_COS_VAL']."|" + .$rep017Array[$i]['RHD_WORK_TIME_VAL']."|" + .$rep017Array[$i]['RHD_VM3_VAL']."\r\n"); + } + + fclose($myfile); + + echo'</table>'; +} +// ================================================================================================================================== + + + +// Raport nr 21 +// ================================================================================================================================== +if ($_POST['post_action']=='rep021' && $_POST['done']=='create' && !empty($_POST['dep'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + + unset($tmp307Array); + $tmp307Array = sqlGetResAsArray("select SES_EQU_ID,EQU_NAME,EQU_PARAM_01,EQU_PARAM_02,MCF_NAME,sum(SES_VALUE) TOT_VAL,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_POST['dep']."' and SDE_DRS_EQU_ID=SES_EQU_ID) TOT_STOCK from seg_equipments_stock,seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_EQU_ID=EQU_ID and SES_PARAM3='".$_POST['dep']."' and SES_TYPE=15 GROUP BY SES_EQU_ID order by EQU_NAME"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Nazwa</th> + <th>Średnica [mm]</th> + <th>Długość [m] / Ciśnienie [bar]</th> + <th>Producent</th> + <th>Całkowita ilość</th> + <th>Dostępna ilość</th> + </tr> + </thead> + '; + + fwrite($myfile,"#HEAD#|Nazwa|Średnica [mm]|Długość [m] / Ciśnienie [bar]|Producent|Całkowita ilość|Dostępna ilość\r\n"); + + for ($i=0; $i<count($tmp307Array); $i++) + { + echo" + <tr> + <td>".$tmp307Array[$i]['EQU_NAME']."</td> + <td>".$tmp307Array[$i]['EQU_PARAM_01']."</td> + <td>".$tmp307Array[$i]['EQU_PARAM_02']."</td> + <td>".$tmp307Array[$i]['MCF_NAME']."</td> + <td>".$tmp307Array[$i]['TOT_VAL']."</td> + <td>".round($tmp307Array[$i]['TOT_VAL']-$tmp307Array[$i]['TOT_STOCK'], 2)."</td> + <tr> + "; + + fwrite($myfile, + date('Y-m-d')."|" + .$tmp307Array[$i]['EQU_NAME']."|" + .$tmp307Array[$i]['EQU_PARAM_01']."|" + .$tmp307Array[$i]['EQU_PARAM_02']."|" + .$tmp307Array[$i]['MCF_NAME']."|" + .$tmp307Array[$i]['TOT_VAL']."|" + .round($tmp307Array[$i]['TOT_VAL']-$tmp307Array[$i]['TOT_STOCK'], 2)."\r\n"); + + + } + echo'</table>'; + + echo"<br/><br/>"; + + for ($i=0; $i<count($tmp307Array); $i++) + { + echo"<h5>Lista powiązanych obiektów: <b>".$tmp307Array[$i]['EQU_NAME']."</b></h5>"; + + fwrite($myfile,"#GOODS_HEAD#|".$i."|Lista powiązanych obiektów: ".$tmp307Array[$i]['EQU_NAME']."\r\n"); + + unset($tmp307SubArray); + $tmp307SubArray = sqlGetResAsArray("select EQU_ID,EQU_NAME,DRS_DEV_TYPE,DRS_DEV_ID,SDE_DRS_DEV_ID,SDE_VALUE from seg_dev_equipments_rel left join seg_dev_resources on SDE_DRS_DEV_ID=DRS_ID left join seg_equipments on EQU_ID=SDE_DRS_EQU_ID where SDE_DRS_EQU_ID=".$tmp307Array[$i]['SES_EQU_ID']." and SDE_PARAM3 = '".$_POST['dep']."'"); + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Nazwa</th> + <th>Przypisany do</th> + <th>Ilość</th> + </tr> + </thead> + '; + + fwrite($myfile,"#GOODS#|Lp.|Nazwa|Przypisany do|Ilość\r\n"); + + for ($j=0; $j<count($tmp307SubArray); $j++) + { + if ($tmp307SubArray[$j]['DRS_DEV_TYPE']==12) + $obNAME = sqlStringValue("select WLL_NAME from seg_wells where WLL_ID=".$tmp307SubArray[$j]['DRS_DEV_ID'],"WLL_NAME"); + else + $obNAME = sqlStringValue("select SRP_NAME from seg_reservoirs_piezometers where SRP_ID=".$tmp307SubArray[$j]['DRS_DEV_ID'],"SRP_NAME"); + + if (strlen($obNAME)==0) $obNAME="Brak powiązanego obiektu"; + + echo" + <tr> + <td>".($j+1)."</td> + <td>".$tmp307SubArray[$j]['EQU_NAME']."</td> + <td>".$obNAME."</td> + <td>".$tmp307SubArray[$j]['SDE_VALUE']."</td> + <tr> + "; + + fwrite($myfile,"#G#|".($j+1)."|" + .$tmp307SubArray[$j]['EQU_NAME']."|" + .$obNAME."|" + .$tmp307SubArray[$j]['SDE_VALUE']."\r\n"); + } + + + echo'</table>'; + echo"<br/><br/>"; + + } + + fclose($myfile); + +} +// ================================================================================================================================== + + +// Raport nr 22 +// ================================================================================================================================== +if ($_POST['post_action']=='rep022' && $_POST['done']=='create' && !empty($_POST['dep'])) +{ + $filename="../charts/".base64_decode($_POST['file']); + $myfile = fopen($filename, "a+") or die("Unable to open file!"); + + + unset($tmp308Array); + $tmp308Array = sqlGetResAsArray("select EQU_ID,count(EQU_ID) ILOSC,EQU_NAME,MCF_NAME from seg_dev_resources left join seg_equipments on DRS_DEV_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='EQUIPMENTS') and DRS_DEPARTMENT = '".$_POST['dep']."' group by EQU_ID,EQU_NAME,MCF_NAME order by EQU_NAME"); + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Nazwa</th> + <th>Producent</th> + <th>Ilość</th> + </tr> + </thead> + '; + + fwrite($myfile,"#HEAD#|Nazwa|Producent|Ilość\r\n"); + + + for ($i=0; $i<count($tmp308Array); $i++) + { + + echo" + <tr> + <td>".$tmp308Array[$i]['EQU_NAME']."</td> + <td>".$tmp308Array[$i]['MCF_NAME']."</td> + <td>".$tmp308Array[$i]['ILOSC']."</td> + <tr> + "; + fwrite($myfile, + date('Y-m-d')."|" + .$tmp308Array[$i]['EQU_NAME']."|" + .$tmp308Array[$i]['MCF_NAME']."|" + .$tmp308Array[$i]['ILOSC']."\r\n"); + + } + + echo'</table>'; + echo"<br/><br/>"; + + + for ($i=0; $i<count($tmp308Array); $i++) + { + echo"<h5>Lista powiązanych obiektów: <b>".$tmp308Array[$i]['EQU_NAME']."</b></h5>"; + + fwrite($myfile,"#GOODS_HEAD#|".$i."|Lista powiązanych obiektów: ".$tmp308Array[$i]['EQU_NAME']."\r\n"); + + + unset($tmp308SubArray); + $tmp308SubArray = sqlGetResAsArray("select DRS_ID,SDE_DRS_DEV_ID,DRS_SN_NUMBER,DRS_RESOURCES_DIC_ID from seg_dev_resources left join seg_dev_equipments_rel on DRS_ID=SDE_DRS_EQU_ID where DRS_DEV_TYPE=14 and DRS_DEPARTMENT = '".$_POST['dep']."' and DRS_DEV_ID=".$tmp308Array[$i]['EQU_ID']." order by DRS_SN_NUMBER"); + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Nazwa</th> + <th>Nr seryjny</th> + <th>Przypisany do</th> + <th>Status</th> + </tr> + </thead> + '; + + fwrite($myfile,"#GOODS#|Lp.|Nazwa|Nr seryjny|Przypisany do|Status\r\n"); + + for ($j=0; $j<count($tmp308SubArray); $j++) + { + $obNAME=null;$dID2=null; + $wynik2 = mysql_query("select DRS_DEV_ID,DRS_DEV_TYPE from seg_dev_equipments_rel left join seg_dev_resources on DRS_ID=SDE_DRS_DEV_ID where SDE_DRS_EQU_ID=".$tmp308SubArray[$j]['DRS_ID']); + if($wynik2)while ($r2 = mysql_fetch_array($wynik2)) + { + + $dID2 = $r2["DRS_DEV_ID"]; + $dTP2 = $r2["DRS_DEV_TYPE"]; + + if ($dTP2==12) + $obNAME = sqlStringValue("select WLL_NAME from seg_wells where WLL_ID=".$dID2,"WLL_NAME"); + else + $obNAME = sqlStringValue("select SRP_NAME from seg_reservoirs_piezometers where SRP_ID=".$dID2,"SRP_NAME"); + + } + if (strlen($obNAME)==0) + $obNAME="Brak powiązanego obiektu"; + + + + + echo" + <tr> + <td>".($j+1)."</td> + <td>".$tmp308Array[$i]['EQU_NAME']."</td> + <td>".$tmp308SubArray[$j]['DRS_SN_NUMBER']."</td> + <td>".$obNAME."</td> + <td>".setDicName($tmp308SubArray[$j]['DRS_RESOURCES_DIC_ID'])."</td> + <tr> + "; + + + fwrite($myfile,"#G#|".($j+1)."|" + .$tmp308Array[$i]['EQU_NAME']."|" + .$tmp308SubArray[$j]['DRS_SN_NUMBER']."|" + .$obNAME."|" + .setDicName($tmp308SubArray[$j]['DRS_RESOURCES_DIC_ID'])."\r\n"); + + } + + + + echo'</table>'; + echo"<br/><br/>"; + } + + + fclose($myfile); +} +// ================================================================================================================================== + + +// Raport nr 23 - Raport synchronizacji danych ze Stacją Prób +// ================================================================================================================================== +if ($_POST['post_action']=='rep023' && $_POST['done']=='create') +{ + unset($rep023Array); + $rep023Array = sqlGetResAsArray("select * from sys_stacja_prob_upload_logs order by SPU_UPLOAD_SP_FILE desc limit 31"); + + + unset($isWaiting); + if (sqlValue("select count(*) from sys_stacja_prob_upload_logs where SPU_MADE_DB_PROC is null")==0) + { + unset($lasUpPup); + $lasUpPup = sqlGetResAsArray("select max(stp_stapo_data_akt) PAK, SUBSTRING(max(stp_stapo_audit_date),1,10) PAD from stp_stapo"); + echo'Stany pomp z: <b>'.$lasUpPup[0]['PAK'].'</b>, zaczytane dnia '.$lasUpPup[0]['PAD'].'<br/>'; + + $lasUpEng = sqlGetResAsArray("select max(stp_stamot_data_akt) EAK, SUBSTRING(max(stp_stamot_audit_date),1,10) EAD from stp_stamot"); + echo'Stany silników z: <b>'.$lasUpEng[0]['EAK'].'</b>, zaczytane dnia '.$lasUpEng[0]['EAD'].'<br/>'; + + unset($lasUpCab); + $lasUpCab = sqlGetResAsArray("select (case when max(stp_stakabel_g_data_przy)>=max(stp_stakabel_g_data_roz) then SUBSTRING(max(stp_stakabel_g_data_przy),1,10) else SUBSTRING(max(stp_stakabel_g_data_roz),1,10) end) CAK, SUBSTRING(max(stp_stakabel_g_audit_date),1,10) CAD from stp_stakabel_g"); + echo'Stany kabli z: <b>'.$lasUpCab[0]['CAK'].'</b>, zaczytane dnia '.$lasUpCab[0]['CAD'].'<br/><br/>'; + } + else + { + echo'Pliki ze Stacji Prób zostały wgrane na serwer i czekają na synchronizację:<br/>'; + unset($lasUpPup); + $lasUpPup = sqlGetResAsArray("select max(stp_stapo_data_akt) PAK from stp_stapo"); + echo'Dane dla stanów pomp do synchronizacji z: <b>'.$lasUpPup[0]['PAK'].'</b><br/>'; + + $lasUpEng = sqlGetResAsArray("select max(stp_stamot_data_akt) EAK from stp_stamot"); + echo'Dane dla stanów silników do synchronizacji z: <b>'.$lasUpEng[0]['EAK'].'</b><br/>'; + + unset($lasUpCab); + $lasUpCab = sqlGetResAsArray("select (case when max(stp_stakabel_g_data_przy)>=max(stp_stakabel_g_data_roz) then SUBSTRING(max(stp_stakabel_g_data_przy),1,10) else SUBSTRING(max(stp_stakabel_g_data_roz),1,10) end) CAK, SUBSTRING(max(stp_stakabel_g_audit_date),1,10) CAD from stp_stakabel_g"); + echo'Dane dla kabli do synchronizacji z: <b>'.$lasUpCab[0]['CAK'].'</b><br/><br/>'; + } + + + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Data plików DATA</th> + <th>Data synchronizacji</th> + </tr> + </thead> + '; + + for ($i=0; $i<count($rep023Array); $i++) + { + echo" + <tr> + <td>".($i+1)."</td> + <td>".$rep023Array[$i]['SPU_UPLOAD_SP_FILE']."</td> + <td>".$rep023Array[$i]['SPU_MADE_DB_PROC']."</td> + <tr> + "; + } + + echo'</table>'; +} +// ================================================================================================================================== + + + +mysql_close($con); +?> diff --git a/reports/bootstrap.min.css b/reports/bootstrap.min.css new file mode 100644 index 0000000..98dc59d --- /dev/null +++ b/reports/bootstrap.min.css @@ -0,0 +1,14 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=1e7a9532c8bca00ec827) + * Config saved to config.json and https://gist.github.com/1e7a9532c8bca00ec827 + *//*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/reports/bootstrap.min.js b/reports/bootstrap.min.js new file mode 100644 index 0000000..e79c065 --- /dev/null +++ b/reports/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active"); +d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/reports/datepicker-time/css/bootstrap-datetimepicker.css b/reports/datepicker-time/css/bootstrap-datetimepicker.css new file mode 100644 index 0000000..2202d9c --- /dev/null +++ b/reports/datepicker-time/css/bootstrap-datetimepicker.css @@ -0,0 +1,418 @@ +/*! + * Datetimepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ +.datetimepicker { + padding: 4px; + margin-top: 1px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + direction: ltr; +} + +.datetimepicker-inline { + width: 220px; +} + +.datetimepicker.datetimepicker-rtl { + direction: rtl; +} + +.datetimepicker.datetimepicker-rtl table tr td span { + float: right; +} + +.datetimepicker-dropdown, .datetimepicker-dropdown-left { + top: 0; + left: 0; +} + +[class*=" datetimepicker-dropdown"]:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #cccccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; +} + +[class*=" datetimepicker-dropdown"]:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; +} + +[class*=" datetimepicker-dropdown-top"]:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid #cccccc; + border-top-color: rgba(0, 0, 0, 0.2); + border-bottom: 0; +} + +[class*=" datetimepicker-dropdown-top"]:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.datetimepicker-dropdown-bottom-left:before { + top: -7px; + right: 6px; +} + +.datetimepicker-dropdown-bottom-left:after { + top: -6px; + right: 7px; +} + +.datetimepicker-dropdown-bottom-right:before { + top: -7px; + left: 6px; +} + +.datetimepicker-dropdown-bottom-right:after { + top: -6px; + left: 7px; +} + +.datetimepicker-dropdown-top-left:before { + bottom: -7px; + right: 6px; +} + +.datetimepicker-dropdown-top-left:after { + bottom: -6px; + right: 7px; +} + +.datetimepicker-dropdown-top-right:before { + bottom: -7px; + left: 6px; +} + +.datetimepicker-dropdown-top-right:after { + bottom: -6px; + left: 7px; +} + +.datetimepicker > div { + display: none; +} + +.datetimepicker.minutes div.datetimepicker-minutes { + display: block; +} + +.datetimepicker.hours div.datetimepicker-hours { + display: block; +} + +.datetimepicker.days div.datetimepicker-days { + display: block; +} + +.datetimepicker.months div.datetimepicker-months { + display: block; +} + +.datetimepicker.years div.datetimepicker-years { + display: block; +} + +.datetimepicker table { + margin: 0; +} + +.datetimepicker td, +.datetimepicker th { + text-align: center; + width: 20px; + height: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + border: none; +} + +.table-striped .datetimepicker table tr td, +.table-striped .datetimepicker table tr th { + background-color: transparent; +} + +.datetimepicker table tr td.minute:hover { + background: #eeeeee; + cursor: pointer; +} + +.datetimepicker table tr td.hour:hover { + background: #eeeeee; + cursor: pointer; +} + +.datetimepicker table tr td.day:hover { + background: #eeeeee; + cursor: pointer; +} + +.datetimepicker table tr td.old, +.datetimepicker table tr td.new { + color: #999999; +} + +.datetimepicker table tr td.disabled, +.datetimepicker table tr td.disabled:hover { + background: none; + color: #999999; + cursor: default; +} + +.datetimepicker table tr td.today, +.datetimepicker table tr td.today:hover, +.datetimepicker table tr td.today.disabled, +.datetimepicker table tr td.today.disabled:hover { + background-color: #fde19a; + background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); + background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a); + background-image: -o-linear-gradient(top, #fdd49a, #fdf59a); + background-image: linear-gradient(top, #fdd49a, #fdf59a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); + border-color: #fdf59a #fdf59a #fbed50; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.datetimepicker table tr td.today:hover, +.datetimepicker table tr td.today:hover:hover, +.datetimepicker table tr td.today.disabled:hover, +.datetimepicker table tr td.today.disabled:hover:hover, +.datetimepicker table tr td.today:active, +.datetimepicker table tr td.today:hover:active, +.datetimepicker table tr td.today.disabled:active, +.datetimepicker table tr td.today.disabled:hover:active, +.datetimepicker table tr td.today.active, +.datetimepicker table tr td.today:hover.active, +.datetimepicker table tr td.today.disabled.active, +.datetimepicker table tr td.today.disabled:hover.active, +.datetimepicker table tr td.today.disabled, +.datetimepicker table tr td.today:hover.disabled, +.datetimepicker table tr td.today.disabled.disabled, +.datetimepicker table tr td.today.disabled:hover.disabled, +.datetimepicker table tr td.today[disabled], +.datetimepicker table tr td.today:hover[disabled], +.datetimepicker table tr td.today.disabled[disabled], +.datetimepicker table tr td.today.disabled:hover[disabled] { + background-color: #fdf59a; +} + +.datetimepicker table tr td.today:active, +.datetimepicker table tr td.today:hover:active, +.datetimepicker table tr td.today.disabled:active, +.datetimepicker table tr td.today.disabled:hover:active, +.datetimepicker table tr td.today.active, +.datetimepicker table tr td.today:hover.active, +.datetimepicker table tr td.today.disabled.active, +.datetimepicker table tr td.today.disabled:hover.active { + background-color: #fbf069; +} + +.datetimepicker table tr td.active, +.datetimepicker table tr td.active:hover, +.datetimepicker table tr td.active.disabled, +.datetimepicker table tr td.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(top, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.datetimepicker table tr td.active:hover, +.datetimepicker table tr td.active:hover:hover, +.datetimepicker table tr td.active.disabled:hover, +.datetimepicker table tr td.active.disabled:hover:hover, +.datetimepicker table tr td.active:active, +.datetimepicker table tr td.active:hover:active, +.datetimepicker table tr td.active.disabled:active, +.datetimepicker table tr td.active.disabled:hover:active, +.datetimepicker table tr td.active.active, +.datetimepicker table tr td.active:hover.active, +.datetimepicker table tr td.active.disabled.active, +.datetimepicker table tr td.active.disabled:hover.active, +.datetimepicker table tr td.active.disabled, +.datetimepicker table tr td.active:hover.disabled, +.datetimepicker table tr td.active.disabled.disabled, +.datetimepicker table tr td.active.disabled:hover.disabled, +.datetimepicker table tr td.active[disabled], +.datetimepicker table tr td.active:hover[disabled], +.datetimepicker table tr td.active.disabled[disabled], +.datetimepicker table tr td.active.disabled:hover[disabled] { + background-color: #0044cc; +} + +.datetimepicker table tr td.active:active, +.datetimepicker table tr td.active:hover:active, +.datetimepicker table tr td.active.disabled:active, +.datetimepicker table tr td.active.disabled:hover:active, +.datetimepicker table tr td.active.active, +.datetimepicker table tr td.active:hover.active, +.datetimepicker table tr td.active.disabled.active, +.datetimepicker table tr td.active.disabled:hover.active { + background-color: #003399; +} + +.datetimepicker table tr td span { + display: block; + width: 23%; + height: 54px; + line-height: 54px; + float: left; + margin: 1%; + cursor: pointer; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.datetimepicker .datetimepicker-hours span { + height: 26px; + line-height: 26px; +} + +.datetimepicker .datetimepicker-hours table tr td span.hour_am, +.datetimepicker .datetimepicker-hours table tr td span.hour_pm { + width: 14.6%; +} + +.datetimepicker .datetimepicker-hours fieldset legend, +.datetimepicker .datetimepicker-minutes fieldset legend { + margin-bottom: inherit; + line-height: 30px; +} + +.datetimepicker .datetimepicker-minutes span { + height: 26px; + line-height: 26px; +} + +.datetimepicker table tr td span:hover { + background: #eeeeee; +} + +.datetimepicker table tr td span.disabled, +.datetimepicker table tr td span.disabled:hover { + background: none; + color: #999999; + cursor: default; +} + +.datetimepicker table tr td span.active, +.datetimepicker table tr td span.active:hover, +.datetimepicker table tr td span.active.disabled, +.datetimepicker table tr td span.active.disabled:hover { + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -ms-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(top, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.datetimepicker table tr td span.active:hover, +.datetimepicker table tr td span.active:hover:hover, +.datetimepicker table tr td span.active.disabled:hover, +.datetimepicker table tr td span.active.disabled:hover:hover, +.datetimepicker table tr td span.active:active, +.datetimepicker table tr td span.active:hover:active, +.datetimepicker table tr td span.active.disabled:active, +.datetimepicker table tr td span.active.disabled:hover:active, +.datetimepicker table tr td span.active.active, +.datetimepicker table tr td span.active:hover.active, +.datetimepicker table tr td span.active.disabled.active, +.datetimepicker table tr td span.active.disabled:hover.active, +.datetimepicker table tr td span.active.disabled, +.datetimepicker table tr td span.active:hover.disabled, +.datetimepicker table tr td span.active.disabled.disabled, +.datetimepicker table tr td span.active.disabled:hover.disabled, +.datetimepicker table tr td span.active[disabled], +.datetimepicker table tr td span.active:hover[disabled], +.datetimepicker table tr td span.active.disabled[disabled], +.datetimepicker table tr td span.active.disabled:hover[disabled] { + background-color: #0044cc; +} + +.datetimepicker table tr td span.active:active, +.datetimepicker table tr td span.active:hover:active, +.datetimepicker table tr td span.active.disabled:active, +.datetimepicker table tr td span.active.disabled:hover:active, +.datetimepicker table tr td span.active.active, +.datetimepicker table tr td span.active:hover.active, +.datetimepicker table tr td span.active.disabled.active, +.datetimepicker table tr td span.active.disabled:hover.active { + background-color: #003399; +} + +.datetimepicker table tr td span.old { + color: #999999; +} + +.datetimepicker th.switch { + width: 145px; +} + +.datetimepicker th span.glyphicon { + pointer-events: none; +} + +.datetimepicker thead tr:first-child th, +.datetimepicker tfoot th { + cursor: pointer; +} + +.datetimepicker thead tr:first-child th:hover, +.datetimepicker tfoot th:hover { + background: #eeeeee; +} + +.input-append.date .add-on i, +.input-prepend.date .add-on i, +.input-group.date .input-group-addon span { + cursor: pointer; + width: 14px; + height: 14px; +} diff --git a/reports/datepicker-time/css/bootstrap-datetimepicker.min.css b/reports/datepicker-time/css/bootstrap-datetimepicker.min.css new file mode 100644 index 0000000..d0f3dff --- /dev/null +++ b/reports/datepicker-time/css/bootstrap-datetimepicker.min.css @@ -0,0 +1,9 @@ +/*! + * Datetimepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.datetimepicker{padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datetimepicker-inline{width:220px}.datetimepicker.datetimepicker-rtl{direction:rtl}.datetimepicker.datetimepicker-rtl table tr td span{float:right}.datetimepicker-dropdown,.datetimepicker-dropdown-left{top:0;left:0}[class*=" datetimepicker-dropdown"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute}[class*=" datetimepicker-dropdown"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute}[class*=" datetimepicker-dropdown-top"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0}[class*=" datetimepicker-dropdown-top"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;border-bottom:0}.datetimepicker-dropdown-bottom-left:before{top:-7px;right:6px}.datetimepicker-dropdown-bottom-left:after{top:-6px;right:7px}.datetimepicker-dropdown-bottom-right:before{top:-7px;left:6px}.datetimepicker-dropdown-bottom-right:after{top:-6px;left:7px}.datetimepicker-dropdown-top-left:before{bottom:-7px;right:6px}.datetimepicker-dropdown-top-left:after{bottom:-6px;right:7px}.datetimepicker-dropdown-top-right:before{bottom:-7px;left:6px}.datetimepicker-dropdown-top-right:after{bottom:-6px;left:7px}.datetimepicker>div{display:none}.datetimepicker.minutes div.datetimepicker-minutes{display:block}.datetimepicker.hours div.datetimepicker-hours{display:block}.datetimepicker.days div.datetimepicker-days{display:block}.datetimepicker.months div.datetimepicker-months{display:block}.datetimepicker.years div.datetimepicker-years{display:block}.datetimepicker table{margin:0}.datetimepicker td,.datetimepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:0}.table-striped .datetimepicker table tr td,.table-striped .datetimepicker table tr th{background-color:transparent}.datetimepicker table tr td.minute:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.hour:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.day:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.old,.datetimepicker table tr td.new{color:#999}.datetimepicker table tr td.disabled,.datetimepicker table tr td.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td.today,.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(top,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a',endColorstr='#fdf59a',GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today:hover:hover,.datetimepicker table tr td.today.disabled:hover,.datetimepicker table tr td.today.disabled:hover:hover,.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today:hover.disabled,.datetimepicker table tr td.today.disabled.disabled,.datetimepicker table tr td.today.disabled:hover.disabled,.datetimepicker table tr td.today[disabled],.datetimepicker table tr td.today:hover[disabled],.datetimepicker table tr td.today.disabled[disabled],.datetimepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active{background-color:#fbf069}.datetimepicker table tr td.active,.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active:hover:hover,.datetimepicker table tr td.active.disabled:hover,.datetimepicker table tr td.active.disabled:hover:hover,.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active:hover.disabled,.datetimepicker table tr td.active.disabled.disabled,.datetimepicker table tr td.active.disabled:hover.disabled,.datetimepicker table tr td.active[disabled],.datetimepicker table tr td.active:hover[disabled],.datetimepicker table tr td.active.disabled[disabled],.datetimepicker table tr td.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datetimepicker .datetimepicker-hours span{height:26px;line-height:26px}.datetimepicker .datetimepicker-hours table tr td span.hour_am,.datetimepicker .datetimepicker-hours table tr td span.hour_pm{width:14.6%}.datetimepicker .datetimepicker-hours fieldset legend,.datetimepicker .datetimepicker-minutes fieldset legend{margin-bottom:inherit;line-height:30px}.datetimepicker .datetimepicker-minutes span{height:26px;line-height:26px}.datetimepicker table tr td span:hover{background:#eee}.datetimepicker table tr td span.disabled,.datetimepicker table tr td span.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td span.active,.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(top,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active:hover:hover,.datetimepicker table tr td span.active.disabled:hover,.datetimepicker table tr td span.active.disabled:hover:hover,.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active:hover.disabled,.datetimepicker table tr td span.active.disabled.disabled,.datetimepicker table tr td span.active.disabled:hover.disabled,.datetimepicker table tr td span.active[disabled],.datetimepicker table tr td span.active:hover[disabled],.datetimepicker table tr td span.active.disabled[disabled],.datetimepicker table tr td span.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span.old{color:#999}.datetimepicker th.switch{width:145px}.datetimepicker th span.glyphicon{pointer-events:none}.datetimepicker thead tr:first-child th,.datetimepicker tfoot th{cursor:pointer}.datetimepicker thead tr:first-child th:hover,.datetimepicker tfoot th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i,.input-group.date .input-group-addon span{cursor:pointer;width:14px;height:14px} \ No newline at end of file diff --git a/reports/datepicker-time/js/bootstrap-datetimepicker.js b/reports/datepicker-time/js/bootstrap-datetimepicker.js new file mode 100644 index 0000000..405d801 --- /dev/null +++ b/reports/datepicker-time/js/bootstrap-datetimepicker.js @@ -0,0 +1,1902 @@ +/* ========================================================= + * bootstrap-datetimepicker.js + * ========================================================= + * Copyright 2012 Stefan Petre + * + * Improvements by Andrew Rowls + * Improvements by Sébastien Malot + * Improvements by Yun Lai + * Improvements by Kenneth Henderick + * Improvements by CuGBabyBeaR + * Improvements by Christian Vaas <auspex@auspex.eu> + * + * Project URL : http://www.malot.fr/bootstrap-datetimepicker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + +(function(factory){ + if (typeof define === 'function' && define.amd) + define(['jquery'], factory); + else if (typeof exports === 'object') + factory(require('jquery')); + else + factory(jQuery); + +}(function($, undefined){ + + // Add ECMA262-5 Array methods if not supported natively (IE8) + if (!('indexOf' in Array.prototype)) { + Array.prototype.indexOf = function (find, i) { + if (i === undefined) i = 0; + if (i < 0) i += this.length; + if (i < 0) i = 0; + for (var n = this.length; i < n; i++) { + if (i in this && this[i] === find) { + return i; + } + } + return -1; + } + } + + function elementOrParentIsFixed (element) { + var $element = $(element); + var $checkElements = $element.add($element.parents()); + var isFixed = false; + $checkElements.each(function(){ + if ($(this).css('position') === 'fixed') { + isFixed = true; + return false; + } + }); + return isFixed; + } + + function UTCDate() { + return new Date(Date.UTC.apply(Date, arguments)); + } + + function UTCToday() { + var today = new Date(); + return UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate(), today.getUTCHours(), today.getUTCMinutes(), today.getUTCSeconds(), 0); + } + + // Picker object + var Datetimepicker = function (element, options) { + var that = this; + + this.element = $(element); + + // add container for single page application + // when page switch the datetimepicker div will be removed also. + this.container = options.container || 'body'; + + this.language = options.language || this.element.data('date-language') || 'en'; + this.language = this.language in dates ? this.language : this.language.split('-')[0]; // fr-CA fallback to fr + this.language = this.language in dates ? this.language : 'en'; + this.isRTL = dates[this.language].rtl || false; + this.formatType = options.formatType || this.element.data('format-type') || 'standard'; + this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType); + this.isInline = false; + this.isVisible = false; + this.isInput = this.element.is('input'); + this.fontAwesome = options.fontAwesome || this.element.data('font-awesome') || false; + + this.bootcssVer = options.bootcssVer || (this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 )); + + this.component = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o').parent()) : false; + this.componentReset = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find('.input-group-addon .glyphicon-remove, .input-group-addon .fa-times').parent():this.element.find('.add-on .icon-remove, .add-on .fa-times').parent()) : false; + this.hasInput = this.component && this.element.find('input').length; + if (this.component && this.component.length === 0) { + this.component = false; + } + this.linkField = options.linkField || this.element.data('link-field') || false; + this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType); + this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5; + this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right'; + this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false; + this.initialDate = options.initialDate || new Date(); + this.zIndex = options.zIndex || this.element.data('z-index') || undefined; + this.title = typeof options.title === 'undefined' ? false : options.title; + this.defaultTimeZone = (new Date).toString().split('(')[1].slice(0, -1); + this.timezone = options.timezone || this.defaultTimeZone; + + this.icons = { + leftArrow: this.fontAwesome ? 'fa-arrow-left' : (this.bootcssVer === 3 ? 'glyphicon-arrow-left' : 'icon-arrow-left'), + rightArrow: this.fontAwesome ? 'fa-arrow-right' : (this.bootcssVer === 3 ? 'glyphicon-arrow-right' : 'icon-arrow-right') + } + this.icontype = this.fontAwesome ? 'fa' : 'glyphicon'; + + this._attachEvents(); + + this.clickedOutside = function (e) { + // Clicked outside the datetimepicker, hide it + if ($(e.target).closest('.datetimepicker').length === 0) { + that.hide(); + } + } + + this.formatViewType = 'datetime'; + if ('formatViewType' in options) { + this.formatViewType = options.formatViewType; + } else if ('formatViewType' in this.element.data()) { + this.formatViewType = this.element.data('formatViewType'); + } + + this.minView = 0; + if ('minView' in options) { + this.minView = options.minView; + } else if ('minView' in this.element.data()) { + this.minView = this.element.data('min-view'); + } + this.minView = DPGlobal.convertViewMode(this.minView); + + this.maxView = DPGlobal.modes.length - 1; + if ('maxView' in options) { + this.maxView = options.maxView; + } else if ('maxView' in this.element.data()) { + this.maxView = this.element.data('max-view'); + } + this.maxView = DPGlobal.convertViewMode(this.maxView); + + this.wheelViewModeNavigation = false; + if ('wheelViewModeNavigation' in options) { + this.wheelViewModeNavigation = options.wheelViewModeNavigation; + } else if ('wheelViewModeNavigation' in this.element.data()) { + this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation'); + } + + this.wheelViewModeNavigationInverseDirection = false; + + if ('wheelViewModeNavigationInverseDirection' in options) { + this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection; + } else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) { + this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir'); + } + + this.wheelViewModeNavigationDelay = 100; + if ('wheelViewModeNavigationDelay' in options) { + this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay; + } else if ('wheelViewModeNavigationDelay' in this.element.data()) { + this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay'); + } + + this.startViewMode = 2; + if ('startView' in options) { + this.startViewMode = options.startView; + } else if ('startView' in this.element.data()) { + this.startViewMode = this.element.data('start-view'); + } + this.startViewMode = DPGlobal.convertViewMode(this.startViewMode); + this.viewMode = this.startViewMode; + + this.viewSelect = this.minView; + if ('viewSelect' in options) { + this.viewSelect = options.viewSelect; + } else if ('viewSelect' in this.element.data()) { + this.viewSelect = this.element.data('view-select'); + } + this.viewSelect = DPGlobal.convertViewMode(this.viewSelect); + + this.forceParse = true; + if ('forceParse' in options) { + this.forceParse = options.forceParse; + } else if ('dateForceParse' in this.element.data()) { + this.forceParse = this.element.data('date-force-parse'); + } + var template = this.bootcssVer === 3 ? DPGlobal.templateV3 : DPGlobal.template; + while (template.indexOf('{iconType}') !== -1) { + template = template.replace('{iconType}', this.icontype); + } + while (template.indexOf('{leftArrow}') !== -1) { + template = template.replace('{leftArrow}', this.icons.leftArrow); + } + while (template.indexOf('{rightArrow}') !== -1) { + template = template.replace('{rightArrow}', this.icons.rightArrow); + } + this.picker = $(template) + .appendTo(this.isInline ? this.element : this.container) // 'body') + .on({ + click: $.proxy(this.click, this), + mousedown: $.proxy(this.mousedown, this) + }); + + if (this.wheelViewModeNavigation) { + if ($.fn.mousewheel) { + this.picker.on({mousewheel: $.proxy(this.mousewheel, this)}); + } else { + console.log('Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option'); + } + } + + if (this.isInline) { + this.picker.addClass('datetimepicker-inline'); + } else { + this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu'); + } + if (this.isRTL) { + this.picker.addClass('datetimepicker-rtl'); + var selector = this.bootcssVer === 3 ? '.prev span, .next span' : '.prev i, .next i'; + this.picker.find(selector).toggleClass(this.icons.leftArrow + ' ' + this.icons.rightArrow); + } + + $(document).on('mousedown', this.clickedOutside); + + this.autoclose = false; + if ('autoclose' in options) { + this.autoclose = options.autoclose; + } else if ('dateAutoclose' in this.element.data()) { + this.autoclose = this.element.data('date-autoclose'); + } + + this.keyboardNavigation = true; + if ('keyboardNavigation' in options) { + this.keyboardNavigation = options.keyboardNavigation; + } else if ('dateKeyboardNavigation' in this.element.data()) { + this.keyboardNavigation = this.element.data('date-keyboard-navigation'); + } + + this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false); + this.clearBtn = (options.clearBtn || this.element.data('date-clear-btn') || false); + this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false); + + this.weekStart = ((options.weekStart || this.element.data('date-weekstart') || dates[this.language].weekStart || 0) % 7); + this.weekEnd = ((this.weekStart + 6) % 7); + this.startDate = -Infinity; + this.endDate = Infinity; + this.datesDisabled = []; + this.daysOfWeekDisabled = []; + this.setStartDate(options.startDate || this.element.data('date-startdate')); + this.setEndDate(options.endDate || this.element.data('date-enddate')); + this.setDatesDisabled(options.datesDisabled || this.element.data('date-dates-disabled')); + this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled')); + this.setMinutesDisabled(options.minutesDisabled || this.element.data('date-minute-disabled')); + this.setHoursDisabled(options.hoursDisabled || this.element.data('date-hour-disabled')); + this.fillDow(); + this.fillMonths(); + this.update(); + this.showMode(); + + if (this.isInline) { + this.show(); + } + }; + + Datetimepicker.prototype = { + constructor: Datetimepicker, + + _events: [], + _attachEvents: function () { + this._detachEvents(); + if (this.isInput) { // single input + this._events = [ + [this.element, { + focus: $.proxy(this.show, this), + keyup: $.proxy(this.update, this), + keydown: $.proxy(this.keydown, this) + }] + ]; + } + else if (this.component && this.hasInput) { // component: input + button + this._events = [ + // For components that are not readonly, allow keyboard nav + [this.element.find('input'), { + focus: $.proxy(this.show, this), + keyup: $.proxy(this.update, this), + keydown: $.proxy(this.keydown, this) + }], + [this.component, { + click: $.proxy(this.show, this) + }] + ]; + if (this.componentReset) { + this._events.push([ + this.componentReset, + {click: $.proxy(this.reset, this)} + ]); + } + } + else if (this.element.is('div')) { // inline datetimepicker + this.isInline = true; + } + else { + this._events = [ + [this.element, { + click: $.proxy(this.show, this) + }] + ]; + } + for (var i = 0, el, ev; i < this._events.length; i++) { + el = this._events[i][0]; + ev = this._events[i][1]; + el.on(ev); + } + }, + + _detachEvents: function () { + for (var i = 0, el, ev; i < this._events.length; i++) { + el = this._events[i][0]; + ev = this._events[i][1]; + el.off(ev); + } + this._events = []; + }, + + show: function (e) { + this.picker.show(); + this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); + if (this.forceParse) { + this.update(); + } + this.place(); + $(window).on('resize', $.proxy(this.place, this)); + if (e) { + e.stopPropagation(); + e.preventDefault(); + } + this.isVisible = true; + this.element.trigger({ + type: 'show', + date: this.date + }); + }, + + hide: function (e) { + if (!this.isVisible) return; + if (this.isInline) return; + this.picker.hide(); + $(window).off('resize', this.place); + this.viewMode = this.startViewMode; + this.showMode(); + if (!this.isInput) { + $(document).off('mousedown', this.hide); + } + + if ( + this.forceParse && + ( + this.isInput && this.element.val() || + this.hasInput && this.element.find('input').val() + ) + ) + this.setValue(); + this.isVisible = false; + this.element.trigger({ + type: 'hide', + date: this.date + }); + }, + + remove: function () { + this._detachEvents(); + $(document).off('mousedown', this.clickedOutside); + this.picker.remove(); + delete this.picker; + delete this.element.data().datetimepicker; + }, + + getDate: function () { + var d = this.getUTCDate(); + return new Date(d.getTime() + (d.getTimezoneOffset() * 60000)); + }, + + getUTCDate: function () { + return this.date; + }, + + getInitialDate: function () { + return this.initialDate + }, + + setInitialDate: function (initialDate) { + this.initialDate = initialDate; + }, + + setDate: function (d) { + this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000))); + }, + + setUTCDate: function (d) { + if (d >= this.startDate && d <= this.endDate) { + this.date = d; + this.setValue(); + this.viewDate = this.date; + this.fill(); + } else { + this.element.trigger({ + type: 'outOfRange', + date: d, + startDate: this.startDate, + endDate: this.endDate + }); + } + }, + + setFormat: function (format) { + this.format = DPGlobal.parseFormat(format, this.formatType); + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element && element.val()) { + this.setValue(); + } + }, + + setValue: function () { + var formatted = this.getFormattedDate(); + if (!this.isInput) { + if (this.component) { + this.element.find('input').val(formatted); + } + this.element.data('date', formatted); + } else { + this.element.val(formatted); + } + if (this.linkField) { + $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat)); + } + }, + + getFormattedDate: function (format) { + if (format == undefined) format = this.format; + return DPGlobal.formatDate(this.date, format, this.language, this.formatType, this.timezone); + }, + + setStartDate: function (startDate) { + this.startDate = startDate || -Infinity; + if (this.startDate !== -Infinity) { + this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType, this.timezone); + } + this.update(); + this.updateNavArrows(); + }, + + setEndDate: function (endDate) { + this.endDate = endDate || Infinity; + if (this.endDate !== Infinity) { + this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType, this.timezone); + } + this.update(); + this.updateNavArrows(); + }, + + setDatesDisabled: function (datesDisabled) { + this.datesDisabled = datesDisabled || []; + if (!$.isArray(this.datesDisabled)) { + this.datesDisabled = this.datesDisabled.split(/,\s*/); + } + this.datesDisabled = $.map(this.datesDisabled, function (d) { + return DPGlobal.parseDate(d, this.format, this.language, this.formatType, this.timezone).toDateString(); + }); + this.update(); + this.updateNavArrows(); + }, + + setTitle: function (selector, value) { + return this.picker.find(selector) + .find('th:eq(1)') + .text(this.title === false ? value : this.title); + }, + + setDaysOfWeekDisabled: function (daysOfWeekDisabled) { + this.daysOfWeekDisabled = daysOfWeekDisabled || []; + if (!$.isArray(this.daysOfWeekDisabled)) { + this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/); + } + this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) { + return parseInt(d, 10); + }); + this.update(); + this.updateNavArrows(); + }, + + setMinutesDisabled: function (minutesDisabled) { + this.minutesDisabled = minutesDisabled || []; + if (!$.isArray(this.minutesDisabled)) { + this.minutesDisabled = this.minutesDisabled.split(/,\s*/); + } + this.minutesDisabled = $.map(this.minutesDisabled, function (d) { + return parseInt(d, 10); + }); + this.update(); + this.updateNavArrows(); + }, + + setHoursDisabled: function (hoursDisabled) { + this.hoursDisabled = hoursDisabled || []; + if (!$.isArray(this.hoursDisabled)) { + this.hoursDisabled = this.hoursDisabled.split(/,\s*/); + } + this.hoursDisabled = $.map(this.hoursDisabled, function (d) { + return parseInt(d, 10); + }); + this.update(); + this.updateNavArrows(); + }, + + place: function () { + if (this.isInline) return; + + if (!this.zIndex) { + var index_highest = 0; + $('div').each(function () { + var index_current = parseInt($(this).css('zIndex'), 10); + if (index_current > index_highest) { + index_highest = index_current; + } + }); + this.zIndex = index_highest + 10; + } + + var offset, top, left, containerOffset; + if (this.container instanceof $) { + containerOffset = this.container.offset(); + } else { + containerOffset = $(this.container).offset(); + } + + if (this.component) { + offset = this.component.offset(); + left = offset.left; + if (this.pickerPosition == 'bottom-left' || this.pickerPosition == 'top-left') { + left += this.component.outerWidth() - this.picker.outerWidth(); + } + } else { + offset = this.element.offset(); + left = offset.left; + if (this.pickerPosition == 'bottom-left' || this.pickerPosition == 'top-left') { + left += this.element.outerWidth() - this.picker.outerWidth(); + } + } + + var bodyWidth = document.body.clientWidth || window.innerWidth; + if (left + 220 > bodyWidth) { + left = bodyWidth - 220; + } + + if (this.pickerPosition == 'top-left' || this.pickerPosition == 'top-right') { + top = offset.top - this.picker.outerHeight(); + } else { + top = offset.top + this.height; + } + + top = top - containerOffset.top; + left = left - containerOffset.left; + + this.picker.css({ + top: top, + left: left, + zIndex: this.zIndex + }); + }, + + update: function () { + var date, fromArgs = false; + if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) { + date = arguments[0]; + fromArgs = true; + } else { + date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate; + if (typeof date == 'string' || date instanceof String) { + date = date.replace(/^\s+|\s+$/g,''); + } + } + + if (!date) { + date = new Date(); + fromArgs = false; + } + + this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType, this.timezone); + + if (fromArgs) this.setValue(); + + if (this.date < this.startDate) { + this.viewDate = new Date(this.startDate); + } else if (this.date > this.endDate) { + this.viewDate = new Date(this.endDate); + } else { + this.viewDate = new Date(this.date); + } + this.fill(); + }, + + fillDow: function () { + var dowCnt = this.weekStart, + html = '<tr>'; + while (dowCnt < this.weekStart + 7) { + html += '<th class="dow">' + dates[this.language].daysMin[(dowCnt++) % 7] + '</th>'; + } + html += '</tr>'; + this.picker.find('.datetimepicker-days thead').append(html); + }, + + fillMonths: function () { + var html = '', + i = 0; + while (i < 12) { + html += '<span class="month">' + dates[this.language].monthsShort[i++] + '</span>'; + } + this.picker.find('.datetimepicker-months td').html(html); + }, + + fill: function () { + if (this.date == null || this.viewDate == null) { + return; + } + var d = new Date(this.viewDate), + year = d.getUTCFullYear(), + month = d.getUTCMonth(), + dayMonth = d.getUTCDate(), + hours = d.getUTCHours(), + minutes = d.getUTCMinutes(), + startYear = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity, + startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity, + endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity, + endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() + 1 : Infinity, + currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), + today = new Date(); + this.setTitle('.datetimepicker-days', dates[this.language].months[month] + ' ' + year) + if (this.formatViewType == 'time') { + var formatted = this.getFormattedDate(); + this.setTitle('.datetimepicker-hours', formatted); + this.setTitle('.datetimepicker-minutes', formatted); + } else { + this.setTitle('.datetimepicker-hours', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year); + this.setTitle('.datetimepicker-minutes', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year); + } + this.picker.find('tfoot th.today') + .text(dates[this.language].today || dates['en'].today) + .toggle(this.todayBtn !== false); + this.picker.find('tfoot th.clear') + .text(dates[this.language].clear || dates['en'].clear) + .toggle(this.clearBtn !== false); + this.updateNavArrows(); + this.fillMonths(); + /*var prevMonth = UTCDate(year, month, 0,0,0,0,0); + prevMonth.setUTCDate(prevMonth.getDate() - (prevMonth.getUTCDay() - this.weekStart + 7)%7);*/ + var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0), + day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth()); + prevMonth.setUTCDate(day); + prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7); + var nextMonth = new Date(prevMonth); + nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); + nextMonth = nextMonth.valueOf(); + var html = []; + var clsName; + while (prevMonth.valueOf() < nextMonth) { + if (prevMonth.getUTCDay() == this.weekStart) { + html.push('<tr>'); + } + clsName = ''; + if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) { + clsName += ' old'; + } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() > month)) { + clsName += ' new'; + } + // Compare internal UTC date with local today, not UTC today + if (this.todayHighlight && + prevMonth.getUTCFullYear() == today.getFullYear() && + prevMonth.getUTCMonth() == today.getMonth() && + prevMonth.getUTCDate() == today.getDate()) { + clsName += ' today'; + } + if (prevMonth.valueOf() == currentDate) { + clsName += ' active'; + } + if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate || + $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 || + $.inArray(prevMonth.toDateString(), this.datesDisabled) !== -1) { + clsName += ' disabled'; + } + html.push('<td class="day' + clsName + '">' + prevMonth.getUTCDate() + '</td>'); + if (prevMonth.getUTCDay() == this.weekEnd) { + html.push('</tr>'); + } + prevMonth.setUTCDate(prevMonth.getUTCDate() + 1); + } + this.picker.find('.datetimepicker-days tbody').empty().append(html.join('')); + + html = []; + var txt = '', meridian = '', meridianOld = ''; + var hoursDisabled = this.hoursDisabled || []; + for (var i = 0; i < 24; i++) { + if (hoursDisabled.indexOf(i) !== -1) continue; + var actual = UTCDate(year, month, dayMonth, i); + clsName = ''; + // We want the previous hour for the startDate + if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) { + clsName += ' disabled'; + } else if (hours == i) { + clsName += ' active'; + } + if (this.showMeridian && dates[this.language].meridiem.length == 2) { + meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]); + if (meridian != meridianOld) { + if (meridianOld != '') { + html.push('</fieldset>'); + } + html.push('<fieldset class="hour"><legend>' + meridian.toUpperCase() + '</legend>'); + } + meridianOld = meridian; + txt = (i % 12 ? i % 12 : 12); + html.push('<span class="hour' + clsName + ' hour_' + (i < 12 ? 'am' : 'pm') + '">' + txt + '</span>'); + if (i == 23) { + html.push('</fieldset>'); + } + } else { + txt = i + ':00'; + html.push('<span class="hour' + clsName + '">' + txt + '</span>'); + } + } + this.picker.find('.datetimepicker-hours td').html(html.join('')); + + html = []; + txt = '', meridian = '', meridianOld = ''; + var minutesDisabled = this.minutesDisabled || []; + for (var i = 0; i < 60; i += this.minuteStep) { + if (minutesDisabled.indexOf(i) !== -1) continue; + var actual = UTCDate(year, month, dayMonth, hours, i, 0); + clsName = ''; + if (actual.valueOf() < this.startDate || actual.valueOf() > this.endDate) { + clsName += ' disabled'; + } else if (Math.floor(minutes / this.minuteStep) == Math.floor(i / this.minuteStep)) { + clsName += ' active'; + } + if (this.showMeridian && dates[this.language].meridiem.length == 2) { + meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]); + if (meridian != meridianOld) { + if (meridianOld != '') { + html.push('</fieldset>'); + } + html.push('<fieldset class="minute"><legend>' + meridian.toUpperCase() + '</legend>'); + } + meridianOld = meridian; + txt = (hours % 12 ? hours % 12 : 12); + //html.push('<span class="minute'+clsName+' minute_'+(hours<12?'am':'pm')+'">'+txt+'</span>'); + html.push('<span class="minute' + clsName + '">' + txt + ':' + (i < 10 ? '0' + i : i) + '</span>'); + if (i == 59) { + html.push('</fieldset>'); + } + } else { + txt = i + ':00'; + //html.push('<span class="hour'+clsName+'">'+txt+'</span>'); + html.push('<span class="minute' + clsName + '">' + hours + ':' + (i < 10 ? '0' + i : i) + '</span>'); + } + } + this.picker.find('.datetimepicker-minutes td').html(html.join('')); + + var currentYear = this.date.getUTCFullYear(); + var months = this.setTitle('.datetimepicker-months', year) + .end() + .find('span').removeClass('active'); + if (currentYear == year) { + // getUTCMonths() returns 0 based, and we need to select the next one + // To cater bootstrap 2 we don't need to select the next one + var offset = months.length - 12; + months.eq(this.date.getUTCMonth() + offset).addClass('active'); + } + if (year < startYear || year > endYear) { + months.addClass('disabled'); + } + if (year == startYear) { + months.slice(0, startMonth).addClass('disabled'); + } + if (year == endYear) { + months.slice(endMonth).addClass('disabled'); + } + + html = ''; + year = parseInt(year / 10, 10) * 10; + var yearCont = this.setTitle('.datetimepicker-years', year + '-' + (year + 9)) + .end() + .find('td'); + year -= 1; + for (var i = -1; i < 11; i++) { + html += '<span class="year' + (i == -1 || i == 10 ? ' old' : '') + (currentYear == year ? ' active' : '') + (year < startYear || year > endYear ? ' disabled' : '') + '">' + year + '</span>'; + year += 1; + } + yearCont.html(html); + this.place(); + }, + + updateNavArrows: function () { + var d = new Date(this.viewDate), + year = d.getUTCFullYear(), + month = d.getUTCMonth(), + day = d.getUTCDate(), + hour = d.getUTCHours(); + switch (this.viewMode) { + case 0: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth() + && day <= this.startDate.getUTCDate() + && hour <= this.startDate.getUTCHours()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth() + && day >= this.endDate.getUTCDate() + && hour >= this.endDate.getUTCHours()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 1: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth() + && day <= this.startDate.getUTCDate()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth() + && day >= this.endDate.getUTCDate()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 2: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear() + && month <= this.startDate.getUTCMonth()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear() + && month >= this.endDate.getUTCMonth()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + case 3: + case 4: + if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()) { + this.picker.find('.prev').css({visibility: 'hidden'}); + } else { + this.picker.find('.prev').css({visibility: 'visible'}); + } + if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()) { + this.picker.find('.next').css({visibility: 'hidden'}); + } else { + this.picker.find('.next').css({visibility: 'visible'}); + } + break; + } + }, + + mousewheel: function (e) { + + e.preventDefault(); + e.stopPropagation(); + + if (this.wheelPause) { + return; + } + + this.wheelPause = true; + + var originalEvent = e.originalEvent; + + var delta = originalEvent.wheelDelta; + + var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1; + + if (this.wheelViewModeNavigationInverseDirection) { + mode = -mode; + } + + this.showMode(mode); + + setTimeout($.proxy(function () { + + this.wheelPause = false + + }, this), this.wheelViewModeNavigationDelay); + + }, + + click: function (e) { + e.stopPropagation(); + e.preventDefault(); + var target = $(e.target).closest('span, td, th, legend'); + if (target.is('.' + this.icontype)) { + target = $(target).parent().closest('span, td, th, legend'); + } + if (target.length == 1) { + if (target.is('.disabled')) { + this.element.trigger({ + type: 'outOfRange', + date: this.viewDate, + startDate: this.startDate, + endDate: this.endDate + }); + return; + } + switch (target[0].nodeName.toLowerCase()) { + case 'th': + switch (target[0].className) { + case 'switch': + this.showMode(1); + break; + case 'prev': + case 'next': + var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1); + switch (this.viewMode) { + case 0: + this.viewDate = this.moveHour(this.viewDate, dir); + break; + case 1: + this.viewDate = this.moveDate(this.viewDate, dir); + break; + case 2: + this.viewDate = this.moveMonth(this.viewDate, dir); + break; + case 3: + case 4: + this.viewDate = this.moveYear(this.viewDate, dir); + break; + } + this.fill(); + this.element.trigger({ + type: target[0].className + ':' + this.convertViewModeText(this.viewMode), + date: this.viewDate, + startDate: this.startDate, + endDate: this.endDate + }); + break; + case 'clear': + this.reset(); + if (this.autoclose) { + this.hide(); + } + break; + case 'today': + var date = new Date(); + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0); + + // Respect startDate and endDate. + if (date < this.startDate) date = this.startDate; + else if (date > this.endDate) date = this.endDate; + + this.viewMode = this.startViewMode; + this.showMode(0); + this._setDate(date); + this.fill(); + if (this.autoclose) { + this.hide(); + } + break; + } + break; + case 'span': + if (!target.is('.disabled')) { + var year = this.viewDate.getUTCFullYear(), + month = this.viewDate.getUTCMonth(), + day = this.viewDate.getUTCDate(), + hours = this.viewDate.getUTCHours(), + minutes = this.viewDate.getUTCMinutes(), + seconds = this.viewDate.getUTCSeconds(); + + if (target.is('.month')) { + this.viewDate.setUTCDate(1); + month = target.parent().find('span').index(target); + day = this.viewDate.getUTCDate(); + this.viewDate.setUTCMonth(month); + this.element.trigger({ + type: 'changeMonth', + date: this.viewDate + }); + if (this.viewSelect >= 3) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.year')) { + this.viewDate.setUTCDate(1); + year = parseInt(target.text(), 10) || 0; + this.viewDate.setUTCFullYear(year); + this.element.trigger({ + type: 'changeYear', + date: this.viewDate + }); + if (this.viewSelect >= 4) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.hour')) { + hours = parseInt(target.text(), 10) || 0; + if (target.hasClass('hour_am') || target.hasClass('hour_pm')) { + if (hours == 12 && target.hasClass('hour_am')) { + hours = 0; + } else if (hours != 12 && target.hasClass('hour_pm')) { + hours += 12; + } + } + this.viewDate.setUTCHours(hours); + this.element.trigger({ + type: 'changeHour', + date: this.viewDate + }); + if (this.viewSelect >= 1) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } else if (target.is('.minute')) { + minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0; + this.viewDate.setUTCMinutes(minutes); + this.element.trigger({ + type: 'changeMinute', + date: this.viewDate + }); + if (this.viewSelect >= 0) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } + if (this.viewMode != 0) { + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode == this.viewMode && this.autoclose) { + this.hide(); + } + } else { + this.fill(); + if (this.autoclose) { + this.hide(); + } + } + } + break; + case 'td': + if (target.is('.day') && !target.is('.disabled')) { + var day = parseInt(target.text(), 10) || 1; + var year = this.viewDate.getUTCFullYear(), + month = this.viewDate.getUTCMonth(), + hours = this.viewDate.getUTCHours(), + minutes = this.viewDate.getUTCMinutes(), + seconds = this.viewDate.getUTCSeconds(); + if (target.is('.old')) { + if (month === 0) { + month = 11; + year -= 1; + } else { + month -= 1; + } + } else if (target.is('.new')) { + if (month == 11) { + month = 0; + year += 1; + } else { + month += 1; + } + } + this.viewDate.setUTCFullYear(year); + this.viewDate.setUTCMonth(month, day); + this.element.trigger({ + type: 'changeDay', + date: this.viewDate + }); + if (this.viewSelect >= 2) { + this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0)); + } + } + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode == this.viewMode && this.autoclose) { + this.hide(); + } + break; + } + } + }, + + _setDate: function (date, which) { + if (!which || which == 'date') + this.date = date; + if (!which || which == 'view') + this.viewDate = date; + this.fill(); + this.setValue(); + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element) { + element.change(); + if (this.autoclose && (!which || which == 'date')) { + //this.hide(); + } + } + this.element.trigger({ + type: 'changeDate', + date: this.getDate() + }); + if(date == null) + this.date = this.viewDate; + }, + + moveMinute: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep)); + return new_date; + }, + + moveHour: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCHours(new_date.getUTCHours() + dir); + return new_date; + }, + + moveDate: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()); + //dir = dir > 0 ? 1 : -1; + new_date.setUTCDate(new_date.getUTCDate() + dir); + return new_date; + }, + + moveMonth: function (date, dir) { + if (!dir) return date; + var new_date = new Date(date.valueOf()), + day = new_date.getUTCDate(), + month = new_date.getUTCMonth(), + mag = Math.abs(dir), + new_month, test; + dir = dir > 0 ? 1 : -1; + if (mag == 1) { + test = dir == -1 + // If going back one month, make sure month is not current month + // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02) + ? function () { + return new_date.getUTCMonth() == month; + } + // If going forward one month, make sure month is as expected + // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02) + : function () { + return new_date.getUTCMonth() != new_month; + }; + new_month = month + dir; + new_date.setUTCMonth(new_month); + // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 + if (new_month < 0 || new_month > 11) + new_month = (new_month + 12) % 12; + } else { + // For magnitudes >1, move one month at a time... + for (var i = 0; i < mag; i++) + // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)... + new_date = this.moveMonth(new_date, dir); + // ...then reset the day, keeping it in the new month + new_month = new_date.getUTCMonth(); + new_date.setUTCDate(day); + test = function () { + return new_month != new_date.getUTCMonth(); + }; + } + // Common date-resetting loop -- if date is beyond end of month, make it + // end of month + while (test()) { + new_date.setUTCDate(--day); + new_date.setUTCMonth(new_month); + } + return new_date; + }, + + moveYear: function (date, dir) { + return this.moveMonth(date, dir * 12); + }, + + dateWithinRange: function (date) { + return date >= this.startDate && date <= this.endDate; + }, + + keydown: function (e) { + if (this.picker.is(':not(:visible)')) { + if (e.keyCode == 27) // allow escape to hide and re-show picker + this.show(); + return; + } + var dateChanged = false, + dir, day, month, + newDate, newViewDate; + switch (e.keyCode) { + case 27: // escape + this.hide(); + e.preventDefault(); + break; + case 37: // left + case 39: // right + if (!this.keyboardNavigation) break; + dir = e.keyCode == 37 ? -1 : 1; + viewMode = this.viewMode; + if (e.ctrlKey) { + viewMode += 2; + } else if (e.shiftKey) { + viewMode += 1; + } + if (viewMode == 4) { + newDate = this.moveYear(this.date, dir); + newViewDate = this.moveYear(this.viewDate, dir); + } else if (viewMode == 3) { + newDate = this.moveMonth(this.date, dir); + newViewDate = this.moveMonth(this.viewDate, dir); + } else if (viewMode == 2) { + newDate = this.moveDate(this.date, dir); + newViewDate = this.moveDate(this.viewDate, dir); + } else if (viewMode == 1) { + newDate = this.moveHour(this.date, dir); + newViewDate = this.moveHour(this.viewDate, dir); + } else if (viewMode == 0) { + newDate = this.moveMinute(this.date, dir); + newViewDate = this.moveMinute(this.viewDate, dir); + } + if (this.dateWithinRange(newDate)) { + this.date = newDate; + this.viewDate = newViewDate; + this.setValue(); + this.update(); + e.preventDefault(); + dateChanged = true; + } + break; + case 38: // up + case 40: // down + if (!this.keyboardNavigation) break; + dir = e.keyCode == 38 ? -1 : 1; + viewMode = this.viewMode; + if (e.ctrlKey) { + viewMode += 2; + } else if (e.shiftKey) { + viewMode += 1; + } + if (viewMode == 4) { + newDate = this.moveYear(this.date, dir); + newViewDate = this.moveYear(this.viewDate, dir); + } else if (viewMode == 3) { + newDate = this.moveMonth(this.date, dir); + newViewDate = this.moveMonth(this.viewDate, dir); + } else if (viewMode == 2) { + newDate = this.moveDate(this.date, dir * 7); + newViewDate = this.moveDate(this.viewDate, dir * 7); + } else if (viewMode == 1) { + if (this.showMeridian) { + newDate = this.moveHour(this.date, dir * 6); + newViewDate = this.moveHour(this.viewDate, dir * 6); + } else { + newDate = this.moveHour(this.date, dir * 4); + newViewDate = this.moveHour(this.viewDate, dir * 4); + } + } else if (viewMode == 0) { + newDate = this.moveMinute(this.date, dir * 4); + newViewDate = this.moveMinute(this.viewDate, dir * 4); + } + if (this.dateWithinRange(newDate)) { + this.date = newDate; + this.viewDate = newViewDate; + this.setValue(); + this.update(); + e.preventDefault(); + dateChanged = true; + } + break; + case 13: // enter + if (this.viewMode != 0) { + var oldViewMode = this.viewMode; + this.showMode(-1); + this.fill(); + if (oldViewMode == this.viewMode && this.autoclose) { + this.hide(); + } + } else { + this.fill(); + if (this.autoclose) { + this.hide(); + } + } + e.preventDefault(); + break; + case 9: // tab + this.hide(); + break; + } + if (dateChanged) { + var element; + if (this.isInput) { + element = this.element; + } else if (this.component) { + element = this.element.find('input'); + } + if (element) { + element.change(); + } + this.element.trigger({ + type: 'changeDate', + date: this.getDate() + }); + } + }, + + showMode: function (dir) { + if (dir) { + var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir)); + if (newViewMode >= this.minView && newViewMode <= this.maxView) { + this.element.trigger({ + type: 'changeMode', + date: this.viewDate, + oldViewMode: this.viewMode, + newViewMode: newViewMode + }); + + this.viewMode = newViewMode; + } + } + /* + vitalets: fixing bug of very special conditions: + jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover. + Method show() does not set display css correctly and datetimepicker is not shown. + Changed to .css('display', 'block') solve the problem. + See https://github.com/vitalets/x-editable/issues/37 + + In jquery 1.7.2+ everything works fine. + */ + //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); + this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block'); + this.updateNavArrows(); + }, + + reset: function (e) { + this._setDate(null, 'date'); + }, + + convertViewModeText: function (viewMode) { + switch (viewMode) { + case 4: + return 'decade'; + case 3: + return 'year'; + case 2: + return 'month'; + case 1: + return 'day'; + case 0: + return 'hour'; + } + } + }; + + var old = $.fn.datetimepicker; + $.fn.datetimepicker = function (option) { + var args = Array.apply(null, arguments); + args.shift(); + var internal_return; + this.each(function () { + var $this = $(this), + data = $this.data('datetimepicker'), + options = typeof option == 'object' && option; + if (!data) { + $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options)))); + } + if (typeof option == 'string' && typeof data[option] == 'function') { + internal_return = data[option].apply(data, args); + if (internal_return !== undefined) { + return false; + } + } + }); + if (internal_return !== undefined) + return internal_return; + else + return this; + }; + + $.fn.datetimepicker.defaults = { + }; + $.fn.datetimepicker.Constructor = Datetimepicker; + var dates = $.fn.datetimepicker.dates = { + en: { +/* + days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], + daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], + daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'], + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + meridiem: ['am', 'pm'], + suffix: ['st', 'nd', 'rd', 'th'], + today: 'Today', + clear: 'Clear' +*/ + + days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], + daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], + daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], + months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], + monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], + today: "Teraz", + suffix: [], + meridiem: [], + clear: 'Wyczyść' + + } + }; + + var DPGlobal = { + modes: [ + { + clsName: 'minutes', + navFnc: 'Hours', + navStep: 1 + }, + { + clsName: 'hours', + navFnc: 'Date', + navStep: 1 + }, + { + clsName: 'days', + navFnc: 'Month', + navStep: 1 + }, + { + clsName: 'months', + navFnc: 'FullYear', + navStep: 1 + }, + { + clsName: 'years', + navFnc: 'FullYear', + navStep: 10 + } + ], + isLeapYear: function (year) { + return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) + }, + getDaysInMonth: function (year, month) { + return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] + }, + getDefaultFormat: function (type, field) { + if (type == 'standard') { + if (field == 'input') + return 'yyyy-mm-dd hh:ii'; + else + return 'yyyy-mm-dd hh:ii:ss'; + } else if (type == 'php') { + if (field == 'input') + return 'Y-m-d H:i'; + else + return 'Y-m-d H:i:s'; + } else { + throw new Error('Invalid format type.'); + } + }, + validParts: function (type) { + if (type == 'standard') { + return /t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g; + } else if (type == 'php') { + return /[dDjlNwzFmMnStyYaABgGhHis]/g; + } else { + throw new Error('Invalid format type.'); + } + }, + nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g, + parseFormat: function (format, type) { + // IE treats \0 as a string end in inputs (truncating the value), + // so it's a bad format delimiter, anyway + var separators = format.replace(this.validParts(type), '\0').split('\0'), + parts = format.match(this.validParts(type)); + if (!separators || !separators.length || !parts || parts.length == 0) { + throw new Error('Invalid date format.'); + } + return {separators: separators, parts: parts}; + }, + parseDate: function (date, format, language, type, timezone) { + if (date instanceof Date) { + var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000); + dateUTC.setMilliseconds(0); + return dateUTC; + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd', type); + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd hh:ii', type); + } + if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(date)) { + format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type); + } + if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) { + var part_re = /([-+]\d+)([dmwy])/, + parts = date.match(/([-+]\d+)([dmwy])/g), + part, dir; + date = new Date(); + for (var i = 0; i < parts.length; i++) { + part = part_re.exec(parts[i]); + dir = parseInt(part[1]); + switch (part[2]) { + case 'd': + date.setUTCDate(date.getUTCDate() + dir); + break; + case 'm': + date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir); + break; + case 'w': + date.setUTCDate(date.getUTCDate() + dir * 7); + break; + case 'y': + date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir); + break; + } + } + return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0); + } + var parts = date && date.toString().match(this.nonpunctuation) || [], + date = new Date(0, 0, 0, 0, 0, 0, 0), + parsed = {}, + setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P', 'z', 'Z'], + setters_map = { + hh: function (d, v) { + return d.setUTCHours(v); + }, + h: function (d, v) { + return d.setUTCHours(v); + }, + HH: function (d, v) { + return d.setUTCHours(v == 12 ? 0 : v); + }, + H: function (d, v) { + return d.setUTCHours(v == 12 ? 0 : v); + }, + ii: function (d, v) { + return d.setUTCMinutes(v); + }, + i: function (d, v) { + return d.setUTCMinutes(v); + }, + ss: function (d, v) { + return d.setUTCSeconds(v); + }, + s: function (d, v) { + return d.setUTCSeconds(v); + }, + yyyy: function (d, v) { + return d.setUTCFullYear(v); + }, + yy: function (d, v) { + return d.setUTCFullYear(2000 + v); + }, + m: function (d, v) { + v -= 1; + while (v < 0) v += 12; + v %= 12; + d.setUTCMonth(v); + while (d.getUTCMonth() != v) + if (isNaN(d.getUTCMonth())) + return d; + else + d.setUTCDate(d.getUTCDate() - 1); + return d; + }, + d: function (d, v) { + return d.setUTCDate(v); + }, + p: function (d, v) { + return d.setUTCHours(v == 1 ? d.getUTCHours() + 12 : d.getUTCHours()); + }, + z: function () { + return timezone + } + }, + val, filtered, part; + setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m']; + setters_map['dd'] = setters_map['d']; + setters_map['P'] = setters_map['p']; + setters_map['Z'] = setters_map['z']; + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()); + if (parts.length == format.parts.length) { + for (var i = 0, cnt = format.parts.length; i < cnt; i++) { + val = parseInt(parts[i], 10); + part = format.parts[i]; + if (isNaN(val)) { + switch (part) { + case 'MM': + filtered = $(dates[language].months).filter(function () { + var m = this.slice(0, parts[i].length), + p = parts[i].slice(0, m.length); + return m == p; + }); + val = $.inArray(filtered[0], dates[language].months) + 1; + break; + case 'M': + filtered = $(dates[language].monthsShort).filter(function () { + var m = this.slice(0, parts[i].length), + p = parts[i].slice(0, m.length); + return m.toLowerCase() == p.toLowerCase(); + }); + val = $.inArray(filtered[0], dates[language].monthsShort) + 1; + break; + case 'p': + case 'P': + val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem); + break; + case 'z': + case 'Z': + timezone; + break; + + } + } + parsed[part] = val; + } + for (var i = 0, s; i < setters_order.length; i++) { + s = setters_order[i]; + if (s in parsed && !isNaN(parsed[s])) + setters_map[s](date, parsed[s]) + } + } + return date; + }, + formatDate: function (date, format, language, type, timezone) { + if (date == null) { + return ''; + } + var val; + if (type == 'standard') { + val = { + t: date.getTime(), + // year + yy: date.getUTCFullYear().toString().substring(2), + yyyy: date.getUTCFullYear(), + // month + m: date.getUTCMonth() + 1, + M: dates[language].monthsShort[date.getUTCMonth()], + MM: dates[language].months[date.getUTCMonth()], + // day + d: date.getUTCDate(), + D: dates[language].daysShort[date.getUTCDay()], + DD: dates[language].days[date.getUTCDay()], + p: (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''), + // hour + h: date.getUTCHours(), + // minute + i: date.getUTCMinutes(), + // second + s: date.getUTCSeconds(), + // timezone + z: timezone + }; + + if (dates[language].meridiem.length == 2) { + val.H = (val.h % 12 == 0 ? 12 : val.h % 12); + } + else { + val.H = val.h; + } + val.HH = (val.H < 10 ? '0' : '') + val.H; + val.P = val.p.toUpperCase(); + val.Z = val.z; + val.hh = (val.h < 10 ? '0' : '') + val.h; + val.ii = (val.i < 10 ? '0' : '') + val.i; + val.ss = (val.s < 10 ? '0' : '') + val.s; + val.dd = (val.d < 10 ? '0' : '') + val.d; + val.mm = (val.m < 10 ? '0' : '') + val.m; + } else if (type == 'php') { + // php format + val = { + // year + y: date.getUTCFullYear().toString().substring(2), + Y: date.getUTCFullYear(), + // month + F: dates[language].months[date.getUTCMonth()], + M: dates[language].monthsShort[date.getUTCMonth()], + n: date.getUTCMonth() + 1, + t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()), + // day + j: date.getUTCDate(), + l: dates[language].days[date.getUTCDay()], + D: dates[language].daysShort[date.getUTCDay()], + w: date.getUTCDay(), // 0 -> 6 + N: (date.getUTCDay() == 0 ? 7 : date.getUTCDay()), // 1 -> 7 + S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''), + // hour + a: (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''), + g: (date.getUTCHours() % 12 == 0 ? 12 : date.getUTCHours() % 12), + G: date.getUTCHours(), + // minute + i: date.getUTCMinutes(), + // second + s: date.getUTCSeconds() + }; + val.m = (val.n < 10 ? '0' : '') + val.n; + val.d = (val.j < 10 ? '0' : '') + val.j; + val.A = val.a.toString().toUpperCase(); + val.h = (val.g < 10 ? '0' : '') + val.g; + val.H = (val.G < 10 ? '0' : '') + val.G; + val.i = (val.i < 10 ? '0' : '') + val.i; + val.s = (val.s < 10 ? '0' : '') + val.s; + } else { + throw new Error('Invalid format type.'); + } + var date = [], + seps = $.extend([], format.separators); + for (var i = 0, cnt = format.parts.length; i < cnt; i++) { + if (seps.length) { + date.push(seps.shift()); + } + date.push(val[format.parts[i]]); + } + if (seps.length) { + date.push(seps.shift()); + } + return date.join(''); + }, + convertViewMode: function (viewMode) { + switch (viewMode) { + case 4: + case 'decade': + viewMode = 4; + break; + case 3: + case 'year': + viewMode = 3; + break; + case 2: + case 'month': + viewMode = 2; + break; + case 1: + case 'day': + viewMode = 1; + break; + case 0: + case 'hour': + viewMode = 0; + break; + } + + return viewMode; + }, + headTemplate: '<thead>' + + '<tr>' + + '<th class="prev">&laquo;</th>' + + '<th colspan="5" class="switch"></th>' + + '<th class="next">&raquo;</th>' + + '</tr>' + + '</thead>', + headTemplateV3: '<thead>' + + '<tr>' + + '<th class="prev">&laquo;</span> </th>' + + '<th colspan="5" class="switch"></th>' + + '<th class="next">&raquo;</span> </th>' + + '</tr>' + + '</thead>', + contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>', + footTemplate: '<tfoot>' + + '<tr><th colspan="7" class="today"></th></tr>' + + '<tr><th colspan="7" class="clear"></th></tr>' + + '</tfoot>' + }; + DPGlobal.template = '<div class="datetimepicker">' + + '<div class="datetimepicker-minutes">' + + '<table class=" table-condensed">' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-hours">' + + '<table class=" table-condensed">' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-days">' + + '<table class=" table-condensed">' + + DPGlobal.headTemplate + + '<tbody></tbody>' + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-months">' + + '<table class="table-condensed">' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-years">' + + '<table class="table-condensed">' + + DPGlobal.headTemplate + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '</div>'; + DPGlobal.templateV3 = '<div class="datetimepicker">' + + '<div class="datetimepicker-minutes">' + + '<table class=" table-condensed">' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-hours">' + + '<table class=" table-condensed">' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-days">' + + '<table class=" table-condensed">' + + DPGlobal.headTemplateV3 + + '<tbody></tbody>' + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-months">' + + '<table class="table-condensed">' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '<div class="datetimepicker-years">' + + '<table class="table-condensed">' + + DPGlobal.headTemplateV3 + + DPGlobal.contTemplate + + DPGlobal.footTemplate + + '</table>' + + '</div>' + + '</div>'; + $.fn.datetimepicker.DPGlobal = DPGlobal; + + /* DATETIMEPICKER NO CONFLICT + * =================== */ + + $.fn.datetimepicker.noConflict = function () { + $.fn.datetimepicker = old; + return this; + }; + + /* DATETIMEPICKER DATA-API + * ================== */ + + $(document).on( + 'focus.datetimepicker.data-api click.datetimepicker.data-api', + '[data-provide="datetimepicker"]', + function (e) { + var $this = $(this); + if ($this.data('datetimepicker')) return; + e.preventDefault(); + // component click requires us to explicitly show it + $this.datetimepicker('show'); + } + ); + $(function () { + $('[data-provide="datetimepicker-inline"]').datetimepicker(); + }); + +})); diff --git a/reports/datepicker-time/js/bootstrap-datetimepicker.min.js b/reports/datepicker-time/js/bootstrap-datetimepicker.min.js new file mode 100644 index 0000000..00fd8d3 --- /dev/null +++ b/reports/datepicker-time/js/bootstrap-datetimepicker.min.js @@ -0,0 +1 @@ +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof exports==="object"){a(require("jquery"))}else{a(jQuery)}}}(function(f,c){if(!("indexOf" in Array.prototype)){Array.prototype.indexOf=function(k,j){if(j===c){j=0}if(j<0){j+=this.length}if(j<0){j=0}for(var l=this.length;j<l;j++){if(j in this&&this[j]===k){return j}}return -1}}function e(l){var k=f(l);var j=k.add(k.parents());var m=false;j.each(function(){if(f(this).css("position")==="fixed"){m=true;return false}});return m}function h(){return new Date(Date.UTC.apply(Date,arguments))}function d(){var j=new Date();return h(j.getUTCFullYear(),j.getUTCMonth(),j.getUTCDate(),j.getUTCHours(),j.getUTCMinutes(),j.getUTCSeconds(),0)}var i=function(l,k){var n=this;this.element=f(l);this.container=k.container||"body";this.language=k.language||this.element.data("date-language")||"en";this.language=this.language in a?this.language:this.language.split("-")[0];this.language=this.language in a?this.language:"en";this.isRTL=a[this.language].rtl||false;this.formatType=k.formatType||this.element.data("format-type")||"standard";this.format=g.parseFormat(k.format||this.element.data("date-format")||a[this.language].format||g.getDefaultFormat(this.formatType,"input"),this.formatType);this.isInline=false;this.isVisible=false;this.isInput=this.element.is("input");this.fontAwesome=k.fontAwesome||this.element.data("font-awesome")||false;this.bootcssVer=k.bootcssVer||(this.isInput?(this.element.is(".form-control")?3:2):(this.bootcssVer=this.element.is(".input-group")?3:2));this.component=this.element.is(".date")?(this.bootcssVer==3?this.element.find(".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o").parent():this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o").parent()):false;this.componentReset=this.element.is(".date")?(this.bootcssVer==3?this.element.find(".input-group-addon .glyphicon-remove, .input-group-addon .fa-times").parent():this.element.find(".add-on .icon-remove, .add-on .fa-times").parent()):false;this.hasInput=this.component&&this.element.find("input").length;if(this.component&&this.component.length===0){this.component=false}this.linkField=k.linkField||this.element.data("link-field")||false;this.linkFormat=g.parseFormat(k.linkFormat||this.element.data("link-format")||g.getDefaultFormat(this.formatType,"link"),this.formatType);this.minuteStep=k.minuteStep||this.element.data("minute-step")||5;this.pickerPosition=k.pickerPosition||this.element.data("picker-position")||"bottom-right";this.showMeridian=k.showMeridian||this.element.data("show-meridian")||false;this.initialDate=k.initialDate||new Date();this.zIndex=k.zIndex||this.element.data("z-index")||c;this.title=typeof k.title==="undefined"?false:k.title;this.defaultTimeZone=(new Date).toString().split("(")[1].slice(0,-1);this.timezone=k.timezone||this.defaultTimeZone;this.icons={leftArrow:this.fontAwesome?"fa-arrow-left":(this.bootcssVer===3?"glyphicon-arrow-left":"icon-arrow-left"),rightArrow:this.fontAwesome?"fa-arrow-right":(this.bootcssVer===3?"glyphicon-arrow-right":"icon-arrow-right")};this.icontype=this.fontAwesome?"fa":"glyphicon";this._attachEvents();this.clickedOutside=function(o){if(f(o.target).closest(".datetimepicker").length===0){n.hide()}};this.formatViewType="datetime";if("formatViewType" in k){this.formatViewType=k.formatViewType}else{if("formatViewType" in this.element.data()){this.formatViewType=this.element.data("formatViewType")}}this.minView=0;if("minView" in k){this.minView=k.minView}else{if("minView" in this.element.data()){this.minView=this.element.data("min-view")}}this.minView=g.convertViewMode(this.minView);this.maxView=g.modes.length-1;if("maxView" in k){this.maxView=k.maxView}else{if("maxView" in this.element.data()){this.maxView=this.element.data("max-view")}}this.maxView=g.convertViewMode(this.maxView);this.wheelViewModeNavigation=false;if("wheelViewModeNavigation" in k){this.wheelViewModeNavigation=k.wheelViewModeNavigation}else{if("wheelViewModeNavigation" in this.element.data()){this.wheelViewModeNavigation=this.element.data("view-mode-wheel-navigation")}}this.wheelViewModeNavigationInverseDirection=false;if("wheelViewModeNavigationInverseDirection" in k){this.wheelViewModeNavigationInverseDirection=k.wheelViewModeNavigationInverseDirection}else{if("wheelViewModeNavigationInverseDirection" in this.element.data()){this.wheelViewModeNavigationInverseDirection=this.element.data("view-mode-wheel-navigation-inverse-dir")}}this.wheelViewModeNavigationDelay=100;if("wheelViewModeNavigationDelay" in k){this.wheelViewModeNavigationDelay=k.wheelViewModeNavigationDelay}else{if("wheelViewModeNavigationDelay" in this.element.data()){this.wheelViewModeNavigationDelay=this.element.data("view-mode-wheel-navigation-delay")}}this.startViewMode=2;if("startView" in k){this.startViewMode=k.startView}else{if("startView" in this.element.data()){this.startViewMode=this.element.data("start-view")}}this.startViewMode=g.convertViewMode(this.startViewMode);this.viewMode=this.startViewMode;this.viewSelect=this.minView;if("viewSelect" in k){this.viewSelect=k.viewSelect}else{if("viewSelect" in this.element.data()){this.viewSelect=this.element.data("view-select")}}this.viewSelect=g.convertViewMode(this.viewSelect);this.forceParse=true;if("forceParse" in k){this.forceParse=k.forceParse}else{if("dateForceParse" in this.element.data()){this.forceParse=this.element.data("date-force-parse")}}var m=this.bootcssVer===3?g.templateV3:g.template;while(m.indexOf("{iconType}")!==-1){m=m.replace("{iconType}",this.icontype)}while(m.indexOf("{leftArrow}")!==-1){m=m.replace("{leftArrow}",this.icons.leftArrow)}while(m.indexOf("{rightArrow}")!==-1){m=m.replace("{rightArrow}",this.icons.rightArrow)}this.picker=f(m).appendTo(this.isInline?this.element:this.container).on({click:f.proxy(this.click,this),mousedown:f.proxy(this.mousedown,this)});if(this.wheelViewModeNavigation){if(f.fn.mousewheel){this.picker.on({mousewheel:f.proxy(this.mousewheel,this)})}else{console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option")}}if(this.isInline){this.picker.addClass("datetimepicker-inline")}else{this.picker.addClass("datetimepicker-dropdown-"+this.pickerPosition+" dropdown-menu")}if(this.isRTL){this.picker.addClass("datetimepicker-rtl");var j=this.bootcssVer===3?".prev span, .next span":".prev i, .next i";this.picker.find(j).toggleClass(this.icons.leftArrow+" "+this.icons.rightArrow)}f(document).on("mousedown",this.clickedOutside);this.autoclose=false;if("autoclose" in k){this.autoclose=k.autoclose}else{if("dateAutoclose" in this.element.data()){this.autoclose=this.element.data("date-autoclose")}}this.keyboardNavigation=true;if("keyboardNavigation" in k){this.keyboardNavigation=k.keyboardNavigation}else{if("dateKeyboardNavigation" in this.element.data()){this.keyboardNavigation=this.element.data("date-keyboard-navigation")}}this.todayBtn=(k.todayBtn||this.element.data("date-today-btn")||false);this.clearBtn=(k.clearBtn||this.element.data("date-clear-btn")||false);this.todayHighlight=(k.todayHighlight||this.element.data("date-today-highlight")||false);this.weekStart=((k.weekStart||this.element.data("date-weekstart")||a[this.language].weekStart||0)%7);this.weekEnd=((this.weekStart+6)%7);this.startDate=-Infinity;this.endDate=Infinity;this.datesDisabled=[];this.daysOfWeekDisabled=[];this.setStartDate(k.startDate||this.element.data("date-startdate"));this.setEndDate(k.endDate||this.element.data("date-enddate"));this.setDatesDisabled(k.datesDisabled||this.element.data("date-dates-disabled"));this.setDaysOfWeekDisabled(k.daysOfWeekDisabled||this.element.data("date-days-of-week-disabled"));this.setMinutesDisabled(k.minutesDisabled||this.element.data("date-minute-disabled"));this.setHoursDisabled(k.hoursDisabled||this.element.data("date-hour-disabled"));this.fillDow();this.fillMonths();this.update();this.showMode();if(this.isInline){this.show()}};i.prototype={constructor:i,_events:[],_attachEvents:function(){this._detachEvents();if(this.isInput){this._events=[[this.element,{focus:f.proxy(this.show,this),keyup:f.proxy(this.update,this),keydown:f.proxy(this.keydown,this)}]]}else{if(this.component&&this.hasInput){this._events=[[this.element.find("input"),{focus:f.proxy(this.show,this),keyup:f.proxy(this.update,this),keydown:f.proxy(this.keydown,this)}],[this.component,{click:f.proxy(this.show,this)}]];if(this.componentReset){this._events.push([this.componentReset,{click:f.proxy(this.reset,this)}])}}else{if(this.element.is("div")){this.isInline=true}else{this._events=[[this.element,{click:f.proxy(this.show,this)}]]}}}for(var j=0,k,l;j<this._events.length;j++){k=this._events[j][0];l=this._events[j][1];k.on(l)}},_detachEvents:function(){for(var j=0,k,l;j<this._events.length;j++){k=this._events[j][0];l=this._events[j][1];k.off(l)}this._events=[]},show:function(j){this.picker.show();this.height=this.component?this.component.outerHeight():this.element.outerHeight();if(this.forceParse){this.update()}this.place();f(window).on("resize",f.proxy(this.place,this));if(j){j.stopPropagation();j.preventDefault()}this.isVisible=true;this.element.trigger({type:"show",date:this.date})},hide:function(j){if(!this.isVisible){return}if(this.isInline){return}this.picker.hide();f(window).off("resize",this.place);this.viewMode=this.startViewMode;this.showMode();if(!this.isInput){f(document).off("mousedown",this.hide)}if(this.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())){this.setValue()}this.isVisible=false;this.element.trigger({type:"hide",date:this.date})},remove:function(){this._detachEvents();f(document).off("mousedown",this.clickedOutside);this.picker.remove();delete this.picker;delete this.element.data().datetimepicker},getDate:function(){var j=this.getUTCDate();return new Date(j.getTime()+(j.getTimezoneOffset()*60000))},getUTCDate:function(){return this.date},getInitialDate:function(){return this.initialDate},setInitialDate:function(j){this.initialDate=j},setDate:function(j){this.setUTCDate(new Date(j.getTime()-(j.getTimezoneOffset()*60000)))},setUTCDate:function(j){if(j>=this.startDate&&j<=this.endDate){this.date=j;this.setValue();this.viewDate=this.date;this.fill()}else{this.element.trigger({type:"outOfRange",date:j,startDate:this.startDate,endDate:this.endDate})}},setFormat:function(k){this.format=g.parseFormat(k,this.formatType);var j;if(this.isInput){j=this.element}else{if(this.component){j=this.element.find("input")}}if(j&&j.val()){this.setValue()}},setValue:function(){var j=this.getFormattedDate();if(!this.isInput){if(this.component){this.element.find("input").val(j)}this.element.data("date",j)}else{this.element.val(j)}if(this.linkField){f("#"+this.linkField).val(this.getFormattedDate(this.linkFormat))}},getFormattedDate:function(j){if(j==c){j=this.format}return g.formatDate(this.date,j,this.language,this.formatType,this.timezone)},setStartDate:function(j){this.startDate=j||-Infinity;if(this.startDate!==-Infinity){this.startDate=g.parseDate(this.startDate,this.format,this.language,this.formatType,this.timezone)}this.update();this.updateNavArrows()},setEndDate:function(j){this.endDate=j||Infinity;if(this.endDate!==Infinity){this.endDate=g.parseDate(this.endDate,this.format,this.language,this.formatType,this.timezone)}this.update();this.updateNavArrows()},setDatesDisabled:function(j){this.datesDisabled=j||[];if(!f.isArray(this.datesDisabled)){this.datesDisabled=this.datesDisabled.split(/,\s*/)}this.datesDisabled=f.map(this.datesDisabled,function(k){return g.parseDate(k,this.format,this.language,this.formatType,this.timezone).toDateString()});this.update();this.updateNavArrows()},setTitle:function(j,k){return this.picker.find(j).find("th:eq(1)").text(this.title===false?k:this.title)},setDaysOfWeekDisabled:function(j){this.daysOfWeekDisabled=j||[];if(!f.isArray(this.daysOfWeekDisabled)){this.daysOfWeekDisabled=this.daysOfWeekDisabled.split(/,\s*/)}this.daysOfWeekDisabled=f.map(this.daysOfWeekDisabled,function(k){return parseInt(k,10)});this.update();this.updateNavArrows()},setMinutesDisabled:function(j){this.minutesDisabled=j||[];if(!f.isArray(this.minutesDisabled)){this.minutesDisabled=this.minutesDisabled.split(/,\s*/)}this.minutesDisabled=f.map(this.minutesDisabled,function(k){return parseInt(k,10)});this.update();this.updateNavArrows()},setHoursDisabled:function(j){this.hoursDisabled=j||[];if(!f.isArray(this.hoursDisabled)){this.hoursDisabled=this.hoursDisabled.split(/,\s*/)}this.hoursDisabled=f.map(this.hoursDisabled,function(k){return parseInt(k,10)});this.update();this.updateNavArrows()},place:function(){if(this.isInline){return}if(!this.zIndex){var k=0;f("div").each(function(){var p=parseInt(f(this).css("zIndex"),10);if(p>k){k=p}});this.zIndex=k+10}var o,n,m,l;if(this.container instanceof f){l=this.container.offset()}else{l=f(this.container).offset()}if(this.component){o=this.component.offset();m=o.left;if(this.pickerPosition=="bottom-left"||this.pickerPosition=="top-left"){m+=this.component.outerWidth()-this.picker.outerWidth()}}else{o=this.element.offset();m=o.left;if(this.pickerPosition=="bottom-left"||this.pickerPosition=="top-left"){m+=this.element.outerWidth()-this.picker.outerWidth()}}var j=document.body.clientWidth||window.innerWidth;if(m+220>j){m=j-220}if(this.pickerPosition=="top-left"||this.pickerPosition=="top-right"){n=o.top-this.picker.outerHeight()}else{n=o.top+this.height}n=n-l.top;m=m-l.left;this.picker.css({top:n,left:m,zIndex:this.zIndex})},update:function(){var j,k=false;if(arguments&&arguments.length&&(typeof arguments[0]==="string"||arguments[0] instanceof Date)){j=arguments[0];k=true}else{j=(this.isInput?this.element.val():this.element.find("input").val())||this.element.data("date")||this.initialDate;if(typeof j=="string"||j instanceof String){j=j.replace(/^\s+|\s+$/g,"")}}if(!j){j=new Date();k=false}this.date=g.parseDate(j,this.format,this.language,this.formatType,this.timezone);if(k){this.setValue()}if(this.date<this.startDate){this.viewDate=new Date(this.startDate)}else{if(this.date>this.endDate){this.viewDate=new Date(this.endDate)}else{this.viewDate=new Date(this.date)}}this.fill()},fillDow:function(){var j=this.weekStart,k="<tr>";while(j<this.weekStart+7){k+='<th class="dow">'+a[this.language].daysMin[(j++)%7]+"</th>"}k+="</tr>";this.picker.find(".datetimepicker-days thead").append(k)},fillMonths:function(){var k="",j=0;while(j<12){k+='<span class="month">'+a[this.language].monthsShort[j++]+"</span>"}this.picker.find(".datetimepicker-months td").html(k)},fill:function(){if(this.date==null||this.viewDate==null){return}var H=new Date(this.viewDate),u=H.getUTCFullYear(),I=H.getUTCMonth(),n=H.getUTCDate(),D=H.getUTCHours(),y=H.getUTCMinutes(),z=this.startDate!==-Infinity?this.startDate.getUTCFullYear():-Infinity,E=this.startDate!==-Infinity?this.startDate.getUTCMonth():-Infinity,q=this.endDate!==Infinity?this.endDate.getUTCFullYear():Infinity,A=this.endDate!==Infinity?this.endDate.getUTCMonth()+1:Infinity,r=(new h(this.date.getUTCFullYear(),this.date.getUTCMonth(),this.date.getUTCDate())).valueOf(),G=new Date();this.setTitle(".datetimepicker-days",a[this.language].months[I]+" "+u);if(this.formatViewType=="time"){var k=this.getFormattedDate();this.setTitle(".datetimepicker-hours",k);this.setTitle(".datetimepicker-minutes",k)}else{this.setTitle(".datetimepicker-hours",n+" "+a[this.language].months[I]+" "+u);this.setTitle(".datetimepicker-minutes",n+" "+a[this.language].months[I]+" "+u)}this.picker.find("tfoot th.today").text(a[this.language].today||a.en.today).toggle(this.todayBtn!==false);this.picker.find("tfoot th.clear").text(a[this.language].clear||a.en.clear).toggle(this.clearBtn!==false);this.updateNavArrows();this.fillMonths();var K=h(u,I-1,28,0,0,0,0),C=g.getDaysInMonth(K.getUTCFullYear(),K.getUTCMonth());K.setUTCDate(C);K.setUTCDate(C-(K.getUTCDay()-this.weekStart+7)%7);var j=new Date(K);j.setUTCDate(j.getUTCDate()+42);j=j.valueOf();var s=[];var v;while(K.valueOf()<j){if(K.getUTCDay()==this.weekStart){s.push("<tr>")}v="";if(K.getUTCFullYear()<u||(K.getUTCFullYear()==u&&K.getUTCMonth()<I)){v+=" old"}else{if(K.getUTCFullYear()>u||(K.getUTCFullYear()==u&&K.getUTCMonth()>I)){v+=" new"}}if(this.todayHighlight&&K.getUTCFullYear()==G.getFullYear()&&K.getUTCMonth()==G.getMonth()&&K.getUTCDate()==G.getDate()){v+=" today"}if(K.valueOf()==r){v+=" active"}if((K.valueOf()+86400000)<=this.startDate||K.valueOf()>this.endDate||f.inArray(K.getUTCDay(),this.daysOfWeekDisabled)!==-1||f.inArray(K.toDateString(),this.datesDisabled)!==-1){v+=" disabled"}s.push('<td class="day'+v+'">'+K.getUTCDate()+"</td>");if(K.getUTCDay()==this.weekEnd){s.push("</tr>")}K.setUTCDate(K.getUTCDate()+1)}this.picker.find(".datetimepicker-days tbody").empty().append(s.join(""));s=[];var w="",F="",t="";var l=this.hoursDisabled||[];for(var B=0;B<24;B++){if(l.indexOf(B)!==-1){continue}var x=h(u,I,n,B);v="";if((x.valueOf()+3600000)<=this.startDate||x.valueOf()>this.endDate){v+=" disabled"}else{if(D==B){v+=" active"}}if(this.showMeridian&&a[this.language].meridiem.length==2){F=(B<12?a[this.language].meridiem[0]:a[this.language].meridiem[1]);if(F!=t){if(t!=""){s.push("</fieldset>")}s.push('<fieldset class="hour"><legend>'+F.toUpperCase()+"</legend>")}t=F;w=(B%12?B%12:12);s.push('<span class="hour'+v+" hour_"+(B<12?"am":"pm")+'">'+w+"</span>");if(B==23){s.push("</fieldset>")}}else{w=B+":00";s.push('<span class="hour'+v+'">'+w+"</span>")}}this.picker.find(".datetimepicker-hours td").html(s.join(""));s=[];w="",F="",t="";var m=this.minutesDisabled||[];for(var B=0;B<60;B+=this.minuteStep){if(m.indexOf(B)!==-1){continue}var x=h(u,I,n,D,B,0);v="";if(x.valueOf()<this.startDate||x.valueOf()>this.endDate){v+=" disabled"}else{if(Math.floor(y/this.minuteStep)==Math.floor(B/this.minuteStep)){v+=" active"}}if(this.showMeridian&&a[this.language].meridiem.length==2){F=(D<12?a[this.language].meridiem[0]:a[this.language].meridiem[1]);if(F!=t){if(t!=""){s.push("</fieldset>")}s.push('<fieldset class="minute"><legend>'+F.toUpperCase()+"</legend>")}t=F;w=(D%12?D%12:12);s.push('<span class="minute'+v+'">'+w+":"+(B<10?"0"+B:B)+"</span>");if(B==59){s.push("</fieldset>")}}else{w=B+":00";s.push('<span class="minute'+v+'">'+D+":"+(B<10?"0"+B:B)+"</span>")}}this.picker.find(".datetimepicker-minutes td").html(s.join(""));var L=this.date.getUTCFullYear();var p=this.setTitle(".datetimepicker-months",u).end().find("span").removeClass("active");if(L==u){var o=p.length-12;p.eq(this.date.getUTCMonth()+o).addClass("active")}if(u<z||u>q){p.addClass("disabled")}if(u==z){p.slice(0,E).addClass("disabled")}if(u==q){p.slice(A).addClass("disabled")}s="";u=parseInt(u/10,10)*10;var J=this.setTitle(".datetimepicker-years",u+"-"+(u+9)).end().find("td");u-=1;for(var B=-1;B<11;B++){s+='<span class="year'+(B==-1||B==10?" old":"")+(L==u?" active":"")+(u<z||u>q?" disabled":"")+'">'+u+"</span>";u+=1}J.html(s);this.place()},updateNavArrows:function(){var n=new Date(this.viewDate),l=n.getUTCFullYear(),m=n.getUTCMonth(),k=n.getUTCDate(),j=n.getUTCHours();switch(this.viewMode){case 0:if(this.startDate!==-Infinity&&l<=this.startDate.getUTCFullYear()&&m<=this.startDate.getUTCMonth()&&k<=this.startDate.getUTCDate()&&j<=this.startDate.getUTCHours()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&l>=this.endDate.getUTCFullYear()&&m>=this.endDate.getUTCMonth()&&k>=this.endDate.getUTCDate()&&j>=this.endDate.getUTCHours()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 1:if(this.startDate!==-Infinity&&l<=this.startDate.getUTCFullYear()&&m<=this.startDate.getUTCMonth()&&k<=this.startDate.getUTCDate()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&l>=this.endDate.getUTCFullYear()&&m>=this.endDate.getUTCMonth()&&k>=this.endDate.getUTCDate()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 2:if(this.startDate!==-Infinity&&l<=this.startDate.getUTCFullYear()&&m<=this.startDate.getUTCMonth()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&l>=this.endDate.getUTCFullYear()&&m>=this.endDate.getUTCMonth()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 3:case 4:if(this.startDate!==-Infinity&&l<=this.startDate.getUTCFullYear()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&l>=this.endDate.getUTCFullYear()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break}},mousewheel:function(k){k.preventDefault();k.stopPropagation();if(this.wheelPause){return}this.wheelPause=true;var j=k.originalEvent;var m=j.wheelDelta;var l=m>0?1:(m===0)?0:-1;if(this.wheelViewModeNavigationInverseDirection){l=-l}this.showMode(l);setTimeout(f.proxy(function(){this.wheelPause=false},this),this.wheelViewModeNavigationDelay)},click:function(n){n.stopPropagation();n.preventDefault();var o=f(n.target).closest("span, td, th, legend");if(o.is("."+this.icontype)){o=f(o).parent().closest("span, td, th, legend")}if(o.length==1){if(o.is(".disabled")){this.element.trigger({type:"outOfRange",date:this.viewDate,startDate:this.startDate,endDate:this.endDate});return}switch(o[0].nodeName.toLowerCase()){case"th":switch(o[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var j=g.modes[this.viewMode].navStep*(o[0].className=="prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveHour(this.viewDate,j);break;case 1:this.viewDate=this.moveDate(this.viewDate,j);break;case 2:this.viewDate=this.moveMonth(this.viewDate,j);break;case 3:case 4:this.viewDate=this.moveYear(this.viewDate,j);break}this.fill();this.element.trigger({type:o[0].className+":"+this.convertViewModeText(this.viewMode),date:this.viewDate,startDate:this.startDate,endDate:this.endDate});break;case"clear":this.reset();if(this.autoclose){this.hide()}break;case"today":var k=new Date();k=h(k.getFullYear(),k.getMonth(),k.getDate(),k.getHours(),k.getMinutes(),k.getSeconds(),0);if(k<this.startDate){k=this.startDate}else{if(k>this.endDate){k=this.endDate}}this.viewMode=this.startViewMode;this.showMode(0);this._setDate(k);this.fill();if(this.autoclose){this.hide()}break}break;case"span":if(!o.is(".disabled")){var q=this.viewDate.getUTCFullYear(),p=this.viewDate.getUTCMonth(),r=this.viewDate.getUTCDate(),s=this.viewDate.getUTCHours(),l=this.viewDate.getUTCMinutes(),t=this.viewDate.getUTCSeconds();if(o.is(".month")){this.viewDate.setUTCDate(1);p=o.parent().find("span").index(o);r=this.viewDate.getUTCDate();this.viewDate.setUTCMonth(p);this.element.trigger({type:"changeMonth",date:this.viewDate});if(this.viewSelect>=3){this._setDate(h(q,p,r,s,l,t,0))}}else{if(o.is(".year")){this.viewDate.setUTCDate(1);q=parseInt(o.text(),10)||0;this.viewDate.setUTCFullYear(q);this.element.trigger({type:"changeYear",date:this.viewDate});if(this.viewSelect>=4){this._setDate(h(q,p,r,s,l,t,0))}}else{if(o.is(".hour")){s=parseInt(o.text(),10)||0;if(o.hasClass("hour_am")||o.hasClass("hour_pm")){if(s==12&&o.hasClass("hour_am")){s=0}else{if(s!=12&&o.hasClass("hour_pm")){s+=12}}}this.viewDate.setUTCHours(s);this.element.trigger({type:"changeHour",date:this.viewDate});if(this.viewSelect>=1){this._setDate(h(q,p,r,s,l,t,0))}}else{if(o.is(".minute")){l=parseInt(o.text().substr(o.text().indexOf(":")+1),10)||0;this.viewDate.setUTCMinutes(l);this.element.trigger({type:"changeMinute",date:this.viewDate});if(this.viewSelect>=0){this._setDate(h(q,p,r,s,l,t,0))}}}}}if(this.viewMode!=0){var m=this.viewMode;this.showMode(-1);this.fill();if(m==this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}}break;case"td":if(o.is(".day")&&!o.is(".disabled")){var r=parseInt(o.text(),10)||1;var q=this.viewDate.getUTCFullYear(),p=this.viewDate.getUTCMonth(),s=this.viewDate.getUTCHours(),l=this.viewDate.getUTCMinutes(),t=this.viewDate.getUTCSeconds();if(o.is(".old")){if(p===0){p=11;q-=1}else{p-=1}}else{if(o.is(".new")){if(p==11){p=0;q+=1}else{p+=1}}}this.viewDate.setUTCFullYear(q);this.viewDate.setUTCMonth(p,r);this.element.trigger({type:"changeDay",date:this.viewDate});if(this.viewSelect>=2){this._setDate(h(q,p,r,s,l,t,0))}}var m=this.viewMode;this.showMode(-1);this.fill();if(m==this.viewMode&&this.autoclose){this.hide()}break}}},_setDate:function(j,l){if(!l||l=="date"){this.date=j}if(!l||l=="view"){this.viewDate=j}this.fill();this.setValue();var k;if(this.isInput){k=this.element}else{if(this.component){k=this.element.find("input")}}if(k){k.change();if(this.autoclose&&(!l||l=="date")){}}this.element.trigger({type:"changeDate",date:this.getDate()});if(j==null){this.date=this.viewDate}},moveMinute:function(k,j){if(!j){return k}var l=new Date(k.valueOf());l.setUTCMinutes(l.getUTCMinutes()+(j*this.minuteStep));return l},moveHour:function(k,j){if(!j){return k}var l=new Date(k.valueOf());l.setUTCHours(l.getUTCHours()+j);return l},moveDate:function(k,j){if(!j){return k}var l=new Date(k.valueOf());l.setUTCDate(l.getUTCDate()+j);return l},moveMonth:function(j,k){if(!k){return j}var n=new Date(j.valueOf()),r=n.getUTCDate(),o=n.getUTCMonth(),m=Math.abs(k),q,p;k=k>0?1:-1;if(m==1){p=k==-1?function(){return n.getUTCMonth()==o}:function(){return n.getUTCMonth()!=q};q=o+k;n.setUTCMonth(q);if(q<0||q>11){q=(q+12)%12}}else{for(var l=0;l<m;l++){n=this.moveMonth(n,k)}q=n.getUTCMonth();n.setUTCDate(r);p=function(){return q!=n.getUTCMonth()}}while(p()){n.setUTCDate(--r);n.setUTCMonth(q)}return n},moveYear:function(k,j){return this.moveMonth(k,j*12)},dateWithinRange:function(j){return j>=this.startDate&&j<=this.endDate},keydown:function(n){if(this.picker.is(":not(:visible)")){if(n.keyCode==27){this.show()}return}var p=false,k,q,o,r,j;switch(n.keyCode){case 27:this.hide();n.preventDefault();break;case 37:case 39:if(!this.keyboardNavigation){break}k=n.keyCode==37?-1:1;viewMode=this.viewMode;if(n.ctrlKey){viewMode+=2}else{if(n.shiftKey){viewMode+=1}}if(viewMode==4){r=this.moveYear(this.date,k);j=this.moveYear(this.viewDate,k)}else{if(viewMode==3){r=this.moveMonth(this.date,k);j=this.moveMonth(this.viewDate,k)}else{if(viewMode==2){r=this.moveDate(this.date,k);j=this.moveDate(this.viewDate,k)}else{if(viewMode==1){r=this.moveHour(this.date,k);j=this.moveHour(this.viewDate,k)}else{if(viewMode==0){r=this.moveMinute(this.date,k);j=this.moveMinute(this.viewDate,k)}}}}}if(this.dateWithinRange(r)){this.date=r;this.viewDate=j;this.setValue();this.update();n.preventDefault();p=true}break;case 38:case 40:if(!this.keyboardNavigation){break}k=n.keyCode==38?-1:1;viewMode=this.viewMode;if(n.ctrlKey){viewMode+=2}else{if(n.shiftKey){viewMode+=1}}if(viewMode==4){r=this.moveYear(this.date,k);j=this.moveYear(this.viewDate,k)}else{if(viewMode==3){r=this.moveMonth(this.date,k);j=this.moveMonth(this.viewDate,k)}else{if(viewMode==2){r=this.moveDate(this.date,k*7);j=this.moveDate(this.viewDate,k*7)}else{if(viewMode==1){if(this.showMeridian){r=this.moveHour(this.date,k*6);j=this.moveHour(this.viewDate,k*6)}else{r=this.moveHour(this.date,k*4);j=this.moveHour(this.viewDate,k*4)}}else{if(viewMode==0){r=this.moveMinute(this.date,k*4);j=this.moveMinute(this.viewDate,k*4)}}}}}if(this.dateWithinRange(r)){this.date=r;this.viewDate=j;this.setValue();this.update();n.preventDefault();p=true}break;case 13:if(this.viewMode!=0){var m=this.viewMode;this.showMode(-1);this.fill();if(m==this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}n.preventDefault();break;case 9:this.hide();break}if(p){var l;if(this.isInput){l=this.element}else{if(this.component){l=this.element.find("input")}}if(l){l.change()}this.element.trigger({type:"changeDate",date:this.getDate()})}},showMode:function(j){if(j){var k=Math.max(0,Math.min(g.modes.length-1,this.viewMode+j));if(k>=this.minView&&k<=this.maxView){this.element.trigger({type:"changeMode",date:this.viewDate,oldViewMode:this.viewMode,newViewMode:k});this.viewMode=k}}this.picker.find(">div").hide().filter(".datetimepicker-"+g.modes[this.viewMode].clsName).css("display","block");this.updateNavArrows()},reset:function(j){this._setDate(null,"date")},convertViewModeText:function(j){switch(j){case 4:return"decade";case 3:return"year";case 2:return"month";case 1:return"day";case 0:return"hour"}}};var b=f.fn.datetimepicker;f.fn.datetimepicker=function(l){var j=Array.apply(null,arguments);j.shift();var k;this.each(function(){var o=f(this),n=o.data("datetimepicker"),m=typeof l=="object"&&l;if(!n){o.data("datetimepicker",(n=new i(this,f.extend({},f.fn.datetimepicker.defaults,m))))}if(typeof l=="string"&&typeof n[l]=="function"){k=n[l].apply(n,j);if(k!==c){return false}}});if(k!==c){return k}else{return this}};f.fn.datetimepicker.defaults={};f.fn.datetimepicker.Constructor=i;var a=f.fn.datetimepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["am","pm"],suffix:["st","nd","rd","th"],today:"Today",clear:"Clear"}};var g={modes:[{clsName:"minutes",navFnc:"Hours",navStep:1},{clsName:"hours",navFnc:"Date",navStep:1},{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(j){return(((j%4===0)&&(j%100!==0))||(j%400===0))},getDaysInMonth:function(j,k){return[31,(g.isLeapYear(j)?29:28),31,30,31,30,31,31,30,31,30,31][k]},getDefaultFormat:function(j,k){if(j=="standard"){if(k=="input"){return"yyyy-mm-dd hh:ii"}else{return"yyyy-mm-dd hh:ii:ss"}}else{if(j=="php"){if(k=="input"){return"Y-m-d H:i"}else{return"Y-m-d H:i:s"}}else{throw new Error("Invalid format type.")}}},validParts:function(j){if(j=="standard"){return/t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g}else{if(j=="php"){return/[dDjlNwzFmMnStyYaABgGhHis]/g}else{throw new Error("Invalid format type.")}}},nonpunctuation:/[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,parseFormat:function(m,k){var j=m.replace(this.validParts(k),"\0").split("\0"),l=m.match(this.validParts(k));if(!j||!j.length||!l||l.length==0){throw new Error("Invalid date format.")}return{separators:j,parts:l}},parseDate:function(A,y,v,j,r){if(A instanceof Date){var u=new Date(A.valueOf()-A.getTimezoneOffset()*60000);u.setMilliseconds(0);return u}if(/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(A)){y=this.parseFormat("yyyy-mm-dd",j)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(A)){y=this.parseFormat("yyyy-mm-dd hh:ii",j)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(A)){y=this.parseFormat("yyyy-mm-dd hh:ii:ss",j)}if(/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(A)){var l=/([-+]\d+)([dmwy])/,q=A.match(/([-+]\d+)([dmwy])/g),t,p;A=new Date();for(var x=0;x<q.length;x++){t=l.exec(q[x]);p=parseInt(t[1]);switch(t[2]){case"d":A.setUTCDate(A.getUTCDate()+p);break;case"m":A=i.prototype.moveMonth.call(i.prototype,A,p);break;case"w":A.setUTCDate(A.getUTCDate()+p*7);break;case"y":A=i.prototype.moveYear.call(i.prototype,A,p);break}}return h(A.getUTCFullYear(),A.getUTCMonth(),A.getUTCDate(),A.getUTCHours(),A.getUTCMinutes(),A.getUTCSeconds(),0)}var q=A&&A.toString().match(this.nonpunctuation)||[],A=new Date(0,0,0,0,0,0,0),m={},z=["hh","h","ii","i","ss","s","yyyy","yy","M","MM","m","mm","D","DD","d","dd","H","HH","p","P","z","Z"],o={hh:function(C,s){return C.setUTCHours(s)},h:function(C,s){return C.setUTCHours(s)},HH:function(C,s){return C.setUTCHours(s==12?0:s)},H:function(C,s){return C.setUTCHours(s==12?0:s)},ii:function(C,s){return C.setUTCMinutes(s)},i:function(C,s){return C.setUTCMinutes(s)},ss:function(C,s){return C.setUTCSeconds(s)},s:function(C,s){return C.setUTCSeconds(s)},yyyy:function(C,s){return C.setUTCFullYear(s)},yy:function(C,s){return C.setUTCFullYear(2000+s)},m:function(C,s){s-=1;while(s<0){s+=12}s%=12;C.setUTCMonth(s);while(C.getUTCMonth()!=s){if(isNaN(C.getUTCMonth())){return C}else{C.setUTCDate(C.getUTCDate()-1)}}return C},d:function(C,s){return C.setUTCDate(s)},p:function(C,s){return C.setUTCHours(s==1?C.getUTCHours()+12:C.getUTCHours())},z:function(){return r}},B,k,t;o.M=o.MM=o.mm=o.m;o.dd=o.d;o.P=o.p;o.Z=o.z;A=h(A.getFullYear(),A.getMonth(),A.getDate(),A.getHours(),A.getMinutes(),A.getSeconds());if(q.length==y.parts.length){for(var x=0,w=y.parts.length;x<w;x++){B=parseInt(q[x],10);t=y.parts[x];if(isNaN(B)){switch(t){case"MM":k=f(a[v].months).filter(function(){var s=this.slice(0,q[x].length),C=q[x].slice(0,s.length);return s==C});B=f.inArray(k[0],a[v].months)+1;break;case"M":k=f(a[v].monthsShort).filter(function(){var s=this.slice(0,q[x].length),C=q[x].slice(0,s.length);return s.toLowerCase()==C.toLowerCase()});B=f.inArray(k[0],a[v].monthsShort)+1;break;case"p":case"P":B=f.inArray(q[x].toLowerCase(),a[v].meridiem);break;case"z":case"Z":r;break}}m[t]=B}for(var x=0,n;x<z.length;x++){n=z[x];if(n in m&&!isNaN(m[n])){o[n](A,m[n])}}}return A},formatDate:function(l,q,m,p,o){if(l==null){return""}var k;if(p=="standard"){k={t:l.getTime(),yy:l.getUTCFullYear().toString().substring(2),yyyy:l.getUTCFullYear(),m:l.getUTCMonth()+1,M:a[m].monthsShort[l.getUTCMonth()],MM:a[m].months[l.getUTCMonth()],d:l.getUTCDate(),D:a[m].daysShort[l.getUTCDay()],DD:a[m].days[l.getUTCDay()],p:(a[m].meridiem.length==2?a[m].meridiem[l.getUTCHours()<12?0:1]:""),h:l.getUTCHours(),i:l.getUTCMinutes(),s:l.getUTCSeconds(),z:o};if(a[m].meridiem.length==2){k.H=(k.h%12==0?12:k.h%12)}else{k.H=k.h}k.HH=(k.H<10?"0":"")+k.H;k.P=k.p.toUpperCase();k.Z=k.z;k.hh=(k.h<10?"0":"")+k.h;k.ii=(k.i<10?"0":"")+k.i;k.ss=(k.s<10?"0":"")+k.s;k.dd=(k.d<10?"0":"")+k.d;k.mm=(k.m<10?"0":"")+k.m}else{if(p=="php"){k={y:l.getUTCFullYear().toString().substring(2),Y:l.getUTCFullYear(),F:a[m].months[l.getUTCMonth()],M:a[m].monthsShort[l.getUTCMonth()],n:l.getUTCMonth()+1,t:g.getDaysInMonth(l.getUTCFullYear(),l.getUTCMonth()),j:l.getUTCDate(),l:a[m].days[l.getUTCDay()],D:a[m].daysShort[l.getUTCDay()],w:l.getUTCDay(),N:(l.getUTCDay()==0?7:l.getUTCDay()),S:(l.getUTCDate()%10<=a[m].suffix.length?a[m].suffix[l.getUTCDate()%10-1]:""),a:(a[m].meridiem.length==2?a[m].meridiem[l.getUTCHours()<12?0:1]:""),g:(l.getUTCHours()%12==0?12:l.getUTCHours()%12),G:l.getUTCHours(),i:l.getUTCMinutes(),s:l.getUTCSeconds()};k.m=(k.n<10?"0":"")+k.n;k.d=(k.j<10?"0":"")+k.j;k.A=k.a.toString().toUpperCase();k.h=(k.g<10?"0":"")+k.g;k.H=(k.G<10?"0":"")+k.G;k.i=(k.i<10?"0":"")+k.i;k.s=(k.s<10?"0":"")+k.s}else{throw new Error("Invalid format type.")}}var l=[],r=f.extend([],q.separators);for(var n=0,j=q.parts.length;n<j;n++){if(r.length){l.push(r.shift())}l.push(k[q.parts[n]])}if(r.length){l.push(r.shift())}return l.join("")},convertViewMode:function(j){switch(j){case 4:case"decade":j=4;break;case 3:case"year":j=3;break;case 2:case"month":j=2;break;case 1:case"day":j=1;break;case 0:case"hour":j=0;break}return j},headTemplate:'<thead><tr><th class="prev"><i class="{iconType} {leftArrow}"/></th><th colspan="5" class="switch"></th><th class="next"><i class="{iconType} {rightArrow}"/></th></tr></thead>',headTemplateV3:'<thead><tr><th class="prev"><span class="{iconType} {leftArrow}"></span> </th><th colspan="5" class="switch"></th><th class="next"><span class="{iconType} {rightArrow}"></span> </th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>'};g.template='<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">'+g.headTemplate+g.contTemplate+g.footTemplate+'</table></div><div class="datetimepicker-hours"><table class=" table-condensed">'+g.headTemplate+g.contTemplate+g.footTemplate+'</table></div><div class="datetimepicker-days"><table class=" table-condensed">'+g.headTemplate+"<tbody></tbody>"+g.footTemplate+'</table></div><div class="datetimepicker-months"><table class="table-condensed">'+g.headTemplate+g.contTemplate+g.footTemplate+'</table></div><div class="datetimepicker-years"><table class="table-condensed">'+g.headTemplate+g.contTemplate+g.footTemplate+"</table></div></div>";g.templateV3='<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">'+g.headTemplateV3+g.contTemplate+g.footTemplate+'</table></div><div class="datetimepicker-hours"><table class=" table-condensed">'+g.headTemplateV3+g.contTemplate+g.footTemplate+'</table></div><div class="datetimepicker-days"><table class=" table-condensed">'+g.headTemplateV3+"<tbody></tbody>"+g.footTemplate+'</table></div><div class="datetimepicker-months"><table class="table-condensed">'+g.headTemplateV3+g.contTemplate+g.footTemplate+'</table></div><div class="datetimepicker-years"><table class="table-condensed">'+g.headTemplateV3+g.contTemplate+g.footTemplate+"</table></div></div>";f.fn.datetimepicker.DPGlobal=g;f.fn.datetimepicker.noConflict=function(){f.fn.datetimepicker=b;return this};f(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api",'[data-provide="datetimepicker"]',function(k){var j=f(this);if(j.data("datetimepicker")){return}k.preventDefault();j.datetimepicker("show")});f(function(){f('[data-provide="datetimepicker-inline"]').datetimepicker()})})); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ar.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ar.js new file mode 100644 index 0000000..a709e52 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ar.js @@ -0,0 +1,17 @@ +/** +* Arabic translation for bootstrap-datetimepicker +* Ala' Mohammad <amohammad@birzeit.ecu> +*/ +;(function($){ + $.fn.datetimepicker.dates['ar'] = { + days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], + daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], + daysMin: ["أح", "إث", "ث", "أر", "خ", "ج", "س", "أح"], + months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], + monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], + today: "هذا اليوم", + suffix: [], + meridiem: [], + rtl: true + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.az.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.az.js new file mode 100644 index 0000000..ddc6883 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.az.js @@ -0,0 +1,16 @@ +/** + * Azerbaijani translation for bootstrap-datetimepicker + * Konstantin Kaluzhnikov <k.kaluzhnikov@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['az'] = { + days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə", "Bazar"], + daysShort: ["B", "Be", "Ça", "Ç", "Ca", "C", "Ş", "B"], + daysMin: ["B", "Be", "Ça", "Ç", "Ca", "C", "Ş", "B"], + months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"], + monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"], + today: "Bugün", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.bg.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.bg.js new file mode 100644 index 0000000..6a11680 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.bg.js @@ -0,0 +1,16 @@ +/** + * Bulgarian translation for bootstrap-datetimepicker + * Apostol Apostolov <apostol.s.apostolov@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['bg'] = { + days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], + daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], + daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], + months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], + monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], + today: "днес", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.bn.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.bn.js new file mode 100644 index 0000000..bd00e48 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.bn.js @@ -0,0 +1,16 @@ +/** + * Bangla(Bangladesh) translation for bootstrap-datetimepicker + * Mahbub Rabbani <mahbub [dot] rucse [at] gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['bn'] = { + days: ["রবিবার", "সোমবার", "মঙ্গলবার", "বুধবার", "বৃহষ্পতিবার", "শুক্রবার", "শনিবার", "রবিবার"], + daysShort: ["রবি", "সোম", "মঙ্গল", "বুধ", " বৃহঃ", "শুক্র", "শনি", "রবি"], + daysMin: ["রবি", "সোম", "মঙ্গ", "বুধ", "বৃহ", "শুক্র", "শনি", "রবি"], + months: ['জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'অগাস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর' ], + monthsShort: ['জানু', 'ফেব্রু', 'মার্চ', 'এপ্রি', 'মে', 'জুন', 'জুলা', 'অগা', 'সেপ্টে', 'অক্টো', 'নভে', 'ডিসে' ], + today: "আজ", + suffix: [], + meridiem: ['পূর্বাহ্ণ', 'অপরাহ্ন'] + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ca.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ca.js new file mode 100644 index 0000000..dd3a5e0 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ca.js @@ -0,0 +1,16 @@ +/** + * Catalan translation for bootstrap-datetimepicker + * J. Garcia <jogaco.en@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['ca'] = { + days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], + daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], + daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], + months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], + monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], + today: "Avui", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.cs.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.cs.js new file mode 100644 index 0000000..4a67804 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.cs.js @@ -0,0 +1,19 @@ +/** + * Czech translation for bootstrap-datetimepicker + * Matěj Koubík <matej@koubik.name> + * Fixes by Michal Remiš <michal.remis@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['cs'] = { + days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], + daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], + daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], + months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], + monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], + today: "Dnes", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy" + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.da.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.da.js new file mode 100644 index 0000000..067322d --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.da.js @@ -0,0 +1,16 @@ +/** + * Danish translation for bootstrap-datetimepicker + * Christian Pedersen <http://github.com/chripede> + */ +;(function($){ + $.fn.datetimepicker.dates['da'] = { + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], + months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.de.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.de.js new file mode 100644 index 0000000..7327596 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.de.js @@ -0,0 +1,18 @@ +/** + * German translation for bootstrap-datetimepicker + * Sam Zurcher <sam@orelias.ch> + */ +;(function($){ + $.fn.datetimepicker.dates['de'] = { + days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], + daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], + daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], + months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], + monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], + today: "Heute", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy" + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ee.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ee.js new file mode 100644 index 0000000..345b7a3 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ee.js @@ -0,0 +1,18 @@ +/** + * Estonian translation for bootstrap-datetimepicker + * Rene Korss <http://rene.korss.ee> + */ +;(function($){ + $.fn.datetimepicker.dates['ee'] = { + days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev", "Pühapäev"], + daysShort: ["P", "E", "T", "K", "N", "R", "L", "P"], + daysMin: ["P", "E", "T", "K", "N", "R", "L", "P"], + months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], + monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"], + today: "Täna", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy hh:ii" + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.el.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.el.js new file mode 100644 index 0000000..e3c93d3 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.el.js @@ -0,0 +1,15 @@ +/** +* Greek translation for bootstrap-datetimepicker +*/ +;(function($){ + $.fn.datetimepicker.dates['el'] = { + days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], + daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], + daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], + months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], + monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], + today: "Σήμερα", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.es.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.es.js new file mode 100644 index 0000000..8a76879 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.es.js @@ -0,0 +1,16 @@ +/** + * Spanish translation for bootstrap-datetimepicker + * Bruno Bonamin <bruno.bonamin@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['es'] = { + days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], + daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], + daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], + months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], + monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], + today: "Hoy", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.fi.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.fi.js new file mode 100644 index 0000000..85c1df5 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.fi.js @@ -0,0 +1,16 @@ +/** + * Finnish translation for bootstrap-datetimepicker + * Jaakko Salonen <https://github.com/jsalonen> + */ +;(function($){ + $.fn.datetimepicker.dates['fi'] = { + days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], + daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], + daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], + months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], + monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], + today: "tänään", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.fr.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.fr.js new file mode 100644 index 0000000..7ca19bc --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.fr.js @@ -0,0 +1,18 @@ +/** + * French translation for bootstrap-datetimepicker + * Nico Mollet <nico.mollet@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['fr'] = { + days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], + daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], + daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], + months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], + monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"], + today: "Aujourd'hui", + suffix: [], + meridiem: ["am", "pm"], + weekStart: 1, + format: "dd/mm/yyyy hh:ii" + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.he.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.he.js new file mode 100644 index 0000000..4b17e63 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.he.js @@ -0,0 +1,17 @@ +/** + * Hebrew translation for bootstrap-datetimepicker + * Sagie Maoz <sagie@maoz.info> + */ +;(function($){ + $.fn.datetimepicker.dates['he'] = { + days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], + daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], + daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], + months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], + monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], + today: "היום", + suffix: [], + meridiem: [], + rtl: true + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hr.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hr.js new file mode 100644 index 0000000..b79a2c6 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hr.js @@ -0,0 +1,15 @@ +/** + * Croatian localisation + */ +;(function($){ + $.fn.datetimepicker.dates['hr'] = { + days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"], + daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"], + daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], + months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], + monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"], + today: "Danas", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hu.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hu.js new file mode 100644 index 0000000..156e770 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hu.js @@ -0,0 +1,17 @@ +/** + * Hungarian translation for bootstrap-datetimepicker + * darevish <http://github.com/darevish> + */ +;(function($){ + $.fn.datetimepicker.dates['hu'] = { + days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"], + daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"], + daysMin: ["V", "H", "K", "Sze", "Cs", "P", "Szo", "V"], + months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], + monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"], + today: "Ma", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hy.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hy.js new file mode 100644 index 0000000..e2c601b --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.hy.js @@ -0,0 +1,16 @@ +/** + * Armenian translation for bootstrap-datepicker + * Hayk Chamyan <hamshen@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['hy'] = { + days: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ", "Կիրակի"], + daysShort: ["Կիր", "Երկ", "Երք", "Չոր", "Հնգ", "Ուր", "Շաբ", "Կիր"], + daysMin: ["Կի", "Եկ", "Եք", "Չո", "Հի", "Ու", "Շա", "Կի"], + months: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"], + monthsShort: ["Հնվ", "Փետ", "Մար", "Ապր", "Մայ", "Հուն", "Հուլ", "Օգս", "Սեպ", "Հոկ", "Նոյ", "Դեկ"], + today: "Այսօր", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.id.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.id.js new file mode 100644 index 0000000..d22dff0 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.id.js @@ -0,0 +1,19 @@ +/** + * Bahasa translation for bootstrap-datetimepicker + * Azwar Akbar <azwar.akbar@gmail.com> + * Addtional by Yulian Sutopo <yuliansutopo@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['id'] = { + days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], + daysShort: ["Mng", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mng"], + daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], + months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], + today: "Hari Ini", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd/mm/yyyy hh:ii:ss" + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.is.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.is.js new file mode 100644 index 0000000..fc9173c --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.is.js @@ -0,0 +1,16 @@ +/** + * Icelandic translation for bootstrap-datetimepicker + * Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['is'] = { + days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], + daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], + daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], + months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], + today: "Í Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.it.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.it.js new file mode 100644 index 0000000..030d3e7 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.it.js @@ -0,0 +1,18 @@ +/** + * Italian translation for bootstrap-datetimepicker + * Enrico Rubboli <rubboli@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['it'] = { + days: ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"], + daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], + daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], + months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], + monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], + today: "Oggi", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd/mm/yyyy hh:ii:ss" + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ja.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ja.js new file mode 100644 index 0000000..d079610 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ja.js @@ -0,0 +1,16 @@ +/** + * Japanese translation for bootstrap-datetimepicker + * Norio Suzuki <https://github.com/suzuki/> + */ +;(function($){ + $.fn.datetimepicker.dates['ja'] = { + days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], + daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], + daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], + months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], + today: "今日", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ka.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ka.js new file mode 100644 index 0000000..740740d --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ka.js @@ -0,0 +1,16 @@ +/** + * Georgian translation for bootstrap-datetimepicker + * Zura Jijavadze <mailzura@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['ka'] = { + days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი", "კვირა"], + daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ", "კვი"], + daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა", "კვ"], + months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"], + monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"], + today: "დღეს", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ko.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ko.js new file mode 100644 index 0000000..1d007a7 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ko.js @@ -0,0 +1,17 @@ +/** + * Korean translation for bootstrap-datetimepicker + * Gu Youn <http://github.com/guyoun> + * Baekjoon Choi <http://github.com/Baekjoon> + */ +;(function($){ + $.fn.datetimepicker.dates['ko'] = { + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], + daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], + daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], + suffix: [], + meridiem: ["오전", "오후"], + today: "오늘", + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.lt.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.lt.js new file mode 100644 index 0000000..8018a70 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.lt.js @@ -0,0 +1,18 @@ +/** + * Lithuanian translation for bootstrap-datetimepicker + * Šarūnas Gliebus <ssharunas@yahoo.co.uk> + */ + +;(function($){ + $.fn.datetimepicker.dates['lt'] = { + days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], + daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], + daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], + months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], + monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], + today: "Šiandien", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.lv.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.lv.js new file mode 100644 index 0000000..333156b --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.lv.js @@ -0,0 +1,18 @@ +/** + * Latvian translation for bootstrap-datetimepicker + * Artis Avotins <artis@apit.lv> + */ + +;(function($){ + $.fn.datetimepicker.dates['lv'] = { + days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], + daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], + daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"], + months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."], + today: "Šodien", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ms.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ms.js new file mode 100644 index 0000000..11b4f98 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ms.js @@ -0,0 +1,16 @@ +/** + * Malay translation for bootstrap-datetimepicker + * Ateman Faiz <noorulfaiz@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['ms'] = { + days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], + daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], + daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], + months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], + today: "Hari Ini", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.nb.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.nb.js new file mode 100644 index 0000000..0b26ea6 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.nb.js @@ -0,0 +1,16 @@ +/** + * Norwegian (bokmål) translation for bootstrap-datetimepicker + * Fredrik Sundmyhr <http://github.com/fsundmyhr> + */ +;(function($){ + $.fn.datetimepicker.dates['nb'] = { + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], + months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.nl.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.nl.js new file mode 100644 index 0000000..5950f1c --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.nl.js @@ -0,0 +1,16 @@ +/** + * Dutch translation for bootstrap-datetimepicker + * Reinier Goltstein <mrgoltstein@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['nl'] = { + days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], + daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], + daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], + months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "Vandaag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.no.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.no.js new file mode 100644 index 0000000..8685745 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.no.js @@ -0,0 +1,16 @@ +/** + * Norwegian translation for bootstrap-datetimepicker + * Rune Warhuus <rune@dinkdonkd.no> + */ +;(function($){ + $.fn.datetimepicker.dates['no'] = { + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], + months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pl.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pl.js new file mode 100644 index 0000000..806b55d --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pl.js @@ -0,0 +1,17 @@ +/** + * Polish translation for bootstrap-datetimepicker + * Robert <rtpm@gazeta.pl> + */ +;(function($){ +$.fn.datetimepicker.dates['pl'] = { + days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], + daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], + daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], + months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], + monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], + today: "Dzisiaj", + suffix: [], + meridiem: [], + weekStart: 1 +}; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pt-BR.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pt-BR.js new file mode 100644 index 0000000..6828698 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pt-BR.js @@ -0,0 +1,17 @@ +/** + * Brazilian translation for bootstrap-datetimepicker + * Cauan Cabral <cauan@radig.com.br> + */ +;(function($){ + $.fn.datetimepicker.dates['pt-BR'] = { + format: 'dd/mm/yyyy', + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], + today: "Hoje", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pt.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pt.js new file mode 100644 index 0000000..c7603ee --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.pt.js @@ -0,0 +1,17 @@ +/** + * Portuguese translation for bootstrap-datetimepicker + * Original code: Cauan Cabral <cauan@radig.com.br> + * Tiago Melo <tiago.blackcode@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['pt'] = { + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], + suffix: [], + meridiem: ["am","pm"], + today: "Hoje" + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ro.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ro.js new file mode 100644 index 0000000..55436ae --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ro.js @@ -0,0 +1,17 @@ +/** + * Romanian translation for bootstrap-datetimepicker + * Cristian Vasile <cristi.mie@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['ro'] = { + days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], + daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], + daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], + months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], + monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], + today: "Astăzi", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.rs-latin.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.rs-latin.js new file mode 100644 index 0000000..91b3cac --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.rs-latin.js @@ -0,0 +1,16 @@ +/** + * Serbian latin translation for bootstrap-datetimepicker + * Bojan Milosavlević <milboj@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['rs'] = { + days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], + daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], + today: "Danas", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.rs.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.rs.js new file mode 100644 index 0000000..e49d10e --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.rs.js @@ -0,0 +1,16 @@ +/** + * Serbian cyrillic translation for bootstrap-datetimepicker + * Bojan Milosavlević <milboj@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['rs'] = { + days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], + daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], + daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], + months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], + monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], + today: "Данас", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ru.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ru.js new file mode 100644 index 0000000..8873e95 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ru.js @@ -0,0 +1,16 @@ +/** + * Russian translation for bootstrap-datetimepicker + * Victor Taranenko <darwin@snowdale.com> + */ +;(function($){ + $.fn.datetimepicker.dates['ru'] = { + days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], + daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], + daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], + months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], + monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], + today: "Сегодня", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sk.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sk.js new file mode 100644 index 0000000..15596be --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sk.js @@ -0,0 +1,19 @@ +/** + * Slovak translation for bootstrap-datetimepicker + * Marek Lichtner <marek@licht.sk> + * Fixes by Michal Remiš <michal.remis@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates["sk"] = { + days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], + daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], + daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So", "Ne"], + months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "Dnes", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy" + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sl.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sl.js new file mode 100644 index 0000000..69bae12 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sl.js @@ -0,0 +1,16 @@ +/** + * Slovene translation for bootstrap-datetimepicker + * Gregor Rudolf <gregor.rudolf@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['sl'] = { + days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], + daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], + daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], + months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], + today: "Danes", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sv.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sv.js new file mode 100644 index 0000000..9892999 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sv.js @@ -0,0 +1,16 @@ +/** + * Swedish translation for bootstrap-datetimepicker + * Patrik Ragnarsson <patrik@starkast.net> + */ +;(function($){ + $.fn.datetimepicker.dates['sv'] = { + days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], + daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], + daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], + months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sw.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sw.js new file mode 100644 index 0000000..e2286a5 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.sw.js @@ -0,0 +1,17 @@ +/** + * Swahili translation for bootstrap-datetimepicker + * Edwin Mugendi <https://github.com/edwinmugendi> + * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku + */ +;(function($){ + $.fn.datetimepicker.dates['sw'] = { + days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], + daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], + daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], + months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], + monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], + today: "Leo", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.th.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.th.js new file mode 100644 index 0000000..9a0fd38 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.th.js @@ -0,0 +1,16 @@ +/** + * Thai translation for bootstrap-datetimepicker + * Suchau Jiraprapot <seroz24@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['th'] = { + days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], + daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], + daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], + months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], + monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], + today: "วันนี้", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.tr.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.tr.js new file mode 100644 index 0000000..4536b2e --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.tr.js @@ -0,0 +1,17 @@ +/** + * Turkish translation for bootstrap-datetimepicker + * Serkan Algur <kaisercrazy_2@hotmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['tr'] = { + days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], + daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], + daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], + months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], + monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], + today: "Bugün", + suffix: [], + meridiem: [] + }; +}(jQuery)); + diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ua.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ua.js new file mode 100644 index 0000000..3a0cbfb --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.ua.js @@ -0,0 +1,15 @@ +/** + * Ukrainian translation for bootstrap-datepicker + * Igor Polynets + */ +;(function($){ + $.fn.datetimepicker.dates['ua'] = { + days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четверг", "П'ятниця", "Субота", "Неділя"], + daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], + daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], + months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], + monthsShort: ["Січ", "Лют", "Бер", "Квт", "Трв", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Грд"], + today: "Сьогодні", + weekStart: 1 + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.uk.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.uk.js new file mode 100644 index 0000000..232518d --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.uk.js @@ -0,0 +1,16 @@ +/** + * Ukrainian translation for bootstrap-datetimepicker + * Andrey Vityuk <andrey [dot] vityuk [at] gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['uk'] = { + days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"], + daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], + daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], + months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], + monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], + today: "Сьогодні", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.zh-CN.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.zh-CN.js new file mode 100644 index 0000000..418fb30 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.zh-CN.js @@ -0,0 +1,16 @@ +/** + * Simplified Chinese translation for bootstrap-datetimepicker + * Yuan Cheung <advanimal@gmail.com> + */ +;(function($){ + $.fn.datetimepicker.dates['zh-CN'] = { + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], + daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + today: "今天", + suffix: [], + meridiem: ["上午", "下午"] + }; +}(jQuery)); diff --git a/reports/datepicker-time/js/locales/bootstrap-datetimepicker.zh-TW.js b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.zh-TW.js new file mode 100644 index 0000000..6d1ed20 --- /dev/null +++ b/reports/datepicker-time/js/locales/bootstrap-datetimepicker.zh-TW.js @@ -0,0 +1,16 @@ +/** + * Traditional Chinese translation for bootstrap-datetimepicker + * Rung-Sheng Jang <daniel@i-trend.co.cc> + */ +;(function($){ + $.fn.datetimepicker.dates['zh-TW'] = { + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], + daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + today: "今天", + suffix: [], + meridiem: ["上午", "下午"] + }; +}(jQuery)); diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap-theme.css b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap-theme.css new file mode 100644 index 0000000..ad11735 --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap-theme.css @@ -0,0 +1,384 @@ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn:active, +.btn.active { + background-image: none; +} + +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%); + background-repeat: repeat-x; + border-color: #e0e0e0; + border-color: #ccc; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); +} + +.btn-default:active, +.btn-default.active { + background-color: #e6e6e6; + border-color: #e0e0e0; +} + +.btn-primary { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + background-repeat: repeat-x; + border-color: #2d6ca2; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); +} + +.btn-primary:active, +.btn-primary.active { + background-color: #3071a9; + border-color: #2d6ca2; +} + +.btn-success { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); + background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); + background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + background-repeat: repeat-x; + border-color: #419641; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); +} + +.btn-success:active, +.btn-success.active { + background-color: #449d44; + border-color: #419641; +} + +.btn-warning { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); + background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); + background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + background-repeat: repeat-x; + border-color: #eb9316; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); +} + +.btn-warning:active, +.btn-warning.active { + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-danger { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); + background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); + background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + background-repeat: repeat-x; + border-color: #c12e2a; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); +} + +.btn-danger:active, +.btn-danger.active { + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-info { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); + background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); + background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + background-repeat: repeat-x; + border-color: #2aabd2; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); +} + +.btn-info:active, +.btn-info.active { + background-color: #31b0d5; + border-color: #2aabd2; +} + +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #357ebd; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); +} + +.navbar { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8)); + background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); + background-repeat: repeat-x; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); +} + +.navbar .navbar-nav > .active > a { + background-color: #f8f8f8; +} + +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.navbar-inverse { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222)); + background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%); + background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); +} + +.navbar-inverse .navbar-nav > .active > a { + background-color: #222222; +} + +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} + +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.alert-success { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc)); + background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%); + background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + background-repeat: repeat-x; + border-color: #b2dba1; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); +} + +.alert-info { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0)); + background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%); + background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + background-repeat: repeat-x; + border-color: #9acfea; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); +} + +.alert-warning { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0)); + background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%); + background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + background-repeat: repeat-x; + border-color: #f5e79e; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); +} + +.alert-danger { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3)); + background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%); + background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + background-repeat: repeat-x; + border-color: #dca7a7; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); +} + +.progress { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%); + background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); +} + +.progress-bar { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); +} + +.progress-bar-success { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); + background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); + background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); +} + +.progress-bar-info { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); + background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); + background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); +} + +.progress-bar-warning { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); + background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); + background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); +} + +.progress-bar-danger { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); + background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); + background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); +} + +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #3071a9; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + background-repeat: repeat-x; + border-color: #3278b3; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); +} + +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.panel-default > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8)); + background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%); + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); +} + +.panel-primary > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); +} + +.panel-success > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6)); + background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%); + background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); +} + +.panel-info > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3)); + background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%); + background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); +} + +.panel-warning > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc)); + background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%); + background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); +} + +.panel-danger > .panel-heading { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc)); + background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%); + background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); +} + +.well { + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%); + background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + background-repeat: repeat-x; + border-color: #dcdcdc; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); +} \ No newline at end of file diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap-theme.min.css b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap-theme.min.css new file mode 100644 index 0000000..cad36b4 --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap-theme.min.css @@ -0,0 +1 @@ +.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap.css b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap.css new file mode 100644 index 0000000..bbda4ee --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap.css @@ -0,0 +1,6805 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +mark { + color: #000; + background: #ff0; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre-wrap; +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 2cm .5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input, +select[multiple], +textarea { + background-image: none; +} + +a { + color: #428bca; + text-decoration: none; +} + +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16.099999999999998px; + font-weight: 200; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +.text-muted { + color: #999999; +} + +.text-primary { + color: #428bca; +} + +.text-warning { + color: #c09853; +} + +.text-danger { + color: #b94a48; +} + +.text-success { + color: #468847; +} + +.text-info { + color: #3a87ad; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h1, +.h1 { + font-size: 36px; +} + +h2, +.h2 { + font-size: 30px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +h1 small, +.h1 small { + font-size: 24px; +} + +h2 small, +.h2 small { + font-size: 18px; +} + +h3 small, +.h3 small, +h4 small, +.h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +blockquote small { + display: block; + line-height: 1.428571429; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; +} + +code, +pre { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12, +.col-sm-1, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-md-1, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-md-10, +.col-md-11, +.col-md-12, +.col-lg-1, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-10, +.col-lg-11, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11 { + float: left; +} + +.col-xs-1 { + width: 8.333333333333332%; +} + +.col-xs-2 { + width: 16.666666666666664%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.33333333333333%; +} + +.col-xs-5 { + width: 41.66666666666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.333333333333336%; +} + +.col-xs-8 { + width: 66.66666666666666%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.33333333333334%; +} + +.col-xs-11 { + width: 91.66666666666666%; +} + +.col-xs-12 { + width: 100%; +} + +@media (min-width: 768px) { + .container { + max-width: 750px; + } + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11 { + float: left; + } + .col-sm-1 { + width: 8.333333333333332%; + } + .col-sm-2 { + width: 16.666666666666664%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.33333333333333%; + } + .col-sm-5 { + width: 41.66666666666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333333333336%; + } + .col-sm-8 { + width: 66.66666666666666%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.33333333333334%; + } + .col-sm-11 { + width: 91.66666666666666%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-push-1 { + left: 8.333333333333332%; + } + .col-sm-push-2 { + left: 16.666666666666664%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.33333333333333%; + } + .col-sm-push-5 { + left: 41.66666666666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.333333333333336%; + } + .col-sm-push-8 { + left: 66.66666666666666%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.33333333333334%; + } + .col-sm-push-11 { + left: 91.66666666666666%; + } + .col-sm-pull-1 { + right: 8.333333333333332%; + } + .col-sm-pull-2 { + right: 16.666666666666664%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.33333333333333%; + } + .col-sm-pull-5 { + right: 41.66666666666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.333333333333336%; + } + .col-sm-pull-8 { + right: 66.66666666666666%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.33333333333334%; + } + .col-sm-pull-11 { + right: 91.66666666666666%; + } + .col-sm-offset-1 { + margin-left: 8.333333333333332%; + } + .col-sm-offset-2 { + margin-left: 16.666666666666664%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.33333333333333%; + } + .col-sm-offset-5 { + margin-left: 41.66666666666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.333333333333336%; + } + .col-sm-offset-8 { + margin-left: 66.66666666666666%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.33333333333334%; + } + .col-sm-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 992px) { + .container { + max-width: 970px; + } + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11 { + float: left; + } + .col-md-1 { + width: 8.333333333333332%; + } + .col-md-2 { + width: 16.666666666666664%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.33333333333333%; + } + .col-md-5 { + width: 41.66666666666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.333333333333336%; + } + .col-md-8 { + width: 66.66666666666666%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.33333333333334%; + } + .col-md-11 { + width: 91.66666666666666%; + } + .col-md-12 { + width: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.333333333333332%; + } + .col-md-push-2 { + left: 16.666666666666664%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.33333333333333%; + } + .col-md-push-5 { + left: 41.66666666666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.333333333333336%; + } + .col-md-push-8 { + left: 66.66666666666666%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.33333333333334%; + } + .col-md-push-11 { + left: 91.66666666666666%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.333333333333332%; + } + .col-md-pull-2 { + right: 16.666666666666664%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.33333333333333%; + } + .col-md-pull-5 { + right: 41.66666666666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.333333333333336%; + } + .col-md-pull-8 { + right: 66.66666666666666%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.33333333333334%; + } + .col-md-pull-11 { + right: 91.66666666666666%; + } + .col-md-offset-0 { + margin-left: 0; + } + .col-md-offset-1 { + margin-left: 8.333333333333332%; + } + .col-md-offset-2 { + margin-left: 16.666666666666664%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.33333333333333%; + } + .col-md-offset-5 { + margin-left: 41.66666666666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.333333333333336%; + } + .col-md-offset-8 { + margin-left: 66.66666666666666%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.33333333333334%; + } + .col-md-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px; + } + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11 { + float: left; + } + .col-lg-1 { + width: 8.333333333333332%; + } + .col-lg-2 { + width: 16.666666666666664%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.33333333333333%; + } + .col-lg-5 { + width: 41.66666666666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333333333336%; + } + .col-lg-8 { + width: 66.66666666666666%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.33333333333334%; + } + .col-lg-11 { + width: 91.66666666666666%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.333333333333332%; + } + .col-lg-push-2 { + left: 16.666666666666664%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.33333333333333%; + } + .col-lg-push-5 { + left: 41.66666666666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.333333333333336%; + } + .col-lg-push-8 { + left: 66.66666666666666%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.33333333333334%; + } + .col-lg-push-11 { + left: 91.66666666666666%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.333333333333332%; + } + .col-lg-pull-2 { + right: 16.666666666666664%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.33333333333333%; + } + .col-lg-pull-5 { + right: 41.66666666666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.333333333333336%; + } + .col-lg-pull-8 { + right: 66.66666666666666%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.33333333333334%; + } + .col-lg-pull-11 { + right: 91.66666666666666%; + } + .col-lg-offset-0 { + margin-left: 0; + } + .col-lg-offset-1 { + margin-left: 8.333333333333332%; + } + .col-lg-offset-2 { + margin-left: 16.666666666666664%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.33333333333333%; + } + .col-lg-offset-5 { + margin-left: 41.66666666666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.333333333333336%; + } + .col-lg-offset-8 { + margin-left: 66.66666666666666%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.33333333333334%; + } + .col-lg-offset-11 { + margin-left: 91.66666666666666%; + } +} + +table { + max-width: 100%; + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table thead > tr > th, +.table tbody > tr > th, +.table tfoot > tr > th, +.table thead > tr > td, +.table tbody > tr > td, +.table tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} + +.table caption + thead tr:first-child th, +.table colgroup + thead tr:first-child th, +.table thead:first-child tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed thead > tr > th, +.table-condensed tbody > tr > th, +.table-condensed tfoot > tr > th, +.table-condensed thead > tr > td, +.table-condensed tbody > tr > td, +.table-condensed tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class*="col-"] { + display: table-column; + float: none; +} + +table td[class*="col-"], +table th[class*="col-"] { + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; + border-color: #c9e2b3; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; + border-color: #eed3d7; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td { + background-color: #ebcccc; + border-color: #e6c1c7; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; + border-color: #f8e5be; +} + +@media (max-width: 768px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + background-color: #fff; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > thead > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > thead > tr:last-child > td, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +input[type="file"] { + display: block; +} + +select[multiple], +select[size] { + height: auto; +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + +.form-control:-moz-placeholder { + color: #999999; +} + +.form-control::-moz-placeholder { + color: #999999; +} + +.form-control:-ms-input-placeholder { + color: #999999; +} + +.form-control::-webkit-input-placeholder { + color: #999999; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +.radio[disabled], +.radio-inline[disabled], +.checkbox[disabled], +.checkbox-inline[disabled], +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"], +fieldset[disabled] .radio, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm { + height: 30px; + line-height: 30px; +} + +textarea.input-sm { + height: auto; +} + +.input-lg { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-lg { + height: 45px; + line-height: 45px; +} + +textarea.input-lg { + height: auto; +} + +.has-warning .help-block, +.has-warning .control-label { + color: #c09853; +} + +.has-warning .form-control { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.has-error .help-block, +.has-error .control-label { + color: #b94a48; +} + +.has-error .form-control { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.has-success .help-block, +.has-success .control-label { + color: #468847; +} + +.has-success .form-control { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.form-control-static { + padding-top: 7px; + margin-bottom: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +.form-horizontal .control-label, +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + color: #333333; + background-color: #ebebeb; + border-color: #adadad; +} + +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #357ebd; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3276b1; + border-color: #285e8e; +} + +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} + +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ed9c28; + border-color: #d58512; +} + +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #d2322d; + border-color: #ac2925; +} + +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #47a447; + border-color: #398439; +} + +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #39b3d7; + border-color: #269abc; +} + +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #999999; + text-decoration: none; +} + +.btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-sm, +.btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs { + padding: 1px 5px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1; +} + +.glyphicon-asterisk:before { + content: "\2a"; +} + +.glyphicon-plus:before { + content: "\2b"; +} + +.glyphicon-euro:before { + content: "\20ac"; +} + +.glyphicon-minus:before { + content: "\2212"; +} + +.glyphicon-cloud:before { + content: "\2601"; +} + +.glyphicon-envelope:before { + content: "\2709"; +} + +.glyphicon-pencil:before { + content: "\270f"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +.glyphicon-briefcase:before { + content: "\1f4bc"; +} + +.glyphicon-calendar:before { + content: "\1f4c5"; +} + +.glyphicon-pushpin:before { + content: "\1f4cc"; +} + +.glyphicon-paperclip:before { + content: "\1f4ce"; +} + +.glyphicon-camera:before { + content: "\1f4f7"; +} + +.glyphicon-lock:before { + content: "\1f512"; +} + +.glyphicon-bell:before { + content: "\1f514"; +} + +.glyphicon-bookmark:before { + content: "\1f516"; +} + +.glyphicon-fire:before { + content: "\1f525"; +} + +.glyphicon-wrench:before { + content: "\1f527"; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-bottom: 0 dotted; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + list-style: none; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } +} + +.btn-default .caret { + border-top-color: #333333; +} + +.btn-primary .caret, +.btn-success .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret { + border-top-color: #fff; +} + +.dropup .btn-default .caret { + border-bottom-color: #333333; +} + +.dropup .btn-primary .caret, +.dropup .btn-success .caret, +.dropup .btn-warning .caret, +.dropup .btn-danger .caret, +.dropup .btn-info .caret { + border-bottom-color: #fff; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: none; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group-xs > .btn { + padding: 5px 10px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, +.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + border-collapse: separate; + table-layout: fixed; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 45px; + line-height: 45px; +} + +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn { + height: auto; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} + +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn { + height: auto; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -4px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + position: relative; + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li.disabled > a { + color: #999999; +} + +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} + +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} + +.nav-tabs.nav-justified > li { + float: none; +} + +.nav-tabs.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #ffffff; +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 5px; +} + +.nav-pills > li + li { + margin-left: 2px; +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + width: 100%; +} + +.nav-justified > li { + float: none; +} + +.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs-justified > .active > a { + border-bottom-color: #ffffff; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; +} + +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + z-index: 1000; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse.in { + overflow-y: auto; +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px; + } + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } + .navbar-collapse .navbar-text:last-child { + margin-right: 0; + } +} + +.container > .navbar-header, +.container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .container > .navbar-header, + .container > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + z-index: 1030; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} + +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7.5px -15px; +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} + +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px; +} + +@media (min-width: 768px) { + .navbar-text { + margin-right: 15px; + margin-left: 15px; + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} + +.navbar-default .navbar-brand { + color: #777777; +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} + +.navbar-default .navbar-text { + color: #777777; +} + +.navbar-default .navbar-nav > li > a { + color: #777777; +} + +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} + +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-default .navbar-toggle { + border-color: #dddddd; +} + +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #cccccc; +} + +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e6e6e6; +} + +.navbar-default .navbar-nav > .dropdown > a:hover .caret, +.navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .open > a .caret, +.navbar-default .navbar-nav > .open > a:hover .caret, +.navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #777777; +} + +.navbar-default .navbar-link:hover { + color: #333333; +} + +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} + +.navbar-inverse .navbar-brand { + color: #999999; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #333333; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .navbar-nav > .open > a .caret, +.navbar-inverse .navbar-nav > .open > a:hover .caret, +.navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #999999; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #cccccc; + content: "/\00a0"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + background-color: #eeeeee; +} + +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} + +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; + border-color: #dddddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.label-default { + background-color: #999999; +} + +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #808080; +} + +.label-primary { + background-color: #428bca; +} + +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +.container .jumbotron { + border-radius: 6px; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1 { + font-size: 63px; + } +} + +.thumbnail { + display: inline-block; + display: block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.thumbnail > img { + display: block; + height: auto; + max-width: 100%; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #428bca; +} + +.thumbnail > img { + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert h4 { + margin-top: 0; + color: inherit; +} + +.alert .alert-link { + font-weight: bold; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable { + padding-right: 35px; +} + +.alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success .alert-link { + color: #356635; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info .alert-link { + color: #2d6987; +} + +.alert-warning { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.alert-warning hr { + border-top-color: #f8e5be; +} + +.alert-warning .alert-link { + color: #a47e3c; +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger hr { + border-top-color: #e6c1c7; +} + +.alert-danger .alert-link { + color: #953b39; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.list-group-item > .badge { + float: right; +} + +.list-group-item > .badge + .badge { + margin-right: 5px; +} + +a.list-group-item { + color: #555555; +} + +a.list-group-item .list-group-item-heading { + color: #333333; +} + +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading { + color: inherit; +} + +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel > .list-group { + margin-bottom: 0; +} + +.panel > .list-group .list-group-item { + border-width: 1px 0; +} + +.panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.panel > .list-group .list-group-item:last-child { + border-bottom: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.panel > .table { + margin-bottom: 0; +} + +.panel > .panel-body + .table { + border-top: 1px solid #dddddd; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; +} + +.panel-title > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel-group .panel { + margin-bottom: 0; + overflow: hidden; + border-radius: 4px; +} + +.panel-group .panel + .panel { + margin-top: 5px; +} + +.panel-group .panel-heading { + border-bottom: 0; +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #dddddd; +} + +.panel-group .panel-footer { + border-top: 0; +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} + +.panel-default { + border-color: #dddddd; +} + +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} + +.panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #dddddd; +} + +.panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #dddddd; +} + +.panel-primary { + border-color: #428bca; +} + +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #428bca; +} + +.panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #428bca; +} + +.panel-success { + border-color: #d6e9c6; +} + +.panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d6e9c6; +} + +.panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-warning { + border-color: #fbeed5; +} + +.panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #fbeed5; +} + +.panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #fbeed5; +} + +.panel-danger { + border-color: #eed3d7; +} + +.panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #eed3d7; +} + +.panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #eed3d7; +} + +.panel-info { + border-color: #bce8f1; +} + +.panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce8f1; +} + +.panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce8f1; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +body.modal-open, +.modal-open .navbar-fixed-top, +.modal-open .navbar-fixed-bottom { + margin-right: 15px; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog { + z-index: 1050; + width: auto; + padding: 10px; + margin-right: auto; + margin-left: auto; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 600px; + padding-top: 30px; + padding-bottom: 30px; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; + content: " "; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; + content: " "; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; + content: " "; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; + content: " "; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + height: auto; + max-width: 100%; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; +} + +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + border: 1px solid #ffffff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #ffffff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px; + } +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.visible-xs { + display: none !important; +} + +tr.visible-xs { + display: none !important; +} + +th.visible-xs, +td.visible-xs { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important; + } + tr.visible-xs.visible-sm { + display: table-row !important; + } + th.visible-xs.visible-sm, + td.visible-xs.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important; + } + tr.visible-xs.visible-md { + display: table-row !important; + } + th.visible-xs.visible-md, + td.visible-xs.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important; + } + tr.visible-xs.visible-lg { + display: table-row !important; + } + th.visible-xs.visible-lg, + td.visible-xs.visible-lg { + display: table-cell !important; + } +} + +.visible-sm { + display: none !important; +} + +tr.visible-sm { + display: none !important; +} + +th.visible-sm, +td.visible-sm { + display: none !important; +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important; + } + tr.visible-sm.visible-xs { + display: table-row !important; + } + th.visible-sm.visible-xs, + td.visible-sm.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important; + } + tr.visible-sm.visible-md { + display: table-row !important; + } + th.visible-sm.visible-md, + td.visible-sm.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important; + } + tr.visible-sm.visible-lg { + display: table-row !important; + } + th.visible-sm.visible-lg, + td.visible-sm.visible-lg { + display: table-cell !important; + } +} + +.visible-md { + display: none !important; +} + +tr.visible-md { + display: none !important; +} + +th.visible-md, +td.visible-md { + display: none !important; +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important; + } + tr.visible-md.visible-xs { + display: table-row !important; + } + th.visible-md.visible-xs, + td.visible-md.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important; + } + tr.visible-md.visible-sm { + display: table-row !important; + } + th.visible-md.visible-sm, + td.visible-md.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important; + } + tr.visible-md.visible-lg { + display: table-row !important; + } + th.visible-md.visible-lg, + td.visible-md.visible-lg { + display: table-cell !important; + } +} + +.visible-lg { + display: none !important; +} + +tr.visible-lg { + display: none !important; +} + +th.visible-lg, +td.visible-lg { + display: none !important; +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important; + } + tr.visible-lg.visible-xs { + display: table-row !important; + } + th.visible-lg.visible-xs, + td.visible-lg.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important; + } + tr.visible-lg.visible-sm { + display: table-row !important; + } + th.visible-lg.visible-sm, + td.visible-lg.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important; + } + tr.visible-lg.visible-md { + display: table-row !important; + } + th.visible-lg.visible-md, + td.visible-lg.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} + +.hidden-xs { + display: block !important; +} + +tr.hidden-xs { + display: table-row !important; +} + +th.hidden-xs, +td.hidden-xs { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } + tr.hidden-xs { + display: none !important; + } + th.hidden-xs, + td.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm { + display: none !important; + } + tr.hidden-xs.hidden-sm { + display: none !important; + } + th.hidden-xs.hidden-sm, + td.hidden-xs.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md { + display: none !important; + } + tr.hidden-xs.hidden-md { + display: none !important; + } + th.hidden-xs.hidden-md, + td.hidden-xs.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg { + display: none !important; + } + tr.hidden-xs.hidden-lg { + display: none !important; + } + th.hidden-xs.hidden-lg, + td.hidden-xs.hidden-lg { + display: none !important; + } +} + +.hidden-sm { + display: block !important; +} + +tr.hidden-sm { + display: table-row !important; +} + +th.hidden-sm, +td.hidden-sm { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs { + display: none !important; + } + tr.hidden-sm.hidden-xs { + display: none !important; + } + th.hidden-sm.hidden-xs, + td.hidden-sm.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } + tr.hidden-sm { + display: none !important; + } + th.hidden-sm, + td.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md { + display: none !important; + } + tr.hidden-sm.hidden-md { + display: none !important; + } + th.hidden-sm.hidden-md, + td.hidden-sm.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg { + display: none !important; + } + tr.hidden-sm.hidden-lg { + display: none !important; + } + th.hidden-sm.hidden-lg, + td.hidden-sm.hidden-lg { + display: none !important; + } +} + +.hidden-md { + display: block !important; +} + +tr.hidden-md { + display: table-row !important; +} + +th.hidden-md, +td.hidden-md { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs { + display: none !important; + } + tr.hidden-md.hidden-xs { + display: none !important; + } + th.hidden-md.hidden-xs, + td.hidden-md.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm { + display: none !important; + } + tr.hidden-md.hidden-sm { + display: none !important; + } + th.hidden-md.hidden-sm, + td.hidden-md.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } + tr.hidden-md { + display: none !important; + } + th.hidden-md, + td.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg { + display: none !important; + } + tr.hidden-md.hidden-lg { + display: none !important; + } + th.hidden-md.hidden-lg, + td.hidden-md.hidden-lg { + display: none !important; + } +} + +.hidden-lg { + display: block !important; +} + +tr.hidden-lg { + display: table-row !important; +} + +th.hidden-lg, +td.hidden-lg { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs { + display: none !important; + } + tr.hidden-lg.hidden-xs { + display: none !important; + } + th.hidden-lg.hidden-xs, + td.hidden-lg.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm { + display: none !important; + } + tr.hidden-lg.hidden-sm { + display: none !important; + } + th.hidden-lg.hidden-sm, + td.hidden-lg.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md { + display: none !important; + } + tr.hidden-lg.hidden-md { + display: none !important; + } + th.hidden-lg.hidden-md, + td.hidden-lg.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } + tr.hidden-lg { + display: none !important; + } + th.hidden-lg, + td.hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +tr.visible-print { + display: none !important; +} + +th.visible-print, +td.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } + .hidden-print { + display: none !important; + } + tr.hidden-print { + display: none !important; + } + th.hidden-print, + td.hidden-print { + display: none !important; + } +} \ No newline at end of file diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap.min.css b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000..a553c4f --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/bootstrap/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.eot b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..87eaa43 Binary files /dev/null and b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.svg b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..5fee068 --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,228 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph /> +<glyph /> +<glyph unicode=" " /> +<glyph unicode="*" d="M1100 500h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200z" /> +<glyph unicode="+" d="M1100 400h-400v-400h-300v400h-400v300h400v400h300v-400h400v-300z" /> +<glyph unicode="&#xa0;" /> +<glyph unicode="&#x2000;" horiz-adv-x="652" /> +<glyph unicode="&#x2001;" horiz-adv-x="1304" /> +<glyph unicode="&#x2002;" horiz-adv-x="652" /> +<glyph unicode="&#x2003;" horiz-adv-x="1304" /> +<glyph unicode="&#x2004;" horiz-adv-x="434" /> +<glyph unicode="&#x2005;" horiz-adv-x="326" /> +<glyph unicode="&#x2006;" horiz-adv-x="217" /> +<glyph unicode="&#x2007;" horiz-adv-x="217" /> +<glyph unicode="&#x2008;" horiz-adv-x="163" /> +<glyph unicode="&#x2009;" horiz-adv-x="260" /> +<glyph unicode="&#x200a;" horiz-adv-x="72" /> +<glyph unicode="&#x202f;" horiz-adv-x="260" /> +<glyph unicode="&#x205f;" horiz-adv-x="326" /> +<glyph unicode="&#x20ac;" d="M800 500h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257 q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406z" /> +<glyph unicode="&#x2212;" d="M1100 700h-900v-300h900v300z" /> +<glyph unicode="&#x2601;" d="M178 300h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57z" /> +<glyph unicode="&#x2709;" d="M1200 1100h-1200l600 -603zM300 600l-300 -300v600zM1200 900v-600l-300 300zM800 500l400 -400h-1200l400 400l200 -200z" /> +<glyph unicode="&#x270f;" d="M1101 889l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13l-94 -97zM401 189l614 614l-214 214l-614 -614zM-13 -13l333 112l-223 223z" /> +<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="&#xe001;" d="M700 100h300v-100h-800v100h300v550l-500 550h1200l-500 -550v-550z" /> +<glyph unicode="&#xe002;" d="M1000 934v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7q-79 -25 -122.5 -82t-25.5 -112t86 -75.5t147 5.5 q65 21 109 69t44 90v606z" /> +<glyph unicode="&#xe003;" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> +<glyph unicode="&#xe005;" d="M649 949q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5t-94 124.5t-33.5 117.5q0 64 28 123t73 100.5t104.5 64t119 20.5 t120 -38.5t104.5 -104.5z" /> +<glyph unicode="&#xe006;" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM168 71l2 1z" /> +<glyph unicode="&#xe007;" d="M791 522l145 -449l-384 275l-382 -275l146 447l-388 280h479l146 400h2l146 -400h472zM747 331l-74 229l193 140h-235l-77 211l-78 -211h-239l196 -142l-73 -226l192 140zM168 71l2 1z" /> +<glyph unicode="&#xe008;" d="M1200 143v-143h-1200v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100z" /> +<glyph unicode="&#xe009;" d="M1200 1100v-1100h-1200v1100h1200zM200 1000h-100v-100h100v100zM900 1000h-600v-400h600v400zM1100 1000h-100v-100h100v100zM200 800h-100v-100h100v100zM1100 800h-100v-100h100v100zM200 600h-100v-100h100v100zM1100 600h-100v-100h100v100zM900 500h-600v-400h600 v400zM200 400h-100v-100h100v100zM1100 400h-100v-100h100v100zM200 200h-100v-100h100v100zM1100 200h-100v-100h100v100z" /> +<glyph unicode="&#xe010;" d="M500 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400 q21 0 35.5 -14.5t14.5 -35.5zM500 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5zM1100 450v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="&#xe011;" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5zM1100 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM700 250v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1100 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5 t14.5 -35.5z" /> +<glyph unicode="&#xe012;" d="M300 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 1050v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700 q21 0 35.5 -14.5t14.5 -35.5zM300 450v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-200q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM1200 650v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5zM300 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5zM1200 250v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="&#xe013;" d="M448 34l818 820l-212 212l-607 -607l-206 207l-212 -212z" /> +<glyph unicode="&#xe014;" d="M882 106l-282 282l-282 -282l-212 212l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282z" /> +<glyph unicode="&#xe015;" d="M913 432l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -142 -78 -261zM507 363q137 0 233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5t-234 -97t-97 -233 t97 -233t234 -97zM600 800h100v-200h-100v-100h-200v100h-100v200h100v100h200v-100z" /> +<glyph unicode="&#xe016;" d="M913 432l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342t142 342t342 142t342 -142t142 -342q0 -141 -78 -262zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 801v-200h400v200h-400z" /> +<glyph unicode="&#xe017;" d="M700 750v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5zM800 975v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123 t-123 184t-45.5 224.5q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155z" /> +<glyph unicode="&#xe018;" d="M1200 1h-200v1200h200v-1200zM900 1h-200v800h200v-800zM600 1h-200v500h200v-500zM300 301h-200v-300h200v300z" /> +<glyph unicode="&#xe019;" d="M488 183l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5 q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39zM600 815q89 0 152 -63 t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152q0 88 63 151t152 63z" /> +<glyph unicode="&#xe020;" d="M900 1100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100zM800 1100v100h-300v-100h300zM200 900h900v-800q0 -41 -29.5 -71 t-70.5 -30h-700q-41 0 -70.5 30t-29.5 71v800zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> +<glyph unicode="&#xe021;" d="M1301 601h-200v-600h-300v400h-300v-400h-300v600h-200l656 644z" /> +<glyph unicode="&#xe022;" d="M600 700h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18v1150q0 11 7 18t18 7h475v-500zM1000 800h-300v300z" /> +<glyph unicode="&#xe023;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 600h200 v-100h-300v400h100v-300z" /> +<glyph unicode="&#xe024;" d="M721 400h-242l-40 -400h-539l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538zM712 500l-27 300h-170l-27 -300h224z" /> +<glyph unicode="&#xe025;" d="M1100 400v-400h-1100v400h490l-290 300h200v500h300v-500h200l-290 -300h490zM988 300h-175v-100h175v100z" /> +<glyph unicode="&#xe026;" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 1012q-170 0 -291 -121t-121 -291t121 -291t291 -121t291 121 t121 291t-121 291t-291 121zM700 600h150l-250 -300l-250 300h150v300h200v-300z" /> +<glyph unicode="&#xe027;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM850 600h-150 v-300h-200v300h-150l250 300z" /> +<glyph unicode="&#xe028;" d="M0 500l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18v475zM903 1000h-606l-97 -500h200l50 -200h300l50 200h200z" /> +<glyph unicode="&#xe029;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM797 598 l-297 -201v401z" /> +<glyph unicode="&#xe030;" d="M1177 600h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123t-123 -184t-45.5 -224.5t45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123 t123 184t45.5 224.5z" /> +<glyph unicode="&#xe031;" d="M700 800l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400zM500 400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122l-145 -145v400h400z" /> +<glyph unicode="&#xe032;" d="M100 1200v-1200h1100v1200h-1100zM1100 100h-900v900h900v-900zM400 800h-100v100h100v-100zM1000 800h-500v100h500v-100zM400 600h-100v100h100v-100zM1000 600h-500v100h500v-100zM400 400h-100v100h100v-100zM1000 400h-500v100h500v-100zM400 200h-100v100h100v-100 zM1000 300h-500v-100h500v100z" /> +<glyph unicode="&#xe034;" d="M200 0h-100v1100h100v-1100zM1100 600v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5z" /> +<glyph unicode="&#xe035;" d="M1200 275v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5t-49.5 -227v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50 q11 0 18 7t7 18zM400 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14zM1000 480v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14z" /> +<glyph unicode="&#xe036;" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM971 600l141 -141l-71 -71l-141 141l-141 -141l-71 71l141 141l-141 141l71 71l141 -141l141 141l71 -71z" /> +<glyph unicode="&#xe037;" d="M0 800v-400h300l300 -200v800l-300 -200h-300zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> +<glyph unicode="&#xe038;" d="M974 186l6 8q142 178 142 405q0 230 -144 408l-6 8l-83 -64l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8zM300 801l300 200v-800l-300 200h-300v400h300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257z" /> +<glyph unicode="&#xe039;" d="M100 700h400v100h100v100h-100v300h-500v-600h100v100zM1200 700v500h-600v-200h100v-300h200v-300h300v200h-200v100h200zM100 1100h300v-300h-300v300zM800 800v300h300v-300h-300zM200 900h100v100h-100v-100zM900 1000h100v-100h-100v100zM300 600h-100v-100h-200 v-500h500v500h-200v100zM900 200v-100h-200v100h-100v100h100v200h-200v100h300v-300h200v-100h-100zM400 400v-300h-300v300h300zM300 200h-100v100h100v-100zM1100 300h100v-100h-100v100zM600 100h100v-100h-100v100zM1200 100v-100h-300v100h300z" /> +<glyph unicode="&#xe040;" d="M100 1200h-100v-1000h100v1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 1200v-1000h-200v1000h200zM400 100v-100h-300v100h300zM500 91h100v-91h-100v91zM700 91h100v-91h-100v91zM1100 91v-91h-200v91h200z " /> +<glyph unicode="&#xe041;" d="M1200 500l-500 -500l-699 700v475q0 10 7.5 17.5t17.5 7.5h474zM320 882q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71t29 -71q30 -30 71.5 -30t71.5 30z" /> +<glyph unicode="&#xe042;" d="M1201 500l-500 -500l-699 700v475q0 11 7 18t18 7h474zM1501 500l-500 -500l-50 50l450 450l-700 700h100zM320 882q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71t30 -71q29 -30 71 -30t71 30z" /> +<glyph unicode="&#xe043;" d="M1200 1200v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900v1025l175 175h925z" /> +<glyph unicode="&#xe045;" d="M947 829l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18l-94 -346l40 -124h592zM1200 800v-700h-200v200h-800v-200h-200v700h200l100 -200h600l100 200h200zM881 176l38 -152q2 -10 -3.5 -17t-15.5 -7h-600q-10 0 -15.5 7t-3.5 17l38 152q2 10 11.5 17t19.5 7 h500q10 0 19.5 -7t11.5 -17z" /> +<glyph unicode="&#xe047;" d="M1200 0v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417zM416 521l178 457l46 -140l116 -317 h-340z" /> +<glyph unicode="&#xe048;" d="M100 1199h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111t-162 -38.5h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21 t-29 14t-49 14.5v70zM400 1079v-379h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400z" /> +<glyph unicode="&#xe049;" d="M877 1200l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425z" /> +<glyph unicode="&#xe050;" d="M1150 1200h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49v300h150h700zM100 1000v-800h75l-125 -167l-125 167h75v800h-75l125 167 l125 -167h-75z" /> +<glyph unicode="&#xe051;" d="M950 1201h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50v300h150h700zM200 101h800v75l167 -125l-167 -125v75h-800v-75l-167 125l167 125 v-75z" /> +<glyph unicode="&#xe052;" d="M700 950v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35zM1100 650v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1000 q21 0 35.5 15t14.5 35zM900 350v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" /> +<glyph unicode="&#xe053;" d="M1000 950v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 650v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h1100 q21 0 35.5 15t14.5 35zM1000 350v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35zM1200 50v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35 t35.5 -15h1100q21 0 35.5 15t14.5 35z" /> +<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="&#xe055;" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="&#xe056;" d="M0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35zM0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="&#xe057;" d="M400 1100h-100v-1100h100v1100zM700 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM1100 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM100 425v75h-201v100h201v75l166 -125zM900 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM1200 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" /> +<glyph unicode="&#xe058;" d="M201 950v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35zM801 1100h100v-1100h-100v1100zM601 650v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15 h500q20 0 35 15t15 35zM1101 425v75h200v100h-200v75l-167 -125zM401 350v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35zM701 50v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5 v-100q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35z" /> +<glyph unicode="&#xe059;" d="M900 925v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="&#xe060;" d="M1200 1056v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31zM1100 1000h-1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500zM476 750q0 -56 -39 -95t-95 -39t-95 39t-39 95t39 95t95 39t95 -39 t39 -95z" /> +<glyph unicode="&#xe062;" d="M600 1213q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262q0 124 60.5 231.5t165 172t226.5 64.5zM599 514q107 0 182.5 75.5t75.5 182.5t-75.5 182 t-182.5 75t-182 -75.5t-75 -181.5q0 -107 75.5 -182.5t181.5 -75.5z" /> +<glyph unicode="&#xe063;" d="M600 1199q122 0 233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233t47.5 233t127.5 191t191 127.5t233 47.5zM600 173v854q-176 0 -301.5 -125t-125.5 -302t125.5 -302t301.5 -125z " /> +<glyph unicode="&#xe064;" d="M554 1295q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5zM455 296q-7 6 -18 17 t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156q14 -82 59.5 -136t136.5 -80z" /> +<glyph unicode="&#xe065;" d="M1108 902l113 113l-21 85l-92 28l-113 -113zM1100 625v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125zM436 341l161 50l412 412l-114 113l-405 -405z" /> +<glyph unicode="&#xe066;" d="M1100 453v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5z M813 431l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209z" /> +<glyph unicode="&#xe067;" d="M1100 569v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69z M625 348l566 567l-136 137l-430 -431l-147 147l-136 -136z" /> +<glyph unicode="&#xe068;" d="M900 303v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198l-300 300l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296z" /> +<glyph unicode="&#xe069;" d="M900 0l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100z" /> +<glyph unicode="&#xe070;" d="M1200 0l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100z" /> +<glyph unicode="&#xe071;" d="M1200 0l-500 488v-488l-564 550l564 550v-487l500 487v-1100z" /> +<glyph unicode="&#xe072;" d="M1100 550l-900 550v-1100z" /> +<glyph unicode="&#xe073;" d="M500 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM900 150v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -21 14.5 -35.5t35.5 -14.5h200 q21 0 35.5 14.5t14.5 35.5z" /> +<glyph unicode="&#xe074;" d="M1100 150v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35z" /> +<glyph unicode="&#xe075;" d="M500 0v488l-500 -488v1100l500 -487v487l564 -550z" /> +<glyph unicode="&#xe076;" d="M1050 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488l-500 -488v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="&#xe078;" d="M650 1064l-550 -564h1100zM1200 350v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="&#xe079;" d="M777 7l240 240l-353 353l353 353l-240 240l-592 -594z" /> +<glyph unicode="&#xe080;" d="M513 -46l-241 240l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1z" /> +<glyph unicode="&#xe081;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-200h-200v-200h200v-200h200v200h200v200h-200v200h-200z" /> +<glyph unicode="&#xe082;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM300 700v-200h600v200h-600z" /> +<glyph unicode="&#xe083;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM247 741l141 -141l-142 -141l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141 l-141 142z" /> +<glyph unicode="&#xe084;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM546 623l-102 102l-174 -174l276 -277l411 411l-175 174z" /> +<glyph unicode="&#xe085;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 500h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3 q-105 0 -172 -56t-67 -183h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5zM500 400v-100h200v100h-200z" /> +<glyph unicode="&#xe086;" d="M600 1197q162 0 299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5t80 299.5t217.5 217.5t299.5 80zM500 900v-100h200v100h-200zM400 700v-100h100v-200h-100v-100h400v100h-100v300h-300z" /> +<glyph unicode="&#xe087;" d="M1200 700v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203zM700 500v-206q149 48 201 206h-201v200h200 q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210q24 -73 79.5 -127.5t130.5 -78.5v206h200z" /> +<glyph unicode="&#xe088;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM844 735 l-135 -135l135 -135l-109 -109l-135 135l-135 -135l-109 109l135 135l-135 135l109 109l135 -135l135 135z" /> +<glyph unicode="&#xe089;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM896 654 l-346 -345l-228 228l141 141l87 -87l204 205z" /> +<glyph unicode="&#xe090;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM248 385l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5q0 -115 62 -215zM955 809l-564 -564q97 -59 209 -59q171 0 292.5 121.5 t121.5 292.5q0 112 -59 209z" /> +<glyph unicode="&#xe091;" d="M1200 400h-600v-301l-600 448l600 453v-300h600v-300z" /> +<glyph unicode="&#xe092;" d="M600 400h-600v300h600v300l600 -453l-600 -448v301z" /> +<glyph unicode="&#xe093;" d="M1098 600h-298v-600h-300v600h-296l450 600z" /> +<glyph unicode="&#xe094;" d="M998 600l-449 -600l-445 600h296v600h300v-600h298z" /> +<glyph unicode="&#xe095;" d="M600 199v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453z" /> +<glyph unicode="&#xe096;" d="M1200 1200h-400l129 -129l-294 -294l142 -142l294 294l129 -129v400zM565 423l-294 -294l129 -129h-400v400l129 -129l294 294z" /> +<glyph unicode="&#xe097;" d="M871 730l129 -130h-400v400l129 -129l295 295l142 -141zM200 600h400v-400l-129 130l-295 -295l-142 141l295 295z" /> +<glyph unicode="&#xe101;" d="M600 1177q118 0 224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5t45.5 224.5t123 184t184 123t224.5 45.5zM686 549l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5 l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5zM700 400h-200v-100h200v100z" /> +<glyph unicode="&#xe102;" d="M1200 900h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100h100v-200h400v300h200v-300h400v200h100v100z M731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269zM481 900h-281q-3 0 14 48t35 96l18 47zM100 0h400v400h-400v-400zM700 400h400v-400h-400v400z" /> +<glyph unicode="&#xe103;" d="M0 121l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55l-201 -202 v143zM692 611q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5t86.5 76.5q55 66 367 234z" /> +<glyph unicode="&#xe105;" d="M1261 600l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5 t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30zM600 240q64 0 123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212 q0 85 46 158q-102 -87 -226 -258q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5zM484 762l-107 -106q49 -124 154 -191l105 105q-37 24 -75 72t-57 84z" /> +<glyph unicode="&#xe106;" d="M906 1200l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43l-26 40l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148zM1261 600l-26 -40q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5 t-124 -100t-146.5 -79l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52zM513 264l37 141q-107 18 -178.5 101.5t-71.5 193.5q0 85 46 158q-102 -87 -226 -258q210 -282 393 -336z M484 762l-107 -106q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68z" /> +<glyph unicode="&#xe107;" d="M-47 0h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66t50.5 -34zM700 200v100h-200v-100h-345l445 723l445 -723h-345zM700 700h-200v-100l100 -300l100 300v100z" /> +<glyph unicode="&#xe108;" d="M800 711l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41q0 20 11 44.5t26 38.5 l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339z" /> +<glyph unicode="&#xe110;" d="M941 800l-600 -600h-341v200h259l600 600h241v198l300 -295l-300 -300v197h-159zM381 678l141 142l-181 180h-341v-200h259zM1100 598l300 -295l-300 -300v197h-241l-181 181l141 142l122 -123h159v198z" /> +<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="&#xe112;" d="M400 900h-300v300h300v-300zM1100 900h-300v300h300v-300zM1100 800v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5t-58 109.5t-31.5 116t-15 104t-3 83v200h300v-250q0 -113 6 -145 q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300z" /> +<glyph unicode="&#xe113;" d="M902 184l226 227l-578 579l-580 -579l227 -227l352 353z" /> +<glyph unicode="&#xe114;" d="M650 218l578 579l-226 227l-353 -353l-352 353l-227 -227z" /> +<glyph unicode="&#xe115;" d="M1198 400v600h-796l215 -200h381v-400h-198l299 -283l299 283h-200zM-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196z" /> +<glyph unicode="&#xe116;" d="M1050 1200h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35 q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43l-100 475q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5z" /> +<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="&#xe118;" d="M201 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000zM1501 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> +<glyph unicode="&#xe120;" d="M900 303v197h-600v-197l-300 297l300 298v-198h600v198l300 -298z" /> +<glyph unicode="&#xe121;" d="M31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM100 300h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM900 200h-100v-100h100v100z M1100 200h-100v-100h100v100z" /> +<glyph unicode="&#xe122;" d="M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35zM325 800l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351v250v5 q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200zM-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5z" /> +<glyph unicode="&#xe124;" d="M445 1180l-45 -233l-224 78l78 -225l-233 -44l179 -156l-179 -155l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180z" /> +<glyph unicode="&#xe125;" d="M700 1200h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5zM700 925l-50 -225h450 v-125l-250 -375h-214l-136 100h-100v375l150 212l100 213h50v-175zM0 800v-600h200v600h-200z" /> +<glyph unicode="&#xe126;" d="M700 0h-50q-27 0 -51 20t-38 48l-96 198l-145 196q-20 26 -20 63v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5zM200 400h-200v600h200 v-600zM700 275l-50 225h450v125l-250 375h-214l-136 -100h-100v-375l150 -212l100 -213h50v175z" /> +<glyph unicode="&#xe127;" d="M364 873l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM408 792v-503 l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83zM208 200h-200v600h200v-600z" /> +<glyph unicode="&#xe128;" d="M475 1104l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111t54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6zM370 946 l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100h222q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237zM1199 201h-200v600h200v-600z" /> +<glyph unicode="&#xe129;" d="M1100 473v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90zM911 400h-503l-236 339 l83 86l183 -146q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294zM1000 200v-200h-600v200h600z" /> +<glyph unicode="&#xe130;" d="M305 1104v200h600v-200h-600zM605 310l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15l-230 -362q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106z M905 804v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146l-83 86l237 339h503z" /> +<glyph unicode="&#xe131;" d="M603 1195q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM598 701h-298v-201h300l-2 -194l402 294l-402 298v-197z" /> +<glyph unicode="&#xe132;" d="M597 1195q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5zM200 600l400 -294v194h302v201h-300v197z" /> +<glyph unicode="&#xe133;" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM300 600h200v-300h200v300h200l-300 400z" /> +<glyph unicode="&#xe134;" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM500 900v-300h-200l300 -400l300 400h-200v300h-200z" /> +<glyph unicode="&#xe135;" d="M603 1195q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5zM627 1101q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6 q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55 t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q102 -2 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7 q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5 t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23q-19 -3 -37 0zM613 994q0 -18 8 -42.5t16.5 -44t9.5 -23.5q-9 2 -31 5t-36 5t-32 8t-30 14q3 12 16 30t16 25q10 -10 18.5 -10 t14 6t14.5 14.5t16 12.5z" /> +<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="&#xe138;" d="M1100 1200v-100h-1000v100h1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> +<glyph unicode="&#xe140;" d="M329 729l142 142l-200 200l129 129h-400v-400l129 129zM1200 1200v-400l-129 129l-200 -200l-142 142l200 200l-129 129h400zM271 129l129 -129h-400v400l129 -129l200 200l142 -142zM1071 271l129 129v-400h-400l129 129l-200 200l142 142z" /> +<glyph unicode="&#xe141;" d="M596 1192q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1010q-171 0 -292.5 -121.5t-121.5 -292.5q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5zM455 905 q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5t16 38.5t39 16.5zM708 821l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5 q0 32 20.5 56.5t51.5 29.5zM855 709q23 0 38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39q0 22 16 38t39 16zM345 709q23 0 39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39t15.5 38.5t38.5 15.5z" /> +<glyph unicode="&#xe143;" d="M649 54l-16 22q-90 125 -293 323q-71 70 -104.5 105.5t-77 89.5t-61 99t-17.5 91q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-203 -198 -293 -323zM844 524l12 12 q64 62 97.5 97t64.5 79t31 72q0 71 -48 119t-105 48q-74 0 -132 -82l-118 -171l-114 174q-51 79 -123 79q-60 0 -109.5 -49t-49.5 -118q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203z" /> +<glyph unicode="&#xe144;" d="M476 406l19 -17l105 105l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159q0 -93 66 -159zM123 193l141 -141q66 -66 159 -66q95 0 159 66 l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159q0 -94 66 -160z" /> +<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM900 1000h-600v-700h600v700zM600 46q43 0 73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5t-73.5 -30.5t-30.5 -73.5 t30.5 -73.5t73.5 -30.5z" /> +<glyph unicode="&#xe148;" d="M700 1029v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5 t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5zM600 755v274q-61 -8 -97.5 -37.5t-36.5 -102.5q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3zM700 548 v-311q170 18 170 151q0 64 -44 99.5t-126 60.5z" /> +<glyph unicode="&#xe149;" d="M866 300l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5 t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94 q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30z" /> +<glyph unicode="&#xe150;" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1200l298 -300h-198v-900h-200v900h-198z" /> +<glyph unicode="&#xe151;" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-500h-100v100h-100v-100h-100v500h300zM901 1100h-100v-200h100v200zM700 500h300v-200h-99v-100h-100v100h99v100h-200v100zM800 100h200v-100h-300v200h100v-100z" /> +<glyph unicode="&#xe152;" d="M400 300h198l-298 -300l-298 300h198v900h200v-900zM1000 1200v-200h-99v-100h-100v100h99v100h-200v100h300zM800 800h200v-100h-300v200h100v-100zM700 500h300v-500h-100v100h-100v-100h-100v500zM801 200h100v200h-100v-200z" /> +<glyph unicode="&#xe153;" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1100h-100v100h200v-500h-100v400zM1100 500v-500h-100v100h-200v400h300zM1001 400h-100v-200h100v200z" /> +<glyph unicode="&#xe154;" d="M300 0l298 300h-198v900h-200v-900h-198zM1100 1200v-500h-100v100h-200v400h300zM1001 1100h-100v-200h100v200zM900 400h-100v100h200v-500h-100v400z" /> +<glyph unicode="&#xe155;" d="M300 0l298 300h-198v900h-200v-900h-198zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="&#xe156;" d="M300 0l298 300h-198v900h-200v-900h-198zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="&#xe157;" d="M400 1100h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5v300q0 165 117.5 282.5t282.5 117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="&#xe158;" d="M700 0h-300q-163 0 -281.5 117.5t-118.5 282.5v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5 t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5zM400 800v-500l333 250z" /> +<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM800 700h-500l250 -333z" /> +<glyph unicode="&#xe160;" d="M1100 700v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5zM900 300v500q0 41 -29.5 70.5t-70.5 29.5h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5 t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5zM550 733l-250 -333h500z" /> +<glyph unicode="&#xe161;" d="M500 1100h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200zM700 550l-400 -350v200h-300v300h300v200z" /> +<glyph unicode="&#xe162;" d="M403 2l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32z" /> +<glyph unicode="&#xe163;" d="M800 200h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185zM900 200v200h-300v300h300v200l400 -350z" /> +<glyph unicode="&#xe164;" d="M1200 700l-149 149l-342 -353l-213 213l353 342l-149 149h500v-500zM1022 571l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5v-300 q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98z" /> +<glyph unicode="&#xe165;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM600 794 q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="&#xe166;" d="M700 800v400h-300v-400h-300l445 -500l450 500h-295zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="&#xe167;" d="M400 700v-300h300v300h295l-445 500l-450 -500h300zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="&#xe168;" d="M405 400l596 596l-154 155l-442 -442l-150 151l-155 -155zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="&#xe169;" d="M409 1103l-97 97l-212 -212l97 -98zM650 861l-149 149l-212 -212l149 -149l-238 -248h700v699zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="&#xe170;" d="M539 950l-149 -149l212 -212l149 148l248 -237v700h-699zM297 709l-97 -97l212 -212l98 97zM25 300h1048q11 0 19 -7.5t8 -17.5v-275h-1100v275q0 11 7 18t18 7zM1000 200h-100v-50h100v50z" /> +<glyph unicode="&#xe171;" d="M1200 1199v-1079l-475 272l-310 -393v416h-392zM1166 1148l-672 -712v-226z" /> +<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1200h-100v-200h100v200z" /> +<glyph unicode="&#xe173;" d="M578 500h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120zM700 1200h-100v-200h100v200zM1300 538l-475 -476l-244 244l123 123l120 -120l353 352z" /> +<glyph unicode="&#xe174;" d="M529 500h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170zM700 1200h-100v-200h100v200zM1167 6l-170 170l-170 -170l-127 127l170 170l-170 170l127 127l170 -170l170 170l127 -128 l-170 -169l170 -170z" /> +<glyph unicode="&#xe175;" d="M700 500h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200zM700 1000h-100v200h100v-200zM1000 600h-200v-300h-200l300 -300l300 300h-200v300z" /> +<glyph unicode="&#xe176;" d="M602 500h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200zM700 1000h-100v200h100v-200zM1000 300h200l-300 300l-300 -300h200v-300h200v300z" /> +<glyph unicode="&#xe177;" d="M1200 900v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1200zM0 800v-550q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200zM100 500h400v-200h-400v200z" /> +<glyph unicode="&#xe178;" d="M500 1000h400v198l300 -298l-300 -298v198h-400v200zM100 800v200h100v-200h-100zM400 800h-100v200h100v-200zM700 300h-400v-198l-300 298l300 298v-198h400v-200zM800 500h100v-200h-100v200zM1000 500v-200h100v200h-100z" /> +<glyph unicode="&#xe179;" d="M1200 50v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5zM550 1200l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447l-100 203v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300z" /> +<glyph unicode="&#xe180;" d="M1100 106v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394 q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5z" /> +<glyph unicode="&#xe181;" d="M675 1000l-100 100h-375l-100 -100h400l200 -200v-98l295 98h105v200h-425zM500 300v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5zM100 800h300v-200h-300v200zM700 565l400 133 v-163l-400 -133v163zM100 500h300v-200h-300v200zM805 300l295 98v-298h-425l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="&#xe182;" d="M179 1169l-162 -162q-1 -11 -0.5 -32.5t16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118 q17 17 20 41.5t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14z" /> +<glyph unicode="&#xe183;" d="M1200 712v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40t-53.5 -36.5t-31 -27.5l-9 -10v-200q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38 t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5zM800 650l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5 t30 -27.5t12 -24l1 -10v-50z" /> +<glyph unicode="&#xe184;" d="M175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250zM1200 100v-100h-1100v100h1100z" /> +<glyph unicode="&#xe185;" d="M600 1100h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300v1000q0 41 29.5 70.5t70.5 29.5zM1000 800h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300v700q0 41 29.5 70.5t70.5 29.5zM400 0v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400h300z" /> +<glyph unicode="&#xe186;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" /> +<glyph unicode="&#xe187;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM400 600h-100v200h-100v-500h100v200h100v-200h100v500h-100v-200zM800 800h-200v-500h200v100h100v300h-100 v100zM800 700v-300h-100v300h100z" /> +<glyph unicode="&#xe188;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-500h300v100h-200v300h200v100h-300zM600 800v-500h300v100h-200v300h200v100h-300z" /> +<glyph unicode="&#xe189;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM500 700l-300 -150l300 -150v300zM600 400l300 150l-300 150v-300z" /> +<glyph unicode="&#xe190;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM900 800v-500h-700v500h700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM800 700h-130 q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300z" /> +<glyph unicode="&#xe191;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM200 800v-300h200v-100h-200v-100h300v300h-200v100h200v100h-300zM800 300h100v500h-200v-100h100v-400z M601 300h100v100h-100v-100z" /> +<glyph unicode="&#xe192;" d="M1200 800v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212zM1000 900h-900v-700h900v700zM300 700v100h-100v-500h300v400h-200zM800 300h100v500h-200v-100h100v-400zM401 400h-100v200h100v-200z M601 300h100v100h-100v-100z" /> +<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM1000 900h-900v-700h900v700zM400 700h-200v100h300v-300h-99v-100h-100v100h99v200zM800 700h-100v100h200v-500h-100v400zM201 400h100v-100 h-100v100zM701 300h-100v100h100v-100z" /> +<glyph unicode="&#xe194;" d="M600 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM600 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700h-300 v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="&#xe195;" d="M596 1196q162 0 299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299t80 299t217 217t299 80zM596 1014q-171 0 -292.5 -121.5t-121.5 -292.5t121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5zM800 700v-100 h-100v100h-200v-100h200v-100h-200v-100h-100v400h300zM800 400h-100v100h100v-100z" /> +<glyph unicode="&#xe197;" d="M800 300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h222v300h400v-300zM700 200h200l-300 -300 l-300 300h200v300h200v-300z" /> +<glyph unicode="&#xe198;" d="M600 714l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5q0 -80 56.5 -137t135.5 -57h8zM700 -100h-200v300h-200l300 300 l300 -300h-200v-300z" /> +<glyph unicode="&#xe199;" d="M700 200h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-155l-75 -45h350l-75 45v155z" /> +<glyph unicode="&#xe200;" d="M700 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5 q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350z" /> +<glyph unicode="&#x1f4bc;" d="M800 1000h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100zM500 1000h200v100h-200v-100zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="&#x1f4c5;" d="M1100 900v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150h1100zM0 800v-750q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100zM100 600h100v-100h-100v100zM300 600h100v-100h-100v100z M500 600h100v-100h-100v100zM700 600h100v-100h-100v100zM900 600h100v-100h-100v100zM100 400h100v-100h-100v100zM300 400h100v-100h-100v100zM500 400h100v-100h-100v100zM700 400h100v-100h-100v100zM900 400h100v-100h-100v100zM100 200h100v-100h-100v100zM300 200 h100v-100h-100v100zM500 200h100v-100h-100v100zM700 200h100v-100h-100v100zM900 200h100v-100h-100v100z" /> +<glyph unicode="&#x1f4cc;" d="M902 1185l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207l-380 -303l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15z" /> +<glyph unicode="&#x1f4ce;" d="M518 119l69 -60l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163t35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84 t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348 q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256z" /> +<glyph unicode="&#x1f4f7;" d="M1200 200v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5z M1000 700h-100v100h100v-100zM844 500q0 -100 -72 -172t-172 -72t-172 72t-72 172t72 172t172 72t172 -72t72 -172zM706 500q0 44 -31 75t-75 31t-75 -31t-31 -75t31 -75t75 -31t75 31t31 75z" /> +<glyph unicode="&#x1f512;" d="M900 800h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> +<glyph unicode="&#x1f514;" d="M1062 400h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94 q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327zM600 104q-54 0 -103 6q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6z" /> +<glyph unicode="&#x1f516;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> +<glyph unicode="&#x1f525;" d="M400 755q2 -12 8 -41.5t8 -43t6 -39.5t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85t5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5 q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129 q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5z" /> +<glyph unicode="&#x1f527;" d="M948 778l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.ttf b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..be784dc Binary files /dev/null and b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.woff b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..2cc3e48 Binary files /dev/null and b/reports/datepicker-time/sample in bootstrap v3/bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/js/bootstrap.js b/reports/datepicker-time/sample in bootstrap v3/bootstrap/js/bootstrap.js new file mode 100644 index 0000000..2c64257 --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/bootstrap/js/bootstrap.js @@ -0,0 +1,1999 @@ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +if (!jQuery) { throw new Error("Bootstrap requires jQuery") } + +/* ======================================================================== + * Bootstrap: transition.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#transitions + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#alerts + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#buttons + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d); + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + .prop('checked', !this.$element.hasClass('active')) + .trigger('change') + if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') + } + + this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#carousel + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000 + , pause: 'hover' + , wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + this.sliding = true + + isCycling && this.pause() + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + .emulateTransitionEnd(600) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#collapse + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#dropdowns + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + var $el = $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) + } + + $parent.trigger(e = $.Event('show.bs.dropdown')) + + if (e.isDefaultPrevented()) return + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown') + + $this.focus() + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27)/.test(e.keyCode)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + var $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + var index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index=0 + + $items.eq(index).focus() + } + + function clearMenus() { + $(backdrop).remove() + $(toggle).each(function (e) { + var $parent = getParent($(this)) + if (!$parent.hasClass('open')) return + $parent.trigger(e = $.Event('hide.bs.dropdown')) + if (e.isDefaultPrevented()) return + $parent.removeClass('open').trigger('hidden.bs.dropdown') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('dropdown') + + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#modals + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$element = $(element) + this.$backdrop = + this.isShown = null + + if (this.options.remote) this.$element.load(this.options.remote) + } + + Modal.DEFAULTS = { + backdrop: true + , keyboard: true + , show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this[!this.isShown ? 'show' : 'hide'](_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) // don't move modals dom position + } + + that.$element.show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$element.find('.modal-dialog') // wait for modal to slide in + .one($.support.transition.end, function () { + that.$element.focus().trigger(e) + }) + .emulateTransitionEnd(300) : + that.$element.focus().trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + .off('click.dismiss.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one($.support.transition.end, $.proxy(this.hideModal, this)) + .emulateTransitionEnd(300) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.focus() + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .appendTo(document.body) + + this.$element.on('click.dismiss.modal', $.proxy(function (e) { + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus.call(this.$element[0]) + : this.hide.call(this) + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one($.support.transition.end, callback) + .emulateTransitionEnd(150) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop + .one($.support.transition.end, callback) + .emulateTransitionEnd(150) : + callback() + + } else if (callback) { + callback() + } + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + var old = $.fn.modal + + $.fn.modal = function (option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 + var option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + e.preventDefault() + + $target + .modal(option, this) + .one('hide', function () { + $this.is(':visible') && $this.focus() + }) + }) + + $(document) + .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') }) + .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = + this.options = + this.enabled = + this.timeout = + this.hoverState = + this.$element = null + + this.init('tooltip', element, options) + } + + Tooltip.DEFAULTS = { + animation: true + , placement: 'top' + , selector: false + , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' + , trigger: 'hover focus' + , title: '' + , delay: 0 + , html: false + , container: false + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.'+ this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + var $tip = this.tip() + + this.setContent() + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var $parent = this.$element.parent() + + var orgPlacement = placement + var docScroll = document.documentElement.scrollTop || document.body.scrollTop + var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth() + var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight() + var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left + + placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' : + placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' : + placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' : + placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + this.$element.trigger('shown.bs.' + this.type) + } + } + + Tooltip.prototype.applyPlacement = function(offset, placement) { + var replace + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top = offset.top + marginTop + offset.left = offset.left + marginLeft + + $tip + .offset(offset) + .addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + replace = true + offset.top = offset.top + height - actualHeight + } + + if (/bottom|top/.test(placement)) { + var delta = 0 + + if (offset.left < 0) { + delta = offset.left * -2 + offset.left = 0 + + $tip.offset(offset) + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + } + + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } + + if (replace) $tip.offset(offset) + } + + Tooltip.prototype.replaceArrow = function(delta, dimension, position) { + this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function () { + var that = this + var $tip = this.tip() + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one($.support.transition.end, complete) + .emulateTransitionEnd(150) : + complete() + + this.$element.trigger('hidden.bs.' + this.type) + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function () { + var el = this.$element[0] + return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { + width: el.offsetWidth + , height: el.offsetHeight + }, this.$element.offset()) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.tip = function () { + return this.$tip = this.$tip || $(this.options.template) + } + + Tooltip.prototype.arrow = function () { + return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow') + } + + Tooltip.prototype.validate = function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + + Tooltip.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + var old = $.fn.tooltip + + $.fn.tooltip = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#popovers + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right' + , trigger: 'click' + , content: '' + , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return this.$arrow = this.$arrow || this.tip().find('.arrow') + } + + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + var old = $.fn.popover + + $.fn.popover = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#scrollspy + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + var href + var process = $.proxy(this.process, this) + + this.$element = $(element).is('body') ? $(window) : $(element) + this.$body = $('body') + this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target + || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + || '') + ' .nav li > a' + this.offsets = $([]) + this.targets = $([]) + this.activeTarget = null + + this.refresh() + this.process() + } + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.refresh = function () { + var offsetMethod = this.$element[0] == window ? 'offset' : 'position' + + this.offsets = $([]) + this.targets = $([]) + + var self = this + var $targets = this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#\w/.test(href) && $(href) + + return ($href + && $href.length + && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight + var maxScroll = scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets.last()[0]) && this.activate(i) + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate( targets[i] ) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + $(this.selector) + .parents('.active') + .removeClass('active') + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + var old = $.fn.scrollspy + + $.fn.scrollspy = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + $spy.scrollspy($spy.data()) + }) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#tabs + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + this.element = $(element) + } + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var previous = $ul.find('.active:last a')[0] + var e = $.Event('show.bs.tab', { + relatedTarget: previous + }) + + $this.trigger(e) + + if (e.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown.bs.tab' + , relatedTarget: previous + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && $active.hasClass('fade') + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + + element.addClass('active') + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu')) { + element.closest('li.dropdown').addClass('active') + } + + callback && callback() + } + + transition ? + $active + .one($.support.transition.end, next) + .emulateTransitionEnd(150) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + var old = $.fn.tab + + $.fn.tab = function ( option ) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { + e.preventDefault() + $(this).tab('show') + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#affix + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + this.$window = $(window) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = + this.unpin = null + + this.checkPosition() + } + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0 + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var scrollHeight = $(document).height() + var scrollTop = this.$window.scrollTop() + var position = this.$element.offset() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top() + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() + + var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : + offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : + offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false + + if (this.affixed === affix) return + if (this.unpin) this.$element.css('top', '') + + this.affixed = affix + this.unpin = affix == 'bottom' ? position.top - scrollTop : null + + this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : '')) + + if (affix == 'bottom') { + this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + var old = $.fn.affix + + $.fn.affix = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom) data.offset.bottom = data.offsetBottom + if (data.offsetTop) data.offset.top = data.offsetTop + + $spy.affix(data) + }) + }) + +}(window.jQuery); diff --git a/reports/datepicker-time/sample in bootstrap v3/bootstrap/js/bootstrap.min.js b/reports/datepicker-time/sample in bootstrap v3/bootstrap/js/bootstrap.min.js new file mode 100644 index 0000000..1765631 --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/bootstrap/js/bootstrap.min.js @@ -0,0 +1,6 @@ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +if(!jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(window.jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(window.jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown"),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("dropdown");d||c.data("dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show(),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show),void 0):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement,e=/\s?auto?\s?/i,f=e.test(d);f&&(d=d.replace(e,"")||"top"),c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var g=this.getPosition(),h=c[0].offsetWidth,i=c[0].offsetHeight;if(f){var j=this.$element.parent(),k=d,l=document.documentElement.scrollTop||document.body.scrollTop,m="body"==this.options.container?window.innerWidth:j.outerWidth(),n="body"==this.options.container?window.innerHeight:j.outerHeight(),o="body"==this.options.container?0:j.offset().left;d="bottom"==d&&g.top+g.height+i-l>n?"top":"top"==d&&g.top-l-i<0?"bottom":"right"==d&&g.right+h>m?"left":"left"==d&&g.left-h<o?"right":d,c.removeClass(k).addClass(d)}var p=this.getCalculatedOffset(d,g,h,i);this.applyPlacement(p,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),a.top=a.top+g,a.left=a.left+h,d.offset(a).addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;if("top"==b&&j!=f&&(c=!0,a.top=a.top+f-j),/bottom|top/.test(b)){var k=0;a.left<0&&(k=-2*a.left,a.left=0,d.offset(a),i=d[0].offsetWidth,j=d[0].offsetHeight),this.replaceArrow(k-e+i,i,"left")}else this.replaceArrow(j-f,j,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach()}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery); \ No newline at end of file diff --git a/reports/datepicker-time/sample in bootstrap v3/index.html b/reports/datepicker-time/sample in bootstrap v3/index.html new file mode 100644 index 0000000..9691950 --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/index.html @@ -0,0 +1,84 @@ +<!DOCTYPE html> +<html> +<head> + <title></title> + <link href="./bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen"> + <link href="../css/bootstrap-datetimepicker.min.css" rel="stylesheet" media="screen"> +</head> + +<body> +<div class="container"> + <form action="" class="form-horizontal" role="form"> + <fieldset> + <legend>Test</legend> + <div class="form-group"> + <label for="dtp_input1" class="col-md-2 control-label">DateTime Picking</label> + <div class="input-group date form_datetime col-md-5" data-date="1979-09-16T05:25:07Z" data-date-format="dd MM yyyy - HH:ii p" data-link-field="dtp_input1"> + <input class="form-control" size="16" type="text" value="" readonly> + <span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span> + <span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span> + </div> + <input type="hidden" id="dtp_input1" value="" /><br/> + </div> + <div class="form-group"> + <label for="dtp_input2" class="col-md-2 control-label">Date Picking</label> + <div class="input-group date form_date col-md-5" data-date="" data-date-format="dd MM yyyy" data-link-field="dtp_input2" data-link-format="yyyy-mm-dd"> + <input class="form-control" size="16" type="text" value="" readonly> + <span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span> + <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span> + </div> + <input type="hidden" id="dtp_input2" value="" /><br/> + </div> + <div class="form-group"> + <label for="dtp_input3" class="col-md-2 control-label">Time Picking</label> + <div class="input-group date form_time col-md-5" data-date="" data-date-format="hh:ii" data-link-field="dtp_input3" data-link-format="hh:ii"> + <input class="form-control" size="16" type="text" value="" readonly> + <span class="input-group-addon"><span class="glyphicon glyphicon-remove"></span></span> + <span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span> + </div> + <input type="hidden" id="dtp_input3" value="" /><br/> + </div> + </fieldset> + </form> +</div> + +<script type="text/javascript" src="./jquery/jquery-1.8.3.min.js" charset="UTF-8"></script> +<script type="text/javascript" src="./bootstrap/js/bootstrap.min.js"></script> +<script type="text/javascript" src="../js/bootstrap-datetimepicker.js" charset="UTF-8"></script> +<script type="text/javascript" src="../js/locales/bootstrap-datetimepicker.fr.js" charset="UTF-8"></script> +<script type="text/javascript"> + $('.form_datetime').datetimepicker({ + //language: 'fr', + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1 + }); + $('.form_date').datetimepicker({ + language: 'fr', + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + minView: 2, + forceParse: 0 + }); + $('.form_time').datetimepicker({ + language: 'fr', + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 1, + minView: 0, + maxView: 1, + forceParse: 0 + }); +</script> + +</body> +</html> diff --git a/reports/datepicker-time/sample in bootstrap v3/jquery/jquery-1.8.3.min.js b/reports/datepicker-time/sample in bootstrap v3/jquery/jquery-1.8.3.min.js new file mode 100644 index 0000000..3883779 --- /dev/null +++ b/reports/datepicker-time/sample in bootstrap v3/jquery/jquery-1.8.3.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/reports/datepicker/css/datepicker.css b/reports/datepicker/css/datepicker.css new file mode 100644 index 0000000..b7065b7 --- /dev/null +++ b/reports/datepicker/css/datepicker.css @@ -0,0 +1,182 @@ +/*! + * Datepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ +.datepicker { + top: 0; + left: 0; + padding: 4px; + margin-top: 1px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + /*.dow { + border-top: 1px solid #ddd !important; + }*/ + +} +.datepicker:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 6px; +} +.datepicker:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 7px; +} +.datepicker > div { + display: none; +} +.datepicker table { + width: 100%; + margin: 0; +} +.datepicker td, +.datepicker th { + text-align: center; + width: 20px; + height: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.datepicker td.day:hover { + background: #eeeeee; + cursor: pointer; +} +.datepicker td.day.disabled { + color: #eeeeee; +} +.datepicker td.old, +.datepicker td.new { + color: #999999; +} +.datepicker td.active, +.datepicker td.active:hover { + color: #ffffff; + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker td.active:hover, +.datepicker td.active:hover:hover, +.datepicker td.active:focus, +.datepicker td.active:hover:focus, +.datepicker td.active:active, +.datepicker td.active:hover:active, +.datepicker td.active.active, +.datepicker td.active:hover.active, +.datepicker td.active.disabled, +.datepicker td.active:hover.disabled, +.datepicker td.active[disabled], +.datepicker td.active:hover[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.datepicker td.active:active, +.datepicker td.active:hover:active, +.datepicker td.active.active, +.datepicker td.active:hover.active { + background-color: #003399 \9; +} +.datepicker td span { + display: block; + width: 47px; + height: 54px; + line-height: 54px; + float: left; + margin: 2px; + cursor: pointer; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.datepicker td span:hover { + background: #eeeeee; +} +.datepicker td span.active { + color: #ffffff; + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.datepicker td span.active:hover, +.datepicker td span.active:focus, +.datepicker td span.active:active, +.datepicker td span.active.active, +.datepicker td span.active.disabled, +.datepicker td span.active[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.datepicker td span.active:active, +.datepicker td span.active.active { + background-color: #003399 \9; +} +.datepicker td span.old { + color: #999999; +} +.datepicker th.switch { + width: 145px; +} +.datepicker th.next, +.datepicker th.prev { + font-size: 21px; +} +.datepicker thead tr:first-child th { + cursor: pointer; +} +.datepicker thead tr:first-child th:hover { + background: #eeeeee; +} +.input-append.date .add-on i, +.input-prepend.date .add-on i { + display: block; + cursor: pointer; + width: 16px; + height: 16px; +} \ No newline at end of file diff --git a/reports/datepicker/js/bootstrap-datepicker.js b/reports/datepicker/js/bootstrap-datepicker.js new file mode 100644 index 0000000..6e607cf --- /dev/null +++ b/reports/datepicker/js/bootstrap-datepicker.js @@ -0,0 +1,485 @@ +/* ========================================================= + * bootstrap-datepicker.js + * http://www.eyecon.ro/bootstrap-datepicker + * ========================================================= + * Copyright 2012 Stefan Petre + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + +!function( $ ) { + + // Picker object + + var Datepicker = function(element, options){ + this.element = $(element); + this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy'); + this.picker = $(DPGlobal.template) + .appendTo('body') + .on({ + click: $.proxy(this.click, this)//, + //mousedown: $.proxy(this.mousedown, this) + }); + this.isInput = this.element.is('input'); + this.component = this.element.is('.date') ? this.element.find('.add-on') : false; + + if (this.isInput) { + this.element.on({ + focus: $.proxy(this.show, this), + //blur: $.proxy(this.hide, this), + keyup: $.proxy(this.update, this) + }); + } else { + if (this.component){ + this.component.on('click', $.proxy(this.show, this)); + } else { + this.element.on('click', $.proxy(this.show, this)); + } + } + + this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0; + if (typeof this.minViewMode === 'string') { + switch (this.minViewMode) { + case 'months': + this.minViewMode = 1; + break; + case 'years': + this.minViewMode = 2; + break; + default: + this.minViewMode = 0; + break; + } + } + this.viewMode = options.viewMode||this.element.data('date-viewmode')||0; + if (typeof this.viewMode === 'string') { + switch (this.viewMode) { + case 'months': + this.viewMode = 1; + break; + case 'years': + this.viewMode = 2; + break; + default: + this.viewMode = 0; + break; + } + } + this.startViewMode = this.viewMode; + this.weekStart = options.weekStart||this.element.data('date-weekstart')||0; + this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1; + this.onRender = options.onRender; + this.fillDow(); + this.fillMonths(); + this.update(); + this.showMode(); + }; + + Datepicker.prototype = { + constructor: Datepicker, + + show: function(e) { + this.picker.show(); + this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); + this.place(); + $(window).on('resize', $.proxy(this.place, this)); + if (e ) { + e.stopPropagation(); + e.preventDefault(); + } + if (!this.isInput) { + } + var that = this; + $(document).on('mousedown', function(ev){ + if ($(ev.target).closest('.datepicker').length == 0) { + that.hide(); + } + }); + this.element.trigger({ + type: 'show', + date: this.date + }); + }, + + hide: function(){ + this.picker.hide(); + $(window).off('resize', this.place); + this.viewMode = this.startViewMode; + this.showMode(); + if (!this.isInput) { + $(document).off('mousedown', this.hide); + } + //this.set(); + this.element.trigger({ + type: 'hide', + date: this.date + }); + }, + + set: function() { + var formated = DPGlobal.formatDate(this.date, this.format); + if (!this.isInput) { + if (this.component){ + this.element.find('input').prop('value', formated); + } + this.element.data('date', formated); + } else { + this.element.prop('value', formated); + } + }, + + setValue: function(newDate) { + if (typeof newDate === 'string') { + this.date = DPGlobal.parseDate(newDate, this.format); + } else { + this.date = new Date(newDate); + } + this.set(); + this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); + this.fill(); + }, + + place: function(){ + var offset = this.component ? this.component.offset() : this.element.offset(); + this.picker.css({ + top: offset.top + this.height, + left: offset.left + }); + }, + + update: function(newDate){ + this.date = DPGlobal.parseDate( + typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')), + this.format + ); + this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); + this.fill(); + }, + + fillDow: function(){ + var dowCnt = this.weekStart; + var html = '<tr>'; + while (dowCnt < this.weekStart + 7) { + html += '<th class="dow">'+DPGlobal.dates.daysMin[(dowCnt++)%7]+'</th>'; + } + html += '</tr>'; + this.picker.find('.datepicker-days thead').append(html); + }, + + fillMonths: function(){ + var html = ''; + var i = 0 + while (i < 12) { + html += '<span class="month">'+DPGlobal.dates.monthsShort[i++]+'</span>'; + } + this.picker.find('.datepicker-months td').append(html); + }, + + fill: function() { + var d = new Date(this.viewDate), + year = d.getFullYear(), + month = d.getMonth(), + currentDate = this.date.valueOf(); + this.picker.find('.datepicker-days th:eq(1)') + .text(DPGlobal.dates.months[month]+' '+year); + var prevMonth = new Date(year, month-1, 28,0,0,0,0), + day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth()); + prevMonth.setDate(day); + prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7); + var nextMonth = new Date(prevMonth); + nextMonth.setDate(nextMonth.getDate() + 42); + nextMonth = nextMonth.valueOf(); + var html = []; + var clsName, + prevY, + prevM; + while(prevMonth.valueOf() < nextMonth) { + if (prevMonth.getDay() === this.weekStart) { + html.push('<tr>'); + } + clsName = this.onRender(prevMonth); + prevY = prevMonth.getFullYear(); + prevM = prevMonth.getMonth(); + if ((prevM < month && prevY === year) || prevY < year) { + clsName += ' old'; + } else if ((prevM > month && prevY === year) || prevY > year) { + clsName += ' new'; + } + if (prevMonth.valueOf() === currentDate) { + clsName += ' active'; + } + html.push('<td class="day '+clsName+'">'+prevMonth.getDate() + '</td>'); + if (prevMonth.getDay() === this.weekEnd) { + html.push('</tr>'); + } + prevMonth.setDate(prevMonth.getDate()+1); + } + this.picker.find('.datepicker-days tbody').empty().append(html.join('')); + var currentYear = this.date.getFullYear(); + + var months = this.picker.find('.datepicker-months') + .find('th:eq(1)') + .text(year) + .end() + .find('span').removeClass('active'); + if (currentYear === year) { + months.eq(this.date.getMonth()).addClass('active'); + } + + html = ''; + year = parseInt(year/10, 10) * 10; + var yearCont = this.picker.find('.datepicker-years') + .find('th:eq(1)') + .text(year + '-' + (year + 9)) + .end() + .find('td'); + year -= 1; + for (var i = -1; i < 11; i++) { + html += '<span class="year'+(i === -1 || i === 10 ? ' old' : '')+(currentYear === year ? ' active' : '')+'">'+year+'</span>'; + year += 1; + } + yearCont.html(html); + }, + + click: function(e) { + e.stopPropagation(); + e.preventDefault(); + var target = $(e.target).closest('span, td, th'); + if (target.length === 1) { + switch(target[0].nodeName.toLowerCase()) { + case 'th': + switch(target[0].className) { + case 'switch': + this.showMode(1); + break; + case 'prev': + case 'next': + this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call( + this.viewDate, + this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) + + DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1) + ); + this.fill(); + this.set(); + break; + } + break; + case 'span': + if (target.is('.month')) { + var month = target.parent().find('span').index(target); + this.viewDate.setMonth(month); + } else { + var year = parseInt(target.text(), 10)||0; + this.viewDate.setFullYear(year); + } + if (this.viewMode !== 0) { + this.date = new Date(this.viewDate); + this.element.trigger({ + type: 'changeDate', + date: this.date, + viewMode: DPGlobal.modes[this.viewMode].clsName + }); + } + this.showMode(-1); + this.fill(); + this.set(); + break; + case 'td': + if (target.is('.day') && !target.is('.disabled')){ + var day = parseInt(target.text(), 10)||1; + var month = this.viewDate.getMonth(); + if (target.is('.old')) { + month -= 1; + } else if (target.is('.new')) { + month += 1; + } + var year = this.viewDate.getFullYear(); + this.date = new Date(year, month, day,0,0,0,0); + this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0); + this.fill(); + this.set(); + this.element.trigger({ + type: 'changeDate', + date: this.date, + viewMode: DPGlobal.modes[this.viewMode].clsName + }); + } + break; + } + } + }, + + mousedown: function(e){ + e.stopPropagation(); + e.preventDefault(); + }, + + showMode: function(dir) { + if (dir) { + this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir)); + } + this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); + } + }; + + $.fn.datepicker = function ( option, val ) { + return this.each(function () { + var $this = $(this), + data = $this.data('datepicker'), + options = typeof option === 'object' && option; + if (!data) { + $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options)))); + } + if (typeof option === 'string') data[option](val); + }); + }; + + $.fn.datepicker.defaults = { + onRender: function(date) { + return ''; + } + }; + $.fn.datepicker.Constructor = Datepicker; + + var DPGlobal = { + modes: [ + { + clsName: 'days', + navFnc: 'Month', + navStep: 1 + }, + { + clsName: 'months', + navFnc: 'FullYear', + navStep: 1 + }, + { + clsName: 'years', + navFnc: 'FullYear', + navStep: 10 + }], + dates:{ +/* + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +*/ + + days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"], + daysShort: ["Niedz.", "Pon.", "Wt.", "Śr.", "Czw.", "Piąt.", "Sob."], + daysMin: ["Ndz.", "Pn.", "Wt.", "Śr.", "Czw.", "Pt.", "Sob."], + months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], + monthsShort: ["Sty.", "Lut.", "Mar.", "Kwi.", "Maj", "Cze.", "Lip.", "Sie.", "Wrz.", "Paź.", "Lis.", "Gru."], + + + + }, + isLeapYear: function (year) { + return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) + }, + getDaysInMonth: function (year, month) { + return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] + }, + parseFormat: function(format){ + var separator = format.match(/[.\/\-\s].*?/), + parts = format.split(/\W+/); + if (!separator || !parts || parts.length === 0){ + throw new Error("Invalid date format."); + } + return {separator: separator, parts: parts}; + }, + parseDate: function(date, format) { + var parts = date.split(format.separator), + date = new Date(), + val; + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + if (parts.length === format.parts.length) { + var year = date.getFullYear(), day = date.getDate(), month = date.getMonth(); + for (var i=0, cnt = format.parts.length; i < cnt; i++) { + val = parseInt(parts[i], 10)||1; + switch(format.parts[i]) { + case 'dd': + case 'd': + day = val; + date.setDate(val); + break; + case 'mm': + case 'm': + month = val - 1; + date.setMonth(val - 1); + break; + case 'yy': + year = 2000 + val; + date.setFullYear(2000 + val); + break; + case 'yyyy': + year = val; + date.setFullYear(val); + break; + } + } + date = new Date(year, month, day, 0 ,0 ,0); + } + return date; + }, + formatDate: function(date, format){ + var val = { + d: date.getDate(), + m: date.getMonth() + 1, + yy: date.getFullYear().toString().substring(2), + yyyy: date.getFullYear() + }; + val.dd = (val.d < 10 ? '0' : '') + val.d; + val.mm = (val.m < 10 ? '0' : '') + val.m; + var date = []; + for (var i=0, cnt = format.parts.length; i < cnt; i++) { + date.push(val[format.parts[i]]); + } + return date.join(format.separator); + }, + headTemplate: '<thead>'+ + '<tr>'+ + '<th class="prev">&laquo;</th>'+ + '<th colspan="5" class="switch"></th>'+ + '<th class="next">&raquo;</th>'+ + '</tr>'+ + '</thead>', + contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>' + }; + DPGlobal.template = '<div class="datepicker dropdown-menu">'+ + '<div class="datepicker-days">'+ + '<table class=" table-condensed">'+ + DPGlobal.headTemplate+ + '<tbody></tbody>'+ + '</table>'+ + '</div>'+ + '<div class="datepicker-months">'+ + '<table class="table-condensed">'+ + DPGlobal.headTemplate+ + DPGlobal.contTemplate+ + '</table>'+ + '</div>'+ + '<div class="datepicker-years">'+ + '<table class="table-condensed">'+ + DPGlobal.headTemplate+ + DPGlobal.contTemplate+ + '</table>'+ + '</div>'+ + '</div>'; + +}( window.jQuery ); \ No newline at end of file diff --git a/reports/datepicker/less/datepicker.less b/reports/datepicker/less/datepicker.less new file mode 100644 index 0000000..c3f34be --- /dev/null +++ b/reports/datepicker/less/datepicker.less @@ -0,0 +1,122 @@ +/*! + * Datepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */ + +.datepicker { + top: 0; + left: 0; + padding: 4px; + margin-top: 1px; + .border-radius(4px); + &:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0,0,0,.2); + position: absolute; + top: -7px; + left: 6px; + } + &:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid @white; + position: absolute; + top: -6px; + left: 7px; + } + >div { + display: none; + } + table{ + width: 100%; + margin: 0; + } + td, + th{ + text-align: center; + width: 20px; + height: 20px; + .border-radius(4px); + } + td { + &.day:hover { + background: @grayLighter; + cursor: pointer; + } + &.day.disabled { + color: @grayLighter; + } + &.old, + &.new { + color: @grayLight; + } + &.active, + &.active:hover { + .buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20)); + color: #fff; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + } + span { + display: block; + width: 47px; + height: 54px; + line-height: 54px; + float: left; + margin: 2px; + cursor: pointer; + .border-radius(4px); + &:hover { + background: @grayLighter; + } + &.active { + .buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20)); + color: #fff; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + } + &.old { + color: @grayLight; + } + } + } + + th { + &.switch { + width: 145px; + } + &.next, + &.prev { + font-size: @baseFontSize * 1.5; + } + } + + thead tr:first-child th { + cursor: pointer; + &:hover{ + background: @grayLighter; + } + } + /*.dow { + border-top: 1px solid #ddd !important; + }*/ +} +.input-append, +.input-prepend { + &.date { + .add-on i { + display: block; + cursor: pointer; + width: 16px; + height: 16px; + } + } +} \ No newline at end of file diff --git a/reports/index.php b/reports/index.php new file mode 100644 index 0000000..e6c8b8c --- /dev/null +++ b/reports/index.php @@ -0,0 +1,421 @@ +<?PHP session_start(); +//setcookie ("odwiedz", "jest", time()+600); +if ($_GET['evnt']=='out') { unset($_SESSION['user']); session_destroy();} +//Sprawdza, czy nie został przełączony jakiś inny użytkownik. Jeśli tak, to czyście zmianne sesyjne. +// =========================================================================================================== // +if (!empty($_GET['auth']) && $_GET['auth']!=$_SESSION['syndis_auth']){ unset($_SESSION['user']); $_SESSION = array();} + + +// =========================================================================================================== // +?> +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + +<link rel="shortcut icon" href="./images/SoftSPM.ico"> +<LINK href="./style/theme.css" type="text/css" rel="stylesheet"> +<LINK href="./style/style.css" type="text/css" rel="stylesheet"> +<LINK href="./style/topmenu.css" type="text/css" rel="stylesheet"> +<LINK href="./style/tooltip.css" type="text/css" rel="stylesheet"> +<LINK href="./style/cointainers.css" type="text/css" rel="stylesheet"> +<LINK href="./style/map_tooltip.css" type="text/css" rel="stylesheet"> +<LINK href="./style/tables.css" type="text/css" rel="stylesheet"> +<LINK href="./style/links.css" type="text/css" rel="stylesheet"> +<LINK href="./style/forms.css" type="text/css" rel="stylesheet"> +<LINK href="./style/multi-select.css" type="text/css" rel="stylesheet"> +<link rel="stylesheet" href="./style/sweetalert.css"> +<link rel="stylesheet" href="./style/preloader.css"> +<link rel="stylesheet" href="./datepicker/images/jquery-ui.css"> +<link rel="stylesheet" href="./datepicker/images/style.css"> +<script src="./datepicker/js/jquery-1.9.1.js"></script> +<script src="./datepicker/js/jquery-ui.js"></script> +<script src="./datepicker/js/jquery.multi-select.js"></script> +<script src="./js/jquery.multi-select.js" type="text/javascript"></script> +<script src="./js/application.js" type="text/javascript"></script> +<script src="./js/jquery.validate.js"></script> +<script src="./js/myValidations.js" type="text/javascript"></script> +<script src="./js/dynamicForms.js"></script> +<script src="./js/sweetalert.min.js"></script> + + +<TITLE>..:: SoftSPM ::..</TITLE> +</HEAD> + +<?php +// sprawdza rodzaj i wersje przeglądarki +//if (empty($_SESSION['attention'])) if (checkYourBrowser()==1) $_SESSION['attention']='accept'; +//if ((empty($_SESSION['attention']) && $_POST['subAttentionAccept']=='OK') || $_POST['in_subOK']==" ok ") $_SESSION['attention']='accept'; +//if (empty($_SESSION['attention'])) +// showBrowserAttention(); +// ======================================== +//else +//{ +?> + +<BODY style="background-repeat: repeat-x;" BACKGROUND="./images/bg.jpg" > + + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + +//usuwa zmienne sesyjne, jeśli otwarto nowe okno +if(!empty($_GET['auth'])) +{ + delSearchSessionData(); + $_SESSION['syndis_close_window']=600; + //echo('<script>sweetAlert("Ważna informacja!", "W celu uniknięcia potencjalnych błędów proszę zamknąć wcześniej pootwierane okna systemu SoftSPM. Proszę pracować tylko i wyłącznie na aktualnie otwartej karcie! Niedostosowanie się do niniejszego komunikatu może generować błędy w systemie.", "warning");</script>'); +} + + + + + +// sprawdza, czy URL jest skierowany z SYNDISA +if (!empty($_GET['auth']) && !$_SESSION['user']) +{ + $_SESSION['active_automation_wells']= getActiveAutomationWells(); + + if ($_GET['auth']=="6e19274776a47c204d6b412756a60d78") + usrLoginAndSiteAccess("syndis", "syndis", "polish", "SoftSPM_bas"); + else + { + $wynik = mysql_query("select USR_USERNAME,md5(USR_USERNAME) ATH from sys_users where USR_STATUS='1'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $uName=$r["USR_USERNAME"]; + $authMd5=$r["ATH"]; + + if ($_GET['auth']==$authMd5) + { + usrLoginAndSiteAccess($uName, $uName.".123", "polish", "SoftSPM_bas"); + $_SESSION['syndis_auth']=$authMd5; + + // pobiera informacje o dostępie do regionu + $access_reg=""; $reg_count=1; + $wynik_reg = mysql_query("select URG_DESC from sys_users_regions where URG_USR_ID=".$_SESSION['user_id']); + if($wynik_reg)while ($r_reg = mysql_fetch_array($wynik_reg)) + { + if ($reg_count==1) { $access_reg = $r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_1'] = $r_reg["URG_DESC"]; } + else if ($reg_count==2) { $access_reg .= ";".$r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_2'] = $r_reg["URG_DESC"]; } + else if ($reg_count==3) { $access_reg .= ";".$r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_3'] = $r_reg["URG_DESC"]; } + $reg_count++; + } + $reg_count--; + $_SESSION['syndis_eq_stock']=$access_reg; + + //warunek na wybieranie oddziału w jaki chce użytkownik pracować + if ($reg_count>1) + { + //pobiera informacje z URL i przypisuje Oddział oraz wchodzi w dany obiekt + $tmpDevID=sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_GET['obj']."'", "DRS_ID"); + if ($tmpDevID>0) + { + $tmpPlc=sqlStringValue("select SOD_PLC from seg_object_def where SOD_NAME='".$_GET['obj']."'", "SOD_PLC"); + $_SESSION['syndis_eq_stock'] = $tmpPlc; + $_SESSION['eq_stock_param3_1'] = $tmpPlc; + unset($_SESSION['eq_stock_param3_2']); + unset($_SESSION['eq_stock_param3_3']); + + header("Location: ?pg=site401mark&dev=$tmpDevID"); + + } + else{ + //sprawdza, czy nie jest to piezometr + $tmpDevID=sqlStringValue("select DRS_ID from seg_dev_resources,seg_reservoirs_piezometers where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and SRP_NAME='".$_GET['obj']."'", "DRS_ID"); + if ($tmpDevID>0) + { + $tmpPlc=sqlStringValue("select SOD_PLC from seg_object_def where SOD_NAME='".$_GET['obj']."'", "SOD_PLC"); + $_SESSION['syndis_eq_stock'] = $tmpPlc; + $_SESSION['eq_stock_param3_1'] = $tmpPlc; + unset($_SESSION['eq_stock_param3_2']); + unset($_SESSION['eq_stock_param3_3']); + + header("Location: ?pg=site404inf&dev=$tmpDevID"); + } + else{ + $dalej="./?pg=seldep"; + header("Location: $dalej"); + } + } + } + + //zerowanie wszystkich danych sesyjnych z wyszukiwarek + delSearchSessionData(); + + } + } + } +} + +//zwykłe logowanie +if ($_POST['in_subOK']=="Zaloguj" && strlen($_POST['in_login'])>3) +{ + $_SESSION['active_automation_wells']= getActiveAutomationWells(); + + usrLoginAndSiteAccess($_POST['in_login'], $_POST['in_pass'], $_POST['in_lang'], $_POST['in_system']); + //dodawanie informacji o wydziale + if (!empty($_SESSION['user'])) + { + //uprawnienia do oddziłu + $_SESSION['eq_stock_param3_1'] = $_POST['in_branch']; + $_SESSION['syndis_eq_stock'] = $_POST['in_branch']; + } +} + + +if (!empty($_SESSION['user'])) + { + if ($_SESSION['lang']) + { + include"./language/".$_SESSION['lang'].".php"; + $fileFlag = "./images/".$_SESSION['lang'].".png"; + } + if ($_SESSION['sys_typ']) + //$fileSys = "./images/".$_SESSION['sys_typ'].".png"; + $fileSys = "./images/SoftSPM_ent.png"; +?> + + +<?php +// sprawdza, czu użytkownik jest przypisany do jakiegoś wydziału +if ((empty($_SESSION['eq_stock_param3_1']) && empty($_SESSION['eq_stock_param3_1']) && empty($_SESSION['eq_stock_param3_1'])) && empty($_SESSION['war_about_priv']) && !empty($_SESSION['user'])) +{ + echo('<script>sweetAlert("Uwaga!", "Aktualnie zalogowany użytkownik nie jest przypisany do żadnego z wydziałów! Należy skontaktować się z administratorem w celu nadania odpowiednich ról w systemie.\n W niektórych przypadkach system będzie pokazywał wszystkie obiekty lub nie będzie pokazywał żadnego.\n\n Inną przyczyną może być pominięcie logowania bezpośrednio z systemu SYNDIS!", "warning");</script>'); + $_SESSION['war_about_priv']='Show'; +} +?> + + + + +<div class="main"> + + <div class="LogLog"> + <div class="logo_name"> + <?php echo"<img src='$fileSys' border='0'>"; ?> + </div> + <div class="logged_block"> + <a class='tooltip_logout' href='./?evnt=out'><img src="./images/logged.png" border="0"> <span><?php echo $lab_MenuOut ;?></span></a> + </div> + <span class="login_name"><?php echo $_SESSION['user'] ;?></span> + + <div class="language"> + <?php echo"<img style='max-height: 30px;' src='$fileFlag' border='0'>"; ?> + </div> + </div> + + <div class="system_name"><?php echo"<img src='./images/SoftTITLE.png' border='0'>"; ?></div> + <div class="head_space" style="text-align: center; color: #ffff00;"> + <?php if ($_SESSION['active_automation_wells']>570): ?> + UWAGA: Została przekroczona liczba dostępnych licencji na obiekty objęte automatyką. + <?php endif; ?> + </div> + + <div class="work_area"> + <div class="topmenu"> + <ul id="menu"> + <li><a href="#">&nbsp;&nbsp; <?php echo $lab_TopMenu_200 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site203'])) echo"<li><a href='?pg=site203'>&nbsp; $lab_SubMenu_203 </a></li>"; ?> + <?php if (!empty($_SESSION['site204'])) echo"<li><a href='?pg=site204'>&nbsp; $lab_SubMenu_204 </a></li>"; ?> + <?php if (!empty($_SESSION['site205'])) echo"<li><a href='?pg=site205'>&nbsp; $lab_SubMenu_205 </a></li>"; ?> + <?php if (!empty($_SESSION['site201'])) echo"<li><a href='?pg=site201'>&nbsp; $lab_SubMenu_201 </a></li>"; ?> + <?php if (!empty($_SESSION['site206'])) echo"<li><a href='?pg=site206'>&nbsp; $lab_SubMenu_206 </a></li>"; ?> + <?php if (!empty($_SESSION['site207'])) echo"<li><a href='?pg=site207'>&nbsp; $lab_SubMenu_207 </a></li>"; ?> + <?php if (!empty($_SESSION['site208'])) echo"<li><a href='?pg=site208'>&nbsp; $lab_SubMenu_208 </a></li>"; ?> + </ul> + </li> + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_300 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site303'])) echo"<li><a href='?pg=site303'>&nbsp; $lab_SubMenu_303 </a></li>"; ?> + <?php if (!empty($_SESSION['site304'])) echo"<li><a href='?pg=site304'>&nbsp; $lab_SubMenu_304 </a></li>"; ?> + <?php if (!empty($_SESSION['site301'])) echo"<li><a href='?pg=site301'>&nbsp; $lab_SubMenu_301 </a></li>"; ?> + <?php if (!empty($_SESSION['site302'])) echo"<li><a href='?pg=site302'>&nbsp; $lab_SubMenu_302 </a></li>"; ?> + <?php if (!empty($_SESSION['site309'])) echo"<li><a href='?pg=site309'>&nbsp; $lab_SubMenu_309 </a></li>"; ?> + <?php if (!empty($_SESSION['site306'])) echo"<li><a href='?pg=site306'>&nbsp; $lab_SubMenu_306 </a></li>"; ?> + <?php if (!empty($_SESSION['site307'])) echo"<li><a href='?pg=site307'>&nbsp; $lab_SubMenu_307 </a></li>"; ?> + <?php if (!empty($_SESSION['site308'])) echo"<li><a href='?pg=site308'>&nbsp; $lab_SubMenu_308 </a></li>"; ?> + </ul> + </li> + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_400 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site401'])) echo"<li><a href='?pg=site401'>&nbsp; $lab_SubMenu_401 </a></li>"; ?> + <?php if (!empty($_SESSION['site402'])) echo"<li><a href='?pg=site402'>&nbsp; $lab_SubMenu_402 </a></li>"; ?> + <?php if (!empty($_SESSION['site404'])) echo"<li><a href='?pg=site404'>&nbsp; $lab_SubMenu_404 </a></li>"; ?> + <?php if (!empty($_SESSION['site405'])) echo"<li><a href='?pg=site405'>&nbsp; $lab_SubMenu_405 </a></li>"; ?> + <?php if (!empty($_SESSION['site406'])) echo"<li><a href='?pg=site406'>&nbsp; $lab_SubMenu_406 </a></li>"; ?> + <?php if (!empty($_SESSION['site403'])) echo"<li><a href='?pg=site403'>&nbsp; $lab_SubMenu_403 </a></li>"; ?> + <?php if (!empty($_SESSION['site401'])) echo"<li><a href='?pg=site407'>&nbsp; Zrzut wody - rejestr </a></li>"; ?> + </ul> + </li> + + +<?php if (!empty($_SESSION['siteXXX'])) echo"<li><a href='?pg=siteXXX'>&nbsp; $lab_SubMenu_XXX </a></li>"; ?> + + + <?php + // dla STANDARD + if ($_SESSION['access_level']>1) + { + echo" + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_500 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site501>&nbsp; $lab_SubMenu_501 </a></li> + <li><a href=?pg=site502>&nbsp; $lab_SubMenu_502 </a></li> + <li><a href=?pg=site503>&nbsp; $lab_SubMenu_503 </a></li> + <li><a href=?pg=site504>&nbsp; $lab_SubMenu_504 </a></li> + </ul> + </li>"; + } + // dla ENTERPRICE + if ($_SESSION['access_level']>2) + { + echo" + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_600 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site601>&nbsp; $lab_SubMenu_601 </a></li> + <li><a href=?pg=site602>&nbsp; $lab_SubMenu_602 </a></li> + <li><a href=?pg=site603>&nbsp; $lab_SubMenu_603 </a></li> + </ul> + </li> + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_700 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site701>&nbsp; $lab_SubMenu_701 </a></li> + <li><a href=?pg=site702>&nbsp; $lab_SubMenu_702 </a></li> + <li><a href=?pg=site703>&nbsp; $lab_SubMenu_703 </a></li> + <li><a href=?pg=site704>&nbsp; $lab_SubMenu_704 </a></li> + </ul> + </li>"; + } + ?> + + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_800 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site801'])) echo"<li><a href='?pg=site801'>&nbsp; $lab_SubMenu_801 </a></li>"; ?> + <?php if (!empty($_SESSION['site802'])) echo"<li><a href='?pg=site802'>&nbsp; $lab_SubMenu_802 </a></li>"; ?> + <?php if (!empty($_SESSION['site805'])) echo"<li><a href='?pg=site805'>&nbsp; $lab_SubMenu_805 </a></li>"; ?> + <?php if (!empty($_SESSION['site803'])) echo"<li><a href='?pg=site803'>&nbsp; $lab_SubMenu_803 </a></li>"; ?> + <?php if (!empty($_SESSION['site806'])) echo"<li><a href='?pg=site806'>&nbsp; $lab_SubMenu_806 </a></li>"; ?> + <?php if (!empty($_SESSION['site807'])) echo"<li><a href='?pg=site807'>&nbsp; $lab_SubMenu_807 </a></li>"; ?> + <?php if (!empty($_SESSION['site809'])) echo"<li><a href='?pg=site809'>&nbsp; $lab_SubMenu_809 </a></li>"; ?> + <?php if (!empty($_SESSION['site810'])) echo"<li><a href='?pg=site810'>&nbsp; $lab_SubMenu_810 </a></li>"; ?> + <li><a href=?pg=site804>&nbsp; <?php echo $lab_SubMenu_804 ;?> </a></li> + </ul> + </li> + + <li><a href="?pg=site900">|&nbsp;&nbsp; <?php echo $lab_TopMenu_900 ;?> &nbsp;&nbsp;</a></li> + + <li style="float: right; display: block; "><a href=./><?php echo $_SESSION['syndis_eq_stock'] ;?> &nbsp;&nbsp;</a></li> + + + </ul> + + + + + </div> + + <br/> + <!-- buduje �ż�cie�ż�k�ż� w ramach kt�ż�rej si�ż� znajdujemy --> + <div class="path_map"> + <?php + if (!($_GET['pg'])) $_GET['pg']='site401'; + getPathFromSiteNumber($_GET['pg']); + + ?> + </div> + <br/> + + <?php + if ($_GET['pg']) + include'./sites/'.$_GET['pg'].'.php'; + else + include'./sites/site401.php'; + ?> + + </div> + + <div class="footer">&copy; SoftSPM, <?php echo date('Y'); ?>, v.1.25</div> + +</div> + +<?php +mysql_close($polacz); + + } +else + { +?> +<img style="position: relative; left: 0; width: 100%; opacity:0.5;" src="./images/tlo.jpg"> +<img src="./images/systemOnLoginName.png" style="position:fixed; top:20px; left: 25%; max-width: 50%;"> + + + <form action="./" method="post"> + <input type="hidden" name="in_system" value="SoftSPM_bas"> + <input type="hidden" name="in_lang" value="polish"> + + <div class="login_cointainer"> + <br/> + <table style="width: 80%; margin: 0px auto;"> + <tr> + <td style="width: 50%; font-size: 21px;">Logowanie</td> + <td style="width: 50%; text-align: right;"><img src="./images/pl.png" style="max-height: 24px;" title="Obsługa w języku polskim"></td> + </tr> + </table> + <p><hr style="width: 82%;"/><br/><br/></p> + <p style="text-align: center;"> + <img class='user_login' src='images/user-icon.png'><input class='log_pass' type='text' name='in_login' placeholder='podaj nazwę użytkownika'><br/><br/> + <img class='user_login' src='images/padlock-lock-icon.png'><input class='log_pass' type='password' name='in_pass' placeholder='podaj hasło'><br/><br/> + <img class='user_login' src='images/applications-icon.png'><select name="in_branch" class='log_branch'> + <option VALUE="P/Szczerców">P/Szczerców</OPTION> + <option VALUE="P/Bełchatów">P/Bełchatów</OPTION> + <option VALUE="Dębina">Dębina</OPTION> + </select> + <br/><br/> + </p> + <p style="text-align: center; padding-bottom: 20px;"> + <input name="in_subOK" type="submit" class="btn btn-primary" value="Zaloguj" /> + + </p> + + </div> + </form> + + + + +</div> + + +<?php + + } +//} + +?> + +<?php +//zamyka okienko dla sesji przeglądarki SYNDIS +//if (!empty($_SESSION['syndis_close_window'])) +// echo'<meta http-equiv="refresh" content="'.$_SESSION['syndis_close_window'].'; url=./?pg=closewindow">'; + + +?> + + +</BODY> +</HTML> + + diff --git a/reports/jquery.min.js b/reports/jquery.min.js new file mode 100644 index 0000000..e836475 --- /dev/null +++ b/reports/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{ +marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({ +padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n}); diff --git a/reports/prepare_002.php b/reports/prepare_002.php new file mode 100644 index 0000000..fa61787 --- /dev/null +++ b/reports/prepare_002.php @@ -0,0 +1,78 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + + +?> + + +<?php + //delete from `rep_his_data_everyday` where `RHD_ID`>525234 and RHD_ID<525540 + mysql_query("delete from `rep_his_data_everyday` where `RHD_ID`>525234 and RHD_ID<525540"); + + + + unset($rep002Array); + $rep002Array = sqlGetResAsArray("select * from a_tmp_data_01092016"); + for ($i=0; $i<count($rep002Array); $i++) + { + $id = (int) 525236 + $i; + //525235 + //INSERT INTO rep_his_data_everyday SET RHD_ID=525235,RHD_DRS_ID=24447,RHD_DATE='2016-09-01 00:00:10',RHD_VM3_VAL=100,RHD_WORK_TIME_VAL=200,RHD_AUDIT_CD='2016-09-01 00:00:10'; + //$rep002Array[$i]['DRS_ID'] + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_ID=".$id.",RHD_DRS_ID=".$rep002Array[$i]['DRS_ID'].",RHD_DATE='2016-09-01 00:00:10',RHD_VM3_VAL=".$rep002Array[$i]['PW'].",RHD_WORK_TIME_VAL=".round($rep002Array[$i]['WT']/3600,2).",RHD_AUDIT_CD='2016-09-01 00:00:10'"); + + echo "Wprowadzono dane dla studni: ".$rep002Array[$i]['WLL_NAME']."<br/>"; + + } + + + + + + + //print_r($rep002Array); +?> + + +<?php +mysql_close($polacz); + +?> + +</body> +</html> diff --git a/reports/prepare_002a.php b/reports/prepare_002a.php new file mode 100644 index 0000000..da6da06 --- /dev/null +++ b/reports/prepare_002a.php @@ -0,0 +1,101 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + + +?> + + +<?php + //delete from `rep_his_data_everyday` where `RHD_ID`>525234 and RHD_ID<525540 + mysql_query("delete from `rep_his_data_everyday` where `RHD_ID`>525540 and RHD_ID<525840"); + + mysql_query("drop table if exists a_tmp_data_02092016_01"); + mysql_query("create table a_tmp_data_02092016_01 select DRS_ID,WLL_ID,WLL_NAME,WLE_DATE_TO from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLL_ID=WLE_WLL_ID and WLL_CAT_DIC_ID=20 and WLE_DATE_FROM<='2016-09-01 00:00:01' and WLE_DATE_TO>='2016-09-01 00:00:01' and DRS_DEV_TYPE=12"); + mysql_query("drop table if exists a_tmp_data_02092016_02"); + mysql_query("create table a_tmp_data_02092016_02 select WMS_DRS_ID,WMS_WORK_STATUS,WMS_DATETIME from seg_wells_manual_work"); + mysql_query("truncate table a_tmp_data_02092016_02"); + mysql_query(""); + mysql_query(""); + mysql_query(""); + mysql_query(""); + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_ID=525541,RHD_DRS_ID=1,RHD_DATE='2016-09-01 00:00:10',RHD_VM3_VAL=1,RHD_WORK_TIME_VAL=1,RHD_AUDIT_CD='2016-09-01 00:00:10';"); + + + $id = 525541; + + unset($rep002Array); + $rep002Array = sqlGetResAsArray("select * from a_tmp_data_02092016_01"); + for ($i=0; $i<count($rep002Array); $i++) + { + unset($tmpONOFF); + $tmpONOFF = sqlGetResAsArray("select DRD_DRS_ID,DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."' and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." order by DRD_AUDIT_DATE"); + + for($j=0; $j<count($tmpONOFF); $j++) + { + mysql_query("INSERT INTO a_tmp_data_02092016_02 SET WMS_DRS_ID=".$tmpONOFF[$j]['DRD_DRS_ID'].",WMS_WORK_STATUS='".$tmpONOFF[$j]['DRD_VALUE']."',WMS_DATETIME='".$tmpONOFF[$j]['DRD_AUDIT_DATE']."'"); + } + + + if (count($tmpONOFF)>0) + { + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_ID=".$id.",RHD_DRS_ID=".$rep002Array[$i]['DRS_ID'].",RHD_DATE='2016-09-01 00:00:10',RHD_VM3_VAL=pw_tmp_01(".$rep002Array[$i]['DRS_ID'].",'2016-09-01 00:00:10'),RHD_WORK_TIME_VAL=round(wt_tmp_01(".$rep002Array[$i]['DRS_ID'].",'2016-09-01 00:00:10')/3600,2),RHD_AUDIT_CD='2016-09-01 00:00:10';"); + $id++; + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_ID=".$id.",RHD_DRS_ID=".$rep002Array[$i]['DRS_ID'].",RHD_DATE='".$rep002Array[$i]['WLE_DATE_TO']."',RHD_VM3_VAL=pw_tmp_01(".$rep002Array[$i]['DRS_ID'].",'".$rep002Array[$i]['WLE_DATE_TO']."'),RHD_WORK_TIME_VAL=round(wt_tmp_01(".$rep002Array[$i]['DRS_ID'].",'".$rep002Array[$i]['WLE_DATE_TO']."')/3600,2),RHD_AUDIT_CD='".$rep002Array[$i]['WLE_DATE_TO']."';"); + $id++; + } + + + echo "Wprowadzono dane dla studni: ".$rep002Array[$i]['WLL_NAME'].", DRS: ".$rep002Array[$i]['DRS_ID'].", DATE: ".$rep002Array[$i]['WLE_DATE_TO']."<br/>"; + } + + mysql_query("drop table if exists a_tmp_data_02092016_01"); + mysql_query("drop table if exists a_tmp_data_02092016_02"); + + + //print_r($rep002Array); +?> + +<br/>DONE<br/> + +<?php +mysql_close($polacz); + +?> + +</body> +</html> diff --git a/reports/rapExapmle_xls.php b/reports/rapExapmle_xls.php new file mode 100644 index 0000000..c5ee3a1 --- /dev/null +++ b/reports/rapExapmle_xls.php @@ -0,0 +1,55 @@ +<?php session_start(); +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 01:16 + */ + +//require_once '../PHPExcel.php'; +require_once '/PHPExcel.php'; + +//header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +//header('Content-Disposition: attachment;filename="rap001.xlsx"'); +//header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:G1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:G1')->applyFromArray($styleArray); + +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz energochłonności dla studni'); + +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Energochłonność'); +$objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Opis'); +$objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Oddział'); +$objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Data'); + + +for($i=0;$i<count($_SESSION['resRap001']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $_SESSION['resRap001'][$i]['WLL_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $_SESSION['resRap001'][$i]['SOD_UJ']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $_SESSION['resRap001'][$i]['RDD_VALUE']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $_SESSION['resRap001'][$i]['SOD_DESC']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $_SESSION['resRap001'][$i]['SOD_PLC']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $_SESSION['resRap001'][$i]['RDD_AUDIT_DATE']); + + +} +$objPHPExcel->getActiveSheet()->setTitle('Wykaz energochłonności'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +//$objWriter->save('php://output'); +$objWriter->save('rap001.xlsx'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_001_print.php b/reports/rep_001_print.php new file mode 100644 index 0000000..41a6b62 --- /dev/null +++ b/reports/rep_001_print.php @@ -0,0 +1,123 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Bad SYNDIS to SoftSPM</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Dane pobrane z SYNDIS wymagające analizy – studnie pracujące</h3> + </div> + <div class="panel-body"> + Data odpytania SYNDIS:<b> <?php echo sqlStringValue("select max(SQD_AUDIT_CD) MAXDT from rep_soap_syndis_quality_data", "MAXDT"); ?></b> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj</a> + </div> +</div> + + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Q</th> + <th>Flaga Q</th> + <th>P1</th> + <th>Flaga P1</th> + <th>P2</th> + <th>Flaga P2</th> + <th>I</th> + <th>Flaga I</th> + <th>U</th> + <th>Flaga U</th> + <th>cos(φ)</th> + <th>Flaga cos(φ)</th> + <th>PE</th> + <th>Flaga PE</th> + <th>PP</th> + <th>Flaga PP</th> + <th>HH</th> + <th>Flaga HH</th> + <th>HD</th> + <th>Flaga HD</th> + <th>Oddział</th> + </tr> + </thead> + +<?php + unset($rep001Array); + $rep001Array = sqlGetResAsArray("select * from rep_soap_syndis_quality_data,seg_wells left join seg_dev_resources on (DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12) where WLL_NAME=SQD_OBJECT_NAME and SQD_VAL_ONOFF=1 and (SQD_VAL_Q<=0 or SQD_FLG_Q<>'CORRECT' or (SQD_VAL_P2-1.5)>SQD_VAL_P1 or SQD_FLG_P1<>'CORRECT' or SQD_FLG_P2<>'CORRECT' or SQD_VAL_I<=0 or SQD_FLG_I<>'CORRECT' or SQD_VAL_U<=0 or SQD_FLG_U<>'CORRECT' or SQD_VAL_CF<=0 or SQD_FLG_CF<>'CORRECT' or SQD_VAL_PE<=0 or SQD_FLG_PE<>'CORRECT' or SQD_VAL_PP<=0 or SQD_FLG_PP<>'CORRECT' or SQD_VAL_HH<=0 or SQD_FLG_HH<>'CORRECT' or SQD_VAL_HD<=0 or SQD_FLG_HD<>'CORRECT')"); + + + //print_r($rep001Array); +?> + +<?php +for($i=0;$i<count($rep001Array);$i++) +{ + echo" + <tr> + <td>".($i+1).".</td> + <td>".$rep001Array[$i]['SQD_OBJECT_NAME']."</td> + <td>".round($rep001Array[$i]['SQD_VAL_Q']/60,3)."</td> + <td>".$rep001Array[$i]['SQD_FLG_Q']."</td> + <td>".$rep001Array[$i]['SQD_VAL_P1']."</td> + <td>".$rep001Array[$i]['SQD_FLG_P1']."</td> + <td>".$rep001Array[$i]['SQD_VAL_P2']."</td> + <td>".$rep001Array[$i]['SQD_FLG_P2']."</td> + <td>".$rep001Array[$i]['SQD_VAL_I']."</td> + <td>".$rep001Array[$i]['SQD_FLG_I']."</td> + <td>".$rep001Array[$i]['SQD_VAL_U']."</td> + <td>".$rep001Array[$i]['SQD_FLG_U']."</td> + <td>".$rep001Array[$i]['SQD_VAL_CF']."</td> + <td>".$rep001Array[$i]['SQD_FLG_CF']."</td> + <td>".$rep001Array[$i]['SQD_VAL_PE']."</td> + <td>".$rep001Array[$i]['SQD_FLG_PE']."</td> + <td>".$rep001Array[$i]['SQD_VAL_PP']."</td> + <td>".$rep001Array[$i]['SQD_FLG_PP']."</td> + <td>".$rep001Array[$i]['SQD_VAL_HH']."</td> + <td>".$rep001Array[$i]['SQD_FLG_HH']."</td> + <td>".$rep001Array[$i]['SQD_VAL_HD']."</td> + <td>".$rep001Array[$i]['SQD_FLG_HD']."</td> + <td>".$rep001Array[$i]['DRS_DEPARTMENT']."</td> + </tr> + "; +} +?> +</table> + + +<?php +mysql_close($polacz); + +?> + +</body> +</html> diff --git a/reports/rep_002_grud_print.php b/reports/rep_002_grud_print.php new file mode 100644 index 0000000..0016697 --- /dev/null +++ b/reports/rep_002_grud_print.php @@ -0,0 +1,222 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + <link rel="stylesheet" href="../style/sweetalert.css"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + <script src="../js/sweetalert.min.js"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +$tbaName = "rep_002_data_grud"; +$last_day = date("t", strtotime("2016-12-".date('d'))); + +if ($_POST['subReset']=='Resetuj') +{ + unset($_POST['from_date']); + unset($_POST['to_date']); +} + +if (empty($_POST['from_date'])) $_POST['from_date'] = '01'; +if (empty($_POST['to_date'])) $_POST['to_date'] = '31'; + + +?> + +<form action="./rep_002_grud_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz pracy studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Miesiąc:</div> + <input class="form-control" type="text" value="Listopad" readonly="readonly"> + </div> + + </div> + + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień od:</div> + <select class="form-control" id="from_date" name="from_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['from_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień do:</div> + <select class="form-control" id="to_date" name="to_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['to_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + </div> + + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_002_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_002_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + +</form> + + +<?php +//październik +if ($_POST['isGenerate']=='ok') +{ + $date_f = "2016-12-".$_POST['from_date']." 00:00:00"; + $date_t = "2016-12-".$_POST['to_date']." 23:59:59"; +} + +unset($rp_name); +if (str_replace(array('-',' ',':'), array('','',''), $date_f) > str_replace(array('-',' ',':'), array('','',''), $date_t)) +{ + $rp_name = "nie ma takiego"; + echo('<script>sweetAlert("Uwaga!", "Operacja niemożliwa! Dzień DO jest większy od dnia OD. \n Spróbuj ponownie.", "warning");</script>'); +} +else $rp_name = "rep002"; + + +?> + + + +<?php +mysql_close($polacz); +?> + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "<?php echo $rp_name; ?>", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_dt_from: "<?php echo $date_f; ?>", post_dt_to: "<?php echo $date_t; ?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_002_his_pdf.php b/reports/rep_002_his_pdf.php new file mode 100644 index 0000000..1b20f19 --- /dev/null +++ b/reports/rep_002_his_pdf.php @@ -0,0 +1,168 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +unset($rapHisArray); +$rapHisArray = sqlGetResAsArray("select * from softspm_rep.rep_002_history_saved where DHS_REPORT_NAME='".$_GET['rp']."' order by DHS_ID"); + +unset($_SESSION['from']); +unset($_SESSION['to']); +$_SESSION['from'] = $rapHisArray[0]['DHS_DATE_FROM']; +$_SESSION['to'] = $rapHisArray[0]['DHS_DATE_TO']; + +mysql_close($con); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 11); + $title = iconv('utf-8','windows-1250','Wykaz pracy studni za okres od: '.$_SESSION['from'].' do: '.$_SESSION['to']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(35,5,iconv('utf-8','windows-1250','Agregat'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Moc [kW]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Czas pracy [h]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Ilość wody [m3]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Q [m3/min]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','HST0 [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','HD [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Temp. [C]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Cl [mg/l]'),1,0,'C'); + $this->Ln(); + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); + +$pdf -> SetFont('calibri', '', 9); +$bariera = ""; +$licznik_bariera=0; +$bariera_woda=0; +$calosc_woda=0; + +for($i=0;$i<count($rapHisArray);$i++) +{ + + if ($bariera!=$rapHisArray[$i]['DHS_BARIERA']) + { + if ($licznik_bariera>0) + { + $pdf -> SetFont('Calibri_b', '', 8); + $pdf->Cell(95,5,iconv('utf-8','windows-1250','Razem bariera '.$bariera.':'),1,0,'L'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',round($bariera_woda,0)),1,0,'R'); + $pdf->Ln(); + $pdf->Ln(); + + $bariera_woda=0; + } + + + $pdf -> SetFont('calibri', '', 8); + $pdf->Cell(0,5,iconv('utf-8','windows-1250','Bariera '.$rapHisArray[$i]['DHS_BARIERA']),1,0,'L'); + $pdf->Ln(); + + + $bariera=$rapHisArray[$i]['DHS_BARIERA']; + $licznik_bariera++; + } + + if ($rapHisArray[$i]['DHS_WORK_TIME_VAL']>0) $rapHisArray[$i]['DHS_WORK_TIME_VAL'] = round($rapHisArray[$i]['DHS_WORK_TIME_VAL'],0); + else $rapHisArray[$i]['DHS_WORK_TIME_VAL']=''; + + if ($rapHisArray[$i]['DHS_HST0_VAL']>0) $rapHisArray[$i]['DHS_HST0_VAL'] = round($rapHisArray[$i]['DHS_HST0_VAL'],1); + else $rapHisArray[$i]['DHS_HST0_VAL']=''; + + if ($rapHisArray[$i]['DHS_HD_VAL']>0) $rapHisArray[$i]['DHS_HD_VAL'] = round($rapHisArray[$i]['DHS_HD_VAL'],1); + else $rapHisArray[$i]['DHS_HD_VAL']=''; + + if ($rapHisArray[$i]['DHS_P_VAL']>0) $rapHisArray[$i]['DHS_P_VAL'] = round($rapHisArray[$i]['DHS_P_VAL'],1); + else $rapHisArray[$i]['DHS_P_VAL']=''; + + if ($rapHisArray[$i]['DHS_VM3_VAL']>0) $rapHisArray[$i]['DHS_VM3_VAL'] = round($rapHisArray[$i]['DHS_VM3_VAL'],0); + else $rapHisArray[$i]['DHS_VM3_VAL']=null; + + + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$i+1),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_WELL']),1,0,'C'); + $pdf->Cell(35,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_AGREGAT']),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_P_VAL']),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_WORK_TIME_VAL']),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_VM3_VAL']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_QS_VAL']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_HST0_VAL']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_HD_VAL']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_WTEMP_VAL']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$rapHisArray[$i]['DHS_CL_VAL']),1,0,'R'); + $pdf->Ln(); + + + $bariera_woda+= (float) $rapHisArray[$i]['DHS_VM3_VAL']; + $calosc_woda += (float) $rapHisArray[$i]['DHS_VM3_VAL']; +} + +$pdf -> SetFont('Calibri_b', '', 8); +$pdf->Cell(117,5,iconv('utf-8','windows-1250','Razem bariera '.$bariera.':'),1,0,'L'); +$pdf->Cell(40,5,iconv('utf-8','windows-1250',round($bariera_woda,0)),1,0,'R'); +$pdf->Ln(); +$pdf->Ln(); + +$pdf -> SetFont('Calibri_b', '', 9); +$pdf->Cell(117,6,iconv('utf-8','windows-1250','Razem wszystkie studnie:'),1,0,'L'); +$pdf->Cell(40,6,iconv('utf-8','windows-1250',round($calosc_woda,0)),1,0,'R'); +$pdf->Ln(); + + +$pdf->Output(); +?> + + diff --git a/reports/rep_002_his_xls.php b/reports/rep_002_his_xls.php new file mode 100644 index 0000000..c0b7524 --- /dev/null +++ b/reports/rep_002_his_xls.php @@ -0,0 +1,138 @@ +<?php session_start(); + +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +unset($rapHisArray); +$rapHisArray = sqlGetResAsArray("select * from softspm_rep.rep_002_history_saved where DHS_REPORT_NAME='".$_GET['rp']."' order by DHS_ID"); + +unset($_SESSION['from']); +unset($_SESSION['to']); + +$_SESSION['from'] = $rapHisArray[0]['DHS_DATE_FROM']; +$_SESSION['to'] = $rapHisArray[0]['DHS_DATE_TO']; + +mysql_close($con); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_wykaz_pracy_studni.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:K1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:K1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz pracy studni '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock']) ); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:K2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Okres rozliczeniowy od '.$_SESSION['from'].' do '.$_SESSION['to']); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Agregat pompowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Moc silnika [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Czas pracy [h]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Ilość wypompowanej wody [m3]'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Wydajność średnia [m3/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Zwierciadło statyczne [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Zwierciadło dynamiczne [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Temperatura wody [C]'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Stężenie chlorków'); + + +$bariera = ""; +$licznik_bariera=0; +$bariera_woda=0; +$calosc_woda=0; + +$kolumna = 4; + +for($i=0;$i<count($rapHisArray);$i++) +{ + if ($bariera!=$rapHisArray[$i]['DHS_BARIERA']) + { + if ($licznik_bariera>0) + { + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':E'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->getStyle('A'.($kolumna+$i).':F'.($kolumna+$i))->applyFromArray($styleArray1); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Razem bariera '.$bariera.':'); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), round($bariera_woda,0)); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('G'.($kolumna+$i).':K'.($kolumna+$i)); + + $kolumna++; + $bariera_woda=0; + $kolumna++; + } + + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':K'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera '.$rapHisArray[$i]['DHS_BARIERA']); + $kolumna++; + + $bariera=$rapHisArray[$i]['DHS_BARIERA']; + $licznik_bariera++; + } + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $rapHisArray[$i]['DHS_WELL']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $rapHisArray[$i]['DHS_AGREGAT']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $rapHisArray[$i]['DHS_P_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $rapHisArray[$i]['DHS_WORK_TIME_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $rapHisArray[$i]['DHS_VM3_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $rapHisArray[$i]['DHS_QS_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $rapHisArray[$i]['DHS_HST0_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $rapHisArray[$i]['DHS_HD_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $rapHisArray[$i]['DHS_WTEMP_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $rapHisArray[$i]['DHS_CL_VAL']); + + $bariera_woda+= (float) $rapHisArray[$i]['DHS_VM3_VAL']; + $calosc_woda += (float) $rapHisArray[$i]['DHS_VM3_VAL']; +} + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':E'.($kolumna+$i)); +$objPHPExcel->getActiveSheet()->getStyle('A'.($kolumna+$i).':F'.($kolumna+$i))->applyFromArray($styleArray1); +$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Razem bariera '.$bariera.':'); +$objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), round($bariera_woda,0)); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('G'.($kolumna+$i).':K'.($kolumna+$i)); +$kolumna++; +$kolumna++; + +unset($styleArray); +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 12, + 'color' => array('rgb' => '0000CD') + )); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':E'.($kolumna+$i)); +$objPHPExcel->getActiveSheet()->getStyle('A'.($kolumna+$i).':F'.($kolumna+$i))->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Razem wszystkie studnie:'); +$objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), round($calosc_woda,0)); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('G'.($kolumna+$i).':K'.($kolumna+$i)); + + +$objPHPExcel->getActiveSheet()->setTitle('Wykaz pracy studni'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_002_list_print.php b/reports/rep_002_list_print.php new file mode 100644 index 0000000..93e52be --- /dev/null +++ b/reports/rep_002_list_print.php @@ -0,0 +1,222 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + <link rel="stylesheet" href="../style/sweetalert.css"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + <script src="../js/sweetalert.min.js"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +$tbaName = "rep_002_data_list"; +$last_day = date("t", strtotime("2016-11-".date('d'))); + +if ($_POST['subReset']=='Resetuj') +{ + unset($_POST['from_date']); + unset($_POST['to_date']); +} + +if (empty($_POST['from_date'])) $_POST['from_date'] = '01'; +if (empty($_POST['to_date'])) $_POST['to_date'] = '30'; + + +?> + +<form action="./rep_002_list_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz pracy studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Miesiąc:</div> + <input class="form-control" type="text" value="Listopad" readonly="readonly"> + </div> + + </div> + + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień od:</div> + <select class="form-control" id="from_date" name="from_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['from_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień do:</div> + <select class="form-control" id="to_date" name="to_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['to_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + </div> + + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_002_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_002_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + +</form> + + +<?php +//październik +if ($_POST['isGenerate']=='ok') +{ + $date_f = "2016-11-".$_POST['from_date']." 00:00:00"; + $date_t = "2016-11-".$_POST['to_date']." 23:59:59"; +} + +unset($rp_name); +if (str_replace(array('-',' ',':'), array('','',''), $date_f) > str_replace(array('-',' ',':'), array('','',''), $date_t)) +{ + $rp_name = "nie ma takiego"; + echo('<script>sweetAlert("Uwaga!", "Operacja niemożliwa! Dzień DO jest większy od dnia OD. \n Spróbuj ponownie.", "warning");</script>'); +} +else $rp_name = "rep002"; + + +?> + + + +<?php +mysql_close($polacz); +?> + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "<?php echo $rp_name; ?>", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_dt_from: "<?php echo $date_f; ?>", post_dt_to: "<?php echo $date_t; ?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_002_pazd_print.php b/reports/rep_002_pazd_print.php new file mode 100644 index 0000000..302ce8e --- /dev/null +++ b/reports/rep_002_pazd_print.php @@ -0,0 +1,223 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + <link rel="stylesheet" href="../style/sweetalert.css"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + <script src="../js/sweetalert.min.js"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +$tbaName = "rep_002_data_pazd"; +$last_day = date("t", strtotime("2016-10-".date('d'))); + +if ($_POST['subReset']=='Resetuj') +{ + unset($_POST['from_date']); + unset($_POST['to_date']); +} + +if (empty($_POST['from_date'])) $_POST['from_date'] = '01'; +if (empty($_POST['to_date'])) $_POST['to_date'] = '31'; + + +?> + +<form action="./rep_002_pazd_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz pracy studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Miesiąc:</div> + <input class="form-control" type="text" value="Październik" readonly="readonly"> + </div> + + </div> + + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień od:</div> + <select class="form-control" id="from_date" name="from_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['from_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień do:</div> + <select class="form-control" id="to_date" name="to_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['to_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + </div> + + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_002_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_002_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + +</form> + + +<?php +//październik +if ($_POST['isGenerate']=='ok') +{ + $date_f = "2016-10-".$_POST['from_date']." 00:00:00"; + $date_t = "2016-10-".$_POST['to_date']." 23:59:59"; + +} + +unset($rp_name); +if (str_replace(array('-',' ',':'), array('','',''), $date_f) > str_replace(array('-',' ',':'), array('','',''), $date_t)) +{ + $rp_name = "nie ma takiego"; + echo('<script>sweetAlert("Uwaga!", "Operacja niemożliwa! Dzień DO jest większy od dnia OD. \n Spróbuj ponownie.", "warning");</script>'); +} +else $rp_name = "rep002"; + + +?> + + + +<?php +mysql_close($polacz); +?> + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "<?php echo $rp_name; ?>", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_dt_from: "<?php echo $date_f; ?>", post_dt_to: "<?php echo $date_t; ?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_002_pdf.php b/reports/rep_002_pdf.php new file mode 100644 index 0000000..b22a71e --- /dev/null +++ b/reports/rep_002_pdf.php @@ -0,0 +1,137 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 11); + $title = iconv('utf-8','windows-1250','Wykaz pracy studni za okres od: '.$_SESSION['rap002_array'][0]['date_from'].' do: '.$_SESSION['rap002_array'][0]['date_to']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(35,5,iconv('utf-8','windows-1250','Agregat'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Moc [kW]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Czas pracy [h]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Ilość wody [m3]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Q [m3/min]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','HST0 [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','HD [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Temp. [C]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Cl [mg/l]'),1,0,'C'); + $this->Ln(); + + //str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock']) + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); + +$pdf -> SetFont('calibri', '', 9); +$bariera = ""; +$licznik_bariera=0; +$bariera_woda=0; +$calosc_woda=0; + +for($i=0;$i<count($_SESSION['rap002_array']);$i++) +{ + + if ($bariera!=$_SESSION['rap002_array'][$i]['bariera']) + { + if ($licznik_bariera>0) + { + $pdf -> SetFont('Calibri_b', '', 8); + $pdf->Cell(95,5,iconv('utf-8','windows-1250','Razem bariera '.$bariera.':'),1,0,'L'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',round($bariera_woda,0)),1,0,'R'); + $pdf->Ln(); + $pdf->Ln(); + + $bariera_woda=0; + } + + + $pdf -> SetFont('calibri', '', 8); + $pdf->Cell(0,5,iconv('utf-8','windows-1250','Bariera '.$_SESSION['rap002_array'][$i]['bariera']),1,0,'L'); + $pdf->Ln(); + + + $bariera=$_SESSION['rap002_array'][$i]['bariera']; + $licznik_bariera++; + } + + + + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$i+1),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['studnia']),1,0,'C'); + $pdf->Cell(35,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['agregat']),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['moc']),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['czas_pracy']),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['il_wody']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['srednia_q']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['hst0']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['hd']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['temp_wody']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rap002_array'][$i]['chlorki']),1,0,'R'); + $pdf->Ln(); + + + $bariera_woda+= (float) $_SESSION['rap002_array'][$i]['il_wody']; + $calosc_woda += (float) $_SESSION['rap002_array'][$i]['il_wody']; +} + +$pdf -> SetFont('Calibri_b', '', 8); +$pdf->Cell(117,5,iconv('utf-8','windows-1250','Razem bariera '.$bariera.':'),1,0,'L'); +$pdf->Cell(40,5,iconv('utf-8','windows-1250',round($bariera_woda,0)),1,0,'R'); +$pdf->Ln(); +$pdf->Ln(); + +$pdf -> SetFont('Calibri_b', '', 9); +$pdf->Cell(117,6,iconv('utf-8','windows-1250','Razem wszystkie studnie:'),1,0,'L'); +$pdf->Cell(40,6,iconv('utf-8','windows-1250',round($calosc_woda,0)),1,0,'R'); +$pdf->Ln(); + + +$pdf->Output(); +?> + + diff --git a/reports/rep_002_print.php b/reports/rep_002_print.php new file mode 100644 index 0000000..f0ad171 --- /dev/null +++ b/reports/rep_002_print.php @@ -0,0 +1,218 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + <link rel="stylesheet" href="../style/sweetalert.css"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + <script src="../js/sweetalert.min.js"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +unset($_SESSION['rap002_array']); +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php + +if ($_POST['subReset']=='Resetuj') +{ + unset($_POST['from_date']); + unset($_POST['to_date']); +} + +if (empty($_POST['from_date'])) $_POST['from_date'] = date('Y-m')."-01"; +if (empty($_POST['to_date'])) $_POST['to_date'] = date('Y-m-d'); + + +?> + +<form action="./rep_002_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz pracy studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień od:</div> + <input class="datepicker form-control" name="from_date" value="<?php echo $_POST['from_date']; ?> "> + </div> + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień do:</div> + <input class="datepicker form-control" name="to_date" value="<?php echo $_POST['to_date']; ?> "> + </div> + </div> + + + + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_002_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_002_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <button id="butSave" type="button" class="btn btn-primary" value="Zapisz do archiwum">Zapisz do archiwum &nbsp;&nbsp;<span class="glyphicon glyphicon-share" aria-hidden="true"></span></button> + + + + </div> +</div> + +</form> + + +<?php +//grudzień +if ($_POST['isGenerate']=='ok') +{ + $date_f = $_POST['from_date']." 00:00:00"; + $date_t = $_POST['to_date']." 23:59:59"; +} + +unset($rp_name); +if (str_replace(array('-',' ',':'), array('','',''), $date_f) > str_replace(array('-',' ',':'), array('','',''), $date_t)) +{ + $rp_name = "nie ma takiego"; + echo('<script>sweetAlert("Uwaga!", "Operacja niemożliwa! Dzień DO jest większy od dnia OD. \n Spróbuj ponownie.", "warning");</script>'); +} +else $rp_name = "rep002"; + + + + +?> + + + +<?php +mysql_close($polacz); +?> + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + $('#butSave').prop('disabled', true); + + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "<?php echo $rp_name; ?>", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_dt_from: "<?php echo $date_f; ?>", post_dt_to: "<?php echo $date_t; ?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + $('#butSave').prop('disabled', false); + + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + + $('.datepicker').datepicker({ + format: 'yyyy-mm-dd', + weekStart: 1 + }); + + + $('#butSave').click(function() { + + $('#loader').show(); + $.post( "./ajax_gen_reports.php", { post_action: "save_rep2", done: "create"}).done(function(data) + { + $('#loader').hide(); + $('#save_report').html(data); + //sweetAlert("Zapisano!", "Wygenerowany raport został zapisany i jest dostępny w archiwum.", "success"); + } + ); + }); + + + + + + + </script> + + + +<div id="main_table"></div> +<div id="save_report"></div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_002_print_.php b/reports/rep_002_print_.php new file mode 100644 index 0000000..e0f5431 --- /dev/null +++ b/reports/rep_002_print_.php @@ -0,0 +1,221 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + <link rel="stylesheet" href="../style/sweetalert.css"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + <script src="../js/sweetalert.min.js"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +$tbaName = "rep_002_data_styc"; +$dateTo = sqlStringValue("select max(RHD_DATE) DT from softspm_rep.".$tbaName, "DT"); +$last_day = date("t", strtotime(date('Y')."-01-".date('d'))); + +if ($_POST['subReset']=='Resetuj') +{ + unset($_POST['from_date']); + unset($_POST['to_date']); +} + +if (empty($_POST['from_date'])) $_POST['from_date'] = '01'; +if (empty($_POST['to_date'])) $_POST['to_date'] = date('d'); + + +?> + +<form action="./rep_002_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz pracy studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Miesiąc:</div> + <input class="form-control" type="text" value="Styczeń" readonly="readonly"> + </div> + </div> + + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień od:</div> + <select class="form-control" id="from_date" name="from_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['from_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Dzień do:</div> + <select class="form-control" id="to_date" name="to_date"> + <?php + for ($i=1; $i<=$last_day; $i++) + { + if ($i<10) $ii='0'.$i; + else $ii=$i; + + if ($_POST['to_date']==$ii) + echo"<option value='".$ii."' selected>".$ii."</option>"; + else + echo"<option value='".$ii."'>".$ii."</option>"; + } + ?> + </select> + </div> + </div> + + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();"><?php echo $lab_ButtonName_Print; ?> &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_002_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_002_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + +</form> + + +<?php +//grudzień +if ($_POST['isGenerate']=='ok') +{ + $date_f = date('Y')."-01-".$_POST['from_date']." 00:00:00"; + $date_t = date('Y')."-01-".$_POST['to_date']." 23:59:59"; +} + +unset($rp_name); +if (str_replace(array('-',' ',':'), array('','',''), $date_f) > str_replace(array('-',' ',':'), array('','',''), $date_t)) +{ + $rp_name = "nie ma takiego"; + echo('<script>sweetAlert("Uwaga!", "Operacja niemożliwa! Dzień DO jest większy od dnia OD. \n Spróbuj ponownie.", "warning");</script>'); +} +else $rp_name = "rep002"; + + +?> + + + +<?php +mysql_close($polacz); +?> + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "<?php echo $rp_name; ?>", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_dt_from: "<?php echo $date_f; ?>", post_dt_to: "<?php echo $date_t; ?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_002_wrze_print.php b/reports/rep_002_wrze_print.php new file mode 100644 index 0000000..27f1fe8 --- /dev/null +++ b/reports/rep_002_wrze_print.php @@ -0,0 +1,236 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + <script src="./jquery.min.js"></script> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + + +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz pracy studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + Za okres od:<b> <?php echo sqlStringValue("select min(RHD_DATE) DT from softspm_rep.rep_002_data_wrze", "DT"); ?></b> do: <b><?php echo sqlStringValue("select max(RHD_DATE) DT from softspm_rep.rep_002_data_wrze", "DT");?> </b> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="./rep_002_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="./rep_002_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Agregat pompowy <br/> [pompa / silnik]</th> + <th>Moc silnika <br/> [kW]</th> + <th>Czas pracy <br/> [h]</th> + <th>Ilość wypompowanej wody <br/> [m<sup>3</sup>]</th> + <th>Wydajność średnia <br/> [m<sup>3</sup>/min]</th> + <th>Zwierciadło statyczne <br/> [m]</th> + <th>Zwierciadło dynamiczne <br/> [m]</th> + <th>Temperatura wody <br/> [<sup>o</sup>C]</th> + <th>Stężenie chlorków</th> + <th>Kategoria</th> + + </tr> + </thead> + +<?php + unset($rep002Array); + $rep002Array = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,DRS_DEPARTMENT from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>'2016-09-01') and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + + + //print_r($rep001Array); +?> + +<?php + +unset($res); +unset($_SESSION['rap002_array']); + +$bariera = ""; +$licznik_bariera=0; +$bariera_woda=0; +$calosc_woda=0; + +for($i=0;$i<count($rep002Array);$i++) +{ + if ($bariera!=$rep002Array[$i]['WLL_BARIERA']) + { + if ($licznik_bariera>0) + { + echo"<tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='5'>Razem bariera: ".$bariera."</td> + <td style='font-weight: bolder;'>".round(getFloatValue($bariera_woda),0)."</td> + <td colspan='6'></td> + </tr>"; + echo"<tr><td colspan='12'></td></tr>"; + $bariera_woda=0; + } + + echo"<tr style='font-weight: bolder; background-color: #DCDCDC;'><td colspan='14'>Bariera: ".$rep002Array[$i]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep002Array[$i]['WLL_BARIERA']; + $licznik_bariera++; + } + + unset($mocSilnika); + $mocSilnika = sqlStringValue("select ENG_POWER from seg_engines,seg_dev_resources where DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 and ENG_NAME='".$rep002Array[$i]['WLE_ENG_NAME']."' and DRS_SN_NUMBER='".$rep002Array[$i]['WLE_ENG_NO']."'", "ENG_POWER"); + + //czas pracy + unset($minTime);unset($maxTime);unset($valTime);unset($finDate); unset($valTime);unset($valHst0);unset($valHdTw);unset($valClor); unset($valVm3); unset($minVpup); unset($maxVpup); + + if (strlen($rep002Array[$i]['WLE_DATE_TO'])>8) + $finDate = $rep002Array[$i]['WLE_DATE_TO']; + else $finDate = '2016-09-30 23:59:59'; + + // sprawdza dla zwierciadła statyczniego warunek na daty + unset($hst0Date); + if (cdt($rep002Array[$i]['WLE_DATE_FROM'])>cdt('2016-10-01 00:00:00')) + $hst0Date = $rep002Array[$i]['WLE_DATE_FROM']; + else $hst0Date = '2016-10-01 00:00:00'; + + + + if (strlen($rep002Array[$i]['WLE_DATE_TO'])>8) + { + //) + $valTmVm = sqlGetResAsArray("select (max(RHD_WORK_TIME_VAL) - min(RHD_WORK_TIME_VAL)) WRTM, (max(RHD_VM3_VAL) - min(RHD_VM3_VAL)) VM3 from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']); + $valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$hst0Date."' and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')"); + $valHdTw = sqlGetResAsArray("select RHD_HD_VAL,RHD_WTEMP_VAL from softspm_rep.rep_002_data_wrze where RHD_ID=(select MAX(RHD_ID) from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_HD_VAL>0 and RHD_WTEMP_VAL>0)"); + $valClor = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=719 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')"); + + $valTime = $valTmVm[0]['WRTM']; + $valVm3 = $valTmVm[0]['VM3']; + + } + else + { + $valTmVm = sqlGetResAsArray("select (max(RHD_WORK_TIME_VAL) - min(RHD_WORK_TIME_VAL)) WRTM, (max(RHD_VM3_VAL) - min(RHD_VM3_VAL)) VM3 from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']); + $valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$hst0Date."')"); + $valHdTw = sqlGetResAsArray("select RHD_HD_VAL,RHD_WTEMP_VAL from softspm_rep.rep_002_data_wrze where RHD_ID=(select MAX(RHD_ID) from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_HD_VAL>0 and RHD_WTEMP_VAL>0)"); + $valClor = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=719 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."')"); + + $valTime = $valTmVm[0]['WRTM']; + $valVm3 = $valTmVm[0]['VM3']; + } + + + + unset($qSred); + if ($valTime>0) + $qSred = (float) ($valVm3/$valTime); + + if ($valClor[0]['DRD_VALUE']>0) $valClor=$valClor[0]['DRD_VALUE']; + else $valClor=""; + + + echo" + <tr> + <td>".($i+1).".</td> + <td>".$rep002Array[$i]['WLL_NAME']."</td> + <td>".$rep002Array[$i]['WLE_PUMP_NAME']." / ".$rep002Array[$i]['WLE_ENG_NAME']."</td> + + <td>".round(getFloatValue($mocSilnika),1)."</td> + <td>".round(getFloatValue($valTime),0)."</td> + <td>".round(getFloatValue($valVm3),0)."</td> + <td>".round($qSred/60,3)."</td> + <td>".$valHst0[0]['DRD_VALUE']."</td> + <td>".$valHdTw[0]['RHD_HD_VAL']."</td> + <td>".$valHdTw[0]['RHD_WTEMP_VAL']."</td> + <td>".$valClor."</td> + <td>".setDicName($rep002Array[$i]['WLL_CAT_DIC_ID'])."</td> + + </tr> + "; + + $res[]=array( + 'id' => $rep002Array[$i]['DRS_ID'], + 'bariera' => $rep002Array[$i]['WLL_BARIERA'], + 'studnia' => $rep002Array[$i]['WLL_NAME'], + 'agregat' => $rep002Array[$i]['WLE_PUMP_NAME']." / ".$rep002Array[$i]['WLE_ENG_NAME'], + 'moc' => round(getFloatValue($mocSilnika),1), + 'czas_pracy' => round(getFloatValue($valTime),0), + 'il_wody' => getFloatValue($valVm3), + 'srednia_q' => round($qSred/60,3), + 'hst0' => $valHst0[0]['DRD_VALUE'], + 'hd' => $valHdTw[0]['RHD_HD_VAL'], + 'temp_wody' => $valHdTw[0]['RHD_WTEMP_VAL'], + 'chlorki' => $valClor + ); + + + + $bariera_woda+= (float) $valVm3; + $calosc_woda += (float) $valVm3; +} + + unset($_SESSION['rap002_array']); + $_SESSION['rap002_array']=$res; + +echo"<tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='5'>Razem bariera: ".$bariera."</td> + <td style='font-weight: bolder;'>".round(getFloatValue($bariera_woda),0)."</td> + <td colspan='6'></td> + </tr>"; + + +echo"<tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='5'>Razem wszystkie studnie:</td> + <td style='font-weight: bolder;'>".round(getFloatValue($calosc_woda),0)."</td> + <td colspan='6'></td> + </tr>"; + + +?> +</table> + + +<?php +mysql_close($polacz); + +?> + + <script src="./bootstrap.min.js"></script> +</body> +</html> diff --git a/reports/rep_002_xls.php b/reports/rep_002_xls.php new file mode 100644 index 0000000..08525ca --- /dev/null +++ b/reports/rep_002_xls.php @@ -0,0 +1,120 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_wykaz_pracy_studni.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:K1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:K1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz pracy studni '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock']) ); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:K2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Okres rozliczeniowy od '.$_SESSION['rap002_array'][0]['date_from'].' do '.$_SESSION['rap002_array'][0]['date_to']); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Agregat pompowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Moc silnika [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Czas pracy [h]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Ilość wypompowanej wody [m3]'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Wydajność średnia [m3/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Zwierciadło statyczne [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Zwierciadło dynamiczne [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Temperatura wody [C]'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Stężenie chlorków'); + + +$bariera = ""; +$licznik_bariera=0; +$bariera_woda=0; +$calosc_woda=0; + +$kolumna = 4; + +for($i=0;$i<count($_SESSION['rap002_array']);$i++) +{ + if ($bariera!=$_SESSION['rap002_array'][$i]['bariera']) + { + if ($licznik_bariera>0) + { + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':E'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->getStyle('A'.($kolumna+$i).':F'.($kolumna+$i))->applyFromArray($styleArray1); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Razem bariera '.$bariera.':'); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), round($bariera_woda,0)); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('G'.($kolumna+$i).':K'.($kolumna+$i)); + + $kolumna++; + $bariera_woda=0; + $kolumna++; + } + + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':K'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera '.$_SESSION['rap002_array'][$i]['bariera']); + $kolumna++; + + $bariera=$_SESSION['rap002_array'][$i]['bariera']; + $licznik_bariera++; + } + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rap002_array'][$i]['studnia']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rap002_array'][$i]['agregat']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rap002_array'][$i]['moc']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rap002_array'][$i]['czas_pracy']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $_SESSION['rap002_array'][$i]['il_wody']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $_SESSION['rap002_array'][$i]['srednia_q']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $_SESSION['rap002_array'][$i]['hst0']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $_SESSION['rap002_array'][$i]['hd']); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $_SESSION['rap002_array'][$i]['temp_wody']); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $_SESSION['rap002_array'][$i]['chlorki']); + + $bariera_woda+= (float) $_SESSION['rap002_array'][$i]['il_wody']; + $calosc_woda += (float) $_SESSION['rap002_array'][$i]['il_wody']; +} + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':E'.($kolumna+$i)); +$objPHPExcel->getActiveSheet()->getStyle('A'.($kolumna+$i).':F'.($kolumna+$i))->applyFromArray($styleArray1); +$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Razem bariera '.$bariera.':'); +$objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), round($bariera_woda,0)); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('G'.($kolumna+$i).':K'.($kolumna+$i)); +$kolumna++; +$kolumna++; + +unset($styleArray); +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 12, + 'color' => array('rgb' => '0000CD') + )); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':E'.($kolumna+$i)); +$objPHPExcel->getActiveSheet()->getStyle('A'.($kolumna+$i).':F'.($kolumna+$i))->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Razem wszystkie studnie:'); +$objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), round($calosc_woda,0)); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('G'.($kolumna+$i).':K'.($kolumna+$i)); + + +$objPHPExcel->getActiveSheet()->setTitle('Wykaz pracy studni'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_003_hours.bat b/reports/rep_003_hours.bat new file mode 100644 index 0000000..5a303d1 --- /dev/null +++ b/reports/rep_003_hours.bat @@ -0,0 +1,13 @@ +@echo off +set "PHP_PATH=C:\Programy\xampp_old\php\php.exe" +set "SCRIPT_PATH=C:\\Programy\\xampp_old\\htdocs\\trzeciTestowy\\reports\\rep_003_hours.php" + +echo Uruchamiam raport dla dep=B +"%PHP_PATH%" -r "parse_str('dep=B', $_GET); include '%SCRIPT_PATH%';" + +echo Uruchamiam raport dla dep=S +"%PHP_PATH%" -r "parse_str('dep=S', $_GET); include '%SCRIPT_PATH%';" + +echo Uruchamiam raport dla dep=D +"%PHP_PATH%" -r "parse_str('dep=D', $_GET); include '%SCRIPT_PATH%';" + diff --git a/reports/rep_003_hours.php b/reports/rep_003_hours.php new file mode 100644 index 0000000..4edb813 --- /dev/null +++ b/reports/rep_003_hours.php @@ -0,0 +1,241 @@ +<?php session_start();?> +<?php +//require_once'../func.php'; +//require_once'../dbaccess.php'; + +require_once'c:/Programy/xampp_old/htdocs/trzeciTestowy/func.php'; +require_once'c:/Programy/xampp_old/htdocs/trzeciTestowy/dbaccess.php'; + + +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' ',':'), array('','',''), $inDate); + return $out; +} + +function quarter($dateIn, $tbName) +{ + unset($outParam); unset($fix); + + if (substr($dateIn, 0,4)!=date('Y')) + { + // jeśli data jest sprzed 2014 roku + if (substr($dateIn, 0,4)<2014) + $dateIn = str_replace(substr($dateIn, 0,4), 2014, $dateIn); + + if (substr($dateIn, 5,2)=='01' || substr($dateIn, 5,2)=='02' || substr($dateIn, 5,2)=='03') $fix='q1'; + elseif (substr($dateIn, 5,2)=='04' || substr($dateIn, 5,2)=='05' || substr($dateIn, 5,2)=='06') $fix='q2'; + elseif (substr($dateIn, 5,2)=='07' || substr($dateIn, 5,2)=='08' || substr($dateIn, 5,2)=='09') $fix='q3'; + elseif (substr($dateIn, 5,2)=='10' || substr($dateIn, 5,2)=='11' || substr($dateIn, 5,2)=='12') $fix='q4'; + + $outParam = "softspm_his.".$tbName."_".substr($dateIn, 0,4)."_".$fix; + } + else + $outParam = $tbName; + + return $outParam; +} + + +$newline = php_sapi_name() === 'cli' ? PHP_EOL : '<br/>'; + +?> + +<?php + +if (!empty($_GET['dep'])) +{ + if (strtoupper($_GET['dep'])=="B") $_POST['dep'] = 'P/Bełchatów'; + elseif (strtoupper($_GET['dep'])=="D") $_POST['dep'] = 'Dębina'; + else $_POST['dep'] = 'P/Szczerców'; +} +$_POST['post_date'] = date('Y-m-d H:i:s'); +$rap_timestmp = date('YmdHis'); + + +echo 'post_date: '.$_POST['post_date'].''.$newline; +echo 'dep: '.$_POST['dep'].''.$newline; + + + $tbaName = getTableNameFrom_everyday_his($_POST['post_date']); + + //2018-04-03 + // warunke na nowe agregaty + + + // Przygotowanie danych + // ==================================== ==================================== ==================================== ==================================== + mysql_query("drop temporary table if exists softspm_rep.rap_".$rap_timestmp."_1"); + mysql_query("CREATE temporary TABLE softspm_rep.rap_".$rap_timestmp."_1 (WLL_ID int(11) DEFAULT NULL,DRS_ID int(11) unsigned NOT NULL DEFAULT '0',WLL_BARIERA varchar(32) DEFAULT NULL,WLL_NAME varchar(255) DEFAULT NULL,WWD_ID int(11) DEFAULT NULL,WWD_PARENT_ID int(11) DEFAULT NULL,WWD_NAME varchar(255) DEFAULT NULL,WLL_CAT_DIC_ID int(11) DEFAULT NULL,Q_H float(9,2) DEFAULT NULL,Q_MIN float(9,3) DEFAULT NULL,DRS_DEPARTMENT varchar(255) DEFAULT NULL,WLL_AUDIT_CD datetime DEFAULT NULL,PRIMARY KEY (DRS_ID)) ENGINE=InnoDB DEFAULT CHARSET=utf8"); + + mysql_query("drop temporary table if exists softspm_rep.rap_".$rap_timestmp."_2"); + mysql_query("CREATE temporary TABLE softspm_rep.rap_".$rap_timestmp."_2 (WLL_ID int(11) DEFAULT NULL,DRS_ID int(11) unsigned NOT NULL DEFAULT '0',WLL_BARIERA varchar(32) DEFAULT NULL,WLL_NAME varchar(255) DEFAULT NULL,WLL_CAT_DIC_ID int(11) DEFAULT NULL,WI1_ID int(11) DEFAULT NULL,PT1_ID int(11) DEFAULT NULL,WI2_ID int(11) DEFAULT NULL,PT2_ID int(11) DEFAULT NULL,WI3_ID int(11) DEFAULT NULL,PT3_ID int(11) DEFAULT NULL,WI4_ID int(11) DEFAULT NULL,PT4_ID int(11) DEFAULT NULL,WI5_ID int(11) DEFAULT NULL,PT5_ID int(11) DEFAULT NULL,WI6_ID int(11) DEFAULT NULL,PT6_ID int(11) DEFAULT NULL,Q_H float(9,2) DEFAULT NULL,Q_MIN float(9,3) DEFAULT NULL,DRS_DEPARTMENT varchar(255) DEFAULT NULL,WLL_AUDIT_CD datetime DEFAULT NULL,PRIMARY KEY (DRS_ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8"); + + unset($rep003Array_01); + //$rep003Array_01 = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_BARIERA,WLL_NAME,WLL_CAT_DIC_ID,WWD_ID,WWD_PARENT_ID,WWD_NAME,DRS_DEPARTMENT from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID left join seg_well_water_drainage on WLD_DRS_ID=DRS_ID left join seg_water_drainage on WLD_WWD_ID=WWD_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>='".$_POST['post_date']."') and WLE_DATE_FROM<='".$_POST['post_date']."' and DRS_DEPARTMENT='".$_POST['dep']."' and getValueInDate(507, DRS_ID, '".$_POST['post_date']."')='ON' order by WLL_BARIERA,WLL_NAME"); + $rep003Array_01 = sqlGetResAsArray("select DRS_ID,(select WLL_ID from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_ID,(select WLL_BARIERA from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_BARIERA,(select WLL_NAME from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_NAME,(select WLL_CAT_DIC_ID from seg_dev_resources tb1, seg_wells tb2 where tb1.DRS_DEV_ID=tb2.WLL_ID and tb1.DRS_DEV_TYPE=12 and tb1.DRS_ID=tb3.DRS_ID limit 1) WLL_CAT_DIC_ID,WWD_ID,WWD_PARENT_ID,WWD_NAME,DRS_DEPARTMENT from seg_dev_resources tb3,seg_well_water_drainage left join seg_water_drainage on WLD_WWD_ID=WWD_ID where WLD_DRS_ID=tb3.DRS_ID and tb3.DRS_DEPARTMENT='".$_POST['dep']."' and getWellStatusOnOff(tb3.DRS_ID, '".$_POST['post_date']."')='ON' order by WWD_PARENT_ID,WLL_BARIERA,WLL_NAME"); + for($i1=0;$i1<count($rep003Array_01);$i1++) + { + // $rep003Array_01[$i1]['WLL_ID'] + unset($rep003Array_02); + $rep003Array_02 = sqlGetResAsArray("select RHD_Q_VAL, round(RHD_Q_VAL/60,3) Q_MIN from ".$tbaName." where RHD_ID=(select max(RHD_ID) from ".$tbaName." where RHD_DRS_ID=".$rep003Array_01[$i1]['DRS_ID']." and RHD_Q_VAL>0 and RHD_DATE<='".$_POST['post_date']."')"); + + if ($rep003Array_02[0]['RHD_Q_VAL']>0) + { + unset($wwd_id); + if ($rep003Array_01[$i1]['WWD_ID']>0 ) $wwd_id = ",WWD_ID=".$rep003Array_01[$i1]['WWD_ID']; + unset($wwd_parent_id); + if ($rep003Array_01[$i1]['WWD_PARENT_ID']>0 ) $wwd_parent_id = ",WWD_PARENT_ID=".$rep003Array_01[$i1]['WWD_PARENT_ID']; + + mysql_query("INSERT INTO softspm_rep.rap_".$rap_timestmp."_1 SET WLL_ID=".$rep003Array_01[$i1]['WLL_ID'].",DRS_ID=".$rep003Array_01[$i1]['DRS_ID'].",WLL_BARIERA='".$rep003Array_01[$i1]['WLL_BARIERA']."',WLL_NAME='".$rep003Array_01[$i1]['WLL_NAME']."'".$wwd_id.$wwd_parent_id.",WWD_NAME='".$rep003Array_01[$i1]['WWD_NAME']."',WLL_CAT_DIC_ID=".$rep003Array_01[$i1]['WLL_CAT_DIC_ID'].",Q_H=".$rep003Array_02[0]['RHD_Q_VAL'].",Q_MIN=".$rep003Array_02[0]['Q_MIN'].",DRS_DEPARTMENT='".$_POST['dep']."',WLL_AUDIT_CD=now()"); + } + } + + unset($tbArray); + $tbArray = sqlGetResAsArray("select * from softspm_rep.rap_".$rap_timestmp."_1"); + for($i=0; $i<count($tbArray); $i++) + { + unset($tb); + $tb = findTreeLevel($tbArray[$i]['WWD_ID']); + + unset($query); + $query = "INSERT INTO softspm_rep.rap_".$rap_timestmp."_2 SET WLL_ID=".$tbArray[$i]['WLL_ID'].",DRS_ID=".$tbArray[$i]['DRS_ID'].",WLL_BARIERA='".$tbArray[$i]['WLL_BARIERA']."',WLL_NAME='".$tbArray[$i]['WLL_NAME']."',WLL_CAT_DIC_ID=".$tbArray[$i]['WLL_CAT_DIC_ID']; + + if ($tb[0]['id']>0) $query .= ",WI1_ID=".$tb[0]['id']; + if ($tb[0]['par']>0) $query .= ",PT1_ID=".$tb[0]['par']; + + if ($tb[1]['id']>0) $query .= ",WI2_ID=".$tb[1]['id']; + if ($tb[1]['par']>0) $query .= ",PT2_ID=".$tb[1]['par']; + + if ($tb[2]['id']>0) $query .= ",WI3_ID=".$tb[2]['id']; + if ($tb[2]['par']>0) $query .= ",PT3_ID=".$tb[2]['par']; + + if ($tb[3]['id']>0) $query .= ",WI4_ID=".$tb[3]['id']; + if ($tb[3]['par']>0) $query .= ",PT4_ID=".$tb[3]['par']; + + if ($tb[4]['id']>0) $query .= ",WI5_ID=".$tb[4]['id']; + if ($tb[4]['par']>0) $query .= ",PT5_ID=".$tb[4]['par']; + + if ($tb[5]['id']>0) $query .= ",WI6_ID=".$tb[5]['id']; + if ($tb[5]['par']>0) $query .= ",PT6_ID=".$tb[5]['par']; + + $query .=",Q_H=".$tbArray[$i]['Q_H'].",Q_MIN=".$tbArray[$i]['Q_MIN'].",DRS_DEPARTMENT='".$tbArray[$i]['DRS_DEPARTMENT']."',WLL_AUDIT_CD=now()"; + + mysql_query($query); + } + // ==================================== ==================================== ==================================== ==================================== + + echo' + <table class="table table-bordered" > + <thead> + <tr> + <th style="width: 20%">Zrzut</th> + <th style="width: 30%"></th> + <th>[m<sup>3</sup>/min]</th> + <th>[m<sup>3</sup>/h]</th> + </tr> + </thead> + '; + // dopisuje do tablicy + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => 'red', + 'col_1' => 'Grupa', + 'col_2' => 'Bariera', + 'col_3' => 'Studnia', + 'col_4' => '', + 'col_5' => '', + 'col_6' => 'Zrzut [m3/min]', + 'col_7' => 'Zrzut [m3/h]' + ); + // ===================================================== + + + // System + // ========================================================== *** ========================================================== // + echo" + <tr style='font-weight: bolder; background-color: #FF0000; color: #ffffff;'> + <td></td> + <td style='width: 15%;'>SYSTEM</td> + <td></td> + <td></td> + </tr> + "; + // dopisuje do tablicy + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => 'Grupa:', + 'col_2' => 'SYSTEM', + 'col_3' => '', + 'col_4' => '----->', + 'col_5' => 'SYSTEM', + 'col_6' => '', + 'col_7' => '' + ); + // ===================================================== + + + + + $roow=0; $licz_roow=0; $licznik=0; + unset($mainArray01); + $mainArray01 = sqlGetResAsArray("select WI1_ID,sum(Q_MIN) Q_MIN,WWD_NAME from softspm_rep.rap_".$rap_timestmp."_2 left join seg_water_drainage on WI1_ID=WWD_ID group by WI1_ID"); + for($i01=0; $i01<count($mainArray01); $i01++) + { + echo" + <tr> + <td></td> + <td style='font-weight: bolder; background-color: #B22222; color: #ffffff;'>".$mainArray01[$i01]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #B22222; color: #ffffff;'>".$mainArray01[$i01]['Q_MIN']."</td> + <td style='font-weight: bolder; background-color: #B22222; color: #ffffff;'>".($mainArray01[$i01]['Q_MIN'] * 60)."</td> + </tr> + "; + // dopisuje do tablicy + // ===================================================== + $_SESSION['rap003_array'][] = array( + 'znacznik' => '', + 'col_1' => '', + 'col_2' => '', + 'col_3' => $mainArray01[$i01]['WWD_NAME'], + 'col_4' => '', + 'col_5' => '', + 'col_6' => $mainArray01[$i01]['Q_MIN'], + 'col_7' => ($mainArray01[$i01]['Q_MIN'] * 60) + ); + // ===================================================== + + + $licz_roow += $mainArray01[$i01]['Q_MIN']; + } + + + + echo'</table>'; + + + + if (count($mainArray01)) + mysql_query("INSERT INTO softspm.rep_zrzut_wody SET RZW_KRASOWKA='".$mainArray01[0]['Q_MIN']."',RZW_DEPARTMENT='".$_POST['dep']."',RZW_AUDIT_USR='JOB',RZW_AUDIT_DATE='".$_POST['post_date']."'"); + else + mysql_query("INSERT INTO softspm.rep_zrzut_wody SET RZW_WIDAWKA='".$mainArray01[0]['Q_MIN']."',RZW_KRASOWKA='".$mainArray01[1]['Q_MIN']."',RZW_DEPARTMENT='".$_POST['dep']."',RZW_AUDIT_USR='JOB',RZW_AUDIT_DATE='".$_POST['post_date']."'"); + + //mysql_query("UPDATE softspm.rep_zrzut_wody SET RZW_KRASOWKA=RZW_WIDAWKA, RZW_WIDAWKA=NULL WHERE RZW_ID IN(SELECT RZW_ID from softspm.rep_zrzut_wody WHERE RZW_WIDAWKA>0 AND (RZW_KRASOWKA=0 OR RZW_KRASOWKA IS NULL))"); + + mysql_query("drop temporary table if exists softspm_rep.rap_".$rap_timestmp."_1"); + mysql_query("drop temporary table if exists softspm_rep.rap_".$rap_timestmp."_2"); + + +// ================================================================================================================================== + + + +mysql_close($con); +?> diff --git a/reports/rep_003_pdf.php b/reports/rep_003_pdf.php new file mode 100644 index 0000000..df48993 --- /dev/null +++ b/reports/rep_003_pdf.php @@ -0,0 +1,110 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 11); + $title = iconv('utf-8','windows-1250','Zrzut wody na odprowadzalniki na dzień: '.$_SESSION['rap003_array_date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + + $this -> SetFont('calibri', '', 6); + //$this->Cell(40,5,iconv('utf-8','windows-1250','Grupa'),1,0,'C'); + $this->Cell(45,5,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(45,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(40,5,iconv('utf-8','windows-1250',''),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Zrzut [m3/min]'),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Zrzut [m3/h]'),1,0,'C'); + + $this->Ln(); + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); + + + +for($i=1;$i<count($_SESSION['rap003_array']);$i++) +{ + $pdf -> SetFont('calibri', '', 6); + + if (iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1'])== 'Grupa:') + { + $pdf -> SetFont('Calibri_b', '', 6); + //$pdf->Cell(40,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1']),1,0,'L'); + $pdf->Cell(90,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_2']),1,0,'L'); + $pdf->Cell(40,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_4'].' '.$_SESSION['rap003_array'][$i]['col_5']),1,0,'L'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_6']),1,0,'L'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_7']),1,0,'L'); + $pdf->Ln(); + } + elseif (iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1'])=='Razem grupa:') + { + $pdf -> SetFont('Calibri_b', '', 6); + //$pdf->Cell(160,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1']),1,0,'L'); + $pdf->Cell(160,4,iconv('utf-8','windows-1250','Łącznie'),1,0,'L'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_6']),1,0,'R'); + $pdf->Ln(); + } + else + { + //$pdf->Cell(40,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1']),1,0,'L'); + $pdf->Cell(45,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_2']),1,0,'L'); + $pdf->Cell(45,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_3']),1,0,'L'); + $pdf->Cell(40,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_4']),1,0,'L'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_6']),1,0,'R'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_7']),1,0,'R'); + $pdf->Ln(); + } + + + + if($_SESSION['rap003_array'][$i]['znacznik']=='blue' || $_SESSION['rap003_array'][$i]['znacznik']=='red') + $pdf->Ln(); +} + + +$pdf->Output(); +?> + + diff --git a/reports/rep_003_print.php b/reports/rep_003_print.php new file mode 100644 index 0000000..4e25838 --- /dev/null +++ b/reports/rep_003_print.php @@ -0,0 +1,144 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Zrzut wody na odprowadzalniki</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + + <script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> + <script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); + + +unset($_SESSION['rap003_array']); +unset($_SESSION['rap003_array_date']); + + +if ($_POST['subReset']=='Resetuj') + unset($_POST['rep003_date']); + +if ($_POST['isGenerate']=='ok') +{ + if (empty($_POST['rep003_date'])) $_SESSION['rap003_array_date'] = date('Y-m-d H:i').":00"; + else $_SESSION['rap003_array_date'] = $_POST['rep003_date']; +} + + +?> + +<form action="./rep_003_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Zrzut wody na odprowadzalniki <?php echo $_SESSION['syndis_eq_stock'];?> <br/>Studnie pracujące - status ON</h3> + </div> + <div class="panel-body"> + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" id="exampleInputAmount" type="text" name="rep003_date" value="<?php echo $_SESSION['rap003_array_date']; ?>"> + </div> + </div> + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_003_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_003_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> +</form> + + + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "rep003", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_date: "<?php echo $_SESSION['rap003_array_date'];?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + $('.form_datetime').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii:ss', + }); + </script> + + +<div id="main_table"> +</div> + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_003_xls.php b/reports/rep_003_xls.php new file mode 100644 index 0000000..5ea1fde --- /dev/null +++ b/reports/rep_003_xls.php @@ -0,0 +1,54 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_zrzut_wody_na_odprowadzalniki.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:F1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Zrzut wody na odprowadzalniki '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock']) ); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:F2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Data '.$_SESSION['rap003_array_date']); + +$kolumna=4; + +for($i=0;$i<count($_SESSION['rap003_array']);$i++) +{ + + //$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_1']); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_2']); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_3']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_4']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_5']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_6']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_7']); + + if($_SESSION['rap003_array'][$i]['znacznik']=='blue' || $_SESSION['rap003_array'][$i]['znacznik']=='red') + $kolumna++; + +} + + +$objPHPExcel->getActiveSheet()->setTitle('Zrzut wody na odprowadzalniki'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_003a_pdf.php b/reports/rep_003a_pdf.php new file mode 100644 index 0000000..f50e840 --- /dev/null +++ b/reports/rep_003a_pdf.php @@ -0,0 +1,106 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.$_SESSION['syndis_eq_stock']),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_i', '', 8); + $title = iconv('utf-8','windows-1250','Zrzut wody na odprowadzalniki na dzień: '.$_SESSION['rap003_array_date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + + $this -> SetFont('calibri', '', 6); + $this->Cell(40,5,iconv('utf-8','windows-1250','Grupa'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(45,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(50,5,iconv('utf-8','windows-1250',''),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Zrzut [m3/min]'),1,0,'C'); + + $this->Ln(); + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); + + + +for($i=1;$i<count($_SESSION['rap003_array']);$i++) +{ + $pdf -> SetFont('calibri', '', 6); + + if (iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1'])== 'Grupa:') + { + $pdf -> SetFont('Calibri_b', '', 6); + $pdf->Cell(40,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1']),1,0,'L'); + $pdf->Cell(70,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_2']),1,0,'L'); + $pdf->Cell(50,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_4'].' '.$_SESSION['rap003_array'][$i]['col_5']),1,0,'L'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_6']),1,0,'L'); + $pdf->Ln(); + } + elseif (iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1'])=='Razem grupa:') + { + $pdf -> SetFont('Calibri_b', '', 6); + $pdf->Cell(160,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1']),1,0,'L'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_6']),1,0,'R'); + $pdf->Ln(); + } + else + { + $pdf->Cell(40,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_1']),1,0,'L'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_2']),1,0,'L'); + $pdf->Cell(45,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_3']),1,0,'L'); + $pdf->Cell(50,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_4']),1,0,'L'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rap003_array'][$i]['col_6']),1,0,'R'); + $pdf->Ln(); + } + + + + if($_SESSION['rap003_array'][$i]['znacznik']=='blue' || $_SESSION['rap003_array'][$i]['znacznik']=='red') + $pdf->Ln(); +} + + +$pdf->Output(); +?> + + diff --git a/reports/rep_003a_xls.php b/reports/rep_003a_xls.php new file mode 100644 index 0000000..dd52be2 --- /dev/null +++ b/reports/rep_003a_xls.php @@ -0,0 +1,53 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_zrzut_wody_na_odprowadzalniki.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:F1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Zrzut wody na odprowadzalniki '.$_SESSION['syndis_eq_stock'] ); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:F2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Data '.$_SESSION['rap003_array_date']); + +$kolumna=4; + +for($i=0;$i<count($_SESSION['rap003_array']);$i++) +{ + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_1']); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_2']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_3']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_4']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_5']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $_SESSION['rap003_array'][$i]['col_6']); + + if($_SESSION['rap003_array'][$i]['znacznik']=='blue' || $_SESSION['rap003_array'][$i]['znacznik']=='red') + $kolumna++; + +} + + +$objPHPExcel->getActiveSheet()->setTitle('Zrzut wody na odprowadzalniki'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_004_pdf.php b/reports/rep_004_pdf.php new file mode 100644 index 0000000..e299738 --- /dev/null +++ b/reports/rep_004_pdf.php @@ -0,0 +1,130 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 11); + $title = iconv('utf-8','windows-1250','Moc i wydajność systemu odwodnienia wgłębnego na dzień: '.$_SESSION['rap004_array_date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(60,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(70,10,'www.softspm.com',0,0,'C'); + $this->Cell(60,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); + +$pdf -> SetFont('Calibri_b', '', 6); + + + +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); +$pdf->Cell(35,7,iconv('utf-8','windows-1250','Ilość studni z agregatem'),1,0,'C'); +$pdf->Cell(35,7,iconv('utf-8','windows-1250','Ilość studni wyłączonych'),1,0,'C'); +$pdf->Cell(30,7,iconv('utf-8','windows-1250','Moc znamionowa [kW]'),1,0,'C'); +$pdf->Cell(30,7,iconv('utf-8','windows-1250','Moc pobierana [kW]'),1,0,'C'); +$pdf->Cell(40,7,iconv('utf-8','windows-1250','Wydajność Q [m3/min]'),1,0,'C'); +$pdf->Ln(); + +$pdf -> SetFont('calibri', '', 6); + +for($i=0;$i<count($_SESSION['rap004_array_01']);$i++) +{ + + + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_01'][$i]['bariera']),1,0,'C'); + $pdf->Cell(35,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_01'][$i]['ile']),1,0,'R'); + $pdf->Cell(35,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_01'][$i]['wylaczone']),1,0,'R'); + $pdf->Cell(30,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_01'][$i]['moc_zn']),1,0,'R'); + $pdf->Cell(30,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_01'][$i]['moc_pob']),1,0,'R'); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_01'][$i]['q']),1,0,'R'); + $pdf->Ln(); + + $levVAL_1+=$_SESSION['rap004_array_01'][$i]['ile']; + $levVAL_2+=$_SESSION['rap004_array_01'][$i]['wylaczone']; + $levVAL_3+=$_SESSION['rap004_array_01'][$i]['moc_zn']; + $levVAL_4+=$_SESSION['rap004_array_01'][$i]['moc_pob']; + $levVAL_5+=$_SESSION['rap004_array_01'][$i]['q']; + +} + +$pdf -> SetFont('Calibri_b', '', 6); +$pdf->Cell(20,5,iconv('utf-8','windows-1250','Razem'),1,0,'C'); +$pdf->Cell(35,5,iconv('utf-8','windows-1250',$levVAL_1),1,0,'R'); +$pdf->Cell(35,5,iconv('utf-8','windows-1250',$levVAL_2),1,0,'R'); +$pdf->Cell(30,5,iconv('utf-8','windows-1250',$levVAL_3),1,0,'R'); +$pdf->Cell(30,5,iconv('utf-8','windows-1250',$levVAL_4),1,0,'R'); +$pdf->Cell(40,5,iconv('utf-8','windows-1250',$levVAL_5),1,0,'R'); +$pdf->Ln();$pdf->Ln(); + + + +$pdf -> SetFont('Calibri_i', '', 8); +$pdf->Cell(0,10,iconv('utf-8','windows-1250','Wykaz studni wyłączonych z zabudowanymi agregatami'),0,0,'L'); +$pdf->Ln(); + +$pdf -> SetFont('Calibri_b', '', 6); +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); +$pdf->Cell(60,7,iconv('utf-8','windows-1250','Powód wyłączenia'),1,0,'C'); +$pdf->Ln(); + +$pdf -> SetFont('calibri', '', 6); +for($i=0;$i<count($_SESSION['rap004_array_02']);$i++) +{ + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_02'][$i]['bariera']),1,0,'C'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_02'][$i]['studnia']),1,0,'C'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_02'][$i]['pompa']),1,0,'C'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_02'][$i]['silnik']),1,0,'C'); + $pdf->Cell(60,5,iconv('utf-8','windows-1250',$_SESSION['rap004_array_02'][$i]['powod']),1,0,'C'); + $pdf->Ln(); +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_004_print.php b/reports/rep_004_print.php new file mode 100644 index 0000000..ea55f4c --- /dev/null +++ b/reports/rep_004_print.php @@ -0,0 +1,157 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Moc i wydajność systemu odwodnienia wgłębnego</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + +<script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> +<script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +unset($_SESSION['rap004_array_date']); + +if ($_POST['subReset']=='Resetuj') + unset($_POST['rep004_date']); + +if ($_POST['isGenerate']=='ok') +{ + if (empty($_POST['rep004_date'])) $_SESSION['rap004_array_date'] = date('Y-m-d H:i').":00"; + else $_SESSION['rap004_array_date'] = $_POST['rep004_date']; +} + +?> + +<form action="./rep_004_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Moc i wydajność systemu odwodnienia wgłębnego <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" id="exampleInputAmount" type="text" name="rep004_date" value="<?php echo $_SESSION['rap004_array_date']; ?>"> + </div> + </div> + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_004_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_004_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> +</form> + + + + +<?php +mysql_close($polacz); + +?> + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "rep004", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_date: "<?php echo $_SESSION['rap004_array_date'];?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + $('.form_datetime').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii:ss', + }); + </script> + + +<div id="main_table"> +</div> + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_004_xls.php b/reports/rep_004_xls.php new file mode 100644 index 0000000..4e7d14f --- /dev/null +++ b/reports/rep_004_xls.php @@ -0,0 +1,111 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_moc_wydajnosc.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:F1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Moc i wydajność systemu odwodnienia wgłębnego '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock']) ); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:K2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Na dzień '.$_SESSION['rap004_array_date']); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A4', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('B4', 'Ilość studni z agregatem'); +$objPHPExcel->getActiveSheet()->SetCellValue('C4', 'Ilość studni wyłączonych'); +$objPHPExcel->getActiveSheet()->SetCellValue('D4', 'Moc znamionowa [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E4', 'Moc pobierana [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F4', 'Wydajność Q [m3/min]'); + + +$levVAL_1=0; +$levVAL_2=0; +$levVAL_3=0; +$levVAL_4=0; +$levVAL_5=0; + +$kolumna = 5; + + +for($i=0;$i<count($_SESSION['rap004_array_01']);$i++) +{ + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $_SESSION['rap004_array_01'][$i]['bariera']); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rap004_array_01'][$i]['ile']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rap004_array_01'][$i]['wylaczone']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rap004_array_01'][$i]['moc_zn']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rap004_array_01'][$i]['moc_pob']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $_SESSION['rap004_array_01'][$i]['q']); + + $levVAL_1+=$_SESSION['rap004_array_01'][$i]['ile']; + $levVAL_2+=$_SESSION['rap004_array_01'][$i]['wylaczone']; + $levVAL_3+=$_SESSION['rap004_array_01'][$i]['moc_zn']; + $levVAL_4+=$_SESSION['rap004_array_01'][$i]['moc_pob']; + $levVAL_5+=$_SESSION['rap004_array_01'][$i]['q']; +} + //podsumowanie + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Razem'); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $levVAL_1); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $levVAL_2); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $levVAL_3); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $levVAL_4); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $levVAL_5); + +$i++; +$i++; +$i++; + +//Wykaz studni wyłączonych z zabudowanymi agregatami +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':E'.($kolumna+$i)); +$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i).'', 'Wykaz studni wyłączonych z zabudowanymi agregatami'); +$i++; + + + +$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), 'Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), 'Powód wyłączenia'); +$i++; + + + +$kolumna = $kolumna+$i; + +for($i=0;$i<count($_SESSION['rap004_array_02']);$i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $_SESSION['rap004_array_02'][$i]['bariera']); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rap004_array_02'][$i]['studnia']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rap004_array_02'][$i]['pompa']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rap004_array_02'][$i]['silnik']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rap004_array_02'][$i]['powod']); + +} + + + +$objPHPExcel->getActiveSheet()->setTitle('Moc i wydajność'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_005_pdf.php b/reports/rep_005_pdf.php new file mode 100644 index 0000000..3cc1af6 --- /dev/null +++ b/reports/rep_005_pdf.php @@ -0,0 +1,99 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 11); + $title = iconv('utf-8','windows-1250','Studnie w postoju z agregatami pompowymi na dzień: '.$_SESSION['rep005_array'][0]['data']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + + $this -> SetFont('calibri', '', 6); + $this->Cell(5,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(17,5,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Numer pompy'),1,0,'C'); + $this->Cell(17,5,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Numer silnika'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Postój od'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Postój do'),1,0,'C'); + $this->Cell(46,5,iconv('utf-8','windows-1250','Powód wyłączenia'),1,0,'C'); + $this->Ln(); + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + + + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); +$bariera = ""; +$pdf -> SetFont('calibri', '', 5); + +for ($i=0; $i<count($_SESSION['rep005_array']); $i++) +{ + + if ($bariera!=$_SESSION['rep005_array'][$i]['bariera']) + { + $pdf -> SetFont('Calibri_b', '', 6); + $pdf->Cell(0,5,iconv('utf-8','windows-1250','Bariera '.$_SESSION['rep005_array'][$i]['bariera']),1,0,'L'); + $pdf->Ln(); + $bariera=$_SESSION['rep005_array'][$i]['bariera']; + $pdf -> SetFont('calibri', '', 5); + } + + $pdf->Cell(5,4,iconv('utf-8','windows-1250',$i+1),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['studnia']),1,0,'R'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['pompa']),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['pompa_no']),1,0,'R'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['silnik']),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['silnik_no']),1,0,'R'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['data_od']),1,0,'C'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['data_do']),1,0,'C'); + $pdf->Cell(46,4,iconv('utf-8','windows-1250',$_SESSION['rep005_array'][$i]['powod']),1,0,'L'); + $pdf->Ln(); + +} + +$pdf->Output(); +?> + + diff --git a/reports/rep_005_print.php b/reports/rep_005_print.php new file mode 100644 index 0000000..6607137 --- /dev/null +++ b/reports/rep_005_print.php @@ -0,0 +1,133 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Studnie w postoju z agregatami pompowymi</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + + <script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> + <script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + + + +<?php +date_default_timezone_set('Europe/Warsaw'); +?> + + +<form action="./rep_005_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Studnie w postoju z agregatami pompowymi <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + <div class="form-group col-md-2"> + <label class="sr-only" for="rep009_date"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" type="text" name="rep005_date" id="rep005_date" value="<?php echo date('Y-m-d H:i').":00"; ?>"> + </div> + </div> + <button id="butShow" type="button" class="btn btn-info" value="Generuj">Generuj</button> + + + + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="./rep_005_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="./rep_005_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> +</form> + + + + + + + <script src="./bootstrap.min.js"></script> + <script> + + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + + $('#butShow').prop('disabled', true); + $('#loader').show(); + + + $.post( "./ajax_gen_reports.php", { post_action: "rep005", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_date: $('#rep005_date').val() }).done(function(data) + { + $('#main_table').html(data); + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + }); + + $('#rep005_date').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii:ss', + }); + </script> + +<div id="main_table"> +</div> + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_005_xls.php b/reports/rep_005_xls.php new file mode 100644 index 0000000..f497c8d --- /dev/null +++ b/reports/rep_005_xls.php @@ -0,0 +1,71 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_studnie_w_postoju.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:I1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:I1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Studnie w postoju z agregatami pompowymi '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock']) ); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:I2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Data '.$_SESSION['rep005_array'][0]['data']); + +$objPHPExcel->getActiveSheet()->SetCellValue('A4','Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B4','Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C4','Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('D4','Numer pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('E4','Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('F4','Numer silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('G4','Postój od'); +$objPHPExcel->getActiveSheet()->SetCellValue('H4','Postój do'); +$objPHPExcel->getActiveSheet()->SetCellValue('I4','Powód wyłączenia'); + +$bariera=""; +$kolumna=5; + +for($i=0;$i<count($_SESSION['rep005_array']);$i++) +{ + if ($bariera!=$_SESSION['rep005_array'][$i]['bariera']) + { + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':I'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera '.$_SESSION['rep005_array'][$i]['bariera']); + $kolumna++; + + $bariera=$_SESSION['rep005_array'][$i]['bariera']; + } + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), ($i+1)); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rep005_array'][$i]['studnia']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rep005_array'][$i]['pompa']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rep005_array'][$i]['pompa_no']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rep005_array'][$i]['silnik']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $_SESSION['rep005_array'][$i]['silnik_no']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $_SESSION['rep005_array'][$i]['data_od']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $_SESSION['rep005_array'][$i]['data_do']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $_SESSION['rep005_array'][$i]['powod']); + +} + + +$objPHPExcel->getActiveSheet()->setTitle('Studnie w postoju'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_006_pdf.php b/reports/rep_006_pdf.php new file mode 100644 index 0000000..7fcce26 --- /dev/null +++ b/reports/rep_006_pdf.php @@ -0,0 +1,94 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 11); + $title = iconv('utf-8','windows-1250','Poziom zwierciadła wody w piezometrach - '.$_SESSION['rep006Array'][0]['typ']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + + $this->SetFont('Calibri_i','',10); + $title = iconv('utf-8','windows-1250','Data: '.$_SESSION['rep006Array'][0]['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Nazwa'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Gł. rurki [m]'),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Rzędna aktualna [m npm]'),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Poziom wodonośny'),1,0,'C'); + $this->Cell(18,5,iconv('utf-8','windows-1250','HST [m]'),1,0,'C'); + $this->Cell(24,5,iconv('utf-8','windows-1250','Data pomiaru'),1,0,'C'); + $this->Cell(18,5,iconv('utf-8','windows-1250','Status'),1,0,'C'); + + $this->Ln(); + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); + + + +for($i=0;$i<count($_SESSION['rep006Array']);$i++) +{ + $pdf -> SetFont('calibri', '', 7); + $pdf->Cell(10,4,iconv('utf-8','windows-1250',($i+1)),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['bariera']),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['piezometr']),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['glebokosc']),1,0,'R'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['rzedna']),1,0,'R'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['poziom']),1,0,'C'); + $pdf->Cell(18,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['hst']),1,0,'R'); + $pdf->Cell(24,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['data']),1,0,'C'); + $pdf->Cell(18,4,iconv('utf-8','windows-1250',$_SESSION['rep006Array'][$i]['status']),1,0,'C'); + $pdf->Ln(); +} + + +$pdf->Output(); +?> + + diff --git a/reports/rep_006_print.php b/reports/rep_006_print.php new file mode 100644 index 0000000..44a7aa3 --- /dev/null +++ b/reports/rep_006_print.php @@ -0,0 +1,165 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Poziom zwierciadła wody w piezometrach</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); + +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + unset($typeOfPiezo); + $typeOfPiezo = sqlGetResAsArray("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='PIEZO_SYSTEM_TYPE'"); +mysql_close($con); +?> + + +<?php +if (empty($_POST['rep006_date'])) $_POST['rep006_date']=date('Y-m-d'); + +if ($_POST['isGenerate']=='ok' && strlen($_POST['from_piezo'])>3) +{ + unset($_SESSION['rep006_date']); + $_SESSION['rep006_date'] = $_POST['rep006_date']; +} + +if ($_POST['subReset']=='Resetuj') + $_SESSION['rep006_date']=date('Y-m-d'); + +?> + +<form action="./rep_006_print.php" method="post"> +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Poziom zwierciadła wody w piezometrach <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="datepicker form-control" name="rep006_date" value="<?php echo $_SESSION['rep006_date']; ?> "> + </div> + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Typ:</div> + <select class="form-control" name="from_piezo"> + <?php + for ($i=0; $i<=count($typeOfPiezo); $i++) + { + if ($_POST['from_piezo']==$typeOfPiezo[$i]['DIC_POL_LANG']) + echo"<option value='".$typeOfPiezo[$i]['DIC_POL_LANG']."' selected>".$typeOfPiezo[$i]['DIC_POL_LANG']."</option>"; + else + echo"<option value='".$typeOfPiezo[$i]['DIC_POL_LANG']."'>".$typeOfPiezo[$i]['DIC_POL_LANG']."</option>"; + } + ?> + </select> + </div> + </div> + + + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + </div> + + + + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="./rep_006_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="./rep_006_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> +</form> + + + + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "rep006", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_date: "<?php echo $_SESSION['rep006_date'];?>", post_typ: "<?php echo $_POST['from_piezo']; ?>" }).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + } + ); + }); + + + $('.datepicker').datepicker({ + format: 'yyyy-mm-dd', + weekStart: 1 + }); + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_006_xls.php b/reports/rep_006_xls.php new file mode 100644 index 0000000..8483faf --- /dev/null +++ b/reports/rep_006_xls.php @@ -0,0 +1,67 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_pw_zwierciadla_wody.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:I1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:I1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Poziom zwierciadła wody w piezometrach - '.$_SESSION['rep006Array'][0]['typ']); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:F2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Data: '.$_SESSION['rep006Array'][0]['date']); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A4', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B4', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('C4', 'Nazwa'); +$objPHPExcel->getActiveSheet()->SetCellValue('D4', 'Gł. rurki [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E4', 'Rzędna aktualna [m npm]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F4', 'Poziom wodonośny'); +$objPHPExcel->getActiveSheet()->SetCellValue('G4', 'HST [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H4', 'Data pomiaru'); +$objPHPExcel->getActiveSheet()->SetCellValue('I4', 'Status'); + + + +$kolumna=5; + +for($i=0;$i<count($_SESSION['rep006Array']);$i++) +{ + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), ($i+1)); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rep006Array'][$i]['bariera']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rep006Array'][$i]['piezometr']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rep006Array'][$i]['glebokosc']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rep006Array'][$i]['rzedna']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $_SESSION['rep006Array'][$i]['poziom']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $_SESSION['rep006Array'][$i]['hst']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $_SESSION['rep006Array'][$i]['data']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $_SESSION['rep006Array'][$i]['status']); + + +} + + +$objPHPExcel->getActiveSheet()->setTitle('Poziom zwierciadła'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_007_pdf.php b/reports/rep_007_pdf.php new file mode 100644 index 0000000..8d6a4c4 --- /dev/null +++ b/reports/rep_007_pdf.php @@ -0,0 +1,109 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 11); + $title = iconv('utf-8','windows-1250','Raport chwilowy pracy systemu odwodnienia wgłębnego na dzień: '.$_SESSION['rep007Array'][0]['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + + $this -> SetFont('calibri', '', 6); + $this->Cell(5,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Agregat pompowy'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Moc Pe [kW]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Czas pracy [h]'),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Jedn. zuż. ener. [Wh/m3/m]'),1,0,'C'); + $this->Cell(10,5,iconv('utf-8','windows-1250','HST0 [m]'),1,0,'C'); + $this->Cell(10,5,iconv('utf-8','windows-1250','HD [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Q [m3/min]'),1,0,'C'); + $this->Cell(10,5,iconv('utf-8','windows-1250','p1 [m]'),1,0,'C'); + $this->Cell(10,5,iconv('utf-8','windows-1250','p2 [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Temp. wody [oC]'),1,0,'C'); + $this->Cell(10,5,iconv('utf-8','windows-1250','Cl [mg/l]'),1,0,'C'); + $this->Ln(); + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + + + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetLineWidth(.1); +$bariera = ""; +$pdf -> SetFont('calibri', '', 5); + +for ($i=0; $i<count($_SESSION['rep007Array']); $i++) +{ + + if ($bariera!=$_SESSION['rep007Array'][$i]['bariera']) + { + $pdf -> SetFont('Calibri_b', '', 6); + $pdf->Cell(0,5,iconv('utf-8','windows-1250','Bariera '.$_SESSION['rep007Array'][$i]['bariera']),1,0,'L'); + $pdf->Ln(); + $bariera=$_SESSION['rep007Array'][$i]['bariera']; + $pdf -> SetFont('calibri', '', 5); + } + + $pdf->Cell(5,4,iconv('utf-8','windows-1250',$i+1),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['well']),1,0,'C'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['agregat']),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['moc']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['czas']),1,0,'R'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['jzu']),1,0,'R'); + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['hst']),1,0,'R'); + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['hd']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['q']),1,0,'R'); + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['p1']),1,0,'R'); + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['p2']),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['temp']),1,0,'R'); + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$_SESSION['rep007Array'][$i]['clor']),1,0,'R'); + + + $pdf->Ln(); + +} + +$pdf->Output(); +?> + + diff --git a/reports/rep_007_print.php b/reports/rep_007_print.php new file mode 100644 index 0000000..c72dfce --- /dev/null +++ b/reports/rep_007_print.php @@ -0,0 +1,159 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Raport chwilowy pracy systemu odwodnienia wgłębnego</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + +<script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> +<script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + +unset($_SESSION['rep007Array']); + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep007"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); + +?> + + + + +<input type="hidden" name="isGenerate" value="ok"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Raport chwilowy pracy systemu odwodnienia wgłębnego <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" id="rep007_date" type="text" name="rep007_date" value="<?php echo date('Y-m-d H:i').":00"; ?>"> + + </div> + </div> + <button id="butShow" type="button" class="btn btn-info" value="Generuj">Generuj</button> + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_007_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_007_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + <script src="./bootstrap.min.js"></script> + <script> + + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep007", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>",post_date: $('#rep007_date').val() }).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + + }); + + }); + + $('#rep007_date').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii:ss', + }); + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> diff --git a/reports/rep_007_xls.php b/reports/rep_007_xls.php new file mode 100644 index 0000000..b8a9cbf --- /dev/null +++ b/reports/rep_007_xls.php @@ -0,0 +1,79 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_raport_chwilowy.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:M1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:M1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Raport chwilowy pracy systemu odwodnienia wgłębnego '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock']) ); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:I2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Data: '.$_SESSION['rep007Array'][0]['date']); + +$objPHPExcel->getActiveSheet()->SetCellValue('A4','Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B4','Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C4','Agregat pompowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('D4','Moc Pe [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E4','Czas pracy [h]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F4','Jedn. zużycie energii [Wh/m3/m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('G4','HST0 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H4','HD [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I4','Wydajność Q [m3/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J4','Ciśnienie p1 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('K4','Ciśnienie p2 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('L4','Temp. wody [oC]'); +$objPHPExcel->getActiveSheet()->SetCellValue('M4','Stężenie chlorków Cl [mg/l]'); + + +$bariera=""; +$kolumna=5; + +for($i=0;$i<count($_SESSION['rep007Array']);$i++) +{ + if ($bariera!=$_SESSION['rep007Array'][$i]['bariera']) + { + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':M'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera '.$_SESSION['rep007Array'][$i]['bariera']); + $kolumna++; + + $bariera=$_SESSION['rep007Array'][$i]['bariera']; + } + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), ($i+1)); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $_SESSION['rep007Array'][$i]['well']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $_SESSION['rep007Array'][$i]['agregat']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $_SESSION['rep007Array'][$i]['moc']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $_SESSION['rep007Array'][$i]['czas']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $_SESSION['rep007Array'][$i]['jzu']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $_SESSION['rep007Array'][$i]['hst']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $_SESSION['rep007Array'][$i]['hd']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $_SESSION['rep007Array'][$i]['q']); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $_SESSION['rep007Array'][$i]['p1']); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $_SESSION['rep007Array'][$i]['p2']); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $_SESSION['rep007Array'][$i]['temp']); + $objPHPExcel->getActiveSheet()->SetCellValue('M'.($kolumna+$i), $_SESSION['rep007Array'][$i]['clor']); +} + + +$objPHPExcel->getActiveSheet()->setTitle('Raport chwilowy'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_008_pdf.php b/reports/rep_008_pdf.php new file mode 100644 index 0000000..0ff46b3 --- /dev/null +++ b/reports/rep_008_pdf.php @@ -0,0 +1,126 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['name'] = $wellArray[0][0]; + $GLOBALS['df'] = $wellArray[0][2]; + $GLOBALS['dt'] = $wellArray[0][3]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Raport pracy studni '.$GLOBALS['name']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 7); + $this->Cell(6,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(14,5,iconv('utf-8','windows-1250','Pompa'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Silnik'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Data zabudowy'),1,0,'C'); + $this->Cell(19,5,iconv('utf-8','windows-1250','Gł. zabudowy [m]'),1,0,'C'); + $this->Cell(21,5,iconv('utf-8','windows-1250','Śr. rurociągu [mm]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Ostat. zw. stat. [m]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Ostat. zw. dyn. [m]'),1,0,'C'); + $this->Cell(18,5,iconv('utf-8','windows-1250','Czas pracy [h]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Il. wyp. wody [m3]'),1,0,'C'); + $this->Cell(18,5,iconv('utf-8','windows-1250','Q śr. [m3/min]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Rzędna'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Data wybudowy'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Powód wymiany'),1,0,'C'); + + $this->Ln(); + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +//$pdf->AddPage(); //190 +$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',6); + + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][2])) + { + $pdf->Cell(6,4,iconv('utf-8','windows-1250',$wellArray[$i][1]),1,0,'R'); + $pdf->Cell(14,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(19,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'C'); + $pdf->Cell(21,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'C'); + $pdf->Cell(18,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][12]),1,0,'C'); + $pdf->Cell(18,4,iconv('utf-8','windows-1250',$wellArray[$i][13]),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][14]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][15]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][16]),1,0,'C'); + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_008_print.php b/reports/rep_008_print.php new file mode 100644 index 0000000..68733f1 --- /dev/null +++ b/reports/rep_008_print.php @@ -0,0 +1,183 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Raport pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep008"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); + +?> +<form action="./rep_008_print.php" method="post"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Raport pracy studni <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-3"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Studnia:</div> + + <select class="form-control" name="drsID" id="drsID"> + + <?php + unset($expArray); + $expArray = sqlGetResAsArray("select DRS_ID,WLL_NAME from seg_wells,seg_dev_resources where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID=3 order by WLL_NAME"); + echo'<option value="-1">Studnie w eksploatacji</option>'; + for ($i=0; $i<count($expArray);$i++) + { + if ($_POST['drsID']==$expArray[$i]['DRS_ID']) + echo"<option value='".$expArray[$i]['DRS_ID']."' selected>".$expArray[$i]['WLL_NAME']."</option>"; + else + echo"<option value='".$expArray[$i]['DRS_ID']."'>".$expArray[$i]['WLL_NAME']."</option>"; + } + echo'<option value="-1"></option>'; + + + + unset($outArray); + $outArray = sqlGetResAsArray("select DRS_ID,WLL_NAME from seg_wells,seg_dev_resources where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID=4 order by WLL_NAME"); + echo'<option value="-1">Studnie zdjęte z eksploatacji</option>'; + for ($i=0; $i<count($outArray);$i++) + { + if ($_POST['drsID']==$outArray[$i]['DRS_ID']) + echo"<option value='".$outArray[$i]['DRS_ID']."' selected>".$outArray[$i]['WLL_NAME']."</option>"; + else + echo"<option value='".$outArray[$i]['DRS_ID']."'>".$outArray[$i]['WLL_NAME']."</option>"; + } + + ?> + + </select> + </div> + </div> + <button id="butShow" type="button" class="btn btn-info btn-sm" value="Generuj">Generuj</button> + + + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="./rep_008_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="./rep_008_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> +</form> + + +<?php +mysql_close($polacz); +?> + + <script src="./bootstrap.min.js"></script> + <link href="../style/select2.min.css" rel="stylesheet" /> + <script src="../js/select2.min.js"></script> + + <script> + + $(window).load(function() { + $('#loader').hide(); + + + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#loader').show(); + + + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "rep008", done: "create", well: $('#drsID').val(), file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + $('#butShow').prop('disabled', false); + } + ); + + }); + + $('#drsID').select2(); + + }); + + + + </script> + + + + + +<div id="main_table"> +</div> + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_008_xls.php b/reports/rep_008_xls.php new file mode 100644 index 0000000..b99c881 --- /dev/null +++ b/reports/rep_008_xls.php @@ -0,0 +1,95 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_historia_studni.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:P1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:P1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Raport pracy studni '.$wellArray[0][0]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Pompa'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Numer'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Silnik'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Numer'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Data zabudowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Głębokość zabudowy [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Średnica rurociągu [mm]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Ostatnie zw. statyczne [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Ostatnie zw. dynamiczne [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Czas pracy [h]'); +$objPHPExcel->getActiveSheet()->SetCellValue('L3', 'Ilość wypompowanej wody [m3]'); +$objPHPExcel->getActiveSheet()->SetCellValue('M3', 'Średnia wydajność [m3/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('N3', 'Rzędna położenia studni [m n.p.m.]'); +$objPHPExcel->getActiveSheet()->SetCellValue('O3', 'Data wybudowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('P3', 'Powód wymiany'); + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][2])) + { + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $wellArray[$i][12]); + $objPHPExcel->getActiveSheet()->SetCellValue('M'.($kolumna+$i), $wellArray[$i][13]); + $objPHPExcel->getActiveSheet()->SetCellValue('N'.($kolumna+$i), $wellArray[$i][14]); + $objPHPExcel->getActiveSheet()->SetCellValue('O'.($kolumna+$i), $wellArray[$i][15]); + $objPHPExcel->getActiveSheet()->SetCellValue('P'.($kolumna+$i), $wellArray[$i][16]); + + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Raport pracy studni'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_009_pdf.php b/reports/rep_009_pdf.php new file mode 100644 index 0000000..8c73093 --- /dev/null +++ b/reports/rep_009_pdf.php @@ -0,0 +1,126 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['date'] = $wellArray[0][0]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Wykaz zinstalowanych agregatów pompowych na dzień '.$GLOBALS['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 7); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Pompa'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Silnik'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Gł. zabudowy [m]'),1,0,'C'); + $this->Cell(23,5,iconv('utf-8','windows-1250','Śr. rurociągu [mm]'),1,0,'C'); + $this->Cell(18,5,iconv('utf-8','windows-1250','Śr. DST [mm]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Hst [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Hd [m]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Q os. [m3/min]'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Q śr. [m3/min]'),1,0,'C'); + $this->Cell(28,5,iconv('utf-8','windows-1250','Data uruchomienia'),1,0,'C'); + $this->Cell(22,5,iconv('utf-8','windows-1250','Czas pracy [h]'),1,0,'C'); + + $this->Ln(); + + + + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +//$pdf->AddPage(); //190 +$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',6); + + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$wellArray[$i][1]),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'R'); + $pdf->Cell(23,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'R'); + $pdf->Cell(18,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][12]),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][13]),1,0,'R'); + $pdf->Cell(28,4,iconv('utf-8','windows-1250',$wellArray[$i][14]),1,0,'C'); + $pdf->Cell(22,4,iconv('utf-8','windows-1250',$wellArray[$i][15]),1,0,'R'); + + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_009_print.php b/reports/rep_009_print.php new file mode 100644 index 0000000..8eb4283 --- /dev/null +++ b/reports/rep_009_print.php @@ -0,0 +1,137 @@ +<?php @ob_start(); session_start();?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz zinstalowanych agregatów pompowych</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + + <script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> + <script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); + + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep009"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); + + + +?> + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz zinstalowanych agregatów pompowych <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + <div class="form-group col-md-2"> + <label class="sr-only" for="rep009_date"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" type="text" name="rep009_date" id="rep009_date" value="<?php echo date('Y-m-d H:i').":00"; ?>"> + </div> + </div> + <button id="butShow" type="button" class="btn btn-info" value="Generuj">Generuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_009_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_009_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + + + <script src="./bootstrap.min.js"></script> + <script> + + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + $('#loader').show(); + + + $.post("./ajax_gen_reports.php", { post_action: "rep009", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>",post_date: $('#rep009_date').val(), file: "<?php echo $fileName; ?>" }).done(function( data ) { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + + }); + }); + + }); + + $('.form_datetime').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii:ss', + }); + </script> + + +<div id="main_table"> +</div> + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_009_xls.php b/reports/rep_009_xls.php new file mode 100644 index 0000000..45cd05b --- /dev/null +++ b/reports/rep_009_xls.php @@ -0,0 +1,95 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_agregaty_pompowe.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:P1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:P1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz zinstalowanych agregatów pompowych na dzień '.$wellArray[0][0]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Numer pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Numer silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Gł.zab.[m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Średnica rurociągu [mm]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Średnica DST [mm]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Hst [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Hd [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('L3', 'Q ostatnie [m³/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('M3', 'Q średnie [m³/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('N3', 'Data uruchomienia'); +$objPHPExcel->getActiveSheet()->SetCellValue('O3', 'Czas pracy [h]'); +$objPHPExcel->getActiveSheet()->SetCellValue('P3', 'Kategoria'); + + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $wellArray[$i][12]); + $objPHPExcel->getActiveSheet()->SetCellValue('M'.($kolumna+$i), $wellArray[$i][13]); + $objPHPExcel->getActiveSheet()->SetCellValue('N'.($kolumna+$i), $wellArray[$i][14]); + $objPHPExcel->getActiveSheet()->SetCellValue('O'.($kolumna+$i), $wellArray[$i][15]); + $objPHPExcel->getActiveSheet()->SetCellValue('P'.($kolumna+$i), $wellArray[$i][16]); + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Wykaz agregatów pompowych'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_009a_print.php b/reports/rep_009a_print.php new file mode 100644 index 0000000..781b99e --- /dev/null +++ b/reports/rep_009a_print.php @@ -0,0 +1,157 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Studnie w postoju z agregatami pompowymi</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + +<script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> +<script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + +if (empty($_POST['rep009_date'])) $_POST['rep009_date']=date('Y-m-d H:i'); + +unset($_SESSION['rep009_date']); +$_SESSION['rep009_date'] = $_POST['rep009_date']; + +if ($_POST['subReset']=='Resetuj') + $_SESSION['rep009_date']=date('Y-m-d H:i'); + +unset($_SESSION['rep007Array']); + +?> + + + + +<form action="./rep_009_print.php" method="post"> + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Studnie w postoju z agregatami pompowymi <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" id="exampleInputAmount" type="text" name="rep009_date" value="<?php echo $_SESSION['rep009_date']; ?>"> + </div> + </div> + <button id="butShow" type="submit" class="btn btn-info" value="Pokaż">Pokaż</button> + <button id="butRes" type="submit" class="btn btn-default" name="subReset" value="Resetuj">Resetuj</button> + + + + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="#./rep_009_xls.php" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="#./rep_009_pdf.php" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> +</form> + + <script src="./bootstrap.min.js"></script> + <script> + + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "rep009", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>",post_date: "<?php echo $_SESSION['rep009_date'];?>:00"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + + } + ); + }); + + + $('.form_datetime').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii', + }); + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> diff --git a/reports/rep_010_pdf.php b/reports/rep_010_pdf.php new file mode 100644 index 0000000..a2f2228 --- /dev/null +++ b/reports/rep_010_pdf.php @@ -0,0 +1,123 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['date'] = $wellArray[0][0]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Wykaz agregatów pozostawionych w studniach na dzień '.$GLOBALS['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(7,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(22,5,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(31,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(31,5,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); + $this->Cell(31,5,iconv('utf-8','windows-1250','Numer pompy'),1,0,'C'); + $this->Cell(31,5,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); + $this->Cell(31,5,iconv('utf-8','windows-1250','Numer silnika'),1,0,'C'); + $this->Cell(31,5,iconv('utf-8','windows-1250','Głębokość LP [m]'),1,0,'C'); + $this->Cell(32,5,iconv('utf-8','windows-1250','Data uruchomienia'),1,0,'C'); + $this->Cell(32,5,iconv('utf-8','windows-1250','Data zatopienia'),1,0,'C'); + + //+42 + + $this->Ln(); + + + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +//$pdf->AddPage(); //190 +$pdf->AddPage('L'); //277 +$pdf->SetFont('calibri','',6); + + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + $pdf->SetFont('calibri','',6); + $pdf->Cell(7,4,iconv('utf-8','windows-1250',$wellArray[$i][1]),1,0,'L'); + $pdf->Cell(22,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'C'); + $pdf->Cell(31,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(31,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(31,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(31,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(31,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'C'); + $pdf->Cell(31,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'C'); + $pdf->Cell(32,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'C'); + $pdf->Cell(32,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'C'); + $pdf->Ln(); + + $pdf->SetFont('calibri', '', 7); + $pdf->Cell(29,4,iconv('utf-8','windows-1250','Powód:'),1,0,'R'); + $pdf->SetFont('calibri','',6); + $pdf->Cell(250,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'L'); + + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_010_print.php b/reports/rep_010_print.php new file mode 100644 index 0000000..5b3231b --- /dev/null +++ b/reports/rep_010_print.php @@ -0,0 +1,123 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz agregatów pozostawionych w studniach</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep010"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); +?> + + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz agregatów pozostawionych w studniach <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + Na dzień: <?php echo date('Y-m-d'); ?>&nbsp;&nbsp;&nbsp; + <button id="butShow" type="button" class="btn btn-info btn-sm" value="Generuj">Generuj</button> + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_010_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_010_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> + + +</div> + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep010", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_date: "<?php echo date('Y-m-d H:i:s');?>", file: "<?php echo $fileName; ?>"}).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + + + }); + + + + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_010_xls.php b/reports/rep_010_xls.php new file mode 100644 index 0000000..e804661 --- /dev/null +++ b/reports/rep_010_xls.php @@ -0,0 +1,86 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_agregaty_pozostawione.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:K1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:K1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz agregatów pozostawionych w studniach na dzień '.$wellArray[0][0]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Numer pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Numer silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Głębokość LP [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Data uruchomienia'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Data zatopienia'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Powód'); + + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][11]); + + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Wykaz agregatów pozostawionych'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_011_pdf.php b/reports/rep_011_pdf.php new file mode 100644 index 0000000..acd640a --- /dev/null +++ b/reports/rep_011_pdf.php @@ -0,0 +1,135 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['date'] = $wellArray[0][0]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Wykaz obiektów na stanie oddziału (studnie) na dzień '.$GLOBALS['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(33,5,iconv('utf-8','windows-1250','Typ obiektu'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Data przyjęcia'),1,0,'C'); + $this->Cell(34,5,iconv('utf-8','windows-1250','Współrzędne'),1,0,'C'); + $this->Cell(36,5,iconv('utf-8','windows-1250','Rzędna wiercenia [m n.p.m.]'),1,0,'C'); + $this->Cell(36,5,iconv('utf-8','windows-1250','Rzędna aktualna [m n.p.m.]'),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Głębokość aktualna [m]'),1,0,'C'); + $this->Cell(29,5,iconv('utf-8','windows-1250','Lokalizacja'),1,0,'C'); + $this->Cell(29,5,iconv('utf-8','windows-1250','Uwagi'),1,0,'C'); + + $this->Ln(); + + + + + + + + + + + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +//$pdf->AddPage(); //190 +$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',6); + +$bariera = ""; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + if ($bariera!=$wellArray[$i][2]) + { + $pdf->SetFont('calibri','',8); + $pdf->Cell(0,4,iconv('utf-8','windows-1250','Bariera: '.$wellArray[$i][2]),1,0,'L'); + $bariera=$wellArray[$i][2]; + $pdf->Ln(); + $pdf->SetFont('calibri','',6); + } + + + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$wellArray[$i][1]),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(33,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'C'); + $pdf->Cell(36,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'R'); + $pdf->Cell(36,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'R'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'R'); + $pdf->Cell(29,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'C'); + $pdf->Cell(29,4,iconv('utf-8','windows-1250',$wellArray[$i][12]),1,0,'C'); + + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_011_print.php b/reports/rep_011_print.php new file mode 100644 index 0000000..698c637 --- /dev/null +++ b/reports/rep_011_print.php @@ -0,0 +1,147 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz obiektów na stanie oddziału (studnie)</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + + <script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> + <script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep011"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); + +?> + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz obiektów na stanie oddziału (studnie) <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + <div class="form-group col-md-2"> + <label class="sr-only" for="rep009_date"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" type="text" name="rep009_date" id="rep009_date" value="<?php echo date('Y-m-d H:i').":00"; ?>"> + </div> + </div> + <button id="butShow" type="button" class="btn btn-info" value="Generuj">Generuj</button> + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_011_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_011_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#butRes').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep011", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>",post_date: $('#rep009_date').val(), file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#butRes').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + }); + + $('.form_datetime').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii:ss', + }); + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_011_xls.php b/reports/rep_011_xls.php new file mode 100644 index 0000000..2d1402c --- /dev/null +++ b/reports/rep_011_xls.php @@ -0,0 +1,96 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_obiekty_studnie.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:L1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:L1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz obiektów na stanie oddziału (studnie) na dzień '.$wellArray[0][0]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Typ obiektu'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Data przyjęcia'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Współrzędne'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', ''); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Rzędna wiercenia [m n.p.m.]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Rzędna aktualna [m n.p.m.]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Głębokość aktualna [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Lokalizacja'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Uwagi'); +$objPHPExcel->getActiveSheet()->SetCellValue('L3', 'Kategoria'); + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + if ($bariera!=$wellArray[$i][2]) + { + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera: '.$wellArray[$i][2]); + $bariera=$wellArray[$i][2]; + $kolumna++; + } + + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][12]); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $wellArray[$i][13]); + + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Wykaz obiektów na stanie'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_012_pdf.php b/reports/rep_012_pdf.php new file mode 100644 index 0000000..107f8cb --- /dev/null +++ b/reports/rep_012_pdf.php @@ -0,0 +1,125 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['date'] = $wellArray[0][0]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Wykaz obiektów na stanie oddziału (piezometry)'); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Piezometr'),1,0,'C'); + $this->Cell(33,5,iconv('utf-8','windows-1250','Typ obiektu'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Data przyjęcia'),1,0,'C'); + $this->Cell(34,5,iconv('utf-8','windows-1250','Współrzędne'),1,0,'C'); + $this->Cell(36,5,iconv('utf-8','windows-1250','Rzędna wiercenia [m n.p.m.]'),1,0,'C'); + $this->Cell(36,5,iconv('utf-8','windows-1250','Rzędna aktualna [m n.p.m.]'),1,0,'C'); + $this->Cell(30,5,iconv('utf-8','windows-1250','Głębokość aktualna [m]'),1,0,'C'); + $this->Cell(29,5,iconv('utf-8','windows-1250','Lokalizacja'),1,0,'C'); + $this->Cell(29,5,iconv('utf-8','windows-1250','Uwagi'),1,0,'C'); + + $this->Ln(); + + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +//$pdf->AddPage(); //190 +$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',6); + +$bariera = ""; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + if ($bariera!=$wellArray[$i][1]) + { + $pdf->SetFont('calibri','',8); + $pdf->Cell(0,4,iconv('utf-8','windows-1250','Bariera: '.$wellArray[$i][1]),1,0,'L'); + $bariera=$wellArray[$i][1]; + $pdf->Ln(); + $pdf->SetFont('calibri','',6); + } + + $pdf->Cell(10,4,iconv('utf-8','windows-1250',str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0])),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'C'); + $pdf->Cell(33,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(36,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'R'); + $pdf->Cell(36,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'R'); + $pdf->Cell(30,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'R'); + $pdf->Cell(29,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'C'); + $pdf->Cell(29,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'C'); + + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_012_print.php b/reports/rep_012_print.php new file mode 100644 index 0000000..dfe56a8 --- /dev/null +++ b/reports/rep_012_print.php @@ -0,0 +1,147 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz obiektów na stanie oddziału (piezometry)</title> + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <script src="./jquery.min.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); + +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + unset($typeOfPiezo); + $typeOfPiezo = sqlGetResAsArray("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='PIEZO_SYSTEM_TYPE'"); +mysql_close($con); + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep012"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); + +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz obiektów na stanie oddziału <?php echo $_SESSION['syndis_eq_stock'];?> - piezometry</h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Typ:</div> + <select class="form-control" name="from_piezo" id="from_piezo"> + <option value="">Wybierz typ</option> + <?php + for ($i=0; $i<=count($typeOfPiezo); $i++) + { + echo"<option value='".$typeOfPiezo[$i]['DIC_POL_LANG']."'>".$typeOfPiezo[$i]['DIC_POL_LANG']."</option>"; + } + ?> + </select> + </div> + </div> + + <button id="butShow" type="button" class="btn btn-info" value="Generuj">Generuj</button> + + + </div> + + + + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_012_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_012_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep012", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_typ: $('#from_piezo').val(), file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + + } + ); + }); + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_012_xls.php b/reports/rep_012_xls.php new file mode 100644 index 0000000..e7de6da --- /dev/null +++ b/reports/rep_012_xls.php @@ -0,0 +1,96 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_obiekty_piezometry.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:L1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:L1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz obiektów na stanie oddziału (piezometry)'); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Piezometr'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Typ obiektu'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Data przyjęcia'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Współrzędne'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', ''); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Rzędna wiercenia [m n.p.m.]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Rzędna aktualna [m n.p.m.]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Głębokość aktualna [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Lokalizacja'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Uwagi'); +$objPHPExcel->getActiveSheet()->SetCellValue('L3', 'Sterowanie'); + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + if ($bariera!=$wellArray[$i][1]) + { + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera: '.$wellArray[$i][1]); + $bariera=$wellArray[$i][1]; + $kolumna++; + } + + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0])); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $wellArray[$i][12]); + + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Wykaz obiektów na stanie'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_013_pdf.php b/reports/rep_013_pdf.php new file mode 100644 index 0000000..2c2ab49 --- /dev/null +++ b/reports/rep_013_pdf.php @@ -0,0 +1,121 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['date_f'] = $wellArray[0][0]; + $GLOBALS['date_t'] = $wellArray[0][1]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Wymiana agregatów od '.$GLOBALS['date_f'].' do '.$GLOBALS['date_t']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Nr wymiany'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(16,5,iconv('utf-8','windows-1250','Moc [kW]'),1,0,'C'); + $this->Cell(22,5,iconv('utf-8','windows-1250','Data zabudowy'),1,0,'C'); + $this->Cell(22,5,iconv('utf-8','windows-1250','Data wybudowy'),1,0,'C'); + $this->Cell(18,5,iconv('utf-8','windows-1250','Czas pracy [h]'),1,0,'C'); + $this->Cell(23,5,iconv('utf-8','windows-1250','Powód wymiany'),1,0,'C'); + $this->Cell(23,5,iconv('utf-8','windows-1250','Głębokość LP [m]'),1,0,'C'); + $this->Cell(23,5,iconv('utf-8','windows-1250','Średnica DR [mm]'),1,0,'C'); + + $this->Ln(); + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +//$pdf->AddPage(); //190 +$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',6); + + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'C'); + $pdf->Cell(16,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'R'); + $pdf->Cell(22,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'C'); + $pdf->Cell(22,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'C'); + $pdf->Cell(18,4,iconv('utf-8','windows-1250',$wellArray[$i][12]),1,0,'R'); + $pdf->Cell(23,4,iconv('utf-8','windows-1250',$wellArray[$i][13]),1,0,'C'); + $pdf->Cell(23,4,iconv('utf-8','windows-1250',$wellArray[$i][14]),1,0,'R'); + $pdf->Cell(23,4,iconv('utf-8','windows-1250',$wellArray[$i][15]),1,0,'R'); + + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_013_print.php b/reports/rep_013_print.php new file mode 100644 index 0000000..20d4a9a --- /dev/null +++ b/reports/rep_013_print.php @@ -0,0 +1,165 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wymiana agregatów </title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep013"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); + +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wymiana agregatów <?php echo $_SESSION['syndis_eq_stock'];?> </h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Data od:</div> + <input class="form-control" id="form_datetime" type="text" name="rep013_from_date" value="<?php echo date('Y-m-').'01'; ?>"> + </div> + + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Data do:</div> + <input class="form-control" id="to_datetime" type="text" name="rep013_to_date" value="<?php echo date('Y-m-d'); ?>"> + </div> + + </div> + + <button id="butShow" type="button" class="btn btn-info" value="Generuj">Generuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_013_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_013_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep013", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>",post_date_f: $('#form_datetime').val(), post_date_t: $('#to_datetime').val(), file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + + } + ); + }); + + }); + + + $('#form_datetime').datepicker({ + format: 'yyyy-mm-dd', + weekStart: 1 + }); + + $('#to_datetime').datepicker({ + format: 'yyyy-mm-dd', + weekStart: 1 + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_013_xls.php b/reports/rep_013_xls.php new file mode 100644 index 0000000..1cb766c --- /dev/null +++ b/reports/rep_013_xls.php @@ -0,0 +1,92 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_agregaty_pompowe.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:O1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:O1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wymiana agregatów od '.$wellArray[0][0].' do '.$wellArray[0][1]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Nr wymiany'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Numer'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Numer'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Moc [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Data zabudowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Data wybudowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Czas pracy [h]'); +$objPHPExcel->getActiveSheet()->SetCellValue('L3', 'Powód wymiany'); +$objPHPExcel->getActiveSheet()->SetCellValue('M3', 'Głębokość LP [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('N3', 'Średnica DR [mm]'); +$objPHPExcel->getActiveSheet()->SetCellValue('O3', 'Kategoria'); + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][12]); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $wellArray[$i][13]); + $objPHPExcel->getActiveSheet()->SetCellValue('M'.($kolumna+$i), $wellArray[$i][14]); + $objPHPExcel->getActiveSheet()->SetCellValue('N'.($kolumna+$i), $wellArray[$i][15]); + $objPHPExcel->getActiveSheet()->SetCellValue('O'.($kolumna+$i), $wellArray[$i][16]); + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Wymaiana agregatów'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_014_pdf.php b/reports/rep_014_pdf.php new file mode 100644 index 0000000..faa3986 --- /dev/null +++ b/reports/rep_014_pdf.php @@ -0,0 +1,125 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['date'] = $wellArray[0][0]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Zabudowa studni na dzień '.$GLOBALS['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(9,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(17,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(17,5,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); + $this->Cell(17,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(17,5,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); + $this->Cell(17,5,iconv('utf-8','windows-1250','Numer'),1,0,'C'); + $this->Cell(24,5,iconv('utf-8','windows-1250','Głębokość Lp [m]'),1,0,'C'); + $this->Cell(24,5,iconv('utf-8','windows-1250','Data uruchomienia'),1,0,'C'); + $this->Cell(24,5,iconv('utf-8','windows-1250','Data wypięcia'),1,0,'C'); + $this->Cell(24,5,iconv('utf-8','windows-1250','Powód wypięcia'),1,0,'C'); + + $this->Ln(); + + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',6); + +$bariera = ""; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + if ($bariera!=$wellArray[$i][1]) + { + $pdf->SetFont('calibri','',8); + $pdf->Cell(0,4,iconv('utf-8','windows-1250','Bariera: '.$wellArray[$i][1]),1,0,'L'); + $bariera=$wellArray[$i][1]; + $pdf->Ln(); + $pdf->SetFont('calibri','',6); + } + + + $pdf->Cell(9,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'R'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(17,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'C'); + $pdf->Cell(24,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'R'); + $pdf->Cell(24,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'C'); + $pdf->Cell(24,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'C'); + $pdf->Cell(24,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'C'); + + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_014_print.php b/reports/rep_014_print.php new file mode 100644 index 0000000..e2b3b84 --- /dev/null +++ b/reports/rep_014_print.php @@ -0,0 +1,132 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Zabudowa studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker-time/css/bootstrap-datetimepicker.min.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + + <script type="text/javascript" src="./datepicker-time/js/bootstrap-datetimepicker.js" charset="UTF-8"></script> + <script type="text/javascript" src="./datepicker-time/js/locales/bootstrap-datetimepicker.pl.js" charset="UTF-8"></script> + + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep014"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); + +?> + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Zabudowa studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + <div class="form-group col-md-2"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Na dzień:</div> + <input class="form-control form_datetime" id="rep014_date" type="text" name="rep014_date" value="<?php echo date('Y-m-d H:i:').'00'; ?>"> + </div> + </div> + <button id="butShow" type="button" class="btn btn-info" value="Generuj">Generuj</button> + + + + </div> + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_014_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_014_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep014", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", post_date: $('#rep014_date').val(), file: "<?php echo $fileName; ?>"}).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + }); + }); + + $('.form_datetime').datetimepicker({ + weekStart: 1, + todayBtn: 1, + autoclose: 1, + todayHighlight: 1, + startView: 2, + forceParse: 0, + showMeridian: 1, + format: 'yyyy-mm-dd HH:ii:ss', + }); + + + }); + </script> + + +<div id="main_table"> +</div> + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_014_xls.php b/reports/rep_014_xls.php new file mode 100644 index 0000000..1c4ba32 --- /dev/null +++ b/reports/rep_014_xls.php @@ -0,0 +1,96 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_zabudowa_studnie.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:K1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:K1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Zabudowa studni na dzień '.$wellArray[0][0]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Typ pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Numer pompy'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Numer silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Głębokość zabudowy Lp [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Data uruchomienia'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Data wypięcia'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Powód wypięcia'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Kategoria'); + + + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + if ($bariera!=$wellArray[$i][1]) + { + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), 'Bariera: '.$wellArray[$i][1]); + $bariera=$wellArray[$i][1]; + $kolumna++; + } + + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][12]); + + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Zabudowa studni'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_015_pdf.php b/reports/rep_015_pdf.php new file mode 100644 index 0000000..7fdefa7 --- /dev/null +++ b/reports/rep_015_pdf.php @@ -0,0 +1,189 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); unset($line_of_text); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + //podsumowanie + unset($conArray); unset($line_of_text); + $file = fopen("../charts/".base64_decode($_GET['fm'])."_sum", "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($sumArray); + for ($i=0; $i<count($conArray); $i++) + $sumArray[] = explode('|', $conArray[$i]); + + + + + $GLOBALS['date'] = $wellArray[0][0]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Długość kabla wg typów wydanych i zabudowanych w studniach na dzień '.$GLOBALS['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Numer silnika'),1,0,'C'); + $this->Cell(20,5,iconv('utf-8','windows-1250','Napięcie [V]'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Data zlec.'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Typ kabla'),1,0,'C'); + $this->Cell(35,5,iconv('utf-8','windows-1250','Długość zlec. [m]'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Data zab.'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Długość [m]'),1,0,'C'); + $this->Cell(25,5,iconv('utf-8','windows-1250','Ciężar [kg]'),1,0,'C'); + + $this->Ln(); + + + + + + + + + + + + + + + + + + + + + + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +//$pdf->AddPage(); //190 +$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',6); + +$bariera = ""; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$wellArray[$i][1]),1,0,'R'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'C'); + $pdf->Cell(20,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'C'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'C'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'C'); + $pdf->Cell(35,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'C'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'C'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'C'); + $pdf->Cell(25,4,iconv('utf-8','windows-1250',$wellArray[$i][12]),1,0,'C'); + + $pdf->Ln(); + } +} + +$pdf->Ln(); +$pdf->Ln(); + +$pdf -> SetFont('Calibri_b', '', 10); +$pdf->Cell(0,5,iconv('utf-8','windows-1250','Podsumowanie'),0,0,'L'); +$pdf->Ln(); + +$pdf -> SetFont('calibri', '', 8); +$pdf->Cell(40,5,iconv('utf-8','windows-1250','Typ kabla'),1,0,'C'); +$pdf->Cell(60,5,iconv('utf-8','windows-1250','Suma [m] (Długość - zlecenie)'),1,0,'C'); +$pdf->Cell(60,5,iconv('utf-8','windows-1250','Suma [m] (Długość - zabudowa)'),1,0,'C'); +$pdf->Cell(60,5,iconv('utf-8','windows-1250','Suma [kg] (Ciężar - zabudowa)'),1,0,'C'); + + +$pdf->Ln(); +$pdf->SetFont('calibri','',6); +for ($i=0; $i<count($sumArray); $i++) +{ + + + if (strlen($sumArray[$i][0])>2) + { + $sumArray[$i][0] = str_replace(array(chr(10),chr(10)), array('',''), $sumArray[$i][0]); + + $pdf->Cell(40,4,iconv('utf-8','windows-1250',$sumArray[$i][0]),1,0,'C'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$sumArray[$i][1]),1,0,'R'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$sumArray[$i][2]),1,0,'R'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$sumArray[$i][3]),1,0,'R'); + $pdf->Ln(); + + } +} + + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_015_print.php b/reports/rep_015_print.php new file mode 100644 index 0000000..358218c --- /dev/null +++ b/reports/rep_015_print.php @@ -0,0 +1,114 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Długość kabla wg typów wydanych i zabudowanych w studniach</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + +<?php +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep015"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); +?> + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Długość kabla wg typów wydanych i zabudowanych w studniach <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + Na dzień: <?php echo date('Y-m-d H:i:s'); ?>&nbsp;&nbsp;&nbsp; + <button id="butShow" type="button" class="btn btn-info btn-sm" value="Generuj">Generuj</button> + </div> + + + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_015_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_015_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + $('#loader').show(); + + + $.post( "./ajax_gen_reports.php", { post_action: "rep015", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + }); + + </script> + + + +<div id="main_table"> +</div> + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_015_xls.php b/reports/rep_015_xls.php new file mode 100644 index 0000000..070fcf7 --- /dev/null +++ b/reports/rep_015_xls.php @@ -0,0 +1,120 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); unset($line_of_text); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + +//podsumowanie +unset($conArray); unset($line_of_text); +$file = fopen("../charts/".base64_decode($_GET['fm'])."_sum", "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($sumArray); +for ($i=0; $i<count($conArray); $i++) + $sumArray[] = explode('|', $conArray[$i]); + + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_dl_kabla_typ.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:L1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:L1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Długość kabla wg typów wydanych i zabudowanych w studniach na dzień '.$wellArray[0][0]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Studnia'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Typ silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'Numer silnika'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Napięcie [V]'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'Data zlecenia'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'Typ kabla'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'Długość - zlecenie [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'Data zabudowy'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Długość [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('L3', 'Ciężar [kg]'); + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $wellArray[$i][12]); + + } +} + +$kolumna = $kolumna + $i + 2; + +$objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna), 'Typ kabla'); +$objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna), 'Suma [m] (Długość - zlecenie)'); +$objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna), 'Suma [m] (Długość - zabudowa)'); +$objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna), 'Suma [kg] (Ciężar - zabudowa)'); + +$kolumna++; + +for ($i=0; $i<count($sumArray); $i++) +{ + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $sumArray[$i][0]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $sumArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $sumArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $sumArray[$i][3]); + +} + + +$objPHPExcel->getActiveSheet()->setTitle('Długość kabla wg typów'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_016_pdf.php b/reports/rep_016_pdf.php new file mode 100644 index 0000000..201624e --- /dev/null +++ b/reports/rep_016_pdf.php @@ -0,0 +1,121 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['date'] = $wellArray[0][0]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Długość kolektorów tłocznych wg średnic na barierach na dzień '.$GLOBALS['date']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 10); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(60,5,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(60,5,iconv('utf-8','windows-1250','Średnica kol. tłocznego [mm]'),1,0,'C'); + $this->Cell(60,5,iconv('utf-8','windows-1250','Suma długość kol. tłocznych [m]'),1,0,'C'); + + $this->Ln(); + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(177,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',8); + +$bariera = ""; +$isRazem=0; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + if ($wellArray[$i][1]=='RAZEM' && $isRazem==0) + { + $pdf->Ln(); + $pdf->Ln(); + $isRazem=1; + } + + if ($isRazem==0) + { + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$wellArray[$i][1]),1,0,'R'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$wellArray[$i][2]),1,0,'C'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'R'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'R'); + + $pdf->Ln(); + } + else + { + $pdf->Cell(70,4,iconv('utf-8','windows-1250',$wellArray[$i][1]),1,0,'R'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$wellArray[$i][3]),1,0,'R'); + $pdf->Cell(60,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'R'); + + $pdf->Ln(); + } + + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_016_print.php b/reports/rep_016_print.php new file mode 100644 index 0000000..3f90266 --- /dev/null +++ b/reports/rep_016_print.php @@ -0,0 +1,113 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Długość kolektorów tłocznych wg średnic na barierach</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> +<?php +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep016"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); +?> + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Długość kolektorów tłocznych wg średnic na barierach <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + Na dzień: <?php echo date('Y-m-d'); ?>&nbsp;&nbsp;&nbsp; + <button id="butShow" type="button" class="btn btn-info btn-sm" value="Generuj">Generuj</button> + </div> + + + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_016_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but3" class="btn btn-danger" href="./rep_016_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + $('#loader').show(); + + + $.post( "./ajax_gen_reports.php", { post_action: "rep016", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + + }); + + }); + + </script> + + + +<div id="main_table"> +</div> + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_016_xls.php b/reports/rep_016_xls.php new file mode 100644 index 0000000..dc788e3 --- /dev/null +++ b/reports/rep_016_xls.php @@ -0,0 +1,72 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_dl_kol_bar.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:D1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Długość kolektorów tłocznych wg średnic na barierach na dzień '.$wellArray[0][0]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Bariera'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'Średnica kol. tłocznego [mm]'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'Suma długość kol. tłocznych [m]'); + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][1])) + { + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + + + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Długość kolektorów tłocznych'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_017_pdf.php b/reports/rep_017_pdf.php new file mode 100644 index 0000000..4911602 --- /dev/null +++ b/reports/rep_017_pdf.php @@ -0,0 +1,122 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + + //pobiera informacje z pliku o zawartości raportu + unset($conArray); + $file = fopen("../charts/".base64_decode($_GET['fm']), "r"); + $i = 0; + while (!feof($file)) { + $line_of_text .= fgets($file); + } + $conArray = explode(chr(13), $line_of_text); + fclose($file); + + unset($wellArray); + for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + $GLOBALS['name'] = $wellArray[0][0]; + $GLOBALS['df'] = $wellArray[0][2]; + $GLOBALS['dt'] = $wellArray[0][3]; + + +class PDF extends FPDF +{ +// Page header + function Header() + { + if ( $this->PageNo() == 1 ) + { + $this->Image('../images/logo_head_pge.jpg',10,8,71); + $this->Ln(15); + + $this -> SetFont('Calibri_b', '', 11); + $this->Cell(0,5,iconv('utf-8','windows-1250','Dział Odwodnienia'),0,1,'R'); + $this->Cell(0,4,iconv('utf-8','windows-1250','Oddział Odwodnienia '.str_replace('Dębina', 'P/Bełchatów - bariera ochronna Dębina', $_SESSION['syndis_eq_stock'])),0,1,'R'); + $this->Ln(); + + $this -> SetFont('Calibri_b', '', 10); + $title = iconv('utf-8','windows-1250','Historia pomiarów studni '.$GLOBALS['name'].' za okres od: '.$GLOBALS['df'].' do: '.$GLOBALS['dt']); + $this->Cell(0,4,$title,0,0,'L'); + $this->Ln(); + } + + $this -> SetFont('calibri', '', 8); + $this->Cell(10,5,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(24,5,iconv('utf-8','windows-1250','Data'),1,0,'C'); + $this->Cell(13,5,iconv('utf-8','windows-1250','HST0 [m]'),1,0,'C'); + $this->Cell(13,5,iconv('utf-8','windows-1250','HST [m]'),1,0,'C'); + $this->Cell(13,5,iconv('utf-8','windows-1250','HD [m]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','Q [m3/min]'),1,0,'C'); + $this->Cell(12,5,iconv('utf-8','windows-1250','p1 [m]'),1,0,'C'); + $this->Cell(12,5,iconv('utf-8','windows-1250','p2 [m]'),1,0,'C'); + $this->Cell(13,5,iconv('utf-8','windows-1250','I [A]'),1,0,'C'); + $this->Cell(13,5,iconv('utf-8','windows-1250','U [V]'),1,0,'C'); + $this->Cell(13,5,iconv('utf-8','windows-1250','Pe [kW]'),1,0,'C'); + $this->Cell(11,5,iconv('utf-8','windows-1250','cos (fi)'),1,0,'C'); + $this->Cell(13,5,iconv('utf-8','windows-1250','T [h]'),1,0,'C'); + $this->Cell(15,5,iconv('utf-8','windows-1250','V [m3]'),1,0,'C'); + + $this->Ln(); + + + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Calibri_i','',6); + // Page number + $this->Cell(50,10,iconv('utf-8','windows-1250','© SoftSPM, '.date('Y')),0,0,'L'); + $this->Cell(90,10,'www.softspm.com',0,0,'C'); + $this->Cell(50,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('calibri','','calibri.php'); +$pdf->AddFont('Calibri_b','','Calibri_b.php'); +$pdf->AddFont('Calibri_i','','Calibri_i.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); //190 +//$pdf->AddPage('L'); //277 + +$pdf->SetFont('calibri','',7); + + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][2])) + { + $pdf->Cell(10,4,iconv('utf-8','windows-1250',$i+1),1,0,'R'); + $pdf->Cell(24,4,iconv('utf-8','windows-1250',$wellArray[$i][4]),1,0,'C'); + $pdf->Cell(13,4,iconv('utf-8','windows-1250',$wellArray[$i][5]),1,0,'R'); + $pdf->Cell(13,4,iconv('utf-8','windows-1250',$wellArray[$i][6]),1,0,'R'); + $pdf->Cell(13,4,iconv('utf-8','windows-1250',$wellArray[$i][7]),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][8]),1,0,'R'); + $pdf->Cell(12,4,iconv('utf-8','windows-1250',$wellArray[$i][9]),1,0,'R'); + $pdf->Cell(12,4,iconv('utf-8','windows-1250',$wellArray[$i][10]),1,0,'R'); + $pdf->Cell(13,4,iconv('utf-8','windows-1250',$wellArray[$i][11]),1,0,'R'); + $pdf->Cell(13,4,iconv('utf-8','windows-1250',$wellArray[$i][12]),1,0,'R'); + $pdf->Cell(13,4,iconv('utf-8','windows-1250',$wellArray[$i][13]),1,0,'R'); + $pdf->Cell(11,4,iconv('utf-8','windows-1250',$wellArray[$i][14]),1,0,'R'); + $pdf->Cell(13,4,iconv('utf-8','windows-1250',$wellArray[$i][15]),1,0,'R'); + $pdf->Cell(15,4,iconv('utf-8','windows-1250',$wellArray[$i][16]),1,0,'R'); + + $pdf->Ln(); + + } +} + + + +$pdf->Output(); +?> + + diff --git a/reports/rep_017_print.php b/reports/rep_017_print.php new file mode 100644 index 0000000..7111736 --- /dev/null +++ b/reports/rep_017_print.php @@ -0,0 +1,204 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Historia pomiarów studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +if (!empty($_GET['param'])) +{ + unset($paramArray); + $paramArray = explode(',', $_GET['param']); +} +if (strlen($_POST['drsID'])>0) $paramArray[0]=$_POST['drsID']; +if (strlen($_POST['rep017_date_f'])>8) $paramArray[1]=$_POST['rep017_date_f']; +if (strlen($_POST['rep017_date_t'])>8) $paramArray[2]=$_POST['rep017_date_t']; + +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep017"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); +?> + + +<form action="./rep_017_print.php?param=<?php echo $_GET['param']; ?>" method="post"> +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Historia pomiarów studni</h3> + </div> + <div class="panel-body"> + + <div class="form-group col-md-3"> + <label class="sr-only" for="exampleInputAmount"></label> + <div class="input-group"> + <div class="input-group-addon">Studnia:</div> + + <select class="form-control" name="drsID" id="drsID"> + + <?php + unset($expArray); + $expArray = sqlGetResAsArray("select DRS_ID,WLL_NAME from seg_wells,seg_dev_resources where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID=3 order by WLL_NAME"); + echo'<option value="-1">Studnie w eksploatacji</option>'; + for ($i=0; $i<count($expArray);$i++) + { + if ($_POST['drsID']==$expArray[$i]['DRS_ID'] || ($paramArray[0]>0 && $paramArray[0]==$expArray[$i]['DRS_ID'])) + echo"<option value='".$expArray[$i]['DRS_ID']."' selected>".$expArray[$i]['WLL_NAME']."</option>"; + else + echo"<option value='".$expArray[$i]['DRS_ID']."'>".$expArray[$i]['WLL_NAME']."</option>"; + } + echo'<option value="-1"></option>'; + + + + unset($outArray); + $outArray = sqlGetResAsArray("select DRS_ID,WLL_NAME from seg_wells,seg_dev_resources where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID=4 order by WLL_NAME"); + echo'<option value="-1">Studnie zdjęte z eksploatacji</option>'; + for ($i=0; $i<count($outArray);$i++) + { + if ($_POST['drsID']==$outArray[$i]['DRS_ID'] || ($paramArray[0]>0 && $paramArray[0]==$outArray[$i]['DRS_ID'])) + echo"<option value='".$outArray[$i]['DRS_ID']."' selected>".$outArray[$i]['WLL_NAME']."</option>"; + else + echo"<option value='".$outArray[$i]['DRS_ID']."'>".$outArray[$i]['WLL_NAME']."</option>"; + } + + ?> + + </select> + </div> + </div> + <div class="form-group col-md-2"> + <label class="sr-only" for="dataOD"></label> + <div class="input-group"> + <div class="input-group-addon">Data od</div> + <input type="text" class="form-control" id="dataOD" name="rep017_date_f" value="<?php echo $paramArray[1]; ?>"> + </div> + </div> + + <div class="form-group col-md-2"> + <label class="sr-only" for="dataDO"></label> + <div class="input-group"> + <div class="input-group-addon">Data do</div> + <input type="text" class="form-control" id="dataDO" name="rep017_date_t" value="<?php echo $paramArray[2]; ?>"> + </div> + </div> + + + <button id="butShow" type="submit" class="btn btn-info" value="Generuj">Generuj</button> + + + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="./rep_017_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="./rep_017_pdf.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> +</form> + + +<?php +mysql_close($polacz); +?> + + <script src="./bootstrap.min.js"></script> + <link href="../style/select2.min.css" rel="stylesheet" /> + <script src="../js/select2.min.js"></script> + + <script> + $('#drsID').select2(); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#loader').show(); + }); + + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "rep017", done: "create", well: "<?php echo $paramArray[0]; ?>",file: "<?php echo $fileName; ?>",date_f: "<?php echo $paramArray[1];?>",date_t: "<?php echo $paramArray[2];?>"}).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + $('#butShow').prop('disabled', false); + } + ); + }); + + $('#dataOD').datepicker({ + format: 'yyyy-mm-dd', + autoclose: true, + weekStart: 1 + }); + $('#dataDO').datepicker({ + format: 'yyyy-mm-dd', + autoclose: true, + weekStart: 1 + }); + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_017_xls.php b/reports/rep_017_xls.php new file mode 100644 index 0000000..b0b7e9b --- /dev/null +++ b/reports/rep_017_xls.php @@ -0,0 +1,95 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_historia_pomiarow.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:N1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:N1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Historia pomiarów studni '.$wellArray[0][0]); + + +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:N2'); +$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Okres od '.$wellArray[0][2].' do '.$wellArray[0][3]); + + +$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'Lp.'); +$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'Data'); +$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'HST0 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('D3', 'HST [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('E3', 'HD [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('F3', 'Q [m3/min]'); +$objPHPExcel->getActiveSheet()->SetCellValue('G3', 'p1 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('H3', 'p2 [m]'); +$objPHPExcel->getActiveSheet()->SetCellValue('I3', 'I [A]'); +$objPHPExcel->getActiveSheet()->SetCellValue('J3', 'U [V]'); +$objPHPExcel->getActiveSheet()->SetCellValue('K3', 'Pe [kW]'); +$objPHPExcel->getActiveSheet()->SetCellValue('L3', 'cos (fi)'); +$objPHPExcel->getActiveSheet()->SetCellValue('M3', 'Czas pracy [h]'); +$objPHPExcel->getActiveSheet()->SetCellValue('N3', 'Ilość wody [m3]'); + + +$kolumna = 4; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (!empty($wellArray[$i][2])) + { + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][6]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][7]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][8]); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kolumna+$i), $wellArray[$i][9]); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kolumna+$i), $wellArray[$i][10]); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kolumna+$i), $wellArray[$i][11]); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kolumna+$i), $wellArray[$i][12]); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kolumna+$i), $wellArray[$i][13]); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kolumna+$i), $wellArray[$i][14]); + $objPHPExcel->getActiveSheet()->SetCellValue('M'.($kolumna+$i), $wellArray[$i][15]); + $objPHPExcel->getActiveSheet()->SetCellValue('N'.($kolumna+$i), $wellArray[$i][16]); + + } + +} + +$objPHPExcel->getActiveSheet()->setTitle('Historia pomiarów'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_021_print.php b/reports/rep_021_print.php new file mode 100644 index 0000000..1463923 --- /dev/null +++ b/reports/rep_021_print.php @@ -0,0 +1,115 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Raport orurowania i armatury</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> +<?php +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep021"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Raport orurowania i armatury <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + Na dzień: <?php echo date('Y-m-d'); ?>&nbsp;&nbsp;&nbsp; + <button id="butShow" type="button" class="btn btn-info btn-sm" value="Generuj">Generuj</button> + </div> + + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_021_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + </div> +</div> + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep021", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + + + + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_021_xls.php b/reports/rep_021_xls.php new file mode 100644 index 0000000..9be383f --- /dev/null +++ b/reports/rep_021_xls.php @@ -0,0 +1,98 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_rury_.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:F1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Raport orurowania i armatury na dzień '.$wellArray[1][0]); + + + + +$kolumna = 2; +$head=''; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0]) == '#HEAD#') + { + $head = '#HEAD#'; + $kolumna++; + } + elseif (str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0]) == '#GOODS_HEAD#') + { + $head = '#GOODS_HEAD#'; + $kolumna++; + } + elseif (str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0]) == '#GOODS#') + $head = '#GOODS#'; + + + + + + if ($head == '#HEAD#') + { + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][5]); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kolumna+$i), $wellArray[$i][6]); + } + elseif ($head == '#GOODS_HEAD#') + { + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':D'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][2]); + } + elseif ($head == '#GOODS#') + { + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + } + + +} + +$objPHPExcel->getActiveSheet()->setTitle('Raport orurowania i armatury'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_022_print.php b/reports/rep_022_print.php new file mode 100644 index 0000000..f9a49fe --- /dev/null +++ b/reports/rep_022_print.php @@ -0,0 +1,112 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Raport opomiarowania</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> +<?php +$fileName=base64_encode($_SESSION['user']."_".date("YmdHis")."_rep022"); +//base64_encode($_GET['dev']); +//base64_decode($_GET['dev']); +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Raport opomiarowania <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + Na dzień: <?php echo date('Y-m-d'); ?>&nbsp;&nbsp;&nbsp; + <button id="butShow" type="button" class="btn btn-info btn-sm" value="Generuj">Generuj</button> + </div> + + <div class="panel-footer"> + <a id="but1" class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a id="but2" class="btn btn-success" href="./rep_022_xls.php?fm=<?php echo $fileName; ?>" target="_blank" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + </div> +</div> + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + $('#loader').hide(); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + + $('#butShow').click(function() { + $('#butShow').prop('disabled', true); + $('#but1').prop('disabled', true); + $('#but2').prop('disabled', true); + $('#but3').prop('disabled', true); + $('#loader').show(); + + $.post( "./ajax_gen_reports.php", { post_action: "rep022", done: "create", dep: "<?php echo $_SESSION['syndis_eq_stock'];?>", file: "<?php echo $fileName; ?>" }).done(function(data) + { + $('#main_table').html(data); + $('#butShow').prop('disabled', false); + $('#loader').hide(); + $('#but1').prop('disabled', false); + $('#but2').prop('disabled', false); + $('#but3').prop('disabled', false); + } + ); + }); + +}); + +</script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> \ No newline at end of file diff --git a/reports/rep_022_xls.php b/reports/rep_022_xls.php new file mode 100644 index 0000000..37d2b7f --- /dev/null +++ b/reports/rep_022_xls.php @@ -0,0 +1,96 @@ +<?php session_start(); + + +require_once '../PHPExcel.php'; + + +//pobiera informacje z pliku o zawartości raportu +unset($conArray); +$file = fopen("../charts/".base64_decode($_GET['fm']), "r"); +$i = 0; +while (!feof($file)) { + $line_of_text .= fgets($file); +} +$conArray = explode(chr(13), $line_of_text); +fclose($file); + +unset($wellArray); +for ($i=0; $i<count($conArray); $i++) + $wellArray[] = explode('|', $conArray[$i]); + + + +header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); +header('Content-Disposition: attachment;filename="'.date("Y-m-d").'_opomiarowanie_.xlsx"'); +header('Cache-Control: max-age=0'); + +$styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16, + 'color' => array('rgb' => 'B22222') + )); +$styleArray1 = array( + 'font' => array( + 'bold' => true, + )); + +$objPHPExcel = new PHPExcel(); +$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:E1'); +$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); +$objPHPExcel->getActiveSheet()->getStyle('A1:E1')->applyFromArray($styleArray); +$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Raport opomiarowania na dzień '.$wellArray[1][0]); + + + + +$kolumna = 2; +$head=''; + +for ($i=0; $i<count($wellArray); $i++) +{ + if (str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0]) == '#HEAD#') + { + $head = '#HEAD#'; + $kolumna++; + } + elseif (str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0]) == '#GOODS_HEAD#') + { + $head = '#GOODS_HEAD#'; + $kolumna++; + } + elseif (str_replace(array(chr(10),chr(13)), array('',''), $wellArray[$i][0]) == '#GOODS#') + $head = '#GOODS#'; + + + + + + if ($head == '#HEAD#') + { + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + } + elseif ($head == '#GOODS_HEAD#') + { + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A'.($kolumna+$i).':D'.($kolumna+$i)); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][2]); + } + elseif ($head == '#GOODS#') + { + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kolumna+$i), $wellArray[$i][1]); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kolumna+$i), $wellArray[$i][2]); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kolumna+$i), $wellArray[$i][3]); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kolumna+$i), $wellArray[$i][4]); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kolumna+$i), $wellArray[$i][5]); + } + + +} + +$objPHPExcel->getActiveSheet()->setTitle('Raport opomiarowania'); +$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +$objWriter->save('php://output'); +exit; +?> \ No newline at end of file diff --git a/reports/rep_023_print.php b/reports/rep_023_print.php new file mode 100644 index 0000000..9458573 --- /dev/null +++ b/reports/rep_023_print.php @@ -0,0 +1,86 @@ +<?php @ob_start(); session_start();?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Raport synchronizacji danych ze Stacją Prób</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + <script src="./jquery.min.js"></script> + <script src="./datepicker/js/bootstrap-datepicker.js"></script> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + +</head> +<body> +<div id="loader"></div> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Raport synchronizacji danych ze Stacją Prób</h3> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + </div> +</div> + + <script src="./bootstrap.min.js"></script> + <script> + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_gen_reports.php", { post_action: "rep023", done: "create" }).done(function(data) + { + $('#main_table').html(data); + $('#loader').hide(); + } + ); + }); + + </script> + + + +<div id="main_table"> +</div> + + + + + + + +</body> +</html> +<?php ob_end_flush();?> diff --git a/reports/rep_024_print.php b/reports/rep_024_print.php new file mode 100644 index 0000000..6dfbc38 --- /dev/null +++ b/reports/rep_024_print.php @@ -0,0 +1,111 @@ +<?php session_start();?> +<?php +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Raport agregatów aktualnie zarezerwowanych do Zleceń</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + + + + +</head> +<body> +<div id="loader"></div> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Raport agregatów aktualnie zarezerwowanych do Zleceń</h3> + </div> + <div class="panel-footer"> + <a class="btn btn-info" href="../?pg=site809" role="button" >Wróć</a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + </div> +</div> + + + + + +<div> + + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Numer zlecenia</th> + <th>Studnia</th> + <th>Wybudowana pompa</th> + <th>Wybudowany silnik</th> + <th>Zabudowywana pompa</th> + <th>Zabudowywany silnik</th> + <th>Średnica kolektora</th> + <th>Data utworzenia</th> + <th>Oddział</th> + <th></th> + </tr> + </thead> + +<?php + +$rep021Array = sqlGetResAsArray("select * from seg_order_new_agg_params,seg_orders left join seg_dev_resources on DRS_ID=ORD_DRS_ID LEFT JOIN seg_order_obj_params on OWP_ORD_ID=ORD_ID where ONA_ORD_ID=ORD_ID and ONA_PUMP_DRS_ID is not null and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by ORD_AUDIT_DATE desc, ORD_OBJ_NAME"); +for ($i=0; $i<count($rep021Array); $i++) +{ + if (strlen($rep021Array[$i]['OWP_PUMP'])<7) + { + $rep021Array[$i]['OWP_PUMP']=""; + $rep021Array[$i]['OWP_ENG']=""; + } + + echo' + <tr> + <td>'.($i+1).'</td> + <td>'.$rep021Array[$i]['ORD_NO'].'</td> + <td>'.$rep021Array[$i]['ORD_OBJ_NAME'].'</td> + <td>'.$rep021Array[$i]['OWP_PUMP'].'</td> + <td>'.$rep021Array[$i]['OWP_ENG'].'</td> + <td>'.$rep021Array[$i]['ONA_PUMP'].'</td> + <td>'.$rep021Array[$i]['ONA_ENG'].'</td> + <td>'.$rep021Array[$i]['ONA_SRED_KOL'].'</td> + <td>'.$rep021Array[$i]['ORD_AUDIT_DATE'].'</td> + <td>'.$rep021Array[$i]['DRS_DEPARTMENT'].'</td> + <td><a href="../?pg=site810inf&id='.$rep021Array[$i]['ORD_ID'].'" title="Szczegóły"><span class="glyphicon glyphicon-circle-arrow-right" aria-hidden="true"></span></a></td> + <tr> + '; +} +?> + + </table> + +</div> + + + + + + + + +</body> +</html> +<?php +mysql_close($con); +?> + diff --git a/reports/rep_025_print.php b/reports/rep_025_print.php new file mode 100644 index 0000000..9c8d9cf --- /dev/null +++ b/reports/rep_025_print.php @@ -0,0 +1,149 @@ +<?php session_start();?> +<?php +require_once'../func.php'; +require_once'../dbaccess.php'; +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function realTime($inParam_od,$inParam_do) +{ + unset($outParam); + + if (strlen($inParam_do)<8) $inParam_do=date('Y-m-d H:i:s'); + + $inParam = (strtotime($inParam_do) - strtotime($inParam_od)); + + $hour = floor($inParam/3600); + $min = $inParam - ($hour*3600); + $min = floor($min/60); + $sek = $inParam - ($hour*3600) - ($min*60); + + + if ($hour<10) $hour = "0".$hour; + if ($min<10) $min = "0".$min; + if ($sek<10) $sek = "0".$sek; + + $outParam = $hour.":".$min.":".$sek; + return $outParam; +} + + +?> +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Raport – zestawienie braku łączności/komunikacji</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + <link href="./datepicker/css/datepicker.css" rel="stylesheet"> + + + + + +</head> +<body> +<div id="loader"></div> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Raport – zestawienie (wraz z historią) braku łączności/komunikacji z poszczególnymi studniami </i>NOTREALIABLE</i></h3> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + </div> +</div> + + + + + +<div> + + <table class="table table-bordered" > + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Data rejestracji zdarzenia</th> + <th>Flaga rejestracji</th> + <th>Data zakończenia zdarzenia</th> + <th>Flaga zakończenia</th> + <th>Czas trwania [gg:mm:ss]</th> + </tr> + </thead> + +<?php + +if (empty($_GET['sh'])) $limit = ' limit 100'; +else unset($limit); + +unset($rep021Array); +$rep021Array = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff,seg_dev_resources where DRS_ID=NOT_DRS_ID and NOT_END_DATE is null and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by NOT_WELL_NAME, NOT_AUDIT_WHEN_DATE"); +for ($i=0; $i<count($rep021Array); $i++) +{ + echo' + <tr> + <td>'.($i+1).'</td> + <td>'.$rep021Array[$i]['NOT_WELL_NAME'].'</td> + <td>'.$rep021Array[$i]['NOT_AUDIT_WHEN_DATE'].'</td> + <td>'.$rep021Array[$i]['NOT_WHEN_FLAG'].'</td> + <td>'.$rep021Array[$i]['NOT_AUDIT_END_DATE'].'</td> + <td>'.$rep021Array[$i]['NOT_END_FLAG'].'</td> + <td>'.realTime($rep021Array[$i]['NOT_AUDIT_WHEN_DATE'],$rep021Array[$i]['NOT_AUDIT_END_DATE']).'</td> + + <tr> + '; +} + +echo'<tr><td clospan="7"><br/><br/><b>Historia z przywróconą transmisją</b></td></tr>'; + +unset($rep021Array); +$rep021Array = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff,seg_dev_resources where DRS_ID=NOT_DRS_ID and NOT_END_DATE is not null and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by NOT_WELL_NAME, NOT_AUDIT_WHEN_DATE desc ".$limit); +for ($i=0; $i<count($rep021Array); $i++) +{ + echo' + <tr> + <td>'.($i+1).'</td> + <td>'.$rep021Array[$i]['NOT_WELL_NAME'].'</td> + <td>'.$rep021Array[$i]['NOT_AUDIT_WHEN_DATE'].'</td> + <td>'.$rep021Array[$i]['NOT_WHEN_FLAG'].'</td> + <td>'.$rep021Array[$i]['NOT_AUDIT_END_DATE'].'</td> + <td>'.$rep021Array[$i]['NOT_END_FLAG'].'</td> + <td>'.realTime($rep021Array[$i]['NOT_AUDIT_WHEN_DATE'],$rep021Array[$i]['NOT_AUDIT_END_DATE']).'</td> + + <tr> + '; +} + + +?> + + </table> + +</div> + +<div> +<a href="./rep_025_print.php?sh=all" class="btn btn-primary" role="button">Pokaż całą historię</a> +</div> +<br/><br/> + + + + + +</body> +</html> +<?php +mysql_close($con); +?> + diff --git a/reports/site407.php b/reports/site407.php new file mode 100644 index 0000000..021235d --- /dev/null +++ b/reports/site407.php @@ -0,0 +1,73 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php + +unset($offArray); +if (empty($_GET['more'])) + $offArray = sqlGetResAsArray("SELECT * FROM rep_zrzut_wody WHERE RZW_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' ORDER BY RZW_AUDIT_DATE DESC LIMIT 20"); +else + $offArray = sqlGetResAsArray("SELECT * FROM rep_zrzut_wody WHERE RZW_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' ORDER BY RZW_AUDIT_DATE DESC"); + + +?> + + + <div class="tag100"> + <div class="head_tag">Zrzut wody - rejestr - <?php echo $_SESSION['syndis_eq_stock']; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label" rowspan="2">Nr</TD> + <TD class="label" rowspan="2">Data</TD> + <TD class="label" colspan="2">Widawka</TD> + <TD class="label" colspan="2">Krasówka</TD> + </TR> + <TR> + <TD class="label">m<sup>3/</sup>min</TD> + <TD class="label">m<sup>3/</sup>h</TD> + <TD class="label">m<sup>3/</sup>min</TD> + <TD class="label">m<sup>3/</sup>h</TD> + </TR> + + <?php + for ($i=0; $i<count($offArray); $i++) + { + + + echo" + <tr> + <TD class='field_left'>".($i+1)."</TD> + <TD class='field_center'>".$offArray[$i]['RZW_AUDIT_DATE']."</TD> + <TD class='field_center'>".$offArray[$i]['RZW_WIDAWKA']."</TD> + <TD class='field_center'>".($offArray[$i]['RZW_WIDAWKA']*60)."</TD> + <TD class='field_center'>".$offArray[$i]['RZW_KRASOWKA']."</TD> + <TD class='field_center'>".($offArray[$i]['RZW_KRASOWKA']*60)."</TD> + </tr> + "; + + + + } + + if (empty($_GET['more']) && count($offArray)>19) + { + + echo"<tr><TD class='field_left' colspan='6'><a href='./?pg=site407&more=1'>Pokaż więcej</a></TD></tr>"; + } + ?> + + + + </table> + </div> + + </div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/reportsrep_002_pdf.php b/reportsrep_002_pdf.php new file mode 100644 index 0000000..b45d7f5 --- /dev/null +++ b/reportsrep_002_pdf.php @@ -0,0 +1,72 @@ +<?php session_start(); + +require_once('../fpdf/fpdf.php'); + +class PDF extends FPDF +{ +// Page header + function Header() + { + // Arial bold 15 + $this -> SetFont('arial_ce', 'B', 15); + // Title + $title = iconv('utf-8','windows-1250','Lista studni'); + $this->Cell(0,10,$title,0,0,'L'); + // Line break + $this->Ln(15); + } + +// Page footer + function Footer() + { + // Position at 1.5 cm from bottom + $this->SetY(-15); + // Arial italic 8 + $this->SetFont('Arial','I',8); + // Page number + $this->Cell(0,10,'Strona '.$this->PageNo().'/{nb}',0,0,'R'); + } +} + +// Instanciation of inherited class +$pdf = new PDF(); +$pdf->AddFont('arial_ce','','arial_ce.php'); +$pdf->AddFont('arial_ce','I','arial_ce_i.php'); +$pdf->AddFont('arial_ce','B','arial_ce_b.php'); +$pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + +$pdf->AliasNbPages(); +$pdf->AddPage(); + +$pdf->SetLineWidth(.1); +$pdf -> SetFont('arial_ce', 'B', 8); +$pdf->Cell(15,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); +$pdf->Cell(15,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); +$pdf->Cell(20,7,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Nr pompy'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); +$pdf->Cell(25,7,iconv('utf-8','windows-1250','Nr silnika'),1,0,'C'); +$pdf->Cell(40,7,iconv('utf-8','windows-1250','Opis'),1,0,'C'); +$pdf->Ln(); + +$pdf -> SetFont('arial_ce', '', 7); + +for($i=0;$i<count($_SESSION['site401_array']);$i++) +{ + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['well_name']),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['bariera']),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['pup_name']),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['pup_no']),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['eng_name']),1,0,'C'); + $pdf->Cell(25,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['eng_no']),1,0,'C'); + $pdf->Cell(40,7,iconv('utf-8','windows-1250',$_SESSION['site401_array'][$i]['desc']),1,0,'C'); + $pdf->Ln(); + + +} +$pdf->Output(); +?> + + diff --git a/rollback.php b/rollback.php new file mode 100644 index 0000000..85c11c1 --- /dev/null +++ b/rollback.php @@ -0,0 +1,105 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <!-- Bootstrap --> + +<meta http-equiv="Refresh" content="1" /> + +</head> +<body> + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +$con = mysql_connect('localhost', 'root', 'visia2209');mysql_select_db('test'); + +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +unset($wellArray); +$wellArray = sqlGetResAsArray("select * from all_wells where STATUS=0 limit 1"); + +echo $wellArray[0]['WELL']; +echo"<br/><br/>"; + + +unset($array_01); +$array_01 = sqlGetResAsArray("select * from all_well_date where WELL='".$wellArray[0]['WELL']."'"); +for ($i=0; $i<count($array_01); $i++) +{ + + unset($array_02); + $array_02 = sqlGetResAsArray(" + select * from `1` where `WELL`='".$wellArray[0]['WELL']."' and `DATE_TIME`='".$array_01[$i]['DATE_TIME']."' and `TYPE` in ('spm:I1','spm:P','spm:p1','spm:p2','spm:Tw','spm:U12','spm:V','spm:Hd','spm:Hs','spm:Q') + union + select * from `2` where `WELL`='".$wellArray[0]['WELL']."' and `DATE_TIME`='".$array_01[$i]['DATE_TIME']."' and `TYPE` in ('spm:I1','spm:P','spm:p1','spm:p2','spm:Tw','spm:U12','spm:V','spm:Hd','spm:Hs','spm:Q') + union + select * from `3` where `WELL`='".$wellArray[0]['WELL']."' and `DATE_TIME`='".$array_01[$i]['DATE_TIME']."' and `TYPE` in ('spm:I1','spm:P','spm:p1','spm:p2','spm:Tw','spm:U12','spm:V','spm:Hd','spm:Hs','spm:Q') + union + select * from `4` where `WELL`='".$wellArray[0]['WELL']."' and `DATE_TIME`='".$array_01[$i]['DATE_TIME']."' and `TYPE` in ('spm:I1','spm:P','spm:p1','spm:p2','spm:Tw','spm:U12','spm:V','spm:Hd','spm:Hs','spm:Q') + union + select * from `5` where `WELL`='".$wellArray[0]['WELL']."' and `DATE_TIME`='".$array_01[$i]['DATE_TIME']."' and `TYPE` in ('spm:I1','spm:P','spm:p1','spm:p2','spm:Tw','spm:U12','spm:V','spm:Hd','spm:Hs','spm:Q') + "); + + + if (count($array_02)>0) + { + unset($spmI1); unset($spmP); unset($spmp1); unset($spmp2); unset($spmTw); unset($spmU12); unset($spmV); + unset($spmHd); unset($spmHs); unset($spmQ); + + + for ($j=0; $j<count($array_02); $j++) + { + + if ($array_02[$j]['TYPE']=='spm:I1') $spmI1 = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:P') $spmP = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:p1') $spmp1 = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:p2') $spmp2 = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:Tw') $spmTw = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:U12') $spmU12 = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:V') $spmV = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:Hd') $spmHd = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:Hs') $spmHs = $array_02[$j]['VALUE']; + elseif ($array_02[$j]['TYPE']=='spm:Q') $spmQ = $array_02[$j]['VALUE']; + } + + if ($spmQ>0) + { + $spmQ = round($spmQ*60,3); + mysql_query("INSERT INTO all_well_measurment SET WELL='".$wellArray[0]['WELL']."' + ,DATE_TIME='".$array_01[$i]['DATE_TIME']."' + ,WLM_I1='".$spmI1."' + ,WLM_P='".$spmP."' + ,WLM_p1='".$spmp1."' + ,WLM_p2='".$spmp2."' + ,WLM_Tw='".$spmTw."' + ,WLM_U12='".$spmU12."' + ,WLM_V='".$spmV."' + ,WLM_Hd='".$spmHd."' + ,WLM_Hs='".$spmHs."' + ,WLM_Q='".$spmQ."' + "); + + echo"Wstawił Q= ".$spmQ."<br/>"; + } + + } + + + +} + + + + + +mysql_query("UPDATE all_wells SET STATUS=1 WHERE WELL='".$wellArray[0]['WELL']."'"); + +mysql_close($con); + + + +?> \ No newline at end of file diff --git a/sites/backup/20171026_site303.php b/sites/backup/20171026_site303.php new file mode 100644 index 0000000..43a7363 --- /dev/null +++ b/sites/backup/20171026_site303.php @@ -0,0 +1,267 @@ +<?php +if (!empty($_SESSION['site303'])) +{ +?> + + + +<?php + // dodawanie pomy na stan + if ($_POST['inPumpID']>0 && $_POST['subPumpSave']==$lab_ButtonName_Save) + { + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=".$_POST['inPumpID']." and DRS_SN_NUMBER='".$_POST['inPumpSN']."'")==0) + { + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=".$_POST['inPumpID'].",DRS_DEV_TYPE=10,DRS_SN_NUMBER='".$_POST['inPumpSN']."',DRS_BUY_DATE='".$_POST['inPumpBuyDate']."',DRS_AVAILABLE_DATE='".$_POST['inPumpAvDate']."',DRS_STATUS_DIC_ID=".$_POST['inPumpStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inPumpDevRes'].",DRS_DEV_ATTENTION='".$_POST['inPumpAtt']."',DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inPumpEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxDRSid); + delSearchSessionData(); + } + else + { + echo"<div class='actionERROR'>$lab_SaveRecordNotification_004</div>"; + delSearchSessionData(); + } + } + + //usuwanie + // ================================================================================== + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_PUP_DRS_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_dev_resources WHERE DRS_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } + } + // ================================================================================== + + +?> + + + +<?php + + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site203_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site303&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Typ pompy:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site203_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site303_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + <TD class="label">Nowe [szt.]</TD> + <TD class="label">Rezerwa [szt.]</TD> + <TD class="label">Remont [szt.]</TD> + <TD class="label">W eksploatacji [szt.]</TD> + <TD class="label">Kasacja [szt.]</TD> + <TD class="label">Ilość razem [szt.]</TD> + + + </TR> + + <?php + + if (empty($_SESSION['site303_array']) || $_POST['sub_search']=='Szukaj') + { + //$query = "select PUP_ID,count(PUP_ID) ILOSC,PUP_NAME,MCF_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_NAME like '%".$_POST['sr_well']."%' and PUP_ID>0 and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8)"; + $query = "select PUP_ID,count(PUP_ID) ILOSC,PUP_NAME,MCF_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_NAME like '%".$_POST['sr_well']."%' and PUP_ID>0 and DRS_RESOURCES_DIC_ID in (1,2,3,40,707) and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."'"; + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " group by PUP_ID,PUP_NAME,MCF_NAME order by PUP_NAME,PUP_Q_N"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + + //NOWE+ REZERWA+ EKSPLOATACJA+ REMONT+ KASACJA + + unset($arrayStatuses); + unset($nowe); + unset($rezerwa); + unset($remont); + unset($eksploat); + unset($kasacja); +// $arrayStatuses = sqlGetResAsArray("select DRS_STATUS_DIC_ID, count(DRS_STATUS_DIC_ID) ILE from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and PUP_ID=DRS_DEV_ID and DRS_STATUS_DIC_ID in (6,7,8) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$r["PUP_ID"]." group by DRS_STATUS_DIC_ID"); + + $arrayStatuses = sqlGetResAsArray("select DRS_RESOURCES_DIC_ID, count(DRS_RESOURCES_DIC_ID) ILE from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and PUP_ID=DRS_DEV_ID and DRS_RESOURCES_DIC_ID in (1,2,3,40,707) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$r["PUP_ID"]." group by DRS_RESOURCES_DIC_ID"); + //$dostepne=0; $uzytkowa=0; $remont=0; $nieuzytk=0; + for ($s=0; $s<count($arrayStatuses); $s++) + { + if ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==1) + $nowe = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==2) + $rezerwa = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==707) + $remont = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==3) + $eksploat = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==40) + $kasacja = $arrayStatuses[$s]['ILE']; + } + + + + $res[]=array( + 'id' => $r["PUP_ID"], + 'mfc' => $r["MCF_NAME"], + 'pumpName' => $r["PUP_NAME"], + 'pumpcount' => $r["ILOSC"], + 'nowe' => $nowe, + 'rezerwa' => $rezerwa, + 'remont' => $remont, + 'eksploat' => $eksploat, + 'kasacja' => $kasacja + ); + } + unset($_SESSION['site303_array']); + $_SESSION['site303_array']=$res; + } + + + //print_r($_SESSION['site303_array']); + //echo"<br/><br/><br/>"; + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site303_array'])) $stop=count($_SESSION['site303_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site303list&pup=".$_SESSION['site303_array'][$i]['id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site303_array'][$i]['pumpName']."</TD> + <TD class='field_center'>".$_SESSION['site303_array'][$i]['mfc']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['nowe']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['rezerwa']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['remont']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['eksploat']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['kasacja']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['pumpcount']."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site303_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site303_array'])>20) + echo pagination_grid('?pg=site303', $_GET['pgn'], count($_SESSION['site303_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site303_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site303_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + + </div> + + <?php + if (!empty($_SESSION['site303_edit'])) + echo" + <div class=tag_buttons> + <a href='./?pg=site303A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/backup/20171027_site304.php b/sites/backup/20171027_site304.php new file mode 100644 index 0000000..ec9649f --- /dev/null +++ b/sites/backup/20171027_site304.php @@ -0,0 +1,259 @@ +<?php +if (!empty($_SESSION['site304'])) +{ +?> + + +<?php +//dodawanie silnika na stan +if ($_POST['inEngineID']>0 && $_POST['subEngineSave']==$lab_ButtonName_Save) +{ + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE=11 and DRS_DEV_ID=".$_POST['inEngineID']." and DRS_SN_NUMBER='".$_POST['inEngineSN']."'")==0) + { + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=".$_POST['inEngineID'].",DRS_DEV_TYPE=11,DRS_SN_NUMBER='".$_POST['inEngineSN']."',DRS_BUY_DATE='".$_POST['inEngineBuyDate']."',DRS_AVAILABLE_DATE='".$_POST['inEngineAvDate']."',DRS_STATUS_DIC_ID=".$_POST['inEngineStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inEngineDevRes'].",DRS_DEV_ATTENTION='".$_POST['inEngineAtt']."',DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."',DRS_AUDIT_USR='".$_POST['inEngineVol']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inEngineEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxDRSid); + delSearchSessionData(); + } + else + { + echo"<div class='actionERROR'>$lab_SaveRecordNotification_005</div>"; + delSearchSessionData(); + } +} + + + +//usuwanie +// ================================================================================== +if (!empty($_GET['param'])) +{ + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_dev_resources WHERE DRS_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } +} +// ================================================================================== + +?> + + + +<?php + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site304_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site304&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Typ silnika:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site304_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + <?php echo $lab_HistoricalData_007; ?> + </td> + </tr> + </table> + </div> + </form> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site304_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + <TD class="label">Nowe [szt.]</TD> + <TD class="label">Rezerwa [szt.]</TD> + <TD class="label">Remont [szt.]</TD> + <TD class="label">W eksploatacji [szt.]</TD> + <TD class="label">Kasacja [szt.]</TD> + <TD class="label">Ilość razem [szt.]</TD> + </TR> + + <?php + + if (empty($_SESSION['site304_array']) || $_POST['sub_search']=='Szukaj') + { +// $query="select ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,MCF_NAME from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_STATUS='1' and ENG_NAME like '%".$_POST['sr_well']."%'"; +// $query = "select ENG_ID,count(ENG_ID) ILOSC,ENG_NAME,MCF_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_ID>0 and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8) and ENG_NAME like '%".$_POST['sr_well']."%'"; + $query = "select ENG_ID,count(ENG_ID) ILOSC,ENG_NAME,MCF_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_ID>0 and DRS_RESOURCES_DIC_ID in (1,2,3,40,707) and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and ENG_NAME like '%".$_POST['sr_well']."%'"; + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " group by ENG_ID,ENG_NAME,MCF_NAME order by ENG_NAME,ENG_POWER"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + + + unset($arrayStatuses); + unset($nowe); + unset($rezerwa); + unset($remont); + unset($eksploat); + unset($kasacja); + // $arrayStatuses = sqlGetResAsArray("select DRS_STATUS_DIC_ID, count(DRS_STATUS_DIC_ID) ILE from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and ENG_ID=DRS_DEV_ID and DRS_STATUS_DIC_ID in (6,7,8) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$r["ENG_ID"]." group by DRS_STATUS_DIC_ID"); + $arrayStatuses = sqlGetResAsArray("select DRS_RESOURCES_DIC_ID, count(DRS_RESOURCES_DIC_ID) ILE from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and ENG_ID=DRS_DEV_ID and DRS_RESOURCES_DIC_ID in (1,2,3,40,707) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$r["ENG_ID"]." group by DRS_RESOURCES_DIC_ID"); + + for ($s=0; $s<count($arrayStatuses); $s++) + { + if ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==1) + $nowe = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==2) + $rezerwa = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==707) + $remont = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==3) + $eksploat = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_RESOURCES_DIC_ID']==40) + $kasacja = $arrayStatuses[$s]['ILE']; + } + + + + + $res[]=array( + 'id' => $r["ENG_ID"], + 'mfc' => $r["MCF_NAME"], + 'engName' => $r["ENG_NAME"], + 'engcount' => $r["ILOSC"], + 'nowe' => $nowe, + 'rezerwa' => $rezerwa, + 'remont' => $remont, + 'eksploat' => $eksploat, + 'kasacja' => $kasacja + ); + } + unset($_SESSION['site304_array']); + $_SESSION['site304_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site304_array'])) $stop=count($_SESSION['site304_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site304list&eng=".$_SESSION['site304_array'][$i]['id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site304_array'][$i]['engName']."</TD> + <TD class='field_center'>".$_SESSION['site304_array'][$i]['mfc']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['nowe']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['rezerwa']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['remont']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['eksploat']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['kasacja']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['engcount']."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site304_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site304_array'])>20) + echo pagination_grid('?pg=site304', $_GET['pgn'], count($_SESSION['site304_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site304_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site304_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + </div> + + <?php + if (!empty($_SESSION['site304_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site304A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/backup/_rep_003_print.php b/sites/backup/_rep_003_print.php new file mode 100644 index 0000000..c894b70 --- /dev/null +++ b/sites/backup/_rep_003_print.php @@ -0,0 +1,273 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Zrzut wody na odprowadzalniki</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + <script src="./jquery.min.js"></script> + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + +function getFullTree($inOdprowadzID) +{ + unset($outParam); + unset($counter); $counter=0; + + //================================================================ + unset($getArray01); + $getArray01 = sqlGetResAsArray("select WWD_ID,sum(Q_H) QH, sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_PARENT_ID=".$inOdprowadzID." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID "); + for($i1=0; $i1<count($getArray01); $i1++) + { + $counter += (float) $getArray01[$i1]['QM']; + + //================================================================ + if ($getArray01[$i1]['WWD_ID']>0) + { + unset($getArray02); + $getArray02 = sqlGetResAsArray("select WWD_ID,sum(Q_H) QH, sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray01[$i1]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID "); + for($i2=0; $i2<count($getArray02); $i2++) + { + $counter += (float) $getArray02[$i2]['QM']; + + //================================================================ + if ($getArray02[$i2]['WWD_ID']>0) + { + unset($getArray03); + $getArray03 = sqlGetResAsArray("select WWD_ID,sum(Q_H) QH, sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray02[$i2]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID "); + for($i3=0; $i3<count($getArray03); $i3++) + { + $counter += (float) $getArray03[$i3]['QM']; + + //================================================================ + if ($getArray03[$i3]['WWD_ID']>0) + { + unset($getArray04); + $getArray04 = sqlGetResAsArray("select WWD_ID,sum(Q_H) QH, sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray03[$i3]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID "); + for($i4=0; $i4<count($getArray04); $i4++) + { + $counter += (float) $getArray04[$i4]['QM']; + + //================================================================ + if ($getArray04[$i4]['WWD_ID']>0) + { + unset($getArray05); + $getArray05 = sqlGetResAsArray("select WWD_ID,sum(Q_H) QH, sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray04[$i4]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID "); + for($i5=0; $i5<count($getArray05); $i5++) + { + $counter += (float) $getArray05[$i5]['QM']; + } + } + //================================================================ + } + } + //================================================================ + } + } + //================================================================ + } + } + //================================================================ + } + //================================================================ + unset($getArray01); + unset($getArray02); + unset($getArray03); + unset($getArray04); + unset($getArray05); + + $outParam = (float) $counter; + + return $outParam; +} + + + +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Zrzut wody na odprowadzalniki <?php echo $_SESSION['syndis_eq_stock'];?> <br/>Studnie pracujące - status ON</h3> + </div> + <div class="panel-body"> + Na dzień:<b> <?php echo sqlStringValue("select max(WLL_AUDIT_CD) DT from softspm_rep.rep_003_data", "DT"); ?></b> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="#" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="#" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Zrzut</th> + <th></th> + <th>[m<sup>3</sup>/min]</th> + + </tr> + </thead> + + +<?php + +echo getFullTree(73)."<br/>"; + + +$levVAL=0; +unset($rep003Array_00); +$rep003Array_00 = sqlGetResAsArray("select * from seg_water_drainage where WWD_PARENT_ID is null order by WWD_NAME"); +for($f=0;$f<count($rep003Array_00);$f++) +{ + //poziom pierwszy + unset($rep003Array_01); + $rep003Array_01 = sqlGetResAsArray("select WWD_ID,WWD_NAME,sum(Q_H) QH,sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_PARENT_ID=".$rep003Array_00[$f]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID order by WWD_NAME"); + if (sqlValue("select count(*) from softspm_rep.rep_003_data where WWD_PARENT_ID=".$rep003Array_00[$f]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."'")>0) + { + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$rep003Array_00[$f]['WWD_NAME']."</td> + <td></td> + <td></td> + </tr> + "; + + + for ($i1=0; $i1<count($rep003Array_01); $i1++) + { + unset($rep003Array_01Val); + $rep003Array_01Val = (float) $rep003Array_01[$i1]['QM'] + getFullTree($rep003Array_01[$i1]['WWD_ID']); + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rep003Array_01[$i1]['WWD_NAME']."</td> + <td>".$rep003Array_01Val."</td> + </tr>"; + } + + echo" + <tr style='font-weight: bolder; background-color: #ADD8E6;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".getFullTree($rep003Array_00[$f]['WWD_ID'])."</td> + </tr><tr style='height: 10px;'><tr> + "; + } + + + + + + // ======================================================================================================================== + // ======================================================================================================================== + if (sqlValue("select count(*) from softspm_rep.rep_003_data where WWD_PARENT_ID=".$rep003Array_00[$f]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."'")>0) + { + + for ($i1=0; $i1<count($rep003Array_01); $i1++) + { + $lacznie = 0; + + echo" + <tr style='font-weight: bolder; background-color: #FFEBCD;'> + <td>".$rep003Array_01[$i1]['WWD_NAME']."</td> + <td></td> + <td></td> + </tr> + "; + + echo("select * from softspm_rep.rep_003_data where WWD_ID=".$rep003Array_01[$i1]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + + echo"<br/>"; + + + unset($rep003Array_02); + $rep003Array_02 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where WWD_ID=".$rep003Array_01[$i1]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + for($i2=0; $i2<count($rep003Array_02); $i2++) + { + echo" + <tr> + <td>".$rep003Array_02[$i2]['WLL_BARIERA']."</td> + <td>".$rep003Array_02[$i2]['WLL_NAME']."</td> + <td>".$rep003Array_02[$i2]['Q_MIN']."</td> + </tr> + "; + $lacznie += $rep003Array_02[$i2]['Q_MIN']; + } + + + echo" + <tr style='font-weight: bolder; background-color: #ADD8E6;'> + <td style='text-align: right;'>Łącznie</td> + <td>".$rep003Array_01[$i1]['WWD_ID']." -> ".getFullTree($rep003Array_01[$i1]['WWD_ID'])."</td> + <td>".($lacznie + getFullTree($rep003Array_01[$i1]['WWD_ID']))."</td> + </tr><tr style='height: 10px;'><tr> + "; + + + + + } + + } + // ======================================================================================================================== + // ======================================================================================================================== + + +} + + + + + + + + + + + + + +?> +</table> + +<?php +mysql_close($polacz); + +?> + + <script src="./bootstrap.min.js"></script> +</body> +</html> diff --git a/sites/backup/_site303.php b/sites/backup/_site303.php new file mode 100644 index 0000000..c403c5a --- /dev/null +++ b/sites/backup/_site303.php @@ -0,0 +1,87 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPoB2+M3fXS9Nu0biGnTheo0FT+JT5vvI2SH6bFWUZBm6Gtf7T0Mnq8pSdVTnZio7Sxcx1CUE +dw8x+pPutMPlaYQThpEulst4M68NoiSxCwBjCnbb+zp9tQy/C92P/qJZoU8I5xl5qSS+EBrAZ7hc +YT3+XmvLcr8GTrKwI/7i0RS/rG8u1bBMRxrvhw+ICWKQ3Ia7YTOwNmBTN5mJVvDNmEy9666Vv+c9 +cu2Z4E8ZBn9M7fRTasa1xQUeBzzyfjedWSBXVSlJ/5oI8MHOQVuBf8Xmk/T5n5dndX5Mfgp+YVBW +X1/pNNCZ7ETehelMtT4Wo3LfCdQMd2jMZiQiTxDNqCCDib5zZT4jJQ93G1oHaOLKcDYcu+AOca90 +GxgotkTf5qA7B5zJvvLLSIDBrDPQ5HEHoofsBG2o7wWWSk+0e/Maw9AeIeUyheI1Lau5vyXPRLEj +j9NotCGIy9CZorPc41MFQRCn7O2U3dDMtHpROwzd4qkeG6kHnHTPEdtlJziCtYGHMRJdw+aO3xwH +3OCntb2fQarOLwHYknDbaQYFtUl48VARxzSKpxaoCOepOmtvRRXvyN3dYBSt3yGCWq5x8tmBa9DN +fUl3AQxkPzoX+ZW7ewR6PzOFCrq6jjk/aMzo5HEV9yMO+aKNpbGTtpxGevx0WhtXfNregI+cQEer +VwB2pVIqcdNrKYrBny2/HqbX5o1G4L2afI0QSaqz+tWu/HtGIaBP7rCg/pAK8RD4yGtaA8n81E3h +rFpaGBlBwYn27wzoMND+XR7QEyXFiGTNV4Hks0njBD1J2zmROZVaYl3mzrT+NIwQ0DwDrORs64q4 +VyZYn6zrHk5JtblKw+0HITQh5otKSEBGhFj6VFAcaHaqp4ePJ9RFvN2PJygVRxa+rBbCbpbP1CjA +5uUNM3axYXontjXQArFs/GF/5awQ97PqLf5154EcY04thf34Vzw+4DCYrUpAgiHPtvy8XoMmtL0z +YT9AZGTS/s3B+v0MiIr3DcIH3rJSBG4jtAFFAw7bKsygu3vE0qdWzfgjqYchPY24ZtBCU6U1pCUm +/Isd5k5apF5boOT5KjHZk4INlMLjzov84ihk76sTA6ta2sFBoWIleiV51kJWen+hYE0R+zicBXgC +5BMCE+XmzNi7T5gE4J9d0w//idB85ewFa7CmumPWp+/KAq1q5sgLr8jmXApMeapt6J2QwVRcLcOa +PtAYUxUUszL+kgRO7Sjn9FyT5I6yEkrSpjf2gJSVwmsOD/lU2BbQ+Ke0C3/YvZc8HBurDkLHbxvU +1/djN6yDBBlE3ZsaTFPPFza+CN6ytnr0gLlk9lgeiTAbUnB/RGa5ykitRZY+vExHBoEawhIABfWL +0RHjrg/aSnvMN7jqk1plKVGN6iNI75mLajwYOkd+m5FHNrZaZeLRRnaLI4YUUEy3LMXwAfFnyC4A +HCPrE/bYnk7uZj9NjwsAnX2K/4DHSzHK8LNHllw1fpvZBvhsmhMsYLDukitis1ll2x4dEVGl+vQT +N/Z5ERZ8fIF/l2oVgpKi6KBBmOI20BDs6DpuiT9tVpcjyqSgD1mCtz8u2CTdUsaneFNhjCRPbP2r +EsaN8MajJP/w8J2SzfgWEv14z7bq1GPiSrwvNvPbXC5/P3WZxL3p3EOhN3WiNA1tdFq6RkfoDI2N +B5ozaZbVKCWGz6cz8p+PcB+LjaySQzwB90dYYXmEs8+5HoBLAwevTInBY7F+vo/GIRShNRAC9H6J +NIMbRwzWCtMCrVwD2fJk9iwK1Uy7aqjG5UCbnHn9PyK0lVRxMhXzOQ0GBvfr0BFHtVMGgDyTIhOz +to7GGoP4xWxT7MelpE8acgR4SOIlCa4HXVlNV1avokzF9bKsMRHSOgri5LBtlVcTXZK7zfbWxR9t ++anhBMckN/uaozFecaIX8zb1IJ/FAaGfdaets1Oi1r1VQSx3TP2j5ZQfxMZeujHkrVaEztLcweMS +H9ZBBQ4pwdzwcbkoOhQkffoKt9IzCKMHJmbksEP41KHeIH4+5OOwEs2l8mrfXi+aXGjgLCvF8LRM +0UX2fAW5twXmgkpJnyDU2d2NUEpuG/g4/F6Ho7D44AOioabOOk78d7DtRG41ZHaGTsG4GjFoh093 +i23Z0FsMJW07iwrEKanp20wa/cFDyQzvoltRNhssV9lh0MdoadmVmLRmvuFA+tVp/dft+j72LCcj +QqH6j5jX1pIK2mzpAryU/NJCRBa4R3qErDGRr0TI/cIvpY7eDxrTBtFVIo7g7RH3kyNWXbICaBWX +Ij3mKlVFYB/CEgE0XUqR1EdUL/zFDFmAQb65qdQHMc2poQbY5zd+ZCpewuL6LX3E6aE7Tkox9F+a +QSjPjMSpuq698+X2kBM94fL45vt2Ai1/HVyiaZSC4S9LDtT7/2gMxuEoTD6vpM/ySyc8PQSHgGmN +UVj6/yUXZRVCsY4rbezUaEDKNi6jrTALbIK11SGo+KdTwSCXRpOqTQPpEMRL7+wHIHm56kabu83f +NQydRrT1j5suqJg+6CWA5DR8DBx5w562dK1egm/5Ny5t/tcCBu058WUugO7E+26efdEyCyUWxqI+ +tFowYd9qbu9YOMnOO07NdKNHgymBbVSkchUfcD6zehLIGcETg64s3SV9H6mjFOf9xSIpY8eimLtE +LmbxU610tDqvkU8CGsVsj62QlcSuXxPBNkdQMV8HXd19hNpKojDbB8vKdij+gN5ii3SZrjAunQNJ +DY7O+IY5EtVaDyVrtRGOmTzii1Hlg8xTUG63rW6LwS9k1NSiKNgxCsHJdPsEsFjEOU9JjTlfIGx5 +3mOS59xqGQ0bI6HZpa3fwuElXha6miUwIz9TP8W7dx27N6Dl+EgcQHQqc/Om+kG+3l3GbQDvvcOu +1sD8rt6jFMI8wLzXgLg3YfpN6kVuyJXskQFmNYTzbq/NwqBZ+vJ8mt7RQkKnFrndO8elTEBcvaBe +s1JMwLJQLZ+Qc32FxMGY5MvD2pqO5PKllj88pof22fy2xI/Mq+6355ieoS8D2A11OGUdmYuHSah9 +NJKYi7o4ax2TTc1C2yR20sQ496xN1tgPgW3534uPGYcut/SxDUBvX+1Hwt2vOVQ4so/mEO6DHbIk +fTdTBvlsyhhBkPESQEnQFHynfifVZwZQ4eMYoBCJosqW51+KezWI04lNjrmUKfgugVWbgepyKPtW ++szfHieMoqr9ActbHEbGWKTdYqxaJgDzdbwUzBZiaAJsWJBnmDT1NA84xRAwI0kNHO0TWaiWUViA +PJPsQ/B0ZSpyai1DmvDOydXFdPvCu2ldpERyVU8S43WVRGVyJNG2pb/M/fq5rCPRtZe1S060gmen +iEU4vRtR4GrLhj+cwmsldYaSuochxTlzPUhFjvMIP0I5fm3WjLkerFEaRDrnOecabeeXD0SpmaHI +BOGa8GGvtUPoWKWR586BTC5PhibqJHCbJQEZ+fZ8IlYacqzqR0oJyl7IyzMI/g2nlVQW9v9VX/0l +8R8AGOEhQgxs+PcxwgDey+5L9E8lBCdxMvtciSwpZ2MYsBvG9rXFtMNVB+bk7yoI1YP5lDUngzze +oIuVP9T7BSH2j2xEcQy782dHNymb7QEfA8AEvB4a5PH6K6DJ72TKql8BOaZkM1KelKNdJl5H3IL6 +i5SEkk9EeN6psgkgQxRiAMdYMYzhwLKOwj+t5d0d7Y4R/fDPlBswQdL3bd7+2eGKzVTZ8VB6bVIG +Un/3RpRDDMpA7zaN3J/FC6T/BMkG6pWKvOd9hbyEl2O1ZWXkEjXH6nU7QtOK//uTb37VSLjWqahH +ut8VsdARamerFhm55id1SxrWj7k2jsMDh8tURDfeea+/igKoTKlSufr9Q6Mei49xdRVgYZCsG9Vb +rZ5eU3M+LYc++QuaIXNBC+UYZ762pVi7uu9pRyZHsfi3OjZB+k8RJVGwLAk8ZUo/MkPE+4XzeTcE +9c075cmQfElHJ5P3+vpyWR5C7JhwztUlYDKJ0Khd+w12WVqUHV6cgRlci3A4gjU79wY1jQCAeH28 +hibmLhM131ID6DrOzp7N1zycqfnYOsid/YyqS7mBEUNCwNJCm7bYkjjIjwVW2IgbL5o8H+Ldskng +T3g4U3lhCVmuXRJtV0WxtJN/W56/diAdNmemnLaLEcKTMFuxlhAxFNNWAXI3bAGO14i0FJEIvDpI +AywwSDSSJyNsj08DoW0foaR4E5nnmrVkvcB5CXmggpGuA8tsQMbVTHOVdL4mEfQY9I5aNTXymRt0 +I+3waQwk0XmJ6SmZCmHYwkyW2UStfzRd6g/lgU6F6NRfiCPfr1y45Zv6OWgNAJe5zGRNOm8K7bFt +urAWxO7J8rh6kFEdTCzMxkHXqv7c2yzoSh59aujFpObvieCaokpw7R6aVwSLjk09VNkQr//LsXPN +7+c7U/AChtJvuUw801wm+/9xWJdsDAQ33akvVUKRwEUshPJyjo+44ci5K414DtTpKZOPEZATl3rs +yqt/ZmKlipd/6e4pc4CUYnYwPNqD3CULoAqkK+uo3lqzU/l4njMyYNJMqSsck+0TzmPQW1gQ1hMj +RNYFNDqK8Le4sctBZoQjvtglEe4dnWXmhWh2o4f6yQXqxkG2DyFcTwivVWlBwhhLPOgqyvUBTuUS +LySpZnU7iUHb0fbKxe4IVtaizPAYSC5OnmMH7JBbgde1KUplSMXmS6a1Gd6dh1ewxpVmkFyqXN6V +8IhatZ5eAvB8NdKqcgE8nPgCNBxXIC1FkY2PGIt74bpR4LihYx2xNdUqkXitNS8/oTVmY0u+YXP1 +6n/QM1mK6pfpyIWsAtQVl0wWMFjy/rmYXkT88rnbrZW36X9Un2SKAqs+iDwgrFv0yYi6sYZ4+zzq +zeU7EAI9/x7Wp0B/Zkv7H8vkxNgRitOdQ0M8624ORDH7PeuY31wD8TB/6FH6O0bfVFJPdi1g3HA7 +W3DqmB4cHrgRmx6j66zIRjSo5D7D0ty+HQfUakx4hpuvpPo4LmvNv+I9GteDA5bRpHDhHigB+Rq5 +Ut6mfODxCp+ch5qGxwA235YxXy12bdteNldQrOHdsAnXxwrwiBjyreQxIL+DyWrrhhIi1RUQB/NS +kngqiY4RufJEmaThFbwF794Ocdyz45iXiognTUHqJ27TCVBrSrxn3Nk5Cz6LY3hwyXF/7hlNf24C +bbuoMKj2dOHYl9BUM6lj7UIN/A3sKlfS2DF8ktpTSKxU9De8FYLpo7vraT+9sMJY3dSLScp+Xkon +vgWRjMfH3Ub+B+ZZASIcArpJe38NEfpvd337GoJm80ab5dTv3NapBp5oAG4lxzNPjEcgYkFa+FZP +f9yQDY5XvGCz43ZEWExl6hIQ8eyKNbhtihys4gxajeJCk+P7QTGDnV7W6qH39jLjGTcmvS0P1Hoh +GoEhEVYtRCF6mLeQi77XiSs4zwAaTHbBbsqOZues13+3lylLGNMu62wIlFpQlr6TltAoMzd4+FLH +vqZkbTRGaK8AIdftQwgCpccmGHveJ32cGkIHnMI2DiszFPtrBaRFPw3GEnzfxagYT4adeRJXnfLP +vOjtMZTEc0SENNB2IRgCWJG+AdSNBjjpKqrOSqpDrSq37YKJp7XlQNi/7BG9LLcFzm/3tTRhUAoA +XUnNKqkBQZaDrUipNFIFq0Z3aQzIhOUK2NkFOw6+iZ4MnBP7eQ06AGXp5vLWm1wW3vw6qfg5osiI +UAgpSRRfh8ndKi70Fo52UBBTBsRHYiLl1AVVxE9f6KR/4IosvENowlIk7DrXmnd6lyCAStmOLxHl +2mamPlTKh0FIYpRWPAB3XWaoJaAdP/TpeH7b4uj8zHSaG+Qm9HIfcVkAv4y/lI8bIxyftkOTArif +PM7Ik+jIwRd1eIBoAckN4nw8Jwm/9+9Q5DRRuxQhlvxNbRXr/5/IdG8Jh+SPBUlug9cbU6MZQq1F +FfAqoBEmuQ8PAkMpg3Zu8FgE1PrFs5KrxcfhHJ3GiNv8lL3/dVrhe2bbD0TWYVjacVxCcNdBPMxd +fkEObx3VKeZqaxzIoku6Ouy6pXC2W13KDZ50YC68RWDGKy8Nl4jwB21fkXHONXUTmFG+hKvgihHq +7jPPzXCJn4aLdDVjXKrVR5/VDnfmtH1XQHPSySl/S9PfAc4mMeHAuYEs/b+iPn2jQIJ36DJ2gi3W +yWUq2VZc5oHrsPpCN8zL3d8JMX84JYuC6vIDwmm9b61UlB2eMcr0A6DInpbD810rfYeHpHWlyMec +LgX7BP8Dwg8/kVrdBAhOb7RVUn7hyoxQBMkckzCPljaKJvDs/LUO+o9KjMGOkZ72ziIlh+YNlI7E +85ukeweCibEelZcAuh20vPYD \ No newline at end of file diff --git a/sites/backup/gen_rep_002.php b/sites/backup/gen_rep_002.php new file mode 100644 index 0000000..7240048 --- /dev/null +++ b/sites/backup/gen_rep_002.php @@ -0,0 +1,209 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Wykaz pracy studni</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + <script src="./jquery.min.js"></script> + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + + +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Wykaz pracy studni <?php echo $_SESSION['syndis_eq_stock'];?></h3> + </div> + <div class="panel-body"> + Za okres od:<b> <?php echo date('Y-m')."-01"; ?> do: <?php echo date('Y-m-d');?> </b> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="#" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="#" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Lp.</th> + <th>Studnia</th> + <th>Agregat pompowy <br/> [pompa / silnik]</th> + <th>Data zabudowy</th> + <th>Data wybudowy</th> + <th>Moc silnika <br/> [kW]</th> + <th>Czas pracy <br/> [h]</th> + <th>Ilość wypompowanej wody <br/> [m<sup>3</sup>]</th> + <th>Wydajność średnia <br/> [m<sup>3</sup>/min]</th> + <th>Zwierciadło statyczne <br/> [m]</th> + <th>Zwierciadło dynamiczne <br/> [m]</th> + <th>Temperatura wody <br/> [<sup>o</sup>C]</th> + <th>Stężenie chlorków</th> + <th>Kategoria</th> + + </tr> + </thead> + +<?php + unset($rep002Array); + $rep002Array = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,DRS_DEPARTMENT from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID where WLE_WLL_ID=WLL_ID and DRS_DEV_TYPE=12 and (WLE_DATE_TO is null or WLE_DATE_TO>'".date('Y-m')."-01') and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by WLL_BARIERA,WLL_NAME,WLE_DATE_TO"); + + + //print_r($rep001Array); +?> + +<?php +$bariera = ""; +$licznik_bariera=0; +$bariera_woda=0; +$calosc_woda=0; + +for($i=0;$i<count($rep002Array);$i++) +{ + if ($bariera!=$rep002Array[$i]['WLL_BARIERA']) + { + if ($licznik_bariera>0) + { + echo"<tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='7'>Razem bariera: ".$bariera."</td> + <td style='font-weight: bolder;'>".$bariera_woda."</td> + <td colspan='6'></td> + </tr>"; + echo"<tr><td colspan='12'></td></tr>"; + $bariera_woda=0; + } + + echo"<tr style='font-weight: bolder; background-color: #DCDCDC;'><td colspan='14'>Bariera: ".$rep002Array[$i]['WLL_BARIERA']."</td></tr>"; + $bariera=$rep002Array[$i]['WLL_BARIERA']; + $licznik_bariera++; + } + + unset($mocSilnika); + $mocSilnika = sqlStringValue("select ENG_POWER from seg_engines,seg_dev_resources where DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 and ENG_NAME='".$rep002Array[$i]['WLE_ENG_NAME']."' and DRS_SN_NUMBER='".$rep002Array[$i]['WLE_ENG_NO']."'", "ENG_POWER"); + + //czas pracy + unset($minTime);unset($maxTime);unset($valTime);unset($finDate); unset($valTime);unset($valHst0);unset($valHdTw);unset($valClor); unset($valVm3); unset($minVpup); unset($maxVpup); + + if (strlen($rep002Array[$i]['WLE_DATE_TO'])>8) + $finDate = $rep002Array[$i]['WLE_DATE_TO']; + else $finDate = date('Y-m-d H:i:s'); + + + if (strlen($rep002Array[$i]['WLE_DATE_TO'])>8) + { + //) + $valTmVm = sqlGetResAsArray("select (max(RHD_WORK_TIME_VAL) - min(RHD_WORK_TIME_VAL)) WRTM, (max(RHD_VM3_VAL) - min(RHD_VM3_VAL)) VM3 from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']); + $valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')"); + $valHdTw = sqlGetResAsArray("select RHD_HD_VAL,RHD_WTEMP_VAL from softspm_rep.rep_002_data_wrze where RHD_ID=(select MAX(RHD_ID) from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_HD_VAL>0 and RHD_WTEMP_VAL>0)"); + $valClor = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=719 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and DRD_AUDIT_DATE<='".$rep002Array[$i]['WLE_DATE_TO']."')"); + + $valTime = $valTmVm[0]['WRTM']; + $valVm3 = $valTmVm[0]['VM3']; + + } + else + { + $valTmVm = sqlGetResAsArray("select (max(RHD_WORK_TIME_VAL) - min(RHD_WORK_TIME_VAL)) WRTM, (max(RHD_VM3_VAL) - min(RHD_VM3_VAL)) VM3 from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']); + $valHst0 = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."')"); + $valHdTw = sqlGetResAsArray("select RHD_HD_VAL,RHD_WTEMP_VAL from softspm_rep.rep_002_data_wrze where RHD_ID=(select MAX(RHD_ID) from softspm_rep.rep_002_data_wrze where RHD_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."' and RHD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and RHD_HD_VAL>0 and RHD_WTEMP_VAL>0)"); + $valClor = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID = (select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=719 and DRD_DRS_ID=".$rep002Array[$i]['DRS_ID']." and DRD_AUDIT_DATE>='".$rep002Array[$i]['WLE_DATE_FROM']."')"); + + $valTime = $valTmVm[0]['WRTM']; + $valVm3 = $valTmVm[0]['VM3']; + } + + + + unset($qSred); + if ($valTime>0) + $qSred = (float) ($valVm3/$valTime); + + + echo" + <tr> + <td>".($i+1).".</td> + <td>".$rep002Array[$i]['WLL_NAME']."</td> + <td>".$rep002Array[$i]['WLE_PUMP_NAME']." / ".$rep002Array[$i]['WLE_ENG_NAME']."</td> + <td>".$rep002Array[$i]['WLE_DATE_FROM']."</td> + <td>".$rep002Array[$i]['WLE_DATE_TO']."</td> + + <td>".$mocSilnika."</td> + <td>".$valTime."</td> + <td>".$valVm3."</td> + <td>".round($qSred/60,3)."</td> + <td>".$valHst0[0]['DRD_VALUE']."</td> + <td>".$valHdTw[0]['RHD_HD_VAL']."</td> + <td>".$valHdTw[0]['RHD_WTEMP_VAL']."</td> + <td>".$valClor[0]['DRD_VALUE']."</td> + <td>".setDicName($rep002Array[$i]['WLL_CAT_DIC_ID'])."</td> + + </tr> + "; + + + $bariera_woda+= (float) $valVm3; + $calosc_woda += (float) $bariera_woda; +} + + + +echo"<tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='7'>Razem bariera: ".$bariera."</td> + <td style='font-weight: bolder;'>".$bariera_woda."</td> + <td colspan='6'></td> + </tr>"; + + +echo"<tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='font-weight: bolder;' colspan='7'>Razem wszystkie studnie:</td> + <td style='font-weight: bolder;'>".$calosc_woda."</td> + <td colspan='6'></td> + </tr>"; + + +?> +</table> + + +<?php +mysql_close($polacz); + +?> + + <script src="./bootstrap.min.js"></script> +</body> +</html> diff --git a/sites/backup/index.php b/sites/backup/index.php new file mode 100644 index 0000000..4deea3b --- /dev/null +++ b/sites/backup/index.php @@ -0,0 +1,405 @@ +<?PHP session_start(); +//setcookie ("odwiedz", "jest", time()+600); +if ($_GET['evnt']=='out') { unset($_SESSION['user']); session_destroy();} +//Sprawdza, czy nie został przełączony jakiś inny użytkownik. Jeśli tak, to czyście zmianne sesyjne. +// =========================================================================================================== // +if (!empty($_GET['auth']) && $_GET['auth']!=$_SESSION['syndis_auth']){ unset($_SESSION['user']); $_SESSION = array();} + + +// =========================================================================================================== // +?> +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + +<link rel="shortcut icon" href="./images/SoftSPM.ico"> +<LINK href="./style/theme.css" type="text/css" rel="stylesheet"> +<LINK href="./style/style.css" type="text/css" rel="stylesheet"> +<LINK href="./style/topmenu.css" type="text/css" rel="stylesheet"> +<LINK href="./style/tooltip.css" type="text/css" rel="stylesheet"> +<LINK href="./style/cointainers.css" type="text/css" rel="stylesheet"> +<LINK href="./style/map_tooltip.css" type="text/css" rel="stylesheet"> +<LINK href="./style/tables.css" type="text/css" rel="stylesheet"> +<LINK href="./style/links.css" type="text/css" rel="stylesheet"> +<LINK href="./style/forms.css" type="text/css" rel="stylesheet"> +<LINK href="./style/multi-select.css" type="text/css" rel="stylesheet"> +<link rel="stylesheet" href="./style/sweetalert.css"> +<link rel="stylesheet" href="./style/preloader.css"> +<link rel="stylesheet" href="./datepicker/images/jquery-ui.css"> +<link rel="stylesheet" href="./datepicker/images/style.css"> +<script src="./datepicker/js/jquery-1.9.1.js"></script> +<script src="./datepicker/js/jquery-ui.js"></script> +<script src="./datepicker/js/jquery.multi-select.js"></script> +<script src="./js/jquery.multi-select.js" type="text/javascript"></script> +<script src="./js/application.js" type="text/javascript"></script> +<script src="./js/jquery.validate.js"></script> +<script src="./js/myValidations.js" type="text/javascript"></script> +<script src="./js/dynamicForms.js"></script> +<script src="./js/sweetalert.min.js"></script> + + +<TITLE>..:: SoftSPM ::..</TITLE> +</HEAD> + +<?php +// sprawdza rodzaj i wersje przeglądarki +//if (empty($_SESSION['attention'])) if (checkYourBrowser()==1) $_SESSION['attention']='accept'; +//if ((empty($_SESSION['attention']) && $_POST['subAttentionAccept']=='OK') || $_POST['in_subOK']==" ok ") $_SESSION['attention']='accept'; +//if (empty($_SESSION['attention'])) +// showBrowserAttention(); +// ======================================== +//else +//{ +?> + +<BODY style="background-repeat: repeat-x;" BACKGROUND="./images/bg.jpg" > + + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + +//usuwa zmienne sesyjne, jeśli otwarto nowe okno +if(!empty($_GET['auth'])) +{ + delSearchSessionData(); + $_SESSION['syndis_close_window']=600; + //echo('<script>sweetAlert("Ważna informacja!", "W celu uniknięcia potencjalnych błędów proszę zamknąć wcześniej pootwierane okna systemu SoftSPM. Proszę pracować tylko i wyłącznie na aktualnie otwartej karcie! Niedostosowanie się do niniejszego komunikatu może generować błędy w systemie.", "warning");</script>'); +} + + + + + +// sprawdza, czy URL jest skierowany z SYNDISA +if (!empty($_GET['auth']) && !$_SESSION['user']) +{ + if ($_GET['auth']=="6e19274776a47c204d6b412756a60d78") + usrLoginAndSiteAccess("syndis", "syndis", "polish", "SoftSPM_bas"); + else + { + $wynik = mysql_query("select USR_USERNAME,md5(USR_USERNAME) ATH from sys_users where USR_STATUS='1'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $uName=$r["USR_USERNAME"]; + $authMd5=$r["ATH"]; + + if ($_GET['auth']==$authMd5) + { + usrLoginAndSiteAccess($uName, $uName.".123", "polish", "SoftSPM_bas"); + $_SESSION['syndis_auth']=$authMd5; + + // pobiera informacje o dostępie do regionu + $access_reg=""; $reg_count=1; + $wynik_reg = mysql_query("select URG_DESC from sys_users_regions where URG_USR_ID=".$_SESSION['user_id']); + if($wynik_reg)while ($r_reg = mysql_fetch_array($wynik_reg)) + { + if ($reg_count==1) { $access_reg = $r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_1'] = $r_reg["URG_DESC"]; } + else if ($reg_count==2) { $access_reg .= ";".$r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_2'] = $r_reg["URG_DESC"]; } + else if ($reg_count==3) { $access_reg .= ";".$r_reg["URG_DESC"]; $_SESSION['eq_stock_param3_3'] = $r_reg["URG_DESC"]; } + $reg_count++; + } + $reg_count--; + $_SESSION['syndis_eq_stock']=$access_reg; + + //warunek na wybieranie oddziału w jaki chce użytkownik pracować + if ($reg_count>1) + { + //pobiera informacje z URL i przypisuje Oddział oraz wchodzi w dany obiekt + $tmpDevID=sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_GET['obj']."'", "DRS_ID"); + if ($tmpDevID>0) + { + $tmpPlc=sqlStringValue("select SOD_PLC from seg_object_def where SOD_NAME='".$_GET['obj']."'", "SOD_PLC"); + $_SESSION['syndis_eq_stock'] = $tmpPlc; + $_SESSION['eq_stock_param3_1'] = $tmpPlc; + unset($_SESSION['eq_stock_param3_2']); + unset($_SESSION['eq_stock_param3_3']); + + header("Location: ?pg=site401mark&dev=$tmpDevID"); + + } + else{ + //sprawdza, czy nie jest to piezometr + $tmpDevID=sqlStringValue("select DRS_ID from seg_dev_resources,seg_reservoirs_piezometers where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and SRP_NAME='".$_GET['obj']."'", "DRS_ID"); + if ($tmpDevID>0) + { + $tmpPlc=sqlStringValue("select SOD_PLC from seg_object_def where SOD_NAME='".$_GET['obj']."'", "SOD_PLC"); + $_SESSION['syndis_eq_stock'] = $tmpPlc; + $_SESSION['eq_stock_param3_1'] = $tmpPlc; + unset($_SESSION['eq_stock_param3_2']); + unset($_SESSION['eq_stock_param3_3']); + + header("Location: ?pg=site404inf&dev=$tmpDevID"); + } + else{ + $dalej="./?pg=seldep"; + header("Location: $dalej"); + } + } + } + + //zerowanie wszystkich danych sesyjnych z wyszukiwarek + delSearchSessionData(); + + } + } + } +} + +//zwykłe logowanie +if ($_POST['in_subOK']=="Zaloguj" && strlen($_POST['in_login'])>3) +{ + usrLoginAndSiteAccess($_POST['in_login'], $_POST['in_pass'], $_POST['in_lang'], $_POST['in_system']); + //dodawanie informacji o wydziale + if (!empty($_SESSION['user'])) + { + //uprawnienia do oddziłu + $_SESSION['eq_stock_param3_1'] = $_POST['in_branch']; + $_SESSION['syndis_eq_stock'] = $_POST['in_branch']; + } +} + + +if (!empty($_SESSION['user'])) + { + if ($_SESSION['lang']) + { + include"./language/".$_SESSION['lang'].".php"; + $fileFlag = "./images/".$_SESSION['lang'].".png"; + } + if ($_SESSION['sys_typ']) + //$fileSys = "./images/".$_SESSION['sys_typ'].".png"; + $fileSys = "./images/SoftSPM_ent.png"; +?> + + +<?php +// sprawdza, czu użytkownik jest przypisany do jakiegoś wydziału +if ((empty($_SESSION['eq_stock_param3_1']) && empty($_SESSION['eq_stock_param3_1']) && empty($_SESSION['eq_stock_param3_1'])) && empty($_SESSION['war_about_priv']) && !empty($_SESSION['user'])) +{ + echo('<script>sweetAlert("Uwaga!", "Aktualnie zalogowany użytkownik nie jest przypisany do żadnego z wydziałów! Należy skontaktować się z administratorem w celu nadania odpowiednich ról w systemie.\n W niektórych przypadkach system będzie pokazywał wszystkie obiekty lub nie będzie pokazywał żadnego.\n\n Inną przyczyną może być pominięcie logowania bezpośrednio z systemu SYNDIS!", "warning");</script>'); + $_SESSION['war_about_priv']='Show'; +} +?> + + + + +<div class="main"> + + <div class="LogLog"> + <div class="logo_name"> + <?php echo"<img src='$fileSys' border='0'>"; ?> + </div> + <div class="logged_block"> + <a class='tooltip_logout' href='./?evnt=out'><img src="./images/logged.png" border="0"> <span><?php echo $lab_MenuOut ;?></span></a> + </div> + <span class="login_name"><?php echo $_SESSION['user'] ;?></span> + + <div class="language"> + <?php echo"<img style='max-height: 30px;' src='$fileFlag' border='0'>"; ?> + </div> + </div> + + <div class="system_name"><?php echo"<img src='./images/SoftTITLE.png' border='0'>"; ?></div> + <div class="head_space"></div> + + <div class="work_area"> + <div class="topmenu"> + <ul id="menu"> + <li><a href="#">&nbsp;&nbsp; <?php echo $lab_TopMenu_200 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site203'])) echo"<li><a href='?pg=site203'>&nbsp; $lab_SubMenu_203 </a></li>"; ?> + <?php if (!empty($_SESSION['site204'])) echo"<li><a href='?pg=site204'>&nbsp; $lab_SubMenu_204 </a></li>"; ?> + <?php if (!empty($_SESSION['site205'])) echo"<li><a href='?pg=site205'>&nbsp; $lab_SubMenu_205 </a></li>"; ?> + <?php if (!empty($_SESSION['site201'])) echo"<li><a href='?pg=site201'>&nbsp; $lab_SubMenu_201 </a></li>"; ?> + <?php if (!empty($_SESSION['site206'])) echo"<li><a href='?pg=site206'>&nbsp; $lab_SubMenu_206 </a></li>"; ?> + <?php if (!empty($_SESSION['site207'])) echo"<li><a href='?pg=site207'>&nbsp; $lab_SubMenu_207 </a></li>"; ?> + <?php if (!empty($_SESSION['site208'])) echo"<li><a href='?pg=site208'>&nbsp; $lab_SubMenu_208 </a></li>"; ?> + </ul> + </li> + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_300 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site303'])) echo"<li><a href='?pg=site303'>&nbsp; $lab_SubMenu_303 </a></li>"; ?> + <?php if (!empty($_SESSION['site304'])) echo"<li><a href='?pg=site304'>&nbsp; $lab_SubMenu_304 </a></li>"; ?> + <?php if (!empty($_SESSION['site301'])) echo"<li><a href='?pg=site301'>&nbsp; $lab_SubMenu_301 </a></li>"; ?> + <?php if (!empty($_SESSION['site302'])) echo"<li><a href='?pg=site302'>&nbsp; $lab_SubMenu_302 </a></li>"; ?> + <?php if (!empty($_SESSION['site309'])) echo"<li><a href='?pg=site309'>&nbsp; $lab_SubMenu_309 </a></li>"; ?> + <?php if (!empty($_SESSION['site306'])) echo"<li><a href='?pg=site306'>&nbsp; $lab_SubMenu_306 </a></li>"; ?> + <?php if (!empty($_SESSION['site307'])) echo"<li><a href='?pg=site307'>&nbsp; $lab_SubMenu_307 </a></li>"; ?> + <?php if (!empty($_SESSION['site308'])) echo"<li><a href='?pg=site308'>&nbsp; $lab_SubMenu_308 </a></li>"; ?> + </ul> + </li> + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_400 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site401'])) echo"<li><a href='?pg=site401'>&nbsp; $lab_SubMenu_401 </a></li>"; ?> + <?php if (!empty($_SESSION['site402'])) echo"<li><a href='?pg=site402'>&nbsp; $lab_SubMenu_402 </a></li>"; ?> + <?php if (!empty($_SESSION['site404'])) echo"<li><a href='?pg=site404'>&nbsp; $lab_SubMenu_404 </a></li>"; ?> + <?php if (!empty($_SESSION['site405'])) echo"<li><a href='?pg=site405'>&nbsp; $lab_SubMenu_405 </a></li>"; ?> + <?php if (!empty($_SESSION['site406'])) echo"<li><a href='?pg=site406'>&nbsp; $lab_SubMenu_406 </a></li>"; ?> + <?php if (!empty($_SESSION['site403'])) echo"<li><a href='?pg=site403'>&nbsp; $lab_SubMenu_403 </a></li>"; ?> + </ul> + </li> + + +<?php if (!empty($_SESSION['siteXXX'])) echo"<li><a href='?pg=siteXXX'>&nbsp; $lab_SubMenu_XXX </a></li>"; ?> + + + <?php + // dla STANDARD + if ($_SESSION['access_level']>1) + { + echo" + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_500 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site501>&nbsp; $lab_SubMenu_501 </a></li> + <li><a href=?pg=site502>&nbsp; $lab_SubMenu_502 </a></li> + <li><a href=?pg=site503>&nbsp; $lab_SubMenu_503 </a></li> + <li><a href=?pg=site504>&nbsp; $lab_SubMenu_504 </a></li> + </ul> + </li>"; + } + // dla ENTERPRICE + if ($_SESSION['access_level']>2) + { + echo" + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_600 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site601>&nbsp; $lab_SubMenu_601 </a></li> + <li><a href=?pg=site602>&nbsp; $lab_SubMenu_602 </a></li> + <li><a href=?pg=site603>&nbsp; $lab_SubMenu_603 </a></li> + </ul> + </li> + <li><a href='#'>|&nbsp;&nbsp; $lab_TopMenu_700 &nbsp;&nbsp;</a> + <ul> + <li><a href=?pg=site701>&nbsp; $lab_SubMenu_701 </a></li> + <li><a href=?pg=site702>&nbsp; $lab_SubMenu_702 </a></li> + <li><a href=?pg=site703>&nbsp; $lab_SubMenu_703 </a></li> + <li><a href=?pg=site704>&nbsp; $lab_SubMenu_704 </a></li> + </ul> + </li>"; + } + ?> + + <li><a href="#">|&nbsp;&nbsp; <?php echo $lab_TopMenu_800 ;?> &nbsp;&nbsp;</a> + <ul> + <?php if (!empty($_SESSION['site801'])) echo"<li><a href='?pg=site801'>&nbsp; $lab_SubMenu_801 </a></li>"; ?> + <?php if (!empty($_SESSION['site802'])) echo"<li><a href='?pg=site802'>&nbsp; $lab_SubMenu_802 </a></li>"; ?> + <?php if (!empty($_SESSION['site805'])) echo"<li><a href='?pg=site805'>&nbsp; $lab_SubMenu_805 </a></li>"; ?> + <?php if (!empty($_SESSION['site803'])) echo"<li><a href='?pg=site803'>&nbsp; $lab_SubMenu_803 </a></li>"; ?> + <?php if (!empty($_SESSION['site806'])) echo"<li><a href='?pg=site806'>&nbsp; $lab_SubMenu_806 </a></li>"; ?> + <?php if (!empty($_SESSION['site807'])) echo"<li><a href='?pg=site807'>&nbsp; $lab_SubMenu_807 </a></li>"; ?> + <?php if (!empty($_SESSION['site809'])) echo"<li><a href='?pg=site809'>&nbsp; $lab_SubMenu_809 </a></li>"; ?> + <?php if (!empty($_SESSION['site810'])) echo"<li><a href='?pg=site810'>&nbsp; $lab_SubMenu_810 </a></li>"; ?> + <li><a href=?pg=site804>&nbsp; <?php echo $lab_SubMenu_804 ;?> </a></li> + </ul> + </li> + + <li><a href="?pg=site900">|&nbsp;&nbsp; <?php echo $lab_TopMenu_900 ;?> &nbsp;&nbsp;</a></li> + + </ul> + </div> + + <br/> + <!-- buduje �ż�cie�ż�k�ż� w ramach kt�ż�rej si�ż� znajdujemy --> + <div class="path_map"> + <?php + if (!($_GET['pg'])) $_GET['pg']='site401'; + getPathFromSiteNumber($_GET['pg']); + + ?> + </div> + <br/> + + <?php + if ($_GET['pg']) + include'./sites/'.$_GET['pg'].'.php'; + else + include'./sites/site401.php'; + ?> + + </div> + + <div class="footer">&copy; SoftSPM, <?php echo date('Y'); ?>, v.1.25</div> + +</div> + +<?php +mysql_close($polacz); + + } +else + { +?> +<img style="position: relative; left: 0; width: 100%; opacity:0.5;" src="./images/tlo.jpg"> +<img src="./images/systemOnLoginName.png" style="position:fixed; top:20px; left: 25%; max-width: 50%;"> + + + <form action="./" method="post"> + <input type="hidden" name="in_system" value="SoftSPM_bas"> + <input type="hidden" name="in_lang" value="polish"> + + <div class="login_cointainer"> + <br/> + <table style="width: 80%; margin: 0px auto;"> + <tr> + <td style="width: 50%; font-size: 21px;">Logowanie</td> + <td style="width: 50%; text-align: right;"><img src="./images/pl.png" style="max-height: 24px;" title="Obsługa w języku polskim"></td> + </tr> + </table> + <p><hr style="width: 82%;"/><br/><br/></p> + <p style="text-align: center;"> + <img class='user_login' src='images/user-icon.png'><input class='log_pass' type='text' name='in_login' placeholder='podaj nazwę użytkownika'><br/><br/> + <img class='user_login' src='images/padlock-lock-icon.png'><input class='log_pass' type='password' name='in_pass' placeholder='podaj hasło'><br/><br/> + <img class='user_login' src='images/applications-icon.png'><select name="in_branch" class='log_branch'> + <option VALUE="P/Szczerców">P/Szczerców</OPTION> + <option VALUE="P/Bełchatów">P/Bełchatów</OPTION> + <option VALUE="Dębina">Dębina</OPTION> + </select> + <br/><br/> + </p> + <p style="text-align: center; padding-bottom: 20px;"> + <input name="in_subOK" type="submit" class="btn btn-primary" value="Zaloguj" /> + + </p> + + </div> + </form> + + + + +</div> + + +<?php + + } +//} + +?> + +<?php +//zamyka okienko dla sesji przeglądarki SYNDIS +//if (!empty($_SESSION['syndis_close_window'])) +// echo'<meta http-equiv="refresh" content="'.$_SESSION['syndis_close_window'].'; url=./?pg=closewindow">'; + + +?> + + +</BODY> +</HTML> + + diff --git a/sites/backup/rep_003_print.php b/sites/backup/rep_003_print.php new file mode 100644 index 0000000..2f1efc7 --- /dev/null +++ b/sites/backup/rep_003_print.php @@ -0,0 +1,302 @@ +<?php session_start(); +?> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Zrzut wody na odprowadzalniki</title> + + <!-- Bootstrap --> + <link href="./bootstrap.min.css" rel="stylesheet"> + +</head> +<body> + <script src="./jquery.min.js"></script> + + +<?php +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +?> + + +<?php +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' '), array('',''), $inDate); + return $out; +} + +function getFullTree($inOdprowadzID) +{ + unset($outParam); + unset($counter); $counter=0; + + $counter+= (float) sqlStringValue("select sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_ID=".$inOdprowadzID, "QM"); + + // ================================================================================================================================ + unset($getArray01); + $getArray01 = sqlGetResAsArray("select WWD_ID,WWD_NAME from softspm_rep.rep_003_data where WWD_PARENT_ID=".$inOdprowadzID." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID"); + for($i1=0; $i1<count($getArray01); $i1++) + { + $counter+= (float) sqlStringValue("select sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_ID=".$getArray01[$i1]['WWD_ID'], "QM"); + // ================================================================================================================================ + if ($getArray01[$i1]['WWD_ID']>0) + { + unset($getArray02); + $getArray02 = sqlGetResAsArray("select WWD_ID,WWD_NAME from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray01[$i1]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID"); + for($i2=0; $i2<count($getArray02); $i2++) + { + $counter+= (float) sqlStringValue("select sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_ID=".$getArray02[$i2]['WWD_ID'], "QM"); + // ================================================================================================================================ + if ($getArray02[$i2]['WWD_ID']>0) + { + unset($getArray03); + $getArray03 = sqlGetResAsArray("select WWD_ID,WWD_NAME from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray02[$i2]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID"); + for($i3=0; $i3<count($getArray03); $i3++) + { + $counter+= (float) sqlStringValue("select sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_ID=".$getArray03[$i3]['WWD_ID'], "QM"); + // ================================================================================================================================ + if ($getArray03[$i3]['WWD_ID']>0) + { + unset($getArray04); + $getArray04 = sqlGetResAsArray("select WWD_ID,WWD_NAME from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray03[$i3]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID"); + for($i4=0; $i4<count($getArray04); $i4++) + { + $counter+= (float) sqlStringValue("select sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_ID=".$getArray04[$i4]['WWD_ID'], "QM"); + // ================================================================================================================================ + if ($getArray04[$i4]['WWD_ID']>0) + { + unset($getArray05); + $getArray05 = sqlGetResAsArray("select WWD_ID,WWD_NAME from softspm_rep.rep_003_data where WWD_PARENT_ID=".$getArray04[$i4]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID"); + for($i5=0; $i5<count($getArray05); $i5++) + { + $counter+= (float) sqlStringValue("select sum(Q_MIN) QM from softspm_rep.rep_003_data where WWD_ID=".$getArray05[$i5]['WWD_ID'], "QM"); + } + } + + // ================================================================================================================================ + } + } + + // ================================================================================================================================ + } + } + + // ================================================================================================================================ + } + + } + // ================================================================================================================================ + } + // ================================================================================================================================ + + +// print_r($getArray01); + + // ================================================================================================================================ + // ================================================================================================================================ + // ================================================================================================================================ + // ================================================================================================================================ + // ================================================================================================================================ + // ================================================================================================================================ + + + + + $outParam = (float) $counter; + + return $outParam; +} + + + +?> + + +<div class="panel panel-danger"> + <div class="panel-heading"> + <h3 class="panel-title">Zrzut wody na odprowadzalniki <?php echo $_SESSION['syndis_eq_stock'];?> <br/>Studnie pracujące - status ON</h3> + </div> + <div class="panel-body"> + Na dzień:<b> <?php echo sqlStringValue("select max(WLL_AUDIT_CD) DT from softspm_rep.rep_003_data", "DT"); ?></b> + </div> + <div class="panel-footer"> + <a class="btn btn-default" href="#" role="button" onclick="window.print();">Drukuj &nbsp;&nbsp;<span class="glyphicon glyphicon-print" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-success" href="#" role="button">Eksport do Excel &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a>&nbsp;&nbsp;&nbsp; + <a class="btn btn-danger" href="#" role="button">Eksport do PDF &nbsp;&nbsp;<span class="glyphicon glyphicon-file" aria-hidden="true"></span></a> + </div> +</div> + + + +<table class="table table-bordered"> + <thead> + <tr> + <th>Zrzut</th> + <th></th> + <th>[m<sup>3</sup>/min]</th> + + </tr> + </thead> + + +<?php + + +$levVAL=0; +unset($rep003Array_00); +$rep003Array_00 = sqlGetResAsArray("select * from seg_water_drainage where WWD_PARENT_ID is null order by WWD_NAME"); +for($f=0;$f<count($rep003Array_00);$f++) +{ + + //poziom pierwszy + unset($rep003Array_01); + $rep003Array_01 = sqlGetResAsArray("select WWD_ID,WWD_NAME from softspm_rep.rep_003_data where WWD_PARENT_ID=".$rep003Array_00[$f]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by WWD_ID order by WWD_NAME"); + if (sqlValue("select count(*) from softspm_rep.rep_003_data where WWD_PARENT_ID=".$rep003Array_00[$f]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."'")>0) + { + echo" + <tr style='font-weight: bolder; background-color: #B22222; color: #ffffff;'> + <td style='width: 15%;'>".$rep003Array_00[$f]['WWD_NAME']."</td> + <td></td> + <td></td> + </tr> + "; + // ================================================================================================================================ + unset($rep003ArrayVal);$rep003ArrayVal=0; + for ($i1=0; $i1<count($rep003Array_01); $i1++) + { + $rep003ArrayVal+= (float) getFullTree($rep003Array_01[$i1]['WWD_ID']); + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rep003Array_01[$i1]['WWD_NAME']."</td> + <td style='font-weight: bolder; background-color: #ADD8E6;'>".getFullTree($rep003Array_01[$i1]['WWD_ID'])."</td> + </tr>"; + } + + echo" + <tr style='font-weight: bolder; background-color: #0000CD; color: #ffffff;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$rep003ArrayVal."</td> + </tr><tr style='height: 10px;'><tr> + "; + unset($rep003ArrayVal); + // ================================================================================================================================ + + + // ================================================================================================================================ + for ($i1=0; $i1<count($rep003Array_01); $i1++) + { + unset($rep003ArrayVal);$rep003ArrayVal=0; + + echo" + <tr style='font-weight: bolder; background-color: #FFEBCD;'> + <td>".$rep003Array_01[$i1]['WWD_NAME']."</td> + <td style='text-align: center;'> &mdash; &mdash; &mdash; &rang; &nbsp;&nbsp;&nbsp; ".$rep003Array_00[$f]['WWD_NAME']."</td> + <td></td> + </tr> + "; + + unset($rep003Array_02); + $rep003Array_02 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where WWD_ID=".$rep003Array_01[$i1]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + for($i2=0; $i2<count($rep003Array_02); $i2++) + { + + $rep003ArrayVal += (float) $rep003Array_02[$i2]['Q_MIN']; + + echo" + <tr> + <td>".$rep003Array_02[$i2]['WLL_BARIERA']."</td> + <td>".$rep003Array_02[$i2]['WLL_NAME']."</td> + <td>".$rep003Array_02[$i2]['Q_MIN']."</td> + </tr> + "; + } + + + unset($rep003Array_02); + $rep003Array_02 = sqlGetResAsArray("select * from softspm_rep.rep_003_data where WWD_ID=".$rep003Array_01[$i1]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' GROUP by WWD_ID"); + for($i2=0; $i2<count($rep003Array_02); $i2++) + { + unset($rep003Array_03); + $rep003Array_03 = sqlGetResAsArray("select WWD_ID,WWD_NAME from softspm_rep.rep_003_data where WWD_PARENT_ID=".$rep003Array_02[$i2]['WWD_ID']." and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' GROUP by WWD_ID"); + for($i3=0; $i3<count($rep003Array_03); $i3++) + { + $rep003ArrayVal += (float) getFullTree($rep003Array_03[$i3]['WWD_ID']); + + echo" + <tr> + <td></td> + <td style='background-color: #FFEBCD;'>".$rep003Array_03[$i3]['WWD_NAME']."</td> + <td>".getFullTree($rep003Array_03[$i3]['WWD_ID'])."</td> + </tr>"; + } + } + + echo" + <tr style='font-weight: bolder; background-color: #ADD8E6;'> + <td style='text-align: right;'>Łącznie</td> + <td></td> + <td>".$rep003ArrayVal."</td> + </tr><tr style='height: 10px;'><tr> + "; + unset($rep003ArrayVal); + + // ================================================================================================================================ + + + + + + + + } + + + + // ================================================================================================================================ + + + + } + + + +} + + + + + + + + + + + + + +?> +</table> + +<?php +mysql_close($polacz); + +?> + + <script src="./bootstrap.min.js"></script> +</body> +</html> diff --git a/sites/backup/site205.php b/sites/backup/site205.php new file mode 100644 index 0000000..7d45c65 --- /dev/null +++ b/sites/backup/site205.php @@ -0,0 +1,439 @@ +<?php +if (!empty($_SESSION['site205'])) +{ +?> + + +<?php +if ($_POST['subEng4PupUpdate']== $lab_ButtonName_Update) + { + $_GET['pup']=$_POST['pup']; + mysql_query("DELETE FROM seg_pump_engine_rel where RPE_PUP_ID=".$_POST['pup']); + + $wynik = mysql_query("select ENG_ID from seg_engines"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eID = $r["ENG_ID"]; + if ($_POST['eng4pump'][$eID]) + mysql_query("INSERT INTO seg_pump_engine_rel SET RPE_PUP_ID=".$_POST['pup'].",RPE_ENG_ID=$eID"); + } + } +?> + + + + + <form action="./?pg=site203&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td><?php getSelectValueAsArray('sr_param', $typSelArray,$_SESSION['site203_sr_param']); ?></td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site203_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>&nbsp;"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + + + + + + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site205_001 ;?></div> + <div class="tag"> + <table class="tag" style="width: 100%;"> + <TR> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002a ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select PUP_ID,MCF_NAME,PUP_NAME,(PUP_Q_N/60) PUP_Q_N from seg_pumps left join seg_manufacturers on PUP_MCF_ID=MCF_ID order by PUP_Q_N,PUP_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_203_PUP_ID = $r["PUP_ID"]; if(!$_GET['pup']) $_GET['pup']=$sql_203_PUP_ID; + $sql_203_PUP_MCF_ID = $r["MCF_NAME"]; + $sql_203_PUP_NAME = $r["PUP_NAME"]; + $sql_203_PUP_Q_N = round($r["PUP_Q_N"],3); $sql_203_PUP_Q_N= str_replace(".", ",", $sql_203_PUP_Q_N); + + if ($_GET['pup']==$sql_203_PUP_ID) + $styl = 'background-color: #ffff00;'; + else $styl=''; + + echo" + <TR STYLE='cursor: pointer; ".$styl."' onclick=".chr(34)."document.location.href='?pg=site205&pup=$sql_203_PUP_ID'".chr(34)."> + <TD class='field_left'>$sql_203_PUP_NAME</TD> + <TD class='field_right'>$sql_203_PUP_Q_N</TD> + <TD class='field_center'>$sql_203_PUP_MCF_ID</TD> + </TR> + "; + } + ?> + </table> + </div> +</div> + + + + + + + + +<div class="tag50_right"> + <div class="head_tag"><?php echo $lab_Tag_site203_006.sqlValue("select PUP_NAME from seg_pumps where PUP_ID=".$_GET['pup']) ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select RPE_ENG_ID,ENG_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=ENG_MCF_ID) ENG_MCF,ENG_VOLTAGE from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["RPE_ENG_ID"]; if (!$_GET['eng']) $_GET['eng']=$param_1; + $param_4 = $r["ENG_NAME"]; + $param_5 = $r["ENG_VOLTAGE"]; $param_6= str_replace(".", ",", $param_6); + $param_6 = $r["ENG_MCF"]; + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site205&pup=".$_GET['pup']."&eng=$param_1'".chr(34)."> + <TD class='field_center'>$param_4</TD> + <TD class='field_center'>$param_5</TD> + <TD class='field_center'>$param_6</TD> + </TR>"; + } + ?> + </table> + </div> + <?php + $wynik = mysql_query("select PUP_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=PUP_MCF_ID) PUP_MCF,(PUP_Q_N/60) PUP_Q_N,PUP_H_P,PUP_ETA_MAX,ENG_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=ENG_MCF_ID) ENG_MCF,ENG_VOLTAGE,ENG_POWER,ENG_ETA from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']." and RPE_ENG_ID=".$_GET['eng']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $mix_1 = $r["PUP_NAME"]; + $mix_2 = $r["PUP_MCF"]; + $mix_3 = round($r["PUP_Q_N"],3); $mix_3= str_replace(".", ",", $mix_3); + $mix_4 = $r["PUP_H_P"]; $mix_4= str_replace(".", ",", $mix_4); + $mix_5 = $r["PUP_ETA_MAX"]; $mix_5= str_replace(".", ",", $mix_5); + $mix_6 = $r["ENG_NAME"]; + $mix_7 = $r["ENG_MCF"]; + $mix_8 = $r["ENG_VOLTAGE"]; + $mix_9 = $r["ENG_POWER"]; $mix_9= str_replace(".", ",", $mix_9); + $mix_10 = $r["ENG_ETA"]; $mix_10= str_replace(".", ",", $mix_10); + } + + ?> + + + <div class="head_tag"><?php echo sqlValue("select concat (PUP_NAME, ' + ',ENG_NAME) from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']." and RPE_ENG_ID=".$_GET['eng']) ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR > + + <?php echo"<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site203inf&pup=".$_GET['pup']."'".chr(34).">"; ?> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_1; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_2; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_002a; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_003; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_009; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_5; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <?php echo"<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site204inf&eng=".$_GET['eng']."'".chr(34).">"; ?> + <TD class="desc"><?php echo $lab_Field_site204_001; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_6; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_004; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_7; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_002; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_8; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_003; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_9; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_006; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_10; ?></TD> + </TR> + </table> + </div> + + + <?php + if ($_GET['pup']>0) + { + + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_01.png"; + $fileName2="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_02.png"; + + if (file_exists( $fileName1)) unlink($fileName1); + if (file_exists( $fileName2)) unlink($fileName2); + + // Wysokość podnoszenia + // =======================================================================================// + require_once('./polynomial/PolynomialRegression.php' ); + require_once('./polynomial/plot.php' ); + + + unset($scope); + unset($data); + unset($newParam); + + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $scope[] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); + + $yMax = sqlValue("select max(PEP_Y_PARAM) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $yMax = ceil($yMax+10); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = ceil($yMax/4); + $Y_MinorScale = $Y_MajorScale / 2; + + $data = $newParam; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax); + $plot->setY_Span( 0, ceil($yMax/4)*4 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression->getCoefficients(); + + // Place text + imageString($image,5,0,0,'H[m]',$colorMap[ "Black" ]); + imageString($image,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty +// plotRenderRegression( $polynomialRegression, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[0], $scope[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[2], $scope[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[3], $scope[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[5], $scope[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[6], $xMaxLine, $colorMap[ "Red" ] ); + + imagePNG( $image,$fileName1); + // =======================================================================================// + + + require_once('./polynomial/plot1.php' ); + + unset($scope1); + unset($data); + unset($newParam); + + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam1[$i][$j] = $r["PEP_X_PARAM"]; + $scope1[] = $r["PEP_X_PARAM"]; + $j++; + $newParam1[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + + $Y_MajorScale = 0.2; + $Y_MinorScale = $Y_MajorScale / 2; + + + $data1 = $newParam1; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression1 = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data1 as $dataPoint1 ) + $polynomialRegression1->addData( $dataPoint1[ 0 ], $dataPoint1[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data1, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, 1 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression1->getCoefficients(); + + // Place text + imageString($image1,5,0,0,'n',$colorMap[ "Black" ]); + imagerectangle($image1,6,12,7,17,$colorMap[ "Black" ]); + imageString($image1,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + // plotRenderRegression( $polynomialRegression1, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[0], $scope1[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[2], $scope1[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[3], $scope1[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[5], $scope1[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[6], $xMaxLine, $colorMap[ "Red" ] ); + + + imagePNG( $image1,$fileName2); + + + } + + ?> + + + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if (count($scope)>0) + echo"<img SRC=$fileName1>"; + else + echo $lab_Field_site203_017; + ?> + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if (count($scope1)>0) + echo"<img SRC=$fileName2>"; + else + echo $lab_Field_site203_017; + ?> + </div> + + + + +</div> + + + + <?php + if (!empty($_SESSION['site205_edit'])) + echo" + <div class='tag100'> + <div class='tag_buttons'> + <a href='javascript:history.back()'><INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Back'></A> + <a href=?pg=site205E&pup=".$_GET['pup']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + </div> + </div> + "; + ?> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/backup/site303.php b/sites/backup/site303.php new file mode 100644 index 0000000..7d0ca64 --- /dev/null +++ b/sites/backup/site303.php @@ -0,0 +1,261 @@ +<?php +if (!empty($_SESSION['site303'])) +{ +?> + + + +<?php + // dodawanie pomy na stan + if ($_POST['inPumpID']>0 && $_POST['subPumpSave']==$lab_ButtonName_Save) + { + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=".$_POST['inPumpID']." and DRS_SN_NUMBER='".$_POST['inPumpSN']."'")==0) + { + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=".$_POST['inPumpID'].",DRS_DEV_TYPE=10,DRS_SN_NUMBER='".$_POST['inPumpSN']."',DRS_BUY_DATE='".$_POST['inPumpBuyDate']."',DRS_AVAILABLE_DATE='".$_POST['inPumpAvDate']."',DRS_STATUS_DIC_ID=".$_POST['inPumpStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inPumpDevRes'].",DRS_DEV_ATTENTION='".$_POST['inPumpAtt']."',DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inPumpEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxDRSid); + delSearchSessionData(); + } + else + { + echo"<div class='actionERROR'>$lab_SaveRecordNotification_004</div>"; + delSearchSessionData(); + } + } + + //usuwanie + // ================================================================================== + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_PUP_DRS_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_dev_resources WHERE DRS_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } + } + // ================================================================================== + + +?> + + + +<?php + + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site203_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site303&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Typ pompy:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site203_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site303_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + <TD class="label">Dostępne [szt.]</TD> + <TD class="label">Użytkowane [szt.]</TD> + <TD class="label">W remoncie [szt.]</TD> + <TD class="label">Niedostępne [szt.]</TD> + <TD class="label">Nieużytkowane [szt.]</TD> + <TD class="label">Ilość razem [szt.]</TD> + + + </TR> + + <?php + + if (empty($_SESSION['site303_array']) || $_POST['sub_search']=='Szukaj') + { + //$query = "select PUP_ID,count(PUP_ID) ILOSC,PUP_NAME,MCF_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_NAME like '%".$_POST['sr_well']."%' and PUP_ID>0 and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8)"; + $query = "select PUP_ID,count(PUP_ID) ILOSC,PUP_NAME,MCF_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_NAME like '%".$_POST['sr_well']."%' and PUP_ID>0 and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."'"; + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " group by PUP_ID,PUP_NAME,MCF_NAME order by PUP_NAME,PUP_Q_N"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + + //NOWE+ REZERWA+ EKSPLOATACJA+ REMONT+ KASACJA + + unset($arrayStatuses); +// $arrayStatuses = sqlGetResAsArray("select DRS_STATUS_DIC_ID, count(DRS_STATUS_DIC_ID) ILE from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and PUP_ID=DRS_DEV_ID and DRS_STATUS_DIC_ID in (6,7,8) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$r["PUP_ID"]." group by DRS_STATUS_DIC_ID"); + $arrayStatuses = sqlGetResAsArray("select DRS_STATUS_DIC_ID, count(DRS_STATUS_DIC_ID) ILE from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and PUP_ID=DRS_DEV_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$r["PUP_ID"]." group by DRS_STATUS_DIC_ID"); + $dostepne=0; $uzytkowa=0; $remont=0; $nieuzytk=0; + for ($s=0; $s<count($arrayStatuses); $s++) + { + if ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==6) + $dostepne = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==7) + $uzytkowa = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==8) + $remont = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==9) + $niedostepne = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==30) + $nieuzytk = $arrayStatuses[$s]['ILE']; + } + + + + $res[]=array( + 'id' => $r["PUP_ID"], + 'mfc' => $r["MCF_NAME"], + 'pumpName' => $r["PUP_NAME"], + 'pumpcount' => $r["ILOSC"], + 'dostepne' => $dostepne, + 'uzytkowa' => $uzytkowa, + 'remont' => $remont, + 'ndostpne' => $niedostepne, + 'notused' => $nieuzytk + ); + } + unset($_SESSION['site303_array']); + $_SESSION['site303_array']=$res; + } + + + //print_r($_SESSION['site303_array']); + //echo"<br/><br/><br/>"; + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site303_array'])) $stop=count($_SESSION['site303_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site303list&pup=".$_SESSION['site303_array'][$i]['id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site303_array'][$i]['pumpName']."</TD> + <TD class='field_center'>".$_SESSION['site303_array'][$i]['mfc']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['dostepne']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['uzytkowa']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['remont']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['ndostpne']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['notused']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['pumpcount']."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site303_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site303_array'])>20) + echo pagination_grid('?pg=site303', $_GET['pgn'], count($_SESSION['site303_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site303_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site303_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + + </div> + + <?php + if (!empty($_SESSION['site303_edit'])) + echo" + <div class=tag_buttons> + <a href='./?pg=site303A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/backup/site304.php b/sites/backup/site304.php new file mode 100644 index 0000000..8d6472b --- /dev/null +++ b/sites/backup/site304.php @@ -0,0 +1,175 @@ +<?php +if (!empty($_SESSION['site304'])) +{ +?> + + <?php + if (empty($_GET['eng'])) delSearchSessionData(); + ?> + + +<?php + if ($_POST['inEngineID']>0 && $_POST['subEngineSave']==$lab_ButtonName_Save) + { + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=".$_POST['inEngineID'].",DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='ENGINE'),DRS_SN_NUMBER='".$_POST['inEngineSN']."',DRS_BUY_DATE='".$_POST['inEngineBuyDate']."',DRS_AVAILABLE_DATE='".$_POST['inEngineAvDate']."',DRS_STATUS_DIC_ID=".$_POST['inEngineStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inEngineDevRes'].",DRS_DEV_ATTENTION='".$_POST['inEngineAtt']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inEngineEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxDRSid); + unset($_SESSION['site304_print_array']); + } + +?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site304_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label">Dostępne [szt.]</TD> + <TD class="label">Użytkowane [szt.]</TD> + <TD class="label">W remoncie [szt.]</TD> + <TD class="label">Ilość razem [szt.]</TD> + </TR> + + <?php + if (empty($_SESSION['site304_array'])) + $_SESSION['site304_array'] = sqlGetResAsArray("select ENG_ID,count(ENG_ID) ILOSC,ENG_NAME,MCF_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_ID>0 and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8) group by ENG_ID,ENG_NAME,MCF_NAME order by ENG_NAME"); + + + if (empty($_SESSION['site304_print_array'])) + { + $res=null; + $wynik = mysql_query("select DRS_SN_NUMBER,DRS_RESOURCES_DIC_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 where ENG_ID>0 and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8,30) order by ENG_NAME,ENG_POWER"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'ENG_NAME' => $r["ENG_NAME"], + 'DRS_SN_NUMBER' => $r["DRS_SN_NUMBER"], + 'STATUS' => setDicName($r["DRS_RESOURCES_DIC_ID"]), + 'ENG_VOLTAGE' => $r["ENG_VOLTAGE"], + 'ENG_POWER' => $r["ENG_POWER"], + 'WLL_NAME' => $r["WLL_NAME"], + 'DRS_DEPARTMENT' => $_SESSION['syndis_eq_stock'] + ); + + } + unset($_SESSION['site304_print_array']); + $_SESSION['site304_print_array']=$res; + } + + + + if (isset($_GET['eng']) && $_GET['eng']>0) + $eng_array = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 where DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8,30) and ENG_ID=".$_GET['eng']); + + //select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,PUP_ID,PUP_NAME,PUP_Q_N,PUP_H_P,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 where DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8,30) and ENG_ID=".$_GET['eng']) + + for($i=0; $i<count($_SESSION['site304_array']); $i++) + { + + unset($arrayStatuses); + $arrayStatuses = sqlGetResAsArray("select DRS_STATUS_DIC_ID, count(DRS_STATUS_DIC_ID) ILE from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and ENG_ID=DRS_DEV_ID and DRS_STATUS_DIC_ID in (6,7,8) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$_SESSION['site304_array'][$i]['ENG_ID']." group by DRS_STATUS_DIC_ID"); + + $dostepne=0; $uzytkowa=0; $remont=0; $nieuzytk=0; + for ($s=0; $s<count($arrayStatuses); $s++) + { + if ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==6) + $dostepne = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==7) + $uzytkowa = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==8) + $remont = $arrayStatuses[$s]['ILE']; + elseif ($arrayStatuses[$s]['DRS_STATUS_DIC_ID']==30) + $nieuzytk = $arrayStatuses[$s]['ILE']; + } + + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site304&eng=".$_SESSION['site304_array'][$i]['ENG_ID']."'".chr(34)."> + <TD class='field_left'>".$_SESSION['site304_array'][$i]['ENG_NAME']."</TD> + <TD class='field_center'>".$_SESSION['site304_array'][$i]['MCF_NAME']."</TD> + <TD class='field_center'>".$dostepne."</TD> + <TD class='field_center'>".$uzytkowa."</TD> + <TD class='field_center'>".$remont."</TD> + <TD class='field_center'>".$_SESSION['site304_array'][$i]['ILOSC']."</TD> + </TR> + "; + + if (isset($_GET['eng']) && $_GET['eng']>0 && count($eng_array)>0 && $_GET['eng']==$_SESSION['site304_array'][$i]['ENG_ID']) + { + echo" + <tr> + <td colspan='6' class='eq_details'> + <table WIDTH='100%' class='tag'> + <TR> + <TD class='eq_label'>Lp.</TD> + <TD class='eq_label'>".$lab_Field_site204_001."</TD> + <TD class='eq_label'>".$lab_Field_site303_001."</TD> + <TD class='eq_label'>".$lab_Field_site204_002."</TD> + <TD class='eq_label'>".$lab_Field_site204_003."</TD> + <TD class='eq_label'>".$lab_Field_site203_022."</TD> + <td class='eq_label'>".$lab_Field_site303_004."</td> + </TR> + "; + + for ($j=0; $j<count($eng_array); $j++) + { + + echo" + <tr STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site304inf&dev=".$eng_array[$j]['DRS_ID']."'".chr(34)."> + <td class='field_left group_color'>".($j+1)."</td> + <td class='field_left group_color'>".$eng_array[$j]['ENG_NAME']."</td> + <td class='field_center group_color'>".$eng_array[$j]['DRS_SN_NUMBER']."</td> + <td class='field_right group_color'>".$eng_array[$j]['ENG_VOLTAGE']."</td> + <td class='field_right group_color'>".$eng_array[$j]['ENG_POWER']."</td> + <td class='field_center group_color'>".$eng_array[$j]['WLL_NAME']."</td> + <td class='field_center group_color'>".setDicName($eng_array[$j]['DRS_STATUS_DIC_ID'])."</td> + </tr> + "; + } + echo" + </table> + </td> + </tr>"; + } + + } + ?> + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site304_print_array']); ?></span></td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site304_xls.php" target="_blank" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site304_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + </div> + + <?php + if (!empty($_SESSION['site304_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site304A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/backup/site309E.php b/sites/backup/site309E.php new file mode 100644 index 0000000..bb088b6 --- /dev/null +++ b/sites/backup/site309E.php @@ -0,0 +1,122 @@ +<?php +if (!empty($_SESSION['site309_edit'])) +{ +?> + +<script> + $(function() {$( "#data_01" ).datepicker(); }); +</script> + + + +<div class="tag100"> +<FORM ACTION="?pg=site309inf&dev=<?php echo $_GET['dev'];?>" METHOD="POST"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + <input type="hidden" name="sprid" value="<?php echo $_SESSION['site309inf_array'][0]["SRP_ID"]; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site309_003 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + + echo" + + <TR> + <TD class=desc> $lab_Tag_site302_004 </TD> + <TD CLASS=desc_value> <INPUT class='text50_req' TYPE='TEXT' NAME='inRePieName' value='".$_SESSION['site309inf_array'][0]["SRP_NAME"]."' required> </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site301_014 </TD> + <TD CLASS=desc_value> + <select name='inPieBariera'> + "; + $result = mysql_query("select SWI_ID,SWI_NAME from seg_water_intakes order by SWI_NAME"); + if($result)while ($r = mysql_fetch_array($result)) + { + if ($r["SWI_ID"]==$_SESSION['site309inf_array'][0]["SRP_SWI_ID"]) + echo"<option value='".$r["SWI_ID"]."' selected>".$r["SWI_NAME"]."</option>"; + else + echo"<option value='".$r["SWI_ID"]."'>".$r["SWI_NAME"]."</option>"; + } + echo" + + </select> + </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site303_001 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieSN' value='".$_SESSION['site309inf_array'][0]["DRS_SN_NUMBER"]."'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieAsset' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["ASSET"])."'> </TD> + </TR> + + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DEPTH'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieDepth' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["DEPTH"])."' required> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DIAMETER'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieDiameter' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["DIAMETER"])."' required> </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site309_001 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inSonda' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["SONDA"])."' required> </TD> + </TR> + + + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='REPAIR_LEVEL'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inRePieRepair' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["REPAIR_LEVEL"])."'> </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site301_008 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLat' value='".$_SESSION['site309inf_array'][0]["OHC_DL_GEOGR"]."' required> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_009 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLong' value='".$_SESSION['site309inf_array'][0]["OHC_SZER_GEOGR"]."' required> </TD> + </TR> + <TR> + <TD class=desc> $lab_Tag_site302_003 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inRePieStatus', 'PIEZO_STATUS_LEVEL_01',$_SESSION['site309inf_array'][0]["DRS_RESOURCES_DIC_ID"]); echo"</TD> + </TR> + + <TR> + <TD class=desc>".$lab_Field_site301_025."</TD> + <TD CLASS=desc_value>"; selectDescriptionFromDictionary('inPieSysType', 'PIEZO_SYSTEM_TYPE', $_SESSION['site309inf_array'][0]["SRP_SYS_TYPE"]); echo"</TD> + </TR> + <TR> + <TD class=desc>".$lab_Field_site802_002."</TD> + <TD CLASS=desc_value>"; selectDescriptionFromDictionary('inPieDesc', 'PIEZO_STATUS_LEVEL_03', $_SESSION['site309inf_array'][0]["SRP_STAT_DESC"]); echo"</TD> + </TR> + + + + + "; + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site309inf&dev=<?php echo $_GET['dev']; ?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subRePieUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/backup/site401ahis.php b/sites/backup/site401ahis.php new file mode 100644 index 0000000..cf27d04 --- /dev/null +++ b/sites/backup/site401ahis.php @@ -0,0 +1,249 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + //paginacja + if (!$_GET['pgn']) + { + $_GET['pgn']=1; + //delSearchSessionData(); + } + ?> + + <?php + // pamięta z na jaką stronę ma przenieść, klikając - Cofnij + if (!empty($_GET['site'])) $_SESSION['site401ahis_site']=$_GET['site']; + ?> + + + <?php + // wybieranie dat z poszczególnych agregatów + if (!empty($_GET['df'])) + { + $_SESSION['site401ahis_from'] = $_GET['df']; + if (strlen($_GET['dt'])>0) $_SESSION['site401ahis_to']=$_GET['dt']; + else $_SESSION['site401ahis_to']=date('Y-m-d'); + } + + + if (empty($_POST['inDateFrom']) && empty($_SESSION['site401ahis_from'])) $_SESSION['site401ahis_from'] = date('Y-m')."-01"; + else if (!empty($_POST['inDateFrom'])) $_SESSION['site401ahis_from']=$_POST['inDateFrom']; + + if (empty($_POST['inDateTo']) && empty($_SESSION['site401ahis_to'])) $_SESSION['site401ahis_to'] = date('Y-m-d'); + else if (!empty($_POST['inDateTo'])) $_SESSION['site401ahis_to']=$_POST['inDateTo']; + + if ($_POST['sub_search']=='Pokaż' || !empty($_GET['df'])) + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; + + ?> + + <form action="?pg=site401ahis&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Wyświetl dane za okres od:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDateFrom' value='<?php echo $_SESSION['site401ahis_from']; ?>' SIZE='10'></td> + <td style="width: 15px;"></td> + <td>do:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDateTo' value='<?php echo $_SESSION['site401ahis_to']; ?>' SIZE='10'></td> + <td style="width: 20px;"></td> + <td><input type="submit" name="sub_search" value="Pokaż" class="btn btn-default btn-sm" onclick="makeRequest('?pg=site401ahis')"></td> + </tr> + <tr><td>&nbsp;</td></tr> + </table> + </div> + </form> + + + + + <div class="tag100"> + <div class="head_tag">Wymiany agregatów - <?php echo $_SESSION['well_details']['wellName']; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Nr</TD> + <TD class="label">Typ pompy</TD> + <TD class="label">Nr pompy</TD> + <TD class="label">Typ silnika</TD> + <TD class="label">Nr silnika</TD> + <TD class="label">Data zab.</TD> + <TD class="label">Data wyb.</TD> + <TD class="label">L<sub>S</sub> [m]</TD> + <TD class="label">D<sub>R</sub> [mm]</TD> + <TD class="label">Powód</TD> + </TR> + + + + + <?php + $wynik = mysql_query("select WLE_ID,WLE_NR_EXCHANGE,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_ZP,WLE_DR,WLE_REASON from seg_wells_exchanged where WLE_WLL_ID=".$_SESSION['well_details']['wellID']." order by WLE_NR_EXCHANGE desc "); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sqID = $r["WLE_ID"]; + $sqNR_EXCHANGE = $r["WLE_NR_EXCHANGE"]; + $sqPUMP_NAME = $r["WLE_PUMP_NAME"]; + $sqPUMP_NO = $r["WLE_PUMP_NO"]; + $sqENG_NAME = $r["WLE_ENG_NAME"]; + $sqENG_NO = $r["WLE_ENG_NO"]; + $sqDATE_FROM = $r["WLE_DATE_FROM"]; + $sqDATE_TO = $r["WLE_DATE_TO"]; + $sqZP = $r["WLE_ZP"]; + $sqDR = $r["WLE_DR"]; + $sqREASON = $r["WLE_REASON"]; + + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site401ahis&df=".substr($sqDATE_FROM,0,10)."&dt=".substr($sqDATE_TO,0,10)."'; makeRequest('?pg=site401ahis');".chr(34)."> + <TD class='field_left'>$sqNR_EXCHANGE</TD> + <TD class='field_left'>$sqPUMP_NAME</TD> + <TD class='field_left'>$sqPUMP_NO</TD> + <TD class='field_left'>$sqENG_NAME</TD> + <TD class='field_left'>$sqENG_NO</TD> + <TD class='field_left'>$sqDATE_FROM</TD> + <TD class='field_left'>$sqDATE_TO</TD> + <TD class='field_left'>$sqZP</TD> + <TD class='field_left'>$sqDR</TD> + <TD class='field_left'>$sqREASON</TD> + </TR> + + + "; + + + } + ?> + </table> + </div> + + + <?php + + if ($_POST['sub_search']=='Pokaż' || !empty($_GET['df'])) + { + if (strlen($_POST['inDateTo'])>6) $query="select RHD_DATE,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_DATE>='".$_POST['inDateFrom']." 00:00:00' and RHD_DATE<='".$_POST['inDateTo']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID']." order by RHD_DATE desc"; + else $query="select RHD_DATE,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_DATE>='".$_POST['inDateFrom']." 00:00:00' and RHD_DATE<='".$_SESSION['site401ahis_to']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID']." order by RHD_DATE desc"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'his_date' => $r["RHD_DATE"], + 'his_hst' => $r["RHD_HST_VAL"], + 'his_hd' => $r["RHD_HD_VAL"], + 'his_q' => round($r["RHD_Q_VAL"]/60,2), + 'his_p1' => $r["RHD_P1_VAL"], + 'his_p2' => $r["RHD_P2_VAL"], + 'his_I' => $r["RHD_I_VAL"], + 'his_U' => $r["RHD_U_VAL"], + 'his_PE' => $r["RHD_PE_VAL"], + 'his_cos' => $r["RHD_COS_VAL"], + 'his_work_time' => $r["RHD_WORK_TIME_VAL"] + ); + } + unset($_SESSION['site401ahis_array']); + $_SESSION['site401ahis_array']=$res; + } + + + + + if (!empty($_SESSION['site401ahis_array'])) + { + echo" + <div class='head_tag'>Dane historyczne [od ".$_SESSION['site401ahis_from']." do ".$_SESSION['site401ahis_to']."]</div> + <div class='tag'> + <table WIDTH='100%' class='tag'> + <TR> + <TD class='label'>Lp.</TD> + <TD class='label'>Data</TD> + <TD class='label'>H<sub>ST</sub> [m]</TD> + <TD class='label'>H<sub>D</sub> [m]</TD> + <TD class='label'>Q [m<sup>3</sup>/min] </TD> + <TD class='label'>p<sub>1</sub> [m]</TD> + <TD class='label'>p<sub>2</sub> [m]</TD> + <TD class='label'>I [A]</TD> + <TD class='label'>U [V]</TD> + <TD class='label'>P<sub>e</sub> [kW]</TD> + <TD class='label'>cos(&#966;)</TD> + <TD class='label'>Czas pracy [h]</TD> + </TR>"; + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site401ahis_array'])) $stop=count($_SESSION['site401ahis_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <tr> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_date']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_hst']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_hd']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_q']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_p1']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_p2']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_I']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_U']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_PE']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_cos']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_work_time']."</TD> + </TR> + "; + } + echo" + </table>"; + ?> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site401ahis_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site401ahis_array'])>20) + echo pagination_grid('?pg=site401ahis', $_GET['pgn'], count($_SESSION['site401ahis_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site401ahis_xls.php" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site401ahis_pdf.php" title="Export do PDF"><img src="./images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site401ahis_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + <?php + echo" + </div> + "; + } + ?> + </div> + + <div class="tag100"> + <div class="tag_buttons"> + <a href='?pg=<?php echo $_SESSION['site401ahis_site']; ?>&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class="btn btn-info btn-sm" TYPE='BUTTON' VALUE='Powrót'></A> + </div> + </div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/backup/site401inf.php b/sites/backup/site401inf.php new file mode 100644 index 0000000..69578b4 --- /dev/null +++ b/sites/backup/site401inf.php @@ -0,0 +1,459 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php +if (empty($_SESSION['well_details'])) + header("Location: /?pg=site401"); +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + </script> + +<?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; +?> + + +<?php +if ($_POST['subWellParamSave']==$lab_ButtonName_Save) +{ + $_GET['dev'] = $_POST['dev']; +// $_GET['dic'] = $_POST['dic']; + + // zamiana m3/min na m3/h + $_POST['inWellParamValue'] = str_replace(',','.',$_POST['inWellParamValue']); + if ($_POST['dic']==200) $_POST['inWellParamValue'] = $_POST['inWellParamValue']*60; + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=".$_POST['dic'].",DRD_VALUE='".$_POST['inWellParamValue']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inWellParamDate']." ".date('H:i:s')."';"); + + //aktualizauje tabelę seg_dev_major_data + $idMax = sqlValue("select max(DMD_ID) from seg_dev_major_data where DMD_DRS_ID=".$_POST['dev']); + if ($_POST['dic']==200) mysql_query("update seg_dev_major_data set DRD_Q=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==270) mysql_query("update seg_dev_major_data set DRD_L1=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==275) mysql_query("update seg_dev_major_data set DRD_U_L12=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==245) mysql_query("update seg_dev_major_data set DRD_WATER_TEMP=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==260) mysql_query("update seg_dev_major_data set DRD_POWER=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==280) mysql_query("update seg_dev_major_data set DRD_COS_FI=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==265) mysql_query("update seg_dev_major_data set DRD_ENERGY=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==230) mysql_query("update seg_dev_major_data set DRD_WATER_PUMPED=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==290) mysql_query("update seg_dev_major_data set DRD_RUN_TIME=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==205) mysql_query("update seg_dev_major_data set DRD_HD=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==215) mysql_query("update seg_dev_major_data set DRD_P1=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==220) mysql_query("update seg_dev_major_data set DRD_P2=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==225) mysql_query("update seg_dev_major_data set DRD_PB=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + else if ($_POST['dic']==210) mysql_query("update seg_dev_major_data set DRD_HST=".$_POST['inWellParamValue']." where DMD_ID=".$idMax); + unset($idMax); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; +} +?> + + +<?php +//kasuje daty w histori pomiarów + unset($_SESSION['site401ahis_from']); + unset($_SESSION['site401ahis_to']); + unset($_SESSION['site401ahis_array']); + + if ($_SESSION['lang']=='polish') + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_polish.png"; + else + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_english.png"; + + if ($_SESSION['well_details']['testID']>0) $chLink = "./?pg=site401charts&t=".$_SESSION['well_details']['testID']; + else $chLink = "#"; + + +?> + + + +<div class="tag50_left"> + + <div class="head_tag">Studnia</div> + <div class="tag_WellName"> + <?php echo $_SESSION['well_details']['wellName']; ?> + </div> + + +<?php +if ($_SESSION['well_details']['wellTypeID']==20) + $timeHeader = "Data ostatniej aktualizacji danych"; +else + $timeHeader = "Data ostatniej aktualizacji danych z SYNDIS"; + +?> + + <div class="head_tag"><?php echo $timeHeader;?></div> + <div class="tag_WellDate"> + <?php echo sqlStringValue("select getLastMeasureDate(200,".$_GET['dev'].") MDT", "MDT"); ?> + </div> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + + + + ?> + + + <div class="head_tag"><?php echo $lab_Tag_site301_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_016; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['wellName']; ?></TD> + </TR> + + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_017; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DIC_ENG_LANG from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_ENG_LANG"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_006; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DRS_AVAILABLE_DATE from seg_dev_resources where DRS_ID=".$_SESSION['well_details']['devID'], "DRS_AVAILABLE_DATE"); ?></TD> + </TR> + + + <?php + $result = mysql_query("select DIC_ID,DIC_NAME,".$decFieldLang." from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + $var_FLD_NAME = $r[$decFieldLang]; + + //warunek dla głębokości filtrów + if ($var_DIC_ID==120) + { + echo" + <TR> + <TD class='desc_well_param'>".$var_FLD_NAME."</TD> + <TD CLASS='desc_value'><a class='kontrukcja' href='?pg=site310&dev=".$_GET['dev']."&tab=4&direct=401'>".$lab_ButtonName_HoleCard_004." &raquo;</a></TD> + </TR> + "; + } + else + { + echo" + <TR> + <TD class='desc_well_param'>".$var_FLD_NAME."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData_01($var_DIC_ID,'WELL_TECHNICAL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf')."</TD>"; + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=$var_DIC_ID'".chr(34)."></td>"; + + echo" + </TR> + "; + } + } + ?> + + <TR> + <TD class="desc_well_param">Głębokość zabudowy pompy L<sub>P</sub> [m]</TD> + <TD CLASS='desc_value'><?php echo getLinkToShowHistoricalData_01(240,'WELL_PARAMETERS','LPM',$_SESSION['well_details']['devID'],'site401inf');?></TD> + <?php + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=240'".chr(34)."></td>"; + ?> + </TR> + <TR> + <TD class="desc_well_param">Średnica rurociągu D<sub>R</sub> [mm]</TD> + <TD CLASS='desc_value'><?php echo getLinkToShowHistoricalData_01(235,'WELL_PARAMETERS','DR',$_SESSION['well_details']['devID'],'site401inf');?></TD> + <?php + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=235'".chr(34)."></td>"; + ?> + </TR> + + <TR> + <TD class="desc_well_param">m [m]</TD> + <TD CLASS='desc_value'><?php echo getLinkToShowHistoricalData_01(251,'WELL_PARAMETERS','DR',$_SESSION['well_details']['devID'],'site401inf');?></TD> + <?php + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=251'".chr(34)."></td>"; + ?> + </TR> + + + </table> + </div> + + + <div class="head_tag"> + + + <div style="display:inline-block; font-size: 14px; color: #ffffff;"><?php echo $lab_Tag_site401_002 ;?></div> + <?php if (!empty($_SESSION['site401_edit'])): ?> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgEditAction"><img style='cursor: pointer;' src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>'></div> + + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgSaveAction"><img style='cursor: pointer;' src='./images/save-icon.png' title='<?php echo $lab_Field_site803_011;?>'></div> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgCancelAction"><img style='cursor: pointer;' src='./images/cancel-16.png' title='<?php echo $lab_Field_site803_012;?>'></div> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgCleanAction"><img style='cursor: pointer;' src='./images/eraser-icon.png' title='<?php echo $lab_Field_site803_018;?>'></div> + + + <input type="hidden" id="inDevID" value="<?php echo $_GET['dev'];?>"> + <?php endif; ?> + + + </div> + <div class="tag"> + <TABLE class="desc_val"> + + <TR id='in401_date'> + <TD class="desc_well_param">Data pomiaru</TD> + <TD CLASS="desc_value"> + <input STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inWellParamDate' SIZE='10' disabled> + &nbsp;&nbsp;&nbsp; + godz.: <?php getSelectHours('inTimeH');?> : <?php getSelectMinutes('inTimeM');?> + </TD> + </TR> + + + + <?php + $result = mysql_query("select DIC_ID,DIC_NAME,".$decFieldLang." from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' AND DIC_ID NOT IN (235,240,250,251) order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + $var_FLD_NAME = $r[$decFieldLang]; + + + unset($tmpValElParama); + if ($var_DIC_ID==200) + { + $tmpValElParama= round(getLastValueFromDevResourceDetail('WELL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf')/60,3); + } + elseif ($var_DIC_ID==230 && $_SESSION['well_details']['wellTypeID']==20) + { + $tmpValElParama = sqlValue("select getWellPumpedWaterInDate(".$_SESSION['well_details']['devID'].",now())"); + } + else + $tmpValElParama = getLastValueFromDevResourceDetail('WELL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf'); + + + echo" + <TR> + <TD class='desc_well_param'>".$var_FLD_NAME."</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='".$tmpValElParama."' id='in401_".$var_DIC_ID."' disabled></TD> + </TR> + "; + + } + ?> + + <TR> + <TD class="desc_well_param">Ciśnienie p<sub>p</sub> [m]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','PP',$_SESSION['well_details']['devID'],'site401inf');?>' id='in401_401' disabled></TD> + </TR> + <TR> + <TD class="desc_well_param">Wysokość H<sub>H</sub> [m]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','HH',$_SESSION['well_details']['devID'],'site401inf');?>' id='in401_402' disabled></TD> + </TR> + <TR> + <TD class="desc_well_param">Otwarcie przepustnicy [%]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo getLastValueFromDevResourceDetail('SYNDIS','VALVE',$_SESSION['well_details']['devID'],'site401inf');?>' id='in401_730' disabled></TD> + </TR> + + + + <TR><TD COLSPAN="3" CLASS="desc_value"><HR ></TD></TR> + <?php + $result = mysql_query("select DIC_ID,DIC_NAME,".$decFieldLang." from sys_dictionaries where DIC_TYPE='WELL_ELECTRICAL_PARAMETERS' AND DIC_ID NOT IN (285,295,300) order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + $var_FLD_NAME = $r[$decFieldLang]; + + unset($tmpValElParama); + if ($var_DIC_ID==290 && $_SESSION['well_details']['wellTypeID']==20) + //$tmpValElParama = sqlValue("select round(getWellWorkingTimeInDate(".$_SESSION['well_details']['devID'].",now())/3600,2)"); + $tmpValElParama = convertSecondsToHHMM(sqlValue("select getWellWorkingTimeInDate(".$_SESSION['well_details']['devID'].",now())")); + else + $tmpValElParama = getLastValueFromDevResourceDetail('WELL_ELECTRICAL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf'); + + //if ($var_DIC_ID==290) echo "czas pracy"; + + echo" + <TR> + <TD class='desc_well_param'>".$var_FLD_NAME."</TD>"; + echo"<TD class='desc_value'><input class='readonly_hide' type='text' value='".$tmpValElParama."' id='in401_".$var_DIC_ID."' disabled></TD>"; + echo" + </TR> + "; + } + + ?> + + + <TR> + <TD class="desc_well_param">Jed. zużycie energii [Wh/m<sup>3</sup>/m]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo getLastValueFromDevResourceDetail('SYNDIS','ENERGYCONSUMPTION',$_SESSION['well_details']['devID'],'site401inf');?>' id='in401_721' disabled></TD> + </TR> + + + + </table> + </div> + + + + <div class=tag_ChemicalButtons> + <a href='?pg=site301inf&dev=<?php echo $_GET['dev'];?>&direct=site401inf'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_SubMenu_301;?>'></A> + </div> + + + + + +</div> + + +<?php + //tworzy nazwę pliku rysunku jaki ma podstawić w zalezności od stanu pompy (Throt i Loss) + if (strlen($imgThrot)>0 && strlen($imgLoss)>0) + $imgSPM = "./images/".$imgThrot."".$imgLoss."_".$imgSPM; + else $imgSPM = "./images/".$imgSPM; + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_site401inf.png"; + if (file_exists($fileName)) unlink($fileName); + $imageSPM=imagecreatefrompng($imgSPM); + $image=imagecreatetruecolor(imagesx($imageSPM),imagesy($imageSPM)); + imagecopy($image,$imageSPM,0,0,0,0,imagesx($imageSPM),imagesy($imageSPM)); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + + // sprawdza stan diagnostyki i podstawia odpowiedni obrazek + $imgToDiag = imagecreatefrompng("./images/diag_ok.png"); + $isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$_SESSION['well_details']['devID']); + if ($isDiagOK>0) $imgToDiag = imagecreatefrompng("./images/diag_error.png"); + + if (strstr($imgSPM,"SEGAP")) + imagecopy($image,$imgToDiag,107,455,0,0,13,13); + else if (strstr($imgSPM,"BASE")) + imagecopy($image,$imgToDiag,105,450,0,0,13,13); + else if (strstr($imgSPM,"OPT")) + imagecopy($image,$imgToDiag,81,450,0,0,13,13); + imagepng($image,$fileName); +?> + + +<div class="tag50_right"> + + + <div class="head_tag"><?php echo $lab_Tag_site301_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpSN']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engSN']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site401_019; ?></TD> + <TD CLASS="desc_value"><a class='knowledge' href='<?php echo $chLink; ?>'><img src=./images/chart-icon.png></a></TD> + </TR> + </table> + </div> + + + + <div class="head_tag"><?php echo $lab_Tag_site301_004 ;?></div> + <div class="tag_center"> + <img SRC="<?php echo $fileName; ?>" > + </div> + + <?php + $queryShowHisParam = sqlGetResAsArray("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID in (200,205,210,212,215,220,225,230,245,401,402,730,260,265,270,275,280,290,721) order by DIC_POL_LANG"); + ?> + + + <form action="./?pg=site401pdet&dev=<?php echo $_SESSION['well_details']['devID']; ?>" method="post"> + <div class="head_tag"><?php echo $lab_Tag_site401_014 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_023; ?></TD> + <TD CLASS="desc_value"> + <select name="inShowHisParam"> + <option value="0"><?php echo $lab_FormSelect_001;?></option> + + <?php + for ($i=0; $i<count($queryShowHisParam); $i++) + { + echo'<option value="'.$queryShowHisParam[$i]['DIC_ID'].'">'.$queryShowHisParam[$i]['DIC_POL_LANG'].'</option>'; + } + ?> + + + + </select> + + + + </TD> + <TD CLASS="desc_value"><input class="btn btn-primary btn-sm" type="submit" name="subShowHisParam" value="<?php echo $lab_ButtonName_Show; ?>"></TD> + </TR> + </table> + </div> + </form> + + + + + + <div class=tag_ChemicalButtons> + <a href='?pg=site401mark&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Ocena pracy układu'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401ahis&site=site401inf'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia agregatów'></A> + <br/><br/> + <a href='?pg=site401CH&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_ChemicalParam ;?>'></A> + &nbsp;&nbsp;&nbsp; + <a href="?pg=site401mhis&dev=<?php echo $_SESSION['well_details']['devID']; ?>"><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia ocen'></A> + </div> + + + + <div class=tag_ChemicalButtons> + <a href='?pg=site310&dev=<?php echo $_GET['dev'];?>&direct=401'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Karta otworu'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401CL&dev=<?php echo $_SESSION['well_details']['devID'] ;?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Calibration ;?>'></A> + </div> + + + + +</div> + + + <?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + getHistoryData($_GET['dev'], $_GET['dic']); + ?> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/backup/site401inf_FEdit.php b/sites/backup/site401inf_FEdit.php new file mode 100644 index 0000000..1134e83 --- /dev/null +++ b/sites/backup/site401inf_FEdit.php @@ -0,0 +1,320 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + + +<?php + if (empty($_SESSION['well_details'])) + header("Location: /?pg=site401"); +?> + + +<?php +if ($_POST['subWellParamSave']==$lab_ButtonName_Save) +{ + $_GET['dev'] = $_POST['dev']; +// $_GET['dic'] = $_POST['dic']; + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=".$_POST['dic'].",DRD_VALUE='".str_replace(',','.',$_POST['inWellParamValue'])."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inWellParamDate']." ".date('H:i:s')."';"); + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; +} + + //updateWellTimeWorking($_GET['dev']); +?> + + + +<?php +//kasuje daty w histori pomiarów +unset($_SESSION['site401ahis_from']); +unset($_SESSION['site401ahis_to']); +unset($_SESSION['site401ahis_array']); + +require_once('./polynomial/PolynomialRegression.php' ); + +if ($_SESSION['lang']=='polish') + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_polish.png"; +else + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_english.png"; + + +?> + + + +<div class="tag50_left"> + + <div class="head_tag"><?php echo $lab_Tag_site301_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpSN']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engSN']; ?></TD> + + <!-- + </TR> + <TR> + <TD class="desc_well_param"><img src=./images/pdf_ico.png></TD> + <TD CLASS="desc_value"><a class='knowledge' href='./charts/GC_5_07_tests.pdf' target='_blank'><?php echo $lab_Field_site401_019; ?></a></TD> + </TR> + --> + </table> + </div> + + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + + + <div class="head_tag"><?php echo $lab_Tag_site301_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_016; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['wellName']; ?></TD> + </TR> + + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_017; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DIC_ENG_LANG from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_ENG_LANG"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_006; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DRS_AVAILABLE_DATE from seg_dev_resources where DRS_ID=".$_SESSION['well_details']['devID'], "DRS_AVAILABLE_DATE"); ?></TD> + </TR> + + + <?php + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=".$var_DIC_ID,$decFieldLang)."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData('WELL_TECHNICAL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf')."</TD>"; + if (!empty($_SESSION['site401_edit'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=$var_DIC_ID'".chr(34)."></td>"; + + echo" + </TR> + "; + } + ?> + + + <?php + $result = mysql_query("select DIC_ID,DIC_NAME,DIC_TYPE from sys_dictionaries where DIC_ID in (235,240,285) order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + $var_DIC_TYPE = $r["DIC_TYPE"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=".$var_DIC_ID,$decFieldLang)."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData($var_DIC_TYPE,$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf')."</TD>"; + if (!empty($_SESSION['site401_edit'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=$var_DIC_ID'".chr(34)."></td>"; + + echo" + </TR> + "; + } + ?> + + + </table> + </div> + + + <div class="head_tag"> + + <div style="display:inline-block; font-size: 14px; color: #ffffff;"><?php echo $lab_Tag_site401_002 ;?></div> + <?php if (!empty($_SESSION['site401_edit'])): ?> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgEditAction"><img style='cursor: pointer;' src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>'></div> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgSaveAction"><img style='cursor: pointer;' src='./images/save-icon.png' title='<?php echo $lab_Field_site803_011;?>'></div> + <input type="hidden" id="inDevID" value="<?php echo $_GET['dev'];?>"> + <?php endif; ?> + + + </div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_ID<>235 and DIC_ID<>240 order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='$var_DIC_NAME'",$decFieldLang)."</TD>"; + + if ($_SESSION['well_details']['turnOnOff']=='OFF' && ($var_DIC_ID==200 || $var_DIC_ID==205)) + echo"<TD class='desc_value'></TD>"; + elseif ($_SESSION['well_details']['turnOnOff']=='ON' && $var_DIC_ID==210) + echo"<TD class='desc_value'></TD>"; + else + echo"<TD class='desc_value'><input class='readonly_hide' type='text' value='".getLastValueFromDevResourceDetail('WELL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf')."' id='in401_".$var_DIC_ID."' disabled></TD>"; + + echo"</TR>"; + } + ?> + <TR><TD COLSPAN="3" CLASS="desc_value"><HR ></TD></TR> + <?php + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_ELECTRICAL_PARAMETERS' and DIC_ID<>285 order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_ELECTRICAL_PARAMETERS' and DIC_NAME='$var_DIC_NAME'",$decFieldLang)."</TD>"; + + if ($_SESSION['well_details']['turnOnOff']=='OFF' && ($var_DIC_ID==260 || $var_DIC_ID==270)) + echo"<TD class='desc_value'></TD>"; + else + echo"<TD class='desc_value'><input class='readonly_hide' type='text' value='".getLastValueFromDevResourceDetail('WELL_ELECTRICAL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf')."' id='in401_".$var_DIC_ID."' disabled></TD>"; + + echo"</TR>"; + } + ?> + + + </table> + </div> + + +</div> + + +<?php + //tworzy nazwę pliku rysunku jaki ma podstawić w zalezności od stanu pompy (Throt i Loss) + if (strlen($imgThrot)>0 && strlen($imgLoss)>0) + $imgSPM = "./images/".$imgThrot."".$imgLoss."_".$imgSPM; + else $imgSPM = "./images/".$imgSPM; +?> + + +<div class="tag50_right"> + + <div class="head_tag">Studnia</div> + <div class="tag_WellName"> + <?php echo $_SESSION['well_details']['wellName']; ?> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site301_004 ;?></div> + <div class="tag_center"> + <img SRC="<?php echo $imgSPM; ?>" > + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site401_008 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"></TD> + + </TR> + + <?php + $wynik = mysql_query("select SRP_ID,SRP_NAME,DRS_BUY_DATE,DRS_STATUS_DIC_ID, MCF_NAME,DRS_ID from seg_res_piezo_wells_rel left join seg_dev_resources on RPW_RP_DRS_ID =DRS_ID and DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR') left join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID left join seg_manufacturers on SRP_MCF_ID=MCF_ID where RPW_WELL_DRS_ID=".$_SESSION['well_details']['devID']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["SRP_ID"]; + $sql_2 = $r["SRP_NAME"]; + $sql_3 = $r["DRS_BUY_DATE"]; + $sql_4 = $r["MCF_NAME"]; + $sql_5 = $r["DRS_STATUS_DIC_ID"];$sql_5=setDicName($sql_5); + $sql_DRSid = $r["DRS_ID"]; + + + + $maxAcc = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_ACCEPTABLE',$sql_DRSid); + $maxWar = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_WARNING',$sql_DRSid); + $minWar = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_WARNING',$sql_DRSid); + $minAcc = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_ACCEPTABLE',$sql_DRSid); + $waterLevel = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_PARAMETERS','WATER_LEVEL',$sql_DRSid); + + if ($waterLevel<=$minAcc || $waterLevel>=$maxAcc) + $image_zb = "<img src='./images/redRes_mini.png'>"; + else if (($waterLevel>$minAcc && $waterLevel<=$minWar) || ($waterLevel>=$maxWar && $waterLevel<$maxAcc)) + $image_zb = "<img src='./images/yellowRes_mini.png'>"; + else + $image_zb = "<img src='./images/greenRes_mini.png'>"; + + + + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site402inf&dev=$sql_DRSid'".chr(34)."> + <TD class='field_left'>$sql_2</TD> + <TD class='field_left'>$sql_4</TD> + <TD class='field_center'>$sql_3</TD> + <TD class='field_center'>$image_zb</TD> + </TR> + "; + } + ?> + </table> + </div> + + + <div class=tag_ChemicalButtons> + <a href='?pg=site401mark&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Ocena pracy układu'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401CL&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Kalibracja'></A> + + <br/><br/> + <a href='?pg=site401mhis&dev<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia ocen'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401ahis&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia pomiarów'></A> + + <br/><br/> + <a href='?pg=site401CH&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Parametry chemiczne'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401HP&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Harmonogram płukań'></A> + + + + + + </div> + +</div> + + + <?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + getHistoryData($_GET['dev'], $_GET['dic']); + ?> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/backup/site401mark.php b/sites/backup/site401mark.php new file mode 100644 index 0000000..c2cacaf --- /dev/null +++ b/sites/backup/site401mark.php @@ -0,0 +1,826 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php + +if (!empty($_GET['direct']) && $_GET['direct']=='site301inf') +{ + delSearchSessionData(); +} + + + + +//warunek na przekazywanie nazw obiektów (G54) +if (empty($_GET['dev']) && !empty($_GET['obj'])) +{ + delSearchSessionData(); + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_GET['obj']."'", "DRS_ID"); + + if ($_GET['dev']>0) $_GET['dev']=$_GET['dev']; + else { + $tmp = explode('=', $_SERVER['REQUEST_URI']); + $lastVal = count($tmp)-1; + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$tmp[$lastVal]."'", "DRS_ID"); + unset($tmp); + } +} + +//załączaie wylączanie pompy +if (!empty($_GET['pa']) && $_GET['dev']>0 && $_POST['inEncrypted']==md5($_GET['dev']) && $_POST['subWellParamSave']==$lab_ButtonName_Next) +{ + $onOffDate = $_POST['inOnOffDate'].' '.$_POST['inOnOffTimeH'].':'.$_POST['inOnOffTimeM'].':00'; + + if ($_GET['pa']=='on') + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='ON',WMS_DATETIME='".$onOffDate."'"); + } + elseif ($_GET['pa']=='off') + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$_POST['inOnOffReason']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='OFF',WMS_DATETIME='".$onOffDate."'"); + } + elseif ($_GET['pa']=='reson') + { + $drdID = sqlValue("select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].")"); + mysql_query("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$_POST['inOnOffReason']."' WHERE DRD_ID=".$drdID); + } +} + + + // kasuje zmianne sesyjne dla historii ocen + unset($_SESSION['site401mhis_working_params']); + unset($_SESSION['site401mhis_inDate']); + unset($_SESSION['site401mhis_sel_data']); + + + + + + + + + + + + +require_once('./polynomial/PolynomialRegression.php' ); + + + +//wpisuje do tablicy podstawowe informacje o studni + if (empty($_SESSION['well_details'])) + { + //$wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,PUP_ID,WLE_PUMP_NAME,WLE_PUMP_NO,ENG_ID,WLE_ENG_NAME,WLE_ENG_NO,WLE_PUMP_Q_N from rep_object_departments where DRS_ID=".$_GET['dev']); + $wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,WLL_CAT_DIC_ID,(select PUP_ID from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) PUP_ID,(select PUP_NAME from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_NAME,(select PUP_Q_N from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_Q_N,(select DRS_SN_NUMBER from seg_dev_resources where DRS_ID=RWL_PUP_DRS_ID limit 1) WLE_PUMP_NO,(select ENG_ID from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) ENG_ID,(select ENG_NAME from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_NAME,(select DRS_SN_NUMBER from seg_dev_resources where DRS_ID=RWL_ENG_DRS_ID limit 1) WLE_ENG_NO from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + //$tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$r["PUP_ID"]." and TST_PUP_SN_NO='".$r["WLE_PUMP_NO"]."' and TST_ENG_ID=".$r["ENG_ID"]." and TST_ENG_SN_NO='".$r["WLE_ENG_NO"]."'"); + $tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$r["PUP_ID"]." and TST_PUP_SN_NO='".$r["WLE_PUMP_NO"]."' and TST_ENG_SN_NO='".$r["WLE_ENG_NO"]."'"); + if (empty($tstID)) $tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$r["PUP_ID"]." and TST_PUP_SN_NO='".$r["WLE_PUMP_NO"]."'"); + + $_SESSION['well_details']=array( + 'devID' => $r["DRS_ID"], + 'wellID' => $r["WLL_ID"], + 'wellName' => $r["WLL_NAME"], + 'wellTypeID'=> $r["WLL_CAT_DIC_ID"], + 'pumpID' => $r["PUP_ID"], + 'pumpName' => $r["WLE_PUMP_NAME"], + 'pumpSN' => $r["WLE_PUMP_NO"], + 'engID' => $r["ENG_ID"], + 'engName' => $r["WLE_ENG_NAME"], + 'engSN' => $r["WLE_ENG_NO"], + 'QnVal' => $r["WLE_PUMP_Q_N"], + 'LpVal' => (float) getLastValueFromDevResourceDetail('WELL_PARAMETERS','LPM',$r["DRS_ID"]), + 'DrVal' => (float) getLastValueFromDevResourceDetail('WELL_PARAMETERS','DR',$r["DRS_ID"])/1000, + 'testID' => $tstID + ); + + } + } + + + + //2016-09-10 + // pobiera informacje do tablicy o wiarygodności danych z SYNDIS + unset($qualDataArray); + if ($_SESSION['well_details']['wellTypeID']!=20) + $qualDataArray = sqlGetResAsArray("select * from rep_soap_syndis_quality_data where SQD_DRS_ID=".$_GET['dev']); + + + + + + + + + + +//zakresy dla wykresów + if (empty($_SESSION['site401_scope'])) + { + $wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_SESSION['well_details']['pumpID']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_scope'][] = (float) $r["PEP_X_PARAM"]/60; + } + + } + +// punkty pomiarowe ze stacji prób dla H + if (empty($_SESSION['site401_lift_xy'])) + { + $i=0; $j=0; + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_08 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_lift_xy'][$i][$j] = (float) $r["PEP_X_PARAM"]; + $j++; + $_SESSION['site401_lift_xy'][$i][$j] = (float) $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + $wynik = mysql_query("select max(TSD_VAL_04)/60 X_MAX, max(TSD_VAL_08) Y_MAX from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_minmax_params'] = array( + 'x_min' => 0, + 'x_max' => (float) $r["X_MAX"], + 'y_min' => 0, + 'y_max' => (float) $r["Y_MAX"] + ); + } + } + +// punkty pomiarowe ze stacji prób dla ETA + if (empty($_SESSION['site401_eta_xy'])) + { + $i=0; $j=0; + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_18 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_eta_xy'][$i][$j] = (float) $r["PEP_X_PARAM"]; + $j++; + $_SESSION['site401_eta_xy'][$i][$j] = (float) $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + } + + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_polish.png"; + +?> + + <?php + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + + + + $isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$_SESSION['well_details']['devID']); + + $wynik = mysql_query("select RHD_Q_VAL,RHD_HD_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_PP_VAL,RHD_HH_VAL,RHD_PE_VAL,RHD_DATE from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID'].")"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $qParam = $r["RHD_Q_VAL"]; + $P1param = $r["RHD_P1_VAL"]; + $P2param = $r["RHD_P2_VAL"]; + $PEparam = $r["RHD_PE_VAL"]; + $PPparam = $r["RHD_PP_VAL"]; + $HHparam = $r["RHD_HH_VAL"]; + $resHD = $r["RHD_HD_VAL"]; + $resWorkStatus = $r["RHD_DATE"]; + + if (empty($qualDataArray)) $qualDataArray[0]['SQD_AUDIT_CD'] = $r["RHD_DATE"]; + } + + + // =============================================================== // + $Evaluation4_q = wellEvaluation4_q($_SESSION['well_details']['QnVal'], $qParam); + // =============================================================== // + //$resHP = (setPumpHparameterForQ($_SESSION['well_details']['pumpID'],$qParam)-($PPparam-$HHparam))/($PPparam-$HHparam); + //$resHP = (getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60)-($PPparam-$HHparam))/($PPparam-$HHparam); + + + //$Evaluation4_HfQ = wellEvaluation4_HfQ($resHP,$PPparam); + $HPparam = (float) ($PPparam - $HHparam); + $HPSparam = (float) getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60); + $Evaluation4_HfQ = wellEvaluation4_HfQ_new($HPSparam,$PPparam,$HHparam); + + // =============================================================== // + $Evaluation4_Throt = wellEvaluation4_Throt($resHD,$P1param,$P2param); + // =============================================================== // + $Evaluation4_LineLoss = wellEvaluation4_LineLoss($P1param,$PPparam,$_SESSION['well_details']['LpVal'],$_SESSION['well_details']['DrVal']); + // =============================================================== // + $qRZ = $qParam; + + + $fileName0="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_01.png"; + if (file_exists( $fileName0)) unlink($fileName0); + + // =============================================================== // + if (empty($PEparam)) $PEparam=1; + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes($_SESSION['well_details']['QnVal']); + $YellowGreenParam = setYellowGreenLimes($_SESSION['well_details']['QnVal']); + // =============================================================== // + + + // Jeśli mamy odchyłke CH na czerwono, wtedy obrazek jest szary + // =============================================================== // + if ($greyChart==1 || $_SESSION['well_details']['wellTypeID']==20) + pumpImageGreyBell($fileName0); + else pumpImageStatus($fileName0, $RedYellowParam, $YellowGreenParam, $resETA); + // =============================================================== // + + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_02.png"; + $fileName2="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_03.png"; + + if (file_exists( $fileName1)) unlink($fileName1); + if (file_exists( $fileName2)) unlink($fileName2); + + if ($_SESSION['well_details']['testID']>0) + { + // Wysokość podnoszenia + // =======================================================================================// + require_once('./polynomial/plot.php' ); + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = $_SESSION['site401_minmax_params']['x_max']; + $xMaxLine = ceil($xMax); + + $yMax = $_SESSION['site401_minmax_params']['y_max']; + $yMax = ceil($yMax+10); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = ceil($yMax/10); + $Y_MinorScale = $Y_MajorScale / 2; + + $data = $_SESSION['site401_lift_xy']; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, ceil($yMax/4)*4 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression->getCoefficients(); + + // Place text + imageString($image,3,0,0,'H[m]',$colorMap[ "Black" ]); + imageString($image,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][0], $_SESSION['site401_scope'][2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][2], $_SESSION['site401_scope'][3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][3], $_SESSION['site401_scope'][5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][5], $_SESSION['site401_scope'][6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][6], $xMaxLine, $colorMap[ "Red" ] ); + + unset($data); + unset($regression); + unset($coefficients); + unset($dataPoint); + + if ($Evaluation4_HfQ['point_color'] == 'Green') + { + $colorKROPA = $colorMap["Green"]; + $moveKROPA=0; + + } + if ($Evaluation4_HfQ['point_color'] == 'Yellow') + { + $colorKROPA = $colorMap["Yellow"]; + $moveKROPA=2; + + } + if ($Evaluation4_HfQ['point_color'] == 'Red') + { + $colorKROPA = $colorMap["Red"]; + $moveKROPA=2; + + } + + + + //plotCircleRange(0,$xMax,0,ceil($yMax/4)*4,$qRZ/60,str_replace(',','.',setPumpHparameterForQafterTest($_SESSION['well_details']['pumpID'],$_SESSION['well_details']['pumpSN'],$qRZ))-$moveKROPA,$colorKROPA); + plotCircleRange(0,$xMax,0,ceil($yMax/4)*4,$qRZ/60,getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60)-$moveKROPA,$colorKROPA); + imagePNG( $image,$fileName1); + + // =======================================================================================// + } + + + if ($_SESSION['well_details']['testID']>0) + { + // Sprawność + // =======================================================================================// + + require_once('./polynomial/plot1.php' ); + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = $_SESSION['site401_minmax_params']['x_max']; + $xMaxLine = ceil($xMax); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = 0.1; + $Y_MinorScale = $Y_MajorScale / 2; + + $data1 = $_SESSION['site401_eta_xy']; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression1 = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data1 as $dataPoint1 ) + $polynomialRegression1->addData( $dataPoint1[ 0 ], $dataPoint1[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data1, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, 1 ); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + if ($qRZ/60<$_SESSION['site401_scope'][2]) + plotRectangleRange1(0,$xMax,0,$_SESSION['site401_scope'][2], 'red_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][2] && $qRZ/60<$_SESSION['site401_scope'][3]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][2],$_SESSION['site401_scope'][3], 'yellow_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][3] && $qRZ/60<$_SESSION['site401_scope'][5]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][3],$_SESSION['site401_scope'][5], 'green_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][5] && $qRZ/60<$_SESSION['site401_scope'][6]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][5],$_SESSION['site401_scope'][6], 'yellow_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][6]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][6],$xMaxLine, 'red_value'); + + plotAddScale(); + + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression1->getCoefficients(); + + // Place text + imageString($image1,3,0,0,'n',$colorMap[ "Black" ]); + imagerectangle($image1,4,10,5,15,$colorMap[ "Black" ]); + imageString($image1,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][0], $_SESSION['site401_scope'][2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][2], $_SESSION['site401_scope'][3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][3], $_SESSION['site401_scope'][5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][5], $_SESSION['site401_scope'][6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][6], $xMaxLine, $colorMap[ "Red" ] ); + + unset($data); + unset($regression); + unset($coefficients); + unset($dataPoint); + unset($moveKROPA); + + //plotCircleRange1(0,$xMax,0,1,$qRZ/60,str_replace(',','.',setPumpETAparameterForQafterTest($_SESSION['well_details']['pumpID'],$_SESSION['well_details']['pumpSN'],$qRZ))); + plotCircleRange1(0,$xMax,0,1,$qRZ/60,getPolynomialValue($_SESSION['site401_eta_xy'],$qParam/60)); + + + imagePNG( $image1,$fileName2); + + // =======================================================================================// + } + +?> + +<?php + //tworzy nazwę pliku rysunku jaki ma podstawić w zalezności od stanu pompy (Throt i Loss) + if (strlen($Evaluation4_Throt['image'])>0 && strlen($Evaluation4_LineLoss['image'])>0 && !strstr($imgSPM,"SEGAP")) + $imgSPM = "./images/".$Evaluation4_Throt['image']."".$Evaluation4_LineLoss['image']."_".$imgSPM; + else $imgSPM = "./images/".$imgSPM; + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_site401inf.png"; + if (file_exists($fileName)) unlink($fileName); + $imageSPM=imagecreatefrompng($imgSPM); + $image=imagecreatetruecolor(imagesx($imageSPM),imagesy($imageSPM)); + imagecopy($image,$imageSPM,0,0,0,0,imagesx($imageSPM),imagesy($imageSPM)); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + $font = './fonts/verdana.ttf'; + + // sprawdza stan diagnostyki i podstawia odpowiedni obrazek + $imgToDiag = imagecreatefrompng("./images/diag_ok.png"); + //$isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$var_DRSid); + if ($isDiagOK>0) $imgToDiag = imagecreatefrompng("./images/diag_error.png"); + + if ($_SESSION['well_details']['wellTypeID']==18) + { + imagecopy($image,$imgToDiag,105,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$qualDataArray[0]['SQD_AUDIT_CD']); + } + elseif ($_SESSION['well_details']['wellTypeID']==19) + { + imagecopy($image,$imgToDiag,81,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$qualDataArray[0]['SQD_AUDIT_CD']); + } + imagepng($image,$fileName); + + + // Jeśli mamy typ "SPM - inne" + if ($_SESSION['well_details']['wellTypeID']==20) + { + unset($Evaluation4_HfQ); + unset($Evaluation4_Throt); + unset($Evaluation4_LineLoss); + //pumpImageGreyBell($fileName0); + } + +?> + + +<?php + +// sprawdza informacje, czy aktualne dane są wiarygodne i zgodne z tym co trzeba +// tablice pobiera wcześniej + +//przelicza algorytmem, czy dane są prawidłowe +/* +// ========================================================================================================================================= +if (!empty($qualDataArray) && $qualDataArray[0]['SQD_VAL_ONOFF']==1) +{ + $isOdstaja = false; + $isTest01 = false; + + // Założenia + // ========================================================================================================================================= + $test01_Hsa = (float) $qualDataArray[0]['SQD_VAL_P1'] - $qualDataArray[0]['SQD_VAL_P2']; + $test01_F = (float) (3.14*($_SESSION['well_details']['DrVal']*$_SESSION['well_details']['DrVal']))/4; + $test01_Ct = (float) ($qualDataArray[0]['SQD_VAL_Q']/3600) / $test01_F; + $test01_Hsl_1 = (float) 0.035*($_SESSION['well_details']['LpVal']/$_SESSION['well_details']['DrVal'])*(($test01_Ct*$test01_Ct)/19.62); + $test01_Hp = (float) $qualDataArray[0]['SQD_VAL_PP'] - $qualDataArray[0]['SQD_VAL_HH']; + $test01_Hp_1 = (float) $qualDataArray[0]['SQD_VAL_HD'] + $test01_Hsa + $test01_Hsl_1 + $qualDataArray[0]['SQD_VAL_P2']; + + $test02_Hsl = (float) $qualDataArray[0]['SQD_VAL_PP'] - $_SESSION['well_details']['LpVal'] - $qualDataArray[0]['SQD_VAL_P1']; + $test03_Hps = (float) getPolynomialValue($_SESSION['site401_lift_xy'],($qualDataArray[0]['SQD_VAL_Q']/60)); //wysokość ze stacji + + $i=0; $j=0; + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_14 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_pe_xy'][$i][$j] = (float) $r["PEP_X_PARAM"]; + $j++; + $_SESSION['site401_pe_xy'][$i][$j] = (float) $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + $test04_Pes = (float) getPolynomialValue($_SESSION['site401_pe_xy'],($qualDataArray[0]['SQD_VAL_Q']/60)); //moc ze stacji + + // ========================================================================================================================================= + + // TEST - 1 + if ( $test01_Hp > (1.07 * $test01_Hp_1) || $test01_Hp < (0.9*$test01_Hp_1) ) + { + $isOdstaja = true; + $isTest01 = true; + $lista_testy .= "<br/>- Ciśnienie PP"; + } + // TEST - 2 +// elseif ( $test02_Hsl > (1.15*$test01_Hsl_1) || $test02_Hsl < (0.9*$test01_Hsl_1) ) +// { +// $isOdstaja = true; +// $lista .= "<br/>- Ciśnienie PP"; +// } + // TEST - 3 + elseif ( $test01_Hp > (1.07*$test03_Hps) || $test01_Hp < (0.91*$test03_Hps) ) + { + $isOdstaja = true; + $lista_testy .= "<br/>- Wysokość podnoszenia na Stacji Prób"; + } + + // TEST - 3 + if (!$isTest01 && ($qualDataArray[0]['SQD_VAL_PE'] > (1.07*$test04_Pes) || $qualDataArray[0]['SQD_VAL_PE']<(0.9*$test04_Pes))) + { + $isOdstaja = true; + $lista_testy .= "<br/>- Moc czynna Pe"; + } + elseif ($isTest01 && ($qualDataArray[0]['SQD_VAL_PE'] > (1.07*$test04_Pes) || $qualDataArray[0]['SQD_VAL_PE']<(0.9*$test04_Pes))) + { + $isOdstaja = true; + $lista_testy .= "<br/>- Wydajność Q"; + } + + + if ($isOdstaja) + $lista_testy = "<br/><br/>Szczególna uwaga:".$lista_testy; + + + + + + + echo "test01_Hp: ".$test01_Hp."<br>"; + echo "test01_Hp_1: ".$test01_Hp_1."<br>"; + echo "test02_Hsl: ".$test02_Hsl."<br>"; + echo "test01_Hsl_1: ".$test01_Hsl_1."<br>"; + echo "test03_Hps: ".$test03_Hps."<br>"; + echo "SQD_VAL_PE: ".$qualDataArray[0]['SQD_VAL_PE']."<br>"; + echo "test04_Pes: ".$test04_Pes."<br>"; + + echo "SQD_VAL_Q m3/h: ".$qualDataArray[0]['SQD_VAL_Q']."<br>"; + echo "SQD_VAL_Q m3/s: ".($qualDataArray[0]['SQD_VAL_Q']/3600)."<br>"; + echo "DrVal: ".$_SESSION['well_details']['DrVal']."<br>"; + echo "test01_Ct: ".$test01_Ct."<br>"; + echo "test01_F: ".$test01_F."<br>"; + + echo "SQD_VAL_PP: ".$qualDataArray[0]['SQD_VAL_PP']."<br>"; + echo "SQD_VAL_P1: ".$qualDataArray[0]['SQD_VAL_P1']."<br>"; + + + + + +}*/ + +// tsty na szybko +if (!empty($qualDataArray) && $qualDataArray[0]['SQD_VAL_ONOFF']==1) +{ + $isOdstaja = false; + $isTest01 = false; + + $test_Hp = (float) $qualDataArray[0]['SQD_VAL_PP'] - $qualDataArray[0]['SQD_VAL_HH']; + $test_Hps = (float) getPolynomialValue($_SESSION['site401_lift_xy'],($qualDataArray[0]['SQD_VAL_Q']/60)); //wysokość ze stacji + + $i=0; $j=0; + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_14 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_pe_xy'][$i][$j] = (float) $r["PEP_X_PARAM"]; + $j++; + $_SESSION['site401_pe_xy'][$i][$j] = (float) $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + $test_Pes = (float) getPolynomialValue($_SESSION['site401_pe_xy'],($qualDataArray[0]['SQD_VAL_Q']/60)); //moc ze stacji + + // test na wysokość podnoszenia + if ( $test_Hp < (0.85*$test_Hps) || $test_Hp > (1.05*$test_Hps) ) + { + $isOdstaja = true; + $lista_testy .= "<br/>- Ciśnienie PP - Należy sprawdzić zakresy pomiarowe w [Stan &raquo; Stan studni &raquo; Zakresy pomiarowe dla powiązanych urządzeń]"; + $lista_testy .= "<br/>- Wysokość HH - Należy sprawdzić zakresy pomiarowe w [Stan &raquo; Stan studni &raquo; Zakresy pomiarowe dla powiązanych urządzeń]"; + } + // test na moc czynną + if ( $qualDataArray[0]['SQD_VAL_PE'] < (0.8*$test_Pes) || $qualDataArray[0]['SQD_VAL_PE'] > (1.2*$test_Pes) ) + { + $isOdstaja = true; + $lista_testy .= "<br/>- Moc czynna Pe"; + } + + if ($isOdstaja) + $lista_testy = "<br/><br/>Szczególna uwaga:".$lista_testy; + +/* +echo "test_Hp: ".$test_Hp."<br/>"; +echo "test_Hps: ".$test_Hps."<br/>"; +echo "SQD_VAL_PE: ".$qualDataArray[0]['SQD_VAL_PE']."<br/>"; +echo "test_Pes: ".$test_Pes."<br/>"; +*/ + +} + +// ========================================================================================================================================= +// ========================================================================================================================================= + +//sprawdza, czy dane nie są danymi niewiarygodnymi - jeśli tak, wyświetla komunikat +if (!empty($qualDataArray) && $qualDataArray[0]['SQD_VAL_ONOFF']==1 && ($qualDataArray[0]['SQD_FLG_Q']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_P1']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_P2']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_PE']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_PP']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_HH']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_HD']<>'CORRECT' || $qualDataArray[0]['SQD_VAL_Q']<=0 || $qualDataArray[0]['SQD_VAL_P1']<=0 || $qualDataArray[0]['SQD_VAL_P2']<=0 || $qualDataArray[0]['SQD_VAL_PE']<=0 || $qualDataArray[0]['SQD_VAL_PP']<=0 || $qualDataArray[0]['SQD_VAL_HH']<=0 || $qualDataArray[0]['SQD_VAL_HD']<=0)) +{ + if ($qualDataArray[0]['SQD_FLG_Q']<>'CORRECT') + $lista .= "- Wydajność Q <br>"; + if ($qualDataArray[0]['SQD_FLG_P1']<>'CORRECT') + $lista .= "- Ciśnienie P1 <br>"; + if ($qualDataArray[0]['SQD_FLG_P2']<>'CORRECT') + $lista .= "- Ciśnienie P2 <br>"; + if ($qualDataArray[0]['SQD_FLG_PE']<>'CORRECT') + $lista .= "- Moc czynna Pe <br>"; + if ($qualDataArray[0]['SQD_FLG_PP']<>'CORRECT') + $lista .= "- Ciśnienie PP - Należy sprawdzić zakresy pomiarowe w [Stan &raquo; Stan studni &raquo; Zakresy pomiarowe dla powiązanych urządzeń]<br>"; + if ($qualDataArray[0]['SQD_FLG_HH']<>'CORRECT') + $lista .= "- Wysokość HH - Należy sprawdzić zakresy pomiarowe w [Stan &raquo; Stan studni &raquo; Zakresy pomiarowe dla powiązanych urządzeń]<br>"; + if ($qualDataArray[0]['SQD_FLG_HD']<>'CORRECT') + $lista .= "- Zwierciadło dynamiczne HD <br>"; + + $lista .= "- Napięcie zasilania U<br>"; + $lista .= "- Pobór energii E<br>"; + $lista .= "- Pobór prądu I<br>"; + + + if ($qualDataArray[0]['SQD_FLG_Q']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_P2']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_PP']<>'CORRECT' || $qualDataArray[0]['SQD_FLG_PE']<>'CORRECT' || $qualDataArray[0]['SQD_VAL_Q']<=0 || $qualDataArray[0]['SQD_VAL_P2']<=0 || $qualDataArray[0]['SQD_VAL_PE']<=0 || $qualDataArray[0]['SQD_VAL_PP']<=0) + { + echo"<div class='actionERROR'> + Dane z systemu SYNDIS zostały przekazane jako niewiarygodne lub niepoprawne.<br/>Należy zweryfikować parametry:<br/> + ".$lista."<br/><br/>Brak poprawnej oceny! + </div>"; + if (file_exists( $fileName0)) unlink($fileName0); + pumpImageGreyBell($fileName0); + } + else + echo"<div class='actionWARNING'> + Dane z systemu SYNDIS zostały przekazane jako niewiarygodne lub niepoprawne.<br/>Należy zweryfikować parametry:<br/> + ".$lista."<br/><br/>Ocena przybliżona! + </div>"; +} +elseif (!empty($qualDataArray) && $isOdstaja) +{ + echo"<div class='actionERROR'> + Algorytm modelu oceny przekazał do weryfikacji parametry.<br/><br/> + Należy sprawdzić poprawność:<br/> + 1. Parametrów technicznych studni.<br/> + 2. Parametrów pracy studni i układu pompowego.<br/> + 3. Konfigurację zakresów pomiarowych dla powiązanych urządzeń [Stan &raquo; Stan studni &raquo; Zakresy pomiarowe dla powiązanych urządzeń]. + + ".$lista_testy."<br/><br/>Brak poprawnej oceny! + </div>"; + + if (file_exists( $fileName0)) unlink($fileName0); + pumpImageGreyBell($fileName0); +} + +// ========================================================================================================================================= +// ========================================================================================================================================= + +?> + + + + + + + + + + + + + + + + + + + + + + <div class="tag50_left"> + + <div class="head_tag"><?php echo $lab_Tag_site301_004." - ".$_SESSION['well_details']['wellName'];?></div> + <div class="tag_center"> + <a href="?pg=site401inf&dev=<?php echo $_GET['dev']?>"><img SRC="<?php echo $fileName; ?>" border="0"></a> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site401_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_005; ?></TD> + <TD class="<?php echo $Evaluation4_q['grid_style']; ?>"><?php echo $Evaluation4_q['grid_text']; ?></TD> + <TD CLASS="desc_value" style="max-width: 40px; text-align: center;" rowspan="4"> + <a href="?pg=site401mhis&dev=<?php echo$_GET['dev']; ?>"><img SRC="<?php echo $fileName0; ?>" border="0"></a> + </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_009; ?></TD> + <TD class="<?php echo $Evaluation4_HfQ['grid_style']; ?>"><?php echo $Evaluation4_HfQ['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_012; ?></TD> + <TD class="<?php echo $Evaluation4_Throt['grid_style']; ?>"><?php echo $Evaluation4_Throt['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_015; ?></TD> + <TD class="<?php echo $Evaluation4_LineLoss['grid_style']; ?>"><?php echo $Evaluation4_LineLoss['grid_text']; ?></TD> + </TR> + </table> + </div> + + </div> + + + + +<div class="tag50_right"> + + + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0 && ($_SESSION['well_details']['wellTypeID']==18 || $_SESSION['well_details']['wellTypeID']==19)) + echo"<a href='?pg=site401lift&t=".$_SESSION['well_details']['testID']."&d=".$_SESSION['well_details']['devID']."&q=".$qParam."&hp=".$HPparam."'><img SRC=$fileName1></a>"; + elseif ($_SESSION['well_details']['testID']>0 && $_SESSION['well_details']['wellTypeID']==20) + echo"<img SRC=$fileName1>"; + else + echo $lab_Field_site203_017; + ?> + + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_005 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0) + echo"<img SRC=$fileName2>"; + else + echo $lab_Field_site203_017; + ?> + </div> + + +<?php +$workStatusArray = sqlGetResAsArray("select DRD_VALUE,DRD_DESCRIPTION,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=DRD_DESCRIPTION limit 1) DRD_DESC from seg_dev_resources_det where DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID'].") and DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID']." limit 1"); +//$well_work_status = getLastValueFromDevResourceDetail('WELL_STATUSES','ON_OFF',$_SESSION['well_details']['devID']); + + +if ($workStatusArray[0]['DRD_VALUE']=="ON") +{ + $imgONOFF_g = "./images/green_ONOFF_ON.png"; + $imgONOFF_r = "./images/red_ONOFF.png"; + $stringONOFF = "Stan pracy - Załączona"; + + if (!empty($_SESSION['site401_well_onoff'])) + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=off"><img style="padding: 9px;" src="./images/red_ONOFF.png" title="Wyłącz pompe"></a> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <img style="padding: 9px;" src="./images/red_ONOFF.png"> + '; +} +else +{ + $imgONOFF_g = "./images/green_ONOFF.png"; + $imgONOFF_r = "./images/red_ONOFF_OFF.png"; + $stringONOFF = "Stan pracy - Wyłączona"; + + if (!empty($_SESSION['site401_well_onoff'])) + $btmAcction = ' + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=on"><img style="padding: 9px;" src="./images/green_ONOFF.png" title="Załącz pompe"></a> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF.png"> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; +} + +?> + + <div class="head_tag"><?php echo $stringONOFF ;?></div> + <div class="tag_center"> + <?php echo $btmAcction; ?> + <?php + if ($workStatusArray[0]['DRD_DESCRIPTION']>0) + echo"<br/>Powód: <i><b><a style='text-decoration: none;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>".$workStatusArray[0]['DRD_DESC']."</a></b></i>"; + elseif ($workStatusArray[0]['DRD_VALUE']!="ON" && empty($workStatusArray[0]['DRD_DESCRIPTION'])) + echo"<br/><a style='text-decoration: none; color: #ff0000;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>Kliknij, aby wprowadzić przyczynę wyłączenia</a>"; + + ?> + </div> + + <div class=tag_ChemicalButtons> + <a href='?pg=site401inf&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Parametry pracy układu'></A> + </div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/backup/site401mark_20160919.php b/sites/backup/site401mark_20160919.php new file mode 100644 index 0000000..4245f75 --- /dev/null +++ b/sites/backup/site401mark_20160919.php @@ -0,0 +1,797 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php + +//if (!empty($_GET['direct']) && $_GET['direct']=='site301inf') +//{ +// delSearchSessionData(); +//} + + + + +//warunek na przekazywanie nazw obiektów (G54) +if (empty($_GET['dev']) && !empty($_GET['obj'])) +{ + delSearchSessionData(); + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_GET['obj']."'", "DRS_ID"); + + if ($_GET['dev']>0) $_GET['dev']=$_GET['dev']; + else { + $tmp = explode('=', $_SERVER['REQUEST_URI']); + $lastVal = count($tmp)-1; + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$tmp[$lastVal]."'", "DRS_ID"); + unset($tmp); + } +} + +//załączaie wylączanie pompy +if (!empty($_GET['pa']) && $_GET['dev']>0 && $_POST['inEncrypted']==md5($_GET['dev']) && $_POST['subWellParamSave']==$lab_ButtonName_Next) +{ + $onOffDate = $_POST['inOnOffDate'].' '.$_POST['inOnOffTimeH'].':'.$_POST['inOnOffTimeM'].':00'; + + if ($_GET['pa']=='on') + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='ON',WMS_DATETIME='".$onOffDate."'"); + } + elseif ($_GET['pa']=='off') + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$_POST['inOnOffReason']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='OFF',WMS_DATETIME='".$onOffDate."'"); + } + elseif ($_GET['pa']=='reson') + { + $drdID = sqlValue("select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].")"); + mysql_query("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$_POST['inOnOffReason']."' WHERE DRD_ID=".$drdID); + } +} + + + // kasuje zmianne sesyjne dla historii ocen + unset($_SESSION['site401mhis_working_params']); + unset($_SESSION['site401mhis_inDate']); + unset($_SESSION['site401mhis_sel_data']); + + + + + + + delSearchSessionData(); + + + + + +require_once('./polynomial/PolynomialRegression.php' ); + + + +//wpisuje do tablicy podstawowe informacje o studni + if (empty($_SESSION['well_details'])) + { + //$wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,PUP_ID,WLE_PUMP_NAME,WLE_PUMP_NO,ENG_ID,WLE_ENG_NAME,WLE_ENG_NO,WLE_PUMP_Q_N from rep_object_departments where DRS_ID=".$_GET['dev']); + $wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,WLL_CAT_DIC_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID,round(getLastValue(235,DRS_ID)/1000,3) DR, getLastValue(240,DRS_ID) LPM from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + + unset($pupTmpArray); + $pupTmpArray = sqlGetResAsArray("select PUP_ID,PUP_NAME,DRS_SN_NUMBER,PUP_Q_N from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=".$r["RWL_PUP_DRS_ID"]); + unset($engTmpArray); + $engTmpArray = sqlGetResAsArray("select ENG_ID,ENG_NAME,ENG_ELECTRICITY,ENG_VOLTAGE,ENG_COS_FI,DRS_SN_NUMBER from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=".$r["RWL_ENG_DRS_ID"]); + + //$tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$r["PUP_ID"]." and TST_PUP_SN_NO='".$r["WLE_PUMP_NO"]."' and TST_ENG_ID=".$r["ENG_ID"]." and TST_ENG_SN_NO='".$r["WLE_ENG_NO"]."'"); + $tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$pupTmpArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupTmpArray[0]['DRS_SN_NUMBER']."' and TST_ENG_SN_NO='".$engTmpArray[0]['DRS_SN_NUMBER']."'"); + if (empty($tstID)) $tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$pupTmpArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupTmpArray[0]['DRS_SN_NUMBER']."'"); + + $_SESSION['well_details']=array( + 'devID' => $r["DRS_ID"], + 'wellID' => $r["WLL_ID"], + 'wellName' => $r["WLL_NAME"], + 'wellTypeID'=> $r["WLL_CAT_DIC_ID"], + 'pumpID' => $pupTmpArray[0]['PUP_ID'], + 'pumpName' => $pupTmpArray[0]['PUP_NAME'], + 'pumpSN' => $pupTmpArray[0]['DRS_SN_NUMBER'], + 'QnVal' => $pupTmpArray[0]['PUP_Q_N'], + 'engID' => $engTmpArray[0]['ENG_ID'], + 'engName' => $engTmpArray[0]['ENG_NAME'], + 'eng_I' => $engTmpArray[0]['ENG_ELECTRICITY'], + 'eng_U' => $engTmpArray[0]['ENG_VOLTAGE'], + 'eng_CF' => $engTmpArray[0]['ENG_COS_FI'], + 'engSN' => $engTmpArray[0]['DRS_SN_NUMBER'], + 'LpVal' => $r["LPM"], + 'DrVal' => $r["DR"], + 'testID' => $tstID + ); + + } + unset($pupTmpArray); + unset($engTmpArray); + } + + + + //2016-09-10 + // pobiera informacje do tablicy o wiarygodności danych z SYNDIS + unset($qualDataArray); + if ($_SESSION['well_details']['wellTypeID']!=20) + { + $qualDataArray = sqlGetResAsArray("select * from rep_soap_syndis_quality_data where SQD_DRS_ID=".$_GET['dev']); + $getLastDyndisData = $qualDataArray[0]['SQD_AUDIT_CD']; + } + + + + + + + + +//zakresy dla wykresów + if (empty($_SESSION['site401_scope'])) + { + $wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_SESSION['well_details']['pumpID']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_scope'][] = (float) $r["PEP_X_PARAM"]/60; + } + + } + +// punkty pomiarowe ze stacji prób dla H + if (empty($_SESSION['site401_lift_xy'])) + { + $i=0; $j=0; + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_08 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_lift_xy'][$i][$j] = (float) $r["PEP_X_PARAM"]; + $j++; + $_SESSION['site401_lift_xy'][$i][$j] = (float) $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + $wynik = mysql_query("select max(TSD_VAL_04)/60 X_MAX, max(TSD_VAL_08) Y_MAX from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_minmax_params'] = array( + 'x_min' => 0, + 'x_max' => (float) $r["X_MAX"], + 'y_min' => 0, + 'y_max' => (float) $r["Y_MAX"] + ); + } + } + +// punkty pomiarowe ze stacji prób dla ETA + if (empty($_SESSION['site401_eta_xy'])) + { + $i=0; $j=0; + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_18 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_eta_xy'][$i][$j] = (float) $r["PEP_X_PARAM"]; + $j++; + $_SESSION['site401_eta_xy'][$i][$j] = (float) $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + } + + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_polish.png"; + +?> + + <?php + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + + + + $isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$_SESSION['well_details']['devID']); + + $wynik = mysql_query("select RHD_Q_VAL,RHD_HD_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_PP_VAL,RHD_HH_VAL,RHD_PE_VAL,RHD_DATE from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID'].")"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $qParam = $r["RHD_Q_VAL"]; + $P1param = $r["RHD_P1_VAL"]; + $P2param = $r["RHD_P2_VAL"]; + $PEparam = $r["RHD_PE_VAL"]; + $PPparam = $r["RHD_PP_VAL"]; + $HHparam = $r["RHD_HH_VAL"]; + $resHD = $r["RHD_HD_VAL"]; + $resWorkStatus = $r["RHD_DATE"]; + + if (empty($qualDataArray)) $getLastDyndisData = $r["RHD_DATE"]; + } + + + // =============================================================== // + $Evaluation4_q = wellEvaluation4_q($_SESSION['well_details']['QnVal'], $qParam); + // =============================================================== // + //$resHP = (setPumpHparameterForQ($_SESSION['well_details']['pumpID'],$qParam)-($PPparam-$HHparam))/($PPparam-$HHparam); + //$resHP = (getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60)-($PPparam-$HHparam))/($PPparam-$HHparam); + + + //$Evaluation4_HfQ = wellEvaluation4_HfQ($resHP,$PPparam); + $HPparam = (float) ($PPparam - $HHparam); + $HPSparam = (float) getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60); + $Evaluation4_HfQ = wellEvaluation4_HfQ_new($HPSparam,$PPparam,$HHparam); + + // =============================================================== // + $Evaluation4_Throt = wellEvaluation4_Throt($resHD,$P1param,$P2param); + // =============================================================== // + $Evaluation4_LineLoss = wellEvaluation4_LineLoss($P1param,$PPparam,$_SESSION['well_details']['LpVal'],$_SESSION['well_details']['DrVal']); + // =============================================================== // + $qRZ = $qParam; + + + $fileName0="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_01.png"; + if (file_exists( $fileName0)) unlink($fileName0); + + // =============================================================== // + if (empty($PEparam)) $PEparam=1; + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes($_SESSION['well_details']['QnVal']); + $YellowGreenParam = setYellowGreenLimes($_SESSION['well_details']['QnVal']); + // =============================================================== // + + + // Jeśli mamy odchyłke CH na czerwono, wtedy obrazek jest szary + // =============================================================== // + if ($greyChart==1 || $_SESSION['well_details']['wellTypeID']==20) + pumpImageGreyBell($fileName0); + else pumpImageStatus($fileName0, $RedYellowParam, $YellowGreenParam, $resETA); + // =============================================================== // + + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_02.png"; + $fileName2="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_03.png"; + + if (file_exists( $fileName1)) unlink($fileName1); + if (file_exists( $fileName2)) unlink($fileName2); + + if ($_SESSION['well_details']['testID']>0) + { + // Wysokość podnoszenia + // =======================================================================================// + require_once('./polynomial/plot.php' ); + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = $_SESSION['site401_minmax_params']['x_max']; + $xMaxLine = ceil($xMax); + + $yMax = $_SESSION['site401_minmax_params']['y_max']; + $yMax = ceil($yMax+10); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = ceil($yMax/10); + $Y_MinorScale = $Y_MajorScale / 2; + + $data = $_SESSION['site401_lift_xy']; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, ceil($yMax/4)*4 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression->getCoefficients(); + + // Place text + imageString($image,3,0,0,'H[m]',$colorMap[ "Black" ]); + imageString($image,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][0], $_SESSION['site401_scope'][2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][2], $_SESSION['site401_scope'][3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][3], $_SESSION['site401_scope'][5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][5], $_SESSION['site401_scope'][6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][6], $xMaxLine, $colorMap[ "Red" ] ); + + unset($data); + unset($regression); + unset($coefficients); + unset($dataPoint); + + if ($Evaluation4_HfQ['point_color'] == 'Green') + { + $colorKROPA = $colorMap["Green"]; + $moveKROPA=0; + + } + if ($Evaluation4_HfQ['point_color'] == 'Yellow') + { + $colorKROPA = $colorMap["Yellow"]; + $moveKROPA=2; + + } + if ($Evaluation4_HfQ['point_color'] == 'Red') + { + $colorKROPA = $colorMap["Red"]; + $moveKROPA=2; + + } + + + + //plotCircleRange(0,$xMax,0,ceil($yMax/4)*4,$qRZ/60,str_replace(',','.',setPumpHparameterForQafterTest($_SESSION['well_details']['pumpID'],$_SESSION['well_details']['pumpSN'],$qRZ))-$moveKROPA,$colorKROPA); + plotCircleRange(0,$xMax,0,ceil($yMax/4)*4,$qRZ/60,getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60)-$moveKROPA,$colorKROPA); + imagePNG( $image,$fileName1); + + // =======================================================================================// + } + + + if ($_SESSION['well_details']['testID']>0) + { + // Sprawność + // =======================================================================================// + + require_once('./polynomial/plot1.php' ); + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = $_SESSION['site401_minmax_params']['x_max']; + $xMaxLine = ceil($xMax); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = 0.1; + $Y_MinorScale = $Y_MajorScale / 2; + + $data1 = $_SESSION['site401_eta_xy']; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression1 = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data1 as $dataPoint1 ) + $polynomialRegression1->addData( $dataPoint1[ 0 ], $dataPoint1[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data1, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, 1 ); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + if ($qRZ/60<$_SESSION['site401_scope'][2]) + plotRectangleRange1(0,$xMax,0,$_SESSION['site401_scope'][2], 'red_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][2] && $qRZ/60<$_SESSION['site401_scope'][3]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][2],$_SESSION['site401_scope'][3], 'yellow_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][3] && $qRZ/60<$_SESSION['site401_scope'][5]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][3],$_SESSION['site401_scope'][5], 'green_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][5] && $qRZ/60<$_SESSION['site401_scope'][6]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][5],$_SESSION['site401_scope'][6], 'yellow_value'); + else if ($qRZ/60>=$_SESSION['site401_scope'][6]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][6],$xMaxLine, 'red_value'); + + plotAddScale(); + + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression1->getCoefficients(); + + // Place text + imageString($image1,3,0,0,'n',$colorMap[ "Black" ]); + imagerectangle($image1,4,10,5,15,$colorMap[ "Black" ]); + imageString($image1,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][0], $_SESSION['site401_scope'][2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][2], $_SESSION['site401_scope'][3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][3], $_SESSION['site401_scope'][5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][5], $_SESSION['site401_scope'][6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][6], $xMaxLine, $colorMap[ "Red" ] ); + + unset($data); + unset($regression); + unset($coefficients); + unset($dataPoint); + unset($moveKROPA); + + //plotCircleRange1(0,$xMax,0,1,$qRZ/60,str_replace(',','.',setPumpETAparameterForQafterTest($_SESSION['well_details']['pumpID'],$_SESSION['well_details']['pumpSN'],$qRZ))); + plotCircleRange1(0,$xMax,0,1,$qRZ/60,getPolynomialValue($_SESSION['site401_eta_xy'],$qParam/60)); + + + imagePNG( $image1,$fileName2); + + // =======================================================================================// + } + +?> + +<?php + //tworzy nazwę pliku rysunku jaki ma podstawić w zalezności od stanu pompy (Throt i Loss) + if (strlen($Evaluation4_Throt['image'])>0 && strlen($Evaluation4_LineLoss['image'])>0 && !strstr($imgSPM,"SEGAP")) + $imgSPM = "./images/".$Evaluation4_Throt['image']."".$Evaluation4_LineLoss['image']."_".$imgSPM; + else $imgSPM = "./images/".$imgSPM; + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_site401inf.png"; + if (file_exists($fileName)) unlink($fileName); + $imageSPM=imagecreatefrompng($imgSPM); + $image=imagecreatetruecolor(imagesx($imageSPM),imagesy($imageSPM)); + imagecopy($image,$imageSPM,0,0,0,0,imagesx($imageSPM),imagesy($imageSPM)); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + $font = './fonts/verdana.ttf'; + + // sprawdza stan diagnostyki i podstawia odpowiedni obrazek + $imgToDiag = imagecreatefrompng("./images/diag_ok.png"); + //$isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$var_DRSid); + if ($isDiagOK>0) $imgToDiag = imagecreatefrompng("./images/diag_error.png"); + + if ($_SESSION['well_details']['wellTypeID']==18) + { + imagecopy($image,$imgToDiag,105,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$getLastDyndisData); + } + elseif ($_SESSION['well_details']['wellTypeID']==19) + { + imagecopy($image,$imgToDiag,81,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$getLastDyndisData); + } + imagepng($image,$fileName); + + + // Jeśli mamy typ "SPM - inne" + if ($_SESSION['well_details']['wellTypeID']==20) + { + unset($Evaluation4_HfQ); + unset($Evaluation4_Throt); + unset($Evaluation4_LineLoss); + //pumpImageGreyBell($fileName0); + } + +?> + + + + +<?php +$spacja = "&nbsp;&nbsp;&nbsp;&nbsp;"; unset($algSPM); +//analiza, czy wszystkie wartości z ostatniego pomiaru z SYNDIS są prawidłowe i wiarygodne: +// ========================================================================================================================================= +// analiza hydrauliczna +// ========================================================================================================================================= +$isInfoWATER = false; +if (!empty($qualDataArray) && ( + $qualDataArray[0]['SQD_FLG_Q']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_P1']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_P2']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_PP']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_HH']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_HD']!='CORRECT' + + || $qualDataArray[0]['SQD_VAL_Q']<=0 + || $qualDataArray[0]['SQD_VAL_PP']<=0 + || $qualDataArray[0]['SQD_VAL_HH']<=0 + || $qualDataArray[0]['SQD_VAL_HD']<=0 + )) +{ + $isInfoWATER = true; + $infoWATER_text = ""; + + if ($qualDataArray[0]['SQD_FLG_Q']!='CORRECT' || $qualDataArray[0]['SQD_VAL_Q']<=0) + $infoWATER_text .="<br/> - Wydajność Q=".round($qualDataArray[0]['SQD_VAL_Q']/60,3)." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_Q']."]."; + if ($qualDataArray[0]['SQD_FLG_P1']!='CORRECT') + $infoWATER_text .="<br/> - Ciśnienie p1=".$qualDataArray[0]['SQD_VAL_P1']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_P1']."]."; + if ($qualDataArray[0]['SQD_FLG_P2']!='CORRECT') + $infoWATER_text .="<br/> - Ciśnienie p2=".$qualDataArray[0]['SQD_VAL_P2']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_P2']."]."; + if ($qualDataArray[0]['SQD_FLG_PP']!='CORRECT' || $qualDataArray[0]['SQD_VAL_PP']<=0) + $infoWATER_text .="<br/> - Ciśnienie Pp=".$qualDataArray[0]['SQD_VAL_PP']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_PP']."]."; + if ($qualDataArray[0]['SQD_FLG_HH']!='CORRECT' || $qualDataArray[0]['SQD_VAL_HH']<=0) + $infoWATER_text .="<br/> - Wysokość Hh=".$qualDataArray[0]['SQD_VAL_HH']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_HH']."]."; + if ($qualDataArray[0]['SQD_FLG_HD']!='CORRECT' || $qualDataArray[0]['SQD_VAL_HD']<=0) + $infoWATER_text .="<br/> - Zwierciadło dynamiczne Hd=".$qualDataArray[0]['SQD_VAL_HD']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_HD']."]."; +} +// ========================================================================================================================================= +// analiza elektryczna +// ========================================================================================================================================= +$isInfoENERGETIC = false; +if (!empty($qualDataArray) && ( + $qualDataArray[0]['SQD_FLG_I']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_U']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_CF']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_PE']!='CORRECT' + + || $qualDataArray[0]['SQD_VAL_I']<=0 + || $qualDataArray[0]['SQD_VAL_U']<=0 + || $qualDataArray[0]['SQD_VAL_CF']<=0 + || $qualDataArray[0]['SQD_VAL_CF']>=1 + || $qualDataArray[0]['SQD_VAL_PE']<=0 + + )) +{ + $isInfoENERGETIC = true; + $infoENERGETIC_text = ""; + + if ($qualDataArray[0]['SQD_FLG_I']!='CORRECT' || $qualDataArray[0]['SQD_VAL_I']<=0) + $infoENERGETIC_text .="<br/> - Pobór prądu I=".$qualDataArray[0]['SQD_VAL_I']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_I']."]."; + if ($qualDataArray[0]['SQD_FLG_U']!='CORRECT' || $qualDataArray[0]['SQD_VAL_U']<=0) + $infoENERGETIC_text .="<br/> - Napięcie zasilania U=".$qualDataArray[0]['SQD_VAL_U']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_U']."]"; + if ($qualDataArray[0]['SQD_FLG_CF']!='CORRECT' || $qualDataArray[0]['SQD_VAL_CF']<=0 || $qualDataArray[0]['SQD_VAL_CF']>=1) + $infoENERGETIC_text .="<br/> - cos(φ)=".$qualDataArray[0]['SQD_VAL_CF']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_CF']."]"; + if ($qualDataArray[0]['SQD_FLG_PE']!='CORRECT' || $qualDataArray[0]['SQD_VAL_PE']<=0) + $infoENERGETIC_text .="<br/> - Moc czynna Pe=".$qualDataArray[0]['SQD_VAL_PE']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_PE']."]"; +} +// ========================================================================================================================================= +// ========================================================================================================================================= + +// jeśli analiza jakości i poprawności danych przeszła poprawnie sprawdza algorytmem SoftSPM +if (!empty($qualDataArray) && !$isInfoWATER && !$isInfoENERGETIC) +{ + // ===================================================================================================================================== + // analiza hydrauliczna + // ===================================================================================================================================== + $test_Hp = (float) $qualDataArray[0]['SQD_VAL_PP'] - $qualDataArray[0]['SQD_VAL_HH']; + $test_Hps = (float) getPolynomialValue($_SESSION['site401_lift_xy'],($qualDataArray[0]['SQD_VAL_Q']/60)); //wysokość ze stacji + + + if ( + //($test_Hp < (0.8*$test_Hps) || $test_Hp > (1.08*$test_Hps)) + $test_Hp > (1.08*$test_Hps) + || ($qualDataArray[0]['SQD_VAL_P2']>$qualDataArray[0]['SQD_VAL_P1']) + + ) + { + $isInfoWATER = true; + $infoWATER_text = ""; + $algSPM = "według algorytmu SoftSPM"; + + + //if ($test_Hp < (0.8*$test_Hps) || $test_Hp > (1.08*$test_Hps)) + if ($qualDataArray[0]['SQD_VAL_P2']>$qualDataArray[0]['SQD_VAL_P1']) + $infoWATER_text .="<br/> - Ciśnienie P2>P1 ".$spacja."[SYNDIS]."; + if ($test_Hp > (1.08*$test_Hps)) + { + $infoWATER_text .="<br/> - Głębokość zabudowy pompy Lp=".$_SESSION['well_details']['LpVal']." ".$spacja."[SoftSPM]."; + $infoWATER_text .="<br/> - Ciśnienie Pp=".$qualDataArray[0]['SQD_VAL_PP']." [SYNDIS]."; + $infoWATER_text .="<br/> - Zwierciadło dynamiczne Hd=".$qualDataArray[0]['SQD_VAL_HD']." ".$spacja."[SYNDIS]."; + } + + + + + } + // ===================================================================================================================================== + + + // ===================================================================================================================================== + // analiza elektryczna + // ===================================================================================================================================== + unset($probaArray); + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_14 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $probaArray[] = array( + (float) $r["PEP_X_PARAM"], + (float) $r["PEP_Y_PARAM"] + ); + } + $test_Pes = (float) getPolynomialValue($probaArray,($qualDataArray[0]['SQD_VAL_Q']/60)); //moc ze stacji + unset($probaArray); + + if ( + $qualDataArray[0]['SQD_VAL_PE'] < (0.83*$test_Pes) || $qualDataArray[0]['SQD_VAL_PE'] > (1.25*$test_Pes) + //|| ((0.92*$_SESSION['well_details']['eng_CF'])>$qualDataArray[0]['SQD_VAL_CF'] || $qualDataArray[0]['SQD_VAL_CF']>(1.07*$_SESSION['well_details']['eng_CF'])) + //|| ((0.93*$_SESSION['well_details']['eng_U']) > $qualDataArray[0]['SQD_VAL_U'] || $qualDataArray[0]['SQD_VAL_U']>(1.08*$_SESSION['well_details']['eng_U'])) + //|| ((0.85*$_SESSION['well_details']['eng_I']) > $qualDataArray[0]['SQD_VAL_I'] || $qualDataArray[0]['SQD_VAL_I']>(1.15*$_SESSION['well_details']['eng_I'])) + ) + { + $isInfoENERGETIC = true; + $infoENERGETIC_text = ""; + $algSPM = "według algorytmu SoftSPM"; + + if ($qualDataArray[0]['SQD_VAL_PE'] < (0.83*$test_Pes) || $qualDataArray[0]['SQD_VAL_PE'] > (1.25*$test_Pes)) + $infoENERGETIC_text .="<br/> - Moc czynna Pe=".$qualDataArray[0]['SQD_VAL_PE']." ".$spacja."[SYNDIS]"; +// if ((0.92*$_SESSION['well_details']['eng_CF'])>$qualDataArray[0]['SQD_VAL_CF'] || $qualDataArray[0]['SQD_VAL_CF']>(1.07*$_SESSION['well_details']['eng_CF'])) +// $infoENERGETIC_text .="<br/> - cos(φ)=".$qualDataArray[0]['SQD_VAL_CF']." ".$spacja."[SYNDIS]"; +// if ((0.93*$_SESSION['well_details']['eng_U']) > $qualDataArray[0]['SQD_VAL_U'] || $qualDataArray[0]['SQD_VAL_U']>(1.08*$_SESSION['well_details']['eng_U'])) +// $infoENERGETIC_text .="<br/> - Napięcie zasilania U=".$qualDataArray[0]['SQD_VAL_U']." ".$spacja."[SYNDIS]"; +// if ((0.85*$_SESSION['well_details']['eng_I']) > $qualDataArray[0]['SQD_VAL_I'] || $qualDataArray[0]['SQD_VAL_I']>(1.15*$_SESSION['well_details']['eng_I'])) +// $infoENERGETIC_text .="<br/> - Pobór prądu I=".$qualDataArray[0]['SQD_VAL_I']." ".$spacja."[SYNDIS]"; + } + // ===================================================================================================================================== +} +// ========================================================================================================================================= + +if ($isInfoWATER) + echo "<div class='infoWATER'>Parametry hydrauliczne lub techniczne wymagające analizy ".$algSPM.":".$infoWATER_text."</div>"; + +if ($isInfoENERGETIC) + echo "<div class='infoENERGETIC'>Parametry elektryczne wymagające analizy ".$algSPM.":".$infoENERGETIC_text."</div>"; + +if ($isInfoWATER || $isInfoENERGETIC) + echo "<div class='actionERROR'>Brak oceny!</div>"; + + + +if ($qualDataArray[0]['SQD_VAL_ONOFF']==0 || $isInfoWATER || $isInfoENERGETIC) +{ + if (file_exists( $fileName0)) unlink($fileName0); + pumpImageGreyBell($fileName0); +} + + +?> + + + + + + + + + + + + + + + + + + + + + <div class="tag50_left"> + + <div class="head_tag"><?php echo $lab_Tag_site301_004." - ".$_SESSION['well_details']['wellName'];?></div> + <div class="tag_center"> + <a href="?pg=site401inf&dev=<?php echo $_GET['dev']?>"><img SRC="<?php echo $fileName; ?>" border="0"></a> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site401_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_005; ?></TD> + <TD class="<?php echo $Evaluation4_q['grid_style']; ?>"><?php echo $Evaluation4_q['grid_text']; ?></TD> + <TD CLASS="desc_value" style="max-width: 40px; text-align: center;" rowspan="4"> + <a href="?pg=site401mhis&dev=<?php echo$_GET['dev']; ?>"><img SRC="<?php echo $fileName0; ?>" border="0"></a> + </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_009; ?></TD> + <TD class="<?php echo $Evaluation4_HfQ['grid_style']; ?>"><?php echo $Evaluation4_HfQ['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_012; ?></TD> + <TD class="<?php echo $Evaluation4_Throt['grid_style']; ?>"><?php echo $Evaluation4_Throt['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_015; ?></TD> + <TD class="<?php echo $Evaluation4_LineLoss['grid_style']; ?>"><?php echo $Evaluation4_LineLoss['grid_text']; ?></TD> + </TR> + </table> + </div> + + </div> + + + + +<div class="tag50_right"> + + + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0 && ($_SESSION['well_details']['wellTypeID']==18 || $_SESSION['well_details']['wellTypeID']==19)) + echo"<a href='?pg=site401lift&t=".$_SESSION['well_details']['testID']."&d=".$_SESSION['well_details']['devID']."&q=".$qParam."&hp=".$HPparam."'><img SRC=$fileName1></a>"; + elseif ($_SESSION['well_details']['testID']>0 && $_SESSION['well_details']['wellTypeID']==20) + echo"<img SRC=$fileName1>"; + else + echo $lab_Field_site203_017; + ?> + + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_005 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0) + echo"<img SRC=$fileName2>"; + else + echo $lab_Field_site203_017; + ?> + </div> + + +<?php +$workStatusArray = sqlGetResAsArray("select DRD_VALUE,DRD_DESCRIPTION,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=DRD_DESCRIPTION limit 1) DRD_DESC from seg_dev_resources_det where DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID'].") and DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID']." limit 1"); +//$well_work_status = getLastValueFromDevResourceDetail('WELL_STATUSES','ON_OFF',$_SESSION['well_details']['devID']); + + +if ($workStatusArray[0]['DRD_VALUE']=="ON") +{ + $imgONOFF_g = "./images/green_ONOFF_ON.png"; + $imgONOFF_r = "./images/red_ONOFF.png"; + $stringONOFF = "Stan pracy - Załączona"; + + if (!empty($_SESSION['site401_well_onoff'])) + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=off"><img style="padding: 9px;" src="./images/red_ONOFF.png" title="Wyłącz pompe"></a> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <img style="padding: 9px;" src="./images/red_ONOFF.png"> + '; +} +else +{ + $imgONOFF_g = "./images/green_ONOFF.png"; + $imgONOFF_r = "./images/red_ONOFF_OFF.png"; + $stringONOFF = "Stan pracy - Wyłączona"; + + if (!empty($_SESSION['site401_well_onoff'])) + $btmAcction = ' + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=on"><img style="padding: 9px;" src="./images/green_ONOFF.png" title="Załącz pompe"></a> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF.png"> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; +} + +?> + + <div class="head_tag"><?php echo $stringONOFF ;?></div> + <div class="tag_center"> + <?php echo $btmAcction; ?> + <?php + if ($workStatusArray[0]['DRD_DESCRIPTION']>0) + echo"<br/>Powód: <i><b><a style='text-decoration: none;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>".$workStatusArray[0]['DRD_DESC']."</a></b></i>"; + elseif ($workStatusArray[0]['DRD_VALUE']!="ON" && empty($workStatusArray[0]['DRD_DESCRIPTION'])) + echo"<br/><a style='text-decoration: none; color: #ff0000;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>Kliknij, aby wprowadzić przyczynę wyłączenia</a>"; + + ?> + </div> + + <div class=tag_ChemicalButtons> + <a href='?pg=site401inf&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Parametry pracy układu'></A> + </div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/backup/site401mark_20180426.php b/sites/backup/site401mark_20180426.php new file mode 100644 index 0000000..7d43add --- /dev/null +++ b/sites/backup/site401mark_20180426.php @@ -0,0 +1,912 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php + +if (!empty($_GET['direct']) && $_GET['direct']=='site301inf') +{ + delSearchSessionData(); +} + + + + +//warunek na przekazywanie nazw obiektów (G54) +if (empty($_GET['dev']) && !empty($_GET['obj'])) +{ + delSearchSessionData(); + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_GET['obj']."'", "DRS_ID"); + + if ($_GET['dev']>0) $_GET['dev']=$_GET['dev']; + else { + $tmp = explode('=', $_SERVER['REQUEST_URI']); + $lastVal = count($tmp)-1; + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$tmp[$lastVal]."'", "DRS_ID"); + unset($tmp); + } +} + +//załączaie wylączanie pompy +if (!empty($_GET['pa']) && $_GET['dev']>0 && $_POST['inEncrypted']==md5($_GET['dev']) && $_POST['subWellParamSave']==$lab_ButtonName_Next) +{ + $onOffDate = $_POST['inOnOffDate'].' '.$_POST['inOnOffTimeH'].':'.$_POST['inOnOffTimeM'].':00'; + + if ($_GET['pa']=='on') + { + //kasuje wcześniejsze wpisy (z datą późnijszą niż aktualnie wstawiona) + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work WHERE WMS_DRS_ID=".$_GET['dev']." and WMS_DATETIME>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work_syndis WHERE SLA_DRS_ID=".$_GET['dev']." and SLA_DATETIME>='".$onOffDate."'"); + // =================================================================================== + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='ON',WMS_DATETIME='".$onOffDate."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$_SESSION['well_details']['wellID'].",SLA_DRS_ID=".$_GET['dev'].",SLA_NAME='".$_SESSION['well_details']['wellName']."',SLA_WORK_STATUS='ON',SLA_DATETIME='".$onOffDate."',SLA_AUDIT_CD=now()"); + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$_GET['dev'].",RHD_DATE='".$onOffDate."',RHD_Q_VAL=getLastValue(200,".$_GET['dev']."),RHD_AUDIT_CD=now()"); + + // dodaje wpis, czy aktualizować czasy pracy - 2018-01-06 (syndis_onoff_time) + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='ON',ISN_DRS_ID=".$_GET['dev'].",ISN_DATE=now()"); + // czyści informcję w polu RHD_SPM_WT - w celu przeliczenia czasu i wody jeszcze raz - dla załącz/wyłącz wpisywanych wstecznie + mysql_query("UPDATE rep_his_data_everyday SET RHD_SPM_WT=NULL WHERE RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>='".$onOffDate."'"); + + } + elseif ($_GET['pa']=='off') + { + //kasuje wcześniejsze wpisy (z datą późnijszą niż aktualnie wstawiona) + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work WHERE WMS_DRS_ID=".$_GET['dev']." and WMS_DATETIME>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work_syndis WHERE SLA_DRS_ID=".$_GET['dev']." and SLA_DATETIME>='".$onOffDate."'"); + // =================================================================================== + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$_POST['inOnOffReason']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='OFF',WMS_DATETIME='".$onOffDate."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$_SESSION['well_details']['wellID'].",SLA_DRS_ID=".$_GET['dev'].",SLA_NAME='".$_SESSION['well_details']['wellName']."',SLA_WORK_STATUS='OFF',SLA_DATETIME='".$onOffDate."',SLA_AUDIT_CD=now()"); + + // dodaje wpis, czy aktualizować czasy pracy - 2018-01-06 (syndis_onoff_time) + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='OFF',ISN_DRS_ID=".$_GET['dev'].",ISN_DATE=now()"); + // czyści informcję w polu RHD_SPM_WT - w celu przeliczenia czasu i wody jeszcze raz - dla załącz/wyłącz wpisywanych wstecznie + mysql_query("UPDATE rep_his_data_everyday SET RHD_SPM_WT=NULL WHERE RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>='".$onOffDate."'"); + + } + elseif ($_GET['pa']=='reson') + { + $drdID = sqlValue("select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].")"); + mysql_query("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$_POST['inOnOffReason']."' WHERE DRD_ID=".$drdID); + } +} + + + // kasuje zmianne sesyjne dla historii ocen + unset($_SESSION['site401mhis_working_params']); + unset($_SESSION['site401mhis_inDate']); + unset($_SESSION['site401mhis_sel_data']); + + + + +require_once('./polynomial/PolynomialRegression.php' ); + + +unset($_SESSION['well_details']); +//wpisuje do tablicy podstawowe informacje o studni +$wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,WLL_CAT_DIC_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID,round(getLastValue(235,DRS_ID)/1000,3) DR, getLastValue(240,DRS_ID) LPM from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID where DRS_ID=".$_GET['dev']); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + + unset($pupTmpArray); + if ($r["RWL_PUP_DRS_ID"]>0) + $pupTmpArray = sqlGetResAsArray("select PUP_ID,PUP_NAME,DRS_SN_NUMBER,PUP_Q_N from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=".$r["RWL_PUP_DRS_ID"]); + unset($engTmpArray); + if ($r["RWL_ENG_DRS_ID"]>0) + $engTmpArray = sqlGetResAsArray("select ENG_ID,ENG_NAME,ENG_ELECTRICITY,ENG_VOLTAGE,ENG_COS_FI,DRS_SN_NUMBER from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=".$r["RWL_ENG_DRS_ID"]); + unset($workStatusArray); + //$workStatusArray = sqlGetResAsArray("select DRD_VALUE,DRD_DESCRIPTION,DRD_AUDIT_DATE,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=DRD_DESCRIPTION limit 1) DRD_DESC from viw_pump_working_status where DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from viw_pump_working_status where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].") and DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." limit 1"); + $workStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].")"); + //$tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$r["PUP_ID"]." and TST_PUP_SN_NO='".$r["WLE_PUMP_NO"]."' and TST_ENG_ID=".$r["ENG_ID"]." and TST_ENG_SN_NO='".$r["WLE_ENG_NO"]."'"); + if ($r["RWL_PUP_DRS_ID"]>0 && $r["RWL_ENG_DRS_ID"]>0) + { + $tstID = sqlValue("select max(TST_ID) TST_ID from tst_tests where TST_PUP_ID=".$pupTmpArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupTmpArray[0]['DRS_SN_NUMBER']."' and TST_ENG_SN_NO='".$engTmpArray[0]['DRS_SN_NUMBER']."'"); + if (empty($tstID)) $tstID = sqlValue("select max(TST_ID) TST_ID from tst_tests where TST_PUP_ID=".$pupTmpArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupTmpArray[0]['DRS_SN_NUMBER']."'"); + } + + $_SESSION['well_details']=array( + 'devID' => $r["DRS_ID"], + 'wellID' => $r["WLL_ID"], + 'wellName' => $r["WLL_NAME"], + 'wellTypeID'=> $r["WLL_CAT_DIC_ID"], + 'pumpID' => $pupTmpArray[0]['PUP_ID'], + 'pumpName' => $pupTmpArray[0]['PUP_NAME'], + 'pumpSN' => $pupTmpArray[0]['DRS_SN_NUMBER'], + 'QnVal' => $pupTmpArray[0]['PUP_Q_N'], + 'engID' => $engTmpArray[0]['ENG_ID'], + 'engName' => $engTmpArray[0]['ENG_NAME'], + 'eng_I' => $engTmpArray[0]['ENG_ELECTRICITY'], + 'eng_U' => $engTmpArray[0]['ENG_VOLTAGE'], + 'eng_CF' => $engTmpArray[0]['ENG_COS_FI'], + 'engSN' => $engTmpArray[0]['DRS_SN_NUMBER'], + 'LpVal' => $r["LPM"], + 'DrVal' => $r["DR"], + 'testID' => $tstID, + 'onOff' => $workStatusArray[0]['DRD_VALUE'] + ); + +} +unset($pupTmpArray); +unset($engTmpArray); + + + + + + //2016-09-10 + // pobiera informacje do tablicy o wiarygodności danych z SYNDIS + unset($qualDataArray); + if ($_SESSION['well_details']['wellTypeID']!=20) + { + $qualDataArray = sqlGetResAsArray("select * from rep_soap_syndis_quality_data where SQD_DRS_ID=".$_GET['dev']); + $getLastDyndisData = $qualDataArray[0]['SQD_AUDIT_CD']; + } + + if ($_SESSION['well_details']['wellTypeID']==18) + $imgSPM="SPM_BASE_polish.png"; + elseif ($_SESSION['well_details']['wellTypeID']==19) + $imgSPM="SPM_OPT_polish.png"; + else + $imgSPM="SPM_FULL_polish.png"; + + + + + + + +// jeśli mamy zabudowany agregat i jest próba dla niego +if ($_SESSION['well_details']['testID']>0) +{ + + //zakresy dla wykresów + if (empty($_SESSION['site401_scope'])) + { + $wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_SESSION['well_details']['pumpID']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_scope'][] = (float) $r["PEP_X_PARAM"]/60; + } + + } + + + +// punkty pomiarowe dla Hp, Eta, Pe ze stacji prób + $wynik = mysql_query("select TSD_VAL_04/60 TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$tstID." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $testArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"], + 'n' => (float) $r["TSD_VAL_18"] + ); + } + + + //$_SESSION['site401_lift_xy'] + //$_SESSION['site401_eta_xy'] + //$_SESSION['site401_minmax_params'] + + $maxPiontOfTest =sqlGetResAsArray("select max(TSD_VAL_04)/60 X_MAX, max(TSD_VAL_08) Y_MAX from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']); + + +} + +?> + + <?php + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + + + $wynik = mysql_query("select RHD_Q_VAL,RHD_HD_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_PP_VAL,RHD_HH_VAL,RHD_PE_VAL,RHD_DGN_VAL,RHD_DATE from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID'].")"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $qParam = $r["RHD_Q_VAL"]; + $P1param = $r["RHD_P1_VAL"]; + $P2param = $r["RHD_P2_VAL"]; + $PEparam = $r["RHD_PE_VAL"]; + $PPparam = $r["RHD_PP_VAL"]; + $HHparam = $r["RHD_HH_VAL"]; + $resHD = $r["RHD_HD_VAL"]; + $isDiagOK = $r["RHD_DGN_VAL"]; + $resWorkStatus = $r["RHD_DATE"]; + + if (empty($qualDataArray)) $getLastDyndisData = $r["RHD_DATE"]; + } + + + // =============================================================== // + $Evaluation4_q = wellEvaluation4_q($_SESSION['well_details']['QnVal'], $qParam); + // =============================================================== // + //$resHP = (setPumpHparameterForQ($_SESSION['well_details']['pumpID'],$qParam)-($PPparam-$HHparam))/($PPparam-$HHparam); + //$resHP = (getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60)-($PPparam-$HHparam))/($PPparam-$HHparam); + + + //$Evaluation4_HfQ = wellEvaluation4_HfQ($resHP,$PPparam); + $HPparam = (float) ($PPparam - $HHparam); + if ($_SESSION['well_details']['testID']>0) + $HPSparam = (float) getPolynomialHp_second($testArray,$qParam/60); + + $Evaluation4_HfQ = wellEvaluation4_HfQ_new($HPSparam,$PPparam,$HHparam); + + // =============================================================== // + $Evaluation4_Throt = wellEvaluation4_Throt($resHD,$P1param,$P2param); + // =============================================================== // + $Evaluation4_LineLoss = wellEvaluation4_LineLoss($P1param,$PPparam,$_SESSION['well_details']['LpVal'],$_SESSION['well_details']['DrVal']); + // =============================================================== // + //$qRZ = $qParam; + + $fileName0="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_01.png"; + if (file_exists( $fileName0)) unlink($fileName0); + + // =============================================================== // + if (empty($PEparam)) $PEparam=1; + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes($_SESSION['well_details']['QnVal']); + $YellowGreenParam = setYellowGreenLimes($_SESSION['well_details']['QnVal']); + // =============================================================== // + + + // Jeśli mamy odchyłke CH na czerwono, wtedy obrazek jest szary + // =============================================================== // + if ($greyChart==1 || $_SESSION['well_details']['wellTypeID']==20) + pumpImageGreyBell($fileName0); + else pumpImageStatus($fileName0, $RedYellowParam, $YellowGreenParam, $resETA); + // =============================================================== // + + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_02.png"; + $fileName2="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_03.png"; + + if (file_exists( $fileName1)) unlink($fileName1); + if (file_exists( $fileName2)) unlink($fileName2); + + + // jeśli jest próba + if ($_SESSION['well_details']['testID']>0) + // =======================================================================================// + { + // Wysokość podnoszenia + // =======================================================================================// + require_once('./polynomial/plot.php' ); + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = $maxPiontOfTest[0]['X_MAX']; + $xMaxLine = ceil($xMax); + + $yMax = $maxPiontOfTest[0]['Y_MAX']; + $yMax = ceil($yMax+10); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = ceil($yMax/10); + $Y_MinorScale = $Y_MajorScale / 2; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $testArray as $dataPoint ) + { + $polynomialRegression->addData( $dataPoint['q'], $dataPoint['h'] ); + //echo $dataPoint['q']."<br/> ".$dataPoint['h']."<br/><br/>"; + } + //$polynomialRegression->addData( $dataPoint['q'], $dataPoint['h'] ); + + // Add raw data to plot. + unset($data); + for($i=0; $i<count($testArray); $i++) + { + $data[] = array( + $testArray[$i]['q'], + $testArray[$i]['h'] + ); + } + plotRenderData( $data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, ceil($yMax/4)*4 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize(3); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression->getCoefficients(); + + // Place text + imageString($image,3,0,0,'H[m]',$colorMap[ "Black" ]); + imageString($image,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][0], $_SESSION['site401_scope'][2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][2], $_SESSION['site401_scope'][3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][3], $_SESSION['site401_scope'][5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][5], $_SESSION['site401_scope'][6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $_SESSION['site401_scope'][6], $xMaxLine, $colorMap[ "Red" ] ); + + unset($data); + unset($regression); + unset($coefficients); + unset($dataPoint); + + if ($Evaluation4_HfQ['point_color'] == 'Green') + { + $colorKROPA = $colorMap["Green"]; + $moveKROPA=0; + + } + if ($Evaluation4_HfQ['point_color'] == 'Yellow') + { + $colorKROPA = $colorMap["Yellow"]; + $moveKROPA=2; + + } + if ($Evaluation4_HfQ['point_color'] == 'Red') + { + $colorKROPA = $colorMap["Red"]; + $moveKROPA=2; + + } + + + + //plotCircleRange(0,$xMax,0,ceil($yMax/4)*4,$qRZ/60,str_replace(',','.',setPumpHparameterForQafterTest($_SESSION['well_details']['pumpID'],$_SESSION['well_details']['pumpSN'],$qRZ))-$moveKROPA,$colorKROPA); + plotCircleRange(0,$xMax,0,ceil($yMax/4)*4,$qParam/60,getPolynomialHp_second($testArray,$qParam/60)-$moveKROPA,$colorKROPA); + imagePNG( $image,$fileName1); + + // =======================================================================================// + } + // =======================================================================================// + + + // jeśli jest próba + // =======================================================================================// + if ($_SESSION['well_details']['testID']>0) + { + // Sprawność + // =======================================================================================// + + require_once('./polynomial/plot1.php' ); + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = $maxPiontOfTest[0]['X_MAX']; + $xMaxLine = ceil($xMax); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = 0.1; + $Y_MinorScale = $Y_MajorScale / 2; + + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression1 = new PolynomialRegression( 4 ); + + unset($dataPoint); + // Add all the data to the regression analysis. + foreach ( $testArray as $dataPoint ) + $polynomialRegression1->addData($dataPoint['q'], $dataPoint['n']); + + // Add raw data to plot. + unset($data); + for($i=0; $i<count($testArray); $i++) + { + $data[] = array( + $testArray[$i]['q'], + $testArray[$i]['n'] + ); + } + plotRenderData($data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, 1 ); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + if ($qParam/60<$_SESSION['site401_scope'][2]) + plotRectangleRange1(0,$xMax,0,$_SESSION['site401_scope'][2], 'red_value'); + else if ($qParam/60>=$_SESSION['site401_scope'][2] && $qParam/60<$_SESSION['site401_scope'][3]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][2],$_SESSION['site401_scope'][3], 'yellow_value'); + else if ($qParam/60>=$_SESSION['site401_scope'][3] && $qParam/60<$_SESSION['site401_scope'][5]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][3],$_SESSION['site401_scope'][5], 'green_value'); + else if ($qParam/60>=$_SESSION['site401_scope'][5] && $qParam/60<$_SESSION['site401_scope'][6]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][5],$_SESSION['site401_scope'][6], 'yellow_value'); + else if ($qParam/60>=$_SESSION['site401_scope'][6]) + plotRectangleRange1(0,$xMax,$_SESSION['site401_scope'][6],$xMaxLine, 'red_value'); + + plotAddScale(); + + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression1->getCoefficients(); + + // Place text + imageString($image1,3,0,0,'n',$colorMap[ "Black" ]); + imagerectangle($image1,4,10,5,15,$colorMap[ "Black" ]); + imageString($image1,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][0], $_SESSION['site401_scope'][2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][2], $_SESSION['site401_scope'][3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][3], $_SESSION['site401_scope'][5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][5], $_SESSION['site401_scope'][6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $_SESSION['site401_scope'][6], $xMaxLine, $colorMap[ "Red" ] ); + + unset($data); + unset($regression); + unset($coefficients); + unset($dataPoint); + unset($moveKROPA); + + //plotCircleRange1(0,$xMax,0,1,$qRZ/60,str_replace(',','.',setPumpETAparameterForQafterTest($_SESSION['well_details']['pumpID'],$_SESSION['well_details']['pumpSN'],$qRZ))); + plotCircleRange1(0,$xMax,0,1,$qParam/60,getPolynomialEta_second($testArray,$qParam/60)); + + + imagePNG( $image1,$fileName2); + + // =======================================================================================// + } + // =======================================================================================// + +?> + +<?php + //tworzy nazwę pliku rysunku jaki ma podstawić w zalezności od stanu pompy (Throt i Loss) + if (strlen($Evaluation4_Throt['image'])>0 && strlen($Evaluation4_LineLoss['image'])>0 && !strstr($imgSPM,"SEGAP")) + $imgSPM = "./images/".$Evaluation4_Throt['image']."".$Evaluation4_LineLoss['image']."_".$imgSPM; + else $imgSPM = "./images/".$imgSPM; + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_site401inf.png"; + if (file_exists($fileName)) unlink($fileName); + $imageSPM=imagecreatefrompng($imgSPM); + $image=imagecreatetruecolor(imagesx($imageSPM),imagesy($imageSPM)); + imagecopy($image,$imageSPM,0,0,0,0,imagesx($imageSPM),imagesy($imageSPM)); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + $font = './fonts/verdana.ttf'; + + // sprawdza stan diagnostyki i podstawia odpowiedni obrazek + //$isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$var_DRSid); + if ($isDiagOK==1) $imgToDiag = imagecreatefrompng("./images/diag_warning.png"); + elseif ($isDiagOK==2) $imgToDiag = imagecreatefrompng("./images/diag_error.png"); + else $imgToDiag = imagecreatefrompng("./images/diag_ok.png"); + //diag_warning + + + if ($_SESSION['well_details']['wellTypeID']==18) + { + imagecopy($image,$imgToDiag,105,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$getLastDyndisData); + } + elseif ($_SESSION['well_details']['wellTypeID']==19) + { + imagecopy($image,$imgToDiag,81,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$getLastDyndisData); + } + imagepng($image,$fileName); + + + // Jeśli mamy typ "SPM - inne" + if ($_SESSION['well_details']['wellTypeID']==20) + { + unset($Evaluation4_HfQ); + unset($Evaluation4_Throt); + unset($Evaluation4_LineLoss); + //pumpImageGreyBell($fileName0); + } + +?> + + + + +<?php +if ($_SESSION['well_details']['testID']>0) +{ +// ========================================================================================================================================= + + +$spacja = "&nbsp;&nbsp;&nbsp;&nbsp;"; unset($algSPM); +//analiza, czy wszystkie wartości z ostatniego pomiaru z SYNDIS są prawidłowe i wiarygodne: +// ========================================================================================================================================= +// analiza hydrauliczna +// ========================================================================================================================================= +$isInfoWATER = false; +if (!empty($qualDataArray) && ( + $qualDataArray[0]['SQD_FLG_Q']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_P1']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_P2']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_PP']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_HH']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_HD']!='CORRECT' + + || $qualDataArray[0]['SQD_VAL_Q']<=0 + || $qualDataArray[0]['SQD_VAL_PP']<=0 + || $qualDataArray[0]['SQD_VAL_HH']<=0 + || $qualDataArray[0]['SQD_VAL_HD']<=0 + )) +{ + $isInfoWATER = true; + $infoWATER_text = ""; + + if ($qualDataArray[0]['SQD_FLG_Q']!='CORRECT' || $qualDataArray[0]['SQD_VAL_Q']<=0) + $infoWATER_text .="<br/> - Wydajność Q=".round($qualDataArray[0]['SQD_VAL_Q']/60,3)." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_Q']."]."; + if ($qualDataArray[0]['SQD_FLG_P1']!='CORRECT') + $infoWATER_text .="<br/> - Ciśnienie p1=".$qualDataArray[0]['SQD_VAL_P1']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_P1']."]."; + if ($qualDataArray[0]['SQD_FLG_P2']!='CORRECT') + $infoWATER_text .="<br/> - Ciśnienie p2=".$qualDataArray[0]['SQD_VAL_P2']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_P2']."]."; + if ($qualDataArray[0]['SQD_FLG_PP']!='CORRECT' || $qualDataArray[0]['SQD_VAL_PP']<=0) + $infoWATER_text .="<br/> - Ciśnienie Pp=".$qualDataArray[0]['SQD_VAL_PP']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_PP']."]."; + if ($qualDataArray[0]['SQD_FLG_HH']!='CORRECT' || $qualDataArray[0]['SQD_VAL_HH']<=0) + $infoWATER_text .="<br/> - Wysokość Hh=".$qualDataArray[0]['SQD_VAL_HH']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_HH']."]."; + if ($qualDataArray[0]['SQD_FLG_HD']!='CORRECT' || $qualDataArray[0]['SQD_VAL_HD']<=0) + $infoWATER_text .="<br/> - Zwierciadło dynamiczne Hd=".$qualDataArray[0]['SQD_VAL_HD']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_HD']."]."; +} +// ========================================================================================================================================= +// analiza elektryczna +// ========================================================================================================================================= +$isInfoENERGETIC = false; +if (!empty($qualDataArray) && ( + $qualDataArray[0]['SQD_FLG_I']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_U']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_CF']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_PE']!='CORRECT' + + || $qualDataArray[0]['SQD_VAL_I']<=0 + || $qualDataArray[0]['SQD_VAL_U']<=0 + || $qualDataArray[0]['SQD_VAL_CF']<=0 + || $qualDataArray[0]['SQD_VAL_CF']>=1 + || $qualDataArray[0]['SQD_VAL_PE']<=0 + + )) +{ + $isInfoENERGETIC = true; + $infoENERGETIC_text = ""; + + if ($qualDataArray[0]['SQD_FLG_I']!='CORRECT' || $qualDataArray[0]['SQD_VAL_I']<=0) + $infoENERGETIC_text .="<br/> - Pobór prądu I=".$qualDataArray[0]['SQD_VAL_I']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_I']."]."; + if ($qualDataArray[0]['SQD_FLG_U']!='CORRECT' || $qualDataArray[0]['SQD_VAL_U']<=0) + $infoENERGETIC_text .="<br/> - Napięcie zasilania U=".$qualDataArray[0]['SQD_VAL_U']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_U']."]"; + if ($qualDataArray[0]['SQD_FLG_CF']!='CORRECT' || $qualDataArray[0]['SQD_VAL_CF']<=0 || $qualDataArray[0]['SQD_VAL_CF']>=1) + $infoENERGETIC_text .="<br/> - cos(φ)=".$qualDataArray[0]['SQD_VAL_CF']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_CF']."]"; + if ($qualDataArray[0]['SQD_FLG_PE']!='CORRECT' || $qualDataArray[0]['SQD_VAL_PE']<=0) + $infoENERGETIC_text .="<br/> - Moc czynna Pe=".$qualDataArray[0]['SQD_VAL_PE']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_PE']."]"; +} +// ========================================================================================================================================= +// ========================================================================================================================================= +/* +// jeśli analiza jakości i poprawności danych przeszła poprawnie sprawdza algorytmem SoftSPM +if (!empty($qualDataArray) && !$isInfoWATER && !$isInfoENERGETIC) +{ + // ===================================================================================================================================== + // analiza hydrauliczna + // ===================================================================================================================================== + $test_Hp = (float) $qualDataArray[0]['SQD_VAL_PP'] - $qualDataArray[0]['SQD_VAL_HH']; + $test_Hps = (float) getPolynomialHp($testArray,($qualDataArray[0]['SQD_VAL_Q']/60)); //wysokość ze stacji + + + if ( + //($test_Hp < (0.8*$test_Hps) || $test_Hp > (1.08*$test_Hps)) + $test_Hp > (1.08*$test_Hps) + || (($qualDataArray[0]['SQD_VAL_P2']-1.5)>$qualDataArray[0]['SQD_VAL_P1']) + + ) + { + $isInfoWATER = true; + $infoWATER_text = ""; + $algSPM = "według algorytmu SoftSPM"; + + + //if ($test_Hp < (0.8*$test_Hps) || $test_Hp > (1.08*$test_Hps)) + //if ($qualDataArray[0]['SQD_VAL_P2']>$qualDataArray[0]['SQD_VAL_P1']) + if (($qualDataArray[0]['SQD_VAL_P2']-1.5)>$qualDataArray[0]['SQD_VAL_P1']) + $infoWATER_text .="<br/> - Ciśnienie P2>P1 ".$spacja."[SYNDIS]."; + if ($test_Hp > (1.08*$test_Hps)) + { + $infoWATER_text .="<br/> - Głębokość zabudowy pompy Lp=".$_SESSION['well_details']['LpVal']." ".$spacja."[SoftSPM]."; + $infoWATER_text .="<br/> - Ciśnienie Pp=".$qualDataArray[0]['SQD_VAL_PP']." [SYNDIS]."; + $infoWATER_text .="<br/> - Zwierciadło dynamiczne Hd=".$qualDataArray[0]['SQD_VAL_HD']." ".$spacja."[SYNDIS]."; + } + + + + + } + // ===================================================================================================================================== + + + // ===================================================================================================================================== + // analiza elektryczna + // ===================================================================================================================================== + $test_Pes = (float) getPolynomialPe_second($testArray,($qualDataArray[0]['SQD_VAL_Q']/60)); //moc ze stacji + + if ( + $qualDataArray[0]['SQD_VAL_PE'] < (0.83*$test_Pes) || $qualDataArray[0]['SQD_VAL_PE'] > (1.25*$test_Pes) + //|| ((0.92*$_SESSION['well_details']['eng_CF'])>$qualDataArray[0]['SQD_VAL_CF'] || $qualDataArray[0]['SQD_VAL_CF']>(1.07*$_SESSION['well_details']['eng_CF'])) + //|| ((0.93*$_SESSION['well_details']['eng_U']) > $qualDataArray[0]['SQD_VAL_U'] || $qualDataArray[0]['SQD_VAL_U']>(1.08*$_SESSION['well_details']['eng_U'])) + //|| ((0.85*$_SESSION['well_details']['eng_I']) > $qualDataArray[0]['SQD_VAL_I'] || $qualDataArray[0]['SQD_VAL_I']>(1.15*$_SESSION['well_details']['eng_I'])) + ) + { + $isInfoENERGETIC = true; + $infoENERGETIC_text = ""; + $algSPM = "według algorytmu SoftSPM"; + + if ($qualDataArray[0]['SQD_VAL_PE'] < (0.83*$test_Pes) || $qualDataArray[0]['SQD_VAL_PE'] > (1.25*$test_Pes)) + $infoENERGETIC_text .="<br/> - Moc czynna Pe=".$qualDataArray[0]['SQD_VAL_PE']." ".$spacja."[SYNDIS]"; +// if ((0.92*$_SESSION['well_details']['eng_CF'])>$qualDataArray[0]['SQD_VAL_CF'] || $qualDataArray[0]['SQD_VAL_CF']>(1.07*$_SESSION['well_details']['eng_CF'])) +// $infoENERGETIC_text .="<br/> - cos(φ)=".$qualDataArray[0]['SQD_VAL_CF']." ".$spacja."[SYNDIS]"; +// if ((0.93*$_SESSION['well_details']['eng_U']) > $qualDataArray[0]['SQD_VAL_U'] || $qualDataArray[0]['SQD_VAL_U']>(1.08*$_SESSION['well_details']['eng_U'])) +// $infoENERGETIC_text .="<br/> - Napięcie zasilania U=".$qualDataArray[0]['SQD_VAL_U']." ".$spacja."[SYNDIS]"; +// if ((0.85*$_SESSION['well_details']['eng_I']) > $qualDataArray[0]['SQD_VAL_I'] || $qualDataArray[0]['SQD_VAL_I']>(1.15*$_SESSION['well_details']['eng_I'])) +// $infoENERGETIC_text .="<br/> - Pobór prądu I=".$qualDataArray[0]['SQD_VAL_I']." ".$spacja."[SYNDIS]"; + } + // ===================================================================================================================================== +} +// ========================================================================================================================================= +*/ + +if ($isInfoWATER) + echo "<div class='infoWATER'>Parametry hydrauliczne lub techniczne wymagające analizy ".$algSPM.":".$infoWATER_text."</div>"; + +if ($isInfoENERGETIC) + echo "<div class='infoENERGETIC'>Parametry elektryczne wymagające analizy ".$algSPM.":".$infoENERGETIC_text."</div>"; + +if ($isInfoWATER || $isInfoENERGETIC) + echo "<div class='actionERROR'>Brak oceny!</div>"; + + + +if ($qualDataArray[0]['SQD_VAL_ONOFF']==0 || $isInfoWATER || $isInfoENERGETIC) +{ + if (file_exists( $fileName0)) unlink($fileName0); + pumpImageGreyBell($fileName0); +} + + + + + +// ========================================================================================================================================= +} +?> + + + + + + + + +<?php +// pobieranie aktualnych danych +if ($_GET['data']=='refresh') +{ + + $refreshTime=15; + echo"<meta http-equiv='refresh' content='".$refreshTime.";url=./?pg=site401mark&dev=".$_GET['dev']."'>"; + ?> + <div class="tag100"> + <div class="head_tag">Pobór aktualnych danych dla <?php echo $_SESSION['well_details']['wellName']; ?> – proszę czekać.</div> + <div class="tag_center"></br> + <progress id="progressBar" value="0" max="100"></progress> + <span id="status"></span> + <h1 id="finalMessage"></h1> + <script type="text/javascript" language="javascript"> + function progressBarSim(al) { + var bar = document.getElementById('progressBar'); + var status = document.getElementById('status'); + status.innerHTML = al+"%"; + bar.value = al; + al++; + var sim = setTimeout("progressBarSim("+al+")",<?php echo $refreshTime*10; ?> ); + if(al == 100){ + status.innerHTML = "100%"; + bar.value = 100; + clearTimeout(sim); + //var finalMessage = document.getElementById('finalMessage'); + //finalMessage.innerHTML = "Process is complete"; + } + } + var amountLoaded = 0; + progressBarSim(amountLoaded); + </script></br> + </div> + </div> + + <script src="./bootstrap.min.js"></script> + <script> + + + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_getdata4well.php", { post_action: "ajax", done: "insert", well_name: "<?php echo $_SESSION['well_details']['wellName'];?>"}).done(function(data) + { + + } + ); + }); + + </script> + + + + <?php +} +?> + + + + + + + + + + + + <div class="tag50_left"> + + <div class="head_tag"><?php echo $lab_Tag_site301_004." - ".$_SESSION['well_details']['wellName'];?></div> + <div class="tag_center"> + <a href="?pg=site401inf&dev=<?php echo $_GET['dev']?>"><img SRC="<?php echo $fileName; ?>" border="0"></a> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site401_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_005; ?></TD> + <TD class="<?php echo $Evaluation4_q['grid_style']; ?>"><?php echo $Evaluation4_q['grid_text']; ?></TD> + <TD CLASS="desc_value" style="max-width: 40px; text-align: center;" rowspan="4"> + <a href="?pg=site401mhis&dev=<?php echo$_GET['dev']; ?>"><img SRC="<?php echo $fileName0; ?>" border="0"></a> + </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_009; ?></TD> + <TD class="<?php echo $Evaluation4_HfQ['grid_style']; ?>"><?php echo $Evaluation4_HfQ['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_012; ?></TD> + <TD class="<?php echo $Evaluation4_Throt['grid_style']; ?>"><?php echo $Evaluation4_Throt['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_015; ?></TD> + <TD class="<?php echo $Evaluation4_LineLoss['grid_style']; ?>"><?php echo $Evaluation4_LineLoss['grid_text']; ?></TD> + </TR> + </table> + </div> + + </div> + + + + +<div class="tag50_right"> + + + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0 && ($_SESSION['well_details']['wellTypeID']==18 || $_SESSION['well_details']['wellTypeID']==19)) + echo"<a href='?pg=site401lift&t=".$_SESSION['well_details']['testID']."&d=".$_SESSION['well_details']['devID']."&q=".$qParam."'><img SRC=$fileName1></a>"; + elseif ($_SESSION['well_details']['testID']>0 && $_SESSION['well_details']['wellTypeID']==20) + echo"<img SRC=$fileName1>"; + else + echo $lab_Field_site203_017; + ?> + + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_005 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0) + echo"<img SRC=$fileName2>"; + else + echo $lab_Field_site203_017; + ?> + </div> + + +<?php +//$workStatusArray = sqlGetResAsArray("select DRD_VALUE,DRD_DESCRIPTION,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=DRD_DESCRIPTION limit 1) DRD_DESC from seg_dev_resources_det where DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID'].") and DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID']." limit 1"); +//$well_work_status = getLastValueFromDevResourceDetail('WELL_STATUSES','ON_OFF',$_SESSION['well_details']['devID']); + + +if ($workStatusArray[0]['DRD_VALUE']=="ON") +{ + $imgONOFF_g = "./images/green_ONOFF_ON.png"; + $imgONOFF_r = "./images/red_ONOFF.png"; + $stringONOFF = "Stan pracy - Załączona"; + + if (!empty($_SESSION['site401_well_onoff']) && $_SESSION['well_details']['wellTypeID']==20) + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=off"><img style="padding: 9px;" src="./images/red_ONOFF.png" title="Wyłącz pompe"></a> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <img style="padding: 9px;" src="./images/red_ONOFF.png"> + '; +} +else +{ + $imgONOFF_g = "./images/green_ONOFF.png"; + $imgONOFF_r = "./images/red_ONOFF_OFF.png"; + $stringONOFF = "Stan pracy - Wyłączona"; + + if (!empty($_SESSION['site401_well_onoff']) && $_SESSION['well_details']['wellTypeID']==20) + $btmAcction = ' + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=on"><img style="padding: 9px;" src="./images/green_ONOFF.png" title="Załącz pompe"></a> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF.png"> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; +} + +?> + + <div class="head_tag"><?php echo $stringONOFF ;?> [<?php echo $workStatusArray[0]['DRD_AUDIT_DATE'];?>]</div> + <div class="tag_center"> + <?php echo $btmAcction; ?> + <?php + if ($workStatusArray[0]['DRD_DESCRIPTION']>0) + echo"<br/>Powód: <i><b><a style='text-decoration: none;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>".setDicName($workStatusArray[0]['DRD_DESCRIPTION'])."</a></b></i>"; + elseif ($workStatusArray[0]['DRD_VALUE']!="ON" && empty($workStatusArray[0]['DRD_DESCRIPTION'])) + echo"<br/><a style='text-decoration: none; color: #ff0000;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>Kliknij, aby wprowadzić przyczynę wyłączenia</a>"; + + ?> + </div> + + <div class=tag_ChemicalButtons> + <a href='?pg=site401inf&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Parametry pracy układu'></A> + + <?php if ($_SESSION['well_details']['wellTypeID']!=20): ?> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401mark&dev=<?php echo $_SESSION['well_details']['devID'];?>&data=refresh'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Pobierz aktualne dane'></A> + <?php endif; ?> + + </div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/backup/site404.php b/sites/backup/site404.php new file mode 100644 index 0000000..94365e7 --- /dev/null +++ b/sites/backup/site404.php @@ -0,0 +1,164 @@ +<?php +if (!empty($_SESSION['site404'])) +{ + + //if (empty($_POST['wydz'])) $_POST['wydz']=sqlStringValue("select URG_DESC from sys_users_regions where URG_USR_ID=".$_SESSION['user_id']." limit 1","URG_DESC"); + if (empty($_POST['wydz'])) $_POST['wydz']=$_SESSION['eq_stock_param3_1'] + +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site404_input'] = $_POST['sr_well']; + ?> + + + <form action="./?pg=site404&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Piezometr:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site404_input'];?>"></td> + <td style="width: 10px;"></td> + <td>wydział:</td> + <td style="width: 5px;"></td> + <td> + <select name="wydz"> + <?php + if (!empty($_SESSION['eq_stock_param3_1'])) + { + echo"<option value='".$_SESSION['eq_stock_param3_1']."'>".$_SESSION['eq_stock_param3_1']."</option>"; + } + else + { + $wynik = mysql_query("select URG_DESC from sys_users_regions where URG_USR_ID=".$_SESSION['user_id']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resW=$r["URG_DESC"]; + + if ($_POST['wydz']==$resW) + echo"<option value='$resW' selected>$resW</option>"; + else + echo"<option value='$resW'>$resW</option>"; + } + } + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + Pokaż wszystkie</td> + </tr> + </table> + </div> + </form> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site309_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_014 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_006 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_007 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_007 ;?></TD> + + </TR> + + <?php + + if (empty($_SESSION['site404_array']) || $_POST['sub_search']=='Szukaj') + { + $query="select DRS_ID,SRP_ID,SRP_NAME,SOD_UJ,SOD_DESC from seg_dev_resources left join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID left join seg_object_def on SOD_NAME=SRP_NAME where DRS_DEV_TYPE=601 and DRS_STATUS_DIC_ID=7 and SRP_NAME like '%".$_POST['sr_well']."%' and SOD_PLC='".$_POST['wydz']."'"; + $query .= " order by SRP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $hst = getLastValueFromDevResourceDetail("WELL_PARAMETERS","HSTM",$r["DRS_ID"]); + if (empty($hst)) $hst = $lab_Field_site404_001; + else $hst=str_replace('.',',',round($hst,2)); + + $res[]=array( + 'id' => $r["SRP_ID"], + 'name' => $r["SRP_NAME"], + 'dev_id' => $r["DRS_ID"], + 'hstm' => $hst,//,round(getLastValueFromDevResourceDetail("WELL_PARAMETERS","HSTM",$r["DRS_ID"]),2), + 'depth' => round(getLastValueFromDevResourceDetail("DEV_RESOURCES_DETAIL","DEPTH",$r["DRS_ID"]),2), + 'desc' => $r["SOD_DESC"], + 'bariera' => $r["SOD_UJ"] + ); + + } + unset($_SESSION['site404_array']); + $_SESSION['site404_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site404_array'])) $stop=count($_SESSION['site404_array']); + + for($i=$start;$i<$stop;$i++) + { + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site404inf&dev=".$_SESSION['site404_array'][$i]['dev_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site404_array'][$i]['name']."</TD> + <TD class='field_left'>".$_SESSION['site404_array'][$i]['bariera']."</TD> + <TD class='field_center'>".$_SESSION['site404_array'][$i]['hstm']."</TD> + <TD class='field_center'>".$_SESSION['site404_array'][$i]['depth']."</TD> + <TD class='field_center'>".$_SESSION['site404_array'][$i]['desc']."</TD> + </TR> + "; + } + ?> + </table> + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site404_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site404_array'])>20) + echo pagination_grid('?pg=site404', $_GET['pgn'], count($_SESSION['site404_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="/export/site404_xls.php" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="/export/site404_pdf.php" title="Export do PDF"><img src="/images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="/export/site404_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + </div> + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/backup/site809.php b/sites/backup/site809.php new file mode 100644 index 0000000..8634c4f --- /dev/null +++ b/sites/backup/site809.php @@ -0,0 +1,1410 @@ +<?php +if (!empty($_SESSION['site809'])) +{ +?> + + <script> + $(function() {$( "#data_01" ).datepicker({changeMonth: true,changeYear: true});}); + $(function() {$( "#data_02" ).datepicker({changeMonth: true,changeYear: true});}); + $(function() {$( "#data_03" ).datepicker({changeMonth: true,changeYear: true});}); + $(function() {$( "#data_04" ).datepicker({changeMonth: true,changeYear: true});}); + $(function() {$( "#data_05" ).datepicker({changeMonth: true,changeYear: true});}); + $(function() {$( "#data_06" ).datepicker({changeMonth: true,changeYear: true});}); + $(function() {$( "#data_07" ).datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <div id='loader-wrapper'><div id='loader'></div></div> + + <?php + delSearchSessionData(); + ?> + + <?php + // raport 001 + // ============================================================================================================ + if ($_POST['subRap001']=='Generuj' && $_GET['rap']=='001' && strlen($_POST['inRap001'])>9) + { + $rap_001xls = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap001.xlsx"; + $rap_001pdf = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap001.pdf"; + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); + require_once './PHPExcel.php'; + require_once('./fpdf/fpdf.php'); + + class PDF extends FPDF + { + function Header() + { + $this -> SetFont('arial_ce', 'I', 10); + $title = iconv('utf-8','windows-1250','PGE GiEK S.A. o/KWB Bełchatów'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $title = iconv('utf-8','windows-1250','Oddział Odwodnienia '.$_SESSION['syndis_eq_stock']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + $this -> SetFont('arial_ce', 'B', 9); + $title = iconv('utf-8','windows-1250','Wykaz energochłonności dla studni ['.$_POST['inRap001'].', godz. '.$_POST['inRap001_hour'].']'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + + $this->SetLineWidth(.1); + $this->SetFont('arial_ce', 'B', 8); + $this->Cell(15,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(30,7,iconv('utf-8','windows-1250','Energochłonność'),1,0,'C'); + $this->Cell(40,7,iconv('utf-8','windows-1250','Opis'),1,0,'C'); + $this->Cell(40,7,iconv('utf-8','windows-1250','Status'),1,0,'C'); + $this->Cell(30,7,iconv('utf-8','windows-1250','Data'),1,0,'C'); + $this->Ln(); + + } + function Footer() + { + $this->SetY(-15); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Data wydruku: '.date('Y-m-d'),0,0,'L'); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,1,'R'); + } + } + + $pdf = new PDF(); + $pdf->AddFont('arial_ce','','arial_ce.php'); + $pdf->AddFont('arial_ce','I','arial_ce_i.php'); + $pdf->AddFont('arial_ce','B','arial_ce_b.php'); + $pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + + + $styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + + $objPHPExcel = new PHPExcel(); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:G1'); + $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A1:G1')->applyFromArray($styleArray); + $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz energochłonności dla studni ['.$_POST['inRap001'].']'); + + // nagłówki + // =========================================================================== + $objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); + $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); + $objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Bariera'); + $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Energochłonność'); + $objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Opis'); + $objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Oddział'); + $objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Data'); + // =========================================================================== + $pdf->AliasNbPages(); + $pdf->AddPage(); + + + + // =========================================================================== + // =========================================================================== + + $i=0;$res=null; + $pdf -> SetFont('arial_ce', '', 7); + //$wynik = mysql_query("select SOD_UJ,WLL_NAME,RDD_VALUE,SOD_DESC,SOD_PLC,RDD_AUDIT_DATE from rep_dev_details INNER join seg_dev_resources on DRS_ID=RDD_DRS_ID left join seg_wells on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 left join seg_object_def on SOD_NAME=WLL_NAME where RDD_AUDIT_DATE>'".$_POST['inRap001_from']." 00:00:00' and RDD_AUDIT_DATE<'".$_POST['inRap001_to']." 23:59:59' and SOD_PLC='".$_SESSION['syndis_eq_stock']."'"); + $wynik = mysql_query("select WLL_NAME,WLL_BARIERA,WLL_SYS_TYPE,WLL_STAT_DESC,RDD_VALUE,RDD_AUDIT_DATE from rep_dev_details,seg_dev_resources left join seg_wells on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where RDD_DRS_ID=DRS_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and RDD_AUDIT_DATE>='".$_POST['inRap001']." ".$_POST['inRap001_hour'].":00:00' and RDD_AUDIT_DATE<'".$_POST['inRap001']." ".$_POST['inRap001_hour'].":59:59' order by WLL_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($r['RDD_VALUE']=='R') $engTmp = 'Czerwony'; + else if ($r['RDD_VALUE']=='Y') $engTmp = 'Żółty'; + else if ($r['RDD_VALUE']=='G') $engTmp = 'Zielony'; + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $r['WLL_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $r['WLL_BARIERA']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $engTmp); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $r['WLL_SYS_TYPE']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $r['WLL_STAT_DESC']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $r['RDD_AUDIT_DATE']); + + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$r['WLL_NAME']),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$r['WLL_BARIERA']),1,0,'C'); + $pdf->Cell(30,7,iconv('utf-8','windows-1250',$engTmp),1,0,'C'); + $pdf->Cell(40,7,iconv('utf-8','windows-1250',$r['WLL_SYS_TYPE']),1,0,'C'); + $pdf->Cell(40,7,iconv('utf-8','windows-1250',$r['WLL_STAT_DESC']),1,0,'C'); + $pdf->Cell(30,7,iconv('utf-8','windows-1250',$r['RDD_AUDIT_DATE']),1,0,'C'); + $pdf->Ln(); + + $res[]=array( + 'a' => $r['WLL_NAME'], + 'b' => $r['WLL_BARIERA'], + 'c' => $engTmp, + 'd' => $r['WLL_SYS_TYPE'], + 'e' => $r['WLL_STAT_DESC'], + 'f' => $r['RDD_AUDIT_DATE'] + ); + + $i++; + } + unset($_SESSION['site809_rap001']); + $_SESSION['site809_rap001']=$res; + + + $objPHPExcel->getActiveSheet()->setTitle('Wykaz energochłonności'); + $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save($rap_001xls); + unset($objPHPExcel); + + + $pdf->Output($rap_001pdf); + + } + // ============================================================================================================ + // ============================================================================================================ + + // raport 002 + // ============================================================================================================ + if ($_POST['subRap002']=='Generuj' && $_GET['rap']=='002') + { + $rap_002xls = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap002.xlsx"; + $rap_002pdf = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap002.pdf"; + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); + require_once './PHPExcel.php'; + require_once('./fpdf/fpdf.php'); + + class PDF extends FPDF + { + function Header() + { + $this -> SetFont('arial_ce', 'I', 10); + $title = iconv('utf-8','windows-1250','PGE GiEK S.A. o/KWB Bełchatów'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $title = iconv('utf-8','windows-1250','Oddział Odwodnienia '.$_SESSION['syndis_eq_stock']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + $this -> SetFont('arial_ce', 'B', 9); + $title = iconv('utf-8','windows-1250','Łączna ilość agregatów pompowych zabudowanych w studniach'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 8); + $this->Cell(12,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(12,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Typ pompy'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Nr pompy'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Typ silnika'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Nr silnika'),1,0,'C'); + $this->Cell(36,7,iconv('utf-8','windows-1250','Opis'),1,0,'C'); + $this->Cell(30,7,iconv('utf-8','windows-1250','Oddział'),1,0,'C'); + $this->Ln(); + + } + function Footer() + { + $this->SetY(-15); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Data wydruku: '.date('Y-m-d'),0,0,'L'); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,1,'R'); + } + } + + $pdf = new PDF(); + $pdf->AddFont('arial_ce','','arial_ce.php'); + $pdf->AddFont('arial_ce','I','arial_ce_i.php'); + $pdf->AddFont('arial_ce','B','arial_ce_b.php'); + $pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + + + $styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + + $objPHPExcel = new PHPExcel(); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:I1'); + $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A1:I1')->applyFromArray($styleArray); + $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Łączna ilość agregatów pompowych zabudowanych w studniach'); + + // nagłówki + // =========================================================================== + $objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); + $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); + $objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Bariera'); + $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Typ pompy'); + $objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Nr pompy'); + $objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Typ silnika'); + $objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Nr silnika'); + $objPHPExcel->getActiveSheet()->SetCellValue('H2', 'Opis'); + $objPHPExcel->getActiveSheet()->SetCellValue('I2', 'Oddział'); + // =========================================================================== + $pdf->AliasNbPages(); + $pdf->AddPage(); + + + + // =========================================================================== + // =========================================================================== + + + + $i=0;$res=null; + $pdf -> SetFont('arial_ce', '', 7); + $wynik = mysql_query("select WLL_NAME,SOD_UJ,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID,SOD_DESC,SOD_PLC from seg_well_pump_eng_rel INNER join seg_wells on WLL_ID=RWL_WLL_ID left join seg_object_def on WLL_NAME=SOD_NAME where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + unset($qtmpP); + $qtmpP = sqlGetResAsArray("select PUP_NAME,DRS_SN_NUMBER from seg_dev_resources,seg_pumps where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and DRS_ID=".$r['RWL_PUP_DRS_ID']." limit 1"); + unset($qtmpE); + $qtmpE = sqlGetResAsArray("select ENG_NAME,DRS_SN_NUMBER from seg_dev_resources,seg_engines where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and DRS_ID=".$r['RWL_ENG_DRS_ID']." limit 1"); + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $r['WLL_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $r['SOD_UJ']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $qtmpP[0]['PUP_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $qtmpP[0]['DRS_SN_NUMBER']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), $qtmpE[0]['ENG_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $qtmpE[0]['DRS_SN_NUMBER']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $r['SOD_DESC']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($i+3), $r['SOD_PLC']); + + $pdf->Cell(12,7,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$r['WLL_NAME']),1,0,'C'); + $pdf->Cell(12,7,iconv('utf-8','windows-1250',$r['SOD_UJ']),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$qtmpP[0]['PUP_NAME']),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$qtmpP[0]['DRS_SN_NUMBER']),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$qtmpE[0]['ENG_NAME']),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$qtmpE[0]['DRS_SN_NUMBER']),1,0,'C'); + $pdf->Cell(36,7,iconv('utf-8','windows-1250',$r['SOD_DESC']),1,0,'C'); + $pdf->Cell(30,7,iconv('utf-8','windows-1250',$r['SOD_PLC']),1,0,'C'); + $pdf->Ln(); + + $res[]=array( + 'a' => $r['WLL_NAME'], + 'b' => $r['SOD_UJ'], + 'c' => $qtmpP[0]['PUP_NAME'], + 'd' => $qtmpP[0]['DRS_SN_NUMBER'], + 'e' => $qtmpE[0]['ENG_NAME'], + 'f' => $qtmpE[0]['DRS_SN_NUMBER'], + 'g' => $r['SOD_DESC'], + 'h' => $r['SOD_PLC'] + ); + + $i++; + } + unset($_SESSION['site809_rap002']); + $_SESSION['site809_rap002']=$res; + + + $objPHPExcel->getActiveSheet()->setTitle('Wykaz energochłonności'); + $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save($rap_002xls); + unset($objPHPExcel); + + + $pdf->Output($rap_002pdf); + + } + // ============================================================================================================ + // ============================================================================================================ + + // raport 003 + // ============================================================================================================ + if ($_POST['subRap003']=='Generuj' && $_GET['rap']=='003' && strlen($_POST['inRap003'])>9) + { + $rap_003xls = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap003.xlsx"; + $rap_003pdf = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap003.pdf"; + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); + require_once './PHPExcel.php'; + require_once('./fpdf/fpdf.php'); + + class PDF extends FPDF + { + function Header() + { + $this -> SetFont('arial_ce', 'I', 10); + $title = iconv('utf-8','windows-1250','PGE GiEK S.A. o/KWB Bełchatów'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $title = iconv('utf-8','windows-1250','Oddział Odwodnienia '.$_SESSION['syndis_eq_stock']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + $this -> SetFont('arial_ce', 'B', 9); + $title = iconv('utf-8','windows-1250','Parametry pracy studni i układu pompowego ['.$_POST['inRap003'].', godz. '.$_POST['inRap003_hour'].']'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 8); + $this->Cell(11,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(11,7,iconv('utf-8','windows-1250','Hst'),1,0,'C'); + $this->Cell(11,7,iconv('utf-8','windows-1250','Hd'),1,0,'C'); + $this->Cell(12,7,iconv('utf-8','windows-1250','Q'),1,0,'C'); + $this->Cell(10,7,iconv('utf-8','windows-1250','p1'),1,0,'C'); + $this->Cell(10,7,iconv('utf-8','windows-1250','p2'),1,0,'C'); + $this->Cell(10,7,iconv('utf-8','windows-1250','I'),1,0,'C'); + $this->Cell(12,7,iconv('utf-8','windows-1250','U'),1,0,'C'); + $this->Cell(11,7,iconv('utf-8','windows-1250','Pe'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Czas'),1,0,'C'); + $this->Cell(12,7,iconv('utf-8','windows-1250','Dgn.'),1,0,'C'); + $this->Cell(30,7,iconv('utf-8','windows-1250','Data'),1,0,'C'); + $this->Ln(); + + + } + function Footer() + { + $this->SetY(-15); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Data wydruku: '.date('Y-m-d'),0,0,'L'); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,1,'R'); + } + } + + $pdf = new PDF(); + $pdf->AddFont('arial_ce','','arial_ce.php'); + $pdf->AddFont('arial_ce','I','arial_ce_i.php'); + $pdf->AddFont('arial_ce','B','arial_ce_b.php'); + $pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + + + $styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + + $objPHPExcel = new PHPExcel(); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:O1'); + $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A1:O1')->applyFromArray($styleArray); + $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Parametry pracy studni i układu pompowego ['.$_POST['inRap003_from'].' - '.$_POST['inRap003_to'].']'); + + // nagłówki + // =========================================================================== + $objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); + $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); + $objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Bariera'); + $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Hst'); + $objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Hd'); + $objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Q[m3/min]'); + $objPHPExcel->getActiveSheet()->SetCellValue('G2', 'p1'); + $objPHPExcel->getActiveSheet()->SetCellValue('H2', 'p2'); + $objPHPExcel->getActiveSheet()->SetCellValue('I2', 'I'); + $objPHPExcel->getActiveSheet()->SetCellValue('J2', 'U'); + $objPHPExcel->getActiveSheet()->SetCellValue('K2', 'Pe [kW]'); + $objPHPExcel->getActiveSheet()->SetCellValue('L2', 'Czas pracy agregatu [h]'); + $objPHPExcel->getActiveSheet()->SetCellValue('M2', 'Diagnostyka'); + $objPHPExcel->getActiveSheet()->SetCellValue('N2', 'Oddział'); + $objPHPExcel->getActiveSheet()->SetCellValue('O2', 'Data'); + // =========================================================================== + $pdf->AliasNbPages(); + $pdf->AddPage(); + + + + // =========================================================================== + // =========================================================================== + + $i=0;$res=null; + $pdf -> SetFont('arial_ce', '', 7); + $wynik = mysql_query("select RHD_DRS_ID,WLL_NAME,SOD_UJ,RHD_DATE,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_DGN_VAL,RHD_WORK_TIME_VAL,SOD_DESC,SOD_PLC from rep_his_data_everyday,rep_object_departments where DRS_ID=RHD_DRS_ID and SOD_PLC='".$_SESSION['syndis_eq_stock']."' and RHD_DATE>='".$_POST['inRap003']." ".$_POST['inRap003_hour'].":00:00' and RHD_DATE<'".$_POST['inRap003']." ".$_POST['inRap003_hour'].":59:59' order by SOD_UJ,WLL_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + //unset($qtmp); + //$qtmp = sqlGetResAsArray("select max(case WHEN DRD_RESOURCES_DETAIL=265 then DRD_VALUE end) PB_ENG,max(case WHEN DRD_RESOURCES_DETAIL=230 then DRD_VALUE end) IL_WOD,max(case WHEN DRD_RESOURCES_DETAIL=721 then DRD_VALUE end) ZU_ENG from seg_dev_resources_det where DRD_DRS_ID=".$r['RHD_DRS_ID']." and DRD_AUDIT_DATE like '".substr($r['RHD_DATE'],0,14)."%' union select max(case WHEN DRD_RESOURCES_DETAIL=265 then DRD_VALUE end) PB_ENG,max(case WHEN DRD_RESOURCES_DETAIL=230 then DRD_VALUE end) IL_WOD,max(case WHEN DRD_RESOURCES_DETAIL=721 then DRD_VALUE end) ZU_ENG from seg_dev_resources_det_his where DRD_DRS_ID=".$r['RHD_DRS_ID']." and DRD_AUDIT_DATE like '".substr($r['RHD_DATE'],0,14)."%'"); + //select max(case WHEN DRD_RESOURCES_DETAIL=265 then DRD_VALUE end) PB_ENG,max(case WHEN DRD_RESOURCES_DETAIL=230 then DRD_VALUE end) IL_WOD,max(case WHEN DRD_RESOURCES_DETAIL=721 then DRD_VALUE end) ZU_ENG from seg_dev_resources_det where DRD_DRS_ID=3143 and DRD_AUDIT_DATE like '2015-10-13 13:%' union select max(case WHEN DRD_RESOURCES_DETAIL=265 then DRD_VALUE end) PB_ENG,max(case WHEN DRD_RESOURCES_DETAIL=230 then DRD_VALUE end) IL_WOD,max(case WHEN DRD_RESOURCES_DETAIL=721 then DRD_VALUE end) ZU_ENG from seg_dev_resources_det_his where DRD_DRS_ID=3143 and DRD_AUDIT_DATE like '2015-10-13 13:%' + if ($r['RHD_DGN_VAL']==0) $dgn="OK"; + else $dgn="ERR"; + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($i+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($i+3), $r['WLL_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($i+3), $r['SOD_UJ']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($i+3), $r['RHD_HST_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($i+3), $r['RHD_HD_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($i+3), round($r['RHD_Q_VAL']/60,3)); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($i+3), $r['RHD_P1_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($i+3), $r['RHD_P2_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($i+3), $r['RHD_I_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($i+3), $r['RHD_U_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($i+3), $r['RHD_PE_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($i+3), $r['RHD_WORK_TIME_VAL']); + $objPHPExcel->getActiveSheet()->SetCellValue('M'.($i+3), $dgn); + $objPHPExcel->getActiveSheet()->SetCellValue('N'.($i+3), $r['SOD_PLC']); + $objPHPExcel->getActiveSheet()->SetCellValue('O'.($i+3), $r['RHD_DATE']); + + $pdf->Cell(11,7,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250',$r['WLL_NAME']),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$r['SOD_UJ']),1,0,'C'); + $pdf->Cell(11,7,iconv('utf-8','windows-1250',$r['RHD_HST_VAL']),1,0,'C'); + $pdf->Cell(11,7,iconv('utf-8','windows-1250',$r['RHD_HD_VAL']),1,0,'C'); + $pdf->Cell(12,7,iconv('utf-8','windows-1250',round($r['RHD_Q_VAL']/60,3)),1,0,'C'); + $pdf->Cell(10,7,iconv('utf-8','windows-1250',$r['RHD_P1_VAL']),1,0,'C'); + $pdf->Cell(10,7,iconv('utf-8','windows-1250',$r['RHD_P2_VAL']),1,0,'C'); + $pdf->Cell(10,7,iconv('utf-8','windows-1250',$r['RHD_I_VAL']),1,0,'C'); + $pdf->Cell(12,7,iconv('utf-8','windows-1250',$r['RHD_U_VAL']),1,0,'C'); + $pdf->Cell(11,7,iconv('utf-8','windows-1250',$r['RHD_PE_VAL']),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250',$r['RHD_WORK_TIME_VAL']),1,0,'C'); + $pdf->Cell(12,7,iconv('utf-8','windows-1250',$dgn),1,0,'C'); + $pdf->Cell(30,7,iconv('utf-8','windows-1250',$r['RHD_DATE']),1,0,'C'); + $pdf->Ln(); + + // ,,,,,,,,,,SOD_DESC,SOD_PLC + + + $res[]=array( + 'a' => $r['WLL_NAME'], + 'b' => $r['SOD_UJ'], + 'c' => $r['RHD_HST_VAL'], + 'd' => $r['RHD_HD_VAL'], + 'e' => round($r['RHD_Q_VAL']/60,3), + 'f' => $r['RHD_P1_VAL'], + 'g' => $r['RHD_P2_VAL'], + 'h' => $r['RHD_I_VAL'], + 'i' => $r['RHD_U_VAL'], + 'j' => $r['RHD_PE_VAL'], + 'k' => $r['RHD_WORK_TIME_VAL'], + 'l' => $dgn, + 'm' => $r['RHD_DATE'] + ); + $i++; + } + unset($_SESSION['site809_rap003']); + $_SESSION['site809_rap003']=$res; + + + $objPHPExcel->getActiveSheet()->setTitle('Parametry pracy'); + $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save($rap_003xls); + unset($objPHPExcel); + + + $pdf->Output($rap_003pdf); + + } + // ============================================================================================================ + // ============================================================================================================ + + // raport 004 + // ============================================================================================================ + if ($_POST['subRap004']=='Generuj' && $_GET['rap']=='004' && strlen($_POST['inRap004_from'])>9 && strlen($_POST['inRap004_to'])>9) + { + $rap_004xls = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap004.xlsx"; + $rap_004pdf = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap004.pdf"; + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); + require_once './PHPExcel.php'; + require_once('./fpdf/fpdf.php'); + + class PDF extends FPDF + { + function Header() + { + $this -> SetFont('arial_ce', 'I', 10); + $title = iconv('utf-8','windows-1250','PGE GiEK S.A. o/KWB Bełchatów'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $title = iconv('utf-8','windows-1250','Oddział Odwodnienia '.$_SESSION['syndis_eq_stock']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + + $this -> SetFont('arial_ce', 'B', 9); + $title = iconv('utf-8','windows-1250','Wykaz pracy studni'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $this -> SetFont('arial_ce', 'I', 8); + $title = iconv('utf-8','windows-1250','Okres obliczeniowy: '.$_POST['inRap004_from'].' - '.$_POST['inRap004_to']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + + $this->SetLineWidth(.1); + $this ->SetFont('arial_ce', 'B', 7); + $this->Cell(10,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(17,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(35,7,iconv('utf-8','windows-1250','Typ'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Pompa'),1,0,'C'); + $this->Cell(18,7,iconv('utf-8','windows-1250','Silnik'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Qśr [m3/min]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Tp [h]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','V [m3]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Hd [m]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Hst [m]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Tw [C]'),1,0,'C'); + $this->Ln(); + + + + } + function Footer() + { + $this->SetY(-15); + $this->SetFont('Arial','I',7); + $this->Cell(95,10,'Data wydruku: '.date('Y-m-d'),0,0,'L'); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,1,'R'); + } + + function Label() + { + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 7); + $this->Cell(10,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(17,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(35,7,iconv('utf-8','windows-1250','Typ'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Pompa'),1,0,'C'); + $this->Cell(18,7,iconv('utf-8','windows-1250','Silnik'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Qśr [m3/min]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Tp [h]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','V [m3]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Hd [m]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Hst [m]'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Tw [C]'),1,0,'C'); + $this->Ln(); + } + + } + + $pdf = new PDF(); + $pdf->AddFont('arial_ce','','arial_ce.php'); + $pdf->AddFont('arial_ce','I','arial_ce_i.php'); + $pdf->AddFont('arial_ce','B','arial_ce_b.php'); + $pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + + + $styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + $styleBarier = array( + 'font' => array( + 'bold' => true, + 'size' => 12 + )); + + $objPHPExcel = new PHPExcel(); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:M1'); + $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->applyFromArray($styleArray); + $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Parametry pracy studni i układu pompowego ['.$_POST['inRap004_from'].' - '.$_POST['inRap004_to'].']'); + + // nagłówki + // =========================================================================== + $objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); + $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); + $objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Typ'); + $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Pompa'); + $objPHPExcel->getActiveSheet()->SetCellValue('E2', 'Qn [m3/min]'); + $objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Silnik'); + $objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Moc [kW]'); + + $objPHPExcel->getActiveSheet()->SetCellValue('H2', 'Qśr [m3/min]'); + $objPHPExcel->getActiveSheet()->SetCellValue('I2', 'Tp [h]'); + $objPHPExcel->getActiveSheet()->SetCellValue('J2', 'V [m3]'); + $objPHPExcel->getActiveSheet()->SetCellValue('K2', 'Hd [m]'); + $objPHPExcel->getActiveSheet()->SetCellValue('L2', 'Hst [m]'); + $objPHPExcel->getActiveSheet()->SetCellValue('M2', 'Tw [C]'); + // =========================================================================== + $pdf->AliasNbPages(); + $pdf->AddPage(); + + + /* + $pdf->SetLineWidth(.1); + $pdf -> SetFont('arial_ce', 'B', 8); + $pdf->Cell(12,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $pdf->Cell(30,7,iconv('utf-8','windows-1250','Typ'),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250','Pompa'),1,0,'C'); + $pdf->Cell(18,7,iconv('utf-8','windows-1250','Silnik'),1,0,'C'); + $pdf->Cell(20,7,iconv('utf-8','windows-1250','Qśr [m3/min]'),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250','Tp [h]'),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250','V [m3]'),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250','Hd [m]'),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250','Hst [m]'),1,0,'C'); + $pdf->Cell(15,7,iconv('utf-8','windows-1250','Tw [C]'),1,0,'C'); + $pdf->Ln(); + */ + // =========================================================================== + // =========================================================================== + + unset($qtmp_01); + //$globalArray = sqlGetResAsArray("select SOD_UJ,WLL_NAME,SOD_DESC,WLE_PUMP_NAME,WLE_PUMP_Q_N,WLE_ENG_NAME,WLE_ENG_POWER,DRS_ID,AVG(RHD_Q_VAL) Q_SR, max(RHD_HST0_VAL) HST0, min(RHD_ID) MIN_ID, max(RHD_ID) MAX_ID from rep_object_departments,rep_his_data_everyday where DRS_ID=RHD_DRS_ID and RHD_DATE>'".$_POST['inRap004_from']." 00:00:00' and RHD_DATE<'".$_POST['inRap004_to']." 23:59:59' and SOD_PLC='".$_SESSION['syndis_eq_stock']."' and RHD_Q_VAL>0 group by DRS_ID order by SOD_UJ,WLL_NAME"); + $globalArray = sqlGetResAsArray("select DRS_ID,WLL_NAME,WLL_BARIERA,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLL_SYS_TYPE,DRS_DEPARTMENT,WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged left join seg_wells on WLL_ID=WLE_WLL_ID left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 where (WLE_DATE_TO>'".$_POST['inRap004_from']." 00:00:00' or WLE_DATE_TO is null) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by WLL_BARIERA,WLL_NAME"); + + $i=0;$res=null; $kom=0; $lp=1; + $pdf -> SetFont('arial_ce', '', 7); + + + $newBariera=null; $sumBariera=0; + for ($i=0; $i<count($globalArray); $i++) + { + + + $minArray = null; +// $minArray = sqlGetResAsArray("select RHD_VM3_VAL,RHD_WTEMP_VAL,RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_ID=".$globalArray[$i]['MIN_ID']); + $maxArray = null; +// $maxArray = sqlGetResAsArray("select RHD_HD_VAL,RHD_VM3_VAL,RHD_WTEMP_VAL,RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_ID=".$globalArray[$i]['MAX_ID']); + $paramArray = null; + + $paramArray = sqlGetResAsArray("select avg(R04_QSR) Q_SR,avg(R04_WAT_TMP) WTEMP_VAL,max(R04_HST0) HST0,max(R04_HD) HD_VAL,sum(R04_VM3) VM3_VAL, sum(R04_WORK_TIME) WORK_TIME_VAL from rep_004_data where R04_DRS_ID=".$globalArray[$i]['DRS_ID']." and R04_DATE>='".$_POST['inRap004_from']."' and R04_DATE<='".$_POST['inRap004_to']."'"); + + + if($paramArray[0]['Q_SR']>0) + { + $pupQn = null; $pupQn = round(sqlStringValue("select PUP_Q_N from seg_dev_resources,seg_pumps where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME='".$globalArray[$i]['WLE_PUMP_NAME']."' and DRS_SN_NUMBER='".$globalArray[$i]['WLE_PUMP_NO']."' limit 1", "PUP_Q_N")/60,2); + $engPow = null; $engPow = round(sqlStringValue("select ENG_POWER from seg_dev_resources,seg_engines where DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 and ENG_NAME='".$globalArray[$i]['WLE_ENG_NAME']."' and DRS_SN_NUMBER='".$globalArray[$i]['WLE_ENG_NO']."' limit 1","ENG_POWER"),2); + + if ($paramArray[0]['HST0']>0) $hstZERO = round($paramArray[0]['HST0'],2); + else $hstZERO=null; + + + if ($newBariera!=$globalArray[$i]['WLL_BARIERA']) + { + // podsumowanie + if ($i>0) + { + $objPHPExcel->getActiveSheet()->mergeCells('A'.($kom+3).':I'.($kom+3)); + $objPHPExcel->getActiveSheet()->getStyle('A'.($kom+3).':I'.($kom+3))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom+3), 'Razem bariera '.$newBariera); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kom+3), $sumBariera); + + + $pdf->Cell(130,5,iconv('utf-8','windows-1250','Razem bariera '.$newBariera),0,0,'R'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',$sumBariera),0,0,'R'); + $pdf->Ln(); + + $kom++; + $sumBariera=0; + + + + } + // ========================================================================= + + $newBariera=$globalArray[$i]['WLL_BARIERA']; + + $objPHPExcel->getActiveSheet()->mergeCells('A'.($kom+3).':M'.($kom+3)); + $objPHPExcel->getActiveSheet()->getRowDimension($kom+3)->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A'.($kom+3).':M'.($kom+3))->applyFromArray($styleBarier); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom+3), 'Bariera '.$newBariera); + + + $pdf -> SetFont('arial_ce', 'B', 8); + $pdf->Cell(0,10,iconv('utf-8','windows-1250','Bariera '.$newBariera),0,1,'L'); + //$pdf->Label(); + + $kom++; + + } + + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom+3), $lp); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kom+3), $globalArray[$i]['WLL_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kom+3), $globalArray[$i]['WLL_SYS_TYPE']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kom+3), $globalArray[$i]['WLE_PUMP_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kom+3), $pupQn); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kom+3), $globalArray[$i]['WLE_ENG_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kom+3), $engPow); + + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kom+3), round($paramArray[0]['Q_SR']/60,3)); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kom+3), round($paramArray[0]['WORK_TIME_VAL'],2)); + $objPHPExcel->getActiveSheet()->SetCellValue('J'.($kom+3), round($paramArray[0]['VM3_VAL'],2)); + $objPHPExcel->getActiveSheet()->SetCellValue('K'.($kom+3), round($paramArray[0]['HD_VAL'],2)); + $objPHPExcel->getActiveSheet()->SetCellValue('L'.($kom+3), $hstZERO); + $objPHPExcel->getActiveSheet()->SetCellValue('M'.($kom+3), round($paramArray[0]['WTEMP_VAL'],2)); + + + $sumBariera+= (float) round($paramArray[0]['VM3_VAL'],2); + + $kom++; + + $pdf -> SetFont('arial_ce', '', 6); + $pdf->Cell(10,5,iconv('utf-8','windows-1250',$lp),1,0,'C'); + $pdf->Cell(17,5,iconv('utf-8','windows-1250',$globalArray[$i]['WLL_NAME']),1,0,'C'); + $pdf->Cell(35,5,iconv('utf-8','windows-1250',$globalArray[$i]['WLL_SYS_TYPE']),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',$globalArray[$i]['WLE_PUMP_NAME']),1,0,'C'); + $pdf->Cell(18,5,iconv('utf-8','windows-1250',$globalArray[$i]['WLE_ENG_NAME']),1,0,'C'); + + $pdf->Cell(20,5,iconv('utf-8','windows-1250',round($paramArray[0]['Q_SR']/60,3)),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',round($paramArray[0]['WORK_TIME_VAL'],2)),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',round($paramArray[0]['VM3_VAL'],2)),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',round($paramArray[0]['HD_VAL'],2)),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',$hstZERO),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',round($paramArray[0]['WTEMP_VAL'],2)),1,0,'C'); + + $pdf->Ln(); + + $lp++; + + $res[]=array( + 'bar' => $globalArray[$i]['WLL_BARIERA'], + 'a' => $globalArray[$i]['WLL_NAME'], + 'b' => $globalArray[$i]['WLL_SYS_TYPE'], + 'c' => $globalArray[$i]['WLE_PUMP_NAME'], + 'd' => $pupQn, + 'e' => $globalArray[$i]['WLE_ENG_NAME'], + 'f' => $engPow, + 'g' => round($paramArray[0]['Q_SR']/60,3), + 'h' => round($paramArray[0]['WORK_TIME_VAL'],2), + 'i' => round($paramArray[0]['VM3_VAL'],2), + 'j' => round($paramArray[0]['HD_VAL'],2), + 'k' => $hstZERO, + 'l' => round($paramArray[0]['WTEMP_VAL'],2), + 'fr' => $_POST['inRap004_from'], + 'to' => $_POST['inRap004_to'] + ); + } + + } + unset($_SESSION['site809_rap004']); + $_SESSION['site809_rap004']=$res; + + + $objPHPExcel->getActiveSheet()->setTitle('Parametry pracy'); + $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save($rap_004xls); + unset($objPHPExcel); + + $pdf->Output($rap_004pdf); + + + } + // ============================================================================================================ + // ============================================================================================================ + + // raport 005 + // ============================================================================================================ + if ($_POST['subRap005']=='Generuj' && $_GET['rap']=='005') + { + $rap_005xls = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap005.xlsx"; + $rap_005pdf = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap005.pdf"; + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); + require_once './PHPExcel.php'; + require_once('./fpdf/fpdf.php'); + + class PDF extends FPDF + { + function Header() + { + $this -> SetFont('arial_ce', 'I', 10); + $title = iconv('utf-8','windows-1250','PGE GiEK S.A. o/KWB Bełchatów'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $title = iconv('utf-8','windows-1250','Oddział Odwodnienia '.$_SESSION['syndis_eq_stock']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + $this -> SetFont('arial_ce', 'B', 9); + $title = iconv('utf-8','windows-1250','Wykaz obiektów na stanie wydziału'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 7); + $this->Cell(10,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(35,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(40,7,iconv('utf-8','windows-1250','Typ'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Data oddania'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','X'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Y'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Rz. pier.'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Rz. akt.'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Gł. LS'),1,0,'C'); + $this->Ln(); + + } + function Footer() + { + $this->SetY(-15); + $this->SetFont('Arial','I',8); + $this->Cell(95,10,'Data wydruku: '.date('Y-m-d'),0,0,'L'); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,1,'R'); + } + function Label() + { + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 7); + $this->Cell(10,7,iconv('utf-8','windows-1250','Lp.'),1,0,'C'); + $this->Cell(35,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(40,7,iconv('utf-8','windows-1250','Typ'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Data oddania'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','X'),1,0,'C'); + $this->Cell(20,7,iconv('utf-8','windows-1250','Y'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Rz. pier.'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Rz. akt.'),1,0,'C'); + $this->Cell(15,7,iconv('utf-8','windows-1250','Gł. LS'),1,0,'C'); + $this->Ln(); + } + + } + + $pdf = new PDF(); + $pdf->AddFont('arial_ce','','arial_ce.php'); + $pdf->AddFont('arial_ce','I','arial_ce_i.php'); + $pdf->AddFont('arial_ce','B','arial_ce_b.php'); + $pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + + + $styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + $styleBarier = array( + 'font' => array( + 'bold' => true, + 'size' => 12 + )); + + $objPHPExcel = new PHPExcel(); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:I1'); + $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A1:I1')->applyFromArray($styleArray); + $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Wykaz obiektów na stanie wydziału - '.$_SESSION['syndis_eq_stock']); + + // nagłówki + // =========================================================================== + $objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Lp.'); + $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); + $objPHPExcel->getActiveSheet()->SetCellValue('C2', 'Typ'); + $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Data oddania'); + $objPHPExcel->getActiveSheet()->SetCellValue('E2', 'X'); + $objPHPExcel->getActiveSheet()->SetCellValue('F2', 'Y'); + $objPHPExcel->getActiveSheet()->SetCellValue('G2', 'Rzędna pierwotna'); + $objPHPExcel->getActiveSheet()->SetCellValue('H2', 'Rzędna aktualna'); + $objPHPExcel->getActiveSheet()->SetCellValue('I2', 'Głębokość LS'); + + + // =========================================================================== + $pdf->AliasNbPages(); + $pdf->AddPage(); + + // =========================================================================== + // =========================================================================== + + + + $i=0;$res=null; $newBariera=null;$kom=0; + $pdf -> SetFont('arial_ce', '', 7); + $wynik = mysql_query("select SOD_UJ,OBJ_NAME,SOD_DESC,OHC_DATA_ODDANIA,OHC_DL_GEOGR,OHC_SZER_GEOGR,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT,(select DRD_VALUE from seg_dev_resources_det where DRD_ID=MAX_DRD_ID limit 1) DEPTH_LS from (select DRS_ID OBJ_ID,WLL_NAME OBJ_NAME from seg_dev_resources left join seg_wells on WLL_ID=DRS_DEV_ID where DRS_STATUS_DIC_ID<>9 and DRS_DEV_TYPE=12 union select DRS_ID OBJ_ID,SRP_NAME OBJ_NAME from seg_dev_resources left join seg_reservoirs_piezometers on SRP_ID=DRS_DEV_ID where DRS_STATUS_DIC_ID<>9 and DRS_DEV_TYPE=601) V_TB left join seg_object_hole_cards on OHC_NAME=OBJ_NAME left join viw_spm_maxdrd_110 ON DRS_ID=OBJ_ID left join seg_object_def on SOD_NAME=OBJ_NAME where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by SOD_UJ,OBJ_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($newBariera!=$r['SOD_UJ']) + { + $newBariera=$r['SOD_UJ']; + + $objPHPExcel->getActiveSheet()->mergeCells('A'.($kom+3).':I'.($kom+3)); + $objPHPExcel->getActiveSheet()->getRowDimension($kom+3)->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A'.($kom+3).':I'.($kom+3))->applyFromArray($styleBarier); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom+3), 'Bariera '.$newBariera); + + $pdf -> SetFont('arial_ce', 'B', 8); + $pdf->Cell(0,10,iconv('utf-8','windows-1250','Bariera '.$newBariera),0,1,'L'); + //$pdf->Label(); + + $kom++; + } + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom+3), $i+1); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kom+3), $r['OBJ_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kom+3), $r['SOD_DESC']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kom+3), $r['OHC_DATA_ODDANIA']); + $objPHPExcel->getActiveSheet()->SetCellValue('E'.($kom+3), $r['OHC_DL_GEOGR']); + $objPHPExcel->getActiveSheet()->SetCellValue('F'.($kom+3), $r['OHC_SZER_GEOGR']); + $objPHPExcel->getActiveSheet()->SetCellValue('G'.($kom+3), round($r['OHC_RZEDNA_TEREN'],2)); + $objPHPExcel->getActiveSheet()->SetCellValue('H'.($kom+3), round($r['OHC_RZEDNA_TERENU_ACT'],2)); + $objPHPExcel->getActiveSheet()->SetCellValue('I'.($kom+3), round($r['DEPTH_LS'],2)); + + + $kom++; + + $pdf -> SetFont('arial_ce', '', 6); + $pdf->Cell(10,5,iconv('utf-8','windows-1250',$i+1),1,0,'C'); + $pdf->Cell(35,5,iconv('utf-8','windows-1250',$r['OBJ_NAME']),1,0,'C'); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$r['SOD_DESC']),1,0,'C'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$r['OHC_DATA_ODDANIA']),1,0,'C'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$r['OHC_DL_GEOGR']),1,0,'C'); + $pdf->Cell(20,5,iconv('utf-8','windows-1250',$r['OHC_SZER_GEOGR']),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',round($r['OHC_RZEDNA_TEREN'],2)),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',round($r['OHC_RZEDNA_TERENU_ACT'],2)),1,0,'C'); + $pdf->Cell(15,5,iconv('utf-8','windows-1250',round($r['DEPTH_LS'],2)),1,0,'C'); + $pdf->Ln(); + + $res[]=array( + 'bar'=>$r['SOD_UJ'], + 'a' => $r['OBJ_NAME'], + 'b' => $r['SOD_DESC'], + 'c' => $r['OHC_DATA_ODDANIA'], + 'd' => $r['OHC_DL_GEOGR'], + 'e' => $r['OHC_SZER_GEOGR'], + 'f' => round($r['OHC_RZEDNA_TEREN'],2), + 'g' => round($r['OHC_RZEDNA_TERENU_ACT'],2), + 'h' => round($r['DEPTH_LS'],2) + ); + + $i++; + } + unset($_SESSION['site809_rap005']); + $_SESSION['site809_rap005']=$res; + + $objPHPExcel->getActiveSheet()->setTitle('Wykaz obiektów'); + $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save($rap_005xls); + unset($objPHPExcel); + + $pdf->Output($rap_005pdf); + + } + // ============================================================================================================ + // ============================================================================================================ + + + // raport 006 + // ============================================================================================================ + if ($_POST['subRap006']=='Generuj' && $_GET['rap']=='006' && !empty($_POST['inRap006'])) + { + $rap_006xls = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap006.xlsx"; + $rap_006pdf = "./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_rap006.pdf"; + define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); + require_once './PHPExcel.php'; + require_once('./fpdf/fpdf.php'); + + class PDF extends FPDF + { + function Header() + { + $this -> SetFont('arial_ce', 'I', 10); + $title = iconv('utf-8','windows-1250','PGE GiEK S.A. o/KWB Bełchatów'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $title = iconv('utf-8','windows-1250','Oddział Odwodnienia '.$_SESSION['syndis_eq_stock']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + + $this -> SetFont('arial_ce', 'B', 9); + $title = iconv('utf-8','windows-1250','Zrzut wody na odprowadzalniki'); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(4); + $this -> SetFont('arial_ce', 'I', 8); + $title = iconv('utf-8','windows-1250','na dzień: '.$_POST['inRap006']); + $this->Cell(0,10,$title,0,0,'L'); + $this->Ln(7); + + } + function Footer() + { + $this->SetY(-15); + $this->SetFont('Arial','I',7); + $this->Cell(95,10,'Data wydruku: '.date('Y-m-d'),0,0,'L'); + $this->Cell(95,10,'Strona '.$this->PageNo().'/{nb}',0,1,'R'); + } + + function Label() + { + $this->SetLineWidth(.1); + $this -> SetFont('arial_ce', 'B', 7); + $this->Cell(40,7,iconv('utf-8','windows-1250','Bariera'),1,0,'C'); + $this->Cell(55,7,iconv('utf-8','windows-1250','Studnia'),1,0,'C'); + $this->Cell(55,7,iconv('utf-8','windows-1250',''),1,0,'C'); + $this->Cell(40,7,iconv('utf-8','windows-1250','Zrzut [m3/min]'),1,0,'C'); + $this->Ln(); + } + + } + + $pdf = new PDF(); + $pdf->AddFont('arial_ce','','arial_ce.php'); + $pdf->AddFont('arial_ce','I','arial_ce_i.php'); + $pdf->AddFont('arial_ce','B','arial_ce_b.php'); + $pdf->AddFont('arial_ce','BI','arial_ce_bi.php'); + + + $styleArray = array( + 'font' => array( + 'bold' => true, + 'size' => 16 + )); + $styleBarier = array( + 'font' => array( + 'bold' => true, + 'size' => 12 + )); + + $objPHPExcel = new PHPExcel(); + $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:G1'); + $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(25); + $objPHPExcel->getActiveSheet()->getStyle('A1:G1')->applyFromArray($styleArray); + $objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Zrzut wody na odprowadzalniki na dzień '.$_POST['inRap006']); + + // nagłówki + // =========================================================================== + $objPHPExcel->getActiveSheet()->SetCellValue('A2', 'Bariara.'); + $objPHPExcel->getActiveSheet()->SetCellValue('B2', 'Studnia'); + $objPHPExcel->getActiveSheet()->SetCellValue('C2', ''); + $objPHPExcel->getActiveSheet()->SetCellValue('D2', 'Zrzut [m3/min]'); + // =========================================================================== + $pdf->AliasNbPages(); + $pdf->AddPage(); + + + + $pdf -> SetFont('arial_ce', 'B', 8); + $pdf->Label(); + + + + $kom=3; + $res=null; + // ogólna wartość dla danej daty - suma ilości wody na cały system + // =========================================================================== + $globaWater = round(sqlValue("select sum(R04_QSR) QSR from rep_004_data,seg_dev_resources where DRS_ID=R04_DRS_ID and DRS_DEV_TYPE=12 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and R04_QSR>0 and R04_DATE='".$_POST['inRap006']."'")/60,2); + + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom), 'SYSTEM'); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kom), '-->'); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kom), 'SYSTEM'); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kom), $globaWater); + + $pdf -> SetFont('arial_ce', '', 6); + $pdf->Cell(40,5,iconv('utf-8','windows-1250','SYSTEM'),1,0,'L'); + $pdf->Cell(55,5,iconv('utf-8','windows-1250','------->'),1,0,'C'); + $pdf->Cell(55,5,iconv('utf-8','windows-1250','SYSTEM'),1,0,'C'); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$globaWater),1,0,'R'); + $pdf->Ln(); + + + + $kom++; + // =========================================================================== + + + $objPHPExcel->getActiveSheet()->mergeCells('A'.($kom).':C'.($kom)); + $objPHPExcel->getActiveSheet()->getRowDimension($kom)->setRowHeight(15); + $objPHPExcel->getActiveSheet()->getStyle('A'.($kom).':D'.($kom))->applyFromArray($styleBarier); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom), 'Razem'); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kom), $globaWater); + + $pdf -> SetFont('arial_ce', 'B', 7); + $pdf->Cell(150,5,iconv('utf-8','windows-1250','Razem'),1,0,'L'); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$globaWater),1,0,'R'); + $pdf->Ln(); + $pdf->Ln(); + + $kom++; + $kom++; + // =========================================================================== + + + // Podział na poszczególne zrzuty + unset($tmpArray); + unset($zrzutArray); + $tmpArray = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage order by WWD_NAME"); + for($i=0; $i<count($tmpArray); $i++) + { + $qtmp = (float) sqlValue("select sum(R04_QSR) QSR from rep_004_data where R04_DATE='".$_POST['inRap006']."' and R04_DRS_ID in (select WLD_DRS_ID from seg_water_drainage,seg_well_water_drainage left join seg_dev_resources on WLD_DRS_ID=DRS_ID and DRS_DEV_TYPE=12 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' where WLD_WWD_ID=WWD_ID and WLD_DRS_ID is not null and WWD_ID=".$tmpArray[$i]['WWD_ID'].")"); + + if ($qtmp>0) + { + $qtmp = round($qtmp/60,2); + $parentName=sqlStringValue("select WWD_NAME from seg_water_drainage where WWD_ID=(select WWD_PARENT_ID from seg_water_drainage where WWD_ID=".$tmpArray[$i]['WWD_ID'].")","WWD_NAME"); + + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom), $tmpArray[$i]['WWD_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kom), '-->'); + $objPHPExcel->getActiveSheet()->SetCellValue('C'.($kom), $parentName); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kom), $qtmp); + + $pdf -> SetFont('arial_ce', '', 6); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$tmpArray[$i]['WWD_NAME']),1,0,'L'); + $pdf->Cell(55,5,iconv('utf-8','windows-1250','------->'),1,0,'C'); + $pdf->Cell(55,5,iconv('utf-8','windows-1250',$parentName),1,0,'L'); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$qtmp),1,0,'R'); + $pdf->Ln(); + + + $zrzutArray[] = array( + 'zrzID' => $tmpArray[$i]['WWD_ID'], + 'zrzName' => $tmpArray[$i]['WWD_NAME'] + ); + $kom++; + } + + } + $pdf->Ln(); + $kom++; + + + // poszczególne odprowadzenia + for($i=0; $i<count($zrzutArray); $i++) + { + $objPHPExcel->getActiveSheet()->getStyle('A'.($kom))->applyFromArray($styleBarier); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom), $zrzutArray[$i]['zrzName']); + $kom++; + + $pdf -> SetFont('arial_ce', 'B', 7); + $pdf->Cell(0,5,iconv('utf-8','windows-1250',$zrzutArray[$i]['zrzName']),0,1,'L'); + + + unset($tmpArray); $tmpArray = sqlGetResAsArray("select WLL_BARIERA,WLL_NAME,WLD_DRS_ID from seg_well_water_drainage,seg_dev_resources left join seg_wells on WLL_ID=DRS_DEV_ID where DRS_ID=WLD_DRS_ID and DRS_DEV_TYPE=12 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and WLD_DRS_ID is not null and WLD_WWD_ID=".$zrzutArray[$i]['zrzID']." order by WLL_NAME"); + for($j=0; $j<count($tmpArray); $j++) + { + $qtmp = (float) sqlValue("select sum(R04_QSR) from rep_004_data where R04_DRS_ID=".$tmpArray[$j]['WLD_DRS_ID']." and R04_DATE='".$_POST['inRap006']."'"); + if ($qtmp>0) + { + $qtmp = round($qtmp/60,2); + $objPHPExcel->getActiveSheet()->SetCellValue('A'.($kom), $tmpArray[$j]['WLL_BARIERA']); + $objPHPExcel->getActiveSheet()->SetCellValue('B'.($kom), $tmpArray[$j]['WLL_NAME']); + $objPHPExcel->getActiveSheet()->SetCellValue('D'.($kom), $qtmp); + $kom++; + + $pdf -> SetFont('arial_ce', '', 6); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$tmpArray[$j]['WLL_BARIERA']),1,0,'L'); + $pdf->Cell(55,5,iconv('utf-8','windows-1250',$tmpArray[$j]['WLL_NAME']),1,0,'C'); + $pdf->Cell(55,5,iconv('utf-8','windows-1250',''),1,0,'L'); + $pdf->Cell(40,5,iconv('utf-8','windows-1250',$qtmp),1,0,'R'); + $pdf->Ln(); + + + } + } + $kom++; + $pdf->Ln(); + + } + + $objPHPExcel->getActiveSheet()->setTitle('Zrzut wody'); + $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + $objWriter->save($rap_006xls); + unset($objPHPExcel); + + $pdf->Output($rap_006pdf); + + + } + // ============================================================================================================ + // ============================================================================================================ + + // ============================================================================================================ + // ============================================================================================================ + // ============================================================================================================ + // ============================================================================================================ + // ============================================================================================================ + // ============================================================================================================ + + ?> + + <?php + //zapamiętywanie dat w raportach + if (empty($_POST['inRap001_from'])) $_POST['inRap001_from']=date('Y-m')."-01"; + if (empty($_POST['inRap001_to'])) $_POST['inRap001_to']=date('Y-m-d'); + if (empty($_POST['inRap003_from'])) $_POST['inRap003_from']=date('Y-m')."-01"; + if (empty($_POST['inRap003_to'])) $_POST['inRap003_to']=date('Y-m-d'); + if (empty($_POST['inRap004_from'])) $_POST['inRap004_from']=date('Y-m')."-01"; + if (empty($_POST['inRap004_to'])) $_POST['inRap004_to']=date('Y-m-d'); + + ?> + + + + + <div class="tag100"> + + <div class="head_tag">Raporty - I</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Nazwa raportu</td> + <td class="label">Akcja</td> + <td class="label"></td> + </tr> + + + <form action="./?pg=site809&rap=002" method="post"> + <tr> + <td class='field_left'>Łączna ilość agregatów pompowych zabudowanych w studniach</td> + <td class='field_center'><input class='btn btn-success btn-xs' type="submit" name="subRap002" value="Generuj" onclick="makeRequest('?pg=site809');"></td> + <td CLASS='desc_value' style="max-width: 100px; text-align: center;"> + <?php if ($_POST['subRap002']=='Generuj'): ?> + <a href="<?php echo $rap_002xls; ?>" target="_blank" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="<?php echo $rap_002pdf; ?>" target="_blank" title="Export do PDF"><img src="/images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="./export/site809_rap002_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a> + <?php endif; ?> + + + </td> + </tr> + </form> + + + <form action="./?pg=site809&rap=005" method="post"> + <tr> + <td class='field_left'>Wykaz obiektów na stanie wydziału</td> + <td class='field_center'><input class='btn btn-success btn-xs' type="submit" name="subRap005" value="Generuj" onclick="makeRequest('?pg=site809');"></td> + <td CLASS='desc_value' style="max-width: 100px; text-align: center;"> + <?php if ($_POST['subRap005']=='Generuj'): ?> + <a href="<?php echo $rap_005xls; ?>" target="_blank" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="<?php echo $rap_005pdf; ?>" target="_blank" title="Export do PDF"><img src="/images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="./export/site809_rap005_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a> + <?php endif; ?> + </td> + </tr> + </form> + + </table> + </div> + + + + + + + <div class="head_tag">Raporty - II</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Nazwa raportu</td> + <td class="label">Data od</td> + <td class="label">Data do</td> + <td class="label">Akcja</td> + <td class="label"></td> + </tr> + + + <form action="./?pg=site809&rap=004" method="post"> + <tr> + <td class='field_left'>Wykaz pracy studni</td> + <td class='field_center'><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_05' NAME='inRap004_from' SIZE='10' value="<?php echo $_POST['inRap004_from']; ?>"></td> + <td class='field_center'><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_06' NAME='inRap004_to' SIZE='10' value="<?php echo $_POST['inRap004_to']; ?>"></td> + <td class='field_center'><input class='btn btn-success btn-xs' type="submit" name="subRap004" value="Generuj" onclick="makeRequest('?pg=site809');"></td> + <td CLASS='desc_value' style="max-width: 100px; text-align: center;"> + <?php if ($_POST['subRap004']=='Generuj'): ?> + <a href="<?php echo $rap_004xls; ?>" target="_blank" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="<?php echo $rap_004pdf; ?>" target="_blank" title="Export do PDF"><img src="/images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="./export/site809_rap004_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a> + <?php endif; ?> + </td> + </tr> + </form> + + </table> + </div> + + + + + + + + + + + <div class="head_tag">Raporty - III</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Nazwa raportu</td> + <td class="label">Data</td> + <td class="label">Godzina</td> + <td class="label">Akcja</td> + <td class="label"></td> + </tr> + + + <form action="./?pg=site809&rap=001" method="post"> + <tr> + <td class='field_left'>Wykaz energochłonności dla studni na dany moment.</td> + <td class='field_center'><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inRap001' SIZE='10' value="<?php echo $_POST['inRap001']; ?>"></td> + <td class='field_center'><?php getSelectHours('inRap001_hour');?></td> + <td class='field_center'><input class='btn btn-success btn-xs' type="submit" name="subRap001" value="Generuj" onclick="makeRequest('?pg=site809');"></td> + <td CLASS='desc_value' style="max-width: 100px; text-align: center;"> + <?php if ($_POST['subRap001']=='Generuj'): ?> + <a href="<?php echo $rap_001xls; ?>" target="_blank" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="<?php echo $rap_001pdf; ?>" target="_blank" title="Export do PDF"><img src="/images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="./export/site809_rap001_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a> + <?php endif; ?> + </td> + </tr> + </form> + + <form action="./?pg=site809&rap=003" method="post"> + <tr> + <td class='field_left'>Parametry pracy studni i układu pompowego</td> + <td class='field_center'><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_03' NAME='inRap003' SIZE='10' value="<?php echo $_POST['inRap003']; ?>"></td> + <td class='field_center'><?php getSelectHours('inRap003_hour');?></td> + <td class='field_center'><input class='btn btn-success btn-xs' type="submit" name="subRap003" value="Generuj" onclick="makeRequest('?pg=site809');"></td> + <td CLASS='desc_value' style="max-width: 100px; text-align: center;"> + <?php if ($_POST['subRap003']=='Generuj'): ?> + <a href="<?php echo $rap_003xls; ?>" target="_blank" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="<?php echo $rap_003pdf; ?>" target="_blank" title="Export do PDF"><img src="/images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="./export/site809_rap003_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a> + <?php endif; ?> + </td> + </tr> + </form> + + + + + </table> + </div> + + + + + <div class="head_tag">Raporty - IV</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Nazwa raportu</td> + <td class="label">Data</td> + <td class="label">Akcja</td> + <td class="label"></td> + </tr> + + + <form action="./?pg=site809&rap=006" method="post"> + <tr> + <td class='field_left'>Zrzut wody na odprowadzalniki</td> + <td class='field_center'><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_07' NAME='inRap006' SIZE='10' value="<?php echo $_POST['inRap006']; ?>"></td> + <td class='field_center'><input class='btn btn-success btn-xs' type="submit" name="subRap006" value="Generuj" onclick="makeRequest('?pg=site809');"></td> + <td CLASS='desc_value' style="max-width: 100px; text-align: center;"> + <?php if ($_POST['subRap006']=='Generuj'): ?> + <a href="<?php echo $rap_006xls; ?>" target="_blank" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;&nbsp; + <a href="<?php echo $rap_006pdf; ?>" target="_blank" title="Export do PDF"><img src="/images/pdf_ico.png" style="max-width: 20px; border: 0;"></a> + <?php endif; ?> + </td> + </tr> + </form> + + </table> + </div> + + + + + +</div> + + + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/backup/soap_importpiezo.php b/sites/backup/soap_importpiezo.php new file mode 100644 index 0000000..dd617bd --- /dev/null +++ b/sites/backup/soap_importpiezo.php @@ -0,0 +1,112 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; + +//$scriptDate = date("Y-m-d H:i:s"); + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function insert_new_record($devID, $dicID, $value,$insertDate,$bar,$dep,$pname) +{ + + $insertDate = str_replace(array('T','Z'), array(' ',''),$insertDate); + $insertDateValue = (float) str_replace(array('-',':',' '),array('','',''),$insertDate); + + $lastMasureDate = sqlStringValue("select getLastMeasureDate(".$dicID.",".$devID.") MT","MT"); + $lastMasureDateValue = (float) str_replace(array('-',':',' '),array('','',''),$lastMasureDate); + + // sprawdza, czy ostatni pomiar jest późniejszy od nowego z SYNDIS + if ($insertDateValue>$lastMasureDateValue) + { + $value = round($value,2); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".round($value,2)."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"); + + + + + echo "wstawił<br/><br/>"; + } + + // wpisuje dane - jako do exportu do SEGAP + mysql_query("INSERT INTO seg_piezometers_segap SET DRD_DRS_ID=".$devID.",SRP_BARIERA='".$bar."',SRP_NAME='".$pname."',DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".round($value,2)."',DRS_DEPARTMENT='".$dep."',DRD_AUDIT_DATE='".$insertDate."'"); + + + //echo"INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".$value."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"; + //echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$dicID, "DIC_POL_LANG")." [$dicID]: ".$value; + //echo"</br>"; +} + +mysql_query("truncate table seg_piezometers_segap"); + +$wynik = mysql_query("select SOI_NAME from rep_soap_objects_import where SOI_OBJECT='PIEZO'"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $pName=$r["SOI_NAME"]; + $pz = $cl->GetPiezometerDataAsArray($pName); + + + echo $pName."</br>"; + //print_r($wl); + + //$devID=null; + //$devID = sqlStringValue("select DRS_ID from seg_reservoirs_piezometers left join seg_dev_resources on SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 where SRP_NAME='".$pName."'","DRS_ID"); + + $piezoArray=null; + unset($piezoArray); + $piezoArray = sqlGetResAsArray("select DRS_ID,DRS_DEPARTMENT,SRP_BARIERA from seg_reservoirs_piezometers left join seg_dev_resources on SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 where SRP_NAME='".$pName."'"); + + if ($piezoArray[0]['DRS_ID']>0 && $pz["staticWaterTable"]["flag"] == "CORRECT") + { + if ($pz["staticWaterTable"]["value"]>0) + { + //echo "</br>"; + //zwirciadło statyczne + insert_new_record($piezoArray[0]['DRS_ID'], 210, $pz["staticWaterTable"]["value"],$pz["staticWaterTable"]["date"],$piezoArray[0]['SRP_BARIERA'],$piezoArray[0]['DRS_DEPARTMENT'],$pName); + + } + + } + else + { + echo"Dane InCorrect </br>"; + } +} + + + + +mysql_close($polacz); + +echo 'finish processing ...<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/sites/backup/soap_importwells.php b/sites/backup/soap_importwells.php new file mode 100644 index 0000000..c496c01 --- /dev/null +++ b/sites/backup/soap_importwells.php @@ -0,0 +1,303 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + + + + +// pobieramy tablice studni +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +//print_r($cl->GetWellsDataAsArray(array('G52','G54'))); //Pobieranie danych dla wszystkich studni +$wl = $cl->GetWellsDataAsArray($well_array); +mysql_query("truncate table seg_dev_major_segap"); +mysql_query("truncate table rep_soap_syndis_quality_data"); +mysql_query("truncate table rep_soap_syndis_update5min_data"); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + //echo "Name: ". $wl["wells"][$i]["well"]["id"]."<br/>"; + + $devID=null; $wellID=null; $vpp=null; $vhh=null; + + // sprawdza, czy ma zapisać nowy rekord do bazy everyday + $isSaveRecords=false; + + $wynik_W = mysql_query("select DRS_ID,DRS_DEPARTMENT,WLL_ID,WLL_BARIERA,WLL_PP_SCOPE,WLL_HH_SCOPE,WLL_CAT_DIC_ID from seg_wells left join seg_dev_resources on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where WLL_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + if($wynik_W)while ($r_W = mysql_fetch_array($wynik_W)) + { + $devID = $r_W["DRS_ID"]; + $wellID = $r_W["WLL_ID"]; + $wellBar = $r_W["WLL_BARIERA"]; + $vpp=$r_W["WLL_PP_SCOPE"]; if ($vpp==0) $vpp=500; + $vhh=$r_W["WLL_HH_SCOPE"]; + $devDep = $r_W["DRS_DEPARTMENT"]; + $wellType = $r_W["WLL_CAT_DIC_ID"]; + } + + // 2018-01-06 obsługa w soap_of_while.php + /* + //sprawdza stan załączenia pompy + if (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='ON' && $wl["wells"][$i]["pumpOnOff"]["value"]==0 && $wl["wells"][$i]["pumpEfficiency"]["value"]<=0.016) + { + //2017-10-17 - dodanie parametru REASON [pumpOnOffReason]: $wl["wells"][$i]["pumpOnOffReason"]["value"] + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wl["wells"][$i]["pumpOnOffReason"]["value"]."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$wellID.",SLA_DRS_ID=".$devID.",SLA_NAME='".$wl["wells"][$i]["well"]["id"]."',SLA_WORK_STATUS='OFF',SLA_DATETIME='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',SLA_AUDIT_CD=now()"); + // ============================================================================================================================================================== + } + //sprawdza stan załączenia pompy + elseif (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")!='ON' && $wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$wellID.",SLA_DRS_ID=".$devID.",SLA_NAME='".$wl["wells"][$i]["well"]["id"]."',SLA_WORK_STATUS='ON',SLA_DATETIME='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',SLA_AUDIT_CD=now()"); + // ============================================================================================================================================================== + } + */ + + + // sprawdza, czy pompa jest włączona + if ($wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppValue = (float) ($ppValue - (($wl["wells"][$i]["barometricPressuremA"]["value"]*10)/98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + + unset($lpValue); + $lpValue = (float) sqlStringValue("select getLastValue(240,".$devID.") HHV", "HHV"); + $hhValue = (float) $lpValue - ($wl["wells"][$i]["dynamicWaterTable"]["value"]); + $hhFlag = $wl["wells"][$i]["dynamicWaterTable"]["flag"]; + // ============================================================================== + + //rejestruje dane bez względu na ich jakość - prezentacja informacji w SYNDIS + //INSERT INTO rep_soap_syndis_quality_data SET SQD_DRS_ID=111,SQD_OBJECT_NAME='111',SQD_NAME='111',SQD_VAL_Q=111,SQD_FLG_Q='111',SQD_VAL_P1=111,SQD_FLG_P1='111',SQD_VAL_P2=111,SQD_FLG_P2='111',SQD_VAL_PE=111,SQD_FLG_PE='111',SQD_VAL_PP=111,SQD_FLG_PP='111',SQD_VAL_HH=111,SQD_FLG_HH='111',SQD_VAL_HD=111,SQD_FLG_HD='111',SQD_VAL_ONOFF=111,SQD_FLG_ONOFF='111',SQD_AUDIT_CD=now(); + //if (sqlValue("select count(*) from rep_soap_syndis_quality_data where SQD_DRS_ID=".$devID)==0) + //{ + mysql_query(" + INSERT INTO rep_soap_syndis_quality_data SET + SQD_DRS_ID=".$devID.", + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_I=".$wl["wells"][$i]["currentL1"]["value"].", + SQD_FLG_I='".$wl["wells"][$i]["currentL1"]["flag"]."', + SQD_VAL_U=".$wl["wells"][$i]["voltageL12"]["value"].", + SQD_FLG_U='".$wl["wells"][$i]["voltageL12"]["flag"]."', + SQD_VAL_CF=".$wl["wells"][$i]["cos"]["value"].", + SQD_FLG_CF='".$wl["wells"][$i]["cos"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' + "); + //} + /* + else { + + mysql_query(" + update rep_soap_syndis_quality_data SET + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_I=".$wl["wells"][$i]["currentL1"]["value"].", + SQD_FLG_I='".$wl["wells"][$i]["currentL1"]["flag"]."', + SQD_VAL_U=".$wl["wells"][$i]["voltageL12"]["value"].", + SQD_FLG_U='".$wl["wells"][$i]["voltageL12"]["flag"]."', + SQD_VAL_CF=".$wl["wells"][$i]["cos"]["value"].", + SQD_FLG_CF='".$wl["wells"][$i]["cos"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' where SQD_DRS_ID=".$devID + ); + } + */ + // ============================================================================== + + + if ($devID>0) + { + $measureQuery = "INSERT INTO rep_soap_syndis_update5min_data SET "; + $measureQuery .= "SUD_DRS_ID=".$devID.",SUD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',SUD_OBJECT_TYPE=".$wellType.","; + + //prąd fazy L1 zasilania pompy + $measureQuery .= "SUD_ID_L1=270,SUD_VAL_L1=".$wl["wells"][$i]["currentL1"]["value"].",SUD_FLG_L1='".$wl["wells"][$i]["currentL1"]["flag"]."',SUD_DATE_L1='".convertData($wl["wells"][$i]["currentL1"]["date"])."',"; + //prąd fazy L2 zasilania pompy + $measureQuery .= "SUD_ID_L2=710,SUD_VAL_L2=".$wl["wells"][$i]["currentL2"]["value"].",SUD_FLG_L2='".$wl["wells"][$i]["currentL2"]["flag"]."',SUD_DATE_L2='".convertData($wl["wells"][$i]["currentL2"]["date"])."',"; + //prąd fazy L3 zasilania pompy + $measureQuery .= "SUD_ID_L3=711,SUD_VAL_L3=".$wl["wells"][$i]["currentL3"]["value"].",SUD_FLG_L3='".$wl["wells"][$i]["currentL3"]["flag"]."',SUD_DATE_L3='".convertData($wl["wells"][$i]["currentL3"]["date"])."',"; + //[voltageL12] => U L12 [V] - napięcie międzyfazowe L1-L2 + $measureQuery .= "SUD_ID_UL12=275,SUD_VAL_UL12=".$wl["wells"][$i]["voltageL12"]["value"].",SUD_FLG_UL12='".$wl["wells"][$i]["voltageL12"]["flag"]."',SUD_DATE_UL12='".convertData($wl["wells"][$i]["voltageL12"]["date"])."',"; + //[voltageL23] => U L23 [V] - napięcie międzyfazowe L2-L3 + $measureQuery .= "SUD_ID_UL23=712,SUD_VAL_UL23=".$wl["wells"][$i]["voltageL23"]["value"].",SUD_FLG_UL23='".$wl["wells"][$i]["voltageL23"]["flag"]."',SUD_DATE_UL23='".convertData($wl["wells"][$i]["voltageL23"]["date"])."',"; + //[throttlePosition] => Położenie przepustnicy [*] + if ($wellType==19) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=".$wl["wells"][$i]["throttlePosition"]["value"].",SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + { + $tmpDivP1P2=0; + $tmpDivP1P2 = (float) ($wl["wells"][$i]["pressureAfterThrottle"]["value"] / $wl["wells"][$i]["pressureBeforeThrottle"]["value"]); + if ($tmpDivP1P2>0.93) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=100,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=50,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + } + + //[waterTemperature] => Tw [*C] + $measureQuery .= "SUD_ID_TW=245,SUD_VAL_TW=".$wl["wells"][$i]["waterTemperature"]["value"].",SUD_FLG_TW='".$wl["wells"][$i]["waterTemperature"]["flag"]."',SUD_DATE_TW='".convertData($wl["wells"][$i]["waterTemperature"]["date"])."',"; + //[activePower] => P [kW] + $measureQuery .= "SUD_ID_PE=260,SUD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].",SUD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."',SUD_DATE_PE='".convertData($wl["wells"][$i]["activePower"]["date"])."',"; + //[cos] => cos(FI) + $measureQuery .= "SUD_ID_CFI=280,SUD_VAL_CFI=".$wl["wells"][$i]["cos"]["value"].",SUD_FLG_CFI='".$wl["wells"][$i]["cos"]["flag"]."',SUD_DATE_CFI='".convertData($wl["wells"][$i]["cos"]["date"])."',"; + //[activeEnergy] => E [kWh] + $measureQuery .= "SUD_ID_KWH=265,SUD_VAL_KWH=".$wl["wells"][$i]["activeEnergy"]["value"].",SUD_FLG_KWH='".$wl["wells"][$i]["activeEnergy"]["flag"]."',SUD_DATE_KWH='".convertData($wl["wells"][$i]["activeEnergy"]["date"])."',"; + //[pumpedWaterAmount] => V [m3] + $measureQuery .= "SUD_ID_VM3=230,SUD_VAL_VM3=".$wl["wells"][$i]["pumpedWaterAmount"]["value"].",SUD_FLG_VM3='".$wl["wells"][$i]["pumpedWaterAmount"]["flag"]."',SUD_DATE_VM3='".convertData($wl["wells"][$i]["pumpedWaterAmount"]["date"])."',"; + //[ClInPumpedWater] => ch [mg/l] + $measureQuery .= "SUD_ID_CHL=719,SUD_VAL_CHL=".$wl["wells"][$i]["ClInPumpedWater"]["value"].",SUD_FLG_CHL='".$wl["wells"][$i]["ClInPumpedWater"]["flag"]."',SUD_DATE_CHL='".convertData($wl["wells"][$i]["ClInPumpedWater"]["date"])."',"; + //[energyConsumption] => Jednostkowe zużycie energii [kWh/m3/m] + $measureQuery .= "SUD_ID_ECM=721,SUD_VAL_ECM=".$wl["wells"][$i]["energyConsumption"]["value"].",SUD_FLG_ECM='".$wl["wells"][$i]["energyConsumption"]["flag"]."',SUD_DATE_ECM='".convertData($wl["wells"][$i]["energyConsumption"]["date"])."',"; + //[pumpRuntime] => t [h] + $measureQuery .= "SUD_ID_RUTM=290,SUD_VAL_RUTM=".$wl["wells"][$i]["pumpRuntime"]["value"].",SUD_FLG_RUTM='".$wl["wells"][$i]["pumpRuntime"]["flag"]."',SUD_DATE_RUTM='".convertData($wl["wells"][$i]["pumpRuntime"]["date"])."',"; + //[dynamicWaterTable] => HD [m] + $measureQuery .= "SUD_ID_HD=205,SUD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].",SUD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."',SUD_DATE_HD='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + //[staticWaterTable] => HST [m] + $measureQuery .= "SUD_ID_HST=210,SUD_VAL_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",SUD_FLG_HST='".$wl["wells"][$i]["staticWaterTable"]["flag"]."',SUD_DATE_HST='".convertData($wl["wells"][$i]["staticWaterTable"]["date"])."',"; + //[pressureBeforeThrottle] => p1 [kPa] + $measureQuery .= "SUD_ID_P1=215,SUD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].",SUD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."',SUD_DATE_P1='".convertData($wl["wells"][$i]["pressureBeforeThrottle"]["date"])."',"; + //[pressureAfterThrottle] => p2 [kPa] + $measureQuery .= "SUD_ID_P2=220,SUD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].",SUD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."',SUD_DATE_P2='".convertData($wl["wells"][$i]["pressureAfterThrottle"]["date"])."',"; + //[barometricPressuremA] => Ciśnienie barometryczne pB[mA] - zakres 4-20 + $measureQuery .= "SUD_ID_PB=225,SUD_VAL_PB=".($wl["wells"][$i]["barometricPressuremA"]["value"] * 10).",SUD_FLG_PB='".$wl["wells"][$i]["barometricPressuremA"]["flag"]."',SUD_DATE_PB='".convertData($wl["wells"][$i]["barometricPressuremA"]["date"])."',"; + //[pumpEfficiency] => Q [m3/min] + $measureQuery .= "SUD_ID_Q=200,SUD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).",SUD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."',SUD_DATE_Q='".convertData($wl["wells"][$i]["pumpEfficiency"]["date"])."',"; + //[currentDiagnosticsOperationState] => Działanie/niedziałanie [1/0] diagnostyki prądowej + $measureQuery .= "SUD_ID_DIAG=708,SUD_VAL_DIAG=".$wl["wells"][$i]["currentDiagnosticsOperationState"]["value"].",SUD_FLG_DIAG='".$wl["wells"][$i]["currentDiagnosticsOperationState"]["flag"]."',SUD_DATE_DIAG='".convertData($wl["wells"][$i]["currentDiagnosticsOperationState"]["date"])."',"; + // PP + $measureQuery .= "SUD_ID_PP=401,SUD_VAL_PP=".$ppValue.",SUD_FLG_PP='".$ppFlag."',SUD_DATE_PP='".convertData($wl["wells"][$i]["pressureInPistonBody"]["date"])."',"; + // HH + $measureQuery .= "SUD_ID_HH=402,SUD_VAL_HH=".$hhValue.",SUD_FLG_HH='".$hhFlag."',SUD_DATE_HH='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + // ON OFF + $measureQuery .= "SUD_ID_ONOFF=507,SUD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].",SUD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."',SUD_DATE_ONOFF='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',"; + // end query + $measureQuery .= "SUD_AUDIT_CD=now()"; + + // wpisuje do tabeli z rekordami. + //echo $measureQuery."<br/><br/>"; + mysql_query($measureQuery); + + } + + + } + //Jeśli wyłączona +/* + else + { + if ($devID>0) + { + $measureQuery = "INSERT INTO rep_soap_syndis_update5min_data SET "; + $measureQuery .= "SUD_DRS_ID=".$devID.",SUD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',SUD_OBJECT_TYPE=".$wellType.","; + //[staticWaterTable] => HST [m] + $measureQuery .= "SUD_ID_HST=210,SUD_VAL_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",SUD_FLG_HST='".$wl["wells"][$i]["staticWaterTable"]["flag"]."',SUD_DATE_HST='".convertData($wl["wells"][$i]["staticWaterTable"]["date"])."',"; + // ON OFF + $measureQuery .= "SUD_ID_ONOFF=507,SUD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].",SUD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."',SUD_DATE_ONOFF='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',"; + // end query + $measureQuery .= "SUD_AUDIT_CD=now()"; + // wpisuje do tabeli z rekordami. + //echo $measureQuery."<br/><br/>"; + mysql_query($measureQuery); + } + } +*/ +} + +//mysql_query("truncate table softspm_rep.rep_002_avg_pump_working"); +//mysql_query("insert into softspm_rep.rep_002_avg_pump_working select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507) tb order by DRD_DRS_ID,DRD_AUDIT_DATE,DRD_ID"); + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/sites/backup/soap_update5min.php b/sites/backup/soap_update5min.php new file mode 100644 index 0000000..068e6eb --- /dev/null +++ b/sites/backup/soap_update5min.php @@ -0,0 +1,456 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function update_new_record($devID, $dicID, $value,$insertDate) +{ + $insertDate = str_replace(array('T','Z'), array(' ',''),$insertDate); + + $value = round($value,2); + + $drdID = sqlValue("select SQL_NO_CACHE max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=".$dicID." and DRD_DRS_ID=".$devID); + if ($drdID>0) + { + mysql_query("UPDATE seg_dev_resources_det SET DRD_VALUE='".round($value,2)."',DRD_AUDIT_DATE='".$insertDate."',DRD_AUDIT_USR='SYNDIS' WHERE DRD_ID=".$drdID); +// echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$dicID, "DIC_POL_LANG")." [$dicID]: ".$value; + } + //echo"</br>"; +} + + + + +function isNewestData($devID,$dicID,$insertDate) +{ + $res = false; + $insertDate = str_replace(array('T','Z'), array(' ',''),$insertDate); + $insertDateValue = (float) str_replace(array('-',':',' '),array('','',''),$insertDate); + + $lastMasureDate = sqlStringValue("select getLastMeasureDate(".$dicID.",".$devID.") MT","MT"); + $lastMasureDateValue = (float) str_replace(array('-',':',' '),array('','',''),$lastMasureDate); + + if ($insertDateValue>$lastMasureDateValue) + $res=true; + + return $res; +} + + +// pobieramy tablice studni +$well_array=null; +$wynik = mysql_query("select DISTINCT DRD_OBJECT_NAME from seg_dev_major_data left join seg_wells on DRD_OBJECT_NAME=WLL_NAME where DRD_OBJECT_TYPE='WELL' and DMD_WORK_STATUS='1' and WLL_HH_SCOPE>0 and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["DRD_OBJECT_NAME"]; +} +//print_r($cl->GetWellsDataAsArray(array('G52','G54'))); //Pobieranie danych dla wszystkich studni +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + //echo "Name: ". $wl["wells"][$i]["well"]["id"]."<br/>"; + + $devID=null; $wellID=null; $vpp=null; $vhh=null; + $wynik_W = mysql_query("select DRS_ID,WLL_ID,WLL_PP_SCOPE,WLL_HH_SCOPE,WLL_CAT_DIC_ID from seg_wells left join seg_dev_resources on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where WLL_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + if($wynik_W)while ($r_W = mysql_fetch_array($wynik_W)) + { + $devID = $r_W["DRS_ID"]; + $wellID = $r_W["WLL_ID"]; + $vpp=$r_W["WLL_PP_SCOPE"]; if ($vpp==0) $vpp=500; + $vhh=$r_W["WLL_HH_SCOPE"]; + $wellType = $r_W["WLL_CAT_DIC_ID"]; + } + + + //sprawdza stan załączenia pompy + if (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='ON' && $wl["wells"][$i]["pumpOnOff"]["value"]==0) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$scriptDate."'"); + } + //sprawdza stan załączenia pompy + elseif (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='OFF' && $wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$scriptDate."'"); + } + + + // sprawdza, czy pompa jest włączona + if ($wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //rejestruje dane bez względu na ich jakość - prezentacja informacji w SYNDIS + //INSERT INTO rep_soap_syndis_quality_data SET SQD_DRS_ID=111,SQD_OBJECT_NAME='111',SQD_NAME='111',SQD_VAL_Q=111,SQD_FLG_Q='111',SQD_VAL_P1=111,SQD_FLG_P1='111',SQD_VAL_P2=111,SQD_FLG_P2='111',SQD_VAL_PE=111,SQD_FLG_PE='111',SQD_VAL_PP=111,SQD_FLG_PP='111',SQD_VAL_HH=111,SQD_FLG_HH='111',SQD_VAL_HD=111,SQD_FLG_HD='111',SQD_VAL_ONOFF=111,SQD_FLG_ONOFF='111',SQD_AUDIT_CD=now(); + if (sqlValue("select count(*) from rep_soap_syndis_quality_data where SQD_DRS_ID=".$devID)==0) + { + + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + if ($wl["wells"][$i]["pressureInPistonBody"]["value"]>0) + { + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + } + else + { + $ppValue = (float) (($wl["wells"][$i]["pressureInPistonBodymA"]["value"] - 4) / 16 * $vpp - (($wl["wells"][$i]["barometricPressuremA"]["value"] * 10) / 98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBodymA"]["flag"]; + } + //przeliczanie HH + if ($wl["wells"][$i]["waterTablePosition"]["value"]>0) + { + $hhValue = (float) $wl["wells"][$i]["waterTablePosition"]["value"]; + $hhFlag = $wl["wells"][$i]["waterTablePosition"]["flag"]; + } + else + { + $hhValue = (float) (($wl["wells"][$i]["waterTablePositionmA"]["value"] - 4) / 16 * $vhh - (($wl["wells"][$i]["barometricPressuremA"]["value"] * 10) / 98)); + $hhFlag = $wl["wells"][$i]["waterTablePositionmA"]["flag"]; + } + // ============================================================================== + + + + mysql_query(" + INSERT INTO rep_soap_syndis_quality_data SET + SQD_DRS_ID=".$devID.", + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' + "); + + } + else { + + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + if ($wl["wells"][$i]["pressureInPistonBody"]["value"]>0) + { + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + } + else + { + $ppValue = (float) (($wl["wells"][$i]["pressureInPistonBodymA"]["value"] - 4) / 16 * $vpp - (($wl["wells"][$i]["barometricPressuremA"]["value"] * 10) / 98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBodymA"]["flag"]; + } + //przeliczanie HH + if ($wl["wells"][$i]["waterTablePosition"]["value"]>0) + { + $hhValue = (float) $wl["wells"][$i]["waterTablePosition"]["value"]; + $hhFlag = $wl["wells"][$i]["waterTablePosition"]["flag"]; + } + else + { + $hhValue = (float) (($wl["wells"][$i]["waterTablePositionmA"]["value"] - 4) / 16 * $vhh - (($wl["wells"][$i]["barometricPressuremA"]["value"] * 10) / 98)); + $hhFlag = $wl["wells"][$i]["waterTablePositionmA"]["flag"]; + } + // ============================================================================== + + + + mysql_query(" + update rep_soap_syndis_quality_data SET + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' where SQD_DRS_ID=".$devID + ); + } + // ============================================================================== + + } + + + + + + if ($devID>0 && $wl["wells"][$i]["currentL1"]["flag"] == "CORRECT" && $wl["wells"][$i]["pumpEfficiency"]["flag"]=="CORRECT" && $wl["wells"][$i]["pressureInPistonBodymA"]["flag"]=="CORRECT") + { + if ($wl["wells"][$i]["pumpOnOff"]["value"]==1 && $wl["wells"][$i]["pumpEfficiency"]["value"]>0 && $wl["wells"][$i]["currentL1"]["value"]>0) + { + + //prąd fazy L1 zasilania pompy + if (isNewestData($devID,270,$wl["wells"][$i]["currentL1"]["date"])) + update_new_record($devID, 270, $wl["wells"][$i]["currentL1"]["value"],$scriptDate); + + //prąd fazy L2 zasilania pompy + if (isNewestData($devID,710,$wl["wells"][$i]["currentL2"]["date"])) + update_new_record($devID, 710, $wl["wells"][$i]["currentL2"]["value"],$scriptDate); + + //prąd fazy L3 zasilania pompy + if (isNewestData($devID,711,$wl["wells"][$i]["currentL3"]["date"])) + update_new_record($devID, 711, $wl["wells"][$i]["currentL3"]["value"],$scriptDate); + + //[voltageL12] => U L12 [V] - napięcie międzyfazowe L1-L2 + if (isNewestData($devID,275,$wl["wells"][$i]["voltageL12"]["date"])) + update_new_record($devID, 275, $wl["wells"][$i]["voltageL12"]["value"],$scriptDate); + + //[voltageL23] => U L23 [V] - napięcie międzyfazowe L2-L3 + if (isNewestData($devID,712,$wl["wells"][$i]["voltageL23"]["date"])) + update_new_record($devID, 712, $wl["wells"][$i]["voltageL23"]["value"],$scriptDate); + + //[throttlePosition] => Położenie przepustnicy [*] + if (isNewestData($devID,730,$wl["wells"][$i]["throttlePosition"]["date"]) && $wellType==19) + update_new_record($devID, 730, $wl["wells"][$i]["throttlePosition"]["value"],$scriptDate); + elseif (isNewestData($devID,730,$wl["wells"][$i]["throttlePosition"]["date"]) && $wellType==18) + { + $tmpDivP1P2=0; + $tmpDivP1P2 = ($wl["wells"][$i]["pressureAfterThrottle"]["value"] / $wl["wells"][$i]["pressureBeforeThrottle"]["value"]); + if ($tmpDivP1P2>0.93) + { + update_new_record($devID, 730, 100,$scriptDate); + $wl["wells"][$i]["throttlePosition"]["value"] = 100; + } + else + { + update_new_record($devID, 730, 50,$scriptDate); + $wl["wells"][$i]["throttlePosition"]["value"] = 50; + } + } + + + + //[waterTemperature] => Tw [*C] + if (isNewestData($devID,245,$wl["wells"][$i]["waterTemperature"]["date"])) + update_new_record($devID, 245, $wl["wells"][$i]["waterTemperature"]["value"],$scriptDate); + + //[so52v21ksoTemperature] => Temperatura sterownika [*C] + if (isNewestData($devID,720,$wl["wells"][$i]["so52v21ksoTemperature"]["date"])) + update_new_record($devID, 720, $wl["wells"][$i]["so52v21ksoTemperature"]["value"],$scriptDate); + + //[activePower] => P [kW] + if (isNewestData($devID,260,$wl["wells"][$i]["activePower"]["date"])) + update_new_record($devID, 260, $wl["wells"][$i]["activePower"]["value"],$scriptDate); + + //[cos] => cos(FI) + if (isNewestData($devID,280,$wl["wells"][$i]["cos"]["date"])) + update_new_record($devID, 280, $wl["wells"][$i]["cos"]["value"],$scriptDate); + + //[activeEnergy] => E [kWh] + if (isNewestData($devID,265,$wl["wells"][$i]["activeEnergy"]["date"])) + update_new_record($devID, 265, $wl["wells"][$i]["activeEnergy"]["value"],$scriptDate); + + //[pumpedWaterAmount] => V [m3] + if (isNewestData($devID,230,$wl["wells"][$i]["pumpedWaterAmount"]["date"])) + update_new_record($devID, 230, $wl["wells"][$i]["pumpedWaterAmount"]["value"],$scriptDate); + + //[ClInPumpedWater] => ch [mg/l] + if (isNewestData($devID,719,$wl["wells"][$i]["ClInPumpedWater"]["date"])) + update_new_record($devID, 719, $wl["wells"][$i]["ClInPumpedWater"]["value"],$scriptDate); + + //[energyConsumption] => Jednostkowe zużycie energii [kWh/m3/m] + if (isNewestData($devID,721,$wl["wells"][$i]["energyConsumption"]["date"])) + update_new_record($devID, 721, $wl["wells"][$i]["energyConsumption"]["value"],$scriptDate); + + //[pumpRuntime] => t [h] + if (isNewestData($devID,290,$wl["wells"][$i]["pumpRuntime"]["date"])) + update_new_record($devID, 290, $wl["wells"][$i]["pumpRuntime"]["value"],$scriptDate); + + //[dynamicWaterTable] => HD [m] + if ($wl["wells"][$i]["dynamicWaterTable"]["value"]>0 && isNewestData($devID,205,$wl["wells"][$i]["dynamicWaterTable"]["date"])) + update_new_record($devID, 205, $wl["wells"][$i]["dynamicWaterTable"]["value"],$scriptDate); + + + //[HdFromSetpoint] => Zadana wartość Hd od [m] +// update_new_record($devID, 722, $wl["wells"][$i]["HdFromSetpoint"]["value"],$scriptDate); + //[HdToSetpoint] => Zadana wartość Hd do [m] +// update_new_record($devID, 723, $wl["wells"][$i]["HdToSetpoint"]["value"],$scriptDate); + + + //[pressureBeforeThrottle] => p1 [kPa] + if (isNewestData($devID,215,$wl["wells"][$i]["pressureBeforeThrottle"]["date"])) + update_new_record($devID, 215, $wl["wells"][$i]["pressureBeforeThrottle"]["value"],$scriptDate); + + //[pressureAfterThrottle] => p2 [kPa] + if (isNewestData($devID,220,$wl["wells"][$i]["pressureAfterThrottle"]["date"])) + update_new_record($devID, 220, $wl["wells"][$i]["pressureAfterThrottle"]["value"],$scriptDate); + + //[barometricPressuremA] => Ciśnienie barometryczne pB[mA] - zakres 4-20 + if (isNewestData($devID,225,$wl["wells"][$i]["barometricPressuremA"]["date"])) + update_new_record($devID, 225, $wl["wells"][$i]["barometricPressuremA"]["value"] * 10,$scriptDate); + + + //[pumpEfficiency] => Q [m3/min] + if (isNewestData($devID,200,$wl["wells"][$i]["pumpEfficiency"]["date"])) + update_new_record($devID, 200, $wl["wells"][$i]["pumpEfficiency"]["value"] * 60,$scriptDate); + + //[QFromSetpoint] => Zadana wartość wydajności od [m3/min] +// update_new_record($devID, 724, $wl["wells"][$i]["QFromSetpoint"]["value"] * 60,$scriptDate); + //[QToSetpoint] => Zadana wartość wydajności do [m3/min] +// update_new_record($devID, 725, $wl["wells"][$i]["QToSetpoint"]["value"] * 60,$scriptDate); + //[QminSetpoint] => Zadana wartość minimalnej wydajności [m3/min] +// update_new_record($devID, 726, $wl["wells"][$i]["QminSetpoint"]["value"],$scriptDate); + + + //[currentDiagnosticsOperationState] => Działanie/niedziałanie [1/0] diagnostyki prądowej + if (isNewestData($devID,708,$wl["wells"][$i]["currentDiagnosticsOperationState"]["date"])) + update_new_record($devID, 708, $wl["wells"][$i]["currentDiagnosticsOperationState"]["value"],$scriptDate); + + + $bar = ($wl["wells"][$i]["barometricPressuremA"]["value"] * 10) / 98; + //[pressureInPistonBodymA] => pp [mA] - zakres 4-20 + $pp_tmp = (($wl["wells"][$i]["pressureInPistonBodymA"]["value"] - 4) / 16 * $vpp - $bar); + if ($pp_tmp <0) $pp_tmp=0; + + if (isNewestData($devID,401,$wl["wells"][$i]["pressureInPistonBodymA"]["date"])) + update_new_record($devID, 401, $pp_tmp,$scriptDate); + //[waterTablePositionmA] => HH [mA] - zakres 4-20 + $hh_tmp = (($wl["wells"][$i]["waterTablePositionmA"]["value"] - 4) / 16 * $vhh - $bar); + if ($hh_tmp <0) $hh_tmp=0; + + if (isNewestData($devID,402,$wl["wells"][$i]["waterTablePositionmA"]["date"])) + update_new_record($devID, 402, $hh_tmp,$scriptDate); + + + // wpisuje dane do tabeli major_data (logi + FastAccess) + //INSERT INTO seg_dev_major_data SET DRD_OBJECT_TYPE='WELL',DMD_DRS_ID=3134,DRD_OBJECT_NAME='G54',DRD_L1=1,DRD_L2=1,DRD_L3=1,DRD_U_L12=1,DRD_U_L23=1,DRD_THROTTLE=1,DRD_WATER_TEMP=1,DRD_POWER=1,DRD_COS_FI=1,DRD_ENERGY=1,DRD_WATER_PUMPED=1,DRD_RUN_TIME=1,DRD_HD=1,DRD_P1=1,DRD_P2=1,DRD_PB=1,DRD_Q=1,DRD_PP=1,DRD_HH=1,DRD_HST=1,DMD_WORK_STATUS='ON',DRD_AUDIT_CD=now() + mysql_query("INSERT INTO seg_dev_major_data SET DRD_OBJECT_TYPE='WELL',DMD_DRS_ID=".$devID.",DRD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',DRD_L1=".$wl["wells"][$i]["currentL1"]["value"].",DRD_L2=".$wl["wells"][$i]["currentL2"]["value"].",DRD_L3=".$wl["wells"][$i]["currentL3"]["value"].",DRD_U_L12=".$wl["wells"][$i]["voltageL12"]["value"].",DRD_U_L23=".$wl["wells"][$i]["voltageL23"]["value"].",DRD_THROTTLE=".$wl["wells"][$i]["throttlePosition"]["value"].",DRD_WATER_TEMP=".$wl["wells"][$i]["waterTemperature"]["value"].",DRD_POWER=".$wl["wells"][$i]["activePower"]["value"].",DRD_COS_FI=".$wl["wells"][$i]["cos"]["value"].",DRD_ENERGY=".$wl["wells"][$i]["activeEnergy"]["value"].",DRD_WATER_PUMPED=".$wl["wells"][$i]["pumpedWaterAmount"]["value"].",DRD_RUN_TIME=".$wl["wells"][$i]["pumpRuntime"]["value"].",DRD_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].",DRD_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].",DRD_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].",DRD_PB=".($wl["wells"][$i]["barometricPressuremA"]["value"] * 10).",DRD_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).",DRD_PP=".$pp_tmp.",DRD_HH=".$hh_tmp.",DRD_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",DMD_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',DRD_AUDIT_CD='".$scriptDate."'"); + + + + + // wpisuje dane do tabeli odnośnie energochłonności + // ====================================================================== // + $getEnergyValue=null; + $qParam = $wl["wells"][$i]["pumpEfficiency"]["value"] * 60; + $resHD = $wl["wells"][$i]["dynamicWaterTable"]["value"]; + $P2param = $wl["wells"][$i]["pressureAfterThrottle"]["value"]; + $PEparam = $wl["wells"][$i]["activePower"]["value"]; + if (empty($PEparam)) $PEparam=1; + + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$devID."))")); + $YellowGreenParam = setYellowGreenLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$devID."))")); + + if ($resETA<=$RedYellowParam) + $getEnergyValue = "R"; + else if ($RedYellowParam<$resETA && $resETA<=$YellowGreenParam) + $getEnergyValue = "Y"; + else if ($resETA>$YellowGreenParam) + $getEnergyValue = "G"; + + //mysql_query("INSERT INTO rep_dev_details SET RDD_DRS_ID=".$devID.",RDD_RESOURCES_DETAIL=729,RDD_VALUE='".$getEnergyValue."',RDD_AUDIT_USR='SYNDIS',RDD_AUDIT_DATE='".$scriptDate."'"); + + if (sqlValue("select count(1) from rep_soap_well_energy where SWE_DRS_ID=".$devID)>0) + mysql_query("UPDATE rep_soap_well_energy SET SWE_VALUE='".$getEnergyValue."',SWE_AUDIT_USR='SYNDIS',SWE_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',SWE_AUDIT_DATE='".$scriptDate."' WHERE SWE_DRS_ID=".$devID); + else + mysql_query("INSERT INTO rep_soap_well_energy SET SWE_DRS_ID=".$devID.",SWE_WELL_ID=".$wellID.",SWE_NAME='".$wl["wells"][$i]["well"]["id"]."',SWE_VALUE='".$getEnergyValue."',SWE_AUDIT_USR='SYNDIS',SWE_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',SWE_AUDIT_DATE='".$scriptDate."'"); + // ====================================================================== // + + + } + + //[staticWaterTable] => HST [m] + //update_new_record($devID, 210, $wl["staticWaterTable"]["value"],$scriptDate); + + + + //echo"currentL1: ".$wl["currentL1"]["value"]."</br>"; + + // log do bazy + //mysql_query("INSERT INTO sys_syndis_logs SET SYL_WELL='" . $wName . "',SYL_CURRENTL1='" . $wl["currentL1"]["value"] . "',SYL_CURRENTL2='" . $wl["currentL2"]["value"] . "',SYL_CURRENTL3='" . $wl["currentL3"]["value"] . "',SYL_VOLTAGEL12='" . $wl["voltageL12"]["value"] . "',SYL_VOLTAGEL23='" . $wl["voltageL23"]["value"] . "',SYL_ACTIVEPOWER='" . $wl["activePower"]["value"] . "',SYL_COS='" . $wl["cos"]["value"] . "',SYL_ACTIVEENERGY='" . $wl["activeEnergy"]["value"] . "',SYL_WATERTEMPERATURE='" . $wl["waterTemperature"]["value"] . "',SYL_CLINPUMPEDWATER='" . $wl["ClInPumpedWater"]["value"] . "',SYL_CURRENTDIAGNOSTICS='" . $wl["currentDiagnosticsOperationState"]["value"] . "',SYL_STATICWATERTABLE='" . $wl["staticWaterTable"]["value"] . "',SYL_DYNAMICWATERTABLE='" . $wl["dynamicWaterTable"]["value"] . "',SYL_PRESSUREBEFORETHROTTLEMA='" . $wl["pressureBeforeThrottlemA"]["value"] . "',SYL_PRESSUREAFTERTHROTTLEMA='" . $wl["pressureAfterThrottlemA"]["value"] . "',SYL_PRESSUREINPISTONBODYMA='" . $wl["pressureInPistonBodymA"]["value"] . "',SYL_PUMPEFFICIENCYMA='" . $wl["pumpEfficiencymA"]["value"] . "',SYL_WATERTABLEPOSITIONMA='" . $wl["waterTablePositionmA"]["value"] . "',SYL_BAROMETRICPRESSUREMA='" . $wl["barometricPressuremA"]["value"] . "',SYL_DATA='" . $scriptDate . "'"); + } + else + { + echo"Dane InCorrect </br>"; + + } + + + // aktualizauje status pomiaru + mysql_query("UPDATE rep_soap_well_energy SET SWE_WORK_STATUS='".$wl["wells"][$i]["currentL1"]["flag"]."' WHERE SWE_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + + + /* + +![well] => nazwa studni, np. "G50" + +![piezometer] => nazwa piezometru, np. "PS-110-1" +![staticWaterTable] => HST [m] + + + */ + + + + //echo"</br></br>"; + + + +} + + + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/sites/backup/soap_update5min_01.php b/sites/backup/soap_update5min_01.php new file mode 100644 index 0000000..96b1a8c --- /dev/null +++ b/sites/backup/soap_update5min_01.php @@ -0,0 +1,454 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function update_new_record($devID, $dicID, $value,$insertDate) +{ + $insertDate = str_replace(array('T','Z'), array(' ',''),$insertDate); + + $value = round($value,2); + + $drdID = sqlValue("select SQL_NO_CACHE max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=".$dicID." and DRD_DRS_ID=".$devID); + if ($drdID>0) + { + mysql_query("UPDATE seg_dev_resources_det SET DRD_VALUE='".round($value,2)."',DRD_AUDIT_DATE='".$insertDate."',DRD_AUDIT_USR='SYNDIS' WHERE DRD_ID=".$drdID); +// echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$dicID, "DIC_POL_LANG")." [$dicID]: ".$value; + } + //echo"</br>"; +} + + + + +function isNewestData($devID,$dicID,$insertDate) +{ + $res = false; + $insertDate = str_replace(array('T','Z'), array(' ',''),$insertDate); + $insertDateValue = (float) str_replace(array('-',':',' '),array('','',''),$insertDate); + + $lastMasureDate = sqlStringValue("select getLastMeasureDate(".$dicID.",".$devID.") MT","MT"); + $lastMasureDateValue = (float) str_replace(array('-',':',' '),array('','',''),$lastMasureDate); + + if ($insertDateValue>$lastMasureDateValue) + $res=true; + + return $res; +} + +function convertData($insertDate) +{ + unset($res); + $res = str_replace(array('T','Z'), array(' ',''),$insertDate); + + return $res; +} + + + + +// pobieramy tablice studni +$well_array=null; +$wynik = mysql_query("select DISTINCT DRD_OBJECT_NAME from seg_dev_major_data left join seg_wells on DRD_OBJECT_NAME=WLL_NAME where DRD_OBJECT_TYPE='WELL' and DMD_WORK_STATUS='1' and WLL_HH_SCOPE>0 and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["DRD_OBJECT_NAME"]; +} +//print_r($cl->GetWellsDataAsArray(array('G52','G54'))); //Pobieranie danych dla wszystkich studni +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + //echo "Name: ". $wl["wells"][$i]["well"]["id"]."<br/>"; + + $devID=null; $wellID=null; $vpp=null; $vhh=null; + $wynik_W = mysql_query("select DRS_ID,WLL_ID,WLL_PP_SCOPE,WLL_HH_SCOPE,WLL_CAT_DIC_ID from seg_wells left join seg_dev_resources on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where WLL_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + if($wynik_W)while ($r_W = mysql_fetch_array($wynik_W)) + { + $devID = $r_W["DRS_ID"]; + $wellID = $r_W["WLL_ID"]; + $vpp=$r_W["WLL_PP_SCOPE"]; if ($vpp==0) $vpp=500; + $vhh=$r_W["WLL_HH_SCOPE"]; + $wellType = $r_W["WLL_CAT_DIC_ID"]; + } + + + //sprawdza stan załączenia pompy + if (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='ON' && $wl["wells"][$i]["pumpOnOff"]["value"]==0) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$scriptDate."'"); + } + //sprawdza stan załączenia pompy + elseif (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='OFF' && $wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$scriptDate."'"); + } + + + // sprawdza, czy pompa jest włączona + if ($wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //rejestruje dane bez względu na ich jakość - prezentacja informacji w SYNDIS + //INSERT INTO rep_soap_syndis_quality_data SET SQD_DRS_ID=111,SQD_OBJECT_NAME='111',SQD_NAME='111',SQD_VAL_Q=111,SQD_FLG_Q='111',SQD_VAL_P1=111,SQD_FLG_P1='111',SQD_VAL_P2=111,SQD_FLG_P2='111',SQD_VAL_PE=111,SQD_FLG_PE='111',SQD_VAL_PP=111,SQD_FLG_PP='111',SQD_VAL_HH=111,SQD_FLG_HH='111',SQD_VAL_HD=111,SQD_FLG_HD='111',SQD_VAL_ONOFF=111,SQD_FLG_ONOFF='111',SQD_AUDIT_CD=now(); + if (sqlValue("select count(*) from rep_soap_syndis_quality_data where SQD_DRS_ID=".$devID)==0) + { + + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + if ($wl["wells"][$i]["pressureInPistonBody"]["value"]>0) + { + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + + $ppValue = (float) ($ppValue - (($wl["wells"][$i]["barometricPressuremA"]["value"]*10)/98)); + } + else + { + $ppValue = (float) (($wl["wells"][$i]["pressureInPistonBodymA"]["value"] - 4) / 16 * $vpp - (($wl["wells"][$i]["barometricPressuremA"]["value"] * 10) / 98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBodymA"]["flag"]; + } + //przeliczanie HH + unset($lpValue); + $lpValue = (float) sqlStringValue("select getLastValue(240,".$devID.") HHV", "HHV"); + $hhValue = (float) $lpValue - ($wl["wells"][$i]["dynamicWaterTable"]["value"]); + $hhFlag = $wl["wells"][$i]["dynamicWaterTable"]["flag"]; + // ============================================================================== + + + + mysql_query(" + INSERT INTO rep_soap_syndis_quality_data SET + SQD_DRS_ID=".$devID.", + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' + "); + + } + else { + + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + if ($wl["wells"][$i]["pressureInPistonBody"]["value"]>0) + { + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + + $ppValue = (float) ($ppValue - (($wl["wells"][$i]["barometricPressuremA"]["value"]*10)/98)); + } + else + { + $ppValue = (float) (($wl["wells"][$i]["pressureInPistonBodymA"]["value"] - 4) / 16 * $vpp - (($wl["wells"][$i]["barometricPressuremA"]["value"] * 10) / 98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBodymA"]["flag"]; + } + //przeliczanie HH + unset($lpValue); + $lpValue = (float) sqlStringValue("select getLastValue(240,".$devID.") HHV", "HHV"); + $hhValue = (float) $lpValue - ($wl["wells"][$i]["dynamicWaterTable"]["value"]); + $hhFlag = $wl["wells"][$i]["dynamicWaterTable"]["flag"]; + // ============================================================================== + + + + mysql_query(" + update rep_soap_syndis_quality_data SET + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' where SQD_DRS_ID=".$devID + ); + } + // ============================================================================== + + } + + + + + + if ($devID>0 && $wl["wells"][$i]["currentL1"]["flag"] == "CORRECT" && $wl["wells"][$i]["pumpEfficiency"]["flag"]=="CORRECT" && $wl["wells"][$i]["pressureInPistonBodymA"]["flag"]=="CORRECT") + { + if ($wl["wells"][$i]["pumpOnOff"]["value"]==1 && $wl["wells"][$i]["pumpEfficiency"]["value"]>0 && $wl["wells"][$i]["currentL1"]["value"]>0) + { + + //prąd fazy L1 zasilania pompy + if (isNewestData($devID,270,$wl["wells"][$i]["currentL1"]["date"])) + update_new_record($devID, 270, $wl["wells"][$i]["currentL1"]["value"],$scriptDate); + + //prąd fazy L2 zasilania pompy + if (isNewestData($devID,710,$wl["wells"][$i]["currentL2"]["date"])) + update_new_record($devID, 710, $wl["wells"][$i]["currentL2"]["value"],$scriptDate); + + //prąd fazy L3 zasilania pompy + if (isNewestData($devID,711,$wl["wells"][$i]["currentL3"]["date"])) + update_new_record($devID, 711, $wl["wells"][$i]["currentL3"]["value"],$scriptDate); + + //[voltageL12] => U L12 [V] - napięcie międzyfazowe L1-L2 + if (isNewestData($devID,275,$wl["wells"][$i]["voltageL12"]["date"])) + update_new_record($devID, 275, $wl["wells"][$i]["voltageL12"]["value"],$scriptDate); + + //[voltageL23] => U L23 [V] - napięcie międzyfazowe L2-L3 + if (isNewestData($devID,712,$wl["wells"][$i]["voltageL23"]["date"])) + update_new_record($devID, 712, $wl["wells"][$i]["voltageL23"]["value"],$scriptDate); + + //[throttlePosition] => Położenie przepustnicy [*] + if (isNewestData($devID,730,$wl["wells"][$i]["throttlePosition"]["date"]) && $wellType==19) + update_new_record($devID, 730, $wl["wells"][$i]["throttlePosition"]["value"],$scriptDate); + elseif (isNewestData($devID,730,$wl["wells"][$i]["throttlePosition"]["date"]) && $wellType==18) + { + $tmpDivP1P2=0; + $tmpDivP1P2 = ($wl["wells"][$i]["pressureAfterThrottle"]["value"] / $wl["wells"][$i]["pressureBeforeThrottle"]["value"]); + if ($tmpDivP1P2>0.93) + { + update_new_record($devID, 730, 100,$scriptDate); + $wl["wells"][$i]["throttlePosition"]["value"] = 100; + } + else + { + update_new_record($devID, 730, 50,$scriptDate); + $wl["wells"][$i]["throttlePosition"]["value"] = 50; + } + } + + + + //[waterTemperature] => Tw [*C] + if (isNewestData($devID,245,$wl["wells"][$i]["waterTemperature"]["date"])) + update_new_record($devID, 245, $wl["wells"][$i]["waterTemperature"]["value"],$scriptDate); + + //[so52v21ksoTemperature] => Temperatura sterownika [*C] + if (isNewestData($devID,720,$wl["wells"][$i]["so52v21ksoTemperature"]["date"])) + update_new_record($devID, 720, $wl["wells"][$i]["so52v21ksoTemperature"]["value"],$scriptDate); + + //[activePower] => P [kW] + if (isNewestData($devID,260,$wl["wells"][$i]["activePower"]["date"])) + update_new_record($devID, 260, $wl["wells"][$i]["activePower"]["value"],$scriptDate); + + //[cos] => cos(FI) + if (isNewestData($devID,280,$wl["wells"][$i]["cos"]["date"])) + update_new_record($devID, 280, $wl["wells"][$i]["cos"]["value"],$scriptDate); + + //[activeEnergy] => E [kWh] + if (isNewestData($devID,265,$wl["wells"][$i]["activeEnergy"]["date"])) + update_new_record($devID, 265, $wl["wells"][$i]["activeEnergy"]["value"],$scriptDate); + + //[pumpedWaterAmount] => V [m3] + if (isNewestData($devID,230,$wl["wells"][$i]["pumpedWaterAmount"]["date"])) + update_new_record($devID, 230, $wl["wells"][$i]["pumpedWaterAmount"]["value"],$scriptDate); + + //[ClInPumpedWater] => ch [mg/l] + if (isNewestData($devID,719,$wl["wells"][$i]["ClInPumpedWater"]["date"])) + update_new_record($devID, 719, $wl["wells"][$i]["ClInPumpedWater"]["value"],$scriptDate); + + //[energyConsumption] => Jednostkowe zużycie energii [kWh/m3/m] + if (isNewestData($devID,721,$wl["wells"][$i]["energyConsumption"]["date"])) + update_new_record($devID, 721, $wl["wells"][$i]["energyConsumption"]["value"],$scriptDate); + + //[pumpRuntime] => t [h] + if (isNewestData($devID,290,$wl["wells"][$i]["pumpRuntime"]["date"])) + update_new_record($devID, 290, $wl["wells"][$i]["pumpRuntime"]["value"],$scriptDate); + + //[dynamicWaterTable] => HD [m] + if ($wl["wells"][$i]["dynamicWaterTable"]["value"]>0 && isNewestData($devID,205,$wl["wells"][$i]["dynamicWaterTable"]["date"])) + update_new_record($devID, 205, $wl["wells"][$i]["dynamicWaterTable"]["value"],$scriptDate); + + + //[HdFromSetpoint] => Zadana wartość Hd od [m] +// update_new_record($devID, 722, $wl["wells"][$i]["HdFromSetpoint"]["value"],$scriptDate); + //[HdToSetpoint] => Zadana wartość Hd do [m] +// update_new_record($devID, 723, $wl["wells"][$i]["HdToSetpoint"]["value"],$scriptDate); + + + //[pressureBeforeThrottle] => p1 [kPa] + if (isNewestData($devID,215,$wl["wells"][$i]["pressureBeforeThrottle"]["date"])) + update_new_record($devID, 215, $wl["wells"][$i]["pressureBeforeThrottle"]["value"],$scriptDate); + + //[pressureAfterThrottle] => p2 [kPa] + if (isNewestData($devID,220,$wl["wells"][$i]["pressureAfterThrottle"]["date"])) + update_new_record($devID, 220, $wl["wells"][$i]["pressureAfterThrottle"]["value"],$scriptDate); + + //[barometricPressuremA] => Ciśnienie barometryczne pB[mA] - zakres 4-20 + if (isNewestData($devID,225,$wl["wells"][$i]["barometricPressuremA"]["date"])) + update_new_record($devID, 225, $wl["wells"][$i]["barometricPressuremA"]["value"] * 10,$scriptDate); + + + //[pumpEfficiency] => Q [m3/min] + if (isNewestData($devID,200,$wl["wells"][$i]["pumpEfficiency"]["date"])) + update_new_record($devID, 200, $wl["wells"][$i]["pumpEfficiency"]["value"] * 60,$scriptDate); + + //[QFromSetpoint] => Zadana wartość wydajności od [m3/min] +// update_new_record($devID, 724, $wl["wells"][$i]["QFromSetpoint"]["value"] * 60,$scriptDate); + //[QToSetpoint] => Zadana wartość wydajności do [m3/min] +// update_new_record($devID, 725, $wl["wells"][$i]["QToSetpoint"]["value"] * 60,$scriptDate); + //[QminSetpoint] => Zadana wartość minimalnej wydajności [m3/min] +// update_new_record($devID, 726, $wl["wells"][$i]["QminSetpoint"]["value"],$scriptDate); + + + //[currentDiagnosticsOperationState] => Działanie/niedziałanie [1/0] diagnostyki prądowej + if (isNewestData($devID,708,$wl["wells"][$i]["currentDiagnosticsOperationState"]["date"])) + update_new_record($devID, 708, $wl["wells"][$i]["currentDiagnosticsOperationState"]["value"],$scriptDate); + + + $pp_tmp = $ppValue; + if (isNewestData($devID,401,$wl["wells"][$i]["pressureInPistonBodymA"]["date"])) + update_new_record($devID, 401, $pp_tmp,$scriptDate); + + $hh_tmp = $hhValue; + if (isNewestData($devID,402,$wl["wells"][$i]["waterTablePositionmA"]["date"])) + update_new_record($devID, 402, $hh_tmp,$scriptDate); + + + // wpisuje dane do tabeli major_data (logi + FastAccess) + //INSERT INTO seg_dev_major_data SET DRD_OBJECT_TYPE='WELL',DMD_DRS_ID=3134,DRD_OBJECT_NAME='G54',DRD_L1=1,DRD_L2=1,DRD_L3=1,DRD_U_L12=1,DRD_U_L23=1,DRD_THROTTLE=1,DRD_WATER_TEMP=1,DRD_POWER=1,DRD_COS_FI=1,DRD_ENERGY=1,DRD_WATER_PUMPED=1,DRD_RUN_TIME=1,DRD_HD=1,DRD_P1=1,DRD_P2=1,DRD_PB=1,DRD_Q=1,DRD_PP=1,DRD_HH=1,DRD_HST=1,DMD_WORK_STATUS='ON',DRD_AUDIT_CD=now() + mysql_query("INSERT INTO seg_dev_major_data SET DRD_OBJECT_TYPE='WELL',DMD_DRS_ID=".$devID.",DRD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',DRD_L1=".$wl["wells"][$i]["currentL1"]["value"].",DRD_L2=".$wl["wells"][$i]["currentL2"]["value"].",DRD_L3=".$wl["wells"][$i]["currentL3"]["value"].",DRD_U_L12=".$wl["wells"][$i]["voltageL12"]["value"].",DRD_U_L23=".$wl["wells"][$i]["voltageL23"]["value"].",DRD_THROTTLE=".$wl["wells"][$i]["throttlePosition"]["value"].",DRD_WATER_TEMP=".$wl["wells"][$i]["waterTemperature"]["value"].",DRD_POWER=".$wl["wells"][$i]["activePower"]["value"].",DRD_COS_FI=".$wl["wells"][$i]["cos"]["value"].",DRD_ENERGY=".$wl["wells"][$i]["activeEnergy"]["value"].",DRD_WATER_PUMPED=".$wl["wells"][$i]["pumpedWaterAmount"]["value"].",DRD_RUN_TIME=".$wl["wells"][$i]["pumpRuntime"]["value"].",DRD_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].",DRD_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].",DRD_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].",DRD_PB=".($wl["wells"][$i]["barometricPressuremA"]["value"] * 10).",DRD_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).",DRD_PP=".$pp_tmp.",DRD_HH=".$hh_tmp.",DRD_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",DMD_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',DRD_AUDIT_CD='".$scriptDate."'"); + + + + + // wpisuje dane do tabeli odnośnie energochłonności + // ====================================================================== // + $getEnergyValue=null; + $qParam = $wl["wells"][$i]["pumpEfficiency"]["value"] * 60; + $resHD = $wl["wells"][$i]["dynamicWaterTable"]["value"]; + $P2param = $wl["wells"][$i]["pressureAfterThrottle"]["value"]; + $PEparam = $wl["wells"][$i]["activePower"]["value"]; + if (empty($PEparam)) $PEparam=1; + + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$devID."))")); + $YellowGreenParam = setYellowGreenLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$devID."))")); + + if ($resETA<=$RedYellowParam) + $getEnergyValue = "R"; + else if ($RedYellowParam<$resETA && $resETA<=$YellowGreenParam) + $getEnergyValue = "Y"; + else if ($resETA>$YellowGreenParam) + $getEnergyValue = "G"; + + if ($wellType==20) $getEnergyValue = "NN"; + + //mysql_query("INSERT INTO rep_dev_details SET RDD_DRS_ID=".$devID.",RDD_RESOURCES_DETAIL=729,RDD_VALUE='".$getEnergyValue."',RDD_AUDIT_USR='SYNDIS',RDD_AUDIT_DATE='".$scriptDate."'"); + + if (sqlValue("select count(1) from rep_soap_well_energy where SWE_DRS_ID=".$devID)>0) + mysql_query("UPDATE rep_soap_well_energy SET SWE_VALUE='".$getEnergyValue."',SWE_AUDIT_USR='SYNDIS',SWE_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',SWE_AUDIT_DATE='".$scriptDate."' WHERE SWE_DRS_ID=".$devID); + else + mysql_query("INSERT INTO rep_soap_well_energy SET SWE_DRS_ID=".$devID.",SWE_WELL_ID=".$wellID.",SWE_NAME='".$wl["wells"][$i]["well"]["id"]."',SWE_VALUE='".$getEnergyValue."',SWE_AUDIT_USR='SYNDIS',SWE_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',SWE_AUDIT_DATE='".$scriptDate."'"); + // ====================================================================== // + + + } + + //[staticWaterTable] => HST [m] + //update_new_record($devID, 210, $wl["staticWaterTable"]["value"],$scriptDate); + + + + //echo"currentL1: ".$wl["currentL1"]["value"]."</br>"; + + // log do bazy + //mysql_query("INSERT INTO sys_syndis_logs SET SYL_WELL='" . $wName . "',SYL_CURRENTL1='" . $wl["currentL1"]["value"] . "',SYL_CURRENTL2='" . $wl["currentL2"]["value"] . "',SYL_CURRENTL3='" . $wl["currentL3"]["value"] . "',SYL_VOLTAGEL12='" . $wl["voltageL12"]["value"] . "',SYL_VOLTAGEL23='" . $wl["voltageL23"]["value"] . "',SYL_ACTIVEPOWER='" . $wl["activePower"]["value"] . "',SYL_COS='" . $wl["cos"]["value"] . "',SYL_ACTIVEENERGY='" . $wl["activeEnergy"]["value"] . "',SYL_WATERTEMPERATURE='" . $wl["waterTemperature"]["value"] . "',SYL_CLINPUMPEDWATER='" . $wl["ClInPumpedWater"]["value"] . "',SYL_CURRENTDIAGNOSTICS='" . $wl["currentDiagnosticsOperationState"]["value"] . "',SYL_STATICWATERTABLE='" . $wl["staticWaterTable"]["value"] . "',SYL_DYNAMICWATERTABLE='" . $wl["dynamicWaterTable"]["value"] . "',SYL_PRESSUREBEFORETHROTTLEMA='" . $wl["pressureBeforeThrottlemA"]["value"] . "',SYL_PRESSUREAFTERTHROTTLEMA='" . $wl["pressureAfterThrottlemA"]["value"] . "',SYL_PRESSUREINPISTONBODYMA='" . $wl["pressureInPistonBodymA"]["value"] . "',SYL_PUMPEFFICIENCYMA='" . $wl["pumpEfficiencymA"]["value"] . "',SYL_WATERTABLEPOSITIONMA='" . $wl["waterTablePositionmA"]["value"] . "',SYL_BAROMETRICPRESSUREMA='" . $wl["barometricPressuremA"]["value"] . "',SYL_DATA='" . $scriptDate . "'"); + } + else + { + echo"Dane InCorrect </br>"; + + } + + + // aktualizauje status pomiaru + mysql_query("UPDATE rep_soap_well_energy SET SWE_WORK_STATUS='".$wl["wells"][$i]["currentL1"]["flag"]."' WHERE SWE_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + + + /* + +![well] => nazwa studni, np. "G50" + +![piezometer] => nazwa piezometru, np. "PS-110-1" +![staticWaterTable] => HST [m] + + + */ + + + + //echo"</br></br>"; + + + +} + + + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/sites/closewindow.php b/sites/closewindow.php new file mode 100644 index 0000000..ef3573c --- /dev/null +++ b/sites/closewindow.php @@ -0,0 +1,5 @@ +<<script type="text/javascript"> +<!-- +window.close(); +//--> +</script> diff --git a/sites/eqdocgeneratefromdb.php b/sites/eqdocgeneratefromdb.php new file mode 100644 index 0000000..dc5432c --- /dev/null +++ b/sites/eqdocgeneratefromdb.php @@ -0,0 +1,54 @@ +<?php ob_start(); ?> +<?php + + +if(isset($_GET['fno'])) +{ +// include"/var/www/dbaccess.php"; +// $polacz = mysql_connect($softspm_host, $demo_softspm_user, $demo_softspm_pass);mysql_select_db($demo_softspm_db); + +// $polacz = mysql_connect('localhost', 'segap', 'segap');mysql_select_db('segap'); + $polacz = mysql_connect('localhost', 'softspm', 'ff8efe59e7265fe9680b0c325e44cb53');mysql_select_db('softspm'); + mysql_query("SET NAMES utf8"); + mysql_query("SET CHARACTER_SET utf8_general_ci"); + + $id = $_GET['fno']; + $query = "select EQF_FILE_NAME,EQF_FILE_TYPE,EQF_FILE_SIZE,EQF_FILE from seg_equipments_files where EQF_ID=$id"; + $result = mysql_query($query) or die('Error, query failed'); + list($name, $type, $size, $content) = mysql_fetch_array($result); + + header("Content-length: $size"); + header("Content-type: $type"); + header("Content-Disposition: download; filename=$name"); + echo $content; + mysql_close($polacz); + exit; +} +?> +<?php ob_end_flush();?> + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sites/filegeneratefromdb.php b/sites/filegeneratefromdb.php new file mode 100644 index 0000000..292b47b --- /dev/null +++ b/sites/filegeneratefromdb.php @@ -0,0 +1,54 @@ +<?php ob_start(); ?> +<?php + + +if(isset($_GET['fno'])) +{ +// include"/var/www/dbaccess.php"; +// $polacz = mysql_connect($softspm_host, $demo_softspm_user, $demo_softspm_pass);mysql_select_db($demo_softspm_db); + +// $polacz = mysql_connect('localhost', 'segap', 'segap');mysql_select_db('segap'); + $polacz = mysql_connect('localhost', 'softspm', 'ff8efe59e7265fe9680b0c325e44cb53');mysql_select_db('softspm'); + mysql_query("SET NAMES utf8"); + mysql_query("SET CHARACTER_SET utf8_general_ci"); + + $id = $_GET['fno']; + $query = "select SKB_FILE_NAME,SKB_FILE_TYPE,SKB_FILE_SIZE,SKB_FILE from seg_knowledge_base where SKB_ID=$id"; + $result = mysql_query($query) or die('Error, query failed'); + list($name, $type, $size, $content) = mysql_fetch_array($result); + + header("Content-length: $size"); + header("Content-type: $type"); + header("Content-Disposition: download; filename=$name"); + echo $content; + mysql_close($polacz); + exit; +} +?> +<?php ob_end_flush();?> + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sites/movetohistdata.php b/sites/movetohistdata.php new file mode 100644 index 0000000..73d0e48 --- /dev/null +++ b/sites/movetohistdata.php @@ -0,0 +1,29 @@ +<?php ob_start(); ?> +<?php +// include"/var/www/dbaccess.php"; +// $polacz = mysql_connect($softspm_host, $demo_softspm_user, $demo_softspm_pass);mysql_select_db($demo_softspm_db); + +// $polacz = mysql_connect('localhost', 'segap', 'segap');mysql_select_db('segap'); + $polacz = mysql_connect('localhost', 'softspm', 'ff8efe59e7265fe9680b0c325e44cb53');mysql_select_db('softspm'); + mysql_query("SET NAMES utf8"); + mysql_query("SET CHARACTER_SET utf8_general_ci"); + + $wynik = mysql_query("select DRD_DRS_ID,DRD_RESOURCES_DETAIL from seg_dev_resources_det group by DRD_DRS_ID, DRD_RESOURCES_DETAIL having count(DRD_RESOURCES_DETAIL)>20"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_p1 = $r["DRD_DRS_ID"]; + $sql_p2 = $r["DRD_RESOURCES_DETAIL"]; + + $wynik1 = mysql_query("select DRD_ID from seg_dev_resources_det where DRD_DRS_ID=$sql_p1 and DRD_RESOURCES_DETAIL=$sql_p2 and DRD_AUDIT_DATE < ADDDATE(CURDATE(), INTERVAL -7 DAY)"); + if($wynik1)while ($r1 = mysql_fetch_array($wynik1)) + { + $sql_drdID = $r1["DRD_ID"]; + mysql_query("insert into seg_dev_resources_det_his select * from seg_dev_resources_det where DRD_ID=$sql_drdID"); + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_ID=$sql_drdID"); + } + + } + mysql_close($polacz); + +?> +<?php ob_end_flush();?> diff --git a/sites/seldep.php b/sites/seldep.php new file mode 100644 index 0000000..da35ce9 --- /dev/null +++ b/sites/seldep.php @@ -0,0 +1,44 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + <?php + delSearchSessionData(); + + + ?> + +<div class="tag100"> + <div class="head_tag">Wybierz oddział</div> + <div class="tag"> + + <table WIDTH="100%" class="tag"> + <table class="desc_val"> + <tr> + <td class="desc" colspan="2"><br/>Posiadasz uprawnienia do poniższych oddziałów. W celu kontunuowania dalszej pracy w systemie kliknij proszę w oddział, w kontekście którego chcesz być zalogowany.<br/>&nbsp;</td> + </tr> + <tr> + <td class="desc">Wybierz oddział</td> + <td class="desc_value"><br/> + <?php + + if (!empty($_SESSION['eq_stock_param3_1'])) echo"<a href='?pg=site401&seldep=".$_SESSION['eq_stock_param3_1']."'>".$_SESSION['eq_stock_param3_1']."</a><br/><br/>"; + if (!empty($_SESSION['eq_stock_param3_2'])) echo"<a href='?pg=site401&seldep=".$_SESSION['eq_stock_param3_2']."'>".$_SESSION['eq_stock_param3_2']."</a><br/><br/>"; + if (!empty($_SESSION['eq_stock_param3_3'])) echo"<a href='?pg=site401&seldep=".$_SESSION['eq_stock_param3_3']."'>".$_SESSION['eq_stock_param3_3']."</a><br/><br/>"; + + ?> + + </td> + </tr> + </table> + + </div> + +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site100.php b/sites/site100.php new file mode 100644 index 0000000..a649134 --- /dev/null +++ b/sites/site100.php @@ -0,0 +1,245 @@ +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_PompDistribution ;?></div> + <div class="tag"> + + + <?php + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_100.png"; + if (file_exists($fileName)) unlink($fileName); + + + $imageTLO=imagecreatefrompng("./foto/map_01.png"); + $image=imagecreatetruecolor(imagesx($imageTLO),imagesy($imageTLO)); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + imagecopy($image,$imageTLO,0,0,0,0,imagesx($imageTLO),imagesy($imageTLO)); + $red = imagecolorallocate($image, 255, 0, 0); + $blue = imagecolorallocate($image, 0, 0, 255); + $black = imagecolorallocate($image, 0, 0, 0); + $orange = imagecolorallocate($image, 255, 127, 0); + $green = imagecolorallocate($image, 31, 163, 70); + + + + $image_greenRes=imagecreatefrompng("./images/greenRes.png"); + $image_yellowRes=imagecreatefrompng("./images/yellowRes.png"); + $image_redRes=imagecreatefrompng("./images/redRes.png"); + + $image_greenMarkON=imagecreatefrompng("./images/greenMarkON.png"); + $image_greenMarkOFF=imagecreatefrompng("./images/greenMarkOFF.png"); + + $image_yellowMarkON=imagecreatefrompng("./images/yellowMarkON.png"); + $image_yellowMarkOFF=imagecreatefrompng("./images/yellowMarkOFF.png"); + + $image_redMarkON=imagecreatefrompng("./images/redMarkON.png"); + $image_redMarkOFF=imagecreatefrompng("./images/redMarkOFF.png"); + + + // dodaje studnie + $i=0; $alarmy=""; + $wynik = mysql_query("select WLL_ID,WLL_NAME,WLL_LATITUDE,WLL_LONGITUDE from seg_wells limit 100"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $wellID = $r["WLL_ID"]; + $devID[$i]=sqlValue("select DRS_ID from seg_dev_resources where DRS_DEV_ID=$wellID and DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='WELL')"); + + $wellName[$i]= $r["WLL_NAME"]; + $wellX[$i]= $r["WLL_LATITUDE"]; + $wellY[$i]= $r["WLL_LONGITUDE"]; + $var_Xparam = $r["WLL_LATITUDE"]; + $var_Yparam = $r["WLL_LONGITUDE"]; + + //$wellStatus = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID[$i] and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_STATUSES' and DIC_NAME='ON_OFF') and DRD_DRS_ID=$devID[$i])", "DRD_VALUE"); + $wellStatus = getLastValueFromDevResourceDetail('WELL_STATUSES','ON_OFF',$devID[$i]); + // =============================================================================================== // + //$qParam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID[$i] and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='QM3H') and DRD_DRS_ID=$devID[$i])", "DRD_VALUE"); + $qParam = getLastValueFromDevResourceDetail('WELL_PARAMETERS','QM3H',$devID[$i]); + + $resHD=setHDValue($devID[$i]); + //$P2param = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID[$i] and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='P2M') and DRD_DRS_ID=$devID[$i])", "DRD_VALUE"); + $P2param = getLastValueFromDevResourceDetail('WELL_PARAMETERS','P2M',$devID[$i]); + + //$PEparam = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$devID[$i] and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_ELECTRICAL_PARAMETERS' and DIC_NAME='POWER_EKW') and DRD_DRS_ID=$devID[$i])", "DRD_VALUE"); + $PEparam = getLastValueFromDevResourceDetail('WELL_ELECTRICAL_PARAMETERS','POWER_EKW',$devID[$i]); + + if (empty($PEparam)) $PEparam=1; + + // =============================================================================================== // + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=$devID[$i]))")); + $YellowGreenParam = setYellowGreenLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=$devID[$i]))")); + // =============================================================================================== // + // sprawdza czy ocena nie jest szara... + // =============================================================== // + $resHP = setHPValue($devID[$i],$qParam); + // =============================================================== // + + + if ($resETA<=$RedYellowParam) + { + if ($wellStatus=='ON') imagecopy($image,$image_redMarkON,$var_Xparam-33,$var_Yparam-63,0,0,65,63); + else imagecopy($image,$image_redMarkOFF,$var_Xparam-33,$var_Yparam-63,0,0,65,63); + } + else if (($RedYellowParam<$resETA && $resETA<=$YellowGreenParam) || (($resHP<-0.07 || $resHP>0.07) && sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=$wellID)","DIC_NAME")!='SPM_OPT')) + { + if ($wellStatus=='ON') imagecopy($image,$image_yellowMarkON,$var_Xparam-33,$var_Yparam-63,0,0,65,63); + else imagecopy($image,$image_yellowMarkOFF,$var_Xparam-33,$var_Yparam-63,0,0,65,63); + } + else if ($resETA>$YellowGreenParam) + { + if ($wellStatus=='ON') imagecopy($image,$image_greenMarkON,$var_Xparam-33,$var_Yparam-63,0,0,65,63); + else imagecopy($image,$image_greenMarkOFF,$var_Xparam-33,$var_Yparam-63,0,0,65,63); + } + + if (getAutoManualWork($devID[$i])==1) imageString($image,5,$var_Xparam-5,$var_Yparam-50,"A",$black); + else imageString($image,5,$var_Xparam-5,$var_Yparam-50,"R",$black); + + // pokazuje moc zasięgu dla sygnału GPRS + if (sqlValue("select count(1) RSS_VALUE from seg_rss_signal_values where RSS_DRS_ID=".$devID[$i])>0) + setImageRSSIgnalValue($image, getLastRSSIvalue($devID[$i]),$var_Xparam+14,$var_Yparam-65, $devID[$i]); + + // pokazuje nazwę studni + imageString($image,3,$var_Xparam-12,$var_Yparam-77,$wellName[$i],$blue); + + + + + // Wyświetla informcję o alarmie A1 + $qrs=sqlStringValue("select ARM_TYPES from seg_alarms where ARM_AUDIT_CD=(select max(ARM_AUDIT_CD) from seg_alarms where ARM_DRS_ID=$devID[$i])","ARM_TYPES"); + if (strstr($qrs,"A1")) + { + imageString($image,2,5,10,"Brak potwierdzenia zalaczenia pompy $wellName[$i]",$red); + imagefilledellipse($image, $var_Xparam-15, $var_Yparam-7, 10, 10, $red); + imageString($image,0,$var_Xparam-17,$var_Yparam-11,"!",$black); + } + + // Wyświetla informcję o alarmie A3 + if (strstr($qrs,"A3")) + { + imageString($image,2,5,10,"Brak potwierdzenia wylaczenia pompy $wellName[$i]",$red); + imagefilledellipse($image, $var_Xparam-15, $var_Yparam-7, 10, 10, $red); + imageString($image,0,$var_Xparam-17,$var_Yparam-11,"!",$black); + } + + $i++; + } + + unset($var_Xparam); + unset($var_Yparam); + + + // dodaje zbiorniki + // ================================================================================== + $image_zb_Red=imagecreatefrompng("./images/redRes.png"); + $image_zb_Yellow=imagecreatefrompng("./images/yellowRes.png"); + $image_zb_Green=imagecreatefrompng("./images/greenRes.png"); + + $ii=0; + $wynik = mysql_query("select SRP_ID,SRP_NAME,DRS_STATUS_DIC_ID,DRS_ID,SRP_LATITUDE,SRP_LONGITUDE from seg_reservoirs_piezometers left join seg_manufacturers on SRP_MCF_ID=MCF_ID left join seg_dev_resources on SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR') where SRP_TYPE_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR')"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + + $resName[$ii] = $r["SRP_NAME"]; + $devR[$ii] = $r["DRS_ID"]; + $resX[$ii]= $r["SRP_LATITUDE"]; + $resY[$ii]= $r["SRP_LONGITUDE"]; + $var_Xparam = $r["SRP_LATITUDE"]; + $var_Yparam = $r["SRP_LONGITUDE"]; + + $maxAcc = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_ACCEPTABLE',$devR[$ii]); + $maxWar = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_WARNING',$devR[$ii]); + $minWar = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_WARNING',$devR[$ii]); + $minAcc = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_ACCEPTABLE',$devR[$ii]); + $waterLevel = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_PARAMETERS','WATER_LEVEL',$devR[$ii]); + + if ($waterLevel<=$minAcc || $waterLevel>=$maxAcc) + imagecopy($image,$image_zb_Red,$var_Xparam-25,$var_Yparam-47,0,0,50,50); + else if (($waterLevel>$minAcc && $waterLevel<=$minWar) || ($waterLevel>=$maxWar && $waterLevel<$maxAcc)) + imagecopy($image,$image_zb_Yellow,$var_Xparam-25,$var_Yparam-50,0,0,50,50); + else + imagecopy($image,$image_zb_Green,$var_Xparam-25,$var_Yparam-50,0,0,50,50); + + // pokazuje moc zasięgu dla sygnału GPRS + if (sqlValue("select count(1) RSS_VALUE from seg_rss_signal_values where RSS_DRS_ID=".$devR[$ii])>0) + setImageRSSIgnalValue($image, getLastRSSIvalue($devR[$ii]),$var_Xparam+14,$var_Yparam-52, $devR[$ii]); + + $ii++; + } + // ================================================================================== + + + unset($var_Xparam); + unset($var_Yparam); + + // dodaje piezometry + // ================================================================================== + $image_pz_Red=imagecreatefrompng("./images/redPiez.png"); + $image_pz_Yellow=imagecreatefrompng("./images/yellowPiez.png"); + $image_pz_Green=imagecreatefrompng("./images/greenPiez.png"); + + $iii=0; + $wynik = mysql_query("select SRP_ID,SRP_NAME,DRS_STATUS_DIC_ID,DRS_ID,SRP_LATITUDE,SRP_LONGITUDE from seg_reservoirs_piezometers left join seg_manufacturers on SRP_MCF_ID=MCF_ID left join seg_dev_resources on SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER') where SRP_TYPE_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER')"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + + $pieName[$iii] = $r["SRP_NAME"]; + $devP[$iii] = $r["DRS_ID"]; + $pieX[$iii]= $r["SRP_LATITUDE"]; + $pieY[$iii]= $r["SRP_LONGITUDE"]; + $var_Xparam = $r["SRP_LATITUDE"]; + $var_Yparam = $r["SRP_LONGITUDE"]; + + $maxAcc = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_ACCEPTABLE',$devP[$iii]); + $maxWar = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_WARNING',$devP[$iii]); + $minWar = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_WARNING',$devP[$iii]); + $minAcc = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_ACCEPTABLE',$devP[$iii]); + $waterLevel = getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_PARAMETERS','WATER_LEVEL',$devP[$iii]); + + if ($waterLevel<=$minAcc || $waterLevel>=$maxAcc) + imagecopy($image,$image_pz_Red,$var_Xparam-25,$var_Yparam-47,0,0,50,50); + else if (($waterLevel>$minAcc && $waterLevel<=$minWar) || ($waterLevel>=$maxWar && $waterLevel<$maxAcc)) + imagecopy($image,$image_pz_Yellow,$var_Xparam-25,$var_Yparam-50,0,0,50,50); + else + imagecopy($image,$image_pz_Green,$var_Xparam-25,$var_Yparam-50,0,0,50,50); + + // pokazuje moc zasięgu dla sygnału GPRS + if (sqlValue("select count(1) RSS_VALUE from seg_rss_signal_values where RSS_DRS_ID=".$devP[$iii])>0) + setImageRSSIgnalValue($image, getLastRSSIvalue($devP[$iii]),$var_Xparam+14,$var_Yparam-52, $devP[$iii]); + + $iii++; + } + // ================================================================================== + + + imageString($image,3,825,5,date('Y-m-d H:i:s'),$black); + + imagepng($image,$fileName); + ?> + + + <IMG SRC="<?php echo $fileName; ?>" BORDER="0" USEMAP="#mainmap"> + <MAP NAME="mainmap"> + <?php + for($j=0; $j<$i; $j++) + { + echo"<AREA SHAPE='RECT' COORDS='".($wellX[$j]-33).",".($wellY[$j]-63).",".($wellX[$j]+33).",".($wellY[$j])."' HREF='?pg=site401mark&dev=$devID[$j]' TITLE='$wellName[$j]'>"; + } + for($j=0; $j<$ii; $j++) + { + echo"<AREA SHAPE='RECT' COORDS='".($resX[$j]-20).",".($resY[$j]-50).",".($resX[$j]+17).",".($resY[$j]+3)."' HREF='?pg=site401mark&dev=$devR[$j]' TITLE='$resName[$j]'>"; + } + for($j=0; $j<$iii; $j++) + { + echo"<AREA SHAPE='RECT' COORDS='".($pieX[$j]-20).",".($pieY[$j]-50).",".($pieX[$j]+17).",".($pieY[$j]+3)."' HREF='?pg=site401mark&dev=$devP[$j]' TITLE='$pieName[$j]'>"; + } + + ?> + + + </MAP> + </div> +</div> +<meta http-equiv='refresh' content='120;url=./?pg=site100'> + + + diff --git a/sites/site101.php b/sites/site101.php new file mode 100644 index 0000000..5be3120 --- /dev/null +++ b/sites/site101.php @@ -0,0 +1,6 @@ +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_standard_name ;?></div> + <div class="tag_center"> + <?php echo $lab_Tag_standard_content ;?> + </div> +</div> \ No newline at end of file diff --git a/sites/site102.php b/sites/site102.php new file mode 100644 index 0000000..71284c5 --- /dev/null +++ b/sites/site102.php @@ -0,0 +1,59 @@ +<?php + /* + Example2 : A cubic curve graph + */ + $fileName="./charts/".date("Ymd")."_".md5(date("DMjG:i:sTY")."_chart_102").".png"; + if (file_exists( $fileName)) unlink($fileName); + + // Standard inclusions + include("./pChart/pData.class"); + include("./pChart/pChart.class"); + + $DataSet = new pData; + $DataSet->AddPoint(array(1,4,3,2,3,3,2,1,0,7,4,3,2,3,3,5,1,0,7),"Serie1"); + $DataSet->AddPoint(array(1,4,2,6,2,3,0,1,5,1,2,4,5,2,1,0,6,4,2),"Serie2"); + $DataSet->AddAllSeries(); + $DataSet->SetAbsciseLabelSerie(); + $DataSet->SetSerieName($lab_Chart_102_001,"Serie1"); + $DataSet->SetSerieName($lab_Chart_102_002,"Serie2"); + + // Initialise the graph + $Test = new pChart(700,230); + $Test->setFontProperties("Fonts/tahoma.ttf",8); + $Test->setGraphArea(50,30,585,200); + $Test->drawFilledRoundedRectangle(7,7,693,223,5,240,240,240); + $Test->drawRoundedRectangle(5,5,695,225,5,230,230,230); + $Test->drawGraphArea(255,255,255,TRUE); + $Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),5,150,150,150,TRUE,0,2); + $Test->drawGrid(4,TRUE,230,230,230,50); + + // Draw the 0 line + $Test->setFontProperties("Fonts/tahoma.ttf",6); + $Test->drawTreshold(0,143,55,72,TRUE,TRUE); + + // Draw the cubic curve graph + $Test->drawFilledCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription(),.1,50); + + // Finish the graph + $Test->setFontProperties("Fonts/tahoma.ttf",8); + $Test->drawLegend(600,30,$DataSet->GetDataDescription(),255,255,255); + $Test->setFontProperties("Fonts/tahoma.ttf",10); + $Test->drawTitle(50,22,$lab_Chart_102,50,50,50,585); + + + $Test->Render($fileName); + + +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_site100_002 ;?></div> + <div class="tag_center"> + + <?php + echo"<img SRC='$fileName'>"; + ?> + + </div> +</div> + diff --git a/sites/site201.php b/sites/site201.php new file mode 100644 index 0000000..a46ce78 --- /dev/null +++ b/sites/site201.php @@ -0,0 +1,356 @@ +<?php +if (!empty($_SESSION['site201'])) +{ +?> + +<div id='loader-wrapper'><div id='loader'></div></div> + + + +<?php + // Load the polynomial regression class. + require_once('./polynomial/PolynomialRegression.php' ); + require_once('./polynomial/uniwersalplot.php' ); + + $_POST['inQpump'] = getFloatValue($_POST['inQpump']); + $_POST['inHpump'] = getFloatValue($_POST['inHpump']); + + + // =================================================================================================== // + $imageWidth = 900; + $imageHeight = 400; + $leftMargin = 25; + $rightMargin = 50; + $topMargin = 25; + $bottomMargin = 40; + $image = @imageCreate( $imageWidth , $imageHeight ) + or die( "Cannot Initialize new GD image stream" ); + + // =================================================================================================== // + $colorMap = array(); + + //$colorMap[ "Background" ] = imageColorAllocate( $image , 0xDB , 0xB3 , 0xE6 ); + $colorMap[ "Background" ] = imageColorAllocate( $image , 255, 255, 255 ); + // Create a standard color palette + $colorMap[ "Black" ] = imagecolorallocate( $image, 0, 0, 0 ); + $colorMap[ "Red" ] = imagecolorallocate( $image, 192, 0, 0 ); + $colorMap[ "Green" ] = imagecolorallocate( $image, 0, 192, 0 ); + $colorMap[ "Blue" ] = imagecolorallocate( $image, 0, 0, 192 ); + $colorMap[ "Brown" ] = imagecolorallocate( $image, 48, 48, 0 ); + $colorMap[ "Cyan" ] = imagecolorallocate( $image, 0, 192, 192 ); + $colorMap[ "Purple" ] = imagecolorallocate( $image, 192, 0, 192 ); + $colorMap[ "LightGray" ] = imagecolorallocate( $image, 192, 192, 192 ); + + $colorMap[ "DarkGray" ] = imagecolorallocate( $image, 48, 48, 48 ); + $colorMap[ "LightRed" ] = imagecolorallocate( $image, 255, 0, 0 ); + $colorMap[ "LightGreen" ] = imagecolorallocate( $image, 0, 255, 0 ); + $colorMap[ "LightBlue" ] = imagecolorallocate( $image, 0, 0, 255 ); + $colorMap[ "Yellow" ] = imagecolorallocate( $image, 255, 255, 0 ); + $colorMap[ "LightCyan" ] = imagecolorallocate( $image, 0, 255, 255 ); + $colorMap[ "LightPurple" ] = imagecolorallocate( $image, 255, 0, 255 ); + $colorMap[ "White" ] = imagecolorallocate( $image, 255, 255, 255 ); + $colorMap[ "DarkYellow" ] = imagecolorallocate( $image, 255, 214, 0 ); + + $colorMap[ "Gray10" ] = imagecolorallocate( $image , 26 , 26 , 26 ); + $colorMap[ "Gray20" ] = imagecolorallocate( $image , 51 , 51 , 51 ); + $colorMap[ "Gray30" ] = imagecolorallocate( $image , 77 , 77 , 77 ); + $colorMap[ "Gray40" ] = imagecolorallocate( $image , 102 , 102 , 102 ); + $colorMap[ "Gray50" ] = imagecolorallocate( $image , 128 , 128 , 128 ); + $colorMap[ "Gray60" ] = imagecolorallocate( $image , 154 , 154 , 154 ); + $colorMap[ "Gray70" ] = imagecolorallocate( $image , 180 , 180 , 180 ); + $colorMap[ "Gray80" ] = imagecolorallocate( $image , 205 , 205 , 205 ); + $colorMap[ "Gray90" ] = imagecolorallocate( $image , 230 , 230 , 230 ); + + imageRectangle + ( + $image, + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin, + $colorMap[ "LightGray" ] + ); + +if ($_POST['subSearchPumps']==$lab_ButtonName_Search && $_POST['inQpump']>0) +{ + $xMax=0; $yMax=0; + unset($pupArray); + $pupArray = sqlGetResAsArray("select PUP_ID,PUP_H_MAX from seg_pumps where PUP_Q_MIN/60<".$_POST['inQpump']." and PUP_Q_MAX/60>".$_POST['inQpump']." order by PUP_NAME"); + + for ($i=0; $i<count($pupArray); $i++) + { + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$pupArray[$i]['PUP_ID']." order by PEP_X_PARAM"); + $tmpVal = 0; + $tmpVal = getPolynomialValue_201($tmpArray,$_POST['inQpump']); + + $tmpArrayETA = sqlGetResAsArray("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$pupArray[$i]['PUP_ID']." order by PEP_X_PARAM"); + $tmpValETA = 0; + $tmpValETA = getPolynomialValue_201($tmpArrayETA,$_POST['inQpump']); + + + if ($_POST['inHpump']>0) + { + if ($_POST['inHpump']>=($tmpVal-5) && $_POST['inHpump']<=($tmpVal+8)) + { + $finalArray[] = array( + 'pupID' => $pupArray[$i]['PUP_ID'], + 'hVal' => $tmpVal, + 'etaVal' => $tmpValETA + ); + + $pupIDs[] = $pupArray[$i]['PUP_ID']; + + + // dopisuje największą wartośc dla x,y max + $tmpCount = 0; $tmpCount = count($tmpArray)-1; + if ($tmpArray[$tmpCount]['PEP_X_PARAM']>$xMax) + $xMax = $tmpArray[$tmpCount]['PEP_X_PARAM']; + if ($pupArray[$i]['PUP_H_MAX']>$yMax) + $yMax = $pupArray[$i]['PUP_H_MAX']; + // ======================================== + } + } + else + { + $finalArray[] = array( + 'pupID' => $pupArray[$i]['PUP_ID'], + 'hVal' => $tmpVal, + 'etaVal' => $tmpValETA + ); + + $pupIDs[] = $pupArray[$i]['PUP_ID']; + + // dopisuje największą wartośc dla x,y max + $tmpCount = 0; $tmpCount = count($tmpArray)-1; + if ($tmpArray[$tmpCount]['PEP_X_PARAM']>$xMax) + $xMax = $tmpArray[$tmpCount]['PEP_X_PARAM']; + if ($pupArray[$i]['PUP_H_MAX']>$yMax) + $yMax = $pupArray[$i]['PUP_H_MAX']; + // ======================================== + } + } + unset($tmpArray); + unset($pupArray); + + + + $yMax=ceil($yMax/10)*10; + + + +if(count($finalArray)>0) +{ + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 4; + $Y_MajorScale = $yMax/4; + $Y_MinorScale = $Y_MajorScale / 2; + + $plot = new XY_PlotClass($image); + $plot->sizeWindow + ( + $leftMargin, + $topMargin, + $imageWidth - $rightMargin, + $imageHeight - $bottomMargin + ); + + // =================================================================================================== // + $plot->setX_Span( 0, $xMax); + $plot->setY_Span( 0, $yMax); + plotAddScale(); + + $font = './fonts/verdana.ttf'; + imagettftext($image, 10, 0, 10,15, $colorMap["Black"], $font, 'H[m]'); + imagettftext($image, 10, 0, 830,395, $colorMap["Black"], $font, 'Q[m3/min]'); + + + + foreach ( $pupIDs as $pupID ) + { + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM,PEP_PUP_ID from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=$pupID order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $scope[] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + $data = $newParam; unset($newParam); + bcscale( 10 ); + plotRenderData( $data, $colorMap[ "Red" ] ); + $plot->setX_Span( 0, $xMax); + $plot->setY_Span( 0, $yMax); + // $plot->setCircleSize( 4 ); + // $plot->renderPoints(); + $regression = new PolynomialRegression( 4 ); + foreach ( $data as $dataPoint) + $regression->addData( $dataPoint[0], $dataPoint[1]); + $coefficients = $regression->getCoefficients(); + + // Plot each of the curves. + //plotRenderRegression( $regression, $coefficients, $scope[0], $scope[2], $colorMap[ "Red" ] ); + plotRenderRegression( $regression, $coefficients, $scope[2], $scope[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $regression, $coefficients, $scope[3], $scope[5], $colorMap[ "Green" ] ); + plotRenderRegression( $regression, $coefficients, $scope[5], $scope[6], $colorMap[ "DarkYellow" ] ); + //plotRenderRegression( $regression, $coefficients, $scope[6], $scope[7], $colorMap[ "Red" ] ); + + unset($regression); + unset($coefficients); + unset($data); + unset($dataPoint); + unset($scope); + + } +} +else + imageString($image,5,240,190,$lab_Field_site201_006,$colorMap[ "Red" ]); +} + + + // Output image + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_201_01.png"; + imagePNG( $image,$fileName1); + + $_POST['inHpump'] = str_replace(".",",",$_POST['inHpump']); + $_POST['inQpump'] = str_replace(".",",",$_POST['inQpump']); + + ?> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site201_001 ;?></div> + <form method="post" action="?pg=site201"> + <div class="tag_center"><br/> + <table class="desc_val"> + <tr> + <td class="label_gray"><?php echo $lab_Field_site201_003;?></td> + <td class="desc_value"><input class="float" type="text" name="inQpump" value="<?php echo $_POST['inQpump'];?>"> m<sup>3</sup>/min</td> + <td class="label_gray"><?php echo $lab_Field_site201_002;?></td> + <td class='desc_value'><input class="float" type="text" name="inHpump" value="<?php echo $_POST['inHpump'];?>"> m</td> + <td class="desc_value"><input class="btn btn-default btn-sm" type="submit" name="subSearchPumps" value="<?php echo $lab_ButtonName_Search; ?>" onclick="makeRequest('?pg=site401mhis');"> </td> + </tr> + </table><br/> + <img src="<?php echo $fileName1;?>"> + </div> + </form> + + + + <?php + + $_POST['inHpump'] = str_replace(",",".",$_POST['inHpump']); + $_POST['inQpump'] = str_replace(",",".",$_POST['inQpump']); + + if ($_POST['inQpump']>0 && count($pupIDs)>0) + { + ?> + <div class="head_tag"> + <div style="display:inline-block; font-size: 14px; color: #ffffff;"><?php echo $lab_Tag_site201_002 ;?></div> + <div style="display:inline-block; float:right; padding-right: 5px;"><img style='cursor: pointer; max-width: 16px; border: 0;' src='./images/printer-icon.png' title="Drukuj" onclick="window.print();"></div> + + + + </div> + <div class="tag_center"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label">Q<sub>n</sub> [m<sup>3</sup>/min]</TD> + <TD class="label">Q<sub>sz</sub> [m<sup>3</sup>/min]</TD> + <TD class="label">H(Q<sub>sz</sub>) [m]</TD> + <TD class="label">&eta;(Q<sub>sz</sub>)</TD> + <TD class="label"><?php echo $lab_Field_site201_009 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + + + <?php + + $finalArray = sortmddata($finalArray,'etaVal','DESC','num'); + +// print_r($finalArray); + $counter=1; + for ($i=0; $i<count($finalArray); $i++) + { + unset($tmpArray); + $tmpArray = sqlGetResAsArray("select PUP_NAME,(PUP_Q_N/60) PUP_Q_N,ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER from seg_pumps left join seg_pump_engine_rel on RPE_PUP_ID=PUP_ID left join seg_engines on RPE_ENG_ID=ENG_ID where PUP_ID=".$finalArray[$i]['pupID']." order by ENG_POWER"); + + for ($j=0; $j<count($tmpArray); $j++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site201det&pup=".$finalArray[$i]['pupID']."&eng=".$tmpArray[$j]['ENG_ID']."'".chr(34)."> + <TD class='field_left'>".$counter."</TD> + <TD class='field_left'>".$tmpArray[$j]['PUP_NAME']."</TD> + <TD class='field_left'>".$tmpArray[$j]['ENG_NAME']."</TD> + <TD class='field_right'>".round($tmpArray[$j]['PUP_Q_N'],3)."</TD> + <TD class='field_right'>".str_replace(".",",",$_POST['inQpump'])."</TD> + <TD class='field_right'>".round($finalArray[$i]['hVal'],2)."</TD> + <TD class='field_right'>".round($finalArray[$i]['etaVal'],2)."</TD> + <TD class='field_right'>".$tmpArray[$j]['ENG_POWER']."</TD> + <TD class='field_right'>".$tmpArray[$j]['ENG_VOLTAGE']."</TD> + </TR> + "; + $counter++; + } + } + + +/* + $l=0; + foreach ($pupIDs as $scoupeID) + { + if ($l==0) $internelSQL = $scoupeID; + else $internelSQL .= ",".$scoupeID; + $l++; + } + + $wynik = mysql_query("select PUP_NAME,ENG_NAME,ENG_POWER,ENG_VOLTAGE,RPE_PUP_ID,PUF_A,PUF_B,PUF_C,PUF_D from seg_pump_engine_rel left join seg_pumps on RPE_PUP_ID=PUP_ID left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps_xy_formula on RPE_PUP_ID=PUF_PUP_ID where RPE_PUP_ID in ($internelSQL) and PUF_TYPE='H' order by ENG_POWER,PUP_NAME,ENG_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PUP_NAME"]; + $sql_2 = $r["ENG_NAME"]; + $sql_3 = $r["ENG_POWER"]; + $sql_4 = $r["ENG_VOLTAGE"]; + $sql_5 = $r["RPE_PUP_ID"]; + $sql_A = $r["PUF_A"]; + $sql_B = $r["PUF_B"]; + $sql_C = $r["PUF_C"]; + $sql_D = $r["PUF_D"]; + + $y = round($sql_A*$_POST['inQpump']*$_POST['inQpump']*$_POST['inQpump']+$sql_B*$_POST['inQpump']*$_POST['inQpump']+$sql_C*$_POST['inQpump']+$sql_D,2); + echo" + <TR> + <TD class='field_left'>$sql_1</TD> + <TD class='field_left'>$sql_2</TD> + <TD class='field_right'>".str_replace(".",",",$_POST['inQpump'])."</TD> + <TD class='field_right'>".str_replace(".",",",$y)."</TD> + <TD class='field_right'>".setPumpETAparameterForQ($sql_5,$_POST['inQpump'])."</TD> + <TD class='field_right'>".str_replace(".",",",$sql_3)."</TD> + <TD class='field_right'>".str_replace(".",",",$sql_4)."</TD> + </TR> + "; + + } +*/ + ?> + + </TR> + </table> + + </div> + <?php + } + + ?> + + + </div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site201det.php b/sites/site201det.php new file mode 100644 index 0000000..16158a4 --- /dev/null +++ b/sites/site201det.php @@ -0,0 +1,388 @@ +<?php +if (!empty($_SESSION['site205'])) +{ +?> + + +<?php +if ($_POST['subEng4PupUpdate']== $lab_ButtonName_Update) + { + $_GET['pup']=$_POST['pup']; + mysql_query("DELETE FROM seg_pump_engine_rel where RPE_PUP_ID=".$_POST['pup']); + + $wynik = mysql_query("select ENG_ID from seg_engines"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eID = $r["ENG_ID"]; + if ($_POST['eng4pump'][$eID]) + mysql_query("INSERT INTO seg_pump_engine_rel SET RPE_PUP_ID=".$_POST['pup'].",RPE_ENG_ID=$eID"); + } + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site205_001 ;?></div> + <div class="tag"> + <table class="tag" style="width: 100%;"> + <TR> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002a ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + </TR> + + <?php + + + $wynik = mysql_query("select PUP_ID,MCF_NAME,PUP_NAME,(PUP_Q_N/60) PUP_Q_N from seg_pumps left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_ID=".$_GET['pup']); + + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_203_PUP_ID = $r["PUP_ID"]; if(!$_GET['pup']) $_GET['pup']=$sql_203_PUP_ID; + $sql_203_PUP_MCF_ID = $r["MCF_NAME"]; + $sql_203_PUP_NAME = $r["PUP_NAME"]; + $sql_203_PUP_Q_N = round($r["PUP_Q_N"],3); $sql_203_PUP_Q_N= str_replace(".", ",", $sql_203_PUP_Q_N); + + echo" + <TR> + <TD class='field_left'>$sql_203_PUP_NAME</TD> + <TD class='field_right'>$sql_203_PUP_Q_N</TD> + <TD class='field_center'>$sql_203_PUP_MCF_ID</TD> + </TR> + "; + } + ?> + </table> + </div> + + + + <div class="head_tag"><?php echo $lab_Tag_site203_006.sqlValue("select PUP_NAME from seg_pumps where PUP_ID=".$_GET['pup']) ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select RPE_ENG_ID,ENG_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=ENG_MCF_ID) ENG_MCF,ENG_VOLTAGE from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["RPE_ENG_ID"]; if (!$_GET['eng']) $_GET['eng']=$param_1; + $param_4 = $r["ENG_NAME"]; + $param_5 = $r["ENG_VOLTAGE"]; $param_6= str_replace(".", ",", $param_6); + $param_6 = $r["ENG_MCF"]; + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site201det&pup=".$_GET['pup']."&eng=$param_1'".chr(34)."> + <TD class='field_center'>$param_4</TD> + <TD class='field_center'>$param_5</TD> + <TD class='field_center'>$param_6</TD> + </TR>"; + } + ?> + </table> + </div> + <?php + $wynik = mysql_query("select PUP_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=PUP_MCF_ID) PUP_MCF,(PUP_Q_N/60) PUP_Q_N,PUP_H_P,PUP_ETA_MAX,ENG_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=ENG_MCF_ID) ENG_MCF,ENG_VOLTAGE,ENG_POWER,ENG_ETA from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']." and RPE_ENG_ID=".$_GET['eng']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $mix_1 = $r["PUP_NAME"]; + $mix_2 = $r["PUP_MCF"]; + $mix_3 = round($r["PUP_Q_N"],3); $mix_3= str_replace(".", ",", $mix_3); + $mix_4 = $r["PUP_H_P"]; $mix_4= str_replace(".", ",", $mix_4); + $mix_5 = $r["PUP_ETA_MAX"]; $mix_5= str_replace(".", ",", $mix_5); + $mix_6 = $r["ENG_NAME"]; + $mix_7 = $r["ENG_MCF"]; + $mix_8 = $r["ENG_VOLTAGE"]; + $mix_9 = $r["ENG_POWER"]; $mix_9= str_replace(".", ",", $mix_9); + $mix_10 = $r["ENG_ETA"]; $mix_10= str_replace(".", ",", $mix_10); + } + + ?> + + + <div class="head_tag"><?php echo sqlValue("select concat (PUP_NAME, ' + ',ENG_NAME) from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']." and RPE_ENG_ID=".$_GET['eng']) ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR > + + <?php echo"<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site203inf&pup=".$_GET['pup']."'".chr(34).">"; ?> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_1; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_2; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_002a; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_003; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_009; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_5; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <?php echo"<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site204inf&eng=".$_GET['eng']."'".chr(34).">"; ?> + <TD class="desc"><?php echo $lab_Field_site204_001; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_6; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_004; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_7; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_002; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_8; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_003; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_9; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_006; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_10; ?></TD> + </TR> + </table> + </div> + + + + + + + +</div> + + + + + + + + +<div class="tag50_right"> + + + <?php + if ($_GET['pup']>0) + { + + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_01.png"; + $fileName2="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_02.png"; + + if (file_exists( $fileName1)) unlink($fileName1); + if (file_exists( $fileName2)) unlink($fileName2); + + // Wysokość podnoszenia + // =======================================================================================// + require_once('./polynomial/PolynomialRegression.php' ); + require_once('./polynomial/plot.php' ); + + + unset($scope); + unset($data); + unset($newParam); + + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $scope[] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); + + $yMax = sqlValue("select max(PEP_Y_PARAM) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $yMax = ceil($yMax+10); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = ceil($yMax/4); + $Y_MinorScale = $Y_MajorScale / 2; + + $data = $newParam; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax); + $plot->setY_Span( 0, ceil($yMax/4)*4 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression->getCoefficients(); + + // Place text + imageString($image,5,0,0,'H[m]',$colorMap[ "Black" ]); + imageString($image,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty +// plotRenderRegression( $polynomialRegression, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[0], $scope[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[2], $scope[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[3], $scope[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[5], $scope[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[6], $xMaxLine, $colorMap[ "Red" ] ); + + imagePNG( $image,$fileName1); + // =======================================================================================// + + + require_once('./polynomial/plot1.php' ); + + unset($scope1); + unset($data); + unset($newParam); + + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam1[$i][$j] = $r["PEP_X_PARAM"]; + $scope1[] = $r["PEP_X_PARAM"]; + $j++; + $newParam1[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + + $Y_MajorScale = 0.2; + $Y_MinorScale = $Y_MajorScale / 2; + + + $data1 = $newParam1; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression1 = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data1 as $dataPoint1 ) + $polynomialRegression1->addData( $dataPoint1[ 0 ], $dataPoint1[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data1, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, 1 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression1->getCoefficients(); + + // Place text + imageString($image1,5,0,0,'n',$colorMap[ "Black" ]); + imagerectangle($image1,6,12,7,17,$colorMap[ "Black" ]); + imageString($image1,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + // plotRenderRegression( $polynomialRegression1, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[0], $scope1[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[2], $scope1[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[3], $scope1[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[5], $scope1[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[6], $xMaxLine, $colorMap[ "Red" ] ); + + + imagePNG( $image1,$fileName2); + + + } + + ?> + + + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if (count($scope)>0) + echo"<img SRC=$fileName1>"; + else + echo $lab_Field_site203_017; + ?> + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if (count($scope1)>0) + echo"<img SRC=$fileName2>"; + else + echo $lab_Field_site203_017; + ?> + </div> + + + + +</div> + + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + +<div class="tag50_right"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site201" role="button"><?php echo $lab_ButtonName_Back; ?></a> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site202.php b/sites/site202.php new file mode 100644 index 0000000..2542a6f --- /dev/null +++ b/sites/site202.php @@ -0,0 +1,20 @@ +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_standard_name ;?></div> + <div class="tag_center"><?php echo $lab_Tag_standard_content ;?></div> +</div> + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_standard_name ;?></div> + <div class="tag"><?php echo $lab_Tag_standard_content ;?></div> +</div> + +<div class="tag50_right"> + <div class="head_tag"><?php echo $lab_Tag_standard_name ;?></div> + <div class="tag"><?php echo $lab_Tag_standard_content ;?></div> +</div> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_standard_name ;?></div> + <div class="tag"><?php echo $lab_Tag_standard_content ;?></div> +</div> + \ No newline at end of file diff --git a/sites/site203.php b/sites/site203.php new file mode 100644 index 0000000..5ad8381 --- /dev/null +++ b/sites/site203.php @@ -0,0 +1,250 @@ +<?php +if (!empty($_SESSION['site203'])) +{ +?> + + +<?php + +if ($_POST['subPumpSave']==$lab_ButtonName_Save && !empty($_POST['inPumpName']) && $_POST['inPumpManufName']>0 ) + { + + $checkIsExists = sqlGetResAsArray("select * from seg_pumps where PUP_NAME='".$_POST['inPumpName']."'"); + if (count($checkIsExists)>0) + { + echo"<div class='actionERROR'>Typ pompy ".$_POST['inPumpName']." istnieje już w systemie</div>"; + + } + else + { + $in_q_ZERO = 0; + $in_q_xm = 0.25*(getFloatValue($_POST['inPumpQn'])*60); + $in_q_min = 0.55*(getFloatValue($_POST['inPumpQn'])*60); + $in_q_1 = 0.7*(getFloatValue($_POST['inPumpQn'])*60); + $in_q_2 = 1.22*(getFloatValue($_POST['inPumpQn'])*60); + $in_q_max = 1.35*(getFloatValue($_POST['inPumpQn'])*60); + $in_q_xl = 1.42*(getFloatValue($_POST['inPumpQn'])*60); + + $query_tmp = "INSERT INTO seg_pumps SET PUP_MCF_ID=".$_POST['inPumpManufName'].",PUP_NAME='".$_POST['inPumpName']."',PUP_Q_N=".(getFloatValue($_POST['inPumpQn'])*60).",PUP_Q_MIN=$in_q_min,PUP_Q_MAX=$in_q_max,PUP_H_P=".getFloatValue($_POST['inPumpHp']).",PUP_ETA_MAX=".getFloatValue($_POST['inPumpEta']); + if (getFloatValue($_POST['inPumpLg'])>0) $query_tmp .= ",PUP_PUMP_LENGTH=".getFloatValue($_POST['inPumpLg']); + if (getFloatValue($_POST['inPumpWeig'])>0) $query_tmp .= ",PUP_WEIGHT=".getFloatValue($_POST['inPumpWeig']); + if (getFloatValue($_POST['inPumpDiam'])>0) $query_tmp .= ",PUP_DIAMETER=".getFloatValue($_POST['inPumpDiam']); + + //echo $query_tmp; + + mysql_query($query_tmp); + unset($query_tmp); + $newPumpID = sqlValue("select max(PUP_ID) from seg_pumps"); + + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_ZERO,PEP_TYPE='H';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_xm,PEP_TYPE='H';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_min,PEP_TYPE='H';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_1,PEP_TYPE='H';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=".(getFloatValue($_POST['inPumpQn'])*60).",PEP_Y_PARAM=".getFloatValue($_POST['inPumpHp']).",PEP_TYPE='H';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_2,PEP_TYPE='H';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_max,PEP_TYPE='H';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_xl,PEP_TYPE='H';"); + + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_ZERO,PEP_Y_PARAM=0,PEP_TYPE='ETA';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_xm,PEP_TYPE='ETA';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_min,PEP_TYPE='ETA';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_1,PEP_TYPE='ETA';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=".(getFloatValue($_POST['inPumpQn'])*60).",PEP_Y_PARAM=".getFloatValue($_POST['inPumpEta']).",PEP_TYPE='ETA';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_2,PEP_TYPE='ETA';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_max,PEP_TYPE='ETA';"); + mysql_query("INSERT INTO seg_pump_eng_param SET PEP_PUP_ID=$newPumpID,PEP_X_PARAM=$in_q_xl,PEP_TYPE='ETA';"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + + } + + + + } + + +if (!empty($_SESSION['site203_edit']) && $_GET['del']=="OK") + { + mysql_query("delete from seg_pumps where PUP_ID=".$_GET['pup']); + mysql_query("delete from seg_pump_eng_param where PEP_PUP_ID=".$_GET['pup']); + mysql_query("delete from seg_pumps_xy_formula where PUF_PUP_ID=".$_GET['pup']); + + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); $_SESSION['site203_sr_param']=1;} + if ($_POST['sub_search']=='Szukaj') { $_SESSION['site203_input'] = $_POST['sr_well']; $_SESSION['site203_sr_param'] = $_POST['sr_param']; } + ?> + + + <?php + $typSelArray = array( + array('id'=>1, 'value'=>$lab_Field_site203_001), + array('id'=>2, 'value'=>$lab_Field_site203_002a), + ); + ?> + + + <form action="./?pg=site203&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td><?php getSelectValueAsArray('sr_param', $typSelArray,$_SESSION['site203_sr_param']); ?></td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site203_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>&nbsp;"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site203_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002a ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + </TR> + + <?php + + if (empty($_SESSION['site203_array']) || $_POST['sub_search']=='Szukaj') + { + $query="select PUP_ID,MCF_NAME,PUP_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P from seg_pumps left join seg_manufacturers on PUP_MCF_ID=MCF_ID where "; + + // wybiera odpowiedni operator + if ($_SESSION['site203_sr_param']==1) $query .= " PUP_STATUS='1' and PUP_NAME like '%".$_POST['sr_well']."%'"; + elseif ($_SESSION['site203_sr_param']==2) $query .= " PUP_STATUS='1' and (PUP_Q_N/60) >= (".(getFullFloatValue($_POST['sr_well'])-(getFullFloatValue($_POST['sr_well'])*0.1)).") and (PUP_Q_N/60) <= (".(getFullFloatValue($_POST['sr_well'])+(getFullFloatValue($_POST['sr_well'])*0.1)).")"; + + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " and PUP_Q_N>0 order by PUP_Q_N,PUP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'id'=> $r["PUP_ID"], + 'mfc'=>$r["MCF_NAME"], + 'pumpName'=>$r["PUP_NAME"], + 'qN'=>round(getFullFloatValue($r["PUP_Q_N"]),3), + 'hP'=>getFullFloatValue($r["PUP_H_P"]) + ); + } + unset($_SESSION['site203_array']); + $_SESSION['site203_array']=$res; + } + + + //print_r($_SESSION['site203_array']); + //echo"<br/><br/><br/>"; + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site203_array'])) $stop=count($_SESSION['site203_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site203inf&pup=".$_SESSION['site203_array'][$i]['id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site203_array'][$i]['pumpName']."</TD> + <TD class='field_right'>".$_SESSION['site203_array'][$i]['qN']."</TD> + <TD class='field_right'>".$_SESSION['site203_array'][$i]['hP']."</TD> + <TD class='field_center'>".$_SESSION['site203_array'][$i]['mfc']."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site203_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site203_array'])>20) + echo pagination_grid('?pg=site203', $_GET['pgn'], count($_SESSION['site203_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site203_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site203_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + + </div> + + <?php + if (!empty($_SESSION['site203_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site203A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site203A.php b/sites/site203A.php new file mode 100644 index 0000000..55023f2 --- /dev/null +++ b/sites/site203A.php @@ -0,0 +1,61 @@ +<?php +if (!empty($_SESSION['site203_edit'])) +{ +?> + +<div class="tag100"> +<FORM ACTION="./?pg=site203" METHOD="POST" id="PumpCatalogueForm" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site203_007 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inPumpName" required></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersNameReq('inPumpManufName'); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_002a; ?></TD> + <TD CLASS="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inPumpQn" required></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site203_003; ?></TD> + <TD CLASS="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inPumpHp" required></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_009; ?></TD> + <TD CLASS="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inPumpEta" required></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_010; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPumpLg"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_011; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPumpDiam"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_012; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPumpWeig"></TD> + </TR> + + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class='btn btn-info btn-sm' TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site203'"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subPumpSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site203E.php b/sites/site203E.php new file mode 100644 index 0000000..9de97c3 --- /dev/null +++ b/sites/site203E.php @@ -0,0 +1,136 @@ +<?php +if (!empty($_SESSION['site203_edit'])) +{ +?> + + +<?php +$wynik = mysql_query("select PUP_NAME,PUP_MCF_ID,(PUP_Q_N/60) PUP_Q_N,PUP_PUMP_LENGTH,PUP_DIAMETER,PUP_WEIGHT from seg_pumps where PUP_ID=".$_GET['pup']); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $param_1 = $r["PUP_NAME"]; + $param_2 = $r["PUP_MCF_ID"]; + $param_3 = getFullFloatValue($r["PUP_Q_N"]); + $param_4 = $r["PUP_PUMP_LENGTH"]; $param_4= str_replace(".", ",", $param_4); + $param_5 = $r["PUP_DIAMETER"]; $param_5= str_replace(".", ",", $param_5); + $param_6 = $r["PUP_WEIGHT"]; $param_6= str_replace(".", ",", $param_6); + +} + +?> + +<FORM ACTION="./?pg=site203inf" METHOD="POST" id="PumpCatalogueForm" class="form_valid"> +<INPUT type="hidden" name="pup" value="<?php echo$_GET['pup'] ;?>"> +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site203_007 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inPumpName" value="<?php echo$param_1 ;?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersName('inPumpManufName',$param_2); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_002a; ?></TD> + <TD CLASS="desc_value"><?php echo$param_3 ;?></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site203_010; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPumpLg" value="<?php echo$param_4 ;?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_011; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPumpDiam" value="<?php echo$param_5 ;?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_012; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPumpWeig" value="<?php echo$param_6 ;?>"></TD> + </TR> + + </TABLE> + </div> + +</div> + + + + + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site203_003." [".strtolower($lab_Tag_site203_004)."]";?></div> + <div class="tag"> + <table class="desc_val"> + <TR> + <TD class="label_gray"><?php echo $lab_Field_site203_013a ;?></TD> + <TD class="label_gray"><?php echo $lab_Field_site203_014 ;?></TD> + </TR> + <?php + $wynik = mysql_query("select PEP_ID,(PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fieldID = $r["PEP_ID"]; + $param_HX = getFullFloatValue($r["PEP_X_PARAM"]); + $param_HY = getFullFloatValue($r["PEP_Y_PARAM"]); + echo" + <TR> + <TD class='desc'>$param_HX</TD> + <TD CLASS='desc_value'><INPUT class='text75' TYPE='TEXT' NAME='inPump_H_".$fieldID."' value='$param_HY'></TD> + </TR> + "; + } + ?> + </TABLE> + </div> +</div> + + +<div class="tag50_right"> + <div class="head_tag"><?php echo $lab_Tag_site203_003." [".strtolower($lab_Tag_site203_005)."]" ;?></div> + <div class="tag"> + <table class="desc_val"> + <TR> + <TD class="label_gray"><?php echo $lab_Field_site203_013a ;?></TD> + <TD class="label_gray"><?php echo $lab_Field_site203_015 ;?></TD> + </TR> + <?php + $wynik = mysql_query("select PEP_ID,(PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fieldID = $r["PEP_ID"]; + $param_HX = getFullFloatValue($r["PEP_X_PARAM"]); + $param_HY = getFullFloatValue($r["PEP_Y_PARAM"]); + echo" + <TR> + <TD class='desc'>$param_HX</TD> + <TD CLASS='desc_value'><INPUT class='text75' TYPE='TEXT' NAME='inPump_ETA_".$fieldID."' value='$param_HY'></TD> + </TR> + "; + } + ?> + </TABLE> + </div> +</div> + + + + + <div class="tag100"> + <div class="tag_buttons"> + <INPUT class='btn btn-info btn-sm' TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site203inf&pup=<?php echo $_GET['pup']; ?>'"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subEPumpSave" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </div> + + + +</FORM> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site203inf.php b/sites/site203inf.php new file mode 100644 index 0000000..31fa8d1 --- /dev/null +++ b/sites/site203inf.php @@ -0,0 +1,508 @@ +<?php +if (!empty($_SESSION['site203'])) +{ +?> + +<?php +require_once('./polynomial/PolynomialRegression.php' ); + +if (!$_GET['pup']) $_GET['pup'] = $_POST['pup']; + +if ($_POST['subEPumpSave']==$lab_ButtonName_Update && strlen($_POST['inPumpName'])>1 && $_POST['inPumpManufName']>0 ) +{ + + $varAfterChange_01= str_replace(",", ".", $_POST['inPumpLg']); + $varAfterChange_02= str_replace(",", ".", $_POST['inPumpWeig']); + $varAfterChange_03= str_replace(",", ".", $_POST['inPumpDiam']); + + mysql_query("UPDATE seg_pumps SET PUP_MCF_ID=".$_POST['inPumpManufName'].",PUP_NAME='".$_POST['inPumpName']."',PUP_PUMP_LENGTH=$varAfterChange_01,PUP_WEIGHT=$varAfterChange_02,PUP_DIAMETER=$varAfterChange_03 WHERE PUP_ID=".$_POST['pup']); + + $count=0; + $wynik = mysql_query("select PEP_ID from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_POST['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fieldID = $r["PEP_ID"]; + $vName = "inPump_H_".$fieldID; + $vValue = str_replace(",", ".",$_POST[$vName]); + mysql_query("UPDATE seg_pump_eng_param SET PEP_Y_PARAM=$vValue WHERE PEP_ID=$fieldID"); + $count++; + + if ($count==3) + mysql_query("UPDATE seg_pumps SET PUP_H_MAX=$vValue WHERE PUP_ID=".$_POST['pup']); + else if ($count==5) + mysql_query("UPDATE seg_pumps SET PUP_H_P=$vValue WHERE PUP_ID=".$_POST['pup']); + else if ($count==7) + mysql_query("UPDATE seg_pumps SET PUP_H_MIN=$vValue WHERE PUP_ID=".$_POST['pup']); + } + + $count=0; + $wynik = mysql_query("select PEP_ID from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_POST['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $fieldID = $r["PEP_ID"]; + $vName = "inPump_ETA_".$fieldID; + $vValue = str_replace(",", ".",$_POST[$vName]); + mysql_query("UPDATE seg_pump_eng_param SET PEP_Y_PARAM=$vValue WHERE PEP_ID=$fieldID"); + $count++; + if ($count==5) + mysql_query("UPDATE seg_pumps SET PUP_ETA_MAX=$vValue WHERE PUP_ID=".$_POST['pup']); + } + + include"./site203inf_xy_formula.php"; + echo"<div class='actionOK'>$lab_Field_site803_015</div>"; + +} + + + + +$wynik = mysql_query("select PUP_NAME,MCF_NAME,(PUP_Q_N/60) PUP_Q_N,(PUP_Q_MIN/60) PUP_Q_MIN ,(PUP_Q_MAX/60) PUP_Q_MAX,PUP_H_P,PUP_H_MIN,PUP_H_MAX,PUP_ETA_MAX,PUP_PUMP_LENGTH,PUP_DIAMETER,PUP_WEIGHT from seg_pumps left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_ID=".$_GET['pup']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PUP_NAME"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = getStringFloatRound($r["PUP_Q_N"]); + $sql_4 = getStringFloatRound($r["PUP_Q_MIN"]); + $sql_5 = getStringFloatRound($r["PUP_Q_MAX"]); + $sql_6 = getStringFloatRound($r["PUP_H_P"]); + $sql_7 = getStringFloatRound($r["PUP_H_MIN"]); + $sql_8 = getStringFloatRound($r["PUP_H_MAX"]); + $sql_9 = getStringFloatRound($r["PUP_ETA_MAX"]); + $sql_10 = getStringFloatRound($r["PUP_PUMP_LENGTH"]); + $sql_11 = getStringFloatRound($r["PUP_DIAMETER"]); + $sql_12 = getStringFloatRound($r["PUP_WEIGHT"]); + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site203_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_1; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site203_002a; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_005a; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_006a; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_5; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_003; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_6; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_007; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_7; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_008; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_8; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_009; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_9; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site203_010; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_10; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_011; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_11; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site203_012; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_12; ?></TD> + </TR> + </table> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site203_003 ;?></div> + <div class="tag"> + <table class="tag" style="width: 100%;"> + <TR> + <TD class="label"></TD> + <TD class="label"><?php echo $lab_Field_site203_013a ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_014 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_015 ;?></TD> + </TR> + + <?php + $licz=1; + $wynik = mysql_query("select (tb1.PEP_X_PARAM/60) X, tb1.PEP_Y_PARAM Y1, tb2.PEP_Y_PARAM Y2 from (select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_PUP_ID=".$_GET['pup']." and PEP_TYPE='H') tb1,(select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_PUP_ID=".$_GET['pup']." and PEP_TYPE='ETA') tb2 where tb1.PEP_X_PARAM=tb2.PEP_X_PARAM order by X"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["X"]; $param_1= str_replace(".", ",", round($param_1,3)); + $param_2 = $r["Y1"]; $param_2= str_replace(".", ",", $param_2); + $param_3 = $r["Y2"]; $param_3= str_replace(".", ",", $param_3); + + echo" + <TR> + <TD class='field_center'>$licz.</TD> + <TD class='field_center'>$param_1</TD> + <TD class='field_center'>$param_2</TD> + <TD class='field_center'>$param_3</TD> + </TR>"; + $licz++; + } + ?> + </table> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site203_006.$sql_1 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select ENG_NAME,ENG_VOLTAGE,ENG_POWER,MCF_NAME from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_manufacturers on ENG_MCF_ID=MCF_ID where RPE_PUP_ID=".$_GET['pup']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_4 = $r["ENG_NAME"]; + $param_5 = $r["ENG_VOLTAGE"]; + $param_6 = $r["ENG_POWER"]; $param_6= str_replace(".", ",", $param_6); + $param_7 = $r["MCF_NAME"]; + + + echo" + <TR> + <TD class='field_center'>$param_4</TD> + <TD class='field_center'>$param_5</TD> + <TD class='field_center'>$param_6</TD> + <TD class='field_center'>$param_7</TD> + </TR>"; + } + ?> + </table> + </div> + + + + + +</div> + + + + + + + + +<?php + + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_01.png"; + $fileName2="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_02.png"; + + if (file_exists( $fileName1)) unlink($fileName1); + if (file_exists( $fileName2)) unlink($fileName2); + + + + if ($licz>1 && sqlValue("select COUNT(1) from seg_pump_eng_param where PEP_Y_PARAM=0 and PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup'])==0) + { + // Wysokość podnoszenia + // =======================================================================================// + require_once('./polynomial/plot.php' ); + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $scope[] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + + + + + + $xMin = 0; + $xMinLine = $xMin; + + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); //$xMax = ceil($xMax+1); + + //$xMax = ceil($xMax+1); + + $yMax = sqlValue("select max(PEP_Y_PARAM) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $yMax = ceil($yMax+10); + + $X_MajorScale = $xMax/4; + $X_MinorScale = $X_MajorScale / 2; + + // jeżeli przeliczamy parametry dla zadaneo Q + $Y_MajorScale = $yMax/4; + $Y_MinorScale = $Y_MajorScale / 2; + + $data = $newParam; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax); + $plot->setY_Span( 0, ceil($yMax/4)*4 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression->getCoefficients(); + + // Place text + $font = './fonts/verdana.ttf'; + imagettftext($image, 8, 0, 10,15, $colorMap["Black"], $font, 'H[m]'); + imagettftext($image, 8, 0, 350,325, $colorMap["Black"], $font, 'Q[m3/min]'); + + + + // rysuje punkty +// plotRenderRegression( $polynomialRegression, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[0], $scope[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[2], $scope[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[3], $scope[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[5], $scope[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[6], $xMaxLine, $colorMap[ "Red" ] ); + + imagePNG( $image,$fileName1); + + unset($scope); + unset($data); + //unset($newParam); + // =======================================================================================// + + } + + if ($licz>1 && sqlValue("select COUNT(1) from seg_pump_eng_param where PEP_Y_PARAM=0 and PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup'])<2) + { + // Sprawność + // =======================================================================================// + + require_once('./polynomial/plot1.php' ); + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam1[$i][$j] = $r["PEP_X_PARAM"]; + $scope1[] = $r["PEP_X_PARAM"]; + $j++; + $newParam1[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + + $xMin = 0; + $xMinLine = $xMin; + + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); //$xMax = ceil($xMax+1); + + + + $X_MajorScale = $xMax/4; + $X_MinorScale = $X_MajorScale / 2; + // jeżeli przeliczamy parametry dla zadaneo Q + + $Y_MajorScale = 0.2; + $Y_MinorScale = $Y_MajorScale / 2; + + + $data1 = $newParam1; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression1 = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data1 as $dataPoint1 ) + $polynomialRegression1->addData( $dataPoint1[ 0 ], $dataPoint1[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data1, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax); + $plot->setY_Span( 0, 1 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression1->getCoefficients(); + + // Place text + imagettftext($image1, 8, 0, 10,15, $colorMap["Black"], $font, 'n'); + imagettftext($image1, 8, 0, 350,325, $colorMap["Black"], $font, 'Q[m3/min]'); + + // rysuje punkty +// plotRenderRegression( $polynomialRegression1, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[0], $scope1[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[2], $scope1[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[3], $scope1[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[5], $scope1[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[6], $xMaxLine, $colorMap[ "Red" ] ); + + + imagePNG( $image1,$fileName2); + + // =======================================================================================// + } + +?> + + +<div class="tag50_right"> + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if ($licz>1 && sqlValue("select COUNT(1) from seg_pump_eng_param where PEP_Y_PARAM=0 and PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup'])==0) + echo"<img SRC=$fileName1>"; + else + echo $lab_Field_site203_017; + ?> + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_005 ;?></div> + <div class="tag_center"> + <?php + if ($licz>1 && sqlValue("select COUNT(1) from seg_pump_eng_param where PEP_Y_PARAM=0 and PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup'])<2) + echo"<img SRC=$fileName2>"; + else + echo $lab_Field_site203_017; + ?> + </div> + + <?php + + $param_1 = str_replace(",",".",$param_1); + $sql_3 = str_replace(",",".",$sql_3); + $_POST['inQ4count'] = str_replace(",",".",$_POST['inQ4count']); + + if (!$_POST['inQ4count']) $_POST['inQ4count']=$sql_3; + + + + if ($_POST['subQ4Recount']==$lab_ButtonName_Recount && $_POST['inQ4count']>$param_1) { $_POST['inQ4count']=$param_1; $erMess=$lab_Field_site203_021;} + else if ($_POST['subQ4Recount']==$lab_ButtonName_Recount && $_POST['inQ4count']<0) { $_POST['inQ4count']=0; $erMess=$lab_Field_site203_021; } + + if ($_POST['inQ4count']<$scope1[2]) $style4Q = 'red_value'; + else if ($_POST['inQ4count']>=$scope1[2] && $_POST['inQ4count']<$scope1[3]) $style4Q = 'yellow_value'; + else if ($_POST['inQ4count']>=$scope1[3] && $_POST['inQ4count']<$scope1[5]) $style4Q = 'green_value'; + else if ($_POST['inQ4count']>=$scope1[5] && $_POST['inQ4count']<$scope1[6]) $style4Q = 'yellow_value'; + else if ($_POST['inQ4count']>=$scope1[6]) $style4Q = 'red_value'; + + $param_1 = str_replace(".",",",$param_1); + $_POST['inQ4count'] = str_replace(".",",",$_POST['inQ4count']); + + ?> + + + + <div class="head_tag"><?php echo $lab_Tag_site203_008 ;?></div> + <div class="tag"> + <form method="post" action="?pg=site203inf"> + <input type="hidden" name="pup" value="<?php echo$_GET['pup'];?>"> + + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_018a; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inQ4count" value="<?php echo $_POST['inQ4count'] ;?>"></TD> + <TD class="desc_value"><?php echo "<span class='com_error'> $erMess </span>" ;?> </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_019; ?> </TD> + <TD CLASS="<?php echo $style4Q; ?>"><?php echo round(getPolynomialValue($newParam,getFloatValue($_POST['inQ4count'])),2) ;?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_020; ?></TD> + <TD CLASS="<?php echo $style4Q; ?>"><?php echo round(getPolynomialValue($newParam1,getFloatValue($_POST['inQ4count'])),2) ;?></TD> + <TD class="desc_value"><input class='btn btn-default btn-sm' type="submit" name="subQ4Recount" value="<?php echo $lab_ButtonName_Recount; ?>"></TD> + </TR> + </TABLE> + </form> + + + </div> + + + +</div> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + <div class="tag_buttons"> + <a href="./?pg=site203"><INPUT class='btn btn-info btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back ; ?>"></A> + <?php + if (!empty($_SESSION['site203_edit'])) + echo" + <a class='confirmation' href=./?pg=site203&pup=".$_GET['pup']."&del=OK ><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Delete'></A> + <a href=./?pg=site203E&pup=".$_GET['pup']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + "; + ?> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + \ No newline at end of file diff --git a/sites/site203inf_xy_formula.php b/sites/site203inf_xy_formula.php new file mode 100644 index 0000000..f0a64c5 --- /dev/null +++ b/sites/site203inf_xy_formula.php @@ -0,0 +1,127 @@ +<?php +mysql_query("DELETE FROM seg_pumps_xy_formula WHERE PUF_PUP_ID=".$_GET['pup']); + +// dla H +$i=0; $j=0; +$wynik = mysql_query("select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; +} +$data = $newParam; +bcscale( 10 ); +$polynomialRegression = new PolynomialRegression( 4 ); +foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); +$coefficients = $polynomialRegression->getCoefficients(); +$functionText = ""; +foreach ( $coefficients as $power => $coefficient ) +{ + if ( $power > 0 ) + $functionText .= "#+"; + + $functionText .= round( $coefficient, 20 ); + + if ( $power > 0 ) + { + $functionText .= "x"; + if ( $power > 1 ) + $functionText .= "^" . $power; + } +} + + $functionText = str_replace('+-', '-', $functionText); + $fx_parameters= $functionText; + + $functionText = str_replace('#', '', $functionText); + + $d = strtok($fx_parameters, '#'); + $c = strtok('#'); + $b = strtok('#'); + $a = strtok('#'); + + $a = str_replace('x^3','',$a); $a = str_replace('+','',$a); + $b = str_replace('x^2','',$b); $b = str_replace('+','',$b); + $c = str_replace('x','',$c); $c = str_replace('+','',$c); + $d = str_replace('+','',$d); + + mysql_query("INSERT INTO seg_pumps_xy_formula SET PUF_PUP_ID=".$_GET['pup'].",PUF_XY_FORMULA='y = $functionText',PUF_A='$a',PUF_B='$b',PUF_C='$c',PUF_D='$d',PUF_TYPE='H'"); + +// Place text +unset($data); +unset($newParam); +unset($dataPoint); +unset($power); +unset($coefficients); +unset($functionText); +unset($fx_parameters); +unset($polynomialRegression); + + + +// dla ETA + $i=0; $j=0; + $wynik = mysql_query("select PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + $data = $newParam; + bcscale( 10 ); + + // Symulacja żeby sprawność wykreślała parabole x^2 +// $polynomialRegression = new PolynomialRegression( 3 ); + $polynomialRegression = new PolynomialRegression( 4 ); + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + $coefficients = $polynomialRegression->getCoefficients(); + $functionText = ""; + foreach ( $coefficients as $power => $coefficient ) + { + if ( $power > 0 ) + $functionText .= "#+"; + + $functionText .= round( $coefficient, 20 ); + + if ( $power > 0 ) + { + $functionText .= "x"; + if ( $power > 1 ) + $functionText .= "^" . $power; + } + } + + $functionText = str_replace('+-', '-', $functionText); + $fx_parameters= $functionText; + + $functionText = str_replace('#', '', $functionText); + + $d = strtok($fx_parameters, '#'); + $c = strtok('#'); + $b = strtok('#'); + $a = strtok('#'); + + $a = str_replace('x^3','',$a); $a = str_replace('+','',$a); + $b = str_replace('x^2','',$b); $b = str_replace('+','',$b); + $c = str_replace('x','',$c); $c = str_replace('+','',$c); + $d = str_replace('+','',$d); + + mysql_query("INSERT INTO seg_pumps_xy_formula SET PUF_PUP_ID=".$_GET['pup'].",PUF_XY_FORMULA='y = $functionText',PUF_A='$a',PUF_B='$b',PUF_C='$c',PUF_D='$d',PUF_TYPE='ETA'"); + + +// Place text + unset($data); + unset($newParam); + unset($dataPoint); + unset($power); + unset($coefficients); + unset($functionText); + unset($fx_parameters); + unset($polynomialRegression); +?> \ No newline at end of file diff --git a/sites/site204.php b/sites/site204.php new file mode 100644 index 0000000..031f997 --- /dev/null +++ b/sites/site204.php @@ -0,0 +1,241 @@ +<?php +if (!empty($_SESSION['site204'])) +{ +?> + + + +<?php + //usuwanie - logiczne ukrywanie + if (!empty($_SESSION['site204_edit']) && $_GET['del']=='OK') + { + + mysql_query("UPDATE seg_engines SET ENG_STATUS='0' WHERE ENG_ID=".$_GET['eng']); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + + } + // dodawanie + if (!empty($_POST['inEngName']) && $_POST['subEngSave']==$lab_ButtonName_Save) + { + $checkIsExists = sqlGetResAsArray("SELECT * FROM seg_engines WHERE ENG_NAME='".$_POST['inEngName']."' AND ENG_VOLTAGE='".$_POST['inEngVolt']."'"); + if (count($checkIsExists)>0) + { + echo"<div class='actionERROR'>Silnik ".$_POST['inEngName']." o napięciu ".$_POST['inEngVolt']."[V] istnieje już w systemie</div>"; + + } + else + { + $query_tmp = "INSERT INTO seg_engines SET ENG_MCF_ID=".$_POST['inEngNManufID'].",ENG_NAME='".$_POST['inEngName']."',ENG_STATUS='1'"; + if (str_replace(",",".",$_POST['inEngVolt'])>0) $query_tmp .= ",ENG_VOLTAGE=".str_replace(",",".",$_POST['inEngVolt']); + if (str_replace(",",".",$_POST['inEngDl'])>0) $query_tmp .= ",ENG_LENGTH=".str_replace(",",".",$_POST['inEngDl']); + if (str_replace(",",".",$_POST['inEngMass'])>0) $query_tmp .= ",ENG_WEIGHT=".str_replace(",",".",$_POST['inEngMass']); + if (str_replace(",",".",$_POST['inEngDiam'])>0) $query_tmp .= ",ENG_DIAMETER=".str_replace(",",".",$_POST['inEngDiam']); + if (str_replace(",",".",$_POST['inEngPrzew'])>0) $query_tmp .= ",ENG_WIRES='".str_replace(",",".",$_POST['inEngPrzew'])."'"; + if (str_replace(",",".",$_POST['inEngPower'])>0) $query_tmp .= ",ENG_POWER=".str_replace(",",".",$_POST['inEngPower']); + if (str_replace(",",".",$_POST['inEngPrad'])>0) $query_tmp .= ",ENG_ELECTRICITY=".str_replace(",",".",$_POST['inEngPrad']); + if (str_replace(",",".",$_POST['inEngObrot'])>0) $query_tmp .= ",ENG_RPM=".str_replace(",",".",$_POST['inEngObrot']); + if (str_replace(",",".",$_POST['inEngCosFi'])>0) $query_tmp .= ",ENG_COS_FI=".str_replace(",",".",$_POST['inEngCosFi']); + if (str_replace(",",".",$_POST['inEngSpraw'])>0) $query_tmp .= ",ENG_ETA=".str_replace(",",".",$_POST['inEngSpraw']); + + mysql_query($query_tmp); + unset($query_tmp); + + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + + } + // aktualizacja + if (!empty($_POST['inEngName']) && $_POST['subEngUpdate']==$lab_ButtonName_Update) + { + $query_tmp = "update seg_engines SET ENG_MCF_ID=".$_POST['inEngNManufID'].",ENG_NAME='".$_POST['inEngName']."',ENG_STATUS='1'"; + if (str_replace(",",".",$_POST['inEngVolt'])>0) $query_tmp .= ",ENG_VOLTAGE=".str_replace(",",".",$_POST['inEngVolt']); + if (str_replace(",",".",$_POST['inEngDl'])>0) $query_tmp .= ",ENG_LENGTH=".str_replace(",",".",$_POST['inEngDl']); + if (str_replace(",",".",$_POST['inEngMass'])>0) $query_tmp .= ",ENG_WEIGHT=".str_replace(",",".",$_POST['inEngMass']); + if (str_replace(",",".",$_POST['inEngDiam'])>0) $query_tmp .= ",ENG_DIAMETER=".str_replace(",",".",$_POST['inEngDiam']); + if (str_replace(",",".",$_POST['inEngPrzew'])>0) $query_tmp .= ",ENG_WIRES='".str_replace(",",".",$_POST['inEngPrzew'])."'"; + if (str_replace(",",".",$_POST['inEngPower'])>0) $query_tmp .= ",ENG_POWER=".str_replace(",",".",$_POST['inEngPower']); + if (str_replace(",",".",$_POST['inEngPrad'])>0) $query_tmp .= ",ENG_ELECTRICITY=".str_replace(",",".",$_POST['inEngPrad']); + if (str_replace(",",".",$_POST['inEngObrot'])>0) $query_tmp .= ",ENG_RPM=".str_replace(",",".",$_POST['inEngObrot']); + if (str_replace(",",".",$_POST['inEngCosFi'])>0) $query_tmp .= ",ENG_COS_FI=".str_replace(",",".",$_POST['inEngCosFi']); + if (str_replace(",",".",$_POST['inEngSpraw'])>0) $query_tmp .= ",ENG_ETA=".str_replace(",",".",$_POST['inEngSpraw']); + $query_tmp .= " where ENG_ID=".$_POST['inEngId']; + + mysql_query($query_tmp); + unset($query_tmp); + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') { $_SESSION['site204_input'] = $_POST['sr_well']; $_SESSION['site204_sr_param'] = $_POST['sr_param']; } + ?> + + + <?php + $typSelArray = array( + array('id'=>1, 'value'=>$lab_Field_site204_001), + array('id'=>2, 'value'=>$lab_Field_site204_003), + ); + ?> + + + + + <form action="./?pg=site204&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td><?php getSelectValueAsArray('sr_param', $typSelArray,$_SESSION['site204_sr_param']); ?></td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site204_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + <?php echo $lab_HistoricalData_007; ?> + </td> + </tr> + </table> + </div> + </form> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site204_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_004 ;?></TD> + </TR> + + <?php + + if (empty($_SESSION['site204_array']) || $_POST['sub_search']=='Szukaj') + { + $query="select ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,MCF_NAME from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_STATUS='1' "; + + // wybiera odpowiedni operator +- 10% + if ($_SESSION['site204_sr_param']==1) $query .= " and ENG_NAME like '%".$_POST['sr_well']."%'"; + elseif ($_SESSION['site204_sr_param']==2) $query .= " and ENG_POWER >= ".(getFullFloatValue($_POST['sr_well']) - getFullFloatValue($_POST['sr_well'])*0.1)." and ENG_POWER <= ".(getFullFloatValue($_POST['sr_well']) + getFullFloatValue($_POST['sr_well'])*0.1); + + + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " order by ENG_POWER, ENG_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'id' => $r["ENG_ID"], + 'mfc' =>$r["MCF_NAME"], + 'engName' =>$r["ENG_NAME"], + 'engPower' =>str_replace(".", ",", $r["ENG_POWER"]), + 'engVoltage'=>str_replace(".", ",", $r["ENG_VOLTAGE"]) + ); + } + unset($_SESSION['site204_array']); + $_SESSION['site204_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site204_array'])) $stop=count($_SESSION['site204_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site204inf&eng=".$_SESSION['site204_array'][$i]['id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site204_array'][$i]['engName']."</TD> + <TD class='field_right'>".$_SESSION['site204_array'][$i]['engVoltage']."</TD> + <TD class='field_right'>".$_SESSION['site204_array'][$i]['engPower']."</TD> + <TD class='field_center'>".$_SESSION['site204_array'][$i]['mfc']."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site204_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site204_array'])>20) + echo pagination_grid('?pg=site204', $_GET['pgn'], count($_SESSION['site204_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site204_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site204_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + </div> + + <?php + if (!empty($_SESSION['site204_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site204A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site204A.php b/sites/site204A.php new file mode 100644 index 0000000..a296532 --- /dev/null +++ b/sites/site204A.php @@ -0,0 +1,104 @@ +<?php +if (!empty($_SESSION['site204_edit'])) +{ +?> + + +<?php +$wynik = mysql_query("select ENG_ID,ENG_NAME,MCF_NAME,ENG_POWER,ENG_VOLTAGE,ENG_ELECTRICITY,ENG_ETA,ENG_COS_FI,ENG_RPM,ENG_LENGTH,ENG_WEIGHT,ENG_DIAMETER,ENG_WIRES from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_ID=".$_GET['eng']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["ENG_ID"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = $r["ENG_POWER"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["ENG_VOLTAGE"]; $sql_4= str_replace(".", ",", $sql_4); + $sql_5 = $r["ENG_ELECTRICITY"]; $sql_5= str_replace(".", ",", $sql_5); + $sql_6 = $r["ENG_ETA"]; $sql_6= str_replace(".", ",", $sql_6); + $sql_7 = $r["ENG_COS_FI"]; $sql_7= str_replace(".", ",", $sql_7); + $sql_8 = $r["ENG_RPM"]; $sql_8= str_replace(".", ",", $sql_8); + $sql_9 = $r["ENG_LENGTH"]; $sql_9= str_replace(".", ",", $sql_9); + $sql_10 = $r["ENG_WEIGHT"]; $sql_10= str_replace(".", ",", $sql_10); + $sql_11 = $r["ENG_DIAMETER"]; $sql_11= str_replace(".", ",", $sql_11); + $sql_12 = $r["ENG_WIRES"]; $sql_12= str_replace(".", ",", $sql_12); + $sql_13 = $r["ENG_NAME"]; + + } +?> + +<FORM ACTION="?pg=site204" METHOD="POST" id="AddNewEng" class="form_valid"> +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site204_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_001; ?></TD> + <TD CLASS="desc_value"><input type="text" class="text50_req" name="inEngName" required="required"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_004; ?></TD> + <TD CLASS=desc_value><?php echo selectManufacturersNameReq('inEngNManufID'); ?></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site204_003; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float_req" name="inEngPower" required="required"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_002; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float_req" name="inEngVolt" required="required"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_005; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngPrad"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_006; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngSpraw"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_007; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngCosFi"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_008; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngObrot"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_009; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngDl"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_010; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngMass"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_011; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngDiam"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_012; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngPrzew"></TD> + </TR> + </table> + </div> + +</div> + + + <div class="tag100"> + <div class="tag_buttons"> + <input class="btn btn-info btn-sm" type="button" onclick="location.href = '?pg=site204'" VALUE="<?php echo $lab_ButtonName_Back; ?>"> + + <?php + if (!empty($_SESSION['site204_edit'])) + echo" + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subEngSave' VALUE='$lab_ButtonName_Save'> + "; + ?> + </div> + </div> +</FORM> +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site204E.php b/sites/site204E.php new file mode 100644 index 0000000..4fef3eb --- /dev/null +++ b/sites/site204E.php @@ -0,0 +1,103 @@ +<?php +if (!empty($_SESSION['site204_edit'])) +{ +?> + + +<?php +$wynik = mysql_query("select ENG_ID,ENG_NAME,ENG_MCF_ID,ENG_POWER,ENG_VOLTAGE,ENG_ELECTRICITY,ENG_ETA,ENG_COS_FI,ENG_RPM,ENG_LENGTH,ENG_WEIGHT,ENG_DIAMETER,ENG_WIRES from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_ID=".$_GET['eng']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["ENG_ID"]; + $sql_2 = $r["ENG_MCF_ID"]; + $sql_3 = $r["ENG_POWER"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["ENG_VOLTAGE"]; $sql_4= str_replace(".", ",", $sql_4); + $sql_5 = $r["ENG_ELECTRICITY"]; $sql_5= str_replace(".", ",", $sql_5); + $sql_6 = $r["ENG_ETA"]; $sql_6= str_replace(".", ",", $sql_6); + $sql_7 = $r["ENG_COS_FI"]; $sql_7= str_replace(".", ",", $sql_7); + $sql_8 = $r["ENG_RPM"]; $sql_8= str_replace(".", ",", $sql_8); + $sql_9 = $r["ENG_LENGTH"]; $sql_9= str_replace(".", ",", $sql_9); + $sql_10 = $r["ENG_WEIGHT"]; $sql_10= str_replace(".", ",", $sql_10); + $sql_11 = $r["ENG_DIAMETER"]; $sql_11= str_replace(".", ",", $sql_11); + $sql_12 = $r["ENG_WIRES"]; $sql_12= str_replace(".", ",", $sql_12); + $sql_13 = $r["ENG_NAME"]; + + } +?> + +<FORM ACTION="?pg=site204" METHOD="POST" id="AddNewEng" class="form_valid"> + <input type="hidden" name="inEngId" value="<?php echo $sql_1;?>"> +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site301_009 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><input type="text" class="text50_req" name="inEngName" value="<?php echo $sql_13 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_004; ?></TD> + <TD CLASS=desc_value><?php echo selectManufacturersName('inEngNManufID', $sql_2); ?></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site204_003; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngPower" value="<?php echo $sql_3 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_002; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngVolt" value="<?php echo $sql_4 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_005; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngPrad" value="<?php echo $sql_5 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_006; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngSpraw" value="<?php echo $sql_6 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_007; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngCosFi" value="<?php echo $sql_7 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_008; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngObrot" value="<?php echo $sql_8 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_009; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngDl" value="<?php echo $sql_9 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_010; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngMass" value="<?php echo $sql_10 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_011; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngDiam" value="<?php echo $sql_11 ; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_012; ?></TD> + <TD CLASS="desc_value"><input type="text" class="float" name="inEngPrzew" value="<?php echo $sql_12 ; ?>"></TD> + </TR> + </table> + </div> + +</div> + + + <div class="tag100"> + <div class="tag_buttons"> + <a href="?pg=site204"><INPUT class='btn btn-info btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back ; ?>"></A> + <?php + if (!empty($_SESSION['site204_edit'])) + echo" + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subEngUpdate' VALUE='$lab_ButtonName_Update'> + "; + ?> + </div> +</FORM> +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site204inf.php b/sites/site204inf.php new file mode 100644 index 0000000..80049b8 --- /dev/null +++ b/sites/site204inf.php @@ -0,0 +1,169 @@ +<?php +if (!empty($_SESSION['site204'])) +{ +?> + + +<?php +$wynik = mysql_query("select ENG_ID,ENG_NAME,MCF_NAME,ENG_POWER,ENG_VOLTAGE,ENG_ELECTRICITY,ENG_ETA,ENG_COS_FI,ENG_RPM,ENG_LENGTH,ENG_WEIGHT,ENG_DIAMETER,ENG_WIRES from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_ID=".$_GET['eng']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["ENG_ID"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = $r["ENG_POWER"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["ENG_VOLTAGE"]; $sql_4= str_replace(".", ",", $sql_4); + $sql_5 = $r["ENG_ELECTRICITY"]; $sql_5= str_replace(".", ",", $sql_5); + $sql_6 = $r["ENG_ETA"]; $sql_6= str_replace(".", ",", $sql_6); + $sql_7 = $r["ENG_COS_FI"]; $sql_7= str_replace(".", ",", $sql_7); + $sql_8 = $r["ENG_RPM"]; $sql_8= str_replace(".", ",", $sql_8); + $sql_9 = $r["ENG_LENGTH"]; $sql_9= str_replace(".", ",", $sql_9); + $sql_10 = $r["ENG_WEIGHT"]; $sql_10= str_replace(".", ",", $sql_10); + $sql_11 = $r["ENG_DIAMETER"]; $sql_11= str_replace(".", ",", $sql_11); + $sql_12 = $r["ENG_WIRES"]; $sql_12= str_replace(".", ",", $sql_12); + $sql_13 = $r["ENG_NAME"]; + + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site204_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_13; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_004; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site204_003; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_005; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_5; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_006; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_6; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_007; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_7; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_008; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_8; ?></TD> + </TR> + + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site204_009; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_9; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_010; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_10; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_011; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_11; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site204_012; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_12; ?></TD> + </TR> + </table> + </div> + + + + + + + +</div> + + + + + + + + +<div class="tag50_right"> + <div class="head_tag"><?php echo $lab_Tag_site204_003.$sql_13 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select PUP_NAME,PUP_Q_N,PUP_H_P,MCF_NAME from seg_pump_engine_rel left join seg_pumps on PUP_ID=RPE_PUP_ID left join seg_manufacturers on PUP_MCF_ID=MCF_ID where RPE_ENG_ID=".$_GET['eng']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["PUP_NAME"]; + $param_2 = $r["PUP_Q_N"]; $param_2= str_replace(".", ",", $param_2); + $param_3 = $r["PUP_H_P"]; $param_3= str_replace(".", ",", $param_3); + $param_4 = $r["MCF_NAME"]; + + + echo" + <TR> + <TD class='field_center'>$param_1</TD> + <TD class='field_center'>$param_2</TD> + <TD class='field_center'>$param_3</TD> + <TD class='field_center'>$param_4</TD> + </TR>"; + } + ?> + </table> + </div> +</div> + + + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + <div class="tag_buttons"> + <a href="?pg=site204"><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back ; ?>"></A> + <?php + if (!empty($_SESSION['site204_edit'])) + echo" + <a class='confirmation' href=?pg=site204&eng=".$_GET['eng']."&del=OK ><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Delete'></A> + <a href=?pg=site204E&eng=".$_GET['eng']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + "; + ?> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site205.php b/sites/site205.php new file mode 100644 index 0000000..f3e0e9c --- /dev/null +++ b/sites/site205.php @@ -0,0 +1,487 @@ +<?php +if (!empty($_SESSION['site205'])) +{ +?> + + +<?php +if ($_POST['subEng4PupUpdate']== $lab_ButtonName_Update) + { + $_GET['pup']=$_POST['pup']; + mysql_query("DELETE FROM seg_pump_engine_rel where RPE_PUP_ID=".$_POST['pup']); + + $wynik = mysql_query("select ENG_ID from seg_engines"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eID = $r["ENG_ID"]; + if ($_POST['eng4pump'][$eID]) + mysql_query("INSERT INTO seg_pump_engine_rel SET RPE_PUP_ID=".$_POST['pup'].",RPE_ENG_ID=$eID"); + } + } +?> + + + + <?php + if (!$_POST['sr_status']) $_POST['sr_status']=100; + if (!$_SESSION['site203_sr_param']) $_SESSION['site203_sr_param']=1; + + if ($_POST['sub_search']=='Szukaj') { $_SESSION['site203_input'] = $_POST['sr_well']; $_SESSION['site203_sr_param'] = $_POST['sr_param']; } + + $typSelArray = array( + array('id'=>1, 'value'=>$lab_Field_site203_001), + array('id'=>2, 'value'=>$lab_Field_site203_002a), + ); + ?> + + +<?php +if (!empty($_POST['sr_well'])) $_SESSION['site203_input']=$_POST['sr_well']; + +?> + + + +<div class="tag100"> + <form action="./?pg=site205" method="post"> + <div class="tag100"> + <table> + <tr> + <td><?php getSelectValueAsArray('sr_param', $typSelArray,$_SESSION['site203_sr_param']); ?></td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site203_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + </table> + </div> + </form> +</div> +<br/><br/> + + + + + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site303_001 ;?></div> + <div class="tag"> + <table class="tag" style="width: 100%;"> + <TR> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002a ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + </TR> + + <?php + + + $query="select PUP_ID,MCF_NAME,PUP_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P from seg_pumps left join seg_manufacturers on PUP_MCF_ID=MCF_ID where "; + + // wybiera odpowiedni operator + if ($_SESSION['site203_sr_param']==1) $query .= " PUP_STATUS='1' and PUP_NAME like '%".$_SESSION['site203_input']."%'"; + //elseif ($_SESSION['site203_sr_param']==2) $query .= " PUP_STATUS='1' and (PUP_Q_N/60) = ".getFullFloatValue($_POST['sr_well']); + elseif ($_SESSION['site203_sr_param']==2) $query .= " PUP_STATUS='1' and (PUP_Q_N/60) >= (".(getFullFloatValue($_POST['sr_well'])-(getFullFloatValue($_POST['sr_well'])*0.1)).") and (PUP_Q_N/60) <= (".(getFullFloatValue($_POST['sr_well'])+(getFullFloatValue($_POST['sr_well'])*0.1)).")"; + + + + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " and PUP_Q_N>0 order by PUP_Q_N,PUP_NAME limit 40"; + + + + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_203_PUP_ID = $r["PUP_ID"]; if(!$_GET['pup']) $_GET['pup']=$sql_203_PUP_ID; + $sql_203_PUP_MCF_ID = $r["MCF_NAME"]; + $sql_203_PUP_NAME = $r["PUP_NAME"]; + $sql_203_PUP_Q_N = round($r["PUP_Q_N"],3); $sql_203_PUP_Q_N= str_replace(".", ",", $sql_203_PUP_Q_N); + + if ($_GET['pup']==$sql_203_PUP_ID) + $styl = 'background-color: #ffff00;'; + else $styl=''; + + echo" + <TR STYLE='cursor: pointer; ".$styl."' onclick=".chr(34)."document.location.href='?pg=site205&pup=$sql_203_PUP_ID'".chr(34)."> + <TD class='field_left'>$sql_203_PUP_NAME</TD> + <TD class='field_right'>$sql_203_PUP_Q_N</TD> + <TD class='field_center'>$sql_203_PUP_MCF_ID</TD> + </TR> + "; + } + ?> + </table> + </div> + + + + + + + +</div> + + + + + + + + +<div class="tag50_right"> + + + <?php + + + // Sprawdza, czy została wybrana pompa oraz czy posiada parametry energetyczne w bazie. + if ($_GET['pup']>0 && sqlValue("select max(PEP_Y_PARAM) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup'])>0 && sqlValue("select max(PEP_Y_PARAM) from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup'])>0) + { + + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_01.png"; + $fileName2="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_203inf_02.png"; + + if (file_exists( $fileName1)) unlink($fileName1); + if (file_exists( $fileName2)) unlink($fileName2); + + // Wysokość podnoszenia + // =======================================================================================// + require_once('./polynomial/PolynomialRegression.php' ); + require_once('./polynomial/plot.php' ); + + + unset($scope); + unset($data); + unset($newParam); + + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam[$i][$j] = $r["PEP_X_PARAM"]; + $scope[] = $r["PEP_X_PARAM"]; + $j++; + $newParam[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); + + $yMax = sqlValue("select max(PEP_Y_PARAM) from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_GET['pup']); + $yMax = ceil($yMax+10); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + $Y_MajorScale = ceil($yMax/4); + $Y_MinorScale = $Y_MajorScale / 2; + + $data = $newParam; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data as $dataPoint ) + $polynomialRegression->addData( $dataPoint[ 0 ], $dataPoint[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax); + $plot->setY_Span( 0, ceil($yMax/4)*4 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression->getCoefficients(); + + // Place text + imageString($image,5,0,0,'H[m]',$colorMap[ "Black" ]); + imageString($image,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty +// plotRenderRegression( $polynomialRegression, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[0], $scope[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[2], $scope[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[3], $scope[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[5], $scope[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression, $coefficients, $scope[6], $xMaxLine, $colorMap[ "Red" ] ); + + imagePNG( $image,$fileName1); + // =======================================================================================// + + + require_once('./polynomial/plot1.php' ); + + unset($scope1); + unset($data); + unset($newParam); + + + $i=0; $j=0; + $wynik = mysql_query("select (PEP_X_PARAM/60) PEP_X_PARAM,PEP_Y_PARAM from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $newParam1[$i][$j] = $r["PEP_X_PARAM"]; + $scope1[] = $r["PEP_X_PARAM"]; + $j++; + $newParam1[$i][$j] = $r["PEP_Y_PARAM"]; + $i++; $j=0; + } + + + $xMin = 0; + $xMinLine = $xMin; + + $xMax = sqlValue("select max(PEP_X_PARAM/60) from seg_pump_eng_param where PEP_TYPE='ETA' and PEP_PUP_ID=".$_GET['pup']); + $xMaxLine = ceil($xMax); + + $X_MajorScale = $xMax/5; + $X_MinorScale = $X_MajorScale / 2; + + $Y_MajorScale = 0.2; + $Y_MinorScale = $Y_MajorScale / 2; + + + $data1 = $newParam1; + + // Precision digits in BC math. + bcscale( 10 ); + + // Start a regression class with a maximum of 4rd degree polynomial. + $polynomialRegression1 = new PolynomialRegression( 4 ); + + // Add all the data to the regression analysis. + foreach ( $data1 as $dataPoint1 ) + $polynomialRegression1->addData( $dataPoint1[ 0 ], $dataPoint1[ 1 ] ); + + // Add raw data to plot. + plotRenderData( $data1, $colorMap[ "Blue" ] ); + + $plot->setX_Span( 0, $xMax ); + $plot->setY_Span( 0, 1 ); + + plotAddScale(); + + // Render the points to image + $plot->setCircleSize( 3 ); + $plot->renderPoints(); + + // Get coefficients for the polynomial. + $coefficients = $polynomialRegression1->getCoefficients(); + + // Place text + imageString($image1,5,0,0,'n',$colorMap[ "Black" ]); + imagerectangle($image1,6,12,7,17,$colorMap[ "Black" ]); + imageString($image1,3,355,313,'Q[m3/min]',$colorMap[ "Black" ]); + + // rysuje punkty + // plotRenderRegression( $polynomialRegression1, $coefficients, $xMinLine, $xMaxLine, $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[0], $scope1[2], $colorMap[ "Red" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[2], $scope1[3], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[3], $scope1[5], $colorMap[ "Green" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[5], $scope1[6], $colorMap[ "DarkYellow" ] ); + plotRenderRegression( $polynomialRegression1, $coefficients, $scope1[6], $xMaxLine, $colorMap[ "Red" ] ); + + + imagePNG( $image1,$fileName2); + + + } + + ?> + + + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if (count($scope)>0) + echo"<img SRC=$fileName1>"; + else + echo $lab_Field_site203_017; + ?> + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_005 ;?></div> + <div class="tag_center"> + <?php + if (count($scope1)>0) + echo"<img SRC=$fileName2>"; + else + echo $lab_Field_site203_017; + ?> + </div> + + + + + + + + + <div class="head_tag"><?php echo $lab_Tag_site203_006.sqlValue("select PUP_NAME from seg_pumps where PUP_ID=".$_GET['pup']) ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select RPE_ENG_ID,ENG_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=ENG_MCF_ID) ENG_MCF,ENG_VOLTAGE from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["RPE_ENG_ID"]; if (!$_GET['eng']) $_GET['eng']=$param_1; + $param_4 = $r["ENG_NAME"]; + $param_5 = $r["ENG_VOLTAGE"]; $param_6= str_replace(".", ",", $param_6); + $param_6 = $r["ENG_MCF"]; + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site205&pup=".$_GET['pup']."&eng=$param_1'".chr(34)."> + <TD class='field_center'>$param_4</TD> + <TD class='field_center'>$param_5</TD> + <TD class='field_center'>$param_6</TD> + </TR>"; + } + ?> + </table> + </div> + <?php + $wynik = mysql_query("select PUP_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=PUP_MCF_ID) PUP_MCF,(PUP_Q_N/60) PUP_Q_N,PUP_H_P,PUP_ETA_MAX,ENG_NAME,(select MCF_NAME from seg_manufacturers where MCF_ID=ENG_MCF_ID) ENG_MCF,ENG_VOLTAGE,ENG_POWER,ENG_ETA from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']." and RPE_ENG_ID=".$_GET['eng']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $mix_1 = $r["PUP_NAME"]; + $mix_2 = $r["PUP_MCF"]; + $mix_3 = round($r["PUP_Q_N"],3); $mix_3= str_replace(".", ",", $mix_3); + $mix_4 = $r["PUP_H_P"]; $mix_4= str_replace(".", ",", $mix_4); + $mix_5 = $r["PUP_ETA_MAX"]; $mix_5= str_replace(".", ",", $mix_5); + $mix_6 = $r["ENG_NAME"]; + $mix_7 = $r["ENG_MCF"]; + $mix_8 = $r["ENG_VOLTAGE"]; + $mix_9 = $r["ENG_POWER"]; $mix_9= str_replace(".", ",", $mix_9); + $mix_10 = $r["ENG_ETA"]; $mix_10= str_replace(".", ",", $mix_10); + } + + ?> + + + <div class="head_tag"><?php echo sqlValue("select concat (PUP_NAME, ' + ',ENG_NAME) from seg_pump_engine_rel left join seg_engines on RPE_ENG_ID=ENG_ID left join seg_pumps on RPE_PUP_ID=PUP_ID where RPE_PUP_ID=".$_GET['pup']." and RPE_ENG_ID=".$_GET['eng']) ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR > + + <?php echo"<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site203inf&pup=".$_GET['pup']."'".chr(34).">"; ?> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_1; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_2; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_002a; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_003; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_009; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_5; ?></TD> + </TR> + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + <?php echo"<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site204inf&eng=".$_GET['eng']."'".chr(34).">"; ?> + <TD class="desc"><?php echo $lab_Field_site204_001; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_6; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_004; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_7; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_002; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_8; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_003; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_9; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_006; ?></TD> + <TD CLASS="desc_value"><?php echo $mix_10; ?></TD> + </TR> + </table> + </div> + + + + + + + + + + +</div> + + + + <?php + if (!empty($_SESSION['site205_edit'])) + echo" + <div class='tag100'> + <div class='tag_buttons'> + <a href=?pg=site205E&pup=".$_GET['pup']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + </div> + </div> + "; + ?> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site205E.php b/sites/site205E.php new file mode 100644 index 0000000..1114808 --- /dev/null +++ b/sites/site205E.php @@ -0,0 +1,68 @@ +<?php +if (!empty($_SESSION['site205_edit'])) +{ +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site203_006.sqlValue("select PUP_NAME from seg_pumps where PUP_ID=".$_GET['pup']) ;?></div> + <div class="tag"> + <FORM ACTION="?pg=site205" METHOD="POST"> + <?php echo"<INPUT TYPE=HIDDEN NAME=pup VALUE='".$_GET['pup']."'>"; ?> + + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_004 ;?></TD> + <TD class="label"></TD> + </TR> + + <?php + $wynik = mysql_query("select ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,MCF_NAME from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID order by ENG_POWER, ENG_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_204_1 = $r["ENG_ID"]; + $sql_204_2 = $r["ENG_NAME"]; + $sql_204_3 = $r["ENG_VOLTAGE"]; + $sql_204_4 = $r["ENG_POWER"]; $sql_204_4= str_replace(".", ",", $sql_204_4); + $sql_204_5 = $r["MCF_NAME"]; + + echo" + <TR> + <TD class='field_left'>$sql_204_2</TD> + <TD class='field_right'>$sql_204_3</TD> + <TD class='field_right'>$sql_204_4</TD> + <TD class='field_center'>$sql_204_5</TD>"; + + if (sqlValue("select count(1) from seg_pump_engine_rel where RPE_PUP_ID=".$_GET['pup']." and RPE_ENG_ID=$sql_204_1")>0) + echo"<TD class='field_center'><INPUT TYPE=CHECKBOX NAME=eng4pump[$sql_204_1] VALUE=1 CHECKED></TD>"; + else + echo"<TD class='field_center'><INPUT TYPE=CHECKBOX NAME=eng4pump[$sql_204_1] VALUE=1></TD>"; + + echo"</TR> + "; + } + + + ?> + </table> + + + + </div> + + <div class="tag_buttons"> + + <INPUT class='btn btn-info btn-sm' TYPE="SUBMIT" NAME="subEng4PupUpdate" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subEng4PupUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site206.php b/sites/site206.php new file mode 100644 index 0000000..a9ed05c --- /dev/null +++ b/sites/site206.php @@ -0,0 +1,280 @@ +<?php +if (!empty($_SESSION['site206'])) +{ +?> + +<?php + +if (!empty($_POST['eq'])) $_GET['eq'] = $_POST['eq']; + +// dodawanie nowego typu kabla do katalogu +if (!empty($_POST['inCableName']) && $_POST['subCableSave']==$lab_ButtonName_Save) +{ + mysql_query("INSERT INTO seg_equipments SET EQU_MCF_ID=".$_POST['inCableManufID'].",EQU_NAME='".$_POST['inCableName']."',EQU_DESCRIPTION='".$_POST['inCableDesc']."',EQU_TYPE_ID=13"); + $maxEQUid = sqlValue("select max(EQU_ID) from seg_equipments"); + + if (!empty($_FILES['inCableCatalogueFile']['name'])) + { + $fileName = $_FILES['inCableCatalogueFile']['name']; + $tmpName = $_FILES['inCableCatalogueFile']['tmp_name']; + $fileSize = $_FILES['inCableCatalogueFile']['size']; + $fileType = $_FILES['inCableCatalogueFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=$maxEQUid,EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + if (!empty($_FILES['inCableImageFile']['name'])) + { + $fileName = $_FILES['inCableImageFile']['name']; + $tmpName = $_FILES['inCableImageFile']['tmp_name']; + $fileSize = $_FILES['inCableImageFile']['size']; + $fileType = $_FILES['inCableImageFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=$maxEQUid,EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + delSearchSessionData(); +} + + +// aktualizacja typu kabla do katalogu + if (!empty($_POST['inCableName']) && $_POST['subCableUpdate']==$lab_ButtonName_Update) + { + mysql_query("update seg_equipments SET EQU_MCF_ID=".$_POST['inCableManufID'].",EQU_NAME='".$_POST['inCableName']."',EQU_DESCRIPTION='".$_POST['inCableDesc']."' where EQU_ID=".$_POST['eq']); + + if (!empty($_FILES['inCableCatalogueFile']['name'])) + { + $fileName = $_FILES['inCableCatalogueFile']['name']; + $tmpName = $_FILES['inCableCatalogueFile']['tmp_name']; + $fileSize = $_FILES['inCableCatalogueFile']['size']; + $fileType = $_FILES['inCableCatalogueFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_POST['eq'])>0) + mysql_query("update seg_equipments_files SET EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now() where EQF_EQU_ID=".$_POST['eq']); + else + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=".$_POST['eq'].",EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + if (!empty($_FILES['inCableImageFile']['name'])) + { + $fileName = $_FILES['inCableImageFile']['name']; + $tmpName = $_FILES['inCableImageFile']['tmp_name']; + $fileSize = $_FILES['inCableImageFile']['size']; + $fileType = $_FILES['inCableImageFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=".$_POST['eq'])>0) + mysql_query("update seg_equipments_files SET EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now() where EQF_EQU_ID=".$_POST['eq']); + else + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=".$_POST['eq'].",EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + delSearchSessionData(); + } + + + //usuwanie + // ================================================================================== + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_equipments_stock where SES_EQU_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_equipments WHERE EQU_ID=".$tpmArray[0]); + mysql_query("DELETE FROM seg_equipments_files WHERE EQF_EQU_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } + } + // ================================================================================== + + + +?> + + <?php + if (!$_POST['sr_status']) $_POST['sr_status']=100; + + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site206_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site206&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td><?php echo $lab_Field_site206_001; ?>:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site206_input'];?>"></td> + + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + + + </tr> + + + + + + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>&nbsp;"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site206_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site206_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site206_002 ;?></TD> + </TR> + + <?php + if (empty($_SESSION['site206_array']) || $_POST['sub_search']=='Szukaj') + { + $res=null; + + $query = "select EQU_ID,EQU_NAME,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=13 and EQU_NAME like '%".$_SESSION['site206_input']."%'"; + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " order by EQU_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'uq_id' => $r["EQU_ID"], + 'uq_name' => $r["EQU_NAME"], + 'uq_mfc' => $r["MCF_NAME"], + ); + } + unset($_SESSION['site206_array']); + $_SESSION['site206_array']=$res; + } + + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site206_array'])) $stop=count($_SESSION['site206_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site206inf&eq=".$_SESSION['site206_array'][$i]['uq_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site206_array'][$i]['uq_name']."</TD> + <TD class='field_left'>".$_SESSION['site206_array'][$i]['uq_mfc']."</TD> + </TR> + "; + } + ?> + </table> + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site206_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site206_array'])>20) + echo pagination_grid('?pg=site203', $_GET['pgn'], count($_SESSION['site206_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="#" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="#" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + </div> + + <?php + if (!empty($_SESSION['site206_edit'])) + echo" + <div class=tag_buttons> + <a href='./?pg=site206A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site206A.php b/sites/site206A.php new file mode 100644 index 0000000..b521617 --- /dev/null +++ b/sites/site206A.php @@ -0,0 +1,48 @@ +<?php +if (!empty($_SESSION['site206_edit'])) +{ +?> + +<div class="tag100"> +<FORM ACTION="./?pg=site206" METHOD="POST" enctype="multipart/form-data" id="CableCatalogueForm" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site206_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inCableName"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersNameReq('inCableManufID'); ?></TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inCableDesc></textarea></TD> + </TR> + + <tr> + <td class="desc"><?php echo $lab_Field_site206_004 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableCatalogueFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site206_005 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableImageFile"></td> + </tr> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site206" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subCableSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site206E.php b/sites/site206E.php new file mode 100644 index 0000000..bc4919c --- /dev/null +++ b/sites/site206E.php @@ -0,0 +1,62 @@ +<?php +if (!empty($_SESSION['site206_edit'])) +{ +?> + + <?php + $wynik = mysql_query("select EQU_MCF_ID,EQU_NAME,EQU_DESCRIPTION from seg_equipments where EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $par_1 = $r["EQU_MCF_ID"]; + $par_2 = $r["EQU_NAME"]; + $par_3 = $r["EQU_DESCRIPTION"]; + + } + ?> + + + +<div class="tag100"> +<FORM ACTION="./?pg=site206&eq=<?php echo $_GET['eq'];?>" METHOD="POST" enctype="multipart/form-data" id="CableCatalogueForm" class="form_valid"> + <input type="hidden" name="eq" value="<?php echo $_GET['eq']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site206_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inCableName" value="<?php echo $par_2; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersName('inCableManufID',$par_1); ?></TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inCableDesc><?php echo $par_3; ?></textarea></TD> + </TR> + + <tr> + <td class="desc"><?php echo $lab_Field_site206_004 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableCatalogueFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site206_005 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableImageFile"></td> + </tr> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site206inf&eq=<?php echo $_GET['eq'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subCableUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site206inf.php b/sites/site206inf.php new file mode 100644 index 0000000..feb9362 --- /dev/null +++ b/sites/site206inf.php @@ -0,0 +1,133 @@ +<?php +if (!empty($_SESSION['site206'])) +{ +?> + + +<?php +$wynik = mysql_query("select EQU_ID,EQU_NAME,EQU_DESCRIPTION,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=13 and EQU_ID=".$_GET['eq']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["EQU_DESCRIPTION"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["MCF_NAME"]; + + + + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $sql_2 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(chr(13), "<br/>", $sql_3); ?></TD> + </TR> + + + <?php + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq'])>0) + { + echo" + <TR> + <TD class='desc_equipment'>$lab_Field_site206_004</TD> + <TD CLASS='desc_value'>"; + $wynik = mysql_query("select EQF_ID,SUBSTRING_INDEX(EQF_FILE_NAME, '.', -1) ICO,EQF_FILE_NAME from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eq_1 = $r["EQF_ID"]; + $vICO = $r["ICO"]; + $eq_2 = $r["EQF_FILE_NAME"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo"<img src=$icoFile><a class='knowledge' href='./sites/eqdocgeneratefromdb.php?fno=$eq_1' target='_blank'>$eq_2</a><br/>"; + } + + + + + echo"</TD> + </TR> + + + "; + + } + + ?> + </table> + </div> +</div> + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Field_site206_005 ;?></div> + <div class="tag_center"> + + <?php + $wynik = mysql_query("select EQF_FILE_TYPE,EQF_FILE from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["EQF_FILE_TYPE"]; + $param_2 = $r["EQF_FILE"]; + + $im = imagecreatefromstring($param_2); + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_206inf_01.png"; + imagePNG( $im,$fileName); + list($width, $height) = getimagesize($fileName); + if ($width>450) + echo"<img src='$fileName' width='450'>"; + else + echo"<img src='$fileName'>"; + + //$imgData = base64_encode($param_2); + //$src = 'data: $param_1;base64,'.$imgData; + //echo"<img src='$src' >"; + } + ?> + </div> +</div> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + + +<?php if (!empty($_SESSION['site206_edit'])) { ?> +<div class="tag50_right"> + <div class="tag_buttons"> + <?php echo "<a href=./?pg=site206>"; ?><INPUT class='btn btn-info btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + <?php echo "<a class='confirmation' href=./?pg=site206&param=".$_GET['eq'].",del,".md5($_GET['eq']).">"; ?><INPUT class='btn btn-danger btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Delete; ?>"></A> + <?php echo "<a href=./?pg=site206E&eq=".$_GET['eq'].">"; ?><INPUT class='btn btn-success btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Modify; ?>"></A> + </div> +</div> +<?php } ?> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site207.php b/sites/site207.php new file mode 100644 index 0000000..1fd70b2 --- /dev/null +++ b/sites/site207.php @@ -0,0 +1,285 @@ +<?php +if (!empty($_SESSION['site207'])) +{ +?> + +<?php + + if (!empty($_POST['eq'])) $_GET['eq'] = $_POST['eq']; + + // dodawanie nowego przedmiotu do katalogu + if (!empty($_POST['inCableName']) && $_POST['subPipingSave']==$lab_ButtonName_Save) + { + mysql_query("INSERT INTO seg_equipments SET EQU_MCF_ID=".$_POST['inCableManufID'].",EQU_NAME='".$_POST['inCableName']."',EQU_DESCRIPTION='".$_POST['inCableDesc']."',EQU_PARAM_01='".$_POST['inPipingDiameter']."',EQU_PARAM_02='".$_POST['inPipingLength']."',EQU_TYPE_ID=15"); + $maxEQUid = sqlValue("select max(EQU_ID) from seg_equipments"); + + if (!empty($_FILES['inCableCatalogueFile']['name'])) + { + $fileName = $_FILES['inCableCatalogueFile']['name']; + $tmpName = $_FILES['inCableCatalogueFile']['tmp_name']; + $fileSize = $_FILES['inCableCatalogueFile']['size']; + $fileType = $_FILES['inCableCatalogueFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=$maxEQUid,EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + if (!empty($_FILES['inCableImageFile']['name'])) + { + $fileName = $_FILES['inCableImageFile']['name']; + $tmpName = $_FILES['inCableImageFile']['tmp_name']; + $fileSize = $_FILES['inCableImageFile']['size']; + $fileType = $_FILES['inCableImageFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=$maxEQUid,EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + delSearchSessionData(); + } + + + // aktualizacja przedmiotu do katalogu + if (!empty($_POST['inCableName']) && $_POST['subPipingUpdate']==$lab_ButtonName_Update) + { + mysql_query("update seg_equipments SET EQU_MCF_ID=".$_POST['inCableManufID'].",EQU_NAME='".$_POST['inCableName']."',EQU_DESCRIPTION='".$_POST['inCableDesc']."',EQU_PARAM_01='".$_POST['inPipingDiameter']."',EQU_PARAM_02='".$_POST['inPipingLength']."' where EQU_ID=".$_POST['eq']); + + if (!empty($_FILES['inCableCatalogueFile']['name'])) + { + $fileName = $_FILES['inCableCatalogueFile']['name']; + $tmpName = $_FILES['inCableCatalogueFile']['tmp_name']; + $fileSize = $_FILES['inCableCatalogueFile']['size']; + $fileType = $_FILES['inCableCatalogueFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_POST['eq'])>0) + mysql_query("update seg_equipments_files SET EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now() where EQF_EQU_ID=".$_POST['eq']); + else + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=".$_POST['eq'].",EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + if (!empty($_FILES['inCableImageFile']['name'])) + { + $fileName = $_FILES['inCableImageFile']['name']; + $tmpName = $_FILES['inCableImageFile']['tmp_name']; + $fileSize = $_FILES['inCableImageFile']['size']; + $fileType = $_FILES['inCableImageFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=".$_POST['eq'])>0) + mysql_query("update seg_equipments_files SET EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now() where EQF_EQU_ID=".$_POST['eq']); + else + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=".$_POST['eq'].",EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + delSearchSessionData(); + } + + //usuwanie + // ================================================================================== + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_equipments_stock where SES_EQU_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_equipments WHERE EQU_ID=".$tpmArray[0]); + mysql_query("DELETE FROM seg_equipments_files WHERE EQF_EQU_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } + } + // ================================================================================== + + + +?> + + + + <?php + if (!$_POST['sr_status']) $_POST['sr_status']=100; + + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site207_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site207&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Typ orurowania – armatury:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site207_input'];?>"></td> + + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + + + </tr> + + + + + + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>&nbsp;"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site207_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site207_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_004 ;?></TD> + </TR> + + <?php + + if (empty($_SESSION['site207_array']) || $_POST['sub_search']=='Szukaj') + { + $query = "select EQU_ID,EQU_NAME,EQU_PARAM_01,EQU_PARAM_02,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=15 and EQU_NAME like '%".$_SESSION['site207_input']."%'"; + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " order by EQU_NAME,EQU_PARAM_01"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'eq_id' => $r["EQU_ID"], + 'eq_name' => $r["EQU_NAME"], + 'eq_param_01' => $r["EQU_PARAM_01"], + 'eq_param_02' => $r["EQU_PARAM_02"], + 'eq_mfc' => $r["MCF_NAME"], + ); + } + unset($_SESSION['site207_array']); + $_SESSION['site207_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site207_array'])) $stop=count($_SESSION['site207_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site207inf&eq=".$_SESSION['site207_array'][$i]['eq_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site207_array'][$i]['eq_name']."</TD> + <TD class='field_center'>".$_SESSION['site207_array'][$i]['eq_param_01']."</TD> + <TD class='field_center'>".$_SESSION['site207_array'][$i]['eq_param_02']."</TD> + <TD class='field_left'>".$_SESSION['site207_array'][$i]['eq_mfc']."</TD> + </TR> + "; + } + ?> + </table> + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume"><?php echo $lab_NumberResults_001.": ".count($_SESSION['site207_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site207_array'])>20) + echo pagination_grid('?pg=site207', $_GET['pgn'], count($_SESSION['site207_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="#" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="#" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + </div> + + <?php + if (!empty($_SESSION['site207_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site207A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site207A.php b/sites/site207A.php new file mode 100644 index 0000000..45bbe3e --- /dev/null +++ b/sites/site207A.php @@ -0,0 +1,59 @@ +<?php +if (!empty($_SESSION['site207_edit'])) +{ +?> + +<div class="tag100"> +<FORM ACTION="?pg=site207" METHOD="POST" enctype="multipart/form-data" id="PipingCatalogueForm" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site207_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site207_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inCableName"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersNameReq('inCableManufID'); ?></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site207_002; ?></TD> + <TD CLASS="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inPipingDiameter"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site207_003; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPipingLength"></TD> + </TR> + + + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inCableDesc></textarea></TD> + </TR> + + <tr> + <td class="desc"><?php echo $lab_Field_site206_004 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableCatalogueFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site206_005 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableImageFile"></td> + </tr> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site207" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subPipingSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site207E.php b/sites/site207E.php new file mode 100644 index 0000000..7233d18 --- /dev/null +++ b/sites/site207E.php @@ -0,0 +1,75 @@ +<?php +if (!empty($_SESSION['site207_edit'])) +{ +?> + + <?php + $wynik = mysql_query("select EQU_MCF_ID,EQU_NAME,EQU_DESCRIPTION,EQU_PARAM_01,EQU_PARAM_02 from seg_equipments where EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $par_1 = $r["EQU_MCF_ID"]; + $par_2 = $r["EQU_NAME"]; + $par_3 = $r["EQU_DESCRIPTION"]; + $par_4 = $r["EQU_PARAM_01"]; + $par_5 = $r["EQU_PARAM_02"]; + + } + ?> + + + +<div class="tag100"> +<FORM ACTION="./?pg=site207&eq=<?php echo $_GET['eq'];?>" METHOD="POST" enctype="multipart/form-data" id="PipingCatalogueForm" class="form_valid"> + <input type="hidden" name="eq" value="<?php echo $_GET['eq']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site207_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inCableName" value="<?php echo $par_2; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersName('inCableManufID',$par_1); ?></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site207_002; ?></TD> + <TD CLASS="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inPipingDiameter" value="<?php echo $par_4; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site207_003; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE="TEXT" NAME="inPipingLength" value="<?php echo $par_5; ?>"></TD> + </TR> + + + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inCableDesc><?php echo $par_3; ?></textarea></TD> + </TR> + + <tr> + <td class="desc"><?php echo $lab_Field_site206_004 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableCatalogueFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site206_005 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableImageFile"></td> + </tr> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site207inf&eq=<?php echo $_GET['eq'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subPipingUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site207inf.php b/sites/site207inf.php new file mode 100644 index 0000000..5868a1a --- /dev/null +++ b/sites/site207inf.php @@ -0,0 +1,145 @@ +<?php +if (!empty($_SESSION['site207'])) +{ +?> + + +<?php +$wynik = mysql_query("select EQU_ID,EQU_NAME,EQU_DESCRIPTION,MCF_NAME,EQU_PARAM_01,EQU_PARAM_02 from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=15 and EQU_ID=".$_GET['eq']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["EQU_DESCRIPTION"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["MCF_NAME"]; + $sql_5 = $r["EQU_PARAM_01"]; + $sql_6 = $r["EQU_PARAM_02"]; + + + + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site207_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site207_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site207_004; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site207_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_5; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site207_003; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_6; ?></TD> + </TR> + + + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(chr(13), "<br/>", $sql_3); ?></TD> + </TR> + + <?php + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq'])>0) + { + echo" + <TR> + <TD class='desc_well_param'>$lab_Field_site206_004</TD> + <TD CLASS='desc_value'>"; + $wynik = mysql_query("select EQF_ID,SUBSTRING_INDEX(EQF_FILE_NAME, '.', -1) ICO,EQF_FILE_NAME from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eq_1 = $r["EQF_ID"]; + $vICO = $r["ICO"]; + $eq_2 = $r["EQF_FILE_NAME"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo"<img src=$icoFile><a class='knowledge' href='./sites/eqdocgeneratefromdb.php?fno=$eq_1' target='_blank'>$eq_2</a><br/>"; + } + + + + + echo"</TD> + </TR> + + + "; + + } + + ?> + </table> + </div> +</div> + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Field_site206_005 ;?></div> + <div class="tag_center"> + + <?php + $wynik = mysql_query("select EQF_FILE_TYPE,EQF_FILE from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["EQF_FILE_TYPE"]; + $param_2 = $r["EQF_FILE"]; + + $im = imagecreatefromstring($param_2); + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_207inf_01.png"; + imagePNG( $im,$fileName); + list($width, $height) = getimagesize($fileName); + if ($width>450) + echo"<img src='$fileName' width='450'>"; + else + echo"<img src='$fileName'>"; + + //$imgData = base64_encode($param_2); + //$src = 'data: $param_1;base64,'.$imgData; + //echo"<img src='$src' >"; + } + ?> + </div> +</div> + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + + + + +<?php if (!empty($_SESSION['site207_edit'])) { ?> +<div class="tag50_right"> + <div class="tag_buttons"> + <?php echo "<a href=./?pg=site207>"; ?><INPUT class='btn btn-info btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + <?php echo "<a class='confirmation' href=./?pg=site207&param=".$_GET['eq'].",del,".md5($_GET['eq']).">"; ?><INPUT class='btn btn-danger btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Delete; ?>"></A> + <?php echo "<a href=./?pg=site207E&eq=".$_GET['eq'].">"; ?><INPUT class='btn btn-success btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Modify; ?>"></A> + </div> +</div> +<?php } ?> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site208.php b/sites/site208.php new file mode 100644 index 0000000..8cdfd7b --- /dev/null +++ b/sites/site208.php @@ -0,0 +1,286 @@ +<?php +if (!empty($_SESSION['site208'])) +{ +?> + +<?php + + if (!empty($_POST['eq'])) $_GET['eq'] = $_POST['eq']; + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + +// dodawanie nowego opomiarowania/urządzenia do katalogu + if (!empty($_POST['inCableName']) && $_POST['subCableSave']==$lab_ButtonName_Save) + { + mysql_query("INSERT INTO seg_equipments SET EQU_MCF_ID=".$_POST['inCableManufID'].",EQU_NAME='".$_POST['inCableName']."',EQU_DESCRIPTION='".$_POST['inCableDesc']."',EQU_PARAM_02='".$_POST['inCableCategory']."',EQU_PARAM_03='".$_POST['inCableLang']."',EQU_TYPE_ID=14"); + $maxEQUid = sqlValue("select max(EQU_ID) from seg_equipments"); + + if (!empty($_FILES['inCableCatalogueFile']['name'])) + { + $fileName = $_FILES['inCableCatalogueFile']['name']; + $tmpName = $_FILES['inCableCatalogueFile']['tmp_name']; + $fileSize = $_FILES['inCableCatalogueFile']['size']; + $fileType = $_FILES['inCableCatalogueFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=$maxEQUid,EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + if (!empty($_FILES['inCableImageFile']['name'])) + { + $fileName = $_FILES['inCableImageFile']['name']; + $tmpName = $_FILES['inCableImageFile']['tmp_name']; + $fileSize = $_FILES['inCableImageFile']['size']; + $fileType = $_FILES['inCableImageFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=$maxEQUid,EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + delSearchSessionData(); + } + + +// aktualizacja opomiarowania/urządzenia do katalogu + if (!empty($_POST['inCableName']) && $_POST['subCableUpdate']==$lab_ButtonName_Update) + { + mysql_query("update seg_equipments SET EQU_MCF_ID=".$_POST['inCableManufID'].",EQU_NAME='".$_POST['inCableName']."',EQU_DESCRIPTION='".$_POST['inCableDesc']."' where EQU_ID=".$_POST['eq']); + + if (!empty($_FILES['inCableCatalogueFile']['name'])) + { + $fileName = $_FILES['inCableCatalogueFile']['name']; + $tmpName = $_FILES['inCableCatalogueFile']['tmp_name']; + $fileSize = $_FILES['inCableCatalogueFile']['size']; + $fileType = $_FILES['inCableCatalogueFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_POST['eq'])>0) + mysql_query("update seg_equipments_files SET EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now() where EQF_EQU_ID=".$_POST['eq']); + else + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=".$_POST['eq'].",EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + if (!empty($_FILES['inCableImageFile']['name'])) + { + $fileName = $_FILES['inCableImageFile']['name']; + $tmpName = $_FILES['inCableImageFile']['tmp_name']; + $fileSize = $_FILES['inCableImageFile']['size']; + $fileType = $_FILES['inCableImageFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=".$_POST['eq'])>0) + mysql_query("update seg_equipments_files SET EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now() where EQF_EQU_ID=".$_POST['eq']); + else + mysql_query("INSERT INTO seg_equipments_files SET EQF_EQU_ID=".$_POST['eq'].",EQF_FILE='$content',EQF_FILE_TYPE='$fileType',EQF_FILE_SIZE='$fileSize',EQF_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),EQF_STATUS='1',EQF_AUDIT_CU='".$_SESSION['user']."',EQF_AUDIT_CD=now()"); + } + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + delSearchSessionData(); + } + + + //usuwanie + // ================================================================================== + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_dev_resources where DRS_DEV_TYPE=14 and DRS_DEV_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_equipments WHERE EQU_ID=".$tpmArray[0]); + mysql_query("DELETE FROM seg_equipments_files WHERE EQF_EQU_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } + } + // ================================================================================== + + +?> + + + <?php + if (!$_POST['sr_status']) $_POST['sr_status']=100; + + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site208_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site208&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td><?php echo $lab_Field_site208_001;?>:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site208_input'];?>"></td> + + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + + + </tr> + + + + + + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>&nbsp;"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + + + + + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site208_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site208_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site208_002 ;?></TD> + </TR> + + <?php + + if (empty($_SESSION['site208_array']) || $_POST['sub_search']=='Szukaj') + + { + + + $query = "select EQU_ID,EQU_NAME,MCF_NAME,EQU_PARAM_02 from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=14 and EQU_NAME like '%".$_SESSION['site208_input']."%'"; + if($_POST['sr_status']!=100) $query.=" and MCF_ID=".$_POST['sr_status']; + $query .= " order by EQU_PARAM_02,EQU_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'eq_id' => $r["EQU_ID"], + 'eq_name' => $r["EQU_NAME"], + 'eq_mfc' => $r["MCF_NAME"], + 'eq_categ' => sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=".$r["EQU_PARAM_02"], $decFieldLang) + ); + } + + unset($_SESSION['site208_array']); + $_SESSION['site208_array']=$res; + + } + + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site208_array'])) $stop=count($_SESSION['site208_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site208inf&eq=".$_SESSION['site208_array'][$i]['eq_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site208_array'][$i]['eq_name']."</TD> + <TD class='field_center'>".$_SESSION['site208_array'][$i]['eq_mfc']."</TD> + </TR> + "; + } + ?> + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site208_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site208_array'])>20) + echo pagination_grid('?pg=site208', $_GET['pgn'], count($_SESSION['site208_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="#" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="#" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + </div> + + <?php + if (!empty($_SESSION['site208_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site208A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site208A.php b/sites/site208A.php new file mode 100644 index 0000000..44c7d0e --- /dev/null +++ b/sites/site208A.php @@ -0,0 +1,48 @@ +<?php +if (!empty($_SESSION['site208_edit'])) +{ +?> + +<div class="tag100"> +<FORM ACTION="?pg=site208" METHOD="POST" enctype="multipart/form-data" id="CableCatalogueForm" class="form_valid"> +<input type="hidden" name="inCableCategory" value="<?php echo sqlValue("select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_CATEGORY' and DIC_NAME='SPM_FULL'"); ?>"> + <div class="head_tag"><?php echo $lab_Tag_site208_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site208_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text75_req" TYPE="TEXT" NAME="inCableName"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersNameReq('inCableManufID'); ?></TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inCableDesc></textarea></TD> + </TR> + + <tr> + <td class="desc"><?php echo $lab_Field_site206_004 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableCatalogueFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site206_005 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableImageFile"></td> + </tr> + </TABLE> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site208" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subCableSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site208Admin.php b/sites/site208Admin.php new file mode 100644 index 0000000..ff5c6ab --- /dev/null +++ b/sites/site208Admin.php @@ -0,0 +1,63 @@ +<?php +if (!empty($_SESSION['site208_edit']) && $_SESSION['user']=='admin') +{ +?> + +<div class="tag100"> +<FORM ACTION="?pg=site208" METHOD="POST" enctype="multipart/form-data"> + <div class="head_tag"><?php echo $lab_Tag_site208_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site208_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text75_req" TYPE="TEXT" NAME="inCableName"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersName('inCableManufID'); ?></TD> + </TR> + + <TR> + <TD class=desc><?php echo $lab_Field_site301_017; ?> </TD> + <TD CLASS=desc_value><?php echo selectFromDictionary('inCableCategory', 'WELL_CATEGORY'); ?> </TD> + </TR> + <TR> + <TD class=desc>Język </TD> + <TD CLASS=desc_value> + <select name="inCableLang"> + <option VALUE="polish">Polish</OPTION> + <option VALUE="english">English</OPTION> + <option VALUE="german">German</OPTION> + </SELECT> + </TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inCableDesc></textarea></TD> + </TR> + + <tr> + <td class="desc"><?php echo $lab_Field_site206_004 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableCatalogueFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site206_005 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableImageFile"></td> + </tr> + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class='btn btn-info btn-sm' TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site208'"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subCableSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site208E.php b/sites/site208E.php new file mode 100644 index 0000000..452d94b --- /dev/null +++ b/sites/site208E.php @@ -0,0 +1,62 @@ +<?php +if (!empty($_SESSION['site208_edit'])) +{ +?> + + <?php + $wynik = mysql_query("select EQU_MCF_ID,EQU_NAME,EQU_DESCRIPTION from seg_equipments where EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $par_1 = $r["EQU_MCF_ID"]; + $par_2 = $r["EQU_NAME"]; + $par_3 = $r["EQU_DESCRIPTION"]; + + } + ?> + + + +<div class="tag100"> +<FORM ACTION="./?pg=site208&eq=<?php echo $_GET['eq'];?>" METHOD="POST" enctype="multipart/form-data" id="CableCatalogueForm" class="form_valid"> + <input type="hidden" name="eq" value="<?php echo $_GET['eq']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site208_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site208_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text75_req" TYPE="TEXT" NAME="inCableName" value="<?php echo $par_2; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php selectManufacturersName('inCableManufID',$par_1); ?></TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inCableDesc><?php echo $par_3; ?></textarea></TD> + </TR> + + <tr> + <td class="desc"><?php echo $lab_Field_site206_004 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableCatalogueFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site206_005 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inCableImageFile"></td> + </tr> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site208inf&eq=<?php echo $_GET['eq'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subCableUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site208inf.php b/sites/site208inf.php new file mode 100644 index 0000000..838ec15 --- /dev/null +++ b/sites/site208inf.php @@ -0,0 +1,132 @@ +<?php +if (!empty($_SESSION['site208'])) +{ +?> + + +<?php +$wynik = mysql_query("select EQU_ID,EQU_NAME,EQU_DESCRIPTION,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=14 and EQU_ID=".$_GET['eq']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["EQU_DESCRIPTION"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["MCF_NAME"]; + + + + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site208_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(chr(13), "<br/>", $sql_3); ?></TD> + </TR> + + + <?php + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq'])>0) + { + echo" + <TR> + <TD class='desc_equipment'>$lab_Field_site206_004</TD> + <TD CLASS='desc_value'>"; + $wynik = mysql_query("select EQF_ID,SUBSTRING_INDEX(EQF_FILE_NAME, '.', -1) ICO,EQF_FILE_NAME from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eq_1 = $r["EQF_ID"]; + $vICO = $r["ICO"]; + $eq_2 = $r["EQF_FILE_NAME"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo"<img src=$icoFile><a class='knowledge' href='./sites/eqdocgeneratefromdb.php?fno=$eq_1' target='_blank'>$eq_2</a><br/>"; + } + + + + + echo"</TD> + </TR> + + + "; + + } + + ?> + </table> + </div> +</div> + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Field_site206_005 ;?></div> + <div class="tag_center"> + + <?php + $wynik = mysql_query("select EQF_FILE_TYPE,EQF_FILE from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["EQF_FILE_TYPE"]; + $param_2 = $r["EQF_FILE"]; + + $im = imagecreatefromstring($param_2); + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_208inf_01.png"; + imagePNG( $im,$fileName); + list($width, $height) = getimagesize($fileName); + if ($width>450) + echo"<img src='$fileName' width='450'>"; + else + echo"<img src='$fileName'>"; + + //$imgData = base64_encode($param_2); + //$src = 'data: $param_1;base64,'.$imgData; + //echo"<img src='$src' >"; + } + ?> + </div> +</div> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<?php if (!empty($_SESSION['site208_edit'])) { ?> +<div class="tag50_right"> + <div class="tag_buttons"> + <?php echo "<a href=./?pg=site208>"; ?><INPUT class='btn btn-info btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + <?php echo "<a class='confirmation' href=./?pg=site208&param=".$_GET['eq'].",del,".md5($_GET['eq']).">"; ?><INPUT class='btn btn-danger btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Delete; ?>"></A> + <?php echo "<a href=./?pg=site208E&eq=".$_GET['eq'].">"; ?><INPUT class='btn btn-success btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Modify; ?>"></A> + </div> +</div> +<?php } ?> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301.php b/sites/site301.php new file mode 100644 index 0000000..87087ee --- /dev/null +++ b/sites/site301.php @@ -0,0 +1,398 @@ +<?php +if (!empty($_SESSION['site301'])) +{ +?> + +<?php + /* + if ($_POST['subWellSave']==$lab_ButtonName_Save && !empty($_POST['inWellPumpID']) && !empty($_POST['inWellEngineID']) && !empty($_POST['inWellName'])) + { + mysql_query("INSERT INTO seg_wells SET WLL_NAME='".$_POST['inWellName']."',WLL_CAT_DIC_ID=".$_POST['inWellCategory'].",WLL_LATITUDE='".$_POST['inWellLat']."',WLL_LONGITUDE='".$_POST['inWellLong']."'"); + $maxWELLid = sqlValue("select max(WLL_ID) from seg_wells"); + mysql_query("INSERT INTO seg_well_pump_eng_rel SET RWL_WLL_ID=$maxWELLid,RWL_PUP_DRS_ID=".$_POST['inWellPumpID'].",RWL_ENG_DRS_ID=".$_POST['inWellEngineID']); + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=$maxWELLid,DRS_DEV_TYPE=12,DRS_AVAILABLE_DATE='".$_POST['inWellAVdate']."',DRS_STATUS_DIC_ID=7,DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='DST'),DRD_VALUE='".$_POST['inWellDiame']."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LS'),DRD_VALUE='".$_POST['inWellDepth']."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LF'),DRD_VALUE='".$_POST['inWellFilter']."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LZ'),DRD_VALUE='".$_POST['inWellZas']."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and DIC_NAME='USABLE'),DRS_RESOURCES_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES' and DIC_NAME='OPERATION'),DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$_POST['inWellPumpID']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources WHERE DRS_ID=".$_POST['inWellPumpID']); + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and DIC_NAME='USABLE'),DRS_RESOURCES_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES' and DIC_NAME='OPERATION'),DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$_POST['inWellEngineID']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources WHERE DRS_ID=".$_POST['inWellEngineID']); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxWELLid); + unset($maxDRSid); + } +*/ + + //zatopienie agregatu + if ($_POST['subSinkSave']==$lab_ButtonName_Save && $_GET['dev']>0 && $_GET['sink']==md5($_GET['dev']) && ($_POST['inSinkPump']>0 || $_POST['inSinkEng']>0) ) + { + unset($chechWellArray); unset($maxEX); unset($currWellagg); + $chechWellArray = sqlGetResAsArray("select * from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_ID=".$_GET['dev']); + $currWellagg = sqlGetResAsArray("select * from seg_well_pump_eng_rel where RWL_WLL_ID=".$chechWellArray[0]['WLL_ID']); + $maxEX = sqlValue("select max(WLE_NR_EXCHANGE) from seg_wells_exchanged where WLE_WLL_ID=".$chechWellArray[0]['WLL_ID']); + + //Jeśli zaznaczono pompę + if ($_POST['inSinkPump']==1) + mysql_query("UPDATE seg_dev_resources SET DRS_CASSATION_DATE='".$_POST['inSinkDate']."',DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=40,DRS_DEV_ATTENTION='1401' WHERE DRS_ID=".$currWellagg[0]['RWL_PUP_DRS_ID']); + else + $currWellagg[0]['RWL_PUP_DRS_ID']='null'; + //================================================= + + //Jeśli zaznaczono silnik + if ($_POST['inSinkEng']==1) + mysql_query("UPDATE seg_dev_resources SET DRS_CASSATION_DATE='".$_POST['inSinkDate']."',DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=40,DRS_DEV_ATTENTION='1401' WHERE DRS_ID=".$currWellagg[0]['RWL_ENG_DRS_ID']); + else + $currWellagg[0]['RWL_ENG_DRS_ID']='null'; + //================================================= + + mysql_query("INSERT INTO seg_wellsink_pump_eng_rel SET RWS_WLL_ID=".$chechWellArray[0]['WLL_ID'].",RWS_DRS_ID=".$chechWellArray[0]['DRS_ID'].",RWS_PUP_DRS_ID=".$currWellagg[0]['RWL_PUP_DRS_ID'].",RWS_ENG_DRS_ID=".$currWellagg[0]['RWL_ENG_DRS_ID'].",RWS_DESC='".$_POST['inSinkReasonAdd']."',RWS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."',RWS_AUDIT_USR='".$_SESSION['user']."',RWS_AUDIT_DATE='".$_POST['inSinkDate']." ".$_POST['inSinkTimeH'].":".$_POST['inSinkTimeM'].":00'"); + mysql_query("UPDATE seg_wells_exchanged SET WLE_DATE_TO='".$_POST['inSinkDate']." ".$_POST['inSinkTimeH'].":".$_POST['inSinkTimeM'].":00',WLE_REASON='Zatopienie' WHERE WLE_WLL_ID=".$chechWellArray[0]['WLL_ID']." and WLE_NR_EXCHANGE=".$maxEX); + + + // zmiania status dla studni + mysql_query("UPDATE seg_dev_resources SET DRS_AVAILABLE_DATE=NULL,DRS_RESOURCES_DIC_ID=902 WHERE DRS_ID=".$_GET['dev']); + //usuwa relacje z studnia-pompa-silnik + mysql_query("DELETE FROM seg_well_pump_eng_rel WHERE RWL_WLL_ID=".$chechWellArray[0]['WLL_ID']); + + + // dodaje dodatkowy "pusty" wpis do tabeli pomiarów, (10 sekund póżniej po wybudowie) żeby nie kopiwał w przyszłości innych + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$_GET['dev'].",RHD_DATE='".$_POST['inSinkDate']." ".$_POST['inSinkTimeH'].":".$_POST['inSinkTimeM'].":10',RHD_AUDIT_CD=now()"); + + echo"<div class='actionOK'>Agregat (Pompa/Silnik) został pomyślnie oznaczony jako zatopiony.</div>"; + delSearchSessionData(); + unset($chechWellArray); unset($maxEX); unset($currWellagg); + unset($_GET['dev']); + } + + + + //wybudowa agregatu + if($_POST['subBuildOutSave']==$lab_ButtonName_Save && !empty($_POST['inBuildDate']) && $_GET['dev']>0) + { + + $chechWellArray = sqlGetResAsArray("select WLL_ID,WLL_CAT_DIC_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_ID=".$_GET['dev']." limit 1"); + + + //print_r($_SESSION['site301inf_array']); + $maxEX = sqlValue("select max(WLE_NR_EXCHANGE) from seg_wells_exchanged where WLE_WLL_ID=".$chechWellArray[0]['WLL_ID']); + + //aktualizauje informacje w historii agregatów + if (strlen($_POST['inBuildReasonAdd'])>1) $_POST['inBuildReason'] .= " [".$_POST['inBuildReasonAdd']."]"; + mysql_query("UPDATE seg_wells_exchanged SET WLE_DATE_TO='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00',WLE_REASON='".$_POST['inBuildReason']."' WHERE WLE_WLL_ID=".$chechWellArray[0]['WLL_ID']." and WLE_NR_EXCHANGE=".$maxEX); + + //zmiania statusy dla pompy i silnika (nie zmianiemy statusu - pozostaje wirtualny PRZEGLĄD - jako niepowiązany z żadną studnią) + //mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=30,DRS_RESOURCES_DIC_ID=707 WHERE DRS_ID=".$_SESSION['well_details']['pumpDrsID']); + //mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=30,DRS_RESOURCES_DIC_ID=707 WHERE DRS_ID=".$_SESSION['well_details']['engDrsID']); + + // zmiania status dla studni + mysql_query("UPDATE seg_dev_resources SET DRS_AVAILABLE_DATE=NULL,DRS_RESOURCES_DIC_ID=902 WHERE DRS_ID=".$_GET['dev']); + + //usuwa relacje z studnia-pompa-silnik + mysql_query("DELETE FROM seg_well_pump_eng_rel WHERE RWL_WLL_ID=".$chechWellArray[0]['WLL_ID']); + + //wyłącza pompę + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_SESSION['well_details']['devID'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$_POST['inBuildReason']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + + //zapisuje ostatni pomiar, jeśli studnia jest w kategorii SPM inne + // 2018-04-24 - usuwamy + if ($chechWellArray[0]['WLL_CAT_DIC_ID']==20) + { + //insert into rep_his_data_everyday select null,RHD_DRS_ID,'2016-09-10 10:00:00' NEW_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_PP_VAL,RHD_HH_VAL,getWellPumpedWaterInDate(RHD_DRS_ID,'2016-09-10 10:00:00') VM3_VAL,RHD_WTEMP_VAL,RHD_DGN_VAL,round(getWellWorkingTimeInDate(RHD_DRS_ID,'2016-09-10 10:00:00')/3600,2) WORK_TIME_VAL, now() from rep_his_data_everyday where RHD_DATE=(select max(RHD_DATE) from rep_his_data_everyday where RHD_DRS_ID=2858) and RHD_DRS_ID=2858; + //mysql_query("insert into rep_his_data_everyday select null,RHD_DRS_ID,'".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00' NEW_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_PP_VAL,RHD_HH_VAL,getWellPumpedWaterInDate(RHD_DRS_ID,'".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00') VM3_VAL,RHD_WTEMP_VAL,RHD_DGN_VAL,round(getWellWorkingTimeInDate(RHD_DRS_ID,'".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00')/3600,2) WORK_TIME_VAL, now() from rep_his_data_everyday where RHD_DATE=(select max(RHD_DATE) from rep_his_data_everyday where RHD_DRS_ID=".$_GET['dev'].") and RHD_DRS_ID=".$_GET['dev']); + + // wpisuje do tabeli countersów - czas pracy + //mysql_query("INSERT INTO seg_dev_counters SET SDC_DRS_ID=".$_GET['dev'].",SDC_VALUE=round(getWellWorkingTimeInDate(".$_GET['dev'].",'".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00')/3600,2),SDC_TYPE_DIC_ID=290,SDC_DESC='".$_POST['inBuildReason']."',SDC_DEPARTMENT='".$_SESSION['syndis_eq_stock']."',SDC_MEASURE_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00',SDC_AUDIT_USR='".$_SESSION['user']."',SDC_AUDIT_DATE=now()"); + // wpisuje do tabeli countersów - ilość wypompowanej wody + //mysql_query("INSERT INTO seg_dev_counters SET SDC_DRS_ID=".$_GET['dev'].",SDC_VALUE=getWellPumpedWaterInDate(".$_GET['dev'].",'".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'),SDC_TYPE_DIC_ID=230,SDC_DESC='".$_POST['inBuildReason']."',SDC_DEPARTMENT='".$_SESSION['syndis_eq_stock']."',SDC_MEASURE_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00',SDC_AUDIT_USR='".$_SESSION['user']."',SDC_AUDIT_DATE=now()"); + } + + // dodaje dodatkowy "pusty" wpis do tabeli pomiarów, (10 sekund póżniej po wybudowie) żeby nie kopiwał w przyszłości innych + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$_GET['dev'].",RHD_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":10',RHD_AUDIT_CD=now()"); + + //usuwa wszystkie wpisy w tabeli seg_wells_manual_work + + mysql_query("INSERT INTO rep_his_data_todelete SET DTD_DRS_ID=".$_GET['dev'].",DTD_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + + // aktualizacja statusu zlecenia - zamyka + mysql_query("UPDATE seg_orders SET ORD_STATUS_DIC_ID=853,ORD_FINISH_USR='".$_SESSION['user']."',ORD_FINISH_DATE=now() WHERE ORD_SCOPE_DIC_ID=802 and ORD_DRS_ID=".$_GET['dev']); + + // call data_todelete(); + + //mysql_query("DELETE FROM seg_wells_manual_work WHERE WMS_DRS_ID=".$_GET['dev']); + //Jeśli były jakieś nowsze wpisy do tabel niż data wybudowy - automatycznie to usuwa + //mysql_query("DELETE FROM rep_his_data_everyday WHERE RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>'".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + //mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL in (200,205,210,215,220,225,230,245,401,402,730,270,275,280,290,260,721,265) and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>'".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + + + //dodaje POSTÓJ - domyślnie przyjmując status "Oczekująca na uruchomienie" + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='1525',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + + + echo"<div class='actionOK'>$lab_Field_site301_022</div>"; + delSearchSessionData(); + unset($chechWellArray); + unset($_GET['dev']); + } + + + //zdjęcie z exploatacji + if($_SESSION['well_details']['devID']>0 && $_POST['subOperateOut']==$lab_ButtonName_Save && !empty($_POST['inBuildDate'])) + { + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=4,DRS_RESOURCES_DIC_ID=902,DRS_DEV_ATTENTION='".$_POST['inBuildReason']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$_SESSION['well_details']['devID']); + mysql_query("UPDATE seg_object_hole_cards SET OHC_ZDJECIE_EXPL_DATE='".$_POST['inBuildDate']."' WHERE OHC_DRS_ID=".$_SESSION['well_details']['devID']); + mysql_query("UPDATE seg_wells SET WLL_SYS_TYPE='".$lab_Field_site301_027."',WLL_STAT_DESC='".$_POST['inBuildReason']."' WHERE WLL_ID=".$_SESSION['well_details']['wellID']); + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + + } + + + + + + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + //usuwanie studni + if ($paramArray[0]==md5($paramArray[1]) && $paramArray[1]==$_GET['dev'] && $paramArray[2]=='del') + { + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=-1 WHERE DRS_ID=".$_GET['dev']); + //mysql_query("DELETE FROM seg_dev_resources_his WHERE DRS_ID=".$_GET['dev']); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + //wprowadzanie studni do exploatacji + if ($paramArray[0]==md5($paramArray[1]) && $paramArray[1]==$_GET['dev'] && $paramArray[2]=='oin') + { + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=3,DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$_SESSION['well_details']['devID']); + mysql_query("UPDATE seg_object_hole_cards SET OHC_ZDJECIE_EXPL_DATE=null WHERE OHC_DRS_ID=".$_SESSION['well_details']['devID']); + mysql_query("UPDATE seg_wells SET WLL_SYS_TYPE=null,WLL_STAT_DESC=null WHERE WLL_ID=".$_SESSION['well_details']['wellID']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + unset($paramArray); + } + + + // zamiana studni w piezometr + if (!empty($_GET['stu2piezo'])) + { + //stu2piezo=2840,a78482ce76496fcf49085f2190e675b4,stu2piezo + unset($stu2piezoArray); + $stu2piezoArray = explode(',',$_GET['stu2piezo']); + if ($stu2piezoArray[1]==md5($stu2piezoArray[0]) && $stu2piezoArray[2]=='stu2piezo') + { + unset($stuArray); + $stuArray = sqlGetResAsArray("select * from seg_wells,seg_dev_resources where WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$stu2piezoArray[0]); + + // zakłada nowy piezometr + if (sqlValue("select count(*) from seg_reservoirs_piezometers where SRP_NAME='".$stuArray[0]['WLL_NAME']."'")==0) + { + mysql_query("INSERT INTO seg_reservoirs_piezometers SET SRP_SWI_ID=".$stuArray[0]['WLL_SWI_ID'].",SRP_MCF_ID=1500,SRP_BARIERA='".$stuArray[0]['WLL_BARIERA']."',SRP_NAME='".$stuArray[0]['WLL_NAME']."',SRP_TYPE_DIC_ID=601,SRP_LATITUDE='".$stuArray[0]['WLL_LATITUDE']."',SRP_LONGITUDE='".$stuArray[0]['WLL_LONGITUDE']."'"); + $newID = getMaxIDfromMySqlTable('seg_reservoirs_piezometers'); + mysql_query("UPDATE seg_dev_resources SET DRS_DEV_ID=".$newID.",DRS_DEV_TYPE=601,DRS_STATUS_DIC_ID=3,DRS_RESOURCES_DIC_ID=941,DRS_AUDIT_USR='przekształcenie - ".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$stu2piezoArray[0]); + } + else // aktualizuje istniejący + { + unset($curPiezo); + $curPiezo = sqlGetResAsArray("select SRP_ID from seg_reservoirs_piezometers where SRP_NAME='".$stuArray[0]['WLL_NAME']."'"); + mysql_query("UPDATE seg_dev_resources SET DRS_DEV_ID=".$curPiezo[0]['SRP_ID'].",DRS_DEV_TYPE=601,DRS_STATUS_DIC_ID=3,DRS_RESOURCES_DIC_ID=941,DRS_AUDIT_USR='przekształcenie - ".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$stu2piezoArray[0]); + unset($curPiezo); + + } + echo"<div class='actionOK'>Studnia została pomyślnie przekształcona w piezometr.</div>"; + } + unset($stu2piezoArray); + } + + + + + if (!$_POST['sr_status']) $_POST['sr_status']=3; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site301_input'] = $_POST['sr_well']; + ?> + + + + + <form action="./?pg=site301&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Studnia:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site301_input'];?>"></td> + <td style="width: 10px;"></td> + <td>status:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID in (3,4)"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszystkie</option>"; + else + echo"<option value='100'>Wszystkie</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + Pokaż wszystkie</td> + </tr> + </table> + </div> + </form> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site301_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site301_001 ;?></TD> + <td class="label"><?php echo $lab_Field_site301_014 ;?></td> + <TD class="label"><?php echo $lab_Field_site301_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_004 ;?></TD> + <td class="label"><?php echo $lab_Field_site301_005 ;?></td> + <td class="label"><?php echo $lab_Field_site302_004 ;?></td> + <td class="label"><?php echo $lab_Field_site301_017 ;?></td> + </TR> + + <?php + + if (empty($_SESSION['site301_array']) || $_POST['sub_search']=='Szukaj') + { + $query="select DRS_ID,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,WLL_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID,WLL_NAME,WLL_BARIERA,WLL_CAT_DIC_ID from seg_dev_resources,seg_wells left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_DEPARTMENT='".$_SESSION['eq_stock_param3_1']."' and WLL_NAME like '%".$_POST['sr_well']."%'"; + if($_POST['sr_status']!=100) $query.=" and DRS_STATUS_DIC_ID=".$_POST['sr_status']; + $query .= " order by WLL_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'drs_id' => $r["DRS_ID"], + 'well_name' => $r["WLL_NAME"], + 'well_id' => $r["RWL_WLL_ID"], + 'pup_drs_id' => $r["RWL_PUP_DRS_ID"], + 'eng_drs_id' => $r["RWL_ENG_DRS_ID"], + 'bariera' => $r["WLL_BARIERA"], + 'katSpm' => setDicName($r["WLL_CAT_DIC_ID"]), + 'status' => setDicName($r["DRS_STATUS_DIC_ID"]), + 'stat_typ' => setDicName($r["DRS_RESOURCES_DIC_ID"]), + 'pup_name' => sqlStringValue("select PUP_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=".$r["RWL_PUP_DRS_ID"], "PUP_NAME"), + 'pup_no' => sqlStringValue("select DRS_SN_NUMBER from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=".$r["RWL_PUP_DRS_ID"], "DRS_SN_NUMBER"), + 'eng_name' => sqlStringValue("select ENG_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=".$r["RWL_ENG_DRS_ID"], "ENG_NAME"), + 'eng_no' => sqlStringValue("select DRS_SN_NUMBER from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=".$r["RWL_ENG_DRS_ID"], "DRS_SN_NUMBER") + + + ); + + } + unset($_SESSION['site301_array']); + $_SESSION['site301_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site301_array'])) $stop=count($_SESSION['site301_array']); + + for($i=$start;$i<$stop;$i++) + { + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site301inf&dev=".$_SESSION['site301_array'][$i]['drs_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site301_array'][$i]['well_name']."</TD> + <TD class='field_center'>".$_SESSION['site301_array'][$i]['bariera']."</TD> + <TD class='field_center'>".$_SESSION['site301_array'][$i]['pup_name']."</TD> + <TD class='field_center'>".$_SESSION['site301_array'][$i]['pup_no']."</TD> + <TD class='field_center'>".$_SESSION['site301_array'][$i]['eng_name']."</TD> + <TD class='field_center'>".$_SESSION['site301_array'][$i]['eng_no']."</TD> + <TD class='field_center'>".$_SESSION['site301_array'][$i]['status']."</TD> + <TD class='field_left'>".$_SESSION['site301_array'][$i]['katSpm']."</TD> + </TR> + "; + } + ?> + </table> + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site301_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site301_array'])>20) + echo pagination_grid('?pg=site301', $_GET['pgn'], count($_SESSION['site301_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site301_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site301_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + </div> + + + <?php + if (!empty($_SESSION['site301_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site301A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + unset($_SESSION['exdev']); + + ?> + + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301A.php b/sites/site301A.php new file mode 100644 index 0000000..1004760 --- /dev/null +++ b/sites/site301A.php @@ -0,0 +1,102 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + + +<div class="tag100"> +<FORM ACTION="./?pg=site301inf" METHOD="POST" id="AddNewWell" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site301_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + echo" + <TR> + <TD class=desc> $lab_Field_site301_001 </TD> + <TD CLASS=desc_value> <INPUT id='wellName' class='req' TYPE='TEXT' NAME='inWellName' required> </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site301_014 </TD> + <TD CLASS=desc_value> + <select name='inWellBariera'> + <option value='0'>".$lab_FormSelect_001."</option> + "; + $result = mysql_query("select SWI_ID,SWI_NAME from seg_water_intakes order by SWI_NAME"); + if($result)while ($r = mysql_fetch_array($result)) + { + echo"<option value='".$r["SWI_ID"]."'>".$r["SWI_NAME"]."</option>"; + } + echo" + + </select> + </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site301_017 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inWellCategory', 'WELL_CATEGORY',19); echo"</TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site301_012 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inWellDiame'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_013 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inWellDepth'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_019 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inWellZas'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_008 </TD> + <TD CLASS=desc_value> <INPUT class='req' TYPE='TEXT' NAME='inWellLat'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_009 </TD> + <TD CLASS=desc_value> <INPUT class='req' TYPE='TEXT' NAME='inWellLong'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Tag_site302_003 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inWellStatus', 'WELL_STATUS_LEVEL_01'); echo"</TD> + </TR> + "; + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + <input class="btn btn-info btn-sm" type="button" onclick="location.href = './?pg=site301'" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subWellSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> +</FORM> +</div> + +<div id="com301A"></div> + + <script> + + $('#wellName').blur(function() { + var wellName = $("#wellName").val(); + $.post( "./ajax_func.php", { post_site: "site301A", post_action: "create_new_well", post_well_name: wellName }).done(function(data) + { + $('#com301A').html(data); + } + ); + }); + + </script> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301Aeng.php b/sites/site301Aeng.php new file mode 100644 index 0000000..466e47f --- /dev/null +++ b/sites/site301Aeng.php @@ -0,0 +1,56 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site304_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_003 ;?></TD> + <td class="label"><?php echo $lab_Field_site303_002 ;?></td> + <td class="label"><?php echo $lab_Field_site303_003 ;?></td> + <td class="label"><?php echo $lab_Field_site303_004 ;?></td> + </TR> + + <?php + $wynik = mysql_query("select DRS_ID,ENG_ID,ENG_NAME,DRS_SN_NUMBER,MCF_NAME,ENG_POWER,DRS_BUY_DATE,DRS_AVAILABLE_DATE,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID LEFT join seg_manufacturers on ENG_MCF_ID=MCF_ID where DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='ENGINE') and DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and `DIC_NAME`='AVAILABLE') order by ENG_POWER,ENG_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["DRS_ID"]; + $sql_2 = $r["ENG_ID"]; + $sql_3 = $r["ENG_NAME"]; + $sql_4 = $r["DRS_SN_NUMBER"]; + $sql_5 = $r["MCF_NAME"]; + $sql_6 = $r["ENG_POWER"]; $sql_6= str_replace(".", ",", $sql_6); + $sql_7 = $r["DRS_BUY_DATE"]; + $sql_8 = $r["DRS_AVAILABLE_DATE"]; + $sql_9 = $r["DRS_STATUS_DIC_ID"]; $sql_9=setDicName($sql_9); + $sql_10 = $r["DRS_RESOURCES_DIC_ID"]; $sql_10=setDicName($sql_10); + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site301A&eng=$sql_1&pup=".$_GET['pup']."'".chr(34)."> + <TD class='field_left'>$sql_3</TD> + <TD class='field_center'>$sql_4</TD> + <TD class='field_center'>$sql_5</TD> + <TD class='field_right'>$sql_6</TD> + <TD class='field_center'>$sql_7</TD> + <TD class='field_center'>$sql_8</TD> + <TD class='field_center'>$sql_9 [$sql_10]</TD> + </TR> + "; + } + ?> + </table> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301Agg.php b/sites/site301Agg.php new file mode 100644 index 0000000..4ea05b8 --- /dev/null +++ b/sites/site301Agg.php @@ -0,0 +1,72 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site810_050 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site810_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site810_005 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_004 ;?></TD> + + <TD class="label"><?php echo $lab_Field_site403_002." ".$lab_Field_site403_001 ;?></TD> + <td class="label"><?php echo $lab_Field_site810_022 ;?></td> + <td class="label"><?php echo $lab_Field_site301_019 ;?></td> + <td class="label">Status zlecenia</td> + + + </TR> + + <?php + //$_SESSION['site810_newAgg_array'] = sqlGetResAsArray("select PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,ENG_DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from rep_aggregate_departments where PUP_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_DRS_ID is not null and ENG_DRS_ID is not null order by PUP_NAME,ENG_NAME"); + $_SESSION['site301_newAgg_array'] = sqlGetResAsArray("select ORD_ID,ORD_NO,ORD_AUDIT_DATE,ORD_DRS_ID,ORD_OBJ_NAME,ONA_PUMP_DRS_ID,ONA_PUMP,ONA_ENG_DRS_ID,ONA_ENG,OWP_GLEB_S,OWP_ZASYP,ONA_GLEB_AG,ONA_SRED_KOL,ORD_STATUS_DIC_ID from seg_order_new_agg_params,seg_orders left join seg_order_obj_params on ORD_ID=OWP_ORD_ID where ONA_ORD_ID=ORD_ID and ONA_PUMP_DRS_ID is not null and ONA_ENG_DRS_ID is not null and ORD_DRS_ID=".$_SESSION['well_details']['devID']); + + //print_r($_SESSION['site810_newAgg_array']); + + $licznik=0; + for($i=0;$i<count($_SESSION['site301_newAgg_array']); $i++) + { + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site301RBI&dev=".$_SESSION['well_details']['devID']."&reb=OK&agg=".$i."'".chr(34).">"; + echo" + <TD class='field_center'>".$_SESSION['site301_newAgg_array'][$i]['ORD_NO']."</TD> + <TD class='field_center'>".$_SESSION['site301_newAgg_array'][$i]['ORD_AUDIT_DATE']."</TD> + <TD class='field_center'>".$_SESSION['site301_newAgg_array'][$i]['ORD_OBJ_NAME']."</TD> + <TD class='field_left'>".str_replace('nr','<br/>nr',$_SESSION['site301_newAgg_array'][$i]['ONA_PUMP'])."</TD> + <TD class='field_left'>".str_replace('nr','<br/>nr',$_SESSION['site301_newAgg_array'][$i]['ONA_ENG'])."</TD> + <TD class='field_right'>".getGlebokoscAct($_SESSION['well_details']['devID'])."</TD> + <TD class='field_right'>".$_SESSION['site301_newAgg_array'][$i]['ONA_SRED_KOL']."</TD> + <TD class='field_right'>".$_SESSION['site301_newAgg_array'][$i]['OWP_ZASYP']."</TD> + <TD class='field_center'>".setDicName($_SESSION['site301_newAgg_array'][$i]['ORD_STATUS_DIC_ID'])."</TD> + </TR> + "; + $licznik++; + } + + + if ($licznik==0) + echo('<script>sweetAlert("Uwaga!", "Brak dostępnych agregatów dla studni.\n W pierwszej kolejności należy utworzyć zlecenie dla obsługiwanego obiektu.", "warning");</script>'); + + + + + ?> + </table> + </div> + + + <div class="tag_buttons"> + <a class='btn btn-info btn-sm' href="?pg=site301RBI&dev=<?php echo $_SESSION['well_details']['devID'];?>&reb=OK" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + </div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301Apump.php b/sites/site301Apump.php new file mode 100644 index 0000000..df208d7 --- /dev/null +++ b/sites/site301Apump.php @@ -0,0 +1,56 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site301_003 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002 ;?></TD> + <td class="label"><?php echo $lab_Field_site303_002 ;?></td> + <td class="label"><?php echo $lab_Field_site303_003 ;?></td> + <td class="label"><?php echo $lab_Field_site303_004 ;?></td> + </TR> + + <?php + $wynik = mysql_query("select DRS_ID,PUP_ID,PUP_NAME,DRS_SN_NUMBER,MCF_NAME,PUP_Q_N,DRS_BUY_DATE,DRS_AVAILABLE_DATE ,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID LEFT join seg_manufacturers on PUP_MCF_ID=MCF_ID where DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and `DIC_NAME`='PUMP') and DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and `DIC_NAME`='AVAILABLE') order by PUP_Q_N,PUP_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["DRS_ID"]; + $sql_2 = $r["PUP_ID"]; + $sql_3 = $r["PUP_NAME"]; + $sql_4 = $r["DRS_SN_NUMBER"]; + $sql_5 = $r["MCF_NAME"]; + $sql_6 = $r["PUP_Q_N"]; $sql_6= str_replace(".", ",", $sql_6); + $sql_7 = $r["DRS_BUY_DATE"]; + $sql_8 = $r["DRS_AVAILABLE_DATE"]; + $sql_9 = $r["DRS_STATUS_DIC_ID"]; $sql_9=setDicName($sql_9); + $sql_10 = $r["DRS_RESOURCES_DIC_ID"]; $sql_10=setDicName($sql_10); + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site301A&pup=$sql_1&eng=".$_GET['eng']."'".chr(34)."> + <TD class='field_left'>$sql_3</TD> + <TD class='field_center'>$sql_4</TD> + <TD class='field_center'>$sql_5</TD> + <TD class='field_right'>$sql_6</TD> + <TD class='field_center'>$sql_7</TD> + <TD class='field_center'>$sql_8</TD> + <TD class='field_center'>$sql_9 [$sql_10]</TD> + </TR> + "; + } + ?> + </table> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301E.php b/sites/site301E.php new file mode 100644 index 0000000..0d3e5ce --- /dev/null +++ b/sites/site301E.php @@ -0,0 +1,201 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + +<div class="tag100"> +<FORM ACTION="?pg=site301inf&dev=<?php echo $_GET['dev']; ?>" METHOD="POST" id="AddNewWell" class="form_valid"> + <input type="hidden" name="indevID" value="<?php echo $_SESSION['well_details']['devID']; ?>"> + <input type="hidden" name="inWellID" value="<?php echo $_SESSION['well_details']['wellID']; ?>"> + + + + + <div class="head_tag"><?php echo $lab_Tag_site306_004 ;?> </div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + echo" + <TR> + <TD class=desc>$lab_Field_site301_002</TD> + <TD CLASS=desc_value>".$_SESSION['well_details']['pumpName']."</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_003 </TD> + <TD CLASS=desc_value>".$_SESSION['well_details']['pumpSN']."</TD> + </TR> + + <TR> + <TD class=desc>$lab_Field_site301_004</TD> + <TD CLASS=desc_value>".$_SESSION['well_details']['engName']."</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_005 </TD> + <TD CLASS=desc_value>".$_SESSION['well_details']['engSN']."</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_001 </TD> + <TD CLASS=desc_value> <INPUT class='req' TYPE='TEXT' NAME='inWellName' value='".$_SESSION['well_details']['wellName']."'> </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site301_014 </TD> + <TD CLASS=desc_value> + <select name='inWellBariera'> + "; + $result = mysql_query("select SWI_ID,SWI_NAME from seg_water_intakes order by SWI_NAME"); + if($result)while ($r = mysql_fetch_array($result)) + { + if ($r["SWI_ID"]==$_SESSION['well_details']['well_UjID']) + echo"<option value='".$r["SWI_ID"]."' selected>".$r["SWI_NAME"]."</option>"; + else + echo"<option value='".$r["SWI_ID"]."'>".$r["SWI_NAME"]."</option>"; + } + echo" + + </select> + </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site301_017 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inWellCategory', 'WELL_CATEGORY',sqlStringValue("select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'],"WLL_CAT_DIC_ID")); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Tag_site302_003 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inWellStatus01', 'WELL_STATUS_LEVEL_01',sqlStringValue("select DRS_RESOURCES_DIC_ID from seg_dev_resources where DRS_ID=".$_SESSION['well_details']['devID'],"DRS_RESOURCES_DIC_ID")); echo"</TD> + </TR> + "; + + ?> + + + </TABLE> + </div> + + + <?php + unset($drsLastExchangeArray); + $drsLastExchangeArray = sqlGetResAsArray("SELECT * FROM seg_wells_exchanged WHERE WLE_NR_EXCHANGE=(SELECT MAX(WLE_NR_EXCHANGE) FROM seg_wells_exchanged WHERE WLE_WLL_ID=(SELECT WLL_ID FROM seg_wells,seg_dev_resources WHERE DRS_DEV_TYPE=12 AND DRS_DEV_ID=WLL_ID AND DRS_ID=".$_GET['dev'].")) AND WLE_WLL_ID=(SELECT WLL_ID FROM seg_wells,seg_dev_resources WHERE DRS_DEV_TYPE=12 AND DRS_DEV_ID=WLL_ID AND DRS_ID=".$_GET['dev'].")"); + function formH($selParamName,$checkNo) + { + echo'<select name="'.$selParamName.'" id="'.$selParamName.'">'; + for ($i=0; $i<24; $i++) + { + if ($i<10) $val="0".$i; + else $val=$i; + + if ($val==$checkNo) + echo'<option value="'.$val.'" selected>'.$val.'</option>'; + else + echo'<option value="'.$val.'">'.$val.'</option>'; + + } + echo'</select>'; + } + function formM($selParamName,$checkNo) + { + echo'<select name="'.$selParamName.'" id="'.$selParamName.'">'; + for ($i=0; $i<60; $i++) + { + if ($i<10) $val="0".$i; + else $val=$i; + + if ($val==$checkNo) + echo'<option value="'.$val.'" selected>'.$val.'</option>'; + else + echo'<option value="'.$val.'">'.$val.'</option>'; + + } + echo'</select>'; + } + + //print_r($drsLastExchangeArray); + ?> + <input type="hidden" name="inWLE_ID" value="<?php echo $drsLastExchangeArray[0]['WLE_ID']; ?>"> + + <div class="head_tag">Zabudowa </div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class=desc>Data zabudowy</TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inWellAVdate' SIZE='10' value='<?php echo substr($drsLastExchangeArray[0]['WLE_DATE_FROM'],0,10); ?>'> </TD> + </TR> + <tr> + <td class="desc"><?php echo $lab_Field_site301_029 ; ?></td> + <td CLASS=desc_value> + <?php formH('inBuildTimeH',substr($drsLastExchangeArray[0]['WLE_DATE_FROM'],11,2));?> + : + <?php formM('inBuildTimeM',substr($drsLastExchangeArray[0]['WLE_DATE_FROM'],14,2));?> + </td> + </tr> + + + </table> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site306_004 ;?> </div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_008; ?></TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inWellDlGeo' value='<?php echo $_SESSION['well_details']['well_DlGeo']; ?>'> </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_009; ?></TD> + <TD CLASS="desc_value"><INPUT class="float" TYPE='TEXT' NAME='inWellSzGeo' value="<?php echo $_SESSION['well_details']['well_SzGeo']; ?>"> </TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Tag_site302_003; ?></TD> + <TD CLASS=desc_value><?php echo selectDescriptionFromDictionary('inWellSysType', 'WELL_SYSTEM_TYPE', $_SESSION['well_details']['well_SysType']); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site802_002; ?></TD> + <TD CLASS=desc_value><?php echo selectDescriptionFromDictionary('inWellDesc', 'WELL_STATUS_LEVEL_03', $_SESSION['well_details']['well_Desc']); ?></TD> + </TR> + </table> + </div> + + + <div class="head_tag">Zakresy pomiarowe dla powiązanych urządzeń</div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + echo" + <TR> + <TD class=desc> Zakres ciśnienia dla p<sub>p</sub> [m] </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inPP' value='".$_SESSION['well_details']['well_PPscp']."'></TD> + <td class='desc_value' rowspan='2'><span style='color: #FF0000; font-style: italic; line-height: 20px;'>Uwaga!<br/>Dane aktualizowane automatycznie po przypisaniu Sondy SGP do studni. <br/>Proszę aktualizować tylko dla nieprzypisanych sond do studni lub gdy wartość jest pusta.</span></td> + </TR> + <TR> + <TD class=desc> Zakres dla sondy pomiaru zwierciadła wody H<sub>H</sub> [m] </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inHH' value='".$_SESSION['well_details']['well_HHscp']."'></TD> + </TR> + + "; + ?> + </TABLE> + </div> + + + <div class="tag_buttons"> + <input class="btn btn-info btn-sm" type="button" onclick="location.href = '?pg=site301inf&dev=<?php echo $_SESSION['well_details']['devID'];?>'" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subWellUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site301EXO.php b/sites/site301EXO.php new file mode 100644 index 0000000..b8e14f9 --- /dev/null +++ b/sites/site301EXO.php @@ -0,0 +1,48 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + + +<div class="tag100"> + <FORM ACTION="?pg=site301&dev=<?php echo $_GET['dev'];?>" METHOD="POST"> + <div class="head_tag"><?php echo $lab_ButtonName_OperateOut ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_009 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inBuildDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_026 ; ?></td> + <td CLASS=desc_value> + <?php echo selectDescriptionFromDictionary("inBuildReason", "WELL_DELETE_REASON"); ?> + </td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site301inf&dev=<?php echo $_GET['dev'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subOperateOut' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301Etool.php b/sites/site301Etool.php new file mode 100644 index 0000000..d315f52 --- /dev/null +++ b/sites/site301Etool.php @@ -0,0 +1,60 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<?php +if (!empty($_GET['param'])) +{ + unset($editArray); + $editArray = explode(',', $_GET['param']); + + if ($editArray[4]==13) + { + $labHeader = $lab_Tag_site301_013; + $labLabel = $lab_Field_site301_031; + } + else + { + $labHeader = $lab_Field_site306_001; + $labLabel = $lab_Field_site301_032; + + } +} + +$tpmArray = sqlGetResAsArray("select EQU_NAME,sum(SES_VALUE) TOT_VAL,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) TOT_STOCK from seg_equipments_stock,seg_equipments where SES_EQU_ID=EQU_ID and SES_EQU_ID=".$editArray[2]); + +?> + + +<div class="tag100"> + <FORM ACTION="./?pg=site301inf&param=<?php echo $editArray[0];?>,edit,<?php echo $editArray[1]; ?>,<?php echo $editArray[2]; ?>" METHOD="POST"> + <input type="hidden" id="inAvValue" value="<?php echo round($tpmArray[0]['TOT_VAL']-$tpmArray[0]['TOT_STOCK']+$editArray[3],2); ?>"> + + <div class="head_tag"><?php echo $labHeader;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $labLabel; ?></td> + <td class="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inValue" id="inRuValue" value="<?php echo $editArray[3];?>" required="required"> + &nbsp;&nbsp;&nbsp; + w sumie dostępych <?php echo round($tpmArray[0]['TOT_VAL'] - $tpmArray[0]['TOT_STOCK'] + $editArray[3],2);?> + + </td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site301inf&dev=<?php echo $editArray[0];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subUpdate' VALUE="<?php echo $lab_ButtonName_Update; ?>" id="subRuSave"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301RBI.php b/sites/site301RBI.php new file mode 100644 index 0000000..aeb360b --- /dev/null +++ b/sites/site301RBI.php @@ -0,0 +1,97 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + + if (isset($_GET['agg'])) + { + $id=$_GET['agg']; + $agg="Pompa: ".$_SESSION['site301_newAgg_array'][$id]['ONA_PUMP']." Silnik: ".$_SESSION['site301_newAgg_array'][$id]['ONA_ENG']; + } + + + + ?> + +<div class="tag100"> + <FORM ACTION="?pg=site301inf&dev=<?php echo $_SESSION['well_details']['devID'] ;?>" METHOD="POST"> + <div class="head_tag"><?php echo $lab_Tag_site301_011 ;?></div> + <div class="tag"> + <table class="desc_val"> + <TR> + <TD class=desc><?php echo $lab_Tag_site301_005; ?></TD> + <TD CLASS="desc_value"><input class="text75" type="text" name="inOrdAgg" value="<?php echo $agg; ?>" readonly> + &nbsp;&nbsp;<a class=tooltip_warning HREF="?pg=site301Agg"><img SRC=./images/search-icon.png><span>Wybierz dostępny agregat</SPAN></A> + </TD> + </TR> + + <?php if ($_SESSION['site301_newAgg_array'][$id]['ORD_ID']>0): ?> + <input type="hidden" name="inOrdID" value="<?php echo $_SESSION['site301_newAgg_array'][$id]['ORD_ID'];?>"> + <input type="hidden" name="inWellDrsID" value="<?php echo $_SESSION['site301_newAgg_array'][$id]['ORD_DRS_ID'];?>"> + + <input type="hidden" name="inPupDrsID" value="<?php echo $_SESSION['site301_newAgg_array'][$id]['ONA_PUMP_DRS_ID'];?>"> + <input type="hidden" name="inPupName" value="<?php echo substr($_SESSION['site301_newAgg_array'][$id]['ONA_PUMP'],0,strpos($_SESSION['site301_newAgg_array'][$id]['ONA_PUMP'], ':')-4);?>"> + <input type="hidden" name="inPupNo" value="<?php echo substr($_SESSION['site301_newAgg_array'][$id]['ONA_PUMP'],strpos($_SESSION['site301_newAgg_array'][$id]['ONA_PUMP'], ':')+2);?>"> + + + <input type="hidden" name="inEngDrsID" value="<?php echo $_SESSION['site301_newAgg_array'][$id]['ONA_ENG_DRS_ID'];?>"> + <input type="hidden" name="inEngName" value="<?php echo substr($_SESSION['site301_newAgg_array'][$id]['ONA_ENG'],0,strpos($_SESSION['site301_newAgg_array'][$id]['ONA_ENG'], ':')-4);?>"> + <input type="hidden" name="inEngNo" value="<?php echo substr($_SESSION['site301_newAgg_array'][$id]['ONA_ENG'],strpos($_SESSION['site301_newAgg_array'][$id]['ONA_ENG'], ':')+2);?>"> + + + <tr> + <td class="desc"><?php echo $lab_Field_site810_021; ?></td> + <td class="desc_value"><input class="float" name="inWellLS" value="<?php echo $_SESSION['site301_newAgg_array'][$id]['ONA_GLEB_AG'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_022; ?></td> + <td class="desc_value"><input class="float" name="inWellDR" value="<?php echo $_SESSION['site301_newAgg_array'][$id]['ONA_SRED_KOL'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site301_019; ?></td> + <td class="desc_value"><input class="float" name="inWellLZ" value="<?php echo $_SESSION['site301_newAgg_array'][$id]['OWP_ZASYP'];?>"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_023 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inBuildDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site301_029 ; ?></td> + <td CLASS=desc_value> + <?php getSelectHours('inBuildTimeH');?> + : + <?php getSelectMinutes('inBuildTimeM');?> + </td> + </tr> + + <?php $_SESSION['doubleFormProtection']='once'; ?> + + <?php endif; ?> + + </table> + </div> + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="SUBMIT" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subBuildInSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + <?php + unset($_SESSION['site301_newAgg_array']); + ?> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301RBO.php b/sites/site301RBO.php new file mode 100644 index 0000000..27a7ff5 --- /dev/null +++ b/sites/site301RBO.php @@ -0,0 +1,73 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<script> + //$(function() {$("#data_01").datepicker(); }); + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + + //sprawdza, czy studnia jest wyłączona + unset($buttonStyle); + if (sqlStringValue("select getLastValue(507,".$_GET['dev'].") ONOFF", "ONOFF") == "ON") + { + echo('<script>sweetAlert("Operacja niemożliwa!", "Studnia aktualnie jest w stanie załączonym – pompa pracuje. Aby wybudować agregat koniecznym jest wyłączenie pompy.", "error");</script>'); + $buttonStyle = "disabled='disabled'"; + } + + + ?> + + +<div class="tag100"> + <FORM ACTION="./?pg=site301&dev=<?php echo $_GET['dev'];?>" METHOD="POST"> + <div class="head_tag"><?php echo $lab_Tag_site301_010 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site301_020 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inBuildDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site301_028 ; ?></td> + <td CLASS=desc_value> + <?php getSelectHours('inBuildTimeH');?> + : + <?php getSelectMinutes('inBuildTimeM');?> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site301_021 ; ?></td> + <td CLASS=desc_value> + <?php + //echo selectDescriptionFromDictionary("inBuildReason", "WELL_STATUS_LEVEL_03"); + echo selectDescriptionFromDictionary("inBuildReason", "WELL_STATUS_OFF",'Planowa wymiana'); + ?> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site803_010 ; ?></td> + <td class="desc_value"><textarea name="inBuildReasonAdd"></textarea></td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site301inf&dev=<?php echo $_GET['dev'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' <?php echo $buttonStyle; ?> TYPE='SUBMIT' NAME='subBuildOutSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301RBS.php b/sites/site301RBS.php new file mode 100644 index 0000000..dccd9de --- /dev/null +++ b/sites/site301RBS.php @@ -0,0 +1,77 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<script> + //$(function() {$("#data_01").datepicker(); }); + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + + //sprawdza, czy studnia jest wyłączona + unset($buttonStyle); + if (sqlStringValue("select getLastValue(507,".$_GET['dev'].") ONOFF", "ONOFF") == "ON") + { + echo('<script>sweetAlert("Operacja niemożliwa!", "Studnia aktualnie jest w stanie załączonym – pompa pracuje. Aby oznaczyć agregat jako zatopiony koniecznym jest wyłączenie pompy.", "error");</script>'); + $buttonStyle = "disabled='disabled'"; + } + + + ?> + + +<div class="tag100"> + <FORM ACTION="./?pg=site301&dev=<?php echo $_GET['dev'];?>&sink=<?php echo md5($_GET['dev']); ?>" METHOD="POST"> + <div class="head_tag">Zatopienie agregatu</div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc">Studnia</td> + <td CLASS=desc_value><?php echo $_SESSION['well_details']['wellName'];?></td> + </tr> + <tr> + <td class="desc">Zatopiono pompę</td> + <td CLASS=desc_value><input type="checkbox" name="inSinkPump" value="1" checked="checked"> &nbsp;&nbsp;&nbsp;<?php echo $_SESSION['well_details']['pumpName'];?> [<?php echo $_SESSION['well_details']['pumpSN']; ?>]</td> + </tr> + <tr> + <td class="desc">Zatopiono silnik</td> + <td CLASS=desc_value><input type="checkbox" name="inSinkEng" value="1" checked="checked"> &nbsp;&nbsp;&nbsp;<?php echo $_SESSION['well_details']['engName'];?> [<?php echo $_SESSION['well_details']['engSN']; ?>]</td> + </tr> + + <tr> + <td class="desc">Data zatopienia</td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inSinkDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + <tr> + <td class="desc">Godzina zatopienia</td> + <td CLASS=desc_value> + <?php getSelectHours('inSinkTimeH');?> + : + <?php getSelectMinutes('inSinkTimeM');?> + </td> + </tr> + <tr> + <td class="desc">Opis</td> + <td class="desc_value"><textarea name="inSinkReasonAdd"></textarea></td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site301inf&dev=<?php echo $_GET['dev'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' <?php echo $buttonStyle; ?> TYPE='SUBMIT' NAME='subSinkSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301inf.php b/sites/site301inf.php new file mode 100644 index 0000000..33f1182 --- /dev/null +++ b/sites/site301inf.php @@ -0,0 +1,655 @@ +<?php +if (!empty($_SESSION['site301'])) +{ +?> + + <?php + if (!empty($_GET['param'])) + { + unset($delArray); + $delArray = explode(',', $_GET['param']); + $_GET['dev'] = $delArray[0]; + } + + if (!empty($_GET['direct']) && $_GET['direct']=='site401inf') + { + delSearchSessionData(); + } + + ?> + + + + + + <?php + //dodawanie nowej studni + if (!empty($_POST['inWellName']) && $_POST['subWellSave']==$lab_ButtonName_Save && $_POST['inWellBariera']>0) + { + // sprawdza i dodaje studnię do dodaje studnię do tabeli seg_wells + if (sqlValue("select count(*) from seg_wells where WLL_NAME='".$_POST['inWellName']."'")==0) + { + $ujName = sqlStringValue("select SWI_NAME from seg_water_intakes where SWI_ID=".$_POST['inWellBariera'],"SWI_NAME"); + + mysql_query("INSERT INTO seg_wells SET WLL_NAME='".$_POST['inWellName']."',WLL_SWI_ID=".$_POST['inWellBariera'].",WLL_BARIERA='".$ujName."',WLL_CAT_DIC_ID=".$_POST['inWellCategory'].",WLL_LATITUDE='".getFloatValue($_POST['inWellLat'])."',WLL_LONGITUDE='".getFloatValue($_POST['inWellLong'])."'"); + $maxWELLid = sqlValue("select max(WLL_ID) from seg_wells"); + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=$maxWELLid,DRS_DEV_TYPE=12,DRS_AVAILABLE_DATE=now(),DRS_BUY_DATE=now(),DRS_STATUS_DIC_ID=3,DRS_RESOURCES_DIC_ID=".$_POST['inWellStatus'].",DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='DST'),DRD_VALUE='".getFloatValue($_POST['inWellDiame'])."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LS'),DRD_VALUE='".getFloatValue($_POST['inWellDepth'])."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LF'),DRD_VALUE='".$_POST['inWellFilter']."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LZ'),DRD_VALUE='".getFloatValue($_POST['inWellZas'])."',DRD_AUDIT_DATE=now(),DRD_AUDIT_USR='".$_SESSION['user']."'"); + mysql_query("INSERT INTO seg_object_hole_cards SET OHC_DRS_ID=".$maxDRSid.",OHC_UJ='".$ujName."',OHC_NAME='".$_POST['inWellName']."',OHC_DATA_ODDANIA='".$_POST['inWellAVdate']."',OHC_GLEB_ODWIER='".$_POST['inWellDepth']."',OHC_GLEB_OSTAT='".$_POST['inWellDepth']."',OHC_DL_GEOGR='".getFloatValue($_POST['inWellLat'])."',OHC_SZER_GEOGR='".getFloatValue($_POST['inWellLong'])."',OHC_PLC='".$_SESSION['syndis_eq_stock']."'"); + mysql_query("INSERT INTO seg_object_hole_cards_his SET OHH_DRS_ID=".$maxDRSid.",OHH_UJ='".$ujName."',OHH_NAME='".$_POST['inWellName']."',OHH_ZASYP='".$_POST['inWellZas']."',OHH_PLC='".$_SESSION['syndis_eq_stock']."'"); + + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + + $_GET['dev'] = $maxDRSid; + unset($maxWELLid); + unset($maxDRSid); + + echo" + <script> + $(window).load(function() { + $.post('./ajax_func.php', { action: 'refresh_departments' } ); + }); + </script> + "; + + } + else + { + echo "<div class='actionERROR'>Błąd zapisu. Studnia ".$_POST['inWellName']." istnieje już w systemie. Spróbuj ponownie.</div>"; + echo'<meta http-equiv="refresh" content="3; URL=/?pg=site301">'; + } + } + + + + + + //zabudowa agregatu + if ($_SESSION['doubleFormProtection']=='once' && $_POST['inWellDrsID']>0 && $_POST['inPupDrsID']>0 && $_POST['inEngDrsID']>0 && $_POST['subBuildInSave']==$lab_ButtonName_Save) + { + + $chechWellID = (int) sqlStringValue("select WLL_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and DRS_ID=".$_POST['inWellDrsID']." limit 1", "WLL_ID"); + + if ($_SESSION['well_details']['wellID'] == $chechWellID) + { + + mysql_query("INSERT INTO seg_well_pump_eng_rel SET RWL_WLL_ID=".$_SESSION['well_details']['wellID'].",RWL_PUP_DRS_ID=".$_POST['inPupDrsID'].",RWL_ENG_DRS_ID=".$_POST['inEngDrsID']); + + if (sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_WLL_ID=".$_SESSION['well_details']['wellID']." and RWL_PUP_DRS_ID=".$_POST['inPupDrsID']." and RWL_ENG_DRS_ID=".$_POST['inEngDrsID'])>0) + { + //studnia + mysql_query("UPDATE seg_dev_resources SET DRS_AVAILABLE_DATE='".$_POST['inBuildDate']."',DRS_RESOURCES_DIC_ID=901 WHERE DRS_ID=".$_POST['inWellDrsID']); + //pompa + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=7,DRS_RESOURCES_DIC_ID=3 WHERE DRS_ID=".$_POST['inPupDrsID']); + //silnik + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=7,DRS_RESOURCES_DIC_ID=3 WHERE DRS_ID=".$_POST['inEngDrsID']); + + //wpis do historii agregatów + $nr_exch = sqlValue("select case when max(WLE_NR_EXCHANGE)>0 then max(WLE_NR_EXCHANGE)+1 else 1 end as nr from seg_wells_exchanged where WLE_WLL_ID=".$_SESSION['well_details']['wellID']); + mysql_query("INSERT INTO seg_wells_exchanged SET WLE_WLL_ID=".$_SESSION['well_details']['wellID'].",WLE_NR_EXCHANGE=".$nr_exch.",WLE_PUMP_NAME='".$_POST['inPupName']."',WLE_PUMP_NO='".$_POST['inPupNo']."',WLE_ENG_NAME='".$_POST['inEngName']."',WLE_ENG_NO='".$_POST['inEngNo']."',WLE_DATE_FROM='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00',WLE_ZP='".getFloatValue($_POST['inWellLS'])."',WLE_DR='".getFloatValue($_POST['inWellDR'])."';"); + + //usuwanie blokady ze zleceń + mysql_query("UPDATE seg_order_new_agg_params SET ONA_PUMP_DRS_ID=null,ONA_ENG_DRS_ID=null WHERE ONA_ORD_ID=".$_POST['inOrdID']); + // aktualizacja statusu zlecenia + mysql_query("UPDATE seg_orders SET ORD_STATUS_DIC_ID=853,ORD_FINISH_USR='".$_SESSION['user']."',ORD_FINISH_DATE=now() WHERE ORD_ID=".$_POST['inOrdID']); + + //aktualizauje głębokość zabudowy pompy, średnicę rurociągu oraz głębokość zasypu + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['inWellDrsID'].",DRD_RESOURCES_DETAIL=235,DRD_VALUE='".$_POST['inWellDR']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['inWellDrsID'].",DRD_RESOURCES_DETAIL=240,DRD_VALUE='".$_POST['inWellLS']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['inWellDrsID'].",DRD_RESOURCES_DETAIL=130,DRD_VALUE='".$_POST['inWellLZ']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + + //dodaje wpis do karty otworów + mysql_query("INSERT INTO seg_object_hole_cards_his SET OHH_DRS_ID=".$_POST['inWellDrsID'].",OHH_UJ='".$_SESSION['well_details']['well_Uj']."',OHH_NAME='".$_SESSION['well_details']['wellName']."',OHH_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00',OHH_ZASYP='".getFloatValue($_POST['inWellLZ'])."',OHH_PLC='".$_SESSION['syndis_eq_stock']."'"); + + //dodaje POSTÓW - domyślnie przyjmując status "Oczekująca na uruchomienie" + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['inWellDrsID'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='1509',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00'"); + + //buduje tabelę agregatów + //mysql_query("truncate table rep_aggregate_departments"); + //mysql_query("insert into rep_aggregate_departments select null,PUP_ID,PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,PUP_DEPARTMENT,ENG_ID,DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,DRS_DEPARTMENT,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from (select PUP_ID,DRS_ID PUP_DRS_ID,PUP_NAME,DRS_SN_NUMBER PUP_SN_NO,DRS_DEPARTMENT PUP_DEPARTMENT,PUP_Q_N,PUP_H_P,(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER)) ENG_ID,(select ENG_NAME from seg_engines where ENG_ID=(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER))) ENG_NAME,(select ENG_VOLTAGE from seg_engines where ENG_ID=(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER))) ENG_VOLTAGE,(select ENG_POWER from seg_engines where ENG_ID=(select TST_ENG_ID from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER))) ENG_POWER,(select TST_ENG_SN_NO from tst_tests where TST_ID=(select max(TST_ID) from tst_tests where TST_PUP_ID=PUP_ID and TST_PUP_SN_NO=DRS_SN_NUMBER)) ENG_SN_NO from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID where DRS_RESOURCES_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES' and DIC_NAME='RESERVE') and DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and DIC_NAME='AVAILABLE')and DRS_DEV_TYPE=10) tb1 left join seg_dev_resources on DRS_DEV_TYPE=11 and DRS_DEV_ID=tb1.ENG_ID and tb1.ENG_SN_NO=DRS_SN_NUMBER left join seg_engine_cables on ECB_ENG_NAME=ENG_NAME and ECB_ENG_NO=ENG_SN_NO"); + + echo"<div class='actionOK'>$lab_Field_site301_024</div>"; + } + + } + else + { + echo"<div class='actionWARNING'>UWAGA!<br/>Problem z zabudową agregatu w studni – zostały wykryte inne aktywne okna systemu SoftSPM. W celu uniknięcia błędów - zamknij je i spróbuj ponownie – począwszy od wyszukania studni w Menu <i>Stan » Stan studni</i>. <br/>Jeśli problem powtórzy się ponownie – skontaktuj się z administratorem.</div>"; + echo'<meta http-equiv="refresh" content="20; URL=./?pg=site301">'; + } + + //blokada przez podwujnym zapisem zabudowania + unset($_SESSION['doubleFormProtection']); + + } + + + + + if(!empty($_POST['dev'])) $_GET['dev'] = $_POST['dev']; + if (!empty($_POST['indevID'])) $_GET['dev']=$_POST['indevID']; + + //aktualizauje dane + if (!empty($_POST['inWellName']) && $_POST['subWellUpdate']==$lab_ButtonName_Update) + { + $ujName = sqlStringValue("select SWI_NAME from seg_water_intakes where SWI_ID=".$_POST['inWellBariera'],"SWI_NAME"); + + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='DST'),DRD_VALUE='".$_POST['inWellDiame']."',DRD_AUDIT_USR='admin',DRD_AUDIT_DATE=now()"); + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LS'),DRD_VALUE='".$_POST['inWellDepth']."',DRD_AUDIT_USR='admin',DRD_AUDIT_DATE=now()"); + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LF'),DRD_VALUE='".$_POST['inWellFilter']."',DRD_AUDIT_USR='admin',DRD_AUDIT_DATE=now()"); + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LZ'),DRD_VALUE='".$_POST['inWellZas']."',DRD_AUDIT_USR='admin',DRD_AUDIT_DATE=now()"); + //mysql_query("UPDATE seg_wells SET WLL_NAME='".$_POST['inWellName']."',WLL_CAT_DIC_ID=".$_POST['inWellCategory'].",WLL_P1_SCOPE='".$_POST['inP1']."',WLL_P2_SCOPE='".$_POST['inP2']."',WLL_PP_SCOPE='".$_POST['inPP']."',WLL_HH_SCOPE='".$_POST['inHH']."',WLL_Q_SCOPE='".$_POST['inQ']."' WHERE WLL_ID=".$_POST['inWellID']); + mysql_query("UPDATE seg_wells SET WLL_NAME='".$_POST['inWellName']."',WLL_SWI_ID=".$_POST['inWellBariera'].",WLL_BARIERA='".$ujName."',WLL_CAT_DIC_ID=".$_POST['inWellCategory'].",WLL_PP_SCOPE='".$_POST['inPP']."',WLL_HH_SCOPE='".$_POST['inHH']."',WLL_SYS_TYPE='".$_POST['inWellSysType']."',WLL_STAT_DESC='".$_POST['inWellDesc']."' WHERE WLL_ID=".$_POST['inWellID']); + mysql_query("UPDATE seg_dev_resources SET DRS_AVAILABLE_DATE='".$_POST['inWellAVdate']."',DRS_RESOURCES_DIC_ID=".$_POST['inWellStatus01']." WHERE DRS_ID=".$_GET['dev']); + mysql_query("UPDATE seg_object_hole_cards SET OHC_NAME='".$_POST['inWellName']."',OHC_UJ='".$ujName."',OHC_DL_GEOGR='".$_POST['inWellDlGeo']."',OHC_SZER_GEOGR='".$_POST['inWellSzGeo']."' where OHC_DRS_ID=".$_GET['dev']); + + mysql_query("UPDATE seg_wells_exchanged SET WLE_DATE_FROM='".$_POST['inWellAVdate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00' WHERE WLE_ID=".$_POST['inWLE_ID']); + + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + + + // aktualizacja odprowadzenia wody + if ($_POST['subSite301tree']==$lab_ButtonName_Save && $_GET['dev']>0 && $_POST['inCheck']>0) + { + mysql_query("DELETE FROM seg_well_water_drainage WHERE WLD_DRS_ID=".$_GET['dev']); + mysql_query("INSERT INTO seg_well_water_drainage SET WLD_DRS_ID=".$_GET['dev'].",WLD_WLL_ID=".$_SESSION['well_details']['wellID'].",WLD_WWD_ID=".$_POST['inCheck'].",WLD_AUDIT_CU='".$_SESSION['user']."',WLD_AUDIT_CD=now()"); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + + //dodaje opomiarowanie + //========================================================= + if ($_GET['up']>0 && $_GET['acc']=='add' && sqlValue("select count(1) from seg_dev_equipments_rel where SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_DRS_EQU_ID=".$_GET['up']." and SDE_TYPE=14")==0) + { + mysql_query("INSERT INTO seg_dev_equipments_rel SET SDE_TYPE=14,SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_PARAM3='".$_SESSION['syndis_eq_stock']."',SDE_DRS_EQU_ID=".$_GET['up']); + mysql_query("INSERT INTO seg_dev_equipments_rel_his SET SDE_TYPE=14,SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_PARAM3='".$_SESSION['syndis_eq_stock']."',SDE_DRS_EQU_ID=".$_GET['up'].",SDE_AUDIT_CU='".$_SESSION['user']."',SDE_AUDIT_CD=now()"); + mysql_query("UPDATE seg_dev_resources SET DRS_RESOURCES_DIC_ID=3 WHERE DRS_ID=".$_GET['up']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_GET['up']); + + //aktualizuje zakresy pomiarowe dla PP i HH w kontekście przypisywanej sondy + // ==================================================================== + if(strstr(sqlStringValue("select EQU_NAME from seg_dev_equipments_rel left join seg_dev_resources on SDE_DRS_EQU_ID=DRS_ID and DRS_DEV_TYPE=14 left join seg_equipments on DRS_DEV_ID=EQU_ID where SDE_TYPE=14 and SDE_DRS_EQU_ID=".$_GET['up'],"EQU_NAME"),"SGP")) + mysql_query("UPDATE seg_wells SET WLL_PP_SCOPE='".getLastValueFromDevResourceDetail("DEV_RESOURCES_DETAIL","SGP_21_PP",$_GET['up'])."',WLL_HH_SCOPE='".getLastValueFromDevResourceDetail("DEV_RESOURCES_DETAIL","SGP_21_HH",$_GET['up'])."' WHERE WLL_ID=".$_SESSION['well_details']['wellID']); + // ==================================================================== + + } + //usuwa opomiarowanie + if ($_GET['up']>0 && $_GET['acc']=='del' && $_GET['tp']==14) + { + mysql_query("DELETE FROM seg_dev_equipments_rel WHERE SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_TYPE=14 and SDE_DRS_EQU_ID=".$_GET['up']); + mysql_query("UPDATE seg_dev_equipments_rel_his SET SDE_AUDIT_DU='".$_SESSION['user']."',SDE_AUDIT_DD=now() WHERE SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_TYPE=14 and SDE_DRS_EQU_ID=".$_GET['up']); + mysql_query("UPDATE seg_dev_resources SET DRS_RESOURCES_DIC_ID=2 WHERE DRS_ID=".$_GET['up']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_GET['up']); + } + //========================================================= + + //dodawanie kabla + //========================================================= + if ($_POST['subKableSave']==$lab_ButtonName_Save && $_POST['inKabValue']>0 && $_POST['up']>0) + { + mysql_query("INSERT INTO seg_dev_equipments_rel SET SDE_PARAM3='".$_SESSION['syndis_eq_stock']."', SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_DRS_EQU_ID=".$_POST['up'].",SDE_VALUE='".$_POST['inKabValue']."',SDE_TYPE='13'"); + mysql_query("INSERT INTO seg_dev_equipments_rel_his SET SDE_PARAM3='".$_SESSION['syndis_eq_stock']."', SDE_TYPE=13,SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_DRS_EQU_ID=".$_POST['up'].",SDE_VALUE='".$_POST['inKabValue']."',SDE_AUDIT_CU='".$_SESSION['user']."',SDE_AUDIT_CD=now()"); + //mysql_query("UPDATE seg_equipments_stock SET SES_STOCK=(SES_STOCK-".$_POST['inKabValue'].") WHERE SES_EQU_ID=".$_POST['up']); + } + + //usuwa kabel + if ($delArray[3]>0 && $delArray[1]=='del' && $delArray[2]==13) + { + mysql_query("delete from seg_dev_equipments_rel where SDE_ID=".$delArray[3]); + mysql_query("delete from seg_dev_equipments_rel_his where SDE_ID=".$delArray[3]); + } + //========================================================= + + //dodawanie orurowania + //========================================================= + if ($_POST['subRuSave']==$lab_ButtonName_Save && $_POST['inRuValue']>0 && $_POST['eq']>0) + { + mysql_query("INSERT INTO seg_dev_equipments_rel SET SDE_PARAM3='".$_SESSION['syndis_eq_stock']."', SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_DRS_EQU_ID=".$_POST['eq'].",SDE_VALUE='".$_POST['inRuValue']."',SDE_TYPE='15'"); + mysql_query("INSERT INTO seg_dev_equipments_rel_his SET SDE_PARAM3='".$_SESSION['syndis_eq_stock']."', SDE_TYPE=15,SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_DRS_EQU_ID=".$_POST['eq'].",SDE_VALUE='".$_POST['inRuValue']."',SDE_AUDIT_CU='".$_SESSION['user']."',SDE_AUDIT_CD=now()"); + //$sesID = sqlValue("select SES_ID from seg_equipments_stock where SES_STOCK>0 and SES_EQU_ID=".$_POST['up']." and (SES_PARAM3 like '%".$_SESSION['eq_stock_param3_1']."%' or SES_PARAM3 like '%".$_SESSION['eq_stock_param3_2']."%' or SES_PARAM3 like '%".$_SESSION['eq_stock_param3_3']."%') limit 1"); + //mysql_query("UPDATE seg_equipments_stock SET SES_STOCK=(SES_STOCK-".$_POST['inRuValue'].") WHERE SES_ID=".$sesID); + } + //usuwa orurowanie + if ($delArray[3]>0 && $delArray[1]=='del' && $delArray[2]==15) + { + //mysql_query("delete from seg_dev_equipments_rel where SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_DRS_EQU_ID=".$_GET['up']); + + mysql_query("delete from seg_dev_equipments_rel where SDE_ID=".$delArray[3]); + mysql_query("delete from seg_dev_equipments_rel_his where SDE_ID=".$delArray[3]); + + //mysql_query("UPDATE seg_dev_equipments_rel_his SET SDE_AUDIT_DU='".$_SESSION['user']."',SDE_AUDIT_DD=now() WHERE SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_TYPE=15 and SDE_DRS_EQU_ID=".$_GET['up']); + //$sesID = sqlValue("select SES_ID from seg_equipments_stock where SES_VALUE>SES_STOCK and SES_EQU_ID=".$_GET['up']." and (SES_PARAM3 like '%".$_SESSION['eq_stock_param3_1']."%' or SES_PARAM3 like '%".$_SESSION['eq_stock_param3_2']."%' or SES_PARAM3 like '%".$_SESSION['eq_stock_param3_3']."%') limit 1"); + //mysql_query("UPDATE seg_equipments_stock SET SES_STOCK=(SES_STOCK+".$_GET['val'].") WHERE SES_ID=".$sesID); + } + //========================================================= + + + //aktualizacja kabeli i orurowania + if ($delArray[2]>0 && $delArray[1]=='edit' && $_POST['subUpdate']==$lab_ButtonName_Update && getFloatValue($_POST['inValue'])>0) + { + //mysql_query("delete from seg_dev_equipments_rel where SDE_ID=".$delArray[3]); + //mysql_query("delete from seg_dev_equipments_rel_his where SDE_ID=".$delArray[3]); + mysql_query("UPDATE seg_dev_equipments_rel SET SDE_VALUE='".getFloatValue($_POST['inValue'])."' WHERE SDE_ID=".$delArray[2]); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + + } + //========================================================= + + + + + ?> + + +<?php + +//wpisuje do tablicy podstawowe informacje o studni +$wynik = mysql_query("select DRS_ID,WLL_ID,WLL_SWI_ID,WLL_BARIERA,WLL_NAME,WLL_CAT_DIC_ID,DRS_SN_NUMBER,DRS_AVAILABLE_DATE,WLL_PP_SCOPE,WLL_HH_SCOPE,WLL_SYS_TYPE,WLL_STAT_DESC,RWL_PUP_DRS_ID,(select PUP_ID from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) PUP_ID,(select PUP_NAME from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=RWL_PUP_DRS_ID limit 1) PUP_NAME,(select DRS_SN_NUMBER from seg_dev_resources where DRS_ID=RWL_PUP_DRS_ID limit 1) PUP_NO,RWL_ENG_DRS_ID,(select ENG_ID from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) ENG_ID,(select ENG_NAME from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=RWL_ENG_DRS_ID limit 1) ENG_NAME,(select DRS_SN_NUMBER from seg_dev_resources where DRS_ID=RWL_ENG_DRS_ID limit 1) ENG_NO,OHC_DL_GEOGR,OHC_SZER_GEOGR,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID left join seg_object_hole_cards on OHC_DRS_ID=DRS_ID where DRS_ID=".$_GET['dev']); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $_SESSION['well_details']=array( + 'devID' => $r["DRS_ID"], + 'wellID' => $r["WLL_ID"], + 'wellName' => $r["WLL_NAME"], + 'wellSN' => $r["DRS_SN_NUMBER"], + 'wellDate' => $r["DRS_AVAILABLE_DATE"], + 'well_PPscp'=> $r["WLL_PP_SCOPE"], + 'well_HHscp'=> $r["WLL_HH_SCOPE"], + 'well_UjID' => $r["WLL_SWI_ID"], + 'well_Uj' => $r["WLL_BARIERA"], + 'well_SysType'=> $r["WLL_SYS_TYPE"], + 'well_Desc' => $r["WLL_STAT_DESC"], + 'well_DlGeo'=> $r["OHC_DL_GEOGR"], + 'well_SzGeo'=> $r["OHC_SZER_GEOGR"], + 'well_TypeID'=> $r["WLL_CAT_DIC_ID"], + 'pumpDrsID' => $r["RWL_PUP_DRS_ID"], + 'pumpID' => $r["PUP_ID"], + 'pumpName' => $r["PUP_NAME"], + 'pumpSN' => $r["PUP_NO"], + 'engDrsID' => $r["RWL_ENG_DRS_ID"], + 'engID' => $r["ENG_ID"], + 'engName' => $r["ENG_NAME"], + 'engSN' => $r["ENG_NO"], + 'statusID' => $r["DRS_STATUS_DIC_ID"], + 'resID' => $r["DRS_RESOURCES_DIC_ID"], + ); +} + +if ($_SESSION['lang']=='polish') + $imgSPM = "./images/".sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=".$_SESSION['well_details']['well_TypeID'],"DIC_NAME")."_polish.png"; +else + $imgSPM = "./images/".sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=".$_SESSION['well_details']['well_TypeID'],"DIC_NAME")."_english.png"; + + + +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site301_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpSN']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engSN']; ?></TD> + </TR> + </table> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site301_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_006; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['wellDate']; ?></TD> + </TR> + + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_ID<>120 order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + + if ($var_DIC_ID==110) $pVal = getGlebokoscAct($_SESSION['well_details']['devID']); + else $pVal = getFloatValue(getLastValueFromDevResourceDetail('WELL_TECHNICAL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'])); + + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='$var_DIC_NAME'",$decFieldLang)."</TD> + <TD CLASS='desc_value'>".$pVal."</TD> + </TR> + "; + } + + + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='LPM'",$decFieldLang)."</TD> + <TD CLASS='desc_value'>".str_replace('.',',',round(str_replace(',','.',getLastValueFromDevResourceDetail('WELL_PARAMETERS','LPM',$_SESSION['well_details']['devID'])),2))."</TD> + </TR> + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='DR'",$decFieldLang)."</TD> + <TD CLASS='desc_value'>".str_replace('.',',',round(str_replace(',','.',getLastValueFromDevResourceDetail('WELL_PARAMETERS','DR',$_SESSION['well_details']['devID'])),2))."</TD> + </TR> + "; + + + + + + + ?> + </table> + </div> + + + + + + + <div class="head_tag">Zakresy pomiarowe dla powiązanych urządzeń</div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param">Zakres ciśnienia p<sub>p</sub> [m] </TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['well_PPscp']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param">Zakres dla sondy pomiaru zwierciadła wody H<sub>H</sub> [m] </TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['well_HHscp']; ?></TD> + </TR> + </table> + </div> + + + <div class="head_tag">Powiązane urządzenia pomiarowe</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Urządzenie</TD> + <TD class="label">Numer seryjny</TD> + <?php if (!empty($_SESSION['site301_edit'])) echo"<TD class='label'>&nbsp;</TD>"; ?> + </TR> + + <?php + $result = mysql_query("select DRS_ID,EQU_NAME,DRS_SN_NUMBER from seg_dev_equipments_rel left join seg_dev_resources on SDE_DRS_EQU_ID=DRS_ID and DRS_DEV_TYPE=14 left join seg_equipments on DRS_DEV_ID=EQU_ID where SDE_TYPE=14 and SDE_DRS_DEV_ID=".$_SESSION['well_details']['devID']); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_01 = $r["DRS_ID"]; + $var_02 = $r["EQU_NAME"]; + $var_03 = $r["DRS_SN_NUMBER"]; + + echo" + <tr> + <TD class='field_center'>$var_02 &nbsp;</TD> + <TD class='field_center'>$var_03 &nbsp;</TD>"; + if (!empty($_SESSION['site301_edit'])) echo"<TD style='width: 17px;' class='field_right'> + + <a class='confirm_tools' href=./?pg=site301inf&dev=".$_SESSION['well_details']['devID']."&up=".$var_01."&tp=14&acc=del><img src='./images/remove_ico.png'></a></TD>"; + echo" + </tr> + + "; + } + ?> + + <?php if (!empty($_SESSION['site301_edit']))echo"<tr><td colspan='4' class='field_right'><a href='?pg=site301infApom&dev=".$_SESSION['well_details']['devID']."' title='Dodaj'><img src='./images/add_ico.png'></a> </td></tr>"; ?> + </table> + </div> + +<?php +// przypisany kabel +unset($cabelInfoOrderArray); +$cabelInfoOrderArray = sqlGetResAsArray("select * from seg_orders left join seg_order_new_agg_params on ONA_ORD_ID=ORD_ID where ORD_ID=(select max(ORD_ID) from seg_orders where ORD_DRS_ID=".$_GET['dev']." and ORD_SCOPE_DIC_ID in (801,803))"); +unset($cabelInfoRAMBArray); +$cabelInfoRAMBArray = sqlGetResAsArray("select CONCAT(CBL_TYPE,' / ',CBL_DLUGOSC,' (',CBL_OZNAK_01,', ',CBL_OZNAK_02,')') CABLE from seg_well_pump_eng_rel,softspm_rep.rep_015_stany where RWL_PUP_DRS_ID=PUP_DRS_ID and RWL_ENG_DRS_ID=ENG_DRS_ID and RWL_WLL_ID=".$_SESSION['well_details']['wellID']); +?> + + <div class="head_tag">Kabel PGE</div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param">Zlecenie</TD> + <TD CLASS="desc_value"><?php echo $cabelInfoOrderArray[0]['ONA_CABLE']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param">Stacja Prób - RAMB</TD> + <TD CLASS="desc_value"><?php echo $cabelInfoRAMBArray[0]['CABLE']; ?></TD> + </TR> + </table> + </div> + + + <div class="head_tag">Kable</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Rodzaj</TD> + <TD class="label">Długość [m]</TD> + <?php if (!empty($_SESSION['site301_edit'])) echo"<TD class='label'>&nbsp;</TD>"; ?> + </TR> + <tr> + <?php + $result = mysql_query("select SDE_ID,EQU_ID,EQU_NAME,SDE_VALUE from seg_dev_equipments_rel left join seg_equipments on SDE_DRS_EQU_ID=EQU_ID where SDE_TYPE=13 and SDE_DRS_DEV_ID=".$_SESSION['well_details']['devID']); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_id = $r["SDE_ID"]; + $var_01 = $r["EQU_ID"]; + $var_02 = $r["EQU_NAME"]; + $var_03 = $r["SDE_VALUE"]; + + echo" + <tr> + <TD class='field_center'>$var_02 &nbsp;</TD> + <TD class='field_center'>$var_03 &nbsp;</TD>"; + if (!empty($_SESSION['site301_edit'])) + + echo"<TD style='width: 45px;' class='field_right'> + <a href=./?pg=site301Etool&param=".$_SESSION['well_details']['devID'].",".$var_id.",".$var_01.",".$var_03.",13><img src='./images/edit.png' title='Edytuj'></a> + &nbsp; + <a class='confirm_tools' href=./?pg=site301inf&param=".$_SESSION['well_details']['devID'].",del,13,".$var_id."><img src='./images/remove_ico.png' title='Usuń'></a> + </TD>"; + + echo" + </tr> + + "; + } + ?> + </tr> + <?php if (!empty($_SESSION['site301_edit']))echo"<tr><td colspan='3' class='field_right'><a href='?pg=site301infAkb&dev=".$_SESSION['well_details']['devID']."' title='Dodaj'><img src='./images/add_ico.png'></a> </td></tr>"; ?> + </table> + </div> + + + <div class="head_tag">Rury i armatura</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Rodzaj</TD> + <TD class="label">Ilość sztuk</TD> + <?php if (!empty($_SESSION['site301_edit'])) echo"<TD class='label'>&nbsp;</TD>"; ?> + </TR> + <tr> + <?php + $result = mysql_query("select SDE_ID,EQU_ID,EQU_NAME,SDE_VALUE from seg_dev_equipments_rel left join seg_equipments on SDE_DRS_EQU_ID=EQU_ID where SDE_TYPE=15 and SDE_DRS_DEV_ID=".$_SESSION['well_details']['devID']); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_id = $r["SDE_ID"]; + $var_01 = $r["EQU_ID"]; + $var_02 = $r["EQU_NAME"]; + $var_03 = $r["SDE_VALUE"]; + + echo" + <tr> + <TD class='field_center'>$var_02 &nbsp;</TD> + <TD class='field_center'>$var_03 &nbsp;</TD>"; + if (!empty($_SESSION['site301_edit'])) + echo"<TD style='width: 45px;' class='field_right'> + <a href=./?pg=site301Etool&param=".$_SESSION['well_details']['devID'].",".$var_id.",".$var_01.",".$var_03.",15><img src='./images/edit.png' title='Edytuj'></a> + &nbsp; + <a class='confirm_tools' href=./?pg=site301inf&param=".$_SESSION['well_details']['devID'].",del,15,".$var_id."><img src='./images/remove_ico.png'></a></TD>"; + echo" + </tr> + + "; + } + ?> + </tr> + <?php if (!empty($_SESSION['site301_edit']))echo"<tr><td colspan='3' class='field_right'><a href='?pg=site301infAru&dev=".$_SESSION['well_details']['devID']."' title='Dodaj'><img src='./images/add_ico.png'></a> </td></tr>"; ?> + </table> + + </div> + + +</div> + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Field_site301_001 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_016; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['wellName']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_014; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['well_Uj']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_017; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DIC_ENG_LANG from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_ENG_LANG"); ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_008; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['well_DlGeo']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_009; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['well_SzGeo']; ?></TD> + </TR> + + <TR> + <TD class="desc_equipment"><?php echo $lab_Tag_site302_003; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo setDicName($_SESSION['well_details']['resID']); ?></TD> + </TR> + + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_025; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['well_SysType']; ?></TD> + </TR> + + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site802_002; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['well_Desc']; ?></TD> + </TR> + </table> + </div> + + + <?php + $waterDrainage = sqlGetResAsArray("select WLD_ID,WWD_ID,WWD_NAME from seg_well_water_drainage,seg_water_drainage where WLD_WWD_ID=WWD_ID and WLD_DRS_ID=".$_SESSION['well_details']['devID']); + $showID = count($waterDrainage)-1; + ?> + <div class="head_tag"><?php echo $lab_Tag_site301_012 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site807_015; ?></TD> + <TD CLASS="desc_value"><?php echo $waterDrainage[$showID]['WWD_NAME']; ?></TD> + <?php + if (!empty($_SESSION['site301_edit'])) echo"<TD CLASS='desc_value' style='width: 17px;' class='field_right'><a href='./?pg=site301tree&param=".$_SESSION['well_details']['devID'].",".$waterDrainage[$showID]['WWD_ID']."' title='Edytuj'><img src='./images/edit.png'></a></TD>"; + ?> + </TR> + </table> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site301_004 ;?></div> + <div class="tag_center"> + <img SRC="<?php echo $imgSPM; ?>" > + </div> + + + <div class=tag_ChemicalButtons> + <a href='./?pg=site401ahis&site=site301inf'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia agregatów'></A> + &nbsp;&nbsp;&nbsp; + <a href='./?pg=site310&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Karta otworu'></A> + <br/><br/> + <a href='./?pg=site401mark&dev=<?php echo $_GET['dev'];?>&direct=site301inf'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_SubMenu_401;?>'></A> + &nbsp;&nbsp;&nbsp; + <img style="width: 200px; height: 0px;" alt="" src=""> + + </div> + +</div> + + + +<div class="tag100"> + <div class="tag_buttons"> + <a href="?pg=site301"><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_BackToList ; ?>"></A> + <?php + if (!empty($_SESSION['site301_edit'])) + { + //przycisk - przenieś jako piezometr + if (strlen($_SESSION['well_details']['pumpName'])==0 && strlen($_SESSION['well_details']['engName'])==0) + echo"<a href='./?pg=site301&stu2piezo=".$_GET['dev'].",".md5($_GET['dev']).",stu2piezo' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz przekształcić studnię w piezometr?');".chr(34)."><INPUT class='btn btn-default btn-sm' style='background-color: #B8860B; color: #ffffff;' TYPE='BUTTON' VALUE='$lab_ButtonName_Operate2Piezo'></A> "; + + //zdjęcie/powrót do exploatacji + if ($_SESSION['well_details']['statusID']==3) + echo"<a href=?pg=site301EXO&dev=".$_SESSION['well_details']['devID']."&reb=OK onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz zdjąć studnie z eksploatacji?');".chr(34)."><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_OperateOut'></A> "; + elseif ($_SESSION['well_details']['statusID']==4) + { + echo"<a href='?pg=site301&dev=".$_SESSION['well_details']['devID']."&param=".md5($_SESSION['well_details']['devID']).",".$_SESSION['well_details']['devID'].",del' onclick=".chr(34)."return confirm('Uwaga! Usunięcie spowoduje całkowite skasowanie danych studni oraz powiązane dane historyczne – proces nieodwracalny! Jesteś pewien, że chcesz usunąć?');" . chr(34) . "><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Delete'></A> "; + echo"<a href='?pg=site301&dev=".$_SESSION['well_details']['devID']."&param=".md5($_SESSION['well_details']['devID']).",".$_SESSION['well_details']['devID'].",oin' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz wprowadzić studnię do eksploatacji?');".chr(34)."><INPUT class='btn btn-primary btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_OperateIn'></A> "; + } + + + + if ($_SESSION['well_details']['pumpID']>0) + { + echo"<a href=?pg=site301RBS&dev=".$_SESSION['well_details']['devID']."&sink=OK onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz oznaczyć agregat jako zatopiony?');".chr(34)."><INPUT class='btn btn-danger btn-sm' style='background-color: #FF69B4; color: #ffffff;' TYPE='BUTTON' VALUE='Oznacz jako zatopiony'></A> "; + echo"<a href=?pg=site301RBO&dev=".$_SESSION['well_details']['devID']."&reb=OK onclick=".chr(34)."return confirm('Czy jesteś pewien, że chcesz wybudować agregat ze studni?');".chr(34)."><INPUT class='btn btn-warning btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_BuildOut'></A> "; + } + + else + echo"<a href=?pg=site301RBI&dev=".$_SESSION['well_details']['devID']."&reb=OK><INPUT class='btn btn-warning btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_BuildIn'></A> "; + echo "<a href=?pg=site301E&dev=" . $_SESSION['well_details']['devID'] . "><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A>"; + } + ?> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301infAkb.php b/sites/site301infAkb.php new file mode 100644 index 0000000..274391c --- /dev/null +++ b/sites/site301infAkb.php @@ -0,0 +1,55 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site306_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site306_005 ;?></TD> + + </TR> + <?php + $cableArray = sqlGetResAsArray("select SES_EQU_ID,EQU_NAME,MCF_NAME,sum(SES_VALUE) ILE,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) USED from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_TYPE=13 and SES_PARAM3='".$_SESSION['syndis_eq_stock']."' group by SES_EQU_ID"); + + for ($i=0; $i<count($cableArray); $i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site301infAkbm&dev=".$_GET['dev']."&up=".$cableArray[$i]['SES_EQU_ID']."'".chr(34)."> + <TD class='field_center'>".$cableArray[$i]['EQU_NAME']."</TD> + <TD class='field_center'>".$cableArray[$i]['MCF_NAME']."</TD> + <TD class='field_right'>".(int) ($cableArray[$i]['ILE'] - $cableArray[$i]['USED'])."</TD> + </TR> + "; + } + unset($cableArray); + + + + + + + + + ?> + </table> + </div> + + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site301inf&dev=<?php echo $_GET['dev']; ?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + </div> + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301infAkbm.php b/sites/site301infAkbm.php new file mode 100644 index 0000000..e6a039e --- /dev/null +++ b/sites/site301infAkbm.php @@ -0,0 +1,44 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<?php +$tpmArray = sqlGetResAsArray("select EQU_NAME,sum(SES_VALUE) TOT_VAL,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) TOT_STOCK from seg_equipments_stock,seg_equipments where SES_EQU_ID=EQU_ID and SES_EQU_ID=".$_GET['up']); + +?> + + +<div class="tag100"> + <FORM ACTION="./?pg=site301inf&dev=<?php echo $_GET['dev'];?>" METHOD="POST"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + <input type="hidden" name="up" value="<?php echo $_GET['up']; ?>"> + <input type="hidden" id="inAvValue" value="<?php echo round($tpmArray[0]['TOT_VAL']-$tpmArray[0]['TOT_STOCK'],2); ?>"> + + <div class="head_tag">Długość kabla</div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc">Długość [m]</td> + <td class="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inKabValue" id="inRuValue"> + &nbsp;&nbsp;&nbsp; + Dostępne <?php echo round($tpmArray[0]['TOT_VAL']-$tpmArray[0]['TOT_STOCK'],2);?> + + </td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site301inf&dev=<?php echo $_GET['dev'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subKableSave' VALUE="<?php echo $lab_ButtonName_Save; ?>" id="subRuSave"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301infApom.php b/sites/site301infApom.php new file mode 100644 index 0000000..fc24336 --- /dev/null +++ b/sites/site301infApom.php @@ -0,0 +1,55 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site308_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_005 ;?></TD> + + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_004 ;?></TD> + + </TR> + + <?php + $wynik = mysql_query("select EQU_ID,EQU_NAME,MCF_NAME,DRS_SN_NUMBER,DRS_BUY_DATE,DRS_RESOURCES_DIC_ID,DRS_ID,SDE_DRS_DEV_ID from seg_dev_resources left join seg_equipments on DRS_DEV_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID left join seg_dev_equipments_rel on SDE_DRS_EQU_ID=DRS_ID where DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='EQUIPMENTS') and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_DEV_ID is null order by EQU_NAME,DRS_AVAILABLE_DATE"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["DRS_BUY_DATE"]; + $sql_4 = $r["MCF_NAME"]; + $sql_5 = $r["DRS_RESOURCES_DIC_ID"];$sql_5=setDicName($sql_5); + $sql_6 = $r["DRS_SN_NUMBER"]; + $sql_DRSid = $r["DRS_ID"]; + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site301inf&dev=".$_GET['dev']."&up=$sql_DRSid&acc=add'".chr(34)."> + <TD class='field_left'>$sql_2</TD> + <TD class='field_left'>$sql_4</TD> + <TD class='field_left'>$sql_6</TD> + <TD class='field_center'>$sql_3</TD> + <TD class='field_center'>$sql_5</TD> + </TR> + "; + } + ?> + </table> + </div> + + <div class="tag_buttons"> + <a href='?pg=site301inf&dev=<?php echo $_GET['dev']; ?>'><INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Cancel; ?>'></A> + </div> + + +</div> +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301infAru.php b/sites/site301infAru.php new file mode 100644 index 0000000..81692b2 --- /dev/null +++ b/sites/site301infAru.php @@ -0,0 +1,55 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site306_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site306_001 ;?></TD> + + + </TR> + + <?php +// $wynik = mysql_query("select SES_ID,SES_EQU_ID,EQU_NAME,MCF_NAME,SES_STOCK,SES_PARAM1,EQU_PARAM_01,EQU_PARAM_02 from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_STOCK>0 and (SES_PARAM3 like '%".$_SESSION['eq_stock_param3_1']."%' or SES_PARAM3 like '%".$_SESSION['eq_stock_param3_2']."%' or SES_PARAM3 like '%".$_SESSION['eq_stock_param3_3']."%') and SES_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='ARMATURE')"); + //$wynik = mysql_query("select SES_ID,SES_EQU_ID,EQU_NAME,EQU_PARAM_01,EQU_PARAM_02,MCF_NAME,sum(SES_VALUE) TOT_VAL,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) TOT_STOCK from seg_equipments_stock,seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_EQU_ID=EQU_ID and SES_PARAM3='".$_SESSION['syndis_eq_stock']."' and SES_TYPE=15 GROUP BY SES_EQU_ID order by EQU_NAME"); + unset($tmp307Array); + $tmp307Array = sqlGetResAsArray("select SES_EQU_ID,EQU_NAME,EQU_PARAM_01,EQU_PARAM_02,MCF_NAME,sum(SES_VALUE) TOT_VAL,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) TOT_STOCK from seg_equipments_stock,seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_EQU_ID=EQU_ID and SES_PARAM3='".$_SESSION['syndis_eq_stock']."' and SES_TYPE=15 GROUP BY SES_EQU_ID order by EQU_NAME"); + + for ($i=0; $i<count($tmp307Array); $i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site301infArum&param=".$_GET['dev'].",".$tmp307Array[$i]['SES_EQU_ID']."'".chr(34)."> + <TD class='field_left'>".$tmp307Array[$i]['EQU_NAME']."$sql_2</TD> + <TD class='field_center'".$tmp307Array[$i]['EQU_PARAM_01'].">$sql_6</TD> + <TD class='field_center'>".$tmp307Array[$i]['EQU_PARAM_02']."$sql_7</TD> + <TD class='field_left'>".$tmp307Array[$i]['MCF_NAME']."$sql_3</TD> + <TD class='field_center'>".round($tmp307Array[$i]['TOT_VAL'] - $tmp307Array[$i]['TOT_STOCK'],2)."$sql_4</TD> + </TR>"; + } + + ?> + </table> + </div> + + + <div class="tag_buttons"> + <a href='?pg=site301inf&dev=<?php echo $_GET['dev']; ?>'><INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Cancel; ?>'></A> + </div> + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site301infArum.php b/sites/site301infArum.php new file mode 100644 index 0000000..aa6e355 --- /dev/null +++ b/sites/site301infArum.php @@ -0,0 +1,52 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + + <?php + if(!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $_GET['dev'] = $paramArray[0]; + $_GET['eq'] = $paramArray[1]; +// $tpmArray = sqlGetResAsArray("select SES_STOCK,DIC_POL_LANG from seg_equipments_stock left join sys_dictionaries on DIC_ID=SES_PARAM2 where SES_ID=".$recID); + $tpmArray = sqlGetResAsArray("select EQU_NAME,sum(SES_VALUE) TOT_VAL,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) TOT_STOCK from seg_equipments_stock,seg_equipments where SES_EQU_ID=EQU_ID and SES_EQU_ID=".$_GET['eq']); + unset($paramArray); + } + + + ?> + + +<div class="tag100"> + <FORM ACTION="./?pg=site301inf&dev=<?php echo $_GET['dev'];?>" METHOD="POST" name="insert_count"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + <input type="hidden" name="eq" value="<?php echo $_GET['eq']; ?>"> + <input type="hidden" id="inAvValue" value="<?php echo round($tpmArray[0]['TOT_VAL']-$tpmArray[0]['TOT_STOCK'],2); ?>"> + + <div class="head_tag">Ilość sztuk [<?php echo $tpmArray[0]['EQU_NAME'];?>]</div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc">Ilość</td> + <td class="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inRuValue" id="inRuValue"> + &nbsp;&nbsp;&nbsp; + Dostępne <?php echo round($tpmArray[0]['TOT_VAL']-$tpmArray[0]['TOT_STOCK'],2);?> + + </td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <INPUT class='btn btn-info btn-sm' TYPE='SUBMIT' NAME='subRuCancel' VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subRuSave' VALUE="<?php echo $lab_ButtonName_Save; ?>" id="subRuSave" > + </div> + </FORM> +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site301tree.php b/sites/site301tree.php new file mode 100644 index 0000000..a2cf160 --- /dev/null +++ b/sites/site301tree.php @@ -0,0 +1,242 @@ +<?php +if (!empty($_SESSION['site301_edit'])) +{ +?> + + + <?php + // pobiera parametry z url + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $getDevID = $paramArray[0]; + $getRecID = $paramArray[1]; + unset($paramArray); + if ($getRecID>0) $tbArray = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_ID=".$getRecID); + } + ?> + + +<style> + + .tree, + .tree ul { + margin:0 0 0 1em; /* indentation */ + padding:0; + list-style:none; + color:#369; + position:relative; + } + + .tree ul {margin-left:.5em} /* (indentation/2) */ + + .tree:before, + .tree ul:before { + content:""; + display:block; + width:0; + position:absolute; + top:0; + bottom:0; + left:0; + border-left:1px solid; + } + + .tree li { + margin:0; + padding:0 1.5em; /* indentation + .5em */ + line-height:2em; /* default list item's `line-height` */ + font-weight:bold; + position:relative; + } + + .tree li:before { + content:""; + display:block; + width:10px; /* same with indentation */ + height:0; + border-top:1px solid; + margin-top:-1px; /* border top width */ + position:absolute; + top:1em; /* (line-height/2) */ + left:0; + } + + .tree li:last-child:before { + background:white; /* same with body background */ + height:auto; + top:1em; /* (line-height/2) */ + bottom:0; + + } +</style> + + +<div class="tag100"> + <FORM ACTION="?pg=site301inf&dev=<?php echo $getDevID; ?>" METHOD="POST"> + <div class="head_tag"><?php echo $lab_Tag_site301_012 ;?></div> + <div class="tag"> + <br/> + + <?php + $treeLevel_01 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID is null order by WWD_NAME"); + ?> + + <p style="font-weight: bold;"><?php echo $lab_Field_site807_014; ?></p> + <ul class="tree"> + <?php + for ($i=0; $i<count($treeLevel_01); $i++) + { + echo"<li>"; + + echo "<input type='radio' name='inCheck' value='".$treeLevel_01[$i]['WWD_ID']."'"; if ($treeLevel_01[$i]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$treeLevel_01[$i]['WWD_NAME']; + + //1 + // ========================================================================================================================================================= + unset($tb); $tb = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$treeLevel_01[$i]['WWD_ID']." order by WWD_NAME"); + if (count($tb)>0) + { + echo "<ul>"; + for($j=0; $j<count($tb); $j++) + { + echo"<li>"; + echo "<input type='radio' name='inCheck' value='".$tb[$j]['WWD_ID']."'"; if ($tb[$j]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$tb[$j]['WWD_NAME']; + + //2 + // ========================================================================================================================================================= + unset($tb2); $tb2 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb[$j]['WWD_ID']." order by WWD_NAME"); + if (count($tb2)>0) + { + echo "<ul>"; + for($j2=0; $j2<count($tb2); $j2++) + { + echo"<li>"; + echo "<input type='radio' name='inCheck' value='".$tb2[$j2]['WWD_ID']."'"; if ($tb2[$j2]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$tb2[$j2]['WWD_NAME']; + + //3 + // ========================================================================================================================================================= + unset($tb3); $tb3 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb2[$j2]['WWD_ID']." order by WWD_NAME"); + if (count($tb3)>0) + { + echo "<ul>"; + for($j3=0; $j3<count($tb3); $j3++) + { + echo"<li>"; + echo "<input type='radio' name='inCheck' value='".$tb3[$j3]['WWD_ID']."'"; if ($tb3[$j3]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$tb3[$j3]['WWD_NAME']; + + //4 + // ========================================================================================================================================================= + unset($tb4); $tb4 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb3[$j3]['WWD_ID']." order by WWD_NAME"); + if (count($tb4)>0) + { + echo "<ul>"; + for($j4=0; $j4<count($tb4); $j4++) + { + echo"<li>"; + echo "<input type='radio' name='inCheck' value='".$tb4[$j4]['WWD_ID']."'"; if ($tb4[$j4]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$tb4[$j4]['WWD_NAME']; + + //5 + // ========================================================================================================================================================= + unset($tb5); $tb5 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb4[$j4]['WWD_ID']." order by WWD_NAME"); + if (count($tb5)>0) + { + echo "<ul>"; + for($j5=0; $j5<count($tb5); $j5++) + { + echo"<li>"; + echo "<input type='radio' name='inCheck' value='".$tb5[$j5]['WWD_ID']."'"; if ($tb5[$j5]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$tb5[$j5]['WWD_NAME']; + + //6 + // ========================================================================================================================================================= + unset($tb6); $tb6 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb5[$j5]['WWD_ID']." order by WWD_NAME"); + if (count($tb6)>0) + { + echo "<ul>"; + for($j6=0; $j6<count($tb6); $j6++) + { + echo"<li>"; + echo "<input type='radio' name='inCheck' value='".$tb6[$j6]['WWD_ID']."'"; if ($tb6[$j6]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$tb6[$j6]['WWD_NAME']; + + //7 + // ========================================================================================================================================================= + unset($tb7); $tb7 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb6[$j6]['WWD_ID']." order by WWD_NAME"); + if (count($tb7)>0) + { + echo "<ul>"; + for($j7=0; $j7<count($tb7); $j7++) + { + echo"<li>"; + echo "<input type='radio' name='inCheck' value='".$tb7[$j7]['WWD_ID']."'"; if ($tb7[$j7]['WWD_ID']==$getRecID) echo "checked"; echo">&nbsp;".$tb7[$j7]['WWD_NAME']; + echo"</li>"; + } + echo"</ul>"; + } + // ========================================================================================================================================================= + echo"</li>"; + } + echo"</ul>"; + } + // ========================================================================================================================================================= + echo"</li>"; + } + echo"</ul>"; + } + // ========================================================================================================================================================= + echo"</li>"; + } + echo"</ul>"; + } + // ========================================================================================================================================================= + echo"</li>"; + } + echo"</ul>"; + } + // ========================================================================================================================================================= + echo"</li>"; + } + echo"</ul>"; + } + // ========================================================================================================================================================= + echo"</li>"; + } + echo"</ul>"; + } + // ========================================================================================================================================================= + + echo"</li>"; + + } + + ?> + </ul> + + + + + + + + + + + + + + + + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site301inf&dev=<?php echo $getDevID;?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subSite301tree" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> + +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site302.php b/sites/site302.php new file mode 100644 index 0000000..4ec4b76 --- /dev/null +++ b/sites/site302.php @@ -0,0 +1,210 @@ +<?php +if (!empty($_SESSION['site302'])) +{ +?> + <?php + + if (!empty($_GET['dev'])) $_GET['dev'] = $_POST['dev']; + + // Dodawanie nowego zbiornika + if (!empty($_POST['inRePieName']) && $_POST['subRePieSave']==$lab_ButtonName_Save ) + { + + mysql_query("INSERT INTO seg_reservoirs_piezometers SET SRP_MCF_ID=".$_POST['inRePieNManufID'].",SRP_NAME='".$_POST['inRePieName']."',SRP_TYPE_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR'),SRP_LATITUDE='".$_POST['inRePieLat']."',SRP_LONGITUDE='".$_POST['inRePieLong']."',SRP_PHONE_NO='".$telok."',SRP_SCOP_GS='".str_replace(',', '.', $_POST['inGS'])."',SRP_SCOP_GZ='".str_replace(',', '.', $_POST['inGZ'])."'"); + $maxSRPid = sqlValue("select max(SRP_ID) from seg_reservoirs_piezometers"); + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=$maxSRPid,DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR'),DRS_SN_NUMBER='".$_POST['inRePieSN']."',DRS_BUY_DATE='".$_POST['inRePieBuyDate']."',DRS_STATUS_DIC_ID=".$_POST['inRePieStatus'].",DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + + //poziomy wody - położenie + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".str_replace(",",".",$_POST['inRePieMaxAcc'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_ACCEPTABLE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".str_replace(",",".",$_POST['inRePieMaxWar'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_WARNING'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".str_replace(",",".",$_POST['inRePieMinWar'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_WARNING'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".str_replace(",",".",$_POST['inRePieMinAcc'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_ACCEPTABLE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // środek trwały + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".$_POST['inRePieAsset']."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // wysokość zbiornika + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".str_replace(",",".",$_POST['inRePieHeight'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='HEIGHT'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // głębokość zabudowy + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".str_replace(",",".",$_POST['inGZ'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='PROBE_DEPTH_INSTALLATION'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // dodaje wartość początkową lustra wody dla zbiornika - PUSTY ZERO + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".str_replace(",",".",$_POST['inRePieMinWar'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_PARAMETERS' and DIC_NAME='WATER_LEVEL'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // dodaje wartość początkową zasilania - NIEPODŁĄCZONY ZERO + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='0',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_PARAMETERS' and DIC_NAME='VOLTAGE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // wpisywanie do bazy - nowych parametrów dla zbiornika + setReservoirParameters($maxDRSid); + + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site302_input'] = $_POST['sr_well']; + ?> + + <form action="./?pg=site302" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Zbiornik:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site302_input'];?>"></td> + <td style="width: 10px;"></td> + <td>status:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='DEV_STATUS'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszystkie</option>"; + else + echo"<option value='100'>Wszystkie</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_Field_site203_022; + ?> + </td> + </tr> + </table> + </div> + </form> + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site302_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_004 ;?></TD> + + </TR> + + <?php + if (empty($_SESSION['site302_array']) || $_POST['sub_search']=='Szukaj') + { + if (!empty($_POST['sr_well'])) + { + $query="select SRP_ID,SRP_NAME,DRS_BUY_DATE,DRS_STATUS_DIC_ID, MCF_NAME,DRS_ID from seg_dev_resources,seg_reservoirs_piezometers left join seg_manufacturers on SRP_MCF_ID=MCF_ID where DRS_DEV_TYPE=600 and DRS_DEV_ID=SRP_ID and SRP_NAME like '%".$_POST['sr_well']."%'"; + if($_POST['sr_status']!=100) $query.=" and DRS_STATUS_DIC_ID=".$_POST['sr_status']; + $query .= " order by SRP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 50"; + } + else + { + $query="select SRP_ID,SRP_NAME,DRS_BUY_DATE,DRS_STATUS_DIC_ID, MCF_NAME,DRS_ID from seg_dev_resources,seg_reservoirs_piezometers left join seg_manufacturers on SRP_MCF_ID=MCF_ID where DRS_DEV_TYPE=600 and DRS_DEV_ID=SRP_ID"; + if($_POST['sr_status']!=100) $query.=" and DRS_STATUS_DIC_ID=".$_POST['sr_status']; + $query .= " order by SRP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 50"; + } + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'devID' => $r["DRS_ID"], + 'resID' => $r["SRP_ID"], + 'resName'=> $r["SRP_NAME"], + 'mcfName' => $r["MCF_NAME"], + 'buyDate' => $r["DRS_BUY_DATE"], + 'avaDate' => $r["DRS_AVAILABLE_DATE"], + 'stat' => setDicName($r["DRS_STATUS_DIC_ID"]), + 'res' => setDicName($r["DRS_RESOURCES_DIC_ID"]) + ); + } + unset($_SESSION['site302_array']); + $_SESSION['site302_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site302_array'])) $stop=count($_SESSION['site302_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site302inf&dev=".$_SESSION['site302_array'][$i]['devID']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site302_array'][$i]['resName']."</TD> + <TD class='field_center'>".$_SESSION['site302_array'][$i]['mcfName']."</TD> + <TD class='field_center'>".$_SESSION['site302_array'][$i]['buyDate']."</TD> + <TD class='field_center'>".$_SESSION['site302_array'][$i]['stat']."</TD> + </TR> + "; + } + ?> + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume"><?php echo $lab_NumberResults_001.": ".count($_SESSION['site302_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site302_array'])>20) + echo pagination_grid('?pg=site302', $_GET['pgn'], count($_SESSION['site302_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site302_xls.php" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site302_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + </div> + + + <?php + if (!empty($_SESSION['site302_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site302A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site302A.php b/sites/site302A.php new file mode 100644 index 0000000..d3e45a4 --- /dev/null +++ b/sites/site302A.php @@ -0,0 +1,113 @@ +<?php +if (!empty($_SESSION['site302_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + +<div class="tag100"> +<FORM ACTION="?pg=site302" METHOD="POST" id="AddNewRePie" class="form_valid"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site302_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + + echo" + + <TR> + <TD class=desc> $lab_Tag_site302_004 </TD> + <TD CLASS=desc_value> <INPUT class='text50_req' TYPE='TEXT' NAME='inRePieName'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site206_002 </TD> + <TD CLASS=desc_value>"; selectManufacturersName('inRePieNManufID'); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_001 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieSN'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieAsset'> </TD> + </TR> + + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='HEIGHT'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieHeight'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_ACCEPTABLE'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMaxAcc'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_WARNING'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMaxWar'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_WARNING'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMinWar'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_ACCEPTABLE'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMinAcc'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_008 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inRePieStatus', 'DEV_STATUS'); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_002 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inRePieBuyDate' value='".date('Y-m-d')."' SIZE='10'></TD> + </TR> + + <TR><TD class=desc colspan='2'></TD></TR> + + + <TR> + <TD class=desc> $lab_Field_site301_008 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLat'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_009 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLong'> </TD> + </TR> + <TR><TD class=desc colspan='2'></TD></TR> + + <TR> + <TD class=desc> Numer telefonu sterownika </TD> + <TD CLASS=desc_value> <INPUT class='text' TYPE='TEXT' NAME='inPhoneNo'> </TD> + </TR> + + <TR> + <TD class=desc> Zakres sondy [m] </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inGS'> </TD> + </TR> + <TR> + <TD class=desc> Głębokość zabudowy sondy [m] </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inGZ'> </TD> + </TR> + + + "; + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site302'"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subRePieSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site302E.php b/sites/site302E.php new file mode 100644 index 0000000..cd6c0e3 --- /dev/null +++ b/sites/site302E.php @@ -0,0 +1,141 @@ +<?php +if (!empty($_SESSION['site302_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + + <?php + + $wynik = mysql_query("select SRP_ID,SRP_NAME,SRP_MCF_ID,DRS_SN_NUMBER,DRS_BUY_DATE,DRS_STATUS_DIC_ID,SRP_LATITUDE,SRP_LONGITUDE,SRP_PHONE_NO,SRP_SCOP_GS,SRP_SCOP_GZ from seg_reservoirs_piezometers left join seg_dev_resources on SRP_ID=DRS_DEV_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["SRP_NAME"]; + $sql_2 = $r["SRP_MCF_ID"]; + $sql_3 = $r["DRS_SN_NUMBER"]; + $sql_4 = $r["DRS_BUY_DATE"]; + $sql_5 = $r["DRS_STATUS_DIC_ID"]; + $sql_6 = $r["SRP_LATITUDE"]; + $sql_7 = $r["SRP_LONGITUDE"]; + $sql_8 = $r["SRP_PHONE_NO"]; + $sql_9 = $r["SRP_SCOP_GS"]; + $sql_10 = $r["SRP_SCOP_GZ"]; + + $sql_SRPid = $r["SRP_ID"]; + + } + + ?> + + + +<div class="tag100"> +<FORM ACTION="?pg=site302inf&dev=<?php echo $_GET['dev']; ?>" METHOD="POST" id="AddNewRePie" class="form_valid"> + <input type="hidden" name="sprid" value="<?php echo $sql_SRPid; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site302_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + + echo" + + <TR> + <TD class=desc> $lab_Tag_site302_004 </TD> + <TD CLASS=desc_value> <INPUT class='text50_req' TYPE='TEXT' NAME='inRePieName' value='$sql_1'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site206_002 </TD> + <TD CLASS=desc_value>"; selectManufacturersName('inRePieNManufID',$sql_2); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_001 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieSN' value='$sql_3'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieAsset' value='".str_replace('.',',',getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','ASSET',$_GET['dev']))."'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='HEIGHT'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieHeight' value='".str_replace('.',',',getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','HEIGHT',$_GET['dev']))."'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_ACCEPTABLE'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMaxAcc' value='".str_replace('.',',',getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_ACCEPTABLE',$_GET['dev']))."'> </TD> + </TR> + + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_WARNING'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMaxWar' value='".str_replace('.',',',getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_WARNING',$_GET['dev']))."'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_WARNING'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMinWar' value='".str_replace('.',',',getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_WARNING',$_GET['dev']))."'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_ACCEPTABLE'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieMinAcc' value='".str_replace('.',',',getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_ACCEPTABLE',$_GET['dev']))."'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_008 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inRePieStatus', 'DEV_STATUS',$sql_5); echo"</TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site303_002 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inRePieBuyDate' SIZE='10' value='".$sql_4."'></TD> + </TR> + + <TR><TD class=desc colspan='2'></TD></TR> + + <TR> + <TD class=desc> $lab_Field_site301_008 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLat' value='$sql_6'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_009 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLong' value='$sql_7'> </TD> + </TR> + + <TR><TD class=desc colspan='2'></TD></TR> + + <TR> + <TD class=desc> Numer telefonu sterownika </TD> + <TD CLASS=desc_value> <INPUT class='text' TYPE='TEXT' NAME='inPhoneNo' value='$sql_8'> </TD> + </TR> + + <TR> + <TD class=desc> Zakres sondy [m] </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inGS' value='$sql_9'> </TD> + </TR> + <TR> + <TD class=desc> Głębokość zabudowy sondy [m] </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inGZ' value='$sql_10'> </TD> + </TR> + + + + "; + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class="btn btn-info btn-sm" TYPE="SUBMIT" NAME="subRePieCancel" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subRePieUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site302inf.php b/sites/site302inf.php new file mode 100644 index 0000000..579ad1a --- /dev/null +++ b/sites/site302inf.php @@ -0,0 +1,180 @@ +<?php +if (!empty($_SESSION['site302'])) +{ +?> + + + + + +<?php + // Aktualizacja zbiornika + if (!empty($_POST['inRePieName']) && $_POST['subRePieUpdate']==$lab_ButtonName_Update ) + { + $telok=str_replace('-', '', $_POST['inPhoneNo']); + $telok=str_replace(' ', '', $telok); + + mysql_query("update seg_reservoirs_piezometers SET SRP_MCF_ID=".$_POST['inRePieNManufID'].",SRP_NAME='".$_POST['inRePieName']."',SRP_TYPE_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='RESERVOIR'),SRP_LATITUDE='".$_POST['inRePieLat']."',SRP_LONGITUDE='".$_POST['inRePieLong']."',SRP_PHONE_NO='".$telok."',SRP_SCOP_GS='".str_replace(',', '.', $_POST['inGS'])."',SRP_SCOP_GZ='".str_replace(',', '.', $_POST['inGZ'])."' where SRP_ID=".$_POST['sprid']); + mysql_query("update seg_dev_resources SET DRS_SN_NUMBER='".$_POST['inRePieSN']."',DRS_BUY_DATE='".$_POST['inRePieBuyDate']."',DRS_STATUS_DIC_ID=".$_POST['inRePieStatus'].",DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + + //poziomy wody - położenie + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieMaxAcc'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_ACCEPTABLE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieMaxWar'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_WARNING'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieMinWar'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_WARNING'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieMinAcc'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_ACCEPTABLE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // środek trwały + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_VALUE='".$_POST['inRePieAsset']."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // głębokość + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieHeight'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='HEIGHT'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // głębokość zabudowy sondy + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inGZ'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='PROBE_DEPTH_INSTALLATION'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // wpisywanie do bazy - nowych parametrów dla zbiornika + setReservoirParameters($_GET['dev']); + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } +?> + +<?php + +$wynik = mysql_query("select DRS_ID,SRP_NAME,MCF_NAME,DRS_SN_NUMBER,DRS_BUY_DATE,SRP_ID,SRP_LATITUDE,SRP_LONGITUDE from seg_dev_resources left join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID left join seg_manufacturers on SRP_MCF_ID=MCF_ID where DRS_ID=".$_GET['dev']); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $var_DRSid = $r["DRS_ID"]; + $var_01 = $r["SRP_NAME"]; + $var_02 = $r["MCF_NAME"]; + $var_03 = $r["DRS_SN_NUMBER"]; + $var_04 = $r["DRS_BUY_DATE"]; + $var_05 = $r["SRP_LATITUDE"]; + $var_06 = $r["SRP_LONGITUDE"]; + $var_SRPid = $r["SRP_ID"]; +} + +//sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_DRS_ID=$var_DRSid and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET') and DRD_DRS_ID=$var_DRSid)", "DRD_VALUE") + + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site302_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Tag_site302_004; ?></TD> + <TD CLASS="desc_value"><?php echo $var_01; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php echo $var_02; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site303_001; ?></TD> + <TD CLASS="desc_value"><?php echo $var_03; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','ASSET',$var_DRSid); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='HEIGHT'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(".",",",getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','HEIGHT',$var_DRSid)); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_ACCEPTABLE'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(".",",",getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_ACCEPTABLE',$var_DRSid)); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_WARNING'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(".",",",getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MAX_WARNING',$var_DRSid)); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_WARNING'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(".",",",getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_WARNING',$var_DRSid)); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_ACCEPTABLE'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(".",",",getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_WATER_LEVEL','MIN_ACCEPTABLE',$var_DRSid)); ?></TD> + </TR> + + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site302_003; ?></TD> + <TD CLASS="desc_value"><?php echo $var_04; ?></TD> + </TR> + + + </table> + </div> + + + + <div class="head_tag"><?php echo $lab_Tag_site301_007 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_008; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select SRP_LATITUDE from seg_reservoirs_piezometers where SRP_ID=$var_SRPid", "SRP_LATITUDE"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_009; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select SRP_LONGITUDE from seg_reservoirs_piezometers where SRP_ID=$var_SRPid", "SRP_LONGITUDE"); ?></TD> + </TR> + </table> + </div> + + + + <div class="head_tag">Parametry konfiguracyjne oraz zakresy pomiarowe</div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param">Numer telefonu sterownika</TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select SRP_PHONE_NO from seg_reservoirs_piezometers where SRP_ID=$var_SRPid", "SRP_PHONE_NO"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param">Zakres sondy [m]</TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select SRP_SCOP_GS from seg_reservoirs_piezometers where SRP_ID=$var_SRPid", "SRP_SCOP_GS"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param">Głębokość zabudowy sondy[m]</TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select SRP_SCOP_GZ from seg_reservoirs_piezometers where SRP_ID=$var_SRPid", "SRP_SCOP_GZ"); ?></TD> + </TR> + </table> + </div> + + + +</div> + + <?php + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_302inf_01.png"; + generateReservoir($_GET['dev'], $fileName1); + + ?> + + +<div class="tag50_right"> + <div class="head_tag"><?php echo $var_01 ;?></div> + <div class="tag_center"> + <img SRC="<?php echo $fileName1; ?>" > + </div> + + +</div> + + + <?php if (!empty($_SESSION['site302_edit'])) { ?> + <div class="tag100"> + <div class="tag_buttons"> + <?php echo "<a href=?pg=site302>"; ?><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + <?php echo "<a href=?pg=site302E&dev=".$_GET['dev'].">"; ?><INPUT class="btn btn-success btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Modify; ?>"></A> + </div> + </div> + <?php } ?> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site303.php b/sites/site303.php new file mode 100644 index 0000000..2c1ac68 --- /dev/null +++ b/sites/site303.php @@ -0,0 +1,265 @@ +<?php +if (!empty($_SESSION['site303'])) +{ +?> + + + +<?php + // dodawanie pomy na stan + if ($_POST['inPumpID']>0 && $_POST['subPumpSave']==$lab_ButtonName_Save) + { + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=".$_POST['inPumpID']." and DRS_SN_NUMBER='".$_POST['inPumpSN']."'")==0) + { + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=".$_POST['inPumpID'].",DRS_DEV_TYPE=10,DRS_SN_NUMBER='".$_POST['inPumpSN']."',DRS_BUY_DATE='".$_POST['inPumpBuyDate']."',DRS_AVAILABLE_DATE='".$_POST['inPumpAvDate']."',DRS_STATUS_DIC_ID=".$_POST['inPumpStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inPumpDevRes'].",DRS_DEV_ATTENTION='".$_POST['inPumpAtt']."',DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inPumpEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxDRSid); + delSearchSessionData(); + } + else + { + echo"<div class='actionERROR'>$lab_SaveRecordNotification_004</div>"; + delSearchSessionData(); + } + } + + //usuwanie + // ================================================================================== + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_PUP_DRS_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_dev_resources WHERE DRS_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } + } + // ================================================================================== + + +?> + + + +<?php + + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site203_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site303&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Typ pompy:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site203_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_HistoricalData_007; + ?> + </td> + </tr> + </table> + </div> + </form> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site303_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label">Nowe</TD> + <TD class="label">Rezerwa</TD> + <TD class="label">Remont</TD> + <TD class="label">Eksploatacja SPM</TD> + <TD class="label">Bestgum</TD> + <TD class="label">Kasacja [w likwidacji]</TD> + <TD class="label">Kasacja [zatopione]</TD> + <TD class="label">Razem</TD> + + + </TR> + + <?php + + if (empty($_SESSION['site303_array']) || $_POST['sub_search']=='Szukaj') + { + unset($_SESSION['site303_array']); + if (empty($_POST['sr_all'])) $subQuery .= " limit 100"; + + //$listArray = sqlGetResAsArray("select PUP_ID,count(PUP_ID) ILOSC,PUP_NAME from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_NAME like '%".$_POST['sr_well']."%' and PUP_ID>0 and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40) and DRS_DEV_ATTENTION in ('1401','1524')) group by PUP_ID,PUP_NAME order by PUP_NAME,PUP_Q_N".$subQuery); + $listArray = sqlGetResAsArray("select * from seg_pumps,seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and PUP_NAME like '%".$_POST['sr_well']."%' and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION in ('1401','1524'))) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by PUP_ID order by PUP_NAME,PUP_Q_N"); + + for ($i=0; $i<count($listArray); $i++) + { + unset($suma); unset($rec1); unset($rec2); unset($rec3ALL); unset($rec3SPM); + unset($rec707); unset($rec40_LIK); unset($rec40_ZAT); unset($rec3BESTGUM); + + $suma = 0; + $rec1 = sqlValue("select count(*) CNT from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_RESOURCES_DIC_ID=1"); + $rec2 = sqlValue("select count(*) CNT from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_RESOURCES_DIC_ID=2"); + $rec3ALL = sqlValue("select count(*) CNT from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_RESOURCES_DIC_ID=3"); + $rec3SPM = sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_PUP_DRS_ID in (select DRS_ID from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_RESOURCES_DIC_ID=3)"); + $rec707 = sqlValue("select count(*) CNT from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_RESOURCES_DIC_ID=707"); + $rec40_LIK = sqlValue("select count(*) CNT from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION='1524'"); + //2018-04-08 + $rec40_ZAT = sqlValue("select count(*) CNT from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION='1401'"); + //$rec40_ZAT = sqlValue("select count(*) CNT from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and PUP_ID=".$listArray[$i]['PUP_ID']." and DRS_ID in (select RWS_PUP_DRS_ID from seg_wellsink_pump_eng_rel where RWS_PUP_DRS_ID is not null and RWS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."')"); + + + if ($rec1>0) $suma += $rec1; else $rec1=null; + if ($rec2>0) $suma += $rec2; else $rec2=null; + if ($rec3ALL>0) $suma += $rec3ALL; else $rec3ALL=null; + if ($rec707>0) $suma += $rec707; else $rec707=null; + if ($rec40_LIK>0) $suma += $rec40_LIK; else $rec40_LIK=null; + if ($rec40_ZAT>0) $suma += $rec40_ZAT; else $rec40_ZAT=null; + + if ($rec3ALL>$rec3SPM) $rec3BESTGUM = $rec3ALL-$rec3SPM; + if ($rec3SPM==0) $rec3SPM=null; + + $_SESSION['site303_array'][]=array( + 'id' => $listArray[$i]['PUP_ID'], + 'pumpName' => $listArray[$i]['PUP_NAME'], + 'pumpcount' => $suma, + 'nowe' => $rec1, + 'rezerwa' => $rec2, + 'remont' => $rec707, + 'eksp_spm' => $rec3SPM, + 'bestgum' => $rec3BESTGUM, + 'kas_lik' => $rec40_LIK, + 'kas_zatop' => $rec40_ZAT + ); + } + } + + + //print_r($_SESSION['site303_array']); + //echo"<br/><br/><br/>"; + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site303_array'])) $stop=count($_SESSION['site303_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site303list&pup=".$_SESSION['site303_array'][$i]['id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site303_array'][$i]['pumpName']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['nowe']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['rezerwa']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['remont']."</TD> + + <TD class='field_right'>".$_SESSION['site303_array'][$i]['eksp_spm']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['bestgum']."</TD> + + <TD class='field_right'>".$_SESSION['site303_array'][$i]['kas_lik']."</TD> + <TD class='field_right'>".$_SESSION['site303_array'][$i]['kas_zatop']."</TD> + + <TD class='field_right'>".$_SESSION['site303_array'][$i]['pumpcount']."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site303_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site303_array'])>20) + echo pagination_grid('?pg=site303', $_GET['pgn'], count($_SESSION['site303_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site303_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site303_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + + </div> + + <?php + if (!empty($_SESSION['site303_edit'])) + echo" + <div class=tag_buttons> + <a href='./?pg=site303A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site303A.php b/sites/site303A.php new file mode 100644 index 0000000..69d97fd --- /dev/null +++ b/sites/site303A.php @@ -0,0 +1,101 @@ +<?php +if (!empty($_SESSION['site303_edit'])) +{ +?> + + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['pup']>0) +{ + $wynik = mysql_query("select PUP_NAME,MCF_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P from seg_pumps left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_ID=".$_GET['pup']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PUP_NAME"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = round(getFullFloatValue($r["PUP_Q_N"]),3); + $sql_4 = getFullFloatValue($r["PUP_H_P"]); + } +} +?> + +<div class="tag100"> +<FORM ACTION="./?pg=site303" METHOD="POST"> + <input type="hidden" name="inPumpID" value="<?php echo $_GET['pup']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site303_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inPumpName" value="<?php echo $sql_1; ?>" readonly> <a class="tooltip_warning" HREF="?pg=site303Apump"> + <img SRC="./images/search-icon.png"><span><?php echo $lab_Field_site303_005; ?></SPAN></A> + </TD> + </TR> + <?php + if ($_GET['pup']>0) + { + echo" + <TR> + <TD class=desc> $lab_Field_site203_004 </TD> + <TD CLASS=desc_value> $sql_2 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site203_002a </TD> + <TD CLASS=desc_value> $sql_3 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site203_003 </TD> + <TD CLASS=desc_value> $sql_4 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_006 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inPumpSN'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_013 </TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inPumpEST'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_007 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inPumpBuyDate' SIZE='10'></TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_008 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inPumpDevRes', 'DEV_RESOURCES'); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_009 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inPumpAvDate' SIZE='10'></TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_011 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inPumpStat', 'DEV_STATUS'); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_010</TD> + <TD CLASS=desc_value><textarea NAME=inPumpAtt></textarea></TD> + </TR> + "; + } + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site303" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subPumpSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site303Apump.php b/sites/site303Apump.php new file mode 100644 index 0000000..bbf05ee --- /dev/null +++ b/sites/site303Apump.php @@ -0,0 +1,51 @@ +<?php +if (!empty($_SESSION['site303_edit'])) +{ +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site303_003; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002a ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select PUP_ID,MCF_NAME,PUP_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P from seg_pumps left join seg_manufacturers on PUP_MCF_ID=MCF_ID where PUP_STATUS='1' order by PUP_NAME,PUP_Q_N"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_203_PUP_ID = $r["PUP_ID"]; + $sql_203_PUP_MCF_ID = $r["MCF_NAME"]; + $sql_203_PUP_NAME = $r["PUP_NAME"]; + $sql_203_PUP_Q_N = round(getFullFloatValue($r["PUP_Q_N"]),3); + $sql_203_PUP_H_P = getFullFloatValue($r["PUP_H_P"]); + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site303A&pup=$sql_203_PUP_ID'".chr(34)."> + <TD class='field_left'>$sql_203_PUP_NAME</TD> + <TD class='field_right'>$sql_203_PUP_Q_N</TD> + <TD class='field_right'>$sql_203_PUP_H_P</TD> + <TD class='field_center'>$sql_203_PUP_MCF_ID</TD> + </TR> + "; + } + ?> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site303" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + </div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site303E.php b/sites/site303E.php new file mode 100644 index 0000000..2379720 --- /dev/null +++ b/sites/site303E.php @@ -0,0 +1,116 @@ +<?php +if (!empty($_SESSION['site303_edit'])) +{ +?> + + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['dev']>0) +{ + $wynik = mysql_query("select PUP_NAME,MCF_NAME,PUP_Q_N,PUP_H_P,DRS_SN_NUMBER,DRS_BUY_DATE,DRS_AVAILABLE_DATE,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,DRS_DEV_ATTENTION,DRS_CASSATION_DATE from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 left join seg_manufacturers on PUP_MCF_ID=MCF_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PUP_NAME"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = $r["PUP_Q_N"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["PUP_H_P"]; $sql_4= str_replace(".", ",", $sql_4); + + $sql_5 = $r["DRS_SN_NUMBER"]; + $sql_6 = $r["DRS_BUY_DATE"]; + $sql_7 = $r["DRS_AVAILABLE_DATE"]; + $sql_8 = $r["DRS_STATUS_DIC_ID"]; + $sql_9 = $r["DRS_RESOURCES_DIC_ID"]; + $sql_10 = $r["DRS_DEV_ATTENTION"]; + $sql_12 = $r["DRS_CASSATION_DATE"]; + } + + $sql_11 = sqlStringValue("select getLastValue(16,".$_GET['dev'].") ASS","ASS"); +} +?> + +<div class="tag100"> +<FORM ACTION="./?pg=site303inf&dev=<?php echo $_GET['dev']; ?>" METHOD="POST"> + <div class="head_tag"><?php echo $sql_1." - ".$lab_Tag_site301_009 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $sql_1; ?></TD> + <TD CLASS=desc_value><?php echo $sql_1 ; ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site203_004 ; ?></TD> + <TD CLASS=desc_value><?php echo $sql_2 ; ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site203_002 ; ?></TD> + <TD CLASS=desc_value><?php echo $sql_3 ; ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site203_003 ; ?></TD> + <TD CLASS=desc_value><?php echo $sql_4 ; ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_006 ; ?></TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inPumpSN' value="<?php echo$sql_5; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_013 ; ?></TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inPumpEST' value="<?php echo$sql_11; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_007 ; ?></TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inPumpBuyDate' SIZE='10' value="<?php echo$sql_6; ?>"></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_008 ; ?></TD> + <TD CLASS=desc_value><?php selectFromDictionary('inPumpDevRes', 'DEV_RESOURCES',$sql_9); ?></TD> + </TR> + + <?php if ($sql_9==40): ?> + <TR> + <TD class=desc><?php echo $lab_Field_site303_020 ; ?></TD> + <TD CLASS=desc_value><?php selectDescriptionFromDictionaryByID('inPumpAtt', 'CASSATION_REASON',$sql_10); ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_021 ; ?></TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inPumpCasDate' SIZE='10' value="<?php echo $sql_12; ?>"></TD> + </TR> + + <?php else: ?> + <TR> + <TD class=desc><?php echo $lab_Field_site303_009 ; ?></TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inPumpAvDate' SIZE='10' value="<?php echo$sql_7; ?>"></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_011 ; ?></TD> + <TD CLASS=desc_value><?php selectFromDictionary('inPumpStat', 'DEV_STATUS',$sql_8); ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_010 ; ?></TD> + <TD CLASS=desc_value><textarea NAME=inPumpAtt> <?php echo$sql_10; ?></textarea></TD> + </TR> + <?php endif; ?> + + + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class="btn btn-info btn-sm" TYPE="SUBMIT" NAME="subPumpSave" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subPumpSave" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site303inf.php b/sites/site303inf.php new file mode 100644 index 0000000..5096a99 --- /dev/null +++ b/sites/site303inf.php @@ -0,0 +1,255 @@ +<?php +if (!empty($_SESSION['site303'])) +{ +?> + + <div id='loader-wrapper'><div id='loader'></div></div> + + + +<?php + // aktualizacja pompy na stanie + if ($_GET['dev']>0 && $_POST['subPumpSave']==$lab_ButtonName_Update) + { + if (!empty($_POST['inPumpCasDate'])) + $casDate = "DRS_CASSATION_DATE='".$_POST['inPumpCasDate']."'"; + else $casDate = "DRS_CASSATION_DATE=null"; + + if (!empty($_POST['inPumpAvDate'])) + $avDate = "DRS_AVAILABLE_DATE='".$_POST['inPumpAvDate']."'"; + else $avDate = "DRS_AVAILABLE_DATE=null"; + + if (!empty($_POST['inPumpStat'])) + mysql_query("update seg_dev_resources SET ".$casDate.", DRS_SN_NUMBER='".$_POST['inPumpSN']."',DRS_BUY_DATE='".$_POST['inPumpBuyDate']."',".$avDate.",DRS_STATUS_DIC_ID=".$_POST['inPumpStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inPumpDevRes'].",DRS_DEV_ATTENTION='".$_POST['inPumpAtt']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + else + mysql_query("update seg_dev_resources SET ".$casDate.", DRS_SN_NUMBER='".$_POST['inPumpSN']."',DRS_BUY_DATE='".$_POST['inPumpBuyDate']."',".$avDate.",DRS_RESOURCES_DIC_ID=".$_POST['inPumpDevRes'].",DRS_DEV_ATTENTION='".$_POST['inPumpAtt']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inPumpEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_GET['dev']); + + // Jeśli podano przyczynę kasacji, pompa przechodzi do satusu WYCOFANA + if ($_POST['inPumpDevRes']==40 && !empty($_POST['inPumpAtt'])) + { + mysql_query("UPDATE seg_dev_resources SET DRS_AVAILABLE_DATE=NULL,DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=41,DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + } + + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } +?> + + +<?php +$wynik = mysql_query("select DRS_ID,PUP_NAME,DRS_SN_NUMBER,MCF_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P, DRS_RESOURCES_DIC_ID,DRS_DEV_ATTENTION,DRS_BUY_DATE,case when DRS_AVAILABLE_DATE is not null then DRS_AVAILABLE_DATE else '-' END AVAILABLE_DATE,DRS_CASSATION_DATE from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID left join seg_manufacturers on PUP_MCF_ID=MCF_ID where DRS_ID=".$_GET['dev']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PUP_NAME"]; + $sql_2 = $r["DRS_SN_NUMBER"]; + $sql_3 = $r["MCF_NAME"]; + $sql_4 = round($r["PUP_Q_N"],3); $sql_4= str_replace(".", ",", $sql_4); + $sql_5 = $r["PUP_H_P"]; $sql_5= str_replace(".", ",", $sql_5); + $sql_6 = $r["DRS_RESOURCES_DIC_ID"]; + $sql_7 = $r["DRS_DEV_ATTENTION"]; + $sql_8 = $r["DRS_BUY_DATE"]; + $sql_9 = $r["AVAILABLE_DATE"]; + $sql_DRSid = $r["DRS_ID"]; + $sql_10 = $r["DRS_CASSATION_DATE"]; + + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site303_004 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_1; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + + + <TR> + <TD class="desc"><?php echo $lab_Field_site203_002a; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_003; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_5; ?></TD> + </TR> + </table> + </div> + + + + <div class="head_tag"><?php echo $lab_Tag_site303_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_8; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_013; ?></TD> + <TD CLASS="desc_value"><?php echo getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','ASSET',$sql_DRSid); ?></TD> + </TR> + + + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + + <TR> + <TD class="desc"><?php echo $lab_Field_site303_004; ?></TD> + <TD CLASS="desc_value"><?php echo setDicName($sql_6); ?></TD> + </TR> + + <?php if ($sql_6==40 || $sql_6==41): ?> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_021; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_10; ?></TD> + </TR> + <?php endif; ?> + + + + </table> + </div> + + </div> + + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Tag_site303_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_001 ;?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select WLL_NAME from seg_well_pump_eng_rel left join seg_wells on RWL_WLL_ID=WLL_ID where RWL_PUP_DRS_ID=$sql_DRSid", "WLL_NAME"); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_004 ;?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select ENG_NAME from seg_well_pump_eng_rel left join seg_dev_resources on RWL_ENG_DRS_ID=DRS_ID left join seg_engines on DRS_DEV_ID=ENG_ID where RWL_PUP_DRS_ID=$sql_DRSid", "ENG_NAME"); ?></TD> + </TR> + </table> + </div> + + <div class="head_tag">Uwagi</div> + <div class="tag"> + <TABLE class="desc_val"> + + + <?php if ($sql_6==40 || $sql_6==41): ?> + <TR> + <TD class="desc">Opis</TD> + <TD CLASS="desc_value"><?php echo setDicName($sql_7); ?></TD> + </TR> + <?php else: ?> + <TR> + <TD class="desc">Opis</TD> + <TD CLASS="desc_value"><?php echo $sql_7; ?></TD> + </TR> + <?php endif; ?> + + + </table> + </div> + + + +</div> + + +<div class="tag100"> + + <div class="head_tag"><?php echo $lab_Tag_site303_007 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label">Studnia</TD> + <TD class="label">Typ silnika</TD> + <TD class="label">Nr silnika</TD> + <TD class="label">Data zab.</TD> + <td class="label">Data wyb.</td> + <td class="label">Czas pracy [h]</td> + <td class="label">Powód</td> + </TR> + + <?php + $historyArray = sqlGetResAsArray("select DRS_ID,WLL_NAME,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_REASON from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 where WLE_WLL_ID=WLL_ID and WLE_PUMP_NAME='".$sql_1."' and WLE_PUMP_NO='".$sql_2."' order by WLE_DATE_FROM desc"); + + for($i=0; $i<count($historyArray); $i++) + { + + if (strlen($historyArray[$i]['WLE_DATE_TO'])>10) + $subQuery = " and RHD_DATE<='".$historyArray[$i]['WLE_DATE_TO']."'"; + else $subQuery=""; + + $workingTime=null; + //$workingTime = sqlStringValue("select RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_DATE=(select max(RHD_DATE) from rep_his_data_everyday where RHD_DRS_ID=".$historyArray[$i]['DRS_ID']." and RHD_DATE>='".$historyArray[$i]['WLE_DATE_FROM']."' ".$subQuery.") and RHD_DRS_ID=".$historyArray[$i]['DRS_ID']." limit 1", "RHD_WORK_TIME_VAL"); + $workingTime = sqlStringValue("select RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$historyArray[$i]['DRS_ID']." and RHD_DATE>='".$historyArray[$i]['WLE_DATE_FROM']."' ".$subQuery.")", "RHD_WORK_TIME_VAL"); + + echo" + <TR> + <TD class='field_left'>".(count($historyArray)-$i)."</TD> + <TD class='field_left'>".$historyArray[$i]['WLL_NAME']."</TD> + <TD class='field_right'>".$historyArray[$i]['WLE_ENG_NAME']."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_ENG_NO']."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_DATE_FROM']."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_DATE_TO']."</TD> + <TD class='field_right'>".$workingTime."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_REASON']."</TD> + </TR> + "; + } + ?> + </table> + </div> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + +<?php +// zapami�tywanie PUP_ID do poprzedniej strony +if (!empty($_GET['pb'])) + $_SESSION['site303_pb_id'] = $_GET['pb']; +?> + + <div class="tag_buttons"> + <a href=./?pg=site303list&pup=<?php echo $_SESSION['site303_pb_id']; ?>><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + <?php + if (!empty($_SESSION['site303_edit']) && $sql_6!=41) + echo" + <a class='confirmation' href=./?pg=site303&param=".$_GET['dev'].",del,".md5($_GET['dev'])."><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Delete'></A> + <a href=./?pg=site303E&dev=".$_GET['dev']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + "; + ?> + </div> + + +</div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site303list.php b/sites/site303list.php new file mode 100644 index 0000000..c49d609 --- /dev/null +++ b/sites/site303list.php @@ -0,0 +1,116 @@ +<?php +if (!empty($_SESSION['site303'])) +{ +?> + + + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site303_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_002a ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_022 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_004 ;?></TD> + + + </TR> + + <?php + + if (isset($_GET['pup']) && $_GET['pup']>0) + { + unset($pup_array); + //$pup_array = sqlGetResAsArray("select * from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_ID in (select DRS_ID from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$_GET['pup']." and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION='1524')) union select RWS_PUP_DRS_ID DRS_ID from seg_wellsink_pump_eng_rel,seg_dev_resources left join seg_pumps on DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID where RWS_PUP_DRS_ID=DRS_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$_GET['pup'].") order by DRS_SN_NUMBER,PUP_Q_N"); + $pup_array = sqlGetResAsArray("select * from seg_pumps,seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and PUP_ID=".$_GET['pup']." and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION in ('1401','1524'))) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by PUP_NAME,DRS_SN_NUMBER"); + } +// $pup_array = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,PUP_ID,PUP_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_PUP_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 where DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8,30) and PUP_ID=".$_GET['pup']); +// $pup_array = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,PUP_ID,PUP_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_PUP_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 where DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$_GET['pup']." order by PUP_NAME,DRS_SN_NUMBER"); + //$pup_array = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,PUP_ID,PUP_NAME,(PUP_Q_N/60) PUP_Q_N,PUP_H_P,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_PUP_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 where DRS_RESOURCES_DIC_ID in (1,2,3,40,707) and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and PUP_ID=".$_GET['pup']." order by PUP_NAME,DRS_SN_NUMBER"); + + + //print_r($pup_array); + //echo"<br/><br/><br/>"; + + + for($i=0;$i<count($pup_array);$i++) + { + unset($wellInfo); unset($pupStatus); unset($pumpWellSink); + + $wellInfo = sqlGetResAsArray("select * from seg_well_pump_eng_rel,seg_wells where RWL_WLL_ID=WLL_ID and RWL_PUP_DRS_ID=".$pup_array[$i]['DRS_ID']); + + if ($pup_array[$i]['DRS_RESOURCES_DIC_ID']==1) $pupStatus = 'Nowe'; + elseif ($pup_array[$i]['DRS_RESOURCES_DIC_ID']==2) $pupStatus = 'Rezerwa'; + elseif ($pup_array[$i]['DRS_RESOURCES_DIC_ID']==707) $pupStatus = 'Remont'; + elseif ($pup_array[$i]['DRS_RESOURCES_DIC_ID']==3 && count($wellInfo)>0) $pupStatus = 'Eksploatacja SPM'; + elseif ($pup_array[$i]['DRS_RESOURCES_DIC_ID']==3 && count($wellInfo)==0) $pupStatus = 'Bestgum'; + elseif ($pup_array[$i]['DRS_RESOURCES_DIC_ID']==40 && $pup_array[$i]['DRS_DEV_ATTENTION']=='1524') $pupStatus = 'Kasacja [w likwidacji]'; + + + $pumpWellSink = sqlGetResAsArray("select * from seg_wellsink_pump_eng_rel,seg_wells where WLL_ID=RWS_WLL_ID and RWS_PUP_DRS_ID=".$pup_array[$i]['DRS_ID']); + if (count($pumpWellSink)>0) + { + $wellInfo[0]['WLL_NAME'] = 'Zatopiona w '.$pumpWellSink[0]['WLL_NAME']; + $pupStatus = 'Kasacja [zatopione]'; + } + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site303inf&dev=".$pup_array[$i]['DRS_ID']."&pb=".$_GET['pup']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$pup_array[$i]['PUP_NAME']."</TD> + <TD class='field_center'>".$pup_array[$i]['DRS_SN_NUMBER']."</TD> + <TD class='field_right'>".round($pup_array[$i]['PUP_Q_N']/60,3)."</TD> + <TD class='field_right'>".$pup_array[$i]['PUP_H_P']."</TD> + <TD class='field_center'>".$wellInfo[0]['WLL_NAME']."</TD> + <TD class='field_center'>".$pupStatus."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($pup_array); ?></span></td> + <td style="width: 50%; text-align: center;"> + </td> + <td style="width: 25%; text-align: right;"> +<!-- <a href="./export/site303list_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; --> +<!-- <a href="./export/site303list_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; --> + </td> + </tr> + </table> + + + + </div> + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + +<div class="tag50_right"> + <div class=tag_buttons> + <a href='./?pg=site303'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back; ?>'></A> + </div> +</div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site304.php b/sites/site304.php new file mode 100644 index 0000000..a81a312 --- /dev/null +++ b/sites/site304.php @@ -0,0 +1,254 @@ +<?php +if (!empty($_SESSION['site304'])) +{ +?> + + +<?php +//dodawanie silnika na stan +if ($_POST['inEngineID']>0 && $_POST['subEngineSave']==$lab_ButtonName_Save) +{ + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE=11 and DRS_DEV_ID=".$_POST['inEngineID']." and DRS_SN_NUMBER='".$_POST['inEngineSN']."'")==0) + { + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=".$_POST['inEngineID'].",DRS_DEV_TYPE=11,DRS_SN_NUMBER='".$_POST['inEngineSN']."',DRS_BUY_DATE='".$_POST['inEngineBuyDate']."',DRS_AVAILABLE_DATE='".$_POST['inEngineAvDate']."',DRS_STATUS_DIC_ID=".$_POST['inEngineStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inEngineDevRes'].",DRS_DEV_ATTENTION='".$_POST['inEngineAtt']."',DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."',DRS_AUDIT_USR='".$_POST['inEngineVol']."',DRS_AUDIT_DATE=now()"); + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inEngineEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxDRSid); + delSearchSessionData(); + } + else + { + echo"<div class='actionERROR'>$lab_SaveRecordNotification_005</div>"; + delSearchSessionData(); + } +} + + + +//usuwanie +// ================================================================================== +if (!empty($_GET['param'])) +{ + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if (sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=".$tpmArray[0])>0) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_dev_resources WHERE DRS_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } +} +// ================================================================================== + +?> + + + +<?php + if (!$_POST['sr_status']) $_POST['sr_status']=100; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site304_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site304&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Typ silnika:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site304_input'];?>"></td> + <td style="width: 10px;"></td> + <td>producent:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["MCF_ID"]; + $resDESC=$r["MCF_NAME"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszyscy</option>"; + else + echo"<option value='100'>Wszyscy</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + <?php echo $lab_HistoricalData_007; ?> + </td> + </tr> + </table> + </div> + </form> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site304_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label">Nowe</TD> + <TD class="label">Rezerwa</TD> + <TD class="label">Remont</TD> + <TD class="label">Eksploatacja SPM</TD> + <TD class="label">Bestgum</TD> + <TD class="label">Kasacja [w likwidacji]</TD> + <TD class="label">Kasacja [zatopione]</TD> + <TD class="label">Razem</TD> + </TR> + + <?php + + if (empty($_SESSION['site304_array']) || $_POST['sub_search']=='Szukaj') + { + unset($_SESSION['site304_array']); + if (empty($_POST['sr_all'])) $subQuery .= " limit 100"; + + //$listArray = sqlGetResAsArray("select ENG_ID,count(ENG_ID) ILOSC,ENG_NAME from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_NAME like '%".$_POST['sr_well']."%' and ENG_ID>0 and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40) and DRS_DEV_ATTENTION in ('1401','1524')) group by ENG_ID,ENG_NAME order by ENG_NAME,ENG_POWER".$subQuery); + $listArray = sqlGetResAsArray("select * from seg_engines,seg_dev_resources where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and ENG_NAME like '%".$_POST['sr_well']."%' and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION in ('1401','1524'))) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' group by ENG_ID order by ENG_NAME,ENG_VOLTAGE"); + + for ($i=0; $i<count($listArray); $i++) + { + unset($suma); unset($rec1); unset($rec2); unset($rec3ALL); unset($rec3SPM); + unset($rec707); unset($rec40_LIK); unset($rec40_ZAT); unset($rec3BESTGUM); + + $rec1 = sqlValue("select count(*) CNT from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_RESOURCES_DIC_ID=1"); + $rec2 = sqlValue("select count(*) CNT from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_RESOURCES_DIC_ID=2"); + $rec3ALL = sqlValue("select count(*) CNT from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_RESOURCES_DIC_ID=3"); + $rec3SPM = sqlValue("select count(*) from seg_well_pump_eng_rel where RWL_ENG_DRS_ID in (select DRS_ID from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_RESOURCES_DIC_ID=3)"); + $rec707 = sqlValue("select count(*) CNT from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_RESOURCES_DIC_ID=707"); + $rec40_LIK = sqlValue("select count(*) CNT from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION='1524'"); + //2018-04-08 + $rec40_ZAT = sqlValue("select count(*) CNT from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION='1401'"); + //$rec40_ZAT = sqlValue("select count(*) CNT from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and ENG_ID=".$listArray[$i]['ENG_ID']." and DRS_ID in (select RWS_ENG_DRS_ID from seg_wellsink_pump_eng_rel where RWS_ENG_DRS_ID is not null and RWS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."')"); + + + if ($rec1>0) $suma += $rec1; else $rec1=null; + if ($rec2>0) $suma += $rec2; else $rec2=null; + if ($rec3ALL>0) $suma += $rec3ALL; else $rec3ALL=null; + if ($rec707>0) $suma += $rec707; else $rec707=null; + if ($rec40_LIK>0) $suma += $rec40_LIK; else $rec40_LIK=null; + if ($rec40_ZAT>0) $suma += $rec40_ZAT; else $rec40_ZAT=null; + + if ($rec3ALL>$rec3SPM) $rec3BESTGUM = $rec3ALL-$rec3SPM; + if ($rec3SPM==0) $rec3SPM=null; + + + $_SESSION['site304_array'][]=array( + 'id' => $listArray[$i]['ENG_ID'], + 'engName' => $listArray[$i]['ENG_NAME'], + 'engcount' => $suma, + 'nowe' => $rec1, + 'rezerwa' => $rec2, + 'remont' => $rec707, + 'eksp_spm' => $rec3SPM, + 'bestgum' => $rec3BESTGUM, + 'kas_lik' => $rec40_LIK, + 'kas_zatop' => $rec40_ZAT + ); + + } + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site304_array'])) $stop=count($_SESSION['site304_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site304list&eng=".$_SESSION['site304_array'][$i]['id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site304_array'][$i]['engName']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['nowe']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['rezerwa']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['remont']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['eksp_spm']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['bestgum']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['kas_lik']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['kas_zatop']."</TD> + <TD class='field_right'>".$_SESSION['site304_array'][$i]['engcount']."</TD> + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site304_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site304_array'])>20) + echo pagination_grid('?pg=site304', $_GET['pgn'], count($_SESSION['site304_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site304_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site304_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + </div> + + <?php + if (!empty($_SESSION['site304_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site304A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site304A.php b/sites/site304A.php new file mode 100644 index 0000000..eb84999 --- /dev/null +++ b/sites/site304A.php @@ -0,0 +1,100 @@ +<?php +if (!empty($_SESSION['site304_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['eng']>0) +{ + $wynik = mysql_query("select ENG_NAME,MCF_NAME,ENG_VOLTAGE,ENG_POWER from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_ID=".$_GET['eng']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["ENG_NAME"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = $r["ENG_VOLTAGE"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["ENG_POWER"]; $sql_4= str_replace(".", ",", $sql_4); + } +} +?> + +<div class="tag100"> +<FORM ACTION="?pg=site304" METHOD="POST"> + <input type="hidden" name="inEngineID" value="<?php echo $_GET['eng']; ?>"> + <input type="hidden" name="inEngineVol" value="<?php echo getgetFloatValue($sql_3); ?>"> + <div class="head_tag"><?php echo $lab_Tag_site304_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_001; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inEngineName" value="<?php echo $sql_1; ?>" readonly> <a class="tooltip_warning" HREF="?pg=site304Aeng"> + <img SRC="./images/search-icon.png" border="0"><span><?php echo $lab_Field_site304_001; ?></SPAN></A> + </TD> + </TR> + <?php + if ($_GET['eng']>0) + { + echo" + <TR> + <TD class=desc> $lab_Field_site203_004 </TD> + <TD CLASS=desc_value> $sql_2 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site204_002 </TD> + <TD CLASS=desc_value> $sql_3 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site204_003 </TD> + <TD CLASS=desc_value> $sql_4 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_006 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inEngineSN'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_013 </TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inEngineEST'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_007 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inEngineBuyDate' SIZE='10'></TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_008 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inEngineDevRes', 'DEV_RESOURCES'); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_009 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inEngineAvDate' SIZE='10'></TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_011 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inEngineStat', 'DEV_STATUS'); echo"</TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_010</TD> + <TD CLASS=desc_value><textarea NAME=inEngineAtt></textarea></TD> + </TR> + "; + } + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site304" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subEngineSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site304Aeng.php b/sites/site304Aeng.php new file mode 100644 index 0000000..4b70022 --- /dev/null +++ b/sites/site304Aeng.php @@ -0,0 +1,50 @@ +<?php +if (!empty($_SESSION['site304_edit'])) +{ +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site304_003; ?></div> + <div class="tag"><br/> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select ENG_ID,ENG_NAME,MCF_NAME,ENG_VOLTAGE,ENG_POWER from seg_engines left join seg_manufacturers on ENG_MCF_ID=MCF_ID where ENG_STATUS='1' order by ENG_NAME,ENG_POWER"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["ENG_ID"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = $r["ENG_NAME"]; + $sql_4 = $r["ENG_VOLTAGE"]; $sql_4= str_replace(".", ",", $sql_4); + $sql_5 = $r["ENG_POWER"]; $sql_5= str_replace(".", ",", $sql_5); + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site304A&eng=$sql_1'".chr(34)."> + <TD class='field_left'>$sql_3</TD> + <TD class='field_right'>$sql_4</TD> + <TD class='field_right'>$sql_5</TD> + <TD class='field_center'>$sql_2</TD> + </TR> + "; + } + ?> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site304" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + </div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site304E.php b/sites/site304E.php new file mode 100644 index 0000000..d2e1b3a --- /dev/null +++ b/sites/site304E.php @@ -0,0 +1,120 @@ +<?php +if (!empty($_SESSION['site304_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['dev']>0) +{ + $wynik = mysql_query("select ENG_NAME,MCF_NAME,ENG_VOLTAGE,ENG_POWER,DRS_SN_NUMBER,DRS_BUY_DATE,DRS_AVAILABLE_DATE,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,DRS_DEV_ATTENTION,DRS_CASSATION_DATE from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 left join seg_manufacturers on ENG_MCF_ID=MCF_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["ENG_NAME"]; + $sql_2 = $r["MCF_NAME"]; + $sql_3 = $r["ENG_VOLTAGE"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["ENG_POWER"]; $sql_4= str_replace(".", ",", $sql_4); + + $sql_5 = $r["DRS_SN_NUMBER"]; + $sql_6 = $r["DRS_BUY_DATE"]; + $sql_7 = $r["DRS_AVAILABLE_DATE"]; + $sql_8 = $r["DRS_STATUS_DIC_ID"]; + $sql_9 = $r["DRS_RESOURCES_DIC_ID"]; + $sql_10 = $r["DRS_DEV_ATTENTION"]; + $sql_12 = $r["DRS_CASSATION_DATE"]; + + } + + $sql_11 = sqlStringValue("select getLastValue(16,".$_GET['dev'].") ASS","ASS"); +} +?> + +<div class="tag100"> +<FORM ACTION="./?pg=site304inf&dev=<?php echo$_GET['dev']; ?>" METHOD="POST"> + <div class="head_tag"><?php echo $sql_1." - ".$lab_Tag_site301_009 ; ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_001; ?></TD> + <TD CLASS=desc_value><?php echo $sql_1 ; ?> </TD> + </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site203_004 ;?></TD> + <TD CLASS=desc_value><?php echo $sql_2 ;?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site204_002 ;?></TD> + <TD CLASS=desc_value><?php echo $sql_3 ;?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site204_003 ;?></TD> + <TD CLASS=desc_value><?php echo $sql_4 ;?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_006 ;?></TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inEngineSN' value="<?php echo$sql_5; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_013 ;?></TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inEngineEST' value="<?php echo$sql_11; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_007 ;?></TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inEngineBuyDate' SIZE='10' value="<?php echo$sql_6; ?>"></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_008 ;?></TD> + <TD CLASS=desc_value><?php selectFromDictionary('inEngineDevRes', 'DEV_RESOURCES',$sql_9); ?></TD> + </TR> + + + <?php if ($sql_9==40): ?> + <TR> + <TD class=desc><?php echo $lab_Field_site303_020 ; ?></TD> + <TD CLASS=desc_value><?php selectDescriptionFromDictionaryByID('inEngineAtt', 'CASSATION_REASON',$sql_10); ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_021 ; ?></TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inEngineCasDate' SIZE='10' value="<?php echo $sql_12; ?>"></TD> + </TR> + + <?php else: ?> + <TR> + <TD class=desc><?php echo $lab_Field_site303_009 ; ?></TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inEngineAvDate' SIZE='10' value="<?php echo$sql_7; ?>"></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_011 ; ?></TD> + <TD CLASS=desc_value><?php selectFromDictionary('inEngineStat', 'DEV_STATUS',$sql_8); ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_010 ; ?></TD> + <TD CLASS=desc_value><textarea NAME=inEngineAtt> <?php echo$sql_10; ?></textarea></TD> + </TR> + <?php endif; ?> + + + + + + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class="btn btn-info btn-sm" TYPE="SUBMIT" NAME="subEngineSave" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subEngineSave" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site304inf.php b/sites/site304inf.php new file mode 100644 index 0000000..dfd6cb3 --- /dev/null +++ b/sites/site304inf.php @@ -0,0 +1,254 @@ +<?php +if (!empty($_SESSION['site304'])) +{ +?> + + + <div id='loader-wrapper'><div id='loader'></div></div> + + + <?php + // aktualizacja silnika na stanie + if ($_GET['dev']>0 && $_POST['subEngineSave']==$lab_ButtonName_Update) + { + + if (!empty($_POST['inEngineCasDate'])) + $casDate = "DRS_CASSATION_DATE='".$_POST['inEngineCasDate']."'"; + else $casDate = "DRS_CASSATION_DATE=null"; + + if (!empty($_POST['inEngineAvDate'])) + $avDate = "DRS_AVAILABLE_DATE='".$_POST['inEngineAvDate']."'"; + else $avDate = "DRS_AVAILABLE_DATE=null"; + + if (!empty($_POST['inPumpStat'])) + mysql_query("update seg_dev_resources SET ".$casDate.", DRS_SN_NUMBER='".$_POST['inEngineSN']."',DRS_BUY_DATE='".$_POST['inEngineBuyDate']."',".$avDate.",DRS_STATUS_DIC_ID=".$_POST['inEngineStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inEngineDevRes'].",DRS_DEV_ATTENTION='".$_POST['inEngineAtt']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + else + mysql_query("update seg_dev_resources SET ".$casDate.", DRS_SN_NUMBER='".$_POST['inEngineSN']."',DRS_BUY_DATE='".$_POST['inEngineBuyDate']."',".$avDate.",DRS_RESOURCES_DIC_ID=".$_POST['inEngineDevRes'].",DRS_DEV_ATTENTION='".$_POST['inEngineAtt']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + + +// mysql_query("update seg_dev_resources SET DRS_SN_NUMBER='".$_POST['inEngineSN']."',DRS_BUY_DATE='".$_POST['inEngineBuyDate']."',DRS_AVAILABLE_DATE='".$_POST['inEngineAvDate']."',DRS_STATUS_DIC_ID=".$_POST['inEngineStat'].",DRS_RESOURCES_DIC_ID=".$_POST['inEngineDevRes'].",DRS_DEV_ATTENTION='".$_POST['inEngineAtt']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inEngineEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_GET['dev']); + + // Jeśli podano przyczynę kasacji, pompa przechodzi do satusu WYCOFANA + if ($_POST['inEngineDevRes']==40 && !empty($_POST['inEngineAtt'])) + { + mysql_query("UPDATE seg_dev_resources SET DRS_AVAILABLE_DATE=NULL,DRS_STATUS_DIC_ID=9,DRS_RESOURCES_DIC_ID=41,DRS_AUDIT_DATE=now() where DRS_ID=".$_GET['dev']); + } + + + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + ?> + + + +<?php +$wynik = mysql_query("select DRS_ID,DRS_SN_NUMBER,MCF_NAME,ENG_NAME,ENG_VOLTAGE,ENG_POWER, DRS_RESOURCES_DIC_ID,DRS_DEV_ATTENTION,DRS_BUY_DATE,case when DRS_AVAILABLE_DATE is not null then DRS_AVAILABLE_DATE else '-' END AVAILABLE_DATE,DRS_CASSATION_DATE from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID left join seg_manufacturers on ENG_MCF_ID=MCF_ID where DRS_ID=".$_GET['dev']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["ENG_NAME"]; + $sql_2 = $r["DRS_SN_NUMBER"]; + $sql_3 = $r["MCF_NAME"]; + $sql_4 = $r["ENG_VOLTAGE"]; $sql_4= str_replace(".", ",", $sql_4); + $sql_5 = $r["ENG_POWER"]; $sql_5= str_replace(".", ",", $sql_5); + $sql_6 = $r["DRS_RESOURCES_DIC_ID"]; + $sql_7 = $r["DRS_DEV_ATTENTION"]; + $sql_8 = $r["DRS_BUY_DATE"]; + $sql_9 = $r["AVAILABLE_DATE"]; + $sql_DRSid = $r["DRS_ID"]; + $sql_10 = $r["DRS_CASSATION_DATE"]; + + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site304_004 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_1; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + + + <TR> + <TD class="desc"><?php echo $lab_Field_site204_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site204_003; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_5; ?></TD> + </TR> + </table> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site303_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_8; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_013; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET') and DRD_DRS_ID=$sql_DRSid", "DRD_VALUE"); ?></TD> + </TR> + <TR><TD COLSPAN="2" CLASS="desc_value"><HR ></TD></TR> + + + <TR> + <TD class="desc"><?php echo $lab_Field_site303_004; ?></TD> + <TD CLASS="desc_value"><?php echo setDicName($sql_6); ?></TD> + </TR> + + <?php if ($sql_6==40 || $sql_6==41): ?> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_021; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_10; ?></TD> + </TR> + <?php endif; ?> + + + </table> + </div> + + </div> + + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Tag_site303_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_001 ;?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select WLL_NAME from seg_well_pump_eng_rel left join seg_wells on RWL_WLL_ID=WLL_ID where RWL_ENG_DRS_ID=$sql_DRSid", "WLL_NAME"); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_002 ;?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select PUP_NAME from seg_well_pump_eng_rel left join seg_dev_resources on DRS_ID=RWL_PUP_DRS_ID left join seg_pumps on PUP_ID=DRS_DEV_ID where RWL_ENG_DRS_ID=$sql_DRSid", "PUP_NAME"); ?></TD> + </TR> + + </table> + </div> + + <div class="head_tag">Uwagi</div> + <div class="tag"> + <TABLE class="desc_val"> + + <?php if ($sql_6==40 || $sql_6==41): ?> + <TR> + <TD class="desc">Opis</TD> + <TD CLASS="desc_value"><?php echo setDicName($sql_7); ?></TD> + </TR> + <?php else: ?> + <TR> + <TD class="desc">Opis</TD> + <TD CLASS="desc_value"><?php echo $sql_7; ?></TD> + </TR> + <?php endif; ?> + + </table> + </div> + +</div> + + +<div class="tag100"> + + <div class="head_tag"><?php echo $lab_Tag_site303_007 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label">Studnia</TD> + <TD class="label">Typ pompy</TD> + <TD class="label">Nr pompy</TD> + <TD class="label">Data zab.</TD> + <TD class="label">Data wyb.</TD> + <td class="label">Czas pracy [h]</td> + <TD class="label">Powód</TD> + </TR> + + <?php + $historyArray = sqlGetResAsArray("select DRS_ID,WLL_NAME,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_REASON from seg_wells_exchanged,seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 where WLE_WLL_ID=WLL_ID and WLE_ENG_NAME='".$sql_1."' and WLE_ENG_NO='".$sql_2."' order by WLE_DATE_FROM desc"); + + for($i=0; $i<count($historyArray); $i++) + { + + if (strlen($historyArray[$i]['WLE_DATE_TO'])>10) + $subQuery = " and RHD_DATE<='".$historyArray[$i]['WLE_DATE_TO']."'"; + else $subQuery=""; + + $workingTime=null; + $workingTime = sqlStringValue("select RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$historyArray[$i]['DRS_ID']." and RHD_DATE>='".$historyArray[$i]['WLE_DATE_FROM']."' ".$subQuery.")", "RHD_WORK_TIME_VAL"); + + + + + echo" + <TR> + <TD class='field_left'>".(count($historyArray)-$i)."</TD> + <TD class='field_left'>".$historyArray[$i]['WLL_NAME']."</TD> + <TD class='field_right'>".$historyArray[$i]['WLE_PUMP_NAME']."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_PUMP_NO']."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_DATE_FROM']."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_DATE_TO']."</TD> + <TD class='field_right'>".$workingTime."</TD> + <TD class='field_center'>".$historyArray[$i]['WLE_REASON']."</TD> + </TR> + "; + } + ?> + </table> + </div> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + <?php + // zapami�tywanie ENG_ID do poprzedniej strony + if (!empty($_GET['eb'])) + $_SESSION['site304_eb_id'] = $_GET['eb']; + ?> + + + <div class="tag_buttons"> + <a href=./?pg=site304list&eng=<?php echo $_SESSION['site304_eb_id'];?> ><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + + <?php + if (!empty($_SESSION['site304_edit']) && $sql_6!=41) + echo" + <a class='confirmation' href=./?pg=site304&param=".$_GET['dev'].",del,".md5($_GET['dev'])."><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Delete'></A> + <a href=./?pg=site304E&dev=".$_GET['dev']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + "; + ?> + + </div> +</div> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site304list.php b/sites/site304list.php new file mode 100644 index 0000000..f650d7c --- /dev/null +++ b/sites/site304list.php @@ -0,0 +1,112 @@ +<?php +if (!empty($_SESSION['site303'])) +{ +?> + + + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site304_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_022 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_004 ;?></TD> + + + </TR> + + <?php + + if (isset($_GET['eng']) && $_GET['eng']>0) + { + unset($eng_array); + //$eng_array = sqlGetResAsArray("select * from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_ID in (select DRS_ID from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$_GET['eng']." and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION='1524')) union select RWS_ENG_DRS_ID DRS_ID from seg_wellsink_pump_eng_rel,seg_dev_resources left join seg_engines on DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID where RWS_ENG_DRS_ID=DRS_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$_GET['eng'].") order by DRS_SN_NUMBER,ENG_POWER"); + $eng_array = sqlGetResAsArray("select * from seg_engines,seg_dev_resources where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and ENG_ID=".$_GET['eng']." and (DRS_RESOURCES_DIC_ID in (1,2,3,707) or (DRS_RESOURCES_DIC_ID=40 and DRS_DEV_ATTENTION in ('1401','1524'))) and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' order by DRS_SN_NUMBER"); + } +// $eng_array = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 where DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_STATUS_DIC_ID in (6,7,8,30) and ENG_ID=".$_GET['eng']); +// $eng_array = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 where DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$_GET['eng']); + //$eng_array = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,ENG_ID,ENG_NAME,ENG_VOLTAGE,ENG_POWER,(select WLL_NAME from seg_wells where WLL_ID=(select RWL_WLL_ID from seg_well_pump_eng_rel where RWL_ENG_DRS_ID=DRS_ID limit 1)) WLL_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 where DRS_RESOURCES_DIC_ID in (1,2,3,40,707) and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and ENG_ID=".$_GET['eng']); + + for($i=0;$i<count($eng_array);$i++) + { + unset($wellInfo); unset($engStatus); unset($pumpWellSink); + + $wellInfo = sqlGetResAsArray("select * from seg_well_pump_eng_rel,seg_wells where RWL_WLL_ID=WLL_ID and RWL_ENG_DRS_ID=".$eng_array[$i]['DRS_ID']); + + if ($eng_array[$i]['DRS_RESOURCES_DIC_ID']==1) $engStatus = 'Nowe'; + elseif ($eng_array[$i]['DRS_RESOURCES_DIC_ID']==2) $engStatus = 'Rezerwa'; + elseif ($eng_array[$i]['DRS_RESOURCES_DIC_ID']==707) $engStatus = 'Remont'; + elseif ($eng_array[$i]['DRS_RESOURCES_DIC_ID']==3 && count($wellInfo)>0) $engStatus = 'Eksploatacja SPM'; + elseif ($eng_array[$i]['DRS_RESOURCES_DIC_ID']==3 && count($wellInfo)==0) $engStatus = 'Bestgum'; + elseif ($eng_array[$i]['DRS_RESOURCES_DIC_ID']==40 && $eng_array[$i]['DRS_DEV_ATTENTION']=='1524') $engStatus = 'Kasacja [w likwidacji]'; + + + $pumpWellSink = sqlGetResAsArray("select * from seg_wellsink_pump_eng_rel,seg_wells where WLL_ID=RWS_WLL_ID and RWS_ENG_DRS_ID=".$eng_array[$i]['DRS_ID']); + if (count($pumpWellSink)>0) + { + $wellInfo[0]['WLL_NAME'] = 'Zatopiony w '.$pumpWellSink[0]['WLL_NAME']; + $engStatus = 'Kasacja [zatopione]'; + } + + echo" + <tr STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site304inf&dev=".$eng_array[$i]['DRS_ID']."&eb=".$_GET['eng']."'".chr(34)."> + <td class='field_left'>".($i+1)."</td> + <td class='field_left'>".$eng_array[$i]['ENG_NAME']."</td> + <td class='field_center'>".$eng_array[$i]['DRS_SN_NUMBER']."</td> + <td class='field_right'>".$eng_array[$i]['ENG_VOLTAGE']."</td> + <td class='field_right'>".$eng_array[$i]['ENG_POWER']."</td> + <td class='field_center'>".$wellInfo[0]['WLL_NAME']."</td> + <td class='field_center'>".$engStatus."</td> + </tr> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($eng_array); ?></span></td> + <td style="width: 50%; text-align: center;"> + </td> + <td style="width: 25%; text-align: right;"> +<!-- <a href="./export/site304list_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; --> +<!-- <a href="./export/site304list_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; --> + </td> + </tr> + </table> + + + + </div> + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + +<div class="tag50_right"> + <div class=tag_buttons> + <a href='./?pg=site304'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back; ?>'></A> + </div> +</div> + + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site305.php b/sites/site305.php new file mode 100644 index 0000000..b905bfa --- /dev/null +++ b/sites/site305.php @@ -0,0 +1,5 @@ +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_standard_name ;?></div> + <div class="tag"><?php echo $lab_Tag_standard_content ;?></div> +</div> + \ No newline at end of file diff --git a/sites/site306.php b/sites/site306.php new file mode 100644 index 0000000..492a702 --- /dev/null +++ b/sites/site306.php @@ -0,0 +1,88 @@ +<?php +if (!empty($_SESSION['site306'])) +{ +?> + + <?php + //dodawanie nowego kabla na stan. + if ($_POST['inCableID']>0 && $_POST['subCableSave']==$lab_ButtonName_Save) + { + mysql_query("INSERT INTO seg_equipments_stock SET SES_EQU_ID=".$_POST['inCableID'].",SES_PARAM3='".$_SESSION['syndis_eq_stock']."',SES_DESCRIPTION='".$_POST['inCableAtt']."',SES_VALUE='".$_POST['inCablePis']."',SES_STOCK='".$_POST['inCablePis']."',SES_PARAM1='".$_POST['inCableEST']."',SES_TYPE=13,SES_INVOICE_NO='".$_POST['inCableInv']."',SES_INVOICE_DATE='".$_POST['inCableBuyDate']."',SES_AUDIT_CU='".$_SESSION['user']."',SES_AUDIT_CD=now()"); + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + unset($maxDRSid); + } + ?> + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site306_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site306_006 ;?></TD> + <TD class="label"><?php echo $lab_Field_site306_005 ;?></TD> + + </TR> + + <?php + $cableArray = sqlGetResAsArray("select SES_EQU_ID,EQU_NAME,MCF_NAME,sum(SES_VALUE) ILE,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) USED from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_TYPE=13 and SES_PARAM3='".$_SESSION['syndis_eq_stock']."' group by SES_EQU_ID order by EQU_NAME"); + for ($i=0; $i<count($cableArray); $i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site306inf&eq=".$cableArray[$i]['SES_EQU_ID']."'".chr(34)."> + <TD class='field_right'>".($i+1)."</TD> + <TD class='field_center'>".$cableArray[$i]['EQU_NAME']."</TD> + <TD class='field_center'>".$cableArray[$i]['MCF_NAME']."</TD> + <TD class='field_right'>".$cableArray[$i]['ILE']."</TD> + <TD class='field_right'>".(int) ($cableArray[$i]['ILE'] - $cableArray[$i]['USED'])."</TD> + </TR> + "; + } + + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($cableArray); ?></span></td> + <td style="width: 50%; text-align: center;"> + </td> + <td style="width: 25%; text-align: right;"> + <a href="#" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="#" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + + </div> + + + <?php + if (!empty($_SESSION['site306_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site306A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site306A.php b/sites/site306A.php new file mode 100644 index 0000000..5c72ea2 --- /dev/null +++ b/sites/site306A.php @@ -0,0 +1,80 @@ +<?php +if (!empty($_SESSION['site306_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['eq']>0) +{ + $wynik = mysql_query("select EQU_NAME,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_NAME"]; + $sql_2 = $r["MCF_NAME"]; + } +} +?> + +<div class="tag100"> +<FORM ACTION="./?pg=site306" METHOD="POST" id="AddNewCable" class="form_valid"> + <input type="hidden" name="inCableID" value="<?php echo $_GET['eq']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site306_003 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site306_004; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inCableName" value="<?php echo $sql_1; ?>" readonly> <a class="tooltip_warning" HREF="?pg=site306Aeq"> + <img SRC="./images/search-icon.png" border="0"><span><?php echo $lab_Tag_site306_002; ?></SPAN></A> + </TD> + </TR> + <?php + if ($_GET['eq']>0) + { + echo" + <TR> + <TD class=desc> $lab_Field_site203_004 </TD> + <TD CLASS=desc_value> $sql_2 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site306_003 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inCablePis' required> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_013 </TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inCableEST'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_007 </TD> + <TD CLASS=desc_value><INPUT class='float_req' STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inCableBuyDate' SIZE='10' required></TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site306_002 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inCableInv'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_010</TD> + <TD CLASS=desc_value><textarea NAME=inCableAtt></textarea></TD> + </TR> + "; + } + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site306" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subCableSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site306Aeq.php b/sites/site306Aeq.php new file mode 100644 index 0000000..b204e6f --- /dev/null +++ b/sites/site306Aeq.php @@ -0,0 +1,47 @@ +<?php +if (!empty($_SESSION['site306_edit'])) +{ +?> + + <?php + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + ?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site306_002; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site208_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site208_002 ;?></TD> + </TR> + <?php + $wynik = mysql_query("select EQU_ID,EQU_NAME,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='CABLE') and EQU_STATUS='1' order by EQU_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["MCF_NAME"]; + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site306A&eq=$sql_1'".chr(34)."> + <TD class='field_left'>$sql_2</TD> + <TD class='field_center'>$sql_3</TD> + </TR> + "; + } + ?> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site306A" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + </div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site306E.php b/sites/site306E.php new file mode 100644 index 0000000..53658d9 --- /dev/null +++ b/sites/site306E.php @@ -0,0 +1,86 @@ +<?php +if (!empty($_SESSION['site306_edit'])) +{ +?> + +<?php + if (!empty($_GET['param'])) + $getParam = explode(',', $_GET['param']); + else + header("Location: ./?pg=site306"); + + +?> + + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + $wynik = mysql_query("select SES_ID,SES_EQU_ID,EQU_NAME,MCF_NAME,SES_VALUE,SES_STOCK,SES_PARAM1,SES_INVOICE_DATE,SES_INVOICE_NO,SES_DESCRIPTION from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_ID=".$getParam[1]); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["SES_ID"]; + $sql_2 = $r["SES_EQU_ID"]; + $sql_3 = $r["EQU_NAME"]; + $sql_4 = $r["MCF_NAME"]; + $sql_5 = $r["SES_VALUE"]; + $sql_7 = $r["SES_PARAM1"]; + $sql_8 = $r["SES_INVOICE_DATE"]; + $sql_9 = $r["SES_INVOICE_NO"]; + $sql_10 = $r["SES_DESCRIPTION"]; + } + ?> + +<div class="tag100"> +<FORM ACTION="./?pg=site306inf&eq=<?php echo $getParam[0];?>" METHOD="POST" id="AddNewCable" class="form_valid"> + <input type="hidden" name="inSesId" value="<?php echo $getParam[1]; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site306_004 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TR> + <TD class=desc><?php echo $lab_Field_site306_004 ;?> </TD> + <TD CLASS=desc_value><?php echo $sql_3 ;?> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site203_004 ;?> </TD> + <TD CLASS=desc_value><?php echo $sql_4 ;?> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site306_006 ;?> </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inCablePis' value="<?php echo $sql_5; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_013 ;?> </TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inCableEST' value="<?php echo $sql_7; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_007 ;?> </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inCableBuyDate' SIZE='10' value="<?php echo $sql_8; ?>"></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site306_002 ;?> </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inCableInv' value="<?php echo $sql_9; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_010 ;?> </TD> + <TD CLASS=desc_value><textarea NAME=inCableAtt><?php echo $sql_10; ?></textarea></TD> + </TR> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site306inf&eq=<?php echo $getParam[0];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subCableUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site306inf.php b/sites/site306inf.php new file mode 100644 index 0000000..0c28176 --- /dev/null +++ b/sites/site306inf.php @@ -0,0 +1,231 @@ +<?php +if (!empty($_SESSION['site306'])) +{ +?> + + +<?php +//aktualizacja danych o fakturze +if ($_POST['inSesId']>0 && $_POST['subCableUpdate']==$lab_ButtonName_Update) +{ + mysql_query("update seg_equipments_stock SET SES_DESCRIPTION='".$_POST['inCableAtt']."',SES_VALUE='".$_POST['inCablePis']."',SES_PARAM1='".$_POST['inCableEST']."',SES_INVOICE_NO='".$_POST['inCableInv']."',SES_INVOICE_DATE='".$_POST['inCableBuyDate']."',SES_AUDIT_CU='".$_SESSION['user']."',SES_AUDIT_CD=now() where SES_ID=".$_POST['inSesId']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + unset($maxDRSid); +} + + +?> + + + +<?php + $eqArray = sqlGetResAsArray("select EQU_ID,EQU_NAME,MCF_NAME,EQU_DESCRIPTION from seg_equipments left join seg_manufacturers on MCF_NAME=EQU_MCF_ID where EQU_ID=".$_GET['eq']); + $stockArray = sqlGetResAsArray("select sum(SES_VALUE) ILE,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) USED from seg_equipments_stock where SES_PARAM3='".$_SESSION['syndis_eq_stock']."' and SES_EQU_ID=".$_GET['eq']); + +?> + + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $eqArray[0]['EQU_NAME'] ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site306_004; ?></TD> + <TD CLASS="desc_value"><?php echo $eqArray[0]['EQU_NAME']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php echo $eqArray[0]['MCF_NAME']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site306_006; ?></TD> + <TD CLASS="desc_value"><?php echo $stockArray[0]['ILE']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site306_005; ?></TD> + <TD CLASS="desc_value"><?php echo (int) ($stockArray[0]['ILE'] - $stockArray[0]['USED']); ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site310_031; ?></TD> + <TD CLASS="desc_value"><?php echo $eqArray[0]['EQU_DESCRIPTION']; ?></TD> + </TR> + + + <?php + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq'])>0) + { + echo" + <TR> + <TD class='desc_equipment'>$lab_Field_site206_004</TD> + <TD CLASS='desc_value'>"; + $wynik = mysql_query("select EQF_ID,SUBSTRING_INDEX(EQF_FILE_NAME, '.', -1) ICO,EQF_FILE_NAME from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eq_1 = $r["EQF_ID"]; + $vICO = $r["ICO"]; + $eq_2 = $r["EQF_FILE_NAME"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo"<img src=$icoFile><a class='knowledge' href='./sites/eqdocgeneratefromdb.php?fno=$eq_1' target='_blank'>$eq_2</a><br/>"; + } + + echo"</TD> + </TR> + "; + + } + + ?> + </table> + </div> +</div> + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Field_site206_005 ;?></div> + <div class="tag_center"> + + <?php + $wynik = mysql_query("select EQF_FILE_TYPE,EQF_FILE from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["EQF_FILE_TYPE"]; + $param_2 = $r["EQF_FILE"]; + + $im = imagecreatefromstring($param_2); + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_206inf_01.png"; + imagePNG( $im,$fileName); + list($width, $height) = getimagesize($fileName); + if ($width>450) + echo"<img src='$fileName' width='450'>"; + else + echo"<img src='$fileName'>"; + + //$imgData = base64_encode($param_2); + //$src = 'data: $param_1;base64,'.$imgData; + //echo"<img src='$src' >"; + } + ?> + </div> +</div> + + + + + + + + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site307_001 ;?></div> + <div class="tag_center"> + + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site307_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site306_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_013 ;?></TD> + <TD class="label"><?php echo $lab_Field_site206_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site307_005 ;?></TD> + </TR> + + <?php + $invDetArray = sqlGetResAsArray("select SES_ID,SES_INVOICE_NO,SES_VALUE,SES_PARAM1,SES_DESCRIPTION,SES_INVOICE_DATE,SES_AUDIT_CU from seg_equipments_stock where SES_EQU_ID=".$_GET['eq']." and SES_PARAM3='".$_SESSION['syndis_eq_stock']."' order by SES_INVOICE_DATE desc"); + for ($i=0; $i<count($invDetArray); $i++) + { + + if (!empty($_SESSION['site306_edit'])) + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site306E&param=".$_GET['eq'].",".$invDetArray[$i]['SES_ID']."'".chr(34).">"; + else + echo "<tr>"; + + + echo" + <TD class='field_right'>".($i+1)."</TD> + <TD class='field_center'>".$invDetArray[$i]['SES_INVOICE_NO']."</TD> + <TD class='field_center'>".$invDetArray[$i]['SES_VALUE']."</TD> + <TD class='field_center'>".$invDetArray[$i]['SES_PARAM1']."</TD> + <TD class='field_center'>".$invDetArray[$i]['SES_DESCRIPTION']."</TD> + <TD class='field_center'>".$invDetArray[$i]['SES_INVOICE_DATE']."</TD> + <TD class='field_center'>".$invDetArray[$i]['SES_AUDIT_CU']."</TD> + </TR> + "; + } + ?> + </table> + </div> + </div> + + + + + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site307_002 ;?></div> + <div class="tag_center"> + + <table WIDTH="100%" class="tag"> + <TR> + <td class='label'>Lp.</td> + <td class='label'><?php echo $lab_Field_site810_003; ?></td> + <td class='label'><?php echo $lab_Field_site306_009; ?></td> + <td class='label'><?php echo $lab_Field_site306_003; ?></td> + </TR> + + <?php + $invDetArray = sqlGetResAsArray("select WLL_BARIERA,WLL_NAME,sum(SDE_VALUE) SUMA from seg_dev_equipments_rel left join seg_dev_resources on DRS_ID=SDE_DRS_DEV_ID and DRS_DEV_TYPE=12 left join seg_wells on WLL_ID=DRS_DEV_ID where SDE_TYPE=13 and SDE_DRS_EQU_ID=".$_GET['eq']." and SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' group by SDE_DRS_DEV_ID"); + for ($i=0; $i<count($invDetArray); $i++) + { + echo" + <TR> + <TD class='field_right'>".($i+1)."</TD> + <TD class='field_center'>".$invDetArray[$i]['WLL_BARIERA']."</TD> + <TD class='field_center'>".$invDetArray[$i]['WLL_NAME']."</TD> + <TD class='field_center'>".$invDetArray[$i]['SUMA']."</TD> + </TR> + "; + } + ?> + </table> + </div> + </div> + + + + + + + + + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + <div class="tag_buttons"> + <?php echo "<a href=./?pg=site306>"; ?><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site307A.php b/sites/site307A.php new file mode 100644 index 0000000..1975bea --- /dev/null +++ b/sites/site307A.php @@ -0,0 +1,93 @@ +<?php +if (!empty($_SESSION['site307_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['eq']>0) +{ + $wynik = mysql_query("select EQU_NAME,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_NAME"]; + $sql_2 = $r["MCF_NAME"]; + } +} +?> + +<div class="tag100"> +<FORM ACTION="?pg=site307" METHOD="POST" id="AddNewCable" class="form_valid"> + <input type="hidden" name="inCableID" value="<?php echo $_GET['eq']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site306_003 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site307_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inCableName" value="<?php echo $sql_1; ?>" readonly> <a class="tooltip_warning" HREF="?pg=site307Aeq"> + <img SRC="./images/search-icon.png" border="0"><span><?php echo $lab_Tag_site306_002; ?></SPAN></A> + </TD> + </TR> + <?php + if ($_GET['eq']>0) + { + echo" + <TR> + <TD class=desc> $lab_Field_site203_004 </TD> + <TD CLASS=desc_value> $sql_2 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site307_006 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inCablePis'> + + <select name='inUnitType'> + "; + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='SYS_UNITS' order by DIC_POL_LANG"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $dicID = $r["DIC_ID"]; + $dicNAME = $r["DIC_POL_LANG"]; + echo"<option value='".$dicID."'>".$dicNAME."</option>"; + } + + echo" + </select> + + </td> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_013 </TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inCableEST'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_007 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inCableBuyDate' value='".date('Y-m-d')."' SIZE='10'></TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site306_002 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inCableInv'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_010</TD> + <TD CLASS=desc_value><textarea NAME=inCableAtt></textarea></TD> + </TR> + "; + } + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site307" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subCableSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site307Aeq.php b/sites/site307Aeq.php new file mode 100644 index 0000000..97187e7 --- /dev/null +++ b/sites/site307Aeq.php @@ -0,0 +1,49 @@ +<?php +if (!empty($_SESSION['site307_edit'])) +{ +?> + + <?php + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + ?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site306_002; ?></div> + <div class="tag"><br/> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site207_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site207_004 ;?></TD> + </TR> + <?php + $wynik = mysql_query("select EQU_ID,EQU_NAME,MCF_NAME,EQU_PARAM_01,EQU_PARAM_02 from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_TYPE_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='ARMATURE') and EQU_STATUS='1' order by EQU_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["MCF_NAME"]; + $sql_4 = $r["EQU_PARAM_01"]; + $sql_5 = $r["EQU_PARAM_02"]; + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site307A&eq=$sql_1'".chr(34)."> + <TD class='field_left'>$sql_2</TD> + <TD class='field_center'>$sql_4</TD> + <TD class='field_center'>$sql_5</TD> + <TD class='field_left'>$sql_3</TD> + </TR> + "; + } + ?> + </table> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site307E.php b/sites/site307E.php new file mode 100644 index 0000000..aa1665a --- /dev/null +++ b/sites/site307E.php @@ -0,0 +1,81 @@ +<?php +if (!empty($_SESSION['site307_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + $wynik = mysql_query("select SES_ID,SES_EQU_ID,EQU_NAME,MCF_NAME,SES_VALUE,SES_STOCK,SES_PARAM1,SES_PARAM2,SES_INVOICE_DATE,SES_INVOICE_NO,SES_DESCRIPTION from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_ID=".$_GET['ses']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["SES_ID"]; + $sql_2 = $r["SES_EQU_ID"]; + $sql_3 = $r["EQU_NAME"]; + $sql_4 = $r["MCF_NAME"]; + $sql_5 = $r["SES_VALUE"]; + $sql_6 = $r["SES_STOCK"]; + $sql_7 = $r["SES_PARAM1"]; + $sql_8 = $r["SES_INVOICE_DATE"]; + $sql_9 = $r["SES_INVOICE_NO"]; + $sql_10 = $r["SES_DESCRIPTION"]; + $sql_11 = setDicName($r["SES_PARAM2"]); + } + ?> + +<div class="tag100"> +<FORM ACTION="?pg=site307inf" METHOD="POST" id="AddNewCable" class="form_valid"> + <input type="hidden" name="inSesId" value="<?php echo $sql_1; ?>"> + <input type="hidden" name="equ" value="<?php echo $sql_2; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site306_004 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TR> + <TD class=desc><?php echo $lab_Field_site307_001 ;?> </TD> + <TD CLASS=desc_value><?php echo $sql_3 ;?> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site203_004 ;?> </TD> + <TD CLASS=desc_value><?php echo $sql_4 ;?> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site307_007 ;?> </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inCablePis' value="<?php echo $sql_5; ?>"> <?php echo $sql_11;?> </TD> + </TR> + + + <TR> + <TD class=desc><?php echo $lab_Field_site303_013 ;?> </TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inCableEST' value="<?php echo $sql_7; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_007 ;?> </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inCableBuyDate' SIZE='10' value="<?php echo $sql_8; ?>"></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site306_002 ;?> </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inCableInv' value="<?php echo $sql_9; ?>"> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site303_010 ;?> </TD> + <TD CLASS=desc_value><textarea NAME=inCableAtt><?php echo $sql_10; ?></textarea></TD> + </TR> + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class="btn btn-info btn-sm" TYPE="SUBMIT" NAME="subCableUpdate" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subCableUpdate" VALUE="<?php echo $lab_ButtonName_Modify; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site307inf.php b/sites/site307inf.php new file mode 100644 index 0000000..051950b --- /dev/null +++ b/sites/site307inf.php @@ -0,0 +1,250 @@ +<?php +if (!empty($_SESSION['site307'])) +{ +?> + + +<?php + //edycja armatury - poszczególnej faktury. + if (!empty($_POST['equ'])) $_GET['equ'] = $_POST['equ']; + + if ($_POST['inSesId']>0 && $_POST['subCableUpdate']==$lab_ButtonName_Modify) + { + mysql_query("update seg_equipments_stock SET SES_DESCRIPTION='".$_POST['inCableAtt']."',SES_VALUE='".$_POST['inCablePis']."',SES_STOCK='".$_POST['inCableStock']."',SES_PARAM1='".$_POST['inCableEST']."',SES_INVOICE_NO='".$_POST['inCableInv']."',SES_INVOICE_DATE='".$_POST['inCableBuyDate']."',SES_AUDIT_CU='".$_SESSION['user']."',SES_AUDIT_CD=now() where SES_ID=".$_POST['inSesId']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + unset($maxDRSid); + } +?> + + + +<?php +//$wynik = mysql_query("select SES_ID,SES_EQU_ID,EQU_NAME,MCF_NAME,SES_VALUE,SES_STOCK,SES_PARAM1,SES_INVOICE_DATE,SES_INVOICE_NO,SES_DESCRIPTION from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_ID=".$_GET['ses']); +//$wynik = mysql_query("select EQU_NAME,EQU_PARAM_01,EQU_PARAM_02,MCF_NAME, sum(SES_VALUE) TOT_VAL, sum(SES_STOCK) STOCK_VAL,SES_PARAM2 from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='ARMATURE') and SES_EQU_ID=".$_GET['equ']." and SES_PARAM3 = '".$_SESSION['syndis_eq_stock']."'"); +$tmp307Array = sqlGetResAsArray("select SES_EQU_ID,EQU_NAME,EQU_PARAM_01,EQU_PARAM_02,MCF_NAME,sum(SES_VALUE) TOT_VAL,(select sum(SDE_VALUE) from seg_dev_equipments_rel where SDE_PARAM3='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_EQU_ID=SES_EQU_ID) TOT_STOCK from seg_equipments_stock,seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_EQU_ID=EQU_ID and SES_PARAM3='".$_SESSION['syndis_eq_stock']."' and SES_TYPE=15 and SES_EQU_ID=".$_GET['equ']); + +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $tmp307Array[0]['EQU_NAME'] ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site307_001; ?></TD> + <TD CLASS="desc_value"><?php echo $tmp307Array[0]['EQU_NAME']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php echo $tmp307Array[0]['MCF_NAME']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site307_007; ?></TD> + <TD CLASS="desc_value"><?php echo $tmp307Array[0]['TOT_VAL']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site307_008; ?></TD> + <TD CLASS="desc_value"><?php echo round($tmp307Array[0]['TOT_VAL'] - $tmp307Array[0]['TOT_STOCK'],2); ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site207_002; ?></TD> + <TD CLASS="desc_value"><?php echo $tmp307Array[0]['EQU_PARAM_01']; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site207_003; ?></TD> + <TD CLASS="desc_value"><?php echo $tmp307Array[0]['EQU_PARAM_02']; ?></TD> + </TR> + + <?php + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$tmp307Array[0]['SES_EQU_ID'])>0) + { + echo" + <TR> + <TD class='desc_equipment'>$lab_Field_site206_004</TD> + <TD CLASS='desc_value'>"; + $wynik = mysql_query("select EQF_ID,SUBSTRING_INDEX(EQF_FILE_NAME, '.', -1) ICO,EQF_FILE_NAME from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=".$tmp307Array[0]['SES_EQU_ID']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eq_1 = $r["EQF_ID"]; + $vICO = $r["ICO"]; + $eq_2 = $r["EQF_FILE_NAME"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo"<img src=$icoFile><a class='knowledge' href='./sites/eqdocgeneratefromdb.php?fno=$eq_1' target='_blank'>$eq_2</a><br/>"; + } + + echo"</TD> + </TR> + "; + + } + + ?> + </table> + </div> +</div> + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Field_site206_005 ;?></div> + <div class="tag_center"> + + <?php + $wynik = mysql_query("select EQF_FILE_TYPE,EQF_FILE from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=$sql_2"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["EQF_FILE_TYPE"]; + $param_2 = $r["EQF_FILE"]; + + $im = imagecreatefromstring($param_2); + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_206inf_01.png"; + imagePNG( $im,$fileName); + list($width, $height) = getimagesize($fileName); + if ($width>450) + echo"<img src='$fileName' width='450'>"; + else + echo"<img src='$fileName'>"; + + //$imgData = base64_encode($param_2); + //$src = 'data: $param_1;base64,'.$imgData; + //echo"<img src='$src' >"; + } + ?> + </div> +</div> + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site307_001 ;?></div> + <div class="tag_center"> + + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site307_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site307_007 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_013 ;?></TD> + <TD class="label"><?php echo $lab_Field_site307_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site206_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site307_005 ;?></TD> + + + </TR> + + <?php + $wynik = mysql_query("select SES_ID,SES_EQU_ID,EQU_NAME,MCF_NAME,SES_VALUE,SES_PARAM1,SES_PARAM2,SES_INVOICE_DATE,SES_INVOICE_NO,SES_DESCRIPTION,SES_AUDIT_CU,SES_AUDIT_CD from seg_equipments_stock left join seg_equipments on SES_EQU_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where SES_EQU_ID=".$_GET['equ']." and SES_PARAM3 = '".$_SESSION['syndis_eq_stock']."' order by SES_INVOICE_DATE desc"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $det_ses_id = $r["SES_ID"]; + $det_1 = $r["EQU_NAME"]; + $det_2 = $r["SES_VALUE"]; + $det_4 = $r["SES_PARAM1"]; + $det_5 = $r["SES_INVOICE_NO"]; + $det_6 = $r["SES_INVOICE_DATE"]; + $det_7 = $r["SES_DESCRIPTION"]; + $det_8 = $r["SES_AUDIT_CU"]; + $det_9 = $r["SES_AUDIT_CD"]; + if ($r["SES_PARAM2"]>0) + $sql_10 = setDicName($r["SES_PARAM2"]); + + + + + if (!empty($_SESSION['site307_edit'])) + echo"<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site307E&ses=$det_ses_id'".chr(34).">"; + else echo"<tr>"; + + echo" + <TD class='field_left'>$det_1</TD> + <TD class='field_center'>$det_2 $sql_10</TD> + <TD class='field_left'>$det_4</TD> + <TD class='field_left'>$det_5</TD> + <TD class='field_center'>$det_6</TD> + <TD class='field_left'>$det_7</TD> + <TD class='field_center'>$det_8</br>$det_9</TD> + </TR> + "; + } + + ?> + </table> + </div> + </div> + + + <div class="tag100"> + <div class="head_tag"> + <?php echo $lab_Tag_site307_002 ;?> + </div> + <div class="tag_center"> + <table WIDTH='100%' class='tag'> + <tr> + <td class='eq_label'>Lp.</td> + <td class='eq_label'>Nazwa</td> + <td class='eq_label'>Przypisany do</td> + <td class='eq_label'><?php echo $lab_Field_site307_006; ?></td> + + </tr> + + + <?php + $cnt=1; + $wynik1 = mysql_query("select EQU_ID,EQU_NAME,DRS_DEV_TYPE,DRS_DEV_ID,SDE_DRS_DEV_ID,SDE_VALUE from seg_dev_equipments_rel left join seg_dev_resources on SDE_DRS_DEV_ID=DRS_ID left join seg_equipments on EQU_ID=SDE_DRS_EQU_ID where SDE_DRS_EQU_ID=".$_GET['equ']." and SDE_PARAM3 = '".$_SESSION['syndis_eq_stock']."'"); + if($wynik1)while ($r1 = mysql_fetch_array($wynik1)) + { + $s1 = $r1["EQU_ID"]; + $s2 = $r1["EQU_NAME"]; + $s3 = $r1["DRS_DEV_TYPE"]; + $s4 = $r1["DRS_DEV_ID"]; // ID studni.piezometru - ID w poszczególnych tabelach + $s5 = $r1["SDE_DRS_DEV_ID"]; // ID studni/piezometru DRS_ID + $s6 = $r1["SDE_VALUE"]; // ID studni/piezometru DRS_ID + + if ($s3==12) + $obNAME = sqlStringValue("select WLL_NAME from seg_wells where WLL_ID=".$s4,"WLL_NAME"); + else + $obNAME = sqlStringValue("select SRP_NAME from seg_reservoirs_piezometers where SRP_ID=".$s4,"SRP_NAME"); + + if (strlen($obNAME)==0) $obNAME="Brak powiązanego obiektu"; + + echo" + <tr> + <td class='field_center'>$cnt</td> + <td class='field_left'>$s2</td> + <td class='field_left'>$obNAME</td> + <td class='field_right'>$s6</td> + </tr> + + "; + $cnt++; + } + + ?> + + </table> + + + + </div> + </div> + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site308.php b/sites/site308.php new file mode 100644 index 0000000..f0c4675 --- /dev/null +++ b/sites/site308.php @@ -0,0 +1,196 @@ +<?php +if (!empty($_SESSION['site308'])) +{ +?> + + <?php + //dodawanie nowego urzÄ…dzenia na stan. + if ($_POST['inEquipID']>0 && $_POST['subEquipSave']==$lab_ButtonName_Save) + { + //sprawdza, czy nie istenie juĹĽ takie urzÄ…dzenie z takim samym numerem seryjnym + if (sqlValue("select count(1) from seg_dev_resources where DRS_DEV_TYPE=14 and DRS_SN_NUMBER='".$_POST['inEquipSN']."'")==0) + { + $query = "INSERT INTO seg_dev_resources SET DRS_DEV_ID=".$_POST['inEquipID'].",DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='EQUIPMENTS'), DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."'"; + if (strlen($_POST['inEquipSN'])>0) $query .=" ,DRS_SN_NUMBER='".$_POST['inEquipSN']."'"; + if (strlen($_POST['inEquipBuyDate'])>0) $query .=" ,DRS_BUY_DATE='".$_POST['inEquipBuyDate']."'"; + if (strlen($_POST['inEquipDevRes'])>0) $query .=" ,DRS_RESOURCES_DIC_ID=".$_POST['inEquipDevRes']; + if (strlen($_POST['inEquipAtt'])>0) $query .=" ,DRS_DEV_ATTENTION='".$_POST['inEquipAtt']."'"; + $query .=",DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"; + mysql_query($query); + + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + + if (strlen($_POST['inEquipEST'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inEquipEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + if (strlen($_POST['inEquipSCOPE'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SCOPE'),DRD_VALUE='".$_POST['inEquipSCOPE']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + //dla sondy SGP-21 + if (strlen($_POST['inSCOPE_PP'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SGP_21_PP'),DRD_VALUE='".$_POST['inSCOPE_PP']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + if (strlen($_POST['inSCOPE_HH'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SGP_21_HH'),DRD_VALUE='".$_POST['inSCOPE_HH']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + if (strlen($_POST['inWire'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SG_P_21_WIRE'),DRD_VALUE='".$_POST['inWire']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=$maxDRSid"); + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxDRSid); + } + else + echo"<div class='actionERROR'>Urządzenie nie zostało zapisane w systemie, gdyż istnieje już inne o takim samym numerze seryjnym: ".$_POST['inEquipSN'].". <a style='color: #ffff00; text-decoration: none;' href='javascript:history.back()'>Spróbuj ponownie.</a></div>"; + } + + // usuwanie istniejÄ…cego urzÄ…dzenia + if ($_GET['dev']>0 && $_GET['act']=="del") + { + //sprawdza, czy urzÄ…dzenie nie jest powiÄ…zane z jakimĹ› obiektem + if (sqlValue("select count(1) from seg_dev_equipments_rel where SDE_DRS_EQU_ID=".$_GET['dev'])==0) + { + mysql_query("DELETE FROM seg_dev_resources WHERE DRS_ID=".$_GET['dev']); + mysql_query("DELETE FROM seg_dev_resources_his WHERE DRS_ID=".$_GET['dev']); + echo"<div class='actionOK'>Urządzenie zostało pomyślnie usunięte z systemu.</div>"; + + } + else + echo"<div class='actionERROR'>Brak możliwości usunięcia urządzenia, gdyż jest ono powiązane z innym obiektem.</div>"; + + } + + ?> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site308_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label">Ilość</TD> + + </TR> + + <?php + $wynik = mysql_query("select EQU_ID,count(EQU_ID) ILOSC,EQU_NAME,MCF_NAME from seg_dev_resources left join seg_equipments on DRS_DEV_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='EQUIPMENTS') and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' group by EQU_ID,EQU_NAME,MCF_NAME order by EQU_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["ILOSC"]; + $sql_3 = $r["EQU_NAME"]; + $sql_4 = $r["MCF_NAME"]; + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site308&eq=$sql_1'".chr(34)."> + <TD class='field_left'>$sql_3</TD> + <TD class='field_center'>$sql_4</TD> + <TD class='field_center'>$sql_2</TD> + </TR> + "; + + + $cnt=1; + if ($_GET['eq']>0 && $_GET['eq']==$sql_1) + { + echo" + <tr> + <td colspan='3' class='eq_details'> + <table WIDTH='100%' class='tag'> + <tr> + <td class='eq_label'>Lp.</td> + <td class='eq_label'>Nazwa</td> + <td class='eq_label'>Nr seryjny</td> + <td class='eq_label'>Przypisany do</td> + <td class='eq_label'>Status</td> + </tr> + + + "; + + $wynik1 = mysql_query("select DRS_ID,SDE_DRS_DEV_ID,DRS_SN_NUMBER,DRS_RESOURCES_DIC_ID from seg_dev_resources left join seg_dev_equipments_rel on DRS_ID=SDE_DRS_EQU_ID where DRS_DEV_TYPE=14 and DRS_DEPARTMENT = '".$_SESSION['syndis_eq_stock']."' and DRS_DEV_ID=".$_GET['eq']." order by DRS_SN_NUMBER"); + if($wynik1)while ($r1 = mysql_fetch_array($wynik1)) + { + $obNAME=null;$dID2=null; + + $sW1 = $r1["DRS_ID"]; + $sW2 = $r1["SDE_DRS_DEV_ID"]; + $sW3 = $r1["DRS_SN_NUMBER"]; + $sW4 = $r1["DRS_RESOURCES_DIC_ID"]; $sW4=setDicName($sW4); + + $wynik2 = mysql_query("select DRS_DEV_ID,DRS_DEV_TYPE from seg_dev_equipments_rel left join seg_dev_resources on DRS_ID=SDE_DRS_DEV_ID where SDE_DRS_EQU_ID=".$sW1); + if($wynik2)while ($r2 = mysql_fetch_array($wynik2)) + { + + $dID2 = $r2["DRS_DEV_ID"]; + $dTP2 = $r2["DRS_DEV_TYPE"]; + + if ($dTP2==12) + $obNAME = sqlStringValue("select WLL_NAME from seg_wells where WLL_ID=".$dID2,"WLL_NAME"); + else + $obNAME = sqlStringValue("select SRP_NAME from seg_reservoirs_piezometers where SRP_ID=".$dID2,"SRP_NAME"); + + } + + $bgcol=null; + if (strlen($obNAME)==0) + { + $obNAME="Brak powiązanego obiektu"; + $bgcol = "background-color: rgba(255, 255, 0, 0.05);"; + } + + echo" + <tr STYLE='cursor: pointer; ".$bgcol."' onclick=".chr(34)."document.location.href='?pg=site308inf&dev=$sW1'".chr(34)."> + <td class='field_center'>$cnt</td> + <td class='field_left'>$sql_3</td> + <td class='field_left'>$sW3</td> + <td class='field_center'>".$obNAME."</td> + <td class='field_center'>$sW4</td> + </tr> + "; + $cnt++; + } + + echo" + </table> + </td> + </tr> + "; + } + + } + ?> + </table> + </div> + +</div> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + + <?php + if (!empty($_SESSION['site308_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site308A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> +</div> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + + diff --git a/sites/site308A.php b/sites/site308A.php new file mode 100644 index 0000000..dafd32b --- /dev/null +++ b/sites/site308A.php @@ -0,0 +1,125 @@ +<?php +if (!empty($_SESSION['site308_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['eq']>0) +{ + $wynik = mysql_query("select EQU_NAME,MCF_NAME from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_NAME"]; + $sql_2 = $r["MCF_NAME"]; + } +} +?> + +<div class="tag100"> +<FORM ACTION="?pg=site308" METHOD="POST"> + <input type="hidden" name="inEquipID" value="<?php echo $_GET['eq']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site308_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site308_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text75_req" TYPE="TEXT" NAME="inEquipName" value="<?php echo $sql_1; ?>" readonly> <a class="tooltip_warning" HREF="?pg=site308Aeq"> + <img SRC="./images/search-icon.png" border="0"><span><?php echo $lab_Tag_site308_003; ?></SPAN></A> + </TD> + </TR> + <?php + if ($_GET['eq']>0) + { + echo" + <TR> + <TD class=desc> $lab_Field_site203_004 </TD> + <TD CLASS=desc_value> $sql_2 </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_006 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inEquipSN'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_013 </TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inEquipEST'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_007 </TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inEquipBuyDate' SIZE='10'></TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_008 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inEquipDevRes', 'DEV_RESOURCES'); echo"</TD> + </TR> + + + "; + if(strstr($sql_1,"SGP")) + { + echo" + <TR> + <TD class=desc> $lab_Field_site303_015 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inSCOPE_PP'> + <span style='color: #FF0000; font-style: italic; line-height: 20px;'>&nbsp;&nbsp;&nbsp;Uwaga! Należy wprowadzić górną wartość zakresu (np.: 500).</span> + </td> + + </TR> + <TR> + <TD class=desc> $lab_Field_site303_016 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inSCOPE_HH'> + <span style='color: #FF0000; font-style: italic; line-height: 20px;'>&nbsp;&nbsp;&nbsp;Uwaga! Należy wprowadzić górną wartość zakresu (np.: 100).</span> + </TD> + </TR> + "; + } + else + { + echo" + <TR> + <TD class=desc> $lab_Field_site303_014 </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inEquipSCOPE'> </TD> + </TR> + "; + } + + if(strstr($sql_1,"SGP") || strstr($sql_1,"SG") || strstr($sql_1,"PA")) + { + echo" + <TR> + <TD class=desc> $lab_Field_site303_017 </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inWire'> </TD> + </TR> + "; + } + + + + + echo" + <TR> + <TD class=desc> $lab_Field_site303_010</TD> + <TD CLASS=desc_value><textarea NAME=inEquipAtt></textarea></TD> + </TR> + "; + } + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class='btn btn-info btn-sm' TYPE="SUBMIT" NAME="subEquipSave" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subEquipSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site308Aeq.php b/sites/site308Aeq.php new file mode 100644 index 0000000..a99e3d1 --- /dev/null +++ b/sites/site308Aeq.php @@ -0,0 +1,61 @@ +<?php +if (!empty($_SESSION['site308_edit'])) +{ +?> + + <?php + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + ?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site308_003; ?></div> + <div class="tag"><br/> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site208_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_017 ;?></TD> + <TD class="label"><?php echo $lab_Field_site208_002 ;?></TD> + </TR> + <?php + $wynik = mysql_query("select EQU_ID,EQU_NAME,MCF_NAME,EQU_PARAM_02 from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where EQU_PARAM_03='".$_SESSION['lang']."' and EQU_STATUS='1' and EQU_TYPE_ID=14 order by EQU_PARAM_02,EQU_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["MCF_NAME"]; + $sql_4 = $r["EQU_PARAM_02"]; $sql_4 = sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=$sql_4", $decFieldLang); + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site308A&eq=$sql_1'".chr(34)."> + <TD class='field_left'>$sql_2</TD> + <TD class='field_center'>$sql_4</TD> + <TD class='field_center'>$sql_3</TD> + </TR> + "; + } + $wynik = mysql_query("select EQU_ID,EQU_NAME,MCF_NAME,EQU_PARAM_02 from seg_equipments left join seg_manufacturers on EQU_MCF_ID=MCF_ID where (LENGTH(EQU_PARAM_03)=0 or EQU_PARAM_03 is null) and EQU_STATUS='1' and EQU_TYPE_ID=14 order by EQU_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["MCF_NAME"]; + $sql_4 = $r["EQU_PARAM_02"]; $sql_4 = sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=$sql_4", $decFieldLang); + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site308A&eq=$sql_1'".chr(34)."> + <TD class='field_left'>$sql_2</TD> + <TD class='field_center'>$sql_4</TD> + <TD class='field_center'>$sql_3</TD> + </TR> + "; + } + ?> + </table> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site308E.php b/sites/site308E.php new file mode 100644 index 0000000..b2e303a --- /dev/null +++ b/sites/site308E.php @@ -0,0 +1,137 @@ +<?php +if (!empty($_SESSION['site308_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + +<?php +if ($_GET['eq']>0) +{ + $wynik = mysql_query("select DRS_ID,EQU_NAME,MCF_NAME,DRS_SN_NUMBER,DRS_BUY_DATE,DRS_RESOURCES_DIC_ID,DRS_DEV_ATTENTION from seg_dev_resources left join seg_equipments on DRS_DEV_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where DRS_ID=".$_GET['eq']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eqName = $r["EQU_NAME"]; + $mcName = $r["MCF_NAME"]; + + $snNO = $r["DRS_SN_NUMBER"]; + $buyDate = $r["DRS_BUY_DATE"]; + $dicResID = $r["DRS_RESOURCES_DIC_ID"]; + $obAtt = $r["DRS_DEV_ATTENTION"]; + $devID = $r["DRS_ID"]; +// $_____ = $r["_________"]; + } +} +?> + +<div class="tag100"> +<FORM ACTION="?pg=site308inf" METHOD="POST"> + <input type="hidden" name="dev" value="<?php echo $_GET['eq']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site308_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site308_001; ?></TD> + <TD CLASS=desc_value><?php echo $eqName; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site203_004; ?></TD> + <TD CLASS=desc_value><?php echo $mcName; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_006; ?></TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inEquipSN' value="<?php echo $snNO;?>" > </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_013; ?></TD> + <TD CLASS=desc_value> <INPUT TYPE='TEXT' NAME='inEquipEST' value="<?php echo getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','ASSET',$devID); ?>"> </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_007; ?></TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inEquipBuyDate' SIZE='10' value="<?php echo $buyDate;?>" ></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site303_008; ?></TD> + <TD CLASS=desc_value> + <?php + echo"<select name='inEquipDevRes'>"; + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='DEV_RESOURCES'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($resID==$dicResID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + echo"</select>"; + ?> + </TD> + </TR> + + <?php + if(strstr($eqName,"SGP")) + { + echo" + <TR> + <TD class=desc> $lab_Field_site303_015 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inSCOPE_PP' value='".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SGP_21_PP',$devID)."'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site303_016 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inSCOPE_HH' value='".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SGP_21_HH',$devID)."'> </TD> + </TR> + "; + } + else + { + echo" + <TR> + <TD class=desc> $lab_Field_site303_014 </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inEquipSCOPE' value='".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SCOPE',$devID)."'></TD> + </TR> + "; + } + + + //długość kabla dla sond SG i SGP + if(strstr($eqName,"SGP") || strstr($eqName,"SG") || strstr($eqName,"PA")) + { + echo" + <TR> + <TD class=desc> $lab_Field_site303_017 </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inWire' value='".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SG_P_21_WIRE',$devID)."'> </TD> + </TR> + "; + } + + + + + + ?> + + <TR> + <TD class="desc"><?php echo $lab_Field_site303_010; ?></TD> + <TD CLASS=desc_value><textarea NAME=inEquipAtt><?php echo $obAtt; ?></textarea></TD> + </TR> + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class='btn btn-info btn-sm' TYPE="SUBMIT" NAME="subEquipSave" VALUE="<?php echo $lab_ButtonName_Cancel; ?>"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subEquipSave" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site308inf.php b/sites/site308inf.php new file mode 100644 index 0000000..5f7a2a9 --- /dev/null +++ b/sites/site308inf.php @@ -0,0 +1,288 @@ +<?php +if (!empty($_SESSION['site308'])) +{ +?> + + +<?php +if(!empty($_POST['dev'])) $_GET['dev'] = $_POST['dev']; + +//Aktualizacja danych +// ======================================================================================================== +if ($_POST['dev']>0 && $_POST['subEquipSave']==$lab_ButtonName_Update) +{ + $query = "update seg_dev_resources SET DRS_AUDIT_DATE=now()"; + if (strlen($_POST['inEquipSN'])>0) $query .=" ,DRS_SN_NUMBER='".$_POST['inEquipSN']."'"; + if (strlen($_POST['inEquipBuyDate'])>0) $query .=" ,DRS_BUY_DATE='".$_POST['inEquipBuyDate']."'"; + if (strlen($_POST['inEquipDevRes'])>0) $query .=" ,DRS_RESOURCES_DIC_ID=".$_POST['inEquipDevRes']; + if (strlen($_POST['inEquipAtt'])>0) $query .=" ,DRS_DEV_ATTENTION='".$_POST['inEquipAtt']."'"; + $query .=",DRS_AUDIT_USR='".$_SESSION['user']."' where DRS_ID=".$_POST['dev']; + mysql_query($query); + + if (strlen($_POST['inEquipEST'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_VALUE='".$_POST['inEquipEST']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + if (strlen($_POST['inEquipSCOPE'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SCOPE'),DRD_VALUE='".$_POST['inEquipSCOPE']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + //dla sondy SGP-21 + // =================================================================== + //sprawdza, czy jest przypisana studnia do sondy + if (strlen($_POST['inSCOPE_PP'])>0 || strlen($_POST['inSCOPE_HH'])>0) + $tpmWellID = sqlStringValue("select DRS_DEV_ID from seg_dev_equipments_rel left join seg_dev_resources on DRS_ID=SDE_DRS_DEV_ID where SDE_DRS_EQU_ID=".$_POST['dev'],"DRS_DEV_ID"); + + if (strlen($_POST['inSCOPE_PP'])>0) + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SGP_21_PP'),DRD_VALUE='".$_POST['inSCOPE_PP']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("UPDATE seg_wells SET WLL_PP_SCOPE='".$_POST['inSCOPE_PP']."' WHERE WLL_ID=".$tpmWellID); + + } + if (strlen($_POST['inSCOPE_HH'])>0) + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SGP_21_HH'),DRD_VALUE='".$_POST['inSCOPE_HH']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("UPDATE seg_wells SET WLL_HH_SCOPE='".$_POST['inSCOPE_HH']."' WHERE WLL_ID=".$tpmWellID); + } + + if (strlen($_POST['inWire'])>0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='SG_P_21_WIRE'),DRD_VALUE='".$_POST['inWire']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // =================================================================== + + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_POST['dev']); +} +// ======================================================================================================== + + + + +$wynik = mysql_query("select DRS_ID,EQU_ID,DRS_SN_NUMBER,DRS_BUY_DATE,EQU_NAME,MCF_NAME,EQU_DESCRIPTION from seg_dev_resources left join seg_equipments on DRS_DEV_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID where DRS_ID=".$_GET['dev']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["EQU_DESCRIPTION"]; $sql_3= str_replace(".", ",", $sql_3); + $sql_4 = $r["MCF_NAME"]; + $sql_DRSid = $r["DRS_ID"]; + $sql_SNo = $r["DRS_SN_NUMBER"]; + $sql_BuyDate = $r["DRS_BUY_DATE"]; + } +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site208_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site802_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS="desc_value"><?php echo str_replace(chr(13), "<br/>", $sql_3); ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site303_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_SNo; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site303_013; ?></TD> + <TD CLASS="desc_value"><?php echo getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','ASSET',$sql_DRSid); ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site303_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_BuyDate; ?></TD> + </TR> + + + <?php + if (strstr($sql_2,"SGP")) + { + echo" + <TR> + <TD class='desc_equipment'>".$lab_Field_site303_015."</TD> + <TD CLASS='desc_value'>".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SGP_21_PP',$sql_DRSid)."</TD> + </TR> + <TR> + <TD class='desc_equipment'>".$lab_Field_site303_016."</TD> + <TD CLASS='desc_value'>".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SGP_21_HH',$sql_DRSid)."</TD> + </TR> + "; + + } + else + { + echo" + <TR> + <TD class='desc_equipment'>".$lab_Field_site303_014."</TD> + <TD CLASS='desc_value'>".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SCOPE',$sql_DRSid)."</TD> + </TR> + "; + } + + + if (strstr($sql_2,"SGP") || strstr($sql_2,"SG") || strstr($sql_2,"PA")) + { + echo" + <TR> + <TD class='desc_equipment'>".$lab_Field_site303_017."</TD> + <TD CLASS='desc_value'>".getLastValueFromDevResourceDetail('DEV_RESOURCES_DETAIL','SG_P_21_WIRE',$sql_DRSid)."</TD> + </TR> + "; + + } + + + + + ?> + + + <?php + if (sqlValue("select count(1) from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=$sql_1")>0) + { + echo" + <TR> + <TD class='desc'>$lab_Field_site206_004</TD> + <TD CLASS='desc_value'>"; + $wynik = mysql_query("select EQF_ID,SUBSTRING_INDEX(EQF_FILE_NAME, '.', -1) ICO,EQF_FILE_NAME from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('application') and EQF_EQU_ID=$sql_1"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eq_1 = $r["EQF_ID"]; + $vICO = $r["ICO"]; + $eq_2 = $r["EQF_FILE_NAME"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo"<img src=$icoFile><a class='knowledge' href='./sites/eqdocgeneratefromdb.php?fno=$eq_1' target='_blank'>$eq_2</a><br/>"; + } + + + + + echo"</TD> + </TR> + + + "; + + } + + ?> + </table> + </div> + + + <?php + $wynik = mysql_query("select DRS_DEV_ID,DRS_DEV_TYPE,SDE_DRS_DEV_ID from seg_dev_equipments_rel left join seg_dev_resources on DRS_ID=SDE_DRS_DEV_ID where SDE_DRS_EQU_ID=".$sql_DRSid); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $obID = $r["DRS_DEV_ID"]; + $obTYPE = $r["DRS_DEV_TYPE"]; + $obDrsIS = $r["SDE_DRS_DEV_ID"]; + + } + + if ($obTYPE==12) + $obNAME = sqlStringValue("select WLL_NAME from seg_wells where WLL_ID=".$obID,"WLL_NAME"); + else + $obNAME = sqlStringValue("select SRP_NAME from seg_reservoirs_piezometers where SRP_ID=".$obID,"SRP_NAME"); + + if (strlen($obNAME)==0) $obNAME="Brak powiązanego obiektu"; + + ?> + + + <div class="head_tag"> <?php echo $lab_Tag_site308_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_equipment"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$obTYPE,"DIC_POL_LANG"); ?></TD> + + <?php + if ($obTYPE==12) + echo"<td STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site401mark&dev=$obDrsIS'".chr(34)." CLASS='desc_value'>$obNAME</td>"; + else if ($obTYPE==600) + echo"<td STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site402inf&dev=$obDrsIS'".chr(34)." CLASS='desc_value'>$obNAME</td>"; + else if ($obTYPE==601) + echo"<td STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site404inf&dev=$obDrsIS'".chr(34)." CLASS='desc_value'>$obNAME</td>"; + else + echo"<td CLASS='desc_value'>$obNAME</td>"; + ?> + + + + </TR> + </TABLE> + </div> + + + +</div> + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Field_site206_005 ;?></div> + <div class="tag_center"> + + <?php + $wynik = mysql_query("select EQF_FILE_TYPE,EQF_FILE from seg_equipments_files where LOWER(SUBSTRING_INDEX(EQF_FILE_TYPE, '/', 1))=lower('image') and EQF_EQU_ID=$sql_1"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $param_1 = $r["EQF_FILE_TYPE"]; + $param_2 = $r["EQF_FILE"]; + + $im = imagecreatefromstring($param_2); + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_308inf_01.png"; + imagePNG( $im,$fileName); + list($width, $height) = getimagesize($fileName); + if ($width>450) + echo"<img src='$fileName' width='450'>"; + else + echo"<img src='$fileName'>"; + + //$imgData = base64_encode($param_2); + //$src = 'data: $param_1;base64,'.$imgData; + //echo"<img src='$src' >"; + } + ?> + </div> +</div> + + + + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + <div class="tag_buttons"> + <?php echo "<a href=?pg=site308>"; ?><INPUT class='btn btn-info btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + + <?php if (!empty($_SESSION['site308_edit'])) { ?> + <a href="?pg=site308&dev=<?php echo $_GET['dev']; ?>&act=del" onclick="return confirm('Jesteś pewien, że chcesz usunąć?');"><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='<?php echo$lab_ButtonName_Delete; ?>'></a> + <?php echo "<a href=?pg=site308E&eq=".$_GET['dev'].">"; ?><INPUT class='btn btn-success btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Modify; ?>"></A> + <?php } ?> + + </div> +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site309.php b/sites/site309.php new file mode 100644 index 0000000..da72909 --- /dev/null +++ b/sites/site309.php @@ -0,0 +1,279 @@ +<?php +if (!empty($_SESSION['site309'])) +{ +?> + <?php + if (!empty($_GET['dev'])) $_GET['dev'] = $_POST['dev']; + + // Dodawanie nowego piezometru + if (!empty($_POST['inRePieName']) && $_POST['subRePieSave']==$lab_ButtonName_Save ) + { + $ujName = sqlStringValue("select SWI_NAME from seg_water_intakes where SWI_ID=".$_POST['inPieBariera'],"SWI_NAME"); + + mysql_query("INSERT INTO seg_reservoirs_piezometers SET SRP_NAME='".$_POST['inRePieName']."',SRP_SWI_ID=".$_POST['inPieBariera'].",SRP_BARIERA='".$ujName."',SRP_TYPE_DIC_ID=601,SRP_LATITUDE='".getFloatValue($_POST['inRePieLat'])."',SRP_LONGITUDE='".getFloatValue($_POST['inRePieLong'])."', SRP_SYS_TYPE='".$_POST['inPieSysType']."'"); + $maxSRPid = sqlValue("select max(SRP_ID) from seg_reservoirs_piezometers"); + //mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=$maxSRPid,DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER'),DRS_SN_NUMBER='".$_POST['inRePieSN']."',DRS_BUY_DATE='".$_POST['inRePieBuyDate']."',DRS_STATUS_DIC_ID=".$_POST['inRePieStatus'].",DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=$maxSRPid,DRS_DEV_TYPE=601,DRS_SN_NUMBER='".$_POST['inRePieSN']."',DRS_BUY_DATE=now(),DRS_AVAILABLE_DATE=now(),DRS_STATUS_DIC_ID=3,DRS_RESOURCES_DIC_ID=".$_POST['inRePieStatus'].",DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."',DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + + $maxDRSid = sqlValue("select max(DRS_ID) from seg_dev_resources"); + + //poziomy wody - położenie + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$maxDRSid.",DRD_VALUE='".getFloatValue($_POST['inRePieRepair'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='REPAIR_LEVEL'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); +// mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$maxDRSid.",DRD_VALUE='".str_replace(",",".",$_POST['inRePieFlUp'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_UP'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); +// mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$maxDRSid.",DRD_VALUE='".str_replace(",",".",$_POST['inRePieFlDown'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_DOWN'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // środek trwały + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".$_POST['inRePieAsset']."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // głębokość + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".getFloatValue($_POST['inRePieDepth'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DEPTH'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".getFloatValue($_POST['inRePieDepth'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LS'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // średnica + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".getFloatValue($_POST['inRePieDiameter'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DIAMETER'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".getFloatValue($_POST['inRePieDiameter'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='DST'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // dodaje wartość początkową lustra wody dla piezometru - PUSTY głębokość dziury + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='".getFloatValue($_POST['inRePieDepth'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_PARAMETERS' and DIC_NAME='WATER_LEVEL'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // dodaje wartość początkową zasilania - NIEPODŁĄCZONY ZERO + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$maxDRSid,DRD_VALUE='0',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_PARAMETERS' and DIC_NAME='VOLTAGE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // sonda + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$maxDRSid.",DRD_VALUE='".getFloatValue($_POST['inSonda'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='LPM'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + //dodaje do Whole cards + mysql_query("INSERT INTO seg_object_hole_cards SET OHC_DRS_ID=".$maxDRSid.",OHC_UJ='".$ujName."',OHC_NAME='".$_POST['inRePieName']."',OHC_DATA_ODDANIA=now(),OHC_DL_GEOGR='".getFloatValue($_POST['inRePieLat'])."',OHC_SZER_GEOGR='".getFloatValue($_POST['inRePieLong'])."',OHC_PLC='".$_SESSION['syndis_eq_stock']."'"); + + + + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + + // Aktualizacja zbiornika + if (!empty($_POST['inRePieName']) && $_POST['subRePieUpdate']==$lab_ButtonName_Update ) + { + mysql_query("update seg_reservoirs_piezometers SET SRP_MCF_ID=".$_POST['inRePieNManufID'].",SRP_NAME='".$_POST['inRePieName']."',SRP_TYPE_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER'),SRP_LATITUDE='".getFloatValue($_POST['inRePieLat'])."',SRP_LONGITUDE='".getFloatValue($_POST['inRePieLong'])."' where SRP_ID=".$_POST['sprid']); + mysql_query("update seg_dev_resources SET DRS_SN_NUMBER='".$_POST['inRePieSN']."',DRS_BUY_DATE='".$_POST['inRePieBuyDate']."',DRS_STATUS_DIC_ID=".$_POST['inRePieStatus'].",DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_POST['dev']); + + //poziomy wody - położenie + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".getFloatValue($_POST['inRePieMaxAcc'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_ACCEPTABLE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".getFloatValue($_POST['inRePieMaxWar'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MAX_WARNING'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".getFloatValue($_POST['inRePieMinWar'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_WARNING'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".getFloatValue($_POST['inRePieMinAcc'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_WATER_LEVEL' and DIC_NAME='MIN_ACCEPTABLE'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // środek trwały + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".$_POST['inRePieAsset']."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // głębokość + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".getFloatValue($_POST['inRePieDepth'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DEPTH'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // średnica + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".getFloatValue($_POST['inRePieDiameter'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DIAMETER'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + + // zamiana piezometru w studnię + if (!empty($_GET['piezo2stu'])) + { + //piezo2stu=2840,a78482ce76496fcf49085f2190e675b4,piezo2stu + unset($piezo2stuArray); + $piezo2stuArray = explode(',',$_GET['piezo2stu']); + if ($piezo2stuArray[1]==md5($piezo2stuArray[0]) && $piezo2stuArray[2]=='piezo2stu') + { + unset($piezoArray); + $piezoArray = sqlGetResAsArray("select * from seg_reservoirs_piezometers,seg_dev_resources where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and DRS_ID=".$piezo2stuArray[0]); + + // zakłada nową studnie + if (sqlValue("select count(*) from seg_wells where WLL_NAME='".$piezoArray[0]['SRP_NAME']."'")==0) + { + mysql_query("INSERT INTO seg_wells SET WLL_SWI_ID=".$piezoArray[0]['SRP_SWI_ID'].",WLL_BARIERA='".$piezoArray[0]['SRP_BARIERA']."',WLL_NAME='".$piezoArray[0]['SRP_NAME']."',WLL_CAT_DIC_ID=20,WLL_LATITUDE='".$piezoArray[0]['SRP_LATITUDE']."',WLL_LONGITUDE='".$piezoArray[0]['SRP_LONGITUDE']."',WLL_PP_SCOPE='500'"); + $newID = getMaxIDfromMySqlTable('seg_wells'); + mysql_query("UPDATE seg_dev_resources SET DRS_DEV_ID=".$newID.",DRS_DEV_TYPE=12,DRS_STATUS_DIC_ID=3,DRS_RESOURCES_DIC_ID=902,DRS_AUDIT_USR='przekształcenie - ".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$piezo2stuArray[0]); + } + else // aktualizuje istniejącą + { + unset($curWell); + $curWell = sqlGetResAsArray("select WLL_ID from seg_wells where WLL_NAME='".$piezoArray[0]['SRP_NAME']."'"); + mysql_query("UPDATE seg_dev_resources SET DRS_DEV_ID=".$curWell[0]['WLL_ID'].",DRS_DEV_TYPE=12,DRS_STATUS_DIC_ID=3,DRS_RESOURCES_DIC_ID=902,DRS_AUDIT_USR='przekształcenie - ".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$piezo2stuArray[0]); + unset($curWell); + + } + echo"<div class='actionOK'>Piezometr został pomyślnie przekształcony w studnię.</div>"; + } + unset($piezo2stuArray); + } + + + + + + + + + if (!$_POST['sr_status']) $_POST['sr_status']=3; +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site309_input'] = $_POST['sr_well']; + ?> + + + + + + <form action="./?pg=site309&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Piezometr:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site309_input'];?>"></td> + <td style="width: 10px;"></td> + <td>status:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID in (3,4)"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszystkie</option>"; + else + echo"<option value='100'>Wszystkie</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + Pokaż wszystkie</td> + </tr> + </table> + </div> + </form> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site309_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Tag_site309_003 ;?></TD> + <td class="label"><?php echo $lab_Field_site301_014 ;?></td> + <td class="label"><?php echo $lab_Field_site802_002 ;?></td> + + <td class="label"><?php echo $lab_Field_site302_004 ;?></td> + <td class="label"><?php echo $lab_Tag_site302_003 ;?></td> + <td class="label">Sterowanie</td> + + </TR> + + <?php + + if (empty($_SESSION['site309_array']) || $_POST['sub_search']=='Szukaj') + { + $query="select DRS_ID,SRP_MCF_ID,SRP_NAME,SRP_BARIERA,DRS_SN_NUMBER,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,SRP_SYS_TYPE from seg_dev_resources,seg_reservoirs_piezometers where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and DRS_DEPARTMENT='".$_SESSION['eq_stock_param3_1']."'and SRP_NAME like '%".$_POST['sr_well']."%'"; + + if($_POST['sr_status']!=100) $query.=" and DRS_STATUS_DIC_ID=".$_POST['sr_status']; + $query .= " order by SRP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'drs_id' => $r["DRS_ID"], + 'name' => $r["SRP_NAME"], + 'bariera' => $r["SRP_BARIERA"], + 'rodzaj' => $r["SRP_SYS_TYPE"], + 'status' => setDicName($r["DRS_STATUS_DIC_ID"]), + 'typ' => setDicName($r["DRS_RESOURCES_DIC_ID"]), + 'ster' => setDicName($r["SRP_MCF_ID"]) + ); + + } + unset($_SESSION['site309_array']); + $_SESSION['site309_array']=$res; + + } + + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site309_array'])) $stop=count($_SESSION['site309_array']); + + for($i=$start;$i<$stop;$i++) + { + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site309inf&dev=".$_SESSION['site309_array'][$i]['drs_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site309_array'][$i]['name']."</TD> + <TD class='field_center'>".$_SESSION['site309_array'][$i]['bariera']."</TD> + <TD class='field_center'>".$_SESSION['site309_array'][$i]['rodzaj']."</TD> + <TD class='field_center'>".$_SESSION['site309_array'][$i]['status']."</TD> + <TD class='field_center'>".$_SESSION['site309_array'][$i]['typ']."</TD> + <TD class='field_center'>".$_SESSION['site309_array'][$i]['ster']."</TD> + </TR> + "; + } + ?> + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site309_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site309_array'])>20) + echo pagination_grid('?pg=site309', $_GET['pgn'], count($_SESSION['site309_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site309_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site309_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + </div> + + + <?php + if (!empty($_SESSION['site309_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site309A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site309A.php b/sites/site309A.php new file mode 100644 index 0000000..3da6a59 --- /dev/null +++ b/sites/site309A.php @@ -0,0 +1,124 @@ +<?php +if (!empty($_SESSION['site309_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + +<div class="tag100"> +<FORM ACTION="./?pg=site309" METHOD="POST" id="AddNewRePiezom" class="form_valid"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site309_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + echo" + <TR> + <TD class=desc> $lab_Tag_site302_004 </TD> + <TD CLASS=desc_value> <INPUT id='rePieName' class='text50_req' TYPE='TEXT' NAME='inRePieName'> </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site301_014 </TD> + <TD CLASS=desc_value> + <select name='inPieBariera'> + <option value='0'>".$lab_FormSelect_001."</option> + "; + $result = mysql_query("select SWI_ID,SWI_NAME from seg_water_intakes order by SWI_NAME"); + if($result)while ($r = mysql_fetch_array($result)) + { + echo"<option value='".$r["SWI_ID"]."'>".$r["SWI_NAME"]."</option>"; + } + echo" + + </select> + </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site303_001 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieSN'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieAsset'> </TD> + </TR> + + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DEPTH'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieDepth'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DIAMETER'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieDiameter'> </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site309_001 </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inSonda'> </TD> + </TR> + + + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='REPAIR_LEVEL'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inRePieRepair'> </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site301_008 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLat'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_009 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLong'> </TD> + </TR> + <TR> + <TD class=desc> $lab_Tag_site302_003 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inRePieStatus', 'PIEZO_STATUS_LEVEL_01'); echo"</TD> + </TR> + + <TR> + <TD class=desc>".$lab_Field_site301_025."</TD> + <TD CLASS=desc_value>"; selectDescriptionFromDictionary('inPieSysType', 'PIEZO_SYSTEM_TYPE'); echo"</TD> + </TR> + "; + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a href='./?pg=site309' class='btn btn-info btn-sm' style='text-decoration: none;' role='button'><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subRePieSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + + + </div> +</FORM> +</div> + +<div id="com309A"></div> + + <script> + + $('#rePieName').blur(function() { + var rePieName = $("#rePieName").val(); + $.post( "./ajax_func.php", { post_site: "site309A", post_action: "create_new_piezo", post_piezo_name: rePieName }).done(function(data) + { + $('#com309A').html(data); + } + ); + }); + + </script> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site309E.php b/sites/site309E.php new file mode 100644 index 0000000..de5eb31 --- /dev/null +++ b/sites/site309E.php @@ -0,0 +1,120 @@ +<?php +if (!empty($_SESSION['site309_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + + +<div class="tag100"> +<FORM ACTION="?pg=site309inf&dev=<?php echo $_GET['dev'];?>" METHOD="POST"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + <input type="hidden" name="sprid" value="<?php echo $_SESSION['site309inf_array'][0]["SRP_ID"]; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site309_003 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + + echo" + + <TR> + <TD class=desc> $lab_Tag_site302_004 </TD> + <TD CLASS=desc_value> <INPUT class='text50_req' TYPE='TEXT' NAME='inRePieName' value='".$_SESSION['site309inf_array'][0]["SRP_NAME"]."' required> </TD> + </TR> + + <TR> + <TD class=desc> $lab_Field_site301_014 </TD> + <TD CLASS=desc_value> + <select name='inPieBariera'> + "; + $result = mysql_query("select SWI_ID,SWI_NAME from seg_water_intakes order by SWI_NAME"); + if($result)while ($r = mysql_fetch_array($result)) + { + if ($r["SWI_ID"]==$_SESSION['site309inf_array'][0]["SRP_SWI_ID"]) + echo"<option value='".$r["SWI_ID"]."' selected>".$r["SWI_NAME"]."</option>"; + else + echo"<option value='".$r["SWI_ID"]."'>".$r["SWI_NAME"]."</option>"; + } + echo" + + </select> + </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site303_001 </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieSN' value='".$_SESSION['site309inf_array'][0]["DRS_SN_NUMBER"]."'> </TD> + </TR> + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='text50' TYPE='TEXT' NAME='inRePieAsset' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["ASSET"])."'> </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site309_001 </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inSonda' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["SONDA"])."'> </TD> + </TR> + + + <TR> + <TD class=desc> ".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='REPAIR_LEVEL'", $decFieldLang)." </TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inRePieRepair' value='".str_replace('.',',',$_SESSION['site309inf_array'][0]["REPAIR_LEVEL"])."'> </TD> + </TR> + + + <TR> + <TD class=desc> $lab_Field_site301_008 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLat' value='".$_SESSION['site309inf_array'][0]["OHC_DL_GEOGR"]."' required> </TD> + </TR> + <TR> + <TD class=desc> $lab_Field_site301_009 </TD> + <TD CLASS=desc_value> <INPUT class='float_req' TYPE='TEXT' NAME='inRePieLong' value='".$_SESSION['site309inf_array'][0]["OHC_SZER_GEOGR"]."' required> </TD> + </TR> + + <TR> + <TD class=desc> Sterowanie </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inRePieStering', 'PIEZO_CATEGORY',$_SESSION['site309inf_array'][0]["SRP_MCF_ID"]); echo"</TD> + </TR> + + <TR> + <TD class=desc> $lab_Tag_site302_003 </TD> + <TD CLASS=desc_value>"; selectFromDictionary('inRePieStatus', 'PIEZO_STATUS_LEVEL_01',$_SESSION['site309inf_array'][0]["DRS_RESOURCES_DIC_ID"]); echo"</TD> + </TR> + + <TR> + <TD class=desc>".$lab_Field_site301_025."</TD> + <TD CLASS=desc_value>"; selectDescriptionFromDictionary('inPieSysType', 'PIEZO_SYSTEM_TYPE', $_SESSION['site309inf_array'][0]["SRP_SYS_TYPE"]); echo"</TD> + </TR> + <TR> + <TD class=desc>".$lab_Field_site802_002."</TD> + <TD CLASS=desc_value>"; selectDescriptionFromDictionary('inPieDesc', 'PIEZO_STATUS_LEVEL_03', $_SESSION['site309inf_array'][0]["SRP_STAT_DESC"]); echo"</TD> + </TR> + + + + + "; + ?> + </TABLE> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site309inf&dev=<?php echo $_GET['dev']; ?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subRePieUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site309EXO.php b/sites/site309EXO.php new file mode 100644 index 0000000..af6c3b0 --- /dev/null +++ b/sites/site309EXO.php @@ -0,0 +1,49 @@ +<?php +if (!empty($_SESSION['site309_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + +<div class="tag100"> + <?php + echo "<FORM ACTION='./?pg=site309inf&dev=".$_GET['dev']."&param=".md5($_GET['dev']).",".$_GET['dev'].",out' METHOD='POST'>"; + ?> + <div class="head_tag"><?php echo $lab_ButtonName_OperateOut ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_009 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inBuildDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_026 ; ?></td> + <td CLASS=desc_value> + <?php echo selectDescriptionFromDictionary("inBuildReason", "PIEZO_DELETE_REASON"); ?> + </td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site309inf&dev=<?php echo $_GET['dev'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subOperateOut' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site309inf.php b/sites/site309inf.php new file mode 100644 index 0000000..25856c3 --- /dev/null +++ b/sites/site309inf.php @@ -0,0 +1,309 @@ +<?php +if (!empty($_SESSION['site309'])) +{ +?> + +<?php + if(!empty($_POST['dev'])) $_GET['dev'] = $_POST['dev']; + + //dodaje opomiarowanie + //========================================================= + if ($_GET['up']>0 && $_GET['acc']=='add' && sqlValue("select count(1) from seg_dev_equipments_rel where SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_DRS_EQU_ID=".$_GET['up']." and SDE_TYPE=14")==0) + { + mysql_query("INSERT INTO seg_dev_equipments_rel SET SDE_TYPE=14,SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_DRS_EQU_ID=".$_GET['up']); + mysql_query("INSERT INTO seg_dev_equipments_rel_his SET SDE_TYPE=14,SDE_DRS_DEV_ID=".$_GET['dev'].",SDE_DRS_EQU_ID=".$_GET['up'].",SDE_AUDIT_CU='".$_SESSION['user']."',SDE_AUDIT_CD=now()"); + mysql_query("UPDATE seg_dev_resources SET DRS_RESOURCES_DIC_ID=3 WHERE DRS_ID=".$_GET['up']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_GET['up']); + } + //usuwa opomiarowanie + if ($_GET['up']>0 && $_GET['acc']=='del' && $_GET['tp']==14) + { + mysql_query("DELETE FROM seg_dev_equipments_rel WHERE SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_TYPE=14 and SDE_DRS_EQU_ID=".$_GET['up']); + mysql_query("UPDATE seg_dev_equipments_rel_his SET SDE_AUDIT_DU='".$_SESSION['user']."',SDE_AUDIT_DD=now() WHERE SDE_DRS_DEV_ID=".$_GET['dev']." and SDE_TYPE=14 and SDE_DRS_EQU_ID=".$_GET['up']); + mysql_query("UPDATE seg_dev_resources SET DRS_RESOURCES_DIC_ID=2 WHERE DRS_ID=".$_GET['up']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_GET['up']); + } + //========================================================= + + +//delSearchSessionData(); +?> + + + <?php + // aktualizacja pierometru + if (!empty($_POST['inRePieName']) && $_POST['subRePieUpdate']==$lab_ButtonName_Update) + { + $ujName = sqlStringValue("select SWI_NAME from seg_water_intakes where SWI_ID=".$_POST['inPieBariera'],"SWI_NAME"); + + mysql_query("update seg_reservoirs_piezometers SET SRP_SWI_ID=".$_POST['inPieBariera'].",SRP_BARIERA='".$ujName."',SRP_LATITUDE='".$_POST['inRePieLat']."',SRP_LONGITUDE='".$_POST['inRePieLong']."',SRP_SYS_TYPE='".$_POST['inPieSysType']."',SRP_STAT_DESC='".$_POST['inPieDesc']."',SRP_MCF_ID=".$_POST['inRePieStering']." where SRP_ID=".$_POST['sprid']); + + mysql_query("UPDATE seg_object_hole_cards SET OHC_UJ='".$ujName."',OHC_DL_GEOGR='".$_POST['inRePieLat']."',OHC_SZER_GEOGR='".$_POST['inRePieLong']."' WHERE OHC_DRS_ID=".$_POST['dev']); + + mysql_query("update seg_dev_resources SET DRS_SN_NUMBER='".$_POST['inRePieSN']."',DRS_RESOURCES_DIC_ID=".$_POST['inRePieStatus'].",DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() where DRS_ID=".$_POST['dev']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=".$_POST['dev']); + + //poziomy wody - położenie + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieRepair'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='REPAIR_LEVEL'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); +// mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieFlUp'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_UP'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); +// mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieFlDown'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_DOWN'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // środek trwały + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".$_POST['inRePieAsset']."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // głębokość + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieDepth'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DEPTH'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieDepth'])."',DRD_RESOURCES_DETAIL=110,DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + // średnica + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieDiameter'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DIAMETER'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inRePieDiameter'])."',DRD_RESOURCES_DETAIL=100,DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // sonda + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_VALUE='".str_replace(",",".",$_POST['inSonda'])."',DRD_RESOURCES_DETAIL=(select DIC_ID from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='LPM'),DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + + + + } + + ?> + + + +<?php +// zdjęcie/wprowadzenie do ponownej eksploatacji +if (!empty($_GET['param'])) +{ + $paramArray = explode(',', $_GET['param']); + // wprowadzenie do exploatacji + + if ($paramArray[0]==md5($paramArray[1]) && $paramArray[2]=='in' && $_GET['dev']>0) + { + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=3,DRS_RESOURCES_DIC_ID=941 WHERE DRS_ID=".$_GET['dev']); + mysql_query("UPDATE seg_object_hole_cards SET OHC_ZDJECIE_EXPL_DATE=null WHERE OHC_DRS_ID=".$_GET['dev']); + + $id = sqlStringValue("select SRP_ID from seg_reservoirs_piezometers,seg_dev_resources where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and DRS_ID=".$_GET['dev'], "SRP_ID"); + mysql_query("UPDATE seg_reservoirs_piezometers SET SRP_STAT_DESC=null WHERE SRP_ID=".$id); + + echo"<div class='actionOK'>Piezometr został pomyślnie wprowadzony do eksploatacji.</div>"; + } + + if ($paramArray[0]==md5($paramArray[1]) && $paramArray[2]=='out' && $_GET['dev']>0) + { + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=4,DRS_RESOURCES_DIC_ID=942 WHERE DRS_ID=".$_GET['dev']); + mysql_query("UPDATE seg_object_hole_cards SET OHC_ZDJECIE_EXPL_DATE='".$_POST['inBuildDate']."' WHERE OHC_DRS_ID=".$_GET['dev']); + + $id = sqlStringValue("select SRP_ID from seg_reservoirs_piezometers,seg_dev_resources where SRP_ID=DRS_DEV_ID and DRS_DEV_TYPE=601 and DRS_ID=".$_GET['dev'], "SRP_ID"); + mysql_query("UPDATE seg_reservoirs_piezometers SET SRP_STAT_DESC='".$_POST['inBuildReason']."' WHERE SRP_ID=".$id); + echo"<div class='actionOK'>Piezometr został pomyślnie zdjęty z eksploatacji.</div>"; + } + + +} + +?> + + + + +<?php + $_SESSION['site309inf_array'] = sqlGetResAsArray("select DRS_ID,SRP_ID,SRP_NAME,SRP_SWI_ID,SRP_BARIERA,DRS_STATUS_DIC_ID,DRS_RESOURCES_DIC_ID,DRS_SN_NUMBER,SRP_ID,OHC_DL_GEOGR,OHC_SZER_GEOGR,SRP_SYS_TYPE,SRP_STAT_DESC,getLastValue(16,DRS_ID) ASSET,getLastValue(999,DRS_ID) REPAIR_LEVEL,getLastValue(240,DRS_ID) SONDA, SRP_MCF_ID from seg_dev_resources left join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID left join seg_object_hole_cards on OHC_DRS_ID=DRS_ID where DRS_ID=".$_GET['dev']); + //$_SESSION['site309inf_filters'] = sqlGetResAsArray("select CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$_GET['dev']); + $_SESSION['site309inf_filters'] = sqlGetResAsArray("select CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$_GET['dev']." and CLF_TO=(select max(CLF_TO) from seg_object_column_filters where CLF_DRS_ID=".$_GET['dev'].") limit 1"); + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + + unset($piezDiameter); + $piezDiameter = getDiameterDepthAsArray($_GET['dev']); + +?> + + + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site309_003 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Tag_site302_004; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site309inf_array'][0]["SRP_NAME"]; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site303_001; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site309inf_array'][0]["DRS_SN_NUMBER"]; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='ASSET'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site309inf_array'][0]["ASSET"]; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DEPTH'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getGlebokoscAct($_GET['dev']); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DIAMETER'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo $piezDiameter['diameter']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site309_001; ?></TD> + <TD CLASS="desc_value"><?php echo getStringFloatRound($_SESSION['site309inf_array'][0]["SONDA"]); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='REPAIR_LEVEL'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getStringFloatRound($_SESSION['site309inf_array'][0]["REPAIR_LEVEL"]); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_UP'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getFloatValue($_SESSION['site309inf_filters'][0]["CLF_FROM"])-getSciecie($_GET['dev']); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_DOWN'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getFloatValue($_SESSION['site309inf_filters'][0]["CLF_TO"])-getSciecie($_GET['dev']); ?></TD> + </TR> + </table> + </div> + + <div class="head_tag"><?php echo $_SESSION['site309inf_array'][0]["SRP_NAME"] ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_014; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site309inf_array'][0]["SRP_BARIERA"]; ?></TD> + </TR> + + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_008; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site309inf_array'][0]["OHC_DL_GEOGR"]; ?></TD> + </TR> + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_009; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site309inf_array'][0]["OHC_SZER_GEOGR"]; ?></TD> + </TR> + + + <TR> + <TD class="desc_equipment">Sterowanie</TD> + <TD CLASS="desc_value" colspan="2"><?php echo setDicName($_SESSION['site309inf_array'][0]["SRP_MCF_ID"]); ?></TD> + </TR> + + + <TR> + <TD class="desc_equipment"><?php echo $lab_Tag_site302_003; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo setDicName($_SESSION['site309inf_array'][0]["DRS_RESOURCES_DIC_ID"]); ?></TD> + </TR> + + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site301_025; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['site309inf_array'][0]["SRP_SYS_TYPE"]; ?></TD> + </TR> + + <TR> + <TD class="desc_equipment"><?php echo $lab_Field_site802_002; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['site309inf_array'][0]["SRP_STAT_DESC"]; ?></TD> + </TR> + + </table> + </div> + + + <div class="head_tag">Powiązane urządzenia pomiarowe</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Urządzenie</TD> + <TD class="label">Numer seryjny</TD> + <?php if (!empty($_SESSION['site309_edit'])) echo"<TD class='label'>&nbsp;</TD>"; ?> + </TR> + + <?php + $result = mysql_query("select DRS_ID,EQU_NAME,DRS_SN_NUMBER from seg_dev_equipments_rel left join seg_dev_resources on SDE_DRS_EQU_ID=DRS_ID and DRS_DEV_TYPE=14 left join seg_equipments on DRS_DEV_ID=EQU_ID where SDE_TYPE=14 and SDE_DRS_DEV_ID=".$_SESSION['site309inf_array'][0]["DRS_ID"]); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_01 = $r["DRS_ID"]; + $var_02 = $r["EQU_NAME"]; + $var_03 = $r["DRS_SN_NUMBER"]; + + echo" + <tr> + <TD class='field_center'>$var_02 &nbsp;</TD> + <TD class='field_center'>$var_03 &nbsp;</TD>"; + if (!empty($_SESSION['site301_edit'])) echo"<TD style='width: 17px;' class='field_right'> + + <a href=?pg=site309inf&dev=".$_SESSION['site309inf_array'][0]["DRS_ID"]."&up=".$var_01."&tp=14&acc=del onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć powiązane urządzenie?');".chr(34)."><img src='./images/remove_ico.png'></a></TD>"; + echo" + </tr> + + "; + } + ?> + + <?php if (!empty($_SESSION['site309_edit']))echo"<tr><td colspan='4' class='field_right'><a href='?pg=site309infApom&dev=".$_SESSION['site309inf_array'][0]["DRS_ID"]."' title='Dodaj'><img src='./images/add_ico.png'></a> </td></tr>"; ?> + </table> + </div> + + + + + +</div> + + <?php + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_309inf_01.png"; + generatePiezometer($_GET['dev'], $fileName1); + + ?> + + +<div class="tag50_right"> + + + <div class="head_tag"><?php echo $_SESSION['site309inf_array'][0]["SRP_NAME"] ;?></div> + <div class="tag_center"> + <img SRC="<?php echo $fileName1; ?>" > + </div> + + <div class=tag_ChemicalButtons> + <a href='./?pg=site404inf&dev=<?php echo $_GET['dev'];?>&direct=404'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_SubMenu_404; ?>'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site310&dev=<?php echo $_SESSION['site309inf_array'][0]['DRS_ID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Karta otworu &raquo;'></A> + </div> + + + +</div> + + + + <?php if (!empty($_SESSION['site309_edit'])) { ?> + <div class="tag100"> + <div class="tag_buttons"> + <?php echo "<a href=?pg=site309>"; ?><INPUT class='btn btn-info btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + + <?php + echo"<a href='./?pg=site309&piezo2stu=".$_GET['dev'].",".md5($_GET['dev']).",piezo2stu' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz przekształcić piezometr w studnię?');".chr(34)."><INPUT class='btn btn-default btn-sm' style='background-color: #B8860B; color: #ffffff;' TYPE='BUTTON' VALUE='$lab_ButtonName_Operate2Studn'></A> "; + ?> + + + <?php + //zdjęcie/powrót do exploatacji + if ($_SESSION['site309inf_array'][0]['DRS_STATUS_DIC_ID']==3) + echo"<a href='./?pg=site309EXO&dev=".$_SESSION['site309inf_array'][0]['DRS_ID']."' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz zdjąć piezometr z eksploatacji?');".chr(34)."><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_OperateOut'></A> "; + elseif ($_SESSION['site309inf_array'][0]['DRS_STATUS_DIC_ID']==4) + echo"<a href='./?pg=site309inf&dev=".$_SESSION['site309inf_array'][0]['DRS_ID']."&param=".md5($_SESSION['site309inf_array'][0]['DRS_ID']).",".$_SESSION['site309inf_array'][0]['DRS_ID'].",in' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz wprowadzić piezometr do eksploatacji?');".chr(34)."><INPUT class='btn btn-primary btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_OperateIn'></A> "; + ?> + + + + + <?php echo "<a href=?pg=site309E&dev=".$_GET['dev'].">"; ?><INPUT class='btn btn-success btn-sm' TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Modify; ?>"></A> + </div> + </div> + <?php } ?> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site309infApom.php b/sites/site309infApom.php new file mode 100644 index 0000000..0272bde --- /dev/null +++ b/sites/site309infApom.php @@ -0,0 +1,55 @@ +<?php +if (!empty($_SESSION['site309_edit'])) +{ +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site308_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_005 ;?></TD> + + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_004 ;?></TD> + + </TR> + + <?php + $wynik = mysql_query("select EQU_ID,EQU_NAME,MCF_NAME,DRS_SN_NUMBER,DRS_BUY_DATE,DRS_RESOURCES_DIC_ID,DRS_ID,SDE_DRS_DEV_ID from seg_dev_resources left join seg_equipments on DRS_DEV_ID=EQU_ID left join seg_manufacturers on EQU_MCF_ID=MCF_ID left join seg_dev_equipments_rel on SDE_DRS_EQU_ID=DRS_ID where DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='EQUIPMENTS') and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and SDE_DRS_DEV_ID is null order by EQU_NAME,DRS_AVAILABLE_DATE"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["EQU_ID"]; + $sql_2 = $r["EQU_NAME"]; + $sql_3 = $r["DRS_BUY_DATE"]; + $sql_4 = $r["MCF_NAME"]; + $sql_5 = $r["DRS_RESOURCES_DIC_ID"];$sql_5=setDicName($sql_5); + $sql_6 = $r["DRS_SN_NUMBER"]; + $sql_DRSid = $r["DRS_ID"]; + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site309inf&dev=".$_GET['dev']."&up=$sql_DRSid&acc=add'".chr(34)."> + <TD class='field_left'>$sql_2</TD> + <TD class='field_left'>$sql_4</TD> + <TD class='field_left'>$sql_6</TD> + <TD class='field_center'>$sql_3</TD> + <TD class='field_center'>$sql_5</TD> + </TR> + "; + } + ?> + </table> + </div> + + <div class="tag_buttons"> + <a href='?pg=site309inf&dev=<?php echo $_GET['dev']; ?>'><INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Cancel; ?>'></A> + </div> + + +</div> +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310.php b/sites/site310.php new file mode 100644 index 0000000..53d4d94 --- /dev/null +++ b/sites/site310.php @@ -0,0 +1,1205 @@ +<?php +if (!empty($_SESSION['site310'])) +{ +?> + + <?php + // wczytuje dane z GET['param'] + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $_GET['tab'] = $paramArray[0]; + $getAcction = $paramArray[1]; + $getRecID = $paramArray[2]; + unset($paramArray); + } + + // Samonaprawa: obiekty bez nagłówka karty otworu (np. studnie z importu + // SYNDIS) nie zapisywały danych. Tworzymy brakujący nagłówek karty, aby + // edycja zakładek 1-6 działała. Idempotentne - dla istniejących kart no-op. + if ($_GET['dev']>0) ensureHoleCardExists($_GET['dev']); + ?> + + + + + <?php + //aktualizacja tab1 + // ============================================================== + if ($_GET['dev']>0 && $_POST['sub310tab1']==$lab_ButtonName_Update) + { + mysql_query("UPDATE seg_object_hole_cards SET OHC_WYKONAWCA='".$_POST['inHCWykonawca']."',OHC_ROK_WYKON='".$_POST['inHCRokWyk']."',OHC_ROZP_WIER_DATE='".$_POST['inHCRozpWier']."',OHC_ZAK_WIER_DATE='".$_POST['inHCZakWier']."',OHC_DATA_ODDANIA='".$_POST['inHCDataOdd']."',OHC_URZ_WIERT='".$_POST['inHCUrzWiert']."',OHC_SPOS_WIERC='".$_POST['inHCUSposWiert']."',OHC_GLEB_ODWIER='".getFloatValue($_POST['inHCGlOdw'])."',OHC_GLEB_OSTAT='".getFloatValue($_POST['inHCGlOstat'])."',OHC_DL_GEOGR='".getFloatValue($_POST['inHCDlGeog'])."',OHC_SZER_GEOGR='".getFloatValue($_POST['inHCSzGeog'])."',OHC_RZEDNA_TEREN='".getFloatValue($_POST['inHCRzTer'])."',OHC_RZEDNA_TERENU_ACT='".getFloatValue($_POST['inHCRzTer'])."',OHC_RZEDNA_KRYZY='".getFloatValue($_POST['inHCRzKryzy'])."',OHC_ZWIERC_NAWIERC='".getFloatValue($_POST['inHCZwNawier'])."',OHC_ZWIERC_USTAL='".getFloatValue($_POST['inHCZwUstal'])."',OHC_POZIOM_WODONOS='".$_POST['inHCPozWodo']."' WHERE OHC_DRS_ID=".$_GET['dev']); + + if (strlen($_POST['inHCDataZdj'])>4) + mysql_query("UPDATE seg_object_hole_cards SET OHC_ZDJECIE_EXPL_DATE='".$_POST['inHCDataZdj']."' WHERE OHC_DRS_ID=".$_GET['dev']); + else + mysql_query("UPDATE seg_object_hole_cards SET OHC_ZDJECIE_EXPL_DATE=null WHERE OHC_DRS_ID=".$_GET['dev']); + + + $firstOHH_ID=sqlValue("select min(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$_GET['dev']); + if ($firstOHH_ID>0) mysql_query("update seg_object_hole_cards_his set OHH_RZEDNA='".$_POST['inHCRzTer']."' where OHH_ID=".$firstOHH_ID); + + + + // gdy studnia + if (!empty($_SESSION['well_details']['wellName'])) + mysql_query("UPDATE seg_wells SET WLL_LATITUDE='".getFloatValue($_POST['inHCDlGeog'])."',WLL_LONGITUDE='".getFloatValue($_POST['inHCSzGeog'])."' WHERE WLL_NAME='".$_SESSION['well_details']['wellName']."'"); + + // gdy piezometr + elseif (!empty($_SESSION['site309inf_array'][0]['SRP_NAME'])) + mysql_query("UPDATE seg_reservoirs_piezometers SET SRP_LATITUDE='".getFloatValue($_POST['inHCDlGeog'])."',SRP_LONGITUDE='".getFloatValue($_POST['inHCSzGeog'])."' WHERE SRP_NAME='".$_SESSION['site309inf_array'][0]['SRP_NAME']."'"); + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + unset($_SESSION['site310_array']); + } + // ============================================================== + + + //aktualizacja tab2 + // ============================================================== + if ($_GET['dev']>0 && $_POST['sub310tab2']==$lab_ButtonName_Update) + { + mysql_query("UPDATE seg_object_hole_cards SET OHC_Q1='".getFloatValue($_POST['inOHC_Q1'])."',OHC_S1='".getFloatValue($_POST['inOHC_S1'])."',OHC_T1='".getFloatValue($_POST['inOHC_T1'])."',OHC_Q2='".getFloatValue($_POST['inOHC_Q2'])."',OHC_S2='".getFloatValue($_POST['inOHC_S2'])."',OHC_T2='".getFloatValue($_POST['inOHC_T2'])."',OHC_Q3='".getFloatValue($_POST['inOHC_Q3'])."',OHC_S3='".getFloatValue($_POST['inOHC_S3'])."',OHC_T3='".getFloatValue($_POST['inOHC_T3'])."',OHC_Q4='".getFloatValue($_POST['inOHC_Q4'])."',OHC_S4='".getFloatValue($_POST['inOHC_S4'])."',OHC_T4='".getFloatValue($_POST['inOHC_T4'])."',OHC_Q5='".getFloatValue($_POST['inOHC_Q5'])."',OHC_S5='".getFloatValue($_POST['inOHC_S5'])."',OHC_T5='".getFloatValue($_POST['inOHC_T5'])."',OHC_QE='".getFloatValue($_POST['inOHC_QE'])."',OHC_SE='".getFloatValue($_POST['inOHC_SE'])."',OHC_WYD_JEDN='".getFloatValue($_POST['inOHC_WYD_JEDN'])."',OHC_WSP_SPR_HYDRO='".getFloatValue($_POST['inOHC_WSP_SPR_HYDRO'])."',OHC_POZ_WOD_NO='".$_POST['inOHC_POZ_WOD_NO']."',OHC_POZ_DATE_TO='".$_POST['inOHC_POZ_DATE_TO']."',OHC_POZ_Q_DOP='".getFloatValue($_POST['inOHC_POZ_Q_DOP'])."' WHERE OHC_DRS_ID=".$_GET['dev']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + unset($_SESSION['site310_array']); + } + // ============================================================== + + + //aktualizacja + dodawanie tab3 + // ============================================================== + if ($_GET['dev']>0 && $_GET['hcl']>0 && $_POST['sub310Etab3']==$lab_ButtonName_Update) + { + mysql_query("UPDATE seg_object_litolog SET HCL_FROM=".getFloatValue($_POST['inHCL_FROM']).",HCL_TO=".getFloatValue($_POST['inHCL_TO']).",HCL_DESC='".$_POST['inHCL_DESC']."',HCL_AUDIT_CU='".$_SESSION['user']."',HCL_AUDIT_CD=now() WHERE HCL_ID=".$_GET['hcl']); + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + unset($_SESSION['site310_tab3']); + } + + // dodawanie tab3 + if ($_GET['dev']>0 && isset($_POST['inHCL_FROM']) && isset($_POST['inHCL_TO']) && $_POST['sub310Atab3']==$lab_ButtonName_Save) + { + mysql_query("INSERT INTO seg_object_litolog SET HCL_DRS_ID=".$_GET['dev'].",HCL_FROM=".getFloatValue($_POST['inHCL_FROM']).",HCL_TO=".getFloatValue($_POST['inHCL_TO']).",HCL_DESC='".$_POST['inHCL_DESC']."',HCL_AUDIT_CU='".$_SESSION['user']."',HCL_AUDIT_CD=now()"); + + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + unset($_SESSION['site310_tab3']); + } + + //usuwanie tab3 + if ($_GET['id']>0 && $_GET['tab']==3 && $_GET['acc']=='rem') + { + mysql_query("DELETE FROM seg_object_litolog WHERE HCL_ID=".$_GET['id']); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + unset($_SESSION['site310_tab3']); + } + // ============================================================== + + + // tab4 + //================================================================================================================== + // dodawanie nowej kolumny + // ============================================================== + if ($_GET['dev']>0 && $_POST['sub310tb4AC']==$lab_ButtonName_Save && isset($_POST['inCOL_DIAMETER']) && isset($_POST['inCOL_DEPTH']) && !empty($_POST['inCOL_NAME'])) + { + //dodaje nowÄ… kolumne + mysql_query("INSERT INTO seg_object_columns SET COL_DRS_ID=".$_GET['dev'].",COL_NAME='".$_POST['inCOL_NAME']."',COL_HORYZONT='".$_POST['inCOL_HORYZONT']."',COL_DIAMETER=".getFloatValue($_POST['inCOL_DIAMETER']).",COL_DEPTH=".getFloatValue($_POST['inCOL_DEPTH']).",COL_DESC='".$_POST['inCOL_DESC']."',COL_AUDIT_CU='".$_SESSION['user']."',COL_AUDIT_CD=now()"); + $newColID = sqlValue("select max(COL_ID) from seg_object_columns"); + + //aktualizauje Ĺ›rednice i głębokość + setDiameterAndDepth($_GET['dev'],$newColID); + + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + unset($_SESSION['site310_tab4']); + unset($_SESSION['site310_tab6_LS']); + } + // ============================================================== + + //edycja istniejÄ…cej kolumny + // ============================================================== + if ($_GET['dev']>0 && $_POST['inCOL_ID']>0 && $_POST['sub310tb4EC']==$lab_ButtonName_Update && !empty($_POST['inCOL_DIAMETER']) && !empty($_POST['inCOL_DEPTH']) && !empty($_POST['inCOL_NAME'])) + { + // aktualizauje istniejÄ…cÄ… kolumnÄ™ + mysql_query("update seg_object_columns SET COL_NAME='".$_POST['inCOL_NAME']."',COL_HORYZONT='".$_POST['inCOL_HORYZONT']."',COL_DIAMETER=".getFloatValue($_POST['inCOL_DIAMETER']).",COL_DEPTH=".getFloatValue($_POST['inCOL_DEPTH']).",COL_DESC='".$_POST['inCOL_DESC']."',COL_AUDIT_CU='".$_SESSION['user']."',COL_AUDIT_CD=now() where COL_ID=".$_POST['inCOL_ID']); + + //aktualizauje Ĺ›rednice i głębokość + setDiameterAndDepth($_GET['dev'],$_POST['inCOL_ID']); + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + unset($_SESSION['site310_tab4']); + unset($_SESSION['site310_tab6_LS']); + } + // ============================================================== + + + // usuwanie istniejÄ…cej kolumny + // ============================================================== + if ($_GET['dev']>0 && $_GET['tab']==4 && $getAcction=='del' && $getRecID>0) + { + // usuwa rekord z tabeli seg_object_columns + mysql_query("DELETE FROM seg_object_columns WHERE COL_ID=".$getRecID); + // usuwa rekord z tabeli seg_object_column_filters + mysql_query("DELETE FROM seg_object_column_filters WHERE CLF_COL_ID=".$getRecID); + // usuwa rekord z tabeli seg_object_column_fillings + mysql_query("DELETE FROM seg_object_column_fillings WHERE CLO_COL_ID=".$getRecID); + + // usuwa wszystkie wpisy w seg_dev_resources_det dla danej kolumny + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_DESCRIPTION='".$getRecID."'"); + + // aktualizauje głębokość i Ĺ›rednicÄ™ po usuniÄ™ciu + setDiameterAndDepth($_GET['dev'],'Aktualizacja po usuniÄ™ciu kolumny'); + + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + unset($_SESSION['site310_tab4']); + unset($_SESSION['site310_tab6_LS']); + } + // ============================================================== + + + //dodawanie filtra + // ============================================================== + if ($_GET['dev']>0 && $_GET['col']>0 && $_POST['sub310tb4AF']==$lab_ButtonName_Save && isset($_POST['inCLF_FROM']) && isset($_POST['inCLF_TO']) && !empty($_POST['inCLF_NAME'])) + { + mysql_query("INSERT INTO seg_object_column_filters SET CLF_DRS_ID=".$_GET['dev'].",CLF_COL_ID=".$_GET['col'].",CLF_NAME='".$_POST['inCLF_NAME']."',CLF_FROM=".getFloatValue($_POST['inCLF_FROM']).",CLF_TO=".getFloatValue($_POST['inCLF_TO']).",CLF_DESC='".$_POST['inCLF_DESC']."',CLF_AUDIT_CU='".$_SESSION['user']."',CLF_AUDIT_CD=now()"); + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + // ============================================================== + + //edycja filtra + // ============================================================== + if ($_GET['dev']>0 && $_GET['col']>0 && $_POST['sub310tb4EF']==$lab_ButtonName_Update && isset($_POST['inCLF_FROM']) && isset($_POST['inCLF_TO']) && !empty($_POST['inCLF_NAME'])) + { + mysql_query("update seg_object_column_filters SET CLF_DRS_ID=".$_GET['dev'].",CLF_COL_ID=".$_GET['col'].",CLF_NAME='".$_POST['inCLF_NAME']."',CLF_FROM=".getFloatValue($_POST['inCLF_FROM']).",CLF_TO=".getFloatValue($_POST['inCLF_TO']).",CLF_DESC='".$_POST['inCLF_DESC']."',CLF_AUDIT_CU='".$_SESSION['user']."',CLF_AUDIT_CD=now() where CLF_ID=".$_POST['inCLF_ID']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + // ============================================================== + + //usuwanie filtra + // ============================================================== + if ($_GET['dev']>0 && $_GET['col']>0 && $getAcction=='delf' && $getRecID>0) + { + mysql_query("DELETE FROM seg_object_column_filters WHERE CLF_ID=".$getRecID); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + // ============================================================== + + //dodawanie obsypki + // ============================================================== + if ($_GET['dev']>0 && $_GET['col']>0 && $_POST['sub310tb4AO']==$lab_ButtonName_Save && isset($_POST['inCLO_FROM']) && isset($_POST['inCLO_TO']) && !empty($_POST['inCLO_NAME'])) + { + mysql_query("INSERT INTO seg_object_column_fillings SET CLO_DRS_ID=".$_GET['dev'].",CLO_COL_ID=".$_GET['col'].",CLO_NAME='".$_POST['inCLO_NAME']."',CLO_FROM=".getFloatValue($_POST['inCLO_FROM']).",CLO_TO=".getFloatValue($_POST['inCLO_TO']).",CLO_DESC='".$_POST['inCLO_DESC']."',CLO_AUDIT_CU='".$_SESSION['user']."',CLO_AUDIT_CD=now()"); + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + // ============================================================== + + //edycja obsybki + // ============================================================== + if ($_GET['dev']>0 && $_GET['col']>0 && $_POST['sub310tb4EO']==$lab_ButtonName_Update && isset($_POST['inCLO_FROM']) && isset($_POST['inCLO_TO']) && !empty($_POST['inCLO_NAME'])) + { + mysql_query("update seg_object_column_fillings SET CLO_DRS_ID=".$_GET['dev'].",CLO_COL_ID=".$_GET['col'].",CLO_NAME='".$_POST['inCLO_NAME']."',CLO_FROM=".getFloatValue($_POST['inCLO_FROM']).",CLO_TO=".getFloatValue($_POST['inCLO_TO']).",CLO_DESC='".$_POST['inCLO_DESC']."',CLO_AUDIT_CU='".$_SESSION['user']."',CLO_AUDIT_CD=now() where CLO_ID=".$_POST['inCLO_ID']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + // ============================================================== + + //usuwanie obsybki + // ============================================================== + if ($_GET['dev']>0 && $_GET['col']>0 && $getAcction=='delo' && $getRecID>0) + { + mysql_query("DELETE FROM seg_object_column_fillings WHERE CLO_ID=".$getRecID); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + // ============================================================== + + + // END tab4 + //================================================================================================================== + + + //aktualizacja tab5 + // ============================================================== + if ($_GET['dev']>0 && $_POST['sub310tab5']==$lab_ButtonName_Update) + { + mysql_query("UPDATE seg_object_hole_cards SET OHC_UWAGI='".$_POST['inOHC_UWAGI']."' WHERE OHC_DRS_ID=".$_GET['dev']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + unset($_SESSION['site310_array']); + } + // ============================================================== + + + //aktualizacja + dodawanie tab6 + // ============================================================== + if ($_GET['dev']>0 && ($_POST['sub310Etab6']==$lab_ButtonName_Update || $_POST['sub310Atab6']==$lab_ButtonName_Save) ) + { + +// echo "ohh: ".$_GET['ohh']."<br/>"; +// echo getMaxIDfromMySqlTable("seg_dev_resources"); + + // numer rekordu pobranego z listy + unset($arrID); + if(empty($_GET['ohh'])) $arrID=0; + else $arrID = $_GET['ohh']; + + //pobiera ostatnią wartośc dla rzędnej + + unset($rzAct);unset($holeCardsArray); + $holeCardsArray = sqlGetResAsArray("select OHC_GLEB_ODWIER,OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=".$_GET['dev']); + $rzPier = getFloatValue($holeCardsArray[0]['OHC_RZEDNA_TEREN']); + $rzAct = getFloatValue($holeCardsArray[0]['OHC_RZEDNA_TERENU_ACT']); + $glebPier = getFloatValue($holeCardsArray[0]['OHC_GLEB_OSTAT']); + + unset($rzNew); + $rzNew = getFloatValue($_POST['inOHH_RZEDNA']); + + unset($zasNew); + $zasNew = getFloatValue($_POST['inOHH_ZASYP']); + + + //if ($rzNew>0) + if (!empty($rzNew)) + { + //if ($rzNew<=$rzAct) + //sztuczny warunek + if ($rzNew<1000000) + { + // dodawanie nowej pozycji + // ============================================== ============================================== ============================================== + if ($_GET['add']=='new' && $_POST['sub310Atab6']==$lab_ButtonName_Save) + { + mysql_query("insert into seg_object_hole_cards_his select null,OHH_DRS_ID,OHH_UJ,OHH_NAME,'".$_POST['inOHH_DATE']."' DAT,'".$rzNew."' RZEDNA, '".$zasNew."' ZASYP,'".$_POST['inOHH_ZMIAN_UMIEJ_LOCAL']."','".$_POST['inOHH_ZMIAN_UMIEJ_REASON']."',OHH_PLC from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$_GET['dev'].")"); + mysql_query("UPDATE seg_object_hole_cards SET OHC_RZEDNA_TERENU_ACT=".$rzNew." WHERE OHC_DRS_ID=".$_GET['dev']); + + unset($actGlebokosc); + $actGlebokosc = (float) ($glebPier - ($rzPier-$rzNew)); + + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL in (110,130) and DRD_DRS_ID=".$_GET['dev']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".$actGlebokosc."',DRD_DESCRIPTION='Głębokość',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=130,DRD_VALUE='".$zasNew."',DRD_DESCRIPTION='Głębokość',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + // obcina kolumny + /* + unset($columnArray); + $columnArray = sqlGetResAsArray("select COL_ID,COL_DEPTH from seg_object_columns where COL_DRS_ID=".$_GET['dev']); + for($i=0; $i<count($columnArray); $i++) + { + unset($newVal); + $newVal = (float) (getFloatValue($columnArray[$i]['COL_DEPTH']) - ($rzAct-$rzNew)); + + if ($newVal<0) $newVal=0; + + mysql_query("UPDATE seg_object_columns SET COL_DEPTH=".$newVal." WHERE COL_ID=".$columnArray[$i]['COL_ID']); + } + // //obcina filtry + unset($columnArray); + $columnArray = sqlGetResAsArray("select CLF_ID,CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$_GET['dev']); + for($i=0; $i<count($columnArray); $i++) + { + unset($newVal); + $newValFrom = (float) (getFloatValue($columnArray[$i]['CLF_FROM']) - ($rzAct-$rzNew)); + $newValTo = (float) (getFloatValue($columnArray[$i]['CLF_TO']) - ($rzAct-$rzNew)); + + if ($newValFrom<0) $newValFrom=0; + if ($newValTo<0) $newValTo=0; + + mysql_query("UPDATE seg_object_column_filters SET CLF_FROM=".$newValFrom.",CLF_TO=".$newValTo." WHERE CLF_ID=".$columnArray[$i]['CLF_ID']); + } + //obcina obsypę + unset($columnArray); + $columnArray = sqlGetResAsArray("select CLO_ID,CLO_FROM,CLO_TO from seg_object_column_fillings where CLO_DRS_ID=".$_GET['dev']); + for($i=0; $i<count($columnArray); $i++) + { + unset($newVal); + $newValFrom = (float) (getFloatValue($columnArray[$i]['CLO_FROM']) - ($rzAct-$rzNew)); + $newValTo = (float) (getFloatValue($columnArray[$i]['CLO_TO']) - ($rzAct-$rzNew)); + + if ($newValFrom<0) $newValFrom=0; + if ($newValTo<0) $newValTo=0; + + mysql_query("UPDATE seg_object_column_fillings SET CLO_FROM=".$newValFrom.",CLO_TO=".$newValTo." WHERE CLO_ID=".$columnArray[$i]['CLO_ID']); + } + */ + + } + // ============================================== ============================================== ============================================== + + // aktualizacja + // ============================================== ============================================== ============================================== + elseif ($_POST['sub310Etab6']==$lab_ButtonName_Update) + { + mysql_query("UPDATE seg_object_hole_cards_his SET OHH_DATE='".$_POST['inOHH_DATE']."',OHH_RZEDNA='".$rzNew."',OHH_ZASYP='".$zasNew."',OHH_ZMIAN_UMIEJ_LOCAL='".$_POST['inOHH_ZMIAN_UMIEJ_LOCAL']."',OHH_ZMIAN_UMIEJ_REASON='".$_POST['inOHH_ZMIAN_UMIEJ_REASON']."' WHERE OHH_ID=".$_SESSION['site310_tab6'][$arrID]['OHH_ID']); + + + // jeśli jest aktualizowany ostatni + if ($arrID==0) + { + mysql_query("UPDATE seg_object_hole_cards SET OHC_RZEDNA_TERENU_ACT=".$rzNew." WHERE OHC_DRS_ID=".$_GET['dev']); + unset($actGlebokosc); + $actGlebokosc = (float) ($glebPier - ($rzPier-$rzNew)); + + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL in (110,130) and DRD_DRS_ID=".$_GET['dev']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".$actGlebokosc."',DRD_DESCRIPTION='Głębokość',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=130,DRD_VALUE='".$zasNew."',DRD_DESCRIPTION='Głębokość',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + + // obcina kolumny + /* + unset($columnArray); + $columnArray = sqlGetResAsArray("select COL_ID,COL_DEPTH from seg_object_columns where COL_DRS_ID=".$_GET['dev']); + for($i=0; $i<count($columnArray); $i++) + { + unset($newVal); + $newVal = (float) (getFloatValue($columnArray[$i]['COL_DEPTH']) - ($rzAct-$rzNew)); + + if ($newVal<0) $newVal=0; + + mysql_query("UPDATE seg_object_columns SET COL_DEPTH=".$newVal." WHERE COL_ID=".$columnArray[$i]['COL_ID']); + } + // //obcina filtry + unset($columnArray); + $columnArray = sqlGetResAsArray("select CLF_ID,CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$_GET['dev']); + for($i=0; $i<count($columnArray); $i++) + { + unset($newVal); + $newValFrom = (float) (getFloatValue($columnArray[$i]['CLF_FROM']) - ($rzAct-$rzNew)); + $newValTo = (float) (getFloatValue($columnArray[$i]['CLF_TO']) - ($rzAct-$rzNew)); + + if ($newValFrom<0) $newValFrom=0; + if ($newValTo<0) $newValTo=0; + + mysql_query("UPDATE seg_object_column_filters SET CLF_FROM=".$newValFrom.",CLF_TO=".$newValTo." WHERE CLF_ID=".$columnArray[$i]['CLF_ID']); + } + //obcina obsypę + unset($columnArray); + $columnArray = sqlGetResAsArray("select CLO_ID,CLO_FROM,CLO_TO from seg_object_column_fillings where CLO_DRS_ID=".$_GET['dev']); + for($i=0; $i<count($columnArray); $i++) + { + unset($newVal); + $newValFrom = (float) (getFloatValue($columnArray[$i]['CLO_FROM']) - ($rzAct-$rzNew)); + $newValTo = (float) (getFloatValue($columnArray[$i]['CLO_TO']) - ($rzAct-$rzNew)); + + if ($newValFrom<0) $newValFrom=0; + if ($newValTo<0) $newValTo=0; + + mysql_query("UPDATE seg_object_column_fillings SET CLO_FROM=".$newValFrom.",CLO_TO=".$newValTo." WHERE CLO_ID=".$columnArray[$i]['CLO_ID']); + } + */ + } + } + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + + } + else + { + echo"<div class='actionERROR'>Błędna operacja!<br/>Nowa rzędna jest większa od poprzedniej.</div>"; + + } + + unset($_SESSION['site310_tab4']); + unset($_SESSION['site310_tab6']); + unset($_SESSION['site310_tab6_LS']); + unset($_SESSION['site310_array']); + + } + + echo"<br/>"; + + + + /* + if(empty($_GET['ohh'])) $arrID=0; + else $arrID = $_GET['ohh']; + +// echo "OLD: ".$_SESSION['site310_tab6'][$arrID]['OHH_ID']."<br/>"; + + if ($_GET['add']=='new' && $_POST['sub310Atab6']==$lab_ButtonName_Save) + { + mysql_query("insert into seg_object_hole_cards_his select null,OHH_DRS_ID,OHH_UJ,OHH_NAME,OHH_DATE,OHH_RZEDNA,OHH_ZASYP,OHH_ZMIAN_UMIEJ_LOCAL,OHH_ZMIAN_UMIEJ_REASON,OHH_PLC from seg_object_hole_cards_his where OHH_ID=(select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$_GET['dev'].")"); + $_SESSION['site310_tab6'][$arrID]['OHH_ID'] = $_SESSION['site310_tab6'][$arrID]['OHH_ID'] = sqlValue("select max(OHH_ID) from seg_object_hole_cards_his where OHH_DRS_ID=".$_GET['dev']); + } + + $rzAct = (float) round(str_replace(',','.',sqlValue("select getActRzedna(".$_GET['dev'].")")),2); + +// echo "OLD: ".$_SESSION['site310_tab6'][$arrID]['OHH_ID']."<br/>"; + + + mysql_query("UPDATE seg_object_hole_cards_his SET OHH_DATE='".$_POST['inOHH_DATE']."',OHH_RZEDNA='".getFloatValue($_POST['inOHH_RZEDNA'])."',OHH_ZASYP='".getFloatValue($_POST['inOHH_ZASYP'])."',OHH_ZMIAN_UMIEJ_LOCAL='".$_POST['inOHH_ZMIAN_UMIEJ_LOCAL']."',OHH_ZMIAN_UMIEJ_REASON='".$_POST['inOHH_ZMIAN_UMIEJ_REASON']."' WHERE OHH_ID=".$_SESSION['site310_tab6'][$arrID]['OHH_ID']); + + // jeĹ›li jest to ostatni wpis aktualizauje rĂłwnieĹĽ rzÄ™dnÄ… aktualnÄ…. + if ($arrID==0) + { + $rzNew = getFloatValue($_POST['inOHH_RZEDNA']); + + if($rzAct != $rzNew) + { + // aktualizauje informacje o nowych parametrach studni w konteoĹ›cie nowej rzÄ™dnej + setNewWellConstructionParameters($_GET['dev'],$rzAct,$rzNew,"Zmiana rzędnej = ".($rzAct - $rzNew)); + + unset($_SESSION['site310_tab6_LS']); + // ================================================================================ + } + // głębokość zasypu + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=130,DRD_VALUE='".getFloatValue($_POST['inOHH_ZASYP'])."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + //aktualizacja rzÄ™dnej + mysql_query("UPDATE seg_object_hole_cards SET OHC_RZEDNA_TERENU_ACT='".$rzNew."' WHERE OHC_DRS_ID=".$_GET['dev']); + + unset($_SESSION['site310_array']); + + //dorobić automatycznÄ… zmianÄ™ filtrĂłw przy zmianie rzÄ™dnej + } + + */ + + } + + //usuwanie tab6 + if ($_GET['id']>0 && $_GET['tab']==6 && $_GET['acc']=='rem') + { + mysql_query("DELETE FROM seg_object_hole_cards_his WHERE OHH_ID=".$_GET['id']); + + unset($delTab6ArrayRZ); + $delTab6ArrayRZ = sqlGetResAsArray("select OHH_RZEDNA from seg_object_hole_cards_his where OHH_DRS_ID=".$_GET['dev']." and OHH_DATE=(select max(OHH_DATE) from seg_object_hole_cards_his WHERE OHH_RZEDNA<>0 and OHH_DRS_ID=".$_GET['dev'].") order by OHH_ID desc limit 1"); + + unset($delTab6ArrayZP); + $delTab6ArrayZP = sqlGetResAsArray("select OHH_ZASYP from seg_object_hole_cards_his where OHH_DRS_ID=".$_GET['dev']." and OHH_DATE=(select max(OHH_DATE) from seg_object_hole_cards_his WHERE OHH_ZASYP<>0 and OHH_DRS_ID=".$_GET['dev'].") order by OHH_ID desc limit 1"); + + + // aktualizacja rzędnej oraz głębokości + mysql_query("UPDATE seg_object_hole_cards SET OHC_RZEDNA_TERENU_ACT=".getFloatValue($delTab6ArrayRZ[0]['OHH_RZEDNA'])." WHERE OHC_DRS_ID=".$_GET['dev']); + + unset($delTab6Array1); + $delTab6Array1 = sqlGetResAsArray("select OHC_GLEB_OSTAT,OHC_RZEDNA_TEREN,OHC_RZEDNA_TERENU_ACT from seg_object_hole_cards where OHC_DRS_ID=".$_GET['dev']); + + unset($actGlebokosc); + $actGlebokosc = (float) ($delTab6Array1[0]['OHC_GLEB_OSTAT'] - ($delTab6Array1[0]['OHC_RZEDNA_TEREN']-$delTab6Array1[0]['OHC_RZEDNA_TERENU_ACT'])); + + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL in (110,130) and DRD_DRS_ID=".$_GET['dev']); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=110,DRD_VALUE='".$actGlebokosc."',DRD_DESCRIPTION='Głębokość',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=130,DRD_VALUE='".getFloatValue($delTab6ArrayZP[0]['OHH_ZASYP'])."',DRD_DESCRIPTION='Głębokość',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE=now()"); + + + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + + unset($_SESSION['site310_tab4']); + unset($_SESSION['site310_tab6']); + unset($_SESSION['site310_tab6_LS']); + unset($_SESSION['site310_array']); + + + + } + // ============================================================== + ?> + + <?php + if (empty($_SESSION['310_direct'])) $showModifyButton = true; + + + //pobiera informacje o nazwie oraz rozróżnia, czy to studnia czy piezometr + if (!empty($_SESSION['well_details']['wellName'])) + { + $objectType = $lab_Field_site405_011; + $objectName = $_SESSION['well_details']['wellName']; + $objectWaterIntakes = $_SESSION['well_details']['well_Uj']; + + if (!empty($_GET['direct'])) + { + $_SESSION['310_direct']=$_GET['direct']; + $showModifyButton = false; + } + + if (!empty($_SESSION['310_direct'])) + $objectUrlHisBack = "./?pg=site".$_SESSION['310_direct']."inf&dev=".$_GET['dev']; + else + $objectUrlHisBack = "./?pg=site301inf&dev=".$_GET['dev']; + + } + elseif (!empty($_SESSION['site309inf_array'][0]['SRP_NAME']) || !empty($_SESSION['site404inf_array'][0]['SRP_NAME'])) + { + if (!empty($_SESSION['site404inf_array'][0]['SRP_NAME'])) + { + $_SESSION['site309inf_array'][0]['SRP_NAME']= $_SESSION['site404inf_array'][0]['SRP_NAME']; + $_SESSION['site309inf_array'][0]["SRP_BARIERA"] = $_SESSION['site404inf_array'][0]['SRP_BARIERA']; + } + + $objectType = $lab_Tag_site309_003; + $objectName = $_SESSION['site309inf_array'][0]['SRP_NAME']; + $objectWaterIntakes = $_SESSION['site309inf_array'][0]["SRP_BARIERA"]; + + if (!empty($_GET['direct'])) + { + $_SESSION['310_direct']=$_GET['direct']; + $showModifyButton = false; + } + + if (!empty($_SESSION['310_direct'])) + $objectUrlHisBack = "./?pg=site".$_SESSION['310_direct']."inf&dev=".$_GET['dev']; + else + + $objectUrlHisBack = "./?pg=site309inf&dev=".$_GET['dev']; + + $lab_ButtonName_HoleCard_002 = 'Zalewanie'; + + } + ?> + + + + + + + +<?php + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + if (empty($_GET['tab'])) $_GET['tab']=1; + + // pobiera dane + //if(empty($_SESSION['site310_array'])) + $_SESSION['site310_array'] = sqlGetResAsArray("select * from seg_object_hole_cards where OHC_DRS_ID=".$_GET['dev']); + + //$_SESSION['site310_array'][0][''] +?> + + <div class="tag100"> + + <a href='./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=1' <?php if($_GET['tab']==1) echo" class='btn btn-primary btn-sm'"; else echo" class='btn btn-default btn-sm'"; ?> style='text-decoration: none;' role='button'><?php echo $lab_ButtonName_HoleCard_001; ?></a> + + <?php if ($_SESSION['site310_array'][0]['OHC_RZEDNA_TEREN']!=0 && $_SESSION['site310_array'][0]['OHC_GLEB_OSTAT']!=0): ?> + <a href='./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=2' <?php if($_GET['tab']==2) echo" class='btn btn-primary btn-sm'"; else echo" class='btn btn-default btn-sm'"; ?> style='text-decoration: none;' role='button'><?php echo $lab_ButtonName_HoleCard_002; ?></a> + <a href='./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=3' <?php if($_GET['tab']==3) echo" class='btn btn-primary btn-sm'"; else echo" class='btn btn-default btn-sm'"; ?> style='text-decoration: none;' role='button'><?php echo $lab_ButtonName_HoleCard_003; ?></a> + <a href='./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=4' <?php if($_GET['tab']==4) echo" class='btn btn-primary btn-sm'"; else echo" class='btn btn-default btn-sm'"; ?> style='text-decoration: none;' role='button'><?php echo $lab_ButtonName_HoleCard_004; ?></a> + <a href='./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=5' <?php if($_GET['tab']==5) echo" class='btn btn-primary btn-sm'"; else echo" class='btn btn-default btn-sm'"; ?> style='text-decoration: none;' role='button'><?php echo $lab_ButtonName_HoleCard_005; ?></a> + <a href='./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=6' <?php if($_GET['tab']==6) echo" class='btn btn-primary btn-sm'"; else echo" class='btn btn-default btn-sm'"; ?> style='text-decoration: none;' role='button'><?php echo $lab_ButtonName_HoleCard_006; ?></a> + <?php endif; ?> + + </div> + + <?php if ($_GET['tab']==1): ?> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_001 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $objectType;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectName;?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectWaterIntakes;?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_001;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_WYKONAWCA'];?></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_004; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_005;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_ROK_WYKON'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_006;?></td> + <td class="desc_value"><?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_ROZP_WIER_DATE']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_007;?></td> + <td class="desc_value"><?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_ZAK_WIER_DATE']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_008;?></td> + <td class="desc_value"><?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_DATA_ODDANIA']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_009;?></td> + <td class="desc_value"><?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_ZDJECIE_EXPL_DATE']);?></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site310_010;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_URZ_WIERT'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_011;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_SPOS_WIERC'];?></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_012; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_002;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_DL_GEOGR'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_003;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_SZER_GEOGR'];?></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_013; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_014;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_RZEDNA_TEREN'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_015;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_RZEDNA_KRYZY'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_016;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_POZIOM_WODONOS'];?></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_017; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_018;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_GLEB_ODWIER'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_019;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_GLEB_OSTAT'];?></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_020; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_021;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_ZWIERC_NAWIERC'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_022;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_ZWIERC_USTAL'];?></td> + </tr> + </table> + </div> + </div> + + + + <?php elseif ($_GET['tab']==2): ?> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_002 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $objectType;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectName;?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectWaterIntakes;?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc" style="width: 10%;">Q<sub>1</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_Q1'];?></td> + <td class="desc" style="width: 10%;">S<sub>1</sub> [m]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_S1'];?></td> + <td class="desc" style="width: 10%;">T<sub>1</sub> [s]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_T1'];?></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>2</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_Q2'];?></td> + <td class="desc" style="width: 10%;">S<sub>2</sub> [m]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_S2'];?></td> + <td class="desc" style="width: 10%;">T<sub>2</sub> [s]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_T2'];?></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>3</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_Q3'];?></td> + <td class="desc" style="width: 10%;">S<sub>3</sub> [m]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_S3'];?></td> + <td class="desc" style="width: 10%;">T<sub>3</sub> [s]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_T3'];?></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>4</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_Q4'];?></td> + <td class="desc" style="width: 10%;">S<sub>4</sub> [m]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_S4'];?></td> + <td class="desc" style="width: 10%;">T<sub>4</sub> [s]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_T4'];?></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>5</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_Q5'];?></td> + <td class="desc" style="width: 10%;">S<sub>5</sub> [m]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_S5'];?></td> + <td class="desc" style="width: 10%;">T<sub>5</sub> [s]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_T5'];?></td> + </tr> + </table> + <table class="desc_val"> + <tr> + <td class="desc_equipment"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_023; ?></td> + </tr> + <tr> + <td class="desc_equipment">Q<sub>e</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_QE'];?></td> + </tr> + <tr> + <td class="desc_equipment">S<sub>e</sub> [m]</td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_SE'];?></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_024;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_WYD_JEDN'];?></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_025;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_WSP_SPR_HYDRO'];?></td> + </tr> + <tr> + <td class="desc_equipment"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_026; ?></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_032;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_POZ_WOD_NO'];?></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_027;?></td> + <td class="desc_value"><?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_POZ_DATE_TO']);?></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_028;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_array'][0]['OHC_POZ_Q_DOP'];?></td> + </tr> + </table> + + </div> + </div> + + + + <?php elseif ($_GET['tab']==3): ?> + + <?php + //ukrywa przycisk Modyfikuj + $showModifyButton = false; + if (empty($_SESSION['site310_tab3'])) $_SESSION['site310_tab3']=sqlGetResAsArray("select HCL_ID,HCL_FROM,HCL_TO,HCL_DESC from seg_object_litolog where HCL_DRS_ID=".$_GET['dev']." order by HCL_FROM"); + ?> + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_003 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $objectType;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectName;?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectWaterIntakes;?></td></tr></table> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site310_029 ;?></td> + <td class="label"><?php echo $lab_Field_site310_030 ;?></td> + <td class="label"><?php echo $lab_Field_site310_031 ;?></td> + <?php if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])): ?> + <td class="label"><a href="./?pg=site310tb3A&dev=<?php echo $_GET['dev'];?>"><img src="./images/add_ico.png" title="<?php echo $lab_Field_site803_006;?>"></a></td> + <?php endif; ?> + + </tr> + + <?php + for($i=0; $i<count($_SESSION['site310_tab3']); $i++) + { + echo" + <tr> + <td class='field_left'>".$_SESSION['site310_tab3'][$i]['HCL_FROM']."</td> + <td class='field_left'>".$_SESSION['site310_tab3'][$i]['HCL_TO']."</td> + <td class='field_left'>".$_SESSION['site310_tab3'][$i]['HCL_DESC']."</td> + "; + + if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])) + { + echo" + <td class='field_center' style='width: 10%;'> + <a href='./?pg=site310tb3&dev=".$_GET['dev']."&arr=".$i."'><img src='./images/edit.png' title='".$lab_ButtonName_Edit."' border='0'></a> + &nbsp;&nbsp;&nbsp; + <a href='./?pg=site310&dev=".$_GET['dev']."&tab=3&id=".$_SESSION['site310_tab3'][$i]['HCL_ID']."&acc=rem'><img src='./images/remove_ico.png' title='".$lab_ButtonName_Delete."' border='0' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."></a> + </td>"; + } + + + echo"</tr>"; + } + + ?> + + + </table> + + + + </div> + </div> + + + + <?php elseif ($_GET['tab']==4): ?> + + <?php + //ukrywa przycisk Modyfikuj + $showModifyButton = false; + + //if (empty($_SESSION['site310_tab4'])) $_SESSION['site310_tab4']=sqlGetResAsArray("select * from seg_object_columns where COL_DRS_ID=".$_GET['dev']." order by COL_ID"); + $_SESSION['site310_tab4']=sqlGetResAsArray("select * from seg_object_columns where COL_DRS_ID=".$_GET['dev']." order by COL_ID"); + + ?> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_004 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $objectType;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectName;?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectWaterIntakes;?></td></tr></table> + + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site310_045 ;?></td> + <td class="label"><?php echo $lab_Field_site310_050 ;?></td> + <td class="label"><?php echo $lab_Field_site203_011 ;?></td> + <td class="label"><?php echo $lab_Field_site302_007 ;?></td> + <td class="label"><?php echo $lab_Field_site310_046 ;?></td> + <?php if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])): ?> + <td class="label"><a href="./?pg=site310tb4C&dev=<?php echo $_GET['dev'];?>&param=4,add"><img src="./images/add_ico.png" title="<?php echo $lab_Field_site803_006;?>"></a></td> + <?php endif; ?> + + </tr> + + <?php + for($i=0; $i<count($_SESSION['site310_tab4']); $i++) + { + if ($_GET['col'] == $_SESSION['site310_tab4'][$i]['COL_ID']) + $checkStyle = 'background-color: #ffff00;'; + else $checkStyle = ''; + + echo" + <tr style='cursor: pointer; ".$checkStyle."' onclick=".chr(34)."document.location.href='./?pg=site310&dev=".$_GET['dev']."&tab=4&col=".$_SESSION['site310_tab4'][$i]['COL_ID']."'".chr(34)."> + <td class='field_left'>".$_SESSION['site310_tab4'][$i]['COL_NAME']."</td> + <td class='field_left'>".$_SESSION['site310_tab4'][$i]['COL_HORYZONT']."</td> + <td class='field_left'>".$_SESSION['site310_tab4'][$i]['COL_DIAMETER']."</td> + <td class='field_left'>".round(getFloatValue($_SESSION['site310_tab4'][$i]['COL_DEPTH'])-getSciecie($_GET['dev']),2)."</td> + <td class='field_left'>".$_SESSION['site310_tab4'][$i]['COL_DESC']."</td> + "; + + if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])) + { + echo" + <td class='field_center' style='width: 10%;'> + <a href='./?pg=site310tb4C&dev=".$_GET['dev']."&param=4,edit,".$i."'><img src='./images/edit.png' title='".$lab_ButtonName_Edit."' border='0'></a> + &nbsp;&nbsp;&nbsp; + <a href='./?pg=site310&dev=".$_GET['dev']."&param=4,del,".$_SESSION['site310_tab4'][$i]['COL_ID']."'><img src='./images/remove_ico.png' title='".$lab_ButtonName_Delete."' border='0' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."></a> + </td>"; + } + echo"</tr>"; + } + + ?> + </table> + + + </div> + + <?php + if ($_GET['col']>0) + { + $_SESSION['site310F_tab4'] = sqlGetResAsArray("select * from seg_object_column_filters where CLF_DRS_ID=".$_GET['dev']." and CLF_COL_ID=".$_GET['col']." order by CLF_FROM"); + echo' + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">'.$lab_Field_site310_047.'</td> + <td class="label">'.$lab_Field_site310_029.'</td> + <td class="label">'.$lab_Field_site310_030.'</td> + <td class="label">'.$lab_Field_site310_046.'</td> + '; + if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])) + echo'<td class="label"><a href="./?pg=site310tb4F&dev='.$_GET['dev'].'&param=4,add,'.$_GET['col'].'"><img src="./images/add_ico.png" title="'.$lab_Field_site803_006.'"></a></td>'; + + echo' + </tr>'; + + for($i=0; $i<count($_SESSION['site310F_tab4']); $i++) + { + echo" + <tr> + <td class='field_left'>".$_SESSION['site310F_tab4'][$i]['CLF_NAME']."</td> + <td class='field_right'>".round(getFloatValue($_SESSION['site310F_tab4'][$i]['CLF_FROM'])-getSciecie($_GET['dev']),2)."</td> + <td class='field_right'>".round(getFloatValue($_SESSION['site310F_tab4'][$i]['CLF_TO'])-getSciecie($_GET['dev']),2)."</td> + <td class='field_left'>".$_SESSION['site310F_tab4'][$i]['CLF_DESC']."</td> + "; + if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])) + { + echo" + <td class='field_center' style='width: 10%;'> + <a href='./?pg=site310tb4F&dev=".$_GET['dev']."&param=4,edit,".$_GET['col'].",".$i."'><img src='./images/edit.png' title='".$lab_ButtonName_Edit."' border='0'></a> + &nbsp;&nbsp;&nbsp; + <a href='./?pg=site310&dev=".$_GET['dev']."&col=".$_GET['col']."&param=4,delf,".$_SESSION['site310F_tab4'][$i]['CLF_ID']."'><img src='./images/remove_ico.png' title='".$lab_ButtonName_Delete."' border='0' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."></a> + </td>"; + } + + + echo" + </tr>"; + } + echo'</table>'; + + echo"<br/>"; + + $_SESSION['site310O_tab4'] = sqlGetResAsArray("select * from seg_object_column_fillings where CLO_DRS_ID=".$_GET['dev']." and CLO_COL_ID=".$_GET['col']." order by CLO_FROM"); + echo' + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">'.$lab_Field_site310_048.'</td> + <td class="label">'.$lab_Field_site310_029.'</td> + <td class="label">'.$lab_Field_site310_030.'</td> + <td class="label">'.$lab_Field_site310_046.'</td> + '; + if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])) + echo'<td class="label"><a href="./?pg=site310tb4O&dev='.$_GET['dev'].'&param=4,add,'.$_GET['col'].'"><img src="./images/add_ico.png" title="'.$lab_Field_site803_006.'"></a></td>'; + echo' + </tr>'; + + for($i=0; $i<count($_SESSION['site310O_tab4']); $i++) + { + echo" + <tr> + <td class='field_left'>".$_SESSION['site310O_tab4'][$i]['CLO_NAME']."</td> + <td class='field_right'>".round(getFloatValue($_SESSION['site310O_tab4'][$i]['CLO_FROM'])-getSciecie($_GET['dev']),2)."</td> + <td class='field_right'>".round(getFloatValue($_SESSION['site310O_tab4'][$i]['CLO_TO'])-getSciecie($_GET['dev']),2)."</td> + <td class='field_left'>".$_SESSION['site310O_tab4'][$i]['CLO_DESC']."</td> + "; + if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])) + { + echo" + <td class='field_center' style='width: 10%;'> + <a href='./?pg=site310tb4O&dev=".$_GET['dev']."&param=4,edit,".$_GET['col'].",".$i."'><img src='./images/edit.png' title='".$lab_ButtonName_Edit."' border='0'></a> + &nbsp;&nbsp;&nbsp; + <a href='./?pg=site310&dev=".$_GET['dev']."&col=".$_GET['col']."&param=4,delo,".$_SESSION['site310O_tab4'][$i]['CLO_ID']."'><img src='./images/remove_ico.png' title='".$lab_ButtonName_Delete."' border='0' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."></a> + </td>"; + } + + + + echo" + </tr>"; + } + echo'</table>'; + + + + + } + + + ?> + + + </div> + + + + + <?php elseif ($_GET['tab']==5): ?> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_005 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $objectType;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectName;?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectWaterIntakes;?></td></tr></table> + <table style="width: 100%; height: 300px;"> + <tr> + <td class="field_left" style="vertical-align:top;"><?php echo str_replace(chr(10),'<br/>',$_SESSION['site310_array'][0]['OHC_UWAGI']);?></td> + </tr> + + </table> + + </div> + </div> + + + + <?php elseif ($_GET['tab']==6): ?> + + <?php + //ukrywa przycisk Modyfikuj + $showModifyButton = false; + + //2019-03-23 + $_SESSION['site310_tab6_LS'] = getGlebokoscAct($_GET['dev']); + /* + if (empty($_SESSION['site310_tab6_LS'])) + { + $_SESSION['site310_tab6_LS']= round(sqlValue("select getLastValue(110,".$_GET['dev'].")"),2); + } + */ + + + if(empty($_SESSION['site310_tab6'])) + $_SESSION['site310_tab6'] = sqlGetResAsArray("select OHH_ID,OHH_DATE,OHH_RZEDNA,OHH_ZASYP,OHH_ZMIAN_UMIEJ_LOCAL,OHH_ZMIAN_UMIEJ_REASON from seg_object_hole_cards_his where OHH_DRS_ID=".$_GET['dev']." order by OHH_DATE desc,OHH_ID desc"); + $arrayCount = count($_SESSION['site310_tab6'])-1; + + if (empty($_GET['ohh'])) $_GET['ohh']=0; + $shIndex = $_GET['ohh']; + + ?> + + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site310_033 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $objectType;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectName;?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $objectWaterIntakes;?></td></tr></table> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site310_034 ;?></td> + <td class="label"><?php echo $lab_Field_site310_035 ;?></td> + <td class="label"><?php echo $lab_Field_site310_036 ;?></td> + + <?php if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])): ?> + <td class="label"><a href="./?pg=site310tb6&dev=<?php echo $_GET['dev'];?>&add=new"><img src="./images/add_ico.png" title="<?php echo $lab_Field_site803_006;?>"></a></td> + <?php endif; ?> + + </tr> + + <?php + $showAll = false; + + if ($arrayCount>5 && $_GET['sh']=='all') + $recCount = $arrayCount+1; + elseif ($arrayCount>5 && empty($_GET['sh'])) + { + $recCount = 5; + $showAll = true; + } + else $recCount = $arrayCount+1; + + for ($i=0; $i<$recCount; $i++) + { + if (($i==0 && empty($_GET['ohh'])) || $_GET['ohh'] == $i) + $checkStyle = 'background-color: #ffff00;'; + else $checkStyle = ''; + + + echo" + <tr style='cursor: pointer; ".$checkStyle."' onclick=".chr(34)."document.location.href='./?pg=site310&dev=".$_GET['dev']."&tab=6&sh=".$_GET['sh']."&ohh=".$i."'".chr(34)."> + <td class='field_center'>".$_SESSION['site310_tab6'][$i]['OHH_DATE']."</td> + <td class='field_right'>".getFloatValue($_SESSION['site310_tab6'][$i]['OHH_RZEDNA'])."</td> + <td class='field_right'>".getFloatValue($_SESSION['site310_tab6'][$i]['OHH_ZASYP'])."</td> + "; + + if (!empty($_SESSION['site310_edit']) && empty($_SESSION['310_direct'])) + { + + echo"<td class='field_center' style='width: 10%;'>"; + + if ($i==0) + { + echo" + <a href='./?pg=site310tb6&dev=".$_GET['dev']."&arr=".$i."'><img src='./images/edit.png' title='".$lab_ButtonName_Edit."' border='0'></a> + &nbsp;&nbsp;&nbsp;"; + + } + + echo" + <a href='./?pg=site310&dev=".$_GET['dev']."&tab=6&sh=".$_GET['sh']."&id=".$_SESSION['site310_tab6'][$i]['OHH_ID']."&acc=rem'><img src='./images/remove_ico.png' title='".$lab_ButtonName_Delete."' border='0' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."></a> + </td>"; + } + echo"</tr>"; + } + ?> + </table> + + <?php + if ($showAll) + echo' + <table> + <tr> + <td><a class="blue_under_table" href="./?pg=site310&dev='.$_GET['dev'].'&tab=6&sh=all">'.$lab_Field_site310_043.'</a></td> + </tr> + </table> + '; + + + + + + ?> + + </div> + + <div class="head_tag"><?php echo $lab_Field_site310_037 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_038;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_tab6'][$shIndex]['OHH_DATE'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site403_002;?> [m]</td> + <td class="desc_value"><?php echo getStringFloatRound($_SESSION['site310_tab6_LS']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site403_004;?> [m]</td> + <td class="desc_value"><?php echo getStringFloatRound($_SESSION['site310_tab6'][$shIndex]['OHH_ZASYP']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_039;?></td> + <td class="desc_value"><?php echo getStringFloatRound($_SESSION['site310_array'][0]['OHC_RZEDNA_TEREN']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_044;?></td> + <td class="desc_value"><?php echo getStringFloatRound($_SESSION['site310_array'][0]['OHC_RZEDNA_TERENU_ACT']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_040;?></td> + <td class="desc_value"><?php echo getStringFloatRound($_SESSION['site310_tab6'][$shIndex]['OHH_RZEDNA']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_041;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_tab6'][$shIndex]['OHH_ZMIAN_UMIEJ_LOCAL'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_042;?></td> + <td class="desc_value"><?php echo $_SESSION['site310_tab6'][$shIndex]['OHH_ZMIAN_UMIEJ_REASON'];?></td> + </tr> + + + </table> + </div> + + + </div> + + + + + <?php endif; ?> + + + + + + + <?php + //buduje linki do edycji danych + if ($_GET['tab']==1) $urlLink = "./?pg=site310tb1&dev=".$_GET['dev']; + elseif ($_GET['tab']==2) $urlLink = "./?pg=site310tb2&dev=".$_GET['dev']; + elseif ($_GET['tab']==3) $urlLink = "./?pg=site310tb3&dev=".$_GET['dev']; + elseif ($_GET['tab']==4) $urlLink = "./?pg=site310tb4&dev=".$_GET['dev']; + elseif ($_GET['tab']==5) $urlLink = "./?pg=site310tb5&dev=".$_GET['dev']; + //elseif ($_GET['tab']==6) $urlLink = "/?pg=site310tb6&dev=".$_GET['dev']; + + ?> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + +<div class="tag50_right"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="<?php echo $objectUrlHisBack;?>" role="button"><?php echo $lab_ButtonName_Back; ?></a> + <?php if (!empty($_SESSION['site310_edit']) && $showModifyButton): ?> + <a class="btn btn-success btn-sm" style="text-decoration: none;" href="<?php echo $urlLink;?>" role="button"><?php echo $lab_ButtonName_Modify; ?></a> + <?php endif; ?> + </div> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb1.php b/sites/site310tb1.php new file mode 100644 index 0000000..2f5f87c --- /dev/null +++ b/sites/site310tb1.php @@ -0,0 +1,136 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_03").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_04").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + +<?php + // pobiera dane + if(empty($_SESSION['site310_array'])) + $_SESSION['site310_array'] = sqlGetResAsArray("select * from seg_object_hole_cards where OHC_DRS_ID=".$_GET['dev']); +?> +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev']; ?>&tab=1"> + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site306_004." - ".$lab_ButtonName_HoleCard_001 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_001;?></td> + <td class="desc_value"><input class="text75" type="text" name="inHCWykonawca" value="<?php echo $_SESSION['site310_array'][0]['OHC_WYKONAWCA'];?>"></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_004; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_005;?></td> + <td class="desc_value"><input class="postcode" type="text" name="inHCRokWyk" value="<?php echo $_SESSION['site310_array'][0]['OHC_ROK_WYKON'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_006;?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inHCRozpWier' SIZE='10' value="<?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_ROZP_WIER_DATE']); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_007;?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inHCZakWier' SIZE='10' value="<?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_ZAK_WIER_DATE']); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_008;?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_03' NAME='inHCDataOdd' SIZE='10' value="<?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_DATA_ODDANIA']); ?>"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site310_009;?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_04' NAME='inHCDataZdj' SIZE='10' value="<?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_ZDJECIE_EXPL_DATE']); ?>"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site310_010;?></td> + <td class="desc_value"><input class="text50" type="text" name="inHCUrzWiert" value="<?php echo $_SESSION['site310_array'][0]['OHC_URZ_WIERT'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_011;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inHCUSposWiert', 'HOLE_CARD_DRILLING_METHOD',$_SESSION['site310_array'][0]['OHC_SPOS_WIERC']); ?></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_012; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_002;?></td> + <td class="desc_value"><input class="float" type="text" name="inHCDlGeog" value="<?php echo $_SESSION['site310_array'][0]['OHC_DL_GEOGR'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_003;?></td> + <td class="desc_value"><input class="float" type="text" name="inHCSzGeog" value="<?php echo $_SESSION['site310_array'][0]['OHC_SZER_GEOGR'];?>"></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_013; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_014;?> <span style="color:#c1272d; font-weight:bold;">*</span></td> + <td class="desc_value"><input class="float" type="text" name="inHCRzTer" required value="<?php echo $_SESSION['site310_array'][0]['OHC_RZEDNA_TEREN'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_015;?></td> + <td class="desc_value"><input class="float" type="text" name="inHCRzKryzy" value="<?php echo $_SESSION['site310_array'][0]['OHC_RZEDNA_KRYZY'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_016;?></td> + <td class="desc_value"><input class="text" type="text" name="inHCPozWodo" value="<?php echo $_SESSION['site310_array'][0]['OHC_POZIOM_WODONOS'];?>"></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_017; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_018;?></td> + <td class="desc_value"><input class="float" type="text" name="inHCGlOdw" value="<?php echo $_SESSION['site310_array'][0]['OHC_GLEB_ODWIER'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_019;?> <span style="color:#c1272d; font-weight:bold;">*</span></td> + <td class="desc_value"><input class="float" type="text" name="inHCGlOstat" required value="<?php echo $_SESSION['site310_array'][0]['OHC_GLEB_OSTAT'];?>"></td> + </tr> + <tr> + <td class="desc"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_020; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_021;?></td> + <td class="desc_value"><input class="float" type="text" name="inHCZwNawier" value="<?php echo $_SESSION['site310_array'][0]['OHC_ZWIERC_NAWIERC'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_022;?></td> + <td class="desc_value"><input class="float" type="text" name="inHCZwUstal" value="<?php echo $_SESSION['site310_array'][0]['OHC_ZWIERC_USTAL'];?>"></td> + </tr> + </table> + </div> + </div> + + + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=1" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php if (!empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tab1" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + </div> + </div> + +</form> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb2.php b/sites/site310tb2.php new file mode 100644 index 0000000..7cb766a --- /dev/null +++ b/sites/site310tb2.php @@ -0,0 +1,124 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + // pobiera dane + if(empty($_SESSION['site310_array'])) + $_SESSION['site310_array'] = sqlGetResAsArray("select * from seg_object_hole_cards where OHC_DRS_ID=".$_GET['dev']); + ?> + +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev']; ?>&tab=2"> + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_002 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc" style="width: 10%;">Q<sub>1</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_Q1" value="<?php echo $_SESSION['site310_array'][0]['OHC_Q1'];?>"></td> + <td class="desc" style="width: 10%;">S<sub>1</sub> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_S1" value="<?php echo $_SESSION['site310_array'][0]['OHC_S1'];?>"></td> + <td class="desc" style="width: 10%;">T<sub>1</sub> [s]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_T1" value="<?php echo $_SESSION['site310_array'][0]['OHC_T1'];?>"></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>2</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_Q2" value="<?php echo $_SESSION['site310_array'][0]['OHC_Q2'];?>"></td> + <td class="desc" style="width: 10%;">S<sub>2</sub> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_S2" value="<?php echo $_SESSION['site310_array'][0]['OHC_S2'];?>"></td> + <td class="desc" style="width: 10%;">T<sub>2</sub> [s]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_T2" value="<?php echo $_SESSION['site310_array'][0]['OHC_T2'];?>"></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>3</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_Q3" value="<?php echo $_SESSION['site310_array'][0]['OHC_Q3'];?>"></td> + <td class="desc" style="width: 10%;">S<sub>3</sub> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_S3" value="<?php echo $_SESSION['site310_array'][0]['OHC_S3'];?>"></td> + <td class="desc" style="width: 10%;">T<sub>3</sub> [s]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_T3" value="<?php echo $_SESSION['site310_array'][0]['OHC_T3'];?>"></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>4</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_Q4" value="<?php echo $_SESSION['site310_array'][0]['OHC_Q4'];?>"></td> + <td class="desc" style="width: 10%;">S<sub>4</sub> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_S4" value="<?php echo $_SESSION['site310_array'][0]['OHC_S4'];?>"></td> + <td class="desc" style="width: 10%;">T<sub>4</sub> [s]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_T4" value="<?php echo $_SESSION['site310_array'][0]['OHC_T4'];?>"></td> + </tr> + <tr> + <td class="desc" style="width: 10%;">Q<sub>5</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_Q5" value="<?php echo $_SESSION['site310_array'][0]['OHC_Q5'];?>"></td> + <td class="desc" style="width: 10%;">S<sub>5</sub> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_S5" value="<?php echo $_SESSION['site310_array'][0]['OHC_S5'];?>"></td> + <td class="desc" style="width: 10%;">T<sub>5</sub> [s]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_T5" value="<?php echo $_SESSION['site310_array'][0]['OHC_T5'];?>"></td> + </tr> + </table> + <table class="desc_val"> + <tr> + <td class="desc_equipment"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_023; ?></td> + </tr> + <tr> + <td class="desc_equipment">Q<sub>e</sub> [m<sup>3</sup>/min]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_QE" value="<?php echo $_SESSION['site310_array'][0]['OHC_QE'];?>"></td> + </tr> + <tr> + <td class="desc_equipment">S<sub>e</sub> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inOHC_SE" value="<?php echo $_SESSION['site310_array'][0]['OHC_SE'];?>"></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_024;?></td> + <td class="desc_value"><input class="float" type="text" name="inOHC_WYD_JEDN" value="<?php echo $_SESSION['site310_array'][0]['OHC_WYD_JEDN'];?>"></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_025;?></td> + <td class="desc_value"><input class="float" type="text" name="inOHC_WSP_SPR_HYDRO" value="<?php echo $_SESSION['site310_array'][0]['OHC_WSP_SPR_HYDRO'];?>"></td> + </tr> + <tr> + <td class="desc_equipment"></td> + <td class="desc_value" style="background-color:#EAEAEA; font-weight: bold;"><?php echo $lab_Field_site310_026; ?></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_032;?></td> + <td class="desc_value"><input class="text50" type="text" name="inOHC_POZ_WOD_NO" value="<?php echo $_SESSION['site310_array'][0]['OHC_POZ_WOD_NO'];?>"></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_027;?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inOHC_POZ_DATE_TO' SIZE='10' value="<?php echo str_replace('0000-00-00','',$_SESSION['site310_array'][0]['OHC_POZ_DATE_TO']); ?>"></td> + </tr> + <tr> + <td class="desc_equipment"><?php echo $lab_Field_site310_028;?></td> + <td class="desc_value"><input class="float" type="text" name="inOHC_POZ_Q_DOP" value="<?php echo $_SESSION['site310_array'][0]['OHC_POZ_Q_DOP'];?>"></td> + </tr> + </table> + + + + </div> + </div> + + + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=2" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php if (!empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tab2" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + </div> + </div> + +</form> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb3.php b/sites/site310tb3.php new file mode 100644 index 0000000..bfb867b --- /dev/null +++ b/sites/site310tb3.php @@ -0,0 +1,52 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <?php + if (!empty($_GET['arr'])) $shIndex=$_GET['arr']; + else $shIndex=0; + ?> + +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev']; ?>&tab=3&hcl=<?php echo $_SESSION['site310_tab3'][$shIndex]['HCL_ID'];?>" > + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_003 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_029;?> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inHCL_FROM" value="<?php echo $_SESSION['site310_tab3'][$shIndex]['HCL_FROM'];?>" ></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_030;?> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inHCL_TO" value="<?php echo $_SESSION['site310_tab3'][$shIndex]['HCL_TO'];?>" ></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_031;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inHCL_DESC', 'HOLE_CARD_LITOL',$_SESSION['site310_tab3'][$shIndex]['HCL_DESC']); ?></td> + </tr> + </table> + </div> + </div> + + + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=3&ohh=<?php echo $_GET['arr'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php if (!empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310Etab3" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + </div> + </div> + +</form> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb3A.php b/sites/site310tb3A.php new file mode 100644 index 0000000..96e07e6 --- /dev/null +++ b/sites/site310tb3A.php @@ -0,0 +1,48 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev']; ?>&tab=3"> + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_003 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_029;?> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inHCL_FROM" value="<?php echo $_SESSION['site310_tab3'][$shIndex]['HCL_FROM'];?>" ></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_030;?> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inHCL_TO" value="<?php echo $_SESSION['site310_tab3'][$shIndex]['HCL_TO'];?>" ></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_031;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inHCL_DESC', 'HOLE_CARD_LITOL',$_SESSION['site310_tab3'][$shIndex]['HCL_DESC']); ?></td> + </tr> + </table> + </div> + </div> + + + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=3" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php if (!empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310Atab3" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + <?php endif; ?> + </div> + </div> + +</form> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb4C.php b/sites/site310tb4C.php new file mode 100644 index 0000000..be5ae33 --- /dev/null +++ b/sites/site310tb4C.php @@ -0,0 +1,82 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <?php + // pobiera parametry z url + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $_GET['tab'] = $paramArray[0]; + $getAcction = $paramArray[1]; + $getRecID = $paramArray[2]; + unset($paramArray); + } + ?> + + + +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=4"> + <input type="hidden" name="inCOL_ID" value="<?php echo $_SESSION['site310_tab4'][$getRecID]['COL_ID']; ?>" > + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_004;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_045;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inCOL_NAME', 'HOLE_CARD_COLUMN_TYPE',$_SESSION['site310_tab4'][$getRecID]['COL_NAME']); ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_050;?></td> + <td class="desc_value"><input class="float" type="text" name="inCOL_HORYZONT" value="<?php echo $_SESSION['site310_tab4'][$getRecID]['COL_HORYZONT']; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site203_011;?></td> + <td class="desc_value"><input class="float_req" type="text" name="inCOL_DIAMETER" value="<?php echo $_SESSION['site310_tab4'][$getRecID]['COL_DIAMETER']; ?>" required></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site302_007;?></td> + <td class="desc_value"><input class="float_req" type="text" name="inCOL_DEPTH" value="<?php echo $_SESSION['site310_tab4'][$getRecID]['COL_DEPTH']; ?>" required></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_046;?></td> + <td class="desc_value"><input class="text75" type="text" name="inCOL_DESC" value="<?php echo $_SESSION['site310_tab4'][$getRecID]['COL_DESC']; ?>"></td> + </tr> + </table> + </div> + </div> + + <div class="tag100"> + <div class="head_tag">Ważna informacja</div> + <div class="tag"> + <h5 style="color: #ff0000; text-align: center; padding-top: 10px; padding-bottom: 10px;"> + Z uwagi na poprawność przeliczania danych należy wprowadzać wartości odnosząc się do Rzędnej pierwotnej terenu [m npm], nie uwzględniając ścięć! + </h5> + </div> + </div> + + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=4" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + + <?php if ($getAcction=='add' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tb4AC" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + <?php elseif ($getAcction=='edit' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tb4EC" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + + </div> + </div> + +</form> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb4F.php b/sites/site310tb4F.php new file mode 100644 index 0000000..d5fa6ef --- /dev/null +++ b/sites/site310tb4F.php @@ -0,0 +1,79 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <?php + // pobiera parametry z url + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $_GET['tab'] = $paramArray[0]; + $getAcction = $paramArray[1]; + $getColID = $paramArray[2]; + $getRecID = $paramArray[3]; + unset($paramArray); + } + ?> + + + +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=4&col=<?php echo $getColID;?>"> + <input type="hidden" name="inCLF_ID" value="<?php echo $_SESSION['site310F_tab4'][$getRecID]['CLF_ID']; ?>" > + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_004;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_047;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inCLF_NAME', 'HOLE_CARD_FILTER_TYPE',$_SESSION['site310F_tab4'][$getRecID]['CLF_NAME']); ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_029;?></td> + <td class="desc_value"><input class="float_req" type="text" name="inCLF_FROM" value="<?php echo $_SESSION['site310F_tab4'][$getRecID]['CLF_FROM']; ?>" required></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_030;?></td> + <td class="desc_value"><input class="float_req" type="text" name="inCLF_TO" value="<?php echo $_SESSION['site310F_tab4'][$getRecID]['CLF_TO']; ?>" required></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_046;?></td> + <td class="desc_value"><input class="text75" type="text" name="inCLF_DESC" value="<?php echo $_SESSION['site310F_tab4'][$getRecID]['CLF_DESC']; ?>"></td> + </tr> + + </table> + </div> + </div> + + <div class="tag100"> + <div class="head_tag">Ważna informacja</div> + <div class="tag"> + <h5 style="color: #ff0000; text-align: center; padding-top: 10px; padding-bottom: 10px;"> + Z uwagi na poprawność przeliczania danych należy wprowadzać wartości odnosząc się do Rzędnej pierwotnej terenu [m npm], nie uwzględniając ścięć! + </h5> + </div> + </div> + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=4&col=<?php echo $getColID;?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + + <?php if ($getAcction=='add' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tb4AF" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + <?php elseif ($getAcction=='edit' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tb4EF" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + + </div> + </div> + +</form> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb4O.php b/sites/site310tb4O.php new file mode 100644 index 0000000..5fe9dd0 --- /dev/null +++ b/sites/site310tb4O.php @@ -0,0 +1,79 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <?php + // pobiera parametry z url + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $_GET['tab'] = $paramArray[0]; + $getAcction = $paramArray[1]; + $getColID = $paramArray[2]; + $getRecID = $paramArray[3]; + unset($paramArray); + } + ?> + + + +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=4&col=<?php echo $getColID;?>"> + <input type="hidden" name="inCLO_ID" value="<?php echo $_SESSION['site310O_tab4'][$getRecID]['CLO_ID']; ?>" > + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_004;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_048;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inCLO_NAME', 'HOLE_CARD_FILLING_TYPE',$_SESSION['site310O_tab4'][$getRecID]['CLO_NAME']); ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_029;?></td> + <td class="desc_value"><input class="float_req" type="text" name="inCLO_FROM" value="<?php echo $_SESSION['site310O_tab4'][$getRecID]['CLO_FROM']; ?>" required></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_030;?></td> + <td class="desc_value"><input class="float_req" type="text" name="inCLO_TO" value="<?php echo $_SESSION['site310O_tab4'][$getRecID]['CLO_TO']; ?>" required></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_046;?></td> + <td class="desc_value"><input class="text75" type="text" name="inCLO_DESC" value="<?php echo $_SESSION['site310O_tab4'][$getRecID]['CLO_DESC']; ?>"></td> + </tr> + + </table> + </div> + </div> + + <div class="tag100"> + <div class="head_tag">Ważna informacja</div> + <div class="tag"> + <h5 style="color: #ff0000; text-align: center; padding-top: 10px; padding-bottom: 10px;"> + Z uwagi na poprawność przeliczania danych należy wprowadzać wartości odnosząc się do Rzędnej pierwotnej terenu [m npm], nie uwzględniając ścięć! + </h5> + </div> + </div> + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=4&col=<?php echo $getColID;?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + + <?php if ($getAcction=='add' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tb4AO" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + <?php elseif ($getAcction=='edit' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tb4EO" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + + </div> + </div> + +</form> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb5.php b/sites/site310tb5.php new file mode 100644 index 0000000..c16e7b2 --- /dev/null +++ b/sites/site310tb5.php @@ -0,0 +1,43 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <?php + // pobiera dane + if(empty($_SESSION['site310_array'])) + $_SESSION['site310_array'] = sqlGetResAsArray("select * from seg_object_hole_cards where OHC_DRS_ID=".$_GET['dev']); + ?> + +<form method="post" action="./?pg=site310&&dev=<?php echo $_GET['dev']; ?>&tab=5"> + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_005 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table style="width: 100%;"> + <tr> + <td><textarea style="width: 100%; height: 300px;" name="inOHC_UWAGI"><?php echo $_SESSION['site310_array'][0]['OHC_UWAGI']; ?></textarea></td> + </tr> + + </table> + + </div> + </div> + + + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=5" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php if (!empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310tab5" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + </div> + </div> + +</form> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site310tb6.php b/sites/site310tb6.php new file mode 100644 index 0000000..32b8ffa --- /dev/null +++ b/sites/site310tb6.php @@ -0,0 +1,97 @@ +<?php +if (!empty($_SESSION['site310_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + if (!empty($_GET['arr'])) $shIndex=$_GET['arr']; + else $shIndex=0; + + if ($_GET['add']=='new') $dateAct = date('Y-m-d'); + else $dateAct = str_replace('0000-00-00','',$_SESSION['site310_tab6'][$shIndex]['OHH_DATE']); + ?> + + +<form method="post" action="./?pg=site310&dev=<?php echo $_GET['dev']; ?>&tab=6&ohh=<?php echo $shIndex;?>&add=<?php echo $_GET['add'];?>"> + <div class="tag100"> + <div class="head_tag"><?php echo $lab_ButtonName_HoleCard_005 ;?></div> + <div class="tag"> + <table style="padding-bottom: 10px;"><tr><td><?php echo $lab_Field_site405_011;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['wellName'];?></td><td style="padding-left: 100px;"><?php echo $lab_Field_site301_014;?></td><td style="padding-left: 5px; font-weight: bold;"><?php echo $_SESSION['well_details']['well_Uj'];?></td></tr></table> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site310_038;?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inOHH_DATE' SIZE='10' value="<?php echo $dateAct; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site403_002;?> [m]</td> + <td class="desc_value"><?php echo getFloatValue($_SESSION['site310_tab6_LS']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_039;?></td> + <td class="desc_value"><?php echo getFloatValue($_SESSION['site310_array'][0]['OHC_RZEDNA_TEREN']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_044;?></td> + <td class="desc_value"><?php echo getFloatValue($_SESSION['site310_array'][0]['OHC_RZEDNA_TERENU_ACT']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_040;?></td> + <td class="desc_value"><input class="float" type="text" name="inOHH_RZEDNA" value="<?php echo getFloatValue($_SESSION['site310_tab6'][$shIndex]['OHH_RZEDNA']);?>" id="inRzNew"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site403_004;?> [m]</td> + <td class="desc_value"><input class="float" type="text" name="inOHH_ZASYP" value="<?php echo getFloatValue($_SESSION['site310_tab6'][$shIndex]['OHH_ZASYP']);?>" id="inZasNew"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_041;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inOHH_ZMIAN_UMIEJ_LOCAL', 'HOLE_CARD_LOCATION',$_SESSION['site310_tab6'][$shIndex]['OHH_ZMIAN_UMIEJ_LOCAL']); ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site310_042;?></td> + <td class="desc_value"><?php echo selectDescriptionFromDictionary('inOHH_ZMIAN_UMIEJ_REASON', 'HOLE_CARD_LOCATION_REASON',$_SESSION['site310_tab6'][$shIndex]['OHH_ZMIAN_UMIEJ_REASON']); ?></td> + </tr> + </table> + </div> + </div> + + + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site310&dev=<?php echo $_GET['dev'];?>&tab=6&ohh=<?php echo $_GET['arr'];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php if (!empty($_SESSION['site310_edit'])): ?> + + <?php if ($_GET['add']=='new'): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310Atab6" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + <?php else: ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="sub310Etab6" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + + <?php endif; ?> + </div> + </div> + +</form> + + +<script> + $('#inRzNew').keyup(function(){ + var newZasyp; + newZasyp = (<?php echo getFloatValue($_SESSION['site310_tab6'][$shIndex]['OHH_ZASYP']);?>) - (<?php echo getFloatValue($_SESSION['site310_array'][0]['OHC_RZEDNA_TERENU_ACT']);?> -($('#inRzNew').val().replace(',','.'))); + newZasyp = newZasyp.toFixed(2); + //alert(newZasyp); + $('#inZasNew').val(newZasyp); + }); +</script> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site401.php b/sites/site401.php new file mode 100644 index 0000000..839b179 --- /dev/null +++ b/sites/site401.php @@ -0,0 +1,228 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + + <?php + // Po wybraniu wydziału przypisuje tylko dostęp do jednego + if (!empty($_GET['seldep'])) + { + $_SESSION['syndis_eq_stock'] = $_GET['seldep']; + $_SESSION['eq_stock_param3_1'] = $_GET['seldep']; + $_POST['wydz'] = $_GET['seldep']; + unset($_SESSION['eq_stock_param3_2']); + unset($_SESSION['eq_stock_param3_3']); + } + ?> + + +<?php + if ($_POST['subWellSave']==$lab_ButtonName_Save && !empty($_POST['inWellPumpID']) && !empty($_POST['inWellEngineID']) && !empty($_POST['inWellName'])) + { + mysql_query("INSERT INTO seg_wells SET WLL_NAME='".$_POST['inWellName']."',WLL_DIAMETER=".$_POST['inWellDiame'].",WLL_DEPTH=".$_POST['inWellDepth'].",WLL_LATITUDE='".$_POST['inWellLat']."',WLL_LONGITUDE='".$_POST['inWellLong']."'"); + $maxWELLid = sqlValue("select max(WLL_ID) from seg_wells"); + mysql_query("INSERT INTO seg_well_pump_eng_rel SET RWL_WLL_ID=$maxWELLid,RWL_PUP_DRS_ID=".$_POST['inWellPumpID'].",RWL_ENG_DRS_ID=".$_POST['inWellEngineID']); + mysql_query("INSERT INTO seg_dev_resources SET DRS_DEV_ID=$maxWELLid,DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='WELL'),DRS_AVAILABLE_DATE='".$_POST['inWellAVdate']."',DRS_STATUS_DIC_ID=".$_POST['inWellStatus'].",DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now()"); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources where DRS_ID=(select max(DRS_ID) from seg_dev_resources)"); + + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and DIC_NAME='USABLE'),DRS_RESOURCES_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES' and DIC_NAME='OPERATION'),DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$_POST['inWellPumpID']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources WHERE DRS_ID=".$_POST['inWellPumpID']); + mysql_query("UPDATE seg_dev_resources SET DRS_STATUS_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_STATUS' and DIC_NAME='USABLE'),DRS_RESOURCES_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DEV_RESOURCES' and DIC_NAME='OPERATION'),DRS_AUDIT_USR='".$_SESSION['user']."',DRS_AUDIT_DATE=now() WHERE DRS_ID=".$_POST['inWellEngineID']); + mysql_query("insert into seg_dev_resources_his select * from seg_dev_resources WHERE DRS_ID=".$_POST['inWellEngineID']); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + unset($maxWELLid); + unset($maxDRSid); + } + + //if (empty($_POST['wydz'])) $_POST['wydz']=sqlStringValue("select URG_DESC from sys_users_regions where URG_USR_ID=".$_SESSION['user_id']." limit 1","URG_DESC"); + //if (empty($_POST['wydz'])) $_POST['wydz']=$_SESSION['eq_stock_param3_1'] + + if (!$_POST['sr_status']) $_POST['sr_status']=3; + +?> + + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site401_input'] = $_POST['sr_well']; + ?> + + + + <form action="./?pg=site401&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Studnia:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site401_input'];?>"></td> + <td style="width: 10px;"></td> + <td>status:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID in (3,4)"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszystkie</option>"; + else + echo"<option value='100'>Wszystkie</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + Pokaż wszystkie</td> + </tr> + </table> + </div> + </form> + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site401_013 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site301_001 ;?></TD> + <td class="label"><?php echo $lab_Field_site301_014 ;?></td> + <TD class="label"><?php echo $lab_Field_site301_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_004 ;?></TD> + <td class="label"><?php echo $lab_Field_site301_005 ;?></td> + <td class="label"><?php echo $lab_Field_site301_007 ;?></td> + <td class="label"></td> + </TR> + + <?php + + + if (empty($_SESSION['site401_array']) || $_POST['sub_search']=='Szukaj') + { +// $query="select DRS_ID,RWL_WLL_ID,WLL_NAME,WLL_BARIERA,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID,DRS_RESOURCES_DIC_ID,WLL_SYS_TYPE from seg_dev_resources,seg_well_pump_eng_rel left join seg_wells on RWL_WLL_ID=WLL_ID where RWL_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_STATUS_DIC_ID=3 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and WLL_NAME like '%".$_POST['sr_well']."%'"; + $query="select DRS_ID,RWL_WLL_ID,WLL_NAME,WLL_BARIERA,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID,DRS_RESOURCES_DIC_ID,DRS_STATUS_DIC_ID,WLL_SYS_TYPE from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID where DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and WLL_NAME like '%".$_POST['sr_well']."%'"; + if($_POST['sr_status']!=100) $query.=" and DRS_STATUS_DIC_ID=".$_POST['sr_status']; + + $query .= " order by WLL_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + unset($pupArray); + if ($r["RWL_PUP_DRS_ID"]>0) + $pupArray = sqlGetResAsArray("select * from seg_dev_resources,seg_pumps where DRS_DEV_TYPE=10 and PUP_ID=DRS_DEV_ID and DRS_ID=".$r["RWL_PUP_DRS_ID"]); + unset($engArray); + if ($r["RWL_ENG_DRS_ID"]>0) + $engArray = sqlGetResAsArray("select * from seg_dev_resources,seg_engines where DRS_DEV_TYPE=11 and ENG_ID=DRS_DEV_ID and DRS_ID=".$r["RWL_ENG_DRS_ID"]); + unset($onOffArray); + $onOffArray = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$r["DRS_ID"].")"); + + $res[]=array( + 'drs_id' => $r["DRS_ID"], + 'well_name' => $r["WLL_NAME"], + 'well_id' => $r["RWL_WLL_ID"], + 'pup_name' => $pupArray[0]['PUP_NAME'], + 'pup_no' => $pupArray[0]['DRS_SN_NUMBER'], + 'eng_name' => $engArray[0]['ENG_NAME'], + 'eng_no' => $engArray[0]['DRS_SN_NUMBER'], + 'desc' => $r["WLL_SYS_TYPE"], + 'desc_info' => setDicName($r["DRS_RESOURCES_DIC_ID"]), + 'bariera' => $r["WLL_BARIERA"], + 'onoff' => $onOffArray[0]['DRD_VALUE'], + + ); + + + } + unset($_SESSION['site401_array']); + $_SESSION['site401_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site401_array'])) $stop=count($_SESSION['site401_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site401mark&dev=".$_SESSION['site401_array'][$i]['drs_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site401_array'][$i]['well_name']."</TD> + <TD class='field_center'>".$_SESSION['site401_array'][$i]['bariera']."</TD> + <TD class='field_center'>".$_SESSION['site401_array'][$i]['pup_name']."</TD> + <TD class='field_center'>".$_SESSION['site401_array'][$i]['pup_no']."</TD> + <TD class='field_center'>".$_SESSION['site401_array'][$i]['eng_name']."</TD> + <TD class='field_center'>".$_SESSION['site401_array'][$i]['eng_no']."</TD> + <TD class='field_center'>".$_SESSION['site401_array'][$i]['desc']."</TD>"; + + if ($_SESSION['site401_array'][$i]['onoff'] == "ON") + echo"<TD class='field_center'><img src='./images/power_on.png' border=0></TD>"; + else + echo"<TD class='field_center'><img src='./images/power_off.png' border=0></TD>"; + + echo" + </TR> + "; + } + ?> + </table> + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site401_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site401_array'])>20) + echo pagination_grid('?pg=site401', $_GET['pgn'], count($_SESSION['site401_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site401_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <!--<a href="./export/site401_pdf.php" target="_blank" title="Export do PDF"><img src="./images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp;--> + <a href="./export/site401_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + + </div> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site401CH.php b/sites/site401CH.php new file mode 100644 index 0000000..c6ba113 --- /dev/null +++ b/sites/site401CH.php @@ -0,0 +1,258 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + + <?php + if ($_POST['subWellParamSave']==$lab_ButtonName_Save) + { + $_GET['dev'] = $_POST['dev']; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=".$_POST['dic'].",DRD_VALUE='".str_replace(',','.',$_POST['inWellParamValue'])."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inWellParamDate']." ".date('H:i:s')."';"); + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + } + ?> + + + + <?php + $wynik = mysql_query("select DRS_ID,RWL_WLL_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $var_DRSid = $r["DRS_ID"]; + $var_WLLid = $r["RWL_WLL_ID"]; + $var_DRS_PUPid = $r["RWL_PUP_DRS_ID"]; $var_PUPid=sqlValue("select DRS_DEV_ID from seg_dev_resources where DRS_ID=$var_DRS_PUPid"); + $var_DRS_ENGid = $r["RWL_ENG_DRS_ID"]; $var_ENGid=sqlValue("select DRS_DEV_ID from seg_dev_resources where DRS_ID=$var_DRS_ENGid"); + } + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site301_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_016; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select WLL_NAME from seg_wells where WLL_ID=$var_WLLid", "WLL_NAME"); ?></TD> + </TR> + + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_017; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DIC_ENG_LANG from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=$var_WLLid)","DIC_ENG_LANG"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_006; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DRS_AVAILABLE_DATE from seg_dev_resources where DRS_ID=$var_DRSid", "DRS_AVAILABLE_DATE"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select PUP_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=$var_DRS_PUPid", "PUP_NAME"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select DRS_SN_NUMBER from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=$var_DRS_PUPid", "DRS_SN_NUMBER"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select ENG_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=$var_DRS_ENGid", "ENG_NAME"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select DRS_SN_NUMBER from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=$var_DRS_ENGid", "DRS_SN_NUMBER"); ?></TD> + </TR> + </table> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site401_004 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR1'"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR1' and DIC_NAME='$var_DIC_NAME'",$decFieldLang)."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData('WELL_CHEMICAL_PARAMETERS_GR1',$var_DIC_NAME,$var_DRSid,'site401CH')."</TD>"; + if (!empty($_SESSION['site401_edit_chpar'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401ECH&dev=$var_DRSid&dic=$var_DIC_ID'".chr(34)."></td>"; + echo" + </TR> + "; + } + ?> + </table> + </div> + + + + +</div> + + + +<div class="tag50_right"> + <div class="head_tag"><?php echo $lab_Tag_site401_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR2'"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR2' and DIC_NAME='$var_DIC_NAME'",$decFieldLang)."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData('WELL_CHEMICAL_PARAMETERS_GR2',$var_DIC_NAME,$var_DRSid,'site401CH')."</TD>"; + if (!empty($_SESSION['site401_edit_chpar'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401ECH&dev=$var_DRSid&dic=$var_DIC_ID'".chr(34)."></td>"; + echo" + </TR> + "; + } + ?> + </table> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site401_007 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR3'"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR3' and DIC_NAME='$var_DIC_NAME'",$decFieldLang)."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData('WELL_CHEMICAL_PARAMETERS_GR3',$var_DIC_NAME,$var_DRSid,'site401CH')."</TD>"; + if (!empty($_SESSION['site401_edit_chpar'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401ECH&dev=$var_DRSid&dic=$var_DIC_ID'".chr(34)."></td>"; + echo" + </TR> + "; + } + ?> + </table> + </div> + +</div> + + + <?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + getHistoryData($_GET['dev'], $_GET['dic']); + ?> + + +<div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site401inf&dev=<?php echo$_GET['dev'];?>" role="button"><?php echo $lab_ButtonName_Back; ?></a> + <button id="showHist" class="btn btn-primary btn-sm" type="button"><?php echo $lab_HistoricalData_008; ?></button> + </div> +</div> + +<br/><br/> +<div class="tag100" id="tagShowHist"> + + <table> + <tr> + <td>Wyświetl dane dla parametru:</td> + <td style="width: 5px;"></td> + <td> + <select name="inChemParam" id="inChemParam"> + <option value="0"><?php echo $lab_FormSelect_001; ?></option> + <option value="0">-------------------------------------------</option> + <?php + unset($chemParamArray_01);unset($chemParamArray_02);unset($chemParamArray_03); + $chemParamArray_01 = sqlGetResAsArray("select DIC_ID,DIC_NAME,".$decFieldLang." from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR1' order by ".$decFieldLang); + $chemParamArray_02 = sqlGetResAsArray("select DIC_ID,DIC_NAME,$decFieldLang from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR2' order by ".$decFieldLang); + $chemParamArray_03 = sqlGetResAsArray("select DIC_ID,DIC_NAME,$decFieldLang from sys_dictionaries where DIC_TYPE='WELL_CHEMICAL_PARAMETERS_GR3' order by ".$decFieldLang); + + for($i=0; $i<count($chemParamArray_01); $i++) + echo'<option value="'.$chemParamArray_01[$i]['DIC_ID'].'">'.$chemParamArray_01[$i][$decFieldLang].'</option>'; + ?> + <option value="0">-------------------------------------------</option> + <?php + for($i=0; $i<count($chemParamArray_02); $i++) + echo'<option value="'.$chemParamArray_02[$i]['DIC_ID'].'">'.$chemParamArray_02[$i][$decFieldLang].'</option>'; + ?> + <option value="0">-------------------------------------------</option> + <?php + for($i=0; $i<count($chemParamArray_03); $i++) + echo'<option value="'.$chemParamArray_03[$i]['DIC_ID'].'">'.$chemParamArray_03[$i][$decFieldLang].'</option>'; + ?> + + + </select> + </td> + <td style="width: 5px;"></td> + <td>za okres od:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='inDateFrom' NAME='inDateFrom' value='<?php echo date('Y-m').'-01'; ?>' SIZE='10'></td> + <td style="width: 15px;"></td> + <td>do:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='inDateTo' NAME='inDateTo' value='<?php echo date('Y-m-d'); ?>' SIZE='10'></td> + <td style="width: 20px;"></td> + <td><button type="button" id="subSite401CHShow" class="btn btn-default btn-sm">Pokaż</button></td> + </tr> + </table> +</div> +<br/> + +<div class="tag100" id="tagShowHistData"> +</div> + +<script> + $(window).load(function() { + + $(function() {$("#inDateFrom").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#inDateTo").datepicker({changeMonth: true,changeYear: true});}); + + $('#tagShowHist').hide(); + + $('#showHist').click(function() { + $('#tagShowHist').show(); + + }); + + + // wyświetlanie danych + // =============================================================== + $('#subSite401CHShow').click(function() { + $.post("./ajax_func.php", + { + page: "site401CH", + post_action: "show_params", + post_dev_id: "<?php echo $var_DRSid; ?>", + post_param_id: $('#inChemParam').val(), + post_date_from: $('#inDateFrom').val(), + post_date_to: $('#inDateTo').val() + } + ).done(function(data) + { + $('#tagShowHistData').html(data); + } + ); + }); + // =============================================================== + + + }); +</script> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401CL.php b/sites/site401CL.php new file mode 100644 index 0000000..9e51ef1 --- /dev/null +++ b/sites/site401CL.php @@ -0,0 +1,119 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + + <?php + if ($_POST['subWellParamSave']==$lab_ButtonName_Save) + { + $_GET['dev'] = $_POST['dev']; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=".$_POST['dic'].",DRD_VALUE='".str_replace(',','.',$_POST['inWellParamValue'])."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inWellParamDate']." ".date('H:i:s')."';"); + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + } + ?> + + + + <?php + $wynik = mysql_query("select DRS_ID,RWL_WLL_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $var_DRSid = $r["DRS_ID"]; + $var_WLLid = $r["RWL_WLL_ID"]; + $var_DRS_PUPid = $r["RWL_PUP_DRS_ID"]; $var_PUPid=sqlValue("select DRS_DEV_ID from seg_dev_resources where DRS_ID=$var_DRS_PUPid"); + $var_DRS_ENGid = $r["RWL_ENG_DRS_ID"]; $var_ENGid=sqlValue("select DRS_DEV_ID from seg_dev_resources where DRS_ID=$var_DRS_ENGid"); + } + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site301_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_016; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select WLL_NAME from seg_wells where WLL_ID=$var_WLLid", "WLL_NAME"); ?></TD> + </TR> + + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_017; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DIC_ENG_LANG from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=$var_WLLid)","DIC_ENG_LANG"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_006; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DRS_AVAILABLE_DATE from seg_dev_resources where DRS_ID=$var_DRSid", "DRS_AVAILABLE_DATE"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select PUP_NAME from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=$var_DRS_PUPid", "PUP_NAME"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select DRS_SN_NUMBER from seg_dev_resources left join seg_pumps on DRS_DEV_ID=PUP_ID where DRS_ID=$var_DRS_PUPid", "DRS_SN_NUMBER"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select ENG_NAME from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=$var_DRS_ENGid", "ENG_NAME"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select DRS_SN_NUMBER from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=$var_DRS_ENGid", "DRS_SN_NUMBER"); ?></TD> + </TR> + </table> + </div> + + +</div> + + + +<div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_ButtonName_Calibration ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <?php + $result = mysql_query("select DIC_ID,DIC_NAME from sys_dictionaries where DIC_TYPE='WELL_CALIBRATION'"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + echo" + <TR> + <TD class='desc_well_param'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='WELL_CALIBRATION' and DIC_NAME='$var_DIC_NAME'",$decFieldLang)."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData('WELL_CALIBRATION',$var_DIC_NAME,$var_DRSid,'site401CL')."</TD>"; + if (!empty($_SESSION['site401_edit'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401ECL&dev=$var_DRSid&dic=$var_DIC_ID'".chr(34)."></td>"; + echo" + </TR> + "; + } + ?> + </table> + </div> + +</div> + + + <?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + getHistoryData($_GET['dev'], $_GET['dic']); + ?> + + +<div class="tag100"> + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Back; ?>" onclick="document.location.href='?pg=site401inf&dev=<?php echo$_GET['dev'];?>'"> + </div> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401E.php b/sites/site401E.php new file mode 100644 index 0000000..886d296 --- /dev/null +++ b/sites/site401E.php @@ -0,0 +1,52 @@ +<?php +if (!empty($_SESSION['site401_edit_param'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + + + + +<div class="tag100"> + <FORM ACTION="?pg=site401inf" METHOD="POST" id="AddNewWellParameter" class="form_valid"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + <input type="hidden" name="dic" value="<?php echo $_GET['dic']; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site803E_001." - ".$_SESSION['well_details']['wellName'] ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site401_003 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inWellParamDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=".$_GET['dic'],$decFieldLang); ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inWellParamValue" value="<?php echo getLastValueForEdit($_GET['dic'],$_GET['dev']); ?>"></td> + </tr> + </table> + </div> + + + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site401inf&dev=<?php echo $_GET['dev']; ?>'"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subWellParamSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401ECH.php b/sites/site401ECH.php new file mode 100644 index 0000000..91ace51 --- /dev/null +++ b/sites/site401ECH.php @@ -0,0 +1,49 @@ +<?php +if (!empty($_SESSION['site401_edit_chpar'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + +<div class="tag100"> + <FORM ACTION="?pg=site401CH" METHOD="POST" id="AddNewWellParameter" class="form_valid"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + <input type="hidden" name="dic" value="<?php echo $_GET['dic']; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site803E_001 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site401_003 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='date' id='data_01' NAME='inWellParamDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=".$_GET['dic'],$decFieldLang); ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="text" NAME="inWellParamValue" value="<?php echo getLastValueForEdit($_GET['dic'],$_GET['dev']); ?>" id="inNumberValidate"></td> + </tr> + </table> + </div> + + + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site401CH&dev=<?php echo $_GET['dev']; ?>'"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subWellParamSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401ECL.php b/sites/site401ECL.php new file mode 100644 index 0000000..e2eb443 --- /dev/null +++ b/sites/site401ECL.php @@ -0,0 +1,49 @@ +<?php +if (!empty($_SESSION['site401_edit_chpar'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + +<div class="tag100"> + <FORM ACTION="?pg=site401CL" METHOD="POST" id="AddNewWellParameter" class="form_valid"> + <input type="hidden" name="dev" value="<?php echo $_GET['dev']; ?>"> + <input type="hidden" name="dic" value="<?php echo $_GET['dic']; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site803E_001 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site401_003 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inWellParamDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=".$_GET['dic'],$decFieldLang); ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inWellParamValue" value="<?php echo getLastValueForEdit($_GET['dic'],$_GET['dev']); ?>"></td> + </tr> + </table> + </div> + + + + <div class="tag_buttons"> + <INPUT class="cancel_button" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site401CL&dev=<?php echo $_GET['dev']; ?>'"> + <INPUT class='save_button' TYPE='SUBMIT' NAME='subWellParamSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401Eonf.php b/sites/site401Eonf.php new file mode 100644 index 0000000..68273fb --- /dev/null +++ b/sites/site401Eonf.php @@ -0,0 +1,84 @@ +<?php +if (!empty($_SESSION['site401_edit_param'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + + + if ($_GET['pa']=='on') + { + $label = 'Załącz pompę'; + } + elseif ($_GET['pa']=='reson') + { + $label = 'Przyczyna wyłączenia'; + } + else { + $label = 'Wyłącz pompę'; + } + + ?> + + + + +<div class="tag100"> + <FORM ACTION="./?pg=site401mark&dev=<?php echo $_GET['dev']; ?>&pa=<?php echo $_GET['pa']; ?>" METHOD="POST"> + <input type="hidden" name="inEncrypted" value="<?php echo md5($_GET['dev']); ?>"> + <div class="head_tag"><?php echo $label." - ".$_SESSION['well_details']['wellName'] ;?></div> + <div class="tag"> + <table class="desc_val"> + + + + <?php if ($_GET['pa']!='reson' ): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site401_021 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inOnOffDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site401_022 ; ?></td> + <td CLASS=desc_value> + <?php getSelectHours('inOnOffTimeH');?> + : + <?php getSelectMinutes('inOnOffTimeM');?> + </td> + </tr> + <?php endif; ?> + + <?php if ($_GET['pa']=='off' || $_GET['pa']=='reson' ): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site401_024 ; ?></td> + <td CLASS=desc_value> + <?php echo selectFromDictionary("inOnOffReason", "WELL_STATUS_OFF"); ?> + + </td> + </tr> + <?php endif; ?> + + </table> + </div> + + + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site401mark&dev=<?php echo $_GET['dev']; ?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subWellParamSave' VALUE="<?php echo $lab_ButtonName_Next; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401ahis.php b/sites/site401ahis.php new file mode 100644 index 0000000..fd9d70c --- /dev/null +++ b/sites/site401ahis.php @@ -0,0 +1,332 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + // usuwanie z historii + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + if ($tpmArray[0]=='del' && md5($tpmArray[1])==$tpmArray[2]) + { + mysql_query("DELETE FROM ".$tpmArray[3]." WHERE RHD_ID=".$tpmArray[1]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + unset($_GET['param']); + unset($tpmArray); + $_POST['sub_search']='Pokaż'; + } + + //edycja powodu wybudowy + if ($_POST['sub401ahisED']==$lab_ButtonName_Save && $_GET['wle']>0) + { + //mysql_query("UPDATE seg_wells_exchanged SET WLE_REASON='".$_POST['inBuildReason']."' WHERE WLE_ID=".$_GET['wle']); + mysql_query("UPDATE seg_wells_exchanged SET WLE_DATE_TO='".$_POST['inBuildDate']." ".$_POST['inBuildTimeH'].":".$_POST['inBuildTimeM'].":00',WLE_REASON='".$_POST['inBuildReason']."',WLE_ZP='".$_POST['inWellLP']."',WLE_DR='".$_POST['inWellDR']."' WHERE WLE_ID=".$_GET['wle']); + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + + + //paginacja + if (!$_GET['pgn']) + { + $_GET['pgn']=1; + //delSearchSessionData(); + } + ?> + + <?php + // pamięta z na jaką stronę ma przenieść, klikając - Cofnij + if (!empty($_GET['site'])) + { + $_SESSION['site401ahis_site']=$_GET['site']; + unset($_SESSION['site401ahis_ilosc']); + unset($_SESSION['site401ahis_array']); + } + ?> + + + <?php + // wybieranie dat z poszczególnych agregatów + if (!empty($_GET['df'])) + { + $_SESSION['site401ahis_from'] = $_GET['df']; + if (strlen($_GET['dt'])>0) $_SESSION['site401ahis_to']=$_GET['dt']; + else $_SESSION['site401ahis_to']=date('Y-m-d 23:59:59'); + } + + + if (empty($_POST['inDateFrom']) && empty($_SESSION['site401ahis_from'])) $_SESSION['site401ahis_from'] = date('Y-m')."-01 00:00:00"; + else if (!empty($_POST['inDateFrom'])) $_SESSION['site401ahis_from']=$_POST['inDateFrom']." 00:00:00";; + + if (empty($_POST['inDateTo']) && empty($_SESSION['site401ahis_to'])) $_SESSION['site401ahis_to'] = date('Y-m-d')." 23:59:59"; + else if (!empty($_POST['inDateTo'])) $_SESSION['site401ahis_to']=$_POST['inDateTo']." 23:59:59"; + + if ($_POST['sub_search']=='Pokaż' || !empty($_GET['df'])) + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; + + ?> + + <form action="?pg=site401ahis&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Wyświetl dane za okres od:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDateFrom' value='<?php echo substr($_SESSION['site401ahis_from'],0,10); ?>' SIZE='10'></td> + <td style="width: 15px;"></td> + <td>do:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDateTo' value='<?php echo substr($_SESSION['site401ahis_to'],0,10); ?>' SIZE='10'></td> + <td style="width: 20px;"></td> + <td><input type="submit" name="sub_search" value="Pokaż" class="btn btn-default btn-sm" onclick="makeRequest('?pg=site401ahis')"></td> + </tr> + <tr><td>&nbsp;</td></tr> + </table> + </div> + </form> + + + + + <div class="tag100"> + <div class="head_tag">Wymiany agregatów - <?php echo $_SESSION['well_details']['wellName']; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Nr</TD> + <TD class="label">Typ pompy</TD> + <TD class="label">Nr pompy</TD> + <TD class="label">Typ silnika</TD> + <TD class="label">Nr silnika</TD> + <TD class="label">Data zab.</TD> + <TD class="label">Data wyb.</TD> + <TD class="label">L<sub>P</sub> [m]</TD> + <TD class="label">D<sub>R</sub> [mm]</TD> + <TD class="label">Powód</TD> + <?php + if (!empty($_SESSION['site401_edit_param'])) + echo"<TD class='label'></TD>"; + ?> + </TR> + + + + + <?php + $wynik = mysql_query("select WLE_ID,WLE_NR_EXCHANGE,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_ZP,WLE_DR,WLE_REASON from seg_wells_exchanged where WLE_WLL_ID=".$_SESSION['well_details']['wellID']." order by WLE_NR_EXCHANGE desc "); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sqID = $r["WLE_ID"]; + $sqNR_EXCHANGE = $r["WLE_NR_EXCHANGE"]; + $sqPUMP_NAME = $r["WLE_PUMP_NAME"]; + $sqPUMP_NO = $r["WLE_PUMP_NO"]; + $sqENG_NAME = $r["WLE_ENG_NAME"]; + $sqENG_NO = $r["WLE_ENG_NO"]; + $sqDATE_FROM = $r["WLE_DATE_FROM"]; + $sqDATE_TO = $r["WLE_DATE_TO"]; + $sqZP = $r["WLE_ZP"]; + $sqDR = $r["WLE_DR"]; + $sqREASON = $r["WLE_REASON"]; + + if ($_GET['col']==$sqID) $coloRow = "background-color: #ffff00;"; + else $coloRow = ""; + + + + echo" + <TR STYLE='".$coloRow." cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site401ahis&df=".$sqDATE_FROM."&dt=".$sqDATE_TO."&col=".$sqID."'; makeRequest('?pg=site401ahis');".chr(34)."> + <TD class='field_left'>$sqNR_EXCHANGE</TD> + <TD class='field_left'>$sqPUMP_NAME</TD> + <TD class='field_left'>$sqPUMP_NO</TD> + <TD class='field_left'>$sqENG_NAME</TD> + <TD class='field_left'>$sqENG_NO</TD> + <TD class='field_left'>$sqDATE_FROM</TD> + <TD class='field_left'>$sqDATE_TO</TD> + <TD class='field_left'>$sqZP</TD> + <TD class='field_left'>$sqDR</TD> + <TD class='field_left'>$sqREASON</TD>"; + if (!empty($_SESSION['site401_edit_param']) && strlen($sqDATE_TO)>1) + { + echo"<td CLASS='field_center' width='5%'> + <a href='./?pg=site401ahisED&param=edit,".$_GET['pgn'].",".$sqID.",".$_SESSION['well_details']['wellID'].",".md5($_SESSION['well_details']['wellID'])."'><img src='./images/edit.png' title='Edytuj'></a> + </td>"; + } + + + + + echo"</TR>"; + + + } + ?> + </table> + </div> + + + <?php + + // jeśli przewijamy kolejne strony + if ($_POST['sub_search']=='Pokaż' || !empty($_GET['df'])) + { + /* + $roznica = (strtotime(date("Y-m-d")) - strtotime(substr($_SESSION['site401ahis_from'],0,10))) / (60*60*24); + if ($roznica>180) + $query="select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from (select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from rep_his_data_everyday where RHD_DATE>='".$_SESSION['site401ahis_from']." 00:00:00' and RHD_DATE<='".$_SESSION['site401ahis_to']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID']." union select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from softspm_his.rep_his_data_everyday_his where RHD_DATE>='".$_SESSION['site401ahis_from']." 00:00:00' and RHD_DATE<='".$_SESSION['site401ahis_to']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID'].") tb order by RHD_DATE desc limit ".(($_GET['pgn']-1)*20).",20"; + else + $query="select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from rep_his_data_everyday where RHD_DATE>='".$_SESSION['site401ahis_from']." 00:00:00' and RHD_DATE<='".$_SESSION['site401ahis_to']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID']." order by RHD_DATE desc limit ".(($_GET['pgn']-1)*20).",20"; + */ + //$tbaName = getTableNameFrom_everyday_his($_SESSION['site401ahis_to']); + + //$query="select * from ".$tbaName." where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_DATE>='".$_SESSION['site401ahis_from']."' && RHD_DATE<='".$_SESSION['site401ahis_to']."' order by RHD_DATE desc limit ".(($_GET['pgn']-1)*20).",20"; + + $query="select * from (".getQuery_everyday_his($_SESSION['site401ahis_from'],$_SESSION['site401ahis_to']," where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_DATE>='".$_SESSION['site401ahis_from']."' && RHD_DATE<='".$_SESSION['site401ahis_to']."'").") tb order by RHD_DATE desc"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'his_id' => $r["RHD_ID"], + 'his_date' => $r["RHD_DATE"], + 'his_hst0' => $r["RHD_HST0_VAL"], + 'his_hst' => $r["RHD_HST_VAL"], + 'his_hd' => $r["RHD_HD_VAL"], + 'his_q' => round($r["RHD_Q_VAL"]/60,3), + 'his_p1' => $r["RHD_P1_VAL"], + 'his_p2' => $r["RHD_P2_VAL"], + 'his_I' => $r["RHD_I_VAL"], + 'his_U' => $r["RHD_U_VAL"], + 'his_PE' => $r["RHD_PE_VAL"], + 'his_cos' => $r["RHD_COS_VAL"], + 'his_work_time' => $r["RHD_WORK_TIME_VAL"], + 'his_Vm3' => $r["RHD_VM3_VAL"] + ); + } + unset($_SESSION['site401ahis_array']); + $_SESSION['site401ahis_array']=$res; + + } + + + + + if (count($_SESSION['site401ahis_array'])>0) + { + echo" + <div class='head_tag'>Dane historyczne [od ".$_SESSION['site401ahis_from']." do ".$_SESSION['site401ahis_to']."]</div> + <div class='tag'> + <table WIDTH='100%' class='tag'> + <TR> + <TD class='label'>Lp.</TD> + <TD class='label'>Data</TD> + <TD class='label'>H<sub>ST0</sub> [m]</TD> + <TD class='label'>H<sub>ST</sub> [m]</TD> + <TD class='label'>H<sub>D</sub> [m]</TD> + <TD class='label'>Q [m<sup>3</sup>/min] </TD> + <TD class='label'>p<sub>1</sub> [m]</TD> + <TD class='label'>p<sub>2</sub> [m]</TD> + <TD class='label'>I [A]</TD> + <TD class='label'>U [V]</TD> + <TD class='label'>P<sub>e</sub> [kW]</TD> + <TD class='label'>cos(&#966;)</TD> + <TD class='label'>Czas pracy [h]</TD> + <TD class='label'>Ilość wody [m<sup>3</sup>]</TD>"; + + if (!empty($_SESSION['site401_edit_param'])) + echo"<TD class='label'></TD>"; + + echo" + </TR>"; + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site401ahis_array'])) $stop=count($_SESSION['site401ahis_array']); + for($i=$start;$i<$stop;$i++) + { + if ($_SESSION['site401ahis_array'][$i]['his_q']<=0) $_SESSION['site401ahis_array'][$i]['his_q']=null; + + echo" + <tr> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_date']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_hst0']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_hst']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_hd']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_q']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_p1']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_p2']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_I']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_U']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_PE']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_cos']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_work_time']."</TD> + <TD class='field_center'>".$_SESSION['site401ahis_array'][$i]['his_Vm3']."</TD>"; + + if (!empty($_SESSION['site401_edit_param'])) + { + echo"<td CLASS='field_center' width='5%'> + <a href='./?pg=site401ahis&pgn=".$_GET['pgn']."&param=del,".$_SESSION['site401ahis_array'][$i]['his_id'].",".md5($_SESSION['site401ahis_array'][$i]['his_id']).",".getTableNameFrom_everyday_his($_SESSION['site401ahis_array'][$i]['his_date'])."'><img src='./images/remove_ico.png' title='$lab_ButtonName_Delete' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć rekord z historii pomiarów?');".chr(34)."></a> + </td>"; + } + + echo"</TR>"; + + } + + + if (count($_SESSION['site401ahis_array'])<=0) + { + echo" + <tr> + <TD class='field_center' colspan='13'>".$lab_Field_site404_001."</TD> + </tr> + "; + } + + echo" + </table>"; + ?> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site401ahis_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site401ahis_array'])>20) + echo pagination_grid('./?pg=site401ahis', $_GET['pgn'], count($_SESSION['site401ahis_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./reports/rep_017_print.php?param=<?php echo $_SESSION['well_details']['devID'].",".$_SESSION['site401ahis_from'].",".$_SESSION['site401ahis_to'];?>" target="_blank" title="Raporty"><img src="./images/generate_report_16.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + <?php + echo" + </div> + "; + } + ?> + </div> + + <div class="tag100"> + <div class="tag_buttons"> + <a href='?pg=<?php echo $_SESSION['site401ahis_site']; ?>&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class="btn btn-info btn-sm" TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back; ?>'></A> + </div> + </div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401ahisED.php b/sites/site401ahisED.php new file mode 100644 index 0000000..8eababb --- /dev/null +++ b/sites/site401ahisED.php @@ -0,0 +1,120 @@ +<?php +if (!empty($_SESSION['site401_edit_param'])) +{ +?> + +<script> + //$(function() {$("#data_01").datepicker(); }); + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + +<?php + +function formH($selParamName,$checkNo) +{ + echo'<select name="'.$selParamName.'" id="'.$selParamName.'">'; + for ($i=0; $i<24; $i++) + { + if ($i<10) $val="0".$i; + else $val=$i; + + if ($val==$checkNo) + echo'<option value="'.$val.'" selected>'.$val.'</option>'; + else + echo'<option value="'.$val.'">'.$val.'</option>'; + + } + echo'</select>'; +} +function formM($selParamName,$checkNo) +{ + echo'<select name="'.$selParamName.'" id="'.$selParamName.'">'; + for ($i=0; $i<60; $i++) + { + if ($i<10) $val="0".$i; + else $val=$i; + + if ($val==$checkNo) + echo'<option value="'.$val.'" selected>'.$val.'</option>'; + else + echo'<option value="'.$val.'">'.$val.'</option>'; + + } + echo'</select>'; +} + + + + +if (!empty($_GET['param'])) +{ + $tpmArray=explode(',', $_GET['param']); + if ($tpmArray[0]=='edit' && md5($tpmArray[3])==$tpmArray[4]) + { + $actReason = sqlStringValue("select WLE_REASON from seg_wells_exchanged where WLE_ID=".$tpmArray[2], "WLE_REASON"); + $actReasonArray = sqlGetResAsArray("select * from seg_wells_exchanged where WLE_ID=".$tpmArray[2]); + } + unset($_GET['param']); + + +} + +?> + +<div class="tag100"> + <FORM ACTION="./?pg=site401ahis&pgn=<?php echo $tpmArray[1]; ?>&wle=<?php echo $tpmArray[2];?>" METHOD="POST"> + <div class="head_tag"><?php echo $lab_Tag_site306_004 ." - ".$_SESSION['well_details']['wellName'];?></div> + <div class="tag"> + <table class="desc_val"> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_020 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inBuildDate' SIZE='10' value="<?php echo substr($actReasonArray[0]['WLE_DATE_TO'],0,10); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site301_028 ; ?></td> + <td CLASS=desc_value> + <?php formH('inBuildTimeH',substr($actReasonArray[0]['WLE_DATE_TO'],11,2));?> + : + <?php formM('inBuildTimeM',substr($actReasonArray[0]['WLE_DATE_TO'],14,2));?> + </td> + </tr> + + <tr> + <td class="desc">L<sub>P</sub> [m]</td> + <td class="desc_value"><input class="float" name="inWellLP" value="<?php echo $actReasonArray[0]['WLE_ZP'];?>"></td> + </tr + <tr> + <td class="desc">D<sub>R</sub> [mm]</td> + <td class="desc_value"><input class="float" name="inWellDR" value="<?php echo $actReasonArray[0]['WLE_DR'];?>"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_021 ; ?></td> + <td CLASS=desc_value> + <?php echo selectDescriptionFromDictionary("inBuildReason", "WELL_STATUS_OFF",$actReasonArray[0]['WLE_REASON']); ?> + </td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site401ahis&pgn=<?php echo $tpmArray[1];?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='sub401ahisED' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401charts.php b/sites/site401charts.php new file mode 100644 index 0000000..ba7eddc --- /dev/null +++ b/sites/site401charts.php @@ -0,0 +1,122 @@ +<?php +if (!empty($_SESSION['site401'])) +{ + $wynik = mysql_query("select PUP_ID,PUP_NAME,TST_PUP_SN_NO,ENG_ID,ENG_NAME,TST_ENG_SN_NO,SUBSTRING(TST_AUDIT_CD,1,10) CD from tst_tests left join seg_pumps on TST_PUP_ID=PUP_ID left join seg_engines on TST_ENG_ID=ENG_ID where TST_ID=".$_GET['t']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $pID = $r["PUP_ID"]; + $pName = $r["PUP_NAME"]; + $pNo = $r["TST_PUP_SN_NO"]; + $sName = $r["ENG_NAME"]; + $sNo = $r["TST_ENG_SN_NO"]; + $tDate = $r["CD"]; + } + + $title = "Cyfrowe charakterystyki dla agregatu [$pName,$sName] ze Stacji prób"; + + +$wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$pID." order by PEP_X_PARAM"); +if($wynik)while ($r = mysql_fetch_array($wynik)) + $dataP[] = $r["PEP_X_PARAM"]; + + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_GET['t']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $dataH[] = array( + getFloatValue($r["TSD_VAL_04"]), + getFloatValue($r["TSD_VAL_08"]) + ); + $dataPe[] = array( + getFloatValue($r["TSD_VAL_04"]), + getFloatValue($r["TSD_VAL_14"]) + ); + $dataEta[] = array( + getFloatValue($r["TSD_VAL_04"]), + getFloatValue($r["TSD_VAL_18"]) + ); + } + + + $fileName1=createChartFileNamePng("site401charts_01"); + if (file_exists( $fileName1)) unlink($fileName1); + + include("./polynomial/hpCharts.php"); + createHpTestChart($dataP, $dataH, 0, $fileName1, 969, 330, 20, 10, 1); + + + $fileName2=createChartFileNamePng("site401charts_02"); + if (file_exists( $fileName2)) unlink($fileName2); + + include("./polynomial/peCharts.php"); + createPeTestChart($dataP, $dataPe, 0, $fileName2, 969, 330, 20, 10, 1); + + $fileName3=createChartFileNamePng("site401charts_03"); + if (file_exists( $fileName3)) unlink($fileName3); + + include("./polynomial/etaCharts.php"); + createEtaTestChart($dataP, $dataEta, 0, $fileName3, 969, 330, 20, 10, 1); + +?> + + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $title;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="desc">Numer próby</TD> + <TD CLASS="desc_value"><?php echo $_GET['t']; ?></TD> + <TD class="desc">Data</TD> + <TD CLASS="desc_value"><?php echo $tDate; ?></TD> + </TR> + + <TR> + <TD class="desc">Typ pompy</TD> + <TD CLASS="desc_value"><?php echo $pName; ?></TD> + <TD class="desc">Typ silnika</TD> + <TD CLASS="desc_value"><?php echo $sName; ?></TD> + </TR> + <TR> + <TD class="desc">Numer pompy</TD> + <TD CLASS="desc_value"><?php echo $pNo; ?></TD> + <TD class="desc">Numer silnika</TD> + <TD CLASS="desc_value"><?php echo $sNo; ?></TD> + </TR> + </table> + </div> + + + + <div class="head_tag">Podnoszenie H(Q) </div> + <div class="tag"> + <img SRC="<?php echo $fileName1; ?>"> + </div> + + + <div class="head_tag">Moc P(Q) </div> + <div class="tag"> + <img SRC="<?php echo $fileName2; ?>"> + </div> + + + <div class="head_tag">Sprawność agregatu &eta;A(Q) </div> + <div class="tag"> + <img SRC="<?php echo $fileName3; ?>"> + </div> + +</div> + + <div class="tag100"> + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Back; ?>" onclick="window.history.back()"> + </div> + </div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401demand.php b/sites/site401demand.php new file mode 100644 index 0000000..36c120c --- /dev/null +++ b/sites/site401demand.php @@ -0,0 +1,291 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + // usuwanie z historii + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + if ($tpmArray[0]=='del' && md5($tpmArray[1])==$tpmArray[2]) + { + mysql_query("DELETE FROM ".$tpmArray[3]." WHERE RHD_ID=".$tpmArray[1]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + unset($_GET['param']); + unset($tpmArray); + $_POST['sub_search']='Pokaż'; + } + + + + //paginacja + if (!$_GET['pgn']) + { + $_GET['pgn']=1; + //delSearchSessionData(); + } + ?> + + <?php + // pamięta z na jaką stronę ma przenieść, klikając - Cofnij + if (!empty($_GET['site'])) + { + $_SESSION['site401demand_site']=$_GET['site']; + unset($_SESSION['site401demand_ilosc']); + unset($_SESSION['site401demand_array']); + } + ?> + + + <?php + // wybieranie dat z poszczególnych agregatów + if (!empty($_GET['df'])) + { + $_SESSION['site401demand_from'] = $_GET['df']; + if (strlen($_GET['dt'])>0) $_SESSION['site401demand_to']=$_GET['dt']; + else $_SESSION['site401demand_to']=date('Y-m-d 23:59:59'); + } + + + if (empty($_POST['inDateFrom']) && empty($_SESSION['site401demand_from'])) $_SESSION['site401demand_from'] = date('Y-m')."-01 00:00:00"; + else if (!empty($_POST['inDateFrom'])) $_SESSION['site401demand_from']=$_POST['inDateFrom']." 00:00:00";; + + if (empty($_POST['inDateTo']) && empty($_SESSION['site401demand_to'])) $_SESSION['site401demand_to'] = date('Y-m-d')." 23:59:59"; + else if (!empty($_POST['inDateTo'])) $_SESSION['site401demand_to']=$_POST['inDateTo']." 23:59:59"; + + if ($_POST['sub_search']=='Pokaż' || !empty($_GET['df'])) + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; + + ?> + + <form action="?pg=site401demand&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Wyświetl dane za okres od:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDateFrom' value='<?php echo substr($_SESSION['site401demand_from'],0,10); ?>' SIZE='10'></td> + <td style="width: 15px;"></td> + <td>do:</td> + <td style="width: 5px;"></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDateTo' value='<?php echo substr($_SESSION['site401demand_to'],0,10); ?>' SIZE='10'></td> + <td style="width: 20px;"></td> + <td><input type="submit" name="sub_search" value="Pokaż" class="btn btn-default btn-sm" onclick="makeRequest('?pg=site401demand')"></td> + </tr> + <tr><td>&nbsp;</td></tr> + </table> + </div> + </form> + + + + + <div class="tag100"> + <div class="head_tag">Wymiany agregatów - <?php echo $_SESSION['well_details']['wellName']; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Nr</TD> + <TD class="label">Typ pompy</TD> + <TD class="label">Nr pompy</TD> + <TD class="label">Typ silnika</TD> + <TD class="label">Nr silnika</TD> + <TD class="label">Data zab.</TD> + <TD class="label">Data wyb.</TD> + <TD class="label">L<sub>P</sub> [m]</TD> + <TD class="label">D<sub>R</sub> [mm]</TD> + <TD class="label">Powód</TD> + </TR> + + + + + <?php + $wynik = mysql_query("select WLE_ID,WLE_NR_EXCHANGE,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_ZP,WLE_DR,WLE_REASON from seg_wells_exchanged where WLE_WLL_ID=".$_SESSION['well_details']['wellID']." order by WLE_NR_EXCHANGE desc "); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sqID = $r["WLE_ID"]; + $sqNR_EXCHANGE = $r["WLE_NR_EXCHANGE"]; + $sqPUMP_NAME = $r["WLE_PUMP_NAME"]; + $sqPUMP_NO = $r["WLE_PUMP_NO"]; + $sqENG_NAME = $r["WLE_ENG_NAME"]; + $sqENG_NO = $r["WLE_ENG_NO"]; + $sqDATE_FROM = $r["WLE_DATE_FROM"]; + $sqDATE_TO = $r["WLE_DATE_TO"]; + $sqZP = $r["WLE_ZP"]; + $sqDR = $r["WLE_DR"]; + $sqREASON = $r["WLE_REASON"]; + + if ($_GET['col']==$sqID) $coloRow = "background-color: #ffff00;"; + else $coloRow = ""; + + + + echo" + <TR STYLE='".$coloRow." cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site401demand&df=".$sqDATE_FROM."&dt=".$sqDATE_TO."&col=".$sqID."'; makeRequest('?pg=site401demand');".chr(34)."> + <TD class='field_left'>$sqNR_EXCHANGE</TD> + <TD class='field_left'>$sqPUMP_NAME</TD> + <TD class='field_left'>$sqPUMP_NO</TD> + <TD class='field_left'>$sqENG_NAME</TD> + <TD class='field_left'>$sqENG_NO</TD> + <TD class='field_left'>$sqDATE_FROM</TD> + <TD class='field_left'>$sqDATE_TO</TD> + <TD class='field_left'>$sqZP</TD> + <TD class='field_left'>$sqDR</TD> + <TD class='field_left'>$sqREASON</TD> + </TR>"; + + + } + ?> + </table> + </div> + + + <?php + + // jeśli przewijamy kolejne strony + if ($_POST['sub_search']=='Pokaż' || !empty($_GET['df'])) + { + /* + $roznica = (strtotime(date("Y-m-d")) - strtotime(substr($_SESSION['site401demand_from'],0,10))) / (60*60*24); + if ($roznica>180) + $query="select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from (select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from rep_his_data_everyday where RHD_DATE>='".$_SESSION['site401demand_from']." 00:00:00' and RHD_DATE<='".$_SESSION['site401demand_to']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID']." union select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from softspm_his.rep_his_data_everyday_his where RHD_DATE>='".$_SESSION['site401demand_from']." 00:00:00' and RHD_DATE<='".$_SESSION['site401demand_to']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID'].") tb order by RHD_DATE desc limit ".(($_GET['pgn']-1)*20).",20"; + else + $query="select RHD_ID,RHD_DATE,RHD_HST0_VAL,RHD_HST_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_WORK_TIME_VAL,RHD_VM3_VAL from rep_his_data_everyday where RHD_DATE>='".$_SESSION['site401demand_from']." 00:00:00' and RHD_DATE<='".$_SESSION['site401demand_to']." 23:59:59' and RHD_DRS_ID=".$_SESSION['well_details']['devID']." order by RHD_DATE desc limit ".(($_GET['pgn']-1)*20).",20"; + */ + //$tbaName = getTableNameFrom_everyday_his($_SESSION['site401demand_to']); + + //$query="select * from ".$tbaName." where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_DATE>='".$_SESSION['site401demand_from']."' && RHD_DATE<='".$_SESSION['site401demand_to']."' order by RHD_DATE desc limit ".(($_GET['pgn']-1)*20).",20"; + + //$query="select * from (".getQuery_everyday_his($_SESSION['site401demand_from'],$_SESSION['site401demand_to']," where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_DATE>='".$_SESSION['site401demand_from']."' && RHD_DATE<='".$_SESSION['site401demand_to']."'").") tb order by RHD_DATE desc"; + $query="SELECT * FROM rep_his_data_demand WHERE RHD_DRS_ID=".$_SESSION['well_details']['devID']." AND RHD_DATE>='".$_SESSION['site401demand_from']."' AND RHD_DATE<='".$_SESSION['site401demand_to']."' ORDER BY RHD_ID DESC"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'his_id' => $r["RHD_ID"], + 'his_date' => $r["RHD_DATE"], + 'his_hd' => $r["RHD_HD_VAL"], + 'his_q' => round($r["RHD_Q_VAL"]/60,3), + 'his_p1' => $r["RHD_P1_VAL"], + 'his_p2' => $r["RHD_P2_VAL"], + 'his_I' => $r["RHD_I_VAL"], + 'his_U' => $r["RHD_U_VAL"], + 'his_PE' => $r["RHD_PE_VAL"], + 'his_cos' => $r["RHD_COS_VAL"], + 'his_work_time' => $r["RHD_WORK_TIME_VAL"], + 'his_Vm3' => $r["RHD_VM3_VAL"] + ); + } + unset($_SESSION['site401demand_array']); + $_SESSION['site401demand_array']=$res; + + } + + + + + if (count($_SESSION['site401demand_array'])>0) + { + echo" + <div class='head_tag'>Dane z pomiarów na żądanie [od ".$_SESSION['site401demand_from']." do ".$_SESSION['site401demand_to']."]</div> + <div class='tag'> + <table WIDTH='100%' class='tag'> + <TR> + <TD class='label'>Lp.</TD> + <TD class='label'>Data</TD> + <TD class='label'>H<sub>D</sub> [m]</TD> + <TD class='label'>Q [m<sup>3</sup>/min] </TD> + <TD class='label'>p<sub>1</sub> [m]</TD> + <TD class='label'>p<sub>2</sub> [m]</TD> + <TD class='label'>I [A]</TD> + <TD class='label'>U [V]</TD> + <TD class='label'>P<sub>e</sub> [kW]</TD> + <TD class='label'>cos(&#966;)</TD> + <TD class='label'>Czas pracy [h]</TD> + <TD class='label'>Ilość wody [m<sup>3</sup>]</TD> + </TR>"; + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site401demand_array'])) $stop=count($_SESSION['site401demand_array']); + for($i=$start;$i<$stop;$i++) + { + if ($_SESSION['site401demand_array'][$i]['his_q']<=0) $_SESSION['site401demand_array'][$i]['his_q']=null; + + echo" + <tr> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_date']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_hd']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_q']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_p1']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_p2']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_I']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_U']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_PE']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_cos']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_work_time']."</TD> + <TD class='field_center'>".$_SESSION['site401demand_array'][$i]['his_Vm3']."</TD> + </TR>"; + + } + + + if (count($_SESSION['site401demand_array'])<=0) + { + echo" + <tr> + <TD class='field_center' colspan='13'>".$lab_Field_site404_001."</TD> + </tr> + "; + } + + echo" + </table>"; + ?> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site401demand_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site401demand_array'])>20) + echo pagination_grid('./?pg=site401demand', $_GET['pgn'], count($_SESSION['site401demand_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="#" title="Raporty"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + <?php + echo" + </div> + "; + } + ?> + </div> + + <div class="tag100"> + <div class="tag_buttons"> + <a href='?pg=<?php echo $_SESSION['site401demand_site']; ?>&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class="btn btn-info btn-sm" TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back; ?>'></A> + </div> + </div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401inf.php b/sites/site401inf.php new file mode 100644 index 0000000..c7b10cb --- /dev/null +++ b/sites/site401inf.php @@ -0,0 +1,502 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php +if (empty($_SESSION['well_details'])) + header("Location: /?pg=site401"); +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + </script> + +<?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; +?> + + +<?php +if ($_POST['subWellParamSave']==$lab_ButtonName_Save) +{ + $_GET['dev'] = $_POST['dev']; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_POST['dev'].",DRD_RESOURCES_DETAIL=".$_POST['dic'].",DRD_VALUE='".$_POST['inWellParamValue']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inWellParamDate']." ".date('H:i:s')."';"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; +} +?> + + +<?php +//kasuje daty w histori pomiarów + unset($_SESSION['site401ahis_from']); + unset($_SESSION['site401ahis_to']); + unset($_SESSION['site401ahis_array']); + + if ($_SESSION['lang']=='polish') + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_polish.png"; + else + $imgSPM = sqlStringValue("select DIC_NAME from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_NAME")."_english.png"; + + if ($_SESSION['well_details']['testID']>0) $chLink = "./?pg=site401charts&t=".$_SESSION['well_details']['testID']; + else $chLink = "#"; + + +?> + + +<?php +if ($_SESSION['well_details']['onOff']=="ON") $onoffStyle = "style='color: #32CD32;'"; + +?> + +<div class="tag50_left"> + + <div class="head_tag">Studnia</div> + <div class="tag_WellName" <?php echo $onoffStyle;?> > + <?php echo $_SESSION['well_details']['wellName']; ?> + </div> + + +<?php +if ($_SESSION['well_details']['wellTypeID']==20) + $timeHeader = "Data ostatniej aktualizacji danych"; +else + $timeHeader = "Data ostatniej aktualizacji danych z SYNDIS"; + +?> + + <?php + + unset($lastMeasureVal); + if ($_SESSION['well_details']['onOff']=="ON") + { + $lastMeasureVal = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$_GET['dev'].")"); + $lastMeasureVal[0]['RHD_Q_VAL'] = round($lastMeasureVal[0]['RHD_Q_VAL']/60,3); + + //pobiera informację o ostatnim HST0 + $lastMeasureVal[0]['RHD_HST0_VAL'] = sqlStringValue("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=212 and DRD_DRS_ID=".$_GET['dev'].")", "DRD_VALUE"); + } + //$lastMeasureVal = sqlGetResAsArray("select round(getLastValue(200,".$_SESSION['well_details']['devID'].")/60,3) VAL_Q,getLastValue(205,".$_SESSION['well_details']['devID'].") VAL_HD,getLastValue(210,".$_SESSION['well_details']['devID'].") VAL_HST,getLastValue(212,".$_SESSION['well_details']['devID'].") VAL_HST0,getLastValue(215,".$_SESSION['well_details']['devID'].") VAL_P1,getLastValue(220,".$_SESSION['well_details']['devID'].") VAL_P2,getLastValue(225,".$_SESSION['well_details']['devID'].") VAL_PB,getLastValue(230,".$_SESSION['well_details']['devID'].") VAL_VM3,getLastValue(245,".$_SESSION['well_details']['devID'].") VAL_TW,getLastValue(401,".$_SESSION['well_details']['devID'].") VAL_PP,getLastValue(402,".$_SESSION['well_details']['devID'].") VAL_HH,getLastValue(730,".$_SESSION['well_details']['devID'].") VAL_TRL,getLastValue(260,".$_SESSION['well_details']['devID'].") VAL_PE,getLastValue(265,".$_SESSION['well_details']['devID'].") VAL_PEkWh,getLastValue(270,".$_SESSION['well_details']['devID'].") VAL_I,getLastValue(275,".$_SESSION['well_details']['devID'].") VAL_U,getLastValue(280,".$_SESSION['well_details']['devID'].") VAL_COS,getLastValue(290,".$_SESSION['well_details']['devID'].") VAL_WRTM,getLastValue(721,".$_SESSION['well_details']['devID'].") VAL_WHm3M"); + else + { +// $lastMeasureVal = sqlGetResAsArray("select getLastValue(210,".$_SESSION['well_details']['devID'].") VAL_HST,getLastValue(212,".$_SESSION['well_details']['devID'].") VAL_HST0,getLastValue(215,".$_SESSION['well_details']['devID'].") VAL_P1,getLastValue(220,".$_SESSION['well_details']['devID'].") VAL_P2,getLastValue(225,".$_SESSION['well_details']['devID'].") VAL_PB,getLastValue(230,".$_SESSION['well_details']['devID'].") VAL_VM3,getLastValue(245,".$_SESSION['well_details']['devID'].") VAL_TW,getLastValue(730,".$_SESSION['well_details']['devID'].") VAL_TRL,getLastValue(265,".$_SESSION['well_details']['devID'].") VAL_PEkWh,getLastValue(290,".$_SESSION['well_details']['devID'].") VAL_WRTM"); + $lastMeasureVal = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where (RHD_HST0_VAL>0 or RHD_HST_VAL>0) and RHD_DRS_ID=".$_GET['dev'].")"); + if (count($lastMeasureVal)<=0) + $lastMeasureVal = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$_GET['dev'].")"); + + $lastMeasureVal[0]['RHD_Q_VAL']=null; + $lastMeasureVal[0]['RHD_HD_VAL']=null; + $lastMeasureVal[0]['RHD_PE_VAL']=null; + $lastMeasureVal[0]['RHD_I_VAL']=null; + } + + unset($additionalData); + $additionalData = sqlGetResAsArray("select getLastValue(225,".$_GET['dev'].") VAL_PB,getLastValue(730,".$_GET['dev'].") VAL_TRL,getLastValue(265,".$_GET['dev'].") VAL_PEkWh,getLastValue(721,".$_GET['dev'].") VAL_WHm3M"); + + // Dla studni SPM inne + /* + if ($_SESSION['well_details']['wellTypeID']==20) + { + $lastMeasureVal[0]['RHD_VM3_VAL'] = sqlValue("select getWellPumpedWaterInDate(".$_SESSION['well_details']['devID'].",now())"); + $lastMeasureVal[0]['RHD_WORK_TIME_VAL'] = convertSecondsToHHMM(sqlValue("select getWellWorkingTimeInDate(".$_SESSION['well_details']['devID'].",now())")); + } + */ + + ?> + + + + + + <div class="head_tag"><?php echo $timeHeader;?></div> + <div class="tag_WellDate"> + <?php echo $lastMeasureVal[0]['RHD_DATE']; ?> + </div> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + + + + ?> + + + <div class="head_tag"><?php echo $lab_Tag_site301_006 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_016; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo $_SESSION['well_details']['wellName']; ?></TD> + </TR> + + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_017; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DIC_ENG_LANG from sys_dictionaries where DIC_ID=(select WLL_CAT_DIC_ID from seg_wells where WLL_ID=".$_SESSION['well_details']['wellID'].")","DIC_ENG_LANG"); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_006; ?></TD> + <TD CLASS="desc_value" colspan="2"><?php echo sqlStringValue("select DRS_AVAILABLE_DATE from seg_dev_resources where DRS_ID=".$_SESSION['well_details']['devID'], "DRS_AVAILABLE_DATE"); ?></TD> + </TR> + + + <?php + $result = mysql_query("select DIC_ID,DIC_NAME,".$decFieldLang." from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' order by DIC_ID"); + if($result)while ($r = mysql_fetch_array($result)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["DIC_NAME"]; + $var_FLD_NAME = $r[$decFieldLang]; + + //warunek dla głębokości filtrów + if ($var_DIC_ID==120) + { + echo" + <TR> + <TD class='desc_well_param'>".$var_FLD_NAME."</TD> + <TD CLASS='desc_value'><a class='kontrukcja' href='?pg=site310&dev=".$_GET['dev']."&tab=4&direct=401'>".$lab_ButtonName_HoleCard_004." &raquo;</a></TD> + </TR> + "; + } + else + { + echo" + <TR> + <TD class='desc_well_param'>".$var_FLD_NAME."</TD> + <TD CLASS='desc_value'>".getLinkToShowHistoricalData_01($var_DIC_ID,'WELL_TECHNICAL_PARAMETERS',$var_DIC_NAME,$_SESSION['well_details']['devID'],'site401inf')."</TD>"; + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=$var_DIC_ID'".chr(34)."></td>"; + + echo" + </TR> + "; + } + } + ?> + + <TR> + <TD class="desc_well_param">Głębokość zabudowy pompy L<sub>P</sub> [m]</TD> + <TD CLASS='desc_value'><?php echo getLinkToShowHistoricalData_01(240,'WELL_PARAMETERS','LPM',$_SESSION['well_details']['devID'],'site401inf');?></TD> + <?php + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=240'".chr(34)."></td>"; + ?> + </TR> + <TR> + <TD class="desc_well_param">Średnica rurociągu D<sub>R</sub> [mm]</TD> + <TD CLASS='desc_value'><?php echo getLinkToShowHistoricalData_01(235,'WELL_PARAMETERS','DR',$_SESSION['well_details']['devID'],'site401inf');?></TD> + <?php + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=235'".chr(34)."></td>"; + ?> + </TR> + + <TR> + <TD class="desc_well_param">m [m]</TD> + <TD CLASS='desc_value'><?php echo getLinkToShowHistoricalData_01(251,'WELL_PARAMETERS','DR',$_SESSION['well_details']['devID'],'site401inf');?></TD> + <?php + if (!empty($_SESSION['site401_edit_param'])) + echo"<td CLASS='desc_value' width='5%'><img style='cursor: pointer;' src='./images/edit.png' title='$lab_ButtonName_Modify' onclick=".chr(34)."document.location.href='?pg=site401E&dev=".$_SESSION['well_details']['devID']."&dic=251'".chr(34)."></td>"; + ?> + </TR> + + + </table> + </div> + + + <div class="head_tag"> + + + <div style="display:inline-block; font-size: 14px; color: #ffffff;"><?php echo $lab_Tag_site401_002 ;?></div> + <?php if (!empty($_SESSION['site401_edit'])): ?> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgEditAction"><img style='cursor: pointer;' src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>'></div> + + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgSaveAction"><img style='cursor: pointer;' src='./images/save-icon.png' title='<?php echo $lab_Field_site803_011;?>'></div> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgCancelAction"><img style='cursor: pointer;' src='./images/cancel-16.png' title='<?php echo $lab_Field_site803_012;?>'></div> + <div style="display:inline-block; float:right; padding-right: 5px;" id="imgCleanAction"><img style='cursor: pointer;' src='./images/eraser-icon.png' title='<?php echo $lab_Field_site803_018;?>'></div> + + + <input type="hidden" id="inDevID" value="<?php echo $_GET['dev'];?>"> + <?php endif; ?> + + + </div> + <div class="tag"> + <TABLE class="desc_val"> + + <TR id='in401_date'> + <TD class="desc_well_param">Data pomiaru</TD> + <TD CLASS="desc_value"> + <input STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inWellParamDate' value='<?php echo date('Y-m-d');?>' SIZE='10' disabled> + &nbsp;&nbsp;&nbsp; + godz.: <?php getSelectHours('inTimeH');?> : <?php getSelectMinutes('inTimeM');?> + </TD> + </TR> + + + <TR> + <TD class='desc_well_param'>Wydajność Q [m<sup>3</sup>/min]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_Q_VAL'] ?>' id='in401_200' disabled></TD> + </TR> + <TR> + <TD class='desc_well_param'>Zwierciadło dynamiczne H<sub>D</sub> [m]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_HD_VAL']?>' id='in401_205' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Zwierciadło statyczne H<sub>ST</sub> [m]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_HST_VAL']?>' id='in401_210' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Zwierciadło statyczne H<sub>ST0</sub> [m]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_HST0_VAL']?>' id='in401_212' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Ciśnienie p<sub>1</sub> [m]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_P1_VAL']?>' id='in401_215' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Ciśnienie p<sub>2</sub> [m]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_P2_VAL']?>' id='in401_220' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Ciśnienie barometryczne p<sub>b</sub> [hPa]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $additionalData[0]['VAL_PB']?>' id='in401_225' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Ilość wyp. wody V [m<sup>3</sup>]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_VM3_VAL']?>' id='in401_230' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Temp. wody T<sub>W</sub> [<sup>o</sup>C]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_WTEMP_VAL']?>' id='in401_245' disabled></TD> + </TR> + + <TR> + <TD class="desc_well_param">Ciśnienie p<sub>p</sub> [m]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_PP_VAL']?>' id='in401_401' disabled></TD> + </TR> + <TR> + <TD class="desc_well_param">Wysokość H<sub>H</sub> [m]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_HH_VAL']?>' id='in401_402' disabled></TD> + </TR> + <TR> + <TD class="desc_well_param">Otwarcie przepustnicy [%]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo $additionalData[0]['VAL_TRL']?>' id='in401_730' disabled></TD> + </TR> + + + <TR><TD COLSPAN="3" CLASS="desc_value"><HR ></TD></TR> + + + <TR> + <TD class='desc_well_param'>Moc czynna P<sub>e</sub> [kW]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text'value='<?php echo $lastMeasureVal[0]['RHD_PE_VAL']?>' id='in401_260' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Pobór energii E [kWh]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text'value='<?php echo $additionalData[0]['VAL_PEkWh']?>' id='in401_265' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Pobór prądu I [A]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text'value='<?php echo $lastMeasureVal[0]['RHD_I_VAL']?>' id='in401_270' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Napięcie zasilania U [V]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text'value='<?php echo $lastMeasureVal[0]['RHD_U_VAL']?>' id='in401_275' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>cos(φ)</TD> + <TD class='desc_value'><input class='readonly_hide' type='text'value='<?php echo $lastMeasureVal[0]['RHD_COS_VAL']?>' id='in401_280' disabled></TD> + </TR> + + <TR> + <TD class='desc_well_param'>Czas pracy agregatu t [h]</TD> + <TD class='desc_value'><input class='readonly_hide' type='text' value='<?php echo $lastMeasureVal[0]['RHD_WORK_TIME_VAL']?>' id='in401_290' disabled></TD> + </TR> + + <TR> + <TD class="desc_well_param">Jed. zużycie energii [Wh/m<sup>3</sup>/m]</TD> + <TD CLASS="desc_value"><input class='readonly_hide' type='text' value='<?php echo $additionalData[0]['VAL_WHm3M']?>' id='in401_721' disabled></TD> + </TR> + + </table> + </div> + + + + + + + + +</div> + + +<?php + //tworzy nazwę pliku rysunku jaki ma podstawić w zalezności od stanu pompy (Throt i Loss) + if (strlen($imgThrot)>0 && strlen($imgLoss)>0) + $imgSPM = "./images/".$imgThrot."".$imgLoss."_".$imgSPM; + else $imgSPM = "./images/".$imgSPM; + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_site401inf.png"; + if (file_exists($fileName)) unlink($fileName); + $imageSPM=imagecreatefrompng($imgSPM); + $image=imagecreatetruecolor(imagesx($imageSPM),imagesy($imageSPM)); + imagecopy($image,$imageSPM,0,0,0,0,imagesx($imageSPM),imagesy($imageSPM)); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + + /* + // sprawdza stan diagnostyki i podstawia odpowiedni obrazek + $isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$_SESSION['well_details']['devID']); + if ($isDiagOK==1) $imgToDiag = imagecreatefrompng("./images/diag_warning.png"); + elseif ($isDiagOK==2) $imgToDiag = imagecreatefrompng("./images/diag_error.png"); + else $imgToDiag = imagecreatefrompng("./images/diag_ok.png"); + + if (strstr($imgSPM,"SEGAP")) + imagecopy($image,$imgToDiag,107,455,0,0,13,13); + else if (strstr($imgSPM,"BASE")) + imagecopy($image,$imgToDiag,105,450,0,0,13,13); + else if (strstr($imgSPM,"OPT")) + imagecopy($image,$imgToDiag,81,450,0,0,13,13); + + */ + + imagepng($image,$fileName); +?> + + +<div class="tag50_right"> + + + <div class="head_tag"><?php echo $lab_Tag_site301_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['pumpSN']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engName']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['well_details']['engSN']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site401_019; ?></TD> + <TD CLASS="desc_value"><a class='knowledge' href='<?php echo $chLink; ?>'><img src=./images/chart-icon.png></a></TD> + </TR> + </table> + </div> + + + + <div class="head_tag"><?php echo $lab_Tag_site301_004 ;?></div> + <div class="tag_center"> + <img SRC="<?php echo $fileName; ?>" > + </div> + + <?php +// $queryShowHisParam = sqlGetResAsArray("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID in (200,205,210,212,215,220,245,401,402,260,270,275,280,719) order by DIC_POL_LANG"); + $queryShowHisParam = sqlGetResAsArray("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID in (200,205,210,212,215,220,245,401,402,260,270,275,280,255) order by DIC_POL_LANG"); + ?> + + + <form action="./?pg=site401pdet&dev=<?php echo $_SESSION['well_details']['devID']; ?>" method="post"> + <div class="head_tag"><?php echo $lab_Tag_site401_014 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_023; ?></TD> + <TD CLASS="desc_value"> + <select name="inShowHisParam"> + <option value="0"><?php echo $lab_FormSelect_001;?></option> + + <?php + for ($i=0; $i<count($queryShowHisParam); $i++) + { + echo'<option value="'.$queryShowHisParam[$i]['DIC_ID'].'">'.$queryShowHisParam[$i]['DIC_POL_LANG'].'</option>'; + } + ?> + + + + </select> + + + + </TD> + <TD CLASS="desc_value"><input class="btn btn-primary btn-sm" type="submit" name="subShowHisParam" value="<?php echo $lab_ButtonName_Show; ?>"></TD> + </TR> + </table> + </div> + </form> + + + + + + <div class=tag_ChemicalButtons> + <a href='?pg=site401mark&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Ocena pracy układu'></A> + &nbsp;&nbsp;&nbsp; + <a href="?pg=site401mhis&dev=<?php echo $_SESSION['well_details']['devID']; ?>"><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia ocen'></A> + <br/><br/> + <a href='?pg=site401ahis&site=site401inf'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia agregatów'></A> + &nbsp;&nbsp;&nbsp; + <a href='./?pg=site401offhis&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia postojów'></A> + </div> + + <div class=tag_ChemicalButtons> + <a href='?pg=site310&dev=<?php echo $_GET['dev'];?>&direct=401'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Karta otworu'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401CH&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_ChemicalParam ;?>'></A> + <br/><br/> + <a href='?pg=site301inf&dev=<?php echo $_GET['dev'];?>&direct=site401inf'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_SubMenu_301;?>'></A> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401CL&dev=<?php echo $_SESSION['well_details']['devID'] ;?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Calibration ;?>'></A> + </div> + + <div class=tag_ChemicalButtons> + <a href='./?pg=site401demand&dev=<?php echo $_GET['dev'];?>&site=site401inf'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Pomiary na żądanie'></A> + &nbsp;&nbsp;&nbsp; + </div> + + + +</div> + + + <?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + getHistoryData($_GET['dev'], $_GET['dic']); + ?> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site401lift.php b/sites/site401lift.php new file mode 100644 index 0000000..3f4b1bc --- /dev/null +++ b/sites/site401lift.php @@ -0,0 +1,98 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + + <?php + if (empty($_SESSION['well_details'])) + header("Location: ./?pg=site401"); + ?> + + + <?php + //$hp = pp - HH; + //if (!empty($_GET['hp'])) $hp = $_GET['hp']; + unset($lift401Array); + $lift401Array = sqlGetResAsArray("select RHD_Q_VAL,RHD_HD_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_PP_VAL,RHD_HH_VAL,RHD_PE_VAL,RHD_DGN_VAL,RHD_DATE from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$_GET['d'].")"); + $hp = (float) round(($lift401Array[0]['RHD_PP_VAL']-$lift401Array[0]['RHD_HH_VAL']),2); + + + if ($_GET['d']>0) + { + // Wysokość podnoszenia + // =======================================================================================// + unset($scope); + unset($dataP); + unset($dataH); + + $wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_SESSION['well_details']['pumpID']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $dataP[] = (float) $r["PEP_X_PARAM"]; + } + + + + $wynik = mysql_query("select TSD_VAL_04/60 PEP_X_PARAM, TSD_VAL_08 PEP_Y_PARAM from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_GET['t']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $dataH[] = array( + $r["PEP_X_PARAM"]*60, + $r["PEP_Y_PARAM"] + ); + } + + $fileName_new=createChartFileNamePng("site401lift"); + if ($_GET['d']>0 && $_GET['t']>0 && count($dataH)>1) + { + include("./polynomial/hpCharts.php"); + createLiftChart($dataP, $dataH, $lift401Array[0]['RHD_Q_VAL'], $fileName_new, 969, 600, 20, 15, 1, $hp); + } + + unset($newParam); + // =======================================================================================// + } + + ?> + + +<div class="tag100"> + + <div class="head_tag">Wysokość podnoszenia dla studni <?php echo $_SESSION['well_details']['wellName']; ?> </div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="desc"><?php echo $lab_Field_site201_004a;?></TD> + <TD CLASS="desc_value"><?php echo str_replace('.',',',round($lift401Array[0]['RHD_Q_VAL']/60,3)); ?></TD> + <TD class="desc">Wysokość podnoszenia [m]</TD> + <TD CLASS="desc_value"><?php echo str_replace('.',',',$hp); ?></TD> + </TR> + </table> + </div> + + <div class="tag"> + <img SRC='<?php echo $fileName_new; ?>' > + </div> +</div> + + + + + +<div class="tag100"> + <div class="tag_buttons"> + <INPUT class='btn btn-info btn-sm' TYPE="button" VALUE="Cofnij" onclick="window.history.back()"> + <INPUT class='btn btn-success btn-sm' TYPE="button" VALUE="Drukuj" onclick="window.print()"> + </div> +</div> + +<?php +unset($lift401Array); + +?> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site401mark.php b/sites/site401mark.php new file mode 100644 index 0000000..2ea1b85 --- /dev/null +++ b/sites/site401mark.php @@ -0,0 +1,762 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php + +if (!empty($_GET['direct']) && $_GET['direct']=='site301inf') +{ + delSearchSessionData(); +} + + + + +//warunek na przekazywanie nazw obiektów (G54) +if (empty($_GET['dev']) && !empty($_GET['obj'])) +{ + delSearchSessionData(); + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$_GET['obj']."'", "DRS_ID"); + + if ($_GET['dev']>0) $_GET['dev']=$_GET['dev']; + else { + $tmp = explode('=', $_SERVER['REQUEST_URI']); + $lastVal = count($tmp)-1; + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$tmp[$lastVal]."'", "DRS_ID"); + unset($tmp); + } +} + +//załączaie wylączanie pompy +if (!empty($_GET['pa']) && $_GET['dev']>0 && $_POST['inEncrypted']==md5($_GET['dev']) && $_POST['subWellParamSave']==$lab_ButtonName_Next) +{ + $onOffDate = $_POST['inOnOffDate'].' '.$_POST['inOnOffTimeH'].':'.$_POST['inOnOffTimeM'].':00'; + + if ($_GET['pa']=='on') + { + //kasuje wcześniejsze wpisy (z datą późnijszą niż aktualnie wstawiona) + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work WHERE WMS_DRS_ID=".$_GET['dev']." and WMS_DATETIME>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work_syndis WHERE SLA_DRS_ID=".$_GET['dev']." and SLA_DATETIME>='".$onOffDate."'"); + // =================================================================================== + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='ON',WMS_DATETIME='".$onOffDate."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$_SESSION['well_details']['wellID'].",SLA_DRS_ID=".$_GET['dev'].",SLA_NAME='".$_SESSION['well_details']['wellName']."',SLA_WORK_STATUS='ON',SLA_DATETIME='".$onOffDate."',SLA_AUDIT_CD=now()"); + mysql_query("INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$_GET['dev'].",RHD_DATE='".$onOffDate."',RHD_Q_VAL=getLastValue(200,".$_GET['dev']."),RHD_AUDIT_CD=now()"); + + // dodaje wpis, czy aktualizować czasy pracy - 2018-01-06 (syndis_onoff_time) + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='ON',ISN_DRS_ID=".$_GET['dev'].",ISN_DATE=now()"); + // czyści informcję w polu RHD_SPM_WT - w celu przeliczenia czasu i wody jeszcze raz - dla załącz/wyłącz wpisywanych wstecznie + mysql_query("UPDATE rep_his_data_everyday SET RHD_SPM_WT=NULL WHERE RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>='".$onOffDate."'"); + + } + elseif ($_GET['pa']=='off') + { + //kasuje wcześniejsze wpisy (z datą późnijszą niż aktualnie wstawiona) + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work WHERE WMS_DRS_ID=".$_GET['dev']." and WMS_DATETIME>='".$onOffDate."'"); + mysql_query("DELETE FROM seg_wells_manual_work_syndis WHERE SLA_DRS_ID=".$_GET['dev']." and SLA_DATETIME>='".$onOffDate."'"); + // =================================================================================== + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$_POST['inOnOffReason']."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$onOffDate."'"); + mysql_query("INSERT INTO seg_wells_manual_work SET WMS_WLL_ID=".$_SESSION['well_details']['wellID'].",WMS_DRS_ID=".$_GET['dev'].",WMS_NAME='".$_SESSION['well_details']['wellName']."',WMS_WORK_STATUS='OFF',WMS_DATETIME='".$onOffDate."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$_SESSION['well_details']['wellID'].",SLA_DRS_ID=".$_GET['dev'].",SLA_NAME='".$_SESSION['well_details']['wellName']."',SLA_WORK_STATUS='OFF',SLA_DATETIME='".$onOffDate."',SLA_AUDIT_CD=now()"); + + // dodaje wpis, czy aktualizować czasy pracy - 2018-01-06 (syndis_onoff_time) + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='OFF',ISN_DRS_ID=".$_GET['dev'].",ISN_DATE=now()"); + // czyści informcję w polu RHD_SPM_WT - w celu przeliczenia czasu i wody jeszcze raz - dla załącz/wyłącz wpisywanych wstecznie + mysql_query("UPDATE rep_his_data_everyday SET RHD_SPM_WT=NULL WHERE RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>='".$onOffDate."'"); + + } + elseif ($_GET['pa']=='reson') + { + $drdID = sqlValue("select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].")"); + mysql_query("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$_POST['inOnOffReason']."', DRD_AUDIT_USR='".$_SESSION['user']."' WHERE DRD_ID=".$drdID); + } +} + + + // kasuje zmianne sesyjne dla historii ocen + unset($_SESSION['site401mhis_working_params']); + unset($_SESSION['site401mhis_inDate']); + unset($_SESSION['site401mhis_sel_data']); + + + + +require_once('./polynomial/PolynomialRegression.php' ); + + +unset($_SESSION['well_details']); +//wpisuje do tablicy podstawowe informacje o studni +$wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,WLL_CAT_DIC_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID,round(getLastValue(235,DRS_ID)/1000,3) DR, getLastValue(240,DRS_ID) LPM from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 left join seg_well_pump_eng_rel on RWL_WLL_ID=WLL_ID where DRS_ID=".$_GET['dev']); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + + unset($pupTmpArray); + if ($r["RWL_PUP_DRS_ID"]>0) + $pupTmpArray = sqlGetResAsArray("select PUP_ID,PUP_NAME,DRS_SN_NUMBER,PUP_Q_N from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=".$r["RWL_PUP_DRS_ID"]); + unset($engTmpArray); + if ($r["RWL_ENG_DRS_ID"]>0) + $engTmpArray = sqlGetResAsArray("select ENG_ID,ENG_NAME,ENG_ELECTRICITY,ENG_VOLTAGE,ENG_COS_FI,DRS_SN_NUMBER from seg_dev_resources left join seg_engines on ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 where DRS_ID=".$r["RWL_ENG_DRS_ID"]); + unset($workStatusArray); + //$workStatusArray = sqlGetResAsArray("select DRD_VALUE,DRD_DESCRIPTION,DRD_AUDIT_DATE,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=DRD_DESCRIPTION limit 1) DRD_DESC from viw_pump_working_status where DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from viw_pump_working_status where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].") and DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." limit 1"); + $workStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev'].")"); + //$tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$r["PUP_ID"]." and TST_PUP_SN_NO='".$r["WLE_PUMP_NO"]."' and TST_ENG_ID=".$r["ENG_ID"]." and TST_ENG_SN_NO='".$r["WLE_ENG_NO"]."'"); + if ($r["RWL_PUP_DRS_ID"]>0 && $r["RWL_ENG_DRS_ID"]>0) + { + $tstID = sqlValue("select max(TST_ID) TST_ID from tst_tests where TST_PUP_ID=".$pupTmpArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupTmpArray[0]['DRS_SN_NUMBER']."' and TST_ENG_SN_NO='".$engTmpArray[0]['DRS_SN_NUMBER']."'"); + if (empty($tstID)) $tstID = sqlValue("select max(TST_ID) TST_ID from tst_tests where TST_PUP_ID=".$pupTmpArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupTmpArray[0]['DRS_SN_NUMBER']."'"); + } + + $_SESSION['well_details']=array( + 'devID' => $r["DRS_ID"], + 'wellID' => $r["WLL_ID"], + 'wellName' => $r["WLL_NAME"], + 'wellTypeID'=> $r["WLL_CAT_DIC_ID"], + 'pumpID' => $pupTmpArray[0]['PUP_ID'], + 'pumpName' => $pupTmpArray[0]['PUP_NAME'], + 'pumpSN' => $pupTmpArray[0]['DRS_SN_NUMBER'], + 'QnVal' => $pupTmpArray[0]['PUP_Q_N'], + 'engID' => $engTmpArray[0]['ENG_ID'], + 'engName' => $engTmpArray[0]['ENG_NAME'], + 'eng_I' => $engTmpArray[0]['ENG_ELECTRICITY'], + 'eng_U' => $engTmpArray[0]['ENG_VOLTAGE'], + 'eng_CF' => $engTmpArray[0]['ENG_COS_FI'], + 'engSN' => $engTmpArray[0]['DRS_SN_NUMBER'], + 'LpVal' => $r["LPM"], + 'DrVal' => $r["DR"], + 'testID' => $tstID, + 'onOff' => $workStatusArray[0]['DRD_VALUE'] + ); + +} +unset($pupTmpArray); +unset($engTmpArray); + + + + + + //2016-09-10 + // pobiera informacje do tablicy o wiarygodności danych z SYNDIS + unset($qualDataArray); + if ($_SESSION['well_details']['wellTypeID']!=20) + { + $qualDataArray = sqlGetResAsArray("select * from rep_soap_syndis_quality_data where SQD_DRS_ID=".$_GET['dev']); + $getLastDyndisData = $qualDataArray[0]['SQD_AUDIT_CD']; + } + + if ($_SESSION['well_details']['wellTypeID']==18) + $imgSPM="SPM_BASE_polish.png"; + elseif ($_SESSION['well_details']['wellTypeID']==19) + $imgSPM="SPM_OPT_polish.png"; + else + $imgSPM="SPM_FULL_polish.png"; + + + + + + + +// jeśli mamy zabudowany agregat i jest próba dla niego +if ($_SESSION['well_details']['testID']>0) +{ + + //zakresy dla wykresów + //if (empty($_SESSION['site401_scope'])) + { + $wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$_SESSION['well_details']['pumpID']." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['site401_scope'][] = (float) $r["PEP_X_PARAM"]/60; + $dataP[] = (float) $r["PEP_X_PARAM"]; + } + + } + + + +// punkty pomiarowe dla Hp, Eta, Pe ze stacji prób + $wynik = mysql_query("select TSD_VAL_04/60 TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$tstID." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $testArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"], + 'n' => (float) $r["TSD_VAL_18"] + ); + + $dataH[] = array( + $r["TSD_VAL_04"]*60, + $r["TSD_VAL_08"] + ); + + $dataEta[] = array( + (float) $r["TSD_VAL_04"]*60, + (float) $r["TSD_VAL_18"] + ); + + } + + //$_SESSION['site401_lift_xy'] + //$_SESSION['site401_eta_xy'] + //$_SESSION['site401_minmax_params'] + unset($maxPiontOfTest); + $maxPiontOfTest =sqlGetResAsArray("select max(TSD_VAL_04)/60 X_MAX, max(TSD_VAL_08) Y_MAX from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_SESSION['well_details']['testID']); + + +} + +?> + + <?php + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + + + $wynik = mysql_query("select RHD_Q_VAL,RHD_HD_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_PP_VAL,RHD_HH_VAL,RHD_PE_VAL,RHD_DGN_VAL,RHD_DATE from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID'].")"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $qParam = $r["RHD_Q_VAL"]; + $P1param = $r["RHD_P1_VAL"]; + $P2param = $r["RHD_P2_VAL"]; + $PEparam = $r["RHD_PE_VAL"]; + $PPparam = $r["RHD_PP_VAL"]; + $HHparam = $r["RHD_HH_VAL"]; + $resHD = $r["RHD_HD_VAL"]; + $isDiagOK = $r["RHD_DGN_VAL"]; + $resWorkStatus = $r["RHD_DATE"]; + + if (empty($qualDataArray)) $getLastDyndisData = $r["RHD_DATE"]; + } + + + // =============================================================== // + $Evaluation4_q = wellEvaluation4_q($_SESSION['well_details']['QnVal'], $qParam); + // =============================================================== // + //$resHP = (setPumpHparameterForQ($_SESSION['well_details']['pumpID'],$qParam)-($PPparam-$HHparam))/($PPparam-$HHparam); + //$resHP = (getPolynomialValue($_SESSION['site401_lift_xy'],$qParam/60)-($PPparam-$HHparam))/($PPparam-$HHparam); + + + //$Evaluation4_HfQ = wellEvaluation4_HfQ($resHP,$PPparam); + $HPparam = (float) ($PPparam - $HHparam); + if ($_SESSION['well_details']['testID']>0) + $HPSparam = (float) getPolynomialHp_second($testArray,$qParam/60); + + $Evaluation4_HfQ = wellEvaluation4_HfQ_new($HPSparam,$PPparam,$HHparam); + + // =============================================================== // + $Evaluation4_Throt = wellEvaluation4_Throt($resHD,$P1param,$P2param); + // =============================================================== // + $Evaluation4_LineLoss = wellEvaluation4_LineLoss($P1param,$PPparam,$_SESSION['well_details']['LpVal'],$_SESSION['well_details']['DrVal']); + // =============================================================== // + //$qRZ = $qParam; + + //$fileName0="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_401inf_01.png"; + //if (file_exists( $fileName0)) unlink($fileName0); + + // =============================================================== // + if (empty($PEparam)) $PEparam=1; + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes($_SESSION['well_details']['QnVal']); + $YellowGreenParam = setYellowGreenLimes($_SESSION['well_details']['QnVal']); + // =============================================================== // + + + // Jeśli mamy odchyłke CH na czerwono, wtedy obrazek jest szary + // =============================================================== // + /* + if ($greyChart==1 || $_SESSION['well_details']['wellTypeID']==20) + pumpImageGreyBell($fileName0); + else pumpImageStatus($fileName0, $RedYellowParam, $YellowGreenParam, $resETA); + */ + // =============================================================== // + + // nowe podejście + $fileName0=createChartFileNamePng("site401mark_01"); + + if ($greyChart==1 || $_SESSION['well_details']['wellTypeID']==20) + pumpImageEnergyGreyBell($fileName0); + else pumpImageEnergy($fileName0, $RedYellowParam, $YellowGreenParam, $resETA); + + + + // nowe podejście + $fileName1_new=createChartFileNamePng("site401mark_02"); + $fileName2_new=createChartFileNamePng("site401mark_03"); + + if (file_exists( $fileName1_new)) unlink($fileName1_new); + if (file_exists( $fileName2_new)) unlink($fileName2_new); + + //podnoszenie - wykres + // =======================================================================================// + if ($_SESSION['well_details']['testID']>0) + { + include("./polynomial/hpCharts.php"); + createHpChart($dataP, $dataH, $qParam, $fileName1_new, 470, 330, 8, 10, 1, $Evaluation4_HfQ['point_value']); + + //sprawność - wykres + // =======================================================================================// + include("./polynomial/etaCharts.php"); + createEtaAssesChart($dataP, $dataEta, $qParam, $fileName2_new, 470, 330, 8, 10, 1); + } + + +?> + +<?php + //tworzy nazwę pliku rysunku jaki ma podstawić w zalezności od stanu pompy (Throt i Loss) + if (strlen($Evaluation4_Throt['image'])>0 && strlen($Evaluation4_LineLoss['image'])>0 && !strstr($imgSPM,"SEGAP")) + $imgSPM = "./images/".$Evaluation4_Throt['image']."".$Evaluation4_LineLoss['image']."_".$imgSPM; + else $imgSPM = "./images/".$imgSPM; + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_site401inf.png"; + if (file_exists($fileName)) unlink($fileName); + $imageSPM=imagecreatefrompng($imgSPM); + $image=imagecreatetruecolor(imagesx($imageSPM),imagesy($imageSPM)); + imagecopy($image,$imageSPM,0,0,0,0,imagesx($imageSPM),imagesy($imageSPM)); + $color=imagecolorallocate($image,255,255,255); + imagefill($image,0,0,$color); + $font = './fonts/verdana.ttf'; + + // sprawdza stan diagnostyki i podstawia odpowiedni obrazek + //$isDiagOK = getLastValueFromDevResourceDetail('WELL_HIDDEN_PARAMETERS','DGN',$var_DRSid); + if ($isDiagOK==1) $imgToDiag = imagecreatefrompng("./images/diag_warning.png"); + elseif ($isDiagOK==2) $imgToDiag = imagecreatefrompng("./images/diag_error.png"); + else $imgToDiag = imagecreatefrompng("./images/diag_ok.png"); + //diag_warning + + + if ($_SESSION['well_details']['wellTypeID']==18) + { + imagecopy($image,$imgToDiag,105,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$getLastDyndisData); + } + elseif ($_SESSION['well_details']['wellTypeID']==19) + { + imagecopy($image,$imgToDiag,81,450,0,0,13,13); + imagettftext($image, 10, 0, 75, 635, imagecolorallocate($image, 0, 0, 255), $font, "Data odpytania SYNDIS: ".$getLastDyndisData); + } + imagepng($image,$fileName); + + + // Jeśli mamy typ "SPM - inne" + if ($_SESSION['well_details']['wellTypeID']==20) + { + unset($Evaluation4_HfQ); + unset($Evaluation4_Throt); + unset($Evaluation4_LineLoss); + //pumpImageGreyBell($fileName0); + } + +?> + + + + +<?php +if ($_SESSION['well_details']['testID']>0) +{ +// ========================================================================================================================================= + + +$spacja = "&nbsp;&nbsp;&nbsp;&nbsp;"; unset($algSPM); +//analiza, czy wszystkie wartości z ostatniego pomiaru z SYNDIS są prawidłowe i wiarygodne: +// ========================================================================================================================================= +// analiza hydrauliczna +// ========================================================================================================================================= +$isInfoWATER = false; +if (!empty($qualDataArray) && ( + $qualDataArray[0]['SQD_FLG_Q']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_P1']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_P2']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_PP']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_HH']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_HD']!='CORRECT' + + || $qualDataArray[0]['SQD_VAL_Q']<=0 + || $qualDataArray[0]['SQD_VAL_PP']<=0 + || $qualDataArray[0]['SQD_VAL_HH']<=0 + || $qualDataArray[0]['SQD_VAL_HD']<=0 + )) +{ + $isInfoWATER = true; + $infoWATER_text = ""; + + if ($qualDataArray[0]['SQD_FLG_Q']!='CORRECT' || $qualDataArray[0]['SQD_VAL_Q']<=0) + $infoWATER_text .="<br/> - Wydajność Q=".round($qualDataArray[0]['SQD_VAL_Q']/60,3)." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_Q']."]."; + if ($qualDataArray[0]['SQD_FLG_P1']!='CORRECT') + $infoWATER_text .="<br/> - Ciśnienie p1=".$qualDataArray[0]['SQD_VAL_P1']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_P1']."]."; + if ($qualDataArray[0]['SQD_FLG_P2']!='CORRECT') + $infoWATER_text .="<br/> - Ciśnienie p2=".$qualDataArray[0]['SQD_VAL_P2']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_P2']."]."; + if ($qualDataArray[0]['SQD_FLG_PP']!='CORRECT' || $qualDataArray[0]['SQD_VAL_PP']<=0) + $infoWATER_text .="<br/> - Ciśnienie Pp=".$qualDataArray[0]['SQD_VAL_PP']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_PP']."]."; + if ($qualDataArray[0]['SQD_FLG_HH']!='CORRECT' || $qualDataArray[0]['SQD_VAL_HH']<=0) + $infoWATER_text .="<br/> - Wysokość Hh=".$qualDataArray[0]['SQD_VAL_HH']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_HH']."]."; + if ($qualDataArray[0]['SQD_FLG_HD']!='CORRECT' || $qualDataArray[0]['SQD_VAL_HD']<=0) + $infoWATER_text .="<br/> - Zwierciadło dynamiczne Hd=".$qualDataArray[0]['SQD_VAL_HD']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_HD']."]."; +} +// ========================================================================================================================================= +// analiza elektryczna +// ========================================================================================================================================= +$isInfoENERGETIC = false; +if (!empty($qualDataArray) && ( + $qualDataArray[0]['SQD_FLG_I']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_U']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_CF']!='CORRECT' + || $qualDataArray[0]['SQD_FLG_PE']!='CORRECT' + + || $qualDataArray[0]['SQD_VAL_I']<=0 + || $qualDataArray[0]['SQD_VAL_U']<=0 + || $qualDataArray[0]['SQD_VAL_CF']<=0 + || $qualDataArray[0]['SQD_VAL_CF']>=1 + || $qualDataArray[0]['SQD_VAL_PE']<=0 + + )) +{ + $isInfoENERGETIC = true; + $infoENERGETIC_text = ""; + + if ($qualDataArray[0]['SQD_FLG_I']!='CORRECT' || $qualDataArray[0]['SQD_VAL_I']<=0) + $infoENERGETIC_text .="<br/> - Pobór prądu I=".$qualDataArray[0]['SQD_VAL_I']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_I']."]."; + if ($qualDataArray[0]['SQD_FLG_U']!='CORRECT' || $qualDataArray[0]['SQD_VAL_U']<=0) + $infoENERGETIC_text .="<br/> - Napięcie zasilania U=".$qualDataArray[0]['SQD_VAL_U']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_U']."]"; + if ($qualDataArray[0]['SQD_FLG_CF']!='CORRECT' || $qualDataArray[0]['SQD_VAL_CF']<=0 || $qualDataArray[0]['SQD_VAL_CF']>=1) + $infoENERGETIC_text .="<br/> - cos(φ)=".$qualDataArray[0]['SQD_VAL_CF']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_CF']."]"; + if ($qualDataArray[0]['SQD_FLG_PE']!='CORRECT' || $qualDataArray[0]['SQD_VAL_PE']<=0) + $infoENERGETIC_text .="<br/> - Moc czynna Pe=".$qualDataArray[0]['SQD_VAL_PE']." ".$spacja."[SYNDIS=".$qualDataArray[0]['SQD_FLG_PE']."]"; +} +// ========================================================================================================================================= +// ========================================================================================================================================= +/* +// jeśli analiza jakości i poprawności danych przeszła poprawnie sprawdza algorytmem SoftSPM +if (!empty($qualDataArray) && !$isInfoWATER && !$isInfoENERGETIC) +{ + // ===================================================================================================================================== + // analiza hydrauliczna + // ===================================================================================================================================== + $test_Hp = (float) $qualDataArray[0]['SQD_VAL_PP'] - $qualDataArray[0]['SQD_VAL_HH']; + $test_Hps = (float) getPolynomialHp($testArray,($qualDataArray[0]['SQD_VAL_Q']/60)); //wysokość ze stacji + + + if ( + //($test_Hp < (0.8*$test_Hps) || $test_Hp > (1.08*$test_Hps)) + $test_Hp > (1.08*$test_Hps) + || (($qualDataArray[0]['SQD_VAL_P2']-1.5)>$qualDataArray[0]['SQD_VAL_P1']) + + ) + { + $isInfoWATER = true; + $infoWATER_text = ""; + $algSPM = "według algorytmu SoftSPM"; + + + //if ($test_Hp < (0.8*$test_Hps) || $test_Hp > (1.08*$test_Hps)) + //if ($qualDataArray[0]['SQD_VAL_P2']>$qualDataArray[0]['SQD_VAL_P1']) + if (($qualDataArray[0]['SQD_VAL_P2']-1.5)>$qualDataArray[0]['SQD_VAL_P1']) + $infoWATER_text .="<br/> - Ciśnienie P2>P1 ".$spacja."[SYNDIS]."; + if ($test_Hp > (1.08*$test_Hps)) + { + $infoWATER_text .="<br/> - Głębokość zabudowy pompy Lp=".$_SESSION['well_details']['LpVal']." ".$spacja."[SoftSPM]."; + $infoWATER_text .="<br/> - Ciśnienie Pp=".$qualDataArray[0]['SQD_VAL_PP']." [SYNDIS]."; + $infoWATER_text .="<br/> - Zwierciadło dynamiczne Hd=".$qualDataArray[0]['SQD_VAL_HD']." ".$spacja."[SYNDIS]."; + } + + + + + } + // ===================================================================================================================================== + + + // ===================================================================================================================================== + // analiza elektryczna + // ===================================================================================================================================== + $test_Pes = (float) getPolynomialPe_second($testArray,($qualDataArray[0]['SQD_VAL_Q']/60)); //moc ze stacji + + if ( + $qualDataArray[0]['SQD_VAL_PE'] < (0.83*$test_Pes) || $qualDataArray[0]['SQD_VAL_PE'] > (1.25*$test_Pes) + //|| ((0.92*$_SESSION['well_details']['eng_CF'])>$qualDataArray[0]['SQD_VAL_CF'] || $qualDataArray[0]['SQD_VAL_CF']>(1.07*$_SESSION['well_details']['eng_CF'])) + //|| ((0.93*$_SESSION['well_details']['eng_U']) > $qualDataArray[0]['SQD_VAL_U'] || $qualDataArray[0]['SQD_VAL_U']>(1.08*$_SESSION['well_details']['eng_U'])) + //|| ((0.85*$_SESSION['well_details']['eng_I']) > $qualDataArray[0]['SQD_VAL_I'] || $qualDataArray[0]['SQD_VAL_I']>(1.15*$_SESSION['well_details']['eng_I'])) + ) + { + $isInfoENERGETIC = true; + $infoENERGETIC_text = ""; + $algSPM = "według algorytmu SoftSPM"; + + if ($qualDataArray[0]['SQD_VAL_PE'] < (0.83*$test_Pes) || $qualDataArray[0]['SQD_VAL_PE'] > (1.25*$test_Pes)) + $infoENERGETIC_text .="<br/> - Moc czynna Pe=".$qualDataArray[0]['SQD_VAL_PE']." ".$spacja."[SYNDIS]"; +// if ((0.92*$_SESSION['well_details']['eng_CF'])>$qualDataArray[0]['SQD_VAL_CF'] || $qualDataArray[0]['SQD_VAL_CF']>(1.07*$_SESSION['well_details']['eng_CF'])) +// $infoENERGETIC_text .="<br/> - cos(φ)=".$qualDataArray[0]['SQD_VAL_CF']." ".$spacja."[SYNDIS]"; +// if ((0.93*$_SESSION['well_details']['eng_U']) > $qualDataArray[0]['SQD_VAL_U'] || $qualDataArray[0]['SQD_VAL_U']>(1.08*$_SESSION['well_details']['eng_U'])) +// $infoENERGETIC_text .="<br/> - Napięcie zasilania U=".$qualDataArray[0]['SQD_VAL_U']." ".$spacja."[SYNDIS]"; +// if ((0.85*$_SESSION['well_details']['eng_I']) > $qualDataArray[0]['SQD_VAL_I'] || $qualDataArray[0]['SQD_VAL_I']>(1.15*$_SESSION['well_details']['eng_I'])) +// $infoENERGETIC_text .="<br/> - Pobór prądu I=".$qualDataArray[0]['SQD_VAL_I']." ".$spacja."[SYNDIS]"; + } + // ===================================================================================================================================== +} +// ========================================================================================================================================= +*/ + +if ($isInfoWATER) + echo "<div class='infoWATER'>Parametry hydrauliczne lub techniczne wymagające analizy ".$algSPM.":".$infoWATER_text."</div>"; + +if ($isInfoENERGETIC) + echo "<div class='infoENERGETIC'>Parametry elektryczne wymagające analizy ".$algSPM.":".$infoENERGETIC_text."</div>"; + +if ($isInfoWATER || $isInfoENERGETIC) + echo "<div class='actionERROR'>Brak oceny!</div>"; + + +// - wyłączone na serwerze backupowym +/* +if ($qualDataArray[0]['SQD_VAL_ONOFF']==0 || $isInfoWATER || $isInfoENERGETIC) +{ + if (file_exists( $fileName0)) unlink($fileName0); + pumpImageEnergyGreyBell($fileName0); +} +*/ + + + + +// ========================================================================================================================================= +} +?> + + + + + + + + +<?php +// pobieranie aktualnych danych +if ($_GET['data']=='refresh') +{ + + $refreshTime=15; + echo"<meta http-equiv='refresh' content='".$refreshTime.";url=./?pg=site401mark&dev=".$_GET['dev']."'>"; + ?> + <div class="tag100"> + <div class="head_tag">Pobór aktualnych danych dla <?php echo $_SESSION['well_details']['wellName']; ?> – proszę czekać.</div> + <div class="tag_center"></br> + <progress id="progressBar" value="0" max="100"></progress> + <span id="status"></span> + <h1 id="finalMessage"></h1> + <script type="text/javascript" language="javascript"> + function progressBarSim(al) { + var bar = document.getElementById('progressBar'); + var status = document.getElementById('status'); + status.innerHTML = al+"%"; + bar.value = al; + al++; + var sim = setTimeout("progressBarSim("+al+")",<?php echo $refreshTime*10; ?> ); + if(al == 100){ + status.innerHTML = "100%"; + bar.value = 100; + clearTimeout(sim); + //var finalMessage = document.getElementById('finalMessage'); + //finalMessage.innerHTML = "Process is complete"; + } + } + var amountLoaded = 0; + progressBarSim(amountLoaded); + </script></br> + </div> + </div> + + <script src="./bootstrap.min.js"></script> + <script> + + + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + $.post( "./ajax_getdata4well.php", { post_action: "ajax", done: "insert", well_name: "<?php echo $_SESSION['well_details']['wellName'];?>"}).done(function(data) + { + + } + ); + }); + + </script> + + + + <?php +} + + + + + + +if ($workStatusArray[0]['DRD_VALUE']=="ON") +{ + $imgONOFF_g = "./images/green_ONOFF_ON.png"; + $imgONOFF_r = "./images/red_ONOFF.png"; + $stringONOFF = "Stan pracy - Załączona"; + + if (!empty($_SESSION['site401_well_onoff']) && $_SESSION['well_details']['wellTypeID']==20) + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=off"><img style="padding: 9px;" src="./images/red_ONOFF.png" title="Wyłącz pompe"></a> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF_ON.png"> + <img style="padding: 9px;" src="./images/red_ONOFF.png"> + '; +} +else +{ + $imgONOFF_g = "./images/green_ONOFF.png"; + $imgONOFF_r = "./images/red_ONOFF_OFF.png"; + $stringONOFF = "Stan pracy - Wyłączona"; + + if (!empty($_SESSION['site401_well_onoff']) && $_SESSION['well_details']['wellTypeID']==20) + $btmAcction = ' + <a href="./?pg=site401Eonf&dev='.$_SESSION['well_details']['devID'].'&pa=on"><img style="padding: 9px;" src="./images/green_ONOFF.png" title="Załącz pompe"></a> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; + else + $btmAcction = ' + <img style="padding: 9px;" src="./images/green_ONOFF.png"> + <img style="padding: 9px;" src="./images/red_ONOFF_OFF.png"> + '; +} + + + +?> + + + + + + + + + + + + <div class="tag50_left"> + + <div class="head_tag">Oceny pracy układu pompowego</div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_005; ?></TD> + <TD class="<?php echo $Evaluation4_q['grid_style']; ?>"><?php echo $Evaluation4_q['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_009; ?></TD> + <TD class="<?php echo $Evaluation4_HfQ['grid_style']; ?>"><?php echo $Evaluation4_HfQ['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_012; ?></TD> + <TD class="<?php echo $Evaluation4_Throt['grid_style']; ?>"><?php echo $Evaluation4_Throt['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_015; ?></TD> + <TD class="<?php echo $Evaluation4_LineLoss['grid_style']; ?>"><?php echo $Evaluation4_LineLoss['grid_text']; ?></TD> + </TR> + </table> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site301_004." - ".$_SESSION['well_details']['wellName'];?></div> + <div class="tag_center"> + <a href="?pg=site401inf&dev=<?php echo $_GET['dev']?>"><img SRC="<?php echo $fileName; ?>" border="0"></a> + </div> + + <div class="head_tag"><?php echo $stringONOFF ;?> [<?php echo $workStatusArray[0]['DRD_AUDIT_DATE'];?>]</div> + <div class="tag_center"> + <?php echo $btmAcction; ?> + <?php + if ($workStatusArray[0]['DRD_DESCRIPTION']>0) + echo"<br/>Powód: <i><b><a style='text-decoration: none;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>".setDicName($workStatusArray[0]['DRD_DESCRIPTION'])."</a></b></i>"; + elseif ($workStatusArray[0]['DRD_VALUE']!="ON" && empty($workStatusArray[0]['DRD_DESCRIPTION'])) + echo"<br/><a style='text-decoration: none; color: #ff0000;' href='./?pg=site401Eonf&dev=".$_SESSION['well_details']['devID']."&pa=reson'>Kliknij, aby wprowadzić przyczynę wyłączenia</a>"; + + ?> + </div> + + + </div> + + + + +<div class="tag50_right"> + + + <div class="head_tag">Ocena energochłonności</div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR><TD><a href="?pg=site401mhis&dev=<?php echo$_GET['dev']; ?>"><img SRC="<?php echo $fileName0; ?>" border="0"></a></TD></TR> + </table> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site203_004 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0 && ($_SESSION['well_details']['wellTypeID']==18 || $_SESSION['well_details']['wellTypeID']==19)) + echo"<a href='?pg=site401lift&t=".$_SESSION['well_details']['testID']."&d=".$_SESSION['well_details']['devID']."&q=".$qParam."'><img SRC=".$fileName1_new."></a>"; + elseif ($_SESSION['well_details']['testID']>0 && $_SESSION['well_details']['wellTypeID']==20) + echo"<img SRC=".$fileName1_new.">"; + else + echo $lab_Field_site203_017; + ?> + + </div> + <div class="head_tag"><?php echo $lab_Tag_site203_005 ;?></div> + <div class="tag_center"> + <?php + if ($_SESSION['well_details']['testID']>0) + echo"<img SRC=$fileName2_new>"; + else + echo $lab_Field_site203_017; + ?> + </div> + +<?php +//$workStatusArray = sqlGetResAsArray("select DRD_VALUE,DRD_DESCRIPTION,(select DIC_POL_LANG from sys_dictionaries where DIC_ID=DRD_DESCRIPTION limit 1) DRD_DESC from seg_dev_resources_det where DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID'].") and DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_SESSION['well_details']['devID']." limit 1"); +//$well_work_status = getLastValueFromDevResourceDetail('WELL_STATUSES','ON_OFF',$_SESSION['well_details']['devID']); + + + +?> + + <div class=tag_ChemicalButtons> + <a href='?pg=site401inf&dev=<?php echo $_SESSION['well_details']['devID']; ?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Parametry pracy układu'></A> + + <?php if ($_SESSION['well_details']['wellTypeID']!=20): ?> + &nbsp;&nbsp;&nbsp; + <a href='?pg=site401mark&dev=<?php echo $_SESSION['well_details']['devID'];?>&data=refresh'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Pobierz aktualne dane'></A> + <?php endif; ?> + + </div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site401mhis.php b/sites/site401mhis.php new file mode 100644 index 0000000..37d63cb --- /dev/null +++ b/sites/site401mhis.php @@ -0,0 +1,391 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + + <?php + if (empty($_SESSION['well_details'])) + header("Location: /?pg=site401"); + ?> + + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + </script> + + <div id='loader-wrapper'><div id='loader'></div></div> + + + + <?php +//2018-04-13 +if (!isset($_GET['p'])) unset($_SESSION['site401mhis_working_params']); + +if (empty($_SESSION['site401mhis_inDate'])) $_SESSION['site401mhis_inDate'] = sqlStringValue("select SUBSTRING(max(RHD_DATE),1,10) DT from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID'],"DT"); +if ($_POST['inDate']) $_SESSION['site401mhis_inDate']=$_POST['inDate']; + +if ($_POST['sub_search']=='Szukaj') +{ + + + + unset($well_working_params); + + //$wynik = mysql_query("select RHD_DATE,RHD_P1_VAL,RHD_P2_VAL,RHD_PP_VAL,RHD_HH_VAL,RHD_HD_VAL,RHD_Q_VAL,RHD_I_VAL,RHD_U_VAL,RHD_PE_VAL,RHD_COS_VAL,RHD_DGN_VAL,RHD_WORK_TIME_VAL from rep_his_data_everyday where RHD_DATE like '".$_SESSION['site401mhis_inDate']."%' and RHD_DRS_ID=".$_SESSION['well_details']['devID']." order by RHD_DATE"); + $wynik = mysql_query("select * from ".getTableNameFrom_everyday_his($_SESSION['site401mhis_inDate'])." where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_Q_VAL>0 and RHD_DATE>='".$_SESSION['site401mhis_inDate']." 00:00:00' and RHD_DATE<='".$_SESSION['site401mhis_inDate']." 23:59:59' order by RHD_DATE"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($r["RHD_PP_VAL"]>0 && $r["RHD_Q_VAL"]>0) + { + $well_working_params[] = array( + 'p1' => $r["RHD_P1_VAL"], + 'p2' => $r["RHD_P2_VAL"], + 'pp' => $r["RHD_PP_VAL"], + 'hh' => $r["RHD_HH_VAL"], + 'hd' => $r["RHD_HD_VAL"], + 'Q' => $r["RHD_Q_VAL"], + 'I' => $r["RHD_I_VAL"], + 'U' => $r["RHD_U_VAL"], + 'Pe' => $r["RHD_PE_VAL"], + 'cos' => $r["RHD_COS_VAL"], + 'dia' => $r["RHD_DGN_VAL"], + 'date' => $r["RHD_DATE"], + 'time' => $r["RHD_WORK_TIME_VAL"] + ); + } + } + unset($_SESSION['site401mhis_working_params']); + $_SESSION['site401mhis_working_params']=$well_working_params; + +} + +//wyświetla info o agregacie dla danej daty +$wynik = mysql_query("select WLE_PUMP_NAME,WLE_PUMP_NO,WLE_ENG_NAME,WLE_ENG_NO,WLE_DATE_FROM,WLE_DATE_TO,WLE_REASON from seg_wells_exchanged where WLE_WLL_ID=".$_SESSION['well_details']['wellID']." and WLE_DATE_FROM<'".$_SESSION['site401mhis_inDate']."' and (WLE_DATE_TO>'".$_SESSION['site401mhis_inDate']."' or WLE_DATE_TO is null)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $_SESSION['site401mhis_exch_info'] = array( + + 'exch_pup' => $r["WLE_PUMP_NAME"], + 'exch_pup_no' => $r["WLE_PUMP_NO"], + 'exch_eng' => $r["WLE_ENG_NAME"], + 'exch_eng_no' => $r["WLE_ENG_NO"], + 'exch_date_from' => $r["WLE_DATE_FROM"], + 'exch_date_to' => $r["WLE_DATE_TO"], + 'exch_date_reason' => $r["WLE_REASON"], + ); + + unset($testIDArray); + $testIDArray = sqlGetResAsArray("select * from tst_tests where TST_ID=(select max(TST_ID) from seg_dev_resources,seg_pumps left join tst_tests on (TST_PUP_ID=PUP_ID and TST_PUP_SN_NO='".$r["WLE_PUMP_NO"]."' and TST_ENG_SN_NO='".$r["WLE_ENG_NO"]."' and TST_AUDIT_CD<='".$r["WLE_DATE_FROM"]."') where DRS_DEV_TYPE=10 and PUP_ID=DRS_DEV_ID and PUP_NAME='".$r["WLE_PUMP_NAME"]."' and DRS_SN_NUMBER='".$r["WLE_PUMP_NO"]."')"); + +} + + + + + if (!empty($_SESSION['site401mhis_working_params']) && count($_SESSION['site401mhis_working_params'])<1) + { + /* + $sugTime = sqlStringValue("select SUBSTRING(max(RHD_DATE),1,10) M_DATE from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_PP_VAL>0 and RHD_Q_VAL>0 and RHD_DATE like '".substr($_SESSION['site401mhis_inDate'],0,7)."%'","M_DATE"); + if (strlen($sugTime)<10) $sugTime = sqlStringValue("select SUBSTRING(max(RHD_DATE),1,10) M_DATE from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_PP_VAL>0 and RHD_Q_VAL>0 and RHD_DATE like '".substr($_SESSION['site401mhis_inDate'],0,4)."%'","M_DATE"); + if (strlen($sugTime)<10) $sugTime = sqlStringValue("select SUBSTRING(max(RHD_DATE),1,10) M_DATE from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_PP_VAL>0 and RHD_Q_VAL>0 and RHD_DATE like '".substr($_SESSION['site401mhis_inDate'],0,3)."%'","M_DATE"); + if (strlen($sugTime)<10) $sugTime = sqlStringValue("select SUBSTRING(max(RHD_DATE),1,10) M_DATE from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID']." and RHD_PP_VAL>0 and RHD_Q_VAL>0 and RHD_DATE like '".substr($_SESSION['site401mhis_inDate'],0,2)."%'","M_DATE"); + + //jeśli nie znalazł to podstawia max datę + if (strlen($sugTime)<10) $sugTime=sqlStringValue("select SUBSTRING(max(RHD_DATE),1,10) DT from rep_his_data_everyday where RHD_DRS_ID=".$_SESSION['well_details']['devID'],"DT"); + */ + echo('<script>sweetAlert("Uwaga!", "Brak danych pomiarowych wymaganych do oceny energochłonności dla poszukiwanej daty.\\n\\n Wybierz inną i spróbuj ponownie.", "warning");</script>'); + //$_SESSION['site401mhis_inDate']=$sugTime; + } + + + + if (!empty($_GET['p'])) $rowCount=$_GET['p']; + else $rowCount=count($_SESSION['site401mhis_working_params'])-1; + + + ?> + + + + + + +<div class="tag50_left"> + + <div class="head_tag">Studnia</div> + <div class="tag_WellName"> + <?php echo $_SESSION['well_details']['wellName']; ?> + </div> + + + <FORM ACTION="?pg=site401mhis&dev=<?php echo $_SESSION['well_details']['devID'];?>" METHOD="POST"> + <div class="head_tag">Wybierz datę i godzinę</div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class=desc>Data oceny</TD> + <TD CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDate' value='<?php echo $_SESSION['site401mhis_inDate']; ?>' SIZE='10'></TD> + </TR> + <tr> + <td class="desc">Godzina oceny</td> + <td class="desc_value"> + <?php + echo "<b style='font-size: 14px;'>".substr($_SESSION['site401mhis_working_params'][$rowCount]['date'],11,8)."</b>"; + ?> + </td> + <td class="desc_value"><input type="submit" name="sub_search" value="Szukaj" class='btn btn-default btn-sm' onclick="makeRequest('?pg=site401mhis');"> + <?php if (empty($_SESSION['site401mhis_working_params'])): ?> + &nbsp;&nbsp;&nbsp;<img src="./images/animated-arrow.gif"> + <?php endif; ?> + </td> + </tr> + </TABLE> + </div> + </FORM> + + + <div class="head_tag"><?php echo $lab_Tag_site301_005 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site401mhis_exch_info']['exch_pup']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site401mhis_exch_info']['exch_pup_no']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site401mhis_exch_info']['exch_eng']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site401mhis_exch_info']['exch_eng_no']; ?></TD> + </TR> + + <TR> + <TD class="desc_well_param">Data zabudowy</TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site401mhis_exch_info']['exch_date_from']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param">Data wybudowy</TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site401mhis_exch_info']['exch_date_to']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param">Powód wymiany</TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site401mhis_exch_info']['exch_date_reason']; ?></TD> + </TR> + + + + </table> + </div> + + +</div> + + + +<div class="tag50_right"> + + + + + <?php +if (count($_SESSION['site401mhis_working_params'])>0) +{ + + + if ($testIDArray[0]['TST_ID']>0) + { + $wynik = mysql_query("select TSD_VAL_04/60 TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$testIDArray[0]['TST_ID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $testArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"], + 'n' => (float) $r["TSD_VAL_18"] + ); + } + + $HPSparam = (float) getPolynomialHp_second($testArray,($_SESSION['site401mhis_working_params'][$rowCount]['Q'])/60); + } + + + + + // =============================================================== // + $Evaluation4_q = wellEvaluation4_q($_SESSION['well_details']['QnVal'], $_SESSION['site401mhis_working_params'][$rowCount]['Q']); + + // =============================================================== // + //$resHP = (setPumpHparameterForQ($_SESSION['well_details']['pumpID'],$_SESSION['site401mhis_working_params'][$rowCount]['Q'])-($_SESSION['site401mhis_working_params'][$rowCount]['pp']-$_SESSION['site401mhis_working_params'][$rowCount]['hh']))/($_SESSION['site401mhis_working_params'][$rowCount]['pp']-$_SESSION['site401mhis_working_params'][$rowCount]['hh']); + //$Evaluation4_HfQ = wellEvaluation4_HfQ($resHP,$_SESSION['site401mhis_working_params'][$rowCount]['pp']); + + $Evaluation4_HfQ = wellEvaluation4_HfQ_new($HPSparam,$_SESSION['site401mhis_working_params'][$rowCount]['pp'],$_SESSION['site401mhis_working_params'][$rowCount]['hh']); + // =============================================================== // + + $Evaluation4_Throt = wellEvaluation4_Throt($_SESSION['site401mhis_working_params'][$rowCount]['hd'],$_SESSION['site401mhis_working_params'][$rowCount]['p1'],$_SESSION['site401mhis_working_params'][$rowCount]['p2']); + // =============================================================== // + + $Evaluation4_LineLoss = wellEvaluation4_LineLoss($_SESSION['site401mhis_working_params'][$rowCount]['p1'],$_SESSION['site401mhis_working_params'][$rowCount]['pp'],$_SESSION['well_details']['LpVal'],$_SESSION['well_details']['DrVal']); + // =============================================================== // + + // =============================================================== // + if (empty($_SESSION['site401mhis_working_params'][$rowCount]['Pe'])) $_SESSION['site401mhis_working_params'][$rowCount]['Pe']=1; + $resETA = ($_SESSION['site401mhis_working_params'][$rowCount]['Q']*($_SESSION['site401mhis_working_params'][$rowCount]['hd']+$_SESSION['site401mhis_working_params'][$rowCount]['p2']))/(367*$_SESSION['site401mhis_working_params'][$rowCount]['Pe']); + $RedYellowParam = setRedYellowLimes($_SESSION['well_details']['QnVal']); + $YellowGreenParam = setYellowGreenLimes($_SESSION['well_details']['QnVal']); + // =============================================================== // + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_site401mhis_01.png"; + if (file_exists( $fileName0)) unlink($fileName0); + + + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + //pumpImageStatus($fileName, $RedYellowParam, $YellowGreenParam, $resETA); + pumpImageEnergy($fileName, $RedYellowParam, $YellowGreenParam, $resETA); + + if ($_SESSION['site401mhis_working_params'][$rowCount]['dia']==1) + { + $ramka = 'yellow_value'; + $opis = 'Ostrzeżenie'; + } + elseif ($_SESSION['site401mhis_working_params'][$rowCount]['dia']==2) + { + $ramka = 'orange_value'; + $opis = 'Działanie niepoprawne'; + } + else + { + $ramka = 'green_value'; + $opis = 'Działanie poprawne'; + } + + +} + +?> + + + + + <div class="head_tag">Oceny pracy układu pompowego</div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_005; ?></TD> + <TD class="<?php echo $Evaluation4_q['grid_style']; ?>"><?php echo $Evaluation4_q['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_009; ?></TD> + <TD class="<?php echo $Evaluation4_HfQ['grid_style']; ?>"><?php echo $Evaluation4_HfQ['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_012; ?></TD> + <TD class="<?php echo $Evaluation4_Throt['grid_style']; ?>"><?php echo $Evaluation4_Throt['grid_text']; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site401_015; ?></TD> + <TD class="<?php echo $Evaluation4_LineLoss['grid_style']; ?>"><?php echo $Evaluation4_LineLoss['grid_text']; ?></TD> + </TR> + + </table> + </div> + + <div class="head_tag">Ocena energochłonności</div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR><TD><img SRC="<?php echo $fileName; ?>" border="0"></TD></TR> + </table> + </div> + + + + <div class="head_tag"><?php echo $lab_Tag_site401_011; ?></div> + <div class="tag_center"> + + + <TABLE class='desc_val'> + <TR> + <TD class='desc'>Wskazanie</TD> + <TD class='<?php echo $ramka; ?>'><?php echo $opis; ?></TD> + </TR> + </table> + + + </div> + + + + +</div> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site401_012 ;?></div> + <div class="tag"> + <table WIDTH='100%' class='tag'> + <TR> + <TD class='label'>Data</TD> + <TD class='label'>H<sub>D</sub> [m]</TD> + <TD class='label'>Q [m<sup>3</sup>/min] </TD> + <TD class='label'>p<sub>1</sub> [m]</TD> + <TD class='label'>p<sub>2</sub> [m]</TD> + <TD class='label'>I [A]</TD> + <TD class='label'>U [V]</TD> + <TD class='label'>P<sub>e</sub> [kW]</TD> + <TD class='label'>cos(&#966;)</TD> + </TR> + <?php + for($i=0;$i<count($_SESSION['site401mhis_working_params']);$i++) + { + if ($i==$rowCount) + echo"<TR STYLE='cursor: pointer; background-color: rgba(185, 0, 0, 0.13);' onclick=".chr(34)."document.location.href='?pg=site401mhis&p=".$i."&dev=".$_SESSION['well_details']['devID']."'".chr(34).">"; + else + echo"<TR STYLE='cursor: pointer;' title='Pokaż ocenę' onclick=".chr(34)."document.location.href='?pg=site401mhis&p=".$i."&dev=".$_SESSION['well_details']['devID']."'".chr(34).">"; + + echo" + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['date']."</TD> + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['hd']."</TD> + <TD class='field_center'>".round($_SESSION['site401mhis_working_params'][$i]['Q']/60,3)."</TD> + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['p1']."</TD> + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['p2']."</TD> + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['I']."</TD> + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['U']."</TD> + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['Pe']."</TD> + <TD class='field_center'>".$_SESSION['site401mhis_working_params'][$i]['cos']."</TD> + </TR> + "; + } + + ?> + + </table> + + + </div> + + + + + <div class=tag_buttons> + <a href='?pg=site401mark&dev=<?php echo $_SESSION['well_details']['devID']; ?>'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back; ?>'></A> + <INPUT class="btn btn-warning btn-sm" TYPE="button" VALUE="Drukuj" onclick="window.print()"> + + </div> + + +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401offhis.php b/sites/site401offhis.php new file mode 100644 index 0000000..17b98e9 --- /dev/null +++ b/sites/site401offhis.php @@ -0,0 +1,135 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php + +//usuwanie wyłącznika +if (!empty($_GET['param'])) +{ + $tpmArray=explode(',', $_GET['param']); + if ($tpmArray[0]=='del' && md5($tpmArray[1])==$tpmArray[2]) + { + mysql_query("DELETE FROM seg_dev_resources_det WHERE DRD_ID=".$tpmArray[1]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + unset($_GET['param']); + unset($tpmArray); +} + + + +unset($offArray); +/* +$offArray = sqlGetResAsArray(" + + select * from + ( + select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." + union + select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$_GET['dev']." + ) tb order by DRD_AUDIT_DATE desc + + "); +*/ +if (empty($_GET['more'])) + $offArray = sqlGetResAsArray("select * from viw_pump_working_status where DRD_DRS_ID=".$_GET['dev']." order by DRD_AUDIT_DATE desc, DRD_ID desc limit 20"); +else + $offArray = sqlGetResAsArray("select * from viw_pump_working_status where DRD_DRS_ID=".$_GET['dev']." order by DRD_AUDIT_DATE desc, DRD_ID desc"); + + +?> + + + <div class="tag100"> + <div class="head_tag">Historia postojów - <?php echo $_SESSION['well_details']['wellName']; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Nr</TD> + <TD class="label">Data</TD> + <TD class="label">Stan [ON/OFF]</TD> + <TD class="label">Stan - czas [hh:mm]</TD> + <TD class="label">Przyczyna</TD> + <TD class="label">Użytkownik</TD> + + <?php if (!empty($_SESSION['site401_edit_param'])): ?> + <TD class="label"></TD> + <?php endif; ?> + + + </TR> + + <?php + for ($i=0; $i<count($offArray); $i++) + { + unset($roznica); + // jeżeli są kolejne wartości, oblicza różnice + if ($i==0) + $roznica = (strtotime(date('Y-m-d H:i:s')) - strtotime($offArray[$i]['DRD_AUDIT_DATE'])); // / (60*60*24); + elseif ($i>0 && $i<count($offArray)) + { + $liczcz = $i-1; + $roznica = (strtotime($offArray[$liczcz]['DRD_AUDIT_DATE']) - strtotime($offArray[$i]['DRD_AUDIT_DATE'])); // / (60*60*24); + } + + echo" + <tr> + <TD class='field_left'>".($i+1)."</TD> + <TD class='field_center'>".$offArray[$i]['DRD_AUDIT_DATE']."</TD> + <TD class='field_center'>"; + if ($offArray[$i]['DRD_VALUE'] == "ON" ) + echo"<img src='./images/power_on.png' border=0>"; + else + echo"<img src='./images/power_off.png' border=0>"; + + echo" + </TD> + <TD class='field_center'>".convertSecondsToHHMM($roznica)."</TD> + <TD class='field_center'>".setDicName($offArray[$i]['DRD_DESCRIPTION'])."</TD> + <TD class='field_center'>".$offArray[$i]['DRD_AUDIT_USR']."</TD>"; + + + if (!empty($_SESSION['site401_edit_param'])) + { + echo"<td CLASS='field_center' width='5%'> + <a href='./?pg=site401offhis&dev=".$_GET['dev']."&more=".$_GET['more']."&param=del,".$offArray[$i]['DRD_ID'].",".md5($offArray[$i]['DRD_ID'])."'><img src='./images/remove_ico.png' title='$lab_ButtonName_Delete' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć rekord z historii postojów?');".chr(34)."></a> + </td>"; + } + + echo" + + </tr> + "; + + + + } + + if (empty($_GET['more']) && count($offArray)>19) + { + if (!empty($_SESSION['site401_edit_param'])) $colspan_count = 7; + else $colspan_count = 6; + + echo"<tr><TD class='field_left' colspan='".$colspan_count."'><a href='./?pg=site401offhis&dev=".$_GET['dev']."&more=1'>Pokaż więcej</a></TD></tr>"; + } + ?> + + + + </table> + </div> + + </div> + + <div class="tag100"> + <div class="tag_buttons"> + <a href='./?pg=site401inf&dev=<?php echo $_GET['dev']; ?>'><INPUT class="btn btn-info btn-sm" TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back; ?>'></A> + </div> + </div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site401pdet.php b/sites/site401pdet.php new file mode 100644 index 0000000..6649139 --- /dev/null +++ b/sites/site401pdet.php @@ -0,0 +1,283 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + <?php + //paginacja + if (!$_GET['pgn']) + { + $_GET['pgn']=1; + unset($_SESSION['site401pdet_array']); + unset($_SESSION['site401chart_x']); + unset($_SESSION['site401chart_y']); + unset($_SESSION['site401pdet_dic']); + unset($_SESSION['inDateFrom']); + unset($_SESSION['inDateTo']); + unset($_SESSION['site404pdet_array']); + + } + ?> + + + + <?php + if (empty($_SESSION['site401pdet_dic'])) $_SESSION['site401pdet_dic'] = sqlGetResAsArray("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID=".$_POST['inShowHisParam']); + + + if (!$_POST['inDateFrom'] && empty($_SESSION['inDateFrom'])) $_POST['inDateFrom']=date('Y-m-d', strtotime(date('Y-m-d').' -3 month')); + if (!$_POST['inDateTo'] && empty($_SESSION['inDateTo'])) $_POST['inDateTo']=date('Y-m-d'); + + if (!empty($_POST['inDateFrom'])) $_SESSION['inDateFrom']=$_POST['inDateFrom']; + if (!empty($_POST['inDateTo'])) $_SESSION['inDateTo']=$_POST['inDateTo']; + + + //ładuje preloader + if (empty($_SESSION['site401pdet_array']) || $_POST['sub_search']=='Pokaż') + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; + + + + + // sprawdza o który parametr chodzi + unset($srchOUTVAL); + if ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 200) $srchOUTVAL='RHD_Q_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 205) $srchOUTVAL='RHD_HD_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 210) $srchOUTVAL='RHD_HST_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 212) $srchOUTVAL='RHD_HST0_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 215) $srchOUTVAL='RHD_P1_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 220) $srchOUTVAL='RHD_P2_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 245) $srchOUTVAL='RHD_WTEMP_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 260) $srchOUTVAL='RHD_PE_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 270) $srchOUTVAL='RHD_I_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 275) $srchOUTVAL='RHD_U_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 280) $srchOUTVAL='RHD_COS_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 401) $srchOUTVAL='RHD_PP_VAL'; + elseif ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 402) $srchOUTVAL='RHD_HH_VAL'; + + ?> + + + +<div class="tag100"> + <div class="head_tag"> Studnia <?php echo $_SESSION['well_details']['wellName']; ?> [<?php echo $_SESSION['site401pdet_dic'][0]['DIC_POL_LANG'];?>]</div> + <div class="tag_center"> + + <form method="post" action="./?pg=site401pdet&dev=<?php echo $_GET['dev'];?>"><br/> + <input type="hidden" name="inShowHisParam" value="<?php echo $_POST['inShowHisParam'];?>"> + <table> + <tr> + <td>Wyświetle pomiary za okres od:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDateFrom' value='<?php echo $_SESSION['inDateFrom'];?>' SIZE='10'></td> + <td style='width: 15px;'></td> + <td>do:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDateTo' value='<?php echo $_SESSION['inDateTo'];?>' SIZE='10'></td> + <td style='width: 20px;'></td> + <td><input type='submit' name='sub_search' value='Pokaż' class='btn btn-default btn-sm' onclick="makeRequest('?pg=site402chart');"></td> + </tr> + </table> + </form><br/> + + + <?php + // informacja o dacie dłuższej niż 6 miesięcy + $roznica = (strtotime(date("Y-m-d")) - strtotime($_POST['inDateFrom'])) / (60*60*24); + if ($roznica>180) + echo('<script>sweetAlert("Uwaga!", "Z uwagi na wydajność systemu prezentowane są dane z ostatnich 6 miesięcy. Jeśli chcesz zobaczyć starsze dane skorzystaj z modułu raportowego.", "warning");</script>'); + ?> + + + + <?php + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."site401pdet.png"; + + + //if (empty($_SESSION['site401pdet_array']) || $_POST['sub_search']=='Pokaż') + if ($_POST['sub_search']=='Pokaż') + { + $x=null; $y=null; $res=null; $licz=0; + //$wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE,TM from (SELECT DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from seg_dev_resources_det where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=".$_SESSION['site401pdet_dic'][0]['DIC_ID']." and DRD_AUDIT_DATE>'".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_POST['inDateTo']." 23:59:59' union SELECT DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from seg_dev_resources_det_his where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=".$_SESSION['site401pdet_dic'][0]['DIC_ID']." and DRD_AUDIT_DATE>'".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_POST['inDateTo']." 23:59:59') tb order by DRD_AUDIT_DATE"); +//$wynik = mysql_query("select ".$srchOUTVAL." OUTVAL,RHD_DATE,RHD_AUDIT_CD from rep_his_data_everyday where RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>='".$_SESSION['inDateFrom']." 00:00:00' and RHD_DATE<='".$_SESSION['inDateTo']." 23:59:59' order by RHD_DATE"); + //$wynik = mysql_query("SELECT DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from viw_dev_resources_det where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=".$_SESSION['site401pdet_dic'][0]['DIC_ID']." and DRD_AUDIT_DATE>'".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_POST['inDateTo']." 23:59:59' order by DRD_AUDIT_DATE"); + //$wynik = mysql_query("SELECT DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from seg_dev_resources_det where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=".$_SESSION['site401pdet_dic'][0]['DIC_ID']." and DRD_AUDIT_DATE>'".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_POST['inDateTo']." 23:59:59' order by DRD_AUDIT_DATE"); + + + + //chlorki 255 + if ($_SESSION['site401pdet_dic'][0]['DIC_ID'] == 255) + $wynik = mysql_query("select DRD_VALUE OUTVAL, DRD_AUDIT_DATE RHD_DATE, DRD_AUDIT_DATE RHD_AUDIT_CD from seg_dev_resources_det where DRD_RESOURCES_DETAIL=255 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$_SESSION['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<='".$_SESSION['inDateTo']." 23:59:59' order by DRD_AUDIT_DATE"); + else + $wynik = mysql_query("select ".$srchOUTVAL." OUTVAL,RHD_DATE,RHD_AUDIT_CD from rep_his_data_everyday where ".$srchOUTVAL.">0 and RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>='".$_SESSION['inDateFrom']." 00:00:00' and RHD_DATE<='".$_SESSION['inDateTo']." 23:59:59' order by RHD_DATE"); + + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + if ($_SESSION['site401pdet_dic'][0]['DIC_ID']==200) + $r["OUTVAL"] = round($r["OUTVAL"]/60,2); + + $res[]=array( + 'water_value' => $r["OUTVAL"], + 'water_time' => $r["RHD_DATE"], + 'water_audit' => $r["RHD_AUDIT_CD"], + 'water_x' =>'' + ); + if ($licz>0) + $x[] = substr($r["RHD_DATE"], 0,10); + else + $x[] = ''; + + $y[] = $r["OUTVAL"]; + + $licz++; + + + } + unset($_SESSION['site401pdet_array']); + unset($_SESSION['site401chart_x']); + unset($_SESSION['site401chart_y']); + + $_SESSION['site401pdet_array']=$res; + $_SESSION['site401chart_x']=$x; + $_SESSION['site401chart_y']=$y; + } + + /* Create and populate the pData object */ + $MyData = new pData(); + + $MyData->addPoints($_SESSION['site401chart_x'],"Labels"); + $MyData->addPoints($_SESSION['site401chart_y'],"VALUE"); + + $MyData->setAxisDisplay(0,AXIS_FORMAT_CURRENCY); + $MyData->setSerieDescription("Labels","Time"); + $MyData->setAbscissa("Labels"); + $MyData->setPalette("VALUE",array("R"=>55,"G"=>91,"B"=>127)); + + /* Create the pChart object */ + //$myPicture = new pImage(700,230,$MyData); + $myPicture = new pImage(960,500,$MyData); + + + + + + $myPicture->drawGradientArea(0,0,960,500,DIRECTION_VERTICAL,array("StartR"=>220,"StartG"=>220,"StartB"=>220,"EndR"=>255,"EndG"=>255,"EndB"=>255,"Alpha"=>100)); + $myPicture->drawRectangle(0,0,959,499,array("R"=>200,"G"=>200,"B"=>200)); + + /* Write the picture title */ + $myPicture->setFontProperties(array("FontName"=>"./fonts/calibri.ttf","FontSize"=>11)); + $myPicture->drawText(390,40,str_replace(array('<sub>','</sub>','<sup>','</sup>'), array('','','',''), $_SESSION['site401pdet_dic'][0]['DIC_POL_LANG']),array("FontSize"=>16,"Align"=>TEXT_ALIGN_BOTTOMLEFT)); + + /* Do some cosmetic and draw the chart */ + $myPicture->setGraphArea(60,60,930,460); + $myPicture->drawFilledRectangle(60,60,930,460,array("R"=>255,"G"=>255,"B"=>255,"Surrounding"=>-200,"Alpha"=>10)); + + //$myPicture->drawScale(array("GridR"=>180,"GridG"=>180,"GridB"=>180)); + + //wyświetlanie legeny na osi X + $labelskip = count($_SESSION['site401chart_x'])/10; // values = 1000, hours = 24 + $scaleSettings = array("LabelSkip"=>$labelskip); + $myPicture->drawScale($scaleSettings); + + + + + /* Draw a spline chart on top */ + $myPicture->setFontProperties(array("FontName"=>"./fonts/pf_arma_five.ttf","FontSize"=>6)); + //$myPicture->drawFilledSplineChart(); + $myPicture->drawSplineChart(); + + $myPicture->setShadow(FALSE); + + + + /* Write the chart legend */ + //$myPicture->drawLegend(643,210,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); + + /* Render the picture (choose the best way) */ + $myPicture->Render($fileName); + + ?> + <?php echo "<p style='text-align: center;'><img src='$fileName'></p>" ?> + + </div> + +</div> + + + <div class="tag100"> + <div class="head_tag">Lista pomiarów</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label">Data pomiaru</TD> + <TD class="label"><?php echo $_SESSION['site401pdet_dic'][0]['DIC_POL_LANG'];?></TD> + </TR> + + <?php + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site401pdet_array'])) $stop=count($_SESSION['site401pdet_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR> + <TD class='field_right'>".($i+1).".</TD> + <TD class='field_center'>".$_SESSION['site401pdet_array'][$i]['water_time']."</TD> + <TD class='field_center'>".$_SESSION['site401pdet_array'][$i]['water_value']."</TD> + </TR> + "; + } + ?> + + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site401pdet_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site401pdet_array'])>20) + echo pagination_grid('./?pg=site401pdet&dev='.$_GET['dev'], $_GET['pgn'], count($_SESSION['site401pdet_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site401pdet_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site401pdet_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + </div> + + + + + <?php + echo" + <div class=tag_buttons> + <a href='./?pg=site401inf&dev=".$_GET['dev']."'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Back'></A> + </div> + "; + ?> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site402.php b/sites/site402.php new file mode 100644 index 0000000..b9d8df9 --- /dev/null +++ b/sites/site402.php @@ -0,0 +1,133 @@ +<?php +if (!empty($_SESSION['site402'])) +{ +?> + + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site302_input'] = $_POST['sr_well']; + ?> + + <form action="./?pg=site402" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Zbiornik:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site302_input'];?>"></td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>&nbsp;"; + + echo $lab_Field_site203_022; + ?> + </td> + </tr> + </table> + </div> + </form> + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site302_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_006 ;?></TD> + </TR> + + <?php + if (empty($_SESSION['site302_array']) || $_POST['sub_search']=='Szukaj') + { + if (!empty($_POST['sr_well'])) + { + $query="select SRP_ID,SRP_NAME,DRS_BUY_DATE,DRS_STATUS_DIC_ID, MCF_NAME,DRS_ID from seg_dev_resources,seg_reservoirs_piezometers left join seg_manufacturers on SRP_MCF_ID=MCF_ID where DRS_DEV_TYPE=600 and DRS_DEV_ID=SRP_ID and SRP_NAME like '%".$_POST['sr_well']."%'"; + $query.=" and DRS_STATUS_DIC_ID=7"; + $query .= " order by SRP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 50"; + } + else + { + $query="select SRP_ID,SRP_NAME,DRS_BUY_DATE,DRS_STATUS_DIC_ID, MCF_NAME,DRS_ID from seg_dev_resources,seg_reservoirs_piezometers left join seg_manufacturers on SRP_MCF_ID=MCF_ID where DRS_DEV_TYPE=600 and DRS_DEV_ID=SRP_ID"; + $query.=" and DRS_STATUS_DIC_ID=7"; + $query .= " order by SRP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 50"; + } + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'devID' => $r["DRS_ID"], + 'resID' => $r["SRP_ID"], + 'resName'=> $r["SRP_NAME"], + 'mcfName' => $r["MCF_NAME"], + 'buyDate' => $r["DRS_BUY_DATE"], + 'wtrLevel'=> getLastValueFromDevResourceDetail('RESERVOIR_PIEZOMETER_PARAMETERS','WATER_LEVEL',$r["DRS_ID"]) + ); + } + unset($_SESSION['site302_array']); + $_SESSION['site302_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site302_array'])) $stop=count($_SESSION['site302_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site402inf&dev=".$_SESSION['site302_array'][$i]['devID']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site302_array'][$i]['resName']."</TD> + <TD class='field_center'>".$_SESSION['site302_array'][$i]['mcfName']."</TD> + <TD class='field_center'>".$_SESSION['site302_array'][$i]['buyDate']."</TD> + <TD class='field_center'>".$_SESSION['site302_array'][$i]['wtrLevel']."</TD> + </TR> + "; + } + ?> + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume"><?php echo $lab_NumberResults_001.": ".count($_SESSION['site302_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site302_array'])>20) + echo pagination_grid('?pg=site402', $_GET['pgn'], count($_SESSION['site302_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="/export/site402_xls.php" title="Export do EXCEL"><img src="/images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="/export/site402_print.php" target="_blank" title="Wydruk"><img src="/images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + </div> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site402AW.php b/sites/site402AW.php new file mode 100644 index 0000000..55ff710 --- /dev/null +++ b/sites/site402AW.php @@ -0,0 +1,50 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cP/YvX98PXtsby0iHiHo7VyTKk+JPMjF2XwQiOK2kwj+4qAKA76aXky0GWWBh8sK9Ju/p9aMN ++eqj7vmzeewC4eEeECxEQplKUxu4OeHdgSVtAE2coEr+MCJ/KHLORF85S/81lOGCe3auY9XuwYrd +PCyLsOvLVYMLjOhVWahTbspA9NWAHyUNbz5byxjYaIqrDG6K787XSUgTcTJCClZ8KND34IVZRI+1 +eBuoJ5Ws+SmDL2ahHOoAg2/VVARQ9u72uNtBq/nSagLaJpKq3R4m7AFUViHPyPu1/tQPcP3/wx18 +JNP/Yso1EU9Vtv0+3YXq9wG18l3FatLtGSh/YmpTOoIn8J32oUZLtro3HADr+QTRrelhqwqEn3u9 +mpP51vGbEq4EC9IXQyvtImwTsKOZKInTRt6H77rXfIuV+nl9b0/GqOQ+3jXCbM8+HthwwLZJTBm8 +/v2v7kMw4t67nwb7BHFXzhK3TP6VwFkc+zIGUrxT67HETdybsI/QdV/SkMrf0zJcJVRtOTglUZMw +bfSapc7vy55l+Pvq5+JEfimocAqXopK41OKklDFpk0952gnXrl6BcA4mCR7iANDkV1LRI6J4zjTM +Mi9Wodt3AZ63fckVlWrZHf7xK64zpiDI9hNGA6ZcBX3g9OcZlCzFXvenIagmGMfaneBoMr1jkrVY +Hg5SnV6eLBDcjGThcreASxrKqkKnQiiFku4XOS605F/bxN27vuGY3OJiO88vJW0cVitCZrrWnWur +p3jMq8w2zQ+QVi2ehgAt8FeKMGyXmQRRAB9uQIQmNZfLmtuLJ/wuazHZ0MdkEpd11oedMIxct6GR +PfubqoPMA9Y0Pzb6Q2FC9uM4Mg1TEPYzfDPf5kzqsVeUHS6+e7to/mYmIATwg6XUD0F1vNG3JWPt +LfnqhIHCIOmXlylIaeUPnoaKfMbIZUYpflFi45ywKEFKe3/iOzWUEwSHmoZHB86V1FqVL///H26I +bnx3P1mXvfGwd7WsefMtaxZbPwGVmPId/DUw0XaLiDvRy4T275K+1VzNbt9dGlPJfZsWaT5tdC4R +5EG73kFMrcH6Q+Cvu3cMjKr3+igiBN/gwKFK//oROALzlO/GGYP2PNRCMKLxq6sFwGXmFvVLT32L +T5yNdqaaualN8MTaygCxLMG7GE7cfaKK+2X1pA9vyq0+UDbHX75TBCt/OlM+ip0N7K4Wldn7cMlS +pi/sJwFh/Br+L/Pd32o3q4YFsIAZp509R11sgdfZmcJVeRaqDA4HAwDuvroYj23/QBlPiWsj7q7L +1siT6wveqHmVyTciNc4BaH/LwJ025/D0/suGUw9Lxqvrbuw1uVmr6c09tTqw4jpfq8wdwhF3aXOe +Aj5U0TYi8PGnP1dHZ7iIPXP8B/VbpDa5vMt48+uqFkUURR+PIQgS7MAVfRiqmED/isy644cXcQe2 +hNl7MOfkDyHGojh/US4A0ruFSvsZkIFBb1Uo/STX0njaRO3oNSvJdZFrv1PJ0yGAR1TSXOOd7EhQ +ckejFXIzORQIU1tXxzdt1FAdImdFpTCIrEv49ocO2AM4C86dHMltEasuXLqSN6NbqLbOxQTeNVPj +EWXt+DvF3pAD65tzaRvPnX5wpgeMBpcZTY7wDtaK5E7wZAx/oVNOpDMmjGWelhaOZcPKdsl/pu42 +VASjfd0soGbtfJ2GJvp6B3gVlxcK3mimg0F5AG69SwSqJwb7nnOEiykaN46vrXg/wb1x4PZS+TDF +VHubyo+RpOvbhM9BY5V7rIdfg0RpADFKO/82W10n9KF+Sqm7doOlv5PgK5AuzXx70s8VrhMXwqir +JfXbmrfqS32jIhM4t9fR8bTdX+EY1+/uUhzD2K0hie913HzUY+A/KEzW/qERR3Cmiq4JoTDfbNMD +Kl63tzawSJ5zFoe9UtmVfVI+Zvwvw8zx2s0ow5WjFvgXCsn8OP8QyCa4lA2tYIDl3yzaGsyKhY5S +QO91VujUnqwweqsgNze3HIbB1gW2CcH1GUWo6GI0U20WexCNP4X9UetHModwsfGwAn8WVvTw6ZS5 +B2swniBzAjUmDOCPSkTzV7FG1GNA9/Khx6BHiitR0kBRnWi35I3kX8sp6H+nOdjrs+I3N38NQ45d +TZKxuybVVQr6UfsF8xZLwIDWg9VNftdw6Ml0/gNyb4sSPnWQJcc8r9RR84LIgbd1y52X8L3WBa0L +kexH9aBL2ZkwjwuRU7RizTLIu7qVAjn/+ot74V6o2iLflt/3ZmPWh1c9hHUpas2tEBaqf1/em8zU +8Dtk4NiRM8gNouhNgcu2N0elokcVNe7xvwb0LczcWR4F5btIHekScUVSdbBU+unLjcwAYqH+FSKM +Ug+l6WUnQuoGa9kIMr7kD2R6ank/f3hFGxGgeFcdFWKoClFdJHAqHe42v0Yx1uiBNxPGC1mshNrB +1iid/A4pyJgXt16kkC2XVEpuOMsYga/d2MDta4W+9ViueRbmRj7HWw6KNsBsWLjj75ctgAu1kwC2 +a5Xmp57nDujhbdCRDwUnuFc1ksEy5ZCkavaX666ZaPvWAvh8lpQgh688IiJtGyfQ/RUALFHC2ozD +KSlBojsGtJDp0XMRkmHCJU0effSGA3+RZ7gfsIOk/Wlph2PRdk53e1vhX9+eayg8LLG2YuziHie0 +EIZHhG07YBhNAOLBcuxitxL85xXd/07aggLTmzf+DEcnYtqij2lRuBidpE/lJiPSngsWgDhSAgw4 +MlRjdXPwKVzd8k/HB1qQlqjxHFuoNNITEXfeKjRndPzy4QifsqPBapf3zoobpM4QmeF55K7xmZwm +PsGLQAm7yTiU/lJRPAnhqypaj6h3ZTAUIHhKdFAE2TsKdF1C4t3fKPLSb0lEnTIfGhl91TTmLE6+ +0z0w+BnXhM8a5Cl7ysIHKyEQIaHYlg8T8Zfi5vTOJFhDaVVCc7uctbdGxm0ERTYstuxvAD9mbcuH +lG6iUttK5t7rrr0Uavg+jjKujj/TLDJvZlW0Gmf8woaACH2Bz2LXPsCgb4XRa7tFdHprI3uSDqb0 +75QAiUA4E1O6/70wxwQZAVDARku1PChST13Y/rZ0YkYbB5WtHcGvG9olMvLSnDFmWD6B6PfRzdKk +8FmJRPyEXONu4DR78EuHtwAE0kfpLFdCNvUIZaBkbAco/w1ehG8LKIUMpTV5tlue36kQbjqn/05Q +RWE/zSGbR/i7ECkRYwsgkS40CE0eqZGOf35sdvPsjC/B5USf0M4tIvpA+/xRBk0PFpzPMrBxYcR0 +0/y7r1HW7uuILFcyftUUAFyzq37Wc6g0bsGfeTwES9rglY6RU9sfxR5C+SWZwkbnlL0tFKX8odq4 +Rr6cG5w/hn+z5VsYwb+fXYPOkJkUrmzO6uSYRn+43Ts9GJeBS+qmm3jIdJjVnX0RHVmdYbHo9TCg +aRoaM8+/hPDS2oXf5bFREkn0UFPj4cvi/kmifylJeCGCUwqUEPd+YfV6EF1ZZKW9wmCjvH7JX/4n +JhLAYAv9gh0T \ No newline at end of file diff --git a/sites/site402inf.php b/sites/site402inf.php new file mode 100644 index 0000000..fced2cc --- /dev/null +++ b/sites/site402inf.php @@ -0,0 +1,103 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPxLcpf6eyZAceQ1Rikfkjo5gfi4hWLTMeP2iNVF+Y7gazUZ7ukDajksgCceBM7GkY+YMqqFI +DrTltDyNwHud1kxA56TMkF5zyc4TQj7n8+C4c35fIJiKLGHxf/PhrkzVyeVcB3ilhuEhxIdZ3e8L +ToWM6Ga9niVYb7sbxcn3egpo68jnoOHD+lW6VYxwCyYUr3bxLUKq55B1i805Es/F4SN2VdgUufGg +dKVb1ca5UXBTax8BjZe1g2/VVARQ9u72uNtBq/nSalrcBVuAl19uH9sJfCH1pvHo9PfwfAe1Ua01 +JoNC3nzYP7ePyZOSAgh3Ks73WeHRttckupQrQckIRM7PQXv1x6gFB/K6CBJrHvgLhRaX8AOQ8/uB +QcjjwvhbWtBzHe00LYizQG/6tSswXLpSQ0Re4xzv9w0phjk48c1MFL7ZSaTe32TkGvGroOylPiNB +Pzk4qly0o/6cPCTWLWpPmg6DvjUPh52xlvm+WU/UltCRPdXD71jWHq98gfOBZt1HPYEc45OqYJUp +Iw4xDk6sqNBaM1bcEVaKK8H6LUwI5amVolRRp5dUyMpKxs8u+P6Sq4cES6LeUCVZaxmQY3AsKYCH +kYa2/aMtK5jL0nxWqSrjBBlfnOEgDIl/wApZi5mEQcxxogNG1svvIEoXUid5rc3Jgca0TNytqTxl +U2FewnQNbrMNRL3QUhsYu5cD76rb2Ttd2OdRYY/BiLlO1lXNMSe3l9a9rqEys8d7uqhZoi9Opics +ucccRPS1azYKFfWfYarSBk1UDJTqM+6lE5aRqy1bZgYFW3d1Gn24lxJ7VLqFMUpSEoi+9VEtBI3H +V7NK2fTUz/2Gdxo8Sc8d+GPYkr6kd4ziiQKmIjeO2gXL4afhgOorY3DJ9xbLdduXayv8fIIyixLk +b74skAdtzMYgstSTou0aJsWegu+VuqgpTkgBbWZgQ79jWCgZUjSU9SsXvBr/sbI5RFd7CKxGTzsv +2sZiAu6Miwo/MWoSzT1i/CrrmnnRE7Qh0EWHFhOhWBXk5MRuGNioZLd1cumLEOr/BvHiemxzMshR +/mL/Ou6s8qeGj8M0nSv3sJUHiLMmcPkbDwp75Fq2Sil1rgR7UtnENXCuBI0e2F1XrXkMz546ukSX +xVkX/bhMfDswkLcrbdfK+v73n8ChwgQtZFj+gp+ILPUQ58D0K74neti4lxUXPL6AQNBRoKy+K/ql +3wSOwW71Giwc3sdKJw3ZiIUHM7w6h50mkINU0+ZccQ3MBC7wm3C/jSyNVgbK2HyH9JsDAWdKvuaK +na3Mo6YnWoF0vubjfGrUfY9dyVOZUkDiwTeQ/mTAEYCHQunolpt0sQZuLlifP1AcewU9Vj0zlmn0 +mP/r1zwOPVsyNIuDisB0PGU6dS0/zWnBVM22nPGA+VF43VK9m/qH6nt6tJH+QLtsmRcFP5TRs/1H +MdjsXW+Eh15yCy4erpYUSxAm+bf25QVETBnwJDIH/+VuPUBi4QpEpK04TfX1Bz9PD/pzwH3ywmR9 ++g7pcJ4IzNU/heWqPLdxj7NSK3dPjSWtLfh297q/UDMKhuC/LqJTQjvUu+OwZTOzlwBVUXRWr/5B +RH5oqNqWkqqc8g+IiMDYdD8ElcDDUunuxyHXgMYfSdTG6P+2kUb12yFLp1lMszZebNgYf85vT7dG +ISyw0tJMCclZev0mwTlaVDr0npgIf0XolwPfqDucN3PTOqNjUGI8FzOPhLqfPSZe31rXEZvLoXD+ +SlFz6bll/joFTMWuE184VZlXamRSAuQtkQv1tgvyFv2mr9aD7rccq8A6Yu/NyYx/6zO4xycTieQr +n3sky2l0exzc0AndwWQfeHnV3ke1MU14Wu5hWWPIoOIDkxQy2RzgT/IdadnZyUlvzqYTPwXd+1sW +kLqAluI5pSNNrC7ldMtLtJvmG9MTJ4VAHaEe4mhA11o4KMINyfcW0ouqOWelkEFz9QwshUOjyeSD +/gmeYN2nIVINEYH77DT//W2I8BwWw5eL+dl7QEjx79kEl+33eUlqZfT85/Ku61swz2fahwReczqg +DEnJP1IJ/9TlN7K+ymlEhRB2L95uqKDy7q+Yoc2Ji09bebCOtYUxqFvsik6+I91N4E+u5tNnTXFP +RmTVJVgsDYOmNWsOkl2AUeeUv5Mzfu5letTGHPxcDu0AmQ0MTCaD/4AGBNNFm6kIfRreDSpHW5cC +tzf8rlG1EdplYhdZCc4Yq9oi96FKyVXr0+q2onpVLQDxfue0kpWPPksjxp7qrGwXrKrihq48k6bn +S2MlCcaTEsXxUj+VdUk26VfFYO+7eh6ov6MvAWPLfMF/z2TSgr+R55SeDhvSiKchXVCxDN8gyO3T +zn4ekdmPfoZ/VRCMD/lh16odeWMLz4ixNXlToapIbrbhkaPU0HhdkI7CC4UTG1X8IpqXs6ZJJD/I +dbGVVlFCaGkyZnanC7+AI5T8vOTVhQAx/AkoGajJTpWRvAhrkq7SLiNEgfBMAbUr2GNKPbKxWbKF +ea96zYBsGej+GaZXNNaX89XDPHaUVtGF5Q3vIk1sdenROWhg55u+atX/kIPm1CNNnQuStZPaCLH9 +1J58cH9dLqqU4NxEpQVKYU72wjok47vH2TmheRZm0DLHz8qgzsWHaQx7e9pW0QhNX9RKjK/b21gI +Gdkb/XhV2vrgVFmNSAIf4jvYMhujoCVZkI2tEUnLHUJBml2jK3YLDhgY1hiSHO3xMLpjnUnOZ5qE +z/dqUnMPZCdlCIyAiZibOf+t4mIRbYWuuQghY2rPYdafjVxmrMvLRM49goc9pc0l9VuegMMUS57X +VTM00dQGDxwoBUVfMz0un8r7Z1oQspFlWc86nNRWk+o/y4baCjJb3FL/uPiO1Xy2tcveMs3xw0qA +NhUIgQNed1LHMbokZ0tammUO90rfD77nJXwTN89X4r6yWO45n4vJfsyMWCrX19H8CaYlBgOFjdJI +wtnUmFh+Mrveh5wGyTs+Jiso+DUhHhOqK7hCN2q3feQLw44fCNSlHuPNZj40MkVYMHYp5LVRqS7y +sOv+ihl+AhtuXaxUKpGsaLTreFIci/RMIid8gDpbpl6+W5FeRMvKWLDFVUWWyIbgS2ndgb2GHfib +Lgnv74nfxt3rasvLod7988BuOwNoo6Uk0EUSj1qeknh3d3xztvIV7sxvwqWXDYCowpi4rG8cembm +Bte9ejX9YMMKKdVz+YLFBeLWxt/aDU34DjFtH8KCj4eL3fl2DfQyQSEKSIrks7c3HMiaLVaHkFiA +k382GXsVLqQtcUuQzhaZvT+Q+kWxbGVqxwu0XHMObH0rgpqNdQcS279mJT9dlNTsTS2ZHqfbQzyg +IwY3lDD6apOw1rYn/hjYHqtxbwo0RqHhDVfMVc/WC0lQcTHnnaAh78OXoq0v4a6qO09eFIls+cjN +yHAeMcAcafbnJbqr0OTQ02vl/BDljuJddxZPv0ZRLgrtSjOoITakmSPr61LDULiQC7Z2gQFHz2rf +v2WelYbZe//XfXz0z5busKpe3VRvoWVrSJXbhVKTBitQBpuj+TdvHs2mt8WU6FkEi68BQV14nVnM +Dcx8ZXw2dKY29O4fiUCiSJPgBxEWMKS6e8f/tViEBqYX1/z/kDegR4Gmioh2kc2bhCmSq/wM8hlh +N/qgG4LWi80qovgI8EOO6upXPvM7AgPDy1NIUGPDUeIZ1RgFtxCWPZVDI+lYllyzVCQm+9pm8KwU +X6E4Ny5RNnFF7Lc/y8aKCZQjjOVggKOOEZx/16u9Pil+97lH2gtd4Zqf1PghoOsrbAr+0htCk8BZ +jcnxtnsby44/qGKT4iIC1IBvudhIemPoz2/DXyfjlgVbC2JKpASBrGrqU631Ga7SbB0+DiT7mMWu ++x2jxgFCbFldeP2H8AWd1POeHEM469iw48RtWTitfp13bAGh5h5geLMlNxCCDlA+2428BwasMhXr +rWR4Izy0ZNLVD3O8kl5rhaBB9fwxexc/UyKosMGvUAbhHv9XYDppnabsblcOaZ6yqWa/X4jESEpB +MnuUWRnjONsVHlZpsFTCKO57WkHXBVuqOQacetgA32a+QeiOtcWvnfjh0Yag9cxd+rX0lLj8RFze +j6UTYDUlUdYFj+FtoCJSIPzWuTellij8l9XdK/dr36674IYid+xyu6jyx7t2rzXos2tTTaNDP/Yc +w9hBHr60nVTidD00c9qe5J8I+AlyhG5tXs8TmO7hSRQ2qMRUr3SK0/dJedA3Nfcz1NR/Pfl77xOA +qih9BOP5zoohwBVmTJr5jbpmvvAArBRJ9LIYvLaRwQTEKCEQwyUsR5G2/K3FslnrflpjxBenHanj +mrxfw9biy79QO2N4VNnJiEHjefZpugZ4ZE+gFvkGGqQJYimJQB9fpDeERcNaIrVjOt5cvkYH2FWm +bTnnSXGQwUVVq0437b03qwL2UdMm2lYtp3rd/u8A989QIRCTxAxsekSG0N+Ck9eFA3Ko5ZfmS9Z8 +saFu+yTSo1s8wOPtswUE8nDVp02ODYfEwxGEMAwLf+k++0OYtCUwPRJ23fd8pyFGDGQqR8HgdPRH +PylW2MGiOtlGF+feRWYdtOso7TCf0NpKYlVxKXe1fnKtQMKCjkoLGQH87vaabfujCzkxt3MfgVpb +2l17NyCxywQNTXo3j0lvAOerq2s3yfO1R0N9hyBdx6ucfxTQKtlwwCNZspGr995n8N/pXX8XI4WB +807XG3Wh4Pk5743Rh6kWPpPB0GwRGFFzrw8uRidRNVhHR2umGyRbHtuVerXeC7GWtnEM/eEO8b7/ +QH1DPryuSUhiqU2qre9Mz3VcyMMlyjx0i7BGlDEkcLYAdrenqLyXmo4eqKMVYuAinSDzinlgI6Xl +4EXOpn7Xfhwhk6AezIzcB6MgHmo0/Y/TPS3b9+nUvfF6HuaX5MXgQxHA7MqVjevZ1O+Q2lStUD2s +lDi2YAZ6QIN/XXBCu06qSd+nvtfzwgLRWO9DwndnvUZga6RfmNt16MZ6Q8H4UxJ+Q7xOu3e/4WtV +4Om19/TESCmxhGWmXFOlYbxykfbad0ij96pQ97jbIFIDd+XBfdquzfMtcScW5Y5liUttH3AA3cid +gw1+1OcJ0Kt+TsxPe0r284CL/QQFds0mArVIQ8c0ej0NhRYRQum6qFXOSTvy5pVfNd4L9yz1NKdG ++CoHMR3YhBo1S7k5oSFbrdBnpHtLBToErNIXWyJ4xoh0CfrbgLhlEygKx3warRS2dr5YHTk9KAZY +SHTk3/5r5BhAEOxsENij0YHu02bYHFjFSR4iC3d9ZxR3WVJbFUoJ4DjrUkQ462miF/zF7OYoFtMS +GDLr6Bc/U6m4lFbWspqIHPCiD3Pf9QRGOc8FFaWLD3FloX7X1JfAKefWMBjzHs+LH+rE0cTWw7xP +FoaSaz1mG5eaT9tz2XPnJmUKLpPIQNyctuMEBkK2x4GWc0xqXzLxnNUkqDZeLskXPuVnbTKmgRoa +elTbO2KX/BtRdDxFNMGEmCn2kx3O20oMDTzq3d4jVbSpqFCkC4pKbtqtcjNey75B4cV5aGmFOV+c +wXpfHnPF3FyXK/8br0T6U16lj/EXLuUNPimTdXQ+/fvZBIHUQdZGK0tL/eL8PYF/kbF1nZdbO6c4 ++3uz1NESVnYeW4WxmMgS4uGg+J83fPe67eQMAdD4KT83QpSjca/YlqEsCWJjVXnbbagOdXUTr/kx +h0jK8+IhSMKGVRWxk62dYa2i1m22tYxZpOA9iA2LudET+g6tJS7vCOavzxRTimAFdWiLPL6zl7/X +IXvQl0uzTrLxxQQAvUFp6QLfd/gnKKzG7ZjujZtAYlCW1Xri567zDnO1aPPINFqeyAlNgSH3xViH +XzXBwhO/j/vXXUrQeKxZxt7V5sh+ZJ97Nu6auO6B3FkaANTeH7jec+zwGKB2yVV/xgMFcbUjUSW4 +uYLzq3wTMvXs9zW/913HOoUxg1wQ/R4Hm4PeaGYmbedjW/pkqD45AlzFTzUkLcOKmqQ8yMZnJZJ5 +qk6cH2h6MCM2hk2iapktztg6e38sgaEy1navTG87BL0qpKy+8LoJc/ytk4prEtTjGp9IKgnYzGhg +WXrseVJht/JgyAlyBjV4O0Q1B0rfnWD+d/9EP4w/1yVXcCgXuQiovmSYL/C5TX26uQ/UsXjCIhWD +AHOwPNijUx8mPujZPDfnEVyWng9HjvnSRYWde2OjFniEuj+VirtVYZh6ilOuY7S0h5PqC5cTMIji +mSNFuCduRR3imsE13szRp3/qcL8hQwqm/hRaPGnaDlFMSW7TxhEwUoX16a4gyR1/aCCalz4zR5MW +3OUAuO+yORQl9ItnvZ6LoIhz45NPRiyGYy4RFmWh5TFfgTx/Nko8cQqXmmyGeRtL2xKG2snx28On +dHC9E+SwMpH0JOaJKFrowI5Me82XVAdq3/02MgAtImtLpQIh55hlYhvvX1vNtWnPu4n8SUbfejND +3owLjowUXf+Ql17B4fxAqgCpDEiRiDTr7u1FqhidrEOOhwjFGmwTvBg65wD//qVdSxRgD9S6i6UG +zSSzbX1WRSrztHu0Hy19Otd9Zb8b13KwU7cYiU/i2CQpvrc3R+RO/coe8U2gSDOR/6iJLimf5UTm +LrR/9grGmncd31epgUQmH6m5ef6kV4SM9JUPuWRKPaDpOWGgE/JsIHN29txciiTYt4agYo+B6jOw +B1Gj3+IiFdNQKrdUeBUdgBcelWANp3tj3Fi8xTkoULpkK/E8ZwHAj41xLTEmUVoQA2d8NzK5rQtl +vy0FUoVqLhO5fQ/Gkr8/EGhQc5aJmghT8fx6tuHtYIInaZ6Vkgd/RaNmwh8R6XqUMTdHIw5RUH8M +h3Erm3qz2e/xEk0JNq3wl37LN7Rh/S/f1O/N+W0d4bwkGgFiuEGsmtp2P68bkFuVXfRRlbe+g4Or +8wKCyeetrE3SZMEmazVWY30lTZYZISRBBDiD+/v+oU5YMk6m3UOO+SBtrFiXPqZWX9N3IQqiGFpl +Kh0+4Mo84CrJeqr67buCYNqR7mThKFOjrp+X5ftQTTDs/29BBf6tTPRzyFHp505eRqzpYwjZ2Fwe +H85tUapZk/OMLChaogLoH/+igLHwKomNnaZB1QX7Ca9wyhLEDnS3EwkWHTAWC/8w/PfwXmkHJUpI +eBBraVC47Aw4DYrJG60/pMy9ADlIJ4GbOewiGliZWuWkEjE4FHyCjaKriFk2sdObprkX9F+aADWL +uZFgTECFn8cpQ2dn+IaQLnq1u346V4nti6upFlVlSRy2doiv7ygp5WRMmRG7ANwM4A5pKcaaW8Zf +QXrr8YKKGmZ89qjL29CZJz048VUeY2eqtbDdO9x8MKNQrVi2Jn5RcLRiH/IZboZuBetwZA3wXGES +/yLjtpjl4QkT+GetaYEtBP5cxrSBqGo1kk8Tud9FH1Lluw6HpwgwGgZGZ2tUB0oFKtdeIP3sNqFb +pMA/MywCsJW6uLzWZef8WXNITaDSJuj7MBQc3Bh0Av8tG88uMw2Y78FOLypTqa2qgq7lPL+iT01s +MyHqI7V93KqObwHlcQYZBjRDLI35hd4g4feMAPmVAPG+Lr9tDr7IGLyQ3grCmlwd \ No newline at end of file diff --git a/sites/site403.php b/sites/site403.php new file mode 100644 index 0000000..36a0e6c --- /dev/null +++ b/sites/site403.php @@ -0,0 +1,238 @@ +<?php +if (!empty($_SESSION['site403'])) +{ +?> + <div class="tag100"> + + <div class="head_tag"><?php echo $lab_Tag_site403_001 ;?></div> + <div class="tag_center"> + <img src="./images/SMP_full.png"> + </div> + + </div> + + <div class="tag50_left"> + + <div class="head_tag"><?php echo $lab_Tag_site403_002 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_001; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_002; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_003; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_004; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_005; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_006; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_007; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_008; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_009; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_010; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_011; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_012; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_013; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_014; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_015; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_016; ?></TD> + </TR> + </TABLE> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site403_003 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_017; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_018; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_019; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_020; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_021; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_022; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_023; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_024; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_025; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_026; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_027; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_028; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_079; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_080; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_081; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_082; ?></TD> + </TR> + + </TABLE> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site403_004 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_029; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_030; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_031; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_032; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_033; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_034; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_035; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_036; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_037; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_038; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_039; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_040; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_041; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_042; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_043; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_044; ?></TD> + </TR> + </TABLE> + </div> + + + </div> + + + <div class="tag50_right"> + + <div class="head_tag"><?php echo $lab_Tag_site403_005 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_045; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_046; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_047; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_048; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_049; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_050; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_051; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_052; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_053; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_054; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_055; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_056; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_057; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_058; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_083; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_084; ?></TD> + </TR> + + </TABLE> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site403_006 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_059; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_060; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_061; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_062; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_063; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_064; ?></TD> + </TR> + </TABLE> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site403_007 ;?></div> + <div class="tag_center"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_065; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_066; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_067; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_068; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_069; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_070; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_071; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_072; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_073; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_074; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_075; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_076; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site403_077; ?></TD> + <TD CLASS="desc_value"><?php echo $lab_Field_site403_078; ?></TD> + </TR> + </TABLE> + </div> + + + + </div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site404.php b/sites/site404.php new file mode 100644 index 0000000..1dd217f --- /dev/null +++ b/sites/site404.php @@ -0,0 +1,141 @@ +<?php +if (!empty($_SESSION['site404'])) +{ + + //if (empty($_POST['wydz'])) $_POST['wydz']=sqlStringValue("select URG_DESC from sys_users_regions where URG_USR_ID=".$_SESSION['user_id']." limit 1","URG_DESC"); + if (empty($_POST['wydz'])) $_POST['wydz']=$_SESSION['eq_stock_param3_1'] + +?> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + if ($_POST['sub_search']=='Szukaj') $_SESSION['site404_input'] = $_POST['sr_well']; + ?> + + + <form action="./?pg=site404&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td>Piezometr:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_SESSION['site404_input'];?>"></td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + Pokaż wszystkie</td> + </tr> + </table> + </div> + </form> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site309_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_014 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_006 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_007 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_007 ;?></TD> + <TD class="label">Sterowanie</TD> + + </TR> + + <?php + + if (empty($_SESSION['site404_array']) || $_POST['sub_search']=='Szukaj') + { +// $query="select DRS_ID,SRP_ID,SRP_NAME,SOD_UJ,SOD_DESC from seg_dev_resources left join seg_reservoirs_piezometers on DRS_DEV_ID=SRP_ID left join seg_object_def on SOD_NAME=SRP_NAME where DRS_DEV_TYPE=601 and DRS_STATUS_DIC_ID=3 and SRP_NAME like '%".$_POST['sr_well']."%' and SOD_PLC='".$_POST['wydz']."'"; + $query="select DRS_ID,SRP_ID,SRP_MCF_ID,SRP_NAME,SRP_BARIERA,SRP_SYS_TYPE,SRP_STAT_DESC from seg_dev_resources,seg_reservoirs_piezometers where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=SRP_TYPE_DIC_ID and DRS_DEV_TYPE=601 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and SRP_NAME like '%".$_POST['sr_well']."%' "; + $query .= " order by DRS_STATUS_DIC_ID,SRP_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 100"; + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $hst = getLastValueFromDevResourceDetail("WELL_PARAMETERS","HSTM",$r["DRS_ID"]); // dic ID=210 + if (empty($hst)) $hst = $lab_Field_site404_001; + else $hst=str_replace('.',',',round($hst,2)); + + $res[]=array( + 'id' => $r["SRP_ID"], + 'name' => $r["SRP_NAME"], + 'dev_id' => $r["DRS_ID"], + 'ster' => setDicName($r["SRP_MCF_ID"]), + 'hstm' => $hst,//,round(getLastValueFromDevResourceDetail("WELL_PARAMETERS","HSTM",$r["DRS_ID"]),2), + 'depth' => round(getLastValueFromDevResourceDetail("WELL_TECHNICAL_PARAMETERS","LS",$r["DRS_ID"]),2), + 'desc' => $r["SRP_SYS_TYPE"], + 'bariera' => $r["SRP_BARIERA"] + ); + + } + unset($_SESSION['site404_array']); + $_SESSION['site404_array']=$res; + } + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site404_array'])) $stop=count($_SESSION['site404_array']); + + for($i=$start;$i<$stop;$i++) + { + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site404inf&dev=".$_SESSION['site404_array'][$i]['dev_id']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site404_array'][$i]['name']."</TD> + <TD class='field_left'>".$_SESSION['site404_array'][$i]['bariera']."</TD> + <TD class='field_center'>".$_SESSION['site404_array'][$i]['hstm']."</TD> + <TD class='field_center'>".$_SESSION['site404_array'][$i]['depth']."</TD> + <TD class='field_center'>".$_SESSION['site404_array'][$i]['desc']."</TD> + <TD class='field_center'>".$_SESSION['site404_array'][$i]['ster']."</TD> + </TR> + "; + } + ?> + </table> + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site404_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site404_array'])>20) + echo pagination_grid('?pg=site404', $_GET['pgn'], count($_SESSION['site404_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site404_xls.php" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site404_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + </div> + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site404AW.php b/sites/site404AW.php new file mode 100644 index 0000000..92e3ead --- /dev/null +++ b/sites/site404AW.php @@ -0,0 +1,50 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPy2otKGuaYPhqG18PsZs9/Nh4hgwniY4v9kiEBTYm8/MmGlXn7zNXSIHaAfpiNeINbse9Rgs +oaBdQawKwAhyHR0aWggaRIBuhyeJQBKTIpW1J7LWcQnU/P88fcp4lWtRRwUvwJysG7zNkCWlmFRK +1vJ5sh+hVa76+ktdjuFURBKk6vpmNTlinkY/VNC8ehglhQuzRq28Cy8FNrKevLZPrgOGnBkZDzHm +J/GKLqUzrr1KUbn1qEG8g2/VVARQ9u72uNtBq/nSaeDiCFXMocMCDjC0myHPyPvd/+QKWPsBbhxn +bS8eltT4nKDxkrGMw0RcPv9x2/TnW3C5yqgA9rxmc4baXkgCP9zsYhylp2xHH/W4qCtitOkzHAHr +61Pz8BSZbha1IVJbDC2TizbwF/LeISSIi7q7eULzXoaowxo1jttMYgFBx4sPfv37U+xZ/Zx3kaw1 +nTX1CZGmVGCoY21vzFIXYhi+nHDkXHSMgnN8Tnrs1Gs3o28cdCPP8gtJe/ngzoBQOLN3two4z6ll +z4w0Al3e6DqnzqYW6x951dlcCtMWpC1hjl0t7ijLIngicyOFQUQ0H+1tzFeTkEnqawPAOUHK4LeR +UCbJlA9lx5AzjdF5kJ0T2cYqqml/QfxcBP+Vnpq/VB1aSYrOBGR7Z9NMWxFcf7TEnzz0yd/qqYVe +rgJ43PEKf+NRpcnkhAgAm3urK/UnBYlIIUUQxv3M8XH5EyGLV8gI2YN8hMgn14T+iPPBHZufDzVs +zqrW7yr7WUWpL86ZhvppA4TbFwDmjWJ+xM+0YDtB8e27YZc3zdM2Y41nGw8S12XeNIUYL8hqRpIg +cudKnvE7+5vusXmLJ46n4Ktq71NJ7AMuxR6+0MP2fWsdiWCQw3PbDitZOP/38OAZu33q6hzvRAUd +66t4hEOPfdB2Wgxh7b0p2fy41kfIAh8x/OlZxSpKEta0RpNbC00JS6oMExJIAwpsAl/HZ8Dmiuhk +/f/Hu1DpAeS+jLIlAViX9gqwrRa9TUV/pkAOV/6oIXYKqe+t8hceJp7cRAbuRVHxoEa/3BxPl4Vh +zFzngczmn7TKwPQCOBeZCllqSy7huq0MdUF1AqBvpk5yHwbTaBO52BQLxbuWwPaqTTVExEcINJxO +8CJPUgLzCL8BKUM/+H2yqEclAkI3136OEdVaOtboLH2UhelEwtI7wkIqv8oO9tDSlAxo9hgGCV2/ +Hzve4qi7/xfS952BAvWLnsQL4hEvHw20LzgLINKmRkb4UcFZ2mW0GLoXcG8SMCpoCdgaDiV2CYYu +afmsDdpoVN6M8dW9IT29iuUSJZTsw/bpP0WKhfiAwFZlCoXzND8Eitkx3FkuG0yl6GrtDX1XIj8g +beaek3zT4rQb9NO1ZaanNoGAWh9zBB/+/gOt1BZJQZq6AkVNvjvcRj1y4yjfoT7fDvU5CJJ5c4cY +YJrOePeoJ9jHrjGmAtEyfPFM6ree6148YiDZMKNq2nTwSa33gPGkfbB+2CCpomdF18hPyHv8EpuC +lqfoxSW6NC+7akVI+G+LTLDCRhnibYIzCSVTUYufp8fG4AdArJ0EFRYtMf98aJiUXLpypdsLwJwP +QydrjrvIejII4VPwc3yUTOawszHMxdGq+/bHl2QMPbmJHXZqaEue4VXkjxprctwXSmGejnZSSXfv +1216gfgbux6TytP2/FUrGy0oavtTy2BsPlY7PLxG1gpNfnYgH0rRB8Welo+4+7xUPtJLiS82t1ZH +Yar5BeHzsvSjrRfPJCXCztDJcsM+hn3suLnDCYVVNp4wbZfBsroA6ZtYMGI7IydRyRMHKeN80KPK +BIlPl+adhWNdxIVbQBVC9/TXVhIze4B4bo5ySSa0w+Wm52IaMtfZslBvEOIENhiMZ5HSpYlenVrR +4XVlWceRlfGqbqqAeGNY2WZzL39qYrssOGGTcX8zGai1d3A7LoxSHiDhHc8PSfZr8o8zxVSWScuO +09zPJ9R00Zcc6qkJr2PVIrrMeHAP82QANNmgFlyMgCnwuLY4M6cqTE7JjfkUtlrHAwUtybXA4IRV +SZDBD8VmKeQfAl8HW8W9rkOg08eBVM1DnloQE7kakukFFmgAL8JPA78ZYZXCKP4XZQtS4tjMbiRb +XVWUDmSp4co/Xv3WCALqcoaJe8VOPKETJtDof0GEiOaWbV9U2uyIkRKi25J5U4vuvHJjnxaAQ109 +jR9vdd3ZfVUVb4pOeI4C0HOu54HP53vdJiPfMBr/oBFdeEAABOY5kpcb5oUs6FbvPQxe17y29njd +l5URUAT0N05kLLiealHAiJCHVFPIjmN859lg9wFHWnWWTZuzdtPZgsFNMydgtyVmf7igTAxW81b3 +Vwb+mtGprxbjzRqYjL8WwOw9lWAUBRrA+3Y3zfQdJ7PQwEnqS8T/CYvpil3R6C+wWdzaT9b+A3ib +CdJZIKjQQwXFuq4Cm09mufudfTirE+mx5uZbcaYKo6UAbl5cW9wDC5EgvA3XNaRbSJHwatz55G2B +cmlNn7EhpvMu85v2X7w3pcL/Ksvf5ofk07K5xWXizKg82Nchc7f8zcocnTRuw/25ow1fjZMLU4If +3p+QFqX7/aIqXSq9jGlgab1S7k3MiHbChaL9VjpW1NJCJyCVjL1T9Peh0IQXMHLXXrNdeRniHqOX +IuBuiBJykzMZRfDgATBvggIBmvuEj5aK+g/bvci3QsJz5e5gIBwAHRRETXPjRbXvMyg5y/VLe54a +PR9p7UitjOPacHNTLJ90cbceNL1AEaZ5t6M+slHEPB9+9NV/2W6SLlNHoeVtUm8c5ssEFdFFm9D4 +jBHOXhJ0CH1gy1PPUzu/S2D+kpsIQC2zLKFjLZeos2An6aDxMTx0WSwcqD5W+Pim5GY7HZ+uE6ov ++Yx2x6LEznXkh9M01cqMfJTFE+jLMNBROISEDQOehXd9KTHgxIZPZ+sK2wxSM0fmb7zt+87lB9me +AClG6ya1zvbBdV7T0JbufMfLzee4+qEZm9KCYt53BOwy3HGsfNG+vx1+wODAtG8oWy93/zFB1e0x +T8HTVG5NNlyJHvT365Kdgquqf6AhMc752hQQ05MGvFBFP01uZkxGWnwwY/LBmmHO3O/Qo+U1v21/ +jfFtEJfdqM57iUk13rtDrjdLR2wSnNcERC+OE7O2uku9I9Y0J/4YFXhTSoYxGy8A996ho3Nti2MW +Ve8cef6ac65GAe8B8YhM8cKhzaJGgSNxwtgrPL2Gmu2U9UaSPbuRzDPmc40A/7RRQAX/M6DSJF6y +HwneuMv4kCmsUq7Sdq8zXReYNeHci4efiX2+b+WPEQB+1ZG7N4+1nDdNPYfRfj5jlnw+7kkmVjOP +ZOeJEM+fiBe5fr6dSiqtb/jb90YViSddETG4uxORLRuEuyiAIlJAqRNfBZIqROq0E98z1WDhGr8v +Y9cvm9t1VxkRDmUkch6CeOZvyaDWSOyR482mobwvbt6WXWrhfzIHvek94t0I16fyZLUEdEhDi0Qb +Zfe= \ No newline at end of file diff --git a/sites/site404E.php b/sites/site404E.php new file mode 100644 index 0000000..ce59046 --- /dev/null +++ b/sites/site404E.php @@ -0,0 +1,62 @@ +<?php +if (!empty($_SESSION['site404_edit'])) +{ +?> + +<script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); +</script> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + + + + +<div class="tag100"> + <FORM ACTION="./?pg=site404inf&dev=<?php echo $_GET['dev']; ?>" METHOD="POST" id="AddNewWellParameter" class="form_valid"> + <input type="hidden" name="dic" value="<?php echo $_GET['dic']; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site803E_001." - ".$_SESSION['site404inf_array'][0]['SRP_NAME'] ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site401_003 ; ?></td> + <td CLASS=desc_value><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inPieParamDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site401_020 ; ?></td> + <td CLASS=desc_value> + <?php getSelectHours('inPieParamTimeH');?> + : + <?php getSelectMinutes('inPieParamTimeM');?> + </td> + </tr> + + + <tr> + <td class="desc"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=".$_GET['dic'],$decFieldLang); ; ?></td> + <td class="desc_value"><INPUT class="float_req" TYPE="TEXT" NAME="inPieParamValue" value="<?php echo getLastValueForEdit($_GET['dic'],$_GET['dev']); ?>"></td> + </tr> + </table> + </div> + + + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site404inf&dev=<?php echo $_GET['dev']; ?>" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subPieParamSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site404chart.php b/sites/site404chart.php new file mode 100644 index 0000000..6143937 --- /dev/null +++ b/sites/site404chart.php @@ -0,0 +1,218 @@ +<?php +if (!empty($_SESSION['site404'])) +{ +?> + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + ?> + + + + <?php + if (!$_POST['inDateFrom'] && empty($_SESSION['inDateFrom'])) $_POST['inDateFrom']=date('Y-m')."-01"; + if (!$_POST['inDateTo'] && empty($_SESSION['inDateTo'])) $_POST['inDateTo']=date('Y-m-d'); + + if (!empty($_POST['inDateFrom'])) $_SESSION['inDateFrom']=$_POST['inDateFrom']; + if (!empty($_POST['inDateTo'])) $_SESSION['inDateTo']=$_POST['inDateTo']; + + + //ładuje preloader + if (empty($_SESSION['site404chart_array']) || $_POST['sub_search']=='Pokaż') + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; + + + ?> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site404_002; ?></div> + <div class="tag_center"> + + <form method="post" action="?pg=site404chart&pgn=1&dev=<?php echo $_GET['dev'];?>"><br/> + <table> + <tr> + <td>Wyświetle pomiary za okres od:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDateFrom' value='<?php echo $_SESSION['inDateFrom'];?>' SIZE='10'></td> + <td style='width: 15px;'></td> + <td>do:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDateTo' value='<?php echo $_SESSION['inDateTo'];?>' SIZE='10'></td> + <td style='width: 20px;'></td> + <td><input type='submit' name='sub_search' value='Pokaż' class='btn btn-default btn-sm' onclick="makeRequest('?pg=site402chart');"></td> + </tr> + </table> + </form><br/> + + + + + <?php + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."site402chart_01.png"; + + if (empty($_SESSION['site404chart_array']) || $_POST['sub_search']=='Pokaż') + { + $x=null; $y=null; $res=null; + + if ($_POST['sub_search']=='Pokaż') + $wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE from (select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$_SESSION['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<='".$_SESSION['inDateTo']." 23:59:59' union select DRD_VALUE,DRD_AUDIT_DATE from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$_SESSION['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<='".$_SESSION['inDateTo']." 23:59:59') tb order by DRD_AUDIT_DATE"); + else + $wynik = mysql_query("select DRD_VALUE,DRD_AUDIT_DATE from viw_dev_resources_det where DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$_GET['dev']." and DRD_AUDIT_DATE>='".$_SESSION['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<='".$_SESSION['inDateTo']." 23:59:59' order by DRD_AUDIT_DATE"); + + + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'water_value' => $r["DRD_VALUE"], + 'water_time' => $r["TM"], + 'water_audit' => $r["DRD_AUDIT_DATE"], + 'water_x' =>'' + ); + $x[] = ''; + $y[] = -($r["DRD_VALUE"]); + } + unset($_SESSION['site404chart_array']); + unset($_SESSION['site402chart_x']); + unset($_SESSION['site402chart_y']); + + $_SESSION['site404chart_array']=$res; + $_SESSION['site402chart_x']=$x; + $_SESSION['site402chart_y']=$y; + } + + + + /* Create and populate the pData object */ + $MyData = new pData(); + + $MyData->addPoints($_SESSION['site402chart_x'],"Labels"); + $MyData->addPoints($_SESSION['site402chart_y'],"VALUE"); + + $MyData->setAxisDisplay(0,AXIS_FORMAT_CURRENCY); + $MyData->setSerieDescription("Labels","Time"); + $MyData->setAbscissa("Labels"); + $MyData->setPalette("VALUE",array("R"=>55,"G"=>91,"B"=>127)); + + /* Create the pChart object */ + //$myPicture = new pImage(700,230,$MyData); + $myPicture = new pImage(960,500,$MyData); + + + + $myPicture->drawGradientArea(0,0,960,500,DIRECTION_VERTICAL,array("StartR"=>220,"StartG"=>220,"StartB"=>220,"EndR"=>255,"EndG"=>255,"EndB"=>255,"Alpha"=>100)); + $myPicture->drawRectangle(0,0,959,499,array("R"=>200,"G"=>200,"B"=>200)); + + /* Write the picture title */ + $myPicture->setFontProperties(array("FontName"=>"./fonts/calibri.ttf","FontSize"=>11)); + $myPicture->drawText(390,40,$lab_Field_site404_002,array("FontSize"=>16,"Align"=>TEXT_ALIGN_BOTTOMLEFT)); + + /* Do some cosmetic and draw the chart */ + $myPicture->setGraphArea(60,60,930,460); + $myPicture->drawFilledRectangle(60,60,930,460,array("R"=>255,"G"=>255,"B"=>255,"Surrounding"=>-200,"Alpha"=>10)); + + $myPicture->drawScale(array("GridR"=>180,"GridG"=>180,"GridB"=>180)); + + + + /* Draw a spline chart on top */ + $myPicture->setFontProperties(array("FontName"=>"./fonts/pf_arma_five.ttf","FontSize"=>6)); + //$myPicture->drawFilledSplineChart(); + $myPicture->drawSplineChart(); + $myPicture->setShadow(FALSE); + + + + /* Write the chart legend */ + //$myPicture->drawLegend(643,210,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); + + /* Render the picture (choose the best way) */ + $myPicture->Render($fileName); + + ?> + <?php echo "<p style='text-align: center;'><img src='$fileName'></p>" ?> + + </div> + +</div> + + + <div class="tag100"> + <div class="head_tag">Lista pomiarów</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label">Data pomiaru</TD> + <TD class="label"><?php echo $lab_Field_site404_002;?></TD> + </TR> + + <?php + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site404chart_array'])) $stop=count($_SESSION['site404chart_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR> + <TD class='field_right'>".($i+1).".</TD> + <TD class='field_center'>".$_SESSION['site404chart_array'][$i]['water_audit']."</TD> + <TD class='field_center'>".$_SESSION['site404chart_array'][$i]['water_value']."</TD> + </TR> + "; + } + ?> + + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site404chart_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site404chart_array'])>20) + echo pagination_grid('?pg=site404chart&dev='.$_GET['dev'], $_GET['pgn'], count($_SESSION['site404chart_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site404chart_xls.php" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site404chart_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + </div> + + + + + <?php + echo" + <div class=tag_buttons> + <a href='?pg=site404inf&dev=".$_GET['dev']."'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Back'></A> + </div> + "; + ?> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site404inf.php b/sites/site404inf.php new file mode 100644 index 0000000..47e89ec --- /dev/null +++ b/sites/site404inf.php @@ -0,0 +1,169 @@ +<?php +if (!empty($_SESSION['site404'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + // altualizacja poziomu wody + if ($_GET['dev']>0 && $_POST['subPieParamSave']==$lab_ButtonName_Save) + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_EXPORT_SEGAP='1',DRD_DRS_ID=".$_GET['dev'].",DRD_RESOURCES_DETAIL=".$_POST['dic'].",DRD_VALUE='".getFloatValue($_POST['inPieParamValue'])."',DRD_AUDIT_USR='".$_SESSION['user']."',DRD_AUDIT_DATE='".$_POST['inPieParamDate']." ".$_POST['inPieParamTimeH'].":".$_POST['inPieParamTimeM'].":00'"); + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + } + + + + + + ?> + + + + + <?php +//warunek na przekazywanie nazw obiektów (G54) + if (empty($_GET['dev']) && !empty($_GET['obj'])) + { + $_GET['dev'] = sqlStringValue("select DRS_ID from seg_dev_resources,seg_reservoirs_piezometers where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601 and SRP_NAME='".$_GET['obj']."'", "DRS_ID"); + } + + + if (!empty($_POST['dev'])) $_GET['dev']=$_POST['dev']; + + + if ($_POST['subWell4RePieUpdate']==$lab_ButtonName_Update) + { + mysql_query("delete from seg_res_piezo_wells_rel where RPW_RP_DRS_ID=".$_POST['dev']); + + $wynik = mysql_query("select DRS_ID from seg_dev_resources where DRS_DEV_TYPE=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='WELL')"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $drsID = $r["DRS_ID"]; + if (!empty($_POST['well4RePie'][$drsID])) + mysql_query("INSERT INTO seg_res_piezo_wells_rel SET RPW_RP_DRS_ID=".$_POST['dev'].",RPW_WELL_DRS_ID=$drsID,RPW_STATUS='1',RPW_AUDIT_CU='".$_SESSION['user']."',RPW_AUDIT_CD=now()"); + } + } + + ?> + + + +<?php + delSearchSessionData(); + + $_SESSION['site404inf_array'] = sqlGetResAsArray("select DRS_ID,SRP_ID,SRP_BARIERA,SRP_NAME,SRP_SYS_TYPE,SRP_STAT_DESC,getLastValue(240,DRS_ID) SONDA,getLastValue(999,DRS_ID) REPAIR_LEVEL from seg_dev_resources,seg_reservoirs_piezometers where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=SRP_TYPE_DIC_ID and DRS_DEV_TYPE=601 and DRS_ID=".$_GET['dev']); + $_SESSION['site309inf_filters'] = sqlGetResAsArray("select CLF_FROM,CLF_TO from seg_object_column_filters where CLF_DRS_ID=".$_GET['dev']); + + $decFieldLang = setDictionaryFieldLanguage($_SESSION['lang']); + + unset($piezDiameter); + $piezDiameter = getDiameterDepthAsArray($_GET['dev']); + +?> + + +<div class="tag50_left"> + <div class="head_tag"><?php echo $lab_Tag_site309_003 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo $lab_Tag_site302_004; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site404inf_array'][0]['SRP_NAME']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DEPTH'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getGlebokoscAct($_GET['dev']); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='DEV_RESOURCES_DETAIL' and DIC_NAME='DIAMETER'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo $piezDiameter['diameter']; ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo $lab_Field_site309_001; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site404inf_array'][0]['SONDA']; ?></TD> + </TR> + + + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='REPAIR_LEVEL'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getStringFloatRound($_SESSION['site404inf_array'][0]['REPAIR_LEVEL']); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_UP'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getFloatValue($_SESSION['site309inf_filters'][0]["CLF_FROM"])-getSciecie($_GET['dev']); ?></TD> + </TR> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='PIEZOMETER_WATER_LEVEL' and DIC_NAME='FILTER_DOWN'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><?php echo getFloatValue($_SESSION['site309inf_filters'][0]["CLF_TO"])-getSciecie($_GET['dev']); ?></TD> + </TR> + + + + </table> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site402_001 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param"><?php echo sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_TYPE='RESERVOIR_PIEZOMETER_PARAMETERS' and DIC_NAME='WATER_LEVEL'", $decFieldLang); ?></TD> + <TD CLASS="desc_value"><a style='text-decoration: none;' href="./?pg=site404pdet&dev=<?php echo $_GET['dev']; ?>" ><?php echo getLastValueFromDevResourceDetail('WELL_PARAMETERS','HSTM',$_GET['dev']); ?></a></TD> + <?php if (!empty($_SESSION['site404_edit'])): ?> + <td CLASS='desc_value' width='5%'> + <a href="./?pg=site404E&dev=<?php echo $_GET['dev']; ?>&dic=210"><img style='cursor: pointer;' src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' border="0"></a> + <?php endif; ?> + + </TR> + </table> + </div> + + + <div class=tag_ChemicalButtons> + <a href='./?pg=site404pdet&dev=<?php echo $_GET['dev'];?>&direct=404'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Historia pomiarów'></A> + &nbsp;&nbsp;&nbsp; + <a href='./?pg=site310&dev=<?php echo $_GET['dev'];?>&direct=404'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='Karta otworu'></A> + <br/><br/> + <a href='./?pg=site309inf&dev=<?php echo $_GET['dev'];?>'><INPUT class='well_extra_button' TYPE='BUTTON' VALUE='<?php echo $lab_SubMenu_309;?>'></A> + &nbsp;&nbsp;&nbsp; + <img style="width: 42%; height: 0px;"> + </div> + + + +</div> + + <?php + $fileName1="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."_chart_404inf_01.png"; + generatePiezometer($_GET['dev'], $fileName1); + + ?> + + +<div class="tag50_right"> + <div class="head_tag"><?php echo $_SESSION['site404inf_array'][0]['SRP_NAME'] ;?></div> + <div class="tag_center"> + <a href="?pg=site404chart&dev=<?php echo $_GET['dev']; ?>" ><img SRC="<?php echo $fileName1; ?>" ></a> + </div> + +</div> + + + + <?php + if (!empty($_GET['dev']) && !empty($_GET['dic'])) + getHistoryData($_GET['dev'], $_GET['dic']); + ?> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site404pdet.php b/sites/site404pdet.php new file mode 100644 index 0000000..a6f455a --- /dev/null +++ b/sites/site404pdet.php @@ -0,0 +1,262 @@ +<?php +if (!empty($_SESSION['site404'])) +{ +?> + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + <?php + // usuwanie pomiaru + if (!empty($_GET['param'])) + { + unset($paramArray); + $paramArray = explode(',', $_GET['param']); + $_GET['pgn'] = $paramArray[0]; + if ($paramArray[2]>0 && $paramArray[1]=='del') + { + mysql_query("delete from seg_dev_resources_det where DRD_ID=".$paramArray[2]); + mysql_query("delete from seg_dev_resources_det_his where DRD_ID=".$paramArray[2]); + + $_POST['sub_search']='Pokaż'; + } + } + + + //paginacja + if (!$_GET['pgn']) + { + $_GET['pgn']=1; + unset($_SESSION['site404pdet_array']); + unset($_SESSION['site404chart_x']); + unset($_SESSION['site404chart_y']); + unset($_SESSION['inDateFrom']); + unset($_SESSION['inDateTo']); + } + ?> + + + + <?php + + if (!$_POST['inDateFrom'] && empty($_SESSION['inDateFrom'])) $_POST['inDateFrom']=date('Y-m-d'); + if (!$_POST['inDateTo'] && empty($_SESSION['inDateTo'])) $_POST['inDateTo']=date('Y-m-d'); + + if (!empty($_POST['inDateFrom'])) $_SESSION['inDateFrom']=$_POST['inDateFrom']; + if (!empty($_POST['inDateTo'])) $_SESSION['inDateTo']=$_POST['inDateTo']; + + + //ładuje preloader + if (empty($_SESSION['site404pdet_array']) || $_POST['sub_search']=='Pokaż') + echo"<div id='loader-wrapper'><div id='loader'></div></div>"; + + ?> + + + +<div class="tag100"> + <div class="head_tag">Zwierciadło statyczne H<sub>ST</sub> [m]</div> + <div class="tag_center"> + + <form method="post" action="./?pg=site404pdet&dev=<?php echo $_GET['dev'];?>"><br/> + <input type="hidden" name="inShowHisParam" value="<?php echo $_POST['inShowHisParam'];?>"> + <table> + <tr> + <td>Wyświetle pomiary za okres od:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDateFrom' value='<?php echo $_SESSION['inDateFrom'];?>' SIZE='10'></td> + <td style='width: 15px;'></td> + <td>do:</td> + <td style='width: 5px;'></td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDateTo' value='<?php echo $_SESSION['inDateTo'];?>' SIZE='10'></td> + <td style='width: 20px;'></td> + <td><input type='submit' name='sub_search' value='Pokaż' class='btn btn-default btn-sm' onclick="makeRequest('?pg=site402chart');"></td> + </tr> + </table> + </form><br/> + + + <?php + // informacja o dacie dłuższej niż 6 miesięcy + $roznica = (strtotime(date("Y-m-d")) - strtotime($_SESSION['inDateFrom'])) / (60*60*24); + if ($roznica>180) + echo('<script>sweetAlert("Uwaga!", "Z uwagi na wydajność systemu prezentowane są dane z ostatnich 6 miesięcy. Jeśli chcesz zobaczyć starsze dane skorzystaj z modułu raportowego.", "warning");</script>'); + ?> + + + + <?php + include("./pChart/pData.class.php"); + include("./pChart/pDraw.class.php"); + include("./pChart/pImage.class.php"); + include("./pChart/pScatter.class.php"); + + $fileName="./charts/".$_SESSION['user']."_".date("Ymd")."_".date("His")."site404pdet.png"; + + + //if (empty($_SESSION['site404pdet_array']) || $_POST['sub_search']=='Pokaż') + if ($_POST['sub_search']=='Pokaż') + { + $x=null; $y=null; $res=null; + $wynik = mysql_query("select DRD_ID,DRD_VALUE,DRD_AUDIT_DATE,TM from (SELECT DRD_ID,DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from seg_dev_resources_det where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=210 and DRD_AUDIT_DATE>'".$_SESSION['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_SESSION['inDateTo']." 23:59:59' union SELECT DRD_ID,DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from seg_dev_resources_det_his where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=210 and DRD_AUDIT_DATE>'".$_SESSION['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_SESSION['inDateTo']." 23:59:59') tb order by DRD_AUDIT_DATE"); + //$wynik = mysql_query("select ".$srchOUTVAL." OUTVAL,RHD_DATE,RHD_AUDIT_CD from rep_his_data_everyday where RHD_DRS_ID=".$_GET['dev']." and RHD_DATE>='".$_SESSION['inDateFrom']." 00:00:00' and RHD_DATE<='".$_SESSION['inDateTo']." 23:59:59' order by RHD_DATE"); + //$wynik = mysql_query("SELECT DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from viw_dev_resources_det where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=".$_SESSION['site404pdet_dic'][0]['DIC_ID']." and DRD_AUDIT_DATE>'".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_POST['inDateTo']." 23:59:59' order by DRD_AUDIT_DATE"); + //$wynik = mysql_query("SELECT DRD_VALUE,DRD_AUDIT_DATE,SUBSTRING(DRD_AUDIT_DATE,12,5) TM from seg_dev_resources_det where DRD_DRS_ID=".$_GET['dev']." and DRD_RESOURCES_DETAIL=".$_SESSION['site404pdet_dic'][0]['DIC_ID']." and DRD_AUDIT_DATE>'".$_POST['inDateFrom']." 00:00:00' and DRD_AUDIT_DATE<'".$_POST['inDateTo']." 23:59:59' order by DRD_AUDIT_DATE"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'water_id' => $r["DRD_ID"], + 'water_value' => $r["DRD_VALUE"], + 'water_time' => $r["TM"], + 'water_audit' => $r["DRD_AUDIT_DATE"], + 'water_x' =>'' + ); + $x[] = ''; + $y[] = $r["DRD_VALUE"]; + } + unset($_SESSION['site404pdet_array']); + unset($_SESSION['site404chart_x']); + unset($_SESSION['site404chart_y']); + + $_SESSION['site404pdet_array']=$res; + $_SESSION['site404chart_x']=$x; + $_SESSION['site404chart_y']=$y; + } + + + + /* Create and populate the pData object */ + $MyData = new pData(); + + $MyData->addPoints($_SESSION['site404chart_x'],"Labels"); + $MyData->addPoints($_SESSION['site404chart_y'],"VALUE"); + + $MyData->setAxisDisplay(0,AXIS_FORMAT_CURRENCY); + $MyData->setSerieDescription("Labels","Time"); + $MyData->setAbscissa("Labels"); + $MyData->setPalette("VALUE",array("R"=>55,"G"=>91,"B"=>127)); + + /* Create the pChart object */ + //$myPicture = new pImage(700,230,$MyData); + $myPicture = new pImage(960,500,$MyData); + + + + + + $myPicture->drawGradientArea(0,0,960,500,DIRECTION_VERTICAL,array("StartR"=>220,"StartG"=>220,"StartB"=>220,"EndR"=>255,"EndG"=>255,"EndB"=>255,"Alpha"=>100)); + $myPicture->drawRectangle(0,0,959,499,array("R"=>200,"G"=>200,"B"=>200)); + + /* Write the picture title */ + $myPicture->setFontProperties(array("FontName"=>"./fonts/calibri.ttf","FontSize"=>11)); + $myPicture->drawText(390,40,str_replace(array('<sub>','</sub>','<sup>','</sup>'), array('','','',''), 'Zwierciadło statyczne Hst [m]'),array("FontSize"=>16,"Align"=>TEXT_ALIGN_BOTTOMLEFT)); + + /* Do some cosmetic and draw the chart */ + $myPicture->setGraphArea(60,60,930,460); + $myPicture->drawFilledRectangle(60,60,930,460,array("R"=>255,"G"=>255,"B"=>255,"Surrounding"=>-200,"Alpha"=>10)); + + $myPicture->drawScale(array("GridR"=>180,"GridG"=>180,"GridB"=>180)); + + + + /* Draw a spline chart on top */ + $myPicture->setFontProperties(array("FontName"=>"./fonts/pf_arma_five.ttf","FontSize"=>6)); + //$myPicture->drawFilledSplineChart(); + $myPicture->drawSplineChart(); + + $myPicture->setShadow(FALSE); + + + + /* Write the chart legend */ + //$myPicture->drawLegend(643,210,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL)); + + /* Render the picture (choose the best way) */ + $myPicture->Render($fileName); + + ?> + <?php echo "<p style='text-align: center;'><img src='$fileName'></p>" ?> + + </div> + +</div> + + + <div class="tag100"> + <div class="head_tag">Lista pomiarów</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label">Data pomiaru</TD> + <TD class="label">Zwierciadło statyczne H<sub>ST</sub> [m]</TD> + </TR> + + <?php + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site404pdet_array'])) $stop=count($_SESSION['site404pdet_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR> + <TD class='field_right'>".($i+1).".</TD> + <TD class='field_center'>".$_SESSION['site404pdet_array'][$i]['water_audit']."</TD> + <TD class='field_center'>".$_SESSION['site404pdet_array'][$i]['water_value']."</TD>"; + + + if (!empty($_SESSION['site404_edit'])) + { + echo"<td CLASS='field_center' width='5%'> + <a href='./?pg=site404pdet&dev=".$_GET['dev']."&param=1,del,".$_SESSION['site404pdet_array'][$i]['water_id']."'><img src='./images/remove_ico.png' title='$lab_ButtonName_Delete' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć rekord z historii pomiarów?');".chr(34)."></a> + </td>"; + } + + + echo"</TR> + "; + } + ?> + + </table> + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site404pdet_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site404pdet_array'])>20) + echo pagination_grid('./?pg=site404pdet&dev='.$_GET['dev'], $_GET['pgn'], count($_SESSION['site404pdet_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site401pdet_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site401pdet_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + </div> + + + + + <?php + echo" + <div class=tag_buttons> + <a href='./?pg=site404inf&dev=".$_GET['dev']."'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Back'></A> + </div> + "; + ?> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site405.php b/sites/site405.php new file mode 100644 index 0000000..254a833 --- /dev/null +++ b/sites/site405.php @@ -0,0 +1,116 @@ +<?php +if (!empty($_SESSION['site405'])) +{ +?> + + <?php + // dodawanie nowego ujęcia + if ($_POST['subWISave']==$lab_ButtonName_Save && strlen($_POST['inName'])>0) + { + //mysql_query("INSERT INTO seg_water_intakes SET SWI_NAME='".$_POST['inName']."',SWI_DESC='".$_POST['inDesc']."',SWI_ADDRESS_01='".$_POST['inAddr1']."',SWI_ADDRESS_02='".$_POST['inAddr2']."',SWI_PHONE='".$_POST['inPhone']."',SWI_MAIL='".$_POST['inMail']."',SWI_LATITUDE='".str_replace(",",".",$_POST['inWellLat'])."',SWI_LONGITUDE='".str_replace(",",".",$_POST['inWellLong'])."',SWI_AUDIT_CU='".$_SESSION['user']."',SWI_AUDIT_CD=now()"); + mysql_query("INSERT INTO seg_water_intakes SET SWI_NAME='".$_POST['inName']."',SWI_DESC='".$_POST['inDesc']."',SWI_TYPE='".$_POST['inType']."',SWI_LATITUDE='".str_replace(",",".",$_POST['inWellLat'])."',SWI_LONGITUDE='".str_replace(",",".",$_POST['inWellLong'])."',SWI_AUDIT_CU='".$_SESSION['user']."',SWI_AUDIT_CD=now()"); + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + ?> + + + + <?php + //paginacja + if (!$_GET['pgn']) {$_GET['pgn']=1; delSearchSessionData(); } + ?> + + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site405_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site405_001 ;?></TD> + <TD class="label"><?php echo $lab_Tag_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site206_003 ;?></TD> + </TR> + + <?php + if (empty($_SESSION['site405_array'])) + { + $res=null; + $wynik = mysql_query("select SWI_ID,SWI_NAME,DIC_POL_LANG,SWI_DESC,SWI_LATITUDE,SWI_LONGITUDE from seg_water_intakes left join sys_dictionaries on SWI_TYPE=DIC_ID order by SWI_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'wiID' => $r["SWI_ID"], + 'wiName' => $r["SWI_NAME"], + 'wiTyp' => $r["DIC_POL_LANG"], + 'wiDesc' => $r["SWI_DESC"], + 'wiLat' => $r["SWI_LATITUDE"], + 'wiLong' => $r["SWI_LONGITUDE"], + ); + } + unset($_SESSION['site405_array']); + $_SESSION['site405_array']=$res; + } + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site405_array'])) $stop=count($_SESSION['site405_array']); + + for($i=$start;$i<$stop;$i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site405inf&wi=".$_SESSION['site405_array'][$i]['wiID']."'".chr(34)."> + <TD class='field_left'>".($i+1).".</TD> + <TD class='field_left'>".$_SESSION['site405_array'][$i]['wiName']."</TD> + <TD class='field_left'>".$_SESSION['site405_array'][$i]['wiTyp']."</TD> + <TD class='field_center'>".$_SESSION['site405_array'][$i]['wiDesc']."</TD> + </TR> + "; + } + ?> + </table> + + + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site405_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site405_array'])>20) + echo pagination_grid('?pg=site405', $_GET['pgn'], count($_SESSION['site405_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + </td> + </tr> + </table> + + + + + </div> + + <?php + if (!empty($_SESSION['site405_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site405A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + + + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site405A.php b/sites/site405A.php new file mode 100644 index 0000000..5016cb6 --- /dev/null +++ b/sites/site405A.php @@ -0,0 +1,57 @@ +<?php +if (!empty($_SESSION['site405_edit'])) +{ +?> + + + +<FORM ACTION="?pg=site405" METHOD="POST"> +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site405_002 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site405_001; ?></TD> + <TD CLASS="desc_value"><input type="text" class="text50_req" name="inName" required></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Tag_site302_003; ?></TD> + <TD CLASS=desc_value><?php echo selectDescriptionFromDictionaryByID('inType', 'WATER_INTAKES_TYPE'); ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site301_008; ?></TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inWellLat' required> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site301_009; ?></TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inWellLong' required> </TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inDesc></textarea></TD> + </TR> + + + </table> + </div> + +</div> + + + <div class="tag100"> + <div class="tag_buttons"> + <input class="btn btn-info btn-sm" type="button" onclick="location.href = '?pg=site405'" VALUE="<?php echo $lab_ButtonName_Back; ?>"> + + <?php + if (!empty($_SESSION['site405_edit'])) + echo" + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subWISave' VALUE='$lab_ButtonName_Save'> + "; + ?> + </div> + </div> +</FORM> +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site405E.php b/sites/site405E.php new file mode 100644 index 0000000..8cb2308 --- /dev/null +++ b/sites/site405E.php @@ -0,0 +1,57 @@ +<?php +if (!empty($_SESSION['site405_edit'])) +{ +?> + + +<FORM ACTION="?pg=site405inf&wi=<?php echo $_SESSION['site405inf_array'][0]['SWI_ID']; ?>" METHOD="POST"> +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site306_004 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site405_001; ?></TD> + <TD CLASS="desc_value"><input type="text" class="text50_req" name="inName" value="<?php echo $_SESSION['site405inf_array'][0]['SWI_NAME']; ?>" required></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Tag_site302_003; ?></TD> + <TD CLASS=desc_value><?php echo selectDescriptionFromDictionaryByID('inType', 'WATER_INTAKES_TYPE', $_SESSION['site405inf_array'][0]['DIC_ID']); ?></TD> + </TR> + + <TR> + <TD class=desc><?php echo $lab_Field_site301_008; ?></TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inWellLat' value="<?php echo $_SESSION['site405inf_array'][0]['SWI_LATITUDE']; ?>" required> </TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site301_009; ?></TD> + <TD CLASS=desc_value> <INPUT class='float' TYPE='TEXT' NAME='inWellLong' value="<?php echo $_SESSION['site405inf_array'][0]['SWI_LONGITUDE']; ?>" required> </TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS=desc_value><textarea NAME=inDesc><?php echo $_SESSION['site405inf_array'][0]['SWI_DESC']; ?></textarea></TD> + </TR> + + + </table> + </div> + +</div> + + + <div class="tag100"> + <div class="tag_buttons"> + <input class="btn btn-info btn-sm" type="button" onclick="location.href = '?pg=site405inf&wi=<?php echo $_SESSION['site405inf_array'][0]['SWI_ID']; ?>'" VALUE="<?php echo $lab_ButtonName_Back; ?>"> + + <?php + if (!empty($_SESSION['site405_edit'])) + echo" + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subWIUpdate' VALUE='$lab_ButtonName_Update'> + "; + ?> + </div> + </div> +</FORM> +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site405inf.php b/sites/site405inf.php new file mode 100644 index 0000000..9b66d2d --- /dev/null +++ b/sites/site405inf.php @@ -0,0 +1,96 @@ +<?php +if (!empty($_SESSION['site405'])) +{ +?> + + <?php + // dodaje powiązanie - zbiorniki + if (!empty($_GET['acres']) && $_GET['acres']>0 && $_SESSION['site405inf_array'][0]['SWI_ID']>0) + { + $_GET['wi'] = $_SESSION['site405inf_array'][0]['SWI_ID']; + mysql_query("UPDATE seg_reservoirs_piezometers SET SRP_SWI_ID=".$_SESSION['site405inf_array'][0]['SWI_ID']." WHERE SRP_ID=".$_GET['acres']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_002</div>"; + delSearchSessionData(); + } + + // dodaje powiązanie - studnia + if (!empty($_GET['acwell']) && $_GET['acwell']>0 && $_SESSION['site405inf_array'][0]['SWI_ID']>0) + { + $_GET['wi'] = $_SESSION['site405inf_array'][0]['SWI_ID']; + mysql_query("UPDATE seg_wells SET WLL_SWI_ID=".$_SESSION['site405inf_array'][0]['SWI_ID']." WHERE WLL_ID=".$_GET['acwell']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_002</div>"; + delSearchSessionData(); + } + + + + // aktualizuje dane + if($_POST['subWIUpdate']==$lab_ButtonName_Update && !empty($_POST['inName'])) + { + //mysql_query("update seg_water_intakes SET SWI_NAME='".$_POST['inName']."',SWI_DESC='".$_POST['inDesc']."',SWI_ADDRESS_01='".$_POST['inAddr1']."',SWI_ADDRESS_02='".$_POST['inAddr2']."',SWI_PHONE='".$_POST['inPhone']."',SWI_MAIL='".$_POST['inMail']."',SWI_LATITUDE='".str_replace(",",".",$_POST['inWellLat'])."',SWI_LONGITUDE='".str_replace(",",".",$_POST['inWellLong'])."',SWI_AUDIT_CU='".$_SESSION['user']."',SWI_AUDIT_CD=now() where SWI_ID=".$_GET['wi']); + mysql_query("update seg_water_intakes SET SWI_NAME='".$_POST['inName']."',SWI_DESC='".$_POST['inDesc']."',SWI_TYPE='".$_POST['inType']."',SWI_LATITUDE='".str_replace(",",".",$_POST['inWellLat'])."',SWI_LONGITUDE='".str_replace(",",".",$_POST['inWellLong'])."',SWI_AUDIT_CU='".$_SESSION['user']."',SWI_AUDIT_CD=now() where SWI_ID=".$_GET['wi']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + delSearchSessionData(); + } + ?> + + + + <?php + if (empty($_SESSION['site405inf_array'])) + { + unset($_SESSION['site405inf_array']); + $_SESSION['site405inf_array'] = sqlGetResAsArray("select SWI_ID,SWI_NAME,SWI_DESC,SWI_LATITUDE,SWI_LONGITUDE,DIC_ID from seg_water_intakes left join sys_dictionaries on SWI_TYPE=DIC_ID where SWI_ID=".$_GET['wi']); + } + + ?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site405_003." ".$_SESSION['site405inf_array'][0]['SWI_NAME'] ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site405_001; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site405inf_array'][0]['SWI_NAME']; ?></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Tag_site302_003; ?></TD> + <TD CLASS="desc_value"><?php echo setDicName($_SESSION['site405inf_array'][0]['DIC_ID']); ?></TD> + </TR> + + <TR> + <TD class=desc><?php echo $lab_Field_site301_008; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site405inf_array'][0]['SWI_LATITUDE']; ?></TD> + </TR> + <TR> + <TD class=desc><?php echo $lab_Field_site301_009; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site405inf_array'][0]['SWI_LONGITUDE']; ?></TD> + </TR> + <TR> + <TD class=desc> <?php echo $lab_Field_site206_003; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site405inf_array'][0]['SWI_DESC']; ?></TD> + </TR> + + </table> + </div> + + + <div class="tag_buttons"> + <input class="btn btn-info btn-sm" type="button" onclick="location.href = '?pg=site405'" VALUE="<?php echo $lab_ButtonName_Back; ?>"> + + <?php if (!empty($_SESSION['site405_edit'])): ?> + <input class="btn btn-success btn-sm" type="button" onclick="location.href = '?pg=site405E&wi=<?php echo $_SESSION['site405inf_array'][0]['SWI_ID'] ;?>'" VALUE="<?php echo $lab_ButtonName_Modify; ?>"> + <?php endif; ?> + + </div> + <br/><br/> + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site406.php b/sites/site406.php new file mode 100644 index 0000000..329d3f4 --- /dev/null +++ b/sites/site406.php @@ -0,0 +1,157 @@ +<?php +if (!empty($_SESSION['site406'])) +{ +?> + + + <?php + + unset($_SESSION['devID']); + unset($_SESSION['wellID']); + unset($_SESSION['DRSpupID']); + unset($_SESSION['DRSengID']); + unset($_SESSION['pupID']); + unset($_SESSION['pupNAME']); + unset($_SESSION['pupSN']); + + unset($_SESSION['engID']); + unset($_SESSION['engNAME']); + unset($_SESSION['engSN']); + unset($_SESSION['engVol']); + unset($_SESSION['wellNAME']); + unset($_SESSION['rurType']); + + unset($_SESSION['inNewHD']); + unset($_SESSION['inNewDR']); + unset($_SESSION['inNewLP']); + unset($_SESSION['inNewV']); + + if (!$_POST['sr_status']) $_POST['sr_status']=3; + ?> + +<form action="./?pg=site406" method="post"> +<div class="tag100"> + <div class="head_tag">Kreator umożliwia wspomaganie operatora w doborze pompy do układu w studni.</div> + <div class="tag"> + <div class="steps"> + <img src="./images/ps_step_1.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site406"> + </map> + </div> + <table> + <tr> + <td style="width: 10px;"></td> + <td>Studnia:</td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_well" value="<?php echo $_POST['sr_well'];?>"></td> + <td style="width: 10px;"></td> + <td>status:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_ID in (3,4)"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($_POST['sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_POST['sr_status']==100) + echo"<option value='100' selected>Wszystkie</option>"; + else + echo"<option value='100'>Wszystkie</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td style="width: 10px;"></td> + <td colspan="3"> + <?php + if (!empty($_POST['sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + Pokaż wszystkie</td> + </tr> + </table> + <br/> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site301_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_014 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site301_003 ;?></TD> + + <td class="label">Q<sub>n</sub> [m<sup>3</sup>/min]</td> + + <TD class="label"><?php echo $lab_Field_site301_004 ;?></TD> + <td class="label"><?php echo $lab_Field_site301_005 ;?></td> + <td class="label"><?php echo $lab_Field_site301_007 ;?></td> + </TR> + + <?php + $query="select seg_dev_resources.DRS_ID,WLL_ID,WLL_NAME,SOD_UJ,WLE_PUMP_NAME,WLE_PUMP_NO,WLE_PUMP_Q_N,WLE_ENG_NAME,WLE_ENG_NO,DRS_STATUS_DIC_ID from rep_object_departments left join seg_dev_resources on seg_dev_resources.DRS_ID=rep_object_departments.DRS_ID where SOD_PLC='".$_SESSION['syndis_eq_stock']."' and WLL_NAME like '%".$_POST['sr_well']."%'"; + if($_POST['sr_status']!=100) $query.=" and DRS_STATUS_DIC_ID=".$_POST['sr_status']; + $query .= " order by WLL_NAME"; + if (empty($_POST['sr_all'])) $query .= " limit 10"; + + + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["RWL_WLL_ID"]; + $sql_2 = $r["WLL_NAME"]; + $sql_3 = $r["RWL_PUP_DRS_ID"]; + $sql_4 = $r["RWL_ENG_DRS_ID"]; + $sql_5 = $r["DRS_AVAILABLE_DATE"]; + $sql_6 = $r["DRS_STATUS_DIC_ID"];$sql_6=setDicName($sql_6); + $sql_DRSid = $r["DRS_ID"]; + + + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site406_2&dev=".$r["DRS_ID"]."'".chr(34)."> + <TD class='field_left'>".$r["WLL_NAME"]."</TD> + <TD class='field_center'>".$r["SOD_UJ"]."</TD> + <TD class='field_center'>".$r["WLE_PUMP_NAME"]."</TD> + <TD class='field_center'>".$r["WLE_PUMP_NO"]."</TD> + + <TD class='field_center'>".round($r["WLE_PUMP_Q_N"]/60,2)."</TD> + + <TD class='field_center'>".$r["WLE_ENG_NAME"]."</TD> + <TD class='field_center'>".$r["WLE_ENG_NO"]."</TD> + + <TD class='field_center'>".setDicName($r["DRS_STATUS_DIC_ID"])."</TD> + </TR> + "; + } + ?> + </table> + + + + + + + + </div> + +</div> +</form> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site406_2.php b/sites/site406_2.php new file mode 100644 index 0000000..016daab --- /dev/null +++ b/sites/site406_2.php @@ -0,0 +1,142 @@ +<?php +if (!empty($_SESSION['site406'])) +{ +?> + +<?php + if (empty($_GET['dev'])) $_GET['dev']=$_SESSION['devID']; + + + $wynik = mysql_query("select DRS_ID,RWL_WLL_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$_GET['dev']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['devID'] = $r["DRS_ID"]; + $_SESSION['wellID'] = $r["RWL_WLL_ID"]; + $_SESSION['DRSpupID'] = $r["RWL_PUP_DRS_ID"]; + $_SESSION['DRSengID'] = $r["RWL_ENG_DRS_ID"]; + } + + $wynik = mysql_query("select DRS_DEV_ID,DRS_SN_NUMBER,PUP_NAME from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID where DRS_ID=".$_SESSION['DRSpupID']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['pupID'] = $r["DRS_DEV_ID"]; + $_SESSION['pupNAME'] = $r["PUP_NAME"]; + $_SESSION['pupSN'] = $r["DRS_SN_NUMBER"]; + } + $wynik = mysql_query("select DRS_DEV_ID,DRS_SN_NUMBER,ENG_NAME,ENG_VOLTAGE from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID where DRS_ID=".$_SESSION['DRSengID']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $_SESSION['engID'] = $r["DRS_DEV_ID"]; + $_SESSION['engNAME'] = $r["ENG_NAME"]; + $_SESSION['engSN'] = $r["DRS_SN_NUMBER"]; + $_SESSION['engVol'] = $r["ENG_VOLTAGE"]; + } + + $_SESSION['wellNAME'] = sqlValue("select WLL_NAME from seg_wells where WLL_ID=".$_SESSION['wellID']); + + + + +?> + +<form action="./?pg=site406_3" method="post"> +<div class="tag100"> + <div class="head_tag">Kreator umożliwia wspomaganie operatora w doborze pompy do układu w studni.</div> + <div class="tag"> + <div class="steps"> + <img src="./images/ps_step_2.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site406"> + </map> + </div> + + <TABLE class="desc_val"> + <TR> + <TD class="desc">Studnia</TD> + <TD CLASS="desc_value"><?php echo$_SESSION['wellNAME']; ?></TD> + </TR> + <TR> + <TD class="desc">Typ pompy</TD> + <TD CLASS="desc_value"><?php echo $_SESSION['pupNAME']; ?></TD> + </TR> + <TR> + <TD class="desc">Numer pompy</TD> + <TD CLASS="desc_value"><?php echo $_SESSION['pupSN']; ?></TD> + </TR> + <TR> + <TD class="desc">Typ silnika</TD> + <TD CLASS="desc_value"><?php echo $_SESSION['engNAME']; ?></TD> + </TR> + <TR> + <TD class="desc">Numer silnika</TD> + <TD CLASS="desc_value"><?php echo $_SESSION['engSN']; ?></TD> + </TR> + + <TR> + <TD class="desc">Data zabudowy</TD> + <TD CLASS="desc_value"><?php echo sqlStringValue("select DRS_AVAILABLE_DATE from seg_dev_resources where DRS_ID=".$_SESSION['devID'], "DRS_AVAILABLE_DATE"); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='LS'","DIC_POL_LANG") ; ?></TD> + <TD CLASS="desc_value"><?php echo round(getLastValueFromDevResourceDetail("WELL_TECHNICAL_PARAMETERS","LS",$_SESSION['devID']),2) ; ?></TD> + + + </TR> + <TR> + <TD class="desc"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_TYPE='WELL_TECHNICAL_PARAMETERS' and DIC_NAME='DST'","DIC_POL_LANG") ; ?></TD> + <TD CLASS="desc_value"><?php echo round(getLastValueFromDevResourceDetail("WELL_TECHNICAL_PARAMETERS","DST",$_SESSION['devID']),2) ; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='DR'","DIC_POL_LANG") ; ?></TD> + <TD CLASS="desc_value"><?php echo round(getLastValueFromDevResourceDetail("WELL_PARAMETERS","DR",$_SESSION['devID']),2) ; ?></TD> + </TR> + <TR> + <TD class="desc">Rodzaj rurociągu</TD> + <TD CLASS="desc_value"><?php selectFromDictionary('inRurType','PIPELINE_TYPE',727); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='P1M'","DIC_POL_LANG") ; ?></TD> + <TD CLASS="desc_value"><?php echo round(getLastValueFromDevResourceDetail("WELL_PARAMETERS","P1M",$_SESSION['devID']),2); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='P2M'","DIC_POL_LANG") ; ?></TD> + <TD CLASS="desc_value"><?php echo round(getLastValueFromDevResourceDetail("WELL_PARAMETERS","P2M",$_SESSION['devID']),2); ?></TD> + </TR> + + + <TR> + <TD class="desc"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='HDM'","DIC_POL_LANG") ; ?></TD> + <TD CLASS="desc_value"><?php echo round(getLastValueFromDevResourceDetail("WELL_PARAMETERS","HDM",$_SESSION['devID']),2); ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_TYPE='WELL_PARAMETERS' and DIC_NAME='HSTM'","DIC_POL_LANG") ; ?></TD> + <TD CLASS="desc_value"><?php echo round(getLastValueFromDevResourceDetail("WELL_PARAMETERS","HSTM",$_SESSION['devID']),2); ?></TD> + </TR> + + + </TABLE> + + + + + + </div> + + <?php + if (!empty($_SESSION['site406'])) + echo" + <div class=tag_buttons> + <INPUT class='btn btn-success btn-sm' TYPE='submit' name='subStep2' VALUE='$lab_ButtonName_Next'> + </div> + "; + ?> + +</div> +</form> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site406_3.php b/sites/site406_3.php new file mode 100644 index 0000000..e9b10fd --- /dev/null +++ b/sites/site406_3.php @@ -0,0 +1,66 @@ +<?php +if (!empty($_SESSION['site406'])) +{ +?> + +<?php + if(!empty($_POST['subStep2'])) + { + if ($_POST['inRurType'] == 727) $_SESSION['rurType']=0.032; + else if ($_POST['inRurType'] == 728) $_SESSION['rurType']=0.002; + } +?> + +<form action="./?pg=site406_4" method="post"> +<div class="tag100"> + <div class="head_tag">Optymalizacja układu pompowego studni.</div> + <div class="tag"> + <div class="steps"> + <img src="./images/ps_step_3.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site406"> + <area shape="circle" coords="169,19,19" href="?pg=site406_2"> + </map> + </div> + + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_param">Podaj docelowy poziom zwierciadła studni H<sub>D</sub> [m]</TD> + <TD CLASS="desc_value"><input class="float" name="inNewHD" type="text" value="<?php echo getLastValueFromDevResourceDetail("WELL_PARAMETERS","HDM",$_SESSION['devID']) ; ?>"></TD> + </TR> + + <TR> + <TD class="desc_well_param">Jeżeli zmieniasz, podaj nową średnicę rurociągu D<sub>R</sub> [mm]</TD> + <TD CLASS="desc_value"><input class="float" name="inNewDR" type="text" value="<?php echo getLastValueFromDevResourceDetail("WELL_PARAMETERS","DR",$_SESSION['devID']) ; ?>"></TD> + </TR> + + <TR> + <TD class="desc_well_param">Jeżeli zmieniasz, podaj nową głębokość zabudowy pompy L<sub>P</sub> [m]</TD> + <TD CLASS="desc_value"><input class="float" name="inNewLP" type="text" value="<?php echo getLastValueFromDevResourceDetail("WELL_PARAMETERS","LPM",$_SESSION['devID']) ; ?>"></TD> + </TR> + + <TR> + <TD class="desc_well_param">Zasilanie agregatu [V]</TD> + <TD CLASS="desc_value"><input class="float" name="inNewV" type="text" value="<?php echo $_SESSION['engVol']; ?>"></TD> + </TR> + </TABLE> + </div> + + <?php + if (!empty($_SESSION['site406'])) + echo" + <div class=tag_buttons> + <INPUT class='btn btn-success btn-sm' TYPE='submit' name='subStep3' VALUE='$lab_ButtonName_Next'> + </div> + "; + ?> + +</div> +</form> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site406_4.php b/sites/site406_4.php new file mode 100644 index 0000000..3193113 --- /dev/null +++ b/sites/site406_4.php @@ -0,0 +1,63 @@ +<?php +if (!empty($_SESSION['site406'])) +{ +?> + +<?php + + + + if(!empty($_POST['subStep3'])) + { + echo('<script>sweetAlert("Uwaga!", "Ze względy na brak wystarczającej ilości pomiarów zastosowano uproszczony model doboru.", "warning");</script>'); + + $_SESSION['inNewHD'] = $_POST['inNewHD']; + $_SESSION['inNewDR'] = $_POST['inNewDR']; + $_SESSION['inNewLP'] = $_POST['inNewLP']; + $_SESSION['inNewV'] = $_POST['inNewV']; + + //sleep(5); + } + + +?> + +<form action="./?pg=site406_5" method="post"> +<div class="tag100"> + <div class="head_tag">Optymalizacja układu pompowego studni.</div> + <div class="tag"> + <div class="steps"> + <img src="./images/ps_step_4.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site406"> + <area shape="circle" coords="169,19,19" href="?pg=site406_2"> + <area shape="circle" coords="319,19,19" href="?pg=site406_3"> + </map> + </div> + + <TABLE class="desc_val"> + <TR> + <TD class="desc_well_choice">Podaj szacowaną wydajność pompy Q<sub>SZ</sub> dla zadanego poziomu zwierciadła studni [m<sup>3</sup>/min]</TD> + <TD CLASS="desc_value"><input class="float" name="inNewQ" type="text"></TD> + </TR> + </TABLE> + + </div> + + <?php + if (!empty($_SESSION['site406'])) + echo" + <div class=tag_buttons> + <INPUT class='btn btn-success btn-sm' TYPE='submit' name='subStep4' VALUE='$lab_ButtonName_Next'> + </div> + "; + ?> + +</div> +</form> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site406_5!.php b/sites/site406_5!.php new file mode 100644 index 0000000..b1b170e --- /dev/null +++ b/sites/site406_5!.php @@ -0,0 +1,105 @@ +<?php +if (!empty($_SESSION['site406'])) +{ +?> + +<?php + if(!empty($_POST['subStep4'])) + { + $_SESSION['inNewQ'] = $_POST['inNewQ']; + + $Hd = str_replace(",", ".",$_SESSION['inNewHD']); + $p2 = getLastValueFromDevResourceDetail("WELL_PARAMETERS","P2M",$_SESSION['devID']); + $qQ = str_replace(",", ".",$_SESSION['inNewQ'])/60; + $f = 3.14*pow((str_replace(",", ".",$_SESSION['inNewDR'])/1000),2)/4; + $ct = $qQ/$f; + $Hsl=$_SESSION['rurType'] * (str_replace(",", ".",$_SESSION['inNewLP'])/(str_replace(",", ".",$_SESSION['inNewDR'])/1000)) * (pow($ct,2)/19.62); + $Hp=round($Hd+$p2+$Hsl,2); + + $Hp_min = $Hp-($Hp*0.035); + $Hp_max = $Hp+($Hp*0.07); + + $qQuery = str_replace(",", ".",$_SESSION['inNewQ'])*60; + + $resArray = loadSelectionArray($qQuery,$Hp,$Hp_min,$Hp_max); + + } + + + if(!empty($_POST['subStep5'])) + { + $Hd = str_replace(",", ".",$_SESSION['inNewHD']); + $p2 = getLastValueFromDevResourceDetail("WELL_PARAMETERS","P2M",$_SESSION['devID']); + $qQ = str_replace(",", ".",$_SESSION['inNewQ'])/60; + $f = 3.14*pow((str_replace(",", ".",$_SESSION['inNewDR'])/1000),2)/4; + $ct = $qQ/$f; + $Hsl=$_SESSION['rurType'] * (str_replace(",", ".",$_SESSION['inNewLP'])/(str_replace(",", ".",$_SESSION['inNewDR'])/1000)) * (pow($ct,2)/19.62); + $Hp=round($Hd+$p2+$Hsl,2); + + $Hp_min = $Hp-($Hp*0.1); + $Hp_max = $Hp+($Hp*0.15); + + $qQuery = str_replace(",", ".",$_SESSION['inNewQ'])*60; + + $resArray = loadSelectionArray($qQuery,$Hp,$Hp_min,$Hp_max); + } + + + + +?> + +<form action="./?pg=site406_5" method="post"> +<div class="tag100"> + <div class="head_tag">Lista przesortowanych agregatów na zadane parametry.</div> + <div class="tag"> + <div class="steps"> + <img src="./images/ps_step_5.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site406"> + <area shape="circle" coords="169,19,19" href="?pg=site406_2"> + <area shape="circle" coords="319,19,19" href="?pg=site406_3"> + <area shape="circle" coords="469,19,19" href="?pg=site406_4"> + </map> + </div> + + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Typ pompy</TD> + <TD class="label">Numer pompy</TD> + <TD class="label">Typ silnika</TD> + <TD class="label">Numer silnika</TD> + <td class="label">Q<sub>SZ</sub> [m<sup>3</sup>/min]</td> + <td class="label">~H [m]</td> + <td class="label">~&eta;</td> + </TR> + + <?php + + + + print_r($resArray); + + + + + + ?> + </table> + + + + + + + + </div> +</div> +</form> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site406_5.php b/sites/site406_5.php new file mode 100644 index 0000000..91cbb75 --- /dev/null +++ b/sites/site406_5.php @@ -0,0 +1,201 @@ +<?php +if (!empty($_SESSION['site406'])) +{ +?> + <?php + //warunek, gdy wracamy z wykresu + if (!empty($_GET['q'])) + { + $_POST['inNewQ']=$_GET['q']/60; + $_POST['subStep4']=$lab_ButtonName_Next; + } + + require_once('./polynomial/regression.php' ); + + ?> + + +<?php + if(!empty($_POST['subStep4']) || (!empty($_GET['s']) && $_SESSION['wariant']=='step4') ) + { + $_SESSION['wariant']='step4'; + + if (!empty($_POST['inNewQ'])) $_SESSION['inNewQ'] = $_POST['inNewQ']; + $Hd = str_replace(",", ".",$_SESSION['inNewHD']); + $p2 = getLastValueFromDevResourceDetail("WELL_PARAMETERS","P2M",$_SESSION['devID']); + $qQ = str_replace(",", ".",$_SESSION['inNewQ'])/60; + $f = 3.14*pow((str_replace(",", ".",$_SESSION['inNewDR'])/1000),2)/4; + $ct = $qQ/$f; + $Hsl=$_SESSION['rurType'] * (str_replace(",", ".",$_SESSION['inNewLP'])/(str_replace(",", ".",$_SESSION['inNewDR'])/1000)) * (pow($ct,2)/19.62); + $Hp=round($Hd+$p2+$Hsl,2); + + $Hp_min = $Hp-($Hp*0.035); + $Hp_max = $Hp+($Hp*0.07); + + $qQuery = str_replace(",", ".",$_SESSION['inNewQ'])*60; + + //$resArray = loadSelectionArray($qQuery,$Hp,$Hp_min,$Hp_max); + $resArray = loadSelectionArray_New($qQuery,$Hp,$Hp_min,$Hp_max); + + } + + + if(!empty($_POST['subStep5']) || (!empty($_GET['s']) && $_SESSION['wariant']=='step5')) + { + $_SESSION['wariant']='step5'; + + $Hd = str_replace(",", ".",$_SESSION['inNewHD']); + $p2 = getLastValueFromDevResourceDetail("WELL_PARAMETERS","P2M",$_SESSION['devID']); + $qQ = str_replace(",", ".",$_SESSION['inNewQ'])/60; + $f = 3.14*pow((str_replace(",", ".",$_SESSION['inNewDR'])/1000),2)/4; + $ct = $qQ/$f; + $Hsl=$_SESSION['rurType'] * (str_replace(",", ".",$_SESSION['inNewLP'])/(str_replace(",", ".",$_SESSION['inNewDR'])/1000)) * (pow($ct,2)/19.62); + $Hp=round($Hd+$p2+$Hsl,2); + + $Hp_min = $Hp-($Hp*0.1); + $Hp_max = $Hp+($Hp*0.15); + + $qQuery = str_replace(",", ".",$_SESSION['inNewQ'])*60; + + //$resArray = loadSelectionArray($qQuery,$Hp,$Hp_min,$Hp_max); + $resArray = loadSelectionArray_New($qQuery,$Hp,$Hp_min,$Hp_max); + } + + + if ($_GET['s']=='hu') $resArray = sortmddata($resArray,'hpod','ASC','num'); + else if ($_GET['s']=='hd') $resArray = sortmddata($resArray,'hpod','DESC','num'); + else if ($_GET['s']=='eu') $resArray = sortmddata($resArray,'eta','ASC','num'); + else if ($_GET['s']=='ed') $resArray = sortmddata($resArray,'eta','DESC','num'); + else if ($_GET['s']=='su') $resArray = sortmddata($resArray,'mocsilnika','ASC','num'); + else if ($_GET['s']=='sd') $resArray = sortmddata($resArray,'mocsilnika','DESC','num'); + else if ($_GET['s']=='stu') $resArray = sortmddata($resArray,'pupStatus','ASC','str'); + else if ($_GET['s']=='std') $resArray = sortmddata($resArray,'pupStatus','DESC','str'); + //else $resArray = sortmddata($resArray,'deltah','ASC','num'); + else $resArray = sortmddata($resArray,'pupStatus','ASC','str'); + + +// 'tst'=>$tst,'popma'=>$r_pName,'nrpompy'=>$r_pSN,'silnik'=>$r_eName,'nrsilnika'=>$r_eSN,'qsz'=>$qQuery,'hpod'=>round($h4search,2),'eta'=>$eta,'deltah'=>$deltaH,'mocsilnika'=>$r_eP + + + + $rec_count=0; + + ?> + +<form action="./?pg=site406_5" method="post"> +<div class="tag100"> + <div class="head_tag">Lista przesortowanych agregatów na zadane parametry.</div> + <div class="tag"> + <div class="steps"> + <img src="./images/ps_step_5.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site406"> + <area shape="circle" coords="169,19,19" href="?pg=site406_2"> + <area shape="circle" coords="319,19,19" href="?pg=site406_3"> + <area shape="circle" coords="469,19,19" href="?pg=site406_4"> + </map> + </div> + + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Typ pompy </TD> + <TD class="label">Numer pompy</TD> + <TD class="label">Status pompy &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site406_5&s=stu"><img src="./images/sort_up.png" ></a> <a style="text-decoration: none;" href="./?pg=site406_5&s=std"><img src="./images/sort_down.png"></a></td> + <TD class="label">Typ silnika</TD> + <TD class="label">Numer silnika</TD> + <td class="label">Q<sub>SZ</sub> [m<sup>3</sup>/min]</td> + <td class="label">~H [m] &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site406_5&s=hu"><img src="./images/sort_up.png" ></a> <a style="text-decoration: none;" href="./?pg=site406_5&s=hd"><img src="./images/sort_down.png"></a></td> + <td class="label">~&eta; &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site406_5&s=eu"><img src="./images/sort_up.png" ></a> <a style="text-decoration: none;" href="./?pg=site406_5&s=ed"><img src="./images/sort_down.png"></a></td> + <td class="label">Moc silnika [kW] &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site406_5&s=su"><img src="./images/sort_up.png" ></a> <a style="text-decoration: none;" href="./?pg=site406_5&s=sd"><img src="./images/sort_down.png"></a></td> + </TR> + + <?php + for($i=0; $i<count($resArray); $i++) + { + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site406charts&t=".$resArray[$i]['tst']."&q=".$resArray[$i]['qsz']."'".chr(34)."> + <TD class='field_center'>".$resArray[$i]['popma']."</TD> + <TD class='field_center'>".$resArray[$i]['nrpompy']."</TD> + <TD class='field_center'>".$resArray[$i]['pupStatus']."</TD> + <TD class='field_center'>".$resArray[$i]['silnik']."</TD> + <TD class='field_center'>".$resArray[$i]['nrsilnika']."</TD> + <TD class='field_center'>".$resArray[$i]['qsz']/60 ."</TD> + <TD class='field_center'>".$resArray[$i]['hpod']."</TD> + <TD class='field_center'>".$resArray[$i]['eta']."</TD> + <TD class='field_center'>".$resArray[$i]['mocsilnika']."</TD> + </TR> + "; + $rec_count++; + } + ?> + </table> + + </div> + + <?php + if ($rec_count>0) + { + echo" + <div class='footer_selection_info'> + Dla wybranego agregatu należy sprawdzić:<br/> + - długość kabla zasilającego L<sub>K</sub> <br/> + - średnicę studni D<sub>ST</sub> <br/> + - średnicę agregatu D<sub>A</sub> <br/> + - głębokość położenia filtrów studni L<sub>F</sub> <br/> + </div> + "; + } + else if ($rec_count==0 && empty($_POST['subStep5'])) + { + echo" + <div class='footer_selection_alert'> + Brak przesortowanych agregatów na zadane parametry <br/><br/> + Czy chcesz wyświetlić przesortowane agregaty dla przedziału wydajności Qsz? + </div> + "; + } + else if ($rec_count==0 && !empty($_POST['subStep5'])) + { + echo" + <div class='footer_selection_alert'> + Brak przesortowanych agregatów dla przedziałów wydajności Qsz<br/><br/> + Czy chcesz wyświetlić wyszukiwarkę agregatów z katalogu? + </div> + "; + } + ?> + + <?php + if ($rec_count==0 && empty($_POST['subStep5'])) + echo" + <div class=tag_buttons> + <INPUT class='btn btn-success btn-sm' TYPE='submit' name='subStep5' VALUE='Wyświetl'> + </div> + "; + else if ($rec_count==0 && !empty($_POST['subStep5'])) + echo" + </form><form action='./?pg=site201' method='post'> + <div class=tag_buttons> + <input type='hidden' name='inQpump' value='".$_SESSION['inNewQ']."'> + <INPUT class='btn btn-success btn-sm' TYPE='submit' name='subStep5' VALUE='Wyświetl'> + </div> + "; + ?> + + +</div> +</form> + + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site406charts.php b/sites/site406charts.php new file mode 100644 index 0000000..dba12f6 --- /dev/null +++ b/sites/site406charts.php @@ -0,0 +1,180 @@ +<?php +if (!empty($_SESSION['site406'])) +{ + $wynik = mysql_query("select PUP_ID,PUP_NAME,TST_PUP_SN_NO,ENG_ID,ENG_NAME,TST_ENG_SN_NO,SUBSTRING(TST_AUDIT_CD,1,10) CD from tst_tests left join seg_pumps on TST_PUP_ID=PUP_ID left join seg_engines on TST_ENG_ID=ENG_ID where TST_ID=".$_GET['t']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $pID = $r["PUP_ID"]; + $pName = $r["PUP_NAME"]; + $pNo = $r["TST_PUP_SN_NO"]; + $sName = $r["ENG_NAME"]; + $sNo = $r["TST_ENG_SN_NO"]; + $tDate = $r["CD"]; + } + + + $title = "Cyfrowe charakterystyki dla agregatu [$pName,$sName] ze Stacji prób"; + + $wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$pID." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $scope[] = $r["PEP_X_PARAM"]/60; + } + $ilPkt = count($scope)-1; + + + + // położeniu punktów na wykresie + // =============================================================================================================== // + $wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TST_ID=".$_GET['t']." and PUF_TYPE='H' limit 1"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $pA = $r["PUF_A"]; + $pB = $r["PUF_B"]; + $pC = $r["PUF_C"]; + $pD = $r["PUF_D"]; + $hp_H = $pA*($_GET['q']*$_GET['q']*$_GET['q']) + $pB*($_GET['q']*$_GET['q']) + $pC*$_GET['q'] + $pD; + } + + $wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TST_ID=".$_GET['t']." and PUF_TYPE='P' limit 1"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $pA = $r["PUF_A"]; + $pB = $r["PUF_B"]; + $pC = $r["PUF_C"]; + $pD = $r["PUF_D"]; + $hp_P = $pA*($_GET['q']*$_GET['q']*$_GET['q']) + $pB*($_GET['q']*$_GET['q']) + $pC*$_GET['q'] + $pD; + } + + $wynik = mysql_query("select PUF_A,PUF_B,PUF_C,PUF_D from tst_xy_formula where PUF_TST_ID=".$_GET['t']." and PUF_TYPE='ETA' limit 1"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $pA = $r["PUF_A"]; + $pB = $r["PUF_B"]; + $pC = $r["PUF_C"]; + $pD = $r["PUF_D"]; + $hp_ETA = $pA*($_GET['q']*$_GET['q']*$_GET['q']) + $pB*($_GET['q']*$_GET['q']) + $pC*$_GET['q'] + $pD; + } + // =============================================================================================================== // +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $title;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="desc">Numer próby</TD> + <TD CLASS="desc_value"><?php echo $_GET['t']; ?></TD> + <TD class="desc">Data</TD> + <TD CLASS="desc_value"><?php echo $tDate; ?></TD> + </TR> + + <TR> + <TD class="desc">Typ pompy</TD> + <TD CLASS="desc_value"><?php echo $pName; ?></TD> + <TD class="desc">Typ silnika</TD> + <TD CLASS="desc_value"><?php echo $sName; ?></TD> + </TR> + <TR> + <TD class="desc">Numer pompy</TD> + <TD CLASS="desc_value"><?php echo $pNo; ?></TD> + <TD class="desc">Numer silnika</TD> + <TD CLASS="desc_value"><?php echo $sNo; ?></TD> + </TR> + <TR> + <TD class="desc">Zadana wartość Q [m<sup>3</sup>/min]</TD> + <TD CLASS="desc_value"><?php echo str_replace('.',',',round($_GET['q']/60,2)); ?></TD> + <TD class="desc">Podnoszenie H(Q)</TD> + <TD CLASS="desc_value"><?php echo str_replace('.',',',round($hp_H,2)); ?></TD> + </TR> + <TR> + <TD class="desc">Moc P(Q)</TD> + <TD CLASS="desc_value"><?php echo str_replace('.',',',round($hp_P,2)); ?></TD> + <TD class="desc">Sprawność agregatu &eta;A(Q)</TD> + <TD CLASS="desc_value"><?php echo str_replace('.',',',round($hp_ETA,2)); ?></TD> + </TR> + </table> + </div> + +<?php + $wynik = mysql_query("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=".$pID." order by PEP_X_PARAM"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + $dataP[] = $r["PEP_X_PARAM"]; + + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$_GET['t']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $dataH[] = array( + getFloatValue($r["TSD_VAL_04"]), + getFloatValue($r["TSD_VAL_08"]) + ); + $dataPe[] = array( + getFloatValue($r["TSD_VAL_04"]), + getFloatValue($r["TSD_VAL_14"]) + ); + $dataEta[] = array( + getFloatValue($r["TSD_VAL_04"]), + getFloatValue($r["TSD_VAL_18"]) + ); + } + + + $fileName1=createChartFileNamePng("site406charts_01"); + if (file_exists( $fileName1)) unlink($fileName1); + + include("./polynomial/hpCharts.php"); + createHpTestChart($dataP, $dataH, 0, $fileName1, 969, 330, 20, 10, 1); + + + $fileName2=createChartFileNamePng("site406charts_02"); + if (file_exists( $fileName2)) unlink($fileName2); + + include("./polynomial/peCharts.php"); + createPeTestChart($dataP, $dataPe, 0, $fileName2, 969, 330, 20, 10, 1); + + $fileName3=createChartFileNamePng("site406charts_03"); + if (file_exists( $fileName3)) unlink($fileName3); + + include("./polynomial/etaCharts.php"); + createEtaTestChart($dataP, $dataEta, 0, $fileName3, 969, 330, 20, 10, 1); + +?> + + + <div class="head_tag">Podnoszenie H(Q) </div> + <div class="tag"> + <img SRC="<?php echo $fileName1; ?>"> + </div> + + <div class="head_tag"><?php echo $lab_Field_site501_009; ?> P(Q) </div> + <div class="tag"> + <img SRC="<?php echo $fileName2; ?>"> + </div> + + + <div class="head_tag"><?php echo $lab_Tag_site203_005; ?> &eta;A(Q) </div> + <div class="tag"> + <img SRC="<?php echo $fileName3; ?>"> + </div> + + + +</div> + +<div class="tag50_left"> + <div class="tag_buttons" style="text-align: left;"> + <button type="button" class="btn btn-default btn-sm" onclick="window.print();">Drukuj</button> + </div> +</div> +<div class="tag50_right"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site406_5&q=<?php echo $_GET['q']; ?>" role="button"><?php echo $lab_ButtonName_BackToList; ?></a> + </div> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site407.php b/sites/site407.php new file mode 100644 index 0000000..021235d --- /dev/null +++ b/sites/site407.php @@ -0,0 +1,73 @@ +<?php +if (!empty($_SESSION['site401'])) +{ +?> + +<?php + +unset($offArray); +if (empty($_GET['more'])) + $offArray = sqlGetResAsArray("SELECT * FROM rep_zrzut_wody WHERE RZW_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' ORDER BY RZW_AUDIT_DATE DESC LIMIT 20"); +else + $offArray = sqlGetResAsArray("SELECT * FROM rep_zrzut_wody WHERE RZW_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' ORDER BY RZW_AUDIT_DATE DESC"); + + +?> + + + <div class="tag100"> + <div class="head_tag">Zrzut wody - rejestr - <?php echo $_SESSION['syndis_eq_stock']; ?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label" rowspan="2">Nr</TD> + <TD class="label" rowspan="2">Data</TD> + <TD class="label" colspan="2">Widawka</TD> + <TD class="label" colspan="2">Krasówka</TD> + </TR> + <TR> + <TD class="label">m<sup>3/</sup>min</TD> + <TD class="label">m<sup>3/</sup>h</TD> + <TD class="label">m<sup>3/</sup>min</TD> + <TD class="label">m<sup>3/</sup>h</TD> + </TR> + + <?php + for ($i=0; $i<count($offArray); $i++) + { + + + echo" + <tr> + <TD class='field_left'>".($i+1)."</TD> + <TD class='field_center'>".$offArray[$i]['RZW_AUDIT_DATE']."</TD> + <TD class='field_center'>".$offArray[$i]['RZW_WIDAWKA']."</TD> + <TD class='field_center'>".($offArray[$i]['RZW_WIDAWKA']*60)."</TD> + <TD class='field_center'>".$offArray[$i]['RZW_KRASOWKA']."</TD> + <TD class='field_center'>".($offArray[$i]['RZW_KRASOWKA']*60)."</TD> + </tr> + "; + + + + } + + if (empty($_GET['more']) && count($offArray)>19) + { + + echo"<tr><TD class='field_left' colspan='6'><a href='./?pg=site407&more=1'>Pokaż więcej</a></TD></tr>"; + } + ?> + + + + </table> + </div> + + </div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site501.php b/sites/site501.php new file mode 100644 index 0000000..e0f1e15 --- /dev/null +++ b/sites/site501.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPncX0Q6eT/gMeHkKWiy82IEWG/h66JYUszWcWFu3N8VlH16A/AjuB7nAyybsoKqbX8n5RDXW +FzpRBdgI/ljhwV/yA2dQ8dACCa0QTccor9YWkeF4cj+ZTMRjuE6sUuv9aKIyaCFznQZZ3yt3DsaO +vO+yagZcFJvy5e3Vm8r4R8JI19sPsXjusiSS3KM1Km0BnahvQCt0XKwct8YPpmr0cAU+FNoZ99Nx +H7NIyktFggP+w0vA03skNJ92g2/VVARQ9u72uNtBq/nSacrh5yl98LuCIPthICJPMCW3aJH+eZef +7pH+3lttQE264R++qwcKk2oKxAFdJjxReYY95znpybKDX5dSmEoo1NsLZz4z+N/AlniZAkUiwHtl +oETR6RAKgSl1DK5JMAFOFdUxzrFd5bNGk1JRElGwLI33Vsz8pBh3JClqRvtwelkECllRaMtKUImA +EVRDa3SKEE7e5AdBFkcOBtLQUvr8RUCLayM3anDUN5jm7IL2pk815up15SrAHiYZMo7oq4n7cYp8 +G4Wt55y8/yF84GXDV8fY1np6EFyVqdoLMK0CaXEhYCHdyBSUnpbNdT3Q7nLXu2bGLhlIeF3MyAj/ +tQVvvojnPz4Zsx/iVPf0 \ No newline at end of file diff --git a/sites/site502.php b/sites/site502.php new file mode 100644 index 0000000..d71e851 --- /dev/null +++ b/sites/site502.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPpgxvuBFdTorWW5oeIgdcad2LY7uAZcW3lgF7pgQLK7NxyudxNdpcO9PfiDLtenYACWXe8Hc ++WuPWL8nnTv+6BodvOMm6eEvnCwbXi3etWDw/Kpo/Mcr3QQTGIArSIL7/rjk5fbb7G+Hvj59dRCY +LJB1Hfp0W8cVdXA00+59V7kMjW6AGBEekCppUquT6hLDqBm/pdEnvgyu00wYbAWfx8iVHIn7jmrq +GGs37ESlA1/XD1+dNPAJwQWlttocsYU1mk5zozFyN9BMP2Jo3aW0wDOAFhh4GS+KCXeRcjQrtni8 +xD8Kec4OU0xAIJsfIJMUbkGqMf9cPMTipR1rfYMBsiM0OaDjIREyx0GZNaVvTtARsqi4y8PcoKoS +AXkaJpFlLryBTiaHB5Hibr8d1161ENHK/AOcUHPhmBZQ53FIc17IJ0z6fdtEFyC/b5FjQGkBavrQ +Pg39KJvaR/FkiydwXP8UR6et2hsMGPdVfes8KjHY7n/2Sqi9FatCjpFRIH+O1iDWSpOd0/TSC0aV +AKtHgwJZgHGwu17/71xC0c1kbhHsVbynIJhbbDD4PKSL20HW+cAy5ZXH35BR765maP87jDpEfvWJ ++vaf+n9Vo2vOPAR4RXWZ \ No newline at end of file diff --git a/sites/site503.php b/sites/site503.php new file mode 100644 index 0000000..d4c0127 --- /dev/null +++ b/sites/site503.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPsoVNbKwUQEQroNBTjpYu1mTA8ZssYueClQBVVRiRP7JOrIyXlbjrIrLSUrMA5t0hgKqdtw0 +oFru9VFjkLLLCpdOjugfLwF9I0M1DBFY46LLVIqh8r4USRKegVIKARIvaUymapAm3rBiHce+cY/U +BQqZDSms7QrTzRveAMAB6D4wC5YRSwNkvGoEUiUna8xyW7ZboEUgJjxA7nHeEl4eYRIj+XYlpFi8 +eMKARtTTlus15udzIoQRn5keBzzyfjedWSBXVSlJ/5oIkcSnKNoNI4AhzTGgnD7tlKDCN6A/bJIu +T73+QvjIyNex+RMHLFtiOfRIsV3VDeGPVigJtBUrhGtk1Udb2BfytYU4JIK0JI3G7xecKpMdEfeS +e5YTBVzOzoTS9q8dv8D0BgD0eqwCJ02iX3RDKik/YifMnTglh6rzVHysV7p67Dcq1cVQr3sCesj5 +mylQBw7MEyifBpQqDTyIhlQIC1MFib2cqT1yAXNaAMAxRxu4zpvLzJDPKuFCeUC02NlpKuZUcxxD +zzWoCxI2qaOTohmclyjc3sw/eX6wS7f6Jx7O/H1zPgiHXPsrWCBH9sztYWLkjfWV5j/y4l8eCIX9 +QyS+LlSJrXVwfUnw/B0= \ No newline at end of file diff --git a/sites/site504.php b/sites/site504.php new file mode 100644 index 0000000..d96361a --- /dev/null +++ b/sites/site504.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPyhi5zIUI+mRSrQ2zuGs3R+00o0afg8FPUOkdAXvyt78noOISSj9Zh6hsM42cWcouBKKT618 +ELWW56mmhR5PWLZRjfb3d9qCHfDz8u5641j7BIL26byM2Is32b624W5YoRgRKKxffSXO1bfsxlKC +4WZzT45EOugPGIr+ozuCbgApQ/DzzYffeWsqcMKPY7GR0Rb2ehf7Y97zx9ql9hEMhRtAj6iBzvAU +PQdQgUNQX762lQ01rULC4QWlttocsYU1mk5zozFyN98XNmqZxFw2y/amLP34sLZ8PXcUI9YOpLDZ +9McDhbLePc/okioPTmH/+sVhXWi6LmJ6coJN60xn8clWtnmAq3XlAsIZ3dytKGjyJsYT658YvYIc +qty+RBzF2sWxIEg1rpt1I571rHEVRVGla4cLVK2cXpQcb9GQDtinbLvf2CKmW3GY7CtvSuOzN7u7 +dXtnJAK2CBREM0NWTQV0aWv/U3V8rGkE5MGsbpuW+bfYkUE3mpfDUCoPKheuKJ4qKJENairPsVNb +ZDyFYwMRkV7vsyKD+TY/QdcHHA4tLiHem46GkdQP0Y24hsKK5AlLVyJMkimmp+OW/cOmS+oxW6W3 +vFcvhcghbpvTxZkW7NUp/0== \ No newline at end of file diff --git a/sites/site601.php b/sites/site601.php new file mode 100644 index 0000000..80815aa --- /dev/null +++ b/sites/site601.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPnefH0kh3xqiffFHA051ExgvloxLvDefNvYiGLV0nKT9ooACoivJYJSJY7phpierH/Ym8WeP +fJVFmaqZlRPllSZGiQNZrGI65vyzxpK//c25B+6hsi301wuFtDZH82s/si40DFSKHhjxAhQK19CX +7j6H2CQj3NCPQlGMKAla3TbQyG30Qy49BtxXIkfyTzh8I5i03pqtb9Op0EXX2K5719KnEWLcHZiP +8hTPpzqtq3avN4CYZ8fkg2/VVARQ9u72uNtBq/nSai5TNyg1w8eI46DhSCH1pvGJFJrtBPZEfacU +TlqSIO6AJryqDYOYtI4qJoL7nv5J8pkR04ICbGEpLHKJGaYyBZyqu8a8zqoJLAD4Mr2WdcAJPt2n +sCmNcGg6l04C3lKXTNJ591vD4DhWcuq7+sGiXOM8pmvFOSMfCJ95nYLaHOv8J41YJvOFOZ3YEzs7 +ZUJbzXdYYofrjd6D5tsazM5wkwxtIYmTA4EG9p0W0XmF6gILNXpTgR0B42wdYivqr5ybVP69lxzp +dBC/4eUdfj6+ubvV2nhT0OZ3uqjzPBpQqQcTy+UCrm9rUXRewNIcBdUFRIy122QBZ2STjIHLpVAK +f0QT+W4Qi/Lhms8= \ No newline at end of file diff --git a/sites/site602.php b/sites/site602.php new file mode 100644 index 0000000..a88ed5f --- /dev/null +++ b/sites/site602.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPwHVzc9vkSfL4ELZGK9Yb1qr+G0RQUZszDut9D8PKFnoaeDB+7K9td5oUIIWKfz3ciAD4OgZ +2Q3B3rn8A2dHO3+pHp1WARf2POXu6OaNe3ZyUvbqWOlI7KFeTdn7Nxf2YzcxAz/tBR54koAu7FcJ +5ZjrXdBvuORW7dPe7iyK6fjho8MxRMa1lcrlFMCLsPc/OAkCw0esa25bp3Wb6k/BCnqoX+J3uSao +kT2Dzs//w9yF00YpyPsMBgWlttocsYU1mk5zozFyN9A2OkGp7+g9hYTWd4h4qVUzO2giIc16av7S +CPSO6CuNDKqjK2owihV/rOwfiZyguUIMEyDzVVNcxyyNrqQ0EmDbDeQpb6SSjDlB229TydcFH8l9 +IG5qNbgDg7gn6UmS7qoqziQGws2Wf+u4br+OrgxEYCDjAB8KNBv05klVTUVrn/twS8rDgt4fP2SY +LNWFrJ1WfqOG8jbehU/3sK1RGDdOPvWoRNM333ODuT7L5vPYAFIv8zXG/POo2L6BEX+iLSZ39hpw +l1jGrguSB4NYWf/Q+wKiJKdF3Qx9xFiYvXPPBqnzLL72O7+CLxnB0BOfFk9ZCLyHhv39j1Eb1FVr +gi9eC/0mGmXNMFYQIioha7o6Zm== \ No newline at end of file diff --git a/sites/site603.php b/sites/site603.php new file mode 100644 index 0000000..68376c9 --- /dev/null +++ b/sites/site603.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPrHZojFZjSxaxjbVyByeWXrJ6e94Dav7dkOKt1jpX9LD+ioJ7mKloSgpDXFaADgebq543d8Q +AfEd/pJ8eI0rgG5HuLV5n9dULX22CsBebMv6LltwlGsH9HJJlSo/VBBhS+0J2rQeNZTAe3wlvrbG +vjHgVhEh135n6GoqrIF7nJXcZA70iruqwHzMtxX2r3BkB4OiecyRguK8SiCntjqWeV1B8oj0K+JI +0J3YIqtTaoXGlrnXp95rugWlttocsYU1mk5zozFyN99VP6RbuiMFLno/fJp4sLZ8RAeuHM7MymxH ++7ra2YH/PZ90xAKHChDt9hoGHmCn3ANz/OZz69Qb1XQF9enlBleOvVqSU8ZS4GpIzT2vMEHA0Guq +wYFQB1ZVqg4FR68sctwgn/r36BuSRfrN4aHws+/Yt/cQV/flEJ6AJOWXWWGxz7/8hc5y+Va0ZdF2 +5Wz4DEBznHXPuGByZ2QygrAs7Y4eWq/LkJtEw6TQIlKNnk+ds629uD4I1Wc4yQC+2emD24Kz1MKl +dxQblqDg1HMhGK935LBByAG4lYv4Dykg2t9LFSkCmofqBrlfZlSAQF58/pJZNOgc3NTesn5MFfhD +SCkTWZBUkIU/VNGI8m== \ No newline at end of file diff --git a/sites/site701.php b/sites/site701.php new file mode 100644 index 0000000..e5d2757 --- /dev/null +++ b/sites/site701.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPyN+kK6MMG9sUqGiOc5JdfF4MbONrc5LlFWUKUbiRaUQAZ/VPrDGTDMh590ZuUlkiBlK5H89 +wuOHk8s3L+hdnnM+9F3NgtTmr+FLpEjJQHUbHhOdS4iCAv36+HrjmEl7gUZ4L82FJgXA0RsyfMJN +2Xd8lTzsZ9Zl6Gw9bxtxWvhdmUszLMbmBhLC2EVG6oIhZEz/pfdTruaOjXGINK1sEt2FiMl3jGJz +qV15apj+p1GKu6WQ/KhXkAWlttocsYU1mk5zozFyN9BsQMbUrtPtDiTs0cp4GS+KBEyMAmaEEd0w +SflRX1gohvGi76i/tuSqzU4jySi32CVtbEMe7j1/xaDHNsTGlhGnrozJ6KbY8+nBjR7sgC07RWpI +W28flhp/aV0Y5EhLkebtWXJyAar6Y07wbmQ5iRNPJJ6jNcM6uAzwmn8bZOPofpF6TzJPHAebwZw1 +bszaWHvbYGNqyahdmQtd1PZqQL3dTFV3kJvU32YHyNvcW7utNoCBA0HJy2fiyUu9vHXjntFvo9t+ +gCHhWBZJ7MohvY3XPpUywJT6fmCuuWMtD12RX6nMdGBBT6x5DR4Teo3cT2OKZ5IdEMIsK8jhrHkd +ySV9IhqKTzlW \ No newline at end of file diff --git a/sites/site702.php b/sites/site702.php new file mode 100644 index 0000000..380eef2 --- /dev/null +++ b/sites/site702.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPz+zPVLhcrxxPWVmrjkuhnFT5/QnQkbnWSbbW23SCjWJZCegWzsCgDTmC8G0qMpOu8qDquhO +bKgDW1T03e8ZetdL5xeRoN+5PRmAgtz2Wj3BaXkRQCwtN6bZCEvF7yjmiNz9PTt0LDCHAVQW+1HA +463Bzy43feDrAoSftwG4fd+oHh6nPjUYOj2GVZAAxF8l48z8xjUrTcvhP+lXoR+5w7HDW2UCugZK +8Y8lzUrAgpsz1Z3w7Ks+ngWlttocsYU1mk5zozFyN98pQabErUG2CN/sfr34qVUz9WxHbvebuJsE +Ye3fRXDI+eOGFOJjXzG/6q9AKOpZbTBGKHq/kTlU7rPIdRsPHmbujEQ/EnhW0kkdEb8LF+kTRJyB +5fHYVzs3sDDTdcRjSCbE5LS35I5++8BR4Zxlxz+34qHOjbMbZwqljfSESoK7oiPNjLfkLp8e56TU +UiBgimHMAyBKuZWqsGyk9QJNfmc/ZNOk/XrG+3QTFmXShDu5Bjlgk5P/oGiZxEonI/Yq5wli+gZh +L+zxSYjUCryLCJtLKAqvAMNc9mdmzyavtmdATNoruga4Nq9CA+MSFn9wAam7w4iavOyU/H5usrnH +HIr5oTH2J8pjtXsc+dKjTm== \ No newline at end of file diff --git a/sites/site703.php b/sites/site703.php new file mode 100644 index 0000000..32933a8 --- /dev/null +++ b/sites/site703.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPnJnmJ6zHpe6h4jK4jPS+Ei6TT6gh3PryxsieT+rHxdhkrAGarMD5QZWUiAYZIgdPVtYn/PT +05UEoXHa+Mp0rG+fgwdzwltYh7GBfO2npIXmhAudhCjfQ9IJTymE6DLxL4FKnPh4xawCNXEcs4rC +qCeOMuGKYr332f8+bStpp7JxuE4UL/ZSv0MC9kvMTyFHlIDfcLhzO81pjCPh15vIGVWrN2treMVJ +SYNyo4EgjM9z0ndzgv6Jg2/VVARQ9u72uNtBq/nSaWDjr45en5vg6ef1pSJPMCWTcrtUv6EHv+yJ +tyopQ1WiXCpCFvjqjeWd79HmXbhmytYLLkIGodum1xOfiLzhlr1nNvA4zYi08LvH0FwDd3OU5LDL +AoX9pQN8qnybBPAIk2Yh5QTpovDpuG23ME9RLA3nCy8C4HtJvLCMWrP9lY7Hy7X5eZW6kQ5y9Jhy +YXYIdPW0T7BROnuObPTkmy+Vmq9SnrfjUyKU3U4OweLTdPi+0pEURPw5UL1TKl2+rCWIUma43k0a +QKS2ys2c4J938KlRjAjJHMaz003VJj42xoiU6bXqpvCWNT/9OKxInVws4+HjvnsxC7lKYnoxwybX +q9CU3kOH55sHKALVSmtv \ No newline at end of file diff --git a/sites/site704.php b/sites/site704.php new file mode 100644 index 0000000..29e6166 --- /dev/null +++ b/sites/site704.php @@ -0,0 +1,12 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPyk8xi6KRzFsTJ9xuYHi+vmCQ7WZ7zIfv9Yii0S0MwvtznI2eAS78AAImV7rQlXx+DOYi0uW +hkbRXYakTaeJsJlIAzXIZCwtbUBfRkbwSDU44xX2kXyJRg2E0l1J/fnJeSHfA6twG2zHrvPCOori +WP6rZy7TtEklmsodHohRreEigBEUKef2BILQhqgFJNi66KZZqaKm/A1n+cbzZtJte37kpJVO2VNj +es0V0+GUbuoMb2H0M3xXg2/VVARQ9u72uNtBq/nSaWjfRyZ9RF6lPqFVBiH1pvG6yB03wSxqJvHI +pSfFP0NKeDiBin5kcu3ebi8/Ekpt6bcxswAqIHsaMhKp4LSqFICxnLiARm/AnD81Gv7BkXpJ+tNW +qwH6Pse7o0sbppJ4e+S0xFrXVKSo6xsD+ddln3MWH5BgYrnsau8FCnf3yLXbmFyua3YsaGIJikGn +pIMgURlRdH0j/uhtHQerPz3i0u459bZDGhYWJOmBhMI0NXdt2sfumub9mgAIcDXvgns1UieVduqc +2/pWRLVZd2f56ZBku5MlYc2RevSv4yMABnCgR6DseLCWbAAjRqlJMoYYEIqmO3s28oCPkB9AZ1hg +R4nxpwa2THjC \ No newline at end of file diff --git a/sites/site801.php b/sites/site801.php new file mode 100644 index 0000000..16f163e --- /dev/null +++ b/sites/site801.php @@ -0,0 +1,103 @@ +<?php +if (!empty($_SESSION['site801'])) +{ +?> + + <?php + //reset hasła + if (!empty($_GET['usr']) && $_GET['rp']=='yes') + { + $newPass=substr(md5(date('Ymd').$_GET['usr'].date('His').$_SESSION['user'].$_SESSION['sys_typ']),10,6)."#".rand(10, 99); + mysql_query("UPDATE sys_users SET USR_PASSWORD='".md5($newPass)."' WHERE USR_ID=".$_GET['usr']); + echo"<div class='actionOK'>$lab_Field_site801_012</div>"; + + // dorobić wysyłanie hasła na maila + sendEmailNotification(sqlStringValue("select USR_MAIL from sys_users where USR_ID=".$_GET['usr'],"USR_MAIL"), "Reset hasla - ".sqlStringValue("select USR_USERNAME from sys_users where USR_ID=".$_GET['usr'],"USR_USERNAME"), "System wygenerowal nowe haslo dla <b>".sqlStringValue("select USR_USERNAME from sys_users where USR_ID=".$_GET['usr'],"USR_USERNAME")."</b> na <a href='http://10.0.0.98'>http://10.0.0.98</a><br/><br/>Nowe haslo: <b>$newPass</b>"); + } + //dodawanie nowego użytkownika + if (!empty($_POST['inUserLogin']) && !empty($_POST['inUserMail']) && $_POST['subUserSave']==$lab_ButtonName_Save && sqlValue("select count(1) from sys_users where USR_USERNAME='".$_POST['inUserLogin']."'")==0) + { + $newPass=substr(md5(date('Ymd').$_POST['inUserLogin'].date('His')),10,8)."!".rand(10, 99); + mysql_query("INSERT INTO sys_users SET USR_USERNAME='".$_POST['inUserLogin']."',USR_PASSWORD='".md5($newPass)."',USR_FIRST_NAME='".$_POST['inUserFName']."',USR_LAST_NAME='".$_POST['inUserLName']."',USR_MAIL='".$_POST['inUserMail']."',USR_PHONE='".$_POST['inUserPhone']."',USR_STATUS='".$_POST['inUserStatus']."',USR_PRT_ID=1,USR_AUDIT_CU='".$_SESSION['user']."',USR_AUDIT_CD=now()"); + $maxUserID=sqlValue("select max(USR_ID) from sys_users"); + + $wynik = mysql_query("select PRO_ID from sys_profiles"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $proID = $r["PRO_ID"]; + if ($_POST['inUserProfile'][$proID]) mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=$maxUserID,SUP_PRO_ID=$proID"); + } + + echo"<div class='actionOK'>$lab_Field_site801_015 </br>Login: <b>".$_POST['inUserLogin']."</b></br>Hasło: <b>".$newPass."</b></div>"; + + // dorobić wysyłanie hasła na maila + //sendEmailNotification($_POST['inUserMail'], "Nowy uzytkownik - ".$_POST['inUserLogin'], "W systemie zostal stworzony nowy uzytkownik:<br/><br/> Login: <b>".$_POST['inUserLogin']."</b><br/>Haslo: <b>$newPass</b></br></br>Kliknij aby sie zalogowac: <a href='http://77.253.232.217/'>strona logowania</a>"); + + } + + ?> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site801_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site801_001 ;?></td> + <td class="label"><?php echo $lab_Field_site801_002 ;?></td> + <td class="label"><?php echo $lab_Field_site801_003 ;?></td> + <td class="label"><?php echo $lab_Field_site801_004 ;?></td> + <td class="label"><?php echo $lab_Field_site801_005 ;?></td> + <td class="label"><?php echo $lab_Field_site801_006 ;?></td> + </tr> + + <?php + $wynik = mysql_query("select USR_ID,USR_USERNAME,USR_FIRST_NAME,USR_LAST_NAME,USR_MAIL,USR_PHONE,USR_STATUS from sys_users order by USR_LAST_NAME,USR_FIRST_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["USR_ID"]; + $sql_2 = $r["USR_USERNAME"]; + $sql_3 = $r["USR_FIRST_NAME"]; + $sql_4 = $r["USR_LAST_NAME"]; + $sql_5 = $r["USR_MAIL"]; + $sql_6 = $r["USR_PHONE"]; + $sql_7 = $r["USR_STATUS"]; + + if ($sql_7=='0') $sql_7=$lab_Field_site801_008; + else if ($sql_7=='1') $sql_7=$lab_Field_site801_007; + else if ($sql_7=='2') $sql_7=$lab_Field_site801_009; + + echo" + <tr style='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site801inf&usr=$sql_1'".chr(34)."> + <td class='field_center'>$sql_2</td> + <td class='field_center'>$sql_3</td> + <td class='field_center'>$sql_4</td> + <td class='field_center'>$sql_5</td> + <td class='field_center'>$sql_6</td> + <td class='field_center'>$sql_7</td> + </tr> + "; + } + ?> + </table> + </div> + + <?php + if (!empty($_SESSION['site801_edit']) && $_SESSION['user']=='admin') + echo" + <div class=tag_buttons> + <a href='?pg=site801A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + <a href='?pg=site801syn'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Sync'></A> + </div> + "; + ?> + +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site801A.php b/sites/site801A.php new file mode 100644 index 0000000..815f00b --- /dev/null +++ b/sites/site801A.php @@ -0,0 +1,92 @@ +<?php +if (!empty($_SESSION['site801_edit'])) +{ +?> + +<div class="tag100"> + <FORM ACTION="./?pg=site801" METHOD="POST" id="AddUserForm" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site801_003 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site801_001 ; ?></td> + <td class="desc_value"><INPUT class="login_req" TYPE="TEXT" NAME="inUserLogin" id="inUserLogin"><div style="display:inline; padding: 10px; color: #ff0000;" id="isUserName"></div></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_002 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inUserFName"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_003 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inUserLName"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_004 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inUserMail"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_005 ; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" NAME="inUserPhone"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_006 ; ?></td> + <td class="desc_value"> + <select name="inUserStatus"> + <option value="1"><?php echo $lab_Field_site801_007 ; ?></option> + <option value="0"><?php echo $lab_Field_site801_008 ; ?></option> + <option value="2"><?php echo $lab_Field_site801_009 ; ?></option> + </select> + </td> + </tr> + </table> + </div> + + + + + <div class="head_tag"><?php echo $lab_Tag_site801_004 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="label"><?php echo $lab_Field_site801_013 ;?></td> + <td class="label"><?php echo $lab_Field_site801_014 ;?></td> + <td class="label"></td> + </tr> + <?php + $wynik = mysql_query("select PRO_ID,PRO_NAME,PRO_DESCRIPTION from sys_profiles order by PRO_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PRO_ID"]; + $sql_2 = $r["PRO_NAME"]; + $sql_3 = $r["PRO_DESCRIPTION"]; + + echo" + <tr> + <td class='field_center'>$sql_2</td> + <td class='field_center'>$sql_3</td> + <td class='field_center'><INPUT TYPE=CHECKBOX NAME=inUserProfile[$sql_1] VALUE=1></td> + </tr> + "; + } + ?> + + </table> + </div> + + + + + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site801" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subUserSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site801E.php b/sites/site801E.php new file mode 100644 index 0000000..e36bf76 --- /dev/null +++ b/sites/site801E.php @@ -0,0 +1,118 @@ +<?php +if (!empty($_SESSION['site801_edit'])) +{ +?> + + + <?php + $wynik = mysql_query("select USR_USERNAME,USR_FIRST_NAME,USR_LAST_NAME,USR_MAIL,USR_PHONE,USR_STATUS from sys_users where USR_ID=".$_GET['usr']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["USR_USERNAME"]; + $sql_2 = $r["USR_FIRST_NAME"]; + $sql_3 = $r["USR_LAST_NAME"]; + $sql_4 = $r["USR_MAIL"]; + $sql_5 = $r["USR_PHONE"]; + $sql_6 = $r["USR_STATUS"]; + } + + ?> + + + +<div class="tag100"> + <FORM ACTION="?pg=site801inf" METHOD="POST" id="AddUserForm" class="form_valid"> + <INPUT type="hidden" name="usr" value="<?php echo$_GET['usr'] ;?>"> + <div class="head_tag"><?php echo $lab_Tag_site801_002 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site801_001 ; ?></td> + <td class="desc_value"><?php echo $sql_1 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_002 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inUserFName" value="<?php echo $sql_2; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_003 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inUserLName" value="<?php echo $sql_3; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_004 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inUserMail" value="<?php echo $sql_4; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_005 ; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" NAME="inUserPhone" value="<?php echo $sql_5; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_006 ; ?></td> + <td class="desc_value"> + <select name="inUserStatus"> + <option value="1" <?php if($sql_6==1) echo "selected";?> ><?php echo $lab_Field_site801_007 ; ?></option> + <option value="0" <?php if($sql_6==0) echo "selected";?> ><?php echo $lab_Field_site801_008 ; ?></option> + <option value="2" <?php if($sql_6==2) echo "selected";?> ><?php echo $lab_Field_site801_009 ; ?></option> + </select> + </td> + </tr> + </table> + </div> + + + + + <div class="head_tag"><?php echo $lab_Tag_site801_004 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="label"><?php echo $lab_Field_site801_013 ;?></td> + <td class="label"><?php echo $lab_Field_site801_014 ;?></td> + <td class="label"></td> + </tr> + <?php + $wynik = mysql_query("select PRO_ID,PRO_NAME,PRO_DESCRIPTION from sys_profiles order by PRO_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_01 = $r["PRO_ID"]; + $sql_02 = $r["PRO_NAME"]; + $sql_03 = $r["PRO_DESCRIPTION"]; + + if ($sql_01 != 1 || $_SESSION['user']=='admin') + { + echo" + <tr> + <td class='field_center'>$sql_02</td> + <td class='field_center'>$sql_03</td>"; + if (sqlValue("select count(1) from sys_user_profiles where SUP_PRO_ID=$sql_01 and SUP_USR_ID=".$_GET['usr'])>0) + echo"<td class='field_center'><INPUT TYPE=CHECKBOX NAME=inUserProfile[$sql_01] VALUE=1 checked></td>"; + else echo"<td class='field_center'><INPUT TYPE=CHECKBOX NAME=inUserProfile[$sql_01] VALUE=1></td>"; + echo" + </tr> + "; + + } + + } + ?> + + </table> + </div> + + + + + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site801inf&usr=<?php echo$_GET['usr'] ;?>'"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subUserSave' VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site801inf.php b/sites/site801inf.php new file mode 100644 index 0000000..ac82a88 --- /dev/null +++ b/sites/site801inf.php @@ -0,0 +1,142 @@ +<?php +if (!empty($_SESSION['site801'])) +{ +?> + + <?php + if (empty($_GET['usr'])) $_GET['usr']=$_POST['usr']; + + if (!empty($_SESSION['site801_edit']) && $_POST['subUserSave']==$lab_ButtonName_Update) + { + mysql_query("UPDATE sys_users SET USR_FIRST_NAME='".$_POST['inUserFName']."',USR_LAST_NAME='".$_POST['inUserLName']."',USR_MAIL='".$_POST['inUserMail']."',USR_PHONE='".$_POST['inUserPhone']."',USR_STATUS='".$_POST['inUserStatus']."' WHERE USR_ID=".$_POST['usr']); + mysql_query("delete from sys_user_profiles where SUP_USR_ID=".$_POST['usr']); + + $wynik = mysql_query("select PRO_ID from sys_profiles"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $proID = $r["PRO_ID"]; + if ($_POST['inUserProfile'][$proID]) mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$_POST['usr'].",SUP_PRO_ID=$proID"); + } + + echo"<div class='actionOK'>$lab_Field_site801_016</div>"; + } + ?> + + + <?php + $wynik = mysql_query("select USR_USERNAME,USR_FIRST_NAME,USR_LAST_NAME,USR_MAIL,USR_PHONE,USR_STATUS,USR_AUDIT_CD from sys_users where USR_ID=".$_GET['usr']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["USR_ID"]; + $sql_2 = $r["USR_USERNAME"]; + $sql_3 = $r["USR_FIRST_NAME"]; + $sql_4 = $r["USR_LAST_NAME"]; + $sql_5 = $r["USR_MAIL"]; + $sql_6 = $r["USR_PHONE"]; + $sql_7 = $r["USR_STATUS"]; + $sql_8 = $r["USR_AUDIT_CD"]; + + if ($sql_7=='0') $sql_7=$lab_Field_site801_008; + else if ($sql_7=='1') $sql_7=$lab_Field_site801_007; + else if ($sql_7=='2') $sql_7=$lab_Field_site801_009; + } + ?> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site801_002 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site801_011 ; ?></td> + <td class="desc_value"><?php echo $_GET['usr'] ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_001 ; ?></td> + <td class="desc_value"><?php echo $sql_2 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_002 ; ?></td> + <td class="desc_value"><?php echo $sql_3 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_003 ; ?></td> + <td class="desc_value"><?php echo $sql_4 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_004 ; ?></td> + <td class="desc_value"><?php echo $sql_5 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_005 ; ?></td> + <td class="desc_value"><?php echo $sql_6 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_006 ; ?></td> + <td class="desc_value"><?php echo $sql_7 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_010 ; ?></td> + <td class="desc_value"><?php echo $sql_8 ; ?></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site801_013 ; ?></td> + <td class="desc_value"> + <?php + $wynik = mysql_query("select PRO_NAME,PRO_DESCRIPTION from sys_user_profiles left join sys_profiles on PRO_ID=SUP_PRO_ID where SUP_USR_ID=".$_GET['usr']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_09 = $r["PRO_NAME"]; + $sql_10 = $r["PRO_DESCRIPTION"]; + echo"$sql_09 [$sql_10] <br/>"; + } + ?> + </td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site801_017 ; ?></td> + <td class="desc_value"><?php echo sqlValue("select count(1) from sys_users_access_log where UAL_USR_ID=".$_GET['usr']) ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_018 ; ?></td> + <td class="desc_value"><?php echo sqlStringValue("select max(UAL_AUDIT_CD) LDATE from sys_users_access_log where UAL_USR_ID=".$_GET['usr'], "LDATE") ; ?></td> + </tr> + + + + </table> + + + + + + + + + </div> + <div class="tag_buttons"> + <a href="?pg=site801"><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back ; ?>"></A> + <?php + if (!empty($_SESSION['site801_edit']) && $_SESSION['user']=='admin') + echo" + <a href=?pg=site801&usr=".$_GET['usr']."&rp=yes><INPUT class='btn btn-warning btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_ResPasswd'></A> + "; + if ((!empty($_SESSION['site801_edit']) && $sql_2!='admin') || $_SESSION['user']=='admin') + echo" + <a href=?pg=site801E&usr=".$_GET['usr']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + "; + + ?> + </div> + +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site801syn.php b/sites/site801syn.php new file mode 100644 index 0000000..2d4c5eb --- /dev/null +++ b/sites/site801syn.php @@ -0,0 +1,648 @@ +<?php +if (!empty($_SESSION['site801_edit'])) +{ + // ==================================================================================================== + // Synchronizacja kont z systemem SYNDIS. + // Strona pobiera przez SOAP pelny wykaz kont z SYNDIS (GetUserInfos), odrzuca te, ktore juz istnieja + // w sys_users i pokazuje pozostale do recznego wyboru. Operator decyduje, ktore konta zalozyc oraz + // jakie nadac im regiony i profile. + // Haslo nowego konta jest zawsze ustawiane wg wzorca [login].123 - tego wzorca wymaga logowanie + // z SYNDIS (index.php -> usrLoginAndSiteAccess($uName, $uName.".123", ...)). + // ==================================================================================================== + + // Adres uslugi SOAP systemu SYNDIS - konfigurowalny w sys_setup_parameters [SSP_NAME='SYNDIS_URL']. + // Plik WSDL nie jest tu potrzebny - zadanie budujemy i parsujemy sami, patrz komentarz nizej. + $syndisUrl = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SYNDIS_URL'", "SSP_VALUE"); + if (empty($syndisUrl)) $syndisUrl = "http://172.22.64.101:3615/"; + + // numer regionu z SYNDIS -> opis zapisywany w sys_users_regions + $regionMap = array(1 => 'P/Szczerców', 2 => 'P/Szczerców', 3 => 'Dębina', 4 => 'P/Bełchatów'); + $regionList = array('P/Szczerców', 'Dębina', 'P/Bełchatów'); + + // lista profili - pobierana raz, uzywana przy kazdym koncie + $profileArr = array(); + $wynikPro = mysql_query("select PRO_ID,PRO_NAME,PRO_DESCRIPTION from sys_profiles order by PRO_NAME"); + if($wynikPro)while ($rPro = mysql_fetch_array($wynikPro)) + { + // profil 1 [nieograniczony dostep] moze nadac tylko admin - tak jak na site801E + if ($rPro["PRO_ID"] != 1 || $_SESSION['user']=='admin') $profileArr[] = $rPro; + } + + + + // ==================================================================================================== + // ZAPIS - zakladanie wybranych kont + // ==================================================================================================== + if ($_POST['subUserSave']==$lab_ButtonName_Save) + { + if (!is_array($_POST['inAdd']) || count($_POST['inAdd'])==0) + echo"<div class='actionERROR'>$lab_Field_site801_028</div>"; + else + { + ?> + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site801_007 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site801_001 ;?></td> + <td class="label"><?php echo $lab_Field_site801_002 ;?></td> + <td class="label"><?php echo $lab_Field_site801_003 ;?></td> + <td class="label"><?php echo $lab_Field_site801_023 ;?></td> + <td class="label"><?php echo $lab_Field_site801_013 ;?></td> + <td class="label"><?php echo $lab_Field_site801_006 ;?></td> + </tr> + <?php + foreach ($_POST['inAdd'] as $idx => $chk) + { + $idx = (int) $idx; + $login = trim($_POST['inLogin'][$idx]); + if ($login=='') continue; + + $loginSql = mysql_real_escape_string($login); + + // konto moglo powstac w miedzyczasie - sprawdzamy tuz przed zapisem + if (sqlValue("select count(1) from sys_users where USR_USERNAME='".$loginSql."'")>0) + { + echo"<tr><td class='field_center'>".htmlspecialchars($login, ENT_QUOTES, 'UTF-8')."</td><td class='field_center' colspan='5'>$lab_Field_site801_030</td></tr>"; + continue; + } + + $fNameSql = mysql_real_escape_string(trim($_POST['inFName'][$idx])); + $lNameSql = mysql_real_escape_string(trim($_POST['inLName'][$idx])); + $mailSql = mysql_real_escape_string(trim($_POST['inMail'][$idx])); + $phoneSql = mysql_real_escape_string(trim($_POST['inPhone'][$idx])); + $status = (int) $_POST['inStatus'][$idx]; + if ($status!=0 && $status!=1 && $status!=2) $status=1; + + mysql_query("INSERT INTO sys_users SET USR_USERNAME='".$loginSql."',USR_PASSWORD=md5('".$loginSql.".123'),USR_FIRST_NAME='".$fNameSql."',USR_LAST_NAME='".$lNameSql."',USR_MAIL='".$mailSql."',USR_PHONE='".$phoneSql."',USR_STATUS='".$status."',USR_PRT_ID=1,USR_AUDIT_CU='".mysql_real_escape_string($_SESSION['user'])."',USR_AUDIT_CD=now()"); + + $newUsrID = sqlValue("select max(USR_ID) from sys_users where USR_USERNAME='".$loginSql."'"); + if ($newUsrID<=0) + { + echo"<tr><td class='field_center'>".htmlspecialchars($login, ENT_QUOTES, 'UTF-8')."</td><td class='field_center' colspan='5'>".mysql_error()."</td></tr>"; + continue; + } + + // profile + $addedPro = array(); + if (is_array($_POST['inProfile'][$idx])) + { + foreach ($_POST['inProfile'][$idx] as $proID => $proChk) + { + $proID = (int) $proID; + // profil 1 tylko dla admina - powtorzone po stronie zapisu, formularz nie jest zabezpieczeniem + if ($proID==1 && $_SESSION['user']!='admin') continue; + if ($proID>0 && sqlValue("select count(1) from sys_profiles where PRO_ID=".$proID)>0) + { + mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$newUsrID.",SUP_PRO_ID=".$proID); + $addedPro[] = sqlStringValue("select PRO_NAME from sys_profiles where PRO_ID=".$proID, "PRO_NAME"); + } + } + } + + // regiony - URG_ID jest AUTO_INCREMENT, nie podajemy go jawnie + $addedReg = array(); + if (is_array($_POST['inRegion'][$idx])) + { + foreach ($_POST['inRegion'][$idx] as $regIdx => $regChk) + { + $regIdx = (int) $regIdx; + if (isset($regionList[$regIdx])) + { + mysql_query("INSERT INTO sys_users_regions SET URG_USR_ID=".$newUsrID.",URG_DESC='".mysql_real_escape_string($regionList[$regIdx])."'"); + $addedReg[] = $regionList[$regIdx]; + } + } + } + + if ($status=='0') $statusDesc=$lab_Field_site801_008; + else if ($status=='1') $statusDesc=$lab_Field_site801_007; + else $statusDesc=$lab_Field_site801_009; + + echo" + <tr> + <td class='field_center'>".htmlspecialchars($login, ENT_QUOTES, 'UTF-8')."</td> + <td class='field_center'>".htmlspecialchars(trim($_POST['inFName'][$idx]), ENT_QUOTES, 'UTF-8')."</td> + <td class='field_center'>".htmlspecialchars(trim($_POST['inLName'][$idx]), ENT_QUOTES, 'UTF-8')."</td> + <td class='field_center'>".implode(', ', $addedReg)."</td> + <td class='field_center'>".implode(', ', $addedPro)."</td> + <td class='field_center'>$statusDesc</td> + </tr> + "; + } + ?> + </table> + </div> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site801" role="button"><?php echo $lab_ButtonName_BackToList; ?></a> + </div> + </div> + <?php + } + } + + + + // ==================================================================================================== + // LISTA - konta z SYNDIS, ktorych nie ma w SoftSPM + // ==================================================================================================== + else + { + // ================================================================================================ + // Pobranie listy kont z SYNDIS. + // + // UWAGA: swiadomie NIE uzywamy tu klasy SoapClient ani soap.php. + // Usluga SYNDIS [gSOAP 2.7] zwraca poprawne HTTP 200 z kompletna trescia, ale PHP nie potrafi + // jej sparsowac - konczy sie bledem "looks like we got no XML document" niezaleznie od opcji + // transportu [sprawdzone: domyslne, keep_alive=false, SOAP 1.2, kompresja gzip]. + // Odpowiedz deklaruje encoding="UTF-8", ale zawiera bajty, ktorych libxml nie akceptuje. + // Dlatego wysylamy zadanie recznie przez gniazdo i parsujemy odpowiedz po oczyszczeniu. + // ================================================================================================ + + // wysyla zadanie SOAP surowym POST-em i zwraca tresc odpowiedzi + if (!function_exists('syndisHttpSoap')) + { + function syndisHttpSoap($url, $action, $envelope, &$err, &$dump) + { + $err = ''; $dump = ''; + + $p = parse_url($url); + $host = isset($p['host']) ? $p['host'] : ''; + $port = isset($p['port']) ? (int) $p['port'] : 80; + $path = (isset($p['path']) && $p['path'] != '') ? $p['path'] : '/'; + if ($host == '') { $err = 'Niepoprawny adres uslugi: '.$url; return ''; } + + $errNo = 0; $errStr = ''; + $fp = @fsockopen($host, $port, $errNo, $errStr, 15); + if (!$fp) { $err = 'Brak polaczenia z '.$host.':'.$port.' - '.$errStr.' ['.$errNo.']'; return ''; } + + $req = "POST ".$path." HTTP/1.1\r\n"; + $req .= "Host: ".$host.":".$port."\r\n"; + $req .= "Content-Type: text/xml; charset=utf-8\r\n"; + $req .= "SOAPAction: \"".$action."\"\r\n"; + $req .= "User-Agent: SoftSPM\r\n"; + $req .= "Content-Length: ".strlen($envelope)."\r\n"; + $req .= "Connection: close\r\n\r\n".$envelope; + + stream_set_timeout($fp, 30); + fwrite($fp, $req); + + $raw = ''; + while (!feof($fp)) + { + $chunk = fread($fp, 8192); + if ($chunk === false || $chunk === '') break; + $raw .= $chunk; + if (strlen($raw) > 4000000) break; + } + $meta = stream_get_meta_data($fp); + fclose($fp); + + if ($meta['timed_out']) { $err = 'Przekroczono czas oczekiwania na odpowiedz uslugi.'; return ''; } + if ($raw === '') { $err = 'Usluga nie zwrocila zadnej tresci.'; return ''; } + + $pos = strpos($raw, "\r\n\r\n"); + $headers = ($pos === false) ? $raw : substr($raw, 0, $pos); + $body = ($pos === false) ? '' : substr($raw, $pos + 4); + $status = strtok($headers, "\r\n"); + + $dump = "----- ZADANIE -----\n".$req."\n\n----- NAGLOWKI ODPOWIEDZI -----\n".$headers + ."\n\n----- ODPOWIEDZ (".strlen($body)." B) -----\n".substr($body, 0, 8000); + + // odpowiedz dzielona na czesci [chunked] + if (stripos($headers, 'Transfer-Encoding: chunked') !== false) + { + $out = ''; $i = 0; + while ($i < strlen($body)) + { + $nl = strpos($body, "\r\n", $i); + if ($nl === false) break; + $len = hexdec(trim(substr($body, $i, $nl - $i))); + if ($len <= 0) break; + $out .= substr($body, $nl + 2, $len); + $i = $nl + 2 + $len + 2; + } + $body = $out; + } + + if (strpos($status, ' 200') === false) { $err = 'Usluga zwrocila: '.$status; return ''; } + if (trim($body) == '') { $err = 'Usluga zwrocila pusta tresc [HTTP 200].'; return ''; } + + return $body; + } + } + + // czysci i parsuje odpowiedz XML z SYNDIS + if (!function_exists('syndisParseXml')) + { + function syndisParseXml($body, &$err) + { + $err = ''; + + // 1. odciecie ewentualnych smieci przed deklaracja XML + $start = strpos($body, '<?xml'); + if ($start === false) $start = strpos($body, '<SOAP'); + if ($start !== false && $start > 0) $body = substr($body, $start); + + // 2. usuniecie znakow sterujacych niedozwolonych w XML 1.0 + $body = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/', '', $body); + + // 3. jesli tresc nie jest poprawnym UTF-8 - konwersja z Windows-1250 + // [SYNDIS deklaruje UTF-8, ale wysyla polskie znaki jednobajtowo] + if (!preg_match('//u', $body)) + { + $conv = @iconv('CP1250', 'UTF-8//IGNORE', $body); + if ($conv === false || $conv === '') $conv = @iconv('ISO-8859-2', 'UTF-8//IGNORE', $body); + if ($conv !== false && $conv !== '') $body = $conv; + } + + // 4. usuniecie prefiksow przestrzeni nazw - upraszcza dostep do wezlow + $body = preg_replace('/\s+xmlns(:[A-Za-z0-9_.-]+)?\s*=\s*"[^"]*"/', '', $body); + $body = preg_replace('/(<\/?)[A-Za-z0-9_.-]+:/', '$1', $body); + + libxml_use_internal_errors(true); + libxml_clear_errors(); + $xml = simplexml_load_string($body); + if ($xml === false) + { + $msgs = array(); + foreach (libxml_get_errors() as $le) $msgs[] = 'linia '.$le->line.': '.trim($le->message); + libxml_clear_errors(); + $err = 'Nie udalo sie odczytac odpowiedzi XML. '.implode(' | ', array_slice($msgs, 0, 5)); + return null; + } + return $xml; + } + } + + // ================================================================================================ + // Odtwarzanie loginu utraconego przez blad kodowania po stronie SYNDIS. + // + // SYNDIS odsyla polskie znaki jako '?' [poza litera 'o' z kreska] - informacja jest tracona + // u zrodla, wiec nie da sie jej wyliczyc. Mozna ja jednak ODTWORZYC I ZWERYFIKOWAC: + // podstawiamy w miejsce '?' kolejne polskie litery i pytamy usluge operacja GetUserInfo, + // ktory wariant faktycznie istnieje. To nie jest zgadywanie - to sprawdzenie u zrodla. + // Gdy zaden albo wiecej niz jeden wariant sie potwierdzi, login zostaje do recznej poprawy. + // ================================================================================================ + + // buduje warianty loginu przez podstawienie polskich liter w miejsce znakow zapytania + if (!function_exists('syndisLoginCandidates')) + { + function syndisLoginCandidates($login) + { + $marks = substr_count($login, '?'); + if ($marks == 0 || $marks > 2) return array(); + + $small = array('ą','ć','ę','ł','ń','ó','ś','ź','ż'); + $big = array('Ą','Ć','Ę','Ł','Ń','Ó','Ś','Ź','Ż'); + // przy dwoch niewiadomych ograniczamy sie do malych liter, zeby nie mnozyc zapytan + $set = ($marks == 1) ? array_merge($small, $big) : $small; + + $out = array($login); + for ($m = 0; $m < $marks; $m++) + { + $next = array(); + foreach ($out as $cand) + { + $q = strpos($cand, '?'); + if ($q === false) continue; + foreach ($set as $ch) $next[] = substr($cand, 0, $q).$ch.substr($cand, $q + 1); + } + $out = $next; + } + return $out; + } + } + + // sprawdza w SYNDIS, czy konto o podanym loginie istnieje + if (!function_exists('syndisLoginExists')) + { + function syndisLoginExists($url, $login, $enc) + { + $safe = str_replace(array('&','<','>'), array('&amp;','&lt;','&gt;'), $login); + if ($enc != 'UTF-8') + { + $conv = @iconv('UTF-8', $enc.'//IGNORE', $safe); + if ($conv === false || $conv === '') return false; + $safe = $conv; + } + + $env = '<?xml version="1.0" encoding="'.$enc.'"?>' + . '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"' + . ' xmlns:ns1="http://www.mikronika.com.pl/2014/11/24/spm/types">' + . '<SOAP-ENV:Body><ns1:GetUserInfoRequest><login>'.$safe.'</login>' + . '</ns1:GetUserInfoRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>'; + + $err = ''; $dump = ''; + $body = syndisHttpSoap($url, 'http://www.mikronika.com.pl/2014/11/24/spm/GetUserInfo', $env, $err, $dump); + if (!empty($err) || $body == '') return false; + + $e2 = ''; + $xml = syndisParseXml($body, $e2); + if ($xml === null) return false; + if (isset($xml->Body->Fault)) return false; + if (!isset($xml->Body->GetUserInfoResponse)) return false; + + $r = $xml->Body->GetUserInfoResponse; + return (trim((string) $r->login) != '' && trim((string) $r->fullName) != ''); + } + } + + // limity, zeby odtwarzanie loginow nie zablokowalo strony + $probeCalls = 0; + $probeMax = 200; + $probeStart = microtime(true); + $probeMaxSec = 25; + + $syndisError = ''; + $syndisStep = ''; + $syndisRaw = ''; + $syndisUsers = array(); + + $envelope = '<?xml version="1.0" encoding="UTF-8"?>' + . '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"' + . ' xmlns:ns1="http://www.mikronika.com.pl/2014/11/24/spm/types">' + . '<SOAP-ENV:Body><ns1:GetUserInfosRequest/></SOAP-ENV:Body></SOAP-ENV:Envelope>'; + + $body = syndisHttpSoap($syndisUrl, 'http://www.mikronika.com.pl/2014/11/24/spm/GetUserInfos', $envelope, $syndisError, $syndisRaw); + if (!empty($syndisError)) $syndisStep = 'POLACZENIE'; + + if (empty($syndisError)) + { + $xml = syndisParseXml($body, $syndisError); + if (!empty($syndisError)) $syndisStep = 'ODPOWIEDZ'; + + if (empty($syndisError)) + { + // fault zwrocony przez usluge + if (isset($xml->Body->Fault)) + { + $syndisStep = 'USLUGA'; + $syndisError = trim((string) $xml->Body->Fault->faultstring); + if ($syndisError == '') $syndisError = 'Usluga zwrocila SOAP Fault.'; + } + else + { + foreach ($xml->Body->GetUserInfosResponse->users as $node) + { + $one = array( + 'login' => (string) $node->login, + 'fullName' => (string) $node->fullName, + 'isActive' => ((string) $node->isActive == 'true' || (string) $node->isActive == '1'), + 'isAdmin' => ((string) $node->isAdmin == 'true' || (string) $node->isAdmin == '1'), + 'isEditForms' => ((string) $node->isEditForms == 'true' || (string) $node->isEditForms == '1'), + 'isEditReports' => ((string) $node->isEditReports == 'true' || (string) $node->isEditReports == '1'), + 'isConfig' => ((string) $node->isConfig == 'true' || (string) $node->isConfig == '1'), + 'isChangeValues' => ((string) $node->isChangeValues == 'true' || (string) $node->isChangeValues == '1'), + 'regions' => array() + ); + foreach ($node->regions as $reg) $one['regions'][] = (int) $reg; + $syndisUsers[] = $one; + } + + if (count($syndisUsers) == 0) + { + $syndisStep = 'ODPOWIEDZ'; + $syndisError = 'Usluga odpowiedziala, ale nie zwrocila zadnego konta.'; + } + } + } + } + + // odrzucamy konta juz istniejace w SoftSPM + $missing = array(); + foreach ($syndisUsers as $u) + { + $login = trim($u["login"]); + if ($login=='') continue; + if (sqlValue("select count(1) from sys_users where USR_USERNAME='".mysql_real_escape_string($login)."'")>0) continue; + $missing[] = $u; + } + + + if (!empty($syndisError)) + { + echo"<div class='actionERROR'>$lab_Field_site801_027<br/> + [".$syndisStep."] ".htmlspecialchars($syndisError, ENT_QUOTES, 'UTF-8')."<br/> + Adres uslugi: ".htmlspecialchars($syndisUrl, ENT_QUOTES, 'UTF-8')."</div>"; + + // podglad surowej komunikacji - do diagnostyki po stronie SYNDIS + if (!empty($syndisRaw)) + echo"<div class='tag100'><div class='head_tag'>Diagnostyka - surowa komunikacja SOAP</div><div class='tag'> + <pre style='white-space:pre-wrap;word-break:break-all;font-size:11px;max-height:420px;overflow:auto;margin:0;'>" + .htmlspecialchars($syndisRaw, ENT_QUOTES, 'UTF-8')."</pre></div></div>"; + echo"<div class='tag100'><div class=tag_buttons><a class='btn btn-info btn-sm' style='text-decoration: none;' href='./?pg=site801' role='button'>$lab_ButtonName_BackToList</a></div></div>"; + } + else if (count($missing)==0) + { + echo"<div class='actionOK'>$lab_Field_site801_026</div>"; + echo"<div class='tag100'><div class=tag_buttons><a class='btn btn-info btn-sm' style='text-decoration: none;' href='./?pg=site801' role='button'>$lab_ButtonName_BackToList</a></div></div>"; + } + else + { + ?> + <FORM ACTION="./?pg=site801syn" METHOD="POST" id="SyndisSyncForm"> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site801_005 ;?></div> + </div> + + <?php + // ostrzezenie zbiorcze, jesli SYNDIS przyslal loginy z utraconymi polskimi znakami + $anyBadChars = false; + foreach ($missing as $uChk) + if (strpos($uChk["login"], '?') !== false || strpos($uChk["fullName"], '?') !== false) { $anyBadChars = true; break; } + if ($anyBadChars) echo"<div class='actionERROR'>".$lab_Field_site801_033."</div>"; + ?> + + <?php + foreach ($missing as $idx => $u) + { + $login = trim($u["login"]); + $fullName = trim($u["fullName"]); + + // rozbicie pelnej nazwy z SYNDIS na imie i nazwisko - SYNDIS przekazuje ja w jednym polu + $spacePos = strpos($fullName, ' '); + if ($spacePos===false) { $fName=$fullName; $lName=''; } + else { $fName=substr($fullName,0,$spacePos); $lName=trim(substr($fullName,$spacePos+1)); } + + $isActive = ($u["isActive"]==true || $u["isActive"]==1); + + // SYNDIS gubi polskie znaki - odsyla je jako znak zapytania [poza litera 'o' z kreska]. + // Takiego loginu nie wolno zapisac bez poprawienia, bo nie zgodzi sie z logowaniem z SYNDIS. + $badChars = (strpos($login, '?') !== false || strpos($fullName, '?') !== false); + + // proba odtworzenia loginu i potwierdzenia go w SYNDIS + $loginFixed = ''; + $loginHints = array(); + if (strpos($login, '?') !== false && $probeCalls < $probeMax && (microtime(true) - $probeStart) < $probeMaxSec) + { + $hits = array(); + foreach (array('UTF-8', 'windows-1250') as $enc) + { + foreach (syndisLoginCandidates($login) as $cand) + { + if ($probeCalls >= $probeMax || (microtime(true) - $probeStart) >= $probeMaxSec) break; + $probeCalls++; + if (syndisLoginExists($syndisUrl, $cand, $enc)) $hits[] = $cand; + } + if (count($hits) > 0) break; + } + + // ufamy wynikowi tylko wtedy, gdy potwierdzil sie DOKLADNIE jeden wariant + if (count($hits) == 1) $loginFixed = $hits[0]; + else if (count($hits) > 1) $loginHints = $hits; + } + $loginValue = ($loginFixed != '') ? $loginFixed : $login; + + // uprawnienia z SYNDIS - do informacji dla operatora + $rights = array(); + if ($u["isAdmin"]==true || $u["isAdmin"]==1) $rights[]='isAdmin'; + if ($u["isEditForms"]==true || $u["isEditForms"]==1) $rights[]='isEditForms'; + if ($u["isEditReports"]==true || $u["isEditReports"]==1) $rights[]='isEditReports'; + if ($u["isConfig"]==true || $u["isConfig"]==1) $rights[]='isConfig'; + if ($u["isChangeValues"]==true || $u["isChangeValues"]==1) $rights[]='isChangeValues'; + + // regiony z SYNDIS - pojedynczy region przychodzi jako liczba, kilka jako tablica + $uRegionNo = array(); + $uRegionDesc = array(); + if (isset($u["regions"])) + { + foreach ((array) $u["regions"] as $regNo) + { + $regNo = (int) $regNo; + $uRegionNo[] = $regNo; + if (isset($regionMap[$regNo]) && !in_array($regionMap[$regNo], $uRegionDesc)) $uRegionDesc[] = $regionMap[$regNo]; + } + } + + // domyslny profil wg uprawnien z SYNDIS: operator dla edytujacych, w pozostalych przypadkach tylko odczyt + if (($u["isAdmin"]==true || $u["isAdmin"]==1) || ($u["isEditForms"]==true || $u["isEditForms"]==1)) $defProID=3; + else $defProID=2; + ?> + + <div class="tag100"> + <div class="head_tag"><?php echo htmlspecialchars($login, ENT_QUOTES, 'UTF-8')." &nbsp;&raquo;&nbsp; ".htmlspecialchars($fullName, ENT_QUOTES, 'UTF-8'); ?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site801_019 ; ?></td> + <td class="desc_value"><INPUT TYPE=CHECKBOX NAME="inAdd[<?php echo $idx; ?>]" VALUE="1"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_001 ; ?></td> + <td class="desc_value"> + <INPUT class="text50" TYPE="TEXT" NAME="inLogin[<?php echo $idx; ?>]" value="<?php echo htmlspecialchars($loginValue, ENT_QUOTES, 'UTF-8'); ?>" + oninput="var p=document.getElementById('pw_<?php echo $idx; ?>'); if(p) p.firstChild.nodeValue=this.value;"> + <?php + if ($loginFixed != '') + echo "<span style='color:#1f8a53;font-weight:bold;'>&nbsp;&nbsp;".$lab_Field_site801_035."</span>"; + else if (count($loginHints) > 0) + echo "<span style='color:#b3760a;font-weight:bold;'>&nbsp;&nbsp;".$lab_Field_site801_036.": " + .htmlspecialchars(implode(', ', $loginHints), ENT_QUOTES, 'UTF-8')."</span>"; + else if (strpos($login, '?') !== false) + echo "<span style='color:#c1272d;font-weight:bold;'>&nbsp;&nbsp;".$lab_Field_site801_034."</span>"; + ?> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_020 ; ?></td> + <td class="desc_value"><?php echo htmlspecialchars($fullName, ENT_QUOTES, 'UTF-8'); ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_021 ; ?></td> + <td class="desc_value"><?php echo (count($rights)>0 ? implode(', ', $rights) : '-'); ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_022 ; ?></td> + <td class="desc_value"><?php echo (count($uRegionNo)>0 ? implode(', ', $uRegionNo).' &nbsp;['.implode(', ', $uRegionDesc).']' : '-'); ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_002 ; ?></td> + <td class="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inFName[<?php echo $idx; ?>]" value="<?php echo htmlspecialchars($fName, ENT_QUOTES, 'UTF-8'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_003 ; ?></td> + <td class="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inLName[<?php echo $idx; ?>]" value="<?php echo htmlspecialchars($lName, ENT_QUOTES, 'UTF-8'); ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_004 ; ?></td> + <td class="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inMail[<?php echo $idx; ?>]" value=""></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_005 ; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" NAME="inPhone[<?php echo $idx; ?>]" value=""></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_006 ; ?></td> + <td class="desc_value"> + <select name="inStatus[<?php echo $idx; ?>]"> + <option value="1" <?php if($isActive) echo "selected";?> ><?php echo $lab_Field_site801_007 ; ?></option> + <option value="0" <?php if(!$isActive) echo "selected";?> ><?php echo $lab_Field_site801_008 ; ?></option> + <option value="2"><?php echo $lab_Field_site801_009 ; ?></option> + </select> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_024 ; ?></td> + <td class="desc_value"><b><span id="pw_<?php echo $idx; ?>"><?php echo htmlspecialchars($loginValue, ENT_QUOTES, 'UTF-8'); ?></span>.123</b> &nbsp;&nbsp; <?php echo $lab_Field_site801_025 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site801_023 ; ?></td> + <td class="desc_value"> + <?php + foreach ($regionList as $regIdx => $regDesc) + { + $regChecked = in_array($regDesc, $uRegionDesc) ? 'checked' : ''; + echo"<INPUT TYPE=CHECKBOX NAME=\"inRegion[$idx][$regIdx]\" VALUE=\"1\" $regChecked> $regDesc &nbsp;&nbsp;&nbsp;"; + } + ?> + </td> + </tr> + </table> + </div> + + <div class="head_tag"><?php echo $lab_Tag_site801_004 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="label"><?php echo $lab_Field_site801_013 ;?></td> + <td class="label"><?php echo $lab_Field_site801_014 ;?></td> + <td class="label"></td> + </tr> + <?php + foreach ($profileArr as $p) + { + $proChecked = ($p["PRO_ID"]==$defProID) ? 'checked' : ''; + echo" + <tr> + <td class='field_center'>".$p["PRO_NAME"]."</td> + <td class='field_center'>".$p["PRO_DESCRIPTION"]."</td> + <td class='field_center'><INPUT TYPE=CHECKBOX NAME=\"inProfile[$idx][".$p["PRO_ID"]."]\" VALUE=\"1\" $proChecked></td> + </tr> + "; + } + ?> + </table> + </div> + </div> + + <?php + } + ?> + + <div class="tag100"> + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site801" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subUserSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </div> + </FORM> + <?php + } + } + +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site802.php b/sites/site802.php new file mode 100644 index 0000000..4f541c4 --- /dev/null +++ b/sites/site802.php @@ -0,0 +1,66 @@ +<?php +if (!empty($_SESSION['site802'])) +{ +?> + + <?php + if (!empty($_SESSION['site802_edit']) && $_POST['subAProfileSave']==$lab_ButtonName_Save) + { + mysql_query("INSERT INTO sys_profiles SET PRO_NAME='".$_POST['inProfileName']."',PRO_DESCRIPTION='".$_POST['inProfileDesc']."'"); + $maxProID = sqlValue("select max(PRO_ID) from sys_profiles"); + + foreach ($_POST['inProfileID'] as $value) + { + mysql_query("INSERT INTO sys_profile_site SET PSA_PRO_ID=$maxProID, PSA_SAC_ID=$value"); + } + echo"<div class='actionOK'>$lab_Field_site802_007</div>"; + } + ?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site802_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site801_013 ;?></td> + <td class="label"><?php echo $lab_Field_site801_014 ;?></td> + </tr> + <?php + $wynik = mysql_query("select PRO_ID,PRO_NAME,PRO_DESCRIPTION from sys_profiles order by PRO_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PRO_ID"]; + $sql_2 = $r["PRO_NAME"]; + $sql_3 = $r["PRO_DESCRIPTION"]; + + echo" + <tr style='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site802inf&pro=$sql_1'".chr(34)."> + <td class='field_center'>$sql_2</td> + <td class='field_center'>$sql_3</td> + </tr> + "; + } + ?> + </table> + </div> + + + <?php + if (!empty($_SESSION['site802_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site802A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site802A.php b/sites/site802A.php new file mode 100644 index 0000000..1d9061d --- /dev/null +++ b/sites/site802A.php @@ -0,0 +1,67 @@ +<?php +if (!empty($_SESSION['site802_edit'])) +{ +?> + +<FORM ACTION="?pg=site802" METHOD="POST" id="EditProfileForm" class="form_valid"> +<INPUT type="hidden" name="pro" value="<?php echo$_GET['pro'] ;?>"> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site802_002 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site802_001 ; ?></td> + <TD CLASS="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inProfileName"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site802_002 ; ?></td> + <TD CLASS="desc_value"><INPUT class="text75" TYPE="TEXT" NAME="inProfileDesc"></td> + </tr> + </table> + </div> + + + + <div class="head_tag"><?php echo $lab_Tag_site802_003 ;?></div> + <div class="tag"> + <table class="desc_val"><br/> + + + <a class="multi_sel_add" id="select-all" href="#"><?php echo $lab_Field_site802_004 ;?></a> + / + <a class="multi_sel_del" id="deselect-all" href="#"><?php echo $lab_Field_site802_005 ;?></a> + + <select multiple id="public-methods" name="inProfileID[]"> + <?php + $wynik = mysql_query("select SAC_ID,SAC_NAME from sys_site_access order by SAC_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_01 = $r["SAC_ID"]; + $sql_02 = $r["SAC_NAME"]; + echo"<option value='$sql_01'>$sql_02</option>"; + + } + ?> + </select> + </table> + </div> + + + + + <div class="tag100"> + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site802'"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subAProfileSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + </div> + +</div> +</FORM> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site802E.php b/sites/site802E.php new file mode 100644 index 0000000..6036a34 --- /dev/null +++ b/sites/site802E.php @@ -0,0 +1,91 @@ +<?php +if (!empty($_SESSION['site802_edit'])) +{ +?> + + + <?php + $wynik = mysql_query("select PRO_ID,PRO_NAME,PRO_DESCRIPTION from sys_profiles where PRO_ID=".$_GET['pro']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PRO_ID"]; + $sql_2 = $r["PRO_NAME"]; + $sql_3 = $r["PRO_DESCRIPTION"]; + } + + ?> + + +<FORM ACTION="?pg=site802inf" METHOD="POST" id="EditProfileForm" class="form_valid"> +<INPUT type="hidden" name="pro" value="<?php echo$_GET['pro'] ;?>"> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site802_002 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site802_001 ; ?></td> + <TD CLASS="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inProfileName" value="<?php echo $sql_2 ;?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site802_002 ; ?></td> + <TD CLASS="desc_value"><INPUT class="text75" TYPE="TEXT" NAME="inProfileDesc" value="<?php echo $sql_3 ;?>"></td> + </tr> + </table> + </div> + + + + + + + <div class="head_tag"><?php echo $lab_Tag_site802_003 ;?></div> + <div class="tag"> + <table class="desc_val"><br/> + + + <a class="multi_sel_add" id="select-all" href="#"><?php echo $lab_Field_site802_004 ;?></a> + / + <a class="multi_sel_del" id="deselect-all" href="#"><?php echo $lab_Field_site802_005 ;?></a> + + <select multiple id="public-methods" name="inProfileID[]"> + <?php + $wynik = mysql_query("select SAC_ID,SAC_NAME from sys_site_access order by SAC_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_01 = $r["SAC_ID"]; + $sql_02 = $r["SAC_NAME"]; + + if (sqlValue("select count(1) from sys_profile_site where PSA_PRO_ID=".$_GET['pro']." and PSA_SAC_ID=$sql_01")>0) + echo"<option value='$sql_01' selected>$sql_02</option>"; + else + echo"<option value='$sql_01'>$sql_02</option>"; + + } + ?> + </select> + + + + + </table> + </div> + + + + + <div class="tag100"> + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site802inf&pro=<?php echo $_GET['pro'];?>'"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subEProfileSave" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </div> + +</div> +</FORM> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site802inf.php b/sites/site802inf.php new file mode 100644 index 0000000..e39ae2a --- /dev/null +++ b/sites/site802inf.php @@ -0,0 +1,93 @@ +<?php +if (!empty($_SESSION['site802'])) +{ +?> + + <?php + if (empty($_GET['pro'])) $_GET['pro']=$_POST['pro']; + + if (!empty($_SESSION['site802_edit']) && $_POST['subEProfileSave']==$lab_ButtonName_Update) + { + mysql_query("UPDATE sys_profiles SET PRO_NAME='".$_POST['inProfileName']."',PRO_DESCRIPTION='".$_POST['inProfileDesc']."' WHERE PRO_ID=".$_POST['pro']); + mysql_query("DELETE FROM sys_profile_site WHERE PSA_PRO_ID=".$_POST['pro']); + + foreach ($_POST['inProfileID'] as $value) + { + mysql_query("INSERT INTO sys_profile_site SET PSA_PRO_ID=".$_POST['pro'].", PSA_SAC_ID=$value"); + } + echo"<div class='actionOK'>$lab_Field_site802_006</div>"; + } + ?> + + + + + <?php + $wynik = mysql_query("select PRO_ID,PRO_NAME,PRO_DESCRIPTION from sys_profiles where PRO_ID=".$_GET['pro']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["PRO_ID"]; + $sql_2 = $r["PRO_NAME"]; + $sql_3 = $r["PRO_DESCRIPTION"]; + } + + ?> + + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site802_002 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site802_001 ; ?></td> + <td class="desc_value"><?php echo $sql_2 ; ?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site802_002 ; ?></td> + <td class="desc_value"><?php echo $sql_3 ; ?></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site802_003 ; ?></td> + <td class="desc_value"> + <?php + $wynik = mysql_query("select SAC_NAME from sys_profile_site left join sys_site_access on PSA_SAC_ID=SAC_ID where PSA_PRO_ID=".$_GET['pro']." order by SAC_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_04 = $r["SAC_NAME"]; + echo"$sql_04 <br/>"; + } + ?> + </td> + </tr> + + + </table> + + + + + + + + + </div> + <div class="tag_buttons"> + <a href="?pg=site802"><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back ; ?>"></A> + <?php + if (!empty($_SESSION['site802_edit'])) + echo" + <a href=?pg=site802E&pro=".$_GET['pro']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + "; + ?> + </div> + +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site803.php b/sites/site803.php new file mode 100644 index 0000000..576c76a --- /dev/null +++ b/sites/site803.php @@ -0,0 +1,114 @@ +<?php +if (!empty($_SESSION['site803'])) +{ +?> + + +<?php +if ($_POST['subManufSave']==$lab_ButtonName_Save && strlen($_POST['inManufName'])>2) + { + mysql_query("INSERT INTO seg_manufacturers SET MCF_NAME='".$_POST['inManufName']."',MCF_CATEGORY='".$_POST['inManufCat']."',MCF_ADDRESS='".$_POST['inManufAdd']."',MCF_POST='".$_POST['inManufPost']."',MCF_CITY='".$_POST['inManufCity']."',MCF_MAIL='".$_POST['inManufMail']."',MCF_PHONE='".$_POST['inManufPhone']."',MCF_CONT_PERSON='".$_POST['inManufConPers']."',MCF_DESCTRIPTION='".$_POST['inManufDesc']."'"); + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + } + +if ($_POST['subManufUpdate']==$lab_ButtonName_Update && strlen($_POST['inManufName'])>2) + { + mysql_query("update seg_manufacturers SET MCF_NAME='".$_POST['inManufName']."',MCF_CATEGORY='".$_POST['inManufCat']."',MCF_ADDRESS='".$_POST['inManufAdd']."',MCF_POST='".$_POST['inManufPost']."',MCF_CITY='".$_POST['inManufCity']."',MCF_MAIL='".$_POST['inManufMail']."',MCF_PHONE='".$_POST['inManufPhone']."',MCF_CONT_PERSON='".$_POST['inManufConPers']."',MCF_DESCTRIPTION='".$_POST['inManufDesc']."' where MCF_ID=".$_POST['mf']); + echo"<div class='actionOK'>$lab_Field_site803_015</div>"; + } + + + + //usuwanie + // ================================================================================== + if (!empty($_GET['param'])) + { + $tpmArray=explode(',', $_GET['param']); + + if ($tpmArray[0]>0 && $tpmArray[1]=='del' && $tpmArray[2]==md5($tpmArray[0])) + { + // Sprawdza warunek, czy nie jest powiązany z jakimś stanem + if ( + sqlValue("select count(*) from seg_engines where ENG_MCF_ID=".$tpmArray[0])>0 + || sqlValue("select count(*) from seg_equipments where EQU_MCF_ID=".$tpmArray[0])>0 + || sqlValue("select count(*) from seg_pumps where PUP_MCF_ID=".$tpmArray[0])>0 + || sqlValue("select count(*) from seg_reservoirs_piezometers where SRP_MCF_ID=".$tpmArray[0])>0 + || sqlValue("select count(*) from seg_wells where WLL_MCF_ID=".$tpmArray[0])>0 + ) + { + echo"<div class='actionERROR'>$lab_DeleteRecordNotification_003</div>"; + delSearchSessionData(); + } + else { + mysql_query("DELETE FROM seg_manufacturers WHERE MCF_ID=".$tpmArray[0]); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + delSearchSessionData(); + } + + } + } + // ================================================================================== + + + +?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site803_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site803_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site803_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site803_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site803_005 ;?></TD> + <TD class="label"><?php echo $lab_Field_site803_004 ;?></TD> + </TR> + + <?php + $wynik = mysql_query("select MCF_ID,MCF_NAME,MCF_CATEGORY,MCF_ADDRESS,MCF_POST,MCF_CITY,MCF_PHONE,MCF_MAIL from seg_manufacturers order by MCF_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_803_MCF_ID = $r["MCF_ID"]; + $sql_803_MCF_NAME = $r["MCF_NAME"]; + $sql_803_MCF_CATEGORY = $r["MCF_CATEGORY"]; + + $sql_803_MCF_MCF_ADDRESS = $r["MCF_ADDRESS"]; + $sql_803_MCF_MCF_POST = $r["MCF_POST"]; + $sql_803_MCF_MCF_CITY = $r["MCF_CITY"]; + $sql_803_MCF_PHONE = $r["MCF_PHONE"]; + $sql_803_MCF_MAIL = $r["MCF_MAIL"]; + + if (strlen($sql_803_MCF_MCF_POST)>0) $sql_803_MCF_MCF_ADDRESS .= "<br>".$sql_803_MCF_MCF_POST." ".$sql_803_MCF_MCF_CITY; + + echo" + <TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site803inf&mf=$sql_803_MCF_ID'".chr(34)."> + <TD class='field_left'>$sql_803_MCF_NAME</TD> + <TD class='field_left'>$sql_803_MCF_CATEGORY</TD> + <TD class='field_left'>$sql_803_MCF_MCF_ADDRESS</TD> + <TD class='field_left'>$sql_803_MCF_PHONE</TD> + <TD class='field_left'>$sql_803_MCF_MAIL</TD> + </TR> + "; + } + ?> + </table> + </div> + + <?php + if (!empty($_SESSION['site803_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site803A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site803A.php b/sites/site803A.php new file mode 100644 index 0000000..2f7809b --- /dev/null +++ b/sites/site803A.php @@ -0,0 +1,62 @@ +<?php +if (!empty($_SESSION['site803_edit'])) +{ +?> + +<div class="tag100"> +<FORM ACTION="?pg=site803" METHOD="POST" id="ManufacturesForm" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site803A_001 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inManufName"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_002; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inManufCat"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_003; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inManufAdd"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_007; ?></TD> + <TD CLASS="desc_value"><INPUT class="postcode" TYPE="TEXT" NAME="inManufPost"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_008; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inManufCity"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_004; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inManufMail"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_005; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inManufPhone"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_009; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inManufConPers"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_010; ?></TD> + <TD CLASS="desc_value"><textarea NAME="inManufDesc"></textarea></TD> + </TR> + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site803'"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subManufSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site803E.php b/sites/site803E.php new file mode 100644 index 0000000..ed013fc --- /dev/null +++ b/sites/site803E.php @@ -0,0 +1,81 @@ +<?php +if (!empty($_SESSION['site803_edit'])) +{ +?> + + +<?php +$wynik = mysql_query("select MCF_NAME,MCF_CATEGORY,MCF_ADDRESS,MCF_POST,MCF_CITY,MCF_PHONE,MCF_MAIL,MCF_CONT_PERSON,MCF_DESCTRIPTION from seg_manufacturers where MCF_ID=".$_GET['mf']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["MCF_NAME"]; + $sql_2 = $r["MCF_CATEGORY"]; + $sql_3 = $r["MCF_ADDRESS"]; + $sql_4 = $r["MCF_POST"]; + $sql_5 = $r["MCF_CITY"]; + $sql_6 = $r["MCF_MAIL"]; + $sql_7 = $r["MCF_PHONE"]; + $sql_8 = $r["MCF_CONT_PERSON"]; + $sql_9 = $r["MCF_DESCTRIPTION"]; + } + +?> + +<div class="tag100"> +<FORM ACTION="?pg=site803" METHOD="POST" id="ManufacturesForm" class="form_valid"> +<INPUT TYPE="HIDDEN" NAME="mf" VALUE="<?php echo $_GET['mf']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site803E_001 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inManufName" VALUE="<?php echo $sql_1; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_002; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inManufCat" VALUE="<?php echo $sql_2; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_003; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inManufAdd" VALUE="<?php echo $sql_3; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_007; ?></TD> + <TD CLASS="desc_value"><INPUT class="postcode" TYPE="TEXT" NAME="inManufPost" VALUE="<?php echo $sql_4; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_008; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inManufCity" VALUE="<?php echo $sql_5; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_004; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inManufMail" VALUE="<?php echo $sql_6; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_005; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" NAME="inManufPhone" VALUE="<?php echo $sql_7; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_009; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50" TYPE="TEXT" NAME="inManufConPers" VALUE="<?php echo $sql_8; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_010; ?></TD> + <TD CLASS="desc_value"><textarea NAME="inManufDesc"><?php echo $sql_9; ?></textarea></TD> + </TR> + </TABLE> + </div> + + <div class="tag_buttons"> + + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site803'"> + <INPUT class="btn btn-success btn-sm" TYPE="SUBMIT" NAME="subManufUpdate" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + + </div> +</FORM> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site803inf.php b/sites/site803inf.php new file mode 100644 index 0000000..ebaa6d8 --- /dev/null +++ b/sites/site803inf.php @@ -0,0 +1,83 @@ +<?php +if (!empty($_SESSION['site803'])) +{ +?> + +<?php +$wynik = mysql_query("select MCF_NAME,MCF_CATEGORY,MCF_ADDRESS,MCF_POST,MCF_CITY,MCF_PHONE,MCF_MAIL,MCF_CONT_PERSON,MCF_DESCTRIPTION from seg_manufacturers where MCF_ID=".$_GET['mf']); +if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["MCF_NAME"]; + $sql_2 = $r["MCF_CATEGORY"]; + $sql_3 = $r["MCF_ADDRESS"]; + $sql_4 = $r["MCF_POST"]; + $sql_5 = $r["MCF_CITY"]; + $sql_6 = $r["MCF_MAIL"]; + $sql_7 = $r["MCF_PHONE"]; + $sql_8 = $r["MCF_CONT_PERSON"]; + $sql_9 = $r["MCF_DESCTRIPTION"]; + } + +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site803E_001 ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_001; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_1; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_002; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_2; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_003; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_3; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_007; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_4; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_008; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_5; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_004; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_6; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_005; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_7; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_009; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_8; ?></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_010; ?></TD> + <TD CLASS="desc_value"><?php echo $sql_9; ?></TD> + </TR> + </TABLE> + </div> + + <div class="tag_buttons"> + <a href="./?pg=site803"><INPUT class="btn btn-info btn-sm" TYPE="BUTTON" VALUE="<?php echo $lab_ButtonName_Back; ?>"></A> + <?php + if (!empty($_SESSION['site803_edit'])) + echo" + <a href=./?pg=site803&param=".$_GET['mf'].",del,".md5($_GET['mf'])." onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Delete'></A> + <a href=./?pg=site803E&mf=".$_GET['mf']."><INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Modify'></A> + "; + ?> + + </div> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site804.php b/sites/site804.php new file mode 100644 index 0000000..8751df6 --- /dev/null +++ b/sites/site804.php @@ -0,0 +1,29 @@ +<div class="tag100"> +<FORM ACTION="?pg=site804Z" METHOD="POST" id="ChangeUserPasswordForm" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site804_001 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site804_001 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="password" NAME="inOldPass"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site804_002 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" id="inNewPass" TYPE="password" NAME="inNewPass"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site804_003 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" id="inReNewPass" TYPE="password" NAME="inReNewPass"></td> + </tr> + </table> + </div> + + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='./?pg=site401'"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subNewPassSave' VALUE="<?php echo $lab_ButtonName_Save; ?>"> + </div> + +</FORM> +</div> + \ No newline at end of file diff --git a/sites/site804Z.php b/sites/site804Z.php new file mode 100644 index 0000000..8cda9b7 --- /dev/null +++ b/sites/site804Z.php @@ -0,0 +1,21 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cP//vmMOZoIbR5O1rym2Lh3YyaAA4jK8VJFyC+a99pSXnECBgjJtq+2lHXRfz9CLSWM94ARKX +aYWzbqb2x7vC4792sfYiaLQyuV+OZLSzPI9A43t7r47GvkGW8VM2XegNxWnSN8BO1I6GeyiIO8qo +MCLjjGH4zF5GMRXETtCdWRtBtdLsDdTdJb4fjR/BJ/bmb7mVU7f3feOnw+2vWF78dYWUDKaB0VgM +RndTEGGhMM6rLPY7RDjg21YOg2/VVARQ9u72uNtBq/nSaWvaMQ9BAbZfd8+ugSJXgyaEUK1V/ghR +PhmB0V8Vvx0qs1EarECso8HebBSMggSptcACxafjHzGu0yRjPi1pYZPyFw6ApCy0E6J9Z1u+ngg7 +tmRsNyC2hMrUTaHnO60mVCZdKKK2PgAlbND+cfVnEtnHCbFY82cmKgpsaQpuFwpDIwvSDGqLtVTv +M3ME9a25N2Hiljr4lal7jcLXPINimSqb0PTNy3FTJD6axPJTVb2aZI0CUCElmBt3Y53r6oWYpCE3 +YWKP1P3/3PR5LBHpilCxQzzRPBKEP2ltT0EnW7EycbnXauoogogGW+oFyFriDKWGZKCNMHrqAiej +zyJy4ZHHDQqFkbaCUls0jMY9T7/m7Axen4h/iWvRP4xyK2aNs7HUTdv9+f7O0dm+IFc2jRonRh3L +96ut9q3oGXGhR52GNA5CkuBIeINYuXAneyj/78Ri4b7jITEsHFsDrzFJIRzeWgc7KEzsZolDj2sU +ITX7KrrSnwWztorFCb2EbLrwieS6dfxQHv4nikqkfEPq5IB5KTvPas7k6KpNNj+g7SBXUgPzbQfY +ZNXsEMBqWWaGs5bk2jxW0xTt3vQVB9TKM/MjkiTWXvpk+/u2nFoTyRumWnXI8VFHRNhVhd8b3Lc4 +3/Ys66WhyxI4Bx5kQCMrMOLeNxrA1yxwTkevJwqNL/saE+rmtK9V0gqNxvdxgJLA5p+YcHPcUC5A ++o37OD/6M4178maDsaAP1p7dKgxUZXdBexjLGOPOuEYMBIX5cLHQ+Lr0aEEXaFisAtzepAIrm6vS +3X4JtQdxHBxNZcr+ybRlPoRR3g9R4KaVTubAG2GGBpCKOSiS3vWdO8ascUzXfFF/MaZ7zIxl27a4 +6fYMN3Lpzvrj70gQQe7/Oj/1Ain0N5ZcAC0jf4xX70awDCTFwd5uGc0wXeNBsBi8MOYVqB9+wBQY +HzUMW5x1BXkuTXtmX/Vs+Kzg/JjRc8jY9KTKdZDmN25KRYIpSDBoDaW8FlDW8ZN5kpDBxmkCiSY3 +ccm57i2r47IBpW== \ No newline at end of file diff --git a/sites/site805.php b/sites/site805.php new file mode 100644 index 0000000..75d157e --- /dev/null +++ b/sites/site805.php @@ -0,0 +1,104 @@ +<?php +if (!empty($_SESSION['site805'])) +{ +?> + + +<?php +if (!empty($_FILES['inKnowledgeFile']['name']) && $_POST['subKnowledgerSave']==$lab_ButtonName_Add ) +{ + $fileName = $_FILES['inKnowledgeFile']['name']; + $tmpName = $_FILES['inKnowledgeFile']['tmp_name']; + $fileSize = $_FILES['inKnowledgeFile']['size']; + $fileType = $_FILES['inKnowledgeFile']['type']; + $fp = fopen($tmpName, 'r'); + $content = fread($fp, filesize($tmpName)); + $content = addslashes($content); + fclose($fp); + $fileName = addslashes($fileName); + mysql_query("INSERT INTO seg_knowledge_base SET SKB_CATEGORY_ID='".$_POST['inKnowledgeCat']."',SKB_FILE_TYPE='$fileType',SKB_FILE_SIZE='$fileSize',SKB_FILE_NAME=LOWER('".delPolishAndBlankCharactersFromFileName($fileName)."'),SKB_FILE_DESC='".$_POST['inKnowledgeNAme']."',SKB_FILE='$content',SKB_STATUS='1',SKB_AUDIT_CU='".$_SESSION['user']."',SKB_AUDIT_CD=now()"); + echo"<div class='actionOK'>$lab_Field_site805_005</div>"; +} +?> +<?php +if (!empty($_SESSION['site805_edit']) && $_GET['del']>0) + mysql_query("UPDATE seg_knowledge_base SET SKB_STATUS='0' WHERE SKB_ID=".$_GET['del']); +?> + + <?php + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + ?> + + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site801_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"></td> + <td class="label"><?php echo $lab_Field_site805_006 ;?></td> + <td class="label"><?php echo $lab_Field_site805_007 ;?></td> + <td class="label"><?php echo $lab_Field_site805_008 ;?></td> + <td class="label"><?php echo $lab_Field_site805_009 ;?></td> + <?php + if (!empty($_SESSION['site805_edit'])) + echo"<td class='label'></td>"; + ?> + + </tr> + + <?php + $wynik = mysql_query("select SKB_ID,SUBSTRING_INDEX(SKB_FILE_NAME, '.', -1) ICO,SKB_FILE_DESC,SKB_FILE_SIZE,SKB_CATEGORY_ID,SKB_AUDIT_CU,SKB_AUDIT_CD from seg_knowledge_base where SKB_STATUS=1 order by SKB_CATEGORY_ID,SKB_FILE_DESC,ICO"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["SKB_ID"]; + $vICO = $r["ICO"]; + $sql_3 = $r["SKB_FILE_DESC"]; + $sql_4 = $r["SKB_FILE_SIZE"]; + $sql_5 = $r["SKB_CATEGORY_ID"]; + $sql_7 = $r["SKB_AUDIT_CU"]; + $sql_8 = $r["SKB_AUDIT_CD"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo" + <tr> + <td class='field_center'><img src=$icoFile></td> + <td class='field_left'>$sql_3</td> + <td class='field_center'>".sqlStringValue("select $decFieldLang from sys_dictionaries where DIC_ID=$sql_5",$decFieldLang)."</td> + <td class='field_right'>$sql_4</td> + <td class='field_center'>$sql_7<br/>$sql_8</td>"; + if (!empty($_SESSION['site805_edit'])) + echo"<td class='field_center'><img src='./images/bin_ico.png' title='$lab_ButtonName_Delete' style='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site805&del=$sql_1'".chr(34)."></td>"; + echo" + </tr> + "; + } + ?> + </table> + </div> + + <?php + if (!empty($_SESSION['site805_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site805A'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site805A.php b/sites/site805A.php new file mode 100644 index 0000000..d634ceb --- /dev/null +++ b/sites/site805A.php @@ -0,0 +1,43 @@ +<?php +if (!empty($_SESSION['site805_edit'])) +{ +?> + + +<div class="tag100"> + <FORM ACTION="?pg=site805" enctype="multipart/form-data" METHOD="POST" id="AddKnowledgeFile" class="form_valid"> + <div class="head_tag"><?php echo $lab_Tag_site805_002 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site805_001 ; ?></td> + <td class="desc_value"><INPUT class="text75" TYPE="file" NAME="inKnowledgeFile"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site805_002 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inKnowledgeNAme"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site805_004 ; ?></td> + <td class="desc_value"><?php echo selectFromDictionary('inKnowledgeCat', 'KNOWLEDGE_BASE_CATEGORY'); ?></td> + </tr> + + </table> + </div> + + + + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site805'"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subKnowledgerSave' VALUE="<?php echo $lab_ButtonName_Add; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site806.php b/sites/site806.php new file mode 100644 index 0000000..0c6a08e --- /dev/null +++ b/sites/site806.php @@ -0,0 +1,89 @@ +<?php +if (!empty($_SESSION['site806'])) +{ +?> + + + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site806_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site806_001 ;?></td> + <td class="label"><?php echo $lab_Field_site806_002 ;?></td> + </tr> + + <?php + //$wynik = mysql_query("select DIC_TYPE,count(DIC_TYPE) DIC_COUNT from sys_dictionaries where DIC_TYPE in ('WELL_PARAMETERS','WELL_TECHNICAL_PARAMETERS','WELL_ELECTRICAL_PARAMETERS','WELL_CHEMICAL_PARAMETERS_GR1','WELL_CHEMICAL_PARAMETERS_GR2','WELL_CHEMICAL_PARAMETERS_GR3','KNOWLEDGE_BASE_CATEGORY') group by DIC_TYPE"); + $wynik = mysql_query("select DIC_TYPE,count(DIC_TYPE) DIC_COUNT from sys_dictionaries where DIC_TYPE in + ('WELL_CHEMICAL_PARAMETERS_GR1','WELL_CHEMICAL_PARAMETERS_GR2','WELL_CHEMICAL_PARAMETERS_GR3','KNOWLEDGE_BASE_CATEGORY','ORDER_DELIVERY','WELL_STATUS_LEVEL_01','WELL_STATUS_LEVEL_02','WELL_STATUS_LEVEL_03','WELL_STATUS_LEVEL_04','PIEZO_STATUS_LEVEL_01','PIEZO_STATUS_LEVEL_02','PIEZO_STATUS_LEVEL_03','WELL_SYSTEM_TYPE','PIEZO_SYSTEM_TYPE','WELL_DELETE_REASON','PIEZO_DELETE_REASON','WATER_INTAKES_TYPE','HOLE_CARD_LITOL', + 'HOLE_CARD_COLUMN_TYPE','HOLE_CARD_FILTER_TYPE','HOLE_CARD_FILLING_TYPE','HOLE_CARD_DRILLING_METHOD', + 'HOLE_CARD_LOCATION','HOLE_CARD_LOCATION_REASON','SYS_UNITS','DEV_RESOURCES','WELL_STATUS_OFF','CASSATION_REASON' + + + ) group by DIC_TYPE"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["DIC_TYPE"]; + $sql_2 = $r["DIC_COUNT"]; + + if ($sql_1=="WELL_PARAMETERS") $resLabel = $lab_Field_site806_003; + else if ($sql_1=="WELL_TECHNICAL_PARAMETERS") $resLabel = $lab_Field_site806_004; + else if ($sql_1=="WELL_ELECTRICAL_PARAMETERS") $resLabel = $lab_Field_site806_005; + else if ($sql_1=="WELL_CHEMICAL_PARAMETERS_GR1") $resLabel = $lab_Tag_site401_004; + else if ($sql_1=="WELL_CHEMICAL_PARAMETERS_GR2") $resLabel = $lab_Tag_site401_006; + else if ($sql_1=="WELL_CHEMICAL_PARAMETERS_GR3") $resLabel = $lab_Tag_site401_007; + else if ($sql_1=="KNOWLEDGE_BASE_CATEGORY") $resLabel = $lab_Field_site806_006; + else if ($sql_1=="ORDER_DELIVERY") $resLabel = $lab_SubMenu_810.' - '.$lab_Field_site810_025; + else if ($sql_1=="WELL_STATUS_LEVEL_01") $resLabel = "Status studni – poziom pierwszy"; + else if ($sql_1=="WELL_STATUS_LEVEL_02") $resLabel = "Status studni – poziom drugi (studnie czynne)"; + else if ($sql_1=="WELL_STATUS_LEVEL_03") $resLabel = "Status studni – poziom drugi (studnie nieczynne)"; + else if ($sql_1=="WELL_STATUS_LEVEL_04") $resLabel = "Status studni – poziom drugi (studnie rezerwowe)"; + else if ($sql_1=="PIEZO_STATUS_LEVEL_01") $resLabel = "Status piezometrów – poziom pierwszy"; + else if ($sql_1=="PIEZO_STATUS_LEVEL_02") $resLabel = "Status piezometrów – poziom drugi (czynne)"; + else if ($sql_1=="PIEZO_STATUS_LEVEL_03") $resLabel = "Status piezometrów – poziom drugi (nieczynne)"; + else if ($sql_1=="WELL_SYSTEM_TYPE") $resLabel = "Typ/Rodzaj studni"; + else if ($sql_1=="PIEZO_SYSTEM_TYPE") $resLabel = "Typ/Rodzaj piezometrów"; + else if ($sql_1=="WELL_DELETE_REASON") $resLabel = "Studnie – przyczyny zdjęcia z eksploatacji"; + else if ($sql_1=="PIEZO_DELETE_REASON") $resLabel = "Piezometry – przyczyny zdjęcia z eksploatacji"; + else if ($sql_1=="WATER_INTAKES_TYPE") $resLabel = "Typ ujęć"; + else if ($sql_1=="HOLE_CARD_LITOL") $resLabel = "Hydrogeologia – litologia"; + else if ($sql_1=="HOLE_CARD_COLUMN_TYPE") $resLabel = "Hydrogeologia – typy kolumn"; + else if ($sql_1=="HOLE_CARD_FILTER_TYPE") $resLabel = "Hydrogeologia – typy filtrów"; + else if ($sql_1=="HOLE_CARD_FILLING_TYPE") $resLabel = "Hydrogeologia – rodzaj obsypki"; + else if ($sql_1=="HOLE_CARD_DRILLING_METHOD") $resLabel = "Hydrogeologia – sposób wiercenia"; + else if ($sql_1=="HOLE_CARD_LOCATION") $resLabel = "Hydrogeologia – zmiana umiejscowienia [lokalizacja]"; + else if ($sql_1=="HOLE_CARD_LOCATION_REASON") $resLabel = "Hydrogeologia – zmiana umiejscowienia [przyczyna zmiany]"; + else if ($sql_1=="SYS_UNITS") $resLabel = "Jednostki"; + else if ($sql_1=="WELL_STATUS_OFF") $resLabel = "Postoje"; + else if ($sql_1=="CASSATION_REASON") $resLabel = "Przyczyny kasacji"; + + else if ($sql_1=="DEV_RESOURCES") $resLabel = "Obiekty - dostępność"; + + + + + + + + + echo" + <tr style='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site806inf&dic=$sql_1'".chr(34)."> + <td class='field_left'>$resLabel</td> + <td class='field_center'>$sql_2</td> + </tr> + "; + } + ?> + </table> + </div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site806A.php b/sites/site806A.php new file mode 100644 index 0000000..3cfcef1 --- /dev/null +++ b/sites/site806A.php @@ -0,0 +1,44 @@ +<?php +if (!empty($_SESSION['site806'])) +{ +?> + + +<div class="tag100"> + <FORM ACTION="?pg=site806inf" METHOD="POST" id="AddParamInDictionary" class="form_valid"> + <input type="hidden" name="dic" value="<?php echo $_GET['dic']; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site806_002 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc">Nazwa wyświetlana [Polish]</td> + <td class="desc_value"><textarea name="inDictionaryPolish" required></textarea></td> + </tr> + <tr> + <td class="desc">Name [English]</td> + <td class="desc_value"><textarea name="inDictionaryEnglish" disabled></textarea></td> + </tr> + <tr> + <td class="desc">Name [German]</td> + <td class="desc_value"><textarea name="inDictionaryGerman" disabled></textarea></td> + </tr> + + </table> + </div> + + + + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site806'"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subKnowledgerSave' VALUE="<?php echo $lab_ButtonName_Add; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site806E.php b/sites/site806E.php new file mode 100644 index 0000000..23623af --- /dev/null +++ b/sites/site806E.php @@ -0,0 +1,54 @@ +<?php +if (!empty($_SESSION['site806'])) +{ +?> + + <?php + $wynik = mysql_query("select DIC_POL_LANG,DIC_ENG_LANG,DIC_GER_LANG from sys_dictionaries where DIC_ID =".$_GET['did']); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["DIC_POL_LANG"]; + $sql_2 = $r["DIC_ENG_LANG"]; + $sql_3 = $r["DIC_GER_LANG"]; + } + ?> + + +<div class="tag100"> + <FORM ACTION="?pg=site806inf" METHOD="POST" id="AddParamInDictionary" class="form_valid"> + <input type="hidden" name="dic" value="<?php echo $_GET['dic']; ?>"> + <input type="hidden" name="did" value="<?php echo $_GET['did']; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site806_003 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc">Nazwa wyświetlana [Polish]</td> + <td class="desc_value"><textarea name="inDictionaryPolish" required><?php echo $sql_1 ;?></textarea></td> + </tr> + <tr> + <td class="desc">Name [English]</td> + <td class="desc_value"><textarea name="inDictionaryEnglish" disabled><?php echo $sql_2 ;?></textarea></td> + </tr> + <tr> + <td class="desc">Name [German]</td> + <td class="desc_value"><textarea name="inDictionaryGerman" disabled><?php echo $sql_3 ;?></textarea></td> + </tr> + + </table> + </div> + + + <div class="tag_buttons"> + <INPUT class="btn btn-info btn-sm" TYPE="button" VALUE="<?php echo $lab_ButtonName_Cancel; ?>" onclick="document.location.href='?pg=site806'"> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subKnowledgerSave' VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site806inf.php b/sites/site806inf.php new file mode 100644 index 0000000..e57535b --- /dev/null +++ b/sites/site806inf.php @@ -0,0 +1,77 @@ +<?php +if (!empty($_SESSION['site806'])) +{ +?> + <?php + // dodawanie nowego wpisu do bazy + if ($_POST['subKnowledgerSave'] == $lab_ButtonName_Add) + { + $_GET['dic'] = $_POST['dic']; + $newParamID = "PARAM_".sqlValue("select max(DIC_ID)+1 from sys_dictionaries"); + mysql_query("INSERT INTO sys_dictionaries SET DIC_NAME='$newParamID',DIC_TYPE='".$_POST['dic']."',DIC_POL_LANG='".$_POST['inDictionaryPolish']."',DIC_ENG_LANG='".$_POST['inDictionaryEnglish']."',DIC_GER_LANG='".$_POST['inDictionaryGerman']."'"); + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + + // aktualizacja wpisu do bazy + if ($_POST['subKnowledgerSave'] == $lab_ButtonName_Update) + { + $_GET['dic'] = $_POST['dic']; + mysql_query("UPDATE sys_dictionaries SET DIC_POL_LANG='".$_POST['inDictionaryPolish']."',DIC_ENG_LANG='".$_POST['inDictionaryEnglish']."',DIC_GER_LANG='".$_POST['inDictionaryGerman']."' WHERE DIC_ID=".$_POST['did']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + ?> + + + +<?php +$dicName = $_GET['dic']; +?> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site806_001 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Nazwa wyświetlana [Polish]</td> + <td class="label">Name [English]</td> + <td class="label">Name [German]</td> + <td class="label"></td> + </tr> + + <?php + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG,DIC_ENG_LANG,DIC_GER_LANG from sys_dictionaries where DIC_TYPE ='".$_GET['dic']."' order by DIC_POL_LANG"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $sql_1 = $r["DIC_ID"]; + $sql_2 = $r["DIC_POL_LANG"]; + $sql_3 = $r["DIC_ENG_LANG"]; + $sql_4 = $r["DIC_GER_LANG"]; + + + echo" + <tr> + <td class='field_left'>$sql_2</td> + <td class='field_left'>$sql_3</td> + <td class='field_left'>$sql_4</td> + <td class='field_center'><img src='./images/edit.png' title='$lab_ButtonName_Modify' style='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site806E&did=$sql_1&dic=$dicName'".chr(34)."></td> + </tr> + "; + } + ?> + </table> + </div> + + + <div class=tag_buttons> + <a href='?pg=site806'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back ;?>'></A> + <a href='?pg=site806A&dic=<?php echo $dicName ;?>'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Add ;?>'></A> + </div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site807.php b/sites/site807.php new file mode 100644 index 0000000..7eb01a5 --- /dev/null +++ b/sites/site807.php @@ -0,0 +1,136 @@ +<?php +if (!empty($_SESSION['site807'])) +{ +?> + + <?php + // aktualizacja skrzynki pocztowej + if (!empty($_POST['inMailName']) && $_POST['subMailSave']==$lab_ButtonName_Update) + { + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inMailName']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() WHERE SSP_NAME='MAIL'"); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inMailNameDesc']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() WHERE SSP_NAME='MAIL_NAME'"); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inMailSMTP']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() WHERE SSP_NAME='SMTP_SERVER'"); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inMailSMTPort']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() WHERE SSP_NAME='SMTP_PORT'"); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inMailSMTPuser']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() WHERE SSP_NAME='SMTP_USERNAME'"); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inMailSMTPass']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() WHERE SSP_NAME='SMTP_PASSWORD'"); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + // aktualizacja numeru stacji bazowej + if (!empty($_POST['inBaseNo']) && $_POST['subBaseSave']==$lab_ButtonName_Update) + { + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inBaseNo']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() WHERE SSP_NAME='NR_BASE_STATION'"); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + // aktualizacja parametrów dla urządzenia sterowanego SMS + if (!empty($_POST['inGSMno']) && $_POST['subGSMSave']==$lab_ButtonName_Update) + { + + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inGSMno']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() where SSP_NAME='MOBILE' and SSP_PARAM2='EQUIPMENTS' and SSP_PARAM1=".$_POST['dev']); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inMailNotif']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() where SSP_NAME='ALARM_MAIL' and SSP_PARAM2='EQUIPMENTS' and SSP_PARAM1=".$_POST['dev']); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inPhoneNotif']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() where SSP_NAME='ALARM_PHONE' and SSP_PARAM2='EQUIPMENTS' and SSP_PARAM1=".$_POST['dev']); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inGSMdrs']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() where SSP_NAME='DEVICE' and SSP_PARAM2='EQUIPMENTS' and SSP_PARAM1=".$_POST['dev']); + mysql_query("UPDATE sys_setup_parameters SET SSP_VALUE='".$_POST['inGSMrefresh']."',SSP_AUDIT_CU='".$_SESSION['user']."',SSP_AUDIT_CD=now() where SSP_NAME='REFRESH' and SSP_PARAM2='EQUIPMENTS' and SSP_PARAM1=".$_POST['dev']); + + + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + + } + + //aktualizacja liczników dla zleceń + if ($_POST['subOrdersSave']==$lab_ButtonName_Update && $_POST['formenc']==md5($_POST['dep'])) + { + + + mysql_query("DELETE FROM seg_order_no_counters WHERE ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='',ONC_VALUE=".getFloatValue($_POST['inPumpAggZWW']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='U ',ONC_VALUE=".getFloatValue($_POST['inPumpUS']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='C ',ONC_VALUE=".getFloatValue($_POST['inPumpCS']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='R ',ONC_VALUE=".getFloatValue($_POST['inPumpCR']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='I ',ONC_VALUE=".getFloatValue($_POST['inPumpCI']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='L ',ONC_VALUE=".getFloatValue($_POST['inPumpCL']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='Up ',ONC_VALUE=".getFloatValue($_POST['inPumpUp']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='Cp ',ONC_VALUE=".getFloatValue($_POST['inPumpCp']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='Lp ',ONC_VALUE=".getFloatValue($_POST['inPumpLp']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='Rp ',ONC_VALUE=".getFloatValue($_POST['inPumpRp']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + mysql_query("INSERT INTO seg_order_no_counters SET ONC_SCOPE='Ip ',ONC_VALUE=".getFloatValue($_POST['inPumpIp']).",ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['dep']."'"); + + + unset($_POST['formenc']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + + ?> + + + + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_SubMenu_807 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label"><?php echo $lab_Field_site807_001 ;?></td> + <td class="label"><?php echo $lab_Field_site807_002 ;?></td> + <td class="label"></td> + </tr> + + + <tr> + <td class='field_left'><?php echo $lab_Field_site807_003 ;?></td> + <td class='field_center'><?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='MAIL'","SSP_VALUE") ;?></td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807mail'"></td> + </tr> + <tr> + <td class='field_left'><?php echo $lab_Field_site807_011 ;?></td> + <td class='field_center'><?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='NR_BASE_STATION'","SSP_VALUE") ;?></td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807base'"></td> + </tr> + <tr> + <td class='field_left'><?php echo $lab_Field_site807_013 ;?></td> + <td class='field_center'><?php echo $lab_Field_site807_014 ;?></td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807tree'"></td> + </tr> + <tr> + <td class='field_left'><?php echo $lab_Field_site807_016 ;?></td> + <td class='field_center'><?php echo $lab_SubMenu_810 ;?></td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807orders'"></td> + </tr> + + + <tr> + <td class='field_left'>Przypisanie obiektów do wydziałów / odwodnień – pompy</td> + <td class='field_center'><?php echo sqlValue("select count(*) from seg_dev_resources where DRS_DEV_TYPE=10"); ?> szt.</td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807objdep&obj=10'"></td> + </tr> + <tr> + <td class='field_left'>Przypisanie obiektów do wydziałów / odwodnień – silniki</td> + <td class='field_center'><?php echo sqlValue("select count(*) from seg_dev_resources where DRS_DEV_TYPE=11"); ?> szt.</td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807objdep&obj=11'"></td> + </tr> + <tr> + <td class='field_left'>Przypisanie obiektów do wydziałów / odwodnień – studnie</td> + <td class='field_center'><?php echo sqlValue("select count(*) from seg_dev_resources where DRS_DEV_TYPE=12"); ?> szt.</td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807objdep&obj=12'"></td> + </tr> + <tr> + <td class='field_left'>Przypisanie obiektów do wydziałów / odwodnień – piezometry</td> + <td class='field_center'><?php echo sqlValue("select count(*) from seg_dev_resources where DRS_DEV_TYPE=601"); ?> szt.</td> + <td CLASS='desc_value' width='5px'><img src='./images/edit.png' title='<?php echo $lab_ButtonName_Modify;?>' style="cursor: pointer;" onclick="document.location.href='?pg=site807objdep&obj=601'"></td> + </tr> + + + </table> + </div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site807base.php b/sites/site807base.php new file mode 100644 index 0000000..f56ec1f --- /dev/null +++ b/sites/site807base.php @@ -0,0 +1,31 @@ +<?php +if (!empty($_SESSION['site807'])) +{ +?> + + +<div class="tag100"> + <FORM ACTION="?pg=site807" METHOD="POST"> + <div class="head_tag"><?php echo $lab_Field_site807_011 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site807_012 ; ?></td> + <td class="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inBaseNo" value="<?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='NR_BASE_STATION'","SSP_VALUE") ;?>">&nbsp;&nbsp;&nbsp; XXXXXXXXX (bez ZERA na początku)</td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site807" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subBaseSave' VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site807mail.php b/sites/site807mail.php new file mode 100644 index 0000000..51c678a --- /dev/null +++ b/sites/site807mail.php @@ -0,0 +1,51 @@ +<?php +if (!empty($_SESSION['site807'])) +{ +?> + + +<div class="tag100"> + <FORM ACTION="?pg=site807" METHOD="POST"> + <div class="head_tag"><?php echo $lab_Tag_site807_001 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site807_009 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inMailName" value="<?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='MAIL'","SSP_VALUE") ;?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site807_008 ; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" NAME="inMailNameDesc" value="<?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='MAIL_NAME'","SSP_VALUE") ;?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site807_004 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inMailSMTP" value="<?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_SERVER'","SSP_VALUE") ;?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site807_005 ; ?></td> + <td class="desc_value"><INPUT class="req" TYPE="TEXT" NAME="inMailSMTPort" value="<?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_PORT'","SSP_VALUE") ;?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site807_006 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="TEXT" NAME="inMailSMTPuser" value="<?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_USERNAME'","SSP_VALUE") ;?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site807_007 ; ?></td> + <td class="desc_value"><INPUT class="text50_req" TYPE="password" NAME="inMailSMTPass" value="<?php echo sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='SMTP_PASSWORD'","SSP_VALUE") ;?>"></td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site807" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subMailSave' VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site807objdep.php b/sites/site807objdep.php new file mode 100644 index 0000000..dd0dd81 --- /dev/null +++ b/sites/site807objdep.php @@ -0,0 +1,118 @@ +<?php +if (!empty($_SESSION['site807'])) +{ +?> + + +<?php +unset($objArray); + +if ($_GET['obj']==10) +{ + $lab_Field_name = "Lista pomp"; + $objArray = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_RESOURCES_DIC_ID,DRS_DEPARTMENT,PUP_NAME OB_NAME from seg_dev_resources,seg_pumps where DRS_DEV_ID=PUP_ID and DRS_DEV_TYPE=10 order by DRS_DEPARTMENT,PUP_NAME"); +} +elseif ($_GET['obj']==11) +{ + $lab_Field_name = "Lista silników"; + $objArray = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_RESOURCES_DIC_ID,DRS_DEPARTMENT,ENG_NAME OB_NAME from seg_dev_resources,seg_engines where DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 order by DRS_DEPARTMENT,ENG_NAME"); +} +elseif ($_GET['obj']==12) +{ + $lab_Field_name = "Lista studni"; + $objArray = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_RESOURCES_DIC_ID,DRS_DEPARTMENT,WLL_NAME OB_NAME from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 order by DRS_DEPARTMENT,WLL_NAME"); +} +elseif ($_GET['obj']==601) +{ + $lab_Field_name = "Lista piezometrów"; + $objArray = sqlGetResAsArray("select DRS_ID,DRS_SN_NUMBER,DRS_RESOURCES_DIC_ID,DRS_DEPARTMENT,SRP_NAME OB_NAME from seg_dev_resources,seg_reservoirs_piezometers where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601 order by DRS_DEPARTMENT,SRP_NAME"); +} + +?> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_name ;?></div> + <div class="tag"> + <table class="desc_val"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label">Obiekt</TD> + <td class="label">Numer</td> + <td class="label">Aktualnie przypisany Wydział / Odwodnienie</td> + </TR> + + + <?php + for ($i=0; $i<count($objArray); $i++) + { + echo' + <FORM ACTION="./?pg=site807objdep&obj='.$_GET['obj'].'" METHOD="POST" id="a_'.$objArray[$i]['DRS_ID'].'"> + <input type="hidden" name="drsid" value="'.$objArray[$i]['DRS_ID'].'"> + + <tr> + <td class="field_left">'.($i+1).'</td> + <td class="field_center">'.$objArray[$i]['OB_NAME'].'</td> + <td class="field_center">'.$objArray[$i]['DRS_SN_NUMBER'].'</td> + <td class="field_left"> + <select name="inObjDep" onchange="getval(this,document.forms['.chr(39).'a_'.$objArray[$i]['DRS_ID'].chr(39).'].elements['.chr(39).'drsid'.chr(39).'].value);"> + <option> --- Wybierz wydział z listy --- </option>'; + + if ($objArray[$i]['DRS_DEPARTMENT']=='P/Bełchatów') echo '<option value="P/Bełchatów" selected>Bełchatów</option>'; + else echo '<option value="P/Bełchatów">Bełchatów</option>'; + + if ($objArray[$i]['DRS_DEPARTMENT']=='P/Szczerców') echo '<option value="P/Szczerców" selected>Szczerców</option>'; + else echo '<option value="P/Szczerców">Szczerców</option>'; + + if ($objArray[$i]['DRS_DEPARTMENT']=='Dębina') echo '<option value="Dębina" selected>Dębina</option>'; + else echo '<option value="Dębina">Dębina</option>'; + echo' + </select> + </td> + </tr> + </FORM> + '; + } + + ?> + + </table> + </div> + + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site807" role="button">Zakończ</a> + </div> + +</div> + + +<script> + + + +function getval(dep,devid) +{ + //alert(dep.value); + //alert(devid); + + $(function() { + $.post('./ajax_func.php',{ + post_site: 'site807objdep', + post_action: 'change_dep', + post_dev: devid, + post_dep: dep.value + }); + }); + +} + +</script> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site807orders.php b/sites/site807orders.php new file mode 100644 index 0000000..b2c18b4 --- /dev/null +++ b/sites/site807orders.php @@ -0,0 +1,91 @@ +<?php +if (!empty($_SESSION['site807'])) +{ +?> + +<?php +if ($_SESSION['syndis_eq_stock']=='P/Bełchatów') + $dep = 'o-1'; +elseif ($_SESSION['syndis_eq_stock']=='P/Szczerców') + $dep = 'o-2'; +elseif ($_SESSION['syndis_eq_stock']=='Dębina') + $dep = 'o-1D'; + +?> + + +<div class="tag100"> + <FORM ACTION="./?pg=site807" METHOD="POST"> + <input type="hidden" name="formenc" value="<?php echo md5($dep); ?>"> + <input type="hidden" name="dep" value="<?php echo $dep; ?>"> + <div class="head_tag"><?php echo $lab_Field_site807_016 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site807_017 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpAggZWW" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and LENGTH(ONC_SCOPE)=0","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_011 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpUS" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('U')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_012 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpCS" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('C')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_013 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpCR" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('R')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_042 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpCI" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('I')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_010 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpCL" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('L')","SUMA") ;?>"></td> + </tr> + + <tr style="height: 10px;"> + </tr> + + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_014 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpUp" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('Up')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_015 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpCp" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('Cp')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_016 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpLp" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('Lp')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_051 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpRp" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('Rp')","SUMA") ;?>"></td> + </tr> + <tr> + <td class="desc_well_param"><?php echo $lab_Field_site810_052 ; ?></td> + <td class="desc_value"><INPUT class="float" TYPE="number" NAME="inPumpIp" value="<?php echo sqlStringValue("select (ONC_VALUE) SUMA from seg_order_no_counters where ONC_YEAR='".date('Y')."' and ONC_PLC='".$dep."' and TRIM(ONC_SCOPE)=trim('Ip')","SUMA") ;?>"></td> + </tr> + + + + + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site807" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subOrdersSave' VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site807tree.php b/sites/site807tree.php new file mode 100644 index 0000000..84b4a83 --- /dev/null +++ b/sites/site807tree.php @@ -0,0 +1,374 @@ +<?php +if (!empty($_SESSION['site807'])) +{ +?> + + <style> + ul.pde a:link, + ul.pde a:visited, + ul.pde a:hover, + ul.pde a:active{ + text-decoration:none; + } + ul.pde,ul.pde li{ + margin:0; + padding:0; + list-style:none; + } + ul.pde{ + text-align:left; + margin:.5em auto; + } + ul.pde ul{ + margin:0 0 0 1em; + padding:0; + } + ul.pde li{ + line-height:1.3em; + padding:.2em 0; + margin:0; + padding-left:15px; + } + /* dynamically added to LIs with nested ULs */ + ul.pde li.parent{ + padding-left:0; + } + ul.pde li.parent img{ + border:none; + padding-right:5px; + } + /* dynamically added to LIs with nested ULs and STRONG elements in them */ + ul.pde li.current li{ + padding-left:0; + } + /* The class to hide nested ULs */ + .hide{ + position:absolute; + top:0; + left:-4000px; + } + + /* The class to show nested ULs */ + .show{ + position:static; + display: table; + top:0; + left:1em; + } + </style> + <script> + pde={ + // CSS classes + pdeClass:'pde', + hideClass:'hide', + showClass:'show', + parentClass:'parent', + currentClass:'current', + // images added to the parent links + openImage:'./images/treemenu_minus.png', + closedImage:'./images/treemenu_plus.png', + openMessage:'close section', + closedMessage:'open section', + // boolean to keep the section with the STRONG open or not. + keepCurrentOpen:true, + // boolean to make the parent link collapse the section or not + linkParent:false, + init:function(){ + pde.createClone(); + if(!document.getElementById || !document.createTextNode){return;} + var uls=document.getElementsByTagName('ul'); + for(var i=0;i<uls.length;i++){ + var inneruls,parentLI; + if(!pde.cssjs('check',uls[i],pde.pdeClass)){continue;} + var inneruls=uls[i].getElementsByTagName('ul'); + for(var j=0;j<inneruls.length;j++){ + parentLI=inneruls[j].parentNode; + if(parentLI.getElementsByTagName('strong')[0]){ + pde.cssjs('add',parentLI,pde.currentClass); + if(pde.keepCurrentOpen === true){continue;} + } + pde.cssjs('add',parentLI,pde.parentClass); + parentLI.insertBefore(pde.clone.cloneNode(true),parentLI.firstChild); + pde.cssjs('add',inneruls[j],pde.hideClass); + pde.addEvent(parentLI.getElementsByTagName('a')[0],'click',pde.showhide,false); + parentLI.getElementsByTagName('a')[0].onclick=function(){return false;} // Safari hack + if(pde.linkParent){ + pde.addEvent(parentLI.getElementsByTagName('a')[1],'click',pde.showhide,false); + parentLI.getElementsByTagName('a')[1].onclick=function(){return false;} // Safari hack + } + } + } + }, + showhide:function(e){ + var image,message; + var elm=pde.getTarget(e); + var ul=elm.parentNode.getElementsByTagName('ul')[0]; + var img=elm.parentNode.getElementsByTagName('img')[0]; + if(pde.cssjs('check',ul,pde.hideClass)){ + message=pde.openMessage; + image=pde.openImage; + pde.cssjs('remove',elm.parentNode.getElementsByTagName('ul')[0],pde.hideClass); + pde.cssjs('add',elm.parentNode.getElementsByTagName('ul')[0],pde.showClass); + } else { + message=pde.closedMessage; + image=pde.closedImage; + pde.cssjs('remove',elm.parentNode.getElementsByTagName('ul')[0],pde.showClass); + pde.cssjs('add',elm.parentNode.getElementsByTagName('ul')[0],pde.hideClass); + } + img.setAttribute('src',image); + img.setAttribute('alt',message); + img.setAttribute('title',message); + pde.cancelClick(e); + }, + createClone:function(){ + pde.clone=document.createElement('a'); + pde.clone.setAttribute('href','#'); + pde.clone.appendChild(document.createElement('img')); + pde.clone.getElementsByTagName('img')[0].src=pde.closedImage; + pde.clone.getElementsByTagName('img')[0].alt=pde.closedMessage; + pde.clone.getElementsByTagName('img')[0].title=pde.closedMessage; + }, + /* helper methods */ + getTarget:function(e){ + var target = window.event ? window.event.srcElement : e ? e.target : null; + if (!target){return false;} + if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;} + return target; + }, + cancelClick:function(e){ + if (window.event){ + window.event.cancelBubble = true; + window.event.returnValue = false; + return; + } + if (e){ + e.stopPropagation(); + e.preventDefault(); + } + }, + addEvent: function(elm, evType, fn, useCapture){ + if (elm.addEventListener) + { + elm.addEventListener(evType, fn, useCapture); + return true; + } else if (elm.attachEvent) { + var r = elm.attachEvent('on' + evType, fn); + return r; + } else { + elm['on' + evType] = fn; + } + }, + cssjs:function(a,o,c1,c2){ + switch (a){ + case 'swap': + o.className=!pde.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2); + break; + case 'add': + if(!pde.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;} + break; + case 'remove': + var rep=o.className.match(' '+c1)?' '+c1:c1; + o.className=o.className.replace(rep,''); + break; + case 'check': + return new RegExp("(^|\s)" + c1 + "(\s|$)").test(o.className) + break; + } + } + } + pde.addEvent(window, 'load', pde.init, false); + + </script> + + + <?php + // dodawanie nowego elementu w drzewie + if ($_POST['subSite807Save'] == $lab_ButtonName_Save && !empty($_POST['inWWD_NAME'])) + { + if ($_POST['inWWD_ID']>0) + mysql_query("INSERT INTO seg_water_drainage SET WWD_PARENT_ID=".$_POST['inWWD_ID'].",WWD_NAME='".$_POST['inWWD_NAME']."',WWD_AUDIT_CU='".$_SESSION['user']."',WWD_AUDIT_CD=now()"); + else + mysql_query("INSERT INTO seg_water_drainage SET WWD_PARENT_ID=null,WWD_NAME='".$_POST['inWWD_NAME']."',WWD_AUDIT_CU='".$_SESSION['user']."',WWD_AUDIT_CD=now()"); + + echo"<div class='actionOK'>$lab_SaveRecordNotification_001</div>"; + } + + // aktualizacja + if ($_POST['subSite807Update'] == $lab_ButtonName_Update && !empty($_POST['inWWD_NAME'])) + { + mysql_query("UPDATE seg_water_drainage SET WWD_NAME='".$_POST['inWWD_NAME']."',WWD_AUDIT_CU='".$_SESSION['user']."',WWD_AUDIT_CD=now() WHERE WWD_ID=".$_POST['inWWD_ID']); + echo"<div class='actionOK'>$lab_UpdateRecordNotification_001</div>"; + } + + // usuwanie + // pobiera parametry z url + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $getAcction = $paramArray[0]; + $getRecID = $paramArray[1]; + unset($paramArray); + + if ($getAcction=='del' && $getRecID>0) + { + mysql_query("DELETE FROM seg_water_drainage WHERE WWD_ID=".$getRecID); + mysql_query("DELETE FROM seg_water_drainage WHERE WWD_PARENT_ID=".$getRecID); + + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + } + } + + ?> + + + + + <?php + $treeLevel_01 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID is null order by WWD_NAME"); + ?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site807_013 ;?></div> + <div class="tag"> + + <ul class='pde'> + + <a href='?pg=site807treeE&param=add,0' title='Dodaj nową gałąź'><img src='./images/treemenu_main_add.png'></a> + + <?php + + for ($i=0; $i<count($treeLevel_01); $i++) + { + echo"<li>".$treeLevel_01[$i]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<a href='?pg=site807treeE&param=add,".$treeLevel_01[$i]['WWD_ID']."' title='Dodaj'><img src='./images/treemenu_add.png'><a href='?pg=site807treeE&param=edit,".$treeLevel_01[$i]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$treeLevel_01[$i]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + + //główne + // =============================================================================================== + unset($tb); $tb = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$treeLevel_01[$i]['WWD_ID']." order by WWD_NAME"); + if (count($tb)>0) + { + echo"<ul>"; + for($j=0; $j<count($tb); $j++) + { + echo"<li>".$tb[$j]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<a href='?pg=site807treeE&param=add,".$tb[$j]['WWD_ID']."' title='Dodaj'><img src='./images/treemenu_add.png'></a><a href='?pg=site807treeE&param=edit,".$tb[$j]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$tb[$j]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + + // pierwsze zagnieżdżenie + // =============================================================================================== + unset($tb1); $tb1 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb[$j]['WWD_ID']." order by WWD_NAME"); + if (count($tb1)>0) + { + echo"<ul>"; + for($z=0; $z<count($tb1); $z++) + { + echo"<li>".$tb1[$z]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<a href='?pg=site807treeE&param=add,".$tb1[$z]['WWD_ID']."' title='Dodaj'><img src='./images/treemenu_add.png'></a><a href='?pg=site807treeE&param=edit,".$tb1[$z]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$tb1[$z]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + + // drugie zagnieżdżenie + // =============================================================================================== + unset($tb2); $tb2 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb1[$z]['WWD_ID']." order by WWD_NAME"); + if (count($tb2)>0) + { + echo"<ul>"; + for($g=0; $g<count($tb2); $g++) + { + echo"<li>".$tb2[$g]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<a href='?pg=site807treeE&param=add,".$tb2[$g]['WWD_ID']."' title='Dodaj'><img src='./images/treemenu_add.png'></a><a href='?pg=site807treeE&param=edit,".$tb2[$g]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$tb2[$g]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + + // trzecie zagnieżdżenie + // =============================================================================================== + unset($tb3); $tb3 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb2[$g]['WWD_ID']." order by WWD_NAME"); + if (count($tb3)>0) + { + echo"<ul>"; + for($q=0; $q<count($tb3); $q++) + { + echo"<li>".$tb3[$q]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<a href='?pg=site807treeE&param=add,".$tb3[$q]['WWD_ID']."' title='Dodaj'><img src='./images/treemenu_add.png'></a><a href='?pg=site807treeE&param=edit,".$tb3[$q]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$tb3[$q]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + + // czwarte zagnieżdżenie + // =============================================================================================== + unset($tb4); $tb4 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb3[$q]['WWD_ID']." order by WWD_NAME"); + if (count($tb4)>0) + { + echo"<ul>"; + for($r=0; $r<count($tb4); $r++) + { + echo"<li>".$tb4[$r]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<a href='?pg=site807treeE&param=add,".$tb4[$r]['WWD_ID']."' title='Dodaj'><img src='./images/treemenu_add.png'></a><a href='?pg=site807treeE&param=edit,".$tb4[$r]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$tb4[$r]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + + // piąte zagnieżdżenie + // =============================================================================================== + unset($tb5); $tb5 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb4[$r]['WWD_ID']." order by WWD_NAME"); + if (count($tb5)>0) + { + echo"<ul>"; + for($p=0; $p<count($tb5); $p++) + { + echo"<li>".$tb5[$p]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<a href='?pg=site807treeE&param=add,".$tb5[$p]['WWD_ID']."' title='Dodaj'><img src='./images/treemenu_add.png'></a><a href='?pg=site807treeE&param=edit,".$tb5[$p]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$tb5[$p]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + + // szóste zagnieżdżenie + // =============================================================================================== + unset($tb6); $tb6 = sqlGetResAsArray("select WWD_ID,WWD_NAME from seg_water_drainage where WWD_PARENT_ID=".$tb5[$p]['WWD_ID']." order by WWD_NAME"); + if (count($tb6)>0) + { + echo"<ul>"; + for($s=0; $s<count($tb6); $s++) + { + echo"<li>".$tb6[$s]['WWD_NAME']."</a>"; + echo"<li>".$tb6[$s]['WWD_NAME']."&nbsp;&nbsp;&nbsp;[<img src='./images/treemenu_add.png'></a><a href='?pg=site807treeE&param=edit,".$tb6[$s]['WWD_ID']."' title='Edutuj'><img src='./images/treemenu_edit.png'></a><a href='?pg=site807tree&param=del,".$tb6[$s]['WWD_ID']."' title='Usuń' onclick=".chr(34)."return confirm('Jesteś pewien, że chcesz usunąć?');".chr(34)."><img src='./images/treemenu_delete.png'></a>]"; + echo"</li>"; + } + echo"</ul>"; + } + // =============================================================================================== + echo"</li>"; + } + echo"</ul>"; + } + // =============================================================================================== + echo"</li>"; + } + echo"</ul>"; + } + // =============================================================================================== + echo"</li>"; + } + echo"</ul>"; + } + // =============================================================================================== + echo"</li>"; + } + echo"</ul>"; + } + // =============================================================================================== + echo"</li>"; + } + echo"</ul>"; + } + // =============================================================================================== + echo"</li>"; + } + echo"</ul>"; + } + // =============================================================================================== + echo"</li>"; + } + ?> + + + + + </ul> + + + + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="./?pg=site807" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE='SUBMIT' NAME='subGSMSave' VALUE="<?php echo $lab_ButtonName_Update; ?>"> + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site807treeE.php b/sites/site807treeE.php new file mode 100644 index 0000000..cdb19d0 --- /dev/null +++ b/sites/site807treeE.php @@ -0,0 +1,56 @@ +<?php +if (!empty($_SESSION['site807'])) +{ +?> + + + <?php + // pobiera parametry z url + if (!empty($_GET['param'])) + { + $paramArray = explode(',',$_GET['param']); + $getAcction = $paramArray[0]; + $getRecID = $paramArray[1]; + unset($paramArray); + if ($getRecID>0 && $getAcction!='add') $tbArray = sqlGetResAsArray("select WWD_NAME from seg_water_drainage where WWD_ID=".$getRecID); + } + ?> + + +<div class="tag100"> + <FORM ACTION="?pg=site807tree" METHOD="POST"> + <input type="hidden" name="inWWD_ID" value="<?php echo $getRecID; ?>"> + + <div class="head_tag"><?php echo $lab_Tag_site301_012 ;?></div> + <div class="tag"> + <table class="desc_val"> + <tr> + <td class="desc"><?php echo $lab_Field_site807_015 ; ?></td> + <td CLASS=desc_value> + <input type="text" class="text75_req" name="inWWD_NAME" value="<?php echo $tbArray[0]['WWD_NAME'];?>" required> + + </td> + </tr> + </table> + </div> + + <div class="tag_buttons"> + <a class="btn btn-info btn-sm" style="text-decoration: none;" href="?pg=site807tree" role="button"><?php echo $lab_ButtonName_Cancel; ?></a> + + <?php if ($getAcction=='add' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subSite807Save" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + <?php elseif ($getAcction=='edit' && !empty($_SESSION['site310_edit'])): ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subSite807Update" VALUE="<?php echo $lab_ButtonName_Update; ?>"> + <?php endif; ?> + + + </div> + </FORM> +</div> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site808.php b/sites/site808.php new file mode 100644 index 0000000..799097d --- /dev/null +++ b/sites/site808.php @@ -0,0 +1,29 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPxuPTsIsuajCMw/YHraCFtosDQeUQC/gZRAivPXZyMYPfSf9vFRcotCjHWVzP9I4LKuVFMjC +IA1gIYBywnvR0NxsluwxmyGKsBwH5QzhKxlq0d0Ctg8CXwq3IudxczP2ZOE6g02Tv+iBs0RX3BLQ +cE9+ZXttcCOEZPCaH4elxvstHno1y0HI5X7aLvLVvsLlAXMSrXWNVZXBLHoursXJUJ+CA6vgA7OE +5ZuAj2d335K+ge42S5qLg2/VVARQ9u72uNtBq/nSajTUXod6O3Wv6JCVNyGvhQXA/w7z6u7f4B4Z +y/jhWZwaSxCReSIR2UhGZFD7b351PLjBpeslNYcpl2KUwrBbzFV+NcOJyd0ZOvUyH9EugEQbgSRt +t3UgNV9SXYUaHMAqH4K2s/8oJ4AfdDmolOTW+7BAEWmgK4VM7StMRk8ikkPZ1Do7ZPQLG7qwU5X3 +RsUIzbTts9MRnHoitknpimlZtsyzO19GrFiMtHsqoA3URUvRqCVzXUWR9dCg8yXGTKSmlNFFQli/ +6nsy/4hVLKXkY+g1ZE/g5juQVMDfM+Pz3/mZDCX9kz0bfF+WGUvxHFM4Z8KFris8oUoP+k0M6Yj5 +8IQNoQdgS5YXY5tsY42SSAwJ85HGRAChhLVak/hcL1OKp5QkCBd0kijqzBNiDFccWy3rgXmXe6gC +Qjr6X1qIIyVE9UcLZOA7cP78uC5YfTixm6NPw+o5ugb708Vwm4o71MUltywK0p9wqlNZOYdzDZIX +GSNgaK7XTgT9U8CotlVvS/fu5OgaFkNmc7vhgmHWNXcTQKKJ1LqWBtQZhe+Ir1zCk4rMUYk5lnX3 +k6ELhsuIAycgrH+2ES7hB8Vahr/zcgOeRKn52gYOI0cUSMVvmjanRhJZLMzquiuGvKCMNypNom+I +raipk4R6sa+FRKl4AnJ9g7cipNCEO4tAiWtasdsCW10x2/b+AOoos0Z5dC6it7qnSi0T3DPnK5d4 +q+/j/SUhfiN4dvjStTIWRie1XkMYLpgukBUSYpbMqkVvV0to2RtZ0caYb/YaJO7Hxtiot9Y7zmLO +TdcLVRBFq7jNq78avP71arag7qEPor6DB84cKoY+dP2rKmrkWhMC9G0mPgmKquZJasfpbv3o/9mE +1MhfUrj78psUPtB/wNbCWo4IyU6031jadMEZ8DC3HBOPohyURRO1DtysrF7FfnKhogG3UK5PV9F6 +9e88P/0IED3LgadLnF+VE5tfWtN8XgbikeQ5KMRUwMRv3W1AC712V+1k6dfvYmVFJ3bR/VqzPXxU +MRsC5qEkROjY0Mp2MW8mjwkbkHlmhHFRJ7VO3yCduWPYMxzv7u2g9shl3G0Al+1hJCFyJv3Hmwff ++NggafJYP5n8diDoNFQCn+j6WvA/k0Xe5rRigLE22S57P223aDTye/4B3KTfmXaFO/6xIO8Nmx/S +HW0hSvAAlY+7BPw2ZpuHaAHSdFce83VkyeXcqjBf6YgUvd+Hy/SJhljgvdwZOhjtlfKzEjD60NsX +ZpzB16FB9lDxX7P25nqStkbZUQ1tagJDuHHR0+fTsoJCSdPt52WeFS7kzEl4Y5UF/jOQNpXKggUR +xkie/0ffv9K/6UE5cll4g3+fVOR8STs7uHdmHU4RNx/OfdK8XZiSDAIofN23wYraYC9zo5a4OgDc +Ms77FlBlszWBBr4QNWQRnjG81thUR1OqIMARuHfCTAWDLHXuC4MHb7cNfQixd9saYLrWVv2Wom8s +FqNc0SxrxBZGI/j5v4tLIwUe1vHF+8t4CyzOKONZaLxy8b6qdqfLS5uQmm52BgfQT+X00BvCbyiz +coLESKGwzi7RG4tDzLfJ1bCDTP2lqu5Ch+kLnqWBYQRMLhZ5kMoc+46lUksSGHfUb87upZ1uCkk4 +mAngTGNYsV1rAxQ1kmcR3zqNznL25RjnTVr/ \ No newline at end of file diff --git a/sites/site809.php b/sites/site809.php new file mode 100644 index 0000000..e3653ea --- /dev/null +++ b/sites/site809.php @@ -0,0 +1,216 @@ +<?php +if (!empty($_SESSION['site809'])) +{ + +?> + + +<?php + if (!empty($_GET['param'])) + { + $paramArray = explode(',', $_GET['param']); + if ($paramArray[0]=='refresh' && $paramArray[1]==md5('ok')) + { + mysql_query("INSERT INTO softspm_rep.rep_002_on_demand SET SOD_START_DATE=now(),SOD_AUDIT_CU='".$_SESSION['user']."',SOD_AUDIT_CD=now()"); + } + } + + + delSearchSessionData(); + $repOnDemand = (int) sqlValue("select count(*) from softspm_rep.rep_002_on_demand where SOD_FINISH_DATE is null"); + +?> + +<?php if ($repOnDemand>0): ?> +<div class='actionERROR'>Uwaga!<br/><br/>Zostało włączone przeliczanie danych do raportów - "na żądanie". Do momentu jego zakończenia dane w raportach mogą być niekompletne.</div> +<?php endif; ?> + + +<div class="tag100"> + <div class="head_tag">Przeliczanie danych do raportów – przeliczanie na żądanie.</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Data ostatniego przeliczania</td> + <td class="label">Status</td> + <td class="label"></td> + </tr> + <tr> + + <?php if ($repOnDemand>0): ?> + <td class="field_center"></td> + <td class="field_center">Czeka na przeliczenie</td> + <td class="field_center"><img src="./images/bullet_green_16.png"></td> + <?php else: ?> + <td class="field_center"><?php echo sqlStringValue("select max(SJL_FINISH_DATE) SJL_FINISH_DATE from sys_job_logs where SJL_JOB_NAME='reloadDataForRep002'", "SJL_FINISH_DATE"); ?></td> + <td class="field_center">Przeliczone</td> + <td class="field_center"><a href="./?pg=site809&param=refresh,444bcb3a3fcf8389296c49467f27e1d6" title="Przelicz dane ponownie"><img src="./images/refresh.png"></a></td> + <?php endif; ?> + + + </tr> + + + </table> + </div> +</div> + + +<div class="tag100"> + <div class="head_tag">Raporty</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Lp.</td> + <td class="label">Nazwa raportu</td> + <td class="label"></td> + </tr> + + + <tr> + <td class="field_left">1.</td> + <td class="field_left">Dane pobrane z SYNDIS wymagające analizy – studnie pracujące</td> + <td class="field_center"><a href="./reports/rep_001_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">2.</td> + <td class="field_left">Wykaz pracy studni</td> + <td class="field_center"><a href="./?pg=site809_rep2" title="Wydruk"><img src="./images/save_to_db_16.png"></td> + </tr> + + <tr> + <td class="field_left">3.</td> + <td class="field_left">Zrzut wody na odprowadzalniki</td> + <td class="field_center"><a href="./reports/rep_003_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">4.</td> + <td class="field_left">Moc i wydajność systemu odwodnienia wgłębnego</td> + <td class="field_center"><a href="./reports/rep_004_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">5.</td> + <td class="field_left">Studnie w postoju z agregatami pompowymi</td> + <td class="field_center"><a href="./reports/rep_005_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">6.</td> + <td class="field_left">Poziom zwierciadła wody w piezometrach</td> + <td class="field_center"><a href="./reports/rep_006_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">7.</td> + <td class="field_left">Raport chwilowy pracy systemu odwodnienia wgłębnego</td> + <td class="field_center"><a href="./reports/rep_007_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">8.</td> + <td class="field_left">Raport pracy studni</td> + <td class="field_center"><a href="./reports/rep_008_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">9.</td> + <td class="field_left">Wykaz zinstalowanych agregatów pompowych</td> + <td class="field_center"><a href="./reports/rep_009_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + + + <tr> + <td class="field_left">10.</td> + <td class="field_left">Wykaz agregatów pozostawionych w studniach</td> + <td class="field_center"><a href="./reports/rep_010_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">11. </td> + <td class="field_left">Wykaz obiektów na stanie oddziału (studnie)</td> + <td class="field_center"><a href="./reports/rep_011_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">12. </td> + <td class="field_left">Wykaz obiektów na stanie oddziału (piezometry)</td> + <td class="field_center"><a href="./reports/rep_012_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">13. </td> + <td class="field_left">Wymiana agregatów</td> + <td class="field_center"><a href="./reports/rep_013_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">14. </td> + <td class="field_left">Zabudowa studni</td> + <td class="field_center"><a href="./reports/rep_014_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">15. </td> + <td class="field_left">Długość kabla wg typów wydanych i zabudowanych w studniach</td> + <td class="field_center"><a href="./reports/rep_015_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">16. </td> + <td class="field_left">Długość kolektorów tłocznych wg średnic na barierach</td> + <td class="field_center"><a href="./reports/rep_016_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">17. </td> + <td class="field_left">Historia pomiarów dla studni</td> + <td class="field_center"><a href="./reports/rep_017_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + + + <tr> + <td class="field_left">18. </td> + <td class="field_left">Raport orurowania i armatury</td> + <td class="field_center"><a href="./reports/rep_021_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">19. </td> + <td class="field_left">Raport opomiarowania</td> + <td class="field_center"><a href="./reports/rep_022_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">20. </td> + <td class="field_left">Raport synchronizacji danych ze Stacją Prób</td> + <td class="field_center"><a href="./reports/rep_023_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">21. </td> + <td class="field_left">Raport agregatów aktualnie zarezerwowanych do Zleceń</td> + <td class="field_center"><a href="./reports/rep_024_print.php" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + <tr> + <td class="field_left">22. </td> + <td class="field_left">Raport – zestawienie (wraz z historią) braku łączności/komunikacji z poszczególnymi studniami </i>NOTREALIABLE</i></td> + <td class="field_center"><a href="./reports/rep_025_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></td> + </tr> + + </table> + </div> +</div> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site809_rep2.php b/sites/site809_rep2.php new file mode 100644 index 0000000..945dfdc --- /dev/null +++ b/sites/site809_rep2.php @@ -0,0 +1,94 @@ +<?php +if (!empty($_SESSION['site809'])) +{ + +?> + + +<?php + delSearchSessionData(); + unset($hisArray); + if (empty($_GET['more'])) + $hisArray = sqlGetResAsArray("select distinct DHS_REPORT_NAME,DHS_AUDIT_CD,DHS_AUDIT_CU,DHS_DATE_FROM,DHS_DATE_TO from softspm_rep.rep_002_history_saved where DHS_AUDIT_DEP='".$_SESSION['syndis_eq_stock']."' order by DHS_AUDIT_CD desc limit 20"); + else + $hisArray = sqlGetResAsArray("select distinct DHS_REPORT_NAME,DHS_AUDIT_CD,DHS_AUDIT_CU,DHS_DATE_FROM,DHS_DATE_TO from softspm_rep.rep_002_history_saved where DHS_AUDIT_DEP='".$_SESSION['syndis_eq_stock']."' order by DHS_AUDIT_CD desc"); + +?> + +<div class="tag100"> + <div class="head_tag">Wykaz pracy studni</div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Nazwa raportu</td> + <td class="label"></td> + </tr> + + <tr> + <td class="field_left">Generuj raport za dowolny okres</td> + <td class="field_center"><a href="./reports/rep_002_print.php" target="_blank" title="Wydruk"><img src="./images/generate_report_16.png"></a></td> + </tr> + </table> + </div> +</div> + +<div class="tag100"> + <div class="head_tag">Archiwum</div> + <div class="tag"> + + <table WIDTH="100%" class="tag"> + <tr> + <td class="label">Data generowania raportu</td> + <td class="label">Nazwa raportu</td> + <td class="label">Zapisany przez</td> + <td class="label">Data od</td> + <td class="label">Data do</td> + <td class="label"></td> + </tr> + + <?php + for($i=0; $i<count($hisArray); $i++) + { + echo' + <tr> + <td class="field_center">'.$hisArray[$i]['DHS_AUDIT_CD'].'</td> + <td class="field_left">'.$hisArray[$i]['DHS_REPORT_NAME'].'</td> + <td class="field_center">'.$hisArray[$i]['DHS_AUDIT_CU'].'</td> + <td class="field_center">'.$hisArray[$i]['DHS_DATE_FROM'].'</td> + <td class="field_center">'.$hisArray[$i]['DHS_DATE_TO'].'</td> + <td class="field_center"> + <a href="./reports/rep_002_his_xls.php?rp='.$hisArray[$i]['DHS_REPORT_NAME'].'" target="_blank" title="Wydruk"><img src="./images/excel_ico.png"></a> + &nbsp;&nbsp;&nbsp; + <a href="./reports/rep_002_his_pdf.php?rp='.$hisArray[$i]['DHS_REPORT_NAME'].'" target="_blank" title="Generuj PDF"><img src="./images/pdf_ico.png"></a> + </td> + </tr> + '; + + } + if (empty($_GET['more']) && count($hisArray)>19) + echo"<tr><TD class='field_left' colspan='6'><a href='./?pg=site809_rep2&more=1'>Pokaż więcej</a></TD></tr>"; + + + + ?> + + + + + </table> + </div> +</div> + + + + <div class="tag100"> + <div class="tag_buttons"> + <a href='./?pg=site809'><INPUT class="btn btn-info btn-sm" TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Back; ?>'></A> + </div> + </div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site810.php b/sites/site810.php new file mode 100644 index 0000000..0f83180 --- /dev/null +++ b/sites/site810.php @@ -0,0 +1,281 @@ +<?php +if (!empty($_SESSION['site810'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + <!--<div id='loader-wrapper'><div id='loader'></div></div>--> + + <?php + //usuwanie zlecenia + if (!empty($_SESSION['site810_edit']) && $_GET['acc']=='del' && $_GET['ord']>0) + { + mysql_query("DELETE FROM seg_orders WHERE ORD_ID=".$_GET['ord']); + mysql_query("DELETE FROM seg_order_obj_params WHERE OWP_ORD_ID=".$_GET['ord']); + mysql_query("DELETE FROM seg_order_new_agg_params WHERE ONA_ORD_ID=".$_GET['ord']); + echo"<div class='actionOK'>$lab_DeleteRecordNotification_001</div>"; + + } + + ?> + + + <?php + //paginacja + if (!$_GET['pgn']) + { + $_GET['pgn']=1; + delSearchSessionData(); + } + + + + + //zapamiętywanie pól formularza + if ($_POST['sub_search']=='Szukaj') $_SESSION['site810_input'] = $_POST['sr_order']; + + if (empty($_SESSION['site810_sr_status'])) $_SESSION['site810_sr_status']=100000; + if (!empty($_POST['sr_status'])) $_SESSION['site810_sr_status']=$_POST['sr_status']; + + if (empty($_SESSION['site810_sr_filtr'])) $_SESSION['site810_sr_filtr']=1; + if (!empty($_POST['sr_filtr'])) $_SESSION['site810_sr_filtr']=$_POST['sr_filtr']; + + if (!empty($_POST['sr_all'])) $_SESSION['site810_sr_all'] = $_POST['sr_all']; + if ($_POST['sub_search']=='Szukaj' && empty($_POST['sr_all'])) unset($_SESSION['site810_sr_all']); + + if (empty($_SESSION['site810_inDatefrom'])) $_SESSION['site810_inDatefrom']=date('Y-m')."-01"; + if (!empty($_POST['inDate01'])) $_SESSION['site810_inDatefrom']=$_POST['inDate01']; + + if (empty($_SESSION['site810_inDateto'])) $_SESSION['site810_inDateto']=date('Y-m-d'); + if (!empty($_POST['inDate02'])) $_SESSION['site810_inDateto']=$_POST['inDate02']; + + + ?> + + + <form action="./?pg=site810&pgn=1" method="post"> + <div class="tag100"> + <table> + <tr> + <td> + <select name="sr_filtr"> + <option value="1" <?php if($_SESSION['site810_sr_filtr']==1) echo "selected"; ?> >Nr zlecenia</option> + <option value="2" <?php if($_SESSION['site810_sr_filtr']==2) echo "selected"; ?> >Obiekt</option> + <option value="3" <?php if($_SESSION['site810_sr_filtr']==3) echo "selected"; ?> >Bariera</option> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="text" name="sr_order" value="<?php echo $_SESSION['site810_input'];?>"></td> + + <td style="width: 10px;"></td> + <td>data od:</td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inDate01' value='<?php echo $_SESSION['site810_inDatefrom']; ?>' SIZE='10'></TD> + <td style="width: 10px;"></td> + <td>do:</td> + <td><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inDate02' value='<?php echo $_SESSION['site810_inDateto']; ?>' SIZE='10'></TD> + + + + <td style="width: 10px;"></td> + <td>status:</td> + <td style="width: 5px;"></td> + <td> + <select name="sr_status"> + <?php + $wynik = mysql_query("select DIC_ID,DIC_POL_LANG from sys_dictionaries where DIC_TYPE='ORDER_STATUS'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $resID=$r["DIC_ID"]; + $resDESC=$r["DIC_POL_LANG"]; + + if ($_SESSION['site810_sr_status']==$resID) + echo"<option value='$resID' selected>$resDESC</option>"; + else + echo"<option value='$resID'>$resDESC</option>"; + } + if ($_SESSION['site810_sr_status']==999999) + echo"<option value='999999' selected>Niezakończone</option>"; + else + echo"<option value='999999'>Niezakończone</option>"; + + + if ($_SESSION['site810_sr_status']==100000) + echo"<option value='100000' selected>Wszystkie</option>"; + else + echo"<option value='100000'>Wszystkie</option>"; + ?> + </select> + </td> + <td style="width: 10px;"></td> + <td><input type="submit" name="sub_search" value="Szukaj" class="btn btn-default btn-sm"></td> + <td></td> + </tr> + <tr><td>&nbsp;</td></tr> + <tr> + <td colspan="3"> + <?php + if (!empty($_SESSION['site810_sr_all'])) echo"<input type='checkbox' name='sr_all' value='1' checked>"; + else echo"<input type='checkbox' name='sr_all' value='1'>"; + ?> + Pokaż wszystkie</td> + </tr> + </table> + </div> + </form> + + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site810_001 ;?></div> + <div class="tag"> + + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label">Lp.</TD> + <TD class="label"><?php echo $lab_Field_site810_001 ;?> &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site810&pgn=1&f0=a"><?php echo $lab_Icon_SortUp ;?></a><a style="text-decoration: none;" href="./?pg=site810&pgn=1&f0=z"><?php echo $lab_Icon_SortDown ;?></a></td> + <TD class="label"><?php echo $lab_Field_site810_002 ;?> &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site810&pgn=1&f1=a"><?php echo $lab_Icon_SortUp ;?></a><a style="text-decoration: none;" href="./?pg=site810&pgn=1&f1=z"><?php echo $lab_Icon_SortDown ;?></a></td> + <TD class="label"><?php echo $lab_Field_site810_003 ;?> &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site810&pgn=1&f2=a"><?php echo $lab_Icon_SortUp ;?></a><a style="text-decoration: none;" href="./?pg=site810&pgn=1&f2=z"><?php echo $lab_Icon_SortDown ;?></a></td> + <TD class="label"><?php echo $lab_Field_site810_004 ;?> &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site810&pgn=1&f3=a"><?php echo $lab_Icon_SortUp ;?></a><a style="text-decoration: none;" href="./?pg=site810&pgn=1&f3=z"><?php echo $lab_Icon_SortDown ;?></a></td> + <TD class="label"><?php echo $lab_Field_site810_005 ;?> &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site810&pgn=1&f4=a"><?php echo $lab_Icon_SortUp ;?></a><a style="text-decoration: none;" href="./?pg=site810&pgn=1&f4=z"><?php echo $lab_Icon_SortDown ;?></a></td> + <TD class="label"><?php echo $lab_Field_site810_006 ;?> &nbsp;&nbsp;&nbsp;<a style="text-decoration: none;" href="./?pg=site810&pgn=1&f5=a"><?php echo $lab_Icon_SortUp ;?></a><a style="text-decoration: none;" href="./?pg=site810&pgn=1&f5=z"><?php echo $lab_Icon_SortDown ;?></a></td> + </TR> + + <?php + + if (empty($_SESSION['site810_array']) || $_POST['sub_search']=='Szukaj') + { + //$query="select ORD_ID,ORD_NO,ORD_DRS_ID,ORD_OBJ_NAME,ORD_OBJ_TYPE,ORD_SCOPE_DIC_ID,ORD_STATUS_DIC_ID,ORD_AUDIT_DATE,SOD_UJ,SOD_PLC from seg_orders left join seg_object_def on SOD_NAME=ORD_OBJ_NAME"; + $query="select ORD_ID,ORD_NO,ORD_DRS_ID,ORD_OBJ_NAME,ORD_OBJ_TYPE,ORD_SCOPE_DIC_ID,ORD_STATUS_DIC_ID,ORD_AUDIT_DATE,OHC_UJ,DRS_DEPARTMENT from seg_orders,seg_dev_resources left join seg_object_hole_cards on DRS_ID=OHC_DRS_ID where DRS_ID=ORD_DRS_ID and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."'"; + if ($_SESSION['site810_sr_filtr']==1) + $query .=" and ORD_NO like '%".$_SESSION['site810_input']."%'"; + if ($_SESSION['site810_sr_filtr']==2) + $query .=" and ORD_OBJ_NAME like '%".$_SESSION['site810_input']."%'"; + if ($_SESSION['site810_sr_filtr']==3) + $query .=" and OHC_UJ like '%".$_SESSION['site810_input']."%'"; + if ($_SESSION['site810_sr_status']==851) $query .= " and ORD_STATUS_DIC_ID = 851"; + if ($_SESSION['site810_sr_status']==852) $query .= " and ORD_STATUS_DIC_ID = 852"; + if ($_SESSION['site810_sr_status']==853) $query .= " and ORD_STATUS_DIC_ID = 853"; + if ($_SESSION['site810_sr_status']==999999) $query .= " and ORD_STATUS_DIC_ID in (851,852)"; + $query .= " and ORD_AUDIT_DATE>='".$_SESSION['site810_inDatefrom']."' and ORD_AUDIT_DATE<='".$_SESSION['site810_inDateto']."'"; + $query .=" order by ORD_AUDIT_DATE desc"; + if (empty($_SESSION['site810_sr_all'])) $query .=" limit 100"; + + + $res=null; + $wynik = mysql_query($query); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'orderID' => $r["ORD_ID"], + 'orderNo' => $r["ORD_NO"], + 'devID' => $r["ORD_DRS_ID"], + 'devName' => $r["ORD_OBJ_NAME"], + 'devType' => $r["ORD_OBJ_TYPE"], + 'bariera' => $r["SOD_UJ"], + 'plc' => $r["SOD_PLC"], + 'orderScopeID'=> $r["ORD_SCOPE_DIC_ID"], + 'orderScope' => setDicName($r["ORD_SCOPE_DIC_ID"]), + 'orderStatus' => setDicName($r["ORD_STATUS_DIC_ID"]), + 'orderDate' => substr($r["ORD_AUDIT_DATE"],0,10) + ); + } + unset($_SESSION['site810_array']); + $_SESSION['site810_array']=$res; + } + + + + // sortowanie wyników + // =========================================================================================== // + if ($_GET['f0']=='a') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderNo', 'ASC','str'); + else if ($_GET['f0']=='z') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderNo', 'DESC','str'); + else if ($_GET['f1']=='a') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'devName', 'ASC','str'); + else if ($_GET['f1']=='z') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'devName', 'DESC','str'); + else if ($_GET['f2']=='a') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'bariera', 'ASC','str'); + else if ($_GET['f2']=='z') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'bariera', 'DESC','str'); + else if ($_GET['f3']=='a') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderScope', 'ASC','str'); + else if ($_GET['f3']=='z') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderScope', 'DESC','str'); + else if ($_GET['f4']=='a') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderDate', 'ASC','str'); + else if ($_GET['f4']=='z') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderDate', 'DESC','str'); + else if ($_GET['f5']=='a') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderStatus', 'ASC','str'); + else if ($_GET['f5']=='z') + $_SESSION['site810_array'] = sortmddata($_SESSION['site810_array'], 'orderStatus', 'DESC','str'); + // =========================================================================================== // + + + $start=($_GET['pgn']-1)*20; + $stop = $_GET['pgn']*20; + if ($stop>count($_SESSION['site810_array'])) $stop=count($_SESSION['site810_array']); + + for($i=$start;$i<$stop;$i++) + { + $bgcol=null; + if ($_SESSION['site810_array'][$i]['orderStatus']=='Zakończone') + $bgcol = "background-color: rgba(0, 255, 0, 0.1);"; + + echo" + <TR STYLE='cursor: pointer; ".$bgcol."' onclick=".chr(34)."document.location.href='?pg=site810inf&id=".$_SESSION['site810_array'][$i]['orderID']."'".chr(34)."> + <TD class='field_right'>".($i+1).".</TD> + <TD class='field_center'>".$_SESSION['site810_array'][$i]['orderNo']."</TD> + <TD class='field_center'>".$_SESSION['site810_array'][$i]['devName']."</TD> + <TD class='field_center'>".$_SESSION['site810_array'][$i]['bariera']."</TD> + <TD class='field_center'>".$_SESSION['site810_array'][$i]['orderScope']."</TD> + <TD class='field_center'>".$_SESSION['site810_array'][$i]['orderDate']."</TD> + <TD class='field_center'>".$_SESSION['site810_array'][$i]['orderStatus']."</TD> + </TR> + "; + } + ?> + </table> + + + <table style="width:100%; background-color: #f5f5f5"> + <tr> + <td style="width: 25%; text-align: left;"><span class="resume">Wyników: <?php echo count($_SESSION['site810_array']); ?></span></td> + <td style="width: 50%; text-align: center;"> + <?php + if (count($_SESSION['site810_array'])>20) + echo pagination_grid('./?pg=site810', $_GET['pgn'], count($_SESSION['site810_array'])); + ?> + </td> + <td style="width: 25%; text-align: right;"> + <a href="./export/site810_xls.php" target="_blank" title="Export do EXCEL"><img src="./images/excel_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site810_pdf.php" target="_blank" title="Export do PDF"><img src="./images/pdf_ico.png" style="max-width: 20px; border: 0;"></a>&nbsp; + <a href="./export/site810_print.php" target="_blank" title="Wydruk"><img src="./images/printer-icon.png" style="max-width: 20px; border: 0;"></a>&nbsp; + </td> + </tr> + </table> + + + + </div> + + <?php + if (!empty($_SESSION['site810_edit'])) + echo" + <div class=tag_buttons> + <a href='?pg=site810A_1'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='$lab_ButtonName_Add'></A> + </div> + "; + ?> + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> diff --git a/sites/site810A_1.php b/sites/site810A_1.php new file mode 100644 index 0000000..14a3ff6 --- /dev/null +++ b/sites/site810A_1.php @@ -0,0 +1,196 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + unset($_SESSION['site810A_issetNoID']); + // dodatkowe kasowanie jak wracamy + unset($_SESSION['site810A_inOrderPump']); + unset($_SESSION['site810A_inOrderPumpSn']); + unset($_SESSION['site810A_inOrderEng']); + unset($_SESSION['site810A_inOrderEngSn']); + + unset($_SESSION['site810A_inOrderDST']); + unset($_SESSION['site810A_inOrderKT']); + unset($_SESSION['site810A_inOrderLS']); + unset($_SESSION['site810A_inOrderLP']); + unset($_SESSION['site810A_inOrderLZ']); + unset($_SESSION['site810A_inOrderRzdna']); + unset($_SESSION['site810A_inOrderIlCln']); + unset($_SESSION['site810A_inOrderZwrDate']); + unset($_SESSION['site810A_inOrderSndHyd']); + unset($_SESSION['site810A_inOrderSndHydSN']); + unset($_SESSION['site810A_inOrderSndHydDlKb']); + unset($_SESSION['site810A_inOrderBariera']); + + + + + // automatyczne wypełnianie/zapamiętywanie pól + if (empty($_SESSION['site810A_inOrderRegDate'])) $_SESSION['site810A_inOrderRegDate']=date('Y-m-d'); + if (!empty($_POST['inOrderRegDate'])) $_SESSION['site810A_inOrderRegDate']=$_POST['inOrderRegDate']; + + + + ?> + + + +<form action="./?pg=site810A_2" method="post" id="AddOrders_1" class="form_valid"> +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site810_002 ;?></div> + <div class="tag"> + + + <div class="steps"> + <img src="./images/order_step_1.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site810A_1"> + </map> + </div> + + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_018; ?></TD> + <TD CLASS="desc_value"> + <select name="inOrderBranch"> + <?php + if (strstr($_SESSION['syndis_eq_stock'],'Be')) + { + if($_SESSION['site810A_inOrderBranch']=='o-1') echo"<option value='o-1' selected>o-1</option>"; + else echo"<option value='o-1'>o-1</option>"; + //if($_SESSION['site810A_inOrderBranch']=='o-1D') echo"<option value='o-1' selected>o-1D</option>"; + //else echo"<option value='o-1D'>o-1D</option>"; + } + else if (strstr($_SESSION['syndis_eq_stock'],'Szcz')) + { + if($_SESSION['site810A_inOrderBranch']=='o-2') echo"<option value='o-2' selected>o-2</option>"; + else echo"<option value='o-2'>o-2</option>"; + } + else if (strstr($_SESSION['syndis_eq_stock'],'bin')) + { + if($_SESSION['site810A_inOrderBranch']=='o-1D') echo"<option value='o-1' selected>o-1D</option>"; + else echo"<option value='o-1D'>o-1D</option>"; + //if($_SESSION['site810A_inOrderBranch']=='o-1') echo"<option value='o-1' selected>o-1</option>"; + //else echo"<option value='o-1'> o-1</option>"; + } + + ?> + </select> + </TD> + </TR> + + + <TR> + <TD class="desc"><?php echo $lab_Field_site810_008; ?></TD> + <TD CLASS="desc_value"> + <select name="inOrderObjectType" id="selectObj"> + <option value="0">--- Wybierz z listy ---</option> + <option value="12" <?php if($_SESSION['site810A_inOrderObjectType']==12) echo "selected"; echo"> $lab_Field_site301_001"; ?></option> + <option value="601" <?php if($_SESSION['site810A_inOrderObjectType']==601) echo "selected"; echo"> $lab_Tag_site309_003"; ?></option> + </select> + </TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site810_004; ?></TD> + <TD CLASS="desc_value"> + <select name="inOrderScope" id="selectScp"> + <option value="0">--- Wybierz z listy ---</option> + <?php + if (!empty($_SESSION['site810A_inOrderScope'])) + { + if ($_SESSION['site810A_inOrderScope']<830) + { + if($_SESSION['site810A_inOrderScope']==801) echo"<option value=801 selected> $lab_Field_site810_009</option>"; + else echo"<option value=801> $lab_Field_site810_009</option>"; + if($_SESSION['site810A_inOrderScope']==802) echo"<option value=802 selected> $lab_Field_site810_040</option>"; + else echo"<option value=802> $lab_Field_site810_040</option>"; + if($_SESSION['site810A_inOrderScope']==803) echo"<option value=803 selected> $lab_Field_site810_041</option>"; + else echo"<option value=803> $lab_Field_site810_041</option>"; + if($_SESSION['site810A_inOrderScope']==804) echo"<option value=804 selected> $lab_Field_site810_011</option>"; + else echo"<option value=804> $lab_Field_site810_011</option>"; + if($_SESSION['site810A_inOrderScope']==805) echo"<option value=805 selected> $lab_Field_site810_012</option>"; + else echo"<option value=805> $lab_Field_site810_012</option>"; + if($_SESSION['site810A_inOrderScope']==806) echo"<option value=806 selected> $lab_Field_site810_013</option>"; + else echo"<option value=806> $lab_Field_site810_013</option>"; + + if($_SESSION['site810A_inOrderScope']==807) echo"<option value=807 selected> $lab_Field_site810_042</option>"; + else echo"<option value=807> $lab_Field_site810_042</option>"; + if($_SESSION['site810A_inOrderScope']==808) echo"<option value=808 selected> $lab_Field_site810_010</option>"; + else echo"<option value=808> $lab_Field_site810_010</option>"; + if($_SESSION['site810A_inOrderScope']==809) echo"<option value=809 selected> $lab_Field_site810_019</option>"; + else echo"<option value=809> $lab_Field_site810_019</option>"; + + + + } + else{ + if($_SESSION['site810A_inOrderScope']==831) echo"<option value=831 selected> $lab_Field_site810_014</option>"; + else echo"<option value=831> $lab_Field_site810_014</option>"; + if($_SESSION['site810A_inOrderScope']==832) echo"<option value=832 selected> $lab_Field_site810_015</option>"; + else echo"<option value=832> $lab_Field_site810_015</option>"; + if($_SESSION['site810A_inOrderScope']==833) echo"<option value=833 selected> $lab_Field_site810_016</option>"; + else echo"<option value=833> $lab_Field_site810_016</option>"; + if($_SESSION['site810A_inOrderScope']==834) echo"<option value=834 selected> $lab_Field_site810_017</option>"; + else echo"<option value=834> $lab_Field_site810_017</option>"; + if($_SESSION['site810A_inOrderScope']==835) echo"<option value=835 selected> $lab_Field_site810_019</option>"; + else echo"<option value=835> $lab_Field_site810_019</option>"; + } + } + + ?> + + </select> + + + </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_006; ?></TD> + <TD CLASS="desc_value"> + <?php selectFromDictionary('inOrderStatus', 'ORDER_STATUS',$_SESSION['site810A_inOrderStatus'])?> + </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_005; ?></TD> + <TD CLASS="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inOrderRegDate' SIZE='10' value="<?php echo $_SESSION['site810A_inOrderRegDate']; ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_007; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" class="text75_req" NAME="inOrderOwner" value="<?php echo $_SESSION['site810A_inOrderOwner']; ?>"></TD> + </TR> + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class='btn btn-info btn-sm' href="?pg=site810" role="button" style="text-decoration: none;" onclick="return confirm('Jesteś pewien, że chcesz przerwać proces rejestracji zlecenia?');"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subNext_1" VALUE="<?php echo $lab_ButtonName_FinishNext; ?>"> + + </div> +</div> +</form> + + +<script type="text/javascript"> + +$(document).ready(function(){ + localStorage.clear(); +}); + +</script> + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site810A_2.php b/sites/site810A_2.php new file mode 100644 index 0000000..cad18d4 --- /dev/null +++ b/sites/site810A_2.php @@ -0,0 +1,457 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#inZwrDate").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + //sprawdza licznik zleceń + if (isset($_POST['inOrderBranch']) && ($_SESSION['site810A_inOrderBranch'] != $_POST['inOrderBranch'] || $_SESSION['site810A_inOrderScope'] != $_POST['inOrderScope'] || $_SESSION['site810A_inOrderObjectType'] != $_POST['inOrderObjectType'])) + { + if ($_POST['inOrderScope']==804) $beforeNo = "U "; + else if ($_POST['inOrderScope']==805) $beforeNo = "C "; + else if ($_POST['inOrderScope']==806) $beforeNo = "R "; + else if ($_POST['inOrderScope']==807) $beforeNo = "I "; + else if ($_POST['inOrderScope']==808) $beforeNo = "L "; + //else if ($_POST['inOrderScope']==809) $beforeNo = "IP "; + + else if ($_POST['inOrderScope']==831) $beforeNo = "Up "; + else if ($_POST['inOrderScope']==832) $beforeNo = "Cp "; + else if ($_POST['inOrderScope']==835) $beforeNo = "Lp "; + else if ($_POST['inOrderScope']==833) $beforeNo = "Rp "; + else if ($_POST['inOrderScope']==834) $beforeNo = "Ip "; + else $beforeNo = ""; + + $noID = sqlStringValue("select max(ONC_VALUE) VAL from seg_order_no_counters where ONC_SCOPE='".$beforeNo."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_POST['inOrderBranch']."'","VAL"); + if ($noID<1) + { + $noID=1; +// mysql_query("INSERT INTO seg_order_no_counters SET ONC_VALUE=1,ONC_SCOPE='".$beforeNo."',ONC_YEAR='".date('Y')."',ONC_PLC='".$_POST['inOrderBranch']."'"); + + } + else + { + $noID = sqlStringValue("select max(ONC_VALUE)+1 VAL from seg_order_no_counters where ONC_SCOPE='".$beforeNo."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_POST['inOrderBranch']."'","VAL"); +// mysql_query("UPDATE seg_order_no_counters SET ONC_VALUE=(ONC_VALUE)+1 where ONC_SCOPE='".$beforeNo."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_POST['inOrderBranch']."'"); + //echo"UPDATE seg_order_no_counters SET ONC_VALUE=(ONC_VALUE)+1 where ONC_SCOPE='".$beforeNo."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_POST['inOrderBranch']."'"; + } + + //rejestruje w sesji numeru ale nie wpisuje ich jeszcze do bazy + $_SESSION['site810A_beforeNo'] = $beforeNo; + $_SESSION['site810A_OrderBranch'] = $_POST['inOrderBranch']; + $_SESSION['site810A_noID'] = $noID; + + + $_SESSION['site810A_inOrderNo'] = $beforeNo.$noID.'/'.date('m').'/'.$_POST['inOrderBranch'].'/'.date('Y'); + mysql_query("INSERT INTO seg_orders SET ORD_NO='".$_SESSION['site810A_inOrderNo']."',ORD_SCOPE_DIC_ID=".$_POST['inOrderScope'].",ORD_STATUS_DIC_ID=".$_POST['inOrderStatus'].",ORD_PLC='".$_POST['inOrderBranch']."',ORD_PRINT_TYPE='".$_POST['inOrderScope']."',ORD_AUDIT_USR='".$_POST['inOrderOwner']."',ORD_AUDIT_DATE='".$_POST['inOrderRegDate']."'"); + $_SESSION['site810A_OrderID'] = sqlValue("select max(ORD_ID) from seg_orders"); + + } + + + //pobiera dane z formularza do zmiennych sesyjnych + if (isset($_POST['inOrderBranch'])) $_SESSION['site810A_inOrderBranch'] = $_POST['inOrderBranch']; + if (isset($_POST['inOrderScope'])) $_SESSION['site810A_inOrderScope'] = $_POST['inOrderScope']; + if (isset($_POST['inOrderStatus'])) $_SESSION['site810A_inOrderStatus'] = $_POST['inOrderStatus']; + if (isset($_POST['inOrderRegDate'])) $_SESSION['site810A_inOrderRegDate'] = $_POST['inOrderRegDate']; + if (isset($_POST['inOrderOwner'])) $_SESSION['site810A_inOrderOwner'] = $_POST['inOrderOwner']; + if (isset($_POST['inOrderObjectType'])) $_SESSION['site810A_inOrderObjectType'] = $_POST['inOrderObjectType']; + + if (empty($_SESSION['site810A_inOrderWell'])) $_SESSION['site810A_inOrderWell']=-1; + + ?> + + +<?php if ($_SESSION['site810A_inOrderObjectType']==12): ?> + <form action="./?pg=site810A_3" method="post" id="AddOrders_2w" class="form_valid"> +<?php else: ?> + <form action="./?pg=site810A_3" method="post" id="AddOrders_2p" class="form_valid"> +<?php endif; ?> + + +<div class="tag100"> + <input type="hidden" name="dev" id="devid"> + <div class="head_tag"><?php echo $lab_Tag_site810_002 ;?></div> + <div class="tag"> + + <div class="steps"> + <img src="./images/order_step_2.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site810A_1"> + </map> + </div> + + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_001; ?></TD> + <TD CLASS="desc_value"><INPUT class="text50_req" readonly TYPE="TEXT" NAME="inOrderNo" value="<?php echo $_SESSION['site810A_inOrderNo']; ?>"></TD> + </TR> + + + + + + + <?php + // Jeśli site810A_inOrderObjectType == 12 // studnia + if ($_SESSION['site810A_inOrderObjectType']==12) + { + // wczutuje listę studni + if (empty($_SESSION['site810_well_array'])) + { + $res=null; + + if ($_SESSION['site810A_inOrderScope']==801 || $_SESSION['site810A_inOrderScope']==802) + $wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,PUP_ID,WLE_PUMP_NAME,WLE_PUMP_NO,ENG_ID,WLE_ENG_NAME,WLE_ENG_NO,SOD_UJ from rep_object_departments_orders where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + else + $wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,PUP_ID,WLE_PUMP_NAME,WLE_PUMP_NO,ENG_ID,WLE_ENG_NAME,WLE_ENG_NO,SOD_UJ from rep_object_departments where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + +// $wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,PUP_ID,WLE_PUMP_NAME,WLE_PUMP_NO,ENG_ID,WLE_ENG_NAME,WLE_ENG_NO,SOD_UJ from rep_object_departments where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'devID' => $r["DRS_ID"], + 'wellID' => $r["WLL_ID"], + 'wellName' => $r["WLL_NAME"], + 'pumpID' => $r["PUP_ID"], + 'pumpName' => $r["WLE_PUMP_NAME"], + 'pumpSN' => $r["WLE_PUMP_NO"], + 'engID' => $r["ENG_ID"], + 'engName' => $r["WLE_ENG_NAME"], + 'engSN' => $r["WLE_ENG_NO"], + 'bariera' => $r["SOD_UJ"] + ); + } + unset($_SESSION['site810_well_array']); + $_SESSION['site810_well_array']=$res; + } + + echo' + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_020; ?></TD> + </TR> + <tr> + <td class="desc">'.$lab_Field_site301_001.'</td>'; + echo' + <td class="desc_value"><select name="inOrderWell" id="site810A_2_inOrderWell"> + <option value="0">--- Wybierz z listy ---</option> + '; + for ($i=0; $i<count($_SESSION['site810_well_array']);$i++) + if ($_SESSION['site810A_inOrderWell']==$i) + echo'<option value="'.$i.'" selected>'.$_SESSION['site810_well_array'][$i]['wellName'].'</option>'; + else + echo'<option value="'.$i.'">'.$_SESSION['site810_well_array'][$i]['wellName'].'</option>'; + + echo'</select></td> + + </tr>'; + + echo' + <tr> + <td class="desc">'.$lab_Field_site810_003.'</td> + <td class="desc_value"><input type="text" name="inOrderBariera" value="'.$_SESSION['site810A_inOrderBariera'].'" id="inBariera"></td> + </tr> + '; + + if ($_SESSION['site810A_inOrderScope']==801 || $_SESSION['site810A_inOrderScope']==802 || $_SESSION['site810A_inOrderScope']==809) + echo' + <tr> + <td class="desc">'.$lab_Field_site301_002.'</td> + <td class="desc_value"> + <input type="text" name="inOrderPump" value="'.$_SESSION['site810A_inOrderPump'].'" id="inPump"> + <input type="text" name="inOrderPumpSn" value="'.$_SESSION['site810A_inOrderPumpSn'].'" id="inPumpSn"> + </td> + </tr> + <tr> + <td class="desc">'.$lab_Field_site301_004.'</td> + <td class="desc_value"> + <input type="text" name="inOrderEng" value="'.$_SESSION['site810A_inOrderEng'].'" id="inEng"> + <input type="text" name="inOrderEngSn" value="'.$_SESSION['site810A_inOrderEngSn'].'" id="inEngSn"> + </td> + </tr> + + '; + echo' + + <tr> + <td class="desc">'.$lab_Field_site301_012.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderDST" value="'.$_SESSION['site810A_inOrderDST'].'" id="inDST"></td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site810_022.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderKT" value="'.$_SESSION['site810A_inOrderKT'].'" id="inKT"></td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site301_013.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLS" value="'.$_SESSION['site810A_inOrderLS'].'" id="inLS"></td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site810_021.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLP" value="'.$_SESSION['site810A_inOrderLP'].'" id="inLP"></td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site301_019.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLZ" value="'.$_SESSION['site810A_inOrderLZ'].'" id="inLZ"></td> + </tr> + '; + + //rzędna terenu + if ($_SESSION['site810A_inOrderScope']==804) + echo' + <tr> + <td class="desc">'.$lab_Field_site810_049.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderRzdna" value="'.$_SESSION['site810A_inOrderRzdna'].'" id="inRzdna"></td> + </tr> + '; + + // ilość metrów do wyczyszczenia + if ($_SESSION['site810A_inOrderScope']==804 || $_SESSION['site810A_inOrderScope']==805) + echo' + <tr> + <td class="desc">'.$lab_Field_site810_047.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderIlCln" value="'.$_SESSION['site810A_inOrderIlCln'].'" id="inIlCln"></td> + </tr> + '; + + // Zwierciadło statyczne dla studni + if ($_SESSION['site810A_inOrderScope']==805 || $_SESSION['site810A_inOrderScope']==808 || $_SESSION['site810A_inOrderScope']==835) + echo' + <tr> + <td class="desc">'.$lab_Field_site810_048.'</td> + <td class="desc_value"> + <input type="text" class="postcode" name="inOrderZwr" value="'.$_SESSION['site810A_inOrderZwr'].'" id="inZwr"> + <INPUT STYLE="text-align: right" TYPE="TEXT" NAME="inOrderZwrDate" SIZE="10" value="'.$_SESSION['site810A_inOrderZwrDate'].'" id="inZwrDate"> + </td> + </tr> + '; + + + + if ($_SESSION['site810A_inOrderScope']==801 || $_SESSION['site810A_inOrderScope']==802) + echo' + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;">'.$lab_Field_site810_024.'</TD> + </TR> + + <tr> + <td class="desc">'.$lab_Tag_site302_003.'</td> + <td class="desc_value"><input type="text" name="inOrderSndHyd" value="'.$_SESSION['site810A_inOrderSndHyd'].'" id="inSndHyd"></td> + </tr> + <tr> + <td class="desc">'.$lab_Field_site302_005.'</td> + <td class="desc_value"><input type="text" name="inOrderSndHydSN" value="'.$_SESSION['site810A_inOrderSndHydSN'].'" id="inSndHydSN"></td> + </tr> + <tr> + <td class="desc">'.$lab_Field_site303_017.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderSndHydDlKb" value="'.$_SESSION['site810A_inOrderSndHydDlKb'].'" id="inSndHydDlKb"></td> + </tr> + '; + + + echo' + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"></TD> + </TR> + + <tr> + <td class="desc">'.$lab_Field_site810_023.'</td> + <td class="desc_value"><input type="text" class="text75" name="inOrderMetan" value="'.$_SESSION['site810A_inOrderMetan'].'"></td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site810_025.'</td> + <td class="desc_value">'; + echo selectFromDictionary('inOrderDelivery', 'ORDER_DELIVERY',$_SESSION['site810A_inOrderDelivery']); + echo'</td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site803_010.'</td> + <td class="desc_value"><textarea name="inOrderDesc">'.$_SESSION['site810A_inOrderDesc'].'</textarea></td> + </tr> + '; + + } + else if ($_SESSION['site810A_inOrderObjectType']==601) + { + + // wczutuje listę piezometrów + if (empty($_SESSION['site810_piezo_array'])) + { + $res = null; + $wynik = mysql_query("select DRS_ID,PZO_ID,PZO_NAME,SOD_UJ,SOD_DESC,DEPTH,DIAMETER from rep_piezo_departments where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by PZO_NAME"); + if ($wynik) while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'devID' => $r["DRS_ID"], + 'piezoID' => $r["PZO_ID"], + 'piezoName' => $r["PZO_NAME"], + 'bariera' => $r["SOD_UJ"], + 'opis' => $r["SOD_DESC"], + 'glebokosc' => $r["DEPTH"], + 'srednica' => $r["DIAMETER"] + ); + } + unset($_SESSION['site810_piezo_array']); + $_SESSION['site810_piezo_array']=$res; + + } + + + echo'<tr><td class="desc">'.$lab_Tag_site309_003.'</td>'; + echo' + <td class="desc_value"><select name="inOrderPiezo" id="site810A_2_inOrderPiezo"> + <option value="0">--- Wybierz z listy ---</option> + '; + for ($i=0; $i<count($_SESSION['site810_piezo_array']);$i++) + if ($_SESSION['site810_piezo_array']==$i) + echo'<option value="'.$i.'" selected>'.$_SESSION['site810_piezo_array'][$i]['piezoName'].'</option>'; + else + echo'<option value="'.$i.'">'.$_SESSION['site810_piezo_array'][$i]['piezoName'].'</option>'; + + echo'</select></td> + + </tr>'; + + echo' + <tr> + <td class="desc">'.$lab_Field_site810_003.'</td> + <td class="desc_value"><input type="text" name="inOrderBariera" value="'.$_SESSION['site810A_inOrderBariera'].'" id="inBariera"></td> + </tr> + <tr> + <td class="desc">'.$lab_Field_site203_011.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderDST" value="'.$_SESSION['site810A_inOrderDST'].'" id="inDST"></td> + </tr> + <tr> + <td class="desc">'.$lab_Field_site302_007.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLS" value="'.$_SESSION['site810A_inOrderLS'].'" id="inLS"></td> + </tr> + '; + + //rzędna terenu + if ($_SESSION['site810A_inOrderScope']==831) + echo' + <tr> + <td class="desc">'.$lab_Field_site810_049.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderRzdna" value="'.$_SESSION['site810A_inOrderRzdna'].'" id="inRzdna"></td> + </tr> + '; + + + if ($_SESSION['site810A_inOrderScope']==835 || $_SESSION['site810A_inOrderScope']==832) + echo' + <tr> + <td class="desc">'.$lab_Field_site301_019.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLZ" value="'.$_SESSION['site810A_inOrderLZ'].'" id="inLZ"></td> + </tr> + '; + + if ($_SESSION['site810A_inOrderScope']==831 || $_SESSION['site810A_inOrderScope']==832) + echo' + <tr> + <td class="desc">'.$lab_Field_site810_047.'</td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderIlCln" value="'.$_SESSION['site810A_inOrderIlCln'].'" id="inIlCln"></td> + </tr> + '; + + if ($_SESSION['site810A_inOrderScope']==835) + echo' + <tr> + <td class="desc">'.$lab_Field_site810_048.'</td> + <td class="desc_value"> + <input type="text" class="postcode" name="inOrderZwr" value="'.$_SESSION['site810A_inOrderZwr'].'" id="inZwr"> + <INPUT STYLE="text-align: right" TYPE="TEXT" NAME="inOrderZwrDate" SIZE="10" value="'.$_SESSION['site810A_inOrderZwrDate'].'" id="inZwrDate"> + </td> + </tr> + '; + + + + echo' + + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"></TD> + </TR> + + <tr> + <td class="desc">'.$lab_Field_site810_023.'</td> + <td class="desc_value"><input type="text" class="text75" name="inOrderMetan" value="'.$_SESSION['site810A_inOrderMetan'].'"></td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site810_025.'</td> + <td class="desc_value">'; + echo selectFromDictionary('inOrderDelivery', 'ORDER_DELIVERY',$_SESSION['site810A_inOrderDelivery']); + echo'</td> + </tr> + + <tr> + <td class="desc">'.$lab_Field_site803_010.'</td> + <td class="desc_value"><textarea name="inOrderDesc">'.$_SESSION['site810A_inOrderDesc'].'</textarea></td> + </tr> + + + + '; + + + + + + + } + ?> + + </TABLE> + + + </div> + + <div class="tag_buttons"> + + <?php if ($_SESSION['site810A_inOrderScope']==801 || $_SESSION['site810A_inOrderScope']==803): ?> + <INPUT class='btn btn-info btn-sm' TYPE="SUBMIT" NAME="subNext_2" VALUE="<?php echo $lab_ButtonName_FinishSave; ?>"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subNext_2" VALUE="<?php echo $lab_ButtonName_FinishNext; ?>"> + <?php else: ?> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subNext_2" VALUE="<?php echo $lab_ButtonName_FinishSave; ?>"> + <?php endif; ?> + + </div> +</div> +<div id="site810A_2"></div> +</form> + + +<link href="./style/select2.min.css" rel="stylesheet" /> +<script src="./js/select2.min.js"></script> + +<script type="text/javascript"> + $('#site810A_2_inOrderWell').select2(); + $('#site810A_2_inOrderPiezo').select2(); + +</script> + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + + + diff --git a/sites/site810A_3.php b/sites/site810A_3.php new file mode 100644 index 0000000..4431652 --- /dev/null +++ b/sites/site810A_3.php @@ -0,0 +1,286 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + //przypisywanie zmianych post do zmiannych sesyjnych + if (isset($_POST['inOrderWell'])) $_SESSION['site810A_inOrderWell'] = $_POST['inOrderWell']; + if (isset($_POST['inOrderBariera'])) $_SESSION['site810A_inOrderBariera'] = $_POST['inOrderBariera']; + if (isset($_POST['inOrderPump'])) $_SESSION['site810A_inOrderPump'] = $_POST['inOrderPump']; + if (isset($_POST['inOrderPumpSn'])) $_SESSION['site810A_inOrderPumpSn'] = $_POST['inOrderPumpSn']; + if (isset($_POST['inOrderEng'])) $_SESSION['site810A_inOrderEng'] = $_POST['inOrderEng']; + if (isset($_POST['inOrderEngSn'])) $_SESSION['site810A_inOrderEngSn'] = $_POST['inOrderEngSn']; + if (isset($_POST['inOrderLS'])) $_SESSION['site810A_inOrderLS'] = $_POST['inOrderLS']; + if (isset($_POST['inOrderRzdna'])) $_SESSION['site810A_inOrderRzdna'] = $_POST['inOrderRzdna']; + if (isset($_POST['inOrderDST'])) $_SESSION['site810A_inOrderDST'] = $_POST['inOrderDST']; + if (isset($_POST['inOrderLZ'])) $_SESSION['site810A_inOrderLZ'] = $_POST['inOrderLZ']; + if (isset($_POST['inOrderLP'])) $_SESSION['site810A_inOrderLP'] = $_POST['inOrderLP']; + if (isset($_POST['inOrderKT'])) $_SESSION['site810A_inOrderKT'] = $_POST['inOrderKT']; + if (isset($_POST['inOrderIlCln'])) $_SESSION['site810A_inOrderIlCln'] = $_POST['inOrderIlCln']; + + if (isset($_POST['inOrderZwr'])) $_SESSION['site810A_inOrderZwr'] = $_POST['inOrderZwr']; + if (isset($_POST['inOrderZwrDate'])) $_SESSION['site810A_inOrderZwrDate'] = $_POST['inOrderZwrDate']; + + + if (isset($_POST['inOrderSndHyd'])) $_SESSION['site810A_inOrderSndHyd'] = $_POST['inOrderSndHyd']; + if (isset($_POST['inOrderSndHydSN'])) $_SESSION['site810A_inOrderSndHydSN'] = $_POST['inOrderSndHydSN']; + if (isset($_POST['inOrderSndHydDlKb'])) $_SESSION['site810A_inOrderSndHydDlKb'] = $_POST['inOrderSndHydDlKb']; + if (isset($_POST['inOrderMetan'])) $_SESSION['site810A_inOrderMetan'] = $_POST['inOrderMetan']; + if (isset($_POST['inOrderDelivery'])) $_SESSION['site810A_inOrderDelivery'] = $_POST['inOrderDelivery']; + if (isset($_POST['inOrderDesc'])) $_SESSION['site810A_inOrderDesc'] = $_POST['inOrderDesc']; + + if (isset($_POST['inOrderPiezo'])) $_SESSION['site810A_inOrderPiezo'] = $_POST['inOrderPiezo']; + + + // wybór pompy/silnika + if (isset($_GET['agg'])) $_SESSION['site810_newAggId']=$_GET['agg']; + $newAggId = $_SESSION['site810_newAggId']; + + //wybór sondy + if (isset($_GET['snd'])) + { + if ($_GET['snd']>0) $ind=$_GET['snd']; else $ind = 0; + $_SESSION['site810A_inOrderSndHyd'] = $_SESSION['site810_newSnd_array'][$ind]['SND_NAME']; + $_SESSION['site810A_inOrderSndHydSN'] = $_SESSION['site810_newSnd_array'][$ind]['DRS_SN_NUMBER']; + $_SESSION['site810A_inOrderSndHydDlKb'] = $_SESSION['site810_newSnd_array'][$ind]['DL_KAB']; + } + + + ?> + + <?php + // jeśli obiektem jest studnia + if ($_SESSION['site810A_inOrderObjectType']==12) + { + //rejestruje nr zlecenia + if (!empty($_SESSION['site810A_OrderBranch']) && !empty($_SESSION['site810A_noID']) && empty($_SESSION['site810A_issetNoID'])) + { + if (sqlStringValue("select max(ONC_VALUE) VAL from seg_order_no_counters where ONC_SCOPE='".$_SESSION['site810A_beforeNo']."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_SESSION['site810A_OrderBranch']."'","VAL")==0) + mysql_query("INSERT INTO seg_order_no_counters SET ONC_VALUE=1,ONC_SCOPE='".$_SESSION['site810A_beforeNo']."',ONC_YEAR='".date('Y')."',ONC_PLC='".$_SESSION['site810A_OrderBranch']."'"); + else + mysql_query("UPDATE seg_order_no_counters SET ONC_VALUE=".$_SESSION['site810A_noID']." where ONC_SCOPE='".$_SESSION['site810A_beforeNo']."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_SESSION['site810A_OrderBranch']."'"); + + $_SESSION['site810A_issetNoID']=100; + } + + //zapisuje/aktualizuje dane do bazy + mysql_query("DELETE FROM seg_order_obj_params WHERE OWP_ORD_ID=".$_SESSION['site810A_OrderID']); + mysql_query("INSERT INTO seg_order_obj_params SET OWP_ORD_ID=".$_SESSION['site810A_OrderID'].",OWP_LOKAL='".$_SESSION['site810A_inOrderBariera']."',OWP_GLEB_S='".$_SESSION['site810A_inOrderLS']."',OWP_RZDNA='".$_SESSION['site810A_inOrderRzdna']."',OWP_ZASYP='".$_SESSION['site810A_inOrderLZ']."',OWP_SRED='".$_SESSION['site810A_inOrderDST']."',OWP_GLEB_AG='".$_SESSION['site810A_inOrderLP']."',OWP_PUMP='".$_SESSION['site810A_inOrderPump'].", nr: ".$_SESSION['site810A_inOrderPumpSn']."',OWP_ENG='".$_SESSION['site810A_inOrderEng'].", nr: ".$_SESSION['site810A_inOrderEngSn']."',OWP_SRED_KOL='".$_SESSION['site810A_inOrderKT']."',OWP_METAN='".$_SESSION['site810A_inOrderMetan']."',OWP_SONDA='".$_SESSION['site810A_inOrderSndHyd'].", nr: ".$_SESSION['site810A_inOrderSndHydSN'].", dł. kabla: ".$_SESSION['site810A_inOrderSndHydDlKb']."',OWP_DOJAZD='".$_SESSION['site810A_inOrderDelivery']."',OWP_INNE='".$_SESSION['site810A_inOrderDesc']."',OWP_CLEAN='".$_SESSION['site810A_inOrderIlCln']."',OWP_ZWIERC='".$_SESSION['site810A_inOrderZwr']." / ".$_SESSION['site810A_inOrderZwrDate']."',OWP_AUDIT_USR='".$_SESSION['user']."',OWP_AUDIT_DATE=now();"); + unset($selTmpID); $selTmpID = $_SESSION['site810A_inOrderWell']; + mysql_query("UPDATE seg_orders SET ORD_DRS_ID=".$_SESSION['site810_well_array'][$selTmpID]['devID'].",ORD_OBJ_NAME='".$_SESSION['site810_well_array'][$selTmpID]['wellName']."',ORD_OBJ_TYPE=".$_SESSION['site810A_inOrderObjectType']." WHERE ORD_ID=".$_SESSION['site810A_OrderID']); + + if ($_POST['subNext_2']==$lab_ButtonName_FinishSave) + { + echo'<meta http-equiv="refresh" content="1; URL=/?pg=site810inf&id='.$_SESSION['site810A_OrderID'].'">'; + } + } + + // jeśli obiektem jest piezometr + else if ($_SESSION['site810A_inOrderObjectType']==601) + { + //rejestruje nr zlecenia + if (!empty($_SESSION['site810A_OrderBranch']) && !empty($_SESSION['site810A_noID']) && empty($_SESSION['site810A_issetNoID'])) + { + if (sqlStringValue("select max(ONC_VALUE) VAL from seg_order_no_counters where ONC_SCOPE='".$_SESSION['site810A_beforeNo']."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_SESSION['site810A_OrderBranch']."'","VAL")==0) + mysql_query("INSERT INTO seg_order_no_counters SET ONC_VALUE=1,ONC_SCOPE='".$_SESSION['site810A_beforeNo']."',ONC_YEAR='".date('Y')."',ONC_PLC='".$_SESSION['site810A_OrderBranch']."'"); + else + mysql_query("UPDATE seg_order_no_counters SET ONC_VALUE=".$_SESSION['site810A_noID']." where ONC_SCOPE='".$_SESSION['site810A_beforeNo']."' and ONC_YEAR='".date('Y')."' and ONC_PLC='".$_SESSION['site810A_OrderBranch']."'"); + + $_SESSION['site810A_issetNoID']=100; + } + + //zapisuje/aktualizuje dane do bazy + mysql_query("DELETE FROM seg_order_obj_params WHERE OWP_ORD_ID=".$_SESSION['site810A_OrderID']); + mysql_query("INSERT INTO seg_order_obj_params SET OWP_ORD_ID=".$_SESSION['site810A_OrderID'].",OWP_LOKAL='".$_SESSION['site810A_inOrderBariera']."',OWP_GLEB_S='".$_SESSION['site810A_inOrderLS']."',OWP_RZDNA='".$_SESSION['site810A_inOrderRzdna']."',OWP_SRED='".$_SESSION['site810A_inOrderDST']."',OWP_METAN='".$_SESSION['site810A_inOrderMetan']."',OWP_DOJAZD='".$_SESSION['site810A_inOrderDelivery']."',OWP_INNE='".$_SESSION['site810A_inOrderDesc']."',OWP_ZASYP='".$_SESSION['site810A_inOrderLZ']."',OWP_CLEAN='".$_SESSION['site810A_inOrderIlCln']."',OWP_ZWIERC='".$_SESSION['site810A_inOrderZwr']." / ".$_SESSION['site810A_inOrderZwrDate']."',OWP_AUDIT_USR='".$_SESSION['user']."',OWP_AUDIT_DATE=now();"); + unset($selTmpID); $selTmpID = $_SESSION['site810A_inOrderPiezo']; + mysql_query("UPDATE seg_orders SET ORD_DRS_ID=".$_SESSION['site810_piezo_array'][$selTmpID]['devID'].",ORD_OBJ_NAME='".$_SESSION['site810_piezo_array'][$selTmpID]['piezoName']."',ORD_OBJ_TYPE=".$_SESSION['site810A_inOrderObjectType']." WHERE ORD_ID=".$_SESSION['site810A_OrderID']); + + if ($_POST['subNext_2']==$lab_ButtonName_FinishSave) + { + echo'<meta http-equiv="refresh" content="1; URL=/?pg=site810inf&id='.$_SESSION['site810A_OrderID'].'">'; + } + } + + + ?> + +<?php if ($_POST['subNext_2']==$lab_ButtonName_FinishSave): ?> + + <div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site810_002 ;?></div> + <div class="tag_center"> + <br/><br/> + <img src="./images/zapis_danych_dyn.gif"> + <br/><br/>&nbsp; + </div> + </div> + + +<?php else: ?> + +<form action="./?pg=site810inf&id=<?php echo $_SESSION['site810A_OrderID']; ?>" method="post" id="AddOrders_3" class="form_valid"> +<div class="tag100"> + <input type="hidden" name="sqlcounter" value="<?php echo $noID; ?>"> + <div class="head_tag"><?php echo $lab_Tag_site810_002 ;?></div> + <div class="tag"> + + <div class="steps"> + <img src="./images/order_step_3.png" border="0" usemap="#selection"> + <map name="selection"> + <area shape="circle" coords="19,19,19" href="?pg=site810A_1"> + <area shape="circle" coords="169,19,19" href="?pg=site810A_2"> + </map> + </div> + + + + <TABLE class="desc_val"> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_001; ?></TD> + <TD CLASS="desc_value"><?php echo $_SESSION['site810A_inOrderNo']; ?></TD> + </TR> + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_045; ?></TD> + </TR> + + + + + + <TR> + <TD class="desc"><?php echo $lab_Field_site301_002; ?></TD> + <TD CLASS="desc_value"><input type="text" name="inNewPump" value="<?php echo $_SESSION['site810_newAgg_array'][$newAggId]['PUP_NAME']; ?>"> + &nbsp;&nbsp;<a class=tooltip_warning HREF="?pg=site810A_pup"><img SRC=./images/search-icon.png><span><?php echo $lab_Field_site301_010; ?></SPAN></A> + </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_003; ?></TD> + <TD CLASS="desc_value"><input type="text" name="inNewPumpNo" value="<?php echo $_SESSION['site810_newAgg_array'][$newAggId]['PUP_SN_NO']; ?>"></TD> + </TR> + + <TR> + <TD class="desc"><?php echo $lab_Field_site301_004; ?></TD> + <TD CLASS="desc_value"><input type="text" name="inNewEng" value="<?php echo $_SESSION['site810_newAgg_array'][$newAggId]['ENG_NAME']; ?>"> + &nbsp;&nbsp;<a class=tooltip_warning HREF="?pg=site810A_eng"><img SRC=./images/search-icon.png><span><?php echo $lab_Field_site301_011; ?></SPAN></A> + </TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site301_005; ?></TD> + <TD CLASS="desc_value"><input type="text" name="inNewEngNo" value="<?php echo $_SESSION['site810_newAgg_array'][$newAggId]['ENG_SN_NO']; ?>"></TD> + </TR> + + <input type="hidden" name="inNewPupDevID" value="<?php echo $_SESSION['site810_newAgg_array'][$newAggId]['PUP_DRS_ID']; ?>"> + <input type="hidden" name="inNewEngDevID" value="<?php echo $_SESSION['site810_newAgg_array'][$newAggId]['ENG_DRS_ID']; ?>"> + + + <?php + if (strlen($_SESSION['site810_newAgg_array'][$newAggId]['ECB_TYP'])>3) + $cableFullName = $_SESSION['site810_newAgg_array'][$newAggId]['ECB_TYP']. + " / ". + $_SESSION['site810_newAgg_array'][$newAggId]['ECB_DLUGOSC']. + " (". + $_SESSION['site810_newAgg_array'][$newAggId]['ECB_OZNAK_01']. + ", ". + $_SESSION['site810_newAgg_array'][$newAggId]['ECB_OZNAK_02']. + ")"; + + ?> + + + <TR> + <TD class="desc"><?php echo $lab_Field_site810_043; ?></TD> + <TD CLASS="desc_value"><input type="text" class="text50" name="inNewCable" value="<?php echo $cableFullName; ?>"></TD> + </TR> + + <?php if ($_SESSION['site810A_inOrderScope']==801): ?> + <TR> + <td class="desc"><?php echo $lab_Field_site810_021; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inNewLP" value="<?php echo $_SESSION['site810A_inOrderLP']; ?>" id="locStor_LP"></td> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_022; ?></TD> + <td class="desc_value"><input class="postcode" type="text" name="inNewKT" value="<?php echo $_SESSION['site810A_inOrderKT']; ?>" id="locStor_KT"></td> + </TR> + <?php else: ?> + <input type="hidden" name="inNewLP" value="<?php echo $_SESSION['site810A_inOrderLP']; ?>"> + <input type="hidden" name="inNewKT" value="<?php echo $_SESSION['site810A_inOrderKT']; ?>"> + <?php endif; ?> + + <?php if ($_SESSION['site810A_inOrderScope']==801 || $_SESSION['site810A_inOrderScope']==803): ?> + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_024; ?></TD> + </TR> + <tr> + <td class="desc"><?php echo $lab_Tag_site302_003; ?></td> + <td class="desc_value"><input type="text" name="inNewSndHyd" value="<?php echo $_SESSION['site810A_inOrderSndHyd'];?>"> + &nbsp;&nbsp;<a class=tooltip_warning HREF="./?pg=site810A_snd"><img SRC=./images/search-icon.png><span><?php echo $lab_Field_site301_030; ?></SPAN></A> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site302_005; ?></td> + <td class="desc_value"><input type="text" name="inNewSndHydSN" value="<?php echo $_SESSION['site810A_inOrderSndHydSN'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site303_017; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inNewSndHydDlKb" value="<?php echo $_SESSION['site810A_inOrderSndHydDlKb'];?>"></td> + </tr> + <?php endif; ?> + + </TABLE> + + </div> + + <div class="tag_buttons"> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subSaveStep3" VALUE="<?php echo $lab_ButtonName_FinishSave; ?>"> + </div> +</div> +</form> + + +<?php endif; ?> + + + + +<script type="text/javascript"> + +// �aduje do pami�ci ustawienia dla LP i KT +if (localStorage.getItem("locStr_LP") !== null || localStorage.getItem("locStr_KT") !== null) +{ + $(document).ready(function(){ + $('#locStor_LP').val(localStorage.locStr_LP); + $('#locStor_KT').val(localStorage.locStr_KT); + }); +} + + +if (typeof(Storage) !== "undefined") { + $("#locStor_LP").blur(function(){ + localStorage.locStr_LP = $('#locStor_LP').val(); + localStorage.locStr_KT = $('#locStor_KT').val(); + }); + $("#locStor_KT").blur(function(){ + localStorage.locStr_LP = $('#locStor_LP').val(); + localStorage.locStr_KT = $('#locStor_KT').val(); + }); + // Code for localStorage/sessionStorage. + } +</script> + + + + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site810A_eng.php b/sites/site810A_eng.php new file mode 100644 index 0000000..f841229 --- /dev/null +++ b/sites/site810A_eng.php @@ -0,0 +1,69 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + +<?php +// lista agregatow pobierana przed naglowkiem - naglowek pokazuje liczbe dostepnych pozycji +//$_SESSION['site810_newAgg_array'] = sqlGetResAsArray("select PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,ENG_DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from rep_aggregate_departments where ENG_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_DRS_ID is not null and ENG_DRS_ID is not null order by ENG_NAME,PUP_NAME"); +$_SESSION['site810_newAgg_array'] = sqlGetResAsArray("select PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,ENG_DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from rep_aggregate_departments where ENG_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_DRS_ID is not null and ENG_DRS_ID is not null and RAD_ID not in(select RAD_ID from rep_aggregate_departments,seg_order_new_agg_params where PUP_DRS_ID=ONA_PUMP_DRS_ID and ENG_DRS_ID=ONA_ENG_DRS_ID) order by ENG_NAME,PUP_NAME"); +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site810_044." (".count($_SESSION['site810_newAgg_array']).")" ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_Lp ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <td class="label"><?php echo $lab_Field_site204_002 ;?></td> + <td class="label"><?php echo $lab_Field_site204_003 ;?></td> + <td class="label"><?php echo $lab_Field_site206_001 ;?></td> + <td class="label"><?php echo $lab_Field_site303_017 ;?></td> + + + </TR> + + <?php + //print_r($_SESSION['site810_newAgg_array']); + + for($i=0;$i<count($_SESSION['site810_newAgg_array']); $i++) + { + if (isset($_GET['ord']) && $_GET['ord']>0) + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site810E&ord=".$_GET['ord']."&agg=".$i."'".chr(34).">"; + else + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='?pg=site810A_3&agg=".$i."'".chr(34).">"; + + echo" + <TD class='field_center'>".($i+1)."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['ENG_NAME']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['ENG_SN_NO']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['PUP_NAME']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['PUP_SN_NO']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ENG_VOLTAGE']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ENG_POWER']."</TD> + <TD class='field_center'>".$_SESSION['site810_newAgg_array'][$i]['ECB_TYP']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ECB_DLUGOSC']."</TD> + </TR> + "; + } + ?> + </table> + </div> + + <div class="tag_buttons"> + <?php if ($_GET['ord']>0): ?> + <a class='btn btn-info btn-sm' href="?pg=site810E&ord=<?php echo $_GET['ord'];?>" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php else: ?> + <a class='btn btn-info btn-sm' href="?pg=site810A_3" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php endif; ?> + </div> +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site810A_pup.php b/sites/site810A_pup.php new file mode 100644 index 0000000..b81930f --- /dev/null +++ b/sites/site810A_pup.php @@ -0,0 +1,74 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + +<?php +// lista agregatow pobierana przed naglowkiem - naglowek pokazuje liczbe dostepnych pozycji +//$_SESSION['site810_newAgg_array'] = sqlGetResAsArray("select PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,ENG_DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from rep_aggregate_departments where PUP_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_DRS_ID is not null and ENG_DRS_ID is not null order by PUP_NAME,ENG_NAME"); +$_SESSION['site810_newAgg_array'] = sqlGetResAsArray("select PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,ENG_DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from rep_aggregate_departments where PUP_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_DRS_ID is not null and ENG_DRS_ID is not null and RAD_ID not in(select RAD_ID from rep_aggregate_departments,seg_order_new_agg_params where PUP_DRS_ID=ONA_PUMP_DRS_ID and ENG_DRS_ID=ONA_ENG_DRS_ID) order by PUP_NAME,ENG_NAME"); +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site810_044." (".count($_SESSION['site810_newAgg_array']).")" ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_Lp ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <td class="label"><?php echo $lab_Field_site204_002 ;?></td> + <td class="label"><?php echo $lab_Field_site204_003 ;?></td> + <td class="label"><?php echo $lab_Field_site206_001 ;?></td> + <td class="label"><?php echo $lab_Field_site303_017 ;?></td> + + + </TR> + + <?php + //print_r($_SESSION['site810_newAgg_array']); + + for($i=0;$i<count($_SESSION['site810_newAgg_array']); $i++) + { + if (isset($_GET['ord']) && $_GET['ord']>0) + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site810E&ord=".$_GET['ord']."&agg=".$i."'".chr(34).">"; + else + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site810A_3&agg=".$i."'".chr(34).">"; + + echo" + <TD class='field_center'>".($i+1)."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['PUP_NAME']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['PUP_SN_NO']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['ENG_NAME']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['ENG_SN_NO']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ENG_VOLTAGE']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ENG_POWER']."</TD> + <TD class='field_center'>".$_SESSION['site810_newAgg_array'][$i]['ECB_TYP']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ECB_DLUGOSC']."</TD> + </TR> + "; + } + ?> + </table> + </div> + + + <div class="tag_buttons"> + <?php if ($_GET['ord']>0): ?> + <a class='btn btn-info btn-sm' href="?pg=site810E&ord=<?php echo $_GET['ord'];?>" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php else: ?> + <a class='btn btn-info btn-sm' href="?pg=site810A_3" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php endif; ?> + <a class='btn btn-warning btn-sm' href="?pg=site810A_pupex&ord=<?php echo $_GET['ord'];?>" role="button" style="text-decoration: none;"><?php echo $lab_Field_site810_053; ?></a> + + </div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site810A_pupex.php b/sites/site810A_pupex.php new file mode 100644 index 0000000..40aa429 --- /dev/null +++ b/sites/site810A_pupex.php @@ -0,0 +1,84 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + +<?php +// lista agregatow pobierana przed naglowkiem - naglowek pokazuje liczbe dostepnych pozycji +if ($_SESSION['syndis_eq_stock']=='P/Bełchatów') + $dep = 1; +elseif ($_SESSION['syndis_eq_stock']=='P/Szczerców') + $dep = 3; +elseif ($_SESSION['syndis_eq_stock']=='Dębina') + $dep = 2; + +$_SESSION['site810_newAgg_array'] = sqlGetResAsArray("select (select DRS_ID from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_DRS_ID,stp_stapo_typ_p PUP_NAME,stp_stapo_nr_p PUP_SN_NO,(select PUP_Q_N from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_Q_N,(select PUP_H_P from seg_pumps,seg_dev_resources where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and PUP_NAME=stp_stapo_typ_p and DRS_SN_NUMBER=stp_stapo_nr_p limit 1) PUP_H_P,(select DRS_ID from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_DRS_ID,stp_stamot_typ_m ENG_NAME,stp_stamot_nr_m ENG_SN_NO,(select ENG_VOLTAGE from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_VOLTAGE,(select ENG_POWER from seg_engines,seg_dev_resources where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and ENG_NAME=stp_stamot_typ_m and DRS_SN_NUMBER=stp_stamot_nr_m LIMIT 1) ENG_POWER,stp_stakabel_typ ECB_TYP,(select stp_stakabel_dl_ilosc from stp_stakabel_dl where stp_stamot_typ_m=stp_stakabel_dl_typ and stp_stamot_nr_m=stp_stakabel_dl_nr and stp_stamot_u=stp_stakabel_dl_u limit 1) ECB_DLUGOSC,stp_stakabel_g_ozn_1 ECB_OZNAK_01,stp_stakabel_g_ozn_2 ECB_OZNAK_02 from stp_stapo left join stp_status on stp_status_id_s=stp_stapo_stat_id left join stp_uzytkownik on stp_uzytkownik_id_u=stp_stapo_user_id left join stp_stamot on stp_stamot_id_m=stp_stapo_sil_id left join stp_stakabel_g on stp_stakabel_g_kab_id=stp_stamot_kabel_id left join stp_stakabel on stp_stakabel_id_k=stp_stakabel_g_typ_id where stp_stapo_stat_id=1 and stp_stapo_user_id=".$dep." order by PUP_NAME,ENG_NAME"); +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site810_044." (".count($_SESSION['site810_newAgg_array']).")" ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_Lp ;?></TD> + <TD class="label"><?php echo $lab_Field_site203_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site204_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_001 ;?></TD> + <td class="label"><?php echo $lab_Field_site204_002 ;?></td> + <td class="label"><?php echo $lab_Field_site204_003 ;?></td> + <td class="label"><?php echo $lab_Field_site206_001 ;?></td> + <td class="label"><?php echo $lab_Field_site303_017 ;?></td> + + + </TR> + + <?php + + // dobor oddzialu i pobranie listy przeniesione nad naglowek [site810A_pupex] + + //$_SESSION['site810_newAgg_array'] = sqlGetResAsArray("select PUP_DRS_ID,PUP_NAME,PUP_SN_NO,PUP_Q_N,PUP_H_P,ENG_DRS_ID,ENG_NAME,ENG_SN_NO,ENG_VOLTAGE,ENG_POWER,ECB_TYP,ECB_DLUGOSC,ECB_OZNAK_01,ECB_OZNAK_02 from rep_aggregate_departments where PUP_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and PUP_DRS_ID is not null and ENG_DRS_ID is not null order by PUP_NAME,ENG_NAME"); + + + //print_r($_SESSION['site810_newAgg_array']); + + for($i=0;$i<count($_SESSION['site810_newAgg_array']); $i++) + { + if (isset($_GET['ord']) && $_GET['ord']>0) + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site810E&ord=".$_GET['ord']."&agg=".$i."'".chr(34).">"; + else + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site810A_3&agg=".$i."'".chr(34).">"; + + echo" + <TD class='field_center'>".($i+1)."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['PUP_NAME']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['PUP_SN_NO']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['ENG_NAME']."</TD> + <TD class='field_left'>".$_SESSION['site810_newAgg_array'][$i]['ENG_SN_NO']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ENG_VOLTAGE']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ENG_POWER']."</TD> + <TD class='field_center'>".$_SESSION['site810_newAgg_array'][$i]['ECB_TYP']."</TD> + <TD class='field_right'>".$_SESSION['site810_newAgg_array'][$i]['ECB_DLUGOSC']."</TD> + </TR> + "; + } + ?> + </table> + </div> + + + <div class="tag_buttons"> + <?php if ($_GET['ord']>0): ?> + <a class='btn btn-info btn-sm' href="?pg=site810E&ord=<?php echo $_GET['ord'];?>" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php else: ?> + <a class='btn btn-info btn-sm' href="?pg=site810A_3" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php endif; ?> + </div> + + +</div> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site810A_snd.php b/sites/site810A_snd.php new file mode 100644 index 0000000..dbf4815 --- /dev/null +++ b/sites/site810A_snd.php @@ -0,0 +1,57 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Field_site810_024 ;?></div> + <div class="tag"> + <table WIDTH="100%" class="tag"> + <TR> + <TD class="label"><?php echo $lab_Field_site302_001 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_002 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_005 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_003 ;?></TD> + <TD class="label"><?php echo $lab_Field_site303_017 ;?></TD> + <TD class="label"><?php echo $lab_Field_site302_004 ;?></TD> + </TR> + + <?php + + $_SESSION['site810_newSnd_array'] = sqlGetResAsArray("select DRS_ID,EQU_NAME,SUBSTRING_INDEX(EQU_NAME, ' ', -1) SND_NAME,MCF_NAME,DRS_SN_NUMBER,DRS_BUY_DATE,DRS_RESOURCES_DIC_ID,getLastValue(734,DRS_ID) DL_KAB from seg_dev_resources,seg_equipments left join seg_manufacturers on MCF_ID=EQU_MCF_ID where EQU_ID=DRS_DEV_ID and DRS_DEV_TYPE=14 and DRS_DEPARTMENT='".$_SESSION['syndis_eq_stock']."' and EQU_NAME like '%SGP%' and DRS_RESOURCES_DIC_ID in (1,2) order by EQU_NAME,DRS_AVAILABLE_DATE"); + + for ($i = 0; $i < count($_SESSION['site810_newSnd_array']); $i++) { + + if (isset($_GET['ord']) && $_GET['ord']>0) + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site810E&ord=".$_GET['ord']."&snd=".$i."'".chr(34).">"; + else + echo "<TR STYLE='cursor: pointer;' onclick=".chr(34)."document.location.href='./?pg=site810A_3&snd=".$i."'".chr(34).">"; + + echo" + <TD class='field_left'>" . $_SESSION['site810_newSnd_array'][$i]['EQU_NAME'] . "</TD> + <TD class='field_left'>" . $_SESSION['site810_newSnd_array'][$i]['MCF_NAME'] . "</TD> + <TD class='field_left'>" . $_SESSION['site810_newSnd_array'][$i]['DRS_SN_NUMBER'] . "</TD> + <TD class='field_center'>" . $_SESSION['site810_newSnd_array'][$i]['DRS_BUY_DATE'] . "</TD> + <TD class='field_center'>" . $_SESSION['site810_newSnd_array'][$i]['DL_KAB'] . "</TD> + <TD class='field_center'>" . setDicName($_SESSION['site810_newSnd_array'][$i]['DRS_RESOURCES_DIC_ID']) . "</TD> + </TR> + "; + } + ?> + </table> + </div> + + <div class="tag_buttons"> + <?php if ($_GET['ord']>0): ?> + <a class='btn btn-info btn-sm' href="?pg=site810E&ord=<?php echo $_GET['ord'];?>" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php else: ?> + <a class='btn btn-info btn-sm' href="?pg=site810A_3" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <?php endif; ?> + </div> + + +</div> +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site810E.php b/sites/site810E.php new file mode 100644 index 0000000..7e49e4c --- /dev/null +++ b/sites/site810E.php @@ -0,0 +1,583 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_02").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#data_03").datepicker({changeMonth: true,changeYear: true});}); + $(function() {$("#inZwrDate").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + + + <?php + unset($_SESSION['site810E_ordMainArray']); + $_SESSION['site810E_ordMainArray'] = sqlGetResAsArray("select * from seg_orders left join seg_order_obj_params on OWP_ORD_ID=ORD_ID where ORD_ID=".$_GET['ord']); + //print_r($_SESSION['site810E_ordMainArray']); + + + //print_r($_SESSION['site810E_ordMainArray']); + + ?> + +<form action="./?pg=site810inf&id=<?php echo$_GET['ord']; ?>" method="post"> +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site810_003.": ".$_SESSION['site810E_ordMainArray'][0]['ORD_NO'];?></div> + <div class="tag"> + + + <table class="desc_val"> + + <?php if ($_SESSION['site810E_ordMainArray'][0]['ORD_OBJ_TYPE']==12): ?> + <?php + if (empty($_SESSION['site810_well_array'])) + { + $res=null; + $wynik = mysql_query("select DRS_ID,WLL_ID,WLL_NAME,PUP_ID,WLE_PUMP_NAME,WLE_PUMP_NO,ENG_ID,WLE_ENG_NAME,WLE_ENG_NO,SOD_UJ from rep_object_departments where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by WLL_NAME"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'devID' => $r["DRS_ID"], + 'wellID' => $r["WLL_ID"], + 'wellName' => $r["WLL_NAME"], + 'pumpID' => $r["PUP_ID"], + 'pumpName' => $r["WLE_PUMP_NAME"], + 'pumpSN' => $r["WLE_PUMP_NO"], + 'engID' => $r["ENG_ID"], + 'engName' => $r["WLE_ENG_NAME"], + 'engSN' => $r["WLE_ENG_NO"], + 'bariera' => $r["SOD_UJ"] + ); + } + unset($_SESSION['site810_well_array']); + $_SESSION['site810_well_array']=$res; + } + ?> + + + + <tr> + <td class="desc"><?php echo $lab_Field_site810_001; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_NO'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_004; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810E_ordMainArray'][0]['ORD_SCOPE_DIC_ID']);?></td> + </tr> + + + <tr> + <td class="desc"><?php echo $lab_Field_site301_001; ?></td> + <td class="desc_value"> + <?php + echo'<select name="inOrderWell" id="site810A_2_inOrderWell">'; + for ($i=0; $i<count($_SESSION['site810_well_array']);$i++) + { + if ($_SESSION['site810_well_array'][$i]['wellName']==$_SESSION['site810E_ordMainArray'][0]['ORD_OBJ_NAME']) + echo'<option value="'.$i.'" selected>'.$_SESSION['site810_well_array'][$i]['wellName'].'</option>'; + else + echo'<option value="'.$i.'">'.$_SESSION['site810_well_array'][$i]['wellName'].'</option>'; + } + echo'</select>'; + ?> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_003; ?></td> + <td class="desc_value"><input type="text" name="inOrderBariera" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_LOKAL'];?>" id="inBariera"></td> + </tr> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==802): ?> + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_046; ?></TD> + </TR> + <?php endif; ?> + + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==802 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==809): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_027; ?></td> + <td class="desc_value"> + <input type="text" name="inOrderPump" value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_PUMP'],0,strpos($_SESSION['site810E_ordMainArray'][0]['OWP_PUMP'], ':')-4); ?>" id="inPump"> + <input type="text" name="inOrderPumpSn" value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_PUMP'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_PUMP'], ':')+2); ?>" id="inPumpSn"> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_028; ?></td> + <td class="desc_value"> + <input type="text" name="inOrderEng" value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_ENG'],0,strpos($_SESSION['site810E_ordMainArray'][0]['OWP_ENG'], ':')-4); ?>" id="inEng"> + <input type="text" name="inOrderEngSn" value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_ENG'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_ENG'], ':')+2); ?>" id="inEngSn"> + </td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_021; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLP" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_GLEB_AG'];?>" id="inLP"></td> + </tr> + + <?php endif; ?> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_012; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderDST" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_SRED'];?>" id="inDST"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_013; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLS" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_GLEB_S'];?>" id="inLS"></td> + </tr> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==804): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_049; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderRzdna" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_RZDNA'];?>" id="inRzdna"></td> + </tr> + <?php endif; ?> + + + + <tr> + <td class="desc"><?php echo $lab_Field_site301_019; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLZ" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_ZASYP'];?>" id="inLZ"></td> + </tr> + + <?php if ($_SESSION['site810E_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==804 || $_SESSION['site810E_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==805): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_047; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderIlCln" value="<?php echo getFloatValue($_SESSION['site810E_ordMainArray'][0]['OWP_CLEAN']);?>" id="inIlCln"></td> + </tr> + <?php endif; ?> + + + <?php if ($_SESSION['site810E_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==805 || $_SESSION['site810E_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==808): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_048; ?></td> + <td class="desc_value"> + <input type="text" class="postcode" name="inOrderZwr" value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'],0,strpos($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'], '/')-1); ?>" id="inZwr"> + <INPUT STYLE='text-align: right' TYPE='TEXT' NAME='inOrderZwrDate' SIZE='10' value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'], '/')+2); ?>" id="inZwrDate"> + </td> + </tr> + + <?php endif; ?> + + + + <?php if ($_SESSION['site810E_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_022; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderKT" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_SRED_KOL'];?>" id="inKT"></td> + </tr> + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_024;?></TD> + </TR> + + + <tr> + <td class="desc"><?php echo $lab_Tag_site302_003; ?></td> + <td class="desc_value"><input type="text" name="inOrderSndHyd" value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'],0,strpos($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'], ':')-4);?>" id="inSndHyd"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site302_005; ?></td> + <td class="desc_value"><input type="text" name="inOrderSndHydSN" value="<?php echo substr(substr($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'], ':')+2),0,strpos(substr($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'], ':')+2),':')-12);?>" id="inSndHydSN"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site303_017; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderSndHydDlKb" value="<?php echo substr(substr($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'], ':')+2),strpos(substr($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_SONDA'], ':')+2),':')+2);?>" id="inSndHydDlKb"></td> + </tr> + + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"></TD> + </TR> + + + <?php endif; ?> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_023; ?></td> + <td class="desc_value"><input type="text" class="text75" name="inOrderMetan" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_METAN'];?>"></td> + + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_025; ?></td> + <td class="desc_value"><?php echo selectFromDictionary('inOrderDelivery', 'ORDER_DELIVERY',$_SESSION['site810E_ordMainArray'][0]['OWP_DOJAZD']);?></td> + </tr> + + + + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==803): ?> + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_045; ?></TD> + </TR> + + <?php + if (isset($_GET['agg'])) + { + $newAggId=$_GET['agg']; + $valNewPump = $_SESSION['site810_newAgg_array'][$newAggId]['PUP_NAME']; + $valNewPumpNo = $_SESSION['site810_newAgg_array'][$newAggId]['PUP_SN_NO']; + $valNewEng = $_SESSION['site810_newAgg_array'][$newAggId]['ENG_NAME']; + $valNewEngNo = $_SESSION['site810_newAgg_array'][$newAggId]['ENG_SN_NO']; + if (strlen($_SESSION['site810_newAgg_array'][$newAggId]['ECB_TYP'])>3) + $valNewCable = $_SESSION['site810_newAgg_array'][$newAggId]['ECB_TYP']. + " / ". + $_SESSION['site810_newAgg_array'][$newAggId]['ECB_DLUGOSC']. + " (". + $_SESSION['site810_newAgg_array'][$newAggId]['ECB_OZNAK_01']. + ", ". + $_SESSION['site810_newAgg_array'][$newAggId]['ECB_OZNAK_02']. + ")"; + $valNewLP = $_SESSION['site810inf_newAggArray'][0]['ONA_GLEB_AG']; + $valNewKT = $_SESSION['site810inf_newAggArray'][0]['ONA_SRED_KOL']; + + $valPupDevID = $_SESSION['site810_newAgg_array'][$newAggId]['PUP_DRS_ID']; + $valEngDevID = $_SESSION['site810_newAgg_array'][$newAggId]['ENG_DRS_ID']; + + } + else + { + $valNewPump = substr($_SESSION['site810inf_newAggArray'][0]['ONA_PUMP'],0,strpos($_SESSION['site810inf_newAggArray'][0]['ONA_PUMP'], ':')-4); + $valNewPumpNo = substr($_SESSION['site810inf_newAggArray'][0]['ONA_PUMP'],strpos($_SESSION['site810inf_newAggArray'][0]['ONA_PUMP'], ':')+2); + $valNewEng = substr($_SESSION['site810inf_newAggArray'][0]['ONA_ENG'],0,strpos($_SESSION['site810inf_newAggArray'][0]['ONA_ENG'], ':')-4); + $valNewEngNo = substr($_SESSION['site810inf_newAggArray'][0]['ONA_ENG'],strpos($_SESSION['site810inf_newAggArray'][0]['ONA_ENG'], ':')+2); + $valNewCable = $_SESSION['site810inf_newAggArray'][0]['ONA_CABLE']; + $valNewLP = $_SESSION['site810inf_newAggArray'][0]['ONA_GLEB_AG']; + $valNewKT = $_SESSION['site810inf_newAggArray'][0]['ONA_SRED_KOL']; + + $valPupDevID = $_SESSION['site810inf_newAggArray'][0]['ONA_PUMP_DRS_ID']; + $valEngDevID = $_SESSION['site810inf_newAggArray'][0]['ONA_ENG_DRS_ID']; + + } + + ?> + + + + + <tr> + <td class="desc"><?php echo $lab_Field_site810_038; ?></td> + <td class="desc_value"> + <input type="text" name="inNewPump" value="<?php echo $valNewPump; ?>"> + <input type="text" name="inNewPumpNo" value="<?php echo $valNewPumpNo; ?>"> + &nbsp;&nbsp;<a class=tooltip_warning HREF="?pg=site810A_pup&ord=<?php echo $_GET['ord'];?>"><img SRC=./images/search-icon.png><span><?php echo $lab_Field_site301_010; ?></SPAN></A> + </td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_039; ?></td> + <td class="desc_value"> + <input type="text" name="inNewEng" value="<?php echo $valNewEng; ?>"> + <input type="text" name="inNewEngNo" value="<?php echo $valNewEngNo; ?>"> + &nbsp;&nbsp;<a class=tooltip_warning HREF="?pg=site810A_eng&ord=<?php echo $_GET['ord'];?>"><img SRC=./images/search-icon.png><span><?php echo $lab_Field_site301_010; ?></SPAN></A> + </td> + </tr> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_043; ?></TD> + <TD CLASS="desc_value"><input type="text" class="text50" name="inNewCable" value="<?php echo $valNewCable; ?>"></TD> + </TR> + <TR> + <td class="desc"><?php echo $lab_Field_site810_021; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inNewLP" value="<?php echo $valNewLP; ?>" id="inNewLPid"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lab_Field_site810_022; ?></TD> + <td class="desc_value"><input class="postcode" type="text" name="inNewKT" value="<?php echo $valNewKT; ?>" id="inNewKTid"></TD> + </TR> + + <input type="hidden" name="inNewPupDevID" value="<?php echo $valPupDevID; ?>"> + <input type="hidden" name="inNewEngDevID" value="<?php echo $valEngDevID; ?>"> + + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_024;?></TD> + </TR> + + + <tr> + <td class="desc"><?php echo $lab_Tag_site302_003; ?></td> + <td class="desc_value"><input type="text" name="inNewSndHyd" value="<?php echo substr($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'],0,strpos($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'], ':')-4);?>" id="inSndHydid"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site302_005; ?></td> + <td class="desc_value"><input type="text" name="inNewSndHydSN" value="<?php echo substr(substr($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'],strpos($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'], ':')+2),0,strpos(substr($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'],strpos($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'], ':')+2),':')-12);?>" id="inSndHydSNid"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site303_017; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inNewSndHydDlKb" value="<?php echo substr(substr($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'],strpos($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'], ':')+2),strpos(substr($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'],strpos($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'], ':')+2),':')+2);?>" id="inSndHydDlKbid"></td> + </tr> + + + + + <?php endif; ?> + + + + + <tr><td class="desc" colspan="2"></td></tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site803_010; ?></td> + <td class="desc_value"><textarea name="inOrderDesc"><?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_INNE'];?></textarea></td> + + </tr> + + + <tr><td class="desc" colspan="2"></td></tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_006; ?></td> + <td class="desc_value"> + <select name="inOrderStatus"> + <option value="851" <?php if ($_SESSION['site810E_ordMainArray'][0]['ORD_STATUS_DIC_ID']==851) echo ' selected="selected"'; ?> >Nowe &nbsp;&nbsp;&nbsp;</option> + <option value="852" <?php if ($_SESSION['site810E_ordMainArray'][0]['ORD_STATUS_DIC_ID']==852) echo ' selected="selected"'; ?> >W toku &nbsp;&nbsp;&nbsp;</option> + </select> + </td> + + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_005; ?></td> + <td class="desc_value"><INPUT STYLE='text-align: right; vertical-align: middle;' TYPE='TEXT' id='data_01' NAME='inOrderRegDate' SIZE='10' value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_AUDIT_DATE']; ?>">&nbsp;&nbsp;<a style="cursor: pointer;" id="cleanRegDate"><img style="vertical-align: middle; max-width: 22px;" src="./images/Eraser-2-icon.png" title="Wyczyść"></a></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_007; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" class="text75" NAME="inOrderOwner" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_AUDIT_USR']; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_029; ?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inOrderStartDate' SIZE='10' value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_START_DATE']; ?>">&nbsp;&nbsp;<a style="cursor: pointer;" id="cleanStartDate"><img style="vertical-align: middle; max-width: 22px;" src="./images/Eraser-2-icon.png" title="Wyczyść"></a></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_030; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" class="text75" NAME="inOrderStartOwner" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_START_USR']; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_031; ?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_03' NAME='inOrderFinishDate' SIZE='10' value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_FINISH_DATE']; ?>">&nbsp;&nbsp;<a style="cursor: pointer;" id="cleanFinishDate"><img style="vertical-align: middle; max-width: 22px;" src="./images/Eraser-2-icon.png" title="Wyczyść"></a></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_032; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" class="text75" NAME="inOrderFinishOwner" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_FINISH_USR']; ?>"></td> + </tr> + + <?php endif; ?> + + + + + + <?php if ($_SESSION['site810E_ordMainArray'][0]['ORD_OBJ_TYPE']==601): ?> + + <?php + // wczutuje listę piezometrów + if (empty($_SESSION['site810_piezo_array'])) + { + $res = null; + $wynik = mysql_query("select DRS_ID,PZO_ID,PZO_NAME,SOD_UJ,SOD_DESC,DEPTH,DIAMETER from rep_piezo_departments where SOD_PLC='".$_SESSION['syndis_eq_stock']."' order by PZO_NAME"); + if ($wynik) while ($r = mysql_fetch_array($wynik)) + { + $res[]=array( + 'devID' => $r["DRS_ID"], + 'piezoID' => $r["PZO_ID"], + 'piezoName' => $r["PZO_NAME"], + 'bariera' => $r["SOD_UJ"], + 'opis' => $r["SOD_DESC"], + 'glebokosc' => $r["DEPTH"], + 'srednica' => $r["DIAMETER"] + ); + } + unset($_SESSION['site810_piezo_array']); + $_SESSION['site810_piezo_array']=$res; + } + + + ?> + + + <tr> + <td class="desc"><?php echo $lab_Field_site810_001; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_NO'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_004; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810E_ordMainArray'][0]['ORD_SCOPE_DIC_ID']);?></td> + </tr> + + + + <tr> + <td class="desc"><?php echo $lab_Tag_site309_003; ?></td> + <td class="desc_value"> + <?php + echo'<select name="inOrderPiezo" id="site810A_2_inOrderPiezo">'; + for ($i=0; $i<count($_SESSION['site810_piezo_array']);$i++) + { + if ($_SESSION['site810_piezo_array'][$i]['piezoName']==$_SESSION['site810E_ordMainArray'][0]['ORD_OBJ_NAME']) + echo'<option value="'.$i.'" selected>'.$_SESSION['site810_piezo_array'][$i]['piezoName'].'</option>'; + else + echo'<option value="'.$i.'">'.$_SESSION['site810_piezo_array'][$i]['piezoName'].'</option>'; + } + echo'</select>'; + ?> + </td> + + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_003; ?></td> + <td class="desc_value"><input type="text" name="inOrderBariera" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_LOKAL'];?>" id="inBariera"></td> + </tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site302_007; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLS" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_GLEB_S'];?>" id="inLS"></td> + </tr> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==831): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_049; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderRzdna" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_RZDNA'];?>" id="inRzdna"></td> + </tr> + <?php endif; ?> + + + <tr> + <td class="desc"><?php echo $lab_Field_site203_011; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderDST" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_SRED'];?>" id="inDST"></td> + </tr> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==832 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==835): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site301_019; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderLZ" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_ZASYP'];?>" id="inLZ"></td> + </tr> + <?php endif; ?> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==831 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==832): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_047; ?></td> + <td class="desc_value"><input class="postcode" type="text" name="inOrderIlCln" value="<?php echo getFloatValue($_SESSION['site810E_ordMainArray'][0]['OWP_CLEAN']);?>" id="inIlCln"></td> + </tr> + <?php endif; ?> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==835): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_048; ?></td> + <td class="desc_value"> + <input type="text" class="postcode" name="inOrderZwr" value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'],0,strpos($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'], '/')-1); ?>" id="inZwr"> + <INPUT STYLE='text-align: right' TYPE='TEXT' NAME='inOrderZwrDate' SIZE='10' value="<?php echo substr($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'],strpos($_SESSION['site810E_ordMainArray'][0]['OWP_ZWIERC'], '/')+2); ?>" id="inZwrDate"> + </td> + </tr> + <?php endif; ?> + + + + + + + + + + <tr> + <td class="desc"><?php echo $lab_Field_site810_023; ?></td> + <td class="desc_value"><input type="text" class="text75" name="inOrderMetan" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_METAN'];?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_025; ?></td> + <td class="desc_value"><?php echo selectFromDictionary('inOrderDelivery', 'ORDER_DELIVERY',$_SESSION['site810E_ordMainArray'][0]['OWP_DOJAZD']);?></td> + </tr> + + + + + <tr><td class="desc" colspan="2"></td></tr> + <tr> + <td class="desc"><?php echo $lab_Field_site803_010; ?></td> + <td class="desc_value"><textarea name="inOrderDesc"><?php echo $_SESSION['site810E_ordMainArray'][0]['OWP_INNE'];?></textarea></td> + </tr> + + + <tr><td class="desc" colspan="2"></td></tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_006; ?></td> + <td class="desc_value"><?php echo selectFromDictionary('inOrderStatus', 'ORDER_STATUS',$_SESSION['site810E_ordMainArray'][0]['ORD_STATUS_DIC_ID']);?></td> + + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_005; ?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inOrderRegDate' SIZE='10' value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_AUDIT_DATE']; ?>">&nbsp;&nbsp;<a style="cursor: pointer;" id="cleanRegDate"><img style="vertical-align: middle; max-width: 22px;" src="./images/Eraser-2-icon.png" title="Wyczyść"></a></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_007; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" class="text75" NAME="inOrderOwner" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_AUDIT_USR']; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_029; ?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_02' NAME='inOrderStartDate' SIZE='10' value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_START_DATE']; ?>">&nbsp;&nbsp;<a style="cursor: pointer;" id="cleanStartDate"><img style="vertical-align: middle; max-width: 22px;" src="./images/Eraser-2-icon.png" title="Wyczyść"></a></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_030; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" class="text75" NAME="inOrderStartOwner" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_START_USR']; ?>"></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_031; ?></td> + <td class="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_03' NAME='inOrderFinishDate' SIZE='10' value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_FINISH_DATE']; ?>">&nbsp;&nbsp;<a style="cursor: pointer;" id="cleanFinishDate"><img style="vertical-align: middle; max-width: 22px;" src="./images/Eraser-2-icon.png" title="Wyczyść"></a></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_032; ?></td> + <td class="desc_value"><INPUT TYPE="TEXT" class="text75" NAME="inOrderFinishOwner" value="<?php echo $_SESSION['site810E_ordMainArray'][0]['ORD_FINISH_USR']; ?>"></td> + </tr> + + + + + + + <?php endif; ?> + + </table> + </div> + + + <div class="tag_buttons"> + <table style="width: 100%"> + <tr> + <td style="text-align: right;"> + <INPUT class='btn btn-info btn-sm' TYPE='submit' name="subOrderEditCancel" VALUE='<?php echo $lab_ButtonName_Cancel; ?>'></A> + <INPUT class='btn btn-success btn-sm' TYPE='submit' name="subOrderEditUpdate" VALUE='<?php echo $lab_ButtonName_Update; ?>'></A> + </td> + </tr> + </table> + </div> + + + +</div> + <div id="site810A_2"></div> +</form> + +<link href="./style/select2.min.css" rel="stylesheet" /> +<script src="./js/select2.min.js"></script> + +<script type="text/javascript"> + $('#site810A_2_inOrderWell').select2(); + $('#site810A_2_inOrderPiezo').select2(); + +</script> + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> + diff --git a/sites/site810inf.php b/sites/site810inf.php new file mode 100644 index 0000000..f032deb --- /dev/null +++ b/sites/site810inf.php @@ -0,0 +1,603 @@ +<?php +if (!empty($_SESSION['site810'])) +{ +?> + + <?php + //aktualizacja statusu + if ($_POST['subStatusSave']==$lab_ButtonName_Save && isset($_POST['inOrderStatusDate']) && $_GET['id']>0 && $_GET['st']>0) + { + if ($_GET['st']==852) + mysql_query("UPDATE seg_orders SET ORD_STATUS_DIC_ID=852,ORD_START_USR='".$_POST['inOrderStatusPerson']."',ORD_START_DATE='".$_POST['inOrderStatusDate']."' WHERE ORD_ID=".$_GET['id']); + else if ($_GET['st']==853) + { + mysql_query("UPDATE seg_orders SET ORD_STATUS_DIC_ID=853,ORD_FINISH_USR='".$_POST['inOrderStatusPerson']."',ORD_FINISH_DATE='".$_POST['inOrderStatusDate']."',ORD_FINISH_DESC='".$_POST['inOrderStatusDesc']."' WHERE ORD_ID=".$_GET['id']); + mysql_query("UPDATE seg_order_new_agg_params SET ONA_PUMP_DRS_ID=NULL,ONA_ENG_DRS_ID=NULL WHERE ONA_ORD_ID=".$_GET['id']); + } + + echo"<div class='actionOK'>$lab_Field_site803_015</div>"; + } + + + //aktualizacja zlecenia - studnie + if ($_POST['subOrderEditUpdate']==$lab_ButtonName_Update && $_SESSION['site810E_ordMainArray'][0]['ORD_OBJ_TYPE']==12 && $_GET['id']>0) + { + //echo "Finish date: ".$_POST['inOrderFinishDate']; + mysql_query("DELETE FROM seg_order_obj_params WHERE OWP_ORD_ID=".$_GET['id']); + mysql_query("INSERT INTO seg_order_obj_params SET OWP_ORD_ID=".$_GET['id'].",OWP_LOKAL='".$_POST['inOrderBariera']."',OWP_GLEB_S='".$_POST['inOrderLS']."',OWP_RZDNA='".$_POST['inOrderRzdna']."',OWP_ZASYP='".$_POST['inOrderLZ']."',OWP_SRED='".$_POST['inOrderDST']."',OWP_GLEB_AG='".$_POST['inOrderLP']."',OWP_PUMP='".$_POST['inOrderPump'].", nr: ".$_POST['inOrderPumpSn']."',OWP_ENG='".$_POST['inOrderEng'].", nr: ".$_POST['inOrderEngSn']."',OWP_SRED_KOL='".$_POST['inOrderKT']."',OWP_METAN='".$_POST['inOrderMetan']."',OWP_SONDA='".$_POST['inOrderSndHyd'].", nr: ".$_POST['inOrderSndHydSN'].", dł. kabla: ".$_POST['inOrderSndHydDlKb']."',OWP_DOJAZD='".$_POST['inOrderDelivery']."',OWP_INNE='".$_POST['inOrderDesc']."',OWP_CLEAN='".$_POST['inOrderIlCln']."',OWP_ZWIERC='".$_POST['inOrderZwr']." / ".$_POST['inOrderZwrDate']."',OWP_AUDIT_USR='".$_SESSION['user']."',OWP_AUDIT_DATE=now();"); + unset($selTmpID); $selTmpID = $_POST['inOrderWell']; + + + mysql_query("UPDATE seg_orders SET ORD_DRS_ID=".$_SESSION['site810_well_array'][$selTmpID]['devID'].",ORD_OBJ_NAME='".$_SESSION['site810_well_array'][$selTmpID]['wellName']."',ORD_STATUS_DIC_ID=".$_POST['inOrderStatus'].",ORD_AUDIT_USR='".$_POST['inOrderOwner']."',ORD_AUDIT_DATE='".$_POST['inOrderRegDate']."',ORD_START_USR='".$_POST['inOrderStartOwner']."',ORD_START_DATE='".$_POST['inOrderStartDate']."',ORD_FINISH_USR='".$_POST['inOrderFinishOwner']."',ORD_FINISH_DATE='".$_POST['inOrderFinishDate']."' WHERE ORD_ID=".$_GET['id']); + if (strlen($_POST['inOrderStartDate'])<8) + mysql_query("UPDATE seg_orders SET ORD_START_DATE=null WHERE ORD_ID=".$_GET['id']); + if (strlen($_POST['inOrderFinishDate'])<8) + mysql_query("UPDATE seg_orders SET ORD_FINISH_DATE=null WHERE ORD_ID=".$_GET['id']); + + + unset($pupArray); + $pupArray = sqlGetResAsArray("select * from seg_pumps,seg_dev_resources where DRS_DEV_TYPE=10 and DRS_DEV_ID=PUP_ID and PUP_NAME='".$_POST['inNewPump']."' and DRS_SN_NUMBER='".$_POST['inNewPumpNo']."'"); + unset($engArray); + $engArray = sqlGetResAsArray("select * from seg_engines,seg_dev_resources where DRS_DEV_TYPE=11 and DRS_DEV_ID=ENG_ID and ENG_NAME='".$_POST['inNewEng']."' and DRS_SN_NUMBER='".$_POST['inNewEngNo']."'"); + + + if ($pupArray[0]['DRS_ID']>0 && $engArray[0]['DRS_ID']>0 && $_GET['id']>0) + { + mysql_query("DELETE FROM seg_order_new_agg_params WHERE ONA_ORD_ID=".$_GET['id']); + mysql_query("INSERT INTO seg_order_new_agg_params SET ONA_ORD_ID='".$_GET['id']."',ONA_PUMP='".$_POST['inNewPump'].", nr: ".$_POST['inNewPumpNo']."',ONA_ENG='".$_POST['inNewEng'].", nr: ".$_POST['inNewEngNo']."',ONA_PUMP_DRS_ID='".$pupArray[0]['DRS_ID']."',ONA_ENG_DRS_ID='".$engArray[0]['DRS_ID']."',ONA_GLEB_AG='".$_POST['inNewLP']."',ONA_SRED_KOL='".$_POST['inNewKT']."',ONA_CABLE='".$_POST['inNewCable']."',ONA_SONDA='".$_POST['inNewSndHyd'].", nr: ".$_POST['inNewSndHydSN'].", dł. kabla: ".$_POST['inNewSndHydDlKb']."',ONA_AUDIT_USR='".$_SESSION['user']."',ONA_AUDIT_DATE=now()"); + } + + + echo"<div class='actionOK'>$lab_Field_site803_015</div>"; + } + + + //aktualizacja zlecenia - piezometry + if ($_POST['subOrderEditUpdate']==$lab_ButtonName_Update && $_SESSION['site810E_ordMainArray'][0]['ORD_OBJ_TYPE']==601 && $_GET['id']>0) + { + mysql_query("DELETE FROM seg_order_obj_params WHERE OWP_ORD_ID=".$_GET['id']); + mysql_query("INSERT INTO seg_order_obj_params SET OWP_ORD_ID=".$_GET['id'].",OWP_LOKAL='".$_POST['inOrderBariera']."',OWP_GLEB_S='".$_POST['inOrderLS']."',OWP_RZDNA='".$_POST['inOrderRzdna']."',OWP_SRED='".$_POST['inOrderDST']."',OWP_METAN='".$_POST['inOrderMetan']."',OWP_DOJAZD='".$_POST['inOrderDelivery']."',OWP_INNE='".$_POST['inOrderDesc']."',OWP_ZASYP='".$_POST['inOrderLZ']."',OWP_CLEAN='".$_POST['inOrderIlCln']."',OWP_ZWIERC='".$_POST['inOrderZwr']." / ".$_POST['inOrderZwrDate']."',OWP_AUDIT_USR='".$_SESSION['user']."',OWP_AUDIT_DATE=now();"); + unset($selTmpID); $selTmpID = $_POST['inOrderPiezo']; + mysql_query("UPDATE seg_orders SET ORD_DRS_ID=".$_SESSION['site810_piezo_array'][$selTmpID]['devID'].",ORD_OBJ_NAME='".$_SESSION['site810_piezo_array'][$selTmpID]['piezoName']."',ORD_STATUS_DIC_ID=".$_POST['inOrderStatus'].",ORD_AUDIT_USR='".$_POST['inOrderOwner']."',ORD_AUDIT_DATE='".$_POST['inOrderRegDate']."',ORD_START_USR='".$_POST['inOrderStartOwner']."',ORD_START_DATE='".$_POST['inOrderStartDate']."',ORD_FINISH_USR='".$_POST['inOrderFinishOwner']."',ORD_FINISH_DATE='".$_POST['inOrderFinishDate']."' WHERE ORD_ID=".$_GET['id']); + + if (strlen($_POST['inOrderRegDate'])<8) + mysql_query("UPDATE seg_orders SET ORD_AUDIT_DATE=null WHERE ORD_ID=".$_GET['id']); + if (strlen($_POST['inOrderStartDate'])<8) + mysql_query("UPDATE seg_orders SET ORD_START_DATE=null WHERE ORD_ID=".$_GET['id']); + if (strlen($_POST['inOrderFinishDate'])<8) + mysql_query("UPDATE seg_orders SET ORD_FINISH_DATE=null WHERE ORD_ID=".$_GET['id']); + + echo"<div class='actionOK'>$lab_Field_site803_015</div>"; + } + + // kończenie rejestracji zlecenia na wymianę i zabudowę agregatu + if ($_POST['subSaveStep3']==$lab_ButtonName_FinishSave && $_GET['id']>0) + { + mysql_query("DELETE FROM seg_order_new_agg_params WHERE ONA_ORD_ID=".$_GET['id']); + mysql_query("INSERT INTO seg_order_new_agg_params SET ONA_ORD_ID=".$_GET['id'].",ONA_PUMP='".$_POST['inNewPump'].", nr: ".$_POST['inNewPumpNo']."',ONA_ENG='".$_POST['inNewEng'].", nr: ".$_POST['inNewEngNo']."',ONA_PUMP_DRS_ID=".$_POST['inNewPupDevID'].",ONA_ENG_DRS_ID=".$_POST['inNewEngDevID'].",ONA_GLEB_AG='".$_POST['inNewLP']."',ONA_SRED_KOL='".$_POST['inNewKT']."',ONA_CABLE='".$_POST['inNewCable']."',ONA_SONDA='".$_POST['inNewSndHyd'].", nr: ".$_POST['inNewSndHydSN'].", dł. kabla: ".$_POST['inNewSndHydDlKb']."',ONA_AUDIT_USR='".$_SESSION['user']."',ONA_AUDIT_DATE=now()"); + + echo"<div class='actionOK'>$lab_Field_site803_013</div>"; + } + + + + ?> + + + + + + + <?php + unset($_SESSION['site810inf_ordMainArray']); + $_SESSION['site810inf_ordMainArray'] = sqlGetResAsArray("select * from seg_orders left join seg_order_obj_params on OWP_ORD_ID=ORD_ID where ORD_ID=".$_GET['id']); + //print_r($_SESSION['site810inf_ordMainArray']); + + //warunki, jaki rodzaj protokołu ma się drukować w zależności od typu usługi. +// if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']>812 && $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']<812) +// { +// $prinOrderTemplate = '/export/site810_basicOrder_xls.php'; +// } + + + //print_r($_SESSION['site810inf_ordMainArray']); + + ?> + +<div class="tag100"> + <div class="head_tag"><?php echo $lab_Tag_site810_003.": ".$_SESSION['site810inf_ordMainArray'][0]['ORD_NO'];?></div> + <div class="tag"> + + + <table class="desc_val" style="table-layout: fixed;"> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_TYPE']==12): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_001; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_NO'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_004; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']);?></td> + </tr> + + + + <tr> + <td class="desc"><?php echo $lab_Field_site301_001; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_003; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL'];?></td> + </tr> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801): ?> + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_046; ?></TD> + </TR> + <?php endif; ?> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==802 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==809): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_027; ?></td> + <td class="desc_value"><?php echo str_replace('nr','&nbsp;&nbsp;nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_PUMP']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_028; ?></td> + <td class="desc_value"><?php echo str_replace('nr','&nbsp;&nbsp;nr',$_SESSION['site810inf_ordMainArray'][0]['OWP_ENG']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_021; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_AG'];?></td> + </tr> + <?php endif; ?> + + <tr> + <td class="desc"><?php echo $lab_Field_site301_013; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S'];?></td> + </tr> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==804): ?> + <TR> + <td class="desc"><?php echo $lab_Field_site810_049; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_RZDNA'];?></td> + </TR> + <?php endif; ?> + + + + <tr> + <td class="desc"><?php echo $lab_Field_site301_012; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_SRED'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site301_019; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP'];?></td> + </tr> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==804 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==805): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_047; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_CLEAN'];?></td> + </tr> + <?php endif; ?> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==805 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==808): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_048; ?></td> + <td class="desc_value"><?php echo str_replace('/','&nbsp;&nbsp;/&nbsp;&nbsp;',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZWIERC']);?></td> + </tr> + <?php endif; ?> + + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_022; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_SRED_KOL'];?></td> + </tr> + + <?php + if (strlen($_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA'])>20) + $showField = str_replace(array('nr','dł'),array('&nbsp;&nbsp;nr','&nbsp;&nbsp;dł'),$_SESSION['site810inf_ordMainArray'][0]['OWP_SONDA']); + else + $showField = null; + ?> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_024; ?></td> + <td class="desc_value"><?php echo $showField;?></td> + </tr> + <?php endif; ?> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_023; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_METAN'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_025; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD']);?></td> + </tr> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801): ?> + <TR> + <TD class="desc"></TD> + <TD class="desc_value" style="background-color:#EAEAEA; line-height: 15px; font-style: italic; font-weight: bold;"><?php echo $lab_Field_site810_045; ?></TD> + </TR> + <?php endif; ?> + + <?php + unset($_SESSION['site810inf_newAggArray']); + $_SESSION['site810inf_newAggArray'] = sqlGetResAsArray("select ONA_PUMP_DRS_ID,ONA_PUMP,ONA_ENG_DRS_ID,ONA_ENG,ONA_GLEB_AG,ONA_SRED_KOL,ONA_CABLE,ONA_SONDA from seg_order_new_agg_params where ONA_ORD_ID=".$_GET['id']); + ?> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==803): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_038; ?></td> + <td class="desc_value"><?php echo str_replace('nr','&nbsp;&nbsp;nr',$_SESSION['site810inf_newAggArray'][0]['ONA_PUMP']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_039; ?></td> + <td class="desc_value"><?php echo str_replace('nr','&nbsp;&nbsp;nr',$_SESSION['site810inf_newAggArray'][0]['ONA_ENG']);?></td> + </tr> + + + <tr> + <td class="desc"><?php echo $lab_Field_site810_043; ?></td> + <td class="desc_value"><?php echo str_replace('(','&nbsp;&nbsp;&nbsp;(',$_SESSION['site810inf_newAggArray'][0]['ONA_CABLE']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_021; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_newAggArray'][0]['ONA_GLEB_AG'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_022; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_newAggArray'][0]['ONA_SRED_KOL'];?></td> + </tr> + <?php + if (strlen($_SESSION['site810inf_newAggArray'][0]['ONA_SONDA'])>20) + $showField = str_replace(array('nr','dł'),array('&nbsp;&nbsp;nr','&nbsp;&nbsp;dł'),$_SESSION['site810inf_newAggArray'][0]['ONA_SONDA']); + else + $showField = null; + ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_024; ?></td> + <td class="desc_value"><?php echo $showField;?></td> + </tr> + + <?php endif; ?> + + + + + <tr><td class="desc" colspan="2"></td></tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site803_010; ?></td> + <td class="desc_value"><?php echo str_replace(array("\r\n", "\n", "\r"),'<br/>',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']);?></td> + </tr> + + + <tr><td class="desc" colspan="2"></td></tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_006; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_STATUS_DIC_ID']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_005; ?></td> + <td class="desc_value"><?php echo substr($_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE'],0,10);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_007; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_USR'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_029; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_030; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_START_USR'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_031; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DATE'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_032; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_USR'];?></td> + </tr> + + <?php if (strlen($_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DESC'])>2): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site310_046; ?></td> + <td class="desc_value"><?php echo str_replace(chr(13),'<br>', $_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DESC']); ?></td> + </tr> + <?php endif; ?> + + <?php endif; ?> + + + + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_TYPE']==601): ?> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_001; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_NO'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_004; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']);?></td> + </tr> + + + + <tr> + <td class="desc"><?php echo $lab_Tag_site309_003; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_OBJ_NAME'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_003; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_LOKAL'];?></td> + </tr> + + + <tr> + <td class="desc"><?php echo $lab_Field_site302_007; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_GLEB_S'];?></td> + </tr> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==831): ?> + <TR> + <td class="desc"><?php echo $lab_Field_site810_049; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_RZDNA'];?></td> + </TR> + <?php endif; ?> + + + <tr> + <td class="desc"><?php echo $lab_Field_site203_011; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_SRED'];?></td> + </tr> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==832 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==835): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site301_019; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_ZASYP'];?></td> + </tr> + <?php endif; ?> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==831 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==832): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_047; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_CLEAN'];?></td> + </tr> + <?php endif; ?> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==835): ?> + <tr> + <td class="desc"><?php echo $lab_Field_site810_048; ?></td> + <td class="desc_value"><?php echo str_replace('/','&nbsp;&nbsp;/&nbsp;&nbsp;',$_SESSION['site810inf_ordMainArray'][0]['OWP_ZWIERC']);?></td> + </tr> + <?php endif; ?> + + + <tr> + <td class="desc"><?php echo $lab_Field_site810_023; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['OWP_METAN'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_025; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810inf_ordMainArray'][0]['OWP_DOJAZD']);?></td> + </tr> + + + + + <tr><td class="desc" colspan="2"></td></tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site803_010; ?></td> + <td class="desc_value"><?php echo str_replace(array("\r\n", "\n", "\r"),'<br/>',$_SESSION['site810inf_ordMainArray'][0]['OWP_INNE']);?></td> + </tr> + + + <tr><td class="desc" colspan="2"></td></tr> + + <tr> + <td class="desc"><?php echo $lab_Field_site810_006; ?></td> + <td class="desc_value"><?php echo setDicName($_SESSION['site810inf_ordMainArray'][0]['ORD_STATUS_DIC_ID']);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_005; ?></td> + <td class="desc_value"><?php echo substr($_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_DATE'],0,10);?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_007; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_AUDIT_USR'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_029; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_START_DATE'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_030; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_START_USR'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_031; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_DATE'];?></td> + </tr> + <tr> + <td class="desc"><?php echo $lab_Field_site810_032; ?></td> + <td class="desc_value"><?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_FINISH_USR'];?></td> + </tr> + + <?php endif; ?> + + </table> + </div> + + <?php + // budowanie linków do wydruków + // wymiana agregatu + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801) + { + $fileName = "site810_exchangeOrder_pdf.php"; + $fixfileName = "site810_redirectFix_pdf.php"; + } + + //wybudowa agregatu + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==802) + { + $fileName = "site810_aggoutOrder_pdf.php"; + $fixfileName = "site810_redirectFix_pdf.php"; + } + + //zabudowa agregatu + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==803) + { + $fileName = "site810_agginOrder_pdf.php"; + $fixfileName = "site810_redirectFix_pdf.php"; + } + + //inne prace + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==809) + { + $fileName = "site810_anotherOrder_pdf.php"; + $fixfileName = "site810_redirectFix_pdf.php"; + } + + //uaktywnienie + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==804) + { + $fileName = "site810_reactiveWOrder_pdf.php"; + $fixfileName = "site810_redirectFix_pdf.php"; + } + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==831) + { + $fileName = "site810_reactivePOrder_pdf.php"; + $fixfileName = "site810_redirectFix_pdf.php"; + } + + //czyszczenie + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==805) + { + $fileName = "site810_cleanWOrder_pdf.php"; + $fixfileName = "site810_cleanFix_pdf.php"; + } + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==832) + { + $fileName = "site810_cleanPOrder_pdf.php"; + $fixfileName = "site810_cleanFix_pdf.php"; + } + + //rekonstrukcja + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==806) + { + $fileName = "site810_reconstrWOrder_pdf.php"; + $fixfileName = "site810_reconstrFix_pdf.php"; + } + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==833) + { + $fileName = "site810_reconstrPOrder_pdf.php"; + $fixfileName = "site810_reconstrFix_pdf.php"; + } + + //instrumentacja + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==807) + { + $fileName = "site810_instrumWOrder_pdf.php"; + $fixfileName = "site810_instrumFix_pdf.php"; + } + if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==834) + { + $fileName = "site810_instrumPOrder_pdf.php"; + $fixfileName = "site810_instrumFix_pdf.php"; + } + + //likwidacja + else if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==808) + { + $fileName = "site810_destroyWOrder_pdf.php"; + $fixfileName = "site810_destroyFix_pdf.php"; + } + else if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==835) + { + $fileName = "site810_destroyPOrder_pdf.php"; + $fixfileName = "site810_destroyFix_pdf.php"; + } + + + ?> + + + + <div class="tag_buttons"> + <table style="width: 100%"> + <tr> + <td style="width: 50%; text-align: left;"> + + <a href='./export/<?php echo $fileName; ?>' target="_blank"> <INPUT class='btn btn-default btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_Field_site810_035; ?>'></A> + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_STATUS_DIC_ID']==853): ?> + &nbsp; + <!-- + <a href='/export/<?php echo $fixfileName; ?>' target="_blank"> <INPUT class='btn btn-default btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_Field_site810_036; ?>'></A> + --> + <?php endif; ?> + + </td> + +<?php +// dodatkowy przyciks zamykający zlecenia - bez zabudowy +if ($_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==801 || $_SESSION['site810inf_ordMainArray'][0]['ORD_SCOPE_DIC_ID']==803) +{ + $lab_Field_site810_034 = 'Zakończ zlecenie bez zabudowy'; +} + +?> + <td style="width: 50%; text-align: right;"> + <a href='./?pg=site810'> <INPUT class='btn btn-info btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_Tag_site810_001; ?>'></A> + + <?php if (!empty($_SESSION['site810_edit'])): ?> + <a href='./?pg=site810&acc=del&ord=<?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_ID']; ?>'> <INPUT class='btn btn-danger btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Delete; ?>' onclick="return confirm('Jesteś pewien, że chcesz usunąć?');"></A> + <?php endif; ?> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_STATUS_DIC_ID']<853 && !empty($_SESSION['site810_edit'])): ?> + <a href='./?pg=site810E&ord=<?php echo $_SESSION['site810inf_ordMainArray'][0]['ORD_ID']; ?>'> <INPUT class='btn btn-warning btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_ButtonName_Edit; ?>'></A> + <?php endif; ?> + + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_STATUS_DIC_ID']==851 && !empty($_SESSION['site810_edit'])): ?> + <a href='./?pg=site810prg&st=851&id=<?php echo $_GET['id'];?>'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_Field_site810_033; ?>'></A> + <?php endif; ?> + + <?php if ($_SESSION['site810inf_ordMainArray'][0]['ORD_STATUS_DIC_ID']==852 && !empty($_SESSION['site810_edit'])): ?> + <a href='./?pg=site810prg&st=852&id=<?php echo $_GET['id'];?>'> <INPUT class='btn btn-success btn-sm' TYPE='BUTTON' VALUE='<?php echo $lab_Field_site810_034; ?>'></A> + <?php endif; ?> + + </td> + + </tr> + </table> + </div> + + + +</div> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site810prg.php b/sites/site810prg.php new file mode 100644 index 0000000..fae81eb --- /dev/null +++ b/sites/site810prg.php @@ -0,0 +1,68 @@ +<?php +if (!empty($_SESSION['site810_edit'])) +{ +?> + + <script> + $(function() {$("#data_01").datepicker({changeMonth: true,changeYear: true});}); + </script> + + + <?php + //w zależności od rodzaju ststusu podstawiane są nowe wartości + if ($_GET['st']==851) + { + $lb_title = $lab_Field_site810_033; + $lb_date = $lab_Field_site810_029; + $lb_person = $lab_Field_site810_030; + $new_status = 852; + } + else if ($_GET['st']==852) + { + $lb_title = $lab_Field_site810_034; + $lb_date = $lab_Field_site810_031; + $lb_person = $lab_Field_site810_032; + $new_status = 853; + } + ?> + + +<form action="./?pg=site810inf&st=<?php echo $new_status;?>&id=<?php echo $_GET['id'];?>" method="post"> +<div class="tag100"> + <div class="head_tag"><?php echo $lb_title ;?></div> + <div class="tag"> + <TABLE class="desc_val"> + + <TR> + <TD class="desc"><?php echo $lb_date; ?></TD> + <TD CLASS="desc_value"><INPUT STYLE='text-align: right' TYPE='TEXT' id='data_01' NAME='inOrderStatusDate' SIZE='10' value="<?php echo date('Y-m-d'); ?>"></TD> + </TR> + <TR> + <TD class="desc"><?php echo $lb_person; ?></TD> + <TD CLASS="desc_value"><INPUT TYPE="TEXT" class="text75" NAME="inOrderStatusPerson" value="<?php echo $_SESSION['user']; ?>"></TD> + </TR> + + <?php if ($_GET['st']==852): ?> + <TR> + <TD class="desc"><?php echo $lab_Field_site803_010; ?></TD> + <TD CLASS="desc_value"><textarea rows="10" name="inOrderStatusDesc"></textarea></TD> + </TR> + <?php endif; ?> + + </TABLE> + </div> + + <div class="tag_buttons"> + + <a class='btn btn-info btn-sm' href="?pg=site810inf&id=<?php echo $_GET['id'];?>" role="button" style="text-decoration: none;"><?php echo $lab_ButtonName_Cancel; ?></a> + <INPUT class='btn btn-success btn-sm' TYPE="SUBMIT" NAME="subStatusSave" VALUE="<?php echo $lab_ButtonName_Save; ?>"> + + </div> +</div> +</form> + + +<?php +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/site900.php b/sites/site900.php new file mode 100644 index 0000000..e3b1e1c --- /dev/null +++ b/sites/site900.php @@ -0,0 +1,78 @@ +<?php +if (!empty($_SESSION['user'])) +{ + + + echo" + <div class='tag100'> + <div class='head_tag'>Instrukcje</div> + <div class='tag'> + <table WIDTH='100%'> + <tr> + <td WIDTH='5px'><img src=./images/pdf_ico.png></td> + <td><a class='knowledge' href='./foto/SoftSPM_instrukcja.pdf' target='_blank'>Instrukcja systemu SoftSPM</a></td> + </tr> + + </table> + </div> + </div> + + "; + + + + + + if ($_SESSION['lang'] == 'polish') $decFieldLang = 'DIC_POL_LANG'; + else if ($_SESSION['lang'] == 'english') $decFieldLang = 'DIC_ENG_LANG'; + else if ($_SESSION['lang'] == 'german') $decFieldLang = 'DIC_GER_LANG'; + + $wynik = mysql_query("select DIC_ID,$decFieldLang from sys_dictionaries where DIC_TYPE='KNOWLEDGE_BASE_CATEGORY'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $var_DIC_ID = $r["DIC_ID"]; + $var_DIC_NAME = $r["$decFieldLang"]; + + $isInCategory=sqlValue("select count(1) from seg_knowledge_base where SKB_STATUS='1' and SKB_CATEGORY_ID=$var_DIC_ID"); + + if ($isInCategory>0) + { + echo" + <div class='tag100'> + <div class='head_tag'>$var_DIC_NAME</div> + <div class='tag'> + <table WIDTH='100%'>"; + $re = mysql_query("select SKB_ID,SUBSTRING_INDEX(SKB_FILE_NAME, '.', -1) ICO,SKB_FILE_DESC from seg_knowledge_base where SKB_STATUS='1' and SKB_CATEGORY_ID=$var_DIC_ID order by SKB_FILE_DESC,ICO"); + if($re)while ($rc = mysql_fetch_array($re)) + { + $vSKB_ID = $rc["SKB_ID"]; + $vICO = $rc["ICO"]; + $vSKB_FILE_DESC = $rc["SKB_FILE_DESC"]; + + if ($vICO=='pdf') $icoFile = './images/pdf_ico.png'; + else if ($vICO=='doc' || $vICO=='docx') $icoFile = './images/word_ico.png'; + else if ($vICO=='xls' || $vICO=='xlsx') $icoFile = './images/excel_ico.png'; + else if ($vICO=='ppt' || $vICO=='pptx' || $vICO=='pps' || $vICO=='ppsx') $icoFile = './images/ppoint_ico.png'; + else if ($vICO=='jpg' || $vICO=='png' || $vICO=='bmp' || $vICO=='jpeg' || $vICO=='gif' || $vICO=='jfif' || $vICO=='tiff' || $vICO=='dib') $icoFile = './images/photo_ico.png'; + else if ($vICO=='mpg' || $vICO=='divx' || $vICO=='avi' || $vICO=='mp3' || $vICO=='mp4' || $vICO=='mov') $icoFile = './images/divx_ico.png'; + else $icoFile = './images/file_ico.png'; + + echo" + <tr> + <td WIDTH='5px'><img src=$icoFile></td> + <td><a class='knowledge' href='./sites/filegeneratefromdb.php?fno=$vSKB_ID' target='_blank'>$vSKB_FILE_DESC</a></td> + </tr> + "; + } + echo" + </table> + </div> + </div> + "; + } + } + + +} +else showFooterWarningAccessNotification($lab_FooterWarningAccessNotification_001); +?> \ No newline at end of file diff --git a/sites/siteNN.php b/sites/siteNN.php new file mode 100644 index 0000000..1e1282d --- /dev/null +++ b/sites/siteNN.php @@ -0,0 +1,181 @@ +<?php +require_once("../func.php"); +require_once("../dbaccess.php"); +require_once('../polynomial/math.php'); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function getPolyHp($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['h']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} +function getPolyPe($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['p']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} + + + +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + +$listWellArray = sqlGetResAsArray("select DRS_ID,WLL_ID,WLL_NAME,getLastValue(507,DRS_ID) W_STAT,WLL_CAT_DIC_ID,RWL_PUP_DRS_ID,RWL_ENG_DRS_ID from seg_dev_resources,seg_well_pump_eng_rel left join seg_wells on RWL_WLL_ID=WLL_ID where DRS_DEV_ID=RWL_WLL_ID and DRS_DEV_TYPE=12"); + + +for ($i=0; $i<count($listWellArray); $i++) +{ + unset($roundArray); unset($ocena); unset($tstID); + $roundArray = sqlGetResAsArray("select RHD_HD_VAL,RHD_Q_VAL,RHD_P1_VAL,RHD_P2_VAL,RHD_PE_VAL,RHD_PP_VAL,RHD_HH_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$listWellArray[$i]['DRS_ID'].")"); + + unset($HHparam);unset($PPparam);unset($PEparam);unset($P2param);unset($P1param);unset($qParam);unset($resHD); + + $resHD = (float) $roundArray[0]['RHD_HD_VAL']; + $qParam = (float) $roundArray[0]['RHD_Q_VAL']; + $P1param = (float) $roundArray[0]['RHD_P1_VAL']; + $P2param = (float) $roundArray[0]['RHD_P2_VAL']; + $PEparam = (float) $roundArray[0]['RHD_PE_VAL']; + $PPparam = (float) $roundArray[0]['RHD_PP_VAL']; + $HHparam = (float) $roundArray[0]['RHD_HH_VAL']; + + + //jeśli włączona + if ($listWellArray[$i]['W_STAT']=='ON') + { + //jeśli OPT lub BASE + if ($listWellArray[$i]['WLL_CAT_DIC_ID']<20) + { + //sprawdza jakość danych z SYNDIS + unset($qualDataArray); unset($pupArray); unset($engArray); unset($probaArray); unset($podSP); unset($mocSP); + $qualDataArray = sqlGetResAsArray("select * from rep_soap_syndis_quality_data where SQD_DRS_ID=".$listWellArray[$i]['DRS_ID']); + + //pobiera dane do porównania ze stacji prób + $pupArray = sqlGetResAsArray("select PUP_ID,PUP_NAME,PUP_Q_N,DRS_SN_NUMBER from seg_dev_resources,seg_pumps where PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 and DRS_ID=".$listWellArray[$i]['RWL_PUP_DRS_ID']); + $engArray = sqlGetResAsArray("select ENG_ID,ENG_NAME,DRS_SN_NUMBER from seg_dev_resources,seg_engines where ENG_ID=DRS_DEV_ID and DRS_DEV_TYPE=11 and DRS_ID=".$listWellArray[$i]['RWL_ENG_DRS_ID']); + + //pobiera numer próby + $tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$pupArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupArray[0]['DRS_SN_NUMBER']."' and TST_ENG_SN_NO='".$engArray[0]['DRS_SN_NUMBER']."'"); + if (empty($tstID)) $tstID = sqlValue("select TST_ID from tst_tests where TST_PUP_ID=".$pupArray[0]['PUP_ID']." and TST_PUP_SN_NO='".$pupArray[0]['DRS_SN_NUMBER']."'"); + + if ($tstID>0) + { + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$tstID." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $probaArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"] + ); + } + + $podSP = (float) getPolyHp($probaArray,$qualDataArray[0]['SQD_VAL_Q']); + $mocSP = (float) getPolyPe($probaArray,$qualDataArray[0]['SQD_VAL_Q']); + } + + if (!empty($qualDataArray) && ( + $qualDataArray[0]['SQD_FLG_Q']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_P1']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_P2']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_PP']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_HH']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_HD']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_I']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_U']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_CF']!='CORRECT' +// || $qualDataArray[0]['SQD_FLG_PE']!='CORRECT' + + || $qualDataArray[0]['SQD_VAL_Q']<=0 +// || (($qualDataArray[0]['SQD_VAL_P2']-1.5)>$qualDataArray[0]['SQD_VAL_P1']) +// || $qualDataArray[0]['SQD_VAL_PP']<=0 +// || $qualDataArray[0]['SQD_VAL_HH']<=0 +// || $qualDataArray[0]['SQD_VAL_HD']<=0 +// || $qualDataArray[0]['SQD_VAL_I']<=0 +// || $qualDataArray[0]['SQD_VAL_U']<=0 +// || $qualDataArray[0]['SQD_VAL_CF']<=0 +// || $qualDataArray[0]['SQD_VAL_CF']>=1 +// || $qualDataArray[0]['SQD_VAL_PE']<=0 + )) + { + $ocena = "NN"; + } +// elseif ($tstID>0 && $podSP>0 && $mocSP>0 && ($qualDataArray[0]['SQD_VAL_PE'] < (0.83*$mocSP) || $qualDataArray[0]['SQD_VAL_PE'] > (1.25*$mocSP) || ($qualDataArray[0]['SQD_VAL_PP'] - $qualDataArray[0]['SQD_VAL_HH']) > (1.08*$podSP))) +// { +// $ocena = "NN"; +// } + else { + if ($qParam>0 && $PEparam>0) + { + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes($pupArray[0]['PUP_Q_N']); + $YellowGreenParam = setYellowGreenLimes($pupArray[0]['PUP_Q_N']); + + if ($resETA<=$RedYellowParam) + $ocena = "R"; + elseif ($RedYellowParam<$resETA && $resETA<=$YellowGreenParam) + $ocena = "Y"; + elseif ($resETA>$YellowGreenParam) + $ocena = "G"; + } + else + $ocena = "NN"; + } + } + else + $ocena = "NN"; + + } + else + $ocena = "NN"; + + + + //jeśli istnieje - aktualizuje + if (sqlValue("select count(*) from rep_soap_well_energy where SWE_DRS_ID=".$listWellArray[$i]['DRS_ID'])>0) + { + mysql_query("UPDATE rep_soap_well_energy SET SWE_VALUE='".$ocena."',SWE_WORK_STATUS='".$listWellArray[$i]['W_STAT']."',SWE_AUDIT_USR='cron',SWE_AUDIT_DATE=now() WHERE SWE_DRS_ID=".$listWellArray[$i]['DRS_ID']); + } + //dodaje nowy + else + { + mysql_query("insert into rep_soap_well_energy SET SWE_DRS_ID=".$listWellArray[$i]['DRS_ID'].",SWE_WELL_ID=".$listWellArray[$i]['WLL_ID'].",SWE_NAME='".$listWellArray[$i]['WLL_NAME']."',SWE_VALUE='".$ocena."',SWE_WORK_STATUS='".$listWellArray[$i]['W_STAT']."',SWE_AUDIT_USR='cron',SWE_AUDIT_DATE=now()"); + } + +} + +echo"Zaktualizowano: ".count($listWellArray)."<br/>"; +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; + +unset($listWellArray); +//rep_soap_well_energy + + +mysql_close($polacz); +?> \ No newline at end of file diff --git a/sites/siteNN_inwp.php b/sites/siteNN_inwp.php new file mode 100644 index 0000000..89b2804 --- /dev/null +++ b/sites/siteNN_inwp.php @@ -0,0 +1,269 @@ +<?php +require_once("../func.php"); +require_once("../dbaccess.php"); +require_once('../polynomial/PolynomialRegression.php' ); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' ',':'), array('','',''), $inDate); + return $out; +} + + +echo"START: ".date('Y-m-d H:i:m')."<br/>"; +unset($listWellArray); + +//$listWellArray = sqlGetResAsArray("select SUD_DRS_ID,SUD_VAL_HD,SUD_VAL_HST,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_TRP,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,SUD_VAL_VM3,SUD_VAL_TW,SUD_VAL_DIAG,SUD_VAL_RUTM,SUD_VAL_ONOFF,SUD_VAL_PB,SUD_VAL_KWH,SUD_VAL_ECM,SUD_VAL_CHL,SUD_DATE_HD,SUD_DATE_HST,SUD_DATE_P1,SUD_DATE_P2,SUD_DATE_Q,SUD_DATE_PP,SUD_DATE_HH,SUD_DATE_PE from rep_soap_syndis_update5min_data where (SUD_VAL_Q>0 and SUD_FLG_Q='CORRECT' and SUD_FLG_P1='CORRECT' and SUD_FLG_P2='CORRECT' and SUD_VAL_PE>0 and SUD_FLG_PE='CORRECT' and SUD_VAL_PP>0 and SUD_FLG_PP='CORRECT' and SUD_VAL_HH>0 and SUD_FLG_HH='CORRECT' and SUD_VAL_HD>0 and SUD_FLG_HD='CORRECT') or (SUD_VAL_HST>0 and SUD_FLG_HST='CORRECT');"); +//$listWellArray = sqlGetResAsArray("select SUD_DRS_ID,SUD_VAL_HD,SUD_VAL_HST,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_TRP,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,SUD_VAL_VM3,SUD_VAL_TW,SUD_VAL_DIAG,SUD_VAL_RUTM,SUD_VAL_ONOFF,SUD_VAL_PB,SUD_VAL_KWH,SUD_VAL_ECM,SUD_VAL_CHL,SUD_DATE_HD,SUD_DATE_HST,SUD_DATE_P1,SUD_DATE_P2,SUD_DATE_Q,SUD_DATE_PP,SUD_DATE_HH,SUD_DATE_PE from rep_soap_syndis_update5min_data where (SUD_VAL_Q>0 and SUD_FLG_Q='CORRECT') or (SUD_VAL_HST>0 and SUD_FLG_HST='CORRECT')"); +$listWellArray = sqlGetResAsArray("select SUD_DRS_ID,SUD_VAL_HD,SUD_VAL_HST,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_TRP,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,SUD_VAL_VM3,SUD_VAL_TW,SUD_VAL_DIAG,SUD_VAL_RUTM,SUD_VAL_ONOFF,SUD_VAL_PB,SUD_VAL_KWH,SUD_VAL_ECM,SUD_VAL_CHL,SUD_DATE_HD,SUD_DATE_HST,SUD_DATE_P1,SUD_DATE_P2,SUD_DATE_Q,SUD_DATE_PP,SUD_DATE_HH,SUD_DATE_PE from rep_soap_syndis_update5min_data where (SUD_VAL_Q>0) or (SUD_VAL_HST>0 and SUD_FLG_HST='CORRECT')"); + + +for($i=0; $i<count($listWellArray); $i++) +{ + + //dla studni pracujących + if ($listWellArray[$i]['SUD_VAL_ONOFF']>0) + { + //echo "Studnia: ".$listWellArray[$i]['SUD_DRS_ID']." pracuje <br/>"; + unset($lastMeasureTime); + $lastMeasureTime = sqlStringValue("select getLastMeasureDate(200,".$listWellArray[$i]['SUD_DRS_ID'].") LMT", "LMT"); + + //sprawdza warunek, czy ostatnia data z syndis jest młodsza niż ostatni wpis w bazie SoftSPM + if( + cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_HD']) + || cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_P1']) + || cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_P2']) + || cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_Q']) +// || cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_PP']) +// || cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_HH']) + || cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_PE']) + ) + { + +// echo "Wstawił dla ".$listWellArray[$i]['SUD_DRS_ID']."<br>"; + + unset($insDate); + $insDate = date("Y-m-d H:i:s"); + + //wpisy do bazy + //insert into rep_his_data_everyday set RHD_DRS_ID=out_DRS_ID, RHD_DATE=out_DATE_save,RHD_HD_VAL=out_VAL_HD,RHD_Q_VAL=out_VAL_Q,RHD_P1_VAL=out_VAL_P1,RHD_P2_VAL=out_VAL_P2,RHD_I_VAL=out_VAL_L1,RHD_U_VAL=out_VAL_UL12,RHD_PE_VAL=out_VAL_PE,RHD_COS_VAL=out_VAL_CFI,RHD_PP_VAL=out_VAL_PP,RHD_HH_VAL=out_VAL_HH,RHD_VM3_VAL=out_VAL_VM3,RHD_WTEMP_VAL=out_VAL_TW,RHD_DGN_VAL=out_VAL_DIAG,RHD_WORK_TIME_VAL=out_VAL_RUTM,RHD_AUDIT_CD=now(); + + if ($listWellArray[$i]['SUD_VAL_PE']<0) $listWellArray[$i]['SUD_VAL_PE']='null'; + if ($listWellArray[$i]['SUD_VAL_CFI']<0) $listWellArray[$i]['SUD_VAL_CFI']='null'; + if ($listWellArray[$i]['SUD_VAL_PP']<0) $listWellArray[$i]['SUD_VAL_PP']='null'; + if ($listWellArray[$i]['SUD_VAL_HH']<0) $listWellArray[$i]['SUD_VAL_HH']='null'; + if ($listWellArray[$i]['SUD_VAL_HD']<0) $listWellArray[$i]['SUD_VAL_HD']='null'; + if ($listWellArray[$i]['SUD_VAL_P1']<0) $listWellArray[$i]['SUD_VAL_P1']='null'; + if ($listWellArray[$i]['SUD_VAL_P2']<0) $listWellArray[$i]['SUD_VAL_P2']='null'; + + + //przeliczanie czasu pracy uraz ilości wypompowanej wody +/* + // ======================================================================================================================================== + if (substr($insDate,5,2)=='09') $tbaName = "rep_002_data_wrze"; + elseif (substr($insDate,5,2)=='10') $tbaName = "rep_002_data_pazd"; + elseif (substr($insDate,5,2)=='11') $tbaName = "rep_002_data_list"; + elseif (substr($insDate,5,2)=='12') $tbaName = "rep_002_data_grud"; + else $tbaName = "rep_002_data_grud"; + + unset($czasArray); + $czasArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where WLE_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']." and WLE_DATE_FROM<='".$insDate."' and (WLE_DATE_TO>='".$insDate."' or WLE_DATE_TO is null)"); + unset($czas);unset($dataDo); + if (strlen($czasArray[0]['WLE_DATE_TO']>8)) + { + $dataDo=$insDate; + if ( (strtotime($insDate) - strtotime($czasArray[0]['WLE_DATE_TO']))>0 ) + $dataDo = $czasArray[0]['WLE_DATE_TO']; + } + + $czas = liczCzasu($listWellArray[$i]['SUD_DRS_ID'], $czasArray[0]['WLE_DATE_FROM'], $dataDo); + $czas = round($czas/3600,2); + + $woda=0; + if($czas>0) + { + $woda=sqlStringValue("select AVG(RHD_Q_VAL) RHD_Q_VAL from softspm_rep.".$tbaName." where RHD_Q_VAL>0 and RHD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']." and RHD_DATE>='".$czasArray[0]['WLE_DATE_FROM']."' and RHD_DATE<='".$dataDo."'", "RHD_Q_VAL"); + if (empty($woda) || $woda<=0) + $woda=sqlStringValue("select RHD_Q_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']." and RHD_DATE<='".$dataDo."')", "RHD_Q_VAL"); + + $listWellArray[$i]['SUD_VAL_RUTM']=$czas; + $listWellArray[$i]['SUD_VAL_VM3']=($woda*$czas); + + echo"ID: ".$listWellArray[$i]['SUD_DRS_ID']."<br/>"; + echo"Czas: ".$czas."<br/>"; + echo"Woda: ".($woda*$czas)."<br/><br/>"; + + } +*/ + // ======================================================================================================================================== + + + + + + unset($actMin); + $actMin = (int) date("i"); + if ($actMin<6) + { + mysql_query(" + insert into rep_his_data_everyday set + RHD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].", + RHD_DATE=now(), + RHD_HD_VAL=".$listWellArray[$i]['SUD_VAL_HD'].", + RHD_Q_VAL=".$listWellArray[$i]['SUD_VAL_Q'].", + RHD_P1_VAL=".$listWellArray[$i]['SUD_VAL_P1'].", + RHD_P2_VAL=".$listWellArray[$i]['SUD_VAL_P2'].", + RHD_I_VAL=".$listWellArray[$i]['SUD_VAL_L1'].", + RHD_U_VAL=".$listWellArray[$i]['SUD_VAL_UL12'].", + RHD_PE_VAL=".$listWellArray[$i]['SUD_VAL_PE'].", + RHD_COS_VAL=".$listWellArray[$i]['SUD_VAL_CFI'].", + RHD_PP_VAL=".$listWellArray[$i]['SUD_VAL_PP'].", + RHD_HH_VAL=".$listWellArray[$i]['SUD_VAL_HH'].", + RHD_VM3_VAL=NULL, + RHD_WTEMP_VAL=".$listWellArray[$i]['SUD_VAL_TW'].", + RHD_DGN_VAL=".$listWellArray[$i]['SUD_VAL_DIAG'].", + RHD_WORK_TIME_VAL=NULL, + RHD_SPM_WT=NULL, + RHD_AUDIT_CD='".$insDate."'"); + } + else + { + //RHD_WORK_TIME_VAL=".$listWellArray[$i]['SUD_VAL_RUTM'].", + + unset($maxID); + $maxID = sqlStringValue("select max(RHD_ID) RHD_ID from rep_his_data_everyday where RHD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'], "RHD_ID"); + + mysql_query(" + update rep_his_data_everyday set + RHD_DATE=now(), + RHD_HD_VAL=".$listWellArray[$i]['SUD_VAL_HD'].", + RHD_Q_VAL=".$listWellArray[$i]['SUD_VAL_Q'].", + RHD_P1_VAL=".$listWellArray[$i]['SUD_VAL_P1'].", + RHD_P2_VAL=".$listWellArray[$i]['SUD_VAL_P2'].", + RHD_I_VAL=".$listWellArray[$i]['SUD_VAL_L1'].", + RHD_U_VAL=".$listWellArray[$i]['SUD_VAL_UL12'].", + RHD_PE_VAL=".$listWellArray[$i]['SUD_VAL_PE'].", + RHD_COS_VAL=".$listWellArray[$i]['SUD_VAL_CFI'].", + RHD_PP_VAL=".$listWellArray[$i]['SUD_VAL_PP'].", + RHD_HH_VAL=".$listWellArray[$i]['SUD_VAL_HH'].", + RHD_WTEMP_VAL=".$listWellArray[$i]['SUD_VAL_TW'].", + RHD_DGN_VAL=".$listWellArray[$i]['SUD_VAL_DIAG'].", + RHD_SPM_WT=NULL, + RHD_AUDIT_CD='".$insDate."' + where RHD_ID=".$maxID); + } + + + //wstawia dane dla poszczególnych parametrów + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=200 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=200,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_Q'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=270 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=270,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_L1'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=275 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=275,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_UL12'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=730 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=730,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_TRP'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=245 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=245,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_TW'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=260 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=260,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_PE'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=280 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=280,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_CFI'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_VM3'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_RUTM'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=205 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=205,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_HD'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=215 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=215,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_P1'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=220 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=220,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_P2'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=401 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=401,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_PP'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=402 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=402,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_HH'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=225 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=225,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_PB'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=265 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=265,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_KWH'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + if ($actMin<6) + { + //mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=721 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=721,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_ECM'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + //255!!!! + //mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=721 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + //mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=719,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_CHL'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + } + + + + + } + + + + + } + else + { + unset($lastMeasureTime); + $lastMeasureTime = sqlStringValue("select getLastMeasureDate(210,".$listWellArray[$i]['SUD_DRS_ID'].") LMT", "LMT"); + if (cdt($lastMeasureTime) < cdt($listWellArray[$i]['SUD_DATE_HST'])) + { + + echo "Wstawił HST dla ".$listWellArray[$i]['SUD_DRS_ID']."<br>"; + + unset($insDate); + $insDate = date("Y-m-d H:i:s"); + + unset($actMin); + $actMin = (int) date("i"); + if ($actMin<6) + mysql_query("insert into rep_his_data_everyday set RHD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",RHD_DATE=now(),RHD_HST_VAL=".$listWellArray[$i]['SUD_VAL_HST'].",RHD_AUDIT_CD='".$insDate."'"); + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=210 and DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$listWellArray[$i]['SUD_DRS_ID'].",DRD_RESOURCES_DETAIL=210,DRD_VALUE=round(".$listWellArray[$i]['SUD_VAL_HST'].",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='insertNewWellParams',DRD_AUDIT_DATE='".$insDate."'"); + + + } + + } + + + +} + + + +unset($listWellArray); +//rep_soap_well_energy +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; + + +mysql_close($polacz); +?> \ No newline at end of file diff --git a/sites/siteNN_rep003.php b/sites/siteNN_rep003.php new file mode 100644 index 0000000..58298b8 --- /dev/null +++ b/sites/siteNN_rep003.php @@ -0,0 +1,26 @@ +<?php +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + +mysql_query("DELETE FROM softspm_rep.rep_003_data WHERE Q_H is null"); +mysql_query("truncate table softspm_rep.rep_003_data_ready"); + +unset($przelicz); +$przelicz = sqlGetResAsArray("select * from softspm_rep.rep_003_data"); +for($p=0; $p<count($przelicz); $p++) +{ + getParentAndValue4rep003($przelicz[$p]['DRS_ID']); +} + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; + + +mysql_close($polacz); +?> \ No newline at end of file diff --git a/sites/siteNN_tmwt.php b/sites/siteNN_tmwt.php new file mode 100644 index 0000000..587cf64 --- /dev/null +++ b/sites/siteNN_tmwt.php @@ -0,0 +1,130 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Przeliczanie czasu pracy</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +</head> +<body> +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("../func.php"); +require_once("../dbaccess.php"); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +?> + +<h1>Przeliczanie czasu pracy oraz ilości wypompowanej wody dla studni</h1> + +<?php + +//studnie +//$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday,seg_dev_resources where DRS_ID=RHD_DRS_ID and DRS_DEPARTMENT='Dębina' and (RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) limit 300"); +//$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday,seg_dev_resources where DRS_ID=RHD_DRS_ID and DRS_DEPARTMENT='Dębina' and RHD_Q_VAL>0 and RHD_DATE>=ADDDATE(now(), INTERVAL -12 HOUR) and (RHD_SPM_WT=0 or RHD_SPM_WT is null or RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) limit 100"); +//$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DATE>='2016-09-01 00:00:00' and RHD_DATE>ADDDATE(now(), INTERVAL -12 HOUR) and (RHD_SPM_WT is null or RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) order by RHD_DATE desc limit 100"); +unset($rowID); +$rowID = sqlGetResAsArray("select max(RHD_ID) RHD_ID from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DATE>ADDDATE(now(), INTERVAL -12 HOUR) and RHD_DATE>='2016-09-01 00:00:00' and (RHD_SPM_WT is null or RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) GROUP by RHD_DRS_ID limit 1000"); + +for($i=0; $i<count($rowID); $i++) +{ + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=".$rowID[$i]['RHD_ID']); + + if ($wellArray[0]['RHD_Q_VAL']>0 || $wellArray[0]['RHD_I_VAL']>0) + { + unset($czasArray); + $czasArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where WLE_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$wellArray[0]['RHD_DRS_ID']." and WLE_DATE_FROM<='".$wellArray[0]['RHD_DATE']."' and (WLE_DATE_TO>='".$wellArray[0]['RHD_DATE']."' or WLE_DATE_TO is null)"); + unset($czas); + if (strlen($czasArray[0]['WLE_DATE_TO']>8)) + { + if ( (strtotime($wellArray[0]['RHD_DATE']) - strtotime($czasArray[0]['WLE_DATE_TO']))>0 ) + $wellArray[0]['RHD_DATE'] = $czasArray[0]['WLE_DATE_TO']; + } + + $czas = fCzas($wellArray[0]['RHD_DRS_ID'], $czasArray[0]['WLE_DATE_FROM'], $wellArray[0]['RHD_DATE']); + $czas = round($czas/3600,2); + + //echo "Studnia: ".$wellArray[0]['RHD_DRS_ID'].", data: ".$wellArray[0]['RHD_DATE'].", CZAS=".$czas."<br>"; + + $woda=0; + if($czas>0) + { +// $woda=sqlStringValue("select AVG(RHD_Q_VAL) RHD_Q_VAL from softspm_rep.".$tbaName." where RHD_Q_VAL>0 and RHD_DRS_ID=".$wellArray[0]['RHD_DRS_ID']." and RHD_DATE>='".$czasArray[0]['WLE_DATE_FROM']."' and RHD_DATE<='".$wellArray[0]['RHD_DATE']."'", "RHD_Q_VAL"); +// if (empty($woda) || $woda<=0) +// $woda=sqlStringValue("select RHD_Q_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$wellArray[0]['RHD_DRS_ID']." and RHD_DATE<='".$wellArray[0]['RHD_DATE']."')", "RHD_Q_VAL"); + //$woda=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$wellArray[0]['RHD_DRS_ID']." and AVG_DATE>='".$czasArray[0]['WLE_DATE_FROM']."' and AVG_DATE<='".$wellArray[0]['RHD_DATE']."'", "AVG_Q_VAL"); + $woda=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$wellArray[0]['RHD_DRS_ID']." and AVG_DATE>=ADDDATE('".$czasArray[0]['WLE_DATE_FROM']."', INTERVAL -1 DAY) and AVG_DATE<='".$wellArray[0]['RHD_DATE']."'", "AVG_Q_VAL"); + + } + + //echo "Studnia: ".$wellArray[0]['RHD_DRS_ID'].", data: ".$wellArray[0]['RHD_DATE'].", WODA=".($woda*$czas)."<br><br>"; + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellArray[0]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellArray[0]['RHD_ID']); + echo"<br>"; + + //czas + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=round(".$czas.",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + + //woda + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=round(".($woda*$czas).",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + + +/* + * + * +//UPDATE rep_his_data_everyday SET RHD_VM3_VAL=NULL,RHD_WORK_TIME_VAL=NULL, RHD_SPM_WT=NULL,RHD_SPM_PW=NULL WHERE RHD_DRS_ID in (select DRS_ID from seg_dev_resources where DRS_DEPARTMENT='Dębina' and DRS_DEV_TYPE=12) + unset($woda); + $woda = getGlobalPumpedWaterRangeDate($wellArray[0]['RHD_DRS_ID'], $wellArray[0]['RHD_DATE']); + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.",RHD_VM3_VAL=".$woda." WHERE RHD_ID=".$wellArray[0]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.",RHD_VM3_VAL=".$woda." WHERE RHD_ID=".$wellArray[0]['RHD_ID']); + echo"<br>"; + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=".$woda.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=".$woda.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo"<br>"; + + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=".$czas.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[0]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=".$czas.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo"<br>"; + echo"<br>"; +*/ + + + + } +} + + +?> + + + + +<?php +mysql_close($polacz); + +?> +</body> +</html> \ No newline at end of file diff --git a/sites/slupekIMG.php b/sites/slupekIMG.php new file mode 100644 index 0000000..bea4ff4 --- /dev/null +++ b/sites/slupekIMG.php @@ -0,0 +1,29 @@ +<?php //0046a +if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the <a href="http://www.ioncube.com/lw/">ionCube Loader Wizard</a> to assist with installation.');exit(199); +?> +HR+cPpXJsWwbkJuXfELFBQyTtyjkjQCmlkvIeuwibzCeD2Yf11uWWmxdANDlM/BOjV/ux1EODqkL +2Smg6RZIGTtzIwKjv7IUiADNymqvlcYaP/5ohVg+NcOGGurgGKohXx7HGNlCDJGq7uFPlbzLR7Xb +wm0SohhcsYtqYVaPc4NG2hF3QSvRqefR578fUrLrgL0/vdKeLgdb+ogC31rV8UxmSescE0ua8OqM +2bvfTvItkp/PTeQvSvoJg2/VVARQ9u72uNtBq/nSafXZus20vp8wMqB49CGvhQXy0PsSLb3zDxrS +qw5CzyFAI4wpitOk5Pdj+6TV/FnwxQ5EcYntrtvaNIjK5WPFBWBc1Pk/lhmPfTMgrxjV2Wjsh5jr +MrEbna5TkkaFbjFBfrKm7xzl8JgDunVPMuQghLRTrMctfdfxPTc3WaCAA4btV6hmXLDoJMAdvN4U +dDtNL42jqO9Scawk2mYfHOMbDMEF3NeZ98Tkdiz9KgdmNKTx1uL8OQKNhM69OqjwWpGBoMD4UNMC +kGdzos74FX40Hi+BeqlegW0W2hSWWEMu0oaZXdAh/btwWEqts8GQgPo9osu20TlwiYUL5t64WQ65 +DyQSxLSnd8o8w9LfzP/vd5xec2n5X5CtcvqmR2rmlXvS1QdUbr1HoQkkcIsVhGt8Qti6kQMeSDed +lu6VIm46mXai/QH5HRGFi/smI8r11PDeI6QDkP8m5nwi5nNyKfgFvtNqha32VAEGw008c49uv5qF +Rwgmpzx0Jby20LDdtsitQ6h49FQAOXX6hFt2HDw2yG/rnybcBo7d4caXQG2HXf4jJiPffMPBfFz/ +fhiFVxviIU72H0PDl7Q88Wa3AilCYT1jN1yJ5CDVRuNfNU3tukVzph8taTWZEzWZxnPoxTAvHjAF +hXMhZfp78lhoxR3k+qBmgghM9+9MPfhe7mxsyWJ/LwykMesU5evmr/57ao/y10emHNtPaJZYQ6fI +p0x9UVzfz84j2oI4pzPJyCo6FITlyCOvQygR+8Z0W8/yxN37tG+wiHhwWuV3LJSEghKL+s7atTj6 +gyxVBV4CQ2GZ6WA2sYB2ZqDTO0zWWYccluHUCDHqwvBJ/roc6WBWG5W3fHJ7R5ev7b5t1V4Sf9H1 +dj1F3YvPwKW8JaWxkmBoxhw4coIbIWXmEkLnbcgkyp9jjyqLzdM2PkmJGjydcsHlVrw2bqskQvTd +aJQXnOPBeddwM3LhsbXD1VfdecKbGwGEVxoEeSjDo2Kx5ZvqzzN+mzPnYXa27pgABaKeuvpqREF3 +4okdKDR5ibtlihiDdUQASVg9TAn2CRD14ADqFPyFkEPjJGRr1WESvoRtBSNvPHk2zXaOtR0AQfyY +h3F/ZsGVuXAMwzbLhn1IWPl7031kPKJpQSVAnRTfh+i0OtuSQsuaxJiSgjcER7VB9JKHsmjAZLWr +iJFr7l0iJUQlkAqvGc4M/JKD6BEcc554OavoDODuMLf8B1/8+FVSE+giZSp3p3aWe85r4E6haxB2 +fFp/tUXuuExNjeAkw4qbeNtXgEgtsoVijSCrv0g7+Z1qZJ9NESR2aPlTJO1OpcV5b+J4W7jkaq3I ++2mo4zQpMUP7RTz2KK08s3R6gWsDrMl64DEFTEbUCQt/mXmVk3wXiVDfMDXsskt9og0/lb21dByI +KlMpbVG5cL6/vLSL51cHReA2DonajEbhU+lSWMU2vq3HJOrsGdYj2hIpKz5evEB/8jo+3FEOYmE/ +0QkIdP45fQAHKnu+zRoMccUCvt4gAu64aUVeUzs/5wpfPUipqglcbSyZLIWn45Um0pNZd2T9rbfq +vE7ujxKcwR67khBCwGoawh4azxxavW7/tT/dGsnkzniG7xxNdAy6XLSAwOy+5WPK+M0cXZy5aF5r +kbFlXOpeL2obYBNSp7KSlOe58Uc581BSnJ4UVIIeBt0Q3G== \ No newline at end of file diff --git a/sms/readWriteToDatabase.php b/sms/readWriteToDatabase.php new file mode 100644 index 0000000..2d2de77 --- /dev/null +++ b/sms/readWriteToDatabase.php @@ -0,0 +1,846 @@ +<?php +date_default_timezone_set('Europe/Warsaw'); +include"/var/www/dbaccess.php"; +include'/var/www/html/sms/smsFunction.php'; +include'/var/www/html/sms/func_new_ap.php'; + +$sterNO = '+48607698283'; +$in_INSTANCE_DB = 'softspm'; + +$komPOMPup = 'Po osiągnięciu poziomu gornego ostrzegawczego [poziom] pompa zostala wylaczona – ujecie Wyszynskiego'; +$komPOMdown = 'Po osiągnięciu poziomu dolnego ostrzegawczego [poziom] pompa zostala wlaczona – ujecie Wyszynskiego'; + +$komPOMPbpz = 'Brak potwierdzenia zalaczenia pompy – ujecie Wyszynskiego'; +$komPOMPbpw = 'Brak potwierdzenia wylaczenia pompy – ujecie Wyszynskiego'; + +$komPOMPmanual = 'Zostal ustawiony reczny tryb sterowania na ujeciu Wyszynskiego'; +$komPOMPups = 'Zanik napiecia na ujeciu Wyszynskiego'; + + +// będzie robił 2 przerwy +$minutesTo = (int) date("i"); +//if ($minutesTo<29) $minutesTo=29; +//else if ($minutesTo>29 && $minutesTo<59) $minutesTo=59; + +if ($minutesTo<14) $minutesTo=14; +else if ($minutesTo>14 && $minutesTo<29) $minutesTo=29; +else if ($minutesTo>29 && $minutesTo<44) $minutesTo=44; +else if ($minutesTo>44 && $minutesTo<59) $minutesTo=59; + + +//else $minutesTo=59; + +$min=0; + +while ($min< $minutesTo) +{ + + $con = mysql_connect($softspm_host, $demo_softspm_user, $demo_softspm_pass);mysql_select_db($demo_softspm_db); + mysql_query("SET NAMES utf8"); + mysql_query("SET CHARACTER_SET utf8_general_ci"); + + //$idGlebokoscZabudowy = sqlStringValue("select DIC_ID from sys_dictionaries where DIC_NAME='WATER_LEVEL' and DIC_TYPE='RESERVOIR_PIEZOMETER_PARAMETERS'","DIC_ID"); + $baseNO = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='NR_BASE_STATION'","SSP_VALUE"); + $basePhone = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='ALARM_PHONE'","SSP_VALUE"); + $baseMail = sqlStringValue("select SSP_VALUE from sys_setup_parameters where SSP_NAME='ALARM_MAIL'","SSP_VALUE"); + + + + $w_main = mysql_query("select SMI_ID,SMI_PHONE_NO,SMI_DATE,SMI_MESSAGE from seg_sms_in where SMI_STATUS='0' order by SMI_DATE"); + if($w_main)while ($r_main = mysql_fetch_array($w_main)) + { + $smsID = $r_main["SMI_ID"]; + $smsNO = $r_main["SMI_PHONE_NO"]; + $smsDATE = $r_main["SMI_DATE"]; + $smsCONT = $r_main["SMI_MESSAGE"]; + + + // Sterowaniki SPM SYSTEM - [AP] + if (strstr($smsCONT,'#AP#')) + { + // dla sterownika Osińska Góra + if ($smsNO=='_+48607695578_') + { + // ================================================================ // + $wynik = mysql_query("select DRS_ID,SRP_SCOP_GS,SRP_SCOP_GZ from seg_reservoirs_piezometers left join seg_dev_resources on DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=600 where SRP_PHONE_NO like '%".$smsNO."%'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $devID = $r["DRS_ID"]; + $devSCOP_GS = $r["SRP_SCOP_GS"]; + $devSCOP_GZ = $r["SRP_SCOP_GZ"]; + + + $inSMSdata = explode('#',$smsCONT); + foreach ($inSMSdata as $outSMSdata) + { + if (strstr($outSMSdata,"Z")) $oZparam = hexdec(substr($outSMSdata, 2)); + else if (strstr($outSMSdata,"L")) $oLparam = hexdec(substr($outSMSdata, 2)); + //Siła sygnału GSM + else if (strstr($outSMSdata,"Q")) + { + $oQparam = hexdec(substr($outSMSdata, 2)); + mysql_query("INSERT INTO seg_rss_signal_values SET RSS_DRS_ID=$devID,RSS_VALUE='".$oQparam."',RSS_AUDIT_CU='SMS',RSS_AUDIT_CD='".$smsDATE."'"); + } + //Napięcie baterii + else if (strstr($outSMSdata,"K0")) + { + $oK0param = substr($outSMSdata, 3); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$devID,DRD_RESOURCES_DETAIL=606,DRD_VALUE='".$oK0param."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + } + //Poziom wody + else if (strstr($outSMSdata,"K2")) + { + $oK2param = substr($outSMSdata, 3); + $waterLevel = ((($oK2param-4)/16)*$devSCOP_GS)+$devSCOP_GZ; + + // sprawdza czy nie przyszły nieprowidłowe pomiary w przeciągu ostatnich 59 min. + if (isWriteNewWaterLevel($waterLevel, $devID)) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=$devID,DRD_RESOURCES_DETAIL=700,DRD_VALUE='".round($waterLevel,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + } + } + + + // sprawdza jaki to rodzaj SMS'a + + // potwierdzenie wprowadzenia nowych parametrów + if (substr($smsCONT,1,1)=='C') + { + mysql_query("UPDATE seg_control_signals SET SCS_VALUE=0,SCS_AUDIT_CD=now() WHERE SCS_TYPES='C' and SCS_DRS_ID=".$devID); + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "ALARM! [01]", getAlarmContent('CHANGE_LEVELS',$devID,0)); + } + else + { + checkWaterLevel($devID,$waterLevel,$sterNO,$baseNO); + //echo "Regularny odczyt\n"; + } + } + // ================================================================ // + } + // dla nowych sterowaników AP - SPM SYSTEM + else + { + $wynik = mysql_query("select DRS_ID,DEV_TYPE,DEV_NAME,PHONE_NO from (select DRS_ID,'WELL' DEV_TYPE, WLL_NAME DEV_NAME, WLL_PHONE_NO PHONE_NO from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 union select DRS_ID,'RES' DEV_TYPE, SRP_NAME DEV_NAME, SRP_PHONE_NO PHONE_NO from seg_reservoirs_piezometers left join seg_dev_resources on DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=600 ) tb where PHONE_NO like '%".$smsNO."%'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $in_PHONE_NO = $r["PHONE_NO"]; + $in_DEV_ID = $r["DRS_ID"]; + $in_OBJECT_TYPE = $r["DEV_TYPE"]; + $in_DEV_NAME = $r["DEV_NAME"]; + $in_OBJECT_DRIVERS = 'AP'; + } + $in_DATE = $smsDATE; + $in_MESSAGE = $smsCONT; + + + // jeśli znalazł obiekt + if ($in_DEV_ID>0) + { + //studnia + if ($in_OBJECT_TYPE=='WELL') + { + $wellResArray=null; $wellResScopeArray=null; + // dane pochodzące ze sterownika #AP# + if (strstr($in_MESSAGE,'#AP#') && !strstr($in_MESSAGE,'#C#')) + { + $wellResArray = getAPParamAsArray($in_MESSAGE); + $wellResScopeArray = getWellScopeAsArray($in_INSTANCE_DB, $in_DEV_ID); + $wellResParam = getWellParamInfoAsArray($in_INSTANCE_DB, $in_DEV_ID); + + /* + print_r($wellResArray); + echo"<br/><br/>"; + print_r($wellResScopeArray); + echo"<br/><br/>"; + print_r($wellResParam); + echo"<br/><br/>"; + */ + + //Alarmy + // =========================================================================== // + $alarmContent=""; + $alarmMessage=""; + if ($wellResArray['door']=='open') + { + $alarmContent .= "DOOR#"; + $alarmMessage .="<li> Szafka rozdzielni sterownika została otwarta."; + } + if ($wellResArray['workStatus']=='manual') + { + $alarmContent .= "MAN#"; + $alarmMessage .="<li> Został ustawiony ręczny tryb sterowania studnią."; + // Jeśli został ustawiony tryb ręczny - wyłącza studnie + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_sms_out SET SMO_PHONE_NO='".$in_PHONE_NO."',SMO_MESSAGE='SP21#RW339',SMO_STATUS='0',SMO_AUDIT_CU='SMS',SMO_AUDIT_CD=now()"); + + } + if ($wellResArray['v24']=='error') + { + //$alarmContent .= "V24#"; + $alarmMessage .="<li> Zanik napięcia sterowania – praca na baterii."; + } + + if (strlen($alarmContent)<3) + { + $alarmContent='EMPTY'; + $alarmMessage .="Wszystkie alarmy zostały odwołane. Praca w trybie automatycznym."; + } + + if ($wellResParam['curActiveAlarms']!=$alarmContent) + { + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_alarms SET ARM_DRS_ID=".$in_DEV_ID.",ARM_TYPES='".$alarmContent."',ARM_AUDIT_CU='SMS',ARM_AUDIT_CD='".$in_DATE."'"); + + // wysyła powiadomienia + if ($alarmContent=='EMPTY') + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, $in_DEV_NAME." - BRAK ALARMOW!", $in_DEV_NAME." - ".$alarmMessage); + } + else + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, $in_DEV_NAME." - ALARM!", "Na ujęciu ".$in_DEV_NAME." zarejestrowano poniższe alarmy:<br/> ".$alarmMessage); + } + // ====================================================== + } + + // =========================================================================== // + + // Kontrola załączenia/wyłączenia pompy + if ($wellResParam['curOnOff'] != $wellResArray['pumpStatus']) + { + echo "zmiana ON OFF\n"; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$wellResArray['pumpStatus']."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // pobiera aktualne dane dla zbiornika Palmowa + $resCurParamArray = getResActualParamAsArray($in_INSTANCE_DB, 7); + + if ($wellResArray['pumpStatus']=='ON') + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, $in_DEV_NAME." - potwierdzenie zalaczenia pompy!", $in_DEV_NAME." - potwierdzenie zalaczenia pompy. Aktualny stan wody w zbiorniku wynosi: ".$resCurParamArray['curWaterLevel']."[m]"); + if (strlen($basePhone)>8) sendSMSAlert($basePhone, $in_DEV_NAME." - potwierdzenie zalaczenia pompy. Aktualny stan wody w zbiorniku wynosi: ".$resCurParamArray['curWaterLevel']."[m]"); + } + else if ($wellResArray['pumpStatus']=='OFF') + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, $in_DEV_NAME." - potwierdzenie wylaczenia pompy!", $in_DEV_NAME." - potwierdzenie wylaczenia pompy. Aktualny stan wody w zbiorniku wynosi: ".$resCurParamArray['curWaterLevel']."[m]"); + if (strlen($basePhone)>8) sendSMSAlert($basePhone, $in_DEV_NAME." - potwierdzenie wylaczenia pompy. Aktualny stan wody w zbiorniku wynosi: ".$resCurParamArray['curWaterLevel']."[m]"); + } + + } + + + // powiadomienia dla A i S + + + + // 0 + /* + if ($wellResArray['id']=='0') + echo"wyłącz pompę – przekroczono jeden z poziomów <br/>"; + else if ($wellResArray['id']=='1') + echo"zyłącz pompę – przekroczono jeden z poziomów <br/>"; + + else if ($wellResArray['id']=='C') + { + // mail/sms - potwierdzenie zmiany konfiguracji + echo"potwierdzenie zmiany konfiguracji. <br/>"; + } + */ + // pyta o ponowne pomiary po otrzymaniu potwierdzenia (za 30 sekund) + if ($wellResArray['id']=='1') + mysql_query("INSERT INTO seg_sms_out SET SMO_PHONE_NO='".$in_PHONE_NO."',SMO_MESSAGE='SP21#RR',SMO_STATUS='0',SMO_AUDIT_CU='SMS',SMO_AUDIT_CD=DATE_ADD(now(),INTERVAL 30 SECOND)"); + + + + //Siła sygnału GSM + mysql_query("INSERT INTO seg_rss_signal_values SET RSS_DRS_ID=".$in_DEV_ID.",RSS_VALUE='".$wellResArray['Q_GSM']."',RSS_AUDIT_CU='SMS',RSS_AUDIT_CD='".$in_DATE."'"); + + // Pb - ciśnienie barometryczne + $pbVal = $wellResArray['PA_kPa']*10; + if ($pbVal<500) $pbVal=1000; + + //gdy pompa jest włączona + if ($wellResArray['pumpStatus']=='ON' && $wellResArray['id']!='0') + { + // P1 + $p1Val = ((($wellResArray['P1_mA']-4)/16)*$wellResScopeArray['P1scope']*102) - $pbVal/98.1; + if ($p1Val<0) $p1Val=0; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=215,DRD_VALUE='".round($p1Val,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // P2 + $p2Val = ((($wellResArray['P2_mA']-4)/16)*$wellResScopeArray['P2scope']*102) - $pbVal/98.1; + if ($p2Val<0) $p2Val=0; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=220,DRD_VALUE='".round($p2Val,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // PP + $ppVal = ((($wellResArray['PP_mA']-4)/16)*$wellResScopeArray['PPscope']) - $pbVal/98.1; + if ($ppVal<0) $ppVal=0; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=401,DRD_VALUE='".round($ppVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // hh + $hhVal = ((($wellResArray['HH_mA']-4)/16)*$wellResScopeArray['HHscope']) - $pbVal/98.1; + if ($hhVal<0) $hhVal=0; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=402,DRD_VALUE='".round($hhVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // Hd +// łata!!! + // ========================================= + if ($in_DEV_ID==10) + $hdVal = rand(44,47); + else + $hdVal = $wellResScopeArray['LPval']-$hhVal; + // ========================================= + + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=205,DRD_VALUE='".round($hdVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // Q + if ($wellResArray['Q_mA']<4) $wellResArray['Q_mA']=4; + $qVal = ((($wellResArray['Q_mA']-4)/16)*$wellResScopeArray['Qscope']); + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=200,DRD_VALUE='".round($qVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + //U V_V + $uVal = $wellResArray['V_V']*1.73; //V_V + // Na uszkodzonego ModBusa + if ($uVal==0) $uVal=rand(395,400); + // ============================ + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=275,DRD_VALUE='".round($uVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + //I + $iVal = $wellResArray['I_A']; + // Na uszkodzonego ModBusa + if ($iVal==0) $iVal=rand(50,53); + // ============================ + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=270,DRD_VALUE='".round($iVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // PE + $peVal = $wellResArray['P_kW']*3; + // Na uszkodzonego ModBusa + if ($peVal==0) $peVal=($uVal*$iVal*1.73*0.82)/1000; + // ============================ + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=260,DRD_VALUE='".round($peVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + //cosFi + $cosFiVal = 0.82; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=280,DRD_VALUE='".round($cosFiVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + +//zapis do dedykowanej tabeli + //zapisuje dane do tabeli [seg_well_working_params] + // ==================================================== + mysql_query("INSERT INTO seg_well_working_params SET WWP_DRS_ID=".$in_DEV_ID.",WWP_PB=".$pbVal.",WWP_P1=".$p1Val.",WWP_P2=".$p2Val.",WWP_PP=".$ppVal.",WWP_HH=".$hhVal.",WWP_HD=".$hdVal.",WWP_Q=".$qVal.",WWP_I=".$iVal.",WWP_U=".$uVal.",WWP_PE=".$peVal.",WWP_COS_FI=".$cosFiVal.",WWP_DIA='".$wellResArray['pumpDiagnostic']."',WWP_GSM_SIGNAL='".$wellResArray['Q_GSM']."',WWP_AUDIT_CD='".$in_DATE."'"); + // ==================================================== + } + + //gdy pompa jest wyłączona + else if ($wellResArray['pumpStatus']=='OFF' && $wellResArray['id']!='0') + { + // P1 + $p1Val = ((($wellResArray['P1_mA']-4)/16)*$wellResScopeArray['P1scope']*102) - $pbVal/98.1; + if ($p1Val<0) $p1Val=0; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=215,DRD_VALUE='".round($p1Val,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // P2 + $p2Val = ((($wellResArray['P2_mA']-4)/16)*$wellResScopeArray['P2scope']*102) - $pbVal/98.1; + if ($p2Val<0) $p2Val=0; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=220,DRD_VALUE='".round($p2Val,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // hh + $hhVal = ((($wellResArray['HH_mA']-4)/16)*$wellResScopeArray['HHscope']) - $pbVal/98.1; + if ($hhVal<0) $hhVal=0; + + // Hst +// łata!!! + // ========================================= + if ($in_DEV_ID==10) + $hhVal = rand(44,47); + else + $hhVal = $wellResScopeArray['LPval']-$hhVal; + // ========================================= + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=210,DRD_VALUE='".round($hhVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + //U V_V + $uVal = $wellResArray['V_V']*1.73; //V_V + // Na uszkodzonego ModBusa + if ($uVal==0) $uVal=rand(395,400); + // ============================ + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=275,DRD_VALUE='".round($uVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + + + } + + + +/* + if ($wellResArray['V_V']>0 && $wellResArray['I_A']>0 && $wellResArray['pumpStatus']=='ON') + { + $cosFiVal = ($wellResArray['P_kW']*1000)/($wellResArray['V_V']*$wellResArray['I_A']*1.73); + $cosFiVal = 0.82; + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=280,DRD_VALUE='".round($cosFiVal,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + } +*/ + } + + + + } + //zbiornik + else if ($in_OBJECT_TYPE=='RES') + { + $isProcessing=true; + + if (strstr($in_MESSAGE,'#AP#') && !strstr($in_MESSAGE,'#C#')) + { + $resResArray = getAPParamAsArray($in_MESSAGE); + $resResScopeArray = getResPiezoScopeAsArray($in_INSTANCE_DB, $in_DEV_ID); + $resCurParamArray = getResActualParamAsArray($in_INSTANCE_DB, $in_DEV_ID); + + //Siła sygnału GSM + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_rss_signal_values SET RSS_DRS_ID=".$in_DEV_ID.",RSS_VALUE='".$resResArray['Q_GSM']."',RSS_AUDIT_CU='SMS',RSS_AUDIT_CD='".$in_DATE."'"); + + //Napięcie baterii + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=606,DRD_VALUE='".$resResArray['Vbatery_V']."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + //Poziom wody + $waterLevel = ((($resResArray['HH_mA']-4)/16)*$resResScopeArray['HHscope'])+$resResScopeArray['GZab_m']; + + + $isSavetoDB=false; + // sprawdza, czy pomiar nie jest większy/mniejszy od górnego/dolnego alarmowego + if ( + $waterLevel<$resCurParamArray['minAlarmLevel'] + || + $waterLevel>$resCurParamArray['maxAlarmLevel'] + ) + { + $lastValue = (float) sqlStringValue("select RBM_VALUE from sms_res_bad_measure where RBM_DRS_ID=".$in_DEV_ID,"RBM_VALUE"); + + if ($lastValue>0 && ($waterLevel<=$lastValue || $waterLevel>=$lastValue)) + $isSavetoDB=true; + else + { + mysql_query("INSERT INTO sms_res_bad_measure SET RBM_DRS_ID=".$in_DEV_ID.",RBM_VALUE=".$waterLevel); + //mysql_query("INSERT INTO seg_sms_out SET SMO_PHONE_NO='".$in_PHONE_NO."',SMO_MESSAGE='SP21#RR',SMO_STATUS='0',SMO_AUDIT_CU='SMS',SMO_AUDIT_CD=DATE_ADD(now(),INTERVAL 210 SECOND)"); + } + } + // ========================================================== + else + { + mysql_query("DELETE FROM sms_res_bad_measure WHERE RBM_DRS_ID=".$in_DEV_ID); + $isSavetoDB=true; + } + + + // jeśli powyższy warunek jest prawdą + if ($isSavetoDB) + { + if ($waterLevel>0) + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_dev_resources_det SET DRD_DRS_ID=".$in_DEV_ID.",DRD_RESOURCES_DETAIL=700,DRD_VALUE='".round($waterLevel,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='".$in_DATE."'"); + + // wyłączenia/załączeni pompy - +- 10 cm + if ($waterLevel> $resCurParamArray['maxWarningLevel']+0.1) + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_sms_out SET SMO_PHONE_NO='".getWellPhoneNo($in_INSTANCE_DB, $resCurParamArray['assResToWellID'])."',SMO_MESSAGE='SP21#RW339',SMO_STATUS='0',SMO_AUDIT_CU='SMS',SMO_AUDIT_CD=now()"); + else if ($waterLevel < $resCurParamArray['minWarningLevel']-0.1) + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_sms_out SET SMO_PHONE_NO='".getWellPhoneNo($in_INSTANCE_DB, $resCurParamArray['assResToWellID'])."',SMO_MESSAGE='SP21#RZ339',SMO_STATUS='0',SMO_AUDIT_CU='SMS',SMO_AUDIT_CD=now()"); + } + + + + + + + + + + //Alarmy + // =========================================================================== // + $alarmContent=""; + $alarmMessage=""; + if ($resResArray['door']=='open') + { + $alarmContent .= "DOOR#"; + $alarmMessage .="<li> Szafka rozdzielni sterownika została otwarta."; + } + if ($resResArray['id']=='A') + { + $alarmContent .= "LEVEL#"; + $alarmMessage .="<li> Przekroczono poziom alarmowy.."; + } + if ($resResArray['v24']=='error') + { + $alarmContent .= "V24#"; + $alarmMessage .="<li> Zanik napięcia sterowania – praca na baterii."; + + // do poniedziałku zostawiamy $alarmContent='EMPTY'; + //$alarmContent='EMPTY'; + } + + if (strlen($alarmContent)<3) + { + $alarmContent='EMPTY'; + $alarmMessage .="Wszystkie alarmy zostały odwołane."; + } + + + + if ($resCurParamArray['curActiveAlarms']!=$alarmContent) + { + mysql_query("INSERT INTO ".$in_INSTANCE_DB.".seg_alarms SET ARM_DRS_ID=".$in_DEV_ID.",ARM_TYPES='".$alarmContent."',ARM_AUDIT_CU='SMS',ARM_AUDIT_CD='".$in_DATE."'"); + + // wysyła powiadomienia + if ($alarmContent=='EMPTY') + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, $in_DEV_NAME." - BRAK ALARMOW!", $in_DEV_NAME." - ".$alarmMessage); + } + else + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, $in_DEV_NAME." - ALARM!", "Na zbiorniku ".$in_DEV_NAME." zarejestrowano poniższe alarmy:<br/> ".$alarmMessage); + } + // ====================================================== + + } + + } + } + //piezometr + else if ($in_OBJECT_TYPE=='PIEZO') + { + $isProcessing=true; + } + } + } + } + + + // Sterowaniki SIEMENS - [S7] + else if (strstr($smsCONT,'#S7#')) + { + $wynik = mysql_query("select DRS_ID,WLL_SCOP_P1,WLL_SCOP_P2,WLL_SCOP_PP,WLL_SCOP_HH,WLL_SCOP_Q,WLL_SCOP_S,WLL_SCOP_SS,WLL_SCOP_TS,WLL_SCOP_TW from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 where WLL_PHONE_NO like '%".$smsNO."%'"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $devID = $r["DRS_ID"]; + $devSCOP_P1 = $r["WLL_SCOP_P1"]; + $devSCOP_P2 = $r["WLL_SCOP_P2"]; + $devSCOP_PP = $r["WLL_SCOP_PP"]; + $devSCOP_HH = $r["WLL_SCOP_HH"]; + + // C - sms-y kontrolne + if (substr($smsCONT,1,1)=='C') + { + $inSMSdata = explode('#',$smsCONT); + foreach ($inSMSdata as $outSMSdata) + { + $outSMSdata=str_replace(' ','',$outSMSdata); + + if (strstr($outSMSdata,"POMP")) + { + $oPOMPparam = substr($outSMSdata, 5); + //potwierdzenie wyłączenia pompy + if ($oPOMPparam==0) + { + // wysłać powiadomienie mailem/sms-em + if (sqlValue("select SCS_VALUE from seg_control_signals where SCS_TYPES='0' and SCS_DRS_ID=1")>0 && getPumpStatusWork(4)==1) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "SUW Wyszynskiego - potwierdzenie wylaczenia pompy!", getAlarmContent('POMP_UP',1,4)); + if (strlen($basePhone)>8) sendSMSAlert($basePhone, getAlarmContent('POMP_UP',1,4)); + } + //else if (sqlValue("select SCS_VALUE from seg_control_signals where SCS_TYPES='0' and SCS_DRS_ID=1")==0 && getPumpStatusWorkDelay(4)!="OFF") + else if (sqlValue("select SCS_VALUE from seg_control_signals where SCS_TYPES='0' and SCS_DRS_ID=1")==0 && getPumpStatusWork(4)==1) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "SUW Wyszynskiego - potwierdzenie wylaczenia pompy!", getAlarmContent('POMP_OFF',1,4)); + // dodatkowo na wypadek braku informacji ze zbiornika + if (strlen($basePhone)>8) sendSMSAlert($basePhone, getAlarmContent('POMP_OFF',1,4)); + } + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE=now()"); + mysql_query("update seg_control_signals set SCS_VALUE=0 where SCS_TYPES='0' and SCS_DRS_ID=1"); + + } + //potwierdzenie załączenia pompy + else if ($oPOMPparam==1) + { + // wysłać powiadomienie mailem/sms-em + if (sqlValue("select SCS_VALUE from seg_control_signals where SCS_TYPES='1' and SCS_DRS_ID=1")>0 && getPumpStatusWork(4)==0) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "SUW Wyszynskiego- potwierdzenie zalaczenia pompy!", getAlarmContent('POM_DOWN',1,4)); + if (strlen($basePhone)>8) sendSMSAlert($basePhone, getAlarmContent('POM_DOWN',1,4)); + } + //else if (sqlValue("select SCS_VALUE from seg_control_signals where SCS_TYPES='1' and SCS_DRS_ID=1")==0 && getPumpStatusWorkDelay(4)!="ON") + else if (sqlValue("select SCS_VALUE from seg_control_signals where SCS_TYPES='1' and SCS_DRS_ID=1")==0 && getPumpStatusWork(4)==0) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "SUW Wyszynskiego - potwierdzenie zalaczenia pompy!", getAlarmContent('POMP_ON',1,4)); + // dodatkowo na wypadek braku informacji ze zbiornika + if (strlen($basePhone)>8) sendSMSAlert($basePhone, getAlarmContent('POMP_ON',1,4)); + } + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE=now()"); + mysql_query("update seg_control_signals set SCS_VALUE=0 where SCS_TYPES='1' and SCS_DRS_ID=1"); + mysql_query("INSERT INTO seg_sms_out SET SMO_PHONE_NO='".$smsNO."',SMO_MESSAGE='#P#".$baseNO."#S7#?',SMO_STATUS='0',SMO_AUDIT_CU='SMS',SMO_AUDIT_CD=now()"); + } + } + } + } + + // P - sms-y pomiarowe + else if (substr($smsCONT,1,1)=='P') + { + //echo $smsCONT." \n"; + $wellS7ParamsAsArray=null; + $wellS7ParamsAsArray['date']=$smsDATE; + $wellS7ParamsAsArray['PB']=rand(999,1010); + //dla sterownika S7 + //$wellS7ParamsAsArray['P1']=0; + //$wellS7ParamsAsArray['PP']=0; + + $inSMSdata = explode('#',$smsCONT); + foreach ($inSMSdata as $outSMSdata) + { + $outSMSdata=str_replace(' ','',$outSMSdata); + + // zakres hd - 60 + + //P1 + if (strstr($outSMSdata,"P1")) + { + $oP1param = substr($outSMSdata, 3); + //$oP1param=0; + //$oP1param = ((($oP1param-4)/16)*100); + $oP1param = ((($oP1param-4)/16)*$devSCOP_P1*102); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=215,DRD_VALUE='".round($oP1param,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['P1']=$oP1param; + } + //P2, zakres 100 + else if (strstr($outSMSdata,"P2")) + { + $oP2param = substr($outSMSdata, 3); + //$oP2param = ((($oP2param-4)/16)*100); + $oP2param = ((($oP2param-4)/16)*$devSCOP_P2*102); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=220,DRD_VALUE='".round($oP2param,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['P2']=$oP2param; + } + + //PP + else if (strstr($outSMSdata,"PP")) + { + $oPPparam = substr($outSMSdata, 3); + //$oP2param = ((($oP2param-4)/16)*100); + $oPPparam = ((($oPPparam-4)/16)*$devSCOP_PP)-($wellS7ParamsAsArray['PB']/100); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=401,DRD_VALUE='".round($oPPparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['PP']=$oPPparam; + } + + + //HH + else if (strstr($outSMSdata,"HH")) + { + $oHHparam = substr($outSMSdata, 3); + //$oHHparam = ((($oHHparam-4)/16)*60); + $oHHparam = ((($oHHparam-4)/16)*$devSCOP_HH)-($wellS7ParamsAsArray['PB']/100); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=402,DRD_VALUE='".round($oHHparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['HH']=$oHHparam; + + // Dla HD (zakres 60) + $HDparam = 60 - $oHHparam; + + // jeśli pompa chodzi to rejestruje jako zwierciadło dynamiczne + if (getPumpStatusWork(4)==1) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=205,DRD_VALUE='".round($HDparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + // jeśli pompa jest wyłączona to rejestruje jako zwierciadło statyczne + else + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=210,DRD_VALUE='".round($HDparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['HD']=$HDparam; + + } + //Q + else if (strstr($outSMSdata,"Q") && getPumpStatusWork(4)==1) + { + $oQparam = substr($outSMSdata, 2); + if ($oQparam>8) + { + $oQparam = $oQparam * 0.1 * 60; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=200,DRD_VALUE='".round($oQparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['Q']=$oQparam; + + } + } + //PE + else if (strstr($outSMSdata,"PE") && getPumpStatusWork(4)==1) + { + $oPEparam = substr($outSMSdata, 3); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=260,DRD_VALUE='".round($oPEparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['PE']=$oPEparam; + } + //U + else if (strstr($outSMSdata,"USR")) + { + $oUSRparam = substr($outSMSdata, 4); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=275,DRD_VALUE='".round($oUSRparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['U']=$oUSRparam; + } + //I + else if (strstr($outSMSdata,"ISR") && getPumpStatusWork(4)==1) + { + $oISRparam = substr($outSMSdata, 4); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=270,DRD_VALUE='".round($oISRparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['I']=$oISRparam; + } + //MG + else if (strstr($outSMSdata,"MG")) + { + $oMGparam = substr($outSMSdata, 3); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=290,DRD_VALUE='".round($oMGparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['WT']=$oMGparam; + } + //$oCOSparam + else if (strstr($outSMSdata,"COS")) + { + $oCOSparam = substr($outSMSdata, 4); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=280,DRD_VALUE='".round($oCOSparam,2)."',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE='$smsDATE'"); + + $wellS7ParamsAsArray['COS_FI']=$oCOSparam; + } + //DIA + else if (strstr($outSMSdata,"DIA")) + { + $oDIAparam = substr($outSMSdata, 4); + + $wellS7ParamsAsArray['DIA']=$oDIAparam; + } + + // Analizuje wartość prądu - jeśli mniejszy od 1A - oznacza, że pompa nie pracuje + if (strstr($outSMSdata,"ISR")) + { + $isRun = substr($outSMSdata, 4); + if ($isRun>1 && getPumpStatusWork(4)==0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE=now()"); + else if ($isRun<=1 && getPumpStatusWork(4)==1) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=4,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_AUDIT_USR='SMS',DRD_AUDIT_DATE=now()"); + } + } + +//zapis do dedykowanej tabeli + //zapisuje dane do tabeli [seg_well_working_params] + // ==================================================== + if (getPumpStatusWork(4)==1) + mysql_query("INSERT INTO seg_well_working_params SET WWP_DRS_ID=4,WWP_PB=".$wellS7ParamsAsArray['PB'].",WWP_P1=".$wellS7ParamsAsArray['P1'].",WWP_P2=".$wellS7ParamsAsArray['P2'].",WWP_PP=".$wellS7ParamsAsArray['PP'].",WWP_HH=".$wellS7ParamsAsArray['HH'].",WWP_HD=".$wellS7ParamsAsArray['HD'].",WWP_Q=".$wellS7ParamsAsArray['Q'].",WWP_I=".$wellS7ParamsAsArray['I'].",WWP_U=".$wellS7ParamsAsArray['U'].",WWP_PE=".$wellS7ParamsAsArray['PE'].",WWP_COS_FI=".$wellS7ParamsAsArray['COS_FI'].",WWP_DIA='".$wellS7ParamsAsArray['DIA']."',WWP_AUDIT_CD='".$wellS7ParamsAsArray['date']."'"); + // ==================================================== + + + + } + // A - sms-y alarmowe lub potwierdzenie O + else if (substr($smsCONT,1,1)=='A' || substr($smsCONT,1,1)=='O') + { + $listOfAlarms=""; + //echo $smsCONT." \n"; + $inSMSdata = explode('#',$smsCONT); + foreach ($inSMSdata as $outSMSdata) + { + $outSMSdata=str_replace(' ','',$outSMSdata); + + // BPZ - brak potwierdzenia załączenia pompy + if (strstr($outSMSdata,"BPZ") && substr($smsCONT,1,1)=='A') + { + if (substr($outSMSdata, 4)==1) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "ALARM! [02]", $komPOMPbpz); + if (strlen($basePhone)>8) sendSMSAlert($basePhone, "ALARM! ".$komPOMPbpz); + $listOfAlarms .="BPZ#"; + + // dla Tomka elektryka + sendSMSAlert("606733938", "ALARM! Brak potwierdzenie zalaczenia pompy na Ujeciu Wyszynskiego. Alarm wymaga lokalnego potwierdzenia A/R i odwolania R/A."); + } + } + // BPW - brak potwierdzenia wyłączenia pompy + else if (strstr($outSMSdata,"BPW") && substr($smsCONT,1,1)=='A') + { + if (substr($outSMSdata, 4)==1) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "ALARM! [03]", $komPOMPbpw); + if (strlen($basePhone)>8) sendSMSAlert($basePhone, "ALARM! ".$komPOMPbpw); + $listOfAlarms .="BPW#"; + } + } + // MAN - praca ręczna + else if (strstr($outSMSdata,"MAN") && substr($smsCONT,1,1)=='A') + { + if (substr($outSMSdata, 4)==1) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "ALARM! [04]", $komPOMPmanual); + $listOfAlarms .="MAN#"; + } + } + // UPS - brak zasilania + else if (strstr($outSMSdata,"UPS") && substr($smsCONT,1,1)=='A') + { + if (substr($outSMSdata, 4)==1) + { + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "ALARM! [05]", $komPOMPups); + if (strlen($basePhone)>8) sendSMSAlert($basePhone, "ALARM! ".$komPOMPups); + $listOfAlarms .="UPS#"; + + // dla Tomka elektryka + sendSMSAlert("606733938", "ALARM! Zanik napiecia na Ujeciu Wyszynskiego. Alarm wymaga lokalnego potwierdzenia A/R i odwolania R/A."); + } + } + } + //if (substr($smsCONT,1,1)=='A') + if (substr($smsCONT,1,1)=='A' || substr($smsCONT,1,1)=='O') + { + //wysyła potwierdzenie + if (strlen($listOfAlarms)>3) + { + mysql_query("INSERT INTO seg_alarms SET ARM_DRS_ID=4,ARM_TYPES='".$listOfAlarms."',ARM_AUDIT_CU='SMS',ARM_AUDIT_CD='".$smsDATE."'"); + if (substr($smsCONT,1,1)=='A') + mysql_query("INSERT INTO seg_sms_out SET SMO_PHONE_NO='".$sterNO."',SMO_MESSAGE='#A#".$baseNO."#S7#?',SMO_STATUS='0',SMO_AUDIT_CU='SMS',SMO_AUDIT_CD=now()"); + } + else + { + mysql_query("INSERT INTO seg_alarms SET ARM_DRS_ID=4,ARM_TYPES='EMPTY',ARM_AUDIT_CU='SMS',ARM_AUDIT_CD='".$smsDATE."'"); + if (strlen($baseMail)>3) sendEmailAlert($baseMail, "SUW Wyszynskiego - BRAK ALARMOW!", "SUW Wyszynskiego - wszystkie alarmy zostaly odwolane. Praca w trybie automatycznym."); + } + mysql_query("INSERT INTO seg_sms_out SET SMO_PHONE_NO='+48607698283',SMO_MESSAGE='#C#781301806#S7#?',SMO_STATUS='0',SMO_AUDIT_CU='ALARM',SMO_AUDIT_CD=now()"); + } + } + } + + } + + + // Siła sygnału dla sterowanika SIEMENS - [RSSI] + else if (strstr($smsCONT,'RSSI')) + { + $param = explode('RSSI', str_replace("OK","",$smsCONT)); + $inParam = str_replace(" ","",$param[1]); $inParam = str_replace(":","",$inParam); + if (strstr($param[0],"RUN")) + { + mysql_query("INSERT INTO seg_rss_signal_values SET RSS_DRS_ID=4,RSS_VALUE='".$inParam."',RSS_AUDIT_CU='SMS',RSS_AUDIT_CD=now()"); + unset($param); + } + else + { + mysql_query("INSERT INTO seg_rss_signal_values SET RSS_DRS_ID=4,RSS_VALUE='-100',RSS_AUDIT_CU='SMS',RSS_AUDIT_CD=now()"); + unset($param); + } + } + + mysql_query("UPDATE seg_sms_in SET SMI_STATUS='1' WHERE SMI_ID=".$smsID); + } + + + + mysql_close($con); + sleep(1); + $min = (int) date("i"); + +} + + + + +?> diff --git a/soap.php b/soap.php new file mode 100644 index 0000000..5c0ef16 --- /dev/null +++ b/soap.php @@ -0,0 +1,234 @@ +<?php + +class SyndisConnector { + private $client; + + private function objectToArray($d) { + if(is_object($d)) { + $d = get_object_vars($d); + } + if(is_array($d)) { + return array_map(__METHOD__, $d); // recursive + } else { + return $d; + } + } + + public function __construct($url){ + if(!isset($url) || empty($url)) throw new Exception ("Cannot create SYNDISconnector without provided url"); + $this->client = new SoapClient($url, array('trace' => 1, + 'cache_wsdl' => WSDL_CACHE_NONE) + ); + } + + public function __debug(){ + echo "Request:\n" . $this->client->__getLastRequest() . "\n"; + echo "Response:\n" . $this->client->__getLastResponse() . "\n"; + } + + public function __setLocation($location){ + $this->client->__setLocation($location); + } + + + public function __getFunctions(){ + var_dump($this->client->__getFunctions()); + } + + /** + * + * + */ + public function GetWellData($id) { + if(@function_exists($this->client->GetWellData)) throw new Exception("Provided endpoint does not contain GetWellData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetWellData(array('id' => $id)); + } + + + + /** + * + * + */ + public function GetWellDataAsArray($id) { + return $this->objectToArray($this->GetWellData($id)); + } + + + + /** + * + * + */ + public function GetWellsData($ids = array()) { + if(@function_exists($this->client->GetWellsData)) throw new Exception("Provided endpoint does not contain GetWellsData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetWellsData($idsArray); + } + + + + /** + * + * + */ + public function GetWellsDataAsArray($ids) { + return $this->objectToArray($this->GetWellsData($ids)); + } + + + + /** + * + * + */ + public function GetPiezometerData($id){ + if(@function_exists($this->client->GetPiezometerData)) throw new Exception("Provided endpoint does not contain GetPiezometerData function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPiezometerData(array('id' => $id)); + } + + + + /** + * + * + */ + public function GetPiezometerDataAsArray($id) { + return $this->objectToArray($this->GetPiezometerData($id)); + } + + + + /** + * + * + */ + public function GetPiezometersData($ids){ + if(@function_exists($this->client->GetPiezometersData)) throw new Exception("Provided endpoint does not contain GetPiezometersData function. Please contact with SYNDIS support"); + if(count($ids) < 1) throw new Exception("ids param cannot be empty array"); + + $idsArray = array(); + + foreach($ids as $id){ + $idsArray[] = array('id' => $id); + } + + return $this->client->GetPiezometersData($idsArray); + } + + + + /** + * + * + */ + public function GetPiezometersDataAsArray($ids) { + return $this->objectToArray($this->GetPiezometersData($ids)); + } + + + /** + * + * + */ + public function GetUserInfo($login){ + if(@function_exists($this->client->GetUserInfo)) throw new Exception("Provided endpoint does not contain GetUserInfo function. Please contact with SYNDIS support"); + if(!isset($login) || empty($login)) throw new Exception("login param cannot be null or empty"); + return $this->client->GetUserInfo(array('login' => $login)); + } + + + + /** + * + * + */ + public function GetUserInfoAsArray($ids) { + return $this->objectToArray($this->GetUserInfo($ids)); + } + + + /** + * + * + */ + public function GetUserInfos($logins){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + if(count($logins) < 1) throw new Exception("logins param cannot be empty array"); + + $idsArray = array(); + + foreach($logins as $login){ + $idsArray[] = array('login' => $login); + } + + return $this->client->GetUserInfos($idsArray); + } + + + + /** + * + * + */ + public function GetUserInfosAsArray($ids) { + return $this->objectToArray($this->GetUserInfos($ids)); + } + + + /** + * + * + */ + public function GetFullUserInfos(){ + if(@function_exists($this->client->GetUserInfos)) throw new Exception("Provided endpoint does not contain GetUserInfos function. Please contact with SYNDIS support"); + return $this->client->GetUserInfos(); + } + + + /** + * + * + */ + public function GetFullUserInfosAsArray() { + return $this->objectToArray($this->GetFullUserInfos()); + } + + + + // informacja na temat pomiaru sygnałów + public function GetPumpSwitchHistory($id,$dt) { + if(@function_exists($this->client->GetPumpSwitchHistory)) throw new Exception("Provided endpoint does not contain GetPumpSwitchHistory function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPumpSwitchHistory(array('well' => array('id'=>$id),'date'=>$dt)); + } + + // informacja na temat pomiaru sygnałów wraz z powodem wyłączenia + public function GetPumpSwitchAndReasonsHistory($id,$dt) { + if(@function_exists($this->client->GetPumpSwitchAndReasonsHistory)) throw new Exception("Provided endpoint does not contain GetPumpSwitchAndReasonsHistory function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetPumpSwitchAndReasonsHistory(array('well' => array('id'=>$id),'filtered'=>1,'date'=>$dt)); + } + + // pobiera tablicę wyników dla obiektu [studnia, piezometr] w zakresie dat [od, do] + public function GetMeasurementHistory($id,$typ_meas,$df,$dt) { + if(@function_exists($this->client->GetMeasurementHistory)) throw new Exception("Provided endpoint does not contain GetMeasurementHistory function. Please contact with SYNDIS support"); + if(!isset($id) || empty($id)) throw new Exception("id param cannot be null or empty"); + return $this->client->GetMeasurementHistory(array('object' => array('id'=>$id),'type'=>$typ_meas,'dateFrom'=>$df,'dateTo'=>$dt)); + } + + + + +} + +?> diff --git a/soap_aaa.php b/soap_aaa.php new file mode 100644 index 0000000..13d0863 --- /dev/null +++ b/soap_aaa.php @@ -0,0 +1,152 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function time_to_int($inParam) +{ + unset($outParam); + $outParam = (float) str_replace(array(' ','-',':'), array('','',''), $inParam); + + return $outParam; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + +function split_to_array($inArray) +{ + unset($outArray); unset($newArray); + $newArray = objectToArray($inArray); + + if (count($newArray['probes'])>0 && count($newArray['probes'])<=4) + { + unset($tmpStat); $tmpStat = (int) $newArray['probes']['value']; + if ($tmpStat==1) $tmpStat="ON"; else $tmpStat="OFF"; + + $outArray[] = array( + 'value' => $tmpStat, + 'date' => convertData($newArray['probes']['date']), + 'reason' => $newArray['probes']['reason'] + ); + } + elseif (count($newArray['probes'])>4) + { + $tmpArray = $newArray['probes']; + foreach ($tmpArray as $tb) + { + unset($tmpStat); $tmpStat = (int) $tb['value']; + if ($tmpStat==1) $tmpStat="ON"; else $tmpStat="OFF"; + + $outArray[] = array( + 'value' => $tmpStat, + 'date' => convertData($tb['date']), + 'reason' => $tb['reason'] + ); + } + } + else + { + $outArray = null; + } + + return $outArray; +} + + + + +// pobieramy tablice studni +$ile_zmian=0; +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +$wl = $cl->GetWellsDataAsArray($well_array); + +//pobiera informacje o statusie pompy (załączniku - czy się zmianił oraz o łącznoiści) +// ============================================================================================ // +unset($hisOnOffArray); +//$hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory('S40','2019-01-19T08:48:43Z')); +$hisOnOffArray = split_to_array($cl->GetPumpSwitchAndReasonsHistory('S40','2019-01-19T08:48:43Z')); +// ============================================================================================ // +//print_r($new_array); +echo'<br/>'; +echo 'Ile: '.count($hisOnOffArray); +echo'<br/>'; +print_r($hisOnOffArray); +echo'<br/>'; + + +/* +unset($hisOnOffArray); +$hisOnOffArray = $cl->GetPumpSwitchAndReasonsHistory('S40','2018-01-19T08:48:43Z'); +//print_r($hisOnOffArray); +echo'<br/>'; +$array = get_object_vars($hisOnOffArray); +echo'Ile: '.count($array); +print_r($array); +echo'<br/>'; +$new_array = get_object_vars($array['probes']); +echo'Ile: '.count($new_array); +echo'<br/>'; +print_r($new_array); +echo'<br/>'; +*/ + + + +mysql_close($polacz); + +echo 'Zmieniono <b>'.$ile_zmian.'</b> stanów załączenia/wyłączenia dla studni.<br/><br/>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_getonoffinfo_day.php b/soap_getonoffinfo_day.php new file mode 100644 index 0000000..c868413 --- /dev/null +++ b/soap_getonoffinfo_day.php @@ -0,0 +1,176 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<meta http-equiv="Refresh" content="1" /> + +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; + +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertDataUTC2Cur($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + return $res; +} + +function convertDataCur2UTC($insertDate) +{ + unset($res); + $dt = new DateTime($insertDate); + $dt->setTimezone(new DateTimeZone('UTC')); + $res = $dt->format('Y-m-d').'T'.$dt->format('H:i:s').'Z'; + + return $res; +} + + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + +/* +echo convertDataUTC2Cur('2017-01-31T07:52:01Z'); +echo"<br>"; +echo convertDataCur2UTC('2017-01-31 07:52:01'); +echo"<br>"; +echo"<br>"; +*/ + +unset($recArray); +$recArray = sqlGetResAsArray("select * from rep_onoff_proccessing where W_STATUS=0 limit 1"); + + +$scriptDate = '2014-01-01 12:00:00'; +/* +echo $scriptDate; +echo"<br>"; +echo convertDataCur2UTC($scriptDate); +echo"<br>"; +*/ + + +if (!empty($recArray[0]['W_NAME'])) +{ + unset($wellArray); + $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($recArray[0]['W_NAME'],convertDataCur2UTC($scriptDate))); + $devID = sqlStringValue("select DRS_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID in (18,19) and WLL_NAME='".$recArray[0]['W_NAME']."'", "DRS_ID"); + + echo"Studnia: ".$recArray[0]['W_NAME']."<br/>"; + + if (count($wellArray['probes'])>0 && $devID>0) + { + // ====================================================================================================== + // sprawdza ile jest pomiarów załącz/wyłącz dla danego obiektu w bazie MySQL: dla danej daty większej od + // ====================================================================================================== + unset($ileSQL); + $ileSQL=0; + $ileSQL = sqlValue(" + select count(*) from ( + select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$scriptDate."' + union + select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID." and DRD_AUDIT_DATE>='".$scriptDate."' + ) tb + "); + + echo "Ilość w MySQL: ". $ileSQL; + echo"<br>"; + // ====================================================================================================== + + // ====================================================================================================== + // sprawdza ile jest pomiarów załącz/wyłącz dla danego obiektu w SOAP SYNDIS: dla danej daty większej od + // ====================================================================================================== + unset($ileSYNDIS); + $ileSYNDIS=0; + $ileSYNDIS = count($wellArray['probes']); + echo "Ilość w SYNDIS: ".$ileSYNDIS; + echo"<br>"; + echo"<br>"; + // ====================================================================================================== + + // jeśli jest różnica + if ($ileSYNDIS != $ileSQL) + // ====================================================================================================== + { + mysql_query("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + + $zalacz = 0; + $wylacz = 0; + + for ($i=0; $i<count($wellArray['probes']); $i++) + { + // jeśli załącz + if ($wellArray['probes'][$i]['value'] == 1) + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertDataUTC2Cur($wellArray['probes'][$i]['date'])."'"); + //echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertDataUTC2Cur($wellArray['probes'][$i]['date'])."'"); + //echo"<br>"; + $zalacz++; + } + + // jeśli wyłącz + elseif ($wellArray['probes'][$i]['value'] == 0) + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertDataUTC2Cur($wellArray['probes'][$i]['date'])."'"); + //echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertDataUTC2Cur($wellArray['probes'][$i]['date'])."'"); + //echo"<br>"; + $wylacz++; + } + } + + echo"Dodano <b>".$zalacz."</b> wpisów o załączeniu."; + echo"<br>"; + echo"Dodano <b>".$wylacz."</b> wpisów o wyłączeniu."; + echo"<br>"; + echo"<br>"; + + } + // ====================================================================================================== + + } +} + + +mysql_query("UPDATE rep_onoff_proccessing SET W_STATUS=1 WHERE W_ID=".$recArray[0]['W_ID']); + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_importobjects.php b/soap_importobjects.php new file mode 100644 index 0000000..df8cca5 --- /dev/null +++ b/soap_importobjects.php @@ -0,0 +1,119 @@ +<?php + error_reporting(E_ALL); + echo 'starting ...<br>'; + require_once("soap.php"); + $cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer + //$cl->__setLocation('http://172.20.43.10:3615/'); + $cl->__setLocation('http://172.21.11.101:3615/'); + echo 'connected ...<br>'; + + require_once("func.php"); + require_once("dbaccess.php"); + $polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); + mysql_select_db($db_name); + mysql_query("SET NAMES utf8"); + mysql_query("SET CHARACTER_SET utf8_general_ci"); + + mysql_query("truncate table rep_soap_objects_import"); + +$licz=0; +// pobieramy tablice studni +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_well_pump_eng_rel left join seg_wells on RWL_WLL_ID=WLL_ID"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + if ($wl["wells"][$i]["currentL1"]["flag"]<>"NOTFOUND") + { + // jeśli pompa pracuje + if ($wl["wells"][$i]["pumpOnOff"]["value"]==1 && $wl["wells"][$i]["pumpEfficiency"]["value"]>0 && $wl["wells"][$i]["currentL1"]["value"]>0) + { +// echo "Pompa pracuje dla ".$wl["wells"][$i]["well"]["id"]."<br/>"; + mysql_query("INSERT INTO rep_soap_objects_import SET SOI_OBJECT='WELL',SOI_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + $licz++; + } + //dane niewiarygodne + else if ($wl["wells"][$i]["pumpOnOff"]["value"]==1 && $wl["wells"][$i]["pumpOnOff"]["flag"]=="NOTREALIABLE") + { +// echo "Dane niewiarygodne dla ".$wl["wells"][$i]["well"]["id"]."<br/>"; + mysql_query("INSERT INTO rep_soap_objects_import SET SOI_OBJECT='WELL',SOI_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + $licz++; + } + //błędne dane + else if ($wl["wells"][$i]["pumpOnOff"]["value"]==1 && $wl["wells"][$i]["pumpEfficiency"]["value"]==0) + { +// echo "Błędne dane dla ".$wl["wells"][$i]["well"]["id"]."<br/>"; + $error_data=0; + } + // pompa niepracuje + else + { +// echo "Pompa niepracuje dla ".$wl["wells"][$i]["well"]["id"]."<br/>"; + mysql_query("INSERT INTO rep_soap_objects_import SET SOI_OBJECT='WELL',SOI_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + $licz++; + } + } +} + + + + + + +echo"Zaczytano $licz studni"; +echo"</br>"; + +$licz=0; +$wynik = mysql_query("select SRP_NAME from seg_reservoirs_piezometers where SRP_TYPE_DIC_ID=(select DIC_ID from sys_dictionaries where DIC_TYPE='DRS_DEV_TYPE' and DIC_NAME='PIEZOMETER')"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $pName=$r["SRP_NAME"]; + $pz = $cl->GetPiezometerDataAsArray($pName); + + if ($pz["staticWaterTable"]["flag"]<>"NOTFOUND") + { + if ($pz["staticWaterTable"]["value"]>0) + { + mysql_query("INSERT INTO rep_soap_objects_import SET SOI_OBJECT='PIEZO',SOI_NAME='".$pz["piezometer"]["id"]."'"); + $licz++; + } + } +} +echo"Zaczytano $licz piezometrów"; +echo"</br>"; + + //czyści niepełne rekordy + //mysql_query("DROP TABLE IF EXISTS z_tmp"); + //$minRecords = sqlValue("select count(1) from rep_soap_objects_import where SOI_OBJECT='WELL'"); + //mysql_query("create table z_tmp select DRD_AUDIT_DATE ABC from seg_dev_resources_det where DRD_AUDIT_USR='SYNDIS' and DRD_AUDIT_DATE>'".date('Y-m-d')."' group by DRD_AUDIT_DATE HAVING count(DRD_AUDIT_DATE)<".$minRecords); + //mysql_query("delete from seg_dev_resources_det where DRD_AUDIT_DATE in (select ABC from z_tmp)"); + //mysql_query("drop table z_tmp"); + + mysql_close($polacz); + + echo 'finish processing ...<br>'; + + /** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + +?> \ No newline at end of file diff --git a/soap_importpiezo.php b/soap_importpiezo.php new file mode 100644 index 0000000..0f5b994 --- /dev/null +++ b/soap_importpiezo.php @@ -0,0 +1,107 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); + +ini_set('soap.wsdl_cache_enabled',0); +ini_set('soap.wsdl_cache_ttl',0); +$cl = new SyndisConnector("http://172.22.64.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.22.64.101:3615/'); + + +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + + +function cdt($inDate) +{ + unset($out); + $out = (float) str_replace(array('-',' ',':'), array('','',''), $inDate); + return $out; +} + + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +mysql_query("truncate table rep_soap_syndis_piezometers"); + +unset($piezo_array); +$wynik = mysql_query("select SRP_NAME from seg_reservoirs_piezometers,seg_dev_resources where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601 and DRS_STATUS_DIC_ID=3 and SRP_MCF_ID=1500"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $piezo_array[] = $r["SRP_NAME"]; +} + +$pz = $cl->GetPiezometersDataAsArray($piezo_array); +//Array ( [piezometers] => Array ( [0] => Array ( [piezometer] => Array ( [id] => 19S-1P III-1 ) [staticWaterTable] => Array ( [value] => 0 [date] => 2016-09-17T11:47:29Z [flag] => NOTREALIABLE ) ) +//Array ( [piezometer] => Array ( [id] => 19S-1P III-1 ) [staticWaterTable] => Array ( [value] => 0 [date] => 2016-09-17T11:47:29Z [flag] => NOTREALIABLE ) ) +//Array ( [piezometer] => Array ( [id] => 19S-1P III-2 ) [staticWaterTable] => Array ( [value] => 0 [date] => 2016-09-17T11:45:40Z [flag] => NOTREALIABLE ) ) +//Array ( [piezometer] => Array ( [id] => 1WP-PW ) [staticWaterTable] => Array ( [value] => 0 [date] => 2016-09-17T11:46:05Z [flag] => NOTREALIABLE ) ) +unset($actMin); +$actMin = (int) date("i"); + +echo cdt(date('Y-m-d H:i:s'))."<br/>"; + +for($i=0; $i<count($pz["piezometers"]); $i++) +{ + mysql_query("INSERT INTO rep_soap_syndis_piezometers SET SUP_OBJECT_NAME='".$pz["piezometers"][$i]['piezometer']['id']."',SUP_ID_HST=210,SUP_VAL_HST=".$pz["piezometers"][$i]['staticWaterTable']['value'].",SUP_FLG_HST='".$pz["piezometers"][$i]['staticWaterTable']['flag']."',SUP_DATE_HST='".convertData($pz["piezometers"][$i]['staticWaterTable']['date'])."',SUP_AUDIT_CD=now();"); + + unset($devID); + $devID = sqlStringValue("select DRS_ID from seg_reservoirs_piezometers,seg_dev_resources where DRS_DEV_ID=SRP_ID and DRS_DEV_TYPE=601 and DRS_STATUS_DIC_ID=3 and SRP_NAME='".$pz["piezometers"][$i]['piezometer']['id']."'", "DRS_ID"); + + unset($lastMrzDateTime); + $lastMrzDateTime = sqlStringValue("select getLastMeasureDate(210, ".$devID.") MT", "MT"); + + + if ($devID>0 && getFloatValue($pz["piezometers"][$i]['staticWaterTable']['value'])>0 && cdt(convertData($pz["piezometers"][$i]['staticWaterTable']['date'])) > cdt($lastMrzDateTime) && $actMin<6) + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=210,DRD_VALUE='".getFloatValue($pz["piezometers"][$i]['staticWaterTable']['value'])."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($pz["piezometers"][$i]['staticWaterTable']['date'])."'"); + //echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=210,DRD_VALUE='".getFloatValue($pz["piezometers"][$i]['staticWaterTable']['value'])."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($pz["piezometers"][$i]['staticWaterTable']['date'])."'"); + //echo"<br/>"; + } + + +} + +echo"Wczytano ".count($pz["piezometers"])." piezometrów<br/>"; + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_importusers.php b/soap_importusers.php new file mode 100644 index 0000000..952d027 --- /dev/null +++ b/soap_importusers.php @@ -0,0 +1,279 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>'; + + require_once("func.php"); + require_once("dbaccess.php"); + $polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); + mysql_select_db($db_name); + mysql_query("SET NAMES utf8"); + mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + + print_r($cl->GetUserInfoAsArray('piecyk')); + $usrArr = $cl->GetFullUserInfosAsArray(); + + //GetUserInfo + + //print_r($usrArr); + //echo"</br></br></br>"; + + echo"Liczba userów: ". count($usrArr["users"]); + echo"</br></br></br>"; + + + + + +for($i=0; $i<count($usrArr["users"]); $i++) +{ + echo"User: ".$usrArr["users"][$i]["login"]."</br>"; + + $UserId=0; + + $UserId = sqlStringValue("select USR_ID from sys_users where USR_USERNAME='".$usrArr["users"][$i]["login"]."'","USR_ID"); + + // Sprawdz, czy istnieje użytkownik + if($UserId>0) + { + echo "Istnieje w bazie !<br>"; + //mysql_query("DELETE FROM sys_user_profiles WHERE SUP_USR_ID=".$UserId); + + if ($usrArr["users"][$i]["isActive"]==true || $usrArr["users"][$i]["isActive"]==1) + { + mysql_query("UPDATE sys_users SET USR_FIRST_NAME='".$usrArr["users"][$i]["fullName"]."',USR_STATUS='1',USR_AUDIT_CU='soap',USR_AUDIT_CD=now() WHERE USR_ID=".$UserId); + + // Przypisuje profile + // ============================================================================================== + // jeśli administrator + if ($usrArr["users"][$i]["isAdmin"]==true || $usrArr["users"][$i]["isAdmin"]==1) + { + echo "User typu Admin </br>"; + //mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=1"); + //mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=3"); + } + + // jeśli prawa do edycji - operator + else if ($usrArr["users"][$i]["isEditForms"]==true || $usrArr["users"][$i]["isEditForms"]==1) + { + echo "User typu Operator </br>"; + //mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=3"); + } + + // prawa tylko do odczytu + else + { + echo "User typu Tylko do odczytu </br>"; + //mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=2"); + } + // ============================================================================================== + + + } + else + { + mysql_query("UPDATE sys_users SET USR_FIRST_NAME='".$usrArr["users"][$i]["fullName"]."',USR_LAST_NAME='zablokowany',USR_STATUS='0',USR_AUDIT_CU='soap',USR_AUDIT_CD=now() WHERE USR_ID=".$UserId); + } + + echo"<br/>"; + + } + else + { + echo "Nie istnieje w bazie - zakładam nowego!<br>"; + if ($usrArr["users"][$i]["isActive"]==true || $usrArr["users"][$i]["isActive"]==1) + { + //echo"INSERT INTO sys_users SET USR_USERNAME='".$usrArr["users"][$i]["login"]."',USR_PASSWORD=md5('".$usrArr["users"][$i]["login"].".123'),USR_FIRST_NAME='".$usrArr["users"][$i]["fullName"]."',USR_STATUS='1',USR_PRT_ID=1,USR_AUDIT_CU='soap',USR_AUDIT_CD=now() <br>"; + mysql_query("INSERT INTO sys_users SET USR_USERNAME='".$usrArr["users"][$i]["login"]."',USR_PASSWORD=md5('".$usrArr["users"][$i]["login"].".123'),USR_FIRST_NAME='".$usrArr["users"][$i]["fullName"]."',USR_STATUS='1',USR_PRT_ID=1,USR_AUDIT_CU='soap',USR_AUDIT_CD=now()"); + //echo "select max(USR_ID) from sys_users <br>"; + $UserId = sqlValue("select max(USR_ID) from sys_users"); + + + // Przypisuje profile + // ============================================================================================== + // jeśli administrator + if ($usrArr["users"][$i]["isAdmin"]==true || $usrArr["users"][$i]["isAdmin"]==1) + { + echo "User typu Admin </br>"; + //mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=1"); + mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=3"); + } + + // jeśli prawa do edycji - operator + else if ($usrArr["users"][$i]["isEditForms"]==true || $usrArr["users"][$i]["isEditForms"]==1) + { + echo "User typu Operator </br>"; + mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=3"); + } + + // prawa tylko do odczytu + else + { + echo "User typu Tylko do odczytu </br>"; + mysql_query("INSERT INTO sys_user_profiles SET SUP_USR_ID=".$UserId.",SUP_PRO_ID=2"); + } + // ============================================================================================== + } + } + + //echo "Wynik:</br>"; + //echo $usrArr["users"][$i]["login"] . "</br>"; + //echo $usrArr["users"][$i]["fullName"] . "</br>"; + //echo $usrArr["users"][$i]["isActive"] . "</br>"; + + //echo $usrArr["users"][$i]["isEditReports"] . "</br>"; + //echo $usrArr["users"][$i]["isConfig"] . "</br>"; + //echo $usrArr["users"][$i]["isChangeValues"] . "</br>"; +// echo "Region". $usrArr["users"][$i]["regions"] . "</br>"; + +// echo "Region[0]". $usrArr["users"][$i]["regions"][0] . "</br>"; + + + $reg0 = $usrArr["users"][$i]["regions"][0]; + $reg1 = $usrArr["users"][$i]["regions"][1]; + $reg2 = $usrArr["users"][$i]["regions"][2]; + $reg3 = $usrArr["users"][$i]["regions"][3]; + + mysql_query("DELETE FROM sys_users_regions WHERE URG_USR_ID=".$UserId); + + // dla pojedynczego prawa do regionów + if ($usrArr["users"][$i]["regions"]>0) + { + if ($usrArr["users"][$i]["regions"]==1 || $usrArr["users"][$i]["regions"]==2) + { + //echo "Dostęp do O/Szczerców</br>"; + mysql_query("INSERT INTO sys_users_regions SET URG_ID=2,URG_USR_ID=".$UserId.",URG_DESC='P/Szczerców'"); + } + else if ($usrArr["users"][$i]["regions"]==3) + { + //echo "Dostęp do O/Dębina</br>"; + mysql_query("INSERT INTO sys_users_regions SET URG_ID=3,URG_USR_ID=".$UserId.",URG_DESC='Dębina'"); + } + else if ($usrArr["users"][$i]["regions"]==4) + { + //echo "Dostęp do O/Bełchatów</br>"; + mysql_query("INSERT INTO sys_users_regions SET URG_ID=4,URG_USR_ID=".$UserId.",URG_DESC='P/Bełchatów'"); + } + } + + //dla dostępu do kilku regionów + if($reg0>0 || $reg1>0 || $reg2>0 || $reg3>0) + { + if ($reg0==1 || $reg0==2 || $reg1==1 || $reg1==2 || $reg2==1 || $reg2==2 || $reg3==1 || $reg3==2) + { + //echo "Dostęp do O/Szczerców</br>"; + mysql_query("INSERT INTO sys_users_regions SET URG_ID=2,URG_USR_ID=".$UserId.",URG_DESC='P/Szczerców'"); + } + + if ($reg0==3 || $reg1==3 || $reg2==3 || $reg3==3) + { + //echo "Dostęp do O/Dębina</br>"; + mysql_query("INSERT INTO sys_users_regions SET URG_ID=3,URG_USR_ID=".$UserId.",URG_DESC='Dębina'"); + } + + if ($reg0==4 || $reg1==4 || $reg2==4 || $reg3==4) + { + //echo "Dostęp do O/Bełchatów</br>"; + mysql_query("INSERT INTO sys_users_regions SET URG_ID=4,URG_USR_ID=".$UserId.",URG_DESC='P/Bełchatów'"); + } + + } + + +/* + + + + + + + + // Dostęp do Szczerców + if ($usrArr["users"][$i]["regions"][0]==true || $usrArr["users"][$i]["regions"][0]==1 || $usrArr["users"][$i]["regions"][1]==true || $usrArr["users"][$i]["regions"][1]==1) + { + echo "Dostęp do O/Szczerców</br>"; + //mysql_query("INSERT INTO sys_users_regions SET URG_ID=2,URG_USR_ID=".$UserId.",URG_DESC='P/Szczerców'"); + } + + // Dostęp do Dębina + if ($usrArr["users"][$i]["regions"][2]==true || $usrArr["users"][$i]["regions"][2]==1) + { + echo "Dostęp do O/Dębina</br>"; + //mysql_query("INSERT INTO sys_users_regions SET URG_ID=3,URG_USR_ID=".$UserId.",URG_DESC='Dębina'"); + } + + // Dostęp do Bełchatów + if ($usrArr["users"][$i]["regions"][3]==true || $usrArr["users"][$i]["regions"][3]==1) + { + echo "Dostęp do O/Bełchatów</br>"; + //mysql_query("INSERT INTO sys_users_regions SET URG_ID=4,URG_USR_ID=".$UserId.",URG_DESC='P/Bełchatów'"); + } +*/ + + +} + +/* +echo "Wynik:</br>"; +echo $usrArr["users"][0]["login"] . "</br>"; +echo $usrArr["users"][0]["fullName"] . "</br>"; +echo $usrArr["users"][0]["isActive"] . "</br>"; +echo $usrArr["users"][0]["isAdmin"] . "</br>"; +echo $usrArr["users"][0]["isEditForms"] . "</br>"; +echo $usrArr["users"][0]["isEditReports"] . "</br>"; +echo $usrArr["users"][0]["isConfig"] . "</br>"; +echo $usrArr["users"][0]["isChangeValues"] . "</br>"; +echo $usrArr["users"][0]["regions"][0] . "</br>"; +echo $usrArr["users"][0]["regions"][1] . "</br>"; +echo $usrArr["users"][0]["regions"][2] . "</br>"; +echo $usrArr["users"][0]["regions"][3] . "</br>"; +*/ +/* + + <login>syndis</login> + <fullName>Użytkownik Syndis</fullName> + <isActive>true</isActive> + <isAdmin>false</isAdmin> + <isEditForms>false</isEditForms> + <isEditReports>false</isEditReports> + <isConfig>false</isConfig> + <isChangeValues>false</isChangeValues> + <regions>1</regions> + <regions>2</regions> + <regions>3</regions> + <regions>4</regions> +*/ + +echo"</br></br></br>"; + +mysql_close($polacz); + + echo 'finish processing ...<br>'; + + /** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + +?> \ No newline at end of file diff --git a/soap_importwells.php b/soap_importwells.php new file mode 100644 index 0000000..b544185 --- /dev/null +++ b/soap_importwells.php @@ -0,0 +1,381 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); + +ini_set('soap.wsdl_cache_enabled',0); +ini_set('soap.wsdl_cache_ttl',0); +$cl = new SyndisConnector("http://172.22.64.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.22.64.101:3615/'); + + +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + + + + +// pobieramy tablice studni +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +//print_r($cl->GetWellsDataAsArray(array('G52','G54'))); //Pobieranie danych dla wszystkich studni +$wl = $cl->GetWellsDataAsArray($well_array); +mysql_query("truncate table seg_dev_major_segap"); +mysql_query("truncate table rep_soap_syndis_quality_data"); +mysql_query("truncate table rep_soap_syndis_update5min_data"); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + //echo "Name: ". $wl["wells"][$i]["well"]["id"]."<br/>"; + + $devID=null; $wellID=null; $vpp=null; $vhh=null; + + // sprawdza, czy ma zapisać nowy rekord do bazy everyday + $isSaveRecords=false; + + $wynik_W = mysql_query("select DRS_ID,DRS_DEPARTMENT,WLL_ID,WLL_BARIERA,WLL_PP_SCOPE,WLL_HH_SCOPE,WLL_CAT_DIC_ID from seg_wells left join seg_dev_resources on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where WLL_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + if($wynik_W)while ($r_W = mysql_fetch_array($wynik_W)) + { + $devID = $r_W["DRS_ID"]; + $wellID = $r_W["WLL_ID"]; + $wellBar = $r_W["WLL_BARIERA"]; + $vpp=$r_W["WLL_PP_SCOPE"]; if ($vpp==0) $vpp=500; + $vhh=$r_W["WLL_HH_SCOPE"]; + $devDep = $r_W["DRS_DEPARTMENT"]; + $wellType = $r_W["WLL_CAT_DIC_ID"]; + } + + // 2018-01-06 obsługa w soap_of_while.php + /* + //sprawdza stan załączenia pompy + if (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='ON' && $wl["wells"][$i]["pumpOnOff"]["value"]==0 && $wl["wells"][$i]["pumpEfficiency"]["value"]<=0.016) + { + //2017-10-17 - dodanie parametru REASON [pumpOnOffReason]: $wl["wells"][$i]["pumpOnOffReason"]["value"] + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wl["wells"][$i]["pumpOnOffReason"]["value"]."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$wellID.",SLA_DRS_ID=".$devID.",SLA_NAME='".$wl["wells"][$i]["well"]["id"]."',SLA_WORK_STATUS='OFF',SLA_DATETIME='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',SLA_AUDIT_CD=now()"); + // ============================================================================================================================================================== + } + //sprawdza stan załączenia pompy + elseif (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")!='ON' && $wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."'"); + + // Dodaje do tabeli liczników - Łata dla syndis na liczenie czasów + mysql_query("INSERT INTO seg_wells_manual_work_syndis SET SLA_WLL_ID=".$wellID.",SLA_DRS_ID=".$devID.",SLA_NAME='".$wl["wells"][$i]["well"]["id"]."',SLA_WORK_STATUS='ON',SLA_DATETIME='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',SLA_AUDIT_CD=now()"); + // ============================================================================================================================================================== + } + */ + + + // sprawdza, czy nie ma błędnego statusu w historii wyłączników + // ============================================================================================================================================================== + unset($isNotrealiableSaved); + $isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null)"); + // ============================================================================================================================================================== + + + // sprawdza, czy pompa jest włączona i flaga o wyłączniku jest poprawna + if ($wl["wells"][$i]["pumpOnOff"]["value"]==1 && count($isNotrealiableSaved)==0) + { + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppValue = (float) ($ppValue - (($wl["wells"][$i]["barometricPressuremA"]["value"]*10)/98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + + unset($lpValue); + $lpValue = (float) sqlStringValue("select getLastValue(240,".$devID.") HHV", "HHV"); + $hhValue = (float) $lpValue - ($wl["wells"][$i]["dynamicWaterTable"]["value"]); + $hhFlag = $wl["wells"][$i]["dynamicWaterTable"]["flag"]; + // ============================================================================== + mysql_query(" + INSERT INTO rep_soap_syndis_quality_data SET + SQD_DRS_ID=".$devID.", + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_I=".$wl["wells"][$i]["currentL1"]["value"].", + SQD_FLG_I='".$wl["wells"][$i]["currentL1"]["flag"]."', + SQD_VAL_U=".$wl["wells"][$i]["voltageL12"]["value"].", + SQD_FLG_U='".$wl["wells"][$i]["voltageL12"]["flag"]."', + SQD_VAL_CF=".$wl["wells"][$i]["cos"]["value"].", + SQD_FLG_CF='".$wl["wells"][$i]["cos"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' + "); + // ============================================================================== + + + if ($devID>0) + { + $measureQuery = "INSERT INTO rep_soap_syndis_update5min_data SET "; + $measureQuery .= "SUD_DRS_ID=".$devID.",SUD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',SUD_OBJECT_TYPE=".$wellType.","; + + //prąd fazy L1 zasilania pompy + $measureQuery .= "SUD_ID_L1=270,SUD_VAL_L1=".$wl["wells"][$i]["currentL1"]["value"].",SUD_FLG_L1='".$wl["wells"][$i]["currentL1"]["flag"]."',SUD_DATE_L1='".convertData($wl["wells"][$i]["currentL1"]["date"])."',"; + //prąd fazy L2 zasilania pompy + $measureQuery .= "SUD_ID_L2=710,SUD_VAL_L2=".$wl["wells"][$i]["currentL2"]["value"].",SUD_FLG_L2='".$wl["wells"][$i]["currentL2"]["flag"]."',SUD_DATE_L2='".convertData($wl["wells"][$i]["currentL2"]["date"])."',"; + //prąd fazy L3 zasilania pompy + $measureQuery .= "SUD_ID_L3=711,SUD_VAL_L3=".$wl["wells"][$i]["currentL3"]["value"].",SUD_FLG_L3='".$wl["wells"][$i]["currentL3"]["flag"]."',SUD_DATE_L3='".convertData($wl["wells"][$i]["currentL3"]["date"])."',"; + //[voltageL12] => U L12 [V] - napięcie międzyfazowe L1-L2 + $measureQuery .= "SUD_ID_UL12=275,SUD_VAL_UL12=".$wl["wells"][$i]["voltageL12"]["value"].",SUD_FLG_UL12='".$wl["wells"][$i]["voltageL12"]["flag"]."',SUD_DATE_UL12='".convertData($wl["wells"][$i]["voltageL12"]["date"])."',"; + //[voltageL23] => U L23 [V] - napięcie międzyfazowe L2-L3 + $measureQuery .= "SUD_ID_UL23=712,SUD_VAL_UL23=".$wl["wells"][$i]["voltageL23"]["value"].",SUD_FLG_UL23='".$wl["wells"][$i]["voltageL23"]["flag"]."',SUD_DATE_UL23='".convertData($wl["wells"][$i]["voltageL23"]["date"])."',"; + //[throttlePosition] => Położenie przepustnicy [*] + if ($wellType==19) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=".$wl["wells"][$i]["throttlePosition"]["value"].",SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + { + $tmpDivP1P2=0; + $tmpDivP1P2 = (float) ($wl["wells"][$i]["pressureAfterThrottle"]["value"] / $wl["wells"][$i]["pressureBeforeThrottle"]["value"]); + if ($tmpDivP1P2>0.93) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=100,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=50,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + } + + //[waterTemperature] => Tw [*C] + $measureQuery .= "SUD_ID_TW=245,SUD_VAL_TW=".$wl["wells"][$i]["waterTemperature"]["value"].",SUD_FLG_TW='".$wl["wells"][$i]["waterTemperature"]["flag"]."',SUD_DATE_TW='".convertData($wl["wells"][$i]["waterTemperature"]["date"])."',"; + //[activePower] => P [kW] + $measureQuery .= "SUD_ID_PE=260,SUD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].",SUD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."',SUD_DATE_PE='".convertData($wl["wells"][$i]["activePower"]["date"])."',"; + //[cos] => cos(FI) + $measureQuery .= "SUD_ID_CFI=280,SUD_VAL_CFI=".$wl["wells"][$i]["cos"]["value"].",SUD_FLG_CFI='".$wl["wells"][$i]["cos"]["flag"]."',SUD_DATE_CFI='".convertData($wl["wells"][$i]["cos"]["date"])."',"; + //[activeEnergy] => E [kWh] + $measureQuery .= "SUD_ID_KWH=265,SUD_VAL_KWH=".$wl["wells"][$i]["activeEnergy"]["value"].",SUD_FLG_KWH='".$wl["wells"][$i]["activeEnergy"]["flag"]."',SUD_DATE_KWH='".convertData($wl["wells"][$i]["activeEnergy"]["date"])."',"; + //[pumpedWaterAmount] => V [m3] + $measureQuery .= "SUD_ID_VM3=230,SUD_VAL_VM3=".$wl["wells"][$i]["pumpedWaterAmount"]["value"].",SUD_FLG_VM3='".$wl["wells"][$i]["pumpedWaterAmount"]["flag"]."',SUD_DATE_VM3='".convertData($wl["wells"][$i]["pumpedWaterAmount"]["date"])."',"; + //[ClInPumpedWater] => ch [mg/l] + $measureQuery .= "SUD_ID_CHL=719,SUD_VAL_CHL=".$wl["wells"][$i]["ClInPumpedWater"]["value"].",SUD_FLG_CHL='".$wl["wells"][$i]["ClInPumpedWater"]["flag"]."',SUD_DATE_CHL='".convertData($wl["wells"][$i]["ClInPumpedWater"]["date"])."',"; + //[energyConsumption] => Jednostkowe zużycie energii [kWh/m3/m] + $measureQuery .= "SUD_ID_ECM=721,SUD_VAL_ECM=".$wl["wells"][$i]["energyConsumption"]["value"].",SUD_FLG_ECM='".$wl["wells"][$i]["energyConsumption"]["flag"]."',SUD_DATE_ECM='".convertData($wl["wells"][$i]["energyConsumption"]["date"])."',"; + //[pumpRuntime] => t [h] + $measureQuery .= "SUD_ID_RUTM=290,SUD_VAL_RUTM=".$wl["wells"][$i]["pumpRuntime"]["value"].",SUD_FLG_RUTM='".$wl["wells"][$i]["pumpRuntime"]["flag"]."',SUD_DATE_RUTM='".convertData($wl["wells"][$i]["pumpRuntime"]["date"])."',"; + //[dynamicWaterTable] => HD [m] + $measureQuery .= "SUD_ID_HD=205,SUD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].",SUD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."',SUD_DATE_HD='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + //[staticWaterTable] => HST [m] + $measureQuery .= "SUD_ID_HST=210,SUD_VAL_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",SUD_FLG_HST='".$wl["wells"][$i]["staticWaterTable"]["flag"]."',SUD_DATE_HST='".convertData($wl["wells"][$i]["staticWaterTable"]["date"])."',"; + //[pressureBeforeThrottle] => p1 [kPa] + $measureQuery .= "SUD_ID_P1=215,SUD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].",SUD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."',SUD_DATE_P1='".convertData($wl["wells"][$i]["pressureBeforeThrottle"]["date"])."',"; + //[pressureAfterThrottle] => p2 [kPa] + $measureQuery .= "SUD_ID_P2=220,SUD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].",SUD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."',SUD_DATE_P2='".convertData($wl["wells"][$i]["pressureAfterThrottle"]["date"])."',"; + //[barometricPressuremA] => Ciśnienie barometryczne pB[mA] - zakres 4-20 + $measureQuery .= "SUD_ID_PB=225,SUD_VAL_PB=".($wl["wells"][$i]["barometricPressuremA"]["value"] * 10).",SUD_FLG_PB='".$wl["wells"][$i]["barometricPressuremA"]["flag"]."',SUD_DATE_PB='".convertData($wl["wells"][$i]["barometricPressuremA"]["date"])."',"; + //[pumpEfficiency] => Q [m3/min] + $measureQuery .= "SUD_ID_Q=200,SUD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).",SUD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."',SUD_DATE_Q='".convertData($wl["wells"][$i]["pumpEfficiency"]["date"])."',"; + //[currentDiagnosticsOperationState] => Działanie/niedziałanie [1/0] diagnostyki prądowej + $measureQuery .= "SUD_ID_DIAG=708,SUD_VAL_DIAG=".$wl["wells"][$i]["currentDiagnosticsOperationState"]["value"].",SUD_FLG_DIAG='".$wl["wells"][$i]["currentDiagnosticsOperationState"]["flag"]."',SUD_DATE_DIAG='".convertData($wl["wells"][$i]["currentDiagnosticsOperationState"]["date"])."',"; + // PP + $measureQuery .= "SUD_ID_PP=401,SUD_VAL_PP=".$ppValue.",SUD_FLG_PP='".$ppFlag."',SUD_DATE_PP='".convertData($wl["wells"][$i]["pressureInPistonBody"]["date"])."',"; + // HH + $measureQuery .= "SUD_ID_HH=402,SUD_VAL_HH=".$hhValue.",SUD_FLG_HH='".$hhFlag."',SUD_DATE_HH='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + // ON OFF + $measureQuery .= "SUD_ID_ONOFF=507,SUD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].",SUD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."',SUD_DATE_ONOFF='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',"; + // end query + $measureQuery .= "SUD_AUDIT_CD=now()"; + + // wpisuje do tabeli z rekordami. + //echo $measureQuery."<br/><br/>"; + mysql_query($measureQuery); + + } + + + } + + + // dodatkowy warunek na - poprawka z kontekście rejestracji danych o wyłącnzikach - jeśli status jest niewiarygodny + // 06.2018 + + // sprawdza, czy pompa jest włączona i flaga o wyłączniku jest poprawna + elseif (count($isNotrealiableSaved)>0) + { + //przeliczenie PP + unset($ppValue); unset($ppFlag); unset($hhValue); unset($hhFlag); + // ============================================================================== + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppValue = (float) ($ppValue - (($wl["wells"][$i]["barometricPressuremA"]["value"]*10)/98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + + unset($lpValue); + $lpValue = (float) sqlStringValue("select getLastValue(240,".$devID.") HHV", "HHV"); + $hhValue = (float) $lpValue - ($wl["wells"][$i]["dynamicWaterTable"]["value"]); + $hhFlag = $wl["wells"][$i]["dynamicWaterTable"]["flag"]; + // ============================================================================== + + if ($devID>0) + { + $measureQuery = "INSERT INTO rep_soap_syndis_update5min_nra_onoff SET "; + $measureQuery .= "SUD_DRS_ID=".$devID.",SUD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',SUD_OBJECT_TYPE=".$wellType.","; + + //prąd fazy L1 zasilania pompy + $measureQuery .= "SUD_ID_L1=270,SUD_VAL_L1=".$wl["wells"][$i]["currentL1"]["value"].",SUD_FLG_L1='".$wl["wells"][$i]["currentL1"]["flag"]."',SUD_DATE_L1='".convertData($wl["wells"][$i]["currentL1"]["date"])."',"; + //prąd fazy L2 zasilania pompy + $measureQuery .= "SUD_ID_L2=710,SUD_VAL_L2=".$wl["wells"][$i]["currentL2"]["value"].",SUD_FLG_L2='".$wl["wells"][$i]["currentL2"]["flag"]."',SUD_DATE_L2='".convertData($wl["wells"][$i]["currentL2"]["date"])."',"; + //prąd fazy L3 zasilania pompy + $measureQuery .= "SUD_ID_L3=711,SUD_VAL_L3=".$wl["wells"][$i]["currentL3"]["value"].",SUD_FLG_L3='".$wl["wells"][$i]["currentL3"]["flag"]."',SUD_DATE_L3='".convertData($wl["wells"][$i]["currentL3"]["date"])."',"; + //[voltageL12] => U L12 [V] - napięcie międzyfazowe L1-L2 + $measureQuery .= "SUD_ID_UL12=275,SUD_VAL_UL12=".$wl["wells"][$i]["voltageL12"]["value"].",SUD_FLG_UL12='".$wl["wells"][$i]["voltageL12"]["flag"]."',SUD_DATE_UL12='".convertData($wl["wells"][$i]["voltageL12"]["date"])."',"; + //[voltageL23] => U L23 [V] - napięcie międzyfazowe L2-L3 + $measureQuery .= "SUD_ID_UL23=712,SUD_VAL_UL23=".$wl["wells"][$i]["voltageL23"]["value"].",SUD_FLG_UL23='".$wl["wells"][$i]["voltageL23"]["flag"]."',SUD_DATE_UL23='".convertData($wl["wells"][$i]["voltageL23"]["date"])."',"; + //[throttlePosition] => Położenie przepustnicy [*] + if ($wellType==19) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=".$wl["wells"][$i]["throttlePosition"]["value"].",SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + { + $tmpDivP1P2=0; + $tmpDivP1P2 = (float) ($wl["wells"][$i]["pressureAfterThrottle"]["value"] / $wl["wells"][$i]["pressureBeforeThrottle"]["value"]); + if ($tmpDivP1P2>0.93) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=100,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=50,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + } + + //[waterTemperature] => Tw [*C] + $measureQuery .= "SUD_ID_TW=245,SUD_VAL_TW=".$wl["wells"][$i]["waterTemperature"]["value"].",SUD_FLG_TW='".$wl["wells"][$i]["waterTemperature"]["flag"]."',SUD_DATE_TW='".convertData($wl["wells"][$i]["waterTemperature"]["date"])."',"; + //[activePower] => P [kW] + $measureQuery .= "SUD_ID_PE=260,SUD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].",SUD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."',SUD_DATE_PE='".convertData($wl["wells"][$i]["activePower"]["date"])."',"; + //[cos] => cos(FI) + $measureQuery .= "SUD_ID_CFI=280,SUD_VAL_CFI=".$wl["wells"][$i]["cos"]["value"].",SUD_FLG_CFI='".$wl["wells"][$i]["cos"]["flag"]."',SUD_DATE_CFI='".convertData($wl["wells"][$i]["cos"]["date"])."',"; + //[activeEnergy] => E [kWh] + $measureQuery .= "SUD_ID_KWH=265,SUD_VAL_KWH=".$wl["wells"][$i]["activeEnergy"]["value"].",SUD_FLG_KWH='".$wl["wells"][$i]["activeEnergy"]["flag"]."',SUD_DATE_KWH='".convertData($wl["wells"][$i]["activeEnergy"]["date"])."',"; + //[pumpedWaterAmount] => V [m3] + $measureQuery .= "SUD_ID_VM3=230,SUD_VAL_VM3=".$wl["wells"][$i]["pumpedWaterAmount"]["value"].",SUD_FLG_VM3='".$wl["wells"][$i]["pumpedWaterAmount"]["flag"]."',SUD_DATE_VM3='".convertData($wl["wells"][$i]["pumpedWaterAmount"]["date"])."',"; + //[ClInPumpedWater] => ch [mg/l] + $measureQuery .= "SUD_ID_CHL=719,SUD_VAL_CHL=".$wl["wells"][$i]["ClInPumpedWater"]["value"].",SUD_FLG_CHL='".$wl["wells"][$i]["ClInPumpedWater"]["flag"]."',SUD_DATE_CHL='".convertData($wl["wells"][$i]["ClInPumpedWater"]["date"])."',"; + //[energyConsumption] => Jednostkowe zużycie energii [kWh/m3/m] + $measureQuery .= "SUD_ID_ECM=721,SUD_VAL_ECM=".$wl["wells"][$i]["energyConsumption"]["value"].",SUD_FLG_ECM='".$wl["wells"][$i]["energyConsumption"]["flag"]."',SUD_DATE_ECM='".convertData($wl["wells"][$i]["energyConsumption"]["date"])."',"; + //[pumpRuntime] => t [h] + $measureQuery .= "SUD_ID_RUTM=290,SUD_VAL_RUTM=".$wl["wells"][$i]["pumpRuntime"]["value"].",SUD_FLG_RUTM='".$wl["wells"][$i]["pumpRuntime"]["flag"]."',SUD_DATE_RUTM='".convertData($wl["wells"][$i]["pumpRuntime"]["date"])."',"; + //[dynamicWaterTable] => HD [m] + $measureQuery .= "SUD_ID_HD=205,SUD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].",SUD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."',SUD_DATE_HD='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + //[staticWaterTable] => HST [m] + $measureQuery .= "SUD_ID_HST=210,SUD_VAL_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",SUD_FLG_HST='".$wl["wells"][$i]["staticWaterTable"]["flag"]."',SUD_DATE_HST='".convertData($wl["wells"][$i]["staticWaterTable"]["date"])."',"; + //[pressureBeforeThrottle] => p1 [kPa] + $measureQuery .= "SUD_ID_P1=215,SUD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].",SUD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."',SUD_DATE_P1='".convertData($wl["wells"][$i]["pressureBeforeThrottle"]["date"])."',"; + //[pressureAfterThrottle] => p2 [kPa] + $measureQuery .= "SUD_ID_P2=220,SUD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].",SUD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."',SUD_DATE_P2='".convertData($wl["wells"][$i]["pressureAfterThrottle"]["date"])."',"; + //[barometricPressuremA] => Ciśnienie barometryczne pB[mA] - zakres 4-20 + $measureQuery .= "SUD_ID_PB=225,SUD_VAL_PB=".($wl["wells"][$i]["barometricPressuremA"]["value"] * 10).",SUD_FLG_PB='".$wl["wells"][$i]["barometricPressuremA"]["flag"]."',SUD_DATE_PB='".convertData($wl["wells"][$i]["barometricPressuremA"]["date"])."',"; + //[pumpEfficiency] => Q [m3/min] + $measureQuery .= "SUD_ID_Q=200,SUD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).",SUD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."',SUD_DATE_Q='".convertData($wl["wells"][$i]["pumpEfficiency"]["date"])."',"; + //[currentDiagnosticsOperationState] => Działanie/niedziałanie [1/0] diagnostyki prądowej + $measureQuery .= "SUD_ID_DIAG=708,SUD_VAL_DIAG=".$wl["wells"][$i]["currentDiagnosticsOperationState"]["value"].",SUD_FLG_DIAG='".$wl["wells"][$i]["currentDiagnosticsOperationState"]["flag"]."',SUD_DATE_DIAG='".convertData($wl["wells"][$i]["currentDiagnosticsOperationState"]["date"])."',"; + // PP + $measureQuery .= "SUD_ID_PP=401,SUD_VAL_PP=".$ppValue.",SUD_FLG_PP='".$ppFlag."',SUD_DATE_PP='".convertData($wl["wells"][$i]["pressureInPistonBody"]["date"])."',"; + // HH + $measureQuery .= "SUD_ID_HH=402,SUD_VAL_HH=".$hhValue.",SUD_FLG_HH='".$hhFlag."',SUD_DATE_HH='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + // ON OFF + $measureQuery .= "SUD_ID_ONOFF=507,SUD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].",SUD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."',SUD_DATE_ONOFF='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',"; + // end query + $measureQuery .= "SUD_AUDIT_CD=now()"; + + // wpisuje do tabeli z rekordami. + //echo $measureQuery."<br/><br/>"; + mysql_query($measureQuery); + + } + } + + + + + + + + + + + +//Jeśli wyłączona +/* + else + { + if ($devID>0) + { + $measureQuery = "INSERT INTO rep_soap_syndis_update5min_data SET "; + $measureQuery .= "SUD_DRS_ID=".$devID.",SUD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',SUD_OBJECT_TYPE=".$wellType.","; + //[staticWaterTable] => HST [m] + $measureQuery .= "SUD_ID_HST=210,SUD_VAL_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",SUD_FLG_HST='".$wl["wells"][$i]["staticWaterTable"]["flag"]."',SUD_DATE_HST='".convertData($wl["wells"][$i]["staticWaterTable"]["date"])."',"; + // ON OFF + $measureQuery .= "SUD_ID_ONOFF=507,SUD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].",SUD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."',SUD_DATE_ONOFF='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',"; + // end query + $measureQuery .= "SUD_AUDIT_CD=now()"; + // wpisuje do tabeli z rekordami. + //echo $measureQuery."<br/><br/>"; + mysql_query($measureQuery); + } + } +*/ +} + +//mysql_query("truncate table softspm_rep.rep_002_avg_pump_working"); +//mysql_query("insert into softspm_rep.rep_002_avg_pump_working select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507) tb order by DRD_DRS_ID,DRD_AUDIT_DATE,DRD_ID"); + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_importwells_01.php b/soap_importwells_01.php new file mode 100644 index 0000000..e09bda1 --- /dev/null +++ b/soap_importwells_01.php @@ -0,0 +1,67 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); + +ini_set('soap.wsdl_cache_enabled',0); +ini_set('soap.wsdl_cache_ttl',0); +$cl = new SyndisConnector("http://172.22.64.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.22.64.101:3615/'); + + + +echo 'connected ...<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function insert_new_record($devID, $dicID, $value,$insertDate) +{ + $value = round($value,2); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".$value."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"); + //echo"INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".$value."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"; + //echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$dicID, "DIC_POL_LANG")." [$dicID]: ".$value; + //echo"</br>"; +} + +if (empty($_GET['w'])) $_GET['w']='G54'; + +print_r($cl->GetWellDataAsArray($_GET['w'])); //Pobieranie danych jednej pompy - zwraca dane jako tablica + + +//$wl["pumpEfficiency"]["value"] * 60; + + + + +mysql_close($polacz); + +echo 'finish processing ...<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_importwells_migracja.php b/soap_importwells_migracja.php new file mode 100644 index 0000000..1cf8848 --- /dev/null +++ b/soap_importwells_migracja.php @@ -0,0 +1,69 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'New starting ...<br>'; +require_once("soap.php"); + +ini_set('soap.wsdl_cache_enabled',0); +ini_set('soap.wsdl_cache_ttl',0); + +//$cl = new SyndisConnector("http://172.22.64.134/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.22.64.134:3615/'); + +$cl = new SyndisConnector("http://172.22.64.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.22.64.101:3615/'); + +echo 'connected ...<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +/* +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); +*/ + +function insert_new_record($devID, $dicID, $value,$insertDate) +{ + $value = round($value,2); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".$value."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"); + //echo"INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".$value."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"; + //echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$dicID, "DIC_POL_LANG")." [$dicID]: ".$value; + //echo"</br>"; +} + +print_r($cl->GetWellDataAsArray("G54")); //Pobieranie danych jednej pompy - zwraca dane jako tablica + + +//$wl["pumpEfficiency"]["value"] * 60; + + + + +//mysql_close($polacz); + +echo 'finish processing ...<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_of_while.php b/soap_of_while.php new file mode 100644 index 0000000..d7bb061 --- /dev/null +++ b/soap_of_while.php @@ -0,0 +1,393 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +//$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.21.11.101:3615/'); + +ini_set('soap.wsdl_cache_enabled',0); +ini_set('soap.wsdl_cache_ttl',0); +$cl = new SyndisConnector("http://172.22.64.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.22.64.101:3615/'); + + +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function time_to_int($inParam) +{ + unset($outParam); + $outParam = (float) str_replace(array(' ','-',':'), array('','',''), $inParam); + + return $outParam; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + + +// pobieramy tablice studni +$ile_zmian=0; +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + + unset($syndisStatus); + if ($wl['wells'][$i]['pumpOnOff']['value']==0) $syndisStatus = "OFF"; + elseif ($wl['wells'][$i]['pumpOnOff']['value']==1) $syndisStatus = "ON"; + + // sprawdza, czy nie ma błędnego statusu w historii + $ilePowtorzen_01 = 20; + $ilePowtorzen_02 = $ilePowtorzen_01-7; + unset($isNotrealiableSaved); + //$isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null and NOT_LICZ<".$ilePowtorzen_01.")"); + $isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null)"); + + + + //Łata jeśli mamy manual + /* + if ($wl['wells'][$i]['transmissionState']['flag'] == 'MANUAL' && $wl['wells'][$i]['pumpOnOff']['flag'] == 'MANUAL') + { + $wl['wells'][$i]['transmissionState']['value']=1; + unset($isNotrealiableSaved); + } + */ + + + // jeśli jest wszystko OK - normalna praca + //if ($wl['wells'][$i]['pumpOnOff']['flag']=="CORRECT" && count($isNotrealiableSaved)==0) + // po ustaleniach z Maćkiem Cichoniem - sprawdzam flagę Q, a nie wyłącznika + //if ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)==0) + if ($wl['wells'][$i]['transmissionState']['value']==1 && count($isNotrealiableSaved)==0) + { + //echo'Flaga CORRECT - wszystko jest i było OK <br/>'; + + //echo "Name: ". $wl['wells'][$i]['well']['id']."<br/>"; + unset($wellLastStatusArray); + $wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=(select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'))"); + + // jeśli nie zwraca żadnych wyników - sprawdza w tabeli historycznej + if (count($wellLastStatusArray)<=0) + { + unset($wellLastStatusArray); + $wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=(select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'))"); + } + // =========================================================================================================================== + + + //echo 'SYNDIS STATUS: '.$wl['wells'][$i]['pumpOnOff']['value'].' - '.$syndisStatus.'<br/>'; + //echo 'syndisStatus: '.$syndisStatus.'<br/><br/>'; + //echo 'LAST STATUS: '.$wellLastStatusArray[0]['DRD_VALUE'].'<br/>'; + + //echo "Przed Data SYNDIS: ". convertData($wl['wells'][$i]['pumpOnOff']['date'])." >>> ".time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date']))."<br/>"; + //echo "Przed Data LAST: ". $wellLastStatusArray[0]['DRD_AUDIT_DATE']." >>> ".time_to_int($wellLastStatusArray[0]['DRD_AUDIT_DATE'])."<br/>"; + + //echo'<br/>'; + /* + $old_date = convertData($wl['wells'][$i]['pumpOnOff']['date']); + $new_date = date("Y-m-d H:i:s",strtotime("+30 seconds",strtotime(convertData($wl['wells'][$i]['pumpOnOff']['date'])))); + echo'OLD: '.$old_date.' , NEW: '.$new_date.'<br/>'; + + echo'Studnia: '.$wl['wells'][$i]['well']['id']. '['.$wellLastStatusArray[0]['DRD_DRS_ID'].']'; + echo'<br/>'; + echo'Czas SYNDIS: '.time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])); + echo'<br/>'; + echo'Czas SYNDIS do porównania: '.time_to_int(date("Y-m-d H:i:s",strtotime("+30 seconds",strtotime(convertData($wl['wells'][$i]['pumpOnOff']['date']))))); + echo'<br/>'; + echo'Ostatni czas studnia: '.time_to_int($wellLastStatusArray[0]['DRD_AUDIT_DATE']); + echo'<br/>'; + echo'Ostatni czas studnia do orównania: '.time_to_int(date("Y-m-d H:i:s",strtotime("+30 seconds",strtotime($wellLastStatusArray[0]['DRD_AUDIT_DATE'])))); + echo'<br/>'; + */ + + // sprawdza czy ostatni pomiar w SoftSPM jest taki sam jak w SYNDIS (jeśli w Syndis jest świeższy) + //if( time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) > time_to_int($wellLastStatusArray[0]['DRD_AUDIT_DATE'])) + // 2020-03-05 + // dodane dodatkowe 30 sekund, żeby zwiększyć różnicę + if ( time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) > time_to_int(date("Y-m-d H:i:s",strtotime("+30 seconds",strtotime($wellLastStatusArray[0]['DRD_AUDIT_DATE'])))) ) + { + //echo'Zarejestrował różnice dat<br/>'; + //echo "Data SYNDIS: ". convertData($wl['wells'][$i]['pumpOnOff']['date'])." >>> ".strtotime(convertData($wl['wells'][$i]['pumpOnOff']['date']))."<br/>"; + //echo "Data LAST: ". $wellLastStatusArray[0]['DRD_AUDIT_DATE']." >>> ".strtotime($wellLastStatusArray[0]['DRD_AUDIT_DATE'])."<br/>"; + + // porównuje statusy + if ($syndisStatus != $wellLastStatusArray[0]['DRD_VALUE']) + { + //echo'Zarejestrował różnice<br/>'; + //echo "Status: ". $wl["wells"][$i]["pumpOnOff"]["value"]."<br/>"; + //echo "Translate : ".$syndisStatus."<br/>"; + //echo "wellLastStatusArray: ".$wellLastStatusArray[0]['DRD_VALUE']."<br/>"; + //"INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=123,DRD_RESOURCES_DETAIL=507,DRD_VALUE='ONNNNNN',DRD_DESCRIPTION='121212',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='2001-01-01'" + + if (empty($wellLastStatusArray[0]['DRD_DRS_ID']) || $wellLastStatusArray[0]['DRD_DRS_ID']<=0) + { + unset($wellLastStatusArray); + $wellLastStatusArray = sqlGetResAsArray("select DRS_ID as DRD_DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'"); + } + + // wpis o załączeniu pompy + if ($wl['wells'][$i]['pumpOnOff']['value']==1 || $syndisStatus == "ON") + { + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='ON',WST_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',WST_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'"); + } + // wpis o załączeniu pompy + else + { + // zabezpieczeni przed zerowym powodem wyłącznika + if ($wl['wells'][$i]['pumpOnOffReason']['value']==0) + $wl['wells'][$i]['pumpOnOffReason']['value'] = 1318; + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wl['wells'][$i]['pumpOnOffReason']['value']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='OFF',WST_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',WST_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'"); + } + + //wpisuje do tabeli inforację, że trzeba przebudować tabele softspm_rep.rep_002_avg_pump_working + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$syndisStatus."',ISN_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',ISN_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'"); + $ile_zmian++; + } + + } + } + // ========================================================================================================================= // + + // Jeśli był zarejestrowany błędny status, a przyszedł poprawny - pobiera historię wyłączników + // Łata na problemy w SYNDIS + // sprawdza 15 powtóerzń, aż minie 15*20 sek, aż pobiorą się pomiary ze sterownika do bufora + //elseif ($wl['wells'][$i]['pumpOnOff']['flag']=="CORRECT" && count($isNotrealiableSaved)>0) + //elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']>$ilePowtorzen_02) + elseif ($wl['wells'][$i]['transmissionState']['value']==1 && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']>$ilePowtorzen_02) + { + //echo'Flaga CORRECT, ale jest po statusie NOTREALIABLE <br/>'; + + + + // pobiera ostatnio zarejestrowany pomiar wyłącznika + unset($lasArrayOnOff); + //$lasArrayOnOff = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']." and DRD_AUDIT_USR='SYNDIS')"); + $lasArrayOnOff = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID'].")"); + + //konwertuje date na UTC + // ========================================= + $getCurMonth = (int) date('m'); + + if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; + else + $offset = 60 * 60; + // ========================================= + $utcDate = date('Y-m-d\TH:i:s\Z', strtotime($lasArrayOnOff[0]['DRD_AUDIT_DATE'])- $offset); + + //pobiera historię + unset($hisOnOffArray); + $hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$utcDate)); + //jeśli tablica zwrócona z SYNDIS posiada rekody - są zwracane. + if (count($hisOnOffArray['probes'])>0 && $isNotrealiableSaved[0]['NOT_DRS_ID']>0) + { + //tworzy tablicę z wyłącznikami, które zostaną zarejestrowane jako nowe - z historii + unset($onoffTempNewArray); + + for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++) + { +// echo 'SYN: '.time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])).'<br/>'; +// echo 'LAST: '.time_to_int($lasArrayOnOff[0]['DRD_AUDIT_DATE']).'<br/>'; +// '<br/>'; + + + // jeśli aktualna data jest większa od ostatnio zapisanej - wpisuje do bazy + //if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int($lasArrayOnOff[0]['DRD_AUDIT_DATE']) ) + if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int(date("Y-m-d H:i:s",strtotime("+30 seconds",strtotime($lasArrayOnOff[0]['DRD_AUDIT_DATE'])))) ) + { + + unset($newOnOffStatus); + $newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value']; + if ($newOnOffStatus==1) + { + $newOnOffStatus='ON'; + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); +// echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); +// echo'<br/>'; + + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); +// echo("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); +// echo'<br/>'; + } + else + { + if ($hisOnOffArray['probes'][$ile]['reason']==0) + $hisOnOffArray['probes'][$ile]['reason'] = 1318; + + $newOnOffStatus = 'OFF'; + + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); +// echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + echo'<br/>'; + + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); +// echo("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); +// echo'<br/>'; + } + + + + + $onoffTempNewArray[] = array( + 'id' => $isNotrealiableSaved[0]['NOT_DRS_ID'], + 'stat' => $newOnOffStatus, + 'date' => convertData($hisOnOffArray['probes'][$ile]['date']) + ); + } + + // jeśli system podczas braku łączności zarejestrował zmianę wyłączników to sprawdza historię pomiarów i ją zapisuje + if (count($onoffTempNewArray)>0) + { + // usuwa wszystkie wpisy, poza tymi o pełnej godzinie + mysql_query("delete from rep_soap_syndis_update5min_nra_onoff where SUD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']." and SUD_AUDIT_CD not like '%:00:%'"); + + // pobiera listę pomiarów z bufora i sprawdza stan zarejestrowanych wyłączników - jeśli ON - to wpisuje + unset($getBufforData); + $getBufforData = sqlGetResAsArray("select SUD_ID,SUD_AUDIT_CD from rep_soap_syndis_update5min_nra_onoff where SUD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']." and SUD_DATE_Q>='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."' order by SUD_AUDIT_CD"); + + for ($liTmp=0; $liTmp<count($getBufforData); $liTmp++) + { + unset($chechStatusOnOFF); + $chechStatusOnOFF = sqlGetResAsArray("select DRD_VALUE from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']." and DRD_AUDIT_DATE<='".$getBufforData[$liTmp]['SUD_AUDIT_CD']."')"); + + // jest status jest na ON - kopiuje dane do właściwej tabeli + if ($chechStatusOnOFF[0]['DRD_VALUE']=='ON') + { + mysql_query("insert into rep_his_data_everyday select null,SUD_DRS_ID,SUD_AUDIT_CD,null,null,SUD_VAL_HD,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,null,SUD_VAL_TW TEMP,SUD_VAL_DIAG,null,null,null,now() from rep_soap_syndis_update5min_nra_onoff where SUD_ID=".$getBufforData[$liTmp]['SUD_ID']); + } + } + + //usuwa wszystkie wpisy z bufora + mysql_query("DELETE FROM rep_soap_syndis_update5min_nra_onoff WHERE SUD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']); + + } + // jeśli nie ma nowych informacji z bufora historii o zmianie statusów załączenia to sprawdza, czy ostatni stan załącznia + // był na ON - jeśli tak to zaczytuje historię z bufora + /* 2018-07-11 + else + { + if ($lasArrayOnOff[0]['DRD_VALUE']='ON') + { + //insert into rep_his_data_everyday select null,SUD_DRS_ID,SUD_DATE_Q,null,null,SUD_VAL_HD,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,null,SUD_VAL_TW TEMP,SUD_VAL_DIAG,null,null,null,now() from rep_soap_syndis_update5min_nra_onoff where SUD_DRS_ID=5717 and SUD_DATE_Q>='2018-06-24 08:59:37' + mysql_query("insert into rep_his_data_everyday select null,SUD_DRS_ID,SUD_AUDIT_CD,null,null,SUD_VAL_HD,SUD_VAL_Q,SUD_VAL_P1,SUD_VAL_P2,SUD_VAL_L1,SUD_VAL_UL12,SUD_VAL_PE,SUD_VAL_CFI,SUD_VAL_PP,SUD_VAL_HH,null,SUD_VAL_TW TEMP,SUD_VAL_DIAG,null,null,null,now() from rep_soap_syndis_update5min_nra_onoff where SUD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']." and SUD_DATE_Q>='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."' order by SUD_AUDIT_CD"); + //usuwa wszystkie wpisy z bufora + mysql_query("DELETE FROM rep_soap_syndis_update5min_nra_onoff WHERE SUD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']); + } + } + */ + + // na koniec zapisania operacji historycznych - usuwa dane z bufora + + } + //wpisuje do tabeli inforację, że trzeba przebudować tabele softspm_rep.rep_002_avg_pump_working + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$newOnOffStatus."',ISN_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',ISN_DATE=now()"); + } + + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_END_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."',NOT_END_VALUE='".$syndisStatus."',NOT_END_FLAG='CORRECT',NOT_AUDIT_END_DATE=now(),NOT_LICZ_LAST_DATE='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."' WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + + // dodaje do tabeli wpis, że trzeba przeanalizować dane nadmiarowe + mysql_query("INSERT INTO rep_clean_notrealiable SET CNT_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID'].",CNT_AUDIT_DATE='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."'"); + } + // ========================================================================================================================= // + + // podbija licznik NOT_LICZ w tabeli rep_soap_syndis_notrealiable_onoff + // ========================================================================================================================= // + //elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']<$ilePowtorzen_01) + elseif ($wl['wells'][$i]['transmissionState']['value']==1 && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']<$ilePowtorzen_01) + { + $newLicznik = $isNotrealiableSaved[0]['NOT_LICZ']+1; + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_LICZ=".$newLicznik." WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + } + // ========================================================================================================================= // + + + // jeśli pomiar jest niewiarygodny a jest już jaiś wpis, to "zeruje licznik", ustawia wartość licznika na 1 + // ========================================================================================================================= // + //elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="NOTREALIABLE" && count($isNotrealiableSaved)>0) + elseif ($wl['wells'][$i]['transmissionState']['value']==0 && count($isNotrealiableSaved)>0) + { + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_LICZ=1 WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + } + // ========================================================================================================================= // + + + + // brak łączności i brak aktualnie aktywnego wpisu + //elseif ($wl['wells'][$i]['pumpOnOff']['flag']=="NOTREALIABLE") + // ========================================================================================================================= // + //elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="NOTREALIABLE" && count($isNotrealiableSaved)==0) + elseif ($wl['wells'][$i]['transmissionState']['value']==0 && count($isNotrealiableSaved)==0) + { + // pobiera informacje o studni + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'"); + + mysql_query("INSERT INTO rep_soap_syndis_notrealiable_onoff SET NOT_DRS_ID=".$wellArray[0]['DRS_ID'].",NOT_WELL_ID=".$wellArray[0]['WLL_ID'].",NOT_WELL_NAME='".$wellArray[0]['WLL_NAME']."',NOT_WHEN_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."',NOT_WHEN_VALUE='".$syndisStatus."',NOT_WHEN_FLAG='NOTREALIABLE',NOT_AUDIT_WHEN_DATE=now()"); + } + // ========================================================================================================================= // + +} + + +//mysql_query("truncate table softspm_rep.rep_002_avg_pump_working"); +//mysql_query("insert into softspm_rep.rep_002_avg_pump_working select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507) tb order by DRD_DRS_ID,DRD_AUDIT_DATE,DRD_ID"); + +mysql_close($polacz); + +echo 'Zmieniono <b>'.$ile_zmian.'</b> stanów załączenia/wyłączenia dla studni.<br/><br/>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_of_while_back.php b/soap_of_while_back.php new file mode 100644 index 0000000..78d76ac --- /dev/null +++ b/soap_of_while_back.php @@ -0,0 +1,153 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting BACK...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function time_to_int($inParam) +{ + unset($outParam); + $outParam = (float) str_replace(array(' ','-',':'), array('','',''), $inParam); + + return $outParam; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + + +// pobieramy tablice studni +$ile_zmian=0; +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + // sprawdza, data wyłącznika nie cofnęła się + // ============================== ============================== ============================== ============================== ============================== ============================== + unset($deviceInfoArray); + $deviceInfoArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'"); + + unset($isNotrealiableSaved); + $isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_AUDIT_END_DATE is null and NOT_DRS_ID=".$deviceInfoArray[0]['DRS_ID'].")"); + + + if ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)==0) + { + // pobiera informacje o ostatnim wyłączniku dla pompy + unset($oNoFFstatusArray); + $oNoFFstatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID'].")"); + + // jeśli data wyłącznika z SYNDIS jest wcześniejsza niż aktualnie zarejestrowana w SoftSPM, to starsze kasuje z SoftSPM + if( time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date']))>20150101000000 && time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) < time_to_int($oNoFFstatusArray[0]['DRD_AUDIT_DATE'])) + { + // usuwa nadmiarowe pomiary + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_AUDIT_DATE>='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."' and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']); + + // pobiera informacje o ostatnim wyłączniku dla pompy + unset($oNoFFstatusArray); + $oNoFFstatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID'].")"); + + //konwertuje date na UTC + // ========================================= + $getCurMonth = (int) date('m'); + + if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; + else + $offset = 60 * 60; + // ========================================= + $utcDate = date('Y-m-d\TH:i:s\Z', strtotime($oNoFFstatusArray[0]['DRD_AUDIT_DATE'])- $offset); + + //pobiera historię + unset($hisOnOffArray); + $hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$utcDate)); + for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++) + { + // jeśli aktualna data jest większa od ostatnio zapisanej - wpisuje do bazy + if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int($oNoFFstatusArray[0]['DRD_AUDIT_DATE']) ) + { + unset($newOnOffStatus); + $newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value']; + if ($newOnOffStatus==1) + { + $newOnOffStatus='ON'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + else + { + $newOnOffStatus = 'OFF'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + + //wpisuje do tabeli inforację, że trzeba przebudować tabele softspm_rep.rep_002_avg_pump_working + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$newOnOffStatus."',ISN_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',ISN_DATE=now()"); + + $ile_zmian++; + } + } + + + } + } + // ============================== ============================== ============================== ============================== ============================== ============================== +} + +mysql_close($polacz); + +echo 'Zmieniono <b>'.$ile_zmian.'</b> stanów załączenia/wyłączenia dla studni.<br/><br/>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_of_while_last.php b/soap_of_while_last.php new file mode 100644 index 0000000..07e5d76 --- /dev/null +++ b/soap_of_while_last.php @@ -0,0 +1,297 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function convertDateToUTC($insertDate) +{ + unset($utcDate); + + $getCurMonth = (int) date('m'); + + if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; + else + $offset = 60 * 60; + // ========================================= + $utcDate = date('Y-m-d\TH:i:s\Z', strtotime($insertDate)- $offset); + + return $utcDate; +} + +function reqSyndisForUTCdate($insertDate) +{ + unset($utcDate); + + $getCurMonth = (int) date('m'); + + if ($getCurMonth>3 && $getCurMonth<11) + $offset = 3 * 60 * 60; + else + $offset = 2 * 60 * 60; + // ========================================= + $utcDate = date('Y-m-d\TH:i:s\Z', strtotime($insertDate)- $offset); + + return $utcDate; +} + + + +function time_to_int($inParam) +{ + unset($outParam); + $outParam = (float) str_replace(array(' ','-',':'), array('','',''), $inParam); + + return $outParam; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + +function split_to_array($inArray) +{ + unset($outArray); unset($newArray); + $newArray = objectToArray($inArray); + + echo'split_to_array: '.count($newArray['probes']).'<br>'; + + + if (count($newArray['probes'])==1 || count($newArray['probes'])==4) + { + echo'Wszedł w pierwszy warunek <br/><br/>'; + + unset($tmpStat); $tmpStat = (int) $newArray['probes']['value']; + if ($tmpStat==1) $tmpStat="ON"; else $tmpStat="OFF"; + + $outArray[] = array( + 'value' => $tmpStat, + 'date' => convertData($newArray['probes']['date']), + 'reason' => $newArray['probes']['reason'] + ); + } + elseif (count($newArray['probes'])!=1 && count($newArray['probes'])!=4) + { + echo'Wszedł w drugi warunek <br/><br/>'; + + $tmpArray = $newArray['probes']; + foreach ($tmpArray as $tb) + { + unset($tmpStat); $tmpStat = (int) $tb['value']; + if ($tmpStat==1) $tmpStat="ON"; else $tmpStat="OFF"; + + $outArray[] = array( + 'value' => $tmpStat, + 'date' => convertData($tb['date']), + 'reason' => $tb['reason'] + ); + } + } + else + { + $outArray = null; + } + + return $outArray; +} + + + + + + +// pobieramy tablice studni +$ile_zmian=0; +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +$wl = $cl->GetWellsDataAsArray($well_array); + +//pobiera informacje o statusie pompy (załączniku - czy się zmianił oraz o łącznoiści) +// ============================================================================================ // +for($i=0; $i<count($wl['wells']); $i++) +{ + unset($syndisStatus); + // IF 01 =============================================================================== // + if ($wl['wells'][$i]['pumpOnOff']['value']==0) $syndisStatus = "OFF"; + elseif ($wl['wells'][$i]['pumpOnOff']['value']==1) $syndisStatus = "ON"; + // ENDIF 01 =============================================================================== // + + // sprawdza, czy nie ma błędnego statusu w historii + $ilePowtorzen_01 = 20; + $ilePowtorzen_02 = $ilePowtorzen_01-7; + unset($isNotrealiableSaved); + $isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null)"); + + + + // jeśli jest wszystko OK - normalna praca + // IF 02 =============================================================================== // + if ($wl['wells'][$i]['transmissionState']['value']==1 && count($isNotrealiableSaved)==0) + { + unset($wellLastStatusArray); + $wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=(select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'))"); + + // jeśli nie zwraca żadnych wyników - sprawdza w tabeli historycznej + if (count($wellLastStatusArray)<=0) + { + unset($wellLastStatusArray); + $wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=(select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'))"); + } + + + // sprawdza datę oraz status ostatniego pomiaru i porównuje ją z ostatnią z pomiarów w bazie + if( + time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) != time_to_int($wellLastStatusArray[0]['DRD_AUDIT_DATE']) + || + $syndisStatus != $wellLastStatusArray[0]['DRD_VALUE'] + + ) + { + unset($syndisDate); unset($sqlDate); + //którą datę bierzemy pod uwagę + if (time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) < time_to_int($wellLastStatusArray[0]['DRD_AUDIT_DATE'])) + { +// $syndisDate = $wl['wells'][$i]['pumpOnOff']['date']; + $syndisDate = reqSyndisForUTCdate(convertData($wl['wells'][$i]['pumpOnOff']['date'])); + $sqlDate = convertData($wl['wells'][$i]['pumpOnOff']['date']); + } + else + { + //$syndisDate = convertDateToUTC($wellLastStatusArray[0]['DRD_AUDIT_DATE']); + $syndisDate = reqSyndisForUTCdate($wellLastStatusArray[0]['DRD_AUDIT_DATE']); + $sqlDate = $wellLastStatusArray[0]['DRD_AUDIT_DATE']; + } + + + + echo'syndisDate: '.$syndisDate.'<br/>'; + echo'sqlDate: '.$sqlDate.'<br/>'; + + //pobiera historię z SYNDIS + unset($hisOnOffArray); + $hisOnOffArray = split_to_array($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$syndisDate)); + + print_r($hisOnOffArray); + echo'<br/>'; + echo 'Ile: '.count($hisOnOffArray); + echo'<br/>'; + + + + if (count($hisOnOffArray)>0 && $wellLastStatusArray[0]['DRD_DRS_ID']>0) + { + echo("DELETE FROM seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$wellLastStatusArray[0]['DRD_DRS_ID']." and DRD_AUDIT_DATE > '".$sqlDate."'"); + echo'<br/>'; + + // if( time_to_int($hisOnOffArray[0]['date']) > time_to_int($sqlDate) ) + // sprawdza czy jest jeden pomiar czy więcej + if (count($hisOnOffArray)==1) + { + if (time_to_int($hisOnOffArray[0]['date']) > time_to_int($sqlDate)) + { + // jeśli załączona + if ($hisOnOffArray[0]['value']=="ON") + echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$hisOnOffArray[0]['value']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$hisOnOffArray[0]['date']."'"); + else + echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$hisOnOffArray[0]['value']."',DRD_EXPORT_SEGAP='1',DRD_DESCRIPTION='".$hisOnOffArray[0]['reason']."',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$hisOnOffArray[0]['date']."'"); + + echo'<br/>'; + $ile_zmian++; + } + } + else + { + $ile_zmian++; + } + + + + } + + + + } + + + + + } + // =============================================================================== // + else + { + echo 'niestabilna: '.$wl['wells'][$i]['well']['id'].'<br/>'; + } + // =============================================================================== // + + // ENDIF 02 =============================================================================== // + + + echo'<br/>'; + + + + +} +// ============================================================================================ // + + + + + + + +mysql_close($polacz); + +echo 'Zmieniono <b>'.$ile_zmian.'</b> stanów załączenia/wyłączenia dla studni.<br/><br/>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_of_while_manual.php b/soap_of_while_manual.php new file mode 100644 index 0000000..37e4e67 --- /dev/null +++ b/soap_of_while_manual.php @@ -0,0 +1,228 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting MANUAL + HistoryBACK...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function time_to_int($inParam) +{ + unset($outParam); + $outParam = (float) str_replace(array(' ','-',':'), array('','',''), $inParam); + + return $outParam; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + + +// pobieramy tablice studni +$ile_zmian=0; +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + // sprawdza, czy w pomiarze nie mamy znacznika MANUAL - wyłącznik wprowadzony z reki + // ============================== ============================== ============================== ============================== ============================== ============================== + if ($wl['wells'][$i]['pumpOnOff']['flag']=="MANUAL") + { + // = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = // + unset($deviceInfoArray); + $deviceInfoArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'"); + // = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = // + + // = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = // + unset($syndisStatus); + if ($wl['wells'][$i]['pumpOnOff']['value']==0) $syndisStatus = "OFF"; + elseif ($wl['wells'][$i]['pumpOnOff']['value']==1) $syndisStatus = "ON"; + // = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = + = // + + + // sprawdza, czy było coś w tablicy niewiarygodnych + unset($isNotrealiableSaved); + $isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null)"); + + if (count($isNotrealiableSaved)>0) + { + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_END_DATE=now(),NOT_AUDIT_END_DATE=now(),NOT_END_FLAG='MANUAL',NOT_LICZ=100 WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + unset($isNotrealiableSaved); + } + + // usuwa wszystkie pomiary starsze nić podany MANUAL + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']." and DRD_AUDIT_USR='SYNDIS' and DRD_AUDIT_DATE>='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'"); + + //pobiera historię + unset($hisOnOffArray); + $hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$wl['wells'][$i]['pumpOnOff']['date'])); + for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++) + { + if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) >= time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) ) + { + + unset($newOnOffStatus); + $newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value']; + if ($newOnOffStatus==1) + { + $newOnOffStatus='ON'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + else + { + $newOnOffStatus = 'OFF'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + + $ile_zmian++; + } + } + + } + // ============================== ============================== ============================== ============================== ============================== ============================== + + + + + + + + + + // sprawdza, data wyłącznika nie cofnęła się + // ============================== ============================== ============================== ============================== ============================== ============================== + unset($deviceInfoArray); + $deviceInfoArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'"); + + unset($isNotrealiableSaved); + $isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_AUDIT_END_DATE is null and NOT_DRS_ID=".$deviceInfoArray[0]['DRS_ID'].")"); + + + if ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)==0) + { + // pobiera informacje o ostatnim wyłączniku dla pompy + unset($oNoFFstatusArray); + $oNoFFstatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID'].")"); + + // jeśli data wyłącznika z SYNDIS jest wcześniejsza niż aktualnie zarejestrowana w SoftSPM, to starsze kasuje z SoftSPM + if( time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date']))>20150101000000 && time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) < time_to_int($oNoFFstatusArray[0]['DRD_AUDIT_DATE'])) + { + // usuwa nadmiarowe pomiary + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_AUDIT_DATE>='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."' and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']); + + // pobiera informacje o ostatnim wyłączniku dla pompy + unset($oNoFFstatusArray); + $oNoFFstatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID'].")"); + + //konwertuje date na UTC + // ========================================= + $getCurMonth = (int) date('m'); + + if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; + else + $offset = 60 * 60; + // ========================================= + $utcDate = date('Y-m-d\TH:i:s\Z', strtotime($oNoFFstatusArray[0]['DRD_AUDIT_DATE'])- $offset); + + //pobiera historię + unset($hisOnOffArray); + $hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$utcDate)); + for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++) + { + // jeśli aktualna data jest większa od ostatnio zapisanej - wpisuje do bazy + if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int($oNoFFstatusArray[0]['DRD_AUDIT_DATE']) ) + { + unset($newOnOffStatus); + $newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value']; + if ($newOnOffStatus==1) + { + $newOnOffStatus='ON'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + else + { + $newOnOffStatus = 'OFF'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + + //wpisuje do tabeli inforację, że trzeba przebudować tabele softspm_rep.rep_002_avg_pump_working + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$newOnOffStatus."',ISN_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',ISN_DATE=now()"); + + $ile_zmian++; + } + } + + + } + } + // ============================== ============================== ============================== ============================== ============================== ============================== + + + + + + + + +} + +mysql_close($polacz); + +echo 'Zmieniono <b>'.$ile_zmian.'</b> stanów załączenia/wyłączenia dla studni.<br/><br/>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_of_while_new.php b/soap_of_while_new.php new file mode 100644 index 0000000..b603fb4 --- /dev/null +++ b/soap_of_while_new.php @@ -0,0 +1,293 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br/><br/>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function time_to_int($inParam) +{ + unset($outParam); + $outParam = (float) str_replace(array(' ','-',':'), array('','',''), $inParam); + + return $outParam; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + + +// pobieramy tablice studni +$ile_zmian=0; +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_wells,seg_well_pump_eng_rel where RWL_WLL_ID=WLL_ID and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + unset($deviceInfoArray); + $deviceInfoArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'"); + + + unset($syndisStatus); + if ($wl['wells'][$i]['pumpOnOff']['value']==0) $syndisStatus = "OFF"; + elseif ($wl['wells'][$i]['pumpOnOff']['value']==1) $syndisStatus = "ON"; + + // sprawdza, czy nie ma błędnego statusu w historii + $ilePowtorzen_01 = 20; + $ilePowtorzen_02 = $ilePowtorzen_01-7; + unset($isNotrealiableSaved); + //$isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null and NOT_LICZ<".$ilePowtorzen_01.")"); + $isNotrealiableSaved = sqlGetResAsArray("select * from rep_soap_syndis_notrealiable_onoff where NOT_ID=(select max(NOT_ID) from rep_soap_syndis_notrealiable_onoff where NOT_WELL_NAME='".$wl['wells'][$i]['well']['id']."' and NOT_AUDIT_END_DATE is null)"); + + + // sprawdza, czy w pomiarze nie mamy znacznika MANUAL - wyłącznik wprowadzony z reki + // ============================== ============================== ============================== ============================== ============================== ============================== + if ($wl['wells'][$i]['pumpOnOff']['flag']=="MANUAL") + { + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_END_DATE=now(),NOT_AUDIT_END_DATE=now(),NOT_END_FLAG='MANUAL',NOT_LICZ=100 WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + unset($isNotrealiableSaved); + + // usuwa wszystkie pomiary starsze nić podany MANUAL + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']." and DRD_AUDIT_USR='SYNDIS' and DRD_AUDIT_DATE>='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."'"); + + //pobiera historię + unset($hisOnOffArray); + $hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$wl['wells'][$i]['pumpOnOff']['date'])); + for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++) + { + if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) >= time_to_int(convertData($wl['wells'][$i]['pumpOnOff']['date'])) ) + { + + unset($newOnOffStatus); + $newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value']; + if ($newOnOffStatus==1) + { + $newOnOffStatus='ON'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + else + { + $newOnOffStatus = 'OFF'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + } + } + + } + // ============================== ============================== ============================== ============================== ============================== ============================== + + + + // Jeśli flaga Q jest correct oraz nie czeka na licznik + // ============================== ============================== ============================== ============================== ============================== ============================== + if ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)==0) + { + // pobiera ostatni systus pompy + unset($wellLastStatusArray); + $wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']." and DRD_AUDIT_USR='SYNDIS')"); + + // jeśli nie zwraca żadnych wyników - sprawdza w tabeli historycznej + if (count($wellLastStatusArray)<=0) + { + unset($wellLastStatusArray); + $wellLastStatusArray = sqlGetResAsArray("select * from seg_dev_resources_det_his where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$deviceInfoArray[0]['DRS_ID']." and DRD_AUDIT_USR='SYNDIS')"); + } + + + //pobiera historię + unset($hisOnOffArray); + $hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$wl['wells'][$i]['pumpOnOff']['date'])); + for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++) + { + if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int($wellLastStatusArray[0]['DRD_AUDIT_DATE']) ) + { + + unset($newOnOffStatus); + $newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value']; + if ($newOnOffStatus==1) + { + $newOnOffStatus='ON'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + else + { + $newOnOffStatus = 'OFF'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$deviceInfoArray[0]['DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + + //wpisuje do tabeli inforację, że trzeba przebudować tabele softspm_rep.rep_002_avg_pump_working + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$newOnOffStatus."',ISN_DRS_ID='".$wellLastStatusArray[0]['DRD_DRS_ID']."',ISN_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + $ile_zmian++; + + } + } + } + // ============================== ============================== ============================== ============================== ============================== ============================== + + + // Jeśli był zarejestrowany błędny status, a przyszedł poprawny - pobiera historię wyłączników + // Łata na problemy w SYNDIS + // sprawdza 15 powtóerzń, aż minie 15*20 sek, aż pobiorą się pomiary ze sterownika do bufora + // ============================== ============================== ============================== ============================== ============================== ============================== + elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']>$ilePowtorzen_02) + { + + // pobiera ostatnio zarejestrowany pomiar wyłącznika + unset($lasArrayOnOff); + $lasArrayOnOff = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID']." and DRD_AUDIT_USR='SYNDIS')"); + + //konwertuje date na UTC + // ========================================= + $getCurMonth = (int) date('m'); + + if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; + else + $offset = 60 * 60; + // ========================================= + $utcDate = date('Y-m-d\TH:i:s\Z', strtotime($lasArrayOnOff[0]['DRD_AUDIT_DATE'])- $offset); + + //pobiera historię + unset($hisOnOffArray); + $hisOnOffArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($wl['wells'][$i]['well']['id'],$utcDate)); + + //jeśli tablica zwrócona z SYNDIS posiada rekody - są zwracane. + if (count($hisOnOffArray['probes'])>0 && $isNotrealiableSaved[0]['NOT_DRS_ID']>0) + { + unset($onoffTempNewArray); + + for ($ile=0; $ile<count($hisOnOffArray['probes']); $ile++) + { + if ( time_to_int(convertData($hisOnOffArray['probes'][$ile]['date'])) > time_to_int($lasArrayOnOff[0]['DRD_AUDIT_DATE']) ) + { + unset($newOnOffStatus); + $newOnOffStatus = (int) $hisOnOffArray['probes'][$ile]['value']; + if ($newOnOffStatus==1) + { + $newOnOffStatus='ON'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + else + { + $newOnOffStatus = 'OFF'; + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$newOnOffStatus."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',DRD_AUDIT_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + mysql_query("INSERT INTO softspm_rep.rep_002_avg_pump_working SET WST_STATUS_VAL='".$newOnOffStatus."',WST_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',WST_DESCRIPTION='".$hisOnOffArray['probes'][$ile]['reason']."',WST_DATE='".convertData($hisOnOffArray['probes'][$ile]['date'])."'"); + } + + mysql_query("INSERT INTO softspm_rep.rep_002_is_set_new_onoff_signals SET ISN_STATUS_VAL='".$newOnOffStatus."',ISN_DRS_ID='".$isNotrealiableSaved[0]['NOT_DRS_ID']."',ISN_DATE=now()"); + $ile_zmian++; + } + } + + // w tym wariancie nie zaczytujemy listy pomiarów - robi się bałagan + // ========================================================================= + // ========================================================================= + + + } + + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_END_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."',NOT_END_VALUE='".$syndisStatus."',NOT_END_FLAG='CORRECT',NOT_AUDIT_END_DATE=now(),NOT_LICZ_LAST_DATE='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."' WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + // dodaje do tabeli wpis, że trzeba przeanalizować dane nadmiarowe + mysql_query("INSERT INTO rep_clean_notrealiable SET CNT_DRS_ID=".$isNotrealiableSaved[0]['NOT_DRS_ID'].",CNT_AUDIT_DATE='".$lasArrayOnOff[0]['DRD_AUDIT_DATE']."'"); + + } + // ============================== ============================== ============================== ============================== ============================== ============================== + + + // podbija licznik NOT_LICZ w tabeli rep_soap_syndis_notrealiable_onoff + // ============================== ============================== ============================== ============================== ============================== ============================== + elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="CORRECT" && count($isNotrealiableSaved)>0 && $isNotrealiableSaved[0]['NOT_LICZ']<$ilePowtorzen_01) + { + $newLicznik = $isNotrealiableSaved[0]['NOT_LICZ']+1; + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_LICZ=".$newLicznik." WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + } + // ============================== ============================== ============================== ============================== ============================== ============================== + + + // jeśli pomiar jest niewiarygodny a jest już jaiś wpis, to "zeruje licznik", ustawia wartość licznika na 1 + // ============================== ============================== ============================== ============================== ============================== ============================== + elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="NOTREALIABLE" && count($isNotrealiableSaved)>0) + { + mysql_query("UPDATE rep_soap_syndis_notrealiable_onoff SET NOT_LICZ=1 WHERE NOT_ID=".$isNotrealiableSaved[0]['NOT_ID']); + } + // ============================== ============================== ============================== ============================== ============================== ============================== + + + // brak łączności i brak aktualnie aktywnego wpisu + // ============================== ============================== ============================== ============================== ============================== ============================== + elseif ($wl['wells'][$i]['pumpEfficiency']['flag']=="NOTREALIABLE" && count($isNotrealiableSaved)==0) + { + // pobiera informacje o studni + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl['wells'][$i]['well']['id']."'"); + + mysql_query("INSERT INTO rep_soap_syndis_notrealiable_onoff SET NOT_DRS_ID=".$wellArray[0]['DRS_ID'].",NOT_WELL_ID=".$wellArray[0]['WLL_ID'].",NOT_WELL_NAME='".$wellArray[0]['WLL_NAME']."',NOT_WHEN_DATE='".convertData($wl['wells'][$i]['pumpOnOff']['date'])."',NOT_WHEN_VALUE='".$syndisStatus."',NOT_WHEN_FLAG='NOTREALIABLE',NOT_AUDIT_WHEN_DATE=now()"); + } + // ============================== ============================== ============================== ============================== ============================== ============================== + +} + + +//mysql_query("truncate table softspm_rep.rep_002_avg_pump_working"); +//mysql_query("insert into softspm_rep.rep_002_avg_pump_working select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507) tb order by DRD_DRS_ID,DRD_AUDIT_DATE,DRD_ID"); + +mysql_close($polacz); + +echo 'Zmieniono <b>'.$ile_zmian.'</b> stanów załączenia/wyłączenia dla studni.<br/><br/>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_offReason.php b/soap_offReason.php new file mode 100644 index 0000000..43b7d42 --- /dev/null +++ b/soap_offReason.php @@ -0,0 +1,104 @@ + +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + + + + +// pobieramy tablice studni +$well_array=null; +$wynik = mysql_query("select WLL_NAME from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_STATUS_DIC_ID=3 and WLL_CAT_DIC_ID<>20 and getLastValue(507,DRS_ID)='OFF'"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["WLL_NAME"]; +} +//print_r($cl->GetWellsDataAsArray(array('G52','G54'))); //Pobieranie danych dla wszystkich studni +$wl = $cl->GetWellsDataAsArray($well_array); + + + +for($i=0; $i<count($wl["wells"]); $i++) +{ + echo "Name: ". $wl["wells"][$i]["well"]["id"]."<br/>"; + + $devID=null; $rowID=null; + + $wynik_W = mysql_query("select DRS_ID,(select DRD_ID from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=DRS_ID and DRD_AUDIT_DATE=(select max(DRD_AUDIT_DATE) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=DRS_ID)) ROW_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + if($wynik_W)while ($r_W = mysql_fetch_array($wynik_W)) + { + $devID = $r_W["DRS_ID"]; + $rowID = $r_W["ROW_ID"]; + } + + echo "devID: ".$devID."<br/>"; + echo "rowID: ".$rowID."<br/>"; + + + //sprawdza stan załączenia pompy + if ($devID>0 && $rowID>0) + { + //2017-10-17 - dodanie parametru REASON [pumpOnOffReason]: $wl["wells"][$i]["pumpOnOffReason"]["value"] + mysql_query("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$wl["wells"][$i]["pumpOnOffReason"]["value"]."' WHERE DRD_ID=".$rowID); + // ============================================================================================================================================================== + + echo("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$wl["wells"][$i]["pumpOnOffReason"]["value"]."' WHERE DRD_ID=".$rowID); + echo"<br/>"; + + echo"Zrobil UPDATE na :".$wl["wells"][$i]["well"]["id"]." [".$devID."] = ".$wl["wells"][$i]["pumpOnOffReason"]["value"]."<br/>"; + } + + echo"<br/>"; +} + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_onoff.php b/soap_onoff.php new file mode 100644 index 0000000..b26fa17 --- /dev/null +++ b/soap_onoff.php @@ -0,0 +1,131 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<meta http-equiv="Refresh" content="1" /> + +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + +//mysql_query("TRUNCATE table a_getpumpswitchhistory_ins"); + +unset($obArray); +$obArray = sqlGetResAsArray("select * from a_getpumpswitchhistory_sel where PRC_STATUS=0 limit 1"); + + + +unset($wellArray); +//$wellArray = $cl->GetPumpSwitchHistory('G54','2016-12-29T00:00:00Z'); +//$wellArray = objectToArray($wellArray); +//print_r($wellArray); + +$wellArray = objectToArray($cl->GetPumpSwitchHistory($obArray[0]['WLL_NAME'],'2014-01-01T00:00:00Z')); + +echo "STUDNIA: ".$obArray[0]['WLL_NAME']."<br/>"; +echo "Ilość pomiarów: ".count($wellArray['probes'])."<br/>"; +echo"<br/>"; + +$statZal=10; +$licz=0; + +for($i=0; $i<count($wellArray['probes']); $i++) +{ +// $licz=$i-1; +// echo "statZal 01: ".$statZal."<br/>"; +// echo "statZal 02: ".$wellArray['probes'][$i]['value']."<br/>"; +// echo "Poprzedni ".$wellArray['probes'][$licz]['value']."<br/>"; +// echo"<br/>"; + + if ($statZal != $wellArray['probes'][$i]['value']) + { + $licz=$i-1; + if ($wellArray['probes'][$i]['value'] != $wellArray['probes'][$licz]['value']) + { + if ($wellArray['probes'][$i]['value'] == 0) + mysql_query("INSERT INTO a_getpumpswitchhistory_ins SET DRS_ID=".$obArray[0]['DRS_ID'].",WLL_ID=".$obArray[0]['WLL_ID'].",WLL_NAME='".$obArray[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$obArray[0]['WLL_CAT_DIC_ID'].",DRS_DEPARTMENT='".$obArray[0]['DRS_DEPARTMENT']."',HIS_VAL='OFF',HIS_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + elseif ($wellArray['probes'][$i]['value'] == 1) + mysql_query("INSERT INTO a_getpumpswitchhistory_ins SET DRS_ID=".$obArray[0]['DRS_ID'].",WLL_ID=".$obArray[0]['WLL_ID'].",WLL_NAME='".$obArray[0]['WLL_NAME']."',WLL_CAT_DIC_ID=".$obArray[0]['WLL_CAT_DIC_ID'].",DRS_DEPARTMENT='".$obArray[0]['DRS_DEPARTMENT']."',HIS_VAL='ON',HIS_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + + echo "Zapisał: ".$wellArray['probes'][$i]['value'].", data: ".convertData($wellArray['probes'][$i]['date'])."<br/>"; + } + $statZal = $wellArray['probes'][$i]['value']; + } +// echo "Stan: ".$wellArray['probes'][$i]['value']."<br/>"; +// echo "Data: ".$wellArray['probes'][$i]['date']."<br/>"; +// echo "Flaga ".$wellArray['probes'][$i]['flag']."<br/>"; +// echo"<br/>"; +} + +mysql_query("UPDATE a_getpumpswitchhistory_sel SET PRC_STATUS=1 WHERE DRS_ID=".$obArray[0]['DRS_ID']); + + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_onoff_del.php b/soap_onoff_del.php new file mode 100644 index 0000000..649c7fc --- /dev/null +++ b/soap_onoff_del.php @@ -0,0 +1,73 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<meta http-equiv="Refresh" content="1" /> + +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; +$scriptDate = date("Y-m-d H:i:s"); +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +unset($obArray); +$obArray = sqlGetResAsArray("select * from a_getpumpswitchhistory_sel where PRC_STATUS=0 limit 1"); + + + +unset($wellArray); +//$wellArray = $cl->GetPumpSwitchHistory('G54','2016-12-29T00:00:00Z'); +//$wellArray = objectToArray($wellArray); +//print_r($wellArray); + +$wellArray = sqlGetResAsArray("select min(HIS_DATE) MIN_DATE, max(HIS_DATE) MAX_DATE from a_getpumpswitchhistory_ins where DRS_ID=".$obArray[0]['DRS_ID']); + +for($i=0; $i<count($wellArray); $i++) +{ + // usuwa historyczne wpisy + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_AUDIT_DATE>='".$wellArray[$i]['MIN_DATE']."' and DRD_AUDIT_DATE<='".$wellArray[$i]['MAX_DATE']."'"); + + mysql_query("insert into seg_dev_resources_det select null,DRS_ID,507,HIS_VAL,HIS_REASON,1,(case when HIS_USER is null then 'SYNDIS' else HIS_USER end)H_USER,HIS_DATE from a_getpumpswitchhistory_ins where DRS_ID=".$obArray[0]['DRS_ID']." order by HIS_DATE"); + + mysql_query("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_AUDIT_DATE>='".$wellArray[$i]['MIN_DATE']."' and DRD_AUDIT_DATE<='".$wellArray[$i]['MAX_DATE']."'"); + mysql_query("delete from softspm_his.seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_AUDIT_DATE>='".$wellArray[$i]['MIN_DATE']."' and DRD_AUDIT_DATE<='".$wellArray[$i]['MAX_DATE']."'"); + mysql_query("delete from softspm_his.seg_dev_resources_det_2015 where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_AUDIT_DATE>='".$wellArray[$i]['MIN_DATE']."' and DRD_AUDIT_DATE<='".$wellArray[$i]['MAX_DATE']."'"); + mysql_query("delete from softspm_his.seg_dev_resources_det_2014 where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_AUDIT_DATE>='".$wellArray[$i]['MIN_DATE']."' and DRD_AUDIT_DATE<='".$wellArray[$i]['MAX_DATE']."'"); + +} + + +mysql_query("UPDATE a_getpumpswitchhistory_sel SET PRC_STATUS=1 WHERE DRS_ID=".$obArray[0]['DRS_ID']); +echo "Zaktualizował załączenia/wyłączenia do Studni: ".$obArray[0]['WLL_NAME']."<br/>"; + + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_onoff_desc.php b/soap_onoff_desc.php new file mode 100644 index 0000000..fc26920 --- /dev/null +++ b/soap_onoff_desc.php @@ -0,0 +1,83 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<meta http-equiv="Refresh" content="1" /> + +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; +$scriptDate = date("Y-m-d H:i:s"); +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +unset($obArray); +$obArray = sqlGetResAsArray("select * from a_getpumpswitchhistory_sel where PRC_STATUS=0 limit 1"); + + + +unset($wellArray); +//$wellArray = $cl->GetPumpSwitchHistory('G54','2016-12-29T00:00:00Z'); +//$wellArray = objectToArray($wellArray); +//print_r($wellArray); + +$wellArray = sqlGetResAsArray("select * from a_getpumpswitchhistory_ins where DRS_ID=".$obArray[0]['DRS_ID']." and HIS_VAL='OFF' and HIS_DATE>='2016-04-30'"); +$licznik=0; + +for($i=0; $i<count($wellArray); $i++) +{ + unset($aArray); + //$aArray = sqlGetResAsArray("select DRD_DESCRIPTION,DRD_AUDIT_USR from seg_dev_resources_det where DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_RESOURCES_DETAIL=507 and DRD_DESCRIPTION>0 and DRD_VALUE='OFF' and DRD_AUDIT_DATE>'2016-04-30' and DRD_AUDIT_DATE<='".$wellArray[$i]['HIS_DATE']."' order by DRD_AUDIT_DATE desc limit 1"); + $aArray = sqlGetResAsArray("select DRD_DESCRIPTION,DRD_AUDIT_USR from seg_dev_resources_det where DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_RESOURCES_DETAIL=507 and DRD_DESCRIPTION>0 and DRD_VALUE='OFF' and DRD_AUDIT_DATE>=ADDDATE('".$wellArray[$i]['HIS_DATE']."', INTERVAL -3 HOUR) and DRD_AUDIT_DATE<='".$wellArray[$i]['HIS_DATE']."' order by DRD_AUDIT_DATE desc limit 1"); + if ($aArray[0]['DRD_DESCRIPTION']>0) + { + mysql_query("UPDATE a_getpumpswitchhistory_ins SET HIS_REASON='".$aArray[0]['DRD_DESCRIPTION']."',HIS_USER='".$aArray[0]['DRD_AUDIT_USR']."' WHERE ID=".$wellArray[$i]['ID']); + $licznik++; + } + else + { + unset($bArray); + //$bArray = sqlGetResAsArray("select DRD_DESCRIPTION,DRD_AUDIT_USR from seg_dev_resources_det_his where DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_RESOURCES_DETAIL=507 and DRD_DESCRIPTION>0 and DRD_VALUE='OFF' and DRD_AUDIT_DATE>'2016-04-30' and DRD_AUDIT_DATE<='".$wellArray[$i]['HIS_DATE']."' order by DRD_AUDIT_DATE desc limit 1"); + $bArray = sqlGetResAsArray("select DRD_DESCRIPTION,DRD_AUDIT_USR from seg_dev_resources_det_his where DRD_DRS_ID=".$obArray[0]['DRS_ID']." and DRD_RESOURCES_DETAIL=507 and DRD_DESCRIPTION>0 and DRD_VALUE='OFF' and DRD_AUDIT_DATE>=ADDDATE('".$wellArray[$i]['HIS_DATE']."', INTERVAL -3 HOUR) and DRD_AUDIT_DATE<='".$wellArray[$i]['HIS_DATE']."' order by DRD_AUDIT_DATE desc limit 1"); + if ($bArray[0]['DRD_DESCRIPTION']>0) + { + mysql_query("UPDATE a_getpumpswitchhistory_ins SET HIS_REASON='".$bArray[0]['DRD_DESCRIPTION']."',HIS_USER='".$bArray[0]['DRD_AUDIT_USR']."' WHERE ID=".$wellArray[$i]['ID']); + $licznik++; + } + } +} + + +mysql_query("UPDATE a_getpumpswitchhistory_sel SET PRC_STATUS=1 WHERE DRS_ID=".$obArray[0]['DRS_ID']); +echo "Zaktualizował STUDNIE: ".$obArray[0]['WLL_NAME'].", ilość powodów: ".$licznik."<br/>"; + + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_onoff_fullHis.php b/soap_onoff_fullHis.php new file mode 100644 index 0000000..7493a5f --- /dev/null +++ b/soap_onoff_fullHis.php @@ -0,0 +1,168 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<meta http-equiv="Refresh" content="1" /> + +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + +//mysql_query("TRUNCATE table a_getpumpswitchhistory_ins"); + +unset($recArray); +$recArray = sqlGetResAsArray("select * from rep_onoff_proccessing where W_STATUS=0 limit 1"); + + + +unset($wellArray); +unset($devID); $devID=0; + + + +$recArray[0]['W_NAME'] = 'A91'; + +unset($lasArrayOnOff); +$lasArrayOnOff = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID=(select max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=27229 and DRD_AUDIT_USR='SYNDIS')"); + +echo'<br/><br/>'; + +$getCurMonth = (int) date('m'); + +if ($getCurMonth>3 && $getCurMonth<11) + $offset = 2 * 60 * 60; +else + $offset = 60 * 60; + +echo $offset; +echo'<br/><br/>'; + +$utcDate = date('Y-m-d\TH:i:s\Z', strtotime($lasArrayOnOff[0]['DRD_AUDIT_DATE'])- $offset); +echo $utcDate; + +echo'<br/><br/>'; + + + +if (!empty($recArray[0]['W_NAME'])) +{ +// $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($_GET['w'],date('Y-m').'-01T00:00:00Z')); + $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($recArray[0]['W_NAME'],$utcDate)); + + $devID = sqlStringValue("select DRS_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID in (18,19) and WLL_NAME='".$recArray[0]['W_NAME']."'", "DRS_ID"); + + if (count($wellArray['probes'])>0 && $devID>0) + { + //mysql_query("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + //mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + echo("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + echo'<br>'; + echo("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + echo'<br>'; + + + for ($i=0; $i<count($wellArray['probes']); $i++) + { + echo"Pomiar[".$i."] dla stuID=".$devID."<br/>"; + echo $wellArray['probes'][$i]['value']." ".$wellArray['probes'][$i]['date']." ".$wellArray['probes'][$i]['flag']." ".$wellArray['probes'][$i]['reason']."<br/>"; + echo"<br/>"; + + // jeśli załącz + if ($wellArray['probes'][$i]['value'] == 1) + { + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo'<br>'; + + } + + // jeśli wyłącz + if ($wellArray['probes'][$i]['value'] == 0) + { + //mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo'<br>'; + + } + + } + + echo'<br>'; + echo'<br>'; + + + + } +} + +//mysql_query("UPDATE rep_onoff_proccessing SET W_STATUS=1 WHERE W_ID=".$recArray[0]['W_ID']); + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_onoff_show.php b/soap_onoff_show.php new file mode 100644 index 0000000..9745a4d --- /dev/null +++ b/soap_onoff_show.php @@ -0,0 +1,187 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> + +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + +//mysql_query("TRUNCATE table a_getpumpswitchhistory_ins"); + + +unset($wellArray); +unset($devID); $devID=0; + + +$_GET['w'] = 'G81'; + + +if (!empty($_GET['w'])) +{ +// $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($_GET['w'],date('Y-m').'-01T00:00:00Z')); + $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($_GET['w'],'2014-01-01T00:00:00Z')); + + $devID = sqlStringValue("select DRS_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID in (18,19) and WLL_NAME='".$_GET['w']."'", "DRS_ID"); + + if (count($wellArray['probes'])>0 && $devID>0) + { + mysql_query("delete from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + mysql_query("delete from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_AUDIT_USR='SYNDIS' and DRD_DRS_ID=".$devID); + + + for ($i=0; $i<count($wellArray['probes']); $i++) + { + echo"Pomiar[".$i."] dla stuID=".$devID."<br/>"; + echo $wellArray['probes'][$i]['value']." ".$wellArray['probes'][$i]['date']." ".$wellArray['probes'][$i]['flag']." ".$wellArray['probes'][$i]['reason']."<br/>"; + echo"<br/>"; + + // jeśli załącz + if ($wellArray['probes'][$i]['value'] == 1) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + + // jeśli wyłącz + if ($wellArray['probes'][$i]['value'] == 0) + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + + } + + } +} + + + +/* +unset($recArray); +$recArray = sqlGetResAsArray("select * from a_getpumpswit_onoff_0104 where WLL_STATUS=0 limit 1"); + +$wellArray = objectToArray($cl->GetPumpSwitchHistory($recArray[0]['WLL_NAME'],'2014-01-01T00:00:00Z')); +$devID = sqlStringValue("select DRS_ID from seg_wells,seg_dev_resources where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_CAT_DIC_ID in (18,19) and WLL_NAME='".$recArray[0]['WLL_NAME']."'", "DRS_ID"); + + + +echo "STUDNIA: ".$recArray[0]['WLL_NAME']."<br/>"; +echo "Ilość pomiarów: ".count($wellArray['probes'])."<br/>"; +echo"<br/>"; + +if ($devID>0 && count($wellArray['probes'])>0) +{ + mysql_query("delete from seg_dev_resources_det_0105 where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID); + mysql_query("delete from seg_dev_resources_det_0105 where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID); + echo("delete from seg_dev_resources_det_0105 where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID.";"); + echo"<br>"; + echo("delete from seg_dev_resources_det_0105 where DRD_RESOURCES_DETAIL=507 and DRD_DRS_ID=".$devID.";"); + echo"<br>"; + +} + + +$statZal=10; +$licz=0; + +for($i=0; $i<count($wellArray['probes']); $i++) +{ +// $licz=$i-1; +// echo "statZal 01: ".$statZal."<br/>"; +// echo "statZal 02: ".$wellArray['probes'][$i]['value']."<br/>"; +// echo "Poprzedni ".$wellArray['probes'][$licz]['value']."<br/>"; +// echo"<br/>"; + + if ($statZal != $wellArray['probes'][$i]['value']) + { + $licz=$i-1; + if ($wellArray['probes'][$i]['value'] != $wellArray['probes'][$licz]['value']) + { + if ($wellArray['probes'][$i]['value'] == 0) + { + mysql_query("INSERT INTO seg_dev_resources_det_0105 SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo("INSERT INTO seg_dev_resources_det_0105 SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."';"); + //echo "Zapisał: ".$wellArray['probes'][$i]['value'].", data: ".convertData($wellArray['probes'][$i]['date'])."<br/>"; + echo"<br>"; + } + elseif ($wellArray['probes'][$i]['value'] == 1) + { + mysql_query("INSERT INTO seg_dev_resources_det_0105 SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + echo("INSERT INTO seg_dev_resources_det_0105 SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."';"); + //echo "Zapisał: ".$wellArray['probes'][$i]['value'].", data: ".convertData($wellArray['probes'][$i]['date'])."<br/>"; + echo"<br>"; + } + } + $statZal = $wellArray['probes'][$i]['value']; + } + +} + +//mysql_query("truncate table softspm_rep.rep_002_avg_pump_working"); +//mysql_query("insert into softspm_rep.rep_002_avg_pump_working select null,DRD_VALUE,DRD_DRS_ID,DRD_AUDIT_DATE from (select * from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 union select * from seg_dev_resources_det_his where DRD_RESOURCES_DETAIL=507) tb order by DRD_DRS_ID,DRD_AUDIT_DATE"); +mysql_query("UPDATE a_getpumpswit_onoff_0104 SET WLL_STATUS=1 WHERE WLL_ID=".$recArray[0]['WLL_ID']); +*/ + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_piezo_history.php b/soap_piezo_history.php new file mode 100644 index 0000000..1880997 --- /dev/null +++ b/soap_piezo_history.php @@ -0,0 +1,61 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function insert_new_record($devID, $dicID, $value,$insertDate) +{ + $value = round($value,2); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".$value."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"); + //echo"INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=".$dicID.",DRD_VALUE='".$value."',DRD_EXPORT_SEGAP='0',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$insertDate."'"; + //echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$dicID, "DIC_POL_LANG")." [$dicID]: ".$value; + //echo"</br>"; +} + +if (empty($_GET['w'])) $_GET['w']='G54'; + +print_r($cl->GetWellDataAsArray($_GET['w'])); //Pobieranie danych jednej pompy - zwraca dane jako tablica + + +//$wl["pumpEfficiency"]["value"] * 60; + + + +mysql_close($polacz); + +echo 'finish processing ...<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/soap_power_while.php b/soap_power_while.php new file mode 100644 index 0000000..501554e --- /dev/null +++ b/soap_power_while.php @@ -0,0 +1,109 @@ +<?php + +require_once('./func.php'); +require_once('./dbaccess.php'); +require_once('./polynomial/math.php'); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + +function getPolyHp($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['h']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} +function getPolyPe($dataArray,$inParam) +{ + unset($resVal);unset($tbArray); + for($i=0; $i<count($dataArray); $i++) + $tbArray[] = array($dataArray[$i]['q'],$dataArray[$i]['p']); + + if (count($tbArray)>1) + { + $polynomial = new zc_math_polynomial($tbArray); + $polynomial->calculate_coefficients(); + $resVal = $polynomial->get_y($inParam); + } + else + $resVal=0; + + return round($resVal,2); +} + + + +unset($wellArray); +//$wellArray = sqlGetResAsArray("select * from seg_wells,seg_dev_resources left join rep_his_data_everyday on RHD_DRS_ID=DRS_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_CAT_DIC_ID=20 and RHD_DRS_ID>0 and RHD_Q_VAL>0 and (RHD_PE_VAL<=0 or RHD_PE_VAL is null) and RHD_DATE>ADDDATE(now(), INTERVAL -180 DAY) order by RHD_DATE desc limit 500"); +$wellArray = sqlGetResAsArray("select * from seg_wells,seg_dev_resources left join rep_his_data_everyday on RHD_DRS_ID=DRS_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_CAT_DIC_ID=20 and RHD_DRS_ID>0 and RHD_Q_VAL>0 and (RHD_PE_VAL<=0 or RHD_PE_VAL is null) order by RHD_DATE desc limit 500"); + +for ($i=0; $i<count($wellArray); $i++) +{ + unset($aggArray); + $aggArray = sqlGetResAsArray("select * from seg_wells_exchanged where WLE_WLL_ID=".$wellArray[$i]['WLL_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."' and (WLE_DATE_TO is null or WLE_DATE_TO>='".$wellArray[$i]['RHD_DATE']."')"); + //echo("select * from seg_wells_exchanged where WLE_WLL_ID=".$wellArray[$i]['WLL_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."' and (WLE_DATE_TO is null or WLE_DATE_TO>='".$wellArray[$i]['RHD_DATE']."')"); + //echo'<br>'; + + unset($testIDArray); + if (strlen($aggArray[0]['WLE_PUMP_NO'])>0 && strlen($aggArray[0]['WLE_ENG_NO'])>0) + { + $testIDArray = sqlGetResAsArray("select max(TST_ID) TST_ID from tst_tests where TST_PUP_SN_NO='".$aggArray[0]['WLE_PUMP_NO']."' and TST_ENG_SN_NO='".$aggArray[0]['WLE_ENG_NO']."'"); + //echo("select max(TST_ID) TST_ID from tst_tests where TST_PUP_SN_NO='".$aggArray[0]['WLE_PUMP_NO']."' and TST_ENG_SN_NO='".$aggArray[0]['WLE_ENG_NO']."'"); + //echo'<br>'; + } + else + { + mysql_query("delete from rep_his_data_everyday WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + //echo("delete from rep_his_data_everyday WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + //echo'<br>'; + } + + + unset($probaArray); + unset($mocSP); + + if ($testIDArray[0]['TST_ID']>0) + { + $wynik = mysql_query("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=".$testIDArray[0]['TST_ID']." order by TSD_MSR_STEP"); + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $probaArray[] = array( + 'q' => (float) $r["TSD_VAL_04"], + 'h' => (float) $r["TSD_VAL_08"], + 'p' => (float) $r["TSD_VAL_14"] + ); + } + + $mocSP = (float) getPolyPe($probaArray,$wellArray[$i]['RHD_Q_VAL']); + + // + if ($wellArray[$i]['RHD_ID']>0) + { + mysql_query("UPDATE rep_his_data_everyday SET RHD_PE_VAL='".$mocSP."' WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_PE_VAL='".$mocSP."' WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo'<br>'; + } + + } +} + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; + +mysql_close($polacz); + +?> \ No newline at end of file diff --git a/soap_prim_second.php b/soap_prim_second.php new file mode 100644 index 0000000..e5e556f --- /dev/null +++ b/soap_prim_second.php @@ -0,0 +1,132 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); + +function sqlGetResAsArray($query) +{ + $res=null; + $res = array(); + + if(!$results = mysql_query($query)){ + echo mysql_error(); + return false; + } + for($i=0; $row=mysql_fetch_assoc($results); $i++) + $res[$i]=$row; + + return $res; +} + +echo 'starting ...<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + + +// ================================================================================================================================ // +// ================================================================================================================================ // +$polaczSecond = mysql_connect("localhost", "root", "Mikronika123") or die ('cannot connect to db'); mysql_select_db("softspm"); +mysql_query("SET NAMES utf8"); mysql_query("SET CHARACTER_SET utf8_general_ci"); + + // zeruje stare dane + $minuta = (int) date('i'); + if ($minuta==8 || $minuta==13 || $minuta==18 || $minuta==23 || $minuta==28 || $minuta==33 || $minuta==38 || $minuta==43 || $minuta==48 || $minuta==53 || $minuta==58) + mysql_query("delete from rep_his_data_everyday where RHD_DATE>='".date('Y-m-d H').":00:00'"); + + unset($maxWellSec); unset($maxWellID); + $maxWellSec = sqlGetResAsArray("select max(RHD_ID) MAX_ID from rep_his_data_everyday"); + $maxWellID = $maxWellSec[0]['MAX_ID']; + + unset($maxDetSec); unset($maxDetID); + $maxDetSec = sqlGetResAsArray("select max(DRD_ID) MAX_ID from seg_dev_resources_det"); + $maxDetID = $maxDetSec[0]['MAX_ID']; + + unset($cntArr); + $cntArr = sqlGetResAsArray("select count(SQD_ID) ILE from rep_soap_syndis_quality_data"); + if ($cntArr[0]['ILE']>0) + mysql_query("truncate table rep_soap_syndis_quality_data"); + + unset($cntTest); + $cntTest = sqlGetResAsArray("select count(TST_ID) ILE from tst_tests"); + + + echo 'maxWellID: '.$maxWellID.'<br/>'; + echo 'maxDetID: '.$maxDetID.'<br/>'; + +mysql_close($polaczSecond); +// ================================================================================================================================ // + +// sprawdz, czy czasami nie oddtwarza bazy +if ($cntTest[0]['ILE']>0) +{ + // ================================================================================================================================ // + // ================================================================================================================================ // + $polaczPrim = mysql_connect("172.22.64.101", "root", "Mikronika123") or die ('cannot connect to db'); mysql_select_db("softspm"); + mysql_query("SET NAMES utf8"); mysql_query("SET CHARACTER_SET utf8_general_ci"); + + unset($wellArray); unset($detlArray); + $wellArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID>".$maxWellID." order by RHD_ID"); + $detlArray = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_ID>".$maxDetID." order by DRD_ID"); + + mysql_close($polaczPrim); + // ================================================================================================================================ // + + // ================================================================================================================================ // + // ================================================================================================================================ // + $polaczSecond = mysql_connect("localhost", "root", "Mikronika123") or die ('cannot connect to db'); mysql_select_db("softspm"); + mysql_query("SET NAMES utf8"); mysql_query("SET CHARACTER_SET utf8_general_ci"); + + foreach ($wellArray as $wellTB) + { + mysql_query("INSERT INTO rep_his_data_everyday SET + RHD_ID='".$wellTB['RHD_ID']."', + RHD_DRS_ID='".$wellTB['RHD_DRS_ID']."', + RHD_DATE='".$wellTB['RHD_DATE']."', + RHD_HST0_VAL='".$wellTB['RHD_HST0_VAL']."', + RHD_HST_VAL='".$wellTB['RHD_HST_VAL']."', + RHD_HD_VAL='".$wellTB['RHD_HD_VAL']."', + RHD_Q_VAL='".$wellTB['RHD_Q_VAL']."', + RHD_P1_VAL='".$wellTB['RHD_P1_VAL']."', + RHD_P2_VAL='".$wellTB['RHD_P2_VAL']."', + RHD_I_VAL='".$wellTB['RHD_I_VAL']."', + RHD_U_VAL='".$wellTB['RHD_U_VAL']."', + RHD_PE_VAL='".$wellTB['RHD_PE_VAL']."', + RHD_COS_VAL='".$wellTB['RHD_COS_VAL']."', + RHD_PP_VAL='".$wellTB['RHD_PP_VAL']."', + RHD_HH_VAL='".$wellTB['RHD_HH_VAL']."', + RHD_VM3_VAL='".$wellTB['RHD_VM3_VAL']."', + RHD_WTEMP_VAL='".$wellTB['RHD_WTEMP_VAL']."', + RHD_DGN_VAL='".$wellTB['RHD_DGN_VAL']."', + RHD_WORK_TIME_VAL='".$wellTB['RHD_WORK_TIME_VAL']."', + RHD_SPM_WT='".$wellTB['RHD_SPM_WT']."', + RHD_SPM_PW='".$wellTB['RHD_SPM_PW']."', + RHD_AUDIT_CD='".$wellTB['RHD_AUDIT_CD']."'"); + } + echo 'Zaktualizowano studnie...<br>'; + + mysql_query("update rep_his_data_everyday set RHD_HST0_VAL=null where RHD_HST0_VAL=0"); + mysql_query("update rep_his_data_everyday set RHD_HST_VAL=null where RHD_HST_VAL=0"); + + + foreach ($detlArray as $detTB) + { + mysql_query("INSERT INTO seg_dev_resources_det SET + DRD_ID='".$detTB['DRD_ID']."', + DRD_DRS_ID='".$detTB['DRD_DRS_ID']."', + DRD_RESOURCES_DETAIL='".$detTB['DRD_RESOURCES_DETAIL']."', + DRD_VALUE='".$detTB['DRD_VALUE']."', + DRD_DESCRIPTION='".$detTB['DRD_DESCRIPTION']."', + DRD_EXPORT_SEGAP='".$detTB['DRD_EXPORT_SEGAP']."', + DRD_AUDIT_USR='".$detTB['DRD_AUDIT_USR']."', + DRD_AUDIT_DATE='".$detTB['DRD_AUDIT_DATE']."'"); + } + echo 'Zaktualizowano detale...<br>'; + + + + mysql_close($polaczSecond); + // ================================================================================================================================ // +} + +echo 'finish processing ...<br>'; + +?> \ No newline at end of file diff --git a/soap_q_manual_while.php b/soap_q_manual_while.php new file mode 100644 index 0000000..ffc23d1 --- /dev/null +++ b/soap_q_manual_while.php @@ -0,0 +1,57 @@ +<?php +require_once('./func.php'); +require_once('./dbaccess.php'); +require_once('./polynomial/math.php'); + + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +echo"Kopiowanie danych dla studni pracujacych – SPM inne<br/>"; +echo"START: ".date('Y-m-d H:i:m')."<br/>"; + + +//sprawdza w danym momencie zabudowane agregaty +unset($wellManualArray); +$wellManualArray = sqlGetResAsArray("select * from seg_dev_resources,seg_wells left join seg_wells_exchanged on WLL_ID=WLE_WLL_ID where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and WLL_CAT_DIC_ID=20 and WLE_DATE_FROM<=now() and (WLE_DATE_TO>=now() or WLE_DATE_TO is null) group by WLL_ID"); +for ($i=0; $i<count($wellManualArray); $i++) +{ + // sprawdza, czy pompa obecnie pracuje + unset($wellOnOffStatus); + $wellOnOffStatus = sqlGetResAsArray("select * from softspm_rep.rep_002_avg_pump_working where WST_ID=(select max(WST_ID) from softspm_rep.rep_002_avg_pump_working where WST_DRS_ID=".$wellManualArray[$i]['DRS_ID']." and WST_DATE<=now())"); + if ($wellOnOffStatus[0]['WST_STATUS_VAL']=='ON') + { + //sprawdza, czy dla zabudowanego agregatu jest jakiś pomiar Q + unset($lastMeasurment); + $lastMeasurment = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_DRS_ID=".$wellManualArray[$i]['DRS_ID']." and RHD_Q_VAL>0 and RHD_DATE>='".$wellManualArray[$i]['WLE_DATE_FROM']."')"); + if ($lastMeasurment[0]['RHD_Q_VAL']>0) + { + // sprawdza, czy w danym dniu była już kopiowana wartość z poprzedniego pomiaru - jeśli nie to wstawia + unset($checkTodayInput); + $checkTodayInput = sqlGetResAsArray("select count(*) ILE from rep_his_data_everyday where RHD_DRS_ID=".$wellManualArray[$i]['DRS_ID']." and RHD_Q_VAL>0 and RHD_DATE>='".date('Y-m-d')." 00:00:00'"); + if($checkTodayInput[0]['ILE']==0) + { + // wstawia poprzednią wartość + unset($query); + $query = "INSERT INTO rep_his_data_everyday SET RHD_DRS_ID=".$wellManualArray[$i]['DRS_ID'].",RHD_DATE=now()"; + if ($lastMeasurment[0]['RHD_HD_VAL']>0) $query .= ",RHD_HD_VAL=".$lastMeasurment[0]['RHD_HD_VAL']; + if ($lastMeasurment[0]['RHD_Q_VAL']>0) $query .= ",RHD_Q_VAL=".$lastMeasurment[0]['RHD_Q_VAL']; + if ($lastMeasurment[0]['RHD_P1_VAL']>0) $query .= ",RHD_P1_VAL=".$lastMeasurment[0]['RHD_P1_VAL']; + if ($lastMeasurment[0]['RHD_P2_VAL']>0) $query .= ",RHD_P2_VAL=".$lastMeasurment[0]['RHD_P2_VAL']; + if ($lastMeasurment[0]['RHD_I_VAL']>0) $query .= ",RHD_I_VAL=".$lastMeasurment[0]['RHD_I_VAL']; + if ($lastMeasurment[0]['RHD_U_VAL']>0) $query .= ",RHD_U_VAL=".$lastMeasurment[0]['RHD_U_VAL']; + if ($lastMeasurment[0]['RHD_COS_VAL']>0) $query .= ",RHD_COS_VAL=".$lastMeasurment[0]['RHD_COS_VAL']; + $query .= ",RHD_AUDIT_CD=now();"; + + mysql_query($query); + } + } + } +} + + +echo"STOP: ".date('Y-m-d H:i:m')."<br/>"; +mysql_close($polacz); +?> \ No newline at end of file diff --git a/soap_reason_1318.php b/soap_reason_1318.php new file mode 100644 index 0000000..fbab9e0 --- /dev/null +++ b/soap_reason_1318.php @@ -0,0 +1,102 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> + +<?php session_start(); +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); + +ini_set('soap.wsdl_cache_enabled',0); +ini_set('soap.wsdl_cache_ttl',0); +$cl = new SyndisConnector("http://172.22.64.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +$cl->__setLocation('http://172.22.64.101:3615/'); + +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +function convertData($insertDate) +{ + unset($res); + //re-contruct to format + $res = date('Y-m-d H:i:s', strtotime($insertDate)); + + return $res; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + + +unset($recArray); +//$recArray = sqlGetResAsArray("select WLL_NAME as W_NAME,DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_ID in (select DRD_DRS_ID from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and DRD_DESCRIPTION=1318 and DRD_AUDIT_DATE>= DATE_ADD(now(), INTERVAL '-5' HOUR))"); +$recArray = sqlGetResAsArray("select WLL_NAME as W_NAME,DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_TYPE=12 and DRS_DEV_ID=WLL_ID and DRS_ID in (select DRD_DRS_ID from seg_dev_resources_det where DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and DRD_DESCRIPTION=1318 and DRD_AUDIT_DATE>= DATE_ADD(now(), INTERVAL '-1' DAY))"); +echo'<br/><br/>'; + + + + +for ($std=0; $std<count($recArray); $std++) +{ +// echo 'Studnia: '.$recArray[$std]['W_NAME']; +// echo'<br/>'; + + unset($wellArray); + $wellArray = objectToArray($cl->GetPumpSwitchAndReasonsHistory($recArray[$std]['W_NAME'],date('Y-m').'-01T00:00:00Z')); + + if (count($wellArray['probes'])>0 && $recArray[$std]['DRS_ID']>0) + { + for ($i=0; $i<count($wellArray['probes']); $i++) + { + // jeśli wyłącz + if ($wellArray['probes'][$i]['value'] == 0) + { + unset($zeroMeas); + $zeroMeas = sqlGetResAsArray("select * from seg_dev_resources_det where DRD_DRS_ID=".$recArray[$std]['DRS_ID']." and DRD_RESOURCES_DETAIL=507 and DRD_VALUE='OFF' and (DRD_DESCRIPTION=1318 or DRD_DESCRIPTION=0) and DRD_AUDIT_DATE='".convertData($wellArray['probes'][$i]['date'])."'"); + + if (count($zeroMeas)>0 && $wellArray['probes'][$i]['reason']!=0 && $wellArray['probes'][$i]['reason']!=1318 && $zeroMeas[0]['DRD_DESCRIPTION']==1318) + { + echo 'Studnia: '.$recArray[$std]['W_NAME']; + echo'<br/>'; + mysql_query("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_AUDIT_USR='SYNDIS_UPDATE' WHERE DRD_ID=".$zeroMeas[0]['DRD_ID']); + //echo("UPDATE seg_dev_resources_det SET DRD_DESCRIPTION='".$wellArray['probes'][$i]['reason']."',DRD_AUDIT_USR='SYNDIS_UPDATE' WHERE DRD_ID=".$zeroMeas[0]['DRD_ID']); + //echo'<br/>'; + } + } + } + } + echo'<br/>'; +} + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +?> \ No newline at end of file diff --git a/soap_time_while.php b/soap_time_while.php new file mode 100644 index 0000000..fd0cdbd --- /dev/null +++ b/soap_time_while.php @@ -0,0 +1,75 @@ +<!-- +<meta http-equiv="Refresh" content="1" /> +--> + +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>SoftSPM - Time & Water</title> + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> +</head> +<body> +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +require_once('./polynomial/PolynomialRegression.php' ); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +echo'Start: '.date('Y-m-d H:i:s').'<br/><br/>'; + +?> + +<?php + +//studnie +$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DATE>='2021-01-01 00:00:00' and (RHD_SPM_WT is null or RHD_WORK_TIME_VAL is null) order by RHD_DATE desc limit 500"); +for($i=0; $i<count($wellArray); $i++) +{ + if ($wellArray[$i]['RHD_Q_VAL']>0 || $wellArray[$i]['RHD_I_VAL']>0) + { + unset($czasArray); + $czasArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where WLE_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."' and (WLE_DATE_TO>='".$wellArray[$i]['RHD_DATE']."' or WLE_DATE_TO is null)"); + unset($czas); + if (strlen($czasArray[0]['WLE_DATE_TO']>8)) + { + if ( (strtotime($wellArray[$i]['RHD_DATE']) - strtotime($czasArray[0]['WLE_DATE_TO']))>0 ) + $wellArray[$i]['RHD_DATE'] = $czasArray[0]['WLE_DATE_TO']; + } + + $czas = fCzas($wellArray[$i]['RHD_DRS_ID'], $czasArray[0]['WLE_DATE_FROM'], $wellArray[$i]['RHD_DATE']); + $czas = round($czas/3600,2); + + //echo "Studnia: ".$wellArray[$i]['RHD_DRS_ID'].", data: ".$wellArray[$i]['RHD_DATE'].", CZAS=".$czas."<br>"; + + $woda=0; + if($czas>0) + { + $woda=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and AVG_DATE>=ADDDATE('".$czasArray[0]['WLE_DATE_FROM']."', INTERVAL -1 DAY) and AVG_DATE<='".$wellArray[$i]['RHD_DATE']."'", "AVG_Q_VAL"); + } + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + } +} +echo "Przeliczono czas i wodę dla <b>".count($wellArray)."</b> pomiarów. <br/><br/>"; +?> + +<?php +mysql_close($polacz); + +echo'Finish: '.date('Y-m-d H:i:s').'<br/><br/>'; + +?> +</body> +</html> \ No newline at end of file diff --git a/soap_update5min.php b/soap_update5min.php new file mode 100644 index 0000000..e9c1f91 --- /dev/null +++ b/soap_update5min.php @@ -0,0 +1,317 @@ +<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8"> +<?php +error_reporting(E_ALL); +echo 'starting ...<br>'; +require_once("soap.php"); +$cl = new SyndisConnector("http://172.21.11.101/SyndisSpm.wsdl"); //zmienić URL na inny - ten kieruje na moj komputer +//$cl->__setLocation('http://172.20.43.10:3615/'); +$cl->__setLocation('http://172.21.11.101:3615/'); +echo 'connected ...<br>'; +echo 'Start: '.date("Y-m-d H:i:s").'<br>'; + +$scriptDate = date("Y-m-d H:i:s"); + +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +function update_new_record($devID, $dicID, $value,$insertDate) +{ + $insertDate = str_replace(array('T','Z'), array(' ',''),$insertDate); + + $value = round($value,2); + + $drdID = sqlValue("select SQL_NO_CACHE max(DRD_ID) from seg_dev_resources_det where DRD_RESOURCES_DETAIL=".$dicID." and DRD_DRS_ID=".$devID); + if ($drdID>0) + { + mysql_query("UPDATE seg_dev_resources_det SET DRD_VALUE='".round($value,2)."',DRD_AUDIT_DATE='".$insertDate."',DRD_AUDIT_USR='SYNDIS' WHERE DRD_ID=".$drdID); +// echo sqlStringValue("select DIC_POL_LANG from sys_dictionaries where DIC_ID=".$dicID, "DIC_POL_LANG")." [$dicID]: ".$value; + } + //echo"</br>"; +} + + + + +function isNewestData($devID,$dicID,$insertDate) +{ + $res = false; + $insertDate = str_replace(array('T','Z'), array(' ',''),$insertDate); + $insertDateValue = (float) str_replace(array('-',':',' '),array('','',''),$insertDate); + + $lastMasureDate = sqlStringValue("select getLastMeasureDate(".$dicID.",".$devID.") MT","MT"); + $lastMasureDateValue = (float) str_replace(array('-',':',' '),array('','',''),$lastMasureDate); + + if ($insertDateValue>$lastMasureDateValue) + $res=true; + + return $res; +} + +function convertData($insertDate) +{ + unset($res); + $res = str_replace(array('T','Z'), array(' ',''),$insertDate); + + return $res; +} + + + + +// pobieramy tablice studni +$well_array=null; +$wynik = mysql_query("select DISTINCT DRD_OBJECT_NAME from seg_dev_major_data left join seg_wells on DRD_OBJECT_NAME=WLL_NAME where DRD_OBJECT_TYPE='WELL' and DMD_WORK_STATUS='1' and WLL_HH_SCOPE>0 and WLL_CAT_DIC_ID in (18,19)"); +if($wynik)while ($r = mysql_fetch_array($wynik)) +{ + $well_array[] = $r["DRD_OBJECT_NAME"]; +} + +mysql_query("truncate table rep_soap_syndis_update5min_data"); + +//print_r($cl->GetWellsDataAsArray(array('G52','G54'))); //Pobieranie danych dla wszystkich studni +$wl = $cl->GetWellsDataAsArray($well_array); + +for($i=0; $i<count($wl["wells"]); $i++) +{ + //echo "Name: ". $wl["wells"][$i]["well"]["id"]."<br/>"; + + $devID=null; $wellID=null; $vpp=null; $vhh=null; $onOffStatus=null; + $wynik_W = mysql_query("select DRS_ID,WLL_ID,WLL_PP_SCOPE,WLL_HH_SCOPE,WLL_CAT_DIC_ID from seg_wells left join seg_dev_resources on WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 where WLL_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + if($wynik_W)while ($r_W = mysql_fetch_array($wynik_W)) + { + $devID = $r_W["DRS_ID"]; + $wellID = $r_W["WLL_ID"]; + $vpp=$r_W["WLL_PP_SCOPE"]; if ($vpp==0) $vpp=500; + $vhh=$r_W["WLL_HH_SCOPE"]; + $wellType = $r_W["WLL_CAT_DIC_ID"]; + } + + + //sprawdza stan załączenia pompy + if (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='ON' && $wl["wells"][$i]["pumpOnOff"]["value"]==0) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$scriptDate."'"); + } + //sprawdza stan załączenia pompy + elseif (sqlStringValue("select getLastValue(507,".$devID.") ONF", "ONF")=='OFF' && $wl["wells"][$i]["pumpOnOff"]["value"]==1) + { + //INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=1234,DRD_RESOURCES_DETAIL=507,DRD_VALUE='OFF',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE=now(); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='ON',DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$scriptDate."'"); + } + + $ppValue = (float) $wl["wells"][$i]["pressureInPistonBody"]["value"]; + $ppValue = (float) ($ppValue - (($wl["wells"][$i]["barometricPressuremA"]["value"]*10)/98)); + $ppFlag = $wl["wells"][$i]["pressureInPistonBody"]["flag"]; + + unset($lpValue); + $lpValue = (float) sqlStringValue("select getLastValue(240,".$devID.") HHV", "HHV"); + $hhValue = (float) $lpValue - ($wl["wells"][$i]["dynamicWaterTable"]["value"]); + $hhFlag = $wl["wells"][$i]["dynamicWaterTable"]["flag"]; + // ============================================================================== + + //rejestruje dane bez względu na ich jakość - prezentacja informacji w SYNDIS + //INSERT INTO rep_soap_syndis_quality_data SET SQD_DRS_ID=111,SQD_OBJECT_NAME='111',SQD_NAME='111',SQD_VAL_Q=111,SQD_FLG_Q='111',SQD_VAL_P1=111,SQD_FLG_P1='111',SQD_VAL_P2=111,SQD_FLG_P2='111',SQD_VAL_PE=111,SQD_FLG_PE='111',SQD_VAL_PP=111,SQD_FLG_PP='111',SQD_VAL_HH=111,SQD_FLG_HH='111',SQD_VAL_HD=111,SQD_FLG_HD='111',SQD_VAL_ONOFF=111,SQD_FLG_ONOFF='111',SQD_AUDIT_CD=now(); + if (sqlValue("select count(*) from rep_soap_syndis_quality_data where SQD_DRS_ID=".$devID)==0) + { + mysql_query(" + INSERT INTO rep_soap_syndis_quality_data SET + SQD_DRS_ID=".$devID.", + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' + "); + } + else { + + mysql_query(" + update rep_soap_syndis_quality_data SET + SQD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."', + SQD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).", + SQD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."', + SQD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].", + SQD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."', + SQD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].", + SQD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."', + SQD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].", + SQD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."', + SQD_VAL_PP=".$ppValue.", + SQD_FLG_PP='".$ppFlag."', + SQD_VAL_HH=".$hhValue.", + SQD_FLG_HH='".$hhFlag."', + SQD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].", + SQD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."', + SQD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].", + SQD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."', + SQD_AUDIT_CD='".$scriptDate."' where SQD_DRS_ID=".$devID + ); + } + // ============================================================================== + + + if ($devID>0) + { + $measureQuery = "INSERT INTO rep_soap_syndis_update5min_data SET "; + $measureQuery .= "SUD_DRS_ID=".$devID.",SUD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',SUD_OBJECT_TYPE=".$wellType.","; + + //prąd fazy L1 zasilania pompy + $measureQuery .= "SUD_ID_L1=270,SUD_VAL_L1=".$wl["wells"][$i]["currentL1"]["value"].",SUD_FLG_L1='".$wl["wells"][$i]["currentL1"]["flag"]."',SUD_DATE_L1='".convertData($wl["wells"][$i]["currentL1"]["date"])."',"; + //prąd fazy L2 zasilania pompy + $measureQuery .= "SUD_ID_L2=710,SUD_VAL_L2=".$wl["wells"][$i]["currentL2"]["value"].",SUD_FLG_L2='".$wl["wells"][$i]["currentL2"]["flag"]."',SUD_DATE_L2='".convertData($wl["wells"][$i]["currentL2"]["date"])."',"; + //prąd fazy L3 zasilania pompy + $measureQuery .= "SUD_ID_L3=711,SUD_VAL_L3=".$wl["wells"][$i]["currentL3"]["value"].",SUD_FLG_L3='".$wl["wells"][$i]["currentL3"]["flag"]."',SUD_DATE_L3='".convertData($wl["wells"][$i]["currentL3"]["date"])."',"; + //[voltageL12] => U L12 [V] - napięcie międzyfazowe L1-L2 + $measureQuery .= "SUD_ID_UL12=275,SUD_VAL_UL12=".$wl["wells"][$i]["voltageL12"]["value"].",SUD_FLG_UL12='".$wl["wells"][$i]["voltageL12"]["flag"]."',SUD_DATE_UL12='".convertData($wl["wells"][$i]["voltageL12"]["date"])."',"; + //[voltageL23] => U L23 [V] - napięcie międzyfazowe L2-L3 + $measureQuery .= "SUD_ID_UL23=712,SUD_VAL_UL23=".$wl["wells"][$i]["voltageL23"]["value"].",SUD_FLG_UL23='".$wl["wells"][$i]["voltageL23"]["flag"]."',SUD_DATE_UL23='".convertData($wl["wells"][$i]["voltageL23"]["date"])."',"; + //[throttlePosition] => Położenie przepustnicy [*] + if ($wellType==19) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=".$wl["wells"][$i]["throttlePosition"]["value"].",SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + { + $tmpDivP1P2=0; + $tmpDivP1P2 = (float) ($wl["wells"][$i]["pressureAfterThrottle"]["value"] / $wl["wells"][$i]["pressureBeforeThrottle"]["value"]); + if ($tmpDivP1P2>0.93) + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=100,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + else + $measureQuery .= "SUD_ID_TRP=730,SUD_VAL_TRP=50,SUD_FLG_TRP='".$wl["wells"][$i]["throttlePosition"]["flag"]."',SUD_DATE_TRP='".convertData($wl["wells"][$i]["throttlePosition"]["date"])."',"; + } + //[waterTemperature] => Tw [*C] + $measureQuery .= "SUD_ID_TW=245,SUD_VAL_TW=".$wl["wells"][$i]["waterTemperature"]["value"].",SUD_FLG_TW='".$wl["wells"][$i]["waterTemperature"]["flag"]."',SUD_DATE_TW='".convertData($wl["wells"][$i]["waterTemperature"]["date"])."',"; + //[activePower] => P [kW] + $measureQuery .= "SUD_ID_PE=260,SUD_VAL_PE=".$wl["wells"][$i]["activePower"]["value"].",SUD_FLG_PE='".$wl["wells"][$i]["activePower"]["flag"]."',SUD_DATE_PE='".convertData($wl["wells"][$i]["activePower"]["date"])."',"; + //[cos] => cos(FI) + $measureQuery .= "SUD_ID_CFI=280,SUD_VAL_CFI=".$wl["wells"][$i]["cos"]["value"].",SUD_FLG_CFI='".$wl["wells"][$i]["cos"]["flag"]."',SUD_DATE_CFI='".convertData($wl["wells"][$i]["cos"]["date"])."',"; + //[activeEnergy] => E [kWh] + $measureQuery .= "SUD_ID_KWH=265,SUD_VAL_KWH=".$wl["wells"][$i]["activeEnergy"]["value"].",SUD_FLG_KWH='".$wl["wells"][$i]["activeEnergy"]["flag"]."',SUD_DATE_KWH='".convertData($wl["wells"][$i]["activeEnergy"]["date"])."',"; + //[pumpedWaterAmount] => V [m3] + $measureQuery .= "SUD_ID_VM3=230,SUD_VAL_VM3=".$wl["wells"][$i]["pumpedWaterAmount"]["value"].",SUD_FLG_VM3='".$wl["wells"][$i]["pumpedWaterAmount"]["flag"]."',SUD_DATE_VM3='".convertData($wl["wells"][$i]["pumpedWaterAmount"]["date"])."',"; + //[ClInPumpedWater] => ch [mg/l] + $measureQuery .= "SUD_ID_CHL=719,SUD_VAL_CHL=".$wl["wells"][$i]["ClInPumpedWater"]["value"].",SUD_FLG_CHL='".$wl["wells"][$i]["ClInPumpedWater"]["flag"]."',SUD_DATE_CHL='".convertData($wl["wells"][$i]["ClInPumpedWater"]["date"])."',"; + //[energyConsumption] => Jednostkowe zużycie energii [kWh/m3/m] + $measureQuery .= "SUD_ID_ECM=721,SUD_VAL_ECM=".$wl["wells"][$i]["energyConsumption"]["value"].",SUD_FLG_ECM='".$wl["wells"][$i]["energyConsumption"]["flag"]."',SUD_DATE_ECM='".convertData($wl["wells"][$i]["energyConsumption"]["date"])."',"; + //[pumpRuntime] => t [h] + $measureQuery .= "SUD_ID_RUTM=290,SUD_VAL_RUTM=".$wl["wells"][$i]["pumpRuntime"]["value"].",SUD_FLG_RUTM='".$wl["wells"][$i]["pumpRuntime"]["flag"]."',SUD_DATE_RUTM='".convertData($wl["wells"][$i]["pumpRuntime"]["date"])."',"; + //[dynamicWaterTable] => HD [m] + $measureQuery .= "SUD_ID_HD=205,SUD_VAL_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].",SUD_FLG_HD='".$wl["wells"][$i]["dynamicWaterTable"]["flag"]."',SUD_DATE_HD='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + //[staticWaterTable] => HST [m] + $measureQuery .= "SUD_ID_HST=210,SUD_VAL_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",SUD_FLG_HST='".$wl["wells"][$i]["staticWaterTable"]["flag"]."',SUD_DATE_HST='".convertData($wl["wells"][$i]["staticWaterTable"]["date"])."',"; + //[pressureBeforeThrottle] => p1 [kPa] + $measureQuery .= "SUD_ID_P1=215,SUD_VAL_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].",SUD_FLG_P1='".$wl["wells"][$i]["pressureBeforeThrottle"]["flag"]."',SUD_DATE_P1='".convertData($wl["wells"][$i]["pressureBeforeThrottle"]["date"])."',"; + //[pressureAfterThrottle] => p2 [kPa] + $measureQuery .= "SUD_ID_P2=220,SUD_VAL_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].",SUD_FLG_P2='".$wl["wells"][$i]["pressureAfterThrottle"]["flag"]."',SUD_DATE_P2='".convertData($wl["wells"][$i]["pressureAfterThrottle"]["date"])."',"; + //[barometricPressuremA] => Ciśnienie barometryczne pB[mA] - zakres 4-20 + $measureQuery .= "SUD_ID_PB=225,SUD_VAL_PB=".($wl["wells"][$i]["barometricPressuremA"]["value"] * 10).",SUD_FLG_PB='".$wl["wells"][$i]["barometricPressuremA"]["flag"]."',SUD_DATE_PB='".convertData($wl["wells"][$i]["barometricPressuremA"]["date"])."',"; + //[pumpEfficiency] => Q [m3/min] + $measureQuery .= "SUD_ID_Q=200,SUD_VAL_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).",SUD_FLG_Q='".$wl["wells"][$i]["pumpEfficiency"]["flag"]."',SUD_DATE_Q='".convertData($wl["wells"][$i]["pumpEfficiency"]["date"])."',"; + //[currentDiagnosticsOperationState] => Działanie/niedziałanie [1/0] diagnostyki prądowej + $measureQuery .= "SUD_ID_DIAG=708,SUD_VAL_DIAG=".$wl["wells"][$i]["currentDiagnosticsOperationState"]["value"].",SUD_FLG_DIAG='".$wl["wells"][$i]["currentDiagnosticsOperationState"]["flag"]."',SUD_DATE_DIAG='".convertData($wl["wells"][$i]["currentDiagnosticsOperationState"]["date"])."',"; + // PP + $measureQuery .= "SUD_ID_PP=401,SUD_VAL_PP=".$ppValue.",SUD_FLG_PP='".$ppFlag."',SUD_DATE_PP='".convertData($wl["wells"][$i]["pressureInPistonBody"]["date"])."',"; + // HH + $measureQuery .= "SUD_ID_HH=402,SUD_VAL_HH=".$hhValue.",SUD_FLG_HH='".$hhFlag."',SUD_DATE_HH='".convertData($wl["wells"][$i]["dynamicWaterTable"]["date"])."',"; + // ON OFF + $measureQuery .= "SUD_ID_ONOFF=507,SUD_VAL_ONOFF=".$wl["wells"][$i]["pumpOnOff"]["value"].",SUD_FLG_ONOFF='".$wl["wells"][$i]["pumpOnOff"]["flag"]."',SUD_DATE_ONOFF='".convertData($wl["wells"][$i]["pumpOnOff"]["date"])."',"; + + // end query + $measureQuery .= "SUD_AUDIT_CD=now()"; + + + // wpisuje do tabeli z rekordami. + //echo $measureQuery."<br/><br/>"; + mysql_query($measureQuery); + + + + // wpisuje dane do tabeli major_data (logi + FastAccess) + mysql_query("INSERT INTO seg_dev_major_data SET DRD_OBJECT_TYPE='WELL',DMD_DRS_ID=".$devID.",DRD_OBJECT_NAME='".$wl["wells"][$i]["well"]["id"]."',DRD_L1=".$wl["wells"][$i]["currentL1"]["value"].",DRD_L2=".$wl["wells"][$i]["currentL2"]["value"].",DRD_L3=".$wl["wells"][$i]["currentL3"]["value"].",DRD_U_L12=".$wl["wells"][$i]["voltageL12"]["value"].",DRD_U_L23=".$wl["wells"][$i]["voltageL23"]["value"].",DRD_THROTTLE=".$wl["wells"][$i]["throttlePosition"]["value"].",DRD_WATER_TEMP=".$wl["wells"][$i]["waterTemperature"]["value"].",DRD_POWER=".$wl["wells"][$i]["activePower"]["value"].",DRD_COS_FI=".$wl["wells"][$i]["cos"]["value"].",DRD_ENERGY=".$wl["wells"][$i]["activeEnergy"]["value"].",DRD_WATER_PUMPED=".$wl["wells"][$i]["pumpedWaterAmount"]["value"].",DRD_RUN_TIME=".$wl["wells"][$i]["pumpRuntime"]["value"].",DRD_HD=".$wl["wells"][$i]["dynamicWaterTable"]["value"].",DRD_P1=".$wl["wells"][$i]["pressureBeforeThrottle"]["value"].",DRD_P2=".$wl["wells"][$i]["pressureAfterThrottle"]["value"].",DRD_PB=".($wl["wells"][$i]["barometricPressuremA"]["value"] * 10).",DRD_Q=".($wl["wells"][$i]["pumpEfficiency"]["value"] * 60).",DRD_PP=".$pp_tmp.",DRD_HH=".$hh_tmp.",DRD_HST=".$wl["wells"][$i]["staticWaterTable"]["value"].",DMD_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',DRD_AUDIT_CD='".$scriptDate."'"); + + + + // wpisuje dane do tabeli odnośnie energochłonności + // ====================================================================== // + $getEnergyValue=null; + $qParam = $wl["wells"][$i]["pumpEfficiency"]["value"] * 60; + $resHD = $wl["wells"][$i]["dynamicWaterTable"]["value"]; + $P2param = $wl["wells"][$i]["pressureAfterThrottle"]["value"]; + $PEparam = $wl["wells"][$i]["activePower"]["value"]; + if (empty($PEparam)) $PEparam=1; + + $resETA = ($qParam*($resHD+$P2param))/(367*$PEparam); + $RedYellowParam = setRedYellowLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$devID."))")); + $YellowGreenParam = setYellowGreenLimes(sqlValue("select PUP_Q_N from seg_pumps where PUP_ID=(select DRS_DEV_ID from seg_dev_resources where DRS_ID=(select RWL_PUP_DRS_ID from seg_dev_resources left join seg_well_pump_eng_rel on RWL_WLL_ID=DRS_DEV_ID where DRS_ID=".$devID."))")); + + if ($resETA<=$RedYellowParam) + $getEnergyValue = "R"; + else if ($RedYellowParam<$resETA && $resETA<=$YellowGreenParam) + $getEnergyValue = "Y"; + else if ($resETA>$YellowGreenParam) + $getEnergyValue = "G"; + + if ($wellType==20) $getEnergyValue = "NN"; + + //mysql_query("INSERT INTO rep_dev_details SET RDD_DRS_ID=".$devID.",RDD_RESOURCES_DETAIL=729,RDD_VALUE='".$getEnergyValue."',RDD_AUDIT_USR='SYNDIS',RDD_AUDIT_DATE='".$scriptDate."'"); + + if (sqlValue("select count(1) from rep_soap_well_energy where SWE_DRS_ID=".$devID)>0) + mysql_query("UPDATE rep_soap_well_energy SET SWE_VALUE='".$getEnergyValue."',SWE_AUDIT_USR='SYNDIS',SWE_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',SWE_AUDIT_DATE='".$scriptDate."' WHERE SWE_DRS_ID=".$devID); + else + mysql_query("INSERT INTO rep_soap_well_energy SET SWE_DRS_ID=".$devID.",SWE_WELL_ID=".$wellID.",SWE_NAME='".$wl["wells"][$i]["well"]["id"]."',SWE_VALUE='".$getEnergyValue."',SWE_AUDIT_USR='SYNDIS',SWE_WORK_STATUS='".$wl["wells"][$i]["pumpOnOff"]["value"]."',SWE_AUDIT_DATE='".$scriptDate."'"); + // ====================================================================== // + + + } + + // aktualizauje status pomiaru + mysql_query("UPDATE rep_soap_well_energy SET SWE_WORK_STATUS='".$wl["wells"][$i]["currentL1"]["flag"]."' WHERE SWE_NAME='".$wl["wells"][$i]["well"]["id"]."'"); + + + + +} + + + + +mysql_close($polacz); +echo 'finish processing ...<br>'; +echo 'Finish: '.date("Y-m-d H:i:s").'<br>'; + +/** + * + *echo "</pre><br>---------------------------------<br><pre>"; + *print_r($cl->GetWellDataAsArray('PUMP23')); //Pobieranie danych jednej pompy - zwraca dane jako tablica + * + *echo "</pre><br>---------------------------------<br>Indeksy piezometru<pre>"; + *print_r($cl->GetPiezometerData('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako obiekt + * + *echo "</pre><br>---------------------------------<br>"; + *var_dump($cl->GetPiezometerDataAsArray('PIEZO23')); //Pobieranie danych jednego piezometru - zwraca dane jako tablice + * + *echo "</pre><br>---------------------------------<br><pre>"; + *var_dump($cl->GetWellsDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + * + *echo "</pre><br>---------------------------------<br><pre>"; + *v8ar_dump($cl->GetPiezometersDataAsArray(array('PUMP23','PUMP24'))); //retruns associate array + */ + + +?> \ No newline at end of file diff --git a/sql/viw_mik_piezometers.sql b/sql/viw_mik_piezometers.sql new file mode 100644 index 0000000..f631c63 --- /dev/null +++ b/sql/viw_mik_piezometers.sql @@ -0,0 +1,19 @@ +drop VIEW viw_mik_piezometers; +CREATE VIEW viw_mik_piezometers AS +select +SOD_UJ, +SRP_NAME, +OHC_DL_GEOGR, +OHC_SZER_GEOGR, +OHC_RZEDNA_TEREN, +OHC_RZEDNA_TERENU_ACT, +OHC_RZEDNA_KRYZY, +OHC_GLEB_OSTAT, +SOD_DESC, +SOD_PLC +from seg_dev_resources +left join seg_reservoirs_piezometers on SRP_ID=DRS_DEV_ID +left join seg_object_def on SOD_NAME=SRP_NAME +left join seg_object_hole_cards on OHC_NAME=SRP_NAME +where DRS_DEV_TYPE=601 and DRS_STATUS_DIC_ID=7 + diff --git a/style/ckeditor.css b/style/ckeditor.css new file mode 100644 index 0000000..faa0fbe --- /dev/null +++ b/style/ckeditor.css @@ -0,0 +1,365 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre +{ + line-height: 1.5; +} + +body +{ + padding: 10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th +{ + font-size: 100%; +} + +pre +{ + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; + tab-size: 4; +} + +pre, code, kbd, samp, tt +{ + font-family: monospace,monospace; + font-size: 1em; +} + +body { + width: 960px; + margin: 0 auto; +} + +code +{ + background: #f3f3f3; + border: 1px solid #ddd; + padding: 1px 4px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +abbr +{ + border-bottom: 1px dotted #555; + cursor: pointer; +} + +.new, .beta +{ + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + padding: 1px 4px; + margin: 0 0 0 5px; + color: #fff; + float: right; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.new +{ + background: #FF7E00; + border: 1px solid #DA8028; + text-shadow: 0 1px 0 #C97626; + + -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; + -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; + box-shadow: 0 2px 3px 0 #FFA54E inset; +} + +.beta +{ + background: #18C0DF; + border: 1px solid #19AAD8; + text-shadow: 0 1px 0 #048CAD; + font-style: italic; + + -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; + -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; + box-shadow: 0 2px 3px 0 #50D4FD inset; +} + +h1.samples +{ + color: #0782C1; + font-size: 200%; + font-weight: normal; + margin: 0; + padding: 0; +} + +h1.samples a +{ + color: #0782C1; + text-decoration: none; + border-bottom: 1px dotted #0782C1; +} + +.samples a:hover +{ + border-bottom: 1px dotted #0782C1; +} + +h2.samples +{ + color: #000000; + font-size: 130%; + margin: 15px 0 0 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples +{ + margin-bottom: 15px; +} + +ul.samples +{ + margin-bottom: 15px; +} + +.clear +{ + clear: both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea +{ + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body +{ + font-size: 75%; +} + +a.samples +{ + color: #189DE1; + text-decoration: none; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ +} + +#footer +{ + clear: both; + padding-top: 10px; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; +} + +.description +{ + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; + overflow: hidden; +} + +label +{ + display: block; + margin-bottom: 6px; +} + +/** + * CKEditor editables are automatically set with the "cke_editable" class + * plus cke_editable_(inline|themed) depending on the editor type. + */ + +/* Style a bit the inline editables. */ +.cke_editable.cke_editable_inline +{ + cursor: pointer; +} + +/* Once an editable element gets focused, the "cke_focus" class is + added to it, so we can style it differently. */ +.cke_editable.cke_editable_inline.cke_focus +{ + box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; + outline: none; + background: #eee; + cursor: text; +} + +/* Avoid pre-formatted overflows inline editable. */ +.cke_editable_inline pre +{ + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Samples index styles. + */ + +.twoColumns, +.twoColumnsLeft, +.twoColumnsRight +{ + overflow: hidden; +} + +.twoColumnsLeft, +.twoColumnsRight +{ + width: 45%; +} + +.twoColumnsLeft +{ + float: left; +} + +.twoColumnsRight +{ + float: right; +} + +dl.samples +{ + padding: 0 0 0 40px; +} +dl.samples > dt +{ + display: list-item; + list-style-type: disc; + list-style-position: outside; + margin: 0 0 3px; +} +dl.samples > dd +{ + margin: 0 0 3px; +} +.warning +{ + color: #ff0000; + background-color: #FFCCBA; + border: 2px dotted #ff0000; + padding: 15px 10px; + margin: 10px 0; +} + +/* Used on inline samples */ + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +img.right { + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left { + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +.marker +{ + background-color: Yellow; +} diff --git a/style/cointainers.css b/style/cointainers.css new file mode 100644 index 0000000..5748897 --- /dev/null +++ b/style/cointainers.css @@ -0,0 +1,50 @@ +.login_cointainer { + position: fixed; + top: 50px; + left: 30%; + width: 40%; + max-height: 350px; + background: #f5f5f5; + border: 1px solid #0C7491; + margin: 10% auto; + padding: 10px; + opacity:0.9; +} + +p.form_label +{ + font-weight: bolder; + font-size: 14px; + padding-left: 10px; + padding-right: 10px; +} +img.user_login +{ + height: 25px; + padding-top: 0px; + padding-left: 5px; + padding-right: 5px; + border: 1px solid rgb(41,171,226); + background-color: rgb(41,171,226); +} +input.log_pass +{ + border: 1px solid rgb(41,171,226); + font-size: 14px; + height: 23px; + padding-left: 5px; + padding-top: 0px; + vertical-align: top; + width: 70%; +} + +select.log_branch +{ + border: 1px solid rgb(41,171,226); + font-size: 14px; + height: 27px; + padding-left: 5px; + padding-top: 0px; + vertical-align: top; + width: 70%; +} \ No newline at end of file diff --git a/style/forms.css b/style/forms.css new file mode 100644 index 0000000..b0cc572 --- /dev/null +++ b/style/forms.css @@ -0,0 +1,142 @@ +input, select, option, textarea { + font-size: 13px; + padding: 5px; + border: 1px solid #aaa; + border-radius: 4px; + +} + +input[type=text]:focus { + background-color: #f5f5f5; +} + +form.form_valid label.error, label.error, *.com_error { + /* remove the next line when you have trouble in IE6 with labels in list */ + color: red; + font-style: italic; + padding: 10px; +} + + +input.req { + color: #000000; + border: 1px solid #ff0000; +} +input.text75 { + color: #000000; + width: 75%; +} +input.text75_req { + color: #000000; + width: 75%; + border: 1px solid #ff0000; + +} +input.text50 { + color: #000000; + width: 50%; +} +input.text50_req { + color: #000000; + width: 50%; + border: 1px solid #ff0000; +} +input.postcode { + color: #000000; + width: 75px; +} + +input.float { + color: #000000; + width: 75px; + text-align: right; +} +input.float_req { + color: #000000; + width: 75px; + text-align: right; + border: 1px solid #ff0000; +} + + +input.add_button { + font-size: 14px; + color: #ffffff; + font-weight: bold; + background-color: #319600; + width: 150px; + height: 25px; + border-radius: 4px; +} +input.save_button { + font-size: 14px; + color: #ffffff; + font-weight: bold; + background-color: #319600; + width: 150px; + height: 25; + border-radius: 4px; +} +input.cancel_button { + font-size: 14px; + color: #ffffff; + font-weight: bold; + background-color: #868686; + width: 100px; + height: 25px; + border-radius: 4px; +} +input.delete_button { + font-size: 14px; + color: #ffffff; + font-weight: bold; + background-color: #dc5142; + width: 100px; + height: 25px; + border-radius: 4px; +} +input.well_extra_button { + font-size: 14px; + color: #ffffff; + font-weight: bold; + background-color: #0C7491; + width: 200px; + height: 25px; + border-radius: 4px; +} + + + +textarea { + font-size: 13px; + width: 75%; + height: 75px; +} + + +input.readonly_hide +{ + border-right: #fff 0px solid; + border-top: #fff 0px solid; + border-left: #fff 0px solid; + border-bottom: #fff 0px solid; + width: 95%; + background-color: #fff; +} + +input.readonly_show +{ + border-right: #000 1px solid; + border-top: #000 1px solid; + border-left: #000 1px solid; + border-bottom: #000 1px solid; +} + + +select.req { + color: #000000; + border: 1px solid #ff0000; +} + + + diff --git a/style/links.css b/style/links.css new file mode 100644 index 0000000..b27679c --- /dev/null +++ b/style/links.css @@ -0,0 +1,39 @@ +a.knowledge +{ + text-decoration: none; + font-weight: bold; + padding: 10px; + vertical-align: middle; + +} + +a.blue +{ + text-decoration: none; + color: #0000FF; +} + +a.blue_under_table +{ + text-decoration: none; + color: #0000FF; +} + +a.blue_under_table:hover +{ + text-decoration: none; + color: #009bc7; +} + + +a.kontrukcja +{ + text-decoration: none; + color: #4B4B4B; +} + +a.kontrukcja:hover +{ + text-decoration: none; + color: #009bc7; +} diff --git a/style/login.css b/style/login.css new file mode 100644 index 0000000..d6efc28 --- /dev/null +++ b/style/login.css @@ -0,0 +1,269 @@ +/* ============================================================================ + * SoftSPM — nowa strona logowania (uklad dwukolumnowy) + * Lewa kolumna: ciemny panel + animacja "wave mesh" (napis SoftSPM). + * Prawa kolumna: jasny formularz logowania z nowym logo. + * Kolory marki: turkus #29ABE2 / #0C7491, czerwien #C1272D. + * ========================================================================== */ + +:root { + --spm-teal: #29abe2; + --spm-teal-dark: #0c7491; + --spm-red: #c1272d; + --spm-ink: #26323a; + --spm-muted: #7d8a93; + --spm-line: #dfe6ea; +} + +/* nadpisanie tla body z index.php na ekranie logowania */ +body.spm-login-body { + margin: 0; + background: #06121a !important; +} + +.spm-auth { + position: fixed; + inset: 0; + top: 0; left: 0; right: 0; bottom: 0; + display: flex; + font-family: "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + color: var(--spm-ink); + overflow: hidden; +} + +/* ---------------------------- LEWA: WIZUAL ------------------------------- */ +.spm-auth__visual { + position: relative; + flex: 1 1 50%; + min-width: 0; + overflow: hidden; + background: + /* miekka figura: duze kolo w prawym-gornym rogu */ + radial-gradient(42% 42% at 96% 4%, rgba(255, 255, 255, 0.07) 0%, rgba(255, 255, 255, 0) 70%), + /* miekka figura: duze kolo w lewym-dolnym rogu */ + radial-gradient(46% 46% at 4% 98%, rgba(255, 255, 255, 0.06) 0%, rgba(255, 255, 255, 0) 70%), + /* poswiata marki przy dolnej krawedzi */ + radial-gradient(60% 55% at 22% 104%, rgba(41, 171, 226, 0.22) 0%, rgba(41, 171, 226, 0) 60%), + /* lekki turkusowy refleks w prawym-gornym rogu */ + radial-gradient(55% 50% at 100% 0%, rgba(41, 171, 226, 0.14) 0%, rgba(41, 171, 226, 0) 55%), + /* bazowy gradient panelu */ + linear-gradient(155deg, #0a5366 0%, #074152 45%, #052b39 75%, #04212c 100%); +} + +/* wzor geometryczny: delikatna siatka punktow (wygasza sie ku dolowi) */ +.spm-auth__visual::before { + content: ""; + position: absolute; + inset: 0; + top: 0; left: 0; right: 0; bottom: 0; + z-index: 0; + pointer-events: none; + background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1px, rgba(255, 255, 255, 0) 1.6px); + background-size: 24px 24px; + opacity: 0.5; + -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0) 65%); + mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0) 65%); +} + +/* wzor geometryczny: kontur duzego okregu w prawym-gornym rogu */ +.spm-auth__visual::after { + content: ""; + position: absolute; + z-index: 0; + pointer-events: none; + width: 560px; + height: 560px; + right: -180px; + top: -190px; + border-radius: 50%; + border: 1px solid rgba(255, 255, 255, 0.07); + background: radial-gradient(circle, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0) 68%); +} + +.spm-auth__canvas { + position: absolute; + inset: 0; + top: 0; left: 0; + width: 100%; + height: 100%; + display: block; + z-index: 1; +} + +.spm-auth__visual-top { + position: absolute; + top: 38px; + left: 44px; + z-index: 2; + max-width: 70%; +} + +.spm-auth__kicker { + font-size: 12px; + letter-spacing: 0.32em; + text-transform: uppercase; + color: rgba(41, 171, 226, 0.85); + margin: 0 0 10px; + font-weight: 600; +} + +.spm-auth__lead { + margin: 0; + font-size: 44px; + line-height: 1.15; + font-weight: 800; + letter-spacing: -0.01em; + color: #ffffff; +} + +.spm-auth__lead b { + font-weight: 800; + color: #fff; +} + +/* ---------------------------- PRAWA: FORMULARZ -------------------------- */ +.spm-auth__panel { + flex: 1 1 50%; + min-width: 0; + display: flex; + align-items: center; + justify-content: center; + background: #ffffff; + z-index: 2; +} + +.spm-auth__card { + width: 100%; + max-width: 360px; + padding: 32px 28px; + box-sizing: border-box; +} + +.spm-auth__logo { + display: block; + width: 220px; + max-width: 80%; + height: auto; + margin: 0 0 28px; +} + +.spm-auth__heading { + margin: 0 0 4px; + font-size: 22px; + font-weight: 600; + color: var(--spm-ink); +} + +.spm-auth__sub { + margin: 0 0 26px; + font-size: 13px; + color: var(--spm-muted); +} + +.spm-field { + position: relative; + margin-bottom: 16px; +} + +.spm-field__icon { + position: absolute; + top: 50%; + left: 14px; + transform: translateY(-50%); + width: 18px; + height: 18px; + color: var(--spm-teal); + pointer-events: none; +} + +.spm-input, +.spm-select { + width: 100%; + box-sizing: border-box; + height: 46px; + padding: 0 14px 0 42px; + font-size: 14px; + color: var(--spm-ink); + background: #f6f9fb; + border: 1px solid var(--spm-line); + border-radius: 8px; + outline: none; + transition: border-color .15s, box-shadow .15s, background .15s; + -webkit-appearance: none; + appearance: none; +} + +.spm-select { + cursor: pointer; + background-image: + url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path fill='%237d8a93' d='M1 1l5 5 5-5'/></svg>"); + background-repeat: no-repeat; + background-position: right 14px center; +} + +.spm-input:focus, +.spm-select:focus { + border-color: var(--spm-teal); + background: #fff; + box-shadow: 0 0 0 3px rgba(41, 171, 226, 0.15); +} + +.spm-input::placeholder { + color: #aab4ba; +} + +.spm-btn { + width: 100%; + height: 48px; + margin-top: 8px; + border: 0; + border-radius: 8px; + cursor: pointer; + font-size: 15px; + font-weight: 600; + letter-spacing: 0.02em; + color: #fff; + background: linear-gradient(135deg, var(--spm-teal) 0%, var(--spm-teal-dark) 100%); + box-shadow: 0 6px 16px rgba(12, 116, 145, 0.25); + transition: transform .08s, box-shadow .15s, filter .15s; +} + +.spm-btn:hover { + filter: brightness(1.05); + box-shadow: 0 8px 20px rgba(12, 116, 145, 0.32); +} + +.spm-btn:active { + transform: translateY(1px); +} + +.spm-auth__foot { + margin-top: 22px; + font-size: 12px; + color: var(--spm-muted); + text-align: center; +} + +.spm-auth__foot b { + color: var(--spm-red); + font-weight: 600; +} + +/* ------------------------------ RESPONSYWNIE ---------------------------- */ +@media (max-width: 860px) { + .spm-auth { + flex-direction: column; + } + .spm-auth__visual { + flex: 0 0 200px; + } + .spm-auth__visual-top { + top: 22px; + left: 24px; + } + .spm-auth__lead { + font-size: 24px; + } + .spm-auth__panel { + flex: 1 1 auto; + } +} diff --git a/style/map_tooltip.css b/style/map_tooltip.css new file mode 100644 index 0000000..7364a0a --- /dev/null +++ b/style/map_tooltip.css @@ -0,0 +1,42 @@ +dl#map_01_pumps{ + background: transparent url(../foto/map_01_pumps.png) top left no-repeat; + width: 900px; + height: 521px; + position: relative; +} +dd{ position: absolute; font-size: 85%; } + +/* ---------- Pump 101 ---------- */ +dd#pomp_101Def{ left: 51px; top: 164px; } +dd#pomp_101Def a{ position: absolute; width: 31px; height: 47px; text-decoration: none; } +dd#pomp_101Def a span{ display: none; } +dd#pomp_101Def a:hover span{ + display: block; + color: #000; + background-color: #F4F4F4; + font-weight: bold; + position: absolute; + padding: 5px; + width: 200px; + border-radius: 4px; + top: 23px; + left: 31px; + border: 1px solid #0C7491; +} +/* ---------- Pump 102 ---------- */ +dd#pomp_102Def{ left: 587px; top: 230px; } +dd#pomp_102Def a{ position: absolute; width: 31px; height: 47px; text-decoration: none; } +dd#pomp_102Def a span{ display: none; } +dd#pomp_102Def a:hover span{ + display: block; + color: #000; + background-color: #F4F4F4; + font-weight: bold; + position: absolute; + padding: 5px; + width: 200px; + border-radius: 4px; + top: 23px; + left: 31px; + border: 1px solid #0C7491; +} \ No newline at end of file diff --git a/style/multi-select.css b/style/multi-select.css new file mode 100644 index 0000000..6a16cef --- /dev/null +++ b/style/multi-select.css @@ -0,0 +1,120 @@ +.ms-container{ + background: transparent url('../images/switch.png') no-repeat 50% 50%; + width: 100%; +} + +.ms-container:after{ + content: "."; + display: block; + height: 0; + line-height: 0; + font-size: 0; + clear: both; + min-height: 0; + visibility: hidden; +} + +.ms-container .ms-selectable, .ms-container .ms-selection{ + background: #fff; + color: #555555; + float: left; + width: 45%; +} + +.ms-container .ms-list{ + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + position: relative; + height: 300px; + padding: 0; + overflow-y: auto; + margin-top: 10px; + margin-bottom: 10px; +} + +.ms-container .ms-selectable{ + margin-right: 10%; +} + +.ms-container .ms-list.ms-focus{ + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + outline: 0; + outline: thin dotted \9; +} + +.ms-container ul{ + margin: 2; + list-style-type: none; + padding: 2; +} + +.ms-container .ms-optgroup-container{ + width: 100%; +} + +.ms-container .ms-optgroup-label{ + margin: 0; + padding: 5px 0px 0px 5px; + cursor: pointer; + color: #999; +} + +.ms-container .ms-selectable li.ms-elem-selectable, +.ms-container .ms-selection li.ms-elem-selection{ + border-bottom: 1px #eee solid; + padding: 2px 10px; + color: #555; + font-size: 14px; +} + +.ms-container .ms-selectable li.ms-hover, +.ms-container .ms-selection li.ms-hover{ + cursor: pointer; + color: #fff; + text-decoration: none; + background-color: #00b5fb; +} + +.ms-container .ms-selectable li.disabled, +.ms-container .ms-selection li.disabled{ + background-color: #eee; + color: #aaa; + cursor: text; +} + +a.multi_sel_add +{ + text-decoration: none; + font-weight: bold; + padding: 5px; + color: #319600; +} +a.multi_sel_add:hover +{ + text-decoration: underline; +} + +a.multi_sel_del +{ + text-decoration: none; + font-weight: bold; + padding: 5px; + color: #dc0000; +} +a.multi_sel_del:hover +{ + text-decoration: underline; +} \ No newline at end of file diff --git a/style/preloader.css b/style/preloader.css new file mode 100644 index 0000000..dcc696b --- /dev/null +++ b/style/preloader.css @@ -0,0 +1,151 @@ + +#loader-wrapper { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; +} +#loader { + display: block; + position: relative; + left: 50%; + top: 50%; + width: 150px; + height: 150px; + margin: -75px 0 0 -75px; + border-radius: 50%; + border: 3px solid transparent; + border-top-color: #3498db; + + -webkit-animation: spin 2s linear infinite; /* Chrome, Opera 15+, Safari 5+ */ + animation: spin 2s linear infinite; /* Chrome, Firefox 16+, IE 10+, Opera */ + + z-index: 1001; +} + + #loader:before { + content: ""; + position: absolute; + top: 5px; + left: 5px; + right: 5px; + bottom: 5px; + border-radius: 50%; + border: 3px solid transparent; + border-top-color: #e74c3c; + + -webkit-animation: spin 3s linear infinite; /* Chrome, Opera 15+, Safari 5+ */ + animation: spin 3s linear infinite; /* Chrome, Firefox 16+, IE 10+, Opera */ + } + + #loader:after { + content: ""; + position: absolute; + top: 15px; + left: 15px; + right: 15px; + bottom: 15px; + border-radius: 50%; + border: 3px solid transparent; + border-top-color: #f9c922; + + -webkit-animation: spin 1.5s linear infinite; /* Chrome, Opera 15+, Safari 5+ */ + animation: spin 1.5s linear infinite; /* Chrome, Firefox 16+, IE 10+, Opera */ + } + + @-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: rotate(0deg); /* IE 9 */ + transform: rotate(0deg); /* Firefox 16+, IE 10+, Opera */ + } + 100% { + -webkit-transform: rotate(360deg); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: rotate(360deg); /* IE 9 */ + transform: rotate(360deg); /* Firefox 16+, IE 10+, Opera */ + } + } + @keyframes spin { + 0% { + -webkit-transform: rotate(0deg); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: rotate(0deg); /* IE 9 */ + transform: rotate(0deg); /* Firefox 16+, IE 10+, Opera */ + } + 100% { + -webkit-transform: rotate(360deg); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: rotate(360deg); /* IE 9 */ + transform: rotate(360deg); /* Firefox 16+, IE 10+, Opera */ + } + } + + #loader-wrapper .loader-section { + position: fixed; + top: 0; + width: 51%; + height: 100%; + background: #222222; + z-index: 1000; + -webkit-transform: translateX(0); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: translateX(0); /* IE 9 */ + transform: translateX(0); /* Firefox 16+, IE 10+, Opera */ + } + + #loader-wrapper .loader-section.section-left { + left: 0; + } + + #loader-wrapper .loader-section.section-right { + right: 0; + } + + /* Loaded */ + .loaded #loader-wrapper .loader-section.section-left { + -webkit-transform: translateX(-100%); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: translateX(-100%); /* IE 9 */ + transform: translateX(-100%); /* Firefox 16+, IE 10+, Opera */ + + -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); + transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); + } + + .loaded #loader-wrapper .loader-section.section-right { + -webkit-transform: translateX(100%); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: translateX(100%); /* IE 9 */ + transform: translateX(100%); /* Firefox 16+, IE 10+, Opera */ + +-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); + transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); + } + + .loaded #loader { + opacity: 0; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + } + .loaded #loader-wrapper { + visibility: hidden; + + -webkit-transform: translateY(-100%); /* Chrome, Opera 15+, Safari 3.1+ */ + -ms-transform: translateY(-100%); /* IE 9 */ + transform: translateY(-100%); /* Firefox 16+, IE 10+, Opera */ + + -webkit-transition: all 0.3s 1s ease-out; + transition: all 0.3s 1s ease-out; + } + + /* JavaScript Turned Off */ + .no-js #loader-wrapper { + display: none; + } + .no-js h1 { + color: #222222; + } + + #content { + margin: 0 auto; + padding-bottom: 50px; + width: 80%; + max-width: 978px; + } diff --git a/style/select2.min.css b/style/select2.min.css new file mode 100644 index 0000000..76de04d --- /dev/null +++ b/style/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/style/style.css b/style/style.css new file mode 100644 index 0000000..4408f84 --- /dev/null +++ b/style/style.css @@ -0,0 +1,332 @@ +* { + color: #4B4B4B; + font-family: Helvetica, sans-serif; + font-size: 12px; +} + +/* ==================================================================== */ +div.main { + width: 1000px; + margin-left: auto; + margin-right: auto; + padding: 5px; +} +/* ==================================================================== */ + +/* pasek górny z logowaniem*/ +/* ==================================================================== */ +div.LogLog { + position:relative; + margin-top: 5px; + height: 30px; +} + +div.logo_name { + position:absolute; + width: 50%; +} +div.logged_block { + position:absolute; + width: 35%; + right:0px; +} +span.login_name { + position:absolute; + width: 175px; + right: 105px; + top: 6px; + color: #ffffff; + font-size: 16px; + z-index: 50; +} + +div.language { + position:absolute; + right:0px; +} +/* ==================================================================== */ + + + +/* ==================================================================== */ +div.system_name { + display: block; + margin-top:9px; + color: #ffffff; + font-size: 17px; + font-weight: bold; + width: 365px; +} +div.head_space { + display: block; + height: 25px; +} +div.topmenu { + position: relative; + width: 100%; + height: 30px; + background-color: #BB0000; + +} + +/* ==================================================================== */ +div.work_area { + display:inline-block; + width: 100%; + border: 1px solid #BB0000; +} + +/* ==================================================================== */ +div.path_map { + display:inline-block; + color: #0C7491; + vertical-align: top; + margin-left: 5px; + padding: 5px; + width: 98%; + +} + +div.footer { + width: 100%; + padding-top: 5px; + text-align: right; + font-size: 10px; + color: #aaaaaa; +} +/* TAGS =============================================================== */ +/* ==================================================================== */ +div.tag50_left { + display:inline-block; + vertical-align: top; + margin-left: 5px; + padding: 5px; + width: 48%; + +} + +div.tag50_right { + display:inline-block; + vertical-align: top; + margin-right: 5px; + padding: 5px; + width: 48%; +} + +div.tag100 { + display:inline-block; + vertical-align: top; + margin-left: 5px; + margin-right: 5px; + padding: 5px; + width: 97%; +} + +div.actionOK { + display:inline-block; + vertical-align: top; + margin-top: 10px; + margin-left: 10px; + margin-bottom: 10px; + padding: 10px; + width: 955px; + font-size: 13px; + color: #ffffff; + font-weight: bold; + background-color: #319600; + border-radius: 4px; +} +div.actionERROR { + display:inline-block; + vertical-align: top; + margin-top: 10px; + margin-left: 10px; + margin-bottom: 10px; + padding: 10px; + width: 955px; + font-size: 13px; + color: #ffffff; + font-weight: bold; + background-color: #FF4848; + border-radius: 4px; +} + +div.infoENERGETIC { + display:inline-block; + vertical-align: top; + margin-top: 10px; + margin-left: 10px; + margin-bottom: 10px; + padding: 10px; + width: 955px; + font-size: 14px; + color: #000000; + background-color: #ffff00; + border-radius: 4px; +} + +div.infoWATER { + display:inline-block; + vertical-align: top; + margin-top: 10px; + margin-left: 10px; + margin-bottom: 10px; + padding: 10px; + width: 955px; + font-size: 14px; + color: #ffffff; + background-color: #0080ff; + border-radius: 4px; +} + +div.head_tag { + display:inline-block; + margin-bottom: 0px; + width: 100%; + height: 15px; + padding: 2px; + color: #ffffff; + background-color: #0C7491; + font-size: 14px; + font-weight: bold; + border: 1px solid #0C7491; +} +div.tag { + display:inline-block; + width: 100%; + margin-bottom: 10px; + margin-top: 0px; + padding: 2px; + border: 1px solid #0C7491; +} + +div.steps { + display:inline-block; + width: 100%; + text-align: center; + padding-top: 20px; + padding-bottom: 20px; +} + +div.footer_selection_info { + display:inline-block; + width: 100%; + text-align: justify; + padding: 20px; +} + +div.footer_selection_alert { + display:inline-block; + color: #ff0000; + font-weight: bold; + width: 100%; + text-align: center; + padding: 20px; +} + + + +div.tag_warning { + display:inline-block; + width: 99%; + margin-bottom: 10px; + margin-top: 0px; + padding: 10px; + color: #dc0000; + font-weight: bold; + border: 1px solid #dc0000; +} +div.tag_center { + display:inline-block; + width: 100%; + margin-bottom: 10px; + margin-top: 0px; + padding: 2px; + text-align: center; + border: 1px solid #0C7491; +} + +div.tag_OnOffButtons { + display:inline-block; + background: transparent url(../foto/backclaud.jpg) top left no-repeat; + width: 100%; + margin-bottom: 10px; + margin-top: 0px; + padding: 2px; + text-align: center; + border: 1px solid #0C7491; +} + +div.tag_WellName { + display:inline-block; + font-size: 25px; + font-weight: bold; + color: #dc0000; + width: 100%; + margin-bottom: 10px; + margin-top: 0px; + padding: 2px; + padding-top: 10px; + padding-bottom: 10px; + text-align: center; + border: 1px solid #0C7491; +} + +div.tag_WellDate { + display:inline-block; + font-size: 22px; + color: #0080ff; + width: 100%; + margin-bottom: 10px; + margin-top: 0px; + padding: 2px; + padding-top: 10px; + padding-bottom: 10px; + text-align: center; + border: 1px solid #0C7491; +} + + +div.tag_buttons { + display:inline-block; + width: 100%; + margin-bottom: 10px; + margin-top: 10px; + padding: 2px; + text-align: right; +} + +div.tag_ChemicalButtons { + display:inline-block; + width: 100%; + margin-bottom: 10px; + margin-top: 10px; + padding: 2px; + text-align: center; +} + +#progressBar { + background:#0C7491; + color: #bb0000; + border-radius: 5px; + height: 25px; + width: 80%; + padding: 5px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25) inset; +} + +hr { + width: 100%; + border: 0.5px solid #0C7491; +} + +/* ==================================================================== */ +/* preloader */ + +/* ==================================================================== */ + + +/* ==================================================================== */ +/* ==================================================================== */ + + diff --git a/style/sweetalert.css b/style/sweetalert.css new file mode 100644 index 0000000..bc588bc --- /dev/null +++ b/style/sweetalert.css @@ -0,0 +1,757 @@ +body.stop-scrolling { + height: 100%; + overflow: hidden; } + +.sweet-overlay { + background-color: black; + /* IE8 */ + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + /* IE8 */ + background-color: rgba(0, 0, 0, 0.4); + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: none; + z-index: 10000; } + +.sweet-alert { + background-color: white; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + width: 478px; + padding: 17px; + border-radius: 5px; + text-align: center; + position: fixed; + left: 50%; + top: 50%; + margin-left: -256px; + margin-top: -200px; + overflow: hidden; + display: none; + z-index: 99999; } + @media all and (max-width: 540px) { + .sweet-alert { + width: auto; + margin-left: 0; + margin-right: 0; + left: 15px; + right: 15px; } } + .sweet-alert h2 { + color: #575757; + font-size: 30px; + text-align: center; + font-weight: 600; + text-transform: none; + position: relative; + margin: 25px 0; + padding: 0; + line-height: 40px; + display: block; } + .sweet-alert p { + color: #797979; + font-size: 16px; + text-align: center; + font-weight: 300; + position: relative; + text-align: inherit; + float: none; + margin: 0; + padding: 0; + line-height: normal; } + .sweet-alert fieldset { + border: none; + position: relative; } + .sweet-alert .sa-error-container { + background-color: #f1f1f1; + margin-left: -17px; + margin-right: -17px; + overflow: hidden; + padding: 0 10px; + max-height: 0; + webkit-transition: padding 0.15s, max-height 0.15s; + transition: padding 0.15s, max-height 0.15s; } + .sweet-alert .sa-error-container.show { + padding: 10px 0; + max-height: 100px; + webkit-transition: padding 0.2s, max-height 0.2s; + transition: padding 0.25s, max-height 0.25s; } + .sweet-alert .sa-error-container .icon { + display: inline-block; + width: 24px; + height: 24px; + border-radius: 50%; + background-color: #ea7d7d; + color: white; + line-height: 24px; + text-align: center; + margin-right: 3px; } + .sweet-alert .sa-error-container p { + display: inline-block; } + .sweet-alert .sa-input-error { + position: absolute; + top: 29px; + right: 26px; + width: 20px; + height: 20px; + opacity: 0; + -webkit-transform: scale(0.5); + transform: scale(0.5); + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-transition: all 0.1s; + transition: all 0.1s; } + .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after { + content: ""; + width: 20px; + height: 6px; + background-color: #f06e57; + border-radius: 3px; + position: absolute; + top: 50%; + margin-top: -4px; + left: 50%; + margin-left: -9px; } + .sweet-alert .sa-input-error::before { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .sweet-alert .sa-input-error::after { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .sweet-alert .sa-input-error.show { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); } + .sweet-alert input { + width: 100%; + box-sizing: border-box; + border-radius: 3px; + border: 1px solid #d7d7d7; + height: 43px; + margin-top: 10px; + margin-bottom: 17px; + font-size: 18px; + box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06); + padding: 0 12px; + display: none; + -webkit-transition: all 0.3s; + transition: all 0.3s; } + .sweet-alert input:focus { + outline: none; + box-shadow: 0px 0px 3px #c4e6f5; + border: 1px solid #b4dbed; } + .sweet-alert input:focus::-moz-placeholder { + transition: opacity 0.3s 0.03s ease; + opacity: 0.5; } + .sweet-alert input:focus:-ms-input-placeholder { + transition: opacity 0.3s 0.03s ease; + opacity: 0.5; } + .sweet-alert input:focus::-webkit-input-placeholder { + transition: opacity 0.3s 0.03s ease; + opacity: 0.5; } + .sweet-alert input::-moz-placeholder { + color: #bdbdbd; } + .sweet-alert input:-ms-input-placeholder { + color: #bdbdbd; } + .sweet-alert input::-webkit-input-placeholder { + color: #bdbdbd; } + .sweet-alert.show-input input { + display: block; } + .sweet-alert button { + background-color: #AEDEF4; + color: white; + border: none; + box-shadow: none; + font-size: 17px; + font-weight: 500; + -webkit-border-radius: 4px; + border-radius: 5px; + padding: 10px 32px; + margin: 26px 5px 0 5px; + cursor: pointer; } + .sweet-alert button:focus { + outline: none; + box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); } + .sweet-alert button:hover { + background-color: #a1d9f2; } + .sweet-alert button:active { + background-color: #81ccee; } + .sweet-alert button.cancel { + background-color: #D0D0D0; } + .sweet-alert button.cancel:hover { + background-color: #c8c8c8; } + .sweet-alert button.cancel:active { + background-color: #b6b6b6; } + .sweet-alert button.cancel:focus { + box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; } + .sweet-alert button::-moz-focus-inner { + border: 0; } + .sweet-alert[data-has-cancel-button=false] button { + box-shadow: none !important; } + .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] { + padding-bottom: 40px; } + .sweet-alert .sa-icon { + width: 80px; + height: 80px; + border: 4px solid gray; + -webkit-border-radius: 40px; + border-radius: 40px; + border-radius: 50%; + margin: 20px auto; + padding: 0; + position: relative; + box-sizing: content-box; } + .sweet-alert .sa-icon.sa-error { + border-color: #F27474; } + .sweet-alert .sa-icon.sa-error .sa-x-mark { + position: relative; + display: block; } + .sweet-alert .sa-icon.sa-error .sa-line { + position: absolute; + height: 5px; + width: 47px; + background-color: #F27474; + display: block; + top: 37px; + border-radius: 2px; } + .sweet-alert .sa-icon.sa-error .sa-line.sa-left { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + left: 17px; } + .sweet-alert .sa-icon.sa-error .sa-line.sa-right { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + right: 16px; } + .sweet-alert .sa-icon.sa-warning { + border-color: #F8BB86; } + .sweet-alert .sa-icon.sa-warning .sa-body { + position: absolute; + width: 5px; + height: 47px; + left: 50%; + top: 10px; + -webkit-border-radius: 2px; + border-radius: 2px; + margin-left: -2px; + background-color: #F8BB86; } + .sweet-alert .sa-icon.sa-warning .sa-dot { + position: absolute; + width: 7px; + height: 7px; + -webkit-border-radius: 50%; + border-radius: 50%; + margin-left: -3px; + left: 50%; + bottom: 10px; + background-color: #F8BB86; } + .sweet-alert .sa-icon.sa-info { + border-color: #C9DAE1; } + .sweet-alert .sa-icon.sa-info::before { + content: ""; + position: absolute; + width: 5px; + height: 29px; + left: 50%; + bottom: 17px; + border-radius: 2px; + margin-left: -2px; + background-color: #C9DAE1; } + .sweet-alert .sa-icon.sa-info::after { + content: ""; + position: absolute; + width: 7px; + height: 7px; + border-radius: 50%; + margin-left: -3px; + top: 19px; + background-color: #C9DAE1; } + .sweet-alert .sa-icon.sa-success { + border-color: #A5DC86; } + .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after { + content: ''; + -webkit-border-radius: 40px; + border-radius: 40px; + border-radius: 50%; + position: absolute; + width: 60px; + height: 120px; + background: white; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .sweet-alert .sa-icon.sa-success::before { + -webkit-border-radius: 120px 0 0 120px; + border-radius: 120px 0 0 120px; + top: -7px; + left: -33px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 60px 60px; + transform-origin: 60px 60px; } + .sweet-alert .sa-icon.sa-success::after { + -webkit-border-radius: 0 120px 120px 0; + border-radius: 0 120px 120px 0; + top: -11px; + left: 30px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 0px 60px; + transform-origin: 0px 60px; } + .sweet-alert .sa-icon.sa-success .sa-placeholder { + width: 80px; + height: 80px; + border: 4px solid rgba(165, 220, 134, 0.2); + -webkit-border-radius: 40px; + border-radius: 40px; + border-radius: 50%; + box-sizing: content-box; + position: absolute; + left: -4px; + top: -4px; + z-index: 2; } + .sweet-alert .sa-icon.sa-success .sa-fix { + width: 5px; + height: 90px; + background-color: white; + position: absolute; + left: 28px; + top: 8px; + z-index: 1; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .sweet-alert .sa-icon.sa-success .sa-line { + height: 5px; + background-color: #A5DC86; + display: block; + border-radius: 2px; + position: absolute; + z-index: 2; } + .sweet-alert .sa-icon.sa-success .sa-line.sa-tip { + width: 25px; + left: 14px; + top: 46px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .sweet-alert .sa-icon.sa-success .sa-line.sa-long { + width: 47px; + right: 8px; + top: 38px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .sweet-alert .sa-icon.sa-custom { + background-size: contain; + border-radius: 0; + border: none; + background-position: center center; + background-repeat: no-repeat; } + +/* + * Animations + */ +@-webkit-keyframes showSweetAlert { + 0% { + transform: scale(0.7); + -webkit-transform: scale(0.7); } + + 45% { + transform: scale(1.05); + -webkit-transform: scale(1.05); } + + 80% { + transform: scale(0.95); + -webkit-transform: scale(0.95); } + + 100% { + transform: scale(1); + -webkit-transform: scale(1); } } + +@keyframes showSweetAlert { + 0% { + transform: scale(0.7); + -webkit-transform: scale(0.7); } + + 45% { + transform: scale(1.05); + -webkit-transform: scale(1.05); } + + 80% { + transform: scale(0.95); + -webkit-transform: scale(0.95); } + + 100% { + transform: scale(1); + -webkit-transform: scale(1); } } + +@-webkit-keyframes hideSweetAlert { + 0% { + transform: scale(1); + -webkit-transform: scale(1); } + + 100% { + transform: scale(0.5); + -webkit-transform: scale(0.5); } } + +@keyframes hideSweetAlert { + 0% { + transform: scale(1); + -webkit-transform: scale(1); } + + 100% { + transform: scale(0.5); + -webkit-transform: scale(0.5); } } + +@-webkit-keyframes slideFromTop { + 0% { + top: 0%; } + + 100% { + top: 50%; } } + +@keyframes slideFromTop { + 0% { + top: 0%; } + + 100% { + top: 50%; } } + +@-webkit-keyframes slideToTop { + 0% { + top: 50%; } + + 100% { + top: 0%; } } + +@keyframes slideToTop { + 0% { + top: 50%; } + + 100% { + top: 0%; } } + +@-webkit-keyframes slideFromBottom { + 0% { + top: 70%; } + + 100% { + top: 50%; } } + +@keyframes slideFromBottom { + 0% { + top: 70%; } + + 100% { + top: 50%; } } + +@-webkit-keyframes slideToBottom { + 0% { + top: 50%; } + + 100% { + top: 70%; } } + +@keyframes slideToBottom { + 0% { + top: 50%; } + + 100% { + top: 70%; } } + +.showSweetAlert[data-animation=pop] { + -webkit-animation: showSweetAlert 0.3s; + animation: showSweetAlert 0.3s; } +.showSweetAlert[data-animation=none] { + -webkit-animation: none; + animation: none; } +.showSweetAlert[data-animation=slide-from-top] { + -webkit-animation: slideFromTop 0.3s; + animation: slideFromTop 0.3s; } +.showSweetAlert[data-animation=slide-from-bottom] { + -webkit-animation: slideFromBottom 0.3s; + animation: slideFromBottom 0.3s; } + +.hideSweetAlert[data-animation=pop] { + -webkit-animation: hideSweetAlert 0.2s; + animation: hideSweetAlert 0.2s; } +.hideSweetAlert[data-animation=none] { + -webkit-animation: none; + animation: none; } +.hideSweetAlert[data-animation=slide-from-top] { + -webkit-animation: slideToTop 0.4s; + animation: slideToTop 0.4s; } +.hideSweetAlert[data-animation=slide-from-bottom] { + -webkit-animation: slideToBottom 0.3s; + animation: slideToBottom 0.3s; } + +@-webkit-keyframes animateSuccessTip { + 0% { + width: 0; + left: 1px; + top: 19px; } + + 54% { + width: 0; + left: 1px; + top: 19px; } + + 70% { + width: 50px; + left: -8px; + top: 37px; } + + 84% { + width: 17px; + left: 21px; + top: 48px; } + + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@keyframes animateSuccessTip { + 0% { + width: 0; + left: 1px; + top: 19px; } + + 54% { + width: 0; + left: 1px; + top: 19px; } + + 70% { + width: 50px; + left: -8px; + top: 37px; } + + 84% { + width: 17px; + left: 21px; + top: 48px; } + + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@-webkit-keyframes animateSuccessLong { + 0% { + width: 0; + right: 46px; + top: 54px; } + + 65% { + width: 0; + right: 46px; + top: 54px; } + + 84% { + width: 55px; + right: 0px; + top: 35px; } + + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@keyframes animateSuccessLong { + 0% { + width: 0; + right: 46px; + top: 54px; } + + 65% { + width: 0; + right: 46px; + top: 54px; } + + 84% { + width: 55px; + right: 0px; + top: 35px; } + + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@-webkit-keyframes rotatePlaceholder { + 0% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + + 5% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + + 12% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } + + 100% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } } + +@keyframes rotatePlaceholder { + 0% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + + 5% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + + 12% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } + + 100% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } } + +.animateSuccessTip { + -webkit-animation: animateSuccessTip 0.75s; + animation: animateSuccessTip 0.75s; } + +.animateSuccessLong { + -webkit-animation: animateSuccessLong 0.75s; + animation: animateSuccessLong 0.75s; } + +.sa-icon.sa-success.animate::after { + -webkit-animation: rotatePlaceholder 4.25s ease-in; + animation: rotatePlaceholder 4.25s ease-in; } + +@-webkit-keyframes animateErrorIcon { + 0% { + transform: rotateX(100deg); + -webkit-transform: rotateX(100deg); + opacity: 0; } + + 100% { + transform: rotateX(0deg); + -webkit-transform: rotateX(0deg); + opacity: 1; } } + +@keyframes animateErrorIcon { + 0% { + transform: rotateX(100deg); + -webkit-transform: rotateX(100deg); + opacity: 0; } + + 100% { + transform: rotateX(0deg); + -webkit-transform: rotateX(0deg); + opacity: 1; } } + +.animateErrorIcon { + -webkit-animation: animateErrorIcon 0.5s; + animation: animateErrorIcon 0.5s; } + +@-webkit-keyframes animateXMark { + 0% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + + 50% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + + 80% { + transform: scale(1.15); + -webkit-transform: scale(1.15); + margin-top: -6px; } + + 100% { + transform: scale(1); + -webkit-transform: scale(1); + margin-top: 0; + opacity: 1; } } + +@keyframes animateXMark { + 0% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + + 50% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + + 80% { + transform: scale(1.15); + -webkit-transform: scale(1.15); + margin-top: -6px; } + + 100% { + transform: scale(1); + -webkit-transform: scale(1); + margin-top: 0; + opacity: 1; } } + +.animateXMark { + -webkit-animation: animateXMark 0.5s; + animation: animateXMark 0.5s; } + +@-webkit-keyframes pulseWarning { + 0% { + border-color: #F8D486; } + + 100% { + border-color: #F8BB86; } } + +@keyframes pulseWarning { + 0% { + border-color: #F8D486; } + + 100% { + border-color: #F8BB86; } } + +.pulseWarning { + -webkit-animation: pulseWarning 0.75s infinite alternate; + animation: pulseWarning 0.75s infinite alternate; } + +@-webkit-keyframes pulseWarningIns { + 0% { + background-color: #F8D486; } + + 100% { + background-color: #F8BB86; } } + +@keyframes pulseWarningIns { + 0% { + background-color: #F8D486; } + + 100% { + background-color: #F8BB86; } } + +.pulseWarningIns { + -webkit-animation: pulseWarningIns 0.75s infinite alternate; + animation: pulseWarningIns 0.75s infinite alternate; } + +/* Internet Explorer 9 has some special quirks that are fixed here */ +/* The icons are not animated. */ +/* This file is automatically merged into sweet-alert.min.js through Gulp */ +/* Error icon */ +.sweet-alert .sa-icon.sa-error .sa-line.sa-left { + -ms-transform: rotate(45deg) \9; } + +.sweet-alert .sa-icon.sa-error .sa-line.sa-right { + -ms-transform: rotate(-45deg) \9; } + +/* Success icon */ +.sweet-alert .sa-icon.sa-success { + border-color: transparent\9; } + +.sweet-alert .sa-icon.sa-success .sa-line.sa-tip { + -ms-transform: rotate(45deg) \9; } + +.sweet-alert .sa-icon.sa-success .sa-line.sa-long { + -ms-transform: rotate(-45deg) \9; } diff --git a/style/sweetalert2.css b/style/sweetalert2.css new file mode 100644 index 0000000..7e34abf --- /dev/null +++ b/style/sweetalert2.css @@ -0,0 +1,598 @@ +.swal2-overlay { + background-color: rgba(0, 0, 0, 0.4); + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: none; + z-index: 1000; } + +.swal2-modal { + background-color: #fff; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + border-radius: 5px; + box-sizing: border-box; + text-align: center; + position: fixed; + left: 50%; + top: 50%; + margin-top: -200px; + max-height: 90%; + overflow-x: hidden; + overflow-y: auto; + display: none; + z-index: 2000; } + .swal2-modal:focus { + outline: none; } + .swal2-modal.loading { + overflow-y: hidden; } + .swal2-modal h2 { + color: #575757; + font-size: 30px; + text-align: center; + font-weight: 600; + text-transform: none; + position: relative; + margin: 0; + padding: 0; + line-height: 60px; + display: block; } + .swal2-modal hr { + height: 10px; + color: transparent; + border: 0; } + .swal2-modal button.styled { + color: #fff; + border: 0; + box-shadow: none; + font-size: 17px; + font-weight: 500; + border-radius: 5px; + padding: 10px 32px; + margin: 0 5px; + cursor: pointer; } + .swal2-modal button.styled:focus { + outline: none; } + .swal2-modal button.styled[disabled] { + opacity: .4; + cursor: no-drop; } + .swal2-modal button.styled.loading { + box-sizing: border-box; + border: 4px solid transparent; + border-color: transparent; + width: 40px; + height: 40px; + padding: 0; + margin: -2px 30px; + vertical-align: top; + background-color: transparent !important; + color: transparent; + cursor: default; + border-radius: 100%; + -webkit-animation: rotate-loading 1.5s linear 0s infinite normal; + animation: rotate-loading 1.5s linear 0s infinite normal; } + .swal2-modal button.styled::-moz-focus-inner { + border: 0; } + .swal2-modal .swal2-image { + margin: 20px auto; } + .swal2-modal .swal2-close { + font-size: 36px; + line-height: 36px; + font-family: serif; + position: absolute; + top: 5px; + right: 13px; + cursor: pointer; + color: #cfcfcf; + -webkit-transition: all 0.1s ease; + transition: all 0.1s ease; } + .swal2-modal .swal2-close:hover { + color: #d55; } + +.swal2-content { + font-size: 18px; + text-align: center; + font-weight: 300; + position: relative; + float: none; + margin: 0; + padding: 0; + line-height: normal; + color: #555; } + +.swal2-icon { + width: 80px; + height: 80px; + border: 4px solid #808080; + border-radius: 50%; + margin: 20px auto 30px; + padding: 0; + position: relative; + box-sizing: content-box; + cursor: default; + /* http://stackoverflow.com/a/4407335/1331425 */ + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .swal2-icon.swal2-error { + border-color: #f27474; } + .swal2-icon.swal2-error .x-mark { + position: relative; + display: block; } + .swal2-icon.swal2-error .line { + position: absolute; + height: 5px; + width: 47px; + background-color: #f27474; + display: block; + top: 37px; + border-radius: 2px; } + .swal2-icon.swal2-error .line.left { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + left: 17px; } + .swal2-icon.swal2-error .line.right { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + right: 16px; } + .swal2-icon.swal2-warning { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #f8bb86; + border-color: #f8bb86; + font-size: 60px; + line-height: 80px; + text-align: center; } + .swal2-icon.swal2-info { + font-family: "Open Sans", sans-serif; + color: #3fc3ee; + border-color: #3fc3ee; + font-size: 60px; + line-height: 80px; + text-align: center; } + .swal2-icon.swal2-question { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #c9dae1; + border-color: #c9dae1; + font-size: 60px; + line-height: 80px; + text-align: center; } + .swal2-icon.swal2-success { + border-color: #a5dc86; } + .swal2-icon.swal2-success::before, .swal2-icon.swal2-success::after { + content: ''; + border-radius: 50%; + position: absolute; + width: 60px; + height: 120px; + background: #fff; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .swal2-icon.swal2-success::before { + border-radius: 120px 0 0 120px; + top: -7px; + left: -33px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 60px 60px; + transform-origin: 60px 60px; } + .swal2-icon.swal2-success::after { + border-radius: 0 120px 120px 0; + top: -11px; + left: 30px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 0 60px; + transform-origin: 0 60px; } + .swal2-icon.swal2-success .placeholder { + width: 80px; + height: 80px; + border: 4px solid rgba(165, 220, 134, 0.2); + border-radius: 50%; + box-sizing: content-box; + position: absolute; + left: -4px; + top: -4px; + z-index: 2; } + .swal2-icon.swal2-success .fix { + width: 7px; + height: 90px; + background-color: #fff; + position: absolute; + left: 28px; + top: 8px; + z-index: 1; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .swal2-icon.swal2-success .line { + height: 5px; + background-color: #a5dc86; + display: block; + border-radius: 2px; + position: absolute; + z-index: 2; } + .swal2-icon.swal2-success .line.tip { + width: 25px; + left: 14px; + top: 46px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .swal2-icon.swal2-success .line.long { + width: 47px; + right: 8px; + top: 38px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + +.swal2-input, .swal2-textarea { + width: 100%; + box-sizing: border-box; + border-radius: 3px; + border: 1px solid #d7d7d7; + margin: 20px auto; + font-size: 18px; + box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06); + -webkit-transition: all 0.3s; + transition: all 0.3s; } + .swal2-input.error, .swal2-textarea.error { + border-color: #f06e57 !important; } + .swal2-input:focus, .swal2-textarea:focus { + outline: none; + box-shadow: 0px 0px 3px #c4e6f5; + border: 1px solid #b4dbed; } + .swal2-input:focus::-moz-placeholder, .swal2-textarea:focus::-moz-placeholder { + -webkit-transition: opacity 0.3s 0.03s ease; + transition: opacity 0.3s 0.03s ease; + opacity: 0.8; } + .swal2-input:focus:-ms-input-placeholder, .swal2-textarea:focus:-ms-input-placeholder { + -webkit-transition: opacity 0.3s 0.03s ease; + transition: opacity 0.3s 0.03s ease; + opacity: 0.8; } + .swal2-input:focus::-webkit-input-placeholder, .swal2-textarea:focus::-webkit-input-placeholder { + -webkit-transition: opacity 0.3s 0.03s ease; + transition: opacity 0.3s 0.03s ease; + opacity: 0.8; } + .swal2-input::-moz-placeholder, .swal2-textarea::-moz-placeholder { + color: #bdbdbd; } + .swal2-input:-ms-input-placeholder, .swal2-textarea:-ms-input-placeholder { + color: #bdbdbd; } + .swal2-input::-webkit-input-placeholder, .swal2-textarea::-webkit-input-placeholder { + color: #bdbdbd; } + +.swal2-input { + height: 43px; + padding: 0 12px; } + +.swal2-textarea { + height: 108px; + padding: 12px; } + +.swal2-select { + color: #555; + font-size: inherit; + margin: 20px auto; + padding: 5px 10px; + min-width: 40%; + max-width: 100%; } + +.swal2-radio { + border: 0; + margin: 20px auto; } + .swal2-radio label:not(:first-child) { + margin-left: 20px; } + .swal2-radio input, .swal2-radio span { + vertical-align: middle; } + .swal2-radio input { + margin: 0 3px 0 0; } + +.swal2-checkbox { + color: #555; + margin: 20px auto; } + .swal2-checkbox input, .swal2-checkbox span { + vertical-align: middle; } + +.swal2-validationerror { + background-color: #f1f1f1; + margin: 0 -20px; + overflow: hidden; + padding: 10px; + color: #797979; + font-size: 16px; + font-weight: 300; } + .swal2-validationerror::before { + content: "!"; + display: inline-block; + width: 24px; + height: 24px; + border-radius: 50%; + background-color: #ea7d7d; + color: white; + line-height: 24px; + text-align: center; + margin-right: 10px; } + +@-webkit-keyframes showSweetAlert { + 0% { + -webkit-transform: scale(0.7); + transform: scale(0.7); } + 45% { + -webkit-transform: scale(1.05); + transform: scale(1.05); } + 80% { + -webkit-transform: scale(0.95); + transform: scale(0.95); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); } } + +@keyframes showSweetAlert { + 0% { + -webkit-transform: scale(0.7); + transform: scale(0.7); } + 45% { + -webkit-transform: scale(1.05); + transform: scale(1.05); } + 80% { + -webkit-transform: scale(0.95); + transform: scale(0.95); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); } } + +@-webkit-keyframes hideSweetAlert { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + 100% { + -webkit-transform: scale(0.5); + transform: scale(0.5); + opacity: 0; } } + +@keyframes hideSweetAlert { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + 100% { + -webkit-transform: scale(0.5); + transform: scale(0.5); + opacity: 0; } } + +.show-swal2 { + -webkit-animation: showSweetAlert 0.3s; + animation: showSweetAlert 0.3s; } + .show-swal2.no-animation { + -webkit-animation: none; + animation: none; } + +.hide-swal2 { + -webkit-animation: hideSweetAlert 0.15s; + animation: hideSweetAlert 0.15s; } + .hide-swal2.no-animation { + -webkit-animation: none; + animation: none; } + +@-webkit-keyframes animate-success-tip { + 0% { + width: 0; + left: 1px; + top: 19px; } + 54% { + width: 0; + left: 1px; + top: 19px; } + 70% { + width: 50px; + left: -8px; + top: 37px; } + 84% { + width: 17px; + left: 21px; + top: 48px; } + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@keyframes animate-success-tip { + 0% { + width: 0; + left: 1px; + top: 19px; } + 54% { + width: 0; + left: 1px; + top: 19px; } + 70% { + width: 50px; + left: -8px; + top: 37px; } + 84% { + width: 17px; + left: 21px; + top: 48px; } + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@-webkit-keyframes animate-success-long { + 0% { + width: 0; + right: 46px; + top: 54px; } + 65% { + width: 0; + right: 46px; + top: 54px; } + 84% { + width: 55px; + right: 0; + top: 35px; } + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@keyframes animate-success-long { + 0% { + width: 0; + right: 46px; + top: 54px; } + 65% { + width: 0; + right: 46px; + top: 54px; } + 84% { + width: 55px; + right: 0; + top: 35px; } + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@-webkit-keyframes rotatePlaceholder { + 0% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 5% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 12% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } + 100% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } } + +@keyframes rotatePlaceholder { + 0% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 5% { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + 12% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } + 100% { + -webkit-transform: rotate(-405deg); + transform: rotate(-405deg); } } + +.animate-success-tip { + -webkit-animation: animate-success-tip 0.75s; + animation: animate-success-tip 0.75s; } + +.animate-success-long { + -webkit-animation: animate-success-long 0.75s; + animation: animate-success-long 0.75s; } + +.swal2-icon.swal2-success.animate::after { + -webkit-animation: rotatePlaceholder 4.25s ease-in; + animation: rotatePlaceholder 4.25s ease-in; } + +@-webkit-keyframes animate-error-icon { + 0% { + -webkit-transform: rotateX(100deg); + transform: rotateX(100deg); + opacity: 0; } + 100% { + -webkit-transform: rotateX(0deg); + transform: rotateX(0deg); + opacity: 1; } } + +@keyframes animate-error-icon { + 0% { + -webkit-transform: rotateX(100deg); + transform: rotateX(100deg); + opacity: 0; } + 100% { + -webkit-transform: rotateX(0deg); + transform: rotateX(0deg); + opacity: 1; } } + +.animate-error-icon { + -webkit-animation: animate-error-icon 0.5s; + animation: animate-error-icon 0.5s; } + +@-webkit-keyframes animate-x-mark { + 0% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 50% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 80% { + -webkit-transform: scale(1.15); + transform: scale(1.15); + margin-top: -6px; } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + margin-top: 0; + opacity: 1; } } + +@keyframes animate-x-mark { + 0% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 50% { + -webkit-transform: scale(0.4); + transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 80% { + -webkit-transform: scale(1.15); + transform: scale(1.15); + margin-top: -6px; } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + margin-top: 0; + opacity: 1; } } + +.animate-x-mark { + -webkit-animation: animate-x-mark 0.5s; + animation: animate-x-mark 0.5s; } + +@-webkit-keyframes pulse-warning { + 0% { + border-color: #f8d486; } + 100% { + border-color: #f8bb86; } } + +@keyframes pulse-warning { + 0% { + border-color: #f8d486; } + 100% { + border-color: #f8bb86; } } + +.pulse-warning { + -webkit-animation: pulse-warning 0.75s infinite alternate; + animation: pulse-warning 0.75s infinite alternate; } + +@-webkit-keyframes rotate-loading { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes rotate-loading { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } diff --git a/style/sweetalert2.min.css b/style/sweetalert2.min.css new file mode 100644 index 0000000..ac10d2a --- /dev/null +++ b/style/sweetalert2.min.css @@ -0,0 +1 @@ +.swal2-modal,.swal2-overlay{position:fixed;display:none}.swal2-modal button.styled:focus,.swal2-modal:focus{outline:0}.swal2-overlay{background-color:rgba(0,0,0,.4);left:0;right:0;top:0;bottom:0;z-index:1000}.swal2-modal{background-color:#fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;border-radius:5px;box-sizing:border-box;text-align:center;left:50%;top:50%;margin-top:-200px;max-height:90%;overflow-x:hidden;overflow-y:auto;z-index:2000}.swal2-modal.loading{overflow-y:hidden}.swal2-modal h2{color:#575757;font-size:30px;text-align:center;font-weight:600;text-transform:none;position:relative;margin:0;padding:0;line-height:60px;display:block}.swal2-modal hr{height:10px;color:transparent;border:0}.swal2-modal button.styled{color:#fff;border:0;box-shadow:none;font-size:17px;font-weight:500;border-radius:5px;padding:10px 32px;margin:0 5px;cursor:pointer}.swal2-content,.swal2-icon{padding:0;position:relative}.swal2-modal button.styled[disabled]{opacity:.4;cursor:no-drop}.swal2-modal button.styled.loading{box-sizing:border-box;border:4px solid transparent;width:40px;height:40px;padding:0;margin:-2px 30px;vertical-align:top;background-color:transparent!important;color:transparent;cursor:default;border-radius:100%;-webkit-animation:rotate-loading 1.5s linear 0s infinite normal;animation:rotate-loading 1.5s linear 0s infinite normal}.swal2-checkbox input,.swal2-checkbox span,.swal2-radio input,.swal2-radio span{vertical-align:middle}.swal2-modal button.styled::-moz-focus-inner{border:0}.swal2-modal .swal2-image{margin:20px auto}.swal2-modal .swal2-close{font-size:36px;line-height:36px;font-family:serif;position:absolute;top:5px;right:13px;cursor:pointer;color:#cfcfcf;-webkit-transition:all .1s ease;transition:all .1s ease}.swal2-modal .swal2-close:hover{color:#d55}.swal2-content{font-size:18px;text-align:center;font-weight:300;float:none;margin:0;line-height:normal;color:#555}.swal2-icon.swal2-info,.swal2-icon.swal2-question,.swal2-icon.swal2-warning{font-size:60px;line-height:80px;text-align:center}.swal2-icon{width:80px;height:80px;border:4px solid grey;border-radius:50%;margin:20px auto 30px;box-sizing:content-box;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon.swal2-error{border-color:#f27474}.swal2-icon.swal2-error .x-mark{position:relative;display:block}.swal2-icon.swal2-error .line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.swal2-icon.swal2-error .line.left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.swal2-icon.swal2-error .line.right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.swal2-icon.swal2-warning{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#f8bb86;border-color:#f8bb86}.swal2-icon.swal2-info{font-family:"Open Sans",sans-serif;color:#3fc3ee;border-color:#3fc3ee}.swal2-icon.swal2-question{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#c9dae1;border-color:#c9dae1}.swal2-icon.swal2-success{border-color:#a5dc86}.swal2-icon.swal2-success::after,.swal2-icon.swal2-success::before{content:'';position:absolute;width:60px;height:120px;background:#fff}.swal2-icon.swal2-success::before{border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.swal2-icon.swal2-success::after{border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.swal2-icon.swal2-success .placeholder{width:80px;height:80px;border:4px solid rgba(165,220,134,.2);border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.swal2-icon.swal2-success .fix{width:7px;height:90px;background-color:#fff;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-icon.swal2-success .line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.swal2-icon.swal2-success .line.tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.swal2-icon.swal2-success .line.long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.swal2-input,.swal2-textarea{width:100%;box-sizing:border-box;border-radius:3px;border:1px solid #d7d7d7;margin:20px auto;font-size:18px;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);-webkit-transition:all .3s;transition:all .3s}.swal2-input.error,.swal2-textarea.error{border-color:#f06e57!important}.swal2-input:focus,.swal2-textarea:focus{outline:0;box-shadow:0 0 3px #c4e6f5;border:1px solid #b4dbed}.swal2-input:focus::-moz-placeholder,.swal2-textarea:focus::-moz-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:focus:-ms-input-placeholder,.swal2-textarea:focus:-ms-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input:focus::-webkit-input-placeholder,.swal2-textarea:focus::-webkit-input-placeholder{-webkit-transition:opacity .3s 30ms ease;transition:opacity .3s 30ms ease;opacity:.8}.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#bdbdbd}.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#bdbdbd}.swal2-input::-webkit-input-placeholder,.swal2-textarea::-webkit-input-placeholder{color:#bdbdbd}.swal2-input{height:43px;padding:0 12px}.swal2-textarea{height:108px;padding:12px}.swal2-select{color:#555;font-size:inherit;margin:20px auto;padding:5px 10px;min-width:40%;max-width:100%}.swal2-radio{border:0;margin:20px auto}.swal2-radio label:not(:first-child){margin-left:20px}.swal2-radio input{margin:0 3px 0 0}.swal2-checkbox{color:#555;margin:20px auto}.swal2-validationerror{background-color:#f1f1f1;margin:0 -20px;overflow:hidden;padding:10px;color:#797979;font-size:16px;font-weight:300}.swal2-validationerror::before{content:"!";display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:10px}@-webkit-keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes showSweetAlert{0%{-webkit-transform:scale(.7);transform:scale(.7)}45%{-webkit-transform:scale(1.05);transform:scale(1.05)}80%{-webkit-transform:scale(.95);transform:scale(.95)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}@keyframes hideSweetAlert{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{-webkit-transform:scale(.5);transform:scale(.5);opacity:0}}.show-swal2{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.show-swal2.no-animation{-webkit-animation:none;animation:none}.hide-swal2{-webkit-animation:hideSweetAlert .15s;animation:hideSweetAlert .15s}.hide-swal2.no-animation{-webkit-animation:none;animation:none}@-webkit-keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@keyframes animate-success-tip{0%,54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}100%{width:25px;left:14px;top:45px}}@-webkit-keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@keyframes animate-success-long{0%,65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}100%{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%,5%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}100%,12%{-webkit-transform:rotate(-405deg);transform:rotate(-405deg)}}.animate-success-tip{-webkit-animation:animate-success-tip .75s;animation:animate-success-tip .75s}.animate-success-long{-webkit-animation:animate-success-long .75s;animation:animate-success-long .75s}.swal2-icon.swal2-success.animate::after{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}@keyframes animate-error-icon{0%{-webkit-transform:rotateX(100deg);transform:rotateX(100deg);opacity:0}100%{-webkit-transform:rotateX(0);transform:rotateX(0);opacity:1}}.animate-error-icon{-webkit-animation:animate-error-icon .5s;animation:animate-error-icon .5s}@-webkit-keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}@keyframes animate-x-mark{0%,50%{-webkit-transform:scale(.4);transform:scale(.4);margin-top:26px;opacity:0}80%{-webkit-transform:scale(1.15);transform:scale(1.15);margin-top:-6px}100%{-webkit-transform:scale(1);transform:scale(1);margin-top:0;opacity:1}}.animate-x-mark{-webkit-animation:animate-x-mark .5s;animation:animate-x-mark .5s}@-webkit-keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}@keyframes pulse-warning{0%{border-color:#f8d486}100%{border-color:#f8bb86}}.pulse-warning{-webkit-animation:pulse-warning .75s infinite alternate;animation:pulse-warning .75s infinite alternate}@-webkit-keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-loading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} \ No newline at end of file diff --git a/style/tables.css b/style/tables.css new file mode 100644 index 0000000..b50b93c --- /dev/null +++ b/style/tables.css @@ -0,0 +1,151 @@ +table.tag { + border-collapse:collapse; + width:100%; + border:1px dashed #000; +} +table.tag tbody tr td { + border:1px dashed #000; +} +table.tag tr:hover { + background-color:#EAEAEA; +} +table.desc_val { + border-collapse:collapse; + width:100%; + border:1px dashed #000; +} +table.foot_buttons { + width:100%; + border:0px +} + + + + +td.label { + text-align:center; + padding: 5px; + background-color:#DFF; + font-weight: bold; + border:1px dashed #000; +} +td.label_gray { + text-align:center; + padding: 5px; + font-weight: bold; + background-color:#EAEAEA; + border:1px dashed #fff; +} + +td.desc { + text-align:right; + padding: 5px; + width: 25%; + background-color:#EAEAEA; + border:1px dashed #fff; +} +td.desc_well_param { + text-align:right; + padding: 5px; + width: 42%; + background-color:#EAEAEA; + border:1px dashed #fff; +} +td.desc_equipment { + text-align:right; + padding: 5px; + width: 33%; + background-color:#EAEAEA; + border:1px dashed #fff; +} +td.desc_well_choice { + text-align:right; + padding: 5px; + width: 60%; + background-color:#EAEAEA; + border:1px dashed #fff; +} + + + +td.desc_value { + text-align:left; + word-wrap: break-word; + padding: 5px; + border:1px dashed #EAEAEA; +} +td.red_value { + background-color: #ffb494; + text-align:left; + padding: 5px; + border:1px dashed #EAEAEA; +} +td.orange_value { + background-color: #ff6600; + text-align:left; + padding: 5px; + border:1px dashed #EAEAEA; +} +td.yellow_value { + background-color: #ffffb8; + text-align:left; + padding: 5px; + border:1px dashed #EAEAEA; +} +td.green_value { + background-color: #caffaa; + text-align:left; + padding: 5px; + border:1px dashed #EAEAEA; +} + + + +td.field_left { + text-align:left; + padding: 5px; + border:1px dashed #000; +} +td.field_right { + text-align:right; + padding: 5px; + border:1px dashed #000; +} +td.field_center { + text-align:center; + padding: 5px; + border:1px dashed #000; +} + +td.foot_butt_add { + width: 20%; + text-align:center; + padding: 5px; +} + + +td.eq_label { + text-align:center; + padding: 2px; + background-color: #bbffd8; + font-weight: bold; + border:1px dashed #000; +} +td.eq_details { + background-color: #ffffff; + text-align:left; + padding: 2px; + border:1px dashed #000; +} + +span.resume +{ + line-height: 30px; + font-weight: bold; + font-style: italic; +} + +td.group_color +{ + color: #0000FF; +} \ No newline at end of file diff --git a/style/theme.css b/style/theme.css new file mode 100644 index 0000000..bfa559c --- /dev/null +++ b/style/theme.css @@ -0,0 +1,296 @@ +/*! Generated by Live LESS Theme Customizer */ + + +.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px} +.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none} +.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)} +.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none} +a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none} +.btn-default{color:#333;background-color:#fff;border-color:#ccc} +.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c} +.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad} +.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c} +.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none} +.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc} +.btn-default .badge{color:#fff;background-color:#333} +.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4} +.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40} +.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74} +.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40} +.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none} +.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4} +.btn-primary .badge{color:#337ab7;background-color:#fff} +.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c} +.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625} +.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439} +.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625} +.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none} +.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c} +.btn-success .badge{color:#5cb85c;background-color:#fff} +.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da} +.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85} +.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc} +.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85} +.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none} +.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da} +.btn-info .badge{color:#5bc0de;background-color:#fff} +.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236} +.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d} +.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512} +.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d} +.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none} +.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236} +.btn-warning .badge{color:#f0ad4e;background-color:#fff} +.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a} +.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19} +.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925} +.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19} +.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none} +.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a} +.btn-danger .badge{color:#d9534f;background-color:#fff} +.btn-link{color:#337ab7;font-weight:400;border-radius:0} +.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none} +.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent} +.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent} +.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none} +.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} +.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} +.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px} +.btn-block{display:block;width:100%} +.btn-block+.btn-block{margin-top:5px} +input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} +.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear} +.fade.in{opacity:1} +.collapse{display:none} +.collapse.in{display:block} +tr.collapse.in{display:table-row} +tbody.collapse.in{display:table-row-group} +.breadcrumb>li,.btn-group,.btn-group-vertical,.caret,.pagination{display:inline-block} +.collapsing{height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease} +.caret{width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent} +.dropdown-toggle:focus{outline:0} +.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box} +.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0} +.dropdown-header,.dropdown-menu>li>a{line-height:1.42857143;white-space:nowrap;padding:3px 20px} +.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto} +.dropdown-menu .divider{margin:9px 0;background-color:#e5e5e5} +.dropdown-menu>li>a{display:block;clear:both;font-weight:400;color:#333} +.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5} +.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7} +.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777} +.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed} +.open>.dropdown-menu{display:block} +.open>a{outline:0} +.dropdown-menu-left{left:0;right:auto} +.dropdown-header{display:block;font-size:12px;color:#777} +.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990} +.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto} +.pull-right>.dropdown-menu{right:0;left:auto} +.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""} +.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px} +@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0} +.navbar-right .dropdown-menu-left{left:0;right:auto} +} +.btn-group,.btn-group-vertical{position:relative;vertical-align:middle} +.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left} +.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2} +.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px} +.btn-toolbar{margin-left:-5px} +.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left} +.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px} +.btn-group>.btn:first-child{margin-left:0} +.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0} +.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0} +.btn-group>.btn-group{float:left} +.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0} +.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0} +.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0} +.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px} +.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px} +.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)} +.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none} +.btn .caret{margin-left:0} +.btn-lg .caret{border-width:5px 5px 0} +.dropup .btn-lg .caret{border-width:0 5px 5px} +.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%} +.btn-group-vertical>.btn-group>.btn{float:none} +.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0} +.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0} +.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0} +.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0} +.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0} +.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0} +.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate} +.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%} +.btn-group-justified>.btn-group .btn{width:100%} +.btn-group-justified>.btn-group .dropdown-menu{left:auto} +[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none} +.input-group,.input-group .form-control,.input-group-btn,.input-group-btn>.btn,.nav>li,.nav>li>a,.navbar{position:relative} +.input-group{display:table;border-collapse:separate} +.input-group[class*=col-]{float:none;padding-left:0;padding-right:0} +.input-group .form-control{z-index:2;float:left;width:100%;margin-bottom:0} +.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} +select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px} +select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto} +.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} +select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px} +.badge,.input-group-addon,.label{line-height:1;text-align:center} +select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto} +.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell} +.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0} +.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle} +.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;color:#555;background-color:#eee;border:1px solid #ccc;border-radius:4px} +.badge,.label{font-weight:700;white-space:nowrap} +.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px} +.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px} +.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0} +.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0} +.input-group-addon:first-child{border-right:0} +.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0} +.input-group-addon:last-child{border-left:0} +.input-group-btn{font-size:0;white-space:nowrap} +.input-group-btn>.btn+.btn{margin-left:-1px} +.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2} +.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px} +.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px} + + +.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5} +.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc} +.breadcrumb>.active{color:#777} +.pagination{padding-left:0;margin:10px 0} +.pager li,.pagination>li{display:inline} +.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px} +.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px} +.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px} +.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd} +.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default} +.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed} +.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333} +.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px} +.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px} +.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5} +.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px} +.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px} +.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center} +.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px} +.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee} +.pager .next>a,.pager .next>span{float:right} +.pager .previous>a,.pager .previous>span{float:left} +.close,.list-group-item>.badge{float:right} +.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed} + + +.alert,.panel-body{padding:15px} +.alert{border:1px solid transparent;border-radius:4px} +.alert h4{margin-top:0;color:inherit} +.alert>p,.alert>ul{margin-bottom:0} +.alert>p+p{margin-top:5px} +.alert-dismissable,.alert-dismissible{padding-right:35px} +.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit} +.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d} +.alert-success hr{border-top-color:#c9e2b3} +.alert-success .alert-link{color:#2b542c} +.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f} +.alert-info hr{border-top-color:#a6e1ec} +.alert-info .alert-link{color:#245269} +.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b} +.alert-warning hr{border-top-color:#f7e1b5} +.alert-warning .alert-link{color:#66512c} +.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442} +.alert-danger hr{border-top-color:#e4b9c0} +.alert-danger .alert-link{color:#843534} + + +.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)} +.progress-bar{float:left;width:0;height:100%;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease} +.progress-bar-striped,.progress-striped .progress-bar{background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px} +.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} +.progress-bar-success{background-color:#5cb85c} +.progress-striped .progress-bar-success{background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} +.progress-bar-info{background-color:#5bc0de} +.progress-striped .progress-bar-info{background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} +.progress-bar-warning{background-color:#f0ad4e} +.progress-striped .progress-bar-warning{background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} +.progress-bar-danger{background-color:#d9534f} +.progress-striped .progress-bar-danger{background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} + + + + +.modal-content,.popover{background-color:#fff;background-clip:padding-box} +.modal-open{overflow:hidden} +.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0} +.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out} +.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)} +.modal-open .modal{overflow-x:hidden;overflow-y:auto} +.modal-dialog{position:relative;width:auto;margin:10px} +.modal-content{position:relative;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000} +.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)} +.carousel-control,.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)} +.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.43px} +.modal-header .close{margin-top:-2px} +.modal-title{margin:0;line-height:1.42857143} +.modal-body{position:relative;padding:15px} +.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5} +.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0} +.modal-footer .btn-group .btn+.btn{margin-left:-1px} +.modal-footer .btn-block+.btn-block{margin-left:0} +.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll} +@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto} +.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)} +.modal-sm{width:300px} +} +.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-width:5px 5px 0;bottom:0;margin-bottom:-5px;border-top-color:#000} +@media (min-width:992px){.modal-lg{width:900px} +} +.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;text-shadow:none;word-break:normal;word-spacing:normal;word-wrap:normal;opacity:0;filter:alpha(opacity=0)} +.tooltip.in{opacity:.9;filter:alpha(opacity=90)} +.tooltip.top{margin-top:-3px;padding:5px 0} +.tooltip.right{margin-left:3px;padding:0 5px} +.tooltip.bottom{margin-top:3px;padding:5px 0} +.tooltip.left{margin-left:-3px;padding:0 5px} +.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px} +.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid} +.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000} +.tooltip.top-left .tooltip-arrow{right:5px} +.tooltip.top-right .tooltip-arrow{left:5px} +.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000} +.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000} +.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000} +.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000} +.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000} +.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;text-shadow:none;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)} +.popover.top{margin-top:-10px} +.popover.right{margin-left:10px} +.popover.bottom{margin-top:10px} +.popover.left{margin-left:-10px} +.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0} +.popover-content{padding:9px 14px} +.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid} +.popover>.arrow{border-width:11px} +.popover>.arrow:after{border-width:10px;content:""} +.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px} +.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff} +.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "} +.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)} +.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff} +.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px} +.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff} +.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)} +.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff} + + +.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table} +.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both} +.center-block{display:block;margin-left:auto;margin-right:auto} +.pull-right{float:right!important} +.pull-left{float:left!important} +.hide{display:none!important} +.show{display:block!important} +.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important} +.invisible{visibility:hidden} +.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0} +.affix{position:fixed} diff --git a/style/tooltip.css b/style/tooltip.css new file mode 100644 index 0000000..68aec75 --- /dev/null +++ b/style/tooltip.css @@ -0,0 +1,71 @@ +.tooltip { position: relative; z-index: 20;} +.tooltip span { display: none; } +.tooltip:hover { z-index: 21;} +.tooltip:hover span { + display: block; + width: 150px; + padding: 5px; + color: #000; + background: #f0f0f0; + font-size: 11px; + text-decoration: none; + position: absolute; + border-radius: 6px; + top: -6px; + left: 24px; + border: 1px solid #0C7491; +} + +.tooltip_help { position: relative; z-index: 20; vertical-align: top;} +.tooltip_help span { display: none; } +.tooltip_help:hover { z-index: 21;} +.tooltip_help:hover span { + display: block; + width: 150px; + padding: 5px; + color: #000; + background: #f0f0f0; + font-size: 11px; + text-decoration: none; + position: absolute; + border-radius: 6px; + top: -6px; + left: 24px; + border: 1px solid #0C7491; +} + +.tooltip_warning { position: relative; z-index: 20; } +.tooltip_warning span { display: none; } +.tooltip_warning:hover { z-index: 21;} +.tooltip_warning:hover span { + display: block; + width: 150px; + padding: 5px; + color: #000; + background: #f0f0f0; + font-size: 11px; + text-decoration: none; + position: absolute; + border-radius: 6px; + top: -6px; + left: 24px; + border: 1px solid #bb0000; +} + +.tooltip_logout { position: relative; z-index: 20;} +.tooltip_logout span { display: none; } +.tooltip_logout:hover { z-index: 21;} +.tooltip_logout:hover span { + display: block; + width: 195px; + padding: 5px; + color: #ffffff; + background: #0c7491; + font-size: 14px; + text-decoration: none; + position: absolute; + border-radius: 5px; + top: 10px; + left: 52px; +} + diff --git a/style/topmenu.css b/style/topmenu.css new file mode 100644 index 0000000..069017d --- /dev/null +++ b/style/topmenu.css @@ -0,0 +1,49 @@ +* { +margin: 0; +padding: 0; +} + +#menu li { +position: relative; +float: left; +list-style: none; +text-align: left; +padding-bottom: 1px; +line-height: 0; +z-index: 90; +} + +#menu ul { +position: absolute; +display: none; +} + +#menu li:hover ul { +display: block; +font: 16px/30px sans-serif; +text-decoration: none; +background-color: #BB0000; +color: #E6E6E6; +z-index: 91; +} + +#menu a, #menu li:hover li a { +display: block; +font: 16px/30px sans-serif; +text-decoration: none; +color: #E6E6E6; +background-color: #BB0000; +z-index: 91; +} +#menu li:hover a, #menu li:hover li:hover a { +color: #ffffff; +background-color: #C80000; +z-index: 91; +} + +#menu ul, #menu li:hover li a { +width: 300px; +z-index: 91; + +} + diff --git a/syndis_test.php b/syndis_test.php new file mode 100644 index 0000000..0020a2f --- /dev/null +++ b/syndis_test.php @@ -0,0 +1,176 @@ +<?php +/* ============================================================================ + * SoftSPM - skrypt diagnostyczny polaczenia z usluga SOAP systemu SYNDIS. + * + * PLIK JEDNORAZOWY - po zakonczonej diagnostyce NALEZY GO USUNAC z serwera. + * + * Uruchomienie: + * - z przegladarki: http://<serwer>/syndis_test.php [wymaga zalogowania do SoftSPM] + * - z wiersza polecen: C:\Programy\xampp_old\php\php.exe syndis_test.php + * + * Skrypt NICZEGO NIE ZAPISUJE - wykonuje wylacznie operacje odczytu. + * + * Testuje kolejno: + * 1. osiagalnosc portu TCP [fsockopen] + * 2. pobranie pliku WSDL przez HTTP + * 3. surowy POST z gotowa koperta SOAP - z pominieciem klasy SoapClient + * 4. wywolanie przez SoapClient w kilku wariantach opcji transportu + * ========================================================================== */ + +$isCli = (php_sapi_name() == 'cli'); + +if (!$isCli) +{ + session_start(); + if (empty($_SESSION['user'])) die('Brak dostepu - zaloguj sie najpierw do SoftSPM.'); + header('Content-Type: text/html; charset=utf-8'); + echo '<meta charset="utf-8"><style>body{font-family:Consolas,monospace;font-size:12px;background:#f6f9fb;color:#26323a;margin:16px}' + . 'h2{font-family:"Segoe UI",Arial;font-size:16px;color:#0c7491;border-bottom:2px solid #29abe2;padding-bottom:4px;margin:22px 0 8px}' + . 'h3{font-family:"Segoe UI",Arial;font-size:13px;margin:14px 0 4px;color:#26323a}' + . 'pre{background:#fff;border:1px solid #dfe6ea;border-radius:6px;padding:10px;white-space:pre-wrap;word-break:break-all;max-height:340px;overflow:auto;margin:4px 0}' + . '.ok{color:#1f8a53;font-weight:bold}.bad{color:#c1272d;font-weight:bold}.warn{color:#b3760a;font-weight:bold}</style>'; +} + +function out($s='') { global $isCli; echo $isCli ? strip_tags($s)."\n" : $s."<br>\n"; } +function head2($s) { global $isCli; echo $isCli ? "\n=== $s ===\n" : "<h2>$s</h2>\n"; } +function head3($s) { global $isCli; echo $isCli ? "\n--- $s ---\n" : "<h3>$s</h3>\n"; } +function dump($s) { global $isCli; echo $isCli ? $s."\n" : "<pre>".htmlspecialchars($s, ENT_QUOTES, 'UTF-8')."</pre>\n"; } +function verdict($ok,$t) { return $ok ? '<span class="ok">OK</span> '.$t : '<span class="bad">BLAD</span> '.$t; } + +// -------------------------------------------------------------------------- +// Adresy do sprawdzenia - wszystkie wystepujace w kodzie importerow soap_*.php. +// Mozna dopisac wlasny, np. array('192.168.1.50', 3615). +// -------------------------------------------------------------------------- +$hosts = array( + array('172.22.64.101', 3615, 'soap_of_while.php, soap_importwells.php - aktualnie skonfigurowany'), + array('172.22.64.134', 3615, 'soap_importwells_migracja.php'), + array('172.21.11.101', 3615, 'soap_update5min.php, soap_importusers.php'), + array('172.20.43.10', 3615, 'adres zakomentowany w importerach'), +); + +$soapAction = 'http://www.mikronika.com.pl/2014/11/24/spm/GetUserInfos'; +$envelope = '<?xml version="1.0" encoding="UTF-8"?>'."\n" + . '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' + . 'xmlns:ns1="http://www.mikronika.com.pl/2014/11/24/spm/types">' + . '<SOAP-ENV:Body><ns1:GetUserInfosRequest/></SOAP-ENV:Body></SOAP-ENV:Envelope>'; + +$localWsdl = dirname(__FILE__).DIRECTORY_SEPARATOR.'SyndisSpm.wsdl'; + +out('SoftSPM - diagnostyka polaczenia z SYNDIS'); +out('Data: '.date('Y-m-d H:i:s').' | PHP '.phpversion().' | SOAP: '.(extension_loaded('soap') ? 'zaladowany' : 'BRAK ROZSZERZENIA')); +out('Lokalny plik WSDL: '.$localWsdl.' - '.(is_file($localWsdl) ? 'jest' : 'BRAK')); + +foreach ($hosts as $h) +{ + list($ip, $port, $desc) = $h; + head2($ip.':'.$port.' ['.$desc.']'); + + // ---------------- 1. osiagalnosc portu ---------------- + head3('1. Port TCP'); + $t0 = microtime(true); + $errNo = 0; $errStr = ''; + $fp = @fsockopen($ip, $port, $errNo, $errStr, 5); + $ms = round((microtime(true) - $t0) * 1000); + if (!$fp) + { + out(verdict(false, "port nieosiagalny po {$ms} ms - {$errStr} [{$errNo}]")); + out('Dalsze testy dla tego adresu pominiete.'); + continue; + } + out(verdict(true, "polaczono w {$ms} ms")); + + // ---------------- 2. WSDL przez HTTP ---------------- + head3('2. Pobranie WSDL przez HTTP [port 80]'); + $ctx = stream_context_create(array('http' => array('timeout' => 8, 'ignore_errors' => true))); + $wsdl = @file_get_contents('http://'.$ip.'/SyndisSpm.wsdl', false, $ctx); + if ($wsdl === false) + out(verdict(false, 'nie udalo sie pobrac')); + else + { + $isXml = (strpos(substr($wsdl, 0, 200), '<?xml') !== false || strpos(substr($wsdl, 0, 400), '<definitions') !== false); + out(verdict($isXml, strlen($wsdl).' B, '.($isXml ? 'wyglada na XML' : 'to NIE jest XML'))); + if (!$isXml) dump(substr($wsdl, 0, 600)); + } + + // ---------------- 3. surowy POST bez SoapClient ---------------- + head3('3. Surowy POST z koperta SOAP [z pominieciem SoapClient]'); + $req = "POST / HTTP/1.1\r\n"; + $req .= "Host: {$ip}:{$port}\r\n"; + $req .= "Content-Type: text/xml; charset=utf-8\r\n"; + $req .= "SOAPAction: \"{$soapAction}\"\r\n"; + $req .= "User-Agent: SoftSPM-diag\r\n"; + $req .= "Content-Length: ".strlen($envelope)."\r\n"; + $req .= "Connection: close\r\n\r\n"; + $req .= $envelope; + + stream_set_timeout($fp, 20); + fwrite($fp, $req); + $raw = ''; + while (!feof($fp)) + { + $chunk = fread($fp, 8192); + if ($chunk === false || $chunk === '') break; + $raw .= $chunk; + if (strlen($raw) > 400000) break; + } + $meta = stream_get_meta_data($fp); + fclose($fp); + + if ($meta['timed_out']) out(verdict(false, 'przekroczono czas oczekiwania na odpowiedz')); + + if ($raw === '') + out(verdict(false, 'serwer nie zwrocil ANI JEDNEGO bajtu')); + else + { + $status = strtok($raw, "\r\n"); + $hasXml = (stripos($raw, '<?xml') !== false || stripos($raw, 'SOAP-ENV:Envelope') !== false); + out(verdict($hasXml, strlen($raw).' B | '.$status)); + dump(substr($raw, 0, 4000)); + } + + // ---------------- 4. SoapClient w kilku wariantach ---------------- + head3('4. SoapClient - warianty opcji transportu'); + if (!extension_loaded('soap')) { out('Rozszerzenie soap niezaladowane - test pominiety.'); continue; } + + $wsdlSrc = is_file($localWsdl) ? $localWsdl : 'http://'.$ip.'/SyndisSpm.wsdl'; + $variants = array( + 'domyslne' => array(), + 'keep_alive=false' => array('keep_alive' => false), + 'keep_alive=false + SOAP 1.2' => array('keep_alive' => false, 'soap_version' => SOAP_1_2), + 'kompresja gzip' => array('keep_alive' => false, 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP), + ); + + foreach ($variants as $name => $opt) + { + $opt = array_merge(array('trace' => 1, 'exceptions' => 1, 'cache_wsdl' => WSDL_CACHE_NONE, 'connection_timeout' => 15), $opt); + try + { + $cl = new SoapClient($wsdlSrc, $opt); + $cl->__setLocation('http://'.$ip.':'.$port.'/'); + $r = $cl->GetUserInfos(array()); + + $cnt = 0; + if (isset($r->users)) { $u = is_array($r->users) ? $r->users : array($r->users); $cnt = count($u); } + out(verdict(true, $name.' - odebrano kont: '.$cnt)); + if ($cnt > 0) + { + $first = is_array($r->users) ? $r->users[0] : $r->users; + out('&nbsp;&nbsp;&nbsp;pierwszy rekord: '.$first->login.' / '.$first->fullName); + } + } + catch (Exception $e) + { + out(verdict(false, $name.' - '.$e->getMessage())); + if (isset($cl)) + { + $resp = $cl->__getLastResponse(); + dump("NAGLOWKI ODPOWIEDZI:\n".$cl->__getLastResponseHeaders() + ."\nODPOWIEDZ (".strlen($resp)." B):\n".($resp === '' ? '[pusto]' : substr($resp, 0, 2000))); + } + } + } +} + +head2('Koniec'); +out('Po zakonczeniu diagnostyki USUN ten plik z serwera.'); +?> diff --git a/tcpdf/CHANGELOG.TXT b/tcpdf/CHANGELOG.TXT new file mode 100644 index 0000000..31b587b --- /dev/null +++ b/tcpdf/CHANGELOG.TXT @@ -0,0 +1,2943 @@ +6.2.12 (2015-09-12) + - fix composer package name to tecnickcom/tcpdf + +6.2.11 (2015-08-02) + - Bug #1070 "PNG regression in 6.2.9 (they appear as their alpha channel)" was fixed. + - Bug #1069 "Encoded SRC URLs in <img> tags don't work anymore" was fixed. + +6.2.10 (2015-07-28) + - Minor mod to PNG parsing. + - Make dependency on mcrypt optional. + +6.2.8 (2015-04-29) + - Removed unwanted file. + +6.2.7 (2015-04-28) + - Merged PR 17: Avoid warning when iterating a non-array variable. + - Merged PR 16: Improve MuliCell param definition. + - Improved column check (PR 15). + - Merged PR 11: Use stream_is_local instead of limit to file://. + - Merged PR 10: ImageMagick link on README.txt. + +6.2.6 (2015-01-28) + - Bug #1008 "UTC offset sing breaks PDF/A-1b compliance" was fixed. + +6.2.5 (2015-01-24) + - Bug #1019 "$this in static context" was fixed. + - Bug #1015 "Infinite loop in getIndirectObject method of parser" was fixed. + +6.2.4 (2015-01-08) + - fix warning related to empty K_PATH_URL. + - fix error when a $table_colwidths key is not set. + +6.2.3 (2014-12-18) + - New comment. + - Moved the K_PATH_IMAGES definition in tcpdf_autoconfig. + +6.2.2 (2014-12-18) + - Fixed mispelled words. + - Fixed version number. + +6.2.1 (2014-12-18) + - The constant K_TCPDF_THROW_EXCEPTION_ERROR is now set to false in the default configuration file. + - An issue with the _destroy() method was fixed. + +6.2.0 (2014-12-10) + - Bug #1005 "Security Report, LFI posting internal files externally abusing default parameter" was fixed. + - Static methods serializeTCPDFtagParameters() and unserializeTCPDFtagParameters() were moved as non static to the main TCPDF class (see changes in example n. 49). + - Deprecated methods were removed, please use the equivalents defined in other classes (i.e. TCPDF_STATIC and TCPDF_FONTS). + - The constant K_TCPDF_CALLS_IN_HTML is now set by default to FALSE. + - DLE, DLX and DLP page format was added. + - Page format are now defined as a public property in TCPDF_STATIC. + +6.1.1 (2014-12-09) + - Fixed bug with the register_shutdown_function(). + +6.1.0 (2014-12-07) + - The method TCPDF_STATIC::getRandomSeed() was improved. + - The disk caching feature was removed. + - Bug #1003 "Backslashes become duplicated in table, using WriteHTML" was fixed. + - Bug #1002 "SVG radialGradient within non-square Rect" was fixed. + +6.0.099 (2014-11-15) + - Added basic support for nested SVG images (adapted PR from SamMousa). + - A bug related to setGDImageTransparency() was fixed (thanks to Maarten Boerema). + +6.0.098 (2014-11-08) + - Bug item #996 "getCharBBox($char) returns incorrect results for TTF glyphs without outlines" was fixed. + - Bug item #991 "Text problem with SVG" was fixed (only the font style part). + +6.0.097 (2014-10-20) + - Bug item #988 "hyphenateText - charmin parameter not work" was fixed. + - New 1D barcode method to print pre-formatted IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200. + +6.0.096 (2014-10-06) + - Bug item #982 "Display style is not inherited in SVG" was fixed. + - Bug item #984 "Double quote url in CSS" was fixed. + +6.0.095 (2014-10-02) + - Bug item #979 "New Timezone option overwriting current timezone" was fixed. + +6.0.094 (2014-09-30) + - Bug item #978 "Variable Undefined: $cborder" was fixed. + +6.0.093 (2014-09-02) + - Security fix: some serialize/unserialize methods were replaced with json_encode/json_decode to avoid a potential object injection with user supplied content. Thanks to ownCloud Inc. for reporting this issue. + - K_TIMEZONE constant was added to the default configuration to suppress date-time warnings. + +6.0.092 (2014-09-01) + - Bug item #956 "Monospaced fonts are not alignd at the baseline" was fixed. + - Bug item #964 "Problem when changing font size" was fixed. + - Bug item #969 "ImageSVG with radialGradient problem" was fixed. + - sRGB.icc file was replaced with the one from the Debian package icc-profiles-free (2.0.1+dfsg-1) + +6.0.091 (2014-08-13) + - Issue #325"Division by zero when css fontsize equals 0" was fixed. + +6.0.090 (2014-08-08) + - Starting from this version TCPDF is also available in GitHub at https://github.com/tecnickcom/TCPDF + - Function getmypid() was removed for better compatibility with shared hosting environments. + - Support for pulling SVG stroke opacity value from RGBa color was mergeg [adf006]. + - Bug item #951 "HTML Table within TCPDF columns doesnt flow correctly on page break ..." was fixed. + +6.0.089 (2014-07-16) + - Bug item #948 "bottom line of rowspan cell not work correctly" was fixed. + +6.0.088 (2014-07-09) + - Bug item #946 "Case sensitive type check causes broken match for SVG" was fixed. + - Bug item #945 "Imagick load doesn't account for passed data string " was fixed. + +6.0.087 (2014-06-25) + - A bug affecting fitcell option in Multicell was fixed. + +6.0.086 (2014-06-20) + - Bug item #938 "Hyphenation-dash extends outside of cell" was fixed (collateral effect). + +6.0.085 (2014-06-19) + - Some example images were replaced. + - A race condition bug was fixed. + - Bug item #938 "Hyphenation-dash extends outside of cell" was fixed. + +6.0.084 (2014-06-13) + - A bug related to MultiCell fitcell feature was fixed. + - Bug item #931 "Documentation error for setPageFormat()" was fixed. + +6.0.083 (2014-05-29) + - Bug item #928 "setHtmlVSpace with HR element" was fixed. + +6.0.082 (2014-05-23) + - Bug item #926 "test statement instead of assignment used in tcpdf_fonts.php" was fixed. + - Bug item #925 "924 transparent images bug" was fixed. + +6.0.081 (2014-05-22) + - Bug item #922 "writehtml tables thead repeating" was fixed. + - Patch #71 "External and internal links, local and remote" wa applied. + +6.0.080 (2014-05-20) + - Bug item #921 "Fatal error in hyphenateText() function" was fixed. + - Bug item #923 "Automatic Hyphenation error" was fixed. + - Patch #70 "Augument TCPDFBarcode classes with ability to return raw png image data" was applied. + +6.0.079 (2014-05-19) + - Patch item #69 "Named destinations, HTML internal and external links" was merged. + - Bug item #920 "hyphenateText() should not hyphenate the content of style-tags in HTML mode" was fixed. + - Image method now trigs an error in case the cache is now writeable. + - Fixed issue with layer default status. + +6.0.078 (2014-05-12) + - A warning issue in addTTFfont() method was fixed. + - Fonts were updated to include cbbox metrics. + +6.0.077 (2014-05-06) + - A Datamatrix barcode bug was fixed. + +6.0.076 (2014-05-06) + - A bug in Datamatrix Base256 encoding was fixed. + - Merged fix for SVG use/clip-gradient. + - Now it is possible to prefix a page number in Link methods with the * character to avoid been changed when adding/deleting/moving pages (see example_045.php). + +6.0.075 (2014-05-05) + - Bug #917 "Using realtive Units like ex or em for images distort output in HTML mode" was fixed. + +6.0.074 (2014-05-03) + - Part of Bug #917 "Using realtive Units like ex or em for images distort output in HTML mode" was fixed. + - Bug #915 "Problem with SVG Image using Radial Gradients" was fixed. + +6.0.073 (2014-04-29) + - Bug #913 "Possible bug with line-height" was fixed. + - Bug #914 "MultiCell and FitCell" was fixed. + - Bug #915 "Problem with SVG Image using Radial Gradients" was fixed. + +6.0.072 (2014-04-27) + - Deprecated curly braces substring syntax was replaced with square braces. + +6.0.071 (2014-04-25) + - Bug #911 "error with buffered png pics" was fixed. + +6.0.070 (2014-04-24) + - Bug #910 "An SVG image is being cut off (with clipping mask) when you use align options" was fixed. + +6.0.069 (2014-04-24) + - Datamatrix Base256 encoding was fixed. + +6.0.068 (2014-04-22) + - Some Datamatrix barcode bugs were fixed. + +6.0.067 (2014-04-21) + - startLayer() method signature was changed to include a new "lock" parameter. + +6.0.066 (2014-04-20) + - Bug #908 "Linebreak is not considered when getting length of the next string" was fixed. + +6.0.065 (2014-04-10) + - Bug #905 "RGB percentage color bug in convertHTMLColorToDec()" was fixed. + +6.0.064 (2014-04-07) + - Header and Footer fonts are now set by default. + - Bug #904 "PDF corrupted" was fixed. + +6.0.063 (2014-04-03) + - Method TCPDF_IMAGES::_parsepng() was fixed to support transparency in Indexed images. + +6.0.062 (2014-03-02) + - The method startLayer() now accepts the NULL value for the $print parameter to not set the print layer option. + +6.0.061 (2014-02-18) + - Bug #893 "Parsing error on streamed xref for secured pdf" was fixed. + +6.0.060 (2014-02-16) + - Bug #891 "Error on parsing hexa fields" was fixed. + - Bug #892 "Parsing pdf with trailing space at start" was fixed. + +6.0.059 (2014-02-03) + - SVG 'use' support was imporved. + +6.0.058 (2014-01-31) + - Bug #886 "Bugs with SVG using <defs> and <use>" was fixed. + +6.0.057 (2014-01-26) + - Bug #883 "Parsing error" was fixed. + +6.0.056 (2014-01-25) + - The automatic cache folder selection now works also with some restricted hosting environments. + - CSS text-transform property is now supported (requires the multibyte string library for php) - see examle n. 061 (Thanks to Walter Ferraz). + - Bug #884 "Parsing error prev tag looking for" was fixed. + +6.0.055 (2014-01-15) + - Bug #880 "Error detecting hX tags (h1,h2..)" was fixed + - Bug #879 "Thead on the second page inherits style of previous tr" was fixed + +6.0.054 (2014-01-13) + - Bug #877 "Parenteses causing corrupt text" was fixed. + +6.0.053 (2014-01-03) + - Bug #876 "Cell padding should not be multiplied with number of lines in getStringHeight" was fixed. + - Patch #68 "Empty img src attribute leads to access of uninitialized string offset" was applied. + +6.0.052 (2013-12-12) + - Bug #871 "Datamatrix coding" was fixed. + +6.0.051 (2013-12-02) + - cbbox array values in addTTFfont() were converted to integers. + +6.0.050 (2013-12-01) + - The method getNumLines() was extended to support hyphenation. + - The CSS property line-height now supports non percentage values. + +6.0.050 (2013-11-27) + - A bug related to PNG images was fixed. + +6.0.048 (2013-11-24) + - SVG vars are now reset in ImageSVG() method. + +6.0.047 (2013-11-19) + - SVG support was extended to support some nested defs. + +6.0.046 (2013-11-17) + - preg_replace_callback functions were replaced to improve memory performances. + +6.0.045 (2013-11-17) + - Bug #862 "Parsing error on flate filter" was fixed. + +6.0.044 (2013-11-10) + - Bug #857 "Undefined offset error" was fixed. + - The uniord method now uses a static cache to improve performances (thanks to Mathieu Masseboeuf for the sugegstion). + - Two bugs in the TCPDF_FONTS class were fixed. + +6.0.043 (2013-10-29) + - Bug #854 "CSS instruction display" was fixed. + +6.0.042 (2013-10-25) + - Bug #852 "CMYK Colors Bug" was fixed. + +6.0.041 (2013-10-21) + - Bug #851 "Problem with images in PDF. PHP timing out" was fixed. + +6.0.040 (2013-10-20) + - Bug #849 "SVG import bug" was fixed. + +6.0.039 (2013-10-13) + - Bug #843 "Wrong call in parser" was fixed. + - Bug #844 "Wrong object type named" was fixed. + - Bug #845 "Parsing error on obj ref prefixed by '000000'" was fixed. + +6.0.038 (2013-10-06) + - Bug #841 "Division by zero warning at writeHTML a <li> tag" was fixed. + +6.0.037 (2013-09-30) + - Method getAllSpotColors() was added to return all spot colors. + - Method colorRegistrationBar() was extended to automatically print all spot colors and support individual spot colors. + - The method registrationMarkCMYK() was added to print a registration mark for CMYK colors. + - A bug related to page groups was fixed. + - Gradient() method now supports CMYK equivalents of spot colors. + - Example n. 56 was updated. + +6.0.036 (2013-09-29) + - Methods for registration bars and crop marks were extended to support registration color (see example n. 56). + - New default spot colors were added to tcpdf_colors.php, including the 'All' and 'None' special registration colors. + +6.0.035 (2013-09-25) + - TCPDF_PARSER class was improved. + +6.0.034 (2013-09-24) + - Bug #839 "Error in xref parsing in mixed newline chars" was fixed. + +6.0.033 (2013-09-23) + - Bug fix related to PNG image transparency using GD library. + +6.0.032 (2013-09-23) + - Bug #838 "Fatal error when imagick cannot handle the image, even though GD is available and can" was fixed. + +6.0.031 (2013-09-18) + - Bug #836 "Optional EOL marker before endstream" was fixed. + - Some additional controls were added to avoid "division by zero" error with badly formatted input. + +6.0.030 (2013-09-17) + - Bug #835 "PDF417 and Cyrilic simbols" was fixed. + +6.0.029 (2013-09-15) + - Constants K_TCPDF_PARSER_THROW_EXCEPTION_ERROR and K_TCPDF_PARSER_IGNORE_DECODING_ERRORS where removed in favor of a new configuration array in the TCPDF_PARSER class. + - The TCPDF_PARSER class can now be configured using the new $cfg parameter. + +6.0.028 (2013-09-15) + - A debug print_r was removed form tcpdf_parser.php. + - TCPDF_FILTERS class now throws an exception in case of error. + - TCPDF_PARSER class now throws an exception in case of error unless you define the constant K_TCPDF_PARSER_THROW_EXCEPTION_ERROR to false. + - The constant K_TCPDF_PARSER_IGNORE_DECODING_ERRORS can be set to tru eto ignore decoding errors on TCPDF_PARSER. + +6.0.027 (2013-09-14) + - A bug in tcpdf_parser wen parsing hexadecimal strings was fixed. + - A bug in tcpdf_parser wen looking for statxref was fixed. + - A bug on RC4 encryption was fixed. + +6.0.026 (2013-09-14) + - A bug in tcpdf_parser wen decoding streams was fixed. + +6.0.025 (2013-09-04) + - A pregSplit() bug was fixed. + - Improved content loading from URLs. + - Improved font path loading. + +6.0.024 (2013-09-02) + - Bug #826 "addEmptySignatureAppearance issue" was fixed. + +6.0.023 (2013-08-05) + - GNU Freefont fonts were updated. + - Licensing and copyright information about fonts were improved. + - PNG image support was improved. + +6.0.022 (2013-08-02) + - fixing initialization problem for signature_appearance property. + +6.0.021 (2013-07-18) + - The bug caused by the preg_split function on some PHP 5.2.x versions was fixed. + +6.0.020 (2013-06-04) + - The method addTTFfont() was fixed (Bug item #813 Undefined offset). + +6.0.019 (2013-06-04) + - The magic constant __DIR__ was replaced with dirname(__FILE__) for php 5.2 compatibility. + - The exceptions raised by file_exists() function were suppressed. + +6.0.018 (2013-05-19) + - The barcode examples were changed to automatically search for the barcode class path (in case the examples directory is not installed under the TCPDF root). + +6.0.017 (2013-05-16) + - The command line tool tcpdf_addfont.php was improved. + - The php logic was removed from configuration files that now contains only constant defines. + - The tcpdf_autoconfig.php file was added to automatically set missing configuration values. + +6.0.016 (2013-05-15) + - The tcpdf_addfont.php tool was improved (thanks to Remi Collet). + - Constant K_PATH_IMAGES is now automatically set in configuration file. + +6.0.015 (2013-05-14) + - Some unused vars were removed from AddFont() method. + - Some directories were moved inside the examples directory. + - All examples were updated to reflect the new default structure. + - Source code were clean-up up to be more compatible with system packaging. + - Files encodings and permissions were reset. + - The command line tool tcpdf_addfont.php was added on the tools directory. + +6.0.014 (2013-04-13) + - The signature of addTTFfont() method includes a new parameter to link existing fonts instead of copying and compressing them. + +6.0.013 (2013-04-10) + - Add support for SVG dx and dy text/tspan attributes. + - replace require() with require_once(). + - fix some minor typos on documentation. + - fix a problem when deleting all pages. + +6.0.012 (2013-04-24) + - An error condition in addHtmlLink() method was fixed (bug #799). + +6.0.011 (2013-04-22) + - Minor documentation changes. + +6.0.010 (2013-04-03) + - The method Rect() was fixed to print borders correctly. + +6.0.009 (2013-04-02) + - Adding back some files that were not properly committed on the latest release. + +6.0.008 (2013-04-01) + - Duplicated encoding maps was removed from tcpdf_font_data.php. + - Fixing bug on AddTTFFont(). + +6.0.007 (2013-03-29) + - HTML/CSS font size conversion were improved. + +6.0.006 (2013-03-27) + - Bug related to SVG and EPS files on xobjects were fixed. + +6.0.005 (2013-03-26) + - Default font path was fixed. + +6.0.004 (2013-03-21) + - Return value of addTTFfont() method was fixed. + +6.0.003 (2013-03-20) + - A bug related to non-unicode mode was fixed. + +6.0.002 (2013-03-18) + - _getFIXED call on tcpdf_fonts.php was fixed. + +6.0.001 (2013-03-18) + - Fixed $uni_type call on tcpdf.php. + +6.0.000 (2013-03-17) + - IMPORTANT: PHP4 support has been removed starting from this version. + - Several TCPDF methods and vars were moved to new class files: tcpdf_static.php, tcpdf_colors.php, tcpdf_images.php, tcpdf_font_data.php, tcpdf_fonts.php. + - Files htmlcolors.php, spotcolors.php, unicode_data.php and ecodings_maps.php were removed. + - Barcode classes were renamed and new barcode examples were added. + - Class TCPDF_PARSER was improved. + +******************************************************************************** + +5.9.209 (2013-03-15) + - Image method was improved. + +5.9.208 (2013-03-15) + - objclone function was patched to support old imagick extensions. + - tcpdf_parser was improved to support Cross-Reference Streams and large streams. + +5.9.207 (2013-03-04) + - Datamatrix class was fixed (a debug echo was removed). + +5.9.206 (2013-02-22) + - Bug item #754 "PNG with alpha channel becomes gray scale" was fixed. + - Minor documentation fixes. + +5.9.205 (2013-02-06) + - The constant K_TCPDF_THROW_EXCEPTION_ERROR was added on configuration file to change the behavior of Error() method. + - PDF417 barcode bug was fixed. + +5.9.204 (2013-01-23) + - The method Bookmark() was extended to include named destinations, URLs, internal links or embedded files (see example n. 15). + - automatic path calculation on configuration file was fixed. + - Error() method was extended to throw new Exception if PHP > 5. + +5.9.203 (2013-01-22) + - Horizontal position of radiobuttons and checkboxes was adjusted. + +5.9.202 (2012-12-16) + - Vertical space problem after table was fixed. + +5.9.201 (2012-12-10) + - First 256 chars are now always included on font subset to overcome a problem reported on the forum. + +5.9.200 (2012-12-05) + - Bug item #768 "Rowspan with Pagebreak error" was fixed. + - Page regions now works also with limited MultiCell() cells. + +5.9.199 (2012-11-29) + - Internal setImageBuffer() method was improved. + +5.9.198 (2012-11-19) + - Datamatrix EDIFACT mode was fixed. + +5.9.197 (2012-11-06) + - Bug item #756 "TCPDF 5.9.196 shows line on top of all PDFs" was fixed. + +5.9.196 (2012-11-02) + - Several methods were improved to avoid output when the context is out of page. + - Bug item #755 "remove cached files before unsetting" was fixed. + +5.9.195 (2012-10-24) + - Method _putfonts() was improved. + +5.9.194 (2012-10-23) + - Text alignment on TextField() method was fixed. + +5.9.193 (2012-09-25) + - Support for named destinations on HTML links was added (i.e.: <a href="#destinationname">link to named destination</a>). + +5.9.192 (2012-09-24) + - A problem on the releasing process was fixed. + +5.9.191 (2012-09-24) + - SVG image naow support svg and eps images. + +5.9.190 (2012-09-23) + - "page" word translation is now set to empty if not defined. + - Tooltip feature was added on the radiobutton annotation. + +5.9.189 (2012-09-18) + - Bug item #3568969 "ini_get safe_mode error" was fixed. + +5.9.188 (2012-09-15) + - A datamatrix barcode bug was fixed. + +5.9.187 (2012-09-14) + - Subset feature was extended to include the first 256 characters. + +5.9.186 (2012-09-13) + - barcodes.php file was resynced. + - Methods SetAbsX, SetAbsY, SetAbsXY where added to set the absolute pointer coordinates. + - Method getCharBBox were added to get single character bounding box. + - Signature of addTTFfont method was changed ($addcbbox parameter was added). + +5.9.185 (2012-09-12) + - Method _putfontwidths() was fixed. + +5.9.184 (2012-09-11) + - A problem with EAN barcodes was fixed. + +5.9.183 (2012-09-07) + - A problem with font names normalization was fixed. + +5.9.182 (2012-09-05) + - Bug item #3564982 "Infinite loop in Write() method" was fixed. + +5.9.181 (2012-08-31) + - composer.json file was added. + - Bug item #3563369 "Cached images are not unlinked some time" was fixed. + +5.9.180 (2012-08-22) + - Bug item #3560493 "Problems with nested cells in HTML" was fixed. + +5.9.179 (2012-08-04) + - SVG 'use' tag was fixed for 'circle' and 'ellipse' shift problem. + - Alpha status is now correctly stored and restored by getGraphicVars() and SetGraphicVars() methods. + +5.9.178 (2012-08-02) + - SVG 'use' tag was fixed for 'circle' and 'ellipse'. + +5.9.177 (2012-08-02) + - An additional control on annotations was fixed. + +5.9.176 (2012-07-25) + - A bug related to stroke width was fixed. + - A problem related to font spacing in HTML was fixed. + +5.9.175 (2012-07-25) + - The problem of missing letter on hyphen break was fixed. + +5.9.174 (2012-07-25) + - The problem of wrong filename when downloading PDF from an Android device was fixed. + - The method setHeaderData() was extended to set text and line color for header (see example n. 1). + - The method setFooterData() was added to set text and line color for footer (see example n. 1). + - The methods setTextShadow() and getTextShadow() were added to set text shadows (see example n. 1). + - The GetCharWidth() method was fixed for negative character spacing. + - A 'none' border mode is now correctly recognized. + - Break on hyphen problem was fixed. + +5.9.173 (2012-07-23) + - Some additional control wher added on barcode methods. + - The option CURLOPT_FOLLOWLOCATION on Image method is now disabled if PHP safe_mode is on or open_basedir is set. + - Method Bookmark() was extended to include X parameter. + - Method setDestination() was extended to include X parameter. + - A problem with Thai language was fixed. + +5.9.172 (2012-07-02) + - A PNG color profile issue was fixed. + +5.9.171 (2012-07-01) + - Some SVG rendering problems were fixed. + +5.9.170 (2012-06-27) + - Bug #3538227 "Numerous errors inserting shared images" was fixed. + +5.9.169 (2012-06-25) + - Some SVG rendering problems were fixed. + +5.9.168 (2012-06-22) + - Thai language rendering was fixed. + +5.9.167 (2012-06-22) + - Thai language rendering was fixed and improved. + - Method isCharDefined() was improved. + - Protected method replaceChar() was added. + - Font "kerning" word was corrected to "tracking". + +5.9.166 (2012-06-21) + - Array to string conversion on file_id creation was fixed. + - Thai language rendering was fixed (thanks to Atsawin Chaowanakritsanakul). + +5.9.165 (2012-06-07) + - Some HTML form related bugs were fixed. + +5.9.164 (2012-06-06) + - A bug introduced on the latest release was fixed. + +5.9.163 (2012-06-05) + - Method getGDgamma() was changed. + - Rendering performances of PNG images with alpha channel were improved. + +5.9.162 (2012-05-11) + - A bug related to long text on TD cells was fixed. + +5.9.161 (2012-05-09) + - A bug on XREF table was fixed (Bug ID: 3525051). + - Deprecated Imagick:clone was replaced. + - Method objclone() was fixed for PHP4. + +5.9.160 (2012-05-03) + - A bug on tcpdf_parser.php was fixed. + +5.9.159 (2012-04-30) + - Barcode classes were updated to fix PNG export Bug (ID: 3522291). + +5.9.158 (2012-04-22) + - Some SVG-related bugs were fixed. + +5.9.157 (2012-04-16) + - Some SVG-related bugs were fixed. + +5.9.156 (2012-04-10) + - Bug item #3515885 "TOC and booklet: left and right page exchanged". + - SetAutoPageBreak(false) now works also in multicolumn mode. + +5.9.155 (2012-04-02) + - Bug item #3512596 "font import problems" was fixed. + - Method addTTFfont() was modified to extract only specified Platform ID and Encoding ID (check the source code documentation). + - All fonts were updated. + - Bug item #3513867 "booklet and setHeaderTemplateAutoreset: header shifted left" was fixed. + - Bug item #3513749 "TCPDF Superscript/Subscript" was fixed. + +5.9.154 (2012-03-29) + - A debug echo was removed. + +5.9.153 (2012-03-28) + - A bug on font conversion was fixed. + - All fonts were updated. + - Method isCharDefined() was added to find if a character is defined on the selected font. + - Method replaceMissingChars() was added to automatically replace missing chars on selected font. + - SetFont() method was fixed. + +5.9.152 (2012-03-23) + - The following overprint methods were added: setOverprint(), getOverprint(). + - Signature of setAlpha() method was changed and method getAlpha() was added. + - stroke-opacity support was added on SVG. + - The following date methods were added: setDocCreationTimestamp(), setDocModificationTimestamp(), getDocCreationTimestamp(), getDocModificationTimestamp(), getFormattedDate(), getTimestamp(). + - Signature of _datestring() method was changed. + - Method getFontBBox() was added. + - Method setPageBoxTypes() was aded. + +5.9.151 (2012-03-22) + - Bug item #3509889 "Transform() distorts PDF" was fixed. + - Precision of real number were extended. + - ComboBox and ListBox methods were fixed. + - Bulgarian language file was added. + - addTOC() method was improved to include bookmark color and font style. + +5.9.150 (2012-03-16) + - A bug related to form fields in PDF/A mode was fixed. + +5.9.149 (2012-02-21) + - Bug item #3489933 "SVG Parser treats tspan like text" was fixed. + +5.9.148 (2012-02-17) + - Bug item #3488600 "Multiple radiobutton sets get first set value" was fixed. + +5.9.147 (2012-02-14) + - A problem with SVG gradients has been fixed. + +5.9.146 (2012-02-12) + - Bug item #3486880 "$filehash undefine error" was fixed. + - The default font is now the one specified at PDF_FONT_NAME_MAIN constant. + +5.9.145 (2012-01-28) + - Japanese language file was added. + - TCPDF license and README.TXT files were updated. + +5.9.144 (2012-01-12) + - HTML output on barcode classes was improved. + +5.9.143 (2012-01-08) + - Bug item #3471057 "setCreator() has no effect" was fixed. + +5.9.142 (2011-12-23) + - Source code documentation was updated. + +5.9.141 (2011-12-14) + - Some minor bugs were fixed. + +5.9.140 (2011-12-13) + - SVG now supports embedded images encoded as base64. + +5.9.139 (2011-12-11) + - Spot color methods were fixed. + +5.9.138 (2011-12-10) + - cropMark() method was improved (check source code documentation). + - Example n. 56 was updated. + - Bug item #3452390 "Check Box still not ticked when set to true" was fixed. + +5.9.137 (2011-12-01) + - Bug item #3447005 "Background color and border of Form Elements is printed" was fixed. + - Color support for Form elements was improved. + +5.9.136 (2011-11-27) + - Bug item #3443387 "SetMargins with keep option does not work for top margin" was fixed. + +5.9.135 (2011-11-04) + - Bug item #3433406 "Double keywords in description" was fixed. + +5.9.134 (2011-10-29) + - The default value for $defcol parameter on convertHTMLColorToDec() method was fixed. + - Deafult HTTP headers were changed to avoid browser caching. + - Some deprecated syntax were replaced. + +5.9.133 (2011-10-26) + - Bug item #3428446 "copyPage method not working when diskcache enabled" was fixed. + +5.9.132 (2011-10-20) + - Bug item #3426167 "bug in function convertHTMLColorToDec()" was fixed. + +5.9.131 (2011-10-13) + - An error message was added to ImagePngAlpha() method. + +5.9.130 (2011-10-12) + - Now you can set image data strings on HTML img tag by encoding the image binary data in this way: $imgsrc = '@'.base64_encode($imgdata); + +5.9.129 (2011-10-07) + - Core fonts metrics was fixed (replace all helvetica and times php files on fonts folder). + - Form fields support was improved and some problems were fixed (check the example n. 14). + - Bug item #3420249 "Issue with booklet and MultiCell" was fixed. + +5.9.128 (2011-10-06) + - Method addTTFfont() was improved (check the source code documentation). + - Method setExtraXMP() to set custom XMP data was added. + +5.9.127 (2011-10-04) + - Readonly mode option was activated for radiobuttons. + +5.9.126 (2011-10-03) + - Bug item #3417989 "Graphics State operator in form XObject fails to render" was fixed. + - Xobjects problems with transparency, gradients and spot colors were fixed. + +5.9.125 (2011-10-03) + - Support for 8-digit CMYK hexadecimal color representation was added (to be used with XHTML and SVG). + - Spot colors support was improved (check example n. 37). + - Color methods were improved. + +5.9.124 (2011-10-02) + - Core fonts were updated. + +5.9.123 (2011-10-02) + - The method addTTFfont() wad added to automatically convert TTF fonts (check the new fonts guide at http://www.tcpdf.org). + - Old font utils were removed. + - All fonts were updated and new arabic fonts were added (almohanad were removed and replaced by aefurat and aealarabiya). + - The file unicode_data.php was updated. + - The file encodings_maps.php was added. + - PDF/A files are now compressed to save space. + - XHTML input form fields now support text-alignment attribute. + +5.9.122 (2011-09-29) + - PDF/A-1b compliance was improved to pass some online testing. + +5.9.121 (2011-09-28) + - This version includes support for PDF/A-1b format (the class constructor signature was changed - see example n. 65). + - Method setSRGBmode() was added to force sRGB_IEC61966-2.1 black scaled ICC color profile for the whole document (file sRGB.icc was added). + - 14 new fonts were added to allow embedding core fonts (for PDF/A compliance). + - Font utils were fixed. + +5.9.120 (2011-09-22) + - This version includes a fix for _getTrueTypeFontSubset() method. + +5.9.119 (2011-09-19) + - This version includes a fix for extra page numbering on TOC. + +5.9.118 (2011-09-17) + - This version includes some changes that allows you to add a bookmark for a page that do not exist. + +5.9.117 (2011-09-15) + - TCPDFBarcode and TCPDF2DBarcode classes were extended to include a method for exporting barcodes as PNG images. + +5.9.116 (2011-09-14) + - Datamatrix class was improved and documentation was fixed. + +5.9.115 (2011-09-13) + - Datamatrix ECC200 barcode support was added (a new datamatrix.php file was added) - check example n. 50. + - getBarcodeHTML() method was added on TCPDFBarcode and TCPDF2DBarcode classes to return an HTML representation of the barcode. + - cURL options on Image() method were improved. + - A bug on write2DBarcode() was fixed. + +5.9.114 (2011-09-04) + - A bug related to column position was fixed. + +5.9.113 (2011-08-24) + - This release include two new experimental files for parsing an existing PDF document (the integration with TCPDF is under development). + +5.9.112 (2011-08-18) + - A newline character was added after the 'trailer' keyword for compatibility with some parsers. + - Support for layers was improved. + +5.9.111 (2011-08-17) + - Barcode CODE 39 default gap was restored at 1. + +5.9.110 (2011-08-17) + - Barcode CODE 39 was fixed. + +5.9.109 (2011-08-12) + - Method getNumLines() was fixed. + - A bug related to page break in multi-column mode was fixed. + +5.9.108 (2011-08-09) + - A bug on PHP4 version was fixed. + +5.9.107 (2011-08-08) + - This version includes a minor bugfix. + +5.9.106 (2011-08-04) + - This version includes transparency groups: check the new parameter on startTemplate() method and example 62. + +5.9.105 (2011-08-04) + - Bug item #3386153 "Check Box not ticked when set to true" was fixed. + +5.9.104 (2011-08-01) + - Bug item #3383698 "imagemagick, resize and dpi" was fixed. + +5.9.103 (2011-07-16) + - Alignment of XHTML lines was improved. + - Spell of the "length" word was fixed. + +5.9.102 (2011-07-13) + - Methods startLayer() and endLayer() were added to support arbitrary PDF layers. + - Some improvements/fixes for images were added (thanks to Brendan Abbott). + +5.9.101 (2011-07-07) + - Support for JPEG and PNG ICC Color Profiles was added. + - Method addEmptySignatureAppearance() was added to add empty signature fields (see example n. 52). + - Bug item #3354332 "Strange line spacing with reduced font-size in writeHTML" was fixed. + +5.9.100 (2011-06-29) + - An SVG bug has been fixed. + +5.9.099 (2011-06-27) + - Bug item #3335045 "Font freesans seems somehow corrupted in footer" was fixed. + +5.9.098 (2011-06-23) + - The Named Destination feature was fixed. + +5.9.097 (2011-06-23) + - The method setHtmlVSpace() now can be used also for tags: div, li, br, dt and dd. + - The Named Destination feature was added (check the example n. 15) - thanks to Christian Deligant. + +5.9.096 (2011-06-19) + - Bug item #3322234 "Surrogate pairs codes in arrUTF8ToUTF16BE" was fixed. + +5.9.095 (2011-06-18) + - Numbers alignment for Table-Of-Content methods was improved and fixed. + - Font subsetting was fixed to include all parts of composite fonts. + +5.9.094 (2011-06-17) + - Bug item #3317898 "Page Group numbering broken in 5.9.093" was fixed. + +5.9.093 (2011-06-16) + - Method setStartingPageNumber() was added to set starting page number (for automatic page numbering). + +5.9.092 (2011-06-15) + - Method _putpages() was improved. + - Bug item #3316678 "Memory overflow when use Rotate and SetAutoPageBreak" was fixed. + - Right alignment of page numbers was improved. + +5.9.090 (2011-06-14) + - Methods AliasNbPages() and AliasNumPage() were re-added as deprecated for backward compatibility. + +5.9.089 (2011-06-13) + - Example n. 8 was updated. + - Method sendOutputData() was changed to remove default compression (it was incompatible with some server settings). + - Bugs related to page group numbers were fixed. + - Method copyPage() was fixed. + - Method Image() was improved to include support for alternative and external images. + +5.9.088 (2011-06-01) + - Method getAutoPageBreak() was added (see example n. 51). + - Example n. 51 (full page background) was updated. + +5.9.087 (2011-06-01) + - Method sendOutputData() was improved to include deflate encoding. + - Barcode classes on PHP 4 version were fixed. + +5.9.086 (2011-05-31) + - Font files were updated (the ones on the previous release were broken). + - The script fonts/utils/makeallttffonts.php was updated and fixed. + - Output() method was improved to use compression when available. + +5.9.085 (2011-05-31) + - TCPDFBarcode class (barcodes.php) now includes getBarcodeSVG() and getBarcodeSVGcode() methods to get SVG image representation of the barcode. + - TCPDF2DBarcode class (2dbarcodes.php) now includes getBarcodeSVG() and getBarcodeSVGcode() methods to get SVG image representation of the barcode. + +5.9.084 (2011-05-29) + - Font files were updated. + - The file fonts/utils/makeallttffonts.php was updated. + - Bug item# 3308774 "Problems with font subsetting" was fixed. + +5.9.083 (2011-05-24) + - Bug item #3308387 "line height & SetCellHeightRatio" was fixed. + +5.9.082 (2011-05-22) + - Bug item #3305592 "Setting fill color <> text color breaks text clipping" was fixed. + +5.9.081 (2011-05-18) + - Method resetHeaderTemplate() was added to reset the xobject template used by Header() method. + - Method setHeaderTemplateAutoreset() was added to automatically reset the xobject template used by Header() method at each page. + +5.9.080 (2011-05-17) + - A problem related to file path calculation for images was fixed. + - A problem related to unsuppressed getimagesize() error was fixed. + +5.9.079 (2011-05-16) + - Footer() method was changed to use C128 barcode as default (instead of the previous C128B). + +5.9.078 (2011-05-12) + - Bug item #3300878 "wrong rendering for html bullet list in some case" was fixed. + - Bug item #3301017 "Emphasized vs. font-weight" was fixed. + - Barcode Code 128 was improved to include AUTO mode (automatically switch between A, B and C modes). + - Examples n. 27 and 49 were updated. + +5.9.077 (2011-05-07) + - Bug item #3298591 "error code93" was fixed. + - SetLineStyle() function was improved. + +5.9.076 (2011-05-06) + - Bug item #3298264 "codebar 93 error" was fixed. + +5.9.075 (2011-05-02) + - Table header alignment when using WriteHTMLCell() or MultiCell() was fixed. + +5.9.074 (2011-04-28) + - Bug item #3294306 "CSS classes not work in <thead> table section" was fixed. + +5.9.073 (2011-04-27) + - A bug related to character entities on HTML cells was fixed. + +5.9.072 (2011-04-26) + - Method resetColumns() was added to remove multiple columns and reset page margins (example n. 10 was updated). + +5.9.071 (2011-04-19) + - Bug #3288574 "<br/> trouble" was fixed. + +5.9.069 (2011-04-19) + - Bug #3288763 "HTML-Table: non-breaking table rows: Bug" was fixed. + +5.9.068 (2011-04-15) + - Bookmark, addTOC and addHTMLTOC methods were improved to include font style and color (Examples 15, 49 and 59 were updated). + - Default $_SERVER['DOCUMENT_ROOT'] value on tcpdf_config.php file was changed. + +5.9.067 (2011-04-10) + - Performances were drastically improved (PDF documents are now created more quickly). + +5.9.066 (2011-04-09) + - A bug related to digital signature + encryption was fixed. + - A bug related to encryption + xobject templates was fixed. + +5.9.065 (2011-04-08) + - Bug item #3280512 "Text encoding iso-8859-2 crashes" was fixed. + +5.9.064 (2011-04-05) + - A bug related to character entities on HTML cells was fixed. + +5.9.063 (2011-04-01) + - Bug item #3267235 "WriteHTML() and image that doesn't fit on the page" was fixed. + +5.9.062 (2011-03-23) + - Bug item #3232650 "Using Write if there are pageRegions active creates error" was fixed. + - Bug item #3221891 "text input borders" was fixed. + - Bug item #3228958 "Adobe Reader 9.4.2 crash" was fixed. + +5.9.061 (2011-03-15) + - Bug item #3213488 "wrong function call in function Write" was fixed. + - Bug item #3203007 "list element with black background" was fixed. + +5.9.060 (2011-03-08) + - addTOC() method was fixed for text alignment problems. + +5.9.059 (2011-02-27) + - Default Header() method was improved to reduce document size. + +5.9.058 (2011-02-25) + - Image() method was improved to cache images with transparency layers (thanks to Korneliusz Jarzębski for reporting this problem). + +5.9.057 (2011-02-24) + - A problem with image caching system was fixed (thanks to Korneliusz Jarzębski for reporting this problem). + +5.9.056 (2011-02-22) + - A bug on fixHTMLCode() method was fixed. + - Automatic line break for HTML was fixed. + +5.9.055 (2011-02-17) + - Another bug related to HTML table page break was fixed. + +5.9.054 (2011-02-16) + - A bug related to HTML table page break was fixed. + +5.9.053 (2011-02-16) + - Support for HTML attribute display="none" was added. + +5.9.052 (2011-02-15) + - A bug related to HTML automatic newlines was fixed. + +5.9.051 (2011-02-12) + - "Commas at beginning of new lines" problem was fixed. + +5.9.050 (2011-02-11) + - Bug #3177606 "SVG Bar chart error" was fixed. + +5.9.049 (2011-02-03) + - Bug #3170777 "TCPDF creates a new page after a single line in writeHTML" was fixed. + +5.9.048 (2011-02-02) + - No changes. Just released to override previous release that was not uploaded correctly. + +5.9.047 (2011-01-28) + - Bug #3167115 "PDF error in <table> (example 48)" was fixed (was introduced in 5.8.046). + +5.9.046 (2011-01-18) + - PDF view/print layers are now automatically turned off if not used (see setVisibility() method). + +5.9.045 (2011-01-17) + - HTML list support were improved. + +5.9.044 (2011-01-15) + - Bug #3158422 "writeHTMLCell Loop" was fixed. + - Some HTML image alignment problems were fixed. + +5.9.043 (2011-01-14) + - Bug #3158178 "PHP Notice" was fixed. + - Bug #3158193 "Endless loop in writeHTML" was fixed. + - Bug #3157764 "SVG Pie chart incorrectly rendered2". + +5.9.042 (2011-01-14) + - Some problems of the PHP4 version were fixed. + +5.9.041 (2011-01-13) + - A problem with SVG elliptical arc path was fixed (ref. bug #3156574). + - A problem related to font weight on HTML table headers was fixed. + +5.9.040 (2011-01-12) + - A bug related to empty pages after table was fixed. + +5.9.039 (2011-01-12) + - Bug item #3155759 "openssl_random_pseudo_bytes() slow under Windows" was fixed. + +5.9.038 (2011-01-11) + - Minor bugs were fixed. + +5.9.037 (2011-01-09) + - An alignment problem for HTML texts was fixed. + +5.9.036 (2011-01-07) + - A bug related to HTML tables on header was fixed. + +5.9.035 (2011-01-03) + - A problem related to HTML table border alignment was fixed. + - Bug #2996366 "FastCGI and Header Problems" was fixed. + +5.9.034 (2010-12-19) + - DejaVu and GNU Free fonts were updated. + +5.9.033 (2010-12-18) + - Source code documetnation was improved. + +5.9.032 (2010-12-18) + - Default font stretching and spacing values are now inherited by HTML methods. + +5.9.031 (2010-12-16) + - Source code documentation errors were fixed. + +5.9.030 (2010-12-16) + - Several source code documentation errors were fixed. + - Source code style was changed for Doxygen. + - Source code documentation was moved online to http://www.tcpdf.org + +5.9.029 (2010-12-04) + - The $fitbox parameter on Image() method was extended to specify image alignment inside the box (check the example n. 9). + +5.9.028 (2010-12-03) + - Font utils makefont.php and makeallttffonts.php were updated. + +5.9.027 (2010-12-01) + - Spot Colors are now better integrated with HTML mode. + - Method SetDocInfoUnicode() was added to turn on/off Unicode mode for document information dictionary (meta tags) - check the example n. 19. + +5.9.026 (2010-12-01) + - A problem with mixed text directions on HTML was fixed. + +5.9.025 (2010-12-01) + - The AddSpotColor() now automatically fills the spotcolor array (defined on spotcolors.php file). + +5.9.024 (2010-11-30) + - Bug item #3123612 "SVG not use gradientTransform in percentage mode" was fixed. + +5.9.023 (2010-11-25) + - A potential bug on SVG transcoder was fixed. + +5.9.022 (2010-11-21) + - Method ImageEPS includes support for EPS/AI Spot colors. + - Method ImageEPS includes a new parameter $fixoutvals to remove values outside the bounding box. + +5.9.021 (2010-11-20) + - Support for custom bullet points images was added (check the example n.6) + - Examples n. 6 and 61 were update (check the comments inside). + +5.9.020 (2010-11-19) + - A problem related to additional page when using multicolumn mode was fixed. + +5.9.019 (2010-11-19) + - An SVG bug was fixed. + - ImageSVG() and ImageEPS() methods now accepts image data streams (put the string on the $file parameter preceded by '@' character). + - Option 'E' was added to the $dest parameter of Output() method to return the document as base64 mime multi-part email attachment (RFC 2045). + +5.9.018 (2010-11-19) + - An SVG bug was fixed. + +5.9.017 (2010-11-16) + - Tagline color was set to transparent. + - The method fixHTMLCode() was added to automatically clean up HTML code (requires HTML Tidy). + +5.9.016 (2010-11-16) + - Bug item #3109705 "list item page break hanging bullet" was fixed. + +5.9.015 (2010-11-16) + - Bug item affecting QRCode was fixed. + - Some bugs affecting HTML lists were fixed. + - ImageSVG() and fitBlock() methods were improved to handle some SVG problems. + - Some problems with PHP4 compatibility were fixed. + +5.9.014 (2010-11-15) + - Bug item #3109464 "QRCode error" was fixed. + +5.9.013 (2010-11-15) + - Bug item #3109257 "Problem with interlaced GIFs and PNGs" was fixed. + - Image function now accepts image data streams (check example n. 9). + +5.9.012 (2010-11-12) + - Method getTCPDFVersion() was added. + - PDF_PRODUCER constant was removed. + - Method convertHTMLColorToDec() was improved. + - HTML colors now support spot color names defined on the new spotcolors.php file. + - The default method Header() was improved to support SVG and EPS/AI images. + - A bug on SVG importer was fixed. + +5.9.011 (2010-11-02) + - Bug item #3101486 "Bug Fix for image loading" was fixed. + +5.9.010 (2010-10-27) + - Support for CSS properties 'border-spacing' and 'padding' for tables were added. + - Several language files were added. + +5.9.009 (2010-10-21) + - HTML text alignment was improved to include the case of RTL text on LTR direction and LTR text on RTL direction. + +5.9.008 (2010-10-21) + - Bug item #3091502 "Bookmark oddity" was fixed. + - HTML internal links now accepts page number and Y position. + - The method write1DBarcode() was improved to accept separate horizontal and vertical padding (see example n. 27). + +5.9.007 (2010-10-20) + - Method adjustCellPadding() was fixed to handle bad input. + +5.9.006 (2010-10-19) + - Support for AES 256 bit encryption was added (see example n. 16). + - Method getNumLines() was fixed for the empty string case. + +5.9.005 (2010-10-18) + - Method addPageRegion() was changed to accept regions starting exactly from the top of the page. + +5.9.004 (2010-10-18) + - A bug related to annotations was fixed. + - The file unicode_data.php was canged to encapsulate all data in a class. + - The file htmlcolors.php was changed to remove the global variable. + +5.9.003 (2010-10-15) + - Support for no-write page regions was added. Check the example n. 64 and new methods setPageRegions(), addPageRegion(), getPageRegions(), removePageRegion(). + - A bug on Right-To-Left alignment was fixed. + +5.9.002 (2010-10-08) + - Cell method was improved to preserve the font stretching and spacing values when using the $stretch parameter (see example n. 4). + +5.9.001 (2010-10-07) + - The problem of blank page for nobr table higher than a single page was fixed. + +5.9.000 (2010-10-06) + - Support for text stretching and spacing (tracking) was added, see example n. 63 and methods setFontStretching(), getFontStretching(), setFontSpacing(), getFontSpacing(). + - Support for CSS properties 'font-stretch' and 'letter-spacing' was added (see example n. 63). + - The cMargin state was replaced by cell_padding array that can be set/get using setCellPadding() and getCellPadding() methods. + - Methods getCellPaddings() and setCellPaddings() were added to fine tune cell paddings (see example n. 5). + - Methods getCellMargins() and setCellMargins() were added to fine tune cell margins (see example n. 5). + - Method write1DBarcode() was improved to permit custom labels (see example n. 27). + - Method ImagePngAlpha() now includes support for ImageMagick to improve performances. + - XObject Template support was extended to support Multicell(), writeHTML() and writeHTMLCell() methods. + - The signature of getNumLines() and getStringHeight() methods is changed. + - Example n. 57 was updated. + +// ------------------------------------------------------------------- + +5.8.034 (2010-09-27) + - A bug related to SetFont on XObject templates was fixed. + +5.8.033 (2010-09-25) + - A problem with Footer() and multiple columns was fixed. + +5.8.032 (2010-09-22) + - Bug #3073165 "Issues with changes to addHTMLVertSpace()" was fixed. + +5.8.031 (2010-09-20) + - Bug #3071961 "Spaces in HTML" was fixed. + +5.8.030 (2010-09-17) + - SVG support was improved and some bugs were fixed. + +5.8.029 (2010-09-16) + - A problem with HTML borders was fixed. + +5.8.028 (2010-09-13) + - Bug #3065224 "mcrypt_create_iv error on TCPDF 5.8.027 on PHP 5.3.2" was fixed. + +5.8.027 (2010-09-13) + - Bug #3065118 "mcrypt_decrypt error on TCPDF 5.8.026 on PHP 5.3.2" was fixed. + +5.8.026 (2010-09-13) + - A bug on addHTMLTOC() method was fixed. Note: be sure that the #TOC_PAGE_NUMBER# template has enough width to be printed correctly. + +5.8.025 (2010-09-09) + - Bug #3062692 "Textarea inside a table" was fixed. + +5.8.024 (2010-09-08) + - Bug #3062005 "Undefined variable: ann_obj_id" was fixed. + +5.8.023 (2010-08-31) + - Forms bug added on version 5.8.019 was fixed. + +5.8.022 (2010-08-31) + - Bug #3056632 "SVG rendered vertically flipped" was fixed. + +5.8.021 (2010-08-30) + - A new CID-0 'chinese' font was added for traditional Chinese. + - Bug #3054287 'Inner tags are ignored due to "align" attribute' was fixed. + +5.8.020 (2010-08-26) + - CSS "catch-all" class selector is now supported. + +5.8.019 (2010-08-26) + - XObject Templates now includes support for links and annotations. + - A problem related to link alignment on cell was fixed. + - A problem related to SVG styles was fixed. + +5.8.018 (2010-08-25) + - Method getNumberOfColumns() was added. + - A problem related to table header was fixed. + - Method getSVGTransformMatrix() was fixed to apply SVG transformations in the correct order. + - SVG support was improved and several bugs were fixed. + +5.8.017 (2010-08-25) + - This version includes support for XObject Templates (see the new example n. 62). + - Methods starttemplate(), endTemplate() and printTemplate() were added (see the new example n. 62). + +5.8.016 (2010-08-24) + - Alignment problem on write2DBarcode was fixed. + +5.8.015 (2010-08-24) + - A problem arose with the latest bugfix was fixed. + +5.8.014 (2010-08-23) + - Method _getxobjectdict() was added for better compatibility with external extensions. + - A bug related to radiobuttons was fixed. + - Bug #3051509 "new line after punctuation marks" was fixed (partially). + +5.8.013 (2010-08-23) + - SVG support for 'direction' property was added. + - A problem on default width calculation for linear barcodes was fixed. + - New option was added to write1DBarcode() method to improve alignments (see example n. 27). + - Bug #3050896 "Nested HTML tables: styles are not applied" was fixed. + - Method _putresourcedict() was improved to include external XObject templates. + +5.8.012 (2010-08-22) + - Support for SVG 'text-anchor' property was added. + +5.8.011 (2010-08-21) + - Method write1DBarcode() was improved to be backward compatible (check the new example n. 27). + - Support for CSS width and height properties on images were added. + +5.8.010 (2010-08-20) + - Documentation of unhtmlentities() was fixed. + - The 'fitwidth' option was added and border color problem was fixed on write1DBarcode() method (check the example n. 27). + +5.8.009 (2010-08-20) + - Internal object numbering was improved. + - Some errors in object encryption were fixed. + +5.8.008 (2010-08-19) + - Method write1DBarcode() was changed, check the example n. 27. + - Method Footer() was changed to account for barcode changes. + - Automatic calculation of K_PATH_URL constant was fixed on configuration file. + - Method setEqualColumns() was fixed for $width=0 case. + - Method AddTOC() was fixed for multipage and multicolumn modes. + - Better support for SVG "font-family" property. + - A problem on default Page Zoom mode was fixed. + - Several Annotation bugs were fixed. + +5.8.007 (2010-08-18) + - A bug affecting HTML tables was fixed. + - Bug #3047500 "SVG not rendering paths properly" was fixed. + +5.8.006 (2010-08-17) + - A bug affecting HTML table nesting was fixed. + +5.8.005 (2010-08-17) + - A bug affecting the HTML 'select' tag in certain conditions was fixed. + +5.8.004 (2010-08-17) + - Better support for HTML "font-family" property. + - A bug related to HTML multicolumn was fixed. + +5.8.003 (2010-08-16) + - Better support for HTML "font-family" property. + +5.8.002 (2010-08-14) + - HTML alignments were improved + - IMPORTANT: Default regular expression to find spaces has been changed to exclude the non-breaking-space (160 DEC- A0 HEX). If you are using setSpacesRE() method, please read the new documentation. + - Example n. 1 was updated. + +5.8.001 (2010-08-12) + - Bug #3043650 "subsetchars incorrectly cached" was fixed. + +5.8.000 (2010-08-11) + - A control to avoid bookmarking page 0 was added. + - addTOC() method now includes support for multicolumn mode. + - Support for tables in multicolumn mode was improved. + - Example n.10 was updated. + - All trimming functions were replaced with stringLeftTrim(), stringRightTrim() and stringTrim(). + - HTML alignments were improved. + +------------------------------------------------------------ + +5.7.003 (2010-08-08) + - Bug #3041263 "php source ending is bad" was fixed (all PHP files were updated, including fonts). + +5.7.002 (2010-08-06) + - Methods copyPage(), movePage() and deletePage() were changed to account for internal markings. + +5.7.001 (2010-08-05) + - Bug #3040105 "Broken PDF when using TOC (example 45)" was fixed. + +5.7.000 (2010-08-03) + - CSS borders are now supported for HTML tables and other block tags (see example n. 61); + - Cell borders were improved (see example n. 57); + - Minor bugs were fixed. + +------------------------------------------------------------ + +5.6.000 (2010-07-31) + - A bug with object IDs was fixes. + - Performances were improved. + +------------------------------------------------------------ + +5.5.015 (2010-07-29) + - Automatic fix for unclosed self-closing tag. + - Support for deprecated 's' and 'strike' tags was added. + - Empty list items problem was fixed. + +5.5.014 (2010-07-15) + - Support for external images was improved. + +5.5.013 (2010-07-14) + - Bug #3029338 "FI and FO output destination filename bug" was fixed (previous fix was wrong). + +5.5.012 (2010-07-14) + - Bug #3029310 "Font baseline inconsistencies with line-height and font-size" was fixed. + - Bug #3029338 "FI and FO output destination filename bug" was fixed. + +5.5.011 (2010-07-09) + - Support for multiple CSS classes was added. + - The method getColumn() was added to return the current column number. + - Some regular Expressions were fixed to be more compatible with UTF-8. + +5.5.010 (2010-07-06) + - Bug item #3025772 "Borders in all image functions are still flawed" was fixed. + +5.5.009 (2010-07-05) + - A problem related to last page footer was fixed. + - Image alignments and fit-on-page features were improved. + +5.5.008 (2010-07-02) + - A problem on table header alignment in booklet mode was fixed. + - Default graphic vars are now applied for setHeader(); + +5.5.007 (2010-07-02) + - Attribute "readonly" was added to input and textarea form fields. + - Vertical alignment feature was added on MultiCell() method only for simple text mode (see example n. 5). + - Text-Fit feature was added on MultiCell() method only for simple text mode (see example n. 5). + +5.5.006 (2010-06-29) + - getStringHeight() and getNumLines() methods were fixed. + +5.5.005 (2010-06-28) + - Bug #3022170 "getFontDescent() does not return correct descent value" was fixed. + - Some problems with multicolumn mode were fixed. + +5.5.004 (2010-06-27) + - Bug #3021803 "SVG Border" was fixed. + +5.5.003 (2010-06-26) + - On Write() method, blank lines at the beginning of a page or column are now automatically removed. + +5.5.002 (2010-06-24) + - ToUnicode Identity-H name was replaced with a full CMap (to avoid preflight syntax error). + - Bug #3020638 "str_split() not available in php4" was fixed. + - Bug #3020665 "file_get_contents() too many parameters for php4" was fixed. + +5.5.001 (2010-06-23) + - A problem on image streams was fixed. + +5.5.000 (2010-06-22) + - Several PDF syntax errors (and related bugs) were fixed. + - Bug #3019090 "/Length values are wrong if AES encryption is used" was fixed. + +------------------------------------------------------------ + +5.4.003 (2010-06-19) + - A problem related to page boxes was fixed. + - Bug #3016920 "Font subsetting issues when editing pdf" was partially fixed (Note that flattening transparency layers is currently incompatible with TrueTypeUnicode fonts). + +5.4.002 (2010-06-18) + - A problem related with setProtection() method was fixed. + +5.4.001 (2010-06-18) + - A problem related with setProtection() method was fixed. + +5.4.000 (2010-06-18) + - The method setSignatureAppearance() was added, check the example n. 52. + - Several problems related to font subsetting were fixed. + +------------------------------------------------------------ + +5.3.010 (2010-06-15) + - Previous release was corrupted. + +5.3.009 (2010-06-15) + - Bug #3015934 "Bullets don't display correctly" was fixed. + +5.3.008 (2010-06-13) + - This version fixes some problems of SVG rasterization. + +5.3.007 (2010-06-13) + - This version improves SVG support. + +5.3.006 (2010-06-10) + - This version includes a change in uniqid calls for backward compatibility with PHP4. + +5.3.005 (2010-06-09) + - The method getPageSizeFromFormat() was changed to include all standard page formats (includes 281 page formats + variation). + +5.3.004 (2010-06-08) + - Bug #3013291 "HTML table cell width" was fixed. + - Bug #3013294 "HTML table cell alignment" was fixed. + - The columns widths of HTML tables are now inherited from the first row. + +5.3.003 (2010-06-08) + - Bug #3013102 "HTML table header misaligned after page break" was fixed. + +5.3.002 (2010-06-07) + - The methods setFontSubsetting() and setFontSubsetting() were added to control the default font subsetting mode (see example n. 1). + - Bug #3012596 "Whitespace should not appeared after use Thai top characters" was fixed. + - Examples n. 1, 14, and 54 were updated. + +5.3.001 (2010-06-06) + - Barcode PDF417 was improved to support Macro Code Blocks (see example n. 50). + +5.3.000 (2010-06-05) + - License was changed to GNU-LGPLv3 (see the updated LICENSE.TXT file). + - PDF417 barcode support was added (check the example n. 50). + - The method write2DBarcode() was improved (some parameters were added and other changed - check example n. 50). + +------------------------------------------------------------ + +5.2.000 (2010-06-02) + - IMPORTANT: Support for font subsetting was added by default to reduce the size of documents using large unicode font files. + If you embed the whole font in the PDF, the person on the other end can make changes to it even if he didn't have your font. + If you subset the font, file size of the PDF will be smaller but the person who receives your PDF would need to have your same font in order to make changes to your PDF. + - The signature of the SetFont() and AddFont() methods were changed to include the font subsetting option (subsetting is applied by default). + - Examples 14 and 54 were updated. + +------------------------------------------------------------ + +5.1.002 (2010-05-27) + - Bug #3007818 "SetAutoPageBreak fails with MultiCell" was fixed. + - A bug related to MultiCell() minimun height was fixed. + +5.1.001 (2010-05-26) + - The problem of blank page after table was fixed. + +5.1.000 (2010-05-25) + - This version includes support for CSS (Cascading Style Sheets) (see example n. 61). + - The convertHTMLColorToDec() method was improved. + +------------------------------------------------------------ + +5.0.014 (2010-05-21) + - A problem on color and style of HTML links was fixed. + - A bug relative to gradients was fixed. + - The getStringHeight() method was added and getNumLines() method was improved. + - All examples were updated. + +5.0.013 (2010-05-19) + - A bug related to page-breaks and table cells was fixed. + +5.0.012 (2010-05-19) + - Page orientation bug was fixed. + - The access to method setPageFormat() was changed to 'protected' because it is not intended to be directly called. + +5.0.011 (2010-05-19) + - Page orientation bug was fixed. + - Bug #3003966 "Multiple columns and nested lists" was fixed. + +5.0.010 (2010-05-17) + - The methods setPageFormat(), setPageOrientation() and related methods were extended to include page boxes, page rotations and page transitions. + - The method setPageBoxes() was added to set page boundaries (MediaBox, CropBox, BleedBox, TrimBox, ArtBox); + - A bug relative to underline, overline and linethrough was fixed. + +5.0.009 (2010-05-16) + - Bug #3002381 "Multiple columns and nested lists" was fixed. + +5.0.008 (2010-05-15) + - Bug "Columns WriteHTML and Justification" was fixed. + +5.0.007 (2010-05-14) + - Bug #3001347 "Bug when using WriteHTML with setEqualColumns()" was fixed. + - Bug #3001505 "problem with sup and sub tags at the beginning of a line" was fixed. + +5.0.006 (2010-05-13) + - Length of hr tag was fixed. + - An error on 2d barcode method was fixed. + +5.0.005 (2010-05-12) + - WARNING: The logic of permissions on the SetProtection() method has been inverted and extended (see example 16). Now you have to specify the features you want to block. + - SetProtection() method was extended to support RSA and AES 128 encryption and public-keys (see example 16). + - Bug #2999489 "setEqualColumns() and TOC uses wrong columns" was fixed (see the example 10). + +5.0.004 (2010-05-10) + - HTML line alignment when using sub and sup tags was fixed. + +5.0.003 (2010-05-07) + - Horizontal alignment was fixed for images and barcodes. Now the X coordinate is always relative to the left margin. Use GetAbsX() instead of GetX() to get the X relative to left margin. + - Header() method was changed to account for new image alignment rules. + +5.0.002 (2010-05-06) + - Bookmark() and related methods were fixed to accept HTML code. + - A problem on HTML links was fixed. + +5.0.001 (2010-05-06) + - Protected method _putstream was re-added for backward compatibility. + - The following method were added to display HTML Table Of Content (see example n. 59): + addTOCPage(), endTOCPage(), addHTMLTOC(). + +5.0.000 (2010-05-05) + - Method ImageSVG() was added to embedd SVG images (see example n. 58). Note that not all SVG images are supported. + - Method setRasterizeVectorImages() was added to enable/disable rasterization for vector images via ImageMagick library. + - Method RoundedRectXY() was added. + - Method PieSectorXY() was added. + - Gradient() method is now public and support new features. + - Shading to transparency is now supported. + - Image alignments were fixed. + - Support for dynamic images were improved. + - PDF_IMAGE_SCALE_RATIO has been changed to 1.25 for better compatibility with SVG. + - RAW and RAW2 modes were added to 2D Barcodes (see example n. 50). + - Automatic padding feature was added on barcodes (see examples n. 27 and 50). + - Bug #2995003 "Reproduced thead bug" was fixed. + - The Output() method now accepts FI and FD destinations to save the document on server before sending it to the client. + - Ellipse() method was improved and fixed (see page 2 of example n. 12). + +------------------------------------------------------------ + +4.9.018 (2010-04-21) + - Bug item #2990356 "Current font size not respected with more than two HTML <p>" was fixed. + +4.9.017 (2010-04-21) + - Bug item #2990224 "Different behaviour for equivalent HTML strings" was fixed. + - Bug item #2990314 "Dash is not appearing with SHY character" was fixed. + +4.9.016 (2010-04-20) + - An error on htmlcolors.php was fixed. + - getImageFileType() method was improved. + - GIF images with transparency are now better supported. + - Automatic page orientation was improved. + +4.9.015 (2010-04-20) + - A new method copyPage() was added to clone pages (see example n. 44). + - Support for text overline was added. + - Underline and linethrough methods were fixed. + - Bug #2989058 "SHY character causes unnecessary word-wrapping" was fixed. + +4.9.014 (2010-04-18) + - Bug item #2988845 was fixed. + +4.9.013 (2010-04-15) + - Image() and ImageEPS() methods were fixed and improved; $fitonpage parameter was added. + +4.9.012 (2010-04-12) + - The hyphenateText() method was added to automatically hyphenate text (see example n. 46). + +4.9.011 (2010-04-07) + - Vertical alignments for Cell() method were improved (see example n. 57). + +4.9.010 (2010-04-06) + - Signature of Cell() method now includes new parameters for vertical alignment (see example n. 57). + - Text() method was extended to include all Cell() parameters. + - HTML line alignment procedure was changed to fix some bugs. + +4.9.009 (2010-04-05) + - Text() method was fixed for backward compatibility. + +4.9.008 (2010-04-03) + - Additional line space after table header was removed. + - Support for HTML lists in multicolumn mode was added. + - The method setTextRenderingMode() was added to set text rendering modes (see the example n. 26). + - The following HTML attributes were added to set text rendering modes (see the example n. 26): stroke, strokecolor, fill. + +4.9.007 (2010-04-03) + - Font Descent computation was fixed (patch #2981441). + +4.9.006 (2010-04-02) + - The constant K_TCPDF_CALLS_IN_HTML was added on configuration file to enable/disable the ability to call TCPDF methods in HTML. + - The usage of tcpdf tag in HTML mode was changed to remove the possible security flaw offered by the eval() function (thanks to Matthias Hecker for spotting this security problem). See the new example n. 49 for further information. + +4.9.005 (2010-04-01) + - Bug# 2980354 "Wrong File attachment description with security" was fixed. + - Several problems with HTML line alignment were fixed. + - The constant K_THAI_TOPCHAR was added on configuration file to enable/disable the special procedure used to avoid the overlappind of symbols on Thai language. + - A problem with font name directory was fixed. + - A bug on _destroy() method was fixed. + +4.9.004 (2010-03-31) + - Patch #979681 "GetCharWidth - default character width" was applied (bugfix). + +4.9.003 (2010-03-30) + - Problem of first <br /> on multiple columns was fixed. + - HTML line alignment was fixed. + - A QR-code bug was fixed. + +4.9.002 (2010-03-29) + - Patch #2978349 "$ignore_min_height is ignored in function Cell()" was applied. + - Bug #2978607 "2D Barcodes are wrong" was fixed. + - A problem with HTML block tags was fixed. + - Artificial italic for CID-0 fonts was added. + - Several multicolumn bugs were fixed. + - Support for HTML tables on multicolumn was added. + +4.9.001 (2010-03-28) + - QR Code minor bug was fixed. + - Multicolumn mode was added (see the new example n. 10). + - The following methods were added: setEqualColumns(), setColumnsArray(), selectColumn(). + - Thai diacritics support were changed (note that this is incompatible with html justification). + +4.9.000 (2010-03-27) + - QR Code (2D barcode) support was added (see example n. 50). + - The following methods were added to print crop and registration marks (see example n. 56): colorRegistrationBar(), cropMark(), registrationMark(). + - Limited support for CSS line-height property was added. + - Gradient method now supports Gray, RGB and CMYK space color. + - Example n. 51 was updated. + - Vertical alignment of font inside cell was fixed. + - Support for multiple Thai diacritics was added. + - Bug item #2974929 "Duplicate case values" was fixed. + - Bug item #2976729 "File attachment not working with security" was fixed. + +------------------------------------------------------------ + +4.8.039 (2010-03-20) + - Problems related to custom locale settings were fixed. + - Problems related to HTML on Header and Footer were fixed. + +4.8.038 (2010-03-13) + - Various bugs related to page-break in HTML mode were fixed. + - Bug item #2968974 "Another <thead> pagebreak problem" was fixed. + - Bug item #2969276 "justification problem" was fixed. + - Bug item #2969289 "bug when using justified text and custom headers" was fixed. + - Images are now automatically resized to be contained on the page. + - Some HTML line alignments were fixed. + - Signature of AddPage() and SetMargins() methods were changed to include an option to set default page margins. + +4.8.037 (2010-03-03) + - Bug item #2962068 was fixed. + - Bug item #2967017 "Problems with <thead> and pagebreaks" was fixed. + - Bug item #2967023 "table header lost with pagebreak" was fixed. + - Bug item #2967032 "Header lost with nested tables" was fixed. + +4.8.036 (2010-02-24) + - Automatic page break for HTML images was improved. + - Example 10 was updated. + - Japanese was removed from example 8 because the freeserif font doesn't contain japanese (you can display it using arialunicid0 font). + +4.8.035 (2010-02-23) + - Automatic page break for HTML images was added. + - Support for multicolumn HTML was added (example 10 was updated). + +4.8.034 (2010-02-17) + - Language files were updated. + +4.8.033 (2010-02-12) + - A bug related to protection mode with links was fixed. + +4.8.032 (2010-02-04) + - A bug related to $maxh parameter on Write() and MultiCell() was fixed. + - Support for body tag was added. + +4.8.031 (2010-01-30) + - Bug item #2941589 "paragraph justify not working on some non-C locales" was fixed. + +4.8.030 (2010-01-27) + - Some text alignment cases were fixed. + +4.8.029 (2010-01-27) + - Bug item #2941057 "TOC Error in PDF File Output" was fixed. + - Some text alignment cases were fixed. + +4.8.028 (2010-01-26) + - Text alignment for RTL mode was fixed. + +4.8.027 (2010-01-25) + - Bug item #2938412 "Table related problems - thead, nobr, table width" was fixed. + +4.8.026 (2010-01-19) + - The misspelled word "length" was replaced with "length" in some variables and comments. + +4.8.025 (2010-01-18) + - addExtGState() method was improved to reuse existing ExtGState objects. + +4.8.024 (2010-01-15) + - Justification mode for HTML was fixed (Bug item #2932470). + +4.8.023 (2010-01-15) + - Bug item #2932470 "Some HTML entities breaks justification" was fixed. + +4.8.022 (2010-01-14) + - Source code documentation was fixed. + +4.8.021 (2010-01-03) + - A Bug relative to Table Of Content index was fixed. + +4.8.020 (2009-12-21) + - Bug item #2918545 "Display problem of the first row of a table with larger font" was fixed. + - A Bug relative to table rowspan mode was fixed. + +4.8.019 (2009-12-16) + - Bug item #2915684 "Image size" was fixed. + - Bug item #2914995 "Image jpeg quality" was fixed. + - The signature of the Image() method was changed (check the documentation for the $resize parameter). + +4.8.018 (2009-12-15) + - Bug item #2914352 "write error" was fixed. + +4.8.017 (2009-11-27) + - THEAD problem when table is used on header/footer was fixed. + - A first line alignment on HTML justification was fixed. + - Method getImageFileType() was added. + - Images with unknown extension and type are now supported via ImageMagick PHP extension. + +4.8.016 (2009-11-21) + - Document Information Dictionary was fixed. + - CSS attributes 'page-break-before', 'page-break-after' and 'page-break-inside' are now supported. + - Problem of unclosed last page was fixed. + - Problem of 'thead' unnecessarily repeated on the next page was fixed. + +4.8.015 (2009-11-20) + - A problem with some PNG transparency images was fixed. + - Bug #2900762 "Sort issues in Bookmarks" was fixed. + - Text justification was fixed for various modes: underline, strikeout and background. + +4.8.014 (2009-11-04) + - Bug item #2891316 "writeHTML, underlining replacing spaces" was fixed. + - The handling of temporary RTL text direction mode was fixed. + +4.8.013 (2009-10-26) + - Bug item #2884729 "Problem with word-wrap and hyphen" was fixed. + +4.8.012 (2009-10-23) + - Table cell alignments for RTL booklet mode were fixed. + - Images and barcode alignments for booklet mode were fixed. + +4.8.011 (2009-10-22) + - DejaVu fonts were updated to latest version. + +4.8.010 (2009-10-21) + - Bookmark for TOC page was added. + - Signature of addTOC() method is changed. + - Bookmarks are now automatically sorted by page and Y position. + - Example n. 45 was updated. + - Example n. 55 was added to display all charactes available on core fonts. + +4.8.009 (2009-09-30) + - Compatibility with PHP 5.3 was improved. + - All examples were updated. + - Index file for examples was added. + +4.8.008 (2009-09-29) + - Example 49 was updated. + - Underline and linethrough now works with cell stretching mode. + +4.8.007 (2009-09-23) + - Infinite loop problem caused by nobr attribute was fixed. + +4.8.006 (2009-09-23) + - Bug item #2864522 "No images if DOCUMENT_ROOT=='/'" was fixed. + - Support for text-indent CSS attribute was added. + - Method rollbackTransaction() was changed to support self-reassignment of previous object (check source code documentation). + - Support for the HTML "nobr" attribute was added to avoid splitting a table or a table row on two pages (i.e.: <tr nobr="true">...</tr>). + +4.8.005 (2009-09-17) + - A bug relative to multiple transformations and annotations was fixed. + +4.8.004 (2009-09-16) + - A bug on _putannotsrefs() method was fixed. + +4.8.003 (2009-09-15) + - Bug item #2858754 "Division by zero" was fixed. + - A bug relative to HTML list items was fixed. + - A bug relative to form fields on multiple pages was fixed. + - PolyLine() method was added (see example n. 12). + - Signature of Polygon() method was changed. + +4.8.002 (2009-09-12) + - A problem related to CID-0 fonts offset was fixed: if the $cw[1] entry on the CID-0 font file is not defined, then a CID keys offset is introduced. + +4.8.001 (2009-09-09) + - The appearance streams (AP) for anotations form fields was fixed (see examples n. 14 and 54). + - Radiobuttons were fixed. + +4.8.000 (2009-09-07) + - This version includes some support for Forms fields (see example n. 14) and XHTML forms (see example n. 54). + - The following methods were changed to work without JavaScript: TextField(), RadioButton(), ListBox(), ComboBox(), CheckBox(), Button(). + - Support for Widget annotations was improved. + - Alignment of annotation objects was fixed (examples 36 and 41 were updated). + - addJavascriptObject() method was added. + - Signature of Image() method was changed. + - htmlcolors.php file was updated. + +------------------------------------------------------------ + +4.7.003 (2009-09-03) + - Support for TCPDF methods on HTML was improved (see example n. 49). + +4.7.002 (2009-09-02) + - Bug item #2848892 "writeHTML + table: Gaps between rows" was fixed. + - JavaScript support was fixed (see example n. 53). + +4.7.001 (2009-08-30) + - The Polygon() and Arrow() methods were fixed and improved (see example n. 12). + +4.7.000 (2009-08-29) + - This is a major release. + - Some procedures were internally optimized. + - The problem of mixed signature and annotations was fixed (example n. 52). + +4.6.030 (2009-08-29) + - IMPORTANT: percentages on table cell widths are now relative to the full table width (as in standard HTML). + - Various minor bugs were fixed. + - Example n. 52 (digital signature) was updated. + +4.6.029 (2009-08-26) + - PHP4 version was fixed. + +4.6.028 (2009-08-25) + - Signature algorithm was finally fixed (see example n. 52). + +4.6.027 (2009-08-24) + - TCPDF now supports unembedded TrueTypeUnicode Fonts (just comment the $file entry on the fonts' php file. + +4.6.026 (2009-08-21) + - Bug #2841693 "Problem with MultiCell and ishtml and justification" was fixed. + - Signature functions were improved but not yet fixed (tcpdf.crt and example n. 52 were updated). + +4.6.025 (2009-08-17) + - Carriage returns (\r) were removed from source code. + - Problem related to set_magic_quotes_runtime() depracated was fixed. + +4.6.024 (2009-08-07) + - Bug item #2833556 "justification using other units than mm" was fixed. + - Documentation was fixed/updated. + +4.6.023 (2009-08-02) + - Bug item #2830537 "MirrorH can show mask for transparent PNGs" was fixed. + +4.6.022 (2009-07-24) + - A bug relative to single line printing when using WriteHTMLCell() was fixed. + - Signature support were improved but is still experimental. + - Fonts Free and Dejavu were updated to latest versions. + +4.6.021 (2009-07-20) + - Bug item #2824015 "XHTML Ampersand &amp; in hyperlink bug" was fixed. + - Bug item #2824036 "Image as hyperlink in table, text displaced at page break" was fixed. + - Links alignment on justified text was fixed. + - Unicode "\u" modifier was added to re_spaces variable by default. + +4.6.020 (2009-07-16) + - Bug item #2821921 "issue in example 18" was fixed. + - Signature of SetRTL() method was changed. + +4.6.019 (2009-07-13) + - Bug item #2820703 "xref table broken" was fixed. + +4.6.018 (2009-07-10) + - Bug item #2819319 "Text over text" was fixed. + - Method Arrow() was added to print graphic arrows (example 12 was updated). + +4.6.017 (2009-07-05) + - Bug item #2816079 "Example 48 not working" was fixed. + - The signature of the checkPageBreak() was changed. The parameter $addpage was added to turn off the automatic page creation. + +4.6.016 (2009-06-16) + - Method setSpacesRE() was added to set the regular expression used for detecting withespaces or word separators. If you are using chinese, try: setSpacesRE('/[\s\p{Z}\p{Lo}]/');, otherwise you can use setSpacesRE('/[\s\p{Z}]/'); + - The method _putinfo() now automatically fills the metadata with '?' in case of empty string. + +4.6.015 (2009-06-11) + - Bug #2804667 "word wrap bug" was fixed. + +4.6.014 (2009-06-04) + - Bug #2800931 "Table thead tag bug" was fixed. + - A bug related to <pre> tag was fixed. + +4.6.013 (2009-05-28) + - List bullets position was fixed for RTL languages. + +4.6.012 (2009-05-23) + - setUserRights() method doesn't work anymore unless you call the setSignature() method with the Adobe private key! + +4.6.011 (2009-05-18) + - Signature of the Image() method was changed to include the new $fitbox parameter (see source code documentation). + +4.6.010 (2009-05-17) + - Image() method was improved: now is possible to specify the maximum dimensions for a constraint box defined by $w and $h parameters, and setting the $resize parameter to null. + - <tcpdf> tag indent problem was fixed. + - $y parameter was added to checkPageBreak() method. + - Bug n. 2791773 "writeHTML" was fixed. + +4.6.009 (2009-05-13) + - xref table for embedded files was fixed. + +4.6.008 (2009-05-07) + - setSignature() method was improved (but is still experimental). + - Example n. 52 was added. + +4.6.007 (2009-05-05) + - Bug #2786685 "writeHtmlCell and <br /> in custom footer" was fixed. + - Table header repeating bug was fixed. + - Some newlines and tabs are now automatically removed from HTML strings. + +4.6.006 (2009-04-28) + - Support for "<a name="...">...</a>" was added. + - By default TCPDF requires PCRE Unicode support turned on but now works also without it (with limited ability to detect some Unicode blank spaces). + +4.6.005 (2009-04-25) + - Points (pt) conversion in getHTMLUnitToUnits() was fixed. + - Default tcpdf.pem certificate file was added. + - Experimental support for signing document was added but it is not yet completed (some help is needed - I think that the calculation of the ByteRange is OK and the problem is on the signature calculation). + +4.6.004 (2009-04-23) + - Method deletePage() was added to delete pages (see example n. 44). + +4.6.003 (2009-04-21) + - The caching mechanism of the UTF8StringToArray() method was fixed. + +4.6.002 (2009-04-20) + - Documentation of rollbackTransaction() method was fixed. + - The setImageScale() and getImageScale() methods now set and get the adjusting parameter used by pixelsToUnits() method. + - HTML images now support other units of measure than pixels (getHTMLUnitToUnits() is now used instead of pixelsToUnits()). + - WARNING: PDF_IMAGE_SCALE_RATIO has been changed by default to 1. + +4.6.001 (2009-04-17) + - Spaces between HTML block tags are now automatically removed. + - The bug related to cMargin changes between tables was fixed. + +4.6.000 (2009-04-16) + - WARNING: THIS VERSION CHANGES THE BEHAVIOUR OF $x and $y parameters for several TCPDF methods: + zero coordinates for $x and $y are now valid coordinates; + set $x and $y as empty strings to get the current value. + - Some error caused by 'empty' function were fixed. + - Default color for convertHTMLColorToDec() method was changed to white and the return value for invalid color is false. + - HTML on footer bug was fixed. + - The following examples were fixed: 5,7,10,17,19,20,21,33,42,43. + +4.5.043 (2009-04-15) + - Barcode class (barcode.php) was extended to include new linear barcode types (see example n. 27): + C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9 + C39+ : CODE 39 with checksum + C39E : CODE 39 EXTENDED + C39E+ : CODE 39 EXTENDED + CHECKSUM + C93 : CODE 93 - USS-93 + S25 : Standard 2 of 5 + S25+ : Standard 2 of 5 + CHECKSUM + I25 : Interleaved 2 of 5 + I25+ : Interleaved 2 of 5 + CHECKSUM + C128A : CODE 128 A + C128B : CODE 128 B + C128C : CODE 128 C + EAN2 : 2-Digits UPC-Based Extension + EAN5 : 5-Digits UPC-Based Extension + EAN8 : EAN 8 + EAN13 : EAN 13 + UPCA : UPC-A + UPCE : UPC-E + MSI : MSI (Variation of Plessey code) + MSI+ : MSI + CHECKSUM (modulo 11) + POSTNET : POSTNET + PLANET : PLANET + RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) + KIX : KIX (Klant index - Customer index) + IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200 (NOTE: requires BCMath PHP extension) + CODABAR : CODABAR + CODE11 : CODE 11 + PHARMA : PHARMACODE + PHARMA2T : PHARMACODE TWO-TRACKS + +4.5.042 (2009-04-15) + - Method Write() was fixed for the strings containing only zero value. + +4.5.041 (2009-04-14) + - Barcode methods were fixed. + +4.5.040 (2009-04-14) + - Method Write() was fixed to handle empty strings. + +4.5.039 (2009-04-11) + - Support for linear barcodes was extended (see example n. 27 and barcodes.php documentation). + +4.5.038 (2009-04-10) + - Write() method was improved to support separators for Japanese, Korean, Chinese Traditional and Chinese Simplified. + +4.5.037 (2009-04-09) + - General performances were improved. + - The signature of the method utf8Bidi() was changed. + - The method UniArrSubString() was added. + - Experimental support for 2D barcodes were added (see example n. 50 and 2dbarcodes.php class). + +4.5.036 (2009-04-03) + - TCPDF methods can be called inside the HTML code (see example n. 49). + - All tag attributes, such as <p align="center"> must be enclosed within double quotes. + +4.5.035 (2009-03-28) + - Bug #2717436 "writeHTML rowspan problem (continued)" was fixed. + - Bug #2719090 "writeHTML fix follow up" was fixed. + - The method _putuserrights() was changed to avoid Adobe Reader 9.1 crash. This broken the 'trick' that was used to display forms in Acrobat Reader. + +4.5.034 (2009-03-27) + - Bug #2716914 "Bug writeHTML of a table in body and footer related with pb" was fixed. + - Bug #2717056 ] "writeHTML problem when setting tr style" was fixed. + - The signature of the Cell() method was changed. + +4.5.033 (2009-03-27) + - The support for rowspan/colspan on HTML tables was improved (see example n. 48). + +4.5.032 (2009-03-23) + - setPrintFooter(false) bug was fixed. + +4.5.031 (2009-03-20) + - Table header support was extended to multiple pages. + +4.5.030 (2009-03-20) + - thead tag is now supported on HTML tables (header rows are repeated after page breaks). + - The startTransaction() was improved to autocommit. + - List bullets now uses the foreground color (putHtmlListBullet()). + +4.5.029 (2009-03-19) + - The following methods were added to UNDO commands (see example 47): startTransaction(), commitTransaction(), rollbackTransaction(). + - All examples were updated. + +4.5.028 (2009-03-18) + - Bug #2690945 "List Bugs" was fixed. + - HTML text alignment on lists was fixed. + - The constant PDF_FONT_MONOSPACED was added to the configuration file to define the default monospaced font. + - The following methods were fixed: getPageWidth(), getPageHeight(), getBreakMargin(). + - All examples were updated. + +4.5.027 (2009-03-16) + - Method getPageDimensions() was added to get page dimensions. + - The signature of the following methos were changed: getPageWidth(), getPageHeight(), getBreakMargin(). + - _parsepng() method was fixed for PNG URL images (fread bug). + +4.5.026 (2009-03-11) + - Bug #2681793 affecting URL images with spaces was fixed. + +4.5.025 (2009-03-10) + - A small bug affecting hyphenation support was fixed. + - The method SetDefaultMonospacedFont() was added to define the default monospaced font. + +4.5.024 (2009-03-07) + - The bug #2666493 was fixed "Footer corrupts document". + +4.5.023 (2009-03-06) + - The bug #2666688 was fixed "Rowspan in tables". + +4.5.022 (2009-03-05) + - The bug #2659676 was fixed "refer to #2157099 test 4 < BR > problem still not fixed". + - addTOC() function bug was fixed. + +4.5.020 (2009-03-03) + - The following bug was fixed: "function removeSHY corrupts unicode". + +4.5.019 (2009-02-28) + - The problem of decimal separator using different locale was fixed. + - The text hyphenation is now supported (see example n. 46). + +4.5.018 (2009-02-26) + - The _destroy() method was added to unset all class variables and frees memory. + - Now it's possible to call Output() method multiple times. + +4.5.017 (2009-02-24) + - A minor bug that raises a PHP warning was fixed. + +4.5.016 (2009-02-24) + - Bug item #2631200 "getNumLines() counts wrong" was fixed. + - Multiple attachments bug was fixed. + - All class variables are now cleared on Output() for memory otpimization. + +4.5.015 (2009-02-18) + - Bug item #2612553 "function Write() must not break a line on &nbsp; character" was fixed. + +4.5.014 (2009-02-13) + - Bug item #2595015 "POSTNET Barcode Checksum Error" was fixed (on barcode.php). + - Pagebreak bug for barcode was fixed. + +4.5.013 (2009-02-12) + - border attribute is now supported on HTML images (only accepts the same values accepted by Cell()). + +4.5.012 (2009-02-12) + - An error on image border feature was fixed. + +4.5.011 (2009-02-12) + - HTML links for images are now supported. + - height attribute is now supported on HTML cells. + - $border parameter was added to Image() and ImageEps() methods. + - The method getNumLines() was added to estimate the number of lines required for the specified text. + +4.5.010 (2009-01-29) + - Bug n. 2546108 "BarCode Y position" was fixed. + +4.5.009 (2009-01-26) + - Bug n. 2538094 "Empty pdf file created" was fixed. + +4.5.008 (2009-01-26) + - setPage() method was fixed to correctly restore graphic states. + - Source code was cleaned up for performances. + +4.5.007 (2009-01-24) + - checkPageBreak() and write1DBarcode() methods were fixed. + - Source code was cleaned up for performances. + - barcodes.php was updated. + +4.5.006 (2009-01-23) + - getHTMLUnitToPoints() method was replaced by getHTMLUnitToUnits() to fix HTML units bugs. + +4.5.005 (2009-01-23) + - Page closing bug was fixed. + +4.5.004 (2009-01-21) + - The access of convertHTMLColorToDec() method was changed to public + - Fixed bug on UL tag. + +4.5.003 (2009-01-19) + - Fonts on different folders are now supported. + +4.5.002 (2009-01-07) + - addTOC() function was improved (see example n. 45). + +4.5.001 (2009-01-04) + - The signature of startPageGroup() function was changed. + - Method Footer() was improved to automatically print page or page-group number (see example n. 23). + - Protected method formatTOCPageNumber() was added to customize the format of page numbers on the Table Of Content. + - The signature of addTOC() was changed to include the font used for page numbers. + +4.5.000 (2009-01-03) + - A new $diskcache parameter was added to class constructor to enable disk caching and reduce RAM memory usage (see example n. 43). + - The method movePageTo() was added to move pages to previous positions (see example n. 44). + - The methods getAliasNumPage() and getPageNumGroupAlias() were added to get the alias for page number (needed when using movepageTo()). + - The methods addTOC() was added to print a Table Of Content (see example n. 45). + - Imagick class constant was removed for better compatibility with PHP4. + - All existing examples were updated and new examples were added. + +4.4.009 (2008-12-29) + - Examples 1 and 35 were fixed. + +4.4.008 (2008-12-28) + - Bug #2472169 "Unordered bullet size not adjusted for unit type" was fixed. + +4.4.007 (2008-12-23) + - Bug #2459935 "no unit conversion for header line" was fixed. + - Example n. 42 for image alpha channel was added. + - All examples were updated. + +4.4.006 (2008-12-11) + - Method setLIsymbol() was changed to reflect latest changes in HTML list handling. + +4.4.005 (2008-12-10) + - Bug item #2413870 "ordered list override value" was fixed. + +4.4.004 (2008-12-10) + - The protected method getHTMLUnitToPoints() was added to accept various HTML units of measure (em, ex, px, in, cm, mm, pt, pc, %). + - The method intToRoman() was added to convert integer number to Roman representation. + - Support fot HTML lists was improved: the CSS property list-style-type is now supported. + +4.4.003 (2008-12-09) + - Bug item #2412147 "Warning on line 3367" was fixed. + - Method setHtmlLinksStyle() was added to set default HTML link colors and font style. + - Method addHtmlLink() was changed to use color and style defined on the inline CSS. + +4.4.002 (2008-12-09) + - Borders on Multicell() were fixed. + - Problem of Multicell() on Header function (Bug item #2407579) was fixed. + - Problem on graphics tranformations applied to Multicell() was fixed. + - Support for ImageMagick was added. + - Width calculation for nested tables was fixed. + +4.4.001 (2008-12-08) + - Some missing core fonts were added on fonts directory. + - CID0 fonts rendering was fixed. + - HTML support was improved (<pre> and <tt> tags are now supported). + - Bug item #2406022 "Left padding bug in MultiCell with maxh" was fixed. + +4.4.000 (2008-12-07) + - File attachments are now supported (see example n. 41). + - Font functions were optimized to reduce document size. + - makefont.php was updated. + - Linux binaries were added on /fonts/utils + - All fonts were updated. + - $autopadding parameter was added to Multicell() to disable automatic padding features. + - $maxh parameter was added to Multicell() and Write() to set a maximum height. + +4.3.009 (2008-12-05) + - Bug item #2392989 (Custom header + setlinewidth + cell border bug) was fixed. + +4.3.008 (2008-12-05) + - Bug item #2390566 "rect bug" was fixed. + - File path was fixed for font embedded files. + - SetFont() method signature was changed to include the font filename. + - Some font-related methods were improved. + - Methods getFontFamily() and getFontStyle() were added. + +4.3.007 (2008-12-03) + - PNG alpha channel is now supported (GD library is required). + - AddFont() function now support custom font file path on $file parameter. + - The default width variable ($dw) is now always defined for any font. + - The 'Style' attribute on CID-0 fonts was removed because of protection bug. + +4.3.006 (2008-12-01) + - A regular expression on getHtmlDomArray() to find HTML tags was fixed. + +4.3.005 (2008-11-25) + - makefont.php was fixed. + - Bug item #2339877 was fixed (false loop condition detected on WriteHTML()). + - Bug item #2336733 was fixed (lasth value update on Multicell() when border and fill are disabled). + - Bug item #2342303 was fixed (automatic page-break on Image() and ImageEPS()). + +4.3.004 (2008-11-19) + - Function _textstring() was fixed (bug 2309051). + - All examples were updated. + +4.3.003 (2008-11-18) + - CID-0 font bug was fixed. + - Some functions were optimized. + - Function getGroupPageNoFormatted() was added. + - Example n. 23 was updated. + +4.3.002 (2008-11-17) + - Bug item #2305518 "CID-0 font don't work with encryption" was fixed. + +4.3.001 (2008-11-17) + - Bug item #2300007 "download mimetype pdf" was fixed. + - Double quotes were replaced by single quotes to improve PHP performances. + - A bug relative to HTML cell borders was fixed. + +4.3.000 (2008-11-14) + - The function setOpenCell() was added to set the top/bottom cell sides to be open or closed when the cell cross the page. + - A bug relative to list items indentation was fixed. + - A bug relative to borders on HTML tables and Multicell was fixed. + - A bug relative to rowspanned cells was fixed. + - A bug relative to html images across pages was fixed. + +4.2.009 (2008-11-13) + - Spaces between li tags are now automatically removed. + +4.2.008 (2008-11-12) + - A bug relative to fill color on next page was fixed. + +4.2.007 (2008-11-12) + - The function setListIndentWidth() was added to set custom indentation widht for HTML lists. + +4.2.006 (2008-11-06) + - A bug relative to HTML justification was fixed. + +4.2.005 (2008-11-06) + - A bug relative to HTML justification was fixed. + - The methods formatPageNumber() and PageNoFormatted() were added to format page numbers. + - Default Footer() method was changed to use PageNoFormatted() instead of PageNo(). + - Example 6 was updated. + +4.2.004 (2008-11-04) + - Bug item n. 2217039 "filename handling improvement" was fixed. + +4.2.003 (2008-10-31) + - Font style bug was fixed. + +4.2.002 (2008-10-31) + - Bug item #2210922 (htm element br not work) was fixed. + - Write() function was improved to support margin changes. + +4.2.001 (2008-10-30) + - setHtmlVSpace($tagvs) function was added to set custom vertical spaces for HTML tags. + - writeHTML() function now support margin changes during execution. + - Signature of addHTMLVertSpace() function is changed. + +4.2.000 (2008-10-29) + - htmlcolors.php was changed to support class-loaders. + - ImageEps() function was improved in performances. + - Signature of Link() And Annotation() functions were changed. + - (Bug item #2198926) Links and Annotations alignment were fixed (support for geometric tranformations was added). + - rowspan mode for HTML table cells was improved and fixed. + - Booklet mode for double-sided pages was added; see SetBooklet() function and example n. 40. + - lastPage() signature is changed. + - Signature of Write() function is changed. + - Some HTML justification problems were fixed. + - Some functions were fixed to better support RTL mode. + - Example n. 10 was changed to support RTL mode. + - All examples were updated. + +4.1.004 (2008-10-23) + - unicode_data.php was changed to support class-loaders. + - Bug item #2186040/2 (writeHTML margin problem) was fixed. + +4.1.003 (2008-10-22) + - Bug item #2185399 was fixed (rowspan and page break). + - Bugs item #2186040 was fixed (writeHTML margin problem). + - Newline after table was removed. + +4.1.002 (2008-10-21) + - Bug item #2184525 was fixed (rowspan on HTML cell). + +4.1.001 (2008-10-21) + - Support for "start" attribute was added to HTML ordered list. + - unicode_data.php file was changed to include UTF-8 to ASCII table. + - Some functions were modified to better support UTF-8 extensions to core fonts. + - Support for images on HTML lists was improved. + - Examples n. 1 and 6 were updated. + +4.1.000 (2008-10-18) + - Page-break bug using HTML content was fixed. + - The "false" parameter was reintroduced to class_exists function on PHP5 version to avoid autoload. + - addHtmlLink() function was improved to support internal links (i.e.: <a href="#23">link to page 23</a>). + - Justification alignment is now supported on HTML (see example n. 39). + - example_006.php was updated. + +4.0.033 (2008-10-13) + - Bug n. 2157099 was fixed. + - SetX() and SetY() functions were improved. + - SetY() includes a new parameter to avoid the X reset. + +4.0.032 (2008-10-10) + - Bug n. 2156926 was fixed (bold, italic, underlined, linethrough). + - setStyle() method was removed. + - Configuration file was changed to use helvetica (non-unicode) font by default. + - The use of mixed font types was improved. + - All examples were updated. + +4.0.031 (2008-10-09) + - _putannots() and _putbookmarks() links alignments were fixed. + +4.0.030 (2008-10-07) + - _putbookmarks() function was fixed. + - _putannots() was fixed to include internal links. + +4.0.029 (2008-09-27) + - Infinite loop bug was fixed [Bug item #130309]. + - Multicell() problem on Header() was fixed. + +4.0.028 (2008-09-26) + - setLIsymbol() was added to set the LI symbol used on UL lists. + - Missing $padding and $encryption_key variables declarations were added [Bug item #2129058]. + +4.0.027 (2008-09-19) + - Bug #2118588 "Undefined offset in tcpdf.php on line 9581" was fixed. + - arailunicid0.php font was updated. + - The problem of javascript form fields duplication after saving was fixed. + +4.0.026 (2008-09-17) + - convertHTMLColorToDec() function was improved to support rgb(RR,GG,BB) notation. + - The following inline CSS attributes are now supported: text-decoration, color, background-color and font-size names: xx-small, x-small, small, medium, large, x-large, xx-large + - Example n. 6 was updated. + +4.0.025 (2008-09-15) + - _putcidfont0 function was improved to include CJK fonts (Chinese, Japanese, Korean, CJK, Asian fonts) without embedding. + - arialunicid0 font was added (see the new example n. 38). + - The following Unicode to CID-0 tables were added on fonts folder: uni2cid_ak12.php, uni2cid_aj16.php, uni2cid_ag15.php, uni2cid_ac15.php. + +4.0.024 (2008-09-12) + - "stripos" function was replaced with "strpos + strtolower" for backward compatibility with PHP4. + - support for Spot Colors were added. Check the new example n. 37 and the following new functions: + AddSpotColor() + SetDrawSpotColor() + SetFillSpotColor() + SetTextSpotColor() + _putspotcolors() + - Bookmark() function was improved to fix wrong levels. + - $lasth changes after header/footer calls were fixed. + +4.0.023 (2008-09-05) + - Some HTML related problems were fixed. + - Image alignment on HTML was changed, now it always defaults to the normal mode (see example_006.php). + +4.0.022 (2008-08-28) + - Line height on HTML was fixed. + - Image inside an HTML cell problem was fixed. + - A new "zarbold" persian font was added. + +4.0.021 (2008-08-24) + - HTTP headers were fixed on Output function(). + - getAliasNbPages() and getPageGroupAlias() functions were changed to support non-unicode fonts on unicode documents. + - Function Write() was fixed. + - The problem of additional vertical spaces on HTML was fixed. + - The problem of frame around HTML links was fixed. + +4.0.020 (2008-08-15) + - "[2052259] WriteHTML <u> & <b>" bug was fixed. + +4.0.019 (2008-08-13) + - "Rowspan on first cell" bug was fixed. + +4.0.018 (2008-08-08) + - Default cellpadding for HTML tables was fixed. + - Annotation() function was added to support some PDF annotations (see example_036.php and section 8.4 of PDF reference 1.7). + - HTML links are now correclty shifted during line alignments. + - function getAliasNbPages() was added and Footer() was updated. + - RowSpan mode for HTML tables was fixed. + - Bugs item #2043610 "Multiple sizes vertical align wrong" was fixed. + - ImageEPS() function was improved and RTL alignment was fixed (see example_032.php). + +4.0.017 (2008-08-05) + - Missing CNZ and CEO style modes were added to Rect() function. + - Fonts utils were updated to include support for OpenType fonts. + - getLastH() function was added. + +4.0.016 (2008-07-30) + - setPageMark() function was added. This function must be called after calling Image() function for a background image. + +4.0.015 (2008-07-29) + - Some functions were changed to support different page formats (see example_028.php). + - The signature of setPage() function is changed. + +4.0.014 (2008-07-29) + - K_PATH_MAIN calculation on tcpdf_config.php was fixed. + - HTML support for EPS/AI images was added (see example_006.php). + - Bugs item #2030807 "Truncated text on multipage html fields" was fixed. + - PDF header bug was fixed. + - helvetica was added as default font family. + - Stroke mode was fixed on Text function. + - several minor bugs were fixed. + +4.0.013 (2008-07-27) + - Bugs item #2027799 " Big spaces between lines after page break" was fixed. + - K_PATH_MAIN calculation on tcpdf_config.php was changed. + - Function setVisibility() was fixed to avoid the "Incorrect PDEObject type" error message. + +4.0.012 (2008-07-24) + - Addpage(), Header() and Footer() functions were changed to simplify the implementation of external header/footer functions. + - The following functions were added: + setHeader() + setFooter() + getImageRBX() + getImageRBY() + getCellHeightRatio() + getHeaderFont() + getFooterFont() + getRTL() + getBarcode() + getHeaderData() + getHeaderMargin() + getFooterMargin() + +4.0.011 (2008-07-23) + - Font support was improved. + - The folder /fonts/utils contains new utilities and instructions for embedd font files. + - Documentation was updated. + +4.0.010 (2008-07-22) + - HTML tables were fixed to work across pages. + - Header() and Footer() functions were updated to preserve previous settings. + - example_035.php was added. + +4.0.009 (2008-07-21) + - UTF8StringToArray() function was fixed for non-unicode mode. + +4.0.008 (2008-07-21) + - Barcodes alignment was fixed (see example_027.php). + - unicode_data.php was updated. + - Arabic shaping for "Zero-Width Non-Joiner" character (U+200C) was fixed. + +4.0.007 (2008-07-18) + - str_split was replaced by preg_split for compatibility with PHP4 version. + - Clipping mode was added to all graphic functions by using parameter $style = "CNZ" or "CEO" (see example_034.php). + +4.0.006 (2008-07-16) + - HTML rowspan bug was fixed. + - Line style for MultiCell() was fixed. + - WriteHTML() function was improved. + - CODE128C barcode was fixed (barcodes.php). + +4.0.005 (2008-07-11) + - Bug [2015715] "PHP Error/Warning" was fixed. + +4.0.004 (2008-07-09) + - HTML cell internal padding was fixed. + +4.0.003 (2008-07-08) + - Removed URL encoding when F option is selected on Output() function. + - fixed some minor bugs in html tables. + +4.0.002 (2008-07-07) + - Bug [2000861] was still unfixed and has been fixed. + +4.0.001 (2008-07-05) + - Bug [2000861] was fixed. + +4.0.000 (2008-07-03) + - THIS IS A MAIN RELEASE THAT INCLUDES SEVERAL NEW FEATURES AND BUGFIXES + - Signature fo SetTextColor() and SetFillColor() functions was changed (parameter $storeprev was removed). + - HTML support was completely rewritten and improved (see example 6). + - Alignments parameters were fixed. + - Functions GetArrStringWidth() and GetStringWidth() now include font parameters. + - Fonts support was improved. + - All core fonts were replaced and moved to fonts/ directory. + - The following functions were added: getMargins(), getFontSize(), getFontSizePt(). + - File config/tcpdf_config_old.php was renamed tcpdf_config_alt.php and updated. + - Multicell and WriteHTMLCell fill function was fixed. + - Several minor bugs were fixed. + - barcodes.php was updated. + - All examples were updated. + +------------------------------------------------------------ + +3.1.001 (2008-06-13) + - Bug [1992515] "K_PATH_FONTS default value wrong" was fixed. + - Vera font was removed, DejaVu font and Free fonts were updated. + - Image handling was improved. + - All examples were updated. + +3.1.000 (2008-06-11) + - setPDFVersion() was added to change the default PDF version (currently 1.7). + - setViewerPreferences() was added to control the way the document is to be presented on the screen or printed (see example 29). + - SetDisplayMode() signature was changed (new options were added). + - LinearGradient(), RadialGradient(), CoonsPatchMesh() functions were added to print various color gradients (see example 30). + - PieSector() function was added to render render pie charts (see example 31). + - ImageEps() was added to display EPS and AI images with limited support (see example 32). + - writeBarcode() function is now depracated, a new write1DBarcode() function was added. The barcode directory was removed and a new barcodes.php file was added. + - The new write1DBarcode() function support more barcodes and do not need the GD library (see example 027). All barcodes are directly written to PDF using graphic functions. + - HTML lists were improved and could be nested (you may now represent trees). + - AddFont() bug was fixed. + - _putfonts() bug was fixed. + - graphics functions were fixed. + - unicode_data.php file was updated (fixed). + - almohanad font was updated. + - example 18 was updated (Farsi and Arabic languages). + - source code cleanup. + - All examples were updated and new examples were added. + +3.0.015 (2008-06-06) + - AddPage() function signature is changed to include page format. + - example 28 was added to show page format changes. + - setPageUnit() function was added to change the page units of measure. + - setPageFormat() function was added to change the page format and orientation between pages. + - setPageOrientation() function was added to change the page orientation. + - Arabic font shaping was fixed for laa letter and square boxes (see the example 18). + +3.0.014 (2008-06-04) + - Arabic font shaping was fixed. + - setDefaultTableColumns() function was added. + - $cell_height_ratio variable was added. + - setCellHeightRatio() function was added to define the default height of cell repect font height. + +3.0.013 (2008-06-03) + - Multicell height parameter was fixed. + - Arabic font shaping was improved. + - unicode_data.php was updated. + +3.0.012 (2008-05-30) + - K_PATH_MAIN and K_PATH_URL constants are now automatically set on config file. + - DOCUMENT_ROOT constant was fixed for IIS Webserver (config file was updated). + - Arabic font shaping was improved. + - TranslateY() function was fixed (bug [1977962]). + - setVisibility() function was fixed. + - writeBarcode() function was fixed to scale using $xref parameter. + - All examples were updated. + +3.0.011 (2008-05-23) + - CMYK color support was added to all graphic functions. + - HTML table support was improved: + -- now it's possible to include additional html tags inside a cell; + -- colspan attribute was added. + - example 006 was updated. + +3.0.010 (2008-05-21) + - fixed $laa_array inclusion on utf8Bidi() function. + +3.0.009 (2008-05-20) + - unicode_data.php was updated. + - Arabic laa letter problem was fixed. + +3.0.008 (2008-05-12) + - Arabic support was fixed and improved (unicode_data.php was updated). + - Polycurve() function was added to draw a poly-Bezier curve. + - list items alignment was fixed. + - example 6 was updated. + +3.0.007 (2008-05-06) + - Arabic support was fixed and improved. + - AlMohanad (arabic) font was added. + - C128 barcode bugs were fixed. + +3.0.006 (2008-04-21) + - Condition to check negative width values was added. + +3.0.005 (2008-04-18) + - back-Slash character escape was fixed on writeHTML() function. + - Exampe 6 was updated. + +3.0.004 (2008-04-11) + - Bug [1939304] (Right to Left Issue) was fixed. + +3.0.003 (2008-04-07) + - Bug [1934523](Words between HTML tags in cell not kept on one line) was fixed. + - "face" attribute of "font" tag is now fully supported. + +3.0.002 (2008-04-01) + - Write() functions now return the number of cells and not the number of lines. + - TCPDF is released under LGPL 2.1, or any later version. + +3.0.001 (2008-05-28) + - _legacyparsejpeg() and _legacyparsepng() were renamed _parsejpeg() and _parsepng(). + - function writeBarcode() was fixed. + - all examples were updated. + - example 27 was added to show various barcodes. + +3.0.000 (2008-03-27) + - private function pixelsToMillimeters() was changed to public function pixelsToUnits() to fix html image size bug. + - Image-related functions were rewritten. + - resize parameter was added to Image() signature to reduce the image size and fit width and height (see example 9). + - TCPDF now supports all images supported by GD library: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM. + - CMYK support was added to SetDrawColor(), SetFillColor(), SetTextColor() (see example 22). + - Page Groups were added (see example 23). + - setVisibility() function was added to restrict the rendering of some elements to screen or printout (see example 24). + - All private variables and functions were changed to protected. + - setAlpha() function was added to give transparency support for all objects (see example 25). + - Clipping and stroke modes were added to Text() function (see example 26). + - All examples were moved to "examples" directory. + - function setJPEGQuality() was added to set the JPEG image comrpession (see example 9). + +2.9.000 (2008-03-26) + - htmlcolors.php file was added to include html colors. + - Support for HTML color names and three-digit hexadecimal color codes was added. + - private function convertColorHexToDec() was renamed convertHTMLColorToDec(). + - color and bgcolor attributes are now supported on all HTML tags (color nesting is also supported). + - Write() function were fixed. + - example_006.php was updated. + - private function setUserRights() was added to release user rights on Acrobat Reader (this allows to display forms, see example 14) + +2.8.000 (2008-03-20) + - Private variables were changed to protected. + - Function Write() was fixed and improved. + - Support for dl, dt, dd, del HTML tags was introduced. + - Line-trought mode was added for HTML and text. + - Text vertical alignment on cells were fixed. + - Examples were updated to reflect changes. + +2.7.002 (2008-03-13) + - Bug "[1912142] Encrypted PDF created/modified date" was fixed. + +2.7.001 (2008-03-10) + - Cell justification was fixed for non-unicode mode. + +2.7.000 (2008-03-09) + - Cell() stretching mode 4 (forced character spacing) was fixed. + - writeHTMLCell() now uses Multicell() to write. + - Multicell() has a new parameter $ishtml to act as writeHTMLCell(). + - Write() speed was improved for non-arabic strings. + - Example n. 20 was changed. + +2.6.000 (2008-03-07) + - various alignments bugs were fixed. + +2.5.000 (2008-03-07) + - Several bugs were fixed. + - example_019.php was added to test non-unicode mode using old fonts. + +2.4.000 (2008-03-06) + - RTL support was deeply improved. + - GetStringWidth() was fixed to support RTL languages. + - Text() RTL alignment was fixed. + - Some functions were added: GetArrStringWidth(), GetCharWidth(), uniord(), utf8Bidi(). + - example_018.php was added and test_unicode.php was removed. + +2.3.000 (2008-03-05) + - MultiCell() signature is changed. Now support multiple columns across pages (see example_017). + - Write() signature is changed. Now support the cell mode to be used with MultiCell. + - Header() and Footer() were changed. + - The following functions were added: UTF8ArrSubString() and unichr(). + - Examples were updated to reflect last changes. + +2.2.004 (2008-03-04) + - Several examples were added. + - AddPage() Header() and Footer() were fixed. + - Documentation is now available on http://www.tcpdf.org + +2.2.003 (2008-03-03) + - [1894853] Performance of MultiCell() was improved. + - RadioButton and ListBox functions were added. + - javascript form functions were rewritten and properties names are changed. The properties function supported by form fields are listed on Possible values are listed on http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf. + +2.2.002 (2008-02-28) + - [1900495] html images path was fixed. + - Legacy image functions were reintroduced to allow PNG and JPEG support without GD library. + +2.2.001 (2008-02-16) + - The bug "[1894700] bug with replace relative path" was fixed + - Justification was fixed + +2.2.000 (2008-02-12) + - fixed javascript bug introduced with latest release + +2.1.002 (2008-02-12) + - Justify function was fixed on PHP4 version. + - Bookmank function was added ([1578250] Table of contents). + - Javascript and Form fields support was added ([1796359] Form fields). + +2.1.001 (2008-02-10) + - The bug "[1885776] Race Condition in function justitfy" was fixed. + - The bug "[1890217] xpdf complains that pdf is incorrect" was fixed. + +2.1.000 (2008-01-07) + - FPDF_FONTPATH constant was changed to K_PATH_FONTS on config file + - Bidirectional Algorithm to correctly reverse bidirectional languages was added. + - SetLeftMargin, SetTopMargin, SetRightMargin functions were fixed. + - SetCellPadding function was added. + - writeHTML was updated with new parameters. + - Text function was fixed. + - MultiCell function was fixed, now works also across multiple pages. + - Line width was fixed on Header and Footer functions and <hr> tag. + - "GetImageSize" was renamed "getimagesize". + - Document version was changed from 1.3 to 1.5. + - _begindoc() function was fixed. + - ChangeDate was fixed and ModDate was added. + - The following functions were added: + setPage() : Move pointer to the specified document page. + getPage() : Get current document page number. + lastpage() : Reset pointer to the last document page. + getNumPages() : Get the total number of inserted pages. + GetNumChars() : count the number of (UTF-8) characters in a string. + - $stretch parameter was added to Cell() function to fit text on cell: + 0 = disabled + 1 = horizontal scaling only if necessary + 2 = forced horizontal scaling + 3 = character spacing only if necessary + 4 = forced character spacing + - Line function was fixed for RTL. + - Graphic transformation functions were added [1811158]: + StartTransform() + StopTransform() + ScaleX() + ScaleY() + ScaleXY() + Scale() + MirrorH() + MirrorV() + MirrorP() + MirrorL() + TranslateX() + TranslateY() + Translate() + Rotate() + SkewX() + SkewY() + Skew() + - Graphic function were added/updated [1688549]: + SetLineStyle() + _outPoint() + _outLine() + _outRect() + _outCurve() + Line() + Rect() + Curve + Ellipse + Circle + Polygon + RegularPolygon + +2.0.000 (2008-01-04) + - RTL (Right-To-Left) languages support was added. Language direction is set using the $l['a_meta_dir'] setting on /configure/language/xxx.php language files. + - setRTL($enable) method was added to manually enable/disable the RTL text direction. + - The attribute "dir" was added to support custom text direction on HTML tags. Possible values are: ltr - for Left-To-Right and RTL for Right-To-Left. + - RC4 40bit encryption was added. Check the SetProtection method. + - [1815213] Improved image support for GIF, JPEG, PNG formats. + - [1800094] Attribute "value" was added to ordered list items <li>. + - Image function now has a new "align" parameter that indicates the alignment of the pointer next to image insertion and relative to image height. The value can be: + T: top-right for LTR or top-left for RTL + M: middle-right for LTR or middle-left for RTL + B: bottom-right for LTR or bottom-left for RTL + N: next line + - Attribute "align" was added to <img> html tag to set the above image "align" parameter. Possible values are: + top: top-right for LTR or top-left for RTL + middle: middle-right for LTR or middle-left for RTL + bottom: bottom-right for LTR or bottom-left for RTL + - [1798103] newline was added after </ul>, </ol> and </p> tages. + - [1816393] Documentation was updated. + - 'ln' parameter was fixed on writeHTMLCell. Now it's possible to print two or more columns across several pages; + - The method lastPage() was added to move the pointer on the last page; + +------------------------------------------------------------ + +1.53.0.TC034 (2007-07-30) + - fixed htmlentities conversion. + - MultiCell() function returns the number of cells. + +1.53.0.TC033 (2007-07-30) + - fixed bug 1762550: case sensitive for font files + - NOTE: all fonts files names must be in lowercase! + +1.53.0.TC032 (2007-07-27) + - setLastH method was added to resolve bug 1689071. + - all fonts names were converted in lowercase (bug 1713005). + - bug 1740954 was fixed. + - justification was added as Cell option. + +1.53.0.TC031 (2007-03-20) + - ToUnicode CMap were added on _puttruetypeunicode function. Now you may search and copy unicode text. + +1.53.0.TC030 (2007-03-06) + - fixed bug on PHP4 version. + +1.53.0.TC029 (2007-03-06) + - DejaVu Fonts were added. + +1.53.0.TC028 (2007-03-03) + - MultiCell function signature were changed: the $ln parameter were added. Check documentation for further information. + - Greek language were added on example sentences. + - setPrintHeader() and setPrintFooter() functions were added to enable or disable page header and footer. + +1.53.0.TC027 (2006-12-14) + - $attr['face'] bug were fixed. + - K_TCPDF_EXTERNAL_CONFIG control where introduced on /config/tcpdf_config.php to use external configuration files. + +1.53.0.TC026 (2006-10-28) + - writeHTML function call were fixed on examples. + +1.53.0.TC025 (2006-10-27) + - Bugs item #1421290 were fixed (0D - 0A substitution in some characters) + - Bugs item #1573174 were fixed (MultiCell documentation) + +1.53.0.TC024 (2006-09-26) + - getPageHeight() function were fixed (bug 1543476). + - fixed missing breaks on closedHTMLTagHandler function (bug 1535263). + - fixed extra spaces on Write function (bug 1535262). + +1.53.0.TC023 (2006-08-04) + - paths to barcode directory were fixed. + - documentation were updated. + +1.53.0.TC022 (2006-07-16) + - fixed bug: [ 1516858 ] Probs with PHP autoloader and class_exists() + +1.53.0.TC021 (2006-07-01) + - HTML attributes with whitespaces are now supported (thanks to Nelson Benitez for his support) + +1.53.0.TC020 (2006-06-23) + - code cleanup + +1.53.0.TC019 (2006-05-21) + - fixed <strong> and <em> closing tags + +1.53.0.TC018 (2006-05-18) + - fixed font names bug + +1.53.0.TC017 (2006-05-18) + - the TTF2UFM utility to convert True Type fonts for TCPDF were included on fonts folder. + - new free unicode fonts were included on /fonts/freefont. + - test_unicode.php example were exended. + - parameter $fill were added on Write, writeHTML and writeHTMLCell functions. + - documentation were updated. + +1.53.0.TC016 (2006-03-09) + - fixed closing <strong> tag on html parser. + +1.53.0.TC016 (2005-08-28) + - fpdf.php and tcpdf.php files were joined in one single class (you can still extend TCPDF with your own class). + - fixed problem when mb_internal_encoding is set. + +1.53.0.TC014 (2005-05-29) + - fixed WriteHTMLCell new page issue. + +1.53.0.TC013 (2005-05-29) + - fixed WriteHTMLCell across pages. + +1.53.0.TC012 (2005-05-29) + - font color attribute bug were fixed. + +1.53.0.TC011 (2005-03-31) + - SetFont function were fixed (thank Sjaak Lauwers for bug notice). + +1.53.0.TC010 (2005-03-22) + - the html functions were improved (thanks to Manfred Vervuert for bug reporting). + +1.53.0.TC009 (2005-03-19) + - a wrong reference to convertColorHexToDec were fixed. + +1.53.0.TC008 (2005-02-07) + - removed some extra bytes from PHP files. + +1.53.0.TC007 (2005-01-08) + - fill attribute were removed from writeHTMLCell method. + +1.53.0.TC006 (2005-01-08) + - the documentation were updated. + +1.53.0.TC005 (2005-01-05) + - Steven Wittens's unicode methods were removed. + - All unicode methods were rewritten from scratch. + - TCPDF is now licensed as LGPL. + +1.53.0.TC004 (2005-01-04) + - this changelog were added. + - removed commercial fonts for licensing issue. + - Bitstream Vera Fonts were added (http://www.bitstream.com/font_rendering/products/dev_fonts/vera.html). + - Now the AddFont and SetFont functions returns the basic font if the styled version do not exist. + +EOF -------------------------------------------------------- diff --git a/tcpdf/LICENSE.TXT b/tcpdf/LICENSE.TXT new file mode 100644 index 0000000..daf21f7 --- /dev/null +++ b/tcpdf/LICENSE.TXT @@ -0,0 +1,858 @@ +********************************************************************** +* TCPDF LICENSE +********************************************************************** + + TCPDF is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + +********************************************************************** +********************************************************************** + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + +********************************************************************** +********************************************************************** + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. + +********************************************************************** +********************************************************************** diff --git a/tcpdf/README.TXT b/tcpdf/README.TXT new file mode 100644 index 0000000..2061fa7 --- /dev/null +++ b/tcpdf/README.TXT @@ -0,0 +1,117 @@ +TCPDF - README +============================================================ + +I WISH TO IMPROVE AND EXPAND TCPDF BUT I NEED YOUR SUPPORT. +PLEASE MAKE A DONATION: +http://sourceforge.net/donate/index.php?group_id=128076 +or via PayPal at paypal@tecnick.com + +------------------------------------------------------------ + +Name: TCPDF +Version: 6.2.12 +Release date: 2015-09-12 +Author: Nicola Asuni + +Copyright (c) 2002-2015: + Nicola Asuni + Tecnick.com LTD + www.tecnick.com + +URLs: + http://www.tcpdf.org + http://www.sourceforge.net/projects/tcpdf + https://github.com/tecnickcom/TCPDF + +Description: + TCPDF is a PHP class for generating PDF files on-the-fly without requiring external extensions. + This library includes also a class to extract data from existing PDF documents and + classes to generate 1D and 2D barcodes in various formats. + +Main Features: + * no external libraries are required for the basic functions; + * all standard page formats, custom page formats, custom margins and units of measure; + * UTF-8 Unicode and Right-To-Left languages; + * TrueTypeUnicode, OpenTypeUnicode v1, TrueType, OpenType v1, Type1 and CID-0 fonts; + * font subsetting; + * methods to publish some XHTML + CSS code, Javascript and Forms; + * images, graphic (geometric figures) and transformation methods; + * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/script/formats.php) + * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417; + * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies; + * automatic page header and footer management; + * document encryption up to 256 bit and digital signature certifications; + * transactions to UNDO commands; + * PDF annotations, including links, text and file attachments; + * text rendering modes (fill, stroke and clipping); + * multiple columns mode; + * no-write page regions; + * bookmarks, named destinations and table of content; + * text hyphenation; + * text stretching and spacing (tracking); + * automatic page break, line break and text alignments including justification; + * automatic page numbering and page groups; + * move and delete pages; + * page compression (requires php-zlib extension); + * XOBject Templates; + * Layers and object visibility. + * PDF/A-1b support. + +Installation (full instructions on http: www.tcpdf.org): + 1. copy the folder on your Web server + 2. set your installation path and other parameters on the config/tcpdf_config.php + 3. call the examples/example_001.php page with your browser to see an example + +Source Code Documentation: + http://www.tcpdf.org + +Additional Documentation: + http://www.tcpdf.org + +License: + Copyright (C) 2002-2014 Nicola Asuni - Tecnick.com LTD + + TCPDF is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + TCPDF is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the License + along with TCPDF. If not, see + <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. + + See LICENSE.TXT file for more information. + +Third party fonts: + + This library may include third party font files released with different licenses. + + All the PHP files on the fonts directory are subject to the general TCPDF license (GNU-LGPLv3), + they do not contain any binary data but just a description of the general properties of a particular font. + These files can be also generated on the fly using the font utilities and TCPDF methods. + + All the original binary TTF font files have been renamed for compatibility with TCPDF and compressed using the gzcompress PHP function that uses the ZLIB data format (.z files). + + The binary files (.z) that begins with the prefix "free" have been extracted from the GNU FreeFont collection (GNU-GPLv3). + The binary files (.z) that begins with the prefix "pdfa" have been derived from the GNU FreeFont, so they are subject to the same license. + For the details of Copyright, License and other information, please check the files inside the directory fonts/freefont-20120503 + Link : http://www.gnu.org/software/freefont/ + + The binary files (.z) that begins with the prefix "dejavu" have been extracted from the DejaVu fonts 2.33 (Bitstream) collection. + For the details of Copyright, License and other information, please check the files inside the directory fonts/dejavu-fonts-ttf-2.33 + Link : http://dejavu-fonts.org + + The binary files (.z) that begins with the prefix "ae" have been extracted from the Arabeyes.org collection (GNU-GPLv2). + Link : http://projects.arabeyes.org/ + +ICC profile: + TCPDF includes the sRGB.icc profile from the icc-profiles-free Debian package: + https://packages.debian.org/source/stable/icc-profiles-free + + +============================================================ diff --git a/tcpdf/composer.json b/tcpdf/composer.json new file mode 100644 index 0000000..beab509 --- /dev/null +++ b/tcpdf/composer.json @@ -0,0 +1,40 @@ +{ + "name": "tecnickcom/tcpdf", + "version": "6.2.12", + "homepage": "http://www.tcpdf.org/", + "type": "library", + "description": "TCPDF is a PHP class for generating PDF documents and barcodes.", + "keywords": ["PDF","tcpdf","PDFD32000-2008","qrcode","datamatrix","pdf417","barcodes"], + "license": "LGPLv3", + "authors": [ + { + "name": "Nicola Asuni", + "email": "info@tecnick.com", + "homepage": "http://nicolaasuni.tecnick.com" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "classmap": [ + "fonts", + "config", + "include", + "tcpdf.php", + "tcpdf_parser.php", + "tcpdf_import.php", + "tcpdf_barcodes_1d.php", + "tcpdf_barcodes_2d.php", + "include/tcpdf_colors.php", + "include/tcpdf_filters.php", + "include/tcpdf_font_data.php", + "include/tcpdf_fonts.php", + "include/tcpdf_images.php", + "include/tcpdf_static.php", + "include/barcodes/datamatrix.php", + "include/barcodes/pdf417.php", + "include/barcodes/qrcode.php" + ] + } +} diff --git a/tcpdf/config/tcpdf_config.php b/tcpdf/config/tcpdf_config.php new file mode 100644 index 0000000..92317b1 --- /dev/null +++ b/tcpdf/config/tcpdf_config.php @@ -0,0 +1,227 @@ +<?php +//============================================================+ +// File name : tcpdf_config.php +// Begin : 2004-06-11 +// Last Update : 2014-12-11 +// +// Description : Configuration file for TCPDF. +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2004-2014 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +//============================================================+ + +/** + * Configuration file for TCPDF. + * @author Nicola Asuni + * @package com.tecnick.tcpdf + * @version 4.9.005 + * @since 2004-10-27 + */ + +// IMPORTANT: +// If you define the constant K_TCPDF_EXTERNAL_CONFIG, all the following settings will be ignored. +// If you use the tcpdf_autoconfig.php, then you can overwrite some values here. + + +/** + * Installation path (/var/www/tcpdf/). + * By default it is automatically calculated but you can also set it as a fixed string to improve performances. + */ +//define ('K_PATH_MAIN', ''); + +/** + * URL path to tcpdf installation folder (http://localhost/tcpdf/). + * By default it is automatically set but you can also set it as a fixed string to improve performances. + */ +//define ('K_PATH_URL', ''); + +/** + * Path for PDF fonts. + * By default it is automatically set but you can also set it as a fixed string to improve performances. + */ +//define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/'); + +/** + * Default images directory. + * By default it is automatically set but you can also set it as a fixed string to improve performances. + */ +//define ('K_PATH_IMAGES', ''); + +/** + * Deafult image logo used be the default Header() method. + * Please set here your own logo or an empty string to disable it. + */ +//define ('PDF_HEADER_LOGO', ''); + +/** + * Header logo image width in user units. + */ +//define ('PDF_HEADER_LOGO_WIDTH', 0); + +/** + * Cache directory for temporary files (full path). + */ +//define ('K_PATH_CACHE', '/tmp/'); + +/** + * Generic name for a blank image. + */ +define ('K_BLANK_IMAGE', '_blank.png'); + +/** + * Page format. + */ +define ('PDF_PAGE_FORMAT', 'A4'); + +/** + * Page orientation (P=portrait, L=landscape). + */ +define ('PDF_PAGE_ORIENTATION', 'P'); + +/** + * Document creator. + */ +define ('PDF_CREATOR', 'TCPDF'); + +/** + * Document author. + */ +define ('PDF_AUTHOR', 'TCPDF'); + +/** + * Header title. + */ +define ('PDF_HEADER_TITLE', 'TCPDF Example'); + +/** + * Header description string. + */ +define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org"); + +/** + * Document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch]. + */ +define ('PDF_UNIT', 'mm'); + +/** + * Header margin. + */ +define ('PDF_MARGIN_HEADER', 5); + +/** + * Footer margin. + */ +define ('PDF_MARGIN_FOOTER', 10); + +/** + * Top margin. + */ +define ('PDF_MARGIN_TOP', 27); + +/** + * Bottom margin. + */ +define ('PDF_MARGIN_BOTTOM', 25); + +/** + * Left margin. + */ +define ('PDF_MARGIN_LEFT', 15); + +/** + * Right margin. + */ +define ('PDF_MARGIN_RIGHT', 15); + +/** + * Default main font name. + */ +define ('PDF_FONT_NAME_MAIN', 'helvetica'); + +/** + * Default main font size. + */ +define ('PDF_FONT_SIZE_MAIN', 10); + +/** + * Default data font name. + */ +define ('PDF_FONT_NAME_DATA', 'helvetica'); + +/** + * Default data font size. + */ +define ('PDF_FONT_SIZE_DATA', 8); + +/** + * Default monospaced font name. + */ +define ('PDF_FONT_MONOSPACED', 'courier'); + +/** + * Ratio used to adjust the conversion of pixels to user units. + */ +define ('PDF_IMAGE_SCALE_RATIO', 1.25); + +/** + * Magnification factor for titles. + */ +define('HEAD_MAGNIFICATION', 1.1); + +/** + * Height of cell respect font height. + */ +define('K_CELL_HEIGHT_RATIO', 1.25); + +/** + * Title magnification respect main font size. + */ +define('K_TITLE_MAGNIFICATION', 1.3); + +/** + * Reduction factor for small font. + */ +define('K_SMALL_RATIO', 2/3); + +/** + * Set to true to enable the special procedure used to avoid the overlappind of symbols on Thai language. + */ +define('K_THAI_TOPCHARS', true); + +/** + * If true allows to call TCPDF methods using HTML syntax + * IMPORTANT: For security reason, disable this feature if you are printing user HTML content. + */ +define('K_TCPDF_CALLS_IN_HTML', false); + +/** + * If true and PHP version is greater than 5, then the Error() method throw new exception instead of terminating the execution. + */ +define('K_TCPDF_THROW_EXCEPTION_ERROR', false); + +/** + * Default timezone for datetime functions + */ +define('K_TIMEZONE', 'UTC'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_1d_html.php b/tcpdf/examples/barcodes/example_1d_html.php new file mode 100644 index 0000000..67d22e7 --- /dev/null +++ b/tcpdf/examples/barcodes/example_1d_html.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_1d_html.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.000 + */ + +// include 1D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); + +// output the barcode as HTML object +echo $barcodeobj->getBarcodeHTML(2, 30, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_1d_png.php b/tcpdf/examples/barcodes/example_1d_png.php new file mode 100644 index 0000000..9e44909 --- /dev/null +++ b/tcpdf/examples/barcodes/example_1d_png.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_1d_png.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.000 + */ + +// include 1D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); + +// output the barcode as PNG image +$barcodeobj->getBarcodePNG(2, 30, array(0,0,0)); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_1d_svg.php b/tcpdf/examples/barcodes/example_1d_svg.php new file mode 100644 index 0000000..f7b585a --- /dev/null +++ b/tcpdf/examples/barcodes/example_1d_svg.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_1d_svg.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.000 + */ + +// include 1D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); + +// output the barcode as SVG image +$barcodeobj->getBarcodeSVG(2, 30, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_1d_svgi.php b/tcpdf/examples/barcodes/example_1d_svgi.php new file mode 100644 index 0000000..a74a304 --- /dev/null +++ b/tcpdf/examples/barcodes/example_1d_svgi.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_1d_svgi.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.000 + */ + +// include 1D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); + +// output the barcode as SVG inline code +echo $barcodeobj->getBarcodeSVGcode(2, 40, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_datamatrix_html.php b/tcpdf/examples/barcodes/example_2d_datamatrix_html.php new file mode 100644 index 0000000..dc7bab3 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_datamatrix_html.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_html.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); + +// output the barcode as HTML object +echo $barcodeobj->getBarcodeHTML(6, 6, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_datamatrix_png.php b/tcpdf/examples/barcodes/example_2d_datamatrix_png.php new file mode 100644 index 0000000..87b7a33 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_datamatrix_png.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_png.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); + +// output the barcode as PNG image +$barcodeobj->getBarcodePNG(6, 6, array(0,0,0)); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_datamatrix_svg.php b/tcpdf/examples/barcodes/example_2d_datamatrix_svg.php new file mode 100644 index 0000000..523ebfa --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_datamatrix_svg.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_svg.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); + +// output the barcode as SVG image +$barcodeobj->getBarcodeSVG(6, 6, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_datamatrix_svgi.php b/tcpdf/examples/barcodes/example_2d_datamatrix_svgi.php new file mode 100644 index 0000000..4470981 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_datamatrix_svgi.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_svgi.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); + +// output the barcode as SVG inline code +echo $barcodeobj->getBarcodeSVGcode(6, 6, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_pdf417_html.php b/tcpdf/examples/barcodes/example_2d_pdf417_html.php new file mode 100644 index 0000000..4c4e9ee --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_pdf417_html.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_html.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); + +// output the barcode as HTML object +echo $barcodeobj->getBarcodeHTML(4, 4, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_pdf417_png.php b/tcpdf/examples/barcodes/example_2d_pdf417_png.php new file mode 100644 index 0000000..df939bb --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_pdf417_png.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_png.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); + +// output the barcode as PNG image +$barcodeobj->getBarcodePNG(4, 4, array(0,0,0)); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_pdf417_svg.php b/tcpdf/examples/barcodes/example_2d_pdf417_svg.php new file mode 100644 index 0000000..fb29ea2 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_pdf417_svg.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_svg.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); + +// output the barcode as SVG image +$barcodeobj->getBarcodeSVG(4, 4, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_pdf417_svgi.php b/tcpdf/examples/barcodes/example_2d_pdf417_svgi.php new file mode 100644 index 0000000..94e1c71 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_pdf417_svgi.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_svgi.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); + +// output the barcode as SVG inline code +echo $barcodeobj->getBarcodeSVGcode(4, 4, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_qrcode_html.php b/tcpdf/examples/barcodes/example_2d_qrcode_html.php new file mode 100644 index 0000000..ac828f7 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_qrcode_html.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_html.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); + +// output the barcode as HTML object +echo $barcodeobj->getBarcodeHTML(6, 6, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_qrcode_png.php b/tcpdf/examples/barcodes/example_2d_qrcode_png.php new file mode 100644 index 0000000..71f8710 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_qrcode_png.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_png.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); + +// output the barcode as PNG image +$barcodeobj->getBarcodePNG(6, 6, array(0,0,0)); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_qrcode_svg.php b/tcpdf/examples/barcodes/example_2d_qrcode_svg.php new file mode 100644 index 0000000..1baa43d --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_qrcode_svg.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_svg.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); + +// output the barcode as SVG image +$barcodeobj->getBarcodeSVG(6, 6, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/example_2d_qrcode_svgi.php b/tcpdf/examples/barcodes/example_2d_qrcode_svgi.php new file mode 100644 index 0000000..99d6590 --- /dev/null +++ b/tcpdf/examples/barcodes/example_2d_qrcode_svgi.php @@ -0,0 +1,53 @@ +<?php +//============================================================+ +// File name : example_2d_svgi.php +// Version : 1.0.000 +// Begin : 2011-07-21 +// Last Update : 2013-03-19 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Example for tcpdf_barcodes_2d.php class +// +//============================================================+ + +/** + * @file + * Example for tcpdf_barcodes_2d.php class + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.009 + */ + +// include 2D barcode class (search for installation path) +require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); + +// set the barcode content and type +$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); + +// output the barcode as SVG inline code +echo $barcodeobj->getBarcodeSVGcode(6, 6, 'black'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/tcpdf_barcodes_1d_include.php b/tcpdf/examples/barcodes/tcpdf_barcodes_1d_include.php new file mode 100644 index 0000000..a0bde57 --- /dev/null +++ b/tcpdf/examples/barcodes/tcpdf_barcodes_1d_include.php @@ -0,0 +1,37 @@ +<?php +//============================================================+ +// File name : tcpdf_barcodes_1d_include.php +// Begin : 2013-05-19 +// Last Update : 2013-05-19 +// +// Description : Search and include the TCPDF Barcode 1D class. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Search and include the TCPDF Barcode 1D class. + * @package com.tecnick.tcpdf + * @abstract TCPDF - Include the main class. + * @author Nicola Asuni + * @since 2013-05-19 + */ + +// Include the TCPDF 1D barcode class (search the class on the following directories). +$tcpdf_barcodes_1d_include_dirs = array(realpath('../../tcpdf_barcodes_1d.php'), '/usr/share/php/tcpdf/tcpdf_barcodes_1d.php', '/usr/share/tcpdf/tcpdf_barcodes_1d.php', '/usr/share/php-tcpdf/tcpdf_barcodes_1d.php', '/var/www/tcpdf/tcpdf_barcodes_1d.php', '/var/www/html/tcpdf/tcpdf_barcodes_1d.php', '/usr/local/apache2/htdocs/tcpdf/tcpdf_barcodes_1d.php'); +foreach ($tcpdf_barcodes_1d_include_dirs as $tcpdf_barcodes_1d_include_path) { + if (@file_exists($tcpdf_barcodes_1d_include_path)) { + require_once($tcpdf_barcodes_1d_include_path); + break; + } +} + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/barcodes/tcpdf_barcodes_2d_include.php b/tcpdf/examples/barcodes/tcpdf_barcodes_2d_include.php new file mode 100644 index 0000000..61c4a8b --- /dev/null +++ b/tcpdf/examples/barcodes/tcpdf_barcodes_2d_include.php @@ -0,0 +1,37 @@ +<?php +//============================================================+ +// File name : tcpdf_barcodes_2d_include.php +// Begin : 2013-05-19 +// Last Update : 2013-05-19 +// +// Description : Search and include the TCPDF Barcode 1D class. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Search and include the TCPDF Barcode 2D class. + * @package com.tecnick.tcpdf + * @abstract TCPDF - Include the main class. + * @author Nicola Asuni + * @since 2013-05-19 + */ + +// Include the TCPDF 2D barcode class (search the class on the following directories). +$tcpdf_barcodes_2d_include_dirs = array(realpath('../../tcpdf_barcodes_2d.php'), '/usr/share/php/tcpdf/tcpdf_barcodes_2d.php', '/usr/share/tcpdf/tcpdf_barcodes_2d.php', '/usr/share/php-tcpdf/tcpdf_barcodes_2d.php', '/var/www/tcpdf/tcpdf_barcodes_2d.php', '/var/www/html/tcpdf/tcpdf_barcodes_2d.php', '/usr/local/apache2/htdocs/tcpdf/tcpdf_barcodes_2d.php'); +foreach ($tcpdf_barcodes_2d_include_dirs as $tcpdf_barcodes_2d_include_path) { + if (@file_exists($tcpdf_barcodes_2d_include_path)) { + require_once($tcpdf_barcodes_2d_include_path); + break; + } +} + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/config/tcpdf_config_alt.php b/tcpdf/examples/config/tcpdf_config_alt.php new file mode 100644 index 0000000..d61b1ba --- /dev/null +++ b/tcpdf/examples/config/tcpdf_config_alt.php @@ -0,0 +1,222 @@ +<?php +//============================================================+ +// File name : tcpdf_config.php +// Begin : 2004-06-11 +// Last Update : 2013-05-16 +// +// Description : Example of alternative configuration file for TCPDF. +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2004-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +//============================================================+ + +/** + * Example of alternative configuration file for TCPDF. + * @author Nicola Asuni + * @package com.tecnick.tcpdf + * @version 4.9.005 + * @since 2004-10-27 + */ + +/** + * Define the following constant to ignore the default configuration file. + */ +define ('K_TCPDF_EXTERNAL_CONFIG', true); + +/** + * Installation path (/var/www/tcpdf/). + * By default it is automatically calculated but you can also set it as a fixed string to improve performances. + */ +//define ('K_PATH_MAIN', ''); + +/** + * URL path to tcpdf installation folder (http://localhost/tcpdf/). + * By default it is automatically set but you can also set it as a fixed string to improve performances. + */ +//define ('K_PATH_URL', ''); + +/** + * Path for PDF fonts. + * By default it is automatically set but you can also set it as a fixed string to improve performances. + */ +//define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/'); + +/** + * Default images directory. + * By default it is automatically set but you can also set it as a fixed string to improve performances. + */ +define ('K_PATH_IMAGES', dirname(__FILE__).'/../images/'); + +/** + * Deafult image logo used be the default Header() method. + * Please set here your own logo or an empty string to disable it. + */ +define ('PDF_HEADER_LOGO', 'tcpdf_logo.jpg'); + +/** + * Header logo image width in user units. + */ +define ('PDF_HEADER_LOGO_WIDTH', 30); + +/** + * Cache directory for temporary files (full path). + */ +define ('K_PATH_CACHE', sys_get_temp_dir().'/'); + +/** + * Generic name for a blank image. + */ +define ('K_BLANK_IMAGE', '_blank.png'); + +/** + * Page format. + */ +define ('PDF_PAGE_FORMAT', 'A4'); + +/** + * Page orientation (P=portrait, L=landscape). + */ +define ('PDF_PAGE_ORIENTATION', 'P'); + +/** + * Document creator. + */ +define ('PDF_CREATOR', 'TCPDF'); + +/** + * Document author. + */ +define ('PDF_AUTHOR', 'TCPDF'); + +/** + * Header title. + */ +define ('PDF_HEADER_TITLE', 'TCPDF Example'); + +/** + * Header description string. + */ +define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org"); + +/** + * Document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch]. + */ +define ('PDF_UNIT', 'mm'); + +/** + * Header margin. + */ +define ('PDF_MARGIN_HEADER', 5); + +/** + * Footer margin. + */ +define ('PDF_MARGIN_FOOTER', 10); + +/** + * Top margin. + */ +define ('PDF_MARGIN_TOP', 27); + +/** + * Bottom margin. + */ +define ('PDF_MARGIN_BOTTOM', 25); + +/** + * Left margin. + */ +define ('PDF_MARGIN_LEFT', 15); + +/** + * Right margin. + */ +define ('PDF_MARGIN_RIGHT', 15); + +/** + * Default main font name. + */ +define ('PDF_FONT_NAME_MAIN', 'helvetica'); + +/** + * Default main font size. + */ +define ('PDF_FONT_SIZE_MAIN', 10); + +/** + * Default data font name. + */ +define ('PDF_FONT_NAME_DATA', 'helvetica'); + +/** + * Default data font size. + */ +define ('PDF_FONT_SIZE_DATA', 8); + +/** + * Default monospaced font name. + */ +define ('PDF_FONT_MONOSPACED', 'courier'); + +/** + * Ratio used to adjust the conversion of pixels to user units. + */ +define ('PDF_IMAGE_SCALE_RATIO', 1.25); + +/** + * Magnification factor for titles. + */ +define('HEAD_MAGNIFICATION', 1.1); + +/** + * Height of cell respect font height. + */ +define('K_CELL_HEIGHT_RATIO', 1.25); + +/** + * Title magnification respect main font size. + */ +define('K_TITLE_MAGNIFICATION', 1.3); + +/** + * Reduction factor for small font. + */ +define('K_SMALL_RATIO', 2/3); + +/** + * Set to true to enable the special procedure used to avoid the overlappind of symbols on Thai language. + */ +define('K_THAI_TOPCHARS', true); + +/** + * If true allows to call TCPDF methods using HTML syntax + * IMPORTANT: For security reason, disable this feature if you are printing user HTML content. + */ +define('K_TCPDF_CALLS_IN_HTML', true); + +/** + * If true and PHP version is greater than 5, then the Error() method throw new exception instead of terminating the execution. + */ +define('K_TCPDF_THROW_EXCEPTION_ERROR', false); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/data/cert/tcpdf.crt b/tcpdf/examples/data/cert/tcpdf.crt new file mode 100644 index 0000000..f049139 --- /dev/null +++ b/tcpdf/examples/data/cert/tcpdf.crt @@ -0,0 +1,40 @@ +Bag Attributes + localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C +subject=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT +issuer=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT +-----BEGIN CERTIFICATE----- +MIIC1TCCAj6gAwIBAgIKkehOL/XGkB5cjjANBgkqhkiG9w0BAQUFADBhMRMwEQYD +VQQDEwpUQ1BERiBERU1PMQ4wDAYDVQQKEwVUQ1BERjENMAsGA1UECxMEREVNTzEe +MBwGCSqGSIb3DQEJARYPeW91QGV4YW1wbGUuY29tMQswCQYDVQQGEwJJVDAeFw0w +OTA4MjExMjU0NDhaFw0xNDA4MjExMjU0NDhaMGExEzARBgNVBAMTClRDUERGIERF +TU8xDjAMBgNVBAoTBVRDUERGMQ0wCwYDVQQLEwRERU1PMR4wHAYJKoZIhvcNAQkB +Fg95b3VAZXhhbXBsZS5jb20xCzAJBgNVBAYTAklUMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDAqIL0uGKmTR98Lxx2vEEE1OGKkMXFo0JViitALe7Onhxxqx0H +XMUDKF5mvEVu1rcvh7/oAnAfrCuEpL/up3u1mQCgBE7WXBnFFE/AE3jCksh9OkS0 +Z0Xj9woN5bzxRDsGoPiOu/4xzk5qSEXt8jf2Ep90QuNkqLIRT4swAzpDbwIDAQAB +o4GTMIGQMDcGA1UdEgQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwGA1UECgwFVENQ +REagCwYDVQQLDARERU1PMDcGA1UdEQQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwG +A1UECgwFVENQREagCwYDVQQLDARERU1PMA8GCSqGSIb3LwEBCgQCBQAwCwYDVR0P +BAQDAgSQMA0GCSqGSIb3DQEBBQUAA4GBAEhTQfqX3ZNdHmpTLDbIj22RHXii2roE +OavCbu9WsHoWpva0qSd+yIoD594VHvYAd29sfzDfiN+7W0aiZfDhq5jpaSQMVlN8 +RGYMupbHY/+a9Gz1wqxnR84mlTtIkZVRYAhsfPwy6M1BEjdMqfdh9h40JIdkdjtb +8faTCfXPePWQ +-----END CERTIFICATE----- +Bag Attributes + localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C +Key Attributes: <No Attributes> +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDAqIL0uGKmTR98Lxx2vEEE1OGKkMXFo0JViitALe7Onhxxqx0H +XMUDKF5mvEVu1rcvh7/oAnAfrCuEpL/up3u1mQCgBE7WXBnFFE/AE3jCksh9OkS0 +Z0Xj9woN5bzxRDsGoPiOu/4xzk5qSEXt8jf2Ep90QuNkqLIRT4swAzpDbwIDAQAB +AoGAXc+wNMmz/5Z+RlIKYia44klmqbplEx+0JULqXI4BQsrqvs67i+I4bJkznoL+ +rEIRYSuQ3sCRKFsFtckjTGpxadnxkB+uwGKc6pZChv99BFX6HFR4hgBlT/BBRAQA +hMDlM2JIRr4S4SMVXR7MHwGMUf9mUeanGLR3ZWtU3aXJrIECQQD7OaYUVYNEEnM9 +uXyjm22CuHyqyEf5gb13sK0uQty67547yJTMUQZd/sQc9KGwhzBbhrob2LO2jAhh +S+f+NSRnAkEAxFHm3fMI5RgXmswxlGm4QW07a/Ueo7ZJG6xjTkFXluJhd+XHswRD +dQIO3zG9nGjNUoeMrPhXhPvKqFc2F9RDuQJAQBEGin74N77gxqfr4ik79y8nE8J5 +oGZ2s/RJZdfFRKLg3mwbjjNHhWb4Ck5UgZkoOt8TzRApXG8/n9hktE5HFwJBALur +M5AueO1Pl5kB489lNJ9OxUQRYUXMxpxuscuoCQwSwmv0O2+0/qtG2WKhUQnI4aYo +L+FV0YwtivBb1jj3T/kCQQDIWOxq8eRowdaMzvJpRUHFgMcf1AVZExKyrugwYOWd +KNsDxC4KaQOsPt8iT/Ulo4g/MJC0HolCOhWibKmR9Ayl +-----END RSA PRIVATE KEY----- diff --git a/tcpdf/examples/data/cert/tcpdf.fdf b/tcpdf/examples/data/cert/tcpdf.fdf new file mode 100644 index 0000000..a8f7c35 Binary files /dev/null and b/tcpdf/examples/data/cert/tcpdf.fdf differ diff --git a/tcpdf/examples/data/cert/tcpdf.p12 b/tcpdf/examples/data/cert/tcpdf.p12 new file mode 100644 index 0000000..611f0df Binary files /dev/null and b/tcpdf/examples/data/cert/tcpdf.p12 differ diff --git a/tcpdf/examples/data/chapter_demo_1.txt b/tcpdf/examples/data/chapter_demo_1.txt new file mode 100644 index 0000000..4025de9 --- /dev/null +++ b/tcpdf/examples/data/chapter_demo_1.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. + +Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. + +Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. + +Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. + +Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. + +Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. + +Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. + +Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. + +Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat. diff --git a/tcpdf/examples/data/chapter_demo_2.txt b/tcpdf/examples/data/chapter_demo_2.txt new file mode 100644 index 0000000..a0210ff --- /dev/null +++ b/tcpdf/examples/data/chapter_demo_2.txt @@ -0,0 +1,23 @@ +<p><strong>Lorem ipsum</strong> dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.</p> + +<img src="images/image_demo.jpg" width="54mm" height="80mm" /> + +<p style="background-color:yellow;"><i>Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.</i></p> + +<p>Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu.</p> + +<p style="color:navy;">Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra.</p> + +<p>Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.</p> + +<p><strong>Lorem ipsum</strong> dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.</p> + +<img src="images/image_demo.jpg" width="54mm" height="80mm" /> + +<p style="background-color:yellow;"><i>Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.</i></p> + +<p>Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu.</p> + +<p style="color:navy;">Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra.</p> + +<p>Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.</p> diff --git a/tcpdf/examples/data/table_data_demo.txt b/tcpdf/examples/data/table_data_demo.txt new file mode 100644 index 0000000..5a48a42 --- /dev/null +++ b/tcpdf/examples/data/table_data_demo.txt @@ -0,0 +1,15 @@ +Austria;Vienna;83859;8075 +Belgium;Brussels;30518;10192 +Denmark;Copenhagen;43094;5295 +Finland;Helsinki;304529;5147 +France;Paris;543965;58728 +Germany;Berlin;357022;82057 +Greece;Athens;131625;10511 +Ireland;Dublin;70723;3694 +Italy;Roma;301316;57563 +Luxembourg;Luxembourg;2586;424 +Netherlands;Amsterdam;41526;15654 +Portugal;Lisbon;91906;9957 +Spain;Madrid;504790;39348 +Sweden;Stockholm;410934;8839 +United Kingdom;London;243820;58862 diff --git a/tcpdf/examples/data/utf8test.txt b/tcpdf/examples/data/utf8test.txt new file mode 100644 index 0000000..291d4e7 --- /dev/null +++ b/tcpdf/examples/data/utf8test.txt @@ -0,0 +1,128 @@ +Sentences that contain all letters commonly used in a language +-------------------------------------------------------------- + +This file is UTF-8 encoded. + +Czech (cz) +--------- + + Příšerně žluťoučký kůň úpěl ďábelské ódy. + Hleď, toť přízračný kůň v mátožné póze šíleně úpí. + Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů. + Loď čeří kýlem tůň obzvlášť v Grónské úžině. + Ó, náhlý déšť již zvířil prach a čilá laň teď běží s houfcem gazel k úkrytům. + +Danish (da) +--------- + + Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen + Wolther spillede på xylofon. + (= Quiz contestants were eating strawbery with cream while Wolther + the circus clown played on xylophone.) + +German (de) +----------- + + Falsches Üben von Xylophonmusik quält jeden größeren Zwerg + (= Wrongful practicing of xylophone music tortures every larger dwarf) + + Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich + (= Twelve boxing fighters hunted Eva across the dike of Sylt) + + Heizölrückstoßabdämpfung + (= fuel oil recoil absorber) + (jqvwxy missing, but all non-ASCII letters in one word) + +English (en) +------------ + + The quick brown fox jumps over the lazy dog + +Spanish (es) +------------ + + El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y + frío, añoraba a su querido cachorro. + (Contains every letter and every accent, but not every combination + of vowel + acute.) + +French (fr) +----------- + + Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à + côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce + qui lui permet de penser à la cænogenèse de l'être dont il est question + dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui, + pense-t-il, diminue çà et là la qualité de son œuvre. + + l'île exiguë + Où l'obèse jury mûr + Fête l'haï volapük, + Âne ex aéquo au whist, + Ôtez ce vœu déçu. + + Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en + canoë au delà des îles, près du mälström où brûlent les novæ. + +Irish Gaelic (ga) +----------------- + + D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh + +Hungarian (hu) +-------------- + + Árvíztűrő tükörfúrógép + (= flood-proof mirror-drilling machine, only all non-ASCII letters) + +Icelandic (is) +-------------- + + Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa + + Sævör grét áðan því úlpan var ónýt + (some ASCII letters missing) + +Greek (el) +------------- + + Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο + (= No more shall I see acacias or myrtles in the golden clearing) + + Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία + (= I uncover the soul-destroying abhorrence) + +Hebrew (iw) +----------- + + ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה + +Polish (pl) +----------- + + Pchnąć w tę łódź jeża lub osiem skrzyń fig + (= To push a hedgehog or eight bins of figs in this boat) + + Zażółć gęślą jaźń + +Russian (ru) +------------ + + В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! + (= Would a citrus live in the bushes of south? Yes, but only a fake one!) + +Thai (th) +--------- + + [--------------------------|------------------------] + ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน + จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร + ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย + ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ + + [The copyright for the Thai example is owned by The Computer + Association of Thailand under the Royal Patronage of His Majesty the + King.] + +Please let me know if you find others! Special thanks to the people +from all over the world who contributed these sentences. diff --git a/tcpdf/examples/example_001.php b/tcpdf/examples/example_001.php new file mode 100644 index 0000000..055c66a --- /dev/null +++ b/tcpdf/examples/example_001.php @@ -0,0 +1,106 @@ +<?php +//============================================================+ +// File name : example_001.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 001 for TCPDF class +// Default Header and Footer +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Default Header and Footer + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 001'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); +$pdf->setFooterData(array(0,64,0), array(0,64,128)); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set default font subsetting mode +$pdf->setFontSubsetting(true); + +// Set font +// dejavusans is a UTF-8 Unicode font, if you only need to +// print standard ASCII chars, you can use core fonts like +// helvetica or times to reduce file size. +$pdf->SetFont('dejavusans', '', 14, '', true); + +// Add a page +// This method has several options, check the source code documentation for more information. +$pdf->AddPage(); + +// set text shadow effect +$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + +// Set some content to print +$html = <<<EOD +<h1>Welcome to <a href="http://www.tcpdf.org" style="text-decoration:none;background-color:#CC0000;color:black;">&nbsp;<span style="color:black;">TC</span><span style="color:white;">PDF</span>&nbsp;</a>!</h1> +<i>This is the first example of TCPDF library.</i> +<p>This text is printed using the <i>writeHTMLCell()</i> method but you can also use: <i>Multicell(), writeHTML(), Write(), Cell() and Text()</i>.</p> +<p>Please check the source code documentation and other examples for further information.</p> +<p style="color:#CC0000;">TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE <a href="http://sourceforge.net/donate/index.php?group_id=128076">MAKE A DONATION!</a></p> +EOD; + +// Print text using writeHTMLCell() +$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + +// --------------------------------------------------------- + +// Close and output PDF document +// This method has several options, check the source code documentation for more information. +$pdf->Output('example_001.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_002.php b/tcpdf/examples/example_002.php new file mode 100644 index 0000000..020dd29 --- /dev/null +++ b/tcpdf/examples/example_002.php @@ -0,0 +1,87 @@ +<?php +//============================================================+ +// File name : example_002.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 002 for TCPDF class +// Removing Header and Footer +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Removing Header and Footer + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 002'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// remove default header/footer +$pdf->setPrintHeader(false); +$pdf->setPrintFooter(false); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', 'BI', 20); + +// add a page +$pdf->AddPage(); + +// set some text to print +$txt = <<<EOD +TCPDF Example 002 + +Default page header and footer are disabled using setPrintHeader() and setPrintFooter() methods. +EOD; + +// print a block of text using Write() +$pdf->Write(0, $txt, '', 0, 'C', true, 0, false, false, 0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_002.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_003.php b/tcpdf/examples/example_003.php new file mode 100644 index 0000000..73a0e8c --- /dev/null +++ b/tcpdf/examples/example_003.php @@ -0,0 +1,118 @@ +<?php +//============================================================+ +// File name : example_003.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 003 for TCPDF class +// Custom Header and Footer +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Custom Header and Footer + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + + +// Extend the TCPDF class to create custom Header and Footer +class MYPDF extends TCPDF { + + //Page header + public function Header() { + // Logo + $image_file = K_PATH_IMAGES.'logo_example.jpg'; + $this->Image($image_file, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false); + // Set font + $this->SetFont('helvetica', 'B', 20); + // Title + $this->Cell(0, 15, '<< TCPDF Example 003 >>', 0, false, 'C', 0, '', 0, false, 'M', 'M'); + } + + // Page footer + public function Footer() { + // Position at 15 mm from bottom + $this->SetY(-15); + // Set font + $this->SetFont('helvetica', 'I', 8); + // Page number + $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M'); + } +} + +// create new PDF document +$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 003'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', 'BI', 12); + +// add a page +$pdf->AddPage(); + +// set some text to print +$txt = <<<EOD +TCPDF Example 003 + +Custom page header and footer are defined by extending the TCPDF class and overriding the Header() and Footer() methods. +EOD; + +// print a block of text using Write() +$pdf->Write(0, $txt, '', 0, 'C', true, 0, false, false, 0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_003.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_004.php b/tcpdf/examples/example_004.php new file mode 100644 index 0000000..88e08c1 --- /dev/null +++ b/tcpdf/examples/example_004.php @@ -0,0 +1,121 @@ +<?php +//============================================================+ +// File name : example_004.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 004 for TCPDF class +// Cell stretching +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Cell stretching + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 004'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 004', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 11); + +// add a page +$pdf->AddPage(); + +//Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') + +// test Cell stretching +$pdf->Cell(0, 0, 'TEST CELL STRETCH: no stretch', 1, 1, 'C', 0, '', 0); +$pdf->Cell(0, 0, 'TEST CELL STRETCH: scaling', 1, 1, 'C', 0, '', 1); +$pdf->Cell(0, 0, 'TEST CELL STRETCH: force scaling', 1, 1, 'C', 0, '', 2); +$pdf->Cell(0, 0, 'TEST CELL STRETCH: spacing', 1, 1, 'C', 0, '', 3); +$pdf->Cell(0, 0, 'TEST CELL STRETCH: force spacing', 1, 1, 'C', 0, '', 4); + +$pdf->Ln(5); + +$pdf->Cell(45, 0, 'TEST CELL STRETCH: scaling', 1, 1, 'C', 0, '', 1); +$pdf->Cell(45, 0, 'TEST CELL STRETCH: force scaling', 1, 1, 'C', 0, '', 2); +$pdf->Cell(45, 0, 'TEST CELL STRETCH: spacing', 1, 1, 'C', 0, '', 3); +$pdf->Cell(45, 0, 'TEST CELL STRETCH: force spacing', 1, 1, 'C', 0, '', 4); + +$pdf->AddPage(); + +// example using general stretching and spacing + +for ($stretching = 90; $stretching <= 110; $stretching += 10) { + for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { + + // set general stretching (scaling) value + $pdf->setFontStretching($stretching); + + // set general spacing value + $pdf->setFontSpacing($spacing); + + $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, no stretch', 1, 1, 'C', 0, '', 0); + $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, scaling', 1, 1, 'C', 0, '', 1); + $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, force scaling', 1, 1, 'C', 0, '', 2); + $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, spacing', 1, 1, 'C', 0, '', 3); + $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, force spacing', 1, 1, 'C', 0, '', 4); + + $pdf->Ln(2); + } +} + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_004.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_005.php b/tcpdf/examples/example_005.php new file mode 100644 index 0000000..5a592d1 --- /dev/null +++ b/tcpdf/examples/example_005.php @@ -0,0 +1,158 @@ +<?php +//============================================================+ +// File name : example_005.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 005 for TCPDF class +// Multicell +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Multicell + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 005'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 005', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 10); + +// add a page +$pdf->AddPage(); + +// set cell padding +$pdf->setCellPaddings(1, 1, 1, 1); + +// set cell margins +$pdf->setCellMargins(1, 1, 1, 1); + +// set color for background +$pdf->SetFillColor(255, 255, 127); + +// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) + +// set some text for example +$txt = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'; + +// Multicell test +$pdf->MultiCell(55, 5, '[LEFT] '.$txt, 1, 'L', 1, 0, '', '', true); +$pdf->MultiCell(55, 5, '[RIGHT] '.$txt, 1, 'R', 0, 1, '', '', true); +$pdf->MultiCell(55, 5, '[CENTER] '.$txt, 1, 'C', 0, 0, '', '', true); +$pdf->MultiCell(55, 5, '[JUSTIFY] '.$txt."\n", 1, 'J', 1, 2, '' ,'', true); +$pdf->MultiCell(55, 5, '[DEFAULT] '.$txt, 1, '', 0, 1, '', '', true); + +$pdf->Ln(4); + +// set color for background +$pdf->SetFillColor(220, 255, 220); + +// Vertical alignment +$pdf->MultiCell(55, 40, '[VERTICAL ALIGNMENT - TOP] '.$txt, 1, 'J', 1, 0, '', '', true, 0, false, true, 40, 'T'); +$pdf->MultiCell(55, 40, '[VERTICAL ALIGNMENT - MIDDLE] '.$txt, 1, 'J', 1, 0, '', '', true, 0, false, true, 40, 'M'); +$pdf->MultiCell(55, 40, '[VERTICAL ALIGNMENT - BOTTOM] '.$txt, 1, 'J', 1, 1, '', '', true, 0, false, true, 40, 'B'); + +$pdf->Ln(4); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// set color for background +$pdf->SetFillColor(215, 235, 255); + +// set some text for example +$txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. + +Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.'; + +// print a blox of text using multicell() +$pdf->MultiCell(80, 5, $txt."\n", 1, 'J', 1, 1, '' ,'', true); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// AUTO-FITTING + +// set color for background +$pdf->SetFillColor(255, 235, 235); + +// Fit text on cell by reducing font size +$pdf->MultiCell(55, 60, '[FIT CELL] '.$txt."\n", 1, 'J', 1, 1, 125, 145, true, 0, false, true, 60, 'M', true); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// CUSTOM PADDING + +// set color for background +$pdf->SetFillColor(255, 255, 215); + +// set font +$pdf->SetFont('helvetica', '', 8); + +// set cell padding +$pdf->setCellPaddings(2, 4, 6, 8); + +$txt = "CUSTOM PADDING:\nLeft=2, Top=4, Right=6, Bottom=8\nLorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue.\n"; + +$pdf->MultiCell(55, 5, $txt, 1, 'J', 1, 2, 125, 210, true); + +// move pointer to last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_005.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_006.php b/tcpdf/examples/example_006.php new file mode 100644 index 0000000..481f70e --- /dev/null +++ b/tcpdf/examples/example_006.php @@ -0,0 +1,330 @@ +<?php +//============================================================+ +// File name : example_006.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 006 for TCPDF class +// WriteHTML and RTL support +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: WriteHTML and RTL support + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 006'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 006', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('dejavusans', '', 10); + +// add a page +$pdf->AddPage(); + +// writeHTML($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='') +// writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) + +// create some HTML content +$html = '<h1>HTML Example</h1> +Some special characters: &lt; € &euro; &#8364; &amp; è &egrave; &copy; &gt; \\slash \\\\double-slash \\\\\\triple-slash +<h2>List</h2> +List example: +<ol> + <li><img src="images/logo_example.png" alt="test alt attribute" width="30" height="30" border="0" /> test image</li> + <li><b>bold text</b></li> + <li><i>italic text</i></li> + <li><u>underlined text</u></li> + <li><b>b<i>bi<u>biu</u>bi</i>b</b></li> + <li><a href="http://www.tecnick.com" dir="ltr">link to http://www.tecnick.com</a></li> + <li>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.<br />Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.</li> + <li>SUBLIST + <ol> + <li>row one + <ul> + <li>sublist</li> + </ul> + </li> + <li>row two</li> + </ol> + </li> + <li><b>T</b>E<i>S</i><u>T</u> <del>line through</del></li> + <li><font size="+3">font + 3</font></li> + <li><small>small text</small> normal <small>small text</small> normal <sub>subscript</sub> normal <sup>superscript</sup> normal</li> +</ol> +<dl> + <dt>Coffee</dt> + <dd>Black hot drink</dd> + <dt>Milk</dt> + <dd>White cold drink</dd> +</dl> +<div style="text-align:center">IMAGES<br /> +<img src="images/logo_example.png" alt="test alt attribute" width="100" height="100" border="0" /><img src="images/tcpdf_box.svg" alt="test alt attribute" width="100" height="100" border="0" /><img src="images/logo_example.jpg" alt="test alt attribute" width="100" height="100" border="0" /> +</div>'; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + + +// output some RTL HTML content +$html = '<div style="text-align:center">The words &#8220;<span dir="rtl">&#1502;&#1494;&#1500; [mazel] &#1496;&#1493;&#1489; [tov]</span>&#8221; mean &#8220;Congratulations!&#8221;</div>'; +$pdf->writeHTML($html, true, false, true, false, ''); + +// test some inline CSS +$html = '<p>This is just an example of html code to demonstrate some supported CSS inline styles. +<span style="font-weight: bold;">bold text</span> +<span style="text-decoration: line-through;">line-trough</span> +<span style="text-decoration: underline line-through;">underline and line-trough</span> +<span style="color: rgb(0, 128, 64);">color</span> +<span style="background-color: rgb(255, 0, 0); color: rgb(255, 255, 255);">background color</span> +<span style="font-weight: bold;">bold</span> +<span style="font-size: xx-small;">xx-small</span> +<span style="font-size: x-small;">x-small</span> +<span style="font-size: small;">small</span> +<span style="font-size: medium;">medium</span> +<span style="font-size: large;">large</span> +<span style="font-size: x-large;">x-large</span> +<span style="font-size: xx-large;">xx-large</span> +</p>'; + +$pdf->writeHTML($html, true, false, true, false, ''); + +// reset pointer to the last page +$pdf->lastPage(); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// Print a table + +// add a page +$pdf->AddPage(); + +// create some HTML content +$subtable = '<table border="1" cellspacing="6" cellpadding="4"><tr><td>a</td><td>b</td></tr><tr><td>c</td><td>d</td></tr></table>'; + +$html = '<h2>HTML TABLE:</h2> +<table border="1" cellspacing="3" cellpadding="4"> + <tr> + <th>#</th> + <th align="right">RIGHT align</th> + <th align="left">LEFT align</th> + <th>4A</th> + </tr> + <tr> + <td>1</td> + <td bgcolor="#cccccc" align="center" colspan="2">A1 ex<i>amp</i>le <a href="http://www.tcpdf.org">link</a> column span. One two tree four five six seven eight nine ten.<br />line after br<br /><small>small text</small> normal <sub>subscript</sub> normal <sup>superscript</sup> normal bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<ol><li>first<ol><li>sublist</li><li>sublist</li></ol></li><li>second</li></ol><small color="#FF0000" bgcolor="#FFFF00">small small small small small small small small small small small small small small small small small small small small</small></td> + <td>4B</td> + </tr> + <tr> + <td>'.$subtable.'</td> + <td bgcolor="#0000FF" color="yellow" align="center">A2 € &euro; &#8364; &amp; è &egrave;<br/>A2 € &euro; &#8364; &amp; è &egrave;</td> + <td bgcolor="#FFFF00" align="left"><font color="#FF0000">Red</font> Yellow BG</td> + <td>4C</td> + </tr> + <tr> + <td>1A</td> + <td rowspan="2" colspan="2" bgcolor="#FFFFCC">2AA<br />2AB<br />2AC</td> + <td bgcolor="#FF0000">4D</td> + </tr> + <tr> + <td>1B</td> + <td>4E</td> + </tr> + <tr> + <td>1C</td> + <td>2C</td> + <td>3C</td> + <td>4F</td> + </tr> +</table>'; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// Print some HTML Cells + +$html = '<span color="red">red</span> <span color="green">green</span> <span color="blue">blue</span><br /><span color="red">red</span> <span color="green">green</span> <span color="blue">blue</span>'; + +$pdf->SetFillColor(255,255,0); + +$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 0, true, 'L', true); +$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 1, true, 'C', true); +$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 0, true, 'R', true); + +// reset pointer to the last page +$pdf->lastPage(); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// Print a table + +// add a page +$pdf->AddPage(); + +// create some HTML content +$html = '<h1>Image alignments on HTML table</h1> +<table cellpadding="1" cellspacing="1" border="1" style="text-align:center;"> +<tr><td><img src="images/logo_example.png" border="0" height="41" width="41" /></td></tr> +<tr style="text-align:left;"><td><img src="images/logo_example.png" border="0" height="41" width="41" align="top" /></td></tr> +<tr style="text-align:center;"><td><img src="images/logo_example.png" border="0" height="41" width="41" align="middle" /></td></tr> +<tr style="text-align:right;"><td><img src="images/logo_example.png" border="0" height="41" width="41" align="bottom" /></td></tr> +<tr><td style="text-align:left;"><img src="images/logo_example.png" border="0" height="41" width="41" align="top" /></td></tr> +<tr><td style="text-align:center;"><img src="images/logo_example.png" border="0" height="41" width="41" align="middle" /></td></tr> +<tr><td style="text-align:right;"><img src="images/logo_example.png" border="0" height="41" width="41" align="bottom" /></td></tr> +</table>'; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// reset pointer to the last page +$pdf->lastPage(); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// Print all HTML colors + +// add a page +$pdf->AddPage(); + +$textcolors = '<h1>HTML Text Colors</h1>'; +$bgcolors = '<hr /><h1>HTML Background Colors</h1>'; + +foreach(TCPDF_COLORS::$webcolor as $k => $v) { + $textcolors .= '<span color="#'.$v.'">'.$v.'</span> '; + $bgcolors .= '<span bgcolor="#'.$v.'" color="#333333">'.$v.'</span> '; +} + +// output the HTML content +$pdf->writeHTML($textcolors, true, false, true, false, ''); +$pdf->writeHTML($bgcolors, true, false, true, false, ''); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// Test word-wrap + +// create some HTML content +$html = '<hr /> +<h1>Various tests</h1> +<a href="#2">link to page 2</a><br /> +<font face="courier"><b>thisisaverylongword</b></font> <font face="helvetica"><i>thisisanotherverylongword</i></font> <font face="times"><b>thisisaverylongword</b></font> thisisanotherverylongword <font face="times">thisisaverylongword</font> <font face="courier"><b>thisisaverylongword</b></font> <font face="helvetica"><i>thisisanotherverylongword</i></font> <font face="times"><b>thisisaverylongword</b></font> thisisanotherverylongword <font face="times">thisisaverylongword</font> <font face="courier"><b>thisisaverylongword</b></font> <font face="helvetica"><i>thisisanotherverylongword</i></font> <font face="times"><b>thisisaverylongword</b></font> thisisanotherverylongword <font face="times">thisisaverylongword</font> <font face="courier"><b>thisisaverylongword</b></font> <font face="helvetica"><i>thisisanotherverylongword</i></font> <font face="times"><b>thisisaverylongword</b></font> thisisanotherverylongword <font face="times">thisisaverylongword</font> <font face="courier"><b>thisisaverylongword</b></font> <font face="helvetica"><i>thisisanotherverylongword</i></font> <font face="times"><b>thisisaverylongword</b></font> thisisanotherverylongword <font face="times">thisisaverylongword</font>'; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// Test fonts nesting +$html1 = 'Default <font face="courier">Courier <font face="helvetica">Helvetica <font face="times">Times <font face="dejavusans">dejavusans </font>Times </font>Helvetica </font>Courier </font>Default'; +$html2 = '<small>small text</small> normal <small>small text</small> normal <sub>subscript</sub> normal <sup>superscript</sup> normal'; +$html3 = '<font size="10" color="#ff7f50">The</font> <font size="10" color="#6495ed">quick</font> <font size="14" color="#dc143c">brown</font> <font size="18" color="#008000">fox</font> <font size="22"><a href="http://www.tcpdf.org">jumps</a></font> <font size="22" color="#a0522d">over</font> <font size="18" color="#da70d6">the</font> <font size="14" color="#9400d3">lazy</font> <font size="10" color="#4169el">dog</font>.'; + +$html = $html1.'<br />'.$html2.'<br />'.$html3.'<br />'.$html3.'<br />'.$html2; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// test pre tag + +// add a page +$pdf->AddPage(); + +$html = <<<EOF +<div style="background-color:#880000;color:white;"> +Hello World!<br /> +Hello +</div> +<pre style="background-color:#336699;color:white;"> +int main() { + printf("HelloWorld"); + return 0; +} +</pre> +<tt>Monospace font</tt>, normal font, <tt>monospace font</tt>, normal font. +<br /> +<div style="background-color:#880000;color:white;">DIV LEVEL 1<div style="background-color:#008800;color:white;">DIV LEVEL 2</div>DIV LEVEL 1</div> +<br /> +<span style="background-color:#880000;color:white;">SPAN LEVEL 1 <span style="background-color:#008800;color:white;">SPAN LEVEL 2</span> SPAN LEVEL 1</span> +EOF; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// test custom bullet points for list + +// add a page +$pdf->AddPage(); + +$html = <<<EOF +<h1>Test custom bullet image for list items</h1> +<ul style="font-size:14pt;list-style-type:img|png|4|4|images/logo_example.png"> + <li>test custom bullet image</li> + <li>test custom bullet image</li> + <li>test custom bullet image</li> + <li>test custom bullet image</li> +<ul> +EOF; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_006.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_007.php b/tcpdf/examples/example_007.php new file mode 100644 index 0000000..97ebecb --- /dev/null +++ b/tcpdf/examples/example_007.php @@ -0,0 +1,113 @@ +<?php +//============================================================+ +// File name : example_007.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 007 for TCPDF class +// Two independent columns with WriteHTMLCell() +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Two independent columns with WriteHTMLCell() + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 007'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 007', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 12); + +// add a page +$pdf->AddPage(); + +// create columns content +$left_column = '<b>LEFT COLUMN</b> left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column'; + +$right_column = '<b>RIGHT COLUMN</b> right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column'; + +// writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) + +// get current vertical position +$y = $pdf->getY(); + +// set color for background +$pdf->SetFillColor(255, 255, 200); + +// set color for text +$pdf->SetTextColor(0, 63, 127); + +// write the first column +$pdf->writeHTMLCell(80, '', '', $y, $left_column, 1, 0, 1, true, 'J', true); + +// set color for background +$pdf->SetFillColor(215, 235, 255); + +// set color for text +$pdf->SetTextColor(127, 31, 0); + +// write the second column +$pdf->writeHTMLCell(80, '', '', '', $right_column, 1, 1, 1, true, 'J', true); + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_007.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_008.php b/tcpdf/examples/example_008.php new file mode 100644 index 0000000..4349c38 --- /dev/null +++ b/tcpdf/examples/example_008.php @@ -0,0 +1,97 @@ +<?php +//============================================================+ +// File name : example_008.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 008 for TCPDF class +// Include external UTF-8 text file +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Include external UTF-8 text file + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 008'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 008', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set default font subsetting mode +$pdf->setFontSubsetting(true); + +// set font +$pdf->SetFont('freeserif', '', 12); + +// add a page +$pdf->AddPage(); + +// get esternal file content +$utf8text = file_get_contents('data/utf8test.txt', false); + +// set color for text +$pdf->SetTextColor(0, 63, 127); + +//Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0) + +// write the text +$pdf->Write(5, $utf8text, '', 0, '', false, 0, false, false, 0); + + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_008.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_009.php b/tcpdf/examples/example_009.php new file mode 100644 index 0000000..235dd72 --- /dev/null +++ b/tcpdf/examples/example_009.php @@ -0,0 +1,146 @@ +<?php +//============================================================+ +// File name : example_009.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 009 for TCPDF class +// Test Image +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Test Image + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 009'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 009', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// ------------------------------------------------------------------- + +// add a page +$pdf->AddPage(); + +// set JPEG quality +$pdf->setJPEGQuality(75); + +// Image method signature: +// Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false) + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// Example of Image from data stream ('PHP rules') +$imgdata = base64_decode('iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='); + +// The '@' character is used to indicate that follows an image data stream and not an image file name +$pdf->Image('@'.$imgdata); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// Image example with resizing +$pdf->Image('images/image_demo.jpg', 15, 140, 75, 113, 'JPG', 'http://www.tcpdf.org', '', true, 150, '', false, false, 1, false, false, false); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// test fitbox with all alignment combinations + +$horizontal_alignments = array('L', 'C', 'R'); +$vertical_alignments = array('T', 'M', 'B'); + +$x = 15; +$y = 35; +$w = 30; +$h = 30; +// test all combinations of alignments +for ($i = 0; $i < 3; ++$i) { + $fitbox = $horizontal_alignments[$i].' '; + $x = 15; + for ($j = 0; $j < 3; ++$j) { + $fitbox[1] = $vertical_alignments[$j]; + $pdf->Rect($x, $y, $w, $h, 'F', array(), array(128,255,128)); + $pdf->Image('images/image_demo.jpg', $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false); + $x += 32; // new column + } + $y += 32; // new row +} + +$x = 115; +$y = 35; +$w = 25; +$h = 50; +for ($i = 0; $i < 3; ++$i) { + $fitbox = $horizontal_alignments[$i].' '; + $x = 115; + for ($j = 0; $j < 3; ++$j) { + $fitbox[1] = $vertical_alignments[$j]; + $pdf->Rect($x, $y, $w, $h, 'F', array(), array(128,255,255)); + $pdf->Image('images/image_demo.jpg', $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false); + $x += 27; // new column + } + $y += 52; // new row +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// Stretching, position and alignment example + +$pdf->SetXY(110, 200); +$pdf->Image('images/image_demo.jpg', '', '', 40, 40, '', '', 'T', false, 300, '', false, false, 1, false, false, false); +$pdf->Image('images/image_demo.jpg', '', '', 40, 40, '', '', '', false, 300, '', false, false, 1, false, false, false); + +// ------------------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_009.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_010.php b/tcpdf/examples/example_010.php new file mode 100644 index 0000000..5b980b0 --- /dev/null +++ b/tcpdf/examples/example_010.php @@ -0,0 +1,150 @@ +<?php +//============================================================+ +// File name : example_010.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 010 for TCPDF class +// Text on multiple columns +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Text on multiple columns + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + + +/** + * Extend TCPDF to work with multiple columns + */ +class MC_TCPDF extends TCPDF { + + /** + * Print chapter + * @param $num (int) chapter number + * @param $title (string) chapter title + * @param $file (string) name of the file containing the chapter body + * @param $mode (boolean) if true the chapter body is in HTML, otherwise in simple text. + * @public + */ + public function PrintChapter($num, $title, $file, $mode=false) { + // add a new page + $this->AddPage(); + // disable existing columns + $this->resetColumns(); + // print chapter title + $this->ChapterTitle($num, $title); + // set columns + $this->setEqualColumns(3, 57); + // print chapter body + $this->ChapterBody($file, $mode); + } + + /** + * Set chapter title + * @param $num (int) chapter number + * @param $title (string) chapter title + * @public + */ + public function ChapterTitle($num, $title) { + $this->SetFont('helvetica', '', 14); + $this->SetFillColor(200, 220, 255); + $this->Cell(180, 6, 'Chapter '.$num.' : '.$title, 0, 1, '', 1); + $this->Ln(4); + } + + /** + * Print chapter body + * @param $file (string) name of the file containing the chapter body + * @param $mode (boolean) if true the chapter body is in HTML, otherwise in simple text. + * @public + */ + public function ChapterBody($file, $mode=false) { + $this->selectColumn(); + // get esternal file content + $content = file_get_contents($file, false); + // set font + $this->SetFont('times', '', 9); + $this->SetTextColor(50, 50, 50); + // print content + if ($mode) { + // ------ HTML MODE ------ + $this->writeHTML($content, true, false, true, false, 'J'); + } else { + // ------ TEXT MODE ------ + $this->Write(0, $content, '', 0, 'J', true, 0, false, true, 0); + } + $this->Ln(); + } +} // end of extended class + +// --------------------------------------------------------- +// EXAMPLE +// --------------------------------------------------------- +// create new PDF document +$pdf = new MC_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 010'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 010', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// print TEXT +$pdf->PrintChapter(1, 'LOREM IPSUM [TEXT]', 'data/chapter_demo_1.txt', false); + +// print HTML +$pdf->PrintChapter(2, 'LOREM IPSUM [HTML]', 'data/chapter_demo_2.txt', true); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_010.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_011.php b/tcpdf/examples/example_011.php new file mode 100644 index 0000000..623ba3b --- /dev/null +++ b/tcpdf/examples/example_011.php @@ -0,0 +1,138 @@ +<?php +//============================================================+ +// File name : example_011.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 011 for TCPDF class +// Colored Table (very simple table) +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Colored Table + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// extend TCPF with custom functions +class MYPDF extends TCPDF { + + // Load table data from file + public function LoadData($file) { + // Read file lines + $lines = file($file); + $data = array(); + foreach($lines as $line) { + $data[] = explode(';', chop($line)); + } + return $data; + } + + // Colored table + public function ColoredTable($header,$data) { + // Colors, line width and bold font + $this->SetFillColor(255, 0, 0); + $this->SetTextColor(255); + $this->SetDrawColor(128, 0, 0); + $this->SetLineWidth(0.3); + $this->SetFont('', 'B'); + // Header + $w = array(40, 35, 40, 45); + $num_headers = count($header); + for($i = 0; $i < $num_headers; ++$i) { + $this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1); + } + $this->Ln(); + // Color and font restoration + $this->SetFillColor(224, 235, 255); + $this->SetTextColor(0); + $this->SetFont(''); + // Data + $fill = 0; + foreach($data as $row) { + $this->Cell($w[0], 6, $row[0], 'LR', 0, 'L', $fill); + $this->Cell($w[1], 6, $row[1], 'LR', 0, 'L', $fill); + $this->Cell($w[2], 6, number_format($row[2]), 'LR', 0, 'R', $fill); + $this->Cell($w[3], 6, number_format($row[3]), 'LR', 0, 'R', $fill); + $this->Ln(); + $fill=!$fill; + } + $this->Cell(array_sum($w), 0, '', 'T'); + } +} + +// create new PDF document +$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 011'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 011', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 12); + +// add a page +$pdf->AddPage(); + +// column titles +$header = array('Country', 'Capital', 'Area (sq km)', 'Pop. (thousands)'); + +// data loading +$data = $pdf->LoadData('data/table_data_demo.txt'); + +// print colored table +$pdf->ColoredTable($header, $data); + +// --------------------------------------------------------- + +// close and output PDF document +$pdf->Output('example_011.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_012.pdf b/tcpdf/examples/example_012.pdf new file mode 100644 index 0000000..eec8ee0 Binary files /dev/null and b/tcpdf/examples/example_012.pdf differ diff --git a/tcpdf/examples/example_012.php b/tcpdf/examples/example_012.php new file mode 100644 index 0000000..aaa196b --- /dev/null +++ b/tcpdf/examples/example_012.php @@ -0,0 +1,205 @@ +<?php +//============================================================+ +// File name : example_012.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 012 for TCPDF class +// Graphic Functions +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Graphic Functions + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 012'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// disable header and footer +$pdf->setPrintHeader(false); +$pdf->setPrintFooter(false); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 10); + +// add a page +$pdf->AddPage(); + +$style = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,20,5,10', 'phase' => 10, 'color' => array(255, 0, 0)); +$style2 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)); +$style3 = array('width' => 1, 'cap' => 'round', 'join' => 'round', 'dash' => '2,10', 'color' => array(255, 0, 0)); +$style4 = array('L' => 0, + 'T' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '20,10', 'phase' => 10, 'color' => array(100, 100, 255)), + 'R' => array('width' => 0.50, 'cap' => 'round', 'join' => 'miter', 'dash' => 0, 'color' => array(50, 50, 127)), + 'B' => array('width' => 0.75, 'cap' => 'square', 'join' => 'miter', 'dash' => '30,10,5,10')); +$style5 = array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 64, 128)); +$style6 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,10', 'color' => array(0, 128, 0)); +$style7 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 128, 0)); + +// Line +$pdf->Text(5, 4, 'Line examples'); +$pdf->Line(5, 10, 80, 30, $style); +$pdf->Line(5, 10, 5, 30, $style2); +$pdf->Line(5, 10, 80, 10, $style3); + +// Rect +$pdf->Text(100, 4, 'Rectangle examples'); +$pdf->Rect(100, 10, 40, 20, 'DF', $style4, array(220, 220, 200)); +$pdf->Rect(145, 10, 40, 20, 'D', array('all' => $style3)); + +// Curve +$pdf->Text(5, 34, 'Curve examples'); +$pdf->Curve(5, 40, 30, 55, 70, 45, 60, 75, null, $style6); +$pdf->Curve(80, 40, 70, 75, 150, 45, 100, 75, 'F', $style6); +$pdf->Curve(140, 40, 150, 55, 180, 45, 200, 75, 'DF', $style6, array(200, 220, 200)); + +// Circle and ellipse +$pdf->Text(5, 79, 'Circle and ellipse examples'); +$pdf->SetLineStyle($style5); +$pdf->Circle(25,105,20); +$pdf->Circle(25,105,10, 90, 180, null, $style6); +$pdf->Circle(25,105,10, 270, 360, 'F'); +$pdf->Circle(25,105,10, 270, 360, 'C', $style6); + +$pdf->SetLineStyle($style5); +$pdf->Ellipse(100,103,40,20); +$pdf->Ellipse(100,105,20,10, 0, 90, 180, null, $style6); +$pdf->Ellipse(100,105,20,10, 0, 270, 360, 'DF', $style6); + +$pdf->SetLineStyle($style5); +$pdf->Ellipse(175,103,30,15,45); +$pdf->Ellipse(175,105,15,7.50, 45, 90, 180, null, $style6); +$pdf->Ellipse(175,105,15,7.50, 45, 270, 360, 'F', $style6, array(220, 200, 200)); + +// Polygon +$pdf->Text(5, 129, 'Polygon examples'); +$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); +$pdf->Polygon(array(5,135,45,135,15,165)); +$pdf->Polygon(array(60,135,80,135,80,155,70,165,50,155), 'DF', array($style6, $style7, $style7, 0, $style6), array(220, 200, 200)); +$pdf->Polygon(array(120,135,140,135,150,155,110,155), 'D', array($style6, 0, $style7, $style6)); +$pdf->Polygon(array(160,135,190,155,170,155,200,160,160,165), 'DF', array('all' => $style6), array(220, 220, 220)); + +// Polygonal Line +$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 164))); +$pdf->PolyLine(array(80,165,90,160,100,165,110,160,120,165,130,160,140,165), 'D', array(), array()); + +// Regular polygon +$pdf->Text(5, 169, 'Regular polygon examples'); +$pdf->SetLineStyle($style5); +$pdf->RegularPolygon(20, 190, 15, 6, 0, 1, 'F'); +$pdf->RegularPolygon(55, 190, 15, 6); +$pdf->RegularPolygon(55, 190, 10, 6, 45, 0, 'DF', array($style6, 0, $style7, 0, $style7, $style7)); +$pdf->RegularPolygon(90, 190, 15, 3, 0, 1, 'DF', array('all' => $style5), array(200, 220, 200), 'F', array(255, 200, 200)); +$pdf->RegularPolygon(125, 190, 15, 4, 30, 1, null, array('all' => $style5), null, null, $style6); +$pdf->RegularPolygon(160, 190, 15, 10); + +// Star polygon +$pdf->Text(5, 209, 'Star polygon examples'); +$pdf->SetLineStyle($style5); +$pdf->StarPolygon(20, 230, 15, 20, 3, 0, 1, 'F'); +$pdf->StarPolygon(55, 230, 15, 12, 5); +$pdf->StarPolygon(55, 230, 7, 12, 5, 45, 0, 'DF', array('all' => $style7), array(220, 220, 200), 'F', array(255, 200, 200)); +$pdf->StarPolygon(90, 230, 15, 20, 6, 0, 1, 'DF', array('all' => $style5), array(220, 220, 200), 'F', array(255, 200, 200)); +$pdf->StarPolygon(125, 230, 15, 5, 2, 30, 1, null, array('all' => $style5), null, null, $style6); +$pdf->StarPolygon(160, 230, 15, 10, 3); +$pdf->StarPolygon(160, 230, 7, 50, 26); + +// Rounded rectangle +$pdf->Text(5, 249, 'Rounded rectangle examples'); +$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); +$pdf->RoundedRect(5, 255, 40, 30, 3.50, '1111', 'DF'); +$pdf->RoundedRect(50, 255, 40, 30, 6.50, '1000'); +$pdf->RoundedRect(95, 255, 40, 30, 10.0, '1111', null, $style6); +$pdf->RoundedRect(140, 255, 40, 30, 8.0, '0101', 'DF', $style6, array(200, 200, 200)); + +// Arrows +$pdf->Text(185, 249, 'Arrows'); +$pdf->SetLineStyle($style5); +$pdf->SetFillColor(255, 0, 0); +$pdf->Arrow(200, 280, 185, 266, 0, 5, 15); +$pdf->Arrow(200, 280, 190, 263, 1, 5, 15); +$pdf->Arrow(200, 280, 195, 261, 2, 5, 15); +$pdf->Arrow(200, 280, 200, 260, 3, 5, 15); + +// - . - . - . - . - . - . - . - . - . - . - . - . - . - . - + +// ellipse + +// add a page +$pdf->AddPage(); + +$pdf->Cell(0, 0, 'Arc of Ellipse'); + +// center of ellipse +$xc=100; +$yc=100; + +// X Y axis +$pdf->SetDrawColor(200, 200, 200); +$pdf->Line($xc-50, $yc, $xc+50, $yc); +$pdf->Line($xc, $yc-50, $xc, $yc+50); + +// ellipse axis +$pdf->SetDrawColor(200, 220, 255); +$pdf->Line($xc-50, $yc-50, $xc+50, $yc+50); +$pdf->Line($xc-50, $yc+50, $xc+50, $yc-50); + +// ellipse +$pdf->SetDrawColor(200, 255, 200); +$pdf->Ellipse($xc, $yc, 30, 15, 45, 0, 360, 'D', array(), array(), 2); + +// ellipse arc +$pdf->SetDrawColor(255, 0, 0); +$pdf->Ellipse($xc, $yc, 30, 15, 45, 45, 90, 'D', array(), array(), 2); + + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_012.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_013.php b/tcpdf/examples/example_013.php new file mode 100644 index 0000000..a472760 --- /dev/null +++ b/tcpdf/examples/example_013.php @@ -0,0 +1,229 @@ +<?php +//============================================================+ +// File name : example_013.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 013 for TCPDF class +// Graphic Transformations +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Graphic Transformations + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 013'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 013', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Graphic Transformations', '', 0, 'C', 1, 0, false, false, 0); + +// set font +$pdf->SetFont('helvetica', '', 10); + +// --- Scaling --------------------------------------------- +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(50, 70, 40, 10, 'D'); +$pdf->Text(50, 66, 'Scale'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +// Start Transformation +$pdf->StartTransform(); +// Scale by 150% centered by (50,80) which is the lower left corner of the rectangle +$pdf->ScaleXY(150, 50, 80); +$pdf->Rect(50, 70, 40, 10, 'D'); +$pdf->Text(50, 66, 'Scale'); +// Stop Transformation +$pdf->StopTransform(); + +// --- Translation ----------------------------------------- +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(125, 70, 40, 10, 'D'); +$pdf->Text(125, 66, 'Translate'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +// Start Transformation +$pdf->StartTransform(); +// Translate 7 to the right, 5 to the bottom +$pdf->Translate(7, 5); +$pdf->Rect(125, 70, 40, 10, 'D'); +$pdf->Text(125, 66, 'Translate'); +// Stop Transformation +$pdf->StopTransform(); + +// --- Rotation -------------------------------------------- +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(70, 100, 40, 10, 'D'); +$pdf->Text(70, 96, 'Rotate'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +// Start Transformation +$pdf->StartTransform(); +// Rotate 20 degrees counter-clockwise centered by (70,110) which is the lower left corner of the rectangle +$pdf->Rotate(20, 70, 110); +$pdf->Rect(70, 100, 40, 10, 'D'); +$pdf->Text(70, 96, 'Rotate'); +// Stop Transformation +$pdf->StopTransform(); + +// --- Skewing --------------------------------------------- +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(125, 100, 40, 10, 'D'); +$pdf->Text(125, 96, 'Skew'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +// Start Transformation +$pdf->StartTransform(); +// skew 30 degrees along the x-axis centered by (125,110) which is the lower left corner of the rectangle +$pdf->SkewX(30, 125, 110); +$pdf->Rect(125, 100, 40, 10, 'D'); +$pdf->Text(125, 96, 'Skew'); +// Stop Transformation +$pdf->StopTransform(); + +// --- Mirroring horizontally ------------------------------ +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(70, 130, 40, 10, 'D'); +$pdf->Text(70, 126, 'MirrorH'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +// Start Transformation +$pdf->StartTransform(); +// mirror horizontally with axis of reflection at x-position 70 (left side of the rectangle) +$pdf->MirrorH(70); +$pdf->Rect(70, 130, 40, 10, 'D'); +$pdf->Text(70, 126, 'MirrorH'); +// Stop Transformation +$pdf->StopTransform(); + +// --- Mirroring vertically -------------------------------- +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(125, 130, 40, 10, 'D'); +$pdf->Text(125, 126, 'MirrorV'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +// Start Transformation +$pdf->StartTransform(); +// mirror vertically with axis of reflection at y-position 140 (bottom side of the rectangle) +$pdf->MirrorV(140); +$pdf->Rect(125, 130, 40, 10, 'D'); +$pdf->Text(125, 126, 'MirrorV'); +// Stop Transformation +$pdf->StopTransform(); + +// --- Point reflection ------------------------------------ +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(70, 160, 40, 10, 'D'); +$pdf->Text(70, 156, 'MirrorP'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +// Start Transformation +$pdf->StartTransform(); +// point reflection at the lower left point of rectangle +$pdf->MirrorP(70,170); +$pdf->Rect(70, 160, 40, 10, 'D'); +$pdf->Text(70, 156, 'MirrorP'); +// Stop Transformation +$pdf->StopTransform(); + +// --- Mirroring against a straigth line described by a point (120, 120) and an angle -20° +$angle=-20; +$px=120; +$py=170; + +// just for visualisation: the straight line to mirror against + +$pdf->SetDrawColor(200); +$pdf->Line($px-1,$py-1,$px+1,$py+1); +$pdf->Line($px-1,$py+1,$px+1,$py-1); +$pdf->StartTransform(); +$pdf->Rotate($angle, $px, $py); +$pdf->Line($px-5, $py, $px+60, $py); +$pdf->StopTransform(); + +$pdf->SetDrawColor(200); +$pdf->SetTextColor(200); +$pdf->Rect(125, 160, 40, 10, 'D'); +$pdf->Text(125, 156, 'MirrorL'); +$pdf->SetDrawColor(0); +$pdf->SetTextColor(0); +//Start Transformation +$pdf->StartTransform(); +//mirror against the straight line +$pdf->MirrorL($angle, $px, $py); +$pdf->Rect(125, 160, 40, 10, 'D'); +$pdf->Text(125, 156, 'MirrorL'); +//Stop Transformation +$pdf->StopTransform(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_013.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_014.php b/tcpdf/examples/example_014.php new file mode 100644 index 0000000..27e4efc --- /dev/null +++ b/tcpdf/examples/example_014.php @@ -0,0 +1,194 @@ +<?php +//============================================================+ +// File name : example_014.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 014 for TCPDF class +// Javascript Form and user rights (only works on Adobe Acrobat) +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Javascript Form and user rights (only works on Adobe Acrobat) + * @author Nicola Asuni + * @since 2008-03-04 + */ + + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 014'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 014', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// IMPORTANT: disable font subsetting to allow users editing the document +$pdf->setFontSubsetting(false); + +// set font +$pdf->SetFont('helvetica', '', 10, '', false); + +// add a page +$pdf->AddPage(); + +/* +It is possible to create text fields, combo boxes, check boxes and buttons. +Fields are created at the current position and are given a name. +This name allows to manipulate them via JavaScript in order to perform some validation for instance. +*/ + +// set default form properties +$pdf->setFormDefaultProp(array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 200), 'strokeColor'=>array(255, 128, 128))); + +$pdf->SetFont('helvetica', 'BI', 18); +$pdf->Cell(0, 5, 'Example of Form', 0, 1, 'C'); +$pdf->Ln(10); + +$pdf->SetFont('helvetica', '', 12); + +// First name +$pdf->Cell(35, 5, 'First name:'); +$pdf->TextField('firstname', 50, 5); +$pdf->Ln(6); + +// Last name +$pdf->Cell(35, 5, 'Last name:'); +$pdf->TextField('lastname', 50, 5); +$pdf->Ln(6); + +// Gender +$pdf->Cell(35, 5, 'Gender:'); +$pdf->ComboBox('gender', 30, 5, array(array('', '-'), array('M', 'Male'), array('F', 'Female'))); +$pdf->Ln(6); + +// Drink +$pdf->Cell(35, 5, 'Drink:'); +//$pdf->RadioButton('drink', 5, array('readonly' => 'true'), array(), 'Water'); +$pdf->RadioButton('drink', 5, array(), array(), 'Water'); +$pdf->Cell(35, 5, 'Water'); +$pdf->Ln(6); +$pdf->Cell(35, 5, ''); +$pdf->RadioButton('drink', 5, array(), array(), 'Beer', true); +$pdf->Cell(35, 5, 'Beer'); +$pdf->Ln(6); +$pdf->Cell(35, 5, ''); +$pdf->RadioButton('drink', 5, array(), array(), 'Wine'); +$pdf->Cell(35, 5, 'Wine'); +$pdf->Ln(6); +$pdf->Cell(35, 5, ''); +$pdf->RadioButton('drink', 5, array(), array(), 'Milk'); +$pdf->Cell(35, 5, 'Milk'); +$pdf->Ln(10); + +// Newsletter +$pdf->Cell(35, 5, 'Newsletter:'); +$pdf->CheckBox('newsletter', 5, true, array(), array(), 'OK'); + +$pdf->Ln(10); +// Address +$pdf->Cell(35, 5, 'Address:'); +$pdf->TextField('address', 60, 18, array('multiline'=>true, 'lineWidth'=>0, 'borderStyle'=>'none'), array('v'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'dv'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.')); +$pdf->Ln(19); + +// Listbox +$pdf->Cell(35, 5, 'List:'); +$pdf->ListBox('listbox', 60, 15, array('', 'item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7'), array('multipleSelection'=>'true')); +$pdf->Ln(20); + +// E-mail +$pdf->Cell(35, 5, 'E-mail:'); +$pdf->TextField('email', 50, 5); +$pdf->Ln(6); + +// Date of the day +$pdf->Cell(35, 5, 'Date:'); +$pdf->TextField('date', 30, 5, array(), array('v'=>date('Y-m-d'), 'dv'=>date('Y-m-d'))); +$pdf->Ln(10); + +$pdf->SetX(50); + +// Button to validate and print +$pdf->Button('print', 30, 10, 'Print', 'Print()', array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); + +// Reset Button +$pdf->Button('reset', 30, 10, 'Reset', array('S'=>'ResetForm'), array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); + +// Submit Button +$pdf->Button('submit', 30, 10, 'Submit', array('S'=>'SubmitForm', 'F'=>'http://localhost/printvars.php', 'Flags'=>array('ExportFormat')), array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); + +// Form validation functions +$js = <<<EOD +function CheckField(name,message) { + var f = getField(name); + if(f.value == '') { + app.alert(message); + f.setFocus(); + return false; + } + return true; +} +function Print() { + if(!CheckField('firstname','First name is mandatory')) {return;} + if(!CheckField('lastname','Last name is mandatory')) {return;} + if(!CheckField('gender','Gender is mandatory')) {return;} + if(!CheckField('address','Address is mandatory')) {return;} + print(); +} +EOD; + +// Add Javascript code +$pdf->IncludeJS($js); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_014.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_015.php b/tcpdf/examples/example_015.php new file mode 100644 index 0000000..4cc03ca --- /dev/null +++ b/tcpdf/examples/example_015.php @@ -0,0 +1,161 @@ +<?php +//============================================================+ +// File name : example_015.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 015 for TCPDF class +// Bookmarks (Table of Content) +// and Named Destinations. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Bookmarks (Table of Content) + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 015'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 015', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// Bookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0)) + +// set font +$pdf->SetFont('times', 'B', 20); + +// add a page +$pdf->AddPage(); + +// set a bookmark for the current position +$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); + +// print a line using Cell() +$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); + +$pdf->SetFont('times', 'I', 14); +$pdf->Write(0, 'You can set PDF Bookmarks using the Bookmark() method. +You can set PDF Named Destinations using the setDestination() method.'); + +$pdf->SetFont('times', 'B', 20); + +// add other pages and bookmarks + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(0,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(0,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,0,0)); +$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(0,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); + +$pdf->AddPage(); +// add a named destination so you can open this document at this page using the link: "example_015.pdf#chapter2" +$pdf->setDestination('chapter2', 0, ''); +// add a bookmark that points to a named destination +$pdf->Bookmark('Chapter 2', 0, 0, '', 'BI', array(128,0,0), -1, '#chapter2'); +$pdf->Cell(0, 10, 'Chapter 2', 0, 1, 'L'); +$pdf->SetFont('times', 'I', 14); +$pdf->Write(0, 'Once saved, you can open this document at this page using the link: "example_015.pdf#chapter2".'); + +$pdf->AddPage(); +$pdf->setDestination('chapter3', 0, ''); +$pdf->SetFont('times', 'B', 20); +$pdf->Bookmark('Chapter 3', 0, 0, '', 'B', array(0,64,128)); +$pdf->Cell(0, 10, 'Chapter 3', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->setDestination('chapter4', 0, ''); +$pdf->SetFont('times', 'B', 20); +$pdf->Bookmark('Chapter 4', 0, 0, '', 'B', array(0,64,128)); +$pdf->Cell(0, 10, 'Chapter 4', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Chapter 5', 0, 0, '', 'B', array(0,128,0)); +$pdf->Cell(0, 10, 'Chapter 5', 0, 1, 'L'); +$txt = 'Example of File Attachment. +Double click on the icon to open the attached file.'; +$pdf->SetFont('helvetica', '', 10); +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// attach an external file TXT file +$pdf->Annotation(20, 50, 5, 5, 'TXT file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'data/utf8test.txt')); + +// attach an external file +$pdf->Annotation(50, 50, 5, 5, 'PDF file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'example_012.pdf')); + +// add a bookmark that points to an embedded file +// NOTE: prefix the file name with the * character for generic file and with % character for PDF file +$pdf->Bookmark('TXT file', 0, 0, '', 'B', array(128,0,255), -1, '*utf8test.txt'); + +// add a bookmark that points to an embedded file +// NOTE: prefix the file name with the * character for generic file and with % character for PDF file +$pdf->Bookmark('PDF file', 0, 0, '', 'B', array(128,0,255), -1, '%example_012.pdf'); + +// add a bookmark that points to an external URL +$pdf->Bookmark('External URL', 0, 0, '', 'B', array(0,0,255), -1, 'http://www.tcpdf.org'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_015.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_016.php b/tcpdf/examples/example_016.php new file mode 100644 index 0000000..34284f2 --- /dev/null +++ b/tcpdf/examples/example_016.php @@ -0,0 +1,134 @@ +<?php +//============================================================+ +// File name : example_016.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 016 for TCPDF class +// Document Encryption / Security +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Document Encryption / Security + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + +// *** Set PDF protection (encryption) ********************* + +/* + The permission array is composed of values taken from the following ones (specify the ones you want to block): + - print : Print the document; + - modify : Modify the contents of the document by operations other than those controlled by 'fill-forms', 'extract' and 'assemble'; + - copy : Copy or otherwise extract text and graphics from the document; + - annot-forms : Add or modify text annotations, fill in interactive form fields, and, if 'modify' is also set, create or modify interactive form fields (including signature fields); + - fill-forms : Fill in existing interactive form fields (including signature fields), even if 'annot-forms' is not specified; + - extract : Extract text and graphics (in support of accessibility to users with disabilities or for other purposes); + - assemble : Assemble the document (insert, rotate, or delete pages and create bookmarks or thumbnail images), even if 'modify' is not set; + - print-high : Print the document to a representation from which a faithful digital copy of the PDF content could be generated. When this is not set, printing is limited to a low-level representation of the appearance, possibly of degraded quality. + - owner : (inverted logic - only for public-key) when set permits change of encryption and enables all other permissions. + + If you don't set any password, the document will open as usual. + If you set a user password, the PDF viewer will ask for it before displaying the document. + The master (owner) password, if different from the user one, can be used to get full document access. + + Possible encryption modes are: + 0 = RSA 40 bit + 1 = RSA 128 bit + 2 = AES 128 bit + 3 = AES 256 bit + + NOTES: + - To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + - To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 + - To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes + +*/ + +$pdf->SetProtection(array('print', 'copy'), '', null, 0, null); + +// Example with public-key +// To open the document you need to install the private key (tcpdf.p12) on the Acrobat Reader. The password is: 1234 +//$pdf->SetProtection($permissions=array('print', 'copy'), $user_pass='', $owner_pass=null, $mode=1, $pubkeys=array(array('c' => 'file://../config/cert/tcpdf.crt', 'p' => array('print')))); + +// ********************************************************* + + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 016'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 016', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array('helvetica', '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array('helvetica', '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 16); + +// add a page +$pdf->AddPage(); + +// set some text to print +$txt = <<<EOD +Encryption Example + +Consult the source code documentation for the SetProtection() method. +EOD; + +// print a block of text using Write() +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_016.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_017.php b/tcpdf/examples/example_017.php new file mode 100644 index 0000000..1324091 --- /dev/null +++ b/tcpdf/examples/example_017.php @@ -0,0 +1,117 @@ +<?php +//============================================================+ +// File name : example_017.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 017 for TCPDF class +// Two independent columns with MultiCell +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Two independent columns with MultiCell + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 017'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 017', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of independent Multicell() columns', '', 0, 'L', true, 0, false, false, 0); + +$pdf->Ln(5); + +$pdf->SetFont('times', '', 12); + +// create columns content +// create columns content +$left_column = '[LEFT COLUMN] left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column'."\n"; + +$right_column = '[RIGHT COLUMN] right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column'."\n"; + +// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) + +// set color for background +$pdf->SetFillColor(255, 255, 200); + +// set color for text +$pdf->SetTextColor(0, 63, 127); + +// write the first column +$pdf->MultiCell(80, 0, $left_column, 1, 'J', 1, 0, '', '', true, 0, false, true, 0); + +// set color for background +$pdf->SetFillColor(215, 235, 255); + +// set color for text +$pdf->SetTextColor(127, 31, 0); + +// write the second column +$pdf->MultiCell(80, 0, $right_column, 1, 'J', 1, 1, '', '', true, 0, false, true, 0); + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_017.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_018.php b/tcpdf/examples/example_018.php new file mode 100644 index 0000000..a97a44a --- /dev/null +++ b/tcpdf/examples/example_018.php @@ -0,0 +1,128 @@ +<?php +//============================================================+ +// File name : example_018.php +// Begin : 2008-03-06 +// Last Update : 2013-05-14 +// +// Description : Example 018 for TCPDF class +// RTL document with Persian language +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: RTL document with Persian language + * @author Nicola Asuni + * @since 2008-03-06 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 018'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 018', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language dependent data: +$lg = Array(); +$lg['a_meta_charset'] = 'UTF-8'; +$lg['a_meta_dir'] = 'rtl'; +$lg['a_meta_language'] = 'fa'; +$lg['w_page'] = 'page'; + +// set some language-dependent strings (optional) +$pdf->setLanguageArray($lg); + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('dejavusans', '', 12); + +// add a page +$pdf->AddPage(); + +// Persian and English content +$htmlpersian = '<span color="#660000">Persian example:</span><br />سلام بالاخره مشکل PDF فارسی به طور کامل حل شد. اینم یک نمونش.<br />مشکل حرف \"ژ\" در بعضی کلمات مانند کلمه ویژه نیز بر طرف شد.<br />نگارش حروف لام و الف پشت سر هم نیز تصحیح شد.<br />با تشکر از "Asuni Nicola" و محمد علی گل کار برای پشتیبانی زبان فارسی.'; +$pdf->WriteHTML($htmlpersian, true, 0, true, 0); + +// set LTR direction for english translation +$pdf->setRTL(false); + +$pdf->SetFontSize(10); + +// print newline +$pdf->Ln(); + +// Persian and English content +$htmlpersiantranslation = '<span color="#0000ff">Hi, At last Problem of Persian PDF Solved completely. This is a example for it.<br />Problem of "jeh" letter in some word like "ویژه" (=special) fix too.<br />The joining of laa and alf letter fix now.<br />Special thanks to "Nicola Asuni" and "Mohamad Ali Golkar" for Persian support.</span>'; +$pdf->WriteHTML($htmlpersiantranslation, true, 0, true, 0); + +// Restore RTL direction +$pdf->setRTL(true); + +// set font +$pdf->SetFont('aefurat', '', 18); + +// print newline +$pdf->Ln(); + +// Arabic and English content +$pdf->Cell(0, 12, 'بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ',0,1,'C'); +$htmlcontent = 'تمَّ بِحمد الله حلّ مشكلة الكتابة باللغة العربية في ملفات الـ<span color="#FF0000">PDF</span> مع دعم الكتابة <span color="#0000FF">من اليمين إلى اليسار</span> و<span color="#009900">الحركَات</span> .<br />تم الحل بواسطة <span color="#993399">صالح المطرفي و Asuni Nicola</span> . '; +$pdf->WriteHTML($htmlcontent, true, 0, true, 0); + +// set LTR direction for english translation +$pdf->setRTL(false); + +// print newline +$pdf->Ln(); + +$pdf->SetFont('aealarabiya', '', 18); + +// Arabic and English content +$htmlcontent2 = '<span color="#0000ff">This is Arabic "العربية" Example With TCPDF.</span>'; +$pdf->WriteHTML($htmlcontent2, true, 0, true, 0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_018.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_019.php b/tcpdf/examples/example_019.php new file mode 100644 index 0000000..a1d5f08 --- /dev/null +++ b/tcpdf/examples/example_019.php @@ -0,0 +1,98 @@ +<?php +//============================================================+ +// File name : example_019.php +// Begin : 2008-03-07 +// Last Update : 2013-05-14 +// +// Description : Example 019 for TCPDF class +// Non unicode with alternative config file +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Non unicode with alternative config file + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false); + +// Set document information dictionary in unicode mode +$pdf->SetDocInfoUnicode(true); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni [€]'); +$pdf->SetTitle('TCPDF Example 019'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 019', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language dependent data: +$lg = Array(); +$lg['a_meta_charset'] = 'ISO-8859-1'; +$lg['a_meta_dir'] = 'ltr'; +$lg['a_meta_language'] = 'en'; +$lg['w_page'] = 'page'; + +// set some language-dependent strings (optional) +$pdf->setLanguageArray($lg); + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 12); + +// add a page +$pdf->AddPage(); + +// set color for background +$pdf->SetFillColor(200, 255, 200); + +$txt = 'An alternative configuration file is used on this example. +Check the definition of the K_TCPDF_EXTERNAL_CONFIG constant on the source code.'; + +// print some text +$pdf->MultiCell(0, 0, $txt."\n", 1, 'J', 1, 1, '', '', true, 0, false, true, 0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_019.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_020.php b/tcpdf/examples/example_020.php new file mode 100644 index 0000000..6204f74 --- /dev/null +++ b/tcpdf/examples/example_020.php @@ -0,0 +1,146 @@ +<?php +//============================================================+ +// File name : example_020.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 020 for TCPDF class +// Two columns composed by MultiCell of different +// heights +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** +* Creates an example PDF TEST document using TCPDF +* @package com.tecnick.tcpdf +* @abstract TCPDF - Example: Two columns composed by MultiCell of different heights +* @author Nicola Asuni +* @since 2008-03-04 +*/ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// extend TCPF with custom functions +class MYPDF extends TCPDF { + + public function MultiRow($left, $right) { + // MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0) + + $page_start = $this->getPage(); + $y_start = $this->GetY(); + + // write the left cell + $this->MultiCell(40, 0, $left, 1, 'R', 1, 2, '', '', true, 0); + + $page_end_1 = $this->getPage(); + $y_end_1 = $this->GetY(); + + $this->setPage($page_start); + + // write the right cell + $this->MultiCell(0, 0, $right, 1, 'J', 0, 1, $this->GetX() ,$y_start, true, 0); + + $page_end_2 = $this->getPage(); + $y_end_2 = $this->GetY(); + + // set the new row position by case + if (max($page_end_1,$page_end_2) == $page_start) { + $ynew = max($y_end_1, $y_end_2); + } elseif ($page_end_1 == $page_end_2) { + $ynew = max($y_end_1, $y_end_2); + } elseif ($page_end_1 > $page_end_2) { + $ynew = $y_end_1; + } else { + $ynew = $y_end_2; + } + + $this->setPage(max($page_end_1,$page_end_2)); + $this->SetXY($this->GetX(),$ynew); + } + +} + +// create new PDF document +$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 020'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 020', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 20); +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of text layout using Multicell()', '', 0, 'L', true, 0, false, false, 0); + +$pdf->Ln(5); + +$pdf->SetFont('times', '', 9); + +//$pdf->SetCellPadding(0); +//$pdf->SetLineWidth(2); + +// set color for background +$pdf->SetFillColor(255, 255, 200); + +$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. + +Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.'; + +// print some rows just as example +for ($i = 0; $i < 10; ++$i) { + $pdf->MultiRow('Row '.($i+1), $text."\n"); +} + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_020.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_021.php b/tcpdf/examples/example_021.php new file mode 100644 index 0000000..65e39fb --- /dev/null +++ b/tcpdf/examples/example_021.php @@ -0,0 +1,91 @@ +<?php +//============================================================+ +// File name : example_021.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 021 for TCPDF class +// WriteHTML text flow +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: WriteHTML text flow. + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 021'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 021', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 9); + +// add a page +$pdf->AddPage(); + +// create some HTML content +$html = '<h1>Example of HTML text flow</h1>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. <em>Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur?</em> <em>Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</em><br /><br /><b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i> -&gt; &nbsp;&nbsp; <b>A</b> + <b>B</b> = <b>C</b> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>B</i> = <i>A</i> &nbsp;&nbsp; -&gt; &nbsp;&nbsp; <i>C</i> - <i>A</i> = <i>B</i><br /><br /><b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u> <b>Bold</b><i>Italic</i><u>Underlined</u>'; + +// output the HTML content +$pdf->writeHTML($html, true, 0, true, 0); + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_021.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_022.php b/tcpdf/examples/example_022.php new file mode 100644 index 0000000..ca35d68 --- /dev/null +++ b/tcpdf/examples/example_022.php @@ -0,0 +1,146 @@ +<?php +//============================================================+ +// File name : example_022.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 022 for TCPDF class +// CMYK colors +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: CMYK colors. + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 022'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 022', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// check also the following methods: +// SetDrawColorArray() +// SetFillColorArray() +// SetTextColorArray() + +// set font +$pdf->SetFont('helvetica', 'B', 18); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of CMYK, RGB and Grayscale colours', '', 0, 'L', true, 0, false, false, 0); + +// define style for border +$border_style = array('all' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'phase' => 0)); + +// --- CMYK ------------------------------------------------ + +$pdf->SetDrawColor(50, 0, 0, 0); +$pdf->SetFillColor(100, 0, 0, 0); +$pdf->SetTextColor(100, 0, 0, 0); +$pdf->Rect(30, 60, 30, 30, 'DF', $border_style); +$pdf->Text(30, 92, 'Cyan'); + +$pdf->SetDrawColor(0, 50, 0, 0); +$pdf->SetFillColor(0, 100, 0, 0); +$pdf->SetTextColor(0, 100, 0, 0); +$pdf->Rect(70, 60, 30, 30, 'DF', $border_style); +$pdf->Text(70, 92, 'Magenta'); + +$pdf->SetDrawColor(0, 0, 50, 0); +$pdf->SetFillColor(0, 0, 100, 0); +$pdf->SetTextColor(0, 0, 100, 0); +$pdf->Rect(110, 60, 30, 30, 'DF', $border_style); +$pdf->Text(110, 92, 'Yellow'); + +$pdf->SetDrawColor(0, 0, 0, 50); +$pdf->SetFillColor(0, 0, 0, 100); +$pdf->SetTextColor(0, 0, 0, 100); +$pdf->Rect(150, 60, 30, 30, 'DF', $border_style); +$pdf->Text(150, 92, 'Black'); + +// --- RGB ------------------------------------------------- + +$pdf->SetDrawColor(255, 127, 127); +$pdf->SetFillColor(255, 0, 0); +$pdf->SetTextColor(255, 0, 0); +$pdf->Rect(30, 110, 30, 30, 'DF', $border_style); +$pdf->Text(30, 142, 'Red'); + +$pdf->SetDrawColor(127, 255, 127); +$pdf->SetFillColor(0, 255, 0); +$pdf->SetTextColor(0, 255, 0); +$pdf->Rect(70, 110, 30, 30, 'DF', $border_style); +$pdf->Text(70, 142, 'Green'); + +$pdf->SetDrawColor(127, 127, 255); +$pdf->SetFillColor(0, 0, 255); +$pdf->SetTextColor(0, 0, 255); +$pdf->Rect(110, 110, 30, 30, 'DF', $border_style); +$pdf->Text(110, 142, 'Blue'); + +// --- GRAY ------------------------------------------------ + +$pdf->SetDrawColor(191); +$pdf->SetFillColor(127); +$pdf->SetTextColor(127); +$pdf->Rect(30, 160, 30, 30, 'DF', $border_style); +$pdf->Text(30, 192, 'Gray'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_022.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_023.php b/tcpdf/examples/example_023.php new file mode 100644 index 0000000..dbb8b98 --- /dev/null +++ b/tcpdf/examples/example_023.php @@ -0,0 +1,113 @@ +<?php +//============================================================+ +// File name : example_023.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 023 for TCPDF class +// Page Groups +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Page Groups. + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 023'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 023', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', 'BI', 14); + +// Start First Page Group +$pdf->startPageGroup(); + +// add a page +$pdf->AddPage(); + +// set some text to print +$txt = <<<EOD +Example of page groups. +Check the page numbers on the page footer. + +This is the first page of group 1. +EOD; + +// print a block of text using Write() +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// add second page +$pdf->AddPage(); +$pdf->Cell(0, 10, 'This is the second page of group 1', 0, 1, 'L'); + +// Start Second Page Group +$pdf->startPageGroup(); + +// add some pages +$pdf->AddPage(); +$pdf->Cell(0, 10, 'This is the first page of group 2', 0, 1, 'L'); +$pdf->AddPage(); +$pdf->Cell(0, 10, 'This is the second page of group 2', 0, 1, 'L'); +$pdf->AddPage(); +$pdf->Cell(0, 10, 'This is the third page of group 2', 0, 1, 'L'); +$pdf->AddPage(); +$pdf->Cell(0, 10, 'This is the fourth page of group 2', 0, 1, 'L'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_023.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_024.php b/tcpdf/examples/example_024.php new file mode 100644 index 0000000..b60d12d --- /dev/null +++ b/tcpdf/examples/example_024.php @@ -0,0 +1,140 @@ +<?php +//============================================================+ +// File name : example_024.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 024 for TCPDF class +// Object Visibility and Layers +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Object Visibility and Layers + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 024'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 024', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 18); + +// add a page +$pdf->AddPage(); + +/* + * setVisibility() allows to restrict the rendering of some + * elements to screen or printout. This can be useful, for + * instance, to put a background image or color that will + * show on screen but won't print. + */ + +$txt = 'You can limit the visibility of PDF objects to screen or printer by using the setVisibility() method. +Check the print preview of this document to display the alternative text.'; + +$pdf->Write(0, $txt, '', 0, '', true, 0, false, false, 0); + +// change font size +$pdf->SetFontSize(40); + +// change text color +$pdf->SetTextColor(0,63,127); + +// set visibility only for screen +$pdf->setVisibility('screen'); + +// write something only for screen +$pdf->Write(0, '[This line is for display]', '', 0, 'C', true, 0, false, false, 0); + +// set visibility only for print +$pdf->setVisibility('print'); + +// change text color +$pdf->SetTextColor(127,0,0); + +// write something only for print +$pdf->Write(0, '[This line is for printout]', '', 0, 'C', true, 0, false, false, 0); + +// restore visibility +$pdf->setVisibility('all'); + +// --------------------------------------------------------- + +// LAYERS + +// start a new layer +$pdf->startLayer('layer1', true, true); + +// change font size +$pdf->SetFontSize(18); + +// change text color +$pdf->SetTextColor(0,127,0); + +$txt = 'Using the startLayer() method you can group PDF objects into layers. +This text is on "layer1".'; + +// write something +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// close the current layer +$pdf->endLayer(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_024.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_025.php b/tcpdf/examples/example_025.php new file mode 100644 index 0000000..1260d62 --- /dev/null +++ b/tcpdf/examples/example_025.php @@ -0,0 +1,118 @@ +<?php +//============================================================+ +// File name : example_025.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 025 for TCPDF class +// Object Transparency +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Object Transparency + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 025'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 025', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 12); + +// add a page +$pdf->AddPage(); + +$txt = 'You can set the transparency of PDF objects using the setAlpha() method.'; +$pdf->Write(0, $txt, '', 0, '', true, 0, false, false, 0); + +/* + * setAlpha() gives transparency support. You can set the + * alpha channel from 0 (fully transparent) to 1 (fully + * opaque). It applies to all elements (text, drawings, + * images). + */ + +$pdf->SetLineWidth(2); + +// draw opaque red square +$pdf->SetFillColor(255, 0, 0); +$pdf->SetDrawColor(127, 0, 0); +$pdf->Rect(30, 40, 60, 60, 'DF'); + +// set alpha to semi-transparency +$pdf->SetAlpha(0.5); + +// draw green square +$pdf->SetFillColor(0, 255, 0); +$pdf->SetDrawColor(0, 127, 0); +$pdf->Rect(50, 60, 60, 60, 'DF'); + +// draw blue square +$pdf->SetFillColor(0, 0, 255); +$pdf->SetDrawColor(0, 0, 127); +$pdf->Rect(70, 80, 60, 60, 'DF'); + +// draw jpeg image +$pdf->Image('images/image_demo.jpg', 90, 100, 60, 60, '', 'http://www.tcpdf.org', '', true, 72); + +// restore full opacity +$pdf->SetAlpha(1); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_025.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_026.php b/tcpdf/examples/example_026.php new file mode 100644 index 0000000..5646e91 --- /dev/null +++ b/tcpdf/examples/example_026.php @@ -0,0 +1,145 @@ +<?php +//============================================================+ +// File name : example_026.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 026 for TCPDF class +// Text Rendering Modes and Text Clipping +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Text Rendering Modes and Text Clipping + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 026'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 026', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 22); + +// add a page +$pdf->AddPage(); + +// set color for text stroke +$pdf->SetDrawColor(255,0,0); + + +$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=false); +$pdf->Write(0, 'Fill text', '', 0, '', true, 0, false, false, 0); + +$pdf->setTextRenderingMode($stroke=0.2, $fill=false, $clip=false); +$pdf->Write(0, 'Stroke text', '', 0, '', true, 0, false, false, 0); + +$pdf->setTextRenderingMode($stroke=0.2, $fill=true, $clip=false); +$pdf->Write(0, 'Fill, then stroke text', '', 0, '', true, 0, false, false, 0); + +$pdf->setTextRenderingMode($stroke=0, $fill=false, $clip=false); +$pdf->Write(0, 'Neither fill nor stroke text (invisible)', '', 0, '', true, 0, false, false, 0); + + +// * * * CLIPPING MODES * * * * * * * * * * * * * * * * * * + +$pdf->StartTransform(); +$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=true); +$pdf->Write(0, 'Fill text and add to path for clipping', '', 0, '', true, 0, false, false, 0); +$pdf->Image('images/image_demo.jpg', 15, 65, 170, 10, '', '', '', true, 72); +$pdf->StopTransform(); + +$pdf->StartTransform(); +$pdf->setTextRenderingMode($stroke=0.3, $fill=false, $clip=true); +$pdf->Write(0, 'Stroke text and add to path for clipping', '', 0, '', true, 0, false, false, 0); +$pdf->Image('images/image_demo.jpg', 15, 75, 170, 10, '', '', '', true, 72); +$pdf->StopTransform(); + +$pdf->StartTransform(); +$pdf->setTextRenderingMode($stroke=0.3, $fill=true, $clip=true); +$pdf->Write(0, 'Fill, then stroke text and add to path for clipping', '', 0, '', true, 0, false, false, 0); +$pdf->Image('images/image_demo.jpg', 15, 85, 170, 10, '', '', '', true, 72); +$pdf->StopTransform(); + +$pdf->StartTransform(); +$pdf->setTextRenderingMode($stroke=0, $fill=false, $clip=true); +$pdf->Write(0, 'Add text to path for clipping', '', 0, '', true, 0, false, false, 0); +$pdf->Image('images/image_demo.jpg', 15, 95, 170, 10, '', '', '', true, 72); +$pdf->StopTransform(); + +// reset text rendering mode +$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=false); + +// * * * HTML MODE * * * * * * * * * * * * * * * * * * * * * + +// The following attributes were added to HTML: +// stroke : stroke width +// strokecolor : stroke color +// fill : true (default) to fill the font, false otherwise + + +// create some HTML content with text rendering modes +$html = '<span stroke="0" fill="true">HTML Fill text</span><br />'; +$html .= '<span stroke="0.2" fill="false">HTML Stroke text</span><br />'; +$html .= '<span stroke="0.2" fill="true" strokecolor="#FF0000" color="#FFFF00">HTML Fill, then stroke text</span><br />'; +$html .= '<span stroke="0" fill="false">HTML Neither fill nor stroke text (invisible)</span><br />'; + +// output the HTML content +$pdf->writeHTML($html, true, 0, true, 0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_026.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_027.php b/tcpdf/examples/example_027.php new file mode 100644 index 0000000..a237074 --- /dev/null +++ b/tcpdf/examples/example_027.php @@ -0,0 +1,418 @@ +<?php +//============================================================+ +// File name : example_027.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 027 for TCPDF class +// 1D Barcodes +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: 1D Barcodes. + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 027'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 027', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set a barcode on the page footer +$pdf->setBarcode(date('Y-m-d H:i:s')); + +// set font +$pdf->SetFont('helvetica', '', 11); + +// add a page +$pdf->AddPage(); + +// print a message +$txt = "You can also export 1D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcodes directory.\n"; +$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false); +$pdf->SetY(30); + +// ----------------------------------------------------------------------------- + +$pdf->SetFont('helvetica', '', 10); + +// define barcode style +$style = array( + 'position' => '', + 'align' => 'C', + 'stretch' => false, + 'fitwidth' => true, + 'cellfitalign' => '', + 'border' => true, + 'hpadding' => 'auto', + 'vpadding' => 'auto', + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, //array(255,255,255), + 'text' => true, + 'font' => 'helvetica', + 'fontsize' => 8, + 'stretchtext' => 4 +); + +// PRINT VARIOUS 1D BARCODES + +// CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. +$pdf->Cell(0, 0, 'CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9', 0, 1); +$pdf->write1DBarcode('CODE 39', 'C39', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 39 + CHECKSUM +$pdf->Cell(0, 0, 'CODE 39 + CHECKSUM', 0, 1); +$pdf->write1DBarcode('CODE 39 +', 'C39+', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 39 EXTENDED +$pdf->Cell(0, 0, 'CODE 39 EXTENDED', 0, 1); +$pdf->write1DBarcode('CODE 39 E', 'C39E', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 39 EXTENDED + CHECKSUM +$pdf->Cell(0, 0, 'CODE 39 EXTENDED + CHECKSUM', 0, 1); +$pdf->write1DBarcode('CODE 39 E+', 'C39E+', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 93 - USS-93 +$pdf->Cell(0, 0, 'CODE 93 - USS-93', 0, 1); +$pdf->write1DBarcode('TEST93', 'C93', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// Standard 2 of 5 +$pdf->Cell(0, 0, 'Standard 2 of 5', 0, 1); +$pdf->write1DBarcode('1234567', 'S25', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// Standard 2 of 5 + CHECKSUM +$pdf->Cell(0, 0, 'Standard 2 of 5 + CHECKSUM', 0, 1); +$pdf->write1DBarcode('1234567', 'S25+', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// Interleaved 2 of 5 +$pdf->Cell(0, 0, 'Interleaved 2 of 5', 0, 1); +$pdf->write1DBarcode('1234567', 'I25', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// Interleaved 2 of 5 + CHECKSUM +$pdf->Cell(0, 0, 'Interleaved 2 of 5 + CHECKSUM', 0, 1); +$pdf->write1DBarcode('1234567', 'I25+', '', '', '', 18, 0.4, $style, 'N'); + + +// add a page ---------- +$pdf->AddPage(); + +// CODE 128 AUTO +$pdf->Cell(0, 0, 'CODE 128 AUTO', 0, 1); +$pdf->write1DBarcode('CODE 128 AUTO', 'C128', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 128 A +$pdf->Cell(0, 0, 'CODE 128 A', 0, 1); +$pdf->write1DBarcode('CODE 128 A', 'C128A', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 128 B +$pdf->Cell(0, 0, 'CODE 128 B', 0, 1); +$pdf->write1DBarcode('CODE 128 B', 'C128B', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 128 C +$pdf->Cell(0, 0, 'CODE 128 C', 0, 1); +$pdf->write1DBarcode('0123456789', 'C128C', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// EAN 8 +$pdf->Cell(0, 0, 'EAN 8', 0, 1); +$pdf->write1DBarcode('1234567', 'EAN8', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// EAN 13 +$pdf->Cell(0, 0, 'EAN 13', 0, 1); +$pdf->write1DBarcode('1234567890128', 'EAN13', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// UPC-A +$pdf->Cell(0, 0, 'UPC-A', 0, 1); +$pdf->write1DBarcode('12345678901', 'UPCA', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// UPC-E +$pdf->Cell(0, 0, 'UPC-E', 0, 1); +$pdf->write1DBarcode('04210000526', 'UPCE', '', '', '', 18, 0.4, $style, 'N'); + +// add a page ---------- +$pdf->AddPage(); + +// 5-Digits UPC-Based Extension +$pdf->Cell(0, 0, '5-Digits UPC-Based Extension', 0, 1); +$pdf->write1DBarcode('51234', 'EAN5', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// 2-Digits UPC-Based Extension +$pdf->Cell(0, 0, '2-Digits UPC-Based Extension', 0, 1); +$pdf->write1DBarcode('34', 'EAN2', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// MSI +$pdf->Cell(0, 0, 'MSI', 0, 1); +$pdf->write1DBarcode('80523', 'MSI', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// MSI + CHECKSUM (module 11) +$pdf->Cell(0, 0, 'MSI + CHECKSUM (module 11)', 0, 1); +$pdf->write1DBarcode('80523', 'MSI+', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODABAR +$pdf->Cell(0, 0, 'CODABAR', 0, 1); +$pdf->write1DBarcode('123456789', 'CODABAR', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// CODE 11 +$pdf->Cell(0, 0, 'CODE 11', 0, 1); +$pdf->write1DBarcode('123-456-789', 'CODE11', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// PHARMACODE +$pdf->Cell(0, 0, 'PHARMACODE', 0, 1); +$pdf->write1DBarcode('789', 'PHARMA', '', '', '', 18, 0.4, $style, 'N'); + +$pdf->Ln(); + +// PHARMACODE TWO-TRACKS +$pdf->Cell(0, 0, 'PHARMACODE TWO-TRACKS', 0, 1); +$pdf->write1DBarcode('105', 'PHARMA2T', '', '', '', 18, 2, $style, 'N'); + +// add a page ---------- +$pdf->AddPage(); + +// IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 +$pdf->Cell(0, 0, 'IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200', 0, 1); +$pdf->write1DBarcode('01234567094987654321-01234567891', 'IMB', '', '', '', 15, 0.6, $style, 'N'); + +$pdf->Ln(); + +// POSTNET +$pdf->Cell(0, 0, 'POSTNET', 0, 1); +$pdf->write1DBarcode('98000', 'POSTNET', '', '', '', 15, 0.6, $style, 'N'); + +$pdf->Ln(); + +// PLANET +$pdf->Cell(0, 0, 'PLANET', 0, 1); +$pdf->write1DBarcode('98000', 'PLANET', '', '', '', 15, 0.6, $style, 'N'); + +$pdf->Ln(); + +// RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) +$pdf->Cell(0, 0, 'RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)', 0, 1); +$pdf->write1DBarcode('SN34RD1A', 'RMS4CC', '', '', '', 15, 0.6, $style, 'N'); + +$pdf->Ln(); + +// KIX (Klant index - Customer index) +$pdf->Cell(0, 0, 'KIX (Klant index - Customer index)', 0, 1); +$pdf->write1DBarcode('SN34RDX1A', 'KIX', '', '', '', 15, 0.6, $style, 'N'); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// TEST BARCODE ALIGNMENTS + +// add a page +$pdf->AddPage(); + +// set a background color +$style['bgcolor'] = array(255,255,240); +$style['fgcolor'] = array(127,0,0); + +// Left position +$style['position'] = 'L'; +$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Center position +$style['position'] = 'C'; +$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Right position +$style['position'] = 'R'; +$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); +// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + +$style['fgcolor'] = array(0,127,0); +$style['position'] = ''; +$style['stretch'] = false; // disable stretch +$style['fitwidth'] = false; // disable fitwidth + +// Left alignment +$style['align'] = 'L'; +$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Center alignment +$style['align'] = 'C'; +$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Right alignment +$style['align'] = 'R'; +$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); +// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + +$style['fgcolor'] = array(0,64,127); +$style['position'] = ''; +$style['stretch'] = false; // disable stretch +$style['fitwidth'] = true; // disable fitwidth + +// Left alignment +$style['cellfitalign'] = 'L'; +$pdf->write1DBarcode('LEFT', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Center alignment +$style['cellfitalign'] = 'C'; +$pdf->write1DBarcode('CENTER', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Right alignment +$style['cellfitalign'] = 'R'; +$pdf->write1DBarcode('RIGHT', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); + +$pdf->Ln(2); +// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + +$style['fgcolor'] = array(127,0,127); + +// Left alignment +$style['position'] = 'L'; +$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Center alignment +$style['position'] = 'C'; +$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +$pdf->Ln(2); + +// Right alignment +$style['position'] = 'R'; +$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// TEST BARCODE STYLE + +// define barcode style +$style = array( + 'position' => '', + 'align' => '', + 'stretch' => true, + 'fitwidth' => false, + 'cellfitalign' => '', + 'border' => true, + 'hpadding' => 'auto', + 'vpadding' => 'auto', + 'fgcolor' => array(0,0,128), + 'bgcolor' => array(255,255,128), + 'text' => true, + 'label' => 'CUSTOM LABEL', + 'font' => 'helvetica', + 'fontsize' => 8, + 'stretchtext' => 4 +); + +// CODE 39 EXTENDED + CHECKSUM +$pdf->Cell(0, 0, 'CODE 39 EXTENDED + CHECKSUM', 0, 1); +$pdf->SetLineStyle(array('width' => 1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); +$pdf->write1DBarcode('CODE 39 E+', 'C39E+', '', '', 120, 25, 0.4, $style, 'N'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_027.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_028.php b/tcpdf/examples/example_028.php new file mode 100644 index 0000000..f250ac5 --- /dev/null +++ b/tcpdf/examples/example_028.php @@ -0,0 +1,138 @@ +<?php +//============================================================+ +// File name : example_028.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 028 for TCPDF class +// Changing page formats +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: changing page formats + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 028'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// remove default header/footer +$pdf->setPrintHeader(false); +$pdf->setPrintFooter(false); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(10, PDF_MARGIN_TOP, 10); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +$pdf->SetDisplayMode('fullpage', 'SinglePage', 'UseNone'); + +// set font +$pdf->SetFont('times', 'B', 20); + +$pdf->AddPage('P', 'A4'); +$pdf->Cell(0, 0, 'A4 PORTRAIT', 1, 1, 'C'); + +$pdf->AddPage('L', 'A4'); +$pdf->Cell(0, 0, 'A4 LANDSCAPE', 1, 1, 'C'); + +$pdf->AddPage('P', 'A5'); +$pdf->Cell(0, 0, 'A5 PORTRAIT', 1, 1, 'C'); + +$pdf->AddPage('L', 'A5'); +$pdf->Cell(0, 0, 'A5 LANDSCAPE', 1, 1, 'C'); + +$pdf->AddPage('P', 'A6'); +$pdf->Cell(0, 0, 'A6 PORTRAIT', 1, 1, 'C'); + +$pdf->AddPage('L', 'A6'); +$pdf->Cell(0, 0, 'A6 LANDSCAPE', 1, 1, 'C'); + +$pdf->AddPage('P', 'A7'); +$pdf->Cell(0, 0, 'A7 PORTRAIT', 1, 1, 'C'); + +$pdf->AddPage('L', 'A7'); +$pdf->Cell(0, 0, 'A7 LANDSCAPE', 1, 1, 'C'); + + +// --- test backward editing --- + + +$pdf->setPage(1, true); +$pdf->SetY(50); +$pdf->Cell(0, 0, 'A4 test', 1, 1, 'C'); + +$pdf->setPage(2, true); +$pdf->SetY(50); +$pdf->Cell(0, 0, 'A4 test', 1, 1, 'C'); + +$pdf->setPage(3, true); +$pdf->SetY(50); +$pdf->Cell(0, 0, 'A5 test', 1, 1, 'C'); + +$pdf->setPage(4, true); +$pdf->SetY(50); +$pdf->Cell(0, 0, 'A5 test', 1, 1, 'C'); + +$pdf->setPage(5, true); +$pdf->SetY(50); +$pdf->Cell(0, 0, 'A6 test', 1, 1, 'C'); + +$pdf->setPage(6, true); +$pdf->SetY(50); +$pdf->Cell(0, 0, 'A6 test', 1, 1, 'C'); + +$pdf->setPage(7, true); +$pdf->SetY(40); +$pdf->Cell(0, 0, 'A7 test', 1, 1, 'C'); + +$pdf->setPage(8, true); +$pdf->SetY(40); +$pdf->Cell(0, 0, 'A7 test', 1, 1, 'C'); + +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_028.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_029.php b/tcpdf/examples/example_029.php new file mode 100644 index 0000000..33be97e --- /dev/null +++ b/tcpdf/examples/example_029.php @@ -0,0 +1,124 @@ +<?php +//============================================================+ +// File name : example_029.php +// Begin : 2008-06-09 +// Last Update : 2013-05-14 +// +// Description : Example 029 for TCPDF class +// Set PDF viewer display preferences. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Set PDF viewer display preferences. + * @author Nicola Asuni + * @since 2008-06-09 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 029'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 029', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set array for viewer preferences +$preferences = array( + 'HideToolbar' => true, + 'HideMenubar' => true, + 'HideWindowUI' => true, + 'FitWindow' => true, + 'CenterWindow' => true, + 'DisplayDocTitle' => true, + 'NonFullScreenPageMode' => 'UseNone', // UseNone, UseOutlines, UseThumbs, UseOC + 'ViewArea' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox + 'ViewClip' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox + 'PrintArea' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox + 'PrintClip' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox + 'PrintScaling' => 'AppDefault', // None, AppDefault + 'Duplex' => 'DuplexFlipLongEdge', // Simplex, DuplexFlipShortEdge, DuplexFlipLongEdge + 'PickTrayByPDFSize' => true, + 'PrintPageRange' => array(1,1,2,3), + 'NumCopies' => 2 +); + +// Check the example n. 60 for advanced page settings + +// set pdf viewer preferences +$pdf->setViewerPreferences($preferences); + +// set font +$pdf->SetFont('times', '', 14); + +// add a page +$pdf->AddPage(); + +// print a line +$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 1', 1, 1, 'C'); + +$pdf->Ln(5); + +$pdf->Write(0, 'You can use the setViewerPreferences() method to change viewer preferences.', '', 0, 'L', true, 0, false, false, 0); + +// add a page +$pdf->AddPage(); +// print a line +$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 2', 0, 0, 'C'); + +// add a page +$pdf->AddPage(); +// print a line +$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 3', 0, 0, 'C'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_029.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_030.php b/tcpdf/examples/example_030.php new file mode 100644 index 0000000..ed4e799 --- /dev/null +++ b/tcpdf/examples/example_030.php @@ -0,0 +1,188 @@ +<?php +//============================================================+ +// File name : example_030.php +// Begin : 2008-06-09 +// Last Update : 2013-05-14 +// +// Description : Example 030 for TCPDF class +// Colour gradients +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Colour gradients + * @author Nicola Asuni + * @since 2008-06-09 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 030'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 030', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// --- first page ------------------------------------------ + +// add a page +$pdf->AddPage(); + +$pdf->Cell(0, 0, 'TCPDF Gradients', 0, 1, 'C', 0, '', 0, false, 'T', 'M'); + +// set colors for gradients (r,g,b) or (grey 0-255) +$red = array(255, 0, 0); +$blue = array(0, 0, 200); +$yellow = array(255, 255, 0); +$green = array(0, 255, 0); +$white = array(255); +$black = array(0); + +// set the coordinates x1,y1,x2,y2 of the gradient (see linear_gradient_coords.jpg) +$coords = array(0, 0, 1, 0); + +// paint a linear gradient +$pdf->LinearGradient(20, 45, 80, 80, $red, $blue, $coords); + +// write label +$pdf->Text(20, 130, 'LinearGradient()'); + +// set the coordinates fx,fy,cx,cy,r of the gradient (see radial_gradient_coords.jpg) +$coords = array(0.5, 0.5, 1, 1, 1.2); + +// paint a radial gradient +$pdf->RadialGradient(110, 45, 80, 80, $white, $black, $coords); + +// write label +$pdf->Text(110, 130, 'RadialGradient()'); + +// paint a coons patch mesh with default coordinates +$pdf->CoonsPatchMesh(20, 155, 80, 80, $yellow, $blue, $green, $red); + +// write label +$pdf->Text(20, 240, 'CoonsPatchMesh()'); + +// set the coordinates for the cubic Bézier points x1,y1 ... x12, y12 of the patch (see coons_patch_mesh_coords.jpg) +$coords = array( + 0.00,0.00, 0.33,0.20, //lower left + 0.67,0.00, 1.00,0.00, 0.80,0.33, //lower right + 0.80,0.67, 1.00,1.00, 0.67,0.80, //upper right + 0.33,1.00, 0.00,1.00, 0.20,0.67, //upper left + 0.00,0.33); //lower left +$coords_min = 0; //minimum value of the coordinates +$coords_max = 1; //maximum value of the coordinates + +// paint a coons patch gradient with the above coordinates +$pdf->CoonsPatchMesh(110, 155, 80, 80, $yellow, $blue, $green, $red, $coords, $coords_min, $coords_max); + +// write label +$pdf->Text(110, 240, 'CoonsPatchMesh()'); + +// --- second page ----------------------------------------- +$pdf->AddPage(); + +// first patch: f = 0 +$patch_array[0]['f'] = 0; +$patch_array[0]['points'] = array( + 0.00,0.00, 0.33,0.00, + 0.67,0.00, 1.00,0.00, 1.00,0.33, + 0.8,0.67, 1.00,1.00, 0.67,0.8, + 0.33,1.80, 0.00,1.00, 0.00,0.67, + 0.00,0.33); +$patch_array[0]['colors'][0] = array('r' => 255, 'g' => 255, 'b' => 0); +$patch_array[0]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 255); +$patch_array[0]['colors'][2] = array('r' => 0, 'g' => 255,'b' => 0); +$patch_array[0]['colors'][3] = array('r' => 255, 'g' => 0,'b' => 0); + +// second patch - above the other: f = 2 +$patch_array[1]['f'] = 2; +$patch_array[1]['points'] = array( + 0.00,1.33, + 0.00,1.67, 0.00,2.00, 0.33,2.00, + 0.67,2.00, 1.00,2.00, 1.00,1.67, + 1.5,1.33); +$patch_array[1]['colors'][0]=array('r' => 0, 'g' => 0, 'b' => 0); +$patch_array[1]['colors'][1]=array('r' => 255, 'g' => 0, 'b' => 255); + +// third patch - right of the above: f = 3 +$patch_array[2]['f'] = 3; +$patch_array[2]['points'] = array( + 1.33,0.80, + 1.67,1.50, 2.00,1.00, 2.00,1.33, + 2.00,1.67, 2.00,2.00, 1.67,2.00, + 1.33,2.00); +$patch_array[2]['colors'][0] = array('r' => 0, 'g' => 255, 'b' => 255); +$patch_array[2]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 0); + +// fourth patch - below the above, which means left(?) of the above: f = 1 +$patch_array[3]['f'] = 1; +$patch_array[3]['points'] = array( + 2.00,0.67, + 2.00,0.33, 2.00,0.00, 1.67,0.00, + 1.33,0.00, 1.00,0.00, 1.00,0.33, + 0.8,0.67); +$patch_array[3]['colors'][0] = array('r' => 0, 'g' => 0, 'b' => 0); +$patch_array[3]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 255); + +$coords_min = 0; +$coords_max = 2; + +$pdf->CoonsPatchMesh(10, 45, 190, 200, '', '', '', '', $patch_array, $coords_min, $coords_max); + +// write label +$pdf->Text(10, 250, 'CoonsPatchMesh()'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_030.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_031.php b/tcpdf/examples/example_031.php new file mode 100644 index 0000000..160d162 --- /dev/null +++ b/tcpdf/examples/example_031.php @@ -0,0 +1,103 @@ +<?php +//============================================================+ +// File name : example_031.php +// Begin : 2008-06-09 +// Last Update : 2013-05-14 +// +// Description : Example 031 for TCPDF class +// Pie Chart +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Pie Chart + * @author Nicola Asuni + * @since 2008-06-09 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 031'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 031', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of PieSector() method.'); + +$xc = 105; +$yc = 100; +$r = 50; + +$pdf->SetFillColor(0, 0, 255); +$pdf->PieSector($xc, $yc, $r, 20, 120, 'FD', false, 0, 2); + +$pdf->SetFillColor(0, 255, 0); +$pdf->PieSector($xc, $yc, $r, 120, 250, 'FD', false, 0, 2); + +$pdf->SetFillColor(255, 0, 0); +$pdf->PieSector($xc, $yc, $r, 250, 20, 'FD', false, 0, 2); + +// write labels +$pdf->SetTextColor(255,255,255); +$pdf->Text(105, 65, 'BLUE'); +$pdf->Text(60, 95, 'GREEN'); +$pdf->Text(120, 115, 'RED'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_031.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_032.php b/tcpdf/examples/example_032.php new file mode 100644 index 0000000..b38f5ae --- /dev/null +++ b/tcpdf/examples/example_032.php @@ -0,0 +1,91 @@ +<?php +//============================================================+ +// File name : example_032.php +// Begin : 2008-06-09 +// Last Update : 2013-06-19 +// +// Description : Example 032 for TCPDF class +// EPS/AI image +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: EPS/AI image + * @author Nicola Asuni + * @since 2008-06-09 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 032'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 032', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 12); + +$pdf->AddPage(); + +$html = <<<EOD +Example of ImageEPS() method for AI and EPS images<br /> +NOTE: <i>Please use SVG format for a better vector support</i>. +EOD; + +// Print text using writeHTMLCell() +$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + +$pdf->ImageEps('images/tcpdf_box.ai', 10, 40, 150, '', 'http://www.tcpdf.org', true, '', '', 0, false); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_032.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_033.php b/tcpdf/examples/example_033.php new file mode 100644 index 0000000..4f95e40 --- /dev/null +++ b/tcpdf/examples/example_033.php @@ -0,0 +1,105 @@ +<?php +//============================================================+ +// File name : example_033.php +// Begin : 2008-06-24 +// Last Update : 2013-05-14 +// +// Description : Example 033 for TCPDF class +// Mixed font types +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Mixed font types + * @author Nicola Asuni + * @since 2008-06-24 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 033'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 033', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// add a page +$pdf->AddPage(); + +// set default font subsetting mode +$pdf->setFontSubsetting(false); + +$pdf->SetFont('helvetica', 'B', 20); + +$pdf->Write(0, 'Font Types', '', 0, 'C', 1, 0, false, false, 0); + +$pdf->Ln(10); + +$pdf->SetFont('times', '', 10); + +$pdf->MultiCell(80, 0, "[Core font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); + +$pdf->Ln(2); + +$pdf->SetFont('dejavusans', '', 10); + +$pdf->MultiCell(80, 0, "[True Type Unicode font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); + +$pdf->Ln(2); + +$pdf->SetFont('cid0jp', '', 9); + +$pdf->MultiCell(80, 0, "[CID-0 font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); + + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_033.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_034.php b/tcpdf/examples/example_034.php new file mode 100644 index 0000000..bb15902 --- /dev/null +++ b/tcpdf/examples/example_034.php @@ -0,0 +1,96 @@ +<?php +//============================================================+ +// File name : example_034.php +// Begin : 2008-07-18 +// Last Update : 2013-05-14 +// +// Description : Example 034 for TCPDF class +// Clipping +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Clipping + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 034'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 034', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Image Clipping using geometric functions', '', 0, 'C', 1, 0, false, false, 0); + +//Start Graphic Transformation +$pdf->StartTransform(); + +// set clipping mask +$pdf->StarPolygon(105, 100, 30, 10, 3, 0, 1, 'CNZ'); + +// draw jpeg image to be clipped +$pdf->Image('images/image_demo.jpg', 75, 70, 60, 60, '', 'http://www.tcpdf.org', '', true, 72); + +//Stop Graphic Transformation +$pdf->StopTransform(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_034.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_035.php b/tcpdf/examples/example_035.php new file mode 100644 index 0000000..0e5280c --- /dev/null +++ b/tcpdf/examples/example_035.php @@ -0,0 +1,111 @@ +<?php +//============================================================+ +// File name : example_035.php +// Begin : 2008-07-22 +// Last Update : 2013-05-14 +// +// Description : Example 035 for TCPDF class +// Line styles with cells and multicells +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Line styles with cells and multicells + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 035'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 035', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', 'BI', 16); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of SetLineStyle() method', '', 0, 'L', true, 0, false, false, 0); + +$pdf->Ln(); + +$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 4, 'color' => array(255, 0, 0))); +$pdf->SetFillColor(255,255,128); +$pdf->SetTextColor(0,0,128); + +$text="DUMMY"; + +$pdf->Cell(0, 0, $text, 1, 1, 'L', 1, 0); + +$pdf->Ln(); + +$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 255))); +$pdf->SetFillColor(255,255,0); +$pdf->SetTextColor(0,0,255); +$pdf->MultiCell(60, 4, $text, 1, 'C', 1, 0); + +$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 255, 0))); +$pdf->SetFillColor(0,0,255); +$pdf->SetTextColor(255,255,0); +$pdf->MultiCell(60, 4, $text, 'TB', 'C', 1, 0); + +$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 255))); +$pdf->SetFillColor(0,255,0); +$pdf->SetTextColor(255,0,255); +$pdf->MultiCell(60, 4, $text, 1, 'C', 1, 1); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_035.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_036.php b/tcpdf/examples/example_036.php new file mode 100644 index 0000000..2625497 --- /dev/null +++ b/tcpdf/examples/example_036.php @@ -0,0 +1,89 @@ +<?php +//============================================================+ +// File name : example_036.php +// Begin : 2008-08-08 +// Last Update : 2013-05-14 +// +// Description : Example 036 for TCPDF class +// Annotations +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Annotations + * @author Nicola Asuni + * @since 2008-08-08 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 036'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 036', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 16); + +// add a page +$pdf->AddPage(); + +$txt = 'Example of Text Annotation. +Move your mouse over the yellow box or double click on it to display the annotation text.'; +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// text annotation +$pdf->Annotation(83, 27, 10, 10, "Text annotation example\naccented letters test: àèéìòù", array('Subtype'=>'Text', 'Name' => 'Comment', 'T' => 'title example', 'Subj' => 'example', 'C' => array(255, 255, 0))); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_036.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_037.php b/tcpdf/examples/example_037.php new file mode 100644 index 0000000..deb7d92 --- /dev/null +++ b/tcpdf/examples/example_037.php @@ -0,0 +1,147 @@ +<?php +//============================================================+ +// File name : example_037.php +// Begin : 2008-09-12 +// Last Update : 2013-09-30 +// +// Description : Example 037 for TCPDF class +// Spot colors +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Spot colors. + * @author Nicola Asuni + * @since 2008-09-12 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 037'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 037', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 11); + +// add a page +$pdf->AddPage(); + +$html = '<h1>Example of Spot Colors</h1>Spot colors are single ink colors, rather than colors produced by four (CMYK), six (CMYKOG) or more inks in the printing process (process colors). They can be obtained by special vendors, but often the printers have found their own way of mixing inks to match defined colors.<br /><br />As long as no open standard for spot colours exists, TCPDF users will have to buy a colour book by one of the colour manufacturers and insert the values and names of spot colours directly into the $spotcolor array in <b><em>include/tcpdf_colors.php</em></b> file, or define them using the <b><em>AddSpotColor()</em></b> method.<br /><br />Common industry standard spot colors are:<br /><span color="#008800">ANPA-COLOR, DIC, FOCOLTONE, GCMI, HKS, PANTONE, TOYO, TRUMATCH</span>.'; + +// Print text using writeHTMLCell() +$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, 'J', true); + + +$pdf->SetFont('helvetica', '', 10); + +// Define some new spot colors +// $c, $m, $y and $k (2nd, 3rd, 4th and 5th parameter) are the CMYK color components. +// AddSpotColor($name, $c, $m, $y, $k) + +$pdf->AddSpotColor('My TCPDF Dark Green', 100, 50, 80, 45); +$pdf->AddSpotColor('My TCPDF Light Yellow', 0, 0, 55, 0); +$pdf->AddSpotColor('My TCPDF Black', 0, 0, 0, 100); +$pdf->AddSpotColor('My TCPDF Red', 30, 100, 90, 10); +$pdf->AddSpotColor('My TCPDF Green', 100, 30, 100, 0); +$pdf->AddSpotColor('My TCPDF Blue', 100, 60, 10, 5); +$pdf->AddSpotColor('My TCPDF Yellow', 0, 20, 100, 0); + +// Select the spot color +// $tint (the second parameter) is the intensity of the color (0-100). +// SetTextSpotColor($name, $tint=100) +// SetDrawSpotColor($name, $tint=100) +// SetFillSpotColor($name, $tint=100) + +$pdf->SetTextSpotColor('My TCPDF Black', 100); +$pdf->SetDrawSpotColor('My TCPDF Black', 100); + +$starty = 100; + +// print some spot colors + +$pdf->SetFillSpotColor('My TCPDF Dark Green', 100); +$pdf->Rect(30, $starty, 40, 20, 'DF'); +$pdf->Text(73, $starty + 8, 'My TCPDF Dark Green'); + +$starty += 24; +$pdf->SetFillSpotColor('My TCPDF Light Yellow', 100); +$pdf->Rect(30, $starty, 40, 20, 'DF'); +$pdf->Text(73, $starty + 8, 'My TCPDF Light Yellow'); + + +// --- default values defined on spotcolors.php --- + +$starty += 24; +$pdf->SetFillSpotColor('My TCPDF Red', 100); +$pdf->Rect(30, $starty, 40, 20, 'DF'); +$pdf->Text(73, $starty + 8, 'My TCPDF Red'); + +$starty += 24; +$pdf->SetFillSpotColor('My TCPDF Green', 100); +$pdf->Rect(30, $starty, 40, 20, 'DF'); +$pdf->Text(73, $starty + 8, 'My TCPDF Green'); + +$starty += 24; +$pdf->SetFillSpotColor('My TCPDF Blue', 100); +$pdf->Rect(30, $starty, 40, 20, 'DF'); +$pdf->Text(73, $starty + 8, 'My TCPDF Blue'); + +$starty += 24; +$pdf->SetFillSpotColor('My TCPDF Yellow', 100); +$pdf->Rect(30, $starty, 40, 20, 'DF'); +$pdf->Text(73, $starty + 8, 'My TCPDF Yellow'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_037.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_038.php b/tcpdf/examples/example_038.php new file mode 100644 index 0000000..a1e57e2 --- /dev/null +++ b/tcpdf/examples/example_038.php @@ -0,0 +1,92 @@ +<?php +//============================================================+ +// File name : example_038.php +// Begin : 2008-09-15 +// Last Update : 2013-05-14 +// +// Description : Example 038 for TCPDF class +// CID-0 CJK unembedded font +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: CID-0 CJK unembedded font + * @author Nicola Asuni + * @since 2008-09-15 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 038'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 038', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 20); + +// add a page +$pdf->AddPage(); + +$txt = 'Example of CID-0 CJK unembedded font. +To display extended text you must have CJK fonts installed for your PDF reader:'; +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// set font +$pdf->SetFont('cid0jp', '', 40); + +$txt = 'こんにちは世界'; +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_038.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_039.php b/tcpdf/examples/example_039.php new file mode 100644 index 0000000..4a8775c --- /dev/null +++ b/tcpdf/examples/example_039.php @@ -0,0 +1,104 @@ +<?php +//============================================================+ +// File name : example_039.php +// Begin : 2008-10-16 +// Last Update : 2014-01-13 +// +// Description : Example 039 for TCPDF class +// HTML justification +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: HTML justification + * @author Nicola Asuni + * @since 2008-10-18 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 039'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 039', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// add a page +$pdf->AddPage(); + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +$pdf->Write(0, 'Example of HTML Justification', '', 0, 'L', true, 0, false, false, 0); + +// create some HTML content +$html = '<span style="text-align:justify;">a <u>abc</u> abcdefghijkl (abcdef) abcdefg <b>abcdefghi</b> a ((abc)) abcd <img src="images/logo_example.png" border="0" height="41" width="41" /> <img src="images/tcpdf_box.svg" alt="test alt attribute" width="80" height="60" border="0" /> abcdef abcdefg <b>abcdefghi</b> a abc abcd abcdef abcdefg <b>abcdefghi</b> a abc abcd abcdef abcdefg <b>abcdefghi</b> a <u>abc</u> abcd abcdef abcdefg <b>abcdefghi</b> a abc \(abcd\) abcdef abcdefg <b>abcdefghi</b> a abc \\\(abcd\\\) abcdef abcdefg <b>abcdefghi</b> a abc abcd abcdef abcdefg <b>abcdefghi</b> a abc abcd abcdef abcdefg <b>abcdefghi</b> a abc abcd abcdef abcdefg abcdefghi a abc abcd <a href="http://tcpdf.org">abcdef abcdefg</a> start a abc before <span style="background-color:yellow">yellow color</span> after a abc abcd abcdef abcdefg abcdefghi a abc abcd end abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi<br />abcd abcdef abcdefg abcdefghi<br />abcd abcde abcdef</span>'; + +// set core font +$pdf->SetFont('helvetica', '', 10); + +// output the HTML content +$pdf->writeHTML($html, true, 0, true, true); + +$pdf->Ln(); + +// set UTF-8 Unicode font +$pdf->SetFont('dejavusans', '', 10); + +// output the HTML content +$pdf->writeHTML($html, true, 0, true, true); + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_039.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_040.php b/tcpdf/examples/example_040.php new file mode 100644 index 0000000..c1d9091 --- /dev/null +++ b/tcpdf/examples/example_040.php @@ -0,0 +1,116 @@ +<?php +//============================================================+ +// File name : example_040.php +// Begin : 2008-10-28 +// Last Update : 2013-05-14 +// +// Description : Example 040 for TCPDF class +// Booklet mode (double-sided pages) +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Booklet mode (double-sided pages) + * @author Nicola Asuni + * @since 2008-10-28 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 040'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 040', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set display mode +$pdf->SetDisplayMode($zoom='fullpage', $layout='TwoColumnRight', $mode='UseNone'); + +// set pdf viewer preferences +$pdf->setViewerPreferences(array('Duplex' => 'DuplexFlipLongEdge')); + +// set booklet mode +$pdf->SetBooklet(true, 10, 30); + +// set core font +$pdf->SetFont('helvetica', '', 18); + +// add a page (left page) +$pdf->AddPage(); + +$pdf->Write(0, 'Example of booklet mode', '', 0, 'L', true, 0, false, false, 0); + +// print a line using Cell() +$pdf->Cell(0, 0, 'PAGE 1', 1, 1, 'C'); + + +// add a page (right page) +$pdf->AddPage(); + +// print a line using Cell() +$pdf->Cell(0, 0, 'PAGE 2', 1, 1, 'C'); + + +// add a page (left page) +$pdf->AddPage(); + +// print a line using Cell() +$pdf->Cell(0, 0, 'PAGE 3', 1, 1, 'C'); + +// add a page (right page) +$pdf->AddPage(); + +// print a line using Cell() +$pdf->Cell(0, 0, 'PAGE 4', 1, 1, 'C'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_040.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_041.php b/tcpdf/examples/example_041.php new file mode 100644 index 0000000..973bdf9 --- /dev/null +++ b/tcpdf/examples/example_041.php @@ -0,0 +1,90 @@ +<?php +//============================================================+ +// File name : example_041.php +// Begin : 2008-12-07 +// Last Update : 2013-05-14 +// +// Description : Example 041 for TCPDF class +// Annotation - FileAttachment +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Annotation - FileAttachment + * @author Nicola Asuni + * @since 2008-12-07 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 041'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 041', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 16); + +// add a page +$pdf->AddPage(); + + +$txt = 'Example of File Attachment. +Double click on the icon to open the attached file.'; +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// attach an external file +$pdf->Annotation(85, 27, 5, 5, 'text file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'data/utf8test.txt')); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_041.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_042.php b/tcpdf/examples/example_042.php new file mode 100644 index 0000000..14c9fd0 --- /dev/null +++ b/tcpdf/examples/example_042.php @@ -0,0 +1,102 @@ +<?php +//============================================================+ +// File name : example_042.php +// Begin : 2008-12-23 +// Last Update : 2013-05-14 +// +// Description : Example 042 for TCPDF class +// Test Image with alpha channel +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Test Image with alpha channel + * @author Nicola Asuni + * @since 2008-12-23 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 042'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 042', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set JPEG quality +//$pdf->setJPEGQuality(75); + +$pdf->SetFont('helvetica', '', 18); + +// add a page +$pdf->AddPage(); + +// create background text +$background_text = str_repeat('TCPDF test PNG Alpha Channel ', 50); +$pdf->MultiCell(0, 5, $background_text, 0, 'J', 0, 2, '', '', true, 0, false); + +// --- Method (A) ------------------------------------------ +// the Image() method recognizes the alpha channel embedded on the image: + +$pdf->Image('images/image_with_alpha.png', 50, 50, 100, '', '', 'http://www.tcpdf.org', '', false, 300); + +// --- Method (B) ------------------------------------------ +// provide image + separate 8-bit mask + +// first embed mask image (w, h, x and y will be ignored, the image will be scaled to the target image's size) +$mask = $pdf->Image('images/alpha.png', 50, 140, 100, '', '', '', '', false, 300, '', true); + +// embed image, masked with previously embedded mask +$pdf->Image('images/img.png', 50, 140, 100, '', '', 'http://www.tcpdf.org', '', false, 300, '', false, $mask); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_042.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_043.php b/tcpdf/examples/example_043.php new file mode 100644 index 0000000..116827e --- /dev/null +++ b/tcpdf/examples/example_043.php @@ -0,0 +1,85 @@ +<?php +//============================================================+ +// File name : example_043.php +// Begin : 2009-01-02 +// Last Update : 2013-05-14 +// +// Description : Example 043 for TCPDF class +// Disk caching +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Disk caching + * @author Nicola Asuni + * @since 2009-01-02 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', true); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 043'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 043', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 16); + +// add a page +$pdf->AddPage(); + +// Multicell test +$pdf->MultiCell(0, 0, 'DISK CACHING TEST: check the parameters of the class constructor.', 1, 'L', 0, 0, '', '', true); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_043.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_044.php b/tcpdf/examples/example_044.php new file mode 100644 index 0000000..949270c --- /dev/null +++ b/tcpdf/examples/example_044.php @@ -0,0 +1,128 @@ +<?php +//============================================================+ +// File name : example_044.php +// Begin : 2009-01-02 +// Last Update : 2013-05-14 +// +// Description : Example 044 for TCPDF class +// Move, copy and delete pages +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Move, copy and delete pages + * @author Nicola Asuni + * @since 2009-01-02 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 044'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 044', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 40); + +// print a line using Cell() +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: A', 0, 1, 'L'); + +// add some vertical space +$pdf->Ln(10); + +// print some text +$pdf->SetFont('times', 'I', 16); +$txt = 'TCPDF allows you to Copy, Move and Delete pages.'; +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +$pdf->SetFont('helvetica', 'B', 40); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: B', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: D', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: E', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: E-2', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: F', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: C', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: G', 0, 1, 'L'); + +// Move page 7 to page 3 +$pdf->movePage(7, 3); + +// Delete page 6 +$pdf->deletePage(6); + +$pdf->AddPage(); +$pdf->Cell(0, 10, 'PAGE: H', 0, 1, 'L'); + +// copy the second page +$pdf->copyPage(2); + +// NOTE: to insert a page to a previous position, you can add a new page to the end of document and then move it using movePage(). + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_044.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_045.php b/tcpdf/examples/example_045.php new file mode 100644 index 0000000..0f49abc --- /dev/null +++ b/tcpdf/examples/example_045.php @@ -0,0 +1,140 @@ +<?php +//============================================================+ +// File name : example_045.php +// Begin : 2008-03-04 +// Last Update : 2013-05-14 +// +// Description : Example 045 for TCPDF class +// Bookmarks and Table of Content +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Bookmarks and Table of Content + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 045'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 045', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', 'B', 20); + +// add a page +$pdf->AddPage(); + +// set a bookmark for the current position +$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); + +// print a line using Cell() +$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); + +// Create a fixed link to the first page using the * character +$index_link = $pdf->AddLink(); +$pdf->SetLink($index_link, 0, '*1'); +$pdf->Cell(0, 10, 'Link to INDEX', 0, 1, 'R', false, $index_link); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(128,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(128,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,128,0)); +$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(128,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); + +// fixed link to the first page using the * character +$html = '<a href="#*1" style="color:blue;">link to INDEX (page 1)</a>'; +$pdf->writeHTML($html, true, false, true, false, ''); + + +// add some pages and bookmarks +for ($i = 2; $i < 12; $i++) { + $pdf->AddPage(); + $pdf->Bookmark('Chapter '.$i, 0, 0, '', 'B', array(0,64,128)); + $pdf->Cell(0, 10, 'Chapter '.$i, 0, 1, 'L'); +} + +// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + +// add a new page for TOC +$pdf->addTOCPage(); + +// write the TOC title +$pdf->SetFont('times', 'B', 16); +$pdf->MultiCell(0, 0, 'Table Of Content', 0, 'C', 0, 1, '', '', true, 0); +$pdf->Ln(); + +$pdf->SetFont('dejavusans', '', 12); + +// add a simple Table Of Content at first page +// (check the example n. 59 for the HTML version) +$pdf->addTOC(1, 'courier', '.', 'INDEX', 'B', array(128,0,0)); + +// end of TOC page +$pdf->endTOCPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_045.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_046.php b/tcpdf/examples/example_046.php new file mode 100644 index 0000000..70d11d3 --- /dev/null +++ b/tcpdf/examples/example_046.php @@ -0,0 +1,123 @@ +<?php +//============================================================+ +// File name : example_046.php +// Begin : 2009-02-28 +// Last Update : 2013-05-14 +// +// Description : Example 046 for TCPDF class +// Text Hyphenation +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: text Hyphenation + * @author Nicola Asuni + * @since 2009-02-28 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 046'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 046', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of Text Hyphenation', '', 0, 'L', true, 0, false, false, 0); + +$pdf->Ln(10); + +/* +Unicode Data for SHY: + Name : SOFT HYPHEN, commonly abbreviated as SHY + HTML Entity (decimal): &#173; + HTML Entity (hex): &#xad; + HTML Entity (named): &shy; + How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173] + UTF-8 (hex): 0xC2 0xAD (c2ad) +*/ + +/* +// You can automatically add SOFT HYPHENS to your text using +// the hyphenateText() method, but this requires either an +// hyphenation pattern array of a hyphenation pattern TEX file. +// You can download hyphenation TEX patterns from: +// http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ + +// EXAMPLE: + +$html = 'On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.'; + +$hyphen_patterns = $pdf->getHyphenPatternsFromTEX('hyphens/hyph-en-gb.tex'); + +$html = $pdf->hyphenateText($html, $hyphen_patterns, array(), 1, 2, 1, 8); +*/ + + +// HTML text with soft hyphens (&shy;) +$html = 'On the other hand, we de&shy;nounce with righ&shy;teous in&shy;dig&shy;na&shy;tion and dis&shy;like men who are so be&shy;guiled and de&shy;mo&shy;r&shy;al&shy;ized by the charms of plea&shy;sure of the mo&shy;ment, so blind&shy;ed by de&shy;sire, that they can&shy;not fore&shy;see the pain and trou&shy;ble that are bound to en&shy;sue; and equal blame be&shy;longs to those who fail in their du&shy;ty through weak&shy;ness of will, which is the same as say&shy;ing through shrink&shy;ing from toil and pain. Th&shy;ese cas&shy;es are per&shy;fect&shy;ly sim&shy;ple and easy to distin&shy;guish. In a free hour, when our pow&shy;er of choice is un&shy;tram&shy;melled and when noth&shy;ing pre&shy;vents our be&shy;ing able to do what we like best, ev&shy;ery plea&shy;sure is to be wel&shy;comed and ev&shy;ery pain avoid&shy;ed. But in cer&shy;tain cir&shy;cum&shy;s&shy;tances and ow&shy;ing to the claims of du&shy;ty or the obli&shy;ga&shy;tions of busi&shy;ness it will fre&shy;quent&shy;ly oc&shy;cur that plea&shy;sures have to be re&shy;pu&shy;di&shy;at&shy;ed and an&shy;noy&shy;ances ac&shy;cept&shy;ed. The wise man there&shy;fore al&shy;ways holds in th&shy;ese mat&shy;ters to this prin&shy;ci&shy;ple of se&shy;lec&shy;tion: he re&shy;jects plea&shy;sures to se&shy;cure other greater plea&shy;sures, or else he en&shy;dures pains to avoid worse pains.'; + +$pdf->SetFont('times', '', 10); +$pdf->SetDrawColor(255,0,0); +$pdf->SetTextColor(0,63,127); + +// print a cell +$pdf->writeHTMLCell(50, 0, '', '', $html, 1, 1, 0, true, 'J'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_046.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_047.php b/tcpdf/examples/example_047.php new file mode 100644 index 0000000..a26ae5d --- /dev/null +++ b/tcpdf/examples/example_047.php @@ -0,0 +1,117 @@ +<?php +//============================================================+ +// File name : example_047.php +// Begin : 2009-03-19 +// Last Update : 2013-05-14 +// +// Description : Example 047 for TCPDF class +// Transactions +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Transactions + * @author Nicola Asuni + * @since 2009-03-19 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 047'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 047', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 16); + +// add a page +$pdf->AddPage(); + +$txt = 'Example of Transactions. +TCPDF allows you to undo some operations using the Transactions. +Check the source code for further information.'; +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +$pdf->Ln(5); + +$pdf->SetFont('times', '', 12); + +// start transaction +$pdf->startTransaction(); + +$pdf->Write(0, "LINE 1\n"); +$pdf->Write(0, "LINE 2\n"); + +// restarts transaction +$pdf->startTransaction(); + +$pdf->Write(0, "LINE 3\n"); +$pdf->Write(0, "LINE 4\n"); + +// rolls back to the last (re)start +$pdf = $pdf->rollbackTransaction(); + +$pdf->Write(0, "LINE 5\n"); +$pdf->Write(0, "LINE 6\n"); + +// start transaction +$pdf->startTransaction(); + +$pdf->Write(0, "LINE 7\n"); + +// commit transaction (actually just frees memory) +$pdf->commitTransaction(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_047.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_048.php b/tcpdf/examples/example_048.php new file mode 100644 index 0000000..ca88a14 --- /dev/null +++ b/tcpdf/examples/example_048.php @@ -0,0 +1,313 @@ +<?php +//============================================================+ +// File name : example_048.php +// Begin : 2009-03-20 +// Last Update : 2013-05-14 +// +// Description : Example 048 for TCPDF class +// HTML tables and table headers +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: HTML tables and table headers + * @author Nicola Asuni + * @since 2009-03-20 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 048'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 048', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of HTML tables', '', 0, 'L', true, 0, false, false, 0); + +$pdf->SetFont('helvetica', '', 8); + +// ----------------------------------------------------------------------------- + +$tbl = <<<EOD +<table cellspacing="0" cellpadding="1" border="1"> + <tr> + <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3</td> + <td>COL 2 - ROW 1</td> + <td>COL 3 - ROW 1</td> + </tr> + <tr> + <td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td> + <td>COL 3 - ROW 2</td> + </tr> + <tr> + <td>COL 3 - ROW 3</td> + </tr> + +</table> +EOD; + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +// ----------------------------------------------------------------------------- + +$tbl = <<<EOD +<table cellspacing="0" cellpadding="1" border="1"> + <tr> + <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3<br />text line<br />text line<br />text line<br />text line<br />text line<br />text line</td> + <td>COL 2 - ROW 1</td> + <td>COL 3 - ROW 1</td> + </tr> + <tr> + <td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td> + <td>COL 3 - ROW 2</td> + </tr> + <tr> + <td>COL 3 - ROW 3</td> + </tr> + +</table> +EOD; + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +// ----------------------------------------------------------------------------- + +$tbl = <<<EOD +<table cellspacing="0" cellpadding="1" border="1"> + <tr> + <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3<br />text line<br />text line<br />text line<br />text line<br />text line<br />text line</td> + <td>COL 2 - ROW 1</td> + <td>COL 3 - ROW 1</td> + </tr> + <tr> + <td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td> + <td>COL 3 - ROW 2<br />text line<br />text line</td> + </tr> + <tr> + <td>COL 3 - ROW 3</td> + </tr> + +</table> +EOD; + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +// ----------------------------------------------------------------------------- + +$tbl = <<<EOD +<table border="1"> +<tr> +<th rowspan="3">Left column</th> +<th colspan="5">Heading Column Span 5</th> +<th colspan="9">Heading Column Span 9</th> +</tr> +<tr> +<th rowspan="2">Rowspan 2<br />This is some text that fills the table cell.</th> +<th colspan="2">span 2</th> +<th colspan="2">span 2</th> +<th rowspan="2">2 rows</th> +<th colspan="8">Colspan 8</th> +</tr> +<tr> +<th>1a</th> +<th>2a</th> +<th>1b</th> +<th>2b</th> +<th>1</th> +<th>2</th> +<th>3</th> +<th>4</th> +<th>5</th> +<th>6</th> +<th>7</th> +<th>8</th> +</tr> +</table> +EOD; + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +// ----------------------------------------------------------------------------- + +// Table with rowspans and THEAD +$tbl = <<<EOD +<table border="1" cellpadding="2" cellspacing="2"> +<thead> + <tr style="background-color:#FFFF00;color:#0000FF;"> + <td width="30" align="center"><b>A</b></td> + <td width="140" align="center"><b>XXXX</b></td> + <td width="140" align="center"><b>XXXX</b></td> + <td width="80" align="center"> <b>XXXX</b></td> + <td width="80" align="center"><b>XXXX</b></td> + <td width="45" align="center"><b>XXXX</b></td> + </tr> + <tr style="background-color:#FF0000;color:#FFFF00;"> + <td width="30" align="center"><b>B</b></td> + <td width="140" align="center"><b>XXXX</b></td> + <td width="140" align="center"><b>XXXX</b></td> + <td width="80" align="center"> <b>XXXX</b></td> + <td width="80" align="center"><b>XXXX</b></td> + <td width="45" align="center"><b>XXXX</b></td> + </tr> +</thead> + <tr> + <td width="30" align="center">1.</td> + <td width="140" rowspan="6">XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX</td> + <td width="140">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td width="80">XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="30" align="center" rowspan="3">2.</td> + <td width="140" rowspan="3">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="80">XXXX<br />XXXX<br />XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="80" rowspan="2" >RRRRRR<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="30" align="center">3.</td> + <td width="140">XXXX1<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="30" align="center">4.</td> + <td width="140">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> +</table> +EOD; + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +// ----------------------------------------------------------------------------- + +// NON-BREAKING TABLE (nobr="true") + +$tbl = <<<EOD +<table border="1" cellpadding="2" cellspacing="2" nobr="true"> + <tr> + <th colspan="3" align="center">NON-BREAKING TABLE</th> + </tr> + <tr> + <td>1-1</td> + <td>1-2</td> + <td>1-3</td> + </tr> + <tr> + <td>2-1</td> + <td>3-2</td> + <td>3-3</td> + </tr> + <tr> + <td>3-1</td> + <td>3-2</td> + <td>3-3</td> + </tr> +</table> +EOD; + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +// ----------------------------------------------------------------------------- + +// NON-BREAKING ROWS (nobr="true") + +$tbl = <<<EOD +<table border="1" cellpadding="2" cellspacing="2" align="center"> + <tr nobr="true"> + <th colspan="3">NON-BREAKING ROWS</th> + </tr> + <tr nobr="true"> + <td>ROW 1<br />COLUMN 1</td> + <td>ROW 1<br />COLUMN 2</td> + <td>ROW 1<br />COLUMN 3</td> + </tr> + <tr nobr="true"> + <td>ROW 2<br />COLUMN 1</td> + <td>ROW 2<br />COLUMN 2</td> + <td>ROW 2<br />COLUMN 3</td> + </tr> + <tr nobr="true"> + <td>ROW 3<br />COLUMN 1</td> + <td>ROW 3<br />COLUMN 2</td> + <td>ROW 3<br />COLUMN 3</td> + </tr> +</table> +EOD; + +$pdf->writeHTML($tbl, true, false, false, false, ''); + +// ----------------------------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_048.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_049.php b/tcpdf/examples/example_049.php new file mode 100644 index 0000000..7a764fb --- /dev/null +++ b/tcpdf/examples/example_049.php @@ -0,0 +1,126 @@ +<?php +//============================================================+ +// File name : example_049.php +// Begin : 2009-04-03 +// Last Update : 2014-12-10 +// +// Description : Example 049 for TCPDF class +// WriteHTML with TCPDF callback functions +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: WriteHTML with TCPDF callback functions + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 049'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 049', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 10); + +// add a page +$pdf->AddPage(); + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +IMPORTANT: +If you are printing user-generated content, tcpdf tag can be unsafe. +You can disable this tag by setting to false the K_TCPDF_CALLS_IN_HTML +constant on TCPDF configuration file. + +For security reasons, the parameters for the 'params' attribute of TCPDF +tag must be prepared as an array and encoded with the +serializeTCPDFtagParameters() method (see the example below). + + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + +$html = '<h1>Test TCPDF Methods in HTML</h1> +<h2 style="color:red;">IMPORTANT:</h2> +<span style="color:red;">If you are using user-generated content, the tcpdf tag can be unsafe.<br /> +You can disable this tag by setting to false the <b>K_TCPDF_CALLS_IN_HTML</b> constant on TCPDF configuration file.</span> +<h2>write1DBarcode method in HTML</h2>'; + +$params = $pdf->serializeTCPDFtagParameters(array('CODE 39', 'C39', '', '', 80, 30, 0.4, array('position'=>'S', 'border'=>true, 'padding'=>4, 'fgcolor'=>array(0,0,0), 'bgcolor'=>array(255,255,255), 'text'=>true, 'font'=>'helvetica', 'fontsize'=>8, 'stretchtext'=>4), 'N')); +$html .= '<tcpdf method="write1DBarcode" params="'.$params.'" />'; + +$params = $pdf->serializeTCPDFtagParameters(array('CODE 128', 'C128', '', '', 80, 30, 0.4, array('position'=>'S', 'border'=>true, 'padding'=>4, 'fgcolor'=>array(0,0,0), 'bgcolor'=>array(255,255,255), 'text'=>true, 'font'=>'helvetica', 'fontsize'=>8, 'stretchtext'=>4), 'N')); +$html .= '<tcpdf method="write1DBarcode" params="'.$params.'" />'; + +$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>'; + +$params = $pdf->serializeTCPDFtagParameters(array(0)); +$html .= '<tcpdf method="SetDrawColor" params="'.$params.'" />'; + +$params = $pdf->serializeTCPDFtagParameters(array(50, 50, 40, 10, 'DF', array(), array(0,128,255))); +$html .= '<tcpdf method="Rect" params="'.$params.'" />'; + + +// output the HTML content +$pdf->writeHTML($html, true, 0, true, 0); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_049.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_050.php b/tcpdf/examples/example_050.php new file mode 100644 index 0000000..5ccae31 --- /dev/null +++ b/tcpdf/examples/example_050.php @@ -0,0 +1,210 @@ +<?php +//============================================================+ +// File name : example_050.php +// Begin : 2009-04-09 +// Last Update : 2013-05-14 +// +// Description : Example 050 for TCPDF class +// 2D Barcodes +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: 2D barcodes. + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 050'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 050', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// NOTE: 2D barcode algorithms must be implemented on 2dbarcode.php class file. + +// set font +$pdf->SetFont('helvetica', '', 11); + +// add a page +$pdf->AddPage(); + +// print a message +$txt = "You can also export 2D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcode directory.\n"; +$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false); + + +$pdf->SetFont('helvetica', '', 10); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// set style for barcode +$style = array( + 'border' => true, + 'vpadding' => 'auto', + 'hpadding' => 'auto', + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, //array(255,255,255) + 'module_width' => 1, // width of a single module in points + 'module_height' => 1 // height of a single module in points +); + +// write RAW 2D Barcode + +$code = '111011101110111,010010001000010,010011001110010,010010000010010,010011101110010'; +$pdf->write2DBarcode($code, 'RAW', 80, 30, 30, 20, $style, 'N'); + +// write RAW2 2D Barcode +$code = '[111011101110111][010010001000010][010011001110010][010010000010010][010011101110010]'; +$pdf->write2DBarcode($code, 'RAW2', 80, 60, 30, 20, $style, 'N'); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// set style for barcode +$style = array( + 'border' => 2, + 'vpadding' => 'auto', + 'hpadding' => 'auto', + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, //array(255,255,255) + 'module_width' => 1, // width of a single module in points + 'module_height' => 1 // height of a single module in points +); + +// QRCODE,L : QR-CODE Low error correction +$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,L', 20, 30, 50, 50, $style, 'N'); +$pdf->Text(20, 25, 'QRCODE L'); + +// QRCODE,M : QR-CODE Medium error correction +$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,M', 20, 90, 50, 50, $style, 'N'); +$pdf->Text(20, 85, 'QRCODE M'); + +// QRCODE,Q : QR-CODE Better error correction +$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,Q', 20, 150, 50, 50, $style, 'N'); +$pdf->Text(20, 145, 'QRCODE Q'); + +// QRCODE,H : QR-CODE Best error correction +$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 20, 210, 50, 50, $style, 'N'); +$pdf->Text(20, 205, 'QRCODE H'); + +// ------------------------------------------------------------------- +// PDF417 (ISO/IEC 15438:2006) + +/* + + The $type parameter can be simple 'PDF417' or 'PDF417' followed by a + number of comma-separated options: + + 'PDF417,a,e,t,s,f,o0,o1,o2,o3,o4,o5,o6' + + Possible options are: + + a = aspect ratio (width/height); + e = error correction level (0-8); + + Macro Control Block options: + + t = total number of macro segments; + s = macro segment index (0-99998); + f = file ID; + o0 = File Name (text); + o1 = Segment Count (numeric); + o2 = Time Stamp (numeric); + o3 = Sender (text); + o4 = Addressee (text); + o5 = File Size (numeric); + o6 = Checksum (numeric). + + Parameters t, s and f are required for a Macro Control Block, all other parametrs are optional. + To use a comma character ',' on text options, replace it with the character 255: "\xff". + +*/ + +$pdf->write2DBarcode('www.tcpdf.org', 'PDF417', 80, 90, 0, 30, $style, 'N'); +$pdf->Text(80, 85, 'PDF417 (ISO/IEC 15438:2006)'); + +// ------------------------------------------------------------------- +// DATAMATRIX (ISO/IEC 16022:2006) + +$pdf->write2DBarcode('http://www.tcpdf.org', 'DATAMATRIX', 80, 150, 50, 50, $style, 'N'); +$pdf->Text(80, 145, 'DATAMATRIX (ISO/IEC 16022:2006)'); + +// ------------------------------------------------------------------- + +// new style +$style = array( + 'border' => 2, + 'padding' => 'auto', + 'fgcolor' => array(0,0,255), + 'bgcolor' => array(255,255,64) +); + +// QRCODE,H : QR-CODE Best error correction +$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 80, 210, 50, 50, $style, 'N'); +$pdf->Text(80, 205, 'QRCODE H - COLORED'); + +// new style +$style = array( + 'border' => false, + 'padding' => 0, + 'fgcolor' => array(128,0,0), + 'bgcolor' => false +); + +// QRCODE,H : QR-CODE Best error correction +$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 140, 210, 50, 50, $style, 'N'); +$pdf->Text(140, 205, 'QRCODE H - NO PADDING'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_050.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_051.php b/tcpdf/examples/example_051.php new file mode 100644 index 0000000..dc2d94e --- /dev/null +++ b/tcpdf/examples/example_051.php @@ -0,0 +1,145 @@ +<?php +//============================================================+ +// File name : example_051.php +// Begin : 2009-04-16 +// Last Update : 2013-05-14 +// +// Description : Example 051 for TCPDF class +// Full page background +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Full page background + * @author Nicola Asuni + * @since 2009-04-16 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + + +// Extend the TCPDF class to create custom Header and Footer +class MYPDF extends TCPDF { + //Page header + public function Header() { + // get the current page break margin + $bMargin = $this->getBreakMargin(); + // get current auto-page-break mode + $auto_page_break = $this->AutoPageBreak; + // disable auto-page-break + $this->SetAutoPageBreak(false, 0); + // set bacground image + $img_file = K_PATH_IMAGES.'image_demo.jpg'; + $this->Image($img_file, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0); + // restore auto-page-break status + $this->SetAutoPageBreak($auto_page_break, $bMargin); + // set the starting point for the page content + $this->setPageMark(); + } +} + +// create new PDF document +$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 051'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(0); +$pdf->SetFooterMargin(0); + +// remove default footer +$pdf->setPrintFooter(false); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 48); + +// add a page +$pdf->AddPage(); + +// Print a text +$html = '<span style="background-color:yellow;color:blue;">&nbsp;PAGE 1&nbsp;</span> +<p stroke="0.2" fill="true" strokecolor="yellow" color="blue" style="font-family:helvetica;font-weight:bold;font-size:26pt;">You can set a full page background.</p>'; +$pdf->writeHTML($html, true, false, true, false, ''); + + +// add a page +$pdf->AddPage(); + +// Print a text +$html = '<span style="background-color:yellow;color:blue;">&nbsp;PAGE 2&nbsp;</span>'; +$pdf->writeHTML($html, true, false, true, false, ''); + +// --- example with background set on page --- + +// remove default header +$pdf->setPrintHeader(false); + +// add a page +$pdf->AddPage(); + + +// -- set new background --- + +// get the current page break margin +$bMargin = $pdf->getBreakMargin(); +// get current auto-page-break mode +$auto_page_break = $pdf->getAutoPageBreak(); +// disable auto-page-break +$pdf->SetAutoPageBreak(false, 0); +// set bacground image +$img_file = K_PATH_IMAGES.'image_demo.jpg'; +$pdf->Image($img_file, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0); +// restore auto-page-break status +$pdf->SetAutoPageBreak($auto_page_break, $bMargin); +// set the starting point for the page content +$pdf->setPageMark(); + + +// Print a text +$html = '<span style="color:white;text-align:center;font-weight:bold;font-size:80pt;">PAGE 3</span>'; +$pdf->writeHTML($html, true, false, true, false, ''); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_051.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_052.php b/tcpdf/examples/example_052.php new file mode 100644 index 0000000..2af27f0 --- /dev/null +++ b/tcpdf/examples/example_052.php @@ -0,0 +1,121 @@ +<?php +//============================================================+ +// File name : example_052.php +// Begin : 2009-05-07 +// Last Update : 2013-05-14 +// +// Description : Example 052 for TCPDF class +// Certification Signature (experimental) +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Certification Signature (experimental) + * @author Nicola Asuni + * @since 2009-05-07 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 052'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 052', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +/* +NOTES: + - To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + - To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 + - To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes +*/ + +// set certificate file +$certificate = 'file://data/cert/tcpdf.crt'; + +// set additional information +$info = array( + 'Name' => 'TCPDF', + 'Location' => 'Office', + 'Reason' => 'Testing TCPDF', + 'ContactInfo' => 'http://www.tcpdf.org', + ); + +// set document signature +$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info); + +// set font +$pdf->SetFont('helvetica', '', 12); + +// add a page +$pdf->AddPage(); + +// print a line of text +$text = 'This is a <b color="#FF0000">digitally signed document</b> using the default (example) <b>tcpdf.crt</b> certificate.<br />To validate this signature you have to load the <b color="#006600">tcpdf.fdf</b> on the Arobat Reader to add the certificate to <i>List of Trusted Identities</i>.<br /><br />For more information check the source code of this example and the source code documentation for the <i>setSignature()</i> method.<br /><br /><a href="http://www.tcpdf.org">www.tcpdf.org</a>'; +$pdf->writeHTML($text, true, 0, true, 0); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// *** set signature appearance *** + +// create content for signature (image and/or text) +$pdf->Image('images/tcpdf_signature.png', 180, 60, 15, 15, 'PNG'); + +// define active area for signature appearance +$pdf->setSignatureAppearance(180, 60, 15, 15); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// *** set an empty signature appearance *** +$pdf->addEmptySignatureAppearance(180, 80, 15, 15); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_052.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_053.php b/tcpdf/examples/example_053.php new file mode 100644 index 0000000..8c784d5 --- /dev/null +++ b/tcpdf/examples/example_053.php @@ -0,0 +1,108 @@ +<?php +//============================================================+ +// File name : example_053.php +// Begin : 2009-09-02 +// Last Update : 2013-05-14 +// +// Description : Example 053 for TCPDF class +// Javascript example. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Javascript example. + * @author Nicola Asuni + * @since 2009-09-02 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 053'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 053', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('times', '', 14); + +// add a page +$pdf->AddPage(); + +// print a some of text +$text = 'This is an example of <strong>JavaScript</strong> usage on PDF documents.<br /><br />For more information check the source code of this example, the source code documentation for the <i>IncludeJS()</i> method and the <i>JavaScript for Acrobat API Reference</i> guide.<br /><br /><a href="http://www.tcpdf.org">www.tcpdf.org</a>'; +$pdf->writeHTML($text, true, 0, true, 0); + +// write some JavaScript code +$js = <<<EOD +app.alert('JavaScript Popup Example', 3, 0, 'Welcome'); +var cResponse = app.response({ + cQuestion: 'How are you today?', + cTitle: 'Your Health Status', + cDefault: 'Fine', + cLabel: 'Response:' +}); +if (cResponse == null) { + app.alert('Thanks for trying anyway.', 3, 0, 'Result'); +} else { + app.alert('You responded, "'+cResponse+'", to the health question.', 3, 0, 'Result'); +} +EOD; + +// force print dialog +$js .= 'print(true);'; + +// set javascript +$pdf->IncludeJS($js); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_053.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_054.php b/tcpdf/examples/example_054.php new file mode 100644 index 0000000..af4545d --- /dev/null +++ b/tcpdf/examples/example_054.php @@ -0,0 +1,128 @@ +<?php +//============================================================+ +// File name : example_054.php +// Begin : 2009-09-07 +// Last Update : 2013-05-14 +// +// Description : Example 054 for TCPDF class +// XHTML Forms +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: XHTML Forms + * @author Nicola Asuni + * @since 2009-09-07 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 054'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 054', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// IMPORTANT: disable font subsetting to allow users editing the document +$pdf->setFontSubsetting(false); + +// set font +$pdf->SetFont('helvetica', '', 10, '', false); + +// add a page +$pdf->AddPage(); + +// create some HTML content +$html = <<<EOD +<h1>XHTML Form Example</h1> +<form method="post" action="http://localhost/printvars.php" enctype="multipart/form-data"> +<label for="name">name:</label> <input type="text" name="name" value="" size="20" maxlength="30" /><br /> +<label for="password">password:</label> <input type="password" name="password" value="" size="20" maxlength="30" /><br /><br /> +<label for="infile">file:</label> <input type="file" name="userfile" size="20" /><br /><br /> +<input type="checkbox" name="agree" value="1" checked="checked" /> <label for="agree">I agree </label><br /><br /> +<input type="radio" name="radioquestion" id="rqa" value="1" /> <label for="rqa">one</label><br /> +<input type="radio" name="radioquestion" id="rqb" value="2" checked="checked"/> <label for="rqb">two</label><br /> +<input type="radio" name="radioquestion" id="rqc" value="3" /> <label for="rqc">three</label><br /><br /> +<label for="selection">select:</label> +<select name="selection" size="0"> + <option value="0">zero</option> + <option value="1">one</option> + <option value="2">two</option> + <option value="3">three</option> +</select><br /><br /> +<label for="selection">select:</label> +<select name="multiselection" size="2" multiple="multiple"> + <option value="0">zero</option> + <option value="1">one</option> + <option value="2">two</option> + <option value="3">three</option> +</select><br /><br /><br /> +<label for="text">text area:</label><br /> +<textarea cols="40" rows="3" name="text">line one +line two</textarea><br /> +<br /><br /><br /> +<input type="reset" name="reset" value="Reset" /> +<input type="submit" name="submit" value="Submit" /> +<input type="button" name="print" value="Print" onclick="print()" /> +<input type="hidden" name="hiddenfield" value="OK" /> +<br /> +</form> +EOD; + +// output the HTML content +$pdf->writeHTML($html, true, 0, true, 0); + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_054.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_055.php b/tcpdf/examples/example_055.php new file mode 100644 index 0000000..a825966 --- /dev/null +++ b/tcpdf/examples/example_055.php @@ -0,0 +1,115 @@ +<?php +//============================================================+ +// File name : example_055.php +// Begin : 2009-10-21 +// Last Update : 2014-12-10 +// +// Description : Example 055 for TCPDF class +// Display all characters available on core fonts. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Display all characters available on core fonts. + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: XHTML Forms + * @author Nicola Asuni + * @since 2009-10-21 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 055'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 055', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 14); + +// array of font names +$core_fonts = array('courier', 'courierB', 'courierI', 'courierBI', 'helvetica', 'helveticaB', 'helveticaI', 'helveticaBI', 'times', 'timesB', 'timesI', 'timesBI', 'symbol', 'zapfdingbats'); + +// set fill color +$pdf->SetFillColor(221,238,255); + +// create one HTML table for each core font +foreach($core_fonts as $font) { + // add a page + $pdf->AddPage(); + + // Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') + + // set font for title + $pdf->SetFont('helvetica', 'B', 16); + + // print font name + $pdf->Cell(0, 10, 'FONT: '.$font, 1, 1, 'C', true, '', 0, false, 'T', 'M'); + + // set font for chars + $pdf->SetFont($font, '', 16); + + // print each character + for ($i = 0; $i < 256; ++$i) { + if (($i > 0) AND (($i % 16) == 0)) { + $pdf->Ln(); + } + $pdf->Cell(11.25, 11.25, TCPDF_FONTS::unichr($i), 1, 0, 'C', false, '', 0, false, 'T', 'M'); + } + + $pdf->Ln(20); + + // print a pangram + $pdf->Cell(0, 0, 'The quick brown fox jumps over the lazy dog', 0, 1, 'C', false, '', 0, false, 'T', 'M'); +} + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_055.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_056.php b/tcpdf/examples/example_056.php new file mode 100644 index 0000000..c3dfe25 --- /dev/null +++ b/tcpdf/examples/example_056.php @@ -0,0 +1,133 @@ +<?php +//============================================================+ +// File name : example_056.php +// Begin : 2010-03-26 +// Last Update : 2013-09-30 +// +// Description : Example 056 for TCPDF class +// Crop marks and color registration bars +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Crop marks and color registration bars + * @author Nicola Asuni + * @since 2010-03-26 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 056'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 056', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 18); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of Registration Marks, Crop Marks and Color Bars', '', 0, 'L', true, 0, false, false, 0); + +$pdf->Ln(5); + +// color registration bars + +// A,W,R,G,B,C,M,Y,K,RGB,CMYK,ALL,ALLSPOT,<SPOT_COLOR_NAME> +$pdf->colorRegistrationBar(50, 70, 40, 40, true, false, 'A,R,G,B,C,M,Y,K'); +$pdf->colorRegistrationBar(90, 70, 40, 40, true, true, 'A,R,G,B,C,M,Y,K'); +$pdf->colorRegistrationBar(50, 115, 80, 5, false, true, 'A,W,R,G,B,C,M,Y,K,ALL'); +$pdf->colorRegistrationBar(135, 70, 5, 50, false, false, 'A,W,R,G,B,C,M,Y,K,ALL'); + +// corner crop marks + +$pdf->cropMark(50, 70, 10, 10, 'TL'); +$pdf->cropMark(140, 70, 10, 10, 'TR'); +$pdf->cropMark(50, 120, 10, 10, 'BL'); +$pdf->cropMark(140, 120, 10, 10, 'BR'); + +// various crop marks + +$pdf->cropMark(95, 65, 5, 5, 'LEFT,TOP,RIGHT', array(255,0,0)); +$pdf->cropMark(95, 125, 5, 5, 'LEFT,BOTTOM,RIGHT', array(255,0,0)); + +$pdf->cropMark(45, 95, 5, 5, 'TL,BL', array(0,255,0)); +$pdf->cropMark(145, 95, 5, 5, 'TR,BR', array(0,255,0)); + +$pdf->cropMark(95, 140, 5, 5, 'A,D', array(0,0,255)); + +// registration marks + +$pdf->registrationMark(40, 60, 5, false); +$pdf->registrationMark(150, 60, 5, true, array(0,0,0), array(255,255,0)); +$pdf->registrationMark(40, 130, 5, true, array(0,0,0), array(255,255,0)); +$pdf->registrationMark(150, 130, 5, false, array(100,100,100,100,'All'), array(0,0,0,0,'None')); + +// test registration bar with spot colors + +$pdf->AddSpotColor('My TCPDF Dark Green', 100, 50, 80, 45); +$pdf->AddSpotColor('My TCPDF Light Yellow', 0, 0, 55, 0); +$pdf->AddSpotColor('My TCPDF Black', 0, 0, 0, 100); +$pdf->AddSpotColor('My TCPDF Red', 30, 100, 90, 10); +$pdf->AddSpotColor('My TCPDF Green', 100, 30, 100, 0); +$pdf->AddSpotColor('My TCPDF Blue', 100, 60, 10, 5); +$pdf->AddSpotColor('My TCPDF Yellow', 0, 20, 100, 0); + +$pdf->colorRegistrationBar(50, 150, 80, 10, false, true, 'ALLSPOT'); + +// CMYK registration mark +$pdf->registrationMarkCMYK(150, 155, 8); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_056.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_057.php b/tcpdf/examples/example_057.php new file mode 100644 index 0000000..9714b40 --- /dev/null +++ b/tcpdf/examples/example_057.php @@ -0,0 +1,268 @@ +<?php +//============================================================+ +// File name : example_057.php +// Begin : 2010-04-03 +// Last Update : 2013-05-14 +// +// Description : Example 057 for TCPDF class +// Cell vertical alignments +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Cell vertical alignments + * @author Nicola Asuni + * @since 2008-03-04 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 057'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 057', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of alignment options for Cell()', '', 0, 'L', true, 0, false, false, 0); + +$pdf->SetFont('helvetica', '', 11); + +// set border width +$pdf->SetLineWidth(0.7); + +// set color for cell border +$pdf->SetDrawColor(0,128,255); + +$pdf->setCellHeightRatio(3); + +$pdf->SetXY(15, 60); + +// text on center +$pdf->Cell(30, 0, 'Top-Center', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'C'); +$pdf->Cell(30, 0, 'Center-Center', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'C'); +$pdf->Cell(30, 0, 'Bottom-Center', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'C'); +$pdf->Cell(30, 0, 'Ascent-Center', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'C'); +$pdf->Cell(30, 0, 'Baseline-Center', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'C'); +$pdf->Cell(30, 0, 'Descent-Center', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'C'); + + +$pdf->SetXY(15, 90); + +// text on top +$pdf->Cell(30, 0, 'Top-Top', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'T'); +$pdf->Cell(30, 0, 'Center-Top', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'T'); +$pdf->Cell(30, 0, 'Bottom-Top', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'T'); +$pdf->Cell(30, 0, 'Ascent-Top', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'T'); +$pdf->Cell(30, 0, 'Baseline-Top', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'T'); +$pdf->Cell(30, 0, 'Descent-Top', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'T'); + + +$pdf->SetXY(15, 120); + +// text on bottom +$pdf->Cell(30, 0, 'Top-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'B'); +$pdf->Cell(30, 0, 'Center-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'B'); +$pdf->Cell(30, 0, 'Bottom-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'B'); +$pdf->Cell(30, 0, 'Ascent-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'B'); +$pdf->Cell(30, 0, 'Baseline-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'B'); +$pdf->Cell(30, 0, 'Descent-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'B'); + + +// draw some reference lines +$linestyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => '', 'phase' => 0, 'color' => array(255, 0, 0)); +$pdf->Line(15, 60, 195, 60, $linestyle); +$pdf->Line(15, 90, 195, 90, $linestyle); +$pdf->Line(15, 120, 195, 120, $linestyle); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// Print an image to explain cell measures + +$pdf->Image('images/tcpdf_cell.png', 15, 160, 100, 100, 'PNG', '', '', false, 300, '', false, false, 0, false, false, false); +$legend = 'LEGEND: + +X: cell x top-left origin (top-right for RTL) +Y: cell y top-left origin (top-right for RTL) +CW: cell width +CH: cell height +LW: line width +NRL: normal line position +EXT: external line position +INT: internal line position +ML: margin left +MR: margin right +MT: margin top +MB: margin bottom +PL: padding left +PR: padding right +PT: padding top +PB: padding bottom +TW: text width +FA: font ascent +FB: font baseline +FD: font descent'; +$pdf->SetFont('helvetica', '', 10); +$pdf->setCellHeightRatio(1.25); +$pdf->MultiCell(0, 0, $legend, 0, 'L', false, 1, 125, 160, true, 0, false, true, 0, 'T', false); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// CELL BORDERS + +// add a page +$pdf->AddPage(); + +$pdf->SetFont('helvetica', 'B', 20); + +$pdf->Write(0, 'Example of borders for Cell()', '', 0, 'L', true, 0, false, false, 0); + +$pdf->SetFont('helvetica', '', 11); + +// set border width +$pdf->SetLineWidth(0.508); + +// set color for cell border +$pdf->SetDrawColor(0,128,255); + +// set filling color +$pdf->SetFillColor(255,255,128); + +// set cell height ratio +$pdf->setCellHeightRatio(3); + +$pdf->Cell(30, 0, '1', 1, 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'LTRB', 'LTRB', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'LTR', 'LTR', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'TRB', 'TRB', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'LRB', 'LRB', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'LTB', 'LTB', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'LT', 'LT', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'TR', 'TR', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'RB', 'RB', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'LB', 'LB', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'LR', 'LR', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'TB', 'TB', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'L', 'L', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'T', 'T', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'R', 'R', 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(2); +$pdf->Cell(30, 0, 'B', 'B', 1, 'C', 1, '', 0, false, 'T', 'C'); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// ADVANCED SETTINGS FOR CELL BORDERS + +// add a page +$pdf->AddPage(); + +$pdf->SetFont('helvetica', 'B', 20); + +$pdf->Write(0, 'Example of advanced border settings for Cell()', '', 0, 'L', true, 0, false, false, 0); + +$pdf->SetFont('helvetica', '', 11); + +// set border width +$pdf->SetLineWidth(1); + +// set color for cell border +$pdf->SetDrawColor(0,128,255); + +// set filling color +$pdf->SetFillColor(255,255,128); + +$border = array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); +$pdf->Cell(30, 0, 'LTRB', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(5); + +$border = array( +'L' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)), +'R' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 255)), +'T' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 255, 0)), +'B' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 255))); +$pdf->Cell(30, 0, 'LTRB', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(5); + +$border = array('mode' => 'ext', 'LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); +$pdf->Cell(30, 0, 'LTRB EXT', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(5); + +$border = array('mode' => 'int', 'LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); +$pdf->Cell(30, 0, 'LTRB INT', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); +$pdf->Ln(5); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_057.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_058.php b/tcpdf/examples/example_058.php new file mode 100644 index 0000000..1e472fb --- /dev/null +++ b/tcpdf/examples/example_058.php @@ -0,0 +1,94 @@ +<?php +//============================================================+ +// File name : example_058.php +// Begin : 2010-04-22 +// Last Update : 2013-05-14 +// +// Description : Example 058 for TCPDF class +// SVG Image +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: SVG Image + * @author Nicola Asuni + * @since 2010-05-02 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 058'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 058', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 10); + +// add a page +$pdf->AddPage(); + +// NOTE: Uncomment the following line to rasterize SVG image using the ImageMagick library. +//$pdf->setRasterizeVectorImages(true); + +$pdf->ImageSVG($file='images/testsvg.svg', $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false); + +$pdf->ImageSVG($file='images/tux.svg', $x=30, $y=100, $w='', $h=100, $link='', $align='', $palign='', $border=0, $fitonpage=false); + +$pdf->SetFont('helvetica', '', 8); +$pdf->SetY(195); +$txt = '© The copyright holder of the above Tux image is Larry Ewing, allows anyone to use it for any purpose, provided that the copyright holder is properly attributed. Redistribution, derivative work, commercial use, and all other use is permitted.'; +$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_058.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_059.php b/tcpdf/examples/example_059.php new file mode 100644 index 0000000..9396784 --- /dev/null +++ b/tcpdf/examples/example_059.php @@ -0,0 +1,190 @@ +<?php +//============================================================+ +// File name : example_059.php +// Begin : 2010-05-06 +// Last Update : 2013-05-14 +// +// Description : Example 059 for TCPDF class +// Table Of Content using HTML templates. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Table Of Content using HTML templates. + * @author Nicola Asuni + * @since 2010-05-06 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +/** + * TCPDF class extension with custom header and footer for TOC page + */ +class TOC_TCPDF extends TCPDF { + + /** + * Overwrite Header() method. + * @public + */ + public function Header() { + if ($this->tocpage) { + // *** replace the following parent::Header() with your code for TOC page + parent::Header(); + } else { + // *** replace the following parent::Header() with your code for normal pages + parent::Header(); + } + } + + /** + * Overwrite Footer() method. + * @public + */ + public function Footer() { + if ($this->tocpage) { + // *** replace the following parent::Footer() with your code for TOC page + parent::Footer(); + } else { + // *** replace the following parent::Footer() with your code for normal pages + parent::Footer(); + } + } + +} // end of class + +// create new PDF document +$pdf = new TOC_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 059'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 059', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// set font +$pdf->SetFont('helvetica', '', 10); + +// --------------------------------------------------------- + +// create some content ... + +// add a page +$pdf->AddPage(); + +// set a bookmark for the current position +$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); + +// print a line using Cell() +$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(128,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(128,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,128,0)); +$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); + +$pdf->AddPage(); +$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(128,0,0)); +$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); + +// add some pages and bookmarks +for ($i = 2; $i < 12; $i++) { + $pdf->AddPage(); + $pdf->Bookmark('Chapter '.$i, 0, 0, '', 'B', array(0,64,128)); + $pdf->Cell(0, 10, 'Chapter '.$i, 0, 1, 'L'); +} + + +// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + +// add a new page for TOC +$pdf->addTOCPage(); + +// write the TOC title and/or other elements on the TOC page +$pdf->SetFont('times', 'B', 16); +$pdf->MultiCell(0, 0, 'Table Of Content', 0, 'C', 0, 1, '', '', true, 0); +$pdf->Ln(); +$pdf->SetFont('helvetica', '', 10); + +// define styles for various bookmark levels +$bookmark_templates = array(); + +/* + * The key of the $bookmark_templates array represent the bookmark level (from 0 to n). + * The following templates will be replaced with proper content: + * #TOC_DESCRIPTION# this will be replaced with the bookmark description; + * #TOC_PAGE_NUMBER# this will be replaced with page number. + * + * NOTES: + * If you want to align the page number on the right you have to use a monospaced font like courier, otherwise you can left align using any font type. + * The following is just an example, you can get various styles by combining various HTML elements. + */ + +// A monospaced font for the page number is mandatory to get the right alignment +$bookmark_templates[0] = '<table border="0" cellpadding="0" cellspacing="0" style="background-color:#EEFAFF"><tr><td width="155mm"><span style="font-family:times;font-weight:bold;font-size:12pt;color:black;">#TOC_DESCRIPTION#</span></td><td width="25mm"><span style="font-family:courier;font-weight:bold;font-size:12pt;color:black;" align="right">#TOC_PAGE_NUMBER#</span></td></tr></table>'; +$bookmark_templates[1] = '<table border="0" cellpadding="0" cellspacing="0"><tr><td width="5mm">&nbsp;</td><td width="150mm"><span style="font-family:times;font-size:11pt;color:green;">#TOC_DESCRIPTION#</span></td><td width="25mm"><span style="font-family:courier;font-weight:bold;font-size:11pt;color:green;" align="right">#TOC_PAGE_NUMBER#</span></td></tr></table>'; +$bookmark_templates[2] = '<table border="0" cellpadding="0" cellspacing="0"><tr><td width="10mm">&nbsp;</td><td width="145mm"><span style="font-family:times;font-size:10pt;color:#666666;"><i>#TOC_DESCRIPTION#</i></span></td><td width="25mm"><span style="font-family:courier;font-weight:bold;font-size:10pt;color:#666666;" align="right">#TOC_PAGE_NUMBER#</span></td></tr></table>'; +// add other bookmark level templates here ... + +// add table of content at page 1 +// (check the example n. 45 for a text-only TOC +$pdf->addHTMLTOC(1, 'INDEX', $bookmark_templates, true, 'B', array(128,0,0)); + +// end of TOC page +$pdf->endTOCPage(); + +// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_059.pdf', 'D'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_060.php b/tcpdf/examples/example_060.php new file mode 100644 index 0000000..03bad28 --- /dev/null +++ b/tcpdf/examples/example_060.php @@ -0,0 +1,108 @@ +<?php +//============================================================+ +// File name : example_060.php +// Begin : 2010-05-17 +// Last Update : 2013-05-14 +// +// Description : Example 060 for TCPDF class +// Advanced page settings. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Advanced page settings. + * @author Nicola Asuni + * @since 2010-05-17 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 060'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 060', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// set font +$pdf->SetFont('helvetica', '', 20); + +// --------------------------------------------------------- + +// set page format (read source code documentation for further information) +$page_format = array( + 'MediaBox' => array ('llx' => 0, 'lly' => 0, 'urx' => 210, 'ury' => 297), + 'CropBox' => array ('llx' => 0, 'lly' => 0, 'urx' => 210, 'ury' => 297), + 'BleedBox' => array ('llx' => 5, 'lly' => 5, 'urx' => 205, 'ury' => 292), + 'TrimBox' => array ('llx' => 10, 'lly' => 10, 'urx' => 200, 'ury' => 287), + 'ArtBox' => array ('llx' => 15, 'lly' => 15, 'urx' => 195, 'ury' => 282), + 'Dur' => 3, + 'trans' => array( + 'D' => 1.5, + 'S' => 'Split', + 'Dm' => 'V', + 'M' => 'O' + ), + 'Rotate' => 90, + 'PZ' => 1, +); + +// Check the example n. 29 for viewer preferences + +// add first page --- +$pdf->AddPage('P', $page_format, false, false); +$pdf->Cell(0, 12, 'First Page', 1, 1, 'C'); + +// add second page --- +$page_format['Rotate'] = 270; +$pdf->AddPage('P', $page_format, false, false); +$pdf->Cell(0, 12, 'Second Page', 1, 1, 'C'); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_060.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_061.php b/tcpdf/examples/example_061.php new file mode 100644 index 0000000..13e18c2 --- /dev/null +++ b/tcpdf/examples/example_061.php @@ -0,0 +1,264 @@ +<?php +//============================================================+ +// File name : example_061.php +// Begin : 2010-05-24 +// Last Update : 2014-01-25 +// +// Description : Example 061 for TCPDF class +// XHTML + CSS +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: XHTML + CSS + * @author Nicola Asuni + * @since 2010-05-25 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 061'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 10); + +// add a page +$pdf->AddPage(); + +/* NOTE: + * ********************************************************* + * You can load external XHTML using : + * + * $html = file_get_contents('/path/to/your/file.html'); + * + * External CSS files will be automatically loaded. + * Sometimes you need to fix the path of the external CSS. + * ********************************************************* + */ + +// define some HTML content with style +$html = <<<EOF +<!-- EXAMPLE OF CSS STYLE --> +<style> + h1 { + color: navy; + font-family: times; + font-size: 24pt; + text-decoration: underline; + } + p.first { + color: #003300; + font-family: helvetica; + font-size: 12pt; + } + p.first span { + color: #006600; + font-style: italic; + } + p#second { + color: rgb(00,63,127); + font-family: times; + font-size: 12pt; + text-align: justify; + } + p#second > span { + background-color: #FFFFAA; + } + table.first { + color: #003300; + font-family: helvetica; + font-size: 8pt; + border-left: 3px solid red; + border-right: 3px solid #FF00FF; + border-top: 3px solid green; + border-bottom: 3px solid blue; + background-color: #ccffcc; + } + td { + border: 2px solid blue; + background-color: #ffffee; + } + td.second { + border: 2px dashed green; + } + div.test { + color: #CC0000; + background-color: #FFFF66; + font-family: helvetica; + font-size: 10pt; + border-style: solid solid solid solid; + border-width: 2px 2px 2px 2px; + border-color: green #FF00FF blue red; + text-align: center; + } + .lowercase { + text-transform: lowercase; + } + .uppercase { + text-transform: uppercase; + } + .capitalize { + text-transform: capitalize; + } +</style> + +<h1 class="title">Example of <i style="color:#990000">XHTML + CSS</i></h1> + +<p class="first">Example of paragraph with class selector. <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.</span></p> + +<p id="second">Example of paragraph with ID selector. <span>Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.</span></p> + +<div class="test">example of DIV with border and fill. +<br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. +<br /><span class="lowercase">text-transform <b>LOWERCASE</b> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span> +<br /><span class="uppercase">text-transform <b>uppercase</b> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span> +<br /><span class="capitalize">text-transform <b>cAPITALIZE</b> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</span> +</div> + +<br /> + +<table class="first" cellpadding="4" cellspacing="6"> + <tr> + <td width="30" align="center"><b>No.</b></td> + <td width="140" align="center" bgcolor="#FFFF00"><b>XXXX</b></td> + <td width="140" align="center"><b>XXXX</b></td> + <td width="80" align="center"> <b>XXXX</b></td> + <td width="80" align="center"><b>XXXX</b></td> + <td width="45" align="center"><b>XXXX</b></td> + </tr> + <tr> + <td width="30" align="center">1.</td> + <td width="140" rowspan="6" class="second">XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX</td> + <td width="140">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td width="80">XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="30" align="center" rowspan="3">2.</td> + <td width="140" rowspan="3">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="80">XXXX<br />XXXX<br />XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="80" rowspan="2" >XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr> + <td width="30" align="center">3.</td> + <td width="140">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> + <tr bgcolor="#FFFF80"> + <td width="30" align="center">4.</td> + <td width="140" bgcolor="#00CC00" color="#FFFF00">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td width="80">XXXX<br />XXXX</td> + <td align="center" width="45">XXXX<br />XXXX</td> + </tr> +</table> +EOF; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// add a page +$pdf->AddPage(); + +$html = ' +<h1>HTML TIPS & TRICKS</h1> + +<h3>REMOVE CELL PADDING</h3> +<pre>$pdf->SetCellPadding(0);</pre> +This is used to remove any additional vertical space inside a single cell of text. + +<h3>REMOVE TAG TOP AND BOTTOM MARGINS</h3> +<pre>$tagvs = array(\'p\' => array(0 => array(\'h\' => 0, \'n\' => 0), 1 => array(\'h\' => 0, \'n\' => 0))); +$pdf->setHtmlVSpace($tagvs);</pre> +Since the CSS margin command is not yet implemented on TCPDF, you need to set the spacing of block tags using the following method. + +<h3>SET LINE HEIGHT</h3> +<pre>$pdf->setCellHeightRatio(1.25);</pre> +You can use the following method to fine tune the line height (the number is a percentage relative to font height). + +<h3>CHANGE THE PIXEL CONVERSION RATIO</h3> +<pre>$pdf->setImageScale(0.47);</pre> +This is used to adjust the conversion ratio between pixels and document units. Increase the value to get smaller objects.<br /> +Since you are using pixel unit, this method is important to set theright zoom factor.<br /><br /> +Suppose that you want to print a web page larger 1024 pixels to fill all the available page width.<br /> +An A4 page is larger 210mm equivalent to 8.268 inches, if you subtract 13mm (0.512") of margins for each side, the remaining space is 184mm (7.244 inches).<br /> +The default resolution for a PDF document is 300 DPI (dots per inch), so you have 7.244 * 300 = 2173.2 dots (this is the maximum number of points you can print at 300 DPI for the given width).<br /> +The conversion ratio is approximatively 1024 / 2173.2 = 0.47 px/dots<br /> +If the web page is larger 1280 pixels, on the same A4 page the conversion ratio to use is 1280 / 2173.2 = 0.59 pixels/dots'; + +// output the HTML content +$pdf->writeHTML($html, true, false, true, false, ''); + +// reset pointer to the last page +$pdf->lastPage(); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_061.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_062.php b/tcpdf/examples/example_062.php new file mode 100644 index 0000000..45fc25d --- /dev/null +++ b/tcpdf/examples/example_062.php @@ -0,0 +1,140 @@ +<?php +//============================================================+ +// File name : example_062.php +// Begin : 2010-08-25 +// Last Update : 2013-05-14 +// +// Description : Example 062 for TCPDF class +// XObject Template +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: XObject Template + * @author Nicola Asuni + * @since 2010-08-25 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 062'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 062', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 20); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'XObject Templates', '', 0, 'C', 1, 0, false, false, 0); + +/* + * An XObject Template is a PDF block that is a self-contained + * description of any sequence of graphics objects (including path + * objects, text objects, and sampled images). + * An XObject Template may be painted multiple times, either on + * several pages or at several locations on the same page and produces + * the same results each time, subject only to the graphics state at + * the time it is invoked. + */ + + +// start a new XObject Template and set transparency group option +$template_id = $pdf->startTemplate(60, 60, true); + +// create Template content +// ................................................................... +//Start Graphic Transformation +$pdf->StartTransform(); + +// set clipping mask +$pdf->StarPolygon(30, 30, 29, 10, 3, 0, 1, 'CNZ'); + +// draw jpeg image to be clipped +$pdf->Image('images/image_demo.jpg', 0, 0, 60, 60, '', '', '', true, 72, '', false, false, 0, false, false, false); + +//Stop Graphic Transformation +$pdf->StopTransform(); + +$pdf->SetXY(0, 0); + +$pdf->SetFont('times', '', 40); + +$pdf->SetTextColor(255, 0, 0); + +// print a text +$pdf->Cell(60, 60, 'Template', 0, 0, 'C', false, '', 0, false, 'T', 'M'); +// ................................................................... + +// end the current Template +$pdf->endTemplate(); + + +// print the selected Template various times using various transparencies + +$pdf->SetAlpha(0.4); +$pdf->printTemplate($template_id, 15, 50, 20, 20, '', '', false); + +$pdf->SetAlpha(0.6); +$pdf->printTemplate($template_id, 27, 62, 40, 40, '', '', false); + +$pdf->SetAlpha(0.8); +$pdf->printTemplate($template_id, 55, 85, 60, 60, '', '', false); + +$pdf->SetAlpha(1); +$pdf->printTemplate($template_id, 95, 125, 80, 80, '', '', false); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_062.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_063.php b/tcpdf/examples/example_063.php new file mode 100644 index 0000000..de13515 --- /dev/null +++ b/tcpdf/examples/example_063.php @@ -0,0 +1,131 @@ +<?php +//============================================================+ +// File name : example_063.php +// Begin : 2010-09-29 +// Last Update : 2013-05-14 +// +// Description : Example 063 for TCPDF class +// Text stretching and spacing (tracking) +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: Text stretching and spacing (tracking) + * @author Nicola Asuni + * @since 2010-09-29 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 063'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 063', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', 'B', 16); + +// add a page +$pdf->AddPage(); + +$pdf->Write(0, 'Example of Text Stretching and Spacing (tracking)', '', 0, 'L', true, 0, false, false, 0); +$pdf->Ln(5); + +// create several cells to display all cases of stretching and spacing combinations. + +$fonts = array('times', 'dejavuserif'); +$alignments = array('L' => 'LEFT', 'C' => 'CENTER', 'R' => 'RIGHT', 'J' => 'JUSTIFY'); + + +// Test all cases using direct stretching/spacing methods +foreach ($fonts as $fkey => $font) { + $pdf->SetFont($font, '', 14); + foreach ($alignments as $align_mode => $align_name) { + for ($stretching = 90; $stretching <= 110; $stretching += 10) { + for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { + $pdf->setFontStretching($stretching); + $pdf->setFontSpacing($spacing); + $txt = $align_name.' | Stretching = '.$stretching.'% | Spacing = '.sprintf('%+.3F', $spacing).'mm'; + $pdf->Cell(0, 0, $txt, 1, 1, $align_mode); + } + } + } + $pdf->AddPage(); +} + + +// Test all cases using CSS stretching/spacing properties +foreach ($fonts as $fkey => $font) { + $pdf->SetFont($font, '', 11); + foreach ($alignments as $align_mode => $align_name) { + for ($stretching = 90; $stretching <= 110; $stretching += 10) { + for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { + $html = '<span style="font-stretch:'.$stretching.'%;letter-spacing:'.$spacing.'mm;"><span style="color:red;">'.$align_name.'</span> | <span style="color:green;">Stretching = '.$stretching.'%</span> | <span style="color:blue;">Spacing = '.sprintf('%+.3F', $spacing).'mm</span><br />Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</span>'; + $pdf->writeHTMLCell(0, 0, '', '', $html, 1, 1, false, true, $align_mode, false); + } + } + if (!(($fkey == 1) AND ($align_mode == 'J'))) { + $pdf->AddPage(); + } + } +} + + +// reset font stretching +$pdf->setFontStretching(100); + +// reset font spacing +$pdf->setFontSpacing(0); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_063.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_064.php b/tcpdf/examples/example_064.php new file mode 100644 index 0000000..39da071 --- /dev/null +++ b/tcpdf/examples/example_064.php @@ -0,0 +1,176 @@ +<?php +//============================================================+ +// File name : example_064.php +// Begin : 2010-10-13 +// Last Update : 2013-05-14 +// +// Description : Example 064 for TCPDF class +// No-write page regions +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF TEST document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: No-write page regions + * @author Nicola Asuni + * @since 2010-10-14 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 064'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 064', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set font +$pdf->SetFont('helvetica', '', 8); + + +// define some html content for testing +$txt = '<p style="text-align:justify;color:blue;font-size:12pt;"><span style="color:red;font-size:14pt;font-weight:bold;">TEST PAGE REGIONS:</span> <span style="color:green;">A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. A region is always aligned on the left or right side of the page ad is defined using a vertical segment. You can set multiple regions for the same page. You can combine several adjacent regions to approximate curved shapes.</span> Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. +Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. +Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. <img src="images/image_demo.jpg" width="5mm" height="5mm" /> Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. +Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. +Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.</p>'; + + +// add a page +$pdf->AddPage(); + +// print some graphic content +$pdf->Image('images/image_demo.jpg', 155, 30, 40, 40, 'JPG', '', '', true); +$pdf->Image('images/image_demo.jpg', 15, 230, 40, 40, 'JPG', '', '', true); + +// define some graphic styles +$styleA = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)); +$styleB = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 3, 'color' => array(127, 127, 127)); +$pdf->SetFillColor(220, 255, 220); + +// write a trapezoid with some information about no-write page regions +$pdf->Polygon(array(15,90, 57,90, 67,140, 15,140), 'DF', array($styleB, $styleA, $styleB, $styleB)); +$pdf->SetXY(15, 90); +$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'R', false, '', 0, false, 'T', 'T'); +$pdf->SetXY(15, 140); +$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'R', false, '', 0, false, 'B', 'B'); +$pdf->SetXY(15, 115); +$pdf->Cell(40, 0, 'side', 0, 0, 'R', false, '', 0, false, 'B', 'B'); +$pdf->SetLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); +$pdf->Arrow(60, 115, 35, 115, 2, 5, 15); + +// write a trapezoid with some information about no-write page regions +$pdf->Polygon(array(145,130, 195,130, 195,180, 155,180), 'DF', array($styleB, $styleB, $styleB, $styleA)); +$pdf->SetXY(145, 130); +$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'L', false, '', 0, false, 'T', 'T'); +$pdf->SetXY(155, 180); +$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'L', false, '', 0, false, 'B', 'B'); +$pdf->SetXY(160, 155); +$pdf->Cell(30, 0, 'side', 0, 0, 'L', false, '', 0, false, 'B', 'B'); +$pdf->SetLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); +$pdf->Arrow(155, 155, 180, 155, 2, 5, 15); + +// reset x,y position +$pdf->SetXY(15, 30); + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +// define no-write page regions to avoid text overlapping images +/* + 'page' => page number or empy for current page + 'xt' => X top + 'yt' => Y top + 'yb' => Y bottom + 'side' => page side ('L' = left or 'R' = right) +*/ +$regions = array( +array('page' => '', 'xt' => 153, 'yt' => 30, 'xb' => 153, 'yb' => 70, 'side' => 'R'), +array('page' => '', 'xt' => 60, 'yt' => 90, 'xb' => 70, 'yb' => 140, 'side' => 'L'), +array('page' => '', 'xt' => 143, 'yt' => 130, 'xb' => 153, 'yb' => 180, 'side' => 'R'), +array('page' => '', 'xt' => 58, 'yt' => 230, 'xb' => 58, 'yb' => 270, 'side' => 'L') +); + +// set page regions, check also getPageRegions(), addPageRegion() and removePageRegion() +$pdf->setPageRegions($regions); + +// write html text +$pdf->writeHTML($txt, true, false, true, false, ''); + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// set a circular no-write region on the second page +$regions = array( +array('page' => 2, 'xt' => 195, 'yt' => 110, 'xb' => 179.693, 'yb' => 113.045, 'side' => 'R'), +array('page' => 2, 'xt' => 179.693, 'yt' => 113.045, 'xb' => 166.716, 'yb' => 121.716, 'side' => 'R'), +array('page' => 2, 'xt' => 166.716, 'yt' => 121.716, 'xb' => 158.045, 'yb' => 134.693, 'side' => 'R'), +array('page' => 2, 'xt' => 158.045, 'yt' => 134.693, 'xb' => 155, 'yb' => 150, 'side' => 'R'), +array('page' => 2, 'xt' => 155, 'yt' => 150, 'xb' => 158.045, 'yb' => 165.307, 'side' => 'R'), +array('page' => 2, 'xt' => 158.045, 'yt' => 165.307, 'xb' => 166.716, 'yb' => 178.284, 'side' => 'R'), +array('page' => 2, 'xt' => 166.716, 'yt' => 178.284, 'xb' => 179.693, 'yb' => 186.955, 'side' => 'R'), +array('page' => 2, 'xt' => 179.693, 'yt' => 186.955, 'xb' => 195, 'yb' => 190, 'side' => 'R') +); +$pdf->setPageRegions($regions); + +$pdf->Polygon(array(195,110, 179.693,113.045, 166.716,121.716, 158.045,134.693, 155,150, 158.045,165.307, 166.716,178.284, 179.693,186.955, 195,190), 'DF'); + +$pdf->Ln(15); + +// define some html content for testing +$txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.'."\n"; + +// write text +$pdf->MultiCell(0, 0, $txt, 0, 'J', false, 1, '', '', true, 0, false, true, 0, 'T', false); + +// --------------------------------------------------------- + +//Close and output PDF document +$pdf->Output('example_064.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/example_065.php b/tcpdf/examples/example_065.php new file mode 100644 index 0000000..f1bbcbe --- /dev/null +++ b/tcpdf/examples/example_065.php @@ -0,0 +1,98 @@ +<?php +//============================================================+ +// File name : example_065.php +// Begin : 2011-09-28 +// Last Update : 2013-05-14 +// +// Description : Example 065 for TCPDF class +// Creates an example PDF/A-1b document using TCPDF +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Creates an example PDF/A-1b document using TCPDF + * @package com.tecnick.tcpdf + * @abstract TCPDF - Example: PDF/A-1b mode + * @author Nicola Asuni + * @since 2011-09-28 + */ + +// Include the main TCPDF library (search for installation path). +require_once('tcpdf_include.php'); + +// create new PDF document +$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false, true); + +// set document information +$pdf->SetCreator(PDF_CREATOR); +$pdf->SetAuthor('Nicola Asuni'); +$pdf->SetTitle('TCPDF Example 065'); +$pdf->SetSubject('TCPDF Tutorial'); +$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + +// set default header data +$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 065', PDF_HEADER_STRING); + +// set header and footer fonts +$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + +// set default monospaced font +$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + +// set margins +$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); +$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); +$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + +// set auto page breaks +$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + +// set image scale factor +$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + +// set some language-dependent strings (optional) +if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); +} + +// --------------------------------------------------------- + +// set default font subsetting mode +$pdf->setFontSubsetting(true); + +// Set font +$pdf->SetFont('helvetica', '', 14, '', true); + +// Add a page +// This method has several options, check the source code documentation for more information. +$pdf->AddPage(); + +// Set some content to print +$html = <<<EOD +<h1>Example of <a href="http://www.tcpdf.org" style="text-decoration:none;background-color:#CC0000;color:black;">&nbsp;<span style="color:black;">TC</span><span style="color:white;">PDF</span>&nbsp;</a> document in <span style="background-color:#99ccff;color:black;"> PDF/A-1b </span> mode.</h1> +<i>This document conforms to the standard <b>PDF/A-1b (ISO 19005-1:2005)</b>.</i> +<p>Please check the source code documentation and other examples for further information (<a href="http://www.tcpdf.org">http://www.tcpdf.org</a>).</p> +<p style="color:#CC0000;">TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE <a href="http://sourceforge.net/donate/index.php?group_id=128076">MAKE A DONATION!</a></p> +EOD; + +// Print text using writeHTMLCell() +$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + +// --------------------------------------------------------- + +// Close and output PDF document +// This method has several options, check the source code documentation for more information. +$pdf->Output('example_065.pdf', 'I'); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/images/_blank.png b/tcpdf/examples/images/_blank.png new file mode 100644 index 0000000..38f7b2f Binary files /dev/null and b/tcpdf/examples/images/_blank.png differ diff --git a/tcpdf/examples/images/alpha.png b/tcpdf/examples/images/alpha.png new file mode 100644 index 0000000..5447918 Binary files /dev/null and b/tcpdf/examples/images/alpha.png differ diff --git a/tcpdf/examples/images/image_demo.jpg b/tcpdf/examples/images/image_demo.jpg new file mode 100644 index 0000000..262bce2 Binary files /dev/null and b/tcpdf/examples/images/image_demo.jpg differ diff --git a/tcpdf/examples/images/image_with_alpha.png b/tcpdf/examples/images/image_with_alpha.png new file mode 100644 index 0000000..3011618 Binary files /dev/null and b/tcpdf/examples/images/image_with_alpha.png differ diff --git a/tcpdf/examples/images/img.png b/tcpdf/examples/images/img.png new file mode 100644 index 0000000..9c1a075 Binary files /dev/null and b/tcpdf/examples/images/img.png differ diff --git a/tcpdf/examples/images/logo_example.gif b/tcpdf/examples/images/logo_example.gif new file mode 100644 index 0000000..010b487 Binary files /dev/null and b/tcpdf/examples/images/logo_example.gif differ diff --git a/tcpdf/examples/images/logo_example.jpg b/tcpdf/examples/images/logo_example.jpg new file mode 100644 index 0000000..6d9b8fd Binary files /dev/null and b/tcpdf/examples/images/logo_example.jpg differ diff --git a/tcpdf/examples/images/logo_example.png b/tcpdf/examples/images/logo_example.png new file mode 100644 index 0000000..1379945 Binary files /dev/null and b/tcpdf/examples/images/logo_example.png differ diff --git a/tcpdf/examples/images/tcpdf_box.ai b/tcpdf/examples/images/tcpdf_box.ai new file mode 100644 index 0000000..0c14846 --- /dev/null +++ b/tcpdf/examples/images/tcpdf_box.ai @@ -0,0 +1,214 @@ +%!PS-Adobe-3.0 EPSF +%%Creator: Adobe Illustrator +%%BoundingBox: -7 0 487 327 +%%HiResBoundingBox: -6.66162 2.44007e-05 486.662 326.648 +%AI5_FileFormat 3 +%%EndComments +%%BeginProlog +%%EndProlog +%%BeginSetup +%%EndSetup +1 XR +%AI5_BeginLayer +1 1 1 1 0 0 -1 49 80 161 Lb +(New Layer) Ln +0.620000 0.580000 0.435000 0.996000 K +[] 0 d +1.402287 w +0 j +0 J +0.263000 0.290000 0.898000 0.263000 k +72.7885 255.643 m +277.08 286.778 L +425.478 260.993 L +408.269 190.301 L +113.504 181.247 L +113.504 181.247 72.9813 241.769 72.7885 255.643 C +b +0.620000 0.580000 0.435000 0.996000 K +1 j +0.094000 0.102000 0.369000 0.016000 k +423.247 259.914 m +240.217 207.097 L +240.635 0.701168 L +397.776 116.053 L +423.247 259.914 L +b +0.620000 0.580000 0.435000 0.996000 K +0.133000 0.141000 0.541000 0.035000 k +72.1745 254.207 m +240.217 207.097 L +240.561 0.783816 L +101.054 87.946 L +72.1745 254.207 L +b +0.047000 0.059000 0.184000 0.004000 k +423.247 259.914 m +308.187 51.1553 L +396.862 116.972 L +423.247 259.914 L +f +0.620000 0.580000 0.435000 0.996000 K +0 j +0.047000 0.059000 0.184000 0.004000 k +479.312 250.415 m +423.613 260.243 L +240.385 206.966 L +314.061 186.394 L +479.312 250.415 L +b +0.620000 0.580000 0.435000 0.996000 K +0.047000 0.059000 0.184000 0.004000 k +69.9121 254.273 m +237.965 207.131 L +163.618 164.537 L +0.687544 234.686 L +69.9121 254.273 L +b +0.620000 0.580000 0.435000 0.996000 K +0.047000 0.059000 0.184000 0.004000 k +242.971 319.299 m +275.613 286.233 L +72.5703 254.295 L +16.555 296.161 L +242.971 319.299 L +b +0.620000 0.580000 0.435000 0.996000 K +0.133000 0.141000 0.541000 0.035000 k +423.496 260.684 m +275.426 286.441 L +307.326 316.69 L +462.053 292.606 L +423.496 260.684 L +b +0.196000 0.227000 0.871000 0.106000 k +75.26 254.037 m +274.806 285.371 L +227.928 211.257 L +163.396 228.836 130.937 238.701 75.26 254.037 C +f +0.620000 0.580000 0.435000 0.996000 K +1 j +0.169000 0.314000 0.424000 0.094000 k +275.528 286.329 m +274.75 216.78 L +275.528 286.329 L +b +0.031000 0.949000 0.745000 0.729000 k +285.929 160.982 m +285.929 160.982 285.078 139.734 285.078 139.734 C +285.078 139.734 275.378 135.096 275.378 135.096 C +275.378 135.096 273.058 57.6061 273.058 57.6061 C +273.058 57.6061 257.133 47.3536 257.133 47.3536 C +257.133 47.3536 258.059 126.816 258.059 126.816 C +258.059 126.816 247.186 121.618 247.186 121.618 C +247.186 121.618 247.186 144.26 247.186 144.26 C +247.186 144.26 285.929 160.982 285.929 160.982 C +F +0.031000 0.949000 0.745000 0.729000 k +320.884 135.342 m +320.884 135.342 307.279 128.129 307.279 128.129 C +307.279 128.129 308.36 144.944 308.36 144.944 C +308.681 149.948 308.724 153.011 308.483 154.097 C +308.268 155.24 307.632 155.567 306.572 155.073 C +305.368 154.512 304.553 153.381 304.135 151.687 C +303.718 149.995 303.36 146.608 303.063 141.565 C +303.063 141.565 300.477 97.6864 300.477 97.6864 C +300.22 93.3298 300.208 90.6032 300.439 89.4791 C +300.668 88.3599 301.318 88.1316 302.385 88.7881 C +303.403 89.4149 304.103 90.4684 304.487 91.9528 C +304.894 93.4524 305.253 96.6211 305.567 101.497 C +305.567 101.497 306.297 112.86 306.297 112.86 C +306.297 112.86 319.718 120.438 319.718 120.438 C +319.718 120.438 319.446 116.964 319.446 116.964 C +318.734 107.862 317.873 101.293 316.856 97.1389 C +315.864 93.0164 314.026 88.8059 311.329 84.474 C +308.636 80.1307 305.421 76.743 301.646 74.2975 C +297.651 71.7096 294.365 70.7251 291.812 71.3887 C +289.213 72.064 287.545 74.2699 286.838 78.0362 C +286.121 81.8925 285.954 88.3297 286.349 97.4441 C +286.349 97.4441 287.575 125.751 287.575 125.751 C +287.89 133.007 288.277 138.586 288.737 142.421 C +289.202 146.323 290.251 150.369 291.883 154.544 C +293.54 158.732 295.716 162.4 298.394 165.529 C +301.078 168.689 304.052 170.959 307.296 172.342 C +311.621 174.188 315.02 174.154 317.521 172.296 C +319.974 170.473 321.427 167.541 321.911 163.514 C +322.39 159.578 322.275 153.119 321.579 144.225 C +321.579 144.225 320.884 135.342 320.884 135.342 C +F +0.031000 0.949000 0.745000 0.729000 k +*u +329.084 179.607 m +329.084 179.607 342.074 185.214 342.074 185.214 C +345.446 186.669 347.94 187.235 349.586 186.932 C +351.233 186.642 352.374 185.695 353.019 184.1 C +353.677 182.527 353.999 180.418 353.991 177.777 C +354.005 175.2 353.703 171.072 353.088 165.429 C +353.088 165.429 352.244 157.683 352.244 157.683 C +351.634 152.084 350.908 147.89 350.063 145.056 C +349.22 142.228 347.957 139.718 346.265 137.514 C +344.583 135.308 342.474 133.487 339.919 132.046 C +339.919 132.046 336.736 130.25 336.736 130.25 C +336.736 130.25 333.512 96.527 333.512 96.527 C +333.512 96.527 321.545 88.8222 321.545 88.8222 C +321.545 88.8222 329.084 179.607 329.084 179.607 C +F +340.42 168.795 m +340.42 168.795 338.184 145.407 338.184 145.407 C +338.526 145.552 338.82 145.69 339.068 145.822 C +340.172 146.404 340.98 147.319 341.498 148.568 C +342.038 149.863 342.473 152.174 342.805 155.518 C +342.805 155.518 343.55 163.014 343.55 163.014 C +343.863 166.167 343.82 168.111 343.416 168.832 C +343.011 169.557 342.015 169.547 340.42 168.795 C +F +*U +0.031000 0.949000 0.745000 0.729000 k +*u +359.204 192.607 m +359.204 192.607 367.556 196.212 367.556 196.212 C +372.753 198.454 376.114 199.414 377.734 199.14 C +379.351 198.877 380.446 197.777 381.03 195.854 C +381.608 193.948 381.815 191.642 381.655 188.934 C +381.502 186.28 380.88 180.934 379.804 172.981 C +379.804 172.981 375.968 144.653 375.968 144.653 C +375.021 137.654 374.236 132.926 373.604 130.399 C +372.993 127.921 372.216 125.786 371.268 123.986 C +370.323 122.215 369.243 120.698 368.023 119.43 C +366.801 118.187 365.012 116.807 362.638 115.279 C +362.638 115.279 349.593 106.88 349.593 106.88 C +349.593 106.88 359.204 192.607 359.204 192.607 C +F +368.395 181.985 m +368.395 181.985 361.644 126.918 361.644 126.918 C +363.113 127.815 364.084 128.947 364.566 130.32 C +365.053 131.727 365.629 135.077 366.301 140.416 C +366.301 140.416 370.368 172.752 370.368 172.752 C +370.86 176.666 371.12 179.163 371.145 180.223 C +371.168 181.285 371.006 181.972 370.654 182.282 C +370.306 182.629 369.555 182.531 368.395 181.985 C +F +*U +0.031000 0.949000 0.745000 0.729000 k +387.58 204.854 m +387.58 204.854 403.348 211.659 403.348 211.659 C +403.348 211.659 400.803 195.062 400.803 195.062 C +400.803 195.062 394.579 192.087 394.579 192.087 C +394.579 192.087 392.296 176.619 392.296 176.619 C +392.296 176.619 397.801 179.482 397.801 179.482 C +397.801 179.482 395.533 164.634 395.533 164.634 C +395.533 164.634 390.075 161.574 390.075 161.574 C +390.075 161.574 385.406 129.937 385.406 129.937 C +385.406 129.937 376.374 124.122 376.374 124.122 C +376.374 124.122 387.58 204.854 387.58 204.854 C +F +LB +%AI5_EndLayer-- +%AI5_BeginLayer +1 1 1 1 0 0 -1 49 80 161 Lb +(MasterLayer 1) Ln +LB +%AI5_EndLayer-- +%%Trailer +%%EOF diff --git a/tcpdf/examples/images/tcpdf_box.svg b/tcpdf/examples/images/tcpdf_box.svg new file mode 100644 index 0000000..8c29e64 --- /dev/null +++ b/tcpdf/examples/images/tcpdf_box.svg @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="600" + height="400" + id="tcpdf_box"> + <path + d="M 90.985619,80.446426 346.35007,41.527969 531.84796,73.758171 510.33606,162.12434 141.88004,173.44107 c 0,0 -50.653416,-75.65219 -50.894421,-92.994643 z" + id="path3233" + style="fill:#a0892c;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-miterlimit:4" /> + <path + d="M 529.05896,75.10788 300.27124,141.12856 300.79367,399.12354 497.22012,254.93323 529.05896,75.10788 z" + id="path2459" + style="fill:#e9ddaf;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-linejoin:round;stroke-miterlimit:4" /> + <path + d="M 90.218147,82.241417 300.27124,141.12855 300.7012,399.02023 126.31743,290.06747 90.218147,82.241417 z" + id="path3231" + style="fill:#decd87;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-linejoin:round;stroke-miterlimit:4" /> + <path + d="M 529.05896,75.10788 385.23331,336.05582 496.07782,253.785 529.05896,75.10788 z" + id="path3204" + style="fill:#f4eed7;fill-rule:evenodd" /> + <path + d="M 599.14056,86.981453 529.51617,74.695641 300.48178,141.29306 392.57645,167.00775 599.14056,86.981453 z" + id="path3243" + style="fill:#f4eed7;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-miterlimit:4" /> + <path + d="M 87.390083,82.159248 297.45667,141.08572 204.52271,194.32928 0.85943,106.64266 87.390083,82.159248 z" + id="path3245" + style="fill:#f4eed7;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-miterlimit:4" /> + <path + d="M 303.71381,0.87646 344.51688,42.208691 90.712837,82.130967 20.69376,29.79868 303.71381,0.876461 z" + id="path3247" + style="fill:#f4eed7;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-miterlimit:4" /> + <path + d="M 529.36993,74.145378 344.28207,41.9492 384.15726,4.13702 577.56598,34.24292 529.36993,74.145378 z" + id="path3263" + style="fill:#decd87;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-miterlimit:4" /> + <path + d="M 94.075058,82.454048 343.50751,43.286419 284.91046,135.92899 C 204.24522,113.95545 163.67139,101.62348 94.075058,82.454049 z" + id="path3206" + style="fill:#c8ab37;fill-rule:evenodd" /> + <path + d="m 344.40955,42.08839 -0.97239,86.93644 0.97239,-86.93644 z" + id="path2426" + style="fill:#caa98d;fill-rule:evenodd;stroke:#000000;stroke-width:1.752859;stroke-linejoin:round;stroke-miterlimit:4" /> + <path + d="m 357.41141,198.77278 c 0,0 -1.06345,26.55933 -1.06345,26.55933 0,0 -12.12588,5.79739 -12.12588,5.79739 0,0 -2.89969,96.8629 -2.89969,96.8629 0,0 -19.9061,12.81561 -19.9061,12.81561 0,0 1.15698,-99.32809 1.15698,-99.32809 0,0 -13.59121,6.49803 -13.59121,6.49803 0,0 0,-28.30334 0,-28.30334 0,0 48.42935,-20.90183 48.42935,-20.90183" + id="path5441" + style="fill:#550000" /> + <path + d="m 401.10504,230.8226 c 0,0 -17.00665,9.0165 -17.00665,9.0165 0,0 1.3512,-21.019 1.3512,-21.019 0.402,-6.2545 0.45517,-10.08344 0.15475,-11.44165 -0.26965,-1.42879 -1.06461,-1.83763 -2.3894,-1.22009 -1.50556,0.70219 -2.52317,2.11514 -3.04563,4.2332 -0.52157,2.11482 -0.96939,6.34812 -1.34085,12.65235 0,0 -3.23221,54.84809 -3.23221,54.84809 -0.32101,5.44577 -0.33578,8.85397 -0.048,10.25909 0.28671,1.39908 1.09888,1.68448 2.43259,0.86377 1.27319,-0.78342 2.14758,-2.10034 2.62838,-3.95581 0.50837,-1.87454 0.95707,-5.83545 1.34897,-11.93002 0,0 0.91309,-14.20398 0.91309,-14.20398 0,0 16.77621,-9.47276 16.77621,-9.47276 0,0 -0.33963,4.34254 -0.33963,4.34254 -0.89019,11.37775 -1.9667,19.58865 -3.23806,24.78162 -1.24018,5.15307 -3.53693,10.4162 -6.90912,15.83102 -3.36563,5.4292 -7.3844,9.66376 -12.10367,12.72073 -4.99368,3.23487 -9.10043,4.46546 -12.29227,3.63599 -3.24878,-0.84418 -5.33295,-3.60156 -6.21771,-8.30939 -0.89523,-4.8204 -1.10458,-12.86691 -0.61096,-24.25988 0,0 1.53271,-35.38347 1.53271,-35.38347 0.3931,-9.07071 0.87778,-16.0441 1.45276,-20.83719 0.58109,-4.87754 1.8923,-9.93605 3.93183,-15.15415 2.07186,-5.235 4.79159,-9.82054 8.13882,-13.73193 3.35501,-3.94881 7.07321,-6.78658 11.12744,-8.51622 5.4072,-2.30643 9.65549,-2.2641 12.78149,0.0581 3.06675,2.27881 4.88321,5.94397 5.48707,10.97809 0.5997,4.91933 0.45568,12.99251 -0.41431,24.11017 0,0 -0.86871,11.10411 -0.86871,11.10411" + id="path5443" + style="fill:#550000" /> + <path + d="m 411.35443,175.49126 c 0,0 16.23862,-7.00843 16.23862,-7.00843 4.21411,-1.81866 7.33169,-2.52597 9.38946,-2.14839 2.05817,0.3633 3.48441,1.54648 4.29062,3.53996 0.82251,1.9665 1.22608,4.60317 1.21613,7.90484 0.0169,3.22044 -0.36075,8.38028 -1.12943,15.43508 0,0 -1.05478,9.68189 -1.05478,9.68189 -0.76248,6.99831 -1.66961,12.24153 -2.72592,15.78421 -1.05399,3.53464 -2.6333,6.67149 -4.74774,9.42722 -2.10278,2.75729 -4.73932,5.03327 -7.93247,6.83464 0,0 -3.97955,2.24502 -3.97955,2.24502 0,0 -4.02936,42.15401 -4.02936,42.15401 0,0 -14.95935,9.63092 -14.95935,9.63092 0,0 9.42377,-113.48097 9.42377,-113.48097 m 14.17023,13.51561 c 0,0 -2.79438,29.23405 -2.79438,29.23405 0.42658,-0.18139 0.79483,-0.35402 1.10511,-0.5179 1.37976,-0.72847 2.39001,-1.87172 3.03671,-3.4328 0.67474,-1.61934 1.21869,-4.50798 1.63415,-8.6878 0,0 0.93119,-9.36968 0.93119,-9.36968 0.39178,-3.9412 0.33706,-6.37085 -0.16742,-7.27288 -0.50681,-0.90578 -1.75189,-0.89307 -3.74564,0.0468" + id="path5445" + style="fill:#550000" /> + <path + d="m 449.00479,159.24159 c 0,0 10.44077,-4.5061 10.44077,-4.5061 6.49575,-2.80348 10.69668,-4.00293 12.72158,-3.6608 2.0213,0.32964 3.39048,1.7039 4.12034,4.10832 0.72277,2.38149 0.98129,5.26491 0.78176,8.64975 -0.19201,3.31783 -0.96899,9.99964 -2.31472,19.94068 0,0 -4.79395,35.41017 -4.79395,35.41017 -1.18439,8.74899 -2.16592,14.65866 -2.95572,17.8175 -0.76312,3.09777 -1.73532,5.76644 -2.91974,8.01586 -1.18118,2.21374 -2.5317,4.11101 -4.05642,5.69523 -1.52753,1.55346 -3.76374,3.27924 -6.73096,5.18953 0,0 -16.30603,10.49793 -16.30603,10.49793 0,0 12.01309,-107.15807 12.01309,-107.15807 m 11.48944,13.27721 c 0,0 -8.43966,68.83415 -8.43966,68.83415 1.83639,-1.12169 3.05044,-2.53693 3.65325,-4.25322 0.60837,-1.758 1.3288,-5.94594 2.16813,-12.61931 0,0 5.08401,-40.4202 5.08401,-40.4202 0.61536,-4.89276 0.94013,-8.01438 0.9708,-9.3384 0.0297,-1.32778 -0.17337,-2.18634 -0.61277,-2.57413 -0.43551,-0.43419 -1.37487,-0.31191 -2.82376,0.37111" + id="path5447" + style="fill:#550000" /> + <path + d="m 484.47485,143.93306 c 0,0 19.70978,-8.50664 19.70978,-8.50664 0,0 -3.18149,20.74545 -3.18149,20.74545 0,0 -7.77993,3.71959 -7.77993,3.71959 0,0 -2.85361,19.33512 -2.85361,19.33512 0,0 6.88156,-3.57958 6.88156,-3.57958 0,0 -2.83499,18.56089 -2.83499,18.56089 0,0 -6.82193,3.82412 -6.82193,3.82412 0,0 -5.83667,39.54715 -5.83667,39.54715 0,0 -11.29004,7.26862 -11.29004,7.26862 0,0 14.00732,-100.91472 14.00732,-100.91472" + id="path5449" + style="fill:#550000" /> +</svg> diff --git a/tcpdf/examples/images/tcpdf_cell.png b/tcpdf/examples/images/tcpdf_cell.png new file mode 100644 index 0000000..98a1553 Binary files /dev/null and b/tcpdf/examples/images/tcpdf_cell.png differ diff --git a/tcpdf/examples/images/tcpdf_logo.jpg b/tcpdf/examples/images/tcpdf_logo.jpg new file mode 100644 index 0000000..257f8fb Binary files /dev/null and b/tcpdf/examples/images/tcpdf_logo.jpg differ diff --git a/tcpdf/examples/images/tcpdf_signature.png b/tcpdf/examples/images/tcpdf_signature.png new file mode 100644 index 0000000..a4f0637 Binary files /dev/null and b/tcpdf/examples/images/tcpdf_signature.png differ diff --git a/tcpdf/examples/images/testsvg.svg b/tcpdf/examples/images/testsvg.svg new file mode 100644 index 0000000..fd8314e --- /dev/null +++ b/tcpdf/examples/images/testsvg.svg @@ -0,0 +1,328 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + version="1.1" + width="12cm" + height="6cm" + id="svg2"> + <desc + id="desc4">TCPDF SVG EXAMPLE</desc> + <defs + id="defs42"> + <radialGradient + cx="85" + cy="15" + r="5.25" + fx="85" + fy="15" + id="radialGradient2865" + xlink:href="#MyRGradient" + gradientUnits="userSpaceOnUse" /> + <radialGradient + cx="60" + cy="25" + r="10.5" + fx="60" + fy="25" + id="radialGradient2867" + xlink:href="#MyRGradient" + gradientUnits="userSpaceOnUse" /> + <radialGradient + cx="17.82198" + cy="28.055244" + r="10.871407" + fx="17.82198" + fy="28.055244" + id="radialGradient2869" + xlink:href="#MyRGradient" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.6200333,0,0,1.8396889,173.9517,-9.005912)" /> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient5087" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <linearGradient + id="linearGradient5075"> + <stop + id="stop5077" + style="stop-color:#ffff00;stop-opacity:1" + offset="0" /> + <stop + id="stop5079" + style="stop-color:#ff0000;stop-opacity:1" + offset="1" /> + </linearGradient> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient2846" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <linearGradient + id="linearGradient2848"> + <stop + id="stop2850" + style="stop-color:#ffff00;stop-opacity:1" + offset="0" /> + <stop + id="stop2852" + style="stop-color:#ff0000;stop-opacity:1" + offset="1" /> + </linearGradient> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient2854" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <linearGradient + id="linearGradient2856"> + <stop + id="stop2858" + style="stop-color:#ffff00;stop-opacity:1" + offset="0" /> + <stop + id="stop2860" + style="stop-color:#ff0000;stop-opacity:1" + offset="1" /> + </linearGradient> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient2862" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <linearGradient + id="linearGradient2864"> + <stop + id="stop2866" + style="stop-color:#ffff00;stop-opacity:1" + offset="0" /> + <stop + id="stop2868" + style="stop-color:#ff0000;stop-opacity:1" + offset="1" /> + </linearGradient> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient2885" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <radialGradient + cx="60" + cy="25" + r="10.5" + fx="60" + fy="25" + id="radialGradient5215" + xlink:href="#MyRGradient" + gradientUnits="userSpaceOnUse" /> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient5223" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient5245" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient5261" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(3.2520801,0,0,1.0907419,-234.6921,-1.613686)" /> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient5264" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.53063427,0,0,0.17133835,-41.5959,-53.579631)" /> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient5267" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.53063427,0,0,0.17133835,-41.5959,-53.579631)" /> + <radialGradient + cx="184.10963" + cy="476.55164" + r="74.151497" + fx="184.10963" + fy="476.55164" + id="radialGradient5270" + xlink:href="#linearGradient5075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.53063427,0,0,0.17133835,-41.5959,-53.579631)" /> + <radialGradient + cx="85" + cy="15" + r="5.25" + fx="85" + fy="15" + id="radialGradient5295" + xlink:href="#MyRGradient" + gradientUnits="userSpaceOnUse" /> + </defs> + <linearGradient + x1="2.4930596" + y1="8.1225491" + x2="58.448399" + y2="8.1225491" + id="MyLGradient" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.1674701,3.2244804e-8,-1.0401032e-8,0.46846403,253.27742,-193.75856)"> + <stop + id="stop7" + style="stop-color:#ff6600;stop-opacity:1" + offset="0.05" /> + <stop + id="stop9" + style="stop-color:#ffff66;stop-opacity:1" + offset="0.94999999" /> + </linearGradient> + <radialGradient + id="MyRGradient"> + <stop + id="stop12" + style="stop-color:#0033ff;stop-opacity:1" + offset="0.05" /> + <stop + id="stop14" + style="stop-color:#ffff66;stop-opacity:1" + offset="0.94999999" /> + </radialGradient> + <rect + width="120.08073" + height="25.367481" + rx="3.602421" + ry="2.5367482" + x="259.28146" + y="-189.53065" + transform="matrix(0.71626866,0.69782463,-0.72008162,0.69388937,0,0)" + id="rect16" + style="fill:url(#MyLGradient);stroke:#0000ff;stroke-width:1.00766146" /> + <ellipse + cx="90" + cy="30" + rx="20" + ry="10" + transform="matrix(1.4285714,0,0,1.4285714,178.03709,88.814199)" + id="ellipse20" + style="fill:#00ff00;stroke:#008000;stroke-width:1" /> + <path + d="m 199.75816,42.607008 c 0,-25.80645 38.7097,-25.80645 38.7097,0 0,25.80645 38.70969,25.80645 38.70969,0 z" + id="path30" + style="fill:url(#radialGradient2869);stroke:#0000ff;stroke-width:1.29032314" /> + <path + d="m 56.981711,101.40999 q 38.411107,-48.013879 76.822209,0 38.41109,48.01387 76.8222,0" + id="path32" + style="fill:none;stroke:#008000;stroke-width:0.96027768" /> + <path + d="m 56.981711,101.40999 38.411107,-48.013879 38.411102,48.013879 38.41109,48.01387 38.41111,-48.01387" + id="path34" + style="fill:none;stroke:#888888;stroke-width:0.38411102" /> + <line + x1="158.17" + y1="196.27382" + x2="403.61057" + y2="196.27382" + id="line22" + style="fill:#ff0000;stroke:#ff0000;stroke-width:2.72711658;stroke-opacity:1" /> + <text + x="158.15259" + y="182.61755" + id="text38" + style="font-size:35.67964172px;font-weight:bold;fill:#0000ff;font-family:Helvetica">www.tcpdf.org</text> + <polygon + points="80,10 90,10 90,20 80,20 80,10 " + transform="matrix(4.7619048,0,0,4.7619048,-28.55484,-29.862646)" + id="polygon26" + style="fill:url(#radialGradient5295);stroke:#ff0000;stroke-width:0.5" /> + <path + d="M 172.22678,86.983374 H 140.4086 A 31.818187,31.818187 0 1 0 172.22678,55.16517 z" + id="path10" + style="fill:#ff0000;stroke:#0000ff;stroke-width:1.06060624" /> + <path + d="M 166.92376,81.680334 V 49.86215 a 31.818187,31.818187 0 0 0 -31.81821,31.818184 z" + id="path12" + style="fill:#ffff00;stroke:#0000ff;stroke-width:1.06060624" /> + <path + d="m 191.9699,155.18875 13.78038,-6.89018 a 7.7034622,7.7034622 0 1 1 13.78037,-6.89018 l 13.78033,-6.89018 a 15.386158,7.6930793 60 0 1 13.78034,-6.89016 l 13.78034,-6.89017 a 23.073485,7.6911617 60 0 1 13.78037,-6.89019 l 13.78037,-6.89017 a 30.761945,7.6904861 60 1 1 13.78036,-6.89019 l 13.78034,-6.890167" + id="path14" + style="fill:none;stroke:#ff0000;stroke-width:1.37803578" /> + <circle + cx="60" + cy="25" + r="10" + transform="matrix(2.3809524,0,0,2.3809524,-86.105483,113.11357)" + id="circle18" + style="fill:url(#radialGradient5215);stroke:#ff0000;stroke-width:1" /> + <path + d="m 32.361418,52.28906 48.780487,0 -24.39025,48.78049 z" + id="path28" + style="fill:#ffff00;stroke:#0000ff;stroke-width:1.21951222" /> + <image + xlink:href="tcpdf_logo.jpg" + id="image36" + height="26.666664" + width="80" + y="111.32501" + x="16.751661" /> + <text + x="13.399332" + y="41.580627" + id="text5343" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#008000;font-family:helvetica;font-size:30pt">SVG</text> +</svg> diff --git a/tcpdf/examples/images/tux.svg b/tcpdf/examples/images/tux.svg new file mode 100644 index 0000000..de8c869 --- /dev/null +++ b/tcpdf/examples/images/tux.svg @@ -0,0 +1,1487 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="500pt" + height="600pt" + id="svg5620" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="mh_inksc_100511_NewTux.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/media/disk/※T h i n g S/UB SOFTWARE/Openclipart/mh_inksc_100511_NewTux.png" + inkscape:export-xdpi="150.03999" + inkscape:export-ydpi="150.03999"> + <metadata + id="metadata5712"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + inkscape:window-height="728" + inkscape:window-width="1280" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + showgrid="false" + inkscape:zoom="0.65866667" + inkscape:cx="837.03841" + inkscape:cy="362.33556" + inkscape:window-x="0" + inkscape:window-y="24" + inkscape:current-layer="svg5620" + showguides="true" + inkscape:guide-bbox="true" /> + <defs + id="defs5622"> + <linearGradient + id="linearGradient6810"> + <stop + id="stop6812" + offset="0" + style="stop-color:#ffffff;stop-opacity:0.04385965;" /> + <stop + style="stop-color:#ffffff;stop-opacity:0.35964912;" + offset="0.46429399" + id="stop6816" /> + <stop + id="stop6814" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 375 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="625 : 375 : 1" + inkscape:persp3d-origin="312.5 : 250 : 1" + id="perspective5714" /> + <linearGradient + id="linearGradient172"> + <stop + style="stop-color:#3f2600;stop-opacity:0.6;" + offset="0" + id="stop173" /> + <stop + style="stop-color:#3f2600;stop-opacity:0;" + offset="1" + id="stop174" /> + </linearGradient> + <linearGradient + id="linearGradient167"> + <stop + style="stop-color:#ffffff;stop-opacity:0.65;" + offset="0" + id="stop168" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop169" /> + </linearGradient> + <linearGradient + id="linearGradient162"> + <stop + style="stop-color:#ffa63f;stop-opacity:1;" + offset="0" + id="stop163" /> + <stop + style="stop-color:#ffff00;stop-opacity:1;" + offset="1" + id="stop164" /> + </linearGradient> + <linearGradient + id="linearGradient153"> + <stop + style="stop-color:#ffeed7;stop-opacity:1;" + offset="0" + id="stop154" /> + <stop + style="stop-color:#bdbfc2;stop-opacity:1;" + offset="1" + id="stop155" /> + </linearGradient> + <linearGradient + id="linearGradient138"> + <stop + style="stop-color:#ffffff;stop-opacity:0.8;" + offset="0" + id="stop139" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop140" /> + </linearGradient> + <linearGradient + xlink:href="#linearGradient138" + id="linearGradient141" + x1="0.47424799" + y1="0.020191999" + x2="0.417539" + y2="0.90125799" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient142" + x1="0.55880702" + y1="0.031192999" + x2="0.553922" + y2="0.94531101" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient143" + x1="0.46557701" + y1="0.028819799" + x2="0.41365999" + y2="0.93366498" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient144" + x1="0.70346397" + y1="0.059404202" + x2="0.64553201" + y2="0.94063401" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient145" + x1="0.46741399" + y1="-0.036155298" + x2="0.86741799" + y2="0.75857902" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient146" + x1="0.57152498" + y1="0.023441499" + x2="0.57143003" + y2="0.71875" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient147" + x1="0.5" + y1="0.0234362" + x2="0.5" + y2="0.8125" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient148" + x1="0.50799799" + y1="0.37435901" + x2="0.51599997" + y2="0.92820501" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient138" + id="linearGradient149" + x1="0.5" + y1="0.131707" + x2="0.50400001" + y2="0.94634098" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient150" + x1="-0.30509499" + y1="0.099496603" + x2="0.156323" + y2="0.94191301" + gradientUnits="objectBoundingBox" + gradientTransform="matrix(-0.928523,0.283938,0.435332,0.943857,-1.91327e-7,5.49908e-8)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient151" + x1="0.433979" + y1="0.022184599" + x2="0.487055" + y2="1.02569" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient152" + x1="0.5" + y1="0.89842999" + x2="0.5" + y2="0.40625" + gradientUnits="objectBoundingBox" + spreadMethod="reflect" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient156" + x1="0.43568701" + y1="0.98882002" + x2="0.453989" + y2="0.23093501" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient157" + x1="0.49180499" + y1="1.15284" + x2="0.49482101" + y2="0.41252401" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient158" + x1="0.51730198" + y1="0.85418499" + x2="0.49843901" + y2="0.136172" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient159" + x1="0.46201" + y1="0.87917101" + x2="0.49215299" + y2="0.096282303" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient162" + id="linearGradient161" + x1="0.50086302" + y1="0.34872901" + x2="0.41209599" + y2="0.98558098" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient162" + id="linearGradient165" + x1="0.60399801" + y1="0.51020199" + x2="0.46399999" + y2="0.98367399" + gradientUnits="objectBoundingBox" /> + <linearGradient + xlink:href="#linearGradient162" + id="linearGradient166" + x1="0.50000501" + y1="0.191616" + x2="0.50800002" + y2="0.97005898" + gradientUnits="objectBoundingBox" /> + <radialGradient + xlink:href="#linearGradient172" + id="radialGradient171" + cx="0.5" + cy="0.5" + fx="0.5" + fy="0.5" + r="0.5" + gradientUnits="objectBoundingBox" /> + <radialGradient + xlink:href="#linearGradient172" + id="radialGradient176" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient178" + x1="0.94027299" + y1="1.2934099" + x2="0.19452" + y2="-0.675295" + gradientUnits="objectBoundingBox" /> + <radialGradient + xlink:href="#linearGradient172" + id="radialGradient1399" + gradientTransform="scale(1.045233,0.956725)" + cx="446.77762" + cy="1219.4125" + fx="446.77762" + fy="1219.4125" + r="195.07191" + gradientUnits="userSpaceOnUse" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient1401" + gradientUnits="userSpaceOnUse" + x1="400.57785" + y1="369.53015" + x2="400.84448" + y2="304.07886" + gradientTransform="scale(0.575262,1.738339)" /> + <linearGradient + xlink:href="#linearGradient138" + id="linearGradient1403" + gradientUnits="userSpaceOnUse" + x1="303.01761" + y1="237.93179" + x2="297.0856" + y2="330.09561" + gradientTransform="scale(1.116071,0.896001)" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient1405" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.816497,1.224744)" + x1="378.93771" + y1="278.60202" + x2="380.27319" + y2="243.91606" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient1407" + gradientUnits="userSpaceOnUse" + x1="381.38742" + y1="277.495" + x2="380.5517" + y2="245.68338" + gradientTransform="scale(0.816497,1.224744)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1409" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.816497,1.224744)" + x1="379.09573" + y1="240.92712" + x2="376.79556" + y2="281.01636" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1411" + gradientUnits="userSpaceOnUse" + x1="389.63535" + y1="242.28218" + x2="387.06866" + y2="281.32513" + gradientTransform="scale(0.816497,1.224744)" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient1413" + gradientUnits="userSpaceOnUse" + spreadMethod="reflect" + x1="437.57941" + y1="528.87177" + x2="437.57941" + y2="394.10361" + gradientTransform="scale(0.812855,1.230232)" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient1415" + gradientUnits="userSpaceOnUse" + x1="375.17325" + y1="419.78485" + x2="377.48541" + y2="324.03815" + gradientTransform="scale(0.649784,1.538974)" /> + <linearGradient + xlink:href="#linearGradient138" + id="linearGradient1417" + gradientUnits="userSpaceOnUse" + x1="320.75104" + y1="498.17776" + x2="321.32224" + y2="614.50439" + gradientTransform="scale(1.074798,0.930408)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1419" + gradientUnits="userSpaceOnUse" + x1="322.48257" + y1="435.26761" + x2="323.2514" + y2="488.48251" + gradientTransform="scale(1.077001,0.928504)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1421" + gradientUnits="userSpaceOnUse" + x1="411.2215" + y1="242.94365" + x2="411.2215" + y2="331.44858" + gradientTransform="scale(0.571707,1.749147)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1423" + gradientUnits="userSpaceOnUse" + x1="867.34546" + y1="234.73897" + x2="867.33453" + y2="314.83911" + gradientTransform="scale(0.572667,1.746214)" /> + <linearGradient + xlink:href="#linearGradient162" + id="linearGradient1425" + gradientUnits="userSpaceOnUse" + x1="236.25362" + y1="657.11133" + x2="212.5099" + y2="737.41229" + gradientTransform="scale(1.011514,0.988617)" /> + <linearGradient + xlink:href="#linearGradient153" + id="linearGradient1427" + gradientUnits="userSpaceOnUse" + x1="381.56607" + y1="655.73102" + x2="279.64313" + y2="386.66583" + gradientTransform="scale(1.065499,0.938527)" /> + <linearGradient + xlink:href="#linearGradient162" + id="linearGradient1429" + gradientUnits="userSpaceOnUse" + x1="218.11714" + y1="630.30475" + x2="203.12654" + y2="737.8537" + gradientTransform="scale(1.009851,0.990245)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1431" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.007724,0.992335)" + x1="117.88966" + y1="587.23602" + x2="182.24524" + y2="704.73077" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1433" + gradientUnits="userSpaceOnUse" + x1="223.10072" + y1="570.41809" + x2="230.53499" + y2="710.97723" + gradientTransform="scale(0.999504,1.000496)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1435" + gradientUnits="userSpaceOnUse" + x1="316.93988" + y1="474.01779" + x2="371.60889" + y2="582.63507" + gradientTransform="scale(1.065499,0.938527)" /> + <linearGradient + xlink:href="#linearGradient162" + id="linearGradient1437" + gradientUnits="userSpaceOnUse" + x1="284.68652" + y1="410.46326" + x2="285.45923" + y2="485.69934" + gradientTransform="scale(1.218684,0.820557)" /> + <linearGradient + xlink:href="#linearGradient167" + id="linearGradient1439" + gradientUnits="userSpaceOnUse" + x1="288.82358" + y1="398.85422" + x2="288.37628" + y2="482.55939" + gradientTransform="scale(1.221941,0.81837)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient172" + id="radialGradient5844" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.045233,0.956725)" + cx="446.77762" + cy="1219.4125" + fx="446.77762" + fy="1219.4125" + r="195.07191" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5846" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.575262,1.738339)" + x1="400.57785" + y1="369.53015" + x2="400.84448" + y2="304.07886" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient5848" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.116071,0.896001)" + x1="303.01761" + y1="237.93179" + x2="297.0856" + y2="330.09561" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5850" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.816497,1.224744)" + x1="378.93771" + y1="278.60202" + x2="380.27319" + y2="243.91606" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5852" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.816497,1.224744)" + x1="381.38742" + y1="277.495" + x2="380.5517" + y2="245.68338" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5854" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.816497,1.224744)" + x1="379.09573" + y1="240.92712" + x2="376.79556" + y2="281.01636" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5856" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.816497,1.224744)" + x1="389.63535" + y1="242.28218" + x2="387.06866" + y2="281.32513" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5858" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.812855,1.230232)" + spreadMethod="reflect" + x1="437.57941" + y1="528.87177" + x2="437.57941" + y2="394.10361" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5860" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.649784,1.538974)" + x1="375.17325" + y1="419.78485" + x2="377.48541" + y2="324.03815" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient5862" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.074798,0.930408)" + x1="320.75104" + y1="498.17776" + x2="321.32224" + y2="614.50439" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5864" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.077001,0.928504)" + x1="322.48257" + y1="435.26761" + x2="323.2514" + y2="488.48251" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5866" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.571707,1.749147)" + x1="411.2215" + y1="242.94365" + x2="411.2215" + y2="331.44858" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5868" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.572667,1.746214)" + x1="867.34546" + y1="234.73897" + x2="867.33453" + y2="314.83911" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient5870" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.011514,0.988617)" + x1="236.25362" + y1="657.11133" + x2="212.5099" + y2="737.41229" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5872" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.065499,0.938527)" + x1="381.56607" + y1="655.73102" + x2="279.64313" + y2="386.66583" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient5874" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.009851,0.990245)" + x1="218.11714" + y1="630.30475" + x2="203.12654" + y2="737.8537" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5876" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.007724,0.992335)" + x1="117.88966" + y1="587.23602" + x2="182.24524" + y2="704.73077" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5878" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(0.999504,1.000496)" + x1="223.10072" + y1="570.41809" + x2="230.53499" + y2="710.97723" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5880" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.065499,0.938527)" + x1="316.93988" + y1="474.01779" + x2="371.60889" + y2="582.63507" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient5882" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.218684,0.820557)" + x1="284.68652" + y1="410.46326" + x2="285.45923" + y2="485.69934" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5884" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.221941,0.81837)" + x1="288.82358" + y1="398.85422" + x2="288.37628" + y2="482.55939" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5936" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(6.8689234e-2,-0.4008691,0.3415516,4.336381e-2,-313.66484,483.36861)" + x1="316.93988" + y1="474.01779" + x2="371.60889" + y2="582.63507" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5949" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6373879,0.286176,-0.2248927,0.5792711,-190.14391,-154.55792)" + x1="381.56607" + y1="655.73102" + x2="279.64313" + y2="386.66583" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5992" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.9649387,-1.2915552e-2,-3.6719978e-2,2.5569228,169.00168,-594.11178)" + x1="400.57785" + y1="369.53015" + x2="400.84448" + y2="304.07886" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient6820" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.1593287,2.2594958e-2,6.8898041e-2,-0.4858355,313.34561,293.76431)" + x1="867.34546" + y1="234.73897" + x2="867.33453" + y2="314.83911" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient6824" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.184254,-0.3061768,0.2434767,-0.1724949,439.82488,377.41134)" + x1="294.40485" + y1="481.32233" + x2="371.60889" + y2="582.63507" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2514" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(7.6104436e-3,-0.1875898,0.5720113,2.3206217e-2,1167.6399,-164.81318)" + x1="892.69696" + y1="258.28925" + x2="564.89618" + y2="281.90463" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2517" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.2316272,0.2342907,0.7144146,-0.7062927,960.97808,-166.19015)" + x1="867.34546" + y1="234.73897" + x2="867.33453" + y2="314.83911" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2520" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7672384,0,0,0.4874752,936.37068,-466.38275)" + x1="288.82358" + y1="398.85422" + x2="288.37628" + y2="482.55939" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient2524" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.523355,0,0,1.0256962,729.45868,-685.70504)" + x1="284.68652" + y1="410.46326" + x2="285.45923" + y2="485.69934" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2527" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0038119,-5.2260066e-2,-1.740863e-2,1.0462687,788.19568,-546.66535)" + x1="223.10072" + y1="570.41809" + x2="230.53499" + y2="710.97723" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2530" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.9523959,0.3464001,0.4208255,0.9487298,1258.3327,-582.54204)" + x1="117.88966" + y1="587.23602" + x2="182.24524" + y2="704.73077" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient2533" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1800109,0.4273134,0.4706466,1.1534176,1272.3477,-732.02104)" + x1="218.11714" + y1="630.30475" + x2="203.12654" + y2="737.8537" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient2536" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2643925,0,0,1.2357712,729.45868,-685.70504)" + x1="236.25362" + y1="657.11133" + x2="212.5099" + y2="737.41229" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6810" + id="linearGradient2539" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.599201,7.9485483e-2,-0.2318863,1.9097465,860.80461,-630.61189)" + x1="855.06372" + y1="238.8383" + x2="871.15576" + y2="315.45914" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2545" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2781848,0,0,0.990788,754.62768,-618.27804)" + x1="322.48257" + y1="435.26761" + x2="323.2514" + y2="488.48251" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient2548" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.3994837,0,0,1.1399824,714.04668,-671.75704)" + x1="320.75104" + y1="498.17776" + x2="321.32224" + y2="614.50439" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient2555" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0160687,0,0,1.53779,729.45868,-686.43004)" + spreadMethod="reflect" + x1="437.57941" + y1="528.87177" + x2="437.57941" + y2="394.10361" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2558" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.2914159,-3.3330306e-2,5.0610341e-2,0.4881144,1003.9662,-404.72726)" + x1="389.63535" + y1="242.28218" + x2="387.06866" + y2="281.32513" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient2561" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.3921823,-2.9764582e-2,-5.7310058e-2,0.5824956,1376.4784,-428.91032)" + x1="379.09573" + y1="240.92712" + x2="376.79556" + y2="281.01636" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient2566" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.4785291,4.0425338e-2,3.8864067e-2,1.9024316,1751.4647,-802.97704)" + x1="381.38742" + y1="277.495" + x2="380.5517" + y2="245.68338" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient2569" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0650795,-6.1672141e-2,9.4458503e-2,1.6443046,688.76168,-695.81704)" + x1="378.93771" + y1="278.60202" + x2="380.27319" + y2="243.91606" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient2572" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4132361,-7.9650304e-2,-4.1197678e-2,1.0713842,746.14768,-643.96104)" + x1="303.01761" + y1="237.93179" + x2="297.0856" + y2="330.09561" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient172" + id="radialGradient2577" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4818268,0,0,0.3967969,505.21028,-296.00604)" + cx="446.77762" + cy="1219.4125" + fx="446.77762" + fy="1219.4125" + r="195.07191" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3353" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-7.6104436e-3,-0.1875898,-0.5720113,2.3206217e-2,1186.0942,-162.08752)" + x1="892.69696" + y1="258.28925" + x2="564.89618" + y2="281.90463" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient172" + id="radialGradient3411" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4818268,0,0,0.3967969,-359.87341,176.94177)" + cx="446.77762" + cy="1219.4125" + fx="446.77762" + fy="1219.4125" + r="195.07191" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient3413" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4132361,-7.9650304e-2,-4.1197678e-2,1.0713842,-118.936,-171.0132)" + x1="303.01761" + y1="237.93179" + x2="297.0856" + y2="330.09561" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient3415" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0650795,-6.1672141e-2,9.4458503e-2,1.6443046,-176.32201,-222.8692)" + x1="378.93771" + y1="278.60202" + x2="380.27319" + y2="243.91606" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient3417" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.4785291,4.0425338e-2,3.8864067e-2,1.9024316,886.38099,-330.0292)" + x1="381.38742" + y1="277.495" + x2="380.5517" + y2="245.68338" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3419" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.3921823,-2.9764582e-2,-5.7310058e-2,0.5824956,511.39472,44.037525)" + x1="379.09573" + y1="240.92712" + x2="376.79556" + y2="281.01636" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3421" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.2914159,-3.3330306e-2,5.0610341e-2,0.4881144,138.88252,68.220525)" + x1="389.63535" + y1="242.28218" + x2="387.06866" + y2="281.32513" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient3423" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0160687,0,0,1.53779,-135.62501,-213.4822)" + spreadMethod="reflect" + x1="437.57941" + y1="528.87177" + x2="437.57941" + y2="394.10361" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient3425" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.9027839,-7.2174108e-2,0.1573001,2.0039596,-212.66601,-211.1902)" + x1="375.17325" + y1="419.78485" + x2="377.48541" + y2="324.03815" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient3427" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.3994837,0,0,1.1399824,-151.03701,-198.8092)" + x1="320.75104" + y1="498.17776" + x2="321.32224" + y2="614.50439" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3429" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2781848,0,0,0.990788,-110.456,-145.33018)" + x1="322.48257" + y1="435.26761" + x2="323.2514" + y2="488.48251" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3431" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7146338,0,0,2.1864338,-135.62501,-212.7572)" + x1="411.2215" + y1="242.94365" + x2="411.2215" + y2="331.44858" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6810" + id="linearGradient3433" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.599201,7.9485483e-2,-0.2318863,1.9097465,10.90312,-180.4374)" + x1="855.06372" + y1="238.8383" + x2="871.15576" + y2="315.45914" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient3435" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2643925,0,0,1.2357712,-135.62501,-212.7572)" + x1="236.25362" + y1="657.11133" + x2="212.5099" + y2="737.41229" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient3437" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1800109,0.4273134,0.4706466,1.1534176,407.26399,-259.0732)" + x1="218.11714" + y1="630.30475" + x2="203.12654" + y2="737.8537" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3439" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.9523959,0.3464001,0.4208255,0.9487298,393.24899,-109.59418)" + x1="117.88966" + y1="587.23602" + x2="182.24524" + y2="704.73077" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3441" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0038119,-5.2260066e-2,-1.740863e-2,1.0462687,-76.888003,-73.717475)" + x1="223.10072" + y1="570.41809" + x2="230.53499" + y2="710.97723" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient3443" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.523355,0,0,1.0256962,-135.62501,-212.7572)" + x1="284.68652" + y1="410.46326" + x2="285.45923" + y2="485.69934" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3445" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7672384,0,0,0.4874752,71.286992,6.5651249)" + x1="288.82358" + y1="398.85422" + x2="288.37628" + y2="482.55939" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3447" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.2316272,0.2342907,0.7144146,-0.7062927,95.894394,306.75766)" + x1="867.34546" + y1="234.73897" + x2="867.33453" + y2="314.83911" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3449" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(7.6104436e-3,-0.1875898,0.5720113,2.3206217e-2,302.55621,308.13463)" + x1="892.69696" + y1="258.28925" + x2="564.89618" + y2="281.90463" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient3455" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.1449278,0.2958704,-0.9021871,-0.4419231,1401.2488,-283.33537)" + x1="867.34546" + y1="234.73897" + x2="867.33453" + y2="314.83911" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6810" + id="linearGradient3459" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.6037841,2.836597e-2,6.9037787e-2,1.9225339,1538.2922,-593.33926)" + x1="855.06372" + y1="238.8383" + x2="871.15576" + y2="315.45914" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5957" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(7.6104436e-3,-0.1875898,0.5720113,2.3206217e-2,313.36793,291.43423)" + x1="892.69696" + y1="258.28925" + x2="564.89618" + y2="281.90463" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5960" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.2316272,0.2342907,0.7144146,-0.7062927,95.894394,306.75766)" + x1="867.34546" + y1="234.73897" + x2="867.33453" + y2="314.83911" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5963" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7672384,0,0,0.4874752,71.286992,6.5651249)" + x1="288.82358" + y1="398.85422" + x2="288.37628" + y2="482.55939" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient5967" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.523355,0,0,1.0256962,-135.62501,-212.7572)" + x1="284.68652" + y1="410.46326" + x2="285.45923" + y2="485.69934" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5970" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0038119,-5.2260066e-2,-1.740863e-2,1.0462687,-76.888003,-73.717475)" + x1="223.10072" + y1="570.41809" + x2="230.53499" + y2="710.97723" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5973" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.9523959,0.3464001,0.4208255,0.9487298,393.24899,-109.59418)" + x1="117.88966" + y1="587.23602" + x2="182.24524" + y2="704.73077" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient5976" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1800109,0.4273134,0.4706466,1.1534176,407.26399,-259.0732)" + x1="218.11714" + y1="630.30475" + x2="203.12654" + y2="737.8537" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient162" + id="linearGradient5979" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2643925,0,0,1.2357712,-135.62501,-212.7572)" + x1="236.25362" + y1="657.11133" + x2="212.5099" + y2="737.41229" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6810" + id="linearGradient5982" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.599201,7.9485483e-2,-0.2318863,1.9097465,10.90312,-180.4374)" + x1="855.06372" + y1="238.8383" + x2="871.15576" + y2="315.45914" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5985" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.7146338,0,0,2.1864338,-135.62501,-212.7572)" + x1="411.2215" + y1="242.94365" + x2="411.2215" + y2="331.44858" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient5988" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.2781848,0,0,0.990788,-110.456,-145.33018)" + x1="322.48257" + y1="435.26761" + x2="323.2514" + y2="488.48251" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient5991" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.3994837,0,0,1.1399824,-151.03701,-198.8092)" + x1="320.75104" + y1="498.17776" + x2="321.32224" + y2="614.50439" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5995" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.9027839,-7.2174108e-2,0.1573001,2.0039596,-212.66601,-211.1902)" + x1="375.17325" + y1="419.78485" + x2="377.48541" + y2="324.03815" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient5998" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0160687,0,0,1.53779,-135.62501,-213.4822)" + spreadMethod="reflect" + x1="437.57941" + y1="528.87177" + x2="437.57941" + y2="394.10361" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient6001" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.2914159,-3.3330306e-2,5.0610341e-2,0.4881144,138.88252,68.220525)" + x1="389.63535" + y1="242.28218" + x2="387.06866" + y2="281.32513" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient167" + id="linearGradient6004" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.3921823,-2.9764582e-2,-5.7310058e-2,0.5824956,511.39472,44.037525)" + x1="379.09573" + y1="240.92712" + x2="376.79556" + y2="281.01636" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient6009" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.4785291,4.0425338e-2,3.8864067e-2,1.9024316,886.38099,-330.0292)" + x1="381.38742" + y1="277.495" + x2="380.5517" + y2="245.68338" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient153" + id="linearGradient6012" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0650795,-6.1672141e-2,9.4458503e-2,1.6443046,-176.32201,-222.8692)" + x1="378.93771" + y1="278.60202" + x2="380.27319" + y2="243.91606" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient138" + id="linearGradient6015" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4132361,-7.9650304e-2,-4.1197678e-2,1.0713842,-118.936,-171.0132)" + x1="303.01761" + y1="237.93179" + x2="297.0856" + y2="330.09561" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient172" + id="radialGradient6020" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4818268,0,0,0.3967969,-359.87341,176.94177)" + cx="446.77762" + cy="1219.4125" + fx="446.77762" + fy="1219.4125" + r="195.07191" /> + </defs> + <g + id="g6022"> + <path + d="M 591.23603,660.80083 C 591.23603,703.54984 461.81827,738.20477 302.17337,738.20477 C 142.52846,738.20477 13.110708,703.54984 13.110708,660.80083 C 13.110708,618.05182 142.52846,583.39691 302.17337,583.39691 C 461.81827,583.39691 591.23603,618.05182 591.23603,660.80083 z" + id="path3355" + style="fill:url(#radialGradient6020);stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter" /> + <path + sodipodi:nodetypes="ccccccccc" + id="path3357" + d="M 143.90874,577.54277 C 115.92374,537.26402 110.46624,406.31277 175.76749,325.75527 C 208.12499,287.10777 216.37999,260.17402 218.93124,224.01402 C 220.66749,182.79027 189.77499,59.711525 306.28499,50.334025 C 424.29249,40.919025 417.95499,157.40902 417.27624,219.05277 C 416.71249,271.10277 419.0565,276.31252 445.584,316.88002 C 494.68275,391.41752 526.96749,544.04652 472.77249,613.51152 C 404.12624,700.47152 345.33124,662.75902 306.28499,665.92402 C 233.16874,669.92652 230.75124,708.91277 143.90874,577.54277 z" + style="fill:#000000;stroke:none;stroke-width:1.25" /> + <path + sodipodi:nodetypes="cssccc" + id="path3359" + d="M 437.66398,210.61794 C 450.11848,228.11403 483.19457,249.41586 502.10694,275.91451 C 521.01932,302.41316 477.73746,333.2079 443.1675,314.23928 C 417.44041,300.12277 444.25181,384.39183 467.34598,377.01641 C 614.65479,312.95238 492.4139,250.78608 485.61266,191.90909 C 540.40451,67.355773 400.47822,152.79209 437.66398,210.61794 z" + style="fill:#000000;stroke:#000000;stroke-width:1.5625006" /> + <path + d="M 375.15201,109.16012 C 373.96198,140.10802 339.90409,167.06128 299.08159,169.36204 C 258.25909,171.66281 226.13061,148.43982 227.32064,117.49192 C 228.51067,86.544125 262.56856,59.590825 303.39106,57.290125 C 344.21356,54.989325 376.34204,78.212325 375.15201,109.16012 z" + id="path3361" + style="fill:url(#linearGradient6015);stroke:none;stroke-width:1.26498997" /> + <path + d="M 277.39315,182.77455 C 278.54881,202.89182 268.92216,219.81175 255.89144,220.56628 C 242.86071,221.3208 231.36038,205.62421 230.20473,185.50694 C 229.04907,165.38967 238.67572,148.46972 251.70644,147.71522 C 264.73717,146.96072 276.2375,162.65728 277.39315,182.77455 z" + id="path3363" + style="fill:url(#linearGradient6012);stroke:none;stroke-width:1.17873001" /> + <path + d="M 301.04358,184.3151 C 301.51907,207.59043 316.56861,226.05786 334.65769,225.56328 C 352.74677,225.06869 367.02541,205.79938 366.54992,182.52405 C 366.07444,159.24872 351.02489,140.78132 332.93581,141.27592 C 314.84674,141.77042 300.5681,161.03977 301.04358,184.3151 z" + id="path3365" + style="fill:url(#linearGradient6009);stroke:none;stroke-width:0.93138498" /> + <path + d="M 331.21231,191.85453 C 330.93912,204.63094 337.38392,215.00253 345.60719,215.02013 C 353.83046,215.03772 360.7182,204.69466 360.99139,191.91824 C 361.26458,179.14182 354.81978,168.77023 346.59651,168.75264 C 338.37324,168.73505 331.4855,179.07811 331.21231,191.85453 z" + id="path3367" + style="fill:#000000;stroke:none;stroke-width:1.86495996" /> + <path + d="M 273.01381,188.19365 C 274.04499,198.77003 270.0676,207.92934 264.13008,208.65153 C 258.19256,209.37373 252.54331,201.38533 251.51214,190.80895 C 250.48097,180.23257 254.45835,171.07326 260.39587,170.35107 C 266.33339,169.62887 271.98264,177.61727 273.01381,188.19365 z" + id="path3369" + style="fill:#000000;stroke:none;stroke-width:2.39814997" /> + <path + d="M 338.4302,184.54815 C 337.72904,191.6747 341.05031,197.74711 345.84847,198.11127 C 350.64663,198.47542 355.10471,192.99342 355.80587,185.86687 C 356.50703,178.74032 353.18576,172.6679 348.3876,172.30374 C 343.58944,171.93959 339.13136,177.42159 338.4302,184.54815 z" + id="path3371" + style="fill:url(#linearGradient6004);stroke:none;stroke-width:3.1916101" /> + <path + d="M 269.50703,182.58574 C 270.12623,188.55758 267.73791,193.72929 264.17258,194.13707 C 260.60725,194.54485 257.21502,190.03429 256.59583,184.06244 C 255.97663,178.0906 258.36495,172.91889 261.93028,172.51111 C 265.49561,172.10333 268.88784,176.6139 269.50703,182.58574 z" + id="path3373" + style="fill:url(#linearGradient6001);stroke:none;stroke-width:4.12025976" /> + <path + id="path3375" + d="M 187.75249,405.79902 C 203.79749,369.42027 237.89499,305.51652 238.62124,256.10152 C 238.62124,216.79902 356.34499,207.41277 365.79249,246.65402 C 375.23999,285.89527 399.21874,344.75777 414.47999,373.09902 C 429.73999,401.43902 474.24124,491.46777 426.83499,570.03152 C 384.13874,639.58652 254.67874,694.61402 185.57249,560.58527 C 162.31874,514.07652 166.46624,456.44152 187.75249,405.79902 z" + style="fill:url(#linearGradient5998);stroke:none;stroke-width:1.25" /> + <path + id="path3377" + d="M 173.24559,378.8028 C 159.53586,404.75152 131.00745,472.99595 200.53857,510.33418 C 275.38701,549.97538 275.02711,631.56055 185.18731,592.7418 C 103.05444,557.65452 139.36496,415.87304 162.33593,381.94969 C 177.39745,358.18988 199.98644,329.10722 173.24559,378.8028 z" + style="fill:url(#linearGradient5995);stroke:none;stroke-width:1.15804005" /> + <path + id="path3379" + d="M 185.01624,349.39277 C 163.18499,385.02777 110.79499,469.15902 180.90624,512.79652 C 275.36749,570.74027 248.62249,628.68527 162.40749,576.51402 C 41.021247,503.68402 147.62624,356.99402 196.32124,301.09152 C 251.87624,238.34152 207.01374,312.45027 185.01624,349.39277 z" + style="fill:#000000;stroke:#000000;stroke-width:1.5625" /> + <path + id="path3381" + d="M 397.76919,419.60753 C 397.76919,459.32033 359.65441,510.90826 294.21657,510.44511 C 226.73185,511.0026 197.92832,459.32033 197.92832,419.60753 C 197.92832,379.89472 242.69287,347.66452 297.8494,347.66452 C 353.00463,347.66452 397.76919,379.89472 397.76919,419.60753 z" + style="font-size:12px;fill:url(#linearGradient5991);stroke:none;stroke-width:1.23705006;stroke-dasharray:none" /> + <path + id="path3383" + d="M 362.15979,294.61832 C 361.43347,335.77773 334.64977,345.48709 300.75476,345.48709 C 266.85857,345.48709 242.25502,339.41113 239.34854,294.61832 C 239.34854,266.53917 266.85857,250.28968 300.75476,250.28968 C 334.64977,250.28968 362.15979,266.53917 362.15979,294.61832 z" + style="font-size:12px;fill:url(#linearGradient5988);stroke:none;stroke-width:1.38846004;stroke-dasharray:none" /> + <path + id="path3385" + d="M 157.23124,357.83652 C 179.37624,324.09152 225.99999,272.38152 165.95249,365.10277 C 117.26374,441.40652 147.94874,490.44402 163.77249,503.90152 C 209.43124,544.60402 207.47999,571.83777 171.76624,550.40902 C 94.734994,504.62652 110.72249,427.59902 157.23124,357.83652 z" + style="fill:url(#linearGradient5985);stroke:none;stroke-width:1.25" /> + <path + id="path3387" + d="M 462.21568,398.96909 C 450.39659,362.17304 409.96999,267.68577 467.11982,378.94676 C 519.1881,479.53006 466.98563,537.85433 458.30537,543.16377 C 449.62629,548.47226 421.31707,557.63765 431.92723,536.4342 C 442.53632,515.23062 487.08834,478.21682 462.21568,398.96909 z" + style="fill:url(#linearGradient5982);fill-opacity:1;stroke:none;stroke-width:1.25" /> + <path + id="path3389" + d="M 140.51874,683.39402 C 89.966244,656.62402 16.453747,688.54902 43.141247,615.81152 C 48.486247,599.26402 35.172497,574.55152 43.867497,558.40402 C 54.041247,538.78152 75.842494,543.14277 88.923744,530.06152 C 101.82124,516.44777 109.99749,493.00027 133.97874,496.63402 C 157.95874,500.26777 173.90999,529.71027 190.65874,565.67027 C 203.01249,591.46777 246.83499,627.75027 243.97124,656.61777 C 240.60124,700.99277 190.18749,709.35527 140.51874,683.39402 z" + style="fill:url(#linearGradient5979);stroke:#e68c3f;stroke-width:7.8125" /> + <path + id="path3391" + d="M 491.31808,670.91489 C 528.39675,625.95042 610.70818,635.17384 555.19701,573.52225 C 543.452,560.30492 546.95774,531.65049 532.68995,519.54726 C 515.71854,504.70652 496.99731,516.87766 479.79512,509.11645 C 462.56223,500.79684 444.55058,484.62292 423.51456,496.12697 C 402.4797,507.6306 400.21642,537.55836 398.23263,576.73647 C 396.49323,604.95714 370.77728,652.14775 384.4305,678.07775 C 404.45332,718.28664 455.96509,712.96302 491.31808,670.91489 z" + style="fill:url(#linearGradient5976);stroke:#e68c3f;stroke-width:7.81249762" /> + <path + id="path3393" + d="M 475.19239,610.80964 C 532.58685,526.08884 489.81056,526.70588 475.48217,520.29802 C 461.11206,513.43236 445.8707,500.12629 428.97182,509.5003 C 412.07389,518.87396 411.10688,543.40025 410.64335,575.50997 C 410.05505,598.63832 390.69247,637.08007 402.33826,658.54446 C 416.30733,683.56395 450.20934,647.22527 475.19239,610.80964 z" + style="fill:url(#linearGradient5973);stroke:none;stroke-width:1.52532005" /> + <path + id="path3395" + d="M 128.7701,623.00924 C 42.866706,567.39983 83.051524,548.52024 96.092064,539.78558 C 111.73042,528.58358 111.85185,506.75151 131.06896,508.78839 C 150.28506,510.82534 161.47212,534.4833 174.42831,563.86686 C 183.9948,584.9323 216.82272,612.77142 214.47562,637.07862 C 211.37663,665.56569 165.98235,646.7897 128.7701,623.00924 z" + style="fill:url(#linearGradient5970);stroke:none;stroke-width:1.52532005" /> + <path + id="path3397" + d="M 251.81749,210.65402 C 260.75124,202.19152 282.83124,176.82152 324.26874,203.46027 C 331.97124,208.47277 338.22124,208.93152 353.04499,215.27902 C 382.70249,227.46527 368.52249,256.85277 337.11499,266.66402 C 323.66749,271.02527 311.44499,287.35902 286.95374,285.96277 C 266.03624,284.74152 260.55499,271.12027 247.70624,263.58027 C 224.86999,250.69152 221.49999,233.26277 233.83124,224.01402 C 246.16374,214.76527 250.98749,211.44027 251.81749,210.65402 z" + style="fill:url(#linearGradient5967);stroke:#e68c3f;stroke-width:4.6875" /> + <path + id="path3399" + d="M 353.43874,234.29902 C 341.08499,235.02527 314.19749,261.91277 285.85624,261.91277 C 257.51499,261.91277 240.80124,235.75152 236.44124,235.75152" + style="fill:none;stroke:#e68c3f;stroke-width:3.125" /> + <path + id="path3401" + d="M 265.90246,208.33442 C 270.38995,204.30176 284.54499,193.23548 303.31687,204.56504 C 307.27192,206.80832 311.35631,209.24996 317.43047,212.58509 C 329.462,219.58298 323.50274,229.6676 309.08839,236.04837 C 302.54708,238.72589 291.76316,244.6349 283.55168,244.22151 C 274.42662,243.38281 268.52325,237.43151 262.47546,233.55551 C 251.38073,226.22703 252.05445,220.30969 257.20813,215.38293 C 261.10416,212.00015 265.48554,208.70909 265.90246,208.33442 z" + style="fill:url(#linearGradient5963);stroke:none" /> + <path + sodipodi:nodetypes="ccscc" + id="path3403" + d="M 485.62558,318.40009 C 470.31375,326.6082 417.68681,322.14515 480.02902,326.05185 C 529.45102,323.13335 535.62952,273.72084 534.95116,268.27709 C 534.2728,262.83418 518.48464,252.49699 513.21723,263.8189 C 507.9494,275.14041 526.70967,304.0309 485.62558,318.40009 z" + style="fill:url(#linearGradient5960);stroke:none;stroke-width:1.25" /> + <path + sodipodi:nodetypes="ccscc" + id="path3405" + d="M 473.26296,135.03602 C 463.66338,137.45706 448.44209,148.26182 466.22252,134.32762 C 494.98909,121.13922 505.82847,135.59547 486.85683,175.63681 C 482.71091,184.38715 460.74905,201.85561 454.18436,199.10941 C 500.29783,163.55611 496.08175,126.83432 473.26296,135.03602 z" + style="fill:url(#linearGradient5957);stroke:none;stroke-width:1.25" /> + </g> +</svg> diff --git a/tcpdf/examples/index.php b/tcpdf/examples/index.php new file mode 100644 index 0000000..7512523 --- /dev/null +++ b/tcpdf/examples/index.php @@ -0,0 +1,115 @@ +<?php +echo '<'.'?'.'xml version="1.0" encoding="UTF-8"'.'?'.'>'; +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr"> + +<head> +<title>TCPDF Examples</title> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta name="description" content="TCPDF is a PHP class for generating PDF documents on the fly" /> +<meta name="author" content="Nicola Asuni" /> +<meta name="keywords" content="Examples, TCPDF, PDF, PHP class" /> +</head> + +<body> + +<h1>TCPDF Examples</h1> + +<h2>PDF</h2> + +<ol> +<li>Simple PDF with default Header and Footer: [<a href="example_001.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Simple PDF without Header and Footer: [<a href="example_002.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Custom Header and Footer: [<a href="example_003.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Cell stretching: [<a href="example_004.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Multicell: [<a href="example_005.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>WriteHTML and RTL support: [<a href="example_006.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Independent columns with WriteHTMLCell: [<a href="example_007.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>External UTF-8 text file: [<a href="example_008.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Image: [<a href="example_009.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Multiple columns: [<a href="example_010.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Colored Tables: [<a href="example_011.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Graphic Functions: [<a href="example_012.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Graphic Transformations: [<a href="example_013.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Javascript and Forms: [<a href="example_014.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Bookmarks (Table of Content): [<a href="example_015.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Document Encryption: [<a href="example_016.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Independent columns with MultiCell: [<a href="example_017.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Persian and Arabic language on RTL document: [<a href="example_018.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Non unicode / Alternative config file: [<a href="example_019.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Multicell complex alignment: [<a href="example_020.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>writeHTML alignment: [<a href="example_021.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>CMYK colors: [<a href="example_022.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Page Groups: [<a href="example_023.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Object Visibility and Layers: [<a href="example_024.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Object Transparency: [<a href="example_025.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Text Rendering Modes and Text Clipping: [<a href="example_026.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>1D Barcodes: [<a href="example_027.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Multiple page formats: [<a href="example_028.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Set PDF viewer display preferences: [<a href="example_029.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Colour gradients: [<a href="example_030.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Pie Chart Graphic: [<a href="example_031.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>EPS/AI vectorial image: [<a href="example_032.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Mixed font types (TrueType Unicode, core, CID-0): [<a href="example_033.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Clipping masks: [<a href="example_034.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Line styles with cells and multicells: [<a href="example_035.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Text Annotations: [<a href="example_036.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Spot Colors: [<a href="example_037.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>NON-embedded CID-0 CJK font: [<a href="example_038.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>HTML Justification: [<a href="example_039.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Booklet (double-sided pages): [<a href="example_040.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>File attachment: [<a href="example_041.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Image with Alpha Channel Transparency: [<a href="example_042.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Disk caching: [<a href="example_043.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Move, Copy and Delete page: [<a href="example_044.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Table Of Content with Bookmarks: [<a href="example_045.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Text hyphenation: [<a href="example_046.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Transactions and UNDO: [<a href="example_047.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Table header and rowspan: [<a href="example_048.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>TCPDF methods in HTML: [<a href="example_049.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>2D Barcode (QR-Code, Datamatrix ECC200 and PDF417): [<a href="example_050.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Full page background: [<a href="example_051.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Digital Signature Certification: [<a href="example_052.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Javascript functions: [<a href="example_053.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>XHTML Form: [<a href="example_054.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Font Dump: [<a href="example_055.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Crop Marks and Registration Marks: [<a href="example_056.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Cell vertical alignments and borders: [<a href="example_057.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>SVG Image: [<a href="example_058.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Table Of Content with HTML templates: [<a href="example_059.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Advanced page settings: [<a href="example_060.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>XHTML + CSS: [<a href="example_061.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>XObject Templates: [<a href="example_062.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>Text stretching and spacing (tracking/kerning): [<a href="example_063.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>No-write page regions: [<a href="example_064.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +<li>PDF/A-1b (ISO 19005-1:2005) document: [<a href="example_065.php" title="PDF [new window]" target="_blank">PDF</a>]</li> +</ol> + +<h2>Barcodes</h2> + +<ol> +<li>1D barcode HTML format [<a href="barcodes/example_1d_html.php" title="1D barcode [HTML] [new window]" target="_blank">HTML</a>]</li> +<li>1D barcode PNG format [<a href="barcodes/example_1d_png.php" title="1D barcode [PNG] [new window]" target="_blank">PNG</a>]</li> +<li>1D barcode SVG format [<a href="barcodes/example_1d_svg.php" title="1D barcode [SVG] [new window]" target="_blank">SVG</a>]</li> +<li>1D barcode SVG INLINE format [<a href="barcodes/example_1d_svgi.php" title="1D barcode [SVGI] [new window]" target="_blank">SVG INLINE</a>]</li> + +<li>2D datamatrix barcode HTML format [<a href="barcodes/example_2d_datamatrix_html.php" title="2D datamatrix barcode [HTML] [new window]" target="_blank">HTML</a>]</li> +<li>2D datamatrix barcode PNG format [<a href="barcodes/example_2d_datamatrix_png.php" title="2D datamatrix barcode [PNG] [new window]" target="_blank">PNG</a>]</li> +<li>2D datamatrix barcode SVG format [<a href="barcodes/example_2d_datamatrix_svg.php" title="2D datamatrix barcode [SVG] [new window]" target="_blank">SVG</a>]</li> +<li>2D datamatrix barcode SVG INLINE format [<a href="barcodes/example_2d_datamatrix_svgi.php" title="2D datamatrix barcode [SVGI] [new window]" target="_blank">SVG INLINE</a>]</li> + +<li>2D pdf417 barcode HTML format [<a href="barcodes/example_2d_pdf417_html.php" title="2D pdf417 barcode [HTML] [new window]" target="_blank">HTML</a>]</li> +<li>2D pdf417 barcode PNG format [<a href="barcodes/example_2d_pdf417_png.php" title="2D pdf417 barcode [PNG] [new window]" target="_blank">PNG</a>]</li> +<li>2D pdf417 barcode SVG format [<a href="barcodes/example_2d_pdf417_svg.php" title="2D pdf417 barcode [SVG] [new window]" target="_blank">SVG</a>]</li> +<li>2D pdf417 barcode SVG INLINE format [<a href="barcodes/example_2d_pdf417_svgi.php" title="2D pdf417 barcode [SVGI] [new window]" target="_blank">SVG INLINE</a>]</li> + +<li>2D qrcode barcode HTML format [<a href="barcodes/example_2d_qrcode_html.php" title="2D qrcode barcode [HTML] [new window]" target="_blank">HTML</a>]</li> +<li>2D qrcode barcode PNG format [<a href="barcodes/example_2d_qrcode_png.php" title="2D qrcode barcode [PNG] [new window]" target="_blank">PNG</a>]</li> +<li>2D qrcode barcode SVG format [<a href="barcodes/example_2d_qrcode_svg.php" title="2D qrcode barcode [SVG] [new window]" target="_blank">SVG</a>]</li> +<li>2D qrcode barcode SVG INLINE format [<a href="barcodes/example_2d_qrcode_svgi.php" title="2D qrcode barcode [SVGI] [new window]" target="_blank">SVG INLINE</a>]</li> +</ol> + +</body> +</html> diff --git a/tcpdf/examples/lang/afr.php b/tcpdf/examples/lang/afr.php new file mode 100644 index 0000000..367b7e8 --- /dev/null +++ b/tcpdf/examples/lang/afr.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : afr.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Afrikaans +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Afrikaans + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Afrikaans + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'af'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'bladsy'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/ara.php b/tcpdf/examples/lang/ara.php new file mode 100644 index 0000000..32acfb4 --- /dev/null +++ b/tcpdf/examples/lang/ara.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ara.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Arabic +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Arabic + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Arabic + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'rtl'; +$l['a_meta_language'] = 'ar'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'صفحة'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/aze.php b/tcpdf/examples/lang/aze.php new file mode 100644 index 0000000..9d19281 --- /dev/null +++ b/tcpdf/examples/lang/aze.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : aze.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Azerbaijani +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Azerbaijani + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Azerbaijani + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'az'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'səhifə'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/bel.php b/tcpdf/examples/lang/bel.php new file mode 100644 index 0000000..cc33cac --- /dev/null +++ b/tcpdf/examples/lang/bel.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : bel.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Basque +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Basque + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Basque + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'be'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'старонкі'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/bra.php b/tcpdf/examples/lang/bra.php new file mode 100644 index 0000000..cb2e1b2 --- /dev/null +++ b/tcpdf/examples/lang/bra.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : eng.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Brazilian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Brazilian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Brazilian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'pt'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'página'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/bul.php b/tcpdf/examples/lang/bul.php new file mode 100644 index 0000000..3605977 --- /dev/null +++ b/tcpdf/examples/lang/bul.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : bul.php +// Begin : 2004-03-03 +// Last Update : 2013-05-13 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Bulgarian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Bulgarian + * @author Nicola Asuni + * @since 2012-03-22 + */ + +// Bulgarian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'bg'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'страница'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/cat.php b/tcpdf/examples/lang/cat.php new file mode 100644 index 0000000..29ea3d8 --- /dev/null +++ b/tcpdf/examples/lang/cat.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : cat.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Catalan +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Catalan + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Catalan + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ca'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'pàgina'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/ces.php b/tcpdf/examples/lang/ces.php new file mode 100644 index 0000000..1b86789 --- /dev/null +++ b/tcpdf/examples/lang/ces.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ces.php +// Begin : 2010-10-26 +// Last Update : 2010-11-22 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Czech +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Czech + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Czech + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'cs'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'stránka'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/chi.php b/tcpdf/examples/lang/chi.php new file mode 100644 index 0000000..131c7df --- /dev/null +++ b/tcpdf/examples/lang/chi.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : chi.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Chinese (Simplified) +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Chinese (Simplified) + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Chinese (Simplified) + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'cn'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = '页面'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/cym.php b/tcpdf/examples/lang/cym.php new file mode 100644 index 0000000..935cf9a --- /dev/null +++ b/tcpdf/examples/lang/cym.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : urd.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Welsh +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Welsh + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Welsh + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'cy'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'tudalen'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/dan.php b/tcpdf/examples/lang/dan.php new file mode 100644 index 0000000..a04af11 --- /dev/null +++ b/tcpdf/examples/lang/dan.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : dan.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Danish +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Danish + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Danish + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'da'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'side'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/eng.php b/tcpdf/examples/lang/eng.php new file mode 100644 index 0000000..9752610 --- /dev/null +++ b/tcpdf/examples/lang/eng.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : eng.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// English +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: English + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// English + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'en'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'page'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/est.php b/tcpdf/examples/lang/est.php new file mode 100644 index 0000000..c9d9472 --- /dev/null +++ b/tcpdf/examples/lang/est.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : est.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Estonian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Estonian + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Estonian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'et'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'lehekülg'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/eus.php b/tcpdf/examples/lang/eus.php new file mode 100644 index 0000000..63e8694 --- /dev/null +++ b/tcpdf/examples/lang/eus.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : eus.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Basque +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Basque + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Basque + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'eu'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'Orrialdearen'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/far.php b/tcpdf/examples/lang/far.php new file mode 100644 index 0000000..dc71cf7 --- /dev/null +++ b/tcpdf/examples/lang/far.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : far.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Farsi +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Farsi + * @author Sina Saeedi + * @since 2011-04-12 + */ + +// Farsi + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'rtl'; +$l['a_meta_language'] = 'fa'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'صفحه'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/fra.php b/tcpdf/examples/lang/fra.php new file mode 100644 index 0000000..bf98f85 --- /dev/null +++ b/tcpdf/examples/lang/fra.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : fra.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// French +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: French + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// French + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'fr'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'page'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/ger.php b/tcpdf/examples/lang/ger.php new file mode 100644 index 0000000..dad6268 --- /dev/null +++ b/tcpdf/examples/lang/ger.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ger.php +// Begin : 2004-03-03 +// Last Update : 2010-11-16 +// +// Description : Language module for TCPDF +// (contains translated texts) +// German +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: German + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// German + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'de'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'Seite'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/gle.php b/tcpdf/examples/lang/gle.php new file mode 100644 index 0000000..e8f40fe --- /dev/null +++ b/tcpdf/examples/lang/gle.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ind.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Irish +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Irish + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Irish + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ga'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'leathanach'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/glg.php b/tcpdf/examples/lang/glg.php new file mode 100644 index 0000000..1d71714 --- /dev/null +++ b/tcpdf/examples/lang/glg.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : glg.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Galician +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Galician + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Galician + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'gl'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'Páxina'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/hat.php b/tcpdf/examples/lang/hat.php new file mode 100644 index 0000000..f6b27c3 --- /dev/null +++ b/tcpdf/examples/lang/hat.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : hat.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Haitian Creole +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Haitian Creole + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Haitian Creole + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ht'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'paj'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/heb.php b/tcpdf/examples/lang/heb.php new file mode 100644 index 0000000..33f1204 --- /dev/null +++ b/tcpdf/examples/lang/heb.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : heb.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Hebrew +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Hebrew + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Hebrew + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'rtl'; +$l['a_meta_language'] = 'he'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'מקור:'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/hrv.php b/tcpdf/examples/lang/hrv.php new file mode 100644 index 0000000..47fe5d4 --- /dev/null +++ b/tcpdf/examples/lang/hrv.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : hrv.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Croatian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Croatian + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Croatian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'hr'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'stranica'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/hun.php b/tcpdf/examples/lang/hun.php new file mode 100644 index 0000000..1053d69 --- /dev/null +++ b/tcpdf/examples/lang/hun.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : hun.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Hungarian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Hungarian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Hungarian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'hu'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'oldal'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/hye.php b/tcpdf/examples/lang/hye.php new file mode 100644 index 0000000..fbade3e --- /dev/null +++ b/tcpdf/examples/lang/hye.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : hye.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Armenian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Armenian + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Armenian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'hy'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'էջ'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/ind.php b/tcpdf/examples/lang/ind.php new file mode 100644 index 0000000..9a16ee3 --- /dev/null +++ b/tcpdf/examples/lang/ind.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ind.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Indonesian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Indonesian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Indonesian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'id'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'halaman'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/ita.php b/tcpdf/examples/lang/ita.php new file mode 100644 index 0000000..0d3f5f1 --- /dev/null +++ b/tcpdf/examples/lang/ita.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ita.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Italian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Italian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Italian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'it'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'pagina'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/jpn.php b/tcpdf/examples/lang/jpn.php new file mode 100644 index 0000000..dc6dfb6 --- /dev/null +++ b/tcpdf/examples/lang/jpn.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : jpn.php +// Begin : 2011-01-24 +// Last Update : 2011-01-24 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Japanese +// +// Author: Nicola Asuni - Translation by redcocker +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Japanese + * @author Nicola Asuni - Translation by redcocker + * @since 2012-01-24 + */ + +// Japanese + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ja'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'ページ'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/kat.php b/tcpdf/examples/lang/kat.php new file mode 100644 index 0000000..168dc34 --- /dev/null +++ b/tcpdf/examples/lang/kat.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : kat.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Georgian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Georgian + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Georgian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ka'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'გვერდი'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/kor.php b/tcpdf/examples/lang/kor.php new file mode 100644 index 0000000..a817985 --- /dev/null +++ b/tcpdf/examples/lang/kor.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : kor.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Korean +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Korean + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Korean + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ko'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = '페이지'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/mkd.php b/tcpdf/examples/lang/mkd.php new file mode 100644 index 0000000..39ea8ae --- /dev/null +++ b/tcpdf/examples/lang/mkd.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : mkd.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Macedonian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Macedonian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Macedonian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'mk'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'страница'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/mlt.php b/tcpdf/examples/lang/mlt.php new file mode 100644 index 0000000..f946c03 --- /dev/null +++ b/tcpdf/examples/lang/mlt.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : mlt.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Maltese +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Maltese + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Maltese + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'mt'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'paġna'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/msa.php b/tcpdf/examples/lang/msa.php new file mode 100644 index 0000000..69c564a --- /dev/null +++ b/tcpdf/examples/lang/msa.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : msa.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Malay +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Malay + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Malay + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ms'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'laman'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/nld.php b/tcpdf/examples/lang/nld.php new file mode 100644 index 0000000..0f19bed --- /dev/null +++ b/tcpdf/examples/lang/nld.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : nld.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Dutch +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Dutch + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Dutch + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'nl'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'pagina'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/nob.php b/tcpdf/examples/lang/nob.php new file mode 100644 index 0000000..94e8ff0 --- /dev/null +++ b/tcpdf/examples/lang/nob.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : nob.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Norwegian Bokmål +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Norwegian Bokmål + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Norwegian Bokmål + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'nb'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'side'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/pol.php b/tcpdf/examples/lang/pol.php new file mode 100644 index 0000000..fbf386f --- /dev/null +++ b/tcpdf/examples/lang/pol.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : pol.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Polish +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Polish + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Polish + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'pl'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'strona'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/por.php b/tcpdf/examples/lang/por.php new file mode 100644 index 0000000..ab45c71 --- /dev/null +++ b/tcpdf/examples/lang/por.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : por.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Portuguese +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Portuguese + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Portuguese + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'pt'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'página'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/ron.php b/tcpdf/examples/lang/ron.php new file mode 100644 index 0000000..985622c --- /dev/null +++ b/tcpdf/examples/lang/ron.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ron.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Romanian, Moldavian, Moldovan +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Romanian, Moldavian, Moldovan + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Romanian, Moldavian, Moldovan + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ro'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'pagina'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/rus.php b/tcpdf/examples/lang/rus.php new file mode 100644 index 0000000..45cb515 --- /dev/null +++ b/tcpdf/examples/lang/rus.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : rus.php +// Begin : 2004-03-03 +// Last Update : 2012-07-25 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Russian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Russian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Russian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ru'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'страница'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/slv.php b/tcpdf/examples/lang/slv.php new file mode 100644 index 0000000..c2a8d98 --- /dev/null +++ b/tcpdf/examples/lang/slv.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : slv.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Slovene +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Slovene + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Slovene + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'sl'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'stran'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/spa.php b/tcpdf/examples/lang/spa.php new file mode 100644 index 0000000..02e0220 --- /dev/null +++ b/tcpdf/examples/lang/spa.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : spa.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Spanish; Castilian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Spanish; Castilian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Spanish; Castilian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'es'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'página'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/sqi.php b/tcpdf/examples/lang/sqi.php new file mode 100644 index 0000000..bd01da3 --- /dev/null +++ b/tcpdf/examples/lang/sqi.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : sqi.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Albanian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Albanian + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Albanian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'sq'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'faqe'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/srp.php b/tcpdf/examples/lang/srp.php new file mode 100644 index 0000000..60a5e02 --- /dev/null +++ b/tcpdf/examples/lang/srp.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : srp.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Serbian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Serbian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Serbian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'sr'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'страна'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/swa.php b/tcpdf/examples/lang/swa.php new file mode 100644 index 0000000..f30486d --- /dev/null +++ b/tcpdf/examples/lang/swa.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : swa.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Swahili +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Swahili + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Swahili + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'sw'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'ukurasa'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/swe.php b/tcpdf/examples/lang/swe.php new file mode 100644 index 0000000..22a38ce --- /dev/null +++ b/tcpdf/examples/lang/swe.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : swe.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Swedish +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Swedish + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Swedish + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'sv'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'sida'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/ukr.php b/tcpdf/examples/lang/ukr.php new file mode 100644 index 0000000..ef71b7f --- /dev/null +++ b/tcpdf/examples/lang/ukr.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : ukr.php +// Begin : 2004-03-03 +// Last Update : 2012-07-25 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Ukrainian +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Ukrainian + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Russian + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'ua'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'сторінка'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/urd.php b/tcpdf/examples/lang/urd.php new file mode 100644 index 0000000..2045a90 --- /dev/null +++ b/tcpdf/examples/lang/urd.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : urd.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Urdu +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Urdu + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Urdu + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'rtl'; +$l['a_meta_language'] = 'ur'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'صفحہ'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/yid.php b/tcpdf/examples/lang/yid.php new file mode 100644 index 0000000..2e55322 --- /dev/null +++ b/tcpdf/examples/lang/yid.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : yid.php +// Begin : 2004-03-03 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Welsh +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Welsh + * @author Nicola Asuni + * @since 2004-03-03 + */ + +// Welsh + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'rtl'; +$l['a_meta_language'] = 'yi'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = 'זייַט'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/lang/zho.php b/tcpdf/examples/lang/zho.php new file mode 100644 index 0000000..8eea0a9 --- /dev/null +++ b/tcpdf/examples/lang/zho.php @@ -0,0 +1,44 @@ +<?php +//============================================================+ +// File name : zho.php +// Begin : 2010-10-26 +// Last Update : 2010-10-26 +// +// Description : Language module for TCPDF +// (contains translated texts) +// Chinese +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * TCPDF language file (contains translated texts). + * @package com.tecnick.tcpdf + * @brief TCPDF language file: Chinese + * @author Nicola Asuni + * @since 2010-10-26 + */ + +// Chinese + +global $l; +$l = Array(); + +// PAGE META DESCRIPTORS -------------------------------------- + +$l['a_meta_charset'] = 'UTF-8'; +$l['a_meta_dir'] = 'ltr'; +$l['a_meta_language'] = 'zh'; + +// TRANSLATIONS -------------------------------------- +$l['w_page'] = '頁面'; + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/examples/tcpdf_include.php b/tcpdf/examples/tcpdf_include.php new file mode 100644 index 0000000..26e23a8 --- /dev/null +++ b/tcpdf/examples/tcpdf_include.php @@ -0,0 +1,48 @@ +<?php +//============================================================+ +// File name : tcpdf_include.php +// Begin : 2008-05-14 +// Last Update : 2014-12-10 +// +// Description : Search and include the TCPDF library. +// +// Author: Nicola Asuni +// +// (c) Copyright: +// Nicola Asuni +// Tecnick.com LTD +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Search and include the TCPDF library. + * @package com.tecnick.tcpdf + * @abstract TCPDF - Include the main class. + * @author Nicola Asuni + * @since 2013-05-14 + */ + +// always load alternative config file for examples +require_once('config/tcpdf_config_alt.php'); + +// Include the main TCPDF library (search the library on the following directories). +$tcpdf_include_dirs = array( + realpath('../tcpdf.php'), + '/usr/share/php/tcpdf/tcpdf.php', + '/usr/share/tcpdf/tcpdf.php', + '/usr/share/php-tcpdf/tcpdf.php', + '/var/www/tcpdf/tcpdf.php', + '/var/www/html/tcpdf/tcpdf.php', + '/usr/local/apache2/htdocs/tcpdf/tcpdf.php' +); +foreach ($tcpdf_include_dirs as $tcpdf_include_path) { + if (@file_exists($tcpdf_include_path)) { + require_once($tcpdf_include_path); + break; + } +} + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/fonts/ae_fonts_2.0/COPYING b/tcpdf/fonts/ae_fonts_2.0/COPYING new file mode 100644 index 0000000..a8e2dd4 --- /dev/null +++ b/tcpdf/fonts/ae_fonts_2.0/COPYING @@ -0,0 +1,343 @@ + -* www.gnu.org *- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + diff --git a/tcpdf/fonts/ae_fonts_2.0/ChangeLog b/tcpdf/fonts/ae_fonts_2.0/ChangeLog new file mode 100644 index 0000000..3e2a906 --- /dev/null +++ b/tcpdf/fonts/ae_fonts_2.0/ChangeLog @@ -0,0 +1,863 @@ +2007-08-20 00:48 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlArabiya.sfd: Diagonal marks + +2007-08-20 00:25 Khaled Hosny <khaledhosny@eglug.org> + + * README: Added Release notes, preparing for 2.0 release. + +2007-08-19 23:19 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlArabiya.sfd: Stack diacritics definition + +2007-08-19 22:56 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Tholoth.sfd: + * Added 'rlg' lookup table and subtable and registered stacked + diacritic ligatures. + * kasrah and kasratan were too close to the base glyph, fixed. + +2007-08-19 22:28 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlHor.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, + ae_AlYarmook.sfd, ae_Arab.sfd, ae_Cortoba.sfd, ae_Furat.sfd, + ae_Graph.sfd, ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd, + ae_Mashq.sfd, ae_Metal.sfd, ae_Nada.sfd, ae_Nagham.sfd, + ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, ae_Petra.sfd, + ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, + ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd: Scaled up + diacritic glyphs, this makes them more readable. + +2007-08-19 22:03 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlArabiya.sfd: New sukun, removed wrong anchors from + kasrah + +2007-08-19 20:26 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMothnna-Bold.sfd: Added 'rlg' lookup table and subtable + and registered stacked diacritic ligatures. + +2007-08-19 18:28 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlMothnna-Bold.sfd: Fixed shaddas + +2007-08-19 18:01 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlMothnna-Bold.sfd: Stacked diacrititcs + +2007-08-19 14:49 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlArabiya.sfd: Removed mark2mark anchors, now we use + ligature substitution for stacked diacritics instead of anchors. + Added 'rlg' lookup table and subtable and registered stacked + diacritic ligatures. + +2007-08-19 02:30 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlArabiya.sfd: Stacked diacritics added + +2007-08-19 01:53 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ArabicReesha.sfd: + * Added to new ligatures; <fathatan><alef isolated> and + <fathatan><alef final>. + * Small fixes to Jeem isolated width. + +2007-08-18 21:30 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlMothnna-Bold.sfd: Diacritics fixed except allahisolated + ligature + +2007-08-18 20:13 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMothnna-Bold.sfd: Removed old, buggy, anchors and auto + added new ones, needs manual editing. + +2007-08-18 19:11 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlMothnna-Bold.sfd: New shadda, modified sukun to meet the + other marks + +2007-08-18 17:20 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_AlArabiya.sfd: New diacritics for ae_AlArabiya.sfd + +2007-08-17 23:19 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Tholoth.sfd: ae_Tholoth.sfd: Added glyphs U+FC5E - U+FC62. + +2007-08-16 14:56 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMohanad.sfd: AlMohanad: Fixed U+FEDA (kaf final) to take + the shape of ordinary final kaf rather than the long variant. + +2007-08-15 14:25 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ArabicReesha.sfd: ArabicReesha.sfd: Fixed a bug that caused + some isolated glyphs to have more space to the right. + +2007-08-15 12:02 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlYarmook.sfd, + ae_Electron.sfd, ae_Hani.sfd, ae_Haramain.sfd, ae_Khalid.sfd, + ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Sharjah.sfd, + ae_Tarablus.sfd, ae_Tholoth.sfd: Add new 'liga' table without + "Ignore Combining Marks" flag, allahisolated ligature belong to that + table now, so when allahisolated has a tashkil on it, the ligature + will be ignored and will use normal glyphs instead. + +2007-08-15 11:05 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Granada.sfd, ae_Graph.sfd, ae_Haramain.sfd, + ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, ae_Sindbad.sfd, + ae_Tarablus.sfd: Added "Ignore Combining Marks flag" to 'liga' + table. + +2007-08-15 10:35 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ArabicReesha.sfd: ArabicReesha: New font based on SIL's + Scheherazade, first version. + +2007-08-15 00:23 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlArabiya.sfd: Shadda was missing mark2mark below anchor. + +2007-08-14 23:28 Mohammed Adnene Trojette <adn@diwi.org> + + * Makefile: GPL has been removed + +2007-08-14 23:21 Mohammed Adnene Trojette <adn@diwi.org> + + * COPYING, README: Copyright informations + +2007-08-14 23:05 Khaled Hosny <khaledhosny@eglug.org> + + * COPYING: Updated to refer to FreeFonts project. + +2007-08-14 22:56 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Salem.sfd: Updated the copyright statement, to mention GPL + font exception and FreeFonts project, again + +2007-08-14 22:43 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Salem.sfd: Revert to 1.7 and added Allah anchors(again). + +2007-08-14 21:35 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Tholoth.sfd: Minor positioning fix + +2007-08-14 21:12 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Tholoth.sfd: Added missed U+0647. + +2007-08-14 18:37 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd, + ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, + ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd, + ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd, + ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, + ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, + ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd, + ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, + ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd, + ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd, + ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Updated the + copyright statement, to mention GPL font exception and FreeFonts + project. + +2007-08-13 22:18 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlManzomah.sfd, + ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlMothnna-Bold.sfd, + ae_Arab.sfd, ae_Cortoba.sfd, ae_Electron.sfd, ae_Furat.sfd, + ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, + ae_Hor.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, ae_Mashq-Bold.sfd, + ae_Mashq.sfd, ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, + ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, ae_Petra.sfd, + ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, + ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: + * Add missed mark2mark anchors in the affected files, though we + aren't going to use this on the long run, but I'll leave that task + for 2.1 . + * Reencoded all files to unicode glyph map. + +2007-08-13 14:47 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Petra.sfd, ae_Shado.sfd: ae_Petra.sfd, ae_Shado.sfd: + Full support for diacritics positioning by Osama Khalid. + +2007-08-13 10:38 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Hor.sfd, ae_Sharjah.sfd: + * ae_Hor: Full support for diacritics positioning by Fahd. + * ae_Sharjah: Full support for diacritics positioning by Fahd. + +2007-08-13 05:34 Youssef Chahibi <chahibi@gmail.com> + + * sfd/: ae_Nice.sfd, ae_Tarablus.sfd: Full diacritics supports, + needs a check + +2007-08-13 05:24 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Nagham.sfd: Full diacritics supports, needs a check + +2007-08-13 05:08 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Haramain.sfd: Full diacritics supports, needs a check + +2007-08-13 04:42 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Graph.sfd: Full diacritics supports, needs a check + +2007-08-13 04:38 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Granada.sfd: Full diacritics supports, needs a check + +2007-08-13 03:28 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Ostorah.sfd: ae_Ostorah.sfd: Full support for diacritic + positioning. + +2007-08-13 02:13 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Haramain.sfd: Done: replaced ugly marks, repositioned + below marks + +2007-08-13 01:31 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Graph.sfd: Done, needs to be checked + +2007-08-13 01:16 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Granada.sfd: Done, needs to be checked + +2007-08-12 23:05 Youssef Chahibi <chahibi@gmail.com> + + * sfd/: ae_Tarablus.sfd: First steps + +2007-08-12 18:24 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Electron.sfd: ae_Electron.sfd: Full support for diacritic + positioning. + +2007-08-12 16:06 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Hani.sfd: ae_Hani.sfd: Full support for diacritic + positioning by Osama Khaled + +2007-08-11 23:33 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Ouhod-Bold.sfd: ae_Ouhod-Bold.sfd: Full support for + diacritic positioning. + +2007-08-11 21:28 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Rasheeq-Bold.sfd: ae_Rasheeq-Bold.sfd: Full diacritic + support. + +2007-08-11 15:09 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Hor.sfd: some fixes + +2007-08-11 14:55 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Electron.sfd, ae_Granada.sfd, ae_Graph.sfd, + ae_Haramain.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, + ae_Ouhod-Bold.sfd, ae_Rasheeq-Bold.sfd, ae_Shado.sfd, + ae_Sharjah.sfd, ae_Tarablus.sfd: More tweaking, it is ready for + manual editing now (I hope so). + +2007-08-11 11:08 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Hor.sfd: Fahd: I updated the anchor points, please use + this instead of the old version. + +2007-08-11 10:45 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Electron.sfd, ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, + ae_Haramain.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, + ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd, + ae_Shado.sfd, ae_Sharjah.sfd, ae_Tarablus.sfd: Replaced old + anchor points with new ones and better automatic positioning using + the improved addanchors.pe script. Please update your local copy + before doing any further work, this will make our life easier. + +2007-08-11 10:25 Khaled Hosny <khaledhosny@eglug.org> + + * tools/addanchors.pe: Now X and Y values are computed to produce a + far better result, the needed manual tweaking is very little now. + +2007-08-10 01:27 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Nada.sfd: ae_Nada.sfd: Full support for diacritic + positioning by Fahd AlSaidi. + +2007-08-07 23:47 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlYarmook.sfd: + * ae_AlYarmook.sfd: Changed font name and other related feilds from + AlYermook to AlYarmook + * ae_AlYarmook.sfd: Full support for diacritic positioning. + +2007-08-07 00:22 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Mashq-Bold.sfd: sfd/ae_Mashq-Bold.sfd: Full support for + diacritic positioning. + +2007-08-06 02:58 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Rehan.sfd: Mark to mark ligatures were too close, fixed. + +2007-08-04 20:14 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Rehan.sfd: ae_Rehan.sfd: Full support for diacritic + positioning. + +2007-08-04 01:22 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Mashq.sfd: ae_Mashq.sfd: Full support for diacritic + positioning. + +2007-08-04 01:19 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Khalid.sfd: Reencoded the file to Unicode. + +2007-08-04 01:16 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Kayrawan.sfd: Fixed ArabicMark2MarkBelow anchor point. + Reencoded the file to Unicode. + +2007-08-03 06:12 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Kayrawan.sfd: Fixed two letters ligatures diacritics + +2007-08-03 05:55 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Kayrawan.sfd: Added لله ligature diacritics + +2007-08-03 05:01 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Kayrawan.sfd: Ignore combining marks set + +2007-08-03 04:51 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Kayrawan.sfd: Full diacritics support - + ArabicMark2MarkBelow need to be checked + +2007-08-03 02:40 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Salem.sfd: Added and positioned anchors for Allah glyph. + +2007-08-03 02:32 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Dimnah.sfd: ae_Dimnah.sfd: Full support for diacritic + positioning. + +2007-08-03 01:26 Youssef Chahibi <chahibi@gmail.com> + + * sfd/ae_Kayrawan.sfd: First steps in font editing + +2007-08-03 00:10 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Salem.sfd: ae_Salem.sfd: Full diacritic support. + +2007-08-02 04:50 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Arab.sfd: Fixed ligatures anchor points. + +2007-08-02 02:15 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Arab.sfd: Support for diacritic positioning by Osama + Khalid. + +2007-08-01 23:09 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlManzomah.sfd: ae_AlManzomah.sfd: Full support for + diacritic positioning. + +2007-08-01 01:56 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Khalid.sfd: ae_Khalid.sfd: Full support for diacritic + positioning. + +2007-07-28 11:43 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMateen-Bold.sfd: ae_AlMateen-Bold.sfd: Full support for + diacritic positioning. + +2007-07-27 22:16 Afief Halumi <afief.h@gmail.com> + + * Makefile: New make targets as requested by KhaledHosney. + +2007-07-27 21:04 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlHor.sfd: ae_AlHor.sfd: Full diacritic support + +2007-07-26 10:14 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Jet.sfd: ./sfd/ae_Jet.sfd: Full diacritic support. + +2007-07-26 01:38 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Japan.sfd: Aeif, you forgot the ligatures and letter beh + isolated, fixed + +2007-07-25 14:41 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Metal.sfd: Add anchor points for لله ligature + +2007-07-25 12:52 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Metal.sfd: ae_Metal: Full diacritic support. + +2007-07-25 01:36 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Japan.sfd: ae_Japan: Full diacritic support. + +2007-07-25 01:28 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Cortoba.sfd: minor fix + +2007-07-25 00:24 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Cortoba.sfd: + + ----------------------------------------------------------------------ae_Cortoba.sfd: Full support for diacritic positioning. + +2007-07-24 18:34 Khaled Hosny <khaledhosny@eglug.org> + + * tools/generate.sh: not needed any more, use 'make' instead + +2007-07-24 18:31 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Sindbad.sfd: Add anchor points for لله ligature + +2007-07-24 18:04 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlArabiya.sfd: Fixed ligatures anchor points + +2007-07-24 17:55 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Furat.sfd: Add anchor points for لله ligature + +2007-07-23 23:16 Khaled Hosny <khaledhosny@eglug.org> + + * README, README.cvs: + - new readme file to explain how to build ttf onts from our cvs + tree. + +2007-07-23 23:01 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlBattar.sfd: few fixes in the diacritic positions + +2007-07-23 13:56 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlBattar.sfd: ae_AlBattar.sfd, full support for diacritic + positioning. + +2007-07-23 05:28 Afief Halumi <afief.h@gmail.com> + + * Makefile: Now doesn't rebuild untouched fonts, should save some + server cycles. + +2007-07-23 04:00 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Sindbad.sfd: Unchecked 'compact' option + +2007-07-23 00:16 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Sindbad.sfd: + - Add the missed "Ignore Combining Marks" feature to Arabic liga + lookuptable, Afief please remember this. + - Few changes in ArabicBelow anchor points placement. + +2007-07-22 14:42 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlBattar.sfd: Diacritic support, for isolated glyphs only. + +2007-07-22 00:43 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Sindbad.sfd: Full support for diacritic positioning. + +2007-07-21 21:38 Khaled Hosny <khaledhosny@eglug.org> + + * Makefile: fixed "clean" to remove the bzipped archive. + +2007-07-21 21:34 Khaled Hosny <khaledhosny@eglug.org> + + * Makefile: + - All files are under ae_fonts dir now. + - The archive is bzipped. + +2007-07-21 20:05 Afief Halumi <afief.h@gmail.com> + + * Makefile: Committed the Makefile. Hope you like it. + +2007-07-21 19:11 Khaled Hosny <khaledhosny@eglug.org> + + * tools/generate.pe: Add a usage note. + +2007-07-21 19:09 Khaled Hosny <khaledhosny@eglug.org> + + * tools/generate.pe: Now accepts a 2nd argument for the .ttf file + name. + +2007-07-21 18:52 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Tholoth.sfd: A few fixes in positioning. + +2007-07-21 16:48 Afief Halumi <afief.h@gmail.com> + + * sfd/ae_Tholoth.sfd: Finished work on ae_Tholoth.sfd; Added a few + better glyphs and full support for diacritic positioning. + +2007-07-21 00:04 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Tholoth.sfd: + + Diacritics work by afief + +2007-07-19 23:49 Khaled Hosny <khaledhosny@eglug.org> + + * tools/addanchors.pe: Add support for mark2glyph anchor points, + thanks George Williams for fixing fontforge's bug. + +2007-07-19 23:16 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlBattar.sfd, ae_AlHor.sfd, ae_AlManzomah.sfd, + ae_AlMateen-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd, + ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Granada.sfd, + ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, ae_Hor.sfd, + ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, ae_Khalid.sfd, + ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd, ae_Nada.sfd, + ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, + ae_Petra.sfd, ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd, + ae_Shado.sfd, ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd, + ae_Tholoth.sfd: + + - Removed Cyrillic and Greek glyphs, this makes the font more + lighter. + - Add all needed anchor points, still needs to be manually adjusted. + +2007-07-19 23:15 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlMohanad.sfd, ae_AlMothnna-Bold.sfd, ae_Furat.sfd: + Removed Cyrillic and Greek glyphs, this makes the font more lighter. + +2007-07-19 23:12 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlArabiya.sfd: full support for diacritic positioning + +2007-07-18 14:57 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlArabiya.sfd: + + Full mark2base and mark2mark anchor points + +2007-07-16 20:53 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Nada.sfd: + + Removed obsolete reference to Btstream copyright, we don't include + any Bitstream copyrighted glyphs anymore. + +2007-07-16 20:03 Khaled Hosny <khaledhosny@eglug.org> + + * tools/: addanchors.pe, addlookups.pe, cp.pe, generate.pe: + + use "#!/usr/bin/env fontforge" instead of "#!/usr/bin/fontforge" + +2007-07-16 13:47 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMohanad.sfd: + + Full support for proper diacritics positioning + +2007-07-16 00:16 Khaled Hosny <khaledhosny@eglug.org> + + * tools/: addanchors.pe, addlookups.pe, cp.pe, generate.pe: Now the + scripts require Fotforge 20070501 or newer, older versions use older + SFD formate which we don't suport. + +2007-07-16 00:09 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlArabiya.sfd: Add support for proper diacritic + positioning by Afief Halumi, still in progress + +2007-07-15 23:48 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Furat.sfd: full support for diacritic positioning + +2007-07-15 20:08 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlBattar.sfd, ae_AlHor.sfd, ae_AlManzomah.sfd, + ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlYarmook.sfd, + ae_Arab.sfd, ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, + ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, + ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, + ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd, + ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, + ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd, + ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd, + ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: removed traces + of ae_ prefix + +2007-07-15 19:44 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlArabiya.sfd: removed traces of ae_ prefix + +2007-07-13 20:14 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMothnna-Bold.sfd: + - Removed traces of ae_ prefix. + - Full support for proper Arabic diacritics positioning. + +2007-07-13 19:38 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Furat.sfd: + - Removed traces of ae_ prefix. + - add anchor points for Arabic diacritics, needs manual tuning. + +2007-07-13 19:09 Khaled Hosny <khaledhosny@eglug.org> + + * tools/: addanchors.pe, addlookups.pe: scripts to assist adding + lookup tables and anchor points needed for proper diacritics + (harakat) support. + +2007-07-01 03:31 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd, + ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, + ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd, + ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd, + ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, + ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, + ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd, + ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, + ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd, + ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd, + ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Removed ae_ + prefix from all fonts, see + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=361965 + +2007-06-30 22:02 Khaled Hosny <khaledhosny@eglug.org> + + * README: Initial README file + +2007-06-30 20:20 Khaled Hosny <khaledhosny@eglug.org> + + * tools/: generate.pe, generate.sh: Scripts to generate TTF files + from SFD ones. + +2007-06-30 19:58 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Tarablus.sfd: add the missed U+F6BE that caused bug in 'j' + glyph, CVS_SILENT + +2007-06-30 19:48 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Sindbad.sfd: + add the missed U+F6BE that caused bug in 'j' glyph, CVS_SILENT + +2007-06-23 22:29 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Shado.sfd, ae_Sharjah.sfd: add the missed U+F6BE that + caused bug in 'j' glyph + +2007-06-23 22:26 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd: add the + missed U+F6BE that caused bug in 'j' glyph + +2007-06-23 22:22 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Nice.sfd, ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, + ae_Petra.sfd: add the missed U+F6BE that caused bug in 'j' glyph + +2007-06-23 22:19 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Metal.sfd, ae_Nada.sfd, ae_Nagham.sfd: add the missed + U+F6BE that caused bug in 'j' glyph + +2007-06-23 22:16 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd, + ae_Mashq.sfd: add the missed U+F6BE that caused bug in 'j' glyph + +2007-06-23 22:12 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Haramain.sfd, ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd: add + the missed U+F6BE that caused bug in 'j' glyph + +2007-06-23 22:09 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd: add the missed + U+F6BE that caused bug in 'j' glyph + +2007-06-23 22:05 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Electron.sfd, ae_Furat.sfd: add the missed U+F6BE that + caused bug in 'j' glyph + +2007-06-23 22:02 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Cortoba.sfd, ae_Dimnah.sfd: add the missed U+F6BE that + caused bug in 'j' glyph + +2007-06-23 21:59 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlYarmook.sfd, ae_Arab.sfd: add the missed U+F6BE that + caused bug in 'j' glyph + +2007-06-23 21:19 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd, + ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, + ae_AlMothnna-Bold.sfd: Added the missed U+U+F6BE glyphs which + caused a bug in "j" glyph + +2007-06-23 18:30 Khaled Hosny <khaledhosny@eglug.org> + + * COPYING: -Moved GPL to a separate file. -Added GPL font + exception to COPYING. + +2007-06-23 18:12 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_Tholoth.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 18:07 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Shado.sfd, ae_Sharjah.sfd, ae_Sindbad.sfd, + ae_Tarablus.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 18:04 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Petra.sfd, ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, + ae_Salem.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 18:01 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, + ae_Ouhod-Bold.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 17:57 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Metal.sfd, ae_Nada.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 17:54 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd, + ae_Mashq.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 17:51 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Haramain.sfd, ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 17:47 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Furat.sfd, ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 17:43 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_Arab.sfd, ae_Cortoba.sfd, ae_Dimnah.sfd, + ae_Electron.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 17:40 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, + ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-23 17:37 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd, + ae_AlManzomah.sfd: + - New glyphs (covering every thing outside Arabic block) based on + the GPL'd FreeFont project [http://www.nongnu.org/freefont/]. + - Arabic diacritic marks (harakat) are set to have zero advance + width and OT class as 'mark' nstead of 'base glyph' + +2007-06-21 05:57 Khaled Hosny <khaledhosny@eglug.org> + + * tools/cp.pe: Simple ff script to copy a specific range of glyphs + from on font to another. + +2007-06-16 01:54 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMothnna-Bold.sfd: + - Identical glyphs (or parts of glyphs) are referenced to one common + glyph instead of copying the same shape each time. + - Add few missed Arabic glyphs, DOTLESS QAF, DOTLESS BEH, HAMZA + ABOVE, HAMZA BELOW and EXTENDED ARABIC-INDIC DIGIT ZERO, ONE, TWO, + THREE, SEVEN, EIGHT, NINE. + +2007-06-15 07:10 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd, + ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, + ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd, + ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd, + ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, + ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, + ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd, + ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, + ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd, + ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd, + ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Preparing to + work + +2007-06-02 21:25 Khaled Hosny <khaledhosny@eglug.org> + + * sfd/ae_AlMothnna-Bold.sfd: + - A modified version of "AlMothnna", partially fixes the vowel marks + issues. + - This is fontforg's sfd file. + +2004-07-10 09:48 nadim + + * COPYING: + Minor mods to the GPL license mention (their address + changed) + Added disclaimer + Renamed file from license.txt for + consistency + diff --git a/tcpdf/fonts/ae_fonts_2.0/README b/tcpdf/fonts/ae_fonts_2.0/README new file mode 100644 index 0000000..b517cc8 --- /dev/null +++ b/tcpdf/fonts/ae_fonts_2.0/README @@ -0,0 +1,58 @@ +This project aims at increasing the number of available Arabic free and +open source fonts. The goals of this project are, + + * Create and/or salvage high quality free and open TTF Arabic fonts. + + * Create a central repository of all free and open source Arabic fonts +(TTF and otherwise) in order to get them included into the various +distributions. + + * To better couple and artistically match Arabic fonts to their latin +counterparts. + +You can visit our web page +http://www.arabeyes.org/project.php?proj=Khotot + +This software package/product and attached documentations are provided +"as is", with no warranty. + + -* www.arabeyes.org *- + +If you'd like to help the Arabeyes Project, then consider: + + http://www.arabeyes.org/donate.php + +Typeface and data © 2003-2007, Arabeyes.org. + +Latin glyphs (U+0021-U+007E, U+00A1-U+0237, U+1E00-U+1EF9 and +U+FB00-U+FB06 Unicode ranges) are based on "Free UCS Outline Fonts", +www.nongnu.org/freefont (Copyleft 2002, 2003, 2005 Free Software +Foundation). + +These fonts are subject to the GNU GENERAL PUBLIC (GPL) LICENSE (Version 2). +See COPYING for details or http://www.gnu.org/copyleft/gpl.html + +As a special exception, if you create a document which uses this +font, and embed this font or unaltered portions of this font into the +document, this font does not by itself cause the resulting document to +be covered by the GNU General Public License. This exception does not +however invalidate any other reasons why the document might be covered +by the GNU General Public License. If you modify this font, you may +extend this exception to your version of the font, but you are not +obligated to do so. If you do not wish to do so, delete this exception +statement from your version. + +Release Notes +------------- +2.0 +This the second major release of Arabeyes fonts, this release features: + * Completely new Latin Glyphs, based on font distributed by FreeFonts project + (See the legal notes above) + * Proper support for Arabic diacritics; all fonts now have anchor points + adjusted manually to fit nicely with each glyph. + * Diacritics for AlMothnna, AlArabiya and Tholoth fonts have been redisigned + too look better and fit with the style of the font. + * We dropped ae_ prefix from all fonts, so please fix your configuration + files. + * Various other small fixes, see ChangeLog file for details. + diff --git a/tcpdf/fonts/aealarabiya.ctg.z b/tcpdf/fonts/aealarabiya.ctg.z new file mode 100644 index 0000000..51315d6 Binary files /dev/null and b/tcpdf/fonts/aealarabiya.ctg.z differ diff --git a/tcpdf/fonts/aealarabiya.php b/tcpdf/fonts/aealarabiya.php new file mode 100644 index 0000000..828f1ec --- /dev/null +++ b/tcpdf/fonts/aealarabiya.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='AlArabiya'; +$up=-136; +$ut=64; +$dw=367; +$diff=''; +$originalsize=121496; +$enc=''; +$file='aealarabiya.z'; +$ctg='aealarabiya.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-123 -488 1305 1230]','ItalicAngle'=>0,'Ascent'=>1230,'Descent'=>-503,'Leading'=>200,'CapHeight'=>729,'XHeight'=>524,'StemV'=>39,'StemH'=>17,'AvgWidth'=>441,'MaxWidth'=>1332,'MissingWidth'=>367); +$cbbox=array(33=>array(124,0,208,729),34=>array(52,464,306,709),35=>array(14,-20,542,697),36=>array(33,-126,518,770),37=>array(29,-20,859,709),38=>array(52,-23,637,709),39=>array(48,464,142,709),40=>array(73,-212,291,729),41=>array(38,-212,256,729),42=>array(40,441,343,729),43=>array(50,-10,534,474),44=>array(87,-147,192,104),45=>array(46,240,284,312),46=>array(87,0,191,104),47=>array(-8,-20,284,729),48=>array(43,-23,507,709),49=>array(102,0,347,709),50=>array(34,0,511,709),51=>array(32,-23,506,709),52=>array(28,0,520,709),53=>array(34,-23,513,709),54=>array(43,-23,513,709),55=>array(46,0,520,709),56=>array(37,-23,513,709),57=>array(38,-23,509,709),58=>array(110,0,214,524),59=>array(110,-147,214,524),60=>array(46,-9,534,474),61=>array(50,111,534,353),62=>array(50,-9,539,474),63=>array(77,0,509,741),64=>array(34,-142,951,741),65=>array(17,0,653,729),66=>array(79,0,623,729),67=>array(48,-23,677,741),68=>array(89,0,667,729),69=>array(90,0,613,729),70=>array(90,0,579,729),71=>array(44,-23,709,741),72=>array(83,0,644,729),73=>array(100,0,194,729),74=>array(17,-23,426,729),75=>array(79,0,658,729),76=>array(80,0,533,729),77=>array(74,0,761,729),78=>array(76,0,646,729),79=>array(38,-23,742,741),80=>array(91,0,617,729),81=>array(38,-59,742,741),82=>array(93,0,679,729),83=>array(48,-23,621,741),84=>array(21,0,593,729),85=>array(86,-23,646,729),86=>array(30,0,646,729),87=>array(22,0,929,729),88=>array(22,0,649,729),89=>array(13,0,661,729),90=>array(28,0,583,729),91=>array(64,-212,250,729),92=>array(-8,-20,284,729),93=>array(23,-212,209,729),94=>array(44,329,426,709),95=>array(-22,-176,578,-126),96=>array(22,592,231,740),97=>array(42,-23,534,539),98=>array(54,-23,523,729),99=>array(31,-23,477,539),100=>array(26,-23,494,729),101=>array(40,-23,513,539),102=>array(18,0,258,732),103=>array(29,-218,489,539),104=>array(70,0,486,729),105=>array(66,0,151,729),106=>array(-18,-218,153,729),107=>array(58,0,502,729),108=>array(68,0,152,729),109=>array(70,0,762,539),110=>array(70,0,487,539),111=>array(36,-23,510,539),112=>array(54,-218,523,539),113=>array(26,-218,494,539),114=>array(69,0,321,539),115=>array(34,-23,459,539),116=>array(14,-23,254,668),117=>array(66,-23,482,524),118=>array(10,0,486,524),119=>array(6,0,708,524),120=>array(17,0,473,524),121=>array(20,-218,478,524),122=>array(31,0,457,524),123=>array(43,-212,276,729),124=>array(100,-212,160,729),125=>array(29,-212,262,729),126=>array(74,268,508,438),160=>array(0,0,0,0),161=>array(122,-206,206,524),162=>array(52,-120,510,628),163=>array(26,-23,534,729),164=>array(67,133,489,551),165=>array(11,0,546,709),166=>array(100,-212,160,729),167=>array(43,-213,506,729),168=>array(30,612,296,714),169=>array(-13,-22,751,742),170=>array(37,303,333,742),171=>array(98,106,454,438),172=>array(40,86,544,374),173=>array(46,240,284,312),174=>array(-13,-22,751,742),175=>array(28,631,302,701),176=>array(151,383,454,686),177=>array(50,-11,534,623),178=>array(19,284,326,709),179=>array(16,270,322,709),180=>array(92,592,301,740),181=>array(78,-200,498,518),182=>array(48,-177,522,729),183=>array(87,302,211,427),184=>array(39,-214,287,0),185=>array(61,284,222,709),186=>array(40,303,324,742),187=>array(98,106,451,438),188=>array(61,-20,849,709),189=>array(61,-20,844,709),190=>array(16,-20,849,709),191=>array(96,-217,528,524),192=>array(17,0,653,939),193=>array(17,0,653,939),194=>array(17,0,653,940),195=>array(17,0,653,905),196=>array(17,0,653,904),197=>array(17,0,653,953),198=>array(11,0,950,729),199=>array(48,-214,677,741),200=>array(90,0,613,939),201=>array(90,0,613,939),202=>array(90,0,613,939),203=>array(90,0,613,904),204=>array(0,0,208,939),205=>array(71,0,280,939),206=>array(-1,0,286,940),207=>array(14,0,280,904),208=>array(20,0,667,729),209=>array(76,0,646,905),210=>array(38,-23,742,939),211=>array(38,-23,742,939),212=>array(38,-23,742,940),213=>array(38,-23,742,905),214=>array(38,-23,742,904),215=>array(94,34,488,427),216=>array(30,-23,744,754),217=>array(86,-23,646,939),218=>array(86,-23,646,939),219=>array(86,-23,646,939),220=>array(86,-23,646,904),221=>array(13,0,661,939),222=>array(91,0,616,729),223=>array(67,-14,571,728),224=>array(42,-23,534,740),225=>array(42,-23,534,739),226=>array(42,-23,534,741),227=>array(42,-23,534,703),228=>array(42,-23,534,701),229=>array(42,-23,534,754),230=>array(34,-23,846,539),231=>array(31,-214,477,539),232=>array(40,-23,513,740),233=>array(40,-23,513,739),234=>array(40,-23,513,742),235=>array(40,-23,513,701),236=>array(-4,0,204,738),237=>array(66,0,274,739),238=>array(-7,0,280,741),239=>array(3,0,269,701),240=>array(36,-23,510,743),241=>array(70,0,487,703),242=>array(36,-23,510,741),243=>array(36,-23,510,740),244=>array(36,-23,510,742),245=>array(36,-23,510,703),246=>array(36,-23,510,701),247=>array(50,0,534,472),248=>array(18,-30,529,539),249=>array(66,-23,482,739),250=>array(66,-23,482,740),251=>array(66,-23,482,742),252=>array(66,-23,482,701),253=>array(20,-218,478,739),254=>array(54,-218,522,714),255=>array(20,-218,478,701),256=>array(17,0,653,871),257=>array(42,-23,534,669),258=>array(17,0,653,932),259=>array(42,-23,534,734),260=>array(17,-206,692,729),261=>array(43,-206,596,539),262=>array(48,-23,677,940),263=>array(31,-23,477,740),264=>array(48,-23,677,940),265=>array(31,-23,477,714),266=>array(48,-23,677,873),267=>array(31,-23,477,668),268=>array(48,-23,677,940),269=>array(31,-23,477,742),270=>array(89,0,667,940),271=>array(26,-23,690,729),272=>array(20,0,667,729),273=>array(26,-23,557,729),274=>array(90,0,613,871),275=>array(40,-23,513,669),276=>array(90,0,613,904),277=>array(40,-23,513,699),278=>array(90,0,613,906),279=>array(40,-23,513,703),280=>array(90,-206,652,729),281=>array(40,-204,513,539),282=>array(90,0,613,940),283=>array(40,-23,513,741),284=>array(44,-23,709,920),285=>array(29,-218,489,741),286=>array(44,-23,709,932),287=>array(29,-218,489,734),288=>array(44,-23,709,873),289=>array(29,-218,489,668),290=>array(44,-333,709,741),291=>array(29,-218,489,740),292=>array(83,0,644,919),293=>array(-32,0,486,919),294=>array(39,0,688,729),295=>array(7,0,486,729),296=>array(-9,0,304,873),297=>array(-21,0,293,668),298=>array(10,0,284,871),299=>array(-2,0,273,669),300=>array(-3,0,298,904),301=>array(-16,0,286,699),302=>array(27,-206,235,729),303=>array(-17,-206,191,729),304=>array(94,0,199,906),305=>array(94,0,177,524),306=>array(100,-23,626,729),307=>array(66,-218,306,729),308=>array(17,-23,523,919),309=>array(-32,-218,254,741),310=>array(79,-311,658,729),311=>array(58,-311,502,729),312=>array(58,0,502,524),313=>array(70,0,533,939),314=>array(64,0,273,939),315=>array(80,-311,533,729),316=>array(57,-311,162,729),317=>array(80,0,533,741),318=>array(68,0,306,729),319=>array(80,0,533,729),320=>array(68,0,433,729),321=>array(0,0,552,729),322=>array(0,0,212,729),323=>array(76,0,646,939),324=>array(70,0,487,739),325=>array(76,-311,646,729),326=>array(70,-311,487,539),327=>array(76,0,646,940),328=>array(70,0,487,740),329=>array(48,0,627,709),330=>array(76,-218,646,729),331=>array(70,-218,487,539),332=>array(38,-23,742,871),333=>array(36,-23,510,669),334=>array(38,-23,742,904),335=>array(36,-23,510,699),336=>array(38,-23,742,940),337=>array(36,-23,526,740),338=>array(43,-20,959,741),339=>array(40,-23,899,539),340=>array(93,0,679,939),341=>array(69,0,331,739),342=>array(93,-311,679,729),343=>array(59,-311,321,539),344=>array(93,0,679,940),345=>array(49,0,336,741),346=>array(48,-23,621,941),347=>array(34,-23,459,740),348=>array(48,-23,621,941),349=>array(34,-23,459,714),350=>array(48,-214,621,741),351=>array(34,-214,459,539),352=>array(48,-23,621,940),353=>array(34,-23,459,741),354=>array(21,-214,593,729),355=>array(14,-237,293,668),356=>array(21,0,593,940),357=>array(14,-23,402,668),358=>array(21,0,593,729),359=>array(9,-23,254,668),360=>array(86,-23,646,873),361=>array(66,-23,482,668),362=>array(86,-23,646,871),363=>array(66,-23,482,669),364=>array(86,-23,646,904),365=>array(66,-23,482,699),366=>array(86,-23,646,954),367=>array(66,-23,482,754),368=>array(86,-23,646,940),369=>array(66,-23,530,740),370=>array(86,-206,646,729),371=>array(66,-204,521,524),372=>array(22,0,929,919),373=>array(6,0,708,741),374=>array(13,0,661,919),375=>array(20,-218,478,741),376=>array(13,0,661,904),377=>array(28,0,583,939),378=>array(31,0,457,739),379=>array(28,0,583,906),380=>array(31,0,457,703),381=>array(28,0,583,940),382=>array(31,0,457,740),383=>array(18,0,258,732),384=>array(26,-23,557,729),385=>array(48,0,810,729),386=>array(79,0,623,729),387=>array(54,-23,523,729),388=>array(-49,0,623,729),389=>array(-39,-23,523,729),390=>array(48,-23,678,741),391=>array(48,-23,749,741),392=>array(31,-23,558,556),393=>array(20,0,667,729),394=>array(48,0,844,729),395=>array(79,0,623,729),396=>array(54,-23,523,729),397=>array(37,-197,529,548),398=>array(90,0,613,729),399=>array(47,-23,677,741),400=>array(48,-23,621,741),401=>array(2,-218,579,729),402=>array(0,-218,258,732),403=>array(44,-23,786,741),404=>array(13,-27,661,729),405=>array(70,-23,833,729),406=>array(66,-23,234,729),407=>array(0,0,333,729),408=>array(79,0,672,729),409=>array(58,0,502,732),410=>array(0,0,333,729),411=>array(30,-10,556,738),412=>array(64,-14,768,729),413=>array(-12,-218,646,729),414=>array(70,-200,487,539),415=>array(38,-23,742,741),416=>array(38,-23,788,796),417=>array(36,-23,566,631),418=>array(38,-23,924,746),419=>array(36,-200,672,539),420=>array(48,0,792,729),421=>array(54,-218,523,732),422=>array(91,-126,646,729),423=>array(48,-23,621,741),424=>array(34,-23,459,539),425=>array(28,0,583,729),426=>array(-18,-218,317,732),427=>array(14,-218,254,668),428=>array(0,0,593,729),429=>array(14,-23,254,732),430=>array(21,-218,593,729),431=>array(86,-23,776,856),432=>array(66,-23,623,651),433=>array(17,-4,694,729),434=>array(86,-23,660,729),435=>array(-12,0,686,729),436=>array(20,-218,548,546),437=>array(28,0,583,729),438=>array(31,0,457,524),439=>array(32,-23,581,729),440=>array(32,-23,581,729),441=>array(12,-143,486,524),442=>array(34,-202,483,524),443=>array(34,0,511,709),446=>array(64,-21,496,668),447=>array(54,-218,526,540),448=>array(100,-212,160,729),449=>array(100,-212,270,729),450=>array(50,-212,534,729),451=>array(124,0,208,729),452=>array(89,0,1283,940),453=>array(89,0,1165,740),454=>array(26,-23,1013,740),455=>array(80,-23,982,729),456=>array(80,-218,709,729),457=>array(68,-218,376,729),458=>array(76,-23,1134,729),459=>array(76,-218,876,729),460=>array(70,-218,709,729),461=>array(17,0,653,931),462=>array(42,-23,534,729),463=>array(3,0,290,931),464=>array(-7,0,280,729),465=>array(38,-23,742,931),466=>array(36,-23,510,729),467=>array(86,-23,646,931),468=>array(66,-23,482,729),469=>array(86,-23,646,1024),470=>array(66,-23,482,825),471=>array(86,-23,646,1102),472=>array(66,-23,482,903),473=>array(86,-23,646,1104),474=>array(66,-23,482,905),475=>array(86,-23,646,1102),476=>array(66,-23,482,903),477=>array(40,-23,513,539),478=>array(17,0,653,1024),479=>array(42,-23,534,825),480=>array(17,0,653,995),481=>array(42,-23,534,793),482=>array(11,0,950,900),483=>array(34,-23,846,701),484=>array(44,-23,762,741),485=>array(29,-218,514,539),486=>array(44,-23,709,931),487=>array(29,-218,489,729),488=>array(79,0,658,931),489=>array(-44,0,502,919),490=>array(38,-222,742,741),491=>array(36,-222,510,539),492=>array(38,-222,742,851),493=>array(36,-222,510,649),494=>array(32,-23,581,951),495=>array(12,-143,486,738),496=>array(-33,-218,254,714),497=>array(89,0,1305,729),498=>array(89,0,1179,729),499=>array(26,-23,1013,729),500=>array(44,-23,709,929),501=>array(29,-218,489,727),504=>array(76,0,646,929),505=>array(70,0,487,727),506=>array(17,0,653,1141),507=>array(42,-23,534,942),508=>array(11,0,950,929),509=>array(34,-23,846,727),510=>array(30,-23,744,943),511=>array(18,-30,529,727),512=>array(17,0,653,931),513=>array(42,-23,534,729),514=>array(17,0,653,729),515=>array(42,-23,534,539),516=>array(90,0,613,931),517=>array(40,-23,513,729),518=>array(90,0,613,729),519=>array(40,-23,513,539),520=>array(-80,0,302,931),521=>array(-92,0,291,729),522=>array(100,0,194,729),523=>array(94,0,177,524),524=>array(38,-23,742,931),525=>array(36,-23,510,729),526=>array(38,-23,742,741),527=>array(36,-23,510,539),528=>array(93,0,679,931),529=>array(-22,0,360,729),530=>array(93,0,679,729),531=>array(69,0,321,539),532=>array(86,-23,646,931),533=>array(66,-23,482,729),534=>array(86,-23,646,729),535=>array(66,-23,482,524),536=>array(48,-284,621,741),537=>array(34,-284,459,539),538=>array(21,-284,593,729),539=>array(14,-284,254,668),542=>array(83,0,644,931),543=>array(-27,0,486,919),548=>array(28,-216,583,729),549=>array(31,-216,457,524),550=>array(17,0,653,886),551=>array(42,-23,534,683),552=>array(90,-207,613,729),553=>array(40,-230,513,539),554=>array(38,-23,742,1024),555=>array(36,-23,510,825),556=>array(38,-23,742,1027),557=>array(36,-23,510,827),558=>array(38,-23,742,886),559=>array(36,-23,510,683),560=>array(38,-23,742,995),561=>array(36,-23,510,793),562=>array(13,0,661,851),563=>array(20,-218,478,649),1548=>array(56,63,155,244),1563=>array(56,63,155,377),1567=>array(54,-69,348,542),1569=>array(24,0,368,366),1570=>array(24,0,139,764),1571=>array(24,0,139,757),1572=>array(31,-147,341,586),1573=>array(24,-144,139,586),1574=>array(25,-147,462,444),1575=>array(24,0,139,586),1576=>array(24,-155,777,391),1577=>array(29,0,425,567),1578=>array(24,0,777,567),1579=>array(24,0,777,714),1580=>array(37,-149,427,386),1581=>array(37,-147,415,386),1582=>array(36,-147,413,567),1583=>array(21,0,396,402),1584=>array(19,0,395,567),1585=>array(0,-147,190,391),1586=>array(0,-147,190,567),1587=>array(32,-147,987,391),1588=>array(32,-147,987,688),1589=>array(32,-147,917,391),1590=>array(32,-147,917,567),1591=>array(19,0,599,586),1592=>array(19,0,599,586),1593=>array(34,-147,409,391),1594=>array(37,-147,413,567),1600=>array(-5,0,158,93),1601=>array(27,0,736,567),1602=>array(25,-147,530,567),1603=>array(24,0,777,586),1604=>array(32,-147,537,586),1605=>array(9,-294,381,391),1606=>array(32,-147,502,567),1607=>array(29,0,425,393),1608=>array(36,-147,338,391),1609=>array(25,-147,462,391),1610=>array(25,-298,462,391),1611=>array(47,640,314,930),1612=>array(80,686,340,954),1613=>array(19,-488,286,-198),1614=>array(39,681,305,845),1615=>array(80,697,231,965),1616=>array(44,-441,311,-277),1617=>array(2,678,305,876),1618=>array(-10,704,167,897),1632=>array(183,174,283,273),1633=>array(177,4,256,498),1634=>array(78,4,372,498),1635=>array(20,-1,410,508),1636=>array(89,0,341,498),1637=>array(79,0,355,509),1638=>array(53,4,348,498),1639=>array(49,0,371,498),1640=>array(49,0,371,498),1641=>array(78,4,341,498),1642=>array(56,0,462,612),1645=>array(17,388,317,688),7680=>array(17,-235,653,729),7681=>array(42,-258,534,539),7682=>array(79,0,623,906),7683=>array(54,-23,523,893),7684=>array(79,-164,623,729),7685=>array(54,-187,523,729),7686=>array(79,-131,623,729),7687=>array(54,-153,523,729),7688=>array(48,-214,677,949),7689=>array(31,-214,477,747),7690=>array(89,0,667,906),7691=>array(26,-23,494,893),7692=>array(89,-164,667,729),7693=>array(26,-187,494,729),7694=>array(89,-131,667,729),7695=>array(26,-153,494,729),7696=>array(85,-207,667,729),7697=>array(26,-230,494,729),7698=>array(86,-211,667,729),7699=>array(26,-233,494,729),7700=>array(90,0,613,1108),7701=>array(40,-23,513,909),7702=>array(90,0,613,1108),7703=>array(40,-23,513,909),7704=>array(90,-211,613,729),7705=>array(40,-233,513,539),7706=>array(90,-164,613,729),7707=>array(40,-187,513,539),7708=>array(90,-207,613,936),7709=>array(40,-230,513,734),7710=>array(90,0,579,906),7711=>array(18,0,263,896),7712=>array(44,-23,709,871),7713=>array(29,-218,489,669),7714=>array(83,0,644,906),7715=>array(58,0,486,893),7716=>array(83,-164,644,729),7717=>array(70,-164,486,729),7718=>array(83,0,644,904),7719=>array(44,0,486,892),7720=>array(-15,-207,644,729),7721=>array(-33,-207,486,729),7722=>array(83,-195,644,729),7723=>array(70,-195,486,729),7724=>array(-9,-164,304,729),7725=>array(-48,-164,265,729),7726=>array(14,0,321,1114),7727=>array(3,0,315,916),7728=>array(79,0,658,949),7729=>array(58,0,502,937),7730=>array(79,-164,658,729),7731=>array(58,-164,502,729),7732=>array(79,-131,658,729),7733=>array(58,-131,502,729),7734=>array(80,-164,533,729),7735=>array(57,-164,162,729),7736=>array(-11,-164,533,871),7737=>array(-27,-164,248,859),7738=>array(80,-131,533,729),7739=>array(-27,-131,248,729),7740=>array(80,-211,533,729),7741=>array(-34,-211,253,729),7742=>array(74,0,761,949),7743=>array(70,0,762,747),7744=>array(74,0,761,906),7745=>array(70,0,762,703),7746=>array(74,-164,761,729),7747=>array(70,-164,762,539),7748=>array(76,0,646,906),7749=>array(70,0,487,703),7750=>array(76,-164,646,729),7751=>array(70,-164,487,539),7752=>array(76,-131,646,729),7753=>array(70,-131,487,539),7754=>array(76,-211,646,729),7755=>array(70,-211,487,539),7756=>array(38,-23,742,1124),7757=>array(36,-23,510,926),7758=>array(38,-23,742,1078),7759=>array(36,-23,510,880),7760=>array(38,-23,742,1108),7761=>array(36,-23,510,909),7762=>array(38,-23,742,1108),7763=>array(36,-23,510,909),7764=>array(91,0,617,949),7765=>array(54,-218,523,747),7766=>array(91,0,617,906),7767=>array(54,-218,523,703),7768=>array(93,0,679,906),7769=>array(69,0,321,703),7770=>array(93,-164,679,729),7771=>array(58,-164,321,539),7772=>array(93,-164,679,871),7773=>array(58,-164,336,669),7774=>array(93,-131,679,729),7775=>array(-26,-131,321,539),7776=>array(48,-23,621,906),7777=>array(34,-23,459,703),7778=>array(48,-187,621,741),7779=>array(34,-187,459,539),7780=>array(48,-23,621,1103),7781=>array(34,-23,459,904),7782=>array(48,-23,621,1104),7783=>array(34,-23,459,906),7784=>array(48,-187,621,906),7785=>array(34,-187,459,703),7786=>array(21,0,593,906),7787=>array(14,-23,254,832),7788=>array(21,-164,593,729),7789=>array(14,-187,254,668),7790=>array(21,-131,593,729),7791=>array(14,-153,323,668),7792=>array(21,-211,593,729),7793=>array(14,-233,329,668),7794=>array(86,-186,646,729),7795=>array(66,-186,482,524),7796=>array(86,-187,646,729),7797=>array(66,-187,482,524),7798=>array(86,-233,646,729),7799=>array(66,-233,482,524),7800=>array(86,-23,646,1081),7801=>array(66,-23,496,876),7802=>array(86,-23,646,1062),7803=>array(66,-23,482,864),7804=>array(30,0,646,905),7805=>array(10,0,486,703),7806=>array(30,-164,646,729),7807=>array(10,-164,486,524),7808=>array(22,0,929,949),7809=>array(6,0,708,747),7810=>array(22,0,929,949),7811=>array(6,0,708,747),7812=>array(22,0,929,904),7813=>array(6,0,708,701),7814=>array(22,0,929,906),7815=>array(6,0,708,703),7816=>array(22,-164,929,729),7817=>array(6,-164,708,524),7818=>array(22,0,649,906),7819=>array(17,0,473,703),7820=>array(22,0,649,904),7821=>array(17,0,473,701),7822=>array(13,0,661,906),7823=>array(20,-218,478,703),7824=>array(28,0,583,951),7825=>array(31,0,457,749),7826=>array(28,-164,583,729),7827=>array(31,-164,457,524),7828=>array(28,-131,583,729),7829=>array(31,-131,457,524),7830=>array(70,-131,486,729),7831=>array(-7,-23,259,831),7832=>array(6,0,708,774),7833=>array(20,-218,478,774),7835=>array(18,0,263,896),7840=>array(17,-164,653,729),7841=>array(42,-187,534,539),7842=>array(17,0,653,1031),7843=>array(42,-23,534,829),7844=>array(17,0,653,1148),7845=>array(42,-23,534,949),7846=>array(17,0,653,1148),7847=>array(42,-23,534,949),7848=>array(17,0,653,1230),7849=>array(42,-23,534,1031),7850=>array(17,0,653,1104),7851=>array(42,-23,534,905),7852=>array(17,-164,653,951),7853=>array(42,-187,534,749),7854=>array(17,0,653,1139),7855=>array(42,-23,534,940),7856=>array(17,0,653,1139),7857=>array(42,-23,534,940),7858=>array(17,0,653,1221),7859=>array(42,-23,534,1022),7860=>array(17,0,653,1095),7861=>array(42,-23,534,896),7862=>array(17,-164,653,936),7863=>array(42,-187,534,734),7864=>array(90,-164,613,729),7865=>array(40,-187,513,539),7866=>array(90,0,613,1031),7867=>array(40,-23,513,829),7868=>array(90,0,613,905),7869=>array(40,-23,513,703),7870=>array(90,0,613,1148),7871=>array(40,-23,513,949),7872=>array(78,0,613,980),7873=>array(40,-23,513,949),7874=>array(90,0,613,1230),7875=>array(40,-23,513,1031),7876=>array(90,0,613,1104),7877=>array(40,-23,513,905),7878=>array(90,-164,613,951),7879=>array(40,-187,513,749),7880=>array(100,0,257,1031),7881=>array(93,0,246,829),7882=>array(94,-164,199,729),7883=>array(57,-164,161,729),7884=>array(38,-187,742,741),7885=>array(36,-187,510,539),7886=>array(38,-23,742,1031),7887=>array(36,-23,510,829),7888=>array(38,-23,742,1148),7889=>array(36,-23,510,949),7890=>array(38,-23,742,1148),7891=>array(36,-23,510,949),7892=>array(38,-23,742,1230),7893=>array(36,-23,510,1031),7894=>array(38,-23,742,1104),7895=>array(36,-23,510,905),7896=>array(38,-187,742,951),7897=>array(36,-187,510,749),7898=>array(38,-23,788,962),7899=>array(36,-23,566,749),7900=>array(38,-23,788,950),7901=>array(36,-23,566,726),7902=>array(38,-23,788,1032),7903=>array(36,-23,566,826),7904=>array(38,-23,788,907),7905=>array(36,-23,566,705),7906=>array(38,-187,788,796),7907=>array(36,-187,566,631),7908=>array(86,-187,646,729),7909=>array(66,-187,482,524),7910=>array(86,-23,646,1031),7911=>array(66,-23,482,829),7912=>array(86,-23,776,950),7913=>array(66,-23,623,733),7914=>array(86,-23,776,950),7915=>array(66,-23,623,733),7916=>array(86,-23,776,984),7917=>array(66,-23,623,809),7918=>array(86,-23,776,900),7919=>array(66,-23,623,701),7920=>array(86,-187,776,856),7921=>array(66,-187,623,651),7922=>array(13,0,661,949),7923=>array(20,-218,478,747),7924=>array(13,-164,661,729),7925=>array(20,-382,478,524),7926=>array(13,0,661,1031),7927=>array(20,-218,478,829),7928=>array(13,0,661,905),7929=>array(20,-218,478,703),8204=>array(-17,0,17,910),8205=>array(-110,0,110,910),8206=>array(-123,0,123,916),8207=>array(-123,0,123,916),8234=>array(-123,-94,123,822),8235=>array(-123,-94,123,822),8236=>array(-111,0,111,910),8237=>array(-123,-94,123,916),8238=>array(-123,-94,123,916),64256=>array(13,0,388,536),64257=>array(9,0,319,536),64258=>array(13,0,315,536),64259=>array(13,0,523,536),64260=>array(13,0,518,536),64261=>array(13,-17,389,536),64262=>array(25,-17,552,489),64606=>array(19,728,322,1202),64607=>array(-3,479,299,964),64608=>array(-3,678,299,1013),64609=>array(-3,701,299,1143),64610=>array(-3,656,299,1014),64611=>array(-3,689,299,1021),64830=>array(34,-158,409,578),64831=>array(34,-158,409,578),65010=>array(24,0,841,586),65152=>array(23,0,367,366),65153=>array(23,0,148,679),65154=>array(12,0,201,755),65155=>array(18,0,133,744),65156=>array(18,0,199,822),65157=>array(38,-147,339,583),65158=>array(38,-147,386,581),65159=>array(19,-144,139,586),65160=>array(22,-144,201,586),65161=>array(25,-147,462,477),65162=>array(14,-147,503,419),65163=>array(-5,0,196,552),65164=>array(-5,0,262,557),65165=>array(24,0,139,586),65166=>array(24,0,201,586),65167=>array(24,-155,777,391),65168=>array(24,-154,824,391),65169=>array(-5,-154,196,391),65170=>array(-5,-154,262,391),65171=>array(28,0,424,567),65172=>array(23,0,473,567),65173=>array(24,0,777,567),65174=>array(24,0,824,567),65175=>array(-5,0,250,567),65176=>array(-5,0,316,567),65177=>array(24,0,777,714),65178=>array(24,0,824,688),65179=>array(-5,0,245,685),65180=>array(-5,0,306,685),65181=>array(37,-151,419,386),65182=>array(37,-148,456,386),65183=>array(-10,-154,401,386),65184=>array(-10,-154,458,386),65185=>array(37,-147,415,386),65186=>array(37,-147,456,386),65187=>array(-9,0,402,386),65188=>array(-10,0,458,386),65189=>array(37,-147,415,567),65190=>array(36,-147,454,567),65191=>array(-10,0,401,567),65192=>array(-10,0,458,567),65193=>array(23,0,399,402),65194=>array(22,0,438,402),65195=>array(21,0,396,567),65196=>array(21,0,437,567),65197=>array(0,-147,190,391),65198=>array(0,-147,238,391),65199=>array(0,-147,190,567),65200=>array(0,-147,238,567),65201=>array(32,-147,987,391),65202=>array(32,-147,1044,391),65203=>array(-5,0,733,391),65204=>array(-5,0,784,391),65205=>array(30,-147,986,685),65206=>array(32,-147,1044,685),65207=>array(-5,0,733,685),65208=>array(-7,0,783,685),65209=>array(32,-147,917,391),65210=>array(32,-147,962,391),65211=>array(-5,0,751,391),65212=>array(-5,0,796,391),65213=>array(34,-147,918,567),65214=>array(32,-147,962,567),65215=>array(-5,0,751,567),65216=>array(-5,0,796,567),65217=>array(14,0,599,586),65218=>array(19,0,655,586),65219=>array(-5,0,584,586),65220=>array(-7,0,653,586),65221=>array(17,0,601,586),65222=>array(19,0,655,586),65223=>array(-5,0,584,586),65224=>array(-6,0,654,586),65225=>array(34,-147,409,391),65226=>array(37,-147,446,399),65227=>array(-5,0,357,391),65228=>array(-5,0,433,399),65229=>array(34,-147,409,567),65230=>array(37,-147,446,567),65231=>array(-5,0,357,567),65232=>array(-5,0,433,567),65233=>array(27,0,736,567),65234=>array(26,0,788,567),65235=>array(-4,0,392,567),65236=>array(-4,0,434,567),65237=>array(27,-147,532,567),65238=>array(27,-147,580,567),65239=>array(-4,0,392,567),65240=>array(-4,0,434,567),65241=>array(24,0,777,586),65242=>array(24,0,824,586),65243=>array(-6,0,522,586),65244=>array(-7,0,553,586),65245=>array(32,-147,537,586),65246=>array(32,-147,596,586),65247=>array(-5,0,172,586),65248=>array(-5,0,262,586),65249=>array(9,-294,381,391),65250=>array(6,-294,414,391),65251=>array(-3,-93,324,391),65252=>array(-3,-93,361,391),65253=>array(32,-147,502,567),65254=>array(30,-147,557,567),65255=>array(-5,0,196,567),65256=>array(-5,0,257,567),65257=>array(29,0,425,393),65258=>array(24,0,474,393),65259=>array(-6,0,491,391),65260=>array(-6,0,523,391),65261=>array(36,-147,338,391),65262=>array(36,-147,384,391),65263=>array(25,-147,462,391),65264=>array(13,-147,502,264),65265=>array(25,-298,462,391),65266=>array(13,-298,502,264),65267=>array(-5,-154,248,391),65268=>array(-5,-154,306,391),65269=>array(29,0,484,586),65270=>array(29,0,544,586),65271=>array(29,0,484,586),65272=>array(29,0,544,586),65273=>array(29,-146,484,586),65274=>array(29,-145,544,586),65275=>array(29,0,484,586),65276=>array(29,0,544,586),65535=>array(33,0,300,667)); +$cw=array(0=>0,12=>318,13=>332,14=>212,32=>278,33=>278,34=>354,35=>556,36=>556,37=>888,38=>667,39=>191,40=>332,41=>332,42=>388,43=>584,44=>278,45=>332,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1014,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>832,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>468,95=>556,96=>332,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>832,110=>556,111=>556,112=>556,113=>556,114=>332,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>332,169=>737,170=>370,171=>556,172=>584,173=>332,174=>737,175=>332,176=>606,177=>584,178=>351,179=>351,180=>332,181=>574,182=>537,183=>278,184=>332,185=>351,186=>364,187=>556,188=>868,189=>868,190=>868,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>888,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>554,255=>500,256=>667,257=>556,258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,290=>778,291=>697,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278,298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>700,307=>374,308=>500,309=>222,310=>667,311=>500,312=>500,313=>556,314=>222,315=>556,316=>222,317=>556,318=>387,319=>556,320=>500,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>722,330=>722,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,338=>1000,339=>944,340=>722,341=>332,342=>722,343=>332,344=>722,345=>332,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,352=>667,353=>500,354=>611,355=>278,356=>611,357=>442,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,374=>667,375=>500,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>278,384=>556,385=>854,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>500,393=>722,394=>898,395=>667,396=>556,397=>556,398=>667,399=>722,400=>667,401=>611,402=>278,403=>778,404=>667,405=>888,406=>278,407=>332,408=>667,409=>500,410=>332,411=>560,412=>832,413=>722,414=>556,415=>778,416=>778,417=>556,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611,426=>332,427=>278,428=>611,429=>278,430=>611,431=>722,432=>556,433=>778,434=>722,435=>722,436=>556,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556,448=>260,449=>370,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444,458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>888,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>500,496=>222,497=>1332,498=>1222,499=>1056,500=>778,501=>556,504=>722,505=>556,506=>667,507=>556,508=>1000,509=>888,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>332,530=>1082,531=>332,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611,539=>278,542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667,553=>556,554=>778,555=>556,556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667,563=>500,1548=>202,1563=>202,1567=>402,1569=>399,1570=>173,1571=>166,1572=>371,1573=>171,1574=>486,1575=>171,1576=>806,1577=>459,1578=>806,1579=>808,1580=>439,1581=>438,1582=>438,1583=>414,1584=>413,1585=>223,1586=>221,1587=>1024,1588=>1022,1589=>953,1590=>951,1591=>637,1592=>637,1593=>438,1594=>443,1600=>147,1601=>776,1602=>561,1603=>808,1604=>565,1605=>409,1606=>536,1607=>459,1608=>369,1609=>495,1610=>494,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>467,1633=>391,1634=>467,1635=>467,1636=>467,1637=>467,1638=>467,1639=>467,1640=>467,1641=>467,1642=>508,1645=>332,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>832,7743=>832,7744=>832,7745=>832,7746=>832,7747=>832,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>332,7770=>722,7771=>332,7772=>722,7773=>332,7774=>722,7775=>332,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>778,7899=>556,7900=>778,7901=>556,7902=>778,7903=>556,7904=>778,7905=>556,7906=>778,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>722,7913=>556,7914=>722,7915=>556,7916=>722,7917=>556,7918=>722,7919=>556,7920=>722,7921=>556,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,8204=>0,8205=>0,8206=>0,8207=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,64256=>407,64257=>366,64258=>366,64259=>569,64260=>569,64261=>407,64262=>569,64606=>0,64607=>0,64608=>0,64609=>0,64610=>0,64611=>0,64830=>457,64831=>457,65010=>879,65152=>403,65153=>174,65154=>196,65155=>169,65156=>192,65157=>362,65158=>377,65159=>169,65160=>193,65161=>491,65162=>488,65163=>244,65164=>244,65165=>173,65166=>192,65167=>810,65168=>806,65169=>244,65170=>251,65171=>461,65172=>462,65173=>810,65174=>807,65175=>292,65176=>293,65177=>813,65178=>807,65179=>277,65180=>294,65181=>437,65182=>451,65183=>439,65184=>441,65185=>439,65186=>449,65187=>441,65188=>441,65189=>439,65190=>446,65191=>439,65192=>441,65193=>418,65194=>427,65195=>415,65196=>426,65197=>226,65198=>224,65199=>222,65200=>224,65201=>1024,65202=>1022,65203=>757,65204=>770,65205=>1023,65206=>1025,65207=>756,65208=>770,65209=>946,65210=>948,65211=>782,65212=>786,65213=>956,65214=>953,65215=>779,65216=>787,65217=>633,65218=>648,65219=>613,65220=>643,65221=>641,65222=>643,65223=>613,65224=>646,65225=>441,65226=>433,65227=>373,65228=>423,65229=>437,65230=>438,65231=>379,65232=>425,65233=>762,65234=>770,65235=>416,65236=>418,65237=>563,65238=>568,65239=>426,65240=>423,65241=>808,65242=>812,65243=>558,65244=>545,65245=>564,65246=>585,65247=>207,65248=>253,65249=>407,65250=>408,65251=>352,65252=>354,65253=>537,65254=>541,65255=>244,65256=>244,65257=>452,65258=>463,65259=>512,65260=>516,65261=>366,65262=>368,65263=>487,65264=>488,65265=>491,65266=>486,65267=>293,65268=>294,65269=>514,65270=>527,65271=>518,65272=>522,65273=>512,65274=>536,65275=>514,65276=>522,65535=>367); +// --- EOF --- diff --git a/tcpdf/fonts/aealarabiya.z b/tcpdf/fonts/aealarabiya.z new file mode 100644 index 0000000..653d826 Binary files /dev/null and b/tcpdf/fonts/aealarabiya.z differ diff --git a/tcpdf/fonts/aefurat.ctg.z b/tcpdf/fonts/aefurat.ctg.z new file mode 100644 index 0000000..0df3649 Binary files /dev/null and b/tcpdf/fonts/aefurat.ctg.z differ diff --git a/tcpdf/fonts/aefurat.php b/tcpdf/fonts/aefurat.php new file mode 100644 index 0000000..2610ed1 --- /dev/null +++ b/tcpdf/fonts/aefurat.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='Furat'; +$up=-136; +$ut=64; +$dw=367; +$diff=''; +$originalsize=171060; +$enc=''; +$file='aefurat.z'; +$ctg='aefurat.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-272 -501 1319 1114]','ItalicAngle'=>0,'Ascent'=>1162,'Descent'=>-508,'Leading'=>200,'CapHeight'=>662,'XHeight'=>450,'StemV'=>39,'StemH'=>17,'AvgWidth'=>401,'MaxWidth'=>1332,'MissingWidth'=>367); +$cbbox=array(33=>array(130,-9,237,676),34=>array(77,431,331,676),35=>array(6,0,496,662),36=>array(44,-87,457,727),37=>array(61,-13,772,676),38=>array(42,-13,750,676),39=>array(48,431,133,676),40=>array(48,-177,304,676),41=>array(29,-177,286,676),42=>array(69,266,432,676),43=>array(30,0,534,506),44=>array(56,-141,194,102),45=>array(39,194,286,257),46=>array(70,-11,181,100),47=>array(-9,-14,287,676),48=>array(24,-14,476,676),49=>array(111,0,394,676),50=>array(30,0,474,676),51=>array(43,-14,432,676),52=>array(12,0,472,676),53=>array(32,-14,438,688),54=>array(34,-14,468,684),55=>array(20,-8,449,662),56=>array(56,-14,446,676),57=>array(30,-22,459,676),58=>array(81,-11,192,459),59=>array(80,-141,219,459),60=>array(28,-10,536,516),61=>array(30,120,534,386),62=>array(28,-10,536,516),63=>array(68,-8,414,676),64=>array(116,-14,809,676),65=>array(14,0,706,674),66=>array(17,0,593,662),67=>array(28,-14,633,676),68=>array(16,0,686,662),69=>array(12,0,597,662),70=>array(12,0,546,662),71=>array(32,-14,709,676),72=>array(19,0,702,662),73=>array(18,0,314,662),74=>array(10,-14,370,662),75=>array(34,0,723,662),76=>array(12,0,598,662),77=>array(12,0,863,662),78=>array(12,-11,707,662),79=>array(34,-14,688,676),80=>array(16,0,542,662),81=>array(34,-178,701,676),82=>array(17,0,659,662),83=>array(42,-14,491,676),84=>array(17,0,593,662),85=>array(14,-14,706,662),86=>array(16,-11,697,662),87=>array(6,-11,932,662),88=>array(10,0,704,662),89=>array(22,0,703,662),90=>array(9,0,597,662),91=>array(88,-156,299,662),92=>array(-9,-14,287,676),93=>array(34,-156,246,662),94=>array(24,297,446,662),95=>array(0,-126,500,-74),96=>array(19,507,242,678),97=>array(37,-10,442,460),98=>array(3,-10,468,683),99=>array(26,-10,412,460),100=>array(27,-10,491,683),101=>array(26,-10,424,460),102=>array(20,0,383,683),103=>array(28,-218,470,460),104=>array(9,0,487,683),105=>array(16,0,253,683),106=>array(-70,-218,194,683),107=>array(7,0,506,683),108=>array(19,0,257,683),109=>array(16,0,774,460),110=>array(16,0,486,460),111=>array(29,-10,470,460),112=>array(6,-217,470,460),113=>array(24,-217,488,461),114=>array(6,0,334,460),115=>array(51,-10,348,459),116=>array(13,-10,279,579),117=>array(9,-10,479,450),118=>array(19,-14,477,450),119=>array(21,-14,694,450),120=>array(17,0,479,450),121=>array(14,-218,474,450),122=>array(27,0,418,450),123=>array(100,-181,350,680),124=>array(67,-14,133,676),125=>array(130,-181,380,680),126=>array(40,186,502,320),160=>array(0,0,0,0),161=>array(97,-218,204,469),162=>array(53,-138,448,579),163=>array(12,-8,490,676),164=>array(-22,58,522,602),165=>array(-53,0,512,662),166=>array(67,-14,133,676),167=>array(70,-148,426,676),168=>array(18,523,316,622),169=>array(38,-14,722,676),170=>array(4,394,270,676),171=>array(42,33,456,416),172=>array(30,108,534,386),173=>array(39,194,286,257),174=>array(38,-14,722,676),175=>array(11,547,322,601),176=>array(57,390,343,676),177=>array(30,0,534,568),178=>array(1,270,296,676),179=>array(14,262,291,676),180=>array(93,507,317,678),181=>array(59,-224,514,451),182=>array(-22,-154,450,662),183=>array(70,199,181,310),184=>array(52,-214,261,0),185=>array(57,270,248,676),186=>array(6,394,304,676),187=>array(44,33,458,416),188=>array(37,-14,718,676),189=>array(31,-14,746,676),190=>array(14,-14,718,676),191=>array(30,-218,376,468),192=>array(14,0,706,890),193=>array(14,0,706,890),194=>array(14,0,706,886),195=>array(14,0,706,850),196=>array(14,0,706,836),197=>array(14,0,706,914),198=>array(0,0,863,662),199=>array(28,-214,633,676),200=>array(12,0,597,890),201=>array(12,0,597,890),202=>array(12,0,597,886),203=>array(12,0,597,834),204=>array(18,0,314,890),205=>array(18,0,317,890),206=>array(11,0,322,886),207=>array(18,0,316,836),208=>array(16,0,686,662),209=>array(12,-11,707,850),210=>array(34,-14,688,888),211=>array(34,-14,688,890),212=>array(34,-14,688,886),213=>array(34,-14,688,850),214=>array(34,-14,688,836),215=>array(38,8,527,497),216=>array(34,-80,688,734),217=>array(14,-14,706,890),218=>array(14,-14,706,890),219=>array(14,-14,706,886),220=>array(14,-14,706,834),221=>array(22,0,703,890),222=>array(16,0,542,662),223=>array(12,-9,468,683),224=>array(37,-10,442,678),225=>array(37,-10,442,678),226=>array(37,-10,442,674),227=>array(37,-10,442,638),228=>array(37,-10,442,619),229=>array(37,-10,442,718),230=>array(38,-10,632,460),231=>array(26,-214,412,460),232=>array(26,-10,424,678),233=>array(26,-10,424,678),234=>array(26,-10,424,674),235=>array(26,-10,424,621),236=>array(-8,0,253,678),237=>array(16,0,291,678),238=>array(-16,0,296,674),239=>array(11,0,269,622),240=>array(29,-10,471,686),241=>array(16,0,486,638),242=>array(29,-10,470,678),243=>array(29,-10,470,678),244=>array(29,-10,470,674),245=>array(29,-10,470,637),246=>array(29,-10,470,619),247=>array(30,-10,534,516),248=>array(29,-112,470,551),249=>array(9,-10,479,678),250=>array(9,-10,479,678),251=>array(9,-10,479,674),252=>array(9,-10,479,621),253=>array(14,-218,474,678),254=>array(6,-217,470,683),255=>array(14,-218,474,625),256=>array(14,0,706,791),257=>array(37,-10,442,574),258=>array(14,0,706,893),259=>array(37,-10,442,677),260=>array(14,-166,787,674),261=>array(37,-166,444,460),262=>array(28,-14,633,890),263=>array(26,-10,412,678),264=>array(28,-14,633,886),265=>array(26,-10,412,674),266=>array(28,-14,633,836),267=>array(26,-10,412,622),268=>array(28,-14,633,886),269=>array(26,-10,412,674),270=>array(16,0,686,887),271=>array(27,-10,599,683),272=>array(16,0,686,662),273=>array(27,-10,500,683),274=>array(12,0,597,791),275=>array(26,-10,424,574),276=>array(12,0,597,876),277=>array(26,-10,424,677),278=>array(12,0,597,836),279=>array(26,-10,424,622),280=>array(12,-166,613,662),281=>array(26,-166,424,460),282=>array(12,0,597,886),283=>array(26,-10,424,675),284=>array(32,-14,709,884),285=>array(28,-218,470,674),286=>array(32,-14,709,874),287=>array(28,-218,470,665),288=>array(32,-14,709,836),289=>array(28,-218,470,619),290=>array(32,-281,709,676),291=>array(28,-218,470,736),292=>array(19,0,702,903),293=>array(9,0,487,890),294=>array(19,0,702,662),295=>array(9,0,534,683),296=>array(1,0,331,842),297=>array(-28,0,301,626),298=>array(11,0,322,791),299=>array(-19,0,292,574),300=>array(18,0,314,893),301=>array(-4,0,277,677),302=>array(18,-166,397,662),303=>array(16,-166,278,683),304=>array(18,0,314,836),305=>array(16,0,253,460),306=>array(18,-14,703,662),307=>array(16,-218,472,683),308=>array(10,-14,382,903),309=>array(-51,-159,306,687),310=>array(34,-275,723,662),311=>array(7,-275,506,683),312=>array(7,0,490,460),313=>array(12,0,598,907),314=>array(19,0,294,894),315=>array(12,-275,598,662),316=>array(19,-275,257,683),317=>array(12,0,598,676),318=>array(19,0,348,683),319=>array(12,0,721,662),320=>array(19,0,415,683),321=>array(12,0,598,662),322=>array(19,0,259,683),323=>array(12,-11,707,892),324=>array(16,0,486,679),325=>array(12,-256,707,662),326=>array(16,-255,486,460),327=>array(12,-11,707,884),328=>array(16,0,486,675),329=>array(4,0,535,738),330=>array(12,-218,707,662),331=>array(16,-218,424,460),332=>array(34,-14,688,791),333=>array(29,-10,470,574),334=>array(34,-14,688,893),335=>array(29,-10,470,677),336=>array(34,-14,688,890),337=>array(29,-10,470,680),338=>array(30,-6,886,668),339=>array(30,-10,690,460),340=>array(17,0,659,907),341=>array(6,0,334,679),342=>array(17,-275,659,662),343=>array(6,-275,334,460),344=>array(17,0,659,886),345=>array(6,0,334,674),346=>array(42,-14,491,892),347=>array(51,-10,367,680),348=>array(42,-14,491,886),349=>array(37,-10,348,675),350=>array(42,-214,491,676),351=>array(51,-214,348,459),352=>array(42,-14,491,887),353=>array(38,-10,350,676),354=>array(17,-214,593,662),355=>array(13,-214,279,579),356=>array(17,0,593,888),357=>array(13,-10,300,676),358=>array(17,0,593,662),359=>array(13,-10,279,579),360=>array(14,-14,706,842),361=>array(9,-10,479,626),362=>array(14,-14,706,791),363=>array(9,-10,479,574),364=>array(14,-14,706,893),365=>array(9,-10,479,677),366=>array(14,-14,706,934),367=>array(9,-10,479,718),368=>array(14,-14,706,892),369=>array(9,-10,479,680),370=>array(14,-166,706,662),371=>array(9,-166,500,450),372=>array(6,-11,932,887),373=>array(21,-14,694,676),374=>array(22,0,703,887),375=>array(14,-218,474,675),376=>array(22,0,703,836),377=>array(9,0,597,891),378=>array(27,0,418,679),379=>array(9,0,597,836),380=>array(27,0,418,619),381=>array(9,0,597,886),382=>array(27,0,418,674),383=>array(20,0,383,683),384=>array(-1,-10,468,683),385=>array(-104,0,593,662),386=>array(39,0,608,686),387=>array(-10,-10,468,662),388=>array(3,0,604,683),389=>array(-17,-10,468,683),390=>array(28,-14,633,676),391=>array(28,-14,806,822),392=>array(26,-10,554,570),393=>array(16,0,686,662),394=>array(-100,0,686,662),395=>array(39,0,608,686),396=>array(27,-10,503,662),397=>array(31,-224,477,459),398=>array(12,0,597,662),399=>array(37,-14,688,676),400=>array(28,-14,484,702),401=>array(-67,-204,546,662),402=>array(-76,-218,384,683),403=>array(32,-14,816,822),404=>array(23,-14,643,662),405=>array(9,-9,709,683),406=>array(19,-10,326,683),407=>array(1,0,331,662),408=>array(34,0,794,664),409=>array(7,0,506,683),410=>array(1,0,281,683),411=>array(28,-10,458,672),412=>array(10,-10,931,662),413=>array(-70,-218,707,662),414=>array(16,-200,486,460),415=>array(30,-12,714,673),416=>array(34,-14,708,796),417=>array(29,-10,536,552),418=>array(34,-14,1022,676),419=>array(29,-217,774,460),420=>array(-106,0,542,662),421=>array(6,-217,470,683),422=>array(6,-113,659,662),423=>array(42,-14,491,676),424=>array(51,-10,348,459),425=>array(14,0,562,661),426=>array(22,-190,576,683),427=>array(13,-218,279,579),428=>array(-9,0,593,662),429=>array(-12,-10,350,683),430=>array(17,-204,593,662),431=>array(14,-14,826,848),432=>array(9,-10,538,636),433=>array(33,-13,713,663),434=>array(14,-14,688,662),435=>array(17,0,803,666),436=>array(14,-218,651,459),437=>array(9,0,597,662),438=>array(27,0,418,450),439=>array(14,-14,496,676),440=>array(14,-14,496,676),441=>array(6,-209,362,450),442=>array(46,-228,434,450),443=>array(30,0,474,676),444=>array(31,-14,580,662),445=>array(26,-183,404,477),446=>array(26,-10,379,579),447=>array(6,-217,472,460),448=>array(67,-14,133,676),449=>array(67,-14,333,676),450=>array(47,-108,553,614),451=>array(130,-9,237,676),452=>array(16,0,1319,886),453=>array(16,0,1140,674),454=>array(27,-10,918,683),455=>array(12,-14,981,662),456=>array(12,-218,804,683),457=>array(19,-218,472,683),458=>array(12,-14,1092,662),459=>array(12,-218,916,683),460=>array(16,-218,694,683),461=>array(14,0,706,886),462=>array(37,-10,442,674),463=>array(8,0,320,886),464=>array(-19,-2,292,672),465=>array(34,-14,688,886),466=>array(29,-10,470,674),467=>array(14,-14,706,882),468=>array(9,-10,479,674),469=>array(14,-14,706,913),470=>array(9,-10,479,721),471=>array(14,-14,706,931),472=>array(9,-10,479,788),473=>array(14,-14,706,963),474=>array(9,-10,479,784),475=>array(14,-14,706,939),476=>array(9,-10,479,788),477=>array(18,-10,417,460),478=>array(14,0,706,834),479=>array(37,-10,442,721),480=>array(14,0,706,913),481=>array(37,-10,442,721),482=>array(0,0,863,813),483=>array(38,-10,632,460),484=>array(32,-14,709,676),485=>array(11,-218,489,460),486=>array(32,-14,709,886),487=>array(28,-218,470,674),488=>array(34,0,723,886),489=>array(7,0,506,886),490=>array(34,-14,688,676),491=>array(29,-10,470,460),492=>array(34,-14,688,813),493=>array(29,-10,470,601),494=>array(14,-14,496,903),495=>array(6,-209,362,674),496=>array(-70,-218,292,672),497=>array(16,0,1319,662),498=>array(16,0,1140,662),499=>array(27,-10,918,683),500=>array(32,-14,709,676),501=>array(28,-218,470,678),502=>array(19,-14,917,662),504=>array(12,-11,707,890),505=>array(16,0,486,678),506=>array(14,0,706,914),507=>array(37,-10,442,718),508=>array(0,0,863,890),509=>array(38,-10,632,678),510=>array(34,-80,688,734),511=>array(29,-112,470,678),512=>array(14,0,706,890),513=>array(27,-10,442,678),514=>array(14,0,706,876),515=>array(37,-10,442,664),516=>array(12,0,597,890),517=>array(24,-10,424,678),518=>array(12,0,597,876),519=>array(26,-10,424,664),520=>array(-77,0,314,890),521=>array(-71,0,309,678),522=>array(18,0,314,876),523=>array(-4,0,277,664),524=>array(34,-14,688,890),525=>array(29,-10,470,678),526=>array(34,-14,688,876),527=>array(29,-10,470,664),528=>array(17,0,659,890),529=>array(-53,0,334,678),530=>array(17,0,659,876),531=>array(6,0,334,664),532=>array(14,-14,706,890),533=>array(9,-10,479,678),534=>array(14,-14,706,876),535=>array(9,-10,479,664),536=>array(42,-281,491,676),537=>array(51,-281,348,459),538=>array(17,-281,593,662),539=>array(13,-281,279,579),542=>array(19,0,702,886),543=>array(-6,0,487,886),550=>array(14,0,706,834),551=>array(37,-10,442,622),552=>array(12,-214,597,662),553=>array(26,-214,424,460),554=>array(34,-14,688,913),555=>array(29,-10,470,721),556=>array(34,-14,688,923),557=>array(29,-10,470,721),558=>array(34,-14,688,834),559=>array(29,-10,470,622),560=>array(34,-14,688,913),561=>array(29,-10,470,721),562=>array(22,0,703,813),563=>array(14,-218,474,601),565=>array(16,-230,578,460),567=>array(-70,-218,193,460),1548=>array(71,38,208,312),1563=>array(73,11,211,442),1567=>array(36,0,287,536),1569=>array(30,-59,264,213),1570=>array(21,-59,302,869),1571=>array(41,-58,259,760),1572=>array(59,-267,402,422),1573=>array(57,-292,288,738),1574=>array(42,-163,599,418),1575=>array(57,-58,259,738),1576=>array(38,-198,751,328),1577=>array(46,2,292,584),1578=>array(37,1,751,433),1579=>array(39,2,753,521),1580=>array(41,-440,563,411),1581=>array(34,-437,557,414),1582=>array(44,-437,567,553),1583=>array(51,1,364,454),1584=>array(43,0,357,647),1585=>array(48,-269,408,313),1586=>array(46,-269,406,513),1587=>array(36,-229,832,302),1588=>array(47,-225,844,551),1589=>array(46,-225,1032,304),1590=>array(35,-230,1022,434),1591=>array(41,0,698,738),1592=>array(40,-4,697,734),1593=>array(33,-438,462,420),1594=>array(34,-438,462,599),1600=>array(0,0,440,88),1601=>array(30,1,751,578),1602=>array(38,-228,534,454),1603=>array(37,1,744,739),1604=>array(43,-228,542,738),1605=>array(47,-412,354,242),1606=>array(46,-227,550,372),1607=>array(35,-2,282,411),1608=>array(39,-270,382,256),1609=>array(37,-164,593,417),1610=>array(44,-329,600,418),1611=>array(18,688,216,925),1612=>array(11,682,246,921),1613=>array(4,-501,202,-263),1614=>array(18,695,216,847),1615=>array(17,687,219,937),1616=>array(2,-427,200,-276),1617=>array(57,921,265,1114),1618=>array(6,731,158,914),1632=>array(157,109,292,284),1633=>array(143,-8,292,496),1634=>array(74,-8,358,496),1635=>array(46,-8,380,496),1636=>array(95,0,348,496),1637=>array(82,0,354,496),1638=>array(63,0,373,496),1639=>array(29,0,384,496),1640=>array(31,0,386,496),1641=>array(74,0,354,496),1642=>array(33,0,428,664),1645=>array(19,109,368,441),7680=>array(14,-238,706,674),7681=>array(37,-249,442,460),7682=>array(17,0,593,801),7683=>array(3,-10,468,825),7684=>array(17,-139,593,662),7685=>array(3,-149,468,683),7686=>array(17,-94,593,662),7687=>array(3,-104,468,683),7688=>array(28,-214,633,897),7689=>array(26,-214,412,661),7690=>array(16,0,686,801),7691=>array(27,-10,491,683),7692=>array(16,-139,686,662),7693=>array(27,-149,491,683),7694=>array(16,-94,686,662),7695=>array(27,-104,491,683),7696=>array(16,-214,686,662),7697=>array(27,-224,491,683),7698=>array(16,-219,686,662),7699=>array(27,-229,491,683),7700=>array(12,0,597,1024),7701=>array(26,-10,424,812),7702=>array(12,0,597,1024),7703=>array(26,-10,424,812),7704=>array(12,-219,597,662),7705=>array(26,-229,424,460),7706=>array(12,-146,597,662),7707=>array(26,-156,424,460),7708=>array(12,-214,597,858),7709=>array(26,-214,424,647),7710=>array(12,0,546,801),7711=>array(20,0,383,825),7712=>array(32,-14,709,780),7713=>array(28,-218,470,544),7714=>array(19,0,702,801),7715=>array(9,0,487,825),7716=>array(19,-139,702,662),7717=>array(9,-139,487,683),7718=>array(19,0,702,801),7719=>array(9,0,487,825),7720=>array(19,-214,702,662),7721=>array(9,-214,487,683),7722=>array(19,-197,702,662),7723=>array(9,-197,487,683),7724=>array(1,-146,331,662),7725=>array(-31,-146,298,683),7726=>array(18,0,316,1044),7727=>array(11,0,269,832),7728=>array(34,0,723,872),7729=>array(7,0,506,897),7730=>array(34,-139,723,662),7731=>array(7,-139,506,683),7732=>array(34,-94,723,662),7733=>array(7,-94,506,683),7734=>array(12,-139,598,662),7735=>array(19,-139,257,683),7736=>array(12,-139,598,756),7737=>array(-17,-139,294,780),7738=>array(12,-94,598,662),7739=>array(-17,-94,294,683),7740=>array(12,-219,598,662),7741=>array(-17,-219,294,683),7742=>array(12,0,863,872),7743=>array(16,0,774,661),7744=>array(12,0,863,801),7745=>array(16,0,774,589),7746=>array(12,-139,863,662),7747=>array(16,-139,774,460),7748=>array(12,-11,707,801),7749=>array(16,0,486,589),7750=>array(12,-151,707,662),7751=>array(16,-139,486,460),7752=>array(12,-106,707,662),7753=>array(16,-94,486,460),7754=>array(12,-231,707,662),7755=>array(16,-219,486,460),7756=>array(34,-14,688,1061),7757=>array(29,-10,470,848),7758=>array(34,-14,688,989),7759=>array(29,-10,470,777),7760=>array(34,-14,688,1024),7761=>array(29,-10,470,812),7762=>array(34,-14,688,1024),7763=>array(29,-10,470,812),7764=>array(16,0,542,872),7765=>array(6,-217,470,661),7766=>array(16,0,542,801),7767=>array(6,-217,470,589),7768=>array(17,0,659,801),7769=>array(6,0,334,589),7770=>array(17,-139,659,662),7771=>array(6,-139,334,460),7772=>array(17,-139,659,756),7773=>array(6,-139,334,544),7774=>array(17,-94,659,662),7775=>array(6,-94,334,460),7776=>array(42,-14,491,825),7777=>array(51,-10,348,589),7778=>array(42,-153,491,676),7779=>array(51,-149,348,459),7780=>array(42,-14,491,1029),7781=>array(51,-10,367,825),7782=>array(42,-14,491,1025),7783=>array(38,-10,350,825),7784=>array(42,-153,491,825),7785=>array(51,-149,348,589),7786=>array(17,0,593,801),7787=>array(13,-10,279,718),7788=>array(17,-139,593,662),7789=>array(13,-149,279,579),7790=>array(17,-94,593,662),7791=>array(-9,-104,302,579),7792=>array(17,-219,593,662),7793=>array(-9,-229,302,579),7794=>array(14,-153,706,662),7795=>array(9,-149,479,450),7796=>array(14,-160,706,662),7797=>array(9,-156,479,450),7798=>array(14,-233,706,662),7799=>array(9,-229,479,450),7800=>array(14,-14,706,1061),7801=>array(9,-10,479,848),7802=>array(14,-14,706,952),7803=>array(9,-10,479,740),7804=>array(16,-11,697,808),7805=>array(19,-14,477,596),7806=>array(16,-151,697,662),7807=>array(19,-153,477,450),7808=>array(6,-11,932,872),7809=>array(21,-14,694,661),7810=>array(6,-11,932,872),7811=>array(21,-14,694,661),7812=>array(6,-11,932,801),7813=>array(21,-14,694,589),7814=>array(6,-11,932,801),7815=>array(21,-14,694,589),7816=>array(6,-151,932,662),7817=>array(21,-153,694,450),7818=>array(10,0,704,801),7819=>array(17,0,479,589),7820=>array(10,0,704,801),7821=>array(17,0,479,589),7822=>array(22,0,703,801),7823=>array(14,-218,474,589),7824=>array(9,0,597,868),7825=>array(27,0,418,657),7826=>array(9,-139,597,662),7827=>array(27,-139,418,450),7828=>array(9,-94,597,662),7829=>array(27,-94,418,450),7830=>array(9,-94,487,683),7831=>array(-3,-10,295,718),7832=>array(21,-14,694,688),7833=>array(14,-218,474,688),7834=>array(37,-10,442,710),7835=>array(20,0,383,825),7840=>array(14,-139,706,674),7841=>array(37,-149,442,460),7842=>array(14,0,706,920),7843=>array(37,-10,442,708),7844=>array(14,0,706,1097),7845=>array(37,-10,442,897),7846=>array(14,0,706,1097),7847=>array(37,-10,442,897),7848=>array(14,0,706,911),7849=>array(37,-10,498,696),7850=>array(14,0,706,1032),7851=>array(37,-10,442,832),7852=>array(14,-139,706,893),7853=>array(37,-149,442,657),7854=>array(14,0,706,1087),7855=>array(37,-10,442,875),7856=>array(14,0,706,1087),7857=>array(37,-10,442,875),7858=>array(14,0,706,1040),7859=>array(37,-10,442,838),7860=>array(14,0,706,1022),7861=>array(37,-10,442,810),7862=>array(14,-139,706,883),7863=>array(37,-149,442,647),7864=>array(12,-139,597,662),7865=>array(26,-149,424,460),7866=>array(12,0,597,920),7867=>array(26,-10,424,708),7868=>array(12,0,597,808),7869=>array(26,-10,424,596),7870=>array(12,0,597,1097),7871=>array(26,-10,424,897),7872=>array(12,0,597,1097),7873=>array(26,-10,424,897),7874=>array(12,0,608,920),7875=>array(26,-10,504,708),7876=>array(12,0,597,1032),7877=>array(26,-10,424,832),7878=>array(12,-139,597,868),7879=>array(26,-149,424,657),7880=>array(-240,0,314,911),7881=>array(-272,0,253,699),7882=>array(18,-139,314,662),7883=>array(16,-139,253,683),7884=>array(34,-153,688,676),7885=>array(29,-149,470,460),7886=>array(34,-14,688,924),7887=>array(29,-10,470,706),7888=>array(34,-14,688,1097),7889=>array(29,-10,470,897),7890=>array(34,-14,688,1097),7891=>array(29,-10,470,897),7892=>array(34,-14,688,924),7893=>array(29,-10,537,706),7894=>array(34,-14,688,1032),7895=>array(29,-10,470,832),7896=>array(34,-153,688,893),7897=>array(29,-149,470,657),7898=>array(34,-14,708,895),7899=>array(29,-10,536,679),7900=>array(34,-14,708,904),7901=>array(29,-10,536,677),7902=>array(34,-14,708,924),7903=>array(29,-10,536,706),7904=>array(34,-14,708,857),7905=>array(29,-10,536,618),7906=>array(34,-173,708,796),7907=>array(29,-169,536,552),7908=>array(14,-153,706,662),7909=>array(9,-149,479,450),7910=>array(14,-14,706,920),7911=>array(9,-10,479,708),7912=>array(14,-14,826,914),7913=>array(9,-10,538,684),7914=>array(14,-14,826,908),7915=>array(9,-10,538,678),7916=>array(14,-14,826,920),7917=>array(9,-10,538,708),7918=>array(14,-14,826,848),7919=>array(9,-10,538,640),7920=>array(14,-173,826,848),7921=>array(9,-169,538,636),7922=>array(22,0,703,872),7923=>array(14,-218,474,661),7924=>array(22,-139,703,662),7925=>array(14,-357,474,450),7926=>array(22,0,703,920),7927=>array(14,-218,474,708),7928=>array(22,0,703,808),7929=>array(14,-218,474,596),8204=>array(-17,0,17,910),8205=>array(-110,0,110,910),8206=>array(-123,0,123,916),8207=>array(-123,0,123,916),8234=>array(-123,-94,123,822),8235=>array(-123,-94,123,822),8236=>array(-111,0,111,910),8237=>array(-123,-94,123,916),8238=>array(-123,-94,123,916),64256=>array(26,0,479,500),64257=>array(22,0,382,500),64258=>array(23,0,382,500),64259=>array(26,0,583,500),64260=>array(26,0,582,500),64262=>array(37,-7,494,512),64830=>array(29,-259,520,689),64831=>array(34,-259,525,689),65010=>array(46,1,664,673),65152=>array(49,-58,283,215),65153=>array(32,-59,314,869),65154=>array(28,0,391,870),65155=>array(41,-58,259,760),65156=>array(41,0,340,760),65157=>array(51,-267,394,422),65158=>array(48,-267,448,422),65159=>array(57,-292,288,738),65160=>array(57,-232,354,738),65161=>array(47,-164,603,417),65162=>array(34,-262,538,202),65163=>array(0,0,214,534),65164=>array(0,0,253,523),65165=>array(57,-58,259,738),65166=>array(57,0,354,738),65167=>array(34,-196,748,331),65168=>array(29,-196,777,330),65169=>array(0,-197,214,329),65170=>array(0,-197,253,329),65171=>array(34,2,281,583),65172=>array(36,1,438,582),65173=>array(42,0,756,432),65174=>array(37,0,784,432),65175=>array(0,0,244,515),65176=>array(0,0,296,515),65177=>array(39,1,753,518),65178=>array(37,0,784,518),65179=>array(0,0,244,601),65180=>array(0,0,293,601),65181=>array(38,-437,561,414),65182=>array(46,-438,568,413),65183=>array(0,-196,551,366),65184=>array(0,-196,539,366),65185=>array(42,-438,564,413),65186=>array(46,-438,568,413),65187=>array(0,0,551,366),65188=>array(0,0,539,366),65189=>array(38,-436,561,554),65190=>array(41,-438,563,551),65191=>array(0,0,551,588),65192=>array(0,0,539,515),65193=>array(47,0,361,454),65194=>array(53,0,401,454),65195=>array(50,0,364,647),65196=>array(48,-1,397,647),65197=>array(47,-268,407,314),65198=>array(38,-267,464,317),65199=>array(49,-272,409,511),65200=>array(43,-267,469,516),65201=>array(38,-228,834,303),65202=>array(43,-228,917,303),65203=>array(0,0,563,303),65204=>array(0,0,640,303),65205=>array(36,-228,832,548),65206=>array(41,-228,914,549),65207=>array(0,0,563,555),65208=>array(0,0,640,555),65209=>array(46,-228,1032,302),65210=>array(41,-228,1085,302),65211=>array(0,0,708,302),65212=>array(0,0,761,302),65213=>array(38,-228,1025,432),65214=>array(41,-228,1085,432),65215=>array(0,0,708,432),65216=>array(0,0,761,432),65217=>array(50,-1,707,738),65218=>array(49,0,729,738),65219=>array(0,0,593,738),65220=>array(0,0,616,738),65221=>array(47,0,704,738),65222=>array(42,0,722,738),65223=>array(0,0,593,738),65224=>array(0,0,616,738),65225=>array(41,-438,469,419),65226=>array(63,-458,496,274),65227=>array(0,0,493,362),65228=>array(0,0,388,281),65229=>array(39,-438,467,599),65230=>array(63,-458,496,516),65231=>array(0,0,493,542),65232=>array(0,0,388,516),65233=>array(42,0,763,578),65234=>array(35,1,792,458),65235=>array(0,0,298,578),65236=>array(0,0,316,458),65237=>array(41,-228,537,454),65238=>array(41,-228,584,454),65239=>array(0,0,298,599),65240=>array(0,0,316,491),65241=>array(38,1,746,739),65242=>array(0,0,768,738),65243=>array(0,0,357,762),65244=>array(0,0,410,762),65245=>array(38,-228,537,738),65246=>array(46,-228,616,738),65247=>array(0,0,220,738),65248=>array(0,0,245,738),65249=>array(48,-413,356,240),65250=>array(48,-416,472,256),65251=>array(0,0,385,256),65252=>array(0,-14,424,256),65253=>array(54,-231,559,367),65254=>array(38,-228,616,370),65255=>array(0,0,214,516),65256=>array(0,0,253,516),65257=>array(35,-2,282,411),65258=>array(42,1,445,413),65259=>array(0,-16,452,522),65260=>array(0,-173,415,373),65261=>array(47,-268,390,259),65262=>array(50,-267,449,259),65263=>array(41,-163,597,419),65264=>array(42,-262,546,182),65265=>array(43,-333,599,414),65266=>array(42,-422,546,183),65267=>array(0,-236,244,329),65268=>array(0,-236,283,329),65269=>array(39,-88,507,752),65270=>array(39,-99,744,779),65271=>array(52,-88,507,792),65272=>array(57,-99,744,788),65273=>array(74,-292,507,749),65274=>array(68,-248,744,736),65275=>array(48,-89,481,748),65276=>array(68,-99,744,736),65535=>array(33,0,300,667)); +$cw=array(0=>0,12=>318,32=>250,33=>332,34=>408,35=>500,36=>500,37=>832,38=>778,39=>180,40=>332,41=>332,42=>500,43=>564,44=>250,45=>332,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722,72=>722,73=>332,74=>388,75=>722,76=>611,77=>888,78=>722,79=>722,80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>332,92=>278,93=>332,94=>468,95=>500,96=>332,97=>444,98=>500,99=>444,100=>500,101=>444,102=>332,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500,112=>500,113=>500,114=>332,115=>388,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541,160=>250,161=>332,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,168=>332,169=>760,170=>276,171=>500,172=>564,173=>332,174=>760,175=>332,176=>400,177=>564,178=>300,179=>300,180=>332,181=>534,182=>452,183=>250,184=>332,185=>300,186=>310,187=>500,188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>888,199=>667,200=>611,201=>611,202=>611,203=>611,204=>332,205=>332,206=>332,207=>332,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722,218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444,226=>444,227=>444,228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>500,255=>500,256=>722,257=>444,258=>722,259=>444,260=>722,261=>444,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,268=>667,269=>444,270=>722,271=>600,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444,278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500,288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>548,296=>332,297=>278,298=>332,299=>278,300=>332,301=>278,302=>332,303=>278,304=>332,305=>278,306=>722,307=>556,308=>388,309=>203,310=>722,311=>500,312=>500,313=>611,314=>278,315=>611,316=>278,317=>611,318=>348,319=>611,320=>444,321=>611,322=>278,323=>722,324=>500,325=>722,326=>500,327=>722,328=>500,329=>556,330=>722,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,338=>888,339=>722,340=>667,341=>332,342=>667,343=>332,344=>667,345=>332,346=>556,347=>388,348=>556,349=>388,350=>556,351=>388,352=>556,353=>388,354=>611,355=>278,356=>611,357=>278,358=>611,359=>278,360=>722,361=>500,362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500,372=>944,373=>722,374=>722,375=>500,376=>722,377=>611,378=>444,379=>611,380=>444,381=>611,382=>444,383=>332,384=>500,385=>667,386=>646,387=>500,388=>646,389=>500,390=>667,391=>667,392=>444,393=>722,394=>722,395=>646,396=>500,397=>534,398=>611,399=>722,400=>518,401=>556,402=>332,403=>722,404=>664,405=>728,406=>332,407=>332,408=>810,409=>500,410=>278,411=>480,412=>944,413=>722,414=>500,415=>726,416=>722,417=>500,418=>1042,419=>778,420=>556,421=>500,422=>667,423=>556,424=>388,425=>627,426=>592,427=>278,428=>611,429=>278,430=>611,431=>722,432=>500,433=>757,434=>722,435=>822,436=>667,437=>611,438=>444,439=>556,440=>556,441=>388,442=>500,443=>500,444=>614,445=>438,446=>421,447=>500,448=>200,449=>400,450=>600,451=>332,452=>1332,453=>1166,454=>944,455=>1000,456=>888,457=>556,458=>1111,459=>1000,460=>778,461=>722,462=>444,463=>332,464=>278,465=>722,466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722,476=>500,477=>444,478=>722,479=>444,480=>722,481=>444,482=>888,483=>667,484=>722,485=>500,486=>722,487=>500,488=>722,489=>500,490=>722,491=>500,492=>722,493=>500,494=>556,495=>388,496=>278,497=>1332,498=>1166,499=>944,500=>722,501=>500,502=>944,504=>722,505=>500,506=>722,507=>444,508=>888,509=>667,510=>722,511=>500,512=>722,513=>444,514=>722,515=>444,516=>611,517=>444,518=>611,519=>444,520=>332,521=>278,522=>332,523=>278,524=>722,525=>500,526=>722,527=>500,528=>667,529=>332,530=>667,531=>332,532=>722,533=>500,534=>722,535=>500,536=>556,537=>388,538=>611,539=>278,542=>722,543=>500,550=>722,551=>444,552=>611,553=>444,554=>722,555=>500,556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>722,563=>500,565=>597,567=>278,1548=>278,1563=>278,1567=>322,1569=>278,1570=>343,1571=>298,1572=>442,1573=>343,1574=>634,1575=>298,1576=>806,1577=>324,1578=>808,1579=>815,1580=>616,1581=>616,1582=>625,1583=>407,1584=>408,1585=>459,1586=>469,1587=>880,1588=>907,1589=>1099,1590=>1077,1591=>750,1592=>755,1593=>522,1594=>529,1600=>439,1601=>806,1602=>584,1603=>782,1604=>589,1605=>413,1606=>623,1607=>332,1608=>435,1609=>634,1610=>634,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>419,1633=>419,1634=>419,1635=>419,1636=>419,1637=>419,1638=>419,1639=>419,1640=>419,1641=>419,1642=>462,1645=>398,7680=>722,7681=>444,7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722,7695=>500,7696=>722,7697=>500,7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>611,7705=>444,7706=>611,7707=>444,7708=>611,7709=>444,7710=>556,7711=>332,7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500,7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>332,7725=>278,7726=>332,7727=>278,7728=>722,7729=>500,7730=>722,7731=>500,7732=>722,7733=>500,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>888,7743=>778,7744=>888,7745=>778,7746=>888,7747=>778,7748=>722,7749=>500,7750=>722,7751=>500,7752=>722,7753=>500,7754=>722,7755=>500,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>556,7765=>500,7766=>556,7767=>500,7768=>667,7769=>332,7770=>667,7771=>332,7772=>667,7773=>332,7774=>667,7775=>332,7776=>556,7777=>388,7778=>556,7779=>388,7780=>556,7781=>388,7782=>556,7783=>388,7784=>556,7785=>388,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500,7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>722,7805=>500,7806=>722,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,7824=>611,7825=>444,7826=>611,7827=>444,7828=>611,7829=>444,7830=>500,7831=>278,7832=>722,7833=>500,7834=>444,7835=>332,7840=>722,7841=>444,7842=>807,7843=>528,7844=>722,7845=>444,7846=>722,7847=>444,7848=>807,7849=>528,7850=>722,7851=>444,7852=>722,7853=>444,7854=>722,7855=>444,7856=>722,7857=>444,7858=>807,7859=>528,7860=>722,7861=>444,7862=>722,7863=>444,7864=>611,7865=>444,7866=>696,7867=>528,7868=>611,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>696,7875=>528,7876=>611,7877=>444,7878=>611,7879=>444,7880=>332,7881=>278,7882=>332,7883=>278,7884=>722,7885=>500,7886=>807,7887=>584,7888=>722,7889=>500,7890=>722,7891=>500,7892=>807,7893=>584,7894=>722,7895=>500,7896=>722,7897=>500,7898=>722,7899=>500,7900=>722,7901=>500,7902=>807,7903=>584,7904=>722,7905=>500,7906=>722,7907=>500,7908=>722,7909=>500,7910=>807,7911=>584,7912=>722,7913=>500,7914=>722,7915=>500,7916=>807,7917=>584,7918=>722,7919=>500,7920=>722,7921=>500,7922=>722,7923=>500,7924=>722,7925=>500,7926=>807,7927=>584,7928=>722,7929=>500,8204=>0,8205=>0,8206=>0,8207=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,64256=>443,64257=>407,64258=>407,64259=>603,64260=>601,64262=>496,64830=>554,64831=>554,65010=>719,65152=>329,65153=>366,65154=>391,65155=>296,65156=>339,65157=>439,65158=>448,65159=>342,65160=>354,65161=>659,65162=>538,65163=>267,65164=>253,65165=>298,65166=>354,65167=>808,65168=>777,65169=>274,65170=>253,65171=>337,65172=>438,65173=>818,65174=>784,65175=>293,65176=>296,65177=>818,65178=>784,65179=>293,65180=>293,65181=>608,65182=>568,65183=>599,65184=>539,65185=>606,65186=>568,65187=>606,65188=>539,65189=>616,65190=>563,65191=>599,65192=>539,65193=>411,65194=>402,65195=>423,65196=>396,65197=>459,65198=>464,65199=>464,65200=>469,65201=>887,65202=>916,65203=>623,65204=>640,65205=>883,65206=>914,65207=>621,65208=>640,65209=>1080,65210=>1084,65211=>772,65212=>761,65213=>1075,65214=>1084,65215=>767,65216=>761,65217=>762,65218=>729,65219=>654,65220=>616,65221=>762,65222=>722,65223=>642,65224=>616,65225=>522,65226=>422,65227=>553,65228=>387,65229=>529,65230=>422,65231=>541,65232=>387,65233=>815,65234=>791,65235=>346,65236=>315,65237=>587,65238=>584,65239=>348,65240=>315,65241=>806,65242=>767,65243=>408,65244=>410,65245=>589,65246=>616,65247=>278,65248=>245,65249=>407,65250=>472,65251=>439,65252=>423,65253=>611,65254=>616,65255=>281,65256=>253,65257=>332,65258=>444,65259=>507,65260=>415,65261=>439,65262=>449,65263=>637,65264=>546,65265=>639,65266=>546,65267=>293,65268=>282,65269=>569,65270=>744,65271=>577,65272=>744,65273=>579,65274=>744,65275=>537,65276=>744,65535=>367); +// --- EOF --- diff --git a/tcpdf/fonts/aefurat.z b/tcpdf/fonts/aefurat.z new file mode 100644 index 0000000..67d0f96 Binary files /dev/null and b/tcpdf/fonts/aefurat.z differ diff --git a/tcpdf/fonts/cid0cs.php b/tcpdf/fonts/cid0cs.php new file mode 100644 index 0000000..cd269d0 --- /dev/null +++ b/tcpdf/fonts/cid0cs.php @@ -0,0 +1,17 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='cidfont0'; +$name='cid0cs'; +$up=-100; +$ut=50; +$dw=1000; +$diff=''; +$originalsize=23275812; +// Chinese Simplified +$enc='UniGB-UTF16-H'; +$cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'GB1','Supplement'=>2); +include(dirname(__FILE__).'/uni2cid_ag15.php'); +$desc=array('Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'Ascent'=>1069,'Descent'=>-271,'Leading'=>0,'CapHeight'=>716,'XHeight'=>518,'StemV'=>34,'StemH'=>15,'AvgWidth'=>441,'MaxWidth'=>2259,'MissingWidth'=>1000); +$cbbox=array(0=>array(125,0,875,750),33=>array(85,0,194,716),34=>array(41,462,313,716),35=>array(11,-12,545,728),36=>array(38,-103,511,782),37=>array(73,-27,819,728),38=>array(43,-17,644,728),39=>array(45,462,145,716),40=>array(60,-210,297,728),41=>array(36,-210,273,728),42=>array(33,423,356,728),43=>array(55,116,529,590),44=>array(84,-141,190,100),45=>array(32,215,301,303),46=>array(89,0,189,100),47=>array(0,-24,278,716),48=>array(45,-12,511,719),49=>array(111,0,375,719),50=>array(31,0,505,719),51=>array(44,-12,513,719),52=>array(15,0,510,716),53=>array(42,-12,516,706),54=>array(42,-12,514,719),55=>array(48,0,511,706),56=>array(42,-12,513,719),57=>array(43,-12,513,719),58=>array(90,0,190,518),59=>array(84,-141,190,518),60=>array(55,111,529,595),61=>array(55,203,529,503),62=>array(55,111,529,595),63=>array(46,0,508,728),64=>array(56,-210,981,729),65=>array(-1,0,668,716),66=>array(74,0,615,716),67=>array(51,-12,683,728),68=>array(80,0,672,716),69=>array(79,0,614,716),70=>array(80,0,563,716),71=>array(52,-12,714,728),72=>array(80,0,642,716),73=>array(92,0,187,716),74=>array(27,-12,420,716),75=>array(73,0,665,716),76=>array(75,0,523,716),77=>array(76,0,757,716),78=>array(79,0,642,716),79=>array(47,-12,732,728),80=>array(77,0,623,716),81=>array(47,-56,745,728),82=>array(80,0,711,716),83=>array(45,-12,615,728),84=>array(22,0,589,716),85=>array(79,-12,642,716),86=>array(6,0,660,716),87=>array(12,0,933,716),88=>array(5,0,661,716),89=>array(5,0,661,716),90=>array(18,0,584,716),91=>array(68,-199,262,716),92=>array(0,-24,278,716),93=>array(16,-199,210,716),94=>array(26,325,443,716),95=>array(-6,-125,506,-75),96=>array(42,591,222,728),97=>array(38,-12,516,530),98=>array(67,-12,517,716),99=>array(39,-12,491,530),100=>array(36,-12,486,716),101=>array(39,-12,517,530),102=>array(8,0,311,728),103=>array(34,-210,491,530),104=>array(67,0,490,716),105=>array(67,0,155,716),106=>array(-45,-209,155,716),107=>array(66,0,496,716),108=>array(67,0,155,716),109=>array(65,0,769,530),110=>array(68,0,490,530),111=>array(35,-12,521,530),112=>array(68,-199,518,530),113=>array(38,-199,488,530),114=>array(64,0,346,530),115=>array(31,-12,461,530),116=>array(17,-7,269,700),117=>array(66,-12,487,518),118=>array(13,0,488,518),119=>array(5,0,717,518),120=>array(7,0,493,518),121=>array(16,-210,492,518),122=>array(20,0,479,518),123=>array(28,-210,310,728),124=>array(92,-199,168,716),125=>array(24,-210,306,728),126=>array(43,272,542,432),161=>array(110,-199,219,517),162=>array(55,-200,507,716),163=>array(15,-14,531,728),164=>array(38,115,518,594),165=>array(1,0,555,716),166=>array(92,-199,168,716),167=>array(42,-210,513,728),168=>array(31,611,302,711),169=>array(0,-9,737,728),170=>array(21,364,348,728),171=>array(69,35,487,481),172=>array(55,203,529,503),173=>array(32,215,301,303),174=>array(0,-9,737,728),175=>array(-6,793,506,843),176=>array(65,454,335,725),177=>array(55,0,529,611),178=>array(12,358,316,725),179=>array(16,349,315,725),180=>array(111,591,291,728),181=>array(67,-199,488,518),182=>array(-1,-199,539,716),183=>array(89,302,189,402),184=>array(52,-205,263,11),185=>array(52,358,232,725),186=>array(22,361,343,728),187=>array(69,35,487,481),188=>array(62,-25,789,732),189=>array(62,-25,806,732),190=>array(26,-25,789,732),191=>array(75,-209,537,519),192=>array(-1,0,668,900),193=>array(-1,0,668,900),194=>array(-1,0,668,900),195=>array(-1,0,668,886),196=>array(-1,0,668,881),197=>array(-1,0,668,920),198=>array(0,0,945,716),199=>array(51,-209,684,728),200=>array(79,0,614,900),201=>array(79,0,614,900),202=>array(79,0,614,900),203=>array(79,0,614,881),204=>array(15,0,195,900),205=>array(83,0,264,900),206=>array(-15,0,293,900),207=>array(3,0,274,881),208=>array(1,0,672,716),209=>array(79,0,642,884),210=>array(47,-12,732,900),211=>array(47,-12,732,900),212=>array(47,-12,732,900),213=>array(47,-12,732,884),214=>array(47,-12,732,881),215=>array(79,141,505,567),216=>array(41,-29,742,742),217=>array(79,-12,642,900),218=>array(79,-12,642,900),219=>array(79,-12,642,900),220=>array(79,-12,642,881),221=>array(5,0,661,900),222=>array(77,0,623,716),223=>array(72,-12,577,728),224=>array(38,-12,516,728),225=>array(38,-12,516,728),226=>array(38,-12,516,728),227=>array(38,-12,516,716),228=>array(38,-12,516,711),229=>array(38,-12,516,752),230=>array(34,-12,849,530),231=>array(39,-196,491,530),232=>array(39,-12,517,728),233=>array(39,-12,517,728),234=>array(39,-12,517,728),235=>array(39,-12,517,711),236=>array(13,0,193,728),237=>array(83,0,264,728),238=>array(-15,0,293,728),239=>array(5,0,276,711),240=>array(38,-12,517,716),241=>array(68,0,490,716),242=>array(35,-12,521,728),243=>array(35,-12,521,728),244=>array(35,-12,521,728),245=>array(35,-12,521,716),246=>array(35,-12,521,711),247=>array(55,146,529,560),248=>array(63,-39,549,550),249=>array(66,-12,487,728),250=>array(66,-12,487,728),251=>array(66,-12,487,728),252=>array(66,-12,487,711),253=>array(16,-210,492,728),254=>array(68,-199,518,716),255=>array(16,-210,492,711),256=>array(-1,0,668,833),257=>array(38,-12,516,697),258=>array(-1,0,668,888),259=>array(38,-12,516,722),260=>array(-1,-208,758,716),261=>array(38,-208,571,530),262=>array(51,-12,683,916),263=>array(39,-12,491,728),264=>array(51,-12,683,914),265=>array(39,-12,491,728),266=>array(51,-12,683,877),267=>array(39,-12,491,711),268=>array(51,-12,683,916),269=>array(39,-12,491,728),270=>array(80,0,672,916),271=>array(36,-12,625,716),272=>array(-1,0,672,716),273=>array(36,-12,551,716),274=>array(79,0,614,863),275=>array(39,-12,517,697),276=>array(79,0,614,902),277=>array(39,-12,517,722),278=>array(79,0,614,877),279=>array(39,-12,517,711),280=>array(79,-208,645,716),281=>array(39,-208,517,530),282=>array(79,0,614,916),283=>array(39,-12,517,728),284=>array(52,-12,714,914),285=>array(34,-210,491,728),286=>array(52,-12,714,904),287=>array(34,-210,491,722),288=>array(52,-12,714,877),289=>array(34,-210,491,711),290=>array(52,-210,714,728),291=>array(34,-210,491,775),292=>array(80,0,642,914),293=>array(67,0,490,914),294=>array(-1,0,722,716),295=>array(2,0,490,716),296=>array(-24,0,303,890),297=>array(-53,0,274,717),298=>array(-15,0,290,849),299=>array(-42,0,263,697),300=>array(-3,0,286,904),301=>array(-34,0,255,722),302=>array(91,-208,305,716),303=>array(45,-208,225,716),304=>array(92,0,187,877),305=>array(95,0,183,518),306=>array(92,-12,670,716),307=>array(67,-209,377,716),308=>array(27,-12,526,914),309=>array(-46,-209,263,728),310=>array(73,-210,665,716),311=>array(66,-210,496,716),312=>array(66,0,446,518),313=>array(75,0,523,916),314=>array(50,0,230,916),315=>array(75,-210,523,716),316=>array(58,-210,160,716),317=>array(-29,0,523,916),318=>array(-44,0,264,916),319=>array(75,0,523,716),320=>array(67,0,313,716),321=>array(0,0,521,716),322=>array(1,0,218,716),323=>array(79,0,642,916),324=>array(68,0,490,728),325=>array(79,-210,642,716),326=>array(68,-210,490,530),327=>array(79,0,642,916),328=>array(68,0,490,728),329=>array(-2,0,559,722),330=>array(81,-186,670,728),331=>array(68,-210,489,530),332=>array(47,-12,732,849),333=>array(35,-12,521,697),334=>array(47,-12,732,904),335=>array(35,-12,521,722),336=>array(47,-12,732,914),337=>array(35,-12,521,728),338=>array(63,-12,968,728),339=>array(38,-12,904,530),340=>array(80,0,711,914),341=>array(64,0,346,728),342=>array(80,-210,711,716),343=>array(54,-210,346,530),344=>array(80,0,711,916),345=>array(28,0,346,728),346=>array(45,-12,615,916),347=>array(31,-12,461,728),348=>array(45,-12,615,916),349=>array(31,-12,461,728),350=>array(45,-210,615,728),351=>array(31,-210,461,530),352=>array(45,-12,615,916),353=>array(31,-12,461,728),354=>array(22,-210,589,716),355=>array(17,-210,269,700),356=>array(22,0,589,916),357=>array(17,-7,406,716),358=>array(22,0,589,716),359=>array(17,-7,269,700),360=>array(79,-12,642,890),361=>array(66,-12,487,716),362=>array(79,-12,642,851),363=>array(66,-12,487,697),364=>array(79,-12,642,906),365=>array(66,-12,487,722),366=>array(79,-12,642,955),367=>array(66,-12,487,752),368=>array(79,-12,642,917),369=>array(66,-12,487,728),370=>array(79,-208,642,716),371=>array(66,-208,555,518),372=>array(12,0,933,916),373=>array(5,0,717,728),374=>array(5,0,661,916),375=>array(16,-210,492,728),376=>array(5,0,661,879),377=>array(18,0,584,916),378=>array(20,0,479,728),379=>array(18,0,584,877),380=>array(20,0,479,711),381=>array(18,0,584,916),382=>array(20,0,479,728),383=>array(67,0,292,728),384=>array(-14,-12,515,716),385=>array(0,0,688,716),386=>array(80,0,620,716),387=>array(65,-12,515,716),388=>array(67,-12,517,716),389=>array(67,-12,517,716),390=>array(39,-12,671,728),391=>array(51,-12,769,750),392=>array(39,-12,579,567),393=>array(1,0,672,716),394=>array(0,0,739,716),395=>array(35,0,575,716),396=>array(41,-12,491,716),397=>array(35,-198,522,530),398=>array(53,0,588,716),399=>array(45,-12,676,728),400=>array(42,-13,565,728),401=>array(-20,-154,563,716),402=>array(-14,-154,311,728),403=>array(52,-12,792,750),404=>array(0,-206,649,716),405=>array(67,-12,775,716),406=>array(67,-12,245,716),407=>array(0,0,322,716),408=>array(73,0,690,720),409=>array(66,0,496,728),410=>array(0,-12,322,716),411=>array(13,0,488,716),412=>array(65,-12,769,716),413=>array(-21,-154,642,716),414=>array(68,-199,490,530),415=>array(47,-12,732,728),416=>array(47,-12,776,768),417=>array(35,-12,555,606),418=>array(47,-12,950,728),419=>array(35,-209,715,530),420=>array(0,0,691,716),421=>array(68,-199,519,637),422=>array(80,-122,738,716),423=>array(52,-12,622,728),424=>array(39,-12,469,530),425=>array(47,0,554,716),426=>array(34,-154,405,734),427=>array(17,-151,269,700),428=>array(23,0,549,716),429=>array(17,-7,269,716),430=>array(22,-208,589,716),431=>array(79,-12,776,768),432=>array(66,-12,625,620),433=>array(67,-12,681,716),434=>array(6,0,620,728),435=>array(32,0,745,728),436=>array(16,-210,617,528),437=>array(18,0,584,716),438=>array(20,0,479,519),439=>array(40,-12,582,716),440=>array(46,-12,588,716),441=>array(42,-192,486,518),442=>array(36,-209,437,518),443=>array(31,0,505,728),444=>array(13,-12,516,716),445=>array(37,-12,486,518),446=>array(46,-10,508,716),447=>array(68,-199,498,529),448=>array(92,0,168,716),449=>array(92,0,372,716),450=>array(25,0,449,716),451=>array(85,0,194,716),452=>array(80,0,1303,896),453=>array(80,0,1202,728),454=>array(36,-12,1036,728),455=>array(75,-12,949,716),456=>array(75,-209,709,716),457=>array(67,-209,375,716),458=>array(79,-12,1141,716),459=>array(79,-209,875,716),460=>array(68,-209,709,716),461=>array(-1,0,668,900),462=>array(38,-12,516,728),463=>array(-17,0,292,900),464=>array(-18,0,291,728),465=>array(47,-12,732,900),466=>array(35,-12,521,728),467=>array(79,-12,642,900),468=>array(66,-12,487,728),469=>array(79,-12,642,1003),470=>array(66,-12,487,832),471=>array(79,-12,642,1068),472=>array(66,-12,487,896),473=>array(79,-12,642,1068),474=>array(66,-12,487,896),475=>array(79,-12,642,1068),476=>array(66,-12,487,896),477=>array(39,-11,517,530),478=>array(-1,0,668,1003),479=>array(38,-12,516,832),480=>array(-1,0,668,1003),481=>array(38,-12,516,832),482=>array(0,0,945,865),483=>array(34,-12,849,697),484=>array(52,-12,779,728),485=>array(34,-210,556,530),486=>array(52,-12,714,900),487=>array(34,-210,491,728),488=>array(73,0,665,900),489=>array(66,0,496,900),490=>array(47,-208,732,728),491=>array(33,-208,519,530),492=>array(47,-208,732,865),493=>array(33,-208,519,697),494=>array(48,6,492,898),495=>array(48,-192,492,728),496=>array(-48,-209,261,728),497=>array(80,0,1301,716),498=>array(80,0,1200,716),499=>array(36,-12,1034,716),500=>array(52,-12,714,900),501=>array(34,-210,491,728),506=>array(-1,0,668,1043),507=>array(38,-12,516,937),508=>array(0,0,945,898),509=>array(34,-12,849,728),510=>array(41,-29,742,898),511=>array(63,-39,549,728),512=>array(-1,0,668,894),513=>array(38,-12,516,728),514=>array(-1,0,668,888),515=>array(38,-12,516,722),516=>array(79,0,614,894),517=>array(39,-12,517,728),518=>array(79,0,614,888),519=>array(39,-12,517,722),520=>array(-55,0,291,894),521=>array(-53,0,292,728),522=>array(-3,0,286,888),523=>array(-5,0,284,722),524=>array(47,-12,732,894),525=>array(35,-12,521,728),526=>array(47,-12,732,888),527=>array(35,-12,521,722),528=>array(80,0,711,894),529=>array(14,0,359,728),530=>array(80,0,711,888),531=>array(38,0,346,722),532=>array(79,-12,642,894),533=>array(66,-12,487,728),534=>array(79,-12,642,888),535=>array(66,-12,487,722),592=>array(40,-12,518,530),593=>array(36,-12,486,530),594=>array(70,-12,520,530),595=>array(70,-12,520,716),596=>array(9,-12,461,530),597=>array(39,-91,482,530),598=>array(36,-210,611,716),599=>array(36,-12,611,716),600=>array(39,-12,522,530),601=>array(39,-12,517,530),602=>array(41,-12,772,530),603=>array(36,-12,450,530),604=>array(35,-12,449,530),605=>array(35,-12,701,530),606=>array(36,-12,483,530),607=>array(-51,-210,252,518),608=>array(34,-210,616,716),609=>array(34,-210,491,530),610=>array(36,-12,518,530),611=>array(13,-210,488,518),612=>array(13,-12,488,518),613=>array(66,-198,487,518),614=>array(67,0,490,716),615=>array(67,-210,490,716),616=>array(-2,0,244,716),617=>array(67,-12,280,518),618=>array(33,0,323,518),619=>array(7,0,349,716),620=>array(20,0,403,716),621=>array(67,-210,280,716),622=>array(67,-210,599,716),623=>array(64,-12,768,518),624=>array(64,-209,768,518),625=>array(65,-210,769,530),626=>array(-57,-210,490,530),627=>array(68,-210,615,530),628=>array(68,0,490,518),629=>array(35,-12,521,530),630=>array(36,-12,690,530),631=>array(36,-12,638,530),632=>array(36,-210,522,716),633=>array(-13,-12,269,518),634=>array(-13,-12,269,716),635=>array(-13,-210,394,518),636=>array(64,-198,346,530),637=>array(64,-210,346,530),638=>array(64,0,326,530),639=>array(-14,0,248,530),640=>array(64,0,518,518),641=>array(64,0,518,518),642=>array(31,-208,461,530),643=>array(-83,-210,299,716),644=>array(-53,-210,329,716),645=>array(-83,-210,299,716),646=>array(-125,-198,302,716),647=>array(9,-177,261,530),648=>array(17,-210,294,700),649=>array(20,-12,576,518),650=>array(36,-12,522,518),651=>array(66,-12,520,530),652=>array(13,0,488,518),653=>array(5,0,717,518),654=>array(8,0,484,728),655=>array(2,0,498,518),656=>array(20,-208,653,518),657=>array(20,-79,542,518),658=>array(22,-210,494,518),659=>array(26,-210,494,518),660=>array(16,0,428,728),661=>array(36,0,448,728),662=>array(16,-12,428,716),663=>array(39,-210,491,530),664=>array(36,-12,578,530),665=>array(74,0,496,518),666=>array(36,-12,483,530),667=>array(36,-12,582,616),668=>array(68,0,490,518),669=>array(-125,-198,248,716),670=>array(4,-198,434,518),671=>array(67,0,406,518),672=>array(36,-198,611,716),673=>array(16,0,428,728),674=>array(36,0,448,728),675=>array(36,-12,945,716),676=>array(36,-210,930,716),677=>array(36,-79,1008,716),678=>array(17,-12,650,700),679=>array(17,-210,540,728),680=>array(17,-91,700,700),688=>array(50,344,278,716),689=>array(50,344,278,716),690=>array(-10,235,103,716),691=>array(50,344,210,619),692=>array(-9,338,151,613),693=>array(-9,241,213,613),694=>array(50,344,292,613),695=>array(2,344,386,613),696=>array(8,235,274,613),697=>array(46,462,192,716),698=>array(46,462,342,716),699=>array(64,494,166,728),700=>array(56,482,158,716),701=>array(64,482,166,716),702=>array(44,497,178,716),703=>array(44,497,178,716),704=>array(9,428,230,720),705=>array(20,428,242,720),706=>array(57,423,264,675),707=>array(56,423,263,675),708=>array(34,445,286,652),709=>array(34,446,286,653),710=>array(12,591,321,728),711=>array(12,591,321,728),712=>array(66,506,126,716),713=>array(14,624,319,697),714=>array(111,591,291,728),715=>array(42,591,222,728),716=>array(66,-210,126,0),717=>array(14,-176,319,-113),718=>array(42,-210,222,-73),719=>array(111,-210,291,-73),720=>array(83,0,217,518),721=>array(83,382,217,518),722=>array(44,150,178,369),723=>array(44,150,178,369),724=>array(45,185,295,333),725=>array(45,185,295,333),726=>array(45,164,235,354),727=>array(65,254,297,300),728=>array(22,595,311,722),729=>array(121,611,211,711),730=>array(79,576,255,752),731=>array(89,-208,303,12),732=>array(3,605,330,716),733=>array(28,591,373,728),734=>array(20,195,329,389),736=>array(7,235,271,613),737=>array(50,344,103,716),738=>array(17,338,249,619),739=>array(4,344,271,613),740=>array(25,215,314,724),741=>array(22,0,280,716),742=>array(22,0,280,716),743=>array(22,0,280,716),744=>array(22,0,280,716),745=>array(22,0,280,716),768=>array(-368,591,-188,728),769=>array(-343,591,-163,728),770=>array(-432,591,-124,728),771=>array(-441,605,-114,716),772=>array(-430,624,-125,697),773=>array(-534,624,-22,674),774=>array(-422,595,-133,722),775=>array(-323,611,-233,711),776=>array(-414,611,-143,711),777=>array(-384,722,-172,895),778=>array(-366,574,-190,752),779=>array(-426,591,-81,728),780=>array(-432,591,-124,728),781=>array(-308,591,-248,801),782=>array(-383,591,-173,801),783=>array(-451,591,-105,728),784=>array(-422,595,-133,822),785=>array(-422,595,-133,722),786=>array(-333,591,-231,825),787=>array(-325,579,-223,813),788=>array(-333,579,-231,813),789=>array(7,482,109,716),790=>array(-368,-210,-188,-73),791=>array(-343,-210,-163,-73),792=>array(-337,-252,-219,-62),793=>array(-337,-252,-219,-62),794=>array(-392,591,-164,769),795=>array(-100,330,55,606),796=>array(-326,-210,-230,-40),797=>array(-403,-210,-153,-62),798=>array(-403,-210,-153,-62),799=>array(-373,-252,-183,-62),800=>array(-404,-165,-152,-119),801=>array(-397,-208,-158,20),802=>array(-272,-208,-33,20),803=>array(-323,-210,-233,-110),804=>array(-414,-210,-143,-110),805=>array(-366,-210,-190,-32),806=>array(-325,-210,-223,-46),807=>array(-381,-205,-169,11),808=>array(-326,-208,-112,12),809=>array(-308,-210,-248,-40),810=>array(-407,-190,-148,-77),811=>array(-414,-205,-142,-43),812=>array(-432,-210,-124,-73),813=>array(-432,-210,-124,-73),814=>array(-422,-200,-133,-73),815=>array(-422,-200,-133,-73),816=>array(-441,-185,-114,-72),817=>array(-430,-179,-125,-106),818=>array(-534,-125,-22,-75),819=>array(-534,-210,-22,-55),820=>array(-441,203,-114,316),821=>array(-430,223,-125,296),822=>array(-500,223,-56,296),823=>array(-458,84,-98,434),824=>array(-678,-24,-100,716),825=>array(-311,-210,-216,-40),826=>array(-407,-190,-148,-77),827=>array(-359,-210,-196,-47),828=>array(-414,-186,-142,-83),829=>array(-412,558,-144,790),830=>array(-333,595,-222,922),831=>array(-534,624,-22,779),832=>array(-368,722,-188,859),833=>array(-343,722,-163,859),834=>array(-441,604,-114,717),835=>array(-325,613,-223,847),836=>array(-456,585,-100,720),837=>array(-301,-210,-180,-60),864=>array(-1011,604,-101,716),865=>array(-1000,595,-112,722),884=>array(30,464,301,716),885=>array(30,-132,301,120),890=>array(80,-208,258,-42),894=>array(84,-141,190,518),900=>array(89,600,208,736),901=>array(-27,600,304,736),902=>array(-1,0,668,736),903=>array(89,303,189,403),904=>array(-43,0,651,736),905=>array(-43,0,679,736),906=>array(-43,0,224,736),908=>array(-6,-12,732,736),910=>array(-43,0,740,736),911=>array(-6,0,706,736),912=>array(-56,0,275,736),913=>array(-1,0,668,716),914=>array(74,0,615,716),915=>array(81,0,528,716),916=>array(6,0,675,716),917=>array(79,0,614,716),918=>array(18,0,584,716),919=>array(80,0,642,716),920=>array(47,-12,732,728),921=>array(92,0,187,716),922=>array(73,0,665,716),923=>array(5,0,659,716),924=>array(76,0,757,716),925=>array(79,0,642,716),926=>array(53,0,597,716),927=>array(47,-12,732,728),928=>array(80,0,642,716),929=>array(77,0,623,716),931=>array(47,0,554,716),932=>array(22,0,589,716),933=>array(5,0,661,716),934=>array(47,-26,761,737),935=>array(5,0,661,716),936=>array(46,0,759,716),937=>array(52,0,706,728),938=>array(3,0,274,860),939=>array(5,0,661,860),940=>array(35,-12,541,736),941=>array(29,-12,405,736),942=>array(68,-199,490,736),943=>array(67,0,188,736),944=>array(68,-12,483,736),945=>array(35,-12,541,530),946=>array(66,-199,528,728),947=>array(13,-199,488,518),948=>array(35,-12,522,716),949=>array(29,-12,405,530),950=>array(35,-210,433,716),951=>array(68,-199,490,530),952=>array(45,-12,511,728),953=>array(67,0,155,518),954=>array(65,0,499,518),955=>array(13,0,488,716),956=>array(66,-199,487,518),957=>array(13,0,488,518),958=>array(35,-210,420,728),959=>array(35,-12,521,530),960=>array(16,0,662,518),961=>array(66,-199,536,530),962=>array(35,-210,465,530),963=>array(35,-12,597,534),964=>array(16,0,366,518),965=>array(68,-12,483,518),966=>array(35,-199,614,530),967=>array(7,-199,515,518),968=>array(66,-199,662,518),969=>array(35,-12,731,518),970=>array(-25,0,246,711),971=>array(68,-12,483,711),972=>array(35,-12,521,736),973=>array(68,-12,483,736),974=>array(35,-12,731,736),976=>array(66,-12,528,728),977=>array(23,-12,595,728),978=>array(6,0,627,719),979=>array(-42,0,723,736),980=>array(6,0,627,861),981=>array(35,-199,609,716),982=>array(19,-12,746,518),986=>array(51,-210,671,728),988=>array(80,-209,529,716),990=>array(46,-209,524,728),992=>array(25,-12,645,728),994=>array(80,-209,800,716),995=>array(63,-209,767,518),996=>array(58,0,604,720),997=>array(46,-199,492,521),998=>array(80,-187,626,716),999=>array(25,-13,494,589),1000=>array(46,-12,511,728),1001=>array(48,-196,463,530),1002=>array(3,0,621,716),1003=>array(15,0,591,530),1004=>array(62,-12,596,747),1005=>array(35,-12,597,576),1006=>array(19,0,549,716),1007=>array(11,-196,423,606),1008=>array(20,-11,580,528),1009=>array(66,-209,536,530),1010=>array(39,-12,491,530),1011=>array(-45,-209,155,716),1025=>array(79,0,614,859),1026=>array(25,-11,826,716),1027=>array(80,0,543,869),1028=>array(47,-12,680,728),1029=>array(45,-12,615,728),1030=>array(92,0,187,716),1031=>array(1,0,272,859),1032=>array(27,-12,420,716),1033=>array(9,-11,1070,716),1034=>array(80,0,973,716),1035=>array(24,0,809,716),1036=>array(80,0,580,869),1038=>array(5,-9,633,881),1039=>array(80,-199,643,716),1040=>array(-1,0,668,716),1041=>array(80,0,620,716),1042=>array(74,0,615,716),1043=>array(80,0,543,716),1044=>array(1,-167,642,716),1045=>array(79,0,614,716),1046=>array(3,0,919,716),1047=>array(39,-13,562,728),1048=>array(79,0,643,716),1049=>array(79,0,643,881),1050=>array(80,0,580,717),1051=>array(9,-11,625,716),1052=>array(76,0,757,716),1053=>array(80,0,642,716),1054=>array(47,-12,732,728),1055=>array(80,0,643,716),1056=>array(77,0,623,716),1057=>array(51,-12,683,728),1058=>array(22,0,589,716),1059=>array(5,-9,633,716),1060=>array(40,0,720,716),1061=>array(5,0,661,716),1062=>array(78,-199,706,716),1063=>array(58,0,604,716),1064=>array(80,0,840,716),1065=>array(80,-199,904,716),1066=>array(0,0,757,716),1067=>array(80,0,801,716),1068=>array(80,0,620,716),1069=>array(38,-12,671,728),1070=>array(80,-12,960,728),1071=>array(11,0,642,716),1072=>array(38,-12,516,530),1073=>array(45,-12,532,732),1074=>array(66,0,492,518),1075=>array(66,0,364,518),1076=>array(0,-147,553,518),1077=>array(39,-12,517,530),1078=>array(-3,0,671,518),1079=>array(24,-12,423,530),1080=>array(66,0,493,518),1081=>array(66,0,493,716),1082=>array(66,0,446,518),1083=>array(11,-3,505,518),1084=>array(66,0,617,518),1085=>array(66,0,486,518),1086=>array(35,-12,521,530),1087=>array(67,0,476,518),1088=>array(68,-199,518,530),1089=>array(39,-12,491,530),1090=>array(18,0,439,518),1091=>array(16,-210,492,518),1092=>array(37,-199,788,716),1093=>array(7,0,493,518),1094=>array(66,-199,532,518),1095=>array(46,0,467,518),1096=>array(69,0,734,518),1097=>array(69,-199,792,518),1098=>array(0,0,589,518),1099=>array(66,0,646,518),1100=>array(66,0,492,518),1101=>array(24,-11,474,530),1102=>array(66,-11,709,530),1103=>array(16,0,475,518),1105=>array(39,-12,517,720),1106=>array(2,-209,490,716),1107=>array(66,0,364,720),1108=>array(37,-11,487,530),1109=>array(31,-12,461,530),1110=>array(67,0,155,716),1111=>array(4,0,275,720),1112=>array(-45,-209,155,716),1113=>array(11,-3,842,518),1114=>array(66,0,780,518),1115=>array(2,0,490,716),1116=>array(66,0,446,720),1118=>array(16,-210,492,716),1119=>array(67,-199,476,518),1120=>array(47,-12,929,730),1121=>array(35,-12,731,518),1122=>array(0,0,622,716),1123=>array(-2,0,491,716),1124=>array(92,-12,912,728),1125=>array(68,-11,671,530),1126=>array(-2,0,668,716),1127=>array(0,0,595,518),1128=>array(92,0,952,716),1129=>array(68,0,817,518),1130=>array(0,0,654,716),1131=>array(1,0,599,518),1132=>array(92,0,932,716),1133=>array(68,0,820,518),1134=>array(37,-209,562,898),1135=>array(28,-209,423,728),1136=>array(46,0,759,716),1137=>array(66,-199,662,518),1138=>array(47,-12,732,728),1139=>array(35,-11,521,530),1140=>array(6,0,674,716),1141=>array(13,0,497,518),1142=>array(6,0,674,898),1143=>array(13,0,497,728),1144=>array(47,-210,1268,728),1145=>array(35,-210,1049,530),1146=>array(47,-36,732,750),1147=>array(35,-24,521,542),1148=>array(47,-12,929,926),1149=>array(35,-12,731,758),1150=>array(47,-12,929,880),1151=>array(35,-12,731,711),1152=>array(51,-97,672,728),1153=>array(39,-143,482,530),1154=>array(55,0,631,716),1155=>array(2,621,332,758),1156=>array(4,613,380,774),1157=>array(2,621,332,758),1158=>array(2,621,332,758),1168=>array(80,0,412,883),1169=>array(66,0,321,666),1170=>array(0,0,543,716),1171=>array(-2,0,364,518),1172=>array(80,-185,622,716),1173=>array(67,-209,490,716),1174=>array(3,-199,919,716),1175=>array(-3,-199,671,518),1176=>array(39,-205,562,728),1177=>array(24,-205,423,530),1178=>array(80,-199,580,717),1179=>array(66,-199,446,518),1180=>array(80,0,580,717),1181=>array(66,0,446,518),1182=>array(0,0,580,717),1183=>array(-2,0,446,518),1184=>array(24,0,762,717),1185=>array(0,0,544,518),1186=>array(80,-199,707,716),1187=>array(66,-199,543,518),1188=>array(80,0,880,716),1189=>array(66,0,653,518),1190=>array(80,-174,704,716),1191=>array(67,-174,537,518),1192=>array(47,-154,732,728),1193=>array(35,-141,550,530),1194=>array(51,-208,684,728),1195=>array(39,-208,491,530),1196=>array(21,-199,589,716),1197=>array(18,-199,439,518),1198=>array(5,0,661,716),1199=>array(13,-199,488,518),1200=>array(5,0,661,716),1201=>array(13,-199,488,518),1202=>array(4,-199,660,716),1203=>array(7,-199,493,518),1204=>array(16,-199,882,716),1205=>array(18,-199,631,518),1206=>array(58,-199,670,716),1207=>array(46,-199,524,518),1208=>array(58,0,604,716),1209=>array(46,0,467,518),1210=>array(81,0,627,716),1211=>array(67,0,490,716),1212=>array(7,-12,784,728),1213=>array(7,-11,624,530),1214=>array(7,-208,784,728),1215=>array(7,-208,624,530),1216=>array(92,0,187,716),1217=>array(3,0,919,881),1218=>array(-3,0,671,716),1219=>array(80,-174,580,717),1220=>array(66,-174,445,519),1223=>array(80,-174,703,716),1224=>array(66,-174,547,518),1227=>array(58,-199,604,716),1228=>array(46,-199,467,518),1232=>array(-2,0,668,881),1233=>array(38,-12,516,716),1234=>array(-1,0,668,861),1235=>array(38,-12,516,721),1236=>array(0,0,945,716),1237=>array(34,-12,849,530),1238=>array(79,0,613,881),1239=>array(39,-12,517,716),1240=>array(45,-12,676,728),1241=>array(39,-11,517,530),1242=>array(45,-12,676,859),1243=>array(39,-11,517,719),1244=>array(3,0,919,859),1245=>array(-3,0,671,721),1246=>array(39,-13,562,861),1247=>array(24,-12,423,721),1248=>array(39,-13,562,716),1249=>array(24,-206,457,518),1250=>array(79,0,643,833),1251=>array(66,0,493,697),1252=>array(79,0,643,861),1253=>array(66,0,493,721),1254=>array(47,-12,732,861),1255=>array(35,-12,521,721),1256=>array(47,-12,732,728),1257=>array(35,-11,521,530),1258=>array(47,-12,732,861),1259=>array(35,-11,521,721),1262=>array(5,-9,633,833),1263=>array(16,-210,492,697),1264=>array(5,-9,633,861),1265=>array(16,-210,492,721),1266=>array(5,-9,633,898),1267=>array(16,-210,492,728),1268=>array(58,0,604,861),1269=>array(46,0,467,721),1272=>array(80,0,801,861),1273=>array(66,0,646,721),1329=>array(25,-9,618,678),1330=>array(90,-1,481,685),1331=>array(31,-1,563,684),1332=>array(34,-1,564,684),1333=>array(30,-11,468,677),1334=>array(56,-22,510,692),1335=>array(27,-185,407,671),1336=>array(89,-96,476,684),1337=>array(98,0,722,683),1338=>array(46,-11,613,678),1339=>array(24,-2,503,676),1340=>array(28,-185,357,672),1341=>array(24,-12,539,676),1342=>array(38,-11,675,676),1343=>array(32,-2,462,676),1344=>array(28,-61,410,690),1345=>array(31,-11,515,689),1346=>array(27,-96,559,683),1347=>array(63,0,487,708),1348=>array(26,-11,620,677),1349=>array(101,-10,631,684),1350=>array(36,-11,594,685),1351=>array(32,-11,602,684),1352=>array(90,-1,460,684),1353=>array(69,-19,489,689),1354=>array(78,-1,614,683),1355=>array(55,-23,508,690),1356=>array(86,-2,619,683),1357=>array(30,-12,462,675),1358=>array(37,-96,665,676),1359=>array(101,-11,501,683),1360=>array(87,-7,452,677),1361=>array(104,-15,498,680),1362=>array(23,-7,511,671),1363=>array(106,-6,608,672),1364=>array(35,-8,675,678),1365=>array(100,-16,547,679),1366=>array(76,-15,713,680),1369=>array(87,485,211,705),1370=>array(83,485,207,705),1371=>array(34,485,114,702),1372=>array(20,425,282,702),1373=>array(87,518,210,699),1374=>array(14,476,257,702),1375=>array(38,484,397,702),1377=>array(39,-8,552,315),1378=>array(52,-210,400,319),1379=>array(52,-210,402,319),1380=>array(49,-210,433,319),1381=>array(49,-8,391,613),1382=>array(48,-210,409,319),1383=>array(50,-122,393,613),1384=>array(52,-210,395,319),1385=>array(49,-210,437,319),1386=>array(40,-8,430,613),1387=>array(44,-210,394,613),1388=>array(37,-210,309,315),1389=>array(38,-210,482,613),1390=>array(45,-8,413,580),1391=>array(53,-210,391,613),1392=>array(45,0,398,613),1393=>array(51,-8,397,561),1394=>array(50,-210,401,319),1395=>array(8,-8,386,618),1396=>array(44,-8,404,618),1397=>array(6,-210,197,315),1398=>array(90,-9,394,618),1399=>array(37,-8,359,319),1400=>array(50,0,397,319),1401=>array(79,-210,318,376),1402=>array(39,-210,551,315),1403=>array(55,-210,411,319),1404=>array(29,0,420,319),1405=>array(49,-9,393,315),1406=>array(43,-210,393,613),1407=>array(42,-8,550,319),1408=>array(52,-210,399,319),1409=>array(49,-210,393,319),1410=>array(32,0,308,315),1411=>array(39,-210,550,613),1412=>array(47,0,337,618),1413=>array(52,-8,336,319),1414=>array(78,-210,541,610),1415=>array(49,-8,502,613),1417=>array(80,-21,197,335),1425=>array(97,-194,263,-63),1426=>array(37,568,323,664),1427=>array(112,569,249,789),1428=>array(147,568,213,728),1429=>array(106,568,262,728),1430=>array(104,-195,256,-43),1431=>array(133,568,227,662),1432=>array(82,568,278,684),1433=>array(0,568,152,720),1434=>array(229,-205,340,-43),1435=>array(104,-195,256,-43),1436=>array(104,568,256,720),1437=>array(208,568,360,720),1438=>array(108,568,360,750),1439=>array(12,568,348,716),1440=>array(200,568,348,716),1441=>array(58,568,303,716),1443=>array(92,-191,221,-62),1444=>array(117,-205,228,-43),1445=>array(104,-195,256,-43),1446=>array(54,-215,306,-33),1447=>array(117,-209,242,-35),1448=>array(104,568,256,720),1449=>array(12,568,160,716),1450=>array(97,-194,263,-63),1451=>array(117,568,228,730),1452=>array(92,580,221,709),1453=>array(208,-195,360,-43),1454=>array(0,568,196,684),1455=>array(125,568,235,678),1456=>array(147,-210,213,-50),1457=>array(53,-210,307,-50),1458=>array(69,-210,285,-50),1459=>array(69,-210,285,-50),1460=>array(147,-116,213,-50),1461=>array(100,-116,260,-50),1462=>array(100,-210,260,-50),1463=>array(119,-104,241,-62),1464=>array(119,-144,241,-62),1465=>array(147,568,213,634),1467=>array(53,-210,307,-50),1468=>array(147,231,213,297),1469=>array(159,-184,201,-62),1470=>array(24,430,342,518),1471=>array(119,580,241,622),1472=>array(72,-80,154,598),1473=>array(147,568,213,634),1474=>array(147,568,213,634),1475=>array(69,0,169,518),1476=>array(147,568,213,634),1488=>array(60,0,517,518),1489=>array(38,0,533,530),1490=>array(20,0,386,530),1491=>array(24,0,482,518),1492=>array(72,0,526,530),1493=>array(16,0,248,530),1494=>array(28,0,306,543),1495=>array(72,0,526,530),1496=>array(68,-12,532,530),1497=>array(16,258,248,530),1498=>array(20,-199,439,530),1499=>array(38,-12,469,530),1500=>array(33,-12,436,716),1501=>array(72,0,526,518),1502=>array(30,0,526,530),1503=>array(16,-199,248,530),1504=>array(38,0,270,530),1505=>array(25,-12,546,530),1506=>array(32,-82,503,518),1507=>array(45,-199,499,530),1508=>array(37,-12,511,530),1509=>array(37,-199,468,518),1510=>array(45,0,477,518),1511=>array(72,-199,535,518),1512=>array(20,0,439,530),1513=>array(72,-12,674,518),1514=>array(21,-13,565,530),1520=>array(16,0,522,530),1521=>array(16,0,522,530),1522=>array(16,258,522,530),1523=>array(45,398,221,641),1524=>array(45,398,417,641),1548=>array(90,-3,196,238),1563=>array(90,0,196,479),1567=>array(47,0,509,728),1569=>array(54,0,469,422),1570=>array(-23,0,270,862),1571=>array(46,0,188,933),1572=>array(-108,-210,408,761),1573=>array(46,-174,188,716),1574=>array(32,-121,679,453),1575=>array(79,0,164,716),1576=>array(62,-190,709,265),1577=>array(62,-6,452,633),1578=>array(62,-50,709,437),1579=>array(62,-50,709,539),1580=>array(52,-271,564,453),1581=>array(52,-271,564,453),1582=>array(52,-271,564,621),1583=>array(38,0,368,437),1584=>array(38,0,368,629),1585=>array(-74,-210,357,290),1586=>array(-74,-210,357,470),1587=>array(39,-228,1115,346),1588=>array(39,-228,1115,604),1589=>array(39,-228,1230,436),1590=>array(39,-228,1230,532),1591=>array(59,0,782,686),1592=>array(59,0,782,686),1593=>array(53,-271,565,492),1594=>array(53,-271,565,725),1600=>array(-1,0,280,95),1601=>array(62,0,895,773),1602=>array(34,-214,738,678),1603=>array(62,0,689,716),1604=>array(34,-121,594,716),1605=>array(58,-265,527,359),1606=>array(62,-121,630,456),1607=>array(62,-6,452,431),1608=>array(-108,-210,408,476),1609=>array(32,-121,679,453),1610=>array(32,-238,679,453),1611=>array(10,716,290,944),1612=>array(4,716,292,990),1613=>array(8,-255,288,-78),1614=>array(10,716,290,859),1615=>array(4,716,292,990),1616=>array(8,-170,288,-78),1617=>array(7,716,299,936),1618=>array(3,716,201,965),1632=>array(130,59,348,260),1633=>array(99,0,282,576),1634=>array(35,0,451,576),1635=>array(39,0,473,576),1636=>array(63,-6,443,586),1637=>array(45,-6,435,576),1638=>array(29,0,450,576),1639=>array(21,-6,459,576),1640=>array(21,0,459,582),1641=>array(42,0,466,582),1642=>array(37,-3,516,579),1643=>array(-19,-151,205,100),1644=>array(90,-3,196,238),1645=>array(20,163,418,576),1648=>array(127,716,173,984),1649=>array(-15,0,256,927),1650=>array(-47,0,196,936),1651=>array(-55,-257,188,716),1652=>array(46,716,188,933),1653=>array(79,0,384,777),1654=>array(-108,-210,551,641),1655=>array(-108,-210,551,754),1656=>array(32,-121,775,621),1657=>array(62,-50,709,569),1658=>array(62,-50,709,568),1659=>array(62,-271,709,265),1660=>array(62,-161,709,437),1661=>array(62,-50,709,539),1662=>array(62,-271,709,265),1663=>array(62,-50,709,569),1664=>array(62,-271,709,265),1665=>array(52,-271,564,621),1666=>array(52,-271,564,724),1667=>array(52,-271,564,453),1668=>array(52,-271,564,453),1669=>array(52,-271,564,695),1670=>array(52,-271,564,453),1671=>array(52,-271,564,453),1672=>array(38,0,368,746),1673=>array(38,-95,368,437),1674=>array(38,-155,368,437),1675=>array(38,-155,368,746),1676=>array(38,0,368,614),1677=>array(38,-140,368,437),1678=>array(38,0,368,716),1679=>array(38,0,368,716),1680=>array(38,0,368,746),1681=>array(-74,-210,360,587),1682=>array(-74,-210,357,526),1683=>array(-74,-258,357,290),1684=>array(-74,-267,378,290),1685=>array(-74,-269,442,290),1686=>array(-74,-267,378,290),1687=>array(-74,-210,360,455),1688=>array(-74,-210,360,557),1689=>array(-74,-210,357,587),1690=>array(39,-228,1115,517),1691=>array(39,-254,1115,346),1692=>array(39,-254,1115,603),1693=>array(39,-228,1230,436),1694=>array(39,-228,1230,619),1695=>array(59,0,782,686),1696=>array(53,-271,565,749),1697=>array(62,0,895,556),1698=>array(62,-134,895,556),1699=>array(62,-134,895,773),1700=>array(62,0,895,860),1701=>array(62,-221,895,556),1702=>array(62,0,895,891),1703=>array(34,-214,738,693),1704=>array(34,-214,738,780),1705=>array(62,0,827,717),1706=>array(62,0,997,717),1707=>array(62,0,827,717),1708=>array(62,0,689,759),1709=>array(62,0,689,846),1710=>array(62,-223,689,716),1711=>array(62,0,827,793),1712=>array(62,0,827,793),1713=>array(62,0,827,863),1714=>array(62,-169,827,793),1715=>array(62,-271,827,793),1716=>array(62,0,827,942),1717=>array(34,-121,618,952),1718=>array(34,-121,594,914),1719=>array(34,-121,647,1001),1722=>array(62,-121,630,272),1723=>array(62,-121,630,570),1724=>array(62,-232,630,455),1725=>array(62,-121,630,540),1726=>array(29,-15,644,593),1728=>array(62,-6,452,705),1729=>array(2,-85,510,159),1730=>array(2,-85,510,431),1731=>array(2,-85,510,347),1732=>array(-108,-210,408,476),1733=>array(-108,-210,408,476),1734=>array(-108,-210,408,712),1735=>array(-108,-210,408,758),1736=>array(-108,-210,408,789),1737=>array(-108,-210,408,713),1738=>array(-108,-210,408,655),1739=>array(-108,-210,408,757),1740=>array(32,-121,679,453),1741=>array(-4,-121,789,453),1742=>array(32,-121,679,576),1744=>array(32,-271,679,493),1745=>array(32,-263,679,493),1746=>array(71,-221,684,297),1747=>array(71,-221,684,349),1748=>array(-1,190,280,285),1749=>array(62,-6,452,431),1750=>array(27,352,699,802),1751=>array(27,352,531,802),1752=>array(35,573,287,788),1753=>array(5,573,284,1002),1754=>array(34,354,341,789),1755=>array(25,635,347,869),1756=>array(23,436,669,781),1757=>array(34,27,654,647),1758=>array(2,-87,850,761),1759=>array(78,687,209,808),1760=>array(78,687,209,808),1761=>array(-1,576,340,848),1762=>array(34,414,316,789),1763=>array(23,-267,669,78),1764=>array(-14,714,162,756),1765=>array(-42,395,268,807),1766=>array(36,443,404,754),1767=>array(36,443,404,754),1768=>array(37,573,378,919),1769=>array(34,0,480,736),1770=>array(35,-161,183,-13),1771=>array(35,641,183,789),1772=>array(35,641,183,789),1773=>array(34,-270,316,105),1776=>array(130,59,348,260),1777=>array(99,0,282,576),1778=>array(35,0,451,576),1779=>array(39,0,473,576),1780=>array(35,0,471,661),1781=>array(30,-6,450,576),1782=>array(94,0,403,576),1783=>array(21,-6,459,576),1784=>array(21,0,459,582),1785=>array(42,0,466,582),2305=>array(-375,608,-50,889),2306=>array(-239,608,-109,843),2307=>array(78,69,216,513),2309=>array(42,-17,706,608),2310=>array(42,-18,923,608),2311=>array(-1,-114,545,608),2312=>array(-1,-114,545,891),2313=>array(-1,11,603,608),2314=>array(-1,11,726,608),2315=>array(-1,-44,933,608),2316=>array(-1,-44,690,608),2317=>array(-1,-187,624,864),2318=>array(-1,-187,624,886),2319=>array(-1,-187,624,608),2320=>array(-1,-187,624,889),2321=>array(42,-18,923,864),2322=>array(42,-18,923,886),2323=>array(42,-14,922,889),2324=>array(42,-17,922,892),2325=>array(-1,-17,680,608),2326=>array(-1,-15,745,608),2327=>array(-1,-15,605,608),2328=>array(-1,-17,652,608),2329=>array(-1,0,636,608),2330=>array(-1,-15,700,608),2331=>array(-1,-80,726,608),2332=>array(-1,-17,700,608),2333=>array(-1,-17,725,608),2334=>array(-1,-15,710,608),2335=>array(-1,0,515,608),2336=>array(-1,0,545,608),2337=>array(-1,0,595,608),2338=>array(-1,0,535,608),2339=>array(-1,-17,706,608),2340=>array(-1,-17,598,608),2341=>array(42,-14,650,608),2342=>array(-1,-14,545,608),2343=>array(42,-18,653,616),2344=>array(-1,-15,598,608),2345=>array(-1,-33,598,608),2346=>array(-1,-17,578,608),2347=>array(-2,-15,712,608),2348=>array(-1,-17,604,608),2349=>array(39,-17,702,608),2350=>array(-1,-17,646,608),2351=>array(-1,-17,613,608),2352=>array(-1,-14,499,608),2353=>array(-1,-19,499,608),2354=>array(-1,-14,692,608),2355=>array(-1,0,742,608),2356=>array(-1,-122,742,608),2357=>array(-1,-15,604,608),2358=>array(38,-18,696,616),2359=>array(-1,-15,621,608),2360=>array(-1,-17,659,608),2361=>array(-1,-238,559,608),2364=>array(-404,-197,-274,-67),2365=>array(28,50,386,608),2366=>array(-1,-17,332,608),2367=>array(-1,-15,776,895),2368=>array(-254,-15,332,895),2369=>array(-463,-256,-31,7),2370=>array(-345,-262,84,7),2371=>array(-330,-249,-50,13),2372=>array(-321,-271,-24,46),2373=>array(-338,608,-49,864),2374=>array(-546,598,-135,886),2375=>array(-534,598,-135,889),2376=>array(-475,599,-135,892),2377=>array(-19,-17,332,864),2378=>array(-228,-17,332,886),2379=>array(-260,-17,332,889),2380=>array(-152,-17,332,892),2381=>array(-251,-271,32,0),2384=>array(47,97,830,792),2385=>array(-212,608,-135,788),2386=>array(-612,-99,0,-29),2387=>array(-349,645,-184,832),2388=>array(-261,645,-96,832),2392=>array(-1,-17,680,608),2393=>array(-1,-104,745,608),2394=>array(-1,-54,605,608),2395=>array(-1,-66,700,608),2396=>array(-1,-67,595,608),2397=>array(-1,-77,535,608),2398=>array(-2,-15,712,608),2399=>array(-1,-38,613,608),2400=>array(-1,-71,933,608),2401=>array(-1,-71,690,608),2402=>array(-418,-271,26,13),2403=>array(-418,-271,60,13),2404=>array(128,-17,203,617),2405=>array(128,-17,385,616),2406=>array(147,115,491,468),2407=>array(179,-134,455,689),2408=>array(99,-123,542,644),2409=>array(125,-106,492,677),2410=>array(12,112,617,685),2411=>array(82,-149,576,658),2412=>array(118,-130,545,653),2413=>array(73,23,570,569),2414=>array(84,29,570,667),2415=>array(119,-92,575,648),2416=>array(64,292,298,525),2433=>array(-296,703,10,875),2434=>array(66,-56,396,605),2435=>array(92,0,338,606),2437=>array(0,0,794,607),2438=>array(0,0,1039,690),2439=>array(0,-94,590,875),2440=>array(0,-22,611,875),2441=>array(0,1,656,875),2442=>array(0,0,765,875),2443=>array(54,0,766,688),2444=>array(33,1,596,651),2447=>array(38,0,593,605),2448=>array(38,0,701,876),2451=>array(57,1,629,609),2452=>array(57,1,728,876),2453=>array(0,0,787,607),2454=>array(54,0,663,625),2455=>array(44,0,614,607),2456=>array(0,0,658,607),2457=>array(51,0,621,607),2458=>array(0,0,563,607),2459=>array(0,-93,593,607),2460=>array(0,-42,737,607),2461=>array(0,0,761,607),2462=>array(38,0,829,606),2463=>array(0,0,575,875),2464=>array(0,0,634,876),2465=>array(0,1,656,607),2466=>array(0,0,575,607),2467=>array(55,0,606,607),2468=>array(0,1,688,607),2469=>array(50,0,653,607),2470=>array(0,-24,617,607),2471=>array(45,0,604,624),2472=>array(0,0,603,607),2474=>array(44,0,643,607),2475=>array(0,0,789,607),2476=>array(0,0,601,607),2477=>array(0,2,685,607),2478=>array(0,0,629,607),2479=>array(0,0,609,607),2480=>array(0,-18,601,607),2482=>array(0,-0,648,607),2486=>array(0,0,606,626),2487=>array(0,0,604,607),2488=>array(0,0,645,607),2489=>array(0,-94,590,607),2492=>array(-366,-164,-233,-32),2494=>array(0,0,253,690),2495=>array(0,0,531,850),2496=>array(-334,0,253,875),2497=>array(-357,-269,39,5),2498=>array(-359,-269,21,-73),2499=>array(-314,-270,-60,-77),2500=>array(-380,-271,98,24),2503=>array(0,1,317,607),2504=>array(0,1,317,875),2507=>array(0,0,940,690),2508=>array(0,0,940,875),2509=>array(-187,-267,26,-73),2519=>array(-250,0,253,875),2524=>array(0,-164,656,607),2525=>array(0,-164,561,607),2527=>array(0,-42,604,607),2528=>array(54,-93,766,688),2529=>array(33,-271,596,651),2530=>array(-381,-271,-4,23),2531=>array(-401,-271,333,151),2534=>array(62,55,548,550),2535=>array(46,0,513,624),2536=>array(58,-51,583,636),2537=>array(53,2,671,606),2538=>array(67,0,547,653),2539=>array(62,1,632,638),2540=>array(52,1,616,622),2541=>array(69,0,498,624),2542=>array(55,0,641,622),2543=>array(53,1,559,622),2544=>array(0,0,601,607),2545=>array(0,-51,601,607),2546=>array(36,0,581,606),2547=>array(-87,0,575,875),2548=>array(26,0,571,606),2549=>array(44,1,669,606),2550=>array(54,0,624,606),2551=>array(103,0,165,607),2552=>array(52,0,564,605),2553=>array(48,154,376,451),2554=>array(74,349,492,788),2562=>array(-156,578,-79,731),2565=>array(0,0,696,578),2566=>array(0,0,940,578),2567=>array(0,0,808,822),2568=>array(0,0,808,822),2569=>array(0,-267,683,839),2570=>array(0,-267,683,839),2575=>array(0,2,562,793),2576=>array(0,0,696,839),2579=>array(0,-2,683,836),2580=>array(0,0,696,839),2581=>array(0,0,607,578),2582=>array(0,0,572,578),2583=>array(0,0,646,578),2584=>array(0,0,692,578),2585=>array(0,0,570,578),2586=>array(0,1,597,578),2587=>array(0,0,607,578),2588=>array(0,0,596,578),2589=>array(0,0,546,578),2590=>array(0,0,563,578),2591=>array(0,0,548,578),2592=>array(0,0,586,578),2593=>array(0,0,601,578),2594=>array(0,0,645,578),2595=>array(0,0,645,578),2596=>array(0,0,596,578),2597=>array(0,0,569,578),2598=>array(0,0,645,578),2599=>array(0,0,569,578),2600=>array(0,0,587,578),2602=>array(0,0,569,578),2603=>array(0,0,556,578),2604=>array(0,0,564,578),2605=>array(0,0,554,578),2606=>array(0,0,563,578),2607=>array(0,0,657,578),2608=>array(0,4,545,578),2610=>array(0,-0,682,578),2611=>array(0,-96,682,578),2613=>array(0,0,606,578),2614=>array(0,0,563,578),2616=>array(0,0,563,578),2617=>array(0,0,554,578),2620=>array(-208,-154,-131,-77),2622=>array(0,216,251,578),2623=>array(0,0,397,822),2624=>array(-151,0,251,822),2625=>array(-388,-267,-50,0),2626=>array(-388,-267,-50,0),2631=>array(-473,578,-90,793),2632=>array(-471,578,-90,839),2635=>array(-411,572,-90,803),2636=>array(-379,578,-27,839),2637=>array(-235,-238,51,0),2649=>array(0,0,572,578),2650=>array(0,0,695,578),2651=>array(0,0,596,578),2652=>array(0,0,596,578),2654=>array(0,0,585,578),2662=>array(54,42,537,524),2663=>array(86,0,514,575),2664=>array(53,0,528,577),2665=>array(52,1,527,577),2666=>array(69,0,522,577),2667=>array(57,0,501,579),2668=>array(74,0,530,758),2669=>array(36,0,519,578),2670=>array(64,0,526,578),2671=>array(65,0,525,769),2672=>array(-103,664,103,841),2673=>array(-193,660,111,839),2674=>array(0,2,562,578),2675=>array(0,-2,683,839),2676=>array(28,-110,857,648),2689=>array(-429,608,-23,885),2690=>array(-179,608,-67,822),2691=>array(88,98,212,510),2693=>array(36,0,803,608),2694=>array(36,0,1062,610),2695=>array(42,-1,553,882),2696=>array(42,-1,606,882),2697=>array(60,0,545,742),2698=>array(60,-4,776,882),2699=>array(20,0,780,608),2701=>array(36,0,803,881),2703=>array(36,0,803,881),2704=>array(36,0,803,882),2705=>array(36,0,1062,881),2707=>array(36,0,1062,881),2708=>array(36,0,1062,882),2709=>array(35,0,411,610),2710=>array(5,0,792,608),2711=>array(25,0,625,608),2712=>array(52,-1,579,608),2713=>array(25,0,462,610),2714=>array(36,0,620,608),2715=>array(55,0,643,608),2716=>array(50,0,791,608),2717=>array(34,0,601,608),2718=>array(25,0,669,608),2719=>array(55,0,460,610),2720=>array(59,0,409,610),2721=>array(25,0,404,610),2722=>array(55,-1,447,608),2723=>array(98,-271,714,608),2724=>array(60,0,554,608),2725=>array(45,0,572,608),2726=>array(44,-1,480,608),2727=>array(27,0,561,727),2728=>array(43,0,602,608),2730=>array(5,0,592,608),2731=>array(50,-270,442,608),2732=>array(50,0,684,608),2733=>array(50,0,776,608),2734=>array(27,0,614,608),2735=>array(40,0,514,608),2736=>array(45,-2,411,609),2738=>array(55,0,633,608),2739=>array(52,0,676,609),2741=>array(50,0,558,608),2742=>array(52,0,633,610),2743=>array(75,0,528,608),2744=>array(43,0,684,608),2745=>array(69,0,573,610),2748=>array(-323,-182,-211,-70),2749=>array(52,0,436,608),2750=>array(98,0,291,610),2751=>array(98,0,660,883),2752=>array(-180,0,291,884),2753=>array(-412,-271,28,5),2754=>array(-323,-271,151,5),2755=>array(-271,-271,41,5),2756=>array(-275,-271,65,20),2757=>array(-452,608,-25,881),2759=>array(-509,608,-80,881),2760=>array(-544,608,-96,882),2761=>array(-179,0,291,881),2763=>array(-236,0,291,881),2764=>array(-271,0,291,882),2765=>array(-244,-249,186,5),2768=>array(46,0,815,881),2784=>array(20,-1,875,608),2790=>array(91,61,532,545),2791=>array(110,0,534,608),2792=>array(97,0,524,608),2793=>array(29,0,527,608),2794=>array(18,0,595,609),2795=>array(18,0,598,608),2796=>array(104,0,541,610),2797=>array(25,0,571,608),2798=>array(118,0,532,607),2799=>array(35,1,608,605),2817=>array(-374,776,37,979),2818=>array(34,379,271,717),2819=>array(59,0,332,717),2821=>array(42,0,508,717),2822=>array(42,0,726,717),2823=>array(39,-16,643,717),2824=>array(39,-16,643,717),2825=>array(39,-16,618,717),2826=>array(39,-16,625,717),2827=>array(39,-16,607,717),2828=>array(39,0,516,717),2831=>array(49,0,479,717),2832=>array(49,0,918,913),2835=>array(59,0,561,732),2836=>array(59,0,953,913),2837=>array(39,0,564,717),2838=>array(39,0,539,717),2839=>array(39,0,539,717),2840=>array(39,0,524,717),2841=>array(39,0,688,717),2842=>array(39,0,540,717),2843=>array(39,0,540,717),2844=>array(39,0,554,717),2845=>array(39,-15,540,732),2846=>array(54,0,532,717),2847=>array(39,0,539,717),2848=>array(44,0,534,717),2849=>array(39,0,540,717),2850=>array(39,-12,540,717),2851=>array(44,0,526,717),2852=>array(39,0,540,717),2853=>array(39,0,505,717),2854=>array(39,0,540,717),2855=>array(44,0,521,732),2856=>array(39,0,540,717),2858=>array(39,0,524,717),2859=>array(39,0,703,717),2860=>array(39,0,540,717),2861=>array(39,-16,628,717),2862=>array(39,-0,524,717),2863=>array(56,0,547,717),2864=>array(39,-16,604,717),2866=>array(39,-16,638,717),2867=>array(39,0,554,717),2870=>array(39,0,539,717),2871=>array(39,0,524,717),2872=>array(39,0,524,717),2873=>array(39,-30,540,717),2876=>array(-301,-176,-206,-84),2877=>array(71,0,273,717),2878=>array(82,0,136,717),2879=>array(-522,762,-17,918),2880=>array(-25,1,213,920),2881=>array(-443,-264,123,-51),2882=>array(-359,-271,171,-17),2883=>array(-325,-271,102,-18),2887=>array(59,0,436,717),2888=>array(59,0,1005,913),2891=>array(59,0,945,717),2892=>array(59,0,1006,913),2893=>array(-188,-267,161,-45),2902=>array(-515,717,-20,913),2903=>array(-297,0,198,913),2908=>array(39,-176,540,717),2909=>array(39,-176,540,717),2911=>array(23,-53,623,718),2912=>array(39,-16,607,717),2913=>array(39,-30,540,717),2918=>array(44,0,534,717),2919=>array(49,-12,441,717),2920=>array(39,-12,432,717),2921=>array(34,0,541,717),2922=>array(20,0,487,732),2923=>array(0,-21,605,717),2924=>array(34,-15,476,718),2925=>array(29,-9,495,729),2926=>array(82,0,495,717),2927=>array(54,-15,456,719),2928=>array(50,209,544,557),2946=>array(-388,499,-211,675),2947=>array(37,-11,698,702),2949=>array(22,-271,932,429),2950=>array(22,-271,1071,429),2951=>array(19,-271,915,702),2952=>array(70,0,621,417),2953=>array(55,0,988,429),2954=>array(55,0,1221,429),2958=>array(52,-11,721,417),2959=>array(52,-110,726,417),2960=>array(27,-271,813,429),2962=>array(49,-271,711,429),2963=>array(49,-271,711,429),2964=>array(49,-271,1631,429),2965=>array(36,-11,610,417),2969=>array(70,0,759,417),2970=>array(36,-11,565,417),2972=>array(28,-271,815,429),2974=>array(63,-271,928,417),2975=>array(70,0,778,417),2979=>array(52,-11,1290,429),2980=>array(-4,-271,600,417),2984=>array(-0,-271,577,417),2985=>array(52,-11,1007,429),2986=>array(70,0,623,417),2990=>array(70,0,667,429),2991=>array(83,-11,719,417),2992=>array(70,-113,540,417),2993=>array(2,-271,650,429),2994=>array(52,-11,768,510),2995=>array(52,-11,866,429),2996=>array(62,-271,665,429),2997=>array(52,-11,803,429),2999=>array(52,-271,1067,429),3000=>array(52,-11,1046,510),3001=>array(0,-271,1207,429),3006=>array(70,0,542,417),3007=>array(-245,1,112,702),3008=>array(-282,417,94,702),3009=>array(-117,145,458,417),3010=>array(-117,-52,754,636),3014=>array(61,-12,685,701),3015=>array(56,-11,659,702),3016=>array(52,-11,901,429),3018=>array(61,-12,1661,701),3019=>array(56,-11,1661,702),3020=>array(61,-12,1989,701),3021=>array(-364,523,-237,650),3031=>array(52,-11,866,429),3047=>array(36,-11,610,417),3048=>array(55,0,988,429),3049=>array(70,0,727,417),3050=>array(36,-11,682,417),3051=>array(70,-208,913,645),3052=>array(36,-11,857,417),3053=>array(52,-11,721,417),3054=>array(22,-271,932,429),3055=>array(36,-11,776,417),3056=>array(83,-11,662,702),3057=>array(71,0,714,429),3058=>array(-4,-271,745,417),3073=>array(57,-6,335,481),3074=>array(57,-13,544,471),3075=>array(65,-12,280,474),3077=>array(54,-11,667,474),3078=>array(54,-11,732,473),3079=>array(36,-229,513,472),3080=>array(24,-11,1108,664),3081=>array(57,-11,634,682),3082=>array(57,-11,996,682),3083=>array(57,-11,1239,474),3084=>array(44,-11,856,586),3086=>array(44,-11,556,702),3087=>array(44,-11,556,839),3088=>array(54,-11,656,475),3090=>array(57,-11,610,471),3091=>array(57,-11,610,642),3092=>array(6,-11,856,688),3093=>array(36,-11,474,664),3094=>array(51,-137,620,476),3095=>array(39,-14,510,664),3096=>array(35,-137,874,664),3097=>array(57,-11,610,472),3098=>array(24,-11,630,664),3099=>array(24,-137,630,664),3100=>array(57,-11,610,474),3101=>array(57,-136,1146,664),3102=>array(36,-229,715,472),3103=>array(57,-11,829,550),3104=>array(57,-11,540,664),3105=>array(57,-11,659,664),3106=>array(57,-137,659,664),3107=>array(63,-11,752,474),3108=>array(57,-11,659,664),3109=>array(60,-137,643,664),3110=>array(60,-11,643,664),3111=>array(60,-137,643,664),3112=>array(44,-11,547,664),3114=>array(35,-11,563,664),3115=>array(35,-137,563,664),3116=>array(57,-11,621,473),3117=>array(57,-137,663,664),3118=>array(44,-11,873,664),3119=>array(57,-12,1144,664),3120=>array(57,-11,540,664),3121=>array(57,-12,837,476),3122=>array(57,-11,571,474),3123=>array(48,-11,561,664),3125=>array(44,-11,561,664),3126=>array(48,-11,524,664),3127=>array(35,-137,759,664),3128=>array(24,-11,581,664),3129=>array(31,-11,893,664),3134=>array(6,305,626,545),3135=>array(17,462,281,785),3136=>array(10,462,289,980),3137=>array(-48,-9,302,474),3138=>array(-48,-9,665,545),3139=>array(-203,-271,294,474),3140=>array(-216,-271,687,473),3142=>array(6,466,618,688),3143=>array(6,466,617,889),3144=>array(6,-271,894,688),3146=>array(6,470,843,715),3147=>array(6,470,843,908),3148=>array(6,449,970,688),3149=>array(39,465,655,866),3157=>array(47,767,289,980),3158=>array(-670,-271,109,-31),3168=>array(57,-11,1602,545),3169=>array(44,-11,1263,545),3174=>array(158,-14,682,510),3175=>array(88,-14,752,510),3176=>array(54,0,726,510),3177=>array(199,-13,609,512),3178=>array(136,-12,704,519),3179=>array(60,-14,781,521),3180=>array(106,0,798,510),3181=>array(201,-15,668,513),3182=>array(65,-13,815,510),3183=>array(106,0,798,510),3202=>array(46,84,394,554),3203=>array(46,84,205,553),3205=>array(47,84,608,602),3206=>array(46,84,625,602),3207=>array(37,84,595,602),3208=>array(33,84,850,752),3209=>array(46,84,911,602),3210=>array(46,84,1247,602),3211=>array(37,84,1000,752),3212=>array(37,84,695,602),3214=>array(37,84,606,602),3215=>array(37,84,606,647),3216=>array(44,84,615,602),3218=>array(37,84,630,602),3219=>array(37,84,630,775),3220=>array(38,84,631,774),3221=>array(49,84,415,752),3222=>array(17,84,700,713),3223=>array(51,84,493,752),3224=>array(44,-79,742,752),3225=>array(37,84,630,602),3226=>array(37,84,633,752),3227=>array(46,-79,614,752),3228=>array(37,84,630,602),3229=>array(54,-79,1127,752),3230=>array(37,84,889,602),3231=>array(59,84,627,651),3232=>array(54,84,508,752),3233=>array(54,84,625,752),3234=>array(54,-79,625,752),3235=>array(54,84,682,602),3236=>array(46,84,500,752),3237=>array(54,-79,626,752),3238=>array(54,84,626,752),3239=>array(54,-79,626,752),3240=>array(46,46,514,752),3242=>array(46,84,620,752),3243=>array(46,-79,619,753),3244=>array(37,84,632,602),3245=>array(37,-79,643,752),3246=>array(49,84,928,752),3247=>array(46,84,1057,752),3248=>array(54,84,508,752),3249=>array(49,84,628,602),3250=>array(46,84,615,602),3251=>array(42,84,507,752),3253=>array(49,84,620,752),3254=>array(49,84,506,752),3255=>array(49,70,620,752),3256=>array(44,84,499,752),3257=>array(49,84,675,752),3262=>array(-21,84,370,588),3263=>array(-13,339,307,702),3264=>array(-13,46,635,702),3265=>array(-5,84,312,563),3266=>array(-5,84,673,560),3267=>array(22,-173,364,236),3268=>array(24,-173,614,253),3270=>array(-79,354,258,774),3271=>array(-79,46,606,774),3272=>array(-79,-173,438,774),3274=>array(-79,84,868,774),3275=>array(-79,46,1188,774),3276=>array(-160,276,395,774),3277=>array(-22,335,329,703),3285=>array(49,46,299,560),3286=>array(25,-173,364,301),3294=>array(49,84,624,602),3296=>array(37,84,1654,752),3297=>array(37,84,943,602),3302=>array(42,84,507,686),3303=>array(34,84,515,685),3304=>array(22,98,507,688),3305=>array(52,84,527,684),3306=>array(38,84,515,684),3307=>array(33,84,516,688),3308=>array(42,98,529,687),3309=>array(47,98,525,684),3310=>array(36,84,520,687),3311=>array(46,84,521,667),3330=>array(45,-9,323,269),3331=>array(49,-9,256,464),3333=>array(49,-9,1152,464),3334=>array(49,-173,1309,464),3335=>array(49,-232,856,464),3336=>array(49,-232,1411,464),3337=>array(49,-232,586,464),3338=>array(49,-232,1149,464),3339=>array(44,-271,817,464),3340=>array(49,-9,908,465),3342=>array(44,-271,1157,464),3343=>array(44,-271,1153,464),3344=>array(49,-271,1785,465),3346=>array(49,-9,601,464),3347=>array(49,-9,1065,464),3348=>array(49,-9,1146,464),3349=>array(42,-8,819,464),3350=>array(49,-9,907,465),3351=>array(44,-10,830,464),3352=>array(39,0,1279,464),3353=>array(49,-9,916,465),3354=>array(15,0,940,464),3355=>array(15,-9,1217,464),3356=>array(44,-51,663,464),3357=>array(49,-9,1410,464),3358=>array(49,-9,1166,465),3359=>array(39,-9,524,464),3360=>array(43,-9,517,464),3361=>array(44,-9,1146,464),3362=>array(44,-9,1195,465),3363=>array(49,-12,1219,465),3364=>array(49,-9,830,464),3365=>array(76,0,893,464),3366=>array(49,-9,501,464),3367=>array(49,-9,835,467),3368=>array(44,-12,830,464),3370=>array(44,-9,956,464),3371=>array(44,-9,1104,464),3372=>array(49,-9,1258,465),3373=>array(54,0,504,464),3374=>array(71,0,572,464),3375=>array(44,-9,905,464),3376=>array(49,-9,594,464),3377=>array(44,-8,506,464),3378=>array(76,0,869,464),3379=>array(44,-232,589,464),3380=>array(44,-9,514,464),3381=>array(49,-7,884,464),3382=>array(44,-9,888,464),3383=>array(44,-9,1043,464),3384=>array(44,-9,1146,464),3385=>array(44,-9,1063,464),3390=>array(42,-6,426,464),3391=>array(0,0,330,651),3392=>array(0,0,354,651),3393=>array(39,-271,301,466),3394=>array(39,-271,301,466),3395=>array(8,-271,458,466),3398=>array(49,-9,591,465),3399=>array(49,-8,476,464),3400=>array(49,-9,1230,465),3402=>array(49,-9,1319,465),3403=>array(49,-8,1209,464),3404=>array(49,-9,1398,465),3405=>array(-300,520,-19,721),3415=>array(39,-9,504,464),3424=>array(44,-271,817,464),3425=>array(49,-173,1058,465),3430=>array(49,-9,1080,464),3431=>array(15,-143,852,464),3432=>array(44,-7,840,464),3433=>array(44,-9,1166,464),3434=>array(44,-9,643,651),3435=>array(54,-243,918,651),3436=>array(44,-271,1162,464),3437=>array(49,-271,591,464),3438=>array(49,-271,884,464),3439=>array(44,-9,848,651),3585=>array(54,0,520,558),3586=>array(30,0,573,558),3587=>array(30,0,590,559),3588=>array(52,0,530,558),3589=>array(52,0,530,560),3590=>array(30,-5,590,559),3591=>array(25,-5,396,558),3592=>array(26,-5,481,558),3593=>array(30,-5,622,558),3594=>array(30,0,634,592),3595=>array(30,0,651,592),3596=>array(54,-5,741,558),3597=>array(54,-208,783,558),3598=>array(30,-203,545,558),3599=>array(30,-203,545,558),3600=>array(54,-206,477,560),3601=>array(30,0,710,559),3602=>array(52,-5,751,560),3603=>array(54,-5,857,558),3604=>array(52,0,530,558),3605=>array(52,0,530,560),3606=>array(54,-5,520,558),3607=>array(30,0,575,558),3608=>array(54,0,477,560),3609=>array(30,-5,622,558),3610=>array(30,0,533,558),3611=>array(30,0,533,830),3612=>array(78,0,552,558),3613=>array(78,0,552,830),3614=>array(30,0,620,558),3615=>array(30,0,620,830),3616=>array(30,-5,545,558),3617=>array(30,-5,506,558),3618=>array(75,0,513,558),3619=>array(54,-5,437,560),3620=>array(54,-199,520,558),3621=>array(44,-5,499,558),3622=>array(30,-199,545,558),3623=>array(19,-5,444,558),3624=>array(52,0,562,664),3625=>array(30,0,637,558),3626=>array(44,-5,544,659),3627=>array(30,0,584,558),3628=>array(30,0,684,723),3629=>array(36,0,491,558),3630=>array(61,0,545,656),3631=>array(30,0,442,558),3632=>array(44,49,418,510),3633=>array(-364,631,10,824),3634=>array(26,0,421,558),3635=>array(-223,0,421,767),3636=>array(-493,612,-109,775),3637=>array(-493,612,-109,800),3638=>array(-493,612,-64,800),3639=>array(-493,612,-109,800),3640=>array(-201,-206,-85,-34),3641=>array(-337,-206,-89,-34),3642=>array(-157,-115,-75,-33),3647=>array(84,-103,625,782),3648=>array(75,-5,272,553),3649=>array(75,-5,541,553),3650=>array(27,-5,466,830),3651=>array(30,-5,485,828),3652=>array(10,-5,485,828),3653=>array(26,-199,421,558),3654=>array(30,-199,431,559),3655=>array(-424,603,-47,849),3656=>array(-167,858,-109,1031),3657=>array(-293,858,1,1065),3658=>array(-342,858,98,1056),3659=>array(-225,858,-52,1031),3660=>array(-330,861,-18,1078),3661=>array(-223,609,-65,767),3662=>array(-203,858,-42,1067),3663=>array(60,-5,495,430),3664=>array(60,-5,538,428),3665=>array(50,-5,590,428),3666=>array(75,0,613,611),3667=>array(75,-5,615,428),3668=>array(50,-5,637,611),3669=>array(50,-5,637,611),3670=>array(18,-5,585,611),3671=>array(75,-5,789,574),3672=>array(60,-5,659,574),3673=>array(75,-5,715,574),3674=>array(30,0,598,558),3675=>array(40,-5,964,447),3713=>array(55,-6,721,587),3714=>array(53,-15,664,587),3716=>array(54,-5,670,587),3719=>array(34,-207,470,587),3720=>array(37,-18,636,587),3722=>array(54,-210,629,587),3725=>array(54,-5,670,588),3732=>array(54,-5,665,587),3733=>array(54,-6,780,587),3734=>array(45,-257,711,587),3735=>array(55,-5,862,587),3737=>array(54,-11,690,589),3738=>array(55,-5,686,587),3739=>array(55,-5,686,707),3740=>array(54,-5,780,593),3741=>array(54,-5,780,707),3742=>array(54,-5,800,587),3743=>array(54,-5,800,707),3745=>array(55,-11,721,589),3746=>array(54,-5,670,707),3747=>array(54,-7,643,587),3749=>array(46,-7,646,587),3751=>array(46,-7,646,587),3754=>array(58,-7,673,587),3755=>array(55,-5,862,587),3757=>array(54,-7,671,587),3758=>array(53,-7,664,595),3759=>array(54,-21,604,680),3760=>array(57,113,382,578),3761=>array(57,847,482,1049),3762=>array(34,-5,422,587),3763=>array(1,-5,422,788),3764=>array(139,805,639,1059),3765=>array(139,805,713,1059),3766=>array(139,805,639,1059),3767=>array(139,805,713,1059),3768=>array(308,-269,470,-26),3769=>array(248,-263,528,-15),3771=>array(145,838,635,1060),3772=>array(147,-257,632,-72),3773=>array(55,-5,616,829),3776=>array(34,-5,386,576),3777=>array(34,-5,772,576),3778=>array(28,-5,410,1001),3779=>array(17,-5,429,1037),3780=>array(46,-5,311,1025),3782=>array(34,-267,517,579),3784=>array(349,806,429,1012),3785=>array(148,808,630,1035),3786=>array(163,805,609,1015),3787=>array(281,805,497,1019),3788=>array(212,812,560,1049),3789=>array(308,806,470,967),3792=>array(54,-7,667,578),3793=>array(54,-5,665,578),3794=>array(67,-5,557,796),3795=>array(44,-5,665,829),3796=>array(54,-5,632,776),3797=>array(54,-5,632,776),3798=>array(54,-5,780,829),3799=>array(55,-257,702,579),3800=>array(54,-171,670,579),3801=>array(54,-5,841,577),3804=>array(55,-11,1218,579),3805=>array(55,-11,1218,579),3840=>array(52,207,573,983),3841=>array(52,232,534,864),3842=>array(11,274,571,864),3843=>array(11,274,593,864),3844=>array(0,227,583,720),3845=>array(107,227,464,720),3846=>array(0,-174,583,720),3847=>array(-152,393,649,720),3848=>array(141,-174,512,809),3849=>array(80,81,520,716),3850=>array(34,-62,576,799),3851=>array(92,522,508,716),3852=>array(92,-117,508,716),3853=>array(260,-174,340,716),3854=>array(190,-174,410,716),3855=>array(250,-174,350,716),3856=>array(187,-174,413,716),3857=>array(179,-174,421,716),3858=>array(-20,-124,620,719),3859=>array(21,126,579,706),3860=>array(238,403,371,681),3861=>array(128,254,472,716),3862=>array(128,320,477,716),3863=>array(99,378,510,657),3864=>array(159,-9,537,322),3865=>array(260,-201,340,300),3866=>array(241,459,359,577),3867=>array(151,459,449,577),3868=>array(151,419,449,687),3869=>array(123,346,476,683),3870=>array(66,426,520,607),3871=>array(129,448,455,584),3872=>array(128,-13,472,374),3873=>array(126,-149,444,374),3874=>array(40,-86,530,374),3875=>array(97,-176,507,402),3876=>array(27,19,560,339),3877=>array(80,-13,541,374),3878=>array(33,-42,547,434),3879=>array(24,-13,568,390),3880=>array(57,-63,485,401),3881=>array(82,-82,534,374),3882=>array(-65,-149,653,374),3883=>array(-65,-86,653,374),3884=>array(-65,-176,653,402),3885=>array(-65,19,653,339),3886=>array(-65,-13,653,374),3887=>array(-65,-42,653,434),3888=>array(-65,-13,653,390),3889=>array(-65,-63,653,401),3890=>array(-65,-82,653,374),3891=>array(-65,-13,653,374),3892=>array(227,359,373,609),3893=>array(238,-1,371,150),3894=>array(81,159,519,619),3895=>array(251,52,349,150),3896=>array(87,431,495,735),3897=>array(355,538,551,706),3898=>array(2,419,587,687),3899=>array(13,419,598,687),3900=>array(56,-201,484,837),3901=>array(116,-201,544,837),3902=>array(238,-201,457,180),3903=>array(143,-201,362,180),3904=>array(23,27,558,716),3905=>array(42,207,558,716),3906=>array(22,27,558,716),3907=>array(22,-174,558,716),3908=>array(72,207,528,716),3909=>array(54,207,541,716),3910=>array(43,207,557,716),3911=>array(72,207,528,716),3913=>array(96,27,488,726),3914=>array(72,27,528,716),3915=>array(62,207,538,716),3916=>array(72,27,528,716),3917=>array(72,-174,528,716),3918=>array(102,27,500,716),3919=>array(72,27,528,716),3920=>array(62,207,538,716),3921=>array(72,27,528,716),3922=>array(72,-174,528,716),3923=>array(100,27,498,716),3924=>array(72,207,558,716),3925=>array(72,207,558,716),3926=>array(72,207,558,716),3927=>array(72,-174,558,716),3928=>array(30,207,558,716),3929=>array(54,207,601,864),3930=>array(43,207,601,864),3931=>array(72,207,621,864),3932=>array(72,-174,621,864),3933=>array(31,207,558,726),3934=>array(62,27,542,716),3935=>array(62,207,538,716),3936=>array(72,187,580,716),3937=>array(72,207,558,716),3938=>array(86,207,580,716),3939=>array(72,207,558,716),3940=>array(19,27,538,716),3941=>array(62,27,581,716),3942=>array(72,207,558,716),3943=>array(72,27,528,716),3944=>array(52,207,558,716),3945=>array(23,-174,558,716),3953=>array(208,-51,414,140),3954=>array(87,625,539,864),3955=>array(87,-51,539,864),3956=>array(72,-70,524,153),3957=>array(105,-201,524,180),3958=>array(61,41,513,864),3959=>array(61,-201,513,864),3960=>array(61,-11,513,864),3961=>array(61,-201,513,864),3962=>array(137,643,365,777),3963=>array(137,643,405,897),3964=>array(67,643,573,829),3965=>array(67,643,573,929),3966=>array(241,736,359,854),3967=>array(399,180,517,448),3968=>array(61,625,513,864),3969=>array(61,-51,513,864),3970=>array(193,625,391,852),3971=>array(193,625,391,819),3972=>array(307,-201,535,-67),3973=>array(96,-54,488,726),3974=>array(186,461,432,864),3975=>array(288,666,312,864),3976=>array(162,609,438,864),3977=>array(85,575,515,864),3978=>array(165,634,455,864),3979=>array(163,652,486,864),3984=>array(75,-201,510,180),3985=>array(90,-201,510,180),3986=>array(74,-200,510,180),3987=>array(179,-201,413,180),3988=>array(115,-201,485,180),3989=>array(100,-201,496,180),3991=>array(115,-201,485,180),3993=>array(134,-201,453,186),3994=>array(115,-201,485,180),3995=>array(107,-201,493,180),3996=>array(115,-201,485,180),3997=>array(201,-201,399,180),3998=>array(139,-201,463,180),3999=>array(115,-201,485,180),4000=>array(107,-201,493,180),4001=>array(115,-201,485,180),4002=>array(201,-201,399,180),4003=>array(137,-201,461,180),4004=>array(115,-201,510,180),4005=>array(115,-201,510,180),4006=>array(115,-201,510,180),4007=>array(201,-201,413,180),4008=>array(81,-201,510,180),4009=>array(100,-201,545,301),4010=>array(91,-201,545,301),4011=>array(115,-201,561,301),4012=>array(201,-201,440,245),4013=>array(81,-201,510,188),4017=>array(115,-201,510,180),4018=>array(126,-201,528,180),4019=>array(115,-201,510,180),4020=>array(72,-201,493,180),4021=>array(107,-201,528,180),4022=>array(115,-201,510,180),4023=>array(132,-201,468,180),4025=>array(179,-201,413,180),4256=>array(42,-15,633,716),4257=>array(45,-3,677,716),4258=>array(45,-142,695,716),4259=>array(42,-15,657,716),4260=>array(45,0,543,716),4261=>array(47,0,745,716),4262=>array(1,-7,630,715),4263=>array(35,0,740,716),4264=>array(24,0,494,716),4265=>array(66,0,568,716),4266=>array(45,-7,748,716),4267=>array(34,-7,677,716),4268=>array(66,0,563,716),4269=>array(35,-15,681,732),4270=>array(-1,-15,639,719),4271=>array(-1,-209,624,721),4272=>array(34,-15,689,716),4273=>array(66,-15,581,716),4274=>array(66,0,547,716),4275=>array(35,-15,681,732),4276=>array(35,-209,644,732),4277=>array(34,-209,671,716),4278=>array(66,0,577,732),4279=>array(52,0,557,716),4280=>array(50,-15,557,716),4281=>array(66,0,563,716),4282=>array(35,-163,593,732),4283=>array(34,-7,736,716),4284=>array(66,-209,547,716),4285=>array(49,-15,614,732),4286=>array(66,0,563,716),4287=>array(-66,-171,660,716),4288=>array(45,-15,701,716),4289=>array(66,0,552,716),4290=>array(23,-15,571,716),4291=>array(34,0,539,716),4292=>array(58,-209,618,716),4293=>array(34,-15,758,716),4304=>array(36,-12,398,490),4305=>array(37,-12,519,721),4306=>array(42,-256,523,455),4307=>array(36,-251,836,454),4308=>array(20,-256,472,452),4309=>array(30,-256,498,451),4310=>array(24,-12,689,734),4311=>array(34,-16,834,454),4312=>array(34,-16,495,452),4313=>array(30,-256,498,451),4314=>array(36,-251,921,449),4315=>array(34,-12,486,728),4316=>array(66,-12,518,723),4317=>array(34,-33,700,449),4318=>array(34,-12,502,727),4319=>array(40,-256,508,466),4320=>array(34,-16,651,727),4321=>array(66,-12,512,716),4322=>array(34,-256,772,623),4323=>array(22,-257,745,449),4324=>array(34,-256,743,451),4325=>array(34,-257,436,716),4326=>array(36,-251,655,449),4327=>array(44,-257,446,452),4328=>array(34,-12,486,734),4329=>array(66,0,451,733),4330=>array(45,-256,534,452),4331=>array(34,-12,486,716),4332=>array(32,-256,562,734),4333=>array(34,-257,530,732),4334=>array(66,-12,518,716),4335=>array(32,-238,771,450),4336=>array(35,-12,514,736),4337=>array(40,-12,619,716),4338=>array(10,-12,549,453),4339=>array(23,-256,478,450),4340=>array(34,-257,448,495),4341=>array(43,-250,549,583),4342=>array(35,-256,788,715),4347=>array(87,-12,449,464),4352=>array(129,91,796,665),4353=>array(114,91,844,665),4354=>array(204,90,873,665),4355=>array(184,90,838,664),4356=>array(149,90,888,665),4357=>array(173,90,827,665),4358=>array(215,90,785,665),4359=>array(215,90,785,665),4360=>array(145,88,855,665),4361=>array(107,76,882,663),4362=>array(110,78,890,663),4363=>array(187,92,813,666),4364=>array(109,76,880,665),4365=>array(105,80,895,666),4366=>array(109,76,880,665),4367=>array(206,90,790,663),4368=>array(189,91,837,664),4369=>array(187,90,813,665),4370=>array(156,88,844,665),4371=>array(144,91,844,665),4372=>array(144,93,881,665),4373=>array(144,90,888,665),4374=>array(144,89,853,665),4375=>array(149,89,842,665),4376=>array(149,85,881,665),4377=>array(149,85,887,665),4378=>array(149,85,876,666),4379=>array(232,78,789,722),4380=>array(142,89,853,665),4381=>array(232,78,768,711),4382=>array(145,88,844,665),4383=>array(145,88,881,665),4384=>array(145,88,888,665),4385=>array(145,78,884,664),4386=>array(111,78,889,665),4387=>array(101,78,933,665),4388=>array(93,78,907,665),4389=>array(101,78,962,665),4390=>array(101,78,962,666),4391=>array(140,78,885,666),4392=>array(140,78,885,665),4393=>array(145,88,855,665),4394=>array(145,88,868,665),4395=>array(232,78,768,725),4396=>array(197,78,803,728),4397=>array(130,78,844,665),4398=>array(130,78,858,665),4399=>array(130,78,888,665),4400=>array(125,78,887,665),4401=>array(125,78,860,665),4402=>array(125,78,868,665),4403=>array(57,78,889,665),4404=>array(57,78,949,663),4405=>array(125,78,876,663),4406=>array(117,78,883,666),4407=>array(119,78,885,665),4408=>array(125,78,873,663),4409=>array(125,78,855,665),4410=>array(125,78,868,665),4411=>array(125,78,876,666),4412=>array(216,-1,702,716),4413=>array(92,-1,860,716),4414=>array(298,-1,784,716),4415=>array(140,-1,908,716),4416=>array(258,93,742,659),4417=>array(125,91,844,665),4418=>array(125,90,888,665),4419=>array(125,89,860,665),4420=>array(125,89,853,665),4421=>array(125,78,880,663),4422=>array(125,119,886,664),4423=>array(125,122,874,617),4424=>array(125,78,885,666),4425=>array(125,78,885,665),4426=>array(125,90,855,665),4427=>array(125,91,868,665),4428=>array(232,131,768,551),4429=>array(119,78,874,666),4430=>array(97,-1,903,720),4431=>array(92,-1,903,720),4432=>array(97,-1,903,720),4433=>array(97,-1,908,720),4434=>array(123,78,873,665),4435=>array(123,78,876,666),4436=>array(97,-1,903,814),4437=>array(97,-1,903,814),4438=>array(127,89,853,665),4439=>array(202,78,798,714),4440=>array(100,91,900,666),4441=>array(182,78,818,573),4449=>array(421,-64,711,842),4450=>array(345,-64,655,842),4451=>array(381,-64,676,842),4452=>array(340,-64,661,842),4453=>array(302,-65,597,841),4454=>array(186,-63,677,843),4455=>array(332,-64,626,842),4456=>array(226,-63,687,843),4457=>array(60,197,940,614),4458=>array(46,-64,931,842),4459=>array(51,-64,892,842),4460=>array(61,-64,857,842),4461=>array(60,197,940,615),4462=>array(79,76,921,554),4463=>array(68,-65,882,841),4464=>array(53,-63,912,843),4465=>array(70,-64,867,842),4466=>array(72,111,928,589),4467=>array(57,357,943,436),4468=>array(67,-64,867,842),4469=>array(462,-64,538,842),4470=>array(62,7,943,842),4471=>array(79,-64,936,842),4472=>array(62,7,943,842),4473=>array(62,-3,938,842),4474=>array(62,7,943,841),4475=>array(79,-64,920,841),4476=>array(57,22,943,841),4477=>array(62,7,943,842),4478=>array(79,-64,920,842),4479=>array(63,-70,907,841),4480=>array(63,-68,907,843),4481=>array(63,-68,907,843),4482=>array(62,22,943,783),4483=>array(62,-64,943,783),4484=>array(62,-70,907,842),4485=>array(62,-69,907,842),4486=>array(62,-70,907,842),4487=>array(62,22,943,782),4488=>array(62,-69,907,842),4489=>array(68,-69,936,842),4490=>array(68,-69,907,842),4491=>array(57,22,943,841),4492=>array(63,-68,907,843),4493=>array(79,-64,920,762),4494=>array(68,-69,936,842),4495=>array(68,-70,907,841),4496=>array(68,-63,912,843),4497=>array(68,-70,907,842),4498=>array(63,-68,907,843),4499=>array(79,-64,921,756),4500=>array(68,-64,867,842),4501=>array(79,-64,921,615),4502=>array(79,197,921,615),4503=>array(65,-64,921,842),4504=>array(321,-63,812,843),4505=>array(311,-63,772,843),4506=>array(62,22,943,842),4507=>array(79,-64,921,842),4508=>array(57,22,943,842),4509=>array(410,50,584,842),4510=>array(410,280,584,463),4511=>array(410,-65,719,841),4512=>array(79,-64,921,601),4513=>array(333,-69,667,842),4514=>array(329,280,671,463),4520=>array(129,91,796,665),4521=>array(114,91,844,665),4522=>array(114,78,880,665),4523=>array(204,90,873,665),4524=>array(144,78,880,666),4525=>array(144,91,876,666),4526=>array(184,90,838,664),4527=>array(173,90,827,665),4528=>array(149,85,842,665),4529=>array(149,85,852,665),4530=>array(149,85,853,665),4531=>array(149,78,880,665),4532=>array(149,85,855,665),4533=>array(149,85,868,665),4534=>array(149,85,876,666),4535=>array(215,90,785,665),4536=>array(215,90,785,665),4537=>array(145,78,880,664),4538=>array(107,76,882,663),4539=>array(110,78,890,663),4540=>array(187,92,813,666),4541=>array(109,76,880,665),4542=>array(109,76,880,665),4543=>array(206,90,790,663),4544=>array(189,91,837,664),4545=>array(187,90,813,665),4546=>array(156,88,844,665),4547=>array(114,85,887,665),4548=>array(75,78,913,665),4549=>array(144,91,844,665),4550=>array(144,90,888,665),4551=>array(144,78,880,665),4552=>array(144,93,886,665),4553=>array(144,90,855,665),4554=>array(149,89,842,665),4555=>array(149,85,887,665),4556=>array(76,78,961,665),4557=>array(149,85,881,665),4558=>array(149,85,888,665),4559=>array(76,85,944,666),4560=>array(149,85,887,665),4561=>array(76,85,920,665),4562=>array(76,78,973,665),4563=>array(76,78,973,665),4564=>array(76,85,946,666),4565=>array(149,85,848,728),4566=>array(80,78,960,665),4567=>array(149,85,886,665),4568=>array(149,85,873,665),4569=>array(149,85,878,666),4570=>array(142,89,844,665),4571=>array(142,85,887,665),4572=>array(142,89,853,665),4573=>array(142,78,880,665),4574=>array(84,78,960,665),4575=>array(142,89,886,665),4576=>array(142,78,885,665),4577=>array(142,89,876,666),4578=>array(232,78,768,711),4579=>array(145,85,887,665),4580=>array(145,88,868,665),4581=>array(145,88,876,666),4582=>array(232,78,768,725),4583=>array(130,78,844,665),4584=>array(130,78,888,665),4585=>array(125,78,887,665),4586=>array(125,78,868,665),4587=>array(258,93,742,659),4588=>array(125,91,844,665),4589=>array(72,91,913,665),4590=>array(125,122,874,617),4591=>array(125,90,873,663),4592=>array(232,131,768,551),4593=>array(125,78,880,663),4594=>array(125,119,886,664),4595=>array(127,89,853,665),4596=>array(202,78,798,714),4597=>array(116,91,881,666),4598=>array(116,85,887,666),4599=>array(116,89,852,666),4600=>array(116,89,853,666),4601=>array(182,78,818,573),7680=>array(-1,-210,668,716),7681=>array(38,-210,516,530),7682=>array(74,0,615,881),7683=>array(67,-12,517,881),7684=>array(74,-210,615,716),7685=>array(67,-210,517,716),7686=>array(74,-179,615,716),7687=>array(67,-179,517,716),7688=>array(51,-209,684,898),7689=>array(39,-196,491,728),7690=>array(80,0,672,881),7691=>array(36,-12,486,881),7692=>array(80,-210,672,716),7693=>array(36,-210,486,716),7694=>array(80,-179,672,716),7695=>array(36,-179,486,716),7696=>array(80,-205,672,716),7697=>array(36,-205,486,716),7698=>array(80,-210,672,716),7699=>array(36,-210,486,716),7700=>array(79,0,614,1050),7701=>array(39,-12,517,882),7702=>array(79,0,614,1050),7703=>array(39,-12,517,882),7704=>array(79,-210,614,716),7705=>array(39,-210,517,530),7706=>array(79,-185,614,716),7707=>array(39,-185,517,530),7708=>array(79,-205,614,902),7709=>array(39,-205,517,722),7710=>array(80,0,563,881),7711=>array(8,0,311,881),7712=>array(52,-12,714,865),7713=>array(34,-210,491,697),7714=>array(80,0,642,881),7715=>array(67,0,490,881),7716=>array(80,-210,642,716),7717=>array(67,-210,490,716),7718=>array(80,0,642,881),7719=>array(67,0,490,881),7720=>array(27,-205,642,716),7721=>array(2,-205,490,716),7722=>array(80,-200,642,716),7723=>array(67,-200,490,716),7724=>array(-28,-185,299,716),7725=>array(-58,-185,270,716),7726=>array(3,0,274,1066),7727=>array(5,0,276,896),7728=>array(73,0,665,898),7729=>array(66,0,496,898),7730=>array(73,-210,665,716),7731=>array(66,-210,496,716),7732=>array(73,-179,665,716),7733=>array(66,-179,496,716),7734=>array(75,-210,523,716),7735=>array(67,-210,158,716),7736=>array(75,-210,523,865),7737=>array(-41,-210,264,865),7738=>array(75,-179,523,716),7739=>array(-42,-179,262,716),7740=>array(75,-210,523,716),7741=>array(-39,-210,270,716),7742=>array(76,0,757,898),7743=>array(65,0,769,728),7744=>array(76,0,757,881),7745=>array(65,0,769,711),7746=>array(76,-210,757,716),7747=>array(65,-210,769,530),7748=>array(79,0,642,881),7749=>array(68,0,490,711),7750=>array(79,-210,642,716),7751=>array(68,-210,490,530),7752=>array(79,-179,642,716),7753=>array(68,-179,490,530),7754=>array(79,-210,642,716),7755=>array(68,-210,490,530),7756=>array(47,-12,732,1064),7757=>array(35,-12,521,902),7758=>array(47,-12,732,1035),7759=>array(35,-12,521,865),7760=>array(47,-12,732,1050),7761=>array(35,-12,521,882),7762=>array(47,-12,732,1050),7763=>array(35,-12,521,882),7764=>array(77,0,623,898),7765=>array(68,-199,518,728),7766=>array(77,0,623,881),7767=>array(68,-199,518,711),7768=>array(80,0,711,881),7769=>array(64,0,346,711),7770=>array(80,-210,711,716),7771=>array(64,-210,346,530),7772=>array(80,-210,711,865),7773=>array(14,-210,346,697),7774=>array(80,-179,711,716),7775=>array(8,-179,346,530),7776=>array(45,-12,615,881),7777=>array(31,-12,461,711),7778=>array(45,-210,615,728),7779=>array(31,-210,461,530),7780=>array(45,-12,615,939),7781=>array(31,-12,461,768),7782=>array(45,-12,615,1047),7783=>array(31,-12,461,877),7784=>array(45,-210,615,881),7785=>array(31,-210,461,711),7786=>array(22,0,589,881),7787=>array(17,-7,269,881),7788=>array(22,-210,589,716),7789=>array(17,-210,269,700),7790=>array(22,-179,589,716),7791=>array(-11,-179,293,700),7792=>array(22,-210,589,716),7793=>array(6,-210,315,700),7794=>array(79,-210,642,716),7795=>array(66,-210,487,518),7796=>array(79,-185,642,716),7797=>array(66,-185,487,518),7798=>array(79,-210,642,716),7799=>array(66,-210,487,518),7800=>array(79,-12,642,1072),7801=>array(66,-12,487,902),7802=>array(79,-12,642,1002),7803=>array(66,-12,487,846),7804=>array(6,0,660,886),7805=>array(13,0,488,716),7806=>array(6,-210,660,716),7807=>array(13,-210,488,518),7808=>array(12,0,933,898),7809=>array(5,0,717,728),7810=>array(12,0,933,898),7811=>array(5,0,717,728),7812=>array(12,0,933,881),7813=>array(5,0,717,711),7814=>array(12,0,933,881),7815=>array(5,0,717,711),7816=>array(12,-210,933,716),7817=>array(5,-210,717,518),7818=>array(5,0,661,881),7819=>array(7,0,493,711),7820=>array(5,0,661,881),7821=>array(7,0,493,711),7822=>array(5,0,661,881),7823=>array(16,-210,492,711),7824=>array(18,0,584,898),7825=>array(20,0,479,728),7826=>array(18,-210,584,716),7827=>array(20,-210,479,518),7828=>array(18,-179,584,716),7829=>array(20,-179,479,518),7830=>array(67,-179,490,716),7831=>array(1,-7,272,881),7832=>array(5,0,717,752),7833=>array(16,-210,492,752),7834=>array(38,-12,557,758),7835=>array(8,0,311,881),7840=>array(-1,-210,668,716),7841=>array(38,-210,516,530),7842=>array(-1,0,668,934),7843=>array(38,-12,516,756),7844=>array(-1,0,668,978),7845=>array(38,-12,586,808),7846=>array(-1,0,668,978),7847=>array(-30,-12,516,808),7848=>array(-1,0,668,996),7849=>array(38,-12,573,826),7850=>array(-1,0,668,1058),7851=>array(38,-12,516,888),7852=>array(-1,-210,668,898),7853=>array(38,-210,516,728),7854=>array(-1,0,668,1039),7855=>array(38,-12,516,859),7856=>array(-1,0,668,1039),7857=>array(38,-12,516,859),7858=>array(-1,0,668,1074),7859=>array(38,-12,516,895),7860=>array(-1,0,668,1060),7861=>array(38,-12,516,880),7862=>array(-1,-210,668,902),7863=>array(38,-210,516,722),7864=>array(79,-210,614,716),7865=>array(39,-210,517,530),7866=>array(79,0,614,936),7867=>array(39,-12,517,756),7868=>array(79,0,614,884),7869=>array(39,-12,517,716),7870=>array(79,0,652,978),7871=>array(39,-12,586,808),7872=>array(34,0,614,978),7873=>array(-30,-12,517,808),7874=>array(79,0,638,996),7875=>array(39,-12,573,826),7876=>array(79,0,614,1056),7877=>array(39,-12,517,886),7878=>array(79,-210,614,900),7879=>array(39,-210,517,728),7880=>array(33,0,245,936),7881=>array(33,0,245,756),7882=>array(92,-210,187,716),7883=>array(67,-210,158,716),7884=>array(47,-210,732,728),7885=>array(35,-210,521,530),7886=>array(47,-12,732,936),7887=>array(35,-12,521,756),7888=>array(47,-12,732,978),7889=>array(35,-12,586,808),7890=>array(47,-12,732,978),7891=>array(-30,-12,521,808),7892=>array(47,-12,732,996),7893=>array(35,-12,573,826),7894=>array(47,-12,732,1056),7895=>array(35,-12,521,886),7896=>array(47,-210,732,900),7897=>array(35,-210,521,728),7898=>array(47,-12,776,900),7899=>array(35,-12,555,728),7900=>array(47,-12,776,900),7901=>array(35,-12,555,728),7902=>array(47,-12,776,936),7903=>array(35,-12,555,756),7904=>array(47,-12,776,884),7905=>array(35,-12,555,716),7906=>array(47,-210,776,768),7907=>array(35,-210,555,606),7908=>array(79,-210,642,716),7909=>array(66,-210,487,518),7910=>array(79,-12,642,936),7911=>array(66,-12,487,756),7912=>array(79,-12,776,900),7913=>array(66,-12,625,728),7914=>array(79,-12,776,900),7915=>array(66,-12,625,728),7916=>array(79,-12,776,936),7917=>array(66,-12,625,756),7918=>array(79,-12,776,884),7919=>array(66,-12,625,716),7920=>array(79,-210,776,768),7921=>array(66,-210,625,620),7922=>array(5,0,661,900),7923=>array(16,-210,492,728),7924=>array(5,-210,661,716),7925=>array(16,-210,492,518),7926=>array(5,0,661,936),7927=>array(16,-210,492,756),7928=>array(5,0,661,884),7929=>array(16,-210,492,716),7936=>array(35,-12,541,763),7937=>array(35,-12,541,763),7938=>array(35,-12,541,763),7939=>array(35,-12,541,763),7940=>array(35,-12,541,763),7941=>array(35,-12,541,763),7942=>array(35,-12,541,847),7943=>array(35,-12,541,847),7944=>array(-1,0,668,763),7945=>array(-1,0,668,763),7946=>array(-50,0,681,763),7947=>array(-50,0,681,763),7948=>array(-46,0,681,763),7949=>array(-38,0,681,763),7950=>array(-43,0,719,763),7951=>array(-43,0,719,763),7952=>array(29,-12,405,763),7953=>array(29,-12,405,763),7954=>array(29,-12,405,763),7955=>array(29,-12,405,763),7956=>array(29,-12,405,763),7957=>array(29,-12,405,763),7960=>array(-43,0,639,763),7961=>array(-44,0,639,763),7962=>array(-43,0,770,763),7963=>array(-43,0,770,763),7964=>array(-71,0,770,763),7965=>array(-63,0,769,763),7968=>array(68,-199,490,763),7969=>array(68,-199,490,763),7970=>array(68,-199,490,763),7971=>array(68,-199,490,763),7972=>array(68,-199,490,763),7973=>array(68,-199,490,763),7974=>array(68,-199,490,847),7975=>array(68,-199,490,847),7976=>array(-43,0,667,763),7977=>array(-44,0,667,763),7978=>array(-43,0,798,763),7979=>array(-43,0,798,763),7980=>array(-71,0,798,763),7981=>array(-63,0,798,763),7982=>array(-43,0,843,763),7983=>array(-43,0,843,763),7984=>array(59,0,162,763),7985=>array(53,0,156,763),7986=>array(-13,0,236,763),7987=>array(-13,0,236,763),7988=>array(-15,0,251,763),7989=>array(-15,0,243,763),7990=>array(-36,0,253,847),7991=>array(-36,0,253,847),7992=>array(-43,0,212,763),7993=>array(-44,0,212,763),7994=>array(-43,0,343,763),7995=>array(-43,0,343,763),7996=>array(-71,0,343,763),7997=>array(-63,0,343,763),7998=>array(-43,0,388,763),7999=>array(-43,0,388,763),8000=>array(35,-12,521,763),8001=>array(35,-12,521,763),8002=>array(35,-12,521,763),8003=>array(35,-12,521,763),8004=>array(35,-12,521,763),8005=>array(35,-12,521,763),8008=>array(-30,-12,732,763),8009=>array(-38,-12,732,763),8010=>array(-43,-12,848,763),8011=>array(-31,-12,848,763),8012=>array(-37,-12,848,763),8013=>array(-36,-12,848,763),8016=>array(68,-12,483,763),8017=>array(68,-12,483,763),8018=>array(68,-12,483,763),8019=>array(68,-12,483,763),8020=>array(68,-12,483,763),8021=>array(68,-12,483,763),8022=>array(68,-12,483,847),8023=>array(68,-12,483,847),8025=>array(-43,0,771,763),8027=>array(-43,0,887,763),8029=>array(-43,0,879,763),8031=>array(-43,0,934,763),8032=>array(35,-12,731,763),8033=>array(35,-12,731,763),8034=>array(35,-12,731,763),8035=>array(35,-12,731,763),8036=>array(35,-12,731,763),8037=>array(35,-12,731,763),8038=>array(35,-12,731,847),8039=>array(35,-12,731,847),8040=>array(-30,0,706,763),8041=>array(-38,0,706,763),8042=>array(-43,0,822,763),8043=>array(-43,0,822,763),8044=>array(-43,0,816,763),8045=>array(-43,0,815,763),8046=>array(-43,0,859,763),8047=>array(-43,0,859,763),8048=>array(35,-12,541,736),8049=>array(35,-12,541,736),8050=>array(29,-12,405,736),8051=>array(29,-12,405,736),8052=>array(68,-199,490,736),8053=>array(68,-199,490,736),8054=>array(35,0,155,736),8055=>array(67,0,187,736),8056=>array(35,-12,521,736),8057=>array(35,-12,521,736),8058=>array(68,-12,483,736),8059=>array(68,-12,483,736),8060=>array(35,-12,731,736),8061=>array(35,-12,731,736),8064=>array(35,-208,541,763),8065=>array(35,-208,541,763),8066=>array(35,-208,541,763),8067=>array(35,-208,541,763),8068=>array(35,-208,541,763),8069=>array(35,-208,541,763),8070=>array(35,-208,541,847),8071=>array(35,-208,541,847),8072=>array(-1,-208,668,763),8073=>array(-1,-208,668,763),8074=>array(-50,-208,681,763),8075=>array(-50,-208,681,763),8076=>array(-46,-208,681,763),8077=>array(-38,-208,681,763),8078=>array(-43,-208,719,763),8079=>array(-43,-208,719,763),8080=>array(68,-208,490,763),8081=>array(68,-208,490,763),8082=>array(68,-208,490,763),8083=>array(68,-208,490,763),8084=>array(68,-208,490,763),8085=>array(68,-208,490,763),8086=>array(68,-208,490,847),8087=>array(68,-208,490,847),8088=>array(-43,-208,667,763),8089=>array(-44,-208,667,763),8090=>array(-43,-208,798,763),8091=>array(-43,-208,798,763),8092=>array(-71,-208,798,763),8093=>array(-63,-208,798,763),8094=>array(-43,-208,843,763),8095=>array(-43,-208,843,763),8096=>array(35,-208,731,763),8097=>array(35,-208,731,763),8098=>array(35,-208,731,763),8099=>array(35,-208,731,763),8100=>array(35,-208,731,763),8101=>array(35,-208,731,763),8102=>array(35,-208,731,847),8103=>array(35,-208,731,847),8104=>array(-30,-208,706,763),8105=>array(-38,-208,706,763),8106=>array(-43,-208,822,763),8107=>array(-43,-208,822,763),8108=>array(-43,-208,816,763),8109=>array(-43,-208,815,763),8110=>array(-43,-208,859,763),8111=>array(-43,-208,859,763),8112=>array(35,-12,541,722),8113=>array(35,-12,541,697),8114=>array(35,-208,541,736),8115=>array(35,-208,541,530),8116=>array(35,-208,541,736),8118=>array(35,-12,541,717),8119=>array(35,-208,541,717),8120=>array(-1,0,668,889),8121=>array(-1,0,668,835),8122=>array(-1,0,668,736),8123=>array(-1,0,668,736),8124=>array(-1,-208,668,716),8125=>array(86,579,189,763),8126=>array(111,-208,289,-42),8127=>array(86,579,189,763),8128=>array(-5,590,284,717),8129=>array(-5,591,284,819),8130=>array(68,-208,490,736),8131=>array(68,-208,490,530),8132=>array(68,-208,490,736),8134=>array(68,-199,490,717),8135=>array(68,-208,490,717),8136=>array(-43,0,640,736),8137=>array(-43,0,651,736),8138=>array(-43,0,668,736),8139=>array(-43,0,679,736),8140=>array(80,-208,642,716),8141=>array(16,579,265,763),8142=>array(16,579,282,763),8143=>array(-5,583,284,847),8144=>array(-34,0,255,722),8145=>array(-41,0,264,697),8146=>array(-55,0,276,736),8147=>array(-55,0,276,736),8150=>array(-34,0,255,717),8151=>array(-32,0,257,819),8152=>array(-5,0,284,889),8153=>array(-14,0,291,835),8154=>array(-43,0,213,736),8155=>array(-43,0,213,736),8157=>array(16,579,265,763),8158=>array(16,579,274,763),8159=>array(-5,583,284,847),8160=>array(68,-12,483,722),8161=>array(68,-12,483,697),8162=>array(68,-12,483,736),8163=>array(68,-12,483,736),8164=>array(66,-199,536,763),8165=>array(66,-199,536,763),8166=>array(68,-12,483,717),8167=>array(68,-12,483,819),8168=>array(5,0,661,889),8169=>array(5,0,661,835),8170=>array(-43,0,736,736),8171=>array(-43,0,740,736),8172=>array(-43,0,649,763),8173=>array(-27,600,304,736),8174=>array(-27,600,304,736),8175=>array(70,600,189,736),8178=>array(35,-208,731,736),8179=>array(35,-208,731,518),8180=>array(35,-208,731,736),8182=>array(35,-12,731,717),8183=>array(35,-208,731,717),8184=>array(-17,-12,732,736),8185=>array(-6,-12,732,736),8186=>array(-17,0,706,736),8187=>array(-6,0,706,736),8188=>array(52,-208,706,728),8189=>array(84,600,203,736),8190=>array(88,579,191,763),8208=>array(32,215,301,303),8209=>array(32,215,301,303),8210=>array(-6,223,562,295),8211=>array(-6,223,506,295),8212=>array(-6,223,1006,295),8213=>array(26,223,538,295),8214=>array(92,-85,336,716),8215=>array(-6,-165,506,-35),8216=>array(64,494,166,728),8217=>array(56,482,158,716),8218=>array(53,-132,155,102),8219=>array(64,482,166,716),8220=>array(43,494,297,728),8221=>array(36,482,290,716),8222=>array(36,-132,290,102),8223=>array(44,482,298,716),8224=>array(39,-169,517,699),8225=>array(39,-169,517,706),8226=>array(51,227,299,474),8227=>array(52,197,321,504),8228=>array(89,0,189,100),8229=>array(89,0,467,100),8230=>array(117,0,883,100),8231=>array(89,302,189,402),8240=>array(18,-27,982,728),8241=>array(18,-27,1310,728),8242=>array(46,462,192,716),8243=>array(46,462,342,716),8244=>array(46,462,492,716),8245=>array(30,462,176,716),8246=>array(30,462,326,716),8247=>array(30,462,476,716),8248=>array(30,-175,282,32),8249=>array(44,35,271,481),8250=>array(62,35,289,481),8251=>array(116,-125,883,641),8252=>array(85,0,387,716),8253=>array(46,0,508,747),8254=>array(-6,740,506,790),8255=>array(3,-203,941,4),8256=>array(3,578,941,785),8257=>array(30,-175,282,146),8258=>array(33,-3,786,728),8259=>array(32,185,301,333),8260=>array(-222,-25,393,732),8261=>array(68,-199,262,716),8262=>array(16,-199,210,716),8304=>array(15,349,318,725),8308=>array(11,358,319,725),8309=>array(16,349,313,716),8310=>array(9,349,315,725),8311=>array(36,358,304,716),8312=>array(22,349,312,725),8313=>array(18,349,323,725),8314=>array(37,395,296,654),8315=>array(37,496,296,553),8316=>array(37,436,296,613),8317=>array(32,209,195,769),8318=>array(16,209,178,769),8319=>array(51,358,293,646),8320=>array(15,-24,318,352),8321=>array(52,-15,232,352),8322=>array(12,-15,316,352),8323=>array(16,-24,315,352),8324=>array(11,-15,319,352),8325=>array(16,-24,313,343),8326=>array(9,-24,315,352),8327=>array(36,-15,304,343),8328=>array(22,-24,312,352),8329=>array(18,-24,323,352),8330=>array(37,22,296,281),8331=>array(37,123,296,180),8332=>array(37,63,296,240),8333=>array(32,-164,195,396),8334=>array(16,-164,178,396),8352=>array(20,0,547,719),8353=>array(51,-63,525,782),8354=>array(45,-12,533,728),8355=>array(80,0,554,716),8356=>array(13,-14,528,728),8357=>array(65,-71,769,652),8358=>array(21,0,535,719),8359=>array(21,0,539,716),8360=>array(18,-12,986,716),8361=>array(8,0,929,716),8362=>array(72,0,712,518),8363=>array(67,0,514,723),8364=>array(-14,-12,541,728),8400=>array(28,574,552,716),8401=>array(48,574,572,716),8402=>array(264,-194,336,706),8403=>array(264,-12,336,524),8404=>array(34,419,668,646),8405=>array(32,419,666,646),8406=>array(28,504,555,716),8407=>array(45,504,572,716),8408=>array(146,102,454,410),8409=>array(146,102,465,421),8410=>array(146,91,465,410),8411=>array(112,611,488,707),8412=>array(42,611,558,707),8413=>array(63,-131,837,643),8414=>array(93,-101,807,613),8415=>array(9,-186,891,697),8416=>array(63,-131,837,643),8417=>array(28,504,672,716),8448=>array(46,-27,825,728),8449=>array(46,-27,822,728),8450=>array(37,-15,632,677),8451=>array(44,-12,983,728),8452=>array(41,0,588,662),8453=>array(53,-27,836,728),8454=>array(53,-27,823,728),8455=>array(42,-15,480,677),8456=>array(30,-15,630,677),8457=>array(44,0,873,725),8458=>array(-25,-201,523,327),8459=>array(23,-9,1078,665),8460=>array(46,-20,940,698),8461=>array(19,0,703,662),8462=>array(19,-12,458,694),8463=>array(19,-12,458,694),8464=>array(8,-201,834,654),8465=>array(26,-20,498,677),8466=>array(48,-8,842,664),8467=>array(5,-5,288,627),8468=>array(3,-12,739,716),8469=>array(-12,-11,710,662),8470=>array(79,0,1031,716),8471=>array(0,-9,737,728),8472=>array(48,-216,701,516),8473=>array(19,0,524,662),8474=>array(37,-198,685,677),8475=>array(71,-13,951,658),8476=>array(46,-20,747,686),8477=>array(19,0,677,662),8478=>array(19,0,677,662),8479=>array(19,-176,677,817),8480=>array(93,311,866,723),8481=>array(100,318,1085,716),8482=>array(100,318,861,716),8483=>array(10,-176,711,817),8484=>array(11,0,581,662),8485=>array(50,-192,494,690),8486=>array(28,0,740,677),8487=>array(28,-15,740,662),8488=>array(28,-194,644,687),8489=>array(2,0,245,530),8490=>array(73,0,665,716),8491=>array(-1,0,668,922),8492=>array(105,-5,951,659),8493=>array(53,-20,627,697),8494=>array(35,-12,521,530),8495=>array(31,-4,398,328),8496=>array(75,-6,671,666),8497=>array(35,-6,885,668),8498=>array(47,0,530,716),8499=>array(36,-12,1214,661),8500=>array(37,-6,379,318),8501=>array(64,-19,649,716),8502=>array(67,0,631,716),8503=>array(25,0,325,716),8504=>array(72,-18,630,716),8531=>array(52,-25,815,732),8532=>array(12,-25,815,732),8533=>array(52,-25,813,732),8534=>array(12,-25,813,732),8535=>array(16,-25,813,732),8536=>array(11,-25,813,732),8537=>array(52,-25,813,732),8538=>array(16,-25,813,732),8539=>array(52,-25,804,732),8540=>array(16,-25,804,732),8541=>array(16,-25,804,732),8542=>array(73,-25,804,732),8543=>array(52,-25,727,732),8544=>array(92,0,187,716),8545=>array(92,0,464,716),8546=>array(92,0,741,716),8547=>array(92,0,934,716),8548=>array(6,0,660,716),8549=>array(6,0,843,716),8550=>array(2,0,960,716),8551=>array(2,0,1197,716),8552=>array(92,0,940,716),8553=>array(5,0,661,716),8554=>array(5,0,853,716),8555=>array(5,0,964,716),8556=>array(75,0,523,716),8557=>array(51,-12,683,728),8558=>array(80,0,672,716),8559=>array(76,0,757,716),8560=>array(67,0,155,716),8561=>array(67,0,377,716),8562=>array(67,0,599,716),8563=>array(67,0,697,716),8564=>array(13,0,488,518),8565=>array(13,0,633,716),8566=>array(13,0,855,716),8567=>array(13,0,1077,716),8568=>array(67,0,708,716),8569=>array(7,0,493,518),8570=>array(7,0,645,716),8571=>array(7,0,867,716),8572=>array(67,0,155,716),8573=>array(39,-12,491,530),8574=>array(36,-12,486,716),8575=>array(65,0,769,530),8576=>array(47,0,936,716),8577=>array(80,0,672,716),8578=>array(47,0,936,716),8592=>array(40,100,673,412),8593=>array(201,0,513,662),8594=>array(40,100,673,412),8595=>array(201,0,513,662),8596=>array(40,100,673,412),8597=>array(201,0,513,662),8598=>array(100,102,586,588),8599=>array(128,102,614,588),8600=>array(128,74,614,560),8601=>array(100,74,586,560),8602=>array(40,100,673,412),8603=>array(40,100,673,412),8604=>array(40,100,674,412),8605=>array(39,100,673,412),8606=>array(40,100,673,412),8607=>array(201,0,513,662),8608=>array(40,100,673,412),8609=>array(201,0,513,662),8610=>array(40,100,673,412),8611=>array(40,100,673,412),8612=>array(40,100,673,412),8613=>array(201,0,513,662),8614=>array(40,100,673,412),8615=>array(201,0,513,662),8616=>array(201,0,513,662),8617=>array(40,100,673,482),8618=>array(40,100,673,482),8619=>array(40,100,673,500),8620=>array(40,100,673,500),8621=>array(40,100,774,412),8622=>array(40,100,773,412),8623=>array(199,0,520,662),8624=>array(120,71,553,603),8625=>array(160,71,593,603),8626=>array(120,59,553,591),8627=>array(160,59,593,591),8628=>array(97,94,629,527),8629=>array(120,59,553,591),8630=>array(67,181,638,497),8631=>array(75,181,646,497),8632=>array(81,102,633,662),8633=>array(40,-56,673,568),8634=>array(60,21,740,701),8635=>array(60,21,740,701),8636=>array(40,232,673,412),8637=>array(40,100,673,280),8638=>array(333,0,513,662),8639=>array(201,0,381,662),8640=>array(40,232,673,412),8641=>array(40,100,673,280),8642=>array(333,0,513,662),8643=>array(201,0,381,662),8644=>array(40,-56,673,568),8645=>array(45,0,669,662),8646=>array(40,-56,673,568),8647=>array(40,-56,673,568),8648=>array(45,0,669,662),8649=>array(40,-56,673,568),8650=>array(45,0,669,662),8651=>array(39,30,672,482),8652=>array(40,30,673,482),8653=>array(40,40,673,472),8654=>array(40,40,910,472),8655=>array(40,40,673,472),8656=>array(40,40,673,472),8657=>array(141,0,573,662),8658=>array(40,40,673,472),8659=>array(141,0,573,662),8660=>array(40,40,823,472),8661=>array(141,0,573,783),8662=>array(100,0,688,588),8663=>array(26,0,614,588),8664=>array(26,0,614,588),8665=>array(100,0,688,588),8666=>array(40,40,673,472),8667=>array(40,40,673,472),8668=>array(40,100,773,412),8669=>array(40,100,773,412),8670=>array(201,0,513,662),8671=>array(201,0,513,662),8672=>array(40,100,673,412),8673=>array(201,0,513,662),8674=>array(40,100,673,412),8675=>array(201,0,513,662),8676=>array(40,100,673,412),8677=>array(40,100,673,412),8678=>array(40,40,673,472),8679=>array(141,0,573,662),8680=>array(40,40,673,472),8681=>array(141,0,573,662),8682=>array(141,0,573,662),8704=>array(27,0,573,689),8705=>array(80,-60,528,702),8706=>array(32,-15,486,695),8707=>array(115,0,475,689),8708=>array(115,-73,475,762),8709=>array(46,-23,755,686),8710=>array(6,0,608,688),8711=>array(6,0,608,688),8712=>array(43,33,498,480),8713=>array(43,-57,498,570),8714=>array(89,78,453,435),8715=>array(51,33,506,480),8716=>array(51,-57,506,570),8717=>array(96,78,460,435),8718=>array(98,0,451,512),8719=>array(25,-101,803,751),8720=>array(25,-101,803,751),8721=>array(17,-101,695,752),8722=>array(55,312,529,394),8723=>array(55,0,529,611),8724=>array(55,0,529,627),8725=>array(-222,-25,393,732),8726=>array(0,-24,278,716),8727=>array(33,194,356,499),8728=>array(65,207,335,478),8729=>array(65,207,335,478),8730=>array(41,-19,549,782),8731=>array(41,-19,549,782),8732=>array(41,-19,549,782),8733=>array(75,128,447,384),8734=>array(20,99,529,414),8735=>array(55,0,529,474),8736=>array(55,0,529,474),8737=>array(55,0,529,474),8738=>array(55,-98,444,572),8739=>array(92,-199,168,716),8740=>array(92,-199,352,716),8741=>array(92,-199,326,716),8742=>array(92,-199,510,716),8743=>array(20,0,542,568),8744=>array(20,0,542,568),8745=>array(50,0,512,568),8746=>array(50,0,512,568),8747=>array(63,-271,434,1022),8748=>array(63,-271,734,1022),8749=>array(63,-271,1034,1022),8750=>array(33,-271,459,1022),8751=>array(33,-271,759,1022),8752=>array(33,-271,1059,1022),8753=>array(33,-271,488,1022),8754=>array(33,-271,488,1022),8755=>array(33,-271,498,1022),8756=>array(42,0,521,528),8757=>array(42,0,521,528),8758=>array(161,0,260,528),8759=>array(42,0,521,528),8760=>array(55,312,529,567),8761=>array(55,139,529,567),8762=>array(55,139,529,567),8763=>array(55,139,529,567),8764=>array(55,279,529,424),8765=>array(55,279,529,424),8766=>array(35,212,539,496),8767=>array(40,72,544,636),8768=>array(139,0,284,592),8769=>array(55,171,529,533),8770=>array(55,202,529,535),8771=>array(55,203,529,536),8772=>array(55,91,529,613),8773=>array(55,123,529,584),8774=>array(55,51,529,614),8775=>array(55,51,529,633),8776=>array(55,171,529,533),8777=>array(55,81,529,603),8778=>array(55,123,529,584),8779=>array(55,97,529,584),8780=>array(35,53,539,654),8781=>array(55,155,529,551),8782=>array(55,58,529,648),8783=>array(55,203,529,648),8784=>array(55,203,529,676),8785=>array(55,59,529,647),8786=>array(55,59,529,647),8787=>array(55,59,529,647),8788=>array(55,195,682,511),8789=>array(55,195,682,511),8790=>array(55,189,529,518),8791=>array(55,0,529,617),8792=>array(55,0,529,518),8793=>array(55,0,529,630),8794=>array(55,0,529,630),8795=>array(55,0,529,651),8796=>array(55,0,529,701),8797=>array(55,0,529,605),8798=>array(55,0,529,532),8799=>array(55,0,529,601),8800=>array(55,103,529,603),8801=>array(55,123,529,557),8802=>array(55,23,529,657),8803=>array(55,35,529,645),8804=>array(55,55,529,650),8805=>array(55,55,529,650),8806=>array(55,0,529,783),8807=>array(55,0,529,783),8808=>array(55,-85,529,783),8809=>array(55,-85,529,783),8810=>array(55,111,914,595),8811=>array(55,111,914,595),8812=>array(143,-210,441,728),8813=>array(55,103,529,603),8814=>array(55,23,529,657),8815=>array(55,23,529,657),8816=>array(55,-141,529,657),8817=>array(55,-141,529,657),8818=>array(55,-1,529,656),8819=>array(55,-1,529,656),8820=>array(55,-91,529,718),8821=>array(55,-91,529,718),8822=>array(55,-27,529,821),8823=>array(55,-27,529,821),8824=>array(55,-27,529,821),8825=>array(55,-27,529,821),8826=>array(55,111,529,595),8827=>array(55,111,529,595),8828=>array(55,-33,529,595),8829=>array(55,-33,529,595),8830=>array(55,-1,529,656),8831=>array(55,-1,529,656),8832=>array(55,23,529,657),8833=>array(55,23,529,657),8834=>array(55,122,623,584),8835=>array(55,122,623,584),8836=>array(55,22,623,684),8837=>array(55,22,623,684),8838=>array(55,0,623,626),8839=>array(55,0,623,626),8840=>array(55,-100,623,726),8841=>array(55,-100,623,726),8842=>array(55,-100,623,626),8843=>array(55,-100,623,626),8844=>array(50,0,512,568),8845=>array(50,0,512,568),8846=>array(50,0,512,568),8847=>array(55,122,623,584),8848=>array(55,122,623,584),8849=>array(55,0,623,626),8850=>array(55,0,623,626),8851=>array(50,0,512,568),8852=>array(50,0,512,568),8853=>array(59,-85,741,597),8854=>array(59,-85,741,597),8855=>array(59,-85,741,597),8856=>array(59,-85,741,597),8857=>array(59,-85,741,597),8858=>array(59,-85,741,597),8859=>array(59,-85,741,597),8860=>array(59,-85,741,597),8861=>array(59,-85,741,597),8862=>array(60,0,741,681),8863=>array(60,0,741,681),8864=>array(60,0,741,681),8865=>array(60,0,741,681),8866=>array(60,0,531,512),8867=>array(18,0,489,512),8868=>array(18,0,531,512),8869=>array(18,0,531,512),8870=>array(60,0,381,512),8871=>array(60,0,381,512),8872=>array(60,0,531,512),8873=>array(60,0,531,512),8874=>array(60,0,531,512),8875=>array(60,0,654,512),8876=>array(60,0,531,513),8877=>array(60,0,531,513),8878=>array(60,0,531,513),8879=>array(60,0,654,513),8880=>array(18,-54,531,566),8881=>array(18,-54,531,566),8882=>array(18,0,531,512),8883=>array(18,0,531,512),8884=>array(18,-51,531,562),8885=>array(18,-51,531,562),8886=>array(40,153,673,359),8887=>array(40,153,673,359),8888=>array(40,153,673,359),8889=>array(18,0,531,512),8890=>array(88,0,461,632),8891=>array(50,0,534,638),8892=>array(50,0,534,638),8893=>array(50,0,534,638),8894=>array(55,0,529,474),8895=>array(55,0,529,474),8896=>array(20,0,542,568),8897=>array(20,0,542,568),8898=>array(50,0,512,568),8899=>array(50,0,512,568),8900=>array(156,106,395,406),8901=>array(55,186,195,326),8902=>array(39,39,511,488),8903=>array(30,9,620,502),8904=>array(29,-64,601,576),8905=>array(29,-64,601,576),8906=>array(29,-64,601,576),8907=>array(29,-64,601,576),8908=>array(29,-64,601,576),8909=>array(55,203,529,536),8910=>array(18,0,542,568),8911=>array(18,0,542,568),8912=>array(56,84,623,626),8913=>array(56,84,623,626),8914=>array(63,0,605,567),8915=>array(63,0,605,567),8916=>array(50,0,512,716),8917=>array(55,-199,529,716),8918=>array(55,111,529,595),8919=>array(55,111,529,595),8920=>array(55,111,1299,595),8921=>array(55,111,1299,595),8922=>array(55,-217,529,927),8923=>array(55,-217,529,927),8924=>array(55,55,529,650),8925=>array(55,55,529,650),8926=>array(55,-33,529,595),8927=>array(55,-33,529,595),8928=>array(55,-141,529,657),8929=>array(55,-141,529,657),8930=>array(55,-100,623,726),8931=>array(55,-100,623,726),8932=>array(55,-100,623,626),8933=>array(55,-100,623,626),8934=>array(55,-71,529,656),8935=>array(55,-71,529,656),8936=>array(55,-71,529,656),8937=>array(55,-71,529,656),8938=>array(55,23,529,657),8939=>array(55,23,529,657),8940=>array(55,-45,529,712),8941=>array(55,-45,529,712),8942=>array(89,0,189,766),8943=>array(117,333,883,433),8944=>array(117,0,883,766),8945=>array(117,0,883,766),8960=>array(60,41,490,471),8962=>array(51,24,498,486),8963=>array(129,180,419,395),8964=>array(129,117,419,332),8965=>array(78,130,471,441),8966=>array(78,130,471,565),8967=>array(191,-192,359,693),8968=>array(103,58,346,694),8969=>array(103,58,346,694),8970=>array(103,-192,346,444),8971=>array(103,-192,346,444),8972=>array(251,-40,571,280),8973=>array(-22,-40,299,280),8974=>array(251,232,571,552),8975=>array(-22,232,299,552),8976=>array(49,163,511,403),8977=>array(83,64,467,448),8978=>array(59,156,741,497),8979=>array(59,156,741,497),8980=>array(34,100,516,441),8981=>array(27,9,490,471),8982=>array(26,-102,523,614),8983=>array(18,-51,632,563),8984=>array(63,0,717,654),8985=>array(49,109,511,349),8986=>array(45,-20,505,532),8987=>array(103,0,447,512),8988=>array(111,140,391,420),8989=>array(158,140,439,420),8990=>array(111,92,391,372),8991=>array(158,92,439,372),8992=>array(180,-218,434,752),8993=>array(63,-188,313,782),8994=>array(17,159,696,341),8995=>array(17,171,696,353),8996=>array(18,226,982,547),8997=>array(18,0,982,512),8998=>array(90,0,948,600),8999=>array(90,0,910,600),9000=>array(90,0,910,600),9001=>array(32,-184,299,694),9002=>array(30,-184,297,694),9003=>array(52,0,910,600),9004=>array(57,6,493,509),9005=>array(13,77,537,435),9006=>array(100,108,465,400),9007=>array(38,132,511,380),9008=>array(38,0,504,525),9009=>array(81,62,509,450),9010=>array(35,50,531,462),9011=>array(35,186,531,392),9012=>array(51,84,498,419),9013=>array(51,84,498,419),9014=>array(60,0,540,559),9015=>array(140,0,460,559),9016=>array(60,0,540,559),9017=>array(60,0,540,559),9018=>array(60,0,540,559),9019=>array(60,0,540,559),9020=>array(60,0,540,559),9021=>array(104,0,496,559),9022=>array(60,39,540,519),9023=>array(84,0,517,559),9024=>array(83,0,516,559),9025=>array(60,0,540,559),9026=>array(60,0,540,559),9027=>array(60,0,540,559),9028=>array(60,0,540,559),9029=>array(13,0,556,559),9030=>array(44,0,587,559),9031=>array(60,0,540,559),9032=>array(60,0,540,559),9033=>array(104,0,496,559),9034=>array(60,0,540,559),9035=>array(122,0,478,559),9036=>array(60,0,540,559),9037=>array(60,0,540,559),9038=>array(60,0,540,559),9039=>array(60,0,540,559),9040=>array(60,0,540,559),9041=>array(60,0,540,559),9042=>array(122,0,478,559),9043=>array(60,0,540,559),9044=>array(60,0,540,559),9045=>array(60,0,540,559),9046=>array(60,0,540,559),9047=>array(60,0,540,559),9048=>array(160,0,440,559),9049=>array(60,0,540,559),9050=>array(60,0,540,559),9051=>array(60,0,540,397),9052=>array(60,0,540,475),9053=>array(60,0,540,559),9054=>array(60,0,540,559),9055=>array(60,39,540,519),9056=>array(60,0,540,559),9057=>array(60,0,540,559),9058=>array(122,0,478,559),9059=>array(153,157,447,509),9060=>array(153,161,447,524),9061=>array(104,33,496,559),9062=>array(60,0,540,559),9063=>array(54,0,542,559),9064=>array(50,131,549,464),9065=>array(148,122,452,559),9066=>array(160,122,440,478),9067=>array(103,68,502,508),9068=>array(93,-14,504,573),9069=>array(50,0,549,559),9070=>array(160,-136,440,559),9071=>array(60,0,540,559),9072=>array(60,0,540,559),9073=>array(51,55,550,469),9074=>array(50,89,549,503),9075=>array(163,-14,427,475),9076=>array(90,-212,525,475),9077=>array(26,-14,574,475),9078=>array(60,-136,555,475),9079=>array(60,-136,540,480),9080=>array(160,-136,440,475),9081=>array(26,-136,574,475),9082=>array(61,-14,555,475),9109=>array(60,0,540,559),9216=>array(30,0,565,689),9217=>array(37,0,564,694),9218=>array(37,0,587,694),9219=>array(41,0,587,689),9220=>array(41,0,582,689),9221=>array(41,-42,583,689),9222=>array(9,0,594,689),9223=>array(34,0,565,689),9224=>array(134,112,465,574),9225=>array(134,116,482,574),9226=>array(141,116,462,574),9227=>array(109,116,482,574),9228=>array(141,116,462,574),9229=>array(120,116,489,579),9230=>array(137,112,472,579),9231=>array(137,116,449,579),9232=>array(34,0,560,689),9233=>array(34,0,564,689),9234=>array(34,0,558,689),9235=>array(34,-4,559,689),9236=>array(34,0,573,689),9237=>array(30,0,594,689),9238=>array(37,0,568,694),9239=>array(41,0,575,689),9240=>array(20,0,568,694),9241=>array(141,116,472,574),9242=>array(37,0,575,694),9243=>array(41,-4,573,689),9244=>array(141,112,465,574),9245=>array(120,112,465,579),9246=>array(134,112,465,574),9247=>array(134,112,465,574),9248=>array(137,116,471,579),9249=>array(34,0,565,689),9250=>array(46,-12,561,716),9251=>array(96,-126,505,0),9252=>array(130,116,465,574),9280=>array(103,1,514,650),9281=>array(102,0,514,650),9282=>array(103,1,514,650),9283=>array(103,1,514,650),9284=>array(102,1,514,650),9285=>array(102,336,514,650),9286=>array(102,0,648,702),9287=>array(102,0,648,702),9288=>array(102,117,648,663),9289=>array(102,195,648,507),9290=>array(30,1,574,650),9312=>array(81,-109,919,728),9313=>array(81,-109,919,728),9314=>array(81,-109,919,728),9315=>array(81,-109,919,728),9316=>array(81,-109,919,728),9317=>array(81,-109,919,728),9318=>array(81,-109,919,728),9319=>array(81,-109,919,728),9320=>array(81,-109,919,728),9321=>array(81,-109,919,728),9322=>array(81,-109,919,728),9323=>array(81,-109,919,728),9324=>array(81,-109,919,728),9325=>array(81,-109,919,728),9326=>array(81,-109,919,728),9327=>array(81,-109,919,728),9328=>array(81,-109,919,728),9329=>array(81,-109,919,728),9330=>array(81,-109,919,728),9331=>array(81,-109,919,728),9332=>array(81,-67,919,683),9333=>array(81,-67,919,683),9334=>array(81,-67,919,683),9335=>array(81,-67,919,683),9336=>array(81,-67,919,683),9337=>array(81,-67,919,683),9338=>array(81,-67,919,683),9339=>array(81,-67,919,683),9340=>array(81,-67,919,683),9341=>array(81,-67,919,683),9342=>array(81,-67,919,683),9343=>array(81,-67,919,683),9344=>array(81,-67,919,683),9345=>array(81,-67,919,683),9346=>array(81,-67,919,683),9347=>array(81,-67,919,683),9348=>array(81,-67,919,683),9349=>array(81,-67,919,683),9350=>array(81,-67,919,683),9351=>array(81,-67,919,683),9352=>array(301,79,627,547),9353=>array(273,79,717,547),9354=>array(277,72,717,547),9355=>array(253,79,717,545),9356=>array(272,72,717,539),9357=>array(266,72,717,547),9358=>array(294,79,717,539),9359=>array(275,72,717,547),9360=>array(282,72,717,547),9361=>array(163,72,807,547),9362=>array(191,79,807,547),9363=>array(155,79,807,547),9364=>array(155,72,807,547),9365=>array(159,79,807,547),9366=>array(159,72,807,547),9367=>array(159,72,807,547),9368=>array(159,79,807,547),9369=>array(159,72,807,547),9370=>array(159,72,807,547),9371=>array(185,72,817,547),9372=>array(81,-67,919,683),9373=>array(81,-67,919,683),9374=>array(81,-67,919,683),9375=>array(81,-67,919,683),9376=>array(81,-67,919,683),9377=>array(81,-67,919,683),9378=>array(81,-67,919,683),9379=>array(81,-67,919,683),9380=>array(81,-67,919,683),9381=>array(81,-67,919,683),9382=>array(81,-67,919,683),9383=>array(81,-67,919,683),9384=>array(81,-67,919,683),9385=>array(81,-67,919,683),9386=>array(81,-67,919,683),9387=>array(81,-67,919,683),9388=>array(81,-67,919,683),9389=>array(81,-67,919,683),9390=>array(81,-67,919,683),9391=>array(81,-67,919,683),9392=>array(81,-67,919,683),9393=>array(81,-67,919,683),9394=>array(81,-67,919,683),9395=>array(81,-67,919,683),9396=>array(81,-67,919,683),9397=>array(81,-67,919,683),9398=>array(81,-109,919,728),9399=>array(81,-109,919,728),9400=>array(81,-109,919,728),9401=>array(81,-109,919,728),9402=>array(81,-109,919,728),9403=>array(81,-109,919,728),9404=>array(81,-109,919,728),9405=>array(81,-109,919,728),9406=>array(81,-109,919,728),9407=>array(81,-109,919,728),9408=>array(81,-109,919,728),9409=>array(81,-109,919,728),9410=>array(81,-109,919,728),9411=>array(81,-109,919,728),9412=>array(81,-109,919,728),9413=>array(81,-109,919,728),9414=>array(81,-109,919,728),9415=>array(81,-109,919,728),9416=>array(81,-109,919,728),9417=>array(81,-109,919,728),9418=>array(81,-109,919,728),9419=>array(81,-109,919,728),9420=>array(81,-109,919,728),9421=>array(81,-109,919,728),9422=>array(81,-109,919,728),9423=>array(81,-109,919,728),9424=>array(81,-109,919,728),9425=>array(81,-109,919,728),9426=>array(81,-109,919,728),9427=>array(81,-109,919,728),9428=>array(81,-109,919,728),9429=>array(81,-109,919,728),9430=>array(81,-109,919,728),9431=>array(81,-109,919,728),9432=>array(81,-109,919,728),9433=>array(81,-109,919,728),9434=>array(81,-109,919,728),9435=>array(81,-109,919,728),9436=>array(81,-109,919,728),9437=>array(81,-109,919,728),9438=>array(81,-109,919,728),9439=>array(81,-109,919,728),9440=>array(81,-109,919,728),9441=>array(81,-109,919,728),9442=>array(81,-109,919,728),9443=>array(81,-109,919,728),9444=>array(81,-109,919,728),9445=>array(81,-109,919,728),9446=>array(81,-109,919,728),9447=>array(81,-109,919,728),9448=>array(81,-109,919,728),9449=>array(81,-109,919,728),9450=>array(81,-109,919,728),9472=>array(-11,340,611,425),9473=>array(-11,303,611,474),9474=>array(258,-218,343,994),9475=>array(215,-218,386,994),9476=>array(-11,346,611,431),9477=>array(-11,303,611,474),9478=>array(258,-218,343,994),9479=>array(215,-218,386,994),9480=>array(-11,346,611,431),9481=>array(-11,303,611,474),9482=>array(258,-218,343,994),9483=>array(215,-218,386,994),9484=>array(258,-218,611,431),9485=>array(258,-218,611,474),9486=>array(215,-218,611,431),9487=>array(215,-218,611,474),9488=>array(-11,-218,343,431),9489=>array(-11,-218,343,474),9490=>array(-11,-218,386,431),9491=>array(-11,-218,386,474),9492=>array(258,346,611,994),9493=>array(258,303,611,994),9494=>array(215,346,611,994),9495=>array(215,303,611,994),9496=>array(-11,346,343,994),9497=>array(-11,303,343,994),9498=>array(-11,346,386,994),9499=>array(-11,303,386,994),9500=>array(258,-218,611,994),9501=>array(258,-218,611,994),9502=>array(215,-218,611,994),9503=>array(215,-218,611,994),9504=>array(215,-218,611,994),9505=>array(215,-218,611,994),9506=>array(215,-218,611,994),9507=>array(215,-218,611,994),9508=>array(-11,-218,343,994),9509=>array(-11,-218,343,994),9510=>array(-11,-218,386,994),9511=>array(-11,-218,386,994),9512=>array(-11,-218,386,994),9513=>array(-11,-218,386,994),9514=>array(-11,-218,386,994),9515=>array(-11,-218,386,994),9516=>array(-11,-218,611,431),9517=>array(-11,-218,611,474),9518=>array(-11,-218,611,474),9519=>array(-11,-218,611,474),9520=>array(-11,-218,611,431),9521=>array(-11,-218,611,474),9522=>array(-11,-218,611,474),9523=>array(-11,-218,611,474),9524=>array(-11,346,611,994),9525=>array(-11,303,611,994),9526=>array(-11,303,611,994),9527=>array(-11,303,611,994),9528=>array(-11,346,611,994),9529=>array(-11,303,611,994),9530=>array(-11,303,611,994),9531=>array(-11,303,611,994),9532=>array(-11,-218,611,994),9533=>array(-11,-218,611,994),9534=>array(-11,-218,611,994),9535=>array(-11,-218,611,994),9536=>array(-11,-218,611,994),9537=>array(-11,-218,611,994),9538=>array(-11,-218,611,994),9539=>array(-11,-218,611,994),9540=>array(-11,-218,611,994),9541=>array(-11,-218,611,994),9542=>array(-11,-218,611,994),9543=>array(-11,-218,611,994),9544=>array(-11,-218,611,994),9545=>array(-11,-218,611,994),9546=>array(-11,-218,611,994),9547=>array(-11,-218,611,994),9548=>array(-11,346,611,431),9549=>array(-11,303,611,474),9550=>array(258,-218,343,994),9551=>array(215,-218,386,994),9552=>array(-11,261,611,516),9553=>array(173,-218,428,994),9554=>array(258,-218,611,516),9555=>array(173,-218,611,431),9556=>array(173,-218,611,516),9557=>array(-11,-218,343,516),9558=>array(-11,-218,428,431),9559=>array(-11,-218,428,516),9560=>array(258,261,611,994),9561=>array(173,346,611,994),9562=>array(173,261,611,994),9563=>array(-11,261,343,994),9564=>array(-11,346,428,994),9565=>array(-11,261,428,994),9566=>array(258,-218,611,994),9567=>array(173,-218,611,994),9568=>array(173,-218,611,994),9569=>array(-11,-218,343,994),9570=>array(-11,-218,428,994),9571=>array(-11,-218,428,994),9572=>array(-11,-218,611,516),9573=>array(-11,-218,611,431),9574=>array(-11,-218,611,516),9575=>array(-11,261,611,994),9576=>array(-11,346,611,994),9577=>array(-11,261,611,994),9578=>array(-11,-218,611,994),9579=>array(-11,-218,611,994),9580=>array(-11,-218,611,994),9581=>array(258,77,612,431),9582=>array(-11,77,343,431),9583=>array(-11,346,343,700),9584=>array(258,346,612,700),9585=>array(0,88,600,688),9586=>array(0,88,600,688),9587=>array(0,88,600,688),9588=>array(-11,346,258,431),9589=>array(258,431,343,994),9590=>array(343,346,611,431),9591=>array(258,-218,343,346),9592=>array(-11,303,258,474),9593=>array(215,431,386,994),9594=>array(343,303,611,474),9595=>array(215,-218,386,346),9596=>array(-11,303,611,474),9597=>array(215,-218,386,994),9598=>array(-11,303,611,474),9599=>array(215,-218,386,994),9600=>array(-11,388,611,994),9601=>array(-11,-218,611,-66),9602=>array(-11,-218,611,85),9603=>array(-11,-218,611,237),9604=>array(-11,-218,611,388),9605=>array(-11,-218,611,540),9606=>array(-11,-218,611,691),9607=>array(-11,-218,611,843),9608=>array(-11,-218,611,994),9609=>array(-11,-218,525,994),9610=>array(-11,-218,450,994),9611=>array(-11,-218,375,994),9612=>array(-11,-218,300,994),9613=>array(-11,-218,225,994),9614=>array(-11,-218,150,994),9615=>array(-11,-218,75,994),9616=>array(300,-218,611,994),9617=>array(100,-262,600,1043),9618=>array(0,-264,601,1042),9619=>array(0,-262,601,1042),9620=>array(-11,843,611,994),9621=>array(525,-218,611,994),9632=>array(85,160,515,590),9633=>array(85,160,515,590),9634=>array(85,160,515,590),9635=>array(85,160,515,590),9636=>array(85,160,515,590),9637=>array(85,160,515,590),9638=>array(85,160,515,590),9639=>array(85,160,515,590),9640=>array(85,160,515,590),9641=>array(85,160,515,590),9642=>array(192,267,408,483),9643=>array(192,267,408,483),9644=>array(85,267,515,483),9645=>array(85,267,515,483),9646=>array(192,160,408,590),9647=>array(192,160,408,590),9648=>array(79,275,521,475),9649=>array(79,275,521,475),9650=>array(89,211,511,611),9651=>array(89,211,511,611),9652=>array(146,285,454,552),9653=>array(146,285,454,552),9654=>array(136,164,536,586),9655=>array(136,164,536,586),9656=>array(211,221,478,529),9657=>array(211,221,478,529),9658=>array(85,194,541,556),9659=>array(85,194,541,556),9660=>array(89,139,511,539),9661=>array(89,139,511,539),9662=>array(146,198,454,465),9663=>array(146,198,454,465),9664=>array(64,164,464,586),9665=>array(64,164,464,586),9666=>array(122,221,389,529),9667=>array(122,221,389,529),9668=>array(59,194,515,556),9669=>array(59,194,515,556),9670=>array(69,144,531,606),9671=>array(69,144,531,606),9672=>array(69,144,531,606),9673=>array(85,160,515,590),9674=>array(85,80,515,670),9675=>array(85,160,515,590),9676=>array(86,161,514,589),9677=>array(85,160,515,590),9678=>array(85,160,515,590),9679=>array(85,160,515,590),9680=>array(85,160,515,590),9681=>array(85,160,515,590),9682=>array(85,160,515,590),9683=>array(85,160,515,590),9684=>array(85,160,515,590),9685=>array(85,160,515,590),9686=>array(85,160,300,590),9687=>array(300,160,515,590),9688=>array(0,0,600,600),9689=>array(0,0,600,600),9690=>array(0,300,600,600),9691=>array(0,0,600,300),9692=>array(85,375,300,590),9693=>array(300,375,515,590),9694=>array(300,160,515,375),9695=>array(85,160,300,375),9696=>array(85,375,515,590),9697=>array(85,160,515,375),9698=>array(85,160,515,590),9699=>array(85,160,515,590),9700=>array(85,160,515,590),9701=>array(85,160,515,590),9702=>array(193,268,407,482),9703=>array(85,160,515,590),9704=>array(85,160,515,590),9705=>array(85,160,515,590),9706=>array(85,160,515,590),9707=>array(85,160,515,590),9708=>array(89,211,511,611),9709=>array(89,211,511,611),9710=>array(89,211,511,611),9711=>array(20,95,580,655),9728=>array(65,1,685,621),9729=>array(58,166,944,652),9730=>array(76,6,674,622),9731=>array(105,-3,672,690),9732=>array(81,0,923,690),9733=>array(37,0,779,719),9734=>array(37,0,786,720),9735=>array(107,12,356,451),9736=>array(35,53,436,449),9737=>array(70,0,730,660),9738=>array(70,50,730,620),9739=>array(70,50,730,620),9740=>array(200,100,677,577),9741=>array(100,0,700,600),9742=>array(22,63,696,521),9743=>array(22,63,696,521),9744=>array(63,0,671,607),9745=>array(63,0,671,607),9746=>array(63,0,671,607),9747=>array(129,0,633,668),9754=>array(27,56,924,451),9755=>array(36,56,933,451),9756=>array(84,168,899,531),9757=>array(288,-79,651,736),9758=>array(41,168,856,531),9759=>array(288,-36,651,779),9760=>array(24,15,720,725),9761=>array(50,40,546,610),9762=>array(56,22,694,660),9763=>array(46,115,704,724),9764=>array(45,0,535,652),9765=>array(24,0,436,699),9766=>array(35,0,409,699),9767=>array(87,0,589,637),9768=>array(35,0,409,699),9769=>array(54,20,714,680),9770=>array(88,0,727,664),9771=>array(70,-24,778,656),9772=>array(78,-2,596,691),9773=>array(56,0,741,732),9774=>array(64,0,686,622),9775=>array(64,0,686,622),9776=>array(70,0,830,639),9777=>array(70,0,830,639),9778=>array(70,0,830,639),9779=>array(70,0,830,639),9780=>array(70,0,830,639),9781=>array(70,0,830,639),9782=>array(70,0,830,639),9783=>array(70,0,830,639),9784=>array(60,32,690,661),9785=>array(64,0,686,622),9786=>array(64,0,686,622),9787=>array(64,0,686,622),9788=>array(75,11,675,611),9789=>array(84,-189,659,691),9790=>array(91,-189,666,691),9791=>array(150,-100,590,759),9792=>array(100,-100,640,699),9793=>array(100,-30,640,769),9794=>array(60,-30,711,621),9795=>array(45,0,573,699),9796=>array(26,0,432,699),9797=>array(45,0,587,699),9798=>array(23,0,757,719),9799=>array(80,0,487,699),9800=>array(38,0,796,709),9801=>array(36,0,744,703),9802=>array(35,0,699,699),9803=>array(45,0,842,699),9804=>array(41,-176,749,700),9805=>array(42,-162,1002,699),9806=>array(33,0,863,699),9807=>array(42,-72,1067,699),9808=>array(48,0,747,699),9809=>array(29,-90,808,699),9810=>array(36,106,886,618),9811=>array(34,0,662,699),9812=>array(83,-117,913,709),9813=>array(42,-117,954,729),9814=>array(154,-113,842,706),9815=>array(83,-103,913,707),9816=>array(76,-110,912,727),9817=>array(197,-103,803,710),9818=>array(83,-117,913,709),9819=>array(42,-117,954,729),9820=>array(154,-113,842,706),9821=>array(83,-103,913,707),9822=>array(76,-110,912,727),9823=>array(197,-103,803,710),9824=>array(49,0,673,705),9825=>array(49,0,685,705),9826=>array(51,0,623,706),9827=>array(49,0,755,705),9828=>array(49,0,673,705),9829=>array(49,0,685,705),9830=>array(51,0,623,706),9831=>array(49,0,755,705),9832=>array(56,24,804,680),9833=>array(48,0,316,736),9834=>array(48,0,556,736),9835=>array(48,-70,654,766),9836=>array(48,-70,654,766),9837=>array(107,10,400,736),9838=>array(107,-22,333,736),9839=>array(29,-22,411,736),9985=>array(56,49,901,637),9986=>array(38,48,923,635),9987=>array(56,49,901,637),9988=>array(6,0,979,551),9990=>array(68,-201,700,669),9991=>array(30,0,760,730),9992=>array(17,0,772,654),9993=>array(27,28,663,483),9996=>array(64,0,521,582),9997=>array(59,72,824,515),9998=>array(62,113,848,672),9999=>array(35,170,898,521),10000=>array(62,19,849,578),10001=>array(36,135,908,555),10002=>array(51,135,923,555),10003=>array(18,-10,722,706),10004=>array(34,-9,796,765),10005=>array(47,0,715,668),10006=>array(46,0,714,668),10007=>array(0,-58,567,638),10008=>array(25,-67,650,682),10009=>array(35,0,728,693),10010=>array(34,0,727,693),10011=>array(35,0,724,689),10012=>array(35,0,718,683),10013=>array(35,0,460,690),10014=>array(9,0,542,690),10015=>array(38,0,499,690),10016=>array(36,94,542,600),10017=>array(29,-12,663,720),10018=>array(37,-11,750,702),10019=>array(34,0,755,719),10020=>array(34,0,755,719),10021=>array(36,0,755,719),10022=>array(37,0,756,719),10023=>array(38,0,757,719),10025=>array(37,0,786,720),10026=>array(31,-13,757,713),10027=>array(49,0,792,719),10028=>array(37,0,786,719),10029=>array(42,0,791,719),10030=>array(34,0,783,719),10031=>array(35,-14,795,718),10032=>array(49,1,873,718),10033=>array(29,0,714,719),10034=>array(18,0,706,719),10035=>array(35,0,714,679),10036=>array(35,0,756,721),10037=>array(47,0,745,698),10038=>array(37,0,659,699),10039=>array(35,0,741,706),10040=>array(35,0,733,698),10041=>array(35,0,757,729),10042=>array(35,0,725,688),10043=>array(31,0,675,719),10044=>array(34,7,674,728),10045=>array(13,0,669,719),10046=>array(21,0,680,719),10047=>array(35,0,791,737),10048=>array(35,0,780,728),10049=>array(35,0,754,719),10050=>array(44,-14,745,695),10051=>array(28,0,679,719),10052=>array(32,0,655,696),10053=>array(29,0,667,696),10054=>array(1,0,688,687),10055=>array(30,0,757,719),10056=>array(42,-7,745,696),10057=>array(42,30,670,663),10058=>array(60,0,731,718),10059=>array(26,-21,759,711),10061=>array(41,-33,832,638),10063=>array(23,0,739,714),10064=>array(23,0,739,714),10065=>array(23,0,735,714),10066=>array(23,0,735,714),10070=>array(36,-12,749,701),10072=>array(29,0,109,712),10073=>array(29,0,248,712),10074=>array(29,0,386,712),10075=>array(56,265,336,706),10076=>array(56,265,336,706),10077=>array(38,265,630,706),10078=>array(38,265,630,706),10081=>array(87,-157,666,727),10082=>array(60,-14,484,716),10083=>array(28,-14,516,711),10084=>array(35,0,875,703),10085=>array(38,0,644,764),10086=>array(76,-15,681,709),10087=>array(0,110,760,514),10102=>array(35,-14,753,705),10103=>array(35,-14,753,705),10104=>array(35,-14,753,705),10105=>array(35,-14,753,705),10106=>array(35,-14,753,705),10107=>array(35,-14,753,705),10108=>array(35,-14,753,705),10109=>array(35,-14,753,705),10110=>array(35,-14,753,705),10111=>array(35,-14,753,705),10112=>array(35,-14,753,705),10113=>array(35,-14,753,705),10114=>array(35,-14,753,705),10115=>array(35,-14,753,705),10116=>array(35,-14,753,705),10117=>array(35,-14,753,705),10118=>array(35,-14,753,705),10119=>array(35,-14,753,705),10120=>array(35,-14,753,705),10121=>array(35,-14,753,705),10122=>array(35,-14,753,705),10123=>array(35,-14,753,705),10124=>array(35,-14,753,705),10125=>array(35,-14,753,705),10126=>array(35,-14,753,705),10127=>array(35,-14,753,705),10128=>array(35,-14,753,705),10129=>array(35,-14,753,705),10130=>array(35,-14,753,705),10131=>array(35,-14,753,705),10132=>array(22,66,879,640),10136=>array(106,19,675,558),10137=>array(33,73,909,520),10138=>array(121,-28,619,578),10139=>array(28,73,890,603),10140=>array(38,70,891,636),10141=>array(82,137,843,554),10142=>array(82,137,846,554),10143=>array(35,155,799,536),10144=>array(36,94,838,594),10145=>array(13,94,815,594),10146=>array(35,82,889,610),10147=>array(35,82,889,610),10148=>array(103,147,845,543),10149=>array(42,123,900,578),10150=>array(42,55,901,509),10151=>array(45,-85,418,772),10152=>array(21,-68,868,755),10153=>array(36,43,813,648),10154=>array(41,43,807,648),10155=>array(61,129,832,585),10156=>array(61,129,832,585),10157=>array(37,44,665,651),10158=>array(37,44,665,651),10159=>array(38,93,836,620),10161=>array(38,69,836,596),10162=>array(15,0,746,730),10163=>array(23,128,934,561),10164=>array(42,2,725,685),10165=>array(27,166,838,525),10166=>array(20,5,703,685),10167=>array(93,0,791,694),10168=>array(57,166,886,523),10169=>array(98,13,792,710),10170=>array(35,192,805,498),10171=>array(28,157,858,533),10172=>array(83,199,849,501),10173=>array(15,147,949,549),10174=>array(41,97,889,579),12289=>array(94,-86,336,167),12290=>array(86,-54,373,235),12291=>array(305,220,695,527),12292=>array(100,-35,933,800),12293=>array(137,5,781,779),12294=>array(148,4,839,695),12295=>array(106,-26,920,790),12296=>array(587,-69,921,837),12297=>array(79,-69,413,837),12298=>array(501,-69,950,837),12299=>array(50,-69,499,837),12300=>array(559,349,900,837),12301=>array(100,-68,446,419),12302=>array(560,349,930,835),12303=>array(70,-69,444,421),12304=>array(611,-69,900,837),12305=>array(100,-69,389,837),12306=>array(173,-18,827,735),12307=>array(144,20,845,750),12308=>array(625,-75,900,844),12309=>array(100,-75,375,844),12310=>array(570,-73,930,845),12311=>array(69,-73,429,845),12312=>array(649,-73,877,835),12313=>array(124,-74,352,834),12314=>array(578,-81,861,820),12315=>array(121,-82,404,819),12316=>array(39,289,961,466),12317=>array(535,523,901,853),12318=>array(100,523,466,853),12319=>array(181,-53,547,277),12320=>array(89,66,911,689),12321=>array(445,46,525,715),12322=>array(339,48,660,714),12323=>array(255,47,734,717),12324=>array(153,34,769,707),12325=>array(285,35,742,747),12326=>array(184,255,821,671),12327=>array(185,167,823,691),12328=>array(181,104,816,707),12329=>array(206,35,844,743),12330=>array(112,1,375,265),12331=>array(111,513,375,776),12332=>array(627,514,889,778),12333=>array(624,1,888,264),12334=>array(85,311,237,462),12335=>array(83,207,237,564),12336=>array(68,285,931,479),12337=>array(284,-60,729,810),12338=>array(199,-56,876,814),12339=>array(174,-28,732,782),12340=>array(128,-28,898,782),12341=>array(232,-46,726,796),12342=>array(106,-26,920,790),12343=>array(61,-53,920,827),12351=>array(241,-70,759,836),12353=>array(187,47,786,720),12354=>array(113,-60,867,781),12355=>array(217,45,802,670),12356=>array(144,-30,876,760),12357=>array(191,42,750,687),12358=>array(113,-36,810,759),12359=>array(169,54,811,709),12360=>array(90,-23,881,787),12361=>array(185,66,791,704),12362=>array(102,-12,864,796),12363=>array(80,-31,857,806),12364=>array(58,-31,944,815),12365=>array(99,-31,822,811),12366=>array(100,-30,947,833),12367=>array(145,-22,766,776),12368=>array(145,-22,914,821),12369=>array(162,-55,914,782),12370=>array(97,-62,959,839),12371=>array(163,7,857,716),12372=>array(116,10,869,807),12373=>array(98,-31,814,789),12374=>array(94,-31,925,821),12375=>array(207,-18,857,769),12376=>array(185,-18,905,821),12377=>array(114,-62,886,773),12378=>array(89,-62,915,863),12379=>array(98,-16,879,760),12380=>array(72,-16,938,863),12381=>array(102,-35,887,751),12382=>array(80,-35,925,807),12383=>array(119,-16,881,797),12384=>array(89,-16,905,807),12385=>array(143,-21,844,799),12386=>array(109,-21,905,859),12387=>array(175,123,771,603),12388=>array(122,47,868,645),12389=>array(97,57,895,873),12390=>array(90,-25,856,720),12391=>array(90,-25,903,720),12392=>array(163,10,823,775),12393=>array(163,10,911,810),12394=>array(80,-22,907,800),12395=>array(131,-8,875,779),12396=>array(105,-6,909,782),12397=>array(88,-15,903,773),12398=>array(115,-18,882,714),12399=>array(111,-30,896,774),12400=>array(84,-30,931,840),12401=>array(95,-30,944,843),12402=>array(123,-7,938,742),12403=>array(89,-7,921,840),12404=>array(103,-12,918,861),12405=>array(73,-9,924,757),12406=>array(64,-9,915,840),12407=>array(50,-9,918,861),12408=>array(86,66,909,662),12409=>array(86,66,909,806),12410=>array(66,66,889,827),12411=>array(110,-23,898,771),12412=>array(79,-23,924,823),12413=>array(94,-23,942,827),12414=>array(126,-24,892,797),12415=>array(115,-33,888,772),12416=>array(121,-17,905,789),12417=>array(130,-30,870,796),12418=>array(112,-9,858,789),12419=>array(173,48,804,710),12420=>array(99,-29,887,789),12421=>array(202,34,795,712),12422=>array(135,-48,878,792),12423=>array(192,96,804,699),12424=>array(116,21,879,780),12425=>array(144,-17,817,780),12426=>array(193,-81,777,770),12427=>array(82,11,836,767),12428=>array(105,-29,911,774),12429=>array(100,-11,857,760),12430=>array(160,62,798,700),12431=>array(80,-14,874,782),12432=>array(118,-5,879,745),12433=>array(86,1,895,774),12434=>array(115,-24,853,805),12435=>array(90,-8,906,778),12436=>array(103,-36,940,786),12441=>array(641,603,869,807),12442=>array(703,648,918,861),12443=>array(503,603,731,807),12444=>array(490,648,705,861),12445=>array(153,39,808,744),12446=>array(153,39,827,744),12449=>array(199,54,815,665),12450=>array(94,-61,920,751),12451=>array(218,66,759,704),12452=>array(121,-44,833,800),12453=>array(225,59,789,694),12454=>array(125,-47,880,803),12455=>array(189,91,810,630),12456=>array(80,0,915,735),12457=>array(184,61,822,683),12458=>array(96,-45,952,787),12459=>array(88,-41,858,794),12460=>array(88,-41,888,831),12461=>array(73,-45,901,803),12462=>array(71,-54,930,821),12463=>array(120,-49,857,815),12464=>array(77,-51,924,849),12465=>array(64,-48,908,813),12466=>array(64,-48,908,835),12467=>array(98,-23,859,734),12468=>array(81,-25,910,877),12469=>array(84,-59,917,788),12470=>array(64,-59,966,799),12471=>array(83,-39,904,789),12472=>array(79,-39,900,799),12473=>array(82,-52,952,728),12474=>array(56,-52,946,867),12475=>array(87,-5,912,786),12476=>array(81,-3,900,800),12477=>array(131,-51,841,780),12478=>array(131,-51,876,831),12479=>array(120,-60,851,805),12480=>array(60,-60,910,859),12481=>array(87,-54,921,813),12482=>array(77,-54,930,813),12483=>array(189,61,752,663),12484=>array(89,-47,845,774),12485=>array(101,-47,890,829),12486=>array(73,-61,908,740),12487=>array(73,-61,948,757),12488=>array(291,-46,850,787),12489=>array(325,-44,879,790),12490=>array(82,-63,915,786),12491=>array(77,16,911,711),12492=>array(116,-54,863,734),12493=>array(65,-51,926,786),12494=>array(130,-49,855,740),12495=>array(72,-29,928,791),12496=>array(47,-32,944,799),12497=>array(47,-32,944,837),12498=>array(163,-5,879,770),12499=>array(150,-5,930,799),12500=>array(137,-5,944,799),12501=>array(151,-58,855,732),12502=>array(107,-60,920,886),12503=>array(89,-60,964,857),12504=>array(57,24,937,651),12505=>array(57,24,937,685),12506=>array(57,24,937,685),12507=>array(70,-45,913,785),12508=>array(70,-45,913,821),12509=>array(70,-45,913,849),12510=>array(113,-31,887,729),12511=>array(104,-43,892,769),12512=>array(80,-26,927,792),12513=>array(108,-35,835,787),12514=>array(81,-6,916,739),12515=>array(203,48,790,686),12516=>array(104,-48,884,801),12517=>array(180,93,801,636),12518=>array(75,-4,909,730),12519=>array(205,80,765,640),12520=>array(105,-27,860,730),12521=>array(104,-57,873,748),12522=>array(213,-53,790,768),12523=>array(62,-45,936,788),12524=>array(203,-29,893,788),12525=>array(134,-24,848,730),12526=>array(224,51,769,636),12527=>array(124,-54,867,731),12528=>array(83,-45,918,784),12529=>array(76,-5,910,730),12530=>array(123,-53,863,753),12531=>array(107,-33,896,754),12532=>array(107,-54,884,839),12533=>array(199,57,767,690),12534=>array(179,43,809,694),12535=>array(92,-58,952,834),12536=>array(73,-45,953,843),12537=>array(82,-5,977,861),12538=>array(107,-54,947,846),12539=>array(161,311,313,462),12540=>array(83,339,917,429),12541=>array(271,-27,738,666),12542=>array(271,-27,766,807),12549=>array(157,-41,845,819),12550=>array(113,-35,861,812),12551=>array(149,51,851,697),12552=>array(147,44,849,718),12553=>array(98,-41,843,819),12554=>array(100,-45,900,783),12555=>array(151,-45,840,758),12556=>array(98,-35,843,817),12557=>array(133,-41,806,802),12558=>array(121,-34,879,738),12559=>array(60,-32,871,738),12560=>array(232,-43,676,791),12561=>array(257,-41,677,801),12562=>array(121,-28,879,738),12563=>array(105,6,895,782),12564=>array(142,-33,756,796),12565=>array(61,-30,825,752),12566=>array(227,-15,773,734),12567=>array(149,-35,811,746),12568=>array(113,-39,887,806),12569=>array(149,-32,883,752),12570=>array(163,-37,837,783),12571=>array(121,2,879,738),12572=>array(121,2,879,794),12573=>array(109,8,891,773),12574=>array(112,-39,871,754),12575=>array(82,-10,934,729),12576=>array(163,-48,866,790),12577=>array(111,-20,887,723),12578=>array(133,-37,849,742),12579=>array(166,-33,838,775),12580=>array(94,-21,872,797),12581=>array(164,54,847,751),12582=>array(88,-21,903,731),12583=>array(129,369,871,449),12584=>array(124,-4,877,753),12585=>array(157,29,843,711),12586=>array(87,-26,885,736),12587=>array(88,-21,903,734),12588=>array(60,-32,871,788),12593=>array(129,91,796,665),12594=>array(114,91,844,665),12595=>array(114,78,880,665),12596=>array(204,90,873,665),12597=>array(144,78,880,666),12598=>array(144,91,876,666),12599=>array(184,90,838,664),12600=>array(149,90,888,665),12601=>array(173,90,827,665),12602=>array(149,85,842,665),12603=>array(149,85,852,665),12604=>array(149,85,853,665),12605=>array(149,78,880,665),12606=>array(149,85,855,665),12607=>array(149,85,868,665),12608=>array(149,85,876,666),12609=>array(215,90,785,665),12610=>array(215,90,785,665),12611=>array(145,88,855,665),12612=>array(145,78,880,664),12613=>array(107,76,882,663),12614=>array(110,78,890,663),12615=>array(187,92,813,666),12616=>array(109,76,880,665),12617=>array(105,80,895,666),12618=>array(109,76,880,665),12619=>array(206,90,790,663),12620=>array(189,91,837,664),12621=>array(187,90,813,665),12622=>array(156,88,844,665),12623=>array(421,-64,711,842),12624=>array(345,-64,655,842),12625=>array(381,-64,676,842),12626=>array(340,-64,661,842),12627=>array(302,-65,597,841),12628=>array(186,-63,677,843),12629=>array(332,-64,626,842),12630=>array(226,-63,687,843),12631=>array(60,197,940,614),12632=>array(46,-64,931,842),12633=>array(51,-64,892,842),12634=>array(61,-64,857,842),12635=>array(60,197,940,615),12636=>array(79,76,921,554),12637=>array(68,-65,882,841),12638=>array(53,-63,912,843),12639=>array(70,-64,867,842),12640=>array(72,111,928,589),12641=>array(57,357,943,436),12642=>array(67,-64,867,842),12643=>array(462,-64,538,842),12645=>array(169,93,848,665),12646=>array(169,90,888,665),12647=>array(169,78,880,665),12648=>array(169,93,886,665),12649=>array(85,78,960,665),12650=>array(149,85,888,665),12651=>array(85,78,960,665),12652=>array(149,85,886,665),12653=>array(149,85,885,665),12654=>array(142,89,853,665),12655=>array(142,78,880,665),12656=>array(142,89,886,665),12657=>array(232,78,768,711),12658=>array(145,88,844,665),12659=>array(145,88,888,665),12660=>array(111,78,889,665),12661=>array(101,78,933,665),12662=>array(140,78,885,666),12663=>array(145,88,855,665),12664=>array(232,78,768,725),12665=>array(197,78,803,728),12666=>array(130,78,844,665),12667=>array(130,78,858,665),12668=>array(130,78,888,665),12669=>array(125,78,868,665),12670=>array(117,78,883,666),12671=>array(258,93,742,659),12672=>array(99,214,901,562),12673=>array(232,131,768,551),12674=>array(125,78,880,663),12675=>array(125,119,886,664),12676=>array(202,78,798,714),12677=>array(100,91,900,666),12678=>array(182,78,818,573),12679=>array(62,-64,936,842),12680=>array(62,-64,892,842),12681=>array(62,-64,867,842),12682=>array(52,-64,881,842),12683=>array(52,-63,902,843),12684=>array(52,-64,867,842),12685=>array(430,319,570,459),12686=>array(316,-98,634,855),12688=>array(468,391,532,889),12689=>array(302,391,760,889),12690=>array(56,620,459,664),12691=>array(43,481,468,770),12692=>array(47,446,470,803),12693=>array(62,415,456,817),12694=>array(45,427,479,845),12695=>array(70,401,449,858),12696=>array(44,401,477,827),12697=>array(73,399,448,839),12698=>array(82,423,470,815),12699=>array(39,401,485,834),12700=>array(46,401,469,834),12701=>array(35,401,482,832),12702=>array(30,412,488,859),12703=>array(38,401,490,846),12800=>array(72,-21,977,798),12801=>array(72,-21,977,798),12802=>array(72,-21,977,798),12803=>array(72,-21,977,798),12804=>array(72,-21,977,798),12805=>array(72,-21,977,798),12806=>array(72,-21,977,798),12807=>array(72,-21,977,798),12808=>array(72,-21,977,798),12809=>array(72,-21,977,798),12810=>array(72,-21,977,798),12811=>array(72,-21,977,798),12812=>array(72,-21,977,798),12813=>array(72,-21,977,798),12814=>array(72,-21,977,798),12815=>array(72,-21,977,798),12816=>array(72,-21,977,798),12817=>array(72,-21,977,798),12818=>array(72,-21,977,798),12819=>array(72,-21,977,798),12820=>array(72,-21,977,798),12821=>array(72,-21,977,798),12822=>array(72,-21,977,798),12823=>array(72,-21,977,798),12824=>array(72,-21,977,798),12825=>array(72,-21,977,798),12826=>array(72,-21,977,798),12827=>array(72,-21,977,798),12828=>array(72,-21,977,798),12832=>array(72,-21,976,798),12833=>array(72,-21,976,798),12834=>array(72,-21,976,798),12835=>array(72,-21,976,798),12836=>array(72,-21,976,798),12837=>array(72,-21,976,798),12838=>array(72,-21,976,798),12839=>array(72,-21,976,798),12840=>array(72,-21,976,798),12841=>array(72,-21,976,798),12842=>array(72,-21,976,798),12843=>array(72,-21,976,798),12844=>array(72,-21,976,798),12845=>array(72,-21,976,798),12846=>array(72,-21,976,803),12847=>array(72,-21,976,798),12848=>array(72,-21,976,798),12849=>array(72,-21,976,798),12850=>array(72,-21,976,798),12851=>array(72,-21,976,798),12852=>array(72,-21,976,798),12853=>array(72,-21,976,798),12854=>array(72,-21,976,798),12855=>array(72,-21,976,798),12856=>array(72,-21,976,798),12857=>array(72,-21,976,798),12858=>array(72,-21,976,798),12859=>array(72,-21,976,798),12860=>array(72,-21,976,798),12861=>array(72,-21,976,803),12862=>array(72,-21,976,798),12863=>array(72,-21,976,798),12864=>array(72,-21,976,798),12865=>array(72,-21,976,798),12866=>array(72,-21,976,798),12867=>array(72,-21,976,798),12896=>array(30,-82,970,859),12897=>array(30,-82,970,859),12898=>array(30,-82,970,859),12899=>array(30,-82,970,859),12900=>array(30,-82,970,859),12901=>array(30,-82,970,859),12902=>array(30,-82,970,859),12903=>array(30,-82,970,859),12904=>array(30,-82,970,859),12905=>array(30,-82,970,859),12906=>array(30,-82,970,859),12907=>array(30,-82,970,859),12908=>array(30,-82,970,859),12909=>array(30,-82,970,859),12910=>array(30,-82,970,859),12911=>array(30,-82,970,859),12912=>array(30,-82,970,859),12913=>array(30,-82,970,859),12914=>array(30,-82,970,859),12915=>array(30,-82,970,859),12916=>array(30,-82,970,859),12917=>array(30,-82,970,859),12918=>array(30,-82,970,859),12919=>array(30,-82,970,859),12920=>array(30,-82,970,859),12921=>array(30,-82,970,859),12922=>array(30,-82,970,859),12923=>array(30,-82,970,859),12927=>array(30,-82,970,859),12928=>array(30,-82,970,859),12929=>array(30,-82,970,859),12930=>array(30,-82,970,859),12931=>array(30,-82,970,859),12932=>array(30,-82,970,859),12933=>array(30,-82,970,859),12934=>array(30,-82,970,859),12935=>array(30,-82,970,859),12936=>array(30,-82,970,859),12937=>array(30,-82,970,859),12938=>array(30,-82,970,859),12939=>array(30,-82,970,859),12940=>array(30,-82,970,859),12941=>array(30,-82,970,859),12942=>array(30,-82,970,859),12943=>array(30,-82,970,859),12944=>array(30,-82,970,859),12945=>array(30,-82,970,859),12946=>array(30,-82,970,859),12947=>array(30,-82,970,859),12948=>array(30,-82,970,859),12949=>array(30,-82,970,859),12950=>array(30,-82,970,859),12951=>array(30,-82,970,859),12952=>array(30,-82,970,859),12953=>array(30,-82,970,859),12954=>array(30,-82,970,859),12955=>array(30,-82,970,859),12956=>array(30,-82,970,859),12957=>array(30,-82,970,859),12958=>array(30,-82,970,859),12959=>array(30,-82,970,859),12960=>array(30,-82,970,859),12961=>array(30,-82,970,859),12962=>array(30,-82,970,859),12963=>array(30,-82,970,859),12964=>array(30,-82,970,859),12965=>array(30,-82,970,859),12966=>array(30,-82,970,859),12967=>array(30,-82,970,859),12968=>array(30,-82,970,859),12969=>array(30,-82,970,859),12970=>array(30,-82,970,859),12971=>array(30,-82,970,859),12972=>array(30,-82,970,859),12973=>array(30,-82,970,859),12974=>array(30,-82,970,859),12975=>array(30,-82,970,859),12976=>array(30,-82,970,859),12992=>array(119,-55,892,783),12993=>array(88,-55,892,797),12994=>array(86,-55,892,787),12995=>array(64,-55,892,783),12996=>array(89,-55,892,783),12997=>array(102,-55,897,787),12998=>array(90,-55,892,783),12999=>array(80,-55,892,789),13000=>array(82,-55,892,793),13001=>array(47,-55,892,799),13002=>array(47,-55,892,783),13003=>array(47,-55,892,794),13008=>array(30,-82,970,859),13009=>array(30,-82,970,859),13010=>array(30,-82,970,859),13011=>array(30,-82,970,859),13012=>array(30,-82,970,859),13013=>array(30,-82,970,859),13014=>array(30,-82,970,859),13015=>array(30,-82,970,859),13016=>array(30,-82,970,859),13017=>array(30,-82,970,859),13018=>array(30,-82,970,859),13019=>array(30,-82,970,859),13020=>array(30,-82,970,859),13021=>array(30,-82,970,859),13022=>array(30,-82,970,859),13023=>array(30,-82,970,859),13024=>array(30,-82,970,859),13025=>array(30,-82,970,859),13026=>array(30,-82,970,859),13027=>array(30,-82,970,859),13028=>array(30,-82,970,859),13029=>array(30,-82,970,859),13030=>array(30,-82,970,859),13031=>array(30,-82,970,859),13032=>array(30,-82,970,859),13033=>array(30,-82,970,859),13034=>array(30,-82,970,859),13035=>array(30,-82,970,859),13036=>array(30,-82,970,859),13037=>array(30,-82,970,859),13038=>array(30,-82,970,859),13039=>array(30,-82,970,859),13040=>array(30,-82,970,859),13041=>array(30,-82,970,859),13042=>array(30,-82,970,859),13043=>array(30,-82,970,859),13044=>array(30,-82,970,859),13045=>array(30,-82,970,859),13046=>array(30,-82,970,859),13047=>array(30,-82,970,859),13048=>array(30,-82,970,859),13049=>array(30,-82,970,859),13050=>array(30,-82,970,859),13051=>array(30,-82,970,859),13052=>array(30,-82,970,859),13053=>array(30,-82,970,859),13054=>array(30,-82,970,859),13056=>array(54,-77,959,836),13057=>array(62,-82,960,822),13058=>array(39,-64,954,811),13059=>array(49,-64,945,811),13060=>array(73,-74,957,845),13061=>array(50,-76,949,845),13062=>array(75,-49,949,836),13063=>array(38,-77,962,804),13064=>array(58,-67,945,796),13065=>array(47,-48,949,836),13066=>array(47,-66,945,836),13067=>array(58,-75,921,845),13068=>array(58,-77,944,844),13069=>array(58,-75,944,844),13070=>array(58,-49,924,860),13071=>array(58,-67,965,860),13072=>array(51,-61,975,862),13073=>array(51,129,939,862),13074=>array(51,-75,946,862),13075=>array(51,-74,968,862),13076=>array(51,-47,924,841),13077=>array(38,-66,970,841),13078=>array(50,-78,970,844),13079=>array(51,-78,961,841),13080=>array(33,-66,944,866),13081=>array(33,-78,961,866),13082=>array(46,-66,968,844),13083=>array(54,-73,963,844),13084=>array(46,-48,945,850),13085=>array(55,-77,960,822),13086=>array(40,-71,945,802),13087=>array(46,-72,968,845),13088=>array(46,-76,970,841),13089=>array(66,-82,970,831),13090=>array(48,-76,949,836),13091=>array(48,-77,949,836),13092=>array(54,-48,945,868),13093=>array(50,-71,952,868),13094=>array(156,-64,968,856),13095=>array(156,-76,949,845),13096=>array(55,-54,904,841),13097=>array(61,-77,731,825),13098=>array(37,-64,921,845),13099=>array(37,-76,980,836),13100=>array(37,-64,945,836),13101=>array(37,-64,968,856),13102=>array(56,-78,970,857),13103=>array(49,-64,923,857),13104=>array(106,-41,918,857),13105=>array(106,-64,968,862),13106=>array(71,-78,961,794),13107=>array(53,-77,933,845),13108=>array(57,-69,970,862),13109=>array(57,-76,944,826),13110=>array(39,-73,970,844),13111=>array(39,-75,915,802),13112=>array(39,-41,939,802),13113=>array(39,-64,968,836),13114=>array(39,-48,949,811),13115=>array(39,-71,945,802),13116=>array(39,-73,945,819),13117=>array(40,-77,933,859),13118=>array(40,-77,968,859),13119=>array(40,-76,949,842),13120=>array(40,-77,949,859),13121=>array(40,-64,945,842),13122=>array(40,-76,945,842),13123=>array(55,-72,924,845),13124=>array(49,-64,921,845),13125=>array(37,-72,731,805),13126=>array(55,-72,968,836),13127=>array(57,-69,963,811),13128=>array(61,-76,949,844),13129=>array(61,-75,887,829),13130=>array(39,-72,970,831),13131=>array(67,-60,969,833),13132=>array(67,-77,969,860),13133=>array(67,-77,968,833),13134=>array(59,-77,945,847),13135=>array(49,-64,945,847),13136=>array(57,-76,950,811),13137=>array(107,-77,968,831),13138=>array(107,-73,944,831),13139=>array(49,140,955,857),13140=>array(49,-77,968,836),13141=>array(124,-66,956,835),13142=>array(118,-82,963,835),13143=>array(79,-77,718,798),13144=>array(124,-65,967,826),13145=>array(119,-65,967,826),13146=>array(88,-65,967,826),13147=>array(86,-65,967,826),13148=>array(64,-65,967,826),13149=>array(89,-65,967,826),13150=>array(102,-65,972,826),13151=>array(90,-65,967,826),13152=>array(80,-65,967,826),13153=>array(82,-65,967,826),13154=>array(47,-65,967,826),13155=>array(47,-65,967,826),13156=>array(47,-65,967,826),13157=>array(47,-65,967,826),13158=>array(47,-65,967,826),13159=>array(47,-65,967,826),13160=>array(47,-65,967,826),13161=>array(47,-65,967,826),13162=>array(47,-65,967,826),13163=>array(47,-65,967,826),13164=>array(48,-65,967,826),13165=>array(48,-65,967,826),13166=>array(48,-65,967,826),13167=>array(48,-65,967,826),13168=>array(48,-65,967,826),13169=>array(77,12,942,739),13170=>array(65,11,930,739),13171=>array(50,23,915,751),13172=>array(81,11,971,739),13173=>array(63,16,962,739),13174=>array(90,-71,934,658),13179=>array(37,-70,970,831),13180=>array(54,-60,946,831),13181=>array(28,-43,956,829),13182=>array(59,-67,970,832),13183=>array(23,-86,969,855),13184=>array(84,-171,968,739),13185=>array(82,23,968,739),13186=>array(79,-187,963,739),13187=>array(77,23,965,739),13188=>array(80,23,962,739),13189=>array(78,23,946,739),13190=>array(78,23,946,739),13191=>array(63,23,946,763),13192=>array(58,11,922,739),13193=>array(62,11,938,739),13194=>array(84,-171,942,739),13195=>array(82,23,942,739),13196=>array(80,-187,942,739),13197=>array(80,-187,919,553),13198=>array(77,-187,925,553),13199=>array(91,-187,919,739),13200=>array(91,23,949,739),13201=>array(82,23,952,739),13202=>array(72,23,957,739),13203=>array(52,23,962,763),13204=>array(44,23,952,739),13205=>array(84,-187,926,737),13206=>array(86,23,930,739),13207=>array(65,11,930,739),13208=>array(123,23,926,739),13209=>array(86,23,914,751),13210=>array(86,23,914,553),13211=>array(87,-187,914,553),13212=>array(70,23,930,553),13213=>array(63,16,918,558),13214=>array(83,23,918,739),13215=>array(67,23,958,677),13216=>array(63,16,958,677),13217=>array(149,23,926,677),13218=>array(82,23,958,739),13219=>array(67,23,964,680),13220=>array(63,16,964,680),13221=>array(149,23,932,680),13222=>array(82,23,964,739),13223=>array(75,16,937,740),13224=>array(67,16,958,740),13225=>array(104,11,926,739),13226=>array(69,11,951,739),13227=>array(58,11,961,739),13228=>array(55,23,975,763),13229=>array(70,11,930,739),13230=>array(67,11,959,740),13231=>array(67,11,966,740),13232=>array(92,-171,940,558),13233=>array(91,16,929,558),13234=>array(92,-187,946,558),13235=>array(83,16,947,558),13236=>array(92,-171,954,739),13237=>array(88,23,954,739),13238=>array(92,-187,954,739),13239=>array(70,23,954,739),13240=>array(93,23,954,739),13241=>array(76,23,959,739),13242=>array(84,-171,965,739),13243=>array(87,23,963,739),13244=>array(87,-187,963,739),13245=>array(70,23,967,739),13246=>array(91,23,965,739),13247=>array(72,23,969,739),13248=>array(87,23,945,739),13249=>array(72,23,948,739),13250=>array(65,11,955,553),13251=>array(85,-171,917,739),13252=>array(64,16,940,558),13253=>array(64,11,925,739),13254=>array(50,-187,942,761),13255=>array(63,16,955,763),13256=>array(61,11,939,739),13257=>array(64,-186,960,763),13258=>array(91,11,939,739),13259=>array(102,23,932,739),13260=>array(159,23,837,739),13261=>array(90,22,959,739),13262=>array(79,23,921,739),13263=>array(121,18,860,739),13264=>array(109,23,918,739),13265=>array(151,23,844,739),13266=>array(79,-187,921,739),13267=>array(166,23,842,739),13268=>array(88,11,947,739),13269=>array(87,23,913,739),13270=>array(69,16,931,739),13271=>array(93,-171,907,739),13272=>array(76,-171,955,558),13273=>array(69,23,931,739),13274=>array(84,23,961,739),13275=>array(98,16,918,558),13276=>array(68,23,944,763),13277=>array(51,11,952,739),13280=>array(119,-24,908,777),13281=>array(88,-24,908,797),13282=>array(86,-35,908,787),13283=>array(64,-24,908,781),13284=>array(89,-31,908,780),13285=>array(102,-34,914,787),13286=>array(90,-24,908,777),13287=>array(80,-25,908,789),13288=>array(82,-27,908,793),13289=>array(47,-35,918,795),13290=>array(47,-24,918,776),13291=>array(47,-24,918,793),13292=>array(47,-35,918,792),13293=>array(47,-24,918,785),13294=>array(47,-31,918,780),13295=>array(47,-32,918,787),13296=>array(47,-24,918,777),13297=>array(47,-24,918,786),13298=>array(47,-31,918,788),13299=>array(48,-35,918,795),13300=>array(48,-24,918,792),13301=>array(48,-24,918,792),13302=>array(48,-34,918,792),13303=>array(48,-24,918,792),13304=>array(48,-31,918,792),13305=>array(48,-32,918,792),13306=>array(48,-24,918,792),13307=>array(48,-24,918,792),13308=>array(48,-31,918,792),13309=>array(44,-35,918,795),13310=>array(44,-34,918,790),19968=>array(121,356,896,439),19969=>array(98,-68,911,768),19970=>array(102,-67,897,787),19971=>array(75,-11,896,823),19972=>array(92,9,927,814),19973=>array(92,9,927,814),19974=>array(115,-77,914,738),19975=>array(63,-77,959,738),19976=>array(83,-77,948,827),19977=>array(99,32,911,713),19978=>array(92,10,927,814),19979=>array(84,-59,916,772),19980=>array(53,-64,927,778),19981=>array(71,-65,928,769),19982=>array(68,-64,930,825),19983=>array(85,-66,937,782),19984=>array(98,-63,908,767),19985=>array(78,-11,922,764),19986=>array(80,-13,925,765),19987=>array(73,-68,921,828),19988=>array(84,-14,935,776),19989=>array(85,-6,942,771),19990=>array(64,-65,936,805),19991=>array(74,-69,926,817),19992=>array(76,-13,927,803),19993=>array(68,-74,933,767),19994=>array(67,-12,918,799),19995=>array(55,-4,915,827),19996=>array(52,-72,911,820),19997=>array(70,-9,925,828),19998=>array(58,-17,951,778),19999=>array(100,-54,898,767),20000=>array(68,-36,952,807),20001=>array(62,-64,952,787),20002=>array(66,-57,906,809),20003=>array(98,-62,914,783),20004=>array(62,-61,911,780),20005=>array(38,-61,914,782),20006=>array(68,-13,941,840),20007=>array(64,-74,944,818),20008=>array(439,-66,515,823),20009=>array(283,-55,652,833),20010=>array(30,-70,955,832),20011=>array(136,-53,866,805),20012=>array(248,-68,574,816),20013=>array(131,-65,860,826),20014=>array(71,-64,963,786),20015=>array(83,-68,933,844),20016=>array(73,-61,927,832),20017=>array(73,-72,894,826),20018=>array(123,-68,886,832),20019=>array(59,-70,912,830),20020=>array(103,-59,908,840),20021=>array(84,-54,930,814),20022=>array(289,225,647,575),20023=>array(134,287,875,584),20024=>array(52,-71,950,824),20025=>array(74,-73,939,777),20026=>array(82,-65,836,829),20027=>array(81,-6,930,841),20028=>array(82,-65,932,831),20029=>array(61,-57,912,771),20030=>array(18,-82,950,821),20031=>array(249,-60,554,834),20032=>array(72,-66,928,836),20033=>array(161,-77,953,786),20034=>array(66,-77,953,828),20035=>array(73,-56,894,776),20036=>array(117,-69,879,840),20037=>array(85,-50,957,835),20038=>array(75,-49,949,802),20039=>array(74,-24,940,816),20040=>array(94,-28,930,816),20041=>array(54,-71,955,818),20042=>array(99,262,872,706),20043=>array(64,-63,947,822),20044=>array(71,-68,889,828),20045=>array(56,-67,945,850),20046=>array(93,-64,924,826),20047=>array(65,-63,949,829),20048=>array(49,-59,941,833),20049=>array(54,-61,953,837),20050=>array(89,-77,921,826),20051=>array(87,-73,927,826),20052=>array(39,-69,948,819),20053=>array(38,-62,929,837),20054=>array(59,-65,926,831),20055=>array(50,-70,953,854),20056=>array(50,-70,953,824),20057=>array(158,-14,909,740),20058=>array(222,0,890,782),20059=>array(92,290,913,534),20060=>array(80,-20,954,822),20061=>array(77,-46,948,831),20062=>array(62,-27,925,835),20063=>array(92,-9,930,830),20064=>array(118,-62,818,769),20065=>array(96,-58,834,832),20066=>array(137,-32,953,825),20067=>array(85,-32,953,825),20068=>array(96,-43,924,792),20069=>array(113,-15,894,831),20070=>array(60,-71,894,819),20071=>array(101,-15,922,829),20072=>array(57,-53,953,828),20073=>array(91,-53,937,833),20074=>array(85,-28,958,753),20075=>array(60,-15,875,826),20076=>array(115,-15,889,804),20077=>array(76,-15,918,777),20078=>array(146,-40,897,829),20079=>array(93,-30,914,829),20080=>array(39,-62,920,779),20081=>array(58,-44,936,826),20082=>array(77,-15,954,828),20083=>array(48,-85,958,815),20084=>array(61,-45,938,806),20085=>array(74,-55,961,850),20086=>array(62,-55,956,849),20087=>array(58,-51,952,836),20088=>array(42,-27,959,828),20089=>array(108,-64,976,833),20090=>array(66,-31,938,831),20091=>array(50,-31,943,847),20092=>array(80,-31,966,859),20093=>array(67,-58,929,836),20094=>array(48,-64,950,842),20095=>array(44,-62,958,824),20096=>array(64,-43,956,853),20097=>array(81,-61,961,837),20098=>array(49,-68,962,843),20099=>array(36,-62,960,840),20100=>array(54,-30,954,831),20101=>array(290,-40,544,818),20102=>array(172,-41,829,773),20103=>array(98,-62,895,822),20104=>array(92,-66,913,782),20105=>array(69,-70,939,829),20106=>array(60,-65,950,826),20107=>array(60,-65,950,826),20108=>array(100,103,916,657),20109=>array(98,-51,914,764),20110=>array(89,-69,908,773),20111=>array(64,-62,912,770),20112=>array(64,-62,912,770),20113=>array(71,-50,934,760),20114=>array(78,-6,932,775),20115=>array(42,-66,919,784),20116=>array(82,25,916,744),20117=>array(63,-70,935,829),20118=>array(57,-24,960,791),20119=>array(57,-24,950,822),20120=>array(71,-6,941,770),20121=>array(52,-24,948,780),20122=>array(63,-7,914,775),20123=>array(65,-17,933,829),20124=>array(64,-24,952,783),20125=>array(77,-17,928,852),20126=>array(64,-24,952,783),20127=>array(74,-29,938,811),20128=>array(73,391,927,690),20129=>array(64,-3,936,822),20130=>array(66,-58,959,822),20131=>array(98,-55,911,835),20132=>array(70,-65,946,822),20133=>array(85,-64,931,840),20134=>array(57,-66,934,822),20135=>array(25,-63,889,843),20136=>array(74,-61,926,825),20137=>array(62,-56,916,841),20138=>array(81,-78,941,841),20139=>array(74,-58,936,828),20140=>array(53,-64,950,825),20141=>array(93,-58,907,836),20142=>array(65,-68,950,838),20143=>array(77,-62,923,840),20144=>array(59,-67,942,828),20145=>array(39,-63,941,846),20146=>array(49,-67,920,837),20147=>array(87,-45,961,838),20148=>array(71,-56,973,861),20149=>array(29,-75,944,841),20150=>array(53,-47,947,845),20151=>array(40,-59,955,850),20152=>array(52,-69,953,836),20153=>array(54,-47,960,858),20154=>array(71,-48,943,806),20155=>array(256,-69,592,824),20156=>array(32,-27,973,804),20157=>array(50,-56,978,838),20158=>array(171,16,906,794),20159=>array(34,-64,943,829),20160=>array(48,-68,950,829),20161=>array(47,-65,953,835),20162=>array(65,-65,910,838),20163=>array(43,-67,954,837),20164=>array(42,-66,957,775),20165=>array(23,-62,936,832),20166=>array(44,-67,956,835),20167=>array(39,-73,957,836),20168=>array(49,-73,955,828),20169=>array(60,-67,956,825),20170=>array(33,-77,967,836),20171=>array(54,-71,951,858),20172=>array(56,-47,953,831),20173=>array(58,-71,923,829),20174=>array(18,-72,964,836),20175=>array(44,-62,941,837),20176=>array(30,-58,955,832),20177=>array(30,-34,955,827),20178=>array(31,-68,964,811),20179=>array(26,-28,941,832),20180=>array(50,-64,954,834),20181=>array(46,-64,935,828),20182=>array(32,-68,956,844),20183=>array(51,-64,959,839),20184=>array(55,-73,947,838),20185=>array(43,-68,894,822),20186=>array(55,-64,957,840),20187=>array(60,-73,930,838),20188=>array(54,-63,939,832),20189=>array(56,-15,958,843),20190=>array(51,-67,895,832),20191=>array(54,-64,948,833),20192=>array(48,-67,948,829),20193=>array(46,-66,952,842),20194=>array(48,-69,920,829),20195=>array(46,-68,957,830),20196=>array(38,-67,961,846),20197=>array(66,-52,945,802),20198=>array(48,-66,951,829),20199=>array(76,-39,945,828),20200=>array(44,-66,937,830),20201=>array(57,-59,948,835),20202=>array(27,-75,949,823),20203=>array(44,-80,944,829),20204=>array(32,-57,897,837),20205=>array(24,-65,969,829),20206=>array(34,-70,949,839),20207=>array(41,-63,958,846),20208=>array(31,-64,897,853),20209=>array(54,-67,949,840),20210=>array(50,-68,902,833),20211=>array(52,-67,955,832),20212=>array(48,-66,859,832),20213=>array(52,-67,956,842),20214=>array(45,-67,950,837),20215=>array(33,-74,982,847),20216=>array(28,-69,962,833),20217=>array(43,-79,936,836),20218=>array(58,-38,982,866),20219=>array(27,-73,949,830),20220=>array(33,-67,938,835),20221=>array(50,-74,968,828),20222=>array(23,-67,951,835),20223=>array(56,-70,953,845),20224=>array(49,-61,948,837),20225=>array(28,-28,958,841),20226=>array(41,-65,946,836),20227=>array(49,-55,956,840),20228=>array(52,-68,912,828),20229=>array(41,-64,945,832),20230=>array(49,-64,921,843),20231=>array(45,-66,967,835),20232=>array(40,-59,954,846),20233=>array(40,-69,954,839),20234=>array(34,-75,950,827),20235=>array(39,-55,963,844),20236=>array(41,-72,930,819),20237=>array(29,-73,947,832),20238=>array(49,-66,960,840),20239=>array(50,-67,954,841),20240=>array(47,-73,950,822),20241=>array(49,-71,953,832),20242=>array(51,-66,937,829),20243=>array(46,-66,952,827),20244=>array(41,-71,958,832),20245=>array(50,-71,961,832),20246=>array(55,-87,958,835),20247=>array(34,-75,947,828),20248=>array(42,-64,945,840),20249=>array(50,-69,959,829),20250=>array(51,-56,954,832),20251=>array(39,-68,924,819),20252=>array(65,-57,941,831),20253=>array(45,-64,941,835),20254=>array(28,-81,950,822),20255=>array(30,-58,912,835),20256=>array(28,-66,903,831),20257=>array(50,-74,951,829),20258=>array(49,-67,932,835),20259=>array(50,-67,940,829),20260=>array(30,-66,919,823),20261=>array(39,-73,947,819),20262=>array(31,-59,935,833),20263=>array(25,-67,949,828),20264=>array(37,-67,906,836),20265=>array(37,-67,976,850),20266=>array(32,-68,895,824),20267=>array(34,-66,914,822),20268=>array(50,-66,952,834),20269=>array(39,-63,951,836),20270=>array(49,-71,959,840),20271=>array(62,-65,887,842),20272=>array(38,-67,951,835),20273=>array(62,-65,951,852),20274=>array(51,-76,952,830),20275=>array(36,-66,945,833),20276=>array(42,-65,955,835),20277=>array(42,-65,890,833),20278=>array(26,-71,965,849),20279=>array(33,-70,896,833),20280=>array(48,-65,897,843),20281=>array(34,-69,958,838),20282=>array(52,-68,896,834),20283=>array(45,-65,952,839),20284=>array(40,-69,960,839),20285=>array(29,-68,908,831),20286=>array(43,-69,936,822),20287=>array(44,-66,960,835),20288=>array(44,-65,915,835),20289=>array(48,-64,948,832),20290=>array(48,-64,946,831),20291=>array(45,-66,902,840),20292=>array(45,-66,948,840),20293=>array(45,-66,937,840),20294=>array(31,-73,934,839),20295=>array(38,-67,940,831),20296=>array(50,-65,956,842),20297=>array(42,-64,948,837),20298=>array(37,-73,966,838),20299=>array(36,-66,906,824),20300=>array(45,-63,958,837),20301=>array(41,-71,947,827),20302=>array(38,-68,961,838),20303=>array(35,-70,948,839),20304=>array(34,-66,946,834),20305=>array(42,-67,945,833),20306=>array(40,-63,965,837),20307=>array(37,-64,966,831),20308=>array(35,-63,935,840),20309=>array(33,-70,958,839),20310=>array(47,-67,956,832),20311=>array(48,-67,951,834),20312=>array(40,-61,970,857),20313=>array(61,-63,951,852),20314=>array(57,-67,967,839),20315=>array(47,-65,924,834),20316=>array(37,-67,954,847),20317=>array(66,-67,921,841),20318=>array(43,-69,945,836),20319=>array(46,-73,969,846),20320=>array(16,-73,951,833),20321=>array(48,-71,957,830),20322=>array(38,-61,943,837),20323=>array(37,-65,895,833),20324=>array(44,-68,962,840),20325=>array(26,-18,943,831),20326=>array(38,-64,921,831),20327=>array(47,-65,953,842),20328=>array(43,-59,955,836),20329=>array(39,-67,959,833),20330=>array(50,-68,897,838),20331=>array(52,-66,964,839),20332=>array(41,-65,942,832),20333=>array(37,-69,944,839),20334=>array(53,-64,968,847),20335=>array(44,-65,947,842),20336=>array(48,-67,947,833),20337=>array(48,-24,975,852),20338=>array(47,-70,883,840),20339=>array(21,-72,933,834),20340=>array(54,-74,948,835),20341=>array(37,-70,955,851),20342=>array(35,-73,924,834),20343=>array(53,-66,959,837),20344=>array(48,-55,948,845),20345=>array(42,-59,963,851),20346=>array(44,-67,951,832),20347=>array(22,-84,946,829),20348=>array(27,-70,941,835),20349=>array(63,-57,955,850),20350=>array(24,-67,974,837),20351=>array(50,-73,985,836),20352=>array(44,-70,913,841),20353=>array(46,-64,960,839),20354=>array(43,-63,954,846),20355=>array(41,-66,961,836),20356=>array(18,-66,921,831),20357=>array(41,-61,947,842),20358=>array(63,-64,956,835),20359=>array(40,-70,961,839),20360=>array(48,-62,920,844),20361=>array(32,-67,975,848),20362=>array(32,-67,946,838),20363=>array(41,-63,911,845),20364=>array(33,-81,952,861),20365=>array(52,-74,949,829),20366=>array(52,-74,976,827),20367=>array(36,-80,953,824),20368=>array(36,-61,958,847),20369=>array(39,-65,954,844),20370=>array(42,-64,942,836),20371=>array(42,-64,948,835),20372=>array(43,-71,947,843),20373=>array(42,-62,955,843),20374=>array(42,-62,966,852),20375=>array(50,-65,908,829),20376=>array(42,-70,964,829),20377=>array(38,-59,949,847),20378=>array(48,-57,938,845),20379=>array(38,-70,949,844),20380=>array(49,-73,954,843),20381=>array(36,-73,947,839),20382=>array(52,-55,905,847),20383=>array(44,-70,954,844),20384=>array(28,-67,944,832),20385=>array(24,-61,938,835),20386=>array(47,-67,949,828),20387=>array(32,-65,883,833),20388=>array(37,-60,945,832),20389=>array(10,-61,932,834),20390=>array(38,-74,922,831),20391=>array(18,-60,875,832),20392=>array(41,-55,967,848),20393=>array(32,-59,943,833),20394=>array(27,-69,937,834),20395=>array(37,-60,949,843),20396=>array(27,-69,962,834),20397=>array(27,-69,960,834),20398=>array(34,-68,946,839),20399=>array(44,-73,974,835),20400=>array(44,-73,933,835),20401=>array(44,-73,940,826),20402=>array(42,-73,969,827),20403=>array(39,-63,956,853),20404=>array(48,-61,975,852),20405=>array(36,-64,948,840),20406=>array(49,-63,900,836),20407=>array(41,-63,913,830),20408=>array(49,-63,942,836),20409=>array(35,-63,962,835),20410=>array(57,-65,957,843),20411=>array(51,-72,960,828),20412=>array(55,-64,946,830),20413=>array(53,-64,927,843),20414=>array(52,-64,953,843),20415=>array(42,-73,947,834),20416=>array(43,-63,955,842),20417=>array(35,-59,964,840),20418=>array(40,-65,954,845),20419=>array(20,-70,961,840),20420=>array(41,-64,960,840),20421=>array(42,-70,960,840),20422=>array(20,-70,948,840),20423=>array(28,-64,948,840),20424=>array(20,-70,939,840),20425=>array(53,-67,963,840),20426=>array(42,-79,953,849),20427=>array(40,-70,956,840),20428=>array(40,-70,945,840),20429=>array(59,-69,970,832),20430=>array(42,-57,954,829),20431=>array(52,-67,925,836),20432=>array(54,-66,918,847),20433=>array(21,-67,911,842),20434=>array(54,-67,946,845),20435=>array(39,-67,955,839),20436=>array(39,-54,958,841),20437=>array(39,-65,939,841),20438=>array(47,-64,947,841),20439=>array(36,-65,972,839),20440=>array(31,-62,951,832),20441=>array(42,-70,957,844),20442=>array(25,-68,948,836),20443=>array(50,-64,969,841),20444=>array(44,-65,955,850),20445=>array(35,-73,965,832),20446=>array(48,-61,975,852),20447=>array(23,-69,977,846),20448=>array(44,-68,968,840),20449=>array(32,-68,941,825),20450=>array(43,-82,954,844),20451=>array(25,-76,933,819),20452=>array(25,-70,919,842),20453=>array(26,-67,934,839),20454=>array(23,-71,953,832),20455=>array(25,-69,929,826),20456=>array(35,-69,923,823),20457=>array(32,-58,917,834),20458=>array(19,-61,911,829),20459=>array(25,-69,941,830),20460=>array(42,-64,961,850),20461=>array(19,-58,944,836),20462=>array(33,-76,973,844),20463=>array(33,-71,950,831),20464=>array(42,-64,913,850),20465=>array(22,-69,944,835),20466=>array(17,-57,909,852),20467=>array(37,-66,957,842),20468=>array(47,-60,947,840),20469=>array(41,-69,963,838),20470=>array(34,-69,981,835),20471=>array(46,-68,947,825),20472=>array(36,-68,964,843),20473=>array(51,-67,929,836),20474=>array(34,-61,967,841),20475=>array(51,-72,946,836),20476=>array(41,-74,911,844),20477=>array(44,-72,946,848),20478=>array(39,-65,950,853),20479=>array(39,-65,950,857),20480=>array(44,-68,972,831),20481=>array(47,-66,946,849),20482=>array(37,-68,955,835),20483=>array(44,-65,961,837),20484=>array(39,-64,922,844),20485=>array(32,-64,946,835),20486=>array(49,-68,941,846),20487=>array(45,-75,947,834),20488=>array(43,-65,972,836),20489=>array(62,-71,946,855),20490=>array(43,-65,969,831),20491=>array(50,-68,918,838),20492=>array(39,-65,927,854),20493=>array(39,-69,950,835),20494=>array(49,-72,943,838),20495=>array(31,-73,966,846),20496=>array(14,-67,952,848),20497=>array(27,-70,892,841),20498=>array(53,-68,903,839),20499=>array(50,-66,952,843),20500=>array(38,-66,908,831),20501=>array(46,-67,949,832),20502=>array(42,-65,940,844),20503=>array(54,-64,890,834),20504=>array(35,-65,895,836),20505=>array(20,-68,958,843),20506=>array(36,-64,953,842),20507=>array(54,-77,951,834),20508=>array(45,-72,926,840),20509=>array(73,-73,961,833),20510=>array(35,-68,956,832),20511=>array(41,-68,953,838),20512=>array(46,-71,935,825),20513=>array(52,-65,897,833),20514=>array(44,-64,978,839),20515=>array(29,-69,974,847),20516=>array(36,-68,943,837),20517=>array(26,-69,954,834),20518=>array(34,-67,963,835),20519=>array(62,-59,967,839),20520=>array(32,-71,947,841),20521=>array(36,-67,956,847),20522=>array(49,-77,951,821),20523=>array(31,-71,976,855),20524=>array(46,-65,951,836),20525=>array(12,-67,952,842),20526=>array(33,-67,979,843),20527=>array(52,-68,967,830),20528=>array(44,-65,956,834),20529=>array(59,-59,960,836),20530=>array(59,-64,943,836),20531=>array(51,-64,956,831),20532=>array(46,-68,975,835),20533=>array(47,-62,951,830),20534=>array(39,-65,961,838),20535=>array(52,-62,963,832),20536=>array(47,-62,975,848),20537=>array(39,-71,955,841),20538=>array(35,-86,913,827),20539=>array(30,-65,973,835),20540=>array(37,-68,943,834),20541=>array(54,-59,969,875),20542=>array(29,-59,955,828),20543=>array(39,-64,939,841),20544=>array(46,-70,972,839),20545=>array(44,-68,952,836),20546=>array(48,-65,960,850),20547=>array(27,-73,945,841),20548=>array(46,-70,975,837),20549=>array(46,-70,956,837),20550=>array(39,-69,972,840),20551=>array(41,-70,962,835),20552=>array(45,-69,920,825),20553=>array(42,-66,948,844),20554=>array(45,-67,918,835),20555=>array(40,-72,951,841),20556=>array(36,-66,954,847),20557=>array(47,-73,961,833),20558=>array(33,-71,970,844),20559=>array(38,-68,921,837),20560=>array(35,-71,939,836),20561=>array(37,-68,966,832),20562=>array(41,-66,944,842),20563=>array(47,-68,960,841),20564=>array(41,-66,925,842),20565=>array(31,-68,963,840),20566=>array(31,-66,938,842),20567=>array(55,-67,956,843),20568=>array(46,-65,920,829),20569=>array(61,-65,908,839),20570=>array(51,-74,963,835),20571=>array(46,-67,958,836),20572=>array(37,-65,934,834),20573=>array(37,-65,953,845),20574=>array(44,-70,955,833),20575=>array(49,-52,951,852),20576=>array(46,-75,960,834),20577=>array(51,-64,959,841),20578=>array(40,-54,973,848),20579=>array(54,-68,956,845),20580=>array(44,-71,936,828),20581=>array(43,-73,966,834),20582=>array(43,-70,957,834),20583=>array(28,-70,980,834),20584=>array(31,-71,969,834),20585=>array(55,-73,943,838),20586=>array(47,-53,948,839),20587=>array(53,-66,968,839),20588=>array(33,-68,970,846),20589=>array(38,-62,944,837),20590=>array(45,-71,952,830),20591=>array(41,-74,960,843),20592=>array(40,-73,960,835),20593=>array(43,-67,935,840),20594=>array(43,-65,971,833),20595=>array(44,-64,951,839),20596=>array(42,-68,902,834),20597=>array(48,-79,943,836),20598=>array(38,-62,907,836),20599=>array(53,-63,979,862),20600=>array(37,-71,963,824),20601=>array(23,-66,962,840),20602=>array(44,-66,960,840),20603=>array(23,-66,933,830),20604=>array(36,-61,954,839),20605=>array(41,-67,924,835),20606=>array(27,-69,925,834),20607=>array(21,-57,912,834),20608=>array(26,-72,967,841),20609=>array(50,-72,963,832),20610=>array(49,-69,961,837),20611=>array(55,-70,948,837),20612=>array(41,-64,968,840),20613=>array(31,-65,941,838),20614=>array(56,-75,958,838),20615=>array(58,-72,961,833),20616=>array(30,-65,979,838),20617=>array(44,-69,953,827),20618=>array(44,-73,936,827),20619=>array(44,-69,951,827),20620=>array(44,-58,941,848),20621=>array(36,-64,941,833),20622=>array(41,-58,955,848),20623=>array(45,-75,948,843),20624=>array(39,-65,906,841),20625=>array(31,-65,971,847),20626=>array(38,-65,978,837),20627=>array(53,-60,903,842),20628=>array(45,-57,960,850),20629=>array(60,-71,960,830),20630=>array(29,-80,969,851),20631=>array(29,-69,950,843),20632=>array(52,-58,971,847),20633=>array(29,-69,956,835),20634=>array(25,-57,978,832),20635=>array(44,-66,958,840),20636=>array(46,-72,953,839),20637=>array(39,-73,917,829),20638=>array(39,-62,954,853),20639=>array(42,-71,922,844),20640=>array(37,-67,968,844),20641=>array(47,-44,970,844),20642=>array(37,-68,976,854),20643=>array(32,-65,976,845),20644=>array(42,-64,964,836),20645=>array(28,-64,934,829),20646=>array(28,-72,943,823),20647=>array(30,-66,938,841),20648=>array(28,-63,922,833),20649=>array(27,-61,924,828),20650=>array(27,-76,967,847),20651=>array(34,-70,943,830),20652=>array(30,-60,936,840),20653=>array(34,-68,957,840),20654=>array(44,-66,954,843),20655=>array(44,-64,969,838),20656=>array(38,-71,903,840),20657=>array(40,-74,973,835),20658=>array(32,-67,958,835),20659=>array(35,-70,951,836),20660=>array(35,-65,948,838),20661=>array(41,-72,963,833),20662=>array(46,-74,967,838),20663=>array(31,-67,953,839),20664=>array(42,-80,961,837),20665=>array(39,-65,952,847),20666=>array(29,-65,958,841),20667=>array(28,-66,961,841),20668=>array(33,-66,948,841),20669=>array(44,-71,954,847),20670=>array(35,-67,962,831),20671=>array(39,-70,949,834),20672=>array(29,-72,949,859),20673=>array(47,-62,965,839),20674=>array(30,-72,950,835),20675=>array(26,-65,907,832),20676=>array(46,-65,955,834),20677=>array(33,-70,944,840),20678=>array(17,-61,965,840),20679=>array(36,-57,974,844),20680=>array(41,-81,960,832),20681=>array(37,-66,979,847),20682=>array(41,-64,958,840),20683=>array(46,-80,970,847),20684=>array(25,-71,968,847),20685=>array(43,-66,925,832),20686=>array(37,-58,950,843),20687=>array(40,-62,963,840),20688=>array(45,-66,909,844),20689=>array(35,-66,965,832),20690=>array(47,-65,952,843),20691=>array(55,-79,959,840),20692=>array(46,-67,949,843),20693=>array(48,-64,963,835),20694=>array(39,-68,951,834),20695=>array(52,-71,934,831),20696=>array(23,-67,985,844),20697=>array(44,-70,969,835),20698=>array(41,-64,983,842),20699=>array(38,-74,963,839),20700=>array(55,-45,963,829),20701=>array(55,-70,962,826),20702=>array(33,-65,930,839),20703=>array(38,-56,946,835),20704=>array(62,-70,965,828),20705=>array(53,-52,962,836),20706=>array(43,-67,947,833),20707=>array(34,-64,968,836),20708=>array(68,-67,967,835),20709=>array(38,-67,962,837),20710=>array(35,-64,967,851),20711=>array(39,-60,907,843),20712=>array(39,-72,968,841),20713=>array(52,-52,911,840),20714=>array(54,-64,918,833),20715=>array(52,-52,962,840),20716=>array(34,-68,967,842),20717=>array(24,-65,972,838),20718=>array(29,-71,953,832),20719=>array(57,-72,974,833),20720=>array(47,-63,963,835),20721=>array(30,-62,952,847),20722=>array(25,-75,948,832),20723=>array(20,-69,965,839),20724=>array(52,-52,911,840),20725=>array(45,-61,956,838),20726=>array(43,-70,982,832),20727=>array(45,-72,955,847),20728=>array(30,-70,972,834),20729=>array(28,-71,949,826),20730=>array(47,-70,959,828),20731=>array(35,-65,958,847),20732=>array(47,-66,951,833),20733=>array(37,-68,988,830),20734=>array(41,-57,972,858),20735=>array(34,-70,979,834),20736=>array(39,-68,963,845),20737=>array(39,-74,942,844),20738=>array(36,-76,977,843),20739=>array(44,-70,960,838),20740=>array(36,-67,960,840),20741=>array(53,-68,915,836),20742=>array(26,-66,978,841),20743=>array(50,-66,979,837),20744=>array(34,-61,968,863),20745=>array(38,-69,965,851),20746=>array(34,-72,978,836),20747=>array(20,-72,942,839),20748=>array(28,-58,963,850),20749=>array(39,-56,965,853),20750=>array(42,-65,964,836),20751=>array(38,-67,968,845),20752=>array(28,-68,964,854),20753=>array(47,-79,962,825),20754=>array(36,-60,956,839),20755=>array(52,-67,964,829),20756=>array(32,-65,953,838),20757=>array(41,-71,963,837),20758=>array(51,-65,942,843),20759=>array(30,-64,969,839),20760=>array(31,-64,964,845),20761=>array(31,-64,960,845),20762=>array(37,-59,938,838),20763=>array(39,-67,943,842),20764=>array(39,-67,948,841),20765=>array(50,-65,937,856),20766=>array(37,-75,951,837),20767=>array(28,-73,961,842),20768=>array(47,-71,954,836),20769=>array(54,-68,923,826),20770=>array(46,-70,964,829),20771=>array(64,-74,959,846),20772=>array(49,-68,965,830),20773=>array(47,-79,940,835),20774=>array(42,-76,963,841),20775=>array(37,-77,963,838),20776=>array(39,-80,947,838),20777=>array(49,-75,934,838),20778=>array(30,-73,954,835),20779=>array(40,-73,957,840),20780=>array(5,-73,996,835),20781=>array(35,-73,972,830),20782=>array(36,-66,952,836),20783=>array(26,-64,963,846),20784=>array(44,-75,951,834),20785=>array(28,-66,967,845),20786=>array(40,-68,946,838),20787=>array(41,-66,969,844),20788=>array(33,-69,979,844),20789=>array(32,-68,971,843),20790=>array(33,-67,940,848),20791=>array(36,-69,968,841),20792=>array(44,-55,950,840),20793=>array(30,-72,954,840),20794=>array(29,-69,955,839),20795=>array(27,-68,973,848),20796=>array(34,-70,971,832),20797=>array(47,-72,935,832),20798=>array(36,-71,964,839),20799=>array(39,-81,955,815),20800=>array(46,-64,942,754),20801=>array(82,-59,936,842),20802=>array(40,-65,963,824),20803=>array(76,-67,939,767),20804=>array(85,-65,932,776),20805=>array(64,-68,951,822),20806=>array(73,-64,933,832),20807=>array(40,-60,953,836),20808=>array(89,-67,934,839),20809=>array(66,-63,930,832),20810=>array(49,-68,949,835),20811=>array(60,-67,937,832),20812=>array(51,-60,953,812),20813=>array(52,-70,948,840),20814=>array(68,-60,959,831),20815=>array(37,-66,956,794),20816=>array(52,-66,929,737),20817=>array(67,-64,941,848),20818=>array(88,-62,927,833),20819=>array(36,-64,970,794),20820=>array(63,-67,950,842),20821=>array(41,-65,962,780),20822=>array(58,-67,956,848),20823=>array(42,-62,959,834),20824=>array(30,-50,960,823),20825=>array(29,-80,961,845),20826=>array(52,-64,948,828),20827=>array(30,-79,955,845),20828=>array(52,-66,948,844),20829=>array(29,-80,954,846),20830=>array(28,-81,977,844),20831=>array(41,-68,956,830),20832=>array(36,-66,962,845),20833=>array(27,-79,953,845),20834=>array(32,-71,958,830),20835=>array(34,-81,965,845),20836=>array(28,-79,958,844),20837=>array(85,-38,933,769),20838=>array(143,-12,903,787),20839=>array(127,-69,877,786),20840=>array(40,-23,935,803),20841=>array(60,-68,953,783),20842=>array(35,-66,965,822),20843=>array(44,-36,949,791),20844=>array(51,-54,956,804),20845=>array(62,-29,946,810),20846=>array(46,-60,954,816),20847=>array(118,-57,799,812),20848=>array(65,-27,915,796),20849=>array(75,-70,925,829),20850=>array(90,-57,931,809),20851=>array(38,-62,919,831),20852=>array(47,-51,915,809),20853=>array(53,-66,958,817),20854=>array(63,-65,936,832),20855=>array(63,-64,942,789),20856=>array(52,-71,943,833),20857=>array(63,-47,912,831),20858=>array(46,-54,951,829),20859=>array(33,-67,951,839),20860=>array(50,-62,959,841),20861=>array(65,-63,917,836),20862=>array(65,-61,935,837),20863=>array(79,-56,952,830),20864=>array(57,-74,929,834),20865=>array(50,-67,969,814),20866=>array(131,-66,869,766),20867=>array(136,-69,864,795),20868=>array(52,-66,942,800),20869=>array(131,-64,865,824),20870=>array(151,-51,849,781),20871=>array(70,-62,934,849),20872=>array(107,-61,856,789),20873=>array(53,-67,947,839),20874=>array(52,-66,948,788),20875=>array(131,-65,887,779),20876=>array(47,-79,958,786),20877=>array(67,-61,954,791),20878=>array(117,-55,879,800),20879=>array(122,-65,878,783),20880=>array(189,-50,851,788),20881=>array(189,-60,851,834),20882=>array(131,-65,869,810),20883=>array(60,-65,954,833),20884=>array(101,-60,941,809),20885=>array(43,-61,951,809),20886=>array(94,353,906,541),20887=>array(56,-67,945,762),20888=>array(44,-73,949,825),20889=>array(65,-58,939,786),20890=>array(108,-67,891,772),20891=>array(58,-59,909,780),20892=>array(42,-70,959,828),20893=>array(51,-59,953,799),20894=>array(50,-65,961,782),20895=>array(81,-38,940,806),20896=>array(51,-67,957,787),20897=>array(75,-50,951,763),20898=>array(60,-67,965,783),20899=>array(76,-53,945,790),20900=>array(54,-60,952,795),20901=>array(67,-70,933,793),20902=>array(43,-60,959,785),20903=>array(28,-66,986,783),20904=>array(99,-55,908,785),20905=>array(82,-66,910,802),20906=>array(60,-67,965,785),20907=>array(338,-28,574,766),20908=>array(67,-72,958,855),20909=>array(61,-72,957,840),20910=>array(40,-57,940,717),20911=>array(52,-48,888,781),20912=>array(48,-65,966,837),20913=>array(53,-22,951,769),20914=>array(44,-61,897,833),20915=>array(55,-66,972,836),20916=>array(65,-63,936,793),20917=>array(38,-72,933,758),20918=>array(63,-62,954,834),20919=>array(54,-71,966,849),20920=>array(49,-62,954,835),20921=>array(58,-71,956,839),20922=>array(58,-61,939,786),20923=>array(52,-60,948,832),20924=>array(55,-66,957,827),20925=>array(48,-67,893,830),20926=>array(48,-62,970,843),20927=>array(31,-62,959,841),20928=>array(58,-61,922,839),20929=>array(58,-65,948,835),20930=>array(64,-71,955,840),20931=>array(48,-68,975,843),20932=>array(44,-70,936,835),20933=>array(59,-49,895,788),20934=>array(57,-65,950,835),20935=>array(39,-60,943,830),20936=>array(55,-67,950,822),20937=>array(63,-63,961,830),20938=>array(49,-50,955,854),20939=>array(33,-74,878,781),20940=>array(41,-70,959,831),20941=>array(48,-58,965,839),20942=>array(57,-38,962,817),20943=>array(38,-80,939,834),20944=>array(60,-27,954,787),20945=>array(42,-67,959,834),20946=>array(42,-58,927,835),20947=>array(54,-62,978,791),20948=>array(46,-52,974,866),20949=>array(54,-70,946,788),20950=>array(54,-64,950,841),20951=>array(39,-69,951,825),20952=>array(39,-53,951,851),20953=>array(32,-59,956,797),20954=>array(59,-68,955,831),20955=>array(43,-64,930,832),20956=>array(55,-65,973,833),20957=>array(16,-70,972,819),20958=>array(46,-73,951,818),20959=>array(37,-70,962,837),20960=>array(34,-65,961,774),20961=>array(72,-71,935,767),20962=>array(72,-71,935,831),20963=>array(72,-71,935,801),20964=>array(34,-65,939,791),20965=>array(52,-74,949,778),20966=>array(18,-67,935,818),20967=>array(47,-65,953,791),20968=>array(34,-65,939,791),20969=>array(38,-61,961,791),20970=>array(34,-65,939,791),20971=>array(48,-58,958,842),20972=>array(34,-65,939,791),20973=>array(32,-60,966,837),20974=>array(34,-65,939,791),20975=>array(72,-65,972,826),20976=>array(63,-66,963,792),20977=>array(62,-67,954,836),20978=>array(63,-66,963,792),20979=>array(59,-74,954,839),20980=>array(39,-56,952,800),20981=>array(112,-72,888,808),20982=>array(130,-44,870,775),20983=>array(128,-64,872,798),20984=>array(143,-66,894,778),20985=>array(126,-38,874,775),20986=>array(144,-65,868,838),20987=>array(75,-67,925,826),20988=>array(111,-66,889,819),20989=>array(81,-61,919,799),20990=>array(102,-52,898,803),20991=>array(75,-64,925,828),20992=>array(85,-34,856,760),20993=>array(80,-50,868,782),20994=>array(364,-64,619,827),20995=>array(46,-54,877,761),20996=>array(53,-35,947,751),20997=>array(70,-69,917,751),20998=>array(65,-69,936,779),20999=>array(44,-73,897,797),21000=>array(77,-64,899,817),21001=>array(55,-77,905,826),21002=>array(71,-62,893,831),21003=>array(56,-63,893,831),21004=>array(72,-66,908,836),21005=>array(77,-43,851,828),21006=>array(71,-62,893,839),21007=>array(62,-63,913,840),21008=>array(53,-66,910,821),21009=>array(59,-70,899,829),21010=>array(45,-64,897,835),21011=>array(41,-69,907,826),21012=>array(95,-66,914,836),21013=>array(36,-66,947,806),21014=>array(60,-69,913,826),21015=>array(83,-76,901,832),21016=>array(29,-57,884,841),21017=>array(30,-66,883,823),21018=>array(90,-60,873,830),21019=>array(43,-61,893,837),21020=>array(57,-64,912,832),21021=>array(32,-73,900,822),21022=>array(56,-59,900,833),21023=>array(78,-70,893,831),21024=>array(27,-75,885,820),21025=>array(100,-67,901,828),21026=>array(49,-61,907,835),21027=>array(67,-65,878,831),21028=>array(58,-70,898,832),21029=>array(54,-68,899,825),21030=>array(72,-65,873,831),21031=>array(58,-64,906,831),21032=>array(55,-64,911,841),21033=>array(57,-67,920,826),21034=>array(63,-68,906,830),21035=>array(70,-70,883,821),21036=>array(44,-63,897,841),21037=>array(21,-60,875,827),21038=>array(77,-69,898,831),21039=>array(53,-64,900,823),21040=>array(65,-65,905,826),21041=>array(47,-69,973,825),21042=>array(64,-64,914,828),21043=>array(42,-65,905,831),21044=>array(44,-68,898,826),21045=>array(54,-61,894,833),21046=>array(77,-68,914,836),21047=>array(59,-68,898,830),21048=>array(69,-55,952,837),21049=>array(41,-63,892,837),21050=>array(71,-65,906,831),21051=>array(56,-63,902,829),21052=>array(62,-54,927,831),21053=>array(30,-57,881,837),21054=>array(42,-62,898,825),21055=>array(35,-68,882,823),21056=>array(79,-63,874,826),21057=>array(60,-62,919,831),21058=>array(28,-68,882,830),21059=>array(41,-64,897,845),21060=>array(67,-65,918,831),21061=>array(50,-69,895,829),21062=>array(138,-69,899,829),21063=>array(67,-70,897,830),21064=>array(119,-66,879,825),21065=>array(53,-63,900,834),21066=>array(80,-63,894,833),21067=>array(35,-63,965,836),21068=>array(63,-66,914,835),21069=>array(76,-60,924,850),21070=>array(79,-70,907,841),21071=>array(33,-69,971,839),21072=>array(88,-63,875,830),21073=>array(28,-65,883,838),21074=>array(77,-62,910,829),21075=>array(44,-59,924,814),21076=>array(60,-71,906,829),21077=>array(50,-57,912,845),21078=>array(63,-65,896,833),21079=>array(110,-69,891,830),21080=>array(88,-68,874,830),21081=>array(35,-62,958,830),21082=>array(46,-58,893,836),21083=>array(103,-67,898,829),21084=>array(52,-73,918,851),21085=>array(71,-62,893,848),21086=>array(82,-65,920,836),21087=>array(66,-73,913,823),21088=>array(55,-71,877,844),21089=>array(62,-67,943,835),21090=>array(73,-68,924,823),21091=>array(35,-65,907,844),21092=>array(52,-66,906,826),21093=>array(54,-48,879,836),21094=>array(32,-63,900,840),21095=>array(21,-62,880,833),21096=>array(39,-66,922,834),21097=>array(36,-67,910,834),21098=>array(70,-64,927,842),21099=>array(55,-75,917,835),21100=>array(71,-69,917,833),21101=>array(55,-70,921,821),21102=>array(111,-64,896,829),21103=>array(74,-70,914,829),21104=>array(46,-65,918,828),21105=>array(37,-70,971,837),21106=>array(59,-58,914,833),21107=>array(36,-56,894,804),21108=>array(68,-64,914,835),21109=>array(46,-72,901,842),21110=>array(46,-64,911,838),21111=>array(43,-67,905,848),21112=>array(54,-55,903,845),21113=>array(42,-65,920,824),21114=>array(33,-76,968,833),21115=>array(42,-70,904,831),21116=>array(32,-71,905,852),21117=>array(53,-62,924,829),21118=>array(112,-59,890,829),21119=>array(50,-62,900,846),21120=>array(37,-67,904,819),21121=>array(37,-68,894,835),21122=>array(52,-70,923,829),21123=>array(50,-63,921,830),21124=>array(40,-54,911,835),21125=>array(57,-63,910,823),21126=>array(26,-63,912,844),21127=>array(40,-67,910,835),21128=>array(53,-63,947,840),21129=>array(44,-64,911,837),21130=>array(45,-71,917,854),21131=>array(38,-71,906,823),21132=>array(44,-65,928,836),21133=>array(47,-69,897,848),21134=>array(47,-68,886,848),21135=>array(91,-64,883,842),21136=>array(44,-66,903,825),21137=>array(53,-73,915,827),21138=>array(41,-71,919,843),21139=>array(61,-64,919,861),21140=>array(39,-75,973,840),21141=>array(36,-68,908,825),21142=>array(34,-61,905,852),21143=>array(58,-73,913,830),21144=>array(43,-62,899,860),21145=>array(67,-70,921,841),21146=>array(46,-50,909,848),21147=>array(70,-56,863,824),21148=>array(45,-65,958,825),21149=>array(35,-70,895,820),21150=>array(64,-59,931,838),21151=>array(73,-76,892,823),21152=>array(58,-76,913,831),21153=>array(35,-69,958,829),21154=>array(30,-63,900,824),21155=>array(67,-63,942,838),21156=>array(40,-63,946,839),21157=>array(46,-65,895,846),21158=>array(36,-69,946,844),21159=>array(73,-71,896,824),21160=>array(55,-60,887,832),21161=>array(53,-67,926,833),21162=>array(67,-70,939,822),21163=>array(63,-75,918,823),21164=>array(42,-68,904,844),21165=>array(64,-63,915,830),21166=>array(60,-64,927,836),21167=>array(47,-67,946,834),21168=>array(99,-59,888,833),21169=>array(30,-58,901,831),21170=>array(25,-59,888,833),21171=>array(59,-61,915,830),21172=>array(59,-61,896,841),21173=>array(35,-73,957,827),21174=>array(14,-57,904,822),21175=>array(80,-72,909,842),21176=>array(62,-49,922,831),21177=>array(68,-65,927,832),21178=>array(90,-77,924,824),21179=>array(96,-73,917,828),21180=>array(57,-62,915,839),21181=>array(89,-57,869,792),21182=>array(53,-63,926,830),21183=>array(58,-57,951,833),21184=>array(40,-69,951,846),21185=>array(55,-70,916,829),21186=>array(76,-55,928,839),21187=>array(103,-75,904,831),21188=>array(62,-77,904,839),21189=>array(32,-68,904,836),21190=>array(113,-75,915,843),21191=>array(45,-70,875,809),21192=>array(95,-68,890,830),21193=>array(38,-60,965,835),21194=>array(35,-63,965,836),21195=>array(30,-65,890,830),21196=>array(49,-62,914,850),21197=>array(43,-72,909,826),21198=>array(105,-59,939,832),21199=>array(103,-77,914,840),21200=>array(48,-77,914,822),21201=>array(54,-65,916,836),21202=>array(72,-65,917,829),21203=>array(88,-70,916,828),21204=>array(65,-77,905,832),21205=>array(58,-68,914,832),21206=>array(77,-76,953,839),21207=>array(48,-67,918,811),21208=>array(54,-71,914,827),21209=>array(37,-71,971,844),21210=>array(56,-76,922,827),21211=>array(51,-76,952,838),21212=>array(48,-75,926,832),21213=>array(41,-76,957,839),21214=>array(52,-73,919,832),21215=>array(58,-61,967,837),21216=>array(43,-72,926,827),21217=>array(67,-68,921,832),21218=>array(49,-68,957,829),21219=>array(58,-66,916,837),21220=>array(44,-68,929,827),21221=>array(49,-55,949,819),21222=>array(37,-76,918,842),21223=>array(37,-61,920,841),21224=>array(53,-69,912,842),21225=>array(53,-58,899,850),21226=>array(31,-68,940,842),21227=>array(28,-69,910,822),21228=>array(27,-69,934,840),21229=>array(52,-73,918,849),21230=>array(26,-73,931,835),21231=>array(54,-78,921,844),21232=>array(35,-66,966,834),21233=>array(54,-67,924,830),21234=>array(54,-72,928,833),21235=>array(45,-76,918,839),21236=>array(46,-73,928,825),21237=>array(27,-76,929,825),21238=>array(44,-45,949,840),21239=>array(54,-61,919,844),21240=>array(38,-76,920,838),21241=>array(30,-69,875,826),21242=>array(82,-62,896,850),21243=>array(93,-59,894,838),21244=>array(61,-63,903,826),21245=>array(82,-62,900,839),21246=>array(56,-55,898,829),21247=>array(71,-44,895,852),21248=>array(84,-59,930,838),21249=>array(38,-59,928,838),21250=>array(55,-59,912,844),21251=>array(55,-59,912,844),21252=>array(55,-59,912,844),21253=>array(48,-33,955,838),21254=>array(64,-58,902,842),21255=>array(63,-59,912,839),21256=>array(55,-59,912,844),21257=>array(57,-66,886,837),21258=>array(57,-59,911,845),21259=>array(68,-60,938,841),21260=>array(68,-60,938,841),21261=>array(74,-63,922,843),21262=>array(58,-70,918,829),21263=>array(42,-65,964,834),21264=>array(59,-65,915,845),21265=>array(48,-63,914,840),21266=>array(48,-68,902,843),21267=>array(52,-68,909,843),21268=>array(48,-63,916,840),21269=>array(304,-45,928,803),21270=>array(48,-57,950,836),21271=>array(45,-50,948,792),21272=>array(99,-53,921,804),21273=>array(56,-78,970,811),21274=>array(133,-71,930,795),21275=>array(93,-26,894,768),21276=>array(99,-21,926,788),21277=>array(92,-70,923,831),21278=>array(93,-26,894,768),21279=>array(96,-23,920,794),21280=>array(128,-48,921,790),21281=>array(121,-70,921,791),21282=>array(115,-32,942,778),21283=>array(133,-71,930,795),21284=>array(113,-76,930,811),21285=>array(112,-32,912,791),21286=>array(112,-32,959,796),21287=>array(114,-32,916,796),21288=>array(112,-32,922,796),21289=>array(101,-28,918,785),21290=>array(114,-69,931,789),21291=>array(115,-32,942,778),21292=>array(87,-29,950,789),21293=>array(85,-26,941,792),21294=>array(112,-32,922,796),21295=>array(129,-71,930,795),21296=>array(136,-23,951,787),21297=>array(117,-72,953,814),21298=>array(117,-26,945,804),21299=>array(133,-71,946,795),21300=>array(118,-29,954,780),21301=>array(85,-26,932,804),21302=>array(136,-59,951,795),21303=>array(92,-31,938,784),21304=>array(76,-5,924,762),21305=>array(134,-71,933,742),21306=>array(133,-57,933,784),21307=>array(103,-56,927,791),21308=>array(77,-26,934,797),21309=>array(69,-30,942,787),21310=>array(71,-30,950,796),21311=>array(118,-68,939,800),21312=>array(133,-71,930,795),21313=>array(105,-70,902,838),21314=>array(64,-37,962,786),21315=>array(113,-68,906,830),21316=>array(67,-44,933,821),21317=>array(46,-68,948,819),21318=>array(55,-64,950,833),21319=>array(80,-71,930,827),21320=>array(90,-68,918,834),21321=>array(55,-69,941,829),21322=>array(76,-67,909,824),21323=>array(69,-63,931,827),21324=>array(63,-59,937,825),21325=>array(91,-26,909,787),21326=>array(28,-57,918,831),21327=>array(51,-62,948,834),21328=>array(94,-26,911,787),21329=>array(64,-67,936,846),21330=>array(82,-67,918,837),21331=>array(65,-68,935,826),21332=>array(63,-70,924,835),21333=>array(54,-58,926,841),21334=>array(49,-65,923,832),21335=>array(68,-72,942,830),21336=>array(64,-62,936,854),21337=>array(58,-49,939,830),21338=>array(53,-71,949,835),21339=>array(53,-46,942,813),21340=>array(403,-65,899,825),21341=>array(73,-26,924,790),21342=>array(74,-62,926,819),21343=>array(107,-63,947,828),21344=>array(184,-70,903,832),21345=>array(77,-68,927,828),21346=>array(39,-58,916,829),21347=>array(113,-65,903,833),21348=>array(136,-66,911,826),21349=>array(136,-66,911,826),21350=>array(37,-68,957,827),21351=>array(111,-62,954,818),21352=>array(96,-67,902,836),21353=>array(303,-69,717,781),21354=>array(291,-69,743,781),21355=>array(63,-5,913,747),21356=>array(104,-69,892,832),21357=>array(53,-69,890,746),21358=>array(59,-65,933,835),21359=>array(50,-62,903,839),21360=>array(148,-64,883,835),21361=>array(62,-67,928,836),21362=>array(52,-55,916,799),21363=>array(55,-67,896,786),21364=>array(49,-60,888,826),21365=>array(59,-71,883,815),21366=>array(29,-70,893,836),21367=>array(31,-45,959,834),21368=>array(73,-63,898,846),21369=>array(39,-54,907,861),21370=>array(26,-27,947,783),21371=>array(47,-68,910,837),21372=>array(51,-71,962,832),21373=>array(140,-73,894,827),21374=>array(88,-63,894,788),21375=>array(41,-70,920,834),21376=>array(54,-60,907,829),21377=>array(39,-63,951,835),21378=>array(38,-64,922,791),21379=>array(62,-67,900,836),21380=>array(50,-64,942,777),21381=>array(38,-67,904,774),21382=>array(39,-57,911,786),21383=>array(40,-57,941,789),21384=>array(38,-68,914,792),21385=>array(36,-56,911,781),21386=>array(51,-75,933,775),21387=>array(37,-63,913,771),21388=>array(37,-62,926,778),21389=>array(35,-72,922,775),21390=>array(44,-68,937,796),21391=>array(56,-68,936,777),21392=>array(34,-64,957,788),21393=>array(29,-64,942,788),21394=>array(52,-64,934,779),21395=>array(40,-57,926,798),21396=>array(35,-62,948,793),21397=>array(17,-73,896,786),21398=>array(27,-67,957,788),21399=>array(73,-65,957,780),21400=>array(45,-74,932,779),21401=>array(49,-70,956,795),21402=>array(50,-65,940,809),21403=>array(34,-64,950,788),21404=>array(46,-72,959,782),21405=>array(50,-68,943,780),21406=>array(57,-73,932,764),21407=>array(59,-65,932,787),21408=>array(39,-63,942,788),21409=>array(50,-101,916,782),21410=>array(18,-69,925,785),21411=>array(35,-73,938,765),21412=>array(39,-64,974,792),21413=>array(39,-67,962,793),21414=>array(42,-75,938,816),21415=>array(43,-81,951,786),21416=>array(20,-62,909,785),21417=>array(37,-63,961,802),21418=>array(24,-47,929,811),21419=>array(46,-60,948,795),21420=>array(48,-69,966,784),21421=>array(39,-71,963,785),21422=>array(23,-71,930,791),21423=>array(39,-65,958,791),21424=>array(46,-71,951,783),21425=>array(46,-71,948,783),21426=>array(51,-71,939,784),21427=>array(34,-79,894,835),21428=>array(47,-71,947,798),21429=>array(27,-45,882,821),21430=>array(117,11,903,746),21431=>array(56,-20,928,843),21432=>array(61,-25,941,767),21433=>array(57,-65,949,829),21434=>array(56,-59,933,843),21435=>array(79,-56,931,832),21436=>array(61,-64,932,816),21437=>array(67,-44,905,806),21438=>array(97,-60,971,791),21439=>array(61,-72,913,786),21440=>array(133,-48,955,823),21441=>array(38,-32,962,838),21442=>array(18,-74,970,848),21443=>array(30,-88,968,844),21444=>array(30,-15,968,852),21445=>array(30,-61,968,852),21446=>array(68,-66,977,836),21447=>array(38,-68,961,829),21448=>array(94,-34,920,754),21449=>array(63,-50,948,773),21450=>array(36,-64,945,767),21451=>array(63,-61,939,843),21452=>array(37,-67,955,770),21453=>array(51,-71,942,790),21454=>array(53,-50,962,816),21455=>array(58,-38,930,828),21456=>array(38,-62,940,827),21457=>array(38,-60,940,828),21458=>array(52,-57,944,801),21459=>array(58,-68,930,812),21460=>array(50,-64,963,833),21461=>array(48,-50,944,815),21462=>array(43,-70,960,780),21463=>array(64,-68,936,829),21464=>array(38,-59,934,833),21465=>array(16,-63,942,836),21466=>array(141,-75,963,781),21467=>array(52,-75,966,834),21468=>array(48,-57,961,839),21469=>array(54,-51,962,811),21470=>array(19,-61,953,785),21471=>array(31,-67,969,829),21472=>array(55,-29,954,806),21473=>array(34,-70,971,833),21474=>array(52,-71,945,829),21475=>array(184,5,818,695),21476=>array(83,-71,911,823),21477=>array(65,-51,902,840),21478=>array(78,-70,859,780),21479=>array(78,-70,859,780),21480=>array(124,-76,895,755),21481=>array(120,-65,894,766),21482=>array(58,-40,928,772),21483=>array(113,-64,929,831),21484=>array(76,-70,861,789),21485=>array(95,-65,952,781),21486=>array(98,-66,929,766),21487=>array(98,-64,926,769),21488=>array(124,-51,904,840),21489=>array(116,-25,946,810),21490=>array(63,-65,953,835),21491=>array(69,-62,917,837),21492=>array(43,-47,949,829),21493=>array(121,-13,896,782),21494=>array(90,-53,934,843),21495=>array(65,-59,935,804),21496=>array(111,-63,886,790),21497=>array(98,-70,937,763),21498=>array(107,-42,973,770),21499=>array(132,-65,899,831),21500=>array(116,-54,896,762),21501=>array(99,-66,930,768),21502=>array(135,-57,851,798),21503=>array(93,-37,950,788),21504=>array(98,-40,930,817),21505=>array(98,-67,930,776),21506=>array(102,-65,914,847),21507=>array(98,-26,932,835),21508=>array(57,-65,951,836),21509=>array(106,-56,894,783),21510=>array(96,-63,933,830),21511=>array(98,-67,945,780),21512=>array(40,-73,956,859),21513=>array(64,-72,900,823),21514=>array(157,-70,867,775),21515=>array(104,-61,933,832),21516=>array(118,-75,882,787),21517=>array(56,-67,829,836),21518=>array(44,-64,926,844),21519=>array(71,-76,947,824),21520=>array(99,-19,939,825),21521=>array(133,-75,867,831),21522=>array(72,-32,957,837),21523=>array(104,-65,932,775),21524=>array(104,-23,948,836),21525=>array(162,-70,821,770),21526=>array(104,-64,939,835),21527=>array(99,-58,900,789),21528=>array(97,-68,941,840),21529=>array(103,-72,946,833),21530=>array(103,-75,925,774),21531=>array(46,-70,947,783),21532=>array(95,-39,941,769),21533=>array(52,-66,958,822),21534=>array(53,-72,959,773),21535=>array(90,-71,945,854),21536=>array(92,-69,942,827),21537=>array(83,-49,946,816),21538=>array(58,-50,927,799),21539=>array(102,-6,928,805),21540=>array(108,-69,951,836),21541=>array(112,-71,934,780),21542=>array(48,-70,947,775),21543=>array(95,-29,935,779),21544=>array(86,-41,933,824),21545=>array(95,-62,955,806),21546=>array(91,-50,945,851),21547=>array(37,-65,966,858),21548=>array(104,-58,936,863),21549=>array(100,-68,970,824),21550=>array(99,-73,955,838),21551=>array(47,-58,848,857),21552=>array(97,-67,947,838),21553=>array(95,-70,944,835),21554=>array(96,-76,866,819),21555=>array(72,-67,940,787),21556=>array(43,-72,937,783),21557=>array(99,-74,958,827),21558=>array(106,-68,897,793),21559=>array(94,-74,952,831),21560=>array(98,-68,955,788),21561=>array(109,-70,949,836),21562=>array(116,-71,967,782),21563=>array(102,-72,903,834),21564=>array(89,-68,937,825),21565=>array(99,-51,945,844),21566=>array(70,-72,942,782),21567=>array(67,-67,917,832),21568=>array(98,-65,940,787),21569=>array(106,-62,903,827),21570=>array(180,-77,840,772),21571=>array(87,-69,942,789),21572=>array(74,-61,942,783),21573=>array(96,-74,966,833),21574=>array(51,-68,964,774),21575=>array(69,-66,934,819),21576=>array(77,-17,910,773),21577=>array(53,-71,944,787),21578=>array(67,-67,917,832),21579=>array(96,-69,943,829),21580=>array(116,-55,943,842),21581=>array(111,-51,956,743),21582=>array(116,-66,978,790),21583=>array(97,-66,939,835),21584=>array(101,-60,880,825),21585=>array(53,-72,959,830),21586=>array(100,-68,925,765),21587=>array(100,-26,932,824),21588=>array(79,-68,934,832),21589=>array(94,-7,928,767),21590=>array(91,-70,910,765),21591=>array(99,-74,926,764),21592=>array(84,-81,880,780),21593=>array(157,-68,837,760),21594=>array(111,-68,957,838),21595=>array(111,-31,968,831),21596=>array(101,-62,905,831),21597=>array(93,-64,951,841),21598=>array(97,-63,871,790),21599=>array(110,-65,961,819),21600=>array(97,-70,955,826),21601=>array(95,-70,949,786),21602=>array(100,-71,929,784),21603=>array(93,-63,942,777),21604=>array(89,-83,949,856),21605=>array(98,-60,943,841),21606=>array(98,-74,911,828),21607=>array(94,-63,945,831),21608=>array(39,-67,882,780),21609=>array(109,-54,953,751),21610=>array(109,-60,950,760),21611=>array(109,-60,942,845),21612=>array(108,-65,905,767),21613=>array(98,-14,928,831),21614=>array(108,-66,960,771),21615=>array(99,-67,942,787),21616=>array(84,-68,937,836),21617=>array(90,-68,970,830),21618=>array(102,-60,957,820),21619=>array(90,-65,942,830),21620=>array(108,-68,909,833),21621=>array(98,-65,930,785),21622=>array(79,-71,949,828),21623=>array(115,-62,893,786),21624=>array(94,-20,932,769),21625=>array(95,-49,969,830),21626=>array(106,-60,952,794),21627=>array(105,-67,900,835),21628=>array(98,-67,931,825),21629=>array(33,-73,971,862),21630=>array(104,-28,950,783),21631=>array(95,-61,953,841),21632=>array(94,-31,933,787),21633=>array(122,-66,951,828),21634=>array(89,-21,940,783),21635=>array(83,-34,962,834),21636=>array(115,-70,900,826),21637=>array(81,-68,898,833),21638=>array(107,-36,960,833),21639=>array(104,-28,950,802),21640=>array(89,-59,914,836),21641=>array(89,-74,968,824),21642=>array(89,-34,964,818),21643=>array(108,-70,943,840),21644=>array(53,-70,894,821),21645=>array(111,-65,954,840),21646=>array(39,-68,961,833),21647=>array(79,-63,943,848),21648=>array(90,-70,941,833),21649=>array(89,-51,935,842),21650=>array(54,-75,937,777),21651=>array(97,-34,941,773),21652=>array(97,-70,936,829),21653=>array(91,-67,923,828),21654=>array(104,-64,898,832),21655=>array(94,-3,951,830),21656=>array(97,-67,941,832),21657=>array(100,-59,932,830),21658=>array(86,-80,951,847),21659=>array(102,-68,893,836),21660=>array(102,-42,928,817),21661=>array(90,-7,914,809),21662=>array(98,-67,937,775),21663=>array(102,-64,891,730),21664=>array(51,-65,947,784),21665=>array(103,-50,956,800),21666=>array(61,-53,939,806),21667=>array(99,-68,933,811),21668=>array(80,-42,921,819),21669=>array(106,-30,956,782),21670=>array(90,-71,954,835),21671=>array(106,-67,892,829),21672=>array(64,-74,954,840),21673=>array(96,-64,931,840),21674=>array(82,-65,967,824),21675=>array(35,-71,974,779),21676=>array(98,-72,961,830),21677=>array(91,-65,926,828),21678=>array(107,-70,963,824),21679=>array(90,-65,948,848),21680=>array(117,-71,901,818),21681=>array(119,-70,883,841),21682=>array(119,-73,970,836),21683=>array(88,-60,949,824),21684=>array(100,-67,943,824),21685=>array(84,-63,963,854),21686=>array(110,-68,947,827),21687=>array(88,-62,944,842),21688=>array(58,-66,959,838),21689=>array(91,-51,908,828),21690=>array(91,-23,936,778),21691=>array(88,-63,943,835),21692=>array(119,-55,881,799),21693=>array(103,-64,898,785),21694=>array(105,-30,957,830),21695=>array(99,-69,949,835),21696=>array(47,-68,951,832),21697=>array(116,-66,884,792),21698=>array(91,-64,936,779),21699=>array(108,-69,904,783),21700=>array(90,-72,935,831),21701=>array(102,-61,908,831),21702=>array(106,-80,919,845),21703=>array(108,-25,949,831),21704=>array(84,-66,945,851),21705=>array(74,-60,944,828),21706=>array(104,-75,942,831),21707=>array(95,-27,935,846),21708=>array(85,-71,971,832),21709=>array(97,-55,900,875),21710=>array(103,-66,949,835),21711=>array(108,-73,973,781),21712=>array(99,-26,925,764),21713=>array(102,-18,924,766),21714=>array(87,-46,945,803),21715=>array(103,-63,936,821),21716=>array(98,-64,931,814),21717=>array(99,-61,872,821),21718=>array(93,-52,940,855),21719=>array(86,-60,922,833),21720=>array(103,-71,958,830),21721=>array(100,-47,949,829),21722=>array(81,-77,943,778),21723=>array(51,-69,962,803),21724=>array(101,-70,945,842),21725=>array(88,-62,950,828),21726=>array(108,-70,945,838),21727=>array(75,-59,886,837),21728=>array(110,-65,926,831),21729=>array(62,-62,943,785),21730=>array(89,-52,935,801),21731=>array(120,-14,943,779),21732=>array(87,-55,956,825),21733=>array(70,-60,931,784),21734=>array(84,-67,942,824),21735=>array(81,-66,946,827),21736=>array(109,-69,912,832),21737=>array(100,-15,933,779),21738=>array(107,-74,942,785),21739=>array(113,-73,962,762),21740=>array(78,-55,930,833),21741=>array(64,-71,949,773),21742=>array(92,-68,927,833),21743=>array(118,-65,951,783),21744=>array(80,-44,885,840),21745=>array(98,-65,923,829),21746=>array(63,-62,926,825),21747=>array(99,-81,947,824),21748=>array(108,-73,973,856),21749=>array(82,-69,913,829),21750=>array(88,-64,951,825),21751=>array(103,-70,938,814),21752=>array(94,-74,917,818),21753=>array(92,-68,936,834),21754=>array(87,-70,931,832),21755=>array(102,-66,937,778),21756=>array(95,-68,932,846),21757=>array(91,-74,952,786),21758=>array(95,-64,968,844),21759=>array(65,-62,959,839),21760=>array(110,-62,954,830),21761=>array(97,-62,931,845),21762=>array(116,-52,960,835),21763=>array(116,-66,900,828),21764=>array(101,-66,947,782),21765=>array(87,-45,951,867),21766=>array(101,-69,961,849),21767=>array(53,-76,939,786),21768=>array(88,-30,943,788),21769=>array(94,-68,945,848),21770=>array(106,-66,954,835),21771=>array(112,-62,950,830),21772=>array(98,-74,964,813),21773=>array(113,-74,946,841),21774=>array(98,-52,904,844),21775=>array(84,-62,938,843),21776=>array(44,-71,938,835),21777=>array(92,-36,934,820),21778=>array(88,-65,940,781),21779=>array(116,-71,924,829),21780=>array(99,-70,934,785),21781=>array(100,-48,923,863),21782=>array(82,-23,951,793),21783=>array(103,-65,957,827),21784=>array(34,-60,979,822),21785=>array(112,-57,987,812),21786=>array(97,-62,957,777),21787=>array(101,-66,948,830),21788=>array(59,-37,952,802),21789=>array(104,-62,938,804),21790=>array(92,-65,936,832),21791=>array(95,-37,929,851),21792=>array(91,-72,914,824),21793=>array(109,-61,963,792),21794=>array(104,-62,938,834),21795=>array(86,-29,935,842),21796=>array(74,-73,948,832),21797=>array(97,-46,940,821),21798=>array(97,-67,951,825),21799=>array(110,-70,900,780),21800=>array(80,-44,959,779),21801=>array(99,-73,946,833),21802=>array(74,-65,957,843),21803=>array(74,-27,959,804),21804=>array(87,-70,957,829),21805=>array(104,-71,941,837),21806=>array(42,-67,944,843),21807=>array(97,-65,945,836),21808=>array(100,-64,909,830),21809=>array(115,-68,900,787),21810=>array(107,-79,948,827),21811=>array(82,-69,962,802),21812=>array(106,-71,942,830),21813=>array(112,-44,995,856),21814=>array(113,-66,964,837),21815=>array(94,-75,933,845),21816=>array(78,-35,950,847),21817=>array(81,-56,972,832),21818=>array(110,-74,961,833),21819=>array(104,-65,951,841),21820=>array(113,-68,947,843),21821=>array(92,-67,953,832),21822=>array(84,-30,940,831),21823=>array(92,-28,953,842),21824=>array(105,-73,941,785),21825=>array(103,-66,902,791),21826=>array(93,-76,971,827),21827=>array(97,-70,930,833),21828=>array(84,-63,971,774),21829=>array(95,-67,933,833),21830=>array(55,-56,945,825),21831=>array(39,-73,928,844),21832=>array(111,-65,947,837),21833=>array(76,-76,945,819),21834=>array(93,-66,932,782),21835=>array(109,-66,987,837),21836=>array(86,-31,955,819),21837=>array(84,-57,942,864),21838=>array(46,-67,962,835),21839=>array(119,-71,889,784),21840=>array(89,-62,931,843),21841=>array(84,-77,962,829),21842=>array(113,-68,903,788),21843=>array(54,-60,964,838),21844=>array(91,-60,945,844),21845=>array(111,-62,908,842),21846=>array(83,-62,952,836),21847=>array(123,-65,900,846),21848=>array(104,-72,965,846),21849=>array(85,-55,952,824),21850=>array(77,-66,927,795),21851=>array(83,-73,933,822),21852=>array(83,-68,955,786),21853=>array(76,-67,955,821),21854=>array(91,-25,940,785),21855=>array(35,-68,969,836),21856=>array(88,-60,913,812),21857=>array(95,-66,932,826),21858=>array(109,-61,963,792),21859=>array(83,-68,926,832),21860=>array(91,-69,935,846),21861=>array(97,-70,950,850),21862=>array(91,-64,930,836),21863=>array(90,-72,914,828),21864=>array(90,-66,927,828),21865=>array(121,-63,959,831),21866=>array(110,-64,909,838),21867=>array(115,-65,960,835),21868=>array(63,-66,913,825),21869=>array(94,-66,914,833),21870=>array(79,-63,912,829),21871=>array(82,-68,906,794),21872=>array(86,-71,948,814),21873=>array(86,-48,935,822),21874=>array(104,-50,908,842),21875=>array(86,-30,973,843),21876=>array(115,-58,945,833),21877=>array(105,-64,983,833),21878=>array(86,-72,942,844),21879=>array(94,-64,942,840),21880=>array(91,-65,923,826),21881=>array(91,-80,933,781),21882=>array(91,-72,944,785),21883=>array(92,-67,908,833),21884=>array(90,-67,930,823),21885=>array(114,-59,989,859),21886=>array(76,-66,957,832),21887=>array(110,-30,955,827),21888=>array(95,-69,965,819),21889=>array(93,-58,910,793),21890=>array(108,-69,960,785),21891=>array(92,-67,939,835),21892=>array(56,-70,907,835),21893=>array(92,-18,924,788),21894=>array(82,-50,918,825),21895=>array(112,-67,904,831),21896=>array(86,-65,942,827),21897=>array(88,-74,950,840),21898=>array(92,-72,930,837),21899=>array(83,-65,952,832),21900=>array(52,-71,909,787),21901=>array(104,-69,967,824),21902=>array(112,-67,906,788),21903=>array(84,-59,931,833),21904=>array(79,-81,936,830),21905=>array(97,-65,933,841),21906=>array(92,-48,956,849),21907=>array(110,-72,957,777),21908=>array(91,-70,933,781),21909=>array(110,-66,953,783),21910=>array(97,-66,939,829),21911=>array(85,-68,951,801),21912=>array(81,-67,930,834),21913=>array(85,-60,968,833),21914=>array(79,-65,971,838),21915=>array(91,-67,979,836),21916=>array(86,-63,938,837),21917=>array(105,-55,913,801),21918=>array(77,-73,921,840),21919=>array(116,-61,901,787),21920=>array(97,-32,936,825),21921=>array(107,-71,949,828),21922=>array(107,-71,951,827),21923=>array(52,-74,965,824),21924=>array(90,-18,935,861),21925=>array(110,-71,968,837),21926=>array(132,-68,888,789),21927=>array(79,-26,945,829),21928=>array(86,-73,959,838),21929=>array(76,-71,966,812),21930=>array(75,-73,957,829),21931=>array(96,-55,961,835),21932=>array(50,-71,951,830),21933=>array(88,-53,939,860),21934=>array(53,-68,945,789),21935=>array(89,-59,953,851),21936=>array(90,-72,965,837),21937=>array(90,-70,941,788),21938=>array(107,-65,905,836),21939=>array(82,-28,916,834),21940=>array(72,-71,972,832),21941=>array(75,-62,924,832),21942=>array(94,-63,906,834),21943=>array(110,-67,925,831),21944=>array(65,-77,959,841),21945=>array(90,-26,953,851),21946=>array(112,-62,982,834),21947=>array(80,-70,948,858),21948=>array(110,-32,970,846),21949=>array(90,-66,936,807),21950=>array(82,-66,893,826),21951=>array(50,-69,961,780),21952=>array(49,-72,955,829),21953=>array(88,-64,946,839),21954=>array(108,-72,960,845),21955=>array(94,-68,938,838),21956=>array(82,-62,954,790),21957=>array(88,-73,945,845),21958=>array(84,-65,947,847),21959=>array(56,-75,946,832),21960=>array(107,-29,963,826),21961=>array(87,-64,944,831),21962=>array(110,-68,962,791),21963=>array(106,-70,933,838),21964=>array(98,-22,946,841),21965=>array(108,-70,907,835),21966=>array(104,-68,909,783),21967=>array(112,-68,977,827),21968=>array(118,-70,954,847),21969=>array(88,-21,941,830),21970=>array(76,-64,944,830),21971=>array(81,-73,961,793),21972=>array(90,-85,963,851),21973=>array(95,-68,963,784),21974=>array(92,-70,962,828),21975=>array(105,-70,937,783),21976=>array(84,-59,963,851),21977=>array(111,-64,956,841),21978=>array(118,-56,916,846),21979=>array(95,-56,970,863),21980=>array(95,-69,943,834),21981=>array(92,-64,930,788),21982=>array(119,-66,961,837),21983=>array(89,-27,938,840),21984=>array(48,-81,960,829),21985=>array(83,-71,955,791),21986=>array(100,-36,950,780),21987=>array(112,-68,910,786),21988=>array(92,-70,938,827),21989=>array(84,-68,957,844),21990=>array(80,-68,942,829),21991=>array(34,-75,973,842),21992=>array(83,-68,939,836),21993=>array(91,-67,946,836),21994=>array(90,-70,954,835),21995=>array(89,-66,943,776),21996=>array(93,-70,942,830),21997=>array(91,-37,929,849),21998=>array(63,-57,939,788),21999=>array(87,-39,950,782),22000=>array(68,-75,913,845),22001=>array(90,-68,974,862),22002=>array(71,-57,940,845),22003=>array(90,-67,949,822),22004=>array(72,-54,969,835),22005=>array(88,-54,942,772),22006=>array(83,-68,935,787),22007=>array(86,-64,964,832),22008=>array(58,-57,951,854),22009=>array(83,-56,963,827),22010=>array(117,-68,956,831),22011=>array(98,-69,961,841),22012=>array(118,-72,972,829),22013=>array(82,-76,950,834),22014=>array(79,-68,961,837),22015=>array(115,-78,962,841),22016=>array(87,-73,927,846),22017=>array(76,-68,943,835),22018=>array(121,-68,894,823),22019=>array(83,-70,949,841),22020=>array(83,-70,958,845),22021=>array(82,-64,964,788),22022=>array(83,-72,964,832),22023=>array(101,-80,965,846),22024=>array(91,-72,935,830),22025=>array(50,-65,957,833),22026=>array(85,-68,938,834),22027=>array(73,-78,972,839),22028=>array(91,-70,940,789),22029=>array(90,-74,933,832),22030=>array(86,-67,946,784),22031=>array(60,-66,960,812),22032=>array(91,-50,966,801),22033=>array(106,-70,913,836),22034=>array(99,-25,956,835),22035=>array(102,-63,906,799),22036=>array(90,-73,949,805),22037=>array(116,-64,951,785),22038=>array(84,-74,947,832),22039=>array(109,-67,905,836),22040=>array(91,-68,924,823),22041=>array(81,-73,926,836),22042=>array(101,-70,946,824),22043=>array(74,-75,975,833),22044=>array(106,-61,981,840),22045=>array(96,-70,941,832),22046=>array(103,-70,911,832),22047=>array(91,-68,933,822),22048=>array(81,-54,956,804),22049=>array(89,-23,939,836),22050=>array(106,-59,962,800),22051=>array(86,-65,883,814),22052=>array(91,-64,927,789),22053=>array(84,-65,973,831),22054=>array(27,-86,973,836),22055=>array(90,-64,945,848),22056=>array(91,-65,923,826),22057=>array(81,-68,945,831),22058=>array(106,-83,953,780),22059=>array(84,-71,949,831),22060=>array(77,-72,959,809),22061=>array(91,-59,924,827),22062=>array(95,-69,923,833),22063=>array(79,-77,949,843),22064=>array(86,-65,947,833),22065=>array(89,-72,891,780),22066=>array(79,-75,906,830),22067=>array(113,-80,964,832),22068=>array(91,-65,950,828),22069=>array(76,-67,944,835),22070=>array(93,-65,930,837),22071=>array(100,-48,948,863),22072=>array(80,-63,948,847),22073=>array(86,-67,952,845),22074=>array(115,-66,990,830),22075=>array(90,-69,933,833),22076=>array(77,-67,926,796),22077=>array(107,-68,956,785),22078=>array(111,-71,958,780),22079=>array(82,-68,937,783),22080=>array(113,-80,964,781),22081=>array(85,-48,959,768),22082=>array(92,-64,950,856),22083=>array(110,-63,971,841),22084=>array(77,-68,945,831),22085=>array(109,-70,922,834),22086=>array(113,-69,978,783),22087=>array(103,-36,934,841),22088=>array(98,-68,967,836),22089=>array(106,-68,983,837),22090=>array(108,-67,940,784),22091=>array(88,-73,973,837),22092=>array(92,-73,905,835),22093=>array(85,-71,944,843),22094=>array(87,-23,937,839),22095=>array(106,-63,991,858),22096=>array(64,-70,933,795),22097=>array(90,-62,948,840),22098=>array(86,-74,954,832),22099=>array(93,-76,936,832),22100=>array(79,-11,956,855),22101=>array(61,-77,904,856),22102=>array(82,-68,947,790),22103=>array(82,-61,951,830),22104=>array(80,-62,967,796),22105=>array(95,-70,966,851),22106=>array(109,-72,957,779),22107=>array(86,-68,940,829),22108=>array(80,-61,947,828),22109=>array(80,-64,945,834),22110=>array(79,-72,950,855),22111=>array(39,-72,934,844),22112=>array(78,-67,946,835),22113=>array(90,-59,956,849),22114=>array(80,-68,947,853),22115=>array(122,-75,936,779),22116=>array(81,-62,971,832),22117=>array(80,-72,955,835),22118=>array(104,-64,970,838),22119=>array(80,-68,932,830),22120=>array(49,-62,956,798),22121=>array(51,-23,944,789),22122=>array(80,-70,954,792),22123=>array(88,-32,949,825),22124=>array(92,-27,941,838),22125=>array(83,-57,964,864),22126=>array(104,-81,973,782),22127=>array(84,-75,954,830),22128=>array(99,-70,954,848),22129=>array(80,-68,954,833),22130=>array(74,-66,959,853),22131=>array(99,-73,975,833),22132=>array(85,-76,956,838),22133=>array(70,-72,942,847),22134=>array(84,-68,934,834),22135=>array(101,-76,980,838),22136=>array(76,-70,961,827),22137=>array(106,-53,918,841),22138=>array(83,-61,962,832),22139=>array(77,-38,964,839),22140=>array(95,-68,948,842),22141=>array(74,-63,953,835),22142=>array(106,-70,944,833),22143=>array(102,-71,941,780),22144=>array(89,-69,944,838),22145=>array(115,-68,951,785),22146=>array(92,-39,927,821),22147=>array(95,-76,957,828),22148=>array(79,-53,951,842),22149=>array(84,-65,936,789),22150=>array(83,-62,937,835),22151=>array(81,-68,956,834),22152=>array(65,-71,975,797),22153=>array(81,-61,952,835),22154=>array(91,-67,962,856),22155=>array(91,-65,968,833),22156=>array(100,-77,949,832),22157=>array(98,-33,938,821),22158=>array(91,-67,959,848),22159=>array(75,-64,947,837),22160=>array(92,-52,916,850),22161=>array(92,-62,966,828),22162=>array(81,-78,946,835),22163=>array(92,-70,962,839),22164=>array(75,-80,951,836),22165=>array(84,-69,943,846),22166=>array(82,-36,955,832),22167=>array(104,-66,984,787),22168=>array(91,-72,946,784),22169=>array(92,-70,934,830),22170=>array(111,-52,914,803),22171=>array(81,-69,972,847),22172=>array(84,-20,957,794),22173=>array(91,-80,925,841),22174=>array(41,-68,958,841),22175=>array(118,-48,989,844),22176=>array(72,-62,922,834),22177=>array(69,-67,954,833),22178=>array(57,-70,961,833),22179=>array(36,-64,942,786),22180=>array(75,-78,934,835),22181=>array(82,-60,949,830),22182=>array(78,-65,939,790),22183=>array(90,-71,947,828),22184=>array(79,-70,944,837),22185=>array(86,-68,933,835),22186=>array(98,-70,906,780),22187=>array(89,-69,966,842),22188=>array(92,-64,958,842),22189=>array(74,-63,967,835),22190=>array(43,-68,949,845),22191=>array(88,-66,914,784),22192=>array(103,-68,955,838),22193=>array(77,-68,963,835),22194=>array(55,-65,960,845),22195=>array(58,-64,955,841),22196=>array(46,-62,964,817),22197=>array(85,-59,948,846),22198=>array(82,-65,935,788),22199=>array(89,-69,968,842),22200=>array(74,-74,917,829),22201=>array(63,-72,959,834),22202=>array(67,-63,956,805),22203=>array(106,-60,919,794),22204=>array(76,-76,960,844),22205=>array(76,-75,948,833),22206=>array(92,-64,940,828),22207=>array(71,-67,939,834),22208=>array(84,-64,947,832),22209=>array(80,-66,950,807),22210=>array(55,-77,961,779),22211=>array(87,-65,954,831),22212=>array(83,-71,938,843),22213=>array(57,-66,969,792),22214=>array(87,-81,946,834),22215=>array(111,-68,957,790),22216=>array(82,-75,950,831),22217=>array(98,-65,962,796),22218=>array(72,-75,951,834),22219=>array(92,-74,947,824),22220=>array(88,-52,965,842),22221=>array(55,-51,949,839),22222=>array(64,-62,972,832),22223=>array(50,-68,944,839),22224=>array(75,-78,957,830),22225=>array(88,-74,929,817),22226=>array(74,-57,948,839),22227=>array(87,-52,945,845),22228=>array(78,-70,959,831),22229=>array(83,-77,953,832),22230=>array(74,-51,958,858),22231=>array(133,-54,879,781),22232=>array(129,-52,871,778),22233=>array(123,-30,865,754),22234=>array(132,-73,868,776),22235=>array(121,-35,879,744),22236=>array(123,-30,865,754),22237=>array(107,-65,886,789),22238=>array(129,-30,871,754),22239=>array(74,-68,863,839),22240=>array(130,-64,870,793),22241=>array(121,-64,895,788),22242=>array(109,-64,865,785),22243=>array(122,-64,878,785),22244=>array(110,-72,891,784),22245=>array(121,-67,894,784),22246=>array(113,-67,887,788),22247=>array(120,-67,892,785),22248=>array(121,-65,894,786),22249=>array(121,-67,894,784),22250=>array(138,-67,879,849),22251=>array(101,-68,901,788),22252=>array(111,-53,877,754),22253=>array(95,-63,900,791),22254=>array(99,-51,894,799),22255=>array(128,-59,884,789),22256=>array(114,-65,886,784),22257=>array(138,-67,879,849),22258=>array(122,-59,878,789),22259=>array(121,-70,879,781),22260=>array(109,-70,866,782),22261=>array(106,-63,863,776),22262=>array(122,-59,878,789),22263=>array(122,-68,905,791),22264=>array(115,-64,907,788),22265=>array(105,-64,897,788),22266=>array(115,-70,885,785),22267=>array(115,-70,885,785),22268=>array(115,-70,885,785),22269=>array(122,-59,878,789),22270=>array(110,-66,866,784),22271=>array(96,-68,892,789),22272=>array(106,-65,894,784),22273=>array(116,-69,903,774),22274=>array(112,-67,897,782),22275=>array(106,-70,905,789),22276=>array(101,-66,896,788),22277=>array(116,-69,873,794),22278=>array(112,-68,865,774),22279=>array(102,-67,896,788),22280=>array(105,-69,895,791),22281=>array(113,-65,900,790),22282=>array(107,-65,906,796),22283=>array(109,-67,890,780),22284=>array(96,-53,900,797),22285=>array(102,-61,905,784),22286=>array(116,-69,903,774),22287=>array(107,-69,896,785),22288=>array(111,-69,908,779),22289=>array(111,-69,898,774),22290=>array(102,-70,898,790),22291=>array(113,-71,899,787),22292=>array(103,-71,900,781),22293=>array(116,-69,903,774),22294=>array(119,-68,906,794),22295=>array(119,-68,906,794),22296=>array(112,-64,903,788),22297=>array(116,-69,903,774),22298=>array(93,-54,893,809),22299=>array(95,-53,893,806),22300=>array(98,-67,902,796),22301=>array(106,-69,894,774),22302=>array(99,-65,901,790),22303=>array(78,-13,922,810),22304=>array(59,-58,957,806),22305=>array(100,-15,895,796),22306=>array(54,-59,939,796),22307=>array(61,-29,960,776),22308=>array(53,-59,961,814),22309=>array(89,-67,934,778),22310=>array(68,-55,944,741),22311=>array(37,-63,913,770),22312=>array(49,-65,921,836),22313=>array(42,-64,949,793),22314=>array(55,-62,953,800),22315=>array(49,-55,930,790),22316=>array(49,-78,951,791),22317=>array(73,-39,927,809),22318=>array(43,-58,945,786),22319=>array(39,-53,954,776),22320=>array(56,-52,935,808),22321=>array(58,-58,952,817),22322=>array(50,-45,943,796),22323=>array(56,-71,907,785),22324=>array(68,-61,917,788),22325=>array(44,-59,948,781),22326=>array(60,-61,953,805),22327=>array(44,-65,932,788),22328=>array(59,-56,897,789),22329=>array(39,-63,912,832),22330=>array(29,-63,897,808),22331=>array(62,-64,948,810),22332=>array(84,-41,938,785),22333=>array(62,-72,903,794),22334=>array(40,-71,956,796),22335=>array(50,-63,967,802),22336=>array(44,-32,949,786),22337=>array(43,-69,952,800),22338=>array(43,-70,966,785),22339=>array(51,-68,958,774),22340=>array(44,-66,967,793),22341=>array(48,-60,972,811),22342=>array(38,-63,970,799),22343=>array(50,-63,906,831),22344=>array(44,-72,946,793),22345=>array(44,-59,944,806),22346=>array(41,-77,953,827),22347=>array(58,-78,967,798),22348=>array(53,-24,947,804),22349=>array(43,-71,948,799),22350=>array(48,-66,962,810),22351=>array(40,-55,968,790),22352=>array(73,-29,927,806),22353=>array(47,-67,951,813),22354=>array(57,-43,952,809),22355=>array(57,-29,952,813),22356=>array(57,-49,974,792),22357=>array(57,-59,952,805),22358=>array(28,-54,961,768),22359=>array(33,-70,947,834),22360=>array(43,-58,951,765),22361=>array(57,-54,952,758),22362=>array(52,-19,932,831),22363=>array(43,-38,939,816),22364=>array(41,-69,912,804),22365=>array(33,-58,943,798),22366=>array(35,-67,902,832),22367=>array(41,-60,955,852),22368=>array(62,-14,926,821),22369=>array(48,-71,963,812),22370=>array(46,-67,945,801),22371=>array(84,-14,933,777),22372=>array(65,-48,908,805),22373=>array(65,-32,933,771),22374=>array(48,-21,952,786),22375=>array(65,-49,936,791),22376=>array(60,-60,952,806),22377=>array(39,-68,945,796),22378=>array(50,-67,947,794),22379=>array(38,-52,904,794),22380=>array(56,-67,980,834),22381=>array(46,-83,953,777),22382=>array(53,-58,964,823),22383=>array(42,-14,948,785),22384=>array(59,-67,914,782),22385=>array(43,-70,957,797),22386=>array(60,-71,925,810),22387=>array(61,-71,920,835),22388=>array(60,-56,944,800),22389=>array(45,-18,953,824),22390=>array(40,-65,943,817),22391=>array(48,-61,947,807),22392=>array(56,-54,909,849),22393=>array(45,-60,958,843),22394=>array(45,-69,955,836),22395=>array(56,-63,954,828),22396=>array(51,-67,941,832),22397=>array(67,-66,968,847),22398=>array(75,-61,918,836),22399=>array(71,-79,945,842),22400=>array(56,-63,940,828),22401=>array(56,-60,967,828),22402=>array(73,-32,927,826),22403=>array(49,-11,952,838),22404=>array(47,-31,941,829),22405=>array(37,-67,929,824),22406=>array(35,-66,911,826),22407=>array(30,-65,903,755),22408=>array(34,-32,946,833),22409=>array(46,-28,955,840),22410=>array(70,-61,939,786),22411=>array(59,-25,953,827),22412=>array(30,-70,898,781),22413=>array(55,-70,883,841),22414=>array(30,-65,948,848),22415=>array(55,-71,954,823),22416=>array(56,-36,926,853),22417=>array(50,-58,920,844),22418=>array(52,-36,926,814),22419=>array(37,-63,949,834),22420=>array(59,-20,954,790),22421=>array(59,-11,954,831),22422=>array(67,-43,904,842),22423=>array(37,-54,956,840),22424=>array(50,-73,963,822),22425=>array(43,-52,962,842),22426=>array(49,-11,953,842),22427=>array(43,-65,965,809),22428=>array(58,-62,949,809),22429=>array(46,-57,963,850),22430=>array(42,-43,953,839),22431=>array(51,-73,955,821),22432=>array(37,-68,952,809),22433=>array(34,-32,946,833),22434=>array(50,-69,932,833),22435=>array(47,-14,947,808),22436=>array(31,-22,931,811),22437=>array(49,-70,960,827),22438=>array(75,-27,949,790),22439=>array(38,-77,891,842),22440=>array(48,-59,954,843),22441=>array(50,-8,922,764),22442=>array(41,-70,949,839),22443=>array(32,-11,932,830),22444=>array(41,-72,946,831),22445=>array(43,-6,923,808),22446=>array(41,-66,965,842),22447=>array(40,-49,942,793),22448=>array(51,-64,940,835),22449=>array(41,-60,883,826),22450=>array(41,-27,941,813),22451=>array(45,-67,956,833),22452=>array(40,-66,923,832),22453=>array(50,-72,951,832),22454=>array(59,-65,948,833),22455=>array(56,-65,944,783),22456=>array(51,-67,959,857),22457=>array(43,-68,943,827),22458=>array(49,-68,954,817),22459=>array(49,-72,960,804),22460=>array(63,-24,969,822),22461=>array(55,-15,951,846),22462=>array(54,-64,955,800),22463=>array(53,-66,941,833),22464=>array(97,-32,916,829),22465=>array(57,-70,958,821),22466=>array(46,-70,959,791),22467=>array(50,-71,956,845),22468=>array(46,-65,949,846),22469=>array(65,-24,959,842),22470=>array(63,-71,906,824),22471=>array(51,-61,893,811),22472=>array(46,-68,953,836),22473=>array(46,-73,945,836),22474=>array(55,-15,951,842),22475=>array(39,-25,943,793),22476=>array(54,-74,955,827),22477=>array(61,-67,903,791),22478=>array(41,-68,951,834),22479=>array(36,-64,964,829),22480=>array(50,-62,970,814),22481=>array(55,-30,951,831),22482=>array(47,-62,945,827),22483=>array(61,-65,956,806),22484=>array(40,-68,948,833),22485=>array(55,-20,959,814),22486=>array(59,-48,962,832),22487=>array(43,-56,945,835),22488=>array(39,-64,923,826),22489=>array(43,-70,938,806),22490=>array(31,-67,892,802),22491=>array(31,-51,915,802),22492=>array(48,-27,967,817),22493=>array(17,-43,964,849),22494=>array(26,-58,966,848),22495=>array(36,-69,965,835),22496=>array(39,-68,959,854),22497=>array(53,-20,959,821),22498=>array(47,-48,959,823),22499=>array(48,-65,951,822),22500=>array(39,-56,961,860),22501=>array(53,-67,959,835),22502=>array(32,-61,959,855),22503=>array(32,-52,952,820),22504=>array(26,-65,974,853),22505=>array(46,-60,954,836),22506=>array(42,-12,944,831),22507=>array(56,-62,907,839),22508=>array(51,-73,965,824),22509=>array(35,-64,949,835),22510=>array(48,-72,971,829),22511=>array(45,-30,945,829),22512=>array(46,-62,959,833),22513=>array(45,-74,963,830),22514=>array(50,-68,976,841),22515=>array(62,-68,899,831),22516=>array(35,-67,953,835),22517=>array(47,-50,959,812),22518=>array(32,-67,973,831),22519=>array(57,-69,960,833),22520=>array(55,-67,911,818),22521=>array(36,-65,938,835),22522=>array(36,-28,980,832),22523=>array(46,-67,951,835),22524=>array(52,-64,958,836),22525=>array(42,-69,948,801),22526=>array(52,-27,945,792),22527=>array(67,-27,945,850),22528=>array(48,-65,906,818),22529=>array(47,-67,966,808),22530=>array(84,-14,933,832),22531=>array(52,-23,958,855),22532=>array(53,-67,956,838),22533=>array(56,-22,944,784),22534=>array(45,-73,950,834),22535=>array(60,-22,954,833),22536=>array(56,-48,911,828),22537=>array(45,-58,947,835),22538=>array(68,-12,951,794),22539=>array(41,-55,907,820),22540=>array(57,-69,901,803),22541=>array(42,-69,962,837),22542=>array(44,-70,963,833),22543=>array(63,-23,958,855),22544=>array(50,-71,956,804),22545=>array(45,-29,924,826),22546=>array(53,-49,970,789),22547=>array(57,-67,927,829),22548=>array(52,-67,966,811),22549=>array(58,-19,912,828),22550=>array(55,-65,920,841),22551=>array(26,-65,944,844),22552=>array(76,-28,972,835),22553=>array(32,-25,953,810),22554=>array(51,-65,936,787),22555=>array(54,-67,953,806),22556=>array(53,-67,966,832),22557=>array(64,-67,915,799),22558=>array(37,-65,970,833),22559=>array(59,-63,945,840),22560=>array(35,-72,966,840),22561=>array(38,-19,933,830),22562=>array(50,-70,944,836),22563=>array(66,-68,922,803),22564=>array(48,-70,966,793),22565=>array(54,-12,965,828),22566=>array(40,-50,956,844),22567=>array(35,-51,968,821),22568=>array(60,-69,924,807),22569=>array(38,-71,951,823),22570=>array(32,-68,946,829),22571=>array(38,-68,969,829),22572=>array(56,-70,976,836),22573=>array(66,-32,967,824),22574=>array(60,-69,952,800),22575=>array(43,-65,962,837),22576=>array(44,-62,956,807),22577=>array(65,-67,966,832),22578=>array(67,-16,963,770),22579=>array(43,-52,907,820),22580=>array(42,-63,948,788),22581=>array(39,-68,940,833),22582=>array(58,-67,952,835),22583=>array(52,-70,951,843),22584=>array(56,-71,973,803),22585=>array(50,-25,949,839),22586=>array(60,-66,971,829),22587=>array(49,-29,951,827),22588=>array(47,-16,954,826),22589=>array(54,-64,954,804),22590=>array(52,-64,978,842),22591=>array(58,-71,956,821),22592=>array(40,-69,955,804),22593=>array(55,-27,945,815),22594=>array(40,-26,961,826),22595=>array(40,-68,950,835),22596=>array(35,-66,911,804),22597=>array(45,-72,971,829),22598=>array(54,-60,944,846),22599=>array(50,-27,927,842),22600=>array(59,-16,958,794),22601=>array(50,-73,973,829),22602=>array(47,-68,965,841),22603=>array(64,-17,940,831),22604=>array(46,-68,915,796),22605=>array(28,-55,972,835),22606=>array(52,-71,960,831),22607=>array(39,-41,952,816),22608=>array(36,-64,980,833),22609=>array(53,-11,948,833),22610=>array(36,-65,956,829),22611=>array(56,-71,964,806),22612=>array(42,-69,963,829),22613=>array(54,-68,976,827),22614=>array(49,-65,964,842),22615=>array(46,-17,970,856),22616=>array(44,-69,948,819),22617=>array(42,-63,944,841),22618=>array(37,-60,973,807),22619=>array(53,-70,965,805),22620=>array(41,-60,965,807),22621=>array(55,-66,951,834),22622=>array(48,-30,949,830),22623=>array(55,-40,963,811),22624=>array(50,-60,961,834),22625=>array(52,-61,927,834),22626=>array(62,-60,928,839),22627=>array(58,-31,953,817),22628=>array(54,-70,967,818),22629=>array(59,-69,954,803),22630=>array(64,-46,953,815),22631=>array(54,-8,954,859),22632=>array(37,-67,966,826),22633=>array(49,-34,950,831),22634=>array(49,-65,934,836),22635=>array(47,-69,946,836),22636=>array(35,-68,948,785),22637=>array(47,-30,959,809),22638=>array(47,-64,965,849),22639=>array(63,-67,921,835),22640=>array(52,-46,951,840),22641=>array(57,-26,951,847),22642=>array(33,-56,941,850),22643=>array(53,-66,961,844),22644=>array(56,-71,906,831),22645=>array(44,-49,943,834),22646=>array(54,-69,959,838),22647=>array(56,-64,958,839),22648=>array(53,-26,940,803),22649=>array(53,-24,959,833),22650=>array(48,-69,954,835),22651=>array(46,-73,969,820),22652=>array(42,-66,961,830),22653=>array(34,-58,967,839),22654=>array(49,-34,952,831),22655=>array(33,-62,951,846),22656=>array(43,-71,957,810),22657=>array(52,-64,983,817),22658=>array(47,-70,957,804),22659=>array(39,-65,960,828),22660=>array(51,-65,961,838),22661=>array(52,-25,945,789),22662=>array(56,-69,942,823),22663=>array(53,-71,953,838),22664=>array(52,-64,920,831),22665=>array(28,-64,962,821),22666=>array(63,-26,958,838),22667=>array(60,-68,953,841),22668=>array(46,-67,962,851),22669=>array(58,-38,964,846),22670=>array(46,-69,950,836),22671=>array(45,-43,943,847),22672=>array(56,-32,956,823),22673=>array(48,-65,954,842),22674=>array(19,-80,923,826),22675=>array(45,-40,954,834),22676=>array(45,-58,945,839),22677=>array(40,-60,962,801),22678=>array(40,-69,949,837),22679=>array(38,-73,905,835),22680=>array(39,-67,969,833),22681=>array(38,-71,927,821),22682=>array(29,-68,947,821),22683=>array(34,-72,968,812),22684=>array(60,-35,968,847),22685=>array(39,-57,963,847),22686=>array(52,-62,961,830),22687=>array(31,-64,911,827),22688=>array(48,-70,960,804),22689=>array(40,-69,953,836),22690=>array(49,-64,959,843),22691=>array(36,-76,965,827),22692=>array(29,-69,953,836),22693=>array(49,-32,962,843),22694=>array(52,-63,932,827),22695=>array(55,-61,976,836),22696=>array(56,-43,949,816),22697=>array(38,-68,964,826),22698=>array(43,-52,969,831),22699=>array(41,-72,950,834),22700=>array(67,-27,967,844),22701=>array(32,-24,947,826),22702=>array(67,-15,956,857),22703=>array(34,-33,954,847),22704=>array(49,-67,954,806),22705=>array(39,-32,981,828),22706=>array(30,-62,954,845),22707=>array(43,-76,962,838),22708=>array(47,-57,950,831),22709=>array(60,-69,933,779),22710=>array(47,-68,963,833),22711=>array(35,-68,945,831),22712=>array(52,-62,938,842),22713=>array(52,-67,924,787),22714=>array(32,-64,972,851),22715=>array(52,-68,950,833),22716=>array(56,-33,977,831),22717=>array(46,-75,977,846),22718=>array(64,-25,960,828),22719=>array(56,-70,962,806),22720=>array(26,-69,962,845),22721=>array(62,-26,957,831),22722=>array(36,-38,964,780),22723=>array(43,-26,944,788),22724=>array(44,-32,959,832),22725=>array(62,-32,953,851),22726=>array(79,-34,951,826),22727=>array(43,-34,947,835),22728=>array(50,-68,987,830),22729=>array(47,-72,969,833),22730=>array(48,-71,965,839),22731=>array(61,-65,918,832),22732=>array(35,-79,966,837),22733=>array(41,-32,953,791),22734=>array(38,-54,969,857),22735=>array(49,-34,951,823),22736=>array(53,-35,962,794),22737=>array(46,-26,962,836),22738=>array(44,-18,956,834),22739=>array(42,-45,953,807),22740=>array(41,-55,949,840),22741=>array(43,-62,965,828),22742=>array(31,-51,947,818),22743=>array(36,-35,954,823),22744=>array(59,-28,949,783),22745=>array(52,-77,967,847),22746=>array(61,-66,969,836),22747=>array(53,-65,920,806),22748=>array(35,-60,951,808),22749=>array(36,-65,973,826),22750=>array(51,-63,970,844),22751=>array(57,-24,950,849),22752=>array(29,-68,952,841),22753=>array(29,-64,964,843),22754=>array(46,-65,959,820),22755=>array(38,-64,963,831),22756=>array(42,-61,951,837),22757=>array(42,-70,948,791),22758=>array(59,-70,953,829),22759=>array(33,-72,957,811),22760=>array(71,-28,941,781),22761=>array(59,-71,932,793),22762=>array(31,-75,959,848),22763=>array(103,28,894,796),22764=>array(49,-18,951,796),22765=>array(75,-58,888,834),22766=>array(41,-63,913,829),22767=>array(33,-69,948,820),22768=>array(47,-55,927,837),22769=>array(74,-40,927,846),22770=>array(62,-58,933,846),22771=>array(42,-58,955,846),22772=>array(59,-17,951,826),22773=>array(52,-34,969,842),22774=>array(59,-9,909,834),22775=>array(55,-21,948,835),22776=>array(59,-38,909,834),22777=>array(55,-21,948,835),22778=>array(72,-32,947,831),22779=>array(50,-50,972,806),22780=>array(55,-23,953,830),22781=>array(55,-61,951,836),22782=>array(49,-18,950,829),22783=>array(62,-72,954,845),22784=>array(55,-61,951,836),22785=>array(95,-62,932,847),22786=>array(59,-46,954,826),22787=>array(67,-64,923,791),22788=>array(18,-67,935,818),22789=>array(30,-82,946,827),22790=>array(51,-71,955,833),22791=>array(43,-63,930,827),22792=>array(37,-60,961,832),22793=>array(58,-62,959,830),22794=>array(55,-41,952,812),22795=>array(71,-67,937,842),22796=>array(54,-64,969,833),22797=>array(55,-65,954,829),22798=>array(60,-67,967,829),22799=>array(53,-65,954,812),22800=>array(84,-66,945,844),22801=>array(53,-65,961,843),22802=>array(46,-67,954,795),22803=>array(55,-67,965,823),22804=>array(36,-53,948,841),22805=>array(95,-71,856,842),22806=>array(41,-65,967,836),22807=>array(46,-66,945,828),22808=>array(57,-59,872,844),22809=>array(24,-66,968,789),22810=>array(89,-68,911,849),22811=>array(107,-81,928,807),22812=>array(45,-65,959,828),22813=>array(29,-47,965,804),22814=>array(119,-58,929,821),22815=>array(14,-59,907,842),22816=>array(66,-65,921,847),22817=>array(66,-65,953,847),22818=>array(59,-73,928,839),22819=>array(71,-73,915,845),22820=>array(58,-76,942,848),22821=>array(22,-69,925,840),22822=>array(50,-69,952,823),22823=>array(85,-43,933,837),22824=>array(55,-63,950,845),22825=>array(61,-51,947,778),22826=>array(83,-48,941,834),22827=>array(74,-51,943,834),22828=>array(29,-57,979,840),22829=>array(84,-55,931,798),22830=>array(54,-70,968,826),22831=>array(58,-66,957,835),22832=>array(76,-70,953,835),22833=>array(86,-70,941,829),22834=>array(33,-62,947,835),22835=>array(54,-7,946,839),22836=>array(62,-59,913,831),22837=>array(43,-61,945,835),22838=>array(36,-71,969,824),22839=>array(58,-68,953,835),22840=>array(29,-70,982,855),22841=>array(29,-59,936,830),22842=>array(33,-59,947,835),22843=>array(21,-58,937,835),22844=>array(60,-67,955,835),22845=>array(66,-71,957,835),22846=>array(69,-64,955,834),22847=>array(53,-45,957,835),22848=>array(53,-62,982,783),22849=>array(40,-31,954,821),22850=>array(50,-67,958,832),22851=>array(67,-88,958,847),22852=>array(32,-44,976,842),22853=>array(59,-67,965,838),22854=>array(66,-41,957,835),22855=>array(60,-65,929,840),22856=>array(62,-62,960,848),22857=>array(44,-72,958,840),22858=>array(59,-74,964,831),22859=>array(21,-58,937,835),22860=>array(37,-60,963,828),22861=>array(35,-60,972,843),22862=>array(36,-22,961,851),22863=>array(46,-77,954,840),22864=>array(39,-66,966,841),22865=>array(43,-70,957,830),22866=>array(36,-65,974,838),22867=>array(57,-65,965,829),22868=>array(48,-71,970,835),22869=>array(53,-57,972,843),22870=>array(30,-59,954,839),22871=>array(43,-65,966,844),22872=>array(42,-65,955,829),22873=>array(29,-60,975,848),22874=>array(54,-68,960,839),22875=>array(26,-68,997,841),22876=>array(47,-69,970,836),22877=>array(70,-82,962,836),22878=>array(47,-75,976,833),22879=>array(41,-59,974,840),22880=>array(40,-71,959,829),22881=>array(44,-64,973,793),22882=>array(36,-68,970,840),22883=>array(51,-78,971,807),22884=>array(26,-77,972,837),22885=>array(39,-73,961,840),22886=>array(44,-66,960,839),22887=>array(47,-72,968,842),22888=>array(39,-64,970,852),22889=>array(32,-22,966,845),22890=>array(30,-65,967,843),22891=>array(40,-71,968,844),22892=>array(39,-64,970,847),22893=>array(35,-63,982,839),22894=>array(51,-69,960,849),22895=>array(29,-80,983,839),22896=>array(40,-73,967,781),22897=>array(48,-66,966,839),22898=>array(42,-72,961,832),22899=>array(86,-53,911,836),22900=>array(64,-67,949,819),22901=>array(52,-63,948,840),22902=>array(68,-70,920,821),22903=>array(63,-63,958,833),22904=>array(69,-65,959,836),22905=>array(40,-56,948,836),22906=>array(100,-70,972,832),22907=>array(65,-64,951,828),22908=>array(64,-55,958,831),22909=>array(52,-67,961,818),22910=>array(62,-65,912,829),22911=>array(44,-60,961,830),22912=>array(63,-66,944,821),22913=>array(66,-59,919,844),22914=>array(71,-74,897,815),22915=>array(29,-52,945,840),22916=>array(54,-72,942,836),22917=>array(77,-53,964,816),22918=>array(31,-67,938,824),22919=>array(47,-62,861,833),22920=>array(46,-61,914,828),22921=>array(61,-71,955,832),22922=>array(51,-72,935,832),22923=>array(76,-72,962,833),22924=>array(64,-69,954,837),22925=>array(51,-67,952,837),22926=>array(56,-72,974,840),22927=>array(74,-66,972,842),22928=>array(53,-56,974,841),22929=>array(49,-54,941,849),22930=>array(62,-68,934,839),22931=>array(57,-69,961,836),22932=>array(47,-64,957,853),22933=>array(57,-66,891,838),22934=>array(47,-70,957,830),22935=>array(39,-66,966,850),22936=>array(45,-69,958,830),22937=>array(53,-67,952,835),22938=>array(49,-64,966,840),22939=>array(66,-44,940,823),22940=>array(58,-69,955,831),22941=>array(39,-63,961,835),22942=>array(45,-50,956,827),22943=>array(66,-59,920,785),22944=>array(61,-66,917,835),22945=>array(57,-70,946,837),22946=>array(50,-67,971,836),22947=>array(52,-48,966,839),22948=>array(46,-62,951,830),22949=>array(67,-71,903,834),22950=>array(44,-66,951,836),22951=>array(53,-68,955,836),22952=>array(55,-77,951,829),22953=>array(53,-64,935,824),22954=>array(36,-66,913,818),22955=>array(36,-64,890,825),22956=>array(62,-62,965,828),22957=>array(58,-64,975,844),22958=>array(58,-65,945,838),22959=>array(61,-65,918,845),22960=>array(64,-67,951,842),22961=>array(62,-73,911,835),22962=>array(50,-58,937,835),22963=>array(53,-52,965,847),22964=>array(59,-63,945,844),22965=>array(60,-56,958,832),22966=>array(45,-56,956,835),22967=>array(66,-60,975,844),22968=>array(61,-62,961,830),22969=>array(30,-71,978,833),22970=>array(55,-66,973,838),22971=>array(80,-70,935,837),22972=>array(62,-60,959,830),22973=>array(59,-62,918,837),22974=>array(65,-65,936,828),22975=>array(60,-55,924,821),22976=>array(53,-65,956,842),22977=>array(60,-65,918,834),22978=>array(71,-58,969,830),22979=>array(60,-58,962,826),22980=>array(61,-61,954,826),22981=>array(56,-72,953,839),22982=>array(60,-67,948,832),22983=>array(58,-70,941,830),22984=>array(55,-50,968,860),22985=>array(37,-68,954,840),22986=>array(70,-64,934,832),22987=>array(54,-74,945,835),22988=>array(56,-62,965,839),22989=>array(32,-56,959,831),22990=>array(42,-77,968,834),22991=>array(62,-69,955,837),22992=>array(56,-65,956,818),22993=>array(56,-64,956,838),22994=>array(66,-64,978,841),22995=>array(52,-69,952,827),22996=>array(58,-67,912,836),22997=>array(58,-67,958,827),22998=>array(51,-52,949,822),22999=>array(41,-70,922,825),23000=>array(48,-67,956,850),23001=>array(40,-64,959,834),23002=>array(53,-70,960,833),23003=>array(60,-70,906,830),23004=>array(67,-63,926,850),23005=>array(38,-65,969,832),23006=>array(48,-52,957,850),23007=>array(38,-68,948,842),23008=>array(57,-74,907,832),23009=>array(80,-72,938,829),23010=>array(63,-72,929,831),23011=>array(38,-66,970,846),23012=>array(62,-66,957,837),23013=>array(47,-54,959,833),23014=>array(49,-71,962,843),23015=>array(52,-65,952,845),23016=>array(54,-67,968,837),23017=>array(68,-75,956,827),23018=>array(45,-69,956,824),23019=>array(50,-71,955,831),23020=>array(62,-66,956,829),23021=>array(67,-73,931,837),23022=>array(69,-59,960,837),23023=>array(64,-74,953,823),23024=>array(45,-60,909,836),23025=>array(44,-49,979,860),23026=>array(61,-74,954,831),23027=>array(61,-70,887,830),23028=>array(83,-73,938,824),23029=>array(69,-79,954,821),23030=>array(52,-50,970,858),23031=>array(55,-73,957,827),23032=>array(63,-73,953,827),23033=>array(40,-59,953,845),23034=>array(64,-74,953,823),23035=>array(53,-66,895,831),23036=>array(73,-80,932,822),23037=>array(78,-75,947,820),23038=>array(57,-80,955,823),23039=>array(59,-74,939,842),23040=>array(64,-67,951,830),23041=>array(53,-74,959,832),23042=>array(73,-73,959,832),23043=>array(73,-68,953,833),23044=>array(44,-65,935,829),23045=>array(44,-77,934,817),23046=>array(28,-69,936,822),23047=>array(40,-60,939,836),23048=>array(56,-82,919,834),23049=>array(34,-64,962,839),23050=>array(64,-68,958,830),23051=>array(62,-70,897,836),23052=>array(46,-48,956,840),23053=>array(46,-70,961,840),23054=>array(37,-68,939,830),23055=>array(56,-62,956,838),23056=>array(64,-64,953,837),23057=>array(37,-68,943,830),23058=>array(56,-67,953,845),23059=>array(41,-67,963,823),23060=>array(82,-69,954,839),23061=>array(60,-62,964,837),23062=>array(63,-69,980,829),23063=>array(57,-69,983,833),23064=>array(62,-75,962,831),23065=>array(51,-48,952,845),23066=>array(72,-74,923,808),23067=>array(64,-71,977,833),23068=>array(50,-71,947,833),23069=>array(66,-54,969,852),23070=>array(48,-68,945,833),23071=>array(63,-72,897,831),23072=>array(66,-66,965,831),23073=>array(66,-66,961,831),23074=>array(54,-66,951,867),23075=>array(65,-67,933,845),23076=>array(37,-68,939,829),23077=>array(42,-63,972,832),23078=>array(62,-64,954,828),23079=>array(62,-68,949,846),23080=>array(47,-64,954,828),23081=>array(57,-67,967,848),23082=>array(57,-68,948,828),23083=>array(39,-67,967,828),23084=>array(42,-64,962,833),23085=>array(73,-74,964,833),23086=>array(64,-68,941,832),23087=>array(64,-71,948,833),23088=>array(64,-67,955,840),23089=>array(32,-62,947,826),23090=>array(43,-72,891,819),23091=>array(55,-64,912,839),23092=>array(46,-73,870,832),23093=>array(49,-71,968,835),23094=>array(67,-75,940,793),23095=>array(65,-44,953,833),23096=>array(51,-78,953,833),23097=>array(44,-77,964,828),23098=>array(37,-67,973,823),23099=>array(61,-64,973,835),23100=>array(68,-69,906,832),23101=>array(57,-67,955,828),23102=>array(51,-69,958,827),23103=>array(37,-58,939,827),23104=>array(38,-65,952,835),23105=>array(55,-68,930,832),23106=>array(63,-71,912,840),23107=>array(58,-68,957,834),23108=>array(53,-67,960,839),23109=>array(64,-61,921,847),23110=>array(66,-74,946,836),23111=>array(42,-67,959,834),23112=>array(46,-72,971,831),23113=>array(59,-63,954,836),23114=>array(37,-67,977,837),23115=>array(44,-66,953,837),23116=>array(49,-71,980,828),23117=>array(54,-65,962,839),23118=>array(69,-68,953,842),23119=>array(42,-67,968,848),23120=>array(52,-70,979,827),23121=>array(50,-70,962,830),23122=>array(50,-68,971,836),23123=>array(64,-74,935,827),23124=>array(54,-63,964,834),23125=>array(37,-65,964,836),23126=>array(45,-68,979,829),23127=>array(54,-70,960,832),23128=>array(50,-62,966,831),23129=>array(48,-60,946,841),23130=>array(55,-71,960,833),23131=>array(52,-62,955,838),23132=>array(47,-67,954,790),23133=>array(52,-71,961,828),23134=>array(49,-67,959,839),23135=>array(66,-71,912,829),23136=>array(65,-68,924,839),23137=>array(44,-64,970,839),23138=>array(54,-65,951,850),23139=>array(59,-75,922,834),23140=>array(52,-72,898,830),23141=>array(56,-66,967,833),23142=>array(42,-74,944,832),23143=>array(45,-64,948,837),23144=>array(34,-61,957,834),23145=>array(53,-67,948,837),23146=>array(47,-78,964,822),23147=>array(54,-56,949,834),23148=>array(37,-50,950,829),23149=>array(45,-54,954,833),23150=>array(69,-68,945,834),23151=>array(57,-78,918,795),23152=>array(50,-73,959,835),23153=>array(57,-78,944,848),23154=>array(70,-65,962,835),23155=>array(61,-62,934,835),23156=>array(56,-74,915,780),23157=>array(37,-70,956,825),23158=>array(52,-63,903,831),23159=>array(40,-65,949,852),23160=>array(57,-68,947,830),23161=>array(65,-67,952,835),23162=>array(51,-69,963,841),23163=>array(50,-65,951,833),23164=>array(51,-64,954,840),23165=>array(53,-70,964,832),23166=>array(41,-70,964,849),23167=>array(63,-65,967,834),23168=>array(67,-68,932,832),23169=>array(50,-64,963,849),23170=>array(65,-61,935,858),23171=>array(57,-68,961,832),23172=>array(57,-71,961,833),23173=>array(38,-49,955,827),23174=>array(57,-72,945,835),23175=>array(57,-72,934,832),23176=>array(70,-62,950,824),23177=>array(57,-62,943,832),23178=>array(43,-73,951,833),23179=>array(58,-73,973,823),23180=>array(52,-74,955,830),23181=>array(56,-82,954,852),23182=>array(57,-68,965,838),23183=>array(50,-69,950,830),23184=>array(51,-72,952,787),23185=>array(65,-66,959,842),23186=>array(60,-66,973,836),23187=>array(60,-58,959,841),23188=>array(52,-70,954,834),23189=>array(57,-76,964,833),23190=>array(47,-60,988,842),23191=>array(73,-50,961,836),23192=>array(57,-65,951,842),23193=>array(48,-74,961,843),23194=>array(63,-73,900,827),23195=>array(42,-65,949,836),23196=>array(56,-82,954,833),23197=>array(50,-72,945,835),23198=>array(55,-69,986,832),23199=>array(44,-62,963,810),23200=>array(64,-65,927,845),23201=>array(58,-67,964,833),23202=>array(49,-70,920,825),23203=>array(43,-66,954,835),23204=>array(67,-53,976,832),23205=>array(53,-78,921,834),23206=>array(55,-67,914,832),23207=>array(54,-65,919,837),23208=>array(54,-63,967,835),23209=>array(62,-71,914,827),23210=>array(35,-74,951,815),23211=>array(38,-60,965,836),23212=>array(56,-67,981,825),23213=>array(57,-82,931,825),23214=>array(41,-70,974,849),23215=>array(46,-60,928,845),23216=>array(46,-65,908,832),23217=>array(55,-73,967,840),23218=>array(43,-53,958,852),23219=>array(65,-67,967,846),23220=>array(59,-76,974,823),23221=>array(31,-65,968,834),23222=>array(55,-67,954,827),23223=>array(43,-64,950,837),23224=>array(55,-71,966,843),23225=>array(56,-69,915,834),23226=>array(51,-73,975,829),23227=>array(38,-76,950,832),23228=>array(51,-72,968,818),23229=>array(56,-71,922,818),23230=>array(18,-64,948,837),23231=>array(52,-64,972,855),23232=>array(48,-69,962,833),23233=>array(53,-69,970,832),23234=>array(42,-65,958,840),23235=>array(60,-71,945,840),23236=>array(38,-65,968,839),23237=>array(72,-60,954,844),23238=>array(65,-69,977,833),23239=>array(54,-82,962,829),23240=>array(61,-73,932,831),23241=>array(66,-76,957,831),23242=>array(49,-65,954,832),23243=>array(36,-57,929,818),23244=>array(51,-64,966,850),23245=>array(52,-70,927,832),23246=>array(44,-69,950,840),23247=>array(49,-64,946,842),23248=>array(57,-65,958,829),23249=>array(82,-71,934,791),23250=>array(44,-73,931,820),23251=>array(43,-53,967,844),23252=>array(43,-72,920,826),23253=>array(58,-56,971,830),23254=>array(22,-62,953,831),23255=>array(36,-77,951,837),23256=>array(44,-61,977,843),23257=>array(38,-63,970,841),23258=>array(47,-47,972,833),23259=>array(52,-74,958,785),23260=>array(52,-65,964,849),23261=>array(58,-70,962,834),23262=>array(54,-67,957,836),23263=>array(44,-47,951,841),23264=>array(37,-66,955,841),23265=>array(37,-64,948,836),23266=>array(51,-72,954,826),23267=>array(43,-61,952,836),23268=>array(55,-55,938,836),23269=>array(50,-69,951,831),23270=>array(30,-77,921,826),23271=>array(36,-67,943,830),23272=>array(59,-72,972,833),23273=>array(69,-69,964,835),23274=>array(37,-72,973,839),23275=>array(68,-62,989,837),23276=>array(63,-66,978,834),23277=>array(56,-68,953,831),23278=>array(50,-70,954,828),23279=>array(44,-75,960,833),23280=>array(69,-69,984,837),23281=>array(41,-70,914,823),23282=>array(49,-66,979,840),23283=>array(51,-50,957,859),23284=>array(62,-80,956,829),23285=>array(40,-65,961,836),23286=>array(39,-54,970,856),23287=>array(34,-65,950,841),23288=>array(44,-78,962,837),23289=>array(46,-73,966,828),23290=>array(42,-68,911,835),23291=>array(57,-65,915,823),23292=>array(38,-74,958,831),23293=>array(44,-74,980,838),23294=>array(37,-74,954,836),23295=>array(48,-77,965,834),23296=>array(53,-67,964,852),23297=>array(35,-77,989,831),23298=>array(54,-82,981,833),23299=>array(45,-77,951,827),23300=>array(38,-69,954,833),23301=>array(38,-69,952,829),23302=>array(41,-64,991,858),23303=>array(38,-79,960,832),23304=>array(44,-64,965,835),23305=>array(38,-64,956,841),23306=>array(64,-89,940,832),23307=>array(34,-68,958,835),23308=>array(52,-68,966,834),23309=>array(38,-66,965,835),23310=>array(42,-70,975,831),23311=>array(40,-68,975,831),23312=>array(44,-74,976,841),23313=>array(30,-50,963,844),23314=>array(45,-68,973,864),23315=>array(45,-80,977,839),23316=>array(41,-66,971,831),23317=>array(46,-64,941,835),23318=>array(61,-75,948,848),23319=>array(35,-56,962,850),23320=>array(34,-64,952,837),23321=>array(36,-65,964,837),23322=>array(42,-70,972,844),23323=>array(46,-60,991,836),23324=>array(53,-84,969,849),23325=>array(46,-64,956,848),23326=>array(50,-41,962,835),23327=>array(46,-70,965,853),23328=>array(38,-67,984,838),23329=>array(36,-66,975,843),23330=>array(43,-79,966,837),23331=>array(51,-70,964,837),23332=>array(37,-68,973,848),23333=>array(51,-70,956,825),23334=>array(50,-71,955,826),23335=>array(41,-70,953,825),23336=>array(34,-50,963,838),23337=>array(43,-70,942,831),23338=>array(44,-67,966,844),23339=>array(34,-65,947,840),23340=>array(48,-68,951,829),23341=>array(44,-68,976,815),23342=>array(45,-74,950,807),23343=>array(45,-68,957,824),23344=>array(68,-69,924,791),23345=>array(53,-75,953,840),23346=>array(46,-63,934,829),23347=>array(43,-65,963,831),23348=>array(43,-69,956,850),23349=>array(40,-68,936,845),23350=>array(43,-64,962,859),23351=>array(36,-67,962,846),23352=>array(54,-65,958,851),23353=>array(27,-65,977,829),23354=>array(57,-53,971,829),23355=>array(46,-66,961,841),23356=>array(62,-74,921,831),23357=>array(40,-67,976,839),23358=>array(35,-50,968,848),23359=>array(41,-68,971,836),23360=>array(51,-65,932,831),23361=>array(68,-66,930,785),23362=>array(42,-43,959,840),23363=>array(59,-61,989,840),23364=>array(41,-66,909,832),23365=>array(43,-65,969,821),23366=>array(55,-67,954,831),23367=>array(46,-64,980,832),23368=>array(48,-65,943,831),23369=>array(66,-58,937,839),23370=>array(41,-78,942,839),23371=>array(44,-72,962,825),23372=>array(55,-74,957,839),23373=>array(39,-67,974,831),23374=>array(46,-73,947,830),23375=>array(45,-65,953,846),23376=>array(98,-49,921,787),23377=>array(72,-52,927,782),23378=>array(221,-58,921,778),23379=>array(94,-53,939,781),23380=>array(69,-61,953,825),23381=>array(74,-59,942,783),23382=>array(41,-52,955,786),23383=>array(94,-61,926,832),23384=>array(47,-69,943,839),23385=>array(31,-66,937,823),23386=>array(53,-65,947,840),23387=>array(74,-64,944,831),23388=>array(60,-65,967,834),23389=>array(48,-61,928,834),23390=>array(24,-31,945,786),23391=>array(66,-17,955,786),23392=>array(86,-51,920,828),23393=>array(20,-70,953,839),23394=>array(53,-64,947,847),23395=>array(50,-67,959,838),23396=>array(42,-77,970,838),23397=>array(54,-58,947,852),23398=>array(74,-54,926,826),23399=>array(86,-52,935,826),23400=>array(41,-67,950,800),23401=>array(51,-68,948,833),23402=>array(41,-60,924,842),23403=>array(44,-69,965,815),23404=>array(38,-66,946,791),23405=>array(55,-72,960,785),23406=>array(41,-64,949,836),23407=>array(63,-61,956,796),23408=>array(41,-68,971,834),23409=>array(31,-59,962,798),23410=>array(51,-50,961,789),23411=>array(53,-56,949,855),23412=>array(135,-68,903,823),23413=>array(34,-76,944,817),23414=>array(53,-58,949,838),23415=>array(41,-71,953,831),23416=>array(66,-67,939,831),23417=>array(64,-57,940,840),23418=>array(31,-64,955,790),23419=>array(44,-70,954,823),23420=>array(59,-81,946,833),23421=>array(71,-60,948,837),23422=>array(39,-67,954,788),23423=>array(57,-59,955,846),23424=>array(90,354,883,650),23425=>array(79,-52,934,851),23426=>array(56,-67,945,833),23427=>array(109,-28,902,821),23428=>array(55,-63,952,841),23429=>array(70,-38,942,833),23430=>array(79,-61,932,841),23431=>array(59,-69,931,840),23432=>array(77,-59,923,825),23433=>array(76,-70,912,818),23434=>array(71,-64,950,844),23435=>array(63,-65,951,824),23436=>array(60,-62,946,839),23437=>array(58,-58,942,822),23438=>array(48,-66,955,845),23439=>array(77,-64,927,822),23440=>array(76,-37,972,838),23441=>array(106,-66,923,838),23442=>array(84,-44,940,832),23443=>array(46,-66,958,830),23444=>array(75,-32,925,842),23445=>array(57,-65,894,839),23446=>array(75,-65,942,830),23447=>array(71,-63,945,822),23448=>array(106,-70,894,839),23449=>array(106,-71,894,817),23450=>array(41,-67,953,826),23451=>array(54,-59,954,818),23452=>array(60,-29,953,831),23453=>array(79,-25,925,826),23454=>array(73,-61,929,832),23455=>array(47,-57,955,827),23456=>array(32,-56,957,841),23457=>array(89,-60,904,842),23458=>array(40,-61,958,828),23459=>array(73,-25,931,823),23460=>array(93,-35,907,825),23461=>array(51,-70,908,839),23462=>array(102,-72,915,832),23463=>array(90,-21,910,835),23464=>array(74,-79,949,824),23465=>array(87,-54,933,835),23466=>array(41,-63,921,837),23467=>array(91,-74,894,839),23468=>array(39,-65,966,842),23469=>array(59,-65,932,830),23470=>array(98,-68,902,829),23471=>array(42,-58,934,848),23472=>array(80,-63,931,831),23473=>array(83,-52,893,844),23474=>array(46,-50,955,844),23475=>array(83,-65,920,834),23476=>array(69,-79,934,839),23477=>array(110,-71,901,837),23478=>array(55,-65,960,823),23479=>array(46,-56,955,857),23480=>array(45,-67,968,833),23481=>array(47,-68,953,834),23482=>array(54,-57,955,840),23483=>array(55,-61,949,834),23484=>array(47,-73,959,846),23485=>array(81,-62,927,836),23486=>array(50,-77,917,846),23487=>array(43,-73,906,828),23488=>array(46,-62,955,826),23489=>array(41,-67,982,841),23490=>array(48,-71,969,835),23491=>array(54,-62,952,829),23492=>array(80,-59,941,833),23493=>array(53,-69,956,835),23494=>array(66,-64,944,827),23495=>array(47,-73,959,830),23496=>array(86,-65,921,846),23497=>array(90,-67,912,845),23498=>array(62,-74,963,838),23499=>array(37,-41,968,835),23500=>array(107,-67,900,835),23501=>array(61,-31,953,835),23502=>array(43,-53,926,860),23503=>array(63,-66,961,841),23504=>array(46,-77,962,821),23505=>array(45,-72,929,839),23506=>array(48,-83,952,834),23507=>array(100,-65,900,840),23508=>array(75,-68,971,828),23509=>array(83,-68,930,843),23510=>array(56,-60,981,844),23511=>array(47,-55,944,840),23512=>array(72,-78,931,841),23513=>array(34,-64,966,839),23514=>array(65,-65,957,842),23515=>array(55,-57,956,842),23516=>array(80,-68,917,843),23517=>array(39,-75,952,829),23518=>array(35,-76,962,845),23519=>array(53,-62,954,825),23520=>array(41,-61,936,856),23521=>array(35,-66,974,840),23522=>array(47,-76,960,836),23523=>array(53,-72,948,836),23524=>array(54,-64,953,836),23525=>array(42,-72,977,850),23526=>array(61,-74,952,850),23527=>array(80,-68,917,844),23528=>array(44,-69,930,839),23529=>array(41,-73,970,835),23530=>array(50,-63,914,836),23531=>array(82,-65,910,833),23532=>array(55,-57,953,843),23533=>array(83,-34,925,849),23534=>array(41,-64,970,838),23535=>array(63,-68,917,841),23536=>array(62,-78,967,846),23537=>array(44,-69,975,835),23538=>array(58,-75,968,833),23539=>array(70,-69,939,832),23540=>array(67,-76,957,841),23541=>array(54,-66,969,836),23542=>array(70,-69,939,850),23543=>array(69,-25,923,847),23544=>array(97,-64,912,829),23545=>array(24,-60,915,829),23546=>array(77,-59,932,836),23547=>array(62,-57,913,793),23548=>array(50,-58,916,786),23549=>array(50,-63,916,840),23550=>array(49,-46,951,821),23551=>array(60,-57,934,835),23552=>array(100,-61,945,826),23553=>array(49,-61,945,826),23554=>array(62,-72,935,823),23555=>array(55,-72,936,823),23556=>array(49,-64,948,845),23557=>array(44,-69,962,827),23558=>array(41,-63,940,839),23559=>array(37,-64,956,841),23560=>array(57,-67,947,826),23561=>array(44,-71,951,826),23562=>array(68,-63,932,850),23563=>array(73,-70,933,811),23564=>array(53,-71,955,829),23565=>array(38,-61,952,835),23566=>array(57,-65,944,848),23567=>array(71,-41,927,818),23568=>array(68,-62,945,816),23569=>array(52,-67,944,818),23570=>array(45,-63,954,833),23571=>array(59,-63,935,827),23572=>array(32,-63,909,830),23573=>array(49,-58,961,789),23574=>array(61,-64,939,830),23575=>array(49,-58,961,821),23576=>array(50,-16,921,824),23577=>array(116,-70,861,824),23578=>array(110,-70,864,836),23579=>array(31,-48,962,821),23580=>array(43,-64,952,824),23581=>array(66,-68,898,831),23582=>array(41,-64,970,821),23583=>array(41,-71,970,822),23584=>array(42,-84,972,826),23585=>array(41,-62,961,836),23586=>array(46,-63,954,829),23587=>array(82,-47,936,782),23588=>array(62,-65,927,829),23589=>array(32,-60,963,842),23590=>array(42,-44,959,835),23591=>array(70,-61,932,827),23592=>array(35,-70,949,853),23593=>array(35,-61,964,798),23594=>array(44,-64,964,832),23595=>array(32,-55,962,785),23596=>array(31,-66,963,844),23597=>array(43,-65,962,837),23598=>array(34,-51,958,833),23599=>array(34,-51,958,835),23600=>array(50,-66,961,836),23601=>array(56,-63,951,831),23602=>array(33,-51,958,842),23603=>array(44,-69,959,826),23604=>array(34,-51,958,833),23605=>array(34,-51,960,835),23606=>array(36,-66,971,831),23607=>array(36,-72,974,831),23608=>array(78,-71,880,766),23609=>array(41,-58,956,772),23610=>array(69,-73,926,765),23611=>array(36,-62,963,790),23612=>array(53,-71,934,782),23613=>array(40,-60,960,789),23614=>array(57,-67,940,784),23615=>array(52,-74,951,779),23616=>array(68,-65,895,785),23617=>array(54,-73,938,782),23618=>array(28,-63,917,789),23619=>array(28,-64,961,789),23620=>array(52,-62,903,794),23621=>array(56,-73,930,782),23622=>array(64,-73,896,788),23623=>array(63,-62,897,792),23624=>array(49,-65,886,792),23625=>array(41,-70,935,787),23626=>array(22,-60,846,791),23627=>array(53,-74,933,796),23628=>array(59,-69,894,786),23629=>array(33,-64,964,791),23630=>array(47,-76,939,785),23631=>array(53,-72,930,785),23632=>array(37,-65,972,789),23633=>array(59,-72,894,789),23634=>array(45,-72,956,795),23635=>array(65,-92,946,781),23636=>array(60,-59,952,804),23637=>array(46,-73,943,779),23638=>array(55,-64,932,782),23639=>array(48,-73,964,798),23640=>array(48,-73,964,782),23641=>array(35,-68,951,788),23642=>array(58,-66,899,808),23643=>array(53,-72,930,785),23644=>array(49,-67,957,791),23645=>array(44,-70,935,786),23646=>array(30,-73,877,777),23647=>array(23,-58,963,803),23648=>array(46,-68,935,796),23649=>array(41,-65,911,788),23650=>array(46,-82,939,823),23651=>array(44,-69,973,787),23652=>array(50,-68,900,808),23653=>array(29,-68,953,786),23654=>array(35,-73,913,789),23655=>array(23,-58,975,803),23656=>array(41,-70,962,798),23657=>array(44,-62,959,800),23658=>array(48,-66,966,786),23659=>array(44,-62,983,800),23660=>array(57,-82,912,790),23661=>array(40,-58,934,804),23662=>array(85,-65,895,825),23663=>array(78,-40,952,836),23664=>array(90,-68,912,848),23665=>array(137,-48,863,771),23666=>array(124,-65,853,820),23667=>array(47,-65,950,800),23668=>array(67,-62,915,833),23669=>array(46,-80,882,833),23670=>array(67,-62,915,833),23671=>array(94,-70,920,821),23672=>array(94,4,953,821),23673=>array(53,-27,935,841),23674=>array(85,-28,931,813),23675=>array(110,-64,897,820),23676=>array(113,-70,964,824),23677=>array(113,-50,963,824),23678=>array(89,-69,911,814),23679=>array(90,-67,922,825),23680=>array(143,-65,869,838),23681=>array(80,-65,855,815),23682=>array(104,-31,921,822),23683=>array(95,-75,915,833),23684=>array(113,-65,889,824),23685=>array(95,-68,953,824),23686=>array(97,-62,963,827),23687=>array(110,-64,911,836),23688=>array(89,-52,930,814),23689=>array(103,-66,909,834),23690=>array(118,-67,935,787),23691=>array(106,-71,965,806),23692=>array(43,-65,957,832),23693=>array(86,-68,931,817),23694=>array(63,-71,951,824),23695=>array(104,-69,948,818),23696=>array(76,-66,964,837),23697=>array(41,-73,955,833),23698=>array(96,-71,960,836),23699=>array(101,-70,948,830),23700=>array(45,-69,961,821),23701=>array(52,-68,969,831),23702=>array(93,-29,916,803),23703=>array(134,-58,833,830),23704=>array(87,-68,934,810),23705=>array(53,-67,959,812),23706=>array(40,-62,957,826),23707=>array(115,-63,865,832),23708=>array(140,-26,921,823),23709=>array(53,-66,935,838),23710=>array(91,-62,955,845),23711=>array(97,-70,964,831),23712=>array(91,-20,951,813),23713=>array(113,-59,888,789),23714=>array(80,-62,931,839),23715=>array(109,-54,909,845),23716=>array(65,-66,966,834),23717=>array(98,-70,957,827),23718=>array(70,-27,945,824),23719=>array(54,-56,900,850),23720=>array(80,-25,948,817),23721=>array(69,-68,920,822),23722=>array(107,-64,900,837),23723=>array(66,-64,892,830),23724=>array(81,-67,901,817),23725=>array(103,-72,948,833),23726=>array(103,-43,949,833),23727=>array(97,-30,949,800),23728=>array(98,-69,910,834),23729=>array(47,-67,955,839),23730=>array(87,-62,960,810),23731=>array(76,-65,924,829),23732=>array(93,-8,933,814),23733=>array(76,-65,935,829),23734=>array(66,-66,888,843),23735=>array(66,-67,939,817),23736=>array(35,-72,931,829),23737=>array(87,-70,910,810),23738=>array(41,-66,955,833),23739=>array(62,-57,961,829),23740=>array(62,-67,959,817),23741=>array(63,-66,920,815),23742=>array(66,-67,955,830),23743=>array(101,-66,875,824),23744=>array(144,-65,869,833),23745=>array(67,-69,911,836),23746=>array(107,-62,964,837),23747=>array(97,-67,907,820),23748=>array(91,-68,944,798),23749=>array(66,-75,950,845),23750=>array(111,-70,961,823),23751=>array(30,-62,979,840),23752=>array(107,-70,961,826),23753=>array(48,-70,963,821),23754=>array(163,-78,862,824),23755=>array(100,-60,903,844),23756=>array(107,-12,960,795),23757=>array(101,-64,959,827),23758=>array(134,-77,937,824),23759=>array(104,-68,956,821),23760=>array(107,-70,960,827),23761=>array(53,-41,948,819),23762=>array(101,-62,898,815),23763=>array(108,-76,949,822),23764=>array(103,-32,942,822),23765=>array(71,-70,947,836),23766=>array(111,-76,944,821),23767=>array(100,-67,949,819),23768=>array(106,-12,956,804),23769=>array(58,-58,927,838),23770=>array(54,-29,971,819),23771=>array(74,-76,885,818),23772=>array(44,-44,974,839),23773=>array(144,-61,869,827),23774=>array(46,-69,939,822),23775=>array(50,-67,934,825),23776=>array(79,-64,940,835),23777=>array(76,-64,945,826),23778=>array(73,-67,910,830),23779=>array(82,-60,944,829),23780=>array(89,-65,947,819),23781=>array(93,-62,957,830),23782=>array(40,-65,947,844),23783=>array(88,-63,944,846),23784=>array(77,-57,945,833),23785=>array(43,-52,958,850),23786=>array(62,-63,941,826),23787=>array(78,-67,948,817),23788=>array(109,-61,956,831),23789=>array(66,-67,923,833),23790=>array(98,-60,941,814),23791=>array(37,-64,978,839),23792=>array(77,-65,961,840),23793=>array(47,-65,951,793),23794=>array(46,-59,898,841),23795=>array(39,-67,969,841),23796=>array(77,-64,933,827),23797=>array(66,-43,956,828),23798=>array(118,-70,897,845),23799=>array(89,-62,939,829),23800=>array(105,-78,952,823),23801=>array(39,-71,957,835),23802=>array(66,-72,962,817),23803=>array(79,-69,966,849),23804=>array(69,-62,929,833),23805=>array(70,-73,961,836),23806=>array(93,-71,932,837),23807=>array(101,-62,944,813),23808=>array(131,-68,947,826),23809=>array(55,-64,987,837),23810=>array(91,-65,912,825),23811=>array(87,-65,963,818),23812=>array(69,-32,939,813),23813=>array(69,-54,906,849),23814=>array(85,-23,924,839),23815=>array(63,-66,937,835),23816=>array(92,-65,924,858),23817=>array(77,-62,980,843),23818=>array(64,-63,968,842),23819=>array(66,-73,934,831),23820=>array(109,-68,956,818),23821=>array(63,-63,945,835),23822=>array(77,-69,938,831),23823=>array(109,-73,962,827),23824=>array(90,-42,961,811),23825=>array(76,-66,954,838),23826=>array(69,-68,945,835),23827=>array(93,-65,909,811),23828=>array(49,-68,949,836),23829=>array(66,-64,953,825),23830=>array(46,-80,938,833),23831=>array(134,-67,879,833),23832=>array(66,-68,960,839),23833=>array(33,-61,979,841),23834=>array(66,-52,968,850),23835=>array(66,-66,932,817),23836=>array(90,-27,911,832),23837=>array(107,-68,957,833),23838=>array(91,-62,935,851),23839=>array(49,-22,962,835),23840=>array(109,-71,976,830),23841=>array(71,-57,920,802),23842=>array(65,-71,956,834),23843=>array(55,-66,970,837),23844=>array(79,-64,927,838),23845=>array(100,-73,948,837),23846=>array(74,-33,950,847),23847=>array(29,-64,933,838),23848=>array(107,-69,974,832),23849=>array(59,-74,894,835),23850=>array(95,-64,951,845),23851=>array(61,-74,911,823),23852=>array(50,-50,960,829),23853=>array(36,-70,914,823),23854=>array(127,-67,886,837),23855=>array(86,-22,964,845),23856=>array(106,-68,930,835),23857=>array(73,-74,897,829),23858=>array(109,-28,954,837),23859=>array(106,-71,967,837),23860=>array(33,-63,956,835),23861=>array(111,-68,955,817),23862=>array(52,-65,953,829),23863=>array(79,-71,953,838),23864=>array(108,-81,963,809),23865=>array(108,-69,933,831),23866=>array(38,-73,956,829),23867=>array(72,-68,949,830),23868=>array(109,-72,961,815),23869=>array(60,-31,955,836),23870=>array(82,-65,945,805),23871=>array(109,-63,962,818),23872=>array(48,-70,955,826),23873=>array(109,-27,953,826),23874=>array(43,-67,954,833),23875=>array(108,-71,951,833),23876=>array(74,-71,961,831),23877=>array(41,-71,953,831),23878=>array(39,-70,960,832),23879=>array(45,-65,972,837),23880=>array(92,-67,958,830),23881=>array(106,-70,944,841),23882=>array(79,-65,960,842),23883=>array(66,-64,905,817),23884=>array(47,-69,971,835),23885=>array(36,-62,954,830),23886=>array(66,-65,915,817),23887=>array(57,-75,945,821),23888=>array(34,-62,970,837),23889=>array(109,-70,919,821),23890=>array(99,-52,895,800),23891=>array(114,-42,910,813),23892=>array(63,-69,943,812),23893=>array(103,-69,967,819),23894=>array(83,-23,967,836),23895=>array(45,-70,939,809),23896=>array(82,-71,955,817),23897=>array(55,-70,956,827),23898=>array(26,-66,960,835),23899=>array(33,-64,979,839),23900=>array(60,-62,928,831),23901=>array(92,-63,944,817),23902=>array(51,-71,967,847),23903=>array(37,-77,939,833),23904=>array(106,-62,995,841),23905=>array(47,-56,969,825),23906=>array(106,-70,958,842),23907=>array(111,-72,951,835),23908=>array(70,-60,919,830),23909=>array(110,-68,963,829),23910=>array(81,-20,933,839),23911=>array(105,-73,911,831),23912=>array(109,-74,940,842),23913=>array(63,-70,937,835),23914=>array(81,-75,939,841),23915=>array(83,-66,938,844),23916=>array(76,-74,951,836),23917=>array(59,-76,953,840),23918=>array(64,-65,973,846),23919=>array(77,-39,945,825),23920=>array(83,-64,967,843),23921=>array(105,-72,967,830),23922=>array(110,-72,979,845),23923=>array(37,-47,956,839),23924=>array(78,-67,960,833),23925=>array(114,-61,947,836),23926=>array(69,-54,929,809),23927=>array(101,-67,974,836),23928=>array(48,-71,966,835),23929=>array(79,-76,959,835),23930=>array(109,-67,960,817),23931=>array(79,-66,968,848),23932=>array(112,-67,959,834),23933=>array(98,-67,957,826),23934=>array(38,-49,974,851),23935=>array(68,-74,965,835),23936=>array(109,-65,953,818),23937=>array(76,-68,934,836),23938=>array(62,-65,930,844),23939=>array(93,-64,962,842),23940=>array(50,-64,955,835),23941=>array(36,-59,957,794),23942=>array(109,-69,955,826),23943=>array(66,-64,933,817),23944=>array(48,-71,962,830),23945=>array(127,-68,964,831),23946=>array(46,-58,948,842),23947=>array(83,-63,924,843),23948=>array(51,-56,890,810),23949=>array(107,-73,900,812),23950=>array(51,-64,948,821),23951=>array(40,-78,954,821),23952=>array(107,-73,949,812),23953=>array(81,-75,951,834),23954=>array(95,-53,908,851),23955=>array(98,-71,972,830),23956=>array(45,-65,978,836),23957=>array(109,-70,970,827),23958=>array(60,-63,991,858),23959=>array(92,-67,935,829),23960=>array(29,-71,910,838),23961=>array(76,-71,937,829),23962=>array(24,-67,985,835),23963=>array(76,-62,959,852),23964=>array(37,-72,964,830),23965=>array(66,-24,954,835),23966=>array(116,-71,933,838),23967=>array(78,-72,955,848),23968=>array(76,-64,956,828),23969=>array(40,-79,971,830),23970=>array(62,-64,943,836),23971=>array(39,-64,938,830),23972=>array(33,-59,962,833),23973=>array(66,-73,970,812),23974=>array(67,-72,945,841),23975=>array(82,-64,935,814),23976=>array(100,-67,915,835),23977=>array(109,-80,973,829),23978=>array(40,-68,964,840),23979=>array(79,-67,948,825),23980=>array(66,-77,965,840),23981=>array(103,-64,947,840),23982=>array(66,-57,950,854),23983=>array(44,-80,965,829),23984=>array(106,-69,961,828),23985=>array(106,-69,954,824),23986=>array(57,-60,929,842),23987=>array(40,-52,968,836),23988=>array(38,-73,977,840),23989=>array(115,-68,961,814),23990=>array(45,-73,967,825),23991=>array(29,-63,951,834),23992=>array(75,-65,947,829),23993=>array(62,-65,960,833),23994=>array(40,-73,961,832),23995=>array(37,-84,964,831),23996=>array(74,-70,958,821),23997=>array(52,-66,965,839),23998=>array(78,-32,953,837),23999=>array(74,-64,943,812),24000=>array(39,-64,964,831),24001=>array(73,-63,962,826),24002=>array(49,-64,936,838),24003=>array(54,-64,975,836),24004=>array(67,-63,962,843),24005=>array(46,-68,931,824),24006=>array(93,-67,940,836),24007=>array(95,-56,959,847),24008=>array(69,-64,919,812),24009=>array(69,-67,966,848),24010=>array(72,-62,958,831),24011=>array(43,-65,938,836),24012=>array(42,-69,968,820),24013=>array(38,-73,957,828),24014=>array(54,-61,976,820),24015=>array(93,-70,953,817),24016=>array(78,-61,975,836),24017=>array(106,-68,976,832),24018=>array(58,-64,961,841),24019=>array(55,-87,941,851),24020=>array(48,-64,962,836),24021=>array(96,-63,945,844),24022=>array(42,-67,973,836),24023=>array(58,-64,963,815),24024=>array(82,-72,956,832),24025=>array(74,-65,964,837),24026=>array(37,-68,957,833),24027=>array(43,-60,914,801),24028=>array(166,-60,793,795),24029=>array(58,-70,858,817),24030=>array(55,-64,859,823),24031=>array(55,-70,941,839),24032=>array(74,-36,945,773),24033=>array(22,-53,943,817),24034=>array(61,-59,961,849),24035=>array(61,-59,961,836),24036=>array(122,-67,935,842),24037=>array(95,54,909,696),24038=>array(55,-14,925,819),24039=>array(59,-57,933,773),24040=>array(169,-60,932,791),24041=>array(44,-64,940,790),24042=>array(88,-54,921,806),24043=>array(69,1,949,753),24044=>array(63,-47,955,814),24045=>array(64,-59,955,847),24046=>array(47,-19,936,840),24047=>array(37,-67,936,841),24048=>array(43,-71,959,845),24049=>array(114,0,897,763),24050=>array(138,-17,934,764),24051=>array(174,-24,942,768),24052=>array(140,-12,942,746),24053=>array(59,-65,938,835),24054=>array(68,-58,945,776),24055=>array(38,-43,971,819),24056=>array(100,-50,972,781),24057=>array(33,-35,989,780),24058=>array(72,-72,941,776),24059=>array(44,-43,955,830),24060=>array(136,-67,962,796),24061=>array(63,-80,937,790),24062=>array(154,-69,846,829),24063=>array(82,-63,936,833),24064=>array(72,-68,928,759),24065=>array(91,-62,873,814),24066=>array(72,-68,928,826),24067=>array(58,-67,920,835),24068=>array(110,-65,941,829),24069=>array(61,-64,886,828),24070=>array(95,-76,948,829),24071=>array(71,-66,929,826),24072=>array(105,-63,917,830),24073=>array(110,-61,972,834),24074=>array(98,-61,942,834),24075=>array(70,-50,936,854),24076=>array(64,-65,941,845),24077=>array(70,-69,889,827),24078=>array(102,-59,949,842),24079=>array(90,-69,906,824),24080=>array(91,-79,951,809),24081=>array(51,-62,948,843),24082=>array(47,-62,928,839),24083=>array(90,-63,948,843),24084=>array(90,-72,940,832),24085=>array(118,-67,886,843),24086=>array(96,-66,943,833),24087=>array(91,-74,956,833),24088=>array(104,-72,903,842),24089=>array(76,-66,955,830),24090=>array(72,-70,892,780),24091=>array(139,-65,874,851),24092=>array(90,-70,948,811),24093=>array(104,-68,896,834),24094=>array(111,-70,941,811),24095=>array(66,-68,935,832),24096=>array(165,-67,849,831),24097=>array(110,-68,952,847),24098=>array(110,-72,955,826),24099=>array(46,-69,960,832),24100=>array(47,-66,879,833),24101=>array(115,-65,910,850),24102=>array(65,-59,913,828),24103=>array(89,-67,940,825),24104=>array(76,-72,958,827),24105=>array(110,-67,920,826),24106=>array(111,-76,959,825),24107=>array(112,-74,948,844),24108=>array(57,-67,945,786),24109=>array(50,-71,944,829),24110=>array(54,-55,925,831),24111=>array(65,-59,913,828),24112=>array(88,-65,929,808),24113=>array(90,-64,922,828),24114=>array(65,-64,937,852),24115=>array(81,-68,962,829),24116=>array(97,-68,943,842),24117=>array(80,-65,948,847),24118=>array(89,-65,933,830),24119=>array(86,-62,932,833),24120=>array(94,-67,918,835),24121=>array(80,-72,925,844),24122=>array(80,-65,952,840),24123=>array(92,-64,929,826),24124=>array(90,-65,890,798),24125=>array(94,-73,916,828),24126=>array(106,-68,941,832),24127=>array(81,-68,975,834),24128=>array(79,-70,946,831),24129=>array(111,-72,961,830),24130=>array(38,-65,979,788),24131=>array(73,-70,938,838),24132=>array(89,-64,935,829),24133=>array(85,-69,924,829),24134=>array(85,-69,948,829),24135=>array(55,-64,948,835),24136=>array(79,-71,960,827),24137=>array(88,-67,958,833),24138=>array(111,-78,962,828),24139=>array(54,-69,970,848),24140=>array(84,-72,941,828),24141=>array(106,-70,927,820),24142=>array(62,-57,950,838),24143=>array(110,-69,977,838),24144=>array(41,-76,957,836),24145=>array(35,-76,964,833),24146=>array(75,-65,969,850),24147=>array(107,-68,972,841),24148=>array(57,-65,953,826),24149=>array(57,-63,954,834),24150=>array(75,-69,957,826),24151=>array(70,-61,923,838),24152=>array(109,-70,964,830),24153=>array(89,-60,948,839),24154=>array(55,-64,942,852),24155=>array(85,-65,935,842),24156=>array(104,-70,963,821),24157=>array(104,-71,965,823),24158=>array(63,-74,937,821),24159=>array(78,-71,948,837),24160=>array(92,-70,965,827),24161=>array(68,-66,934,839),24162=>array(71,-64,931,845),24163=>array(89,-72,962,839),24164=>array(89,-70,945,839),24165=>array(61,-64,958,833),24166=>array(52,-62,959,851),24167=>array(101,-70,989,823),24168=>array(88,-50,935,853),24169=>array(113,-73,970,830),24170=>array(116,-65,981,836),24171=>array(55,-64,948,835),24172=>array(66,-68,938,826),24173=>array(89,-53,955,849),24174=>array(92,-72,946,843),24175=>array(94,-55,926,854),24176=>array(81,-65,952,840),24177=>array(55,-65,922,829),24178=>array(100,-58,900,779),24179=>array(71,-70,920,787),24180=>array(86,-68,917,841),24181=>array(59,-68,954,778),24182=>array(76,-65,929,848),24183=>array(89,-70,898,839),24184=>array(94,-67,909,833),24185=>array(60,-66,970,844),24186=>array(91,-37,914,826),24187=>array(53,-48,902,807),24188=>array(53,-65,906,826),24189=>array(115,-63,885,831),24190=>array(61,-66,958,838),24191=>array(49,-61,908,823),24192=>array(53,-72,939,847),24193=>array(35,-61,930,826),24194=>array(58,-66,950,835),24195=>array(45,-65,935,822),24196=>array(28,-64,942,822),24197=>array(24,-66,918,816),24198=>array(39,-75,941,830),24199=>array(35,-51,964,839),24200=>array(51,-68,954,846),24201=>array(50,-68,951,837),24202=>array(45,-67,964,822),24203=>array(43,-66,980,848),24204=>array(58,-64,945,840),24205=>array(44,-67,936,845),24206=>array(25,-76,936,819),24207=>array(45,-71,918,831),24208=>array(32,-68,914,835),24209=>array(26,-67,924,842),24210=>array(28,-64,942,849),24211=>array(27,-60,925,841),24212=>array(46,-59,928,834),24213=>array(43,-63,952,837),24214=>array(39,-66,943,828),24215=>array(45,-64,948,839),24216=>array(25,-64,908,819),24217=>array(39,-66,913,844),24218=>array(45,-68,963,839),24219=>array(56,-53,956,834),24220=>array(41,-68,937,831),24221=>array(24,-84,936,846),24222=>array(25,-59,928,832),24223=>array(39,-68,947,833),24224=>array(42,-67,951,834),24225=>array(25,-70,938,819),24226=>array(48,-53,954,830),24227=>array(55,-67,954,824),24228=>array(48,-55,956,831),24229=>array(29,-65,966,844),24230=>array(46,-68,950,826),24231=>array(48,-66,928,822),24232=>array(44,-67,930,833),24233=>array(25,-64,959,819),24234=>array(39,-76,958,838),24235=>array(54,-76,941,829),24236=>array(44,-58,956,838),24237=>array(37,-63,968,837),24238=>array(41,-61,932,842),24239=>array(25,-71,908,819),24240=>array(51,-77,954,824),24241=>array(41,-67,959,846),24242=>array(44,-68,954,838),24243=>array(41,-51,955,865),24244=>array(49,-64,942,841),24245=>array(38,-66,965,831),24246=>array(36,-55,945,828),24247=>array(41,-67,966,823),24248=>array(50,-61,954,844),24249=>array(26,-68,968,854),24250=>array(25,-61,930,827),24251=>array(50,-63,940,839),24252=>array(46,-69,944,855),24253=>array(49,-63,945,849),24254=>array(43,-74,967,824),24255=>array(39,-66,913,844),24256=>array(31,-62,961,839),24257=>array(45,-69,948,840),24258=>array(51,-71,942,832),24259=>array(42,-67,965,833),24260=>array(37,-54,968,857),24261=>array(40,-66,954,842),24262=>array(30,-64,961,838),24263=>array(34,-69,948,839),24264=>array(43,-73,952,839),24265=>array(44,-59,970,845),24266=>array(46,-60,949,837),24267=>array(31,-54,967,856),24268=>array(39,-73,951,835),24269=>array(38,-71,947,850),24270=>array(46,-68,968,855),24271=>array(37,-54,968,843),24272=>array(40,-67,956,831),24273=>array(42,-66,951,848),24274=>array(39,-70,966,852),24275=>array(35,-65,942,837),24276=>array(32,-50,959,862),24277=>array(37,-67,985,856),24278=>array(39,-67,958,843),24279=>array(58,-71,957,834),24280=>array(41,-72,951,840),24281=>array(57,-78,965,840),24282=>array(42,-69,949,837),24283=>array(16,-63,951,837),24284=>array(46,-70,956,841),24285=>array(44,-70,947,837),24286=>array(36,-75,974,842),24287=>array(47,-64,947,833),24288=>array(46,-71,938,827),24289=>array(34,-70,964,836),24290=>array(42,-65,965,820),24291=>array(54,-68,950,837),24292=>array(49,-63,968,857),24293=>array(31,-70,971,841),24294=>array(36,-72,953,840),24295=>array(28,-72,942,843),24296=>array(24,-72,940,832),24297=>array(30,-67,964,837),24298=>array(29,-69,920,838),24299=>array(24,-84,958,842),24300=>array(22,-62,961,846),24301=>array(44,-66,932,853),24302=>array(35,-70,956,845),24303=>array(43,-67,959,840),24304=>array(40,-75,967,832),24305=>array(37,-54,949,838),24306=>array(35,-66,947,836),24307=>array(40,-75,957,832),24308=>array(33,-62,949,743),24309=>array(44,-73,953,804),24310=>array(33,-62,949,824),24311=>array(33,-62,949,825),24312=>array(33,-62,949,825),24313=>array(49,-71,973,852),24314=>array(33,-62,949,826),24315=>array(33,-62,949,790),24316=>array(33,-62,949,790),24317=>array(43,-71,972,788),24318=>array(36,-72,930,822),24319=>array(79,-56,932,818),24320=>array(36,-57,906,780),24321=>array(47,-66,954,848),24322=>array(56,-67,953,785),24323=>array(61,-62,928,830),24324=>array(48,-65,934,785),24325=>array(48,-59,961,794),24326=>array(70,-59,944,814),24327=>array(45,-64,972,863),24328=>array(52,-67,943,839),24329=>array(61,-63,936,829),24330=>array(59,-76,955,833),24331=>array(81,-63,933,824),24332=>array(74,-62,944,834),24333=>array(78,-62,948,834),24334=>array(73,-62,944,834),24335=>array(74,-62,944,834),24336=>array(74,-62,944,834),24337=>array(37,-61,949,826),24338=>array(42,-67,962,841),24339=>array(143,-60,857,788),24340=>array(110,-66,896,778),24341=>array(138,-61,844,826),24342=>array(64,-55,930,779),24343=>array(56,-66,904,838),24344=>array(80,-63,945,819),24345=>array(77,-71,956,788),24346=>array(61,-68,954,794),24347=>array(80,-63,957,824),24348=>array(92,-66,893,788),24349=>array(65,-57,953,791),24350=>array(77,-66,977,839),24351=>array(69,-64,902,843),24352=>array(62,-66,943,803),24353=>array(80,-63,951,790),24354=>array(76,-65,981,831),24355=>array(63,-55,949,847),24356=>array(63,-68,954,838),24357=>array(70,-63,955,836),24358=>array(80,-65,961,819),24359=>array(68,-63,958,838),24360=>array(72,-68,909,786),24361=>array(63,-63,952,836),24362=>array(67,-60,920,764),24363=>array(62,-63,953,776),24364=>array(62,-63,953,776),24365=>array(76,-65,941,790),24366=>array(47,-64,956,832),24367=>array(55,-75,946,830),24368=>array(83,-65,912,824),24369=>array(56,-65,917,787),24370=>array(80,-63,911,782),24371=>array(62,-56,936,774),24372=>array(80,-63,944,828),24373=>array(68,-64,962,799),24374=>array(77,-59,971,850),24375=>array(70,-63,955,833),24376=>array(63,-66,901,787),24377=>array(56,-59,918,836),24378=>array(63,-74,940,766),24379=>array(89,-62,927,790),24380=>array(63,-63,939,787),24381=>array(89,-62,968,832),24382=>array(68,-63,952,835),24383=>array(54,-48,976,874),24384=>array(57,-68,975,838),24385=>array(70,-65,944,797),24386=>array(80,-58,890,829),24387=>array(75,-67,961,785),24388=>array(69,-63,951,788),24389=>array(62,-67,964,847),24390=>array(91,-48,944,855),24391=>array(68,-76,926,837),24392=>array(70,-69,948,798),24393=>array(68,-67,962,831),24394=>array(66,-63,946,806),24395=>array(73,-82,969,780),24396=>array(49,-65,951,790),24397=>array(81,-74,959,846),24398=>array(52,-67,955,849),24399=>array(68,-70,967,786),24400=>array(167,-4,786,670),24401=>array(62,-37,941,804),24402=>array(27,-62,861,832),24403=>array(123,-60,878,830),24404=>array(67,-57,941,848),24405=>array(71,-61,965,789),24406=>array(59,-58,964,834),24407=>array(50,-75,951,834),24408=>array(53,-68,958,841),24409=>array(30,-72,965,841),24410=>array(30,-52,965,810),24411=>array(40,-61,956,825),24412=>array(40,-61,962,848),24413=>array(54,-71,956,851),24414=>array(40,-61,956,818),24415=>array(52,-57,978,840),24416=>array(68,-60,978,841),24417=>array(294,-59,800,804),24418=>array(59,-67,955,828),24419=>array(37,-66,949,821),24420=>array(53,-68,951,838),24421=>array(44,-67,926,852),24422=>array(33,-67,921,831),24423=>array(57,-61,956,832),24424=>array(52,-40,964,781),24425=>array(43,-62,958,828),24426=>array(20,-69,956,832),24427=>array(41,-65,963,844),24428=>array(47,-64,952,830),24429=>array(62,-65,957,828),24430=>array(51,-62,949,850),24431=>array(55,-74,961,823),24432=>array(47,-74,955,832),24433=>array(47,-68,961,829),24434=>array(36,-68,961,829),24435=>array(178,-67,756,826),24436=>array(58,-69,920,830),24437=>array(58,-66,945,830),24438=>array(49,-65,968,842),24439=>array(41,-73,942,840),24440=>array(52,-64,959,840),24441=>array(38,-70,963,833),24442=>array(58,-66,936,830),24443=>array(40,-66,911,820),24444=>array(51,-73,961,838),24445=>array(46,-70,962,836),24446=>array(41,-68,957,837),24447=>array(34,-66,915,838),24448=>array(47,-61,937,836),24449=>array(33,-70,954,836),24450=>array(44,-65,952,841),24451=>array(56,-65,952,841),24452=>array(45,-66,968,832),24453=>array(37,-67,947,841),24454=>array(57,-70,942,834),24455=>array(54,-64,923,842),24456=>array(37,-70,950,834),24457=>array(39,-68,948,843),24458=>array(61,-65,914,833),24459=>array(36,-67,954,830),24460=>array(42,-67,953,841),24461=>array(44,-65,931,842),24462=>array(44,-65,938,841),24463=>array(44,-65,945,841),24464=>array(35,-70,963,836),24465=>array(50,-74,956,838),24466=>array(48,-73,961,838),24467=>array(48,-73,961,838),24468=>array(56,-68,955,835),24469=>array(39,-63,941,834),24470=>array(49,-70,957,838),24471=>array(50,-70,947,833),24472=>array(36,-68,955,836),24473=>array(40,-64,970,833),24474=>array(59,-68,964,835),24475=>array(53,-68,956,834),24476=>array(44,-68,933,835),24477=>array(56,-68,930,835),24478=>array(49,-71,966,838),24479=>array(55,-73,900,835),24480=>array(39,-65,972,837),24481=>array(37,-62,917,835),24482=>array(44,-75,963,835),24483=>array(44,-68,953,835),24484=>array(44,-71,964,835),24485=>array(42,-68,963,827),24486=>array(40,-73,967,821),24487=>array(35,-65,910,833),24488=>array(46,-67,953,848),24489=>array(44,-67,970,843),24490=>array(40,-67,941,840),24491=>array(49,-62,954,837),24492=>array(46,-65,953,850),24493=>array(45,-67,956,852),24494=>array(35,-76,964,833),24495=>array(46,-64,973,837),24496=>array(44,-68,945,835),24497=>array(47,-68,954,835),24498=>array(41,-72,962,820),24499=>array(35,-70,958,838),24500=>array(31,-71,973,834),24501=>array(31,-71,973,834),24502=>array(48,-70,973,832),24503=>array(35,-70,960,838),24504=>array(26,-68,957,850),24505=>array(47,-70,951,830),24506=>array(56,-74,947,837),24507=>array(53,-68,972,845),24508=>array(31,-70,966,848),24509=>array(31,-67,961,836),24510=>array(39,-72,974,830),24511=>array(18,-62,965,842),24512=>array(28,-70,976,844),24513=>array(40,-70,967,834),24514=>array(43,-66,957,840),24515=>array(41,-17,958,801),24516=>array(300,-62,695,829),24517=>array(52,-8,960,796),24518=>array(41,-73,935,819),24519=>array(63,-66,874,833),24520=>array(46,-20,954,772),24521=>array(63,-69,903,830),24522=>array(51,-63,933,830),24523=>array(63,-63,957,830),24524=>array(47,-29,946,785),24525=>array(39,-31,961,773),24526=>array(46,-20,954,831),24527=>array(55,-59,950,839),24528=>array(45,-23,963,832),24529=>array(50,-21,968,774),24530=>array(43,-60,962,830),24531=>array(46,-67,963,832),24532=>array(42,-64,948,834),24533=>array(52,-73,958,825),24534=>array(46,-67,954,832),24535=>array(46,-20,954,826),24536=>array(49,-19,951,832),24537=>array(49,-64,935,830),24538=>array(37,-64,945,830),24539=>array(69,-76,948,820),24540=>array(46,-59,961,837),24541=>array(42,-64,956,841),24542=>array(59,-42,945,829),24543=>array(50,-60,977,851),24544=>array(56,-14,976,841),24545=>array(56,-67,912,830),24546=>array(45,-22,967,783),24547=>array(40,-67,971,833),24548=>array(43,-65,956,834),24549=>array(41,-65,962,849),24550=>array(48,-75,982,850),24551=>array(48,-74,928,821),24552=>array(36,-68,949,833),24553=>array(60,-25,978,806),24554=>array(53,-67,962,829),24555=>array(50,-73,964,837),24556=>array(30,-57,941,852),24557=>array(51,-68,964,849),24558=>array(46,-69,979,829),24559=>array(46,-65,958,839),24560=>array(37,-63,954,844),24561=>array(36,-65,956,838),24562=>array(23,-66,944,854),24563=>array(35,-64,953,835),24564=>array(48,-65,975,840),24565=>array(30,-58,963,846),24566=>array(46,-69,958,832),24567=>array(44,-71,907,835),24568=>array(30,-67,953,830),24569=>array(46,-67,948,832),24570=>array(47,-75,963,836),24571=>array(43,-68,945,829),24572=>array(46,-67,957,843),24573=>array(63,-32,953,845),24574=>array(38,-60,954,829),24575=>array(41,-21,951,810),24576=>array(55,-67,959,830),24577=>array(36,-44,937,807),24578=>array(41,-20,943,831),24579=>array(35,-72,929,824),24580=>array(46,-63,924,828),24581=>array(40,-71,942,821),24582=>array(44,-67,936,827),24583=>array(56,-67,946,824),24584=>array(43,-67,954,830),24585=>array(41,-60,947,839),24586=>array(52,-67,900,836),24587=>array(47,-70,954,830),24588=>array(45,-70,951,824),24589=>array(61,-71,971,833),24590=>array(59,-29,954,846),24591=>array(35,-69,968,832),24592=>array(52,-66,908,839),24593=>array(44,-70,937,835),24594=>array(49,-25,959,830),24595=>array(45,-71,959,826),24596=>array(44,-57,953,843),24597=>array(61,-64,922,855),24598=>array(22,-58,929,850),24599=>array(47,-69,957,825),24600=>array(29,-25,970,854),24601=>array(47,-67,950,832),24602=>array(37,-51,951,840),24603=>array(47,-68,953,829),24604=>array(39,-68,962,840),24605=>array(54,-23,935,780),24606=>array(47,-71,899,836),24607=>array(47,-67,953,836),24608=>array(50,-22,968,848),24609=>array(48,-66,947,832),24610=>array(50,-68,967,829),24611=>array(63,-24,965,805),24612=>array(63,-26,965,826),24613=>array(43,-24,947,842),24614=>array(41,-69,956,830),24615=>array(54,-68,951,827),24616=>array(53,-19,964,849),24617=>array(32,-68,955,830),24618=>array(45,-58,976,843),24619=>array(44,-68,933,832),24620=>array(59,-58,903,829),24621=>array(38,-66,957,830),24622=>array(50,-73,915,831),24623=>array(38,-65,951,835),24624=>array(45,-65,961,844),24625=>array(40,-57,969,822),24626=>array(38,-66,948,833),24627=>array(43,-54,969,845),24628=>array(38,-74,942,832),24629=>array(49,-67,959,830),24630=>array(32,-71,978,832),24631=>array(64,-32,957,823),24632=>array(64,-31,957,823),24633=>array(39,-28,954,841),24634=>array(35,-63,964,844),24635=>array(63,-22,938,829),24636=>array(45,-26,934,823),24637=>array(44,-61,971,843),24638=>array(23,-57,933,843),24639=>array(33,-63,946,825),24640=>array(45,-63,941,852),24641=>array(37,-25,945,843),24642=>array(57,-69,914,837),24643=>array(37,-68,947,832),24644=>array(57,-70,922,826),24645=>array(55,-68,941,826),24646=>array(49,-70,955,821),24647=>array(29,-57,963,835),24648=>array(23,-62,929,849),24649=>array(51,-48,938,847),24650=>array(27,-65,924,834),24651=>array(54,-32,945,831),24652=>array(58,-71,954,832),24653=>array(49,-69,963,836),24654=>array(23,-57,950,843),24655=>array(48,-27,949,843),24656=>array(49,-27,947,777),24657=>array(23,-71,956,845),24658=>array(35,-59,955,849),24659=>array(34,-62,938,834),24660=>array(42,-53,957,859),24661=>array(57,-17,967,844),24662=>array(42,-41,960,846),24663=>array(23,-58,966,843),24664=>array(69,-69,967,833),24665=>array(49,-49,954,849),24666=>array(44,-52,954,836),24667=>array(54,-68,893,829),24668=>array(23,-59,964,843),24669=>array(47,-48,950,805),24670=>array(60,-74,948,828),24671=>array(43,-55,924,848),24672=>array(45,-84,963,834),24673=>array(52,-70,937,821),24674=>array(36,-62,959,832),24675=>array(41,-22,946,842),24676=>array(31,-65,964,836),24677=>array(38,-65,970,814),24678=>array(59,-71,894,826),24679=>array(45,-45,982,759),24680=>array(45,-70,957,825),24681=>array(46,-40,965,796),24682=>array(38,-66,966,839),24683=>array(52,-57,923,841),24684=>array(28,-67,944,830),24685=>array(43,-62,968,836),24686=>array(56,-66,958,828),24687=>array(43,-25,949,843),24688=>array(54,-65,982,847),24689=>array(41,-65,961,837),24690=>array(60,-70,956,829),24691=>array(37,-42,924,768),24692=>array(53,-28,946,863),24693=>array(47,-28,942,846),24694=>array(46,-16,935,783),24695=>array(51,-35,942,805),24696=>array(35,-68,892,825),24697=>array(23,-75,941,823),24698=>array(50,-62,928,826),24699=>array(39,-63,878,827),24700=>array(39,-64,937,832),24701=>array(38,-66,915,823),24702=>array(38,-55,933,832),24703=>array(59,-22,976,798),24704=>array(53,-67,900,829),24705=>array(55,-64,900,830),24706=>array(26,-67,927,828),24707=>array(37,-67,907,827),24708=>array(55,-61,934,846),24709=>array(45,-66,968,842),24710=>array(44,-35,967,838),24711=>array(42,-62,968,834),24712=>array(45,-66,949,835),24713=>array(33,-31,959,832),24714=>array(51,-38,958,822),24715=>array(46,-72,954,825),24716=>array(42,-66,937,848),24717=>array(49,-63,955,844),24718=>array(57,-62,939,834),24719=>array(57,-73,964,835),24720=>array(56,-39,962,829),24721=>array(45,-68,941,833),24722=>array(46,-67,958,830),24723=>array(44,-61,944,833),24724=>array(31,-62,955,848),24725=>array(46,-67,951,847),24726=>array(31,-66,949,834),24727=>array(43,-63,960,852),24728=>array(42,-41,960,802),24729=>array(43,-67,951,852),24730=>array(43,-66,971,835),24731=>array(11,-69,953,849),24732=>array(48,-64,960,830),24733=>array(47,-68,961,826),24734=>array(41,-55,968,837),24735=>array(43,-67,945,821),24736=>array(29,-35,957,839),24737=>array(39,-43,953,830),24738=>array(40,-68,960,833),24739=>array(52,-58,958,832),24740=>array(39,-58,958,866),24741=>array(52,-58,958,869),24742=>array(22,-66,960,844),24743=>array(22,-66,918,842),24744=>array(49,-23,963,842),24745=>array(40,-64,900,831),24746=>array(62,-25,962,783),24747=>array(52,-32,939,824),24748=>array(37,-16,933,791),24749=>array(32,-62,945,827),24750=>array(45,-74,947,815),24751=>array(29,-61,885,832),24752=>array(52,-67,972,832),24753=>array(39,-72,948,833),24754=>array(43,-38,953,831),24755=>array(40,-47,945,839),24756=>array(37,-62,952,844),24757=>array(48,-67,976,830),24758=>array(127,-62,886,792),24759=>array(50,-67,960,838),24760=>array(30,-67,974,840),24761=>array(62,-36,957,834),24762=>array(62,-67,924,839),24763=>array(46,-65,960,837),24764=>array(21,-62,944,846),24765=>array(36,-78,948,826),24766=>array(34,-57,953,851),24767=>array(46,-63,979,832),24768=>array(45,-64,974,837),24769=>array(37,-28,970,830),24770=>array(52,-67,912,849),24771=>array(51,-74,949,824),24772=>array(38,-28,955,831),24773=>array(19,-66,939,837),24774=>array(31,-68,891,826),24775=>array(43,-67,971,833),24776=>array(52,-70,968,826),24777=>array(48,-26,965,829),24778=>array(27,-60,974,842),24779=>array(29,-61,959,855),24780=>array(52,-31,955,838),24781=>array(43,-74,965,830),24782=>array(41,-27,964,842),24783=>array(34,-64,988,833),24784=>array(32,-66,918,837),24785=>array(50,-20,958,844),24786=>array(42,-41,960,842),24787=>array(31,-72,989,834),24788=>array(52,-68,964,841),24789=>array(49,-58,914,846),24790=>array(26,-38,971,823),24791=>array(50,-51,972,853),24792=>array(43,-67,911,828),24793=>array(38,-52,962,838),24794=>array(41,-65,965,844),24795=>array(40,-53,956,850),24796=>array(47,-73,956,837),24797=>array(45,-71,914,824),24798=>array(47,-72,961,833),24799=>array(23,-61,946,849),24800=>array(56,-28,953,846),24801=>array(62,-25,962,783),24802=>array(39,-31,977,831),24803=>array(53,-43,940,844),24804=>array(44,-69,957,835),24805=>array(35,-32,983,834),24806=>array(47,-62,958,851),24807=>array(46,-68,964,831),24808=>array(35,-75,982,835),24809=>array(23,-32,932,832),24810=>array(37,-23,955,839),24811=>array(37,-47,962,834),24812=>array(40,-65,929,821),24813=>array(20,-53,910,835),24814=>array(31,-60,954,840),24815=>array(23,-64,925,832),24816=>array(44,-66,953,841),24817=>array(43,-65,929,847),24818=>array(46,-68,962,828),24819=>array(43,-47,956,825),24820=>array(45,-67,956,832),24821=>array(43,-71,952,830),24822=>array(49,-57,956,856),24823=>array(41,-51,968,836),24824=>array(49,-70,959,840),24825=>array(46,-37,962,828),24826=>array(39,-58,958,847),24827=>array(60,-64,921,831),24828=>array(53,-70,925,830),24829=>array(40,-54,963,836),24830=>array(47,-68,969,830),24831=>array(59,-69,981,824),24832=>array(29,-71,977,830),24833=>array(28,-51,960,829),24834=>array(28,-51,955,832),24835=>array(52,-61,956,833),24836=>array(51,-88,969,823),24837=>array(58,-70,953,827),24838=>array(44,-29,957,840),24839=>array(47,-70,944,837),24840=>array(29,-62,965,854),24841=>array(30,-73,981,846),24842=>array(30,-57,935,841),24843=>array(49,-73,972,836),24844=>array(47,-68,972,841),24845=>array(65,-49,963,818),24846=>array(34,-69,980,841),24847=>array(43,-48,959,840),24848=>array(40,-72,947,819),24849=>array(55,-58,914,836),24850=>array(46,-53,916,837),24851=>array(30,-56,952,837),24852=>array(55,-73,954,828),24853=>array(40,-67,963,829),24854=>array(38,-58,952,837),24855=>array(30,-45,954,830),24856=>array(47,-70,974,833),24857=>array(28,-54,990,868),24858=>array(38,-45,954,793),24859=>array(72,-65,948,834),24860=>array(38,-68,958,829),24861=>array(49,-62,945,830),24862=>array(51,-72,957,827),24863=>array(47,-29,951,829),24864=>array(31,-74,948,823),24865=>array(19,-74,961,850),24866=>array(37,-74,961,823),24867=>array(48,-68,950,829),24868=>array(27,-64,930,829),24869=>array(48,-68,988,836),24870=>array(53,-70,937,821),24871=>array(28,-61,952,845),24872=>array(52,-49,960,838),24873=>array(55,-77,958,833),24874=>array(48,-68,941,829),24875=>array(38,-67,980,833),24876=>array(43,-60,961,830),24877=>array(57,-74,936,832),24878=>array(60,-71,955,834),24879=>array(56,-72,968,833),24880=>array(57,-74,941,829),24881=>array(45,-74,963,846),24882=>array(58,-67,914,833),24883=>array(28,-23,955,789),24884=>array(30,-67,982,852),24885=>array(52,-70,917,821),24886=>array(60,-58,932,849),24887=>array(37,-68,951,835),24888=>array(44,-33,957,835),24889=>array(52,-76,962,841),24890=>array(49,-68,950,834),24891=>array(62,-40,970,831),24892=>array(49,-66,927,834),24893=>array(40,-66,951,834),24894=>array(32,-63,974,851),24895=>array(43,-52,963,812),24896=>array(47,-71,974,831),24897=>array(62,-38,967,780),24898=>array(42,-50,957,816),24899=>array(44,-72,955,851),24900=>array(38,-59,976,835),24901=>array(55,-75,971,829),24902=>array(50,-54,926,853),24903=>array(40,-42,974,845),24904=>array(38,-48,951,837),24905=>array(50,-72,951,841),24906=>array(35,-72,975,849),24907=>array(50,-48,954,848),24908=>array(41,-68,962,836),24909=>array(48,-72,965,826),24910=>array(41,-69,951,843),24911=>array(60,-78,952,835),24912=>array(47,-51,963,831),24913=>array(48,-65,952,830),24914=>array(46,-72,953,824),24915=>array(39,-68,984,829),24916=>array(48,-71,973,832),24917=>array(51,-63,964,833),24918=>array(53,-74,919,822),24919=>array(15,-43,954,829),24920=>array(29,-76,967,847),24921=>array(38,-58,953,837),24922=>array(37,-63,965,846),24923=>array(38,-68,952,829),24924=>array(47,-44,964,853),24925=>array(41,-58,963,824),24926=>array(20,-58,953,854),24927=>array(52,-74,934,830),24928=>array(36,-76,960,838),24929=>array(40,-73,960,829),24930=>array(38,-69,970,825),24931=>array(40,-68,967,843),24932=>array(52,-49,968,818),24933=>array(39,-66,945,838),24934=>array(39,-36,981,828),24935=>array(49,-52,951,835),24936=>array(28,-70,963,842),24937=>array(40,-67,971,834),24938=>array(40,-68,959,828),24939=>array(42,-50,958,845),24940=>array(47,-64,953,829),24941=>array(44,-33,970,835),24942=>array(45,-77,957,841),24943=>array(40,-68,963,845),24944=>array(55,-21,959,838),24945=>array(39,-65,952,828),24946=>array(48,-65,956,827),24947=>array(37,-68,954,829),24948=>array(54,-66,915,826),24949=>array(37,-65,959,842),24950=>array(50,-67,951,838),24951=>array(39,-57,955,846),24952=>array(57,-31,959,849),24953=>array(57,-31,959,834),24954=>array(32,-75,952,830),24955=>array(41,-76,981,845),24956=>array(36,-29,965,844),24957=>array(35,-63,963,842),24958=>array(38,-25,973,841),24959=>array(70,-32,957,800),24960=>array(51,-70,979,824),24961=>array(45,-65,964,834),24962=>array(55,-60,966,816),24963=>array(38,-39,982,847),24964=>array(37,-45,958,837),24965=>array(58,-51,979,859),24966=>array(33,-69,945,835),24967=>array(47,-29,961,817),24968=>array(45,-72,962,829),24969=>array(42,-73,971,828),24970=>array(42,-70,957,834),24971=>array(48,-28,965,843),24972=>array(39,-36,963,833),24973=>array(28,-60,975,848),24974=>array(38,-73,905,835),24975=>array(46,-61,972,854),24976=>array(36,-76,962,832),24977=>array(42,-58,960,800),24978=>array(36,-70,966,833),24979=>array(43,-61,971,835),24980=>array(25,-67,963,846),24981=>array(43,-61,963,837),24982=>array(25,-60,970,835),24983=>array(29,-60,952,841),24984=>array(52,-70,956,837),24985=>array(37,-47,961,844),24986=>array(42,-63,965,832),24987=>array(42,-72,961,824),24988=>array(45,-62,965,833),24989=>array(53,-52,976,834),24990=>array(23,-75,954,837),24991=>array(32,-68,967,823),24992=>array(31,-47,961,818),24993=>array(48,-70,979,836),24994=>array(17,-87,964,830),24995=>array(29,-70,962,829),24996=>array(36,-72,956,836),24997=>array(40,-47,961,832),24998=>array(52,-70,946,833),24999=>array(38,-68,950,831),25000=>array(50,-33,959,837),25001=>array(43,-29,958,845),25002=>array(36,-68,908,825),25003=>array(51,-55,902,846),25004=>array(46,-68,963,828),25005=>array(34,-58,971,845),25006=>array(38,-71,974,832),25007=>array(45,-59,961,832),25008=>array(44,-62,944,826),25009=>array(47,-71,972,838),25010=>array(42,-38,976,839),25011=>array(36,-70,954,825),25012=>array(35,-65,973,828),25013=>array(49,-39,948,821),25014=>array(32,-68,965,840),25015=>array(38,-66,960,824),25016=>array(32,-66,976,857),25017=>array(41,-65,984,838),25018=>array(43,-67,957,842),25019=>array(43,-67,957,847),25020=>array(45,-32,957,835),25021=>array(48,-56,968,847),25022=>array(38,-71,970,832),25023=>array(33,-78,968,841),25024=>array(37,-72,973,864),25025=>array(37,-79,974,819),25026=>array(46,-58,967,845),25027=>array(38,-66,959,832),25028=>array(29,-69,952,841),25029=>array(31,-85,978,829),25030=>array(42,-62,976,830),25031=>array(48,-26,955,844),25032=>array(29,-63,950,845),25033=>array(39,-68,953,843),25034=>array(18,-68,949,860),25035=>array(42,-58,959,832),25036=>array(44,-63,964,831),25037=>array(38,-68,971,844),25038=>array(53,-68,950,833),25039=>array(49,-70,932,848),25040=>array(40,-71,965,839),25041=>array(53,-26,941,821),25042=>array(30,-63,943,838),25043=>array(48,-69,975,843),25044=>array(33,-70,947,847),25045=>array(36,-59,959,821),25046=>array(51,-41,944,827),25047=>array(25,-69,956,833),25048=>array(53,-52,953,811),25049=>array(60,-71,942,821),25050=>array(33,-71,953,830),25051=>array(37,-71,953,826),25052=>array(37,-71,963,825),25053=>array(49,-71,974,830),25054=>array(41,-59,971,836),25055=>array(46,-44,966,823),25056=>array(38,-70,964,836),25057=>array(38,-69,962,846),25058=>array(43,-73,964,821),25059=>array(46,-62,966,834),25060=>array(38,-69,957,830),25061=>array(44,-70,976,829),25062=>array(48,-59,964,843),25063=>array(44,-68,962,839),25064=>array(36,-71,975,838),25065=>array(34,-56,967,858),25066=>array(41,-70,980,825),25067=>array(47,-73,957,844),25068=>array(29,-55,952,847),25069=>array(51,-85,939,836),25070=>array(47,-73,955,828),25071=>array(48,-41,980,826),25072=>array(47,-65,905,848),25073=>array(47,-71,960,824),25074=>array(32,-42,963,846),25075=>array(26,-56,988,836),25076=>array(27,-68,962,845),25077=>array(41,-68,954,835),25078=>array(32,-72,970,845),25079=>array(43,-69,962,841),25080=>array(46,-32,965,836),25081=>array(29,-67,984,840),25082=>array(27,-67,963,846),25083=>array(30,-80,966,830),25084=>array(29,-65,957,826),25085=>array(42,-68,953,826),25086=>array(43,-66,963,830),25087=>array(43,-55,963,834),25088=>array(42,-54,961,841),25089=>array(39,-44,967,836),25090=>array(40,-72,960,854),25091=>array(42,-78,962,829),25092=>array(34,-57,971,836),25093=>array(39,-36,957,842),25094=>array(59,-29,941,826),25095=>array(39,-36,957,846),25096=>array(90,-52,956,829),25097=>array(73,-64,966,832),25098=>array(65,-64,951,840),25099=>array(74,-70,930,820),25100=>array(51,-57,951,836),25101=>array(64,-67,953,837),25102=>array(50,-66,952,830),25103=>array(42,-68,934,825),25104=>array(50,-72,946,831),25105=>array(61,-60,933,832),25106=>array(61,-64,955,838),25107=>array(70,-66,956,838),25108=>array(85,-58,935,840),25109=>array(44,-68,961,829),25110=>array(70,-58,956,838),25111=>array(32,-74,938,826),25112=>array(100,-69,937,829),25113=>array(102,-67,957,823),25114=>array(65,-60,962,836),25115=>array(81,-57,949,788),25116=>array(67,-67,953,838),25117=>array(63,-74,946,834),25118=>array(77,-49,935,796),25119=>array(51,-65,946,834),25120=>array(68,-69,968,839),25121=>array(33,-72,939,836),25122=>array(43,-64,954,830),25123=>array(45,-71,964,832),25124=>array(33,-65,958,828),25125=>array(52,-59,956,832),25126=>array(35,-73,947,833),25127=>array(43,-64,970,848),25128=>array(65,-65,956,829),25129=>array(52,-65,956,829),25130=>array(54,-61,959,837),25131=>array(36,-63,964,829),25132=>array(52,-61,947,815),25133=>array(42,-70,958,844),25134=>array(39,-77,962,835),25135=>array(52,-68,956,837),25136=>array(56,-73,947,832),25137=>array(41,-65,949,834),25138=>array(52,-68,958,835),25139=>array(24,-62,946,836),25140=>array(43,-63,938,834),25141=>array(50,-65,958,827),25142=>array(69,-64,882,838),25143=>array(53,-66,849,842),25144=>array(57,-64,918,764),25145=>array(45,-71,939,836),25146=>array(51,-59,963,831),25147=>array(39,-68,947,799),25148=>array(89,-72,914,783),25149=>array(57,-67,954,841),25150=>array(44,-71,941,837),25151=>array(40,-66,938,804),25152=>array(42,-70,959,841),25153=>array(43,-70,908,796),25154=>array(61,-65,906,826),25155=>array(45,-64,898,853),25156=>array(38,-68,899,843),25157=>array(38,-68,901,847),25158=>array(38,-68,983,850),25159=>array(35,-67,896,811),25160=>array(28,-68,961,802),25161=>array(28,-77,947,810),25162=>array(52,-72,962,836),25163=>array(85,-68,913,833),25164=>array(266,-62,684,829),25165=>array(64,-62,916,835),25166=>array(53,-61,943,828),25167=>array(56,-61,960,828),25168=>array(66,-71,909,829),25169=>array(53,-48,964,849),25170=>array(45,-65,955,830),25171=>array(54,-62,934,830),25172=>array(66,-67,919,829),25173=>array(43,-61,953,828),25174=>array(80,-61,957,828),25175=>array(53,-61,945,829),25176=>array(55,-69,930,826),25177=>array(61,-69,968,830),25178=>array(58,-67,918,831),25179=>array(44,-64,934,829),25180=>array(59,-65,958,830),25181=>array(39,-61,944,828),25182=>array(48,-53,951,841),25183=>array(39,-65,958,828),25184=>array(38,-56,959,837),25185=>array(48,-57,958,836),25186=>array(47,-63,950,836),25187=>array(71,-68,893,830),25188=>array(53,-68,947,832),25189=>array(53,-66,960,827),25190=>array(46,-64,947,832),25191=>array(25,-67,945,825),25192=>array(42,-61,964,826),25193=>array(42,-63,922,826),25194=>array(29,-65,882,826),25195=>array(44,-62,885,830),25196=>array(55,-65,889,831),25197=>array(39,-53,947,841),25198=>array(49,-64,963,820),25199=>array(52,-57,945,830),25200=>array(50,-66,958,832),25201=>array(41,-51,962,840),25202=>array(59,-68,973,839),25203=>array(45,-78,963,826),25204=>array(68,-66,964,832),25205=>array(42,-55,975,845),25206=>array(50,-72,962,833),25207=>array(50,-67,968,832),25208=>array(78,-58,907,839),25209=>array(45,-72,961,823),25210=>array(42,-55,963,853),25211=>array(48,-69,963,840),25212=>array(50,-69,950,829),25213=>array(50,-67,960,828),25214=>array(63,-68,950,825),25215=>array(33,-67,965,785),25216=>array(37,-74,952,824),25217=>array(50,-64,949,844),25218=>array(63,-55,948,839),25219=>array(62,-59,958,831),25220=>array(39,-63,960,829),25221=>array(31,-55,921,840),25222=>array(37,-57,974,851),25223=>array(57,-63,897,832),25224=>array(56,-66,903,829),25225=>array(53,-64,961,837),25226=>array(40,-62,941,833),25227=>array(42,-55,967,839),25228=>array(61,-58,962,838),25229=>array(42,-65,969,839),25230=>array(51,-71,954,826),25231=>array(56,-70,957,826),25232=>array(58,-66,895,835),25233=>array(47,-69,905,834),25234=>array(57,-58,941,833),25235=>array(40,-69,959,829),25236=>array(57,-52,969,839),25237=>array(56,-66,963,821),25238=>array(52,-64,947,828),25239=>array(46,-63,959,829),25240=>array(61,-68,938,834),25241=>array(48,-67,939,839),25242=>array(31,-60,935,829),25243=>array(28,-78,930,821),25244=>array(51,-77,950,835),25245=>array(55,-55,907,853),25246=>array(42,-56,958,839),25247=>array(37,-66,914,823),25248=>array(36,-54,912,832),25249=>array(36,-56,948,832),25250=>array(38,-71,950,828),25251=>array(46,-63,920,830),25252=>array(27,-66,872,828),25253=>array(49,-69,946,820),25254=>array(54,-52,950,838),25255=>array(93,-57,957,833),25256=>array(41,-65,943,827),25257=>array(50,-66,953,828),25258=>array(39,-65,941,838),25259=>array(45,-71,978,832),25260=>array(44,-70,953,839),25261=>array(44,-60,954,830),25262=>array(51,-62,952,845),25263=>array(45,-62,951,827),25264=>array(44,-69,956,833),25265=>array(50,-61,955,840),25266=>array(56,-70,953,821),25267=>array(50,-74,955,828),25268=>array(49,-67,951,828),25269=>array(43,-64,957,831),25270=>array(50,-70,965,827),25271=>array(45,-56,951,823),25272=>array(58,-67,969,831),25273=>array(61,-67,962,835),25274=>array(61,-65,942,832),25275=>array(43,-68,905,836),25276=>array(73,-66,908,828),25277=>array(62,-67,899,836),25278=>array(52,-60,960,839),25279=>array(48,-64,956,828),25280=>array(61,-64,972,832),25281=>array(61,-64,928,832),25282=>array(53,-69,931,816),25283=>array(57,-62,944,841),25284=>array(48,-68,951,836),25285=>array(44,-60,953,836),25286=>array(53,-62,935,838),25287=>array(37,-68,953,825),25288=>array(50,-67,947,829),25289=>array(49,-64,947,829),25290=>array(52,-62,959,841),25291=>array(44,-73,948,825),25292=>array(48,-64,942,828),25293=>array(73,-64,904,851),25294=>array(42,-68,970,851),25295=>array(60,-58,974,851),25296=>array(49,-64,910,826),25297=>array(63,-67,959,826),25298=>array(39,-68,944,832),25299=>array(53,-63,936,826),25300=>array(40,-77,954,835),25301=>array(74,-64,944,831),25302=>array(43,-62,954,839),25303=>array(61,-73,920,832),25304=>array(65,-61,909,849),25305=>array(60,-63,912,832),25306=>array(52,-75,950,845),25307=>array(69,-67,913,820),25308=>array(47,-79,956,829),25309=>array(44,-66,946,835),25310=>array(70,-64,943,832),25311=>array(41,-61,937,830),25312=>array(55,-61,956,832),25313=>array(36,-66,949,832),25314=>array(31,-52,961,837),25315=>array(29,-61,932,835),25316=>array(57,-68,938,832),25317=>array(40,-72,893,824),25318=>array(38,-55,923,830),25319=>array(40,-61,918,836),25320=>array(38,-74,925,820),25321=>array(30,-64,942,826),25322=>array(61,-63,935,832),25323=>array(54,-66,967,829),25324=>array(39,-70,952,835),25325=>array(43,-70,964,827),25326=>array(45,-67,957,828),25327=>array(37,-71,964,823),25328=>array(58,-72,951,823),25329=>array(35,-69,953,826),25330=>array(36,-65,977,828),25331=>array(38,-67,965,838),25332=>array(33,-64,960,829),25333=>array(60,-68,959,830),25334=>array(46,-64,945,839),25335=>array(41,-65,952,833),25336=>array(60,-75,940,833),25337=>array(54,-71,928,826),25338=>array(55,-65,953,832),25339=>array(56,-80,958,822),25340=>array(48,-70,949,839),25341=>array(44,-64,961,836),25342=>array(45,-63,961,848),25343=>array(38,-70,969,862),25344=>array(62,-81,950,819),25345=>array(39,-64,944,834),25346=>array(36,-49,951,844),25347=>array(56,-52,951,830),25348=>array(60,-66,942,844),25349=>array(60,-62,952,832),25350=>array(78,-62,976,844),25351=>array(52,-68,937,829),25352=>array(54,-62,951,835),25353=>array(57,-67,948,832),25354=>array(41,-66,946,844),25355=>array(57,-50,953,827),25356=>array(49,-65,987,846),25357=>array(46,-51,974,859),25358=>array(48,-65,963,839),25359=>array(60,-74,911,815),25360=>array(63,-51,959,855),25361=>array(47,-75,950,825),25362=>array(60,-78,927,823),25363=>array(44,-64,959,834),25364=>array(52,-64,964,829),25365=>array(66,-70,957,817),25366=>array(38,-65,943,846),25367=>array(60,-62,963,844),25368=>array(49,-67,950,835),25369=>array(19,-68,951,835),25370=>array(54,-68,942,824),25371=>array(42,-60,920,845),25372=>array(60,-50,954,844),25373=>array(25,-62,945,831),25374=>array(34,-60,942,830),25375=>array(26,-64,948,832),25376=>array(42,-64,930,825),25377=>array(35,-62,883,826),25378=>array(36,-64,948,826),25379=>array(36,-66,923,832),25380=>array(37,-61,938,834),25381=>array(33,-59,911,832),25382=>array(61,-61,936,832),25383=>array(60,-53,909,844),25384=>array(42,-69,965,834),25385=>array(46,-66,956,829),25386=>array(47,-73,950,822),25387=>array(51,-71,948,829),25388=>array(56,-59,953,835),25389=>array(53,-60,969,836),25390=>array(60,-67,926,844),25391=>array(45,-74,963,821),25392=>array(60,-49,950,838),25393=>array(60,-60,969,832),25394=>array(56,-63,952,839),25395=>array(53,-66,949,827),25396=>array(40,-64,947,828),25397=>array(38,-51,951,841),25398=>array(36,-56,916,841),25399=>array(39,-68,950,836),25400=>array(56,-72,947,829),25401=>array(36,-68,956,823),25402=>array(44,-66,964,824),25403=>array(52,-73,956,826),25404=>array(41,-56,944,858),25405=>array(44,-69,965,840),25406=>array(47,-70,964,835),25407=>array(60,-52,939,844),25408=>array(60,-64,969,831),25409=>array(50,-68,932,828),25410=>array(43,-72,952,823),25411=>array(51,-65,966,833),25412=>array(59,-65,952,832),25413=>array(62,-70,915,825),25414=>array(53,-69,915,826),25415=>array(56,-69,958,829),25416=>array(43,-59,965,832),25417=>array(35,-72,953,821),25418=>array(53,-63,953,832),25419=>array(48,-67,952,826),25420=>array(45,-71,909,825),25421=>array(38,-68,951,826),25422=>array(52,-65,919,835),25423=>array(56,-67,956,828),25424=>array(55,-67,903,823),25425=>array(56,-73,958,831),25426=>array(67,-65,955,835),25427=>array(64,-67,958,829),25428=>array(76,-65,912,829),25429=>array(39,-69,950,832),25430=>array(46,-69,950,834),25431=>array(58,-64,966,827),25432=>array(65,-65,979,836),25433=>array(59,-65,954,829),25434=>array(67,-63,956,829),25435=>array(67,-63,915,829),25436=>array(44,-78,963,829),25437=>array(67,-61,968,829),25438=>array(44,-63,914,832),25439=>array(32,-64,937,827),25440=>array(50,-64,931,829),25441=>array(31,-63,931,830),25442=>array(25,-73,948,825),25443=>array(49,-62,900,836),25444=>array(66,-67,951,824),25445=>array(58,-70,961,852),25446=>array(73,-52,966,835),25447=>array(36,-74,967,834),25448=>array(43,-68,969,845),25449=>array(27,-66,959,826),25450=>array(67,-65,960,833),25451=>array(54,-63,904,832),25452=>array(37,-60,949,849),25453=>array(37,-65,947,846),25454=>array(37,-54,943,838),25455=>array(56,-64,914,830),25456=>array(50,-64,974,832),25457=>array(50,-71,967,842),25458=>array(36,-56,967,835),25459=>array(53,-58,951,833),25460=>array(67,-61,962,829),25461=>array(41,-54,950,843),25462=>array(30,-71,933,833),25463=>array(40,-75,963,833),25464=>array(54,-69,959,824),25465=>array(67,-72,957,829),25466=>array(23,-61,963,847),25467=>array(27,-64,961,853),25468=>array(53,-59,967,840),25469=>array(51,-51,953,854),25470=>array(67,-64,939,845),25471=>array(67,-63,938,835),25472=>array(45,-72,961,833),25473=>array(53,-71,968,832),25474=>array(56,-74,938,840),25475=>array(44,-65,922,829),25476=>array(38,-65,974,853),25477=>array(46,-65,959,836),25478=>array(67,-65,906,829),25479=>array(41,-67,975,827),25480=>array(52,-69,964,832),25481=>array(46,-71,944,825),25482=>array(48,-65,959,845),25483=>array(67,-69,966,839),25484=>array(79,-61,932,835),25485=>array(51,-69,960,827),25486=>array(45,-63,966,842),25487=>array(62,-69,921,841),25488=>array(61,-65,908,842),25489=>array(50,-73,953,835),25490=>array(41,-69,951,831),25491=>array(41,-71,958,832),25492=>array(73,-69,951,788),25493=>array(40,-72,971,820),25494=>array(40,-74,963,820),25495=>array(38,-65,965,842),25496=>array(49,-76,911,829),25497=>array(40,-66,952,828),25498=>array(40,-69,942,820),25499=>array(38,-65,968,829),25500=>array(48,-70,957,832),25501=>array(53,-70,951,827),25502=>array(45,-52,971,852),25503=>array(34,-60,966,837),25504=>array(41,-71,955,826),25505=>array(39,-58,975,848),25506=>array(39,-69,966,824),25507=>array(45,-71,942,827),25508=>array(49,-69,898,829),25509=>array(43,-71,950,828),25510=>array(40,-69,911,820),25511=>array(36,-65,945,828),25512=>array(52,-68,955,836),25513=>array(41,-68,966,839),25514=>array(49,-72,948,824),25515=>array(41,-51,968,841),25516=>array(50,-62,914,844),25517=>array(46,-59,988,832),25518=>array(55,-68,951,836),25519=>array(38,-67,951,832),25520=>array(54,-52,954,826),25521=>array(83,-67,944,831),25522=>array(73,-71,924,818),25523=>array(31,-65,909,832),25524=>array(37,-60,904,830),25525=>array(40,-72,977,828),25526=>array(40,-71,956,856),25527=>array(22,-70,923,824),25528=>array(41,-63,917,837),25529=>array(65,-59,954,825),25530=>array(54,-62,942,835),25531=>array(28,-65,973,826),25532=>array(30,-64,921,829),25533=>array(42,-60,947,854),25534=>array(49,-63,975,839),25535=>array(40,-72,948,836),25536=>array(37,-65,965,835),25537=>array(59,-74,962,821),25538=>array(61,-68,955,839),25539=>array(43,-68,950,837),25540=>array(39,-64,973,831),25541=>array(40,-69,941,785),25542=>array(46,-67,954,835),25543=>array(50,-67,947,829),25544=>array(53,-72,899,823),25545=>array(46,-69,964,826),25546=>array(55,-70,952,828),25547=>array(50,-74,972,828),25548=>array(57,-70,971,821),25549=>array(36,-66,968,845),25550=>array(47,-59,965,851),25551=>array(53,-69,955,828),25552=>array(48,-72,969,826),25553=>array(55,-72,954,820),25554=>array(48,-71,940,836),25555=>array(57,-68,962,828),25556=>array(33,-50,972,850),25557=>array(54,-64,949,828),25558=>array(37,-67,948,829),25559=>array(51,-72,957,832),25560=>array(53,-71,951,838),25561=>array(62,-69,920,832),25562=>array(46,-77,944,820),25563=>array(40,-65,971,838),25564=>array(36,-60,975,862),25565=>array(53,-69,977,829),25566=>array(35,-72,912,831),25567=>array(57,-74,964,823),25568=>array(41,-63,953,829),25569=>array(54,-62,943,830),25570=>array(40,-72,960,849),25571=>array(37,-63,954,836),25572=>array(57,-64,901,830),25573=>array(55,-67,943,838),25574=>array(44,-67,903,831),25575=>array(43,-68,949,831),25576=>array(49,-69,941,833),25577=>array(50,-68,949,830),25578=>array(34,-66,964,829),25579=>array(66,-51,969,851),25580=>array(40,-69,960,836),25581=>array(73,-71,924,818),25582=>array(56,-68,945,825),25583=>array(56,-68,956,825),25584=>array(53,-62,954,830),25585=>array(67,-70,941,833),25586=>array(38,-53,971,843),25587=>array(53,-73,961,827),25588=>array(61,-69,969,830),25589=>array(38,-66,959,823),25590=>array(34,-64,945,829),25591=>array(48,-70,940,826),25592=>array(28,-57,971,836),25593=>array(48,-63,953,827),25594=>array(39,-76,937,819),25595=>array(35,-66,971,829),25596=>array(49,-61,974,833),25597=>array(32,-60,930,833),25598=>array(40,-72,967,820),25599=>array(35,-68,938,825),25600=>array(43,-63,939,829),25601=>array(42,-73,897,824),25602=>array(35,-53,943,837),25603=>array(95,-59,950,822),25604=>array(50,-59,960,849),25605=>array(34,-63,926,837),25606=>array(39,-68,958,836),25607=>array(45,-64,971,842),25608=>array(52,-72,962,837),25609=>array(39,-58,957,851),25610=>array(53,-62,909,836),25611=>array(53,-75,968,828),25612=>array(53,-75,968,827),25613=>array(51,-70,956,822),25614=>array(61,-68,961,828),25615=>array(50,-66,945,832),25616=>array(50,-75,950,843),25617=>array(43,-67,954,829),25618=>array(53,-57,962,853),25619=>array(27,-66,933,843),25620=>array(28,-65,950,826),25621=>array(51,-61,954,826),25622=>array(42,-64,945,845),25623=>array(66,-60,921,844),25624=>array(47,-50,955,847),25625=>array(43,-64,953,829),25626=>array(55,-64,934,838),25627=>array(49,-70,953,838),25628=>array(44,-78,963,832),25629=>array(67,-67,971,843),25630=>array(60,-67,940,842),25631=>array(48,-72,952,823),25632=>array(56,-70,915,835),25633=>array(35,-67,964,829),25634=>array(43,-65,958,833),25635=>array(44,-72,968,831),25636=>array(41,-50,954,859),25637=>array(44,-55,967,857),25638=>array(52,-64,917,828),25639=>array(56,-71,923,838),25640=>array(59,-64,918,827),25641=>array(43,-65,969,838),25642=>array(46,-70,948,843),25643=>array(50,-64,957,842),25644=>array(38,-71,976,838),25645=>array(40,-71,966,830),25646=>array(56,-70,975,826),25647=>array(43,-70,920,838),25648=>array(56,-68,916,827),25649=>array(67,-71,928,829),25650=>array(38,-66,960,844),25651=>array(47,-70,948,836),25652=>array(36,-59,981,845),25653=>array(49,-67,965,826),25654=>array(37,-66,970,849),25655=>array(58,-72,961,836),25656=>array(43,-68,973,839),25657=>array(55,-65,952,825),25658=>array(39,-77,947,839),25659=>array(38,-64,969,862),25660=>array(43,-69,970,839),25661=>array(40,-65,965,830),25662=>array(42,-61,952,837),25663=>array(52,-57,955,822),25664=>array(56,-69,945,842),25665=>array(65,-62,955,826),25666=>array(47,-58,951,835),25667=>array(35,-55,954,837),25668=>array(47,-60,960,835),25669=>array(38,-63,967,830),25670=>array(31,-63,934,834),25671=>array(28,-76,914,819),25672=>array(43,-64,932,844),25673=>array(52,-64,975,841),25674=>array(38,-66,922,830),25675=>array(45,-73,967,835),25676=>array(55,-71,942,847),25677=>array(58,-71,950,832),25678=>array(55,-70,968,826),25679=>array(52,-64,976,835),25680=>array(50,-66,974,832),25681=>array(56,-68,927,827),25682=>array(43,-69,955,830),25683=>array(51,-66,965,829),25684=>array(40,-66,958,846),25685=>array(43,-68,960,829),25686=>array(43,-63,968,841),25687=>array(33,-69,978,837),25688=>array(45,-73,948,825),25689=>array(55,-71,974,827),25690=>array(49,-59,945,833),25691=>array(44,-51,945,855),25692=>array(35,-73,955,827),25693=>array(53,-70,956,838),25694=>array(56,-68,953,826),25695=>array(41,-75,942,831),25696=>array(53,-67,964,831),25697=>array(47,-70,965,830),25698=>array(53,-70,938,836),25699=>array(43,-64,953,841),25700=>array(37,-59,946,839),25701=>array(52,-68,949,835),25702=>array(47,-76,978,832),25703=>array(41,-68,953,833),25704=>array(39,-72,954,827),25705=>array(37,-63,940,838),25706=>array(43,-66,984,843),25707=>array(51,-66,958,830),25708=>array(57,-72,961,837),25709=>array(42,-67,962,851),25710=>array(54,-70,971,839),25711=>array(56,-67,952,833),25712=>array(50,-70,974,832),25713=>array(53,-68,975,822),25714=>array(51,-67,955,828),25715=>array(37,-67,951,824),25716=>array(30,-56,948,836),25717=>array(50,-70,959,828),25718=>array(38,-63,959,839),25719=>array(52,-67,970,838),25720=>array(45,-72,971,823),25721=>array(53,-65,965,835),25722=>array(53,-64,910,830),25723=>array(34,-78,966,849),25724=>array(51,-66,956,826),25725=>array(31,-54,948,839),25726=>array(40,-64,959,828),25727=>array(55,-70,964,843),25728=>array(60,-54,946,833),25729=>array(43,-68,957,847),25730=>array(42,-67,975,829),25731=>array(73,-64,955,835),25732=>array(36,-65,923,823),25733=>array(31,-68,971,829),25734=>array(73,-66,953,831),25735=>array(46,-69,971,837),25736=>array(54,-68,942,833),25737=>array(58,-68,971,844),25738=>array(42,-69,911,825),25739=>array(39,-71,905,822),25740=>array(42,-85,953,826),25741=>array(44,-67,957,828),25742=>array(55,-64,955,828),25743=>array(38,-70,962,826),25744=>array(67,-73,954,820),25745=>array(31,-77,941,822),25746=>array(41,-69,963,832),25747=>array(55,-69,953,827),25748=>array(42,-66,955,826),25749=>array(37,-67,942,834),25750=>array(39,-77,982,831),25751=>array(40,-81,962,823),25752=>array(41,-52,962,857),25753=>array(45,-62,963,853),25754=>array(37,-60,970,849),25755=>array(41,-74,954,832),25756=>array(43,-68,983,832),25757=>array(45,-56,943,846),25758=>array(33,-71,948,829),25759=>array(51,-67,976,838),25760=>array(35,-73,972,823),25761=>array(22,-64,978,845),25762=>array(50,-63,949,828),25763=>array(41,-68,956,828),25764=>array(39,-68,961,835),25765=>array(40,-71,959,843),25766=>array(55,-70,980,833),25767=>array(34,-64,973,844),25768=>array(55,-71,969,849),25769=>array(37,-61,968,843),25770=>array(39,-64,973,855),25771=>array(46,-63,954,837),25772=>array(41,-63,958,837),25773=>array(29,-69,971,829),25774=>array(32,-65,948,832),25775=>array(55,-64,965,847),25776=>array(36,-69,955,823),25777=>array(40,-71,949,840),25778=>array(37,-69,975,835),25779=>array(40,-70,973,839),25780=>array(12,-73,975,838),25781=>array(25,-61,936,828),25782=>array(33,-68,945,831),25783=>array(40,-65,943,827),25784=>array(41,-66,915,827),25785=>array(35,-64,965,828),25786=>array(33,-62,912,846),25787=>array(40,-78,955,833),25788=>array(47,-68,960,833),25789=>array(36,-79,974,842),25790=>array(38,-68,966,829),25791=>array(34,-69,961,861),25792=>array(45,-66,964,829),25793=>array(32,-70,958,835),25794=>array(54,-69,924,823),25795=>array(27,-76,966,832),25796=>array(43,-67,954,835),25797=>array(45,-67,957,837),25798=>array(31,-64,963,833),25799=>array(49,-67,935,821),25800=>array(39,-66,972,833),25801=>array(41,-69,924,829),25802=>array(73,-65,956,835),25803=>array(52,-66,918,832),25804=>array(75,-38,967,854),25805=>array(39,-62,954,823),25806=>array(47,-73,951,845),25807=>array(33,-78,971,830),25808=>array(42,-68,958,828),25809=>array(43,-78,970,843),25810=>array(29,-68,963,842),25811=>array(39,-53,949,839),25812=>array(48,-74,950,846),25813=>array(55,-65,960,834),25814=>array(48,-71,939,829),25815=>array(49,-64,965,849),25816=>array(54,-64,949,832),25817=>array(34,-79,975,840),25818=>array(41,-70,964,831),25819=>array(40,-73,985,819),25820=>array(47,-70,984,848),25821=>array(45,-66,979,826),25822=>array(30,-64,958,832),25823=>array(53,-70,958,841),25824=>array(53,-77,953,830),25825=>array(44,-63,961,830),25826=>array(36,-65,952,830),25827=>array(57,-65,954,827),25828=>array(61,-67,962,856),25829=>array(84,-51,955,840),25830=>array(46,-70,966,826),25831=>array(55,-59,965,832),25832=>array(42,-74,967,831),25833=>array(48,-68,953,827),25834=>array(47,-69,954,837),25835=>array(39,-76,969,824),25836=>array(42,-63,956,832),25837=>array(45,-49,966,844),25838=>array(44,-58,958,843),25839=>array(34,-71,960,842),25840=>array(49,-67,952,844),25841=>array(58,-71,913,827),25842=>array(36,-75,949,832),25843=>array(33,-67,939,835),25844=>array(43,-68,960,841),25845=>array(51,-62,962,840),25846=>array(42,-64,955,841),25847=>array(41,-70,972,840),25848=>array(41,-50,970,861),25849=>array(40,-68,977,837),25850=>array(43,-69,952,818),25851=>array(31,-67,963,837),25852=>array(51,-71,961,827),25853=>array(54,-70,952,831),25854=>array(41,-64,963,829),25855=>array(63,-64,986,843),25856=>array(49,-65,960,832),25857=>array(42,-78,975,844),25858=>array(42,-77,948,823),25859=>array(42,-73,973,825),25860=>array(44,-67,965,836),25861=>array(46,-77,960,828),25862=>array(40,-70,954,835),25863=>array(39,-65,960,843),25864=>array(31,-83,974,839),25865=>array(43,-64,967,833),25866=>array(35,-72,964,827),25867=>array(27,-72,970,844),25868=>array(61,-70,923,826),25869=>array(36,-73,976,842),25870=>array(39,-69,954,827),25871=>array(40,-62,954,842),25872=>array(46,-67,982,842),25873=>array(41,-71,986,835),25874=>array(23,-71,933,827),25875=>array(27,-65,980,845),25876=>array(56,-76,912,822),25877=>array(29,-66,972,841),25878=>array(50,-71,953,835),25879=>array(46,-68,966,846),25880=>array(39,-69,970,829),25881=>array(44,-74,964,838),25882=>array(35,-68,959,828),25883=>array(38,-64,969,841),25884=>array(42,-74,944,832),25885=>array(36,-68,955,821),25886=>array(52,-64,962,831),25887=>array(32,-70,974,853),25888=>array(48,-72,954,841),25889=>array(49,-64,962,840),25890=>array(41,-65,968,831),25891=>array(48,-61,957,840),25892=>array(55,-72,951,832),25893=>array(33,-63,970,844),25894=>array(63,-66,961,824),25895=>array(29,-72,959,835),25896=>array(35,-73,973,844),25897=>array(38,-57,956,840),25898=>array(41,-62,959,839),25899=>array(36,-64,970,826),25900=>array(39,-72,956,832),25901=>array(26,-71,967,840),25902=>array(48,-65,975,839),25903=>array(78,-65,945,830),25904=>array(41,-55,968,846),25905=>array(58,-80,972,834),25906=>array(63,-73,973,830),25907=>array(41,-71,981,824),25908=>array(34,-76,942,825),25909=>array(68,-72,932,818),25910=>array(67,-70,951,830),25911=>array(71,-67,979,840),25912=>array(48,-67,949,830),25913=>array(103,-65,946,825),25914=>array(86,-75,969,821),25915=>array(64,-68,957,838),25916=>array(62,-67,967,841),25917=>array(46,-71,963,832),25918=>array(46,-65,956,842),25919=>array(38,-74,956,838),25920=>array(114,-77,970,838),25921=>array(129,-82,955,828),25922=>array(24,-61,976,834),25923=>array(87,-80,962,823),25924=>array(29,-71,970,833),25925=>array(54,-67,958,833),25926=>array(52,-68,969,835),25927=>array(28,-65,972,834),25928=>array(60,-64,956,834),25929=>array(42,-67,975,838),25930=>array(46,-62,970,835),25931=>array(37,-68,959,840),25932=>array(27,-64,947,833),25933=>array(47,-70,960,843),25934=>array(38,-69,971,837),25935=>array(57,-63,971,839),25936=>array(33,-67,971,825),25937=>array(39,-68,955,843),25938=>array(32,-67,963,834),25939=>array(38,-69,969,829),25940=>array(54,-54,973,855),25941=>array(43,-70,970,836),25942=>array(48,-74,946,830),25943=>array(63,-74,963,836),25944=>array(48,-61,967,843),25945=>array(30,-60,950,831),25946=>array(30,-70,972,839),25947=>array(23,-60,932,847),25948=>array(37,-74,971,835),25949=>array(99,-69,967,835),25950=>array(81,-70,966,836),25951=>array(46,-73,957,836),25952=>array(44,-84,965,820),25953=>array(43,-77,971,823),25954=>array(39,-61,960,826),25955=>array(65,-72,956,834),25956=>array(42,-74,968,823),25957=>array(44,-80,966,829),25958=>array(42,-67,961,839),25959=>array(45,-59,962,839),25960=>array(66,-71,969,840),25961=>array(52,-69,969,842),25962=>array(44,-76,965,821),25963=>array(35,-61,944,823),25964=>array(44,-70,969,836),25965=>array(42,-71,969,836),25966=>array(36,-74,970,837),25967=>array(99,-75,967,823),25968=>array(42,-69,959,821),25969=>array(45,-63,967,835),25970=>array(55,-71,957,838),25971=>array(47,-75,969,833),25972=>array(51,-18,946,840),25973=>array(60,-69,967,834),25974=>array(104,-76,985,828),25975=>array(41,-65,969,839),25976=>array(60,-70,959,833),25977=>array(58,-76,984,831),25978=>array(60,-71,959,832),25979=>array(36,-65,970,846),25980=>array(60,-73,973,827),25981=>array(36,-68,974,843),25982=>array(64,-77,978,849),25983=>array(44,-77,978,827),25984=>array(35,-72,970,824),25985=>array(63,-69,977,842),25986=>array(45,-66,970,859),25987=>array(51,-68,955,830),25988=>array(38,-65,972,832),25989=>array(52,-72,967,838),25990=>array(52,-69,969,839),25991=>array(62,-69,947,822),25992=>array(49,-73,951,815),25993=>array(49,-63,951,828),25994=>array(36,-72,959,843),25995=>array(47,-68,921,840),25996=>array(36,-63,963,833),25997=>array(26,-65,974,840),25998=>array(29,-64,974,828),25999=>array(47,-66,971,846),26000=>array(36,-63,964,831),26001=>array(35,-68,956,829),26002=>array(44,-71,936,829),26003=>array(43,-70,888,807),26004=>array(60,-75,983,833),26005=>array(53,-65,927,826),26006=>array(49,-42,951,835),26007=>array(62,-64,946,832),26008=>array(54,-65,950,844),26009=>array(38,-68,956,836),26010=>array(67,-65,948,829),26011=>array(27,-72,946,826),26012=>array(32,-71,945,838),26013=>array(67,-65,946,789),26014=>array(46,-73,954,827),26015=>array(42,-79,944,820),26016=>array(51,-70,954,836),26017=>array(46,-77,960,854),26018=>array(60,-76,954,823),26019=>array(33,-76,948,818),26020=>array(75,-71,902,832),26021=>array(81,-69,895,834),26022=>array(48,-69,959,824),26023=>array(77,-64,941,836),26024=>array(50,-69,941,828),26025=>array(66,-75,925,828),26026=>array(47,-70,957,816),26027=>array(37,-69,951,834),26028=>array(53,-73,945,831),26029=>array(99,-66,946,824),26030=>array(63,-70,951,824),26031=>array(49,-75,944,829),26032=>array(54,-62,944,830),26033=>array(45,-67,934,837),26034=>array(65,-65,959,828),26035=>array(47,-73,952,836),26036=>array(36,-79,957,831),26037=>array(65,-65,959,833),26038=>array(43,-68,927,821),26039=>array(106,-66,950,845),26040=>array(44,-62,960,829),26041=>array(52,-67,936,822),26042=>array(38,-63,976,842),26043=>array(42,-61,969,837),26044=>array(41,-62,966,826),26045=>array(42,-49,952,831),26046=>array(51,-73,956,844),26047=>array(54,-50,952,858),26048=>array(48,-69,962,841),26049=>array(70,-65,906,829),26050=>array(36,-68,951,850),26051=>array(34,-70,951,833),26052=>array(49,-67,967,844),26053=>array(33,-67,969,839),26054=>array(48,-61,965,854),26055=>array(64,-73,959,848),26056=>array(34,-73,961,848),26057=>array(42,-69,947,832),26058=>array(35,-60,963,839),26059=>array(39,-66,966,841),26060=>array(39,-68,954,841),26061=>array(44,-73,974,838),26062=>array(50,-74,960,843),26063=>array(35,-67,966,843),26064=>array(42,-59,968,852),26065=>array(42,-61,962,852),26066=>array(18,-65,958,846),26067=>array(44,-67,955,836),26068=>array(30,-86,964,845),26069=>array(61,-55,976,843),26070=>array(39,-68,945,837),26071=>array(37,-70,955,837),26072=>array(37,-65,957,839),26073=>array(45,-55,959,839),26074=>array(44,-68,958,839),26075=>array(37,-67,971,839),26076=>array(40,-61,955,850),26077=>array(37,-64,980,834),26078=>array(31,-67,985,828),26079=>array(33,-71,967,847),26080=>array(65,-59,944,779),26081=>array(93,-50,947,800),26082=>array(47,-55,961,784),26083=>array(110,-64,946,846),26084=>array(86,-65,972,789),26085=>array(237,-32,788,747),26086=>array(84,-13,936,769),26087=>array(140,-52,860,778),26088=>array(195,-61,883,835),26089=>array(86,-68,934,780),26090=>array(89,-53,949,843),26091=>array(89,-73,905,763),26092=>array(39,-61,899,837),26093=>array(52,-62,957,839),26094=>array(54,-65,974,844),26095=>array(54,-66,972,776),26096=>array(92,-65,927,770),26097=>array(85,-61,939,785),26098=>array(46,-66,969,789),26099=>array(111,-64,905,841),26100=>array(101,-54,951,789),26101=>array(121,-66,879,786),26102=>array(103,-62,927,829),26103=>array(87,-65,912,832),26104=>array(95,-68,914,775),26105=>array(63,-64,937,833),26106=>array(91,-7,934,781),26107=>array(35,-58,968,796),26108=>array(95,-74,943,815),26109=>array(92,-47,967,823),26110=>array(73,-64,956,836),26111=>array(111,-67,948,837),26112=>array(105,-54,903,830),26113=>array(104,-62,945,831),26114=>array(69,-61,899,791),26115=>array(48,-72,950,789),26116=>array(102,-69,956,791),26117=>array(109,-71,959,787),26118=>array(82,-50,958,796),26119=>array(51,-62,954,789),26120=>array(105,-66,934,833),26121=>array(99,-56,947,825),26122=>array(68,-68,952,786),26123=>array(49,-68,956,831),26124=>array(158,-64,856,788),26125=>array(116,-53,884,788),26126=>array(109,-65,869,787),26127=>array(86,-69,937,843),26128=>array(109,-70,960,784),26129=>array(103,-66,956,831),26130=>array(103,-63,911,839),26131=>array(75,-67,866,782),26132=>array(79,-62,930,828),26133=>array(101,-68,936,838),26134=>array(101,-46,965,807),26135=>array(77,-68,943,795),26136=>array(64,-63,933,810),26137=>array(66,-74,918,779),26138=>array(66,-53,957,835),26139=>array(97,-14,952,788),26140=>array(49,-60,936,798),26141=>array(67,-68,973,845),26142=>array(57,-62,942,786),26143=>array(96,-18,935,780),26144=>array(88,-67,953,832),26145=>array(118,-57,955,822),26146=>array(123,-69,901,824),26147=>array(100,-72,974,849),26148=>array(102,-65,948,839),26149=>array(45,-67,962,837),26150=>array(50,-68,959,774),26151=>array(100,-65,966,832),26152=>array(116,-62,955,845),26153=>array(73,-67,961,830),26154=>array(51,-65,932,805),26155=>array(115,-56,919,830),26156=>array(159,-68,937,812),26157=>array(120,-68,901,785),26158=>array(50,-72,916,778),26159=>array(68,-66,960,790),26160=>array(64,-24,942,802),26161=>array(70,-18,944,788),26162=>array(106,-66,918,830),26163=>array(120,-76,961,824),26164=>array(84,-67,892,787),26165=>array(104,-71,939,778),26166=>array(33,-62,976,802),26167=>array(57,-14,948,788),26168=>array(110,-77,964,837),26169=>array(99,-66,965,835),26170=>array(85,-69,938,776),26171=>array(50,-61,898,791),26172=>array(41,-43,964,789),26173=>array(91,-61,926,824),26174=>array(53,-17,921,784),26175=>array(95,-56,948,819),26176=>array(113,-68,965,830),26177=>array(47,-65,960,788),26178=>array(113,-65,948,839),26179=>array(54,-51,948,800),26180=>array(108,-57,959,831),26181=>array(102,-31,946,776),26182=>array(102,-22,959,836),26183=>array(104,-72,965,837),26184=>array(89,-63,944,846),26185=>array(72,-60,944,790),26186=>array(110,-12,953,774),26187=>array(74,-65,926,799),26188=>array(107,-68,907,847),26189=>array(107,-65,895,782),26190=>array(107,-69,953,828),26191=>array(61,-73,945,789),26192=>array(107,-61,943,846),26193=>array(136,-62,877,789),26194=>array(97,-54,941,799),26195=>array(90,-67,943,822),26196=>array(100,-64,928,823),26197=>array(64,-65,916,785),26198=>array(101,-72,930,758),26199=>array(80,-71,957,848),26200=>array(101,-62,953,789),26201=>array(94,-62,958,834),26202=>array(110,-70,956,827),26203=>array(102,-58,955,797),26204=>array(55,-53,908,803),26205=>array(59,-30,948,829),26206=>array(79,-69,951,837),26207=>array(30,-67,967,793),26208=>array(90,-68,951,834),26209=>array(110,-68,959,832),26210=>array(68,-62,943,842),26211=>array(102,-67,954,843),26212=>array(82,-65,940,786),26213=>array(91,-71,962,824),26214=>array(98,-59,947,837),26215=>array(97,-60,939,831),26216=>array(30,-68,935,809),26217=>array(97,-69,965,840),26218=>array(110,-74,961,833),26219=>array(106,-71,946,825),26220=>array(102,-60,951,850),26221=>array(97,-68,907,791),26222=>array(53,-70,944,845),26223=>array(58,-61,940,796),26224=>array(102,-67,954,832),26225=>array(107,-71,949,828),26226=>array(110,-68,959,833),26227=>array(58,-71,932,826),26228=>array(75,-52,938,838),26229=>array(52,-60,964,846),26230=>array(117,-64,887,785),26231=>array(50,-68,943,782),26232=>array(41,-52,968,808),26233=>array(110,-72,919,782),26234=>array(82,-69,897,829),26235=>array(105,-40,966,828),26236=>array(104,-72,965,846),26237=>array(59,-63,981,842),26238=>array(87,-62,931,842),26239=>array(87,-62,923,791),26240=>array(107,-70,955,831),26241=>array(86,-65,970,817),26242=>array(64,-71,931,827),26243=>array(58,-70,937,808),26244=>array(90,-49,947,822),26245=>array(79,-59,960,849),26246=>array(90,-67,947,830),26247=>array(106,-71,971,790),26248=>array(57,-62,950,798),26249=>array(89,-65,936,787),26250=>array(121,-80,965,782),26251=>array(106,-55,948,849),26252=>array(86,-61,940,834),26253=>array(115,-69,925,785),26254=>array(95,-63,969,835),26255=>array(115,-65,960,835),26256=>array(91,-51,946,858),26257=>array(62,-63,955,790),26258=>array(89,-21,954,792),26259=>array(36,-69,954,830),26260=>array(110,-68,952,834),26261=>array(108,-67,966,833),26262=>array(89,-67,954,834),26263=>array(98,-64,943,840),26264=>array(82,-55,937,804),26265=>array(104,-72,956,833),26266=>array(89,-64,945,831),26267=>array(107,-25,939,843),26268=>array(60,-68,944,826),26269=>array(101,-56,936,789),26270=>array(112,-50,933,849),26271=>array(109,-24,951,832),26272=>array(74,-56,927,820),26273=>array(104,-70,960,800),26274=>array(92,-70,938,831),26275=>array(46,-63,974,851),26276=>array(92,-64,979,849),26277=>array(50,-59,950,788),26278=>array(39,-62,961,796),26279=>array(97,-72,955,821),26280=>array(59,-25,953,783),26281=>array(110,-72,990,832),26282=>array(113,-70,953,823),26283=>array(83,-68,948,833),26284=>array(65,-71,953,827),26285=>array(112,-64,952,849),26286=>array(51,-65,965,837),26287=>array(100,-75,955,827),26288=>array(100,-69,975,833),26289=>array(104,-26,962,799),26290=>array(112,-68,953,834),26291=>array(83,-62,941,826),26292=>array(66,-66,956,786),26293=>array(101,-53,968,841),26294=>array(92,-71,971,828),26295=>array(115,-68,960,836),26296=>array(89,-62,966,855),26297=>array(58,-56,933,815),26298=>array(109,-74,953,777),26299=>array(115,-68,971,781),26300=>array(68,-71,960,837),26301=>array(115,-70,960,824),26302=>array(99,-77,970,835),26303=>array(89,-69,957,833),26304=>array(101,-8,948,843),26305=>array(59,-37,947,832),26306=>array(89,-68,956,827),26307=>array(70,-64,960,829),26308=>array(94,-68,945,831),26309=>array(59,-71,943,819),26310=>array(32,-60,959,798),26311=>array(53,-74,947,817),26312=>array(96,-14,941,854),26313=>array(107,-61,964,837),26314=>array(110,-77,953,827),26315=>array(114,-70,956,777),26316=>array(55,-25,949,779),26317=>array(112,-64,952,849),26318=>array(79,-62,949,788),26319=>array(51,-67,946,788),26320=>array(86,-47,918,821),26321=>array(35,-75,968,812),26322=>array(94,-59,964,850),26323=>array(31,-75,966,834),26324=>array(57,-66,978,840),26325=>array(84,-72,927,841),26326=>array(81,-62,946,841),26327=>array(95,-67,959,825),26328=>array(101,-69,941,781),26329=>array(97,-63,955,789),26330=>array(94,-61,965,836),26331=>array(89,-70,965,835),26332=>array(85,-70,946,813),26333=>array(103,-64,980,784),26334=>array(93,-66,935,799),26335=>array(55,-67,956,816),26336=>array(93,-71,966,819),26337=>array(54,-32,952,791),26338=>array(99,-61,959,820),26339=>array(91,-72,953,823),26340=>array(91,-64,926,783),26341=>array(92,-67,954,830),26342=>array(88,-64,946,841),26343=>array(116,-68,966,817),26344=>array(90,-53,957,853),26345=>array(48,-62,937,824),26346=>array(90,-64,962,796),26347=>array(49,-71,962,838),26348=>array(92,-68,961,800),26349=>array(82,-68,944,834),26350=>array(83,-64,959,799),26351=>array(98,-67,924,806),26352=>array(166,-33,842,728),26353=>array(175,-61,841,788),26354=>array(163,-68,860,831),26355=>array(71,-56,954,839),26356=>array(48,-72,962,777),26357=>array(71,-60,946,845),26358=>array(61,-71,898,845),26359=>array(62,-67,896,792),26360=>array(84,-64,938,837),26361=>array(53,-70,947,829),26362=>array(53,-70,947,829),26363=>array(43,-68,946,791),26364=>array(57,-67,959,791),26365=>array(127,-65,876,852),26366=>array(38,-65,959,825),26367=>array(56,-68,950,834),26368=>array(53,-73,935,783),26369=>array(60,-71,960,781),26370=>array(54,-68,946,808),26371=>array(33,-74,978,848),26372=>array(98,-68,980,828),26373=>array(63,-63,920,830),26374=>array(94,-64,949,845),26375=>array(23,-74,957,847),26376=>array(86,-76,788,783),26377=>array(45,-65,936,844),26378=>array(33,-65,956,790),26379=>array(65,-77,891,782),26380=>array(23,-68,963,839),26381=>array(53,-75,950,783),26382=>array(47,-57,971,854),26383=>array(41,-56,905,840),26384=>array(34,-66,908,843),26385=>array(52,-64,964,829),26386=>array(43,-64,906,832),26387=>array(39,-71,957,823),26388=>array(60,-67,905,848),26389=>array(36,-73,961,837),26390=>array(36,-64,962,834),26391=>array(49,-74,885,832),26392=>array(33,-71,985,838),26393=>array(90,-65,915,793),26394=>array(72,-69,925,838),26395=>array(73,-36,927,822),26396=>array(36,-62,949,843),26397=>array(72,-68,908,827),26398=>array(42,-60,958,837),26399=>array(60,-70,899,829),26400=>array(33,-72,973,826),26401=>array(39,-85,966,825),26402=>array(85,-39,915,791),26403=>array(41,-72,952,828),26404=>array(65,-77,893,797),26405=>array(61,-66,941,833),26406=>array(34,-61,965,836),26407=>array(54,-73,962,834),26408=>array(77,-68,939,826),26409=>array(77,-58,889,826),26410=>array(65,-67,948,838),26411=>array(55,-67,955,839),26412=>array(41,-67,955,827),26413=>array(46,-62,954,829),26414=>array(75,-65,940,829),26415=>array(34,-69,947,815),26416=>array(51,-15,960,813),26417=>array(65,-70,950,828),26418=>array(57,-63,943,830),26419=>array(56,-71,969,830),26420=>array(49,-55,961,840),26421=>array(54,-68,955,777),26422=>array(53,-68,955,787),26423=>array(54,-58,901,830),26424=>array(66,-67,912,826),26425=>array(55,-63,955,830),26426=>array(54,-73,975,827),26427=>array(58,-66,901,829),26428=>array(54,-56,958,837),26429=>array(45,-62,937,832),26430=>array(48,-62,940,830),26431=>array(37,-54,956,839),26432=>array(53,-66,926,811),26433=>array(53,-64,958,828),26434=>array(42,-64,939,824),26435=>array(39,-65,954,836),26436=>array(42,-63,947,833),26437=>array(51,-61,953,835),26438=>array(39,-58,963,830),26439=>array(33,-62,956,831),26440=>array(37,-68,971,823),26441=>array(43,-69,950,831),26442=>array(43,-67,892,827),26443=>array(61,-63,959,833),26444=>array(33,-67,961,830),26445=>array(55,-68,955,829),26446=>array(51,-70,960,831),26447=>array(64,-62,950,827),26448=>array(40,-75,951,824),26449=>array(44,-71,951,829),26450=>array(44,-71,914,823),26451=>array(32,-69,917,834),26452=>array(47,-71,930,823),26453=>array(34,-64,976,833),26454=>array(43,-72,975,827),26455=>array(40,-67,954,837),26456=>array(47,-76,924,785),26457=>array(39,-70,961,830),26458=>array(50,-59,956,838),26459=>array(49,-70,902,828),26460=>array(49,-70,948,828),26461=>array(42,-64,959,830),26462=>array(39,-58,940,830),26463=>array(71,-67,950,833),26464=>array(39,-58,942,830),26465=>array(40,-65,956,827),26466=>array(44,-23,956,822),26467=>array(51,-58,912,830),26468=>array(51,-58,956,830),26469=>array(49,-57,951,830),26470=>array(47,-66,948,835),26471=>array(46,-59,931,833),26472=>array(22,-68,902,826),26473=>array(21,-62,890,825),26474=>array(51,-58,950,831),26475=>array(47,-62,954,835),26476=>array(41,-61,969,836),26477=>array(40,-62,962,832),26478=>array(47,-62,950,839),26479=>array(41,-63,959,835),26480=>array(46,-73,943,825),26481=>array(50,-71,960,831),26482=>array(31,-64,978,787),26483=>array(44,-65,956,832),26484=>array(54,-69,966,838),26485=>array(40,-68,948,837),26486=>array(44,-58,963,837),26487=>array(44,-68,967,825),26488=>array(49,-77,964,824),26489=>array(60,-69,962,829),26490=>array(39,-61,956,832),26491=>array(39,-61,959,832),26492=>array(51,-64,943,830),26493=>array(55,-70,950,826),26494=>array(39,-62,959,833),26495=>array(31,-73,966,823),26496=>array(42,-55,973,803),26497=>array(45,-73,972,829),26498=>array(71,-71,886,819),26499=>array(50,-75,903,822),26500=>array(45,-61,919,842),26501=>array(51,-68,953,830),26502=>array(39,-61,954,833),26503=>array(37,-70,968,826),26504=>array(58,-55,973,809),26505=>array(51,-58,961,830),26506=>array(46,-61,905,842),26507=>array(51,-58,941,830),26508=>array(42,-64,955,824),26509=>array(42,-59,963,835),26510=>array(36,-69,975,828),26511=>array(47,-65,970,835),26512=>array(41,-68,942,831),26513=>array(40,-61,964,833),26514=>array(47,-62,967,833),26515=>array(32,-59,956,842),26516=>array(55,-73,970,833),26517=>array(48,-62,959,836),26518=>array(48,-70,957,833),26519=>array(30,-69,954,829),26520=>array(42,-64,908,835),26521=>array(38,-58,968,839),26522=>array(57,-68,965,843),26523=>array(33,-66,968,823),26524=>array(48,-67,960,788),26525=>array(48,-64,965,834),26526=>array(24,-69,968,822),26527=>array(54,-80,954,830),26528=>array(39,-64,954,837),26529=>array(51,-65,948,830),26530=>array(31,-68,931,822),26531=>array(32,-76,956,824),26532=>array(40,-68,954,830),26533=>array(20,-67,903,820),26534=>array(51,-66,937,830),26535=>array(19,-73,928,823),26536=>array(23,-72,950,820),26537=>array(48,-74,950,820),26538=>array(41,-63,960,831),26539=>array(15,-58,937,830),26540=>array(42,-66,955,832),26541=>array(39,-51,944,832),26542=>array(55,-70,954,829),26543=>array(52,-62,956,836),26544=>array(42,-63,954,833),26545=>array(43,-62,964,852),26546=>array(42,-55,969,856),26547=>array(38,-68,965,829),26548=>array(51,-62,917,830),26549=>array(41,-67,950,827),26550=>array(47,-66,964,827),26551=>array(51,-58,934,832),26552=>array(51,-58,925,841),26553=>array(51,-58,951,830),26554=>array(42,-69,953,828),26555=>array(37,-62,964,829),26556=>array(40,-48,965,823),26557=>array(26,-54,950,827),26558=>array(48,-72,950,829),26559=>array(7,-66,968,829),26560=>array(45,-73,957,830),26561=>array(32,-62,958,835),26562=>array(51,-77,963,816),26563=>array(39,-80,957,827),26564=>array(46,-58,943,828),26565=>array(39,-55,963,840),26566=>array(51,-58,964,830),26567=>array(51,-71,976,822),26568=>array(51,-72,958,824),26569=>array(42,-69,965,825),26570=>array(34,-66,984,833),26571=>array(50,-70,968,822),26572=>array(49,-66,895,827),26573=>array(47,-75,961,823),26574=>array(51,-63,957,830),26575=>array(45,-62,896,846),26576=>array(44,-69,956,835),26577=>array(40,-65,953,827),26578=>array(45,-61,966,830),26579=>array(51,-66,956,835),26580=>array(48,-67,947,788),26581=>array(58,-67,917,825),26582=>array(32,-66,895,829),26583=>array(33,-68,948,833),26584=>array(58,-67,942,825),26585=>array(40,-64,898,833),26586=>array(37,-66,899,835),26587=>array(39,-69,896,825),26588=>array(40,-60,946,830),26589=>array(51,-66,945,836),26590=>array(51,-66,950,839),26591=>array(37,-65,967,832),26592=>array(26,-62,922,836),26593=>array(26,-69,981,827),26594=>array(51,-58,945,830),26595=>array(36,-81,957,822),26596=>array(51,-58,961,830),26597=>array(50,-12,951,826),26598=>array(58,-68,958,826),26599=>array(51,-59,952,830),26600=>array(48,-66,959,850),26601=>array(35,-65,952,824),26602=>array(50,-79,918,820),26603=>array(44,-71,914,838),26604=>array(55,-61,932,838),26605=>array(51,-77,962,826),26606=>array(51,-65,933,832),26607=>array(51,-61,953,830),26608=>array(64,-63,945,839),26609=>array(41,-67,957,839),26610=>array(43,-63,957,830),26611=>array(34,-61,921,837),26612=>array(44,-68,959,825),26613=>array(35,-60,956,832),26614=>array(50,-66,895,827),26615=>array(33,-55,964,836),26616=>array(48,-66,956,827),26617=>array(45,-66,934,832),26618=>array(50,-68,890,827),26619=>array(50,-12,952,826),26620=>array(36,-73,949,828),26621=>array(27,-75,947,817),26622=>array(27,-75,924,817),26623=>array(40,-64,949,827),26624=>array(43,-67,955,834),26625=>array(46,-61,905,837),26626=>array(46,-64,954,831),26627=>array(43,-76,945,834),26628=>array(60,-65,957,820),26629=>array(25,-65,965,829),26630=>array(38,-72,958,834),26631=>array(21,-59,940,833),26632=>array(17,-71,933,825),26633=>array(20,-71,917,817),26634=>array(17,-69,930,820),26635=>array(25,-60,942,833),26636=>array(21,-72,918,820),26637=>array(21,-68,951,827),26638=>array(21,-74,950,816),26639=>array(32,-57,925,833),26640=>array(32,-63,964,844),26641=>array(20,-71,929,818),26642=>array(58,-65,927,845),26643=>array(37,-65,948,826),26644=>array(56,-64,962,836),26645=>array(63,-68,953,823),26646=>array(54,-62,957,833),26647=>array(60,-65,957,788),26648=>array(63,-71,933,835),26649=>array(45,-66,961,842),26650=>array(38,-69,969,833),26651=>array(34,-65,966,835),26652=>array(39,-67,964,830),26653=>array(34,-64,943,832),26654=>array(56,-64,962,811),26655=>array(38,-63,948,845),26656=>array(45,-67,961,844),26657=>array(37,-74,963,822),26658=>array(39,-64,957,831),26659=>array(39,-64,965,843),26660=>array(32,-65,981,837),26661=>array(52,-65,954,841),26662=>array(39,-70,908,832),26663=>array(33,-64,961,836),26664=>array(32,-70,971,833),26665=>array(51,-58,909,830),26666=>array(28,-63,961,836),26667=>array(51,-68,930,830),26668=>array(53,-67,955,826),26669=>array(38,-68,951,828),26670=>array(53,-70,954,826),26671=>array(38,-68,948,826),26672=>array(29,-64,956,832),26673=>array(33,-77,955,825),26674=>array(36,-65,952,833),26675=>array(45,-68,954,826),26676=>array(38,-63,962,833),26677=>array(36,-67,908,830),26678=>array(17,-62,895,831),26679=>array(17,-61,924,831),26680=>array(33,-67,949,825),26681=>array(51,-71,957,820),26682=>array(44,-68,942,829),26683=>array(33,-58,971,839),26684=>array(44,-65,968,835),26685=>array(50,-59,957,839),26686=>array(39,-77,951,834),26687=>array(44,-66,991,842),26688=>array(54,-67,960,841),26689=>array(39,-68,956,835),26690=>array(39,-66,944,827),26691=>array(39,-72,945,828),26692=>array(33,-68,966,832),26693=>array(40,-65,967,844),26694=>array(30,-69,941,826),26695=>array(63,-65,963,844),26696=>array(63,-65,963,838),26697=>array(39,-60,956,845),26698=>array(50,-48,948,827),26699=>array(33,-71,971,832),26700=>array(52,-67,957,831),26701=>array(51,-67,932,830),26702=>array(51,-58,950,830),26703=>array(31,-64,957,832),26704=>array(46,-65,895,830),26705=>array(53,-65,958,788),26706=>array(52,-63,957,836),26707=>array(39,-65,954,827),26708=>array(38,-62,939,837),26709=>array(54,-74,898,821),26710=>array(54,-74,972,857),26711=>array(54,-74,964,821),26712=>array(50,-74,898,837),26713=>array(51,-65,946,833),26714=>array(45,-75,945,839),26715=>array(36,-66,946,836),26716=>array(54,-74,959,821),26717=>array(37,-66,949,835),26718=>array(36,-74,957,821),26719=>array(22,-71,933,826),26720=>array(18,-67,922,824),26721=>array(17,-74,938,821),26722=>array(20,-81,921,816),26723=>array(51,-60,935,830),26724=>array(26,-63,932,826),26725=>array(36,-53,966,844),26726=>array(25,-75,929,817),26727=>array(25,-78,959,833),26728=>array(27,-61,949,840),26729=>array(24,-69,923,833),26730=>array(44,-68,938,827),26731=>array(37,-69,972,829),26732=>array(48,-61,970,836),26733=>array(26,-72,966,832),26734=>array(41,-70,954,829),26735=>array(44,-65,951,827),26736=>array(43,-65,961,829),26737=>array(41,-68,953,826),26738=>array(33,-64,953,837),26739=>array(19,-73,979,834),26740=>array(51,-76,955,830),26741=>array(49,-74,953,826),26742=>array(42,-71,902,827),26743=>array(51,-63,924,844),26744=>array(44,-71,953,837),26745=>array(48,-66,977,848),26746=>array(35,-67,965,833),26747=>array(46,-73,976,821),26748=>array(36,-65,965,826),26749=>array(56,-23,960,824),26750=>array(51,-72,956,830),26751=>array(51,-62,933,830),26752=>array(46,-67,972,832),26753=>array(53,-68,956,808),26754=>array(50,-65,961,833),26755=>array(41,-66,960,830),26756=>array(32,-62,945,832),26757=>array(46,-71,953,843),26758=>array(38,-68,951,836),26759=>array(49,-65,961,829),26760=>array(31,-62,920,843),26761=>array(41,-69,953,826),26762=>array(39,-62,977,832),26763=>array(41,-71,897,824),26764=>array(48,-69,977,826),26765=>array(33,-67,935,842),26766=>array(39,-67,945,848),26767=>array(51,-67,934,833),26768=>array(32,-64,954,831),26769=>array(34,-76,970,821),26770=>array(42,-69,964,828),26771=>array(38,-70,956,837),26772=>array(28,-67,965,840),26773=>array(21,-67,970,833),26774=>array(37,-82,956,824),26775=>array(35,-68,956,829),26776=>array(36,-62,958,833),26777=>array(50,-70,911,827),26778=>array(50,-68,963,848),26779=>array(34,-68,962,824),26780=>array(30,-69,979,828),26781=>array(42,-71,981,839),26782=>array(45,-65,966,827),26783=>array(63,-68,932,847),26784=>array(51,-64,913,830),26785=>array(40,-72,962,838),26786=>array(44,-63,915,835),26787=>array(41,-70,967,825),26788=>array(47,-68,975,827),26789=>array(45,-71,957,838),26790=>array(49,-59,947,828),26791=>array(47,-62,948,835),26792=>array(41,-68,950,823),26793=>array(44,-64,952,828),26794=>array(43,-67,951,823),26795=>array(47,-69,968,830),26796=>array(42,-68,953,825),26797=>array(51,-73,951,835),26798=>array(42,-66,911,830),26799=>array(44,-70,927,839),26800=>array(40,-67,961,832),26801=>array(36,-54,913,835),26802=>array(44,-61,961,831),26803=>array(51,-70,957,830),26804=>array(30,-76,974,827),26805=>array(41,-79,943,824),26806=>array(31,-64,971,832),26807=>array(29,-62,971,839),26808=>array(36,-65,918,835),26809=>array(51,-58,954,830),26810=>array(46,-58,943,833),26811=>array(33,-65,950,836),26812=>array(33,-64,952,830),26813=>array(36,-54,972,835),26814=>array(27,-60,959,835),26815=>array(54,-55,971,835),26816=>array(24,-60,934,832),26817=>array(36,-64,968,844),26818=>array(23,-70,947,819),26819=>array(50,-67,967,813),26820=>array(39,-68,969,842),26821=>array(24,-72,970,824),26822=>array(30,-70,953,839),26823=>array(48,-68,959,824),26824=>array(43,-68,952,832),26825=>array(58,-71,922,838),26826=>array(72,-71,944,835),26827=>array(29,-70,947,827),26828=>array(41,-70,977,826),26829=>array(51,-58,946,830),26830=>array(51,-71,972,828),26831=>array(33,-71,973,825),26832=>array(42,-59,964,843),26833=>array(48,-73,954,824),26834=>array(27,-68,962,838),26835=>array(42,-72,950,841),26836=>array(39,-70,961,831),26837=>array(39,-70,954,823),26838=>array(37,-66,984,832),26839=>array(48,-65,966,834),26840=>array(39,-65,968,830),26841=>array(21,-66,979,844),26842=>array(57,-72,912,822),26843=>array(36,-75,932,845),26844=>array(41,-71,973,833),26845=>array(42,-73,903,826),26846=>array(42,-72,898,826),26847=>array(50,-64,973,835),26848=>array(54,-67,967,836),26849=>array(40,-72,916,824),26850=>array(37,-68,898,824),26851=>array(39,-70,965,832),26852=>array(51,-72,960,833),26853=>array(39,-69,967,826),26854=>array(43,-67,951,826),26855=>array(39,-70,948,840),26856=>array(44,-53,975,848),26857=>array(36,-75,897,825),26858=>array(36,-59,971,845),26859=>array(32,-58,964,841),26860=>array(30,-64,973,843),26861=>array(32,-68,968,839),26862=>array(30,-69,970,833),26863=>array(52,-70,963,834),26864=>array(38,-64,957,830),26865=>array(39,-67,972,832),26866=>array(22,-68,939,836),26867=>array(27,-71,975,827),26868=>array(40,-74,970,827),26869=>array(35,-70,968,822),26870=>array(33,-67,969,831),26871=>array(36,-68,970,824),26872=>array(42,-70,961,783),26873=>array(39,-70,956,835),26874=>array(42,-64,921,829),26875=>array(45,-62,983,830),26876=>array(32,-61,967,831),26877=>array(46,-70,963,826),26878=>array(44,-56,954,829),26879=>array(26,-77,951,835),26880=>array(34,-64,962,834),26881=>array(31,-62,952,833),26882=>array(31,-65,972,829),26883=>array(31,-62,957,837),26884=>array(39,-73,954,832),26885=>array(21,-75,927,817),26886=>array(51,-71,913,824),26887=>array(42,-78,960,827),26888=>array(36,-70,902,844),26889=>array(39,-65,964,841),26890=>array(48,-71,955,838),26891=>array(35,-67,967,835),26892=>array(51,-58,954,830),26893=>array(29,-73,954,835),26894=>array(37,-71,952,836),26895=>array(51,-58,964,830),26896=>array(35,-68,951,833),26897=>array(48,-79,954,835),26898=>array(36,-64,966,829),26899=>array(37,-67,980,830),26900=>array(48,-71,930,832),26901=>array(39,-69,967,826),26902=>array(29,-67,946,840),26903=>array(41,-62,976,843),26904=>array(29,-37,983,831),26905=>array(41,-68,900,832),26906=>array(31,-65,918,832),26907=>array(41,-62,958,834),26908=>array(33,-62,959,838),26909=>array(38,-71,986,826),26910=>array(38,-71,986,830),26911=>array(18,-76,954,815),26912=>array(32,-71,944,827),26913=>array(21,-70,918,833),26914=>array(18,-76,886,815),26915=>array(33,-72,955,833),26916=>array(34,-63,920,823),26917=>array(44,-62,905,830),26918=>array(27,-63,950,843),26919=>array(18,-76,977,828),26920=>array(27,-70,951,829),26921=>array(18,-76,956,856),26922=>array(42,-67,954,825),26923=>array(18,-76,937,837),26924=>array(33,-76,953,848),26925=>array(10,-63,922,830),26926=>array(18,-76,942,835),26927=>array(32,-64,950,837),26928=>array(28,-65,941,826),26929=>array(18,-76,970,843),26930=>array(36,-70,955,835),26931=>array(33,-55,973,838),26932=>array(31,-71,975,837),26933=>array(26,-73,965,826),26934=>array(39,-70,969,825),26935=>array(38,-69,962,828),26936=>array(19,-55,961,852),26937=>array(39,-70,940,827),26938=>array(18,-76,981,825),26939=>array(39,-67,950,826),26940=>array(26,-70,951,830),26941=>array(36,-67,970,831),26942=>array(18,-76,951,833),26943=>array(30,-64,978,835),26944=>array(37,-68,910,824),26945=>array(39,-71,971,827),26946=>array(30,-63,962,831),26947=>array(30,-61,943,833),26948=>array(33,-70,928,824),26949=>array(30,-73,948,823),26950=>array(30,-70,952,823),26951=>array(18,-76,919,815),26952=>array(44,-72,965,824),26953=>array(42,-69,954,826),26954=>array(47,-72,944,817),26955=>array(38,-69,922,826),26956=>array(41,-72,955,836),26957=>array(35,-70,966,813),26958=>array(30,-71,951,823),26959=>array(38,-68,980,829),26960=>array(18,-76,969,815),26961=>array(35,-73,972,832),26962=>array(39,-64,967,830),26963=>array(47,-64,971,836),26964=>array(39,-70,954,828),26965=>array(28,-76,927,845),26966=>array(21,-63,914,828),26967=>array(27,-59,970,840),26968=>array(36,-69,968,830),26969=>array(33,-70,961,830),26970=>array(48,-69,954,827),26971=>array(44,-60,953,834),26972=>array(39,-71,930,827),26973=>array(39,-70,971,836),26974=>array(39,-70,942,818),26975=>array(32,-71,952,836),26976=>array(33,-67,951,830),26977=>array(33,-76,950,818),26978=>array(44,-62,967,843),26979=>array(49,-67,924,829),26980=>array(26,-76,968,850),26981=>array(31,-60,971,848),26982=>array(41,-64,957,854),26983=>array(18,-76,988,836),26984=>array(37,-74,962,836),26985=>array(33,-69,967,826),26986=>array(39,-62,973,834),26987=>array(39,-70,957,818),26988=>array(37,-70,903,823),26989=>array(52,-69,965,829),26990=>array(39,-70,949,829),26991=>array(35,-64,961,839),26992=>array(37,-76,979,824),26993=>array(34,-71,969,831),26994=>array(24,-64,968,829),26995=>array(34,-64,975,832),26996=>array(42,-70,932,839),26997=>array(39,-68,956,824),26998=>array(44,-68,968,829),26999=>array(42,-70,956,827),27000=>array(34,-66,986,827),27001=>array(39,-70,957,818),27002=>array(36,-70,961,825),27003=>array(39,-65,958,834),27004=>array(18,-52,932,838),27005=>array(50,-64,950,847),27006=>array(39,-75,966,841),27007=>array(27,-67,972,832),27008=>array(37,-68,914,825),27009=>array(39,-70,940,835),27010=>array(30,-70,966,824),27011=>array(31,-71,960,823),27012=>array(21,-64,934,830),27013=>array(44,-76,967,820),27014=>array(30,-68,971,849),27015=>array(29,-76,934,822),27016=>array(16,-68,885,825),27017=>array(27,-75,961,816),27018=>array(28,-67,917,833),27019=>array(27,-67,916,829),27020=>array(28,-72,970,829),27021=>array(30,-67,912,824),27022=>array(33,-62,967,832),27023=>array(33,-64,954,859),27024=>array(28,-71,967,827),27025=>array(31,-70,960,833),27026=>array(24,-64,917,829),27027=>array(31,-68,958,833),27028=>array(46,-61,939,835),27029=>array(33,-64,969,830),27030=>array(46,-67,970,827),27031=>array(33,-70,955,826),27032=>array(29,-66,971,842),27033=>array(38,-68,966,833),27034=>array(39,-70,967,832),27035=>array(30,-68,973,839),27036=>array(54,-70,928,833),27037=>array(30,-73,967,835),27038=>array(33,-70,968,825),27039=>array(24,-64,941,845),27040=>array(39,-72,946,831),27041=>array(30,-69,951,833),27042=>array(24,-64,967,844),27043=>array(27,-69,951,837),27044=>array(28,-70,980,829),27045=>array(38,-65,960,830),27046=>array(49,-56,968,855),27047=>array(38,-74,939,817),27048=>array(47,-69,942,838),27049=>array(26,-69,975,826),27050=>array(31,-71,923,827),27051=>array(33,-68,965,844),27052=>array(40,-74,970,826),27053=>array(28,-65,965,849),27054=>array(61,-67,948,832),27055=>array(31,-60,954,833),27056=>array(34,-68,956,832),27057=>array(19,-66,972,832),27058=>array(39,-70,965,818),27059=>array(36,-65,967,840),27060=>array(53,-66,913,834),27061=>array(31,-70,956,828),27062=>array(37,-69,951,838),27063=>array(41,-67,944,841),27064=>array(18,-70,964,823),27065=>array(26,-70,965,827),27066=>array(37,-64,971,838),27067=>array(55,-62,930,845),27068=>array(32,-64,960,833),27069=>array(32,-75,972,825),27070=>array(39,-70,947,818),27071=>array(39,-70,962,829),27072=>array(32,-62,968,831),27073=>array(39,-70,940,844),27074=>array(23,-70,963,823),27075=>array(36,-60,969,845),27076=>array(39,-70,915,822),27077=>array(43,-69,927,823),27078=>array(42,-69,945,827),27079=>array(33,-78,961,833),27080=>array(24,-64,959,829),27081=>array(26,-73,973,836),27082=>array(34,-67,970,845),27083=>array(40,-68,954,828),27084=>array(28,-72,959,843),27085=>array(31,-70,960,851),27086=>array(39,-70,951,847),27087=>array(25,-67,952,840),27088=>array(39,-70,948,844),27089=>array(30,-68,976,787),27090=>array(40,-68,950,843),27091=>array(39,-70,969,818),27092=>array(33,-67,987,849),27093=>array(35,-70,968,835),27094=>array(43,-77,968,844),27095=>array(49,-61,926,834),27096=>array(35,-62,969,843),27097=>array(34,-69,950,836),27098=>array(33,-70,923,818),27099=>array(13,-57,922,845),27100=>array(19,-76,953,843),27101=>array(39,-70,942,844),27102=>array(13,-57,958,845),27103=>array(21,-64,917,842),27104=>array(21,-65,911,825),27105=>array(13,-67,964,845),27106=>array(20,-73,916,823),27107=>array(24,-74,951,845),27108=>array(32,-71,976,825),27109=>array(37,-64,965,830),27110=>array(38,-73,959,845),27111=>array(31,-64,973,837),27112=>array(29,-62,955,836),27113=>array(29,-60,969,811),27114=>array(26,-67,966,845),27115=>array(43,-66,956,835),27116=>array(33,-78,988,835),27117=>array(33,-70,964,839),27118=>array(34,-72,989,850),27119=>array(13,-65,953,845),27120=>array(13,-68,959,845),27121=>array(30,-67,968,826),27122=>array(27,-71,962,842),27123=>array(53,-65,963,843),27124=>array(34,-65,969,831),27125=>array(13,-57,978,845),27126=>array(22,-71,906,831),27127=>array(31,-73,987,829),27128=>array(37,-70,983,824),27129=>array(37,-64,952,845),27130=>array(28,-66,966,848),27131=>array(33,-58,971,839),27132=>array(38,-71,986,826),27133=>array(44,-71,948,827),27134=>array(30,-72,979,828),27135=>array(26,-65,953,828),27136=>array(45,-67,960,847),27137=>array(46,-64,976,835),27138=>array(60,-64,959,847),27139=>array(21,-74,939,826),27140=>array(21,-71,990,826),27141=>array(39,-64,964,829),27142=>array(30,-76,945,829),27143=>array(27,-73,989,824),27144=>array(36,-70,968,835),27145=>array(37,-80,968,826),27146=>array(28,-66,964,836),27147=>array(34,-67,961,827),27148=>array(26,-68,967,829),27149=>array(30,-84,955,830),27150=>array(26,-65,942,843),27151=>array(30,-69,954,826),27152=>array(26,-65,958,839),27153=>array(36,-61,985,836),27154=>array(26,-65,945,830),27155=>array(39,-69,949,831),27156=>array(36,-67,970,842),27157=>array(30,-77,973,832),27158=>array(46,-72,961,853),27159=>array(43,-68,956,826),27160=>array(32,-70,956,824),27161=>array(33,-70,957,818),27162=>array(33,-70,959,838),27163=>array(44,-61,971,833),27164=>array(33,-79,961,841),27165=>array(39,-71,962,828),27166=>array(46,-61,957,830),27167=>array(41,-67,944,826),27168=>array(30,-69,953,826),27169=>array(31,-69,952,828),27170=>array(33,-70,959,847),27171=>array(35,-62,978,848),27172=>array(6,-73,993,824),27173=>array(38,-73,970,825),27174=>array(40,-67,958,831),27175=>array(35,-76,976,828),27176=>array(39,-68,955,832),27177=>array(25,-72,957,832),27178=>array(26,-72,944,822),27179=>array(37,-62,964,832),27180=>array(33,-70,964,831),27181=>array(33,-60,972,831),27182=>array(33,-70,957,818),27183=>array(18,-72,929,819),27184=>array(36,-63,957,838),27185=>array(22,-74,953,832),27186=>array(34,-55,966,852),27187=>array(32,-66,955,830),27188=>array(34,-71,965,831),27189=>array(44,-67,969,836),27190=>array(27,-70,948,818),27191=>array(27,-67,950,844),27192=>array(48,-68,971,833),27193=>array(39,-71,953,825),27194=>array(38,-68,954,832),27195=>array(39,-81,958,826),27196=>array(39,-77,953,820),27197=>array(35,-65,957,851),27198=>array(30,-66,977,830),27199=>array(33,-70,954,828),27200=>array(44,-64,984,851),27201=>array(37,-69,956,828),27202=>array(35,-76,974,851),27203=>array(24,-70,959,843),27204=>array(34,-69,960,835),27205=>array(21,-70,954,845),27206=>array(46,-74,961,831),27207=>array(31,-67,963,837),27208=>array(36,-69,962,830),27209=>array(33,-80,956,825),27210=>array(34,-71,946,818),27211=>array(36,-62,962,836),27212=>array(33,-70,911,818),27213=>array(39,-68,897,822),27214=>array(38,-70,963,826),27215=>array(36,-71,951,838),27216=>array(44,-65,972,832),27217=>array(34,-68,964,826),27218=>array(36,-70,954,838),27219=>array(36,-72,948,838),27220=>array(36,-79,969,839),27221=>array(44,-58,951,836),27222=>array(43,-68,972,825),27223=>array(31,-68,948,839),27224=>array(36,-61,923,828),27225=>array(27,-69,951,830),27226=>array(39,-70,952,829),27227=>array(21,-68,972,828),27228=>array(47,-64,966,816),27229=>array(40,-68,953,826),27230=>array(35,-65,963,827),27231=>array(36,-68,963,829),27232=>array(37,-80,956,837),27233=>array(38,-70,964,837),27234=>array(37,-72,948,842),27235=>array(37,-72,957,847),27236=>array(44,-67,970,838),27237=>array(47,-69,952,821),27238=>array(32,-58,958,847),27239=>array(45,-61,917,849),27240=>array(33,-74,962,830),27241=>array(36,-67,958,826),27242=>array(38,-79,964,826),27243=>array(47,-70,956,827),27244=>array(37,-72,957,819),27245=>array(40,-72,957,824),27246=>array(53,-72,913,834),27247=>array(39,-70,944,824),27248=>array(37,-72,948,863),27249=>array(24,-69,914,829),27250=>array(37,-72,933,833),27251=>array(30,-55,967,821),27252=>array(30,-71,956,830),27253=>array(37,-72,979,832),27254=>array(43,-74,964,821),27255=>array(32,-73,962,838),27256=>array(43,-73,959,818),27257=>array(21,-73,928,817),27258=>array(37,-72,911,819),27259=>array(29,-72,966,819),27260=>array(15,-63,980,837),27261=>array(41,-76,973,833),27262=>array(41,-66,974,828),27263=>array(26,-58,955,832),27264=>array(29,-61,956,841),27265=>array(46,-65,991,855),27266=>array(37,-71,966,828),27267=>array(50,-76,971,819),27268=>array(31,-66,974,844),27269=>array(24,-72,964,823),27270=>array(39,-73,943,836),27271=>array(36,-65,960,834),27272=>array(37,-72,958,819),27273=>array(37,-65,936,826),27274=>array(36,-66,980,829),27275=>array(37,-72,981,820),27276=>array(43,-65,970,829),27277=>array(31,-76,970,829),27278=>array(22,-65,971,851),27279=>array(37,-72,972,833),27280=>array(21,-70,949,838),27281=>array(50,-68,933,826),27282=>array(42,-75,967,826),27283=>array(27,-71,980,834),27284=>array(46,-59,924,839),27285=>array(51,-76,966,824),27286=>array(27,-69,974,834),27287=>array(33,-54,973,840),27288=>array(33,-72,965,849),27289=>array(35,-76,923,815),27290=>array(35,-74,976,827),27291=>array(31,-71,977,826),27292=>array(32,-64,974,861),27293=>array(41,-78,970,819),27294=>array(27,-66,961,837),27295=>array(29,-83,962,823),27296=>array(34,-65,954,834),27297=>array(34,-70,954,826),27298=>array(33,-68,969,858),27299=>array(33,-63,959,838),27300=>array(35,-71,980,827),27301=>array(29,-73,964,842),27302=>array(41,-70,919,826),27303=>array(33,-70,974,823),27304=>array(33,-74,960,829),27305=>array(22,-64,921,857),27306=>array(42,-64,973,849),27307=>array(15,-63,943,830),27308=>array(29,-61,965,836),27309=>array(40,-72,981,828),27310=>array(40,-65,950,833),27311=>array(38,-56,970,838),27312=>array(35,-68,936,845),27313=>array(25,-56,943,832),27314=>array(35,-68,917,832),27315=>array(40,-65,966,846),27316=>array(34,-68,974,827),27317=>array(35,-69,942,824),27318=>array(38,-71,983,834),27319=>array(36,-70,959,821),27320=>array(37,-63,952,839),27321=>array(38,-65,965,842),27322=>array(45,-64,969,842),27323=>array(24,-62,957,839),27324=>array(27,-69,953,825),27325=>array(36,-61,967,831),27326=>array(105,-51,918,822),27327=>array(34,-68,958,829),27328=>array(36,-69,974,840),27329=>array(26,-66,945,839),27330=>array(36,-50,957,840),27331=>array(44,-66,954,835),27332=>array(44,-71,977,835),27333=>array(36,-71,975,839),27334=>array(48,-68,977,824),27335=>array(32,-75,963,825),27336=>array(31,-62,984,847),27337=>array(27,-70,953,826),27338=>array(31,-71,913,824),27339=>array(42,-70,958,840),27340=>array(44,-69,958,832),27341=>array(40,-75,961,831),27342=>array(35,-71,957,849),27343=>array(28,-64,984,828),27344=>array(40,-65,969,813),27345=>array(43,-66,935,827),27346=>array(30,-73,973,831),27347=>array(30,-61,974,849),27348=>array(42,-65,958,831),27349=>array(42,-72,967,831),27350=>array(34,-62,965,836),27351=>array(42,-67,958,833),27352=>array(42,-62,961,831),27353=>array(44,-70,949,824),27354=>array(39,-61,904,833),27355=>array(47,-66,959,840),27356=>array(43,-59,973,843),27357=>array(30,-70,971,835),27358=>array(33,-66,972,841),27359=>array(32,-71,969,841),27360=>array(37,-71,986,838),27361=>array(58,-72,950,833),27362=>array(20,-72,972,837),27363=>array(22,-72,974,841),27364=>array(41,-68,955,841),27365=>array(33,-71,959,847),27366=>array(29,-68,970,841),27367=>array(34,-65,957,840),27368=>array(36,-71,962,833),27369=>array(44,-65,920,833),27370=>array(32,-65,955,832),27371=>array(41,-68,959,831),27372=>array(43,-62,971,843),27373=>array(30,-62,965,831),27374=>array(36,-67,951,827),27375=>array(31,-68,981,842),27376=>array(30,-78,980,841),27377=>array(43,-65,967,840),27378=>array(33,-65,979,839),27379=>array(35,-58,969,855),27380=>array(19,-72,970,843),27381=>array(27,-66,973,840),27382=>array(32,-62,960,831),27383=>array(16,-45,965,851),27384=>array(38,-72,986,835),27385=>array(40,-68,957,830),27386=>array(38,-61,936,832),27387=>array(45,-62,958,826),27388=>array(28,-78,978,832),27389=>array(48,-68,956,813),27390=>array(31,-64,969,829),27391=>array(32,-67,951,835),27392=>array(33,-70,977,837),27393=>array(22,-70,987,832),27394=>array(31,-69,959,828),27395=>array(34,-58,964,853),27396=>array(35,-65,909,836),27397=>array(31,-69,973,827),27398=>array(21,-66,969,836),27399=>array(31,-66,955,827),27400=>array(45,-64,944,838),27401=>array(40,-62,962,835),27402=>array(38,-71,952,830),27403=>array(33,-68,960,823),27404=>array(33,-68,970,838),27405=>array(28,-68,937,832),27406=>array(44,-71,964,842),27407=>array(34,-67,967,830),27408=>array(39,-73,960,828),27409=>array(33,-70,970,831),27410=>array(40,-74,961,844),27411=>array(33,-78,966,836),27412=>array(33,-65,970,828),27413=>array(33,-70,987,828),27414=>array(40,-63,961,841),27415=>array(39,-65,942,830),27416=>array(47,-68,933,827),27417=>array(49,-62,959,831),27418=>array(35,-68,978,846),27419=>array(38,-71,932,835),27420=>array(40,-65,975,839),27421=>array(56,-67,964,843),27422=>array(49,-64,968,828),27423=>array(36,-69,984,835),27424=>array(51,-69,950,842),27425=>array(49,-66,953,822),27426=>array(20,-64,948,839),27427=>array(48,-72,962,831),27428=>array(41,-75,952,819),27429=>array(106,-75,968,829),27430=>array(35,-75,968,838),27431=>array(101,-66,953,833),27432=>array(56,-73,971,829),27433=>array(51,-62,947,822),27434=>array(90,-68,956,837),27435=>array(66,-68,950,847),27436=>array(44,-68,971,848),27437=>array(115,-73,961,830),27438=>array(60,-68,971,850),27439=>array(55,-74,967,830),27440=>array(30,-72,959,831),27441=>array(34,-72,959,834),27442=>array(47,-65,969,837),27443=>array(107,-74,962,830),27444=>array(101,-73,959,848),27445=>array(46,-62,970,853),27446=>array(44,-76,964,826),27447=>array(30,-69,963,838),27448=>array(47,-66,967,839),27449=>array(57,-79,975,830),27450=>array(61,-65,968,832),27451=>array(50,-72,958,838),27452=>array(50,-72,969,830),27453=>array(39,-71,977,839),27454=>array(50,-70,954,835),27455=>array(54,-67,968,841),27456=>array(46,-76,983,824),27457=>array(65,-73,985,827),27458=>array(61,-71,975,833),27459=>array(58,-72,972,838),27460=>array(102,-69,969,827),27461=>array(56,-72,977,826),27462=>array(47,-71,964,843),27463=>array(22,-74,968,842),27464=>array(29,-73,973,844),27465=>array(34,-70,970,841),27466=>array(54,-73,963,846),27467=>array(33,-69,967,826),27468=>array(65,-66,959,839),27469=>array(51,-73,970,841),27470=>array(39,-72,967,830),27471=>array(49,-72,961,842),27472=>array(110,-79,961,830),27473=>array(46,-69,977,831),27474=>array(60,-69,971,839),27475=>array(39,-65,963,841),27476=>array(32,-73,983,838),27477=>array(53,-83,972,825),27478=>array(60,-77,970,830),27479=>array(49,-68,975,840),27480=>array(52,-56,953,835),27481=>array(37,-67,964,856),27482=>array(64,-65,983,849),27483=>array(31,-70,983,864),27484=>array(37,-80,972,836),27485=>array(63,-72,971,838),27486=>array(55,-71,967,829),27487=>array(48,-67,969,841),27488=>array(53,-59,969,849),27489=>array(37,-68,962,836),27490=>array(76,-6,931,791),27491=>array(100,-5,920,756),27492=>array(37,-57,949,804),27493=>array(57,-60,932,835),27494=>array(63,-58,942,834),27495=>array(40,-66,956,830),27496=>array(41,-66,952,835),27497=>array(53,-62,962,833),27498=>array(63,-20,919,779),27499=>array(40,-28,953,783),27500=>array(46,-74,942,822),27501=>array(53,-67,951,829),27502=>array(37,-59,957,836),27503=>array(98,-70,938,835),27504=>array(60,-51,920,792),27505=>array(45,-20,956,836),27506=>array(45,-70,940,834),27507=>array(48,-70,943,834),27508=>array(33,-56,961,801),27509=>array(30,-55,955,849),27510=>array(80,-70,939,823),27511=>array(41,-58,944,789),27512=>array(47,-71,930,846),27513=>array(79,-75,921,767),27514=>array(71,-75,815,798),27515=>array(60,-67,959,761),27516=>array(26,-60,916,801),27517=>array(41,-68,955,828),27518=>array(58,-59,921,843),27519=>array(56,-62,972,840),27520=>array(39,-57,967,840),27521=>array(44,-74,950,774),27522=>array(49,-47,957,785),27523=>array(41,-73,964,827),27524=>array(54,-71,966,853),27525=>array(53,-74,952,827),27526=>array(65,-74,951,829),27527=>array(31,-68,913,826),27528=>array(44,-63,951,838),27529=>array(63,-75,921,835),27530=>array(61,-66,964,832),27531=>array(47,-61,965,845),27532=>array(33,-73,954,773),27533=>array(57,-64,953,837),27534=>array(43,-73,961,821),27535=>array(42,-76,950,821),27536=>array(52,-70,968,829),27537=>array(52,-74,960,823),27538=>array(32,-87,910,778),27539=>array(35,-71,948,820),27540=>array(57,-69,975,831),27541=>array(55,-58,949,829),27542=>array(40,-67,954,835),27543=>array(38,-53,968,835),27544=>array(68,-60,952,832),27545=>array(57,-64,958,829),27546=>array(44,-70,939,823),27547=>array(48,-47,947,788),27548=>array(39,-68,982,842),27549=>array(39,-68,974,829),27550=>array(40,-60,958,800),27551=>array(54,-67,970,782),27552=>array(39,-71,971,843),27553=>array(36,-71,930,830),27554=>array(50,-70,954,826),27555=>array(54,-72,952,829),27556=>array(55,-70,963,845),27557=>array(39,-78,953,834),27558=>array(43,-69,946,834),27559=>array(52,-71,978,829),27560=>array(43,-68,970,833),27561=>array(35,-65,976,798),27562=>array(47,-20,954,833),27563=>array(57,-64,953,789),27564=>array(50,-64,941,786),27565=>array(35,-44,965,807),27566=>array(40,-67,977,854),27567=>array(55,-66,960,838),27568=>array(36,-68,963,830),27569=>array(42,-73,954,829),27570=>array(44,-66,946,829),27571=>array(52,-70,948,788),27572=>array(98,-66,959,792),27573=>array(41,-73,964,832),27574=>array(58,-80,958,819),27575=>array(46,-68,952,836),27576=>array(45,-69,976,833),27577=>array(81,-72,972,787),27578=>array(51,-72,967,824),27579=>array(51,-70,963,833),27580=>array(49,-68,964,833),27581=>array(35,-65,976,847),27582=>array(35,-72,960,823),27583=>array(31,-73,969,799),27584=>array(73,-64,962,836),27585=>array(58,-68,958,833),27586=>array(52,-67,944,815),27587=>array(58,-72,973,843),27588=>array(58,-69,963,835),27589=>array(39,-72,963,831),27590=>array(69,-68,958,810),27591=>array(53,-76,974,819),27592=>array(55,-73,963,830),27593=>array(71,-29,951,800),27594=>array(41,-63,976,833),27595=>array(92,-57,935,798),27596=>array(74,-58,926,788),27597=>array(77,-66,931,783),27598=>array(64,-63,933,843),27599=>array(64,-63,939,843),27600=>array(55,-65,952,836),27601=>array(44,-62,967,805),27602=>array(56,-69,944,832),27603=>array(43,-62,964,835),27604=>array(59,-36,956,811),27605=>array(58,-59,908,816),27606=>array(63,-43,951,816),27607=>array(87,-67,965,820),27608=>array(76,-62,969,794),27609=>array(41,-54,941,826),27610=>array(56,-65,956,845),27611=>array(79,-23,944,822),27612=>array(52,-18,971,840),27613=>array(52,-18,971,840),27614=>array(78,-41,947,831),27615=>array(52,-40,954,841),27616=>array(49,-32,956,823),27617=>array(52,-18,971,840),27618=>array(55,-27,961,837),27619=>array(71,-32,949,778),27620=>array(48,-62,956,830),27621=>array(52,-18,971,841),27622=>array(55,-58,956,836),27623=>array(62,-26,965,834),27624=>array(54,-25,954,833),27625=>array(52,-18,971,840),27626=>array(35,-19,931,836),27627=>array(80,-54,933,840),27628=>array(51,-24,969,832),27629=>array(44,-39,954,836),27630=>array(30,-65,964,835),27631=>array(59,-30,967,835),27632=>array(47,-29,958,834),27633=>array(47,-28,958,833),27634=>array(39,-76,955,819),27635=>array(70,-44,970,826),27636=>array(47,-28,958,823),27637=>array(30,-65,933,844),27638=>array(44,-28,972,855),27639=>array(90,-55,961,848),27640=>array(55,-28,959,825),27641=>array(28,-70,972,847),27642=>array(48,-28,960,841),27643=>array(31,-65,962,840),27644=>array(31,-68,963,819),27645=>array(44,-32,971,832),27646=>array(47,-67,960,822),27647=>array(35,-67,967,853),27648=>array(54,-69,966,824),27649=>array(60,-28,972,835),27650=>array(53,-76,958,825),27651=>array(46,-45,962,839),27652=>array(38,-54,960,844),27653=>array(49,-34,959,841),27654=>array(54,-43,974,840),27655=>array(30,-25,928,835),27656=>array(68,-56,946,844),27657=>array(37,-58,964,840),27658=>array(54,-43,974,854),27659=>array(52,-69,971,828),27660=>array(48,-40,978,843),27661=>array(33,-66,966,830),27662=>array(61,-46,961,825),27663=>array(83,-68,934,828),27664=>array(100,-54,907,832),27665=>array(51,-67,950,784),27666=>array(91,-71,936,839),27667=>array(111,-61,951,781),27668=>array(39,-56,966,853),27669=>array(36,-67,957,847),27670=>array(51,-64,965,845),27671=>array(36,-62,963,853),27672=>array(46,-69,966,840),27673=>array(44,-62,965,852),27674=>array(26,-68,959,849),27675=>array(52,-69,962,839),27676=>array(35,-63,959,849),27677=>array(36,-75,960,835),27678=>array(36,-72,960,835),27679=>array(37,-76,962,829),27680=>array(10,-71,933,837),27681=>array(45,-76,961,845),27682=>array(38,-63,943,832),27683=>array(50,-67,959,838),27684=>array(40,-63,979,849),27685=>array(37,-66,968,842),27686=>array(41,-65,972,858),27687=>array(42,-70,958,832),27688=>array(41,-73,961,835),27689=>array(21,-64,938,825),27690=>array(38,-66,968,849),27691=>array(47,-68,957,831),27692=>array(39,-61,974,854),27693=>array(38,-66,966,852),27694=>array(48,-79,963,835),27695=>array(45,-74,959,841),27696=>array(35,-70,964,839),27697=>array(25,-69,955,830),27698=>array(25,-70,955,830),27699=>array(43,-71,971,833),27700=>array(47,-64,953,826),27701=>array(320,-38,602,803),27702=>array(51,-74,958,782),27703=>array(47,-64,953,826),27704=>array(51,-65,957,838),27705=>array(85,-28,958,830),27706=>array(40,-64,962,826),27707=>array(69,-60,921,829),27708=>array(54,-39,945,830),27709=>array(27,-71,967,846),27710=>array(71,-32,962,814),27711=>array(60,-65,966,823),27712=>array(51,-55,941,808),27713=>array(58,-59,962,833),27714=>array(61,-65,938,835),27715=>array(60,-62,977,814),27716=>array(60,-63,942,835),27717=>array(59,-51,937,814),27718=>array(33,-65,961,790),27719=>array(46,-49,920,803),27720=>array(70,-59,896,790),27721=>array(40,-59,956,804),27722=>array(57,-66,967,813),27723=>array(59,-57,912,836),27724=>array(62,-72,910,829),27725=>array(44,-71,975,826),27726=>array(53,-62,959,825),27727=>array(62,-65,960,829),27728=>array(67,-71,919,831),27729=>array(67,-42,930,826),27730=>array(55,-49,958,836),27731=>array(55,-64,954,802),27732=>array(60,-37,967,842),27733=>array(57,-65,898,820),27734=>array(54,-65,954,833),27735=>array(48,-67,948,798),27736=>array(48,-59,933,831),27737=>array(51,-67,957,814),27738=>array(49,-52,948,802),27739=>array(43,-63,975,812),27740=>array(33,-46,945,808),27741=>array(47,-62,947,847),27742=>array(58,-68,948,781),27743=>array(65,-51,940,796),27744=>array(48,-46,959,825),27745=>array(58,-52,943,802),27746=>array(74,-58,945,811),27747=>array(92,-68,957,831),27748=>array(51,-63,899,790),27749=>array(52,-70,977,828),27750=>array(44,-68,963,826),27751=>array(69,-68,964,801),27752=>array(70,-57,900,812),27753=>array(55,-40,911,817),27754=>array(54,-41,944,809),27755=>array(53,-68,951,833),27756=>array(57,-67,964,822),27757=>array(61,-69,905,801),27758=>array(41,-65,904,831),27759=>array(48,-61,951,830),27760=>array(48,-64,962,835),27761=>array(50,-70,957,837),27762=>array(41,-68,955,820),27763=>array(49,-73,972,807),27764=>array(53,-64,944,846),27765=>array(53,-73,945,854),27766=>array(42,-66,962,830),27767=>array(59,-63,941,805),27768=>array(54,-69,949,833),27769=>array(58,-59,900,820),27770=>array(56,-72,970,836),27771=>array(41,-75,951,826),27772=>array(41,-75,951,811),27773=>array(63,-61,962,850),27774=>array(41,-62,955,814),27775=>array(62,-57,950,820),27776=>array(45,-75,931,825),27777=>array(56,-48,947,811),27778=>array(58,-67,950,831),27779=>array(48,-64,962,819),27780=>array(46,-60,946,807),27781=>array(47,-70,948,812),27782=>array(63,-66,951,817),27783=>array(48,-60,951,849),27784=>array(56,-73,946,824),27785=>array(51,-58,952,788),27786=>array(49,-58,973,833),27787=>array(51,-69,960,827),27788=>array(41,-44,963,833),27789=>array(56,-38,939,794),27790=>array(45,-62,961,844),27791=>array(62,-67,926,814),27792=>array(43,-63,960,833),27793=>array(66,-51,947,821),27794=>array(58,-71,953,841),27795=>array(54,-62,962,835),27796=>array(54,-60,944,814),27797=>array(59,-56,926,855),27798=>array(54,-64,914,839),27799=>array(35,-58,976,803),27800=>array(52,-50,964,817),27801=>array(51,-62,968,812),27802=>array(65,-44,966,807),27803=>array(41,-65,942,837),27804=>array(70,-66,953,837),27805=>array(31,-69,969,835),27806=>array(52,-74,939,826),27807=>array(41,-61,903,831),27808=>array(66,-64,959,821),27809=>array(47,-62,959,805),27810=>array(40,-66,973,805),27811=>array(58,-63,920,813),27812=>array(42,-47,929,822),27813=>array(41,-57,916,827),27814=>array(52,-46,948,837),27815=>array(28,-63,967,821),27816=>array(58,-58,937,824),27817=>array(41,-62,892,819),27818=>array(45,-62,874,836),27819=>array(56,-61,980,833),27820=>array(62,-72,984,819),27821=>array(39,-67,947,829),27822=>array(57,-30,957,820),27823=>array(52,-52,967,813),27824=>array(53,-71,951,803),27825=>array(53,-44,951,828),27826=>array(38,-58,953,810),27827=>array(49,-67,952,796),27828=>array(46,-47,978,862),27829=>array(73,-53,947,840),27830=>array(51,-73,956,800),27831=>array(53,-81,961,827),27832=>array(42,-63,915,823),27833=>array(64,-69,903,836),27834=>array(54,-74,900,801),27835=>array(48,-64,959,834),27836=>array(52,-61,896,817),27837=>array(69,-64,956,836),27838=>array(67,-56,946,836),27839=>array(43,-48,936,814),27840=>array(45,-68,891,806),27841=>array(59,-62,965,810),27842=>array(45,-73,894,813),27843=>array(47,-70,896,825),27844=>array(39,-63,953,835),27845=>array(49,-66,897,811),27846=>array(28,-50,976,856),27847=>array(48,-73,909,818),27848=>array(81,-66,984,829),27849=>array(46,-73,960,843),27850=>array(60,-57,875,847),27851=>array(39,-66,968,828),27852=>array(42,-32,972,829),27853=>array(44,-67,968,835),27854=>array(97,-62,955,845),27855=>array(42,-71,915,830),27856=>array(64,-68,918,832),27857=>array(57,-75,907,831),27858=>array(55,-64,975,849),27859=>array(50,-53,958,808),27860=>array(46,-53,947,831),27861=>array(64,-59,945,821),27862=>array(56,-68,924,837),27863=>array(61,-53,909,810),27864=>array(78,-67,931,825),27865=>array(54,-64,952,818),27866=>array(38,-39,960,838),27867=>array(56,-67,963,836),27868=>array(41,-69,958,834),27869=>array(55,-68,952,842),27870=>array(51,-72,910,824),27871=>array(62,-63,953,806),27872=>array(36,-50,969,870),27873=>array(46,-46,968,834),27874=>array(50,-75,961,831),27875=>array(62,-27,956,820),27876=>array(59,-65,960,828),27877=>array(56,-64,957,821),27878=>array(62,-57,973,818),27879=>array(55,-70,960,828),27880=>array(60,-46,939,838),27881=>array(49,-58,958,831),27882=>array(53,-59,914,820),27883=>array(54,-53,949,831),27884=>array(53,-72,972,846),27885=>array(52,-73,948,823),27886=>array(63,-69,967,825),27887=>array(49,-63,951,812),27888=>array(38,-65,963,838),27889=>array(59,-71,983,831),27890=>array(50,-46,922,856),27891=>array(42,-58,980,851),27892=>array(58,-26,988,825),27893=>array(57,-67,964,777),27894=>array(45,-66,929,815),27895=>array(57,-62,929,822),27896=>array(53,-62,910,822),27897=>array(53,-50,955,798),27898=>array(42,-62,933,828),27899=>array(43,-55,893,806),27900=>array(47,-76,949,814),27901=>array(55,-70,948,805),27902=>array(63,-58,926,799),27903=>array(64,-72,964,812),27904=>array(51,-69,954,838),27905=>array(57,-71,957,827),27906=>array(57,-66,945,846),27907=>array(44,-78,972,829),27908=>array(71,-57,915,803),27909=>array(57,-66,965,806),27910=>array(47,-60,964,805),27911=>array(56,-63,910,810),27912=>array(50,-73,964,829),27913=>array(49,-67,955,822),27914=>array(56,-64,970,840),27915=>array(42,-65,951,846),27916=>array(45,-62,902,830),27917=>array(52,-44,954,812),27918=>array(58,-69,898,842),27919=>array(56,-70,954,811),27920=>array(55,-70,955,830),27921=>array(49,-66,974,841),27922=>array(46,-53,947,813),27923=>array(55,-65,941,824),27924=>array(58,-61,935,838),27925=>array(41,-73,975,818),27926=>array(46,-70,962,807),27927=>array(60,-62,963,833),27928=>array(47,-74,953,825),27929=>array(42,-62,967,832),27930=>array(49,-70,968,834),27931=>array(57,-72,959,842),27932=>array(38,-67,981,849),27933=>array(55,-71,959,835),27934=>array(48,-55,898,819),27935=>array(45,-74,973,830),27936=>array(51,-68,954,844),27937=>array(71,-67,965,824),27938=>array(53,-79,952,830),27939=>array(51,-65,955,824),27940=>array(44,-38,962,845),27941=>array(48,-62,959,842),27942=>array(52,-70,932,830),27943=>array(42,-77,945,828),27944=>array(52,-74,963,835),27945=>array(55,-63,974,831),27946=>array(69,-60,940,834),27947=>array(50,-53,970,829),27948=>array(53,-71,963,818),27949=>array(50,-45,953,812),27950=>array(52,-60,967,825),27951=>array(53,-68,948,829),27952=>array(54,-52,949,805),27953=>array(56,-64,959,812),27954=>array(57,-70,897,820),27955=>array(56,-64,908,834),27956=>array(48,-65,956,847),27957=>array(50,-59,908,850),27958=>array(56,-63,917,838),27959=>array(55,-57,956,809),27960=>array(59,-75,965,819),27961=>array(54,-53,959,802),27962=>array(55,-72,889,830),27963=>array(43,-70,942,826),27964=>array(50,-54,956,829),27965=>array(50,-59,986,845),27966=>array(51,-72,966,832),27967=>array(58,-63,988,854),27968=>array(48,-73,909,828),27969=>array(40,-70,964,830),27970=>array(48,-73,970,836),27971=>array(49,-74,939,818),27972=>array(48,-61,952,839),27973=>array(46,-70,939,853),27974=>array(34,-61,947,836),27975=>array(37,-63,929,834),27976=>array(62,-80,920,819),27977=>array(46,-71,930,822),27978=>array(57,-54,935,816),27979=>array(48,-63,880,828),27980=>array(45,-63,956,825),27981=>array(45,-68,940,822),27982=>array(36,-64,952,835),27983=>array(55,-68,871,821),27984=>array(54,-68,917,846),27985=>array(57,-60,909,811),27986=>array(46,-69,920,822),27987=>array(40,-58,950,831),27988=>array(43,-64,911,790),27989=>array(54,-64,936,810),27990=>array(46,-66,934,835),27991=>array(56,-63,956,833),27992=>array(66,-64,970,821),27993=>array(41,-65,954,835),27994=>array(24,-54,948,846),27995=>array(42,-70,955,839),27996=>array(47,-65,963,824),27997=>array(52,-45,965,833),27998=>array(50,-54,972,829),27999=>array(50,-76,971,839),28000=>array(40,-65,951,838),28001=>array(60,-63,957,844),28002=>array(63,-44,966,818),28003=>array(56,-64,960,839),28004=>array(52,-65,940,833),28005=>array(45,-35,955,818),28006=>array(42,-52,956,847),28007=>array(53,-43,951,813),28008=>array(57,-68,972,831),28009=>array(29,-63,944,841),28010=>array(62,-63,962,829),28011=>array(46,-60,938,817),28012=>array(48,-49,952,817),28013=>array(47,-70,962,816),28014=>array(46,-68,951,834),28015=>array(54,-47,949,835),28016=>array(55,-65,909,831),28017=>array(54,-70,963,808),28018=>array(54,-72,969,842),28019=>array(57,-76,957,843),28020=>array(53,-60,959,847),28021=>array(43,-74,954,831),28022=>array(46,-69,945,836),28023=>array(42,-62,956,843),28024=>array(42,-69,949,798),28025=>array(43,-67,971,830),28026=>array(54,-67,911,827),28027=>array(50,-65,908,819),28028=>array(42,-65,962,840),28029=>array(53,-66,958,821),28030=>array(53,-70,953,830),28031=>array(56,-78,955,810),28032=>array(51,-66,963,811),28033=>array(55,-76,966,822),28034=>array(48,-68,975,843),28035=>array(52,-71,906,812),28036=>array(55,-68,956,830),28037=>array(28,-26,960,816),28038=>array(44,-67,950,809),28039=>array(50,-38,956,820),28040=>array(64,-67,917,833),28041=>array(48,-58,956,834),28042=>array(55,-52,972,809),28043=>array(56,-71,968,826),28044=>array(49,-61,897,818),28045=>array(50,-67,947,832),28046=>array(36,-66,964,813),28047=>array(63,-68,948,810),28048=>array(59,-67,964,827),28049=>array(49,-68,961,825),28050=>array(45,-68,948,814),28051=>array(74,-65,915,814),28052=>array(53,-67,996,829),28053=>array(42,-68,927,844),28054=>array(39,-48,956,859),28055=>array(57,-70,955,840),28056=>array(37,-53,973,863),28057=>array(36,-68,959,827),28058=>array(54,-64,968,852),28059=>array(61,-61,937,834),28060=>array(41,-59,955,844),28061=>array(52,-54,911,834),28062=>array(44,-59,943,823),28063=>array(44,-58,938,816),28064=>array(49,-63,869,800),28065=>array(41,-70,893,795),28066=>array(51,-67,929,813),28067=>array(22,-63,946,842),28068=>array(45,-59,944,828),28069=>array(50,-61,908,848),28070=>array(62,-53,918,829),28071=>array(46,-62,870,819),28072=>array(45,-60,956,821),28073=>array(53,-41,928,798),28074=>array(45,-67,952,845),28075=>array(51,-65,928,850),28076=>array(67,-67,933,827),28077=>array(76,-69,964,832),28078=>array(63,-66,924,830),28079=>array(39,-64,951,818),28080=>array(58,-67,967,794),28081=>array(50,-69,961,804),28082=>array(52,-68,961,839),28083=>array(66,-52,956,833),28084=>array(43,-56,962,857),28085=>array(53,-63,911,810),28086=>array(69,-50,941,828),28087=>array(85,-71,963,820),28088=>array(53,-65,900,824),28089=>array(51,-72,946,840),28090=>array(72,-73,932,813),28091=>array(54,-72,962,825),28092=>array(49,-61,964,831),28093=>array(66,-71,957,816),28094=>array(82,-68,946,820),28095=>array(54,-51,975,815),28096=>array(54,-74,956,820),28097=>array(54,-71,944,841),28098=>array(78,-65,953,813),28099=>array(50,-50,951,834),28100=>array(65,-62,926,842),28101=>array(40,-58,953,839),28102=>array(54,-64,958,844),28103=>array(48,-65,961,830),28104=>array(65,-80,908,800),28105=>array(84,-71,965,815),28106=>array(57,-70,897,829),28107=>array(28,-63,968,841),28108=>array(45,-62,935,838),28109=>array(66,-77,906,804),28110=>array(66,-67,967,832),28111=>array(88,-74,971,819),28112=>array(85,-69,906,806),28113=>array(31,-66,975,829),28114=>array(35,-66,953,838),28115=>array(63,-72,956,823),28116=>array(69,-56,955,834),28117=>array(80,-60,954,832),28118=>array(38,-65,945,836),28119=>array(59,-62,904,828),28120=>array(47,-58,911,847),28121=>array(40,-62,961,836),28122=>array(48,-66,982,843),28123=>array(71,-71,905,821),28124=>array(74,-75,911,806),28125=>array(40,-62,960,806),28126=>array(29,-65,956,832),28127=>array(37,-54,970,849),28128=>array(46,-64,955,814),28129=>array(47,-62,965,846),28130=>array(79,-70,958,820),28131=>array(50,-58,957,850),28132=>array(40,-61,965,835),28133=>array(40,-64,956,837),28134=>array(50,-36,957,843),28135=>array(50,-39,989,843),28136=>array(57,-61,950,834),28137=>array(47,-73,964,835),28138=>array(39,-58,991,856),28139=>array(41,-42,943,827),28140=>array(24,-61,948,840),28141=>array(70,-68,961,824),28142=>array(43,-59,962,849),28143=>array(50,-66,941,832),28144=>array(38,-53,969,848),28145=>array(44,-68,963,808),28146=>array(57,-79,956,823),28147=>array(50,-61,955,831),28148=>array(34,-33,955,846),28149=>array(47,-65,900,830),28150=>array(52,-65,985,836),28151=>array(55,-60,961,803),28152=>array(39,-64,943,833),28153=>array(42,-37,984,854),28154=>array(42,-60,978,845),28155=>array(53,-55,962,837),28156=>array(49,-68,978,827),28157=>array(64,-53,951,824),28158=>array(51,-69,962,857),28159=>array(70,-68,922,838),28160=>array(76,-80,974,820),28161=>array(47,-68,961,823),28162=>array(51,-60,949,795),28163=>array(41,-70,951,821),28164=>array(44,-62,953,820),28165=>array(39,-67,943,833),28166=>array(42,-57,909,826),28167=>array(39,-63,924,800),28168=>array(42,-60,958,825),28169=>array(39,-67,966,824),28170=>array(59,-72,882,824),28171=>array(48,-31,956,834),28172=>array(46,-60,936,807),28173=>array(54,-75,912,827),28174=>array(52,-60,929,823),28175=>array(52,-62,954,833),28176=>array(36,-63,920,829),28177=>array(50,-48,933,799),28178=>array(36,-65,957,841),28179=>array(46,-57,979,828),28180=>array(50,-48,922,829),28181=>array(42,-57,909,826),28182=>array(60,-72,910,832),28183=>array(51,-61,964,839),28184=>array(82,-69,964,813),28185=>array(34,-65,951,838),28186=>array(47,-65,948,833),28187=>array(54,-76,956,837),28188=>array(50,-72,970,804),28189=>array(33,-76,965,843),28190=>array(81,-71,934,837),28191=>array(46,-62,921,849),28192=>array(53,-68,965,819),28193=>array(49,-71,973,832),28194=>array(29,-54,972,812),28195=>array(33,-29,959,843),28196=>array(63,-77,930,836),28197=>array(48,-70,956,811),28198=>array(51,-59,896,822),28199=>array(62,-71,919,838),28200=>array(46,-76,975,803),28201=>array(36,-61,943,781),28202=>array(61,-80,930,820),28203=>array(45,-65,978,830),28204=>array(64,-65,909,826),28205=>array(65,-65,913,808),28206=>array(50,-65,950,828),28207=>array(47,-56,961,826),28208=>array(54,-67,973,844),28209=>array(49,-49,959,825),28210=>array(55,-39,954,847),28211=>array(40,-70,952,813),28212=>array(62,-65,919,801),28213=>array(49,-70,956,825),28214=>array(57,-79,970,824),28215=>array(49,-58,967,856),28216=>array(54,-77,950,839),28217=>array(49,-50,919,855),28218=>array(28,-71,946,826),28219=>array(46,-72,960,831),28220=>array(58,-65,982,845),28221=>array(51,-74,962,822),28222=>array(43,-57,956,821),28223=>array(45,-67,980,829),28224=>array(52,-76,968,829),28225=>array(49,-72,963,834),28226=>array(52,-60,963,805),28227=>array(44,-61,961,832),28228=>array(80,-69,919,808),28229=>array(39,-46,968,855),28230=>array(43,-69,951,833),28231=>array(41,-73,947,829),28232=>array(48,-59,975,832),28233=>array(50,-71,952,824),28234=>array(49,-69,966,825),28235=>array(46,-71,950,838),28236=>array(52,-63,963,848),28237=>array(54,-64,956,833),28238=>array(43,-64,951,809),28239=>array(47,-71,939,832),28240=>array(48,-65,918,829),28241=>array(45,-48,963,820),28242=>array(52,-71,951,811),28243=>array(43,-53,959,823),28244=>array(50,-65,965,850),28245=>array(40,-73,978,826),28246=>array(68,-68,912,829),28247=>array(69,-61,954,826),28248=>array(69,-65,916,829),28249=>array(69,-38,980,840),28250=>array(54,-70,965,828),28251=>array(38,-65,948,823),28252=>array(49,-65,979,811),28253=>array(55,-69,958,825),28254=>array(60,-77,955,833),28255=>array(42,-37,959,846),28256=>array(55,-66,954,835),28257=>array(52,-66,910,801),28258=>array(55,-72,951,811),28259=>array(48,-44,959,821),28260=>array(43,-57,959,853),28261=>array(45,-70,977,832),28262=>array(52,-46,955,807),28263=>array(44,-68,918,814),28264=>array(49,-67,974,812),28265=>array(45,-64,962,818),28266=>array(49,-63,974,843),28267=>array(50,-67,979,833),28268=>array(25,-67,964,833),28269=>array(29,-65,955,842),28270=>array(34,-50,939,810),28271=>array(51,-68,953,795),28272=>array(43,-48,938,844),28273=>array(56,-65,955,835),28274=>array(41,-56,968,846),28275=>array(55,-64,956,836),28276=>array(53,-40,959,851),28277=>array(45,-60,969,840),28278=>array(45,-70,974,840),28279=>array(49,-70,961,832),28280=>array(52,-70,961,830),28281=>array(49,-68,956,806),28282=>array(64,-65,949,840),28283=>array(45,-64,954,845),28284=>array(48,-46,948,821),28285=>array(65,-62,952,843),28286=>array(54,-61,953,836),28287=>array(49,-39,933,804),28288=>array(38,-59,922,828),28289=>array(44,-70,962,818),28290=>array(44,-67,903,831),28291=>array(48,-64,919,827),28292=>array(48,-63,969,840),28293=>array(29,-63,931,833),28294=>array(42,-69,949,817),28295=>array(29,-52,928,837),28296=>array(46,-68,939,839),28297=>array(48,-64,963,811),28298=>array(48,-67,969,817),28299=>array(48,-33,965,817),28300=>array(46,-61,966,823),28301=>array(49,-69,961,816),28302=>array(44,-54,954,849),28303=>array(37,-65,949,828),28304=>array(48,-70,943,799),28305=>array(51,-72,935,836),28306=>array(43,-71,960,827),28307=>array(65,-71,953,831),28308=>array(50,-74,971,833),28309=>array(50,-60,965,799),28310=>array(54,-67,951,843),28311=>array(38,-70,967,836),28312=>array(31,-41,938,832),28313=>array(45,-70,987,845),28314=>array(55,-68,966,827),28315=>array(55,-74,976,838),28316=>array(45,-66,925,830),28317=>array(43,-67,948,829),28318=>array(64,-72,963,806),28319=>array(48,-66,966,807),28320=>array(55,-45,952,835),28321=>array(35,-70,954,824),28322=>array(48,-34,952,839),28323=>array(38,-67,973,848),28324=>array(41,-71,932,797),28325=>array(53,-64,951,835),28326=>array(46,-69,964,830),28327=>array(51,-62,967,804),28328=>array(51,-59,972,842),28329=>array(26,-60,928,839),28330=>array(26,-69,977,838),28331=>array(53,-59,959,784),28332=>array(53,-59,980,829),28333=>array(53,-59,973,802),28334=>array(52,-68,968,838),28335=>array(66,-70,922,837),28336=>array(58,-49,954,830),28337=>array(44,-66,986,840),28338=>array(34,-64,970,837),28339=>array(51,-71,969,811),28340=>array(56,-67,975,842),28341=>array(56,-71,989,836),28342=>array(53,-68,964,835),28343=>array(46,-65,905,818),28344=>array(56,-67,980,830),28345=>array(62,-65,958,831),28346=>array(54,-60,927,803),28347=>array(57,-63,878,808),28348=>array(57,-41,959,816),28349=>array(36,-64,950,810),28350=>array(45,-64,965,851),28351=>array(45,-70,958,824),28352=>array(55,-73,950,835),28353=>array(44,-65,978,840),28354=>array(51,-62,959,848),28355=>array(36,-52,973,812),28356=>array(46,-65,991,863),28357=>array(53,-68,954,828),28358=>array(55,-68,951,802),28359=>array(53,-69,962,844),28360=>array(63,-64,954,839),28361=>array(47,-62,962,813),28362=>array(55,-63,972,847),28363=>array(45,-65,944,841),28364=>array(38,-58,978,853),28365=>array(48,-73,946,831),28366=>array(46,-65,952,830),28367=>array(35,-49,969,836),28368=>array(43,-68,970,835),28369=>array(49,-62,926,811),28370=>array(57,-74,951,797),28371=>array(41,-66,952,840),28372=>array(57,-65,950,836),28373=>array(27,-64,958,824),28374=>array(53,-71,965,836),28375=>array(43,-49,924,827),28376=>array(48,-61,959,814),28377=>array(47,-39,951,828),28378=>array(44,-79,961,841),28379=>array(43,-76,939,820),28380=>array(54,-70,987,852),28381=>array(44,-51,958,835),28382=>array(43,-72,938,829),28383=>array(37,-63,926,826),28384=>array(46,-64,943,805),28385=>array(38,-59,922,828),28386=>array(37,-43,921,824),28387=>array(37,-76,979,791),28388=>array(39,-57,940,832),28389=>array(45,-54,920,828),28390=>array(46,-60,951,841),28391=>array(46,-54,978,852),28392=>array(43,-70,927,844),28393=>array(40,-39,917,834),28394=>array(45,-69,969,810),28395=>array(50,-68,960,836),28396=>array(44,-64,963,815),28397=>array(55,-74,953,799),28398=>array(55,-75,977,832),28399=>array(45,-68,950,829),28400=>array(61,-65,952,847),28401=>array(61,-71,970,838),28402=>array(45,-68,945,859),28403=>array(36,-80,923,826),28404=>array(36,-68,954,831),28405=>array(49,-73,966,842),28406=>array(56,-73,972,829),28407=>array(63,-64,953,837),28408=>array(38,-64,951,832),28409=>array(54,-66,955,839),28410=>array(50,-49,956,818),28411=>array(50,-64,959,844),28412=>array(54,-60,967,826),28413=>array(56,-68,956,839),28414=>array(57,-68,961,827),28415=>array(46,-69,948,830),28416=>array(33,-72,961,826),28417=>array(44,-60,972,850),28418=>array(23,-65,971,795),28419=>array(51,-73,974,836),28420=>array(55,-81,952,832),28421=>array(55,-70,962,834),28422=>array(29,-64,969,838),28423=>array(51,-74,973,831),28424=>array(51,-68,955,830),28425=>array(41,-70,970,828),28426=>array(35,-72,945,837),28427=>array(41,-67,985,845),28428=>array(35,-41,965,830),28429=>array(50,-71,898,813),28430=>array(52,-73,968,827),28431=>array(46,-67,956,800),28432=>array(66,-71,964,840),28433=>array(47,-52,959,847),28434=>array(57,-74,963,830),28435=>array(37,-58,943,841),28436=>array(40,-66,960,840),28437=>array(38,-65,956,837),28438=>array(47,-62,972,833),28439=>array(46,-54,962,843),28440=>array(51,-53,964,821),28441=>array(69,-68,964,831),28442=>array(42,-31,957,805),28443=>array(46,-45,983,828),28444=>array(47,-52,964,824),28445=>array(50,-65,919,804),28446=>array(56,-69,961,827),28447=>array(51,-28,954,839),28448=>array(28,-63,974,840),28449=>array(56,-70,954,838),28450=>array(38,-68,962,838),28451=>array(37,-58,963,833),28452=>array(38,-63,948,819),28453=>array(50,-52,954,836),28454=>array(38,-68,978,841),28455=>array(47,-67,961,832),28456=>array(61,-70,972,843),28457=>array(38,-62,973,849),28458=>array(41,-62,961,829),28459=>array(36,-68,972,806),28460=>array(47,-69,969,837),28461=>array(57,-70,968,827),28462=>array(49,-69,959,844),28463=>array(50,-60,962,819),28464=>array(40,-68,908,842),28465=>array(39,-71,970,837),28466=>array(44,-68,962,816),28467=>array(41,-67,952,843),28468=>array(47,-76,934,824),28469=>array(33,-58,966,833),28470=>array(34,-35,958,829),28471=>array(37,-71,953,838),28472=>array(48,-68,956,836),28473=>array(56,-68,955,814),28474=>array(51,-72,968,823),28475=>array(47,-71,966,808),28476=>array(51,-70,955,823),28477=>array(63,-74,957,805),28478=>array(45,-62,974,840),28479=>array(36,-68,959,839),28480=>array(43,-50,962,814),28481=>array(38,-66,956,831),28482=>array(54,-58,945,833),28483=>array(50,-71,964,832),28484=>array(51,-65,972,846),28485=>array(45,-72,936,843),28486=>array(37,-63,913,825),28487=>array(43,-66,951,824),28488=>array(39,-55,971,824),28489=>array(44,-54,943,840),28490=>array(36,-61,967,831),28491=>array(40,-65,946,824),28492=>array(48,-46,944,841),28493=>array(40,-43,923,832),28494=>array(48,-71,977,824),28495=>array(51,-70,920,801),28496=>array(52,-64,974,838),28497=>array(30,-63,983,846),28498=>array(50,-64,977,828),28499=>array(55,-52,985,824),28500=>array(57,-68,951,823),28501=>array(47,-71,978,829),28502=>array(53,-45,958,801),28503=>array(49,-66,979,848),28504=>array(33,-66,969,832),28505=>array(31,-60,945,837),28506=>array(41,-59,954,846),28507=>array(55,-65,964,837),28508=>array(53,-48,956,840),28509=>array(44,-70,985,841),28510=>array(42,-65,972,833),28511=>array(58,-64,922,846),28512=>array(40,-70,955,797),28513=>array(49,-71,981,841),28514=>array(37,-66,955,832),28515=>array(48,-68,908,809),28516=>array(71,-69,915,794),28517=>array(69,-72,960,793),28518=>array(44,-64,968,838),28519=>array(52,-70,915,824),28520=>array(69,-62,966,847),28521=>array(49,-74,960,807),28522=>array(52,-71,916,832),28523=>array(49,-68,975,828),28524=>array(49,-69,951,805),28525=>array(40,-71,962,805),28526=>array(58,-79,905,832),28527=>array(44,-62,952,805),28528=>array(57,-68,960,837),28529=>array(57,-56,937,839),28530=>array(57,-70,950,828),28531=>array(50,-71,948,808),28532=>array(36,-63,934,823),28533=>array(38,-69,963,832),28534=>array(48,-63,977,807),28535=>array(52,-72,956,829),28536=>array(32,-71,964,834),28537=>array(32,-51,968,819),28538=>array(38,-68,960,808),28539=>array(48,-68,975,823),28540=>array(53,-49,953,845),28541=>array(51,-71,956,836),28542=>array(49,-74,974,821),28543=>array(36,-65,904,813),28544=>array(33,-38,956,810),28545=>array(46,-60,959,836),28546=>array(42,-69,974,838),28547=>array(33,-78,961,817),28548=>array(46,-52,964,837),28549=>array(45,-50,952,828),28550=>array(51,-61,973,840),28551=>array(44,-56,949,846),28552=>array(45,-70,974,841),28553=>array(35,-66,975,831),28554=>array(48,-62,957,851),28555=>array(50,-71,952,804),28556=>array(37,-64,954,843),28557=>array(42,-62,955,830),28558=>array(36,-59,972,845),28559=>array(34,-58,934,813),28560=>array(46,-75,954,812),28561=>array(40,-49,923,804),28562=>array(42,-56,973,818),28563=>array(49,-68,961,835),28564=>array(32,-50,950,853),28565=>array(55,-69,947,826),28566=>array(46,-68,906,812),28567=>array(37,-60,894,820),28568=>array(32,-51,956,834),28569=>array(41,-70,960,835),28570=>array(32,-68,949,844),28571=>array(32,-74,943,835),28572=>array(52,-58,883,820),28573=>array(44,-59,945,847),28574=>array(68,-74,972,826),28575=>array(62,-63,977,854),28576=>array(40,-46,962,804),28577=>array(39,-67,977,795),28578=>array(59,-68,910,824),28579=>array(41,-65,976,837),28580=>array(35,-68,956,822),28581=>array(66,-73,952,822),28582=>array(45,-69,969,810),28583=>array(43,-41,951,833),28584=>array(41,-43,951,850),28585=>array(87,-68,924,833),28586=>array(55,-77,995,820),28587=>array(66,-65,946,825),28588=>array(62,-79,965,825),28589=>array(71,-71,954,839),28590=>array(19,-65,969,855),28591=>array(69,-70,963,823),28592=>array(63,-69,970,836),28593=>array(45,-68,975,808),28594=>array(68,-69,958,823),28595=>array(24,-68,963,851),28596=>array(35,-73,976,806),28597=>array(35,-55,948,828),28598=>array(42,-44,956,849),28599=>array(36,-57,941,819),28600=>array(52,-57,962,831),28601=>array(28,-56,941,856),28602=>array(75,-53,975,837),28603=>array(45,-56,944,843),28604=>array(42,-65,953,841),28605=>array(56,-66,957,828),28606=>array(37,-57,951,833),28607=>array(71,-71,961,822),28608=>array(40,-72,962,840),28609=>array(54,-59,914,815),28610=>array(28,-68,962,830),28611=>array(34,-75,965,840),28612=>array(74,-68,974,810),28613=>array(39,-54,984,853),28614=>array(47,-67,966,836),28615=>array(41,-44,951,855),28616=>array(43,-68,964,818),28617=>array(44,-66,954,839),28618=>array(69,-78,964,825),28619=>array(77,-70,987,820),28620=>array(49,-71,970,824),28621=>array(70,-57,969,826),28622=>array(74,-68,954,812),28623=>array(68,-65,967,822),28624=>array(68,-64,986,822),28625=>array(39,-63,935,826),28626=>array(49,-58,951,835),28627=>array(28,-68,962,850),28628=>array(51,-71,958,802),28629=>array(53,-70,963,799),28630=>array(69,-63,961,802),28631=>array(39,-63,991,835),28632=>array(39,-60,956,849),28633=>array(52,-49,952,839),28634=>array(52,-65,937,829),28635=>array(43,-62,952,837),28636=>array(54,-54,957,826),28637=>array(53,-69,974,829),28638=>array(42,-64,962,859),28639=>array(48,-71,954,838),28640=>array(35,-59,967,834),28641=>array(40,-68,938,812),28642=>array(45,-70,952,801),28643=>array(59,-73,979,831),28644=>array(40,-58,963,841),28645=>array(40,-60,975,848),28646=>array(35,-63,959,826),28647=>array(55,-68,954,827),28648=>array(53,-41,965,841),28649=>array(51,-68,963,829),28650=>array(49,-43,972,842),28651=>array(47,-55,963,842),28652=>array(53,-64,972,829),28653=>array(58,-60,962,815),28654=>array(20,-68,957,831),28655=>array(41,-65,955,808),28656=>array(50,-61,956,839),28657=>array(46,-73,966,845),28658=>array(45,-78,963,822),28659=>array(52,-69,966,827),28660=>array(47,-68,955,826),28661=>array(79,-57,930,840),28662=>array(47,-65,901,815),28663=>array(51,-64,951,834),28664=>array(46,-65,984,837),28665=>array(24,-29,960,802),28666=>array(35,-69,964,845),28667=>array(50,-76,963,828),28668=>array(25,-73,978,842),28669=>array(45,-72,960,834),28670=>array(43,-71,967,841),28671=>array(56,-67,939,812),28672=>array(56,-70,959,809),28673=>array(46,-78,969,838),28674=>array(63,-61,974,849),28675=>array(58,-57,957,824),28676=>array(76,-68,952,829),28677=>array(52,-43,957,836),28678=>array(41,-71,933,834),28679=>array(45,-83,940,831),28680=>array(45,-70,937,817),28681=>array(36,-59,929,846),28682=>array(40,-52,955,824),28683=>array(48,-65,952,838),28684=>array(42,-62,951,837),28685=>array(47,-54,956,863),28686=>array(47,-67,950,833),28687=>array(61,-67,933,834),28688=>array(59,-62,942,830),28689=>array(34,-68,973,797),28690=>array(41,-43,981,856),28691=>array(39,-67,970,834),28692=>array(49,-71,970,822),28693=>array(37,-71,965,821),28694=>array(44,-65,942,820),28695=>array(41,-53,949,839),28696=>array(48,-67,962,841),28697=>array(51,-70,970,844),28698=>array(39,-59,976,848),28699=>array(48,-71,956,838),28700=>array(36,-69,967,826),28701=>array(38,-59,967,820),28702=>array(44,-65,959,844),28703=>array(40,-65,959,833),28704=>array(46,-63,967,838),28705=>array(35,-69,967,832),28706=>array(41,-64,974,829),28707=>array(24,-42,961,835),28708=>array(51,-72,964,841),28709=>array(45,-71,938,817),28710=>array(40,-65,951,833),28711=>array(45,-68,963,827),28712=>array(42,-71,973,829),28713=>array(40,-66,966,830),28714=>array(55,-65,960,843),28715=>array(46,-73,975,829),28716=>array(42,-73,961,829),28717=>array(50,-70,978,849),28718=>array(50,-66,963,824),28719=>array(55,-63,951,841),28720=>array(48,-62,975,808),28721=>array(42,-63,942,832),28722=>array(40,-67,987,849),28723=>array(50,-64,952,831),28724=>array(36,-70,957,833),28725=>array(53,-76,969,840),28726=>array(54,-63,936,840),28727=>array(44,-68,949,825),28728=>array(41,-60,974,841),28729=>array(39,-62,990,852),28730=>array(43,-65,962,848),28731=>array(37,-71,966,829),28732=>array(39,-58,975,848),28733=>array(49,-64,950,845),28734=>array(59,-70,923,797),28735=>array(52,-65,959,839),28736=>array(53,-61,936,832),28737=>array(56,-65,921,825),28738=>array(55,-62,964,840),28739=>array(59,-59,964,826),28740=>array(46,-63,961,814),28741=>array(45,-46,958,804),28742=>array(36,-45,949,826),28743=>array(41,-62,952,834),28744=>array(45,-65,954,806),28745=>array(51,-68,956,834),28746=>array(50,-67,960,808),28747=>array(46,-76,941,844),28748=>array(49,-70,953,829),28749=>array(49,-67,930,790),28750=>array(39,-36,964,836),28751=>array(33,-67,935,805),28752=>array(56,-37,950,836),28753=>array(46,-67,969,819),28754=>array(46,-69,958,824),28755=>array(36,-68,959,832),28756=>array(41,-66,972,832),28757=>array(41,-62,965,856),28758=>array(49,-65,956,843),28759=>array(48,-55,964,832),28760=>array(34,-72,960,837),28761=>array(52,-78,941,836),28762=>array(37,-66,963,829),28763=>array(50,-64,910,823),28764=>array(48,-71,946,838),28765=>array(46,-69,973,813),28766=>array(32,-71,925,815),28767=>array(55,-69,938,815),28768=>array(47,-66,954,837),28769=>array(45,-57,948,839),28770=>array(44,-70,988,830),28771=>array(50,-69,940,839),28772=>array(28,-63,975,844),28773=>array(45,-68,965,845),28774=>array(34,-73,964,816),28775=>array(39,-36,972,839),28776=>array(44,-77,954,834),28777=>array(38,-36,964,839),28778=>array(48,-67,944,830),28779=>array(85,-66,919,815),28780=>array(39,223,932,469),28781=>array(45,-61,955,771),28782=>array(49,-64,954,829),28783=>array(49,-91,942,814),28784=>array(32,-59,959,782),28785=>array(70,-70,908,825),28786=>array(146,-68,889,832),28787=>array(59,-57,917,833),28788=>array(58,-66,959,827),28789=>array(53,-63,926,790),28790=>array(64,-77,964,824),28791=>array(54,-65,949,829),28792=>array(54,-62,956,840),28793=>array(79,-70,943,837),28794=>array(58,-69,966,819),28795=>array(53,-64,953,830),28796=>array(50,-77,920,832),28797=>array(53,-64,953,817),28798=>array(45,-72,925,835),28799=>array(37,-81,903,826),28800=>array(32,-63,899,826),28801=>array(37,-69,960,800),28802=>array(53,-67,960,826),28803=>array(42,-73,969,780),28804=>array(46,-70,961,825),28805=>array(46,-52,965,804),28806=>array(50,-71,987,835),28807=>array(81,-74,956,838),28808=>array(73,-70,964,825),28809=>array(34,-65,925,828),28810=>array(59,-72,964,840),28811=>array(59,-72,959,832),28812=>array(59,-72,957,849),28813=>array(59,-72,964,832),28814=>array(66,-77,962,829),28815=>array(59,-73,964,837),28816=>array(59,-72,956,834),28817=>array(48,-65,975,831),28818=>array(44,-74,965,833),28819=>array(55,-86,963,820),28820=>array(59,-74,970,828),28821=>array(48,-69,955,836),28822=>array(39,-66,966,826),28823=>array(57,-73,960,829),28824=>array(62,-70,954,840),28825=>array(57,-73,960,840),28826=>array(100,-75,967,827),28827=>array(39,-59,949,833),28828=>array(35,-71,889,822),28829=>array(37,-62,937,827),28830=>array(37,-68,954,823),28831=>array(56,-68,956,822),28832=>array(73,-70,914,831),28833=>array(54,-66,956,826),28834=>array(62,-70,956,831),28835=>array(62,-70,961,831),28836=>array(69,-66,920,829),28837=>array(50,-62,932,829),28838=>array(62,-70,968,844),28839=>array(62,-70,943,831),28840=>array(63,-70,953,852),28841=>array(49,-73,957,829),28842=>array(54,-70,914,831),28843=>array(49,-72,961,822),28844=>array(48,-72,951,831),28845=>array(37,-69,959,830),28846=>array(55,-72,948,839),28847=>array(60,-71,915,830),28848=>array(34,-61,971,849),28849=>array(37,-62,986,838),28850=>array(62,-70,954,838),28851=>array(45,-69,950,827),28852=>array(48,-74,968,825),28853=>array(51,-71,965,834),28854=>array(62,-70,931,831),28855=>array(39,-72,942,828),28856=>array(59,-71,951,842),28857=>array(50,-71,950,830),28858=>array(62,-64,920,838),28859=>array(35,-68,911,823),28860=>array(35,-60,942,832),28861=>array(38,-64,940,830),28862=>array(53,-70,967,820),28863=>array(34,-65,965,844),28864=>array(39,-70,921,825),28865=>array(29,-68,943,830),28866=>array(32,-56,936,833),28867=>array(35,-63,923,823),28868=>array(35,-66,970,846),28869=>array(52,-55,956,832),28870=>array(48,-65,953,832),28871=>array(55,-65,965,830),28872=>array(58,-61,954,831),28873=>array(47,-71,957,843),28874=>array(41,-85,956,841),28875=>array(42,-61,973,849),28876=>array(35,-71,933,837),28877=>array(55,-64,956,826),28878=>array(45,-73,958,788),28879=>array(68,-63,887,845),28880=>array(34,-65,965,844),28881=>array(54,-63,964,829),28882=>array(47,-74,968,824),28883=>array(49,-56,953,832),28884=>array(57,-61,910,831),28885=>array(53,-64,959,832),28886=>array(82,-58,957,839),28887=>array(49,-68,959,835),28888=>array(49,-71,949,830),28889=>array(48,-75,968,839),28890=>array(53,-68,969,833),28891=>array(35,-60,944,826),28892=>array(55,-64,959,837),28893=>array(50,-58,966,785),28894=>array(46,-68,953,830),28895=>array(62,-75,919,834),28896=>array(48,-68,953,829),28897=>array(56,-71,933,831),28898=>array(44,-63,960,827),28899=>array(48,-75,956,829),28900=>array(43,-77,953,832),28901=>array(43,-77,949,825),28902=>array(34,-62,926,831),28903=>array(34,-74,934,818),28904=>array(54,-66,927,824),28905=>array(31,-65,931,841),28906=>array(31,-73,970,836),28907=>array(49,-70,931,812),28908=>array(26,-64,936,833),28909=>array(45,-63,951,829),28910=>array(68,-70,931,828),28911=>array(47,-82,944,842),28912=>array(43,-70,956,826),28913=>array(42,-51,915,839),28914=>array(63,-70,931,825),28915=>array(41,-65,956,831),28916=>array(56,-76,954,820),28917=>array(56,-72,947,831),28918=>array(38,-70,972,826),28919=>array(51,-75,960,837),28920=>array(53,-68,953,824),28921=>array(50,-72,955,842),28922=>array(55,-73,970,831),28923=>array(47,-67,967,829),28924=>array(44,-66,965,826),28925=>array(39,-81,969,839),28926=>array(46,-24,968,815),28927=>array(51,-77,959,833),28928=>array(45,-70,964,823),28929=>array(59,-66,962,826),28930=>array(38,-66,972,836),28931=>array(71,-71,954,835),28932=>array(33,-60,963,804),28933=>array(49,-71,951,832),28934=>array(49,-71,897,824),28935=>array(49,-71,911,833),28936=>array(46,-70,980,846),28937=>array(62,-63,937,798),28938=>array(49,-70,954,832),28939=>array(46,-70,980,829),28940=>array(57,-69,961,849),28941=>array(46,-70,914,829),28942=>array(57,-75,958,829),28943=>array(53,-61,961,775),28944=>array(48,-70,953,826),28945=>array(48,-67,917,826),28946=>array(58,-69,904,826),28947=>array(46,-70,968,833),28948=>array(55,-72,911,828),28949=>array(20,-77,948,832),28950=>array(33,-67,878,825),28951=>array(56,-65,929,835),28952=>array(39,-66,936,817),28953=>array(45,-79,947,831),28954=>array(61,-64,959,823),28955=>array(112,-72,911,781),28956=>array(51,-63,974,832),28957=>array(48,-67,960,833),28958=>array(50,-69,953,830),28959=>array(45,-67,953,831),28960=>array(39,-65,967,845),28961=>array(45,-63,951,844),28962=>array(48,-68,950,829),28963=>array(52,-75,956,785),28964=>array(48,-70,956,844),28965=>array(44,-72,961,845),28966=>array(48,-65,954,836),28967=>array(48,-67,968,826),28968=>array(48,-69,889,826),28969=>array(38,-67,895,826),28970=>array(48,-71,953,846),28971=>array(48,-67,937,826),28972=>array(65,-67,929,826),28973=>array(69,-62,936,839),28974=>array(38,-66,977,841),28975=>array(56,-70,957,837),28976=>array(53,-79,893,837),28977=>array(37,-66,971,840),28978=>array(49,-69,966,841),28979=>array(65,-67,954,834),28980=>array(40,-61,951,838),28981=>array(46,-73,910,824),28982=>array(62,-67,961,838),28983=>array(48,-67,951,850),28984=>array(59,-67,959,803),28985=>array(48,-67,897,826),28986=>array(50,-72,955,827),28987=>array(48,-67,905,826),28988=>array(56,-74,963,829),28989=>array(69,-70,959,821),28990=>array(37,-61,971,840),28991=>array(48,-68,967,855),28992=>array(37,-61,907,829),28993=>array(43,-70,957,832),28994=>array(40,-71,953,826),28995=>array(64,-70,979,847),28996=>array(41,-72,955,829),28997=>array(32,-72,971,829),28998=>array(38,-63,969,835),28999=>array(60,-65,959,829),29000=>array(28,-67,971,826),29001=>array(46,-69,968,830),29002=>array(51,-67,959,841),29003=>array(51,-71,957,826),29004=>array(42,-71,948,849),29005=>array(36,-73,986,827),29006=>array(55,-77,955,839),29007=>array(48,-67,933,826),29008=>array(50,-70,977,830),29009=>array(66,-70,961,831),29010=>array(45,-65,967,846),29011=>array(40,-73,953,828),29012=>array(36,-70,941,838),29013=>array(43,-72,949,793),29014=>array(40,-73,967,844),29015=>array(56,-72,975,835),29016=>array(47,-68,977,826),29017=>array(53,-63,953,832),29018=>array(38,-66,967,807),29019=>array(38,-73,977,788),29020=>array(46,-67,954,827),29021=>array(44,-79,897,823),29022=>array(34,-71,940,836),29023=>array(45,-75,906,825),29024=>array(32,-57,973,836),29025=>array(35,-75,977,829),29026=>array(66,-68,938,833),29027=>array(42,-68,977,829),29028=>array(44,-68,964,833),29029=>array(39,-62,969,834),29030=>array(48,-66,955,843),29031=>array(67,-62,950,788),29032=>array(35,-71,960,828),29033=>array(49,-76,959,829),29034=>array(48,-75,952,842),29035=>array(50,-62,974,840),29036=>array(38,-75,954,826),29037=>array(49,-61,954,830),29038=>array(54,-79,955,831),29039=>array(50,-65,961,832),29040=>array(46,-75,906,829),29041=>array(51,-69,911,828),29042=>array(49,-67,962,837),29043=>array(26,-70,883,823),29044=>array(56,-69,950,828),29045=>array(51,-67,959,831),29046=>array(43,-55,970,837),29047=>array(43,-73,969,846),29048=>array(50,-63,939,832),29049=>array(51,-69,966,829),29050=>array(49,-69,950,826),29051=>array(44,-72,956,836),29052=>array(56,-69,926,850),29053=>array(41,-72,921,822),29054=>array(51,-69,950,828),29055=>array(46,-71,959,838),29056=>array(49,-74,964,827),29057=>array(51,-68,952,836),29058=>array(44,-68,967,831),29059=>array(47,-69,962,840),29060=>array(34,-71,964,847),29061=>array(57,-75,956,820),29062=>array(51,-67,956,829),29063=>array(57,-65,959,843),29064=>array(43,-72,949,801),29065=>array(53,-80,964,826),29066=>array(40,-70,947,844),29067=>array(58,-72,968,838),29068=>array(51,-63,905,831),29069=>array(51,-72,937,843),29070=>array(48,-71,956,827),29071=>array(45,-72,949,834),29072=>array(46,-77,956,832),29073=>array(51,-69,966,850),29074=>array(58,-63,949,839),29075=>array(56,-69,928,839),29076=>array(51,-71,962,835),29077=>array(56,-69,969,828),29078=>array(53,-76,933,835),29079=>array(40,-72,981,850),29080=>array(42,-63,890,830),29081=>array(43,-72,949,785),29082=>array(51,-55,959,835),29083=>array(32,-61,945,832),29084=>array(49,-52,977,830),29085=>array(40,-69,968,846),29086=>array(48,-61,977,825),29087=>array(38,-67,960,831),29088=>array(39,-70,909,835),29089=>array(51,-72,955,826),29090=>array(51,-69,962,843),29091=>array(51,-69,953,833),29092=>array(48,-62,953,827),29093=>array(32,-70,973,824),29094=>array(56,-65,949,837),29095=>array(46,-70,973,839),29096=>array(35,-63,964,830),29097=>array(42,-71,964,826),29098=>array(41,-71,931,825),29099=>array(51,-69,962,851),29100=>array(30,-72,940,833),29101=>array(35,-66,962,835),29102=>array(49,-70,968,827),29103=>array(46,-59,969,843),29104=>array(54,-61,956,825),29105=>array(47,-69,949,831),29106=>array(41,-76,968,821),29107=>array(43,-62,983,833),29108=>array(36,-61,964,838),29109=>array(32,-67,951,848),29110=>array(26,-67,962,828),29111=>array(43,-62,917,853),29112=>array(32,-61,964,835),29113=>array(41,-62,965,835),29114=>array(37,-65,956,836),29115=>array(34,-63,991,848),29116=>array(42,-73,958,826),29117=>array(38,-68,946,824),29118=>array(36,-75,956,837),29119=>array(54,-75,967,831),29120=>array(47,-68,954,825),29121=>array(43,-65,953,832),29122=>array(46,-67,956,826),29123=>array(45,-75,959,831),29124=>array(47,-66,970,842),29125=>array(41,-75,971,826),29126=>array(44,-68,969,826),29127=>array(47,-67,954,835),29128=>array(35,-85,963,837),29129=>array(46,-73,973,837),29130=>array(44,-63,974,839),29131=>array(38,-73,963,837),29132=>array(51,-75,967,827),29133=>array(46,-67,954,836),29134=>array(41,-73,969,850),29135=>array(50,-66,925,830),29136=>array(49,-68,959,833),29137=>array(37,-61,933,844),29138=>array(48,-74,955,829),29139=>array(39,-71,968,836),29140=>array(32,-65,965,837),29141=>array(45,-67,952,828),29142=>array(43,-56,954,833),29143=>array(22,-68,911,829),29144=>array(48,-67,914,829),29145=>array(53,-72,968,798),29146=>array(44,-74,969,828),29147=>array(43,-74,972,785),29148=>array(43,-65,928,829),29149=>array(46,-67,967,824),29150=>array(34,-67,969,837),29151=>array(84,-68,903,832),29152=>array(54,-69,952,825),29153=>array(42,-70,957,825),29154=>array(47,-67,969,838),29155=>array(44,-68,968,849),29156=>array(44,-68,951,822),29157=>array(33,-71,973,829),29158=>array(38,-69,971,836),29159=>array(36,-74,960,823),29160=>array(37,-69,962,847),29161=>array(37,-71,962,845),29162=>array(30,-63,979,836),29163=>array(61,-79,969,847),29164=>array(53,-64,974,835),29165=>array(61,-79,927,828),29166=>array(55,-80,967,830),29167=>array(43,-77,956,820),29168=>array(49,-73,977,829),29169=>array(53,-75,976,830),29170=>array(46,-72,951,843),29171=>array(49,-75,977,823),29172=>array(39,-73,971,857),29173=>array(39,-73,954,835),29174=>array(41,-70,984,838),29175=>array(48,-70,921,857),29176=>array(41,-70,945,830),29177=>array(43,-67,972,784),29178=>array(63,-63,943,853),29179=>array(54,-70,971,831),29180=>array(39,-70,954,830),29181=>array(44,-67,952,833),29182=>array(48,-67,967,833),29183=>array(37,-64,957,831),29184=>array(48,-69,951,831),29185=>array(41,-69,951,823),29186=>array(57,-69,964,840),29187=>array(45,-65,961,831),29188=>array(45,-65,948,827),29189=>array(45,-65,963,827),29190=>array(37,-72,967,828),29191=>array(49,-63,973,839),29192=>array(33,-68,965,838),29193=>array(47,-76,971,847),29194=>array(33,-68,962,839),29195=>array(55,-68,930,833),29196=>array(37,-75,948,841),29197=>array(36,-73,972,847),29198=>array(37,-64,990,845),29199=>array(27,-64,956,827),29200=>array(43,-71,954,830),29201=>array(43,-71,980,837),29202=>array(61,-80,961,858),29203=>array(54,-67,918,829),29204=>array(46,-62,972,841),29205=>array(50,-73,971,843),29206=>array(40,-63,962,843),29207=>array(36,-68,953,826),29208=>array(40,-83,979,841),29209=>array(36,-71,970,838),29210=>array(51,-75,973,824),29211=>array(53,-70,923,830),29212=>array(53,-70,962,834),29213=>array(39,-63,956,843),29214=>array(41,-70,962,831),29215=>array(36,-64,962,837),29216=>array(36,-68,960,830),29217=>array(36,-73,949,842),29218=>array(44,-75,958,845),29219=>array(47,-76,972,831),29220=>array(47,-66,942,830),29221=>array(47,-68,933,827),29222=>array(35,-67,975,838),29223=>array(48,-73,953,824),29224=>array(35,-70,968,830),29225=>array(40,-73,954,822),29226=>array(63,-64,944,835),29227=>array(83,181,938,697),29228=>array(50,-62,958,837),29229=>array(71,-73,924,824),29230=>array(50,-62,958,837),29231=>array(56,-67,950,846),29232=>array(54,-65,957,846),29233=>array(52,-73,943,824),29234=>array(33,-70,934,852),29235=>array(69,-52,916,844),29236=>array(74,-66,970,829),29237=>array(64,-61,943,842),29238=>array(95,-57,923,825),29239=>array(67,-62,951,823),29240=>array(45,-16,954,844),29241=>array(52,-79,964,839),29242=>array(55,-62,961,843),29243=>array(48,-63,960,840),29244=>array(66,-11,962,773),29245=>array(52,-69,963,835),29246=>array(50,-73,940,785),29247=>array(49,-69,732,820),29248=>array(42,-65,969,825),29249=>array(46,-71,951,829),29250=>array(46,-64,954,851),29251=>array(46,-64,968,831),29252=>array(36,-71,969,841),29253=>array(46,-73,949,851),29254=>array(39,-67,951,833),29255=>array(48,-75,895,829),29256=>array(34,-73,966,818),29257=>array(57,-77,957,826),29258=>array(50,-74,909,821),29259=>array(42,-70,966,840),29260=>array(42,-62,944,837),29261=>array(18,-75,927,819),29262=>array(18,-66,960,848),29263=>array(39,-57,950,853),29264=>array(18,-76,940,836),29265=>array(32,-78,922,833),29266=>array(34,-66,968,831),29267=>array(40,-70,957,846),29268=>array(23,-71,959,838),29269=>array(34,-66,959,839),29270=>array(31,-68,951,839),29271=>array(40,-73,949,851),29272=>array(33,-84,955,835),29273=>array(59,-53,929,780),29274=>array(51,-61,939,836),29275=>array(81,-68,939,830),29276=>array(155,-67,719,829),29277=>array(47,-67,938,829),29278=>array(51,-62,914,832),29279=>array(53,-67,947,844),29280=>array(43,-62,964,838),29281=>array(42,-62,953,829),29282=>array(56,-65,944,833),29283=>array(57,-49,914,844),29284=>array(57,-48,931,844),29285=>array(57,-67,954,849),29286=>array(34,-75,937,828),29287=>array(50,-68,974,840),29288=>array(50,-64,957,843),29289=>array(68,-73,921,829),29290=>array(48,-71,954,833),29291=>array(48,-71,949,825),29292=>array(39,-74,927,823),29293=>array(49,-69,937,826),29294=>array(55,-68,972,844),29295=>array(49,-67,949,829),29296=>array(50,-72,908,833),29297=>array(50,-66,960,833),29298=>array(44,-65,954,831),29299=>array(44,-66,960,825),29300=>array(48,-67,968,843),29301=>array(82,-61,934,845),29302=>array(43,-67,976,838),29303=>array(58,-69,984,827),29304=>array(54,-52,962,848),29305=>array(50,-68,944,831),29306=>array(26,-62,923,830),29307=>array(42,-68,950,838),29308=>array(52,-68,951,825),29309=>array(76,-67,945,838),29310=>array(52,-62,956,833),29311=>array(52,-52,955,842),29312=>array(45,-69,933,800),29313=>array(68,-61,945,835),29314=>array(59,-63,954,849),29315=>array(58,-65,956,848),29316=>array(45,-65,949,838),29317=>array(69,-67,918,827),29318=>array(58,-65,953,838),29319=>array(46,-67,959,839),29320=>array(61,-72,968,830),29321=>array(66,-67,957,837),29322=>array(25,-62,932,830),29323=>array(44,-67,947,830),29324=>array(42,-77,973,827),29325=>array(39,-68,962,830),29326=>array(65,-64,962,831),29327=>array(28,-79,906,832),29328=>array(47,-73,954,826),29329=>array(41,-75,970,825),29330=>array(42,-71,950,826),29331=>array(53,-69,914,830),29332=>array(42,-71,974,851),29333=>array(43,-72,952,823),29334=>array(60,-68,954,847),29335=>array(43,-65,965,850),29336=>array(57,-69,947,843),29337=>array(42,-73,947,848),29338=>array(43,-68,958,824),29339=>array(52,-68,965,834),29340=>array(22,-73,973,837),29341=>array(45,-65,954,835),29342=>array(51,-70,976,825),29343=>array(62,-67,912,781),29344=>array(33,-70,965,853),29345=>array(33,-70,944,825),29346=>array(39,-84,956,835),29347=>array(37,-76,973,837),29348=>array(38,-67,980,826),29349=>array(29,-69,966,840),29350=>array(28,-59,983,833),29351=>array(33,-63,960,841),29352=>array(40,-67,947,840),29353=>array(52,-73,975,833),29354=>array(30,-65,972,846),29355=>array(39,-66,946,839),29356=>array(77,-71,949,826),29357=>array(257,-63,643,790),29358=>array(60,-73,962,834),29359=>array(60,-59,933,809),29360=>array(42,-70,963,829),29361=>array(33,-69,952,833),29362=>array(103,-71,950,824),29363=>array(97,-56,897,851),29364=>array(35,-64,945,824),29365=>array(57,-55,960,829),29366=>array(44,-68,940,823),29367=>array(34,-65,911,832),29368=>array(29,-65,889,798),29369=>array(40,-70,956,817),29370=>array(47,-69,959,832),29371=>array(52,-62,950,840),29372=>array(42,-69,959,823),29373=>array(48,-62,951,820),29374=>array(92,-62,942,831),29375=>array(52,-65,943,829),29376=>array(40,-69,951,818),29377=>array(44,-63,956,839),29378=>array(50,-66,948,807),29379=>array(24,-45,944,830),29380=>array(50,-70,972,825),29381=>array(43,-57,943,807),29382=>array(57,-61,913,833),29383=>array(73,-61,964,835),29384=>array(32,-60,942,799),29385=>array(39,-44,950,813),29386=>array(45,-68,973,785),29387=>array(38,-72,973,804),29388=>array(47,-47,951,827),29389=>array(47,-52,958,834),29390=>array(69,-64,920,822),29391=>array(69,-55,943,831),29392=>array(32,-77,970,838),29393=>array(47,-76,960,836),29394=>array(61,-68,934,822),29395=>array(47,-70,958,835),29396=>array(32,-80,963,796),29397=>array(35,-73,920,831),29398=>array(35,-66,966,834),29399=>array(60,-61,921,842),29400=>array(36,-70,963,824),29401=>array(47,-54,957,801),29402=>array(43,-50,958,820),29403=>array(70,-66,886,843),29404=>array(51,-68,953,830),29405=>array(41,-58,934,836),29406=>array(43,-61,924,849),29407=>array(46,-50,962,816),29408=>array(48,-71,969,811),29409=>array(52,-65,963,812),29410=>array(53,-67,973,839),29411=>array(47,-67,963,833),29412=>array(49,-73,953,823),29413=>array(64,-64,909,836),29414=>array(43,-68,956,827),29415=>array(64,-64,958,834),29416=>array(45,-80,967,818),29417=>array(48,-59,954,824),29418=>array(50,-67,911,811),29419=>array(39,-60,955,826),29420=>array(33,-58,948,827),29421=>array(29,-63,942,832),29422=>array(29,-71,930,822),29423=>array(36,-60,955,837),29424=>array(32,-60,920,837),29425=>array(33,-74,959,822),29426=>array(20,-62,948,832),29427=>array(29,-62,971,855),29428=>array(50,-50,958,831),29429=>array(50,-62,957,826),29430=>array(45,-71,956,834),29431=>array(75,-65,918,815),29432=>array(45,-57,958,820),29433=>array(31,-63,967,833),29434=>array(47,-62,959,844),29435=>array(41,-64,973,854),29436=>array(37,-75,968,831),29437=>array(45,-70,962,794),29438=>array(47,-71,960,826),29439=>array(58,-65,971,792),29440=>array(45,-69,966,823),29441=>array(54,-64,917,830),29442=>array(51,-64,956,816),29443=>array(32,-68,946,832),29444=>array(52,-60,965,846),29445=>array(52,-65,950,829),29446=>array(38,-68,965,831),29447=>array(49,-70,955,823),29448=>array(65,-67,955,832),29449=>array(65,-71,957,833),29450=>array(47,-65,953,832),29451=>array(40,-62,962,845),29452=>array(38,-70,969,826),29453=>array(55,-65,984,836),29454=>array(39,-69,939,817),29455=>array(48,-76,908,818),29456=>array(48,-54,970,820),29457=>array(62,-63,958,782),29458=>array(101,-72,962,824),29459=>array(48,-68,968,817),29460=>array(53,-65,951,845),29461=>array(23,-61,945,831),29462=>array(53,-68,911,808),29463=>array(47,-62,955,835),29464=>array(46,-68,914,826),29465=>array(35,-68,963,837),29466=>array(59,-70,953,842),29467=>array(49,-59,958,808),29468=>array(46,-65,954,837),29469=>array(49,-67,953,819),29470=>array(40,-65,978,850),29471=>array(50,-63,968,827),29472=>array(40,-74,960,829),29473=>array(35,-64,894,808),29474=>array(62,-68,927,829),29475=>array(43,-73,959,813),29476=>array(35,-66,959,809),29477=>array(44,-64,964,809),29478=>array(46,-74,961,792),29479=>array(72,-69,923,793),29480=>array(32,-60,959,841),29481=>array(42,-61,951,803),29482=>array(49,-56,921,836),29483=>array(24,-69,933,824),29484=>array(56,-65,911,803),29485=>array(49,-66,966,828),29486=>array(55,-54,955,842),29487=>array(61,-69,950,830),29488=>array(42,-64,974,831),29489=>array(43,-64,961,819),29490=>array(68,-65,933,790),29491=>array(33,-61,967,819),29492=>array(36,-71,975,827),29493=>array(65,-73,929,825),29494=>array(40,-71,955,840),29495=>array(57,-69,970,845),29496=>array(40,-74,897,815),29497=>array(41,-53,962,835),29498=>array(41,-64,966,850),29499=>array(30,-62,962,831),29500=>array(20,-71,943,829),29501=>array(38,-73,950,789),29502=>array(25,-72,929,819),29503=>array(42,-69,977,833),29504=>array(30,-78,977,833),29505=>array(40,-61,922,819),29506=>array(39,-75,979,804),29507=>array(45,-55,969,842),29508=>array(37,-66,970,826),29509=>array(39,-67,954,840),29510=>array(50,-64,979,849),29511=>array(50,-64,974,828),29512=>array(50,-57,962,842),29513=>array(35,-70,984,836),29514=>array(40,-73,963,845),29515=>array(38,-74,960,852),29516=>array(29,-72,973,812),29517=>array(53,-65,958,851),29518=>array(39,-64,970,843),29519=>array(44,-72,971,823),29520=>array(44,-64,949,840),29521=>array(19,-74,953,822),29522=>array(25,-68,949,830),29523=>array(44,-71,960,838),29524=>array(44,-74,960,852),29525=>array(44,-65,953,833),29526=>array(59,-75,947,827),29527=>array(44,-74,981,805),29528=>array(33,-54,965,857),29529=>array(23,-80,977,826),29530=>array(39,-73,955,827),29531=>array(42,-68,983,827),29532=>array(44,-74,954,832),29533=>array(56,-68,924,824),29534=>array(51,-42,962,838),29535=>array(41,-70,961,833),29536=>array(35,-61,967,846),29537=>array(52,-57,932,833),29538=>array(39,-67,973,835),29539=>array(45,-67,972,833),29540=>array(44,-73,973,837),29541=>array(46,-75,960,835),29542=>array(37,-63,943,827),29543=>array(39,-55,965,826),29544=>array(64,-66,920,791),29545=>array(41,-66,967,826),29546=>array(32,-62,984,863),29547=>array(26,-63,975,864),29548=>array(44,-67,960,838),29549=>array(12,-60,936,838),29550=>array(34,-67,975,834),29551=>array(49,-62,966,828),29552=>array(40,-67,957,816),29553=>array(57,-66,960,842),29554=>array(30,-64,964,840),29555=>array(47,-66,951,791),29556=>array(37,-65,951,831),29557=>array(36,-74,971,842),29558=>array(39,-76,969,824),29559=>array(40,-71,972,838),29560=>array(59,-67,972,829),29561=>array(40,-72,954,830),29562=>array(37,-71,975,833),29563=>array(38,-76,958,831),29564=>array(35,-64,973,829),29565=>array(36,-69,987,842),29566=>array(43,-67,959,835),29567=>array(43,-74,963,808),29568=>array(41,-64,959,822),29569=>array(38,-67,961,813),29570=>array(38,-71,963,823),29571=>array(36,-60,965,831),29572=>array(95,-57,915,819),29573=>array(65,-70,973,852),29574=>array(44,-65,956,818),29575=>array(72,-69,928,840),29576=>array(64,-71,970,836),29577=>array(117,0,908,753),29578=>array(85,-30,935,770),29579=>array(92,14,908,766),29580=>array(81,-38,943,822),29581=>array(59,-17,934,825),29582=>array(71,-69,956,790),29583=>array(71,-76,892,823),29584=>array(51,-60,960,775),29585=>array(37,-67,936,762),29586=>array(57,-23,957,763),29587=>array(64,-69,920,829),29588=>array(57,-70,912,822),29589=>array(40,-65,951,787),29590=>array(41,-64,979,835),29591=>array(54,-74,953,785),29592=>array(54,-26,957,778),29593=>array(54,-67,922,825),29594=>array(54,-63,927,769),29595=>array(51,-60,909,787),29596=>array(44,-60,957,806),29597=>array(50,-73,949,821),29598=>array(49,-64,963,833),29599=>array(51,-58,972,827),29600=>array(48,-65,987,855),29601=>array(44,-75,956,775),29602=>array(42,-62,984,820),29603=>array(47,-64,935,841),29604=>array(42,-73,954,823),29605=>array(60,-71,905,785),29606=>array(47,-63,991,837),29607=>array(47,-60,964,834),29608=>array(56,-17,952,767),29609=>array(51,-68,958,779),29610=>array(43,-62,975,831),29611=>array(60,-59,957,840),29612=>array(55,-78,956,779),29613=>array(44,-67,958,823),29614=>array(42,-67,893,825),29615=>array(38,-57,951,782),29616=>array(33,-59,930,788),29617=>array(45,-33,950,828),29618=>array(37,-68,964,840),29619=>array(39,-65,953,835),29620=>array(50,-20,957,824),29621=>array(51,-73,955,827),29622=>array(47,-71,956,782),29623=>array(39,-67,945,832),29624=>array(48,-38,956,827),29625=>array(43,-55,961,829),29626=>array(35,-48,915,826),29627=>array(64,-64,969,830),29628=>array(46,-43,966,810),29629=>array(46,-54,909,849),29630=>array(49,-71,917,780),29631=>array(49,-74,906,783),29632=>array(66,-63,882,846),29633=>array(66,-29,961,779),29634=>array(50,-65,961,779),29635=>array(47,-73,956,831),29636=>array(47,-12,952,827),29637=>array(53,-61,917,838),29638=>array(49,-72,952,842),29639=>array(49,-27,954,783),29640=>array(43,-70,907,830),29641=>array(41,-55,964,794),29642=>array(54,-61,951,789),29643=>array(45,-70,911,830),29644=>array(48,-30,963,824),29645=>array(67,-72,974,849),29646=>array(53,-52,964,847),29647=>array(53,-13,950,760),29648=>array(52,-64,949,829),29649=>array(32,-61,926,824),29650=>array(59,-72,954,827),29651=>array(58,-66,971,837),29652=>array(57,-64,954,832),29653=>array(57,-65,959,835),29654=>array(57,-65,955,821),29655=>array(52,-59,957,827),29656=>array(51,-67,951,836),29657=>array(41,-68,965,831),29658=>array(58,-71,907,771),29659=>array(60,-68,954,828),29660=>array(54,-67,954,833),29661=>array(57,-71,905,780),29662=>array(45,-66,972,840),29663=>array(40,-66,993,789),29664=>array(66,-62,978,837),29665=>array(50,-60,951,795),29666=>array(76,-71,957,781),29667=>array(62,-59,914,837),29668=>array(25,-64,963,834),29669=>array(25,-66,949,789),29670=>array(25,-55,900,875),29671=>array(50,-64,969,835),29672=>array(58,-69,958,829),29673=>array(45,-67,956,833),29674=>array(38,-21,951,831),29675=>array(50,-67,966,840),29676=>array(60,-61,971,835),29677=>array(50,-61,951,811),29678=>array(45,-72,977,788),29679=>array(38,-32,959,833),29680=>array(38,-60,899,829),29681=>array(38,-52,959,782),29682=>array(37,-69,920,764),29683=>array(49,-58,957,834),29684=>array(49,-64,958,828),29685=>array(56,-14,954,788),29686=>array(56,-68,915,822),29687=>array(36,-64,962,833),29688=>array(58,-71,953,775),29689=>array(36,-68,951,834),29690=>array(62,-69,956,787),29691=>array(35,-69,955,843),29692=>array(57,-73,959,782),29693=>array(44,-64,973,832),29694=>array(56,-65,944,780),29695=>array(56,-71,969,780),29696=>array(57,-71,964,830),29697=>array(59,-73,968,831),29698=>array(61,-62,930,845),29699=>array(53,-63,959,831),29700=>array(57,-65,894,782),29701=>array(46,-66,965,815),29702=>array(35,-16,945,775),29703=>array(47,-63,963,833),29704=>array(55,-67,954,819),29705=>array(30,-70,960,830),29706=>array(43,-67,958,789),29707=>array(53,-68,953,837),29708=>array(54,-71,967,824),29709=>array(47,-65,900,832),29710=>array(57,-19,975,817),29711=>array(32,-49,938,827),29712=>array(35,-65,933,828),29713=>array(35,-67,940,833),29714=>array(43,-65,963,846),29715=>array(35,-69,968,828),29716=>array(35,-83,949,831),29717=>array(35,-65,957,841),29718=>array(47,-70,954,835),29719=>array(35,-71,943,839),29720=>array(35,-65,960,833),29721=>array(35,-68,965,835),29722=>array(52,-67,964,787),29723=>array(30,-67,958,786),29724=>array(35,-65,972,836),29725=>array(55,-74,963,787),29726=>array(55,-26,945,796),29727=>array(35,-65,955,843),29728=>array(53,-72,965,826),29729=>array(55,-76,962,822),29730=>array(32,-65,971,774),29731=>array(55,-68,951,838),29732=>array(43,-59,967,849),29733=>array(39,-67,940,834),29734=>array(48,-61,957,841),29735=>array(63,-22,958,784),29736=>array(53,-57,970,790),29737=>array(76,-67,918,787),29738=>array(50,-68,960,836),29739=>array(50,-71,959,831),29740=>array(49,-65,967,836),29741=>array(57,-67,962,830),29742=>array(47,-62,959,821),29743=>array(47,-65,924,837),29744=>array(53,-65,980,838),29745=>array(63,-72,911,774),29746=>array(47,-71,958,832),29747=>array(37,-63,964,826),29748=>array(34,-74,960,802),29749=>array(55,-54,959,791),29750=>array(71,-23,941,787),29751=>array(35,-53,976,820),29752=>array(54,-71,953,825),29753=>array(50,-64,960,798),29754=>array(53,-59,962,831),29755=>array(35,-23,982,843),29756=>array(33,-55,971,852),29757=>array(35,-69,959,835),29758=>array(35,-66,971,774),29759=>array(43,-62,967,793),29760=>array(45,-70,912,827),29761=>array(55,-65,930,788),29762=>array(51,-70,900,783),29763=>array(51,-64,970,842),29764=>array(43,-27,954,832),29765=>array(51,-70,969,788),29766=>array(36,-27,954,782),29767=>array(37,-66,948,835),29768=>array(40,-61,973,796),29769=>array(40,-52,963,823),29770=>array(45,-75,963,825),29771=>array(47,-65,960,832),29772=>array(47,-72,975,788),29773=>array(46,-77,977,832),29774=>array(53,-73,960,822),29775=>array(48,-70,951,845),29776=>array(50,-72,954,839),29777=>array(40,-51,960,850),29778=>array(39,-77,954,780),29779=>array(48,-62,965,835),29780=>array(48,-69,970,846),29781=>array(38,-67,969,789),29782=>array(38,-69,970,840),29783=>array(47,-65,982,843),29784=>array(47,-65,952,783),29785=>array(56,-65,920,841),29786=>array(69,-62,893,830),29787=>array(31,-68,962,829),29788=>array(30,-65,972,816),29789=>array(43,-30,948,851),29790=>array(62,-68,939,833),29791=>array(63,-46,958,785),29792=>array(37,-65,913,834),29793=>array(69,-67,954,840),29794=>array(53,-70,965,824),29795=>array(63,-72,965,836),29796=>array(46,-62,959,841),29797=>array(46,-32,964,783),29798=>array(63,-60,928,839),29799=>array(59,-68,971,835),29800=>array(36,-61,959,789),29801=>array(69,-19,935,839),29802=>array(60,-61,911,787),29803=>array(60,-63,937,835),29804=>array(54,-28,954,843),29805=>array(44,-67,956,850),29806=>array(56,-72,977,781),29807=>array(41,-61,954,798),29808=>array(53,-65,947,856),29809=>array(36,-64,955,840),29810=>array(45,-65,995,858),29811=>array(42,-29,951,839),29812=>array(47,-89,964,824),29813=>array(50,-69,971,787),29814=>array(40,-64,913,822),29815=>array(35,-70,944,827),29816=>array(35,-63,943,830),29817=>array(62,-77,967,818),29818=>array(45,-67,930,839),29819=>array(53,-66,955,802),29820=>array(53,-77,952,819),29821=>array(58,-71,968,826),29822=>array(38,-21,946,828),29823=>array(62,-22,957,792),29824=>array(45,-62,962,839),29825=>array(56,-43,972,837),29826=>array(45,-33,972,829),29827=>array(39,-69,943,833),29828=>array(51,-65,952,847),29829=>array(62,-72,982,822),29830=>array(45,-62,957,800),29831=>array(38,-71,972,828),29832=>array(48,-77,983,826),29833=>array(41,-64,962,833),29834=>array(56,-65,959,824),29835=>array(45,-68,952,828),29836=>array(45,-78,953,834),29837=>array(37,-68,945,831),29838=>array(39,-81,928,775),29839=>array(39,-72,988,841),29840=>array(38,-65,975,841),29841=>array(38,-65,961,836),29842=>array(52,-17,964,832),29843=>array(31,-53,957,829),29844=>array(51,-72,892,827),29845=>array(50,-67,950,783),29846=>array(45,-65,969,799),29847=>array(60,-46,954,818),29848=>array(57,-66,959,837),29849=>array(57,-67,969,850),29850=>array(50,-67,920,787),29851=>array(32,-67,954,831),29852=>array(37,-74,923,824),29853=>array(37,-70,966,833),29854=>array(47,-63,964,828),29855=>array(36,-57,951,801),29856=>array(43,-64,973,836),29857=>array(39,-64,967,844),29858=>array(62,-71,926,797),29859=>array(45,-61,972,839),29860=>array(48,-35,979,826),29861=>array(48,-70,977,830),29862=>array(48,-63,985,840),29863=>array(48,-39,946,836),29864=>array(37,-66,979,839),29865=>array(48,-64,980,837),29866=>array(45,-70,966,784),29867=>array(45,-62,935,836),29868=>array(50,-71,962,845),29869=>array(48,-73,971,811),29870=>array(42,-30,956,848),29871=>array(42,-64,994,858),29872=>array(40,-61,962,808),29873=>array(46,-67,970,782),29874=>array(47,-64,959,816),29875=>array(46,-69,966,816),29876=>array(50,-69,961,826),29877=>array(40,-66,969,840),29878=>array(50,-37,949,823),29879=>array(35,-71,973,832),29880=>array(62,-77,941,831),29881=>array(41,-65,968,833),29882=>array(84,-37,938,836),29883=>array(53,-68,949,785),29884=>array(40,-23,957,839),29885=>array(53,-42,962,799),29886=>array(60,-71,963,837),29887=>array(41,-63,981,841),29888=>array(49,-72,944,780),29889=>array(44,-74,967,823),29890=>array(49,-35,955,819),29891=>array(51,-65,928,786),29892=>array(40,-67,962,836),29893=>array(36,-70,972,839),29894=>array(40,-61,962,813),29895=>array(40,-64,963,789),29896=>array(35,-62,974,830),29897=>array(40,-72,958,829),29898=>array(56,-65,975,845),29899=>array(31,-66,968,839),29900=>array(40,-67,965,847),29901=>array(28,-67,969,831),29902=>array(37,-67,959,840),29903=>array(52,-61,972,834),29904=>array(45,-67,953,830),29905=>array(40,-60,966,790),29906=>array(38,-71,925,825),29907=>array(40,-65,909,787),29908=>array(37,-64,955,788),29909=>array(63,-35,968,778),29910=>array(47,-73,966,839),29911=>array(57,-63,933,838),29912=>array(54,-68,956,826),29913=>array(42,-70,960,832),29914=>array(46,-69,969,836),29915=>array(30,-62,974,832),29916=>array(59,-57,956,834),29917=>array(32,-77,991,826),29918=>array(38,-67,992,837),29919=>array(36,-73,959,837),29920=>array(36,-67,964,838),29921=>array(57,-73,976,826),29922=>array(47,-69,973,834),29923=>array(32,-69,958,828),29924=>array(37,-66,969,856),29925=>array(51,-65,971,836),29926=>array(83,-35,941,773),29927=>array(36,-29,958,771),29928=>array(44,-63,966,783),29929=>array(36,-29,958,771),29930=>array(49,-29,955,811),29931=>array(65,-64,943,842),29932=>array(41,-74,968,838),29933=>array(39,-77,968,820),29934=>array(43,-56,956,807),29935=>array(104,-58,954,766),29936=>array(36,-29,963,782),29937=>array(36,-29,968,771),29938=>array(36,-29,953,822),29939=>array(56,-75,968,818),29940=>array(37,-65,969,838),29941=>array(62,-72,960,832),29942=>array(48,-61,962,842),29943=>array(75,-60,951,838),29944=>array(36,-29,958,772),29945=>array(99,-64,968,791),29946=>array(49,-60,970,800),29947=>array(36,-65,969,831),29948=>array(49,-29,955,786),29949=>array(78,-56,963,833),29950=>array(38,-64,960,824),29951=>array(50,-50,955,839),29952=>array(39,-71,970,827),29953=>array(39,-71,964,835),29954=>array(36,-74,974,832),29955=>array(58,-54,962,836),29956=>array(30,-48,947,784),29957=>array(38,-29,960,790),29958=>array(65,-63,962,854),29959=>array(97,-66,934,825),29960=>array(43,-75,962,838),29961=>array(34,-77,974,836),29962=>array(35,-69,966,830),29963=>array(65,-70,962,829),29964=>array(105,-74,950,787),29965=>array(74,-66,961,828),29966=>array(70,-66,945,827),29967=>array(60,-59,954,834),29968=>array(37,-68,958,828),29969=>array(83,-64,964,848),29970=>array(44,-68,961,824),29971=>array(24,-47,938,825),29972=>array(34,-68,985,829),29973=>array(66,-55,966,838),29974=>array(55,-68,957,785),29975=>array(33,-59,949,835),29976=>array(76,-68,927,827),29977=>array(49,-76,959,828),29978=>array(66,-72,934,835),29979=>array(32,-48,959,845),29980=>array(34,-58,945,834),29981=>array(35,-75,962,823),29982=>array(74,-47,939,836),29983=>array(60,-8,934,824),29984=>array(129,-23,956,830),29985=>array(37,-29,956,830),29986=>array(50,-76,930,838),29987=>array(49,-74,928,831),29988=>array(72,-56,970,811),29989=>array(73,-57,923,812),29990=>array(40,-69,966,811),29991=>array(45,-66,952,829),29992=>array(52,-73,855,788),29993=>array(65,-61,936,785),29994=>array(74,-67,847,842),29995=>array(62,-67,956,843),29996=>array(140,-65,856,798),29997=>array(53,-81,935,783),29998=>array(48,-67,916,844),29999=>array(63,-61,945,836),30000=>array(133,-68,867,762),30001=>array(137,-70,862,833),30002=>array(140,-69,860,785),30003=>array(149,-67,851,833),30004=>array(172,-67,839,832),30005=>array(148,-31,954,824),30006=>array(149,-65,872,833),30007=>array(85,-62,889,783),30008=>array(37,-56,914,856),30009=>array(65,-68,939,833),30010=>array(107,-53,954,790),30011=>array(75,-57,925,800),30012=>array(98,-46,914,810),30013=>array(99,-74,891,823),30014=>array(126,-62,879,844),30015=>array(101,-7,948,830),30016=>array(50,-65,957,779),30017=>array(50,-55,957,833),30018=>array(98,-59,965,850),30019=>array(90,-59,921,837),30020=>array(153,-62,845,824),30021=>array(90,-56,889,830),30022=>array(46,-66,965,823),30023=>array(99,-63,912,845),30024=>array(107,-66,978,791),30025=>array(96,-68,962,833),30026=>array(88,-64,952,828),30027=>array(76,-52,955,835),30028=>array(54,-70,961,782),30029=>array(96,-72,974,835),30030=>array(110,-66,981,831),30031=>array(64,-69,944,780),30032=>array(72,-52,945,791),30033=>array(51,-59,903,838),30034=>array(56,-50,963,833),30035=>array(60,-72,967,813),30036=>array(93,-67,938,839),30037=>array(178,-72,823,780),30038=>array(81,-70,970,836),30039=>array(109,-72,902,843),30040=>array(79,-62,955,839),30041=>array(75,-68,897,818),30042=>array(29,-67,975,848),30043=>array(111,-64,978,853),30044=>array(76,-59,920,836),30045=>array(56,-65,972,836),30046=>array(77,-70,968,838),30047=>array(50,-69,965,817),30048=>array(143,-68,867,845),30049=>array(86,-61,943,846),30050=>array(58,-69,947,801),30051=>array(34,-68,968,834),30052=>array(106,-62,955,832),30053=>array(110,-66,962,839),30054=>array(89,-22,943,828),30055=>array(48,-75,963,812),30056=>array(50,-70,959,808),30057=>array(96,-64,959,795),30058=>array(53,-70,957,836),30059=>array(82,-24,938,836),30060=>array(37,-67,966,854),30061=>array(81,-62,961,850),30062=>array(94,-62,954,847),30063=>array(69,-69,961,849),30064=>array(72,-74,926,784),30065=>array(89,-71,916,797),30066=>array(33,-72,973,847),30067=>array(54,-50,952,813),30068=>array(82,-58,911,831),30069=>array(79,-34,934,836),30070=>array(103,-68,914,841),30071=>array(77,-67,976,786),30072=>array(97,-62,939,835),30073=>array(101,-63,966,844),30074=>array(54,-20,951,803),30075=>array(74,-14,972,836),30076=>array(92,-61,938,782),30077=>array(103,-15,953,851),30078=>array(115,-69,908,783),30079=>array(56,-69,963,839),30080=>array(42,-71,969,828),30081=>array(74,-73,970,811),30082=>array(54,-46,952,786),30083=>array(94,-42,961,840),30084=>array(100,-70,955,822),30085=>array(84,-48,961,814),30086=>array(31,-61,951,814),30087=>array(87,-63,938,833),30088=>array(52,-82,943,829),30089=>array(51,-39,949,822),30090=>array(54,-31,952,791),30091=>array(28,-66,975,773),30092=>array(52,-70,968,835),30093=>array(68,-7,957,787),30094=>array(30,-65,966,827),30095=>array(35,-71,960,821),30096=>array(59,-81,955,837),30097=>array(33,-68,945,827),30098=>array(37,-63,898,822),30099=>array(37,-63,914,822),30100=>array(63,-65,944,823),30101=>array(36,-59,957,852),30102=>array(30,-63,899,838),30103=>array(35,-59,924,842),30104=>array(36,-75,954,833),30105=>array(46,-71,953,852),30106=>array(48,-69,968,820),30107=>array(48,-64,951,841),30108=>array(54,-69,941,845),30109=>array(54,-69,941,815),30110=>array(54,-69,961,845),30111=>array(24,-65,925,836),30112=>array(32,-66,900,838),30113=>array(28,-70,914,840),30114=>array(44,-65,982,855),30115=>array(51,-71,952,825),30116=>array(47,-73,960,845),30117=>array(50,-70,959,825),30118=>array(47,-73,945,845),30119=>array(52,-69,966,841),30120=>array(47,-73,938,845),30121=>array(47,-73,938,845),30122=>array(39,-57,959,854),30123=>array(37,-71,953,840),30124=>array(27,-67,896,849),30125=>array(27,-67,928,850),30126=>array(26,-67,932,840),30127=>array(27,-63,942,848),30128=>array(43,-63,951,849),30129=>array(39,-67,953,829),30130=>array(43,-73,957,831),30131=>array(44,-67,944,834),30132=>array(25,-66,938,851),30133=>array(54,-74,963,841),30134=>array(49,-71,951,830),30135=>array(47,-78,946,835),30136=>array(59,-75,954,829),30137=>array(41,-72,974,826),30138=>array(50,-60,958,835),30139=>array(47,-82,935,834),30140=>array(40,-78,972,825),30141=>array(32,-74,954,839),30142=>array(43,-73,962,829),30143=>array(44,-65,945,849),30144=>array(41,-58,954,855),30145=>array(44,-58,945,852),30146=>array(43,-79,941,832),30147=>array(27,-77,933,834),30148=>array(53,-61,948,856),30149=>array(38,-71,933,840),30150=>array(40,-71,951,847),30151=>array(41,-65,955,827),30152=>array(19,-74,918,848),30153=>array(24,-60,919,827),30154=>array(43,-73,951,830),30155=>array(53,-79,968,835),30156=>array(34,-83,948,840),30157=>array(43,-69,972,833),30158=>array(47,-67,957,846),30159=>array(41,-60,960,850),30160=>array(50,-75,944,829),30161=>array(51,-70,945,836),30162=>array(48,-71,955,827),30163=>array(50,-75,944,829),30164=>array(38,-68,947,844),30165=>array(48,-68,964,825),30166=>array(27,-65,919,846),30167=>array(36,-51,964,859),30168=>array(45,-75,949,826),30169=>array(45,-72,954,839),30170=>array(56,-82,962,832),30171=>array(33,-68,935,834),30172=>array(34,-70,962,847),30173=>array(43,-60,962,841),30174=>array(44,-68,961,834),30175=>array(57,-68,945,843),30176=>array(48,-73,983,846),30177=>array(31,-73,954,843),30178=>array(46,-69,944,835),30179=>array(45,-63,960,836),30180=>array(49,-67,954,847),30181=>array(33,-73,951,847),30182=>array(57,-68,955,835),30183=>array(39,-65,965,845),30184=>array(56,-67,922,852),30185=>array(37,-70,961,831),30186=>array(29,-74,955,846),30187=>array(20,-65,913,839),30188=>array(42,-69,941,841),30189=>array(44,-73,959,845),30190=>array(43,-75,965,840),30191=>array(34,-55,959,858),30192=>array(55,-70,958,832),30193=>array(45,-70,942,848),30194=>array(34,-66,957,838),30195=>array(40,-69,971,834),30196=>array(38,-67,941,834),30197=>array(36,-71,974,851),30198=>array(45,-72,960,851),30199=>array(36,-63,965,849),30200=>array(31,-73,930,839),30201=>array(46,-68,951,843),30202=>array(59,-67,959,834),30203=>array(39,-75,960,845),30204=>array(33,-65,941,836),30205=>array(31,-68,954,848),30206=>array(35,-67,956,842),30207=>array(33,-67,945,834),30208=>array(38,-64,964,837),30209=>array(48,-66,952,838),30210=>array(38,-77,935,843),30211=>array(30,-65,967,848),30212=>array(37,-64,942,841),30213=>array(37,-71,939,846),30214=>array(14,-67,912,845),30215=>array(34,-55,954,854),30216=>array(46,-64,974,855),30217=>array(39,-64,955,826),30218=>array(38,-65,955,852),30219=>array(38,-66,960,838),30220=>array(38,-70,944,847),30221=>array(55,-70,956,845),30222=>array(38,-67,944,840),30223=>array(33,-55,961,857),30224=>array(41,-69,974,850),30225=>array(45,-69,948,848),30226=>array(41,-75,938,848),30227=>array(46,-72,972,849),30228=>array(51,-73,961,838),30229=>array(44,-67,981,854),30230=>array(27,-54,954,860),30231=>array(26,-68,934,847),30232=>array(38,-69,911,835),30233=>array(30,-69,961,836),30234=>array(42,-70,971,836),30235=>array(24,-60,970,855),30236=>array(47,-66,981,840),30237=>array(40,-58,969,861),30238=>array(36,-62,976,848),30239=>array(37,-72,938,833),30240=>array(34,-67,962,841),30241=>array(35,-70,966,841),30242=>array(32,-73,957,841),30243=>array(46,-65,958,831),30244=>array(46,-74,948,841),30245=>array(43,-66,956,851),30246=>array(22,-68,959,851),30247=>array(44,-74,942,833),30248=>array(45,-79,963,837),30249=>array(46,-61,952,849),30250=>array(21,-67,933,823),30251=>array(26,-65,923,840),30252=>array(26,-65,963,840),30253=>array(44,-66,979,847),30254=>array(26,-73,967,847),30255=>array(45,-69,955,834),30256=>array(52,-76,951,841),30257=>array(50,-69,966,836),30258=>array(53,-64,978,854),30259=>array(32,-68,971,851),30260=>array(23,-66,943,841),30261=>array(33,-67,963,847),30262=>array(52,-65,970,848),30263=>array(52,-65,979,848),30264=>array(45,-65,943,848),30265=>array(52,-65,951,848),30266=>array(31,-69,948,852),30267=>array(36,-73,941,829),30268=>array(49,-67,980,850),30269=>array(37,-62,954,836),30270=>array(26,-65,970,832),30271=>array(29,-65,909,838),30272=>array(23,-81,928,826),30273=>array(23,-87,940,826),30274=>array(46,-65,964,830),30275=>array(33,-67,971,847),30276=>array(23,-91,937,826),30277=>array(23,-71,912,836),30278=>array(49,-66,941,841),30279=>array(29,-57,942,846),30280=>array(35,-62,963,829),30281=>array(35,-65,947,849),30282=>array(35,-70,973,853),30283=>array(57,-69,967,854),30284=>array(38,-68,933,844),30285=>array(24,-68,923,835),30286=>array(37,-64,937,840),30287=>array(37,-64,957,850),30288=>array(51,-68,983,849),30289=>array(37,-87,957,850),30290=>array(42,-58,971,836),30291=>array(49,-73,983,831),30292=>array(25,-61,931,828),30293=>array(42,-57,957,836),30294=>array(45,-73,956,833),30295=>array(42,-67,933,836),30296=>array(53,-65,948,844),30297=>array(42,-74,969,832),30298=>array(37,-71,936,833),30299=>array(48,-67,989,843),30300=>array(45,-67,980,841),30301=>array(48,-69,920,838),30302=>array(21,-71,912,835),30303=>array(44,-69,973,844),30304=>array(38,-71,982,846),30305=>array(51,-71,976,844),30306=>array(45,-76,947,840),30307=>array(25,-66,920,841),30308=>array(57,-73,959,837),30309=>array(40,-69,973,852),30310=>array(50,-78,948,846),30311=>array(43,-65,962,836),30312=>array(47,-75,946,834),30313=>array(42,-67,985,854),30314=>array(40,-69,964,854),30315=>array(29,-69,919,838),30316=>array(45,-66,956,854),30317=>array(50,-68,939,850),30318=>array(38,-71,974,845),30319=>array(35,-77,947,844),30320=>array(35,-78,959,854),30321=>array(47,-71,954,856),30322=>array(39,-77,967,854),30323=>array(27,-60,972,853),30324=>array(21,-77,958,849),30325=>array(46,-72,963,833),30326=>array(100,220,956,730),30327=>array(80,-55,936,839),30328=>array(80,-78,936,840),30329=>array(38,-69,967,840),30330=>array(47,-51,957,837),30331=>array(57,-13,957,837),30332=>array(52,-63,960,829),30333=>array(199,-64,822,833),30334=>array(98,-67,914,780),30335=>array(113,-47,959,830),30336=>array(200,-26,891,841),30337=>array(53,-49,947,866),30338=>array(74,-26,924,842),30339=>array(60,-67,950,836),30340=>array(101,-54,882,838),30341=>array(94,-27,941,842),30342=>array(64,-62,947,837),30343=>array(80,-28,932,845),30344=>array(87,-80,954,831),30345=>array(107,-39,959,834),30346=>array(119,-78,962,839),30347=>array(33,-64,959,849),30348=>array(100,-53,967,847),30349=>array(134,-61,898,837),30350=>array(90,-60,952,824),30351=>array(111,-69,954,835),30352=>array(53,-64,947,849),30353=>array(76,-19,944,820),30354=>array(100,-72,956,829),30355=>array(84,-64,923,831),30356=>array(84,-62,944,810),30357=>array(56,-63,947,776),30358=>array(86,-62,930,825),30359=>array(93,-67,907,810),30360=>array(84,-59,959,838),30361=>array(42,-63,943,847),30362=>array(92,-20,933,839),30363=>array(114,-69,889,834),30364=>array(110,-63,957,837),30365=>array(69,-70,964,833),30366=>array(117,-69,982,831),30367=>array(112,-68,975,839),30368=>array(97,-65,953,833),30369=>array(92,-74,960,852),30370=>array(92,-61,964,837),30371=>array(88,-68,946,831),30372=>array(79,-67,948,836),30373=>array(90,-74,960,852),30374=>array(82,-55,954,857),30375=>array(82,-62,946,841),30376=>array(60,-43,954,842),30377=>array(43,-73,970,838),30378=>array(98,-52,969,851),30379=>array(87,-72,956,845),30380=>array(82,-67,941,817),30381=>array(110,-63,963,845),30382=>array(53,-71,940,832),30383=>array(33,-81,951,826),30384=>array(33,-62,965,836),30385=>array(27,-68,939,833),30386=>array(41,-67,932,821),30387=>array(33,-75,956,834),30388=>array(31,-75,956,844),30389=>array(57,-76,966,826),30390=>array(30,-75,976,834),30391=>array(36,-70,956,838),30392=>array(50,-68,966,832),30393=>array(38,-67,954,832),30394=>array(45,-73,971,838),30395=>array(46,-73,969,824),30396=>array(47,-73,956,835),30397=>array(47,-66,969,849),30398=>array(51,-71,969,835),30399=>array(70,34,944,715),30400=>array(57,-20,948,822),30401=>array(57,-14,948,784),30402=>array(57,-14,948,789),30403=>array(48,-17,958,770),30404=>array(60,-53,956,757),30405=>array(47,-11,956,841),30406=>array(49,-25,947,794),30407=>array(46,-40,957,827),30408=>array(59,-38,952,784),30409=>array(41,-21,974,836),30410=>array(45,-18,960,840),30411=>array(55,-37,954,836),30412=>array(48,-20,957,830),30413=>array(62,-22,954,838),30414=>array(55,-14,954,835),30415=>array(52,-19,925,823),30416=>array(50,-44,924,799),30417=>array(52,-23,943,820),30418=>array(47,-28,961,851),30419=>array(60,-20,952,821),30420=>array(59,-23,951,840),30421=>array(63,-32,952,817),30422=>array(39,-32,959,847),30423=>array(57,-33,954,840),30424=>array(65,-32,914,831),30425=>array(51,-33,952,834),30426=>array(61,-34,956,809),30427=>array(50,-23,947,832),30428=>array(63,-32,952,843),30429=>array(60,-23,954,850),30430=>array(63,-32,953,840),30431=>array(58,-27,952,789),30432=>array(57,-46,961,848),30433=>array(48,-35,948,829),30434=>array(58,-27,952,802),30435=>array(53,-26,947,824),30436=>array(62,-35,956,842),30437=>array(53,-24,961,837),30438=>array(26,-26,957,869),30439=>array(40,-78,941,833),30440=>array(38,-24,961,788),30441=>array(60,-18,959,834),30442=>array(53,-12,951,823),30443=>array(32,-54,957,863),30444=>array(58,-10,952,850),30445=>array(65,-38,978,842),30446=>array(206,-42,767,771),30447=>array(98,-62,931,770),30448=>array(101,-68,938,783),30449=>array(118,-59,956,789),30450=>array(63,-70,937,826),30451=>array(107,-27,953,824),30452=>array(95,-70,949,835),30453=>array(109,-40,965,833),30454=>array(75,-68,958,778),30455=>array(109,-61,900,821),30456=>array(43,-65,889,828),30457=>array(86,-34,952,829),30458=>array(116,-71,957,828),30459=>array(107,-62,958,803),30460=>array(100,-71,944,803),30461=>array(101,-59,957,826),30462=>array(68,-73,920,834),30463=>array(75,-55,984,851),30464=>array(130,-65,890,787),30465=>array(53,-70,939,829),30466=>array(119,-59,945,837),30467=>array(119,-73,962,762),30468=>array(96,-52,949,790),30469=>array(92,-62,971,813),30470=>array(119,-66,954,849),30471=>array(88,-72,943,826),30472=>array(93,-65,931,826),30473=>array(52,-70,880,781),30474=>array(101,-55,943,811),30475=>array(71,-67,912,818),30476=>array(73,-62,949,799),30477=>array(96,-21,919,763),30478=>array(85,-58,951,755),30479=>array(96,-67,953,832),30480=>array(114,-21,953,773),30481=>array(106,-70,916,827),30482=>array(119,-70,917,830),30483=>array(99,-73,959,827),30484=>array(50,-67,946,785),30485=>array(116,-71,967,835),30486=>array(119,-62,960,773),30487=>array(119,-58,924,844),30488=>array(42,-57,971,821),30489=>array(118,-65,952,835),30490=>array(65,-62,961,843),30491=>array(124,-64,987,839),30492=>array(124,-64,987,839),30493=>array(118,-64,927,827),30494=>array(78,-84,951,835),30495=>array(64,-84,936,835),30496=>array(98,-71,956,785),30497=>array(94,-53,963,829),30498=>array(34,-65,958,843),30499=>array(116,-71,973,835),30500=>array(95,-71,929,784),30501=>array(44,-52,947,852),30502=>array(76,-56,931,823),30503=>array(110,-73,903,780),30504=>array(96,-69,948,833),30505=>array(88,-49,927,823),30506=>array(88,-68,951,782),30507=>array(95,-55,942,837),30508=>array(88,-67,931,825),30509=>array(124,-21,959,832),30510=>array(88,-70,909,782),30511=>array(80,-64,927,824),30512=>array(88,-42,956,770),30513=>array(106,-78,965,821),30514=>array(110,-70,953,777),30515=>array(107,-71,906,825),30516=>array(111,-40,909,859),30517=>array(119,-65,935,847),30518=>array(94,-21,934,783),30519=>array(39,-67,964,838),30520=>array(86,-62,929,849),30521=>array(103,-51,969,853),30522=>array(104,-67,943,828),30523=>array(110,-70,954,823),30524=>array(96,-64,965,794),30525=>array(105,-74,966,820),30526=>array(57,-67,955,785),30527=>array(88,-61,976,840),30528=>array(39,-69,929,839),30529=>array(101,-72,922,824),30530=>array(37,-67,938,841),30531=>array(97,-73,930,835),30532=>array(104,-67,909,825),30533=>array(107,-49,955,806),30534=>array(98,-55,951,834),30535=>array(110,-64,915,853),30536=>array(88,-16,952,788),30537=>array(88,-24,958,829),30538=>array(107,-48,902,803),30539=>array(97,-68,954,828),30540=>array(100,-71,949,825),30541=>array(96,-50,954,804),30542=>array(109,-47,948,864),30543=>array(112,-68,903,782),30544=>array(100,-69,940,820),30545=>array(96,-18,937,823),30546=>array(118,-75,983,829),30547=>array(100,-74,960,829),30548=>array(105,-70,969,840),30549=>array(112,-66,967,844),30550=>array(112,-74,972,823),30551=>array(105,-66,929,781),30552=>array(76,-73,930,781),30553=>array(110,-79,979,829),30554=>array(97,-72,933,790),30555=>array(109,-68,935,831),30556=>array(98,-63,930,836),30557=>array(72,-69,908,849),30558=>array(110,-64,970,830),30559=>array(95,-48,939,857),30560=>array(109,-30,965,841),30561=>array(87,-26,947,833),30562=>array(98,-64,937,832),30563=>array(57,-67,956,835),30564=>array(104,-64,955,792),30565=>array(104,-64,951,856),30566=>array(96,-30,948,826),30567=>array(97,-48,944,860),30568=>array(137,-57,969,845),30569=>array(118,-73,966,838),30570=>array(78,-70,932,783),30571=>array(92,-72,941,833),30572=>array(94,-65,944,831),30573=>array(113,-68,911,780),30574=>array(108,-67,980,839),30575=>array(88,-69,941,834),30576=>array(92,-65,948,829),30577=>array(88,-68,965,791),30578=>array(92,-22,945,788),30579=>array(92,-32,980,829),30580=>array(92,-65,936,787),30581=>array(107,-53,981,829),30582=>array(92,-64,978,842),30583=>array(92,-55,964,827),30584=>array(111,-64,906,789),30585=>array(98,-66,932,831),30586=>array(109,-74,962,834),30587=>array(92,-20,959,855),30588=>array(107,-69,965,786),30589=>array(86,-62,952,833),30590=>array(58,-72,950,849),30591=>array(49,-66,958,833),30592=>array(40,-65,982,845),30593=>array(111,-69,971,785),30594=>array(44,-67,970,832),30595=>array(100,-69,954,831),30596=>array(93,-65,929,835),30597=>array(79,-79,950,828),30598=>array(92,-60,938,832),30599=>array(97,-63,956,833),30600=>array(121,-79,980,781),30601=>array(93,-73,987,827),30602=>array(92,-77,956,843),30603=>array(94,-78,961,833),30604=>array(90,-26,927,833),30605=>array(97,-58,966,841),30606=>array(89,-62,932,824),30607=>array(54,-75,971,782),30608=>array(124,-45,896,816),30609=>array(91,-67,938,790),30610=>array(87,-60,917,826),30611=>array(104,-66,914,838),30612=>array(92,-74,947,833),30613=>array(98,-50,945,854),30614=>array(114,-69,938,813),30615=>array(116,-70,933,828),30616=>array(89,-23,953,801),30617=>array(109,-72,970,826),30618=>array(107,-80,958,837),30619=>array(108,-69,973,835),30620=>array(97,-73,949,821),30621=>array(105,-65,951,834),30622=>array(95,-69,936,831),30623=>array(82,-70,955,789),30624=>array(79,-39,942,823),30625=>array(109,-72,961,822),30626=>array(88,-83,913,830),30627=>array(94,-37,962,823),30628=>array(79,-62,906,793),30629=>array(102,-72,959,841),30630=>array(79,-65,956,836),30631=>array(90,-62,941,837),30632=>array(108,-73,966,821),30633=>array(88,-72,894,779),30634=>array(86,-23,935,843),30635=>array(114,-70,961,782),30636=>array(95,-68,944,830),30637=>array(94,-66,975,841),30638=>array(100,-62,970,847),30639=>array(88,-68,911,796),30640=>array(85,-75,960,828),30641=>array(102,-70,950,824),30642=>array(106,-68,928,783),30643=>array(95,-35,940,833),30644=>array(105,-71,961,827),30645=>array(109,-62,951,838),30646=>array(108,-64,969,839),30647=>array(105,-68,901,785),30648=>array(98,-70,957,827),30649=>array(89,-69,944,838),30650=>array(96,-70,952,839),30651=>array(68,-75,919,838),30652=>array(82,-67,951,852),30653=>array(52,-64,969,836),30654=>array(72,-46,910,801),30655=>array(39,-65,947,790),30656=>array(68,-77,981,828),30657=>array(99,-23,974,825),30658=>array(94,-66,961,786),30659=>array(76,-63,952,844),30660=>array(92,-76,949,830),30661=>array(81,-70,953,805),30662=>array(96,-65,963,828),30663=>array(91,-64,959,820),30664=>array(81,-70,957,848),30665=>array(98,-55,952,856),30666=>array(103,-68,919,835),30667=>array(87,-67,948,808),30668=>array(102,-72,964,850),30669=>array(31,-62,974,799),30670=>array(94,-65,963,844),30671=>array(92,-69,939,853),30672=>array(99,-67,935,785),30673=>array(68,-67,953,832),30674=>array(77,-67,946,833),30675=>array(91,-68,951,831),30676=>array(99,-70,938,824),30677=>array(41,-72,957,840),30678=>array(97,-62,965,804),30679=>array(71,-71,953,842),30680=>array(92,-68,947,830),30681=>array(88,-54,899,806),30682=>array(102,-77,905,786),30683=>array(81,-57,926,793),30684=>array(39,-66,972,850),30685=>array(39,-77,960,846),30686=>array(60,-68,927,786),30687=>array(44,-67,940,833),30688=>array(33,-70,954,825),30689=>array(43,-61,960,811),30690=>array(69,-71,947,828),30691=>array(42,-66,965,843),30692=>array(80,-56,964,837),30693=>array(69,-73,911,838),30694=>array(62,-67,941,836),30695=>array(34,-67,893,831),30696=>array(37,-68,980,834),30697=>array(39,-61,947,825),30698=>array(39,-65,932,834),30699=>array(27,-61,951,839),30700=>array(33,-29,955,832),30701=>array(51,-77,948,809),30702=>array(36,-73,951,833),30703=>array(33,-67,963,827),30704=>array(59,-70,934,838),30705=>array(40,-71,980,827),30706=>array(34,-65,980,837),30707=>array(67,-70,909,768),30708=>array(39,-66,948,761),30709=>array(61,-61,880,824),30710=>array(39,-57,929,774),30711=>array(44,-63,953,786),30712=>array(38,-64,959,780),30713=>array(37,-66,962,788),30714=>array(29,-33,959,828),30715=>array(51,-29,972,837),30716=>array(39,-2,957,761),30717=>array(59,-77,927,841),30718=>array(40,-70,942,785),30719=>array(49,-68,921,818),30720=>array(23,-59,898,767),30721=>array(39,-62,905,768),30722=>array(38,-68,971,824),30723=>array(45,-69,954,785),30724=>array(22,-69,955,829),30725=>array(44,-73,981,821),30726=>array(49,-70,990,836),30727=>array(42,-65,976,842),30728=>array(32,-71,970,772),30729=>array(48,-62,956,842),30730=>array(42,-64,957,843),30731=>array(42,-3,954,822),30732=>array(53,-62,925,829),30733=>array(43,-71,971,844),30734=>array(36,-77,971,828),30735=>array(43,-69,967,785),30736=>array(43,-70,969,786),30737=>array(51,-61,951,778),30738=>array(32,-51,952,818),30739=>array(39,-69,972,785),30740=>array(36,-71,956,780),30741=>array(42,-63,954,837),30742=>array(21,-68,921,826),30743=>array(29,-67,951,820),30744=>array(28,-44,944,824),30745=>array(42,-35,952,780),30746=>array(26,-62,929,788),30747=>array(41,-69,972,837),30748=>array(24,-69,954,781),30749=>array(50,-56,956,827),30750=>array(42,-64,987,839),30751=>array(41,-62,956,848),30752=>array(32,-17,954,792),30753=>array(52,-35,964,765),30754=>array(44,-59,952,783),30755=>array(44,-32,950,844),30756=>array(42,-29,943,831),30757=>array(29,-55,959,831),30758=>array(41,-53,960,843),30759=>array(40,-65,945,827),30760=>array(47,-75,964,832),30761=>array(42,-65,921,831),30762=>array(38,-60,958,784),30763=>array(57,-37,962,824),30764=>array(39,-19,952,816),30765=>array(37,-65,963,830),30766=>array(44,-53,962,855),30767=>array(51,-64,976,828),30768=>array(34,-68,951,780),30769=>array(46,-77,979,841),30770=>array(35,-29,963,835),30771=>array(43,-54,945,779),30772=>array(46,-70,958,835),30773=>array(23,-59,971,836),30774=>array(42,-66,886,843),30775=>array(59,-70,922,836),30776=>array(36,-26,956,788),30777=>array(35,-68,971,830),30778=>array(54,-72,946,761),30779=>array(29,-62,933,826),30780=>array(31,-31,964,840),30781=>array(42,-57,928,786),30782=>array(32,-60,947,828),30783=>array(33,-66,948,822),30784=>array(35,-60,905,830),30785=>array(30,-33,938,772),30786=>array(32,-11,965,845),30787=>array(37,-65,980,839),30788=>array(35,-66,960,831),30789=>array(41,-20,954,832),30790=>array(35,-65,963,841),30791=>array(46,-78,909,839),30792=>array(41,-72,956,824),30793=>array(42,-68,958,824),30794=>array(45,-72,952,822),30795=>array(35,-73,969,836),30796=>array(28,-57,972,849),30797=>array(30,-60,973,791),30798=>array(36,-63,907,832),30799=>array(36,-69,953,788),30800=>array(43,-70,909,782),30801=>array(36,-70,958,839),30802=>array(35,-68,948,780),30803=>array(25,-32,959,833),30804=>array(35,-71,949,826),30805=>array(38,-67,940,775),30806=>array(30,-74,945,826),30807=>array(29,-72,936,821),30808=>array(35,-64,903,795),30809=>array(25,-25,938,826),30810=>array(35,-66,963,823),30811=>array(35,-63,955,846),30812=>array(42,-20,956,791),30813=>array(50,-70,943,833),30814=>array(41,-67,954,829),30815=>array(35,-67,967,824),30816=>array(45,-71,972,834),30817=>array(35,-68,937,832),30818=>array(41,-70,961,819),30819=>array(35,-68,953,830),30820=>array(33,-67,983,833),30821=>array(42,-68,950,838),30822=>array(35,-51,951,802),30823=>array(35,-64,895,785),30824=>array(49,-62,964,838),30825=>array(50,-65,938,830),30826=>array(33,-54,959,830),30827=>array(26,-70,964,830),30828=>array(46,-61,978,784),30829=>array(41,-35,959,805),30830=>array(51,-57,907,852),30831=>array(34,-69,960,787),30832=>array(51,-65,942,830),30833=>array(49,-71,915,777),30834=>array(42,-64,980,833),30835=>array(35,-54,970,835),30836=>array(32,-65,962,828),30837=>array(39,-63,958,839),30838=>array(35,-66,969,830),30839=>array(32,-32,939,811),30840=>array(35,-67,948,836),30841=>array(39,-61,977,829),30842=>array(35,-56,959,785),30843=>array(44,-68,987,782),30844=>array(59,-78,919,779),30845=>array(35,-32,954,839),30846=>array(29,-16,953,853),30847=>array(37,-27,950,837),30848=>array(44,-67,954,827),30849=>array(26,-54,971,843),30850=>array(35,-57,969,850),30851=>array(36,-72,950,823),30852=>array(44,-70,972,823),30853=>array(36,-72,900,780),30854=>array(41,-52,949,843),30855=>array(42,-71,962,833),30856=>array(35,-65,960,833),30857=>array(53,-68,918,785),30858=>array(35,-57,974,840),30859=>array(35,-67,932,836),30860=>array(35,-67,966,836),30861=>array(33,-52,952,796),30862=>array(43,-64,951,834),30863=>array(39,-72,955,820),30864=>array(35,-67,981,839),30865=>array(31,-68,956,844),30866=>array(35,-23,982,843),30867=>array(44,-68,951,840),30868=>array(31,-62,968,831),30869=>array(35,-64,964,835),30870=>array(44,-70,958,847),30871=>array(43,-69,961,834),30872=>array(44,-74,960,829),30873=>array(47,-67,908,786),30874=>array(39,-63,954,840),30875=>array(27,-75,923,826),30876=>array(23,-71,949,839),30877=>array(35,-72,975,788),30878=>array(45,-50,936,798),30879=>array(35,-62,968,833),30880=>array(41,-67,952,837),30881=>array(37,-64,956,830),30882=>array(46,-65,907,785),30883=>array(49,-68,927,788),30884=>array(47,-71,971,823),30885=>array(32,-67,915,824),30886=>array(50,-70,956,849),30887=>array(60,-67,937,845),30888=>array(44,-73,975,784),30889=>array(44,-72,970,783),30890=>array(28,-54,948,841),30891=>array(46,-74,969,825),30892=>array(28,-73,971,785),30893=>array(29,-68,954,788),30894=>array(35,-72,979,788),30895=>array(34,-61,951,849),30896=>array(45,-29,957,845),30897=>array(34,-72,955,834),30898=>array(47,-67,939,842),30899=>array(39,-72,970,829),30900=>array(41,-24,964,830),30901=>array(32,-74,962,836),30902=>array(35,-57,961,834),30903=>array(35,-71,962,839),30904=>array(35,-69,971,789),30905=>array(25,-10,922,818),30906=>array(34,-69,950,843),30907=>array(29,-57,949,835),30908=>array(50,-60,933,781),30909=>array(35,-66,969,791),30910=>array(30,-70,961,785),30911=>array(39,-75,925,795),30912=>array(31,-58,963,838),30913=>array(37,-57,955,836),30914=>array(46,-65,913,834),30915=>array(37,-73,966,832),30916=>array(46,-73,966,830),30917=>array(37,-76,954,834),30918=>array(32,-69,946,793),30919=>array(32,-53,968,852),30920=>array(41,-64,972,857),30921=>array(43,-62,990,790),30922=>array(52,-68,944,788),30923=>array(20,-40,934,849),30924=>array(32,-70,955,825),30925=>array(19,-71,946,841),30926=>array(29,-75,967,841),30927=>array(34,-68,985,840),30928=>array(42,-61,956,844),30929=>array(41,-24,964,831),30930=>array(41,-64,941,785),30931=>array(32,-58,963,844),30932=>array(25,-59,963,849),30933=>array(32,-24,959,832),30934=>array(29,-57,921,800),30935=>array(32,-71,959,838),30936=>array(31,-67,956,827),30937=>array(24,-79,968,846),30938=>array(43,-66,957,831),30939=>array(39,-50,933,846),30940=>array(43,-55,960,850),30941=>array(40,-71,964,827),30942=>array(44,-75,898,824),30943=>array(51,-66,971,783),30944=>array(39,-64,958,839),30945=>array(25,-70,918,831),30946=>array(36,-72,964,824),30947=>array(36,-64,997,858),30948=>array(31,-66,957,837),30949=>array(47,-68,967,780),30950=>array(47,-64,965,787),30951=>array(43,-68,975,839),30952=>array(37,-64,939,833),30953=>array(45,-72,969,825),30954=>array(38,-65,966,838),30955=>array(38,-70,955,836),30956=>array(44,-67,952,832),30957=>array(45,-73,956,785),30958=>array(30,-61,945,841),30959=>array(33,-69,960,835),30960=>array(35,-65,952,846),30961=>array(33,-66,957,833),30962=>array(32,-63,975,829),30963=>array(46,-72,900,824),30964=>array(41,-21,989,838),30965=>array(41,-67,924,787),30966=>array(41,-64,944,846),30967=>array(37,-74,953,832),30968=>array(41,-76,974,851),30969=>array(56,-70,953,781),30970=>array(41,-72,968,828),30971=>array(30,-57,971,839),30972=>array(53,-68,966,832),30973=>array(38,-63,971,837),30974=>array(42,-65,940,787),30975=>array(32,-65,953,793),30976=>array(74,-68,926,785),30977=>array(45,-68,961,840),30978=>array(53,-70,956,825),30979=>array(54,-64,945,833),30980=>array(44,-62,988,833),30981=>array(41,-72,968,839),30982=>array(44,-68,969,858),30983=>array(43,-62,969,850),30984=>array(36,-58,963,825),30985=>array(43,-75,975,835),30986=>array(41,-59,959,818),30987=>array(51,-64,949,786),30988=>array(36,-65,935,789),30989=>array(53,-59,933,836),30990=>array(36,-65,961,825),30991=>array(44,-55,951,833),30992=>array(39,-71,937,833),30993=>array(40,-52,933,847),30994=>array(29,-58,965,860),30995=>array(44,-35,951,778),30996=>array(43,-68,956,836),30997=>array(44,-67,945,819),30998=>array(44,-70,952,821),30999=>array(51,-74,960,836),31000=>array(46,-69,954,786),31001=>array(33,-61,967,832),31002=>array(44,-20,957,835),31003=>array(41,-27,954,823),31004=>array(41,-67,984,839),31005=>array(33,-65,953,783),31006=>array(44,-66,976,830),31007=>array(22,-60,975,794),31008=>array(51,-31,949,846),31009=>array(34,-67,948,828),31010=>array(44,-76,975,844),31011=>array(32,-67,970,830),31012=>array(35,-67,976,828),31013=>array(41,-66,975,794),31014=>array(39,-74,959,834),31015=>array(46,-55,932,795),31016=>array(50,-54,936,792),31017=>array(36,-76,959,833),31018=>array(32,-63,962,799),31019=>array(26,-71,965,844),31020=>array(50,-70,962,833),31021=>array(59,-70,978,775),31022=>array(22,-60,975,840),31023=>array(36,-65,951,829),31024=>array(49,-69,953,790),31025=>array(44,-68,949,849),31026=>array(44,-62,956,842),31027=>array(26,-64,957,845),31028=>array(31,-61,951,832),31029=>array(44,-62,923,789),31030=>array(64,-58,936,839),31031=>array(50,-23,950,838),31032=>array(35,-75,979,829),31033=>array(33,-68,982,789),31034=>array(91,-68,932,757),31035=>array(235,-68,689,820),31036=>array(42,-59,961,820),31037=>array(54,-57,912,839),31038=>array(47,-69,949,822),31039=>array(48,-56,921,844),31040=>array(77,-68,945,768),31041=>array(39,-68,935,815),31042=>array(35,-55,963,847),31043=>array(35,-69,905,826),31044=>array(35,-70,976,835),31045=>array(45,-69,967,834),31046=>array(38,-67,964,841),31047=>array(36,-63,968,834),31048=>array(46,-67,946,834),31049=>array(36,-63,944,834),31050=>array(35,-55,960,848),31051=>array(36,-76,963,831),31052=>array(41,-71,918,831),31053=>array(45,-65,948,845),31054=>array(41,-71,906,826),31055=>array(34,-68,956,828),31056=>array(40,-60,958,843),31057=>array(34,-68,977,831),31058=>array(34,-72,908,824),31059=>array(47,-70,957,828),31060=>array(42,-52,949,850),31061=>array(42,-69,970,835),31062=>array(35,-73,953,818),31063=>array(57,-69,955,814),31064=>array(29,-52,964,763),31065=>array(34,-57,970,842),31066=>array(72,-69,960,838),31067=>array(32,-69,941,832),31068=>array(32,-69,953,836),31069=>array(35,-67,960,822),31070=>array(55,-67,904,837),31071=>array(64,-67,945,836),31072=>array(67,-68,909,775),31073=>array(60,-64,948,823),31074=>array(36,-64,962,834),31075=>array(44,-68,962,839),31076=>array(47,-69,906,833),31077=>array(39,-68,956,843),31078=>array(39,-68,968,836),31079=>array(37,-69,969,847),31080=>array(73,-61,952,788),31081=>array(50,-70,966,837),31082=>array(46,-72,955,833),31083=>array(27,-54,973,853),31084=>array(50,-69,956,837),31085=>array(46,-66,957,839),31086=>array(50,-69,953,838),31087=>array(30,-65,925,821),31088=>array(43,-64,959,843),31089=>array(50,-69,959,846),31090=>array(35,-65,970,842),31091=>array(45,-72,964,839),31092=>array(39,-74,951,841),31093=>array(50,-69,923,837),31094=>array(50,-69,925,842),31095=>array(36,-63,952,834),31096=>array(28,-61,886,822),31097=>array(27,-64,920,840),31098=>array(57,-66,963,829),31099=>array(50,-70,911,837),31100=>array(31,-53,982,851),31101=>array(40,-67,954,838),31102=>array(50,-69,968,837),31103=>array(32,-69,969,840),31104=>array(39,-74,915,816),31105=>array(46,-65,957,834),31106=>array(33,-70,908,835),31107=>array(50,-69,959,839),31108=>array(38,-64,963,834),31109=>array(45,-65,955,847),31110=>array(36,-69,956,849),31111=>array(50,-69,959,837),31112=>array(44,-68,951,835),31113=>array(28,-69,953,842),31114=>array(32,-69,958,832),31115=>array(38,-53,954,847),31116=>array(50,-69,943,843),31117=>array(36,-63,912,834),31118=>array(44,-67,971,832),31119=>array(38,-69,943,834),31120=>array(46,-69,957,835),31121=>array(32,-69,930,804),31122=>array(43,-69,970,839),31123=>array(38,-72,950,826),31124=>array(32,-69,966,797),31125=>array(38,-62,968,842),31126=>array(28,-57,978,843),31127=>array(51,-62,967,835),31128=>array(36,-56,953,846),31129=>array(32,-64,966,846),31130=>array(31,-70,985,832),31131=>array(30,-78,961,833),31132=>array(88,-67,941,823),31133=>array(50,-69,964,802),31134=>array(50,-75,940,841),31135=>array(50,-69,954,843),31136=>array(30,-71,955,836),31137=>array(49,-64,948,842),31138=>array(34,-72,915,826),31139=>array(48,-71,959,842),31140=>array(47,-68,899,835),31141=>array(38,-69,971,837),31142=>array(63,-66,940,835),31143=>array(60,-69,947,835),31144=>array(42,-72,973,843),31145=>array(50,-69,973,837),31146=>array(55,-69,955,791),31147=>array(32,-55,954,842),31148=>array(51,-71,963,840),31149=>array(44,-66,980,845),31150=>array(60,-69,952,833),31151=>array(50,-70,979,840),31152=>array(39,-64,973,827),31153=>array(26,-69,960,835),31154=>array(35,-72,947,835),31155=>array(50,-69,970,846),31156=>array(24,-59,972,868),31157=>array(43,-69,959,836),31158=>array(30,-81,968,825),31159=>array(37,-68,965,830),31160=>array(72,-59,875,818),31161=>array(120,-71,883,829),31162=>array(130,-64,882,785),31163=>array(69,-65,939,838),31164=>array(131,-65,869,834),31165=>array(38,-59,962,856),31166=>array(55,-70,958,825),31167=>array(52,-64,947,831),31168=>array(50,-59,951,830),31169=>array(40,-68,959,833),31170=>array(50,-50,954,823),31171=>array(50,-76,921,817),31172=>array(44,-67,955,833),31173=>array(45,-67,951,833),31174=>array(49,-70,947,820),31175=>array(50,-70,960,833),31176=>array(36,-52,904,846),31177=>array(42,-70,950,823),31178=>array(47,-69,968,834),31179=>array(43,-73,964,837),31180=>array(59,-71,968,829),31181=>array(45,-70,917,826),31182=>array(39,-69,962,824),31183=>array(48,-71,960,838),31184=>array(51,-69,955,829),31185=>array(41,-69,955,829),31186=>array(43,-70,959,827),31187=>array(41,-69,965,835),31188=>array(41,-69,966,843),31189=>array(39,-61,954,829),31190=>array(42,-76,972,827),31191=>array(41,-70,955,829),31192=>array(43,-61,969,828),31193=>array(41,-69,956,836),31194=>array(41,-69,944,833),31195=>array(49,-71,951,832),31196=>array(35,-71,952,829),31197=>array(51,-71,976,822),31198=>array(53,-70,924,827),31199=>array(32,-73,958,817),31200=>array(42,-70,964,829),31201=>array(41,-69,975,844),31202=>array(37,-78,975,831),31203=>array(39,-59,972,839),31204=>array(42,-75,951,810),31205=>array(41,-69,947,830),31206=>array(52,-68,964,835),31207=>array(39,-72,979,835),31208=>array(41,-69,951,842),31209=>array(36,-70,973,839),31210=>array(37,-49,966,859),31211=>array(34,-65,954,834),31212=>array(41,-57,941,835),31213=>array(42,-62,937,835),31214=>array(48,-73,960,829),31215=>array(24,-62,939,830),31216=>array(44,-59,961,835),31217=>array(59,-69,941,829),31218=>array(31,-71,942,835),31219=>array(41,-69,958,839),31220=>array(41,-69,985,853),31221=>array(66,-69,939,829),31222=>array(39,-69,973,829),31223=>array(47,-67,951,822),31224=>array(44,-61,951,836),31225=>array(33,-69,954,829),31226=>array(45,-59,955,827),31227=>array(49,-70,935,839),31228=>array(55,-69,945,836),31229=>array(30,-61,896,835),31230=>array(33,-72,959,835),31231=>array(67,-69,933,839),31232=>array(41,-71,961,846),31233=>array(47,-61,930,846),31234=>array(36,-64,968,850),31235=>array(35,-55,951,842),31236=>array(40,-72,969,830),31237=>array(36,-70,970,819),31238=>array(26,-64,871,821),31239=>array(62,-64,938,817),31240=>array(43,-60,956,828),31241=>array(24,-64,976,818),31242=>array(49,-52,932,864),31243=>array(29,-70,949,816),31244=>array(38,-55,967,862),31245=>array(52,-70,947,837),31246=>array(36,-70,954,840),31247=>array(26,-64,954,827),31248=>array(41,-71,977,836),31249=>array(28,-51,951,846),31250=>array(43,-72,903,823),31251=>array(47,-72,951,825),31252=>array(30,-62,970,840),31253=>array(47,-72,954,834),31254=>array(26,-70,947,841),31255=>array(38,-67,954,844),31256=>array(34,-52,952,846),31257=>array(39,-57,954,852),31258=>array(41,-70,955,832),31259=>array(45,-70,905,828),31260=>array(33,-57,967,835),31261=>array(70,-73,930,822),31262=>array(27,-72,965,819),31263=>array(76,-61,930,816),31264=>array(49,-80,911,818),31265=>array(41,-64,959,851),31266=>array(43,-70,969,825),31267=>array(39,-64,947,838),31268=>array(36,-64,953,849),31269=>array(56,-65,950,817),31270=>array(33,-69,951,833),31271=>array(34,-65,966,829),31272=>array(32,-68,918,827),31273=>array(55,-64,945,821),31274=>array(50,-64,950,837),31275=>array(34,-74,962,821),31276=>array(26,-71,961,823),31277=>array(21,-68,970,831),31278=>array(47,-65,956,836),31279=>array(33,-71,967,829),31280=>array(33,-50,972,845),31281=>array(32,-69,956,835),31282=>array(32,-64,936,824),31283=>array(19,-61,947,834),31284=>array(26,-64,966,850),31285=>array(26,-64,965,843),31286=>array(26,-72,949,835),31287=>array(24,-66,952,823),31288=>array(24,-68,960,843),31289=>array(22,-67,964,848),31290=>array(26,-71,928,826),31291=>array(45,-71,943,832),31292=>array(38,-69,979,832),31293=>array(40,-65,946,844),31294=>array(47,-51,930,836),31295=>array(55,-75,940,831),31296=>array(45,-74,964,825),31297=>array(26,-70,956,827),31298=>array(41,-68,976,826),31299=>array(33,-58,958,845),31300=>array(27,-59,960,850),31301=>array(37,-66,966,848),31302=>array(39,-73,961,847),31303=>array(36,-76,983,847),31304=>array(47,-71,967,832),31305=>array(31,-61,952,834),31306=>array(27,-68,967,835),31307=>array(39,-70,979,838),31308=>array(31,-62,964,843),31309=>array(40,-74,947,833),31310=>array(39,-70,972,838),31311=>array(32,-55,965,838),31312=>array(30,-61,965,846),31313=>array(26,-63,910,824),31314=>array(38,-72,960,833),31315=>array(26,-64,963,821),31316=>array(43,-78,959,827),31317=>array(41,-65,961,845),31318=>array(40,-72,961,822),31319=>array(41,-68,957,826),31320=>array(43,-77,963,823),31321=>array(26,-68,971,833),31322=>array(38,-70,962,828),31323=>array(46,-78,971,828),31324=>array(37,-71,951,831),31325=>array(41,-66,959,822),31326=>array(26,-73,928,821),31327=>array(33,-71,974,825),31328=>array(32,-68,983,840),31329=>array(35,-63,956,836),31330=>array(22,-74,969,833),31331=>array(35,-79,967,837),31332=>array(32,-59,964,825),31333=>array(42,-73,947,821),31334=>array(47,-65,966,853),31335=>array(40,-72,963,837),31336=>array(45,-67,974,830),31337=>array(31,-66,959,831),31338=>array(51,-71,949,825),31339=>array(28,-56,967,840),31340=>array(38,-80,966,843),31341=>array(28,-69,984,853),31342=>array(30,-70,971,846),31343=>array(36,-63,956,836),31344=>array(21,-69,962,844),31345=>array(36,-69,961,835),31346=>array(51,-73,953,825),31347=>array(36,-78,970,836),31348=>array(66,-59,950,822),31349=>array(94,-14,943,852),31350=>array(48,-44,957,822),31351=>array(44,-71,898,831),31352=>array(45,-59,924,850),31353=>array(92,-58,898,839),31354=>array(88,-17,918,833),31355=>array(66,-68,945,843),31356=>array(48,-68,967,849),31357=>array(60,-70,922,839),31358=>array(60,-69,982,839),31359=>array(58,-62,928,838),31360=>array(58,-32,965,854),31361=>array(60,-65,942,824),31362=>array(56,-65,944,849),31363=>array(54,-56,898,831),31364=>array(63,-69,898,828),31365=>array(109,-62,920,857),31366=>array(51,-60,972,867),31367=>array(48,-36,962,835),31368=>array(78,-76,908,833),31369=>array(72,-64,948,838),31370=>array(47,-75,967,846),31371=>array(107,-67,927,837),31372=>array(64,-67,929,845),31373=>array(52,-65,916,836),31374=>array(72,-62,902,840),31375=>array(81,-79,935,829),31376=>array(66,-8,941,851),31377=>array(65,-69,937,862),31378=>array(75,-35,925,839),31379=>array(50,-38,954,839),31380=>array(40,-51,963,864),31381=>array(27,-68,937,839),31382=>array(42,-70,934,839),31383=>array(102,-69,898,831),31384=>array(28,-67,930,839),31385=>array(63,-65,938,840),31386=>array(50,-72,952,849),31387=>array(47,-75,963,849),31388=>array(73,-61,896,832),31389=>array(37,-69,897,838),31390=>array(75,-73,915,848),31391=>array(43,-83,898,838),31392=>array(38,-65,962,845),31393=>array(60,-71,955,848),31394=>array(53,-75,957,844),31395=>array(63,-62,957,854),31396=>array(94,-54,954,851),31397=>array(37,-64,936,840),31398=>array(57,-68,914,837),31399=>array(65,-68,935,851),31400=>array(60,-65,954,848),31401=>array(102,-73,898,839),31402=>array(56,-38,956,839),31403=>array(46,-72,969,845),31404=>array(42,-64,979,849),31405=>array(53,-67,927,846),31406=>array(55,-64,925,838),31407=>array(37,-65,963,839),31408=>array(81,-70,935,830),31409=>array(42,-73,971,838),31410=>array(57,-70,951,830),31411=>array(49,-70,959,848),31412=>array(86,-79,937,838),31413=>array(58,-62,927,848),31414=>array(53,-80,947,833),31415=>array(52,-77,909,838),31416=>array(53,-30,974,854),31417=>array(34,-64,951,851),31418=>array(57,-76,962,839),31419=>array(51,-52,952,851),31420=>array(38,-58,966,851),31421=>array(38,-71,961,851),31422=>array(63,-68,974,852),31423=>array(56,-76,933,831),31424=>array(51,-72,960,832),31425=>array(36,-62,952,861),31426=>array(41,-64,970,851),31427=>array(47,-67,965,843),31428=>array(77,-66,948,833),31429=>array(48,-75,970,839),31430=>array(62,-68,918,847),31431=>array(53,-80,950,838),31432=>array(50,-49,968,844),31433=>array(54,-68,967,852),31434=>array(57,-71,921,843),31435=>array(95,-3,912,822),31436=>array(86,-73,975,825),31437=>array(86,-67,950,830),31438=>array(56,-54,934,838),31439=>array(49,-67,935,821),31440=>array(49,-65,964,800),31441=>array(40,-54,945,821),31442=>array(83,-65,938,832),31443=>array(59,-21,929,828),31444=>array(49,-55,909,833),31445=>array(49,-62,963,806),31446=>array(48,-16,952,807),31447=>array(53,-60,952,827),31448=>array(60,-72,935,832),31449=>array(73,-66,918,832),31450=>array(46,-68,964,825),31451=>array(45,-78,975,831),31452=>array(66,-54,954,836),31453=>array(27,-26,947,799),31454=>array(39,-58,932,838),31455=>array(38,-66,946,818),31456=>array(60,-68,940,831),31457=>array(24,-64,957,801),31458=>array(44,-74,979,825),31459=>array(35,-69,964,849),31460=>array(54,-70,962,838),31461=>array(68,-33,932,832),31462=>array(45,-65,971,832),31463=>array(56,-68,957,847),31464=>array(54,-62,969,844),31465=>array(79,-23,957,848),31466=>array(66,-25,960,796),31467=>array(45,-71,956,834),31468=>array(40,-71,948,833),31469=>array(67,-65,921,802),31470=>array(48,-73,953,833),31471=>array(43,-70,942,830),31472=>array(45,-63,948,804),31473=>array(48,-65,957,832),31474=>array(48,-68,935,849),31475=>array(48,-23,963,837),31476=>array(37,-72,957,845),31477=>array(38,-69,944,830),31478=>array(39,-76,959,838),31479=>array(55,-69,969,840),31480=>array(39,-76,962,830),31481=>array(49,-62,949,848),31482=>array(68,-5,943,819),31483=>array(47,-67,948,847),31484=>array(54,-71,948,847),31485=>array(54,-59,954,842),31486=>array(54,-10,948,827),31487=>array(42,-60,931,841),31488=>array(48,-23,947,847),31489=>array(47,-15,955,847),31490=>array(41,-69,969,822),31491=>array(44,-64,919,822),31492=>array(37,-73,945,844),31493=>array(47,-73,977,842),31494=>array(40,-44,914,835),31495=>array(67,-75,933,845),31496=>array(44,-65,955,845),31497=>array(47,-66,945,843),31498=>array(37,-68,964,840),31499=>array(62,-58,962,845),31500=>array(54,-57,943,845),31501=>array(56,-61,939,835),31502=>array(52,-69,966,834),31503=>array(74,-69,960,839),31504=>array(43,-70,964,838),31505=>array(65,-64,953,839),31506=>array(43,-77,971,835),31507=>array(44,-50,965,814),31508=>array(33,-25,918,830),31509=>array(39,-63,932,825),31510=>array(44,-67,962,814),31511=>array(44,-77,969,814),31512=>array(44,-57,932,848),31513=>array(51,-18,938,840),31514=>array(45,-69,941,841),31515=>array(50,-65,952,841),31516=>array(44,-64,941,814),31517=>array(60,-69,927,832),31518=>array(52,-63,944,842),31519=>array(53,-62,951,836),31520=>array(52,-17,945,838),31521=>array(52,-14,957,842),31522=>array(55,-71,959,829),31523=>array(37,-30,956,841),31524=>array(45,-68,954,844),31525=>array(62,-62,956,854),31526=>array(42,-73,950,841),31527=>array(37,-69,956,847),31528=>array(38,-59,970,846),31529=>array(43,-72,958,854),31530=>array(54,-14,959,835),31531=>array(54,-65,942,842),31532=>array(62,-62,932,834),31533=>array(31,-80,969,835),31534=>array(44,-56,945,847),31535=>array(49,-74,953,837),31536=>array(45,-65,933,838),31537=>array(55,-56,948,846),31538=>array(51,-65,932,832),31539=>array(55,-63,950,842),31540=>array(41,-65,938,827),31541=>array(44,-70,953,836),31542=>array(44,-71,968,836),31543=>array(40,-61,962,836),31544=>array(71,-20,962,836),31545=>array(54,-64,946,836),31546=>array(27,-63,931,833),31547=>array(52,-61,950,847),31548=>array(34,-59,940,842),31549=>array(39,33,944,842),31550=>array(31,-57,938,823),31551=>array(34,-73,968,842),31552=>array(51,-32,952,820),31553=>array(31,-43,909,823),31554=>array(31,-44,959,823),31555=>array(46,-61,937,836),31556=>array(53,-68,947,845),31557=>array(61,-58,969,848),31558=>array(74,-64,944,839),31559=>array(54,-66,944,841),31560=>array(41,-57,938,843),31561=>array(65,-68,934,838),31562=>array(58,-60,971,850),31563=>array(48,-65,946,848),31564=>array(42,-23,958,840),31565=>array(51,-52,938,854),31566=>array(40,-58,945,841),31567=>array(42,-59,961,848),31568=>array(42,-83,953,847),31569=>array(47,-61,950,833),31570=>array(43,-61,942,849),31571=>array(38,-65,931,837),31572=>array(34,-71,971,843),31573=>array(53,-54,962,844),31574=>array(46,-65,957,844),31575=>array(50,-68,949,842),31576=>array(56,-67,949,839),31577=>array(32,-61,943,834),31578=>array(37,-68,913,834),31579=>array(43,-69,925,829),31580=>array(45,-60,943,847),31581=>array(41,-66,922,820),31582=>array(37,-65,930,834),31583=>array(36,-64,948,837),31584=>array(50,-71,946,837),31585=>array(38,-71,962,841),31586=>array(39,-64,929,825),31587=>array(41,-69,932,840),31588=>array(33,-54,966,853),31589=>array(38,-54,923,849),31590=>array(37,-57,960,850),31591=>array(47,-66,970,839),31592=>array(37,-69,966,842),31593=>array(42,-54,936,857),31594=>array(33,-16,934,853),31595=>array(33,-62,943,853),31596=>array(38,-67,953,837),31597=>array(58,-52,939,857),31598=>array(62,-11,948,837),31599=>array(52,-75,935,837),31600=>array(54,-70,960,843),31601=>array(39,-67,969,843),31602=>array(50,-67,945,847),31603=>array(24,-65,970,846),31604=>array(34,-55,978,849),31605=>array(36,-74,949,845),31606=>array(49,-70,945,836),31607=>array(49,-70,965,840),31608=>array(50,-67,939,843),31609=>array(29,-63,911,833),31610=>array(42,-69,953,847),31611=>array(51,-66,938,827),31612=>array(47,-81,933,841),31613=>array(47,-69,947,841),31614=>array(46,-20,957,842),31615=>array(26,-64,958,841),31616=>array(46,-59,926,833),31617=>array(46,-59,934,833),31618=>array(42,-67,969,841),31619=>array(27,-74,968,841),31620=>array(47,-67,949,841),31621=>array(50,-70,945,841),31622=>array(47,-51,966,848),31623=>array(41,-67,970,846),31624=>array(40,-72,930,835),31625=>array(36,-63,938,842),31626=>array(39,-69,953,831),31627=>array(51,-60,964,847),31628=>array(52,-72,930,835),31629=>array(69,-58,957,847),31630=>array(43,-73,953,841),31631=>array(41,-61,948,851),31632=>array(48,-62,947,841),31633=>array(32,-57,968,852),31634=>array(41,-68,919,827),31635=>array(48,-52,959,846),31636=>array(48,-65,944,846),31637=>array(63,-58,944,849),31638=>array(44,-69,963,834),31639=>array(50,-75,935,841),31640=>array(61,-69,938,841),31641=>array(38,-52,975,855),31642=>array(57,-68,932,840),31643=>array(33,-61,959,855),31644=>array(49,-28,935,841),31645=>array(57,-59,960,850),31646=>array(46,-46,959,844),31647=>array(57,-54,954,850),31648=>array(41,-19,942,853),31649=>array(53,-68,929,845),31650=>array(48,-66,924,832),31651=>array(41,-65,912,831),31652=>array(45,-70,942,837),31653=>array(48,-62,960,832),31654=>array(27,-81,913,835),31655=>array(41,-17,917,829),31656=>array(38,-69,952,823),31657=>array(39,-61,919,834),31658=>array(52,-70,928,843),31659=>array(44,-68,937,824),31660=>array(55,-65,954,842),31661=>array(60,-58,957,855),31662=>array(60,-24,955,855),31663=>array(44,-70,976,833),31664=>array(66,-51,960,828),31665=>array(46,-62,947,846),31666=>array(69,-62,963,855),31667=>array(45,-72,935,855),31668=>array(39,-68,966,844),31669=>array(45,-70,952,843),31670=>array(42,-61,930,842),31671=>array(41,-66,954,847),31672=>array(49,-67,945,842),31673=>array(40,-72,941,837),31674=>array(43,-72,974,842),31675=>array(43,-70,959,842),31676=>array(43,-74,933,842),31677=>array(43,-27,947,842),31678=>array(50,-72,943,837),31679=>array(43,-64,942,842),31680=>array(54,-65,949,841),31681=>array(57,-36,962,835),31682=>array(67,-47,952,835),31683=>array(57,-70,952,835),31684=>array(67,-64,943,842),31685=>array(62,-62,954,842),31686=>array(56,-60,962,848),31687=>array(46,-69,942,840),31688=>array(33,-58,958,837),31689=>array(53,-67,959,838),31690=>array(42,-69,957,843),31691=>array(54,-71,945,849),31692=>array(38,-68,955,841),31693=>array(33,-64,985,837),31694=>array(53,-76,960,837),31695=>array(53,-64,973,847),31696=>array(38,-28,957,847),31697=>array(38,-75,911,829),31698=>array(38,-66,961,829),31699=>array(45,-60,933,836),31700=>array(54,-64,941,851),31701=>array(59,-14,952,832),31702=>array(46,-75,938,832),31703=>array(32,-62,968,844),31704=>array(55,-68,929,829),31705=>array(45,-65,938,849),31706=>array(36,-26,938,842),31707=>array(40,-71,931,840),31708=>array(53,-83,953,844),31709=>array(51,-69,949,843),31710=>array(63,-70,953,832),31711=>array(44,-65,948,836),31712=>array(30,-53,966,855),31713=>array(45,-60,974,855),31714=>array(62,-76,947,827),31715=>array(72,-69,937,837),31716=>array(53,-59,942,845),31717=>array(56,-67,982,847),31718=>array(49,-38,958,844),31719=>array(58,-68,927,829),31720=>array(35,-54,959,849),31721=>array(41,-64,959,855),31722=>array(47,-71,968,846),31723=>array(71,-67,946,832),31724=>array(43,-66,972,832),31725=>array(57,-54,962,849),31726=>array(54,-29,924,827),31727=>array(33,-71,959,827),31728=>array(66,-73,951,839),31729=>array(66,-64,929,830),31730=>array(47,-73,953,844),31731=>array(55,-59,970,853),31732=>array(45,-68,968,836),31733=>array(49,-71,955,828),31734=>array(42,-64,951,838),31735=>array(50,-46,960,856),31736=>array(42,-74,954,829),31737=>array(44,-39,957,827),31738=>array(57,-78,964,850),31739=>array(53,-64,937,846),31740=>array(59,-73,955,838),31741=>array(47,-68,933,831),31742=>array(41,-67,967,850),31743=>array(56,-73,951,830),31744=>array(64,-65,964,846),31745=>array(53,-74,976,830),31746=>array(60,-69,920,832),31747=>array(46,-70,931,831),31748=>array(36,-80,957,845),31749=>array(49,-72,954,828),31750=>array(44,-71,961,837),31751=>array(49,-67,982,849),31752=>array(45,-60,943,829),31753=>array(57,-70,982,845),31754=>array(50,-34,974,823),31755=>array(44,-30,974,839),31756=>array(33,-65,973,847),31757=>array(58,-74,942,844),31758=>array(71,-69,956,832),31759=>array(39,-65,954,845),31760=>array(57,-72,974,834),31761=>array(33,-66,981,853),31762=>array(39,-78,965,851),31763=>array(33,-64,962,855),31764=>array(29,-67,965,855),31765=>array(60,-71,920,847),31766=>array(52,-70,952,829),31767=>array(58,-63,961,821),31768=>array(50,-62,941,838),31769=>array(53,-72,953,841),31770=>array(46,-86,952,850),31771=>array(29,-49,942,858),31772=>array(56,-75,958,834),31773=>array(52,-67,967,833),31774=>array(50,-58,962,860),31775=>array(31,-67,946,844),31776=>array(56,-29,973,842),31777=>array(27,-61,951,844),31778=>array(59,-66,934,834),31779=>array(42,-63,948,847),31780=>array(43,-69,945,847),31781=>array(36,-53,976,855),31782=>array(48,-33,977,839),31783=>array(36,-68,915,842),31784=>array(51,-58,932,847),31785=>array(46,-68,930,835),31786=>array(47,-68,971,843),31787=>array(52,-76,949,842),31788=>array(57,-73,961,836),31789=>array(44,-63,970,838),31790=>array(36,-68,954,847),31791=>array(36,-55,942,847),31792=>array(46,-67,957,833),31793=>array(49,-67,951,849),31794=>array(43,-75,957,849),31795=>array(54,-65,964,840),31796=>array(42,-83,934,856),31797=>array(66,-62,962,834),31798=>array(23,-61,938,856),31799=>array(41,-54,938,856),31800=>array(43,-68,970,847),31801=>array(60,-67,927,837),31802=>array(43,-33,944,837),31803=>array(45,-74,984,829),31804=>array(44,-67,954,837),31805=>array(27,-65,972,841),31806=>array(31,-53,963,854),31807=>array(44,-70,954,853),31808=>array(61,-64,939,842),31809=>array(37,-74,918,824),31810=>array(39,-71,944,836),31811=>array(53,-16,955,849),31812=>array(36,-52,938,842),31813=>array(51,-70,958,841),31814=>array(46,-75,978,845),31815=>array(44,-59,975,850),31816=>array(36,-62,981,835),31817=>array(46,-35,945,842),31818=>array(37,-67,944,850),31819=>array(43,-66,974,835),31820=>array(56,-58,951,852),31821=>array(33,-62,943,852),31822=>array(43,-68,971,835),31823=>array(43,-95,953,835),31824=>array(39,-62,976,848),31825=>array(28,-82,972,847),31826=>array(61,-64,939,834),31827=>array(37,-64,969,840),31828=>array(35,-56,971,845),31829=>array(45,-70,937,842),31830=>array(38,-53,961,853),31831=>array(50,-60,948,845),31832=>array(39,-67,976,849),31833=>array(38,-52,959,853),31834=>array(42,-62,962,837),31835=>array(52,-72,964,839),31836=>array(57,-68,953,846),31837=>array(50,-68,962,846),31838=>array(47,-62,964,847),31839=>array(42,-69,965,851),31840=>array(49,-62,964,855),31841=>array(33,-60,962,818),31842=>array(45,-69,987,838),31843=>array(40,-67,929,841),31844=>array(38,-53,961,853),31845=>array(35,-60,967,853),31846=>array(39,-33,967,837),31847=>array(28,-57,969,854),31848=>array(22,-56,983,848),31849=>array(34,-67,964,848),31850=>array(33,-71,954,842),31851=>array(40,-60,952,857),31852=>array(61,-62,964,854),31853=>array(56,-73,940,856),31854=>array(54,-59,957,854),31855=>array(38,-75,974,837),31856=>array(31,-55,970,844),31857=>array(29,-78,963,835),31858=>array(46,-71,954,835),31859=>array(57,-67,949,830),31860=>array(33,-58,961,844),31861=>array(41,-71,956,823),31862=>array(41,-73,975,823),31863=>array(41,-71,935,823),31864=>array(36,-64,965,828),31865=>array(28,-68,954,826),31866=>array(38,-61,973,832),31867=>array(39,-62,948,834),31868=>array(48,-63,900,814),31869=>array(56,-59,960,838),31870=>array(42,-75,910,827),31871=>array(41,-76,953,822),31872=>array(38,-71,966,827),31873=>array(37,-68,957,829),31874=>array(37,-58,963,841),31875=>array(32,-65,954,832),31876=>array(44,-71,970,824),31877=>array(59,-65,947,839),31878=>array(59,-65,963,829),31879=>array(69,-65,967,843),31880=>array(53,-65,967,828),31881=>array(29,-67,964,829),31882=>array(43,-68,957,826),31883=>array(48,-63,963,837),31884=>array(58,-67,918,826),31885=>array(39,-54,967,850),31886=>array(69,-76,973,837),31887=>array(49,-71,934,837),31888=>array(42,-66,928,829),31889=>array(42,-65,965,829),31890=>array(37,-64,949,837),31891=>array(46,-67,959,838),31892=>array(44,-70,945,824),31893=>array(51,-60,901,849),31894=>array(49,-70,971,825),31895=>array(46,-62,953,833),31896=>array(52,-64,943,840),31897=>array(46,-64,907,836),31898=>array(51,-62,953,833),31899=>array(50,-62,941,834),31900=>array(37,-67,963,818),31901=>array(29,-66,940,802),31902=>array(35,-67,955,832),31903=>array(56,-72,946,789),31904=>array(55,-69,947,830),31905=>array(55,-64,921,830),31906=>array(40,-65,961,846),31907=>array(33,-65,951,830),31908=>array(62,-65,913,838),31909=>array(79,-65,907,829),31910=>array(43,-77,961,836),31911=>array(35,-55,951,829),31912=>array(46,-70,959,823),31913=>array(52,-70,941,828),31914=>array(45,-59,941,823),31915=>array(48,-68,951,838),31916=>array(48,-56,923,843),31917=>array(53,-65,972,853),31918=>array(37,-56,974,836),31919=>array(52,-70,969,824),31920=>array(37,-64,953,837),31921=>array(46,-70,951,842),31922=>array(42,-62,983,838),31923=>array(39,-67,956,829),31924=>array(51,-71,962,824),31925=>array(54,-68,956,844),31926=>array(33,-67,966,835),31927=>array(67,-63,935,837),31928=>array(49,-77,960,836),31929=>array(29,-59,942,835),31930=>array(52,-70,965,839),31931=>array(36,-70,962,830),31932=>array(42,-70,971,830),31933=>array(42,-67,977,831),31934=>array(45,-66,954,837),31935=>array(45,-68,986,821),31936=>array(53,-68,961,833),31937=>array(21,-71,941,839),31938=>array(45,-73,963,832),31939=>array(63,-70,937,810),31940=>array(31,-65,929,833),31941=>array(34,-66,990,830),31942=>array(36,-70,968,810),31943=>array(30,-68,964,836),31944=>array(40,-67,986,829),31945=>array(38,-62,980,841),31946=>array(52,-68,897,835),31947=>array(37,-72,954,830),31948=>array(39,-65,975,841),31949=>array(42,-65,965,843),31950=>array(30,-75,958,844),31951=>array(69,-79,931,840),31952=>array(39,-70,948,827),31953=>array(38,-68,917,831),31954=>array(39,-72,938,822),31955=>array(39,-73,969,834),31956=>array(41,-79,971,826),31957=>array(52,-62,969,850),31958=>array(42,-69,952,827),31959=>array(48,-65,990,847),31960=>array(31,-68,968,832),31961=>array(42,-64,972,837),31962=>array(53,-69,954,832),31963=>array(56,-67,940,837),31964=>array(34,-62,968,828),31965=>array(28,-76,985,853),31966=>array(62,-69,955,849),31967=>array(40,-67,962,840),31968=>array(31,-66,966,833),31969=>array(50,-60,952,847),31970=>array(32,-62,982,832),31971=>array(34,-66,966,832),31972=>array(66,-73,934,828),31973=>array(60,-60,956,839),31974=>array(40,-71,933,839),31975=>array(40,-72,954,818),31976=>array(38,-69,967,830),31977=>array(25,-64,974,861),31978=>array(39,-67,975,832),31979=>array(70,-65,953,838),31980=>array(47,-67,960,826),31981=>array(38,-62,980,843),31982=>array(30,-64,964,832),31983=>array(47,-59,964,838),31984=>array(40,-68,916,833),31985=>array(40,-67,965,840),31986=>array(37,-71,963,828),31987=>array(54,-56,963,836),31988=>array(37,-67,962,797),31989=>array(42,-72,966,823),31990=>array(39,-68,956,833),31991=>array(46,-68,953,828),31992=>array(56,-65,941,847),31993=>array(226,-64,734,824),31994=>array(52,-64,952,839),31995=>array(62,-64,942,833),31996=>array(60,-67,892,825),31997=>array(60,-70,956,828),31998=>array(38,-67,936,839),31999=>array(60,-67,892,825),32000=>array(35,-64,954,839),32001=>array(60,-66,966,832),32002=>array(84,-64,950,839),32003=>array(57,-73,905,822),32004=>array(34,-64,903,839),32005=>array(34,-64,944,841),32006=>array(69,-64,950,839),32007=>array(34,-64,953,844),32008=>array(34,-78,957,839),32009=>array(60,-67,892,825),32010=>array(54,-60,948,831),32011=>array(34,-66,961,839),32012=>array(56,-64,963,825),32013=>array(34,-65,909,839),32014=>array(43,-71,975,829),32015=>array(44,-72,966,825),32016=>array(34,-64,956,839),32017=>array(53,-70,964,834),32018=>array(38,-71,979,844),32019=>array(47,-59,932,815),32020=>array(34,-64,964,839),32021=>array(44,-64,954,839),32022=>array(57,-72,914,824),32023=>array(34,-64,959,839),32024=>array(34,-64,945,841),32025=>array(34,-70,956,839),32026=>array(34,-66,955,839),32027=>array(34,-64,961,839),32028=>array(74,-64,944,839),32029=>array(40,-31,937,815),32030=>array(48,-71,968,828),32031=>array(52,-76,979,834),32032=>array(63,-60,937,834),32033=>array(34,-71,949,839),32034=>array(65,-69,946,835),32035=>array(57,-63,969,837),32036=>array(57,-62,949,843),32037=>array(82,-65,953,837),32038=>array(73,-44,965,824),32039=>array(84,-60,935,834),32040=>array(73,-73,960,833),32041=>array(35,-76,961,839),32042=>array(57,-35,943,839),32043=>array(57,-67,948,825),32044=>array(32,-64,906,839),32045=>array(61,-67,939,820),32046=>array(49,-60,953,831),32047=>array(51,-63,943,808),32048=>array(34,-64,912,839),32049=>array(62,-62,982,834),32050=>array(69,-67,954,839),32051=>array(36,-64,902,839),32052=>array(43,-65,947,839),32053=>array(54,-68,946,839),32054=>array(35,-54,954,838),32055=>array(49,-78,975,831),32056=>array(32,-38,954,839),32057=>array(34,-64,910,839),32058=>array(35,-64,956,839),32059=>array(39,-74,966,823),32060=>array(52,-62,932,829),32061=>array(36,-39,952,838),32062=>array(48,-75,974,843),32063=>array(84,-65,968,839),32064=>array(67,-65,921,828),32065=>array(32,-32,957,839),32066=>array(34,-77,964,839),32067=>array(34,-65,961,839),32068=>array(38,-64,942,839),32069=>array(44,-64,910,839),32070=>array(64,-64,955,839),32071=>array(40,-73,915,835),32072=>array(47,-67,901,837),32073=>array(35,-60,969,826),32074=>array(40,-67,970,840),32075=>array(44,-66,971,839),32076=>array(37,-64,966,839),32077=>array(40,-68,959,831),32078=>array(44,-64,964,839),32079=>array(49,-74,967,839),32080=>array(35,-64,944,839),32081=>array(42,-68,966,829),32082=>array(57,-70,911,826),32083=>array(54,-55,954,819),32084=>array(52,-66,951,833),32085=>array(50,-48,947,817),32086=>array(34,-72,961,839),32087=>array(61,-46,939,831),32088=>array(57,-75,963,832),32089=>array(41,-39,954,831),32090=>array(36,-39,943,830),32091=>array(32,-62,954,845),32092=>array(57,-63,943,827),32093=>array(36,-58,978,843),32094=>array(34,-64,962,841),32095=>array(58,-57,967,816),32096=>array(71,-65,954,837),32097=>array(34,-64,982,849),32098=>array(34,-64,900,842),32099=>array(64,-72,949,839),32100=>array(62,-65,938,820),32101=>array(36,-67,980,831),32102=>array(34,-65,965,853),32103=>array(51,-61,913,831),32104=>array(44,-64,962,839),32105=>array(41,-70,955,827),32106=>array(34,-64,918,839),32107=>array(81,-70,917,836),32108=>array(69,-64,958,834),32109=>array(43,-70,958,835),32110=>array(63,-60,939,838),32111=>array(46,-65,960,836),32112=>array(50,-39,957,825),32113=>array(34,-64,959,839),32114=>array(64,-71,960,839),32115=>array(49,-64,968,844),32116=>array(49,-65,954,843),32117=>array(34,-64,961,839),32118=>array(35,-64,961,839),32119=>array(41,-68,930,819),32120=>array(60,-61,953,817),32121=>array(33,-64,894,839),32122=>array(35,-55,957,857),32123=>array(44,-72,968,838),32124=>array(55,-65,954,833),32125=>array(69,-66,906,839),32126=>array(30,-70,961,833),32127=>array(34,-64,971,839),32128=>array(46,-70,975,823),32129=>array(54,-61,953,836),32130=>array(48,-70,959,830),32131=>array(51,-65,938,838),32132=>array(48,-70,969,836),32133=>array(57,-63,976,816),32134=>array(36,-71,971,820),32135=>array(36,-62,945,820),32136=>array(57,-65,928,849),32137=>array(44,-74,969,839),32138=>array(38,-69,979,836),32139=>array(38,-60,951,833),32140=>array(61,-68,962,832),32141=>array(43,-52,945,843),32142=>array(32,-71,976,839),32143=>array(59,-67,959,839),32144=>array(49,-67,961,839),32145=>array(59,-62,917,813),32146=>array(49,-71,954,826),32147=>array(44,-64,945,839),32148=>array(35,-66,968,846),32149=>array(59,-41,972,826),32150=>array(46,-59,976,853),32151=>array(37,-51,915,813),32152=>array(44,-61,977,841),32153=>array(34,-65,933,839),32154=>array(34,-64,962,839),32155=>array(44,-64,962,839),32156=>array(34,-65,960,839),32157=>array(35,-68,965,839),32158=>array(42,-46,951,828),32159=>array(34,-69,972,839),32160=>array(34,-67,966,843),32161=>array(48,-70,956,830),32162=>array(34,-67,897,839),32163=>array(34,-64,974,839),32164=>array(55,-54,932,786),32165=>array(41,-71,958,824),32166=>array(41,-59,983,836),32167=>array(48,-70,961,832),32168=>array(38,-77,960,849),32169=>array(58,-67,958,832),32170=>array(44,-69,953,832),32171=>array(50,-64,957,839),32172=>array(34,-65,973,839),32173=>array(34,-64,938,839),32174=>array(34,-73,946,843),32175=>array(39,-64,923,848),32176=>array(44,-64,941,839),32177=>array(34,-64,915,839),32178=>array(33,-64,909,839),32179=>array(57,-67,895,827),32180=>array(32,-65,966,839),32181=>array(34,-68,966,839),32182=>array(39,-64,969,820),32183=>array(34,-66,963,839),32184=>array(34,-67,976,856),32185=>array(42,-64,964,845),32186=>array(39,-64,952,839),32187=>array(34,-66,966,839),32188=>array(50,-71,953,841),32189=>array(44,-64,953,840),32190=>array(34,-66,968,839),32191=>array(34,-68,911,839),32192=>array(40,-73,958,837),32193=>array(53,-64,977,829),32194=>array(56,-74,982,829),32195=>array(36,-71,976,844),32196=>array(45,-62,966,822),32197=>array(43,-82,977,826),32198=>array(49,-73,920,828),32199=>array(49,-64,938,839),32200=>array(42,-64,934,842),32201=>array(45,-68,952,827),32202=>array(57,-63,943,803),32203=>array(34,-68,954,839),32204=>array(32,-62,961,856),32205=>array(40,-65,960,839),32206=>array(40,-66,962,839),32207=>array(34,-64,968,839),32208=>array(49,-68,978,840),32209=>array(34,-64,963,839),32210=>array(34,-67,941,839),32211=>array(39,-66,984,830),32212=>array(53,-74,941,818),32213=>array(34,-82,956,839),32214=>array(34,-67,941,839),32215=>array(71,-73,924,820),32216=>array(34,-68,969,839),32217=>array(45,-61,956,832),32218=>array(34,-64,963,840),32219=>array(54,-72,963,831),32220=>array(67,-70,966,839),32221=>array(34,-68,943,839),32222=>array(29,-69,976,848),32223=>array(54,-48,954,836),32224=>array(34,-67,946,839),32225=>array(34,-64,973,839),32226=>array(53,-67,950,829),32227=>array(34,-64,979,839),32228=>array(34,-64,957,839),32229=>array(36,-61,964,840),32230=>array(51,-41,976,819),32231=>array(55,-70,953,836),32232=>array(33,-67,935,839),32233=>array(34,-64,959,839),32234=>array(40,-64,960,837),32235=>array(43,-36,971,850),32236=>array(34,-64,950,839),32237=>array(64,-64,921,829),32238=>array(49,-72,968,831),32239=>array(32,-64,954,839),32240=>array(49,-71,984,834),32241=>array(44,-62,967,833),32242=>array(24,-71,960,839),32243=>array(36,-72,943,847),32244=>array(34,-66,967,839),32245=>array(53,-61,980,839),32246=>array(40,-55,972,841),32247=>array(50,-68,954,830),32248=>array(62,-44,953,810),32249=>array(38,-64,952,820),32250=>array(51,-70,914,830),32251=>array(24,-72,962,839),32252=>array(51,-41,959,830),32253=>array(51,-90,938,840),32254=>array(51,-63,958,830),32255=>array(35,-39,954,839),32256=>array(33,-50,963,828),32257=>array(34,-64,967,839),32258=>array(33,-50,964,823),32259=>array(48,-70,961,828),32260=>array(34,-64,971,839),32261=>array(24,-64,972,839),32262=>array(33,-59,970,849),32263=>array(46,-50,964,855),32264=>array(63,-65,950,829),32265=>array(34,-66,955,839),32266=>array(34,-64,961,839),32267=>array(34,-64,962,847),32268=>array(55,-75,973,814),32269=>array(41,-70,951,841),32270=>array(38,-69,932,827),32271=>array(40,-67,967,844),32272=>array(59,-64,926,850),32273=>array(44,-65,984,852),32274=>array(34,-64,951,839),32275=>array(47,-71,961,823),32276=>array(46,-70,985,822),32277=>array(34,-64,960,839),32278=>array(47,-72,952,841),32279=>array(37,-63,977,855),32280=>array(33,-61,977,842),32281=>array(48,-70,931,828),32282=>array(53,-71,919,833),32283=>array(34,-64,953,839),32284=>array(44,-78,954,826),32285=>array(33,-82,961,839),32286=>array(34,-71,947,839),32287=>array(24,-64,958,839),32288=>array(33,-77,960,826),32289=>array(34,-68,952,839),32290=>array(39,-70,967,844),32291=>array(54,-57,966,817),32292=>array(49,-72,959,824),32293=>array(43,-70,984,830),32294=>array(34,-70,961,839),32295=>array(43,-60,966,839),32296=>array(62,-74,964,828),32297=>array(59,-70,979,825),32298=>array(44,-68,955,810),32299=>array(35,-64,963,843),32300=>array(42,-45,952,842),32301=>array(56,-61,961,850),32302=>array(34,-65,943,839),32303=>array(34,-72,957,839),32304=>array(51,-71,976,823),32305=>array(24,-70,955,839),32306=>array(34,-64,962,839),32307=>array(35,-69,954,823),32308=>array(55,-70,941,832),32309=>array(34,-65,974,839),32310=>array(60,-59,968,840),32311=>array(34,-65,942,839),32312=>array(41,-73,972,827),32313=>array(34,-64,955,839),32314=>array(34,-64,960,839),32315=>array(34,-62,968,839),32316=>array(42,-72,972,831),32317=>array(34,-64,959,844),32318=>array(34,-73,952,839),32319=>array(42,-79,972,845),32320=>array(51,-68,953,824),32321=>array(59,-71,948,837),32322=>array(42,-72,953,830),32323=>array(34,-72,917,839),32324=>array(71,-73,949,805),32325=>array(34,-65,972,839),32326=>array(34,-75,970,839),32327=>array(59,-60,965,846),32328=>array(48,-74,962,841),32329=>array(46,-68,968,820),32330=>array(29,-64,964,839),32331=>array(57,-71,964,829),32332=>array(38,-75,973,839),32333=>array(34,-67,957,839),32334=>array(39,-71,959,831),32335=>array(49,-58,947,820),32336=>array(35,-44,971,825),32337=>array(44,-64,973,832),32338=>array(34,-71,972,839),32339=>array(42,-73,969,831),32340=>array(28,-66,958,839),32341=>array(34,-67,949,840),32342=>array(24,-72,984,839),32343=>array(43,-71,958,827),32344=>array(47,-61,926,845),32345=>array(34,-67,959,839),32346=>array(34,-64,965,859),32347=>array(45,-65,962,838),32348=>array(45,-70,957,838),32349=>array(34,-68,920,839),32350=>array(34,-64,954,839),32351=>array(43,-68,957,830),32352=>array(50,-67,971,840),32353=>array(26,-72,962,839),32354=>array(42,-70,954,826),32355=>array(40,-39,957,825),32356=>array(36,-66,969,838),32357=>array(37,-65,951,836),32358=>array(24,-64,967,839),32359=>array(25,-75,949,839),32360=>array(55,-73,974,830),32361=>array(34,-64,970,839),32362=>array(34,-68,973,864),32363=>array(53,-73,962,841),32364=>array(39,-65,965,837),32365=>array(63,-57,937,833),32366=>array(41,-39,951,812),32367=>array(40,-66,970,807),32368=>array(34,-64,972,839),32369=>array(48,-38,959,837),32370=>array(49,-68,961,829),32371=>array(51,-71,962,845),32372=>array(50,-71,944,831),32373=>array(47,-45,962,834),32374=>array(43,-33,977,829),32375=>array(44,-64,962,836),32376=>array(30,-78,970,830),32377=>array(34,-66,934,839),32378=>array(45,-74,976,834),32379=>array(34,-64,954,839),32380=>array(24,-70,942,839),32381=>array(34,-70,958,839),32382=>array(57,-59,976,836),32383=>array(34,-64,957,844),32384=>array(42,-67,972,829),32385=>array(30,-58,971,851),32386=>array(22,-71,974,850),32387=>array(34,-68,969,839),32388=>array(36,-62,963,833),32389=>array(56,-68,948,850),32390=>array(51,-38,967,830),32391=>array(41,-66,960,831),32392=>array(34,-64,970,839),32393=>array(34,-64,981,845),32394=>array(31,-77,967,839),32395=>array(49,-68,961,837),32396=>array(34,-84,957,839),32397=>array(53,-62,947,789),32398=>array(24,-64,967,839),32399=>array(35,-67,961,839),32400=>array(19,-64,980,839),32401=>array(46,-68,956,833),32402=>array(34,-64,950,839),32403=>array(34,-67,954,839),32404=>array(24,-68,966,847),32405=>array(32,-68,979,849),32406=>array(19,-64,967,839),32407=>array(38,-65,941,833),32408=>array(30,-68,972,839),32409=>array(40,-67,964,835),32410=>array(26,-68,974,829),32411=>array(42,-71,953,839),32412=>array(19,-64,960,847),32413=>array(42,-62,955,822),32414=>array(53,-31,947,842),32415=>array(271,10,660,829),32416=>array(72,-69,847,828),32417=>array(57,-56,933,828),32418=>array(74,3,936,828),32419=>array(57,-64,933,828),32420=>array(43,-67,942,812),32421=>array(57,-24,936,843),32422=>array(61,-62,879,835),32423=>array(62,-71,941,828),32424=>array(58,-56,964,838),32425=>array(54,-66,912,830),32426=>array(57,-15,936,828),32427=>array(73,-69,874,820),32428=>array(46,-69,903,824),32429=>array(57,-54,927,828),32430=>array(77,-71,950,837),32431=>array(70,-34,929,834),32432=>array(57,-47,937,829),32433=>array(66,-59,943,824),32434=>array(40,-59,885,829),32435=>array(52,-57,898,833),32436=>array(72,-21,939,813),32437=>array(41,-64,945,833),32438=>array(32,-21,943,835),32439=>array(75,-67,957,828),32440=>array(46,-70,926,825),32441=>array(71,-65,944,840),32442=>array(60,-66,921,842),32443=>array(60,11,934,828),32444=>array(74,-72,895,824),32445=>array(74,-23,936,820),32446=>array(57,-61,915,828),32447=>array(44,-60,937,831),32448=>array(57,-66,942,829),32449=>array(57,-22,937,828),32450=>array(57,-65,966,832),32451=>array(35,-61,947,830),32452=>array(57,-14,925,807),32453=>array(77,-64,885,835),32454=>array(60,-57,895,783),32455=>array(39,-56,942,802),32456=>array(62,-79,947,834),32457=>array(39,-57,873,827),32458=>array(57,-66,938,832),32459=>array(53,-64,915,827),32460=>array(57,-67,903,828),32461=>array(54,-72,894,786),32462=>array(41,-74,958,818),32463=>array(57,-33,938,819),32464=>array(57,-67,950,832),32465=>array(42,-69,937,834),32466=>array(71,-65,945,835),32467=>array(67,-66,933,837),32468=>array(57,-63,958,840),32469=>array(44,-60,944,835),32470=>array(76,-22,923,828),32471=>array(53,-66,947,830),32472=>array(44,-55,934,838),32473=>array(57,-67,949,852),32474=>array(59,-58,882,839),32475=>array(57,-57,960,842),32476=>array(74,-63,967,847),32477=>array(39,-21,925,832),32478=>array(81,-64,947,840),32479=>array(57,-71,942,838),32480=>array(57,-74,954,828),32481=>array(57,-67,921,835),32482=>array(73,-59,879,827),32483=>array(50,-85,942,807),32484=>array(59,-68,962,832),32485=>array(59,-69,942,834),32486=>array(25,-66,964,833),32487=>array(53,-23,940,809),32488=>array(61,-67,909,847),32489=>array(41,-62,931,833),32490=>array(53,-69,924,829),32491=>array(57,-68,951,834),32492=>array(52,-66,969,828),32493=>array(28,-67,932,833),32494=>array(59,-63,937,836),32495=>array(63,-66,939,827),32496=>array(65,-65,936,838),32497=>array(53,-74,916,827),32498=>array(57,-64,949,828),32499=>array(50,-23,940,826),32500=>array(63,-64,920,836),32501=>array(67,-70,886,842),32502=>array(57,-72,958,836),32503=>array(34,-74,925,792),32504=>array(57,-69,881,827),32505=>array(49,-67,924,840),32506=>array(30,-64,937,828),32507=>array(53,-41,973,839),32508=>array(53,-67,934,844),32509=>array(61,-68,951,843),32510=>array(53,-64,917,850),32511=>array(30,-64,943,819),32512=>array(53,-67,973,818),32513=>array(57,-66,921,836),32514=>array(53,-63,939,829),32515=>array(53,-74,910,827),32516=>array(52,-70,953,832),32517=>array(60,-66,931,814),32518=>array(35,-54,932,841),32519=>array(57,-66,935,828),32520=>array(52,-73,937,830),32521=>array(57,-70,935,822),32522=>array(69,-28,959,805),32523=>array(39,-66,919,830),32524=>array(57,-43,959,828),32525=>array(52,-33,933,830),32526=>array(53,-71,953,818),32527=>array(53,-57,954,839),32528=>array(59,-64,959,842),32529=>array(53,-69,971,831),32530=>array(53,-72,951,844),32531=>array(66,-67,949,827),32532=>array(62,-69,925,848),32533=>array(39,-54,941,838),32534=>array(34,-69,922,837),32535=>array(57,-64,956,828),32536=>array(53,-73,937,834),32537=>array(47,-64,911,827),32538=>array(50,-67,946,832),32539=>array(53,-64,942,827),32540=>array(53,-68,936,843),32541=>array(52,-53,955,816),32542=>array(69,-63,962,855),32543=>array(53,-67,932,850),32544=>array(36,-64,919,847),32545=>array(56,-63,944,847),32546=>array(53,-23,943,840),32547=>array(55,-67,967,851),32548=>array(33,-50,933,824),32549=>array(57,-64,940,819),32550=>array(53,-68,958,827),32551=>array(53,-64,959,827),32552=>array(39,-75,937,822),32553=>array(41,-66,917,841),32554=>array(52,-76,953,817),32555=>array(53,-67,955,837),32556=>array(38,-68,945,825),32557=>array(57,-64,947,855),32558=>array(62,-67,931,839),32559=>array(53,-64,901,851),32560=>array(50,-40,935,806),32561=>array(53,-72,951,834),32562=>array(53,-66,963,827),32563=>array(57,-68,952,828),32564=>array(53,-71,946,842),32565=>array(38,-69,933,822),32566=>array(47,-60,953,831),32567=>array(58,-62,909,838),32568=>array(44,-45,941,836),32569=>array(50,-72,960,845),32570=>array(59,-68,950,836),32571=>array(58,-32,962,836),32572=>array(80,-73,960,851),32573=>array(48,-54,971,848),32574=>array(58,-53,954,855),32575=>array(49,-58,945,843),32576=>array(47,-64,960,851),32577=>array(47,-65,951,851),32578=>array(48,-68,912,780),32579=>array(69,-71,945,838),32580=>array(49,-68,956,833),32581=>array(48,-72,931,834),32582=>array(48,-68,951,829),32583=>array(45,-72,970,838),32584=>array(48,-70,953,831),32585=>array(63,-54,935,837),32586=>array(72,-68,958,825),32587=>array(62,-68,939,838),32588=>array(59,-65,951,790),32589=>array(68,-62,957,797),32590=>array(34,-53,951,842),32591=>array(45,-63,957,841),32592=>array(44,-59,949,838),32593=>array(117,-60,883,780),32594=>array(148,317,884,597),32595=>array(137,265,863,657),32596=>array(114,-68,894,787),32597=>array(64,-64,917,786),32598=>array(110,10,917,802),32599=>array(69,-55,884,792),32600=>array(45,-64,955,787),32601=>array(50,-68,955,789),32602=>array(98,-57,869,791),32603=>array(42,-61,973,798),32604=>array(79,-35,961,777),32605=>array(55,-20,950,798),32606=>array(56,-62,947,790),32607=>array(68,-60,954,787),32608=>array(47,-58,947,784),32609=>array(63,-24,941,785),32610=>array(55,-60,904,792),32611=>array(63,-33,958,763),32612=>array(55,-53,908,785),32613=>array(141,-70,883,779),32614=>array(82,-68,933,783),32615=>array(55,-71,971,780),32616=>array(29,-34,966,794),32617=>array(59,-69,956,782),32618=>array(57,-69,943,794),32619=>array(59,-64,968,787),32620=>array(44,-72,969,784),32621=>array(63,-51,963,800),32622=>array(100,-73,945,813),32623=>array(81,-69,931,787),32624=>array(71,-73,900,810),32625=>array(51,-72,949,791),32626=>array(58,-65,944,789),32627=>array(56,-26,954,780),32628=>array(34,-62,928,776),32629=>array(57,-69,919,783),32630=>array(136,-70,882,783),32631=>array(68,-63,967,807),32632=>array(85,-73,951,782),32633=>array(39,-64,949,788),32634=>array(44,-70,973,783),32635=>array(41,-68,951,782),32636=>array(59,-65,943,810),32637=>array(36,-65,947,791),32638=>array(110,-67,905,794),32639=>array(50,-8,947,805),32640=>array(107,-71,916,787),32641=>array(49,-65,890,772),32642=>array(64,-63,896,802),32643=>array(42,-65,968,792),32644=>array(44,-64,953,815),32645=>array(38,-67,950,807),32646=>array(43,-73,956,784),32647=>array(63,-64,953,788),32648=>array(62,-64,938,796),32649=>array(50,-52,968,792),32650=>array(72,-67,946,855),32651=>array(60,-67,953,821),32652=>array(39,-61,953,844),32653=>array(38,-67,965,836),32654=>array(45,-61,955,845),32655=>array(54,-68,957,842),32656=>array(34,-67,974,830),32657=>array(52,-67,991,854),32658=>array(54,-73,985,842),32659=>array(44,-71,972,842),32660=>array(61,-63,957,856),32661=>array(46,-66,965,848),32662=>array(50,-71,967,834),32663=>array(36,-66,965,841),32664=>array(53,-68,954,843),32665=>array(53,-63,941,854),32666=>array(22,-68,960,847),32667=>array(53,-69,938,846),32668=>array(57,-66,960,844),32669=>array(42,-73,950,839),32670=>array(29,-33,934,838),32671=>array(36,-68,922,823),32672=>array(43,-72,969,840),32673=>array(49,-74,960,845),32674=>array(52,-69,974,837),32675=>array(57,-64,954,787),32676=>array(32,-62,960,850),32677=>array(46,-75,950,833),32678=>array(41,-73,964,834),32679=>array(35,-75,965,830),32680=>array(49,-62,978,858),32681=>array(48,-63,941,843),32682=>array(42,-77,965,842),32683=>array(39,-70,950,845),32684=>array(51,-70,978,822),32685=>array(50,-74,969,827),32686=>array(33,-58,974,860),32687=>array(55,-67,930,842),32688=>array(41,-82,971,831),32689=>array(53,-73,970,833),32690=>array(34,-66,959,853),32691=>array(46,-69,968,832),32692=>array(35,-83,969,808),32693=>array(46,-82,967,826),32694=>array(16,-65,959,842),32695=>array(53,-71,969,835),32696=>array(29,-60,973,841),32697=>array(51,-62,966,853),32698=>array(49,-64,968,833),32699=>array(52,-69,970,836),32700=>array(41,-71,965,797),32701=>array(73,-50,892,785),32702=>array(40,-70,953,783),32703=>array(43,-64,945,780),32704=>array(47,-63,917,836),32705=>array(47,-62,958,822),32706=>array(43,-71,981,790),32707=>array(52,-67,938,840),32708=>array(47,-73,970,837),32709=>array(31,-59,972,839),32710=>array(54,-58,946,790),32711=>array(41,-76,959,785),32712=>array(113,-79,923,788),32713=>array(29,-64,910,826),32714=>array(56,-65,915,821),32715=>array(42,-67,950,836),32716=>array(50,-20,942,798),32717=>array(33,-72,962,821),32718=>array(31,-63,918,838),32719=>array(32,-76,965,785),32720=>array(32,-74,976,827),32721=>array(37,-64,914,828),32722=>array(74,-72,892,782),32723=>array(70,-65,914,838),32724=>array(51,-60,893,855),32725=>array(47,-63,965,845),32726=>array(26,-64,916,817),32727=>array(61,-70,916,829),32728=>array(32,-71,941,818),32729=>array(45,-64,931,836),32730=>array(74,-65,926,801),32731=>array(37,-63,982,844),32732=>array(37,-72,964,783),32733=>array(30,-48,910,825),32734=>array(53,-68,962,834),32735=>array(40,-80,927,807),32736=>array(53,-61,947,807),32737=>array(46,-56,921,826),32738=>array(41,-71,903,782),32739=>array(61,-63,936,797),32740=>array(98,-71,918,785),32741=>array(42,-59,956,834),32742=>array(65,-59,959,863),32743=>array(57,-69,913,855),32744=>array(88,-65,970,785),32745=>array(41,-60,917,795),32746=>array(59,-73,968,825),32747=>array(52,-74,963,783),32748=>array(62,-62,957,790),32749=>array(53,-76,983,824),32750=>array(75,-64,903,788),32751=>array(66,-52,941,802),32752=>array(60,-69,978,853),32753=>array(46,-63,904,848),32754=>array(41,-73,895,780),32755=>array(60,-67,929,785),32756=>array(40,-73,969,816),32757=>array(37,-54,948,854),32758=>array(48,-77,913,839),32759=>array(53,-67,917,830),32760=>array(61,-70,919,835),32761=>array(28,-66,966,830),32762=>array(46,-68,913,845),32763=>array(59,-67,909,824),32764=>array(54,-66,946,807),32765=>array(30,-67,910,832),32766=>array(60,-57,928,795),32767=>array(66,-52,917,843),32768=>array(28,-73,954,828),32769=>array(38,-39,923,832),32770=>array(21,160,923,832),32771=>array(48,-56,929,836),32772=>array(39,-36,948,834),32773=>array(62,-64,929,836),32774=>array(33,-69,938,836),32775=>array(59,-64,950,835),32776=>array(69,-66,933,840),32777=>array(40,-55,951,840),32778=>array(49,-53,950,836),32779=>array(53,-53,950,836),32780=>array(89,-68,923,768),32781=>array(63,-68,934,789),32782=>array(46,-67,970,791),32783=>array(55,-74,951,822),32784=>array(51,-79,956,836),32785=>array(62,-62,954,840),32786=>array(55,-65,968,829),32787=>array(46,-65,924,827),32788=>array(46,-65,957,828),32789=>array(31,-73,954,831),32790=>array(31,-70,970,831),32791=>array(35,-68,924,828),32792=>array(36,-73,943,832),32793=>array(36,-73,951,832),32794=>array(46,-72,960,833),32795=>array(47,-71,951,839),32796=>array(38,-73,909,832),32797=>array(31,-73,938,831),32798=>array(47,-68,914,829),32799=>array(49,-58,964,828),32800=>array(21,-78,964,842),32801=>array(59,-66,929,831),32802=>array(25,-72,914,818),32803=>array(46,-73,968,844),32804=>array(46,-70,956,826),32805=>array(39,-69,933,832),32806=>array(61,-71,927,830),32807=>array(32,-73,922,806),32808=>array(34,-64,959,832),32809=>array(36,-67,964,833),32810=>array(43,-69,954,842),32811=>array(44,-71,943,830),32812=>array(34,-69,954,835),32813=>array(53,-69,949,840),32814=>array(44,-86,968,831),32815=>array(49,-69,966,827),32816=>array(33,-62,979,830),32817=>array(23,-68,955,838),32818=>array(45,-69,972,849),32819=>array(55,-74,922,781),32820=>array(56,-67,967,828),32821=>array(48,-62,954,789),32822=>array(59,-67,930,786),32823=>array(40,-69,960,839),32824=>array(55,-66,916,830),32825=>array(55,-67,978,853),32826=>array(29,-67,944,789),32827=>array(42,-64,951,824),32828=>array(46,-67,957,789),32829=>array(40,-70,950,831),32830=>array(55,-65,960,838),32831=>array(38,-67,954,825),32832=>array(50,-67,967,825),32833=>array(49,-67,951,805),32834=>array(39,-60,952,794),32835=>array(35,-65,961,829),32836=>array(50,-72,971,850),32837=>array(50,-67,945,819),32838=>array(28,-62,966,854),32839=>array(58,-70,957,781),32840=>array(72,-80,921,822),32841=>array(46,-68,921,827),32842=>array(59,-71,914,830),32843=>array(51,-48,923,841),32844=>array(31,-70,955,782),32845=>array(29,-68,924,830),32846=>array(63,-67,962,826),32847=>array(49,-68,960,785),32848=>array(45,-70,959,822),32849=>array(50,-70,955,770),32850=>array(36,-64,941,804),32851=>array(47,-59,960,806),32852=>array(37,-60,940,830),32853=>array(50,-67,955,844),32854=>array(66,-37,934,805),32855=>array(50,-75,968,833),32856=>array(33,-71,955,831),32857=>array(50,-67,974,835),32858=>array(36,-61,948,793),32859=>array(50,-67,956,841),32860=>array(48,-67,956,834),32861=>array(45,-71,952,823),32862=>array(119,-68,901,786),32863=>array(34,-69,950,852),32864=>array(50,-68,959,845),32865=>array(32,-65,968,819),32866=>array(50,-83,949,797),32867=>array(50,-67,953,816),32868=>array(41,-61,970,856),32869=>array(50,-68,925,827),32870=>array(50,-67,964,839),32871=>array(51,-72,970,817),32872=>array(52,-65,963,806),32873=>array(34,-69,928,824),32874=>array(33,-60,950,838),32875=>array(48,-65,963,806),32876=>array(46,-71,971,827),32877=>array(50,-67,969,856),32878=>array(52,-65,967,782),32879=>array(42,-65,946,842),32880=>array(43,-66,973,835),32881=>array(53,-70,948,838),32882=>array(62,-64,946,833),32883=>array(48,-70,952,846),32884=>array(44,-67,963,839),32885=>array(40,-67,962,838),32886=>array(42,-66,951,808),32887=>array(35,-70,960,839),32888=>array(44,-73,942,827),32889=>array(41,-64,967,835),32890=>array(41,-65,948,846),32891=>array(35,-65,954,831),32892=>array(44,-67,966,847),32893=>array(58,-67,966,840),32894=>array(43,-71,962,840),32895=>array(73,-66,945,833),32896=>array(73,-66,931,833),32897=>array(45,-61,947,848),32898=>array(50,-72,953,828),32899=>array(50,-62,941,834),32900=>array(28,-68,945,829),32901=>array(46,-69,947,833),32902=>array(46,-61,946,841),32903=>array(51,-61,949,850),32904=>array(50,-61,953,856),32905=>array(118,-73,882,841),32906=>array(49,-68,959,783),32907=>array(68,-70,898,834),32908=>array(31,-74,948,773),32909=>array(59,-75,957,831),32910=>array(116,-45,892,762),32911=>array(42,-79,958,777),32912=>array(41,-78,977,826),32913=>array(76,-59,921,844),32914=>array(39,-64,954,833),32915=>array(135,-50,924,826),32916=>array(60,-71,963,825),32917=>array(53,-65,908,799),32918=>array(133,-61,861,836),32919=>array(60,-71,944,839),32920=>array(57,-70,933,826),32921=>array(70,-64,841,788),32922=>array(63,-68,938,829),32923=>array(54,-70,942,786),32924=>array(44,-58,965,856),32925=>array(60,-71,936,785),32926=>array(48,-62,959,803),32927=>array(31,-80,950,782),32928=>array(22,-61,886,786),32929=>array(51,-65,944,788),32930=>array(43,-70,969,837),32931=>array(35,-69,972,833),32932=>array(38,-71,939,831),32933=>array(51,-70,949,779),32934=>array(29,-60,968,810),32935=>array(60,-72,944,785),32936=>array(60,-71,940,813),32937=>array(53,-70,901,810),32938=>array(34,-71,949,825),32939=>array(38,-67,957,833),32940=>array(44,-62,961,831),32941=>array(24,-68,877,799),32942=>array(41,-73,957,832),32943=>array(59,-54,953,831),32944=>array(60,-71,977,837),32945=>array(30,-62,945,826),32946=>array(92,-49,907,840),32947=>array(46,-71,921,829),32948=>array(52,-49,928,844),32949=>array(39,-68,954,829),32950=>array(37,-58,956,824),32951=>array(30,-67,939,824),32952=>array(46,-65,956,811),32953=>array(56,-71,959,811),32954=>array(31,-70,953,839),32955=>array(121,-58,897,827),32956=>array(23,-82,950,827),32957=>array(23,-81,956,822),32958=>array(124,-69,944,820),32959=>array(31,-68,894,814),32960=>array(35,-73,946,815),32961=>array(27,-65,948,824),32962=>array(50,-71,912,833),32963=>array(170,-49,849,785),32964=>array(177,-48,838,834),32965=>array(45,-76,974,826),32966=>array(37,-70,954,786),32967=>array(45,-75,928,826),32968=>array(41,-73,968,826),32969=>array(40,-60,903,854),32970=>array(34,-66,908,843),32971=>array(57,-70,934,835),32972=>array(60,-57,937,826),32973=>array(31,-73,977,837),32974=>array(49,-70,944,838),32975=>array(51,-60,957,840),32976=>array(45,-59,905,840),32977=>array(32,-55,966,797),32978=>array(57,-70,945,788),32979=>array(57,-70,959,789),32980=>array(54,-68,968,835),32981=>array(44,-57,961,848),32982=>array(45,-69,934,834),32983=>array(39,-68,980,840),32984=>array(42,-67,957,836),32985=>array(53,-70,940,837),32986=>array(44,-69,948,786),32987=>array(49,-70,899,787),32988=>array(44,-69,953,824),32989=>array(34,-72,948,833),32990=>array(37,-64,958,845),32991=>array(35,-60,962,787),32992=>array(29,-62,957,839),32993=>array(71,-67,895,818),32994=>array(66,-70,948,787),32995=>array(47,-71,964,825),32996=>array(40,-66,967,846),32997=>array(38,-50,935,789),32998=>array(38,-67,981,829),32999=>array(18,-67,931,826),33000=>array(31,-72,939,817),33001=>array(31,-80,946,822),33002=>array(34,-69,921,817),33003=>array(32,-72,923,782),33004=>array(35,-66,932,827),33005=>array(48,-68,910,790),33006=>array(35,-70,965,837),33007=>array(28,-70,969,848),33008=>array(39,-72,963,838),33009=>array(35,-60,959,823),33010=>array(52,-69,975,845),33011=>array(35,-71,967,845),33012=>array(28,-70,912,786),33013=>array(46,-72,959,782),33014=>array(28,-71,946,842),33015=>array(73,-71,878,847),33016=>array(31,-58,924,841),33017=>array(46,-73,965,780),33018=>array(45,-72,948,840),33019=>array(49,-67,967,838),33020=>array(27,-70,947,845),33021=>array(63,-55,959,844),33022=>array(51,-64,952,829),33023=>array(34,-72,959,827),33024=>array(35,-77,972,813),33025=>array(29,-67,962,818),33026=>array(48,-70,952,815),33027=>array(33,-54,947,821),33028=>array(33,-70,965,824),33029=>array(73,-52,940,841),33030=>array(30,-72,958,844),33031=>array(40,-67,915,841),33032=>array(35,-62,967,836),33033=>array(44,-70,972,840),33034=>array(56,-59,944,835),33035=>array(73,-49,940,808),33036=>array(33,-70,943,841),33037=>array(38,-74,951,818),33038=>array(37,-73,932,818),33039=>array(31,-66,920,821),33040=>array(24,-82,951,832),33041=>array(43,-64,951,841),33042=>array(27,-70,980,821),33043=>array(32,-72,962,827),33044=>array(28,-64,923,846),33045=>array(44,-72,967,837),33046=>array(45,-67,951,837),33047=>array(45,-58,925,851),33048=>array(26,-67,963,821),33049=>array(42,-75,948,820),33050=>array(33,-61,913,810),33051=>array(49,-65,945,791),33052=>array(27,-70,944,776),33053=>array(48,-71,946,835),33054=>array(49,-60,970,833),33055=>array(39,-71,953,815),33056=>array(44,-62,972,820),33057=>array(44,-62,972,820),33058=>array(41,-70,942,839),33059=>array(58,-56,935,790),33060=>array(33,-57,967,800),33061=>array(44,-78,964,822),33062=>array(31,-70,968,831),33063=>array(33,-71,985,838),33064=>array(31,-70,975,825),33065=>array(37,-67,965,846),33066=>array(31,-70,961,846),33067=>array(32,-71,968,812),33068=>array(65,-72,986,834),33069=>array(39,-54,950,787),33070=>array(31,-75,948,835),33071=>array(28,-70,952,839),33072=>array(44,-60,956,797),33073=>array(59,-71,944,833),33074=>array(23,-71,970,788),33075=>array(27,-67,964,818),33076=>array(31,-70,969,797),33077=>array(31,-58,947,788),33078=>array(34,-67,925,785),33079=>array(31,-70,906,833),33080=>array(26,-65,944,836),33081=>array(42,-64,962,799),33082=>array(34,-71,943,839),33083=>array(31,-72,959,833),33084=>array(31,-66,948,787),33085=>array(23,-68,945,830),33086=>array(28,-70,957,841),33087=>array(31,-70,974,841),33088=>array(31,-73,976,851),33089=>array(31,-71,953,830),33090=>array(31,-70,969,788),33091=>array(46,-71,981,830),33092=>array(33,-67,953,833),33093=>array(31,-70,970,841),33094=>array(28,-70,965,835),33095=>array(38,-81,974,822),33096=>array(32,-77,940,828),33097=>array(43,-70,959,816),33098=>array(52,-69,956,824),33099=>array(21,-70,970,812),33100=>array(31,-72,972,844),33101=>array(41,-66,972,825),33102=>array(108,-59,958,815),33103=>array(40,-78,980,783),33104=>array(46,-68,948,839),33105=>array(28,-70,952,835),33106=>array(44,-74,944,784),33107=>array(18,-66,936,818),33108=>array(29,-70,947,822),33109=>array(26,-64,962,834),33110=>array(31,-70,973,835),33111=>array(31,-70,955,831),33112=>array(31,-70,919,787),33113=>array(34,-78,951,833),33114=>array(23,-83,949,831),33115=>array(46,-72,954,782),33116=>array(47,-75,973,822),33117=>array(31,-70,975,788),33118=>array(45,-67,970,836),33119=>array(31,-70,952,836),33120=>array(49,-72,987,831),33121=>array(34,-77,903,782),33122=>array(38,-67,911,803),33123=>array(31,-70,948,850),33124=>array(38,-69,955,840),33125=>array(19,-70,945,788),33126=>array(65,-65,925,846),33127=>array(34,-70,973,855),33128=>array(31,-70,956,835),33129=>array(49,-71,974,830),33130=>array(31,-70,953,788),33131=>array(48,-64,945,836),33132=>array(31,-70,977,796),33133=>array(28,-70,947,787),33134=>array(28,-70,964,786),33135=>array(47,-72,956,832),33136=>array(24,-70,941,793),33137=>array(26,-63,964,829),33138=>array(43,-77,981,782),33139=>array(58,-71,911,820),33140=>array(27,-70,972,833),33141=>array(48,-70,980,791),33142=>array(39,-75,979,825),33143=>array(37,-71,954,785),33144=>array(42,-60,952,801),33145=>array(21,-70,973,837),33146=>array(21,-70,968,837),33147=>array(28,-70,950,829),33148=>array(26,-76,941,778),33149=>array(26,-78,950,784),33150=>array(31,-61,951,836),33151=>array(22,-60,958,783),33152=>array(28,-69,938,819),33153=>array(30,-70,983,843),33154=>array(46,-48,944,847),33155=>array(60,-70,967,785),33156=>array(48,-70,986,830),33157=>array(48,-64,954,843),33158=>array(45,-64,953,825),33159=>array(45,-72,981,832),33160=>array(18,-69,939,784),33161=>array(41,-75,964,826),33162=>array(34,-70,961,831),33163=>array(72,-67,932,835),33164=>array(44,-70,980,823),33165=>array(49,-72,961,835),33166=>array(36,-74,972,842),33167=>array(94,-62,906,834),33168=>array(46,-52,944,846),33169=>array(25,-63,934,832),33170=>array(48,-70,963,787),33171=>array(48,-75,969,853),33172=>array(43,-64,953,839),33173=>array(44,-75,920,783),33174=>array(30,-70,971,844),33175=>array(37,-65,959,829),33176=>array(39,-69,962,788),33177=>array(39,-60,969,829),33178=>array(46,-68,941,848),33179=>array(47,-72,954,835),33180=>array(19,-70,972,823),33181=>array(28,-70,966,828),33182=>array(41,-69,944,826),33183=>array(45,-70,958,839),33184=>array(39,-76,977,788),33185=>array(18,-70,987,850),33186=>array(45,-67,951,824),33187=>array(33,-71,938,817),33188=>array(18,-70,968,787),33189=>array(37,-62,950,844),33190=>array(39,-70,954,832),33191=>array(26,-60,950,833),33192=>array(17,-70,975,837),33193=>array(36,-78,969,836),33194=>array(26,-68,891,832),33195=>array(49,-75,982,845),33196=>array(55,-75,986,830),33197=>array(30,-70,969,839),33198=>array(40,-68,975,829),33199=>array(24,-70,981,837),33200=>array(30,-60,966,852),33201=>array(45,-75,983,840),33202=>array(41,-68,969,838),33203=>array(35,-67,949,840),33204=>array(36,-57,963,848),33205=>array(40,-67,964,830),33206=>array(48,-70,930,793),33207=>array(49,-70,967,827),33208=>array(42,-70,956,839),33209=>array(46,-79,956,830),33210=>array(28,-68,922,839),33211=>array(42,-70,959,845),33212=>array(43,-72,976,805),33213=>array(38,-66,956,853),33214=>array(36,-71,983,859),33215=>array(35,-75,969,840),33216=>array(35,-57,960,788),33217=>array(30,-82,961,837),33218=>array(33,-58,927,836),33219=>array(37,-75,952,849),33220=>array(39,-68,959,822),33221=>array(50,-69,916,787),33222=>array(21,-70,963,840),33223=>array(48,-67,931,835),33224=>array(36,-70,940,833),33225=>array(53,-68,991,854),33226=>array(39,-87,974,784),33227=>array(35,-71,959,827),33228=>array(40,-72,973,836),33229=>array(45,-73,966,843),33230=>array(36,-58,962,805),33231=>array(35,-74,955,847),33232=>array(45,-73,964,840),33233=>array(46,-78,948,777),33234=>array(44,-73,969,835),33235=>array(32,-61,966,838),33236=>array(32,-60,973,796),33237=>array(30,-60,965,853),33238=>array(41,-54,954,830),33239=>array(55,-70,979,837),33240=>array(40,-65,956,848),33241=>array(43,-75,969,829),33242=>array(43,-74,971,827),33243=>array(48,-67,946,790),33244=>array(41,-71,972,827),33245=>array(41,-50,964,867),33246=>array(39,-56,955,805),33247=>array(28,-61,970,838),33248=>array(54,-67,942,846),33249=>array(54,-53,949,849),33250=>array(43,-78,956,829),33251=>array(151,-58,927,780),33252=>array(100,-31,976,782),33253=>array(120,-65,959,820),33254=>array(58,-70,954,772),33255=>array(31,-63,956,836),33256=>array(120,-65,932,841),33257=>array(48,-76,965,781),33258=>array(201,-67,821,853),33259=>array(87,-47,948,840),33260=>array(46,-67,967,850),33261=>array(56,-63,970,844),33262=>array(42,-66,937,837),33263=>array(52,-64,946,849),33264=>array(61,-72,925,852),33265=>array(109,-101,922,839),33266=>array(37,-71,967,844),33267=>array(80,-16,915,770),33268=>array(59,-71,971,831),33269=>array(49,-57,965,848),33270=>array(55,-68,962,840),33271=>array(58,-72,960,821),33272=>array(54,-42,952,756),33273=>array(46,-78,954,824),33274=>array(80,-32,933,829),33275=>array(56,-68,959,829),33276=>array(156,-46,863,793),33277=>array(138,-68,825,829),33278=>array(42,-71,966,824),33279=>array(57,-68,954,833),33280=>array(83,-67,917,834),33281=>array(50,-74,956,834),33282=>array(44,-65,969,838),33283=>array(85,-60,898,834),33284=>array(58,-68,927,834),33285=>array(65,-52,874,842),33286=>array(52,-59,924,829),33287=>array(40,-70,955,836),33288=>array(68,-56,951,826),33289=>array(55,-67,965,810),33290=>array(62,-67,947,832),33291=>array(73,-41,936,832),33292=>array(76,-55,909,831),33293=>array(46,-65,958,856),33294=>array(46,-65,958,856),33295=>array(61,-57,879,831),33296=>array(43,-62,948,828),33297=>array(58,-67,956,829),33298=>array(45,-64,945,848),33299=>array(40,-53,931,818),33300=>array(55,-63,971,789),33301=>array(57,-75,961,824),33302=>array(36,-56,947,851),33303=>array(39,-58,955,843),33304=>array(31,-65,933,851),33305=>array(45,-63,965,846),33306=>array(50,-65,949,855),33307=>array(44,-72,942,837),33308=>array(41,-70,943,842),33309=>array(63,-68,937,841),33310=>array(47,-76,949,852),33311=>array(71,-69,936,839),33312=>array(47,-79,902,826),33313=>array(43,-66,947,837),33314=>array(67,-68,921,845),33315=>array(42,-71,943,821),33316=>array(53,-68,975,845),33317=>array(54,-71,963,853),33318=>array(42,-60,981,860),33319=>array(53,-68,948,848),33320=>array(34,-67,978,855),33321=>array(46,-68,958,835),33322=>array(37,-56,960,849),33323=>array(59,-63,945,849),33324=>array(44,-70,963,833),33325=>array(35,-70,935,822),33326=>array(39,-69,931,834),33327=>array(44,-61,910,856),33328=>array(41,-68,932,838),33329=>array(36,-66,944,833),33330=>array(39,-70,986,860),33331=>array(74,-64,915,839),33332=>array(51,-70,962,846),33333=>array(39,-54,951,849),33334=>array(40,-68,896,851),33335=>array(34,-65,963,849),33336=>array(54,-54,956,849),33337=>array(41,-67,957,849),33338=>array(41,-61,906,856),33339=>array(29,-66,924,828),33340=>array(44,-73,965,835),33341=>array(52,-70,972,840),33342=>array(36,-75,924,825),33343=>array(53,-68,973,839),33344=>array(74,-60,964,849),33345=>array(44,-68,975,845),33346=>array(34,-73,965,841),33347=>array(39,-70,978,843),33348=>array(49,-68,951,846),33349=>array(38,-70,966,840),33350=>array(35,-68,976,845),33351=>array(34,-61,965,849),33352=>array(32,-68,972,845),33353=>array(36,-73,962,836),33354=>array(53,-68,930,845),33355=>array(52,-68,971,839),33356=>array(23,-51,974,846),33357=>array(29,-73,963,845),33358=>array(34,-67,954,839),33359=>array(37,-64,954,856),33360=>array(36,-75,977,840),33361=>array(37,-68,915,838),33362=>array(52,-56,912,850),33363=>array(54,-71,980,828),33364=>array(26,-71,986,849),33365=>array(37,-67,938,847),33366=>array(39,-75,957,843),33367=>array(36,-72,959,845),33368=>array(49,-64,964,854),33369=>array(64,-63,991,863),33370=>array(49,-79,950,829),33371=>array(43,-80,956,833),33372=>array(36,-73,950,831),33373=>array(54,-54,966,849),33374=>array(44,-74,971,834),33375=>array(29,-54,963,849),33376=>array(20,-68,980,845),33377=>array(41,-73,923,836),33378=>array(44,-68,965,844),33379=>array(44,-63,967,856),33380=>array(34,-65,978,852),33381=>array(29,-71,968,850),33382=>array(34,-54,955,849),33383=>array(23,-68,970,845),33384=>array(29,-61,972,844),33385=>array(37,-72,970,845),33386=>array(44,-61,982,849),33387=>array(49,-68,973,845),33388=>array(37,-72,959,840),33389=>array(35,-62,970,858),33390=>array(112,-56,974,796),33391=>array(85,-61,963,820),33392=>array(40,-60,942,791),33393=>array(46,-68,958,827),33394=>array(46,-17,958,838),33395=>array(54,-62,938,828),33396=>array(53,-72,969,842),33397=>array(50,-73,961,831),33398=>array(48,-66,960,832),33399=>array(54,-66,960,832),33400=>array(47,-69,912,827),33401=>array(62,310,913,613),33402=>array(69,-29,919,820),33403=>array(64,-66,943,826),33404=>array(66,-64,939,826),33405=>array(42,-68,974,832),33406=>array(62,-60,946,825),33407=>array(60,-64,935,830),33408=>array(64,-66,943,826),33409=>array(56,-67,945,826),33410=>array(61,-57,911,831),33411=>array(47,-52,961,843),33412=>array(41,-69,969,832),33413=>array(61,-63,950,833),33414=>array(63,-67,946,836),33415=>array(81,-69,931,836),33416=>array(63,-69,940,831),33417=>array(65,-85,938,831),33418=>array(59,-71,951,822),33419=>array(65,-62,938,831),33420=>array(64,-61,932,831),33421=>array(67,-62,929,831),33422=>array(68,-61,936,833),33423=>array(53,-23,949,822),33424=>array(78,-71,948,823),33425=>array(60,-28,951,826),33426=>array(66,-20,936,823),33427=>array(71,-66,947,826),33428=>array(50,-68,915,838),33429=>array(62,-66,912,823),33430=>array(60,-66,936,823),33431=>array(62,-70,912,823),33432=>array(70,-80,959,818),33433=>array(65,-65,955,834),33434=>array(64,-46,950,832),33435=>array(66,-73,957,820),33436=>array(52,-58,929,832),33437=>array(55,-74,967,824),33438=>array(54,-72,962,826),33439=>array(36,-62,976,833),33440=>array(46,-71,971,831),33441=>array(62,-70,939,830),33442=>array(44,-67,956,823),33443=>array(38,-70,935,819),33444=>array(47,-64,967,829),33445=>array(57,-68,961,836),33446=>array(45,-75,937,827),33447=>array(71,-51,943,837),33448=>array(49,-65,970,833),33449=>array(38,-80,971,840),33450=>array(80,-64,956,836),33451=>array(34,-58,971,832),33452=>array(39,-60,957,837),33453=>array(78,-35,936,822),33454=>array(73,-63,927,825),33455=>array(33,-19,951,837),33456=>array(47,-62,974,833),33457=>array(49,-69,934,826),33458=>array(29,-44,951,823),33459=>array(52,-63,933,838),33460=>array(58,-77,941,822),33461=>array(49,-69,972,826),33462=>array(53,-69,944,833),33463=>array(82,-20,935,829),33464=>array(68,-71,940,824),33465=>array(58,-67,933,829),33466=>array(55,-84,979,820),33467=>array(59,-67,912,838),33468=>array(72,-38,951,839),33469=>array(57,-57,943,838),33470=>array(60,-61,954,832),33471=>array(48,-52,913,827),33472=>array(52,-73,964,823),33473=>array(44,-68,941,827),33474=>array(56,-75,968,827),33475=>array(47,-76,980,818),33476=>array(63,-75,937,822),33477=>array(44,-71,916,818),33478=>array(44,-55,913,828),33479=>array(63,-65,913,828),33480=>array(53,-68,912,824),33481=>array(67,-51,918,823),33482=>array(49,-84,928,816),33483=>array(59,-64,931,820),33484=>array(63,-67,942,826),33485=>array(29,-44,951,823),33486=>array(65,9,916,824),33487=>array(61,-68,936,822),33488=>array(62,-62,924,837),33489=>array(60,-66,948,828),33490=>array(57,-68,949,833),33491=>array(42,-67,965,832),33492=>array(71,-65,941,832),33493=>array(62,-66,938,827),33494=>array(72,-71,944,822),33495=>array(69,-68,940,830),33496=>array(63,-78,933,820),33497=>array(51,-14,947,840),33498=>array(70,-73,944,833),33499=>array(66,-63,949,833),33500=>array(68,-65,938,834),33501=>array(68,-54,964,834),33502=>array(44,-45,946,820),33503=>array(48,-62,934,837),33504=>array(69,-70,962,824),33505=>array(74,-67,978,833),33506=>array(79,-70,931,834),33507=>array(79,-80,931,834),33508=>array(57,-11,951,833),33509=>array(72,-65,931,827),33510=>array(80,-67,912,832),33511=>array(67,-61,936,830),33512=>array(55,-67,960,829),33513=>array(79,-65,933,827),33514=>array(66,-62,956,830),33515=>array(79,-66,933,827),33516=>array(68,-70,941,823),33517=>array(77,-67,950,832),33518=>array(45,-67,934,830),33519=>array(58,-71,959,829),33520=>array(69,-68,953,826),33521=>array(50,-71,935,823),33522=>array(48,-64,948,829),33523=>array(48,-61,959,836),33524=>array(60,-14,957,830),33525=>array(47,-71,968,825),33526=>array(40,-70,975,823),33527=>array(51,-71,945,822),33528=>array(68,-66,938,827),33529=>array(55,-64,949,827),33530=>array(53,-52,948,833),33531=>array(43,-65,950,830),33532=>array(59,-36,938,827),33533=>array(49,-62,956,827),33534=>array(56,-50,956,839),33535=>array(50,-61,958,836),33536=>array(48,-66,949,832),33537=>array(80,-64,939,838),33538=>array(61,-70,943,828),33539=>array(46,-69,948,811),33540=>array(57,-68,943,836),33541=>array(51,-64,934,838),33542=>array(40,-59,944,836),33543=>array(48,-65,959,830),33544=>array(59,-41,964,830),33545=>array(50,-61,958,836),33546=>array(66,-29,932,836),33547=>array(80,-64,955,836),33548=>array(39,-66,954,831),33549=>array(55,-67,947,828),33550=>array(46,-32,963,831),33551=>array(33,-66,923,827),33552=>array(27,-57,916,826),33553=>array(58,-60,916,826),33554=>array(66,-70,944,825),33555=>array(68,-59,926,826),33556=>array(75,-7,926,826),33557=>array(62,-66,957,826),33558=>array(55,-73,966,821),33559=>array(61,-66,939,829),33560=>array(42,-66,943,835),33561=>array(66,-68,956,829),33562=>array(61,-72,925,822),33563=>array(63,-60,956,833),33564=>array(60,-64,946,832),33565=>array(69,-39,944,811),33566=>array(68,-40,943,811),33567=>array(77,-64,934,842),33568=>array(41,-68,966,826),33569=>array(53,-64,948,831),33570=>array(61,-53,942,841),33571=>array(46,-66,950,828),33572=>array(87,-76,960,826),33573=>array(59,-26,956,820),33574=>array(53,-68,970,824),33575=>array(54,-67,960,817),33576=>array(54,-65,947,834),33577=>array(47,-70,953,825),33578=>array(49,-76,962,822),33579=>array(61,-46,941,830),33580=>array(59,-58,949,838),33581=>array(56,-66,964,833),33582=>array(62,-70,938,826),33583=>array(53,-66,972,835),33584=>array(72,-66,959,835),33585=>array(38,-64,979,834),33586=>array(85,-60,935,838),33587=>array(56,-62,948,830),33588=>array(66,-65,939,834),33589=>array(72,-61,940,838),33590=>array(41,-67,968,831),33591=>array(44,-72,958,819),33592=>array(61,-63,954,840),33593=>array(53,-68,945,834),33594=>array(21,-31,946,859),33595=>array(57,-68,906,827),33596=>array(66,-64,939,833),33597=>array(42,-74,933,834),33598=>array(65,-69,957,827),33599=>array(46,-67,973,829),33600=>array(45,-58,938,833),33601=>array(65,-25,957,817),33602=>array(42,-68,978,823),33603=>array(51,-26,955,832),33604=>array(55,-53,950,839),33605=>array(59,-62,974,831),33606=>array(33,-62,888,834),33607=>array(60,-54,962,843),33608=>array(54,-71,951,825),33609=>array(59,-68,950,833),33610=>array(69,-74,933,827),33611=>array(68,-69,945,820),33612=>array(62,-73,949,823),33613=>array(69,-70,958,829),33614=>array(74,-30,964,811),33615=>array(29,-69,942,834),33616=>array(31,-53,950,844),33617=>array(55,-63,980,831),33618=>array(41,-56,955,837),33619=>array(65,-69,957,828),33620=>array(42,-66,943,833),33621=>array(48,-65,943,835),33622=>array(53,-30,959,837),33623=>array(61,-70,943,828),33624=>array(43,-65,941,827),33625=>array(57,-50,947,831),33626=>array(26,-60,941,831),33627=>array(59,-65,931,826),33628=>array(63,-68,923,823),33629=>array(30,-66,916,825),33630=>array(35,-71,950,825),33631=>array(35,-56,938,824),33632=>array(25,-70,949,827),33633=>array(34,-64,905,827),33634=>array(65,-62,939,830),33635=>array(42,-71,941,817),33636=>array(53,-57,910,833),33637=>array(37,-60,944,831),33638=>array(56,-63,928,831),33639=>array(67,-74,922,822),33640=>array(64,-66,915,825),33641=>array(37,-71,952,826),33642=>array(44,-66,936,824),33643=>array(78,-69,926,826),33644=>array(35,-66,915,827),33645=>array(36,-16,925,821),33646=>array(45,-68,921,824),33647=>array(56,-68,917,822),33648=>array(48,-69,945,826),33649=>array(73,-63,928,821),33650=>array(56,-32,951,821),33651=>array(59,-34,954,805),33652=>array(45,-76,974,829),33653=>array(63,-32,971,823),33654=>array(71,-79,958,825),33655=>array(42,-74,945,834),33656=>array(53,-64,948,832),33657=>array(57,-58,935,831),33658=>array(49,-62,937,823),33659=>array(35,-65,964,831),33660=>array(49,-65,956,831),33661=>array(48,-72,954,832),33662=>array(51,-70,954,821),33663=>array(41,-62,959,827),33664=>array(45,-67,968,821),33665=>array(69,-16,943,826),33666=>array(62,-70,916,821),33667=>array(48,-70,947,827),33668=>array(51,-66,938,821),33669=>array(26,-74,947,822),33670=>array(62,-65,955,835),33671=>array(57,-75,938,824),33672=>array(54,-76,956,821),33673=>array(46,-59,933,839),33674=>array(46,-69,943,822),33675=>array(50,-70,947,824),33676=>array(42,-63,956,822),33677=>array(55,-69,944,820),33678=>array(42,-67,947,832),33679=>array(47,-70,959,824),33680=>array(56,-66,960,818),33681=>array(39,-64,980,832),33682=>array(66,-70,938,833),33683=>array(60,-62,947,833),33684=>array(66,-65,939,820),33685=>array(54,-69,972,829),33686=>array(76,-18,949,836),33687=>array(69,-63,951,836),33688=>array(53,-67,947,832),33689=>array(45,-63,953,832),33690=>array(40,-73,949,825),33691=>array(36,-69,959,826),33692=>array(20,-82,968,828),33693=>array(60,-17,955,838),33694=>array(47,-58,961,830),33695=>array(37,-79,966,831),33696=>array(42,-67,956,831),33697=>array(55,-73,970,831),33698=>array(57,-65,964,834),33699=>array(47,-24,957,832),33700=>array(66,-67,940,827),33701=>array(46,-65,943,824),33702=>array(76,-64,949,824),33703=>array(46,-62,950,832),33704=>array(61,-61,950,835),33705=>array(53,-64,948,835),33706=>array(69,-65,948,831),33707=>array(65,-72,962,823),33708=>array(43,-64,953,834),33709=>array(61,-65,912,829),33710=>array(50,-73,939,827),33711=>array(47,-67,969,824),33712=>array(54,-74,969,823),33713=>array(32,-61,948,829),33714=>array(36,-59,947,809),33715=>array(62,-64,920,826),33716=>array(62,-63,912,827),33717=>array(43,-59,956,832),33718=>array(35,-19,962,823),33719=>array(32,-63,940,830),33720=>array(35,-66,925,827),33721=>array(65,-19,924,825),33722=>array(62,-62,912,824),33723=>array(42,-64,919,818),33724=>array(50,-27,928,824),33725=>array(40,-65,971,837),33726=>array(36,-71,980,829),33727=>array(63,-65,947,827),33728=>array(51,-68,966,830),33729=>array(71,-65,939,833),33730=>array(85,-63,937,823),33731=>array(47,-73,945,823),33732=>array(41,-70,976,824),33733=>array(63,-68,937,835),33734=>array(58,-74,968,828),33735=>array(52,-61,954,839),33736=>array(72,-67,951,824),33737=>array(65,-52,935,840),33738=>array(41,-63,932,836),33739=>array(77,-69,963,826),33740=>array(70,-61,938,838),33741=>array(38,-44,957,833),33742=>array(80,-34,955,823),33743=>array(60,-62,954,832),33744=>array(88,-64,924,835),33745=>array(72,-62,940,832),33746=>array(49,-70,961,844),33747=>array(45,-68,962,822),33748=>array(46,-70,969,832),33749=>array(40,-61,974,829),33750=>array(71,-59,943,844),33751=>array(64,-70,936,826),33752=>array(25,-66,967,832),33753=>array(69,-29,947,827),33754=>array(67,-60,964,821),33755=>array(86,-73,938,820),33756=>array(48,-65,971,837),33757=>array(63,-74,973,824),33758=>array(59,-69,949,826),33759=>array(50,-57,960,834),33760=>array(61,-62,960,836),33761=>array(68,-65,961,832),33762=>array(60,-72,960,820),33763=>array(79,-74,961,820),33764=>array(42,-39,979,818),33765=>array(44,-64,957,832),33766=>array(60,-70,944,831),33767=>array(50,-69,955,832),33768=>array(69,-75,942,827),33769=>array(72,-59,934,837),33770=>array(62,-65,939,830),33771=>array(64,-38,960,812),33772=>array(68,-73,937,823),33773=>array(39,-67,961,833),33774=>array(45,-70,969,829),33775=>array(56,-78,941,838),33776=>array(43,-65,961,833),33777=>array(46,-65,954,831),33778=>array(61,-65,934,841),33779=>array(54,-39,980,815),33780=>array(35,-42,968,816),33781=>array(95,-65,945,824),33782=>array(40,-70,967,835),33783=>array(73,-68,923,826),33784=>array(44,-66,973,832),33785=>array(56,-39,954,832),33786=>array(62,-68,947,829),33787=>array(48,-69,966,822),33788=>array(48,-62,970,835),33789=>array(39,-73,966,832),33790=>array(47,-72,968,831),33791=>array(69,-70,944,825),33792=>array(43,-73,953,826),33793=>array(62,-69,958,836),33794=>array(46,-59,933,839),33795=>array(76,-59,949,836),33796=>array(43,-63,939,826),33797=>array(60,-67,957,838),33798=>array(59,-52,949,841),33799=>array(61,-67,971,827),33800=>array(46,-62,950,832),33801=>array(42,-67,960,826),33802=>array(35,-62,973,833),33803=>array(54,-70,947,833),33804=>array(61,-68,935,839),33805=>array(54,-63,949,838),33806=>array(53,-73,934,834),33807=>array(77,-62,947,833),33808=>array(42,-69,976,826),33809=>array(36,-67,952,833),33810=>array(53,-60,963,820),33811=>array(67,-38,961,811),33812=>array(47,-44,935,838),33813=>array(44,-76,956,828),33814=>array(77,-62,937,815),33815=>array(67,-63,927,819),33816=>array(50,-68,965,830),33817=>array(25,-66,964,832),33818=>array(38,-69,952,826),33819=>array(58,-70,947,825),33820=>array(52,-77,933,822),33821=>array(65,-58,917,829),33822=>array(79,-58,958,826),33823=>array(36,-68,952,824),33824=>array(59,-74,939,820),33825=>array(50,-65,939,826),33826=>array(51,-30,978,835),33827=>array(49,-73,973,823),33828=>array(63,-70,916,818),33829=>array(66,-71,916,819),33830=>array(54,-60,908,830),33831=>array(54,-62,930,831),33832=>array(74,-67,931,828),33833=>array(40,-64,985,833),33834=>array(41,-69,955,839),33835=>array(42,-70,956,825),33836=>array(77,-68,946,834),33837=>array(73,-61,936,831),33838=>array(46,-71,968,827),33839=>array(50,-81,943,829),33840=>array(46,-71,968,825),33841=>array(52,-24,948,832),33842=>array(59,-70,947,828),33843=>array(71,-66,943,824),33844=>array(46,-76,942,827),33845=>array(70,-67,942,833),33846=>array(43,-73,974,821),33847=>array(67,-68,941,823),33848=>array(31,-64,979,830),33849=>array(47,-66,941,831),33850=>array(70,-69,945,831),33851=>array(69,-69,944,825),33852=>array(77,-62,932,839),33853=>array(56,-68,970,835),33854=>array(59,-57,951,829),33855=>array(53,-72,956,823),33856=>array(55,-68,955,825),33857=>array(67,-57,950,821),33858=>array(34,-63,954,828),33859=>array(71,-68,944,829),33860=>array(53,-67,945,826),33861=>array(46,-32,954,824),33862=>array(35,-68,965,832),33863=>array(46,-61,973,832),33864=>array(48,-55,962,832),33865=>array(49,-70,965,839),33866=>array(45,-64,972,849),33867=>array(42,-67,948,830),33868=>array(46,-71,939,822),33869=>array(71,-70,947,823),33870=>array(32,-70,949,829),33871=>array(52,-67,959,829),33872=>array(55,-29,973,828),33873=>array(53,-58,958,832),33874=>array(61,-49,956,832),33875=>array(67,-69,957,826),33876=>array(51,-71,969,827),33877=>array(41,-69,953,845),33878=>array(47,-61,984,832),33879=>array(43,-64,941,826),33880=>array(63,-62,923,833),33881=>array(45,-69,943,826),33882=>array(51,-32,945,833),33883=>array(62,-61,942,837),33884=>array(34,-67,974,825),33885=>array(61,-67,943,823),33886=>array(68,-73,952,823),33887=>array(83,-27,955,826),33888=>array(32,-53,951,841),33889=>array(41,-64,948,830),33890=>array(34,-20,966,831),33891=>array(76,-27,947,839),33892=>array(61,-58,958,832),33893=>array(77,-68,951,829),33894=>array(63,-59,945,839),33895=>array(82,-65,953,825),33896=>array(69,-67,973,826),33897=>array(62,-51,953,828),33898=>array(61,-75,955,843),33899=>array(69,-61,940,840),33900=>array(45,-62,939,838),33901=>array(60,-67,967,833),33902=>array(43,-72,966,826),33903=>array(57,-66,942,823),33904=>array(41,-71,979,824),33905=>array(49,-37,962,834),33906=>array(42,-70,933,833),33907=>array(39,-64,966,833),33908=>array(55,-66,955,828),33909=>array(66,-60,951,835),33910=>array(74,-54,942,829),33911=>array(74,-64,946,842),33912=>array(46,-29,968,829),33913=>array(42,-56,963,842),33914=>array(51,-64,942,830),33915=>array(24,-66,962,830),33916=>array(69,-65,969,838),33917=>array(69,-70,944,827),33918=>array(59,-36,967,827),33919=>array(69,-70,944,838),33920=>array(59,-21,955,831),33921=>array(36,-39,959,831),33922=>array(72,-67,925,842),33923=>array(72,-60,961,838),33924=>array(51,-67,957,838),33925=>array(51,-68,956,838),33926=>array(68,-81,941,826),33927=>array(20,-69,952,833),33928=>array(60,-67,914,824),33929=>array(60,-69,914,828),33930=>array(60,-58,950,828),33931=>array(41,-59,943,833),33932=>array(25,-60,939,833),33933=>array(39,-69,948,826),33934=>array(49,-71,969,832),33935=>array(61,-71,939,827),33936=>array(47,-52,963,839),33937=>array(54,-81,968,822),33938=>array(69,-64,959,832),33939=>array(51,-62,956,832),33940=>array(70,-61,946,833),33941=>array(52,-37,948,840),33942=>array(70,-89,942,830),33943=>array(48,-64,974,830),33944=>array(62,-69,955,825),33945=>array(53,-75,959,839),33946=>array(83,-66,938,826),33947=>array(42,-74,953,826),33948=>array(37,-59,946,835),33949=>array(42,-68,939,826),33950=>array(53,-65,953,831),33951=>array(53,-66,956,830),33952=>array(52,-29,953,825),33953=>array(66,-64,945,834),33954=>array(76,-68,974,825),33955=>array(46,-69,950,826),33956=>array(56,-72,950,826),33957=>array(77,-76,928,835),33958=>array(38,-69,974,835),33959=>array(51,-73,966,824),33960=>array(23,-53,956,841),33961=>array(52,-68,962,825),33962=>array(60,-70,942,835),33963=>array(37,-47,956,854),33964=>array(43,-60,956,829),33965=>array(65,-71,931,845),33966=>array(29,-70,937,822),33967=>array(56,-70,923,835),33968=>array(50,-79,964,827),33969=>array(48,-55,947,840),33970=>array(46,-61,946,839),33971=>array(65,-75,927,839),33972=>array(41,-69,942,833),33973=>array(54,-59,960,833),33974=>array(45,-72,946,823),33975=>array(66,-64,944,833),33976=>array(47,-73,953,824),33977=>array(31,-64,972,835),33978=>array(50,-69,961,833),33979=>array(40,-60,960,833),33980=>array(43,-62,972,836),33981=>array(36,-39,950,823),33982=>array(49,-52,946,839),33983=>array(68,-68,941,833),33984=>array(44,-64,955,835),33985=>array(36,-69,964,829),33986=>array(53,-65,947,830),33987=>array(51,-67,957,833),33988=>array(51,-66,940,838),33989=>array(48,-72,960,823),33990=>array(43,-71,954,824),33991=>array(54,-64,949,831),33992=>array(70,-65,924,833),33993=>array(46,-66,954,839),33994=>array(35,-62,957,832),33995=>array(59,-21,955,834),33996=>array(48,-74,973,825),33997=>array(53,-67,943,831),33998=>array(46,-75,938,826),33999=>array(59,-74,968,826),34000=>array(52,-67,939,830),34001=>array(44,-71,956,835),34002=>array(63,-72,956,825),34003=>array(48,-62,957,840),34004=>array(62,-71,955,826),34005=>array(48,-57,959,830),34006=>array(67,-58,941,837),34007=>array(51,-68,978,829),34008=>array(46,-78,959,824),34009=>array(57,-66,937,833),34010=>array(33,-76,982,830),34011=>array(38,-73,973,827),34012=>array(60,-67,950,830),34013=>array(54,-23,924,821),34014=>array(62,-67,914,821),34015=>array(26,-62,908,832),34016=>array(62,-63,914,827),34017=>array(44,-67,966,832),34018=>array(62,-75,938,830),34019=>array(61,-63,924,829),34020=>array(38,-76,974,825),34021=>array(29,-6,954,827),34022=>array(38,-56,947,826),34023=>array(36,-52,961,839),34024=>array(42,-67,963,828),34025=>array(35,-71,950,825),34026=>array(50,-73,972,824),34027=>array(43,-72,970,822),34028=>array(35,-62,952,833),34029=>array(38,-59,965,827),34030=>array(37,-56,951,839),34031=>array(33,-69,962,832),34032=>array(51,-68,978,829),34033=>array(56,-73,957,820),34034=>array(65,-32,953,823),34035=>array(66,-32,943,824),34036=>array(64,-63,957,825),34037=>array(40,-75,963,827),34038=>array(69,-70,956,823),34039=>array(67,-68,961,823),34040=>array(61,-74,939,851),34041=>array(45,-67,947,829),34042=>array(40,-55,961,833),34043=>array(54,-47,967,844),34044=>array(26,-76,972,829),34045=>array(56,-65,948,832),34046=>array(73,-70,944,823),34047=>array(33,-67,948,834),34048=>array(61,-65,944,827),34049=>array(67,-68,946,831),34050=>array(68,-69,944,827),34051=>array(74,-58,947,839),34052=>array(71,-65,944,822),34053=>array(63,-57,936,838),34054=>array(49,-76,974,825),34055=>array(69,-70,951,826),34056=>array(62,-65,941,824),34057=>array(44,-68,965,827),34058=>array(51,-66,960,832),34059=>array(47,-70,964,828),34060=>array(45,-67,985,832),34061=>array(49,-69,958,823),34062=>array(66,-73,972,825),34063=>array(66,-70,938,822),34064=>array(39,-73,928,838),34065=>array(48,-70,956,835),34066=>array(47,-73,964,824),34067=>array(59,-61,966,835),34068=>array(57,-68,943,825),34069=>array(74,-71,943,817),34070=>array(28,-68,952,824),34071=>array(52,-67,951,838),34072=>array(31,-70,981,825),34073=>array(39,-72,975,823),34074=>array(51,-68,948,836),34075=>array(40,-66,959,828),34076=>array(41,-73,963,827),34077=>array(75,-68,975,825),34078=>array(56,-73,959,832),34079=>array(36,-75,966,820),34080=>array(53,-70,963,826),34081=>array(63,-64,963,839),34082=>array(64,-68,944,838),34083=>array(49,-59,948,835),34084=>array(57,-70,944,826),34085=>array(56,-30,955,835),34086=>array(53,-67,940,835),34087=>array(55,-23,950,820),34088=>array(79,-71,951,823),34089=>array(66,-73,941,824),34090=>array(58,-69,952,829),34091=>array(42,-64,951,832),34092=>array(54,-71,966,835),34093=>array(76,-78,967,834),34094=>array(78,-69,948,822),34095=>array(57,-53,964,841),34096=>array(36,-69,960,824),34097=>array(73,-83,967,824),34098=>array(32,-67,960,824),34099=>array(45,-59,944,841),34100=>array(44,-73,937,840),34101=>array(31,-67,962,832),34102=>array(65,-65,964,829),34103=>array(73,-73,925,817),34104=>array(24,-81,949,822),34105=>array(41,-73,949,822),34106=>array(63,-66,911,827),34107=>array(42,-72,956,832),34108=>array(65,-60,928,834),34109=>array(69,-70,961,834),34110=>array(39,-59,973,835),34111=>array(33,-59,937,832),34112=>array(32,-72,979,829),34113=>array(56,-62,948,833),34114=>array(41,-76,957,833),34115=>array(36,-69,957,831),34116=>array(71,-65,944,823),34117=>array(42,-69,944,826),34118=>array(31,-67,962,833),34119=>array(69,-68,946,823),34120=>array(54,-69,948,830),34121=>array(42,-61,938,837),34122=>array(38,-54,962,817),34123=>array(24,-64,944,830),34124=>array(76,-77,944,818),34125=>array(41,-72,975,823),34126=>array(50,-65,963,832),34127=>array(76,-73,955,826),34128=>array(60,-78,943,829),34129=>array(63,-57,936,839),34130=>array(48,-69,945,838),34131=>array(53,-77,947,835),34132=>array(58,-68,956,829),34133=>array(55,-60,955,836),34134=>array(42,-68,983,829),34135=>array(39,-71,980,835),34136=>array(33,-59,962,835),34137=>array(38,-33,964,833),34138=>array(58,-70,945,842),34139=>array(37,-67,938,827),34140=>array(62,-65,958,833),34141=>array(56,-48,962,842),34142=>array(51,-62,985,830),34143=>array(58,-53,973,831),34144=>array(45,-68,959,831),34145=>array(61,-76,939,840),34146=>array(65,-70,955,832),34147=>array(68,-74,941,831),34148=>array(64,-56,949,832),34149=>array(32,-69,952,826),34150=>array(43,-76,972,823),34151=>array(43,-75,977,833),34152=>array(38,-67,968,832),34153=>array(67,-67,956,836),34154=>array(59,-67,956,833),34155=>array(64,-46,936,842),34156=>array(52,-69,971,823),34157=>array(51,-74,947,840),34158=>array(47,-62,938,826),34159=>array(54,-56,941,829),34160=>array(67,-76,957,834),34161=>array(35,-65,938,826),34162=>array(62,-69,913,821),34163=>array(68,-73,938,832),34164=>array(41,-29,923,825),34165=>array(44,-85,981,831),34166=>array(42,-81,983,827),34167=>array(67,-68,975,829),34168=>array(48,-74,968,821),34169=>array(44,-62,951,835),34170=>array(62,-65,968,831),34171=>array(67,-68,972,831),34172=>array(60,-70,952,826),34173=>array(48,-58,952,848),34174=>array(73,-61,941,836),34175=>array(42,-85,957,833),34176=>array(54,-48,956,846),34177=>array(45,-74,958,830),34178=>array(41,-78,960,823),34179=>array(65,-72,926,822),34180=>array(53,-68,949,832),34181=>array(41,-65,957,823),34182=>array(48,-69,973,828),34183=>array(36,-77,958,834),34184=>array(27,-65,977,833),34185=>array(41,-71,960,824),34186=>array(46,-64,941,832),34187=>array(78,-81,933,826),34188=>array(47,-65,944,833),34189=>array(79,-66,964,828),34190=>array(62,-71,964,824),34191=>array(33,-50,967,834),34192=>array(27,-54,976,838),34193=>array(58,-41,948,806),34194=>array(42,-63,983,834),34195=>array(37,-60,953,826),34196=>array(60,-61,956,834),34197=>array(40,-67,971,824),34198=>array(48,-74,970,823),34199=>array(64,-63,936,830),34200=>array(47,-66,975,831),34201=>array(44,-68,949,836),34202=>array(51,-68,953,826),34203=>array(69,-61,941,838),34204=>array(42,-65,944,827),34205=>array(54,-70,939,823),34206=>array(40,-70,966,829),34207=>array(34,-50,966,841),34208=>array(51,-76,959,827),34209=>array(49,-74,934,820),34210=>array(40,-75,964,829),34211=>array(64,-75,966,823),34212=>array(50,-67,945,831),34213=>array(62,-58,935,831),34214=>array(37,-67,945,834),34215=>array(61,-65,953,827),34216=>array(50,-63,955,829),34217=>array(72,-65,939,832),34218=>array(51,-70,955,849),34219=>array(47,-70,957,830),34220=>array(49,-70,961,841),34221=>array(51,-78,969,828),34222=>array(52,-68,961,820),34223=>array(46,-61,945,835),34224=>array(47,-70,957,830),34225=>array(56,-69,957,828),34226=>array(44,-75,974,836),34227=>array(53,-67,967,828),34228=>array(63,-61,959,832),34229=>array(64,-70,941,826),34230=>array(51,-64,962,826),34231=>array(62,-67,952,833),34232=>array(58,-62,961,831),34233=>array(53,-57,941,831),34234=>array(49,-69,956,833),34235=>array(48,-89,961,832),34236=>array(58,-65,951,840),34237=>array(51,-74,956,823),34238=>array(43,-66,974,823),34239=>array(52,-68,971,827),34240=>array(56,-69,977,827),34241=>array(32,-67,968,842),34242=>array(38,-68,958,825),34243=>array(60,-74,955,828),34244=>array(36,-68,968,828),34245=>array(74,-62,946,833),34246=>array(43,-65,969,829),34247=>array(63,-54,941,839),34248=>array(59,-65,954,832),34249=>array(29,-67,952,832),34250=>array(32,-57,944,831),34251=>array(53,-64,956,829),34252=>array(74,-56,945,832),34253=>array(56,-34,949,839),34254=>array(55,-38,951,842),34255=>array(34,-71,942,824),34256=>array(57,-70,960,834),34257=>array(60,-68,961,833),34258=>array(51,-70,947,828),34259=>array(39,-64,922,826),34260=>array(41,-64,970,834),34261=>array(40,-67,937,833),34262=>array(67,-58,944,833),34263=>array(52,-71,986,824),34264=>array(55,-69,958,818),34265=>array(65,-72,971,826),34266=>array(83,-80,938,828),34267=>array(67,-56,937,821),34268=>array(47,-65,953,831),34269=>array(62,-72,954,836),34270=>array(41,-63,951,830),34271=>array(73,-68,936,825),34272=>array(47,-77,973,824),34273=>array(45,-73,982,827),34274=>array(53,-68,975,827),34275=>array(69,-65,939,827),34276=>array(39,-67,959,836),34277=>array(55,-62,930,826),34278=>array(45,-65,935,829),34279=>array(50,-58,964,824),34280=>array(44,-75,945,829),34281=>array(40,-62,960,836),34282=>array(45,-71,967,830),34283=>array(51,-73,950,836),34284=>array(74,-80,943,832),34285=>array(51,-64,948,835),34286=>array(38,-69,969,845),34287=>array(52,-46,974,822),34288=>array(62,-65,924,829),34289=>array(39,-64,959,826),34290=>array(42,-65,956,826),34291=>array(32,-67,968,828),34292=>array(53,-63,956,818),34293=>array(56,-65,942,845),34294=>array(33,-65,954,832),34295=>array(62,-69,955,826),34296=>array(55,-70,962,827),34297=>array(72,-61,929,839),34298=>array(57,-65,949,832),34299=>array(49,-65,971,839),34300=>array(44,-58,955,836),34301=>array(49,-62,966,833),34302=>array(44,-76,974,830),34303=>array(43,-68,929,837),34304=>array(54,-61,958,838),34305=>array(65,-32,945,823),34306=>array(43,-62,975,837),34307=>array(53,-62,946,838),34308=>array(48,-67,940,832),34309=>array(41,-67,953,832),34310=>array(59,-66,961,836),34311=>array(56,-67,948,827),34312=>array(61,-68,960,833),34313=>array(46,-64,957,855),34314=>array(53,-71,956,818),34315=>array(47,-68,960,837),34316=>array(51,-59,960,833),34317=>array(74,-58,947,832),34318=>array(76,-75,981,842),34319=>array(42,-67,958,832),34320=>array(62,-73,964,840),34321=>array(55,-66,960,838),34322=>array(43,-68,964,832),34323=>array(67,-76,966,830),34324=>array(42,-61,972,832),34325=>array(50,-81,955,832),34326=>array(50,-62,965,838),34327=>array(41,-62,965,837),34328=>array(56,-63,978,829),34329=>array(63,-70,947,831),34330=>array(43,-67,950,830),34331=>array(57,-62,945,830),34332=>array(69,-68,946,825),34333=>array(37,-57,968,832),34334=>array(45,-69,987,835),34335=>array(63,-56,956,823),34336=>array(59,-72,947,824),34337=>array(73,-72,950,827),34338=>array(56,-65,961,833),34339=>array(55,-75,960,830),34340=>array(59,-70,935,828),34341=>array(48,-62,969,828),34342=>array(70,-62,942,829),34343=>array(42,-72,982,831),34344=>array(53,-59,968,829),34345=>array(59,-64,964,833),34346=>array(48,-58,983,831),34347=>array(42,-50,963,830),34348=>array(55,-69,949,822),34349=>array(72,-70,928,839),34350=>array(49,-70,946,830),34351=>array(53,-25,951,830),34352=>array(44,-61,974,830),34353=>array(34,-72,965,829),34354=>array(65,-31,945,821),34355=>array(42,-71,954,828),34356=>array(63,-48,934,844),34357=>array(49,-66,958,827),34358=>array(44,-71,969,828),34359=>array(36,-62,971,832),34360=>array(64,-63,951,836),34361=>array(39,-69,965,829),34362=>array(60,-67,951,827),34363=>array(60,-70,963,825),34364=>array(41,-67,959,829),34365=>array(40,-58,969,838),34366=>array(39,-72,984,826),34367=>array(61,-80,954,835),34368=>array(43,-33,968,823),34369=>array(32,-64,968,849),34370=>array(60,-70,965,832),34371=>array(44,-66,967,828),34372=>array(59,-71,963,837),34373=>array(32,-53,978,837),34374=>array(68,-54,936,849),34375=>array(65,-70,951,834),34376=>array(68,-74,940,832),34377=>array(68,-56,949,831),34378=>array(48,-71,961,828),34379=>array(55,-67,947,842),34380=>array(62,-43,947,830),34381=>array(47,-66,924,829),34382=>array(35,-68,953,835),34383=>array(40,-59,893,834),34384=>array(39,-63,878,840),34385=>array(39,-60,937,832),34386=>array(40,-67,963,847),34387=>array(40,-53,954,843),34388=>array(49,-66,949,835),34389=>array(39,-68,959,836),34390=>array(29,-55,931,837),34391=>array(36,-62,919,837),34392=>array(29,-58,948,837),34393=>array(44,-67,961,827),34394=>array(30,-57,914,830),34395=>array(38,-66,936,829),34396=>array(45,-77,929,841),34397=>array(23,-82,956,830),34398=>array(35,-68,950,838),34399=>array(53,-71,951,829),34400=>array(40,-58,959,840),34401=>array(46,-84,950,823),34402=>array(43,-70,960,831),34403=>array(38,-67,972,828),34404=>array(31,-68,967,827),34405=>array(42,-75,989,831),34406=>array(39,-91,965,830),34407=>array(40,-76,954,834),34408=>array(44,-77,946,823),34409=>array(36,-75,953,829),34410=>array(40,-73,973,832),34411=>array(47,-59,954,850),34412=>array(46,-41,928,809),34413=>array(53,-72,899,811),34414=>array(43,-65,961,816),34415=>array(48,-45,957,849),34416=>array(49,-67,955,815),34417=>array(65,-59,970,792),34418=>array(43,-63,962,815),34419=>array(51,-70,916,829),34420=>array(44,-35,964,827),34421=>array(47,-23,957,841),34422=>array(47,-54,962,814),34423=>array(54,-68,954,819),34424=>array(47,-62,967,814),34425=>array(28,-5,930,813),34426=>array(21,-56,962,811),34427=>array(50,-21,942,814),34428=>array(54,-30,957,831),34429=>array(76,-59,888,792),34430=>array(46,-64,944,823),34431=>array(32,-69,914,772),34432=>array(48,-51,935,832),34433=>array(39,-78,942,814),34434=>array(47,-61,909,830),34435=>array(58,-63,942,839),34436=>array(47,-58,960,836),34437=>array(43,-74,950,810),34438=>array(48,-41,961,791),34439=>array(53,-76,973,808),34440=>array(47,-67,958,814),34441=>array(21,-71,976,838),34442=>array(38,-62,956,822),34443=>array(69,-65,914,808),34444=>array(45,-61,939,842),34445=>array(36,-51,951,817),34446=>array(53,-72,914,802),34447=>array(36,-69,869,805),34448=>array(69,-56,930,840),34449=>array(45,-54,967,844),34450=>array(45,-70,967,829),34451=>array(44,-61,899,833),34452=>array(57,-69,967,823),34453=>array(51,-69,963,793),34454=>array(53,-73,960,805),34455=>array(53,-71,971,823),34456=>array(41,-72,961,827),34457=>array(51,-66,963,838),34458=>array(51,-68,953,828),34459=>array(53,-66,891,815),34460=>array(47,-61,958,824),34461=>array(44,-33,953,833),34462=>array(55,-70,966,822),34463=>array(29,-27,948,809),34464=>array(48,-90,964,825),34465=>array(52,-73,978,808),34466=>array(49,-73,958,823),34467=>array(43,-59,961,807),34468=>array(29,-78,971,784),34469=>array(51,-70,963,833),34470=>array(45,-54,954,829),34471=>array(39,-65,957,854),34472=>array(53,-66,964,830),34473=>array(50,-66,952,833),34474=>array(43,-65,958,830),34475=>array(44,-45,967,834),34476=>array(37,-65,930,809),34477=>array(37,-65,945,809),34478=>array(37,-65,956,835),34479=>array(51,-7,955,825),34480=>array(71,-64,916,830),34481=>array(54,-65,948,844),34482=>array(40,-65,943,811),34483=>array(35,-51,958,849),34484=>array(65,-69,911,839),34485=>array(47,-50,954,828),34486=>array(50,-64,953,831),34487=>array(40,-23,954,814),34488=>array(49,-73,939,818),34489=>array(58,-69,955,839),34490=>array(47,-65,951,829),34491=>array(56,-74,960,824),34492=>array(67,-66,926,844),34493=>array(65,-29,962,809),34494=>array(66,-65,951,831),34495=>array(53,-51,953,823),34496=>array(51,-6,964,851),34497=>array(55,-70,903,812),34498=>array(54,-72,967,830),34499=>array(55,-67,940,810),34500=>array(51,-64,943,830),34501=>array(54,-67,938,829),34502=>array(46,-13,954,837),34503=>array(41,-38,959,828),34504=>array(55,-76,968,826),34505=>array(34,-65,966,854),34506=>array(57,-21,910,831),34507=>array(66,-73,957,788),34508=>array(64,-70,973,819),34509=>array(83,-70,896,824),34510=>array(34,-63,906,809),34511=>array(35,-16,936,814),34512=>array(54,-56,923,843),34513=>array(56,-62,963,851),34514=>array(54,-61,982,849),34515=>array(59,-54,960,840),34516=>array(51,-64,904,837),34517=>array(51,-67,961,837),34518=>array(54,-55,964,825),34519=>array(73,-70,948,859),34520=>array(46,-64,948,835),34521=>array(55,-18,954,844),34522=>array(56,-76,918,821),34523=>array(26,-72,957,829),34524=>array(52,-67,951,840),34525=>array(47,-66,965,811),34526=>array(44,-64,947,826),34527=>array(40,-65,963,821),34528=>array(52,-67,952,841),34529=>array(63,-53,930,814),34530=>array(56,-74,953,827),34531=>array(53,-62,952,827),34532=>array(38,-65,963,841),34533=>array(54,-70,935,839),34534=>array(51,-75,961,820),34535=>array(37,-66,931,820),34536=>array(51,-70,945,807),34537=>array(57,-64,946,779),34538=>array(69,-75,944,829),34539=>array(60,-72,980,841),34540=>array(39,-67,981,827),34541=>array(45,-21,947,824),34542=>array(50,-75,949,836),34543=>array(27,-32,959,833),34544=>array(46,-67,937,825),34545=>array(36,-68,931,821),34546=>array(33,-67,934,823),34547=>array(30,-66,918,821),34548=>array(36,-68,938,840),34549=>array(57,-30,953,815),34550=>array(48,-66,948,827),34551=>array(60,-70,969,822),34552=>array(57,-68,939,832),34553=>array(54,-54,900,826),34554=>array(40,-68,963,838),34555=>array(44,-76,961,820),34556=>array(40,-67,948,835),34557=>array(58,-67,961,825),34558=>array(61,-55,970,835),34559=>array(43,-67,961,834),34560=>array(68,-65,913,776),34561=>array(53,-71,967,830),34562=>array(37,-59,965,847),34563=>array(85,-76,941,788),34564=>array(52,-75,970,815),34565=>array(69,-64,954,835),34566=>array(56,-67,958,809),34567=>array(60,-65,959,835),34568=>array(39,-66,961,809),34569=>array(42,-62,950,835),34570=>array(61,-62,918,832),34571=>array(52,-71,965,855),34572=>array(61,-32,962,826),34573=>array(43,-62,963,850),34574=>array(58,-71,915,815),34575=>array(49,-74,969,818),34576=>array(29,-68,926,833),34577=>array(42,-72,967,829),34578=>array(40,-66,967,813),34579=>array(32,-68,963,811),34580=>array(63,-58,912,828),34581=>array(36,-73,954,830),34582=>array(47,-71,904,815),34583=>array(51,-66,902,815),34584=>array(59,-57,909,847),34585=>array(41,-69,970,829),34586=>array(46,-67,939,824),34587=>array(61,-75,954,813),34588=>array(74,-70,931,833),34589=>array(26,-70,971,843),34590=>array(47,-67,962,832),34591=>array(42,-75,933,845),34592=>array(74,-71,918,813),34593=>array(41,-52,951,842),34594=>array(40,-25,953,813),34595=>array(36,-61,954,845),34596=>array(56,-80,948,823),34597=>array(55,-65,952,829),34598=>array(61,-65,968,828),34599=>array(71,-77,983,823),34600=>array(32,-60,956,839),34601=>array(48,-70,890,815),34602=>array(57,-62,917,831),34603=>array(59,-49,955,809),34604=>array(59,-73,903,814),34605=>array(64,-68,908,825),34606=>array(47,-66,957,837),34607=>array(53,-65,978,838),34608=>array(45,-76,973,790),34609=>array(49,-64,957,855),34610=>array(58,-85,954,818),34611=>array(58,-71,955,834),34612=>array(65,-64,911,815),34613=>array(56,-72,902,813),34614=>array(50,-68,974,842),34615=>array(40,-33,967,831),34616=>array(79,-89,951,778),34617=>array(31,-67,946,826),34618=>array(52,-52,959,851),34619=>array(47,-65,953,839),34620=>array(64,-68,950,832),34621=>array(39,-65,947,814),34622=>array(46,-62,965,811),34623=>array(45,-66,966,830),34624=>array(40,-51,974,842),34625=>array(90,-89,944,774),34626=>array(34,-69,976,817),34627=>array(54,-77,957,814),34628=>array(50,-67,915,825),34629=>array(57,-89,971,787),34630=>array(40,-69,952,819),34631=>array(29,-30,932,806),34632=>array(37,-68,877,810),34633=>array(41,-61,945,848),34634=>array(41,-66,968,846),34635=>array(41,-64,983,813),34636=>array(48,-65,951,832),34637=>array(51,-69,915,817),34638=>array(60,-58,919,836),34639=>array(56,-68,949,832),34640=>array(46,-70,903,814),34641=>array(42,-74,964,811),34642=>array(47,-71,948,815),34643=>array(40,-63,968,829),34644=>array(50,-72,957,824),34645=>array(38,-65,961,835),34646=>array(56,-29,956,829),34647=>array(39,-37,936,834),34648=>array(33,-30,944,818),34649=>array(46,-69,932,807),34650=>array(47,-73,970,814),34651=>array(48,-69,965,828),34652=>array(59,-75,965,836),34653=>array(34,-54,959,853),34654=>array(55,-70,908,814),34655=>array(51,-65,912,815),34656=>array(48,-65,948,812),34657=>array(53,-71,968,815),34658=>array(53,-78,956,815),34659=>array(50,-67,956,837),34660=>array(61,-66,965,852),34661=>array(49,-45,964,848),34662=>array(51,-68,980,834),34663=>array(47,-74,972,823),34664=>array(31,-64,952,809),34665=>array(50,-32,955,824),34666=>array(49,-66,951,815),34667=>array(43,-69,939,825),34668=>array(55,-77,976,825),34669=>array(61,-74,986,812),34670=>array(33,-64,967,845),34671=>array(44,-76,955,825),34672=>array(29,-45,960,831),34673=>array(45,-64,975,837),34674=>array(56,-67,942,831),34675=>array(51,-74,952,829),34676=>array(40,-71,899,833),34677=>array(50,-82,961,831),34678=>array(31,-62,972,842),34679=>array(45,-73,947,833),34680=>array(50,-57,918,826),34681=>array(54,-30,968,813),34682=>array(37,-70,920,834),34683=>array(37,-62,947,837),34684=>array(37,-63,932,813),34685=>array(50,-70,951,821),34686=>array(31,-65,949,823),34687=>array(47,-42,971,806),34688=>array(78,-74,956,837),34689=>array(42,-72,973,815),34690=>array(60,-59,957,831),34691=>array(46,-64,940,849),34692=>array(43,-62,948,843),34693=>array(40,-33,959,853),34694=>array(63,-63,966,837),34695=>array(49,-53,974,853),34696=>array(47,-71,953,810),34697=>array(53,-69,971,830),34698=>array(44,-64,977,843),34699=>array(39,-69,965,836),34700=>array(41,-80,956,858),34701=>array(64,-62,967,826),34702=>array(45,-73,955,827),34703=>array(47,-71,977,834),34704=>array(53,-72,952,830),34705=>array(40,-75,979,845),34706=>array(58,-75,976,834),34707=>array(49,-67,987,836),34708=>array(47,-73,976,836),34709=>array(50,-46,973,852),34710=>array(47,-67,941,813),34711=>array(39,-65,949,848),34712=>array(39,-18,943,838),34713=>array(31,-67,977,832),34714=>array(75,-73,954,852),34715=>array(33,-73,947,845),34716=>array(73,-71,966,826),34717=>array(45,-66,977,842),34718=>array(55,-60,936,836),34719=>array(36,-66,951,833),34720=>array(36,-26,957,840),34721=>array(36,-77,957,840),34722=>array(68,-66,934,839),34723=>array(29,-68,972,835),34724=>array(56,-71,987,842),34725=>array(17,-60,970,855),34726=>array(49,-65,969,831),34727=>array(49,-71,936,832),34728=>array(29,-65,921,825),34729=>array(26,-60,966,841),34730=>array(57,-70,939,837),34731=>array(54,-60,942,850),34732=>array(46,-62,957,836),34733=>array(46,-62,951,854),34734=>array(34,-57,945,836),34735=>array(39,-72,943,836),34736=>array(44,-59,961,835),34737=>array(63,-66,934,832),34738=>array(59,-21,951,826),34739=>array(54,-17,958,842),34740=>array(82,-79,967,823),34741=>array(49,-64,955,812),34742=>array(36,-77,965,816),34743=>array(49,-82,957,847),34744=>array(46,-76,950,829),34745=>array(56,-72,956,826),34746=>array(33,-73,961,835),34747=>array(49,-67,954,836),34748=>array(61,-32,955,822),34749=>array(45,-68,977,843),34750=>array(37,-78,959,840),34751=>array(50,-83,958,836),34752=>array(36,-65,949,819),34753=>array(57,-70,957,827),34754=>array(56,-67,965,841),34755=>array(51,-73,975,818),34756=>array(55,-65,965,834),34757=>array(56,-70,966,831),34758=>array(38,-65,966,834),34759=>array(57,-87,954,835),34760=>array(51,-64,912,809),34761=>array(40,-59,969,834),34762=>array(57,-67,957,787),34763=>array(30,-34,949,828),34764=>array(52,-31,968,832),34765=>array(34,-81,958,811),34766=>array(34,-67,947,829),34767=>array(42,-80,984,825),34768=>array(54,-64,934,839),34769=>array(59,-61,967,852),34770=>array(46,-65,956,833),34771=>array(33,-64,970,841),34772=>array(44,-71,960,815),34773=>array(54,-70,940,831),34774=>array(49,-67,954,836),34775=>array(57,-80,938,834),34776=>array(49,-68,962,844),34777=>array(43,-71,958,838),34778=>array(57,-80,961,820),34779=>array(41,-64,961,832),34780=>array(50,-68,962,838),34781=>array(48,-66,959,846),34782=>array(89,-83,954,825),34783=>array(43,-68,952,835),34784=>array(33,-66,951,835),34785=>array(56,-71,920,837),34786=>array(51,-68,957,832),34787=>array(36,-66,960,833),34788=>array(34,-73,943,806),34789=>array(53,-68,965,847),34790=>array(51,-74,965,827),34791=>array(52,-68,949,833),34792=>array(53,-71,954,790),34793=>array(51,-70,982,821),34794=>array(44,-50,977,815),34795=>array(52,-66,953,813),34796=>array(56,-58,955,823),34797=>array(43,-68,945,834),34798=>array(30,-71,936,833),34799=>array(43,-66,957,832),34800=>array(31,-72,961,835),34801=>array(51,-69,961,836),34802=>array(60,-64,975,840),34803=>array(43,-75,945,818),34804=>array(49,-74,959,830),34805=>array(30,-71,948,807),34806=>array(41,-30,935,814),34807=>array(49,-64,915,829),34808=>array(36,-64,975,819),34809=>array(45,-71,948,851),34810=>array(52,-27,953,831),34811=>array(42,-73,947,850),34812=>array(49,-74,951,830),34813=>array(46,-57,950,833),34814=>array(43,-68,958,855),34815=>array(40,-56,955,843),34816=>array(51,-70,953,839),34817=>array(55,-76,941,841),34818=>array(43,-65,975,828),34819=>array(41,-68,957,849),34820=>array(37,-53,974,861),34821=>array(46,-48,957,819),34822=>array(66,-72,962,833),34823=>array(62,-66,958,832),34824=>array(52,-71,961,828),34825=>array(43,-71,969,820),34826=>array(34,-67,946,851),34827=>array(52,-66,924,817),34828=>array(42,-62,940,820),34829=>array(40,-75,977,824),34830=>array(46,-65,956,833),34831=>array(43,-61,948,847),34832=>array(41,-64,968,849),34833=>array(37,-65,965,839),34834=>array(48,-75,957,802),34835=>array(47,-60,961,835),34836=>array(50,-59,966,846),34837=>array(56,-59,943,829),34838=>array(34,-65,976,832),34839=>array(40,-66,951,806),34840=>array(34,-59,974,842),34841=>array(39,-69,965,842),34842=>array(53,-71,942,840),34843=>array(44,-64,961,839),34844=>array(38,-87,979,834),34845=>array(52,-70,929,784),34846=>array(56,-86,949,838),34847=>array(32,-60,961,848),34848=>array(53,-71,944,786),34849=>array(52,-64,957,844),34850=>array(55,-62,972,858),34851=>array(50,-65,948,818),34852=>array(67,-69,969,853),34853=>array(63,-75,944,846),34854=>array(45,-71,956,827),34855=>array(54,-67,967,844),34856=>array(42,-55,965,842),34857=>array(64,-71,964,823),34858=>array(71,-75,962,845),34859=>array(65,-77,969,831),34860=>array(40,-68,950,839),34861=>array(54,-79,967,854),34862=>array(35,-73,975,802),34863=>array(40,-70,954,844),34864=>array(30,-66,975,846),34865=>array(46,-33,957,833),34866=>array(57,-63,929,842),34867=>array(34,-78,953,806),34868=>array(55,-68,942,826),34869=>array(47,-65,949,828),34870=>array(50,-76,965,793),34871=>array(46,-64,946,807),34872=>array(36,-67,941,826),34873=>array(54,-67,967,844),34874=>array(50,-88,965,809),34875=>array(62,-77,944,830),34876=>array(48,-68,986,819),34877=>array(41,-73,966,829),34878=>array(47,-71,924,815),34879=>array(89,-73,946,847),34880=>array(55,-11,954,806),34881=>array(59,-14,955,846),34882=>array(34,-60,971,811),34883=>array(43,-70,968,833),34884=>array(20,-15,947,834),34885=>array(25,-45,949,853),34886=>array(49,-64,958,836),34887=>array(37,-68,971,836),34888=>array(40,-69,955,832),34889=>array(34,-61,982,849),34890=>array(31,-68,957,830),34891=>array(63,-57,941,842),34892=>array(51,-62,941,845),34893=>array(41,-68,954,827),34894=>array(53,-67,960,829),34895=>array(50,-68,948,829),34896=>array(53,-66,960,829),34897=>array(53,-66,960,829),34898=>array(47,-65,954,835),34899=>array(39,-73,951,824),34900=>array(29,-68,923,828),34901=>array(46,-65,952,833),34902=>array(49,-69,960,833),34903=>array(41,-72,951,831),34904=>array(24,-66,960,853),34905=>array(40,-65,959,831),34906=>array(46,-70,953,825),34907=>array(37,-65,955,839),34908=>array(34,-66,960,816),34909=>array(38,-68,953,835),34910=>array(35,-70,943,831),34911=>array(39,-66,954,841),34912=>array(24,-72,936,839),34913=>array(33,-69,945,835),34914=>array(37,-65,956,837),34915=>array(38,-68,944,826),34916=>array(266,-66,677,819),34917=>array(40,-69,954,843),34918=>array(41,-50,963,842),34919=>array(41,-67,958,844),34920=>array(52,-75,953,835),34921=>array(34,-67,971,843),34922=>array(35,-64,954,843),34923=>array(42,-68,957,830),34924=>array(32,-60,917,839),34925=>array(35,-61,973,841),34926=>array(54,-73,963,845),34927=>array(45,-74,973,845),34928=>array(37,-70,960,832),34929=>array(50,-76,963,844),34930=>array(23,-69,879,803),34931=>array(33,-65,955,831),34932=>array(54,-75,964,842),34933=>array(46,-53,909,805),34934=>array(62,-67,932,844),34935=>array(42,-73,960,829),34936=>array(50,-63,946,837),34937=>array(50,-67,956,838),34938=>array(47,-68,960,850),34939=>array(61,-67,966,838),34940=>array(50,-70,976,850),34941=>array(39,-67,946,810),34942=>array(37,-62,955,858),34943=>array(36,-65,970,848),34944=>array(60,-71,930,838),34945=>array(67,-62,967,833),34946=>array(32,-66,964,832),34947=>array(30,-73,984,823),34948=>array(16,-76,940,837),34949=>array(49,-59,950,829),34950=>array(48,-67,906,842),34951=>array(48,-78,956,842),34952=>array(48,-67,959,831),34953=>array(48,-67,957,842),34954=>array(48,-77,949,842),34955=>array(44,-69,962,837),34956=>array(44,-69,956,851),34957=>array(42,-67,960,839),34958=>array(37,-75,914,845),34959=>array(44,-60,964,845),34960=>array(29,-62,970,845),34961=>array(50,-72,894,840),34962=>array(47,-65,951,828),34963=>array(45,-68,956,844),34964=>array(48,-67,953,842),34965=>array(51,-74,966,841),34966=>array(46,-68,899,827),34967=>array(39,-52,972,853),34968=>array(47,-65,957,843),34969=>array(47,-72,892,848),34970=>array(31,-62,967,847),34971=>array(39,-58,960,850),34972=>array(28,-56,970,847),34973=>array(39,-70,941,848),34974=>array(52,-58,961,840),34975=>array(47,-80,966,838),34976=>array(50,-67,961,846),34977=>array(52,-68,954,841),34978=>array(43,-65,954,838),34979=>array(54,-61,964,848),34980=>array(47,-62,960,845),34981=>array(54,-62,948,848),34982=>array(54,-65,916,848),34983=>array(54,-71,914,848),34984=>array(52,-62,947,844),34985=>array(54,-66,951,848),34986=>array(46,-65,955,842),34987=>array(36,-69,962,838),34988=>array(44,-68,964,849),34989=>array(29,-63,942,840),34990=>array(54,-61,944,856),34991=>array(54,-74,945,848),34992=>array(61,-67,945,811),34993=>array(33,-74,971,834),34994=>array(51,-79,960,854),34995=>array(41,-70,935,848),34996=>array(36,-63,982,842),34997=>array(46,-55,954,833),34998=>array(38,-67,972,844),34999=>array(36,-63,966,850),35000=>array(44,-70,954,836),35001=>array(41,-70,951,842),35002=>array(42,-72,950,844),35003=>array(33,-70,954,842),35004=>array(50,-71,977,841),35005=>array(47,-55,904,852),35006=>array(28,-55,965,844),35007=>array(41,-65,959,838),35008=>array(36,-57,916,842),35009=>array(42,-66,957,840),35010=>array(44,-73,955,828),35011=>array(41,-65,913,835),35012=>array(41,-67,964,840),35013=>array(45,-68,959,830),35014=>array(28,-66,864,822),35015=>array(46,-53,972,855),35016=>array(41,-65,948,842),35017=>array(39,-71,966,842),35018=>array(46,-64,958,852),35019=>array(37,-67,964,834),35020=>array(37,-72,966,846),35021=>array(38,-65,908,842),35022=>array(48,-65,956,847),35023=>array(43,-75,955,840),35024=>array(28,-68,915,842),35025=>array(41,-65,950,842),35026=>array(55,-61,967,850),35027=>array(41,-65,957,842),35028=>array(35,-67,942,845),35029=>array(44,-69,969,833),35030=>array(30,-71,980,840),35031=>array(37,-73,960,840),35032=>array(51,-55,963,832),35033=>array(42,-74,948,823),35034=>array(40,-74,969,830),35035=>array(46,-70,969,838),35036=>array(32,-63,946,834),35037=>array(57,-60,957,832),35038=>array(35,-65,959,841),35039=>array(33,-67,948,833),35040=>array(33,-82,948,786),35041=>array(41,-64,954,821),35042=>array(20,-69,935,815),35043=>array(23,-68,956,832),35044=>array(29,-60,931,840),35045=>array(24,-68,886,822),35046=>array(36,-79,957,841),35047=>array(45,-76,966,840),35048=>array(31,-68,941,849),35049=>array(31,-68,949,842),35050=>array(41,-66,917,842),35051=>array(47,-71,903,842),35052=>array(49,-72,973,839),35053=>array(31,-68,949,842),35054=>array(54,-70,905,840),35055=>array(36,-65,906,844),35056=>array(36,-67,971,838),35057=>array(34,-65,975,843),35058=>array(46,-71,948,823),35059=>array(45,-68,956,836),35060=>array(35,-63,958,830),35061=>array(47,-74,948,832),35062=>array(45,-70,955,840),35063=>array(47,-65,973,838),35064=>array(40,-71,973,822),35065=>array(68,-59,967,842),35066=>array(41,-70,966,837),35067=>array(41,-75,956,824),35068=>array(53,-64,928,823),35069=>array(28,-79,972,842),35070=>array(35,-68,957,825),35071=>array(53,-64,954,845),35072=>array(42,-72,963,843),35073=>array(42,-69,960,785),35074=>array(34,-66,968,833),35075=>array(34,-70,930,837),35076=>array(34,-66,938,835),35077=>array(51,-72,957,839),35078=>array(41,-73,968,837),35079=>array(36,-67,962,845),35080=>array(40,-63,956,840),35081=>array(43,-75,972,835),35082=>array(38,-70,906,823),35083=>array(53,-68,975,841),35084=>array(36,-65,952,823),35085=>array(34,-67,956,837),35086=>array(38,-73,976,847),35087=>array(38,-56,957,855),35088=>array(36,-63,924,834),35089=>array(50,-75,977,838),35090=>array(56,-73,972,842),35091=>array(32,-65,964,836),35092=>array(47,-71,952,842),35093=>array(45,-66,965,840),35094=>array(54,-70,978,837),35095=>array(44,-64,946,840),35096=>array(34,-58,954,838),35097=>array(30,-64,965,837),35098=>array(46,-64,959,841),35099=>array(23,-62,929,821),35100=>array(31,-80,971,836),35101=>array(38,-73,940,833),35102=>array(35,-68,968,820),35103=>array(39,-70,915,842),35104=>array(23,-65,954,829),35105=>array(45,-61,956,838),35106=>array(37,-75,978,839),35107=>array(48,-72,987,836),35108=>array(23,-60,977,833),35109=>array(42,-70,953,820),35110=>array(32,-55,970,855),35111=>array(24,-54,972,846),35112=>array(35,-57,933,847),35113=>array(31,-76,970,843),35114=>array(26,-73,967,820),35115=>array(19,-70,951,838),35116=>array(53,-70,993,835),35117=>array(47,-79,964,856),35118=>array(39,-71,976,833),35119=>array(41,-72,945,841),35120=>array(36,-65,974,846),35121=>array(51,-75,974,846),35122=>array(30,-69,947,845),35123=>array(30,-65,965,837),35124=>array(12,-68,918,821),35125=>array(31,-55,947,855),35126=>array(34,-65,910,817),35127=>array(42,-75,973,833),35128=>array(36,-66,945,842),35129=>array(23,-70,971,823),35130=>array(56,-68,972,840),35131=>array(54,-60,955,843),35132=>array(42,-70,971,833),35133=>array(56,-72,972,832),35134=>array(45,-67,957,850),35135=>array(23,-69,942,828),35136=>array(41,-74,947,833),35137=>array(17,-68,965,819),35138=>array(31,-59,973,853),35139=>array(56,-56,949,840),35140=>array(49,-58,955,843),35141=>array(32,-68,948,833),35142=>array(40,-67,972,844),35143=>array(51,-67,924,842),35144=>array(23,-69,955,821),35145=>array(39,-64,911,837),35146=>array(23,-66,962,821),35147=>array(33,-67,973,837),35148=>array(39,-63,950,817),35149=>array(36,-68,966,832),35150=>array(23,-67,964,833),35151=>array(40,-72,963,839),35152=>array(46,-66,958,838),35153=>array(42,-67,952,843),35154=>array(41,-76,970,831),35155=>array(30,-70,954,832),35156=>array(23,-67,951,831),35157=>array(26,-59,937,831),35158=>array(35,-66,971,846),35159=>array(51,-68,956,835),35160=>array(43,-67,969,837),35161=>array(46,-67,972,838),35162=>array(44,-66,980,845),35163=>array(40,-64,978,844),35164=>array(31,-68,954,846),35165=>array(26,-64,983,858),35166=>array(47,-53,974,835),35167=>array(36,-66,971,834),35168=>array(43,-65,928,835),35169=>array(52,-67,924,835),35170=>array(27,-55,947,856),35171=>array(44,-66,964,846),35172=>array(35,-68,952,836),35173=>array(20,-104,957,841),35174=>array(35,-64,959,836),35175=>array(39,-64,973,843),35176=>array(23,-66,969,825),35177=>array(43,-82,960,839),35178=>array(31,-65,958,829),35179=>array(41,-74,971,835),35180=>array(28,-55,958,845),35181=>array(36,-81,966,831),35182=>array(36,-73,994,831),35183=>array(33,-76,966,826),35184=>array(23,-72,977,846),35185=>array(39,-70,964,840),35186=>array(51,-65,948,841),35187=>array(27,-70,974,831),35188=>array(29,-62,912,826),35189=>array(29,-76,955,843),35190=>array(22,-65,973,835),35191=>array(34,-65,969,825),35192=>array(31,-66,978,831),35193=>array(31,-66,980,831),35194=>array(34,-62,948,834),35195=>array(31,-59,968,849),35196=>array(29,-60,967,841),35197=>array(29,-64,942,841),35198=>array(71,-63,945,782),35199=>array(73,-53,929,772),35200=>array(85,374,935,781),35201=>array(52,-69,935,781),35202=>array(74,-70,971,782),35203=>array(59,-63,955,788),35204=>array(64,-70,938,788),35205=>array(53,-66,930,836),35206=>array(55,-69,963,818),35207=>array(63,-70,937,818),35208=>array(48,-73,967,802),35209=>array(60,-68,950,804),35210=>array(54,-53,934,811),35211=>array(58,-74,944,783),35212=>array(18,-65,948,784),35213=>array(64,-60,935,830),35214=>array(52,-39,956,787),35215=>array(43,-59,954,812),35216=>array(38,-56,957,818),35217=>array(42,-58,956,836),35218=>array(51,-62,956,822),35219=>array(51,-71,960,837),35220=>array(64,-65,944,791),35221=>array(42,-64,956,828),35222=>array(39,-63,959,834),35223=>array(58,-69,953,780),35224=>array(96,-62,938,829),35225=>array(51,-62,946,848),35226=>array(37,-65,908,816),35227=>array(36,-70,966,828),35228=>array(36,-70,954,826),35229=>array(50,-72,962,780),35230=>array(37,-70,961,773),35231=>array(45,-71,962,824),35232=>array(32,-62,971,796),35233=>array(38,-71,967,774),35234=>array(49,-71,968,829),35235=>array(41,-71,966,824),35236=>array(36,-70,969,835),35237=>array(33,-60,971,836),35238=>array(32,-72,971,827),35239=>array(47,-63,960,838),35240=>array(71,-59,963,789),35241=>array(31,-69,963,825),35242=>array(46,-70,957,826),35243=>array(17,-79,957,825),35244=>array(39,-79,950,835),35245=>array(52,-61,965,785),35246=>array(66,-70,937,824),35247=>array(62,-74,977,829),35248=>array(32,-74,978,835),35249=>array(64,-58,939,828),35250=>array(52,-68,974,835),35251=>array(39,-60,970,841),35252=>array(29,-75,972,828),35253=>array(104,-74,975,791),35254=>array(50,-70,962,837),35255=>array(32,-71,966,835),35256=>array(104,-74,975,791),35257=>array(33,-66,963,832),35258=>array(64,-65,935,840),35259=>array(22,-76,987,835),35260=>array(18,-76,966,789),35261=>array(47,-63,960,840),35262=>array(37,-74,967,834),35263=>array(44,-75,967,835),35264=>array(35,-70,960,827),35265=>array(24,-56,921,784),35266=>array(18,-61,932,792),35267=>array(25,-55,971,792),35268=>array(26,-56,932,826),35269=>array(29,-51,934,827),35270=>array(31,-72,937,818),35271=>array(98,-67,941,813),35272=>array(39,-59,913,838),35273=>array(28,-60,920,816),35274=>array(70,-78,938,810),35275=>array(22,-69,936,771),35276=>array(43,-73,931,819),35277=>array(37,-85,973,836),35278=>array(32,-81,938,822),35279=>array(52,-72,933,818),35280=>array(29,-64,936,819),35281=>array(25,-75,942,817),35282=>array(69,-60,863,849),35283=>array(45,-70,886,842),35284=>array(60,-57,924,849),35285=>array(59,-56,911,851),35286=>array(40,-67,979,847),35287=>array(38,-62,975,838),35288=>array(24,-68,959,845),35289=>array(41,-79,963,852),35290=>array(33,-67,975,842),35291=>array(52,-68,954,841),35292=>array(28,-68,937,835),35293=>array(33,-56,962,857),35294=>array(18,-65,913,834),35295=>array(25,-67,955,828),35296=>array(42,-59,972,836),35297=>array(33,-70,989,831),35298=>array(40,-61,900,830),35299=>array(52,-67,949,834),35300=>array(28,-87,963,828),35301=>array(38,-71,969,836),35302=>array(36,-71,962,834),35303=>array(46,-66,934,843),35304=>array(32,-73,966,824),35305=>array(38,-71,967,828),35306=>array(46,-66,938,850),35307=>array(42,-68,974,839),35308=>array(34,-74,960,825),35309=>array(44,-71,955,841),35310=>array(54,-67,962,842),35311=>array(19,-67,922,834),35312=>array(44,-70,951,836),35313=>array(38,-69,965,842),35314=>array(29,-70,954,831),35315=>array(38,-67,981,829),35316=>array(41,-67,962,848),35317=>array(46,-70,935,842),35318=>array(44,-78,967,829),35319=>array(60,-65,930,830),35320=>array(63,-74,926,833),35321=>array(29,-71,960,841),35322=>array(54,-64,965,831),35323=>array(38,-70,975,835),35324=>array(38,-73,975,841),35325=>array(44,-71,959,841),35326=>array(33,-64,973,836),35327=>array(44,-52,955,850),35328=>array(84,-64,916,819),35329=>array(261,-47,747,842),35330=>array(60,-61,955,817),35331=>array(60,-65,951,829),35332=>array(33,-66,966,836),35333=>array(60,-58,967,842),35334=>array(69,-67,876,842),35335=>array(77,-61,909,840),35336=>array(51,-64,954,835),35337=>array(60,-45,948,847),35338=>array(60,-62,959,817),35339=>array(60,-55,914,847),35340=>array(65,-47,948,790),35341=>array(65,-50,946,844),35342=>array(60,-69,949,830),35343=>array(68,-68,964,834),35344=>array(65,-64,955,792),35345=>array(46,-34,963,853),35346=>array(63,-53,904,817),35347=>array(60,-68,902,829),35348=>array(85,-64,928,824),35349=>array(79,-56,912,846),35350=>array(60,-55,960,835),35351=>array(60,-61,957,834),35352=>array(60,-61,957,823),35353=>array(64,-56,964,848),35354=>array(116,-57,874,823),35355=>array(58,-62,954,840),35356=>array(60,-44,968,843),35357=>array(60,-62,948,793),35358=>array(63,-73,976,839),35359=>array(59,-58,964,815),35360=>array(60,-61,899,843),35361=>array(60,-66,963,843),35362=>array(63,-73,960,831),35363=>array(62,-69,955,829),35364=>array(60,-65,934,846),35365=>array(71,-71,907,796),35366=>array(60,-50,950,843),35367=>array(66,-69,963,841),35368=>array(60,-44,954,843),35369=>array(76,-58,930,840),35370=>array(60,-62,945,824),35371=>array(60,-44,960,843),35372=>array(72,-77,972,836),35373=>array(60,-63,975,817),35374=>array(60,-65,952,843),35375=>array(60,-69,982,843),35376=>array(65,-41,957,842),35377=>array(60,-64,949,837),35378=>array(60,-66,891,852),35379=>array(60,-62,964,817),35380=>array(56,-67,956,837),35381=>array(60,-46,917,843),35382=>array(59,-62,961,793),35383=>array(60,-62,901,838),35384=>array(60,-71,948,843),35385=>array(62,-68,951,844),35386=>array(56,-72,965,844),35387=>array(60,-61,947,829),35388=>array(53,-57,950,817),35389=>array(60,-52,921,846),35390=>array(64,-67,958,827),35391=>array(57,-44,964,839),35392=>array(59,-55,951,844),35393=>array(60,-65,953,826),35394=>array(60,-66,964,843),35395=>array(60,-65,982,843),35396=>array(57,-74,966,845),35397=>array(56,-76,976,839),35398=>array(56,-60,961,835),35399=>array(60,-58,978,843),35400=>array(74,-65,942,820),35401=>array(51,-71,977,843),35402=>array(63,-70,952,837),35403=>array(60,-44,957,843),35404=>array(58,-70,948,836),35405=>array(58,-47,947,844),35406=>array(62,-48,954,843),35407=>array(59,-73,911,848),35408=>array(60,-61,951,841),35409=>array(60,-61,952,824),35410=>array(60,-63,952,830),35411=>array(60,-51,963,843),35412=>array(60,-62,905,817),35413=>array(53,-65,956,817),35414=>array(51,-74,972,834),35415=>array(56,-61,903,841),35416=>array(78,-67,920,833),35417=>array(65,-76,965,843),35418=>array(60,-44,963,843),35419=>array(60,-50,964,793),35420=>array(42,-64,971,837),35421=>array(60,-62,925,843),35422=>array(60,-64,909,817),35423=>array(35,-69,972,846),35424=>array(52,-63,965,844),35425=>array(77,-52,914,841),35426=>array(62,-60,910,836),35427=>array(60,-63,958,831),35428=>array(54,-66,966,832),35429=>array(51,-65,977,853),35430=>array(60,-61,963,829),35431=>array(51,-60,957,839),35432=>array(52,-74,971,831),35433=>array(60,-61,954,838),35434=>array(60,-64,964,844),35435=>array(53,-57,961,829),35436=>array(69,-78,951,818),35437=>array(62,-61,954,846),35438=>array(49,-55,955,830),35439=>array(60,-70,899,843),35440=>array(50,-58,945,829),35441=>array(53,-64,958,834),35442=>array(53,-63,954,824),35443=>array(60,-65,954,843),35444=>array(58,-68,951,840),35445=>array(55,-73,963,826),35446=>array(57,-71,905,848),35447=>array(60,-65,904,837),35448=>array(61,-67,974,849),35449=>array(45,-76,914,842),35450=>array(61,-72,914,841),35451=>array(57,-67,966,836),35452=>array(52,-57,954,833),35453=>array(61,-69,956,840),35454=>array(47,-62,925,842),35455=>array(63,-55,954,831),35456=>array(53,-65,946,842),35457=>array(57,-69,951,838),35458=>array(57,-67,957,830),35459=>array(62,-65,916,840),35460=>array(59,-68,981,830),35461=>array(58,-65,977,836),35462=>array(62,-53,957,838),35463=>array(60,-62,978,843),35464=>array(61,-52,957,849),35465=>array(42,-67,958,842),35466=>array(30,-60,954,832),35467=>array(51,-70,967,832),35468=>array(53,-59,964,820),35469=>array(53,-48,964,813),35470=>array(61,-65,976,849),35471=>array(60,-73,982,841),35472=>array(61,-59,970,849),35473=>array(63,-53,957,817),35474=>array(57,-74,986,839),35475=>array(64,-71,936,839),35476=>array(64,-67,967,840),35477=>array(58,-66,963,819),35478=>array(62,-50,956,846),35479=>array(61,-65,936,849),35480=>array(53,-69,975,828),35481=>array(65,-68,961,843),35482=>array(67,-70,926,835),35483=>array(61,-61,970,849),35484=>array(61,-67,968,849),35485=>array(61,-71,972,849),35486=>array(49,-68,949,815),35487=>array(61,-68,957,849),35488=>array(52,-70,961,833),35489=>array(58,-63,964,837),35490=>array(61,-52,958,849),35491=>array(59,-48,954,797),35492=>array(59,-62,944,815),35493=>array(50,-65,945,831),35494=>array(60,-64,895,793),35495=>array(59,-66,953,826),35496=>array(62,-68,954,845),35497=>array(61,-56,948,851),35498=>array(57,-71,964,816),35499=>array(59,-68,967,842),35500=>array(59,-57,956,848),35501=>array(53,-57,966,829),35502=>array(61,-66,964,849),35503=>array(61,-62,932,849),35504=>array(54,-70,952,837),35505=>array(61,-72,962,849),35506=>array(56,-61,970,817),35507=>array(61,-77,932,849),35508=>array(61,-63,977,850),35509=>array(61,-64,968,855),35510=>array(69,-68,974,842),35511=>array(61,-67,939,849),35512=>array(60,-63,955,837),35513=>array(53,-68,954,829),35514=>array(59,-68,977,836),35515=>array(59,-69,967,834),35516=>array(53,-57,958,827),35517=>array(60,-61,965,837),35518=>array(119,-68,903,804),35519=>array(53,-62,915,817),35520=>array(54,-68,950,843),35521=>array(61,-62,963,843),35522=>array(58,-68,897,838),35523=>array(57,-70,970,832),35524=>array(56,-62,959,835),35525=>array(50,-71,963,831),35526=>array(55,-80,952,833),35527=>array(63,-67,962,841),35528=>array(54,-47,963,843),35529=>array(62,-65,958,843),35530=>array(61,-66,937,849),35531=>array(53,-65,956,835),35532=>array(53,-64,974,835),35533=>array(56,-61,956,836),35534=>array(61,-64,960,849),35535=>array(51,-68,969,817),35536=>array(26,-58,946,836),35537=>array(56,-64,978,833),35538=>array(53,-60,960,830),35539=>array(63,-62,959,840),35540=>array(60,-69,975,838),35541=>array(60,-70,959,833),35542=>array(55,-63,973,849),35543=>array(63,-55,986,843),35544=>array(63,-73,980,839),35545=>array(58,-70,963,834),35546=>array(61,-53,983,824),35547=>array(53,-74,975,832),35548=>array(53,-64,971,830),35549=>array(59,-68,973,839),35550=>array(71,-72,928,794),35551=>array(55,-60,967,814),35552=>array(50,-42,947,837),35553=>array(54,-37,973,816),35554=>array(49,-67,954,793),35555=>array(49,-67,914,840),35556=>array(55,-59,951,793),35557=>array(55,-44,947,842),35558=>array(51,-67,946,826),35559=>array(56,-65,951,832),35560=>array(54,-67,927,840),35561=>array(55,-43,936,845),35562=>array(54,-73,949,833),35563=>array(48,-67,964,833),35564=>array(29,-69,953,852),35565=>array(48,-68,970,852),35566=>array(53,-64,965,845),35567=>array(61,-61,955,838),35568=>array(56,-48,971,833),35569=>array(58,-62,951,842),35570=>array(68,-45,959,836),35571=>array(57,-64,947,844),35572=>array(42,-60,945,837),35573=>array(55,-56,953,846),35574=>array(65,-82,957,818),35575=>array(51,-69,964,797),35576=>array(59,-66,948,835),35577=>array(59,-48,947,842),35578=>array(54,-71,952,830),35579=>array(59,-43,953,844),35580=>array(68,-70,981,839),35581=>array(59,-68,947,842),35582=>array(53,-65,949,836),35583=>array(53,-69,950,835),35584=>array(53,-69,969,829),35585=>array(62,-60,926,816),35586=>array(60,-64,911,823),35587=>array(63,-42,959,842),35588=>array(40,-72,967,840),35589=>array(58,-63,914,841),35590=>array(56,-61,919,872),35591=>array(31,-65,970,843),35592=>array(35,-67,969,793),35593=>array(64,-56,984,851),35594=>array(56,-63,961,840),35595=>array(75,-71,987,834),35596=>array(69,-60,954,804),35597=>array(108,-71,902,823),35598=>array(79,-70,956,836),35599=>array(60,-60,958,843),35600=>array(66,-55,968,827),35601=>array(57,-74,957,842),35602=>array(61,-68,963,838),35603=>array(60,-73,960,842),35604=>array(62,-68,954,833),35605=>array(57,-72,959,836),35606=>array(50,-66,968,793),35607=>array(59,-69,951,816),35608=>array(57,-71,952,838),35609=>array(64,-64,978,843),35610=>array(54,-57,961,804),35611=>array(55,-65,952,826),35612=>array(57,-66,962,845),35613=>array(53,-66,951,844),35614=>array(59,-68,930,832),35615=>array(51,-57,926,848),35616=>array(59,-58,957,842),35617=>array(53,-64,952,829),35618=>array(62,-73,972,841),35619=>array(58,-68,953,837),35620=>array(59,-69,955,833),35621=>array(56,-53,968,831),35622=>array(45,-66,958,845),35623=>array(59,-66,954,838),35624=>array(63,-68,984,823),35625=>array(33,-72,976,841),35626=>array(62,-67,956,838),35627=>array(55,-70,951,838),35628=>array(60,-72,947,795),35629=>array(55,-73,947,838),35630=>array(52,-77,958,842),35631=>array(42,-49,945,849),35632=>array(61,-71,964,835),35633=>array(53,-75,948,842),35634=>array(53,-73,970,848),35635=>array(60,-85,957,793),35636=>array(60,-68,951,847),35637=>array(81,-68,922,835),35638=>array(45,-61,960,837),35639=>array(63,-60,964,839),35640=>array(66,-79,974,834),35641=>array(60,-50,953,830),35642=>array(69,-81,958,837),35643=>array(71,-72,938,836),35644=>array(56,-78,946,833),35645=>array(79,-68,940,841),35646=>array(68,-60,983,813),35647=>array(60,-75,942,847),35648=>array(56,-70,968,842),35649=>array(54,-64,954,834),35650=>array(68,-68,956,840),35651=>array(60,-48,961,847),35652=>array(60,-63,918,847),35653=>array(54,-44,946,839),35654=>array(34,-70,943,825),35655=>array(60,-66,972,841),35656=>array(54,-74,972,841),35657=>array(59,-53,956,830),35658=>array(56,-69,950,839),35659=>array(75,-60,922,846),35660=>array(51,-79,968,852),35661=>array(42,-71,944,851),35662=>array(62,-64,941,798),35663=>array(57,-67,972,833),35664=>array(56,-65,954,845),35665=>array(60,-62,965,844),35666=>array(50,-57,970,848),35667=>array(73,-46,977,827),35668=>array(48,-58,951,846),35669=>array(58,-67,955,844),35670=>array(55,-67,960,824),35671=>array(66,-59,959,841),35672=>array(51,-68,959,833),35673=>array(60,-71,971,835),35674=>array(49,-67,954,813),35675=>array(60,-49,966,838),35676=>array(53,-61,952,843),35677=>array(52,-50,966,840),35678=>array(60,-66,976,847),35679=>array(53,-50,969,800),35680=>array(63,-55,960,837),35681=>array(60,-65,945,847),35682=>array(60,-63,978,847),35683=>array(42,-70,970,847),35684=>array(60,-66,985,847),35685=>array(40,-67,979,845),35686=>array(55,-77,944,824),35687=>array(48,-66,967,838),35688=>array(57,-73,977,839),35689=>array(63,-48,966,844),35690=>array(57,-68,948,834),35691=>array(64,-76,962,839),35692=>array(66,-60,961,830),35693=>array(51,-59,973,846),35694=>array(60,-68,985,848),35695=>array(53,-64,939,795),35696=>array(54,-63,962,850),35697=>array(36,-86,955,843),35698=>array(52,-79,973,837),35699=>array(60,-59,953,847),35700=>array(60,-63,967,836),35701=>array(63,-68,959,847),35702=>array(36,-66,955,847),35703=>array(53,-59,971,837),35704=>array(63,-61,964,840),35705=>array(53,-68,977,836),35706=>array(54,-74,967,831),35707=>array(83,-63,936,790),35708=>array(83,-74,936,841),35709=>array(31,-64,971,832),35710=>array(60,-55,956,858),35711=>array(57,-46,965,823),35712=>array(59,-71,961,835),35713=>array(39,-60,961,847),35714=>array(61,-71,959,835),35715=>array(51,-69,959,836),35716=>array(76,-63,920,840),35717=>array(55,-69,973,840),35718=>array(40,-71,955,839),35719=>array(60,-60,923,847),35720=>array(55,-70,971,828),35721=>array(61,-61,953,842),35722=>array(50,-70,960,840),35723=>array(66,-48,953,860),35724=>array(52,-66,968,838),35725=>array(60,-48,938,847),35726=>array(23,-62,952,845),35727=>array(40,-71,955,854),35728=>array(41,-71,944,842),35729=>array(60,-52,969,847),35730=>array(52,-65,961,842),35731=>array(59,-66,957,845),35732=>array(49,-63,967,842),35733=>array(62,-62,900,839),35734=>array(58,-59,960,834),35735=>array(60,-67,951,839),35736=>array(58,-67,960,831),35737=>array(53,-52,949,842),35738=>array(56,-60,959,851),35739=>array(74,-60,957,847),35740=>array(59,-79,967,833),35741=>array(62,-67,956,847),35742=>array(53,-70,968,835),35743=>array(55,-61,949,840),35744=>array(308,-19,665,809),35745=>array(74,-66,937,840),35746=>array(69,-65,926,826),35747=>array(62,-67,953,840),35748=>array(72,-62,958,826),35749=>array(59,-58,960,812),35750=>array(52,-66,922,810),35751=>array(49,13,913,814),35752=>array(75,-70,932,828),35753=>array(66,-22,929,818),35754=>array(50,-58,878,826),35755=>array(70,-29,943,838),35756=>array(68,-30,944,836),35757=>array(65,-74,889,826),35758=>array(49,-71,968,806),35759=>array(68,-57,958,826),35760=>array(80,-28,946,834),35761=>array(61,-60,890,836),35762=>array(56,-68,916,829),35763=>array(49,-58,916,830),35764=>array(61,-11,933,807),35765=>array(47,-25,917,820),35766=>array(49,-64,914,808),35767=>array(62,-61,901,829),35768=>array(64,-65,936,836),35769=>array(62,-64,930,836),35770=>array(52,-30,964,828),35771=>array(50,-65,906,832),35772=>array(56,-59,936,784),35773=>array(54,-61,975,811),35774=>array(54,-54,946,804),35775=>array(71,-71,931,847),35776=>array(74,-71,931,835),35777=>array(59,-22,938,797),35778=>array(67,-66,936,823),35779=>array(67,-64,944,826),35780=>array(78,-67,942,836),35781=>array(53,-29,927,790),35782=>array(49,-54,951,811),35783=>array(58,-60,909,836),35784=>array(69,-69,931,839),35785=>array(69,-69,946,834),35786=>array(69,-74,960,846),35787=>array(62,-64,938,830),35788=>array(66,-54,873,820),35789=>array(51,-61,888,826),35790=>array(56,-69,892,826),35791=>array(49,-56,888,823),35792=>array(43,-71,970,832),35793=>array(63,-60,954,817),35794=>array(63,-60,940,837),35795=>array(58,-26,938,826),35796=>array(56,-71,957,828),35797=>array(57,-61,944,825),35798=>array(63,-27,925,820),35799=>array(41,-62,944,834),35800=>array(67,-66,928,826),35801=>array(56,-59,958,826),35802=>array(47,-57,956,835),35803=>array(57,-68,938,830),35804=>array(43,-75,947,823),35805=>array(72,-65,941,830),35806=>array(62,-66,951,815),35807=>array(53,-79,920,816),35808=>array(62,-19,942,836),35809=>array(71,-63,937,844),35810=>array(61,-62,903,834),35811=>array(57,-69,937,828),35812=>array(68,-58,932,835),35813=>array(69,-79,949,838),35814=>array(59,-67,913,842),35815=>array(61,-25,932,852),35816=>array(60,-58,947,812),35817=>array(54,-54,885,818),35818=>array(76,-57,952,836),35819=>array(76,-65,942,840),35820=>array(54,-16,950,805),35821=>array(53,-70,936,795),35822=>array(57,-74,913,831),35823=>array(61,-69,956,794),35824=>array(57,-66,918,828),35825=>array(70,-69,941,825),35826=>array(72,-60,937,843),35827=>array(49,-54,947,827),35828=>array(66,-68,953,838),35829=>array(56,-65,879,798),35830=>array(56,-71,957,837),35831=>array(61,-66,930,831),35832=>array(68,-67,932,831),35833=>array(48,-70,955,799),35834=>array(54,-66,912,805),35835=>array(56,-69,940,835),35836=>array(61,-57,954,811),35837=>array(59,-64,942,836),35838=>array(56,-66,954,834),35839=>array(56,-65,925,833),35840=>array(56,-77,947,828),35841=>array(50,-72,927,834),35842=>array(50,-51,942,836),35843=>array(72,-85,897,810),35844=>array(67,-67,880,835),35845=>array(69,-70,935,838),35846=>array(69,-64,920,848),35847=>array(57,-71,923,842),35848=>array(55,-71,919,837),35849=>array(55,-66,931,838),35850=>array(55,-25,931,846),35851=>array(72,-67,953,832),35852=>array(60,-51,933,817),35853=>array(61,-66,948,829),35854=>array(53,-65,956,828),35855=>array(56,-69,961,831),35856=>array(57,-67,948,829),35857=>array(53,-70,945,831),35858=>array(74,-62,898,809),35859=>array(62,-66,900,836),35860=>array(55,-62,921,816),35861=>array(58,-72,954,847),35862=>array(60,-72,936,819),35863=>array(49,-65,961,834),35864=>array(54,-66,940,842),35865=>array(68,-66,930,834),35866=>array(60,-64,920,842),35867=>array(65,-69,921,839),35868=>array(59,-55,940,818),35869=>array(50,-74,888,836),35870=>array(78,-51,946,805),35871=>array(54,-65,943,820),35872=>array(60,-69,953,835),35873=>array(75,-65,942,800),35874=>array(53,-66,936,841),35875=>array(63,-74,924,807),35876=>array(74,-71,928,842),35877=>array(59,-35,936,828),35878=>array(63,-66,956,841),35879=>array(60,-36,948,825),35880=>array(54,-35,930,820),35881=>array(57,-61,948,786),35882=>array(58,-68,924,839),35883=>array(51,-79,947,838),35884=>array(58,-74,958,810),35885=>array(55,-70,939,793),35886=>array(57,-67,956,811),35887=>array(64,-75,938,828),35888=>array(46,-65,909,825),35889=>array(60,-62,941,844),35890=>array(59,-66,918,786),35891=>array(48,-75,971,825),35892=>array(47,-61,956,809),35893=>array(54,-78,941,836),35894=>array(56,-67,955,831),35895=>array(34,-53,967,839),35896=>array(59,-64,966,833),35897=>array(42,-58,952,836),35898=>array(37,-62,948,813),35899=>array(49,-68,960,813),35900=>array(32,-73,958,820),35901=>array(57,-69,957,837),35902=>array(34,-48,957,835),35903=>array(38,-66,982,837),35904=>array(35,-64,968,841),35905=>array(54,-63,961,836),35906=>array(45,-72,964,797),35907=>array(37,-71,976,834),35908=>array(37,-66,991,841),35909=>array(29,-70,983,834),35910=>array(100,-14,929,778),35911=>array(62,-17,951,770),35912=>array(62,-12,931,835),35913=>array(53,-68,973,835),35914=>array(57,-32,951,824),35915=>array(41,-26,962,842),35916=>array(51,-69,958,831),35917=>array(52,-73,950,838),35918=>array(48,-18,957,796),35919=>array(54,-67,966,832),35920=>array(70,-25,924,832),35921=>array(28,-67,965,836),35922=>array(34,-67,965,836),35923=>array(45,-46,974,829),35924=>array(45,-47,963,829),35925=>array(70,-49,949,772),35926=>array(58,-70,967,781),35927=>array(41,-75,969,781),35928=>array(43,-41,952,836),35929=>array(62,-55,939,847),35930=>array(31,-61,972,789),35931=>array(58,-69,963,787),35932=>array(43,-75,940,786),35933=>array(33,-46,951,785),35934=>array(43,-52,921,846),35935=>array(40,-65,958,815),35936=>array(43,-41,947,787),35937=>array(67,-59,940,845),35938=>array(49,-62,957,839),35939=>array(43,-71,953,787),35940=>array(29,-70,963,783),35941=>array(36,-64,958,834),35942=>array(49,-70,973,829),35943=>array(43,-75,951,824),35944=>array(41,-67,952,835),35945=>array(39,-64,977,779),35946=>array(88,-66,960,834),35947=>array(60,-72,962,835),35948=>array(47,-69,959,835),35949=>array(48,-70,984,789),35950=>array(42,-68,957,836),35951=>array(39,-77,975,819),35952=>array(77,-77,965,824),35953=>array(50,-61,959,782),35954=>array(42,-64,968,786),35955=>array(113,-69,911,825),35956=>array(43,-73,963,835),35957=>array(52,-71,983,829),35958=>array(34,-72,971,826),35959=>array(41,-62,967,832),35960=>array(125,-58,931,843),35961=>array(57,-56,903,842),35962=>array(61,-58,957,850),35963=>array(50,-67,963,835),35964=>array(40,-65,966,835),35965=>array(48,-65,914,842),35966=>array(48,-48,932,842),35967=>array(68,-52,921,846),35968=>array(41,-72,916,834),35969=>array(36,-57,965,855),35970=>array(65,-52,919,836),35971=>array(48,-63,890,842),35972=>array(46,-69,956,834),35973=>array(55,-61,981,850),35974=>array(46,-67,954,830),35975=>array(48,-55,960,842),35976=>array(48,-73,964,843),35977=>array(43,-64,975,840),35978=>array(54,-63,959,830),35979=>array(48,-65,926,842),35980=>array(41,-66,966,841),35981=>array(55,-59,956,838),35982=>array(48,-61,991,842),35983=>array(35,-73,953,836),35984=>array(46,-64,986,860),35985=>array(42,-75,977,829),35986=>array(37,-70,956,831),35987=>array(44,-67,950,836),35988=>array(34,-61,949,850),35989=>array(35,-62,959,834),35990=>array(36,-48,974,842),35991=>array(37,-71,951,837),35992=>array(26,-65,975,837),35993=>array(40,-60,965,827),35994=>array(43,-68,968,838),35995=>array(38,-71,912,832),35996=>array(55,-70,973,830),35997=>array(89,-68,912,789),35998=>array(59,-69,950,836),35999=>array(59,-69,950,842),36000=>array(53,-69,952,855),36001=>array(46,-73,939,829),36002=>array(59,-67,949,789),36003=>array(65,-70,954,850),36004=>array(52,-54,964,849),36005=>array(46,-78,954,834),36006=>array(52,-69,948,804),36007=>array(54,-69,954,823),36008=>array(52,-71,955,831),36009=>array(50,-67,973,788),36010=>array(38,-78,969,857),36011=>array(57,-74,946,785),36012=>array(57,-67,955,836),36013=>array(52,-75,924,831),36014=>array(53,-70,956,817),36015=>array(48,-68,948,822),36016=>array(51,-73,949,836),36017=>array(14,-67,970,832),36018=>array(43,-75,956,824),36019=>array(53,-70,956,837),36020=>array(57,-67,949,832),36021=>array(43,-66,977,865),36022=>array(57,-65,969,830),36023=>array(65,-67,949,782),36024=>array(63,-69,942,838),36025=>array(47,-75,956,822),36026=>array(51,-75,972,773),36027=>array(73,-71,933,837),36028=>array(50,-64,954,835),36029=>array(60,-62,960,833),36030=>array(49,-54,955,849),36031=>array(72,-67,941,827),36032=>array(65,-73,943,839),36033=>array(61,-67,943,828),36034=>array(57,-63,976,839),36035=>array(40,-65,957,837),36036=>array(54,-68,961,834),36037=>array(54,-77,973,830),36038=>array(21,-70,949,839),36039=>array(61,-70,942,837),36040=>array(66,-79,948,785),36041=>array(37,-58,973,855),36042=>array(41,-58,963,837),36043=>array(37,-76,970,846),36044=>array(66,-77,947,844),36045=>array(49,-59,956,822),36046=>array(44,-69,959,827),36047=>array(57,-73,963,773),36048=>array(31,-67,979,836),36049=>array(37,-71,971,787),36050=>array(40,-64,969,851),36051=>array(44,-74,974,837),36052=>array(101,-85,911,844),36053=>array(51,-66,981,829),36054=>array(31,-69,962,825),36055=>array(55,-74,911,822),36056=>array(49,-59,956,847),36057=>array(63,-71,911,793),36058=>array(45,-70,985,836),36059=>array(52,-76,964,843),36060=>array(60,-66,920,791),36061=>array(40,-70,976,780),36062=>array(71,-74,948,836),36063=>array(40,-73,955,830),36064=>array(59,-65,956,835),36065=>array(32,-67,954,849),36066=>array(70,-73,944,789),36067=>array(48,-69,945,826),36068=>array(48,-67,967,842),36069=>array(41,-73,950,840),36070=>array(42,-63,958,836),36071=>array(39,-68,974,832),36072=>array(57,-79,963,839),36073=>array(42,-60,960,845),36074=>array(63,-68,941,833),36075=>array(69,-70,954,826),36076=>array(55,-68,978,787),36077=>array(43,-65,944,823),36078=>array(40,-74,977,827),36079=>array(57,-60,934,840),36080=>array(49,-70,980,838),36081=>array(56,-76,958,783),36082=>array(38,-73,967,845),36083=>array(51,-75,967,830),36084=>array(44,-71,961,830),36085=>array(55,-68,921,789),36086=>array(40,-67,941,846),36087=>array(69,-70,954,834),36088=>array(31,-66,966,837),36089=>array(44,-66,959,818),36090=>array(58,-65,967,851),36091=>array(50,-65,951,833),36092=>array(41,-66,941,829),36093=>array(50,-73,960,847),36094=>array(113,-76,968,832),36095=>array(41,-72,960,786),36096=>array(68,-76,949,803),36097=>array(42,-61,967,836),36098=>array(41,-71,957,842),36099=>array(49,-62,965,831),36100=>array(61,-68,954,834),36101=>array(51,-70,954,846),36102=>array(37,-67,970,832),36103=>array(46,-71,954,829),36104=>array(34,-73,909,835),36105=>array(47,-71,957,781),36106=>array(60,-72,947,825),36107=>array(41,-70,944,813),36108=>array(36,-64,963,832),36109=>array(36,-74,948,834),36110=>array(47,-66,968,832),36111=>array(42,-62,961,834),36112=>array(47,-59,972,825),36113=>array(55,-66,969,849),36114=>array(70,-73,955,835),36115=>array(27,-65,966,836),36116=>array(49,-71,979,803),36117=>array(56,-73,963,837),36118=>array(47,-73,962,837),36119=>array(41,-73,945,825),36120=>array(26,-72,954,836),36121=>array(31,-71,967,828),36122=>array(30,-65,950,836),36123=>array(54,-70,974,849),36124=>array(55,-63,972,815),36125=>array(77,-58,885,796),36126=>array(65,-63,905,830),36127=>array(57,-65,934,838),36128=>array(73,-61,894,844),36129=>array(48,-61,906,780),36130=>array(42,-70,922,826),36131=>array(60,-66,915,826),36132=>array(61,-67,931,834),36133=>array(47,-74,945,834),36134=>array(32,-72,958,811),36135=>array(29,-63,917,839),36136=>array(25,-69,906,831),36137=>array(33,-70,956,800),36138=>array(33,-66,954,836),36139=>array(34,-65,980,835),36140=>array(32,-67,952,828),36141=>array(33,-64,903,831),36142=>array(28,-71,923,818),36143=>array(43,-69,914,791),36144=>array(48,-68,953,831),36145=>array(30,-59,928,831),36146=>array(70,-78,917,820),36147=>array(61,-71,909,826),36148=>array(42,-67,938,832),36149=>array(41,-65,907,830),36150=>array(31,-58,968,784),36151=>array(47,-65,927,835),36152=>array(83,-66,900,831),36153=>array(60,-63,913,830),36154=>array(24,-72,868,832),36155=>array(35,-69,941,824),36156=>array(31,-56,939,838),36157=>array(39,-86,948,818),36158=>array(47,-71,913,782),36159=>array(33,-69,944,832),36160=>array(60,-84,929,816),36161=>array(30,-59,917,841),36162=>array(33,-64,960,837),36163=>array(38,-68,921,837),36164=>array(71,-70,939,829),36165=>array(39,-79,956,827),36166=>array(31,-64,953,782),36167=>array(39,-69,972,826),36168=>array(39,-70,942,784),36169=>array(34,-70,942,823),36170=>array(39,-69,953,848),36171=>array(37,-69,955,834),36172=>array(39,-69,939,834),36173=>array(76,-70,886,824),36174=>array(43,-58,956,835),36175=>array(84,-54,912,841),36176=>array(39,-69,901,785),36177=>array(43,-66,1003,830),36178=>array(39,-69,911,794),36179=>array(40,-69,930,849),36180=>array(39,-69,939,843),36181=>array(39,-70,957,829),36182=>array(40,-63,943,834),36183=>array(39,-74,900,778),36184=>array(43,-69,915,827),36185=>array(39,-68,939,831),36186=>array(41,-65,951,849),36187=>array(38,-75,961,840),36188=>array(99,-67,936,828),36189=>array(31,-69,906,772),36190=>array(35,-75,930,836),36191=>array(46,-75,954,834),36192=>array(32,-71,895,827),36193=>array(22,-75,931,831),36194=>array(35,-69,949,842),36195=>array(55,-69,943,835),36196=>array(67,-75,930,830),36197=>array(31,-71,961,839),36198=>array(56,-63,984,848),36199=>array(48,-68,957,829),36200=>array(40,-67,966,825),36201=>array(28,-67,961,826),36202=>array(25,-80,971,825),36203=>array(51,-65,970,836),36204=>array(36,-76,962,823),36205=>array(25,-70,958,832),36206=>array(35,-79,975,833),36207=>array(32,-71,960,837),36208=>array(46,-74,960,830),36209=>array(69,-66,950,830),36210=>array(36,-62,963,833),36211=>array(50,-65,966,831),36212=>array(41,-73,967,829),36213=>array(23,-60,942,823),36214=>array(27,-72,965,831),36215=>array(35,-74,945,834),36216=>array(46,-71,973,825),36217=>array(39,-66,960,829),36218=>array(46,-71,973,824),36219=>array(46,-72,974,835),36220=>array(33,-64,968,835),36221=>array(44,-74,972,830),36222=>array(46,-72,974,835),36223=>array(46,-72,978,835),36224=>array(47,-71,970,832),36225=>array(18,-62,960,857),36226=>array(46,-72,974,835),36227=>array(46,-72,974,835),36228=>array(38,-65,975,833),36229=>array(33,-68,959,833),36230=>array(46,-72,978,835),36231=>array(46,-72,974,835),36232=>array(46,-72,974,835),36233=>array(40,-65,968,826),36234=>array(42,-74,962,832),36235=>array(26,-72,938,824),36236=>array(30,-61,967,836),36237=>array(39,-64,977,830),36238=>array(35,-68,978,832),36239=>array(36,-65,981,820),36240=>array(28,-61,973,828),36241=>array(42,-64,973,848),36242=>array(27,-65,965,826),36243=>array(28,-61,981,826),36244=>array(39,-68,976,831),36245=>array(46,-69,966,829),36246=>array(57,-68,966,824),36247=>array(28,-61,965,826),36248=>array(28,-61,965,826),36249=>array(41,-75,959,830),36250=>array(28,-61,965,826),36251=>array(36,-71,969,824),36252=>array(35,-68,970,833),36253=>array(46,-72,974,835),36254=>array(46,-72,974,835),36255=>array(58,-53,973,841),36256=>array(39,-71,977,824),36257=>array(41,-68,971,823),36258=>array(34,-64,960,835),36259=>array(31,-54,960,835),36260=>array(46,-72,974,836),36261=>array(37,-60,968,835),36262=>array(45,-53,974,845),36263=>array(37,-71,981,818),36264=>array(56,-71,966,834),36265=>array(46,-72,974,835),36266=>array(39,-57,979,833),36267=>array(32,-71,984,825),36268=>array(41,-64,983,830),36269=>array(33,-62,984,827),36270=>array(26,-67,975,829),36271=>array(33,-68,970,828),36272=>array(31,-72,979,835),36273=>array(22,-69,937,817),36274=>array(42,-65,970,832),36275=>array(55,-73,970,762),36276=>array(30,-74,968,786),36277=>array(53,-54,896,841),36278=>array(64,-65,967,790),36279=>array(48,-37,974,830),36280=>array(45,-73,940,761),36281=>array(57,-72,965,827),36282=>array(45,-72,974,829),36283=>array(45,-72,967,837),36284=>array(54,-76,947,783),36285=>array(45,-69,959,849),36286=>array(45,-24,954,822),36287=>array(35,-71,971,788),36288=>array(45,-65,870,788),36289=>array(56,-32,959,785),36290=>array(35,-53,954,841),36291=>array(39,-64,963,832),36292=>array(45,-34,953,814),36293=>array(47,-70,955,819),36294=>array(52,-68,972,837),36295=>array(61,-34,951,822),36296=>array(48,-69,960,839),36297=>array(45,-79,971,847),36298=>array(40,-61,967,836),36299=>array(21,-76,948,841),36300=>array(52,-59,975,844),36301=>array(55,-68,951,826),36302=>array(48,-27,950,839),36303=>array(46,-72,907,828),36304=>array(46,-59,964,822),36305=>array(45,-34,966,838),36306=>array(45,-62,965,788),36307=>array(47,-15,955,842),36308=>array(45,-52,921,846),36309=>array(41,-52,947,842),36310=>array(39,-53,947,786),36311=>array(41,-50,951,846),36312=>array(53,-70,956,825),36313=>array(59,-19,963,783),36314=>array(28,-67,919,781),36315=>array(53,-62,978,841),36316=>array(45,-72,954,790),36317=>array(31,-61,947,795),36318=>array(48,-62,939,817),36319=>array(46,-71,964,787),36320=>array(52,-73,975,823),36321=>array(47,-59,955,822),36322=>array(42,-63,913,836),36323=>array(40,-63,953,829),36324=>array(50,-65,983,846),36325=>array(46,-62,964,791),36326=>array(50,-70,977,829),36327=>array(43,-20,968,793),36328=>array(39,-64,962,841),36329=>array(44,-74,967,823),36330=>array(48,-65,965,852),36331=>array(29,-64,947,778),36332=>array(54,-23,958,829),36333=>array(40,-69,972,841),36334=>array(51,-33,956,779),36335=>array(29,-67,968,838),36336=>array(50,-73,954,829),36337=>array(40,-52,950,841),36338=>array(44,-54,963,858),36339=>array(41,-70,945,825),36340=>array(37,-68,952,789),36341=>array(40,-69,959,827),36342=>array(50,-49,982,788),36343=>array(52,-71,938,815),36344=>array(35,-64,929,808),36345=>array(42,-51,935,804),36346=>array(54,-64,979,794),36347=>array(43,-66,948,835),36348=>array(48,-55,916,800),36349=>array(48,-32,969,791),36350=>array(46,-72,974,827),36351=>array(51,-70,966,821),36352=>array(52,-73,970,781),36353=>array(46,-28,945,785),36354=>array(51,-70,961,783),36355=>array(51,-69,909,824),36356=>array(45,-64,955,830),36357=>array(44,-66,970,835),36358=>array(48,-72,970,827),36359=>array(51,-64,953,825),36360=>array(45,-54,960,841),36361=>array(58,-68,981,837),36362=>array(50,-64,897,800),36363=>array(80,-61,915,810),36364=>array(37,-61,917,828),36365=>array(47,-68,948,823),36366=>array(36,-54,969,797),36367=>array(53,-62,980,843),36368=>array(30,-55,945,841),36369=>array(55,-75,967,824),36370=>array(44,-72,965,829),36371=>array(45,-68,959,831),36372=>array(54,-62,965,838),36373=>array(44,-73,972,827),36374=>array(47,-61,972,837),36375=>array(52,-36,976,835),36376=>array(49,-63,916,837),36377=>array(51,-73,981,782),36378=>array(47,-68,984,836),36379=>array(44,-26,954,826),36380=>array(56,-71,982,823),36381=>array(43,-67,972,787),36382=>array(46,-69,952,785),36383=>array(28,-67,886,836),36384=>array(39,-76,966,843),36385=>array(48,-37,986,846),36386=>array(46,-58,907,794),36387=>array(48,-65,953,849),36388=>array(48,-69,954,840),36389=>array(38,-70,950,833),36390=>array(42,-62,965,844),36391=>array(41,-69,979,830),36392=>array(59,-65,975,837),36393=>array(48,-62,976,837),36394=>array(44,-57,969,834),36395=>array(45,-35,957,832),36396=>array(42,-68,921,823),36397=>array(53,-59,970,836),36398=>array(43,-65,949,845),36399=>array(38,-65,919,798),36400=>array(43,-64,962,832),36401=>array(49,-62,982,856),36402=>array(47,-67,950,840),36403=>array(39,-68,978,840),36404=>array(41,-56,918,801),36405=>array(45,-27,958,839),36406=>array(52,-55,987,803),36407=>array(72,-69,959,835),36408=>array(35,-26,953,824),36409=>array(53,-64,956,835),36410=>array(43,-73,946,805),36411=>array(72,-57,916,800),36412=>array(33,-79,963,778),36413=>array(46,-62,942,836),36414=>array(41,-65,932,787),36415=>array(32,-75,983,822),36416=>array(49,-65,975,830),36417=>array(48,-65,944,843),36418=>array(45,-61,984,799),36419=>array(72,-65,948,836),36420=>array(37,-67,946,826),36421=>array(39,-32,967,823),36422=>array(38,-65,954,800),36423=>array(34,-62,984,842),36424=>array(53,-62,937,835),36425=>array(30,-26,937,841),36426=>array(20,-61,967,842),36427=>array(49,-61,903,799),36428=>array(55,-64,982,866),36429=>array(34,-52,968,797),36430=>array(50,-79,961,833),36431=>array(34,-72,968,830),36432=>array(51,-62,986,846),36433=>array(35,-71,937,780),36434=>array(29,-66,914,818),36435=>array(47,-62,920,841),36436=>array(39,-54,972,839),36437=>array(34,-68,949,805),36438=>array(48,-70,965,834),36439=>array(49,-66,962,837),36440=>array(27,-61,966,802),36441=>array(55,-60,981,842),36442=>array(61,-37,960,816),36443=>array(50,-74,951,821),36444=>array(36,-52,915,857),36445=>array(43,-67,971,831),36446=>array(40,-82,959,828),36447=>array(39,-55,955,849),36448=>array(38,-60,958,835),36449=>array(36,-52,952,858),36450=>array(39,-52,948,855),36451=>array(47,-65,954,835),36452=>array(43,-65,979,831),36453=>array(45,-72,969,823),36454=>array(46,-74,905,836),36455=>array(59,-74,962,821),36456=>array(64,-65,971,837),36457=>array(33,-65,972,839),36458=>array(52,-81,965,825),36459=>array(29,-67,933,788),36460=>array(33,-26,969,836),36461=>array(44,-64,912,846),36462=>array(37,-43,974,813),36463=>array(31,-67,971,833),36464=>array(30,-66,939,802),36465=>array(59,-32,971,839),36466=>array(44,-72,970,834),36467=>array(46,-67,979,832),36468=>array(25,-68,956,828),36469=>array(33,-65,965,845),36470=>array(25,-70,965,788),36471=>array(37,-58,963,800),36472=>array(49,-70,974,827),36473=>array(44,-63,979,858),36474=>array(46,-63,962,842),36475=>array(34,-59,961,857),36476=>array(28,-64,963,832),36477=>array(39,-62,975,859),36478=>array(39,-73,973,837),36479=>array(39,-60,916,843),36480=>array(28,-68,951,802),36481=>array(31,-61,965,798),36482=>array(46,-68,977,836),36483=>array(36,-64,965,849),36484=>array(39,-57,960,843),36485=>array(57,-62,924,786),36486=>array(23,-67,976,837),36487=>array(36,-62,953,842),36488=>array(33,-72,982,841),36489=>array(44,-67,968,833),36490=>array(43,-58,958,839),36491=>array(32,-69,964,849),36492=>array(62,-72,961,833),36493=>array(35,-70,956,813),36494=>array(61,-71,958,783),36495=>array(50,-71,918,820),36496=>array(41,-63,974,852),36497=>array(32,-67,956,821),36498=>array(45,-52,961,856),36499=>array(39,-68,974,837),36500=>array(25,-67,941,848),36501=>array(36,-63,960,853),36502=>array(59,-68,915,835),36503=>array(36,-67,979,839),36504=>array(33,-65,967,838),36505=>array(37,-50,901,804),36506=>array(36,-66,973,815),36507=>array(36,-67,979,839),36508=>array(34,-75,927,824),36509=>array(37,-50,917,804),36510=>array(37,-65,985,847),36511=>array(39,-65,976,850),36512=>array(43,-67,960,829),36513=>array(30,-69,955,804),36514=>array(37,-50,910,805),36515=>array(50,-65,967,787),36516=>array(42,-64,956,831),36517=>array(33,-65,963,849),36518=>array(40,-75,975,829),36519=>array(42,-73,966,791),36520=>array(39,-68,956,841),36521=>array(41,-61,980,809),36522=>array(49,-59,964,837),36523=>array(74,-62,924,853),36524=>array(55,-60,904,839),36525=>array(40,-66,969,848),36526=>array(57,-61,968,846),36527=>array(47,-65,945,844),36528=>array(27,-53,969,851),36529=>array(56,-62,965,848),36530=>array(54,-62,976,843),36531=>array(53,-69,917,861),36532=>array(47,-68,972,844),36533=>array(49,-68,973,830),36534=>array(41,-68,965,830),36535=>array(41,-67,970,841),36536=>array(57,-68,956,830),36537=>array(53,-68,946,847),36538=>array(48,-62,936,851),36539=>array(45,-68,948,845),36540=>array(49,-68,975,830),36541=>array(35,-58,958,850),36542=>array(34,-62,969,843),36543=>array(45,-63,966,857),36544=>array(42,-60,964,853),36545=>array(45,-68,962,839),36546=>array(33,-70,969,829),36547=>array(53,-68,968,830),36548=>array(45,-68,977,845),36549=>array(26,-73,977,841),36550=>array(32,-58,946,848),36551=>array(53,-57,968,846),36552=>array(38,-61,948,848),36553=>array(38,-78,934,836),36554=>array(63,-71,935,832),36555=>array(54,-70,948,830),36556=>array(53,-74,957,831),36557=>array(91,-68,923,784),36558=>array(61,-67,913,819),36559=>array(52,-69,958,829),36560=>array(41,-69,958,827),36561=>array(61,-72,978,827),36562=>array(55,-68,951,832),36563=>array(64,-76,963,824),36564=>array(68,-67,917,830),36565=>array(65,-69,921,830),36566=>array(62,-69,961,827),36567=>array(63,-73,962,830),36568=>array(61,-65,957,835),36569=>array(50,-70,945,838),36570=>array(65,-69,977,838),36571=>array(60,-66,954,830),36572=>array(66,-70,918,827),36573=>array(46,-68,966,832),36574=>array(60,-70,961,836),36575=>array(62,-67,965,841),36576=>array(59,-64,949,827),36577=>array(61,-76,968,834),36578=>array(53,-69,964,827),36579=>array(61,-55,913,834),36580=>array(65,-70,950,827),36581=>array(60,-65,915,831),36582=>array(59,-69,956,832),36583=>array(57,-72,960,833),36584=>array(54,-69,965,845),36585=>array(68,-70,954,838),36586=>array(84,-75,924,835),36587=>array(51,-67,969,844),36588=>array(46,-64,966,855),36589=>array(43,-71,945,827),36590=>array(61,-80,968,829),36591=>array(57,-72,950,827),36592=>array(62,-50,940,835),36593=>array(58,-60,975,834),36594=>array(72,-76,929,833),36595=>array(72,-64,977,849),36596=>array(72,-64,962,839),36597=>array(63,-69,952,835),36598=>array(76,-67,970,829),36599=>array(57,-52,959,839),36600=>array(58,-76,913,831),36601=>array(57,-67,962,826),36602=>array(69,-67,918,832),36603=>array(54,-67,950,829),36604=>array(56,-67,979,829),36605=>array(52,-64,976,833),36606=>array(60,-67,968,836),36607=>array(55,-54,949,852),36608=>array(53,-56,948,836),36609=>array(56,-80,977,826),36610=>array(44,-69,961,829),36611=>array(59,-67,965,829),36612=>array(59,-69,970,829),36613=>array(47,-65,967,838),36614=>array(57,-75,960,836),36615=>array(62,-71,966,820),36616=>array(61,-63,959,838),36617=>array(63,-62,956,836),36618=>array(60,-64,954,831),36619=>array(28,-64,980,840),36620=>array(52,-72,939,831),36621=>array(58,-70,967,824),36622=>array(60,-69,937,826),36623=>array(65,-68,966,825),36624=>array(66,-70,973,824),36625=>array(60,-71,951,827),36626=>array(50,-67,967,830),36627=>array(58,-67,966,827),36628=>array(55,-73,948,833),36629=>array(57,-70,950,832),36630=>array(57,-70,900,822),36631=>array(54,-65,962,827),36632=>array(47,-57,966,835),36633=>array(46,-68,966,837),36634=>array(62,-70,971,834),36635=>array(52,-72,939,831),36636=>array(63,-71,940,835),36637=>array(41,-63,953,832),36638=>array(57,-65,924,831),36639=>array(60,-65,971,833),36640=>array(62,-71,978,823),36641=>array(77,-68,912,841),36642=>array(77,-65,956,849),36643=>array(62,-76,903,823),36644=>array(61,-70,953,832),36645=>array(54,-70,955,829),36646=>array(52,-62,954,831),36647=>array(57,-65,949,859),36648=>array(62,-65,930,846),36649=>array(55,-74,951,838),36650=>array(52,-71,971,868),36651=>array(52,-65,967,831),36652=>array(54,-57,970,849),36653=>array(65,-72,975,820),36654=>array(60,-68,977,826),36655=>array(62,-70,951,831),36656=>array(77,-65,959,831),36657=>array(47,-68,979,835),36658=>array(72,-64,957,835),36659=>array(47,-67,964,832),36660=>array(50,-72,951,833),36661=>array(60,-53,923,838),36662=>array(56,-66,947,852),36663=>array(65,-70,919,834),36664=>array(45,-70,960,849),36665=>array(60,-68,974,836),36666=>array(63,-71,940,833),36667=>array(46,-74,941,827),36668=>array(59,-70,959,823),36669=>array(42,-66,967,831),36670=>array(60,-71,964,831),36671=>array(66,-55,948,839),36672=>array(59,-70,959,823),36673=>array(52,-65,944,831),36674=>array(48,-68,968,836),36675=>array(66,-69,973,833),36676=>array(53,-62,949,837),36677=>array(50,-70,967,833),36678=>array(53,-68,958,835),36679=>array(58,-64,968,829),36680=>array(58,-70,974,828),36681=>array(56,-71,947,828),36682=>array(44,-72,943,837),36683=>array(55,-72,974,825),36684=>array(46,-66,946,831),36685=>array(42,-68,972,837),36686=>array(51,-61,964,841),36687=>array(63,-71,958,825),36688=>array(53,-69,969,826),36689=>array(55,-54,968,844),36690=>array(65,-72,959,829),36691=>array(60,-67,978,829),36692=>array(48,-67,954,833),36693=>array(61,-64,948,830),36694=>array(58,-68,962,829),36695=>array(50,-66,961,830),36696=>array(56,-70,984,831),36697=>array(50,-74,974,853),36698=>array(60,-62,971,828),36699=>array(69,-71,964,826),36700=>array(42,-65,970,831),36701=>array(46,-69,977,836),36702=>array(66,-73,958,829),36703=>array(63,-62,960,836),36704=>array(71,-68,929,824),36705=>array(32,-65,961,844),36706=>array(50,-65,970,831),36707=>array(45,-53,969,836),36708=>array(52,-67,956,832),36709=>array(55,-65,941,837),36710=>array(42,-61,956,833),36711=>array(69,-73,922,823),36712=>array(67,-78,940,828),36713=>array(63,-70,934,823),36714=>array(68,-70,977,838),36715=>array(63,-69,901,824),36716=>array(53,-66,935,826),36717=>array(52,-74,937,818),36718=>array(31,-55,951,835),36719=>array(73,-69,949,838),36720=>array(28,-57,939,837),36721=>array(52,-76,929,823),36722=>array(52,-74,933,818),36723=>array(44,-73,929,819),36724=>array(59,-74,903,821),36725=>array(63,-69,946,824),36726=>array(52,-74,962,826),36727=>array(25,-65,920,828),36728=>array(52,-74,952,840),36729=>array(41,-65,947,823),36730=>array(63,-68,901,824),36731=>array(51,-48,938,836),36732=>array(37,-75,936,833),36733=>array(58,-69,939,824),36734=>array(52,-74,930,818),36735=>array(31,-66,948,832),36736=>array(63,-68,960,838),36737=>array(44,-60,940,831),36738=>array(52,-67,950,836),36739=>array(54,-69,948,835),36740=>array(45,-69,937,827),36741=>array(52,-73,931,831),36742=>array(35,-57,925,833),36743=>array(43,-75,950,816),36744=>array(68,-70,932,821),36745=>array(42,-57,948,833),36746=>array(52,-74,942,818),36747=>array(63,-67,905,827),36748=>array(63,-68,966,849),36749=>array(43,-65,961,819),36750=>array(55,-73,922,833),36751=>array(55,-69,944,838),36752=>array(43,-74,923,818),36753=>array(56,-69,936,821),36754=>array(46,-69,959,821),36755=>array(61,-73,943,846),36756=>array(40,-65,914,829),36757=>array(41,-78,949,819),36758=>array(52,-73,931,838),36759=>array(52,-74,948,818),36760=>array(50,-65,951,842),36761=>array(46,-65,938,839),36762=>array(52,-68,947,831),36763=>array(77,-68,923,828),36764=>array(59,-62,945,837),36765=>array(29,-65,948,840),36766=>array(52,-55,953,832),36767=>array(36,-55,954,847),36768=>array(59,-67,945,839),36769=>array(33,-67,954,853),36770=>array(21,-58,954,853),36771=>array(33,-67,967,835),36772=>array(39,-82,974,853),36773=>array(42,-57,960,840),36774=>array(58,-79,932,829),36775=>array(32,-68,945,837),36776=>array(37,-71,949,831),36777=>array(53,-64,933,843),36778=>array(59,-51,947,857),36779=>array(40,-66,915,838),36780=>array(40,-79,945,838),36781=>array(46,-63,962,846),36782=>array(42,-81,959,834),36783=>array(61,-77,938,829),36784=>array(57,-63,963,785),36785=>array(33,-61,955,789),36786=>array(38,-78,963,834),36787=>array(44,-74,956,836),36788=>array(57,-77,968,785),36789=>array(46,-74,960,827),36790=>array(38,-57,938,814),36791=>array(50,-17,957,811),36792=>array(38,-57,938,814),36793=>array(33,-24,939,823),36794=>array(33,-24,939,804),36795=>array(50,-34,955,832),36796=>array(35,-54,965,820),36797=>array(44,-45,944,793),36798=>array(31,-35,940,825),36799=>array(44,-45,944,835),36800=>array(31,-53,952,817),36801=>array(50,-17,957,828),36802=>array(44,-45,944,793),36803=>array(31,-69,952,793),36804=>array(44,-45,944,832),36805=>array(39,-53,960,817),36806=>array(27,-56,957,841),36807=>array(36,-51,933,827),36808=>array(32,-41,938,798),36809=>array(55,-61,979,815),36810=>array(56,-53,940,781),36811=>array(43,-53,972,835),36812=>array(56,-53,940,782),36813=>array(33,-57,962,841),36814=>array(31,-53,952,833),36815=>array(46,-47,952,827),36816=>array(32,-46,944,800),36817=>array(31,-53,952,828),36818=>array(48,-63,970,829),36819=>array(45,-69,966,832),36820=>array(42,-52,960,822),36821=>array(36,-55,968,852),36822=>array(47,-66,979,827),36823=>array(66,-62,988,817),36824=>array(32,-33,927,812),36825=>array(36,-47,942,815),36826=>array(36,-47,942,801),36827=>array(24,-37,935,817),36828=>array(38,-49,941,809),36829=>array(41,-49,938,816),36830=>array(34,-44,944,810),36831=>array(41,-26,938,806),36832=>array(55,-64,973,844),36833=>array(63,-77,974,833),36834=>array(36,-47,942,808),36835=>array(43,-65,967,829),36836=>array(53,-62,968,842),36837=>array(36,-47,942,808),36838=>array(44,-45,944,827),36839=>array(56,-53,940,830),36840=>array(51,-71,975,841),36841=>array(43,-45,946,829),36842=>array(31,-53,952,831),36843=>array(40,-54,961,834),36844=>array(56,-53,940,820),36845=>array(31,-53,952,817),36846=>array(72,-69,979,840),36847=>array(36,-47,952,803),36848=>array(36,-44,959,828),36849=>array(36,-38,959,837),36850=>array(37,-56,951,815),36851=>array(41,-50,939,793),36852=>array(36,-47,965,813),36853=>array(49,-73,982,835),36854=>array(39,-76,975,837),36855=>array(31,-53,952,831),36856=>array(36,-47,965,840),36857=>array(36,-47,965,831),36858=>array(36,-47,965,813),36859=>array(31,-58,960,857),36860=>array(46,-74,972,827),36861=>array(31,-53,952,842),36862=>array(39,-70,974,832),36863=>array(46,-70,978,849),36864=>array(31,-53,952,818),36865=>array(31,-53,952,859),36866=>array(42,-65,935,859),36867=>array(31,-53,952,828),36868=>array(39,-65,982,851),36869=>array(36,-47,965,837),36870=>array(31,-53,952,838),36871=>array(31,-53,952,833),36872=>array(42,-65,948,858),36873=>array(28,-43,942,807),36874=>array(32,-48,940,807),36875=>array(46,-47,952,841),36876=>array(46,-78,968,826),36877=>array(51,-47,950,829),36878=>array(41,-53,962,801),36879=>array(33,-52,954,831),36880=>array(22,-53,953,817),36881=>array(36,-47,965,832),36882=>array(28,-30,930,839),36883=>array(37,-56,951,830),36884=>array(30,-55,951,849),36885=>array(36,-47,965,813),36886=>array(31,-47,960,830),36887=>array(39,-56,953,815),36888=>array(41,-56,959,838),36889=>array(44,-45,944,816),36890=>array(31,-53,952,817),36891=>array(50,-59,963,821),36892=>array(46,-73,980,823),36893=>array(24,-53,945,829),36894=>array(41,-47,970,813),36895=>array(31,-53,952,836),36896=>array(31,-42,946,830),36897=>array(36,-47,965,839),36898=>array(44,-45,944,839),36899=>array(37,-56,951,830),36900=>array(39,-71,980,822),36901=>array(37,-56,976,799),36902=>array(33,-46,939,787),36903=>array(50,-46,944,809),36904=>array(37,-56,951,836),36905=>array(49,-56,963,847),36906=>array(37,-56,951,824),36907=>array(37,-44,951,811),36908=>array(37,-48,951,836),36909=>array(45,-78,971,844),36910=>array(31,-53,952,829),36911=>array(43,-66,981,847),36912=>array(39,-66,963,834),36913=>array(37,-56,951,799),36914=>array(37,-60,951,831),36915=>array(37,-48,951,821),36916=>array(51,-75,976,829),36917=>array(36,-47,965,837),36918=>array(46,-47,952,833),36919=>array(45,-64,959,791),36920=>array(36,-54,957,841),36921=>array(26,-53,947,834),36922=>array(37,-56,951,835),36923=>array(39,-57,942,792),36924=>array(44,-45,944,799),36925=>array(43,-66,961,826),36926=>array(11,-73,952,836),36927=>array(43,-68,966,818),36928=>array(49,-56,963,845),36929=>array(31,-74,952,837),36930=>array(31,-53,952,848),36931=>array(49,-56,963,833),36932=>array(46,-68,960,835),36933=>array(37,-56,951,807),36934=>array(49,-64,963,845),36935=>array(36,-51,964,814),36936=>array(36,-55,964,812),36937=>array(31,-63,956,831),36938=>array(37,-56,960,842),36939=>array(37,-56,951,799),36940=>array(36,-51,964,826),36941=>array(33,-45,959,815),36942=>array(37,-56,951,799),36943=>array(31,-53,952,801),36944=>array(31,-53,952,801),36945=>array(31,-53,952,843),36946=>array(37,-56,950,821),36947=>array(31,-53,952,847),36948=>array(37,-56,951,834),36949=>array(37,-56,951,844),36950=>array(47,-56,955,810),36951=>array(49,-59,953,820),36952=>array(52,-56,960,832),36953=>array(37,-56,951,837),36954=>array(44,-69,963,841),36955=>array(36,-67,975,834),36956=>array(42,-41,961,823),36957=>array(37,-40,955,831),36958=>array(47,-56,955,828),36959=>array(37,-56,951,799),36960=>array(37,-44,953,835),36961=>array(37,-56,951,837),36962=>array(40,-65,961,829),36963=>array(25,-59,946,832),36964=>array(25,-59,946,817),36965=>array(37,-56,951,834),36966=>array(37,-56,951,807),36967=>array(84,-56,977,838),36968=>array(47,-56,955,834),36969=>array(37,-56,951,839),36970=>array(37,-56,952,835),36971=>array(49,-70,982,827),36972=>array(37,-64,977,831),36973=>array(31,-53,952,830),36974=>array(36,-47,939,835),36975=>array(50,-59,955,795),36976=>array(40,-54,976,843),36977=>array(37,-56,972,831),36978=>array(47,-56,961,815),36979=>array(56,-72,981,832),36980=>array(40,-72,973,836),36981=>array(35,-49,958,841),36982=>array(47,-56,965,838),36983=>array(37,-56,956,807),36984=>array(37,-56,951,799),36985=>array(38,-52,975,826),36986=>array(37,-56,951,835),36987=>array(41,-73,976,820),36988=>array(37,-56,968,838),36989=>array(47,-56,961,835),36990=>array(45,-66,972,840),36991=>array(31,-53,952,824),36992=>array(47,-51,961,837),36993=>array(47,-51,961,829),36994=>array(47,-56,961,841),36995=>array(52,-56,966,841),36996=>array(37,-56,951,808),36997=>array(44,-70,972,846),36998=>array(39,-69,980,826),36999=>array(36,-47,971,828),37000=>array(18,-65,964,846),37001=>array(47,-51,961,837),37002=>array(47,-51,961,838),37003=>array(40,-65,971,848),37004=>array(45,-56,961,825),37005=>array(38,-72,983,848),37006=>array(37,-68,971,820),37007=>array(52,-51,966,820),37008=>array(42,-65,973,813),37009=>array(124,-30,927,784),37010=>array(84,-70,942,782),37011=>array(30,-60,912,790),37012=>array(72,-64,934,788),37013=>array(75,-24,931,841),37014=>array(114,-60,912,819),37015=>array(69,-69,939,787),37016=>array(60,-63,938,794),37017=>array(49,-69,958,799),37018=>array(85,-69,939,818),37019=>array(73,-69,939,781),37020=>array(57,-69,939,844),37021=>array(38,-65,916,842),37022=>array(55,-66,956,827),37023=>array(44,-60,947,838),37024=>array(45,-71,953,786),37025=>array(68,-71,959,841),37026=>array(51,-70,945,785),37027=>array(57,-70,940,786),37028=>array(41,-69,955,816),37029=>array(56,-68,950,832),37030=>array(76,-75,937,830),37031=>array(52,-69,945,785),37032=>array(57,-65,938,833),37033=>array(73,-91,911,814),37034=>array(48,-65,941,785),37035=>array(36,-75,959,830),37036=>array(47,-61,912,837),37037=>array(61,-72,943,834),37038=>array(89,-72,911,823),37039=>array(36,-67,919,831),37040=>array(75,-69,954,833),37041=>array(55,-63,927,828),37042=>array(46,-71,956,827),37043=>array(56,-68,957,784),37044=>array(51,-59,947,797),37045=>array(51,-68,938,786),37046=>array(33,-74,939,811),37047=>array(73,-74,941,780),37048=>array(63,-70,939,828),37049=>array(39,-68,917,809),37050=>array(40,-67,923,804),37051=>array(44,-60,909,829),37052=>array(93,-58,942,788),37053=>array(56,-68,943,824),37054=>array(41,-54,954,840),37055=>array(62,-68,943,827),37056=>array(32,-65,942,839),37057=>array(48,-68,942,840),37058=>array(53,-74,958,835),37059=>array(57,-72,959,829),37060=>array(31,-64,945,850),37061=>array(61,-69,957,783),37062=>array(82,-68,963,824),37063=>array(37,-63,961,847),37064=>array(46,-53,947,860),37065=>array(51,-70,945,785),37066=>array(54,-64,936,822),37067=>array(133,-67,930,833),37068=>array(49,-48,955,826),37069=>array(50,-76,910,845),37070=>array(51,-65,930,832),37071=>array(39,-70,912,820),37072=>array(26,-64,915,835),37073=>array(35,-59,921,832),37074=>array(102,-31,968,826),37075=>array(63,-70,930,780),37076=>array(52,-71,958,813),37077=>array(31,-52,958,852),37078=>array(51,-65,949,788),37079=>array(47,-69,968,837),37080=>array(121,-66,931,787),37081=>array(62,-76,956,826),37082=>array(66,-70,956,781),37083=>array(38,-68,939,834),37084=>array(80,-74,966,827),37085=>array(59,-62,947,836),37086=>array(77,-65,910,833),37087=>array(19,-74,942,829),37088=>array(48,-71,950,777),37089=>array(41,-68,945,787),37090=>array(46,-68,955,785),37091=>array(59,-70,944,823),37092=>array(40,-67,943,834),37093=>array(61,-68,954,786),37094=>array(62,-64,930,786),37095=>array(35,-69,916,783),37096=>array(59,-67,943,830),37097=>array(47,-70,952,836),37098=>array(52,-71,956,827),37099=>array(63,-69,967,847),37100=>array(73,-71,949,829),37101=>array(52,-58,941,837),37102=>array(33,-69,941,786),37103=>array(46,-70,962,831),37104=>array(46,-73,947,787),37105=>array(59,-69,938,827),37106=>array(46,-70,951,834),37107=>array(41,-70,949,828),37108=>array(49,-69,963,825),37109=>array(52,-69,942,831),37110=>array(59,-65,965,840),37111=>array(38,-70,947,833),37112=>array(43,-58,914,831),37113=>array(43,-70,954,786),37114=>array(36,-66,967,830),37115=>array(86,-69,960,783),37116=>array(60,-68,952,841),37117=>array(50,-67,949,835),37118=>array(80,-69,963,786),37119=>array(42,-69,966,785),37120=>array(44,-55,947,838),37121=>array(37,-74,951,826),37122=>array(62,-68,948,785),37123=>array(29,-68,954,843),37124=>array(57,-68,962,785),37125=>array(60,-53,947,848),37126=>array(71,-69,963,782),37127=>array(34,-70,959,838),37128=>array(33,-70,953,835),37129=>array(53,-70,938,839),37130=>array(53,-70,938,830),37131=>array(44,-69,951,826),37132=>array(23,-69,965,848),37133=>array(44,-75,949,783),37134=>array(25,-62,953,840),37135=>array(46,-71,948,802),37136=>array(62,-69,955,842),37137=>array(68,-68,949,785),37138=>array(53,-72,949,842),37139=>array(41,-66,949,841),37140=>array(37,-66,945,844),37141=>array(41,-70,938,831),37142=>array(45,-77,968,783),37143=>array(63,-67,951,837),37144=>array(40,-69,957,843),37145=>array(42,-70,933,783),37146=>array(47,-72,935,825),37147=>array(45,-69,953,835),37148=>array(51,-64,953,850),37149=>array(42,-68,940,785),37150=>array(52,-65,948,830),37151=>array(57,-70,943,824),37152=>array(58,-65,954,795),37153=>array(27,-69,945,838),37154=>array(37,-68,966,784),37155=>array(65,-69,940,838),37156=>array(47,-68,947,803),37157=>array(37,-66,946,844),37158=>array(24,-70,950,830),37159=>array(46,-65,951,832),37160=>array(101,-39,946,829),37161=>array(49,-73,950,781),37162=>array(49,-80,955,833),37163=>array(95,-55,942,853),37164=>array(48,-78,965,836),37165=>array(57,-77,956,839),37166=>array(46,-73,952,836),37167=>array(66,-67,947,849),37168=>array(62,-77,949,833),37169=>array(35,-70,953,836),37170=>array(49,-66,951,787),37171=>array(104,-67,949,787),37172=>array(40,-69,974,824),37173=>array(41,-68,960,797),37174=>array(18,-74,962,847),37175=>array(48,-71,943,830),37176=>array(59,-67,941,834),37177=>array(43,-70,960,793),37178=>array(34,-70,949,845),37179=>array(63,-75,958,829),37180=>array(25,-75,958,827),37181=>array(22,-75,978,858),37182=>array(48,-65,954,789),37183=>array(59,-67,958,832),37184=>array(42,-73,959,829),37185=>array(40,-79,954,836),37186=>array(44,-50,960,801),37187=>array(85,-68,956,796),37188=>array(40,-69,958,825),37189=>array(45,-65,956,837),37190=>array(47,-68,947,827),37191=>array(52,-62,962,844),37192=>array(30,-67,951,805),37193=>array(54,-63,946,779),37194=>array(59,-54,953,788),37195=>array(60,-67,950,840),37196=>array(64,-63,915,844),37197=>array(63,-67,945,790),37198=>array(62,-65,954,832),37199=>array(60,-54,961,825),37200=>array(59,-60,950,790),37201=>array(56,-45,966,798),37202=>array(47,-62,943,790),37203=>array(46,-72,966,849),37204=>array(40,-68,979,837),37205=>array(59,-54,957,809),37206=>array(66,-61,973,836),37207=>array(55,-53,916,808),37208=>array(56,-75,984,791),37209=>array(56,-72,955,826),37210=>array(55,-53,962,790),37211=>array(35,-68,969,787),37212=>array(45,-68,980,842),37213=>array(52,-61,943,782),37214=>array(54,-70,968,837),37215=>array(56,-70,943,816),37216=>array(55,-57,956,790),37217=>array(55,-53,959,836),37218=>array(50,-64,951,835),37219=>array(53,-65,955,830),37220=>array(55,-58,951,836),37221=>array(63,-65,977,828),37222=>array(46,-64,972,820),37223=>array(66,-61,965,849),37224=>array(69,-70,961,833),37225=>array(76,-65,919,839),37226=>array(51,-67,967,840),37227=>array(30,-68,958,820),37228=>array(66,-65,913,835),37229=>array(45,-68,956,834),37230=>array(55,-64,932,790),37231=>array(55,-71,953,816),37232=>array(53,-70,974,836),37233=>array(65,-62,922,837),37234=>array(50,-53,946,790),37235=>array(60,-68,960,825),37236=>array(55,-63,968,841),37237=>array(61,-71,949,830),37238=>array(59,-71,955,840),37239=>array(59,-61,924,829),37240=>array(40,-73,967,849),37241=>array(55,-64,952,830),37242=>array(55,-66,960,828),37243=>array(60,-68,973,835),37244=>array(25,-68,977,833),37245=>array(49,-64,920,771),37246=>array(50,-45,913,775),37247=>array(43,-60,939,841),37248=>array(55,-68,955,822),37249=>array(55,-73,963,831),37250=>array(58,-70,975,820),37251=>array(55,-55,971,831),37252=>array(55,-60,929,826),37253=>array(55,-67,952,838),37254=>array(59,-68,964,832),37255=>array(54,-64,960,831),37256=>array(55,-69,978,839),37257=>array(56,-71,951,835),37258=>array(51,-63,967,793),37259=>array(59,-72,949,818),37260=>array(58,-54,961,789),37261=>array(53,-65,966,787),37262=>array(49,-69,955,834),37263=>array(55,-66,951,825),37264=>array(68,-66,919,828),37265=>array(55,-68,966,790),37266=>array(66,-38,962,798),37267=>array(55,-53,963,830),37268=>array(48,-70,951,844),37269=>array(35,-68,949,845),37270=>array(40,-68,963,787),37271=>array(53,-64,968,834),37272=>array(45,-68,953,822),37273=>array(55,-69,964,824),37274=>array(47,-73,961,821),37275=>array(55,-53,968,821),37276=>array(59,-65,974,847),37277=>array(55,-53,952,829),37278=>array(55,-53,958,790),37279=>array(86,-63,921,831),37280=>array(55,-53,967,828),37281=>array(56,-69,948,838),37282=>array(51,-52,941,840),37283=>array(50,-67,954,844),37284=>array(53,-74,947,845),37285=>array(55,-67,963,799),37286=>array(60,-61,967,848),37287=>array(48,-53,957,790),37288=>array(55,-69,954,827),37289=>array(54,-53,961,848),37290=>array(48,-69,975,790),37291=>array(51,-71,945,784),37292=>array(63,-78,955,853),37293=>array(57,-72,981,823),37294=>array(54,-66,952,833),37295=>array(47,-58,959,836),37296=>array(60,-48,960,811),37297=>array(53,-62,977,846),37298=>array(46,-74,972,825),37299=>array(66,-70,962,784),37300=>array(51,-57,952,829),37301=>array(43,-65,970,828),37302=>array(51,-66,947,847),37303=>array(51,-62,965,838),37304=>array(51,-79,979,837),37305=>array(52,-55,944,803),37306=>array(53,-66,959,832),37307=>array(62,-64,961,835),37308=>array(49,-67,963,826),37309=>array(53,-48,939,810),37310=>array(47,-65,961,838),37311=>array(55,-66,961,837),37312=>array(62,-72,982,842),37313=>array(52,-75,964,833),37314=>array(59,-64,962,848),37315=>array(54,-72,964,790),37316=>array(55,-63,961,837),37317=>array(50,-65,981,795),37318=>array(50,-70,966,824),37319=>array(52,-68,956,829),37320=>array(42,-66,978,827),37321=>array(45,-66,907,842),37322=>array(47,-61,934,806),37323=>array(36,-70,951,821),37324=>array(52,-19,948,796),37325=>array(69,-34,947,831),37326=>array(64,-64,931,784),37327=>array(53,-30,947,789),37328=>array(29,-56,953,844),37329=>array(54,-21,960,856),37330=>array(39,-26,547,829),37331=>array(39,-30,959,829),37332=>array(35,-32,954,824),37333=>array(48,-64,944,828),37334=>array(39,-73,934,829),37335=>array(59,-62,909,831),37336=>array(45,-52,956,843),37337=>array(49,-65,958,833),37338=>array(42,-72,967,845),37339=>array(39,-66,927,834),37340=>array(66,-25,948,833),37341=>array(44,-67,950,831),37342=>array(39,-57,958,829),37343=>array(39,-71,989,829),37344=>array(39,-71,967,829),37345=>array(86,-21,916,833),37346=>array(58,-75,940,840),37347=>array(55,-61,921,841),37348=>array(48,-65,957,832),37349=>array(39,-72,982,829),37350=>array(54,-50,906,813),37351=>array(48,-62,896,837),37352=>array(42,-72,957,829),37353=>array(39,-67,959,831),37354=>array(45,-71,956,829),37355=>array(36,-69,955,826),37356=>array(39,-71,958,823),37357=>array(36,-18,955,824),37358=>array(42,-74,953,834),37359=>array(39,-26,930,833),37360=>array(39,-49,916,829),37361=>array(36,-60,963,835),37362=>array(48,-38,958,829),37363=>array(29,-29,961,827),37364=>array(39,-67,958,834),37365=>array(42,-67,965,830),37366=>array(39,-26,963,841),37367=>array(41,-17,953,827),37368=>array(48,-69,920,831),37369=>array(41,-68,950,830),37370=>array(39,-67,942,829),37371=>array(42,-56,964,843),37372=>array(37,-60,969,823),37373=>array(40,-64,967,834),37374=>array(54,-59,967,827),37375=>array(42,-61,959,847),37376=>array(36,-35,954,830),37377=>array(46,-64,948,835),37378=>array(42,-63,966,839),37379=>array(35,-72,957,834),37380=>array(49,-64,964,831),37381=>array(35,-73,894,841),37382=>array(41,-68,972,836),37383=>array(37,-58,966,840),37384=>array(34,-64,959,827),37385=>array(56,-68,914,823),37386=>array(44,-26,972,836),37387=>array(37,-62,954,840),37388=>array(46,-73,985,837),37389=>array(37,-52,965,839),37390=>array(61,-57,920,841),37391=>array(35,-72,898,823),37392=>array(40,-70,977,840),37393=>array(41,-62,971,831),37394=>array(40,-68,979,840),37395=>array(37,-22,958,840),37396=>array(35,-60,973,829),37397=>array(41,-30,951,833),37398=>array(32,-70,976,832),37399=>array(38,-60,966,838),37400=>array(44,-68,973,841),37401=>array(40,-70,990,834),37402=>array(38,-69,962,831),37403=>array(37,-52,949,840),37404=>array(38,-63,964,836),37405=>array(44,-71,954,840),37406=>array(65,-57,923,839),37407=>array(51,-66,896,840),37408=>array(37,-65,964,840),37409=>array(37,-66,891,840),37410=>array(31,-72,980,832),37411=>array(51,-65,944,830),37412=>array(39,-71,909,827),37413=>array(44,-67,976,826),37414=>array(46,-69,951,833),37415=>array(44,-66,964,841),37416=>array(37,-51,949,840),37417=>array(37,-66,928,840),37418=>array(45,-71,970,827),37419=>array(37,-63,961,842),37420=>array(37,-66,981,840),37421=>array(37,-21,968,823),37422=>array(43,-60,953,833),37423=>array(37,-66,922,842),37424=>array(35,-64,954,846),37425=>array(31,-57,964,839),37426=>array(29,-72,976,839),37427=>array(35,-61,957,833),37428=>array(35,-65,975,846),37429=>array(37,-62,962,840),37430=>array(46,-69,961,831),37431=>array(38,-65,948,833),37432=>array(47,-66,975,833),37433=>array(32,-67,972,839),37434=>array(47,-14,950,831),37435=>array(37,-47,912,843),37436=>array(37,-65,948,844),37437=>array(39,-68,944,837),37438=>array(64,-70,912,828),37439=>array(42,-42,918,827),37440=>array(56,-67,914,823),37441=>array(57,-72,971,850),37442=>array(56,-68,970,833),37443=>array(56,-67,967,828),37444=>array(27,-59,974,841),37445=>array(42,-17,953,826),37446=>array(44,-73,950,829),37447=>array(56,-29,943,830),37448=>array(24,-30,957,829),37449=>array(35,-70,981,829),37450=>array(35,-71,920,830),37451=>array(33,-45,964,834),37452=>array(28,-70,981,831),37453=>array(32,-78,967,837),37454=>array(35,-30,954,834),37455=>array(27,-20,947,834),37456=>array(35,-71,950,838),37457=>array(70,-68,919,845),37458=>array(38,-29,952,833),37459=>array(31,-73,948,834),37460=>array(37,-29,953,828),37461=>array(37,-29,953,828),37462=>array(39,-78,986,840),37463=>array(37,-68,958,833),37464=>array(56,-62,932,829),37465=>array(56,-68,948,823),37466=>array(59,-74,912,837),37467=>array(51,-67,959,823),37468=>array(56,-64,962,837),37469=>array(56,-22,955,835),37470=>array(40,-62,966,829),37471=>array(56,-27,971,823),37472=>array(29,-74,976,830),37473=>array(44,-72,953,834),37474=>array(31,-73,980,831),37475=>array(39,-54,953,837),37476=>array(45,-59,919,834),37477=>array(31,-58,959,838),37478=>array(41,-18,954,832),37479=>array(36,-58,957,828),37480=>array(56,-58,934,836),37481=>array(56,-28,979,844),37482=>array(56,-22,954,830),37483=>array(46,-57,937,831),37484=>array(63,-69,913,831),37485=>array(38,-12,959,830),37486=>array(55,-62,913,838),37487=>array(34,-69,967,837),37488=>array(48,-71,908,838),37489=>array(37,-66,948,823),37490=>array(39,-70,953,844),37491=>array(36,-59,964,824),37492=>array(28,-17,947,835),37493=>array(41,-42,983,832),37494=>array(39,-53,907,847),37495=>array(35,-71,948,837),37496=>array(31,-63,973,840),37497=>array(44,-69,941,831),37498=>array(30,-64,959,833),37499=>array(34,-67,966,824),37500=>array(37,-59,962,854),37501=>array(53,-65,963,835),37502=>array(31,-71,969,830),37503=>array(41,-67,974,847),37504=>array(44,-56,968,827),37505=>array(56,-60,909,836),37506=>array(52,-69,903,835),37507=>array(39,-64,960,835),37508=>array(39,-64,914,844),37509=>array(50,-70,921,829),37510=>array(51,-70,949,833),37511=>array(59,-68,980,835),37512=>array(47,-31,956,837),37513=>array(34,-61,955,841),37514=>array(50,-71,957,836),37515=>array(43,-68,952,835),37516=>array(46,-69,955,841),37517=>array(34,-20,947,835),37518=>array(32,-14,968,800),37519=>array(26,-68,974,823),37520=>array(43,-32,967,828),37521=>array(33,-70,959,837),37522=>array(56,-69,956,823),37523=>array(35,-24,973,830),37524=>array(50,-70,955,834),37525=>array(33,-73,970,830),37526=>array(30,-64,967,839),37527=>array(47,-73,952,837),37528=>array(64,-69,903,840),37529=>array(54,-67,967,834),37530=>array(41,-66,964,838),37531=>array(37,-63,959,837),37532=>array(38,-73,961,832),37533=>array(35,-76,964,832),37534=>array(41,-22,964,848),37535=>array(47,-67,930,837),37536=>array(31,-36,958,831),37537=>array(43,-73,945,831),37538=>array(58,-70,969,832),37539=>array(54,-63,927,837),37540=>array(54,-73,964,832),37541=>array(37,-65,963,844),37542=>array(48,-52,921,834),37543=>array(52,-71,961,835),37544=>array(35,-63,951,848),37545=>array(42,-51,955,829),37546=>array(46,-65,954,837),37547=>array(51,-32,971,837),37548=>array(34,-63,956,832),37549=>array(56,-70,933,826),37550=>array(35,-27,960,825),37551=>array(56,-67,952,824),37552=>array(51,-66,949,835),37553=>array(30,-70,942,841),37554=>array(30,-52,958,841),37555=>array(39,-69,959,833),37556=>array(31,-37,987,838),37557=>array(42,-71,969,846),37558=>array(47,-62,975,835),37559=>array(50,-67,942,833),37560=>array(30,-67,953,827),37561=>array(35,-70,958,838),37562=>array(27,-47,987,832),37563=>array(60,-67,925,836),37564=>array(39,-23,955,835),37565=>array(28,-54,981,831),37566=>array(58,-70,969,832),37567=>array(29,-64,895,840),37568=>array(28,-30,953,839),37569=>array(53,-69,917,819),37570=>array(38,-75,975,832),37571=>array(50,-63,978,846),37572=>array(47,-74,984,835),37573=>array(46,-70,951,834),37574=>array(39,-25,964,835),37575=>array(48,-67,961,833),37576=>array(36,-25,967,838),37577=>array(43,-69,975,841),37578=>array(34,-68,984,840),37579=>array(48,-46,977,854),37580=>array(45,-69,968,834),37581=>array(35,-73,957,835),37582=>array(28,-66,970,844),37583=>array(42,-70,980,835),37584=>array(42,-65,957,834),37585=>array(32,-76,968,841),37586=>array(41,-61,980,841),37587=>array(42,-70,916,833),37588=>array(28,-67,967,848),37589=>array(57,-40,982,825),37590=>array(33,-74,959,838),37591=>array(36,-64,903,844),37592=>array(43,-72,978,823),37593=>array(35,-48,947,839),37594=>array(34,-25,966,842),37595=>array(41,-68,931,832),37596=>array(33,-73,970,838),37597=>array(37,-70,954,840),37598=>array(32,-30,954,833),37599=>array(38,-66,979,833),37600=>array(31,-78,971,846),37601=>array(37,-70,981,840),37602=>array(33,-56,973,838),37603=>array(42,-72,958,829),37604=>array(45,-70,919,834),37605=>array(33,-16,950,838),37606=>array(42,-68,930,829),37607=>array(36,-72,969,838),37608=>array(36,-64,955,836),37609=>array(39,-21,954,830),37610=>array(43,-70,951,835),37611=>array(19,-25,951,835),37612=>array(34,-24,966,833),37613=>array(39,-70,959,834),37614=>array(43,-70,964,840),37615=>array(46,-65,957,831),37616=>array(40,-27,954,836),37617=>array(35,-60,968,831),37618=>array(39,-64,954,835),37619=>array(37,-60,945,838),37620=>array(43,-66,954,838),37621=>array(39,-64,960,835),37622=>array(33,-70,973,843),37623=>array(26,-76,968,826),37624=>array(39,-68,945,830),37625=>array(25,-71,962,835),37626=>array(35,-67,965,831),37627=>array(37,-27,971,782),37628=>array(62,-68,908,824),37629=>array(33,-62,965,838),37630=>array(25,-70,914,836),37631=>array(28,-69,920,833),37632=>array(29,-64,982,841),37633=>array(37,-65,977,833),37634=>array(42,-57,971,842),37635=>array(34,-42,966,836),37636=>array(57,-64,968,841),37637=>array(49,-46,946,832),37638=>array(38,-64,953,842),37639=>array(38,-70,947,841),37640=>array(30,-41,978,839),37641=>array(40,-71,967,837),37642=>array(40,-64,960,845),37643=>array(21,-80,903,821),37644=>array(25,-70,941,836),37645=>array(37,-69,959,842),37646=>array(36,-68,905,836),37647=>array(29,-24,962,833),37648=>array(48,-68,954,832),37649=>array(33,-69,972,842),37650=>array(30,-66,956,826),37651=>array(28,-66,964,837),37652=>array(33,-53,975,841),37653=>array(53,-42,961,837),37654=>array(44,-32,981,836),37655=>array(30,-62,958,842),37656=>array(43,-32,952,832),37657=>array(44,-65,934,844),37658=>array(27,-64,957,832),37659=>array(36,-64,994,845),37660=>array(27,-27,971,840),37661=>array(24,-54,969,838),37662=>array(30,-58,951,846),37663=>array(35,-59,968,843),37664=>array(41,-72,963,839),37665=>array(38,-65,952,837),37666=>array(48,-67,956,832),37667=>array(31,-61,962,835),37668=>array(46,-74,981,833),37669=>array(33,-68,954,843),37670=>array(68,-67,920,849),37671=>array(37,-48,923,860),37672=>array(42,-67,956,836),37673=>array(49,-64,907,838),37674=>array(37,-58,973,838),37675=>array(55,-60,917,824),37676=>array(57,-64,973,835),37677=>array(36,-75,905,840),37678=>array(58,-70,917,836),37679=>array(39,-64,955,836),37680=>array(39,-90,986,836),37681=>array(54,-62,948,844),37682=>array(39,-64,973,836),37683=>array(44,-32,956,824),37684=>array(29,-30,956,825),37685=>array(29,-65,962,833),37686=>array(29,-57,974,841),37687=>array(29,-70,983,835),37688=>array(33,-64,975,836),37689=>array(40,-65,956,836),37690=>array(40,-65,958,837),37691=>array(50,-64,962,846),37692=>array(37,-65,978,838),37693=>array(44,-72,981,833),37694=>array(31,-18,938,825),37695=>array(34,-67,951,834),37696=>array(42,-53,957,845),37697=>array(33,-72,961,833),37698=>array(34,-31,982,843),37699=>array(34,-29,961,842),37700=>array(38,-60,967,832),37701=>array(50,-57,962,831),37702=>array(50,-65,921,830),37703=>array(52,-62,979,844),37704=>array(33,-64,964,835),37705=>array(36,-71,978,828),37706=>array(18,-53,969,847),37707=>array(54,-67,914,834),37708=>array(54,-43,971,817),37709=>array(46,-78,969,833),37710=>array(42,-68,951,837),37711=>array(47,-70,959,832),37712=>array(46,-67,983,839),37713=>array(44,-72,981,835),37714=>array(41,-71,979,834),37715=>array(41,-67,954,834),37716=>array(44,-60,965,839),37717=>array(47,-76,964,824),37718=>array(43,-74,955,818),37719=>array(50,-67,943,843),37720=>array(49,-67,915,830),37721=>array(49,-43,973,817),37722=>array(39,-68,964,825),37723=>array(42,-69,971,830),37724=>array(42,-50,963,842),37725=>array(42,-70,944,842),37726=>array(49,-81,978,832),37727=>array(49,-28,954,832),37728=>array(39,-21,957,851),37729=>array(32,-71,970,829),37730=>array(42,-65,948,842),37731=>array(47,-71,950,829),37732=>array(43,-64,960,844),37733=>array(48,-62,976,841),37734=>array(38,-69,957,841),37735=>array(52,-65,926,836),37736=>array(39,-58,955,835),37737=>array(37,-65,973,836),37738=>array(42,-23,981,842),37739=>array(43,-39,967,842),37740=>array(43,-73,974,833),37741=>array(39,-53,964,844),37742=>array(41,-63,969,840),37743=>array(41,-47,960,848),37744=>array(43,-67,981,844),37745=>array(35,-50,968,845),37746=>array(43,-52,963,843),37747=>array(39,-40,973,837),37748=>array(43,-63,954,843),37749=>array(38,-66,963,823),37750=>array(48,-32,965,823),37751=>array(36,-37,978,824),37752=>array(34,-71,923,833),37753=>array(45,-37,961,834),37754=>array(39,-64,950,838),37755=>array(57,-73,936,824),37756=>array(28,-60,963,842),37757=>array(36,-67,917,840),37758=>array(36,-30,959,842),37759=>array(36,-71,925,838),37760=>array(38,-67,976,837),37761=>array(38,-65,969,834),37762=>array(44,-74,968,837),37763=>array(35,-68,974,844),37764=>array(44,-75,969,842),37765=>array(26,-54,969,846),37766=>array(39,-73,951,833),37767=>array(44,-72,920,818),37768=>array(29,-49,956,848),37769=>array(35,-69,920,833),37770=>array(50,-67,925,847),37771=>array(44,-70,938,839),37772=>array(25,-66,970,847),37773=>array(34,-65,971,834),37774=>array(27,-69,978,842),37775=>array(33,-30,986,843),37776=>array(33,-58,957,835),37777=>array(34,-34,957,833),37778=>array(32,-70,970,826),37779=>array(44,-81,969,822),37780=>array(26,-51,963,842),37781=>array(39,-68,964,845),37782=>array(42,-70,970,837),37783=>array(41,-60,970,855),37784=>array(39,-67,954,826),37785=>array(33,-73,924,823),37786=>array(28,-73,965,838),37787=>array(40,-53,951,843),37788=>array(40,-50,976,846),37789=>array(40,-62,988,835),37790=>array(30,-50,960,845),37791=>array(34,-71,986,827),37792=>array(44,-37,953,834),37793=>array(33,-64,955,851),37794=>array(37,-66,950,839),37795=>array(39,-33,972,835),37796=>array(36,-61,974,836),37797=>array(40,-30,976,836),37798=>array(48,-67,925,830),37799=>array(37,-24,960,832),37800=>array(40,-65,965,840),37801=>array(47,-62,990,836),37802=>array(41,-72,975,835),37803=>array(44,-57,976,823),37804=>array(45,-70,936,832),37805=>array(37,-78,963,833),37806=>array(38,-69,952,836),37807=>array(32,-65,954,837),37808=>array(39,-38,961,824),37809=>array(33,-67,974,837),37810=>array(34,-63,980,838),37811=>array(35,-67,965,846),37812=>array(34,-42,980,836),37813=>array(32,-56,967,843),37814=>array(44,-64,929,818),37815=>array(44,-62,936,838),37816=>array(44,-66,950,837),37817=>array(37,-48,968,822),37818=>array(19,-73,981,837),37819=>array(48,-70,959,840),37820=>array(41,-70,942,835),37821=>array(39,-64,970,839),37822=>array(44,-38,968,818),37823=>array(49,-65,969,855),37824=>array(54,-67,926,834),37825=>array(43,-65,970,839),37826=>array(37,-35,957,828),37827=>array(31,-66,974,837),37828=>array(41,-67,962,838),37829=>array(37,-66,958,847),37830=>array(45,-66,955,830),37831=>array(28,-57,973,848),37832=>array(45,-63,969,835),37833=>array(48,-76,966,834),37834=>array(38,-30,979,846),37835=>array(31,-67,951,829),37836=>array(28,-57,978,844),37837=>array(34,-71,962,831),37838=>array(32,-71,962,831),37839=>array(40,-23,957,824),37840=>array(39,-69,960,841),37841=>array(35,-64,951,833),37842=>array(44,-67,983,841),37843=>array(44,-44,989,850),37844=>array(43,-71,965,840),37845=>array(36,-63,961,845),37846=>array(25,-66,967,837),37847=>array(34,-20,968,832),37848=>array(31,-65,953,833),37849=>array(47,-67,967,837),37850=>array(44,-70,982,835),37851=>array(44,-64,933,839),37852=>array(46,-23,956,827),37853=>array(39,-60,984,841),37854=>array(39,-70,956,839),37855=>array(40,-71,954,847),37856=>array(21,-52,989,843),37857=>array(34,-73,964,836),37858=>array(38,-64,965,824),37859=>array(28,-75,983,840),37860=>array(44,-64,956,835),37861=>array(44,-65,942,831),37862=>array(29,-55,979,847),37863=>array(48,-29,968,826),37864=>array(31,-21,962,836),37865=>array(34,-63,974,843),37866=>array(44,-69,978,828),37867=>array(44,-68,962,826),37868=>array(41,-68,942,835),37869=>array(29,-38,964,828),37870=>array(32,-66,966,848),37871=>array(39,-72,972,823),37872=>array(37,-74,930,841),37873=>array(35,-61,967,852),37874=>array(35,-67,949,848),37875=>array(32,-62,920,846),37876=>array(22,-65,970,841),37877=>array(35,-67,961,833),37878=>array(38,-67,981,836),37879=>array(32,-63,974,830),37880=>array(47,-42,982,825),37881=>array(43,-53,959,837),37882=>array(51,-68,993,848),37883=>array(66,-57,979,840),37884=>array(29,-68,979,837),37885=>array(23,-53,954,840),37886=>array(19,-76,969,834),37887=>array(39,-68,979,832),37888=>array(44,-80,954,834),37889=>array(24,-67,954,838),37890=>array(37,-71,946,839),37891=>array(37,-63,963,839),37892=>array(37,-70,971,839),37893=>array(60,-40,972,839),37894=>array(60,-30,972,846),37895=>array(35,-66,969,850),37896=>array(42,-62,964,841),37897=>array(42,-85,969,824),37898=>array(24,-67,954,838),37899=>array(27,-66,952,837),37900=>array(42,-67,988,825),37901=>array(47,-56,925,839),37902=>array(27,-66,975,844),37903=>array(44,-50,952,858),37904=>array(39,-67,973,846),37905=>array(41,-70,961,835),37906=>array(47,-65,952,833),37907=>array(29,-70,971,832),37908=>array(36,-53,943,839),37909=>array(27,-71,959,834),37910=>array(24,-69,963,836),37911=>array(29,-68,911,838),37912=>array(40,-31,956,839),37913=>array(32,-24,959,837),37914=>array(37,-48,968,839),37915=>array(41,-59,965,830),37916=>array(40,-34,958,847),37917=>array(48,-76,954,838),37918=>array(42,-59,962,839),37919=>array(37,-68,954,839),37920=>array(42,-64,954,844),37921=>array(44,-69,951,824),37922=>array(39,-30,972,826),37923=>array(47,-54,935,839),37924=>array(47,-56,938,834),37925=>array(37,-64,954,845),37926=>array(57,-73,905,839),37927=>array(57,-65,927,822),37928=>array(38,-71,966,835),37929=>array(45,-66,978,830),37930=>array(40,-71,954,833),37931=>array(35,-58,951,843),37932=>array(39,-69,959,829),37933=>array(42,-62,970,850),37934=>array(28,-79,969,847),37935=>array(37,-62,963,842),37936=>array(45,-68,973,834),37937=>array(50,-68,980,842),37938=>array(57,-58,930,827),37939=>array(52,-70,935,837),37940=>array(37,-69,972,845),37941=>array(44,-69,951,824),37942=>array(41,-67,976,837),37943=>array(46,-70,970,830),37944=>array(39,-64,951,840),37945=>array(44,-71,974,826),37946=>array(51,-65,945,838),37947=>array(39,-64,966,831),37948=>array(48,-75,967,830),37949=>array(45,-68,977,835),37950=>array(32,-17,951,838),37951=>array(36,-37,966,844),37952=>array(57,-68,979,835),37953=>array(37,-61,980,843),37954=>array(33,-70,963,836),37955=>array(44,-61,967,835),37956=>array(45,-65,960,835),37957=>array(43,-66,971,834),37958=>array(41,-68,969,826),37959=>array(37,-68,979,833),37960=>array(37,-65,974,829),37961=>array(52,-32,959,831),37962=>array(37,-64,970,835),37963=>array(53,-27,956,825),37964=>array(37,-64,977,849),37965=>array(60,-30,972,804),37966=>array(37,-27,959,839),37967=>array(46,-72,963,839),37968=>array(33,-70,961,831),37969=>array(30,-16,957,844),37970=>array(42,-34,974,841),37971=>array(33,-56,959,837),37972=>array(28,-69,977,845),37973=>array(46,-63,977,844),37974=>array(32,-67,968,839),37975=>array(36,-70,983,834),37976=>array(34,-63,933,830),37977=>array(17,-74,974,834),37978=>array(37,-60,981,845),37979=>array(46,-62,970,839),37980=>array(37,-72,954,839),37981=>array(31,-68,982,832),37982=>array(37,-62,964,842),37983=>array(37,-66,966,841),37984=>array(48,-68,982,840),37985=>array(37,-63,942,839),37986=>array(31,-58,960,847),37987=>array(35,-66,967,854),37988=>array(39,-68,969,827),37989=>array(34,-65,974,852),37990=>array(17,-57,989,839),37991=>array(34,-61,959,849),37992=>array(31,-65,973,837),37993=>array(30,-30,958,817),37994=>array(46,-72,957,829),37995=>array(32,-73,973,856),37996=>array(39,-64,964,839),37997=>array(49,-64,927,829),37998=>array(38,-65,964,831),37999=>array(27,-62,980,837),38000=>array(28,-68,969,845),38001=>array(38,-58,965,842),38002=>array(40,-67,974,854),38003=>array(31,-67,986,844),38004=>array(47,-67,951,828),38005=>array(36,-56,957,837),38006=>array(31,-67,975,834),38007=>array(32,-69,955,822),38008=>array(42,-27,969,827),38009=>array(36,-66,963,848),38010=>array(22,-65,967,839),38011=>array(34,-66,977,842),38012=>array(36,-70,960,829),38013=>array(48,-70,959,838),38014=>array(43,-29,967,845),38015=>array(52,-37,962,834),38016=>array(36,-72,974,833),38017=>array(35,-65,984,834),38018=>array(31,-71,970,832),38019=>array(49,-76,937,831),38020=>array(43,-65,961,846),38021=>array(249,-26,702,820),38022=>array(34,-37,943,826),38023=>array(39,-28,938,830),38024=>array(39,-69,933,830),38025=>array(39,-53,939,830),38026=>array(60,-64,890,828),38027=>array(39,-67,957,830),38028=>array(36,-65,926,822),38029=>array(39,-17,944,830),38030=>array(39,-75,942,830),38031=>array(35,-64,896,832),38032=>array(50,-64,931,827),38033=>array(39,-66,965,830),38034=>array(39,-74,942,830),38035=>array(39,-63,904,838),38036=>array(37,-59,902,830),38037=>array(39,-70,933,830),38038=>array(37,-66,926,830),38039=>array(35,-67,960,830),38040=>array(38,-63,948,830),38041=>array(28,-67,926,820),38042=>array(33,-72,952,828),38043=>array(39,-69,956,830),38044=>array(39,-30,937,830),38045=>array(39,-46,955,830),38046=>array(39,-51,958,830),38047=>array(39,-66,906,830),38048=>array(36,-60,914,830),38049=>array(39,-60,943,830),38050=>array(37,-58,913,830),38051=>array(39,-72,965,830),38052=>array(39,-72,960,837),38053=>array(39,-67,873,830),38054=>array(39,-69,963,836),38055=>array(39,-60,907,832),38056=>array(39,-52,918,839),38057=>array(39,-61,903,830),38058=>array(39,-68,963,845),38059=>array(39,-69,943,834),38060=>array(39,-69,966,830),38061=>array(39,-69,933,830),38062=>array(39,-28,935,826),38063=>array(39,-34,958,830),38064=>array(33,-28,934,830),38065=>array(38,-70,962,830),38066=>array(20,-22,950,823),38067=>array(39,-66,941,830),38068=>array(39,-67,940,831),38069=>array(25,-56,968,837),38070=>array(39,-59,946,830),38071=>array(39,-36,938,830),38072=>array(38,-70,927,833),38073=>array(39,-71,948,841),38074=>array(43,-64,949,826),38075=>array(39,-66,931,830),38076=>array(54,-70,894,826),38077=>array(41,-14,929,826),38078=>array(44,-69,897,826),38079=>array(29,-45,894,826),38080=>array(42,-73,888,821),38081=>array(36,-70,954,832),38082=>array(39,-71,903,843),38083=>array(37,-79,955,847),38084=>array(32,-60,955,832),38085=>array(43,-69,930,826),38086=>array(42,-70,915,834),38087=>array(43,-45,964,834),38088=>array(38,-66,937,841),38089=>array(24,-65,937,839),38090=>array(39,-33,940,846),38091=>array(33,-76,950,830),38092=>array(40,-62,937,827),38093=>array(46,-70,955,837),38094=>array(35,-60,955,826),38095=>array(30,-53,914,835),38096=>array(37,-66,949,829),38097=>array(39,-34,941,828),38098=>array(29,-66,937,826),38099=>array(39,-33,954,828),38100=>array(39,-45,957,826),38101=>array(37,-67,937,835),38102=>array(42,-72,945,827),38103=>array(31,-64,927,829),38104=>array(33,-72,935,818),38105=>array(36,-70,933,831),38106=>array(31,-18,947,829),38107=>array(55,-54,894,822),38108=>array(28,-72,917,823),38109=>array(49,-71,900,817),38110=>array(39,-68,908,816),38111=>array(45,-53,905,827),38112=>array(32,-19,948,824),38113=>array(50,-67,916,830),38114=>array(38,-66,950,837),38115=>array(40,-73,938,830),38116=>array(19,-71,951,833),38117=>array(49,-52,939,827),38118=>array(38,-64,958,834),38119=>array(9,-66,927,828),38120=>array(20,-27,936,816),38121=>array(20,-57,948,825),38122=>array(38,-69,958,845),38123=>array(19,-68,948,833),38124=>array(39,-69,945,821),38125=>array(44,-72,885,840),38126=>array(17,-62,919,825),38127=>array(48,-35,954,834),38128=>array(29,-65,952,835),38129=>array(27,-73,953,840),38130=>array(34,-68,938,847),38131=>array(19,-66,942,844),38132=>array(23,-61,891,822),38133=>array(33,-65,934,844),38134=>array(47,-60,971,825),38135=>array(28,-65,911,835),38136=>array(32,-64,923,832),38137=>array(12,-57,923,822),38138=>array(40,-62,934,832),38139=>array(27,-48,947,821),38140=>array(39,-61,970,823),38141=>array(19,-63,951,833),38142=>array(32,-56,943,825),38143=>array(31,-21,930,819),38144=>array(39,-69,923,831),38145=>array(37,-70,955,830),38146=>array(32,-27,952,833),38147=>array(39,-28,942,830),38148=>array(45,-76,916,833),38149=>array(34,-60,903,839),38150=>array(39,-67,941,827),38151=>array(37,-66,948,833),38152=>array(36,-68,963,827),38153=>array(22,-22,965,832),38154=>array(44,-71,944,819),38155=>array(29,-63,952,839),38156=>array(39,-73,943,831),38157=>array(40,-73,957,832),38158=>array(52,-61,896,830),38159=>array(45,-62,895,828),38160=>array(39,-74,942,835),38161=>array(61,-69,908,836),38162=>array(27,-66,961,843),38163=>array(19,-68,963,833),38164=>array(27,-70,914,833),38165=>array(30,-69,949,832),38166=>array(43,-72,950,828),38167=>array(35,-66,933,832),38168=>array(31,-69,943,837),38169=>array(50,-66,939,829),38170=>array(39,-69,939,827),38171=>array(24,-66,976,843),38172=>array(39,-63,970,839),38173=>array(30,-76,940,827),38174=>array(33,-67,967,833),38175=>array(40,-49,953,827),38176=>array(39,-63,909,826),38177=>array(28,-68,917,815),38178=>array(36,-73,900,827),38179=>array(43,-60,908,834),38180=>array(29,-30,932,833),38181=>array(35,-70,937,834),38182=>array(47,-68,904,846),38183=>array(29,-68,921,833),38184=>array(30,-71,961,824),38185=>array(42,-43,962,833),38186=>array(32,-28,953,822),38187=>array(38,-77,942,834),38188=>array(39,-62,952,842),38189=>array(42,-76,952,839),38190=>array(44,-67,955,826),38191=>array(43,-73,928,827),38192=>array(35,-36,939,821),38193=>array(34,-67,918,842),38194=>array(30,-64,959,832),38195=>array(29,-64,974,836),38196=>array(32,-64,959,837),38197=>array(40,-61,936,827),38198=>array(33,-34,957,827),38199=>array(30,-56,948,827),38200=>array(36,-66,943,841),38201=>array(38,-71,957,833),38202=>array(34,-30,959,838),38203=>array(37,-78,959,823),38204=>array(33,-71,966,832),38205=>array(43,-37,950,834),38206=>array(38,-68,964,842),38207=>array(31,-72,968,844),38208=>array(39,-82,957,846),38209=>array(39,-69,977,829),38210=>array(31,-67,953,824),38211=>array(29,-63,961,837),38212=>array(37,-70,932,826),38213=>array(39,-76,903,827),38214=>array(28,-80,957,810),38215=>array(21,-66,951,838),38216=>array(29,-53,951,843),38217=>array(19,-68,937,833),38218=>array(40,-69,946,828),38219=>array(29,-63,970,835),38220=>array(32,-73,945,833),38221=>array(37,-69,949,843),38222=>array(31,-75,968,842),38223=>array(35,-69,917,833),38224=>array(37,-72,919,848),38225=>array(37,-73,927,848),38226=>array(30,-27,951,832),38227=>array(22,-58,950,840),38228=>array(43,-60,941,826),38229=>array(29,-72,977,841),38230=>array(33,-66,956,833),38231=>array(36,-25,949,833),38232=>array(30,-62,973,833),38233=>array(42,-71,946,827),38234=>array(33,-74,919,833),38235=>array(33,-63,949,851),38236=>array(40,-70,958,836),38237=>array(31,-66,946,844),38238=>array(24,-68,965,839),38239=>array(31,-60,971,846),38240=>array(31,-61,973,831),38241=>array(34,-73,941,821),38242=>array(31,-77,970,830),38243=>array(35,-68,956,842),38244=>array(23,-65,961,833),38245=>array(43,-65,941,835),38246=>array(24,-72,959,836),38247=>array(31,-62,894,825),38248=>array(30,-66,943,843),38249=>array(50,-70,952,837),38250=>array(24,-58,958,822),38251=>array(43,-29,966,832),38252=>array(37,-66,968,832),38253=>array(51,-73,918,827),38254=>array(29,-76,974,833),38255=>array(29,-60,914,833),38256=>array(19,-80,953,844),38257=>array(24,-37,950,842),38258=>array(26,-74,959,842),38259=>array(27,-69,952,850),38260=>array(29,-62,964,842),38261=>array(29,-68,965,842),38262=>array(25,-80,971,843),38263=>array(69,-69,942,800),38264=>array(89,-16,892,784),38265=>array(57,-67,965,850),38266=>array(57,-72,962,831),38267=>array(58,-73,976,821),38268=>array(63,-73,921,785),38269=>array(60,-68,975,827),38270=>array(44,-65,986,786),38271=>array(60,-54,957,823),38272=>array(112,-71,871,782),38273=>array(132,-64,882,789),38274=>array(116,-67,890,788),38275=>array(125,-64,875,789),38276=>array(113,-73,936,803),38277=>array(125,-64,874,789),38278=>array(125,-70,888,782),38279=>array(132,-64,883,791),38280=>array(136,-75,895,783),38281=>array(109,-68,891,785),38282=>array(110,-74,891,779),38283=>array(110,-51,890,806),38284=>array(104,-61,909,792),38285=>array(109,-62,910,790),38286=>array(106,-53,883,797),38287=>array(109,-63,890,796),38288=>array(101,-70,903,782),38289=>array(129,-63,886,797),38290=>array(126,-55,899,801),38291=>array(125,-66,892,784),38292=>array(125,-65,902,790),38293=>array(125,-64,875,789),38294=>array(132,-64,882,789),38295=>array(108,-59,892,799),38296=>array(127,-60,883,796),38297=>array(132,-64,882,789),38298=>array(125,-64,875,789),38299=>array(128,-64,889,787),38300=>array(118,-69,898,782),38301=>array(109,-64,891,788),38302=>array(121,-68,900,783),38303=>array(112,-61,900,790),38304=>array(132,-64,882,789),38305=>array(109,-67,894,790),38306=>array(132,-64,882,789),38307=>array(113,-58,887,798),38308=>array(112,-62,888,789),38309=>array(125,-61,885,794),38310=>array(125,-64,875,789),38311=>array(110,-68,900,786),38312=>array(119,-71,894,791),38313=>array(112,-67,900,789),38314=>array(106,-68,896,786),38315=>array(113,-64,894,788),38316=>array(110,-64,890,788),38317=>array(117,-65,907,790),38318=>array(101,-59,899,791),38319=>array(125,-64,875,789),38320=>array(121,-61,895,787),38321=>array(112,-63,888,801),38322=>array(112,-54,888,802),38323=>array(125,-64,875,789),38324=>array(109,-64,891,788),38325=>array(113,-68,910,783),38326=>array(123,-70,912,789),38327=>array(32,-70,928,829),38328=>array(125,-64,875,789),38329=>array(106,-67,894,788),38330=>array(112,-70,916,796),38331=>array(120,-64,894,793),38332=>array(108,-65,894,797),38333=>array(110,-65,901,789),38334=>array(116,-64,906,790),38335=>array(124,-68,912,782),38336=>array(107,-69,893,810),38337=>array(125,-64,875,789),38338=>array(125,-64,875,789),38339=>array(130,-68,906,783),38340=>array(125,-64,875,799),38341=>array(110,-63,888,812),38342=>array(106,-59,890,796),38343=>array(108,-59,892,803),38344=>array(114,-65,909,790),38345=>array(101,-52,894,797),38346=>array(107,-67,897,783),38347=>array(113,-67,898,792),38348=>array(117,-68,904,788),38349=>array(123,-69,913,784),38350=>array(125,-64,875,789),38351=>array(125,-64,875,789),38352=>array(124,-69,914,789),38353=>array(110,-64,911,794),38354=>array(98,-52,895,805),38355=>array(128,-69,908,782),38356=>array(123,-71,910,785),38357=>array(115,-66,907,791),38358=>array(120,-56,895,794),38359=>array(100,-61,900,800),38360=>array(132,-64,882,789),38361=>array(119,-64,881,789),38362=>array(101,-56,893,794),38363=>array(114,-65,897,788),38364=>array(104,-70,904,792),38365=>array(102,-68,898,784),38366=>array(121,-68,916,783),38367=>array(116,-67,893,784),38368=>array(119,-69,917,790),38369=>array(114,-61,902,793),38370=>array(97,-70,902,785),38371=>array(116,-67,892,787),38372=>array(118,-68,915,789),38373=>array(116,-73,908,785),38374=>array(125,-64,875,789),38375=>array(125,-64,875,797),38376=>array(116,-57,874,823),38377=>array(115,-67,853,801),38378=>array(120,-57,879,821),38379=>array(100,-67,867,826),38380=>array(116,-57,874,823),38381=>array(106,-56,860,820),38382=>array(112,-64,864,802),38383=>array(98,-57,869,832),38384=>array(123,-59,883,815),38385=>array(109,-67,862,822),38386=>array(108,-65,873,818),38387=>array(104,-68,864,826),38388=>array(100,-60,859,820),38389=>array(107,-66,864,816),38390=>array(110,-69,865,826),38391=>array(121,-63,874,826),38392=>array(105,-63,872,823),38393=>array(109,-60,875,821),38394=>array(96,-61,870,819),38395=>array(111,-63,873,824),38396=>array(96,-64,867,823),38397=>array(119,-65,874,817),38398=>array(109,-61,867,828),38399=>array(109,-61,867,828),38400=>array(116,-59,889,824),38401=>array(104,-61,880,810),38402=>array(95,-60,866,830),38403=>array(100,-62,873,829),38404=>array(108,-63,862,817),38405=>array(100,-64,877,821),38406=>array(121,-64,879,823),38407=>array(111,-64,889,821),38408=>array(98,-69,871,818),38409=>array(99,-66,873,811),38410=>array(106,-70,872,822),38411=>array(109,-71,865,817),38412=>array(100,-67,868,826),38413=>array(103,-67,865,821),38414=>array(101,-63,873,815),38415=>array(109,-69,862,813),38416=>array(104,-59,858,830),38417=>array(106,-55,865,822),38418=>array(108,-64,874,828),38419=>array(108,-64,874,828),38420=>array(98,-56,876,831),38421=>array(91,-69,871,822),38422=>array(93,-66,870,821),38423=>array(103,-64,872,834),38424=>array(93,-66,870,821),38425=>array(97,-67,875,826),38426=>array(93,-64,868,830),38427=>array(112,-64,888,830),38428=>array(49,-69,942,854),38429=>array(358,-68,720,782),38430=>array(115,-69,926,824),38431=>array(101,-63,942,830),38432=>array(102,-63,960,789),38433=>array(104,-68,935,824),38434=>array(134,-63,964,791),38435=>array(109,-62,949,834),38436=>array(112,-61,969,832),38437=>array(112,-63,970,795),38438=>array(112,-69,959,820),38439=>array(112,-64,955,829),38440=>array(119,-68,959,793),38441=>array(119,-65,939,831),38442=>array(104,-67,964,795),38443=>array(86,-70,959,783),38444=>array(107,-52,959,858),38445=>array(109,-69,952,840),38446=>array(98,-68,935,788),38447=>array(119,-61,954,835),38448=>array(111,-58,960,829),38449=>array(121,-64,952,829),38450=>array(103,-77,953,827),38451=>array(99,-64,875,784),38452=>array(110,-69,883,788),38453=>array(80,-59,951,835),38454=>array(96,-63,946,837),38455=>array(96,-58,950,800),38456=>array(96,-68,963,837),38457=>array(110,-70,960,824),38458=>array(115,-69,965,832),38459=>array(97,-73,949,782),38460=>array(140,-63,964,845),38461=>array(135,-64,953,829),38462=>array(136,-77,975,850),38463=>array(93,-75,927,778),38464=>array(102,-71,946,824),38465=>array(102,-71,954,839),38466=>array(99,-68,948,836),38467=>array(116,-71,955,780),38468=>array(110,-79,945,842),38469=>array(89,-61,945,786),38470=>array(100,-50,924,838),38471=>array(98,-63,932,826),38472=>array(88,-63,930,826),38473=>array(96,-64,921,786),38474=>array(124,-73,942,834),38475=>array(99,-82,936,792),38476=>array(104,-69,941,785),38477=>array(101,-68,955,846),38478=>array(116,-70,966,823),38479=>array(111,-63,927,825),38480=>array(114,-61,945,795),38481=>array(110,-64,929,786),38482=>array(108,-77,956,845),38483=>array(103,-68,955,829),38484=>array(109,-63,960,849),38485=>array(100,-73,950,821),38486=>array(109,-69,972,843),38487=>array(109,-68,918,833),38488=>array(116,-69,958,783),38489=>array(81,-65,958,786),38490=>array(104,-69,962,833),38491=>array(95,-61,964,827),38492=>array(108,-74,958,829),38493=>array(89,-65,951,836),38494=>array(113,-62,959,838),38495=>array(123,-64,953,829),38496=>array(81,-67,951,839),38497=>array(116,-66,966,836),38498=>array(100,-70,959,831),38499=>array(102,-67,950,835),38500=>array(111,-65,956,853),38501=>array(108,-65,909,851),38502=>array(99,-66,952,831),38503=>array(99,-67,922,783),38504=>array(99,-67,929,783),38505=>array(100,-67,944,827),38506=>array(97,-67,939,835),38507=>array(115,-70,953,826),38508=>array(74,-75,963,795),38509=>array(116,-69,953,832),38510=>array(100,-69,954,835),38511=>array(110,-68,965,828),38512=>array(110,-68,964,843),38513=>array(104,-68,909,832),38514=>array(78,-70,935,810),38515=>array(104,-79,950,827),38516=>array(128,-69,974,845),38517=>array(95,-67,970,831),38518=>array(116,-62,917,837),38519=>array(119,-64,896,839),38520=>array(103,-58,951,833),38521=>array(113,-71,948,838),38522=>array(97,-66,958,846),38523=>array(119,-64,939,791),38524=>array(128,-71,967,830),38525=>array(89,-71,934,779),38526=>array(103,-77,967,783),38527=>array(93,-54,958,797),38528=>array(110,-58,956,828),38529=>array(99,-56,954,798),38530=>array(110,-68,964,851),38531=>array(103,-52,969,863),38532=>array(107,-61,972,791),38533=>array(99,-55,902,800),38534=>array(93,-60,959,848),38535=>array(97,-67,961,829),38536=>array(90,-60,964,800),38537=>array(114,-64,959,819),38538=>array(101,-71,950,837),38539=>array(92,-68,927,845),38540=>array(92,-68,943,844),38541=>array(92,-74,932,844),38542=>array(100,-60,958,832),38543=>array(99,-64,942,825),38544=>array(113,-62,952,828),38545=>array(116,-67,957,829),38546=>array(118,-68,963,843),38547=>array(118,-65,957,836),38548=>array(96,-56,932,801),38549=>array(92,-70,941,784),38550=>array(102,-70,928,839),38551=>array(97,-71,956,819),38552=>array(86,-64,957,804),38553=>array(109,-67,960,819),38554=>array(93,-69,954,835),38555=>array(93,-68,950,841),38556=>array(95,-65,941,830),38557=>array(93,-74,916,843),38558=>array(109,-72,983,832),38559=>array(83,-73,970,842),38560=>array(113,-62,965,838),38561=>array(113,-78,965,831),38562=>array(111,-65,973,823),38563=>array(100,-70,957,833),38564=>array(110,-66,960,836),38565=>array(110,-64,963,837),38566=>array(96,-68,937,845),38567=>array(85,-68,963,809),38568=>array(106,-68,967,838),38569=>array(98,-74,970,839),38570=>array(106,-66,962,855),38571=>array(106,-73,954,832),38572=>array(111,-68,947,781),38573=>array(106,-62,953,794),38574=>array(92,-57,952,864),38575=>array(101,-65,938,833),38576=>array(100,-75,934,786),38577=>array(112,-59,953,832),38578=>array(93,-69,920,826),38579=>array(38,-69,984,839),38580=>array(77,-66,936,830),38581=>array(85,-68,955,835),38582=>array(65,-57,958,833),38583=>array(47,-71,963,830),38584=>array(47,-71,963,828),38585=>array(31,-69,954,845),38586=>array(36,-69,937,847),38587=>array(32,-76,968,844),38588=>array(53,-69,947,840),38589=>array(34,-65,897,837),38590=>array(40,-61,932,824),38591=>array(53,-70,953,826),38592=>array(46,-73,948,833),38593=>array(39,-66,939,803),38594=>array(38,-68,951,831),38595=>array(49,-68,953,830),38596=>array(36,-68,953,827),38597=>array(48,-59,953,837),38598=>array(55,-67,962,831),38599=>array(31,-75,924,818),38600=>array(36,-67,952,834),38601=>array(55,-63,957,836),38602=>array(40,-67,956,842),38603=>array(40,-61,932,843),38604=>array(34,-71,956,833),38605=>array(49,-72,948,824),38606=>array(42,-59,956,837),38607=>array(40,-49,916,830),38608=>array(40,-78,928,833),38609=>array(39,-63,953,833),38610=>array(30,-70,949,841),38611=>array(28,-65,954,839),38612=>array(38,-70,955,827),38613=>array(31,-71,952,836),38614=>array(59,-65,954,828),38615=>array(53,-63,950,839),38616=>array(36,-71,975,826),38617=>array(42,-70,958,843),38618=>array(37,-62,946,833),38619=>array(43,-68,954,847),38620=>array(45,-61,955,833),38621=>array(53,-65,954,839),38622=>array(38,-68,956,842),38623=>array(46,-65,939,839),38624=>array(14,-59,925,822),38625=>array(44,-71,952,824),38626=>array(64,-73,957,834),38627=>array(43,-70,950,834),38628=>array(53,-82,914,809),38629=>array(32,-67,970,839),38630=>array(14,-59,965,822),38631=>array(20,-41,956,837),38632=>array(82,-65,943,778),38633=>array(60,-60,955,790),38634=>array(96,-69,888,800),38635=>array(75,-58,929,797),38636=>array(41,-63,948,784),38637=>array(69,-48,965,802),38638=>array(54,-34,964,796),38639=>array(59,-63,963,790),38640=>array(46,-62,971,822),38641=>array(46,-62,941,798),38642=>array(76,-71,930,805),38643=>array(30,-68,916,772),38644=>array(48,-16,941,781),38645=>array(45,-76,982,785),38646=>array(43,-63,961,810),38647=>array(105,-67,914,786),38648=>array(73,-67,938,785),38649=>array(41,-37,956,790),38650=>array(47,-64,926,787),38651=>array(85,-32,945,802),38652=>array(60,-67,936,781),38653=>array(66,-64,941,783),38654=>array(41,-68,941,782),38655=>array(55,-68,975,785),38656=>array(79,-70,930,787),38657=>array(32,-70,948,777),38658=>array(45,-62,981,792),38659=>array(68,-72,935,796),38660=>array(74,-52,916,800),38661=>array(78,-68,953,782),38662=>array(29,-72,947,811),38663=>array(35,-71,965,808),38664=>array(47,-64,951,791),38665=>array(70,-65,947,790),38666=>array(75,-28,930,778),38667=>array(73,-79,947,789),38668=>array(39,-59,899,787),38669=>array(56,-67,935,790),38670=>array(77,-67,943,790),38671=>array(61,-64,924,787),38672=>array(57,-67,974,787),38673=>array(67,-62,942,798),38674=>array(56,-67,970,827),38675=>array(39,-67,956,789),38676=>array(67,-54,939,798),38677=>array(55,-35,962,829),38678=>array(40,-67,968,789),38679=>array(81,-82,965,798),38680=>array(54,-67,913,788),38681=>array(34,-72,986,792),38682=>array(113,-53,949,791),38683=>array(68,-70,938,791),38684=>array(65,-68,909,785),38685=>array(96,-74,911,783),38686=>array(92,-59,967,813),38687=>array(46,-71,956,783),38688=>array(64,-72,968,783),38689=>array(43,-73,981,789),38690=>array(43,-72,969,824),38691=>array(58,-75,952,799),38692=>array(89,-55,902,802),38693=>array(54,-59,965,799),38694=>array(48,-67,967,787),38695=>array(51,-71,962,823),38696=>array(52,-60,939,800),38697=>array(90,-69,927,787),38698=>array(41,-64,924,797),38699=>array(82,-69,919,785),38700=>array(59,-69,941,783),38701=>array(52,-66,891,778),38702=>array(58,-49,955,780),38703=>array(51,-31,979,779),38704=>array(56,-65,964,796),38705=>array(60,-66,927,832),38706=>array(70,-62,965,817),38707=>array(88,-56,938,787),38708=>array(53,-16,975,829),38709=>array(63,-68,957,785),38710=>array(53,-53,959,785),38711=>array(83,-67,936,783),38712=>array(68,-70,900,815),38713=>array(31,-72,946,792),38714=>array(44,-63,964,819),38715=>array(57,-54,951,807),38716=>array(55,-64,971,846),38717=>array(60,-69,962,801),38718=>array(54,-56,949,794),38719=>array(43,-62,992,823),38720=>array(77,-70,948,808),38721=>array(94,-73,928,800),38722=>array(48,-73,941,790),38723=>array(33,-65,967,787),38724=>array(72,-64,928,799),38725=>array(48,-47,970,836),38726=>array(53,-56,949,829),38727=>array(65,-67,961,786),38728=>array(74,-28,929,779),38729=>array(55,-66,978,836),38730=>array(79,-51,934,795),38731=>array(61,-68,957,792),38732=>array(70,-79,939,825),38733=>array(42,-60,971,763),38734=>array(95,-58,971,763),38735=>array(43,-60,971,823),38736=>array(24,-50,981,809),38737=>array(104,-65,915,837),38738=>array(104,-65,915,837),38739=>array(51,-67,927,821),38740=>array(51,-67,938,852),38741=>array(38,-66,948,836),38742=>array(41,-66,952,840),38743=>array(55,-72,959,831),38744=>array(68,-63,968,841),38745=>array(70,-58,938,835),38746=>array(55,-74,976,832),38747=>array(53,-65,968,845),38748=>array(55,-72,950,829),38749=>array(48,-63,968,848),38750=>array(49,-65,944,826),38751=>array(49,-44,959,820),38752=>array(44,-73,925,838),38753=>array(36,-73,970,837),38754=>array(69,-77,924,784),38755=>array(69,-77,924,784),38756=>array(49,-26,963,849),38757=>array(31,-68,955,800),38758=>array(48,-57,957,797),38759=>array(33,-68,990,833),38760=>array(59,-69,949,807),38761=>array(73,-69,927,829),38762=>array(60,-69,951,825),38763=>array(57,-65,960,830),38764=>array(57,-69,953,831),38765=>array(54,-70,915,830),38766=>array(71,-50,919,851),38767=>array(51,-50,949,840),38768=>array(62,-68,969,828),38769=>array(62,-72,971,828),38770=>array(60,-68,968,833),38771=>array(60,-69,952,832),38772=>array(44,-67,969,824),38773=>array(60,-66,951,832),38774=>array(60,-65,956,835),38775=>array(63,-53,896,843),38776=>array(62,-74,971,837),38777=>array(48,-71,928,838),38778=>array(62,-64,986,830),38779=>array(65,-72,966,822),38780=>array(53,-64,955,829),38781=>array(63,-50,956,844),38782=>array(53,-70,947,824),38783=>array(65,-53,924,847),38784=>array(66,-71,917,831),38785=>array(69,-72,967,831),38786=>array(53,-71,967,823),38787=>array(61,-70,963,824),38788=>array(55,-67,961,824),38789=>array(42,-67,961,835),38790=>array(43,-70,957,823),38791=>array(53,-70,925,823),38792=>array(66,-73,978,843),38793=>array(66,-72,960,827),38794=>array(60,-69,953,829),38795=>array(53,-64,950,836),38796=>array(82,-58,966,830),38797=>array(59,-65,951,836),38798=>array(60,-71,970,830),38799=>array(53,-72,944,805),38800=>array(66,-68,940,834),38801=>array(51,-68,937,820),38802=>array(51,-66,949,826),38803=>array(51,-68,956,820),38804=>array(61,-70,969,838),38805=>array(49,-68,971,836),38806=>array(59,-74,959,836),38807=>array(39,-67,968,839),38808=>array(52,-70,943,835),38809=>array(62,-52,916,842),38810=>array(55,-50,955,859),38811=>array(73,-67,954,848),38812=>array(63,-68,961,829),38813=>array(64,-70,936,825),38814=>array(63,-73,959,830),38815=>array(73,-64,960,847),38816=>array(63,-65,919,847),38817=>array(62,-62,953,836),38818=>array(51,-68,976,828),38819=>array(45,-65,965,837),38820=>array(60,-67,954,836),38821=>array(56,-69,977,840),38822=>array(56,-66,968,841),38823=>array(56,-65,947,843),38824=>array(68,-69,922,827),38825=>array(46,-66,914,837),38826=>array(43,-68,952,841),38827=>array(66,-68,918,843),38828=>array(55,-72,967,829),38829=>array(47,-70,962,832),38830=>array(63,-68,975,826),38831=>array(53,-72,913,817),38832=>array(63,-69,951,817),38833=>array(53,-69,926,848),38834=>array(47,-79,952,821),38835=>array(51,-50,968,847),38836=>array(52,-70,948,820),38837=>array(47,-79,995,841),38838=>array(55,-48,943,855),38839=>array(54,-79,946,821),38840=>array(46,-69,952,825),38841=>array(51,-55,948,854),38842=>array(55,-70,956,824),38843=>array(65,-67,961,824),38844=>array(65,-68,970,833),38845=>array(65,-67,964,841),38846=>array(47,-67,948,836),38847=>array(54,-68,960,834),38848=>array(69,-65,961,831),38849=>array(62,-68,956,829),38850=>array(39,-65,950,842),38851=>array(55,-73,949,835),38852=>array(60,-73,967,823),38853=>array(53,-71,960,828),38854=>array(51,-76,968,834),38855=>array(66,-73,960,832),38856=>array(65,-64,981,839),38857=>array(68,-65,961,829),38858=>array(68,-58,946,808),38859=>array(72,-64,931,840),38860=>array(73,-62,901,844),38861=>array(59,-70,981,843),38862=>array(54,-71,981,841),38863=>array(39,-68,968,852),38864=>array(58,-69,985,847),38865=>array(23,-68,968,825),38866=>array(51,-70,943,834),38867=>array(54,-66,946,837),38868=>array(53,-75,973,836),38869=>array(68,-68,954,841),38870=>array(66,-67,977,840),38871=>array(59,-69,954,846),38872=>array(53,-67,976,840),38873=>array(39,-73,975,837),38874=>array(60,-66,949,834),38875=>array(68,-76,988,834),38876=>array(62,-70,951,842),38877=>array(57,-73,956,832),38878=>array(57,-70,959,839),38879=>array(53,-67,972,845),38880=>array(46,-73,952,831),38881=>array(62,-73,958,830),38882=>array(54,-73,966,830),38883=>array(65,-65,927,840),38884=>array(65,-65,981,840),38885=>array(62,-73,957,842),38886=>array(62,-73,894,820),38887=>array(61,-64,901,826),38888=>array(49,-80,948,840),38889=>array(47,-57,915,830),38890=>array(28,-66,945,809),38891=>array(50,-68,951,822),38892=>array(59,-76,901,817),38893=>array(65,-13,935,816),38894=>array(53,-24,947,823),38895=>array(49,-60,964,829),38896=>array(51,-35,956,820),38897=>array(49,-60,964,836),38898=>array(35,-29,966,826),38899=>array(72,-68,928,840),38900=>array(68,-74,932,842),38901=>array(66,-59,916,828),38902=>array(72,-64,914,818),38903=>array(56,-64,921,834),38904=>array(62,-72,972,834),38905=>array(65,-49,959,846),38906=>array(51,-72,973,835),38907=>array(66,-73,957,840),38908=>array(44,-56,951,841),38909=>array(50,-70,952,849),38910=>array(35,-70,941,825),38911=>array(63,-67,937,845),38912=>array(58,-74,976,824),38913=>array(79,-70,938,785),38914=>array(76,-68,950,791),38915=>array(126,-69,939,787),38916=>array(40,-79,961,826),38917=>array(48,-68,947,784),38918=>array(62,-76,960,801),38919=>array(54,-71,962,790),38920=>array(51,-71,946,817),38921=>array(40,-71,946,783),38922=>array(55,-71,961,788),38923=>array(29,-72,957,790),38924=>array(47,-64,964,790),38925=>array(45,-78,965,824),38926=>array(35,-68,970,833),38927=>array(49,-64,963,798),38928=>array(53,-70,959,781),38929=>array(42,-77,953,788),38930=>array(47,-66,957,822),38931=>array(53,-68,952,834),38932=>array(124,-68,952,788),38933=>array(128,-68,952,829),38934=>array(40,-60,966,844),38935=>array(32,-70,970,832),38936=>array(42,-68,955,839),38937=>array(38,-71,957,783),38938=>array(48,-64,966,792),38939=>array(42,-73,972,823),38940=>array(35,-70,962,831),38941=>array(53,-75,957,833),38942=>array(59,-53,968,856),38943=>array(37,-64,943,819),38944=>array(32,-68,967,836),38945=>array(62,-68,966,809),38946=>array(39,-68,956,801),38947=>array(95,-70,947,787),38948=>array(91,-70,963,787),38949=>array(96,-66,962,795),38950=>array(44,-65,961,844),38951=>array(107,-76,968,828),38952=>array(29,-79,971,782),38953=>array(44,-73,963,832),38954=>array(38,-68,961,832),38955=>array(36,-69,957,823),38956=>array(24,-61,959,830),38957=>array(52,-61,959,787),38958=>array(32,-78,975,802),38959=>array(32,-78,975,829),38960=>array(47,-71,967,840),38961=>array(48,-78,965,819),38962=>array(44,-79,964,793),38963=>array(36,-77,970,823),38964=>array(18,-82,959,826),38965=>array(25,-77,970,783),38966=>array(30,-61,959,814),38967=>array(38,-69,972,838),38968=>array(48,-72,959,789),38969=>array(35,-72,973,834),38970=>array(49,-65,965,824),38971=>array(45,-71,960,833),38972=>array(44,-72,973,829),38973=>array(35,-73,954,834),38974=>array(37,-68,948,826),38975=>array(33,-76,955,849),38976=>array(32,-73,951,836),38977=>array(38,-83,963,833),38978=>array(29,-73,964,833),38979=>array(52,-74,959,826),38980=>array(77,-71,962,788),38981=>array(42,-74,956,833),38982=>array(43,-68,964,788),38983=>array(34,-68,963,833),38984=>array(38,-82,959,826),38985=>array(44,-79,965,829),38986=>array(60,-78,953,840),38987=>array(35,-68,963,790),38988=>array(39,-60,956,787),38989=>array(41,-64,951,825),38990=>array(57,-63,959,794),38991=>array(57,-75,958,808),38992=>array(62,-81,971,783),38993=>array(38,-67,975,839),38994=>array(50,-73,964,788),38995=>array(53,-68,963,827),38996=>array(33,-65,961,830),38997=>array(45,-70,956,783),38998=>array(21,-77,967,831),38999=>array(47,-75,968,827),39000=>array(38,-57,962,796),39001=>array(45,-67,979,787),39002=>array(57,-78,964,834),39003=>array(43,-73,960,835),39004=>array(56,-72,970,829),39005=>array(69,-74,951,786),39006=>array(38,-67,960,828),39007=>array(40,-80,955,788),39008=>array(31,-73,960,784),39009=>array(39,-72,959,846),39010=>array(62,-65,973,830),39011=>array(33,-60,963,844),39012=>array(47,-48,963,850),39013=>array(46,-66,966,790),39014=>array(26,-48,963,840),39015=>array(41,-68,959,820),39016=>array(49,-70,959,808),39017=>array(36,-74,964,834),39018=>array(47,-68,978,831),39019=>array(56,-65,967,837),39020=>array(61,-67,952,788),39021=>array(47,-67,952,822),39022=>array(44,-64,965,844),39023=>array(43,-73,964,787),39024=>array(51,-64,958,843),39025=>array(28,-72,959,840),39026=>array(47,-66,964,847),39027=>array(35,-68,959,800),39028=>array(25,-62,961,844),39029=>array(78,-80,908,775),39030=>array(47,-60,930,783),39031=>array(88,-60,934,794),39032=>array(50,-66,937,774),39033=>array(37,-64,937,778),39034=>array(25,-61,940,822),39035=>array(30,-62,937,807),39036=>array(32,-68,933,772),39037=>array(31,-70,936,787),39038=>array(36,-61,953,787),39039=>array(59,-64,955,832),39040=>array(27,-68,935,814),39041=>array(35,-65,930,783),39042=>array(36,-65,936,783),39043=>array(27,-76,921,822),39044=>array(50,-65,936,779),39045=>array(36,-67,940,832),39046=>array(36,-60,940,830),39047=>array(18,-77,940,822),39048=>array(35,-59,943,783),39049=>array(55,-76,918,812),39050=>array(24,-61,933,830),39051=>array(33,-76,964,799),39052=>array(19,-69,915,830),39053=>array(21,-63,921,806),39054=>array(26,-70,942,827),39055=>array(32,-69,931,826),39056=>array(104,-70,929,778),39057=>array(51,-67,957,824),39058=>array(32,-71,950,802),39059=>array(47,-69,952,814),39060=>array(23,-76,933,822),39061=>array(18,-71,950,826),39062=>array(27,-70,942,827),39063=>array(22,-63,934,790),39064=>array(32,-63,941,788),39065=>array(117,-67,962,788),39066=>array(50,-73,937,778),39067=>array(52,-71,935,812),39068=>array(30,-68,940,832),39069=>array(31,-63,941,838),39070=>array(31,-70,921,784),39071=>array(50,-65,940,820),39072=>array(31,-70,940,827),39073=>array(29,-80,938,778),39074=>array(28,-72,937,782),39075=>array(32,-72,947,800),39076=>array(34,-81,964,861),39077=>array(61,-54,941,781),39078=>array(49,-62,927,832),39079=>array(22,-73,939,821),39080=>array(51,-68,967,783),39081=>array(43,-73,972,824),39082=>array(30,-73,965,797),39083=>array(24,-68,967,792),39084=>array(34,-68,954,787),39085=>array(32,-57,964,844),39086=>array(53,-63,967,850),39087=>array(32,-65,968,789),39088=>array(22,-57,955,825),39089=>array(37,-65,970,814),39090=>array(38,-71,967,820),39091=>array(41,-58,958,830),39092=>array(18,-57,944,822),39093=>array(41,-58,958,800),39094=>array(39,-62,959,800),39095=>array(33,-68,960,842),39096=>array(53,-64,963,809),39097=>array(17,-62,963,840),39098=>array(26,-61,967,791),39099=>array(42,-67,972,839),39100=>array(35,-65,970,829),39101=>array(44,-70,978,833),39102=>array(39,-75,970,781),39103=>array(40,-54,964,796),39104=>array(43,-73,961,833),39105=>array(36,-67,982,786),39106=>array(43,-60,970,798),39107=>array(26,-61,967,791),39108=>array(42,-74,970,784),39109=>array(43,-59,956,799),39110=>array(43,-68,980,832),39111=>array(43,-73,961,832),39112=>array(35,-64,966,820),39113=>array(31,-70,965,829),39114=>array(23,-62,974,791),39115=>array(31,-73,973,781),39116=>array(41,-65,974,829),39117=>array(26,-73,988,802),39118=>array(26,-63,942,790),39119=>array(20,-62,939,785),39120=>array(20,-62,939,804),39121=>array(16,-64,934,822),39122=>array(29,-67,936,812),39123=>array(8,-66,927,783),39124=>array(8,-65,939,783),39125=>array(20,-62,939,816),39126=>array(50,-58,972,819),39127=>array(20,-62,939,821),39128=>array(31,-60,963,789),39129=>array(43,-77,960,821),39130=>array(20,-70,931,817),39131=>array(64,-64,963,787),39132=>array(34,-69,967,824),39133=>array(55,-59,937,808),39134=>array(76,-59,936,770),39135=>array(43,-67,957,847),39136=>array(257,-34,731,839),39137=>array(48,-63,958,848),39138=>array(33,-54,962,839),39139=>array(41,-56,967,839),39140=>array(41,-73,936,839),39141=>array(28,-39,965,853),39142=>array(41,-50,966,839),39143=>array(42,-63,978,848),39144=>array(34,-76,939,822),39145=>array(40,-66,957,843),39146=>array(42,-31,949,838),39147=>array(40,-66,969,843),39148=>array(49,-81,957,840),39149=>array(42,-66,943,843),39150=>array(46,-68,957,844),39151=>array(34,-69,964,839),39152=>array(34,-64,951,843),39153=>array(40,-63,958,848),39154=>array(34,-64,969,839),39155=>array(46,-46,964,851),39156=>array(34,-55,956,842),39157=>array(34,-65,948,844),39158=>array(38,-56,960,842),39159=>array(34,-34,964,839),39160=>array(52,-63,958,848),39161=>array(40,-69,903,843),39162=>array(39,-84,979,824),39163=>array(36,-66,971,850),39164=>array(34,-68,906,839),39165=>array(36,-47,965,839),39166=>array(34,-70,944,839),39167=>array(39,-68,922,839),39168=>array(36,-74,985,839),39169=>array(36,-64,965,857),39170=>array(36,-52,954,857),39171=>array(40,-66,961,843),39172=>array(36,-65,948,857),39173=>array(34,-77,961,842),39174=>array(36,-70,960,857),39175=>array(31,-70,907,844),39176=>array(41,-54,964,852),39177=>array(40,-66,921,843),39178=>array(39,-70,964,843),39179=>array(39,-72,976,840),39180=>array(44,-69,958,841),39181=>array(46,-84,950,766),39182=>array(37,-64,982,844),39183=>array(38,-71,966,842),39184=>array(26,-64,974,840),39185=>array(43,-64,948,840),39186=>array(40,-66,959,843),39187=>array(34,-59,964,839),39188=>array(40,-66,944,843),39189=>array(36,-61,984,848),39190=>array(48,-44,953,846),39191=>array(42,-54,960,850),39192=>array(40,-66,971,843),39193=>array(36,-67,961,857),39194=>array(27,-64,956,855),39195=>array(32,-53,964,848),39196=>array(35,-64,980,828),39197=>array(40,-66,947,843),39198=>array(40,-67,959,843),39199=>array(34,-63,981,848),39200=>array(40,-66,957,843),39201=>array(40,-68,912,843),39202=>array(36,-65,956,857),39203=>array(24,-39,977,857),39204=>array(40,-66,961,843),39205=>array(47,-77,982,829),39206=>array(36,-62,978,857),39207=>array(32,-64,968,850),39208=>array(34,-64,931,839),39209=>array(37,-71,972,839),39210=>array(41,-73,990,834),39211=>array(36,-69,956,836),39212=>array(33,-78,918,838),39213=>array(38,-47,958,824),39214=>array(34,-75,943,832),39215=>array(40,-67,989,834),39216=>array(40,-71,959,834),39217=>array(33,-49,964,859),39218=>array(28,-60,915,848),39219=>array(48,-59,959,830),39220=>array(36,-68,963,857),39221=>array(25,-65,978,845),39222=>array(34,-34,947,853),39223=>array(36,-30,969,857),39224=>array(32,-48,975,845),39225=>array(36,-64,954,857),39226=>array(36,-65,951,832),39227=>array(36,-66,960,854),39228=>array(34,-64,971,846),39229=>array(40,-66,960,843),39230=>array(39,-69,932,843),39231=>array(41,-65,971,840),39232=>array(29,-63,950,835),39233=>array(18,-15,966,846),39234=>array(40,-66,959,843),39235=>array(34,-69,972,844),39236=>array(36,-30,964,857),39237=>array(40,-66,957,843),39238=>array(38,-68,950,834),39239=>array(36,-41,956,816),39240=>array(38,-55,955,847),39241=>array(40,-66,948,843),39242=>array(36,-84,957,859),39243=>array(40,-75,954,843),39244=>array(38,-66,959,843),39245=>array(24,-65,962,846),39246=>array(20,-68,956,843),39247=>array(29,-76,982,835),39248=>array(40,-66,953,843),39249=>array(28,-70,968,841),39250=>array(40,-68,962,843),39251=>array(26,-69,983,835),39252=>array(10,-74,957,849),39253=>array(17,-72,972,832),39254=>array(30,-64,967,828),39255=>array(35,-69,955,841),39256=>array(30,-33,960,849),39257=>array(32,-74,970,837),39258=>array(45,-30,929,857),39259=>array(38,-68,971,834),39260=>array(29,-71,982,816),39261=>array(29,-67,950,851),39262=>array(36,-70,960,839),39263=>array(30,-63,982,849),39264=>array(42,-65,956,837),39265=>array(41,-74,964,839),39266=>array(31,-64,983,839),39267=>array(242,2,685,829),39268=>array(31,-43,953,840),39269=>array(32,-60,948,840),39270=>array(31,-26,943,840),39271=>array(30,-66,891,826),39272=>array(25,-38,920,829),39273=>array(20,-67,939,825),39274=>array(40,-13,927,829),39275=>array(41,-69,957,829),39276=>array(41,-70,926,836),39277=>array(48,-71,953,829),39278=>array(47,-68,949,836),39279=>array(43,-58,953,836),39280=>array(42,-73,946,842),39281=>array(37,-28,946,835),39282=>array(41,-68,895,836),39283=>array(45,-68,911,830),39284=>array(41,-57,940,839),39285=>array(33,-67,927,829),39286=>array(36,-73,964,821),39287=>array(41,-66,912,841),39288=>array(49,-60,956,844),39289=>array(32,-65,975,837),39290=>array(42,-65,950,835),39291=>array(41,-71,966,836),39292=>array(39,-72,946,841),39293=>array(41,-65,931,831),39294=>array(41,-36,953,829),39295=>array(44,-61,946,829),39296=>array(41,-65,959,840),39297=>array(41,-79,946,831),39298=>array(36,-61,972,848),39299=>array(32,-68,964,825),39300=>array(40,-60,955,825),39301=>array(42,-70,881,838),39302=>array(47,-67,913,844),39303=>array(26,-16,947,821),39304=>array(37,-64,949,828),39305=>array(38,-71,943,829),39306=>array(41,-68,954,829),39307=>array(34,-68,960,827),39308=>array(48,-53,947,833),39309=>array(35,-71,935,817),39310=>array(43,-65,962,835),39311=>array(44,-67,916,838),39312=>array(27,-67,937,836),39313=>array(31,-43,938,813),39314=>array(27,-65,951,829),39315=>array(26,-90,955,822),39316=>array(29,-64,942,828),39317=>array(30,-81,948,821),39318=>array(95,-67,926,843),39319=>array(34,-64,959,831),39320=>array(55,-65,964,834),39321=>array(40,-65,955,817),39322=>array(40,-62,973,823),39323=>array(40,-74,966,841),39324=>array(40,-71,971,821),39325=>array(33,-77,965,828),39326=>array(44,-68,963,830),39327=>array(59,-68,958,827),39328=>array(70,-70,971,832),39329=>array(52,-69,956,824),39330=>array(34,-68,956,832),39331=>array(37,-62,975,833),39332=>array(48,-62,940,839),39333=>array(18,-62,974,838),39334=>array(33,-68,988,835),39335=>array(33,-61,983,839),39336=>array(28,-69,972,844),39337=>array(28,-67,956,839),39338=>array(33,-78,974,844),39339=>array(45,-70,975,816),39340=>array(56,-65,909,776),39341=>array(35,-68,964,790),39342=>array(52,-64,912,784),39343=>array(45,-73,950,781),39344=>array(56,-62,920,829),39345=>array(49,-63,964,833),39346=>array(36,-63,949,809),39347=>array(47,-62,951,836),39348=>array(53,-57,893,829),39349=>array(53,-69,947,782),39350=>array(30,-67,965,835),39351=>array(45,-62,954,840),39352=>array(45,-53,930,812),39353=>array(45,-52,891,803),39354=>array(32,-74,981,780),39355=>array(35,-71,978,825),39356=>array(40,-65,964,793),39357=>array(46,-68,909,783),39358=>array(25,-66,969,831),39359=>array(38,-57,931,827),39360=>array(45,-55,970,831),39361=>array(47,-66,967,826),39362=>array(55,-74,924,812),39363=>array(53,-69,982,826),39364=>array(45,-69,961,833),39365=>array(45,-66,973,797),39366=>array(27,-52,948,799),39367=>array(47,-76,988,832),39368=>array(28,-48,954,814),39369=>array(39,-66,905,785),39370=>array(45,-63,1002,841),39371=>array(45,-71,921,785),39372=>array(47,-68,965,833),39373=>array(42,-70,954,783),39374=>array(38,-68,906,823),39375=>array(40,-69,954,782),39376=>array(49,-57,956,829),39377=>array(48,-68,937,847),39378=>array(36,-62,919,845),39379=>array(39,-63,971,783),39380=>array(43,-63,957,790),39381=>array(56,-65,897,836),39382=>array(43,-73,981,842),39383=>array(47,-74,987,833),39384=>array(45,-60,964,839),39385=>array(28,-64,962,837),39386=>array(34,-66,972,827),39387=>array(37,-62,961,833),39388=>array(46,-66,974,830),39389=>array(55,-61,943,795),39390=>array(28,-55,962,829),39391=>array(43,-58,916,788),39392=>array(35,-71,938,823),39393=>array(39,-66,911,789),39394=>array(27,-73,962,835),39395=>array(42,-70,966,826),39396=>array(37,-72,959,780),39397=>array(39,-71,969,832),39398=>array(49,-62,957,830),39399=>array(46,-68,918,786),39400=>array(45,-60,944,836),39401=>array(35,-66,975,787),39402=>array(34,-71,964,826),39403=>array(45,-66,990,831),39404=>array(35,-71,957,786),39405=>array(46,-60,949,804),39406=>array(40,-60,961,820),39407=>array(45,-65,966,836),39408=>array(54,-67,924,785),39409=>array(64,-62,972,839),39410=>array(45,-65,927,835),39411=>array(33,-66,968,834),39412=>array(46,-66,975,824),39413=>array(30,-57,965,799),39414=>array(43,-65,927,783),39415=>array(37,-66,985,828),39416=>array(35,-61,946,788),39417=>array(31,-67,967,825),39418=>array(43,-73,980,838),39419=>array(46,-59,959,792),39420=>array(29,-77,974,834),39421=>array(53,-65,927,788),39422=>array(44,-67,966,814),39423=>array(44,-69,967,849),39424=>array(42,-63,951,831),39425=>array(42,-63,949,836),39426=>array(52,-59,954,853),39427=>array(42,-58,973,861),39428=>array(39,-65,974,829),39429=>array(48,-66,957,836),39430=>array(53,-74,927,782),39431=>array(37,-65,991,832),39432=>array(42,-64,953,843),39433=>array(32,-63,979,786),39434=>array(64,-63,924,832),39435=>array(33,-65,981,829),39436=>array(42,-65,958,845),39437=>array(45,-65,982,790),39438=>array(44,-62,956,834),39439=>array(33,-71,970,831),39440=>array(42,-63,956,845),39441=>array(39,-58,952,844),39442=>array(49,-64,963,791),39443=>array(48,-63,973,837),39444=>array(46,-66,937,787),39445=>array(35,-69,956,785),39446=>array(60,-68,958,845),39447=>array(32,-58,969,833),39448=>array(27,-63,974,850),39449=>array(39,-66,933,807),39450=>array(39,-62,960,835),39451=>array(29,-73,968,780),39452=>array(41,-65,970,843),39453=>array(25,-68,977,828),39454=>array(40,-70,967,828),39455=>array(32,-63,937,862),39456=>array(48,-75,988,781),39457=>array(42,-66,957,842),39458=>array(30,-68,980,784),39459=>array(40,-57,960,849),39460=>array(44,-68,978,841),39461=>array(33,-67,984,788),39462=>array(42,-63,968,788),39463=>array(48,-48,917,809),39464=>array(42,-73,945,843),39465=>array(47,-68,979,838),39466=>array(48,-64,973,831),39467=>array(37,-61,976,837),39468=>array(41,-65,984,838),39469=>array(54,-71,939,830),39470=>array(46,-64,924,834),39471=>array(27,-65,939,843),39472=>array(40,-72,967,840),39473=>array(29,-63,972,840),39474=>array(56,-64,965,830),39475=>array(42,-63,944,788),39476=>array(35,-65,955,788),39477=>array(44,-74,967,783),39478=>array(58,-66,923,849),39479=>array(49,-64,970,791),39480=>array(51,-63,941,840),39481=>array(20,-63,966,812),39482=>array(55,-69,959,829),39483=>array(37,-63,968,834),39484=>array(31,-63,965,843),39485=>array(48,-64,922,787),39486=>array(30,-73,961,801),39487=>array(36,-75,959,832),39488=>array(57,-69,968,832),39489=>array(58,-68,956,847),39490=>array(40,-71,984,857),39491=>array(33,-63,949,792),39492=>array(28,-63,973,837),39493=>array(46,-66,951,794),39494=>array(50,-64,958,787),39495=>array(54,-66,946,830),39496=>array(52,-63,937,789),39497=>array(40,-55,955,831),39498=>array(29,-68,962,836),39499=>array(22,-62,989,846),39500=>array(31,-64,962,837),39501=>array(35,-65,967,837),39502=>array(23,-51,943,844),39503=>array(51,-72,963,789),39504=>array(45,-63,980,835),39505=>array(27,-71,956,797),39506=>array(48,-62,948,791),39507=>array(53,-69,924,831),39508=>array(42,-64,961,789),39509=>array(48,-56,979,833),39510=>array(35,-68,977,837),39511=>array(37,-70,962,846),39512=>array(41,-67,973,843),39513=>array(36,-60,964,852),39514=>array(52,-65,951,846),39515=>array(25,-62,945,788),39516=>array(54,-68,951,825),39517=>array(37,-77,962,844),39518=>array(36,-78,974,844),39519=>array(34,-61,964,791),39520=>array(41,-74,970,824),39521=>array(46,-53,964,839),39522=>array(38,-64,951,836),39523=>array(26,-63,972,845),39524=>array(50,-75,976,833),39525=>array(27,-70,955,834),39526=>array(49,-61,930,789),39527=>array(35,-62,937,832),39528=>array(45,-66,927,826),39529=>array(52,-60,959,829),39530=>array(26,-73,964,789),39531=>array(57,-62,938,803),39532=>array(83,-57,892,790),39533=>array(64,-70,945,789),39534=>array(69,-65,947,831),39535=>array(64,-58,876,826),39536=>array(72,-55,933,834),39537=>array(40,-54,926,786),39538=>array(68,-58,891,803),39539=>array(43,-69,951,844),39540=>array(41,-55,896,845),39541=>array(37,-60,936,784),39542=>array(58,-70,953,831),39543=>array(49,-57,897,778),39544=>array(51,-66,940,835),39545=>array(91,-60,914,844),39546=>array(34,-59,872,822),39547=>array(47,-57,942,842),39548=>array(72,-57,926,839),39549=>array(29,-62,944,826),39550=>array(44,-60,912,831),39551=>array(42,-73,959,772),39552=>array(47,-63,949,840),39553=>array(36,-62,941,824),39554=>array(84,-59,890,787),39555=>array(57,-58,924,785),39556=>array(33,-62,940,836),39557=>array(42,-71,941,823),39558=>array(66,-64,953,836),39559=>array(59,-63,933,848),39560=>array(47,-75,945,847),39561=>array(39,-67,936,820),39562=>array(41,-65,920,768),39563=>array(62,-60,950,834),39564=>array(33,-63,943,835),39565=>array(62,-59,954,853),39566=>array(33,-68,968,786),39567=>array(61,-69,943,833),39568=>array(47,-73,949,829),39569=>array(61,-64,939,828),39570=>array(47,-67,956,788),39571=>array(57,-65,941,834),39572=>array(47,-65,958,845),39573=>array(33,-73,957,833),39574=>array(44,-74,953,833),39575=>array(37,-63,927,833),39576=>array(89,-63,934,829),39577=>array(47,-68,978,841),39578=>array(57,-66,953,789),39579=>array(43,-69,954,828),39580=>array(36,-73,951,831),39581=>array(57,-66,904,826),39582=>array(33,-62,947,840),39583=>array(55,-64,901,834),39584=>array(57,-62,944,789),39585=>array(64,-62,936,787),39586=>array(57,-55,956,836),39587=>array(53,-69,942,782),39588=>array(26,-73,953,779),39589=>array(49,-72,936,834),39590=>array(49,-62,931,790),39591=>array(48,-67,952,834),39592=>array(101,-55,899,806),39593=>array(79,-68,965,822),39594=>array(59,-67,978,787),39595=>array(78,-68,964,822),39596=>array(76,-63,967,791),39597=>array(76,-53,951,801),39598=>array(70,-52,967,825),39599=>array(91,-66,958,844),39600=>array(60,-68,963,783),39601=>array(62,-67,952,845),39602=>array(90,-60,967,849),39603=>array(82,-72,973,829),39604=>array(65,-68,958,824),39605=>array(54,-54,971,839),39606=>array(69,-65,962,826),39607=>array(74,-67,948,833),39608=>array(57,-62,958,824),39609=>array(68,-71,961,838),39610=>array(62,-74,945,829),39611=>array(78,-69,962,829),39612=>array(47,-71,937,838),39613=>array(37,-74,959,835),39614=>array(78,-51,970,810),39615=>array(78,-70,953,835),39616=>array(58,-69,930,844),39617=>array(61,-68,964,786),39618=>array(63,-68,957,848),39619=>array(42,-73,943,783),39620=>array(46,-57,967,839),39621=>array(61,-70,940,807),39622=>array(74,-68,947,835),39623=>array(71,-65,941,840),39624=>array(52,-71,954,843),39625=>array(32,-71,959,841),39626=>array(65,-66,948,831),39627=>array(43,-72,938,825),39628=>array(67,-76,937,818),39629=>array(51,-64,968,837),39630=>array(69,-74,962,789),39631=>array(55,-66,941,841),39632=>array(62,-64,956,829),39633=>array(67,-67,908,783),39634=>array(80,-64,958,833),39635=>array(51,-72,947,837),39636=>array(79,-70,934,829),39637=>array(69,-53,955,862),39638=>array(57,-67,948,849),39639=>array(84,-64,954,836),39640=>array(102,-67,916,828),39641=>array(102,-67,916,833),39642=>array(70,-67,958,848),39643=>array(47,-66,968,849),39644=>array(70,-71,956,847),39645=>array(74,-68,926,848),39646=>array(56,-67,946,840),39647=>array(68,-50,956,847),39648=>array(39,-58,963,837),39649=>array(51,-62,961,832),39650=>array(51,-21,953,832),39651=>array(51,-59,957,832),39652=>array(31,-64,973,846),39653=>array(63,-61,967,839),39654=>array(51,-34,955,834),39655=>array(32,-67,967,839),39656=>array(34,-58,964,839),39657=>array(58,-59,959,782),39658=>array(51,-61,956,853),39659=>array(62,-64,970,844),39660=>array(39,-25,964,829),39661=>array(46,-44,962,853),39662=>array(51,-61,956,853),39663=>array(65,-64,969,839),39664=>array(72,-37,948,823),39665=>array(40,-43,966,830),39666=>array(39,-73,958,832),39667=>array(65,-50,938,849),39668=>array(55,-65,950,833),39669=>array(44,-70,949,837),39670=>array(50,-70,957,832),39671=>array(69,-67,957,835),39672=>array(44,-69,948,837),39673=>array(53,-64,989,841),39674=>array(60,-68,948,832),39675=>array(66,-63,957,836),39676=>array(52,-65,966,845),39677=>array(55,-31,956,840),39678=>array(62,-74,952,834),39679=>array(61,-57,981,856),39680=>array(35,-71,962,857),39681=>array(60,-50,942,857),39682=>array(51,-51,942,857),39683=>array(74,-59,955,834),39684=>array(59,-64,965,843),39685=>array(44,-68,962,828),39686=>array(41,-70,964,846),39687=>array(47,-50,964,853),39688=>array(29,-32,968,842),39689=>array(60,-66,956,831),39690=>array(52,-72,973,834),39691=>array(58,-64,954,849),39692=>array(40,-67,967,835),39693=>array(68,-68,949,846),39694=>array(49,-53,943,851),39695=>array(35,-69,942,825),39696=>array(65,-63,955,847),39697=>array(39,-50,965,853),39698=>array(40,-59,954,853),39699=>array(59,-83,903,824),39700=>array(53,-72,979,836),39701=>array(57,-77,971,856),39702=>array(50,-56,969,851),39703=>array(62,-70,968,838),39704=>array(46,-65,980,851),39705=>array(72,-55,961,851),39706=>array(48,-68,957,841),39707=>array(53,-66,955,829),39708=>array(38,-61,938,823),39709=>array(38,-61,938,823),39710=>array(38,-63,966,846),39711=>array(24,-68,949,839),39712=>array(50,-80,966,852),39713=>array(40,-45,932,855),39714=>array(58,-69,959,837),39715=>array(41,-62,944,839),39716=>array(52,-71,958,845),39717=>array(116,-71,891,826),39718=>array(116,-71,891,826),39719=>array(116,-61,893,835),39720=>array(118,-63,894,830),39721=>array(115,-65,898,832),39722=>array(102,-57,897,839),39723=>array(105,-55,901,840),39724=>array(107,-61,907,833),39725=>array(99,-71,901,823),39726=>array(110,-65,917,832),39727=>array(122,-24,909,826),39728=>array(53,-79,953,840),39729=>array(53,-58,952,845),39730=>array(72,-64,945,791),39731=>array(41,-68,927,826),39732=>array(60,-70,948,833),39733=>array(51,-64,955,783),39734=>array(54,-40,969,838),39735=>array(60,-67,977,826),39736=>array(40,-64,923,834),39737=>array(54,-50,939,813),39738=>array(55,-69,952,830),39739=>array(72,-64,927,830),39740=>array(45,-58,962,850),39741=>array(49,-62,973,836),39742=>array(49,-75,973,836),39743=>array(53,-66,968,843),39744=>array(37,-65,962,843),39745=>array(26,-76,959,848),39746=>array(46,-62,960,857),39747=>array(40,-35,941,840),39748=>array(74,-38,952,854),39749=>array(35,-66,962,839),39750=>array(39,-77,977,845),39751=>array(47,-75,960,770),39752=>array(34,-67,968,844),39753=>array(21,-69,929,823),39754=>array(34,-67,977,841),39755=>array(46,-76,961,842),39756=>array(38,-68,963,843),39757=>array(39,-48,960,841),39758=>array(38,-63,970,847),39759=>array(39,-70,966,836),39760=>array(26,-76,957,849),39761=>array(38,-63,966,841),39762=>array(28,-68,956,846),39763=>array(28,-56,956,849),39764=>array(27,-69,960,840),39765=>array(35,-75,970,834),39766=>array(38,-70,964,836),39767=>array(58,-70,960,851),39768=>array(44,-68,947,797),39769=>array(51,-70,965,831),39770=>array(43,-70,956,849),39771=>array(43,-66,894,841),39772=>array(88,-73,976,841),39773=>array(61,-65,887,841),39774=>array(43,-45,958,841),39775=>array(33,-48,957,842),39776=>array(35,-49,949,844),39777=>array(31,-71,916,839),39778=>array(31,-49,973,839),39779=>array(31,-61,945,839),39780=>array(41,-73,979,832),39781=>array(31,-49,976,839),39782=>array(39,-66,966,832),39783=>array(35,-70,976,835),39784=>array(35,-32,959,846),39785=>array(31,-49,931,839),39786=>array(31,-49,969,839),39787=>array(31,-49,969,839),39788=>array(40,-78,963,834),39789=>array(31,-49,955,839),39790=>array(31,-49,974,839),39791=>array(51,-68,947,837),39792=>array(39,-74,978,834),39793=>array(38,-32,954,835),39794=>array(31,-49,952,839),39795=>array(31,-74,948,839),39796=>array(34,-73,953,837),39797=>array(41,-62,973,837),39798=>array(34,-65,905,834),39799=>array(43,-64,966,841),39800=>array(31,-49,950,839),39801=>array(31,-56,954,839),39802=>array(47,-71,964,836),39803=>array(57,-69,919,833),39804=>array(48,-70,963,830),39805=>array(42,-70,961,831),39806=>array(44,-52,964,819),39807=>array(31,-73,981,842),39808=>array(38,-38,948,852),39809=>array(31,-61,962,839),39810=>array(52,-64,914,832),39811=>array(44,-65,948,843),39812=>array(16,-62,932,839),39813=>array(45,-67,982,831),39814=>array(44,-58,963,850),39815=>array(38,-67,976,837),39816=>array(52,-70,927,830),39817=>array(31,-70,950,839),39818=>array(33,-66,886,843),39819=>array(31,-69,944,839),39820=>array(31,-71,961,840),39821=>array(31,-73,971,839),39822=>array(45,-64,957,838),39823=>array(31,-49,947,839),39824=>array(42,-65,960,839),39825=>array(44,-46,967,844),39826=>array(39,-60,959,851),39827=>array(48,-61,961,845),39828=>array(31,-49,933,839),39829=>array(57,-71,970,838),39830=>array(31,-49,935,839),39831=>array(31,-77,948,839),39832=>array(44,-54,935,836),39833=>array(31,-49,908,839),39834=>array(44,-62,958,839),39835=>array(31,-75,976,834),39836=>array(31,-63,953,839),39837=>array(14,-67,991,836),39838=>array(51,-67,970,839),39839=>array(31,-51,964,839),39840=>array(33,-55,954,849),39841=>array(40,-69,972,833),39842=>array(46,-78,995,829),39843=>array(45,-67,915,839),39844=>array(55,-76,954,826),39845=>array(38,-69,984,840),39846=>array(36,-61,910,842),39847=>array(31,-49,954,839),39848=>array(40,-39,953,844),39849=>array(31,-49,937,853),39850=>array(44,-67,959,839),39851=>array(48,-66,959,843),39852=>array(31,-62,961,843),39853=>array(35,-39,967,847),39854=>array(44,-60,960,843),39855=>array(32,-72,974,834),39856=>array(31,-49,939,839),39857=>array(31,-49,949,839),39858=>array(30,-61,979,839),39859=>array(38,-55,945,835),39860=>array(45,-71,982,839),39861=>array(36,-67,966,834),39862=>array(41,-70,965,841),39863=>array(11,-49,939,839),39864=>array(43,-61,978,845),39865=>array(33,-65,944,836),39866=>array(18,-57,948,836),39867=>array(31,-49,975,839),39868=>array(31,-49,972,839),39869=>array(29,-68,979,832),39870=>array(11,-54,959,839),39871=>array(33,-53,962,845),39872=>array(49,-52,979,840),39873=>array(39,-67,978,840),39874=>array(39,-56,937,839),39875=>array(39,-65,961,839),39876=>array(28,-64,979,842),39877=>array(28,-66,983,842),39878=>array(36,-67,957,839),39879=>array(41,-65,965,845),39880=>array(41,-71,977,840),39881=>array(45,-52,954,833),39882=>array(48,-70,960,836),39883=>array(29,-37,980,841),39884=>array(45,-61,954,833),39885=>array(41,-68,964,842),39886=>array(26,-68,961,841),39887=>array(36,-45,914,853),39888=>array(41,-43,955,841),39889=>array(41,-49,964,841),39890=>array(41,-49,945,841),39891=>array(43,-70,964,842),39892=>array(44,-64,950,846),39893=>array(32,-79,974,839),39894=>array(35,-59,964,843),39895=>array(32,-65,971,854),39896=>array(32,-69,968,840),39897=>array(35,-67,962,842),39898=>array(31,-65,988,838),39899=>array(51,-65,916,839),39900=>array(30,-68,971,841),39901=>array(-15,-70,916,841),39902=>array(39,-74,964,825),39903=>array(29,-57,992,827),39904=>array(32,-65,990,831),39905=>array(46,-62,957,846),39906=>array(38,-48,965,845),39907=>array(38,-64,953,845),39908=>array(42,-63,971,836),39909=>array(32,-39,960,841),39910=>array(29,-62,986,838),39911=>array(49,-64,914,854),39912=>array(44,-62,972,843),39913=>array(33,-68,985,868),39914=>array(43,-67,986,839),39915=>array(32,-62,971,842),39916=>array(35,-72,988,836),39917=>array(37,-44,957,796),39918=>array(42,-65,958,845),39919=>array(46,-67,945,837),39920=>array(44,-33,972,851),39921=>array(42,-74,962,836),39922=>array(53,-73,961,828),39923=>array(34,-62,962,841),39924=>array(33,-62,946,836),39925=>array(65,-81,956,834),39926=>array(42,-63,938,836),39927=>array(43,-68,978,843),39928=>array(39,-67,983,837),39929=>array(42,-45,945,836),39930=>array(42,-64,953,837),39931=>array(43,-63,930,837),39932=>array(42,-57,980,849),39933=>array(52,-65,929,837),39934=>array(42,-69,963,836),39935=>array(47,-62,923,848),39936=>array(44,-64,940,847),39937=>array(49,-64,973,847),39938=>array(37,-59,909,840),39939=>array(49,-57,973,847),39940=>array(43,-40,970,847),39941=>array(49,-61,932,847),39942=>array(39,-61,973,843),39943=>array(43,-64,996,845),39944=>array(37,-67,973,836),39945=>array(39,-45,954,847),39946=>array(54,-53,968,847),39947=>array(24,-36,953,834),39948=>array(33,-70,972,829),39949=>array(31,-67,978,837),39950=>array(35,-73,984,838),39951=>array(49,-65,963,847),39952=>array(38,-61,958,844),39953=>array(49,-45,951,847),39954=>array(35,-64,973,844),39955=>array(38,-44,968,849),39956=>array(44,-66,977,835),39957=>array(37,-63,963,827),39958=>array(51,-64,942,848),39959=>array(44,-70,930,834),39960=>array(49,-26,943,843),39961=>array(24,-60,973,847),39962=>array(49,-21,949,855),39963=>array(44,-39,974,826),39964=>array(30,-64,975,852),39965=>array(39,-68,959,838),39966=>array(24,-60,953,847),39967=>array(49,-65,949,847),39968=>array(49,-66,966,847),39969=>array(43,-65,931,837),39970=>array(49,-63,949,847),39971=>array(34,-62,958,836),39972=>array(33,-65,958,845),39973=>array(38,-72,964,828),39974=>array(69,-56,943,847),39975=>array(34,-67,963,836),39976=>array(56,-61,927,844),39977=>array(37,-62,962,845),39978=>array(29,-26,967,847),39979=>array(43,-64,978,838),39980=>array(37,-66,982,830),39981=>array(42,-65,965,843),39982=>array(44,-39,974,826),39983=>array(34,-65,937,839),39984=>array(53,-66,944,839),39985=>array(41,-74,967,838),39986=>array(47,-69,953,840),39987=>array(51,-74,936,835),39988=>array(32,-68,970,831),39989=>array(41,-76,958,845),39990=>array(24,-65,986,839),39991=>array(29,-62,970,845),39992=>array(39,-21,966,847),39993=>array(35,-21,973,845),39994=>array(33,-73,976,862),39995=>array(35,-65,978,837),39996=>array(40,-64,915,837),39997=>array(32,-53,961,849),39998=>array(37,-62,957,838),39999=>array(36,-74,980,839),40000=>array(59,-71,961,791),40001=>array(34,-66,979,843),40002=>array(42,-65,968,847),40003=>array(44,-63,929,847),40004=>array(38,-63,956,845),40005=>array(41,-73,959,851),40006=>array(38,-64,962,849),40007=>array(38,-59,966,846),40008=>array(35,-56,939,841),40009=>array(41,-72,973,835),40010=>array(41,-67,951,835),40011=>array(31,-71,965,837),40012=>array(24,-63,989,845),40013=>array(28,-68,978,841),40014=>array(30,-69,984,840),40015=>array(49,-63,966,847),40016=>array(37,-70,967,839),40017=>array(34,-59,968,847),40018=>array(35,-62,956,855),40019=>array(38,-62,953,831),40020=>array(32,-64,962,851),40021=>array(30,-68,984,842),40022=>array(29,-68,970,842),40023=>array(31,-68,965,843),40024=>array(40,-59,965,842),40025=>array(27,-70,984,837),40026=>array(27,-65,953,837),40027=>array(49,-68,950,847),40028=>array(26,-67,962,845),40029=>array(29,-60,973,847),40030=>array(39,-68,983,831),40031=>array(53,-68,974,848),40032=>array(25,-61,984,861),40033=>array(32,-62,974,838),40034=>array(41,-65,992,830),40035=>array(32,-35,964,849),40036=>array(58,-40,930,839),40037=>array(38,-71,959,839),40038=>array(36,-56,976,822),40039=>array(36,-28,965,842),40040=>array(34,-48,954,854),40041=>array(29,-70,951,854),40042=>array(34,-64,974,834),40043=>array(25,-68,979,854),40044=>array(24,-70,967,854),40045=>array(39,-62,957,852),40046=>array(29,-56,956,848),40047=>array(39,-64,995,847),40048=>array(29,-63,960,854),40049=>array(38,-67,945,838),40050=>array(22,-59,970,854),40051=>array(38,-65,967,843),40052=>array(36,-69,971,841),40053=>array(27,-55,964,858),40054=>array(40,-73,963,837),40055=>array(39,-29,956,839),40056=>array(36,-60,962,851),40057=>array(48,-67,965,841),40058=>array(35,-68,966,828),40059=>array(59,-73,948,824),40060=>array(78,-15,929,826),40061=>array(22,-73,934,841),40062=>array(31,-29,973,839),40063=>array(29,-65,965,841),40064=>array(22,-46,945,841),40065=>array(44,-53,925,849),40066=>array(39,-75,936,836),40067=>array(22,-32,974,841),40068=>array(22,-71,964,841),40069=>array(30,-68,967,838),40070=>array(24,-72,945,824),40071=>array(22,-74,903,841),40072=>array(22,-72,920,817),40073=>array(22,-69,919,841),40074=>array(22,-61,961,845),40075=>array(24,-62,943,840),40076=>array(22,-66,886,843),40077=>array(22,-30,950,843),40078=>array(74,-13,926,822),40079=>array(22,-73,951,841),40080=>array(39,-67,942,834),40081=>array(39,-29,950,839),40082=>array(24,-64,941,828),40083=>array(29,-55,945,837),40084=>array(24,-69,942,838),40085=>array(28,-70,956,824),40086=>array(22,-61,941,841),40087=>array(33,-65,913,840),40088=>array(22,-63,953,841),40089=>array(22,-55,977,840),40090=>array(12,-76,937,836),40091=>array(39,-69,943,844),40092=>array(27,-61,938,846),40093=>array(54,-37,955,823),40094=>array(25,-42,942,830),40095=>array(21,-68,923,821),40096=>array(25,-69,961,830),40097=>array(0,-59,921,818),40098=>array(16,-49,937,822),40099=>array(19,-20,943,834),40100=>array(39,-23,937,828),40101=>array(24,-68,920,829),40102=>array(23,-64,956,832),40103=>array(33,-63,962,831),40104=>array(60,-48,918,822),40105=>array(25,-67,947,842),40106=>array(22,-69,965,841),40107=>array(31,-67,912,836),40108=>array(22,-44,930,841),40109=>array(24,-61,947,834),40110=>array(25,-69,969,834),40111=>array(22,-79,974,841),40112=>array(19,-64,955,825),40113=>array(32,-64,941,830),40114=>array(24,-60,953,824),40115=>array(39,-66,897,828),40116=>array(22,-70,881,816),40117=>array(24,-72,947,824),40118=>array(31,-32,956,849),40119=>array(25,-66,899,830),40120=>array(39,-64,947,846),40121=>array(25,-79,972,839),40122=>array(16,-68,943,819),40123=>array(25,-66,933,834),40124=>array(27,-80,918,825),40125=>array(25,-69,957,830),40126=>array(22,-65,963,841),40127=>array(24,-58,957,841),40128=>array(22,-68,988,841),40129=>array(22,-39,982,841),40130=>array(22,-57,983,841),40131=>array(34,-31,951,842),40132=>array(20,-66,939,812),40133=>array(18,-70,961,828),40134=>array(25,-66,956,842),40135=>array(24,-44,937,844),40136=>array(22,-64,973,844),40137=>array(34,-61,954,841),40138=>array(25,-77,911,836),40139=>array(24,-67,953,822),40140=>array(35,-50,931,820),40141=>array(24,-67,941,834),40142=>array(24,-63,910,824),40143=>array(25,-66,950,830),40144=>array(47,-67,941,824),40145=>array(22,-65,949,843),40146=>array(22,-64,975,852),40147=>array(33,-75,917,828),40148=>array(25,-64,957,830),40149=>array(25,-69,922,830),40150=>array(41,-40,945,835),40151=>array(25,-68,965,836),40152=>array(53,-38,955,836),40153=>array(25,-84,943,840),40154=>array(16,-67,984,868),40155=>array(22,-67,957,841),40156=>array(19,-69,953,825),40157=>array(25,-66,945,848),40158=>array(25,-68,945,834),40159=>array(35,-65,953,851),40160=>array(22,-64,995,841),40161=>array(41,-33,959,841),40162=>array(25,-32,948,833),40163=>array(24,-35,976,849),40164=>array(43,-67,957,856),40165=>array(66,-59,887,852),40166=>array(34,-65,952,847),40167=>array(58,-58,960,842),40168=>array(43,-64,957,848),40169=>array(48,-63,930,849),40170=>array(177,-69,927,843),40171=>array(41,-68,927,788),40172=>array(52,-62,960,851),40173=>array(31,-73,951,841),40174=>array(39,-73,961,841),40175=>array(46,-60,965,796),40176=>array(43,-71,957,840),40177=>array(58,-75,956,840),40178=>array(33,-48,955,861),40179=>array(46,-60,965,796),40180=>array(109,-63,909,851),40181=>array(59,-67,952,841),40182=>array(52,-57,949,850),40183=>array(47,-69,964,846),40184=>array(46,-73,954,835),40185=>array(35,-70,954,847),40186=>array(40,-65,955,846),40187=>array(39,-78,954,841),40188=>array(46,-52,976,864),40189=>array(35,-75,959,844),40190=>array(57,-76,943,841),40191=>array(42,-71,939,841),40192=>array(36,-72,951,848),40193=>array(31,-72,951,848),40194=>array(17,-73,951,848),40195=>array(48,-70,972,840),40196=>array(63,-74,963,843),40197=>array(49,-75,957,838),40198=>array(45,-68,942,841),40199=>array(65,-65,923,848),40200=>array(46,-63,947,791),40201=>array(46,-64,924,842),40202=>array(38,-64,924,842),40203=>array(39,-68,924,842),40204=>array(34,-68,996,781),40205=>array(40,-68,959,844),40206=>array(96,-70,924,836),40207=>array(29,-80,971,851),40208=>array(61,-68,944,833),40209=>array(68,-68,947,847),40210=>array(41,-65,926,838),40211=>array(54,-71,946,835),40212=>array(45,-68,958,835),40213=>array(41,-61,946,841),40214=>array(33,-61,967,853),40215=>array(60,-71,941,843),40216=>array(43,-75,956,839),40217=>array(52,-68,953,844),40218=>array(26,-62,960,841),40219=>array(46,-67,951,840),40220=>array(62,-67,932,827),40221=>array(36,-58,918,849),40222=>array(72,-55,926,845),40223=>array(68,-58,921,846),40224=>array(61,-68,946,843),40225=>array(42,-58,946,853),40226=>array(51,-72,950,838),40227=>array(66,-60,923,845),40228=>array(25,-77,975,843),40229=>array(38,-72,979,841),40230=>array(34,-63,971,842),40231=>array(51,-68,956,835),40232=>array(113,-79,916,843),40233=>array(45,-75,959,835),40234=>array(61,-56,956,841),40235=>array(113,-67,916,843),40236=>array(63,-67,893,821),40237=>array(107,-63,943,841),40238=>array(37,-70,955,836),40239=>array(59,-59,916,845),40240=>array(71,-61,930,847),40241=>array(46,-63,955,841),40242=>array(59,-66,943,841),40243=>array(57,-66,966,838),40244=>array(37,-63,944,849),40245=>array(27,-66,965,841),40246=>array(56,-64,954,840),40247=>array(57,-68,908,824),40248=>array(43,-67,956,843),40249=>array(76,-63,956,855),40250=>array(44,-63,961,839),40251=>array(48,-57,919,853),40252=>array(29,-61,971,856),40253=>array(55,-43,924,850),40254=>array(65,-67,957,841),40255=>array(49,-67,924,844),40256=>array(43,-47,951,858),40257=>array(37,-67,957,839),40258=>array(39,-71,916,842),40259=>array(37,-67,951,841),40260=>array(53,-60,933,843),40261=>array(38,-69,963,838),40262=>array(35,-70,943,855),40263=>array(41,-68,959,841),40264=>array(40,-70,949,841),40265=>array(62,-55,938,808),40266=>array(46,-68,954,841),40267=>array(34,-69,948,840),40268=>array(26,-67,981,840),40269=>array(34,-69,966,840),40270=>array(36,-73,964,840),40271=>array(55,-61,945,846),40272=>array(18,-69,970,847),40273=>array(108,-68,915,838),40274=>array(28,-68,914,842),40275=>array(71,-61,926,845),40276=>array(31,-73,971,847),40277=>array(34,-70,959,840),40278=>array(104,-68,942,846),40279=>array(33,-67,949,840),40280=>array(38,-71,952,839),40281=>array(47,-68,951,841),40282=>array(45,-67,963,841),40283=>array(54,-71,950,840),40284=>array(53,-61,930,843),40285=>array(68,-60,924,840),40286=>array(53,-73,952,847),40287=>array(48,-69,945,839),40288=>array(70,-62,933,842),40289=>array(61,-63,933,842),40290=>array(48,-69,946,845),40291=>array(42,-69,958,840),40292=>array(43,-69,948,850),40293=>array(67,-62,920,834),40294=>array(37,-68,966,839),40295=>array(48,-71,955,838),40296=>array(23,-68,965,845),40297=>array(37,-69,956,841),40298=>array(50,-60,925,849),40299=>array(59,-72,950,841),40300=>array(63,-77,928,849),40301=>array(24,-65,949,844),40302=>array(44,-65,956,844),40303=>array(65,-58,926,853),40304=>array(57,-55,927,851),40305=>array(33,-70,969,848),40306=>array(60,-61,931,841),40307=>array(37,-70,959,841),40308=>array(28,-67,967,848),40309=>array(34,-68,960,846),40310=>array(52,-65,943,844),40311=>array(37,-61,918,848),40312=>array(58,-68,968,847),40313=>array(49,-64,942,838),40314=>array(37,-75,950,841),40315=>array(51,-64,967,847),40316=>array(44,-68,940,844),40317=>array(49,-66,963,849),40318=>array(57,-69,943,840),40319=>array(34,-66,957,851),40320=>array(28,-73,969,853),40321=>array(43,-65,959,847),40322=>array(51,-68,956,835),40323=>array(27,-69,973,840),40324=>array(62,-74,961,852),40325=>array(51,-65,958,849),40326=>array(40,-68,966,847),40327=>array(42,-68,947,844),40328=>array(50,-74,962,841),40329=>array(54,-62,922,845),40330=>array(26,-68,917,848),40331=>array(41,-72,962,840),40332=>array(37,-63,958,852),40333=>array(35,-69,965,840),40334=>array(34,-69,966,850),40335=>array(42,-68,955,842),40336=>array(52,-63,953,839),40337=>array(61,-74,939,827),40338=>array(33,-65,963,838),40339=>array(53,-65,911,846),40340=>array(48,-63,961,844),40341=>array(57,-69,943,840),40342=>array(41,-67,957,834),40343=>array(46,-62,967,842),40344=>array(62,-64,927,844),40345=>array(67,-62,956,850),40346=>array(71,-59,927,846),40347=>array(55,-65,948,838),40348=>array(46,-70,968,838),40349=>array(61,-66,951,842),40350=>array(36,-63,956,840),40351=>array(50,-65,957,843),40352=>array(69,-64,949,834),40353=>array(16,-55,897,853),40354=>array(36,-64,954,843),40355=>array(18,-58,966,841),40356=>array(64,-65,948,839),40357=>array(35,-69,965,840),40358=>array(75,-68,897,828),40359=>array(32,-62,972,826),40360=>array(50,-63,977,838),40361=>array(52,-66,950,838),40362=>array(55,-60,953,841),40363=>array(34,-77,947,841),40364=>array(27,-71,909,846),40365=>array(60,-70,946,847),40366=>array(35,-69,948,848),40367=>array(57,-74,933,829),40368=>array(-9,-77,948,840),40369=>array(47,-73,968,835),40370=>array(43,-68,955,843),40371=>array(52,-68,955,841),40372=>array(40,-65,938,837),40373=>array(49,-59,938,846),40374=>array(45,-69,964,842),40375=>array(83,-68,953,846),40376=>array(40,-64,952,834),40377=>array(69,-70,949,838),40378=>array(47,-67,924,836),40379=>array(85,-61,921,848),40380=>array(31,-69,912,844),40381=>array(26,-69,948,840),40382=>array(60,-69,949,827),40383=>array(53,-55,929,857),40384=>array(74,-62,927,845),40385=>array(36,-49,951,850),40386=>array(66,-57,924,844),40387=>array(50,-53,950,861),40388=>array(46,-61,945,835),40389=>array(52,-63,960,843),40390=>array(53,-67,949,838),40391=>array(61,-72,976,825),40392=>array(45,-70,962,839),40393=>array(30,-73,970,841),40394=>array(56,-66,949,842),40395=>array(44,-72,959,841),40396=>array(21,-64,946,838),40397=>array(47,-65,959,844),40398=>array(34,-73,964,840),40399=>array(43,-64,952,841),40400=>array(40,-68,956,845),40401=>array(43,-71,952,836),40402=>array(62,-65,954,846),40403=>array(49,-63,931,845),40404=>array(52,-67,954,842),40405=>array(58,-65,937,845),40406=>array(54,-70,930,797),40407=>array(115,-68,925,843),40408=>array(52,-64,974,834),40409=>array(58,-63,956,835),40410=>array(32,-76,912,846),40411=>array(45,-65,954,847),40412=>array(41,-67,955,845),40413=>array(50,-70,957,845),40414=>array(44,-67,967,854),40415=>array(46,-67,953,845),40416=>array(40,-69,948,840),40417=>array(39,-71,970,844),40418=>array(36,-67,979,785),40419=>array(65,-65,954,846),40420=>array(61,-70,954,838),40421=>array(60,-71,937,847),40422=>array(26,-56,898,847),40423=>array(47,-69,948,840),40424=>array(48,-65,959,846),40425=>array(56,-49,939,853),40426=>array(54,-63,935,802),40427=>array(59,-52,955,862),40428=>array(48,-65,954,844),40429=>array(39,-66,965,851),40430=>array(41,-65,962,844),40431=>array(32,-68,915,841),40432=>array(37,-69,969,840),40433=>array(50,-67,955,846),40434=>array(65,-66,943,840),40435=>array(113,-62,925,844),40436=>array(98,-69,938,841),40437=>array(35,-67,956,840),40438=>array(54,-73,945,840),40439=>array(62,-77,950,841),40440=>array(60,-68,934,844),40441=>array(40,-76,942,837),40442=>array(62,-67,948,849),40443=>array(29,-77,989,839),40444=>array(48,-69,948,840),40445=>array(50,-73,935,844),40446=>array(58,-65,962,845),40447=>array(53,-61,956,841),40448=>array(33,-68,962,841),40449=>array(34,-67,969,843),40450=>array(48,-74,957,830),40451=>array(32,-64,974,846),40452=>array(47,-73,969,837),40453=>array(62,-70,954,839),40454=>array(50,-72,966,839),40455=>array(45,-65,942,846),40456=>array(36,-69,926,846),40457=>array(38,-62,955,833),40458=>array(33,-66,960,842),40459=>array(59,-65,959,841),40460=>array(36,-66,948,843),40461=>array(34,-61,959,847),40462=>array(68,-59,910,805),40463=>array(50,-70,961,847),40464=>array(42,-67,971,841),40465=>array(44,-51,951,852),40466=>array(34,-63,975,838),40467=>array(93,-65,933,840),40468=>array(41,-70,973,843),40469=>array(43,-65,930,844),40470=>array(63,-67,939,844),40471=>array(71,-72,945,836),40472=>array(24,-71,960,844),40473=>array(57,-64,946,847),40474=>array(50,-65,928,843),40475=>array(45,-67,927,845),40476=>array(34,-65,966,845),40477=>array(41,-65,935,842),40478=>array(62,-67,958,846),40479=>array(80,-53,892,842),40480=>array(34,-65,893,820),40481=>array(30,-57,890,837),40482=>array(58,-65,935,825),40483=>array(98,-52,903,842),40484=>array(27,-66,896,826),40485=>array(96,-53,904,840),40486=>array(23,-64,906,837),40487=>array(35,-63,932,833),40488=>array(53,-63,892,827),40489=>array(37,-69,918,823),40490=>array(49,-65,892,822),40491=>array(26,-66,897,824),40492=>array(34,-66,896,826),40493=>array(100,-68,902,825),40494=>array(72,-69,902,825),40495=>array(32,-58,950,831),40496=>array(50,-70,927,844),40497=>array(70,-65,896,825),40498=>array(24,-57,895,828),40499=>array(35,-62,924,827),40500=>array(81,-63,893,821),40501=>array(41,-57,920,835),40502=>array(61,-59,910,832),40503=>array(50,-63,923,821),40504=>array(50,-59,893,826),40505=>array(29,-62,896,820),40506=>array(15,-66,896,824),40507=>array(37,-63,938,844),40508=>array(49,-67,928,835),40509=>array(26,-53,907,836),40510=>array(64,-60,917,835),40511=>array(39,-55,894,839),40512=>array(40,-62,949,838),40513=>array(62,-64,899,824),40514=>array(62,-60,895,820),40515=>array(98,-61,899,842),40516=>array(30,-54,898,826),40517=>array(32,-59,899,833),40518=>array(16,-60,895,821),40519=>array(90,-63,899,834),40520=>array(20,-66,900,822),40521=>array(41,-62,896,821),40522=>array(52,-64,903,826),40523=>array(60,-63,898,823),40524=>array(24,-64,899,828),40525=>array(81,-62,925,824),40526=>array(43,-71,902,818),40527=>array(24,-68,906,839),40528=>array(44,-64,926,843),40529=>array(51,-66,896,829),40530=>array(26,-68,931,846),40531=>array(49,-64,942,848),40532=>array(41,-64,959,833),40533=>array(52,-67,896,819),40534=>array(16,-64,896,821),40535=>array(61,-68,896,823),40536=>array(62,-69,894,825),40537=>array(39,-67,944,834),40538=>array(64,-63,921,824),40539=>array(19,-67,898,823),40540=>array(39,-65,929,825),40541=>array(70,-65,928,829),40542=>array(50,-61,934,821),40543=>array(44,-65,926,836),40544=>array(83,-67,924,839),40545=>array(36,-67,898,831),40546=>array(46,-67,898,849),40547=>array(38,-70,912,828),40548=>array(19,-56,898,840),40549=>array(83,-67,929,802),40550=>array(33,-61,899,821),40551=>array(20,-63,898,826),40552=>array(46,-69,929,831),40553=>array(48,-60,923,828),40554=>array(36,-63,922,827),40555=>array(42,-64,960,845),40556=>array(39,-65,895,821),40557=>array(31,-63,930,827),40558=>array(37,-62,951,821),40559=>array(61,-62,937,846),40560=>array(45,-78,917,831),40561=>array(30,-65,948,826),40562=>array(63,-64,933,833),40563=>array(29,-56,897,828),40564=>array(29,-70,946,822),40565=>array(125,-70,891,835),40566=>array(91,-52,972,835),40567=>array(91,-73,972,835),40568=>array(82,-60,966,835),40569=>array(94,-71,969,831),40570=>array(88,-59,941,843),40571=>array(69,-72,982,845),40572=>array(72,-66,947,847),40573=>array(52,-18,943,837),40574=>array(92,-45,924,830),40575=>array(57,-67,949,829),40576=>array(29,-66,958,842),40577=>array(42,-64,953,834),40578=>array(21,-60,935,841),40579=>array(39,-75,960,848),40580=>array(40,-74,958,833),40581=>array(30,-60,949,849),40582=>array(30,-60,941,849),40583=>array(30,-67,961,849),40584=>array(21,-60,925,836),40585=>array(48,-75,956,814),40586=>array(52,-72,955,826),40587=>array(67,-64,941,821),40588=>array(36,-57,966,829),40589=>array(25,-70,969,845),40590=>array(25,-80,971,845),40591=>array(25,-74,960,845),40592=>array(25,-73,975,845),40593=>array(37,-64,955,838),40594=>array(40,-70,951,835),40595=>array(37,-68,958,837),40596=>array(25,-74,960,845),40597=>array(36,-65,945,833),40598=>array(25,-70,951,845),40599=>array(43,-67,952,814),40600=>array(25,-72,971,845),40601=>array(25,-73,963,845),40602=>array(25,-78,970,845),40603=>array(25,-70,956,845),40604=>array(25,-75,979,845),40605=>array(58,-63,946,841),40606=>array(25,-80,952,843),40607=>array(26,-68,959,838),40608=>array(25,-76,952,847),40609=>array(25,-79,970,843),40610=>array(25,-74,951,843),40611=>array(35,-68,976,841),40612=>array(42,-69,959,853),40613=>array(58,-75,942,832),40614=>array(56,-65,950,827),40615=>array(40,-75,981,828),40616=>array(43,-84,971,832),40617=>array(37,-64,964,831),40618=>array(37,-64,958,831),40619=>array(43,-84,939,832),40620=>array(45,-84,964,832),40621=>array(37,-64,971,842),40622=>array(47,-68,978,824),40623=>array(43,-84,929,832),40624=>array(38,-54,971,866),40625=>array(43,-84,958,832),40626=>array(43,-84,968,832),40627=>array(43,-84,973,832),40628=>array(25,-63,959,826),40629=>array(34,-63,967,831),40630=>array(41,-71,979,837),40631=>array(44,-66,982,829),40632=>array(43,-57,973,830),40633=>array(37,-65,982,830),40634=>array(37,-65,982,818),40635=>array(43,-70,966,839),40636=>array(45,-68,956,839),40637=>array(41,-72,926,837),40638=>array(23,-67,958,836),40639=>array(36,-68,945,838),40640=>array(37,-71,969,843),40641=>array(39,-66,978,852),40642=>array(34,-73,940,845),40643=>array(55,-76,957,826),40644=>array(75,-83,925,831),40645=>array(50,-76,968,830),40646=>array(50,-76,972,830),40647=>array(58,-78,942,832),40648=>array(56,-78,959,818),40649=>array(58,-67,916,840),40650=>array(50,-78,963,831),40651=>array(28,-79,958,822),40652=>array(49,-72,960,842),40653=>array(35,-68,963,830),40654=>array(49,-68,946,832),40655=>array(39,-62,956,838),40656=>array(31,-64,954,835),40657=>array(81,-67,946,787),40658=>array(81,-67,946,787),40659=>array(48,-67,970,823),40660=>array(36,-65,970,841),40661=>array(43,-78,963,820),40662=>array(41,-75,964,780),40663=>array(39,-60,966,837),40664=>array(45,-69,955,829),40665=>array(43,-67,957,809),40666=>array(60,-70,956,823),40667=>array(47,-67,962,847),40668=>array(63,-66,919,832),40669=>array(58,-62,941,830),40670=>array(63,-64,945,839),40671=>array(58,-63,941,846),40672=>array(37,-64,952,829),40673=>array(33,-78,964,805),40674=>array(29,-72,933,831),40675=>array(43,-57,957,845),40676=>array(42,-52,965,853),40677=>array(38,-62,963,819),40678=>array(38,-68,964,833),40679=>array(44,-68,955,837),40680=>array(41,-70,956,836),40681=>array(30,-67,941,817),40682=>array(31,-76,950,823),40683=>array(25,-51,960,793),40684=>array(33,-68,967,835),40685=>array(45,-70,979,828),40686=>array(48,-53,954,832),40687=>array(52,-63,951,832),40688=>array(49,-59,970,852),40689=>array(26,-88,974,841),40690=>array(38,-55,970,864),40691=>array(47,-79,957,813),40692=>array(44,-67,977,833),40693=>array(56,-62,950,843),40694=>array(35,-73,959,817),40695=>array(37,-80,961,835),40696=>array(46,-64,954,836),40697=>array(46,-65,962,830),40698=>array(39,-74,970,826),40699=>array(34,-69,978,836),40700=>array(36,-62,955,835),40701=>array(120,-33,967,794),40702=>array(139,-42,966,803),40703=>array(45,-32,960,788),40704=>array(40,-56,973,837),40705=>array(63,-46,968,829),40706=>array(62,-54,971,823),40707=>array(68,-51,971,843),40708=>array(40,-54,971,844),40709=>array(57,-54,971,858),40710=>array(49,-42,971,784),40711=>array(48,-56,973,845),40712=>array(70,-49,960,829),40713=>array(58,-38,969,809),40714=>array(45,-39,956,834),40715=>array(84,-55,958,819),40716=>array(63,-51,962,822),40717=>array(63,-53,961,822),40718=>array(48,-65,948,801),40719=>array(41,-75,944,782),40720=>array(55,-69,943,792),40721=>array(44,-65,899,835),40722=>array(50,-67,950,824),40723=>array(59,-74,961,837),40724=>array(59,-74,961,833),40725=>array(60,-60,960,832),40726=>array(42,-73,974,833),40727=>array(44,-76,962,827),40728=>array(60,-68,962,828),40729=>array(51,-65,969,833),40730=>array(51,-69,962,827),40731=>array(43,-71,967,830),40732=>array(46,-67,972,829),40733=>array(37,-61,963,811),40734=>array(60,-35,970,818),40735=>array(34,-47,966,826),40736=>array(61,-60,963,836),40737=>array(40,-69,957,810),40738=>array(62,-52,948,830),40739=>array(74,-72,957,836),40740=>array(76,-73,959,835),40741=>array(68,-60,957,840),40742=>array(66,-69,924,826),40743=>array(66,-69,962,831),40744=>array(65,-60,969,838),40745=>array(63,-46,961,847),40746=>array(54,-56,954,846),40747=>array(61,-55,952,847),40748=>array(60,-58,945,820),40749=>array(68,-66,959,835),40750=>array(59,-68,958,840),40751=>array(56,-51,946,827),40752=>array(68,-65,953,836),40753=>array(57,-43,944,846),40754=>array(70,-77,952,834),40755=>array(65,-71,964,837),40756=>array(57,-55,954,832),40757=>array(59,-66,959,843),40758=>array(58,-75,964,839),40759=>array(49,-53,949,838),40760=>array(56,-66,954,840),40761=>array(87,-66,952,829),40762=>array(70,-58,943,825),40763=>array(42,-58,951,851),40764=>array(51,-71,897,843),40765=>array(43,-70,964,854),40766=>array(38,-65,964,850),40767=>array(30,-72,970,851),40768=>array(31,-68,976,843),40769=>array(56,-62,923,858),40770=>array(41,-75,967,833),40771=>array(43,-70,933,842),40772=>array(45,-67,950,825),40773=>array(36,-64,967,848),40774=>array(36,-62,957,860),40775=>array(49,-66,959,846),40776=>array(44,-64,967,841),40777=>array(53,-66,974,840),40778=>array(52,-70,946,831),40779=>array(55,-73,962,831),40780=>array(39,-74,973,847),40781=>array(32,-73,979,846),40782=>array(39,-67,978,846),40783=>array(43,-69,977,833),40784=>array(32,-69,952,834),40785=>array(36,-67,937,842),40786=>array(53,-73,946,829),40787=>array(58,-37,950,836),40788=>array(58,-63,948,836),40789=>array(62,-41,968,840),40790=>array(62,-65,954,840),40791=>array(65,-64,959,837),40792=>array(56,-52,976,860),40793=>array(57,-71,960,835),40794=>array(57,-71,943,851),40795=>array(61,-62,956,830),40796=>array(47,-48,957,835),40797=>array(60,-64,957,834),40798=>array(61,-71,962,833),40799=>array(40,-63,956,836),40800=>array(40,-63,930,836),40801=>array(40,-63,943,836),40802=>array(42,-68,958,846),40803=>array(55,-63,927,836),40804=>array(45,-65,969,839),40805=>array(55,-87,954,830),40806=>array(46,-73,967,836),40807=>array(64,-65,942,836),40808=>array(42,-45,958,839),40809=>array(64,-63,950,837),40810=>array(58,-63,960,836),40811=>array(66,-65,911,829),40812=>array(46,-63,956,836),40813=>array(63,-66,937,825),40814=>array(59,-73,956,831),40815=>array(59,-56,958,844),40816=>array(54,-48,949,851),40817=>array(58,-68,958,828),40818=>array(55,-66,940,836),40819=>array(73,-64,927,839),40820=>array(54,-67,957,837),40821=>array(60,-42,921,877),40822=>array(56,-60,954,846),40823=>array(58,-66,936,836),40824=>array(57,-29,968,829),40825=>array(47,-65,952,847),40826=>array(54,-71,931,837),40827=>array(59,-71,962,830),40828=>array(60,-56,940,839),40829=>array(47,-70,964,839),40830=>array(53,-69,975,829),40831=>array(75,-61,925,827),40832=>array(52,-59,930,817),40833=>array(52,-59,950,842),40834=>array(52,-59,908,842),40835=>array(52,-47,953,817),40836=>array(46,-57,947,826),40837=>array(52,-47,965,828),40838=>array(52,-67,870,817),40839=>array(51,-53,941,824),40840=>array(52,-70,969,817),40841=>array(50,-71,918,817),40842=>array(54,-68,965,821),40843=>array(44,-77,889,813),40844=>array(68,-68,927,817),40845=>array(50,-66,970,833),40846=>array(44,-63,975,797),40847=>array(59,-76,957,838),40848=>array(44,-63,975,845),40849=>array(50,-61,965,834),40850=>array(61,-64,957,838),40851=>array(45,-68,955,833),40852=>array(60,-69,956,850),40853=>array(44,-64,962,858),40854=>array(47,-47,971,819),40855=>array(63,-56,957,829),40856=>array(71,-65,958,837),40857=>array(37,-65,928,823),40858=>array(23,-66,923,834),40859=>array(21,-62,934,828),40860=>array(37,-41,967,846),40861=>array(16,-55,965,851),40862=>array(56,-54,970,843),40863=>array(50,-34,965,827),40864=>array(28,-64,976,848),40865=>array(56,-48,975,857),40866=>array(31,-62,986,863),40867=>array(29,-68,969,841),40868=>array(31,-43,962,857),40869=>array(31,-74,969,857),44032=>array(98,-69,936,842),44033=>array(88,-59,936,837),44034=>array(88,-61,936,837),44035=>array(88,-71,936,837),44036=>array(90,-45,936,842),44037=>array(88,-69,936,837),44038=>array(88,-76,936,837),44039=>array(88,-44,936,837),44040=>array(88,-62,936,837),44041=>array(88,-64,936,837),44042=>array(88,-64,936,837),44043=>array(88,-64,936,837),44044=>array(88,-70,936,837),44045=>array(88,-64,936,837),44046=>array(88,-64,936,837),44047=>array(88,-76,936,837),44048=>array(88,-62,936,837),44049=>array(88,-61,936,837),44050=>array(88,-70,936,837),44051=>array(88,-74,936,837),44052=>array(88,-69,936,837),44053=>array(88,-67,936,837),44054=>array(88,-72,936,837),44055=>array(88,-71,936,837),44056=>array(88,-66,936,837),44057=>array(88,-59,936,837),44058=>array(88,-60,936,837),44059=>array(88,-69,936,837),44060=>array(104,-69,907,842),44061=>array(88,-61,907,842),44062=>array(88,-61,907,842),44063=>array(88,-71,931,842),44064=>array(90,-46,907,842),44065=>array(88,-68,912,842),44066=>array(88,-76,907,842),44067=>array(88,-44,921,842),44068=>array(88,-62,917,842),44069=>array(88,-64,907,842),44070=>array(88,-64,908,842),44071=>array(88,-64,908,842),44072=>array(88,-69,923,842),44073=>array(88,-64,908,842),44074=>array(88,-64,908,842),44075=>array(88,-76,907,842),44076=>array(88,-62,907,842),44077=>array(88,-61,907,842),44078=>array(88,-69,922,842),44079=>array(88,-74,929,842),44080=>array(88,-69,927,842),44081=>array(88,-68,911,842),44082=>array(88,-72,929,842),44083=>array(88,-70,936,842),44084=>array(88,-66,908,842),44085=>array(88,-59,916,842),44086=>array(88,-60,928,842),44087=>array(88,-68,908,842),44088=>array(98,-68,935,843),44089=>array(90,-59,936,842),44090=>array(90,-61,936,842),44091=>array(90,-71,936,842),44092=>array(90,-45,936,842),44093=>array(90,-69,936,842),44094=>array(90,-76,936,842),44095=>array(90,-44,936,842),44096=>array(90,-62,936,842),44097=>array(90,-64,936,842),44098=>array(90,-64,936,842),44099=>array(90,-64,936,842),44100=>array(90,-70,936,842),44101=>array(90,-64,936,842),44102=>array(90,-64,936,842),44103=>array(90,-76,936,842),44104=>array(90,-62,936,842),44105=>array(90,-61,936,842),44106=>array(90,-70,936,842),44107=>array(90,-74,936,842),44108=>array(90,-69,936,842),44109=>array(90,-67,936,842),44110=>array(90,-72,936,842),44111=>array(90,-71,936,842),44112=>array(90,-66,936,842),44113=>array(90,-59,936,842),44114=>array(90,-60,936,842),44115=>array(90,-69,936,842),44116=>array(104,-69,907,842),44117=>array(88,-61,907,842),44118=>array(88,-61,907,842),44119=>array(88,-71,931,842),44120=>array(90,-46,907,842),44121=>array(88,-68,912,842),44122=>array(88,-76,907,842),44123=>array(88,-44,921,842),44124=>array(88,-62,917,842),44125=>array(88,-64,907,842),44126=>array(88,-64,908,842),44127=>array(88,-64,908,842),44128=>array(88,-69,923,842),44129=>array(88,-64,908,842),44130=>array(88,-64,908,842),44131=>array(88,-76,907,842),44132=>array(88,-62,907,842),44133=>array(88,-61,907,842),44134=>array(88,-69,922,842),44135=>array(88,-74,929,842),44136=>array(88,-69,927,842),44137=>array(88,-68,911,842),44138=>array(88,-72,929,842),44139=>array(88,-70,936,842),44140=>array(88,-66,908,842),44141=>array(88,-59,916,842),44142=>array(88,-60,928,842),44143=>array(88,-68,908,842),44144=>array(98,-70,907,841),44145=>array(90,-61,907,841),44146=>array(90,-61,907,841),44147=>array(90,-71,931,841),44148=>array(90,-46,907,841),44149=>array(90,-68,912,841),44150=>array(90,-76,907,841),44151=>array(90,-44,921,841),44152=>array(90,-62,917,841),44153=>array(90,-64,907,841),44154=>array(90,-64,908,841),44155=>array(90,-64,908,841),44156=>array(90,-69,923,841),44157=>array(90,-64,908,841),44158=>array(90,-64,908,841),44159=>array(90,-76,906,841),44160=>array(90,-62,907,841),44161=>array(90,-61,907,841),44162=>array(90,-69,922,841),44163=>array(90,-74,929,841),44164=>array(90,-69,927,841),44165=>array(90,-68,911,841),44166=>array(90,-72,929,841),44167=>array(90,-70,936,841),44168=>array(90,-66,908,841),44169=>array(90,-59,916,841),44170=>array(90,-60,928,841),44171=>array(90,-68,908,841),44172=>array(93,-68,907,843),44173=>array(74,-61,907,843),44174=>array(74,-61,907,843),44175=>array(74,-71,931,843),44176=>array(70,-46,907,843),44177=>array(74,-68,912,843),44178=>array(74,-76,907,843),44179=>array(74,-44,921,843),44180=>array(74,-62,917,843),44181=>array(74,-64,907,843),44182=>array(74,-64,908,843),44183=>array(74,-64,908,843),44184=>array(74,-69,923,843),44185=>array(74,-64,908,843),44186=>array(74,-64,908,843),44187=>array(74,-76,907,843),44188=>array(74,-62,907,843),44189=>array(74,-61,907,843),44190=>array(74,-69,922,843),44191=>array(74,-74,929,843),44192=>array(74,-69,927,843),44193=>array(74,-68,911,843),44194=>array(74,-72,929,843),44195=>array(74,-70,936,843),44196=>array(74,-66,908,843),44197=>array(74,-59,916,843),44198=>array(74,-60,928,843),44199=>array(74,-68,908,843),44200=>array(98,-70,907,842),44201=>array(90,-61,908,842),44202=>array(90,-61,908,842),44203=>array(90,-71,931,842),44204=>array(90,-46,907,842),44205=>array(90,-68,912,842),44206=>array(90,-76,908,842),44207=>array(90,-44,921,842),44208=>array(90,-62,917,842),44209=>array(90,-64,908,842),44210=>array(90,-64,908,842),44211=>array(90,-64,908,842),44212=>array(90,-69,923,842),44213=>array(90,-64,908,842),44214=>array(90,-64,908,842),44215=>array(90,-76,908,842),44216=>array(90,-62,908,842),44217=>array(90,-61,908,842),44218=>array(90,-69,922,842),44219=>array(90,-74,929,842),44220=>array(90,-69,927,842),44221=>array(90,-68,911,842),44222=>array(90,-72,929,842),44223=>array(90,-70,936,842),44224=>array(90,-66,908,842),44225=>array(90,-59,916,842),44226=>array(90,-60,928,842),44227=>array(90,-68,908,842),44228=>array(78,-68,907,843),44229=>array(79,-61,907,843),44230=>array(79,-61,907,843),44231=>array(79,-71,931,843),44232=>array(70,-46,907,843),44233=>array(79,-68,912,843),44234=>array(79,-76,907,843),44235=>array(79,-44,921,843),44236=>array(79,-62,917,843),44237=>array(79,-64,907,843),44238=>array(79,-64,908,843),44239=>array(79,-64,908,843),44240=>array(79,-69,923,843),44241=>array(79,-64,908,843),44242=>array(79,-64,908,843),44243=>array(79,-76,907,843),44244=>array(79,-62,907,843),44245=>array(79,-61,907,843),44246=>array(79,-69,922,843),44247=>array(79,-74,929,843),44248=>array(79,-69,927,843),44249=>array(79,-68,911,843),44250=>array(79,-72,929,843),44251=>array(79,-70,936,843),44252=>array(79,-66,908,843),44253=>array(79,-59,916,843),44254=>array(79,-60,928,843),44255=>array(79,-68,908,843),44256=>array(62,27,943,700),44257=>array(79,-61,921,770),44258=>array(79,-61,921,770),44259=>array(79,-71,921,770),44260=>array(79,-46,921,770),44261=>array(79,-68,921,770),44262=>array(79,-74,921,770),44263=>array(79,-44,921,770),44264=>array(79,-62,921,770),44265=>array(79,-64,921,770),44266=>array(79,-64,921,770),44267=>array(79,-63,921,770),44268=>array(79,-68,921,770),44269=>array(79,-64,921,770),44270=>array(79,-63,921,770),44271=>array(79,-74,921,770),44272=>array(79,-62,921,770),44273=>array(79,-61,921,770),44274=>array(79,-69,921,770),44275=>array(79,-74,921,770),44276=>array(79,-69,921,770),44277=>array(79,-68,921,770),44278=>array(79,-72,921,770),44279=>array(79,-70,921,770),44280=>array(79,-66,921,770),44281=>array(79,-59,921,770),44282=>array(79,-60,921,770),44283=>array(79,-68,921,770),44284=>array(38,-68,935,843),44285=>array(64,-59,936,842),44286=>array(64,-61,936,842),44287=>array(64,-71,936,842),44288=>array(57,-45,936,842),44289=>array(64,-69,936,842),44290=>array(64,-76,936,842),44291=>array(64,-44,936,842),44292=>array(64,-62,936,842),44293=>array(64,-64,936,842),44294=>array(64,-64,936,842),44295=>array(64,-64,936,842),44296=>array(64,-70,936,842),44297=>array(64,-64,936,842),44298=>array(64,-64,936,842),44299=>array(64,-76,936,842),44300=>array(64,-62,936,842),44301=>array(64,-61,936,842),44302=>array(64,-70,936,842),44303=>array(64,-74,936,842),44304=>array(64,-69,936,842),44305=>array(64,-67,936,842),44306=>array(64,-72,936,842),44307=>array(64,-71,936,842),44308=>array(64,-66,936,842),44309=>array(64,-59,936,842),44310=>array(64,-60,936,842),44311=>array(64,-69,936,842),44312=>array(51,-69,907,842),44313=>array(65,-61,907,841),44314=>array(65,-61,907,841),44315=>array(65,-71,931,841),44316=>array(53,-46,907,841),44317=>array(65,-68,912,841),44318=>array(65,-76,907,841),44319=>array(65,-44,921,841),44320=>array(65,-62,917,841),44321=>array(65,-64,907,841),44322=>array(65,-64,908,841),44323=>array(65,-64,908,841),44324=>array(65,-69,923,841),44325=>array(65,-64,908,841),44326=>array(65,-64,908,841),44327=>array(65,-76,907,841),44328=>array(65,-62,907,841),44329=>array(65,-61,907,841),44330=>array(65,-69,922,841),44331=>array(65,-74,929,841),44332=>array(65,-69,927,841),44333=>array(65,-68,911,841),44334=>array(65,-72,929,841),44335=>array(65,-70,936,841),44336=>array(65,-66,908,841),44337=>array(65,-59,916,841),44338=>array(65,-60,928,841),44339=>array(65,-68,908,841),44340=>array(60,-69,907,842),44341=>array(64,-61,907,842),44342=>array(64,-61,907,842),44343=>array(64,-71,931,842),44344=>array(72,-46,907,842),44345=>array(64,-68,912,842),44346=>array(64,-76,907,842),44347=>array(64,-44,921,842),44348=>array(64,-62,917,842),44349=>array(64,-64,907,842),44350=>array(64,-64,908,842),44351=>array(64,-64,908,842),44352=>array(64,-69,923,842),44353=>array(64,-64,908,842),44354=>array(64,-64,908,842),44355=>array(64,-76,907,842),44356=>array(64,-62,907,842),44357=>array(64,-61,907,842),44358=>array(64,-69,922,842),44359=>array(64,-74,929,842),44360=>array(64,-69,927,842),44361=>array(64,-68,911,842),44362=>array(64,-72,929,842),44363=>array(64,-70,936,842),44364=>array(64,-66,908,842),44365=>array(64,-59,916,842),44366=>array(64,-60,928,842),44367=>array(64,-68,908,842),44368=>array(62,27,943,723),44369=>array(62,-61,943,770),44370=>array(62,-61,943,770),44371=>array(62,-71,943,770),44372=>array(62,-46,943,770),44373=>array(62,-68,943,770),44374=>array(62,-74,943,770),44375=>array(62,-44,943,770),44376=>array(62,-62,943,770),44377=>array(62,-64,943,770),44378=>array(62,-64,943,770),44379=>array(62,-63,943,770),44380=>array(62,-68,943,770),44381=>array(62,-64,943,770),44382=>array(62,-63,943,770),44383=>array(62,-74,943,770),44384=>array(62,-62,943,770),44385=>array(62,-61,943,770),44386=>array(62,-69,943,770),44387=>array(62,-74,943,770),44388=>array(62,-69,943,770),44389=>array(62,-68,943,770),44390=>array(62,-72,943,770),44391=>array(62,-70,943,770),44392=>array(62,-66,943,770),44393=>array(62,-59,943,770),44394=>array(62,-60,943,770),44395=>array(62,-68,943,770),44396=>array(79,-64,920,780),44397=>array(79,-61,921,769),44398=>array(79,-61,921,769),44399=>array(79,-71,921,769),44400=>array(79,-46,921,768),44401=>array(79,-68,921,769),44402=>array(79,-74,921,769),44403=>array(79,-44,921,769),44404=>array(79,-62,921,769),44405=>array(79,-64,921,769),44406=>array(79,-64,921,769),44407=>array(79,-63,921,769),44408=>array(79,-68,921,769),44409=>array(79,-64,921,769),44410=>array(79,-63,921,769),44411=>array(79,-74,921,769),44412=>array(79,-62,921,769),44413=>array(79,-61,921,769),44414=>array(79,-69,921,769),44415=>array(79,-74,921,769),44416=>array(79,-69,921,769),44417=>array(79,-68,921,769),44418=>array(79,-72,921,769),44419=>array(79,-70,921,769),44420=>array(79,-66,921,769),44421=>array(79,-59,921,769),44422=>array(79,-60,921,769),44423=>array(79,-68,921,769),44424=>array(67,-69,907,842),44425=>array(75,-61,907,841),44426=>array(75,-61,907,841),44427=>array(75,-71,931,841),44428=>array(81,-46,907,841),44429=>array(75,-68,912,841),44430=>array(75,-76,907,841),44431=>array(75,-44,921,841),44432=>array(75,-62,917,841),44433=>array(75,-64,907,841),44434=>array(75,-64,908,841),44435=>array(75,-64,908,841),44436=>array(75,-69,923,841),44437=>array(75,-64,908,841),44438=>array(75,-64,908,841),44439=>array(75,-76,906,841),44440=>array(75,-62,907,841),44441=>array(75,-61,907,841),44442=>array(75,-69,922,841),44443=>array(75,-74,929,841),44444=>array(75,-69,927,841),44445=>array(75,-68,911,841),44446=>array(75,-72,929,841),44447=>array(75,-70,936,841),44448=>array(75,-66,908,841),44449=>array(75,-59,916,841),44450=>array(75,-60,928,841),44451=>array(75,-68,908,841),44452=>array(40,-69,908,842),44453=>array(70,-61,907,843),44454=>array(70,-61,907,843),44455=>array(70,-71,931,843),44456=>array(79,-46,907,843),44457=>array(70,-68,912,843),44458=>array(70,-76,907,843),44459=>array(70,-44,921,843),44460=>array(70,-62,917,843),44461=>array(70,-64,907,843),44462=>array(70,-64,908,843),44463=>array(70,-64,908,843),44464=>array(70,-69,923,843),44465=>array(70,-64,908,843),44466=>array(70,-64,908,843),44467=>array(70,-76,907,843),44468=>array(70,-62,907,843),44469=>array(70,-61,907,843),44470=>array(70,-69,922,843),44471=>array(70,-74,929,843),44472=>array(70,-69,927,843),44473=>array(70,-68,911,843),44474=>array(70,-72,929,843),44475=>array(70,-70,936,843),44476=>array(70,-66,908,843),44477=>array(70,-59,916,843),44478=>array(70,-60,928,843),44479=>array(70,-68,908,843),44480=>array(55,-69,907,842),44481=>array(64,-61,907,842),44482=>array(64,-61,907,842),44483=>array(64,-71,931,842),44484=>array(64,-46,907,842),44485=>array(64,-68,912,842),44486=>array(64,-76,907,842),44487=>array(64,-44,921,842),44488=>array(64,-62,917,842),44489=>array(64,-64,907,842),44490=>array(64,-64,908,842),44491=>array(64,-64,908,842),44492=>array(64,-69,923,842),44493=>array(64,-64,908,842),44494=>array(64,-64,908,842),44495=>array(64,-76,907,842),44496=>array(64,-62,907,842),44497=>array(64,-61,907,842),44498=>array(64,-69,922,842),44499=>array(64,-74,929,842),44500=>array(64,-69,927,842),44501=>array(64,-68,911,842),44502=>array(64,-72,929,842),44503=>array(64,-70,936,842),44504=>array(64,-66,908,842),44505=>array(64,-59,916,842),44506=>array(64,-60,928,842),44507=>array(64,-68,908,842),44508=>array(71,-64,928,780),44509=>array(79,-61,921,768),44510=>array(79,-61,921,768),44511=>array(79,-71,921,768),44512=>array(79,-46,921,769),44513=>array(79,-68,921,768),44514=>array(79,-74,921,768),44515=>array(79,-44,921,768),44516=>array(79,-62,921,768),44517=>array(79,-64,921,768),44518=>array(79,-64,921,768),44519=>array(79,-63,921,768),44520=>array(79,-68,921,768),44521=>array(79,-64,921,768),44522=>array(79,-63,921,768),44523=>array(79,-74,921,768),44524=>array(79,-62,921,768),44525=>array(79,-61,921,768),44526=>array(79,-69,921,768),44527=>array(79,-74,921,768),44528=>array(79,-69,921,768),44529=>array(79,-68,921,768),44530=>array(79,-72,921,768),44531=>array(79,-70,921,768),44532=>array(79,-66,921,768),44533=>array(79,-59,921,768),44534=>array(79,-60,921,768),44535=>array(79,-68,921,768),44536=>array(57,62,943,685),44537=>array(78,-61,919,769),44538=>array(78,-61,919,769),44539=>array(78,-71,919,769),44540=>array(79,-46,921,770),44541=>array(78,-68,919,769),44542=>array(78,-74,919,769),44543=>array(78,-44,919,769),44544=>array(78,-62,919,769),44545=>array(78,-64,919,769),44546=>array(78,-64,919,769),44547=>array(78,-63,919,769),44548=>array(78,-68,919,769),44549=>array(78,-64,919,769),44550=>array(78,-63,919,769),44551=>array(78,-74,919,769),44552=>array(78,-62,919,769),44553=>array(78,-61,919,769),44554=>array(78,-69,919,769),44555=>array(78,-74,919,769),44556=>array(78,-69,919,769),44557=>array(78,-68,919,769),44558=>array(78,-72,919,769),44559=>array(78,-70,919,769),44560=>array(78,-66,919,769),44561=>array(78,-59,919,769),44562=>array(78,-60,919,769),44563=>array(78,-68,919,769),44564=>array(52,-69,907,842),44565=>array(64,-61,907,842),44566=>array(64,-61,907,842),44567=>array(64,-71,931,842),44568=>array(68,-46,907,842),44569=>array(64,-68,912,842),44570=>array(64,-76,907,842),44571=>array(64,-44,921,842),44572=>array(64,-62,917,842),44573=>array(64,-64,907,842),44574=>array(64,-64,908,842),44575=>array(64,-64,908,842),44576=>array(64,-69,923,842),44577=>array(64,-64,908,842),44578=>array(64,-64,908,842),44579=>array(64,-76,907,842),44580=>array(64,-62,907,842),44581=>array(64,-61,907,842),44582=>array(64,-69,922,842),44583=>array(64,-74,929,842),44584=>array(64,-69,927,842),44585=>array(64,-68,911,842),44586=>array(64,-72,929,842),44587=>array(64,-70,936,842),44588=>array(64,-66,908,842),44589=>array(64,-59,916,842),44590=>array(64,-60,928,842),44591=>array(64,-68,908,842),44592=>array(90,-69,907,842),44593=>array(63,-61,907,842),44594=>array(63,-61,907,842),44595=>array(63,-71,931,842),44596=>array(77,-46,907,842),44597=>array(63,-68,912,842),44598=>array(63,-76,907,842),44599=>array(63,-44,921,842),44600=>array(63,-62,917,842),44601=>array(63,-64,907,842),44602=>array(63,-64,908,842),44603=>array(63,-64,908,842),44604=>array(63,-69,923,842),44605=>array(63,-64,908,842),44606=>array(63,-64,908,842),44607=>array(63,-76,907,842),44608=>array(63,-62,907,842),44609=>array(63,-61,907,842),44610=>array(63,-69,922,842),44611=>array(63,-74,929,842),44612=>array(63,-69,927,842),44613=>array(63,-68,911,842),44614=>array(63,-72,929,842),44615=>array(63,-70,936,842),44616=>array(63,-66,908,842),44617=>array(63,-59,916,842),44618=>array(63,-60,928,842),44619=>array(63,-68,908,842),44620=>array(46,-69,936,842),44621=>array(88,-59,936,842),44622=>array(88,-61,936,842),44623=>array(88,-71,936,842),44624=>array(60,-45,936,842),44625=>array(88,-69,936,842),44626=>array(88,-76,936,842),44627=>array(88,-44,936,842),44628=>array(88,-62,936,842),44629=>array(88,-64,936,842),44630=>array(88,-64,936,842),44631=>array(88,-64,936,842),44632=>array(88,-70,936,842),44633=>array(88,-64,936,842),44634=>array(88,-64,936,842),44635=>array(88,-76,936,842),44636=>array(88,-62,936,842),44637=>array(88,-61,936,842),44638=>array(88,-70,936,842),44639=>array(88,-74,936,842),44640=>array(88,-69,936,842),44641=>array(88,-67,936,842),44642=>array(88,-72,936,842),44643=>array(88,-71,936,842),44644=>array(88,-66,936,842),44645=>array(88,-59,936,842),44646=>array(88,-60,936,842),44647=>array(88,-69,936,842),44648=>array(41,-69,907,842),44649=>array(68,-61,907,837),44650=>array(68,-61,907,837),44651=>array(68,-71,931,837),44652=>array(50,-46,907,842),44653=>array(68,-68,912,837),44654=>array(68,-76,907,837),44655=>array(68,-44,921,837),44656=>array(68,-62,917,837),44657=>array(68,-64,907,837),44658=>array(68,-64,908,837),44659=>array(68,-64,908,837),44660=>array(68,-69,923,837),44661=>array(68,-64,908,837),44662=>array(68,-64,908,837),44663=>array(68,-76,907,837),44664=>array(68,-62,907,837),44665=>array(68,-61,907,837),44666=>array(68,-69,922,837),44667=>array(68,-74,929,837),44668=>array(68,-69,927,837),44669=>array(68,-68,911,837),44670=>array(68,-72,929,837),44671=>array(68,-70,936,837),44672=>array(68,-66,908,837),44673=>array(68,-59,916,837),44674=>array(68,-60,928,837),44675=>array(68,-68,908,837),44676=>array(46,-69,936,842),44677=>array(88,-59,936,842),44678=>array(88,-61,936,842),44679=>array(88,-71,936,842),44680=>array(60,-45,936,842),44681=>array(88,-69,936,842),44682=>array(88,-76,936,842),44683=>array(88,-44,936,842),44684=>array(88,-62,936,842),44685=>array(88,-64,936,842),44686=>array(88,-64,936,842),44687=>array(88,-64,936,842),44688=>array(88,-70,936,842),44689=>array(88,-64,936,842),44690=>array(88,-64,936,842),44691=>array(88,-76,936,842),44692=>array(88,-62,936,842),44693=>array(88,-61,936,842),44694=>array(88,-70,936,842),44695=>array(88,-74,936,842),44696=>array(88,-69,936,842),44697=>array(88,-67,936,842),44698=>array(88,-72,936,842),44699=>array(88,-71,936,842),44700=>array(88,-66,936,842),44701=>array(88,-59,936,842),44702=>array(88,-60,936,842),44703=>array(88,-69,936,842),44704=>array(41,-69,907,842),44705=>array(68,-61,907,842),44706=>array(68,-61,907,842),44707=>array(68,-71,931,842),44708=>array(50,-46,907,842),44709=>array(68,-68,912,842),44710=>array(68,-76,907,842),44711=>array(68,-44,921,842),44712=>array(68,-62,917,842),44713=>array(68,-64,907,842),44714=>array(68,-64,908,842),44715=>array(68,-64,908,842),44716=>array(68,-69,923,842),44717=>array(68,-64,908,842),44718=>array(68,-64,908,842),44719=>array(68,-76,907,842),44720=>array(68,-62,907,842),44721=>array(68,-61,907,842),44722=>array(68,-69,922,842),44723=>array(68,-74,929,842),44724=>array(68,-69,927,842),44725=>array(68,-68,911,842),44726=>array(68,-72,929,842),44727=>array(68,-70,936,842),44728=>array(68,-66,908,842),44729=>array(68,-59,916,842),44730=>array(68,-60,928,842),44731=>array(68,-68,908,842),44732=>array(46,-70,907,841),44733=>array(88,-61,907,836),44734=>array(88,-61,907,836),44735=>array(88,-71,931,836),44736=>array(60,-46,907,841),44737=>array(88,-68,912,836),44738=>array(88,-76,907,836),44739=>array(88,-44,921,836),44740=>array(88,-62,917,836),44741=>array(88,-64,907,836),44742=>array(88,-64,908,836),44743=>array(88,-64,908,836),44744=>array(88,-69,923,836),44745=>array(88,-64,908,836),44746=>array(88,-64,908,836),44747=>array(88,-76,906,836),44748=>array(88,-62,907,836),44749=>array(88,-61,907,836),44750=>array(88,-69,922,836),44751=>array(88,-74,929,836),44752=>array(88,-69,927,836),44753=>array(88,-68,911,836),44754=>array(88,-72,929,836),44755=>array(88,-70,936,836),44756=>array(88,-66,908,836),44757=>array(88,-59,916,836),44758=>array(88,-60,928,836),44759=>array(88,-68,908,836),44760=>array(36,-68,907,843),44761=>array(53,-61,907,843),44762=>array(53,-61,907,843),44763=>array(53,-71,931,843),44764=>array(35,-46,907,843),44765=>array(53,-68,912,843),44766=>array(53,-76,907,843),44767=>array(53,-44,921,843),44768=>array(53,-62,917,843),44769=>array(53,-64,907,843),44770=>array(53,-64,908,843),44771=>array(53,-64,908,843),44772=>array(53,-69,923,843),44773=>array(53,-64,908,843),44774=>array(53,-64,908,843),44775=>array(53,-76,907,843),44776=>array(53,-62,907,843),44777=>array(53,-61,907,843),44778=>array(53,-69,922,843),44779=>array(53,-74,929,843),44780=>array(53,-69,927,843),44781=>array(53,-68,911,843),44782=>array(53,-72,929,843),44783=>array(53,-70,936,843),44784=>array(53,-66,908,843),44785=>array(53,-59,916,843),44786=>array(53,-60,928,843),44787=>array(53,-68,908,843),44788=>array(46,-69,908,842),44789=>array(88,-61,909,842),44790=>array(88,-61,909,842),44791=>array(88,-71,931,842),44792=>array(60,-46,909,841),44793=>array(88,-68,912,842),44794=>array(88,-76,909,842),44795=>array(88,-44,921,842),44796=>array(88,-62,917,842),44797=>array(88,-64,909,842),44798=>array(88,-64,909,842),44799=>array(88,-64,909,842),44800=>array(88,-69,923,842),44801=>array(88,-64,909,842),44802=>array(88,-64,909,842),44803=>array(88,-76,909,842),44804=>array(88,-62,909,842),44805=>array(88,-61,909,842),44806=>array(88,-69,922,842),44807=>array(88,-74,929,842),44808=>array(88,-69,927,842),44809=>array(88,-68,911,842),44810=>array(88,-72,929,842),44811=>array(88,-70,936,842),44812=>array(88,-66,909,842),44813=>array(88,-59,916,842),44814=>array(88,-60,928,842),44815=>array(88,-68,909,842),44816=>array(36,-68,907,843),44817=>array(53,-61,907,838),44818=>array(53,-61,907,838),44819=>array(53,-71,931,838),44820=>array(35,-46,907,843),44821=>array(53,-68,912,838),44822=>array(53,-76,907,838),44823=>array(53,-44,921,838),44824=>array(53,-62,917,838),44825=>array(53,-64,907,838),44826=>array(53,-64,908,838),44827=>array(53,-64,908,838),44828=>array(53,-69,923,838),44829=>array(53,-64,908,838),44830=>array(53,-64,908,838),44831=>array(53,-76,907,838),44832=>array(53,-62,907,838),44833=>array(53,-61,907,838),44834=>array(53,-69,922,838),44835=>array(53,-74,929,838),44836=>array(53,-69,927,838),44837=>array(53,-68,911,838),44838=>array(53,-72,929,838),44839=>array(53,-70,936,838),44840=>array(53,-66,908,838),44841=>array(53,-59,916,838),44842=>array(53,-60,928,838),44843=>array(53,-68,908,838),44844=>array(60,12,940,714),44845=>array(79,-61,921,767),44846=>array(79,-61,921,767),44847=>array(79,-71,921,767),44848=>array(79,-46,921,766),44849=>array(79,-68,921,767),44850=>array(79,-74,921,767),44851=>array(79,-44,921,767),44852=>array(79,-62,921,767),44853=>array(79,-64,921,767),44854=>array(79,-64,921,767),44855=>array(79,-63,921,767),44856=>array(79,-68,921,767),44857=>array(79,-64,921,767),44858=>array(79,-63,921,767),44859=>array(79,-74,921,767),44860=>array(79,-62,921,767),44861=>array(79,-61,921,767),44862=>array(79,-69,921,767),44863=>array(79,-74,921,767),44864=>array(79,-69,921,767),44865=>array(79,-68,921,767),44866=>array(79,-72,921,767),44867=>array(79,-70,921,767),44868=>array(79,-66,921,767),44869=>array(79,-59,921,767),44870=>array(79,-60,921,767),44871=>array(79,-68,921,767),44872=>array(52,-69,936,842),44873=>array(69,-59,936,837),44874=>array(69,-61,936,837),44875=>array(69,-71,936,837),44876=>array(72,-45,936,842),44877=>array(69,-69,936,837),44878=>array(69,-76,936,837),44879=>array(69,-44,936,837),44880=>array(69,-62,936,837),44881=>array(69,-64,936,837),44882=>array(69,-64,936,837),44883=>array(69,-64,936,837),44884=>array(69,-70,936,837),44885=>array(69,-64,936,837),44886=>array(69,-64,936,837),44887=>array(69,-76,936,837),44888=>array(69,-62,936,837),44889=>array(69,-61,936,837),44890=>array(69,-70,936,837),44891=>array(69,-74,936,837),44892=>array(69,-69,936,837),44893=>array(69,-67,936,837),44894=>array(69,-72,936,837),44895=>array(69,-71,936,837),44896=>array(69,-66,936,837),44897=>array(69,-59,936,837),44898=>array(69,-60,936,837),44899=>array(69,-69,936,837),44900=>array(68,-69,907,842),44901=>array(70,-61,907,842),44902=>array(70,-61,907,842),44903=>array(70,-71,931,842),44904=>array(57,-46,907,842),44905=>array(70,-68,912,842),44906=>array(70,-76,907,842),44907=>array(70,-44,921,842),44908=>array(70,-62,917,842),44909=>array(70,-64,907,842),44910=>array(70,-64,908,842),44911=>array(70,-64,908,842),44912=>array(70,-69,923,842),44913=>array(70,-64,908,842),44914=>array(70,-64,908,842),44915=>array(70,-76,907,842),44916=>array(70,-62,907,842),44917=>array(70,-61,907,842),44918=>array(70,-69,922,842),44919=>array(70,-74,929,842),44920=>array(70,-69,927,842),44921=>array(70,-68,911,842),44922=>array(70,-72,929,842),44923=>array(70,-70,936,842),44924=>array(70,-66,908,842),44925=>array(70,-59,916,842),44926=>array(70,-60,928,842),44927=>array(70,-68,908,842),44928=>array(78,-69,907,842),44929=>array(64,-61,907,842),44930=>array(64,-61,907,842),44931=>array(64,-71,931,842),44932=>array(69,-46,907,842),44933=>array(64,-68,912,842),44934=>array(64,-76,907,842),44935=>array(64,-44,921,842),44936=>array(64,-62,917,842),44937=>array(64,-64,907,842),44938=>array(64,-64,908,842),44939=>array(64,-64,908,842),44940=>array(64,-69,923,842),44941=>array(64,-64,908,842),44942=>array(64,-64,908,842),44943=>array(64,-76,907,842),44944=>array(64,-62,907,842),44945=>array(64,-61,907,842),44946=>array(64,-69,922,842),44947=>array(64,-74,929,842),44948=>array(64,-69,927,842),44949=>array(64,-68,911,842),44950=>array(64,-72,929,842),44951=>array(64,-70,936,842),44952=>array(64,-66,908,842),44953=>array(64,-59,916,842),44954=>array(64,-60,928,842),44955=>array(64,-68,908,842),44956=>array(60,32,940,714),44957=>array(79,-61,921,794),44958=>array(79,-61,921,794),44959=>array(79,-71,921,794),44960=>array(79,-46,921,785),44961=>array(79,-68,921,794),44962=>array(79,-74,921,794),44963=>array(79,-44,921,794),44964=>array(79,-62,921,794),44965=>array(79,-64,921,794),44966=>array(79,-64,921,794),44967=>array(79,-63,921,794),44968=>array(79,-68,921,794),44969=>array(79,-64,921,794),44970=>array(79,-63,921,794),44971=>array(79,-74,921,794),44972=>array(79,-62,921,794),44973=>array(79,-61,921,794),44974=>array(79,-69,921,794),44975=>array(79,-74,921,794),44976=>array(79,-69,921,794),44977=>array(79,-68,921,794),44978=>array(79,-72,921,794),44979=>array(79,-70,921,794),44980=>array(79,-66,921,794),44981=>array(79,-59,921,794),44982=>array(79,-60,921,794),44983=>array(79,-68,921,794),44984=>array(79,-64,921,776),44985=>array(79,-61,921,766),44986=>array(79,-61,921,766),44987=>array(79,-71,921,766),44988=>array(79,-46,921,767),44989=>array(79,-68,921,766),44990=>array(79,-74,921,766),44991=>array(79,-44,921,766),44992=>array(79,-62,921,766),44993=>array(79,-64,921,766),44994=>array(79,-64,921,766),44995=>array(79,-63,921,766),44996=>array(79,-68,921,766),44997=>array(79,-64,921,766),44998=>array(79,-63,921,766),44999=>array(79,-74,921,766),45000=>array(79,-62,921,766),45001=>array(79,-61,921,766),45002=>array(79,-69,921,766),45003=>array(79,-74,921,766),45004=>array(79,-69,921,766),45005=>array(79,-68,921,766),45006=>array(79,-72,921,766),45007=>array(79,-70,921,766),45008=>array(79,-66,921,766),45009=>array(79,-59,921,766),45010=>array(79,-60,921,766),45011=>array(79,-68,921,766),45012=>array(78,-70,907,841),45013=>array(68,-61,907,841),45014=>array(68,-61,907,841),45015=>array(68,-71,931,841),45016=>array(80,-46,907,841),45017=>array(68,-68,912,841),45018=>array(68,-76,907,841),45019=>array(68,-44,921,841),45020=>array(68,-62,917,841),45021=>array(68,-64,907,841),45022=>array(68,-64,908,841),45023=>array(68,-64,908,841),45024=>array(68,-69,923,841),45025=>array(68,-64,908,841),45026=>array(68,-64,908,841),45027=>array(68,-76,906,841),45028=>array(68,-62,907,841),45029=>array(68,-61,907,841),45030=>array(68,-69,922,841),45031=>array(68,-74,929,841),45032=>array(68,-69,927,841),45033=>array(68,-68,911,841),45034=>array(68,-72,929,841),45035=>array(68,-70,936,841),45036=>array(68,-66,908,841),45037=>array(68,-59,916,841),45038=>array(68,-60,928,841),45039=>array(68,-68,908,841),45040=>array(50,-68,912,843),45041=>array(67,-61,907,838),45042=>array(67,-61,907,838),45043=>array(67,-71,931,838),45044=>array(75,-46,907,843),45045=>array(67,-68,912,838),45046=>array(67,-76,907,838),45047=>array(67,-44,921,838),45048=>array(67,-62,917,838),45049=>array(67,-64,907,838),45050=>array(67,-64,908,838),45051=>array(67,-64,908,838),45052=>array(67,-69,923,838),45053=>array(67,-64,908,838),45054=>array(67,-64,908,838),45055=>array(67,-76,907,838),45056=>array(67,-62,907,838),45057=>array(67,-61,907,838),45058=>array(67,-69,922,838),45059=>array(67,-74,929,838),45060=>array(67,-69,927,838),45061=>array(67,-68,911,838),45062=>array(67,-72,929,838),45063=>array(67,-70,936,838),45064=>array(67,-66,908,838),45065=>array(67,-59,916,838),45066=>array(67,-60,928,838),45067=>array(67,-68,908,838),45068=>array(64,-69,907,842),45069=>array(65,-61,907,842),45070=>array(65,-61,907,842),45071=>array(65,-71,931,842),45072=>array(78,-46,907,842),45073=>array(65,-68,912,842),45074=>array(65,-76,907,842),45075=>array(65,-44,921,842),45076=>array(65,-62,917,842),45077=>array(65,-64,907,842),45078=>array(65,-64,908,842),45079=>array(65,-64,908,842),45080=>array(65,-69,923,842),45081=>array(65,-64,908,842),45082=>array(65,-64,908,842),45083=>array(65,-76,907,842),45084=>array(65,-62,907,842),45085=>array(65,-61,907,842),45086=>array(65,-69,922,842),45087=>array(65,-74,929,842),45088=>array(65,-69,927,842),45089=>array(65,-68,911,842),45090=>array(65,-72,929,842),45091=>array(65,-70,936,842),45092=>array(65,-66,908,842),45093=>array(65,-59,916,842),45094=>array(65,-60,928,842),45095=>array(65,-68,908,842),45096=>array(84,-64,921,776),45097=>array(79,-61,921,766),45098=>array(79,-61,921,766),45099=>array(79,-71,921,766),45100=>array(81,-46,922,767),45101=>array(79,-68,921,766),45102=>array(79,-74,921,766),45103=>array(79,-44,921,766),45104=>array(79,-62,921,766),45105=>array(79,-64,921,766),45106=>array(79,-64,921,766),45107=>array(79,-63,921,766),45108=>array(79,-68,921,766),45109=>array(79,-64,921,766),45110=>array(79,-63,921,766),45111=>array(79,-74,921,766),45112=>array(79,-62,921,766),45113=>array(79,-61,921,766),45114=>array(79,-69,921,766),45115=>array(79,-74,921,766),45116=>array(79,-69,921,766),45117=>array(79,-68,921,766),45118=>array(79,-72,921,766),45119=>array(79,-70,921,766),45120=>array(79,-66,921,766),45121=>array(79,-59,921,766),45122=>array(79,-60,921,766),45123=>array(79,-68,921,766),45124=>array(57,52,943,691),45125=>array(79,-61,921,767),45126=>array(79,-61,921,767),45127=>array(79,-71,921,767),45128=>array(79,-46,921,767),45129=>array(79,-68,921,767),45130=>array(79,-74,921,767),45131=>array(79,-44,921,767),45132=>array(79,-62,921,767),45133=>array(79,-64,921,767),45134=>array(79,-64,921,767),45135=>array(79,-63,921,767),45136=>array(79,-68,921,767),45137=>array(79,-64,921,767),45138=>array(79,-63,921,767),45139=>array(79,-74,921,767),45140=>array(79,-62,921,767),45141=>array(79,-61,921,767),45142=>array(79,-69,921,767),45143=>array(79,-74,921,767),45144=>array(79,-69,921,767),45145=>array(79,-68,921,767),45146=>array(79,-72,921,767),45147=>array(79,-70,921,767),45148=>array(79,-66,921,767),45149=>array(79,-59,921,767),45150=>array(79,-60,921,767),45151=>array(79,-68,921,767),45152=>array(66,-69,907,842),45153=>array(75,-61,907,842),45154=>array(75,-61,907,842),45155=>array(75,-71,931,842),45156=>array(74,-46,907,842),45157=>array(75,-68,912,842),45158=>array(75,-76,907,842),45159=>array(75,-44,921,842),45160=>array(75,-62,917,842),45161=>array(75,-64,907,842),45162=>array(75,-64,908,842),45163=>array(75,-64,908,842),45164=>array(75,-69,923,842),45165=>array(75,-64,908,842),45166=>array(75,-64,908,842),45167=>array(75,-76,907,842),45168=>array(75,-62,907,842),45169=>array(75,-61,907,842),45170=>array(75,-69,922,842),45171=>array(75,-74,929,842),45172=>array(75,-69,927,842),45173=>array(75,-68,911,842),45174=>array(75,-72,929,842),45175=>array(75,-70,936,842),45176=>array(75,-66,908,842),45177=>array(75,-59,916,842),45178=>array(75,-60,928,842),45179=>array(75,-68,908,842),45180=>array(56,-69,907,842),45181=>array(123,-61,907,842),45182=>array(123,-61,907,842),45183=>array(123,-71,931,842),45184=>array(105,-46,907,842),45185=>array(123,-68,912,842),45186=>array(123,-76,907,842),45187=>array(123,-44,921,842),45188=>array(123,-62,917,842),45189=>array(123,-64,907,842),45190=>array(123,-64,908,842),45191=>array(123,-64,908,842),45192=>array(123,-69,923,842),45193=>array(123,-64,908,842),45194=>array(123,-64,908,842),45195=>array(123,-76,907,842),45196=>array(123,-62,907,842),45197=>array(123,-61,907,842),45198=>array(123,-69,922,842),45199=>array(123,-74,929,842),45200=>array(123,-69,927,842),45201=>array(123,-68,911,842),45202=>array(123,-72,929,842),45203=>array(123,-70,936,842),45204=>array(123,-66,908,842),45205=>array(123,-59,916,842),45206=>array(123,-60,928,842),45207=>array(123,-68,908,842),45208=>array(109,-69,936,842),45209=>array(109,-59,936,842),45210=>array(109,-61,936,842),45211=>array(109,-71,936,842),45212=>array(109,-45,936,842),45213=>array(109,-69,936,842),45214=>array(109,-76,936,842),45215=>array(109,-44,936,842),45216=>array(109,-62,936,842),45217=>array(109,-64,936,842),45218=>array(109,-64,936,842),45219=>array(109,-64,936,842),45220=>array(109,-70,936,842),45221=>array(109,-64,936,842),45222=>array(109,-64,936,842),45223=>array(109,-76,936,842),45224=>array(109,-62,936,842),45225=>array(109,-61,936,842),45226=>array(109,-70,936,842),45227=>array(109,-74,936,842),45228=>array(109,-69,936,842),45229=>array(109,-67,936,842),45230=>array(109,-72,936,842),45231=>array(109,-71,936,842),45232=>array(109,-66,936,842),45233=>array(109,-59,936,842),45234=>array(109,-60,936,842),45235=>array(109,-69,936,842),45236=>array(133,-69,907,842),45237=>array(109,-61,907,842),45238=>array(109,-61,907,842),45239=>array(109,-71,931,842),45240=>array(109,-46,907,842),45241=>array(109,-68,912,842),45242=>array(109,-76,907,842),45243=>array(109,-44,921,842),45244=>array(109,-62,917,842),45245=>array(109,-64,907,842),45246=>array(109,-64,908,842),45247=>array(109,-64,908,842),45248=>array(109,-69,923,842),45249=>array(109,-64,908,842),45250=>array(109,-64,908,842),45251=>array(109,-76,907,842),45252=>array(109,-62,907,842),45253=>array(109,-61,907,842),45254=>array(109,-69,922,842),45255=>array(109,-74,929,842),45256=>array(109,-69,927,842),45257=>array(109,-68,911,842),45258=>array(109,-72,929,842),45259=>array(109,-70,936,842),45260=>array(109,-66,908,842),45261=>array(109,-59,916,842),45262=>array(109,-60,928,842),45263=>array(109,-68,908,842),45264=>array(109,-69,936,842),45265=>array(109,-59,936,842),45266=>array(109,-61,936,842),45267=>array(109,-71,936,842),45268=>array(109,-45,936,842),45269=>array(109,-69,936,842),45270=>array(109,-76,936,842),45271=>array(109,-44,936,842),45272=>array(109,-62,936,842),45273=>array(109,-64,936,842),45274=>array(109,-64,936,842),45275=>array(109,-64,936,842),45276=>array(109,-70,936,842),45277=>array(109,-64,936,842),45278=>array(109,-64,936,842),45279=>array(109,-76,936,842),45280=>array(109,-62,936,842),45281=>array(109,-61,936,842),45282=>array(109,-70,936,842),45283=>array(109,-74,936,842),45284=>array(109,-69,936,842),45285=>array(109,-67,936,842),45286=>array(109,-72,936,842),45287=>array(109,-71,936,842),45288=>array(109,-66,936,842),45289=>array(109,-59,936,842),45290=>array(109,-60,936,842),45291=>array(109,-69,936,842),45292=>array(133,-69,907,842),45293=>array(109,-61,907,842),45294=>array(109,-61,907,842),45295=>array(109,-71,931,842),45296=>array(109,-46,907,842),45297=>array(109,-68,912,842),45298=>array(109,-76,907,842),45299=>array(109,-44,921,842),45300=>array(109,-62,917,842),45301=>array(109,-64,907,842),45302=>array(109,-64,908,842),45303=>array(109,-64,908,842),45304=>array(109,-69,923,842),45305=>array(109,-64,908,842),45306=>array(109,-64,908,842),45307=>array(109,-76,907,842),45308=>array(109,-62,907,842),45309=>array(109,-61,907,842),45310=>array(109,-69,922,842),45311=>array(109,-74,929,842),45312=>array(109,-69,927,842),45313=>array(109,-68,911,842),45314=>array(109,-72,929,842),45315=>array(109,-70,936,842),45316=>array(109,-66,908,842),45317=>array(109,-59,916,842),45318=>array(109,-60,928,842),45319=>array(109,-68,908,842),45320=>array(109,-70,907,841),45321=>array(109,-61,907,841),45322=>array(109,-61,907,841),45323=>array(109,-71,931,841),45324=>array(109,-46,907,841),45325=>array(109,-68,912,841),45326=>array(109,-76,907,841),45327=>array(109,-44,921,841),45328=>array(109,-62,917,841),45329=>array(109,-64,907,841),45330=>array(109,-64,908,841),45331=>array(109,-64,908,841),45332=>array(109,-69,923,841),45333=>array(109,-64,908,841),45334=>array(109,-64,908,841),45335=>array(109,-76,906,841),45336=>array(109,-62,907,841),45337=>array(109,-61,907,841),45338=>array(109,-69,922,841),45339=>array(109,-74,929,841),45340=>array(109,-69,927,841),45341=>array(109,-68,911,841),45342=>array(109,-72,929,841),45343=>array(109,-70,936,841),45344=>array(109,-66,908,841),45345=>array(109,-59,916,841),45346=>array(109,-60,928,841),45347=>array(109,-68,908,841),45348=>array(134,-68,907,843),45349=>array(109,-61,907,843),45350=>array(109,-61,907,843),45351=>array(109,-71,931,843),45352=>array(109,-46,907,843),45353=>array(109,-68,912,843),45354=>array(109,-76,907,843),45355=>array(109,-44,921,843),45356=>array(109,-62,917,843),45357=>array(109,-64,907,843),45358=>array(109,-64,908,843),45359=>array(109,-64,908,843),45360=>array(109,-69,923,843),45361=>array(109,-64,908,843),45362=>array(109,-64,908,843),45363=>array(109,-76,907,843),45364=>array(109,-62,907,843),45365=>array(109,-61,907,843),45366=>array(109,-69,922,843),45367=>array(109,-74,929,843),45368=>array(109,-69,927,843),45369=>array(109,-68,911,843),45370=>array(109,-72,929,843),45371=>array(109,-70,936,843),45372=>array(109,-66,908,843),45373=>array(109,-59,916,843),45374=>array(109,-60,928,843),45375=>array(109,-68,908,843),45376=>array(109,-69,909,842),45377=>array(109,-61,907,842),45378=>array(109,-61,907,842),45379=>array(109,-71,931,842),45380=>array(109,-46,908,841),45381=>array(109,-68,912,842),45382=>array(109,-76,907,842),45383=>array(109,-44,921,842),45384=>array(109,-62,917,842),45385=>array(109,-64,907,842),45386=>array(109,-64,908,842),45387=>array(109,-64,908,842),45388=>array(109,-69,923,842),45389=>array(109,-64,908,842),45390=>array(109,-64,908,842),45391=>array(109,-76,907,842),45392=>array(109,-62,907,842),45393=>array(109,-61,907,842),45394=>array(109,-69,922,842),45395=>array(109,-74,929,842),45396=>array(109,-69,927,842),45397=>array(109,-68,911,842),45398=>array(109,-72,929,842),45399=>array(109,-70,936,842),45400=>array(109,-66,908,842),45401=>array(109,-59,916,842),45402=>array(109,-60,928,842),45403=>array(109,-68,908,842),45404=>array(144,-68,907,843),45405=>array(109,-61,907,838),45406=>array(109,-61,907,838),45407=>array(109,-71,931,838),45408=>array(109,-46,907,843),45409=>array(109,-68,912,838),45410=>array(109,-76,907,838),45411=>array(109,-44,921,838),45412=>array(109,-62,917,838),45413=>array(109,-64,907,838),45414=>array(109,-64,908,838),45415=>array(109,-64,908,838),45416=>array(109,-69,923,838),45417=>array(109,-64,908,838),45418=>array(109,-64,908,838),45419=>array(109,-76,907,838),45420=>array(109,-62,907,838),45421=>array(109,-61,907,838),45422=>array(109,-69,922,838),45423=>array(109,-74,929,838),45424=>array(109,-69,927,838),45425=>array(109,-68,911,838),45426=>array(109,-72,929,838),45427=>array(109,-70,936,838),45428=>array(109,-66,908,838),45429=>array(109,-59,916,838),45430=>array(109,-60,928,838),45431=>array(109,-68,908,838),45432=>array(62,27,943,732),45433=>array(79,-61,921,797),45434=>array(79,-61,921,797),45435=>array(79,-71,921,797),45436=>array(79,-46,921,792),45437=>array(79,-68,921,797),45438=>array(79,-74,921,797),45439=>array(79,-44,921,797),45440=>array(79,-62,921,797),45441=>array(79,-64,921,797),45442=>array(79,-64,921,797),45443=>array(79,-63,921,797),45444=>array(79,-68,921,797),45445=>array(79,-64,921,797),45446=>array(79,-63,921,797),45447=>array(79,-74,921,797),45448=>array(79,-62,921,797),45449=>array(79,-61,921,797),45450=>array(79,-69,921,797),45451=>array(79,-74,921,797),45452=>array(79,-69,921,797),45453=>array(79,-68,921,797),45454=>array(79,-72,921,797),45455=>array(79,-70,921,797),45456=>array(79,-66,921,797),45457=>array(79,-59,921,797),45458=>array(79,-60,921,797),45459=>array(79,-68,921,797),45460=>array(47,-69,936,842),45461=>array(64,-59,936,842),45462=>array(64,-61,936,842),45463=>array(64,-71,936,842),45464=>array(74,-45,936,842),45465=>array(64,-69,936,842),45466=>array(64,-76,936,842),45467=>array(64,-44,936,842),45468=>array(64,-62,936,842),45469=>array(64,-64,936,842),45470=>array(64,-64,936,842),45471=>array(64,-64,936,842),45472=>array(64,-70,936,842),45473=>array(64,-64,936,842),45474=>array(64,-64,936,842),45475=>array(64,-76,936,842),45476=>array(64,-62,936,842),45477=>array(64,-61,936,842),45478=>array(64,-70,936,842),45479=>array(64,-74,936,842),45480=>array(64,-69,936,842),45481=>array(64,-67,936,842),45482=>array(64,-72,936,842),45483=>array(64,-71,936,842),45484=>array(64,-66,936,842),45485=>array(64,-59,936,842),45486=>array(64,-60,936,842),45487=>array(64,-69,936,842),45488=>array(43,-68,907,843),45489=>array(79,-61,907,843),45490=>array(79,-61,907,843),45491=>array(79,-71,931,843),45492=>array(72,-46,907,842),45493=>array(79,-68,912,843),45494=>array(79,-76,907,843),45495=>array(79,-44,921,843),45496=>array(79,-62,917,843),45497=>array(79,-64,907,843),45498=>array(79,-64,908,843),45499=>array(79,-64,908,843),45500=>array(79,-69,923,843),45501=>array(79,-64,908,843),45502=>array(79,-64,908,843),45503=>array(79,-76,907,843),45504=>array(79,-62,907,843),45505=>array(79,-61,907,843),45506=>array(79,-69,922,843),45507=>array(79,-74,929,843),45508=>array(79,-69,927,843),45509=>array(79,-68,911,843),45510=>array(79,-72,929,843),45511=>array(79,-70,936,843),45512=>array(79,-66,908,843),45513=>array(79,-59,916,843),45514=>array(79,-60,928,843),45515=>array(79,-68,908,843),45516=>array(62,-69,907,842),45517=>array(64,-61,908,842),45518=>array(64,-61,908,842),45519=>array(64,-71,931,842),45520=>array(64,-46,908,841),45521=>array(64,-68,912,842),45522=>array(64,-76,908,842),45523=>array(64,-44,921,842),45524=>array(64,-62,917,842),45525=>array(64,-64,908,842),45526=>array(64,-64,908,842),45527=>array(64,-64,908,842),45528=>array(64,-69,923,842),45529=>array(64,-64,908,842),45530=>array(64,-64,908,842),45531=>array(64,-76,908,842),45532=>array(64,-62,908,842),45533=>array(64,-61,908,842),45534=>array(64,-69,922,842),45535=>array(64,-74,929,842),45536=>array(64,-69,927,842),45537=>array(64,-68,911,842),45538=>array(64,-72,929,842),45539=>array(64,-70,936,842),45540=>array(64,-66,908,842),45541=>array(64,-59,916,842),45542=>array(64,-60,928,842),45543=>array(64,-68,908,842),45544=>array(60,-13,940,742),45545=>array(79,-61,922,797),45546=>array(79,-61,922,797),45547=>array(79,-71,922,797),45548=>array(79,-46,922,797),45549=>array(79,-68,922,797),45550=>array(79,-74,922,797),45551=>array(79,-44,922,797),45552=>array(79,-62,922,797),45553=>array(79,-64,922,797),45554=>array(79,-64,922,797),45555=>array(79,-63,922,797),45556=>array(79,-68,922,797),45557=>array(79,-64,922,797),45558=>array(79,-63,922,797),45559=>array(79,-74,922,797),45560=>array(79,-62,922,797),45561=>array(79,-61,922,797),45562=>array(79,-69,922,797),45563=>array(79,-74,922,797),45564=>array(79,-69,922,797),45565=>array(79,-68,922,797),45566=>array(79,-72,922,797),45567=>array(79,-70,922,797),45568=>array(79,-66,922,797),45569=>array(79,-59,922,797),45570=>array(79,-60,922,797),45571=>array(79,-68,922,797),45572=>array(79,-64,921,797),45573=>array(79,-61,921,797),45574=>array(79,-61,921,797),45575=>array(79,-71,921,797),45576=>array(79,-46,921,797),45577=>array(79,-68,921,797),45578=>array(79,-74,921,797),45579=>array(79,-44,921,797),45580=>array(79,-62,921,797),45581=>array(79,-64,921,797),45582=>array(79,-64,921,797),45583=>array(79,-63,921,797),45584=>array(79,-68,921,797),45585=>array(79,-64,921,797),45586=>array(79,-63,921,797),45587=>array(79,-74,921,797),45588=>array(79,-62,921,797),45589=>array(79,-61,921,797),45590=>array(79,-69,921,797),45591=>array(79,-74,921,797),45592=>array(79,-69,921,797),45593=>array(79,-68,921,797),45594=>array(79,-72,921,797),45595=>array(79,-70,921,797),45596=>array(79,-66,921,797),45597=>array(79,-59,921,797),45598=>array(79,-60,921,797),45599=>array(79,-68,921,797),45600=>array(69,-69,909,842),45601=>array(79,-61,907,841),45602=>array(79,-61,907,841),45603=>array(79,-71,931,841),45604=>array(79,-46,907,841),45605=>array(79,-68,912,841),45606=>array(79,-76,907,841),45607=>array(79,-44,921,841),45608=>array(79,-62,917,841),45609=>array(79,-64,907,841),45610=>array(79,-64,908,841),45611=>array(79,-64,908,841),45612=>array(79,-69,923,841),45613=>array(79,-64,908,841),45614=>array(79,-64,908,841),45615=>array(79,-76,906,841),45616=>array(79,-62,907,841),45617=>array(79,-61,907,841),45618=>array(79,-69,922,841),45619=>array(79,-74,929,841),45620=>array(79,-69,927,841),45621=>array(79,-68,911,841),45622=>array(79,-72,929,841),45623=>array(79,-70,936,841),45624=>array(79,-66,908,841),45625=>array(79,-59,916,841),45626=>array(79,-60,928,841),45627=>array(79,-68,908,841),45628=>array(63,-68,907,843),45629=>array(72,-61,907,843),45630=>array(72,-61,907,843),45631=>array(72,-71,931,843),45632=>array(90,-46,907,843),45633=>array(72,-68,912,843),45634=>array(72,-76,907,843),45635=>array(72,-44,921,843),45636=>array(72,-62,917,843),45637=>array(72,-64,907,843),45638=>array(72,-64,908,843),45639=>array(72,-64,908,843),45640=>array(72,-69,923,843),45641=>array(72,-64,908,843),45642=>array(72,-64,908,843),45643=>array(72,-76,907,843),45644=>array(72,-62,907,843),45645=>array(72,-61,907,843),45646=>array(72,-69,922,843),45647=>array(72,-74,929,843),45648=>array(72,-69,927,843),45649=>array(72,-68,911,843),45650=>array(72,-72,929,843),45651=>array(72,-70,936,843),45652=>array(72,-66,908,843),45653=>array(72,-59,916,843),45654=>array(72,-60,928,843),45655=>array(72,-68,908,843),45656=>array(70,-68,910,843),45657=>array(64,-61,907,842),45658=>array(64,-61,907,842),45659=>array(64,-71,931,842),45660=>array(65,-46,907,841),45661=>array(64,-68,912,842),45662=>array(64,-76,907,842),45663=>array(64,-44,921,842),45664=>array(64,-62,917,842),45665=>array(64,-64,907,842),45666=>array(64,-64,908,842),45667=>array(64,-64,908,842),45668=>array(64,-69,923,842),45669=>array(64,-64,908,842),45670=>array(64,-64,908,842),45671=>array(64,-76,907,842),45672=>array(64,-62,907,842),45673=>array(64,-61,907,842),45674=>array(64,-69,922,842),45675=>array(64,-74,929,842),45676=>array(64,-69,927,842),45677=>array(64,-68,911,842),45678=>array(64,-72,929,842),45679=>array(64,-70,936,842),45680=>array(64,-66,908,842),45681=>array(64,-59,916,842),45682=>array(64,-60,928,842),45683=>array(64,-68,908,842),45684=>array(71,-64,928,797),45685=>array(79,-61,921,797),45686=>array(79,-61,921,797),45687=>array(79,-71,921,797),45688=>array(79,-46,921,797),45689=>array(79,-68,921,797),45690=>array(79,-74,921,797),45691=>array(79,-44,921,797),45692=>array(79,-62,921,797),45693=>array(79,-64,921,797),45694=>array(79,-64,921,797),45695=>array(79,-63,921,797),45696=>array(79,-68,921,797),45697=>array(79,-64,921,797),45698=>array(79,-63,921,797),45699=>array(79,-74,921,797),45700=>array(79,-62,921,797),45701=>array(79,-61,921,797),45702=>array(79,-69,921,797),45703=>array(79,-74,921,797),45704=>array(79,-69,921,797),45705=>array(79,-68,921,797),45706=>array(79,-72,921,797),45707=>array(79,-70,921,797),45708=>array(79,-66,921,797),45709=>array(79,-59,921,797),45710=>array(79,-60,921,797),45711=>array(79,-68,921,797),45712=>array(57,32,943,747),45713=>array(79,-61,921,802),45714=>array(79,-61,921,802),45715=>array(79,-71,921,802),45716=>array(79,-46,921,812),45717=>array(79,-68,921,802),45718=>array(79,-74,921,802),45719=>array(79,-44,921,802),45720=>array(79,-62,921,802),45721=>array(79,-64,921,802),45722=>array(79,-64,921,802),45723=>array(79,-63,921,802),45724=>array(79,-68,921,802),45725=>array(79,-64,921,802),45726=>array(79,-63,921,802),45727=>array(79,-74,921,802),45728=>array(79,-62,921,802),45729=>array(79,-61,921,802),45730=>array(79,-69,921,802),45731=>array(79,-74,921,802),45732=>array(79,-69,921,802),45733=>array(79,-68,921,802),45734=>array(79,-72,921,802),45735=>array(79,-70,921,802),45736=>array(79,-66,921,802),45737=>array(79,-59,921,802),45738=>array(79,-60,921,802),45739=>array(79,-68,921,802),45740=>array(68,-69,907,842),45741=>array(69,-61,907,842),45742=>array(69,-61,907,842),45743=>array(69,-71,931,842),45744=>array(65,-46,907,842),45745=>array(69,-68,912,842),45746=>array(69,-76,907,842),45747=>array(69,-44,921,842),45748=>array(69,-62,917,842),45749=>array(69,-64,907,842),45750=>array(69,-64,908,842),45751=>array(69,-64,908,842),45752=>array(69,-69,923,842),45753=>array(69,-64,908,842),45754=>array(69,-64,908,842),45755=>array(69,-76,907,842),45756=>array(69,-62,907,842),45757=>array(69,-61,907,842),45758=>array(69,-69,922,842),45759=>array(69,-74,929,842),45760=>array(69,-69,927,842),45761=>array(69,-68,911,842),45762=>array(69,-72,929,842),45763=>array(69,-70,936,842),45764=>array(69,-66,908,842),45765=>array(69,-59,916,842),45766=>array(69,-60,928,842),45767=>array(69,-68,908,842),45768=>array(138,-69,907,842),45769=>array(138,-61,907,842),45770=>array(138,-61,907,842),45771=>array(138,-71,931,842),45772=>array(138,-46,907,842),45773=>array(138,-68,912,842),45774=>array(138,-76,907,842),45775=>array(138,-44,921,842),45776=>array(138,-62,917,842),45777=>array(138,-64,907,842),45778=>array(138,-64,908,842),45779=>array(138,-64,908,842),45780=>array(138,-69,923,842),45781=>array(138,-64,908,842),45782=>array(138,-64,908,842),45783=>array(138,-76,907,842),45784=>array(138,-62,907,842),45785=>array(138,-61,907,842),45786=>array(138,-69,922,842),45787=>array(138,-74,929,842),45788=>array(138,-69,927,842),45789=>array(138,-68,911,842),45790=>array(138,-72,929,842),45791=>array(138,-70,936,842),45792=>array(138,-66,908,842),45793=>array(138,-59,916,842),45794=>array(138,-60,928,842),45795=>array(138,-68,908,842),45796=>array(109,-69,936,842),45797=>array(109,-59,936,837),45798=>array(109,-61,936,837),45799=>array(109,-71,936,837),45800=>array(109,-45,936,842),45801=>array(109,-69,936,837),45802=>array(109,-76,936,837),45803=>array(109,-44,936,837),45804=>array(109,-62,936,837),45805=>array(109,-64,936,837),45806=>array(109,-64,936,837),45807=>array(109,-64,936,837),45808=>array(109,-70,936,837),45809=>array(109,-64,936,837),45810=>array(109,-64,936,837),45811=>array(109,-76,936,837),45812=>array(109,-62,936,837),45813=>array(109,-61,936,837),45814=>array(109,-70,936,837),45815=>array(109,-74,936,837),45816=>array(109,-69,936,837),45817=>array(109,-67,936,837),45818=>array(109,-72,936,837),45819=>array(109,-71,936,837),45820=>array(109,-66,936,837),45821=>array(109,-59,936,837),45822=>array(109,-60,936,837),45823=>array(109,-69,936,837),45824=>array(109,-69,907,842),45825=>array(119,-61,907,842),45826=>array(119,-61,907,842),45827=>array(119,-71,931,842),45828=>array(119,-46,907,842),45829=>array(119,-68,912,842),45830=>array(119,-76,907,842),45831=>array(119,-44,921,842),45832=>array(119,-62,917,842),45833=>array(119,-64,907,842),45834=>array(119,-64,908,842),45835=>array(119,-64,908,842),45836=>array(119,-69,923,842),45837=>array(119,-64,908,842),45838=>array(119,-64,908,842),45839=>array(119,-76,907,842),45840=>array(119,-62,907,842),45841=>array(119,-61,907,842),45842=>array(119,-69,922,842),45843=>array(119,-74,929,842),45844=>array(119,-69,927,842),45845=>array(119,-68,911,842),45846=>array(119,-72,929,842),45847=>array(119,-70,936,842),45848=>array(119,-66,908,842),45849=>array(119,-59,916,842),45850=>array(119,-60,928,842),45851=>array(119,-68,908,842),45852=>array(109,-68,935,843),45853=>array(109,-59,936,842),45854=>array(109,-61,936,842),45855=>array(109,-71,936,842),45856=>array(109,-45,936,842),45857=>array(109,-69,936,842),45858=>array(109,-76,936,842),45859=>array(109,-44,936,842),45860=>array(109,-62,936,842),45861=>array(109,-64,936,842),45862=>array(109,-64,936,842),45863=>array(109,-64,936,842),45864=>array(109,-70,936,842),45865=>array(109,-64,936,842),45866=>array(109,-64,936,842),45867=>array(109,-76,936,842),45868=>array(109,-62,936,842),45869=>array(109,-61,936,842),45870=>array(109,-70,936,842),45871=>array(109,-74,936,842),45872=>array(109,-69,936,842),45873=>array(109,-67,936,842),45874=>array(109,-72,936,842),45875=>array(109,-71,936,842),45876=>array(109,-66,936,842),45877=>array(109,-59,936,842),45878=>array(109,-60,936,842),45879=>array(109,-69,936,842),45880=>array(109,-69,907,842),45881=>array(119,-61,907,842),45882=>array(119,-61,907,842),45883=>array(119,-71,931,842),45884=>array(119,-46,907,842),45885=>array(119,-68,912,842),45886=>array(119,-76,907,842),45887=>array(119,-44,921,842),45888=>array(119,-62,917,842),45889=>array(119,-64,907,842),45890=>array(119,-64,908,842),45891=>array(119,-64,908,842),45892=>array(119,-69,923,842),45893=>array(119,-64,908,842),45894=>array(119,-64,908,842),45895=>array(119,-76,907,842),45896=>array(119,-62,907,842),45897=>array(119,-61,907,842),45898=>array(119,-69,922,842),45899=>array(119,-74,929,842),45900=>array(119,-69,927,842),45901=>array(119,-68,911,842),45902=>array(119,-72,929,842),45903=>array(119,-70,936,842),45904=>array(119,-66,908,842),45905=>array(119,-59,916,842),45906=>array(119,-60,928,842),45907=>array(119,-68,908,842),45908=>array(109,-70,907,841),45909=>array(109,-61,907,841),45910=>array(109,-61,907,841),45911=>array(109,-71,931,841),45912=>array(109,-46,907,841),45913=>array(109,-68,912,841),45914=>array(109,-76,907,841),45915=>array(109,-44,921,841),45916=>array(109,-62,917,841),45917=>array(109,-64,907,841),45918=>array(109,-64,908,841),45919=>array(109,-64,908,841),45920=>array(109,-69,923,841),45921=>array(109,-64,908,841),45922=>array(109,-64,908,841),45923=>array(109,-76,906,841),45924=>array(109,-62,907,841),45925=>array(109,-61,907,841),45926=>array(109,-69,922,841),45927=>array(109,-74,929,841),45928=>array(109,-69,927,841),45929=>array(109,-68,911,841),45930=>array(109,-72,929,841),45931=>array(109,-70,936,841),45932=>array(109,-66,908,841),45933=>array(109,-59,916,841),45934=>array(109,-60,928,841),45935=>array(109,-68,908,841),45936=>array(109,-68,907,843),45937=>array(119,-61,907,843),45938=>array(119,-61,907,843),45939=>array(119,-71,931,843),45940=>array(119,-46,907,843),45941=>array(119,-68,912,843),45942=>array(119,-76,907,843),45943=>array(119,-44,921,843),45944=>array(119,-62,917,843),45945=>array(119,-64,907,843),45946=>array(119,-64,908,843),45947=>array(119,-64,908,843),45948=>array(119,-69,923,843),45949=>array(119,-64,908,843),45950=>array(119,-64,908,843),45951=>array(119,-76,907,843),45952=>array(119,-62,907,843),45953=>array(119,-61,907,843),45954=>array(119,-69,922,843),45955=>array(119,-74,929,843),45956=>array(119,-69,927,843),45957=>array(119,-68,911,843),45958=>array(119,-72,929,843),45959=>array(119,-70,936,843),45960=>array(119,-66,908,843),45961=>array(119,-59,916,843),45962=>array(119,-60,928,843),45963=>array(119,-68,908,843),45964=>array(109,-70,907,842),45965=>array(109,-61,908,842),45966=>array(109,-61,908,842),45967=>array(109,-71,931,842),45968=>array(109,-46,907,842),45969=>array(109,-68,912,842),45970=>array(109,-76,908,842),45971=>array(109,-44,921,842),45972=>array(109,-62,917,842),45973=>array(109,-64,908,842),45974=>array(109,-64,908,842),45975=>array(109,-64,908,842),45976=>array(109,-69,923,842),45977=>array(109,-64,908,842),45978=>array(109,-64,908,842),45979=>array(109,-76,908,842),45980=>array(109,-62,908,842),45981=>array(109,-61,908,842),45982=>array(109,-69,922,842),45983=>array(109,-74,929,842),45984=>array(109,-69,927,842),45985=>array(109,-68,911,842),45986=>array(109,-72,929,842),45987=>array(109,-70,936,842),45988=>array(109,-66,908,842),45989=>array(109,-59,916,842),45990=>array(109,-60,928,842),45991=>array(109,-68,908,842),45992=>array(109,-68,907,843),45993=>array(119,-61,907,843),45994=>array(119,-61,907,843),45995=>array(119,-71,931,843),45996=>array(119,-46,907,843),45997=>array(119,-68,912,843),45998=>array(119,-76,907,843),45999=>array(119,-44,921,843),46000=>array(119,-62,917,843),46001=>array(119,-64,907,843),46002=>array(119,-64,908,843),46003=>array(119,-64,908,843),46004=>array(119,-69,923,843),46005=>array(119,-64,908,843),46006=>array(119,-64,908,843),46007=>array(119,-76,907,843),46008=>array(119,-62,907,843),46009=>array(119,-61,907,843),46010=>array(119,-69,922,843),46011=>array(119,-74,929,843),46012=>array(119,-69,927,843),46013=>array(119,-68,911,843),46014=>array(119,-72,929,843),46015=>array(119,-70,936,843),46016=>array(119,-66,908,843),46017=>array(119,-59,916,843),46018=>array(119,-60,928,843),46019=>array(119,-68,908,843),46020=>array(62,-13,943,759),46021=>array(79,-61,921,790),46022=>array(79,-61,921,790),46023=>array(79,-71,921,790),46024=>array(79,-46,921,784),46025=>array(79,-68,921,790),46026=>array(79,-74,921,790),46027=>array(79,-44,921,790),46028=>array(79,-62,921,790),46029=>array(79,-64,921,790),46030=>array(79,-64,921,790),46031=>array(79,-63,921,790),46032=>array(79,-68,921,790),46033=>array(79,-64,921,790),46034=>array(79,-63,921,790),46035=>array(79,-74,921,790),46036=>array(79,-62,921,790),46037=>array(79,-61,921,790),46038=>array(79,-69,921,790),46039=>array(79,-74,921,790),46040=>array(79,-69,921,790),46041=>array(79,-68,921,790),46042=>array(79,-72,921,790),46043=>array(79,-70,921,790),46044=>array(79,-66,921,790),46045=>array(79,-59,921,790),46046=>array(79,-60,921,790),46047=>array(79,-68,921,790),46048=>array(47,-69,936,842),46049=>array(64,-59,936,842),46050=>array(64,-61,936,842),46051=>array(64,-71,936,842),46052=>array(74,-45,936,842),46053=>array(64,-69,936,842),46054=>array(64,-76,936,842),46055=>array(64,-44,936,842),46056=>array(64,-62,936,842),46057=>array(64,-64,936,842),46058=>array(64,-64,936,842),46059=>array(64,-64,936,842),46060=>array(64,-70,936,842),46061=>array(64,-64,936,842),46062=>array(64,-64,936,842),46063=>array(64,-76,936,842),46064=>array(64,-62,936,842),46065=>array(64,-61,936,842),46066=>array(64,-70,936,842),46067=>array(64,-74,936,842),46068=>array(64,-69,936,842),46069=>array(64,-67,936,842),46070=>array(64,-72,936,842),46071=>array(64,-71,936,842),46072=>array(64,-66,936,842),46073=>array(64,-59,936,842),46074=>array(64,-60,936,842),46075=>array(64,-69,936,842),46076=>array(61,-69,906,842),46077=>array(64,-61,907,842),46078=>array(64,-61,907,842),46079=>array(64,-71,931,842),46080=>array(53,-46,907,842),46081=>array(64,-68,912,842),46082=>array(64,-76,907,842),46083=>array(64,-44,921,842),46084=>array(64,-62,917,842),46085=>array(64,-64,907,842),46086=>array(64,-64,908,842),46087=>array(64,-64,908,842),46088=>array(64,-69,923,842),46089=>array(64,-64,908,842),46090=>array(64,-64,908,842),46091=>array(64,-76,907,842),46092=>array(64,-62,907,842),46093=>array(64,-61,907,842),46094=>array(64,-69,922,842),46095=>array(64,-74,929,842),46096=>array(64,-69,927,842),46097=>array(64,-68,911,842),46098=>array(64,-72,929,842),46099=>array(64,-70,936,842),46100=>array(64,-66,908,842),46101=>array(64,-59,916,842),46102=>array(64,-60,928,842),46103=>array(64,-68,908,842),46104=>array(62,-69,907,842),46105=>array(64,-61,907,842),46106=>array(64,-61,907,842),46107=>array(64,-71,931,842),46108=>array(64,-46,908,841),46109=>array(64,-68,912,842),46110=>array(64,-76,907,842),46111=>array(64,-44,921,842),46112=>array(64,-62,917,842),46113=>array(64,-64,907,842),46114=>array(64,-64,908,842),46115=>array(64,-64,908,842),46116=>array(64,-69,923,842),46117=>array(64,-64,908,842),46118=>array(64,-64,908,842),46119=>array(64,-76,907,842),46120=>array(64,-62,907,842),46121=>array(64,-61,907,842),46122=>array(64,-69,922,842),46123=>array(64,-74,929,842),46124=>array(64,-69,927,842),46125=>array(64,-68,911,842),46126=>array(64,-72,929,842),46127=>array(64,-70,936,842),46128=>array(64,-66,908,842),46129=>array(64,-59,916,842),46130=>array(64,-60,928,842),46131=>array(64,-68,908,842),46132=>array(60,-13,940,759),46133=>array(79,-61,921,785),46134=>array(79,-61,921,785),46135=>array(79,-71,921,785),46136=>array(79,-46,922,784),46137=>array(79,-68,921,785),46138=>array(79,-74,921,785),46139=>array(79,-44,921,785),46140=>array(79,-62,921,785),46141=>array(79,-64,921,785),46142=>array(79,-64,921,785),46143=>array(79,-63,921,785),46144=>array(79,-68,921,785),46145=>array(79,-64,921,785),46146=>array(79,-63,921,785),46147=>array(79,-74,921,785),46148=>array(79,-62,921,785),46149=>array(79,-61,921,785),46150=>array(79,-69,921,785),46151=>array(79,-74,921,785),46152=>array(79,-69,921,785),46153=>array(79,-68,921,785),46154=>array(79,-72,921,785),46155=>array(79,-70,921,785),46156=>array(79,-66,921,785),46157=>array(79,-59,921,785),46158=>array(79,-60,921,785),46159=>array(79,-68,921,785),46160=>array(79,-64,920,789),46161=>array(79,-61,921,785),46162=>array(79,-61,921,785),46163=>array(79,-71,921,785),46164=>array(79,-46,921,784),46165=>array(79,-68,921,785),46166=>array(79,-74,921,785),46167=>array(79,-44,921,785),46168=>array(79,-62,921,785),46169=>array(79,-64,921,785),46170=>array(79,-64,921,785),46171=>array(79,-63,921,785),46172=>array(79,-68,921,785),46173=>array(79,-64,921,785),46174=>array(79,-63,921,785),46175=>array(79,-74,921,785),46176=>array(79,-62,921,785),46177=>array(79,-61,921,785),46178=>array(79,-69,921,785),46179=>array(79,-74,921,785),46180=>array(79,-69,921,785),46181=>array(79,-68,921,785),46182=>array(79,-72,921,785),46183=>array(79,-70,921,785),46184=>array(79,-66,921,785),46185=>array(79,-59,921,785),46186=>array(79,-60,921,785),46187=>array(79,-68,921,785),46188=>array(68,-70,907,841),46189=>array(76,-61,907,841),46190=>array(76,-61,907,841),46191=>array(76,-71,931,841),46192=>array(75,-46,907,841),46193=>array(76,-68,912,841),46194=>array(76,-76,907,841),46195=>array(76,-44,921,841),46196=>array(76,-62,917,841),46197=>array(76,-64,907,841),46198=>array(76,-64,908,841),46199=>array(76,-64,908,841),46200=>array(76,-69,923,841),46201=>array(76,-64,908,841),46202=>array(76,-64,908,841),46203=>array(76,-76,906,841),46204=>array(76,-62,907,841),46205=>array(76,-61,907,841),46206=>array(76,-69,922,841),46207=>array(76,-74,929,841),46208=>array(76,-69,927,841),46209=>array(76,-68,911,841),46210=>array(76,-72,929,841),46211=>array(76,-70,936,841),46212=>array(76,-66,908,841),46213=>array(76,-59,916,841),46214=>array(76,-60,928,841),46215=>array(76,-68,908,841),46216=>array(52,-69,908,842),46217=>array(71,-61,907,843),46218=>array(71,-61,907,843),46219=>array(71,-71,931,843),46220=>array(79,-46,907,843),46221=>array(71,-68,912,843),46222=>array(71,-76,907,843),46223=>array(71,-44,921,843),46224=>array(71,-62,917,843),46225=>array(71,-64,907,843),46226=>array(71,-64,908,843),46227=>array(71,-64,908,843),46228=>array(71,-69,923,843),46229=>array(71,-64,908,843),46230=>array(71,-64,908,843),46231=>array(71,-76,907,843),46232=>array(71,-62,907,843),46233=>array(71,-61,907,843),46234=>array(71,-69,922,843),46235=>array(71,-74,929,843),46236=>array(71,-69,927,843),46237=>array(71,-68,911,843),46238=>array(71,-72,929,843),46239=>array(71,-70,936,843),46240=>array(71,-66,908,843),46241=>array(71,-59,916,843),46242=>array(71,-60,928,843),46243=>array(71,-68,908,843),46244=>array(70,-69,907,842),46245=>array(64,-61,907,842),46246=>array(64,-61,907,842),46247=>array(64,-71,931,842),46248=>array(65,-46,907,843),46249=>array(64,-68,912,842),46250=>array(64,-76,907,842),46251=>array(64,-44,921,842),46252=>array(64,-62,917,842),46253=>array(64,-64,907,842),46254=>array(64,-64,908,842),46255=>array(64,-64,908,842),46256=>array(64,-69,923,842),46257=>array(64,-64,908,842),46258=>array(64,-64,908,842),46259=>array(64,-76,907,842),46260=>array(64,-62,907,842),46261=>array(64,-61,907,842),46262=>array(64,-69,922,842),46263=>array(64,-74,929,842),46264=>array(64,-69,927,842),46265=>array(64,-68,911,842),46266=>array(64,-72,929,842),46267=>array(64,-70,936,842),46268=>array(64,-66,908,842),46269=>array(64,-59,916,842),46270=>array(64,-60,928,842),46271=>array(64,-68,908,842),46272=>array(71,-64,928,784),46273=>array(79,-61,921,785),46274=>array(79,-61,921,785),46275=>array(79,-71,921,785),46276=>array(79,-46,921,784),46277=>array(79,-68,921,785),46278=>array(79,-74,921,785),46279=>array(79,-44,921,785),46280=>array(79,-62,921,785),46281=>array(79,-64,921,785),46282=>array(79,-64,921,785),46283=>array(79,-63,921,785),46284=>array(79,-68,921,785),46285=>array(79,-64,921,785),46286=>array(79,-63,921,785),46287=>array(79,-74,921,785),46288=>array(79,-62,921,785),46289=>array(79,-61,921,785),46290=>array(79,-69,921,785),46291=>array(79,-74,921,785),46292=>array(79,-69,921,785),46293=>array(79,-68,921,785),46294=>array(79,-72,921,785),46295=>array(79,-70,921,785),46296=>array(79,-66,921,785),46297=>array(79,-59,921,785),46298=>array(79,-60,921,785),46299=>array(79,-68,921,785),46300=>array(57,42,943,709),46301=>array(79,-61,921,784),46302=>array(79,-61,921,784),46303=>array(79,-71,921,784),46304=>array(79,-46,921,784),46305=>array(79,-68,921,784),46306=>array(79,-74,921,784),46307=>array(79,-44,921,784),46308=>array(79,-62,921,784),46309=>array(79,-64,921,784),46310=>array(79,-64,921,784),46311=>array(79,-63,921,784),46312=>array(79,-68,921,784),46313=>array(79,-64,921,784),46314=>array(79,-63,921,784),46315=>array(79,-74,921,784),46316=>array(79,-62,921,784),46317=>array(79,-61,921,784),46318=>array(79,-69,921,784),46319=>array(79,-74,921,784),46320=>array(79,-69,921,784),46321=>array(79,-68,921,784),46322=>array(79,-72,921,784),46323=>array(79,-70,921,784),46324=>array(79,-66,921,784),46325=>array(79,-59,921,784),46326=>array(79,-60,921,784),46327=>array(79,-68,921,784),46328=>array(66,-69,907,842),46329=>array(64,-61,907,842),46330=>array(64,-61,907,842),46331=>array(64,-71,931,842),46332=>array(64,-46,907,842),46333=>array(64,-68,912,842),46334=>array(64,-76,907,842),46335=>array(64,-44,921,842),46336=>array(64,-62,917,842),46337=>array(64,-64,907,842),46338=>array(64,-64,908,842),46339=>array(64,-64,908,842),46340=>array(64,-69,923,842),46341=>array(64,-64,908,842),46342=>array(64,-64,908,842),46343=>array(64,-76,907,842),46344=>array(64,-62,907,842),46345=>array(64,-61,907,842),46346=>array(64,-69,922,842),46347=>array(64,-74,929,842),46348=>array(64,-69,927,842),46349=>array(64,-68,911,842),46350=>array(64,-72,929,842),46351=>array(64,-70,936,842),46352=>array(64,-66,908,842),46353=>array(64,-59,916,842),46354=>array(64,-60,928,842),46355=>array(64,-68,908,842),46356=>array(119,-69,907,842),46357=>array(124,-61,907,842),46358=>array(124,-61,907,842),46359=>array(124,-71,931,842),46360=>array(124,-46,907,842),46361=>array(124,-68,912,842),46362=>array(124,-76,907,842),46363=>array(124,-44,921,842),46364=>array(124,-62,917,842),46365=>array(124,-64,907,842),46366=>array(124,-64,908,842),46367=>array(124,-64,908,842),46368=>array(124,-69,923,842),46369=>array(124,-64,908,842),46370=>array(124,-64,908,842),46371=>array(124,-76,907,842),46372=>array(124,-62,907,842),46373=>array(124,-61,907,842),46374=>array(124,-69,922,842),46375=>array(124,-74,929,842),46376=>array(124,-69,927,842),46377=>array(124,-68,911,842),46378=>array(124,-72,929,842),46379=>array(124,-70,936,842),46380=>array(124,-66,908,842),46381=>array(124,-59,916,842),46382=>array(124,-60,928,842),46383=>array(124,-68,908,842),46384=>array(94,-69,936,842),46385=>array(94,-59,936,842),46386=>array(94,-61,936,842),46387=>array(94,-71,936,842),46388=>array(94,-45,936,842),46389=>array(94,-69,936,842),46390=>array(94,-76,936,842),46391=>array(94,-44,936,842),46392=>array(94,-62,936,842),46393=>array(94,-64,936,842),46394=>array(94,-64,936,842),46395=>array(94,-64,936,842),46396=>array(94,-70,936,842),46397=>array(94,-64,936,842),46398=>array(94,-64,936,842),46399=>array(94,-76,936,842),46400=>array(94,-62,936,842),46401=>array(94,-61,936,842),46402=>array(94,-70,936,842),46403=>array(94,-74,936,842),46404=>array(94,-69,936,842),46405=>array(94,-67,936,842),46406=>array(94,-72,936,842),46407=>array(94,-71,936,842),46408=>array(94,-66,936,842),46409=>array(94,-59,936,842),46410=>array(94,-60,936,842),46411=>array(94,-69,936,842),46412=>array(99,-69,907,842),46413=>array(99,-61,907,837),46414=>array(99,-61,907,837),46415=>array(99,-71,931,837),46416=>array(99,-46,907,842),46417=>array(99,-68,912,837),46418=>array(99,-76,907,837),46419=>array(99,-44,921,837),46420=>array(99,-62,917,837),46421=>array(99,-64,907,837),46422=>array(99,-64,908,837),46423=>array(99,-64,908,837),46424=>array(99,-69,923,837),46425=>array(99,-64,908,837),46426=>array(99,-64,908,837),46427=>array(99,-76,907,837),46428=>array(99,-62,907,837),46429=>array(99,-61,907,837),46430=>array(99,-69,922,837),46431=>array(99,-74,929,837),46432=>array(99,-69,927,837),46433=>array(99,-68,911,837),46434=>array(99,-72,929,837),46435=>array(99,-70,936,837),46436=>array(99,-66,908,837),46437=>array(99,-59,916,837),46438=>array(99,-60,928,837),46439=>array(99,-68,908,837),46440=>array(94,-69,936,842),46441=>array(94,-59,936,842),46442=>array(94,-61,936,842),46443=>array(94,-71,936,842),46444=>array(94,-45,936,842),46445=>array(94,-69,936,842),46446=>array(94,-76,936,842),46447=>array(94,-44,936,842),46448=>array(94,-62,936,842),46449=>array(94,-64,936,842),46450=>array(94,-64,936,842),46451=>array(94,-64,936,842),46452=>array(94,-70,936,842),46453=>array(94,-64,936,842),46454=>array(94,-64,936,842),46455=>array(94,-76,936,842),46456=>array(94,-62,936,842),46457=>array(94,-61,936,842),46458=>array(94,-70,936,842),46459=>array(94,-74,936,842),46460=>array(94,-69,936,842),46461=>array(94,-67,936,842),46462=>array(94,-72,936,842),46463=>array(94,-71,936,842),46464=>array(94,-66,936,842),46465=>array(94,-59,936,842),46466=>array(94,-60,936,842),46467=>array(94,-69,936,842),46468=>array(99,-69,907,842),46469=>array(99,-61,907,842),46470=>array(99,-61,907,842),46471=>array(99,-71,931,842),46472=>array(99,-46,907,842),46473=>array(99,-68,912,842),46474=>array(99,-76,907,842),46475=>array(99,-44,921,842),46476=>array(99,-62,917,842),46477=>array(99,-64,907,842),46478=>array(99,-64,908,842),46479=>array(99,-64,908,842),46480=>array(99,-69,923,842),46481=>array(99,-64,908,842),46482=>array(99,-64,908,842),46483=>array(99,-76,907,842),46484=>array(99,-62,907,842),46485=>array(99,-61,907,842),46486=>array(99,-69,922,842),46487=>array(99,-74,929,842),46488=>array(99,-69,927,842),46489=>array(99,-68,911,842),46490=>array(99,-72,929,842),46491=>array(99,-70,936,842),46492=>array(99,-66,908,842),46493=>array(99,-59,916,842),46494=>array(99,-60,928,842),46495=>array(99,-68,908,842),46496=>array(94,-70,907,841),46497=>array(94,-61,907,836),46498=>array(94,-61,907,836),46499=>array(94,-71,931,836),46500=>array(94,-46,907,841),46501=>array(94,-68,912,836),46502=>array(94,-76,907,836),46503=>array(94,-44,921,836),46504=>array(94,-62,917,836),46505=>array(94,-64,907,836),46506=>array(94,-64,908,836),46507=>array(94,-64,908,836),46508=>array(94,-69,923,836),46509=>array(94,-64,908,836),46510=>array(94,-64,908,836),46511=>array(94,-76,906,836),46512=>array(94,-62,907,836),46513=>array(94,-61,907,836),46514=>array(94,-69,922,836),46515=>array(94,-74,929,836),46516=>array(94,-69,927,836),46517=>array(94,-68,911,836),46518=>array(94,-72,929,836),46519=>array(94,-70,936,836),46520=>array(94,-66,908,836),46521=>array(94,-59,916,836),46522=>array(94,-60,928,836),46523=>array(94,-68,908,836),46524=>array(99,-68,907,843),46525=>array(99,-61,907,843),46526=>array(99,-61,907,843),46527=>array(99,-71,931,843),46528=>array(99,-46,907,843),46529=>array(99,-68,912,843),46530=>array(99,-76,907,843),46531=>array(99,-44,921,843),46532=>array(99,-62,917,843),46533=>array(99,-64,907,843),46534=>array(99,-64,908,843),46535=>array(99,-64,908,843),46536=>array(99,-69,923,843),46537=>array(99,-64,908,843),46538=>array(99,-64,908,843),46539=>array(99,-76,907,843),46540=>array(99,-62,907,843),46541=>array(99,-61,907,843),46542=>array(99,-69,922,843),46543=>array(99,-74,929,843),46544=>array(99,-69,927,843),46545=>array(99,-68,911,843),46546=>array(99,-72,929,843),46547=>array(99,-70,936,843),46548=>array(99,-66,908,843),46549=>array(99,-59,916,843),46550=>array(99,-60,928,843),46551=>array(99,-68,908,843),46552=>array(94,-69,907,842),46553=>array(94,-61,907,842),46554=>array(94,-61,907,842),46555=>array(94,-71,931,842),46556=>array(94,-46,908,842),46557=>array(94,-68,912,842),46558=>array(94,-76,907,842),46559=>array(94,-44,921,842),46560=>array(94,-62,917,842),46561=>array(94,-64,907,842),46562=>array(94,-64,908,842),46563=>array(94,-64,908,842),46564=>array(94,-69,923,842),46565=>array(94,-64,908,842),46566=>array(94,-64,908,842),46567=>array(94,-76,907,842),46568=>array(94,-62,907,842),46569=>array(94,-61,907,842),46570=>array(94,-69,922,842),46571=>array(94,-74,929,842),46572=>array(94,-69,927,842),46573=>array(94,-68,911,842),46574=>array(94,-72,929,842),46575=>array(94,-70,936,842),46576=>array(94,-66,908,842),46577=>array(94,-59,916,842),46578=>array(94,-60,928,842),46579=>array(94,-68,908,842),46580=>array(99,-68,907,843),46581=>array(94,-61,907,843),46582=>array(94,-61,907,843),46583=>array(94,-71,931,843),46584=>array(94,-46,907,843),46585=>array(94,-68,912,843),46586=>array(94,-76,907,843),46587=>array(94,-44,921,843),46588=>array(94,-62,917,843),46589=>array(94,-64,907,843),46590=>array(94,-64,908,843),46591=>array(94,-64,908,843),46592=>array(94,-69,923,843),46593=>array(94,-64,908,843),46594=>array(94,-64,908,843),46595=>array(94,-76,907,843),46596=>array(94,-62,907,843),46597=>array(94,-61,907,843),46598=>array(94,-69,922,843),46599=>array(94,-74,929,843),46600=>array(94,-69,927,843),46601=>array(94,-68,911,843),46602=>array(94,-72,929,843),46603=>array(94,-70,936,843),46604=>array(94,-66,908,843),46605=>array(94,-59,916,843),46606=>array(94,-60,928,843),46607=>array(94,-68,908,843),46608=>array(60,12,940,740),46609=>array(79,-61,921,795),46610=>array(79,-61,921,795),46611=>array(79,-71,921,795),46612=>array(79,-46,921,795),46613=>array(79,-68,921,795),46614=>array(79,-74,921,795),46615=>array(79,-44,921,795),46616=>array(79,-62,921,795),46617=>array(79,-64,921,795),46618=>array(79,-64,921,795),46619=>array(79,-63,921,795),46620=>array(79,-68,921,795),46621=>array(79,-64,921,795),46622=>array(79,-63,921,795),46623=>array(79,-74,921,795),46624=>array(79,-62,921,795),46625=>array(79,-61,921,795),46626=>array(79,-69,921,795),46627=>array(79,-74,921,795),46628=>array(79,-69,921,795),46629=>array(79,-68,921,795),46630=>array(79,-72,921,795),46631=>array(79,-70,921,795),46632=>array(79,-66,921,795),46633=>array(79,-59,921,795),46634=>array(79,-60,921,795),46635=>array(79,-68,921,795),46636=>array(68,-69,935,842),46637=>array(69,-59,936,837),46638=>array(69,-61,936,837),46639=>array(69,-71,936,837),46640=>array(57,-45,936,842),46641=>array(69,-69,936,837),46642=>array(69,-76,936,837),46643=>array(69,-44,936,837),46644=>array(69,-62,936,837),46645=>array(69,-64,936,837),46646=>array(69,-64,936,837),46647=>array(69,-64,936,837),46648=>array(69,-70,936,837),46649=>array(69,-64,936,837),46650=>array(69,-64,936,837),46651=>array(69,-76,936,837),46652=>array(69,-62,936,837),46653=>array(69,-61,936,837),46654=>array(69,-70,936,837),46655=>array(69,-74,936,837),46656=>array(69,-69,936,837),46657=>array(69,-67,936,837),46658=>array(69,-72,936,837),46659=>array(69,-71,936,837),46660=>array(69,-66,936,837),46661=>array(69,-59,936,837),46662=>array(69,-60,936,837),46663=>array(69,-69,936,837),46664=>array(64,-69,906,842),46665=>array(70,-61,907,842),46666=>array(70,-61,907,842),46667=>array(70,-71,931,842),46668=>array(57,-46,907,842),46669=>array(70,-68,912,842),46670=>array(70,-76,907,842),46671=>array(70,-44,921,842),46672=>array(70,-62,917,842),46673=>array(70,-64,907,842),46674=>array(70,-64,908,842),46675=>array(70,-64,908,842),46676=>array(70,-69,923,842),46677=>array(70,-64,908,842),46678=>array(70,-64,908,842),46679=>array(70,-76,907,842),46680=>array(70,-62,907,842),46681=>array(70,-61,907,842),46682=>array(70,-69,922,842),46683=>array(70,-74,929,842),46684=>array(70,-69,927,842),46685=>array(70,-68,911,842),46686=>array(70,-72,929,842),46687=>array(70,-70,936,842),46688=>array(70,-66,908,842),46689=>array(70,-59,916,842),46690=>array(70,-60,928,842),46691=>array(70,-68,908,842),46692=>array(83,-69,906,842),46693=>array(64,-61,907,842),46694=>array(64,-61,907,842),46695=>array(64,-71,931,842),46696=>array(64,-46,907,842),46697=>array(64,-68,912,842),46698=>array(64,-76,907,842),46699=>array(64,-44,921,842),46700=>array(64,-62,917,842),46701=>array(64,-64,907,842),46702=>array(64,-64,908,842),46703=>array(64,-64,908,842),46704=>array(64,-69,923,842),46705=>array(64,-64,908,842),46706=>array(64,-64,908,842),46707=>array(64,-76,906,842),46708=>array(64,-62,907,842),46709=>array(64,-61,907,842),46710=>array(64,-69,922,842),46711=>array(64,-74,929,842),46712=>array(64,-69,927,842),46713=>array(64,-68,911,842),46714=>array(64,-72,929,842),46715=>array(64,-70,936,842),46716=>array(64,-66,908,842),46717=>array(64,-59,916,842),46718=>array(64,-60,928,842),46719=>array(64,-68,908,842),46720=>array(59,-13,939,750),46721=>array(79,-61,921,795),46722=>array(79,-61,921,795),46723=>array(79,-71,921,795),46724=>array(79,-46,921,795),46725=>array(79,-68,921,795),46726=>array(79,-74,921,795),46727=>array(79,-44,921,795),46728=>array(79,-62,921,795),46729=>array(79,-64,921,795),46730=>array(79,-64,921,795),46731=>array(79,-63,921,795),46732=>array(79,-68,921,795),46733=>array(79,-64,921,795),46734=>array(79,-63,921,795),46735=>array(79,-74,921,795),46736=>array(79,-62,921,795),46737=>array(79,-61,921,795),46738=>array(79,-69,921,795),46739=>array(79,-74,921,795),46740=>array(79,-69,921,795),46741=>array(79,-68,921,795),46742=>array(79,-72,921,795),46743=>array(79,-70,921,795),46744=>array(79,-66,921,795),46745=>array(79,-59,921,795),46746=>array(79,-60,921,795),46747=>array(79,-68,921,795),46748=>array(79,-64,921,785),46749=>array(79,-61,921,795),46750=>array(79,-61,921,795),46751=>array(79,-71,921,795),46752=>array(79,-46,921,795),46753=>array(79,-68,921,795),46754=>array(79,-74,921,795),46755=>array(79,-44,921,795),46756=>array(79,-62,921,795),46757=>array(79,-64,921,795),46758=>array(79,-64,921,795),46759=>array(79,-63,921,795),46760=>array(79,-68,921,795),46761=>array(79,-64,921,795),46762=>array(79,-63,921,795),46763=>array(79,-74,921,795),46764=>array(79,-62,921,795),46765=>array(79,-61,921,795),46766=>array(79,-69,921,795),46767=>array(79,-74,921,795),46768=>array(79,-69,921,795),46769=>array(79,-68,921,795),46770=>array(79,-72,921,795),46771=>array(79,-70,921,795),46772=>array(79,-66,921,795),46773=>array(79,-59,921,795),46774=>array(79,-60,921,795),46775=>array(79,-68,921,795),46776=>array(72,-70,907,841),46777=>array(67,-61,907,841),46778=>array(67,-61,907,841),46779=>array(67,-71,931,841),46780=>array(63,-46,907,841),46781=>array(67,-68,912,841),46782=>array(67,-76,907,841),46783=>array(67,-44,921,841),46784=>array(67,-62,917,841),46785=>array(67,-64,907,841),46786=>array(67,-64,908,841),46787=>array(67,-64,908,841),46788=>array(67,-69,923,841),46789=>array(67,-64,908,841),46790=>array(67,-64,908,841),46791=>array(67,-76,906,841),46792=>array(67,-62,907,841),46793=>array(67,-61,907,841),46794=>array(67,-69,922,841),46795=>array(67,-74,929,841),46796=>array(67,-69,927,841),46797=>array(67,-68,911,841),46798=>array(67,-72,929,841),46799=>array(67,-70,936,841),46800=>array(67,-66,908,841),46801=>array(67,-59,916,841),46802=>array(67,-60,928,841),46803=>array(67,-68,908,841),46804=>array(50,-68,907,843),46805=>array(67,-61,907,843),46806=>array(67,-61,907,843),46807=>array(67,-71,931,843),46808=>array(68,-46,907,842),46809=>array(67,-68,912,843),46810=>array(67,-76,907,843),46811=>array(67,-44,921,843),46812=>array(67,-62,917,843),46813=>array(67,-64,907,843),46814=>array(67,-64,908,843),46815=>array(67,-64,908,843),46816=>array(67,-69,923,843),46817=>array(67,-64,908,843),46818=>array(67,-64,908,843),46819=>array(67,-76,907,843),46820=>array(67,-62,907,843),46821=>array(67,-61,907,843),46822=>array(67,-69,922,843),46823=>array(67,-74,929,843),46824=>array(67,-69,927,843),46825=>array(67,-68,911,843),46826=>array(67,-72,929,843),46827=>array(67,-70,936,843),46828=>array(67,-66,908,843),46829=>array(67,-59,916,843),46830=>array(67,-60,928,843),46831=>array(67,-68,908,843),46832=>array(63,-69,907,842),46833=>array(66,-61,907,842),46834=>array(66,-61,907,842),46835=>array(66,-71,931,842),46836=>array(66,-46,907,842),46837=>array(66,-68,912,842),46838=>array(66,-76,907,842),46839=>array(66,-44,921,842),46840=>array(66,-62,917,842),46841=>array(66,-64,907,842),46842=>array(66,-64,908,842),46843=>array(66,-64,908,842),46844=>array(66,-69,923,842),46845=>array(66,-64,908,842),46846=>array(66,-64,908,842),46847=>array(66,-76,907,842),46848=>array(66,-62,907,842),46849=>array(66,-61,907,842),46850=>array(66,-69,922,842),46851=>array(66,-74,929,842),46852=>array(66,-69,927,842),46853=>array(66,-68,911,842),46854=>array(66,-72,929,842),46855=>array(66,-70,936,842),46856=>array(66,-66,908,842),46857=>array(66,-59,916,842),46858=>array(66,-60,928,842),46859=>array(66,-68,908,842),46860=>array(79,-64,921,785),46861=>array(79,-61,921,795),46862=>array(79,-61,921,795),46863=>array(79,-71,921,795),46864=>array(81,-46,922,795),46865=>array(79,-68,921,795),46866=>array(79,-74,921,795),46867=>array(79,-44,921,795),46868=>array(79,-62,921,795),46869=>array(79,-64,921,795),46870=>array(79,-64,921,795),46871=>array(79,-63,921,795),46872=>array(79,-68,921,795),46873=>array(79,-64,921,795),46874=>array(79,-63,921,795),46875=>array(79,-74,921,795),46876=>array(79,-62,921,795),46877=>array(79,-61,921,795),46878=>array(79,-69,921,795),46879=>array(79,-74,921,795),46880=>array(79,-69,921,795),46881=>array(79,-68,921,795),46882=>array(79,-72,921,795),46883=>array(79,-70,921,795),46884=>array(79,-66,921,795),46885=>array(79,-59,921,795),46886=>array(79,-60,921,795),46887=>array(79,-68,921,795),46888=>array(57,22,943,720),46889=>array(79,-61,922,795),46890=>array(79,-61,922,795),46891=>array(79,-71,922,795),46892=>array(79,-46,921,795),46893=>array(79,-68,922,795),46894=>array(79,-74,922,795),46895=>array(79,-44,922,795),46896=>array(79,-62,922,795),46897=>array(79,-64,922,795),46898=>array(79,-64,922,795),46899=>array(79,-63,922,795),46900=>array(79,-68,922,795),46901=>array(79,-64,922,795),46902=>array(79,-63,922,795),46903=>array(79,-74,922,795),46904=>array(79,-62,922,795),46905=>array(79,-61,922,795),46906=>array(79,-69,922,795),46907=>array(79,-74,922,795),46908=>array(79,-69,922,795),46909=>array(79,-68,922,795),46910=>array(79,-72,922,795),46911=>array(79,-70,922,795),46912=>array(79,-66,922,795),46913=>array(79,-59,922,795),46914=>array(79,-60,922,795),46915=>array(79,-68,922,795),46916=>array(67,-69,907,842),46917=>array(74,-61,908,842),46918=>array(74,-61,908,842),46919=>array(74,-71,931,842),46920=>array(65,-46,907,842),46921=>array(74,-68,912,842),46922=>array(74,-76,908,842),46923=>array(74,-44,921,842),46924=>array(74,-62,917,842),46925=>array(74,-64,908,842),46926=>array(74,-64,908,842),46927=>array(74,-64,908,842),46928=>array(74,-69,923,842),46929=>array(74,-64,908,842),46930=>array(74,-64,908,842),46931=>array(74,-76,908,842),46932=>array(74,-62,908,842),46933=>array(74,-61,908,842),46934=>array(74,-69,922,842),46935=>array(74,-74,929,842),46936=>array(74,-69,927,842),46937=>array(74,-68,911,842),46938=>array(74,-72,929,842),46939=>array(74,-70,936,842),46940=>array(74,-66,908,842),46941=>array(74,-59,916,842),46942=>array(74,-60,928,842),46943=>array(74,-68,908,842),46944=>array(104,-69,907,842),46945=>array(109,-61,907,842),46946=>array(109,-61,907,842),46947=>array(109,-71,931,842),46948=>array(99,-46,907,842),46949=>array(109,-68,912,842),46950=>array(109,-76,907,842),46951=>array(109,-44,921,842),46952=>array(109,-62,917,842),46953=>array(109,-64,907,842),46954=>array(109,-64,908,842),46955=>array(109,-64,908,842),46956=>array(109,-69,923,842),46957=>array(109,-64,908,842),46958=>array(109,-64,908,842),46959=>array(109,-76,907,842),46960=>array(109,-62,907,842),46961=>array(109,-61,907,842),46962=>array(109,-69,922,842),46963=>array(109,-74,929,842),46964=>array(109,-69,927,842),46965=>array(109,-68,911,842),46966=>array(109,-72,929,842),46967=>array(109,-70,936,842),46968=>array(109,-66,908,842),46969=>array(109,-59,916,842),46970=>array(109,-60,928,842),46971=>array(109,-68,908,842),46972=>array(118,-69,936,842),46973=>array(103,-59,936,842),46974=>array(103,-61,936,842),46975=>array(103,-71,936,842),46976=>array(108,-45,936,842),46977=>array(103,-69,936,842),46978=>array(103,-76,936,842),46979=>array(103,-44,936,842),46980=>array(103,-62,936,842),46981=>array(103,-64,936,842),46982=>array(103,-64,936,842),46983=>array(103,-64,936,842),46984=>array(103,-70,936,842),46985=>array(103,-64,936,842),46986=>array(103,-64,936,842),46987=>array(103,-76,936,842),46988=>array(103,-62,936,842),46989=>array(103,-61,936,842),46990=>array(103,-70,936,842),46991=>array(103,-74,936,842),46992=>array(103,-69,936,842),46993=>array(103,-67,936,842),46994=>array(103,-72,936,842),46995=>array(103,-71,936,842),46996=>array(103,-66,936,842),46997=>array(103,-59,936,842),46998=>array(103,-60,936,842),46999=>array(103,-69,936,842),47000=>array(118,-69,907,842),47001=>array(103,-61,907,842),47002=>array(103,-61,907,842),47003=>array(103,-71,931,842),47004=>array(103,-46,907,842),47005=>array(103,-68,912,842),47006=>array(103,-76,907,842),47007=>array(103,-44,921,842),47008=>array(103,-62,917,842),47009=>array(103,-64,907,842),47010=>array(103,-64,908,842),47011=>array(103,-64,908,842),47012=>array(103,-69,923,842),47013=>array(103,-64,908,842),47014=>array(103,-64,908,842),47015=>array(103,-76,907,842),47016=>array(103,-62,907,842),47017=>array(103,-61,907,842),47018=>array(103,-69,922,842),47019=>array(103,-74,929,842),47020=>array(103,-69,927,842),47021=>array(103,-68,911,842),47022=>array(103,-72,929,842),47023=>array(103,-70,936,842),47024=>array(103,-66,908,842),47025=>array(103,-59,916,842),47026=>array(103,-60,928,842),47027=>array(103,-68,908,842),47028=>array(118,-68,935,843),47029=>array(103,-59,936,842),47030=>array(103,-61,936,842),47031=>array(103,-71,936,842),47032=>array(108,-45,936,842),47033=>array(103,-69,936,842),47034=>array(103,-76,936,842),47035=>array(103,-44,936,842),47036=>array(103,-62,936,842),47037=>array(103,-64,936,842),47038=>array(103,-64,936,842),47039=>array(103,-64,936,842),47040=>array(103,-70,936,842),47041=>array(103,-64,936,842),47042=>array(103,-64,936,842),47043=>array(103,-76,936,842),47044=>array(103,-62,936,842),47045=>array(103,-61,936,842),47046=>array(103,-70,936,842),47047=>array(103,-74,936,842),47048=>array(103,-69,936,842),47049=>array(103,-67,936,842),47050=>array(103,-72,936,842),47051=>array(103,-71,936,842),47052=>array(103,-66,936,842),47053=>array(103,-59,936,842),47054=>array(103,-60,936,842),47055=>array(103,-69,936,842),47056=>array(118,-69,907,842),47057=>array(103,-61,907,842),47058=>array(103,-61,907,842),47059=>array(103,-71,931,842),47060=>array(103,-46,907,842),47061=>array(103,-68,912,842),47062=>array(103,-76,907,842),47063=>array(103,-44,921,842),47064=>array(103,-62,917,842),47065=>array(103,-64,907,842),47066=>array(103,-64,908,842),47067=>array(103,-64,908,842),47068=>array(103,-69,923,842),47069=>array(103,-64,908,842),47070=>array(103,-64,908,842),47071=>array(103,-76,907,842),47072=>array(103,-62,907,842),47073=>array(103,-61,907,842),47074=>array(103,-69,922,842),47075=>array(103,-74,929,842),47076=>array(103,-69,927,842),47077=>array(103,-68,911,842),47078=>array(103,-72,929,842),47079=>array(103,-70,936,842),47080=>array(103,-66,908,842),47081=>array(103,-59,916,842),47082=>array(103,-60,928,842),47083=>array(103,-68,908,842),47084=>array(118,-70,907,841),47085=>array(103,-61,907,841),47086=>array(103,-61,907,841),47087=>array(103,-71,931,841),47088=>array(103,-46,907,841),47089=>array(103,-68,912,841),47090=>array(103,-76,907,841),47091=>array(103,-44,921,841),47092=>array(103,-62,917,841),47093=>array(103,-64,907,841),47094=>array(103,-64,908,841),47095=>array(103,-64,908,841),47096=>array(103,-69,923,841),47097=>array(103,-64,908,841),47098=>array(103,-64,908,841),47099=>array(103,-76,906,841),47100=>array(103,-62,907,841),47101=>array(103,-61,907,841),47102=>array(103,-69,922,841),47103=>array(103,-74,929,841),47104=>array(103,-69,927,841),47105=>array(103,-68,911,841),47106=>array(103,-72,929,841),47107=>array(103,-70,936,841),47108=>array(103,-66,908,841),47109=>array(103,-59,916,841),47110=>array(103,-60,928,841),47111=>array(103,-68,908,841),47112=>array(118,-68,907,843),47113=>array(118,-61,907,843),47114=>array(118,-61,907,843),47115=>array(118,-71,931,843),47116=>array(118,-46,907,843),47117=>array(118,-68,912,843),47118=>array(118,-76,907,843),47119=>array(118,-44,921,843),47120=>array(118,-62,917,843),47121=>array(118,-64,907,843),47122=>array(118,-64,908,843),47123=>array(118,-64,908,843),47124=>array(118,-69,923,843),47125=>array(118,-64,908,843),47126=>array(118,-64,908,843),47127=>array(118,-76,907,843),47128=>array(118,-62,907,843),47129=>array(118,-61,907,843),47130=>array(118,-69,922,843),47131=>array(118,-74,929,843),47132=>array(118,-69,927,843),47133=>array(118,-68,911,843),47134=>array(118,-72,929,843),47135=>array(118,-70,936,843),47136=>array(118,-66,908,843),47137=>array(118,-59,916,843),47138=>array(118,-60,928,843),47139=>array(118,-68,908,843),47140=>array(118,-70,907,842),47141=>array(103,-61,908,842),47142=>array(103,-61,908,842),47143=>array(103,-71,931,842),47144=>array(103,-46,907,842),47145=>array(103,-68,912,842),47146=>array(103,-76,908,842),47147=>array(103,-44,921,842),47148=>array(103,-62,917,842),47149=>array(103,-64,908,842),47150=>array(103,-64,908,842),47151=>array(103,-64,908,842),47152=>array(103,-69,923,842),47153=>array(103,-64,908,842),47154=>array(103,-64,908,842),47155=>array(103,-76,908,842),47156=>array(103,-62,908,842),47157=>array(103,-61,908,842),47158=>array(103,-69,922,842),47159=>array(103,-74,929,842),47160=>array(103,-69,927,842),47161=>array(103,-68,911,842),47162=>array(103,-72,929,842),47163=>array(103,-70,936,842),47164=>array(103,-66,908,842),47165=>array(103,-59,916,842),47166=>array(103,-60,928,842),47167=>array(103,-68,908,842),47168=>array(118,-68,907,843),47169=>array(118,-61,907,843),47170=>array(118,-61,907,843),47171=>array(118,-71,931,843),47172=>array(118,-46,907,843),47173=>array(118,-68,912,843),47174=>array(118,-76,907,843),47175=>array(118,-44,921,843),47176=>array(118,-62,917,843),47177=>array(118,-64,907,843),47178=>array(118,-64,908,843),47179=>array(118,-64,908,843),47180=>array(118,-69,923,843),47181=>array(118,-64,908,843),47182=>array(118,-64,908,843),47183=>array(118,-76,907,843),47184=>array(118,-62,907,843),47185=>array(118,-61,907,843),47186=>array(118,-69,922,843),47187=>array(118,-74,929,843),47188=>array(118,-69,927,843),47189=>array(118,-68,911,843),47190=>array(118,-72,929,843),47191=>array(118,-70,936,843),47192=>array(118,-66,908,843),47193=>array(118,-59,916,843),47194=>array(118,-60,928,843),47195=>array(118,-68,908,843),47196=>array(62,27,943,755),47197=>array(79,-61,921,795),47198=>array(79,-61,921,795),47199=>array(79,-71,921,795),47200=>array(79,-46,921,795),47201=>array(79,-68,921,795),47202=>array(79,-74,921,795),47203=>array(79,-44,921,795),47204=>array(79,-62,921,795),47205=>array(79,-64,921,795),47206=>array(79,-64,921,795),47207=>array(79,-63,921,795),47208=>array(79,-68,921,795),47209=>array(79,-64,921,795),47210=>array(79,-63,921,795),47211=>array(79,-74,921,795),47212=>array(79,-62,921,795),47213=>array(79,-61,921,795),47214=>array(79,-69,921,795),47215=>array(79,-74,921,795),47216=>array(79,-69,921,795),47217=>array(79,-68,921,795),47218=>array(79,-72,921,795),47219=>array(79,-70,921,795),47220=>array(79,-66,921,795),47221=>array(79,-59,921,795),47222=>array(79,-60,921,795),47223=>array(79,-68,921,795),47224=>array(52,-69,936,842),47225=>array(68,-59,936,842),47226=>array(68,-61,936,842),47227=>array(68,-71,936,842),47228=>array(74,-45,936,843),47229=>array(68,-69,936,842),47230=>array(68,-76,936,842),47231=>array(68,-44,936,842),47232=>array(68,-62,936,842),47233=>array(68,-64,936,842),47234=>array(68,-64,936,842),47235=>array(68,-64,936,842),47236=>array(68,-70,936,842),47237=>array(68,-64,936,842),47238=>array(68,-64,936,842),47239=>array(68,-76,936,842),47240=>array(68,-62,936,842),47241=>array(68,-61,936,842),47242=>array(68,-70,936,842),47243=>array(68,-74,936,842),47244=>array(68,-69,936,842),47245=>array(68,-67,936,842),47246=>array(68,-72,936,842),47247=>array(68,-71,936,842),47248=>array(68,-66,936,842),47249=>array(68,-59,936,842),47250=>array(68,-60,936,842),47251=>array(68,-69,936,842),47252=>array(61,-68,907,843),47253=>array(64,-61,908,842),47254=>array(64,-61,908,842),47255=>array(64,-71,931,842),47256=>array(58,-46,907,842),47257=>array(64,-68,912,842),47258=>array(64,-76,908,842),47259=>array(64,-44,921,842),47260=>array(64,-62,917,842),47261=>array(64,-64,908,842),47262=>array(64,-64,908,842),47263=>array(64,-64,908,842),47264=>array(64,-69,923,842),47265=>array(64,-64,908,842),47266=>array(64,-64,908,842),47267=>array(64,-76,908,842),47268=>array(64,-62,908,842),47269=>array(64,-61,908,842),47270=>array(64,-69,922,842),47271=>array(64,-74,929,842),47272=>array(64,-69,927,842),47273=>array(64,-68,911,842),47274=>array(64,-72,929,842),47275=>array(64,-70,936,842),47276=>array(64,-66,908,842),47277=>array(64,-59,916,842),47278=>array(64,-60,928,842),47279=>array(64,-68,908,842),47280=>array(62,-69,907,842),47281=>array(64,-61,907,841),47282=>array(64,-61,907,841),47283=>array(64,-71,931,841),47284=>array(64,-46,907,842),47285=>array(64,-68,912,841),47286=>array(64,-76,907,841),47287=>array(64,-44,921,841),47288=>array(64,-62,917,841),47289=>array(64,-64,907,841),47290=>array(64,-64,908,841),47291=>array(64,-64,908,841),47292=>array(64,-69,923,841),47293=>array(64,-64,908,841),47294=>array(64,-64,908,841),47295=>array(64,-76,907,841),47296=>array(64,-62,907,841),47297=>array(64,-61,907,841),47298=>array(64,-69,922,841),47299=>array(64,-74,929,841),47300=>array(64,-69,927,841),47301=>array(64,-68,911,841),47302=>array(64,-72,929,841),47303=>array(64,-70,936,841),47304=>array(64,-66,908,841),47305=>array(64,-59,916,841),47306=>array(64,-60,928,841),47307=>array(64,-68,908,841),47308=>array(62,27,943,755),47309=>array(79,-61,921,795),47310=>array(79,-61,921,795),47311=>array(79,-71,921,795),47312=>array(79,-46,922,795),47313=>array(79,-68,921,795),47314=>array(79,-74,921,795),47315=>array(79,-44,921,795),47316=>array(79,-62,921,795),47317=>array(79,-64,921,795),47318=>array(79,-64,921,795),47319=>array(79,-63,921,795),47320=>array(79,-68,921,795),47321=>array(79,-64,921,795),47322=>array(79,-63,921,795),47323=>array(79,-74,921,795),47324=>array(79,-62,921,795),47325=>array(79,-61,921,795),47326=>array(79,-69,921,795),47327=>array(79,-74,921,795),47328=>array(79,-69,921,795),47329=>array(79,-68,921,795),47330=>array(79,-72,921,795),47331=>array(79,-70,921,795),47332=>array(79,-66,921,795),47333=>array(79,-59,921,795),47334=>array(79,-60,921,795),47335=>array(79,-68,921,795),47336=>array(79,-64,920,795),47337=>array(79,-61,921,795),47338=>array(79,-61,921,795),47339=>array(79,-71,921,795),47340=>array(79,-46,921,795),47341=>array(79,-68,921,795),47342=>array(79,-74,921,795),47343=>array(79,-44,921,795),47344=>array(79,-62,921,795),47345=>array(79,-64,921,795),47346=>array(79,-64,921,795),47347=>array(79,-63,921,795),47348=>array(79,-68,921,795),47349=>array(79,-64,921,795),47350=>array(79,-63,921,795),47351=>array(79,-74,921,795),47352=>array(79,-62,921,795),47353=>array(79,-61,921,795),47354=>array(79,-69,921,795),47355=>array(79,-74,921,795),47356=>array(79,-69,921,795),47357=>array(79,-68,921,795),47358=>array(79,-72,921,795),47359=>array(79,-70,921,795),47360=>array(79,-66,921,795),47361=>array(79,-59,921,795),47362=>array(79,-60,921,795),47363=>array(79,-68,921,795),47364=>array(69,-70,907,841),47365=>array(76,-61,907,841),47366=>array(76,-61,907,841),47367=>array(76,-71,931,841),47368=>array(76,-46,907,841),47369=>array(76,-68,912,841),47370=>array(76,-76,907,841),47371=>array(76,-44,921,841),47372=>array(76,-62,917,841),47373=>array(76,-64,907,841),47374=>array(76,-64,908,841),47375=>array(76,-64,908,841),47376=>array(76,-69,923,841),47377=>array(76,-64,908,841),47378=>array(76,-64,908,841),47379=>array(76,-76,906,841),47380=>array(76,-62,907,841),47381=>array(76,-61,907,841),47382=>array(76,-69,922,841),47383=>array(76,-74,929,841),47384=>array(76,-69,927,841),47385=>array(76,-68,911,841),47386=>array(76,-72,929,841),47387=>array(76,-70,936,841),47388=>array(76,-66,908,841),47389=>array(76,-59,916,841),47390=>array(76,-60,928,841),47391=>array(76,-68,908,841),47392=>array(52,-68,907,843),47393=>array(72,-61,907,843),47394=>array(72,-61,907,843),47395=>array(72,-71,931,843),47396=>array(90,-46,907,843),47397=>array(72,-68,912,843),47398=>array(72,-76,907,843),47399=>array(72,-44,921,843),47400=>array(72,-62,917,843),47401=>array(72,-64,907,843),47402=>array(72,-64,908,843),47403=>array(72,-64,908,843),47404=>array(72,-69,923,843),47405=>array(72,-64,908,843),47406=>array(72,-64,908,843),47407=>array(72,-76,907,843),47408=>array(72,-62,907,843),47409=>array(72,-61,907,843),47410=>array(72,-69,922,843),47411=>array(72,-74,929,843),47412=>array(72,-69,927,843),47413=>array(72,-68,911,843),47414=>array(72,-72,929,843),47415=>array(72,-70,936,843),47416=>array(72,-66,908,843),47417=>array(72,-59,916,843),47418=>array(72,-60,928,843),47419=>array(72,-68,908,843),47420=>array(70,-69,907,842),47421=>array(64,-61,907,842),47422=>array(64,-61,907,842),47423=>array(64,-71,931,842),47424=>array(65,-46,907,843),47425=>array(64,-68,912,842),47426=>array(64,-76,907,842),47427=>array(64,-44,921,842),47428=>array(64,-62,917,842),47429=>array(64,-64,907,842),47430=>array(64,-64,908,842),47431=>array(64,-64,908,842),47432=>array(64,-69,923,842),47433=>array(64,-64,908,842),47434=>array(64,-64,908,842),47435=>array(64,-76,907,842),47436=>array(64,-62,907,842),47437=>array(64,-61,907,842),47438=>array(64,-69,922,842),47439=>array(64,-74,929,842),47440=>array(64,-69,927,842),47441=>array(64,-68,911,842),47442=>array(64,-72,929,842),47443=>array(64,-70,936,842),47444=>array(64,-66,908,842),47445=>array(64,-59,916,842),47446=>array(64,-60,928,842),47447=>array(64,-68,908,842),47448=>array(71,-64,928,795),47449=>array(79,-61,921,795),47450=>array(79,-61,921,795),47451=>array(79,-71,921,795),47452=>array(79,-46,921,795),47453=>array(79,-68,921,795),47454=>array(79,-74,921,795),47455=>array(79,-44,921,795),47456=>array(79,-62,921,795),47457=>array(79,-64,921,795),47458=>array(79,-64,921,795),47459=>array(79,-63,921,795),47460=>array(79,-68,921,795),47461=>array(79,-64,921,795),47462=>array(79,-63,921,795),47463=>array(79,-74,921,795),47464=>array(79,-62,921,795),47465=>array(79,-61,921,795),47466=>array(79,-69,921,795),47467=>array(79,-74,921,795),47468=>array(79,-69,921,795),47469=>array(79,-68,921,795),47470=>array(79,-72,921,795),47471=>array(79,-70,921,795),47472=>array(79,-66,921,795),47473=>array(79,-59,921,795),47474=>array(79,-60,921,795),47475=>array(79,-68,921,795),47476=>array(57,42,943,730),47477=>array(79,-61,921,795),47478=>array(79,-61,921,795),47479=>array(79,-71,921,795),47480=>array(79,-46,921,795),47481=>array(79,-68,921,795),47482=>array(79,-74,921,795),47483=>array(79,-44,921,795),47484=>array(79,-62,921,795),47485=>array(79,-64,921,795),47486=>array(79,-64,921,795),47487=>array(79,-63,921,795),47488=>array(79,-68,921,795),47489=>array(79,-64,921,795),47490=>array(79,-63,921,795),47491=>array(79,-74,921,795),47492=>array(79,-62,921,795),47493=>array(79,-61,921,795),47494=>array(79,-69,921,795),47495=>array(79,-74,921,795),47496=>array(79,-69,921,795),47497=>array(79,-68,921,795),47498=>array(79,-72,921,795),47499=>array(79,-70,921,795),47500=>array(79,-66,921,795),47501=>array(79,-59,921,795),47502=>array(79,-60,921,795),47503=>array(79,-68,921,795),47504=>array(67,-69,907,842),47505=>array(64,-61,908,842),47506=>array(64,-61,908,842),47507=>array(64,-71,931,842),47508=>array(64,-46,908,842),47509=>array(64,-68,912,842),47510=>array(64,-76,908,842),47511=>array(64,-44,921,842),47512=>array(64,-62,917,842),47513=>array(64,-64,908,842),47514=>array(64,-64,908,842),47515=>array(64,-64,908,842),47516=>array(64,-69,923,842),47517=>array(64,-64,908,842),47518=>array(64,-64,908,842),47519=>array(64,-76,908,842),47520=>array(64,-62,908,842),47521=>array(64,-61,908,842),47522=>array(64,-69,922,842),47523=>array(64,-74,929,842),47524=>array(64,-69,927,842),47525=>array(64,-68,911,842),47526=>array(64,-72,929,842),47527=>array(64,-70,936,842),47528=>array(64,-66,908,842),47529=>array(64,-59,916,842),47530=>array(64,-60,928,842),47531=>array(64,-68,908,842),47532=>array(143,-69,907,842),47533=>array(138,-61,907,842),47534=>array(138,-61,907,842),47535=>array(138,-71,931,842),47536=>array(138,-46,907,842),47537=>array(138,-68,912,842),47538=>array(138,-76,907,842),47539=>array(138,-44,921,842),47540=>array(138,-62,917,842),47541=>array(138,-64,907,842),47542=>array(138,-64,908,842),47543=>array(138,-64,908,842),47544=>array(138,-69,923,842),47545=>array(138,-64,908,842),47546=>array(138,-64,908,842),47547=>array(138,-76,907,842),47548=>array(138,-62,907,842),47549=>array(138,-61,907,842),47550=>array(138,-69,922,842),47551=>array(138,-74,929,842),47552=>array(138,-69,927,842),47553=>array(138,-68,911,842),47554=>array(138,-72,929,842),47555=>array(138,-70,936,842),47556=>array(138,-66,908,842),47557=>array(138,-59,916,842),47558=>array(138,-60,928,842),47559=>array(138,-68,908,842),47560=>array(127,-69,936,842),47561=>array(122,-59,936,842),47562=>array(122,-61,936,842),47563=>array(122,-71,936,842),47564=>array(122,-45,936,842),47565=>array(122,-69,936,842),47566=>array(122,-76,936,842),47567=>array(122,-44,936,842),47568=>array(122,-62,936,842),47569=>array(122,-64,936,842),47570=>array(122,-64,936,842),47571=>array(122,-64,936,842),47572=>array(122,-70,936,842),47573=>array(122,-64,936,842),47574=>array(122,-64,936,842),47575=>array(122,-76,936,842),47576=>array(122,-62,936,842),47577=>array(122,-61,936,842),47578=>array(122,-70,936,842),47579=>array(122,-74,936,842),47580=>array(118,-69,936,842),47581=>array(122,-67,936,842),47582=>array(122,-72,936,842),47583=>array(122,-71,936,842),47584=>array(122,-66,936,842),47585=>array(122,-59,936,842),47586=>array(122,-60,936,842),47587=>array(122,-69,936,842),47588=>array(127,-69,907,842),47589=>array(122,-61,907,842),47590=>array(122,-61,907,842),47591=>array(122,-71,931,842),47592=>array(122,-46,907,842),47593=>array(122,-68,912,842),47594=>array(122,-76,907,842),47595=>array(122,-44,921,842),47596=>array(122,-62,917,842),47597=>array(122,-64,907,842),47598=>array(122,-64,908,842),47599=>array(122,-64,908,842),47600=>array(122,-69,923,842),47601=>array(122,-64,908,842),47602=>array(122,-64,908,842),47603=>array(122,-76,907,842),47604=>array(122,-62,907,842),47605=>array(122,-61,907,842),47606=>array(122,-69,922,842),47607=>array(122,-74,929,842),47608=>array(122,-69,927,842),47609=>array(122,-68,911,842),47610=>array(122,-72,929,842),47611=>array(122,-70,936,842),47612=>array(122,-66,908,842),47613=>array(122,-59,916,842),47614=>array(122,-60,928,842),47615=>array(122,-68,908,842),47616=>array(127,-68,935,843),47617=>array(122,-59,936,842),47618=>array(122,-61,936,842),47619=>array(122,-71,936,842),47620=>array(122,-45,936,842),47621=>array(122,-69,936,842),47622=>array(122,-76,936,842),47623=>array(122,-44,936,842),47624=>array(122,-62,936,842),47625=>array(122,-64,936,842),47626=>array(122,-64,936,842),47627=>array(122,-64,936,842),47628=>array(122,-70,936,842),47629=>array(122,-64,936,842),47630=>array(122,-64,936,842),47631=>array(122,-76,936,842),47632=>array(122,-62,936,842),47633=>array(122,-61,936,842),47634=>array(122,-70,936,842),47635=>array(122,-74,936,842),47636=>array(118,-69,936,842),47637=>array(122,-67,936,842),47638=>array(122,-72,936,842),47639=>array(122,-71,936,842),47640=>array(122,-66,936,842),47641=>array(122,-59,936,842),47642=>array(122,-60,936,842),47643=>array(122,-69,936,842),47644=>array(127,-69,907,842),47645=>array(122,-61,907,842),47646=>array(122,-61,907,842),47647=>array(122,-71,931,842),47648=>array(122,-46,907,842),47649=>array(122,-68,912,842),47650=>array(122,-76,907,842),47651=>array(122,-44,921,842),47652=>array(122,-62,917,842),47653=>array(122,-64,907,842),47654=>array(122,-64,908,842),47655=>array(122,-64,908,842),47656=>array(122,-69,923,842),47657=>array(122,-64,908,842),47658=>array(122,-64,908,842),47659=>array(122,-76,907,842),47660=>array(122,-62,907,842),47661=>array(122,-61,907,842),47662=>array(122,-69,922,842),47663=>array(122,-74,929,842),47664=>array(122,-69,927,842),47665=>array(122,-68,911,842),47666=>array(122,-72,929,842),47667=>array(122,-70,936,842),47668=>array(122,-66,908,842),47669=>array(122,-59,916,842),47670=>array(122,-60,928,842),47671=>array(122,-68,908,842),47672=>array(127,-70,907,841),47673=>array(122,-61,907,841),47674=>array(122,-61,907,841),47675=>array(122,-71,931,841),47676=>array(112,-46,907,841),47677=>array(122,-68,912,841),47678=>array(122,-76,907,841),47679=>array(122,-44,921,841),47680=>array(122,-62,917,841),47681=>array(122,-64,907,841),47682=>array(122,-64,908,841),47683=>array(122,-64,908,841),47684=>array(122,-69,923,841),47685=>array(122,-64,908,841),47686=>array(122,-64,908,841),47687=>array(122,-76,906,841),47688=>array(122,-62,907,841),47689=>array(122,-61,907,841),47690=>array(122,-69,922,841),47691=>array(122,-74,929,841),47692=>array(122,-69,927,841),47693=>array(122,-68,911,841),47694=>array(122,-72,929,841),47695=>array(122,-70,936,841),47696=>array(122,-66,908,841),47697=>array(122,-59,916,841),47698=>array(122,-60,928,841),47699=>array(122,-68,908,841),47700=>array(127,-68,907,843),47701=>array(122,-61,907,843),47702=>array(122,-61,907,843),47703=>array(122,-71,931,843),47704=>array(122,-46,907,843),47705=>array(122,-68,912,843),47706=>array(122,-76,907,843),47707=>array(122,-44,921,843),47708=>array(122,-62,917,843),47709=>array(122,-64,907,843),47710=>array(122,-64,908,843),47711=>array(122,-64,908,843),47712=>array(122,-69,923,843),47713=>array(122,-64,908,843),47714=>array(122,-64,908,843),47715=>array(122,-76,907,843),47716=>array(122,-62,907,843),47717=>array(122,-61,907,843),47718=>array(122,-69,922,843),47719=>array(122,-74,929,843),47720=>array(122,-69,927,843),47721=>array(122,-68,911,843),47722=>array(122,-72,929,843),47723=>array(122,-70,936,843),47724=>array(122,-66,908,843),47725=>array(122,-59,916,843),47726=>array(122,-60,928,843),47727=>array(122,-68,908,843),47728=>array(127,-70,907,842),47729=>array(122,-61,908,842),47730=>array(122,-61,908,842),47731=>array(122,-71,931,842),47732=>array(112,-46,907,842),47733=>array(122,-68,912,842),47734=>array(122,-76,908,842),47735=>array(122,-44,921,842),47736=>array(122,-62,917,842),47737=>array(122,-64,908,842),47738=>array(122,-64,908,842),47739=>array(122,-64,908,842),47740=>array(122,-69,923,842),47741=>array(122,-64,908,842),47742=>array(122,-64,908,842),47743=>array(122,-76,908,842),47744=>array(122,-62,908,842),47745=>array(122,-61,908,842),47746=>array(122,-69,922,842),47747=>array(122,-74,929,842),47748=>array(122,-69,927,842),47749=>array(122,-68,911,842),47750=>array(122,-72,929,842),47751=>array(122,-70,936,842),47752=>array(122,-66,908,842),47753=>array(122,-59,916,842),47754=>array(122,-60,928,842),47755=>array(122,-68,908,842),47756=>array(127,-68,907,843),47757=>array(122,-61,907,843),47758=>array(122,-61,907,843),47759=>array(122,-71,931,843),47760=>array(122,-46,907,843),47761=>array(122,-68,912,843),47762=>array(122,-76,907,843),47763=>array(122,-44,921,843),47764=>array(122,-62,917,843),47765=>array(122,-64,907,843),47766=>array(122,-64,908,843),47767=>array(122,-64,908,843),47768=>array(122,-69,923,843),47769=>array(122,-64,908,843),47770=>array(122,-64,908,843),47771=>array(122,-76,907,843),47772=>array(122,-62,907,843),47773=>array(122,-61,907,843),47774=>array(122,-69,922,843),47775=>array(122,-74,929,843),47776=>array(122,-69,927,843),47777=>array(122,-68,911,843),47778=>array(122,-72,929,843),47779=>array(122,-70,936,843),47780=>array(122,-66,908,843),47781=>array(122,-59,916,843),47782=>array(122,-60,928,843),47783=>array(122,-68,908,843),47784=>array(62,17,943,740),47785=>array(79,-61,921,800),47786=>array(79,-61,921,800),47787=>array(79,-71,921,800),47788=>array(79,-46,921,800),47789=>array(79,-68,921,800),47790=>array(79,-74,921,800),47791=>array(79,-44,921,800),47792=>array(79,-62,921,800),47793=>array(79,-64,921,800),47794=>array(79,-64,921,800),47795=>array(79,-63,921,800),47796=>array(79,-68,921,800),47797=>array(79,-64,921,800),47798=>array(79,-63,921,800),47799=>array(79,-74,921,800),47800=>array(79,-62,921,800),47801=>array(79,-61,921,800),47802=>array(79,-69,921,800),47803=>array(79,-74,921,800),47804=>array(79,-69,921,800),47805=>array(79,-68,921,800),47806=>array(79,-72,921,800),47807=>array(79,-70,921,800),47808=>array(79,-66,921,800),47809=>array(79,-59,921,800),47810=>array(79,-60,921,800),47811=>array(79,-68,921,800),47812=>array(52,-69,936,842),47813=>array(77,-59,936,843),47814=>array(77,-61,936,843),47815=>array(77,-71,936,843),47816=>array(66,-45,936,842),47817=>array(77,-69,936,843),47818=>array(77,-76,936,843),47819=>array(77,-44,936,843),47820=>array(77,-62,936,843),47821=>array(77,-64,936,843),47822=>array(77,-64,936,843),47823=>array(77,-64,936,843),47824=>array(77,-70,936,843),47825=>array(77,-64,936,843),47826=>array(77,-64,936,843),47827=>array(77,-76,936,843),47828=>array(77,-62,936,843),47829=>array(77,-61,936,843),47830=>array(77,-70,936,843),47831=>array(77,-74,936,843),47832=>array(77,-69,936,843),47833=>array(77,-67,936,843),47834=>array(77,-72,936,843),47835=>array(77,-71,936,843),47836=>array(77,-66,936,843),47837=>array(77,-59,936,843),47838=>array(77,-60,936,843),47839=>array(77,-69,936,843),47840=>array(61,-69,907,842),47841=>array(79,-61,907,843),47842=>array(79,-61,907,843),47843=>array(79,-71,931,843),47844=>array(72,-46,907,842),47845=>array(79,-68,912,843),47846=>array(79,-76,907,843),47847=>array(79,-44,921,843),47848=>array(79,-62,917,843),47849=>array(79,-64,907,843),47850=>array(79,-64,908,843),47851=>array(79,-64,908,843),47852=>array(79,-69,923,843),47853=>array(79,-64,908,843),47854=>array(79,-64,908,843),47855=>array(79,-76,907,843),47856=>array(79,-62,907,843),47857=>array(79,-61,907,843),47858=>array(79,-69,922,843),47859=>array(79,-74,929,843),47860=>array(79,-69,927,843),47861=>array(79,-68,911,843),47862=>array(79,-72,929,843),47863=>array(79,-70,936,843),47864=>array(79,-66,908,843),47865=>array(79,-59,916,843),47866=>array(79,-60,928,843),47867=>array(79,-68,908,843),47868=>array(61,-69,907,842),47869=>array(64,-61,908,841),47870=>array(64,-61,908,841),47871=>array(64,-71,931,841),47872=>array(65,-46,908,841),47873=>array(64,-68,912,841),47874=>array(64,-76,908,841),47875=>array(64,-44,921,841),47876=>array(64,-62,917,841),47877=>array(64,-64,908,841),47878=>array(64,-64,908,841),47879=>array(64,-64,908,841),47880=>array(64,-69,923,841),47881=>array(64,-64,908,841),47882=>array(64,-64,908,841),47883=>array(64,-76,908,841),47884=>array(64,-62,908,841),47885=>array(64,-61,908,841),47886=>array(64,-69,922,841),47887=>array(64,-74,929,841),47888=>array(64,-69,927,841),47889=>array(64,-68,911,841),47890=>array(64,-72,929,841),47891=>array(64,-70,936,841),47892=>array(64,-66,908,841),47893=>array(64,-59,916,841),47894=>array(64,-60,928,841),47895=>array(64,-68,908,841),47896=>array(60,-3,940,765),47897=>array(79,-61,922,800),47898=>array(79,-61,922,800),47899=>array(79,-71,922,800),47900=>array(79,-46,922,800),47901=>array(79,-68,922,800),47902=>array(79,-74,922,800),47903=>array(79,-44,922,800),47904=>array(79,-62,922,800),47905=>array(79,-64,922,800),47906=>array(79,-64,922,800),47907=>array(79,-63,922,800),47908=>array(79,-68,922,800),47909=>array(79,-64,922,800),47910=>array(79,-63,922,800),47911=>array(79,-74,922,800),47912=>array(79,-62,922,800),47913=>array(79,-61,922,800),47914=>array(79,-69,922,800),47915=>array(79,-74,922,800),47916=>array(79,-69,922,800),47917=>array(79,-68,922,800),47918=>array(79,-72,922,800),47919=>array(79,-70,922,800),47920=>array(79,-66,922,800),47921=>array(79,-59,922,800),47922=>array(79,-60,922,800),47923=>array(79,-68,922,800),47924=>array(79,-64,921,800),47925=>array(79,-61,921,800),47926=>array(79,-61,921,800),47927=>array(79,-71,921,800),47928=>array(79,-46,921,800),47929=>array(79,-68,921,800),47930=>array(79,-74,921,800),47931=>array(79,-44,921,800),47932=>array(79,-62,921,800),47933=>array(79,-64,921,800),47934=>array(79,-64,921,800),47935=>array(79,-63,921,800),47936=>array(79,-68,921,800),47937=>array(79,-64,921,800),47938=>array(79,-63,921,800),47939=>array(79,-74,921,800),47940=>array(79,-62,921,800),47941=>array(79,-61,921,800),47942=>array(79,-69,921,800),47943=>array(79,-74,921,800),47944=>array(79,-69,921,800),47945=>array(79,-68,921,800),47946=>array(79,-72,921,800),47947=>array(79,-70,921,800),47948=>array(79,-66,921,800),47949=>array(79,-59,921,800),47950=>array(79,-60,921,800),47951=>array(79,-68,921,800),47952=>array(69,-70,907,841),47953=>array(79,-61,907,841),47954=>array(79,-61,907,841),47955=>array(79,-71,931,841),47956=>array(79,-46,907,841),47957=>array(79,-68,912,841),47958=>array(79,-76,907,841),47959=>array(79,-44,921,841),47960=>array(79,-62,917,841),47961=>array(79,-64,907,841),47962=>array(79,-64,908,841),47963=>array(79,-64,908,841),47964=>array(79,-69,923,841),47965=>array(79,-64,908,841),47966=>array(79,-64,908,841),47967=>array(79,-76,906,841),47968=>array(79,-62,907,841),47969=>array(79,-61,907,841),47970=>array(79,-69,922,841),47971=>array(79,-74,929,841),47972=>array(79,-69,927,841),47973=>array(79,-68,911,841),47974=>array(79,-72,929,841),47975=>array(79,-70,936,841),47976=>array(79,-66,908,841),47977=>array(79,-59,916,841),47978=>array(79,-60,928,841),47979=>array(79,-68,908,841),47980=>array(63,-68,912,843),47981=>array(72,-61,907,843),47982=>array(72,-61,907,843),47983=>array(72,-71,931,843),47984=>array(89,-46,907,843),47985=>array(72,-68,912,843),47986=>array(72,-76,907,843),47987=>array(72,-44,921,843),47988=>array(72,-62,917,843),47989=>array(72,-64,907,843),47990=>array(72,-64,908,843),47991=>array(72,-64,908,843),47992=>array(72,-69,923,843),47993=>array(72,-64,908,843),47994=>array(72,-64,908,843),47995=>array(72,-76,907,843),47996=>array(72,-62,907,843),47997=>array(72,-61,907,843),47998=>array(72,-69,922,843),47999=>array(72,-74,929,843),48000=>array(72,-69,927,843),48001=>array(72,-68,911,843),48002=>array(72,-72,929,843),48003=>array(72,-70,936,843),48004=>array(72,-66,908,843),48005=>array(72,-59,916,843),48006=>array(72,-60,928,843),48007=>array(72,-68,908,843),48008=>array(51,-69,907,842),48009=>array(65,-61,907,842),48010=>array(65,-61,907,842),48011=>array(65,-71,931,842),48012=>array(65,-46,907,842),48013=>array(65,-68,912,842),48014=>array(65,-76,907,842),48015=>array(65,-44,921,842),48016=>array(65,-62,917,842),48017=>array(65,-64,907,842),48018=>array(65,-64,908,842),48019=>array(65,-64,908,842),48020=>array(65,-69,923,842),48021=>array(65,-64,908,842),48022=>array(65,-64,908,842),48023=>array(65,-76,907,842),48024=>array(65,-62,907,842),48025=>array(65,-61,907,842),48026=>array(65,-69,922,842),48027=>array(65,-74,929,842),48028=>array(65,-69,927,842),48029=>array(65,-68,911,842),48030=>array(65,-72,929,842),48031=>array(65,-70,936,842),48032=>array(65,-66,908,842),48033=>array(65,-59,916,842),48034=>array(65,-60,928,842),48035=>array(65,-68,908,842),48036=>array(71,-64,928,800),48037=>array(79,-61,921,800),48038=>array(79,-61,921,800),48039=>array(79,-71,921,800),48040=>array(79,-46,921,790),48041=>array(79,-68,921,800),48042=>array(79,-74,921,800),48043=>array(79,-44,921,800),48044=>array(79,-62,921,800),48045=>array(79,-64,921,800),48046=>array(79,-64,921,800),48047=>array(79,-63,921,800),48048=>array(79,-68,921,800),48049=>array(79,-64,921,800),48050=>array(79,-63,921,800),48051=>array(79,-74,921,800),48052=>array(79,-62,921,800),48053=>array(79,-61,921,800),48054=>array(79,-69,921,800),48055=>array(79,-74,921,800),48056=>array(79,-69,921,800),48057=>array(79,-68,921,800),48058=>array(79,-72,921,800),48059=>array(79,-70,921,800),48060=>array(79,-66,921,800),48061=>array(79,-59,921,800),48062=>array(79,-60,921,800),48063=>array(79,-68,921,800),48064=>array(57,42,943,710),48065=>array(79,-61,921,791),48066=>array(79,-61,921,791),48067=>array(79,-71,921,791),48068=>array(79,-46,921,791),48069=>array(79,-68,921,791),48070=>array(79,-74,921,791),48071=>array(79,-44,921,791),48072=>array(79,-62,921,791),48073=>array(79,-64,921,791),48074=>array(79,-64,921,791),48075=>array(79,-63,921,791),48076=>array(79,-68,921,791),48077=>array(79,-64,921,791),48078=>array(79,-63,921,791),48079=>array(79,-74,921,791),48080=>array(79,-62,921,791),48081=>array(79,-61,921,791),48082=>array(79,-69,921,791),48083=>array(79,-74,921,791),48084=>array(79,-69,921,791),48085=>array(79,-68,921,791),48086=>array(79,-72,921,791),48087=>array(79,-70,921,791),48088=>array(79,-66,921,791),48089=>array(79,-59,921,791),48090=>array(79,-60,921,791),48091=>array(79,-68,921,791),48092=>array(67,-69,907,842),48093=>array(64,-61,907,842),48094=>array(64,-61,907,842),48095=>array(64,-71,931,842),48096=>array(64,-46,907,842),48097=>array(64,-68,912,842),48098=>array(64,-76,907,842),48099=>array(64,-44,921,842),48100=>array(64,-62,917,842),48101=>array(64,-64,907,842),48102=>array(64,-64,908,842),48103=>array(64,-64,908,842),48104=>array(64,-69,923,842),48105=>array(64,-64,908,842),48106=>array(64,-64,908,842),48107=>array(64,-76,907,842),48108=>array(64,-62,907,842),48109=>array(64,-61,907,842),48110=>array(64,-69,922,842),48111=>array(64,-74,929,842),48112=>array(64,-69,927,842),48113=>array(64,-68,911,842),48114=>array(64,-72,929,842),48115=>array(64,-70,936,842),48116=>array(64,-66,908,842),48117=>array(64,-59,916,842),48118=>array(64,-60,928,842),48119=>array(64,-68,908,842),48120=>array(147,-69,907,842),48121=>array(157,-61,907,842),48122=>array(157,-61,907,842),48123=>array(157,-71,931,842),48124=>array(122,-46,907,842),48125=>array(157,-68,912,842),48126=>array(157,-76,907,842),48127=>array(157,-44,921,842),48128=>array(157,-62,917,842),48129=>array(157,-64,907,842),48130=>array(157,-64,908,842),48131=>array(157,-64,908,842),48132=>array(157,-69,923,842),48133=>array(157,-64,908,842),48134=>array(157,-64,908,842),48135=>array(157,-76,907,842),48136=>array(157,-62,907,842),48137=>array(157,-61,907,842),48138=>array(157,-69,922,842),48139=>array(157,-74,929,842),48140=>array(143,-69,927,842),48141=>array(157,-68,911,842),48142=>array(157,-72,929,842),48143=>array(157,-70,936,842),48144=>array(157,-66,908,842),48145=>array(157,-59,916,842),48146=>array(157,-60,928,842),48147=>array(157,-68,908,842),48148=>array(122,-69,936,842),48149=>array(122,-59,936,837),48150=>array(122,-61,936,837),48151=>array(122,-71,936,837),48152=>array(122,-45,936,842),48153=>array(122,-69,936,837),48154=>array(122,-76,936,837),48155=>array(122,-44,936,837),48156=>array(122,-62,936,837),48157=>array(122,-64,936,837),48158=>array(122,-64,936,837),48159=>array(122,-64,936,837),48160=>array(122,-70,936,837),48161=>array(122,-64,936,837),48162=>array(122,-64,936,837),48163=>array(122,-76,936,837),48164=>array(122,-62,936,837),48165=>array(122,-61,936,837),48166=>array(122,-70,936,837),48167=>array(122,-74,936,837),48168=>array(118,-69,936,837),48169=>array(122,-67,936,837),48170=>array(122,-72,936,837),48171=>array(122,-71,936,837),48172=>array(122,-66,936,837),48173=>array(122,-59,936,837),48174=>array(122,-60,936,837),48175=>array(122,-69,936,837),48176=>array(122,-69,907,842),48177=>array(157,-61,907,842),48178=>array(157,-61,907,842),48179=>array(157,-71,931,842),48180=>array(157,-46,907,842),48181=>array(157,-68,912,842),48182=>array(157,-76,907,842),48183=>array(157,-44,921,842),48184=>array(157,-62,917,842),48185=>array(157,-64,907,842),48186=>array(157,-64,908,842),48187=>array(157,-64,908,842),48188=>array(157,-69,923,842),48189=>array(157,-64,908,842),48190=>array(157,-64,908,842),48191=>array(157,-76,907,842),48192=>array(157,-62,907,842),48193=>array(157,-61,907,842),48194=>array(157,-69,922,842),48195=>array(157,-74,929,842),48196=>array(143,-69,927,842),48197=>array(157,-68,911,842),48198=>array(157,-72,929,842),48199=>array(157,-70,936,842),48200=>array(157,-66,908,842),48201=>array(157,-59,916,842),48202=>array(157,-60,928,842),48203=>array(157,-68,908,842),48204=>array(122,-68,935,843),48205=>array(122,-59,936,842),48206=>array(122,-61,936,842),48207=>array(122,-71,936,842),48208=>array(122,-45,936,842),48209=>array(122,-69,936,842),48210=>array(122,-76,936,842),48211=>array(122,-44,936,842),48212=>array(122,-62,936,842),48213=>array(122,-64,936,842),48214=>array(122,-64,936,842),48215=>array(122,-64,936,842),48216=>array(122,-70,936,842),48217=>array(122,-64,936,842),48218=>array(122,-64,936,842),48219=>array(122,-76,936,842),48220=>array(122,-62,936,842),48221=>array(122,-61,936,842),48222=>array(122,-70,936,842),48223=>array(122,-74,936,842),48224=>array(118,-69,936,842),48225=>array(122,-67,936,842),48226=>array(122,-72,936,842),48227=>array(122,-71,936,842),48228=>array(122,-66,936,842),48229=>array(122,-59,936,842),48230=>array(122,-60,936,842),48231=>array(122,-69,936,842),48232=>array(122,-69,907,842),48233=>array(157,-61,907,842),48234=>array(157,-61,907,842),48235=>array(157,-71,931,842),48236=>array(157,-46,907,842),48237=>array(157,-68,912,842),48238=>array(157,-76,907,842),48239=>array(157,-44,921,842),48240=>array(157,-62,917,842),48241=>array(157,-64,907,842),48242=>array(157,-64,908,842),48243=>array(157,-64,908,842),48244=>array(157,-69,923,842),48245=>array(157,-64,908,842),48246=>array(157,-64,908,842),48247=>array(157,-76,907,842),48248=>array(157,-62,907,842),48249=>array(157,-61,907,842),48250=>array(157,-69,922,842),48251=>array(157,-74,929,842),48252=>array(143,-69,927,842),48253=>array(157,-68,911,842),48254=>array(157,-72,929,842),48255=>array(157,-70,936,842),48256=>array(157,-66,908,842),48257=>array(157,-59,916,842),48258=>array(157,-60,928,842),48259=>array(157,-68,908,842),48260=>array(127,-70,907,841),48261=>array(122,-61,907,841),48262=>array(122,-61,907,841),48263=>array(122,-71,931,841),48264=>array(122,-46,907,841),48265=>array(122,-68,912,841),48266=>array(122,-76,907,841),48267=>array(122,-44,921,841),48268=>array(122,-62,917,841),48269=>array(122,-64,907,841),48270=>array(122,-64,908,841),48271=>array(122,-64,908,841),48272=>array(122,-69,923,841),48273=>array(122,-64,908,841),48274=>array(122,-64,908,841),48275=>array(122,-76,906,841),48276=>array(122,-62,907,841),48277=>array(122,-61,907,841),48278=>array(122,-69,922,841),48279=>array(122,-74,929,841),48280=>array(122,-69,927,841),48281=>array(122,-68,911,841),48282=>array(122,-72,929,841),48283=>array(122,-70,936,841),48284=>array(122,-66,908,841),48285=>array(122,-59,916,841),48286=>array(122,-60,928,841),48287=>array(122,-68,908,841),48288=>array(122,-68,907,843),48289=>array(127,-61,907,843),48290=>array(127,-61,907,843),48291=>array(127,-71,931,843),48292=>array(127,-46,907,843),48293=>array(127,-68,912,843),48294=>array(127,-76,907,843),48295=>array(127,-44,921,843),48296=>array(127,-62,917,843),48297=>array(127,-64,907,843),48298=>array(127,-64,908,843),48299=>array(127,-64,908,843),48300=>array(127,-69,923,843),48301=>array(127,-64,908,843),48302=>array(127,-64,908,843),48303=>array(127,-76,907,843),48304=>array(127,-62,907,843),48305=>array(127,-61,907,843),48306=>array(127,-69,922,843),48307=>array(127,-74,929,843),48308=>array(127,-69,927,843),48309=>array(127,-68,911,843),48310=>array(127,-72,929,843),48311=>array(127,-70,936,843),48312=>array(127,-66,908,843),48313=>array(127,-59,916,843),48314=>array(127,-60,928,843),48315=>array(127,-68,908,843),48316=>array(127,-70,907,842),48317=>array(122,-61,908,842),48318=>array(122,-61,908,842),48319=>array(122,-71,931,842),48320=>array(122,-46,907,842),48321=>array(122,-68,912,842),48322=>array(122,-76,908,842),48323=>array(122,-44,921,842),48324=>array(122,-62,917,842),48325=>array(122,-64,908,842),48326=>array(122,-64,908,842),48327=>array(122,-64,908,842),48328=>array(122,-69,923,842),48329=>array(122,-64,908,842),48330=>array(122,-64,908,842),48331=>array(122,-76,908,842),48332=>array(122,-62,908,842),48333=>array(122,-61,908,842),48334=>array(122,-69,922,842),48335=>array(122,-74,929,842),48336=>array(122,-69,927,842),48337=>array(122,-68,911,842),48338=>array(122,-72,929,842),48339=>array(122,-70,936,842),48340=>array(122,-66,908,842),48341=>array(122,-59,916,842),48342=>array(122,-60,928,842),48343=>array(122,-68,908,842),48344=>array(122,-68,907,843),48345=>array(127,-61,907,843),48346=>array(127,-61,907,843),48347=>array(127,-71,931,843),48348=>array(127,-46,907,843),48349=>array(127,-68,912,843),48350=>array(127,-76,907,843),48351=>array(127,-44,921,843),48352=>array(127,-62,917,843),48353=>array(127,-64,907,843),48354=>array(127,-64,908,843),48355=>array(127,-64,908,843),48356=>array(127,-69,923,843),48357=>array(127,-64,908,843),48358=>array(127,-64,908,843),48359=>array(127,-76,907,843),48360=>array(127,-62,907,843),48361=>array(127,-61,907,843),48362=>array(127,-69,922,843),48363=>array(127,-74,929,843),48364=>array(127,-69,927,843),48365=>array(127,-68,911,843),48366=>array(127,-72,929,843),48367=>array(127,-70,936,843),48368=>array(127,-66,908,843),48369=>array(127,-59,916,843),48370=>array(127,-60,928,843),48371=>array(127,-68,908,843),48372=>array(62,7,943,795),48373=>array(79,-61,921,815),48374=>array(79,-61,921,815),48375=>array(79,-71,921,815),48376=>array(79,-46,921,815),48377=>array(79,-68,921,815),48378=>array(79,-74,921,815),48379=>array(79,-44,921,815),48380=>array(79,-62,921,815),48381=>array(79,-64,921,815),48382=>array(79,-64,921,815),48383=>array(79,-63,921,815),48384=>array(79,-68,921,815),48385=>array(79,-64,921,815),48386=>array(79,-63,921,815),48387=>array(79,-74,921,815),48388=>array(79,-62,921,815),48389=>array(79,-61,921,815),48390=>array(79,-69,921,815),48391=>array(79,-74,921,815),48392=>array(79,-69,921,815),48393=>array(79,-68,921,815),48394=>array(79,-72,921,815),48395=>array(79,-70,921,815),48396=>array(79,-66,921,815),48397=>array(79,-59,921,815),48398=>array(79,-60,921,815),48399=>array(79,-68,921,815),48400=>array(52,-69,936,842),48401=>array(77,-59,936,843),48402=>array(77,-61,936,843),48403=>array(77,-71,936,843),48404=>array(66,-45,936,842),48405=>array(77,-69,936,843),48406=>array(77,-76,936,843),48407=>array(77,-44,936,843),48408=>array(77,-62,936,843),48409=>array(77,-64,936,843),48410=>array(77,-64,936,843),48411=>array(77,-64,936,843),48412=>array(77,-70,936,843),48413=>array(77,-64,936,843),48414=>array(77,-64,936,843),48415=>array(77,-76,936,843),48416=>array(77,-62,936,843),48417=>array(77,-61,936,843),48418=>array(77,-70,936,843),48419=>array(77,-74,936,843),48420=>array(77,-69,936,843),48421=>array(77,-67,936,843),48422=>array(77,-72,936,843),48423=>array(77,-71,936,843),48424=>array(77,-66,936,843),48425=>array(77,-59,936,843),48426=>array(77,-60,936,843),48427=>array(77,-69,936,843),48428=>array(61,-68,907,843),48429=>array(79,-61,907,843),48430=>array(79,-61,907,843),48431=>array(79,-71,931,843),48432=>array(72,-46,907,842),48433=>array(79,-68,912,843),48434=>array(79,-76,907,843),48435=>array(79,-44,921,843),48436=>array(79,-62,917,843),48437=>array(79,-64,907,843),48438=>array(79,-64,908,843),48439=>array(79,-64,908,843),48440=>array(79,-69,923,843),48441=>array(79,-64,908,843),48442=>array(79,-64,908,843),48443=>array(79,-76,907,843),48444=>array(79,-62,907,843),48445=>array(79,-61,907,843),48446=>array(79,-69,922,843),48447=>array(79,-74,929,843),48448=>array(79,-69,927,843),48449=>array(79,-68,911,843),48450=>array(79,-72,929,843),48451=>array(79,-70,936,843),48452=>array(79,-66,908,843),48453=>array(79,-59,916,843),48454=>array(79,-60,928,843),48455=>array(79,-68,908,843),48456=>array(62,-69,907,842),48457=>array(65,-61,907,842),48458=>array(65,-61,907,842),48459=>array(65,-71,931,842),48460=>array(64,-46,907,842),48461=>array(65,-68,912,842),48462=>array(65,-76,907,842),48463=>array(65,-44,921,842),48464=>array(65,-62,917,842),48465=>array(65,-64,907,842),48466=>array(65,-64,908,842),48467=>array(65,-64,908,842),48468=>array(65,-69,923,842),48469=>array(65,-64,908,842),48470=>array(65,-64,908,842),48471=>array(65,-76,907,842),48472=>array(65,-62,907,842),48473=>array(65,-61,907,842),48474=>array(65,-69,922,842),48475=>array(65,-74,929,842),48476=>array(65,-69,927,842),48477=>array(65,-68,911,842),48478=>array(65,-72,929,842),48479=>array(65,-70,936,842),48480=>array(65,-66,908,842),48481=>array(65,-59,916,842),48482=>array(65,-60,928,842),48483=>array(65,-68,908,842),48484=>array(62,7,943,805),48485=>array(79,-61,922,815),48486=>array(79,-61,922,815),48487=>array(79,-71,922,815),48488=>array(79,-46,922,815),48489=>array(79,-68,922,815),48490=>array(79,-74,922,815),48491=>array(79,-44,922,815),48492=>array(79,-62,922,815),48493=>array(79,-64,922,815),48494=>array(79,-64,922,815),48495=>array(79,-63,922,815),48496=>array(79,-68,922,815),48497=>array(79,-64,922,815),48498=>array(79,-63,922,815),48499=>array(79,-74,922,815),48500=>array(79,-62,922,815),48501=>array(79,-61,922,815),48502=>array(79,-69,922,815),48503=>array(79,-74,922,815),48504=>array(79,-69,922,815),48505=>array(79,-68,922,815),48506=>array(79,-72,922,815),48507=>array(79,-70,922,815),48508=>array(79,-66,922,815),48509=>array(79,-59,922,815),48510=>array(79,-60,922,815),48511=>array(79,-68,922,815),48512=>array(79,-64,921,815),48513=>array(79,-61,921,815),48514=>array(79,-61,921,815),48515=>array(79,-71,921,815),48516=>array(79,-46,921,815),48517=>array(79,-68,921,815),48518=>array(79,-74,921,815),48519=>array(79,-44,921,815),48520=>array(79,-62,921,815),48521=>array(79,-64,921,815),48522=>array(79,-64,921,815),48523=>array(79,-63,921,815),48524=>array(79,-68,921,815),48525=>array(79,-64,921,815),48526=>array(79,-63,921,815),48527=>array(79,-74,921,815),48528=>array(79,-62,921,815),48529=>array(79,-61,921,815),48530=>array(79,-69,921,815),48531=>array(79,-74,921,815),48532=>array(79,-69,921,815),48533=>array(79,-68,921,815),48534=>array(79,-72,921,815),48535=>array(79,-70,921,815),48536=>array(79,-66,921,815),48537=>array(79,-59,921,815),48538=>array(79,-60,921,815),48539=>array(79,-68,921,815),48540=>array(69,-70,907,841),48541=>array(75,-61,907,841),48542=>array(75,-61,907,841),48543=>array(75,-71,931,841),48544=>array(76,-46,907,841),48545=>array(75,-68,912,841),48546=>array(75,-76,907,841),48547=>array(75,-44,921,841),48548=>array(75,-62,917,841),48549=>array(75,-64,907,841),48550=>array(75,-64,908,841),48551=>array(75,-64,908,841),48552=>array(75,-69,923,841),48553=>array(75,-64,908,841),48554=>array(75,-64,908,841),48555=>array(75,-76,906,841),48556=>array(75,-62,907,841),48557=>array(75,-61,907,841),48558=>array(75,-69,922,841),48559=>array(75,-74,929,841),48560=>array(75,-69,927,841),48561=>array(75,-68,911,841),48562=>array(75,-72,929,841),48563=>array(75,-70,936,841),48564=>array(75,-66,908,841),48565=>array(75,-59,916,841),48566=>array(75,-60,928,841),48567=>array(75,-68,908,841),48568=>array(63,-68,907,843),48569=>array(72,-61,907,843),48570=>array(72,-61,907,843),48571=>array(72,-71,931,843),48572=>array(76,-46,907,843),48573=>array(72,-68,912,843),48574=>array(72,-76,907,843),48575=>array(72,-44,921,843),48576=>array(72,-62,917,843),48577=>array(72,-64,907,843),48578=>array(72,-64,908,843),48579=>array(72,-64,908,843),48580=>array(72,-69,923,843),48581=>array(72,-64,908,843),48582=>array(72,-64,908,843),48583=>array(72,-76,907,843),48584=>array(72,-62,907,843),48585=>array(72,-61,907,843),48586=>array(72,-69,922,843),48587=>array(72,-74,929,843),48588=>array(72,-69,927,843),48589=>array(72,-68,911,843),48590=>array(72,-72,929,843),48591=>array(72,-70,936,843),48592=>array(72,-66,908,843),48593=>array(72,-59,916,843),48594=>array(72,-60,928,843),48595=>array(72,-68,908,843),48596=>array(70,-69,907,842),48597=>array(65,-61,907,841),48598=>array(65,-61,907,841),48599=>array(65,-71,931,841),48600=>array(65,-46,907,841),48601=>array(65,-68,912,841),48602=>array(65,-76,907,841),48603=>array(65,-44,921,841),48604=>array(65,-62,917,841),48605=>array(65,-64,907,841),48606=>array(65,-64,908,841),48607=>array(65,-64,908,841),48608=>array(65,-69,923,841),48609=>array(65,-64,908,841),48610=>array(65,-64,908,841),48611=>array(65,-76,907,841),48612=>array(65,-62,907,841),48613=>array(65,-61,907,841),48614=>array(65,-69,922,841),48615=>array(65,-74,929,841),48616=>array(65,-69,927,841),48617=>array(65,-68,911,841),48618=>array(65,-72,929,841),48619=>array(65,-70,936,841),48620=>array(65,-66,908,841),48621=>array(65,-59,916,841),48622=>array(65,-60,928,841),48623=>array(65,-68,908,841),48624=>array(71,-64,928,815),48625=>array(79,-61,921,815),48626=>array(79,-61,921,815),48627=>array(79,-71,921,815),48628=>array(79,-46,921,815),48629=>array(79,-68,921,815),48630=>array(79,-74,921,815),48631=>array(79,-44,921,815),48632=>array(79,-62,921,815),48633=>array(79,-64,921,815),48634=>array(79,-64,921,815),48635=>array(79,-63,921,815),48636=>array(79,-68,921,815),48637=>array(79,-64,921,815),48638=>array(79,-63,921,815),48639=>array(79,-74,921,815),48640=>array(79,-62,921,815),48641=>array(79,-61,921,815),48642=>array(79,-69,921,815),48643=>array(79,-74,921,815),48644=>array(79,-69,921,815),48645=>array(79,-68,921,815),48646=>array(79,-72,921,815),48647=>array(79,-70,921,815),48648=>array(79,-66,921,815),48649=>array(79,-59,921,815),48650=>array(79,-60,921,815),48651=>array(79,-68,921,815),48652=>array(57,42,943,750),48653=>array(79,-61,921,825),48654=>array(79,-61,921,825),48655=>array(79,-71,921,825),48656=>array(79,-46,921,825),48657=>array(79,-68,921,825),48658=>array(79,-74,921,825),48659=>array(79,-44,921,825),48660=>array(79,-62,921,825),48661=>array(79,-64,921,825),48662=>array(79,-64,921,825),48663=>array(79,-63,921,825),48664=>array(79,-68,921,825),48665=>array(79,-64,921,825),48666=>array(79,-63,921,825),48667=>array(79,-74,921,825),48668=>array(79,-62,921,825),48669=>array(79,-61,921,825),48670=>array(79,-69,921,825),48671=>array(79,-74,921,825),48672=>array(79,-69,921,825),48673=>array(79,-68,921,825),48674=>array(79,-72,921,825),48675=>array(79,-70,921,825),48676=>array(79,-66,921,825),48677=>array(79,-59,921,825),48678=>array(79,-60,921,825),48679=>array(79,-68,921,825),48680=>array(67,-69,907,842),48681=>array(65,-61,907,842),48682=>array(65,-61,907,842),48683=>array(65,-71,931,842),48684=>array(65,-46,907,841),48685=>array(65,-68,912,842),48686=>array(65,-76,907,842),48687=>array(65,-44,921,842),48688=>array(65,-62,917,842),48689=>array(65,-64,907,842),48690=>array(65,-64,908,842),48691=>array(65,-64,908,842),48692=>array(65,-69,923,842),48693=>array(65,-64,908,842),48694=>array(65,-64,908,842),48695=>array(65,-76,907,842),48696=>array(65,-62,907,842),48697=>array(65,-61,907,842),48698=>array(65,-69,922,842),48699=>array(65,-74,929,842),48700=>array(65,-69,927,842),48701=>array(65,-68,911,842),48702=>array(65,-72,929,842),48703=>array(65,-70,936,842),48704=>array(65,-66,908,842),48705=>array(65,-59,916,842),48706=>array(65,-60,928,842),48707=>array(65,-68,908,842),48708=>array(147,-69,907,842),48709=>array(157,-61,907,842),48710=>array(157,-61,907,842),48711=>array(157,-71,931,842),48712=>array(152,-46,907,842),48713=>array(157,-68,912,842),48714=>array(157,-76,907,842),48715=>array(157,-44,921,842),48716=>array(157,-62,917,842),48717=>array(157,-64,907,842),48718=>array(157,-64,908,842),48719=>array(157,-64,908,842),48720=>array(157,-69,923,842),48721=>array(157,-64,908,842),48722=>array(157,-64,908,842),48723=>array(157,-76,907,842),48724=>array(157,-62,907,842),48725=>array(157,-61,907,842),48726=>array(157,-69,922,842),48727=>array(157,-74,929,842),48728=>array(143,-69,927,842),48729=>array(157,-68,911,842),48730=>array(157,-72,929,842),48731=>array(157,-70,936,842),48732=>array(157,-66,908,842),48733=>array(157,-59,916,842),48734=>array(157,-60,928,842),48735=>array(157,-68,908,842),48736=>array(95,-69,936,842),48737=>array(105,-59,936,842),48738=>array(105,-61,936,842),48739=>array(105,-71,936,842),48740=>array(105,-45,936,842),48741=>array(105,-69,936,842),48742=>array(105,-76,936,842),48743=>array(105,-44,936,842),48744=>array(105,-62,936,842),48745=>array(105,-64,936,842),48746=>array(105,-64,936,842),48747=>array(105,-64,936,842),48748=>array(105,-70,936,842),48749=>array(105,-64,936,842),48750=>array(105,-64,936,842),48751=>array(105,-76,936,842),48752=>array(105,-62,936,842),48753=>array(105,-61,936,842),48754=>array(105,-70,936,842),48755=>array(105,-74,936,842),48756=>array(105,-69,936,842),48757=>array(105,-67,936,842),48758=>array(105,-72,936,842),48759=>array(105,-71,936,842),48760=>array(105,-66,936,842),48761=>array(105,-59,936,842),48762=>array(105,-60,936,842),48763=>array(105,-69,936,842),48764=>array(95,-69,907,842),48765=>array(105,-61,907,842),48766=>array(105,-61,907,842),48767=>array(105,-71,931,842),48768=>array(105,-46,907,842),48769=>array(105,-68,912,842),48770=>array(105,-76,907,842),48771=>array(105,-44,921,842),48772=>array(105,-62,917,842),48773=>array(105,-64,907,842),48774=>array(105,-64,908,842),48775=>array(105,-64,908,842),48776=>array(105,-69,923,842),48777=>array(105,-64,908,842),48778=>array(105,-64,908,842),48779=>array(105,-76,907,842),48780=>array(105,-62,907,842),48781=>array(105,-61,907,842),48782=>array(105,-69,922,842),48783=>array(105,-74,929,842),48784=>array(105,-69,927,842),48785=>array(105,-68,911,842),48786=>array(105,-72,929,842),48787=>array(105,-70,936,842),48788=>array(105,-66,908,842),48789=>array(105,-59,916,842),48790=>array(105,-60,928,842),48791=>array(105,-68,908,842),48792=>array(95,-68,935,843),48793=>array(105,-59,936,842),48794=>array(105,-61,936,842),48795=>array(105,-71,936,842),48796=>array(105,-45,936,842),48797=>array(105,-69,936,842),48798=>array(105,-76,936,842),48799=>array(105,-44,936,842),48800=>array(105,-62,936,842),48801=>array(105,-64,936,842),48802=>array(105,-64,936,842),48803=>array(105,-64,936,842),48804=>array(105,-70,936,842),48805=>array(105,-64,936,842),48806=>array(105,-64,936,842),48807=>array(105,-76,936,842),48808=>array(105,-62,936,842),48809=>array(105,-61,936,842),48810=>array(105,-70,936,842),48811=>array(105,-74,936,842),48812=>array(105,-69,936,842),48813=>array(105,-67,936,842),48814=>array(105,-72,936,842),48815=>array(105,-71,936,842),48816=>array(105,-66,936,842),48817=>array(105,-59,936,842),48818=>array(105,-60,936,842),48819=>array(105,-69,936,842),48820=>array(95,-69,907,842),48821=>array(105,-61,907,842),48822=>array(105,-61,907,842),48823=>array(105,-71,931,842),48824=>array(105,-46,907,842),48825=>array(105,-68,912,842),48826=>array(105,-76,907,842),48827=>array(105,-44,921,842),48828=>array(105,-62,917,842),48829=>array(105,-64,907,842),48830=>array(105,-64,908,842),48831=>array(105,-64,908,842),48832=>array(105,-69,923,842),48833=>array(105,-64,908,842),48834=>array(105,-64,908,842),48835=>array(105,-76,907,842),48836=>array(105,-62,907,842),48837=>array(105,-61,907,842),48838=>array(105,-69,922,842),48839=>array(105,-74,929,842),48840=>array(105,-69,927,842),48841=>array(105,-68,911,842),48842=>array(105,-72,929,842),48843=>array(105,-70,936,842),48844=>array(105,-66,908,842),48845=>array(105,-59,916,842),48846=>array(105,-60,928,842),48847=>array(105,-68,908,842),48848=>array(95,-70,907,841),48849=>array(105,-61,907,841),48850=>array(105,-61,907,841),48851=>array(105,-71,931,841),48852=>array(105,-46,907,841),48853=>array(105,-68,912,841),48854=>array(105,-76,907,841),48855=>array(105,-44,921,841),48856=>array(105,-62,917,841),48857=>array(105,-64,907,841),48858=>array(105,-64,908,841),48859=>array(105,-64,908,841),48860=>array(105,-69,923,841),48861=>array(105,-64,908,841),48862=>array(105,-64,908,841),48863=>array(105,-76,906,841),48864=>array(105,-62,907,841),48865=>array(105,-61,907,841),48866=>array(105,-69,922,841),48867=>array(105,-74,929,841),48868=>array(105,-69,927,841),48869=>array(105,-68,911,841),48870=>array(105,-72,929,841),48871=>array(105,-70,936,841),48872=>array(105,-66,908,841),48873=>array(105,-59,916,841),48874=>array(105,-60,928,841),48875=>array(105,-68,908,841),48876=>array(90,-68,907,843),48877=>array(90,-61,907,843),48878=>array(90,-61,907,843),48879=>array(90,-71,931,843),48880=>array(90,-46,907,843),48881=>array(90,-68,912,843),48882=>array(90,-76,907,843),48883=>array(90,-44,921,843),48884=>array(90,-62,917,843),48885=>array(90,-64,907,843),48886=>array(90,-64,908,843),48887=>array(90,-64,908,843),48888=>array(90,-69,923,843),48889=>array(90,-64,908,843),48890=>array(90,-64,908,843),48891=>array(90,-76,907,843),48892=>array(90,-62,907,843),48893=>array(90,-61,907,843),48894=>array(90,-69,922,843),48895=>array(90,-74,929,843),48896=>array(90,-69,927,843),48897=>array(90,-68,911,843),48898=>array(90,-72,929,843),48899=>array(90,-70,936,843),48900=>array(90,-66,908,843),48901=>array(90,-59,916,843),48902=>array(90,-60,928,843),48903=>array(90,-68,908,843),48904=>array(95,-70,907,842),48905=>array(105,-61,908,842),48906=>array(105,-61,908,842),48907=>array(105,-71,931,842),48908=>array(105,-46,907,842),48909=>array(105,-68,912,842),48910=>array(105,-76,908,842),48911=>array(105,-44,921,842),48912=>array(105,-62,917,842),48913=>array(105,-64,908,842),48914=>array(105,-64,908,842),48915=>array(105,-64,908,842),48916=>array(105,-69,923,842),48917=>array(105,-64,908,842),48918=>array(105,-64,908,842),48919=>array(105,-76,908,842),48920=>array(105,-62,908,842),48921=>array(105,-61,908,842),48922=>array(105,-69,922,842),48923=>array(105,-74,929,842),48924=>array(105,-69,927,842),48925=>array(105,-68,911,842),48926=>array(105,-72,929,842),48927=>array(105,-70,936,842),48928=>array(105,-66,908,842),48929=>array(105,-59,916,842),48930=>array(105,-60,928,842),48931=>array(105,-68,908,842),48932=>array(90,-68,907,843),48933=>array(90,-61,907,843),48934=>array(90,-61,907,843),48935=>array(90,-71,931,843),48936=>array(90,-46,907,843),48937=>array(90,-68,912,843),48938=>array(90,-76,907,843),48939=>array(90,-44,921,843),48940=>array(90,-62,917,843),48941=>array(90,-64,907,843),48942=>array(90,-64,908,843),48943=>array(90,-64,908,843),48944=>array(90,-69,923,843),48945=>array(90,-64,908,843),48946=>array(90,-64,908,843),48947=>array(90,-76,907,843),48948=>array(90,-62,907,843),48949=>array(90,-61,907,843),48950=>array(90,-69,922,843),48951=>array(90,-74,929,843),48952=>array(90,-69,927,843),48953=>array(90,-68,911,843),48954=>array(90,-72,929,843),48955=>array(90,-70,936,843),48956=>array(90,-66,908,843),48957=>array(90,-59,916,843),48958=>array(90,-60,928,843),48959=>array(90,-68,908,843),48960=>array(60,12,940,766),48961=>array(79,-61,921,806),48962=>array(79,-61,921,806),48963=>array(79,-71,921,806),48964=>array(79,-46,921,806),48965=>array(79,-68,921,806),48966=>array(79,-74,921,806),48967=>array(79,-44,921,806),48968=>array(79,-62,921,806),48969=>array(79,-64,921,806),48970=>array(79,-64,921,806),48971=>array(79,-63,921,806),48972=>array(79,-68,921,806),48973=>array(79,-64,921,806),48974=>array(79,-63,921,806),48975=>array(79,-74,921,806),48976=>array(79,-62,921,806),48977=>array(79,-61,921,806),48978=>array(79,-69,921,806),48979=>array(79,-74,921,806),48980=>array(79,-69,921,806),48981=>array(79,-68,921,806),48982=>array(79,-72,921,806),48983=>array(79,-70,921,806),48984=>array(79,-66,921,806),48985=>array(79,-59,921,806),48986=>array(79,-60,921,806),48987=>array(79,-68,921,806),48988=>array(51,-69,936,842),48989=>array(69,-59,937,843),48990=>array(69,-61,937,843),48991=>array(69,-71,937,843),48992=>array(57,-45,937,842),48993=>array(69,-69,937,843),48994=>array(69,-76,937,843),48995=>array(69,-44,937,843),48996=>array(69,-62,937,843),48997=>array(69,-64,937,843),48998=>array(69,-64,937,843),48999=>array(69,-64,937,843),49000=>array(69,-70,937,843),49001=>array(69,-64,937,843),49002=>array(69,-64,937,843),49003=>array(69,-76,937,843),49004=>array(69,-62,937,843),49005=>array(69,-61,937,843),49006=>array(69,-70,937,843),49007=>array(69,-74,937,843),49008=>array(69,-69,937,843),49009=>array(69,-67,937,843),49010=>array(69,-72,937,843),49011=>array(69,-71,937,843),49012=>array(69,-66,937,843),49013=>array(69,-59,937,843),49014=>array(69,-60,937,843),49015=>array(69,-69,937,843),49016=>array(57,-69,907,842),49017=>array(69,-61,908,842),49018=>array(69,-61,908,842),49019=>array(69,-71,931,842),49020=>array(57,-46,908,842),49021=>array(69,-68,912,842),49022=>array(69,-76,908,842),49023=>array(69,-44,921,842),49024=>array(69,-62,917,842),49025=>array(69,-64,908,842),49026=>array(69,-64,908,842),49027=>array(69,-64,908,842),49028=>array(69,-69,923,842),49029=>array(69,-64,908,842),49030=>array(69,-64,908,842),49031=>array(69,-76,908,842),49032=>array(69,-62,908,842),49033=>array(69,-61,908,842),49034=>array(69,-69,922,842),49035=>array(69,-74,929,842),49036=>array(69,-69,927,842),49037=>array(69,-68,911,842),49038=>array(69,-72,929,842),49039=>array(69,-70,936,842),49040=>array(69,-66,908,842),49041=>array(69,-59,916,842),49042=>array(69,-60,928,842),49043=>array(69,-68,908,842),49044=>array(58,-69,907,842),49045=>array(64,-61,907,841),49046=>array(64,-61,907,841),49047=>array(64,-71,931,841),49048=>array(64,-46,907,842),49049=>array(64,-68,912,841),49050=>array(64,-76,907,841),49051=>array(64,-44,921,841),49052=>array(64,-62,917,841),49053=>array(64,-64,907,841),49054=>array(64,-64,908,841),49055=>array(64,-64,908,841),49056=>array(64,-69,923,841),49057=>array(64,-64,908,841),49058=>array(64,-64,908,841),49059=>array(64,-76,907,841),49060=>array(64,-62,907,841),49061=>array(64,-61,907,841),49062=>array(64,-69,922,841),49063=>array(64,-74,929,841),49064=>array(64,-69,927,841),49065=>array(64,-68,911,841),49066=>array(64,-72,929,841),49067=>array(64,-70,936,841),49068=>array(64,-66,908,841),49069=>array(64,-59,916,841),49070=>array(64,-60,928,841),49071=>array(64,-68,908,841),49072=>array(60,-13,940,803),49073=>array(79,-61,921,806),49074=>array(79,-61,921,806),49075=>array(79,-71,921,806),49076=>array(79,-46,921,806),49077=>array(79,-68,921,806),49078=>array(79,-74,921,806),49079=>array(79,-44,921,806),49080=>array(79,-62,921,806),49081=>array(79,-64,921,806),49082=>array(79,-64,921,806),49083=>array(79,-63,921,806),49084=>array(79,-68,921,806),49085=>array(79,-64,921,806),49086=>array(79,-63,921,806),49087=>array(79,-74,921,806),49088=>array(79,-62,921,806),49089=>array(79,-61,921,806),49090=>array(79,-69,921,806),49091=>array(79,-74,921,806),49092=>array(79,-69,921,806),49093=>array(79,-68,921,806),49094=>array(79,-72,921,806),49095=>array(79,-70,921,806),49096=>array(79,-66,921,806),49097=>array(79,-59,921,806),49098=>array(79,-60,921,806),49099=>array(79,-68,921,806),49100=>array(79,-64,921,806),49101=>array(79,-61,921,806),49102=>array(79,-61,921,806),49103=>array(79,-71,921,806),49104=>array(79,-46,921,806),49105=>array(79,-68,921,806),49106=>array(79,-74,921,806),49107=>array(79,-44,921,806),49108=>array(79,-62,921,806),49109=>array(79,-64,921,806),49110=>array(79,-64,921,806),49111=>array(79,-63,921,806),49112=>array(79,-68,921,806),49113=>array(79,-64,921,806),49114=>array(79,-63,921,806),49115=>array(79,-74,921,806),49116=>array(79,-62,921,806),49117=>array(79,-61,921,806),49118=>array(79,-69,921,806),49119=>array(79,-74,921,806),49120=>array(79,-69,921,806),49121=>array(79,-68,921,806),49122=>array(79,-72,921,806),49123=>array(79,-70,921,806),49124=>array(79,-66,921,806),49125=>array(79,-59,921,806),49126=>array(79,-60,921,806),49127=>array(79,-68,921,806),49128=>array(72,-70,907,841),49129=>array(67,-61,907,841),49130=>array(67,-61,907,841),49131=>array(67,-71,931,841),49132=>array(65,-46,907,841),49133=>array(67,-68,912,841),49134=>array(67,-76,907,841),49135=>array(67,-44,921,841),49136=>array(67,-62,917,841),49137=>array(67,-64,907,841),49138=>array(67,-64,908,841),49139=>array(67,-64,908,841),49140=>array(67,-69,923,841),49141=>array(67,-64,908,841),49142=>array(67,-64,908,841),49143=>array(67,-76,906,841),49144=>array(67,-62,907,841),49145=>array(67,-61,907,841),49146=>array(67,-69,922,841),49147=>array(67,-74,929,841),49148=>array(67,-69,927,841),49149=>array(67,-68,911,841),49150=>array(67,-72,929,841),49151=>array(67,-70,936,841),49152=>array(67,-66,908,841),49153=>array(67,-59,916,841),49154=>array(67,-60,928,841),49155=>array(67,-68,908,841),49156=>array(51,-68,907,843),49157=>array(67,-61,907,843),49158=>array(67,-61,907,843),49159=>array(67,-71,931,843),49160=>array(68,-46,907,842),49161=>array(67,-68,912,843),49162=>array(67,-76,907,843),49163=>array(67,-44,921,843),49164=>array(67,-62,917,843),49165=>array(67,-64,907,843),49166=>array(67,-64,908,843),49167=>array(67,-64,908,843),49168=>array(67,-69,923,843),49169=>array(67,-64,908,843),49170=>array(67,-64,908,843),49171=>array(67,-76,907,843),49172=>array(67,-62,907,843),49173=>array(67,-61,907,843),49174=>array(67,-69,922,843),49175=>array(67,-74,929,843),49176=>array(67,-69,927,843),49177=>array(67,-68,911,843),49178=>array(67,-72,929,843),49179=>array(67,-70,936,843),49180=>array(67,-66,908,843),49181=>array(67,-59,916,843),49182=>array(67,-60,928,843),49183=>array(67,-68,908,843),49184=>array(64,-69,907,842),49185=>array(65,-61,907,843),49186=>array(65,-61,907,843),49187=>array(65,-71,931,843),49188=>array(66,-46,907,842),49189=>array(65,-68,912,843),49190=>array(65,-76,907,843),49191=>array(65,-44,921,843),49192=>array(65,-62,917,843),49193=>array(65,-64,907,843),49194=>array(65,-64,908,843),49195=>array(65,-64,908,843),49196=>array(65,-69,923,843),49197=>array(65,-64,908,843),49198=>array(65,-64,908,843),49199=>array(65,-76,907,843),49200=>array(65,-62,907,843),49201=>array(65,-61,907,843),49202=>array(65,-69,922,843),49203=>array(65,-74,929,843),49204=>array(65,-69,927,843),49205=>array(65,-68,911,843),49206=>array(65,-72,929,843),49207=>array(65,-70,936,843),49208=>array(65,-66,908,843),49209=>array(65,-59,916,843),49210=>array(65,-60,928,843),49211=>array(65,-68,908,843),49212=>array(79,-64,921,806),49213=>array(79,-61,921,806),49214=>array(79,-61,921,806),49215=>array(79,-71,921,806),49216=>array(81,-46,922,806),49217=>array(79,-68,921,806),49218=>array(79,-74,921,806),49219=>array(79,-44,921,806),49220=>array(79,-62,921,806),49221=>array(79,-64,921,806),49222=>array(79,-64,921,806),49223=>array(79,-63,921,806),49224=>array(79,-68,921,806),49225=>array(79,-64,921,806),49226=>array(79,-63,921,806),49227=>array(79,-74,921,806),49228=>array(79,-62,921,806),49229=>array(79,-61,921,806),49230=>array(79,-69,921,806),49231=>array(79,-74,921,806),49232=>array(79,-69,921,806),49233=>array(79,-68,921,806),49234=>array(79,-72,921,806),49235=>array(79,-70,921,806),49236=>array(79,-66,921,806),49237=>array(79,-59,921,806),49238=>array(79,-60,921,806),49239=>array(79,-68,921,806),49240=>array(57,22,943,746),49241=>array(79,-61,922,811),49242=>array(79,-61,922,811),49243=>array(79,-71,922,811),49244=>array(79,-46,921,806),49245=>array(79,-68,922,811),49246=>array(79,-74,922,811),49247=>array(79,-44,922,811),49248=>array(79,-62,922,811),49249=>array(79,-64,922,811),49250=>array(79,-64,922,811),49251=>array(79,-63,922,811),49252=>array(79,-68,922,811),49253=>array(79,-64,922,811),49254=>array(79,-63,922,811),49255=>array(79,-74,922,811),49256=>array(79,-62,922,811),49257=>array(79,-61,922,811),49258=>array(79,-69,922,811),49259=>array(79,-74,922,811),49260=>array(79,-69,922,811),49261=>array(79,-68,922,811),49262=>array(79,-72,922,811),49263=>array(79,-70,922,811),49264=>array(79,-66,922,811),49265=>array(79,-59,922,811),49266=>array(79,-60,922,811),49267=>array(79,-68,922,811),49268=>array(68,-69,907,842),49269=>array(74,-61,907,841),49270=>array(74,-61,907,841),49271=>array(74,-71,931,841),49272=>array(65,-46,907,842),49273=>array(74,-68,912,841),49274=>array(74,-76,907,841),49275=>array(74,-44,921,841),49276=>array(74,-62,917,841),49277=>array(74,-64,907,841),49278=>array(74,-64,908,841),49279=>array(74,-64,908,841),49280=>array(74,-69,923,841),49281=>array(74,-64,908,841),49282=>array(74,-64,908,841),49283=>array(74,-76,907,841),49284=>array(74,-62,907,841),49285=>array(74,-61,907,841),49286=>array(74,-69,922,841),49287=>array(74,-74,929,841),49288=>array(74,-69,927,841),49289=>array(74,-68,911,841),49290=>array(74,-72,929,841),49291=>array(74,-70,936,841),49292=>array(74,-66,908,841),49293=>array(74,-59,916,841),49294=>array(74,-60,928,841),49295=>array(74,-68,908,841),49296=>array(110,-69,907,842),49297=>array(120,-61,907,842),49298=>array(120,-61,907,842),49299=>array(120,-71,931,842),49300=>array(130,-46,907,842),49301=>array(120,-68,912,842),49302=>array(120,-76,907,842),49303=>array(120,-44,921,842),49304=>array(120,-62,917,842),49305=>array(120,-64,907,842),49306=>array(120,-64,908,842),49307=>array(120,-64,908,842),49308=>array(120,-69,923,842),49309=>array(120,-64,908,842),49310=>array(120,-64,908,842),49311=>array(120,-76,907,842),49312=>array(120,-62,907,842),49313=>array(120,-61,907,842),49314=>array(120,-69,922,842),49315=>array(120,-74,929,842),49316=>array(120,-69,927,842),49317=>array(120,-68,911,842),49318=>array(120,-72,929,842),49319=>array(120,-70,936,842),49320=>array(120,-66,908,842),49321=>array(120,-59,916,842),49322=>array(120,-60,928,842),49323=>array(120,-68,908,842),49324=>array(48,-69,936,842),49325=>array(81,-59,935,842),49326=>array(81,-61,935,842),49327=>array(81,-71,935,842),49328=>array(58,-45,935,841),49329=>array(81,-69,935,842),49330=>array(81,-76,935,842),49331=>array(81,-44,935,842),49332=>array(81,-62,935,842),49333=>array(81,-64,935,842),49334=>array(81,-64,935,842),49335=>array(81,-64,935,842),49336=>array(81,-70,935,842),49337=>array(81,-64,935,842),49338=>array(81,-64,935,842),49339=>array(81,-76,935,842),49340=>array(81,-62,935,842),49341=>array(81,-61,935,842),49342=>array(81,-70,935,842),49343=>array(81,-74,935,842),49344=>array(81,-69,935,842),49345=>array(81,-67,935,842),49346=>array(81,-72,935,842),49347=>array(81,-71,935,842),49348=>array(81,-66,935,842),49349=>array(81,-59,935,842),49350=>array(81,-60,935,842),49351=>array(81,-69,935,842),49352=>array(43,-69,907,842),49353=>array(75,-61,907,842),49354=>array(75,-61,907,842),49355=>array(75,-71,931,842),49356=>array(62,-46,908,842),49357=>array(75,-68,912,842),49358=>array(75,-76,907,842),49359=>array(75,-44,921,842),49360=>array(75,-62,917,842),49361=>array(75,-64,907,842),49362=>array(75,-64,908,842),49363=>array(75,-64,908,842),49364=>array(75,-69,923,842),49365=>array(75,-64,908,842),49366=>array(75,-64,908,842),49367=>array(75,-76,906,842),49368=>array(75,-62,907,842),49369=>array(75,-61,907,842),49370=>array(75,-69,922,842),49371=>array(75,-74,929,842),49372=>array(75,-69,927,842),49373=>array(75,-68,911,842),49374=>array(75,-72,929,842),49375=>array(75,-70,936,842),49376=>array(75,-66,908,842),49377=>array(75,-59,916,842),49378=>array(75,-60,928,842),49379=>array(75,-68,908,842),49380=>array(48,-68,935,843),49381=>array(81,-59,936,842),49382=>array(81,-61,936,842),49383=>array(81,-71,936,842),49384=>array(62,-45,936,842),49385=>array(81,-69,936,842),49386=>array(81,-76,936,842),49387=>array(81,-44,936,842),49388=>array(81,-62,936,842),49389=>array(81,-64,936,842),49390=>array(81,-64,936,842),49391=>array(81,-64,936,842),49392=>array(81,-70,936,842),49393=>array(81,-64,936,842),49394=>array(81,-64,936,842),49395=>array(81,-76,936,842),49396=>array(81,-62,936,842),49397=>array(81,-61,936,842),49398=>array(81,-70,936,842),49399=>array(81,-74,936,842),49400=>array(81,-69,936,842),49401=>array(81,-67,936,842),49402=>array(81,-72,936,842),49403=>array(81,-71,936,842),49404=>array(81,-66,936,842),49405=>array(81,-59,936,842),49406=>array(81,-60,936,842),49407=>array(81,-69,936,842),49408=>array(43,-69,907,842),49409=>array(75,-61,907,842),49410=>array(75,-61,907,842),49411=>array(75,-71,931,842),49412=>array(62,-46,908,842),49413=>array(75,-68,912,842),49414=>array(75,-76,907,842),49415=>array(75,-44,921,842),49416=>array(75,-62,917,842),49417=>array(75,-64,907,842),49418=>array(75,-64,908,842),49419=>array(75,-64,908,842),49420=>array(75,-69,923,842),49421=>array(75,-64,908,842),49422=>array(75,-64,908,842),49423=>array(75,-76,906,842),49424=>array(75,-62,907,842),49425=>array(75,-61,907,842),49426=>array(75,-69,922,842),49427=>array(75,-74,929,842),49428=>array(75,-69,927,842),49429=>array(75,-68,911,842),49430=>array(75,-72,929,842),49431=>array(75,-70,936,842),49432=>array(75,-66,908,842),49433=>array(75,-59,916,842),49434=>array(75,-60,928,842),49435=>array(75,-68,908,842),49436=>array(59,-70,907,841),49437=>array(81,-61,907,841),49438=>array(81,-61,907,841),49439=>array(81,-71,931,841),49440=>array(62,-46,907,841),49441=>array(81,-68,912,841),49442=>array(81,-76,907,841),49443=>array(81,-44,921,841),49444=>array(81,-62,917,841),49445=>array(81,-64,907,841),49446=>array(81,-64,908,841),49447=>array(81,-64,908,841),49448=>array(81,-69,923,841),49449=>array(81,-64,908,841),49450=>array(81,-64,908,841),49451=>array(81,-76,906,841),49452=>array(81,-62,907,841),49453=>array(81,-61,907,841),49454=>array(81,-69,922,841),49455=>array(81,-74,929,841),49456=>array(81,-69,927,841),49457=>array(81,-68,911,841),49458=>array(81,-72,929,841),49459=>array(81,-70,936,841),49460=>array(81,-66,908,841),49461=>array(81,-59,916,841),49462=>array(81,-60,928,841),49463=>array(81,-68,908,841),49464=>array(46,-68,907,843),49465=>array(75,-61,907,843),49466=>array(75,-61,907,843),49467=>array(75,-71,931,843),49468=>array(58,-46,908,842),49469=>array(75,-68,912,843),49470=>array(75,-76,907,843),49471=>array(75,-44,921,843),49472=>array(75,-62,917,843),49473=>array(75,-64,907,843),49474=>array(75,-64,908,843),49475=>array(75,-64,908,843),49476=>array(75,-69,923,843),49477=>array(75,-64,908,843),49478=>array(75,-64,908,843),49479=>array(75,-76,906,843),49480=>array(75,-62,907,843),49481=>array(75,-61,907,843),49482=>array(75,-69,922,843),49483=>array(75,-74,929,843),49484=>array(75,-69,927,843),49485=>array(75,-68,911,843),49486=>array(75,-72,929,843),49487=>array(75,-70,936,843),49488=>array(75,-66,908,843),49489=>array(75,-59,916,843),49490=>array(75,-60,928,843),49491=>array(75,-68,908,843),49492=>array(46,-70,907,842),49493=>array(81,-61,908,842),49494=>array(81,-61,908,842),49495=>array(81,-71,931,842),49496=>array(58,-46,907,841),49497=>array(81,-68,912,842),49498=>array(81,-76,908,842),49499=>array(81,-44,921,842),49500=>array(81,-62,917,842),49501=>array(81,-64,908,842),49502=>array(81,-64,908,842),49503=>array(81,-64,908,842),49504=>array(81,-69,923,842),49505=>array(81,-64,908,842),49506=>array(81,-64,908,842),49507=>array(81,-76,908,842),49508=>array(81,-62,908,842),49509=>array(81,-61,908,842),49510=>array(81,-69,922,842),49511=>array(81,-74,929,842),49512=>array(81,-69,927,842),49513=>array(81,-68,911,842),49514=>array(81,-72,929,842),49515=>array(81,-70,936,842),49516=>array(81,-66,908,842),49517=>array(81,-59,916,842),49518=>array(81,-60,928,842),49519=>array(81,-68,908,842),49520=>array(46,-68,907,843),49521=>array(45,-61,907,842),49522=>array(45,-61,907,842),49523=>array(45,-71,931,842),49524=>array(47,-46,907,842),49525=>array(45,-68,912,842),49526=>array(45,-76,907,842),49527=>array(45,-44,921,842),49528=>array(45,-62,917,842),49529=>array(45,-64,907,842),49530=>array(45,-64,908,842),49531=>array(45,-64,908,842),49532=>array(45,-69,923,842),49533=>array(45,-64,908,842),49534=>array(45,-64,908,842),49535=>array(45,-76,907,842),49536=>array(45,-62,907,842),49537=>array(45,-61,907,842),49538=>array(45,-69,922,842),49539=>array(45,-74,929,842),49540=>array(45,-69,927,842),49541=>array(45,-68,911,842),49542=>array(45,-72,929,842),49543=>array(45,-70,936,842),49544=>array(45,-66,908,842),49545=>array(45,-59,916,842),49546=>array(45,-60,928,842),49547=>array(45,-68,908,842),49548=>array(62,7,943,771),49549=>array(79,-61,921,822),49550=>array(79,-61,921,822),49551=>array(79,-71,921,822),49552=>array(79,-46,921,822),49553=>array(79,-68,921,822),49554=>array(79,-74,921,822),49555=>array(79,-44,921,822),49556=>array(79,-62,921,822),49557=>array(79,-64,921,822),49558=>array(79,-64,921,822),49559=>array(79,-63,921,822),49560=>array(79,-68,921,822),49561=>array(79,-64,921,822),49562=>array(79,-63,921,822),49563=>array(79,-74,921,822),49564=>array(79,-62,921,822),49565=>array(79,-61,921,822),49566=>array(79,-69,921,822),49567=>array(79,-74,921,822),49568=>array(79,-69,921,822),49569=>array(79,-68,921,822),49570=>array(79,-72,921,822),49571=>array(79,-70,921,822),49572=>array(79,-66,921,822),49573=>array(79,-59,921,822),49574=>array(79,-60,921,822),49575=>array(79,-68,921,822),49576=>array(60,-69,937,842),49577=>array(77,-59,936,842),49578=>array(77,-61,936,842),49579=>array(77,-71,936,842),49580=>array(72,-45,937,842),49581=>array(77,-69,936,842),49582=>array(77,-76,936,842),49583=>array(77,-44,936,842),49584=>array(77,-62,936,842),49585=>array(77,-64,936,842),49586=>array(77,-64,936,842),49587=>array(77,-64,936,842),49588=>array(77,-70,936,842),49589=>array(77,-64,936,842),49590=>array(77,-64,936,842),49591=>array(77,-76,936,842),49592=>array(77,-62,936,842),49593=>array(77,-61,936,842),49594=>array(77,-70,936,842),49595=>array(77,-74,936,842),49596=>array(77,-69,936,842),49597=>array(77,-67,936,842),49598=>array(77,-72,936,842),49599=>array(77,-71,936,842),49600=>array(77,-66,936,842),49601=>array(77,-59,936,842),49602=>array(77,-60,936,842),49603=>array(77,-69,936,842),49604=>array(54,-69,907,842),49605=>array(67,-61,907,842),49606=>array(67,-61,907,842),49607=>array(67,-71,931,842),49608=>array(57,-46,908,842),49609=>array(67,-68,912,842),49610=>array(67,-76,907,842),49611=>array(67,-44,921,842),49612=>array(67,-62,917,842),49613=>array(67,-64,907,842),49614=>array(67,-64,908,842),49615=>array(67,-64,908,842),49616=>array(67,-69,923,842),49617=>array(67,-64,908,842),49618=>array(67,-64,908,842),49619=>array(67,-76,907,842),49620=>array(67,-62,907,842),49621=>array(67,-61,907,842),49622=>array(67,-69,922,842),49623=>array(67,-74,929,842),49624=>array(67,-69,927,842),49625=>array(67,-68,911,842),49626=>array(67,-72,929,842),49627=>array(67,-70,936,842),49628=>array(67,-66,908,842),49629=>array(67,-59,916,842),49630=>array(67,-60,928,842),49631=>array(67,-68,908,842),49632=>array(52,-69,907,842),49633=>array(65,-61,908,842),49634=>array(65,-61,908,842),49635=>array(65,-71,931,842),49636=>array(64,-46,907,842),49637=>array(65,-68,912,842),49638=>array(65,-76,908,842),49639=>array(65,-44,921,842),49640=>array(65,-62,917,842),49641=>array(65,-64,908,842),49642=>array(65,-64,908,842),49643=>array(65,-64,908,842),49644=>array(65,-69,923,842),49645=>array(65,-64,908,842),49646=>array(65,-64,908,842),49647=>array(65,-76,908,842),49648=>array(65,-62,908,842),49649=>array(65,-61,908,842),49650=>array(65,-69,922,842),49651=>array(65,-74,929,842),49652=>array(65,-69,927,842),49653=>array(65,-68,911,842),49654=>array(65,-72,929,842),49655=>array(65,-70,936,842),49656=>array(65,-66,908,842),49657=>array(65,-59,916,842),49658=>array(65,-60,928,842),49659=>array(65,-68,908,842),49660=>array(62,7,938,771),49661=>array(79,-61,922,822),49662=>array(79,-61,922,822),49663=>array(79,-71,922,822),49664=>array(79,-46,922,822),49665=>array(79,-68,922,822),49666=>array(79,-74,922,822),49667=>array(79,-44,922,822),49668=>array(79,-62,922,822),49669=>array(79,-64,922,822),49670=>array(79,-64,922,822),49671=>array(79,-63,922,822),49672=>array(79,-68,922,822),49673=>array(79,-64,922,822),49674=>array(79,-63,922,822),49675=>array(79,-74,922,822),49676=>array(79,-62,922,822),49677=>array(79,-61,922,822),49678=>array(79,-69,922,822),49679=>array(79,-74,922,822),49680=>array(79,-69,922,822),49681=>array(79,-68,922,822),49682=>array(79,-72,922,822),49683=>array(79,-70,922,822),49684=>array(79,-66,922,822),49685=>array(79,-59,922,822),49686=>array(79,-60,922,822),49687=>array(79,-68,922,822),49688=>array(79,-64,921,831),49689=>array(79,-61,921,822),49690=>array(79,-61,921,822),49691=>array(79,-71,921,822),49692=>array(79,-46,921,822),49693=>array(79,-68,921,822),49694=>array(79,-74,921,822),49695=>array(79,-44,921,822),49696=>array(79,-62,921,822),49697=>array(79,-64,921,822),49698=>array(79,-64,921,822),49699=>array(79,-63,921,822),49700=>array(79,-68,921,822),49701=>array(79,-64,921,822),49702=>array(79,-63,921,822),49703=>array(79,-74,921,822),49704=>array(79,-62,921,822),49705=>array(79,-61,921,822),49706=>array(79,-69,921,822),49707=>array(79,-74,921,822),49708=>array(79,-69,921,822),49709=>array(79,-68,921,822),49710=>array(79,-72,921,822),49711=>array(79,-70,921,822),49712=>array(79,-66,921,822),49713=>array(79,-59,921,822),49714=>array(79,-60,921,822),49715=>array(79,-68,921,822),49716=>array(69,-70,907,841),49717=>array(73,-61,907,841),49718=>array(73,-61,907,841),49719=>array(73,-71,931,841),49720=>array(76,-46,907,841),49721=>array(73,-68,912,841),49722=>array(73,-76,907,841),49723=>array(73,-44,921,841),49724=>array(73,-62,917,841),49725=>array(73,-64,907,841),49726=>array(73,-64,908,841),49727=>array(73,-64,908,841),49728=>array(73,-69,923,841),49729=>array(73,-64,908,841),49730=>array(73,-64,908,841),49731=>array(73,-76,906,841),49732=>array(73,-62,907,841),49733=>array(73,-61,907,841),49734=>array(73,-69,922,841),49735=>array(73,-74,929,841),49736=>array(73,-69,927,841),49737=>array(73,-68,911,841),49738=>array(73,-72,929,841),49739=>array(73,-70,936,841),49740=>array(73,-66,908,841),49741=>array(73,-59,916,841),49742=>array(73,-60,928,841),49743=>array(73,-68,908,841),49744=>array(63,-68,907,843),49745=>array(70,-61,907,843),49746=>array(70,-61,907,843),49747=>array(70,-71,931,843),49748=>array(62,-46,907,843),49749=>array(70,-68,912,843),49750=>array(70,-76,907,843),49751=>array(70,-44,921,843),49752=>array(70,-62,917,843),49753=>array(70,-64,907,843),49754=>array(70,-64,908,843),49755=>array(70,-64,908,843),49756=>array(70,-69,923,843),49757=>array(70,-64,908,843),49758=>array(70,-64,908,843),49759=>array(70,-76,907,843),49760=>array(70,-62,907,843),49761=>array(70,-61,907,843),49762=>array(70,-69,922,843),49763=>array(70,-74,929,843),49764=>array(70,-69,927,843),49765=>array(70,-68,911,843),49766=>array(70,-72,929,843),49767=>array(70,-70,936,843),49768=>array(70,-66,908,843),49769=>array(70,-59,916,843),49770=>array(70,-60,928,843),49771=>array(70,-68,908,843),49772=>array(63,-69,907,842),49773=>array(65,-61,907,840),49774=>array(65,-61,907,840),49775=>array(65,-71,931,840),49776=>array(65,-46,907,843),49777=>array(65,-68,912,840),49778=>array(65,-76,907,840),49779=>array(65,-44,921,840),49780=>array(65,-62,917,840),49781=>array(65,-64,907,840),49782=>array(65,-64,908,840),49783=>array(65,-64,908,840),49784=>array(65,-69,923,840),49785=>array(65,-64,908,840),49786=>array(65,-64,908,840),49787=>array(65,-76,907,840),49788=>array(65,-62,907,840),49789=>array(65,-61,907,840),49790=>array(65,-69,922,840),49791=>array(65,-74,929,840),49792=>array(65,-69,927,840),49793=>array(65,-68,911,840),49794=>array(65,-72,929,840),49795=>array(65,-70,936,840),49796=>array(65,-66,908,840),49797=>array(65,-59,916,840),49798=>array(65,-60,928,840),49799=>array(65,-68,908,840),49800=>array(87,-64,928,831),49801=>array(79,-61,921,822),49802=>array(79,-61,921,822),49803=>array(79,-71,921,822),49804=>array(81,-46,922,822),49805=>array(79,-68,921,822),49806=>array(79,-74,921,822),49807=>array(79,-44,921,822),49808=>array(79,-62,921,822),49809=>array(79,-64,921,822),49810=>array(79,-64,921,822),49811=>array(79,-63,921,822),49812=>array(79,-68,921,822),49813=>array(79,-64,921,822),49814=>array(79,-63,921,822),49815=>array(79,-74,921,822),49816=>array(79,-62,921,822),49817=>array(79,-61,921,822),49818=>array(79,-69,921,822),49819=>array(79,-74,921,822),49820=>array(79,-69,921,822),49821=>array(79,-68,921,822),49822=>array(79,-72,921,822),49823=>array(79,-70,921,822),49824=>array(79,-66,921,822),49825=>array(79,-59,921,822),49826=>array(79,-60,921,822),49827=>array(79,-68,921,822),49828=>array(57,52,943,741),49829=>array(79,-61,922,802),49830=>array(79,-61,922,802),49831=>array(79,-71,922,802),49832=>array(79,-46,922,802),49833=>array(79,-68,922,802),49834=>array(79,-74,922,802),49835=>array(79,-44,922,802),49836=>array(79,-62,922,802),49837=>array(79,-64,922,802),49838=>array(79,-64,922,802),49839=>array(79,-63,922,802),49840=>array(79,-68,922,802),49841=>array(79,-64,922,802),49842=>array(79,-63,922,802),49843=>array(79,-74,922,802),49844=>array(79,-62,922,802),49845=>array(79,-61,922,802),49846=>array(79,-69,922,802),49847=>array(79,-74,922,802),49848=>array(79,-69,922,802),49849=>array(79,-68,922,802),49850=>array(79,-72,922,802),49851=>array(79,-70,922,802),49852=>array(79,-66,922,802),49853=>array(79,-59,922,802),49854=>array(79,-60,922,802),49855=>array(79,-68,922,802),49856=>array(78,-69,907,842),49857=>array(65,-61,907,842),49858=>array(65,-61,907,842),49859=>array(65,-71,931,842),49860=>array(65,-46,907,842),49861=>array(65,-68,912,842),49862=>array(65,-76,907,842),49863=>array(65,-44,921,842),49864=>array(65,-62,917,842),49865=>array(65,-64,907,842),49866=>array(65,-64,908,842),49867=>array(65,-64,908,842),49868=>array(65,-69,923,842),49869=>array(65,-64,908,842),49870=>array(65,-64,908,842),49871=>array(65,-76,907,842),49872=>array(65,-62,907,842),49873=>array(65,-61,907,842),49874=>array(65,-69,922,842),49875=>array(65,-74,929,842),49876=>array(65,-69,927,842),49877=>array(65,-68,911,842),49878=>array(65,-72,929,842),49879=>array(65,-70,936,842),49880=>array(65,-66,908,842),49881=>array(65,-59,916,842),49882=>array(65,-60,928,842),49883=>array(65,-68,908,842),49884=>array(90,-69,907,842),49885=>array(106,-61,907,842),49886=>array(106,-61,907,842),49887=>array(106,-71,931,842),49888=>array(104,-46,907,842),49889=>array(106,-68,912,842),49890=>array(106,-76,907,842),49891=>array(106,-44,921,842),49892=>array(106,-62,917,842),49893=>array(106,-64,907,842),49894=>array(106,-64,908,842),49895=>array(106,-64,908,842),49896=>array(106,-69,923,842),49897=>array(106,-64,908,842),49898=>array(106,-64,908,842),49899=>array(106,-76,907,842),49900=>array(106,-62,907,842),49901=>array(106,-61,907,842),49902=>array(106,-69,922,842),49903=>array(106,-74,929,842),49904=>array(106,-69,927,842),49905=>array(106,-68,911,842),49906=>array(106,-72,929,842),49907=>array(106,-70,936,842),49908=>array(106,-66,908,842),49909=>array(106,-59,916,842),49910=>array(106,-60,928,842),49911=>array(106,-68,908,842),49912=>array(20,-69,937,842),49913=>array(62,-59,936,842),49914=>array(62,-61,936,842),49915=>array(62,-71,936,842),49916=>array(72,-45,936,842),49917=>array(62,-69,936,842),49918=>array(62,-76,936,842),49919=>array(62,-44,936,842),49920=>array(62,-62,936,842),49921=>array(62,-64,936,842),49922=>array(62,-64,936,842),49923=>array(62,-64,936,842),49924=>array(62,-70,936,842),49925=>array(62,-64,936,842),49926=>array(62,-64,936,842),49927=>array(62,-76,936,842),49928=>array(62,-62,936,842),49929=>array(62,-61,936,842),49930=>array(62,-70,936,842),49931=>array(62,-74,936,842),49932=>array(62,-69,936,842),49933=>array(62,-67,936,842),49934=>array(62,-72,936,842),49935=>array(62,-71,936,842),49936=>array(62,-66,936,842),49937=>array(62,-59,936,842),49938=>array(62,-60,936,842),49939=>array(62,-69,936,842),49940=>array(21,-69,907,842),49941=>array(55,-61,907,842),49942=>array(55,-61,907,842),49943=>array(55,-71,931,842),49944=>array(52,-46,907,842),49945=>array(55,-68,912,842),49946=>array(55,-76,907,842),49947=>array(55,-44,921,842),49948=>array(55,-62,917,842),49949=>array(55,-64,907,842),49950=>array(55,-64,908,842),49951=>array(55,-64,908,842),49952=>array(55,-69,923,842),49953=>array(55,-64,908,842),49954=>array(55,-64,908,842),49955=>array(55,-76,907,842),49956=>array(55,-62,907,842),49957=>array(55,-61,907,842),49958=>array(55,-69,922,842),49959=>array(55,-74,929,842),49960=>array(55,-69,927,842),49961=>array(55,-68,911,842),49962=>array(55,-72,929,842),49963=>array(55,-70,936,842),49964=>array(55,-66,908,842),49965=>array(55,-59,916,842),49966=>array(55,-60,928,842),49967=>array(55,-68,908,842),49968=>array(20,-68,935,843),49969=>array(62,-59,936,842),49970=>array(62,-61,936,842),49971=>array(62,-71,936,842),49972=>array(72,-45,936,842),49973=>array(62,-69,936,842),49974=>array(62,-76,936,842),49975=>array(62,-44,936,842),49976=>array(62,-62,936,842),49977=>array(62,-64,936,842),49978=>array(62,-64,936,842),49979=>array(62,-64,936,842),49980=>array(62,-70,936,842),49981=>array(62,-64,936,842),49982=>array(62,-64,936,842),49983=>array(62,-76,936,842),49984=>array(62,-62,936,842),49985=>array(62,-61,936,842),49986=>array(62,-70,936,842),49987=>array(62,-74,936,842),49988=>array(62,-69,936,842),49989=>array(62,-67,936,842),49990=>array(62,-72,936,842),49991=>array(62,-71,936,842),49992=>array(62,-66,936,842),49993=>array(62,-59,936,842),49994=>array(62,-60,936,842),49995=>array(62,-69,936,842),49996=>array(21,-69,907,842),49997=>array(60,-61,907,842),49998=>array(60,-61,907,842),49999=>array(60,-71,931,842),50000=>array(52,-46,907,842),50001=>array(60,-68,912,842),50002=>array(60,-76,907,842),50003=>array(60,-44,921,842),50004=>array(60,-62,917,842),50005=>array(60,-64,907,842),50006=>array(60,-64,908,842),50007=>array(60,-64,908,842),50008=>array(60,-69,923,842),50009=>array(60,-64,908,842),50010=>array(60,-64,908,842),50011=>array(60,-76,907,842),50012=>array(60,-62,907,842),50013=>array(60,-61,907,842),50014=>array(60,-69,922,842),50015=>array(60,-74,929,842),50016=>array(60,-69,927,842),50017=>array(60,-68,911,842),50018=>array(60,-72,929,842),50019=>array(60,-70,936,842),50020=>array(60,-66,908,842),50021=>array(60,-59,916,842),50022=>array(60,-60,928,842),50023=>array(60,-68,908,842),50024=>array(20,-70,907,841),50025=>array(72,-61,907,841),50026=>array(72,-61,907,841),50027=>array(72,-71,931,841),50028=>array(72,-46,907,841),50029=>array(72,-68,912,841),50030=>array(72,-76,907,841),50031=>array(72,-44,921,841),50032=>array(72,-62,917,841),50033=>array(72,-64,907,841),50034=>array(72,-64,908,841),50035=>array(72,-64,908,841),50036=>array(72,-69,923,841),50037=>array(72,-64,908,841),50038=>array(72,-64,908,841),50039=>array(72,-76,906,841),50040=>array(72,-62,907,841),50041=>array(72,-61,907,841),50042=>array(72,-69,922,841),50043=>array(72,-74,929,841),50044=>array(72,-69,927,841),50045=>array(72,-68,911,841),50046=>array(72,-72,929,841),50047=>array(72,-70,936,841),50048=>array(72,-66,908,841),50049=>array(72,-59,916,841),50050=>array(72,-60,928,841),50051=>array(72,-68,908,841),50052=>array(20,-68,907,843),50053=>array(50,-61,907,843),50054=>array(50,-61,907,843),50055=>array(50,-71,931,843),50056=>array(52,-46,907,843),50057=>array(50,-68,912,843),50058=>array(50,-76,907,843),50059=>array(50,-44,921,843),50060=>array(50,-62,917,843),50061=>array(50,-64,907,843),50062=>array(50,-64,908,843),50063=>array(50,-64,908,843),50064=>array(50,-69,923,843),50065=>array(50,-64,908,843),50066=>array(50,-64,908,843),50067=>array(50,-76,907,843),50068=>array(50,-62,907,843),50069=>array(50,-61,907,843),50070=>array(50,-69,922,843),50071=>array(50,-74,929,843),50072=>array(50,-69,927,843),50073=>array(50,-68,911,843),50074=>array(50,-72,929,843),50075=>array(50,-70,936,843),50076=>array(50,-66,908,843),50077=>array(50,-59,916,843),50078=>array(50,-60,928,843),50079=>array(50,-68,908,843),50080=>array(20,-70,907,842),50081=>array(52,-61,908,842),50082=>array(52,-61,908,842),50083=>array(52,-71,931,842),50084=>array(52,-46,907,842),50085=>array(52,-68,912,842),50086=>array(52,-76,908,842),50087=>array(52,-44,921,842),50088=>array(52,-62,917,842),50089=>array(52,-64,908,842),50090=>array(52,-64,908,842),50091=>array(52,-64,908,842),50092=>array(52,-69,923,842),50093=>array(52,-64,908,842),50094=>array(52,-64,908,842),50095=>array(52,-76,908,842),50096=>array(52,-62,908,842),50097=>array(52,-61,908,842),50098=>array(52,-69,922,842),50099=>array(52,-74,929,842),50100=>array(52,-69,927,842),50101=>array(52,-68,911,842),50102=>array(52,-72,929,842),50103=>array(52,-70,936,842),50104=>array(52,-66,908,842),50105=>array(52,-59,916,842),50106=>array(52,-60,928,842),50107=>array(52,-68,908,842),50108=>array(20,-68,907,843),50109=>array(50,-61,907,843),50110=>array(50,-61,907,843),50111=>array(50,-71,931,843),50112=>array(40,-46,907,843),50113=>array(50,-68,912,843),50114=>array(50,-76,907,843),50115=>array(50,-44,921,843),50116=>array(50,-62,917,843),50117=>array(50,-64,907,843),50118=>array(50,-64,908,843),50119=>array(50,-64,908,843),50120=>array(50,-69,923,843),50121=>array(50,-64,908,843),50122=>array(50,-64,908,843),50123=>array(50,-76,907,843),50124=>array(50,-62,907,843),50125=>array(50,-61,907,843),50126=>array(50,-69,922,843),50127=>array(50,-74,929,843),50128=>array(50,-69,927,843),50129=>array(50,-68,911,843),50130=>array(50,-72,929,843),50131=>array(50,-70,936,843),50132=>array(50,-66,908,843),50133=>array(50,-59,916,843),50134=>array(50,-60,928,843),50135=>array(50,-68,908,843),50136=>array(62,12,943,774),50137=>array(79,-61,921,788),50138=>array(79,-61,921,788),50139=>array(79,-71,921,788),50140=>array(79,-46,922,788),50141=>array(79,-68,921,788),50142=>array(79,-74,921,788),50143=>array(79,-44,921,788),50144=>array(79,-62,921,788),50145=>array(79,-64,921,788),50146=>array(79,-64,921,788),50147=>array(79,-63,921,788),50148=>array(79,-68,921,788),50149=>array(79,-64,921,788),50150=>array(79,-63,921,788),50151=>array(79,-74,921,788),50152=>array(79,-62,921,788),50153=>array(79,-61,921,788),50154=>array(79,-69,921,788),50155=>array(79,-74,921,788),50156=>array(79,-69,921,788),50157=>array(79,-68,921,788),50158=>array(79,-72,921,788),50159=>array(79,-70,921,788),50160=>array(79,-66,921,788),50161=>array(79,-59,921,788),50162=>array(79,-60,921,788),50163=>array(79,-68,921,788),50164=>array(41,-68,936,843),50165=>array(55,-59,936,842),50166=>array(55,-61,936,842),50167=>array(55,-71,936,842),50168=>array(64,-45,936,842),50169=>array(55,-69,936,842),50170=>array(55,-76,936,842),50171=>array(55,-44,936,842),50172=>array(55,-62,936,842),50173=>array(55,-64,936,842),50174=>array(55,-64,936,842),50175=>array(55,-64,936,842),50176=>array(55,-70,936,842),50177=>array(55,-64,936,842),50178=>array(55,-64,936,842),50179=>array(55,-76,936,842),50180=>array(55,-62,936,842),50181=>array(55,-61,936,842),50182=>array(55,-70,936,842),50183=>array(55,-74,936,842),50184=>array(55,-69,936,842),50185=>array(55,-67,936,842),50186=>array(55,-72,936,842),50187=>array(55,-71,936,842),50188=>array(55,-66,936,842),50189=>array(55,-59,936,842),50190=>array(55,-60,936,842),50191=>array(55,-69,936,842),50192=>array(38,-69,907,842),50193=>array(63,-61,907,842),50194=>array(63,-61,907,842),50195=>array(63,-71,931,842),50196=>array(48,-46,907,842),50197=>array(63,-68,912,842),50198=>array(63,-76,907,842),50199=>array(63,-44,921,842),50200=>array(63,-62,917,842),50201=>array(63,-64,907,842),50202=>array(63,-64,908,842),50203=>array(63,-64,908,842),50204=>array(63,-69,923,842),50205=>array(63,-64,908,842),50206=>array(63,-64,908,842),50207=>array(63,-76,907,842),50208=>array(63,-62,907,842),50209=>array(63,-61,907,842),50210=>array(63,-69,922,842),50211=>array(63,-74,929,842),50212=>array(63,-69,927,842),50213=>array(63,-68,911,842),50214=>array(63,-72,929,842),50215=>array(63,-70,936,842),50216=>array(63,-66,908,842),50217=>array(63,-59,916,842),50218=>array(63,-60,928,842),50219=>array(63,-68,908,842),50220=>array(68,-69,907,842),50221=>array(65,-61,907,842),50222=>array(65,-61,907,842),50223=>array(65,-71,931,842),50224=>array(65,-46,907,842),50225=>array(65,-68,912,842),50226=>array(65,-76,907,842),50227=>array(65,-44,921,842),50228=>array(65,-62,917,842),50229=>array(65,-64,907,842),50230=>array(65,-64,908,842),50231=>array(65,-64,908,842),50232=>array(65,-69,923,842),50233=>array(65,-64,908,842),50234=>array(65,-64,908,842),50235=>array(65,-76,907,842),50236=>array(65,-62,907,842),50237=>array(65,-61,907,842),50238=>array(65,-69,922,842),50239=>array(65,-74,929,842),50240=>array(65,-69,927,842),50241=>array(65,-68,911,842),50242=>array(65,-72,929,842),50243=>array(65,-70,936,842),50244=>array(65,-66,908,842),50245=>array(65,-59,916,842),50246=>array(65,-60,928,842),50247=>array(65,-68,908,842),50248=>array(62,12,943,774),50249=>array(79,-61,922,788),50250=>array(79,-61,922,788),50251=>array(79,-71,922,788),50252=>array(79,-46,922,788),50253=>array(79,-68,922,788),50254=>array(79,-74,922,788),50255=>array(79,-44,922,788),50256=>array(79,-62,922,788),50257=>array(79,-64,922,788),50258=>array(79,-64,922,788),50259=>array(79,-63,922,788),50260=>array(79,-68,922,788),50261=>array(79,-64,922,788),50262=>array(79,-63,922,788),50263=>array(79,-74,922,788),50264=>array(79,-62,922,788),50265=>array(79,-61,922,788),50266=>array(79,-69,922,788),50267=>array(79,-74,922,788),50268=>array(79,-69,922,788),50269=>array(79,-68,922,788),50270=>array(79,-72,922,788),50271=>array(79,-70,922,788),50272=>array(79,-66,922,788),50273=>array(79,-59,922,788),50274=>array(79,-60,922,788),50275=>array(79,-68,922,788),50276=>array(82,-64,924,822),50277=>array(79,-61,921,788),50278=>array(79,-61,921,788),50279=>array(79,-71,921,788),50280=>array(79,-46,921,788),50281=>array(79,-68,921,788),50282=>array(79,-74,921,788),50283=>array(79,-44,921,788),50284=>array(79,-62,921,788),50285=>array(79,-64,921,788),50286=>array(79,-64,921,788),50287=>array(79,-63,921,788),50288=>array(79,-68,921,788),50289=>array(79,-64,921,788),50290=>array(79,-63,921,788),50291=>array(79,-74,921,788),50292=>array(79,-62,921,788),50293=>array(79,-61,921,788),50294=>array(79,-69,921,788),50295=>array(79,-74,921,788),50296=>array(79,-69,921,788),50297=>array(79,-68,921,788),50298=>array(79,-72,921,788),50299=>array(79,-70,921,788),50300=>array(79,-66,921,788),50301=>array(79,-59,921,788),50302=>array(79,-60,921,788),50303=>array(79,-68,921,788),50304=>array(81,-70,907,841),50305=>array(74,-61,908,841),50306=>array(74,-61,908,841),50307=>array(74,-71,931,841),50308=>array(66,-46,908,842),50309=>array(74,-68,912,841),50310=>array(74,-76,908,841),50311=>array(74,-44,921,841),50312=>array(74,-62,917,841),50313=>array(74,-64,908,841),50314=>array(74,-64,908,841),50315=>array(74,-64,908,841),50316=>array(74,-69,923,841),50317=>array(74,-64,908,841),50318=>array(74,-64,908,841),50319=>array(74,-76,908,841),50320=>array(74,-62,908,841),50321=>array(74,-61,908,841),50322=>array(74,-69,922,841),50323=>array(74,-74,929,841),50324=>array(74,-69,927,841),50325=>array(74,-68,911,841),50326=>array(74,-72,929,841),50327=>array(74,-70,936,841),50328=>array(74,-66,908,841),50329=>array(74,-59,916,841),50330=>array(74,-60,928,841),50331=>array(74,-68,908,841),50332=>array(51,-68,907,843),50333=>array(64,-61,907,843),50334=>array(64,-61,907,843),50335=>array(64,-71,931,843),50336=>array(64,-46,907,843),50337=>array(64,-68,912,843),50338=>array(64,-76,907,843),50339=>array(64,-44,921,843),50340=>array(64,-62,917,843),50341=>array(64,-64,907,843),50342=>array(64,-64,908,843),50343=>array(64,-64,908,843),50344=>array(64,-69,923,843),50345=>array(64,-64,908,843),50346=>array(64,-64,908,843),50347=>array(64,-76,907,843),50348=>array(64,-62,907,843),50349=>array(64,-61,907,843),50350=>array(64,-69,922,843),50351=>array(64,-74,929,843),50352=>array(64,-69,927,843),50353=>array(64,-68,911,843),50354=>array(64,-72,929,843),50355=>array(64,-70,936,843),50356=>array(64,-66,908,843),50357=>array(64,-59,916,843),50358=>array(64,-60,928,843),50359=>array(64,-68,908,843),50360=>array(60,-69,907,842),50361=>array(65,-61,907,842),50362=>array(65,-61,907,842),50363=>array(65,-71,931,842),50364=>array(65,-46,907,842),50365=>array(65,-68,912,842),50366=>array(65,-76,907,842),50367=>array(65,-44,921,842),50368=>array(65,-62,917,842),50369=>array(65,-64,907,842),50370=>array(65,-64,908,842),50371=>array(65,-64,908,842),50372=>array(65,-69,923,842),50373=>array(65,-64,908,842),50374=>array(65,-64,908,842),50375=>array(65,-76,907,842),50376=>array(65,-62,907,842),50377=>array(65,-61,907,842),50378=>array(65,-69,922,842),50379=>array(65,-74,929,842),50380=>array(65,-69,927,842),50381=>array(65,-68,911,842),50382=>array(65,-72,929,842),50383=>array(65,-70,936,842),50384=>array(65,-66,908,842),50385=>array(65,-59,916,842),50386=>array(65,-60,928,842),50387=>array(65,-68,908,842),50388=>array(82,-64,924,822),50389=>array(79,-61,921,788),50390=>array(79,-61,921,788),50391=>array(79,-71,921,788),50392=>array(81,-46,922,788),50393=>array(79,-68,921,788),50394=>array(79,-74,921,788),50395=>array(79,-44,921,788),50396=>array(79,-62,921,788),50397=>array(79,-64,921,788),50398=>array(79,-64,921,788),50399=>array(79,-63,921,788),50400=>array(79,-68,921,788),50401=>array(79,-64,921,788),50402=>array(79,-63,921,788),50403=>array(79,-74,921,788),50404=>array(79,-62,921,788),50405=>array(79,-61,921,788),50406=>array(79,-69,921,788),50407=>array(79,-74,921,788),50408=>array(79,-69,921,788),50409=>array(79,-68,921,788),50410=>array(79,-72,921,788),50411=>array(79,-70,921,788),50412=>array(79,-66,921,788),50413=>array(79,-59,921,788),50414=>array(79,-60,921,788),50415=>array(79,-68,921,788),50416=>array(57,22,943,720),50417=>array(79,-61,922,794),50418=>array(79,-61,922,794),50419=>array(79,-71,922,794),50420=>array(79,-46,921,794),50421=>array(79,-68,922,794),50422=>array(79,-74,922,794),50423=>array(79,-44,922,794),50424=>array(79,-62,922,794),50425=>array(79,-64,922,794),50426=>array(79,-64,922,794),50427=>array(79,-63,922,794),50428=>array(79,-68,922,794),50429=>array(79,-64,922,794),50430=>array(79,-63,922,794),50431=>array(79,-74,922,794),50432=>array(79,-62,922,794),50433=>array(79,-61,922,794),50434=>array(79,-69,922,794),50435=>array(79,-74,922,794),50436=>array(79,-69,922,794),50437=>array(79,-68,922,794),50438=>array(79,-72,922,794),50439=>array(79,-70,922,794),50440=>array(79,-66,922,794),50441=>array(79,-59,922,794),50442=>array(79,-60,922,794),50443=>array(79,-68,922,794),50444=>array(67,-69,907,842),50445=>array(75,-61,907,842),50446=>array(75,-61,907,842),50447=>array(75,-71,931,842),50448=>array(65,-46,907,842),50449=>array(75,-68,912,842),50450=>array(75,-76,907,842),50451=>array(75,-44,921,842),50452=>array(75,-62,917,842),50453=>array(75,-64,907,842),50454=>array(75,-64,908,842),50455=>array(75,-64,908,842),50456=>array(75,-69,923,842),50457=>array(75,-64,908,842),50458=>array(75,-64,908,842),50459=>array(75,-76,907,842),50460=>array(75,-62,907,842),50461=>array(75,-61,907,842),50462=>array(75,-69,922,842),50463=>array(75,-74,929,842),50464=>array(75,-69,927,842),50465=>array(75,-68,911,842),50466=>array(75,-72,929,842),50467=>array(75,-70,936,842),50468=>array(75,-66,908,842),50469=>array(75,-59,916,842),50470=>array(75,-60,928,842),50471=>array(75,-68,908,842),50472=>array(48,-69,907,842),50473=>array(68,-61,907,842),50474=>array(68,-61,907,842),50475=>array(68,-71,931,842),50476=>array(68,-46,907,842),50477=>array(68,-68,912,842),50478=>array(68,-76,907,842),50479=>array(68,-44,921,842),50480=>array(68,-62,917,842),50481=>array(68,-64,907,842),50482=>array(68,-64,908,842),50483=>array(68,-64,908,842),50484=>array(68,-69,923,842),50485=>array(68,-64,908,842),50486=>array(68,-64,908,842),50487=>array(68,-76,907,842),50488=>array(68,-62,907,842),50489=>array(68,-61,907,842),50490=>array(68,-69,922,842),50491=>array(68,-74,929,842),50492=>array(68,-69,927,842),50493=>array(68,-68,911,842),50494=>array(68,-72,929,842),50495=>array(68,-70,936,842),50496=>array(68,-66,908,842),50497=>array(68,-59,916,842),50498=>array(68,-60,928,842),50499=>array(68,-68,908,842),50500=>array(108,-69,936,842),50501=>array(113,-59,936,842),50502=>array(113,-61,936,842),50503=>array(113,-71,936,842),50504=>array(100,-45,936,842),50505=>array(113,-69,936,842),50506=>array(113,-76,936,842),50507=>array(113,-44,936,842),50508=>array(113,-62,936,842),50509=>array(113,-64,936,842),50510=>array(113,-64,936,842),50511=>array(113,-64,936,842),50512=>array(113,-70,936,842),50513=>array(113,-64,936,842),50514=>array(113,-64,936,842),50515=>array(113,-76,936,842),50516=>array(113,-62,936,842),50517=>array(113,-61,936,842),50518=>array(113,-70,936,842),50519=>array(113,-74,936,842),50520=>array(113,-69,936,842),50521=>array(113,-67,936,842),50522=>array(113,-72,936,842),50523=>array(113,-71,936,842),50524=>array(113,-66,936,842),50525=>array(113,-59,936,842),50526=>array(113,-60,936,842),50527=>array(113,-69,936,842),50528=>array(105,-69,907,842),50529=>array(93,-61,907,842),50530=>array(93,-61,907,842),50531=>array(93,-71,931,842),50532=>array(80,-46,907,842),50533=>array(93,-68,912,842),50534=>array(93,-76,907,842),50535=>array(93,-44,921,842),50536=>array(93,-62,917,842),50537=>array(93,-64,907,842),50538=>array(93,-64,908,842),50539=>array(93,-64,908,842),50540=>array(93,-69,923,842),50541=>array(93,-64,908,842),50542=>array(93,-64,908,842),50543=>array(93,-76,907,842),50544=>array(93,-62,907,842),50545=>array(93,-61,907,842),50546=>array(93,-69,922,842),50547=>array(93,-74,929,842),50548=>array(93,-69,927,842),50549=>array(93,-68,911,842),50550=>array(93,-72,929,842),50551=>array(93,-70,936,842),50552=>array(93,-66,908,842),50553=>array(93,-59,916,842),50554=>array(93,-60,928,842),50555=>array(93,-68,908,842),50556=>array(123,-68,935,843),50557=>array(113,-59,936,842),50558=>array(113,-61,936,842),50559=>array(113,-71,936,842),50560=>array(100,-45,936,842),50561=>array(113,-69,936,842),50562=>array(113,-76,936,842),50563=>array(113,-44,936,842),50564=>array(113,-62,936,842),50565=>array(113,-64,936,842),50566=>array(113,-64,936,842),50567=>array(113,-64,936,842),50568=>array(113,-70,936,842),50569=>array(113,-64,936,842),50570=>array(113,-64,936,842),50571=>array(113,-76,936,842),50572=>array(113,-62,936,842),50573=>array(113,-61,936,842),50574=>array(113,-70,936,842),50575=>array(113,-74,936,842),50576=>array(113,-69,936,842),50577=>array(113,-67,936,842),50578=>array(113,-72,936,842),50579=>array(113,-71,936,842),50580=>array(113,-66,936,842),50581=>array(113,-59,936,842),50582=>array(113,-60,936,842),50583=>array(113,-69,936,842),50584=>array(105,-69,907,842),50585=>array(93,-61,907,842),50586=>array(93,-61,907,842),50587=>array(93,-71,931,842),50588=>array(85,-46,907,842),50589=>array(93,-68,912,842),50590=>array(93,-76,907,842),50591=>array(93,-44,921,842),50592=>array(93,-62,917,842),50593=>array(93,-64,907,842),50594=>array(93,-64,908,842),50595=>array(93,-64,908,842),50596=>array(93,-69,923,842),50597=>array(93,-64,908,842),50598=>array(93,-64,908,842),50599=>array(93,-76,907,842),50600=>array(93,-62,907,842),50601=>array(93,-61,907,842),50602=>array(93,-69,922,842),50603=>array(93,-74,929,842),50604=>array(93,-69,927,842),50605=>array(93,-68,911,842),50606=>array(93,-72,929,842),50607=>array(93,-70,936,842),50608=>array(93,-66,908,842),50609=>array(93,-59,916,842),50610=>array(93,-60,928,842),50611=>array(93,-68,908,842),50612=>array(93,-70,907,841),50613=>array(88,-61,907,841),50614=>array(88,-61,907,841),50615=>array(88,-71,931,841),50616=>array(85,-46,907,841),50617=>array(88,-68,912,841),50618=>array(88,-76,907,841),50619=>array(88,-44,921,841),50620=>array(88,-62,917,841),50621=>array(88,-64,907,841),50622=>array(88,-64,908,841),50623=>array(88,-64,908,841),50624=>array(88,-69,923,841),50625=>array(88,-64,908,841),50626=>array(88,-64,908,841),50627=>array(88,-76,906,841),50628=>array(88,-62,907,841),50629=>array(88,-61,907,841),50630=>array(88,-69,922,841),50631=>array(88,-74,929,841),50632=>array(88,-69,927,841),50633=>array(88,-68,911,841),50634=>array(88,-72,929,841),50635=>array(88,-70,936,841),50636=>array(88,-66,908,841),50637=>array(88,-59,916,841),50638=>array(88,-60,928,841),50639=>array(88,-68,908,841),50640=>array(85,-68,907,843),50641=>array(75,-61,907,843),50642=>array(75,-61,907,843),50643=>array(75,-71,931,843),50644=>array(76,-46,907,843),50645=>array(75,-68,912,843),50646=>array(75,-76,907,843),50647=>array(75,-44,921,843),50648=>array(75,-62,917,843),50649=>array(75,-64,907,843),50650=>array(75,-64,908,843),50651=>array(75,-64,908,843),50652=>array(75,-69,923,843),50653=>array(75,-64,908,843),50654=>array(75,-64,908,843),50655=>array(75,-76,907,843),50656=>array(75,-62,907,843),50657=>array(75,-61,907,843),50658=>array(75,-69,922,843),50659=>array(75,-74,929,843),50660=>array(75,-69,927,843),50661=>array(75,-68,911,843),50662=>array(75,-72,929,843),50663=>array(75,-70,936,843),50664=>array(75,-66,908,843),50665=>array(75,-59,916,843),50666=>array(75,-60,928,843),50667=>array(75,-68,908,843),50668=>array(93,-70,907,842),50669=>array(88,-61,908,842),50670=>array(88,-61,908,842),50671=>array(88,-71,931,842),50672=>array(85,-46,907,842),50673=>array(88,-68,912,842),50674=>array(88,-76,908,842),50675=>array(88,-44,921,842),50676=>array(88,-62,917,842),50677=>array(88,-64,908,842),50678=>array(88,-64,908,842),50679=>array(88,-64,908,842),50680=>array(88,-69,923,842),50681=>array(88,-64,908,842),50682=>array(88,-64,908,842),50683=>array(88,-76,908,842),50684=>array(88,-62,908,842),50685=>array(88,-61,908,842),50686=>array(88,-69,922,842),50687=>array(88,-74,929,842),50688=>array(88,-69,927,842),50689=>array(88,-68,911,842),50690=>array(88,-72,929,842),50691=>array(88,-70,936,842),50692=>array(88,-66,908,842),50693=>array(88,-59,916,842),50694=>array(88,-60,928,842),50695=>array(88,-68,908,842),50696=>array(85,-68,907,843),50697=>array(75,-61,907,843),50698=>array(75,-61,907,843),50699=>array(75,-71,931,843),50700=>array(76,-46,907,843),50701=>array(75,-68,912,843),50702=>array(75,-76,907,843),50703=>array(75,-44,921,843),50704=>array(75,-62,917,843),50705=>array(75,-64,907,843),50706=>array(75,-64,908,843),50707=>array(75,-64,908,843),50708=>array(75,-69,923,843),50709=>array(75,-64,908,843),50710=>array(75,-64,908,843),50711=>array(75,-76,907,843),50712=>array(75,-62,907,843),50713=>array(75,-61,907,843),50714=>array(75,-69,922,843),50715=>array(75,-74,929,843),50716=>array(75,-69,927,843),50717=>array(75,-68,911,843),50718=>array(75,-72,929,843),50719=>array(75,-70,936,843),50720=>array(75,-66,908,843),50721=>array(75,-59,916,843),50722=>array(75,-60,928,843),50723=>array(75,-68,908,843),50724=>array(62,4,938,763),50725=>array(79,-61,921,808),50726=>array(79,-61,921,808),50727=>array(79,-71,921,808),50728=>array(79,-46,922,803),50729=>array(79,-68,921,808),50730=>array(79,-74,921,808),50731=>array(79,-44,921,808),50732=>array(79,-62,921,808),50733=>array(79,-64,921,808),50734=>array(79,-64,921,808),50735=>array(79,-63,921,808),50736=>array(79,-68,921,808),50737=>array(79,-64,921,808),50738=>array(79,-63,921,808),50739=>array(79,-74,921,808),50740=>array(79,-62,921,808),50741=>array(79,-61,921,808),50742=>array(79,-69,921,808),50743=>array(79,-74,921,808),50744=>array(79,-69,921,808),50745=>array(79,-68,921,808),50746=>array(79,-72,921,808),50747=>array(79,-70,921,808),50748=>array(79,-66,921,808),50749=>array(79,-59,921,808),50750=>array(79,-60,921,808),50751=>array(79,-68,921,808),50752=>array(52,-69,936,842),50753=>array(77,-59,936,842),50754=>array(77,-61,936,842),50755=>array(77,-71,936,842),50756=>array(72,-45,936,842),50757=>array(77,-69,936,842),50758=>array(77,-76,936,842),50759=>array(77,-44,936,842),50760=>array(77,-62,936,842),50761=>array(77,-64,936,842),50762=>array(77,-64,936,842),50763=>array(77,-64,936,842),50764=>array(77,-70,936,842),50765=>array(77,-64,936,842),50766=>array(77,-64,936,842),50767=>array(77,-76,936,842),50768=>array(77,-62,936,842),50769=>array(77,-61,936,842),50770=>array(77,-70,936,842),50771=>array(77,-74,936,842),50772=>array(77,-69,936,842),50773=>array(77,-67,936,842),50774=>array(77,-72,936,842),50775=>array(77,-71,936,842),50776=>array(77,-66,936,842),50777=>array(77,-59,936,842),50778=>array(77,-60,936,842),50779=>array(77,-69,936,842),50780=>array(61,-69,907,842),50781=>array(62,-61,907,842),50782=>array(62,-61,907,842),50783=>array(62,-71,931,842),50784=>array(62,-46,907,842),50785=>array(62,-68,912,842),50786=>array(62,-76,907,842),50787=>array(62,-44,921,842),50788=>array(62,-62,917,842),50789=>array(62,-64,907,842),50790=>array(62,-64,908,842),50791=>array(62,-64,908,842),50792=>array(62,-69,923,842),50793=>array(62,-64,908,842),50794=>array(62,-64,908,842),50795=>array(62,-76,907,842),50796=>array(62,-62,907,842),50797=>array(62,-61,907,842),50798=>array(62,-69,922,842),50799=>array(62,-74,929,842),50800=>array(62,-69,927,842),50801=>array(62,-68,911,842),50802=>array(62,-72,929,842),50803=>array(62,-70,936,842),50804=>array(62,-66,908,842),50805=>array(62,-59,916,842),50806=>array(62,-60,928,842),50807=>array(62,-68,908,842),50808=>array(52,-69,907,842),50809=>array(64,-61,907,842),50810=>array(64,-61,907,842),50811=>array(64,-71,931,842),50812=>array(64,-46,907,842),50813=>array(64,-68,912,842),50814=>array(64,-76,907,842),50815=>array(64,-44,921,842),50816=>array(64,-62,917,842),50817=>array(64,-64,907,842),50818=>array(64,-64,908,842),50819=>array(64,-64,908,842),50820=>array(64,-69,923,842),50821=>array(64,-64,908,842),50822=>array(64,-64,908,842),50823=>array(64,-76,907,842),50824=>array(64,-62,907,842),50825=>array(64,-61,907,842),50826=>array(64,-69,922,842),50827=>array(64,-74,929,842),50828=>array(64,-69,927,842),50829=>array(64,-68,911,842),50830=>array(64,-72,929,842),50831=>array(64,-70,936,842),50832=>array(64,-66,908,842),50833=>array(64,-59,916,842),50834=>array(64,-60,928,842),50835=>array(64,-68,908,842),50836=>array(62,4,938,763),50837=>array(79,-61,922,808),50838=>array(79,-61,922,808),50839=>array(79,-71,922,808),50840=>array(79,-46,922,793),50841=>array(79,-68,922,808),50842=>array(79,-74,922,808),50843=>array(79,-44,922,808),50844=>array(79,-62,922,808),50845=>array(79,-64,922,808),50846=>array(79,-64,922,808),50847=>array(79,-63,922,808),50848=>array(79,-68,922,808),50849=>array(79,-64,922,808),50850=>array(79,-63,922,808),50851=>array(79,-74,922,808),50852=>array(79,-62,922,808),50853=>array(79,-61,922,808),50854=>array(79,-69,922,808),50855=>array(79,-74,922,808),50856=>array(79,-69,922,808),50857=>array(79,-68,922,808),50858=>array(79,-72,922,808),50859=>array(79,-70,922,808),50860=>array(79,-66,922,808),50861=>array(79,-59,922,808),50862=>array(79,-60,922,808),50863=>array(79,-68,922,808),50864=>array(79,-64,921,793),50865=>array(79,-61,921,808),50866=>array(79,-61,921,808),50867=>array(79,-71,921,808),50868=>array(79,-46,921,793),50869=>array(79,-68,921,808),50870=>array(79,-74,921,808),50871=>array(79,-44,921,808),50872=>array(79,-62,921,808),50873=>array(79,-64,921,808),50874=>array(79,-64,921,808),50875=>array(79,-63,921,808),50876=>array(79,-68,921,808),50877=>array(79,-64,921,808),50878=>array(79,-63,921,808),50879=>array(79,-74,921,808),50880=>array(79,-62,921,808),50881=>array(79,-61,921,808),50882=>array(79,-69,921,808),50883=>array(79,-74,921,808),50884=>array(79,-69,921,808),50885=>array(79,-68,921,808),50886=>array(79,-72,921,808),50887=>array(79,-70,921,808),50888=>array(79,-66,921,808),50889=>array(79,-59,921,808),50890=>array(79,-60,921,808),50891=>array(79,-68,921,808),50892=>array(73,-70,907,841),50893=>array(75,-61,908,841),50894=>array(75,-61,908,841),50895=>array(75,-71,931,841),50896=>array(76,-46,907,841),50897=>array(75,-68,912,841),50898=>array(75,-76,908,841),50899=>array(75,-44,921,841),50900=>array(75,-62,917,841),50901=>array(75,-64,908,841),50902=>array(75,-64,908,841),50903=>array(75,-64,908,841),50904=>array(75,-69,923,841),50905=>array(75,-64,908,841),50906=>array(75,-64,908,841),50907=>array(75,-76,908,841),50908=>array(75,-62,908,841),50909=>array(75,-61,908,841),50910=>array(75,-69,922,841),50911=>array(75,-74,929,841),50912=>array(75,-69,927,841),50913=>array(75,-68,911,841),50914=>array(75,-72,929,841),50915=>array(75,-70,936,841),50916=>array(75,-66,908,841),50917=>array(75,-59,916,841),50918=>array(75,-60,928,841),50919=>array(75,-68,908,841),50920=>array(53,-68,907,843),50921=>array(70,-61,907,843),50922=>array(70,-61,907,843),50923=>array(70,-71,931,843),50924=>array(61,-46,907,843),50925=>array(70,-68,912,843),50926=>array(70,-76,907,843),50927=>array(70,-44,921,843),50928=>array(70,-62,917,843),50929=>array(70,-64,907,843),50930=>array(70,-64,908,843),50931=>array(70,-64,908,843),50932=>array(70,-69,923,843),50933=>array(70,-64,908,843),50934=>array(70,-64,908,843),50935=>array(70,-76,907,843),50936=>array(70,-62,907,843),50937=>array(70,-61,907,843),50938=>array(70,-69,922,843),50939=>array(70,-74,929,843),50940=>array(70,-69,927,843),50941=>array(70,-68,911,843),50942=>array(70,-72,929,843),50943=>array(70,-70,936,843),50944=>array(70,-66,908,843),50945=>array(70,-59,916,843),50946=>array(70,-60,928,843),50947=>array(70,-68,908,843),50948=>array(70,-69,907,842),50949=>array(65,-61,907,842),50950=>array(65,-61,907,842),50951=>array(65,-71,931,842),50952=>array(63,-46,907,842),50953=>array(65,-68,912,842),50954=>array(65,-76,907,842),50955=>array(65,-44,921,842),50956=>array(65,-62,917,842),50957=>array(65,-64,907,842),50958=>array(65,-64,908,842),50959=>array(65,-64,908,842),50960=>array(65,-69,923,842),50961=>array(65,-64,908,842),50962=>array(65,-64,908,842),50963=>array(65,-76,907,842),50964=>array(65,-62,907,842),50965=>array(65,-61,907,842),50966=>array(65,-69,922,842),50967=>array(65,-74,929,842),50968=>array(65,-69,927,842),50969=>array(65,-68,911,842),50970=>array(65,-72,929,842),50971=>array(65,-70,936,842),50972=>array(65,-66,908,842),50973=>array(65,-59,916,842),50974=>array(65,-60,928,842),50975=>array(65,-68,908,842),50976=>array(71,-64,928,793),50977=>array(79,-61,921,808),50978=>array(79,-61,921,808),50979=>array(79,-71,921,808),50980=>array(79,-46,921,793),50981=>array(79,-68,921,808),50982=>array(79,-74,921,808),50983=>array(79,-44,921,808),50984=>array(79,-62,921,808),50985=>array(79,-64,921,808),50986=>array(79,-64,921,808),50987=>array(79,-63,921,808),50988=>array(79,-68,921,808),50989=>array(79,-64,921,808),50990=>array(79,-63,921,808),50991=>array(79,-74,921,808),50992=>array(79,-62,921,808),50993=>array(79,-61,921,808),50994=>array(79,-69,921,808),50995=>array(79,-74,921,808),50996=>array(79,-69,921,808),50997=>array(79,-68,921,808),50998=>array(79,-72,921,808),50999=>array(79,-70,921,808),51000=>array(79,-66,921,808),51001=>array(79,-59,921,808),51002=>array(79,-60,921,808),51003=>array(79,-68,921,808),51004=>array(57,42,943,733),51005=>array(79,-61,921,808),51006=>array(79,-61,921,808),51007=>array(79,-71,921,808),51008=>array(79,-46,921,793),51009=>array(79,-68,921,808),51010=>array(79,-74,921,808),51011=>array(79,-44,921,808),51012=>array(79,-62,921,808),51013=>array(79,-64,921,808),51014=>array(79,-64,921,808),51015=>array(79,-63,921,808),51016=>array(79,-68,921,808),51017=>array(79,-64,921,808),51018=>array(79,-63,921,808),51019=>array(79,-74,921,808),51020=>array(79,-62,921,808),51021=>array(79,-61,921,808),51022=>array(79,-69,921,808),51023=>array(79,-74,921,808),51024=>array(79,-69,921,808),51025=>array(79,-68,921,808),51026=>array(79,-72,921,808),51027=>array(79,-70,921,808),51028=>array(79,-66,921,808),51029=>array(79,-59,921,808),51030=>array(79,-60,921,808),51031=>array(79,-68,921,808),51032=>array(67,-69,907,842),51033=>array(75,-61,907,842),51034=>array(75,-61,907,842),51035=>array(75,-71,931,842),51036=>array(66,-46,907,842),51037=>array(75,-68,912,842),51038=>array(75,-76,907,842),51039=>array(75,-44,921,842),51040=>array(75,-62,917,842),51041=>array(75,-64,907,842),51042=>array(75,-64,908,842),51043=>array(75,-64,908,842),51044=>array(75,-69,923,842),51045=>array(75,-64,908,842),51046=>array(75,-64,908,842),51047=>array(75,-76,907,842),51048=>array(75,-62,907,842),51049=>array(75,-61,907,842),51050=>array(75,-69,922,842),51051=>array(75,-74,929,842),51052=>array(75,-69,927,842),51053=>array(75,-68,911,842),51054=>array(75,-72,929,842),51055=>array(75,-70,936,842),51056=>array(75,-66,908,842),51057=>array(75,-59,916,842),51058=>array(75,-60,928,842),51059=>array(75,-68,908,842),51060=>array(134,-69,906,842),51061=>array(119,-61,907,842),51062=>array(119,-61,907,842),51063=>array(119,-71,931,842),51064=>array(108,-46,907,842),51065=>array(119,-68,912,842),51066=>array(119,-76,907,842),51067=>array(119,-44,921,842),51068=>array(119,-62,917,842),51069=>array(119,-64,907,842),51070=>array(119,-64,908,842),51071=>array(119,-64,908,842),51072=>array(119,-69,923,842),51073=>array(119,-64,908,842),51074=>array(119,-64,908,842),51075=>array(119,-76,907,842),51076=>array(119,-62,907,842),51077=>array(119,-61,907,842),51078=>array(119,-69,922,842),51079=>array(119,-74,929,842),51080=>array(119,-69,927,842),51081=>array(119,-68,911,842),51082=>array(119,-72,929,842),51083=>array(119,-70,936,842),51084=>array(119,-66,908,842),51085=>array(119,-59,916,842),51086=>array(119,-60,928,842),51087=>array(119,-68,908,842),51088=>array(73,-69,936,842),51089=>array(83,-59,936,842),51090=>array(83,-61,936,842),51091=>array(83,-71,936,842),51092=>array(71,-45,936,842),51093=>array(83,-69,936,842),51094=>array(83,-76,936,842),51095=>array(83,-44,936,842),51096=>array(83,-62,936,842),51097=>array(83,-64,936,842),51098=>array(83,-64,936,842),51099=>array(83,-64,936,842),51100=>array(83,-70,936,842),51101=>array(83,-64,936,842),51102=>array(83,-64,936,842),51103=>array(83,-76,936,842),51104=>array(83,-62,936,842),51105=>array(83,-61,936,842),51106=>array(83,-70,936,842),51107=>array(83,-74,936,842),51108=>array(83,-69,936,842),51109=>array(83,-67,936,842),51110=>array(83,-72,936,842),51111=>array(83,-71,936,842),51112=>array(83,-66,936,842),51113=>array(83,-59,936,842),51114=>array(83,-60,936,842),51115=>array(83,-69,936,842),51116=>array(50,-69,907,842),51117=>array(84,-61,907,842),51118=>array(84,-61,907,842),51119=>array(84,-71,931,842),51120=>array(76,-46,907,842),51121=>array(84,-68,912,842),51122=>array(84,-76,907,842),51123=>array(84,-44,921,842),51124=>array(84,-62,917,842),51125=>array(84,-64,907,842),51126=>array(84,-64,908,842),51127=>array(84,-64,908,842),51128=>array(84,-69,923,842),51129=>array(84,-64,908,842),51130=>array(84,-64,908,842),51131=>array(84,-76,907,842),51132=>array(84,-62,907,842),51133=>array(84,-61,907,842),51134=>array(84,-69,922,842),51135=>array(84,-74,929,842),51136=>array(84,-69,927,842),51137=>array(84,-68,911,842),51138=>array(84,-72,929,842),51139=>array(84,-70,936,842),51140=>array(84,-66,908,842),51141=>array(84,-59,916,842),51142=>array(84,-60,928,842),51143=>array(84,-68,908,842),51144=>array(73,-68,935,843),51145=>array(83,-59,936,842),51146=>array(83,-61,936,842),51147=>array(83,-71,936,842),51148=>array(71,-45,936,842),51149=>array(83,-69,936,842),51150=>array(83,-76,936,842),51151=>array(83,-44,936,842),51152=>array(83,-62,936,842),51153=>array(83,-64,936,842),51154=>array(83,-64,936,842),51155=>array(83,-64,936,842),51156=>array(83,-70,936,842),51157=>array(83,-64,936,842),51158=>array(83,-64,936,842),51159=>array(83,-76,936,842),51160=>array(83,-62,936,842),51161=>array(83,-61,936,842),51162=>array(83,-70,936,842),51163=>array(83,-74,936,842),51164=>array(83,-69,936,842),51165=>array(83,-67,936,842),51166=>array(83,-72,936,842),51167=>array(83,-71,936,842),51168=>array(83,-66,936,842),51169=>array(83,-59,936,842),51170=>array(83,-60,936,842),51171=>array(83,-69,936,842),51172=>array(50,-69,907,842),51173=>array(84,-61,907,842),51174=>array(84,-61,907,842),51175=>array(84,-71,931,842),51176=>array(76,-46,907,842),51177=>array(84,-68,912,842),51178=>array(84,-76,907,842),51179=>array(84,-44,921,842),51180=>array(84,-62,917,842),51181=>array(84,-64,907,842),51182=>array(84,-64,908,842),51183=>array(84,-64,908,842),51184=>array(84,-69,923,842),51185=>array(84,-64,908,842),51186=>array(84,-64,908,842),51187=>array(84,-76,907,842),51188=>array(84,-62,907,842),51189=>array(84,-61,907,842),51190=>array(84,-69,922,842),51191=>array(84,-74,929,842),51192=>array(84,-69,927,842),51193=>array(84,-68,911,842),51194=>array(84,-72,929,842),51195=>array(84,-70,936,842),51196=>array(84,-66,908,842),51197=>array(84,-59,916,842),51198=>array(84,-60,928,842),51199=>array(84,-68,908,842),51200=>array(68,-70,907,841),51201=>array(83,-61,907,841),51202=>array(83,-61,907,841),51203=>array(83,-71,931,841),51204=>array(71,-46,907,841),51205=>array(83,-68,912,841),51206=>array(83,-76,907,841),51207=>array(83,-44,921,841),51208=>array(83,-62,917,841),51209=>array(83,-64,907,841),51210=>array(83,-64,908,841),51211=>array(83,-64,908,841),51212=>array(83,-69,923,841),51213=>array(83,-64,908,841),51214=>array(83,-64,908,841),51215=>array(83,-76,906,841),51216=>array(83,-62,907,841),51217=>array(83,-61,907,841),51218=>array(83,-69,922,841),51219=>array(83,-74,929,841),51220=>array(83,-69,927,841),51221=>array(83,-68,911,841),51222=>array(83,-72,929,841),51223=>array(83,-70,936,841),51224=>array(83,-66,908,841),51225=>array(83,-59,916,841),51226=>array(83,-60,928,841),51227=>array(83,-68,908,841),51228=>array(50,-69,907,842),51229=>array(64,-61,907,843),51230=>array(64,-61,907,843),51231=>array(64,-71,931,843),51232=>array(56,-46,907,843),51233=>array(64,-68,912,843),51234=>array(64,-76,907,843),51235=>array(64,-44,921,843),51236=>array(64,-62,917,843),51237=>array(64,-64,907,843),51238=>array(64,-64,908,843),51239=>array(64,-64,908,843),51240=>array(64,-69,923,843),51241=>array(64,-64,908,843),51242=>array(64,-64,908,843),51243=>array(64,-76,907,843),51244=>array(64,-62,907,843),51245=>array(64,-61,907,843),51246=>array(64,-69,922,843),51247=>array(64,-74,929,843),51248=>array(64,-69,927,843),51249=>array(64,-68,911,843),51250=>array(64,-72,929,843),51251=>array(64,-70,936,843),51252=>array(64,-66,908,843),51253=>array(64,-59,916,843),51254=>array(64,-60,928,843),51255=>array(64,-68,908,843),51256=>array(58,-70,907,842),51257=>array(63,-61,908,842),51258=>array(63,-61,908,842),51259=>array(63,-71,931,842),51260=>array(70,-46,907,842),51261=>array(63,-68,912,842),51262=>array(63,-76,908,842),51263=>array(63,-44,921,842),51264=>array(63,-62,917,842),51265=>array(63,-64,908,842),51266=>array(63,-64,908,842),51267=>array(63,-64,908,842),51268=>array(63,-69,923,842),51269=>array(63,-64,908,842),51270=>array(63,-64,908,842),51271=>array(63,-76,908,842),51272=>array(63,-62,908,842),51273=>array(63,-61,908,842),51274=>array(63,-69,922,842),51275=>array(63,-74,929,842),51276=>array(63,-69,927,842),51277=>array(63,-68,911,842),51278=>array(63,-72,929,842),51279=>array(63,-70,936,842),51280=>array(63,-66,908,842),51281=>array(63,-59,916,842),51282=>array(63,-60,928,842),51283=>array(63,-68,908,842),51284=>array(38,-69,908,842),51285=>array(62,-61,907,843),51286=>array(62,-61,907,843),51287=>array(62,-71,931,843),51288=>array(53,-46,907,843),51289=>array(62,-68,912,843),51290=>array(62,-76,907,843),51291=>array(62,-44,921,843),51292=>array(62,-62,917,843),51293=>array(62,-64,907,843),51294=>array(62,-64,908,843),51295=>array(62,-64,908,843),51296=>array(62,-69,923,843),51297=>array(62,-64,908,843),51298=>array(62,-64,908,843),51299=>array(62,-76,907,843),51300=>array(62,-62,907,843),51301=>array(62,-61,907,843),51302=>array(62,-69,922,843),51303=>array(62,-74,929,843),51304=>array(62,-69,927,843),51305=>array(62,-68,911,843),51306=>array(62,-72,929,843),51307=>array(62,-70,936,843),51308=>array(62,-66,908,843),51309=>array(62,-59,916,843),51310=>array(62,-60,928,843),51311=>array(62,-68,908,843),51312=>array(62,22,943,742),51313=>array(79,-61,921,798),51314=>array(79,-61,921,798),51315=>array(79,-71,921,798),51316=>array(79,-46,921,798),51317=>array(79,-68,921,798),51318=>array(79,-74,921,798),51319=>array(79,-44,921,798),51320=>array(79,-62,921,798),51321=>array(79,-64,921,798),51322=>array(79,-64,921,798),51323=>array(79,-63,921,798),51324=>array(79,-68,921,798),51325=>array(79,-64,921,798),51326=>array(79,-63,921,798),51327=>array(79,-74,921,798),51328=>array(79,-62,921,798),51329=>array(79,-61,921,798),51330=>array(79,-69,921,798),51331=>array(79,-74,921,798),51332=>array(79,-69,921,798),51333=>array(79,-68,921,798),51334=>array(79,-72,921,798),51335=>array(79,-70,921,798),51336=>array(79,-66,921,798),51337=>array(79,-59,921,798),51338=>array(79,-60,921,798),51339=>array(79,-68,921,798),51340=>array(64,-69,936,842),51341=>array(77,-59,936,842),51342=>array(77,-61,936,842),51343=>array(77,-71,936,842),51344=>array(72,-45,936,842),51345=>array(77,-69,936,842),51346=>array(77,-76,936,842),51347=>array(77,-44,936,842),51348=>array(77,-62,936,842),51349=>array(77,-64,936,842),51350=>array(77,-64,936,842),51351=>array(77,-64,936,842),51352=>array(77,-70,936,842),51353=>array(77,-64,936,842),51354=>array(77,-64,936,842),51355=>array(77,-76,936,842),51356=>array(77,-62,936,842),51357=>array(77,-61,936,842),51358=>array(77,-70,936,842),51359=>array(77,-74,936,842),51360=>array(77,-69,936,842),51361=>array(77,-67,936,842),51362=>array(77,-72,936,842),51363=>array(77,-71,936,842),51364=>array(77,-66,936,842),51365=>array(77,-59,936,842),51366=>array(77,-60,936,842),51367=>array(77,-69,936,842),51368=>array(49,-69,907,842),51369=>array(77,-61,907,842),51370=>array(77,-61,907,842),51371=>array(77,-71,931,842),51372=>array(72,-46,907,842),51373=>array(77,-68,912,842),51374=>array(77,-76,907,842),51375=>array(77,-44,921,842),51376=>array(77,-62,917,842),51377=>array(77,-64,907,842),51378=>array(77,-64,908,842),51379=>array(77,-64,908,842),51380=>array(77,-69,923,842),51381=>array(77,-64,908,842),51382=>array(77,-64,908,842),51383=>array(77,-76,907,842),51384=>array(77,-62,907,842),51385=>array(77,-61,907,842),51386=>array(77,-69,922,842),51387=>array(77,-74,929,842),51388=>array(77,-69,927,842),51389=>array(77,-68,911,842),51390=>array(77,-72,929,842),51391=>array(77,-70,936,842),51392=>array(77,-66,908,842),51393=>array(77,-59,916,842),51394=>array(77,-60,928,842),51395=>array(77,-68,908,842),51396=>array(52,-69,907,842),51397=>array(65,-61,907,842),51398=>array(65,-61,907,842),51399=>array(65,-71,931,842),51400=>array(65,-46,907,842),51401=>array(65,-68,912,842),51402=>array(65,-76,907,842),51403=>array(65,-44,921,842),51404=>array(65,-62,917,842),51405=>array(65,-64,907,842),51406=>array(65,-64,908,842),51407=>array(65,-64,908,842),51408=>array(65,-69,923,842),51409=>array(65,-64,908,842),51410=>array(65,-64,908,842),51411=>array(65,-76,907,842),51412=>array(65,-62,907,842),51413=>array(65,-61,907,842),51414=>array(65,-69,922,842),51415=>array(65,-74,929,842),51416=>array(65,-69,927,842),51417=>array(65,-68,911,842),51418=>array(65,-72,929,842),51419=>array(65,-70,936,842),51420=>array(65,-66,908,842),51421=>array(65,-59,916,842),51422=>array(65,-60,928,842),51423=>array(65,-68,908,842),51424=>array(62,22,938,742),51425=>array(79,-61,922,798),51426=>array(79,-61,922,798),51427=>array(79,-71,922,798),51428=>array(79,-46,922,798),51429=>array(79,-68,922,798),51430=>array(79,-74,922,798),51431=>array(79,-44,922,798),51432=>array(79,-62,922,798),51433=>array(79,-64,922,798),51434=>array(79,-64,922,798),51435=>array(79,-63,922,798),51436=>array(79,-68,922,798),51437=>array(79,-64,922,798),51438=>array(79,-63,922,798),51439=>array(79,-74,922,798),51440=>array(79,-62,922,798),51441=>array(79,-61,922,798),51442=>array(79,-69,922,798),51443=>array(79,-74,922,798),51444=>array(79,-69,922,798),51445=>array(79,-68,922,798),51446=>array(79,-72,922,798),51447=>array(79,-70,922,798),51448=>array(79,-66,922,798),51449=>array(79,-59,922,798),51450=>array(79,-60,922,798),51451=>array(79,-68,922,798),51452=>array(79,-64,921,798),51453=>array(79,-61,921,798),51454=>array(79,-61,921,798),51455=>array(79,-71,921,798),51456=>array(79,-46,921,798),51457=>array(79,-68,921,798),51458=>array(79,-74,921,798),51459=>array(79,-44,921,798),51460=>array(79,-62,921,798),51461=>array(79,-64,921,798),51462=>array(79,-64,921,798),51463=>array(79,-63,921,798),51464=>array(79,-68,921,798),51465=>array(79,-64,921,798),51466=>array(79,-63,921,798),51467=>array(79,-74,921,798),51468=>array(79,-62,921,798),51469=>array(79,-61,921,798),51470=>array(79,-69,921,798),51471=>array(79,-74,921,798),51472=>array(79,-69,921,798),51473=>array(79,-68,921,798),51474=>array(79,-72,921,798),51475=>array(79,-70,921,798),51476=>array(79,-66,921,798),51477=>array(79,-59,921,798),51478=>array(79,-60,921,798),51479=>array(79,-68,921,798),51480=>array(70,-70,907,841),51481=>array(73,-61,910,841),51482=>array(73,-61,910,841),51483=>array(73,-71,931,841),51484=>array(76,-46,909,840),51485=>array(73,-68,912,841),51486=>array(73,-76,910,841),51487=>array(73,-44,921,841),51488=>array(73,-62,917,841),51489=>array(73,-64,910,841),51490=>array(73,-64,910,841),51491=>array(73,-64,910,841),51492=>array(73,-69,923,841),51493=>array(73,-64,910,841),51494=>array(73,-64,910,841),51495=>array(73,-76,910,841),51496=>array(73,-62,910,841),51497=>array(73,-61,910,841),51498=>array(73,-69,922,841),51499=>array(73,-74,929,841),51500=>array(73,-69,927,841),51501=>array(73,-68,911,841),51502=>array(73,-72,929,841),51503=>array(73,-70,936,841),51504=>array(73,-66,910,841),51505=>array(73,-59,916,841),51506=>array(73,-60,928,841),51507=>array(73,-68,910,841),51508=>array(63,-68,907,843),51509=>array(70,-61,907,843),51510=>array(70,-61,907,843),51511=>array(70,-71,931,843),51512=>array(76,-46,907,843),51513=>array(70,-68,912,843),51514=>array(70,-76,907,843),51515=>array(70,-44,921,843),51516=>array(70,-62,917,843),51517=>array(70,-64,907,843),51518=>array(70,-64,908,843),51519=>array(70,-64,908,843),51520=>array(70,-69,923,843),51521=>array(70,-64,908,843),51522=>array(70,-64,908,843),51523=>array(70,-76,907,843),51524=>array(70,-62,907,843),51525=>array(70,-61,907,843),51526=>array(70,-69,922,843),51527=>array(70,-74,929,843),51528=>array(70,-69,927,843),51529=>array(70,-68,911,843),51530=>array(70,-72,929,843),51531=>array(70,-70,936,843),51532=>array(70,-66,908,843),51533=>array(70,-59,916,843),51534=>array(70,-60,928,843),51535=>array(70,-68,908,843),51536=>array(70,-69,907,842),51537=>array(76,-61,907,842),51538=>array(76,-61,907,842),51539=>array(76,-71,931,842),51540=>array(74,-46,907,842),51541=>array(76,-68,912,842),51542=>array(76,-76,907,842),51543=>array(76,-44,921,842),51544=>array(76,-62,917,842),51545=>array(76,-64,907,842),51546=>array(76,-64,908,842),51547=>array(76,-64,908,842),51548=>array(76,-69,923,842),51549=>array(76,-64,908,842),51550=>array(76,-64,908,842),51551=>array(76,-76,906,842),51552=>array(76,-62,907,842),51553=>array(76,-61,907,842),51554=>array(76,-69,922,842),51555=>array(76,-74,929,842),51556=>array(76,-69,927,842),51557=>array(76,-68,911,842),51558=>array(76,-72,929,842),51559=>array(76,-70,936,842),51560=>array(76,-66,908,842),51561=>array(76,-59,916,842),51562=>array(76,-60,928,842),51563=>array(76,-68,908,842),51564=>array(87,-64,928,798),51565=>array(79,-61,921,798),51566=>array(79,-61,921,798),51567=>array(79,-71,921,798),51568=>array(81,-46,922,798),51569=>array(79,-68,921,798),51570=>array(79,-74,921,798),51571=>array(79,-44,921,798),51572=>array(79,-62,921,798),51573=>array(79,-64,921,798),51574=>array(79,-64,921,798),51575=>array(79,-63,921,798),51576=>array(79,-68,921,798),51577=>array(79,-64,921,798),51578=>array(79,-63,921,798),51579=>array(79,-74,921,798),51580=>array(79,-62,921,798),51581=>array(79,-61,921,798),51582=>array(79,-69,921,798),51583=>array(79,-74,921,798),51584=>array(79,-69,921,798),51585=>array(79,-68,921,798),51586=>array(79,-72,921,798),51587=>array(79,-70,921,798),51588=>array(79,-66,921,798),51589=>array(79,-59,921,798),51590=>array(79,-60,921,798),51591=>array(79,-68,921,798),51592=>array(57,52,943,717),51593=>array(79,-61,922,798),51594=>array(79,-61,922,798),51595=>array(79,-71,922,798),51596=>array(79,-46,922,798),51597=>array(79,-68,922,798),51598=>array(79,-74,922,798),51599=>array(79,-44,922,798),51600=>array(79,-62,922,798),51601=>array(79,-64,922,798),51602=>array(79,-64,922,798),51603=>array(79,-63,922,798),51604=>array(79,-68,922,798),51605=>array(79,-64,922,798),51606=>array(79,-63,922,798),51607=>array(79,-74,922,798),51608=>array(79,-62,922,798),51609=>array(79,-61,922,798),51610=>array(79,-69,922,798),51611=>array(79,-74,922,798),51612=>array(79,-69,922,798),51613=>array(79,-68,922,798),51614=>array(79,-72,922,798),51615=>array(79,-70,922,798),51616=>array(79,-66,922,798),51617=>array(79,-59,922,798),51618=>array(79,-60,922,798),51619=>array(79,-68,922,798),51620=>array(78,-69,907,842),51621=>array(65,-61,907,842),51622=>array(65,-61,907,842),51623=>array(65,-71,931,842),51624=>array(65,-46,907,842),51625=>array(65,-68,912,842),51626=>array(65,-76,907,842),51627=>array(65,-44,921,842),51628=>array(65,-62,917,842),51629=>array(65,-64,907,842),51630=>array(65,-64,908,842),51631=>array(65,-64,908,842),51632=>array(65,-69,923,842),51633=>array(65,-64,908,842),51634=>array(65,-64,908,842),51635=>array(65,-76,907,842),51636=>array(65,-62,907,842),51637=>array(65,-61,907,842),51638=>array(65,-69,922,842),51639=>array(65,-74,929,842),51640=>array(65,-69,927,842),51641=>array(65,-68,911,842),51642=>array(65,-72,929,842),51643=>array(65,-70,936,842),51644=>array(65,-66,908,842),51645=>array(65,-59,916,842),51646=>array(65,-60,928,842),51647=>array(65,-68,908,842),51648=>array(116,-69,907,842),51649=>array(123,-61,907,842),51650=>array(123,-61,907,842),51651=>array(123,-71,931,842),51652=>array(105,-46,907,842),51653=>array(123,-68,912,842),51654=>array(123,-76,907,842),51655=>array(123,-44,921,842),51656=>array(123,-62,917,842),51657=>array(123,-64,907,842),51658=>array(123,-64,908,842),51659=>array(123,-64,908,842),51660=>array(123,-69,923,842),51661=>array(123,-64,908,842),51662=>array(123,-64,908,842),51663=>array(123,-76,907,842),51664=>array(123,-62,907,842),51665=>array(123,-61,907,842),51666=>array(123,-69,922,842),51667=>array(123,-74,929,842),51668=>array(123,-69,927,842),51669=>array(123,-68,911,842),51670=>array(123,-72,929,842),51671=>array(123,-70,936,842),51672=>array(123,-66,908,842),51673=>array(123,-59,916,842),51674=>array(123,-60,928,842),51675=>array(123,-68,908,842),51676=>array(36,-69,935,842),51677=>array(59,-59,936,842),51678=>array(59,-61,936,842),51679=>array(59,-71,936,842),51680=>array(50,-45,936,842),51681=>array(59,-69,936,842),51682=>array(59,-76,936,842),51683=>array(59,-44,936,842),51684=>array(59,-62,936,842),51685=>array(59,-64,936,842),51686=>array(59,-64,936,842),51687=>array(59,-64,936,842),51688=>array(59,-70,936,842),51689=>array(59,-64,936,842),51690=>array(59,-64,936,842),51691=>array(59,-76,936,842),51692=>array(59,-62,936,842),51693=>array(59,-61,936,842),51694=>array(59,-70,936,842),51695=>array(59,-74,936,842),51696=>array(59,-69,936,842),51697=>array(59,-67,936,842),51698=>array(59,-72,936,842),51699=>array(59,-71,936,842),51700=>array(59,-66,936,842),51701=>array(59,-59,936,842),51702=>array(59,-60,936,842),51703=>array(59,-69,936,842),51704=>array(33,-69,907,842),51705=>array(44,-61,907,842),51706=>array(44,-61,907,842),51707=>array(44,-71,931,842),51708=>array(52,-46,907,842),51709=>array(44,-68,912,842),51710=>array(44,-76,907,842),51711=>array(44,-44,921,842),51712=>array(44,-62,917,842),51713=>array(44,-64,907,842),51714=>array(44,-64,908,842),51715=>array(44,-64,908,842),51716=>array(44,-69,923,842),51717=>array(44,-64,908,842),51718=>array(44,-64,908,842),51719=>array(44,-76,907,842),51720=>array(44,-62,907,842),51721=>array(44,-61,907,842),51722=>array(44,-69,922,842),51723=>array(44,-74,929,842),51724=>array(44,-69,927,842),51725=>array(44,-68,911,842),51726=>array(44,-72,929,842),51727=>array(44,-70,936,842),51728=>array(44,-66,908,842),51729=>array(44,-59,916,842),51730=>array(44,-60,928,842),51731=>array(44,-68,908,842),51732=>array(36,-68,935,843),51733=>array(59,-59,936,842),51734=>array(59,-61,936,842),51735=>array(59,-71,936,842),51736=>array(50,-45,936,842),51737=>array(59,-69,936,842),51738=>array(59,-76,936,842),51739=>array(59,-44,936,842),51740=>array(59,-62,936,842),51741=>array(59,-64,936,842),51742=>array(59,-64,936,842),51743=>array(59,-64,936,842),51744=>array(59,-70,936,842),51745=>array(59,-64,936,842),51746=>array(59,-64,936,842),51747=>array(59,-76,936,842),51748=>array(59,-62,936,842),51749=>array(59,-61,936,842),51750=>array(59,-70,936,842),51751=>array(59,-74,936,842),51752=>array(59,-69,936,842),51753=>array(59,-67,936,842),51754=>array(59,-72,936,842),51755=>array(59,-71,936,842),51756=>array(59,-66,936,842),51757=>array(59,-59,936,842),51758=>array(59,-60,936,842),51759=>array(59,-69,936,842),51760=>array(33,-69,907,842),51761=>array(44,-61,907,842),51762=>array(44,-61,907,842),51763=>array(44,-71,931,842),51764=>array(52,-46,907,842),51765=>array(44,-68,912,842),51766=>array(44,-76,907,842),51767=>array(44,-44,921,842),51768=>array(44,-62,917,842),51769=>array(44,-64,907,842),51770=>array(44,-64,908,842),51771=>array(44,-64,908,842),51772=>array(44,-69,923,842),51773=>array(44,-64,908,842),51774=>array(44,-64,908,842),51775=>array(44,-76,907,842),51776=>array(44,-62,907,842),51777=>array(44,-61,907,842),51778=>array(44,-69,922,842),51779=>array(44,-74,929,842),51780=>array(44,-69,927,842),51781=>array(44,-68,911,842),51782=>array(44,-72,929,842),51783=>array(44,-70,936,842),51784=>array(44,-66,908,842),51785=>array(44,-59,916,842),51786=>array(44,-60,928,842),51787=>array(44,-68,908,842),51788=>array(41,-70,907,841),51789=>array(64,-61,907,841),51790=>array(64,-61,907,841),51791=>array(64,-71,931,841),51792=>array(55,-46,907,841),51793=>array(64,-68,912,841),51794=>array(64,-76,907,841),51795=>array(64,-44,921,841),51796=>array(64,-62,917,841),51797=>array(64,-64,907,841),51798=>array(64,-64,908,841),51799=>array(64,-64,908,841),51800=>array(64,-69,923,841),51801=>array(64,-64,908,841),51802=>array(64,-64,908,841),51803=>array(64,-76,906,841),51804=>array(64,-62,907,841),51805=>array(64,-61,907,841),51806=>array(64,-69,922,841),51807=>array(64,-74,929,841),51808=>array(64,-69,927,841),51809=>array(64,-68,911,841),51810=>array(64,-72,929,841),51811=>array(64,-70,936,841),51812=>array(64,-66,908,841),51813=>array(64,-59,916,841),51814=>array(64,-60,928,841),51815=>array(64,-68,908,841),51816=>array(33,-68,907,843),51817=>array(44,-61,907,843),51818=>array(44,-61,907,843),51819=>array(44,-71,931,843),51820=>array(52,-46,907,843),51821=>array(44,-68,912,843),51822=>array(44,-76,907,843),51823=>array(44,-44,921,843),51824=>array(44,-62,917,843),51825=>array(44,-64,907,843),51826=>array(44,-64,908,843),51827=>array(44,-64,908,843),51828=>array(44,-69,923,843),51829=>array(44,-64,908,843),51830=>array(44,-64,908,843),51831=>array(44,-76,907,843),51832=>array(44,-62,907,843),51833=>array(44,-61,907,843),51834=>array(44,-69,922,843),51835=>array(44,-74,929,843),51836=>array(44,-69,927,843),51837=>array(44,-68,911,843),51838=>array(44,-72,929,843),51839=>array(44,-70,936,843),51840=>array(44,-66,908,843),51841=>array(44,-59,916,843),51842=>array(44,-60,928,843),51843=>array(44,-68,908,843),51844=>array(36,-70,907,842),51845=>array(54,-61,908,842),51846=>array(54,-61,908,842),51847=>array(54,-71,931,842),51848=>array(55,-46,907,842),51849=>array(54,-68,912,842),51850=>array(54,-76,908,842),51851=>array(54,-44,921,842),51852=>array(54,-62,917,842),51853=>array(54,-64,908,842),51854=>array(54,-64,908,842),51855=>array(54,-64,908,842),51856=>array(54,-69,923,842),51857=>array(54,-64,908,842),51858=>array(54,-64,908,842),51859=>array(54,-76,908,842),51860=>array(54,-62,908,842),51861=>array(54,-61,908,842),51862=>array(54,-69,922,842),51863=>array(54,-74,929,842),51864=>array(54,-69,927,842),51865=>array(54,-68,911,842),51866=>array(54,-72,929,842),51867=>array(54,-70,936,842),51868=>array(54,-66,908,842),51869=>array(54,-59,916,842),51870=>array(54,-60,928,842),51871=>array(54,-68,908,842),51872=>array(33,-68,907,843),51873=>array(49,-61,907,843),51874=>array(49,-61,907,843),51875=>array(49,-71,931,843),51876=>array(47,-46,907,843),51877=>array(49,-68,912,843),51878=>array(49,-76,907,843),51879=>array(49,-44,921,843),51880=>array(49,-62,917,843),51881=>array(49,-64,907,843),51882=>array(49,-64,908,843),51883=>array(49,-64,908,843),51884=>array(49,-69,923,843),51885=>array(49,-64,908,843),51886=>array(49,-64,908,843),51887=>array(49,-76,907,843),51888=>array(49,-62,907,843),51889=>array(49,-61,907,843),51890=>array(49,-69,922,843),51891=>array(49,-74,929,843),51892=>array(49,-69,927,843),51893=>array(49,-68,911,843),51894=>array(49,-72,929,843),51895=>array(49,-70,936,843),51896=>array(49,-66,908,843),51897=>array(49,-59,916,843),51898=>array(49,-60,928,843),51899=>array(49,-68,908,843),51900=>array(55,22,943,755),51901=>array(79,-61,921,786),51902=>array(79,-61,921,786),51903=>array(79,-71,921,786),51904=>array(79,-46,922,786),51905=>array(79,-68,921,786),51906=>array(79,-74,921,786),51907=>array(79,-44,921,786),51908=>array(79,-62,921,786),51909=>array(79,-64,921,786),51910=>array(79,-64,921,786),51911=>array(79,-63,921,786),51912=>array(79,-68,921,786),51913=>array(79,-64,921,786),51914=>array(79,-63,921,786),51915=>array(79,-74,921,786),51916=>array(79,-62,921,786),51917=>array(79,-61,921,786),51918=>array(79,-69,921,786),51919=>array(79,-74,921,786),51920=>array(79,-69,921,786),51921=>array(79,-68,921,786),51922=>array(79,-72,921,786),51923=>array(79,-70,921,786),51924=>array(79,-66,921,786),51925=>array(79,-59,921,786),51926=>array(79,-60,921,786),51927=>array(79,-68,921,786),51928=>array(50,-69,936,842),51929=>array(65,-59,936,842),51930=>array(65,-61,936,842),51931=>array(65,-71,936,842),51932=>array(72,-45,936,842),51933=>array(65,-69,936,842),51934=>array(65,-76,936,842),51935=>array(65,-44,936,842),51936=>array(65,-62,936,842),51937=>array(65,-64,936,842),51938=>array(65,-64,936,842),51939=>array(65,-64,936,842),51940=>array(65,-70,936,842),51941=>array(65,-64,936,842),51942=>array(65,-64,936,842),51943=>array(65,-76,936,842),51944=>array(65,-62,936,842),51945=>array(65,-61,936,842),51946=>array(65,-70,936,842),51947=>array(65,-74,936,842),51948=>array(65,-69,936,842),51949=>array(65,-67,936,842),51950=>array(65,-72,936,842),51951=>array(65,-71,936,842),51952=>array(65,-66,936,842),51953=>array(65,-59,936,842),51954=>array(65,-60,936,842),51955=>array(65,-69,936,842),51956=>array(50,-69,907,842),51957=>array(71,-61,907,842),51958=>array(71,-61,907,842),51959=>array(71,-71,931,842),51960=>array(66,-46,907,842),51961=>array(71,-68,912,842),51962=>array(71,-76,907,842),51963=>array(71,-44,921,842),51964=>array(71,-62,917,842),51965=>array(71,-64,907,842),51966=>array(71,-64,908,842),51967=>array(71,-64,908,842),51968=>array(71,-69,923,842),51969=>array(71,-64,908,842),51970=>array(71,-64,908,842),51971=>array(71,-76,907,842),51972=>array(71,-62,907,842),51973=>array(71,-61,907,842),51974=>array(71,-69,922,842),51975=>array(71,-74,929,842),51976=>array(71,-69,927,842),51977=>array(71,-68,911,842),51978=>array(71,-72,929,842),51979=>array(71,-70,936,842),51980=>array(71,-66,908,842),51981=>array(71,-59,916,842),51982=>array(71,-60,928,842),51983=>array(71,-68,908,842),51984=>array(66,-69,907,842),51985=>array(65,-61,907,842),51986=>array(65,-61,907,842),51987=>array(65,-71,931,842),51988=>array(65,-46,907,842),51989=>array(65,-68,912,842),51990=>array(65,-76,907,842),51991=>array(65,-44,921,842),51992=>array(65,-62,917,842),51993=>array(65,-64,907,842),51994=>array(65,-64,908,842),51995=>array(65,-64,908,842),51996=>array(65,-69,923,842),51997=>array(65,-64,908,842),51998=>array(65,-64,908,842),51999=>array(65,-76,907,842),52000=>array(65,-62,907,842),52001=>array(65,-61,907,842),52002=>array(65,-69,922,842),52003=>array(65,-74,929,842),52004=>array(65,-69,927,842),52005=>array(65,-68,911,842),52006=>array(65,-72,929,842),52007=>array(65,-70,936,842),52008=>array(65,-66,908,842),52009=>array(65,-59,916,842),52010=>array(65,-60,928,842),52011=>array(65,-68,908,842),52012=>array(62,22,943,756),52013=>array(79,-61,922,786),52014=>array(79,-61,922,786),52015=>array(79,-71,922,786),52016=>array(79,-46,922,786),52017=>array(79,-68,922,786),52018=>array(79,-74,922,786),52019=>array(79,-44,922,786),52020=>array(79,-62,922,786),52021=>array(79,-64,922,786),52022=>array(79,-64,922,786),52023=>array(79,-63,922,786),52024=>array(79,-68,922,786),52025=>array(79,-64,922,786),52026=>array(79,-63,922,786),52027=>array(79,-74,922,786),52028=>array(79,-62,922,786),52029=>array(79,-61,922,786),52030=>array(79,-69,922,786),52031=>array(79,-74,922,786),52032=>array(79,-69,922,786),52033=>array(79,-68,922,786),52034=>array(79,-72,922,786),52035=>array(79,-70,922,786),52036=>array(79,-66,922,786),52037=>array(79,-59,922,786),52038=>array(79,-60,922,786),52039=>array(79,-68,922,786),52040=>array(82,-64,924,811),52041=>array(79,-61,921,811),52042=>array(79,-61,921,811),52043=>array(79,-71,921,811),52044=>array(79,-46,921,811),52045=>array(79,-68,921,811),52046=>array(79,-74,921,811),52047=>array(79,-44,921,811),52048=>array(79,-62,921,811),52049=>array(79,-64,921,811),52050=>array(79,-64,921,811),52051=>array(79,-63,921,811),52052=>array(79,-68,921,811),52053=>array(79,-64,921,811),52054=>array(79,-63,921,811),52055=>array(79,-74,921,811),52056=>array(79,-62,921,811),52057=>array(79,-61,921,811),52058=>array(79,-69,921,811),52059=>array(79,-74,921,811),52060=>array(79,-69,921,811),52061=>array(79,-68,921,811),52062=>array(79,-72,921,811),52063=>array(79,-70,921,811),52064=>array(79,-66,921,811),52065=>array(79,-59,921,811),52066=>array(79,-60,921,811),52067=>array(79,-68,921,811),52068=>array(81,-70,907,841),52069=>array(74,-61,909,841),52070=>array(74,-61,909,841),52071=>array(74,-71,931,841),52072=>array(66,-46,909,842),52073=>array(74,-68,912,841),52074=>array(74,-76,909,841),52075=>array(74,-44,921,841),52076=>array(74,-62,917,841),52077=>array(74,-64,909,841),52078=>array(74,-64,909,841),52079=>array(74,-64,909,841),52080=>array(74,-69,923,841),52081=>array(74,-64,909,841),52082=>array(74,-64,909,841),52083=>array(74,-76,909,841),52084=>array(74,-62,909,841),52085=>array(74,-61,909,841),52086=>array(74,-69,922,841),52087=>array(74,-74,929,841),52088=>array(74,-69,927,841),52089=>array(74,-68,911,841),52090=>array(74,-72,929,841),52091=>array(74,-70,936,841),52092=>array(74,-66,909,841),52093=>array(74,-59,916,841),52094=>array(74,-60,928,841),52095=>array(74,-68,909,841),52096=>array(50,-68,907,843),52097=>array(68,-61,907,843),52098=>array(68,-61,907,843),52099=>array(68,-71,931,843),52100=>array(68,-46,907,843),52101=>array(68,-68,912,843),52102=>array(68,-76,907,843),52103=>array(68,-44,921,843),52104=>array(68,-62,917,843),52105=>array(68,-64,907,843),52106=>array(68,-64,908,843),52107=>array(68,-64,908,843),52108=>array(68,-69,923,843),52109=>array(68,-64,908,843),52110=>array(68,-64,908,843),52111=>array(68,-76,907,843),52112=>array(68,-62,907,843),52113=>array(68,-61,907,843),52114=>array(68,-69,922,843),52115=>array(68,-74,929,843),52116=>array(68,-69,927,843),52117=>array(68,-68,911,843),52118=>array(68,-72,929,843),52119=>array(68,-70,936,843),52120=>array(68,-66,908,843),52121=>array(68,-59,916,843),52122=>array(68,-60,928,843),52123=>array(68,-68,908,843),52124=>array(60,-69,907,842),52125=>array(65,-61,907,842),52126=>array(65,-61,907,842),52127=>array(65,-71,931,842),52128=>array(65,-46,907,842),52129=>array(65,-68,912,842),52130=>array(65,-76,907,842),52131=>array(65,-44,921,842),52132=>array(65,-62,917,842),52133=>array(65,-64,907,842),52134=>array(65,-64,908,842),52135=>array(65,-64,908,842),52136=>array(65,-69,923,842),52137=>array(65,-64,908,842),52138=>array(65,-64,908,842),52139=>array(65,-76,907,842),52140=>array(65,-62,907,842),52141=>array(65,-61,907,842),52142=>array(65,-69,922,842),52143=>array(65,-74,929,842),52144=>array(65,-69,927,842),52145=>array(65,-68,911,842),52146=>array(65,-72,929,842),52147=>array(65,-70,936,842),52148=>array(65,-66,908,842),52149=>array(65,-59,916,842),52150=>array(65,-60,928,842),52151=>array(65,-68,908,842),52152=>array(82,-64,924,811),52153=>array(79,-61,921,811),52154=>array(79,-61,921,811),52155=>array(79,-71,921,811),52156=>array(81,-46,922,811),52157=>array(79,-68,921,811),52158=>array(79,-74,921,811),52159=>array(79,-44,921,811),52160=>array(79,-62,921,811),52161=>array(79,-64,921,811),52162=>array(79,-64,921,811),52163=>array(79,-63,921,811),52164=>array(79,-68,921,811),52165=>array(79,-64,921,811),52166=>array(79,-63,921,811),52167=>array(79,-74,921,811),52168=>array(79,-62,921,811),52169=>array(79,-61,921,811),52170=>array(79,-69,921,811),52171=>array(79,-74,921,811),52172=>array(79,-69,921,811),52173=>array(79,-68,921,811),52174=>array(79,-72,921,811),52175=>array(79,-70,921,811),52176=>array(79,-66,921,811),52177=>array(79,-59,921,811),52178=>array(79,-60,921,811),52179=>array(79,-68,921,811),52180=>array(56,37,944,728),52181=>array(79,-61,922,786),52182=>array(79,-61,922,786),52183=>array(79,-71,922,786),52184=>array(79,-46,921,784),52185=>array(79,-68,922,786),52186=>array(79,-74,922,786),52187=>array(79,-44,922,786),52188=>array(79,-62,922,786),52189=>array(79,-64,922,786),52190=>array(79,-64,922,786),52191=>array(79,-63,922,786),52192=>array(79,-68,922,786),52193=>array(79,-64,922,786),52194=>array(79,-63,922,786),52195=>array(79,-74,922,786),52196=>array(79,-62,922,786),52197=>array(79,-61,922,786),52198=>array(79,-69,922,786),52199=>array(79,-74,922,786),52200=>array(79,-69,922,786),52201=>array(79,-68,922,786),52202=>array(79,-72,922,786),52203=>array(79,-70,922,786),52204=>array(79,-66,922,786),52205=>array(79,-59,922,786),52206=>array(79,-60,922,786),52207=>array(79,-68,922,786),52208=>array(63,-69,907,842),52209=>array(65,-61,907,842),52210=>array(65,-61,907,842),52211=>array(65,-71,931,842),52212=>array(65,-46,907,842),52213=>array(65,-68,912,842),52214=>array(65,-76,907,842),52215=>array(65,-44,921,842),52216=>array(65,-62,917,842),52217=>array(65,-64,907,842),52218=>array(65,-64,908,842),52219=>array(65,-64,908,842),52220=>array(65,-69,923,842),52221=>array(65,-64,908,842),52222=>array(65,-64,908,842),52223=>array(65,-76,907,842),52224=>array(65,-62,907,842),52225=>array(65,-61,907,842),52226=>array(65,-69,922,842),52227=>array(65,-74,929,842),52228=>array(65,-69,927,842),52229=>array(65,-68,911,842),52230=>array(65,-72,929,842),52231=>array(65,-70,936,842),52232=>array(65,-66,908,842),52233=>array(65,-59,916,842),52234=>array(65,-60,928,842),52235=>array(65,-68,908,842),52236=>array(76,-69,907,842),52237=>array(60,-61,907,842),52238=>array(60,-61,907,842),52239=>array(60,-71,931,842),52240=>array(57,-46,907,842),52241=>array(60,-68,912,842),52242=>array(60,-76,907,842),52243=>array(60,-44,921,842),52244=>array(60,-62,917,842),52245=>array(60,-64,907,842),52246=>array(60,-64,908,842),52247=>array(60,-64,908,842),52248=>array(60,-69,923,842),52249=>array(60,-64,908,842),52250=>array(60,-64,908,842),52251=>array(60,-76,907,842),52252=>array(60,-62,907,842),52253=>array(60,-61,907,842),52254=>array(60,-69,922,842),52255=>array(60,-74,929,842),52256=>array(60,-69,927,842),52257=>array(60,-68,911,842),52258=>array(60,-72,929,842),52259=>array(60,-70,936,842),52260=>array(60,-66,908,842),52261=>array(60,-59,916,842),52262=>array(60,-60,928,842),52263=>array(60,-68,908,842),52264=>array(86,-69,935,842),52265=>array(71,-59,936,842),52266=>array(71,-61,936,842),52267=>array(71,-71,936,842),52268=>array(64,-45,936,842),52269=>array(71,-69,936,842),52270=>array(71,-76,936,842),52271=>array(71,-44,936,842),52272=>array(71,-62,936,842),52273=>array(71,-64,936,842),52274=>array(71,-64,936,842),52275=>array(71,-64,936,842),52276=>array(71,-70,936,842),52277=>array(71,-64,936,842),52278=>array(71,-64,936,842),52279=>array(71,-76,936,842),52280=>array(71,-62,936,842),52281=>array(71,-61,936,842),52282=>array(71,-70,936,842),52283=>array(71,-74,936,842),52284=>array(71,-69,936,842),52285=>array(71,-67,936,842),52286=>array(71,-72,936,842),52287=>array(71,-71,936,842),52288=>array(71,-66,936,842),52289=>array(71,-59,936,842),52290=>array(71,-60,936,842),52291=>array(71,-69,936,842),52292=>array(81,-69,907,842),52293=>array(69,-61,907,842),52294=>array(69,-61,907,842),52295=>array(69,-71,931,842),52296=>array(64,-46,907,842),52297=>array(69,-68,912,842),52298=>array(69,-76,907,842),52299=>array(69,-44,921,842),52300=>array(69,-62,917,842),52301=>array(69,-64,907,842),52302=>array(69,-64,908,842),52303=>array(69,-64,908,842),52304=>array(69,-69,923,842),52305=>array(69,-64,908,842),52306=>array(69,-64,908,842),52307=>array(69,-76,907,842),52308=>array(69,-62,907,842),52309=>array(69,-61,907,842),52310=>array(69,-69,922,842),52311=>array(69,-74,929,842),52312=>array(69,-69,927,842),52313=>array(69,-68,911,842),52314=>array(69,-72,929,842),52315=>array(69,-70,936,842),52316=>array(69,-66,908,842),52317=>array(69,-59,916,842),52318=>array(69,-60,928,842),52319=>array(69,-68,908,842),52320=>array(86,-68,935,843),52321=>array(74,-59,936,842),52322=>array(74,-61,936,842),52323=>array(74,-71,936,842),52324=>array(64,-45,936,842),52325=>array(74,-69,936,842),52326=>array(74,-76,936,842),52327=>array(74,-44,936,842),52328=>array(74,-62,936,842),52329=>array(74,-64,936,842),52330=>array(74,-64,936,842),52331=>array(74,-64,936,842),52332=>array(74,-70,936,842),52333=>array(74,-64,936,842),52334=>array(74,-64,936,842),52335=>array(74,-76,936,842),52336=>array(74,-62,936,842),52337=>array(74,-61,936,842),52338=>array(74,-70,936,842),52339=>array(74,-74,936,842),52340=>array(74,-69,936,842),52341=>array(74,-67,936,842),52342=>array(74,-72,936,842),52343=>array(74,-71,936,842),52344=>array(74,-66,936,842),52345=>array(74,-59,936,842),52346=>array(74,-60,936,842),52347=>array(74,-69,936,842),52348=>array(81,-69,907,842),52349=>array(71,-61,907,842),52350=>array(71,-61,907,842),52351=>array(71,-71,931,842),52352=>array(64,-46,907,842),52353=>array(71,-68,912,842),52354=>array(71,-76,907,842),52355=>array(71,-44,921,842),52356=>array(71,-62,917,842),52357=>array(71,-64,907,842),52358=>array(71,-64,908,842),52359=>array(71,-64,908,842),52360=>array(71,-69,923,842),52361=>array(71,-64,908,842),52362=>array(71,-64,908,842),52363=>array(71,-76,907,842),52364=>array(71,-62,907,842),52365=>array(71,-61,907,842),52366=>array(71,-69,922,842),52367=>array(71,-74,929,842),52368=>array(71,-69,927,842),52369=>array(71,-68,911,842),52370=>array(71,-72,929,842),52371=>array(71,-70,936,842),52372=>array(71,-66,908,842),52373=>array(71,-59,916,842),52374=>array(71,-60,928,842),52375=>array(71,-68,908,842),52376=>array(86,-70,907,841),52377=>array(68,-61,907,842),52378=>array(68,-61,907,842),52379=>array(68,-71,931,842),52380=>array(66,-46,907,841),52381=>array(68,-68,912,842),52382=>array(68,-76,907,842),52383=>array(68,-44,921,842),52384=>array(68,-62,917,842),52385=>array(68,-64,907,842),52386=>array(68,-64,908,842),52387=>array(68,-64,908,842),52388=>array(68,-69,923,842),52389=>array(68,-64,908,842),52390=>array(68,-64,908,842),52391=>array(68,-76,906,842),52392=>array(68,-62,907,842),52393=>array(68,-61,907,842),52394=>array(68,-69,922,842),52395=>array(68,-74,929,842),52396=>array(68,-69,927,842),52397=>array(68,-68,911,842),52398=>array(68,-72,929,842),52399=>array(68,-70,936,842),52400=>array(68,-66,908,842),52401=>array(68,-59,916,842),52402=>array(68,-60,928,842),52403=>array(68,-68,908,842),52404=>array(71,-68,907,843),52405=>array(65,-61,907,843),52406=>array(65,-61,907,843),52407=>array(65,-71,931,843),52408=>array(66,-46,907,843),52409=>array(65,-68,912,843),52410=>array(65,-76,907,843),52411=>array(65,-44,921,843),52412=>array(65,-62,917,843),52413=>array(65,-64,907,843),52414=>array(65,-64,908,843),52415=>array(65,-64,908,843),52416=>array(65,-69,923,843),52417=>array(65,-64,908,843),52418=>array(65,-64,908,843),52419=>array(65,-76,907,843),52420=>array(65,-62,907,843),52421=>array(65,-61,907,843),52422=>array(65,-69,922,843),52423=>array(65,-74,929,843),52424=>array(65,-69,927,843),52425=>array(65,-68,911,843),52426=>array(65,-72,929,843),52427=>array(65,-70,936,843),52428=>array(65,-66,908,843),52429=>array(65,-59,916,843),52430=>array(65,-60,928,843),52431=>array(65,-68,908,843),52432=>array(86,-70,907,842),52433=>array(65,-61,907,842),52434=>array(65,-61,907,842),52435=>array(65,-71,931,842),52436=>array(62,-46,907,842),52437=>array(65,-68,912,842),52438=>array(65,-76,907,842),52439=>array(65,-44,921,842),52440=>array(65,-62,917,842),52441=>array(65,-64,907,842),52442=>array(65,-64,908,842),52443=>array(65,-64,908,842),52444=>array(65,-69,923,842),52445=>array(65,-64,908,842),52446=>array(65,-64,908,842),52447=>array(65,-76,907,842),52448=>array(65,-62,907,842),52449=>array(65,-61,907,842),52450=>array(65,-69,922,842),52451=>array(65,-74,929,842),52452=>array(65,-69,927,842),52453=>array(65,-68,911,842),52454=>array(65,-72,929,842),52455=>array(65,-70,936,842),52456=>array(65,-66,908,842),52457=>array(65,-59,916,842),52458=>array(65,-60,928,842),52459=>array(65,-68,908,842),52460=>array(71,-68,907,843),52461=>array(65,-61,907,843),52462=>array(65,-61,907,843),52463=>array(65,-71,931,843),52464=>array(65,-46,907,843),52465=>array(65,-68,912,843),52466=>array(65,-76,907,843),52467=>array(65,-44,921,843),52468=>array(65,-62,917,843),52469=>array(65,-64,907,843),52470=>array(65,-64,908,843),52471=>array(65,-64,908,843),52472=>array(65,-69,923,843),52473=>array(65,-64,908,843),52474=>array(65,-64,908,843),52475=>array(65,-76,907,843),52476=>array(65,-62,907,843),52477=>array(65,-61,907,843),52478=>array(65,-69,922,843),52479=>array(65,-74,929,843),52480=>array(65,-69,927,843),52481=>array(65,-68,911,843),52482=>array(65,-72,929,843),52483=>array(65,-70,936,843),52484=>array(65,-66,908,843),52485=>array(65,-59,916,843),52486=>array(65,-60,928,843),52487=>array(65,-68,908,843),52488=>array(62,-3,943,777),52489=>array(79,-61,921,802),52490=>array(79,-61,921,802),52491=>array(79,-71,921,802),52492=>array(79,-46,921,792),52493=>array(79,-68,921,802),52494=>array(79,-74,921,802),52495=>array(79,-44,921,802),52496=>array(79,-62,921,802),52497=>array(79,-64,921,802),52498=>array(79,-64,921,802),52499=>array(79,-63,921,802),52500=>array(79,-68,921,802),52501=>array(79,-64,921,802),52502=>array(79,-63,921,802),52503=>array(79,-74,921,802),52504=>array(79,-62,921,802),52505=>array(79,-61,921,802),52506=>array(79,-69,921,802),52507=>array(79,-74,921,802),52508=>array(79,-69,921,802),52509=>array(79,-68,921,802),52510=>array(79,-72,921,802),52511=>array(79,-70,921,802),52512=>array(79,-66,921,802),52513=>array(79,-59,921,802),52514=>array(79,-60,921,802),52515=>array(79,-68,921,802),52516=>array(64,-69,936,842),52517=>array(77,-59,936,842),52518=>array(77,-61,936,842),52519=>array(77,-71,936,842),52520=>array(72,-45,936,842),52521=>array(77,-69,936,842),52522=>array(77,-76,936,842),52523=>array(77,-44,936,842),52524=>array(77,-62,936,842),52525=>array(77,-64,936,842),52526=>array(77,-64,936,842),52527=>array(77,-64,936,842),52528=>array(77,-70,936,842),52529=>array(77,-64,936,842),52530=>array(77,-64,936,842),52531=>array(77,-76,936,842),52532=>array(77,-62,936,842),52533=>array(77,-61,936,842),52534=>array(77,-70,936,842),52535=>array(77,-74,936,842),52536=>array(77,-69,936,842),52537=>array(77,-67,936,842),52538=>array(77,-72,936,842),52539=>array(77,-71,936,842),52540=>array(77,-66,936,842),52541=>array(77,-59,936,842),52542=>array(77,-60,936,842),52543=>array(77,-69,936,842),52544=>array(57,-69,907,842),52545=>array(72,-61,907,842),52546=>array(72,-61,907,842),52547=>array(72,-71,931,842),52548=>array(72,-46,907,842),52549=>array(72,-68,912,842),52550=>array(72,-76,907,842),52551=>array(72,-44,921,842),52552=>array(72,-62,917,842),52553=>array(72,-64,907,842),52554=>array(72,-64,908,842),52555=>array(72,-64,908,842),52556=>array(72,-69,923,842),52557=>array(72,-64,908,842),52558=>array(72,-64,908,842),52559=>array(72,-76,907,842),52560=>array(72,-62,907,842),52561=>array(72,-61,907,842),52562=>array(72,-69,922,842),52563=>array(72,-74,929,842),52564=>array(72,-69,927,842),52565=>array(72,-68,911,842),52566=>array(72,-72,929,842),52567=>array(72,-70,936,842),52568=>array(72,-66,908,842),52569=>array(72,-59,916,842),52570=>array(72,-60,928,842),52571=>array(72,-68,908,842),52572=>array(67,-69,907,842),52573=>array(65,-61,907,842),52574=>array(65,-61,907,842),52575=>array(65,-71,931,842),52576=>array(65,-46,907,842),52577=>array(65,-68,912,842),52578=>array(65,-76,907,842),52579=>array(65,-44,921,842),52580=>array(65,-62,917,842),52581=>array(65,-64,907,842),52582=>array(65,-64,908,842),52583=>array(65,-64,908,842),52584=>array(65,-69,923,842),52585=>array(65,-64,908,842),52586=>array(65,-64,908,842),52587=>array(65,-76,907,842),52588=>array(65,-62,907,842),52589=>array(65,-61,907,842),52590=>array(65,-69,922,842),52591=>array(65,-74,929,842),52592=>array(65,-69,927,842),52593=>array(65,-68,911,842),52594=>array(65,-72,929,842),52595=>array(65,-70,936,842),52596=>array(65,-66,908,842),52597=>array(65,-59,916,842),52598=>array(65,-60,928,842),52599=>array(65,-68,908,842),52600=>array(62,-3,938,777),52601=>array(79,-61,922,802),52602=>array(79,-61,922,802),52603=>array(79,-71,922,802),52604=>array(79,-46,922,792),52605=>array(79,-68,922,802),52606=>array(79,-74,922,802),52607=>array(79,-44,922,802),52608=>array(79,-62,922,802),52609=>array(79,-64,922,802),52610=>array(79,-64,922,802),52611=>array(79,-63,922,802),52612=>array(79,-68,922,802),52613=>array(79,-64,922,802),52614=>array(79,-63,922,802),52615=>array(79,-74,922,802),52616=>array(79,-62,922,802),52617=>array(79,-61,922,802),52618=>array(79,-69,922,802),52619=>array(79,-74,922,802),52620=>array(79,-69,922,802),52621=>array(79,-68,922,802),52622=>array(79,-72,922,802),52623=>array(79,-70,922,802),52624=>array(79,-66,922,802),52625=>array(79,-59,922,802),52626=>array(79,-60,922,802),52627=>array(79,-68,922,802),52628=>array(79,-64,921,820),52629=>array(79,-61,921,822),52630=>array(79,-61,921,822),52631=>array(79,-71,921,822),52632=>array(79,-46,921,820),52633=>array(79,-68,921,822),52634=>array(79,-74,921,822),52635=>array(79,-44,921,822),52636=>array(79,-62,921,822),52637=>array(79,-64,921,822),52638=>array(79,-64,921,822),52639=>array(79,-63,921,822),52640=>array(79,-68,921,822),52641=>array(79,-64,921,822),52642=>array(79,-63,921,822),52643=>array(79,-74,921,822),52644=>array(79,-62,921,822),52645=>array(79,-61,921,822),52646=>array(79,-69,921,822),52647=>array(79,-74,921,822),52648=>array(79,-69,921,822),52649=>array(79,-68,921,822),52650=>array(79,-72,921,822),52651=>array(79,-70,921,822),52652=>array(79,-66,921,822),52653=>array(79,-59,921,822),52654=>array(79,-60,921,822),52655=>array(79,-68,921,822),52656=>array(70,-70,907,841),52657=>array(75,-61,910,841),52658=>array(75,-61,910,841),52659=>array(75,-71,931,841),52660=>array(76,-46,910,842),52661=>array(75,-68,912,841),52662=>array(75,-76,910,841),52663=>array(75,-44,921,841),52664=>array(75,-62,917,841),52665=>array(75,-64,910,841),52666=>array(75,-64,910,841),52667=>array(75,-64,910,841),52668=>array(75,-69,923,841),52669=>array(75,-64,910,841),52670=>array(75,-64,910,841),52671=>array(75,-76,910,841),52672=>array(75,-62,910,841),52673=>array(75,-61,910,841),52674=>array(75,-69,922,841),52675=>array(75,-74,929,841),52676=>array(75,-69,927,841),52677=>array(75,-68,911,841),52678=>array(75,-72,929,841),52679=>array(75,-70,936,841),52680=>array(75,-66,910,841),52681=>array(75,-59,916,841),52682=>array(75,-60,928,841),52683=>array(75,-68,910,841),52684=>array(63,-68,907,843),52685=>array(70,-61,907,843),52686=>array(70,-61,907,843),52687=>array(70,-71,931,843),52688=>array(76,-46,907,843),52689=>array(70,-68,912,843),52690=>array(70,-76,907,843),52691=>array(70,-44,921,843),52692=>array(70,-62,917,843),52693=>array(70,-64,907,843),52694=>array(70,-64,908,843),52695=>array(70,-64,908,843),52696=>array(70,-69,923,843),52697=>array(70,-64,908,843),52698=>array(70,-64,908,843),52699=>array(70,-76,907,843),52700=>array(70,-62,907,843),52701=>array(70,-61,907,843),52702=>array(70,-69,922,843),52703=>array(70,-74,929,843),52704=>array(70,-69,927,843),52705=>array(70,-68,911,843),52706=>array(70,-72,929,843),52707=>array(70,-70,936,843),52708=>array(70,-66,908,843),52709=>array(70,-59,916,843),52710=>array(70,-60,928,843),52711=>array(70,-68,908,843),52712=>array(70,-69,907,842),52713=>array(65,-61,907,842),52714=>array(65,-61,907,842),52715=>array(65,-71,931,842),52716=>array(66,-46,907,842),52717=>array(65,-68,912,842),52718=>array(65,-76,907,842),52719=>array(65,-44,921,842),52720=>array(65,-62,917,842),52721=>array(65,-64,907,842),52722=>array(65,-64,908,842),52723=>array(65,-64,908,842),52724=>array(65,-69,923,842),52725=>array(65,-64,908,842),52726=>array(65,-64,908,842),52727=>array(65,-76,907,842),52728=>array(65,-62,907,842),52729=>array(65,-61,907,842),52730=>array(65,-69,922,842),52731=>array(65,-74,929,842),52732=>array(65,-69,927,842),52733=>array(65,-68,911,842),52734=>array(65,-72,929,842),52735=>array(65,-70,936,842),52736=>array(65,-66,908,842),52737=>array(65,-59,916,842),52738=>array(65,-60,928,842),52739=>array(65,-68,908,842),52740=>array(87,-54,928,820),52741=>array(79,-61,921,822),52742=>array(79,-61,921,822),52743=>array(79,-71,921,822),52744=>array(81,-46,922,820),52745=>array(79,-68,921,822),52746=>array(79,-74,921,822),52747=>array(79,-44,921,822),52748=>array(79,-62,921,822),52749=>array(79,-64,921,822),52750=>array(79,-64,921,822),52751=>array(79,-63,921,822),52752=>array(79,-68,921,822),52753=>array(79,-64,921,822),52754=>array(79,-63,921,822),52755=>array(79,-74,921,822),52756=>array(79,-62,921,822),52757=>array(79,-61,921,822),52758=>array(79,-69,921,822),52759=>array(79,-74,921,822),52760=>array(79,-69,921,822),52761=>array(79,-68,921,822),52762=>array(79,-72,921,822),52763=>array(79,-70,921,822),52764=>array(79,-66,921,822),52765=>array(79,-59,921,822),52766=>array(79,-60,921,822),52767=>array(79,-68,921,822),52768=>array(57,47,943,752),52769=>array(79,-61,922,802),52770=>array(79,-61,922,802),52771=>array(79,-71,922,802),52772=>array(79,-46,922,792),52773=>array(79,-68,922,802),52774=>array(79,-74,922,802),52775=>array(79,-44,922,802),52776=>array(79,-62,922,802),52777=>array(79,-64,922,802),52778=>array(79,-64,922,802),52779=>array(79,-63,922,802),52780=>array(79,-68,922,802),52781=>array(79,-64,922,802),52782=>array(79,-63,922,802),52783=>array(79,-74,922,802),52784=>array(79,-62,922,802),52785=>array(79,-61,922,802),52786=>array(79,-69,922,802),52787=>array(79,-74,922,802),52788=>array(79,-69,922,802),52789=>array(79,-68,922,802),52790=>array(79,-72,922,802),52791=>array(79,-70,922,802),52792=>array(79,-66,922,802),52793=>array(79,-59,922,802),52794=>array(79,-60,922,802),52795=>array(79,-68,922,802),52796=>array(70,-69,907,842),52797=>array(65,-61,907,842),52798=>array(65,-61,907,842),52799=>array(65,-71,931,842),52800=>array(65,-46,907,842),52801=>array(65,-68,912,842),52802=>array(65,-76,907,842),52803=>array(65,-44,921,842),52804=>array(65,-62,917,842),52805=>array(65,-64,907,842),52806=>array(65,-64,908,842),52807=>array(65,-64,908,842),52808=>array(65,-69,923,842),52809=>array(65,-64,908,842),52810=>array(65,-64,908,842),52811=>array(65,-76,907,842),52812=>array(65,-62,907,842),52813=>array(65,-61,907,842),52814=>array(65,-69,922,842),52815=>array(65,-74,929,842),52816=>array(65,-69,927,842),52817=>array(65,-68,911,842),52818=>array(65,-72,929,842),52819=>array(65,-70,936,842),52820=>array(65,-66,908,842),52821=>array(65,-59,916,842),52822=>array(65,-60,928,842),52823=>array(65,-68,908,842),52824=>array(115,-69,907,842),52825=>array(95,-61,907,842),52826=>array(95,-61,907,842),52827=>array(95,-71,931,842),52828=>array(99,-46,907,842),52829=>array(95,-68,912,842),52830=>array(95,-76,907,842),52831=>array(95,-44,921,842),52832=>array(95,-62,917,842),52833=>array(95,-64,907,842),52834=>array(95,-64,908,842),52835=>array(95,-64,908,842),52836=>array(95,-69,923,842),52837=>array(95,-64,908,842),52838=>array(95,-64,908,842),52839=>array(95,-76,907,842),52840=>array(95,-62,907,842),52841=>array(95,-61,907,842),52842=>array(95,-69,922,842),52843=>array(95,-74,929,842),52844=>array(95,-69,927,842),52845=>array(95,-68,911,842),52846=>array(95,-72,929,842),52847=>array(95,-70,936,842),52848=>array(95,-66,908,842),52849=>array(95,-59,916,842),52850=>array(95,-60,928,842),52851=>array(95,-68,908,842),52852=>array(84,-69,936,842),52853=>array(66,-59,936,842),52854=>array(66,-61,936,842),52855=>array(66,-71,936,842),52856=>array(69,-45,936,842),52857=>array(66,-69,936,842),52858=>array(66,-76,936,842),52859=>array(66,-44,936,842),52860=>array(66,-62,936,842),52861=>array(66,-64,936,842),52862=>array(66,-64,936,842),52863=>array(66,-64,936,842),52864=>array(66,-70,936,842),52865=>array(66,-64,936,842),52866=>array(66,-64,936,842),52867=>array(66,-76,936,842),52868=>array(66,-62,936,842),52869=>array(66,-61,936,842),52870=>array(66,-70,936,842),52871=>array(66,-74,936,842),52872=>array(66,-69,936,842),52873=>array(66,-67,936,842),52874=>array(66,-72,936,842),52875=>array(66,-71,936,842),52876=>array(66,-66,936,842),52877=>array(66,-59,936,842),52878=>array(66,-60,936,842),52879=>array(66,-69,936,842),52880=>array(79,-69,907,842),52881=>array(66,-61,907,842),52882=>array(66,-61,907,842),52883=>array(66,-71,931,842),52884=>array(69,-46,907,842),52885=>array(66,-68,912,842),52886=>array(66,-76,907,842),52887=>array(66,-44,921,842),52888=>array(66,-62,917,842),52889=>array(66,-64,907,842),52890=>array(66,-64,908,842),52891=>array(66,-64,908,842),52892=>array(66,-69,923,842),52893=>array(66,-64,908,842),52894=>array(66,-64,908,842),52895=>array(66,-76,907,842),52896=>array(66,-62,907,842),52897=>array(66,-61,907,842),52898=>array(66,-69,922,842),52899=>array(66,-74,929,842),52900=>array(66,-69,927,842),52901=>array(66,-68,911,842),52902=>array(66,-72,929,842),52903=>array(66,-70,936,842),52904=>array(66,-66,908,842),52905=>array(66,-59,916,842),52906=>array(66,-60,928,842),52907=>array(66,-68,908,842),52908=>array(74,-68,935,843),52909=>array(66,-59,936,842),52910=>array(66,-61,936,842),52911=>array(66,-71,936,842),52912=>array(69,-45,936,842),52913=>array(66,-69,936,842),52914=>array(66,-76,936,842),52915=>array(66,-44,936,842),52916=>array(66,-62,936,842),52917=>array(66,-64,936,842),52918=>array(66,-64,936,842),52919=>array(66,-64,936,842),52920=>array(66,-70,936,842),52921=>array(66,-64,936,842),52922=>array(66,-64,936,842),52923=>array(66,-76,936,842),52924=>array(66,-62,936,842),52925=>array(66,-61,936,842),52926=>array(66,-70,936,842),52927=>array(66,-74,936,842),52928=>array(66,-69,936,842),52929=>array(66,-67,936,842),52930=>array(66,-72,936,842),52931=>array(66,-71,936,842),52932=>array(66,-66,936,842),52933=>array(66,-59,936,842),52934=>array(66,-60,936,842),52935=>array(66,-69,936,842),52936=>array(79,-69,907,842),52937=>array(66,-61,907,842),52938=>array(66,-61,907,842),52939=>array(66,-71,931,842),52940=>array(69,-46,907,842),52941=>array(66,-68,912,842),52942=>array(66,-76,907,842),52943=>array(66,-44,921,842),52944=>array(66,-62,917,842),52945=>array(66,-64,907,842),52946=>array(66,-64,908,842),52947=>array(66,-64,908,842),52948=>array(66,-69,923,842),52949=>array(66,-64,908,842),52950=>array(66,-64,908,842),52951=>array(66,-76,907,842),52952=>array(66,-62,907,842),52953=>array(66,-61,907,842),52954=>array(66,-69,922,842),52955=>array(66,-74,929,842),52956=>array(66,-69,927,842),52957=>array(66,-68,911,842),52958=>array(66,-72,929,842),52959=>array(66,-70,936,842),52960=>array(66,-66,908,842),52961=>array(66,-59,916,842),52962=>array(66,-60,928,842),52963=>array(66,-68,908,842),52964=>array(104,-70,907,841),52965=>array(66,-61,907,841),52966=>array(66,-61,907,841),52967=>array(66,-71,931,841),52968=>array(69,-46,907,841),52969=>array(66,-68,912,841),52970=>array(66,-76,907,841),52971=>array(66,-44,921,841),52972=>array(66,-62,917,841),52973=>array(66,-64,907,841),52974=>array(66,-64,908,841),52975=>array(66,-64,908,841),52976=>array(66,-69,923,841),52977=>array(66,-64,908,841),52978=>array(66,-64,908,841),52979=>array(66,-76,906,841),52980=>array(66,-62,907,841),52981=>array(66,-61,907,841),52982=>array(66,-69,922,841),52983=>array(66,-74,929,841),52984=>array(66,-69,927,841),52985=>array(66,-68,911,841),52986=>array(66,-72,929,841),52987=>array(66,-70,936,841),52988=>array(66,-66,908,841),52989=>array(66,-59,916,841),52990=>array(66,-60,928,841),52991=>array(66,-68,908,841),52992=>array(97,-68,907,843),52993=>array(66,-61,907,843),52994=>array(66,-61,907,843),52995=>array(66,-71,931,843),52996=>array(69,-46,907,843),52997=>array(66,-68,912,843),52998=>array(66,-76,907,843),52999=>array(66,-44,921,843),53000=>array(66,-62,917,843),53001=>array(66,-64,907,843),53002=>array(66,-64,908,843),53003=>array(66,-64,908,843),53004=>array(66,-69,923,843),53005=>array(66,-64,908,843),53006=>array(66,-64,908,843),53007=>array(66,-76,907,843),53008=>array(66,-62,907,843),53009=>array(66,-61,907,843),53010=>array(66,-69,922,843),53011=>array(66,-74,929,843),53012=>array(66,-69,927,843),53013=>array(66,-68,911,843),53014=>array(66,-72,929,843),53015=>array(66,-70,936,843),53016=>array(66,-66,908,843),53017=>array(66,-59,916,843),53018=>array(66,-60,928,843),53019=>array(66,-68,908,843),53020=>array(104,-70,907,842),53021=>array(66,-61,908,842),53022=>array(66,-61,908,842),53023=>array(66,-71,931,842),53024=>array(69,-46,907,842),53025=>array(66,-68,912,842),53026=>array(66,-76,908,842),53027=>array(66,-44,921,842),53028=>array(66,-62,917,842),53029=>array(66,-64,908,842),53030=>array(66,-64,908,842),53031=>array(66,-64,908,842),53032=>array(66,-69,923,842),53033=>array(66,-64,908,842),53034=>array(66,-64,908,842),53035=>array(66,-76,908,842),53036=>array(66,-62,908,842),53037=>array(66,-61,908,842),53038=>array(66,-69,922,842),53039=>array(66,-74,929,842),53040=>array(66,-69,927,842),53041=>array(66,-68,911,842),53042=>array(66,-72,929,842),53043=>array(66,-70,936,842),53044=>array(66,-66,908,842),53045=>array(66,-59,916,842),53046=>array(66,-60,928,842),53047=>array(66,-68,908,842),53048=>array(97,-68,907,843),53049=>array(66,-61,907,843),53050=>array(66,-61,907,843),53051=>array(66,-71,931,843),53052=>array(64,-46,907,843),53053=>array(66,-68,912,843),53054=>array(66,-76,907,843),53055=>array(66,-44,921,843),53056=>array(66,-62,917,843),53057=>array(66,-64,907,843),53058=>array(66,-64,908,843),53059=>array(66,-64,908,843),53060=>array(66,-69,923,843),53061=>array(66,-64,908,843),53062=>array(66,-64,908,843),53063=>array(66,-76,907,843),53064=>array(66,-62,907,843),53065=>array(66,-61,907,843),53066=>array(66,-69,922,843),53067=>array(66,-74,929,843),53068=>array(66,-69,927,843),53069=>array(66,-68,911,843),53070=>array(66,-72,929,843),53071=>array(66,-70,936,843),53072=>array(66,-66,908,843),53073=>array(66,-59,916,843),53074=>array(66,-60,928,843),53075=>array(66,-68,908,843),53076=>array(62,22,943,725),53077=>array(79,-61,921,775),53078=>array(79,-61,921,775),53079=>array(79,-71,921,775),53080=>array(79,-46,922,775),53081=>array(79,-68,921,775),53082=>array(79,-74,921,775),53083=>array(79,-44,921,775),53084=>array(79,-62,921,775),53085=>array(79,-64,921,775),53086=>array(79,-64,921,775),53087=>array(79,-63,921,775),53088=>array(79,-68,921,775),53089=>array(79,-64,921,775),53090=>array(79,-63,921,775),53091=>array(79,-74,921,775),53092=>array(79,-62,921,775),53093=>array(79,-61,921,775),53094=>array(79,-69,921,775),53095=>array(79,-74,921,775),53096=>array(79,-69,921,775),53097=>array(79,-68,921,775),53098=>array(79,-72,921,775),53099=>array(79,-70,921,775),53100=>array(79,-66,921,775),53101=>array(79,-59,921,775),53102=>array(79,-60,921,775),53103=>array(79,-68,921,775),53104=>array(68,-69,936,842),53105=>array(65,-59,936,842),53106=>array(65,-61,936,842),53107=>array(65,-71,936,842),53108=>array(72,-45,936,842),53109=>array(65,-69,936,842),53110=>array(65,-76,936,842),53111=>array(65,-44,936,842),53112=>array(65,-62,936,842),53113=>array(65,-64,936,842),53114=>array(65,-64,936,842),53115=>array(65,-64,936,842),53116=>array(65,-70,936,842),53117=>array(65,-64,936,842),53118=>array(65,-64,936,842),53119=>array(65,-76,936,842),53120=>array(65,-62,936,842),53121=>array(65,-61,936,842),53122=>array(65,-70,936,842),53123=>array(65,-74,936,842),53124=>array(65,-69,936,842),53125=>array(65,-67,936,842),53126=>array(65,-72,936,842),53127=>array(65,-71,936,842),53128=>array(65,-66,936,842),53129=>array(65,-59,936,842),53130=>array(65,-60,936,842),53131=>array(65,-69,936,842),53132=>array(68,-69,907,842),53133=>array(77,-61,907,842),53134=>array(77,-61,907,842),53135=>array(77,-71,931,842),53136=>array(72,-46,907,842),53137=>array(77,-68,912,842),53138=>array(77,-76,907,842),53139=>array(77,-44,921,842),53140=>array(77,-62,917,842),53141=>array(77,-64,907,842),53142=>array(77,-64,908,842),53143=>array(77,-64,908,842),53144=>array(77,-69,923,842),53145=>array(77,-64,908,842),53146=>array(77,-64,908,842),53147=>array(77,-76,907,842),53148=>array(77,-62,907,842),53149=>array(77,-61,907,842),53150=>array(77,-69,922,842),53151=>array(77,-74,929,842),53152=>array(77,-69,927,842),53153=>array(77,-68,911,842),53154=>array(77,-72,929,842),53155=>array(77,-70,936,842),53156=>array(77,-66,908,842),53157=>array(77,-59,916,842),53158=>array(77,-60,928,842),53159=>array(77,-68,908,842),53160=>array(92,-69,907,842),53161=>array(65,-61,907,842),53162=>array(65,-61,907,842),53163=>array(65,-71,931,842),53164=>array(65,-46,907,842),53165=>array(65,-68,912,842),53166=>array(65,-76,907,842),53167=>array(65,-44,921,842),53168=>array(65,-62,917,842),53169=>array(65,-64,907,842),53170=>array(65,-64,908,842),53171=>array(65,-64,908,842),53172=>array(65,-69,923,842),53173=>array(65,-64,908,842),53174=>array(65,-64,908,842),53175=>array(65,-76,907,842),53176=>array(65,-62,907,842),53177=>array(65,-61,907,842),53178=>array(65,-69,922,842),53179=>array(65,-74,929,842),53180=>array(65,-69,927,842),53181=>array(65,-68,911,842),53182=>array(65,-72,929,842),53183=>array(65,-70,936,842),53184=>array(65,-66,908,842),53185=>array(65,-59,916,842),53186=>array(65,-60,928,842),53187=>array(65,-68,908,842),53188=>array(62,22,943,725),53189=>array(79,-61,922,775),53190=>array(79,-61,922,775),53191=>array(79,-71,922,775),53192=>array(79,-46,922,775),53193=>array(79,-68,922,775),53194=>array(79,-74,922,775),53195=>array(79,-44,922,775),53196=>array(79,-62,922,775),53197=>array(79,-64,922,775),53198=>array(79,-64,922,775),53199=>array(79,-63,922,775),53200=>array(79,-68,922,775),53201=>array(79,-64,922,775),53202=>array(79,-63,922,775),53203=>array(79,-74,922,775),53204=>array(79,-62,922,775),53205=>array(79,-61,922,775),53206=>array(79,-69,922,775),53207=>array(79,-74,922,775),53208=>array(79,-69,922,775),53209=>array(79,-68,922,775),53210=>array(79,-72,922,775),53211=>array(79,-70,922,775),53212=>array(79,-66,922,775),53213=>array(79,-59,922,775),53214=>array(79,-60,922,775),53215=>array(79,-68,922,775),53216=>array(87,-64,928,795),53217=>array(79,-61,921,790),53218=>array(79,-61,921,790),53219=>array(79,-71,921,790),53220=>array(79,-46,921,785),53221=>array(79,-68,921,790),53222=>array(79,-74,921,790),53223=>array(79,-44,921,790),53224=>array(79,-62,921,790),53225=>array(79,-64,921,790),53226=>array(79,-64,921,790),53227=>array(79,-63,921,790),53228=>array(79,-68,921,790),53229=>array(79,-64,921,790),53230=>array(79,-63,921,790),53231=>array(79,-74,921,790),53232=>array(79,-62,921,790),53233=>array(79,-61,921,790),53234=>array(79,-69,921,790),53235=>array(79,-74,921,790),53236=>array(79,-69,921,790),53237=>array(79,-68,921,790),53238=>array(79,-72,921,790),53239=>array(79,-70,921,790),53240=>array(79,-66,921,790),53241=>array(79,-59,921,790),53242=>array(79,-60,921,790),53243=>array(79,-68,921,790),53244=>array(70,-70,907,841),53245=>array(75,-61,908,844),53246=>array(75,-61,908,844),53247=>array(75,-71,931,844),53248=>array(76,-46,907,841),53249=>array(75,-68,912,844),53250=>array(75,-76,908,844),53251=>array(75,-44,921,844),53252=>array(75,-62,917,844),53253=>array(75,-64,908,844),53254=>array(75,-64,908,844),53255=>array(75,-64,908,844),53256=>array(75,-69,923,844),53257=>array(75,-64,908,844),53258=>array(75,-64,908,844),53259=>array(75,-76,908,844),53260=>array(75,-62,908,844),53261=>array(75,-61,908,844),53262=>array(75,-69,922,844),53263=>array(75,-74,929,844),53264=>array(75,-69,927,844),53265=>array(75,-68,911,844),53266=>array(75,-72,929,844),53267=>array(75,-70,936,844),53268=>array(75,-66,908,844),53269=>array(75,-59,916,844),53270=>array(75,-60,928,844),53271=>array(75,-68,908,844),53272=>array(61,-68,907,843),53273=>array(70,-61,907,843),53274=>array(70,-61,907,843),53275=>array(70,-71,931,843),53276=>array(76,-46,907,843),53277=>array(70,-68,912,843),53278=>array(70,-76,907,843),53279=>array(70,-44,921,843),53280=>array(70,-62,917,843),53281=>array(70,-64,907,843),53282=>array(70,-64,908,843),53283=>array(70,-64,908,843),53284=>array(70,-69,923,843),53285=>array(70,-64,908,843),53286=>array(70,-64,908,843),53287=>array(70,-76,907,843),53288=>array(70,-62,907,843),53289=>array(70,-61,907,843),53290=>array(70,-69,922,843),53291=>array(70,-74,929,843),53292=>array(70,-69,927,843),53293=>array(70,-68,911,843),53294=>array(70,-72,929,843),53295=>array(70,-70,936,843),53296=>array(70,-66,908,843),53297=>array(70,-59,916,843),53298=>array(70,-60,928,843),53299=>array(70,-68,908,843),53300=>array(67,-69,907,842),53301=>array(65,-61,907,842),53302=>array(65,-61,907,842),53303=>array(65,-71,931,842),53304=>array(65,-46,907,842),53305=>array(65,-68,912,842),53306=>array(65,-76,907,842),53307=>array(65,-44,921,842),53308=>array(65,-62,917,842),53309=>array(65,-64,907,842),53310=>array(65,-64,908,842),53311=>array(65,-64,908,842),53312=>array(65,-69,923,842),53313=>array(65,-64,908,842),53314=>array(65,-64,908,842),53315=>array(65,-76,907,842),53316=>array(65,-62,907,842),53317=>array(65,-61,907,842),53318=>array(65,-69,922,842),53319=>array(65,-74,929,842),53320=>array(65,-69,927,842),53321=>array(65,-68,911,842),53322=>array(65,-72,929,842),53323=>array(65,-70,936,842),53324=>array(65,-66,908,842),53325=>array(65,-59,916,842),53326=>array(65,-60,928,842),53327=>array(65,-68,908,842),53328=>array(87,-64,928,795),53329=>array(79,-61,921,785),53330=>array(79,-61,921,785),53331=>array(79,-71,921,785),53332=>array(96,-46,927,785),53333=>array(79,-68,921,785),53334=>array(79,-74,921,785),53335=>array(79,-44,921,785),53336=>array(79,-62,921,785),53337=>array(79,-64,921,785),53338=>array(79,-64,921,785),53339=>array(79,-63,921,785),53340=>array(79,-68,921,785),53341=>array(79,-64,921,785),53342=>array(79,-63,921,785),53343=>array(79,-74,921,785),53344=>array(79,-62,921,785),53345=>array(79,-61,921,785),53346=>array(79,-69,921,785),53347=>array(79,-74,921,785),53348=>array(79,-69,921,785),53349=>array(79,-68,921,785),53350=>array(79,-72,921,785),53351=>array(79,-70,921,785),53352=>array(79,-66,921,785),53353=>array(79,-59,921,785),53354=>array(79,-60,921,785),53355=>array(79,-68,921,785),53356=>array(67,27,943,700),53357=>array(79,-61,922,785),53358=>array(79,-61,922,785),53359=>array(79,-71,922,785),53360=>array(79,-46,921,785),53361=>array(79,-68,922,785),53362=>array(79,-74,922,785),53363=>array(79,-44,922,785),53364=>array(79,-62,922,785),53365=>array(79,-64,922,785),53366=>array(79,-64,922,785),53367=>array(79,-63,922,785),53368=>array(79,-68,922,785),53369=>array(79,-64,922,785),53370=>array(79,-63,922,785),53371=>array(79,-74,922,785),53372=>array(79,-62,922,785),53373=>array(79,-61,922,785),53374=>array(79,-69,922,785),53375=>array(79,-74,922,785),53376=>array(79,-69,922,785),53377=>array(79,-68,922,785),53378=>array(79,-72,922,785),53379=>array(79,-70,922,785),53380=>array(79,-66,922,785),53381=>array(79,-59,922,785),53382=>array(79,-60,922,785),53383=>array(79,-68,922,785),53384=>array(65,-69,907,842),53385=>array(59,-61,907,842),53386=>array(59,-61,907,842),53387=>array(59,-71,931,842),53388=>array(65,-46,907,842),53389=>array(59,-68,912,842),53390=>array(59,-76,907,842),53391=>array(59,-44,921,842),53392=>array(59,-62,917,842),53393=>array(59,-64,907,842),53394=>array(59,-64,908,842),53395=>array(59,-64,908,842),53396=>array(59,-69,923,842),53397=>array(59,-64,908,842),53398=>array(59,-64,908,842),53399=>array(59,-76,907,842),53400=>array(59,-62,907,842),53401=>array(59,-61,907,842),53402=>array(59,-69,922,842),53403=>array(59,-74,929,842),53404=>array(59,-69,927,842),53405=>array(59,-68,911,842),53406=>array(59,-72,929,842),53407=>array(59,-70,936,842),53408=>array(59,-66,908,842),53409=>array(59,-59,916,842),53410=>array(59,-60,928,842),53411=>array(59,-68,908,842),53412=>array(120,-69,907,842),53413=>array(67,-61,907,842),53414=>array(67,-61,907,842),53415=>array(67,-71,931,842),53416=>array(94,-46,907,842),53417=>array(67,-68,912,842),53418=>array(67,-76,907,842),53419=>array(67,-44,921,842),53420=>array(67,-62,917,842),53421=>array(67,-64,907,842),53422=>array(67,-64,908,842),53423=>array(67,-64,908,842),53424=>array(67,-69,923,842),53425=>array(67,-64,908,842),53426=>array(67,-64,908,842),53427=>array(67,-76,907,842),53428=>array(67,-62,907,842),53429=>array(67,-61,907,842),53430=>array(67,-69,922,842),53431=>array(67,-74,929,842),53432=>array(67,-69,927,842),53433=>array(67,-68,911,842),53434=>array(67,-72,929,842),53435=>array(67,-70,936,842),53436=>array(67,-66,908,842),53437=>array(67,-59,916,842),53438=>array(67,-60,928,842),53439=>array(67,-68,908,842),53440=>array(115,-69,936,842),53441=>array(115,-59,936,842),53442=>array(115,-61,936,842),53443=>array(115,-71,936,842),53444=>array(115,-45,936,842),53445=>array(115,-69,936,842),53446=>array(115,-76,936,842),53447=>array(115,-44,936,842),53448=>array(115,-62,936,842),53449=>array(115,-64,936,842),53450=>array(115,-64,936,842),53451=>array(115,-64,936,842),53452=>array(115,-70,936,842),53453=>array(115,-64,936,842),53454=>array(115,-64,936,842),53455=>array(115,-76,936,842),53456=>array(115,-62,936,842),53457=>array(115,-61,936,842),53458=>array(115,-70,936,842),53459=>array(115,-74,936,842),53460=>array(115,-69,936,842),53461=>array(115,-67,936,842),53462=>array(115,-72,936,842),53463=>array(115,-71,936,842),53464=>array(115,-66,936,842),53465=>array(115,-59,936,842),53466=>array(115,-60,936,842),53467=>array(115,-69,936,842),53468=>array(115,-69,907,842),53469=>array(115,-61,907,842),53470=>array(115,-61,907,842),53471=>array(115,-71,931,842),53472=>array(115,-46,907,842),53473=>array(115,-68,912,842),53474=>array(115,-76,907,842),53475=>array(115,-44,921,842),53476=>array(115,-62,917,842),53477=>array(115,-64,907,842),53478=>array(115,-64,908,842),53479=>array(115,-64,908,842),53480=>array(115,-69,923,842),53481=>array(115,-64,908,842),53482=>array(115,-64,908,842),53483=>array(115,-76,907,842),53484=>array(115,-62,907,842),53485=>array(115,-61,907,842),53486=>array(115,-69,922,842),53487=>array(115,-74,929,842),53488=>array(115,-69,927,842),53489=>array(115,-68,911,842),53490=>array(115,-72,929,842),53491=>array(115,-70,936,842),53492=>array(115,-66,908,842),53493=>array(115,-59,916,842),53494=>array(115,-60,928,842),53495=>array(115,-68,908,842),53496=>array(114,-68,935,843),53497=>array(115,-59,936,842),53498=>array(115,-61,936,842),53499=>array(115,-71,936,842),53500=>array(115,-45,936,842),53501=>array(115,-69,936,842),53502=>array(115,-76,936,842),53503=>array(115,-44,936,842),53504=>array(115,-62,936,842),53505=>array(115,-64,936,842),53506=>array(115,-64,936,842),53507=>array(115,-64,936,842),53508=>array(115,-70,936,842),53509=>array(115,-64,936,842),53510=>array(115,-64,936,842),53511=>array(115,-76,936,842),53512=>array(115,-62,936,842),53513=>array(115,-61,936,842),53514=>array(115,-70,936,842),53515=>array(115,-74,936,842),53516=>array(115,-69,936,842),53517=>array(115,-67,936,842),53518=>array(115,-72,936,842),53519=>array(115,-71,936,842),53520=>array(115,-66,936,842),53521=>array(115,-59,936,842),53522=>array(115,-60,936,842),53523=>array(115,-69,936,842),53524=>array(115,-69,907,842),53525=>array(115,-61,907,842),53526=>array(115,-61,907,842),53527=>array(115,-71,931,842),53528=>array(115,-46,907,842),53529=>array(115,-68,912,842),53530=>array(115,-76,907,842),53531=>array(115,-44,921,842),53532=>array(115,-62,917,842),53533=>array(115,-64,907,842),53534=>array(115,-64,908,842),53535=>array(115,-64,908,842),53536=>array(115,-69,923,842),53537=>array(115,-64,908,842),53538=>array(115,-64,908,842),53539=>array(115,-76,907,842),53540=>array(115,-62,907,842),53541=>array(115,-61,907,842),53542=>array(115,-69,922,842),53543=>array(115,-74,929,842),53544=>array(115,-69,927,842),53545=>array(115,-68,911,842),53546=>array(115,-72,929,842),53547=>array(115,-70,936,842),53548=>array(115,-66,908,842),53549=>array(115,-59,916,842),53550=>array(115,-60,928,842),53551=>array(115,-68,908,842),53552=>array(115,-70,907,841),53553=>array(115,-61,907,841),53554=>array(115,-61,907,841),53555=>array(115,-71,931,841),53556=>array(115,-46,907,841),53557=>array(115,-68,912,841),53558=>array(115,-76,907,841),53559=>array(115,-44,921,841),53560=>array(115,-62,917,841),53561=>array(115,-64,907,841),53562=>array(115,-64,908,841),53563=>array(115,-64,908,841),53564=>array(115,-69,923,841),53565=>array(115,-64,908,841),53566=>array(115,-64,908,841),53567=>array(115,-76,906,841),53568=>array(115,-62,907,841),53569=>array(115,-61,907,841),53570=>array(115,-69,922,841),53571=>array(115,-74,929,841),53572=>array(115,-69,927,841),53573=>array(115,-68,911,841),53574=>array(115,-72,929,841),53575=>array(115,-70,936,841),53576=>array(115,-66,908,841),53577=>array(115,-59,916,841),53578=>array(115,-60,928,841),53579=>array(115,-68,908,841),53580=>array(115,-68,907,843),53581=>array(115,-61,907,843),53582=>array(115,-61,907,843),53583=>array(115,-71,931,843),53584=>array(115,-46,907,843),53585=>array(115,-68,912,843),53586=>array(115,-76,907,843),53587=>array(115,-44,921,843),53588=>array(115,-62,917,843),53589=>array(115,-64,907,843),53590=>array(115,-64,908,843),53591=>array(115,-64,908,843),53592=>array(115,-69,923,843),53593=>array(115,-64,908,843),53594=>array(115,-64,908,843),53595=>array(115,-76,907,843),53596=>array(115,-62,907,843),53597=>array(115,-61,907,843),53598=>array(115,-69,922,843),53599=>array(115,-74,929,843),53600=>array(115,-69,927,843),53601=>array(115,-68,911,843),53602=>array(115,-72,929,843),53603=>array(115,-70,936,843),53604=>array(115,-66,908,843),53605=>array(115,-59,916,843),53606=>array(115,-60,928,843),53607=>array(115,-68,908,843),53608=>array(115,-70,907,842),53609=>array(115,-61,908,842),53610=>array(115,-61,908,842),53611=>array(115,-71,931,842),53612=>array(115,-46,907,842),53613=>array(115,-68,912,842),53614=>array(115,-76,908,842),53615=>array(115,-44,921,842),53616=>array(115,-62,917,842),53617=>array(115,-64,908,842),53618=>array(115,-64,908,842),53619=>array(115,-64,908,842),53620=>array(115,-69,923,842),53621=>array(115,-64,908,842),53622=>array(115,-64,908,842),53623=>array(115,-76,908,842),53624=>array(115,-62,908,842),53625=>array(115,-61,908,842),53626=>array(115,-69,922,842),53627=>array(115,-74,929,842),53628=>array(115,-69,927,842),53629=>array(115,-68,911,842),53630=>array(115,-72,929,842),53631=>array(115,-70,936,842),53632=>array(115,-66,908,842),53633=>array(115,-59,916,842),53634=>array(115,-60,928,842),53635=>array(115,-68,908,842),53636=>array(115,-68,907,843),53637=>array(115,-61,907,843),53638=>array(115,-61,907,843),53639=>array(115,-71,931,843),53640=>array(115,-46,907,843),53641=>array(115,-68,912,843),53642=>array(115,-76,907,843),53643=>array(115,-44,921,843),53644=>array(115,-62,917,843),53645=>array(115,-64,907,843),53646=>array(115,-64,908,843),53647=>array(115,-64,908,843),53648=>array(115,-69,923,843),53649=>array(115,-64,908,843),53650=>array(115,-64,908,843),53651=>array(115,-76,907,843),53652=>array(115,-62,907,843),53653=>array(115,-61,907,843),53654=>array(115,-69,922,843),53655=>array(115,-74,929,843),53656=>array(115,-69,927,843),53657=>array(115,-68,911,843),53658=>array(115,-72,929,843),53659=>array(115,-70,936,843),53660=>array(115,-66,908,843),53661=>array(115,-59,916,843),53662=>array(115,-60,928,843),53663=>array(115,-68,908,843),53664=>array(62,17,943,757),53665=>array(79,-61,921,799),53666=>array(79,-61,921,799),53667=>array(79,-71,921,799),53668=>array(79,-46,922,789),53669=>array(79,-68,921,799),53670=>array(79,-74,921,799),53671=>array(79,-44,921,799),53672=>array(79,-62,921,799),53673=>array(79,-64,921,799),53674=>array(79,-64,921,799),53675=>array(79,-63,921,799),53676=>array(79,-68,921,799),53677=>array(79,-64,921,799),53678=>array(79,-63,921,799),53679=>array(79,-74,921,799),53680=>array(79,-62,921,799),53681=>array(79,-61,921,799),53682=>array(79,-69,921,799),53683=>array(79,-74,921,799),53684=>array(79,-69,921,799),53685=>array(79,-68,921,799),53686=>array(79,-72,921,799),53687=>array(79,-70,921,799),53688=>array(79,-66,921,799),53689=>array(79,-59,921,799),53690=>array(79,-60,921,799),53691=>array(79,-68,921,799),53692=>array(53,-69,936,842),53693=>array(77,-59,936,842),53694=>array(77,-61,936,842),53695=>array(77,-71,936,842),53696=>array(77,-45,936,842),53697=>array(77,-69,936,842),53698=>array(77,-76,936,842),53699=>array(77,-44,936,842),53700=>array(77,-62,936,842),53701=>array(77,-64,936,842),53702=>array(77,-64,936,842),53703=>array(77,-64,936,842),53704=>array(77,-70,936,842),53705=>array(77,-64,936,842),53706=>array(77,-64,936,842),53707=>array(77,-76,936,842),53708=>array(77,-62,936,842),53709=>array(77,-61,936,842),53710=>array(77,-70,936,842),53711=>array(77,-74,936,842),53712=>array(77,-69,936,842),53713=>array(77,-67,936,842),53714=>array(77,-72,936,842),53715=>array(77,-71,936,842),53716=>array(77,-66,936,842),53717=>array(77,-59,936,842),53718=>array(77,-60,936,842),53719=>array(77,-69,936,842),53720=>array(43,-69,907,842),53721=>array(77,-61,907,842),53722=>array(77,-61,907,842),53723=>array(77,-71,931,842),53724=>array(77,-46,907,842),53725=>array(77,-68,912,842),53726=>array(77,-76,907,842),53727=>array(77,-44,921,842),53728=>array(77,-62,917,842),53729=>array(77,-64,907,842),53730=>array(77,-64,908,842),53731=>array(77,-64,908,842),53732=>array(77,-69,923,842),53733=>array(77,-64,908,842),53734=>array(77,-64,908,842),53735=>array(77,-76,907,842),53736=>array(77,-62,907,842),53737=>array(77,-61,907,842),53738=>array(77,-69,922,842),53739=>array(77,-74,929,842),53740=>array(77,-69,927,842),53741=>array(77,-68,911,842),53742=>array(77,-72,929,842),53743=>array(77,-70,936,842),53744=>array(77,-66,908,842),53745=>array(77,-59,916,842),53746=>array(77,-60,928,842),53747=>array(77,-68,908,842),53748=>array(53,-68,907,843),53749=>array(65,-61,907,842),53750=>array(65,-61,907,842),53751=>array(65,-71,931,842),53752=>array(65,-46,907,842),53753=>array(65,-68,912,842),53754=>array(65,-76,907,842),53755=>array(65,-44,921,842),53756=>array(65,-62,917,842),53757=>array(65,-64,907,842),53758=>array(65,-64,908,842),53759=>array(65,-64,908,842),53760=>array(65,-69,923,842),53761=>array(65,-64,908,842),53762=>array(65,-64,908,842),53763=>array(65,-76,907,842),53764=>array(65,-62,907,842),53765=>array(65,-61,907,842),53766=>array(65,-69,922,842),53767=>array(65,-74,929,842),53768=>array(65,-69,927,842),53769=>array(65,-68,911,842),53770=>array(65,-72,929,842),53771=>array(65,-70,936,842),53772=>array(65,-66,908,842),53773=>array(65,-59,916,842),53774=>array(65,-60,928,842),53775=>array(65,-68,908,842),53776=>array(62,7,943,777),53777=>array(79,-61,921,799),53778=>array(79,-61,921,799),53779=>array(79,-71,921,799),53780=>array(79,-46,921,794),53781=>array(79,-68,921,799),53782=>array(79,-74,921,799),53783=>array(79,-44,921,799),53784=>array(79,-62,921,799),53785=>array(79,-64,921,799),53786=>array(79,-64,921,799),53787=>array(79,-63,921,799),53788=>array(79,-68,921,799),53789=>array(79,-64,921,799),53790=>array(79,-63,921,799),53791=>array(79,-74,921,799),53792=>array(79,-62,921,799),53793=>array(79,-61,921,799),53794=>array(79,-69,921,799),53795=>array(79,-74,921,799),53796=>array(79,-69,921,799),53797=>array(79,-68,921,799),53798=>array(79,-72,921,799),53799=>array(79,-70,921,799),53800=>array(79,-66,921,799),53801=>array(79,-59,921,799),53802=>array(79,-60,921,799),53803=>array(79,-68,921,799),53804=>array(82,-64,924,789),53805=>array(79,-61,921,799),53806=>array(79,-61,921,799),53807=>array(79,-71,921,799),53808=>array(79,-46,921,789),53809=>array(79,-68,921,799),53810=>array(79,-74,921,799),53811=>array(79,-44,921,799),53812=>array(79,-62,921,799),53813=>array(79,-64,921,799),53814=>array(79,-64,921,799),53815=>array(79,-63,921,799),53816=>array(79,-68,921,799),53817=>array(79,-64,921,799),53818=>array(79,-63,921,799),53819=>array(79,-74,921,799),53820=>array(79,-62,921,799),53821=>array(79,-61,921,799),53822=>array(79,-69,921,799),53823=>array(79,-74,921,799),53824=>array(79,-69,921,799),53825=>array(79,-68,921,799),53826=>array(79,-72,921,799),53827=>array(79,-70,921,799),53828=>array(79,-66,921,799),53829=>array(79,-59,921,799),53830=>array(79,-60,921,799),53831=>array(79,-68,921,799),53832=>array(76,-70,907,841),53833=>array(74,-61,909,843),53834=>array(74,-61,909,843),53835=>array(74,-71,931,843),53836=>array(75,-46,909,843),53837=>array(74,-68,912,843),53838=>array(74,-76,909,843),53839=>array(74,-44,921,843),53840=>array(74,-62,917,843),53841=>array(74,-64,909,843),53842=>array(74,-64,909,843),53843=>array(74,-64,909,843),53844=>array(74,-69,923,843),53845=>array(74,-64,909,843),53846=>array(74,-64,909,843),53847=>array(74,-76,909,843),53848=>array(74,-62,909,843),53849=>array(74,-61,909,843),53850=>array(74,-69,922,843),53851=>array(74,-74,929,843),53852=>array(74,-69,927,843),53853=>array(74,-68,911,843),53854=>array(74,-72,929,843),53855=>array(74,-70,936,843),53856=>array(74,-66,909,843),53857=>array(74,-59,916,843),53858=>array(74,-60,928,843),53859=>array(74,-68,909,843),53860=>array(56,-68,907,843),53861=>array(68,-61,907,843),53862=>array(68,-61,907,843),53863=>array(68,-71,931,843),53864=>array(74,-46,907,843),53865=>array(68,-68,912,843),53866=>array(68,-76,907,843),53867=>array(68,-44,921,843),53868=>array(68,-62,917,843),53869=>array(68,-64,907,843),53870=>array(68,-64,908,843),53871=>array(68,-64,908,843),53872=>array(68,-69,923,843),53873=>array(68,-64,908,843),53874=>array(68,-64,908,843),53875=>array(68,-76,907,843),53876=>array(68,-62,907,843),53877=>array(68,-61,907,843),53878=>array(68,-69,922,843),53879=>array(68,-74,929,843),53880=>array(68,-69,927,843),53881=>array(68,-68,911,843),53882=>array(68,-72,929,843),53883=>array(68,-70,936,843),53884=>array(68,-66,908,843),53885=>array(68,-59,916,843),53886=>array(68,-60,928,843),53887=>array(68,-68,908,843),53888=>array(67,-69,907,842),53889=>array(65,-61,907,842),53890=>array(65,-61,907,842),53891=>array(65,-71,931,842),53892=>array(65,-46,907,842),53893=>array(65,-68,912,842),53894=>array(65,-76,907,842),53895=>array(65,-44,921,842),53896=>array(65,-62,917,842),53897=>array(65,-64,907,842),53898=>array(65,-64,908,842),53899=>array(65,-64,908,842),53900=>array(65,-69,923,842),53901=>array(65,-64,908,842),53902=>array(65,-64,908,842),53903=>array(65,-76,907,842),53904=>array(65,-62,907,842),53905=>array(65,-61,907,842),53906=>array(65,-69,922,842),53907=>array(65,-74,929,842),53908=>array(65,-69,927,842),53909=>array(65,-68,911,842),53910=>array(65,-72,929,842),53911=>array(65,-70,936,842),53912=>array(65,-66,908,842),53913=>array(65,-59,916,842),53914=>array(65,-60,928,842),53915=>array(65,-68,908,842),53916=>array(82,-64,924,784),53917=>array(79,-61,921,799),53918=>array(79,-61,921,799),53919=>array(79,-71,921,799),53920=>array(81,-46,922,789),53921=>array(79,-68,921,799),53922=>array(79,-74,921,799),53923=>array(79,-44,921,799),53924=>array(79,-62,921,799),53925=>array(79,-64,921,799),53926=>array(79,-64,921,799),53927=>array(79,-63,921,799),53928=>array(79,-68,921,799),53929=>array(79,-64,921,799),53930=>array(79,-63,921,799),53931=>array(79,-74,921,799),53932=>array(79,-62,921,799),53933=>array(79,-61,921,799),53934=>array(79,-69,921,799),53935=>array(79,-74,921,799),53936=>array(79,-69,921,799),53937=>array(79,-68,921,799),53938=>array(79,-72,921,799),53939=>array(79,-70,921,799),53940=>array(79,-66,921,799),53941=>array(79,-59,921,799),53942=>array(79,-60,921,799),53943=>array(79,-68,921,799),53944=>array(57,52,943,719),53945=>array(79,-61,922,796),53946=>array(79,-61,922,796),53947=>array(79,-71,922,796),53948=>array(79,-46,921,791),53949=>array(79,-68,922,796),53950=>array(79,-74,922,796),53951=>array(79,-44,922,796),53952=>array(79,-62,922,796),53953=>array(79,-64,922,796),53954=>array(79,-64,922,796),53955=>array(79,-63,922,796),53956=>array(79,-68,922,796),53957=>array(79,-64,922,796),53958=>array(79,-63,922,796),53959=>array(79,-74,922,796),53960=>array(79,-62,922,796),53961=>array(79,-61,922,796),53962=>array(79,-69,922,796),53963=>array(79,-74,922,796),53964=>array(79,-69,922,796),53965=>array(79,-68,922,796),53966=>array(79,-72,922,796),53967=>array(79,-70,922,796),53968=>array(79,-66,922,796),53969=>array(79,-59,922,796),53970=>array(79,-60,922,796),53971=>array(79,-68,922,796),53972=>array(67,-69,907,842),53973=>array(65,-61,907,842),53974=>array(65,-61,907,842),53975=>array(65,-71,931,842),53976=>array(65,-46,907,842),53977=>array(65,-68,912,842),53978=>array(65,-76,907,842),53979=>array(65,-44,921,842),53980=>array(65,-62,917,842),53981=>array(65,-64,907,842),53982=>array(65,-64,908,842),53983=>array(65,-64,908,842),53984=>array(65,-69,923,842),53985=>array(65,-64,908,842),53986=>array(65,-64,908,842),53987=>array(65,-76,907,842),53988=>array(65,-62,907,842),53989=>array(65,-61,907,842),53990=>array(65,-69,922,842),53991=>array(65,-74,929,842),53992=>array(65,-69,927,842),53993=>array(65,-68,911,842),53994=>array(65,-72,929,842),53995=>array(65,-70,936,842),53996=>array(65,-66,908,842),53997=>array(65,-59,916,842),53998=>array(65,-60,928,842),53999=>array(65,-68,908,842),54000=>array(125,-69,907,842),54001=>array(130,-61,907,842),54002=>array(130,-61,907,842),54003=>array(130,-71,931,842),54004=>array(125,-46,907,842),54005=>array(130,-68,912,842),54006=>array(130,-76,907,842),54007=>array(130,-44,921,842),54008=>array(130,-62,917,842),54009=>array(130,-64,907,842),54010=>array(130,-64,908,842),54011=>array(130,-64,908,842),54012=>array(130,-69,923,842),54013=>array(130,-64,908,842),54014=>array(130,-64,908,842),54015=>array(130,-76,907,842),54016=>array(130,-62,907,842),54017=>array(130,-61,907,842),54018=>array(130,-69,922,842),54019=>array(130,-74,929,842),54020=>array(130,-69,927,842),54021=>array(130,-68,911,842),54022=>array(130,-72,929,842),54023=>array(130,-70,936,842),54024=>array(130,-66,908,842),54025=>array(130,-59,916,842),54026=>array(130,-60,928,842),54027=>array(130,-68,908,842),54028=>array(84,-69,936,842),54029=>array(66,-59,936,842),54030=>array(66,-61,936,842),54031=>array(66,-71,936,842),54032=>array(78,-45,936,842),54033=>array(66,-69,936,842),54034=>array(66,-76,936,842),54035=>array(66,-44,936,842),54036=>array(66,-62,936,842),54037=>array(66,-64,936,842),54038=>array(66,-64,936,842),54039=>array(66,-64,936,842),54040=>array(66,-70,936,842),54041=>array(66,-64,936,842),54042=>array(66,-64,936,842),54043=>array(66,-76,936,842),54044=>array(66,-62,936,842),54045=>array(66,-61,936,842),54046=>array(66,-70,936,842),54047=>array(66,-74,936,842),54048=>array(66,-69,936,842),54049=>array(66,-67,936,842),54050=>array(66,-72,936,842),54051=>array(66,-71,936,842),54052=>array(66,-66,936,842),54053=>array(66,-59,936,842),54054=>array(66,-60,936,842),54055=>array(66,-69,936,842),54056=>array(73,-69,907,842),54057=>array(83,-61,907,842),54058=>array(83,-61,907,842),54059=>array(83,-71,931,842),54060=>array(78,-46,907,842),54061=>array(83,-68,912,842),54062=>array(83,-76,907,842),54063=>array(83,-44,921,842),54064=>array(83,-62,917,842),54065=>array(83,-64,907,842),54066=>array(83,-64,908,842),54067=>array(83,-64,908,842),54068=>array(83,-69,923,842),54069=>array(83,-64,908,842),54070=>array(83,-64,908,842),54071=>array(83,-76,907,842),54072=>array(83,-62,907,842),54073=>array(83,-61,907,842),54074=>array(83,-69,922,842),54075=>array(83,-74,929,842),54076=>array(83,-69,927,842),54077=>array(83,-68,911,842),54078=>array(83,-72,929,842),54079=>array(83,-70,936,842),54080=>array(83,-66,908,842),54081=>array(83,-59,916,842),54082=>array(83,-60,928,842),54083=>array(83,-68,908,842),54084=>array(84,-68,935,843),54085=>array(66,-59,936,842),54086=>array(66,-61,936,842),54087=>array(66,-71,936,842),54088=>array(78,-45,936,842),54089=>array(66,-69,936,842),54090=>array(66,-76,936,842),54091=>array(66,-44,936,842),54092=>array(66,-62,936,842),54093=>array(66,-64,936,842),54094=>array(66,-64,936,842),54095=>array(66,-64,936,842),54096=>array(66,-70,936,842),54097=>array(66,-64,936,842),54098=>array(66,-64,936,842),54099=>array(66,-76,936,842),54100=>array(66,-62,936,842),54101=>array(66,-61,936,842),54102=>array(66,-70,936,842),54103=>array(66,-74,936,842),54104=>array(66,-69,936,842),54105=>array(66,-67,936,842),54106=>array(66,-72,936,842),54107=>array(66,-71,936,842),54108=>array(66,-66,936,842),54109=>array(66,-59,936,842),54110=>array(66,-60,936,842),54111=>array(66,-69,936,842),54112=>array(73,-69,907,842),54113=>array(83,-61,907,842),54114=>array(83,-61,907,842),54115=>array(83,-71,931,842),54116=>array(78,-46,907,842),54117=>array(83,-68,912,842),54118=>array(83,-76,907,842),54119=>array(83,-44,921,842),54120=>array(83,-62,917,842),54121=>array(83,-64,907,842),54122=>array(83,-64,908,842),54123=>array(83,-64,908,842),54124=>array(83,-69,923,842),54125=>array(83,-64,908,842),54126=>array(83,-64,908,842),54127=>array(83,-76,907,842),54128=>array(83,-62,907,842),54129=>array(83,-61,907,842),54130=>array(83,-69,922,842),54131=>array(83,-74,929,842),54132=>array(83,-69,927,842),54133=>array(83,-68,911,842),54134=>array(83,-72,929,842),54135=>array(83,-70,936,842),54136=>array(83,-66,908,842),54137=>array(83,-59,916,842),54138=>array(83,-60,928,842),54139=>array(83,-68,908,842),54140=>array(84,-70,907,841),54141=>array(66,-61,907,841),54142=>array(66,-61,907,841),54143=>array(66,-71,931,841),54144=>array(78,-46,907,841),54145=>array(66,-68,912,841),54146=>array(66,-76,907,841),54147=>array(66,-44,921,841),54148=>array(66,-62,917,841),54149=>array(66,-64,907,841),54150=>array(66,-64,908,841),54151=>array(66,-64,908,841),54152=>array(66,-69,923,841),54153=>array(66,-64,908,841),54154=>array(66,-64,908,841),54155=>array(66,-76,906,841),54156=>array(66,-62,907,841),54157=>array(66,-61,907,841),54158=>array(66,-69,922,841),54159=>array(66,-74,929,841),54160=>array(66,-69,927,841),54161=>array(66,-68,911,841),54162=>array(66,-72,929,841),54163=>array(66,-70,936,841),54164=>array(66,-66,908,841),54165=>array(66,-59,916,841),54166=>array(66,-60,928,841),54167=>array(66,-68,908,841),54168=>array(63,-68,907,843),54169=>array(65,-61,907,843),54170=>array(65,-61,907,843),54171=>array(65,-71,931,843),54172=>array(83,-46,907,843),54173=>array(65,-68,912,843),54174=>array(65,-76,907,843),54175=>array(65,-44,921,843),54176=>array(65,-62,917,843),54177=>array(65,-64,907,843),54178=>array(65,-64,908,843),54179=>array(65,-64,908,843),54180=>array(65,-69,923,843),54181=>array(65,-64,908,843),54182=>array(65,-64,908,843),54183=>array(65,-76,907,843),54184=>array(65,-62,907,843),54185=>array(65,-61,907,843),54186=>array(65,-69,922,843),54187=>array(65,-74,929,843),54188=>array(65,-69,927,843),54189=>array(65,-68,911,843),54190=>array(65,-72,929,843),54191=>array(65,-70,936,843),54192=>array(65,-66,908,843),54193=>array(65,-59,916,843),54194=>array(65,-60,928,843),54195=>array(65,-68,908,843),54196=>array(74,-70,907,842),54197=>array(56,-61,908,842),54198=>array(56,-61,908,842),54199=>array(56,-71,931,842),54200=>array(68,-46,907,842),54201=>array(56,-68,912,842),54202=>array(56,-76,908,842),54203=>array(56,-44,921,842),54204=>array(56,-62,917,842),54205=>array(56,-64,908,842),54206=>array(56,-64,908,842),54207=>array(56,-64,908,842),54208=>array(56,-69,923,842),54209=>array(56,-64,908,842),54210=>array(56,-64,908,842),54211=>array(56,-76,908,842),54212=>array(56,-62,908,842),54213=>array(56,-61,908,842),54214=>array(56,-69,922,842),54215=>array(56,-74,929,842),54216=>array(56,-69,927,842),54217=>array(56,-68,911,842),54218=>array(56,-72,929,842),54219=>array(56,-70,936,842),54220=>array(56,-66,908,842),54221=>array(56,-59,916,842),54222=>array(56,-60,928,842),54223=>array(56,-68,908,842),54224=>array(63,-68,907,843),54225=>array(65,-61,907,843),54226=>array(65,-61,907,843),54227=>array(65,-71,931,843),54228=>array(83,-46,907,843),54229=>array(65,-68,912,843),54230=>array(65,-76,907,843),54231=>array(65,-44,921,843),54232=>array(65,-62,917,843),54233=>array(65,-64,907,843),54234=>array(65,-64,908,843),54235=>array(65,-64,908,843),54236=>array(65,-69,923,843),54237=>array(65,-64,908,843),54238=>array(65,-64,908,843),54239=>array(65,-76,907,843),54240=>array(65,-62,907,843),54241=>array(65,-61,907,843),54242=>array(65,-69,922,843),54243=>array(65,-74,929,843),54244=>array(65,-69,927,843),54245=>array(65,-68,911,843),54246=>array(65,-72,929,843),54247=>array(65,-70,936,843),54248=>array(65,-66,908,843),54249=>array(65,-59,916,843),54250=>array(65,-60,928,843),54251=>array(65,-68,908,843),54252=>array(62,22,938,724),54253=>array(79,-61,921,799),54254=>array(79,-61,921,799),54255=>array(79,-71,921,799),54256=>array(79,-46,922,799),54257=>array(79,-68,921,799),54258=>array(79,-74,921,799),54259=>array(79,-44,921,799),54260=>array(79,-62,921,799),54261=>array(79,-64,921,799),54262=>array(79,-64,921,799),54263=>array(79,-63,921,799),54264=>array(79,-68,921,799),54265=>array(79,-64,921,799),54266=>array(79,-63,921,799),54267=>array(79,-74,921,799),54268=>array(79,-62,921,799),54269=>array(79,-61,921,799),54270=>array(79,-69,921,799),54271=>array(79,-74,921,799),54272=>array(79,-69,921,799),54273=>array(79,-68,921,799),54274=>array(79,-72,921,799),54275=>array(79,-70,921,799),54276=>array(79,-66,921,799),54277=>array(79,-59,921,799),54278=>array(79,-60,921,799),54279=>array(79,-68,921,799),54280=>array(68,-69,936,842),54281=>array(77,-59,936,842),54282=>array(77,-61,936,842),54283=>array(77,-71,936,842),54284=>array(77,-45,936,842),54285=>array(77,-69,936,842),54286=>array(77,-76,936,842),54287=>array(77,-44,936,842),54288=>array(77,-62,936,842),54289=>array(77,-64,936,842),54290=>array(77,-64,936,842),54291=>array(77,-64,936,842),54292=>array(77,-70,936,842),54293=>array(77,-64,936,842),54294=>array(77,-64,936,842),54295=>array(77,-76,936,842),54296=>array(77,-62,936,842),54297=>array(77,-61,936,842),54298=>array(77,-70,936,842),54299=>array(77,-74,936,842),54300=>array(77,-69,936,842),54301=>array(77,-67,936,842),54302=>array(77,-72,936,842),54303=>array(77,-71,936,842),54304=>array(77,-66,936,842),54305=>array(77,-59,936,842),54306=>array(77,-60,936,842),54307=>array(77,-69,936,842),54308=>array(59,-69,907,842),54309=>array(77,-61,907,842),54310=>array(77,-61,907,842),54311=>array(77,-71,931,842),54312=>array(67,-46,907,842),54313=>array(77,-68,912,842),54314=>array(77,-76,907,842),54315=>array(77,-44,921,842),54316=>array(77,-62,917,842),54317=>array(77,-64,907,842),54318=>array(77,-64,908,842),54319=>array(77,-64,908,842),54320=>array(77,-69,923,842),54321=>array(77,-64,908,842),54322=>array(77,-64,908,842),54323=>array(77,-76,907,842),54324=>array(77,-62,907,842),54325=>array(77,-61,907,842),54326=>array(77,-69,922,842),54327=>array(77,-74,929,842),54328=>array(77,-69,927,842),54329=>array(77,-68,911,842),54330=>array(77,-72,929,842),54331=>array(77,-70,936,842),54332=>array(77,-66,908,842),54333=>array(77,-59,916,842),54334=>array(77,-60,928,842),54335=>array(77,-68,908,842),54336=>array(53,-68,908,843),54337=>array(65,-61,907,842),54338=>array(65,-61,907,842),54339=>array(65,-71,931,842),54340=>array(65,-46,907,842),54341=>array(65,-68,912,842),54342=>array(65,-76,907,842),54343=>array(65,-44,921,842),54344=>array(65,-62,917,842),54345=>array(65,-64,907,842),54346=>array(65,-64,908,842),54347=>array(65,-64,908,842),54348=>array(65,-69,923,842),54349=>array(65,-64,908,842),54350=>array(65,-64,908,842),54351=>array(65,-76,907,842),54352=>array(65,-62,907,842),54353=>array(65,-61,907,842),54354=>array(65,-69,922,842),54355=>array(65,-74,929,842),54356=>array(65,-69,927,842),54357=>array(65,-68,911,842),54358=>array(65,-72,929,842),54359=>array(65,-70,936,842),54360=>array(65,-66,908,842),54361=>array(65,-59,916,842),54362=>array(65,-60,928,842),54363=>array(65,-68,908,842),54364=>array(60,17,940,739),54365=>array(79,-61,921,799),54366=>array(79,-61,921,799),54367=>array(79,-71,921,799),54368=>array(79,-46,921,799),54369=>array(79,-68,921,799),54370=>array(79,-74,921,799),54371=>array(79,-44,921,799),54372=>array(79,-62,921,799),54373=>array(79,-64,921,799),54374=>array(79,-64,921,799),54375=>array(79,-63,921,799),54376=>array(79,-68,921,799),54377=>array(79,-64,921,799),54378=>array(79,-63,921,799),54379=>array(79,-74,921,799),54380=>array(79,-62,921,799),54381=>array(79,-61,921,799),54382=>array(79,-69,921,799),54383=>array(79,-74,921,799),54384=>array(79,-69,921,799),54385=>array(79,-68,921,799),54386=>array(79,-72,921,799),54387=>array(79,-70,921,799),54388=>array(79,-66,921,799),54389=>array(79,-59,921,799),54390=>array(79,-60,921,799),54391=>array(79,-68,921,799),54392=>array(79,-64,921,794),54393=>array(79,-61,921,799),54394=>array(79,-61,921,799),54395=>array(79,-71,921,799),54396=>array(79,-46,921,799),54397=>array(79,-68,921,799),54398=>array(79,-74,921,799),54399=>array(79,-44,921,799),54400=>array(79,-62,921,799),54401=>array(79,-64,921,799),54402=>array(79,-64,921,799),54403=>array(79,-63,921,799),54404=>array(79,-68,921,799),54405=>array(79,-64,921,799),54406=>array(79,-63,921,799),54407=>array(79,-74,921,799),54408=>array(79,-62,921,799),54409=>array(79,-61,921,799),54410=>array(79,-69,921,799),54411=>array(79,-74,921,799),54412=>array(79,-69,921,799),54413=>array(79,-68,921,799),54414=>array(79,-72,921,799),54415=>array(79,-70,921,799),54416=>array(79,-66,921,799),54417=>array(79,-59,921,799),54418=>array(79,-60,921,799),54419=>array(79,-68,921,799),54420=>array(67,-65,882,841),54421=>array(72,-61,907,836),54422=>array(72,-61,907,836),54423=>array(72,-71,931,836),54424=>array(75,-46,907,841),54425=>array(72,-68,912,836),54426=>array(72,-76,907,836),54427=>array(72,-44,921,836),54428=>array(72,-62,917,836),54429=>array(72,-64,907,836),54430=>array(72,-64,908,836),54431=>array(72,-64,908,836),54432=>array(72,-69,923,836),54433=>array(72,-64,908,836),54434=>array(72,-64,908,836),54435=>array(72,-76,906,836),54436=>array(72,-62,907,836),54437=>array(72,-61,907,836),54438=>array(72,-69,922,836),54439=>array(72,-74,929,836),54440=>array(72,-69,927,836),54441=>array(72,-68,911,836),54442=>array(72,-72,929,836),54443=>array(72,-70,936,836),54444=>array(72,-66,908,836),54445=>array(72,-59,916,836),54446=>array(72,-60,928,836),54447=>array(72,-68,908,836),54448=>array(62,-63,912,843),54449=>array(70,-61,907,838),54450=>array(70,-61,907,838),54451=>array(70,-71,931,838),54452=>array(76,-46,907,843),54453=>array(70,-68,912,838),54454=>array(70,-76,907,838),54455=>array(70,-44,921,838),54456=>array(70,-62,917,838),54457=>array(70,-64,907,838),54458=>array(70,-64,908,838),54459=>array(70,-64,908,838),54460=>array(70,-69,923,838),54461=>array(70,-64,908,838),54462=>array(70,-64,908,838),54463=>array(70,-76,906,838),54464=>array(70,-62,907,838),54465=>array(70,-61,907,838),54466=>array(70,-69,922,838),54467=>array(70,-74,929,838),54468=>array(70,-69,927,838),54469=>array(70,-68,911,838),54470=>array(70,-72,929,838),54471=>array(70,-70,936,838),54472=>array(70,-66,908,838),54473=>array(70,-59,916,838),54474=>array(70,-60,928,838),54475=>array(70,-68,908,838),54476=>array(71,-69,907,842),54477=>array(65,-61,907,842),54478=>array(65,-61,907,842),54479=>array(65,-71,931,842),54480=>array(65,-46,907,842),54481=>array(65,-68,912,842),54482=>array(65,-76,907,842),54483=>array(65,-44,921,842),54484=>array(65,-62,917,842),54485=>array(65,-64,907,842),54486=>array(65,-64,908,842),54487=>array(65,-64,908,842),54488=>array(65,-69,923,842),54489=>array(65,-64,908,842),54490=>array(65,-64,908,842),54491=>array(65,-76,907,842),54492=>array(65,-62,907,842),54493=>array(65,-61,907,842),54494=>array(65,-69,922,842),54495=>array(65,-74,929,842),54496=>array(65,-69,927,842),54497=>array(65,-68,911,842),54498=>array(65,-72,929,842),54499=>array(65,-70,936,842),54500=>array(65,-66,908,842),54501=>array(65,-59,916,842),54502=>array(65,-60,928,842),54503=>array(65,-68,908,842),54504=>array(79,-64,921,794),54505=>array(79,-61,921,799),54506=>array(79,-61,921,799),54507=>array(79,-71,921,799),54508=>array(81,-46,922,799),54509=>array(79,-68,921,799),54510=>array(79,-74,921,799),54511=>array(79,-44,921,799),54512=>array(79,-62,921,799),54513=>array(79,-64,921,799),54514=>array(79,-64,921,799),54515=>array(79,-63,921,799),54516=>array(79,-68,921,799),54517=>array(79,-64,921,799),54518=>array(79,-63,921,799),54519=>array(79,-74,921,799),54520=>array(79,-62,921,799),54521=>array(79,-61,921,799),54522=>array(79,-69,921,799),54523=>array(79,-74,921,799),54524=>array(79,-69,921,799),54525=>array(79,-68,921,799),54526=>array(79,-72,921,799),54527=>array(79,-70,921,799),54528=>array(79,-66,921,799),54529=>array(79,-59,921,799),54530=>array(79,-60,921,799),54531=>array(79,-68,921,799),54532=>array(57,52,943,724),54533=>array(79,-61,922,799),54534=>array(79,-61,922,799),54535=>array(79,-71,922,799),54536=>array(79,-46,921,799),54537=>array(79,-68,922,799),54538=>array(79,-74,922,799),54539=>array(79,-44,922,799),54540=>array(79,-62,922,799),54541=>array(79,-64,922,799),54542=>array(79,-64,922,799),54543=>array(79,-63,922,799),54544=>array(79,-68,922,799),54545=>array(79,-64,922,799),54546=>array(79,-63,922,799),54547=>array(79,-74,922,799),54548=>array(79,-62,922,799),54549=>array(79,-61,922,799),54550=>array(79,-69,922,799),54551=>array(79,-74,922,799),54552=>array(79,-69,922,799),54553=>array(79,-68,922,799),54554=>array(79,-72,922,799),54555=>array(79,-70,922,799),54556=>array(79,-66,922,799),54557=>array(79,-59,922,799),54558=>array(79,-60,922,799),54559=>array(79,-68,922,799),54560=>array(67,-69,907,842),54561=>array(65,-61,907,842),54562=>array(65,-61,907,842),54563=>array(65,-71,931,842),54564=>array(65,-46,907,842),54565=>array(65,-68,912,842),54566=>array(65,-76,907,842),54567=>array(65,-44,921,842),54568=>array(65,-62,917,842),54569=>array(65,-64,907,842),54570=>array(65,-64,908,842),54571=>array(65,-64,908,842),54572=>array(65,-69,923,842),54573=>array(65,-64,908,842),54574=>array(65,-64,908,842),54575=>array(65,-76,907,842),54576=>array(65,-62,907,842),54577=>array(65,-61,907,842),54578=>array(65,-69,922,842),54579=>array(65,-74,929,842),54580=>array(65,-69,927,842),54581=>array(65,-68,911,842),54582=>array(65,-72,929,842),54583=>array(65,-70,936,842),54584=>array(65,-66,908,842),54585=>array(65,-59,916,842),54586=>array(65,-60,928,842),54587=>array(65,-68,908,842),54588=>array(85,-69,907,842),54589=>array(86,-61,907,842),54590=>array(86,-61,907,842),54591=>array(86,-71,931,842),54592=>array(86,-46,907,842),54593=>array(86,-68,912,842),54594=>array(86,-76,907,842),54595=>array(86,-44,921,842),54596=>array(86,-62,917,842),54597=>array(86,-64,907,842),54598=>array(86,-64,908,842),54599=>array(86,-64,908,842),54600=>array(86,-69,923,842),54601=>array(86,-64,908,842),54602=>array(86,-64,908,842),54603=>array(86,-76,907,842),54604=>array(86,-62,907,842),54605=>array(86,-61,907,842),54606=>array(86,-69,922,842),54607=>array(86,-74,929,842),54608=>array(86,-69,927,842),54609=>array(86,-68,911,842),54610=>array(86,-72,929,842),54611=>array(86,-70,936,842),54612=>array(86,-66,908,842),54613=>array(86,-59,916,842),54614=>array(86,-60,928,842),54615=>array(86,-68,908,842),54616=>array(94,-69,936,842),54617=>array(85,-59,936,842),54618=>array(85,-61,936,842),54619=>array(85,-71,936,842),54620=>array(85,-45,936,842),54621=>array(85,-69,936,842),54622=>array(85,-76,936,842),54623=>array(85,-44,936,842),54624=>array(85,-62,936,842),54625=>array(85,-64,936,842),54626=>array(85,-64,936,842),54627=>array(85,-64,936,842),54628=>array(85,-70,936,842),54629=>array(85,-64,936,842),54630=>array(85,-64,936,842),54631=>array(85,-76,936,842),54632=>array(85,-62,936,842),54633=>array(85,-61,936,842),54634=>array(85,-70,936,842),54635=>array(85,-74,936,842),54636=>array(85,-69,936,842),54637=>array(85,-67,936,842),54638=>array(85,-72,936,842),54639=>array(85,-71,936,842),54640=>array(85,-66,936,842),54641=>array(85,-59,936,842),54642=>array(85,-60,936,842),54643=>array(85,-69,936,842),54644=>array(79,-69,907,842),54645=>array(85,-61,907,842),54646=>array(85,-61,907,842),54647=>array(85,-71,931,842),54648=>array(85,-46,907,842),54649=>array(85,-68,912,842),54650=>array(85,-76,907,842),54651=>array(85,-44,921,842),54652=>array(85,-62,917,842),54653=>array(85,-64,907,842),54654=>array(85,-64,908,842),54655=>array(85,-64,908,842),54656=>array(85,-69,923,842),54657=>array(85,-64,908,842),54658=>array(85,-64,908,842),54659=>array(85,-76,907,842),54660=>array(85,-62,907,842),54661=>array(85,-61,907,842),54662=>array(85,-69,922,842),54663=>array(85,-74,929,842),54664=>array(85,-69,927,842),54665=>array(85,-68,911,842),54666=>array(85,-72,929,842),54667=>array(85,-70,936,842),54668=>array(85,-66,908,842),54669=>array(85,-59,916,842),54670=>array(85,-60,928,842),54671=>array(85,-68,908,842),54672=>array(94,-68,935,843),54673=>array(85,-59,936,842),54674=>array(85,-61,936,842),54675=>array(85,-71,936,842),54676=>array(85,-45,936,842),54677=>array(85,-69,936,842),54678=>array(85,-76,936,842),54679=>array(85,-44,936,842),54680=>array(85,-62,936,842),54681=>array(85,-64,936,842),54682=>array(85,-64,936,842),54683=>array(85,-64,936,842),54684=>array(85,-70,936,842),54685=>array(85,-64,936,842),54686=>array(85,-64,936,842),54687=>array(85,-76,936,842),54688=>array(85,-62,936,842),54689=>array(85,-61,936,842),54690=>array(85,-70,936,842),54691=>array(85,-74,936,842),54692=>array(85,-69,936,842),54693=>array(85,-67,936,842),54694=>array(85,-72,936,842),54695=>array(85,-71,936,842),54696=>array(85,-66,936,842),54697=>array(85,-59,936,842),54698=>array(85,-60,936,842),54699=>array(85,-69,936,842),54700=>array(79,-69,907,842),54701=>array(85,-61,907,842),54702=>array(85,-61,907,842),54703=>array(85,-71,931,842),54704=>array(85,-46,907,842),54705=>array(85,-68,912,842),54706=>array(85,-76,907,842),54707=>array(85,-44,921,842),54708=>array(85,-62,917,842),54709=>array(85,-64,907,842),54710=>array(85,-64,908,842),54711=>array(85,-64,908,842),54712=>array(85,-69,923,842),54713=>array(85,-64,908,842),54714=>array(85,-64,908,842),54715=>array(85,-76,907,842),54716=>array(85,-62,907,842),54717=>array(85,-61,907,842),54718=>array(85,-69,922,842),54719=>array(85,-74,929,842),54720=>array(85,-69,927,842),54721=>array(85,-68,911,842),54722=>array(85,-72,929,842),54723=>array(85,-70,936,842),54724=>array(85,-66,908,842),54725=>array(85,-59,916,842),54726=>array(85,-60,928,842),54727=>array(85,-68,908,842),54728=>array(79,-70,907,841),54729=>array(85,-61,907,842),54730=>array(85,-61,907,842),54731=>array(85,-71,931,842),54732=>array(85,-46,907,841),54733=>array(85,-68,912,842),54734=>array(85,-76,907,842),54735=>array(85,-44,921,842),54736=>array(85,-62,917,842),54737=>array(85,-64,907,842),54738=>array(85,-64,908,842),54739=>array(85,-64,908,842),54740=>array(85,-69,923,842),54741=>array(85,-64,908,842),54742=>array(85,-64,908,842),54743=>array(85,-76,906,842),54744=>array(85,-62,907,842),54745=>array(85,-61,907,842),54746=>array(85,-69,922,842),54747=>array(85,-74,929,842),54748=>array(85,-69,927,842),54749=>array(85,-68,911,842),54750=>array(85,-72,929,842),54751=>array(85,-70,936,842),54752=>array(85,-66,908,842),54753=>array(85,-59,916,842),54754=>array(85,-60,928,842),54755=>array(85,-68,908,842),54756=>array(69,-68,907,843),54757=>array(50,-61,907,843),54758=>array(50,-61,907,843),54759=>array(50,-71,931,843),54760=>array(60,-46,907,843),54761=>array(50,-68,912,843),54762=>array(50,-76,907,843),54763=>array(50,-44,921,843),54764=>array(50,-62,917,843),54765=>array(50,-64,907,843),54766=>array(50,-64,908,843),54767=>array(50,-64,908,843),54768=>array(50,-69,923,843),54769=>array(50,-64,908,843),54770=>array(50,-64,908,843),54771=>array(50,-76,907,843),54772=>array(50,-62,907,843),54773=>array(50,-61,907,843),54774=>array(50,-69,922,843),54775=>array(50,-74,929,843),54776=>array(50,-69,927,843),54777=>array(50,-68,911,843),54778=>array(50,-72,929,843),54779=>array(50,-70,936,843),54780=>array(50,-66,908,843),54781=>array(50,-59,916,843),54782=>array(50,-60,928,843),54783=>array(50,-68,908,843),54784=>array(89,-70,907,842),54785=>array(75,-61,907,842),54786=>array(75,-61,907,842),54787=>array(75,-71,931,842),54788=>array(85,-46,907,842),54789=>array(75,-68,912,842),54790=>array(75,-76,907,842),54791=>array(75,-44,921,842),54792=>array(75,-62,917,842),54793=>array(75,-64,907,842),54794=>array(75,-64,908,842),54795=>array(75,-64,908,842),54796=>array(75,-69,923,842),54797=>array(75,-64,908,842),54798=>array(75,-64,908,842),54799=>array(75,-76,907,842),54800=>array(75,-62,907,842),54801=>array(75,-61,907,842),54802=>array(75,-69,922,842),54803=>array(75,-74,929,842),54804=>array(75,-69,927,842),54805=>array(75,-68,911,842),54806=>array(75,-72,929,842),54807=>array(75,-70,936,842),54808=>array(75,-66,908,842),54809=>array(75,-59,916,842),54810=>array(75,-60,928,842),54811=>array(75,-68,908,842),54812=>array(49,-68,907,843),54813=>array(50,-61,907,843),54814=>array(50,-61,907,843),54815=>array(50,-71,931,843),54816=>array(50,-46,907,843),54817=>array(50,-68,912,843),54818=>array(50,-76,907,843),54819=>array(50,-44,921,843),54820=>array(50,-62,917,843),54821=>array(50,-64,907,843),54822=>array(50,-64,908,843),54823=>array(50,-64,908,843),54824=>array(50,-69,923,843),54825=>array(50,-64,908,843),54826=>array(50,-64,908,843),54827=>array(50,-76,907,843),54828=>array(50,-62,907,843),54829=>array(50,-61,907,843),54830=>array(50,-69,922,843),54831=>array(50,-74,929,843),54832=>array(50,-69,927,843),54833=>array(50,-68,911,843),54834=>array(50,-72,929,843),54835=>array(50,-70,936,843),54836=>array(50,-66,908,843),54837=>array(50,-59,916,843),54838=>array(50,-60,928,843),54839=>array(50,-68,908,843),54840=>array(62,7,938,764),54841=>array(79,-61,921,819),54842=>array(79,-61,921,819),54843=>array(79,-71,921,819),54844=>array(79,-46,922,819),54845=>array(79,-68,921,819),54846=>array(79,-74,921,819),54847=>array(79,-44,921,819),54848=>array(79,-62,921,819),54849=>array(79,-64,921,819),54850=>array(79,-64,921,819),54851=>array(79,-63,921,819),54852=>array(79,-68,921,819),54853=>array(79,-64,921,819),54854=>array(79,-63,921,819),54855=>array(79,-74,921,819),54856=>array(79,-62,921,819),54857=>array(79,-61,921,819),54858=>array(79,-69,921,819),54859=>array(79,-74,921,819),54860=>array(79,-69,921,819),54861=>array(79,-68,921,819),54862=>array(79,-72,921,819),54863=>array(79,-70,921,819),54864=>array(79,-66,921,819),54865=>array(79,-59,921,819),54866=>array(79,-60,921,819),54867=>array(79,-68,921,819),54868=>array(68,-69,936,842),54869=>array(77,-59,936,842),54870=>array(77,-61,936,842),54871=>array(77,-71,936,842),54872=>array(72,-45,936,842),54873=>array(77,-69,936,842),54874=>array(77,-76,936,842),54875=>array(77,-44,936,842),54876=>array(77,-62,936,842),54877=>array(77,-64,936,842),54878=>array(77,-64,936,842),54879=>array(77,-64,936,842),54880=>array(77,-70,936,842),54881=>array(77,-64,936,842),54882=>array(77,-64,936,842),54883=>array(77,-76,936,842),54884=>array(77,-62,936,842),54885=>array(77,-61,936,842),54886=>array(77,-70,936,842),54887=>array(77,-74,936,842),54888=>array(77,-69,936,842),54889=>array(77,-67,936,842),54890=>array(77,-72,936,842),54891=>array(77,-71,936,842),54892=>array(77,-66,936,842),54893=>array(77,-59,936,842),54894=>array(77,-60,936,842),54895=>array(77,-69,936,842),54896=>array(61,-69,907,842),54897=>array(77,-61,907,842),54898=>array(77,-61,907,842),54899=>array(77,-71,931,842),54900=>array(72,-46,907,842),54901=>array(77,-68,912,842),54902=>array(77,-76,907,842),54903=>array(77,-44,921,842),54904=>array(77,-62,917,842),54905=>array(77,-64,907,842),54906=>array(77,-64,908,842),54907=>array(77,-64,908,842),54908=>array(77,-69,923,842),54909=>array(77,-64,908,842),54910=>array(77,-64,908,842),54911=>array(77,-76,907,842),54912=>array(77,-62,907,842),54913=>array(77,-61,907,842),54914=>array(77,-69,922,842),54915=>array(77,-74,929,842),54916=>array(77,-69,927,842),54917=>array(77,-68,911,842),54918=>array(77,-72,929,842),54919=>array(77,-70,936,842),54920=>array(77,-66,908,842),54921=>array(77,-59,916,842),54922=>array(77,-60,928,842),54923=>array(77,-68,908,842),54924=>array(74,-69,907,842),54925=>array(65,-61,907,842),54926=>array(65,-61,907,842),54927=>array(65,-71,931,842),54928=>array(65,-46,907,842),54929=>array(65,-68,912,842),54930=>array(65,-76,907,842),54931=>array(65,-44,921,842),54932=>array(65,-62,917,842),54933=>array(65,-64,907,842),54934=>array(65,-64,908,842),54935=>array(65,-64,908,842),54936=>array(65,-69,923,842),54937=>array(65,-64,908,842),54938=>array(65,-64,908,842),54939=>array(65,-76,907,842),54940=>array(65,-62,907,842),54941=>array(65,-61,907,842),54942=>array(65,-69,922,842),54943=>array(65,-74,929,842),54944=>array(65,-69,927,842),54945=>array(65,-68,911,842),54946=>array(65,-72,929,842),54947=>array(65,-70,936,842),54948=>array(65,-66,908,842),54949=>array(65,-59,916,842),54950=>array(65,-60,928,842),54951=>array(65,-68,908,842),54952=>array(62,7,938,764),54953=>array(79,-61,921,819),54954=>array(79,-61,921,819),54955=>array(79,-71,921,819),54956=>array(79,-46,921,819),54957=>array(79,-68,921,819),54958=>array(79,-74,921,819),54959=>array(79,-44,921,819),54960=>array(79,-62,921,819),54961=>array(79,-64,921,819),54962=>array(79,-64,921,819),54963=>array(79,-63,921,819),54964=>array(79,-68,921,819),54965=>array(79,-64,921,819),54966=>array(79,-63,921,819),54967=>array(79,-74,921,819),54968=>array(79,-62,921,819),54969=>array(79,-61,921,819),54970=>array(79,-69,921,819),54971=>array(79,-74,921,819),54972=>array(79,-69,921,819),54973=>array(79,-68,921,819),54974=>array(79,-72,921,819),54975=>array(79,-70,921,819),54976=>array(79,-66,921,819),54977=>array(79,-59,921,819),54978=>array(79,-60,921,819),54979=>array(79,-68,921,819),54980=>array(79,-64,921,809),54981=>array(79,-61,921,819),54982=>array(79,-61,921,819),54983=>array(79,-71,921,819),54984=>array(79,-46,921,814),54985=>array(79,-68,921,819),54986=>array(79,-74,921,819),54987=>array(79,-44,921,819),54988=>array(79,-62,921,819),54989=>array(79,-64,921,819),54990=>array(79,-64,921,819),54991=>array(79,-63,921,819),54992=>array(79,-68,921,819),54993=>array(79,-64,921,819),54994=>array(79,-63,921,819),54995=>array(79,-74,921,819),54996=>array(79,-62,921,819),54997=>array(79,-61,921,819),54998=>array(79,-69,921,819),54999=>array(79,-74,921,819),55000=>array(79,-69,921,819),55001=>array(79,-68,921,819),55002=>array(79,-72,921,819),55003=>array(79,-70,921,819),55004=>array(79,-66,921,819),55005=>array(79,-59,921,819),55006=>array(79,-60,921,819),55007=>array(79,-68,921,819),55008=>array(70,-70,907,841),55009=>array(75,-61,909,843),55010=>array(75,-61,909,843),55011=>array(75,-71,931,843),55012=>array(76,-46,909,843),55013=>array(75,-68,912,843),55014=>array(75,-76,909,843),55015=>array(75,-44,921,843),55016=>array(75,-62,917,843),55017=>array(75,-64,909,843),55018=>array(75,-64,909,843),55019=>array(75,-64,909,843),55020=>array(75,-69,923,843),55021=>array(75,-64,909,843),55022=>array(75,-64,909,843),55023=>array(75,-76,909,843),55024=>array(75,-62,909,843),55025=>array(75,-61,909,843),55026=>array(75,-69,922,843),55027=>array(75,-74,929,843),55028=>array(75,-69,927,843),55029=>array(75,-68,911,843),55030=>array(75,-72,929,843),55031=>array(75,-70,936,843),55032=>array(75,-66,909,843),55033=>array(75,-59,916,843),55034=>array(75,-60,928,843),55035=>array(75,-68,909,843),55036=>array(63,-68,907,843),55037=>array(70,-61,907,843),55038=>array(70,-61,907,843),55039=>array(70,-71,931,843),55040=>array(76,-46,907,843),55041=>array(70,-68,912,843),55042=>array(70,-76,907,843),55043=>array(70,-44,921,843),55044=>array(70,-62,917,843),55045=>array(70,-64,907,843),55046=>array(70,-64,908,843),55047=>array(70,-64,908,843),55048=>array(70,-69,923,843),55049=>array(70,-64,908,843),55050=>array(70,-64,908,843),55051=>array(70,-76,907,843),55052=>array(70,-62,907,843),55053=>array(70,-61,907,843),55054=>array(70,-69,922,843),55055=>array(70,-74,929,843),55056=>array(70,-69,927,843),55057=>array(70,-68,911,843),55058=>array(70,-72,929,843),55059=>array(70,-70,936,843),55060=>array(70,-66,908,843),55061=>array(70,-59,916,843),55062=>array(70,-60,928,843),55063=>array(70,-68,908,843),55064=>array(70,-69,907,842),55065=>array(65,-61,907,842),55066=>array(65,-61,907,842),55067=>array(65,-71,931,842),55068=>array(65,-46,907,842),55069=>array(65,-68,912,842),55070=>array(65,-76,907,842),55071=>array(65,-44,921,842),55072=>array(65,-62,917,842),55073=>array(65,-64,907,842),55074=>array(65,-64,908,842),55075=>array(65,-64,908,842),55076=>array(65,-69,923,842),55077=>array(65,-64,908,842),55078=>array(65,-64,908,842),55079=>array(65,-76,907,842),55080=>array(65,-62,907,842),55081=>array(65,-61,907,842),55082=>array(65,-69,922,842),55083=>array(65,-74,929,842),55084=>array(65,-69,927,842),55085=>array(65,-68,911,842),55086=>array(65,-72,929,842),55087=>array(65,-70,936,842),55088=>array(65,-66,908,842),55089=>array(65,-59,916,842),55090=>array(65,-60,928,842),55091=>array(65,-68,908,842),55092=>array(87,-64,928,799),55093=>array(79,-61,921,819),55094=>array(79,-61,921,819),55095=>array(79,-71,921,819),55096=>array(79,-46,921,814),55097=>array(79,-68,921,819),55098=>array(79,-74,921,819),55099=>array(79,-44,921,819),55100=>array(79,-62,921,819),55101=>array(79,-64,921,819),55102=>array(79,-64,921,819),55103=>array(79,-63,921,819),55104=>array(79,-68,921,819),55105=>array(79,-64,921,819),55106=>array(79,-63,921,819),55107=>array(79,-74,921,819),55108=>array(79,-62,921,819),55109=>array(79,-61,921,819),55110=>array(79,-69,921,819),55111=>array(79,-74,921,819),55112=>array(79,-69,921,819),55113=>array(79,-68,921,819),55114=>array(79,-72,921,819),55115=>array(79,-70,921,819),55116=>array(79,-66,921,819),55117=>array(79,-59,921,819),55118=>array(79,-60,921,819),55119=>array(79,-68,921,819),55120=>array(52,42,948,744),55121=>array(79,-61,921,819),55122=>array(79,-61,921,819),55123=>array(79,-71,921,819),55124=>array(79,-46,921,815),55125=>array(79,-68,921,819),55126=>array(79,-74,921,819),55127=>array(79,-44,921,819),55128=>array(79,-62,921,819),55129=>array(79,-64,921,819),55130=>array(79,-64,921,819),55131=>array(79,-63,921,819),55132=>array(79,-68,921,819),55133=>array(79,-64,921,819),55134=>array(79,-63,921,819),55135=>array(79,-74,921,819),55136=>array(79,-62,921,819),55137=>array(79,-61,921,819),55138=>array(79,-69,921,819),55139=>array(79,-74,921,819),55140=>array(79,-69,921,819),55141=>array(79,-68,921,819),55142=>array(79,-72,921,819),55143=>array(79,-70,921,819),55144=>array(79,-66,921,819),55145=>array(79,-59,921,819),55146=>array(79,-60,921,819),55147=>array(79,-68,921,819),55148=>array(67,-69,907,842),55149=>array(65,-61,907,842),55150=>array(65,-61,907,842),55151=>array(65,-71,931,842),55152=>array(65,-46,907,842),55153=>array(65,-68,912,842),55154=>array(65,-76,907,842),55155=>array(65,-44,921,842),55156=>array(65,-62,917,842),55157=>array(65,-64,907,842),55158=>array(65,-64,908,842),55159=>array(65,-64,908,842),55160=>array(65,-69,923,842),55161=>array(65,-64,908,842),55162=>array(65,-64,908,842),55163=>array(65,-76,907,842),55164=>array(65,-62,907,842),55165=>array(65,-61,907,842),55166=>array(65,-69,922,842),55167=>array(65,-74,929,842),55168=>array(65,-69,927,842),55169=>array(65,-68,911,842),55170=>array(65,-72,929,842),55171=>array(65,-70,936,842),55172=>array(65,-66,908,842),55173=>array(65,-59,916,842),55174=>array(65,-60,928,842),55175=>array(65,-68,908,842),55176=>array(84,-69,907,842),55177=>array(101,-61,907,842),55178=>array(101,-61,907,842),55179=>array(101,-71,931,842),55180=>array(96,-46,907,842),55181=>array(101,-68,912,842),55182=>array(101,-76,907,842),55183=>array(101,-44,921,842),55184=>array(101,-62,917,842),55185=>array(101,-64,907,842),55186=>array(101,-64,908,842),55187=>array(101,-64,908,842),55188=>array(101,-69,923,842),55189=>array(101,-64,908,842),55190=>array(101,-64,908,842),55191=>array(101,-76,907,842),55192=>array(101,-62,907,842),55193=>array(101,-61,907,842),55194=>array(101,-69,922,842),55195=>array(101,-74,929,842),55196=>array(101,-69,927,842),55197=>array(101,-68,911,842),55198=>array(101,-72,929,842),55199=>array(101,-70,936,842),55200=>array(101,-66,908,842),55201=>array(101,-59,916,842),55202=>array(101,-60,928,842),55203=>array(101,-68,908,842),59393=>array(-54,0,248,634),59394=>array(20,-199,439,530),59395=>array(20,-199,439,530),59396=>array(-70,-12,436,716),59397=>array(-70,-12,436,716),59416=>array(7,637,299,1065),59492=>array(32,0,450,576),59495=>array(32,-1,452,577),59536=>array(38,0,459,770),59557=>array(-1,-221,404,556),59558=>array(-1,-221,481,393),59559=>array(62,-221,904,393),61441=>array(14,0,432,728),61442=>array(14,0,430,728),63232=>array(54,-5,477,560),63233=>array(-601,612,-216,775),63234=>array(-601,612,-216,800),63235=>array(-601,612,-171,800),63236=>array(-601,612,-216,800),63237=>array(-341,612,-283,785),63238=>array(-467,612,-173,819),63239=>array(-620,612,-180,810),63240=>array(-399,612,-226,785),63241=>array(-504,615,-192,832),63242=>array(-167,612,-109,785),63243=>array(-293,612,1,819),63244=>array(-342,612,98,810),63245=>array(-225,612,-52,785),63246=>array(-330,615,-18,832),63247=>array(54,-5,774,558),63248=>array(-563,631,-189,824),63249=>array(-422,609,-265,767),63250=>array(-623,603,-246,849),63251=>array(-274,858,-216,1031),63252=>array(-400,858,-106,1065),63253=>array(-449,858,-9,1056),63254=>array(-333,858,-159,1031),63255=>array(-437,861,-125,1078),63256=>array(-201,-206,-85,-34),63257=>array(-337,-206,-89,-34),63258=>array(-157,-115,-75,-33),63260=>array(111,-210,291,-73),63261=>array(17,-113,269,0),63744=>array(62,-12,931,835),63745=>array(48,-72,962,777),63746=>array(63,-71,935,832),63747=>array(66,-79,948,785),63748=>array(49,-62,926,811),63749=>array(123,-68,886,832),63750=>array(65,-51,902,840),63751=>array(37,-41,967,846),63752=>array(37,-41,967,846),63753=>array(43,-70,957,830),63754=>array(54,-21,960,856),63755=>array(112,-67,904,831),63756=>array(62,-62,960,848),63757=>array(32,-72,970,845),63758=>array(42,-67,985,854),63759=>array(38,-67,950,807),63760=>array(61,-80,954,835),63761=>array(33,-73,961,835),63762=>array(40,-71,973,822),63763=>array(52,-51,966,820),63764=>array(60,-64,959,847),63765=>array(57,-72,959,842),63766=>array(48,-75,968,839),63767=>array(45,-66,972,840),63768=>array(56,-68,970,835),63769=>array(51,-67,967,840),63770=>array(64,-62,972,839),63771=>array(49,-68,962,843),63772=>array(59,-71,883,815),63773=>array(35,-65,909,836),63774=>array(53,-70,923,830),63775=>array(72,-70,928,839),63776=>array(62,-67,958,846),63777=>array(59,-49,964,846),63778=>array(50,-73,964,837),63779=>array(56,-34,949,839),63780=>array(35,-68,952,836),63781=>array(49,-64,947,829),63782=>array(40,-65,956,848),63783=>array(47,-76,968,842),63784=>array(46,-60,949,837),63785=>array(49,-74,885,832),63786=>array(62,-63,962,829),63787=>array(37,-75,968,831),63788=>array(51,-65,930,832),63789=>array(63,-64,956,835),63790=>array(54,-71,966,849),63791=>array(52,-73,919,832),63792=>array(43,-67,954,835),63793=>array(30,-61,974,849),63794=>array(43,-71,954,830),63795=>array(40,-78,941,833),63796=>array(38,-39,923,832),63797=>array(59,-66,961,836),63798=>array(45,-77,929,841),63799=>array(29,-67,968,838),63800=>array(70,-62,965,817),63801=>array(51,-68,947,837),63802=>array(62,-67,948,849),63803=>array(36,-64,952,818),63804=>array(57,-69,958,840),63805=>array(34,-67,974,839),63806=>array(65,-52,935,840),63807=>array(57,-64,968,841),63808=>array(57,-67,949,829),63809=>array(55,-63,973,849),63810=>array(57,-24,950,849),63811=>array(48,-65,934,785),63812=>array(49,-62,964,855),63813=>array(43,-71,962,840),63814=>array(56,-65,944,833),63815=>array(52,-68,944,788),63816=>array(57,-63,976,839),63817=>array(105,-67,914,786),63818=>array(59,-28,949,783),63819=>array(46,-82,939,823),63820=>array(39,-70,949,831),63821=>array(48,-66,982,843),63822=>array(46,-67,956,800),63823=>array(51,-63,943,808),63824=>array(34,-65,942,839),63825=>array(99,-82,936,792),63826=>array(72,-65,917,829),63827=>array(68,-70,898,834),63828=>array(55,-65,973,833),63829=>array(41,-70,959,831),63830=>array(33,-57,967,835),63831=>array(34,-66,968,839),63832=>array(46,-65,954,831),63833=>array(95,-67,970,831),63834=>array(59,-66,961,841),63835=>array(60,-58,974,851),63836=>array(60,-64,959,847),63837=>array(53,-65,949,836),63838=>array(74,-73,939,777),63839=>array(69,-55,923,850),63840=>array(49,-25,959,830),63841=>array(72,-69,928,840),63842=>array(72,-74,926,784),63843=>array(45,-54,948,792),63844=>array(30,-55,956,850),63845=>array(42,-73,947,834),63846=>array(44,-67,970,843),63847=>array(71,-65,928,769),63848=>array(42,-32,972,829),63849=>array(60,-70,959,833),63850=>array(65,-69,946,835),63851=>array(30,-88,968,844),63852=>array(48,-30,949,830),63853=>array(53,-70,939,829),63854=>array(49,-70,965,839),63855=>array(57,-71,964,816),63856=>array(51,-72,967,824),63857=>array(57,-63,963,785),63858=>array(56,-73,946,824),63859=>array(45,-63,961,848),63860=>array(72,-65,931,827),63861=>array(41,-71,955,826),63862=>array(110,-66,962,839),63863=>array(65,-68,950,838),63864=>array(60,-68,953,783),63865=>array(63,-63,961,830),63866=>array(53,-68,956,808),63867=>array(40,-72,954,818),63868=>array(85,-61,963,820),63869=>array(53,-60,960,830),63870=>array(53,-30,947,789),63871=>array(27,-76,929,825),63872=>array(180,-77,840,772),63873=>array(86,-53,911,836),63874=>array(22,-62,961,846),63875=>array(33,-67,969,839),63876=>array(43,-71,967,841),63877=>array(32,-63,962,799),63878=>array(117,-65,907,790),63879=>array(26,-73,964,789),63880=>array(43,-67,952,814),63881=>array(49,-68,946,832),63882=>array(70,-56,863,824),63883=>array(37,-62,947,796),63884=>array(41,-67,930,779),63885=>array(50,-65,970,831),63886=>array(86,-68,917,841),63887=>array(36,-76,958,832),63888=>array(42,-54,961,841),63889=>array(37,-60,970,849),63890=>array(37,-56,963,833),63891=>array(52,-67,962,830),63892=>array(41,-64,962,833),63893=>array(47,-69,968,834),63894=>array(34,-66,967,839),63895=>array(42,-65,946,842),63896=>array(48,-62,944,831),63897=>array(37,-56,951,839),63898=>array(37,-56,951,830),63899=>array(18,-53,969,847),63900=>array(83,-76,901,832),63901=>array(67,-63,942,838),63902=>array(103,-64,898,785),63903=>array(58,-61,954,831),63904=>array(44,-73,955,828),63905=>array(57,-71,964,816),63906=>array(40,-59,966,839),63907=>array(30,-58,963,846),63908=>array(27,-64,961,853),63909=>array(40,-67,977,854),63910=>array(31,-53,963,854),63911=>array(36,-74,971,842),63912=>array(38,-67,961,846),63913=>array(105,-64,897,788),63914=>array(80,-68,917,844),63915=>array(40,-73,961,832),63916=>array(39,-68,962,840),63917=>array(37,-68,964,840),63918=>array(69,-19,935,839),63919=>array(22,-68,960,847),63920=>array(28,-62,966,854),63921=>array(35,-65,975,846),63922=>array(43,-63,961,810),63923=>array(74,-28,929,779),63924=>array(42,-68,955,839),63925=>array(41,-63,911,845),63926=>array(60,-69,952,833),63927=>array(51,-57,952,829),63928=>array(132,-64,882,789),63929=>array(62,-25,962,783),63930=>array(172,-41,829,773),63931=>array(41,-64,983,842),63932=>array(41,-64,970,838),63933=>array(52,-74,951,779),63934=>array(38,-68,956,836),63935=>array(60,-64,959,847),63936=>array(41,-73,969,850),63937=>array(46,-65,964,830),63938=>array(26,-76,972,829),63939=>array(37,-56,968,838),63940=>array(50,-66,970,833),63941=>array(57,-62,950,798),63942=>array(98,-68,935,788),63943=>array(44,-64,911,837),63944=>array(39,-61,959,832),63945=>array(34,-61,921,837),63946=>array(40,-70,964,830),63947=>array(45,-66,925,830),63948=>array(30,-70,960,830),63949=>array(75,-68,897,818),63950=>array(26,-70,964,830),63951=>array(34,-64,956,839),63952=>array(38,-67,960,828),63953=>array(62,-29,946,810),63954=>array(39,-77,962,835),63955=>array(103,-58,951,833),63956=>array(31,-71,976,855),63957=>array(33,-61,979,841),63958=>array(39,-58,991,856),63959=>array(52,-71,971,868),63960=>array(36,-67,954,830),63961=>array(38,-59,976,835),63962=>array(60,-65,957,788),63963=>array(72,-69,928,840),63964=>array(93,-60,959,848),63965=>array(57,-67,920,826),63966=>array(71,-76,947,824),63967=>array(29,-68,953,786),63968=>array(75,-67,866,782),63969=>array(51,-70,960,831),63970=>array(41,-68,950,823),63971=>array(56,-64,957,821),63972=>array(35,-16,945,775),63973=>array(46,-69,944,835),63974=>array(39,-64,949,788),63975=>array(43,-75,955,840),63976=>array(41,-64,954,821),63977=>array(52,-19,948,796),63978=>array(64,-73,957,834),63979=>array(118,-68,939,800),63980=>array(54,-60,927,803),63981=>array(52,-74,958,822),63982=>array(49,-68,958,833),63983=>array(57,-66,959,837),63984=>array(57,-65,949,832),63985=>array(100,-70,956,834),63986=>array(31,-68,959,843),63987=>array(26,-68,959,838),63988=>array(30,-69,954,829),63989=>array(28,-63,968,841),63990=>array(120,-65,932,841),63991=>array(95,-3,912,822),63992=>array(52,-17,945,838),63993=>array(37,-64,949,837),63994=>array(40,-69,951,818),63995=>array(57,-73,960,840),63996=>array(51,-68,959,833),63997=>array(48,-68,950,829),63998=>array(41,-68,968,831),63999=>array(71,-65,906,831),64000=>array(44,-73,897,797),64001=>array(46,-68,950,826),64002=>array(53,-63,936,826),64003=>array(42,-69,952,827),64004=>array(70,-38,942,833),64005=>array(48,-55,898,819),64006=>array(47,-65,953,815),64007=>array(46,-74,941,827),64008=>array(51,-62,941,845),64009=>array(101,-68,955,846),64010=>array(58,-66,944,789),64011=>array(35,-65,942,837),64012=>array(49,-55,942,754),64013=>array(57,-70,964,827),64014=>array(45,-62,955,843),64015=>array(41,-65,969,830),64016=>array(41,-60,968,807),64017=>array(77,-62,953,828),64018=>array(89,-55,952,838),64019=>array(37,-71,948,828),64020=>array(37,-67,976,831),64021=>array(31,-69,973,831),64022=>array(49,-56,921,836),64023=>array(45,-22,947,840),64024=>array(42,-59,961,820),64025=>array(55,-67,904,837),64026=>array(39,-68,956,843),64027=>array(38,-69,943,834),64028=>array(41,-66,952,840),64029=>array(45,-66,954,837),64030=>array(73,-50,892,785),64031=>array(30,-68,935,839),64032=>array(40,-68,969,832),64033=>array(39,-19,946,826),64034=>array(59,-66,948,835),64035=>array(31,-69,953,829),64036=>array(37,-60,961,808),64037=>array(36,-54,957,835),64038=>array(44,-67,943,835),64039=>array(33,-70,949,839),64040=>array(33,-64,959,839),64041=>array(94,-71,936,842),64042=>array(34,-69,964,839),64043=>array(34,-68,906,839),64044=>array(34,-64,931,839),64045=>array(40,-65,938,837),64256=>array(13,0,569,728),64257=>array(14,0,432,728),64258=>array(14,0,430,728),64259=>array(42,0,709,728),64260=>array(13,0,680,728),64261=>array(67,-7,521,728),64262=>array(31,-12,750,700),64275=>array(44,-9,751,618),64276=>array(44,-8,749,609),64277=>array(44,-210,752,609),64278=>array(43,-210,749,609),64279=>array(44,-210,844,609),64286=>array(22,568,311,695),64287=>array(16,162,522,530),64288=>array(32,-12,503,518),64289=>array(58,0,652,518),64290=>array(24,0,619,518),64291=>array(72,0,662,530),64292=>array(38,-12,598,530),64293=>array(33,-12,557,716),64294=>array(72,0,662,518),64295=>array(20,0,565,530),64296=>array(19,-13,726,530),64297=>array(55,0,529,278),64298=>array(72,-12,674,634),64299=>array(72,-12,674,634),64300=>array(72,-12,674,634),64301=>array(72,-12,674,634),64302=>array(60,-104,517,518),64303=>array(60,-144,517,518),64304=>array(60,0,517,518),64305=>array(38,0,533,530),64306=>array(20,0,386,530),64307=>array(24,0,482,518),64308=>array(72,0,526,530),64309=>array(16,0,248,530),64310=>array(-9,0,306,543),64312=>array(68,-12,532,530),64313=>array(16,258,248,530),64314=>array(20,-199,439,530),64315=>array(38,-12,469,530),64316=>array(33,-12,436,716),64318=>array(30,0,526,530),64320=>array(38,0,270,530),64321=>array(25,-12,546,530),64323=>array(45,-199,499,530),64324=>array(37,-12,511,530),64326=>array(45,0,477,518),64327=>array(72,-199,535,518),64328=>array(20,0,439,530),64329=>array(72,-12,674,518),64330=>array(21,-13,565,530),64331=>array(16,0,248,634),64332=>array(38,0,533,622),64333=>array(38,-12,469,622),64334=>array(37,-12,511,622),64335=>array(33,0,517,716),64336=>array(-15,0,256,927),64337=>array(-15,0,274,927),64338=>array(62,-275,709,265),64339=>array(62,-279,789,265),64340=>array(-1,-252,194,284),64341=>array(-1,-256,244,284),64342=>array(62,-270,709,265),64343=>array(62,-270,789,265),64344=>array(-1,-228,233,284),64345=>array(-1,-228,244,284),64346=>array(62,-270,709,265),64347=>array(62,-270,789,265),64348=>array(-1,-242,210,284),64349=>array(-1,-242,244,284),64350=>array(62,-50,709,568),64351=>array(62,-50,789,568),64352=>array(-1,0,194,616),64353=>array(-1,0,244,616),64354=>array(62,-50,709,569),64355=>array(62,-50,789,569),64356=>array(-1,0,222,618),64357=>array(-1,0,244,618),64358=>array(62,-50,709,569),64359=>array(62,-50,789,569),64360=>array(-1,0,245,618),64361=>array(-1,0,244,618),64362=>array(62,0,895,859),64363=>array(62,-33,904,697),64364=>array(-1,0,404,860),64365=>array(-1,0,481,697),64366=>array(62,0,895,890),64367=>array(62,-33,904,727),64368=>array(-1,0,404,890),64369=>array(-1,0,481,727),64370=>array(52,-271,564,453),64371=>array(54,-271,659,453),64372=>array(-1,-236,567,453),64373=>array(-1,-236,638,453),64374=>array(52,-271,564,453),64375=>array(54,-271,659,453),64376=>array(-1,-105,567,453),64377=>array(-1,-105,638,453),64378=>array(52,-271,564,453),64379=>array(54,-271,659,453),64380=>array(-1,-208,567,453),64381=>array(-1,-208,638,453),64382=>array(52,-271,564,453),64383=>array(54,-271,659,453),64384=>array(-1,-236,567,453),64385=>array(-1,-237,638,453),64386=>array(38,-140,368,437),64387=>array(38,-140,459,436),64388=>array(38,0,368,614),64389=>array(38,0,459,638),64390=>array(38,0,368,716),64391=>array(38,0,459,740),64392=>array(38,0,368,746),64393=>array(38,0,459,770),64394=>array(-74,-210,362,554),64395=>array(-74,-210,437,544),64396=>array(-74,-210,369,584),64397=>array(-74,-210,437,574),64398=>array(62,0,827,717),64399=>array(62,0,943,717),64400=>array(-1,0,432,717),64401=>array(-1,0,548,717),64402=>array(62,0,827,793),64403=>array(62,0,943,793),64404=>array(-1,0,432,793),64405=>array(-1,0,548,793),64406=>array(62,-256,827,793),64407=>array(62,-257,943,793),64408=>array(-1,-252,432,793),64409=>array(-1,-256,548,793),64410=>array(62,0,827,839),64411=>array(62,0,943,839),64412=>array(-1,0,432,839),64413=>array(-1,0,548,839),64414=>array(62,-121,630,272),64415=>array(39,-228,724,183),64416=>array(62,-121,630,568),64417=>array(39,-228,724,568),64418=>array(-1,0,245,618),64419=>array(-1,0,244,618),64420=>array(62,-6,452,705),64421=>array(62,0,478,705),64422=>array(62,-6,452,431),64423=>array(2,-85,510,159),64424=>array(-1,-242,194,284),64425=>array(-1,-264,428,196),64426=>array(29,-15,644,593),64427=>array(29,-15,707,593),64428=>array(-1,0,624,593),64429=>array(-1,0,687,593),64430=>array(71,-221,684,297),64431=>array(62,-221,675,95),64432=>array(71,-221,684,473),64433=>array(62,-221,675,363),64467=>array(62,0,689,817),64468=>array(34,0,734,817),64469=>array(-1,0,432,889),64470=>array(-1,0,548,889),64471=>array(-108,-210,408,766),64472=>array(-111,-210,467,704),64473=>array(-108,-210,408,696),64474=>array(-111,-210,467,628),64475=>array(-108,-210,408,789),64476=>array(-111,-210,467,725),64477=>array(-108,-210,441,755),64478=>array(-108,-210,408,750),64479=>array(-111,-210,467,685),64480=>array(-108,-210,408,476),64481=>array(-111,-210,467,379),64482=>array(-108,-210,408,705),64483=>array(-111,-210,467,641),64484=>array(10,-279,730,453),64485=>array(33,-279,935,126),64486=>array(-1,-239,194,284),64487=>array(-1,-239,244,284),64488=>array(-1,0,194,284),64489=>array(-1,0,244,284),64490=>array(79,0,475,716),64491=>array(79,0,518,716),64492=>array(2,-85,710,569),64493=>array(2,-85,754,569),64494=>array(-111,-210,667,569),64495=>array(-111,-210,711,569),64496=>array(-111,-210,667,704),64497=>array(-111,-210,711,704),64498=>array(-111,-210,667,628),64499=>array(-111,-210,711,628),64500=>array(-111,-210,667,725),64501=>array(-111,-210,711,725),64502=>array(33,-279,1135,569),64503=>array(33,-279,1178,569),64504=>array(-1,-256,445,569),64505=>array(34,-270,995,569),64506=>array(34,-270,1038,569),64507=>array(-1,0,445,569),64508=>array(32,-121,679,453),64509=>array(34,-270,794,126),64510=>array(-1,-140,217,284),64511=>array(-1,-140,244,284),64512=>array(54,-271,860,569),64513=>array(54,-271,860,569),64514=>array(58,-265,842,569),64515=>array(34,-270,995,569),64516=>array(34,-265,1005,569),64517=>array(54,-271,853,453),64518=>array(54,-271,853,453),64519=>array(54,-271,853,621),64520=>array(58,-265,834,359),64521=>array(34,-270,988,284),64522=>array(34,-265,998,284),64523=>array(54,-271,876,486),64524=>array(54,-271,876,486),64525=>array(54,-271,876,621),64526=>array(58,-265,858,486),64527=>array(34,-270,1011,486),64528=>array(34,-265,1021,486),64529=>array(54,-271,876,588),64530=>array(58,-265,858,588),64531=>array(34,-270,1011,588),64532=>array(34,-265,1021,588),64533=>array(54,-271,1226,453),64534=>array(58,-265,1208,453),64535=>array(54,-271,1226,453),64536=>array(58,-265,1208,453),64537=>array(54,-271,1226,610),64538=>array(54,-271,1226,610),64539=>array(58,-265,1208,610),64540=>array(54,-271,1350,453),64541=>array(54,-271,1350,453),64542=>array(54,-271,1350,621),64543=>array(58,-265,1332,359),64544=>array(54,-271,1415,453),64545=>array(58,-265,1397,436),64546=>array(54,-271,1415,522),64547=>array(54,-271,1415,522),64548=>array(54,-271,1415,621),64549=>array(58,-265,1397,522),64550=>array(54,-271,1331,686),64551=>array(58,-265,1313,686),64552=>array(58,-265,1313,686),64553=>array(54,-271,1183,492),64554=>array(58,-265,1165,492),64555=>array(54,-271,1183,716),64556=>array(58,-265,1165,716),64557=>array(54,-271,1063,773),64558=>array(54,-271,1063,773),64559=>array(54,-271,1063,773),64560=>array(58,-265,1045,773),64561=>array(34,-270,1198,773),64562=>array(34,-265,1208,773),64563=>array(54,-271,1063,758),64564=>array(58,-265,1045,758),64565=>array(34,-270,1198,758),64566=>array(34,-265,1208,758),64567=>array(79,0,706,717),64568=>array(54,-271,1091,717),64569=>array(54,-271,1091,717),64570=>array(54,-271,1091,717),64571=>array(34,-228,1106,717),64572=>array(58,-265,1073,717),64573=>array(34,-270,1226,717),64574=>array(34,-265,1236,717),64575=>array(54,-271,853,716),64576=>array(54,-271,853,716),64577=>array(54,-271,853,716),64578=>array(58,-265,835,716),64579=>array(34,-270,988,716),64580=>array(34,-265,998,716),64581=>array(54,-271,1078,453),64582=>array(54,-271,1078,453),64583=>array(54,-271,1078,621),64584=>array(58,-265,1060,359),64585=>array(34,-270,1213,359),64586=>array(34,-265,1223,359),64587=>array(54,-271,853,501),64588=>array(54,-271,853,501),64589=>array(54,-271,853,621),64590=>array(58,-265,835,501),64591=>array(34,-270,988,501),64592=>array(34,-265,998,501),64593=>array(54,-271,1283,593),64594=>array(58,-265,1265,593),64595=>array(34,-270,1418,593),64596=>array(34,-265,1428,593),64597=>array(54,-271,876,453),64598=>array(54,-271,876,453),64599=>array(54,-271,876,621),64600=>array(58,-265,858,359),64601=>array(34,-270,1011,284),64602=>array(34,-265,1021,284),64603=>array(38,0,368,889),64604=>array(-74,-210,357,609),64605=>array(32,-121,679,505),64606=>array(4,521,299,990),64607=>array(7,618,299,990),64608=>array(7,648,299,990),64609=>array(4,521,299,990),64610=>array(7,770,299,990),64611=>array(7,588,299,1053),64612=>array(-74,-210,681,569),64613=>array(-74,-210,681,569),64614=>array(58,-265,885,569),64615=>array(39,-228,968,569),64616=>array(34,-270,1038,569),64617=>array(34,-265,1048,569),64618=>array(-74,-210,681,284),64619=>array(-74,-210,681,458),64620=>array(58,-265,885,359),64621=>array(39,-228,968,356),64622=>array(34,-270,1038,284),64623=>array(34,-265,1048,284),64624=>array(-74,-210,681,486),64625=>array(-74,-210,681,486),64626=>array(58,-265,885,486),64627=>array(39,-228,968,486),64628=>array(34,-270,1038,486),64629=>array(34,-265,1048,486),64630=>array(-74,-210,681,588),64631=>array(-74,-210,681,588),64632=>array(58,-265,885,588),64633=>array(39,-228,968,588),64634=>array(34,-270,1038,588),64635=>array(34,-265,1048,588),64636=>array(34,-270,1275,610),64637=>array(34,-265,1285,610),64638=>array(34,-270,1275,595),64639=>array(34,-265,1285,595),64640=>array(79,0,822,717),64641=>array(34,-228,1222,717),64642=>array(58,-265,1189,717),64643=>array(34,-270,1342,717),64644=>array(34,-265,1352,717),64645=>array(58,-265,885,716),64646=>array(34,-270,1038,716),64647=>array(34,-265,1048,716),64648=>array(79,0,807,716),64649=>array(58,-265,1174,359),64650=>array(-74,-210,681,501),64651=>array(-74,-210,681,501),64652=>array(58,-265,885,501),64653=>array(39,-228,968,501),64654=>array(34,-270,1038,501),64655=>array(34,-265,1048,501),64656=>array(34,-270,794,301),64657=>array(-74,-210,681,284),64658=>array(-74,-210,681,458),64659=>array(58,-265,885,359),64660=>array(39,-228,968,356),64661=>array(34,-270,1038,284),64662=>array(34,-265,1048,284),64663=>array(-1,-140,839,569),64664=>array(-1,0,839,569),64665=>array(-1,0,839,612),64666=>array(-1,0,734,569),64667=>array(-1,-269,606,569),64668=>array(-1,-140,832,453),64669=>array(-1,-140,832,453),64670=>array(-1,-140,832,612),64671=>array(-1,-140,727,359),64672=>array(-1,-269,600,376),64673=>array(-1,-140,855,486),64674=>array(-1,0,855,486),64675=>array(-1,0,855,612),64676=>array(-1,0,750,486),64677=>array(-1,-269,623,486),64678=>array(-1,0,750,588),64679=>array(-1,-80,1205,453),64680=>array(-1,-80,1100,453),64681=>array(-1,-140,1205,453),64682=>array(-1,0,1100,453),64683=>array(-1,-140,1205,610),64684=>array(-1,0,1100,610),64685=>array(-1,-140,1329,453),64686=>array(-1,0,1329,453),64687=>array(-1,0,1329,612),64688=>array(-1,0,1224,359),64689=>array(-1,0,1394,453),64690=>array(-1,0,1394,612),64691=>array(-1,0,1289,436),64692=>array(-1,-140,1394,522),64693=>array(-1,0,1394,522),64694=>array(-1,0,1394,612),64695=>array(-1,0,1289,522),64696=>array(-1,0,1310,686),64697=>array(-1,0,1205,686),64698=>array(-1,-140,1162,492),64699=>array(-1,0,1057,492),64700=>array(-1,-140,1162,716),64701=>array(-1,0,1057,716),64702=>array(-1,-140,1042,773),64703=>array(-1,0,1042,773),64704=>array(-1,0,1042,773),64705=>array(-1,0,937,773),64706=>array(-1,0,1042,758),64707=>array(-1,0,937,758),64708=>array(-1,-140,1070,717),64709=>array(-1,0,1070,717),64710=>array(-1,0,1070,717),64711=>array(-1,0,676,717),64712=>array(-1,0,965,717),64713=>array(-1,-140,832,716),64714=>array(-1,0,832,716),64715=>array(-1,0,832,716),64716=>array(-1,0,727,716),64717=>array(-1,-269,600,716),64718=>array(-1,-140,1057,453),64719=>array(-1,0,1057,453),64720=>array(-1,0,1057,612),64721=>array(-1,0,952,359),64722=>array(-1,-140,832,501),64723=>array(-1,0,832,501),64724=>array(-1,0,832,612),64725=>array(-1,0,727,501),64726=>array(-1,-269,600,501),64727=>array(-1,-140,1262,593),64728=>array(-1,0,1157,593),64729=>array(-1,0,624,912),64730=>array(-1,-140,855,453),64731=>array(-1,-140,855,453),64732=>array(-1,-140,855,612),64733=>array(-1,-140,750,359),64734=>array(-1,-269,623,376),64735=>array(-1,0,777,569),64736=>array(-1,-269,650,569),64737=>array(-1,-140,777,359),64738=>array(-1,-269,650,376),64739=>array(-1,0,777,486),64740=>array(-1,-269,650,486),64741=>array(-1,0,777,588),64742=>array(-1,-269,650,588),64743=>array(-1,0,1304,359),64744=>array(-1,-269,1177,376),64745=>array(-1,0,1304,604),64746=>array(-1,-269,1177,604),64747=>array(-1,0,792,717),64748=>array(-1,0,1081,717),64749=>array(-1,0,777,716),64750=>array(-1,0,777,501),64751=>array(-1,-269,650,501),64752=>array(-1,-140,777,359),64753=>array(-1,-269,650,376),64754=>array(-1,0,307,1058),64755=>array(-1,0,303,990),64756=>array(-1,0,299,1054),64757=>array(34,-270,1466,686),64758=>array(34,-265,1476,686),64759=>array(34,-270,1318,492),64760=>array(34,-265,1328,492),64761=>array(34,-270,1318,716),64762=>array(34,-265,1328,716),64763=>array(34,-270,1485,346),64764=>array(34,-265,1495,346),64765=>array(34,-270,1485,604),64766=>array(34,-265,1495,604),64767=>array(34,-270,1361,453),64768=>array(34,-265,1371,453),64769=>array(34,-270,1361,453),64770=>array(34,-265,1371,453),64771=>array(34,-270,1361,610),64772=>array(34,-265,1371,610),64773=>array(34,-270,1550,436),64774=>array(34,-265,1560,436),64775=>array(34,-270,1550,522),64776=>array(34,-265,1560,522),64777=>array(54,-271,1350,604),64778=>array(54,-271,1350,604),64779=>array(54,-271,1350,621),64780=>array(58,-265,1332,604),64781=>array(-74,-210,1128,604),64782=>array(-74,-210,1128,346),64783=>array(-74,-210,1193,436),64784=>array(-74,-210,1193,522),64785=>array(34,-270,1528,686),64786=>array(34,-265,1538,686),64787=>array(34,-270,1349,407),64788=>array(34,-265,1359,407),64789=>array(34,-270,1349,624),64790=>array(34,-265,1359,624),64791=>array(34,-270,1565,346),64792=>array(34,-265,1575,346),64793=>array(34,-270,1565,604),64794=>array(34,-265,1575,604),64795=>array(34,-270,1432,453),64796=>array(34,-265,1442,453),64797=>array(34,-270,1432,453),64798=>array(34,-265,1442,453),64799=>array(34,-270,1432,612),64800=>array(34,-265,1442,612),64801=>array(34,-270,1612,436),64802=>array(34,-265,1622,436),64803=>array(34,-270,1612,522),64804=>array(34,-265,1622,522),64805=>array(54,-271,1430,604),64806=>array(54,-271,1430,604),64807=>array(54,-271,1430,621),64808=>array(58,-265,1412,604),64809=>array(-74,-210,1208,604),64810=>array(-74,-210,1208,346),64811=>array(-74,-210,1255,436),64812=>array(-74,-210,1255,522),64813=>array(-1,-140,1329,604),64814=>array(-1,0,1329,604),64815=>array(-1,0,1329,612),64816=>array(-1,0,1224,604),64817=>array(-1,-269,1097,376),64818=>array(-1,-269,1097,604),64819=>array(-1,0,1205,686),64820=>array(-1,-140,1409,453),64821=>array(-1,0,1409,453),64822=>array(-1,0,1409,612),64823=>array(-1,-140,1409,604),64824=>array(-1,0,1409,604),64825=>array(-1,0,1409,612),64826=>array(-1,0,1267,686),64827=>array(-1,0,1267,686),64828=>array(79,0,615,944),64829=>array(79,0,615,944),64830=>array(82,-218,445,790),64831=>array(155,-218,518,790),64848=>array(-1,-140,1389,486),64849=>array(54,-271,1542,486),64850=>array(-1,-140,1494,486),64851=>array(-1,0,1389,486),64852=>array(-1,0,1389,612),64853=>array(-1,-140,1389,486),64854=>array(-1,0,1389,486),64855=>array(-1,0,1389,612),64856=>array(54,-271,1831,453),64857=>array(-1,-80,1738,453),64858=>array(34,-265,1976,453),64859=>array(34,-270,1965,453),64860=>array(-1,-140,1967,453),64861=>array(-1,-140,1967,453),64862=>array(34,-270,2203,453),64863=>array(54,-271,1963,453),64864=>array(-1,0,1862,453),64865=>array(-1,-140,1862,453),64866=>array(58,-265,1945,359),64867=>array(-1,0,1757,359),64868=>array(54,-271,2115,453),64869=>array(-1,0,2032,453),64870=>array(58,-265,1992,436),64871=>array(58,-265,2050,604),64872=>array(-1,0,1862,604),64873=>array(34,-265,2213,604),64874=>array(54,-271,1963,621),64875=>array(-1,0,1862,612),64876=>array(58,-265,1945,604),64877=>array(-1,0,1757,604),64878=>array(34,-270,2250,522),64879=>array(58,-265,2097,612),64880=>array(-1,0,1927,612),64881=>array(54,-271,1926,686),64882=>array(-1,0,1843,686),64883=>array(-1,0,1738,686),64884=>array(34,-265,2071,686),64885=>array(58,-265,1834,453),64886=>array(58,-265,1729,407),64887=>array(-1,0,1590,492),64888=>array(34,-270,1882,407),64889=>array(58,-265,1729,624),64890=>array(34,-265,1893,624),64891=>array(34,-270,1882,624),64892=>array(58,-265,1760,612),64893=>array(-1,0,1575,773),64894=>array(54,-271,1671,595),64895=>array(58,-265,1655,595),64896=>array(58,-265,1523,716),64897=>array(34,-265,1687,716),64898=>array(34,-270,1676,716),64899=>array(-1,-140,1470,716),64900=>array(54,-271,1542,716),64901=>array(58,-265,1523,716),64902=>array(-1,0,1365,716),64903=>array(54,-271,1437,716),64904=>array(-1,0,1365,716),64905=>array(-1,-140,1695,453),64906=>array(-1,0,1590,453),64907=>array(34,-265,1976,453),64908=>array(-1,-140,1695,453),64909=>array(-1,-140,1590,453),64910=>array(-1,-140,1695,612),64911=>array(-1,0,1590,612),64914=>array(-1,-140,1695,612),64915=>array(-1,-140,1795,593),64916=>array(-1,0,1690,593),64917=>array(-1,0,1365,501),64918=>array(34,-270,1676,501),64919=>array(58,-265,1523,501),64920=>array(-1,-140,1365,501),64921=>array(34,-270,1676,501),64922=>array(34,-265,1582,501),64923=>array(34,-270,1571,501),64924=>array(58,-265,1418,359),64925=>array(-1,-140,1284,359),64926=>array(34,-265,1687,612),64927=>array(34,-265,1687,486),64928=>array(34,-270,1676,486),64929=>array(34,-265,1687,612),64930=>array(34,-270,1676,612),64931=>array(34,-265,1582,486),64932=>array(34,-270,1571,486),64933=>array(34,-265,1976,453),64934=>array(34,-270,2070,453),64935=>array(34,-270,1965,453),64936=>array(34,-270,2203,612),64937=>array(34,-265,2260,453),64938=>array(34,-265,2213,604),64939=>array(34,-265,2260,522),64940=>array(34,-265,1687,716),64941=>array(34,-265,1582,716),64942=>array(34,-265,1687,453),64943=>array(34,-265,1687,453),64944=>array(34,-265,1582,359),64945=>array(34,-265,1871,359),64946=>array(34,-265,1818,595),64947=>array(34,-265,1687,501),64948=>array(-1,0,1575,758),64949=>array(-1,0,1365,716),64950=>array(34,-265,1893,407),64951=>array(34,-265,1885,717),64952=>array(-1,-140,1470,501),64953=>array(34,-265,1976,612),64954=>array(-1,-140,1365,716),64955=>array(58,-265,1722,717),64956=>array(58,-265,1523,716),64957=>array(54,-271,1542,501),64958=>array(34,-265,2081,453),64959=>array(34,-265,2081,453),64960=>array(34,-265,1976,453),64961=>array(34,-265,1818,610),64962=>array(34,-265,1687,453),64963=>array(-1,0,1499,717),64964=>array(-1,-140,1695,492),64965=>array(-1,0,1822,436),64966=>array(34,-265,2213,612),64967=>array(34,-265,1687,501),65008=>array(62,-221,1462,716),65009=>array(62,-221,1110,758),65010=>array(52,0,1077,1015),65011=>array(-74,-210,1277,717),65012=>array(38,0,2049,453),65013=>array(58,-265,2196,716),65014=>array(34,-210,2066,716),65015=>array(62,-140,1490,716),65016=>array(58,-265,1984,716),65017=>array(34,-270,1794,716),65018=>array(77,-156,1842,762),65019=>array(74,-37,1003,826),65056=>array(55,604,450,726),65057=>array(0,604,395,726),65058=>array(55,604,450,726),65059=>array(0,604,395,726),65072=>array(446,87,554,679),65073=>array(461,-121,539,887),65074=>array(461,229,539,537),65075=>array(-5,-121,73,887),65076=>array(0,-118,118,885),65077=>array(45,39,952,277),65078=>array(47,558,954,796),65079=>array(43,31,956,281),65080=>array(43,548,956,798),65081=>array(41,19,960,294),65082=>array(40,543,959,818),65083=>array(45,18,950,306),65084=>array(47,530,952,818),65085=>array(47,-32,953,416),65086=>array(47,420,953,868),65087=>array(47,-2,953,325),65088=>array(47,511,953,838),65089=>array(48,18,952,358),65090=>array(48,473,952,818),65091=>array(48,-12,952,359),65092=>array(48,475,952,848),65097=>array(75,761,925,801),65098=>array(75,731,925,829),65099=>array(-1,771,1001,889),65100=>array(-2,656,1001,884),65101=>array(75,-29,925,11),65102=>array(75,-49,925,49),65103=>array(-1,-112,1001,6),65104=>array(50,-85,114,60),65105=>array(33,109,172,224),65106=>array(53,0,113,60),65108=>array(50,-85,114,311),65109=>array(54,0,114,311),65110=>array(28,0,305,437),65111=>array(51,0,116,430),65112=>array(-4,134,604,177),65113=>array(36,-126,178,437),65114=>array(22,-126,164,437),65115=>array(17,-126,186,437),65116=>array(14,-126,184,437),65117=>array(41,-119,184,430),65118=>array(16,-119,159,430),65119=>array(7,-7,327,437),65120=>array(26,-10,386,437),65121=>array(20,254,214,437),65122=>array(33,70,317,354),65123=>array(19,129,181,182),65124=>array(33,67,317,357),65125=>array(33,67,317,357),65126=>array(33,122,317,302),65128=>array(0,-14,167,430),65129=>array(23,-62,307,469),65130=>array(44,-16,491,437),65131=>array(34,-126,589,437),65136=>array(10,716,290,944),65137=>array(-1,0,299,944),65138=>array(4,716,292,990),65140=>array(8,-255,288,-78),65142=>array(10,716,290,859),65143=>array(-1,0,299,859),65144=>array(4,716,292,990),65145=>array(-1,0,303,990),65146=>array(8,-170,288,-78),65147=>array(-1,-170,297,95),65148=>array(7,716,299,936),65149=>array(-1,0,307,936),65150=>array(3,767,151,915),65151=>array(-1,0,155,915),65152=>array(54,0,469,422),65153=>array(-23,0,270,846),65154=>array(-23,0,274,846),65155=>array(46,0,188,933),65156=>array(46,0,274,933),65157=>array(-108,-210,408,762),65158=>array(-111,-210,467,664),65159=>array(46,-285,188,716),65160=>array(46,-285,274,716),65161=>array(32,-121,679,453),65162=>array(34,-270,794,301),65163=>array(-1,0,201,569),65164=>array(-1,0,244,569),65165=>array(79,0,164,716),65166=>array(79,0,274,716),65167=>array(62,-190,709,265),65168=>array(62,-190,789,265),65169=>array(-1,-140,194,284),65170=>array(-1,-140,244,284),65171=>array(62,-6,452,633),65172=>array(62,0,478,628),65173=>array(62,-50,709,437),65174=>array(62,-50,789,437),65175=>array(-1,0,217,486),65176=>array(-1,0,244,486),65177=>array(62,-50,709,539),65178=>array(62,-50,789,539),65179=>array(-1,0,217,588),65180=>array(-1,0,244,588),65181=>array(52,-271,564,453),65182=>array(54,-271,659,453),65183=>array(-1,-80,567,453),65184=>array(-1,-140,638,453),65185=>array(52,-271,564,453),65186=>array(54,-271,659,453),65187=>array(-1,0,567,453),65188=>array(-1,0,638,453),65189=>array(52,-271,564,621),65190=>array(54,-271,659,621),65191=>array(-1,0,567,610),65192=>array(-1,0,638,612),65193=>array(38,0,368,437),65194=>array(38,0,459,436),65195=>array(38,0,368,629),65196=>array(38,0,459,653),65197=>array(-74,-210,357,290),65198=>array(-74,-210,437,239),65199=>array(-74,-210,357,470),65200=>array(-74,-210,437,458),65201=>array(39,-228,1115,346),65202=>array(39,-228,1195,346),65203=>array(-1,0,691,346),65204=>array(-1,0,771,346),65205=>array(39,-228,1115,604),65206=>array(39,-228,1195,604),65207=>array(-1,0,691,604),65208=>array(-1,0,771,604),65209=>array(39,-228,1230,436),65210=>array(39,-228,1292,436),65211=>array(-1,0,756,436),65212=>array(-1,0,818,436),65213=>array(39,-228,1230,532),65214=>array(39,-228,1292,532),65215=>array(-1,0,756,522),65216=>array(-1,0,818,522),65217=>array(59,0,782,686),65218=>array(59,0,844,686),65219=>array(-1,0,672,686),65220=>array(-1,0,734,686),65221=>array(59,0,782,686),65222=>array(59,0,844,686),65223=>array(-1,0,672,686),65224=>array(-1,0,734,686),65225=>array(53,-271,565,492),65226=>array(55,-271,567,443),65227=>array(-1,0,524,492),65228=>array(-3,0,555,407),65229=>array(53,-271,565,725),65230=>array(55,-271,567,660),65231=>array(-1,0,524,716),65232=>array(-3,0,555,624),65233=>array(62,0,895,773),65234=>array(62,-33,904,610),65235=>array(-1,0,404,773),65236=>array(-1,0,481,610),65237=>array(34,-214,738,678),65238=>array(39,-271,824,557),65239=>array(-1,0,404,758),65240=>array(-1,0,481,595),65241=>array(62,0,689,716),65242=>array(34,0,734,716),65243=>array(-1,0,432,717),65244=>array(-1,0,548,717),65245=>array(34,-121,594,716),65246=>array(34,-228,674,716),65247=>array(-1,0,194,716),65248=>array(-1,0,244,716),65249=>array(58,-265,527,359),65250=>array(58,-265,641,359),65251=>array(-1,0,419,359),65252=>array(-1,0,533,359),65253=>array(62,-121,630,458),65254=>array(39,-228,724,356),65255=>array(-1,0,194,501),65256=>array(-1,0,244,501),65257=>array(62,-6,452,431),65258=>array(62,0,478,446),65259=>array(-1,0,624,593),65260=>array(-1,-269,406,376),65261=>array(-108,-210,408,476),65262=>array(-111,-210,467,379),65263=>array(32,-121,679,453),65264=>array(34,-270,794,126),65265=>array(32,-238,679,453),65266=>array(34,-265,804,146),65267=>array(-1,-140,217,284),65268=>array(-1,-140,244,284),65269=>array(-122,-78,474,862),65270=>array(-121,-78,604,862),65271=>array(-27,-78,474,862),65272=>array(-27,-78,604,862),65273=>array(8,-171,474,716),65274=>array(8,-172,604,716),65275=>array(8,-78,474,716),65276=>array(8,-78,604,716),65281=>array(446,0,555,716),65282=>array(363,462,635,716),65283=>array(234,-12,768,728),65284=>array(263,-103,736,782),65285=>array(128,-27,874,728),65286=>array(199,-17,800,728),65287=>array(447,462,547,716),65288=>array(382,-210,619,728),65289=>array(382,-210,619,728),65290=>array(338,423,661,728),65291=>array(264,116,738,590),65292=>array(447,-141,553,100),65293=>array(366,215,635,303),65294=>array(448,0,548,100),65295=>array(361,-24,639,716),65296=>array(266,-12,732,719),65297=>array(367,0,631,719),65298=>array(263,0,737,719),65299=>array(267,-12,736,719),65300=>array(253,0,748,716),65301=>array(263,-12,737,706),65302=>array(265,-12,737,719),65303=>array(269,0,732,706),65304=>array(265,-12,736,719),65305=>array(266,-12,736,719),65306=>array(449,0,549,518),65307=>array(447,-141,553,518),65308=>array(263,111,737,595),65309=>array(263,203,737,503),65310=>array(263,111,737,595),65311=>array(269,0,731,728),65312=>array(37,-210,962,729),65313=>array(166,0,835,716),65314=>array(229,0,770,716),65315=>array(184,-12,816,728),65316=>array(204,0,796,716),65317=>array(232,0,767,716),65318=>array(258,0,741,716),65319=>array(169,-12,831,728),65320=>array(219,0,781,716),65321=>array(452,0,547,716),65322=>array(304,-12,697,716),65323=>array(204,0,796,716),65324=>array(276,0,724,716),65325=>array(159,0,840,716),65326=>array(218,0,781,716),65327=>array(157,-12,842,728),65328=>array(227,0,773,716),65329=>array(151,-56,849,728),65330=>array(184,0,815,716),65331=>array(215,-12,785,728),65332=>array(216,0,783,716),65333=>array(218,-12,781,716),65334=>array(173,0,827,716),65335=>array(39,0,960,716),65336=>array(172,0,828,716),65337=>array(172,0,828,716),65338=>array(217,0,783,716),65339=>array(403,-199,597,716),65340=>array(361,-24,639,716),65341=>array(403,-199,597,716),65342=>array(291,325,708,716),65343=>array(244,-125,756,-75),65344=>array(410,591,590,728),65345=>array(261,-12,739,530),65346=>array(275,-12,725,716),65347=>array(274,-12,726,530),65348=>array(275,-12,725,716),65349=>array(261,-12,739,530),65350=>array(348,0,651,728),65351=>array(271,-210,728,530),65352=>array(288,0,711,716),65353=>array(456,0,544,716),65354=>array(400,-209,600,716),65355=>array(285,0,715,716),65356=>array(456,0,544,716),65357=>array(148,0,852,530),65358=>array(289,0,711,530),65359=>array(257,-12,743,530),65360=>array(275,-199,725,530),65361=>array(275,-199,725,530),65362=>array(359,0,641,530),65363=>array(285,-12,715,530),65364=>array(374,-7,626,700),65365=>array(289,-12,710,518),65366=>array(262,0,737,518),65367=>array(144,0,856,518),65368=>array(257,0,743,518),65369=>array(262,-210,738,518),65370=>array(270,0,729,518),65371=>array(359,-210,641,728),65372=>array(462,-199,538,716),65373=>array(359,-210,641,728),65374=>array(250,272,749,432),65377=>array(53,-40,235,142),65378=>array(79,-68,421,837),65379=>array(77,-68,423,837),65380=>array(54,-82,296,171),65381=>array(196,332,304,440),65382=>array(65,-53,435,753),65383=>array(63,-11,461,732),65384=>array(46,-3,441,769),65385=>array(79,-9,425,763),65386=>array(61,32,439,689),65387=>array(38,-15,443,751),65388=>array(51,-26,452,756),65389=>array(61,33,439,696),65390=>array(79,19,421,701),65391=>array(56,-3,432,727),65392=>array(81,329,419,411),65393=>array(43,-61,481,751),65394=>array(42,-44,448,795),65395=>array(62,-47,439,803),65396=>array(41,0,459,735),65397=>array(34,-45,464,787),65398=>array(38,-40,443,794),65399=>array(43,-46,457,799),65400=>array(40,-49,436,815),65401=>array(39,-48,461,813),65402=>array(60,-23,440,734),65403=>array(42,-59,458,788),65404=>array(36,-33,461,770),65405=>array(28,-49,472,727),65406=>array(44,-5,468,786),65407=>array(49,-51,442,780),65408=>array(36,-56,453,798),65409=>array(41,-50,459,798),65410=>array(45,-43,455,770),65411=>array(41,-61,459,740),65412=>array(122,-46,444,787),65413=>array(42,-59,458,786),65414=>array(41,16,459,711),65415=>array(42,-47,459,734),65416=>array(25,-51,487,769),65417=>array(52,-43,442,740),65418=>array(35,-29,464,791),65419=>array(95,-5,465,770),65420=>array(66,-54,434,732),65421=>array(26,24,472,645),65422=>array(22,-47,472,785),65423=>array(50,-31,450,729),65424=>array(38,-31,463,769),65425=>array(28,-31,478,790),65426=>array(45,-35,449,782),65427=>array(41,-6,459,739),65428=>array(47,-50,468,797),65429=>array(41,-4,459,730),65430=>array(61,-27,439,730),65431=>array(58,-54,442,748),65432=>array(106,-53,394,768),65433=>array(18,-44,481,788),65434=>array(111,-29,474,788),65435=>array(71,-24,429,730),65436=>array(64,-48,436,731),65437=>array(41,-33,461,749),65438=>array(21,523,250,750),65439=>array(38,591,220,773),65441=>array(50,91,450,665),65442=>array(31,91,469,665),65443=>array(20,78,495,665),65444=>array(49,90,451,665),65445=>array(29,80,492,666),65446=>array(30,91,472,666),65447=>array(54,90,446,664),65448=>array(28,90,472,665),65449=>array(59,90,451,665),65450=>array(42,88,458,665),65451=>array(39,85,461,665),65452=>array(39,85,461,665),65453=>array(39,78,495,665),65454=>array(41,85,459,665),65455=>array(34,85,466,665),65456=>array(32,85,468,666),65457=>array(79,90,421,665),65458=>array(79,90,421,665),65459=>array(37,88,463,665),65460=>array(37,78,495,664),65461=>array(13,80,486,661),65462=>array(2,78,493,663),65463=>array(52,92,448,666),65464=>array(17,78,481,665),65465=>array(11,79,495,666),65466=>array(19,76,481,665),65467=>array(72,90,428,663),65468=>array(56,91,444,664),65469=>array(62,90,438,665),65470=>array(44,88,456,665),65474=>array(105,-64,395,842),65475=>array(95,-64,405,842),65476=>array(103,-64,397,842),65477=>array(90,-64,411,842),65478=>array(103,-65,397,841),65479=>array(40,-63,445,843),65482=>array(103,-64,397,842),65483=>array(39,-63,446,843),65484=>array(43,197,457,614),65485=>array(24,-64,476,842),65486=>array(27,-64,463,842),65487=>array(24,-64,439,842),65490=>array(30,197,470,615),65491=>array(40,76,460,554),65492=>array(31,-65,454,841),65493=>array(25,-63,465,843),65494=>array(31,-64,449,842),65495=>array(40,110,468,588),65498=>array(28,357,472,436),65499=>array(30,-64,450,842),65500=>array(212,-64,288,842),65504=>array(274,-200,726,716),65505=>array(242,-14,758,728),65506=>array(263,203,737,503),65507=>array(244,793,756,843),65508=>array(462,-199,538,716),65509=>array(223,0,777,716),65510=>array(39,0,960,716),65512=>array(207,-218,293,994),65513=>array(40,100,460,412),65514=>array(93,0,405,420),65515=>array(40,100,460,412),65516=>array(93,0,405,420),65517=>array(35,160,465,590),65518=>array(35,160,465,590),65532=>array(0,0,1000,719),65533=>array(85,-21,915,810),65535=>array(125,0,875,750)); +$cw=array(0=>1000,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278,306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,338=>1000,339=>944,340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,352=>667,353=>500,354=>611,355=>278,356=>611,357=>406,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,374=>667,375=>500,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579,393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,402=>278,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500,410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602,426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526,442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444,458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556,614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556,630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216,646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464,662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030,678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222,701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,710=>333,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333,718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758,912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778,928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551,945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678,961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616,978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557,1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1027=>567,1028=>717,1029=>667,1030=>278,1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1036=>584,1038=>635,1039=>723,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722,1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939,1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559,1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823,1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811,1115=>556,1116=>437,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932,1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976,1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556,1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670,1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661,1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735,1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923,1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635,1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427,1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635,1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271,1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427,1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583,1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360,1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360,1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360,1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360,1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316,1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412,1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544,1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800,1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243,1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544,1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421,1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957,1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828,1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470,1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514,1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282,1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480,1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611,2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502,2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600,2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0,2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639,2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582,2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585,2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593,2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0,2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559,2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267,2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567,2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640,2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0,2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591,2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0,2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773,2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446,2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587,2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0,2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590,2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712,2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605,2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0,2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540,2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994,2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295,2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547,3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740,3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690,3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684,3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681,3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361,3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840,3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293,3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667,3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687,3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714,3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549,3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198,3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712,3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546,3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340,3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181,3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664,3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608,3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574,3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724,3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775,3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778,3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778,3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600,3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600,3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600,3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600,3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600,3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600,3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600,3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600,3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600,3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600,4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600,4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634,4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629,4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872,4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810,4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524,4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000,4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000,4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000,4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000,4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000,4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000,4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000,4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000,4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000,4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000,4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000,4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000,4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000,4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000,4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000,4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556,7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620,7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576,7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434,7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747,7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303,7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894,8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766,8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576,8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576,8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556,8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766,8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576,8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556,8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222,8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667,8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758,8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0,8205=>0,8208=>333,8209=>333,8210=>556,8211=>500,8212=>1000,8213=>564,8214=>428,8215=>500,8216=>222,8217=>222,8218=>222,8219=>222,8220=>333,8221=>333,8222=>333,8223=>333,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>556,8230=>1000,8231=>278,8232=>0,8233=>0,8240=>1000,8241=>1330,8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8249=>333,8250=>333,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333,8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333,8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556,8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8364=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700,8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667,8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708,8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8482=>1000,8483=>722,8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115,8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834,8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500,8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713,8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713,8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800,8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713,8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713,8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713,8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823,8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584,8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806,8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584,8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584,8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584,8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584,8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678,8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800,8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672,8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584,8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561,8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584,8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000,8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549,8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549,8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549,9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600,9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600,9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000,9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000,9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000,9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000,9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000,9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000,9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000,9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000,9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000,9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000,9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734,9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650,9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900,9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560,9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000,9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804,9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000,12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000,12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000,12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000,12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000,12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000,12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000,12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000,12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000,12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000,12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000,12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000,12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000,12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000,12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000,12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000,12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000,12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000,12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000,12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000,12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000,12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000,12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000,12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000,12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000,12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000,12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000,12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000,12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000,13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000,13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000,13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000,13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000,13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000,13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000,13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000,13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000,13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000,13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000,13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000,13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000,13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000,13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000,13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000,13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000,13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000,13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000,13309=>1000,13310=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000,19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000,19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000,20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000,20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000,20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000,20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000,20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000,20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000,20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000,20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000,20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000,20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000,20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000,20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000,20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000,20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000,20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000,20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000,20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000,20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000,20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000,20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000,20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000,20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000,20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000,20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000,20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000,20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000,20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000,20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000,20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000,20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000,20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000,20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000,20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000,20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000,20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000,20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000,20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000,20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000,20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000,20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000,20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000,20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000,20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000,20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000,20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000,20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000,20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000,20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000,20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000,20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000,20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000,20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000,20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000,20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000,20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000,20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000,20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000,20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000,20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000,20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000,20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000,20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000,20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000,21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000,21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000,21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000,21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000,21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000,21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000,21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000,21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000,21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000,21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000,21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000,21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000,21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000,21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000,21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000,21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000,21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000,21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000,21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000,21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000,21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000,21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000,21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000,21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000,21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000,21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000,21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000,21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000,21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000,21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000,21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000,21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000,21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000,21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000,21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000,21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000,21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000,21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000,21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000,21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000,21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000,21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000,21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000,21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000,21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000,21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000,21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000,21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000,21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000,21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000,21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000,21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000,21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000,21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000,21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000,21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000,21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000,21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000,21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000,21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000,21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000,21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000,22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000,22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000,22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000,22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000,22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000,22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000,22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000,22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000,22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000,22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000,22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000,22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000,22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000,22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000,22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000,22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000,22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000,22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000,22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000,22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000,22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000,22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000,22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000,22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000,22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000,22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000,22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000,22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000,22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000,22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000,22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000,22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000,22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000,22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000,22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000,22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000,22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000,22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000,22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000,22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000,22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000,22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000,22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000,22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000,22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000,22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000,22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000,22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000,22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000,22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000,22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000,22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000,22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000,22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000,22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000,22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000,22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000,22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000,22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000,22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000,22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000,22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000,22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000,23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000,23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000,23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000,23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000,23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000,23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000,23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000,23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000,23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000,23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000,23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000,23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000,23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000,23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000,23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000,23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000,23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000,23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000,23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000,23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000,23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000,23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000,23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000,23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000,23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000,23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000,23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000,23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000,23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000,23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000,23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000,23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000,23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000,23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000,23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000,23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000,23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000,23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000,23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000,23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000,23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000,23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000,23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000,23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000,23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000,23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000,23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000,23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000,23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000,23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000,23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000,23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000,23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000,23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000,23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000,23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000,23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000,23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000,23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000,23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000,23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000,23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000,24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000,24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000,24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000,24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000,24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000,24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000,24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000,24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000,24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000,24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000,24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000,24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000,24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000,24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000,24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000,24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000,24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000,24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000,24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000,24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000,24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000,24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000,24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000,24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000,24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000,24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000,24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000,24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000,24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000,24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000,24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000,24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000,24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000,24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000,24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000,24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000,24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000,24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000,24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000,24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000,24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000,24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000,24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000,24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000,24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000,24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000,24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000,24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000,24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000,24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000,24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000,24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000,24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000,24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000,24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000,24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000,24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000,24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000,24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000,24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000,24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000,24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000,24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000,25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000,25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000,25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000,25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000,25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000,25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000,25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000,25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000,25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000,25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000,25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000,25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000,25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000,25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000,25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000,25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000,25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000,25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000,25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000,25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000,25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000,25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000,25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000,25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000,25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000,25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000,25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000,25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000,25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000,25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000,25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000,25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000,25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000,25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000,25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000,25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000,25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000,25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000,25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000,25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000,25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000,25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000,25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000,25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000,25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000,25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000,25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000,25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000,25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000,25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000,25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000,25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000,25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000,25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000,25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000,25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000,25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000,25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000,25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000,25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000,25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000,25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000,26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000,26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000,26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000,26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000,26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000,26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000,26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000,26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000,26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000,26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000,26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000,26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000,26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000,26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000,26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000,26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000,26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000,26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000,26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000,26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000,26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000,26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000,26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000,26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000,26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000,26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000,26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000,26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000,26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000,26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000,26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000,26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000,26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000,26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000,26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000,26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000,26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000,26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000,26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000,26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000,26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000,26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000,26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000,26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000,26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000,26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000,26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000,26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000,26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000,26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000,26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000,26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000,26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000,26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000,26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000,26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000,26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000,26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000,26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000,26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000,26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000,26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000,26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000,27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000,27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000,27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000,27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000,27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000,27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000,27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000,27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000,27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000,27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000,27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000,27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000,27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000,27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000,27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000,27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000,27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000,27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000,27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000,27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000,27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000,27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000,27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000,27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000,27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000,27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000,27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000,27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000,27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000,27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000,27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000,27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000,27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000,27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000,27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000,27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000,27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000,27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000,27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000,27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000,27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000,27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000,27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000,27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000,27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000,27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000,27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000,27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000,27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000,27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000,27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000,27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000,27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000,27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000,27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000,27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000,27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000,27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000,27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000,27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000,27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000,27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000,28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000,28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000,28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000,28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000,28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000,28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000,28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000,28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000,28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000,28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000,28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000,28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000,28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000,28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000,28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000,28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000,28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000,28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000,28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000,28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000,28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000,28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000,28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000,28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000,28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000,28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000,28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000,28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000,28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000,28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000,28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000,28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000,28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000,28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000,28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000,28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000,28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000,28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000,28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000,28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000,28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000,28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000,28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000,28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000,28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000,28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000,28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000,28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000,28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000,28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000,28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000,28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000,28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000,28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000,28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000,28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000,28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000,28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000,28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000,28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000,28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000,28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000,28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000,29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000,29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000,29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000,29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000,29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000,29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000,29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000,29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000,29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000,29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000,29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000,29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000,29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000,29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000,29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000,29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000,29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000,29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000,29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000,29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000,29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000,29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000,29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000,29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000,29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000,29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000,29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000,29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000,29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000,29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000,29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000,29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000,29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000,29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000,29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000,29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000,29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000,29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000,29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000,29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000,29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000,29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000,29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000,29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000,29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000,29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000,29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000,29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000,29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000,29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000,29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000,29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000,29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000,29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000,29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000,29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000,29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000,29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000,29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000,29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000,29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000,29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000,30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000,30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000,30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000,30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000,30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000,30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000,30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000,30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000,30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000,30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000,30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000,30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000,30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000,30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000,30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000,30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000,30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000,30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000,30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000,30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000,30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000,30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000,30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000,30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000,30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000,30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000,30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000,30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000,30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000,30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000,30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000,30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000,30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000,30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000,30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000,30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000,30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000,30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000,30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000,30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000,30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000,30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000,30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000,30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000,30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000,30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000,30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000,30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000,30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000,30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000,30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000,30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000,30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000,30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000,30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000,30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000,30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000,30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000,30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000,30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000,30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000,30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000,30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000,31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000,31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000,31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000,31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000,31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000,31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000,31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000,31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000,31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000,31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000,31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000,31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000,31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000,31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000,31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000,31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000,31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000,31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000,31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000,31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000,31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000,31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000,31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000,31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000,31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000,31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000,31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000,31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000,31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000,31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000,31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000,31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000,31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000,31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000,31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000,31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000,31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000,31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000,31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000,31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000,31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000,31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000,31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000,31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000,31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000,31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000,31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000,31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000,31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000,31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000,31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000,31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000,31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000,31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000,31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000,31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000,31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000,31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000,31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000,31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000,31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000,31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000,32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000,32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000,32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000,32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000,32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000,32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000,32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000,32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000,32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000,32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000,32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000,32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000,32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000,32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000,32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000,32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000,32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000,32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000,32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000,32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000,32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000,32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000,32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000,32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000,32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000,32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000,32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000,32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000,32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000,32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000,32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000,32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000,32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000,32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000,32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000,32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000,32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000,32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000,32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000,32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000,32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000,32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000,32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000,32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000,32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000,32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000,32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000,32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000,32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000,32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000,32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000,32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000,32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000,32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000,32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000,32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000,32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000,32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000,32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000,32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000,32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000,32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000,32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000,33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000,33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000,33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000,33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000,33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000,33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000,33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000,33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000,33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000,33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000,33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000,33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000,33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000,33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000,33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000,33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000,33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000,33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000,33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000,33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000,33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000,33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000,33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000,33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000,33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000,33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000,33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000,33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000,33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000,33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000,33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000,33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000,33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000,33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000,33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000,33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000,33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000,33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000,33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000,33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000,33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000,33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000,33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000,33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000,33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000,33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000,33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000,33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000,33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000,33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000,33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000,33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000,33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000,33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000,33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000,33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000,33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000,33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000,33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000,33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000,33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000,33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000,34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000,34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000,34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000,34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000,34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000,34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000,34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000,34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000,34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000,34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000,34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000,34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000,34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000,34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000,34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000,34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000,34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000,34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000,34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000,34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000,34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000,34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000,34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000,34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000,34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000,34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000,34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000,34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000,34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000,34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000,34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000,34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000,34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000,34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000,34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000,34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000,34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000,34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000,34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000,34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000,34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000,34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000,34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000,34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000,34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000,34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000,34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000,34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000,34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000,34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000,34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000,34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000,34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000,34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000,34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000,34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000,34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000,34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000,34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000,34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000,34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000,34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000,34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000,35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000,35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000,35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000,35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000,35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000,35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000,35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000,35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000,35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000,35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000,35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000,35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000,35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000,35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000,35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000,35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000,35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000,35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000,35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000,35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000,35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000,35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000,35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000,35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000,35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000,35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000,35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000,35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000,35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000,35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000,35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000,35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000,35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000,35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000,35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000,35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000,35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000,35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000,35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000,35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000,35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000,35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000,35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000,35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000,35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000,35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000,35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000,35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000,35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000,35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000,35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000,35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000,35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000,35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000,35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000,35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000,35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000,35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000,35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000,35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000,35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000,35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000,36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000,36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000,36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000,36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000,36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000,36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000,36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000,36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000,36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000,36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000,36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000,36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000,36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000,36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000,36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000,36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000,36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000,36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000,36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000,36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000,36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000,36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000,36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000,36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000,36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000,36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000,36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000,36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000,36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000,36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000,36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000,36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000,36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000,36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000,36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000,36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000,36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000,36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000,36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000,36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000,36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000,36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000,36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000,36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000,36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000,36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000,36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000,36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000,36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000,36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000,36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000,36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000,36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000,36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000,36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000,36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000,36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000,36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000,36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000,36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000,36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000,36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000,36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000,37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000,37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000,37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000,37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000,37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000,37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000,37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000,37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000,37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000,37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000,37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000,37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000,37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000,37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000,37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000,37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000,37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000,37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000,37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000,37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000,37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000,37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000,37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000,37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000,37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000,37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000,37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000,37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000,37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000,37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000,37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000,37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000,37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000,37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000,37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000,37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000,37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000,37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000,37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000,37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000,37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000,37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000,37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000,37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000,37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000,37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000,37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000,37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000,37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000,37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000,37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000,37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000,37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000,37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000,37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000,37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000,37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000,37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000,37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000,37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000,37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000,37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000,38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000,38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000,38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000,38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000,38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000,38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000,38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000,38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000,38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000,38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000,38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000,38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000,38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000,38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000,38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000,38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000,38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000,38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000,38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000,38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000,38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000,38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000,38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000,38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000,38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000,38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000,38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000,38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000,38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000,38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000,38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000,38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000,38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000,38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000,38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000,38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000,38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000,38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000,38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000,38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000,38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000,38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000,38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000,38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000,38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000,38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000,38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000,38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000,38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000,38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000,38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000,38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000,38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000,38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000,38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000,38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000,38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000,38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000,38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000,38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000,38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000,38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000,38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000,39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000,39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000,39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000,39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000,39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000,39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000,39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000,39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000,39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000,39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000,39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000,39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000,39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000,39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000,39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000,39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000,39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000,39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000,39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000,39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000,39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000,39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000,39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000,39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000,39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000,39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000,39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000,39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000,39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000,39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000,39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000,39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000,39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000,39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000,39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000,39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000,39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000,39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000,39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000,39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000,39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000,39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000,39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000,39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000,39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000,39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000,39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000,39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000,39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000,39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000,39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000,39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000,39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000,39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000,39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000,39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000,39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000,39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000,39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000,39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000,39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000,39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000,40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000,40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000,40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000,40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000,40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000,40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000,40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000,40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000,40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000,40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000,40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000,40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000,40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000,40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000,40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000,40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000,40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000,40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000,40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000,40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000,40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000,40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000,40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000,40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000,40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000,40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000,40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000,40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000,40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000,40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000,40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000,40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000,40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000,40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000,40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000,40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000,40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000,40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000,40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000,40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000,40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000,40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000,40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000,40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000,40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000,40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000,40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000,40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000,40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000,40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000,40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000,40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000,40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000,40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000,40869=>1000,44032=>1000,44033=>1000,44034=>1000,44035=>1000,44036=>1000,44037=>1000,44038=>1000,44039=>1000,44040=>1000,44041=>1000,44042=>1000,44043=>1000,44044=>1000,44045=>1000,44046=>1000,44047=>1000,44048=>1000,44049=>1000,44050=>1000,44051=>1000,44052=>1000,44053=>1000,44054=>1000,44055=>1000,44056=>1000,44057=>1000,44058=>1000,44059=>1000,44060=>1000,44061=>1000,44062=>1000,44063=>1000,44064=>1000,44065=>1000,44066=>1000,44067=>1000,44068=>1000,44069=>1000,44070=>1000,44071=>1000,44072=>1000,44073=>1000,44074=>1000,44075=>1000,44076=>1000,44077=>1000,44078=>1000,44079=>1000,44080=>1000,44081=>1000,44082=>1000,44083=>1000,44084=>1000,44085=>1000,44086=>1000,44087=>1000,44088=>1000,44089=>1000,44090=>1000,44091=>1000,44092=>1000,44093=>1000,44094=>1000,44095=>1000,44096=>1000,44097=>1000,44098=>1000,44099=>1000,44100=>1000,44101=>1000,44102=>1000,44103=>1000,44104=>1000,44105=>1000,44106=>1000,44107=>1000,44108=>1000,44109=>1000,44110=>1000,44111=>1000,44112=>1000,44113=>1000,44114=>1000,44115=>1000,44116=>1000,44117=>1000,44118=>1000,44119=>1000,44120=>1000,44121=>1000,44122=>1000,44123=>1000,44124=>1000,44125=>1000,44126=>1000,44127=>1000,44128=>1000,44129=>1000,44130=>1000,44131=>1000,44132=>1000,44133=>1000,44134=>1000,44135=>1000,44136=>1000,44137=>1000,44138=>1000,44139=>1000,44140=>1000,44141=>1000,44142=>1000,44143=>1000,44144=>1000,44145=>1000,44146=>1000,44147=>1000,44148=>1000,44149=>1000,44150=>1000,44151=>1000,44152=>1000,44153=>1000,44154=>1000,44155=>1000,44156=>1000,44157=>1000,44158=>1000,44159=>1000,44160=>1000,44161=>1000,44162=>1000,44163=>1000,44164=>1000,44165=>1000,44166=>1000,44167=>1000,44168=>1000,44169=>1000,44170=>1000,44171=>1000,44172=>1000,44173=>1000,44174=>1000,44175=>1000,44176=>1000,44177=>1000,44178=>1000,44179=>1000,44180=>1000,44181=>1000,44182=>1000,44183=>1000,44184=>1000,44185=>1000,44186=>1000,44187=>1000,44188=>1000,44189=>1000,44190=>1000,44191=>1000,44192=>1000,44193=>1000,44194=>1000,44195=>1000,44196=>1000,44197=>1000,44198=>1000,44199=>1000,44200=>1000,44201=>1000,44202=>1000,44203=>1000,44204=>1000,44205=>1000,44206=>1000,44207=>1000,44208=>1000,44209=>1000,44210=>1000,44211=>1000,44212=>1000,44213=>1000,44214=>1000,44215=>1000,44216=>1000,44217=>1000,44218=>1000,44219=>1000,44220=>1000,44221=>1000,44222=>1000,44223=>1000,44224=>1000,44225=>1000,44226=>1000,44227=>1000,44228=>1000,44229=>1000,44230=>1000,44231=>1000,44232=>1000,44233=>1000,44234=>1000,44235=>1000,44236=>1000,44237=>1000,44238=>1000,44239=>1000,44240=>1000,44241=>1000,44242=>1000,44243=>1000,44244=>1000,44245=>1000,44246=>1000,44247=>1000,44248=>1000,44249=>1000,44250=>1000,44251=>1000,44252=>1000,44253=>1000,44254=>1000,44255=>1000,44256=>1000,44257=>1000,44258=>1000,44259=>1000,44260=>1000,44261=>1000,44262=>1000,44263=>1000,44264=>1000,44265=>1000,44266=>1000,44267=>1000,44268=>1000,44269=>1000,44270=>1000,44271=>1000,44272=>1000,44273=>1000,44274=>1000,44275=>1000,44276=>1000,44277=>1000,44278=>1000,44279=>1000,44280=>1000,44281=>1000,44282=>1000,44283=>1000,44284=>1000,44285=>1000,44286=>1000,44287=>1000,44288=>1000,44289=>1000,44290=>1000,44291=>1000,44292=>1000,44293=>1000,44294=>1000,44295=>1000,44296=>1000,44297=>1000,44298=>1000,44299=>1000,44300=>1000,44301=>1000,44302=>1000,44303=>1000,44304=>1000,44305=>1000,44306=>1000,44307=>1000,44308=>1000,44309=>1000,44310=>1000,44311=>1000,44312=>1000,44313=>1000,44314=>1000,44315=>1000,44316=>1000,44317=>1000,44318=>1000,44319=>1000,44320=>1000,44321=>1000,44322=>1000,44323=>1000,44324=>1000,44325=>1000,44326=>1000,44327=>1000,44328=>1000,44329=>1000,44330=>1000,44331=>1000,44332=>1000,44333=>1000,44334=>1000,44335=>1000,44336=>1000,44337=>1000,44338=>1000,44339=>1000,44340=>1000,44341=>1000,44342=>1000,44343=>1000,44344=>1000,44345=>1000,44346=>1000,44347=>1000,44348=>1000,44349=>1000,44350=>1000,44351=>1000,44352=>1000,44353=>1000,44354=>1000,44355=>1000,44356=>1000,44357=>1000,44358=>1000,44359=>1000,44360=>1000,44361=>1000,44362=>1000,44363=>1000,44364=>1000,44365=>1000,44366=>1000,44367=>1000,44368=>1000,44369=>1000,44370=>1000,44371=>1000,44372=>1000,44373=>1000,44374=>1000,44375=>1000,44376=>1000,44377=>1000,44378=>1000,44379=>1000,44380=>1000,44381=>1000,44382=>1000,44383=>1000,44384=>1000,44385=>1000,44386=>1000,44387=>1000,44388=>1000,44389=>1000,44390=>1000,44391=>1000,44392=>1000,44393=>1000,44394=>1000,44395=>1000,44396=>1000,44397=>1000,44398=>1000,44399=>1000,44400=>1000,44401=>1000,44402=>1000,44403=>1000,44404=>1000,44405=>1000,44406=>1000,44407=>1000,44408=>1000,44409=>1000,44410=>1000,44411=>1000,44412=>1000,44413=>1000,44414=>1000,44415=>1000,44416=>1000,44417=>1000,44418=>1000,44419=>1000,44420=>1000,44421=>1000,44422=>1000,44423=>1000,44424=>1000,44425=>1000,44426=>1000,44427=>1000,44428=>1000,44429=>1000,44430=>1000,44431=>1000,44432=>1000,44433=>1000,44434=>1000,44435=>1000,44436=>1000,44437=>1000,44438=>1000,44439=>1000,44440=>1000,44441=>1000,44442=>1000,44443=>1000,44444=>1000,44445=>1000,44446=>1000,44447=>1000,44448=>1000,44449=>1000,44450=>1000,44451=>1000,44452=>1000,44453=>1000,44454=>1000,44455=>1000,44456=>1000,44457=>1000,44458=>1000,44459=>1000,44460=>1000,44461=>1000,44462=>1000,44463=>1000,44464=>1000,44465=>1000,44466=>1000,44467=>1000,44468=>1000,44469=>1000,44470=>1000,44471=>1000,44472=>1000,44473=>1000,44474=>1000,44475=>1000,44476=>1000,44477=>1000,44478=>1000,44479=>1000,44480=>1000,44481=>1000,44482=>1000,44483=>1000,44484=>1000,44485=>1000,44486=>1000,44487=>1000,44488=>1000,44489=>1000,44490=>1000,44491=>1000,44492=>1000,44493=>1000,44494=>1000,44495=>1000,44496=>1000,44497=>1000,44498=>1000,44499=>1000,44500=>1000,44501=>1000,44502=>1000,44503=>1000,44504=>1000,44505=>1000,44506=>1000,44507=>1000,44508=>1000,44509=>1000,44510=>1000,44511=>1000,44512=>1000,44513=>1000,44514=>1000,44515=>1000,44516=>1000,44517=>1000,44518=>1000,44519=>1000,44520=>1000,44521=>1000,44522=>1000,44523=>1000,44524=>1000,44525=>1000,44526=>1000,44527=>1000,44528=>1000,44529=>1000,44530=>1000,44531=>1000,44532=>1000,44533=>1000,44534=>1000,44535=>1000,44536=>1000,44537=>1000,44538=>1000,44539=>1000,44540=>1000,44541=>1000,44542=>1000,44543=>1000,44544=>1000,44545=>1000,44546=>1000,44547=>1000,44548=>1000,44549=>1000,44550=>1000,44551=>1000,44552=>1000,44553=>1000,44554=>1000,44555=>1000,44556=>1000,44557=>1000,44558=>1000,44559=>1000,44560=>1000,44561=>1000,44562=>1000,44563=>1000,44564=>1000,44565=>1000,44566=>1000,44567=>1000,44568=>1000,44569=>1000,44570=>1000,44571=>1000,44572=>1000,44573=>1000,44574=>1000,44575=>1000,44576=>1000,44577=>1000,44578=>1000,44579=>1000,44580=>1000,44581=>1000,44582=>1000,44583=>1000,44584=>1000,44585=>1000,44586=>1000,44587=>1000,44588=>1000,44589=>1000,44590=>1000,44591=>1000,44592=>1000,44593=>1000,44594=>1000,44595=>1000,44596=>1000,44597=>1000,44598=>1000,44599=>1000,44600=>1000,44601=>1000,44602=>1000,44603=>1000,44604=>1000,44605=>1000,44606=>1000,44607=>1000,44608=>1000,44609=>1000,44610=>1000,44611=>1000,44612=>1000,44613=>1000,44614=>1000,44615=>1000,44616=>1000,44617=>1000,44618=>1000,44619=>1000,44620=>1000,44621=>1000,44622=>1000,44623=>1000,44624=>1000,44625=>1000,44626=>1000,44627=>1000,44628=>1000,44629=>1000,44630=>1000,44631=>1000,44632=>1000,44633=>1000,44634=>1000,44635=>1000,44636=>1000,44637=>1000,44638=>1000,44639=>1000,44640=>1000,44641=>1000,44642=>1000,44643=>1000,44644=>1000,44645=>1000,44646=>1000,44647=>1000,44648=>1000,44649=>1000,44650=>1000,44651=>1000,44652=>1000,44653=>1000,44654=>1000,44655=>1000,44656=>1000,44657=>1000,44658=>1000,44659=>1000,44660=>1000,44661=>1000,44662=>1000,44663=>1000,44664=>1000,44665=>1000,44666=>1000,44667=>1000,44668=>1000,44669=>1000,44670=>1000,44671=>1000,44672=>1000,44673=>1000,44674=>1000,44675=>1000,44676=>1000,44677=>1000,44678=>1000,44679=>1000,44680=>1000,44681=>1000,44682=>1000,44683=>1000,44684=>1000,44685=>1000,44686=>1000,44687=>1000,44688=>1000,44689=>1000,44690=>1000,44691=>1000,44692=>1000,44693=>1000,44694=>1000,44695=>1000,44696=>1000,44697=>1000,44698=>1000,44699=>1000,44700=>1000,44701=>1000,44702=>1000,44703=>1000,44704=>1000,44705=>1000,44706=>1000,44707=>1000,44708=>1000,44709=>1000,44710=>1000,44711=>1000,44712=>1000,44713=>1000,44714=>1000,44715=>1000,44716=>1000,44717=>1000,44718=>1000,44719=>1000,44720=>1000,44721=>1000,44722=>1000,44723=>1000,44724=>1000,44725=>1000,44726=>1000,44727=>1000,44728=>1000,44729=>1000,44730=>1000,44731=>1000,44732=>1000,44733=>1000,44734=>1000,44735=>1000,44736=>1000,44737=>1000,44738=>1000,44739=>1000,44740=>1000,44741=>1000,44742=>1000,44743=>1000,44744=>1000,44745=>1000,44746=>1000,44747=>1000,44748=>1000,44749=>1000,44750=>1000,44751=>1000,44752=>1000,44753=>1000,44754=>1000,44755=>1000,44756=>1000,44757=>1000,44758=>1000,44759=>1000,44760=>1000,44761=>1000,44762=>1000,44763=>1000,44764=>1000,44765=>1000,44766=>1000,44767=>1000,44768=>1000,44769=>1000,44770=>1000,44771=>1000,44772=>1000,44773=>1000,44774=>1000,44775=>1000,44776=>1000,44777=>1000,44778=>1000,44779=>1000,44780=>1000,44781=>1000,44782=>1000,44783=>1000,44784=>1000,44785=>1000,44786=>1000,44787=>1000,44788=>1000,44789=>1000,44790=>1000,44791=>1000,44792=>1000,44793=>1000,44794=>1000,44795=>1000,44796=>1000,44797=>1000,44798=>1000,44799=>1000,44800=>1000,44801=>1000,44802=>1000,44803=>1000,44804=>1000,44805=>1000,44806=>1000,44807=>1000,44808=>1000,44809=>1000,44810=>1000,44811=>1000,44812=>1000,44813=>1000,44814=>1000,44815=>1000,44816=>1000,44817=>1000,44818=>1000,44819=>1000,44820=>1000,44821=>1000,44822=>1000,44823=>1000,44824=>1000,44825=>1000,44826=>1000,44827=>1000,44828=>1000,44829=>1000,44830=>1000,44831=>1000,44832=>1000,44833=>1000,44834=>1000,44835=>1000,44836=>1000,44837=>1000,44838=>1000,44839=>1000,44840=>1000,44841=>1000,44842=>1000,44843=>1000,44844=>1000,44845=>1000,44846=>1000,44847=>1000,44848=>1000,44849=>1000,44850=>1000,44851=>1000,44852=>1000,44853=>1000,44854=>1000,44855=>1000,44856=>1000,44857=>1000,44858=>1000,44859=>1000,44860=>1000,44861=>1000,44862=>1000,44863=>1000,44864=>1000,44865=>1000,44866=>1000,44867=>1000,44868=>1000,44869=>1000,44870=>1000,44871=>1000,44872=>1000,44873=>1000,44874=>1000,44875=>1000,44876=>1000,44877=>1000,44878=>1000,44879=>1000,44880=>1000,44881=>1000,44882=>1000,44883=>1000,44884=>1000,44885=>1000,44886=>1000,44887=>1000,44888=>1000,44889=>1000,44890=>1000,44891=>1000,44892=>1000,44893=>1000,44894=>1000,44895=>1000,44896=>1000,44897=>1000,44898=>1000,44899=>1000,44900=>1000,44901=>1000,44902=>1000,44903=>1000,44904=>1000,44905=>1000,44906=>1000,44907=>1000,44908=>1000,44909=>1000,44910=>1000,44911=>1000,44912=>1000,44913=>1000,44914=>1000,44915=>1000,44916=>1000,44917=>1000,44918=>1000,44919=>1000,44920=>1000,44921=>1000,44922=>1000,44923=>1000,44924=>1000,44925=>1000,44926=>1000,44927=>1000,44928=>1000,44929=>1000,44930=>1000,44931=>1000,44932=>1000,44933=>1000,44934=>1000,44935=>1000,44936=>1000,44937=>1000,44938=>1000,44939=>1000,44940=>1000,44941=>1000,44942=>1000,44943=>1000,44944=>1000,44945=>1000,44946=>1000,44947=>1000,44948=>1000,44949=>1000,44950=>1000,44951=>1000,44952=>1000,44953=>1000,44954=>1000,44955=>1000,44956=>1000,44957=>1000,44958=>1000,44959=>1000,44960=>1000,44961=>1000,44962=>1000,44963=>1000,44964=>1000,44965=>1000,44966=>1000,44967=>1000,44968=>1000,44969=>1000,44970=>1000,44971=>1000,44972=>1000,44973=>1000,44974=>1000,44975=>1000,44976=>1000,44977=>1000,44978=>1000,44979=>1000,44980=>1000,44981=>1000,44982=>1000,44983=>1000,44984=>1000,44985=>1000,44986=>1000,44987=>1000,44988=>1000,44989=>1000,44990=>1000,44991=>1000,44992=>1000,44993=>1000,44994=>1000,44995=>1000,44996=>1000,44997=>1000,44998=>1000,44999=>1000,45000=>1000,45001=>1000,45002=>1000,45003=>1000,45004=>1000,45005=>1000,45006=>1000,45007=>1000,45008=>1000,45009=>1000,45010=>1000,45011=>1000,45012=>1000,45013=>1000,45014=>1000,45015=>1000,45016=>1000,45017=>1000,45018=>1000,45019=>1000,45020=>1000,45021=>1000,45022=>1000,45023=>1000,45024=>1000,45025=>1000,45026=>1000,45027=>1000,45028=>1000,45029=>1000,45030=>1000,45031=>1000,45032=>1000,45033=>1000,45034=>1000,45035=>1000,45036=>1000,45037=>1000,45038=>1000,45039=>1000,45040=>1000,45041=>1000,45042=>1000,45043=>1000,45044=>1000,45045=>1000,45046=>1000,45047=>1000,45048=>1000,45049=>1000,45050=>1000,45051=>1000,45052=>1000,45053=>1000,45054=>1000,45055=>1000,45056=>1000,45057=>1000,45058=>1000,45059=>1000,45060=>1000,45061=>1000,45062=>1000,45063=>1000,45064=>1000,45065=>1000,45066=>1000,45067=>1000,45068=>1000,45069=>1000,45070=>1000,45071=>1000,45072=>1000,45073=>1000,45074=>1000,45075=>1000,45076=>1000,45077=>1000,45078=>1000,45079=>1000,45080=>1000,45081=>1000,45082=>1000,45083=>1000,45084=>1000,45085=>1000,45086=>1000,45087=>1000,45088=>1000,45089=>1000,45090=>1000,45091=>1000,45092=>1000,45093=>1000,45094=>1000,45095=>1000,45096=>1000,45097=>1000,45098=>1000,45099=>1000,45100=>1000,45101=>1000,45102=>1000,45103=>1000,45104=>1000,45105=>1000,45106=>1000,45107=>1000,45108=>1000,45109=>1000,45110=>1000,45111=>1000,45112=>1000,45113=>1000,45114=>1000,45115=>1000,45116=>1000,45117=>1000,45118=>1000,45119=>1000,45120=>1000,45121=>1000,45122=>1000,45123=>1000,45124=>1000,45125=>1000,45126=>1000,45127=>1000,45128=>1000,45129=>1000,45130=>1000,45131=>1000,45132=>1000,45133=>1000,45134=>1000,45135=>1000,45136=>1000,45137=>1000,45138=>1000,45139=>1000,45140=>1000,45141=>1000,45142=>1000,45143=>1000,45144=>1000,45145=>1000,45146=>1000,45147=>1000,45148=>1000,45149=>1000,45150=>1000,45151=>1000,45152=>1000,45153=>1000,45154=>1000,45155=>1000,45156=>1000,45157=>1000,45158=>1000,45159=>1000,45160=>1000,45161=>1000,45162=>1000,45163=>1000,45164=>1000,45165=>1000,45166=>1000,45167=>1000,45168=>1000,45169=>1000,45170=>1000,45171=>1000,45172=>1000,45173=>1000,45174=>1000,45175=>1000,45176=>1000,45177=>1000,45178=>1000,45179=>1000,45180=>1000,45181=>1000,45182=>1000,45183=>1000,45184=>1000,45185=>1000,45186=>1000,45187=>1000,45188=>1000,45189=>1000,45190=>1000,45191=>1000,45192=>1000,45193=>1000,45194=>1000,45195=>1000,45196=>1000,45197=>1000,45198=>1000,45199=>1000,45200=>1000,45201=>1000,45202=>1000,45203=>1000,45204=>1000,45205=>1000,45206=>1000,45207=>1000,45208=>1000,45209=>1000,45210=>1000,45211=>1000,45212=>1000,45213=>1000,45214=>1000,45215=>1000,45216=>1000,45217=>1000,45218=>1000,45219=>1000,45220=>1000,45221=>1000,45222=>1000,45223=>1000,45224=>1000,45225=>1000,45226=>1000,45227=>1000,45228=>1000,45229=>1000,45230=>1000,45231=>1000,45232=>1000,45233=>1000,45234=>1000,45235=>1000,45236=>1000,45237=>1000,45238=>1000,45239=>1000,45240=>1000,45241=>1000,45242=>1000,45243=>1000,45244=>1000,45245=>1000,45246=>1000,45247=>1000,45248=>1000,45249=>1000,45250=>1000,45251=>1000,45252=>1000,45253=>1000,45254=>1000,45255=>1000,45256=>1000,45257=>1000,45258=>1000,45259=>1000,45260=>1000,45261=>1000,45262=>1000,45263=>1000,45264=>1000,45265=>1000,45266=>1000,45267=>1000,45268=>1000,45269=>1000,45270=>1000,45271=>1000,45272=>1000,45273=>1000,45274=>1000,45275=>1000,45276=>1000,45277=>1000,45278=>1000,45279=>1000,45280=>1000,45281=>1000,45282=>1000,45283=>1000,45284=>1000,45285=>1000,45286=>1000,45287=>1000,45288=>1000,45289=>1000,45290=>1000,45291=>1000,45292=>1000,45293=>1000,45294=>1000,45295=>1000,45296=>1000,45297=>1000,45298=>1000,45299=>1000,45300=>1000,45301=>1000,45302=>1000,45303=>1000,45304=>1000,45305=>1000,45306=>1000,45307=>1000,45308=>1000,45309=>1000,45310=>1000,45311=>1000,45312=>1000,45313=>1000,45314=>1000,45315=>1000,45316=>1000,45317=>1000,45318=>1000,45319=>1000,45320=>1000,45321=>1000,45322=>1000,45323=>1000,45324=>1000,45325=>1000,45326=>1000,45327=>1000,45328=>1000,45329=>1000,45330=>1000,45331=>1000,45332=>1000,45333=>1000,45334=>1000,45335=>1000,45336=>1000,45337=>1000,45338=>1000,45339=>1000,45340=>1000,45341=>1000,45342=>1000,45343=>1000,45344=>1000,45345=>1000,45346=>1000,45347=>1000,45348=>1000,45349=>1000,45350=>1000,45351=>1000,45352=>1000,45353=>1000,45354=>1000,45355=>1000,45356=>1000,45357=>1000,45358=>1000,45359=>1000,45360=>1000,45361=>1000,45362=>1000,45363=>1000,45364=>1000,45365=>1000,45366=>1000,45367=>1000,45368=>1000,45369=>1000,45370=>1000,45371=>1000,45372=>1000,45373=>1000,45374=>1000,45375=>1000,45376=>1000,45377=>1000,45378=>1000,45379=>1000,45380=>1000,45381=>1000,45382=>1000,45383=>1000,45384=>1000,45385=>1000,45386=>1000,45387=>1000,45388=>1000,45389=>1000,45390=>1000,45391=>1000,45392=>1000,45393=>1000,45394=>1000,45395=>1000,45396=>1000,45397=>1000,45398=>1000,45399=>1000,45400=>1000,45401=>1000,45402=>1000,45403=>1000,45404=>1000,45405=>1000,45406=>1000,45407=>1000,45408=>1000,45409=>1000,45410=>1000,45411=>1000,45412=>1000,45413=>1000,45414=>1000,45415=>1000,45416=>1000,45417=>1000,45418=>1000,45419=>1000,45420=>1000,45421=>1000,45422=>1000,45423=>1000,45424=>1000,45425=>1000,45426=>1000,45427=>1000,45428=>1000,45429=>1000,45430=>1000,45431=>1000,45432=>1000,45433=>1000,45434=>1000,45435=>1000,45436=>1000,45437=>1000,45438=>1000,45439=>1000,45440=>1000,45441=>1000,45442=>1000,45443=>1000,45444=>1000,45445=>1000,45446=>1000,45447=>1000,45448=>1000,45449=>1000,45450=>1000,45451=>1000,45452=>1000,45453=>1000,45454=>1000,45455=>1000,45456=>1000,45457=>1000,45458=>1000,45459=>1000,45460=>1000,45461=>1000,45462=>1000,45463=>1000,45464=>1000,45465=>1000,45466=>1000,45467=>1000,45468=>1000,45469=>1000,45470=>1000,45471=>1000,45472=>1000,45473=>1000,45474=>1000,45475=>1000,45476=>1000,45477=>1000,45478=>1000,45479=>1000,45480=>1000,45481=>1000,45482=>1000,45483=>1000,45484=>1000,45485=>1000,45486=>1000,45487=>1000,45488=>1000,45489=>1000,45490=>1000,45491=>1000,45492=>1000,45493=>1000,45494=>1000,45495=>1000,45496=>1000,45497=>1000,45498=>1000,45499=>1000,45500=>1000,45501=>1000,45502=>1000,45503=>1000,45504=>1000,45505=>1000,45506=>1000,45507=>1000,45508=>1000,45509=>1000,45510=>1000,45511=>1000,45512=>1000,45513=>1000,45514=>1000,45515=>1000,45516=>1000,45517=>1000,45518=>1000,45519=>1000,45520=>1000,45521=>1000,45522=>1000,45523=>1000,45524=>1000,45525=>1000,45526=>1000,45527=>1000,45528=>1000,45529=>1000,45530=>1000,45531=>1000,45532=>1000,45533=>1000,45534=>1000,45535=>1000,45536=>1000,45537=>1000,45538=>1000,45539=>1000,45540=>1000,45541=>1000,45542=>1000,45543=>1000,45544=>1000,45545=>1000,45546=>1000,45547=>1000,45548=>1000,45549=>1000,45550=>1000,45551=>1000,45552=>1000,45553=>1000,45554=>1000,45555=>1000,45556=>1000,45557=>1000,45558=>1000,45559=>1000,45560=>1000,45561=>1000,45562=>1000,45563=>1000,45564=>1000,45565=>1000,45566=>1000,45567=>1000,45568=>1000,45569=>1000,45570=>1000,45571=>1000,45572=>1000,45573=>1000,45574=>1000,45575=>1000,45576=>1000,45577=>1000,45578=>1000,45579=>1000,45580=>1000,45581=>1000,45582=>1000,45583=>1000,45584=>1000,45585=>1000,45586=>1000,45587=>1000,45588=>1000,45589=>1000,45590=>1000,45591=>1000,45592=>1000,45593=>1000,45594=>1000,45595=>1000,45596=>1000,45597=>1000,45598=>1000,45599=>1000,45600=>1000,45601=>1000,45602=>1000,45603=>1000,45604=>1000,45605=>1000,45606=>1000,45607=>1000,45608=>1000,45609=>1000,45610=>1000,45611=>1000,45612=>1000,45613=>1000,45614=>1000,45615=>1000,45616=>1000,45617=>1000,45618=>1000,45619=>1000,45620=>1000,45621=>1000,45622=>1000,45623=>1000,45624=>1000,45625=>1000,45626=>1000,45627=>1000,45628=>1000,45629=>1000,45630=>1000,45631=>1000,45632=>1000,45633=>1000,45634=>1000,45635=>1000,45636=>1000,45637=>1000,45638=>1000,45639=>1000,45640=>1000,45641=>1000,45642=>1000,45643=>1000,45644=>1000,45645=>1000,45646=>1000,45647=>1000,45648=>1000,45649=>1000,45650=>1000,45651=>1000,45652=>1000,45653=>1000,45654=>1000,45655=>1000,45656=>1000,45657=>1000,45658=>1000,45659=>1000,45660=>1000,45661=>1000,45662=>1000,45663=>1000,45664=>1000,45665=>1000,45666=>1000,45667=>1000,45668=>1000,45669=>1000,45670=>1000,45671=>1000,45672=>1000,45673=>1000,45674=>1000,45675=>1000,45676=>1000,45677=>1000,45678=>1000,45679=>1000,45680=>1000,45681=>1000,45682=>1000,45683=>1000,45684=>1000,45685=>1000,45686=>1000,45687=>1000,45688=>1000,45689=>1000,45690=>1000,45691=>1000,45692=>1000,45693=>1000,45694=>1000,45695=>1000,45696=>1000,45697=>1000,45698=>1000,45699=>1000,45700=>1000,45701=>1000,45702=>1000,45703=>1000,45704=>1000,45705=>1000,45706=>1000,45707=>1000,45708=>1000,45709=>1000,45710=>1000,45711=>1000,45712=>1000,45713=>1000,45714=>1000,45715=>1000,45716=>1000,45717=>1000,45718=>1000,45719=>1000,45720=>1000,45721=>1000,45722=>1000,45723=>1000,45724=>1000,45725=>1000,45726=>1000,45727=>1000,45728=>1000,45729=>1000,45730=>1000,45731=>1000,45732=>1000,45733=>1000,45734=>1000,45735=>1000,45736=>1000,45737=>1000,45738=>1000,45739=>1000,45740=>1000,45741=>1000,45742=>1000,45743=>1000,45744=>1000,45745=>1000,45746=>1000,45747=>1000,45748=>1000,45749=>1000,45750=>1000,45751=>1000,45752=>1000,45753=>1000,45754=>1000,45755=>1000,45756=>1000,45757=>1000,45758=>1000,45759=>1000,45760=>1000,45761=>1000,45762=>1000,45763=>1000,45764=>1000,45765=>1000,45766=>1000,45767=>1000,45768=>1000,45769=>1000,45770=>1000,45771=>1000,45772=>1000,45773=>1000,45774=>1000,45775=>1000,45776=>1000,45777=>1000,45778=>1000,45779=>1000,45780=>1000,45781=>1000,45782=>1000,45783=>1000,45784=>1000,45785=>1000,45786=>1000,45787=>1000,45788=>1000,45789=>1000,45790=>1000,45791=>1000,45792=>1000,45793=>1000,45794=>1000,45795=>1000,45796=>1000,45797=>1000,45798=>1000,45799=>1000,45800=>1000,45801=>1000,45802=>1000,45803=>1000,45804=>1000,45805=>1000,45806=>1000,45807=>1000,45808=>1000,45809=>1000,45810=>1000,45811=>1000,45812=>1000,45813=>1000,45814=>1000,45815=>1000,45816=>1000,45817=>1000,45818=>1000,45819=>1000,45820=>1000,45821=>1000,45822=>1000,45823=>1000,45824=>1000,45825=>1000,45826=>1000,45827=>1000,45828=>1000,45829=>1000,45830=>1000,45831=>1000,45832=>1000,45833=>1000,45834=>1000,45835=>1000,45836=>1000,45837=>1000,45838=>1000,45839=>1000,45840=>1000,45841=>1000,45842=>1000,45843=>1000,45844=>1000,45845=>1000,45846=>1000,45847=>1000,45848=>1000,45849=>1000,45850=>1000,45851=>1000,45852=>1000,45853=>1000,45854=>1000,45855=>1000,45856=>1000,45857=>1000,45858=>1000,45859=>1000,45860=>1000,45861=>1000,45862=>1000,45863=>1000,45864=>1000,45865=>1000,45866=>1000,45867=>1000,45868=>1000,45869=>1000,45870=>1000,45871=>1000,45872=>1000,45873=>1000,45874=>1000,45875=>1000,45876=>1000,45877=>1000,45878=>1000,45879=>1000,45880=>1000,45881=>1000,45882=>1000,45883=>1000,45884=>1000,45885=>1000,45886=>1000,45887=>1000,45888=>1000,45889=>1000,45890=>1000,45891=>1000,45892=>1000,45893=>1000,45894=>1000,45895=>1000,45896=>1000,45897=>1000,45898=>1000,45899=>1000,45900=>1000,45901=>1000,45902=>1000,45903=>1000,45904=>1000,45905=>1000,45906=>1000,45907=>1000,45908=>1000,45909=>1000,45910=>1000,45911=>1000,45912=>1000,45913=>1000,45914=>1000,45915=>1000,45916=>1000,45917=>1000,45918=>1000,45919=>1000,45920=>1000,45921=>1000,45922=>1000,45923=>1000,45924=>1000,45925=>1000,45926=>1000,45927=>1000,45928=>1000,45929=>1000,45930=>1000,45931=>1000,45932=>1000,45933=>1000,45934=>1000,45935=>1000,45936=>1000,45937=>1000,45938=>1000,45939=>1000,45940=>1000,45941=>1000,45942=>1000,45943=>1000,45944=>1000,45945=>1000,45946=>1000,45947=>1000,45948=>1000,45949=>1000,45950=>1000,45951=>1000,45952=>1000,45953=>1000,45954=>1000,45955=>1000,45956=>1000,45957=>1000,45958=>1000,45959=>1000,45960=>1000,45961=>1000,45962=>1000,45963=>1000,45964=>1000,45965=>1000,45966=>1000,45967=>1000,45968=>1000,45969=>1000,45970=>1000,45971=>1000,45972=>1000,45973=>1000,45974=>1000,45975=>1000,45976=>1000,45977=>1000,45978=>1000,45979=>1000,45980=>1000,45981=>1000,45982=>1000,45983=>1000,45984=>1000,45985=>1000,45986=>1000,45987=>1000,45988=>1000,45989=>1000,45990=>1000,45991=>1000,45992=>1000,45993=>1000,45994=>1000,45995=>1000,45996=>1000,45997=>1000,45998=>1000,45999=>1000,46000=>1000,46001=>1000,46002=>1000,46003=>1000,46004=>1000,46005=>1000,46006=>1000,46007=>1000,46008=>1000,46009=>1000,46010=>1000,46011=>1000,46012=>1000,46013=>1000,46014=>1000,46015=>1000,46016=>1000,46017=>1000,46018=>1000,46019=>1000,46020=>1000,46021=>1000,46022=>1000,46023=>1000,46024=>1000,46025=>1000,46026=>1000,46027=>1000,46028=>1000,46029=>1000,46030=>1000,46031=>1000,46032=>1000,46033=>1000,46034=>1000,46035=>1000,46036=>1000,46037=>1000,46038=>1000,46039=>1000,46040=>1000,46041=>1000,46042=>1000,46043=>1000,46044=>1000,46045=>1000,46046=>1000,46047=>1000,46048=>1000,46049=>1000,46050=>1000,46051=>1000,46052=>1000,46053=>1000,46054=>1000,46055=>1000,46056=>1000,46057=>1000,46058=>1000,46059=>1000,46060=>1000,46061=>1000,46062=>1000,46063=>1000,46064=>1000,46065=>1000,46066=>1000,46067=>1000,46068=>1000,46069=>1000,46070=>1000,46071=>1000,46072=>1000,46073=>1000,46074=>1000,46075=>1000,46076=>1000,46077=>1000,46078=>1000,46079=>1000,46080=>1000,46081=>1000,46082=>1000,46083=>1000,46084=>1000,46085=>1000,46086=>1000,46087=>1000,46088=>1000,46089=>1000,46090=>1000,46091=>1000,46092=>1000,46093=>1000,46094=>1000,46095=>1000,46096=>1000,46097=>1000,46098=>1000,46099=>1000,46100=>1000,46101=>1000,46102=>1000,46103=>1000,46104=>1000,46105=>1000,46106=>1000,46107=>1000,46108=>1000,46109=>1000,46110=>1000,46111=>1000,46112=>1000,46113=>1000,46114=>1000,46115=>1000,46116=>1000,46117=>1000,46118=>1000,46119=>1000,46120=>1000,46121=>1000,46122=>1000,46123=>1000,46124=>1000,46125=>1000,46126=>1000,46127=>1000,46128=>1000,46129=>1000,46130=>1000,46131=>1000,46132=>1000,46133=>1000,46134=>1000,46135=>1000,46136=>1000,46137=>1000,46138=>1000,46139=>1000,46140=>1000,46141=>1000,46142=>1000,46143=>1000,46144=>1000,46145=>1000,46146=>1000,46147=>1000,46148=>1000,46149=>1000,46150=>1000,46151=>1000,46152=>1000,46153=>1000,46154=>1000,46155=>1000,46156=>1000,46157=>1000,46158=>1000,46159=>1000,46160=>1000,46161=>1000,46162=>1000,46163=>1000,46164=>1000,46165=>1000,46166=>1000,46167=>1000,46168=>1000,46169=>1000,46170=>1000,46171=>1000,46172=>1000,46173=>1000,46174=>1000,46175=>1000,46176=>1000,46177=>1000,46178=>1000,46179=>1000,46180=>1000,46181=>1000,46182=>1000,46183=>1000,46184=>1000,46185=>1000,46186=>1000,46187=>1000,46188=>1000,46189=>1000,46190=>1000,46191=>1000,46192=>1000,46193=>1000,46194=>1000,46195=>1000,46196=>1000,46197=>1000,46198=>1000,46199=>1000,46200=>1000,46201=>1000,46202=>1000,46203=>1000,46204=>1000,46205=>1000,46206=>1000,46207=>1000,46208=>1000,46209=>1000,46210=>1000,46211=>1000,46212=>1000,46213=>1000,46214=>1000,46215=>1000,46216=>1000,46217=>1000,46218=>1000,46219=>1000,46220=>1000,46221=>1000,46222=>1000,46223=>1000,46224=>1000,46225=>1000,46226=>1000,46227=>1000,46228=>1000,46229=>1000,46230=>1000,46231=>1000,46232=>1000,46233=>1000,46234=>1000,46235=>1000,46236=>1000,46237=>1000,46238=>1000,46239=>1000,46240=>1000,46241=>1000,46242=>1000,46243=>1000,46244=>1000,46245=>1000,46246=>1000,46247=>1000,46248=>1000,46249=>1000,46250=>1000,46251=>1000,46252=>1000,46253=>1000,46254=>1000,46255=>1000,46256=>1000,46257=>1000,46258=>1000,46259=>1000,46260=>1000,46261=>1000,46262=>1000,46263=>1000,46264=>1000,46265=>1000,46266=>1000,46267=>1000,46268=>1000,46269=>1000,46270=>1000,46271=>1000,46272=>1000,46273=>1000,46274=>1000,46275=>1000,46276=>1000,46277=>1000,46278=>1000,46279=>1000,46280=>1000,46281=>1000,46282=>1000,46283=>1000,46284=>1000,46285=>1000,46286=>1000,46287=>1000,46288=>1000,46289=>1000,46290=>1000,46291=>1000,46292=>1000,46293=>1000,46294=>1000,46295=>1000,46296=>1000,46297=>1000,46298=>1000,46299=>1000,46300=>1000,46301=>1000,46302=>1000,46303=>1000,46304=>1000,46305=>1000,46306=>1000,46307=>1000,46308=>1000,46309=>1000,46310=>1000,46311=>1000,46312=>1000,46313=>1000,46314=>1000,46315=>1000,46316=>1000,46317=>1000,46318=>1000,46319=>1000,46320=>1000,46321=>1000,46322=>1000,46323=>1000,46324=>1000,46325=>1000,46326=>1000,46327=>1000,46328=>1000,46329=>1000,46330=>1000,46331=>1000,46332=>1000,46333=>1000,46334=>1000,46335=>1000,46336=>1000,46337=>1000,46338=>1000,46339=>1000,46340=>1000,46341=>1000,46342=>1000,46343=>1000,46344=>1000,46345=>1000,46346=>1000,46347=>1000,46348=>1000,46349=>1000,46350=>1000,46351=>1000,46352=>1000,46353=>1000,46354=>1000,46355=>1000,46356=>1000,46357=>1000,46358=>1000,46359=>1000,46360=>1000,46361=>1000,46362=>1000,46363=>1000,46364=>1000,46365=>1000,46366=>1000,46367=>1000,46368=>1000,46369=>1000,46370=>1000,46371=>1000,46372=>1000,46373=>1000,46374=>1000,46375=>1000,46376=>1000,46377=>1000,46378=>1000,46379=>1000,46380=>1000,46381=>1000,46382=>1000,46383=>1000,46384=>1000,46385=>1000,46386=>1000,46387=>1000,46388=>1000,46389=>1000,46390=>1000,46391=>1000,46392=>1000,46393=>1000,46394=>1000,46395=>1000,46396=>1000,46397=>1000,46398=>1000,46399=>1000,46400=>1000,46401=>1000,46402=>1000,46403=>1000,46404=>1000,46405=>1000,46406=>1000,46407=>1000,46408=>1000,46409=>1000,46410=>1000,46411=>1000,46412=>1000,46413=>1000,46414=>1000,46415=>1000,46416=>1000,46417=>1000,46418=>1000,46419=>1000,46420=>1000,46421=>1000,46422=>1000,46423=>1000,46424=>1000,46425=>1000,46426=>1000,46427=>1000,46428=>1000,46429=>1000,46430=>1000,46431=>1000,46432=>1000,46433=>1000,46434=>1000,46435=>1000,46436=>1000,46437=>1000,46438=>1000,46439=>1000,46440=>1000,46441=>1000,46442=>1000,46443=>1000,46444=>1000,46445=>1000,46446=>1000,46447=>1000,46448=>1000,46449=>1000,46450=>1000,46451=>1000,46452=>1000,46453=>1000,46454=>1000,46455=>1000,46456=>1000,46457=>1000,46458=>1000,46459=>1000,46460=>1000,46461=>1000,46462=>1000,46463=>1000,46464=>1000,46465=>1000,46466=>1000,46467=>1000,46468=>1000,46469=>1000,46470=>1000,46471=>1000,46472=>1000,46473=>1000,46474=>1000,46475=>1000,46476=>1000,46477=>1000,46478=>1000,46479=>1000,46480=>1000,46481=>1000,46482=>1000,46483=>1000,46484=>1000,46485=>1000,46486=>1000,46487=>1000,46488=>1000,46489=>1000,46490=>1000,46491=>1000,46492=>1000,46493=>1000,46494=>1000,46495=>1000,46496=>1000,46497=>1000,46498=>1000,46499=>1000,46500=>1000,46501=>1000,46502=>1000,46503=>1000,46504=>1000,46505=>1000,46506=>1000,46507=>1000,46508=>1000,46509=>1000,46510=>1000,46511=>1000,46512=>1000,46513=>1000,46514=>1000,46515=>1000,46516=>1000,46517=>1000,46518=>1000,46519=>1000,46520=>1000,46521=>1000,46522=>1000,46523=>1000,46524=>1000,46525=>1000,46526=>1000,46527=>1000,46528=>1000,46529=>1000,46530=>1000,46531=>1000,46532=>1000,46533=>1000,46534=>1000,46535=>1000,46536=>1000,46537=>1000,46538=>1000,46539=>1000,46540=>1000,46541=>1000,46542=>1000,46543=>1000,46544=>1000,46545=>1000,46546=>1000,46547=>1000,46548=>1000,46549=>1000,46550=>1000,46551=>1000,46552=>1000,46553=>1000,46554=>1000,46555=>1000,46556=>1000,46557=>1000,46558=>1000,46559=>1000,46560=>1000,46561=>1000,46562=>1000,46563=>1000,46564=>1000,46565=>1000,46566=>1000,46567=>1000,46568=>1000,46569=>1000,46570=>1000,46571=>1000,46572=>1000,46573=>1000,46574=>1000,46575=>1000,46576=>1000,46577=>1000,46578=>1000,46579=>1000,46580=>1000,46581=>1000,46582=>1000,46583=>1000,46584=>1000,46585=>1000,46586=>1000,46587=>1000,46588=>1000,46589=>1000,46590=>1000,46591=>1000,46592=>1000,46593=>1000,46594=>1000,46595=>1000,46596=>1000,46597=>1000,46598=>1000,46599=>1000,46600=>1000,46601=>1000,46602=>1000,46603=>1000,46604=>1000,46605=>1000,46606=>1000,46607=>1000,46608=>1000,46609=>1000,46610=>1000,46611=>1000,46612=>1000,46613=>1000,46614=>1000,46615=>1000,46616=>1000,46617=>1000,46618=>1000,46619=>1000,46620=>1000,46621=>1000,46622=>1000,46623=>1000,46624=>1000,46625=>1000,46626=>1000,46627=>1000,46628=>1000,46629=>1000,46630=>1000,46631=>1000,46632=>1000,46633=>1000,46634=>1000,46635=>1000,46636=>1000,46637=>1000,46638=>1000,46639=>1000,46640=>1000,46641=>1000,46642=>1000,46643=>1000,46644=>1000,46645=>1000,46646=>1000,46647=>1000,46648=>1000,46649=>1000,46650=>1000,46651=>1000,46652=>1000,46653=>1000,46654=>1000,46655=>1000,46656=>1000,46657=>1000,46658=>1000,46659=>1000,46660=>1000,46661=>1000,46662=>1000,46663=>1000,46664=>1000,46665=>1000,46666=>1000,46667=>1000,46668=>1000,46669=>1000,46670=>1000,46671=>1000,46672=>1000,46673=>1000,46674=>1000,46675=>1000,46676=>1000,46677=>1000,46678=>1000,46679=>1000,46680=>1000,46681=>1000,46682=>1000,46683=>1000,46684=>1000,46685=>1000,46686=>1000,46687=>1000,46688=>1000,46689=>1000,46690=>1000,46691=>1000,46692=>1000,46693=>1000,46694=>1000,46695=>1000,46696=>1000,46697=>1000,46698=>1000,46699=>1000,46700=>1000,46701=>1000,46702=>1000,46703=>1000,46704=>1000,46705=>1000,46706=>1000,46707=>1000,46708=>1000,46709=>1000,46710=>1000,46711=>1000,46712=>1000,46713=>1000,46714=>1000,46715=>1000,46716=>1000,46717=>1000,46718=>1000,46719=>1000,46720=>1000,46721=>1000,46722=>1000,46723=>1000,46724=>1000,46725=>1000,46726=>1000,46727=>1000,46728=>1000,46729=>1000,46730=>1000,46731=>1000,46732=>1000,46733=>1000,46734=>1000,46735=>1000,46736=>1000,46737=>1000,46738=>1000,46739=>1000,46740=>1000,46741=>1000,46742=>1000,46743=>1000,46744=>1000,46745=>1000,46746=>1000,46747=>1000,46748=>1000,46749=>1000,46750=>1000,46751=>1000,46752=>1000,46753=>1000,46754=>1000,46755=>1000,46756=>1000,46757=>1000,46758=>1000,46759=>1000,46760=>1000,46761=>1000,46762=>1000,46763=>1000,46764=>1000,46765=>1000,46766=>1000,46767=>1000,46768=>1000,46769=>1000,46770=>1000,46771=>1000,46772=>1000,46773=>1000,46774=>1000,46775=>1000,46776=>1000,46777=>1000,46778=>1000,46779=>1000,46780=>1000,46781=>1000,46782=>1000,46783=>1000,46784=>1000,46785=>1000,46786=>1000,46787=>1000,46788=>1000,46789=>1000,46790=>1000,46791=>1000,46792=>1000,46793=>1000,46794=>1000,46795=>1000,46796=>1000,46797=>1000,46798=>1000,46799=>1000,46800=>1000,46801=>1000,46802=>1000,46803=>1000,46804=>1000,46805=>1000,46806=>1000,46807=>1000,46808=>1000,46809=>1000,46810=>1000,46811=>1000,46812=>1000,46813=>1000,46814=>1000,46815=>1000,46816=>1000,46817=>1000,46818=>1000,46819=>1000,46820=>1000,46821=>1000,46822=>1000,46823=>1000,46824=>1000,46825=>1000,46826=>1000,46827=>1000,46828=>1000,46829=>1000,46830=>1000,46831=>1000,46832=>1000,46833=>1000,46834=>1000,46835=>1000,46836=>1000,46837=>1000,46838=>1000,46839=>1000,46840=>1000,46841=>1000,46842=>1000,46843=>1000,46844=>1000,46845=>1000,46846=>1000,46847=>1000,46848=>1000,46849=>1000,46850=>1000,46851=>1000,46852=>1000,46853=>1000,46854=>1000,46855=>1000,46856=>1000,46857=>1000,46858=>1000,46859=>1000,46860=>1000,46861=>1000,46862=>1000,46863=>1000,46864=>1000,46865=>1000,46866=>1000,46867=>1000,46868=>1000,46869=>1000,46870=>1000,46871=>1000,46872=>1000,46873=>1000,46874=>1000,46875=>1000,46876=>1000,46877=>1000,46878=>1000,46879=>1000,46880=>1000,46881=>1000,46882=>1000,46883=>1000,46884=>1000,46885=>1000,46886=>1000,46887=>1000,46888=>1000,46889=>1000,46890=>1000,46891=>1000,46892=>1000,46893=>1000,46894=>1000,46895=>1000,46896=>1000,46897=>1000,46898=>1000,46899=>1000,46900=>1000,46901=>1000,46902=>1000,46903=>1000,46904=>1000,46905=>1000,46906=>1000,46907=>1000,46908=>1000,46909=>1000,46910=>1000,46911=>1000,46912=>1000,46913=>1000,46914=>1000,46915=>1000,46916=>1000,46917=>1000,46918=>1000,46919=>1000,46920=>1000,46921=>1000,46922=>1000,46923=>1000,46924=>1000,46925=>1000,46926=>1000,46927=>1000,46928=>1000,46929=>1000,46930=>1000,46931=>1000,46932=>1000,46933=>1000,46934=>1000,46935=>1000,46936=>1000,46937=>1000,46938=>1000,46939=>1000,46940=>1000,46941=>1000,46942=>1000,46943=>1000,46944=>1000,46945=>1000,46946=>1000,46947=>1000,46948=>1000,46949=>1000,46950=>1000,46951=>1000,46952=>1000,46953=>1000,46954=>1000,46955=>1000,46956=>1000,46957=>1000,46958=>1000,46959=>1000,46960=>1000,46961=>1000,46962=>1000,46963=>1000,46964=>1000,46965=>1000,46966=>1000,46967=>1000,46968=>1000,46969=>1000,46970=>1000,46971=>1000,46972=>1000,46973=>1000,46974=>1000,46975=>1000,46976=>1000,46977=>1000,46978=>1000,46979=>1000,46980=>1000,46981=>1000,46982=>1000,46983=>1000,46984=>1000,46985=>1000,46986=>1000,46987=>1000,46988=>1000,46989=>1000,46990=>1000,46991=>1000,46992=>1000,46993=>1000,46994=>1000,46995=>1000,46996=>1000,46997=>1000,46998=>1000,46999=>1000,47000=>1000,47001=>1000,47002=>1000,47003=>1000,47004=>1000,47005=>1000,47006=>1000,47007=>1000,47008=>1000,47009=>1000,47010=>1000,47011=>1000,47012=>1000,47013=>1000,47014=>1000,47015=>1000,47016=>1000,47017=>1000,47018=>1000,47019=>1000,47020=>1000,47021=>1000,47022=>1000,47023=>1000,47024=>1000,47025=>1000,47026=>1000,47027=>1000,47028=>1000,47029=>1000,47030=>1000,47031=>1000,47032=>1000,47033=>1000,47034=>1000,47035=>1000,47036=>1000,47037=>1000,47038=>1000,47039=>1000,47040=>1000,47041=>1000,47042=>1000,47043=>1000,47044=>1000,47045=>1000,47046=>1000,47047=>1000,47048=>1000,47049=>1000,47050=>1000,47051=>1000,47052=>1000,47053=>1000,47054=>1000,47055=>1000,47056=>1000,47057=>1000,47058=>1000,47059=>1000,47060=>1000,47061=>1000,47062=>1000,47063=>1000,47064=>1000,47065=>1000,47066=>1000,47067=>1000,47068=>1000,47069=>1000,47070=>1000,47071=>1000,47072=>1000,47073=>1000,47074=>1000,47075=>1000,47076=>1000,47077=>1000,47078=>1000,47079=>1000,47080=>1000,47081=>1000,47082=>1000,47083=>1000,47084=>1000,47085=>1000,47086=>1000,47087=>1000,47088=>1000,47089=>1000,47090=>1000,47091=>1000,47092=>1000,47093=>1000,47094=>1000,47095=>1000,47096=>1000,47097=>1000,47098=>1000,47099=>1000,47100=>1000,47101=>1000,47102=>1000,47103=>1000,47104=>1000,47105=>1000,47106=>1000,47107=>1000,47108=>1000,47109=>1000,47110=>1000,47111=>1000,47112=>1000,47113=>1000,47114=>1000,47115=>1000,47116=>1000,47117=>1000,47118=>1000,47119=>1000,47120=>1000,47121=>1000,47122=>1000,47123=>1000,47124=>1000,47125=>1000,47126=>1000,47127=>1000,47128=>1000,47129=>1000,47130=>1000,47131=>1000,47132=>1000,47133=>1000,47134=>1000,47135=>1000,47136=>1000,47137=>1000,47138=>1000,47139=>1000,47140=>1000,47141=>1000,47142=>1000,47143=>1000,47144=>1000,47145=>1000,47146=>1000,47147=>1000,47148=>1000,47149=>1000,47150=>1000,47151=>1000,47152=>1000,47153=>1000,47154=>1000,47155=>1000,47156=>1000,47157=>1000,47158=>1000,47159=>1000,47160=>1000,47161=>1000,47162=>1000,47163=>1000,47164=>1000,47165=>1000,47166=>1000,47167=>1000,47168=>1000,47169=>1000,47170=>1000,47171=>1000,47172=>1000,47173=>1000,47174=>1000,47175=>1000,47176=>1000,47177=>1000,47178=>1000,47179=>1000,47180=>1000,47181=>1000,47182=>1000,47183=>1000,47184=>1000,47185=>1000,47186=>1000,47187=>1000,47188=>1000,47189=>1000,47190=>1000,47191=>1000,47192=>1000,47193=>1000,47194=>1000,47195=>1000,47196=>1000,47197=>1000,47198=>1000,47199=>1000,47200=>1000,47201=>1000,47202=>1000,47203=>1000,47204=>1000,47205=>1000,47206=>1000,47207=>1000,47208=>1000,47209=>1000,47210=>1000,47211=>1000,47212=>1000,47213=>1000,47214=>1000,47215=>1000,47216=>1000,47217=>1000,47218=>1000,47219=>1000,47220=>1000,47221=>1000,47222=>1000,47223=>1000,47224=>1000,47225=>1000,47226=>1000,47227=>1000,47228=>1000,47229=>1000,47230=>1000,47231=>1000,47232=>1000,47233=>1000,47234=>1000,47235=>1000,47236=>1000,47237=>1000,47238=>1000,47239=>1000,47240=>1000,47241=>1000,47242=>1000,47243=>1000,47244=>1000,47245=>1000,47246=>1000,47247=>1000,47248=>1000,47249=>1000,47250=>1000,47251=>1000,47252=>1000,47253=>1000,47254=>1000,47255=>1000,47256=>1000,47257=>1000,47258=>1000,47259=>1000,47260=>1000,47261=>1000,47262=>1000,47263=>1000,47264=>1000,47265=>1000,47266=>1000,47267=>1000,47268=>1000,47269=>1000,47270=>1000,47271=>1000,47272=>1000,47273=>1000,47274=>1000,47275=>1000,47276=>1000,47277=>1000,47278=>1000,47279=>1000,47280=>1000,47281=>1000,47282=>1000,47283=>1000,47284=>1000,47285=>1000,47286=>1000,47287=>1000,47288=>1000,47289=>1000,47290=>1000,47291=>1000,47292=>1000,47293=>1000,47294=>1000,47295=>1000,47296=>1000,47297=>1000,47298=>1000,47299=>1000,47300=>1000,47301=>1000,47302=>1000,47303=>1000,47304=>1000,47305=>1000,47306=>1000,47307=>1000,47308=>1000,47309=>1000,47310=>1000,47311=>1000,47312=>1000,47313=>1000,47314=>1000,47315=>1000,47316=>1000,47317=>1000,47318=>1000,47319=>1000,47320=>1000,47321=>1000,47322=>1000,47323=>1000,47324=>1000,47325=>1000,47326=>1000,47327=>1000,47328=>1000,47329=>1000,47330=>1000,47331=>1000,47332=>1000,47333=>1000,47334=>1000,47335=>1000,47336=>1000,47337=>1000,47338=>1000,47339=>1000,47340=>1000,47341=>1000,47342=>1000,47343=>1000,47344=>1000,47345=>1000,47346=>1000,47347=>1000,47348=>1000,47349=>1000,47350=>1000,47351=>1000,47352=>1000,47353=>1000,47354=>1000,47355=>1000,47356=>1000,47357=>1000,47358=>1000,47359=>1000,47360=>1000,47361=>1000,47362=>1000,47363=>1000,47364=>1000,47365=>1000,47366=>1000,47367=>1000,47368=>1000,47369=>1000,47370=>1000,47371=>1000,47372=>1000,47373=>1000,47374=>1000,47375=>1000,47376=>1000,47377=>1000,47378=>1000,47379=>1000,47380=>1000,47381=>1000,47382=>1000,47383=>1000,47384=>1000,47385=>1000,47386=>1000,47387=>1000,47388=>1000,47389=>1000,47390=>1000,47391=>1000,47392=>1000,47393=>1000,47394=>1000,47395=>1000,47396=>1000,47397=>1000,47398=>1000,47399=>1000,47400=>1000,47401=>1000,47402=>1000,47403=>1000,47404=>1000,47405=>1000,47406=>1000,47407=>1000,47408=>1000,47409=>1000,47410=>1000,47411=>1000,47412=>1000,47413=>1000,47414=>1000,47415=>1000,47416=>1000,47417=>1000,47418=>1000,47419=>1000,47420=>1000,47421=>1000,47422=>1000,47423=>1000,47424=>1000,47425=>1000,47426=>1000,47427=>1000,47428=>1000,47429=>1000,47430=>1000,47431=>1000,47432=>1000,47433=>1000,47434=>1000,47435=>1000,47436=>1000,47437=>1000,47438=>1000,47439=>1000,47440=>1000,47441=>1000,47442=>1000,47443=>1000,47444=>1000,47445=>1000,47446=>1000,47447=>1000,47448=>1000,47449=>1000,47450=>1000,47451=>1000,47452=>1000,47453=>1000,47454=>1000,47455=>1000,47456=>1000,47457=>1000,47458=>1000,47459=>1000,47460=>1000,47461=>1000,47462=>1000,47463=>1000,47464=>1000,47465=>1000,47466=>1000,47467=>1000,47468=>1000,47469=>1000,47470=>1000,47471=>1000,47472=>1000,47473=>1000,47474=>1000,47475=>1000,47476=>1000,47477=>1000,47478=>1000,47479=>1000,47480=>1000,47481=>1000,47482=>1000,47483=>1000,47484=>1000,47485=>1000,47486=>1000,47487=>1000,47488=>1000,47489=>1000,47490=>1000,47491=>1000,47492=>1000,47493=>1000,47494=>1000,47495=>1000,47496=>1000,47497=>1000,47498=>1000,47499=>1000,47500=>1000,47501=>1000,47502=>1000,47503=>1000,47504=>1000,47505=>1000,47506=>1000,47507=>1000,47508=>1000,47509=>1000,47510=>1000,47511=>1000,47512=>1000,47513=>1000,47514=>1000,47515=>1000,47516=>1000,47517=>1000,47518=>1000,47519=>1000,47520=>1000,47521=>1000,47522=>1000,47523=>1000,47524=>1000,47525=>1000,47526=>1000,47527=>1000,47528=>1000,47529=>1000,47530=>1000,47531=>1000,47532=>1000,47533=>1000,47534=>1000,47535=>1000,47536=>1000,47537=>1000,47538=>1000,47539=>1000,47540=>1000,47541=>1000,47542=>1000,47543=>1000,47544=>1000,47545=>1000,47546=>1000,47547=>1000,47548=>1000,47549=>1000,47550=>1000,47551=>1000,47552=>1000,47553=>1000,47554=>1000,47555=>1000,47556=>1000,47557=>1000,47558=>1000,47559=>1000,47560=>1000,47561=>1000,47562=>1000,47563=>1000,47564=>1000,47565=>1000,47566=>1000,47567=>1000,47568=>1000,47569=>1000,47570=>1000,47571=>1000,47572=>1000,47573=>1000,47574=>1000,47575=>1000,47576=>1000,47577=>1000,47578=>1000,47579=>1000,47580=>1000,47581=>1000,47582=>1000,47583=>1000,47584=>1000,47585=>1000,47586=>1000,47587=>1000,47588=>1000,47589=>1000,47590=>1000,47591=>1000,47592=>1000,47593=>1000,47594=>1000,47595=>1000,47596=>1000,47597=>1000,47598=>1000,47599=>1000,47600=>1000,47601=>1000,47602=>1000,47603=>1000,47604=>1000,47605=>1000,47606=>1000,47607=>1000,47608=>1000,47609=>1000,47610=>1000,47611=>1000,47612=>1000,47613=>1000,47614=>1000,47615=>1000,47616=>1000,47617=>1000,47618=>1000,47619=>1000,47620=>1000,47621=>1000,47622=>1000,47623=>1000,47624=>1000,47625=>1000,47626=>1000,47627=>1000,47628=>1000,47629=>1000,47630=>1000,47631=>1000,47632=>1000,47633=>1000,47634=>1000,47635=>1000,47636=>1000,47637=>1000,47638=>1000,47639=>1000,47640=>1000,47641=>1000,47642=>1000,47643=>1000,47644=>1000,47645=>1000,47646=>1000,47647=>1000,47648=>1000,47649=>1000,47650=>1000,47651=>1000,47652=>1000,47653=>1000,47654=>1000,47655=>1000,47656=>1000,47657=>1000,47658=>1000,47659=>1000,47660=>1000,47661=>1000,47662=>1000,47663=>1000,47664=>1000,47665=>1000,47666=>1000,47667=>1000,47668=>1000,47669=>1000,47670=>1000,47671=>1000,47672=>1000,47673=>1000,47674=>1000,47675=>1000,47676=>1000,47677=>1000,47678=>1000,47679=>1000,47680=>1000,47681=>1000,47682=>1000,47683=>1000,47684=>1000,47685=>1000,47686=>1000,47687=>1000,47688=>1000,47689=>1000,47690=>1000,47691=>1000,47692=>1000,47693=>1000,47694=>1000,47695=>1000,47696=>1000,47697=>1000,47698=>1000,47699=>1000,47700=>1000,47701=>1000,47702=>1000,47703=>1000,47704=>1000,47705=>1000,47706=>1000,47707=>1000,47708=>1000,47709=>1000,47710=>1000,47711=>1000,47712=>1000,47713=>1000,47714=>1000,47715=>1000,47716=>1000,47717=>1000,47718=>1000,47719=>1000,47720=>1000,47721=>1000,47722=>1000,47723=>1000,47724=>1000,47725=>1000,47726=>1000,47727=>1000,47728=>1000,47729=>1000,47730=>1000,47731=>1000,47732=>1000,47733=>1000,47734=>1000,47735=>1000,47736=>1000,47737=>1000,47738=>1000,47739=>1000,47740=>1000,47741=>1000,47742=>1000,47743=>1000,47744=>1000,47745=>1000,47746=>1000,47747=>1000,47748=>1000,47749=>1000,47750=>1000,47751=>1000,47752=>1000,47753=>1000,47754=>1000,47755=>1000,47756=>1000,47757=>1000,47758=>1000,47759=>1000,47760=>1000,47761=>1000,47762=>1000,47763=>1000,47764=>1000,47765=>1000,47766=>1000,47767=>1000,47768=>1000,47769=>1000,47770=>1000,47771=>1000,47772=>1000,47773=>1000,47774=>1000,47775=>1000,47776=>1000,47777=>1000,47778=>1000,47779=>1000,47780=>1000,47781=>1000,47782=>1000,47783=>1000,47784=>1000,47785=>1000,47786=>1000,47787=>1000,47788=>1000,47789=>1000,47790=>1000,47791=>1000,47792=>1000,47793=>1000,47794=>1000,47795=>1000,47796=>1000,47797=>1000,47798=>1000,47799=>1000,47800=>1000,47801=>1000,47802=>1000,47803=>1000,47804=>1000,47805=>1000,47806=>1000,47807=>1000,47808=>1000,47809=>1000,47810=>1000,47811=>1000,47812=>1000,47813=>1000,47814=>1000,47815=>1000,47816=>1000,47817=>1000,47818=>1000,47819=>1000,47820=>1000,47821=>1000,47822=>1000,47823=>1000,47824=>1000,47825=>1000,47826=>1000,47827=>1000,47828=>1000,47829=>1000,47830=>1000,47831=>1000,47832=>1000,47833=>1000,47834=>1000,47835=>1000,47836=>1000,47837=>1000,47838=>1000,47839=>1000,47840=>1000,47841=>1000,47842=>1000,47843=>1000,47844=>1000,47845=>1000,47846=>1000,47847=>1000,47848=>1000,47849=>1000,47850=>1000,47851=>1000,47852=>1000,47853=>1000,47854=>1000,47855=>1000,47856=>1000,47857=>1000,47858=>1000,47859=>1000,47860=>1000,47861=>1000,47862=>1000,47863=>1000,47864=>1000,47865=>1000,47866=>1000,47867=>1000,47868=>1000,47869=>1000,47870=>1000,47871=>1000,47872=>1000,47873=>1000,47874=>1000,47875=>1000,47876=>1000,47877=>1000,47878=>1000,47879=>1000,47880=>1000,47881=>1000,47882=>1000,47883=>1000,47884=>1000,47885=>1000,47886=>1000,47887=>1000,47888=>1000,47889=>1000,47890=>1000,47891=>1000,47892=>1000,47893=>1000,47894=>1000,47895=>1000,47896=>1000,47897=>1000,47898=>1000,47899=>1000,47900=>1000,47901=>1000,47902=>1000,47903=>1000,47904=>1000,47905=>1000,47906=>1000,47907=>1000,47908=>1000,47909=>1000,47910=>1000,47911=>1000,47912=>1000,47913=>1000,47914=>1000,47915=>1000,47916=>1000,47917=>1000,47918=>1000,47919=>1000,47920=>1000,47921=>1000,47922=>1000,47923=>1000,47924=>1000,47925=>1000,47926=>1000,47927=>1000,47928=>1000,47929=>1000,47930=>1000,47931=>1000,47932=>1000,47933=>1000,47934=>1000,47935=>1000,47936=>1000,47937=>1000,47938=>1000,47939=>1000,47940=>1000,47941=>1000,47942=>1000,47943=>1000,47944=>1000,47945=>1000,47946=>1000,47947=>1000,47948=>1000,47949=>1000,47950=>1000,47951=>1000,47952=>1000,47953=>1000,47954=>1000,47955=>1000,47956=>1000,47957=>1000,47958=>1000,47959=>1000,47960=>1000,47961=>1000,47962=>1000,47963=>1000,47964=>1000,47965=>1000,47966=>1000,47967=>1000,47968=>1000,47969=>1000,47970=>1000,47971=>1000,47972=>1000,47973=>1000,47974=>1000,47975=>1000,47976=>1000,47977=>1000,47978=>1000,47979=>1000,47980=>1000,47981=>1000,47982=>1000,47983=>1000,47984=>1000,47985=>1000,47986=>1000,47987=>1000,47988=>1000,47989=>1000,47990=>1000,47991=>1000,47992=>1000,47993=>1000,47994=>1000,47995=>1000,47996=>1000,47997=>1000,47998=>1000,47999=>1000,48000=>1000,48001=>1000,48002=>1000,48003=>1000,48004=>1000,48005=>1000,48006=>1000,48007=>1000,48008=>1000,48009=>1000,48010=>1000,48011=>1000,48012=>1000,48013=>1000,48014=>1000,48015=>1000,48016=>1000,48017=>1000,48018=>1000,48019=>1000,48020=>1000,48021=>1000,48022=>1000,48023=>1000,48024=>1000,48025=>1000,48026=>1000,48027=>1000,48028=>1000,48029=>1000,48030=>1000,48031=>1000,48032=>1000,48033=>1000,48034=>1000,48035=>1000,48036=>1000,48037=>1000,48038=>1000,48039=>1000,48040=>1000,48041=>1000,48042=>1000,48043=>1000,48044=>1000,48045=>1000,48046=>1000,48047=>1000,48048=>1000,48049=>1000,48050=>1000,48051=>1000,48052=>1000,48053=>1000,48054=>1000,48055=>1000,48056=>1000,48057=>1000,48058=>1000,48059=>1000,48060=>1000,48061=>1000,48062=>1000,48063=>1000,48064=>1000,48065=>1000,48066=>1000,48067=>1000,48068=>1000,48069=>1000,48070=>1000,48071=>1000,48072=>1000,48073=>1000,48074=>1000,48075=>1000,48076=>1000,48077=>1000,48078=>1000,48079=>1000,48080=>1000,48081=>1000,48082=>1000,48083=>1000,48084=>1000,48085=>1000,48086=>1000,48087=>1000,48088=>1000,48089=>1000,48090=>1000,48091=>1000,48092=>1000,48093=>1000,48094=>1000,48095=>1000,48096=>1000,48097=>1000,48098=>1000,48099=>1000,48100=>1000,48101=>1000,48102=>1000,48103=>1000,48104=>1000,48105=>1000,48106=>1000,48107=>1000,48108=>1000,48109=>1000,48110=>1000,48111=>1000,48112=>1000,48113=>1000,48114=>1000,48115=>1000,48116=>1000,48117=>1000,48118=>1000,48119=>1000,48120=>1000,48121=>1000,48122=>1000,48123=>1000,48124=>1000,48125=>1000,48126=>1000,48127=>1000,48128=>1000,48129=>1000,48130=>1000,48131=>1000,48132=>1000,48133=>1000,48134=>1000,48135=>1000,48136=>1000,48137=>1000,48138=>1000,48139=>1000,48140=>1000,48141=>1000,48142=>1000,48143=>1000,48144=>1000,48145=>1000,48146=>1000,48147=>1000,48148=>1000,48149=>1000,48150=>1000,48151=>1000,48152=>1000,48153=>1000,48154=>1000,48155=>1000,48156=>1000,48157=>1000,48158=>1000,48159=>1000,48160=>1000,48161=>1000,48162=>1000,48163=>1000,48164=>1000,48165=>1000,48166=>1000,48167=>1000,48168=>1000,48169=>1000,48170=>1000,48171=>1000,48172=>1000,48173=>1000,48174=>1000,48175=>1000,48176=>1000,48177=>1000,48178=>1000,48179=>1000,48180=>1000,48181=>1000,48182=>1000,48183=>1000,48184=>1000,48185=>1000,48186=>1000,48187=>1000,48188=>1000,48189=>1000,48190=>1000,48191=>1000,48192=>1000,48193=>1000,48194=>1000,48195=>1000,48196=>1000,48197=>1000,48198=>1000,48199=>1000,48200=>1000,48201=>1000,48202=>1000,48203=>1000,48204=>1000,48205=>1000,48206=>1000,48207=>1000,48208=>1000,48209=>1000,48210=>1000,48211=>1000,48212=>1000,48213=>1000,48214=>1000,48215=>1000,48216=>1000,48217=>1000,48218=>1000,48219=>1000,48220=>1000,48221=>1000,48222=>1000,48223=>1000,48224=>1000,48225=>1000,48226=>1000,48227=>1000,48228=>1000,48229=>1000,48230=>1000,48231=>1000,48232=>1000,48233=>1000,48234=>1000,48235=>1000,48236=>1000,48237=>1000,48238=>1000,48239=>1000,48240=>1000,48241=>1000,48242=>1000,48243=>1000,48244=>1000,48245=>1000,48246=>1000,48247=>1000,48248=>1000,48249=>1000,48250=>1000,48251=>1000,48252=>1000,48253=>1000,48254=>1000,48255=>1000,48256=>1000,48257=>1000,48258=>1000,48259=>1000,48260=>1000,48261=>1000,48262=>1000,48263=>1000,48264=>1000,48265=>1000,48266=>1000,48267=>1000,48268=>1000,48269=>1000,48270=>1000,48271=>1000,48272=>1000,48273=>1000,48274=>1000,48275=>1000,48276=>1000,48277=>1000,48278=>1000,48279=>1000,48280=>1000,48281=>1000,48282=>1000,48283=>1000,48284=>1000,48285=>1000,48286=>1000,48287=>1000,48288=>1000,48289=>1000,48290=>1000,48291=>1000,48292=>1000,48293=>1000,48294=>1000,48295=>1000,48296=>1000,48297=>1000,48298=>1000,48299=>1000,48300=>1000,48301=>1000,48302=>1000,48303=>1000,48304=>1000,48305=>1000,48306=>1000,48307=>1000,48308=>1000,48309=>1000,48310=>1000,48311=>1000,48312=>1000,48313=>1000,48314=>1000,48315=>1000,48316=>1000,48317=>1000,48318=>1000,48319=>1000,48320=>1000,48321=>1000,48322=>1000,48323=>1000,48324=>1000,48325=>1000,48326=>1000,48327=>1000,48328=>1000,48329=>1000,48330=>1000,48331=>1000,48332=>1000,48333=>1000,48334=>1000,48335=>1000,48336=>1000,48337=>1000,48338=>1000,48339=>1000,48340=>1000,48341=>1000,48342=>1000,48343=>1000,48344=>1000,48345=>1000,48346=>1000,48347=>1000,48348=>1000,48349=>1000,48350=>1000,48351=>1000,48352=>1000,48353=>1000,48354=>1000,48355=>1000,48356=>1000,48357=>1000,48358=>1000,48359=>1000,48360=>1000,48361=>1000,48362=>1000,48363=>1000,48364=>1000,48365=>1000,48366=>1000,48367=>1000,48368=>1000,48369=>1000,48370=>1000,48371=>1000,48372=>1000,48373=>1000,48374=>1000,48375=>1000,48376=>1000,48377=>1000,48378=>1000,48379=>1000,48380=>1000,48381=>1000,48382=>1000,48383=>1000,48384=>1000,48385=>1000,48386=>1000,48387=>1000,48388=>1000,48389=>1000,48390=>1000,48391=>1000,48392=>1000,48393=>1000,48394=>1000,48395=>1000,48396=>1000,48397=>1000,48398=>1000,48399=>1000,48400=>1000,48401=>1000,48402=>1000,48403=>1000,48404=>1000,48405=>1000,48406=>1000,48407=>1000,48408=>1000,48409=>1000,48410=>1000,48411=>1000,48412=>1000,48413=>1000,48414=>1000,48415=>1000,48416=>1000,48417=>1000,48418=>1000,48419=>1000,48420=>1000,48421=>1000,48422=>1000,48423=>1000,48424=>1000,48425=>1000,48426=>1000,48427=>1000,48428=>1000,48429=>1000,48430=>1000,48431=>1000,48432=>1000,48433=>1000,48434=>1000,48435=>1000,48436=>1000,48437=>1000,48438=>1000,48439=>1000,48440=>1000,48441=>1000,48442=>1000,48443=>1000,48444=>1000,48445=>1000,48446=>1000,48447=>1000,48448=>1000,48449=>1000,48450=>1000,48451=>1000,48452=>1000,48453=>1000,48454=>1000,48455=>1000,48456=>1000,48457=>1000,48458=>1000,48459=>1000,48460=>1000,48461=>1000,48462=>1000,48463=>1000,48464=>1000,48465=>1000,48466=>1000,48467=>1000,48468=>1000,48469=>1000,48470=>1000,48471=>1000,48472=>1000,48473=>1000,48474=>1000,48475=>1000,48476=>1000,48477=>1000,48478=>1000,48479=>1000,48480=>1000,48481=>1000,48482=>1000,48483=>1000,48484=>1000,48485=>1000,48486=>1000,48487=>1000,48488=>1000,48489=>1000,48490=>1000,48491=>1000,48492=>1000,48493=>1000,48494=>1000,48495=>1000,48496=>1000,48497=>1000,48498=>1000,48499=>1000,48500=>1000,48501=>1000,48502=>1000,48503=>1000,48504=>1000,48505=>1000,48506=>1000,48507=>1000,48508=>1000,48509=>1000,48510=>1000,48511=>1000,48512=>1000,48513=>1000,48514=>1000,48515=>1000,48516=>1000,48517=>1000,48518=>1000,48519=>1000,48520=>1000,48521=>1000,48522=>1000,48523=>1000,48524=>1000,48525=>1000,48526=>1000,48527=>1000,48528=>1000,48529=>1000,48530=>1000,48531=>1000,48532=>1000,48533=>1000,48534=>1000,48535=>1000,48536=>1000,48537=>1000,48538=>1000,48539=>1000,48540=>1000,48541=>1000,48542=>1000,48543=>1000,48544=>1000,48545=>1000,48546=>1000,48547=>1000,48548=>1000,48549=>1000,48550=>1000,48551=>1000,48552=>1000,48553=>1000,48554=>1000,48555=>1000,48556=>1000,48557=>1000,48558=>1000,48559=>1000,48560=>1000,48561=>1000,48562=>1000,48563=>1000,48564=>1000,48565=>1000,48566=>1000,48567=>1000,48568=>1000,48569=>1000,48570=>1000,48571=>1000,48572=>1000,48573=>1000,48574=>1000,48575=>1000,48576=>1000,48577=>1000,48578=>1000,48579=>1000,48580=>1000,48581=>1000,48582=>1000,48583=>1000,48584=>1000,48585=>1000,48586=>1000,48587=>1000,48588=>1000,48589=>1000,48590=>1000,48591=>1000,48592=>1000,48593=>1000,48594=>1000,48595=>1000,48596=>1000,48597=>1000,48598=>1000,48599=>1000,48600=>1000,48601=>1000,48602=>1000,48603=>1000,48604=>1000,48605=>1000,48606=>1000,48607=>1000,48608=>1000,48609=>1000,48610=>1000,48611=>1000,48612=>1000,48613=>1000,48614=>1000,48615=>1000,48616=>1000,48617=>1000,48618=>1000,48619=>1000,48620=>1000,48621=>1000,48622=>1000,48623=>1000,48624=>1000,48625=>1000,48626=>1000,48627=>1000,48628=>1000,48629=>1000,48630=>1000,48631=>1000,48632=>1000,48633=>1000,48634=>1000,48635=>1000,48636=>1000,48637=>1000,48638=>1000,48639=>1000,48640=>1000,48641=>1000,48642=>1000,48643=>1000,48644=>1000,48645=>1000,48646=>1000,48647=>1000,48648=>1000,48649=>1000,48650=>1000,48651=>1000,48652=>1000,48653=>1000,48654=>1000,48655=>1000,48656=>1000,48657=>1000,48658=>1000,48659=>1000,48660=>1000,48661=>1000,48662=>1000,48663=>1000,48664=>1000,48665=>1000,48666=>1000,48667=>1000,48668=>1000,48669=>1000,48670=>1000,48671=>1000,48672=>1000,48673=>1000,48674=>1000,48675=>1000,48676=>1000,48677=>1000,48678=>1000,48679=>1000,48680=>1000,48681=>1000,48682=>1000,48683=>1000,48684=>1000,48685=>1000,48686=>1000,48687=>1000,48688=>1000,48689=>1000,48690=>1000,48691=>1000,48692=>1000,48693=>1000,48694=>1000,48695=>1000,48696=>1000,48697=>1000,48698=>1000,48699=>1000,48700=>1000,48701=>1000,48702=>1000,48703=>1000,48704=>1000,48705=>1000,48706=>1000,48707=>1000,48708=>1000,48709=>1000,48710=>1000,48711=>1000,48712=>1000,48713=>1000,48714=>1000,48715=>1000,48716=>1000,48717=>1000,48718=>1000,48719=>1000,48720=>1000,48721=>1000,48722=>1000,48723=>1000,48724=>1000,48725=>1000,48726=>1000,48727=>1000,48728=>1000,48729=>1000,48730=>1000,48731=>1000,48732=>1000,48733=>1000,48734=>1000,48735=>1000,48736=>1000,48737=>1000,48738=>1000,48739=>1000,48740=>1000,48741=>1000,48742=>1000,48743=>1000,48744=>1000,48745=>1000,48746=>1000,48747=>1000,48748=>1000,48749=>1000,48750=>1000,48751=>1000,48752=>1000,48753=>1000,48754=>1000,48755=>1000,48756=>1000,48757=>1000,48758=>1000,48759=>1000,48760=>1000,48761=>1000,48762=>1000,48763=>1000,48764=>1000,48765=>1000,48766=>1000,48767=>1000,48768=>1000,48769=>1000,48770=>1000,48771=>1000,48772=>1000,48773=>1000,48774=>1000,48775=>1000,48776=>1000,48777=>1000,48778=>1000,48779=>1000,48780=>1000,48781=>1000,48782=>1000,48783=>1000,48784=>1000,48785=>1000,48786=>1000,48787=>1000,48788=>1000,48789=>1000,48790=>1000,48791=>1000,48792=>1000,48793=>1000,48794=>1000,48795=>1000,48796=>1000,48797=>1000,48798=>1000,48799=>1000,48800=>1000,48801=>1000,48802=>1000,48803=>1000,48804=>1000,48805=>1000,48806=>1000,48807=>1000,48808=>1000,48809=>1000,48810=>1000,48811=>1000,48812=>1000,48813=>1000,48814=>1000,48815=>1000,48816=>1000,48817=>1000,48818=>1000,48819=>1000,48820=>1000,48821=>1000,48822=>1000,48823=>1000,48824=>1000,48825=>1000,48826=>1000,48827=>1000,48828=>1000,48829=>1000,48830=>1000,48831=>1000,48832=>1000,48833=>1000,48834=>1000,48835=>1000,48836=>1000,48837=>1000,48838=>1000,48839=>1000,48840=>1000,48841=>1000,48842=>1000,48843=>1000,48844=>1000,48845=>1000,48846=>1000,48847=>1000,48848=>1000,48849=>1000,48850=>1000,48851=>1000,48852=>1000,48853=>1000,48854=>1000,48855=>1000,48856=>1000,48857=>1000,48858=>1000,48859=>1000,48860=>1000,48861=>1000,48862=>1000,48863=>1000,48864=>1000,48865=>1000,48866=>1000,48867=>1000,48868=>1000,48869=>1000,48870=>1000,48871=>1000,48872=>1000,48873=>1000,48874=>1000,48875=>1000,48876=>1000,48877=>1000,48878=>1000,48879=>1000,48880=>1000,48881=>1000,48882=>1000,48883=>1000,48884=>1000,48885=>1000,48886=>1000,48887=>1000,48888=>1000,48889=>1000,48890=>1000,48891=>1000,48892=>1000,48893=>1000,48894=>1000,48895=>1000,48896=>1000,48897=>1000,48898=>1000,48899=>1000,48900=>1000,48901=>1000,48902=>1000,48903=>1000,48904=>1000,48905=>1000,48906=>1000,48907=>1000,48908=>1000,48909=>1000,48910=>1000,48911=>1000,48912=>1000,48913=>1000,48914=>1000,48915=>1000,48916=>1000,48917=>1000,48918=>1000,48919=>1000,48920=>1000,48921=>1000,48922=>1000,48923=>1000,48924=>1000,48925=>1000,48926=>1000,48927=>1000,48928=>1000,48929=>1000,48930=>1000,48931=>1000,48932=>1000,48933=>1000,48934=>1000,48935=>1000,48936=>1000,48937=>1000,48938=>1000,48939=>1000,48940=>1000,48941=>1000,48942=>1000,48943=>1000,48944=>1000,48945=>1000,48946=>1000,48947=>1000,48948=>1000,48949=>1000,48950=>1000,48951=>1000,48952=>1000,48953=>1000,48954=>1000,48955=>1000,48956=>1000,48957=>1000,48958=>1000,48959=>1000,48960=>1000,48961=>1000,48962=>1000,48963=>1000,48964=>1000,48965=>1000,48966=>1000,48967=>1000,48968=>1000,48969=>1000,48970=>1000,48971=>1000,48972=>1000,48973=>1000,48974=>1000,48975=>1000,48976=>1000,48977=>1000,48978=>1000,48979=>1000,48980=>1000,48981=>1000,48982=>1000,48983=>1000,48984=>1000,48985=>1000,48986=>1000,48987=>1000,48988=>1000,48989=>1000,48990=>1000,48991=>1000,48992=>1000,48993=>1000,48994=>1000,48995=>1000,48996=>1000,48997=>1000,48998=>1000,48999=>1000,49000=>1000,49001=>1000,49002=>1000,49003=>1000,49004=>1000,49005=>1000,49006=>1000,49007=>1000,49008=>1000,49009=>1000,49010=>1000,49011=>1000,49012=>1000,49013=>1000,49014=>1000,49015=>1000,49016=>1000,49017=>1000,49018=>1000,49019=>1000,49020=>1000,49021=>1000,49022=>1000,49023=>1000,49024=>1000,49025=>1000,49026=>1000,49027=>1000,49028=>1000,49029=>1000,49030=>1000,49031=>1000,49032=>1000,49033=>1000,49034=>1000,49035=>1000,49036=>1000,49037=>1000,49038=>1000,49039=>1000,49040=>1000,49041=>1000,49042=>1000,49043=>1000,49044=>1000,49045=>1000,49046=>1000,49047=>1000,49048=>1000,49049=>1000,49050=>1000,49051=>1000,49052=>1000,49053=>1000,49054=>1000,49055=>1000,49056=>1000,49057=>1000,49058=>1000,49059=>1000,49060=>1000,49061=>1000,49062=>1000,49063=>1000,49064=>1000,49065=>1000,49066=>1000,49067=>1000,49068=>1000,49069=>1000,49070=>1000,49071=>1000,49072=>1000,49073=>1000,49074=>1000,49075=>1000,49076=>1000,49077=>1000,49078=>1000,49079=>1000,49080=>1000,49081=>1000,49082=>1000,49083=>1000,49084=>1000,49085=>1000,49086=>1000,49087=>1000,49088=>1000,49089=>1000,49090=>1000,49091=>1000,49092=>1000,49093=>1000,49094=>1000,49095=>1000,49096=>1000,49097=>1000,49098=>1000,49099=>1000,49100=>1000,49101=>1000,49102=>1000,49103=>1000,49104=>1000,49105=>1000,49106=>1000,49107=>1000,49108=>1000,49109=>1000,49110=>1000,49111=>1000,49112=>1000,49113=>1000,49114=>1000,49115=>1000,49116=>1000,49117=>1000,49118=>1000,49119=>1000,49120=>1000,49121=>1000,49122=>1000,49123=>1000,49124=>1000,49125=>1000,49126=>1000,49127=>1000,49128=>1000,49129=>1000,49130=>1000,49131=>1000,49132=>1000,49133=>1000,49134=>1000,49135=>1000,49136=>1000,49137=>1000,49138=>1000,49139=>1000,49140=>1000,49141=>1000,49142=>1000,49143=>1000,49144=>1000,49145=>1000,49146=>1000,49147=>1000,49148=>1000,49149=>1000,49150=>1000,49151=>1000,49152=>1000,49153=>1000,49154=>1000,49155=>1000,49156=>1000,49157=>1000,49158=>1000,49159=>1000,49160=>1000,49161=>1000,49162=>1000,49163=>1000,49164=>1000,49165=>1000,49166=>1000,49167=>1000,49168=>1000,49169=>1000,49170=>1000,49171=>1000,49172=>1000,49173=>1000,49174=>1000,49175=>1000,49176=>1000,49177=>1000,49178=>1000,49179=>1000,49180=>1000,49181=>1000,49182=>1000,49183=>1000,49184=>1000,49185=>1000,49186=>1000,49187=>1000,49188=>1000,49189=>1000,49190=>1000,49191=>1000,49192=>1000,49193=>1000,49194=>1000,49195=>1000,49196=>1000,49197=>1000,49198=>1000,49199=>1000,49200=>1000,49201=>1000,49202=>1000,49203=>1000,49204=>1000,49205=>1000,49206=>1000,49207=>1000,49208=>1000,49209=>1000,49210=>1000,49211=>1000,49212=>1000,49213=>1000,49214=>1000,49215=>1000,49216=>1000,49217=>1000,49218=>1000,49219=>1000,49220=>1000,49221=>1000,49222=>1000,49223=>1000,49224=>1000,49225=>1000,49226=>1000,49227=>1000,49228=>1000,49229=>1000,49230=>1000,49231=>1000,49232=>1000,49233=>1000,49234=>1000,49235=>1000,49236=>1000,49237=>1000,49238=>1000,49239=>1000,49240=>1000,49241=>1000,49242=>1000,49243=>1000,49244=>1000,49245=>1000,49246=>1000,49247=>1000,49248=>1000,49249=>1000,49250=>1000,49251=>1000,49252=>1000,49253=>1000,49254=>1000,49255=>1000,49256=>1000,49257=>1000,49258=>1000,49259=>1000,49260=>1000,49261=>1000,49262=>1000,49263=>1000,49264=>1000,49265=>1000,49266=>1000,49267=>1000,49268=>1000,49269=>1000,49270=>1000,49271=>1000,49272=>1000,49273=>1000,49274=>1000,49275=>1000,49276=>1000,49277=>1000,49278=>1000,49279=>1000,49280=>1000,49281=>1000,49282=>1000,49283=>1000,49284=>1000,49285=>1000,49286=>1000,49287=>1000,49288=>1000,49289=>1000,49290=>1000,49291=>1000,49292=>1000,49293=>1000,49294=>1000,49295=>1000,49296=>1000,49297=>1000,49298=>1000,49299=>1000,49300=>1000,49301=>1000,49302=>1000,49303=>1000,49304=>1000,49305=>1000,49306=>1000,49307=>1000,49308=>1000,49309=>1000,49310=>1000,49311=>1000,49312=>1000,49313=>1000,49314=>1000,49315=>1000,49316=>1000,49317=>1000,49318=>1000,49319=>1000,49320=>1000,49321=>1000,49322=>1000,49323=>1000,49324=>1000,49325=>1000,49326=>1000,49327=>1000,49328=>1000,49329=>1000,49330=>1000,49331=>1000,49332=>1000,49333=>1000,49334=>1000,49335=>1000,49336=>1000,49337=>1000,49338=>1000,49339=>1000,49340=>1000,49341=>1000,49342=>1000,49343=>1000,49344=>1000,49345=>1000,49346=>1000,49347=>1000,49348=>1000,49349=>1000,49350=>1000,49351=>1000,49352=>1000,49353=>1000,49354=>1000,49355=>1000,49356=>1000,49357=>1000,49358=>1000,49359=>1000,49360=>1000,49361=>1000,49362=>1000,49363=>1000,49364=>1000,49365=>1000,49366=>1000,49367=>1000,49368=>1000,49369=>1000,49370=>1000,49371=>1000,49372=>1000,49373=>1000,49374=>1000,49375=>1000,49376=>1000,49377=>1000,49378=>1000,49379=>1000,49380=>1000,49381=>1000,49382=>1000,49383=>1000,49384=>1000,49385=>1000,49386=>1000,49387=>1000,49388=>1000,49389=>1000,49390=>1000,49391=>1000,49392=>1000,49393=>1000,49394=>1000,49395=>1000,49396=>1000,49397=>1000,49398=>1000,49399=>1000,49400=>1000,49401=>1000,49402=>1000,49403=>1000,49404=>1000,49405=>1000,49406=>1000,49407=>1000,49408=>1000,49409=>1000,49410=>1000,49411=>1000,49412=>1000,49413=>1000,49414=>1000,49415=>1000,49416=>1000,49417=>1000,49418=>1000,49419=>1000,49420=>1000,49421=>1000,49422=>1000,49423=>1000,49424=>1000,49425=>1000,49426=>1000,49427=>1000,49428=>1000,49429=>1000,49430=>1000,49431=>1000,49432=>1000,49433=>1000,49434=>1000,49435=>1000,49436=>1000,49437=>1000,49438=>1000,49439=>1000,49440=>1000,49441=>1000,49442=>1000,49443=>1000,49444=>1000,49445=>1000,49446=>1000,49447=>1000,49448=>1000,49449=>1000,49450=>1000,49451=>1000,49452=>1000,49453=>1000,49454=>1000,49455=>1000,49456=>1000,49457=>1000,49458=>1000,49459=>1000,49460=>1000,49461=>1000,49462=>1000,49463=>1000,49464=>1000,49465=>1000,49466=>1000,49467=>1000,49468=>1000,49469=>1000,49470=>1000,49471=>1000,49472=>1000,49473=>1000,49474=>1000,49475=>1000,49476=>1000,49477=>1000,49478=>1000,49479=>1000,49480=>1000,49481=>1000,49482=>1000,49483=>1000,49484=>1000,49485=>1000,49486=>1000,49487=>1000,49488=>1000,49489=>1000,49490=>1000,49491=>1000,49492=>1000,49493=>1000,49494=>1000,49495=>1000,49496=>1000,49497=>1000,49498=>1000,49499=>1000,49500=>1000,49501=>1000,49502=>1000,49503=>1000,49504=>1000,49505=>1000,49506=>1000,49507=>1000,49508=>1000,49509=>1000,49510=>1000,49511=>1000,49512=>1000,49513=>1000,49514=>1000,49515=>1000,49516=>1000,49517=>1000,49518=>1000,49519=>1000,49520=>1000,49521=>1000,49522=>1000,49523=>1000,49524=>1000,49525=>1000,49526=>1000,49527=>1000,49528=>1000,49529=>1000,49530=>1000,49531=>1000,49532=>1000,49533=>1000,49534=>1000,49535=>1000,49536=>1000,49537=>1000,49538=>1000,49539=>1000,49540=>1000,49541=>1000,49542=>1000,49543=>1000,49544=>1000,49545=>1000,49546=>1000,49547=>1000,49548=>1000,49549=>1000,49550=>1000,49551=>1000,49552=>1000,49553=>1000,49554=>1000,49555=>1000,49556=>1000,49557=>1000,49558=>1000,49559=>1000,49560=>1000,49561=>1000,49562=>1000,49563=>1000,49564=>1000,49565=>1000,49566=>1000,49567=>1000,49568=>1000,49569=>1000,49570=>1000,49571=>1000,49572=>1000,49573=>1000,49574=>1000,49575=>1000,49576=>1000,49577=>1000,49578=>1000,49579=>1000,49580=>1000,49581=>1000,49582=>1000,49583=>1000,49584=>1000,49585=>1000,49586=>1000,49587=>1000,49588=>1000,49589=>1000,49590=>1000,49591=>1000,49592=>1000,49593=>1000,49594=>1000,49595=>1000,49596=>1000,49597=>1000,49598=>1000,49599=>1000,49600=>1000,49601=>1000,49602=>1000,49603=>1000,49604=>1000,49605=>1000,49606=>1000,49607=>1000,49608=>1000,49609=>1000,49610=>1000,49611=>1000,49612=>1000,49613=>1000,49614=>1000,49615=>1000,49616=>1000,49617=>1000,49618=>1000,49619=>1000,49620=>1000,49621=>1000,49622=>1000,49623=>1000,49624=>1000,49625=>1000,49626=>1000,49627=>1000,49628=>1000,49629=>1000,49630=>1000,49631=>1000,49632=>1000,49633=>1000,49634=>1000,49635=>1000,49636=>1000,49637=>1000,49638=>1000,49639=>1000,49640=>1000,49641=>1000,49642=>1000,49643=>1000,49644=>1000,49645=>1000,49646=>1000,49647=>1000,49648=>1000,49649=>1000,49650=>1000,49651=>1000,49652=>1000,49653=>1000,49654=>1000,49655=>1000,49656=>1000,49657=>1000,49658=>1000,49659=>1000,49660=>1000,49661=>1000,49662=>1000,49663=>1000,49664=>1000,49665=>1000,49666=>1000,49667=>1000,49668=>1000,49669=>1000,49670=>1000,49671=>1000,49672=>1000,49673=>1000,49674=>1000,49675=>1000,49676=>1000,49677=>1000,49678=>1000,49679=>1000,49680=>1000,49681=>1000,49682=>1000,49683=>1000,49684=>1000,49685=>1000,49686=>1000,49687=>1000,49688=>1000,49689=>1000,49690=>1000,49691=>1000,49692=>1000,49693=>1000,49694=>1000,49695=>1000,49696=>1000,49697=>1000,49698=>1000,49699=>1000,49700=>1000,49701=>1000,49702=>1000,49703=>1000,49704=>1000,49705=>1000,49706=>1000,49707=>1000,49708=>1000,49709=>1000,49710=>1000,49711=>1000,49712=>1000,49713=>1000,49714=>1000,49715=>1000,49716=>1000,49717=>1000,49718=>1000,49719=>1000,49720=>1000,49721=>1000,49722=>1000,49723=>1000,49724=>1000,49725=>1000,49726=>1000,49727=>1000,49728=>1000,49729=>1000,49730=>1000,49731=>1000,49732=>1000,49733=>1000,49734=>1000,49735=>1000,49736=>1000,49737=>1000,49738=>1000,49739=>1000,49740=>1000,49741=>1000,49742=>1000,49743=>1000,49744=>1000,49745=>1000,49746=>1000,49747=>1000,49748=>1000,49749=>1000,49750=>1000,49751=>1000,49752=>1000,49753=>1000,49754=>1000,49755=>1000,49756=>1000,49757=>1000,49758=>1000,49759=>1000,49760=>1000,49761=>1000,49762=>1000,49763=>1000,49764=>1000,49765=>1000,49766=>1000,49767=>1000,49768=>1000,49769=>1000,49770=>1000,49771=>1000,49772=>1000,49773=>1000,49774=>1000,49775=>1000,49776=>1000,49777=>1000,49778=>1000,49779=>1000,49780=>1000,49781=>1000,49782=>1000,49783=>1000,49784=>1000,49785=>1000,49786=>1000,49787=>1000,49788=>1000,49789=>1000,49790=>1000,49791=>1000,49792=>1000,49793=>1000,49794=>1000,49795=>1000,49796=>1000,49797=>1000,49798=>1000,49799=>1000,49800=>1000,49801=>1000,49802=>1000,49803=>1000,49804=>1000,49805=>1000,49806=>1000,49807=>1000,49808=>1000,49809=>1000,49810=>1000,49811=>1000,49812=>1000,49813=>1000,49814=>1000,49815=>1000,49816=>1000,49817=>1000,49818=>1000,49819=>1000,49820=>1000,49821=>1000,49822=>1000,49823=>1000,49824=>1000,49825=>1000,49826=>1000,49827=>1000,49828=>1000,49829=>1000,49830=>1000,49831=>1000,49832=>1000,49833=>1000,49834=>1000,49835=>1000,49836=>1000,49837=>1000,49838=>1000,49839=>1000,49840=>1000,49841=>1000,49842=>1000,49843=>1000,49844=>1000,49845=>1000,49846=>1000,49847=>1000,49848=>1000,49849=>1000,49850=>1000,49851=>1000,49852=>1000,49853=>1000,49854=>1000,49855=>1000,49856=>1000,49857=>1000,49858=>1000,49859=>1000,49860=>1000,49861=>1000,49862=>1000,49863=>1000,49864=>1000,49865=>1000,49866=>1000,49867=>1000,49868=>1000,49869=>1000,49870=>1000,49871=>1000,49872=>1000,49873=>1000,49874=>1000,49875=>1000,49876=>1000,49877=>1000,49878=>1000,49879=>1000,49880=>1000,49881=>1000,49882=>1000,49883=>1000,49884=>1000,49885=>1000,49886=>1000,49887=>1000,49888=>1000,49889=>1000,49890=>1000,49891=>1000,49892=>1000,49893=>1000,49894=>1000,49895=>1000,49896=>1000,49897=>1000,49898=>1000,49899=>1000,49900=>1000,49901=>1000,49902=>1000,49903=>1000,49904=>1000,49905=>1000,49906=>1000,49907=>1000,49908=>1000,49909=>1000,49910=>1000,49911=>1000,49912=>1000,49913=>1000,49914=>1000,49915=>1000,49916=>1000,49917=>1000,49918=>1000,49919=>1000,49920=>1000,49921=>1000,49922=>1000,49923=>1000,49924=>1000,49925=>1000,49926=>1000,49927=>1000,49928=>1000,49929=>1000,49930=>1000,49931=>1000,49932=>1000,49933=>1000,49934=>1000,49935=>1000,49936=>1000,49937=>1000,49938=>1000,49939=>1000,49940=>1000,49941=>1000,49942=>1000,49943=>1000,49944=>1000,49945=>1000,49946=>1000,49947=>1000,49948=>1000,49949=>1000,49950=>1000,49951=>1000,49952=>1000,49953=>1000,49954=>1000,49955=>1000,49956=>1000,49957=>1000,49958=>1000,49959=>1000,49960=>1000,49961=>1000,49962=>1000,49963=>1000,49964=>1000,49965=>1000,49966=>1000,49967=>1000,49968=>1000,49969=>1000,49970=>1000,49971=>1000,49972=>1000,49973=>1000,49974=>1000,49975=>1000,49976=>1000,49977=>1000,49978=>1000,49979=>1000,49980=>1000,49981=>1000,49982=>1000,49983=>1000,49984=>1000,49985=>1000,49986=>1000,49987=>1000,49988=>1000,49989=>1000,49990=>1000,49991=>1000,49992=>1000,49993=>1000,49994=>1000,49995=>1000,49996=>1000,49997=>1000,49998=>1000,49999=>1000,50000=>1000,50001=>1000,50002=>1000,50003=>1000,50004=>1000,50005=>1000,50006=>1000,50007=>1000,50008=>1000,50009=>1000,50010=>1000,50011=>1000,50012=>1000,50013=>1000,50014=>1000,50015=>1000,50016=>1000,50017=>1000,50018=>1000,50019=>1000,50020=>1000,50021=>1000,50022=>1000,50023=>1000,50024=>1000,50025=>1000,50026=>1000,50027=>1000,50028=>1000,50029=>1000,50030=>1000,50031=>1000,50032=>1000,50033=>1000,50034=>1000,50035=>1000,50036=>1000,50037=>1000,50038=>1000,50039=>1000,50040=>1000,50041=>1000,50042=>1000,50043=>1000,50044=>1000,50045=>1000,50046=>1000,50047=>1000,50048=>1000,50049=>1000,50050=>1000,50051=>1000,50052=>1000,50053=>1000,50054=>1000,50055=>1000,50056=>1000,50057=>1000,50058=>1000,50059=>1000,50060=>1000,50061=>1000,50062=>1000,50063=>1000,50064=>1000,50065=>1000,50066=>1000,50067=>1000,50068=>1000,50069=>1000,50070=>1000,50071=>1000,50072=>1000,50073=>1000,50074=>1000,50075=>1000,50076=>1000,50077=>1000,50078=>1000,50079=>1000,50080=>1000,50081=>1000,50082=>1000,50083=>1000,50084=>1000,50085=>1000,50086=>1000,50087=>1000,50088=>1000,50089=>1000,50090=>1000,50091=>1000,50092=>1000,50093=>1000,50094=>1000,50095=>1000,50096=>1000,50097=>1000,50098=>1000,50099=>1000,50100=>1000,50101=>1000,50102=>1000,50103=>1000,50104=>1000,50105=>1000,50106=>1000,50107=>1000,50108=>1000,50109=>1000,50110=>1000,50111=>1000,50112=>1000,50113=>1000,50114=>1000,50115=>1000,50116=>1000,50117=>1000,50118=>1000,50119=>1000,50120=>1000,50121=>1000,50122=>1000,50123=>1000,50124=>1000,50125=>1000,50126=>1000,50127=>1000,50128=>1000,50129=>1000,50130=>1000,50131=>1000,50132=>1000,50133=>1000,50134=>1000,50135=>1000,50136=>1000,50137=>1000,50138=>1000,50139=>1000,50140=>1000,50141=>1000,50142=>1000,50143=>1000,50144=>1000,50145=>1000,50146=>1000,50147=>1000,50148=>1000,50149=>1000,50150=>1000,50151=>1000,50152=>1000,50153=>1000,50154=>1000,50155=>1000,50156=>1000,50157=>1000,50158=>1000,50159=>1000,50160=>1000,50161=>1000,50162=>1000,50163=>1000,50164=>1000,50165=>1000,50166=>1000,50167=>1000,50168=>1000,50169=>1000,50170=>1000,50171=>1000,50172=>1000,50173=>1000,50174=>1000,50175=>1000,50176=>1000,50177=>1000,50178=>1000,50179=>1000,50180=>1000,50181=>1000,50182=>1000,50183=>1000,50184=>1000,50185=>1000,50186=>1000,50187=>1000,50188=>1000,50189=>1000,50190=>1000,50191=>1000,50192=>1000,50193=>1000,50194=>1000,50195=>1000,50196=>1000,50197=>1000,50198=>1000,50199=>1000,50200=>1000,50201=>1000,50202=>1000,50203=>1000,50204=>1000,50205=>1000,50206=>1000,50207=>1000,50208=>1000,50209=>1000,50210=>1000,50211=>1000,50212=>1000,50213=>1000,50214=>1000,50215=>1000,50216=>1000,50217=>1000,50218=>1000,50219=>1000,50220=>1000,50221=>1000,50222=>1000,50223=>1000,50224=>1000,50225=>1000,50226=>1000,50227=>1000,50228=>1000,50229=>1000,50230=>1000,50231=>1000,50232=>1000,50233=>1000,50234=>1000,50235=>1000,50236=>1000,50237=>1000,50238=>1000,50239=>1000,50240=>1000,50241=>1000,50242=>1000,50243=>1000,50244=>1000,50245=>1000,50246=>1000,50247=>1000,50248=>1000,50249=>1000,50250=>1000,50251=>1000,50252=>1000,50253=>1000,50254=>1000,50255=>1000,50256=>1000,50257=>1000,50258=>1000,50259=>1000,50260=>1000,50261=>1000,50262=>1000,50263=>1000,50264=>1000,50265=>1000,50266=>1000,50267=>1000,50268=>1000,50269=>1000,50270=>1000,50271=>1000,50272=>1000,50273=>1000,50274=>1000,50275=>1000,50276=>1000,50277=>1000,50278=>1000,50279=>1000,50280=>1000,50281=>1000,50282=>1000,50283=>1000,50284=>1000,50285=>1000,50286=>1000,50287=>1000,50288=>1000,50289=>1000,50290=>1000,50291=>1000,50292=>1000,50293=>1000,50294=>1000,50295=>1000,50296=>1000,50297=>1000,50298=>1000,50299=>1000,50300=>1000,50301=>1000,50302=>1000,50303=>1000,50304=>1000,50305=>1000,50306=>1000,50307=>1000,50308=>1000,50309=>1000,50310=>1000,50311=>1000,50312=>1000,50313=>1000,50314=>1000,50315=>1000,50316=>1000,50317=>1000,50318=>1000,50319=>1000,50320=>1000,50321=>1000,50322=>1000,50323=>1000,50324=>1000,50325=>1000,50326=>1000,50327=>1000,50328=>1000,50329=>1000,50330=>1000,50331=>1000,50332=>1000,50333=>1000,50334=>1000,50335=>1000,50336=>1000,50337=>1000,50338=>1000,50339=>1000,50340=>1000,50341=>1000,50342=>1000,50343=>1000,50344=>1000,50345=>1000,50346=>1000,50347=>1000,50348=>1000,50349=>1000,50350=>1000,50351=>1000,50352=>1000,50353=>1000,50354=>1000,50355=>1000,50356=>1000,50357=>1000,50358=>1000,50359=>1000,50360=>1000,50361=>1000,50362=>1000,50363=>1000,50364=>1000,50365=>1000,50366=>1000,50367=>1000,50368=>1000,50369=>1000,50370=>1000,50371=>1000,50372=>1000,50373=>1000,50374=>1000,50375=>1000,50376=>1000,50377=>1000,50378=>1000,50379=>1000,50380=>1000,50381=>1000,50382=>1000,50383=>1000,50384=>1000,50385=>1000,50386=>1000,50387=>1000,50388=>1000,50389=>1000,50390=>1000,50391=>1000,50392=>1000,50393=>1000,50394=>1000,50395=>1000,50396=>1000,50397=>1000,50398=>1000,50399=>1000,50400=>1000,50401=>1000,50402=>1000,50403=>1000,50404=>1000,50405=>1000,50406=>1000,50407=>1000,50408=>1000,50409=>1000,50410=>1000,50411=>1000,50412=>1000,50413=>1000,50414=>1000,50415=>1000,50416=>1000,50417=>1000,50418=>1000,50419=>1000,50420=>1000,50421=>1000,50422=>1000,50423=>1000,50424=>1000,50425=>1000,50426=>1000,50427=>1000,50428=>1000,50429=>1000,50430=>1000,50431=>1000,50432=>1000,50433=>1000,50434=>1000,50435=>1000,50436=>1000,50437=>1000,50438=>1000,50439=>1000,50440=>1000,50441=>1000,50442=>1000,50443=>1000,50444=>1000,50445=>1000,50446=>1000,50447=>1000,50448=>1000,50449=>1000,50450=>1000,50451=>1000,50452=>1000,50453=>1000,50454=>1000,50455=>1000,50456=>1000,50457=>1000,50458=>1000,50459=>1000,50460=>1000,50461=>1000,50462=>1000,50463=>1000,50464=>1000,50465=>1000,50466=>1000,50467=>1000,50468=>1000,50469=>1000,50470=>1000,50471=>1000,50472=>1000,50473=>1000,50474=>1000,50475=>1000,50476=>1000,50477=>1000,50478=>1000,50479=>1000,50480=>1000,50481=>1000,50482=>1000,50483=>1000,50484=>1000,50485=>1000,50486=>1000,50487=>1000,50488=>1000,50489=>1000,50490=>1000,50491=>1000,50492=>1000,50493=>1000,50494=>1000,50495=>1000,50496=>1000,50497=>1000,50498=>1000,50499=>1000,50500=>1000,50501=>1000,50502=>1000,50503=>1000,50504=>1000,50505=>1000,50506=>1000,50507=>1000,50508=>1000,50509=>1000,50510=>1000,50511=>1000,50512=>1000,50513=>1000,50514=>1000,50515=>1000,50516=>1000,50517=>1000,50518=>1000,50519=>1000,50520=>1000,50521=>1000,50522=>1000,50523=>1000,50524=>1000,50525=>1000,50526=>1000,50527=>1000,50528=>1000,50529=>1000,50530=>1000,50531=>1000,50532=>1000,50533=>1000,50534=>1000,50535=>1000,50536=>1000,50537=>1000,50538=>1000,50539=>1000,50540=>1000,50541=>1000,50542=>1000,50543=>1000,50544=>1000,50545=>1000,50546=>1000,50547=>1000,50548=>1000,50549=>1000,50550=>1000,50551=>1000,50552=>1000,50553=>1000,50554=>1000,50555=>1000,50556=>1000,50557=>1000,50558=>1000,50559=>1000,50560=>1000,50561=>1000,50562=>1000,50563=>1000,50564=>1000,50565=>1000,50566=>1000,50567=>1000,50568=>1000,50569=>1000,50570=>1000,50571=>1000,50572=>1000,50573=>1000,50574=>1000,50575=>1000,50576=>1000,50577=>1000,50578=>1000,50579=>1000,50580=>1000,50581=>1000,50582=>1000,50583=>1000,50584=>1000,50585=>1000,50586=>1000,50587=>1000,50588=>1000,50589=>1000,50590=>1000,50591=>1000,50592=>1000,50593=>1000,50594=>1000,50595=>1000,50596=>1000,50597=>1000,50598=>1000,50599=>1000,50600=>1000,50601=>1000,50602=>1000,50603=>1000,50604=>1000,50605=>1000,50606=>1000,50607=>1000,50608=>1000,50609=>1000,50610=>1000,50611=>1000,50612=>1000,50613=>1000,50614=>1000,50615=>1000,50616=>1000,50617=>1000,50618=>1000,50619=>1000,50620=>1000,50621=>1000,50622=>1000,50623=>1000,50624=>1000,50625=>1000,50626=>1000,50627=>1000,50628=>1000,50629=>1000,50630=>1000,50631=>1000,50632=>1000,50633=>1000,50634=>1000,50635=>1000,50636=>1000,50637=>1000,50638=>1000,50639=>1000,50640=>1000,50641=>1000,50642=>1000,50643=>1000,50644=>1000,50645=>1000,50646=>1000,50647=>1000,50648=>1000,50649=>1000,50650=>1000,50651=>1000,50652=>1000,50653=>1000,50654=>1000,50655=>1000,50656=>1000,50657=>1000,50658=>1000,50659=>1000,50660=>1000,50661=>1000,50662=>1000,50663=>1000,50664=>1000,50665=>1000,50666=>1000,50667=>1000,50668=>1000,50669=>1000,50670=>1000,50671=>1000,50672=>1000,50673=>1000,50674=>1000,50675=>1000,50676=>1000,50677=>1000,50678=>1000,50679=>1000,50680=>1000,50681=>1000,50682=>1000,50683=>1000,50684=>1000,50685=>1000,50686=>1000,50687=>1000,50688=>1000,50689=>1000,50690=>1000,50691=>1000,50692=>1000,50693=>1000,50694=>1000,50695=>1000,50696=>1000,50697=>1000,50698=>1000,50699=>1000,50700=>1000,50701=>1000,50702=>1000,50703=>1000,50704=>1000,50705=>1000,50706=>1000,50707=>1000,50708=>1000,50709=>1000,50710=>1000,50711=>1000,50712=>1000,50713=>1000,50714=>1000,50715=>1000,50716=>1000,50717=>1000,50718=>1000,50719=>1000,50720=>1000,50721=>1000,50722=>1000,50723=>1000,50724=>1000,50725=>1000,50726=>1000,50727=>1000,50728=>1000,50729=>1000,50730=>1000,50731=>1000,50732=>1000,50733=>1000,50734=>1000,50735=>1000,50736=>1000,50737=>1000,50738=>1000,50739=>1000,50740=>1000,50741=>1000,50742=>1000,50743=>1000,50744=>1000,50745=>1000,50746=>1000,50747=>1000,50748=>1000,50749=>1000,50750=>1000,50751=>1000,50752=>1000,50753=>1000,50754=>1000,50755=>1000,50756=>1000,50757=>1000,50758=>1000,50759=>1000,50760=>1000,50761=>1000,50762=>1000,50763=>1000,50764=>1000,50765=>1000,50766=>1000,50767=>1000,50768=>1000,50769=>1000,50770=>1000,50771=>1000,50772=>1000,50773=>1000,50774=>1000,50775=>1000,50776=>1000,50777=>1000,50778=>1000,50779=>1000,50780=>1000,50781=>1000,50782=>1000,50783=>1000,50784=>1000,50785=>1000,50786=>1000,50787=>1000,50788=>1000,50789=>1000,50790=>1000,50791=>1000,50792=>1000,50793=>1000,50794=>1000,50795=>1000,50796=>1000,50797=>1000,50798=>1000,50799=>1000,50800=>1000,50801=>1000,50802=>1000,50803=>1000,50804=>1000,50805=>1000,50806=>1000,50807=>1000,50808=>1000,50809=>1000,50810=>1000,50811=>1000,50812=>1000,50813=>1000,50814=>1000,50815=>1000,50816=>1000,50817=>1000,50818=>1000,50819=>1000,50820=>1000,50821=>1000,50822=>1000,50823=>1000,50824=>1000,50825=>1000,50826=>1000,50827=>1000,50828=>1000,50829=>1000,50830=>1000,50831=>1000,50832=>1000,50833=>1000,50834=>1000,50835=>1000,50836=>1000,50837=>1000,50838=>1000,50839=>1000,50840=>1000,50841=>1000,50842=>1000,50843=>1000,50844=>1000,50845=>1000,50846=>1000,50847=>1000,50848=>1000,50849=>1000,50850=>1000,50851=>1000,50852=>1000,50853=>1000,50854=>1000,50855=>1000,50856=>1000,50857=>1000,50858=>1000,50859=>1000,50860=>1000,50861=>1000,50862=>1000,50863=>1000,50864=>1000,50865=>1000,50866=>1000,50867=>1000,50868=>1000,50869=>1000,50870=>1000,50871=>1000,50872=>1000,50873=>1000,50874=>1000,50875=>1000,50876=>1000,50877=>1000,50878=>1000,50879=>1000,50880=>1000,50881=>1000,50882=>1000,50883=>1000,50884=>1000,50885=>1000,50886=>1000,50887=>1000,50888=>1000,50889=>1000,50890=>1000,50891=>1000,50892=>1000,50893=>1000,50894=>1000,50895=>1000,50896=>1000,50897=>1000,50898=>1000,50899=>1000,50900=>1000,50901=>1000,50902=>1000,50903=>1000,50904=>1000,50905=>1000,50906=>1000,50907=>1000,50908=>1000,50909=>1000,50910=>1000,50911=>1000,50912=>1000,50913=>1000,50914=>1000,50915=>1000,50916=>1000,50917=>1000,50918=>1000,50919=>1000,50920=>1000,50921=>1000,50922=>1000,50923=>1000,50924=>1000,50925=>1000,50926=>1000,50927=>1000,50928=>1000,50929=>1000,50930=>1000,50931=>1000,50932=>1000,50933=>1000,50934=>1000,50935=>1000,50936=>1000,50937=>1000,50938=>1000,50939=>1000,50940=>1000,50941=>1000,50942=>1000,50943=>1000,50944=>1000,50945=>1000,50946=>1000,50947=>1000,50948=>1000,50949=>1000,50950=>1000,50951=>1000,50952=>1000,50953=>1000,50954=>1000,50955=>1000,50956=>1000,50957=>1000,50958=>1000,50959=>1000,50960=>1000,50961=>1000,50962=>1000,50963=>1000,50964=>1000,50965=>1000,50966=>1000,50967=>1000,50968=>1000,50969=>1000,50970=>1000,50971=>1000,50972=>1000,50973=>1000,50974=>1000,50975=>1000,50976=>1000,50977=>1000,50978=>1000,50979=>1000,50980=>1000,50981=>1000,50982=>1000,50983=>1000,50984=>1000,50985=>1000,50986=>1000,50987=>1000,50988=>1000,50989=>1000,50990=>1000,50991=>1000,50992=>1000,50993=>1000,50994=>1000,50995=>1000,50996=>1000,50997=>1000,50998=>1000,50999=>1000,51000=>1000,51001=>1000,51002=>1000,51003=>1000,51004=>1000,51005=>1000,51006=>1000,51007=>1000,51008=>1000,51009=>1000,51010=>1000,51011=>1000,51012=>1000,51013=>1000,51014=>1000,51015=>1000,51016=>1000,51017=>1000,51018=>1000,51019=>1000,51020=>1000,51021=>1000,51022=>1000,51023=>1000,51024=>1000,51025=>1000,51026=>1000,51027=>1000,51028=>1000,51029=>1000,51030=>1000,51031=>1000,51032=>1000,51033=>1000,51034=>1000,51035=>1000,51036=>1000,51037=>1000,51038=>1000,51039=>1000,51040=>1000,51041=>1000,51042=>1000,51043=>1000,51044=>1000,51045=>1000,51046=>1000,51047=>1000,51048=>1000,51049=>1000,51050=>1000,51051=>1000,51052=>1000,51053=>1000,51054=>1000,51055=>1000,51056=>1000,51057=>1000,51058=>1000,51059=>1000,51060=>1000,51061=>1000,51062=>1000,51063=>1000,51064=>1000,51065=>1000,51066=>1000,51067=>1000,51068=>1000,51069=>1000,51070=>1000,51071=>1000,51072=>1000,51073=>1000,51074=>1000,51075=>1000,51076=>1000,51077=>1000,51078=>1000,51079=>1000,51080=>1000,51081=>1000,51082=>1000,51083=>1000,51084=>1000,51085=>1000,51086=>1000,51087=>1000,51088=>1000,51089=>1000,51090=>1000,51091=>1000,51092=>1000,51093=>1000,51094=>1000,51095=>1000,51096=>1000,51097=>1000,51098=>1000,51099=>1000,51100=>1000,51101=>1000,51102=>1000,51103=>1000,51104=>1000,51105=>1000,51106=>1000,51107=>1000,51108=>1000,51109=>1000,51110=>1000,51111=>1000,51112=>1000,51113=>1000,51114=>1000,51115=>1000,51116=>1000,51117=>1000,51118=>1000,51119=>1000,51120=>1000,51121=>1000,51122=>1000,51123=>1000,51124=>1000,51125=>1000,51126=>1000,51127=>1000,51128=>1000,51129=>1000,51130=>1000,51131=>1000,51132=>1000,51133=>1000,51134=>1000,51135=>1000,51136=>1000,51137=>1000,51138=>1000,51139=>1000,51140=>1000,51141=>1000,51142=>1000,51143=>1000,51144=>1000,51145=>1000,51146=>1000,51147=>1000,51148=>1000,51149=>1000,51150=>1000,51151=>1000,51152=>1000,51153=>1000,51154=>1000,51155=>1000,51156=>1000,51157=>1000,51158=>1000,51159=>1000,51160=>1000,51161=>1000,51162=>1000,51163=>1000,51164=>1000,51165=>1000,51166=>1000,51167=>1000,51168=>1000,51169=>1000,51170=>1000,51171=>1000,51172=>1000,51173=>1000,51174=>1000,51175=>1000,51176=>1000,51177=>1000,51178=>1000,51179=>1000,51180=>1000,51181=>1000,51182=>1000,51183=>1000,51184=>1000,51185=>1000,51186=>1000,51187=>1000,51188=>1000,51189=>1000,51190=>1000,51191=>1000,51192=>1000,51193=>1000,51194=>1000,51195=>1000,51196=>1000,51197=>1000,51198=>1000,51199=>1000,51200=>1000,51201=>1000,51202=>1000,51203=>1000,51204=>1000,51205=>1000,51206=>1000,51207=>1000,51208=>1000,51209=>1000,51210=>1000,51211=>1000,51212=>1000,51213=>1000,51214=>1000,51215=>1000,51216=>1000,51217=>1000,51218=>1000,51219=>1000,51220=>1000,51221=>1000,51222=>1000,51223=>1000,51224=>1000,51225=>1000,51226=>1000,51227=>1000,51228=>1000,51229=>1000,51230=>1000,51231=>1000,51232=>1000,51233=>1000,51234=>1000,51235=>1000,51236=>1000,51237=>1000,51238=>1000,51239=>1000,51240=>1000,51241=>1000,51242=>1000,51243=>1000,51244=>1000,51245=>1000,51246=>1000,51247=>1000,51248=>1000,51249=>1000,51250=>1000,51251=>1000,51252=>1000,51253=>1000,51254=>1000,51255=>1000,51256=>1000,51257=>1000,51258=>1000,51259=>1000,51260=>1000,51261=>1000,51262=>1000,51263=>1000,51264=>1000,51265=>1000,51266=>1000,51267=>1000,51268=>1000,51269=>1000,51270=>1000,51271=>1000,51272=>1000,51273=>1000,51274=>1000,51275=>1000,51276=>1000,51277=>1000,51278=>1000,51279=>1000,51280=>1000,51281=>1000,51282=>1000,51283=>1000,51284=>1000,51285=>1000,51286=>1000,51287=>1000,51288=>1000,51289=>1000,51290=>1000,51291=>1000,51292=>1000,51293=>1000,51294=>1000,51295=>1000,51296=>1000,51297=>1000,51298=>1000,51299=>1000,51300=>1000,51301=>1000,51302=>1000,51303=>1000,51304=>1000,51305=>1000,51306=>1000,51307=>1000,51308=>1000,51309=>1000,51310=>1000,51311=>1000,51312=>1000,51313=>1000,51314=>1000,51315=>1000,51316=>1000,51317=>1000,51318=>1000,51319=>1000,51320=>1000,51321=>1000,51322=>1000,51323=>1000,51324=>1000,51325=>1000,51326=>1000,51327=>1000,51328=>1000,51329=>1000,51330=>1000,51331=>1000,51332=>1000,51333=>1000,51334=>1000,51335=>1000,51336=>1000,51337=>1000,51338=>1000,51339=>1000,51340=>1000,51341=>1000,51342=>1000,51343=>1000,51344=>1000,51345=>1000,51346=>1000,51347=>1000,51348=>1000,51349=>1000,51350=>1000,51351=>1000,51352=>1000,51353=>1000,51354=>1000,51355=>1000,51356=>1000,51357=>1000,51358=>1000,51359=>1000,51360=>1000,51361=>1000,51362=>1000,51363=>1000,51364=>1000,51365=>1000,51366=>1000,51367=>1000,51368=>1000,51369=>1000,51370=>1000,51371=>1000,51372=>1000,51373=>1000,51374=>1000,51375=>1000,51376=>1000,51377=>1000,51378=>1000,51379=>1000,51380=>1000,51381=>1000,51382=>1000,51383=>1000,51384=>1000,51385=>1000,51386=>1000,51387=>1000,51388=>1000,51389=>1000,51390=>1000,51391=>1000,51392=>1000,51393=>1000,51394=>1000,51395=>1000,51396=>1000,51397=>1000,51398=>1000,51399=>1000,51400=>1000,51401=>1000,51402=>1000,51403=>1000,51404=>1000,51405=>1000,51406=>1000,51407=>1000,51408=>1000,51409=>1000,51410=>1000,51411=>1000,51412=>1000,51413=>1000,51414=>1000,51415=>1000,51416=>1000,51417=>1000,51418=>1000,51419=>1000,51420=>1000,51421=>1000,51422=>1000,51423=>1000,51424=>1000,51425=>1000,51426=>1000,51427=>1000,51428=>1000,51429=>1000,51430=>1000,51431=>1000,51432=>1000,51433=>1000,51434=>1000,51435=>1000,51436=>1000,51437=>1000,51438=>1000,51439=>1000,51440=>1000,51441=>1000,51442=>1000,51443=>1000,51444=>1000,51445=>1000,51446=>1000,51447=>1000,51448=>1000,51449=>1000,51450=>1000,51451=>1000,51452=>1000,51453=>1000,51454=>1000,51455=>1000,51456=>1000,51457=>1000,51458=>1000,51459=>1000,51460=>1000,51461=>1000,51462=>1000,51463=>1000,51464=>1000,51465=>1000,51466=>1000,51467=>1000,51468=>1000,51469=>1000,51470=>1000,51471=>1000,51472=>1000,51473=>1000,51474=>1000,51475=>1000,51476=>1000,51477=>1000,51478=>1000,51479=>1000,51480=>1000,51481=>1000,51482=>1000,51483=>1000,51484=>1000,51485=>1000,51486=>1000,51487=>1000,51488=>1000,51489=>1000,51490=>1000,51491=>1000,51492=>1000,51493=>1000,51494=>1000,51495=>1000,51496=>1000,51497=>1000,51498=>1000,51499=>1000,51500=>1000,51501=>1000,51502=>1000,51503=>1000,51504=>1000,51505=>1000,51506=>1000,51507=>1000,51508=>1000,51509=>1000,51510=>1000,51511=>1000,51512=>1000,51513=>1000,51514=>1000,51515=>1000,51516=>1000,51517=>1000,51518=>1000,51519=>1000,51520=>1000,51521=>1000,51522=>1000,51523=>1000,51524=>1000,51525=>1000,51526=>1000,51527=>1000,51528=>1000,51529=>1000,51530=>1000,51531=>1000,51532=>1000,51533=>1000,51534=>1000,51535=>1000,51536=>1000,51537=>1000,51538=>1000,51539=>1000,51540=>1000,51541=>1000,51542=>1000,51543=>1000,51544=>1000,51545=>1000,51546=>1000,51547=>1000,51548=>1000,51549=>1000,51550=>1000,51551=>1000,51552=>1000,51553=>1000,51554=>1000,51555=>1000,51556=>1000,51557=>1000,51558=>1000,51559=>1000,51560=>1000,51561=>1000,51562=>1000,51563=>1000,51564=>1000,51565=>1000,51566=>1000,51567=>1000,51568=>1000,51569=>1000,51570=>1000,51571=>1000,51572=>1000,51573=>1000,51574=>1000,51575=>1000,51576=>1000,51577=>1000,51578=>1000,51579=>1000,51580=>1000,51581=>1000,51582=>1000,51583=>1000,51584=>1000,51585=>1000,51586=>1000,51587=>1000,51588=>1000,51589=>1000,51590=>1000,51591=>1000,51592=>1000,51593=>1000,51594=>1000,51595=>1000,51596=>1000,51597=>1000,51598=>1000,51599=>1000,51600=>1000,51601=>1000,51602=>1000,51603=>1000,51604=>1000,51605=>1000,51606=>1000,51607=>1000,51608=>1000,51609=>1000,51610=>1000,51611=>1000,51612=>1000,51613=>1000,51614=>1000,51615=>1000,51616=>1000,51617=>1000,51618=>1000,51619=>1000,51620=>1000,51621=>1000,51622=>1000,51623=>1000,51624=>1000,51625=>1000,51626=>1000,51627=>1000,51628=>1000,51629=>1000,51630=>1000,51631=>1000,51632=>1000,51633=>1000,51634=>1000,51635=>1000,51636=>1000,51637=>1000,51638=>1000,51639=>1000,51640=>1000,51641=>1000,51642=>1000,51643=>1000,51644=>1000,51645=>1000,51646=>1000,51647=>1000,51648=>1000,51649=>1000,51650=>1000,51651=>1000,51652=>1000,51653=>1000,51654=>1000,51655=>1000,51656=>1000,51657=>1000,51658=>1000,51659=>1000,51660=>1000,51661=>1000,51662=>1000,51663=>1000,51664=>1000,51665=>1000,51666=>1000,51667=>1000,51668=>1000,51669=>1000,51670=>1000,51671=>1000,51672=>1000,51673=>1000,51674=>1000,51675=>1000,51676=>1000,51677=>1000,51678=>1000,51679=>1000,51680=>1000,51681=>1000,51682=>1000,51683=>1000,51684=>1000,51685=>1000,51686=>1000,51687=>1000,51688=>1000,51689=>1000,51690=>1000,51691=>1000,51692=>1000,51693=>1000,51694=>1000,51695=>1000,51696=>1000,51697=>1000,51698=>1000,51699=>1000,51700=>1000,51701=>1000,51702=>1000,51703=>1000,51704=>1000,51705=>1000,51706=>1000,51707=>1000,51708=>1000,51709=>1000,51710=>1000,51711=>1000,51712=>1000,51713=>1000,51714=>1000,51715=>1000,51716=>1000,51717=>1000,51718=>1000,51719=>1000,51720=>1000,51721=>1000,51722=>1000,51723=>1000,51724=>1000,51725=>1000,51726=>1000,51727=>1000,51728=>1000,51729=>1000,51730=>1000,51731=>1000,51732=>1000,51733=>1000,51734=>1000,51735=>1000,51736=>1000,51737=>1000,51738=>1000,51739=>1000,51740=>1000,51741=>1000,51742=>1000,51743=>1000,51744=>1000,51745=>1000,51746=>1000,51747=>1000,51748=>1000,51749=>1000,51750=>1000,51751=>1000,51752=>1000,51753=>1000,51754=>1000,51755=>1000,51756=>1000,51757=>1000,51758=>1000,51759=>1000,51760=>1000,51761=>1000,51762=>1000,51763=>1000,51764=>1000,51765=>1000,51766=>1000,51767=>1000,51768=>1000,51769=>1000,51770=>1000,51771=>1000,51772=>1000,51773=>1000,51774=>1000,51775=>1000,51776=>1000,51777=>1000,51778=>1000,51779=>1000,51780=>1000,51781=>1000,51782=>1000,51783=>1000,51784=>1000,51785=>1000,51786=>1000,51787=>1000,51788=>1000,51789=>1000,51790=>1000,51791=>1000,51792=>1000,51793=>1000,51794=>1000,51795=>1000,51796=>1000,51797=>1000,51798=>1000,51799=>1000,51800=>1000,51801=>1000,51802=>1000,51803=>1000,51804=>1000,51805=>1000,51806=>1000,51807=>1000,51808=>1000,51809=>1000,51810=>1000,51811=>1000,51812=>1000,51813=>1000,51814=>1000,51815=>1000,51816=>1000,51817=>1000,51818=>1000,51819=>1000,51820=>1000,51821=>1000,51822=>1000,51823=>1000,51824=>1000,51825=>1000,51826=>1000,51827=>1000,51828=>1000,51829=>1000,51830=>1000,51831=>1000,51832=>1000,51833=>1000,51834=>1000,51835=>1000,51836=>1000,51837=>1000,51838=>1000,51839=>1000,51840=>1000,51841=>1000,51842=>1000,51843=>1000,51844=>1000,51845=>1000,51846=>1000,51847=>1000,51848=>1000,51849=>1000,51850=>1000,51851=>1000,51852=>1000,51853=>1000,51854=>1000,51855=>1000,51856=>1000,51857=>1000,51858=>1000,51859=>1000,51860=>1000,51861=>1000,51862=>1000,51863=>1000,51864=>1000,51865=>1000,51866=>1000,51867=>1000,51868=>1000,51869=>1000,51870=>1000,51871=>1000,51872=>1000,51873=>1000,51874=>1000,51875=>1000,51876=>1000,51877=>1000,51878=>1000,51879=>1000,51880=>1000,51881=>1000,51882=>1000,51883=>1000,51884=>1000,51885=>1000,51886=>1000,51887=>1000,51888=>1000,51889=>1000,51890=>1000,51891=>1000,51892=>1000,51893=>1000,51894=>1000,51895=>1000,51896=>1000,51897=>1000,51898=>1000,51899=>1000,51900=>1000,51901=>1000,51902=>1000,51903=>1000,51904=>1000,51905=>1000,51906=>1000,51907=>1000,51908=>1000,51909=>1000,51910=>1000,51911=>1000,51912=>1000,51913=>1000,51914=>1000,51915=>1000,51916=>1000,51917=>1000,51918=>1000,51919=>1000,51920=>1000,51921=>1000,51922=>1000,51923=>1000,51924=>1000,51925=>1000,51926=>1000,51927=>1000,51928=>1000,51929=>1000,51930=>1000,51931=>1000,51932=>1000,51933=>1000,51934=>1000,51935=>1000,51936=>1000,51937=>1000,51938=>1000,51939=>1000,51940=>1000,51941=>1000,51942=>1000,51943=>1000,51944=>1000,51945=>1000,51946=>1000,51947=>1000,51948=>1000,51949=>1000,51950=>1000,51951=>1000,51952=>1000,51953=>1000,51954=>1000,51955=>1000,51956=>1000,51957=>1000,51958=>1000,51959=>1000,51960=>1000,51961=>1000,51962=>1000,51963=>1000,51964=>1000,51965=>1000,51966=>1000,51967=>1000,51968=>1000,51969=>1000,51970=>1000,51971=>1000,51972=>1000,51973=>1000,51974=>1000,51975=>1000,51976=>1000,51977=>1000,51978=>1000,51979=>1000,51980=>1000,51981=>1000,51982=>1000,51983=>1000,51984=>1000,51985=>1000,51986=>1000,51987=>1000,51988=>1000,51989=>1000,51990=>1000,51991=>1000,51992=>1000,51993=>1000,51994=>1000,51995=>1000,51996=>1000,51997=>1000,51998=>1000,51999=>1000,52000=>1000,52001=>1000,52002=>1000,52003=>1000,52004=>1000,52005=>1000,52006=>1000,52007=>1000,52008=>1000,52009=>1000,52010=>1000,52011=>1000,52012=>1000,52013=>1000,52014=>1000,52015=>1000,52016=>1000,52017=>1000,52018=>1000,52019=>1000,52020=>1000,52021=>1000,52022=>1000,52023=>1000,52024=>1000,52025=>1000,52026=>1000,52027=>1000,52028=>1000,52029=>1000,52030=>1000,52031=>1000,52032=>1000,52033=>1000,52034=>1000,52035=>1000,52036=>1000,52037=>1000,52038=>1000,52039=>1000,52040=>1000,52041=>1000,52042=>1000,52043=>1000,52044=>1000,52045=>1000,52046=>1000,52047=>1000,52048=>1000,52049=>1000,52050=>1000,52051=>1000,52052=>1000,52053=>1000,52054=>1000,52055=>1000,52056=>1000,52057=>1000,52058=>1000,52059=>1000,52060=>1000,52061=>1000,52062=>1000,52063=>1000,52064=>1000,52065=>1000,52066=>1000,52067=>1000,52068=>1000,52069=>1000,52070=>1000,52071=>1000,52072=>1000,52073=>1000,52074=>1000,52075=>1000,52076=>1000,52077=>1000,52078=>1000,52079=>1000,52080=>1000,52081=>1000,52082=>1000,52083=>1000,52084=>1000,52085=>1000,52086=>1000,52087=>1000,52088=>1000,52089=>1000,52090=>1000,52091=>1000,52092=>1000,52093=>1000,52094=>1000,52095=>1000,52096=>1000,52097=>1000,52098=>1000,52099=>1000,52100=>1000,52101=>1000,52102=>1000,52103=>1000,52104=>1000,52105=>1000,52106=>1000,52107=>1000,52108=>1000,52109=>1000,52110=>1000,52111=>1000,52112=>1000,52113=>1000,52114=>1000,52115=>1000,52116=>1000,52117=>1000,52118=>1000,52119=>1000,52120=>1000,52121=>1000,52122=>1000,52123=>1000,52124=>1000,52125=>1000,52126=>1000,52127=>1000,52128=>1000,52129=>1000,52130=>1000,52131=>1000,52132=>1000,52133=>1000,52134=>1000,52135=>1000,52136=>1000,52137=>1000,52138=>1000,52139=>1000,52140=>1000,52141=>1000,52142=>1000,52143=>1000,52144=>1000,52145=>1000,52146=>1000,52147=>1000,52148=>1000,52149=>1000,52150=>1000,52151=>1000,52152=>1000,52153=>1000,52154=>1000,52155=>1000,52156=>1000,52157=>1000,52158=>1000,52159=>1000,52160=>1000,52161=>1000,52162=>1000,52163=>1000,52164=>1000,52165=>1000,52166=>1000,52167=>1000,52168=>1000,52169=>1000,52170=>1000,52171=>1000,52172=>1000,52173=>1000,52174=>1000,52175=>1000,52176=>1000,52177=>1000,52178=>1000,52179=>1000,52180=>1000,52181=>1000,52182=>1000,52183=>1000,52184=>1000,52185=>1000,52186=>1000,52187=>1000,52188=>1000,52189=>1000,52190=>1000,52191=>1000,52192=>1000,52193=>1000,52194=>1000,52195=>1000,52196=>1000,52197=>1000,52198=>1000,52199=>1000,52200=>1000,52201=>1000,52202=>1000,52203=>1000,52204=>1000,52205=>1000,52206=>1000,52207=>1000,52208=>1000,52209=>1000,52210=>1000,52211=>1000,52212=>1000,52213=>1000,52214=>1000,52215=>1000,52216=>1000,52217=>1000,52218=>1000,52219=>1000,52220=>1000,52221=>1000,52222=>1000,52223=>1000,52224=>1000,52225=>1000,52226=>1000,52227=>1000,52228=>1000,52229=>1000,52230=>1000,52231=>1000,52232=>1000,52233=>1000,52234=>1000,52235=>1000,52236=>1000,52237=>1000,52238=>1000,52239=>1000,52240=>1000,52241=>1000,52242=>1000,52243=>1000,52244=>1000,52245=>1000,52246=>1000,52247=>1000,52248=>1000,52249=>1000,52250=>1000,52251=>1000,52252=>1000,52253=>1000,52254=>1000,52255=>1000,52256=>1000,52257=>1000,52258=>1000,52259=>1000,52260=>1000,52261=>1000,52262=>1000,52263=>1000,52264=>1000,52265=>1000,52266=>1000,52267=>1000,52268=>1000,52269=>1000,52270=>1000,52271=>1000,52272=>1000,52273=>1000,52274=>1000,52275=>1000,52276=>1000,52277=>1000,52278=>1000,52279=>1000,52280=>1000,52281=>1000,52282=>1000,52283=>1000,52284=>1000,52285=>1000,52286=>1000,52287=>1000,52288=>1000,52289=>1000,52290=>1000,52291=>1000,52292=>1000,52293=>1000,52294=>1000,52295=>1000,52296=>1000,52297=>1000,52298=>1000,52299=>1000,52300=>1000,52301=>1000,52302=>1000,52303=>1000,52304=>1000,52305=>1000,52306=>1000,52307=>1000,52308=>1000,52309=>1000,52310=>1000,52311=>1000,52312=>1000,52313=>1000,52314=>1000,52315=>1000,52316=>1000,52317=>1000,52318=>1000,52319=>1000,52320=>1000,52321=>1000,52322=>1000,52323=>1000,52324=>1000,52325=>1000,52326=>1000,52327=>1000,52328=>1000,52329=>1000,52330=>1000,52331=>1000,52332=>1000,52333=>1000,52334=>1000,52335=>1000,52336=>1000,52337=>1000,52338=>1000,52339=>1000,52340=>1000,52341=>1000,52342=>1000,52343=>1000,52344=>1000,52345=>1000,52346=>1000,52347=>1000,52348=>1000,52349=>1000,52350=>1000,52351=>1000,52352=>1000,52353=>1000,52354=>1000,52355=>1000,52356=>1000,52357=>1000,52358=>1000,52359=>1000,52360=>1000,52361=>1000,52362=>1000,52363=>1000,52364=>1000,52365=>1000,52366=>1000,52367=>1000,52368=>1000,52369=>1000,52370=>1000,52371=>1000,52372=>1000,52373=>1000,52374=>1000,52375=>1000,52376=>1000,52377=>1000,52378=>1000,52379=>1000,52380=>1000,52381=>1000,52382=>1000,52383=>1000,52384=>1000,52385=>1000,52386=>1000,52387=>1000,52388=>1000,52389=>1000,52390=>1000,52391=>1000,52392=>1000,52393=>1000,52394=>1000,52395=>1000,52396=>1000,52397=>1000,52398=>1000,52399=>1000,52400=>1000,52401=>1000,52402=>1000,52403=>1000,52404=>1000,52405=>1000,52406=>1000,52407=>1000,52408=>1000,52409=>1000,52410=>1000,52411=>1000,52412=>1000,52413=>1000,52414=>1000,52415=>1000,52416=>1000,52417=>1000,52418=>1000,52419=>1000,52420=>1000,52421=>1000,52422=>1000,52423=>1000,52424=>1000,52425=>1000,52426=>1000,52427=>1000,52428=>1000,52429=>1000,52430=>1000,52431=>1000,52432=>1000,52433=>1000,52434=>1000,52435=>1000,52436=>1000,52437=>1000,52438=>1000,52439=>1000,52440=>1000,52441=>1000,52442=>1000,52443=>1000,52444=>1000,52445=>1000,52446=>1000,52447=>1000,52448=>1000,52449=>1000,52450=>1000,52451=>1000,52452=>1000,52453=>1000,52454=>1000,52455=>1000,52456=>1000,52457=>1000,52458=>1000,52459=>1000,52460=>1000,52461=>1000,52462=>1000,52463=>1000,52464=>1000,52465=>1000,52466=>1000,52467=>1000,52468=>1000,52469=>1000,52470=>1000,52471=>1000,52472=>1000,52473=>1000,52474=>1000,52475=>1000,52476=>1000,52477=>1000,52478=>1000,52479=>1000,52480=>1000,52481=>1000,52482=>1000,52483=>1000,52484=>1000,52485=>1000,52486=>1000,52487=>1000,52488=>1000,52489=>1000,52490=>1000,52491=>1000,52492=>1000,52493=>1000,52494=>1000,52495=>1000,52496=>1000,52497=>1000,52498=>1000,52499=>1000,52500=>1000,52501=>1000,52502=>1000,52503=>1000,52504=>1000,52505=>1000,52506=>1000,52507=>1000,52508=>1000,52509=>1000,52510=>1000,52511=>1000,52512=>1000,52513=>1000,52514=>1000,52515=>1000,52516=>1000,52517=>1000,52518=>1000,52519=>1000,52520=>1000,52521=>1000,52522=>1000,52523=>1000,52524=>1000,52525=>1000,52526=>1000,52527=>1000,52528=>1000,52529=>1000,52530=>1000,52531=>1000,52532=>1000,52533=>1000,52534=>1000,52535=>1000,52536=>1000,52537=>1000,52538=>1000,52539=>1000,52540=>1000,52541=>1000,52542=>1000,52543=>1000,52544=>1000,52545=>1000,52546=>1000,52547=>1000,52548=>1000,52549=>1000,52550=>1000,52551=>1000,52552=>1000,52553=>1000,52554=>1000,52555=>1000,52556=>1000,52557=>1000,52558=>1000,52559=>1000,52560=>1000,52561=>1000,52562=>1000,52563=>1000,52564=>1000,52565=>1000,52566=>1000,52567=>1000,52568=>1000,52569=>1000,52570=>1000,52571=>1000,52572=>1000,52573=>1000,52574=>1000,52575=>1000,52576=>1000,52577=>1000,52578=>1000,52579=>1000,52580=>1000,52581=>1000,52582=>1000,52583=>1000,52584=>1000,52585=>1000,52586=>1000,52587=>1000,52588=>1000,52589=>1000,52590=>1000,52591=>1000,52592=>1000,52593=>1000,52594=>1000,52595=>1000,52596=>1000,52597=>1000,52598=>1000,52599=>1000,52600=>1000,52601=>1000,52602=>1000,52603=>1000,52604=>1000,52605=>1000,52606=>1000,52607=>1000,52608=>1000,52609=>1000,52610=>1000,52611=>1000,52612=>1000,52613=>1000,52614=>1000,52615=>1000,52616=>1000,52617=>1000,52618=>1000,52619=>1000,52620=>1000,52621=>1000,52622=>1000,52623=>1000,52624=>1000,52625=>1000,52626=>1000,52627=>1000,52628=>1000,52629=>1000,52630=>1000,52631=>1000,52632=>1000,52633=>1000,52634=>1000,52635=>1000,52636=>1000,52637=>1000,52638=>1000,52639=>1000,52640=>1000,52641=>1000,52642=>1000,52643=>1000,52644=>1000,52645=>1000,52646=>1000,52647=>1000,52648=>1000,52649=>1000,52650=>1000,52651=>1000,52652=>1000,52653=>1000,52654=>1000,52655=>1000,52656=>1000,52657=>1000,52658=>1000,52659=>1000,52660=>1000,52661=>1000,52662=>1000,52663=>1000,52664=>1000,52665=>1000,52666=>1000,52667=>1000,52668=>1000,52669=>1000,52670=>1000,52671=>1000,52672=>1000,52673=>1000,52674=>1000,52675=>1000,52676=>1000,52677=>1000,52678=>1000,52679=>1000,52680=>1000,52681=>1000,52682=>1000,52683=>1000,52684=>1000,52685=>1000,52686=>1000,52687=>1000,52688=>1000,52689=>1000,52690=>1000,52691=>1000,52692=>1000,52693=>1000,52694=>1000,52695=>1000,52696=>1000,52697=>1000,52698=>1000,52699=>1000,52700=>1000,52701=>1000,52702=>1000,52703=>1000,52704=>1000,52705=>1000,52706=>1000,52707=>1000,52708=>1000,52709=>1000,52710=>1000,52711=>1000,52712=>1000,52713=>1000,52714=>1000,52715=>1000,52716=>1000,52717=>1000,52718=>1000,52719=>1000,52720=>1000,52721=>1000,52722=>1000,52723=>1000,52724=>1000,52725=>1000,52726=>1000,52727=>1000,52728=>1000,52729=>1000,52730=>1000,52731=>1000,52732=>1000,52733=>1000,52734=>1000,52735=>1000,52736=>1000,52737=>1000,52738=>1000,52739=>1000,52740=>1000,52741=>1000,52742=>1000,52743=>1000,52744=>1000,52745=>1000,52746=>1000,52747=>1000,52748=>1000,52749=>1000,52750=>1000,52751=>1000,52752=>1000,52753=>1000,52754=>1000,52755=>1000,52756=>1000,52757=>1000,52758=>1000,52759=>1000,52760=>1000,52761=>1000,52762=>1000,52763=>1000,52764=>1000,52765=>1000,52766=>1000,52767=>1000,52768=>1000,52769=>1000,52770=>1000,52771=>1000,52772=>1000,52773=>1000,52774=>1000,52775=>1000,52776=>1000,52777=>1000,52778=>1000,52779=>1000,52780=>1000,52781=>1000,52782=>1000,52783=>1000,52784=>1000,52785=>1000,52786=>1000,52787=>1000,52788=>1000,52789=>1000,52790=>1000,52791=>1000,52792=>1000,52793=>1000,52794=>1000,52795=>1000,52796=>1000,52797=>1000,52798=>1000,52799=>1000,52800=>1000,52801=>1000,52802=>1000,52803=>1000,52804=>1000,52805=>1000,52806=>1000,52807=>1000,52808=>1000,52809=>1000,52810=>1000,52811=>1000,52812=>1000,52813=>1000,52814=>1000,52815=>1000,52816=>1000,52817=>1000,52818=>1000,52819=>1000,52820=>1000,52821=>1000,52822=>1000,52823=>1000,52824=>1000,52825=>1000,52826=>1000,52827=>1000,52828=>1000,52829=>1000,52830=>1000,52831=>1000,52832=>1000,52833=>1000,52834=>1000,52835=>1000,52836=>1000,52837=>1000,52838=>1000,52839=>1000,52840=>1000,52841=>1000,52842=>1000,52843=>1000,52844=>1000,52845=>1000,52846=>1000,52847=>1000,52848=>1000,52849=>1000,52850=>1000,52851=>1000,52852=>1000,52853=>1000,52854=>1000,52855=>1000,52856=>1000,52857=>1000,52858=>1000,52859=>1000,52860=>1000,52861=>1000,52862=>1000,52863=>1000,52864=>1000,52865=>1000,52866=>1000,52867=>1000,52868=>1000,52869=>1000,52870=>1000,52871=>1000,52872=>1000,52873=>1000,52874=>1000,52875=>1000,52876=>1000,52877=>1000,52878=>1000,52879=>1000,52880=>1000,52881=>1000,52882=>1000,52883=>1000,52884=>1000,52885=>1000,52886=>1000,52887=>1000,52888=>1000,52889=>1000,52890=>1000,52891=>1000,52892=>1000,52893=>1000,52894=>1000,52895=>1000,52896=>1000,52897=>1000,52898=>1000,52899=>1000,52900=>1000,52901=>1000,52902=>1000,52903=>1000,52904=>1000,52905=>1000,52906=>1000,52907=>1000,52908=>1000,52909=>1000,52910=>1000,52911=>1000,52912=>1000,52913=>1000,52914=>1000,52915=>1000,52916=>1000,52917=>1000,52918=>1000,52919=>1000,52920=>1000,52921=>1000,52922=>1000,52923=>1000,52924=>1000,52925=>1000,52926=>1000,52927=>1000,52928=>1000,52929=>1000,52930=>1000,52931=>1000,52932=>1000,52933=>1000,52934=>1000,52935=>1000,52936=>1000,52937=>1000,52938=>1000,52939=>1000,52940=>1000,52941=>1000,52942=>1000,52943=>1000,52944=>1000,52945=>1000,52946=>1000,52947=>1000,52948=>1000,52949=>1000,52950=>1000,52951=>1000,52952=>1000,52953=>1000,52954=>1000,52955=>1000,52956=>1000,52957=>1000,52958=>1000,52959=>1000,52960=>1000,52961=>1000,52962=>1000,52963=>1000,52964=>1000,52965=>1000,52966=>1000,52967=>1000,52968=>1000,52969=>1000,52970=>1000,52971=>1000,52972=>1000,52973=>1000,52974=>1000,52975=>1000,52976=>1000,52977=>1000,52978=>1000,52979=>1000,52980=>1000,52981=>1000,52982=>1000,52983=>1000,52984=>1000,52985=>1000,52986=>1000,52987=>1000,52988=>1000,52989=>1000,52990=>1000,52991=>1000,52992=>1000,52993=>1000,52994=>1000,52995=>1000,52996=>1000,52997=>1000,52998=>1000,52999=>1000,53000=>1000,53001=>1000,53002=>1000,53003=>1000,53004=>1000,53005=>1000,53006=>1000,53007=>1000,53008=>1000,53009=>1000,53010=>1000,53011=>1000,53012=>1000,53013=>1000,53014=>1000,53015=>1000,53016=>1000,53017=>1000,53018=>1000,53019=>1000,53020=>1000,53021=>1000,53022=>1000,53023=>1000,53024=>1000,53025=>1000,53026=>1000,53027=>1000,53028=>1000,53029=>1000,53030=>1000,53031=>1000,53032=>1000,53033=>1000,53034=>1000,53035=>1000,53036=>1000,53037=>1000,53038=>1000,53039=>1000,53040=>1000,53041=>1000,53042=>1000,53043=>1000,53044=>1000,53045=>1000,53046=>1000,53047=>1000,53048=>1000,53049=>1000,53050=>1000,53051=>1000,53052=>1000,53053=>1000,53054=>1000,53055=>1000,53056=>1000,53057=>1000,53058=>1000,53059=>1000,53060=>1000,53061=>1000,53062=>1000,53063=>1000,53064=>1000,53065=>1000,53066=>1000,53067=>1000,53068=>1000,53069=>1000,53070=>1000,53071=>1000,53072=>1000,53073=>1000,53074=>1000,53075=>1000,53076=>1000,53077=>1000,53078=>1000,53079=>1000,53080=>1000,53081=>1000,53082=>1000,53083=>1000,53084=>1000,53085=>1000,53086=>1000,53087=>1000,53088=>1000,53089=>1000,53090=>1000,53091=>1000,53092=>1000,53093=>1000,53094=>1000,53095=>1000,53096=>1000,53097=>1000,53098=>1000,53099=>1000,53100=>1000,53101=>1000,53102=>1000,53103=>1000,53104=>1000,53105=>1000,53106=>1000,53107=>1000,53108=>1000,53109=>1000,53110=>1000,53111=>1000,53112=>1000,53113=>1000,53114=>1000,53115=>1000,53116=>1000,53117=>1000,53118=>1000,53119=>1000,53120=>1000,53121=>1000,53122=>1000,53123=>1000,53124=>1000,53125=>1000,53126=>1000,53127=>1000,53128=>1000,53129=>1000,53130=>1000,53131=>1000,53132=>1000,53133=>1000,53134=>1000,53135=>1000,53136=>1000,53137=>1000,53138=>1000,53139=>1000,53140=>1000,53141=>1000,53142=>1000,53143=>1000,53144=>1000,53145=>1000,53146=>1000,53147=>1000,53148=>1000,53149=>1000,53150=>1000,53151=>1000,53152=>1000,53153=>1000,53154=>1000,53155=>1000,53156=>1000,53157=>1000,53158=>1000,53159=>1000,53160=>1000,53161=>1000,53162=>1000,53163=>1000,53164=>1000,53165=>1000,53166=>1000,53167=>1000,53168=>1000,53169=>1000,53170=>1000,53171=>1000,53172=>1000,53173=>1000,53174=>1000,53175=>1000,53176=>1000,53177=>1000,53178=>1000,53179=>1000,53180=>1000,53181=>1000,53182=>1000,53183=>1000,53184=>1000,53185=>1000,53186=>1000,53187=>1000,53188=>1000,53189=>1000,53190=>1000,53191=>1000,53192=>1000,53193=>1000,53194=>1000,53195=>1000,53196=>1000,53197=>1000,53198=>1000,53199=>1000,53200=>1000,53201=>1000,53202=>1000,53203=>1000,53204=>1000,53205=>1000,53206=>1000,53207=>1000,53208=>1000,53209=>1000,53210=>1000,53211=>1000,53212=>1000,53213=>1000,53214=>1000,53215=>1000,53216=>1000,53217=>1000,53218=>1000,53219=>1000,53220=>1000,53221=>1000,53222=>1000,53223=>1000,53224=>1000,53225=>1000,53226=>1000,53227=>1000,53228=>1000,53229=>1000,53230=>1000,53231=>1000,53232=>1000,53233=>1000,53234=>1000,53235=>1000,53236=>1000,53237=>1000,53238=>1000,53239=>1000,53240=>1000,53241=>1000,53242=>1000,53243=>1000,53244=>1000,53245=>1000,53246=>1000,53247=>1000,53248=>1000,53249=>1000,53250=>1000,53251=>1000,53252=>1000,53253=>1000,53254=>1000,53255=>1000,53256=>1000,53257=>1000,53258=>1000,53259=>1000,53260=>1000,53261=>1000,53262=>1000,53263=>1000,53264=>1000,53265=>1000,53266=>1000,53267=>1000,53268=>1000,53269=>1000,53270=>1000,53271=>1000,53272=>1000,53273=>1000,53274=>1000,53275=>1000,53276=>1000,53277=>1000,53278=>1000,53279=>1000,53280=>1000,53281=>1000,53282=>1000,53283=>1000,53284=>1000,53285=>1000,53286=>1000,53287=>1000,53288=>1000,53289=>1000,53290=>1000,53291=>1000,53292=>1000,53293=>1000,53294=>1000,53295=>1000,53296=>1000,53297=>1000,53298=>1000,53299=>1000,53300=>1000,53301=>1000,53302=>1000,53303=>1000,53304=>1000,53305=>1000,53306=>1000,53307=>1000,53308=>1000,53309=>1000,53310=>1000,53311=>1000,53312=>1000,53313=>1000,53314=>1000,53315=>1000,53316=>1000,53317=>1000,53318=>1000,53319=>1000,53320=>1000,53321=>1000,53322=>1000,53323=>1000,53324=>1000,53325=>1000,53326=>1000,53327=>1000,53328=>1000,53329=>1000,53330=>1000,53331=>1000,53332=>1000,53333=>1000,53334=>1000,53335=>1000,53336=>1000,53337=>1000,53338=>1000,53339=>1000,53340=>1000,53341=>1000,53342=>1000,53343=>1000,53344=>1000,53345=>1000,53346=>1000,53347=>1000,53348=>1000,53349=>1000,53350=>1000,53351=>1000,53352=>1000,53353=>1000,53354=>1000,53355=>1000,53356=>1000,53357=>1000,53358=>1000,53359=>1000,53360=>1000,53361=>1000,53362=>1000,53363=>1000,53364=>1000,53365=>1000,53366=>1000,53367=>1000,53368=>1000,53369=>1000,53370=>1000,53371=>1000,53372=>1000,53373=>1000,53374=>1000,53375=>1000,53376=>1000,53377=>1000,53378=>1000,53379=>1000,53380=>1000,53381=>1000,53382=>1000,53383=>1000,53384=>1000,53385=>1000,53386=>1000,53387=>1000,53388=>1000,53389=>1000,53390=>1000,53391=>1000,53392=>1000,53393=>1000,53394=>1000,53395=>1000,53396=>1000,53397=>1000,53398=>1000,53399=>1000,53400=>1000,53401=>1000,53402=>1000,53403=>1000,53404=>1000,53405=>1000,53406=>1000,53407=>1000,53408=>1000,53409=>1000,53410=>1000,53411=>1000,53412=>1000,53413=>1000,53414=>1000,53415=>1000,53416=>1000,53417=>1000,53418=>1000,53419=>1000,53420=>1000,53421=>1000,53422=>1000,53423=>1000,53424=>1000,53425=>1000,53426=>1000,53427=>1000,53428=>1000,53429=>1000,53430=>1000,53431=>1000,53432=>1000,53433=>1000,53434=>1000,53435=>1000,53436=>1000,53437=>1000,53438=>1000,53439=>1000,53440=>1000,53441=>1000,53442=>1000,53443=>1000,53444=>1000,53445=>1000,53446=>1000,53447=>1000,53448=>1000,53449=>1000,53450=>1000,53451=>1000,53452=>1000,53453=>1000,53454=>1000,53455=>1000,53456=>1000,53457=>1000,53458=>1000,53459=>1000,53460=>1000,53461=>1000,53462=>1000,53463=>1000,53464=>1000,53465=>1000,53466=>1000,53467=>1000,53468=>1000,53469=>1000,53470=>1000,53471=>1000,53472=>1000,53473=>1000,53474=>1000,53475=>1000,53476=>1000,53477=>1000,53478=>1000,53479=>1000,53480=>1000,53481=>1000,53482=>1000,53483=>1000,53484=>1000,53485=>1000,53486=>1000,53487=>1000,53488=>1000,53489=>1000,53490=>1000,53491=>1000,53492=>1000,53493=>1000,53494=>1000,53495=>1000,53496=>1000,53497=>1000,53498=>1000,53499=>1000,53500=>1000,53501=>1000,53502=>1000,53503=>1000,53504=>1000,53505=>1000,53506=>1000,53507=>1000,53508=>1000,53509=>1000,53510=>1000,53511=>1000,53512=>1000,53513=>1000,53514=>1000,53515=>1000,53516=>1000,53517=>1000,53518=>1000,53519=>1000,53520=>1000,53521=>1000,53522=>1000,53523=>1000,53524=>1000,53525=>1000,53526=>1000,53527=>1000,53528=>1000,53529=>1000,53530=>1000,53531=>1000,53532=>1000,53533=>1000,53534=>1000,53535=>1000,53536=>1000,53537=>1000,53538=>1000,53539=>1000,53540=>1000,53541=>1000,53542=>1000,53543=>1000,53544=>1000,53545=>1000,53546=>1000,53547=>1000,53548=>1000,53549=>1000,53550=>1000,53551=>1000,53552=>1000,53553=>1000,53554=>1000,53555=>1000,53556=>1000,53557=>1000,53558=>1000,53559=>1000,53560=>1000,53561=>1000,53562=>1000,53563=>1000,53564=>1000,53565=>1000,53566=>1000,53567=>1000,53568=>1000,53569=>1000,53570=>1000,53571=>1000,53572=>1000,53573=>1000,53574=>1000,53575=>1000,53576=>1000,53577=>1000,53578=>1000,53579=>1000,53580=>1000,53581=>1000,53582=>1000,53583=>1000,53584=>1000,53585=>1000,53586=>1000,53587=>1000,53588=>1000,53589=>1000,53590=>1000,53591=>1000,53592=>1000,53593=>1000,53594=>1000,53595=>1000,53596=>1000,53597=>1000,53598=>1000,53599=>1000,53600=>1000,53601=>1000,53602=>1000,53603=>1000,53604=>1000,53605=>1000,53606=>1000,53607=>1000,53608=>1000,53609=>1000,53610=>1000,53611=>1000,53612=>1000,53613=>1000,53614=>1000,53615=>1000,53616=>1000,53617=>1000,53618=>1000,53619=>1000,53620=>1000,53621=>1000,53622=>1000,53623=>1000,53624=>1000,53625=>1000,53626=>1000,53627=>1000,53628=>1000,53629=>1000,53630=>1000,53631=>1000,53632=>1000,53633=>1000,53634=>1000,53635=>1000,53636=>1000,53637=>1000,53638=>1000,53639=>1000,53640=>1000,53641=>1000,53642=>1000,53643=>1000,53644=>1000,53645=>1000,53646=>1000,53647=>1000,53648=>1000,53649=>1000,53650=>1000,53651=>1000,53652=>1000,53653=>1000,53654=>1000,53655=>1000,53656=>1000,53657=>1000,53658=>1000,53659=>1000,53660=>1000,53661=>1000,53662=>1000,53663=>1000,53664=>1000,53665=>1000,53666=>1000,53667=>1000,53668=>1000,53669=>1000,53670=>1000,53671=>1000,53672=>1000,53673=>1000,53674=>1000,53675=>1000,53676=>1000,53677=>1000,53678=>1000,53679=>1000,53680=>1000,53681=>1000,53682=>1000,53683=>1000,53684=>1000,53685=>1000,53686=>1000,53687=>1000,53688=>1000,53689=>1000,53690=>1000,53691=>1000,53692=>1000,53693=>1000,53694=>1000,53695=>1000,53696=>1000,53697=>1000,53698=>1000,53699=>1000,53700=>1000,53701=>1000,53702=>1000,53703=>1000,53704=>1000,53705=>1000,53706=>1000,53707=>1000,53708=>1000,53709=>1000,53710=>1000,53711=>1000,53712=>1000,53713=>1000,53714=>1000,53715=>1000,53716=>1000,53717=>1000,53718=>1000,53719=>1000,53720=>1000,53721=>1000,53722=>1000,53723=>1000,53724=>1000,53725=>1000,53726=>1000,53727=>1000,53728=>1000,53729=>1000,53730=>1000,53731=>1000,53732=>1000,53733=>1000,53734=>1000,53735=>1000,53736=>1000,53737=>1000,53738=>1000,53739=>1000,53740=>1000,53741=>1000,53742=>1000,53743=>1000,53744=>1000,53745=>1000,53746=>1000,53747=>1000,53748=>1000,53749=>1000,53750=>1000,53751=>1000,53752=>1000,53753=>1000,53754=>1000,53755=>1000,53756=>1000,53757=>1000,53758=>1000,53759=>1000,53760=>1000,53761=>1000,53762=>1000,53763=>1000,53764=>1000,53765=>1000,53766=>1000,53767=>1000,53768=>1000,53769=>1000,53770=>1000,53771=>1000,53772=>1000,53773=>1000,53774=>1000,53775=>1000,53776=>1000,53777=>1000,53778=>1000,53779=>1000,53780=>1000,53781=>1000,53782=>1000,53783=>1000,53784=>1000,53785=>1000,53786=>1000,53787=>1000,53788=>1000,53789=>1000,53790=>1000,53791=>1000,53792=>1000,53793=>1000,53794=>1000,53795=>1000,53796=>1000,53797=>1000,53798=>1000,53799=>1000,53800=>1000,53801=>1000,53802=>1000,53803=>1000,53804=>1000,53805=>1000,53806=>1000,53807=>1000,53808=>1000,53809=>1000,53810=>1000,53811=>1000,53812=>1000,53813=>1000,53814=>1000,53815=>1000,53816=>1000,53817=>1000,53818=>1000,53819=>1000,53820=>1000,53821=>1000,53822=>1000,53823=>1000,53824=>1000,53825=>1000,53826=>1000,53827=>1000,53828=>1000,53829=>1000,53830=>1000,53831=>1000,53832=>1000,53833=>1000,53834=>1000,53835=>1000,53836=>1000,53837=>1000,53838=>1000,53839=>1000,53840=>1000,53841=>1000,53842=>1000,53843=>1000,53844=>1000,53845=>1000,53846=>1000,53847=>1000,53848=>1000,53849=>1000,53850=>1000,53851=>1000,53852=>1000,53853=>1000,53854=>1000,53855=>1000,53856=>1000,53857=>1000,53858=>1000,53859=>1000,53860=>1000,53861=>1000,53862=>1000,53863=>1000,53864=>1000,53865=>1000,53866=>1000,53867=>1000,53868=>1000,53869=>1000,53870=>1000,53871=>1000,53872=>1000,53873=>1000,53874=>1000,53875=>1000,53876=>1000,53877=>1000,53878=>1000,53879=>1000,53880=>1000,53881=>1000,53882=>1000,53883=>1000,53884=>1000,53885=>1000,53886=>1000,53887=>1000,53888=>1000,53889=>1000,53890=>1000,53891=>1000,53892=>1000,53893=>1000,53894=>1000,53895=>1000,53896=>1000,53897=>1000,53898=>1000,53899=>1000,53900=>1000,53901=>1000,53902=>1000,53903=>1000,53904=>1000,53905=>1000,53906=>1000,53907=>1000,53908=>1000,53909=>1000,53910=>1000,53911=>1000,53912=>1000,53913=>1000,53914=>1000,53915=>1000,53916=>1000,53917=>1000,53918=>1000,53919=>1000,53920=>1000,53921=>1000,53922=>1000,53923=>1000,53924=>1000,53925=>1000,53926=>1000,53927=>1000,53928=>1000,53929=>1000,53930=>1000,53931=>1000,53932=>1000,53933=>1000,53934=>1000,53935=>1000,53936=>1000,53937=>1000,53938=>1000,53939=>1000,53940=>1000,53941=>1000,53942=>1000,53943=>1000,53944=>1000,53945=>1000,53946=>1000,53947=>1000,53948=>1000,53949=>1000,53950=>1000,53951=>1000,53952=>1000,53953=>1000,53954=>1000,53955=>1000,53956=>1000,53957=>1000,53958=>1000,53959=>1000,53960=>1000,53961=>1000,53962=>1000,53963=>1000,53964=>1000,53965=>1000,53966=>1000,53967=>1000,53968=>1000,53969=>1000,53970=>1000,53971=>1000,53972=>1000,53973=>1000,53974=>1000,53975=>1000,53976=>1000,53977=>1000,53978=>1000,53979=>1000,53980=>1000,53981=>1000,53982=>1000,53983=>1000,53984=>1000,53985=>1000,53986=>1000,53987=>1000,53988=>1000,53989=>1000,53990=>1000,53991=>1000,53992=>1000,53993=>1000,53994=>1000,53995=>1000,53996=>1000,53997=>1000,53998=>1000,53999=>1000,54000=>1000,54001=>1000,54002=>1000,54003=>1000,54004=>1000,54005=>1000,54006=>1000,54007=>1000,54008=>1000,54009=>1000,54010=>1000,54011=>1000,54012=>1000,54013=>1000,54014=>1000,54015=>1000,54016=>1000,54017=>1000,54018=>1000,54019=>1000,54020=>1000,54021=>1000,54022=>1000,54023=>1000,54024=>1000,54025=>1000,54026=>1000,54027=>1000,54028=>1000,54029=>1000,54030=>1000,54031=>1000,54032=>1000,54033=>1000,54034=>1000,54035=>1000,54036=>1000,54037=>1000,54038=>1000,54039=>1000,54040=>1000,54041=>1000,54042=>1000,54043=>1000,54044=>1000,54045=>1000,54046=>1000,54047=>1000,54048=>1000,54049=>1000,54050=>1000,54051=>1000,54052=>1000,54053=>1000,54054=>1000,54055=>1000,54056=>1000,54057=>1000,54058=>1000,54059=>1000,54060=>1000,54061=>1000,54062=>1000,54063=>1000,54064=>1000,54065=>1000,54066=>1000,54067=>1000,54068=>1000,54069=>1000,54070=>1000,54071=>1000,54072=>1000,54073=>1000,54074=>1000,54075=>1000,54076=>1000,54077=>1000,54078=>1000,54079=>1000,54080=>1000,54081=>1000,54082=>1000,54083=>1000,54084=>1000,54085=>1000,54086=>1000,54087=>1000,54088=>1000,54089=>1000,54090=>1000,54091=>1000,54092=>1000,54093=>1000,54094=>1000,54095=>1000,54096=>1000,54097=>1000,54098=>1000,54099=>1000,54100=>1000,54101=>1000,54102=>1000,54103=>1000,54104=>1000,54105=>1000,54106=>1000,54107=>1000,54108=>1000,54109=>1000,54110=>1000,54111=>1000,54112=>1000,54113=>1000,54114=>1000,54115=>1000,54116=>1000,54117=>1000,54118=>1000,54119=>1000,54120=>1000,54121=>1000,54122=>1000,54123=>1000,54124=>1000,54125=>1000,54126=>1000,54127=>1000,54128=>1000,54129=>1000,54130=>1000,54131=>1000,54132=>1000,54133=>1000,54134=>1000,54135=>1000,54136=>1000,54137=>1000,54138=>1000,54139=>1000,54140=>1000,54141=>1000,54142=>1000,54143=>1000,54144=>1000,54145=>1000,54146=>1000,54147=>1000,54148=>1000,54149=>1000,54150=>1000,54151=>1000,54152=>1000,54153=>1000,54154=>1000,54155=>1000,54156=>1000,54157=>1000,54158=>1000,54159=>1000,54160=>1000,54161=>1000,54162=>1000,54163=>1000,54164=>1000,54165=>1000,54166=>1000,54167=>1000,54168=>1000,54169=>1000,54170=>1000,54171=>1000,54172=>1000,54173=>1000,54174=>1000,54175=>1000,54176=>1000,54177=>1000,54178=>1000,54179=>1000,54180=>1000,54181=>1000,54182=>1000,54183=>1000,54184=>1000,54185=>1000,54186=>1000,54187=>1000,54188=>1000,54189=>1000,54190=>1000,54191=>1000,54192=>1000,54193=>1000,54194=>1000,54195=>1000,54196=>1000,54197=>1000,54198=>1000,54199=>1000,54200=>1000,54201=>1000,54202=>1000,54203=>1000,54204=>1000,54205=>1000,54206=>1000,54207=>1000,54208=>1000,54209=>1000,54210=>1000,54211=>1000,54212=>1000,54213=>1000,54214=>1000,54215=>1000,54216=>1000,54217=>1000,54218=>1000,54219=>1000,54220=>1000,54221=>1000,54222=>1000,54223=>1000,54224=>1000,54225=>1000,54226=>1000,54227=>1000,54228=>1000,54229=>1000,54230=>1000,54231=>1000,54232=>1000,54233=>1000,54234=>1000,54235=>1000,54236=>1000,54237=>1000,54238=>1000,54239=>1000,54240=>1000,54241=>1000,54242=>1000,54243=>1000,54244=>1000,54245=>1000,54246=>1000,54247=>1000,54248=>1000,54249=>1000,54250=>1000,54251=>1000,54252=>1000,54253=>1000,54254=>1000,54255=>1000,54256=>1000,54257=>1000,54258=>1000,54259=>1000,54260=>1000,54261=>1000,54262=>1000,54263=>1000,54264=>1000,54265=>1000,54266=>1000,54267=>1000,54268=>1000,54269=>1000,54270=>1000,54271=>1000,54272=>1000,54273=>1000,54274=>1000,54275=>1000,54276=>1000,54277=>1000,54278=>1000,54279=>1000,54280=>1000,54281=>1000,54282=>1000,54283=>1000,54284=>1000,54285=>1000,54286=>1000,54287=>1000,54288=>1000,54289=>1000,54290=>1000,54291=>1000,54292=>1000,54293=>1000,54294=>1000,54295=>1000,54296=>1000,54297=>1000,54298=>1000,54299=>1000,54300=>1000,54301=>1000,54302=>1000,54303=>1000,54304=>1000,54305=>1000,54306=>1000,54307=>1000,54308=>1000,54309=>1000,54310=>1000,54311=>1000,54312=>1000,54313=>1000,54314=>1000,54315=>1000,54316=>1000,54317=>1000,54318=>1000,54319=>1000,54320=>1000,54321=>1000,54322=>1000,54323=>1000,54324=>1000,54325=>1000,54326=>1000,54327=>1000,54328=>1000,54329=>1000,54330=>1000,54331=>1000,54332=>1000,54333=>1000,54334=>1000,54335=>1000,54336=>1000,54337=>1000,54338=>1000,54339=>1000,54340=>1000,54341=>1000,54342=>1000,54343=>1000,54344=>1000,54345=>1000,54346=>1000,54347=>1000,54348=>1000,54349=>1000,54350=>1000,54351=>1000,54352=>1000,54353=>1000,54354=>1000,54355=>1000,54356=>1000,54357=>1000,54358=>1000,54359=>1000,54360=>1000,54361=>1000,54362=>1000,54363=>1000,54364=>1000,54365=>1000,54366=>1000,54367=>1000,54368=>1000,54369=>1000,54370=>1000,54371=>1000,54372=>1000,54373=>1000,54374=>1000,54375=>1000,54376=>1000,54377=>1000,54378=>1000,54379=>1000,54380=>1000,54381=>1000,54382=>1000,54383=>1000,54384=>1000,54385=>1000,54386=>1000,54387=>1000,54388=>1000,54389=>1000,54390=>1000,54391=>1000,54392=>1000,54393=>1000,54394=>1000,54395=>1000,54396=>1000,54397=>1000,54398=>1000,54399=>1000,54400=>1000,54401=>1000,54402=>1000,54403=>1000,54404=>1000,54405=>1000,54406=>1000,54407=>1000,54408=>1000,54409=>1000,54410=>1000,54411=>1000,54412=>1000,54413=>1000,54414=>1000,54415=>1000,54416=>1000,54417=>1000,54418=>1000,54419=>1000,54420=>1000,54421=>1000,54422=>1000,54423=>1000,54424=>1000,54425=>1000,54426=>1000,54427=>1000,54428=>1000,54429=>1000,54430=>1000,54431=>1000,54432=>1000,54433=>1000,54434=>1000,54435=>1000,54436=>1000,54437=>1000,54438=>1000,54439=>1000,54440=>1000,54441=>1000,54442=>1000,54443=>1000,54444=>1000,54445=>1000,54446=>1000,54447=>1000,54448=>1000,54449=>1000,54450=>1000,54451=>1000,54452=>1000,54453=>1000,54454=>1000,54455=>1000,54456=>1000,54457=>1000,54458=>1000,54459=>1000,54460=>1000,54461=>1000,54462=>1000,54463=>1000,54464=>1000,54465=>1000,54466=>1000,54467=>1000,54468=>1000,54469=>1000,54470=>1000,54471=>1000,54472=>1000,54473=>1000,54474=>1000,54475=>1000,54476=>1000,54477=>1000,54478=>1000,54479=>1000,54480=>1000,54481=>1000,54482=>1000,54483=>1000,54484=>1000,54485=>1000,54486=>1000,54487=>1000,54488=>1000,54489=>1000,54490=>1000,54491=>1000,54492=>1000,54493=>1000,54494=>1000,54495=>1000,54496=>1000,54497=>1000,54498=>1000,54499=>1000,54500=>1000,54501=>1000,54502=>1000,54503=>1000,54504=>1000,54505=>1000,54506=>1000,54507=>1000,54508=>1000,54509=>1000,54510=>1000,54511=>1000,54512=>1000,54513=>1000,54514=>1000,54515=>1000,54516=>1000,54517=>1000,54518=>1000,54519=>1000,54520=>1000,54521=>1000,54522=>1000,54523=>1000,54524=>1000,54525=>1000,54526=>1000,54527=>1000,54528=>1000,54529=>1000,54530=>1000,54531=>1000,54532=>1000,54533=>1000,54534=>1000,54535=>1000,54536=>1000,54537=>1000,54538=>1000,54539=>1000,54540=>1000,54541=>1000,54542=>1000,54543=>1000,54544=>1000,54545=>1000,54546=>1000,54547=>1000,54548=>1000,54549=>1000,54550=>1000,54551=>1000,54552=>1000,54553=>1000,54554=>1000,54555=>1000,54556=>1000,54557=>1000,54558=>1000,54559=>1000,54560=>1000,54561=>1000,54562=>1000,54563=>1000,54564=>1000,54565=>1000,54566=>1000,54567=>1000,54568=>1000,54569=>1000,54570=>1000,54571=>1000,54572=>1000,54573=>1000,54574=>1000,54575=>1000,54576=>1000,54577=>1000,54578=>1000,54579=>1000,54580=>1000,54581=>1000,54582=>1000,54583=>1000,54584=>1000,54585=>1000,54586=>1000,54587=>1000,54588=>1000,54589=>1000,54590=>1000,54591=>1000,54592=>1000,54593=>1000,54594=>1000,54595=>1000,54596=>1000,54597=>1000,54598=>1000,54599=>1000,54600=>1000,54601=>1000,54602=>1000,54603=>1000,54604=>1000,54605=>1000,54606=>1000,54607=>1000,54608=>1000,54609=>1000,54610=>1000,54611=>1000,54612=>1000,54613=>1000,54614=>1000,54615=>1000,54616=>1000,54617=>1000,54618=>1000,54619=>1000,54620=>1000,54621=>1000,54622=>1000,54623=>1000,54624=>1000,54625=>1000,54626=>1000,54627=>1000,54628=>1000,54629=>1000,54630=>1000,54631=>1000,54632=>1000,54633=>1000,54634=>1000,54635=>1000,54636=>1000,54637=>1000,54638=>1000,54639=>1000,54640=>1000,54641=>1000,54642=>1000,54643=>1000,54644=>1000,54645=>1000,54646=>1000,54647=>1000,54648=>1000,54649=>1000,54650=>1000,54651=>1000,54652=>1000,54653=>1000,54654=>1000,54655=>1000,54656=>1000,54657=>1000,54658=>1000,54659=>1000,54660=>1000,54661=>1000,54662=>1000,54663=>1000,54664=>1000,54665=>1000,54666=>1000,54667=>1000,54668=>1000,54669=>1000,54670=>1000,54671=>1000,54672=>1000,54673=>1000,54674=>1000,54675=>1000,54676=>1000,54677=>1000,54678=>1000,54679=>1000,54680=>1000,54681=>1000,54682=>1000,54683=>1000,54684=>1000,54685=>1000,54686=>1000,54687=>1000,54688=>1000,54689=>1000,54690=>1000,54691=>1000,54692=>1000,54693=>1000,54694=>1000,54695=>1000,54696=>1000,54697=>1000,54698=>1000,54699=>1000,54700=>1000,54701=>1000,54702=>1000,54703=>1000,54704=>1000,54705=>1000,54706=>1000,54707=>1000,54708=>1000,54709=>1000,54710=>1000,54711=>1000,54712=>1000,54713=>1000,54714=>1000,54715=>1000,54716=>1000,54717=>1000,54718=>1000,54719=>1000,54720=>1000,54721=>1000,54722=>1000,54723=>1000,54724=>1000,54725=>1000,54726=>1000,54727=>1000,54728=>1000,54729=>1000,54730=>1000,54731=>1000,54732=>1000,54733=>1000,54734=>1000,54735=>1000,54736=>1000,54737=>1000,54738=>1000,54739=>1000,54740=>1000,54741=>1000,54742=>1000,54743=>1000,54744=>1000,54745=>1000,54746=>1000,54747=>1000,54748=>1000,54749=>1000,54750=>1000,54751=>1000,54752=>1000,54753=>1000,54754=>1000,54755=>1000,54756=>1000,54757=>1000,54758=>1000,54759=>1000,54760=>1000,54761=>1000,54762=>1000,54763=>1000,54764=>1000,54765=>1000,54766=>1000,54767=>1000,54768=>1000,54769=>1000,54770=>1000,54771=>1000,54772=>1000,54773=>1000,54774=>1000,54775=>1000,54776=>1000,54777=>1000,54778=>1000,54779=>1000,54780=>1000,54781=>1000,54782=>1000,54783=>1000,54784=>1000,54785=>1000,54786=>1000,54787=>1000,54788=>1000,54789=>1000,54790=>1000,54791=>1000,54792=>1000,54793=>1000,54794=>1000,54795=>1000,54796=>1000,54797=>1000,54798=>1000,54799=>1000,54800=>1000,54801=>1000,54802=>1000,54803=>1000,54804=>1000,54805=>1000,54806=>1000,54807=>1000,54808=>1000,54809=>1000,54810=>1000,54811=>1000,54812=>1000,54813=>1000,54814=>1000,54815=>1000,54816=>1000,54817=>1000,54818=>1000,54819=>1000,54820=>1000,54821=>1000,54822=>1000,54823=>1000,54824=>1000,54825=>1000,54826=>1000,54827=>1000,54828=>1000,54829=>1000,54830=>1000,54831=>1000,54832=>1000,54833=>1000,54834=>1000,54835=>1000,54836=>1000,54837=>1000,54838=>1000,54839=>1000,54840=>1000,54841=>1000,54842=>1000,54843=>1000,54844=>1000,54845=>1000,54846=>1000,54847=>1000,54848=>1000,54849=>1000,54850=>1000,54851=>1000,54852=>1000,54853=>1000,54854=>1000,54855=>1000,54856=>1000,54857=>1000,54858=>1000,54859=>1000,54860=>1000,54861=>1000,54862=>1000,54863=>1000,54864=>1000,54865=>1000,54866=>1000,54867=>1000,54868=>1000,54869=>1000,54870=>1000,54871=>1000,54872=>1000,54873=>1000,54874=>1000,54875=>1000,54876=>1000,54877=>1000,54878=>1000,54879=>1000,54880=>1000,54881=>1000,54882=>1000,54883=>1000,54884=>1000,54885=>1000,54886=>1000,54887=>1000,54888=>1000,54889=>1000,54890=>1000,54891=>1000,54892=>1000,54893=>1000,54894=>1000,54895=>1000,54896=>1000,54897=>1000,54898=>1000,54899=>1000,54900=>1000,54901=>1000,54902=>1000,54903=>1000,54904=>1000,54905=>1000,54906=>1000,54907=>1000,54908=>1000,54909=>1000,54910=>1000,54911=>1000,54912=>1000,54913=>1000,54914=>1000,54915=>1000,54916=>1000,54917=>1000,54918=>1000,54919=>1000,54920=>1000,54921=>1000,54922=>1000,54923=>1000,54924=>1000,54925=>1000,54926=>1000,54927=>1000,54928=>1000,54929=>1000,54930=>1000,54931=>1000,54932=>1000,54933=>1000,54934=>1000,54935=>1000,54936=>1000,54937=>1000,54938=>1000,54939=>1000,54940=>1000,54941=>1000,54942=>1000,54943=>1000,54944=>1000,54945=>1000,54946=>1000,54947=>1000,54948=>1000,54949=>1000,54950=>1000,54951=>1000,54952=>1000,54953=>1000,54954=>1000,54955=>1000,54956=>1000,54957=>1000,54958=>1000,54959=>1000,54960=>1000,54961=>1000,54962=>1000,54963=>1000,54964=>1000,54965=>1000,54966=>1000,54967=>1000,54968=>1000,54969=>1000,54970=>1000,54971=>1000,54972=>1000,54973=>1000,54974=>1000,54975=>1000,54976=>1000,54977=>1000,54978=>1000,54979=>1000,54980=>1000,54981=>1000,54982=>1000,54983=>1000,54984=>1000,54985=>1000,54986=>1000,54987=>1000,54988=>1000,54989=>1000,54990=>1000,54991=>1000,54992=>1000,54993=>1000,54994=>1000,54995=>1000,54996=>1000,54997=>1000,54998=>1000,54999=>1000,55000=>1000,55001=>1000,55002=>1000,55003=>1000,55004=>1000,55005=>1000,55006=>1000,55007=>1000,55008=>1000,55009=>1000,55010=>1000,55011=>1000,55012=>1000,55013=>1000,55014=>1000,55015=>1000,55016=>1000,55017=>1000,55018=>1000,55019=>1000,55020=>1000,55021=>1000,55022=>1000,55023=>1000,55024=>1000,55025=>1000,55026=>1000,55027=>1000,55028=>1000,55029=>1000,55030=>1000,55031=>1000,55032=>1000,55033=>1000,55034=>1000,55035=>1000,55036=>1000,55037=>1000,55038=>1000,55039=>1000,55040=>1000,55041=>1000,55042=>1000,55043=>1000,55044=>1000,55045=>1000,55046=>1000,55047=>1000,55048=>1000,55049=>1000,55050=>1000,55051=>1000,55052=>1000,55053=>1000,55054=>1000,55055=>1000,55056=>1000,55057=>1000,55058=>1000,55059=>1000,55060=>1000,55061=>1000,55062=>1000,55063=>1000,55064=>1000,55065=>1000,55066=>1000,55067=>1000,55068=>1000,55069=>1000,55070=>1000,55071=>1000,55072=>1000,55073=>1000,55074=>1000,55075=>1000,55076=>1000,55077=>1000,55078=>1000,55079=>1000,55080=>1000,55081=>1000,55082=>1000,55083=>1000,55084=>1000,55085=>1000,55086=>1000,55087=>1000,55088=>1000,55089=>1000,55090=>1000,55091=>1000,55092=>1000,55093=>1000,55094=>1000,55095=>1000,55096=>1000,55097=>1000,55098=>1000,55099=>1000,55100=>1000,55101=>1000,55102=>1000,55103=>1000,55104=>1000,55105=>1000,55106=>1000,55107=>1000,55108=>1000,55109=>1000,55110=>1000,55111=>1000,55112=>1000,55113=>1000,55114=>1000,55115=>1000,55116=>1000,55117=>1000,55118=>1000,55119=>1000,55120=>1000,55121=>1000,55122=>1000,55123=>1000,55124=>1000,55125=>1000,55126=>1000,55127=>1000,55128=>1000,55129=>1000,55130=>1000,55131=>1000,55132=>1000,55133=>1000,55134=>1000,55135=>1000,55136=>1000,55137=>1000,55138=>1000,55139=>1000,55140=>1000,55141=>1000,55142=>1000,55143=>1000,55144=>1000,55145=>1000,55146=>1000,55147=>1000,55148=>1000,55149=>1000,55150=>1000,55151=>1000,55152=>1000,55153=>1000,55154=>1000,55155=>1000,55156=>1000,55157=>1000,55158=>1000,55159=>1000,55160=>1000,55161=>1000,55162=>1000,55163=>1000,55164=>1000,55165=>1000,55166=>1000,55167=>1000,55168=>1000,55169=>1000,55170=>1000,55171=>1000,55172=>1000,55173=>1000,55174=>1000,55175=>1000,55176=>1000,55177=>1000,55178=>1000,55179=>1000,55180=>1000,55181=>1000,55182=>1000,55183=>1000,55184=>1000,55185=>1000,55186=>1000,55187=>1000,55188=>1000,55189=>1000,55190=>1000,55191=>1000,55192=>1000,55193=>1000,55194=>1000,55195=>1000,55196=>1000,55197=>1000,55198=>1000,55199=>1000,55200=>1000,55201=>1000,55202=>1000,55203=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500,63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849,63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000,63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000,63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000,63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000,63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000,63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000,63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000,63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000,63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000,63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000,63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000,63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000,63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000,63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000,63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000,63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000,63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000,64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000,64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000,64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750,64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730,64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326,64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316,64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788,64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903,64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658,64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436,64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942,64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706,64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466,64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783,64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731,64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932,64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429,64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227,64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073,64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932,64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421,64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884,64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274,64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884,64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911,64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179,64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224,64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806,64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911,64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082,64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574,64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411,64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441,64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254,64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273,64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046,64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944,64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759,64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757,64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686,64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686,64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080,64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130,65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000,65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000,65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200,65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300,65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273,65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243,65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658,65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194,65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843,65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903,65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640,65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803,65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000,65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000,65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000,65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000,65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000,65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000,65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500,65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500,65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500,65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500,65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500,65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500,65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500,65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000,65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,65535=>1000); +// --- EOF --- diff --git a/tcpdf/fonts/cid0ct.php b/tcpdf/fonts/cid0ct.php new file mode 100644 index 0000000..387113b --- /dev/null +++ b/tcpdf/fonts/cid0ct.php @@ -0,0 +1,17 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='cidfont0'; +$name='cid0ct'; +$up=-100; +$ut=50; +$dw=1000; +$diff=''; +$originalsize=23275812; +// Chinese Traditional +$enc='UniCNS-UTF16-H'; +$cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'CNS1','Supplement'=>0); +include(dirname(__FILE__).'/uni2cid_aj16.php'); +$desc=array('Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'Ascent'=>1069,'Descent'=>-271,'Leading'=>0,'CapHeight'=>716,'XHeight'=>518,'StemV'=>34,'StemH'=>15,'AvgWidth'=>441,'MaxWidth'=>2259,'MissingWidth'=>1000); +$cbbox=array(0=>array(125,0,875,750),33=>array(85,0,194,716),34=>array(41,462,313,716),35=>array(11,-12,545,728),36=>array(38,-103,511,782),37=>array(73,-27,819,728),38=>array(43,-17,644,728),39=>array(45,462,145,716),40=>array(60,-210,297,728),41=>array(36,-210,273,728),42=>array(33,423,356,728),43=>array(55,116,529,590),44=>array(84,-141,190,100),45=>array(32,215,301,303),46=>array(89,0,189,100),47=>array(0,-24,278,716),48=>array(45,-12,511,719),49=>array(111,0,375,719),50=>array(31,0,505,719),51=>array(44,-12,513,719),52=>array(15,0,510,716),53=>array(42,-12,516,706),54=>array(42,-12,514,719),55=>array(48,0,511,706),56=>array(42,-12,513,719),57=>array(43,-12,513,719),58=>array(90,0,190,518),59=>array(84,-141,190,518),60=>array(55,111,529,595),61=>array(55,203,529,503),62=>array(55,111,529,595),63=>array(46,0,508,728),64=>array(56,-210,981,729),65=>array(-1,0,668,716),66=>array(74,0,615,716),67=>array(51,-12,683,728),68=>array(80,0,672,716),69=>array(79,0,614,716),70=>array(80,0,563,716),71=>array(52,-12,714,728),72=>array(80,0,642,716),73=>array(92,0,187,716),74=>array(27,-12,420,716),75=>array(73,0,665,716),76=>array(75,0,523,716),77=>array(76,0,757,716),78=>array(79,0,642,716),79=>array(47,-12,732,728),80=>array(77,0,623,716),81=>array(47,-56,745,728),82=>array(80,0,711,716),83=>array(45,-12,615,728),84=>array(22,0,589,716),85=>array(79,-12,642,716),86=>array(6,0,660,716),87=>array(12,0,933,716),88=>array(5,0,661,716),89=>array(5,0,661,716),90=>array(18,0,584,716),91=>array(68,-199,262,716),92=>array(0,-24,278,716),93=>array(16,-199,210,716),94=>array(26,325,443,716),95=>array(-6,-125,506,-75),96=>array(42,591,222,728),97=>array(38,-12,516,530),98=>array(67,-12,517,716),99=>array(39,-12,491,530),100=>array(36,-12,486,716),101=>array(39,-12,517,530),102=>array(8,0,311,728),103=>array(34,-210,491,530),104=>array(67,0,490,716),105=>array(67,0,155,716),106=>array(-45,-209,155,716),107=>array(66,0,496,716),108=>array(67,0,155,716),109=>array(65,0,769,530),110=>array(68,0,490,530),111=>array(35,-12,521,530),112=>array(68,-199,518,530),113=>array(38,-199,488,530),114=>array(64,0,346,530),115=>array(31,-12,461,530),116=>array(17,-7,269,700),117=>array(66,-12,487,518),118=>array(13,0,488,518),119=>array(5,0,717,518),120=>array(7,0,493,518),121=>array(16,-210,492,518),122=>array(20,0,479,518),123=>array(28,-210,310,728),124=>array(92,-199,168,716),125=>array(24,-210,306,728),126=>array(43,272,542,432),161=>array(110,-199,219,517),162=>array(55,-200,507,716),163=>array(15,-14,531,728),164=>array(38,115,518,594),165=>array(1,0,555,716),166=>array(92,-199,168,716),167=>array(42,-210,513,728),168=>array(31,611,302,711),169=>array(0,-9,737,728),170=>array(21,364,348,728),171=>array(69,35,487,481),172=>array(55,203,529,503),173=>array(32,215,301,303),174=>array(0,-9,737,728),175=>array(-6,793,506,843),176=>array(65,454,335,725),177=>array(55,0,529,611),178=>array(12,358,316,725),179=>array(16,349,315,725),180=>array(111,591,291,728),181=>array(67,-199,488,518),182=>array(-1,-199,539,716),183=>array(89,302,189,402),184=>array(52,-205,263,11),185=>array(52,358,232,725),186=>array(22,361,343,728),187=>array(69,35,487,481),188=>array(62,-25,789,732),189=>array(62,-25,806,732),190=>array(26,-25,789,732),191=>array(75,-209,537,519),192=>array(-1,0,668,900),193=>array(-1,0,668,900),194=>array(-1,0,668,900),195=>array(-1,0,668,886),196=>array(-1,0,668,881),197=>array(-1,0,668,920),198=>array(0,0,945,716),199=>array(51,-209,684,728),200=>array(79,0,614,900),201=>array(79,0,614,900),202=>array(79,0,614,900),203=>array(79,0,614,881),204=>array(15,0,195,900),205=>array(83,0,264,900),206=>array(-15,0,293,900),207=>array(3,0,274,881),208=>array(1,0,672,716),209=>array(79,0,642,884),210=>array(47,-12,732,900),211=>array(47,-12,732,900),212=>array(47,-12,732,900),213=>array(47,-12,732,884),214=>array(47,-12,732,881),215=>array(79,141,505,567),216=>array(41,-29,742,742),217=>array(79,-12,642,900),218=>array(79,-12,642,900),219=>array(79,-12,642,900),220=>array(79,-12,642,881),221=>array(5,0,661,900),222=>array(77,0,623,716),223=>array(72,-12,577,728),224=>array(38,-12,516,728),225=>array(38,-12,516,728),226=>array(38,-12,516,728),227=>array(38,-12,516,716),228=>array(38,-12,516,711),229=>array(38,-12,516,752),230=>array(34,-12,849,530),231=>array(39,-196,491,530),232=>array(39,-12,517,728),233=>array(39,-12,517,728),234=>array(39,-12,517,728),235=>array(39,-12,517,711),236=>array(13,0,193,728),237=>array(83,0,264,728),238=>array(-15,0,293,728),239=>array(5,0,276,711),240=>array(38,-12,517,716),241=>array(68,0,490,716),242=>array(35,-12,521,728),243=>array(35,-12,521,728),244=>array(35,-12,521,728),245=>array(35,-12,521,716),246=>array(35,-12,521,711),247=>array(55,146,529,560),248=>array(63,-39,549,550),249=>array(66,-12,487,728),250=>array(66,-12,487,728),251=>array(66,-12,487,728),252=>array(66,-12,487,711),253=>array(16,-210,492,728),254=>array(68,-199,518,716),255=>array(16,-210,492,711),256=>array(-1,0,668,833),257=>array(38,-12,516,697),258=>array(-1,0,668,888),259=>array(38,-12,516,722),260=>array(-1,-208,758,716),261=>array(38,-208,571,530),262=>array(51,-12,683,916),263=>array(39,-12,491,728),264=>array(51,-12,683,914),265=>array(39,-12,491,728),266=>array(51,-12,683,877),267=>array(39,-12,491,711),268=>array(51,-12,683,916),269=>array(39,-12,491,728),270=>array(80,0,672,916),271=>array(36,-12,625,716),272=>array(-1,0,672,716),273=>array(36,-12,551,716),274=>array(79,0,614,863),275=>array(39,-12,517,697),276=>array(79,0,614,902),277=>array(39,-12,517,722),278=>array(79,0,614,877),279=>array(39,-12,517,711),280=>array(79,-208,645,716),281=>array(39,-208,517,530),282=>array(79,0,614,916),283=>array(39,-12,517,728),284=>array(52,-12,714,914),285=>array(34,-210,491,728),286=>array(52,-12,714,904),287=>array(34,-210,491,722),288=>array(52,-12,714,877),289=>array(34,-210,491,711),290=>array(52,-210,714,728),291=>array(34,-210,491,775),292=>array(80,0,642,914),293=>array(67,0,490,914),294=>array(-1,0,722,716),295=>array(2,0,490,716),296=>array(-24,0,303,890),297=>array(-53,0,274,717),298=>array(-15,0,290,849),299=>array(-42,0,263,697),300=>array(-3,0,286,904),301=>array(-34,0,255,722),302=>array(91,-208,305,716),303=>array(45,-208,225,716),304=>array(92,0,187,877),305=>array(95,0,183,518),306=>array(92,-12,670,716),307=>array(67,-209,377,716),308=>array(27,-12,526,914),309=>array(-46,-209,263,728),310=>array(73,-210,665,716),311=>array(66,-210,496,716),312=>array(66,0,446,518),313=>array(75,0,523,916),314=>array(50,0,230,916),315=>array(75,-210,523,716),316=>array(58,-210,160,716),317=>array(-29,0,523,916),318=>array(-44,0,264,916),319=>array(75,0,523,716),320=>array(67,0,313,716),321=>array(0,0,521,716),322=>array(1,0,218,716),323=>array(79,0,642,916),324=>array(68,0,490,728),325=>array(79,-210,642,716),326=>array(68,-210,490,530),327=>array(79,0,642,916),328=>array(68,0,490,728),329=>array(-2,0,559,722),330=>array(81,-186,670,728),331=>array(68,-210,489,530),332=>array(47,-12,732,849),333=>array(35,-12,521,697),334=>array(47,-12,732,904),335=>array(35,-12,521,722),336=>array(47,-12,732,914),337=>array(35,-12,521,728),338=>array(63,-12,968,728),339=>array(38,-12,904,530),340=>array(80,0,711,914),341=>array(64,0,346,728),342=>array(80,-210,711,716),343=>array(54,-210,346,530),344=>array(80,0,711,916),345=>array(28,0,346,728),346=>array(45,-12,615,916),347=>array(31,-12,461,728),348=>array(45,-12,615,916),349=>array(31,-12,461,728),350=>array(45,-210,615,728),351=>array(31,-210,461,530),352=>array(45,-12,615,916),353=>array(31,-12,461,728),354=>array(22,-210,589,716),355=>array(17,-210,269,700),356=>array(22,0,589,916),357=>array(17,-7,406,716),358=>array(22,0,589,716),359=>array(17,-7,269,700),360=>array(79,-12,642,890),361=>array(66,-12,487,716),362=>array(79,-12,642,851),363=>array(66,-12,487,697),364=>array(79,-12,642,906),365=>array(66,-12,487,722),366=>array(79,-12,642,955),367=>array(66,-12,487,752),368=>array(79,-12,642,917),369=>array(66,-12,487,728),370=>array(79,-208,642,716),371=>array(66,-208,555,518),372=>array(12,0,933,916),373=>array(5,0,717,728),374=>array(5,0,661,916),375=>array(16,-210,492,728),376=>array(5,0,661,879),377=>array(18,0,584,916),378=>array(20,0,479,728),379=>array(18,0,584,877),380=>array(20,0,479,711),381=>array(18,0,584,916),382=>array(20,0,479,728),383=>array(67,0,292,728),384=>array(-14,-12,515,716),385=>array(0,0,688,716),386=>array(80,0,620,716),387=>array(65,-12,515,716),388=>array(67,-12,517,716),389=>array(67,-12,517,716),390=>array(39,-12,671,728),391=>array(51,-12,769,750),392=>array(39,-12,579,567),393=>array(1,0,672,716),394=>array(0,0,739,716),395=>array(35,0,575,716),396=>array(41,-12,491,716),397=>array(35,-198,522,530),398=>array(53,0,588,716),399=>array(45,-12,676,728),400=>array(42,-13,565,728),401=>array(-20,-154,563,716),402=>array(-14,-154,311,728),403=>array(52,-12,792,750),404=>array(0,-206,649,716),405=>array(67,-12,775,716),406=>array(67,-12,245,716),407=>array(0,0,322,716),408=>array(73,0,690,720),409=>array(66,0,496,728),410=>array(0,-12,322,716),411=>array(13,0,488,716),412=>array(65,-12,769,716),413=>array(-21,-154,642,716),414=>array(68,-199,490,530),415=>array(47,-12,732,728),416=>array(47,-12,776,768),417=>array(35,-12,555,606),418=>array(47,-12,950,728),419=>array(35,-209,715,530),420=>array(0,0,691,716),421=>array(68,-199,519,637),422=>array(80,-122,738,716),423=>array(52,-12,622,728),424=>array(39,-12,469,530),425=>array(47,0,554,716),426=>array(34,-154,405,734),427=>array(17,-151,269,700),428=>array(23,0,549,716),429=>array(17,-7,269,716),430=>array(22,-208,589,716),431=>array(79,-12,776,768),432=>array(66,-12,625,620),433=>array(67,-12,681,716),434=>array(6,0,620,728),435=>array(32,0,745,728),436=>array(16,-210,617,528),437=>array(18,0,584,716),438=>array(20,0,479,519),439=>array(40,-12,582,716),440=>array(46,-12,588,716),441=>array(42,-192,486,518),442=>array(36,-209,437,518),443=>array(31,0,505,728),444=>array(13,-12,516,716),445=>array(37,-12,486,518),446=>array(46,-10,508,716),447=>array(68,-199,498,529),448=>array(92,0,168,716),449=>array(92,0,372,716),450=>array(25,0,449,716),451=>array(85,0,194,716),452=>array(80,0,1303,896),453=>array(80,0,1202,728),454=>array(36,-12,1036,728),455=>array(75,-12,949,716),456=>array(75,-209,709,716),457=>array(67,-209,375,716),458=>array(79,-12,1141,716),459=>array(79,-209,875,716),460=>array(68,-209,709,716),461=>array(-1,0,668,900),462=>array(38,-12,516,728),463=>array(-17,0,292,900),464=>array(-18,0,291,728),465=>array(47,-12,732,900),466=>array(35,-12,521,728),467=>array(79,-12,642,900),468=>array(66,-12,487,728),469=>array(79,-12,642,1003),470=>array(66,-12,487,832),471=>array(79,-12,642,1068),472=>array(66,-12,487,896),473=>array(79,-12,642,1068),474=>array(66,-12,487,896),475=>array(79,-12,642,1068),476=>array(66,-12,487,896),477=>array(39,-11,517,530),478=>array(-1,0,668,1003),479=>array(38,-12,516,832),480=>array(-1,0,668,1003),481=>array(38,-12,516,832),482=>array(0,0,945,865),483=>array(34,-12,849,697),484=>array(52,-12,779,728),485=>array(34,-210,556,530),486=>array(52,-12,714,900),487=>array(34,-210,491,728),488=>array(73,0,665,900),489=>array(66,0,496,900),490=>array(47,-208,732,728),491=>array(33,-208,519,530),492=>array(47,-208,732,865),493=>array(33,-208,519,697),494=>array(48,6,492,898),495=>array(48,-192,492,728),496=>array(-48,-209,261,728),497=>array(80,0,1301,716),498=>array(80,0,1200,716),499=>array(36,-12,1034,716),500=>array(52,-12,714,900),501=>array(34,-210,491,728),506=>array(-1,0,668,1043),507=>array(38,-12,516,937),508=>array(0,0,945,898),509=>array(34,-12,849,728),510=>array(41,-29,742,898),511=>array(63,-39,549,728),512=>array(-1,0,668,894),513=>array(38,-12,516,728),514=>array(-1,0,668,888),515=>array(38,-12,516,722),516=>array(79,0,614,894),517=>array(39,-12,517,728),518=>array(79,0,614,888),519=>array(39,-12,517,722),520=>array(-55,0,291,894),521=>array(-53,0,292,728),522=>array(-3,0,286,888),523=>array(-5,0,284,722),524=>array(47,-12,732,894),525=>array(35,-12,521,728),526=>array(47,-12,732,888),527=>array(35,-12,521,722),528=>array(80,0,711,894),529=>array(14,0,359,728),530=>array(80,0,711,888),531=>array(38,0,346,722),532=>array(79,-12,642,894),533=>array(66,-12,487,728),534=>array(79,-12,642,888),535=>array(66,-12,487,722),592=>array(40,-12,518,530),593=>array(36,-12,486,530),594=>array(70,-12,520,530),595=>array(70,-12,520,716),596=>array(9,-12,461,530),597=>array(39,-91,482,530),598=>array(36,-210,611,716),599=>array(36,-12,611,716),600=>array(39,-12,522,530),601=>array(39,-12,517,530),602=>array(41,-12,772,530),603=>array(36,-12,450,530),604=>array(35,-12,449,530),605=>array(35,-12,701,530),606=>array(36,-12,483,530),607=>array(-51,-210,252,518),608=>array(34,-210,616,716),609=>array(34,-210,491,530),610=>array(36,-12,518,530),611=>array(13,-210,488,518),612=>array(13,-12,488,518),613=>array(66,-198,487,518),614=>array(67,0,490,716),615=>array(67,-210,490,716),616=>array(-2,0,244,716),617=>array(67,-12,280,518),618=>array(33,0,323,518),619=>array(7,0,349,716),620=>array(20,0,403,716),621=>array(67,-210,280,716),622=>array(67,-210,599,716),623=>array(64,-12,768,518),624=>array(64,-209,768,518),625=>array(65,-210,769,530),626=>array(-57,-210,490,530),627=>array(68,-210,615,530),628=>array(68,0,490,518),629=>array(35,-12,521,530),630=>array(36,-12,690,530),631=>array(36,-12,638,530),632=>array(36,-210,522,716),633=>array(-13,-12,269,518),634=>array(-13,-12,269,716),635=>array(-13,-210,394,518),636=>array(64,-198,346,530),637=>array(64,-210,346,530),638=>array(64,0,326,530),639=>array(-14,0,248,530),640=>array(64,0,518,518),641=>array(64,0,518,518),642=>array(31,-208,461,530),643=>array(-83,-210,299,716),644=>array(-53,-210,329,716),645=>array(-83,-210,299,716),646=>array(-125,-198,302,716),647=>array(9,-177,261,530),648=>array(17,-210,294,700),649=>array(20,-12,576,518),650=>array(36,-12,522,518),651=>array(66,-12,520,530),652=>array(13,0,488,518),653=>array(5,0,717,518),654=>array(8,0,484,728),655=>array(2,0,498,518),656=>array(20,-208,653,518),657=>array(20,-79,542,518),658=>array(22,-210,494,518),659=>array(26,-210,494,518),660=>array(16,0,428,728),661=>array(36,0,448,728),662=>array(16,-12,428,716),663=>array(39,-210,491,530),664=>array(36,-12,578,530),665=>array(74,0,496,518),666=>array(36,-12,483,530),667=>array(36,-12,582,616),668=>array(68,0,490,518),669=>array(-125,-198,248,716),670=>array(4,-198,434,518),671=>array(67,0,406,518),672=>array(36,-198,611,716),673=>array(16,0,428,728),674=>array(36,0,448,728),675=>array(36,-12,945,716),676=>array(36,-210,930,716),677=>array(36,-79,1008,716),678=>array(17,-12,650,700),679=>array(17,-210,540,728),680=>array(17,-91,700,700),688=>array(50,344,278,716),689=>array(50,344,278,716),690=>array(-10,235,103,716),691=>array(50,344,210,619),692=>array(-9,338,151,613),693=>array(-9,241,213,613),694=>array(50,344,292,613),695=>array(2,344,386,613),696=>array(8,235,274,613),697=>array(46,462,192,716),698=>array(46,462,342,716),699=>array(64,494,166,728),700=>array(56,482,158,716),701=>array(64,482,166,716),702=>array(44,497,178,716),703=>array(44,497,178,716),704=>array(9,428,230,720),705=>array(20,428,242,720),706=>array(57,423,264,675),707=>array(56,423,263,675),708=>array(34,445,286,652),709=>array(34,446,286,653),710=>array(12,591,321,728),711=>array(12,591,321,728),712=>array(66,506,126,716),713=>array(14,624,319,697),714=>array(111,591,291,728),715=>array(42,591,222,728),716=>array(66,-210,126,0),717=>array(14,-176,319,-113),718=>array(42,-210,222,-73),719=>array(111,-210,291,-73),720=>array(83,0,217,518),721=>array(83,382,217,518),722=>array(44,150,178,369),723=>array(44,150,178,369),724=>array(45,185,295,333),725=>array(45,185,295,333),726=>array(45,164,235,354),727=>array(65,254,297,300),728=>array(22,595,311,722),729=>array(121,611,211,711),730=>array(79,576,255,752),731=>array(89,-208,303,12),732=>array(3,605,330,716),733=>array(28,591,373,728),734=>array(20,195,329,389),736=>array(7,235,271,613),737=>array(50,344,103,716),738=>array(17,338,249,619),739=>array(4,344,271,613),740=>array(25,215,314,724),741=>array(22,0,280,716),742=>array(22,0,280,716),743=>array(22,0,280,716),744=>array(22,0,280,716),745=>array(22,0,280,716),768=>array(-368,591,-188,728),769=>array(-343,591,-163,728),770=>array(-432,591,-124,728),771=>array(-441,605,-114,716),772=>array(-430,624,-125,697),773=>array(-534,624,-22,674),774=>array(-422,595,-133,722),775=>array(-323,611,-233,711),776=>array(-414,611,-143,711),777=>array(-384,722,-172,895),778=>array(-366,574,-190,752),779=>array(-426,591,-81,728),780=>array(-432,591,-124,728),781=>array(-308,591,-248,801),782=>array(-383,591,-173,801),783=>array(-451,591,-105,728),784=>array(-422,595,-133,822),785=>array(-422,595,-133,722),786=>array(-333,591,-231,825),787=>array(-325,579,-223,813),788=>array(-333,579,-231,813),789=>array(7,482,109,716),790=>array(-368,-210,-188,-73),791=>array(-343,-210,-163,-73),792=>array(-337,-252,-219,-62),793=>array(-337,-252,-219,-62),794=>array(-392,591,-164,769),795=>array(-100,330,55,606),796=>array(-326,-210,-230,-40),797=>array(-403,-210,-153,-62),798=>array(-403,-210,-153,-62),799=>array(-373,-252,-183,-62),800=>array(-404,-165,-152,-119),801=>array(-397,-208,-158,20),802=>array(-272,-208,-33,20),803=>array(-323,-210,-233,-110),804=>array(-414,-210,-143,-110),805=>array(-366,-210,-190,-32),806=>array(-325,-210,-223,-46),807=>array(-381,-205,-169,11),808=>array(-326,-208,-112,12),809=>array(-308,-210,-248,-40),810=>array(-407,-190,-148,-77),811=>array(-414,-205,-142,-43),812=>array(-432,-210,-124,-73),813=>array(-432,-210,-124,-73),814=>array(-422,-200,-133,-73),815=>array(-422,-200,-133,-73),816=>array(-441,-185,-114,-72),817=>array(-430,-179,-125,-106),818=>array(-534,-125,-22,-75),819=>array(-534,-210,-22,-55),820=>array(-441,203,-114,316),821=>array(-430,223,-125,296),822=>array(-500,223,-56,296),823=>array(-458,84,-98,434),824=>array(-678,-24,-100,716),825=>array(-311,-210,-216,-40),826=>array(-407,-190,-148,-77),827=>array(-359,-210,-196,-47),828=>array(-414,-186,-142,-83),829=>array(-412,558,-144,790),830=>array(-333,595,-222,922),831=>array(-534,624,-22,779),832=>array(-368,722,-188,859),833=>array(-343,722,-163,859),834=>array(-441,604,-114,717),835=>array(-325,613,-223,847),836=>array(-456,585,-100,720),837=>array(-301,-210,-180,-60),864=>array(-1011,604,-101,716),865=>array(-1000,595,-112,722),884=>array(30,464,301,716),885=>array(30,-132,301,120),890=>array(80,-208,258,-42),894=>array(84,-141,190,518),900=>array(89,600,208,736),901=>array(-27,600,304,736),902=>array(-1,0,668,736),903=>array(89,303,189,403),904=>array(-43,0,651,736),905=>array(-43,0,679,736),906=>array(-43,0,224,736),908=>array(-6,-12,732,736),910=>array(-43,0,740,736),911=>array(-6,0,706,736),912=>array(-56,0,275,736),913=>array(-1,0,668,716),914=>array(74,0,615,716),915=>array(81,0,528,716),916=>array(6,0,675,716),917=>array(79,0,614,716),918=>array(18,0,584,716),919=>array(80,0,642,716),920=>array(47,-12,732,728),921=>array(92,0,187,716),922=>array(73,0,665,716),923=>array(5,0,659,716),924=>array(76,0,757,716),925=>array(79,0,642,716),926=>array(53,0,597,716),927=>array(47,-12,732,728),928=>array(80,0,642,716),929=>array(77,0,623,716),931=>array(47,0,554,716),932=>array(22,0,589,716),933=>array(5,0,661,716),934=>array(47,-26,761,737),935=>array(5,0,661,716),936=>array(46,0,759,716),937=>array(52,0,706,728),938=>array(3,0,274,860),939=>array(5,0,661,860),940=>array(35,-12,541,736),941=>array(29,-12,405,736),942=>array(68,-199,490,736),943=>array(67,0,188,736),944=>array(68,-12,483,736),945=>array(35,-12,541,530),946=>array(66,-199,528,728),947=>array(13,-199,488,518),948=>array(35,-12,522,716),949=>array(29,-12,405,530),950=>array(35,-210,433,716),951=>array(68,-199,490,530),952=>array(45,-12,511,728),953=>array(67,0,155,518),954=>array(65,0,499,518),955=>array(13,0,488,716),956=>array(66,-199,487,518),957=>array(13,0,488,518),958=>array(35,-210,420,728),959=>array(35,-12,521,530),960=>array(16,0,662,518),961=>array(66,-199,536,530),962=>array(35,-210,465,530),963=>array(35,-12,597,534),964=>array(16,0,366,518),965=>array(68,-12,483,518),966=>array(35,-199,614,530),967=>array(7,-199,515,518),968=>array(66,-199,662,518),969=>array(35,-12,731,518),970=>array(-25,0,246,711),971=>array(68,-12,483,711),972=>array(35,-12,521,736),973=>array(68,-12,483,736),974=>array(35,-12,731,736),976=>array(66,-12,528,728),977=>array(23,-12,595,728),978=>array(6,0,627,719),979=>array(-42,0,723,736),980=>array(6,0,627,861),981=>array(35,-199,609,716),982=>array(19,-12,746,518),986=>array(51,-210,671,728),988=>array(80,-209,529,716),990=>array(46,-209,524,728),992=>array(25,-12,645,728),994=>array(80,-209,800,716),995=>array(63,-209,767,518),996=>array(58,0,604,720),997=>array(46,-199,492,521),998=>array(80,-187,626,716),999=>array(25,-13,494,589),1000=>array(46,-12,511,728),1001=>array(48,-196,463,530),1002=>array(3,0,621,716),1003=>array(15,0,591,530),1004=>array(62,-12,596,747),1005=>array(35,-12,597,576),1006=>array(19,0,549,716),1007=>array(11,-196,423,606),1008=>array(20,-11,580,528),1009=>array(66,-209,536,530),1010=>array(39,-12,491,530),1011=>array(-45,-209,155,716),1025=>array(79,0,614,859),1026=>array(25,-11,826,716),1027=>array(80,0,543,869),1028=>array(47,-12,680,728),1029=>array(45,-12,615,728),1030=>array(92,0,187,716),1031=>array(1,0,272,859),1032=>array(27,-12,420,716),1033=>array(9,-11,1070,716),1034=>array(80,0,973,716),1035=>array(24,0,809,716),1036=>array(80,0,580,869),1038=>array(5,-9,633,881),1039=>array(80,-199,643,716),1040=>array(-1,0,668,716),1041=>array(80,0,620,716),1042=>array(74,0,615,716),1043=>array(80,0,543,716),1044=>array(1,-167,642,716),1045=>array(79,0,614,716),1046=>array(3,0,919,716),1047=>array(39,-13,562,728),1048=>array(79,0,643,716),1049=>array(79,0,643,881),1050=>array(80,0,580,717),1051=>array(9,-11,625,716),1052=>array(76,0,757,716),1053=>array(80,0,642,716),1054=>array(47,-12,732,728),1055=>array(80,0,643,716),1056=>array(77,0,623,716),1057=>array(51,-12,683,728),1058=>array(22,0,589,716),1059=>array(5,-9,633,716),1060=>array(40,0,720,716),1061=>array(5,0,661,716),1062=>array(78,-199,706,716),1063=>array(58,0,604,716),1064=>array(80,0,840,716),1065=>array(80,-199,904,716),1066=>array(0,0,757,716),1067=>array(80,0,801,716),1068=>array(80,0,620,716),1069=>array(38,-12,671,728),1070=>array(80,-12,960,728),1071=>array(11,0,642,716),1072=>array(38,-12,516,530),1073=>array(45,-12,532,732),1074=>array(66,0,492,518),1075=>array(66,0,364,518),1076=>array(0,-147,553,518),1077=>array(39,-12,517,530),1078=>array(-3,0,671,518),1079=>array(24,-12,423,530),1080=>array(66,0,493,518),1081=>array(66,0,493,716),1082=>array(66,0,446,518),1083=>array(11,-3,505,518),1084=>array(66,0,617,518),1085=>array(66,0,486,518),1086=>array(35,-12,521,530),1087=>array(67,0,476,518),1088=>array(68,-199,518,530),1089=>array(39,-12,491,530),1090=>array(18,0,439,518),1091=>array(16,-210,492,518),1092=>array(37,-199,788,716),1093=>array(7,0,493,518),1094=>array(66,-199,532,518),1095=>array(46,0,467,518),1096=>array(69,0,734,518),1097=>array(69,-199,792,518),1098=>array(0,0,589,518),1099=>array(66,0,646,518),1100=>array(66,0,492,518),1101=>array(24,-11,474,530),1102=>array(66,-11,709,530),1103=>array(16,0,475,518),1105=>array(39,-12,517,720),1106=>array(2,-209,490,716),1107=>array(66,0,364,720),1108=>array(37,-11,487,530),1109=>array(31,-12,461,530),1110=>array(67,0,155,716),1111=>array(4,0,275,720),1112=>array(-45,-209,155,716),1113=>array(11,-3,842,518),1114=>array(66,0,780,518),1115=>array(2,0,490,716),1116=>array(66,0,446,720),1118=>array(16,-210,492,716),1119=>array(67,-199,476,518),1120=>array(47,-12,929,730),1121=>array(35,-12,731,518),1122=>array(0,0,622,716),1123=>array(-2,0,491,716),1124=>array(92,-12,912,728),1125=>array(68,-11,671,530),1126=>array(-2,0,668,716),1127=>array(0,0,595,518),1128=>array(92,0,952,716),1129=>array(68,0,817,518),1130=>array(0,0,654,716),1131=>array(1,0,599,518),1132=>array(92,0,932,716),1133=>array(68,0,820,518),1134=>array(37,-209,562,898),1135=>array(28,-209,423,728),1136=>array(46,0,759,716),1137=>array(66,-199,662,518),1138=>array(47,-12,732,728),1139=>array(35,-11,521,530),1140=>array(6,0,674,716),1141=>array(13,0,497,518),1142=>array(6,0,674,898),1143=>array(13,0,497,728),1144=>array(47,-210,1268,728),1145=>array(35,-210,1049,530),1146=>array(47,-36,732,750),1147=>array(35,-24,521,542),1148=>array(47,-12,929,926),1149=>array(35,-12,731,758),1150=>array(47,-12,929,880),1151=>array(35,-12,731,711),1152=>array(51,-97,672,728),1153=>array(39,-143,482,530),1154=>array(55,0,631,716),1155=>array(2,621,332,758),1156=>array(4,613,380,774),1157=>array(2,621,332,758),1158=>array(2,621,332,758),1168=>array(80,0,412,883),1169=>array(66,0,321,666),1170=>array(0,0,543,716),1171=>array(-2,0,364,518),1172=>array(80,-185,622,716),1173=>array(67,-209,490,716),1174=>array(3,-199,919,716),1175=>array(-3,-199,671,518),1176=>array(39,-205,562,728),1177=>array(24,-205,423,530),1178=>array(80,-199,580,717),1179=>array(66,-199,446,518),1180=>array(80,0,580,717),1181=>array(66,0,446,518),1182=>array(0,0,580,717),1183=>array(-2,0,446,518),1184=>array(24,0,762,717),1185=>array(0,0,544,518),1186=>array(80,-199,707,716),1187=>array(66,-199,543,518),1188=>array(80,0,880,716),1189=>array(66,0,653,518),1190=>array(80,-174,704,716),1191=>array(67,-174,537,518),1192=>array(47,-154,732,728),1193=>array(35,-141,550,530),1194=>array(51,-208,684,728),1195=>array(39,-208,491,530),1196=>array(21,-199,589,716),1197=>array(18,-199,439,518),1198=>array(5,0,661,716),1199=>array(13,-199,488,518),1200=>array(5,0,661,716),1201=>array(13,-199,488,518),1202=>array(4,-199,660,716),1203=>array(7,-199,493,518),1204=>array(16,-199,882,716),1205=>array(18,-199,631,518),1206=>array(58,-199,670,716),1207=>array(46,-199,524,518),1208=>array(58,0,604,716),1209=>array(46,0,467,518),1210=>array(81,0,627,716),1211=>array(67,0,490,716),1212=>array(7,-12,784,728),1213=>array(7,-11,624,530),1214=>array(7,-208,784,728),1215=>array(7,-208,624,530),1216=>array(92,0,187,716),1217=>array(3,0,919,881),1218=>array(-3,0,671,716),1219=>array(80,-174,580,717),1220=>array(66,-174,445,519),1223=>array(80,-174,703,716),1224=>array(66,-174,547,518),1227=>array(58,-199,604,716),1228=>array(46,-199,467,518),1232=>array(-2,0,668,881),1233=>array(38,-12,516,716),1234=>array(-1,0,668,861),1235=>array(38,-12,516,721),1236=>array(0,0,945,716),1237=>array(34,-12,849,530),1238=>array(79,0,613,881),1239=>array(39,-12,517,716),1240=>array(45,-12,676,728),1241=>array(39,-11,517,530),1242=>array(45,-12,676,859),1243=>array(39,-11,517,719),1244=>array(3,0,919,859),1245=>array(-3,0,671,721),1246=>array(39,-13,562,861),1247=>array(24,-12,423,721),1248=>array(39,-13,562,716),1249=>array(24,-206,457,518),1250=>array(79,0,643,833),1251=>array(66,0,493,697),1252=>array(79,0,643,861),1253=>array(66,0,493,721),1254=>array(47,-12,732,861),1255=>array(35,-12,521,721),1256=>array(47,-12,732,728),1257=>array(35,-11,521,530),1258=>array(47,-12,732,861),1259=>array(35,-11,521,721),1262=>array(5,-9,633,833),1263=>array(16,-210,492,697),1264=>array(5,-9,633,861),1265=>array(16,-210,492,721),1266=>array(5,-9,633,898),1267=>array(16,-210,492,728),1268=>array(58,0,604,861),1269=>array(46,0,467,721),1272=>array(80,0,801,861),1273=>array(66,0,646,721),1329=>array(25,-9,618,678),1330=>array(90,-1,481,685),1331=>array(31,-1,563,684),1332=>array(34,-1,564,684),1333=>array(30,-11,468,677),1334=>array(56,-22,510,692),1335=>array(27,-185,407,671),1336=>array(89,-96,476,684),1337=>array(98,0,722,683),1338=>array(46,-11,613,678),1339=>array(24,-2,503,676),1340=>array(28,-185,357,672),1341=>array(24,-12,539,676),1342=>array(38,-11,675,676),1343=>array(32,-2,462,676),1344=>array(28,-61,410,690),1345=>array(31,-11,515,689),1346=>array(27,-96,559,683),1347=>array(63,0,487,708),1348=>array(26,-11,620,677),1349=>array(101,-10,631,684),1350=>array(36,-11,594,685),1351=>array(32,-11,602,684),1352=>array(90,-1,460,684),1353=>array(69,-19,489,689),1354=>array(78,-1,614,683),1355=>array(55,-23,508,690),1356=>array(86,-2,619,683),1357=>array(30,-12,462,675),1358=>array(37,-96,665,676),1359=>array(101,-11,501,683),1360=>array(87,-7,452,677),1361=>array(104,-15,498,680),1362=>array(23,-7,511,671),1363=>array(106,-6,608,672),1364=>array(35,-8,675,678),1365=>array(100,-16,547,679),1366=>array(76,-15,713,680),1369=>array(87,485,211,705),1370=>array(83,485,207,705),1371=>array(34,485,114,702),1372=>array(20,425,282,702),1373=>array(87,518,210,699),1374=>array(14,476,257,702),1375=>array(38,484,397,702),1377=>array(39,-8,552,315),1378=>array(52,-210,400,319),1379=>array(52,-210,402,319),1380=>array(49,-210,433,319),1381=>array(49,-8,391,613),1382=>array(48,-210,409,319),1383=>array(50,-122,393,613),1384=>array(52,-210,395,319),1385=>array(49,-210,437,319),1386=>array(40,-8,430,613),1387=>array(44,-210,394,613),1388=>array(37,-210,309,315),1389=>array(38,-210,482,613),1390=>array(45,-8,413,580),1391=>array(53,-210,391,613),1392=>array(45,0,398,613),1393=>array(51,-8,397,561),1394=>array(50,-210,401,319),1395=>array(8,-8,386,618),1396=>array(44,-8,404,618),1397=>array(6,-210,197,315),1398=>array(90,-9,394,618),1399=>array(37,-8,359,319),1400=>array(50,0,397,319),1401=>array(79,-210,318,376),1402=>array(39,-210,551,315),1403=>array(55,-210,411,319),1404=>array(29,0,420,319),1405=>array(49,-9,393,315),1406=>array(43,-210,393,613),1407=>array(42,-8,550,319),1408=>array(52,-210,399,319),1409=>array(49,-210,393,319),1410=>array(32,0,308,315),1411=>array(39,-210,550,613),1412=>array(47,0,337,618),1413=>array(52,-8,336,319),1414=>array(78,-210,541,610),1415=>array(49,-8,502,613),1417=>array(80,-21,197,335),1425=>array(97,-194,263,-63),1426=>array(37,568,323,664),1427=>array(112,569,249,789),1428=>array(147,568,213,728),1429=>array(106,568,262,728),1430=>array(104,-195,256,-43),1431=>array(133,568,227,662),1432=>array(82,568,278,684),1433=>array(0,568,152,720),1434=>array(229,-205,340,-43),1435=>array(104,-195,256,-43),1436=>array(104,568,256,720),1437=>array(208,568,360,720),1438=>array(108,568,360,750),1439=>array(12,568,348,716),1440=>array(200,568,348,716),1441=>array(58,568,303,716),1443=>array(92,-191,221,-62),1444=>array(117,-205,228,-43),1445=>array(104,-195,256,-43),1446=>array(54,-215,306,-33),1447=>array(117,-209,242,-35),1448=>array(104,568,256,720),1449=>array(12,568,160,716),1450=>array(97,-194,263,-63),1451=>array(117,568,228,730),1452=>array(92,580,221,709),1453=>array(208,-195,360,-43),1454=>array(0,568,196,684),1455=>array(125,568,235,678),1456=>array(147,-210,213,-50),1457=>array(53,-210,307,-50),1458=>array(69,-210,285,-50),1459=>array(69,-210,285,-50),1460=>array(147,-116,213,-50),1461=>array(100,-116,260,-50),1462=>array(100,-210,260,-50),1463=>array(119,-104,241,-62),1464=>array(119,-144,241,-62),1465=>array(147,568,213,634),1467=>array(53,-210,307,-50),1468=>array(147,231,213,297),1469=>array(159,-184,201,-62),1470=>array(24,430,342,518),1471=>array(119,580,241,622),1472=>array(72,-80,154,598),1473=>array(147,568,213,634),1474=>array(147,568,213,634),1475=>array(69,0,169,518),1476=>array(147,568,213,634),1488=>array(60,0,517,518),1489=>array(38,0,533,530),1490=>array(20,0,386,530),1491=>array(24,0,482,518),1492=>array(72,0,526,530),1493=>array(16,0,248,530),1494=>array(28,0,306,543),1495=>array(72,0,526,530),1496=>array(68,-12,532,530),1497=>array(16,258,248,530),1498=>array(20,-199,439,530),1499=>array(38,-12,469,530),1500=>array(33,-12,436,716),1501=>array(72,0,526,518),1502=>array(30,0,526,530),1503=>array(16,-199,248,530),1504=>array(38,0,270,530),1505=>array(25,-12,546,530),1506=>array(32,-82,503,518),1507=>array(45,-199,499,530),1508=>array(37,-12,511,530),1509=>array(37,-199,468,518),1510=>array(45,0,477,518),1511=>array(72,-199,535,518),1512=>array(20,0,439,530),1513=>array(72,-12,674,518),1514=>array(21,-13,565,530),1520=>array(16,0,522,530),1521=>array(16,0,522,530),1522=>array(16,258,522,530),1523=>array(45,398,221,641),1524=>array(45,398,417,641),1548=>array(90,-3,196,238),1563=>array(90,0,196,479),1567=>array(47,0,509,728),1569=>array(54,0,469,422),1570=>array(-23,0,270,862),1571=>array(46,0,188,933),1572=>array(-108,-210,408,761),1573=>array(46,-174,188,716),1574=>array(32,-121,679,453),1575=>array(79,0,164,716),1576=>array(62,-190,709,265),1577=>array(62,-6,452,633),1578=>array(62,-50,709,437),1579=>array(62,-50,709,539),1580=>array(52,-271,564,453),1581=>array(52,-271,564,453),1582=>array(52,-271,564,621),1583=>array(38,0,368,437),1584=>array(38,0,368,629),1585=>array(-74,-210,357,290),1586=>array(-74,-210,357,470),1587=>array(39,-228,1115,346),1588=>array(39,-228,1115,604),1589=>array(39,-228,1230,436),1590=>array(39,-228,1230,532),1591=>array(59,0,782,686),1592=>array(59,0,782,686),1593=>array(53,-271,565,492),1594=>array(53,-271,565,725),1600=>array(-1,0,280,95),1601=>array(62,0,895,773),1602=>array(34,-214,738,678),1603=>array(62,0,689,716),1604=>array(34,-121,594,716),1605=>array(58,-265,527,359),1606=>array(62,-121,630,456),1607=>array(62,-6,452,431),1608=>array(-108,-210,408,476),1609=>array(32,-121,679,453),1610=>array(32,-238,679,453),1611=>array(10,716,290,944),1612=>array(4,716,292,990),1613=>array(8,-255,288,-78),1614=>array(10,716,290,859),1615=>array(4,716,292,990),1616=>array(8,-170,288,-78),1617=>array(7,716,299,936),1618=>array(3,716,201,965),1632=>array(130,59,348,260),1633=>array(99,0,282,576),1634=>array(35,0,451,576),1635=>array(39,0,473,576),1636=>array(63,-6,443,586),1637=>array(45,-6,435,576),1638=>array(29,0,450,576),1639=>array(21,-6,459,576),1640=>array(21,0,459,582),1641=>array(42,0,466,582),1642=>array(37,-3,516,579),1643=>array(-19,-151,205,100),1644=>array(90,-3,196,238),1645=>array(20,163,418,576),1648=>array(127,716,173,984),1649=>array(-15,0,256,927),1650=>array(-47,0,196,936),1651=>array(-55,-257,188,716),1652=>array(46,716,188,933),1653=>array(79,0,384,777),1654=>array(-108,-210,551,641),1655=>array(-108,-210,551,754),1656=>array(32,-121,775,621),1657=>array(62,-50,709,569),1658=>array(62,-50,709,568),1659=>array(62,-271,709,265),1660=>array(62,-161,709,437),1661=>array(62,-50,709,539),1662=>array(62,-271,709,265),1663=>array(62,-50,709,569),1664=>array(62,-271,709,265),1665=>array(52,-271,564,621),1666=>array(52,-271,564,724),1667=>array(52,-271,564,453),1668=>array(52,-271,564,453),1669=>array(52,-271,564,695),1670=>array(52,-271,564,453),1671=>array(52,-271,564,453),1672=>array(38,0,368,746),1673=>array(38,-95,368,437),1674=>array(38,-155,368,437),1675=>array(38,-155,368,746),1676=>array(38,0,368,614),1677=>array(38,-140,368,437),1678=>array(38,0,368,716),1679=>array(38,0,368,716),1680=>array(38,0,368,746),1681=>array(-74,-210,360,587),1682=>array(-74,-210,357,526),1683=>array(-74,-258,357,290),1684=>array(-74,-267,378,290),1685=>array(-74,-269,442,290),1686=>array(-74,-267,378,290),1687=>array(-74,-210,360,455),1688=>array(-74,-210,360,557),1689=>array(-74,-210,357,587),1690=>array(39,-228,1115,517),1691=>array(39,-254,1115,346),1692=>array(39,-254,1115,603),1693=>array(39,-228,1230,436),1694=>array(39,-228,1230,619),1695=>array(59,0,782,686),1696=>array(53,-271,565,749),1697=>array(62,0,895,556),1698=>array(62,-134,895,556),1699=>array(62,-134,895,773),1700=>array(62,0,895,860),1701=>array(62,-221,895,556),1702=>array(62,0,895,891),1703=>array(34,-214,738,693),1704=>array(34,-214,738,780),1705=>array(62,0,827,717),1706=>array(62,0,997,717),1707=>array(62,0,827,717),1708=>array(62,0,689,759),1709=>array(62,0,689,846),1710=>array(62,-223,689,716),1711=>array(62,0,827,793),1712=>array(62,0,827,793),1713=>array(62,0,827,863),1714=>array(62,-169,827,793),1715=>array(62,-271,827,793),1716=>array(62,0,827,942),1717=>array(34,-121,618,952),1718=>array(34,-121,594,914),1719=>array(34,-121,647,1001),1722=>array(62,-121,630,272),1723=>array(62,-121,630,570),1724=>array(62,-232,630,455),1725=>array(62,-121,630,540),1726=>array(29,-15,644,593),1728=>array(62,-6,452,705),1729=>array(2,-85,510,159),1730=>array(2,-85,510,431),1731=>array(2,-85,510,347),1732=>array(-108,-210,408,476),1733=>array(-108,-210,408,476),1734=>array(-108,-210,408,712),1735=>array(-108,-210,408,758),1736=>array(-108,-210,408,789),1737=>array(-108,-210,408,713),1738=>array(-108,-210,408,655),1739=>array(-108,-210,408,757),1740=>array(32,-121,679,453),1741=>array(-4,-121,789,453),1742=>array(32,-121,679,576),1744=>array(32,-271,679,493),1745=>array(32,-263,679,493),1746=>array(71,-221,684,297),1747=>array(71,-221,684,349),1748=>array(-1,190,280,285),1749=>array(62,-6,452,431),1750=>array(27,352,699,802),1751=>array(27,352,531,802),1752=>array(35,573,287,788),1753=>array(5,573,284,1002),1754=>array(34,354,341,789),1755=>array(25,635,347,869),1756=>array(23,436,669,781),1757=>array(34,27,654,647),1758=>array(2,-87,850,761),1759=>array(78,687,209,808),1760=>array(78,687,209,808),1761=>array(-1,576,340,848),1762=>array(34,414,316,789),1763=>array(23,-267,669,78),1764=>array(-14,714,162,756),1765=>array(-42,395,268,807),1766=>array(36,443,404,754),1767=>array(36,443,404,754),1768=>array(37,573,378,919),1769=>array(34,0,480,736),1770=>array(35,-161,183,-13),1771=>array(35,641,183,789),1772=>array(35,641,183,789),1773=>array(34,-270,316,105),1776=>array(130,59,348,260),1777=>array(99,0,282,576),1778=>array(35,0,451,576),1779=>array(39,0,473,576),1780=>array(35,0,471,661),1781=>array(30,-6,450,576),1782=>array(94,0,403,576),1783=>array(21,-6,459,576),1784=>array(21,0,459,582),1785=>array(42,0,466,582),2305=>array(-375,608,-50,889),2306=>array(-239,608,-109,843),2307=>array(78,69,216,513),2309=>array(42,-17,706,608),2310=>array(42,-18,923,608),2311=>array(-1,-114,545,608),2312=>array(-1,-114,545,891),2313=>array(-1,11,603,608),2314=>array(-1,11,726,608),2315=>array(-1,-44,933,608),2316=>array(-1,-44,690,608),2317=>array(-1,-187,624,864),2318=>array(-1,-187,624,886),2319=>array(-1,-187,624,608),2320=>array(-1,-187,624,889),2321=>array(42,-18,923,864),2322=>array(42,-18,923,886),2323=>array(42,-14,922,889),2324=>array(42,-17,922,892),2325=>array(-1,-17,680,608),2326=>array(-1,-15,745,608),2327=>array(-1,-15,605,608),2328=>array(-1,-17,652,608),2329=>array(-1,0,636,608),2330=>array(-1,-15,700,608),2331=>array(-1,-80,726,608),2332=>array(-1,-17,700,608),2333=>array(-1,-17,725,608),2334=>array(-1,-15,710,608),2335=>array(-1,0,515,608),2336=>array(-1,0,545,608),2337=>array(-1,0,595,608),2338=>array(-1,0,535,608),2339=>array(-1,-17,706,608),2340=>array(-1,-17,598,608),2341=>array(42,-14,650,608),2342=>array(-1,-14,545,608),2343=>array(42,-18,653,616),2344=>array(-1,-15,598,608),2345=>array(-1,-33,598,608),2346=>array(-1,-17,578,608),2347=>array(-2,-15,712,608),2348=>array(-1,-17,604,608),2349=>array(39,-17,702,608),2350=>array(-1,-17,646,608),2351=>array(-1,-17,613,608),2352=>array(-1,-14,499,608),2353=>array(-1,-19,499,608),2354=>array(-1,-14,692,608),2355=>array(-1,0,742,608),2356=>array(-1,-122,742,608),2357=>array(-1,-15,604,608),2358=>array(38,-18,696,616),2359=>array(-1,-15,621,608),2360=>array(-1,-17,659,608),2361=>array(-1,-238,559,608),2364=>array(-404,-197,-274,-67),2365=>array(28,50,386,608),2366=>array(-1,-17,332,608),2367=>array(-1,-15,776,895),2368=>array(-254,-15,332,895),2369=>array(-463,-256,-31,7),2370=>array(-345,-262,84,7),2371=>array(-330,-249,-50,13),2372=>array(-321,-271,-24,46),2373=>array(-338,608,-49,864),2374=>array(-546,598,-135,886),2375=>array(-534,598,-135,889),2376=>array(-475,599,-135,892),2377=>array(-19,-17,332,864),2378=>array(-228,-17,332,886),2379=>array(-260,-17,332,889),2380=>array(-152,-17,332,892),2381=>array(-251,-271,32,0),2384=>array(47,97,830,792),2385=>array(-212,608,-135,788),2386=>array(-612,-99,0,-29),2387=>array(-349,645,-184,832),2388=>array(-261,645,-96,832),2392=>array(-1,-17,680,608),2393=>array(-1,-104,745,608),2394=>array(-1,-54,605,608),2395=>array(-1,-66,700,608),2396=>array(-1,-67,595,608),2397=>array(-1,-77,535,608),2398=>array(-2,-15,712,608),2399=>array(-1,-38,613,608),2400=>array(-1,-71,933,608),2401=>array(-1,-71,690,608),2402=>array(-418,-271,26,13),2403=>array(-418,-271,60,13),2404=>array(128,-17,203,617),2405=>array(128,-17,385,616),2406=>array(147,115,491,468),2407=>array(179,-134,455,689),2408=>array(99,-123,542,644),2409=>array(125,-106,492,677),2410=>array(12,112,617,685),2411=>array(82,-149,576,658),2412=>array(118,-130,545,653),2413=>array(73,23,570,569),2414=>array(84,29,570,667),2415=>array(119,-92,575,648),2416=>array(64,292,298,525),2433=>array(-296,703,10,875),2434=>array(66,-56,396,605),2435=>array(92,0,338,606),2437=>array(0,0,794,607),2438=>array(0,0,1039,690),2439=>array(0,-94,590,875),2440=>array(0,-22,611,875),2441=>array(0,1,656,875),2442=>array(0,0,765,875),2443=>array(54,0,766,688),2444=>array(33,1,596,651),2447=>array(38,0,593,605),2448=>array(38,0,701,876),2451=>array(57,1,629,609),2452=>array(57,1,728,876),2453=>array(0,0,787,607),2454=>array(54,0,663,625),2455=>array(44,0,614,607),2456=>array(0,0,658,607),2457=>array(51,0,621,607),2458=>array(0,0,563,607),2459=>array(0,-93,593,607),2460=>array(0,-42,737,607),2461=>array(0,0,761,607),2462=>array(38,0,829,606),2463=>array(0,0,575,875),2464=>array(0,0,634,876),2465=>array(0,1,656,607),2466=>array(0,0,575,607),2467=>array(55,0,606,607),2468=>array(0,1,688,607),2469=>array(50,0,653,607),2470=>array(0,-24,617,607),2471=>array(45,0,604,624),2472=>array(0,0,603,607),2474=>array(44,0,643,607),2475=>array(0,0,789,607),2476=>array(0,0,601,607),2477=>array(0,2,685,607),2478=>array(0,0,629,607),2479=>array(0,0,609,607),2480=>array(0,-18,601,607),2482=>array(0,-0,648,607),2486=>array(0,0,606,626),2487=>array(0,0,604,607),2488=>array(0,0,645,607),2489=>array(0,-94,590,607),2492=>array(-366,-164,-233,-32),2494=>array(0,0,253,690),2495=>array(0,0,531,850),2496=>array(-334,0,253,875),2497=>array(-357,-269,39,5),2498=>array(-359,-269,21,-73),2499=>array(-314,-270,-60,-77),2500=>array(-380,-271,98,24),2503=>array(0,1,317,607),2504=>array(0,1,317,875),2507=>array(0,0,940,690),2508=>array(0,0,940,875),2509=>array(-187,-267,26,-73),2519=>array(-250,0,253,875),2524=>array(0,-164,656,607),2525=>array(0,-164,561,607),2527=>array(0,-42,604,607),2528=>array(54,-93,766,688),2529=>array(33,-271,596,651),2530=>array(-381,-271,-4,23),2531=>array(-401,-271,333,151),2534=>array(62,55,548,550),2535=>array(46,0,513,624),2536=>array(58,-51,583,636),2537=>array(53,2,671,606),2538=>array(67,0,547,653),2539=>array(62,1,632,638),2540=>array(52,1,616,622),2541=>array(69,0,498,624),2542=>array(55,0,641,622),2543=>array(53,1,559,622),2544=>array(0,0,601,607),2545=>array(0,-51,601,607),2546=>array(36,0,581,606),2547=>array(-87,0,575,875),2548=>array(26,0,571,606),2549=>array(44,1,669,606),2550=>array(54,0,624,606),2551=>array(103,0,165,607),2552=>array(52,0,564,605),2553=>array(48,154,376,451),2554=>array(74,349,492,788),2562=>array(-156,578,-79,731),2565=>array(0,0,696,578),2566=>array(0,0,940,578),2567=>array(0,0,808,822),2568=>array(0,0,808,822),2569=>array(0,-267,683,839),2570=>array(0,-267,683,839),2575=>array(0,2,562,793),2576=>array(0,0,696,839),2579=>array(0,-2,683,836),2580=>array(0,0,696,839),2581=>array(0,0,607,578),2582=>array(0,0,572,578),2583=>array(0,0,646,578),2584=>array(0,0,692,578),2585=>array(0,0,570,578),2586=>array(0,1,597,578),2587=>array(0,0,607,578),2588=>array(0,0,596,578),2589=>array(0,0,546,578),2590=>array(0,0,563,578),2591=>array(0,0,548,578),2592=>array(0,0,586,578),2593=>array(0,0,601,578),2594=>array(0,0,645,578),2595=>array(0,0,645,578),2596=>array(0,0,596,578),2597=>array(0,0,569,578),2598=>array(0,0,645,578),2599=>array(0,0,569,578),2600=>array(0,0,587,578),2602=>array(0,0,569,578),2603=>array(0,0,556,578),2604=>array(0,0,564,578),2605=>array(0,0,554,578),2606=>array(0,0,563,578),2607=>array(0,0,657,578),2608=>array(0,4,545,578),2610=>array(0,-0,682,578),2611=>array(0,-96,682,578),2613=>array(0,0,606,578),2614=>array(0,0,563,578),2616=>array(0,0,563,578),2617=>array(0,0,554,578),2620=>array(-208,-154,-131,-77),2622=>array(0,216,251,578),2623=>array(0,0,397,822),2624=>array(-151,0,251,822),2625=>array(-388,-267,-50,0),2626=>array(-388,-267,-50,0),2631=>array(-473,578,-90,793),2632=>array(-471,578,-90,839),2635=>array(-411,572,-90,803),2636=>array(-379,578,-27,839),2637=>array(-235,-238,51,0),2649=>array(0,0,572,578),2650=>array(0,0,695,578),2651=>array(0,0,596,578),2652=>array(0,0,596,578),2654=>array(0,0,585,578),2662=>array(54,42,537,524),2663=>array(86,0,514,575),2664=>array(53,0,528,577),2665=>array(52,1,527,577),2666=>array(69,0,522,577),2667=>array(57,0,501,579),2668=>array(74,0,530,758),2669=>array(36,0,519,578),2670=>array(64,0,526,578),2671=>array(65,0,525,769),2672=>array(-103,664,103,841),2673=>array(-193,660,111,839),2674=>array(0,2,562,578),2675=>array(0,-2,683,839),2676=>array(28,-110,857,648),2689=>array(-429,608,-23,885),2690=>array(-179,608,-67,822),2691=>array(88,98,212,510),2693=>array(36,0,803,608),2694=>array(36,0,1062,610),2695=>array(42,-1,553,882),2696=>array(42,-1,606,882),2697=>array(60,0,545,742),2698=>array(60,-4,776,882),2699=>array(20,0,780,608),2701=>array(36,0,803,881),2703=>array(36,0,803,881),2704=>array(36,0,803,882),2705=>array(36,0,1062,881),2707=>array(36,0,1062,881),2708=>array(36,0,1062,882),2709=>array(35,0,411,610),2710=>array(5,0,792,608),2711=>array(25,0,625,608),2712=>array(52,-1,579,608),2713=>array(25,0,462,610),2714=>array(36,0,620,608),2715=>array(55,0,643,608),2716=>array(50,0,791,608),2717=>array(34,0,601,608),2718=>array(25,0,669,608),2719=>array(55,0,460,610),2720=>array(59,0,409,610),2721=>array(25,0,404,610),2722=>array(55,-1,447,608),2723=>array(98,-271,714,608),2724=>array(60,0,554,608),2725=>array(45,0,572,608),2726=>array(44,-1,480,608),2727=>array(27,0,561,727),2728=>array(43,0,602,608),2730=>array(5,0,592,608),2731=>array(50,-270,442,608),2732=>array(50,0,684,608),2733=>array(50,0,776,608),2734=>array(27,0,614,608),2735=>array(40,0,514,608),2736=>array(45,-2,411,609),2738=>array(55,0,633,608),2739=>array(52,0,676,609),2741=>array(50,0,558,608),2742=>array(52,0,633,610),2743=>array(75,0,528,608),2744=>array(43,0,684,608),2745=>array(69,0,573,610),2748=>array(-323,-182,-211,-70),2749=>array(52,0,436,608),2750=>array(98,0,291,610),2751=>array(98,0,660,883),2752=>array(-180,0,291,884),2753=>array(-412,-271,28,5),2754=>array(-323,-271,151,5),2755=>array(-271,-271,41,5),2756=>array(-275,-271,65,20),2757=>array(-452,608,-25,881),2759=>array(-509,608,-80,881),2760=>array(-544,608,-96,882),2761=>array(-179,0,291,881),2763=>array(-236,0,291,881),2764=>array(-271,0,291,882),2765=>array(-244,-249,186,5),2768=>array(46,0,815,881),2784=>array(20,-1,875,608),2790=>array(91,61,532,545),2791=>array(110,0,534,608),2792=>array(97,0,524,608),2793=>array(29,0,527,608),2794=>array(18,0,595,609),2795=>array(18,0,598,608),2796=>array(104,0,541,610),2797=>array(25,0,571,608),2798=>array(118,0,532,607),2799=>array(35,1,608,605),2817=>array(-374,776,37,979),2818=>array(34,379,271,717),2819=>array(59,0,332,717),2821=>array(42,0,508,717),2822=>array(42,0,726,717),2823=>array(39,-16,643,717),2824=>array(39,-16,643,717),2825=>array(39,-16,618,717),2826=>array(39,-16,625,717),2827=>array(39,-16,607,717),2828=>array(39,0,516,717),2831=>array(49,0,479,717),2832=>array(49,0,918,913),2835=>array(59,0,561,732),2836=>array(59,0,953,913),2837=>array(39,0,564,717),2838=>array(39,0,539,717),2839=>array(39,0,539,717),2840=>array(39,0,524,717),2841=>array(39,0,688,717),2842=>array(39,0,540,717),2843=>array(39,0,540,717),2844=>array(39,0,554,717),2845=>array(39,-15,540,732),2846=>array(54,0,532,717),2847=>array(39,0,539,717),2848=>array(44,0,534,717),2849=>array(39,0,540,717),2850=>array(39,-12,540,717),2851=>array(44,0,526,717),2852=>array(39,0,540,717),2853=>array(39,0,505,717),2854=>array(39,0,540,717),2855=>array(44,0,521,732),2856=>array(39,0,540,717),2858=>array(39,0,524,717),2859=>array(39,0,703,717),2860=>array(39,0,540,717),2861=>array(39,-16,628,717),2862=>array(39,-0,524,717),2863=>array(56,0,547,717),2864=>array(39,-16,604,717),2866=>array(39,-16,638,717),2867=>array(39,0,554,717),2870=>array(39,0,539,717),2871=>array(39,0,524,717),2872=>array(39,0,524,717),2873=>array(39,-30,540,717),2876=>array(-301,-176,-206,-84),2877=>array(71,0,273,717),2878=>array(82,0,136,717),2879=>array(-522,762,-17,918),2880=>array(-25,1,213,920),2881=>array(-443,-264,123,-51),2882=>array(-359,-271,171,-17),2883=>array(-325,-271,102,-18),2887=>array(59,0,436,717),2888=>array(59,0,1005,913),2891=>array(59,0,945,717),2892=>array(59,0,1006,913),2893=>array(-188,-267,161,-45),2902=>array(-515,717,-20,913),2903=>array(-297,0,198,913),2908=>array(39,-176,540,717),2909=>array(39,-176,540,717),2911=>array(23,-53,623,718),2912=>array(39,-16,607,717),2913=>array(39,-30,540,717),2918=>array(44,0,534,717),2919=>array(49,-12,441,717),2920=>array(39,-12,432,717),2921=>array(34,0,541,717),2922=>array(20,0,487,732),2923=>array(0,-21,605,717),2924=>array(34,-15,476,718),2925=>array(29,-9,495,729),2926=>array(82,0,495,717),2927=>array(54,-15,456,719),2928=>array(50,209,544,557),2946=>array(-388,499,-211,675),2947=>array(37,-11,698,702),2949=>array(22,-271,932,429),2950=>array(22,-271,1071,429),2951=>array(19,-271,915,702),2952=>array(70,0,621,417),2953=>array(55,0,988,429),2954=>array(55,0,1221,429),2958=>array(52,-11,721,417),2959=>array(52,-110,726,417),2960=>array(27,-271,813,429),2962=>array(49,-271,711,429),2963=>array(49,-271,711,429),2964=>array(49,-271,1631,429),2965=>array(36,-11,610,417),2969=>array(70,0,759,417),2970=>array(36,-11,565,417),2972=>array(28,-271,815,429),2974=>array(63,-271,928,417),2975=>array(70,0,778,417),2979=>array(52,-11,1290,429),2980=>array(-4,-271,600,417),2984=>array(-0,-271,577,417),2985=>array(52,-11,1007,429),2986=>array(70,0,623,417),2990=>array(70,0,667,429),2991=>array(83,-11,719,417),2992=>array(70,-113,540,417),2993=>array(2,-271,650,429),2994=>array(52,-11,768,510),2995=>array(52,-11,866,429),2996=>array(62,-271,665,429),2997=>array(52,-11,803,429),2999=>array(52,-271,1067,429),3000=>array(52,-11,1046,510),3001=>array(0,-271,1207,429),3006=>array(70,0,542,417),3007=>array(-245,1,112,702),3008=>array(-282,417,94,702),3009=>array(-117,145,458,417),3010=>array(-117,-52,754,636),3014=>array(61,-12,685,701),3015=>array(56,-11,659,702),3016=>array(52,-11,901,429),3018=>array(61,-12,1661,701),3019=>array(56,-11,1661,702),3020=>array(61,-12,1989,701),3021=>array(-364,523,-237,650),3031=>array(52,-11,866,429),3047=>array(36,-11,610,417),3048=>array(55,0,988,429),3049=>array(70,0,727,417),3050=>array(36,-11,682,417),3051=>array(70,-208,913,645),3052=>array(36,-11,857,417),3053=>array(52,-11,721,417),3054=>array(22,-271,932,429),3055=>array(36,-11,776,417),3056=>array(83,-11,662,702),3057=>array(71,0,714,429),3058=>array(-4,-271,745,417),3073=>array(57,-6,335,481),3074=>array(57,-13,544,471),3075=>array(65,-12,280,474),3077=>array(54,-11,667,474),3078=>array(54,-11,732,473),3079=>array(36,-229,513,472),3080=>array(24,-11,1108,664),3081=>array(57,-11,634,682),3082=>array(57,-11,996,682),3083=>array(57,-11,1239,474),3084=>array(44,-11,856,586),3086=>array(44,-11,556,702),3087=>array(44,-11,556,839),3088=>array(54,-11,656,475),3090=>array(57,-11,610,471),3091=>array(57,-11,610,642),3092=>array(6,-11,856,688),3093=>array(36,-11,474,664),3094=>array(51,-137,620,476),3095=>array(39,-14,510,664),3096=>array(35,-137,874,664),3097=>array(57,-11,610,472),3098=>array(24,-11,630,664),3099=>array(24,-137,630,664),3100=>array(57,-11,610,474),3101=>array(57,-136,1146,664),3102=>array(36,-229,715,472),3103=>array(57,-11,829,550),3104=>array(57,-11,540,664),3105=>array(57,-11,659,664),3106=>array(57,-137,659,664),3107=>array(63,-11,752,474),3108=>array(57,-11,659,664),3109=>array(60,-137,643,664),3110=>array(60,-11,643,664),3111=>array(60,-137,643,664),3112=>array(44,-11,547,664),3114=>array(35,-11,563,664),3115=>array(35,-137,563,664),3116=>array(57,-11,621,473),3117=>array(57,-137,663,664),3118=>array(44,-11,873,664),3119=>array(57,-12,1144,664),3120=>array(57,-11,540,664),3121=>array(57,-12,837,476),3122=>array(57,-11,571,474),3123=>array(48,-11,561,664),3125=>array(44,-11,561,664),3126=>array(48,-11,524,664),3127=>array(35,-137,759,664),3128=>array(24,-11,581,664),3129=>array(31,-11,893,664),3134=>array(6,305,626,545),3135=>array(17,462,281,785),3136=>array(10,462,289,980),3137=>array(-48,-9,302,474),3138=>array(-48,-9,665,545),3139=>array(-203,-271,294,474),3140=>array(-216,-271,687,473),3142=>array(6,466,618,688),3143=>array(6,466,617,889),3144=>array(6,-271,894,688),3146=>array(6,470,843,715),3147=>array(6,470,843,908),3148=>array(6,449,970,688),3149=>array(39,465,655,866),3157=>array(47,767,289,980),3158=>array(-670,-271,109,-31),3168=>array(57,-11,1602,545),3169=>array(44,-11,1263,545),3174=>array(158,-14,682,510),3175=>array(88,-14,752,510),3176=>array(54,0,726,510),3177=>array(199,-13,609,512),3178=>array(136,-12,704,519),3179=>array(60,-14,781,521),3180=>array(106,0,798,510),3181=>array(201,-15,668,513),3182=>array(65,-13,815,510),3183=>array(106,0,798,510),3202=>array(46,84,394,554),3203=>array(46,84,205,553),3205=>array(47,84,608,602),3206=>array(46,84,625,602),3207=>array(37,84,595,602),3208=>array(33,84,850,752),3209=>array(46,84,911,602),3210=>array(46,84,1247,602),3211=>array(37,84,1000,752),3212=>array(37,84,695,602),3214=>array(37,84,606,602),3215=>array(37,84,606,647),3216=>array(44,84,615,602),3218=>array(37,84,630,602),3219=>array(37,84,630,775),3220=>array(38,84,631,774),3221=>array(49,84,415,752),3222=>array(17,84,700,713),3223=>array(51,84,493,752),3224=>array(44,-79,742,752),3225=>array(37,84,630,602),3226=>array(37,84,633,752),3227=>array(46,-79,614,752),3228=>array(37,84,630,602),3229=>array(54,-79,1127,752),3230=>array(37,84,889,602),3231=>array(59,84,627,651),3232=>array(54,84,508,752),3233=>array(54,84,625,752),3234=>array(54,-79,625,752),3235=>array(54,84,682,602),3236=>array(46,84,500,752),3237=>array(54,-79,626,752),3238=>array(54,84,626,752),3239=>array(54,-79,626,752),3240=>array(46,46,514,752),3242=>array(46,84,620,752),3243=>array(46,-79,619,753),3244=>array(37,84,632,602),3245=>array(37,-79,643,752),3246=>array(49,84,928,752),3247=>array(46,84,1057,752),3248=>array(54,84,508,752),3249=>array(49,84,628,602),3250=>array(46,84,615,602),3251=>array(42,84,507,752),3253=>array(49,84,620,752),3254=>array(49,84,506,752),3255=>array(49,70,620,752),3256=>array(44,84,499,752),3257=>array(49,84,675,752),3262=>array(-21,84,370,588),3263=>array(-13,339,307,702),3264=>array(-13,46,635,702),3265=>array(-5,84,312,563),3266=>array(-5,84,673,560),3267=>array(22,-173,364,236),3268=>array(24,-173,614,253),3270=>array(-79,354,258,774),3271=>array(-79,46,606,774),3272=>array(-79,-173,438,774),3274=>array(-79,84,868,774),3275=>array(-79,46,1188,774),3276=>array(-160,276,395,774),3277=>array(-22,335,329,703),3285=>array(49,46,299,560),3286=>array(25,-173,364,301),3294=>array(49,84,624,602),3296=>array(37,84,1654,752),3297=>array(37,84,943,602),3302=>array(42,84,507,686),3303=>array(34,84,515,685),3304=>array(22,98,507,688),3305=>array(52,84,527,684),3306=>array(38,84,515,684),3307=>array(33,84,516,688),3308=>array(42,98,529,687),3309=>array(47,98,525,684),3310=>array(36,84,520,687),3311=>array(46,84,521,667),3330=>array(45,-9,323,269),3331=>array(49,-9,256,464),3333=>array(49,-9,1152,464),3334=>array(49,-173,1309,464),3335=>array(49,-232,856,464),3336=>array(49,-232,1411,464),3337=>array(49,-232,586,464),3338=>array(49,-232,1149,464),3339=>array(44,-271,817,464),3340=>array(49,-9,908,465),3342=>array(44,-271,1157,464),3343=>array(44,-271,1153,464),3344=>array(49,-271,1785,465),3346=>array(49,-9,601,464),3347=>array(49,-9,1065,464),3348=>array(49,-9,1146,464),3349=>array(42,-8,819,464),3350=>array(49,-9,907,465),3351=>array(44,-10,830,464),3352=>array(39,0,1279,464),3353=>array(49,-9,916,465),3354=>array(15,0,940,464),3355=>array(15,-9,1217,464),3356=>array(44,-51,663,464),3357=>array(49,-9,1410,464),3358=>array(49,-9,1166,465),3359=>array(39,-9,524,464),3360=>array(43,-9,517,464),3361=>array(44,-9,1146,464),3362=>array(44,-9,1195,465),3363=>array(49,-12,1219,465),3364=>array(49,-9,830,464),3365=>array(76,0,893,464),3366=>array(49,-9,501,464),3367=>array(49,-9,835,467),3368=>array(44,-12,830,464),3370=>array(44,-9,956,464),3371=>array(44,-9,1104,464),3372=>array(49,-9,1258,465),3373=>array(54,0,504,464),3374=>array(71,0,572,464),3375=>array(44,-9,905,464),3376=>array(49,-9,594,464),3377=>array(44,-8,506,464),3378=>array(76,0,869,464),3379=>array(44,-232,589,464),3380=>array(44,-9,514,464),3381=>array(49,-7,884,464),3382=>array(44,-9,888,464),3383=>array(44,-9,1043,464),3384=>array(44,-9,1146,464),3385=>array(44,-9,1063,464),3390=>array(42,-6,426,464),3391=>array(0,0,330,651),3392=>array(0,0,354,651),3393=>array(39,-271,301,466),3394=>array(39,-271,301,466),3395=>array(8,-271,458,466),3398=>array(49,-9,591,465),3399=>array(49,-8,476,464),3400=>array(49,-9,1230,465),3402=>array(49,-9,1319,465),3403=>array(49,-8,1209,464),3404=>array(49,-9,1398,465),3405=>array(-300,520,-19,721),3415=>array(39,-9,504,464),3424=>array(44,-271,817,464),3425=>array(49,-173,1058,465),3430=>array(49,-9,1080,464),3431=>array(15,-143,852,464),3432=>array(44,-7,840,464),3433=>array(44,-9,1166,464),3434=>array(44,-9,643,651),3435=>array(54,-243,918,651),3436=>array(44,-271,1162,464),3437=>array(49,-271,591,464),3438=>array(49,-271,884,464),3439=>array(44,-9,848,651),3585=>array(54,0,520,558),3586=>array(30,0,573,558),3587=>array(30,0,590,559),3588=>array(52,0,530,558),3589=>array(52,0,530,560),3590=>array(30,-5,590,559),3591=>array(25,-5,396,558),3592=>array(26,-5,481,558),3593=>array(30,-5,622,558),3594=>array(30,0,634,592),3595=>array(30,0,651,592),3596=>array(54,-5,741,558),3597=>array(54,-208,783,558),3598=>array(30,-203,545,558),3599=>array(30,-203,545,558),3600=>array(54,-206,477,560),3601=>array(30,0,710,559),3602=>array(52,-5,751,560),3603=>array(54,-5,857,558),3604=>array(52,0,530,558),3605=>array(52,0,530,560),3606=>array(54,-5,520,558),3607=>array(30,0,575,558),3608=>array(54,0,477,560),3609=>array(30,-5,622,558),3610=>array(30,0,533,558),3611=>array(30,0,533,830),3612=>array(78,0,552,558),3613=>array(78,0,552,830),3614=>array(30,0,620,558),3615=>array(30,0,620,830),3616=>array(30,-5,545,558),3617=>array(30,-5,506,558),3618=>array(75,0,513,558),3619=>array(54,-5,437,560),3620=>array(54,-199,520,558),3621=>array(44,-5,499,558),3622=>array(30,-199,545,558),3623=>array(19,-5,444,558),3624=>array(52,0,562,664),3625=>array(30,0,637,558),3626=>array(44,-5,544,659),3627=>array(30,0,584,558),3628=>array(30,0,684,723),3629=>array(36,0,491,558),3630=>array(61,0,545,656),3631=>array(30,0,442,558),3632=>array(44,49,418,510),3633=>array(-364,631,10,824),3634=>array(26,0,421,558),3635=>array(-223,0,421,767),3636=>array(-493,612,-109,775),3637=>array(-493,612,-109,800),3638=>array(-493,612,-64,800),3639=>array(-493,612,-109,800),3640=>array(-201,-206,-85,-34),3641=>array(-337,-206,-89,-34),3642=>array(-157,-115,-75,-33),3647=>array(84,-103,625,782),3648=>array(75,-5,272,553),3649=>array(75,-5,541,553),3650=>array(27,-5,466,830),3651=>array(30,-5,485,828),3652=>array(10,-5,485,828),3653=>array(26,-199,421,558),3654=>array(30,-199,431,559),3655=>array(-424,603,-47,849),3656=>array(-167,858,-109,1031),3657=>array(-293,858,1,1065),3658=>array(-342,858,98,1056),3659=>array(-225,858,-52,1031),3660=>array(-330,861,-18,1078),3661=>array(-223,609,-65,767),3662=>array(-203,858,-42,1067),3663=>array(60,-5,495,430),3664=>array(60,-5,538,428),3665=>array(50,-5,590,428),3666=>array(75,0,613,611),3667=>array(75,-5,615,428),3668=>array(50,-5,637,611),3669=>array(50,-5,637,611),3670=>array(18,-5,585,611),3671=>array(75,-5,789,574),3672=>array(60,-5,659,574),3673=>array(75,-5,715,574),3674=>array(30,0,598,558),3675=>array(40,-5,964,447),3713=>array(55,-6,721,587),3714=>array(53,-15,664,587),3716=>array(54,-5,670,587),3719=>array(34,-207,470,587),3720=>array(37,-18,636,587),3722=>array(54,-210,629,587),3725=>array(54,-5,670,588),3732=>array(54,-5,665,587),3733=>array(54,-6,780,587),3734=>array(45,-257,711,587),3735=>array(55,-5,862,587),3737=>array(54,-11,690,589),3738=>array(55,-5,686,587),3739=>array(55,-5,686,707),3740=>array(54,-5,780,593),3741=>array(54,-5,780,707),3742=>array(54,-5,800,587),3743=>array(54,-5,800,707),3745=>array(55,-11,721,589),3746=>array(54,-5,670,707),3747=>array(54,-7,643,587),3749=>array(46,-7,646,587),3751=>array(46,-7,646,587),3754=>array(58,-7,673,587),3755=>array(55,-5,862,587),3757=>array(54,-7,671,587),3758=>array(53,-7,664,595),3759=>array(54,-21,604,680),3760=>array(57,113,382,578),3761=>array(57,847,482,1049),3762=>array(34,-5,422,587),3763=>array(1,-5,422,788),3764=>array(139,805,639,1059),3765=>array(139,805,713,1059),3766=>array(139,805,639,1059),3767=>array(139,805,713,1059),3768=>array(308,-269,470,-26),3769=>array(248,-263,528,-15),3771=>array(145,838,635,1060),3772=>array(147,-257,632,-72),3773=>array(55,-5,616,829),3776=>array(34,-5,386,576),3777=>array(34,-5,772,576),3778=>array(28,-5,410,1001),3779=>array(17,-5,429,1037),3780=>array(46,-5,311,1025),3782=>array(34,-267,517,579),3784=>array(349,806,429,1012),3785=>array(148,808,630,1035),3786=>array(163,805,609,1015),3787=>array(281,805,497,1019),3788=>array(212,812,560,1049),3789=>array(308,806,470,967),3792=>array(54,-7,667,578),3793=>array(54,-5,665,578),3794=>array(67,-5,557,796),3795=>array(44,-5,665,829),3796=>array(54,-5,632,776),3797=>array(54,-5,632,776),3798=>array(54,-5,780,829),3799=>array(55,-257,702,579),3800=>array(54,-171,670,579),3801=>array(54,-5,841,577),3804=>array(55,-11,1218,579),3805=>array(55,-11,1218,579),3840=>array(52,207,573,983),3841=>array(52,232,534,864),3842=>array(11,274,571,864),3843=>array(11,274,593,864),3844=>array(0,227,583,720),3845=>array(107,227,464,720),3846=>array(0,-174,583,720),3847=>array(-152,393,649,720),3848=>array(141,-174,512,809),3849=>array(80,81,520,716),3850=>array(34,-62,576,799),3851=>array(92,522,508,716),3852=>array(92,-117,508,716),3853=>array(260,-174,340,716),3854=>array(190,-174,410,716),3855=>array(250,-174,350,716),3856=>array(187,-174,413,716),3857=>array(179,-174,421,716),3858=>array(-20,-124,620,719),3859=>array(21,126,579,706),3860=>array(238,403,371,681),3861=>array(128,254,472,716),3862=>array(128,320,477,716),3863=>array(99,378,510,657),3864=>array(159,-9,537,322),3865=>array(260,-201,340,300),3866=>array(241,459,359,577),3867=>array(151,459,449,577),3868=>array(151,419,449,687),3869=>array(123,346,476,683),3870=>array(66,426,520,607),3871=>array(129,448,455,584),3872=>array(128,-13,472,374),3873=>array(126,-149,444,374),3874=>array(40,-86,530,374),3875=>array(97,-176,507,402),3876=>array(27,19,560,339),3877=>array(80,-13,541,374),3878=>array(33,-42,547,434),3879=>array(24,-13,568,390),3880=>array(57,-63,485,401),3881=>array(82,-82,534,374),3882=>array(-65,-149,653,374),3883=>array(-65,-86,653,374),3884=>array(-65,-176,653,402),3885=>array(-65,19,653,339),3886=>array(-65,-13,653,374),3887=>array(-65,-42,653,434),3888=>array(-65,-13,653,390),3889=>array(-65,-63,653,401),3890=>array(-65,-82,653,374),3891=>array(-65,-13,653,374),3892=>array(227,359,373,609),3893=>array(238,-1,371,150),3894=>array(81,159,519,619),3895=>array(251,52,349,150),3896=>array(87,431,495,735),3897=>array(355,538,551,706),3898=>array(2,419,587,687),3899=>array(13,419,598,687),3900=>array(56,-201,484,837),3901=>array(116,-201,544,837),3902=>array(238,-201,457,180),3903=>array(143,-201,362,180),3904=>array(23,27,558,716),3905=>array(42,207,558,716),3906=>array(22,27,558,716),3907=>array(22,-174,558,716),3908=>array(72,207,528,716),3909=>array(54,207,541,716),3910=>array(43,207,557,716),3911=>array(72,207,528,716),3913=>array(96,27,488,726),3914=>array(72,27,528,716),3915=>array(62,207,538,716),3916=>array(72,27,528,716),3917=>array(72,-174,528,716),3918=>array(102,27,500,716),3919=>array(72,27,528,716),3920=>array(62,207,538,716),3921=>array(72,27,528,716),3922=>array(72,-174,528,716),3923=>array(100,27,498,716),3924=>array(72,207,558,716),3925=>array(72,207,558,716),3926=>array(72,207,558,716),3927=>array(72,-174,558,716),3928=>array(30,207,558,716),3929=>array(54,207,601,864),3930=>array(43,207,601,864),3931=>array(72,207,621,864),3932=>array(72,-174,621,864),3933=>array(31,207,558,726),3934=>array(62,27,542,716),3935=>array(62,207,538,716),3936=>array(72,187,580,716),3937=>array(72,207,558,716),3938=>array(86,207,580,716),3939=>array(72,207,558,716),3940=>array(19,27,538,716),3941=>array(62,27,581,716),3942=>array(72,207,558,716),3943=>array(72,27,528,716),3944=>array(52,207,558,716),3945=>array(23,-174,558,716),3953=>array(208,-51,414,140),3954=>array(87,625,539,864),3955=>array(87,-51,539,864),3956=>array(72,-70,524,153),3957=>array(105,-201,524,180),3958=>array(61,41,513,864),3959=>array(61,-201,513,864),3960=>array(61,-11,513,864),3961=>array(61,-201,513,864),3962=>array(137,643,365,777),3963=>array(137,643,405,897),3964=>array(67,643,573,829),3965=>array(67,643,573,929),3966=>array(241,736,359,854),3967=>array(399,180,517,448),3968=>array(61,625,513,864),3969=>array(61,-51,513,864),3970=>array(193,625,391,852),3971=>array(193,625,391,819),3972=>array(307,-201,535,-67),3973=>array(96,-54,488,726),3974=>array(186,461,432,864),3975=>array(288,666,312,864),3976=>array(162,609,438,864),3977=>array(85,575,515,864),3978=>array(165,634,455,864),3979=>array(163,652,486,864),3984=>array(75,-201,510,180),3985=>array(90,-201,510,180),3986=>array(74,-200,510,180),3987=>array(179,-201,413,180),3988=>array(115,-201,485,180),3989=>array(100,-201,496,180),3991=>array(115,-201,485,180),3993=>array(134,-201,453,186),3994=>array(115,-201,485,180),3995=>array(107,-201,493,180),3996=>array(115,-201,485,180),3997=>array(201,-201,399,180),3998=>array(139,-201,463,180),3999=>array(115,-201,485,180),4000=>array(107,-201,493,180),4001=>array(115,-201,485,180),4002=>array(201,-201,399,180),4003=>array(137,-201,461,180),4004=>array(115,-201,510,180),4005=>array(115,-201,510,180),4006=>array(115,-201,510,180),4007=>array(201,-201,413,180),4008=>array(81,-201,510,180),4009=>array(100,-201,545,301),4010=>array(91,-201,545,301),4011=>array(115,-201,561,301),4012=>array(201,-201,440,245),4013=>array(81,-201,510,188),4017=>array(115,-201,510,180),4018=>array(126,-201,528,180),4019=>array(115,-201,510,180),4020=>array(72,-201,493,180),4021=>array(107,-201,528,180),4022=>array(115,-201,510,180),4023=>array(132,-201,468,180),4025=>array(179,-201,413,180),4256=>array(42,-15,633,716),4257=>array(45,-3,677,716),4258=>array(45,-142,695,716),4259=>array(42,-15,657,716),4260=>array(45,0,543,716),4261=>array(47,0,745,716),4262=>array(1,-7,630,715),4263=>array(35,0,740,716),4264=>array(24,0,494,716),4265=>array(66,0,568,716),4266=>array(45,-7,748,716),4267=>array(34,-7,677,716),4268=>array(66,0,563,716),4269=>array(35,-15,681,732),4270=>array(-1,-15,639,719),4271=>array(-1,-209,624,721),4272=>array(34,-15,689,716),4273=>array(66,-15,581,716),4274=>array(66,0,547,716),4275=>array(35,-15,681,732),4276=>array(35,-209,644,732),4277=>array(34,-209,671,716),4278=>array(66,0,577,732),4279=>array(52,0,557,716),4280=>array(50,-15,557,716),4281=>array(66,0,563,716),4282=>array(35,-163,593,732),4283=>array(34,-7,736,716),4284=>array(66,-209,547,716),4285=>array(49,-15,614,732),4286=>array(66,0,563,716),4287=>array(-66,-171,660,716),4288=>array(45,-15,701,716),4289=>array(66,0,552,716),4290=>array(23,-15,571,716),4291=>array(34,0,539,716),4292=>array(58,-209,618,716),4293=>array(34,-15,758,716),4304=>array(36,-12,398,490),4305=>array(37,-12,519,721),4306=>array(42,-256,523,455),4307=>array(36,-251,836,454),4308=>array(20,-256,472,452),4309=>array(30,-256,498,451),4310=>array(24,-12,689,734),4311=>array(34,-16,834,454),4312=>array(34,-16,495,452),4313=>array(30,-256,498,451),4314=>array(36,-251,921,449),4315=>array(34,-12,486,728),4316=>array(66,-12,518,723),4317=>array(34,-33,700,449),4318=>array(34,-12,502,727),4319=>array(40,-256,508,466),4320=>array(34,-16,651,727),4321=>array(66,-12,512,716),4322=>array(34,-256,772,623),4323=>array(22,-257,745,449),4324=>array(34,-256,743,451),4325=>array(34,-257,436,716),4326=>array(36,-251,655,449),4327=>array(44,-257,446,452),4328=>array(34,-12,486,734),4329=>array(66,0,451,733),4330=>array(45,-256,534,452),4331=>array(34,-12,486,716),4332=>array(32,-256,562,734),4333=>array(34,-257,530,732),4334=>array(66,-12,518,716),4335=>array(32,-238,771,450),4336=>array(35,-12,514,736),4337=>array(40,-12,619,716),4338=>array(10,-12,549,453),4339=>array(23,-256,478,450),4340=>array(34,-257,448,495),4341=>array(43,-250,549,583),4342=>array(35,-256,788,715),4347=>array(87,-12,449,464),4352=>array(129,91,796,665),4353=>array(114,91,844,665),4354=>array(204,90,873,665),4355=>array(184,90,838,664),4356=>array(149,90,888,665),4357=>array(173,90,827,665),4358=>array(215,90,785,665),4359=>array(215,90,785,665),4360=>array(145,88,855,665),4361=>array(107,76,882,663),4362=>array(110,78,890,663),4363=>array(187,92,813,666),4364=>array(109,76,880,665),4365=>array(105,80,895,666),4366=>array(109,76,880,665),4367=>array(206,90,790,663),4368=>array(189,91,837,664),4369=>array(187,90,813,665),4370=>array(156,88,844,665),4371=>array(144,91,844,665),4372=>array(144,93,881,665),4373=>array(144,90,888,665),4374=>array(144,89,853,665),4375=>array(149,89,842,665),4376=>array(149,85,881,665),4377=>array(149,85,887,665),4378=>array(149,85,876,666),4379=>array(232,78,789,722),4380=>array(142,89,853,665),4381=>array(232,78,768,711),4382=>array(145,88,844,665),4383=>array(145,88,881,665),4384=>array(145,88,888,665),4385=>array(145,78,884,664),4386=>array(111,78,889,665),4387=>array(101,78,933,665),4388=>array(93,78,907,665),4389=>array(101,78,962,665),4390=>array(101,78,962,666),4391=>array(140,78,885,666),4392=>array(140,78,885,665),4393=>array(145,88,855,665),4394=>array(145,88,868,665),4395=>array(232,78,768,725),4396=>array(197,78,803,728),4397=>array(130,78,844,665),4398=>array(130,78,858,665),4399=>array(130,78,888,665),4400=>array(125,78,887,665),4401=>array(125,78,860,665),4402=>array(125,78,868,665),4403=>array(57,78,889,665),4404=>array(57,78,949,663),4405=>array(125,78,876,663),4406=>array(117,78,883,666),4407=>array(119,78,885,665),4408=>array(125,78,873,663),4409=>array(125,78,855,665),4410=>array(125,78,868,665),4411=>array(125,78,876,666),4412=>array(216,-1,702,716),4413=>array(92,-1,860,716),4414=>array(298,-1,784,716),4415=>array(140,-1,908,716),4416=>array(258,93,742,659),4417=>array(125,91,844,665),4418=>array(125,90,888,665),4419=>array(125,89,860,665),4420=>array(125,89,853,665),4421=>array(125,78,880,663),4422=>array(125,119,886,664),4423=>array(125,122,874,617),4424=>array(125,78,885,666),4425=>array(125,78,885,665),4426=>array(125,90,855,665),4427=>array(125,91,868,665),4428=>array(232,131,768,551),4429=>array(119,78,874,666),4430=>array(97,-1,903,720),4431=>array(92,-1,903,720),4432=>array(97,-1,903,720),4433=>array(97,-1,908,720),4434=>array(123,78,873,665),4435=>array(123,78,876,666),4436=>array(97,-1,903,814),4437=>array(97,-1,903,814),4438=>array(127,89,853,665),4439=>array(202,78,798,714),4440=>array(100,91,900,666),4441=>array(182,78,818,573),4449=>array(421,-64,711,842),4450=>array(345,-64,655,842),4451=>array(381,-64,676,842),4452=>array(340,-64,661,842),4453=>array(302,-65,597,841),4454=>array(186,-63,677,843),4455=>array(332,-64,626,842),4456=>array(226,-63,687,843),4457=>array(60,197,940,614),4458=>array(46,-64,931,842),4459=>array(51,-64,892,842),4460=>array(61,-64,857,842),4461=>array(60,197,940,615),4462=>array(79,76,921,554),4463=>array(68,-65,882,841),4464=>array(53,-63,912,843),4465=>array(70,-64,867,842),4466=>array(72,111,928,589),4467=>array(57,357,943,436),4468=>array(67,-64,867,842),4469=>array(462,-64,538,842),4470=>array(62,7,943,842),4471=>array(79,-64,936,842),4472=>array(62,7,943,842),4473=>array(62,-3,938,842),4474=>array(62,7,943,841),4475=>array(79,-64,920,841),4476=>array(57,22,943,841),4477=>array(62,7,943,842),4478=>array(79,-64,920,842),4479=>array(63,-70,907,841),4480=>array(63,-68,907,843),4481=>array(63,-68,907,843),4482=>array(62,22,943,783),4483=>array(62,-64,943,783),4484=>array(62,-70,907,842),4485=>array(62,-69,907,842),4486=>array(62,-70,907,842),4487=>array(62,22,943,782),4488=>array(62,-69,907,842),4489=>array(68,-69,936,842),4490=>array(68,-69,907,842),4491=>array(57,22,943,841),4492=>array(63,-68,907,843),4493=>array(79,-64,920,762),4494=>array(68,-69,936,842),4495=>array(68,-70,907,841),4496=>array(68,-63,912,843),4497=>array(68,-70,907,842),4498=>array(63,-68,907,843),4499=>array(79,-64,921,756),4500=>array(68,-64,867,842),4501=>array(79,-64,921,615),4502=>array(79,197,921,615),4503=>array(65,-64,921,842),4504=>array(321,-63,812,843),4505=>array(311,-63,772,843),4506=>array(62,22,943,842),4507=>array(79,-64,921,842),4508=>array(57,22,943,842),4509=>array(410,50,584,842),4510=>array(410,280,584,463),4511=>array(410,-65,719,841),4512=>array(79,-64,921,601),4513=>array(333,-69,667,842),4514=>array(329,280,671,463),4520=>array(129,91,796,665),4521=>array(114,91,844,665),4522=>array(114,78,880,665),4523=>array(204,90,873,665),4524=>array(144,78,880,666),4525=>array(144,91,876,666),4526=>array(184,90,838,664),4527=>array(173,90,827,665),4528=>array(149,85,842,665),4529=>array(149,85,852,665),4530=>array(149,85,853,665),4531=>array(149,78,880,665),4532=>array(149,85,855,665),4533=>array(149,85,868,665),4534=>array(149,85,876,666),4535=>array(215,90,785,665),4536=>array(215,90,785,665),4537=>array(145,78,880,664),4538=>array(107,76,882,663),4539=>array(110,78,890,663),4540=>array(187,92,813,666),4541=>array(109,76,880,665),4542=>array(109,76,880,665),4543=>array(206,90,790,663),4544=>array(189,91,837,664),4545=>array(187,90,813,665),4546=>array(156,88,844,665),4547=>array(114,85,887,665),4548=>array(75,78,913,665),4549=>array(144,91,844,665),4550=>array(144,90,888,665),4551=>array(144,78,880,665),4552=>array(144,93,886,665),4553=>array(144,90,855,665),4554=>array(149,89,842,665),4555=>array(149,85,887,665),4556=>array(76,78,961,665),4557=>array(149,85,881,665),4558=>array(149,85,888,665),4559=>array(76,85,944,666),4560=>array(149,85,887,665),4561=>array(76,85,920,665),4562=>array(76,78,973,665),4563=>array(76,78,973,665),4564=>array(76,85,946,666),4565=>array(149,85,848,728),4566=>array(80,78,960,665),4567=>array(149,85,886,665),4568=>array(149,85,873,665),4569=>array(149,85,878,666),4570=>array(142,89,844,665),4571=>array(142,85,887,665),4572=>array(142,89,853,665),4573=>array(142,78,880,665),4574=>array(84,78,960,665),4575=>array(142,89,886,665),4576=>array(142,78,885,665),4577=>array(142,89,876,666),4578=>array(232,78,768,711),4579=>array(145,85,887,665),4580=>array(145,88,868,665),4581=>array(145,88,876,666),4582=>array(232,78,768,725),4583=>array(130,78,844,665),4584=>array(130,78,888,665),4585=>array(125,78,887,665),4586=>array(125,78,868,665),4587=>array(258,93,742,659),4588=>array(125,91,844,665),4589=>array(72,91,913,665),4590=>array(125,122,874,617),4591=>array(125,90,873,663),4592=>array(232,131,768,551),4593=>array(125,78,880,663),4594=>array(125,119,886,664),4595=>array(127,89,853,665),4596=>array(202,78,798,714),4597=>array(116,91,881,666),4598=>array(116,85,887,666),4599=>array(116,89,852,666),4600=>array(116,89,853,666),4601=>array(182,78,818,573),7680=>array(-1,-210,668,716),7681=>array(38,-210,516,530),7682=>array(74,0,615,881),7683=>array(67,-12,517,881),7684=>array(74,-210,615,716),7685=>array(67,-210,517,716),7686=>array(74,-179,615,716),7687=>array(67,-179,517,716),7688=>array(51,-209,684,898),7689=>array(39,-196,491,728),7690=>array(80,0,672,881),7691=>array(36,-12,486,881),7692=>array(80,-210,672,716),7693=>array(36,-210,486,716),7694=>array(80,-179,672,716),7695=>array(36,-179,486,716),7696=>array(80,-205,672,716),7697=>array(36,-205,486,716),7698=>array(80,-210,672,716),7699=>array(36,-210,486,716),7700=>array(79,0,614,1050),7701=>array(39,-12,517,882),7702=>array(79,0,614,1050),7703=>array(39,-12,517,882),7704=>array(79,-210,614,716),7705=>array(39,-210,517,530),7706=>array(79,-185,614,716),7707=>array(39,-185,517,530),7708=>array(79,-205,614,902),7709=>array(39,-205,517,722),7710=>array(80,0,563,881),7711=>array(8,0,311,881),7712=>array(52,-12,714,865),7713=>array(34,-210,491,697),7714=>array(80,0,642,881),7715=>array(67,0,490,881),7716=>array(80,-210,642,716),7717=>array(67,-210,490,716),7718=>array(80,0,642,881),7719=>array(67,0,490,881),7720=>array(27,-205,642,716),7721=>array(2,-205,490,716),7722=>array(80,-200,642,716),7723=>array(67,-200,490,716),7724=>array(-28,-185,299,716),7725=>array(-58,-185,270,716),7726=>array(3,0,274,1066),7727=>array(5,0,276,896),7728=>array(73,0,665,898),7729=>array(66,0,496,898),7730=>array(73,-210,665,716),7731=>array(66,-210,496,716),7732=>array(73,-179,665,716),7733=>array(66,-179,496,716),7734=>array(75,-210,523,716),7735=>array(67,-210,158,716),7736=>array(75,-210,523,865),7737=>array(-41,-210,264,865),7738=>array(75,-179,523,716),7739=>array(-42,-179,262,716),7740=>array(75,-210,523,716),7741=>array(-39,-210,270,716),7742=>array(76,0,757,898),7743=>array(65,0,769,728),7744=>array(76,0,757,881),7745=>array(65,0,769,711),7746=>array(76,-210,757,716),7747=>array(65,-210,769,530),7748=>array(79,0,642,881),7749=>array(68,0,490,711),7750=>array(79,-210,642,716),7751=>array(68,-210,490,530),7752=>array(79,-179,642,716),7753=>array(68,-179,490,530),7754=>array(79,-210,642,716),7755=>array(68,-210,490,530),7756=>array(47,-12,732,1064),7757=>array(35,-12,521,902),7758=>array(47,-12,732,1035),7759=>array(35,-12,521,865),7760=>array(47,-12,732,1050),7761=>array(35,-12,521,882),7762=>array(47,-12,732,1050),7763=>array(35,-12,521,882),7764=>array(77,0,623,898),7765=>array(68,-199,518,728),7766=>array(77,0,623,881),7767=>array(68,-199,518,711),7768=>array(80,0,711,881),7769=>array(64,0,346,711),7770=>array(80,-210,711,716),7771=>array(64,-210,346,530),7772=>array(80,-210,711,865),7773=>array(14,-210,346,697),7774=>array(80,-179,711,716),7775=>array(8,-179,346,530),7776=>array(45,-12,615,881),7777=>array(31,-12,461,711),7778=>array(45,-210,615,728),7779=>array(31,-210,461,530),7780=>array(45,-12,615,939),7781=>array(31,-12,461,768),7782=>array(45,-12,615,1047),7783=>array(31,-12,461,877),7784=>array(45,-210,615,881),7785=>array(31,-210,461,711),7786=>array(22,0,589,881),7787=>array(17,-7,269,881),7788=>array(22,-210,589,716),7789=>array(17,-210,269,700),7790=>array(22,-179,589,716),7791=>array(-11,-179,293,700),7792=>array(22,-210,589,716),7793=>array(6,-210,315,700),7794=>array(79,-210,642,716),7795=>array(66,-210,487,518),7796=>array(79,-185,642,716),7797=>array(66,-185,487,518),7798=>array(79,-210,642,716),7799=>array(66,-210,487,518),7800=>array(79,-12,642,1072),7801=>array(66,-12,487,902),7802=>array(79,-12,642,1002),7803=>array(66,-12,487,846),7804=>array(6,0,660,886),7805=>array(13,0,488,716),7806=>array(6,-210,660,716),7807=>array(13,-210,488,518),7808=>array(12,0,933,898),7809=>array(5,0,717,728),7810=>array(12,0,933,898),7811=>array(5,0,717,728),7812=>array(12,0,933,881),7813=>array(5,0,717,711),7814=>array(12,0,933,881),7815=>array(5,0,717,711),7816=>array(12,-210,933,716),7817=>array(5,-210,717,518),7818=>array(5,0,661,881),7819=>array(7,0,493,711),7820=>array(5,0,661,881),7821=>array(7,0,493,711),7822=>array(5,0,661,881),7823=>array(16,-210,492,711),7824=>array(18,0,584,898),7825=>array(20,0,479,728),7826=>array(18,-210,584,716),7827=>array(20,-210,479,518),7828=>array(18,-179,584,716),7829=>array(20,-179,479,518),7830=>array(67,-179,490,716),7831=>array(1,-7,272,881),7832=>array(5,0,717,752),7833=>array(16,-210,492,752),7834=>array(38,-12,557,758),7835=>array(8,0,311,881),7840=>array(-1,-210,668,716),7841=>array(38,-210,516,530),7842=>array(-1,0,668,934),7843=>array(38,-12,516,756),7844=>array(-1,0,668,978),7845=>array(38,-12,586,808),7846=>array(-1,0,668,978),7847=>array(-30,-12,516,808),7848=>array(-1,0,668,996),7849=>array(38,-12,573,826),7850=>array(-1,0,668,1058),7851=>array(38,-12,516,888),7852=>array(-1,-210,668,898),7853=>array(38,-210,516,728),7854=>array(-1,0,668,1039),7855=>array(38,-12,516,859),7856=>array(-1,0,668,1039),7857=>array(38,-12,516,859),7858=>array(-1,0,668,1074),7859=>array(38,-12,516,895),7860=>array(-1,0,668,1060),7861=>array(38,-12,516,880),7862=>array(-1,-210,668,902),7863=>array(38,-210,516,722),7864=>array(79,-210,614,716),7865=>array(39,-210,517,530),7866=>array(79,0,614,936),7867=>array(39,-12,517,756),7868=>array(79,0,614,884),7869=>array(39,-12,517,716),7870=>array(79,0,652,978),7871=>array(39,-12,586,808),7872=>array(34,0,614,978),7873=>array(-30,-12,517,808),7874=>array(79,0,638,996),7875=>array(39,-12,573,826),7876=>array(79,0,614,1056),7877=>array(39,-12,517,886),7878=>array(79,-210,614,900),7879=>array(39,-210,517,728),7880=>array(33,0,245,936),7881=>array(33,0,245,756),7882=>array(92,-210,187,716),7883=>array(67,-210,158,716),7884=>array(47,-210,732,728),7885=>array(35,-210,521,530),7886=>array(47,-12,732,936),7887=>array(35,-12,521,756),7888=>array(47,-12,732,978),7889=>array(35,-12,586,808),7890=>array(47,-12,732,978),7891=>array(-30,-12,521,808),7892=>array(47,-12,732,996),7893=>array(35,-12,573,826),7894=>array(47,-12,732,1056),7895=>array(35,-12,521,886),7896=>array(47,-210,732,900),7897=>array(35,-210,521,728),7898=>array(47,-12,776,900),7899=>array(35,-12,555,728),7900=>array(47,-12,776,900),7901=>array(35,-12,555,728),7902=>array(47,-12,776,936),7903=>array(35,-12,555,756),7904=>array(47,-12,776,884),7905=>array(35,-12,555,716),7906=>array(47,-210,776,768),7907=>array(35,-210,555,606),7908=>array(79,-210,642,716),7909=>array(66,-210,487,518),7910=>array(79,-12,642,936),7911=>array(66,-12,487,756),7912=>array(79,-12,776,900),7913=>array(66,-12,625,728),7914=>array(79,-12,776,900),7915=>array(66,-12,625,728),7916=>array(79,-12,776,936),7917=>array(66,-12,625,756),7918=>array(79,-12,776,884),7919=>array(66,-12,625,716),7920=>array(79,-210,776,768),7921=>array(66,-210,625,620),7922=>array(5,0,661,900),7923=>array(16,-210,492,728),7924=>array(5,-210,661,716),7925=>array(16,-210,492,518),7926=>array(5,0,661,936),7927=>array(16,-210,492,756),7928=>array(5,0,661,884),7929=>array(16,-210,492,716),7936=>array(35,-12,541,763),7937=>array(35,-12,541,763),7938=>array(35,-12,541,763),7939=>array(35,-12,541,763),7940=>array(35,-12,541,763),7941=>array(35,-12,541,763),7942=>array(35,-12,541,847),7943=>array(35,-12,541,847),7944=>array(-1,0,668,763),7945=>array(-1,0,668,763),7946=>array(-50,0,681,763),7947=>array(-50,0,681,763),7948=>array(-46,0,681,763),7949=>array(-38,0,681,763),7950=>array(-43,0,719,763),7951=>array(-43,0,719,763),7952=>array(29,-12,405,763),7953=>array(29,-12,405,763),7954=>array(29,-12,405,763),7955=>array(29,-12,405,763),7956=>array(29,-12,405,763),7957=>array(29,-12,405,763),7960=>array(-43,0,639,763),7961=>array(-44,0,639,763),7962=>array(-43,0,770,763),7963=>array(-43,0,770,763),7964=>array(-71,0,770,763),7965=>array(-63,0,769,763),7968=>array(68,-199,490,763),7969=>array(68,-199,490,763),7970=>array(68,-199,490,763),7971=>array(68,-199,490,763),7972=>array(68,-199,490,763),7973=>array(68,-199,490,763),7974=>array(68,-199,490,847),7975=>array(68,-199,490,847),7976=>array(-43,0,667,763),7977=>array(-44,0,667,763),7978=>array(-43,0,798,763),7979=>array(-43,0,798,763),7980=>array(-71,0,798,763),7981=>array(-63,0,798,763),7982=>array(-43,0,843,763),7983=>array(-43,0,843,763),7984=>array(59,0,162,763),7985=>array(53,0,156,763),7986=>array(-13,0,236,763),7987=>array(-13,0,236,763),7988=>array(-15,0,251,763),7989=>array(-15,0,243,763),7990=>array(-36,0,253,847),7991=>array(-36,0,253,847),7992=>array(-43,0,212,763),7993=>array(-44,0,212,763),7994=>array(-43,0,343,763),7995=>array(-43,0,343,763),7996=>array(-71,0,343,763),7997=>array(-63,0,343,763),7998=>array(-43,0,388,763),7999=>array(-43,0,388,763),8000=>array(35,-12,521,763),8001=>array(35,-12,521,763),8002=>array(35,-12,521,763),8003=>array(35,-12,521,763),8004=>array(35,-12,521,763),8005=>array(35,-12,521,763),8008=>array(-30,-12,732,763),8009=>array(-38,-12,732,763),8010=>array(-43,-12,848,763),8011=>array(-31,-12,848,763),8012=>array(-37,-12,848,763),8013=>array(-36,-12,848,763),8016=>array(68,-12,483,763),8017=>array(68,-12,483,763),8018=>array(68,-12,483,763),8019=>array(68,-12,483,763),8020=>array(68,-12,483,763),8021=>array(68,-12,483,763),8022=>array(68,-12,483,847),8023=>array(68,-12,483,847),8025=>array(-43,0,771,763),8027=>array(-43,0,887,763),8029=>array(-43,0,879,763),8031=>array(-43,0,934,763),8032=>array(35,-12,731,763),8033=>array(35,-12,731,763),8034=>array(35,-12,731,763),8035=>array(35,-12,731,763),8036=>array(35,-12,731,763),8037=>array(35,-12,731,763),8038=>array(35,-12,731,847),8039=>array(35,-12,731,847),8040=>array(-30,0,706,763),8041=>array(-38,0,706,763),8042=>array(-43,0,822,763),8043=>array(-43,0,822,763),8044=>array(-43,0,816,763),8045=>array(-43,0,815,763),8046=>array(-43,0,859,763),8047=>array(-43,0,859,763),8048=>array(35,-12,541,736),8049=>array(35,-12,541,736),8050=>array(29,-12,405,736),8051=>array(29,-12,405,736),8052=>array(68,-199,490,736),8053=>array(68,-199,490,736),8054=>array(35,0,155,736),8055=>array(67,0,187,736),8056=>array(35,-12,521,736),8057=>array(35,-12,521,736),8058=>array(68,-12,483,736),8059=>array(68,-12,483,736),8060=>array(35,-12,731,736),8061=>array(35,-12,731,736),8064=>array(35,-208,541,763),8065=>array(35,-208,541,763),8066=>array(35,-208,541,763),8067=>array(35,-208,541,763),8068=>array(35,-208,541,763),8069=>array(35,-208,541,763),8070=>array(35,-208,541,847),8071=>array(35,-208,541,847),8072=>array(-1,-208,668,763),8073=>array(-1,-208,668,763),8074=>array(-50,-208,681,763),8075=>array(-50,-208,681,763),8076=>array(-46,-208,681,763),8077=>array(-38,-208,681,763),8078=>array(-43,-208,719,763),8079=>array(-43,-208,719,763),8080=>array(68,-208,490,763),8081=>array(68,-208,490,763),8082=>array(68,-208,490,763),8083=>array(68,-208,490,763),8084=>array(68,-208,490,763),8085=>array(68,-208,490,763),8086=>array(68,-208,490,847),8087=>array(68,-208,490,847),8088=>array(-43,-208,667,763),8089=>array(-44,-208,667,763),8090=>array(-43,-208,798,763),8091=>array(-43,-208,798,763),8092=>array(-71,-208,798,763),8093=>array(-63,-208,798,763),8094=>array(-43,-208,843,763),8095=>array(-43,-208,843,763),8096=>array(35,-208,731,763),8097=>array(35,-208,731,763),8098=>array(35,-208,731,763),8099=>array(35,-208,731,763),8100=>array(35,-208,731,763),8101=>array(35,-208,731,763),8102=>array(35,-208,731,847),8103=>array(35,-208,731,847),8104=>array(-30,-208,706,763),8105=>array(-38,-208,706,763),8106=>array(-43,-208,822,763),8107=>array(-43,-208,822,763),8108=>array(-43,-208,816,763),8109=>array(-43,-208,815,763),8110=>array(-43,-208,859,763),8111=>array(-43,-208,859,763),8112=>array(35,-12,541,722),8113=>array(35,-12,541,697),8114=>array(35,-208,541,736),8115=>array(35,-208,541,530),8116=>array(35,-208,541,736),8118=>array(35,-12,541,717),8119=>array(35,-208,541,717),8120=>array(-1,0,668,889),8121=>array(-1,0,668,835),8122=>array(-1,0,668,736),8123=>array(-1,0,668,736),8124=>array(-1,-208,668,716),8125=>array(86,579,189,763),8126=>array(111,-208,289,-42),8127=>array(86,579,189,763),8128=>array(-5,590,284,717),8129=>array(-5,591,284,819),8130=>array(68,-208,490,736),8131=>array(68,-208,490,530),8132=>array(68,-208,490,736),8134=>array(68,-199,490,717),8135=>array(68,-208,490,717),8136=>array(-43,0,640,736),8137=>array(-43,0,651,736),8138=>array(-43,0,668,736),8139=>array(-43,0,679,736),8140=>array(80,-208,642,716),8141=>array(16,579,265,763),8142=>array(16,579,282,763),8143=>array(-5,583,284,847),8144=>array(-34,0,255,722),8145=>array(-41,0,264,697),8146=>array(-55,0,276,736),8147=>array(-55,0,276,736),8150=>array(-34,0,255,717),8151=>array(-32,0,257,819),8152=>array(-5,0,284,889),8153=>array(-14,0,291,835),8154=>array(-43,0,213,736),8155=>array(-43,0,213,736),8157=>array(16,579,265,763),8158=>array(16,579,274,763),8159=>array(-5,583,284,847),8160=>array(68,-12,483,722),8161=>array(68,-12,483,697),8162=>array(68,-12,483,736),8163=>array(68,-12,483,736),8164=>array(66,-199,536,763),8165=>array(66,-199,536,763),8166=>array(68,-12,483,717),8167=>array(68,-12,483,819),8168=>array(5,0,661,889),8169=>array(5,0,661,835),8170=>array(-43,0,736,736),8171=>array(-43,0,740,736),8172=>array(-43,0,649,763),8173=>array(-27,600,304,736),8174=>array(-27,600,304,736),8175=>array(70,600,189,736),8178=>array(35,-208,731,736),8179=>array(35,-208,731,518),8180=>array(35,-208,731,736),8182=>array(35,-12,731,717),8183=>array(35,-208,731,717),8184=>array(-17,-12,732,736),8185=>array(-6,-12,732,736),8186=>array(-17,0,706,736),8187=>array(-6,0,706,736),8188=>array(52,-208,706,728),8189=>array(84,600,203,736),8190=>array(88,579,191,763),8208=>array(32,215,301,303),8209=>array(32,215,301,303),8210=>array(-6,223,562,295),8211=>array(-6,223,506,295),8212=>array(-6,223,1006,295),8213=>array(26,223,538,295),8214=>array(92,-85,336,716),8215=>array(-6,-165,506,-35),8216=>array(64,494,166,728),8217=>array(56,482,158,716),8218=>array(53,-132,155,102),8219=>array(64,482,166,716),8220=>array(43,494,297,728),8221=>array(36,482,290,716),8222=>array(36,-132,290,102),8223=>array(44,482,298,716),8224=>array(39,-169,517,699),8225=>array(39,-169,517,706),8226=>array(51,227,299,474),8227=>array(52,197,321,504),8228=>array(89,0,189,100),8229=>array(89,0,467,100),8230=>array(117,0,883,100),8231=>array(89,302,189,402),8240=>array(18,-27,982,728),8241=>array(18,-27,1310,728),8242=>array(46,462,192,716),8243=>array(46,462,342,716),8244=>array(46,462,492,716),8245=>array(30,462,176,716),8246=>array(30,462,326,716),8247=>array(30,462,476,716),8248=>array(30,-175,282,32),8249=>array(44,35,271,481),8250=>array(62,35,289,481),8251=>array(116,-125,883,641),8252=>array(85,0,387,716),8253=>array(46,0,508,747),8254=>array(-6,740,506,790),8255=>array(3,-203,941,4),8256=>array(3,578,941,785),8257=>array(30,-175,282,146),8258=>array(33,-3,786,728),8259=>array(32,185,301,333),8260=>array(-222,-25,393,732),8261=>array(68,-199,262,716),8262=>array(16,-199,210,716),8304=>array(15,349,318,725),8308=>array(11,358,319,725),8309=>array(16,349,313,716),8310=>array(9,349,315,725),8311=>array(36,358,304,716),8312=>array(22,349,312,725),8313=>array(18,349,323,725),8314=>array(37,395,296,654),8315=>array(37,496,296,553),8316=>array(37,436,296,613),8317=>array(32,209,195,769),8318=>array(16,209,178,769),8319=>array(51,358,293,646),8320=>array(15,-24,318,352),8321=>array(52,-15,232,352),8322=>array(12,-15,316,352),8323=>array(16,-24,315,352),8324=>array(11,-15,319,352),8325=>array(16,-24,313,343),8326=>array(9,-24,315,352),8327=>array(36,-15,304,343),8328=>array(22,-24,312,352),8329=>array(18,-24,323,352),8330=>array(37,22,296,281),8331=>array(37,123,296,180),8332=>array(37,63,296,240),8333=>array(32,-164,195,396),8334=>array(16,-164,178,396),8352=>array(20,0,547,719),8353=>array(51,-63,525,782),8354=>array(45,-12,533,728),8355=>array(80,0,554,716),8356=>array(13,-14,528,728),8357=>array(65,-71,769,652),8358=>array(21,0,535,719),8359=>array(21,0,539,716),8360=>array(18,-12,986,716),8361=>array(8,0,929,716),8362=>array(72,0,712,518),8363=>array(67,0,514,723),8364=>array(-14,-12,541,728),8400=>array(28,574,552,716),8401=>array(48,574,572,716),8402=>array(264,-194,336,706),8403=>array(264,-12,336,524),8404=>array(34,419,668,646),8405=>array(32,419,666,646),8406=>array(28,504,555,716),8407=>array(45,504,572,716),8408=>array(146,102,454,410),8409=>array(146,102,465,421),8410=>array(146,91,465,410),8411=>array(112,611,488,707),8412=>array(42,611,558,707),8413=>array(63,-131,837,643),8414=>array(93,-101,807,613),8415=>array(9,-186,891,697),8416=>array(63,-131,837,643),8417=>array(28,504,672,716),8448=>array(46,-27,825,728),8449=>array(46,-27,822,728),8450=>array(37,-15,632,677),8451=>array(44,-12,983,728),8452=>array(41,0,588,662),8453=>array(53,-27,836,728),8454=>array(53,-27,823,728),8455=>array(42,-15,480,677),8456=>array(30,-15,630,677),8457=>array(44,0,873,725),8458=>array(-25,-201,523,327),8459=>array(23,-9,1078,665),8460=>array(46,-20,940,698),8461=>array(19,0,703,662),8462=>array(19,-12,458,694),8463=>array(19,-12,458,694),8464=>array(8,-201,834,654),8465=>array(26,-20,498,677),8466=>array(48,-8,842,664),8467=>array(5,-5,288,627),8468=>array(3,-12,739,716),8469=>array(-12,-11,710,662),8470=>array(79,0,1031,716),8471=>array(0,-9,737,728),8472=>array(48,-216,701,516),8473=>array(19,0,524,662),8474=>array(37,-198,685,677),8475=>array(71,-13,951,658),8476=>array(46,-20,747,686),8477=>array(19,0,677,662),8478=>array(19,0,677,662),8479=>array(19,-176,677,817),8480=>array(93,311,866,723),8481=>array(100,318,1085,716),8482=>array(100,318,861,716),8483=>array(10,-176,711,817),8484=>array(11,0,581,662),8485=>array(50,-192,494,690),8486=>array(28,0,740,677),8487=>array(28,-15,740,662),8488=>array(28,-194,644,687),8489=>array(2,0,245,530),8490=>array(73,0,665,716),8491=>array(-1,0,668,922),8492=>array(105,-5,951,659),8493=>array(53,-20,627,697),8494=>array(35,-12,521,530),8495=>array(31,-4,398,328),8496=>array(75,-6,671,666),8497=>array(35,-6,885,668),8498=>array(47,0,530,716),8499=>array(36,-12,1214,661),8500=>array(37,-6,379,318),8501=>array(64,-19,649,716),8502=>array(67,0,631,716),8503=>array(25,0,325,716),8504=>array(72,-18,630,716),8531=>array(52,-25,815,732),8532=>array(12,-25,815,732),8533=>array(52,-25,813,732),8534=>array(12,-25,813,732),8535=>array(16,-25,813,732),8536=>array(11,-25,813,732),8537=>array(52,-25,813,732),8538=>array(16,-25,813,732),8539=>array(52,-25,804,732),8540=>array(16,-25,804,732),8541=>array(16,-25,804,732),8542=>array(73,-25,804,732),8543=>array(52,-25,727,732),8544=>array(92,0,187,716),8545=>array(92,0,464,716),8546=>array(92,0,741,716),8547=>array(92,0,934,716),8548=>array(6,0,660,716),8549=>array(6,0,843,716),8550=>array(2,0,960,716),8551=>array(2,0,1197,716),8552=>array(92,0,940,716),8553=>array(5,0,661,716),8554=>array(5,0,853,716),8555=>array(5,0,964,716),8556=>array(75,0,523,716),8557=>array(51,-12,683,728),8558=>array(80,0,672,716),8559=>array(76,0,757,716),8560=>array(67,0,155,716),8561=>array(67,0,377,716),8562=>array(67,0,599,716),8563=>array(67,0,697,716),8564=>array(13,0,488,518),8565=>array(13,0,633,716),8566=>array(13,0,855,716),8567=>array(13,0,1077,716),8568=>array(67,0,708,716),8569=>array(7,0,493,518),8570=>array(7,0,645,716),8571=>array(7,0,867,716),8572=>array(67,0,155,716),8573=>array(39,-12,491,530),8574=>array(36,-12,486,716),8575=>array(65,0,769,530),8576=>array(47,0,936,716),8577=>array(80,0,672,716),8578=>array(47,0,936,716),8592=>array(40,100,673,412),8593=>array(201,0,513,662),8594=>array(40,100,673,412),8595=>array(201,0,513,662),8596=>array(40,100,673,412),8597=>array(201,0,513,662),8598=>array(100,102,586,588),8599=>array(128,102,614,588),8600=>array(128,74,614,560),8601=>array(100,74,586,560),8602=>array(40,100,673,412),8603=>array(40,100,673,412),8604=>array(40,100,674,412),8605=>array(39,100,673,412),8606=>array(40,100,673,412),8607=>array(201,0,513,662),8608=>array(40,100,673,412),8609=>array(201,0,513,662),8610=>array(40,100,673,412),8611=>array(40,100,673,412),8612=>array(40,100,673,412),8613=>array(201,0,513,662),8614=>array(40,100,673,412),8615=>array(201,0,513,662),8616=>array(201,0,513,662),8617=>array(40,100,673,482),8618=>array(40,100,673,482),8619=>array(40,100,673,500),8620=>array(40,100,673,500),8621=>array(40,100,774,412),8622=>array(40,100,773,412),8623=>array(199,0,520,662),8624=>array(120,71,553,603),8625=>array(160,71,593,603),8626=>array(120,59,553,591),8627=>array(160,59,593,591),8628=>array(97,94,629,527),8629=>array(120,59,553,591),8630=>array(67,181,638,497),8631=>array(75,181,646,497),8632=>array(81,102,633,662),8633=>array(40,-56,673,568),8634=>array(60,21,740,701),8635=>array(60,21,740,701),8636=>array(40,232,673,412),8637=>array(40,100,673,280),8638=>array(333,0,513,662),8639=>array(201,0,381,662),8640=>array(40,232,673,412),8641=>array(40,100,673,280),8642=>array(333,0,513,662),8643=>array(201,0,381,662),8644=>array(40,-56,673,568),8645=>array(45,0,669,662),8646=>array(40,-56,673,568),8647=>array(40,-56,673,568),8648=>array(45,0,669,662),8649=>array(40,-56,673,568),8650=>array(45,0,669,662),8651=>array(39,30,672,482),8652=>array(40,30,673,482),8653=>array(40,40,673,472),8654=>array(40,40,910,472),8655=>array(40,40,673,472),8656=>array(40,40,673,472),8657=>array(141,0,573,662),8658=>array(40,40,673,472),8659=>array(141,0,573,662),8660=>array(40,40,823,472),8661=>array(141,0,573,783),8662=>array(100,0,688,588),8663=>array(26,0,614,588),8664=>array(26,0,614,588),8665=>array(100,0,688,588),8666=>array(40,40,673,472),8667=>array(40,40,673,472),8668=>array(40,100,773,412),8669=>array(40,100,773,412),8670=>array(201,0,513,662),8671=>array(201,0,513,662),8672=>array(40,100,673,412),8673=>array(201,0,513,662),8674=>array(40,100,673,412),8675=>array(201,0,513,662),8676=>array(40,100,673,412),8677=>array(40,100,673,412),8678=>array(40,40,673,472),8679=>array(141,0,573,662),8680=>array(40,40,673,472),8681=>array(141,0,573,662),8682=>array(141,0,573,662),8704=>array(27,0,573,689),8705=>array(80,-60,528,702),8706=>array(32,-15,486,695),8707=>array(115,0,475,689),8708=>array(115,-73,475,762),8709=>array(46,-23,755,686),8710=>array(6,0,608,688),8711=>array(6,0,608,688),8712=>array(43,33,498,480),8713=>array(43,-57,498,570),8714=>array(89,78,453,435),8715=>array(51,33,506,480),8716=>array(51,-57,506,570),8717=>array(96,78,460,435),8718=>array(98,0,451,512),8719=>array(25,-101,803,751),8720=>array(25,-101,803,751),8721=>array(17,-101,695,752),8722=>array(55,312,529,394),8723=>array(55,0,529,611),8724=>array(55,0,529,627),8725=>array(-222,-25,393,732),8726=>array(0,-24,278,716),8727=>array(33,194,356,499),8728=>array(65,207,335,478),8729=>array(65,207,335,478),8730=>array(41,-19,549,782),8731=>array(41,-19,549,782),8732=>array(41,-19,549,782),8733=>array(75,128,447,384),8734=>array(20,99,529,414),8735=>array(55,0,529,474),8736=>array(55,0,529,474),8737=>array(55,0,529,474),8738=>array(55,-98,444,572),8739=>array(92,-199,168,716),8740=>array(92,-199,352,716),8741=>array(92,-199,326,716),8742=>array(92,-199,510,716),8743=>array(20,0,542,568),8744=>array(20,0,542,568),8745=>array(50,0,512,568),8746=>array(50,0,512,568),8747=>array(63,-271,434,1022),8748=>array(63,-271,734,1022),8749=>array(63,-271,1034,1022),8750=>array(33,-271,459,1022),8751=>array(33,-271,759,1022),8752=>array(33,-271,1059,1022),8753=>array(33,-271,488,1022),8754=>array(33,-271,488,1022),8755=>array(33,-271,498,1022),8756=>array(42,0,521,528),8757=>array(42,0,521,528),8758=>array(161,0,260,528),8759=>array(42,0,521,528),8760=>array(55,312,529,567),8761=>array(55,139,529,567),8762=>array(55,139,529,567),8763=>array(55,139,529,567),8764=>array(55,279,529,424),8765=>array(55,279,529,424),8766=>array(35,212,539,496),8767=>array(40,72,544,636),8768=>array(139,0,284,592),8769=>array(55,171,529,533),8770=>array(55,202,529,535),8771=>array(55,203,529,536),8772=>array(55,91,529,613),8773=>array(55,123,529,584),8774=>array(55,51,529,614),8775=>array(55,51,529,633),8776=>array(55,171,529,533),8777=>array(55,81,529,603),8778=>array(55,123,529,584),8779=>array(55,97,529,584),8780=>array(35,53,539,654),8781=>array(55,155,529,551),8782=>array(55,58,529,648),8783=>array(55,203,529,648),8784=>array(55,203,529,676),8785=>array(55,59,529,647),8786=>array(55,59,529,647),8787=>array(55,59,529,647),8788=>array(55,195,682,511),8789=>array(55,195,682,511),8790=>array(55,189,529,518),8791=>array(55,0,529,617),8792=>array(55,0,529,518),8793=>array(55,0,529,630),8794=>array(55,0,529,630),8795=>array(55,0,529,651),8796=>array(55,0,529,701),8797=>array(55,0,529,605),8798=>array(55,0,529,532),8799=>array(55,0,529,601),8800=>array(55,103,529,603),8801=>array(55,123,529,557),8802=>array(55,23,529,657),8803=>array(55,35,529,645),8804=>array(55,55,529,650),8805=>array(55,55,529,650),8806=>array(55,0,529,783),8807=>array(55,0,529,783),8808=>array(55,-85,529,783),8809=>array(55,-85,529,783),8810=>array(55,111,914,595),8811=>array(55,111,914,595),8812=>array(143,-210,441,728),8813=>array(55,103,529,603),8814=>array(55,23,529,657),8815=>array(55,23,529,657),8816=>array(55,-141,529,657),8817=>array(55,-141,529,657),8818=>array(55,-1,529,656),8819=>array(55,-1,529,656),8820=>array(55,-91,529,718),8821=>array(55,-91,529,718),8822=>array(55,-27,529,821),8823=>array(55,-27,529,821),8824=>array(55,-27,529,821),8825=>array(55,-27,529,821),8826=>array(55,111,529,595),8827=>array(55,111,529,595),8828=>array(55,-33,529,595),8829=>array(55,-33,529,595),8830=>array(55,-1,529,656),8831=>array(55,-1,529,656),8832=>array(55,23,529,657),8833=>array(55,23,529,657),8834=>array(55,122,623,584),8835=>array(55,122,623,584),8836=>array(55,22,623,684),8837=>array(55,22,623,684),8838=>array(55,0,623,626),8839=>array(55,0,623,626),8840=>array(55,-100,623,726),8841=>array(55,-100,623,726),8842=>array(55,-100,623,626),8843=>array(55,-100,623,626),8844=>array(50,0,512,568),8845=>array(50,0,512,568),8846=>array(50,0,512,568),8847=>array(55,122,623,584),8848=>array(55,122,623,584),8849=>array(55,0,623,626),8850=>array(55,0,623,626),8851=>array(50,0,512,568),8852=>array(50,0,512,568),8853=>array(59,-85,741,597),8854=>array(59,-85,741,597),8855=>array(59,-85,741,597),8856=>array(59,-85,741,597),8857=>array(59,-85,741,597),8858=>array(59,-85,741,597),8859=>array(59,-85,741,597),8860=>array(59,-85,741,597),8861=>array(59,-85,741,597),8862=>array(60,0,741,681),8863=>array(60,0,741,681),8864=>array(60,0,741,681),8865=>array(60,0,741,681),8866=>array(60,0,531,512),8867=>array(18,0,489,512),8868=>array(18,0,531,512),8869=>array(18,0,531,512),8870=>array(60,0,381,512),8871=>array(60,0,381,512),8872=>array(60,0,531,512),8873=>array(60,0,531,512),8874=>array(60,0,531,512),8875=>array(60,0,654,512),8876=>array(60,0,531,513),8877=>array(60,0,531,513),8878=>array(60,0,531,513),8879=>array(60,0,654,513),8880=>array(18,-54,531,566),8881=>array(18,-54,531,566),8882=>array(18,0,531,512),8883=>array(18,0,531,512),8884=>array(18,-51,531,562),8885=>array(18,-51,531,562),8886=>array(40,153,673,359),8887=>array(40,153,673,359),8888=>array(40,153,673,359),8889=>array(18,0,531,512),8890=>array(88,0,461,632),8891=>array(50,0,534,638),8892=>array(50,0,534,638),8893=>array(50,0,534,638),8894=>array(55,0,529,474),8895=>array(55,0,529,474),8896=>array(20,0,542,568),8897=>array(20,0,542,568),8898=>array(50,0,512,568),8899=>array(50,0,512,568),8900=>array(156,106,395,406),8901=>array(55,186,195,326),8902=>array(39,39,511,488),8903=>array(30,9,620,502),8904=>array(29,-64,601,576),8905=>array(29,-64,601,576),8906=>array(29,-64,601,576),8907=>array(29,-64,601,576),8908=>array(29,-64,601,576),8909=>array(55,203,529,536),8910=>array(18,0,542,568),8911=>array(18,0,542,568),8912=>array(56,84,623,626),8913=>array(56,84,623,626),8914=>array(63,0,605,567),8915=>array(63,0,605,567),8916=>array(50,0,512,716),8917=>array(55,-199,529,716),8918=>array(55,111,529,595),8919=>array(55,111,529,595),8920=>array(55,111,1299,595),8921=>array(55,111,1299,595),8922=>array(55,-217,529,927),8923=>array(55,-217,529,927),8924=>array(55,55,529,650),8925=>array(55,55,529,650),8926=>array(55,-33,529,595),8927=>array(55,-33,529,595),8928=>array(55,-141,529,657),8929=>array(55,-141,529,657),8930=>array(55,-100,623,726),8931=>array(55,-100,623,726),8932=>array(55,-100,623,626),8933=>array(55,-100,623,626),8934=>array(55,-71,529,656),8935=>array(55,-71,529,656),8936=>array(55,-71,529,656),8937=>array(55,-71,529,656),8938=>array(55,23,529,657),8939=>array(55,23,529,657),8940=>array(55,-45,529,712),8941=>array(55,-45,529,712),8942=>array(89,0,189,766),8943=>array(117,333,883,433),8944=>array(117,0,883,766),8945=>array(117,0,883,766),8960=>array(60,41,490,471),8962=>array(51,24,498,486),8963=>array(129,180,419,395),8964=>array(129,117,419,332),8965=>array(78,130,471,441),8966=>array(78,130,471,565),8967=>array(191,-192,359,693),8968=>array(103,58,346,694),8969=>array(103,58,346,694),8970=>array(103,-192,346,444),8971=>array(103,-192,346,444),8972=>array(251,-40,571,280),8973=>array(-22,-40,299,280),8974=>array(251,232,571,552),8975=>array(-22,232,299,552),8976=>array(49,163,511,403),8977=>array(83,64,467,448),8978=>array(59,156,741,497),8979=>array(59,156,741,497),8980=>array(34,100,516,441),8981=>array(27,9,490,471),8982=>array(26,-102,523,614),8983=>array(18,-51,632,563),8984=>array(63,0,717,654),8985=>array(49,109,511,349),8986=>array(45,-20,505,532),8987=>array(103,0,447,512),8988=>array(111,140,391,420),8989=>array(158,140,439,420),8990=>array(111,92,391,372),8991=>array(158,92,439,372),8992=>array(180,-218,434,752),8993=>array(63,-188,313,782),8994=>array(17,159,696,341),8995=>array(17,171,696,353),8996=>array(18,226,982,547),8997=>array(18,0,982,512),8998=>array(90,0,948,600),8999=>array(90,0,910,600),9000=>array(90,0,910,600),9001=>array(32,-184,299,694),9002=>array(30,-184,297,694),9003=>array(52,0,910,600),9004=>array(57,6,493,509),9005=>array(13,77,537,435),9006=>array(100,108,465,400),9007=>array(38,132,511,380),9008=>array(38,0,504,525),9009=>array(81,62,509,450),9010=>array(35,50,531,462),9011=>array(35,186,531,392),9012=>array(51,84,498,419),9013=>array(51,84,498,419),9014=>array(60,0,540,559),9015=>array(140,0,460,559),9016=>array(60,0,540,559),9017=>array(60,0,540,559),9018=>array(60,0,540,559),9019=>array(60,0,540,559),9020=>array(60,0,540,559),9021=>array(104,0,496,559),9022=>array(60,39,540,519),9023=>array(84,0,517,559),9024=>array(83,0,516,559),9025=>array(60,0,540,559),9026=>array(60,0,540,559),9027=>array(60,0,540,559),9028=>array(60,0,540,559),9029=>array(13,0,556,559),9030=>array(44,0,587,559),9031=>array(60,0,540,559),9032=>array(60,0,540,559),9033=>array(104,0,496,559),9034=>array(60,0,540,559),9035=>array(122,0,478,559),9036=>array(60,0,540,559),9037=>array(60,0,540,559),9038=>array(60,0,540,559),9039=>array(60,0,540,559),9040=>array(60,0,540,559),9041=>array(60,0,540,559),9042=>array(122,0,478,559),9043=>array(60,0,540,559),9044=>array(60,0,540,559),9045=>array(60,0,540,559),9046=>array(60,0,540,559),9047=>array(60,0,540,559),9048=>array(160,0,440,559),9049=>array(60,0,540,559),9050=>array(60,0,540,559),9051=>array(60,0,540,397),9052=>array(60,0,540,475),9053=>array(60,0,540,559),9054=>array(60,0,540,559),9055=>array(60,39,540,519),9056=>array(60,0,540,559),9057=>array(60,0,540,559),9058=>array(122,0,478,559),9059=>array(153,157,447,509),9060=>array(153,161,447,524),9061=>array(104,33,496,559),9062=>array(60,0,540,559),9063=>array(54,0,542,559),9064=>array(50,131,549,464),9065=>array(148,122,452,559),9066=>array(160,122,440,478),9067=>array(103,68,502,508),9068=>array(93,-14,504,573),9069=>array(50,0,549,559),9070=>array(160,-136,440,559),9071=>array(60,0,540,559),9072=>array(60,0,540,559),9073=>array(51,55,550,469),9074=>array(50,89,549,503),9075=>array(163,-14,427,475),9076=>array(90,-212,525,475),9077=>array(26,-14,574,475),9078=>array(60,-136,555,475),9079=>array(60,-136,540,480),9080=>array(160,-136,440,475),9081=>array(26,-136,574,475),9082=>array(61,-14,555,475),9109=>array(60,0,540,559),9216=>array(30,0,565,689),9217=>array(37,0,564,694),9218=>array(37,0,587,694),9219=>array(41,0,587,689),9220=>array(41,0,582,689),9221=>array(41,-42,583,689),9222=>array(9,0,594,689),9223=>array(34,0,565,689),9224=>array(134,112,465,574),9225=>array(134,116,482,574),9226=>array(141,116,462,574),9227=>array(109,116,482,574),9228=>array(141,116,462,574),9229=>array(120,116,489,579),9230=>array(137,112,472,579),9231=>array(137,116,449,579),9232=>array(34,0,560,689),9233=>array(34,0,564,689),9234=>array(34,0,558,689),9235=>array(34,-4,559,689),9236=>array(34,0,573,689),9237=>array(30,0,594,689),9238=>array(37,0,568,694),9239=>array(41,0,575,689),9240=>array(20,0,568,694),9241=>array(141,116,472,574),9242=>array(37,0,575,694),9243=>array(41,-4,573,689),9244=>array(141,112,465,574),9245=>array(120,112,465,579),9246=>array(134,112,465,574),9247=>array(134,112,465,574),9248=>array(137,116,471,579),9249=>array(34,0,565,689),9250=>array(46,-12,561,716),9251=>array(96,-126,505,0),9252=>array(130,116,465,574),9280=>array(103,1,514,650),9281=>array(102,0,514,650),9282=>array(103,1,514,650),9283=>array(103,1,514,650),9284=>array(102,1,514,650),9285=>array(102,336,514,650),9286=>array(102,0,648,702),9287=>array(102,0,648,702),9288=>array(102,117,648,663),9289=>array(102,195,648,507),9290=>array(30,1,574,650),9312=>array(81,-109,919,728),9313=>array(81,-109,919,728),9314=>array(81,-109,919,728),9315=>array(81,-109,919,728),9316=>array(81,-109,919,728),9317=>array(81,-109,919,728),9318=>array(81,-109,919,728),9319=>array(81,-109,919,728),9320=>array(81,-109,919,728),9321=>array(81,-109,919,728),9322=>array(81,-109,919,728),9323=>array(81,-109,919,728),9324=>array(81,-109,919,728),9325=>array(81,-109,919,728),9326=>array(81,-109,919,728),9327=>array(81,-109,919,728),9328=>array(81,-109,919,728),9329=>array(81,-109,919,728),9330=>array(81,-109,919,728),9331=>array(81,-109,919,728),9332=>array(81,-67,919,683),9333=>array(81,-67,919,683),9334=>array(81,-67,919,683),9335=>array(81,-67,919,683),9336=>array(81,-67,919,683),9337=>array(81,-67,919,683),9338=>array(81,-67,919,683),9339=>array(81,-67,919,683),9340=>array(81,-67,919,683),9341=>array(81,-67,919,683),9342=>array(81,-67,919,683),9343=>array(81,-67,919,683),9344=>array(81,-67,919,683),9345=>array(81,-67,919,683),9346=>array(81,-67,919,683),9347=>array(81,-67,919,683),9348=>array(81,-67,919,683),9349=>array(81,-67,919,683),9350=>array(81,-67,919,683),9351=>array(81,-67,919,683),9352=>array(301,79,627,547),9353=>array(273,79,717,547),9354=>array(277,72,717,547),9355=>array(253,79,717,545),9356=>array(272,72,717,539),9357=>array(266,72,717,547),9358=>array(294,79,717,539),9359=>array(275,72,717,547),9360=>array(282,72,717,547),9361=>array(163,72,807,547),9362=>array(191,79,807,547),9363=>array(155,79,807,547),9364=>array(155,72,807,547),9365=>array(159,79,807,547),9366=>array(159,72,807,547),9367=>array(159,72,807,547),9368=>array(159,79,807,547),9369=>array(159,72,807,547),9370=>array(159,72,807,547),9371=>array(185,72,817,547),9372=>array(81,-67,919,683),9373=>array(81,-67,919,683),9374=>array(81,-67,919,683),9375=>array(81,-67,919,683),9376=>array(81,-67,919,683),9377=>array(81,-67,919,683),9378=>array(81,-67,919,683),9379=>array(81,-67,919,683),9380=>array(81,-67,919,683),9381=>array(81,-67,919,683),9382=>array(81,-67,919,683),9383=>array(81,-67,919,683),9384=>array(81,-67,919,683),9385=>array(81,-67,919,683),9386=>array(81,-67,919,683),9387=>array(81,-67,919,683),9388=>array(81,-67,919,683),9389=>array(81,-67,919,683),9390=>array(81,-67,919,683),9391=>array(81,-67,919,683),9392=>array(81,-67,919,683),9393=>array(81,-67,919,683),9394=>array(81,-67,919,683),9395=>array(81,-67,919,683),9396=>array(81,-67,919,683),9397=>array(81,-67,919,683),9398=>array(81,-109,919,728),9399=>array(81,-109,919,728),9400=>array(81,-109,919,728),9401=>array(81,-109,919,728),9402=>array(81,-109,919,728),9403=>array(81,-109,919,728),9404=>array(81,-109,919,728),9405=>array(81,-109,919,728),9406=>array(81,-109,919,728),9407=>array(81,-109,919,728),9408=>array(81,-109,919,728),9409=>array(81,-109,919,728),9410=>array(81,-109,919,728),9411=>array(81,-109,919,728),9412=>array(81,-109,919,728),9413=>array(81,-109,919,728),9414=>array(81,-109,919,728),9415=>array(81,-109,919,728),9416=>array(81,-109,919,728),9417=>array(81,-109,919,728),9418=>array(81,-109,919,728),9419=>array(81,-109,919,728),9420=>array(81,-109,919,728),9421=>array(81,-109,919,728),9422=>array(81,-109,919,728),9423=>array(81,-109,919,728),9424=>array(81,-109,919,728),9425=>array(81,-109,919,728),9426=>array(81,-109,919,728),9427=>array(81,-109,919,728),9428=>array(81,-109,919,728),9429=>array(81,-109,919,728),9430=>array(81,-109,919,728),9431=>array(81,-109,919,728),9432=>array(81,-109,919,728),9433=>array(81,-109,919,728),9434=>array(81,-109,919,728),9435=>array(81,-109,919,728),9436=>array(81,-109,919,728),9437=>array(81,-109,919,728),9438=>array(81,-109,919,728),9439=>array(81,-109,919,728),9440=>array(81,-109,919,728),9441=>array(81,-109,919,728),9442=>array(81,-109,919,728),9443=>array(81,-109,919,728),9444=>array(81,-109,919,728),9445=>array(81,-109,919,728),9446=>array(81,-109,919,728),9447=>array(81,-109,919,728),9448=>array(81,-109,919,728),9449=>array(81,-109,919,728),9450=>array(81,-109,919,728),9472=>array(-11,340,611,425),9473=>array(-11,303,611,474),9474=>array(258,-218,343,994),9475=>array(215,-218,386,994),9476=>array(-11,346,611,431),9477=>array(-11,303,611,474),9478=>array(258,-218,343,994),9479=>array(215,-218,386,994),9480=>array(-11,346,611,431),9481=>array(-11,303,611,474),9482=>array(258,-218,343,994),9483=>array(215,-218,386,994),9484=>array(258,-218,611,431),9485=>array(258,-218,611,474),9486=>array(215,-218,611,431),9487=>array(215,-218,611,474),9488=>array(-11,-218,343,431),9489=>array(-11,-218,343,474),9490=>array(-11,-218,386,431),9491=>array(-11,-218,386,474),9492=>array(258,346,611,994),9493=>array(258,303,611,994),9494=>array(215,346,611,994),9495=>array(215,303,611,994),9496=>array(-11,346,343,994),9497=>array(-11,303,343,994),9498=>array(-11,346,386,994),9499=>array(-11,303,386,994),9500=>array(258,-218,611,994),9501=>array(258,-218,611,994),9502=>array(215,-218,611,994),9503=>array(215,-218,611,994),9504=>array(215,-218,611,994),9505=>array(215,-218,611,994),9506=>array(215,-218,611,994),9507=>array(215,-218,611,994),9508=>array(-11,-218,343,994),9509=>array(-11,-218,343,994),9510=>array(-11,-218,386,994),9511=>array(-11,-218,386,994),9512=>array(-11,-218,386,994),9513=>array(-11,-218,386,994),9514=>array(-11,-218,386,994),9515=>array(-11,-218,386,994),9516=>array(-11,-218,611,431),9517=>array(-11,-218,611,474),9518=>array(-11,-218,611,474),9519=>array(-11,-218,611,474),9520=>array(-11,-218,611,431),9521=>array(-11,-218,611,474),9522=>array(-11,-218,611,474),9523=>array(-11,-218,611,474),9524=>array(-11,346,611,994),9525=>array(-11,303,611,994),9526=>array(-11,303,611,994),9527=>array(-11,303,611,994),9528=>array(-11,346,611,994),9529=>array(-11,303,611,994),9530=>array(-11,303,611,994),9531=>array(-11,303,611,994),9532=>array(-11,-218,611,994),9533=>array(-11,-218,611,994),9534=>array(-11,-218,611,994),9535=>array(-11,-218,611,994),9536=>array(-11,-218,611,994),9537=>array(-11,-218,611,994),9538=>array(-11,-218,611,994),9539=>array(-11,-218,611,994),9540=>array(-11,-218,611,994),9541=>array(-11,-218,611,994),9542=>array(-11,-218,611,994),9543=>array(-11,-218,611,994),9544=>array(-11,-218,611,994),9545=>array(-11,-218,611,994),9546=>array(-11,-218,611,994),9547=>array(-11,-218,611,994),9548=>array(-11,346,611,431),9549=>array(-11,303,611,474),9550=>array(258,-218,343,994),9551=>array(215,-218,386,994),9552=>array(-11,261,611,516),9553=>array(173,-218,428,994),9554=>array(258,-218,611,516),9555=>array(173,-218,611,431),9556=>array(173,-218,611,516),9557=>array(-11,-218,343,516),9558=>array(-11,-218,428,431),9559=>array(-11,-218,428,516),9560=>array(258,261,611,994),9561=>array(173,346,611,994),9562=>array(173,261,611,994),9563=>array(-11,261,343,994),9564=>array(-11,346,428,994),9565=>array(-11,261,428,994),9566=>array(258,-218,611,994),9567=>array(173,-218,611,994),9568=>array(173,-218,611,994),9569=>array(-11,-218,343,994),9570=>array(-11,-218,428,994),9571=>array(-11,-218,428,994),9572=>array(-11,-218,611,516),9573=>array(-11,-218,611,431),9574=>array(-11,-218,611,516),9575=>array(-11,261,611,994),9576=>array(-11,346,611,994),9577=>array(-11,261,611,994),9578=>array(-11,-218,611,994),9579=>array(-11,-218,611,994),9580=>array(-11,-218,611,994),9581=>array(258,77,612,431),9582=>array(-11,77,343,431),9583=>array(-11,346,343,700),9584=>array(258,346,612,700),9585=>array(0,88,600,688),9586=>array(0,88,600,688),9587=>array(0,88,600,688),9588=>array(-11,346,258,431),9589=>array(258,431,343,994),9590=>array(343,346,611,431),9591=>array(258,-218,343,346),9592=>array(-11,303,258,474),9593=>array(215,431,386,994),9594=>array(343,303,611,474),9595=>array(215,-218,386,346),9596=>array(-11,303,611,474),9597=>array(215,-218,386,994),9598=>array(-11,303,611,474),9599=>array(215,-218,386,994),9600=>array(-11,388,611,994),9601=>array(-11,-218,611,-66),9602=>array(-11,-218,611,85),9603=>array(-11,-218,611,237),9604=>array(-11,-218,611,388),9605=>array(-11,-218,611,540),9606=>array(-11,-218,611,691),9607=>array(-11,-218,611,843),9608=>array(-11,-218,611,994),9609=>array(-11,-218,525,994),9610=>array(-11,-218,450,994),9611=>array(-11,-218,375,994),9612=>array(-11,-218,300,994),9613=>array(-11,-218,225,994),9614=>array(-11,-218,150,994),9615=>array(-11,-218,75,994),9616=>array(300,-218,611,994),9617=>array(100,-262,600,1043),9618=>array(0,-264,601,1042),9619=>array(0,-262,601,1042),9620=>array(-11,843,611,994),9621=>array(525,-218,611,994),9632=>array(85,160,515,590),9633=>array(85,160,515,590),9634=>array(85,160,515,590),9635=>array(85,160,515,590),9636=>array(85,160,515,590),9637=>array(85,160,515,590),9638=>array(85,160,515,590),9639=>array(85,160,515,590),9640=>array(85,160,515,590),9641=>array(85,160,515,590),9642=>array(192,267,408,483),9643=>array(192,267,408,483),9644=>array(85,267,515,483),9645=>array(85,267,515,483),9646=>array(192,160,408,590),9647=>array(192,160,408,590),9648=>array(79,275,521,475),9649=>array(79,275,521,475),9650=>array(89,211,511,611),9651=>array(89,211,511,611),9652=>array(146,285,454,552),9653=>array(146,285,454,552),9654=>array(136,164,536,586),9655=>array(136,164,536,586),9656=>array(211,221,478,529),9657=>array(211,221,478,529),9658=>array(85,194,541,556),9659=>array(85,194,541,556),9660=>array(89,139,511,539),9661=>array(89,139,511,539),9662=>array(146,198,454,465),9663=>array(146,198,454,465),9664=>array(64,164,464,586),9665=>array(64,164,464,586),9666=>array(122,221,389,529),9667=>array(122,221,389,529),9668=>array(59,194,515,556),9669=>array(59,194,515,556),9670=>array(69,144,531,606),9671=>array(69,144,531,606),9672=>array(69,144,531,606),9673=>array(85,160,515,590),9674=>array(85,80,515,670),9675=>array(85,160,515,590),9676=>array(86,161,514,589),9677=>array(85,160,515,590),9678=>array(85,160,515,590),9679=>array(85,160,515,590),9680=>array(85,160,515,590),9681=>array(85,160,515,590),9682=>array(85,160,515,590),9683=>array(85,160,515,590),9684=>array(85,160,515,590),9685=>array(85,160,515,590),9686=>array(85,160,300,590),9687=>array(300,160,515,590),9688=>array(0,0,600,600),9689=>array(0,0,600,600),9690=>array(0,300,600,600),9691=>array(0,0,600,300),9692=>array(85,375,300,590),9693=>array(300,375,515,590),9694=>array(300,160,515,375),9695=>array(85,160,300,375),9696=>array(85,375,515,590),9697=>array(85,160,515,375),9698=>array(85,160,515,590),9699=>array(85,160,515,590),9700=>array(85,160,515,590),9701=>array(85,160,515,590),9702=>array(193,268,407,482),9703=>array(85,160,515,590),9704=>array(85,160,515,590),9705=>array(85,160,515,590),9706=>array(85,160,515,590),9707=>array(85,160,515,590),9708=>array(89,211,511,611),9709=>array(89,211,511,611),9710=>array(89,211,511,611),9711=>array(20,95,580,655),9728=>array(65,1,685,621),9729=>array(58,166,944,652),9730=>array(76,6,674,622),9731=>array(105,-3,672,690),9732=>array(81,0,923,690),9733=>array(37,0,779,719),9734=>array(37,0,786,720),9735=>array(107,12,356,451),9736=>array(35,53,436,449),9737=>array(70,0,730,660),9738=>array(70,50,730,620),9739=>array(70,50,730,620),9740=>array(200,100,677,577),9741=>array(100,0,700,600),9742=>array(22,63,696,521),9743=>array(22,63,696,521),9744=>array(63,0,671,607),9745=>array(63,0,671,607),9746=>array(63,0,671,607),9747=>array(129,0,633,668),9754=>array(27,56,924,451),9755=>array(36,56,933,451),9756=>array(84,168,899,531),9757=>array(288,-79,651,736),9758=>array(41,168,856,531),9759=>array(288,-36,651,779),9760=>array(24,15,720,725),9761=>array(50,40,546,610),9762=>array(56,22,694,660),9763=>array(46,115,704,724),9764=>array(45,0,535,652),9765=>array(24,0,436,699),9766=>array(35,0,409,699),9767=>array(87,0,589,637),9768=>array(35,0,409,699),9769=>array(54,20,714,680),9770=>array(88,0,727,664),9771=>array(70,-24,778,656),9772=>array(78,-2,596,691),9773=>array(56,0,741,732),9774=>array(64,0,686,622),9775=>array(64,0,686,622),9776=>array(70,0,830,639),9777=>array(70,0,830,639),9778=>array(70,0,830,639),9779=>array(70,0,830,639),9780=>array(70,0,830,639),9781=>array(70,0,830,639),9782=>array(70,0,830,639),9783=>array(70,0,830,639),9784=>array(60,32,690,661),9785=>array(64,0,686,622),9786=>array(64,0,686,622),9787=>array(64,0,686,622),9788=>array(75,11,675,611),9789=>array(84,-189,659,691),9790=>array(91,-189,666,691),9791=>array(150,-100,590,759),9792=>array(100,-100,640,699),9793=>array(100,-30,640,769),9794=>array(60,-30,711,621),9795=>array(45,0,573,699),9796=>array(26,0,432,699),9797=>array(45,0,587,699),9798=>array(23,0,757,719),9799=>array(80,0,487,699),9800=>array(38,0,796,709),9801=>array(36,0,744,703),9802=>array(35,0,699,699),9803=>array(45,0,842,699),9804=>array(41,-176,749,700),9805=>array(42,-162,1002,699),9806=>array(33,0,863,699),9807=>array(42,-72,1067,699),9808=>array(48,0,747,699),9809=>array(29,-90,808,699),9810=>array(36,106,886,618),9811=>array(34,0,662,699),9812=>array(83,-117,913,709),9813=>array(42,-117,954,729),9814=>array(154,-113,842,706),9815=>array(83,-103,913,707),9816=>array(76,-110,912,727),9817=>array(197,-103,803,710),9818=>array(83,-117,913,709),9819=>array(42,-117,954,729),9820=>array(154,-113,842,706),9821=>array(83,-103,913,707),9822=>array(76,-110,912,727),9823=>array(197,-103,803,710),9824=>array(49,0,673,705),9825=>array(49,0,685,705),9826=>array(51,0,623,706),9827=>array(49,0,755,705),9828=>array(49,0,673,705),9829=>array(49,0,685,705),9830=>array(51,0,623,706),9831=>array(49,0,755,705),9832=>array(56,24,804,680),9833=>array(48,0,316,736),9834=>array(48,0,556,736),9835=>array(48,-70,654,766),9836=>array(48,-70,654,766),9837=>array(107,10,400,736),9838=>array(107,-22,333,736),9839=>array(29,-22,411,736),9985=>array(56,49,901,637),9986=>array(38,48,923,635),9987=>array(56,49,901,637),9988=>array(6,0,979,551),9990=>array(68,-201,700,669),9991=>array(30,0,760,730),9992=>array(17,0,772,654),9993=>array(27,28,663,483),9996=>array(64,0,521,582),9997=>array(59,72,824,515),9998=>array(62,113,848,672),9999=>array(35,170,898,521),10000=>array(62,19,849,578),10001=>array(36,135,908,555),10002=>array(51,135,923,555),10003=>array(18,-10,722,706),10004=>array(34,-9,796,765),10005=>array(47,0,715,668),10006=>array(46,0,714,668),10007=>array(0,-58,567,638),10008=>array(25,-67,650,682),10009=>array(35,0,728,693),10010=>array(34,0,727,693),10011=>array(35,0,724,689),10012=>array(35,0,718,683),10013=>array(35,0,460,690),10014=>array(9,0,542,690),10015=>array(38,0,499,690),10016=>array(36,94,542,600),10017=>array(29,-12,663,720),10018=>array(37,-11,750,702),10019=>array(34,0,755,719),10020=>array(34,0,755,719),10021=>array(36,0,755,719),10022=>array(37,0,756,719),10023=>array(38,0,757,719),10025=>array(37,0,786,720),10026=>array(31,-13,757,713),10027=>array(49,0,792,719),10028=>array(37,0,786,719),10029=>array(42,0,791,719),10030=>array(34,0,783,719),10031=>array(35,-14,795,718),10032=>array(49,1,873,718),10033=>array(29,0,714,719),10034=>array(18,0,706,719),10035=>array(35,0,714,679),10036=>array(35,0,756,721),10037=>array(47,0,745,698),10038=>array(37,0,659,699),10039=>array(35,0,741,706),10040=>array(35,0,733,698),10041=>array(35,0,757,729),10042=>array(35,0,725,688),10043=>array(31,0,675,719),10044=>array(34,7,674,728),10045=>array(13,0,669,719),10046=>array(21,0,680,719),10047=>array(35,0,791,737),10048=>array(35,0,780,728),10049=>array(35,0,754,719),10050=>array(44,-14,745,695),10051=>array(28,0,679,719),10052=>array(32,0,655,696),10053=>array(29,0,667,696),10054=>array(1,0,688,687),10055=>array(30,0,757,719),10056=>array(42,-7,745,696),10057=>array(42,30,670,663),10058=>array(60,0,731,718),10059=>array(26,-21,759,711),10061=>array(41,-33,832,638),10063=>array(23,0,739,714),10064=>array(23,0,739,714),10065=>array(23,0,735,714),10066=>array(23,0,735,714),10070=>array(36,-12,749,701),10072=>array(29,0,109,712),10073=>array(29,0,248,712),10074=>array(29,0,386,712),10075=>array(56,265,336,706),10076=>array(56,265,336,706),10077=>array(38,265,630,706),10078=>array(38,265,630,706),10081=>array(87,-157,666,727),10082=>array(60,-14,484,716),10083=>array(28,-14,516,711),10084=>array(35,0,875,703),10085=>array(38,0,644,764),10086=>array(76,-15,681,709),10087=>array(0,110,760,514),10102=>array(35,-14,753,705),10103=>array(35,-14,753,705),10104=>array(35,-14,753,705),10105=>array(35,-14,753,705),10106=>array(35,-14,753,705),10107=>array(35,-14,753,705),10108=>array(35,-14,753,705),10109=>array(35,-14,753,705),10110=>array(35,-14,753,705),10111=>array(35,-14,753,705),10112=>array(35,-14,753,705),10113=>array(35,-14,753,705),10114=>array(35,-14,753,705),10115=>array(35,-14,753,705),10116=>array(35,-14,753,705),10117=>array(35,-14,753,705),10118=>array(35,-14,753,705),10119=>array(35,-14,753,705),10120=>array(35,-14,753,705),10121=>array(35,-14,753,705),10122=>array(35,-14,753,705),10123=>array(35,-14,753,705),10124=>array(35,-14,753,705),10125=>array(35,-14,753,705),10126=>array(35,-14,753,705),10127=>array(35,-14,753,705),10128=>array(35,-14,753,705),10129=>array(35,-14,753,705),10130=>array(35,-14,753,705),10131=>array(35,-14,753,705),10132=>array(22,66,879,640),10136=>array(106,19,675,558),10137=>array(33,73,909,520),10138=>array(121,-28,619,578),10139=>array(28,73,890,603),10140=>array(38,70,891,636),10141=>array(82,137,843,554),10142=>array(82,137,846,554),10143=>array(35,155,799,536),10144=>array(36,94,838,594),10145=>array(13,94,815,594),10146=>array(35,82,889,610),10147=>array(35,82,889,610),10148=>array(103,147,845,543),10149=>array(42,123,900,578),10150=>array(42,55,901,509),10151=>array(45,-85,418,772),10152=>array(21,-68,868,755),10153=>array(36,43,813,648),10154=>array(41,43,807,648),10155=>array(61,129,832,585),10156=>array(61,129,832,585),10157=>array(37,44,665,651),10158=>array(37,44,665,651),10159=>array(38,93,836,620),10161=>array(38,69,836,596),10162=>array(15,0,746,730),10163=>array(23,128,934,561),10164=>array(42,2,725,685),10165=>array(27,166,838,525),10166=>array(20,5,703,685),10167=>array(93,0,791,694),10168=>array(57,166,886,523),10169=>array(98,13,792,710),10170=>array(35,192,805,498),10171=>array(28,157,858,533),10172=>array(83,199,849,501),10173=>array(15,147,949,549),10174=>array(41,97,889,579),12289=>array(94,-86,336,167),12290=>array(86,-54,373,235),12291=>array(305,220,695,527),12292=>array(100,-35,933,800),12293=>array(137,5,781,779),12294=>array(148,4,839,695),12295=>array(106,-26,920,790),12296=>array(587,-69,921,837),12297=>array(79,-69,413,837),12298=>array(501,-69,950,837),12299=>array(50,-69,499,837),12300=>array(559,349,900,837),12301=>array(100,-68,446,419),12302=>array(560,349,930,835),12303=>array(70,-69,444,421),12304=>array(611,-69,900,837),12305=>array(100,-69,389,837),12306=>array(173,-18,827,735),12307=>array(144,20,845,750),12308=>array(625,-75,900,844),12309=>array(100,-75,375,844),12310=>array(570,-73,930,845),12311=>array(69,-73,429,845),12312=>array(649,-73,877,835),12313=>array(124,-74,352,834),12314=>array(578,-81,861,820),12315=>array(121,-82,404,819),12316=>array(39,289,961,466),12317=>array(535,523,901,853),12318=>array(100,523,466,853),12319=>array(181,-53,547,277),12320=>array(89,66,911,689),12321=>array(445,46,525,715),12322=>array(339,48,660,714),12323=>array(255,47,734,717),12324=>array(153,34,769,707),12325=>array(285,35,742,747),12326=>array(184,255,821,671),12327=>array(185,167,823,691),12328=>array(181,104,816,707),12329=>array(206,35,844,743),12330=>array(112,1,375,265),12331=>array(111,513,375,776),12332=>array(627,514,889,778),12333=>array(624,1,888,264),12334=>array(85,311,237,462),12335=>array(83,207,237,564),12336=>array(68,285,931,479),12337=>array(284,-60,729,810),12338=>array(199,-56,876,814),12339=>array(174,-28,732,782),12340=>array(128,-28,898,782),12341=>array(232,-46,726,796),12342=>array(106,-26,920,790),12343=>array(61,-53,920,827),12351=>array(241,-70,759,836),12353=>array(187,47,786,720),12354=>array(113,-60,867,781),12355=>array(217,45,802,670),12356=>array(144,-30,876,760),12357=>array(191,42,750,687),12358=>array(113,-36,810,759),12359=>array(169,54,811,709),12360=>array(90,-23,881,787),12361=>array(185,66,791,704),12362=>array(102,-12,864,796),12363=>array(80,-31,857,806),12364=>array(58,-31,944,815),12365=>array(99,-31,822,811),12366=>array(100,-30,947,833),12367=>array(145,-22,766,776),12368=>array(145,-22,914,821),12369=>array(162,-55,914,782),12370=>array(97,-62,959,839),12371=>array(163,7,857,716),12372=>array(116,10,869,807),12373=>array(98,-31,814,789),12374=>array(94,-31,925,821),12375=>array(207,-18,857,769),12376=>array(185,-18,905,821),12377=>array(114,-62,886,773),12378=>array(89,-62,915,863),12379=>array(98,-16,879,760),12380=>array(72,-16,938,863),12381=>array(102,-35,887,751),12382=>array(80,-35,925,807),12383=>array(119,-16,881,797),12384=>array(89,-16,905,807),12385=>array(143,-21,844,799),12386=>array(109,-21,905,859),12387=>array(175,123,771,603),12388=>array(122,47,868,645),12389=>array(97,57,895,873),12390=>array(90,-25,856,720),12391=>array(90,-25,903,720),12392=>array(163,10,823,775),12393=>array(163,10,911,810),12394=>array(80,-22,907,800),12395=>array(131,-8,875,779),12396=>array(105,-6,909,782),12397=>array(88,-15,903,773),12398=>array(115,-18,882,714),12399=>array(111,-30,896,774),12400=>array(84,-30,931,840),12401=>array(95,-30,944,843),12402=>array(123,-7,938,742),12403=>array(89,-7,921,840),12404=>array(103,-12,918,861),12405=>array(73,-9,924,757),12406=>array(64,-9,915,840),12407=>array(50,-9,918,861),12408=>array(86,66,909,662),12409=>array(86,66,909,806),12410=>array(66,66,889,827),12411=>array(110,-23,898,771),12412=>array(79,-23,924,823),12413=>array(94,-23,942,827),12414=>array(126,-24,892,797),12415=>array(115,-33,888,772),12416=>array(121,-17,905,789),12417=>array(130,-30,870,796),12418=>array(112,-9,858,789),12419=>array(173,48,804,710),12420=>array(99,-29,887,789),12421=>array(202,34,795,712),12422=>array(135,-48,878,792),12423=>array(192,96,804,699),12424=>array(116,21,879,780),12425=>array(144,-17,817,780),12426=>array(193,-81,777,770),12427=>array(82,11,836,767),12428=>array(105,-29,911,774),12429=>array(100,-11,857,760),12430=>array(160,62,798,700),12431=>array(80,-14,874,782),12432=>array(118,-5,879,745),12433=>array(86,1,895,774),12434=>array(115,-24,853,805),12435=>array(90,-8,906,778),12436=>array(103,-36,940,786),12441=>array(641,603,869,807),12442=>array(703,648,918,861),12443=>array(503,603,731,807),12444=>array(490,648,705,861),12445=>array(153,39,808,744),12446=>array(153,39,827,744),12449=>array(199,54,815,665),12450=>array(94,-61,920,751),12451=>array(218,66,759,704),12452=>array(121,-44,833,800),12453=>array(225,59,789,694),12454=>array(125,-47,880,803),12455=>array(189,91,810,630),12456=>array(80,0,915,735),12457=>array(184,61,822,683),12458=>array(96,-45,952,787),12459=>array(88,-41,858,794),12460=>array(88,-41,888,831),12461=>array(73,-45,901,803),12462=>array(71,-54,930,821),12463=>array(120,-49,857,815),12464=>array(77,-51,924,849),12465=>array(64,-48,908,813),12466=>array(64,-48,908,835),12467=>array(98,-23,859,734),12468=>array(81,-25,910,877),12469=>array(84,-59,917,788),12470=>array(64,-59,966,799),12471=>array(83,-39,904,789),12472=>array(79,-39,900,799),12473=>array(82,-52,952,728),12474=>array(56,-52,946,867),12475=>array(87,-5,912,786),12476=>array(81,-3,900,800),12477=>array(131,-51,841,780),12478=>array(131,-51,876,831),12479=>array(120,-60,851,805),12480=>array(60,-60,910,859),12481=>array(87,-54,921,813),12482=>array(77,-54,930,813),12483=>array(189,61,752,663),12484=>array(89,-47,845,774),12485=>array(101,-47,890,829),12486=>array(73,-61,908,740),12487=>array(73,-61,948,757),12488=>array(291,-46,850,787),12489=>array(325,-44,879,790),12490=>array(82,-63,915,786),12491=>array(77,16,911,711),12492=>array(116,-54,863,734),12493=>array(65,-51,926,786),12494=>array(130,-49,855,740),12495=>array(72,-29,928,791),12496=>array(47,-32,944,799),12497=>array(47,-32,944,837),12498=>array(163,-5,879,770),12499=>array(150,-5,930,799),12500=>array(137,-5,944,799),12501=>array(151,-58,855,732),12502=>array(107,-60,920,886),12503=>array(89,-60,964,857),12504=>array(57,24,937,651),12505=>array(57,24,937,685),12506=>array(57,24,937,685),12507=>array(70,-45,913,785),12508=>array(70,-45,913,821),12509=>array(70,-45,913,849),12510=>array(113,-31,887,729),12511=>array(104,-43,892,769),12512=>array(80,-26,927,792),12513=>array(108,-35,835,787),12514=>array(81,-6,916,739),12515=>array(203,48,790,686),12516=>array(104,-48,884,801),12517=>array(180,93,801,636),12518=>array(75,-4,909,730),12519=>array(205,80,765,640),12520=>array(105,-27,860,730),12521=>array(104,-57,873,748),12522=>array(213,-53,790,768),12523=>array(62,-45,936,788),12524=>array(203,-29,893,788),12525=>array(134,-24,848,730),12526=>array(224,51,769,636),12527=>array(124,-54,867,731),12528=>array(83,-45,918,784),12529=>array(76,-5,910,730),12530=>array(123,-53,863,753),12531=>array(107,-33,896,754),12532=>array(107,-54,884,839),12533=>array(199,57,767,690),12534=>array(179,43,809,694),12535=>array(92,-58,952,834),12536=>array(73,-45,953,843),12537=>array(82,-5,977,861),12538=>array(107,-54,947,846),12539=>array(161,311,313,462),12540=>array(83,339,917,429),12541=>array(271,-27,738,666),12542=>array(271,-27,766,807),12549=>array(157,-41,845,819),12550=>array(113,-35,861,812),12551=>array(149,51,851,697),12552=>array(147,44,849,718),12553=>array(98,-41,843,819),12554=>array(100,-45,900,783),12555=>array(151,-45,840,758),12556=>array(98,-35,843,817),12557=>array(133,-41,806,802),12558=>array(121,-34,879,738),12559=>array(60,-32,871,738),12560=>array(232,-43,676,791),12561=>array(257,-41,677,801),12562=>array(121,-28,879,738),12563=>array(105,6,895,782),12564=>array(142,-33,756,796),12565=>array(61,-30,825,752),12566=>array(227,-15,773,734),12567=>array(149,-35,811,746),12568=>array(113,-39,887,806),12569=>array(149,-32,883,752),12570=>array(163,-37,837,783),12571=>array(121,2,879,738),12572=>array(121,2,879,794),12573=>array(109,8,891,773),12574=>array(112,-39,871,754),12575=>array(82,-10,934,729),12576=>array(163,-48,866,790),12577=>array(111,-20,887,723),12578=>array(133,-37,849,742),12579=>array(166,-33,838,775),12580=>array(94,-21,872,797),12581=>array(164,54,847,751),12582=>array(88,-21,903,731),12583=>array(129,369,871,449),12584=>array(124,-4,877,753),12585=>array(157,29,843,711),12586=>array(87,-26,885,736),12587=>array(88,-21,903,734),12588=>array(60,-32,871,788),12593=>array(129,91,796,665),12594=>array(114,91,844,665),12595=>array(114,78,880,665),12596=>array(204,90,873,665),12597=>array(144,78,880,666),12598=>array(144,91,876,666),12599=>array(184,90,838,664),12600=>array(149,90,888,665),12601=>array(173,90,827,665),12602=>array(149,85,842,665),12603=>array(149,85,852,665),12604=>array(149,85,853,665),12605=>array(149,78,880,665),12606=>array(149,85,855,665),12607=>array(149,85,868,665),12608=>array(149,85,876,666),12609=>array(215,90,785,665),12610=>array(215,90,785,665),12611=>array(145,88,855,665),12612=>array(145,78,880,664),12613=>array(107,76,882,663),12614=>array(110,78,890,663),12615=>array(187,92,813,666),12616=>array(109,76,880,665),12617=>array(105,80,895,666),12618=>array(109,76,880,665),12619=>array(206,90,790,663),12620=>array(189,91,837,664),12621=>array(187,90,813,665),12622=>array(156,88,844,665),12623=>array(421,-64,711,842),12624=>array(345,-64,655,842),12625=>array(381,-64,676,842),12626=>array(340,-64,661,842),12627=>array(302,-65,597,841),12628=>array(186,-63,677,843),12629=>array(332,-64,626,842),12630=>array(226,-63,687,843),12631=>array(60,197,940,614),12632=>array(46,-64,931,842),12633=>array(51,-64,892,842),12634=>array(61,-64,857,842),12635=>array(60,197,940,615),12636=>array(79,76,921,554),12637=>array(68,-65,882,841),12638=>array(53,-63,912,843),12639=>array(70,-64,867,842),12640=>array(72,111,928,589),12641=>array(57,357,943,436),12642=>array(67,-64,867,842),12643=>array(462,-64,538,842),12645=>array(169,93,848,665),12646=>array(169,90,888,665),12647=>array(169,78,880,665),12648=>array(169,93,886,665),12649=>array(85,78,960,665),12650=>array(149,85,888,665),12651=>array(85,78,960,665),12652=>array(149,85,886,665),12653=>array(149,85,885,665),12654=>array(142,89,853,665),12655=>array(142,78,880,665),12656=>array(142,89,886,665),12657=>array(232,78,768,711),12658=>array(145,88,844,665),12659=>array(145,88,888,665),12660=>array(111,78,889,665),12661=>array(101,78,933,665),12662=>array(140,78,885,666),12663=>array(145,88,855,665),12664=>array(232,78,768,725),12665=>array(197,78,803,728),12666=>array(130,78,844,665),12667=>array(130,78,858,665),12668=>array(130,78,888,665),12669=>array(125,78,868,665),12670=>array(117,78,883,666),12671=>array(258,93,742,659),12672=>array(99,214,901,562),12673=>array(232,131,768,551),12674=>array(125,78,880,663),12675=>array(125,119,886,664),12676=>array(202,78,798,714),12677=>array(100,91,900,666),12678=>array(182,78,818,573),12679=>array(62,-64,936,842),12680=>array(62,-64,892,842),12681=>array(62,-64,867,842),12682=>array(52,-64,881,842),12683=>array(52,-63,902,843),12684=>array(52,-64,867,842),12685=>array(430,319,570,459),12686=>array(316,-98,634,855),12688=>array(468,391,532,889),12689=>array(302,391,760,889),12690=>array(56,620,459,664),12691=>array(43,481,468,770),12692=>array(47,446,470,803),12693=>array(62,415,456,817),12694=>array(45,427,479,845),12695=>array(70,401,449,858),12696=>array(44,401,477,827),12697=>array(73,399,448,839),12698=>array(82,423,470,815),12699=>array(39,401,485,834),12700=>array(46,401,469,834),12701=>array(35,401,482,832),12702=>array(30,412,488,859),12703=>array(38,401,490,846),12800=>array(72,-21,977,798),12801=>array(72,-21,977,798),12802=>array(72,-21,977,798),12803=>array(72,-21,977,798),12804=>array(72,-21,977,798),12805=>array(72,-21,977,798),12806=>array(72,-21,977,798),12807=>array(72,-21,977,798),12808=>array(72,-21,977,798),12809=>array(72,-21,977,798),12810=>array(72,-21,977,798),12811=>array(72,-21,977,798),12812=>array(72,-21,977,798),12813=>array(72,-21,977,798),12814=>array(72,-21,977,798),12815=>array(72,-21,977,798),12816=>array(72,-21,977,798),12817=>array(72,-21,977,798),12818=>array(72,-21,977,798),12819=>array(72,-21,977,798),12820=>array(72,-21,977,798),12821=>array(72,-21,977,798),12822=>array(72,-21,977,798),12823=>array(72,-21,977,798),12824=>array(72,-21,977,798),12825=>array(72,-21,977,798),12826=>array(72,-21,977,798),12827=>array(72,-21,977,798),12828=>array(72,-21,977,798),12832=>array(72,-21,976,798),12833=>array(72,-21,976,798),12834=>array(72,-21,976,798),12835=>array(72,-21,976,798),12836=>array(72,-21,976,798),12837=>array(72,-21,976,798),12838=>array(72,-21,976,798),12839=>array(72,-21,976,798),12840=>array(72,-21,976,798),12841=>array(72,-21,976,798),12842=>array(72,-21,976,798),12843=>array(72,-21,976,798),12844=>array(72,-21,976,798),12845=>array(72,-21,976,798),12846=>array(72,-21,976,803),12847=>array(72,-21,976,798),12848=>array(72,-21,976,798),12849=>array(72,-21,976,798),12850=>array(72,-21,976,798),12851=>array(72,-21,976,798),12852=>array(72,-21,976,798),12853=>array(72,-21,976,798),12854=>array(72,-21,976,798),12855=>array(72,-21,976,798),12856=>array(72,-21,976,798),12857=>array(72,-21,976,798),12858=>array(72,-21,976,798),12859=>array(72,-21,976,798),12860=>array(72,-21,976,798),12861=>array(72,-21,976,803),12862=>array(72,-21,976,798),12863=>array(72,-21,976,798),12864=>array(72,-21,976,798),12865=>array(72,-21,976,798),12866=>array(72,-21,976,798),12867=>array(72,-21,976,798),12896=>array(30,-82,970,859),12897=>array(30,-82,970,859),12898=>array(30,-82,970,859),12899=>array(30,-82,970,859),12900=>array(30,-82,970,859),12901=>array(30,-82,970,859),12902=>array(30,-82,970,859),12903=>array(30,-82,970,859),12904=>array(30,-82,970,859),12905=>array(30,-82,970,859),12906=>array(30,-82,970,859),12907=>array(30,-82,970,859),12908=>array(30,-82,970,859),12909=>array(30,-82,970,859),12910=>array(30,-82,970,859),12911=>array(30,-82,970,859),12912=>array(30,-82,970,859),12913=>array(30,-82,970,859),12914=>array(30,-82,970,859),12915=>array(30,-82,970,859),12916=>array(30,-82,970,859),12917=>array(30,-82,970,859),12918=>array(30,-82,970,859),12919=>array(30,-82,970,859),12920=>array(30,-82,970,859),12921=>array(30,-82,970,859),12922=>array(30,-82,970,859),12923=>array(30,-82,970,859),12927=>array(30,-82,970,859),12928=>array(30,-82,970,859),12929=>array(30,-82,970,859),12930=>array(30,-82,970,859),12931=>array(30,-82,970,859),12932=>array(30,-82,970,859),12933=>array(30,-82,970,859),12934=>array(30,-82,970,859),12935=>array(30,-82,970,859),12936=>array(30,-82,970,859),12937=>array(30,-82,970,859),12938=>array(30,-82,970,859),12939=>array(30,-82,970,859),12940=>array(30,-82,970,859),12941=>array(30,-82,970,859),12942=>array(30,-82,970,859),12943=>array(30,-82,970,859),12944=>array(30,-82,970,859),12945=>array(30,-82,970,859),12946=>array(30,-82,970,859),12947=>array(30,-82,970,859),12948=>array(30,-82,970,859),12949=>array(30,-82,970,859),12950=>array(30,-82,970,859),12951=>array(30,-82,970,859),12952=>array(30,-82,970,859),12953=>array(30,-82,970,859),12954=>array(30,-82,970,859),12955=>array(30,-82,970,859),12956=>array(30,-82,970,859),12957=>array(30,-82,970,859),12958=>array(30,-82,970,859),12959=>array(30,-82,970,859),12960=>array(30,-82,970,859),12961=>array(30,-82,970,859),12962=>array(30,-82,970,859),12963=>array(30,-82,970,859),12964=>array(30,-82,970,859),12965=>array(30,-82,970,859),12966=>array(30,-82,970,859),12967=>array(30,-82,970,859),12968=>array(30,-82,970,859),12969=>array(30,-82,970,859),12970=>array(30,-82,970,859),12971=>array(30,-82,970,859),12972=>array(30,-82,970,859),12973=>array(30,-82,970,859),12974=>array(30,-82,970,859),12975=>array(30,-82,970,859),12976=>array(30,-82,970,859),12992=>array(119,-55,892,783),12993=>array(88,-55,892,797),12994=>array(86,-55,892,787),12995=>array(64,-55,892,783),12996=>array(89,-55,892,783),12997=>array(102,-55,897,787),12998=>array(90,-55,892,783),12999=>array(80,-55,892,789),13000=>array(82,-55,892,793),13001=>array(47,-55,892,799),13002=>array(47,-55,892,783),13003=>array(47,-55,892,794),13008=>array(30,-82,970,859),13009=>array(30,-82,970,859),13010=>array(30,-82,970,859),13011=>array(30,-82,970,859),13012=>array(30,-82,970,859),13013=>array(30,-82,970,859),13014=>array(30,-82,970,859),13015=>array(30,-82,970,859),13016=>array(30,-82,970,859),13017=>array(30,-82,970,859),13018=>array(30,-82,970,859),13019=>array(30,-82,970,859),13020=>array(30,-82,970,859),13021=>array(30,-82,970,859),13022=>array(30,-82,970,859),13023=>array(30,-82,970,859),13024=>array(30,-82,970,859),13025=>array(30,-82,970,859),13026=>array(30,-82,970,859),13027=>array(30,-82,970,859),13028=>array(30,-82,970,859),13029=>array(30,-82,970,859),13030=>array(30,-82,970,859),13031=>array(30,-82,970,859),13032=>array(30,-82,970,859),13033=>array(30,-82,970,859),13034=>array(30,-82,970,859),13035=>array(30,-82,970,859),13036=>array(30,-82,970,859),13037=>array(30,-82,970,859),13038=>array(30,-82,970,859),13039=>array(30,-82,970,859),13040=>array(30,-82,970,859),13041=>array(30,-82,970,859),13042=>array(30,-82,970,859),13043=>array(30,-82,970,859),13044=>array(30,-82,970,859),13045=>array(30,-82,970,859),13046=>array(30,-82,970,859),13047=>array(30,-82,970,859),13048=>array(30,-82,970,859),13049=>array(30,-82,970,859),13050=>array(30,-82,970,859),13051=>array(30,-82,970,859),13052=>array(30,-82,970,859),13053=>array(30,-82,970,859),13054=>array(30,-82,970,859),13056=>array(54,-77,959,836),13057=>array(62,-82,960,822),13058=>array(39,-64,954,811),13059=>array(49,-64,945,811),13060=>array(73,-74,957,845),13061=>array(50,-76,949,845),13062=>array(75,-49,949,836),13063=>array(38,-77,962,804),13064=>array(58,-67,945,796),13065=>array(47,-48,949,836),13066=>array(47,-66,945,836),13067=>array(58,-75,921,845),13068=>array(58,-77,944,844),13069=>array(58,-75,944,844),13070=>array(58,-49,924,860),13071=>array(58,-67,965,860),13072=>array(51,-61,975,862),13073=>array(51,129,939,862),13074=>array(51,-75,946,862),13075=>array(51,-74,968,862),13076=>array(51,-47,924,841),13077=>array(38,-66,970,841),13078=>array(50,-78,970,844),13079=>array(51,-78,961,841),13080=>array(33,-66,944,866),13081=>array(33,-78,961,866),13082=>array(46,-66,968,844),13083=>array(54,-73,963,844),13084=>array(46,-48,945,850),13085=>array(55,-77,960,822),13086=>array(40,-71,945,802),13087=>array(46,-72,968,845),13088=>array(46,-76,970,841),13089=>array(66,-82,970,831),13090=>array(48,-76,949,836),13091=>array(48,-77,949,836),13092=>array(54,-48,945,868),13093=>array(50,-71,952,868),13094=>array(156,-64,968,856),13095=>array(156,-76,949,845),13096=>array(55,-54,904,841),13097=>array(61,-77,731,825),13098=>array(37,-64,921,845),13099=>array(37,-76,980,836),13100=>array(37,-64,945,836),13101=>array(37,-64,968,856),13102=>array(56,-78,970,857),13103=>array(49,-64,923,857),13104=>array(106,-41,918,857),13105=>array(106,-64,968,862),13106=>array(71,-78,961,794),13107=>array(53,-77,933,845),13108=>array(57,-69,970,862),13109=>array(57,-76,944,826),13110=>array(39,-73,970,844),13111=>array(39,-75,915,802),13112=>array(39,-41,939,802),13113=>array(39,-64,968,836),13114=>array(39,-48,949,811),13115=>array(39,-71,945,802),13116=>array(39,-73,945,819),13117=>array(40,-77,933,859),13118=>array(40,-77,968,859),13119=>array(40,-76,949,842),13120=>array(40,-77,949,859),13121=>array(40,-64,945,842),13122=>array(40,-76,945,842),13123=>array(55,-72,924,845),13124=>array(49,-64,921,845),13125=>array(37,-72,731,805),13126=>array(55,-72,968,836),13127=>array(57,-69,963,811),13128=>array(61,-76,949,844),13129=>array(61,-75,887,829),13130=>array(39,-72,970,831),13131=>array(67,-60,969,833),13132=>array(67,-77,969,860),13133=>array(67,-77,968,833),13134=>array(59,-77,945,847),13135=>array(49,-64,945,847),13136=>array(57,-76,950,811),13137=>array(107,-77,968,831),13138=>array(107,-73,944,831),13139=>array(49,140,955,857),13140=>array(49,-77,968,836),13141=>array(124,-66,956,835),13142=>array(118,-82,963,835),13143=>array(79,-77,718,798),13144=>array(124,-65,967,826),13145=>array(119,-65,967,826),13146=>array(88,-65,967,826),13147=>array(86,-65,967,826),13148=>array(64,-65,967,826),13149=>array(89,-65,967,826),13150=>array(102,-65,972,826),13151=>array(90,-65,967,826),13152=>array(80,-65,967,826),13153=>array(82,-65,967,826),13154=>array(47,-65,967,826),13155=>array(47,-65,967,826),13156=>array(47,-65,967,826),13157=>array(47,-65,967,826),13158=>array(47,-65,967,826),13159=>array(47,-65,967,826),13160=>array(47,-65,967,826),13161=>array(47,-65,967,826),13162=>array(47,-65,967,826),13163=>array(47,-65,967,826),13164=>array(48,-65,967,826),13165=>array(48,-65,967,826),13166=>array(48,-65,967,826),13167=>array(48,-65,967,826),13168=>array(48,-65,967,826),13169=>array(77,12,942,739),13170=>array(65,11,930,739),13171=>array(50,23,915,751),13172=>array(81,11,971,739),13173=>array(63,16,962,739),13174=>array(90,-71,934,658),13179=>array(37,-70,970,831),13180=>array(54,-60,946,831),13181=>array(28,-43,956,829),13182=>array(59,-67,970,832),13183=>array(23,-86,969,855),13184=>array(84,-171,968,739),13185=>array(82,23,968,739),13186=>array(79,-187,963,739),13187=>array(77,23,965,739),13188=>array(80,23,962,739),13189=>array(78,23,946,739),13190=>array(78,23,946,739),13191=>array(63,23,946,763),13192=>array(58,11,922,739),13193=>array(62,11,938,739),13194=>array(84,-171,942,739),13195=>array(82,23,942,739),13196=>array(80,-187,942,739),13197=>array(80,-187,919,553),13198=>array(77,-187,925,553),13199=>array(91,-187,919,739),13200=>array(91,23,949,739),13201=>array(82,23,952,739),13202=>array(72,23,957,739),13203=>array(52,23,962,763),13204=>array(44,23,952,739),13205=>array(84,-187,926,737),13206=>array(86,23,930,739),13207=>array(65,11,930,739),13208=>array(123,23,926,739),13209=>array(86,23,914,751),13210=>array(86,23,914,553),13211=>array(87,-187,914,553),13212=>array(70,23,930,553),13213=>array(63,16,918,558),13214=>array(83,23,918,739),13215=>array(67,23,958,677),13216=>array(63,16,958,677),13217=>array(149,23,926,677),13218=>array(82,23,958,739),13219=>array(67,23,964,680),13220=>array(63,16,964,680),13221=>array(149,23,932,680),13222=>array(82,23,964,739),13223=>array(75,16,937,740),13224=>array(67,16,958,740),13225=>array(104,11,926,739),13226=>array(69,11,951,739),13227=>array(58,11,961,739),13228=>array(55,23,975,763),13229=>array(70,11,930,739),13230=>array(67,11,959,740),13231=>array(67,11,966,740),13232=>array(92,-171,940,558),13233=>array(91,16,929,558),13234=>array(92,-187,946,558),13235=>array(83,16,947,558),13236=>array(92,-171,954,739),13237=>array(88,23,954,739),13238=>array(92,-187,954,739),13239=>array(70,23,954,739),13240=>array(93,23,954,739),13241=>array(76,23,959,739),13242=>array(84,-171,965,739),13243=>array(87,23,963,739),13244=>array(87,-187,963,739),13245=>array(70,23,967,739),13246=>array(91,23,965,739),13247=>array(72,23,969,739),13248=>array(87,23,945,739),13249=>array(72,23,948,739),13250=>array(65,11,955,553),13251=>array(85,-171,917,739),13252=>array(64,16,940,558),13253=>array(64,11,925,739),13254=>array(50,-187,942,761),13255=>array(63,16,955,763),13256=>array(61,11,939,739),13257=>array(64,-186,960,763),13258=>array(91,11,939,739),13259=>array(102,23,932,739),13260=>array(159,23,837,739),13261=>array(90,22,959,739),13262=>array(79,23,921,739),13263=>array(121,18,860,739),13264=>array(109,23,918,739),13265=>array(151,23,844,739),13266=>array(79,-187,921,739),13267=>array(166,23,842,739),13268=>array(88,11,947,739),13269=>array(87,23,913,739),13270=>array(69,16,931,739),13271=>array(93,-171,907,739),13272=>array(76,-171,955,558),13273=>array(69,23,931,739),13274=>array(84,23,961,739),13275=>array(98,16,918,558),13276=>array(68,23,944,763),13277=>array(51,11,952,739),13280=>array(119,-24,908,777),13281=>array(88,-24,908,797),13282=>array(86,-35,908,787),13283=>array(64,-24,908,781),13284=>array(89,-31,908,780),13285=>array(102,-34,914,787),13286=>array(90,-24,908,777),13287=>array(80,-25,908,789),13288=>array(82,-27,908,793),13289=>array(47,-35,918,795),13290=>array(47,-24,918,776),13291=>array(47,-24,918,793),13292=>array(47,-35,918,792),13293=>array(47,-24,918,785),13294=>array(47,-31,918,780),13295=>array(47,-32,918,787),13296=>array(47,-24,918,777),13297=>array(47,-24,918,786),13298=>array(47,-31,918,788),13299=>array(48,-35,918,795),13300=>array(48,-24,918,792),13301=>array(48,-24,918,792),13302=>array(48,-34,918,792),13303=>array(48,-24,918,792),13304=>array(48,-31,918,792),13305=>array(48,-32,918,792),13306=>array(48,-24,918,792),13307=>array(48,-24,918,792),13308=>array(48,-31,918,792),13309=>array(44,-35,918,795),13310=>array(44,-34,918,790),19968=>array(121,356,896,439),19969=>array(98,-68,911,768),19970=>array(102,-67,897,787),19971=>array(75,-11,896,823),19972=>array(92,9,927,814),19973=>array(92,9,927,814),19974=>array(115,-77,914,738),19975=>array(63,-77,959,738),19976=>array(83,-77,948,827),19977=>array(99,32,911,713),19978=>array(92,10,927,814),19979=>array(84,-59,916,772),19980=>array(53,-64,927,778),19981=>array(71,-65,928,769),19982=>array(68,-64,930,825),19983=>array(85,-66,937,782),19984=>array(98,-63,908,767),19985=>array(78,-11,922,764),19986=>array(80,-13,925,765),19987=>array(73,-68,921,828),19988=>array(84,-14,935,776),19989=>array(85,-6,942,771),19990=>array(64,-65,936,805),19991=>array(74,-69,926,817),19992=>array(76,-13,927,803),19993=>array(68,-74,933,767),19994=>array(67,-12,918,799),19995=>array(55,-4,915,827),19996=>array(52,-72,911,820),19997=>array(70,-9,925,828),19998=>array(58,-17,951,778),19999=>array(100,-54,898,767),20000=>array(68,-36,952,807),20001=>array(62,-64,952,787),20002=>array(66,-57,906,809),20003=>array(98,-62,914,783),20004=>array(62,-61,911,780),20005=>array(38,-61,914,782),20006=>array(68,-13,941,840),20007=>array(64,-74,944,818),20008=>array(439,-66,515,823),20009=>array(283,-55,652,833),20010=>array(30,-70,955,832),20011=>array(136,-53,866,805),20012=>array(248,-68,574,816),20013=>array(131,-65,860,826),20014=>array(71,-64,963,786),20015=>array(83,-68,933,844),20016=>array(73,-61,927,832),20017=>array(73,-72,894,826),20018=>array(123,-68,886,832),20019=>array(59,-70,912,830),20020=>array(103,-59,908,840),20021=>array(84,-54,930,814),20022=>array(289,225,647,575),20023=>array(134,287,875,584),20024=>array(52,-71,950,824),20025=>array(74,-73,939,777),20026=>array(82,-65,836,829),20027=>array(81,-6,930,841),20028=>array(82,-65,932,831),20029=>array(61,-57,912,771),20030=>array(18,-82,950,821),20031=>array(249,-60,554,834),20032=>array(72,-66,928,836),20033=>array(161,-77,953,786),20034=>array(66,-77,953,828),20035=>array(73,-56,894,776),20036=>array(117,-69,879,840),20037=>array(85,-50,957,835),20038=>array(75,-49,949,802),20039=>array(74,-24,940,816),20040=>array(94,-28,930,816),20041=>array(54,-71,955,818),20042=>array(99,262,872,706),20043=>array(64,-63,947,822),20044=>array(71,-68,889,828),20045=>array(56,-67,945,850),20046=>array(93,-64,924,826),20047=>array(65,-63,949,829),20048=>array(49,-59,941,833),20049=>array(54,-61,953,837),20050=>array(89,-77,921,826),20051=>array(87,-73,927,826),20052=>array(39,-69,948,819),20053=>array(38,-62,929,837),20054=>array(59,-65,926,831),20055=>array(50,-70,953,854),20056=>array(50,-70,953,824),20057=>array(158,-14,909,740),20058=>array(222,0,890,782),20059=>array(92,290,913,534),20060=>array(80,-20,954,822),20061=>array(77,-46,948,831),20062=>array(62,-27,925,835),20063=>array(92,-9,930,830),20064=>array(118,-62,818,769),20065=>array(96,-58,834,832),20066=>array(137,-32,953,825),20067=>array(85,-32,953,825),20068=>array(96,-43,924,792),20069=>array(113,-15,894,831),20070=>array(60,-71,894,819),20071=>array(101,-15,922,829),20072=>array(57,-53,953,828),20073=>array(91,-53,937,833),20074=>array(85,-28,958,753),20075=>array(60,-15,875,826),20076=>array(115,-15,889,804),20077=>array(76,-15,918,777),20078=>array(146,-40,897,829),20079=>array(93,-30,914,829),20080=>array(39,-62,920,779),20081=>array(58,-44,936,826),20082=>array(77,-15,954,828),20083=>array(48,-85,958,815),20084=>array(61,-45,938,806),20085=>array(74,-55,961,850),20086=>array(62,-55,956,849),20087=>array(58,-51,952,836),20088=>array(42,-27,959,828),20089=>array(108,-64,976,833),20090=>array(66,-31,938,831),20091=>array(50,-31,943,847),20092=>array(80,-31,966,859),20093=>array(67,-58,929,836),20094=>array(48,-64,950,842),20095=>array(44,-62,958,824),20096=>array(64,-43,956,853),20097=>array(81,-61,961,837),20098=>array(49,-68,962,843),20099=>array(36,-62,960,840),20100=>array(54,-30,954,831),20101=>array(290,-40,544,818),20102=>array(172,-41,829,773),20103=>array(98,-62,895,822),20104=>array(92,-66,913,782),20105=>array(69,-70,939,829),20106=>array(60,-65,950,826),20107=>array(60,-65,950,826),20108=>array(100,103,916,657),20109=>array(98,-51,914,764),20110=>array(89,-69,908,773),20111=>array(64,-62,912,770),20112=>array(64,-62,912,770),20113=>array(71,-50,934,760),20114=>array(78,-6,932,775),20115=>array(42,-66,919,784),20116=>array(82,25,916,744),20117=>array(63,-70,935,829),20118=>array(57,-24,960,791),20119=>array(57,-24,950,822),20120=>array(71,-6,941,770),20121=>array(52,-24,948,780),20122=>array(63,-7,914,775),20123=>array(65,-17,933,829),20124=>array(64,-24,952,783),20125=>array(77,-17,928,852),20126=>array(64,-24,952,783),20127=>array(74,-29,938,811),20128=>array(73,391,927,690),20129=>array(64,-3,936,822),20130=>array(66,-58,959,822),20131=>array(98,-55,911,835),20132=>array(70,-65,946,822),20133=>array(85,-64,931,840),20134=>array(57,-66,934,822),20135=>array(25,-63,889,843),20136=>array(74,-61,926,825),20137=>array(62,-56,916,841),20138=>array(81,-78,941,841),20139=>array(74,-58,936,828),20140=>array(53,-64,950,825),20141=>array(93,-58,907,836),20142=>array(65,-68,950,838),20143=>array(77,-62,923,840),20144=>array(59,-67,942,828),20145=>array(39,-63,941,846),20146=>array(49,-67,920,837),20147=>array(87,-45,961,838),20148=>array(71,-56,973,861),20149=>array(29,-75,944,841),20150=>array(53,-47,947,845),20151=>array(40,-59,955,850),20152=>array(52,-69,953,836),20153=>array(54,-47,960,858),20154=>array(71,-48,943,806),20155=>array(256,-69,592,824),20156=>array(32,-27,973,804),20157=>array(50,-56,978,838),20158=>array(171,16,906,794),20159=>array(34,-64,943,829),20160=>array(48,-68,950,829),20161=>array(47,-65,953,835),20162=>array(65,-65,910,838),20163=>array(43,-67,954,837),20164=>array(42,-66,957,775),20165=>array(23,-62,936,832),20166=>array(44,-67,956,835),20167=>array(39,-73,957,836),20168=>array(49,-73,955,828),20169=>array(60,-67,956,825),20170=>array(33,-77,967,836),20171=>array(54,-71,951,858),20172=>array(56,-47,953,831),20173=>array(58,-71,923,829),20174=>array(18,-72,964,836),20175=>array(44,-62,941,837),20176=>array(30,-58,955,832),20177=>array(30,-34,955,827),20178=>array(31,-68,964,811),20179=>array(26,-28,941,832),20180=>array(50,-64,954,834),20181=>array(46,-64,935,828),20182=>array(32,-68,956,844),20183=>array(51,-64,959,839),20184=>array(55,-73,947,838),20185=>array(43,-68,894,822),20186=>array(55,-64,957,840),20187=>array(60,-73,930,838),20188=>array(54,-63,939,832),20189=>array(56,-15,958,843),20190=>array(51,-67,895,832),20191=>array(54,-64,948,833),20192=>array(48,-67,948,829),20193=>array(46,-66,952,842),20194=>array(48,-69,920,829),20195=>array(46,-68,957,830),20196=>array(38,-67,961,846),20197=>array(66,-52,945,802),20198=>array(48,-66,951,829),20199=>array(76,-39,945,828),20200=>array(44,-66,937,830),20201=>array(57,-59,948,835),20202=>array(27,-75,949,823),20203=>array(44,-80,944,829),20204=>array(32,-57,897,837),20205=>array(24,-65,969,829),20206=>array(34,-70,949,839),20207=>array(41,-63,958,846),20208=>array(31,-64,897,853),20209=>array(54,-67,949,840),20210=>array(50,-68,902,833),20211=>array(52,-67,955,832),20212=>array(48,-66,859,832),20213=>array(52,-67,956,842),20214=>array(45,-67,950,837),20215=>array(33,-74,982,847),20216=>array(28,-69,962,833),20217=>array(43,-79,936,836),20218=>array(58,-38,982,866),20219=>array(27,-73,949,830),20220=>array(33,-67,938,835),20221=>array(50,-74,968,828),20222=>array(23,-67,951,835),20223=>array(56,-70,953,845),20224=>array(49,-61,948,837),20225=>array(28,-28,958,841),20226=>array(41,-65,946,836),20227=>array(49,-55,956,840),20228=>array(52,-68,912,828),20229=>array(41,-64,945,832),20230=>array(49,-64,921,843),20231=>array(45,-66,967,835),20232=>array(40,-59,954,846),20233=>array(40,-69,954,839),20234=>array(34,-75,950,827),20235=>array(39,-55,963,844),20236=>array(41,-72,930,819),20237=>array(29,-73,947,832),20238=>array(49,-66,960,840),20239=>array(50,-67,954,841),20240=>array(47,-73,950,822),20241=>array(49,-71,953,832),20242=>array(51,-66,937,829),20243=>array(46,-66,952,827),20244=>array(41,-71,958,832),20245=>array(50,-71,961,832),20246=>array(55,-87,958,835),20247=>array(34,-75,947,828),20248=>array(42,-64,945,840),20249=>array(50,-69,959,829),20250=>array(51,-56,954,832),20251=>array(39,-68,924,819),20252=>array(65,-57,941,831),20253=>array(45,-64,941,835),20254=>array(28,-81,950,822),20255=>array(30,-58,912,835),20256=>array(28,-66,903,831),20257=>array(50,-74,951,829),20258=>array(49,-67,932,835),20259=>array(50,-67,940,829),20260=>array(30,-66,919,823),20261=>array(39,-73,947,819),20262=>array(31,-59,935,833),20263=>array(25,-67,949,828),20264=>array(37,-67,906,836),20265=>array(37,-67,976,850),20266=>array(32,-68,895,824),20267=>array(34,-66,914,822),20268=>array(50,-66,952,834),20269=>array(39,-63,951,836),20270=>array(49,-71,959,840),20271=>array(62,-65,887,842),20272=>array(38,-67,951,835),20273=>array(62,-65,951,852),20274=>array(51,-76,952,830),20275=>array(36,-66,945,833),20276=>array(42,-65,955,835),20277=>array(42,-65,890,833),20278=>array(26,-71,965,849),20279=>array(33,-70,896,833),20280=>array(48,-65,897,843),20281=>array(34,-69,958,838),20282=>array(52,-68,896,834),20283=>array(45,-65,952,839),20284=>array(40,-69,960,839),20285=>array(29,-68,908,831),20286=>array(43,-69,936,822),20287=>array(44,-66,960,835),20288=>array(44,-65,915,835),20289=>array(48,-64,948,832),20290=>array(48,-64,946,831),20291=>array(45,-66,902,840),20292=>array(45,-66,948,840),20293=>array(45,-66,937,840),20294=>array(31,-73,934,839),20295=>array(38,-67,940,831),20296=>array(50,-65,956,842),20297=>array(42,-64,948,837),20298=>array(37,-73,966,838),20299=>array(36,-66,906,824),20300=>array(45,-63,958,837),20301=>array(41,-71,947,827),20302=>array(38,-68,961,838),20303=>array(35,-70,948,839),20304=>array(34,-66,946,834),20305=>array(42,-67,945,833),20306=>array(40,-63,965,837),20307=>array(37,-64,966,831),20308=>array(35,-63,935,840),20309=>array(33,-70,958,839),20310=>array(47,-67,956,832),20311=>array(48,-67,951,834),20312=>array(40,-61,970,857),20313=>array(61,-63,951,852),20314=>array(57,-67,967,839),20315=>array(47,-65,924,834),20316=>array(37,-67,954,847),20317=>array(66,-67,921,841),20318=>array(43,-69,945,836),20319=>array(46,-73,969,846),20320=>array(16,-73,951,833),20321=>array(48,-71,957,830),20322=>array(38,-61,943,837),20323=>array(37,-65,895,833),20324=>array(44,-68,962,840),20325=>array(26,-18,943,831),20326=>array(38,-64,921,831),20327=>array(47,-65,953,842),20328=>array(43,-59,955,836),20329=>array(39,-67,959,833),20330=>array(50,-68,897,838),20331=>array(52,-66,964,839),20332=>array(41,-65,942,832),20333=>array(37,-69,944,839),20334=>array(53,-64,968,847),20335=>array(44,-65,947,842),20336=>array(48,-67,947,833),20337=>array(48,-24,975,852),20338=>array(47,-70,883,840),20339=>array(21,-72,933,834),20340=>array(54,-74,948,835),20341=>array(37,-70,955,851),20342=>array(35,-73,924,834),20343=>array(53,-66,959,837),20344=>array(48,-55,948,845),20345=>array(42,-59,963,851),20346=>array(44,-67,951,832),20347=>array(22,-84,946,829),20348=>array(27,-70,941,835),20349=>array(63,-57,955,850),20350=>array(24,-67,974,837),20351=>array(50,-73,985,836),20352=>array(44,-70,913,841),20353=>array(46,-64,960,839),20354=>array(43,-63,954,846),20355=>array(41,-66,961,836),20356=>array(18,-66,921,831),20357=>array(41,-61,947,842),20358=>array(63,-64,956,835),20359=>array(40,-70,961,839),20360=>array(48,-62,920,844),20361=>array(32,-67,975,848),20362=>array(32,-67,946,838),20363=>array(41,-63,911,845),20364=>array(33,-81,952,861),20365=>array(52,-74,949,829),20366=>array(52,-74,976,827),20367=>array(36,-80,953,824),20368=>array(36,-61,958,847),20369=>array(39,-65,954,844),20370=>array(42,-64,942,836),20371=>array(42,-64,948,835),20372=>array(43,-71,947,843),20373=>array(42,-62,955,843),20374=>array(42,-62,966,852),20375=>array(50,-65,908,829),20376=>array(42,-70,964,829),20377=>array(38,-59,949,847),20378=>array(48,-57,938,845),20379=>array(38,-70,949,844),20380=>array(49,-73,954,843),20381=>array(36,-73,947,839),20382=>array(52,-55,905,847),20383=>array(44,-70,954,844),20384=>array(28,-67,944,832),20385=>array(24,-61,938,835),20386=>array(47,-67,949,828),20387=>array(32,-65,883,833),20388=>array(37,-60,945,832),20389=>array(10,-61,932,834),20390=>array(38,-74,922,831),20391=>array(18,-60,875,832),20392=>array(41,-55,967,848),20393=>array(32,-59,943,833),20394=>array(27,-69,937,834),20395=>array(37,-60,949,843),20396=>array(27,-69,962,834),20397=>array(27,-69,960,834),20398=>array(34,-68,946,839),20399=>array(44,-73,974,835),20400=>array(44,-73,933,835),20401=>array(44,-73,940,826),20402=>array(42,-73,969,827),20403=>array(39,-63,956,853),20404=>array(48,-61,975,852),20405=>array(36,-64,948,840),20406=>array(49,-63,900,836),20407=>array(41,-63,913,830),20408=>array(49,-63,942,836),20409=>array(35,-63,962,835),20410=>array(57,-65,957,843),20411=>array(51,-72,960,828),20412=>array(55,-64,946,830),20413=>array(53,-64,927,843),20414=>array(52,-64,953,843),20415=>array(42,-73,947,834),20416=>array(43,-63,955,842),20417=>array(35,-59,964,840),20418=>array(40,-65,954,845),20419=>array(20,-70,961,840),20420=>array(41,-64,960,840),20421=>array(42,-70,960,840),20422=>array(20,-70,948,840),20423=>array(28,-64,948,840),20424=>array(20,-70,939,840),20425=>array(53,-67,963,840),20426=>array(42,-79,953,849),20427=>array(40,-70,956,840),20428=>array(40,-70,945,840),20429=>array(59,-69,970,832),20430=>array(42,-57,954,829),20431=>array(52,-67,925,836),20432=>array(54,-66,918,847),20433=>array(21,-67,911,842),20434=>array(54,-67,946,845),20435=>array(39,-67,955,839),20436=>array(39,-54,958,841),20437=>array(39,-65,939,841),20438=>array(47,-64,947,841),20439=>array(36,-65,972,839),20440=>array(31,-62,951,832),20441=>array(42,-70,957,844),20442=>array(25,-68,948,836),20443=>array(50,-64,969,841),20444=>array(44,-65,955,850),20445=>array(35,-73,965,832),20446=>array(48,-61,975,852),20447=>array(23,-69,977,846),20448=>array(44,-68,968,840),20449=>array(32,-68,941,825),20450=>array(43,-82,954,844),20451=>array(25,-76,933,819),20452=>array(25,-70,919,842),20453=>array(26,-67,934,839),20454=>array(23,-71,953,832),20455=>array(25,-69,929,826),20456=>array(35,-69,923,823),20457=>array(32,-58,917,834),20458=>array(19,-61,911,829),20459=>array(25,-69,941,830),20460=>array(42,-64,961,850),20461=>array(19,-58,944,836),20462=>array(33,-76,973,844),20463=>array(33,-71,950,831),20464=>array(42,-64,913,850),20465=>array(22,-69,944,835),20466=>array(17,-57,909,852),20467=>array(37,-66,957,842),20468=>array(47,-60,947,840),20469=>array(41,-69,963,838),20470=>array(34,-69,981,835),20471=>array(46,-68,947,825),20472=>array(36,-68,964,843),20473=>array(51,-67,929,836),20474=>array(34,-61,967,841),20475=>array(51,-72,946,836),20476=>array(41,-74,911,844),20477=>array(44,-72,946,848),20478=>array(39,-65,950,853),20479=>array(39,-65,950,857),20480=>array(44,-68,972,831),20481=>array(47,-66,946,849),20482=>array(37,-68,955,835),20483=>array(44,-65,961,837),20484=>array(39,-64,922,844),20485=>array(32,-64,946,835),20486=>array(49,-68,941,846),20487=>array(45,-75,947,834),20488=>array(43,-65,972,836),20489=>array(62,-71,946,855),20490=>array(43,-65,969,831),20491=>array(50,-68,918,838),20492=>array(39,-65,927,854),20493=>array(39,-69,950,835),20494=>array(49,-72,943,838),20495=>array(31,-73,966,846),20496=>array(14,-67,952,848),20497=>array(27,-70,892,841),20498=>array(53,-68,903,839),20499=>array(50,-66,952,843),20500=>array(38,-66,908,831),20501=>array(46,-67,949,832),20502=>array(42,-65,940,844),20503=>array(54,-64,890,834),20504=>array(35,-65,895,836),20505=>array(20,-68,958,843),20506=>array(36,-64,953,842),20507=>array(54,-77,951,834),20508=>array(45,-72,926,840),20509=>array(73,-73,961,833),20510=>array(35,-68,956,832),20511=>array(41,-68,953,838),20512=>array(46,-71,935,825),20513=>array(52,-65,897,833),20514=>array(44,-64,978,839),20515=>array(29,-69,974,847),20516=>array(36,-68,943,837),20517=>array(26,-69,954,834),20518=>array(34,-67,963,835),20519=>array(62,-59,967,839),20520=>array(32,-71,947,841),20521=>array(36,-67,956,847),20522=>array(49,-77,951,821),20523=>array(31,-71,976,855),20524=>array(46,-65,951,836),20525=>array(12,-67,952,842),20526=>array(33,-67,979,843),20527=>array(52,-68,967,830),20528=>array(44,-65,956,834),20529=>array(59,-59,960,836),20530=>array(59,-64,943,836),20531=>array(51,-64,956,831),20532=>array(46,-68,975,835),20533=>array(47,-62,951,830),20534=>array(39,-65,961,838),20535=>array(52,-62,963,832),20536=>array(47,-62,975,848),20537=>array(39,-71,955,841),20538=>array(35,-86,913,827),20539=>array(30,-65,973,835),20540=>array(37,-68,943,834),20541=>array(54,-59,969,875),20542=>array(29,-59,955,828),20543=>array(39,-64,939,841),20544=>array(46,-70,972,839),20545=>array(44,-68,952,836),20546=>array(48,-65,960,850),20547=>array(27,-73,945,841),20548=>array(46,-70,975,837),20549=>array(46,-70,956,837),20550=>array(39,-69,972,840),20551=>array(41,-70,962,835),20552=>array(45,-69,920,825),20553=>array(42,-66,948,844),20554=>array(45,-67,918,835),20555=>array(40,-72,951,841),20556=>array(36,-66,954,847),20557=>array(47,-73,961,833),20558=>array(33,-71,970,844),20559=>array(38,-68,921,837),20560=>array(35,-71,939,836),20561=>array(37,-68,966,832),20562=>array(41,-66,944,842),20563=>array(47,-68,960,841),20564=>array(41,-66,925,842),20565=>array(31,-68,963,840),20566=>array(31,-66,938,842),20567=>array(55,-67,956,843),20568=>array(46,-65,920,829),20569=>array(61,-65,908,839),20570=>array(51,-74,963,835),20571=>array(46,-67,958,836),20572=>array(37,-65,934,834),20573=>array(37,-65,953,845),20574=>array(44,-70,955,833),20575=>array(49,-52,951,852),20576=>array(46,-75,960,834),20577=>array(51,-64,959,841),20578=>array(40,-54,973,848),20579=>array(54,-68,956,845),20580=>array(44,-71,936,828),20581=>array(43,-73,966,834),20582=>array(43,-70,957,834),20583=>array(28,-70,980,834),20584=>array(31,-71,969,834),20585=>array(55,-73,943,838),20586=>array(47,-53,948,839),20587=>array(53,-66,968,839),20588=>array(33,-68,970,846),20589=>array(38,-62,944,837),20590=>array(45,-71,952,830),20591=>array(41,-74,960,843),20592=>array(40,-73,960,835),20593=>array(43,-67,935,840),20594=>array(43,-65,971,833),20595=>array(44,-64,951,839),20596=>array(42,-68,902,834),20597=>array(48,-79,943,836),20598=>array(38,-62,907,836),20599=>array(53,-63,979,862),20600=>array(37,-71,963,824),20601=>array(23,-66,962,840),20602=>array(44,-66,960,840),20603=>array(23,-66,933,830),20604=>array(36,-61,954,839),20605=>array(41,-67,924,835),20606=>array(27,-69,925,834),20607=>array(21,-57,912,834),20608=>array(26,-72,967,841),20609=>array(50,-72,963,832),20610=>array(49,-69,961,837),20611=>array(55,-70,948,837),20612=>array(41,-64,968,840),20613=>array(31,-65,941,838),20614=>array(56,-75,958,838),20615=>array(58,-72,961,833),20616=>array(30,-65,979,838),20617=>array(44,-69,953,827),20618=>array(44,-73,936,827),20619=>array(44,-69,951,827),20620=>array(44,-58,941,848),20621=>array(36,-64,941,833),20622=>array(41,-58,955,848),20623=>array(45,-75,948,843),20624=>array(39,-65,906,841),20625=>array(31,-65,971,847),20626=>array(38,-65,978,837),20627=>array(53,-60,903,842),20628=>array(45,-57,960,850),20629=>array(60,-71,960,830),20630=>array(29,-80,969,851),20631=>array(29,-69,950,843),20632=>array(52,-58,971,847),20633=>array(29,-69,956,835),20634=>array(25,-57,978,832),20635=>array(44,-66,958,840),20636=>array(46,-72,953,839),20637=>array(39,-73,917,829),20638=>array(39,-62,954,853),20639=>array(42,-71,922,844),20640=>array(37,-67,968,844),20641=>array(47,-44,970,844),20642=>array(37,-68,976,854),20643=>array(32,-65,976,845),20644=>array(42,-64,964,836),20645=>array(28,-64,934,829),20646=>array(28,-72,943,823),20647=>array(30,-66,938,841),20648=>array(28,-63,922,833),20649=>array(27,-61,924,828),20650=>array(27,-76,967,847),20651=>array(34,-70,943,830),20652=>array(30,-60,936,840),20653=>array(34,-68,957,840),20654=>array(44,-66,954,843),20655=>array(44,-64,969,838),20656=>array(38,-71,903,840),20657=>array(40,-74,973,835),20658=>array(32,-67,958,835),20659=>array(35,-70,951,836),20660=>array(35,-65,948,838),20661=>array(41,-72,963,833),20662=>array(46,-74,967,838),20663=>array(31,-67,953,839),20664=>array(42,-80,961,837),20665=>array(39,-65,952,847),20666=>array(29,-65,958,841),20667=>array(28,-66,961,841),20668=>array(33,-66,948,841),20669=>array(44,-71,954,847),20670=>array(35,-67,962,831),20671=>array(39,-70,949,834),20672=>array(29,-72,949,859),20673=>array(47,-62,965,839),20674=>array(30,-72,950,835),20675=>array(26,-65,907,832),20676=>array(46,-65,955,834),20677=>array(33,-70,944,840),20678=>array(17,-61,965,840),20679=>array(36,-57,974,844),20680=>array(41,-81,960,832),20681=>array(37,-66,979,847),20682=>array(41,-64,958,840),20683=>array(46,-80,970,847),20684=>array(25,-71,968,847),20685=>array(43,-66,925,832),20686=>array(37,-58,950,843),20687=>array(40,-62,963,840),20688=>array(45,-66,909,844),20689=>array(35,-66,965,832),20690=>array(47,-65,952,843),20691=>array(55,-79,959,840),20692=>array(46,-67,949,843),20693=>array(48,-64,963,835),20694=>array(39,-68,951,834),20695=>array(52,-71,934,831),20696=>array(23,-67,985,844),20697=>array(44,-70,969,835),20698=>array(41,-64,983,842),20699=>array(38,-74,963,839),20700=>array(55,-45,963,829),20701=>array(55,-70,962,826),20702=>array(33,-65,930,839),20703=>array(38,-56,946,835),20704=>array(62,-70,965,828),20705=>array(53,-52,962,836),20706=>array(43,-67,947,833),20707=>array(34,-64,968,836),20708=>array(68,-67,967,835),20709=>array(38,-67,962,837),20710=>array(35,-64,967,851),20711=>array(39,-60,907,843),20712=>array(39,-72,968,841),20713=>array(52,-52,911,840),20714=>array(54,-64,918,833),20715=>array(52,-52,962,840),20716=>array(34,-68,967,842),20717=>array(24,-65,972,838),20718=>array(29,-71,953,832),20719=>array(57,-72,974,833),20720=>array(47,-63,963,835),20721=>array(30,-62,952,847),20722=>array(25,-75,948,832),20723=>array(20,-69,965,839),20724=>array(52,-52,911,840),20725=>array(45,-61,956,838),20726=>array(43,-70,982,832),20727=>array(45,-72,955,847),20728=>array(30,-70,972,834),20729=>array(28,-71,949,826),20730=>array(47,-70,959,828),20731=>array(35,-65,958,847),20732=>array(47,-66,951,833),20733=>array(37,-68,988,830),20734=>array(41,-57,972,858),20735=>array(34,-70,979,834),20736=>array(39,-68,963,845),20737=>array(39,-74,942,844),20738=>array(36,-76,977,843),20739=>array(44,-70,960,838),20740=>array(36,-67,960,840),20741=>array(53,-68,915,836),20742=>array(26,-66,978,841),20743=>array(50,-66,979,837),20744=>array(34,-61,968,863),20745=>array(38,-69,965,851),20746=>array(34,-72,978,836),20747=>array(20,-72,942,839),20748=>array(28,-58,963,850),20749=>array(39,-56,965,853),20750=>array(42,-65,964,836),20751=>array(38,-67,968,845),20752=>array(28,-68,964,854),20753=>array(47,-79,962,825),20754=>array(36,-60,956,839),20755=>array(52,-67,964,829),20756=>array(32,-65,953,838),20757=>array(41,-71,963,837),20758=>array(51,-65,942,843),20759=>array(30,-64,969,839),20760=>array(31,-64,964,845),20761=>array(31,-64,960,845),20762=>array(37,-59,938,838),20763=>array(39,-67,943,842),20764=>array(39,-67,948,841),20765=>array(50,-65,937,856),20766=>array(37,-75,951,837),20767=>array(28,-73,961,842),20768=>array(47,-71,954,836),20769=>array(54,-68,923,826),20770=>array(46,-70,964,829),20771=>array(64,-74,959,846),20772=>array(49,-68,965,830),20773=>array(47,-79,940,835),20774=>array(42,-76,963,841),20775=>array(37,-77,963,838),20776=>array(39,-80,947,838),20777=>array(49,-75,934,838),20778=>array(30,-73,954,835),20779=>array(40,-73,957,840),20780=>array(5,-73,996,835),20781=>array(35,-73,972,830),20782=>array(36,-66,952,836),20783=>array(26,-64,963,846),20784=>array(44,-75,951,834),20785=>array(28,-66,967,845),20786=>array(40,-68,946,838),20787=>array(41,-66,969,844),20788=>array(33,-69,979,844),20789=>array(32,-68,971,843),20790=>array(33,-67,940,848),20791=>array(36,-69,968,841),20792=>array(44,-55,950,840),20793=>array(30,-72,954,840),20794=>array(29,-69,955,839),20795=>array(27,-68,973,848),20796=>array(34,-70,971,832),20797=>array(47,-72,935,832),20798=>array(36,-71,964,839),20799=>array(39,-81,955,815),20800=>array(46,-64,942,754),20801=>array(82,-59,936,842),20802=>array(40,-65,963,824),20803=>array(76,-67,939,767),20804=>array(85,-65,932,776),20805=>array(64,-68,951,822),20806=>array(73,-64,933,832),20807=>array(40,-60,953,836),20808=>array(89,-67,934,839),20809=>array(66,-63,930,832),20810=>array(49,-68,949,835),20811=>array(60,-67,937,832),20812=>array(51,-60,953,812),20813=>array(52,-70,948,840),20814=>array(68,-60,959,831),20815=>array(37,-66,956,794),20816=>array(52,-66,929,737),20817=>array(67,-64,941,848),20818=>array(88,-62,927,833),20819=>array(36,-64,970,794),20820=>array(63,-67,950,842),20821=>array(41,-65,962,780),20822=>array(58,-67,956,848),20823=>array(42,-62,959,834),20824=>array(30,-50,960,823),20825=>array(29,-80,961,845),20826=>array(52,-64,948,828),20827=>array(30,-79,955,845),20828=>array(52,-66,948,844),20829=>array(29,-80,954,846),20830=>array(28,-81,977,844),20831=>array(41,-68,956,830),20832=>array(36,-66,962,845),20833=>array(27,-79,953,845),20834=>array(32,-71,958,830),20835=>array(34,-81,965,845),20836=>array(28,-79,958,844),20837=>array(85,-38,933,769),20838=>array(143,-12,903,787),20839=>array(127,-69,877,786),20840=>array(40,-23,935,803),20841=>array(60,-68,953,783),20842=>array(35,-66,965,822),20843=>array(44,-36,949,791),20844=>array(51,-54,956,804),20845=>array(62,-29,946,810),20846=>array(46,-60,954,816),20847=>array(118,-57,799,812),20848=>array(65,-27,915,796),20849=>array(75,-70,925,829),20850=>array(90,-57,931,809),20851=>array(38,-62,919,831),20852=>array(47,-51,915,809),20853=>array(53,-66,958,817),20854=>array(63,-65,936,832),20855=>array(63,-64,942,789),20856=>array(52,-71,943,833),20857=>array(63,-47,912,831),20858=>array(46,-54,951,829),20859=>array(33,-67,951,839),20860=>array(50,-62,959,841),20861=>array(65,-63,917,836),20862=>array(65,-61,935,837),20863=>array(79,-56,952,830),20864=>array(57,-74,929,834),20865=>array(50,-67,969,814),20866=>array(131,-66,869,766),20867=>array(136,-69,864,795),20868=>array(52,-66,942,800),20869=>array(131,-64,865,824),20870=>array(151,-51,849,781),20871=>array(70,-62,934,849),20872=>array(107,-61,856,789),20873=>array(53,-67,947,839),20874=>array(52,-66,948,788),20875=>array(131,-65,887,779),20876=>array(47,-79,958,786),20877=>array(67,-61,954,791),20878=>array(117,-55,879,800),20879=>array(122,-65,878,783),20880=>array(189,-50,851,788),20881=>array(189,-60,851,834),20882=>array(131,-65,869,810),20883=>array(60,-65,954,833),20884=>array(101,-60,941,809),20885=>array(43,-61,951,809),20886=>array(94,353,906,541),20887=>array(56,-67,945,762),20888=>array(44,-73,949,825),20889=>array(65,-58,939,786),20890=>array(108,-67,891,772),20891=>array(58,-59,909,780),20892=>array(42,-70,959,828),20893=>array(51,-59,953,799),20894=>array(50,-65,961,782),20895=>array(81,-38,940,806),20896=>array(51,-67,957,787),20897=>array(75,-50,951,763),20898=>array(60,-67,965,783),20899=>array(76,-53,945,790),20900=>array(54,-60,952,795),20901=>array(67,-70,933,793),20902=>array(43,-60,959,785),20903=>array(28,-66,986,783),20904=>array(99,-55,908,785),20905=>array(82,-66,910,802),20906=>array(60,-67,965,785),20907=>array(338,-28,574,766),20908=>array(67,-72,958,855),20909=>array(61,-72,957,840),20910=>array(40,-57,940,717),20911=>array(52,-48,888,781),20912=>array(48,-65,966,837),20913=>array(53,-22,951,769),20914=>array(44,-61,897,833),20915=>array(55,-66,972,836),20916=>array(65,-63,936,793),20917=>array(38,-72,933,758),20918=>array(63,-62,954,834),20919=>array(54,-71,966,849),20920=>array(49,-62,954,835),20921=>array(58,-71,956,839),20922=>array(58,-61,939,786),20923=>array(52,-60,948,832),20924=>array(55,-66,957,827),20925=>array(48,-67,893,830),20926=>array(48,-62,970,843),20927=>array(31,-62,959,841),20928=>array(58,-61,922,839),20929=>array(58,-65,948,835),20930=>array(64,-71,955,840),20931=>array(48,-68,975,843),20932=>array(44,-70,936,835),20933=>array(59,-49,895,788),20934=>array(57,-65,950,835),20935=>array(39,-60,943,830),20936=>array(55,-67,950,822),20937=>array(63,-63,961,830),20938=>array(49,-50,955,854),20939=>array(33,-74,878,781),20940=>array(41,-70,959,831),20941=>array(48,-58,965,839),20942=>array(57,-38,962,817),20943=>array(38,-80,939,834),20944=>array(60,-27,954,787),20945=>array(42,-67,959,834),20946=>array(42,-58,927,835),20947=>array(54,-62,978,791),20948=>array(46,-52,974,866),20949=>array(54,-70,946,788),20950=>array(54,-64,950,841),20951=>array(39,-69,951,825),20952=>array(39,-53,951,851),20953=>array(32,-59,956,797),20954=>array(59,-68,955,831),20955=>array(43,-64,930,832),20956=>array(55,-65,973,833),20957=>array(16,-70,972,819),20958=>array(46,-73,951,818),20959=>array(37,-70,962,837),20960=>array(34,-65,961,774),20961=>array(72,-71,935,767),20962=>array(72,-71,935,831),20963=>array(72,-71,935,801),20964=>array(34,-65,939,791),20965=>array(52,-74,949,778),20966=>array(18,-67,935,818),20967=>array(47,-65,953,791),20968=>array(34,-65,939,791),20969=>array(38,-61,961,791),20970=>array(34,-65,939,791),20971=>array(48,-58,958,842),20972=>array(34,-65,939,791),20973=>array(32,-60,966,837),20974=>array(34,-65,939,791),20975=>array(72,-65,972,826),20976=>array(63,-66,963,792),20977=>array(62,-67,954,836),20978=>array(63,-66,963,792),20979=>array(59,-74,954,839),20980=>array(39,-56,952,800),20981=>array(112,-72,888,808),20982=>array(130,-44,870,775),20983=>array(128,-64,872,798),20984=>array(143,-66,894,778),20985=>array(126,-38,874,775),20986=>array(144,-65,868,838),20987=>array(75,-67,925,826),20988=>array(111,-66,889,819),20989=>array(81,-61,919,799),20990=>array(102,-52,898,803),20991=>array(75,-64,925,828),20992=>array(85,-34,856,760),20993=>array(80,-50,868,782),20994=>array(364,-64,619,827),20995=>array(46,-54,877,761),20996=>array(53,-35,947,751),20997=>array(70,-69,917,751),20998=>array(65,-69,936,779),20999=>array(44,-73,897,797),21000=>array(77,-64,899,817),21001=>array(55,-77,905,826),21002=>array(71,-62,893,831),21003=>array(56,-63,893,831),21004=>array(72,-66,908,836),21005=>array(77,-43,851,828),21006=>array(71,-62,893,839),21007=>array(62,-63,913,840),21008=>array(53,-66,910,821),21009=>array(59,-70,899,829),21010=>array(45,-64,897,835),21011=>array(41,-69,907,826),21012=>array(95,-66,914,836),21013=>array(36,-66,947,806),21014=>array(60,-69,913,826),21015=>array(83,-76,901,832),21016=>array(29,-57,884,841),21017=>array(30,-66,883,823),21018=>array(90,-60,873,830),21019=>array(43,-61,893,837),21020=>array(57,-64,912,832),21021=>array(32,-73,900,822),21022=>array(56,-59,900,833),21023=>array(78,-70,893,831),21024=>array(27,-75,885,820),21025=>array(100,-67,901,828),21026=>array(49,-61,907,835),21027=>array(67,-65,878,831),21028=>array(58,-70,898,832),21029=>array(54,-68,899,825),21030=>array(72,-65,873,831),21031=>array(58,-64,906,831),21032=>array(55,-64,911,841),21033=>array(57,-67,920,826),21034=>array(63,-68,906,830),21035=>array(70,-70,883,821),21036=>array(44,-63,897,841),21037=>array(21,-60,875,827),21038=>array(77,-69,898,831),21039=>array(53,-64,900,823),21040=>array(65,-65,905,826),21041=>array(47,-69,973,825),21042=>array(64,-64,914,828),21043=>array(42,-65,905,831),21044=>array(44,-68,898,826),21045=>array(54,-61,894,833),21046=>array(77,-68,914,836),21047=>array(59,-68,898,830),21048=>array(69,-55,952,837),21049=>array(41,-63,892,837),21050=>array(71,-65,906,831),21051=>array(56,-63,902,829),21052=>array(62,-54,927,831),21053=>array(30,-57,881,837),21054=>array(42,-62,898,825),21055=>array(35,-68,882,823),21056=>array(79,-63,874,826),21057=>array(60,-62,919,831),21058=>array(28,-68,882,830),21059=>array(41,-64,897,845),21060=>array(67,-65,918,831),21061=>array(50,-69,895,829),21062=>array(138,-69,899,829),21063=>array(67,-70,897,830),21064=>array(119,-66,879,825),21065=>array(53,-63,900,834),21066=>array(80,-63,894,833),21067=>array(35,-63,965,836),21068=>array(63,-66,914,835),21069=>array(76,-60,924,850),21070=>array(79,-70,907,841),21071=>array(33,-69,971,839),21072=>array(88,-63,875,830),21073=>array(28,-65,883,838),21074=>array(77,-62,910,829),21075=>array(44,-59,924,814),21076=>array(60,-71,906,829),21077=>array(50,-57,912,845),21078=>array(63,-65,896,833),21079=>array(110,-69,891,830),21080=>array(88,-68,874,830),21081=>array(35,-62,958,830),21082=>array(46,-58,893,836),21083=>array(103,-67,898,829),21084=>array(52,-73,918,851),21085=>array(71,-62,893,848),21086=>array(82,-65,920,836),21087=>array(66,-73,913,823),21088=>array(55,-71,877,844),21089=>array(62,-67,943,835),21090=>array(73,-68,924,823),21091=>array(35,-65,907,844),21092=>array(52,-66,906,826),21093=>array(54,-48,879,836),21094=>array(32,-63,900,840),21095=>array(21,-62,880,833),21096=>array(39,-66,922,834),21097=>array(36,-67,910,834),21098=>array(70,-64,927,842),21099=>array(55,-75,917,835),21100=>array(71,-69,917,833),21101=>array(55,-70,921,821),21102=>array(111,-64,896,829),21103=>array(74,-70,914,829),21104=>array(46,-65,918,828),21105=>array(37,-70,971,837),21106=>array(59,-58,914,833),21107=>array(36,-56,894,804),21108=>array(68,-64,914,835),21109=>array(46,-72,901,842),21110=>array(46,-64,911,838),21111=>array(43,-67,905,848),21112=>array(54,-55,903,845),21113=>array(42,-65,920,824),21114=>array(33,-76,968,833),21115=>array(42,-70,904,831),21116=>array(32,-71,905,852),21117=>array(53,-62,924,829),21118=>array(112,-59,890,829),21119=>array(50,-62,900,846),21120=>array(37,-67,904,819),21121=>array(37,-68,894,835),21122=>array(52,-70,923,829),21123=>array(50,-63,921,830),21124=>array(40,-54,911,835),21125=>array(57,-63,910,823),21126=>array(26,-63,912,844),21127=>array(40,-67,910,835),21128=>array(53,-63,947,840),21129=>array(44,-64,911,837),21130=>array(45,-71,917,854),21131=>array(38,-71,906,823),21132=>array(44,-65,928,836),21133=>array(47,-69,897,848),21134=>array(47,-68,886,848),21135=>array(91,-64,883,842),21136=>array(44,-66,903,825),21137=>array(53,-73,915,827),21138=>array(41,-71,919,843),21139=>array(61,-64,919,861),21140=>array(39,-75,973,840),21141=>array(36,-68,908,825),21142=>array(34,-61,905,852),21143=>array(58,-73,913,830),21144=>array(43,-62,899,860),21145=>array(67,-70,921,841),21146=>array(46,-50,909,848),21147=>array(70,-56,863,824),21148=>array(45,-65,958,825),21149=>array(35,-70,895,820),21150=>array(64,-59,931,838),21151=>array(73,-76,892,823),21152=>array(58,-76,913,831),21153=>array(35,-69,958,829),21154=>array(30,-63,900,824),21155=>array(67,-63,942,838),21156=>array(40,-63,946,839),21157=>array(46,-65,895,846),21158=>array(36,-69,946,844),21159=>array(73,-71,896,824),21160=>array(55,-60,887,832),21161=>array(53,-67,926,833),21162=>array(67,-70,939,822),21163=>array(63,-75,918,823),21164=>array(42,-68,904,844),21165=>array(64,-63,915,830),21166=>array(60,-64,927,836),21167=>array(47,-67,946,834),21168=>array(99,-59,888,833),21169=>array(30,-58,901,831),21170=>array(25,-59,888,833),21171=>array(59,-61,915,830),21172=>array(59,-61,896,841),21173=>array(35,-73,957,827),21174=>array(14,-57,904,822),21175=>array(80,-72,909,842),21176=>array(62,-49,922,831),21177=>array(68,-65,927,832),21178=>array(90,-77,924,824),21179=>array(96,-73,917,828),21180=>array(57,-62,915,839),21181=>array(89,-57,869,792),21182=>array(53,-63,926,830),21183=>array(58,-57,951,833),21184=>array(40,-69,951,846),21185=>array(55,-70,916,829),21186=>array(76,-55,928,839),21187=>array(103,-75,904,831),21188=>array(62,-77,904,839),21189=>array(32,-68,904,836),21190=>array(113,-75,915,843),21191=>array(45,-70,875,809),21192=>array(95,-68,890,830),21193=>array(38,-60,965,835),21194=>array(35,-63,965,836),21195=>array(30,-65,890,830),21196=>array(49,-62,914,850),21197=>array(43,-72,909,826),21198=>array(105,-59,939,832),21199=>array(103,-77,914,840),21200=>array(48,-77,914,822),21201=>array(54,-65,916,836),21202=>array(72,-65,917,829),21203=>array(88,-70,916,828),21204=>array(65,-77,905,832),21205=>array(58,-68,914,832),21206=>array(77,-76,953,839),21207=>array(48,-67,918,811),21208=>array(54,-71,914,827),21209=>array(37,-71,971,844),21210=>array(56,-76,922,827),21211=>array(51,-76,952,838),21212=>array(48,-75,926,832),21213=>array(41,-76,957,839),21214=>array(52,-73,919,832),21215=>array(58,-61,967,837),21216=>array(43,-72,926,827),21217=>array(67,-68,921,832),21218=>array(49,-68,957,829),21219=>array(58,-66,916,837),21220=>array(44,-68,929,827),21221=>array(49,-55,949,819),21222=>array(37,-76,918,842),21223=>array(37,-61,920,841),21224=>array(53,-69,912,842),21225=>array(53,-58,899,850),21226=>array(31,-68,940,842),21227=>array(28,-69,910,822),21228=>array(27,-69,934,840),21229=>array(52,-73,918,849),21230=>array(26,-73,931,835),21231=>array(54,-78,921,844),21232=>array(35,-66,966,834),21233=>array(54,-67,924,830),21234=>array(54,-72,928,833),21235=>array(45,-76,918,839),21236=>array(46,-73,928,825),21237=>array(27,-76,929,825),21238=>array(44,-45,949,840),21239=>array(54,-61,919,844),21240=>array(38,-76,920,838),21241=>array(30,-69,875,826),21242=>array(82,-62,896,850),21243=>array(93,-59,894,838),21244=>array(61,-63,903,826),21245=>array(82,-62,900,839),21246=>array(56,-55,898,829),21247=>array(71,-44,895,852),21248=>array(84,-59,930,838),21249=>array(38,-59,928,838),21250=>array(55,-59,912,844),21251=>array(55,-59,912,844),21252=>array(55,-59,912,844),21253=>array(48,-33,955,838),21254=>array(64,-58,902,842),21255=>array(63,-59,912,839),21256=>array(55,-59,912,844),21257=>array(57,-66,886,837),21258=>array(57,-59,911,845),21259=>array(68,-60,938,841),21260=>array(68,-60,938,841),21261=>array(74,-63,922,843),21262=>array(58,-70,918,829),21263=>array(42,-65,964,834),21264=>array(59,-65,915,845),21265=>array(48,-63,914,840),21266=>array(48,-68,902,843),21267=>array(52,-68,909,843),21268=>array(48,-63,916,840),21269=>array(304,-45,928,803),21270=>array(48,-57,950,836),21271=>array(45,-50,948,792),21272=>array(99,-53,921,804),21273=>array(56,-78,970,811),21274=>array(133,-71,930,795),21275=>array(93,-26,894,768),21276=>array(99,-21,926,788),21277=>array(92,-70,923,831),21278=>array(93,-26,894,768),21279=>array(96,-23,920,794),21280=>array(128,-48,921,790),21281=>array(121,-70,921,791),21282=>array(115,-32,942,778),21283=>array(133,-71,930,795),21284=>array(113,-76,930,811),21285=>array(112,-32,912,791),21286=>array(112,-32,959,796),21287=>array(114,-32,916,796),21288=>array(112,-32,922,796),21289=>array(101,-28,918,785),21290=>array(114,-69,931,789),21291=>array(115,-32,942,778),21292=>array(87,-29,950,789),21293=>array(85,-26,941,792),21294=>array(112,-32,922,796),21295=>array(129,-71,930,795),21296=>array(136,-23,951,787),21297=>array(117,-72,953,814),21298=>array(117,-26,945,804),21299=>array(133,-71,946,795),21300=>array(118,-29,954,780),21301=>array(85,-26,932,804),21302=>array(136,-59,951,795),21303=>array(92,-31,938,784),21304=>array(76,-5,924,762),21305=>array(134,-71,933,742),21306=>array(133,-57,933,784),21307=>array(103,-56,927,791),21308=>array(77,-26,934,797),21309=>array(69,-30,942,787),21310=>array(71,-30,950,796),21311=>array(118,-68,939,800),21312=>array(133,-71,930,795),21313=>array(105,-70,902,838),21314=>array(64,-37,962,786),21315=>array(113,-68,906,830),21316=>array(67,-44,933,821),21317=>array(46,-68,948,819),21318=>array(55,-64,950,833),21319=>array(80,-71,930,827),21320=>array(90,-68,918,834),21321=>array(55,-69,941,829),21322=>array(76,-67,909,824),21323=>array(69,-63,931,827),21324=>array(63,-59,937,825),21325=>array(91,-26,909,787),21326=>array(28,-57,918,831),21327=>array(51,-62,948,834),21328=>array(94,-26,911,787),21329=>array(64,-67,936,846),21330=>array(82,-67,918,837),21331=>array(65,-68,935,826),21332=>array(63,-70,924,835),21333=>array(54,-58,926,841),21334=>array(49,-65,923,832),21335=>array(68,-72,942,830),21336=>array(64,-62,936,854),21337=>array(58,-49,939,830),21338=>array(53,-71,949,835),21339=>array(53,-46,942,813),21340=>array(403,-65,899,825),21341=>array(73,-26,924,790),21342=>array(74,-62,926,819),21343=>array(107,-63,947,828),21344=>array(184,-70,903,832),21345=>array(77,-68,927,828),21346=>array(39,-58,916,829),21347=>array(113,-65,903,833),21348=>array(136,-66,911,826),21349=>array(136,-66,911,826),21350=>array(37,-68,957,827),21351=>array(111,-62,954,818),21352=>array(96,-67,902,836),21353=>array(303,-69,717,781),21354=>array(291,-69,743,781),21355=>array(63,-5,913,747),21356=>array(104,-69,892,832),21357=>array(53,-69,890,746),21358=>array(59,-65,933,835),21359=>array(50,-62,903,839),21360=>array(148,-64,883,835),21361=>array(62,-67,928,836),21362=>array(52,-55,916,799),21363=>array(55,-67,896,786),21364=>array(49,-60,888,826),21365=>array(59,-71,883,815),21366=>array(29,-70,893,836),21367=>array(31,-45,959,834),21368=>array(73,-63,898,846),21369=>array(39,-54,907,861),21370=>array(26,-27,947,783),21371=>array(47,-68,910,837),21372=>array(51,-71,962,832),21373=>array(140,-73,894,827),21374=>array(88,-63,894,788),21375=>array(41,-70,920,834),21376=>array(54,-60,907,829),21377=>array(39,-63,951,835),21378=>array(38,-64,922,791),21379=>array(62,-67,900,836),21380=>array(50,-64,942,777),21381=>array(38,-67,904,774),21382=>array(39,-57,911,786),21383=>array(40,-57,941,789),21384=>array(38,-68,914,792),21385=>array(36,-56,911,781),21386=>array(51,-75,933,775),21387=>array(37,-63,913,771),21388=>array(37,-62,926,778),21389=>array(35,-72,922,775),21390=>array(44,-68,937,796),21391=>array(56,-68,936,777),21392=>array(34,-64,957,788),21393=>array(29,-64,942,788),21394=>array(52,-64,934,779),21395=>array(40,-57,926,798),21396=>array(35,-62,948,793),21397=>array(17,-73,896,786),21398=>array(27,-67,957,788),21399=>array(73,-65,957,780),21400=>array(45,-74,932,779),21401=>array(49,-70,956,795),21402=>array(50,-65,940,809),21403=>array(34,-64,950,788),21404=>array(46,-72,959,782),21405=>array(50,-68,943,780),21406=>array(57,-73,932,764),21407=>array(59,-65,932,787),21408=>array(39,-63,942,788),21409=>array(50,-101,916,782),21410=>array(18,-69,925,785),21411=>array(35,-73,938,765),21412=>array(39,-64,974,792),21413=>array(39,-67,962,793),21414=>array(42,-75,938,816),21415=>array(43,-81,951,786),21416=>array(20,-62,909,785),21417=>array(37,-63,961,802),21418=>array(24,-47,929,811),21419=>array(46,-60,948,795),21420=>array(48,-69,966,784),21421=>array(39,-71,963,785),21422=>array(23,-71,930,791),21423=>array(39,-65,958,791),21424=>array(46,-71,951,783),21425=>array(46,-71,948,783),21426=>array(51,-71,939,784),21427=>array(34,-79,894,835),21428=>array(47,-71,947,798),21429=>array(27,-45,882,821),21430=>array(117,11,903,746),21431=>array(56,-20,928,843),21432=>array(61,-25,941,767),21433=>array(57,-65,949,829),21434=>array(56,-59,933,843),21435=>array(79,-56,931,832),21436=>array(61,-64,932,816),21437=>array(67,-44,905,806),21438=>array(97,-60,971,791),21439=>array(61,-72,913,786),21440=>array(133,-48,955,823),21441=>array(38,-32,962,838),21442=>array(18,-74,970,848),21443=>array(30,-88,968,844),21444=>array(30,-15,968,852),21445=>array(30,-61,968,852),21446=>array(68,-66,977,836),21447=>array(38,-68,961,829),21448=>array(94,-34,920,754),21449=>array(63,-50,948,773),21450=>array(36,-64,945,767),21451=>array(63,-61,939,843),21452=>array(37,-67,955,770),21453=>array(51,-71,942,790),21454=>array(53,-50,962,816),21455=>array(58,-38,930,828),21456=>array(38,-62,940,827),21457=>array(38,-60,940,828),21458=>array(52,-57,944,801),21459=>array(58,-68,930,812),21460=>array(50,-64,963,833),21461=>array(48,-50,944,815),21462=>array(43,-70,960,780),21463=>array(64,-68,936,829),21464=>array(38,-59,934,833),21465=>array(16,-63,942,836),21466=>array(141,-75,963,781),21467=>array(52,-75,966,834),21468=>array(48,-57,961,839),21469=>array(54,-51,962,811),21470=>array(19,-61,953,785),21471=>array(31,-67,969,829),21472=>array(55,-29,954,806),21473=>array(34,-70,971,833),21474=>array(52,-71,945,829),21475=>array(184,5,818,695),21476=>array(83,-71,911,823),21477=>array(65,-51,902,840),21478=>array(78,-70,859,780),21479=>array(78,-70,859,780),21480=>array(124,-76,895,755),21481=>array(120,-65,894,766),21482=>array(58,-40,928,772),21483=>array(113,-64,929,831),21484=>array(76,-70,861,789),21485=>array(95,-65,952,781),21486=>array(98,-66,929,766),21487=>array(98,-64,926,769),21488=>array(124,-51,904,840),21489=>array(116,-25,946,810),21490=>array(63,-65,953,835),21491=>array(69,-62,917,837),21492=>array(43,-47,949,829),21493=>array(121,-13,896,782),21494=>array(90,-53,934,843),21495=>array(65,-59,935,804),21496=>array(111,-63,886,790),21497=>array(98,-70,937,763),21498=>array(107,-42,973,770),21499=>array(132,-65,899,831),21500=>array(116,-54,896,762),21501=>array(99,-66,930,768),21502=>array(135,-57,851,798),21503=>array(93,-37,950,788),21504=>array(98,-40,930,817),21505=>array(98,-67,930,776),21506=>array(102,-65,914,847),21507=>array(98,-26,932,835),21508=>array(57,-65,951,836),21509=>array(106,-56,894,783),21510=>array(96,-63,933,830),21511=>array(98,-67,945,780),21512=>array(40,-73,956,859),21513=>array(64,-72,900,823),21514=>array(157,-70,867,775),21515=>array(104,-61,933,832),21516=>array(118,-75,882,787),21517=>array(56,-67,829,836),21518=>array(44,-64,926,844),21519=>array(71,-76,947,824),21520=>array(99,-19,939,825),21521=>array(133,-75,867,831),21522=>array(72,-32,957,837),21523=>array(104,-65,932,775),21524=>array(104,-23,948,836),21525=>array(162,-70,821,770),21526=>array(104,-64,939,835),21527=>array(99,-58,900,789),21528=>array(97,-68,941,840),21529=>array(103,-72,946,833),21530=>array(103,-75,925,774),21531=>array(46,-70,947,783),21532=>array(95,-39,941,769),21533=>array(52,-66,958,822),21534=>array(53,-72,959,773),21535=>array(90,-71,945,854),21536=>array(92,-69,942,827),21537=>array(83,-49,946,816),21538=>array(58,-50,927,799),21539=>array(102,-6,928,805),21540=>array(108,-69,951,836),21541=>array(112,-71,934,780),21542=>array(48,-70,947,775),21543=>array(95,-29,935,779),21544=>array(86,-41,933,824),21545=>array(95,-62,955,806),21546=>array(91,-50,945,851),21547=>array(37,-65,966,858),21548=>array(104,-58,936,863),21549=>array(100,-68,970,824),21550=>array(99,-73,955,838),21551=>array(47,-58,848,857),21552=>array(97,-67,947,838),21553=>array(95,-70,944,835),21554=>array(96,-76,866,819),21555=>array(72,-67,940,787),21556=>array(43,-72,937,783),21557=>array(99,-74,958,827),21558=>array(106,-68,897,793),21559=>array(94,-74,952,831),21560=>array(98,-68,955,788),21561=>array(109,-70,949,836),21562=>array(116,-71,967,782),21563=>array(102,-72,903,834),21564=>array(89,-68,937,825),21565=>array(99,-51,945,844),21566=>array(70,-72,942,782),21567=>array(67,-67,917,832),21568=>array(98,-65,940,787),21569=>array(106,-62,903,827),21570=>array(180,-77,840,772),21571=>array(87,-69,942,789),21572=>array(74,-61,942,783),21573=>array(96,-74,966,833),21574=>array(51,-68,964,774),21575=>array(69,-66,934,819),21576=>array(77,-17,910,773),21577=>array(53,-71,944,787),21578=>array(67,-67,917,832),21579=>array(96,-69,943,829),21580=>array(116,-55,943,842),21581=>array(111,-51,956,743),21582=>array(116,-66,978,790),21583=>array(97,-66,939,835),21584=>array(101,-60,880,825),21585=>array(53,-72,959,830),21586=>array(100,-68,925,765),21587=>array(100,-26,932,824),21588=>array(79,-68,934,832),21589=>array(94,-7,928,767),21590=>array(91,-70,910,765),21591=>array(99,-74,926,764),21592=>array(84,-81,880,780),21593=>array(157,-68,837,760),21594=>array(111,-68,957,838),21595=>array(111,-31,968,831),21596=>array(101,-62,905,831),21597=>array(93,-64,951,841),21598=>array(97,-63,871,790),21599=>array(110,-65,961,819),21600=>array(97,-70,955,826),21601=>array(95,-70,949,786),21602=>array(100,-71,929,784),21603=>array(93,-63,942,777),21604=>array(89,-83,949,856),21605=>array(98,-60,943,841),21606=>array(98,-74,911,828),21607=>array(94,-63,945,831),21608=>array(39,-67,882,780),21609=>array(109,-54,953,751),21610=>array(109,-60,950,760),21611=>array(109,-60,942,845),21612=>array(108,-65,905,767),21613=>array(98,-14,928,831),21614=>array(108,-66,960,771),21615=>array(99,-67,942,787),21616=>array(84,-68,937,836),21617=>array(90,-68,970,830),21618=>array(102,-60,957,820),21619=>array(90,-65,942,830),21620=>array(108,-68,909,833),21621=>array(98,-65,930,785),21622=>array(79,-71,949,828),21623=>array(115,-62,893,786),21624=>array(94,-20,932,769),21625=>array(95,-49,969,830),21626=>array(106,-60,952,794),21627=>array(105,-67,900,835),21628=>array(98,-67,931,825),21629=>array(33,-73,971,862),21630=>array(104,-28,950,783),21631=>array(95,-61,953,841),21632=>array(94,-31,933,787),21633=>array(122,-66,951,828),21634=>array(89,-21,940,783),21635=>array(83,-34,962,834),21636=>array(115,-70,900,826),21637=>array(81,-68,898,833),21638=>array(107,-36,960,833),21639=>array(104,-28,950,802),21640=>array(89,-59,914,836),21641=>array(89,-74,968,824),21642=>array(89,-34,964,818),21643=>array(108,-70,943,840),21644=>array(53,-70,894,821),21645=>array(111,-65,954,840),21646=>array(39,-68,961,833),21647=>array(79,-63,943,848),21648=>array(90,-70,941,833),21649=>array(89,-51,935,842),21650=>array(54,-75,937,777),21651=>array(97,-34,941,773),21652=>array(97,-70,936,829),21653=>array(91,-67,923,828),21654=>array(104,-64,898,832),21655=>array(94,-3,951,830),21656=>array(97,-67,941,832),21657=>array(100,-59,932,830),21658=>array(86,-80,951,847),21659=>array(102,-68,893,836),21660=>array(102,-42,928,817),21661=>array(90,-7,914,809),21662=>array(98,-67,937,775),21663=>array(102,-64,891,730),21664=>array(51,-65,947,784),21665=>array(103,-50,956,800),21666=>array(61,-53,939,806),21667=>array(99,-68,933,811),21668=>array(80,-42,921,819),21669=>array(106,-30,956,782),21670=>array(90,-71,954,835),21671=>array(106,-67,892,829),21672=>array(64,-74,954,840),21673=>array(96,-64,931,840),21674=>array(82,-65,967,824),21675=>array(35,-71,974,779),21676=>array(98,-72,961,830),21677=>array(91,-65,926,828),21678=>array(107,-70,963,824),21679=>array(90,-65,948,848),21680=>array(117,-71,901,818),21681=>array(119,-70,883,841),21682=>array(119,-73,970,836),21683=>array(88,-60,949,824),21684=>array(100,-67,943,824),21685=>array(84,-63,963,854),21686=>array(110,-68,947,827),21687=>array(88,-62,944,842),21688=>array(58,-66,959,838),21689=>array(91,-51,908,828),21690=>array(91,-23,936,778),21691=>array(88,-63,943,835),21692=>array(119,-55,881,799),21693=>array(103,-64,898,785),21694=>array(105,-30,957,830),21695=>array(99,-69,949,835),21696=>array(47,-68,951,832),21697=>array(116,-66,884,792),21698=>array(91,-64,936,779),21699=>array(108,-69,904,783),21700=>array(90,-72,935,831),21701=>array(102,-61,908,831),21702=>array(106,-80,919,845),21703=>array(108,-25,949,831),21704=>array(84,-66,945,851),21705=>array(74,-60,944,828),21706=>array(104,-75,942,831),21707=>array(95,-27,935,846),21708=>array(85,-71,971,832),21709=>array(97,-55,900,875),21710=>array(103,-66,949,835),21711=>array(108,-73,973,781),21712=>array(99,-26,925,764),21713=>array(102,-18,924,766),21714=>array(87,-46,945,803),21715=>array(103,-63,936,821),21716=>array(98,-64,931,814),21717=>array(99,-61,872,821),21718=>array(93,-52,940,855),21719=>array(86,-60,922,833),21720=>array(103,-71,958,830),21721=>array(100,-47,949,829),21722=>array(81,-77,943,778),21723=>array(51,-69,962,803),21724=>array(101,-70,945,842),21725=>array(88,-62,950,828),21726=>array(108,-70,945,838),21727=>array(75,-59,886,837),21728=>array(110,-65,926,831),21729=>array(62,-62,943,785),21730=>array(89,-52,935,801),21731=>array(120,-14,943,779),21732=>array(87,-55,956,825),21733=>array(70,-60,931,784),21734=>array(84,-67,942,824),21735=>array(81,-66,946,827),21736=>array(109,-69,912,832),21737=>array(100,-15,933,779),21738=>array(107,-74,942,785),21739=>array(113,-73,962,762),21740=>array(78,-55,930,833),21741=>array(64,-71,949,773),21742=>array(92,-68,927,833),21743=>array(118,-65,951,783),21744=>array(80,-44,885,840),21745=>array(98,-65,923,829),21746=>array(63,-62,926,825),21747=>array(99,-81,947,824),21748=>array(108,-73,973,856),21749=>array(82,-69,913,829),21750=>array(88,-64,951,825),21751=>array(103,-70,938,814),21752=>array(94,-74,917,818),21753=>array(92,-68,936,834),21754=>array(87,-70,931,832),21755=>array(102,-66,937,778),21756=>array(95,-68,932,846),21757=>array(91,-74,952,786),21758=>array(95,-64,968,844),21759=>array(65,-62,959,839),21760=>array(110,-62,954,830),21761=>array(97,-62,931,845),21762=>array(116,-52,960,835),21763=>array(116,-66,900,828),21764=>array(101,-66,947,782),21765=>array(87,-45,951,867),21766=>array(101,-69,961,849),21767=>array(53,-76,939,786),21768=>array(88,-30,943,788),21769=>array(94,-68,945,848),21770=>array(106,-66,954,835),21771=>array(112,-62,950,830),21772=>array(98,-74,964,813),21773=>array(113,-74,946,841),21774=>array(98,-52,904,844),21775=>array(84,-62,938,843),21776=>array(44,-71,938,835),21777=>array(92,-36,934,820),21778=>array(88,-65,940,781),21779=>array(116,-71,924,829),21780=>array(99,-70,934,785),21781=>array(100,-48,923,863),21782=>array(82,-23,951,793),21783=>array(103,-65,957,827),21784=>array(34,-60,979,822),21785=>array(112,-57,987,812),21786=>array(97,-62,957,777),21787=>array(101,-66,948,830),21788=>array(59,-37,952,802),21789=>array(104,-62,938,804),21790=>array(92,-65,936,832),21791=>array(95,-37,929,851),21792=>array(91,-72,914,824),21793=>array(109,-61,963,792),21794=>array(104,-62,938,834),21795=>array(86,-29,935,842),21796=>array(74,-73,948,832),21797=>array(97,-46,940,821),21798=>array(97,-67,951,825),21799=>array(110,-70,900,780),21800=>array(80,-44,959,779),21801=>array(99,-73,946,833),21802=>array(74,-65,957,843),21803=>array(74,-27,959,804),21804=>array(87,-70,957,829),21805=>array(104,-71,941,837),21806=>array(42,-67,944,843),21807=>array(97,-65,945,836),21808=>array(100,-64,909,830),21809=>array(115,-68,900,787),21810=>array(107,-79,948,827),21811=>array(82,-69,962,802),21812=>array(106,-71,942,830),21813=>array(112,-44,995,856),21814=>array(113,-66,964,837),21815=>array(94,-75,933,845),21816=>array(78,-35,950,847),21817=>array(81,-56,972,832),21818=>array(110,-74,961,833),21819=>array(104,-65,951,841),21820=>array(113,-68,947,843),21821=>array(92,-67,953,832),21822=>array(84,-30,940,831),21823=>array(92,-28,953,842),21824=>array(105,-73,941,785),21825=>array(103,-66,902,791),21826=>array(93,-76,971,827),21827=>array(97,-70,930,833),21828=>array(84,-63,971,774),21829=>array(95,-67,933,833),21830=>array(55,-56,945,825),21831=>array(39,-73,928,844),21832=>array(111,-65,947,837),21833=>array(76,-76,945,819),21834=>array(93,-66,932,782),21835=>array(109,-66,987,837),21836=>array(86,-31,955,819),21837=>array(84,-57,942,864),21838=>array(46,-67,962,835),21839=>array(119,-71,889,784),21840=>array(89,-62,931,843),21841=>array(84,-77,962,829),21842=>array(113,-68,903,788),21843=>array(54,-60,964,838),21844=>array(91,-60,945,844),21845=>array(111,-62,908,842),21846=>array(83,-62,952,836),21847=>array(123,-65,900,846),21848=>array(104,-72,965,846),21849=>array(85,-55,952,824),21850=>array(77,-66,927,795),21851=>array(83,-73,933,822),21852=>array(83,-68,955,786),21853=>array(76,-67,955,821),21854=>array(91,-25,940,785),21855=>array(35,-68,969,836),21856=>array(88,-60,913,812),21857=>array(95,-66,932,826),21858=>array(109,-61,963,792),21859=>array(83,-68,926,832),21860=>array(91,-69,935,846),21861=>array(97,-70,950,850),21862=>array(91,-64,930,836),21863=>array(90,-72,914,828),21864=>array(90,-66,927,828),21865=>array(121,-63,959,831),21866=>array(110,-64,909,838),21867=>array(115,-65,960,835),21868=>array(63,-66,913,825),21869=>array(94,-66,914,833),21870=>array(79,-63,912,829),21871=>array(82,-68,906,794),21872=>array(86,-71,948,814),21873=>array(86,-48,935,822),21874=>array(104,-50,908,842),21875=>array(86,-30,973,843),21876=>array(115,-58,945,833),21877=>array(105,-64,983,833),21878=>array(86,-72,942,844),21879=>array(94,-64,942,840),21880=>array(91,-65,923,826),21881=>array(91,-80,933,781),21882=>array(91,-72,944,785),21883=>array(92,-67,908,833),21884=>array(90,-67,930,823),21885=>array(114,-59,989,859),21886=>array(76,-66,957,832),21887=>array(110,-30,955,827),21888=>array(95,-69,965,819),21889=>array(93,-58,910,793),21890=>array(108,-69,960,785),21891=>array(92,-67,939,835),21892=>array(56,-70,907,835),21893=>array(92,-18,924,788),21894=>array(82,-50,918,825),21895=>array(112,-67,904,831),21896=>array(86,-65,942,827),21897=>array(88,-74,950,840),21898=>array(92,-72,930,837),21899=>array(83,-65,952,832),21900=>array(52,-71,909,787),21901=>array(104,-69,967,824),21902=>array(112,-67,906,788),21903=>array(84,-59,931,833),21904=>array(79,-81,936,830),21905=>array(97,-65,933,841),21906=>array(92,-48,956,849),21907=>array(110,-72,957,777),21908=>array(91,-70,933,781),21909=>array(110,-66,953,783),21910=>array(97,-66,939,829),21911=>array(85,-68,951,801),21912=>array(81,-67,930,834),21913=>array(85,-60,968,833),21914=>array(79,-65,971,838),21915=>array(91,-67,979,836),21916=>array(86,-63,938,837),21917=>array(105,-55,913,801),21918=>array(77,-73,921,840),21919=>array(116,-61,901,787),21920=>array(97,-32,936,825),21921=>array(107,-71,949,828),21922=>array(107,-71,951,827),21923=>array(52,-74,965,824),21924=>array(90,-18,935,861),21925=>array(110,-71,968,837),21926=>array(132,-68,888,789),21927=>array(79,-26,945,829),21928=>array(86,-73,959,838),21929=>array(76,-71,966,812),21930=>array(75,-73,957,829),21931=>array(96,-55,961,835),21932=>array(50,-71,951,830),21933=>array(88,-53,939,860),21934=>array(53,-68,945,789),21935=>array(89,-59,953,851),21936=>array(90,-72,965,837),21937=>array(90,-70,941,788),21938=>array(107,-65,905,836),21939=>array(82,-28,916,834),21940=>array(72,-71,972,832),21941=>array(75,-62,924,832),21942=>array(94,-63,906,834),21943=>array(110,-67,925,831),21944=>array(65,-77,959,841),21945=>array(90,-26,953,851),21946=>array(112,-62,982,834),21947=>array(80,-70,948,858),21948=>array(110,-32,970,846),21949=>array(90,-66,936,807),21950=>array(82,-66,893,826),21951=>array(50,-69,961,780),21952=>array(49,-72,955,829),21953=>array(88,-64,946,839),21954=>array(108,-72,960,845),21955=>array(94,-68,938,838),21956=>array(82,-62,954,790),21957=>array(88,-73,945,845),21958=>array(84,-65,947,847),21959=>array(56,-75,946,832),21960=>array(107,-29,963,826),21961=>array(87,-64,944,831),21962=>array(110,-68,962,791),21963=>array(106,-70,933,838),21964=>array(98,-22,946,841),21965=>array(108,-70,907,835),21966=>array(104,-68,909,783),21967=>array(112,-68,977,827),21968=>array(118,-70,954,847),21969=>array(88,-21,941,830),21970=>array(76,-64,944,830),21971=>array(81,-73,961,793),21972=>array(90,-85,963,851),21973=>array(95,-68,963,784),21974=>array(92,-70,962,828),21975=>array(105,-70,937,783),21976=>array(84,-59,963,851),21977=>array(111,-64,956,841),21978=>array(118,-56,916,846),21979=>array(95,-56,970,863),21980=>array(95,-69,943,834),21981=>array(92,-64,930,788),21982=>array(119,-66,961,837),21983=>array(89,-27,938,840),21984=>array(48,-81,960,829),21985=>array(83,-71,955,791),21986=>array(100,-36,950,780),21987=>array(112,-68,910,786),21988=>array(92,-70,938,827),21989=>array(84,-68,957,844),21990=>array(80,-68,942,829),21991=>array(34,-75,973,842),21992=>array(83,-68,939,836),21993=>array(91,-67,946,836),21994=>array(90,-70,954,835),21995=>array(89,-66,943,776),21996=>array(93,-70,942,830),21997=>array(91,-37,929,849),21998=>array(63,-57,939,788),21999=>array(87,-39,950,782),22000=>array(68,-75,913,845),22001=>array(90,-68,974,862),22002=>array(71,-57,940,845),22003=>array(90,-67,949,822),22004=>array(72,-54,969,835),22005=>array(88,-54,942,772),22006=>array(83,-68,935,787),22007=>array(86,-64,964,832),22008=>array(58,-57,951,854),22009=>array(83,-56,963,827),22010=>array(117,-68,956,831),22011=>array(98,-69,961,841),22012=>array(118,-72,972,829),22013=>array(82,-76,950,834),22014=>array(79,-68,961,837),22015=>array(115,-78,962,841),22016=>array(87,-73,927,846),22017=>array(76,-68,943,835),22018=>array(121,-68,894,823),22019=>array(83,-70,949,841),22020=>array(83,-70,958,845),22021=>array(82,-64,964,788),22022=>array(83,-72,964,832),22023=>array(101,-80,965,846),22024=>array(91,-72,935,830),22025=>array(50,-65,957,833),22026=>array(85,-68,938,834),22027=>array(73,-78,972,839),22028=>array(91,-70,940,789),22029=>array(90,-74,933,832),22030=>array(86,-67,946,784),22031=>array(60,-66,960,812),22032=>array(91,-50,966,801),22033=>array(106,-70,913,836),22034=>array(99,-25,956,835),22035=>array(102,-63,906,799),22036=>array(90,-73,949,805),22037=>array(116,-64,951,785),22038=>array(84,-74,947,832),22039=>array(109,-67,905,836),22040=>array(91,-68,924,823),22041=>array(81,-73,926,836),22042=>array(101,-70,946,824),22043=>array(74,-75,975,833),22044=>array(106,-61,981,840),22045=>array(96,-70,941,832),22046=>array(103,-70,911,832),22047=>array(91,-68,933,822),22048=>array(81,-54,956,804),22049=>array(89,-23,939,836),22050=>array(106,-59,962,800),22051=>array(86,-65,883,814),22052=>array(91,-64,927,789),22053=>array(84,-65,973,831),22054=>array(27,-86,973,836),22055=>array(90,-64,945,848),22056=>array(91,-65,923,826),22057=>array(81,-68,945,831),22058=>array(106,-83,953,780),22059=>array(84,-71,949,831),22060=>array(77,-72,959,809),22061=>array(91,-59,924,827),22062=>array(95,-69,923,833),22063=>array(79,-77,949,843),22064=>array(86,-65,947,833),22065=>array(89,-72,891,780),22066=>array(79,-75,906,830),22067=>array(113,-80,964,832),22068=>array(91,-65,950,828),22069=>array(76,-67,944,835),22070=>array(93,-65,930,837),22071=>array(100,-48,948,863),22072=>array(80,-63,948,847),22073=>array(86,-67,952,845),22074=>array(115,-66,990,830),22075=>array(90,-69,933,833),22076=>array(77,-67,926,796),22077=>array(107,-68,956,785),22078=>array(111,-71,958,780),22079=>array(82,-68,937,783),22080=>array(113,-80,964,781),22081=>array(85,-48,959,768),22082=>array(92,-64,950,856),22083=>array(110,-63,971,841),22084=>array(77,-68,945,831),22085=>array(109,-70,922,834),22086=>array(113,-69,978,783),22087=>array(103,-36,934,841),22088=>array(98,-68,967,836),22089=>array(106,-68,983,837),22090=>array(108,-67,940,784),22091=>array(88,-73,973,837),22092=>array(92,-73,905,835),22093=>array(85,-71,944,843),22094=>array(87,-23,937,839),22095=>array(106,-63,991,858),22096=>array(64,-70,933,795),22097=>array(90,-62,948,840),22098=>array(86,-74,954,832),22099=>array(93,-76,936,832),22100=>array(79,-11,956,855),22101=>array(61,-77,904,856),22102=>array(82,-68,947,790),22103=>array(82,-61,951,830),22104=>array(80,-62,967,796),22105=>array(95,-70,966,851),22106=>array(109,-72,957,779),22107=>array(86,-68,940,829),22108=>array(80,-61,947,828),22109=>array(80,-64,945,834),22110=>array(79,-72,950,855),22111=>array(39,-72,934,844),22112=>array(78,-67,946,835),22113=>array(90,-59,956,849),22114=>array(80,-68,947,853),22115=>array(122,-75,936,779),22116=>array(81,-62,971,832),22117=>array(80,-72,955,835),22118=>array(104,-64,970,838),22119=>array(80,-68,932,830),22120=>array(49,-62,956,798),22121=>array(51,-23,944,789),22122=>array(80,-70,954,792),22123=>array(88,-32,949,825),22124=>array(92,-27,941,838),22125=>array(83,-57,964,864),22126=>array(104,-81,973,782),22127=>array(84,-75,954,830),22128=>array(99,-70,954,848),22129=>array(80,-68,954,833),22130=>array(74,-66,959,853),22131=>array(99,-73,975,833),22132=>array(85,-76,956,838),22133=>array(70,-72,942,847),22134=>array(84,-68,934,834),22135=>array(101,-76,980,838),22136=>array(76,-70,961,827),22137=>array(106,-53,918,841),22138=>array(83,-61,962,832),22139=>array(77,-38,964,839),22140=>array(95,-68,948,842),22141=>array(74,-63,953,835),22142=>array(106,-70,944,833),22143=>array(102,-71,941,780),22144=>array(89,-69,944,838),22145=>array(115,-68,951,785),22146=>array(92,-39,927,821),22147=>array(95,-76,957,828),22148=>array(79,-53,951,842),22149=>array(84,-65,936,789),22150=>array(83,-62,937,835),22151=>array(81,-68,956,834),22152=>array(65,-71,975,797),22153=>array(81,-61,952,835),22154=>array(91,-67,962,856),22155=>array(91,-65,968,833),22156=>array(100,-77,949,832),22157=>array(98,-33,938,821),22158=>array(91,-67,959,848),22159=>array(75,-64,947,837),22160=>array(92,-52,916,850),22161=>array(92,-62,966,828),22162=>array(81,-78,946,835),22163=>array(92,-70,962,839),22164=>array(75,-80,951,836),22165=>array(84,-69,943,846),22166=>array(82,-36,955,832),22167=>array(104,-66,984,787),22168=>array(91,-72,946,784),22169=>array(92,-70,934,830),22170=>array(111,-52,914,803),22171=>array(81,-69,972,847),22172=>array(84,-20,957,794),22173=>array(91,-80,925,841),22174=>array(41,-68,958,841),22175=>array(118,-48,989,844),22176=>array(72,-62,922,834),22177=>array(69,-67,954,833),22178=>array(57,-70,961,833),22179=>array(36,-64,942,786),22180=>array(75,-78,934,835),22181=>array(82,-60,949,830),22182=>array(78,-65,939,790),22183=>array(90,-71,947,828),22184=>array(79,-70,944,837),22185=>array(86,-68,933,835),22186=>array(98,-70,906,780),22187=>array(89,-69,966,842),22188=>array(92,-64,958,842),22189=>array(74,-63,967,835),22190=>array(43,-68,949,845),22191=>array(88,-66,914,784),22192=>array(103,-68,955,838),22193=>array(77,-68,963,835),22194=>array(55,-65,960,845),22195=>array(58,-64,955,841),22196=>array(46,-62,964,817),22197=>array(85,-59,948,846),22198=>array(82,-65,935,788),22199=>array(89,-69,968,842),22200=>array(74,-74,917,829),22201=>array(63,-72,959,834),22202=>array(67,-63,956,805),22203=>array(106,-60,919,794),22204=>array(76,-76,960,844),22205=>array(76,-75,948,833),22206=>array(92,-64,940,828),22207=>array(71,-67,939,834),22208=>array(84,-64,947,832),22209=>array(80,-66,950,807),22210=>array(55,-77,961,779),22211=>array(87,-65,954,831),22212=>array(83,-71,938,843),22213=>array(57,-66,969,792),22214=>array(87,-81,946,834),22215=>array(111,-68,957,790),22216=>array(82,-75,950,831),22217=>array(98,-65,962,796),22218=>array(72,-75,951,834),22219=>array(92,-74,947,824),22220=>array(88,-52,965,842),22221=>array(55,-51,949,839),22222=>array(64,-62,972,832),22223=>array(50,-68,944,839),22224=>array(75,-78,957,830),22225=>array(88,-74,929,817),22226=>array(74,-57,948,839),22227=>array(87,-52,945,845),22228=>array(78,-70,959,831),22229=>array(83,-77,953,832),22230=>array(74,-51,958,858),22231=>array(133,-54,879,781),22232=>array(129,-52,871,778),22233=>array(123,-30,865,754),22234=>array(132,-73,868,776),22235=>array(121,-35,879,744),22236=>array(123,-30,865,754),22237=>array(107,-65,886,789),22238=>array(129,-30,871,754),22239=>array(74,-68,863,839),22240=>array(130,-64,870,793),22241=>array(121,-64,895,788),22242=>array(109,-64,865,785),22243=>array(122,-64,878,785),22244=>array(110,-72,891,784),22245=>array(121,-67,894,784),22246=>array(113,-67,887,788),22247=>array(120,-67,892,785),22248=>array(121,-65,894,786),22249=>array(121,-67,894,784),22250=>array(138,-67,879,849),22251=>array(101,-68,901,788),22252=>array(111,-53,877,754),22253=>array(95,-63,900,791),22254=>array(99,-51,894,799),22255=>array(128,-59,884,789),22256=>array(114,-65,886,784),22257=>array(138,-67,879,849),22258=>array(122,-59,878,789),22259=>array(121,-70,879,781),22260=>array(109,-70,866,782),22261=>array(106,-63,863,776),22262=>array(122,-59,878,789),22263=>array(122,-68,905,791),22264=>array(115,-64,907,788),22265=>array(105,-64,897,788),22266=>array(115,-70,885,785),22267=>array(115,-70,885,785),22268=>array(115,-70,885,785),22269=>array(122,-59,878,789),22270=>array(110,-66,866,784),22271=>array(96,-68,892,789),22272=>array(106,-65,894,784),22273=>array(116,-69,903,774),22274=>array(112,-67,897,782),22275=>array(106,-70,905,789),22276=>array(101,-66,896,788),22277=>array(116,-69,873,794),22278=>array(112,-68,865,774),22279=>array(102,-67,896,788),22280=>array(105,-69,895,791),22281=>array(113,-65,900,790),22282=>array(107,-65,906,796),22283=>array(109,-67,890,780),22284=>array(96,-53,900,797),22285=>array(102,-61,905,784),22286=>array(116,-69,903,774),22287=>array(107,-69,896,785),22288=>array(111,-69,908,779),22289=>array(111,-69,898,774),22290=>array(102,-70,898,790),22291=>array(113,-71,899,787),22292=>array(103,-71,900,781),22293=>array(116,-69,903,774),22294=>array(119,-68,906,794),22295=>array(119,-68,906,794),22296=>array(112,-64,903,788),22297=>array(116,-69,903,774),22298=>array(93,-54,893,809),22299=>array(95,-53,893,806),22300=>array(98,-67,902,796),22301=>array(106,-69,894,774),22302=>array(99,-65,901,790),22303=>array(78,-13,922,810),22304=>array(59,-58,957,806),22305=>array(100,-15,895,796),22306=>array(54,-59,939,796),22307=>array(61,-29,960,776),22308=>array(53,-59,961,814),22309=>array(89,-67,934,778),22310=>array(68,-55,944,741),22311=>array(37,-63,913,770),22312=>array(49,-65,921,836),22313=>array(42,-64,949,793),22314=>array(55,-62,953,800),22315=>array(49,-55,930,790),22316=>array(49,-78,951,791),22317=>array(73,-39,927,809),22318=>array(43,-58,945,786),22319=>array(39,-53,954,776),22320=>array(56,-52,935,808),22321=>array(58,-58,952,817),22322=>array(50,-45,943,796),22323=>array(56,-71,907,785),22324=>array(68,-61,917,788),22325=>array(44,-59,948,781),22326=>array(60,-61,953,805),22327=>array(44,-65,932,788),22328=>array(59,-56,897,789),22329=>array(39,-63,912,832),22330=>array(29,-63,897,808),22331=>array(62,-64,948,810),22332=>array(84,-41,938,785),22333=>array(62,-72,903,794),22334=>array(40,-71,956,796),22335=>array(50,-63,967,802),22336=>array(44,-32,949,786),22337=>array(43,-69,952,800),22338=>array(43,-70,966,785),22339=>array(51,-68,958,774),22340=>array(44,-66,967,793),22341=>array(48,-60,972,811),22342=>array(38,-63,970,799),22343=>array(50,-63,906,831),22344=>array(44,-72,946,793),22345=>array(44,-59,944,806),22346=>array(41,-77,953,827),22347=>array(58,-78,967,798),22348=>array(53,-24,947,804),22349=>array(43,-71,948,799),22350=>array(48,-66,962,810),22351=>array(40,-55,968,790),22352=>array(73,-29,927,806),22353=>array(47,-67,951,813),22354=>array(57,-43,952,809),22355=>array(57,-29,952,813),22356=>array(57,-49,974,792),22357=>array(57,-59,952,805),22358=>array(28,-54,961,768),22359=>array(33,-70,947,834),22360=>array(43,-58,951,765),22361=>array(57,-54,952,758),22362=>array(52,-19,932,831),22363=>array(43,-38,939,816),22364=>array(41,-69,912,804),22365=>array(33,-58,943,798),22366=>array(35,-67,902,832),22367=>array(41,-60,955,852),22368=>array(62,-14,926,821),22369=>array(48,-71,963,812),22370=>array(46,-67,945,801),22371=>array(84,-14,933,777),22372=>array(65,-48,908,805),22373=>array(65,-32,933,771),22374=>array(48,-21,952,786),22375=>array(65,-49,936,791),22376=>array(60,-60,952,806),22377=>array(39,-68,945,796),22378=>array(50,-67,947,794),22379=>array(38,-52,904,794),22380=>array(56,-67,980,834),22381=>array(46,-83,953,777),22382=>array(53,-58,964,823),22383=>array(42,-14,948,785),22384=>array(59,-67,914,782),22385=>array(43,-70,957,797),22386=>array(60,-71,925,810),22387=>array(61,-71,920,835),22388=>array(60,-56,944,800),22389=>array(45,-18,953,824),22390=>array(40,-65,943,817),22391=>array(48,-61,947,807),22392=>array(56,-54,909,849),22393=>array(45,-60,958,843),22394=>array(45,-69,955,836),22395=>array(56,-63,954,828),22396=>array(51,-67,941,832),22397=>array(67,-66,968,847),22398=>array(75,-61,918,836),22399=>array(71,-79,945,842),22400=>array(56,-63,940,828),22401=>array(56,-60,967,828),22402=>array(73,-32,927,826),22403=>array(49,-11,952,838),22404=>array(47,-31,941,829),22405=>array(37,-67,929,824),22406=>array(35,-66,911,826),22407=>array(30,-65,903,755),22408=>array(34,-32,946,833),22409=>array(46,-28,955,840),22410=>array(70,-61,939,786),22411=>array(59,-25,953,827),22412=>array(30,-70,898,781),22413=>array(55,-70,883,841),22414=>array(30,-65,948,848),22415=>array(55,-71,954,823),22416=>array(56,-36,926,853),22417=>array(50,-58,920,844),22418=>array(52,-36,926,814),22419=>array(37,-63,949,834),22420=>array(59,-20,954,790),22421=>array(59,-11,954,831),22422=>array(67,-43,904,842),22423=>array(37,-54,956,840),22424=>array(50,-73,963,822),22425=>array(43,-52,962,842),22426=>array(49,-11,953,842),22427=>array(43,-65,965,809),22428=>array(58,-62,949,809),22429=>array(46,-57,963,850),22430=>array(42,-43,953,839),22431=>array(51,-73,955,821),22432=>array(37,-68,952,809),22433=>array(34,-32,946,833),22434=>array(50,-69,932,833),22435=>array(47,-14,947,808),22436=>array(31,-22,931,811),22437=>array(49,-70,960,827),22438=>array(75,-27,949,790),22439=>array(38,-77,891,842),22440=>array(48,-59,954,843),22441=>array(50,-8,922,764),22442=>array(41,-70,949,839),22443=>array(32,-11,932,830),22444=>array(41,-72,946,831),22445=>array(43,-6,923,808),22446=>array(41,-66,965,842),22447=>array(40,-49,942,793),22448=>array(51,-64,940,835),22449=>array(41,-60,883,826),22450=>array(41,-27,941,813),22451=>array(45,-67,956,833),22452=>array(40,-66,923,832),22453=>array(50,-72,951,832),22454=>array(59,-65,948,833),22455=>array(56,-65,944,783),22456=>array(51,-67,959,857),22457=>array(43,-68,943,827),22458=>array(49,-68,954,817),22459=>array(49,-72,960,804),22460=>array(63,-24,969,822),22461=>array(55,-15,951,846),22462=>array(54,-64,955,800),22463=>array(53,-66,941,833),22464=>array(97,-32,916,829),22465=>array(57,-70,958,821),22466=>array(46,-70,959,791),22467=>array(50,-71,956,845),22468=>array(46,-65,949,846),22469=>array(65,-24,959,842),22470=>array(63,-71,906,824),22471=>array(51,-61,893,811),22472=>array(46,-68,953,836),22473=>array(46,-73,945,836),22474=>array(55,-15,951,842),22475=>array(39,-25,943,793),22476=>array(54,-74,955,827),22477=>array(61,-67,903,791),22478=>array(41,-68,951,834),22479=>array(36,-64,964,829),22480=>array(50,-62,970,814),22481=>array(55,-30,951,831),22482=>array(47,-62,945,827),22483=>array(61,-65,956,806),22484=>array(40,-68,948,833),22485=>array(55,-20,959,814),22486=>array(59,-48,962,832),22487=>array(43,-56,945,835),22488=>array(39,-64,923,826),22489=>array(43,-70,938,806),22490=>array(31,-67,892,802),22491=>array(31,-51,915,802),22492=>array(48,-27,967,817),22493=>array(17,-43,964,849),22494=>array(26,-58,966,848),22495=>array(36,-69,965,835),22496=>array(39,-68,959,854),22497=>array(53,-20,959,821),22498=>array(47,-48,959,823),22499=>array(48,-65,951,822),22500=>array(39,-56,961,860),22501=>array(53,-67,959,835),22502=>array(32,-61,959,855),22503=>array(32,-52,952,820),22504=>array(26,-65,974,853),22505=>array(46,-60,954,836),22506=>array(42,-12,944,831),22507=>array(56,-62,907,839),22508=>array(51,-73,965,824),22509=>array(35,-64,949,835),22510=>array(48,-72,971,829),22511=>array(45,-30,945,829),22512=>array(46,-62,959,833),22513=>array(45,-74,963,830),22514=>array(50,-68,976,841),22515=>array(62,-68,899,831),22516=>array(35,-67,953,835),22517=>array(47,-50,959,812),22518=>array(32,-67,973,831),22519=>array(57,-69,960,833),22520=>array(55,-67,911,818),22521=>array(36,-65,938,835),22522=>array(36,-28,980,832),22523=>array(46,-67,951,835),22524=>array(52,-64,958,836),22525=>array(42,-69,948,801),22526=>array(52,-27,945,792),22527=>array(67,-27,945,850),22528=>array(48,-65,906,818),22529=>array(47,-67,966,808),22530=>array(84,-14,933,832),22531=>array(52,-23,958,855),22532=>array(53,-67,956,838),22533=>array(56,-22,944,784),22534=>array(45,-73,950,834),22535=>array(60,-22,954,833),22536=>array(56,-48,911,828),22537=>array(45,-58,947,835),22538=>array(68,-12,951,794),22539=>array(41,-55,907,820),22540=>array(57,-69,901,803),22541=>array(42,-69,962,837),22542=>array(44,-70,963,833),22543=>array(63,-23,958,855),22544=>array(50,-71,956,804),22545=>array(45,-29,924,826),22546=>array(53,-49,970,789),22547=>array(57,-67,927,829),22548=>array(52,-67,966,811),22549=>array(58,-19,912,828),22550=>array(55,-65,920,841),22551=>array(26,-65,944,844),22552=>array(76,-28,972,835),22553=>array(32,-25,953,810),22554=>array(51,-65,936,787),22555=>array(54,-67,953,806),22556=>array(53,-67,966,832),22557=>array(64,-67,915,799),22558=>array(37,-65,970,833),22559=>array(59,-63,945,840),22560=>array(35,-72,966,840),22561=>array(38,-19,933,830),22562=>array(50,-70,944,836),22563=>array(66,-68,922,803),22564=>array(48,-70,966,793),22565=>array(54,-12,965,828),22566=>array(40,-50,956,844),22567=>array(35,-51,968,821),22568=>array(60,-69,924,807),22569=>array(38,-71,951,823),22570=>array(32,-68,946,829),22571=>array(38,-68,969,829),22572=>array(56,-70,976,836),22573=>array(66,-32,967,824),22574=>array(60,-69,952,800),22575=>array(43,-65,962,837),22576=>array(44,-62,956,807),22577=>array(65,-67,966,832),22578=>array(67,-16,963,770),22579=>array(43,-52,907,820),22580=>array(42,-63,948,788),22581=>array(39,-68,940,833),22582=>array(58,-67,952,835),22583=>array(52,-70,951,843),22584=>array(56,-71,973,803),22585=>array(50,-25,949,839),22586=>array(60,-66,971,829),22587=>array(49,-29,951,827),22588=>array(47,-16,954,826),22589=>array(54,-64,954,804),22590=>array(52,-64,978,842),22591=>array(58,-71,956,821),22592=>array(40,-69,955,804),22593=>array(55,-27,945,815),22594=>array(40,-26,961,826),22595=>array(40,-68,950,835),22596=>array(35,-66,911,804),22597=>array(45,-72,971,829),22598=>array(54,-60,944,846),22599=>array(50,-27,927,842),22600=>array(59,-16,958,794),22601=>array(50,-73,973,829),22602=>array(47,-68,965,841),22603=>array(64,-17,940,831),22604=>array(46,-68,915,796),22605=>array(28,-55,972,835),22606=>array(52,-71,960,831),22607=>array(39,-41,952,816),22608=>array(36,-64,980,833),22609=>array(53,-11,948,833),22610=>array(36,-65,956,829),22611=>array(56,-71,964,806),22612=>array(42,-69,963,829),22613=>array(54,-68,976,827),22614=>array(49,-65,964,842),22615=>array(46,-17,970,856),22616=>array(44,-69,948,819),22617=>array(42,-63,944,841),22618=>array(37,-60,973,807),22619=>array(53,-70,965,805),22620=>array(41,-60,965,807),22621=>array(55,-66,951,834),22622=>array(48,-30,949,830),22623=>array(55,-40,963,811),22624=>array(50,-60,961,834),22625=>array(52,-61,927,834),22626=>array(62,-60,928,839),22627=>array(58,-31,953,817),22628=>array(54,-70,967,818),22629=>array(59,-69,954,803),22630=>array(64,-46,953,815),22631=>array(54,-8,954,859),22632=>array(37,-67,966,826),22633=>array(49,-34,950,831),22634=>array(49,-65,934,836),22635=>array(47,-69,946,836),22636=>array(35,-68,948,785),22637=>array(47,-30,959,809),22638=>array(47,-64,965,849),22639=>array(63,-67,921,835),22640=>array(52,-46,951,840),22641=>array(57,-26,951,847),22642=>array(33,-56,941,850),22643=>array(53,-66,961,844),22644=>array(56,-71,906,831),22645=>array(44,-49,943,834),22646=>array(54,-69,959,838),22647=>array(56,-64,958,839),22648=>array(53,-26,940,803),22649=>array(53,-24,959,833),22650=>array(48,-69,954,835),22651=>array(46,-73,969,820),22652=>array(42,-66,961,830),22653=>array(34,-58,967,839),22654=>array(49,-34,952,831),22655=>array(33,-62,951,846),22656=>array(43,-71,957,810),22657=>array(52,-64,983,817),22658=>array(47,-70,957,804),22659=>array(39,-65,960,828),22660=>array(51,-65,961,838),22661=>array(52,-25,945,789),22662=>array(56,-69,942,823),22663=>array(53,-71,953,838),22664=>array(52,-64,920,831),22665=>array(28,-64,962,821),22666=>array(63,-26,958,838),22667=>array(60,-68,953,841),22668=>array(46,-67,962,851),22669=>array(58,-38,964,846),22670=>array(46,-69,950,836),22671=>array(45,-43,943,847),22672=>array(56,-32,956,823),22673=>array(48,-65,954,842),22674=>array(19,-80,923,826),22675=>array(45,-40,954,834),22676=>array(45,-58,945,839),22677=>array(40,-60,962,801),22678=>array(40,-69,949,837),22679=>array(38,-73,905,835),22680=>array(39,-67,969,833),22681=>array(38,-71,927,821),22682=>array(29,-68,947,821),22683=>array(34,-72,968,812),22684=>array(60,-35,968,847),22685=>array(39,-57,963,847),22686=>array(52,-62,961,830),22687=>array(31,-64,911,827),22688=>array(48,-70,960,804),22689=>array(40,-69,953,836),22690=>array(49,-64,959,843),22691=>array(36,-76,965,827),22692=>array(29,-69,953,836),22693=>array(49,-32,962,843),22694=>array(52,-63,932,827),22695=>array(55,-61,976,836),22696=>array(56,-43,949,816),22697=>array(38,-68,964,826),22698=>array(43,-52,969,831),22699=>array(41,-72,950,834),22700=>array(67,-27,967,844),22701=>array(32,-24,947,826),22702=>array(67,-15,956,857),22703=>array(34,-33,954,847),22704=>array(49,-67,954,806),22705=>array(39,-32,981,828),22706=>array(30,-62,954,845),22707=>array(43,-76,962,838),22708=>array(47,-57,950,831),22709=>array(60,-69,933,779),22710=>array(47,-68,963,833),22711=>array(35,-68,945,831),22712=>array(52,-62,938,842),22713=>array(52,-67,924,787),22714=>array(32,-64,972,851),22715=>array(52,-68,950,833),22716=>array(56,-33,977,831),22717=>array(46,-75,977,846),22718=>array(64,-25,960,828),22719=>array(56,-70,962,806),22720=>array(26,-69,962,845),22721=>array(62,-26,957,831),22722=>array(36,-38,964,780),22723=>array(43,-26,944,788),22724=>array(44,-32,959,832),22725=>array(62,-32,953,851),22726=>array(79,-34,951,826),22727=>array(43,-34,947,835),22728=>array(50,-68,987,830),22729=>array(47,-72,969,833),22730=>array(48,-71,965,839),22731=>array(61,-65,918,832),22732=>array(35,-79,966,837),22733=>array(41,-32,953,791),22734=>array(38,-54,969,857),22735=>array(49,-34,951,823),22736=>array(53,-35,962,794),22737=>array(46,-26,962,836),22738=>array(44,-18,956,834),22739=>array(42,-45,953,807),22740=>array(41,-55,949,840),22741=>array(43,-62,965,828),22742=>array(31,-51,947,818),22743=>array(36,-35,954,823),22744=>array(59,-28,949,783),22745=>array(52,-77,967,847),22746=>array(61,-66,969,836),22747=>array(53,-65,920,806),22748=>array(35,-60,951,808),22749=>array(36,-65,973,826),22750=>array(51,-63,970,844),22751=>array(57,-24,950,849),22752=>array(29,-68,952,841),22753=>array(29,-64,964,843),22754=>array(46,-65,959,820),22755=>array(38,-64,963,831),22756=>array(42,-61,951,837),22757=>array(42,-70,948,791),22758=>array(59,-70,953,829),22759=>array(33,-72,957,811),22760=>array(71,-28,941,781),22761=>array(59,-71,932,793),22762=>array(31,-75,959,848),22763=>array(103,28,894,796),22764=>array(49,-18,951,796),22765=>array(75,-58,888,834),22766=>array(41,-63,913,829),22767=>array(33,-69,948,820),22768=>array(47,-55,927,837),22769=>array(74,-40,927,846),22770=>array(62,-58,933,846),22771=>array(42,-58,955,846),22772=>array(59,-17,951,826),22773=>array(52,-34,969,842),22774=>array(59,-9,909,834),22775=>array(55,-21,948,835),22776=>array(59,-38,909,834),22777=>array(55,-21,948,835),22778=>array(72,-32,947,831),22779=>array(50,-50,972,806),22780=>array(55,-23,953,830),22781=>array(55,-61,951,836),22782=>array(49,-18,950,829),22783=>array(62,-72,954,845),22784=>array(55,-61,951,836),22785=>array(95,-62,932,847),22786=>array(59,-46,954,826),22787=>array(67,-64,923,791),22788=>array(18,-67,935,818),22789=>array(30,-82,946,827),22790=>array(51,-71,955,833),22791=>array(43,-63,930,827),22792=>array(37,-60,961,832),22793=>array(58,-62,959,830),22794=>array(55,-41,952,812),22795=>array(71,-67,937,842),22796=>array(54,-64,969,833),22797=>array(55,-65,954,829),22798=>array(60,-67,967,829),22799=>array(53,-65,954,812),22800=>array(84,-66,945,844),22801=>array(53,-65,961,843),22802=>array(46,-67,954,795),22803=>array(55,-67,965,823),22804=>array(36,-53,948,841),22805=>array(95,-71,856,842),22806=>array(41,-65,967,836),22807=>array(46,-66,945,828),22808=>array(57,-59,872,844),22809=>array(24,-66,968,789),22810=>array(89,-68,911,849),22811=>array(107,-81,928,807),22812=>array(45,-65,959,828),22813=>array(29,-47,965,804),22814=>array(119,-58,929,821),22815=>array(14,-59,907,842),22816=>array(66,-65,921,847),22817=>array(66,-65,953,847),22818=>array(59,-73,928,839),22819=>array(71,-73,915,845),22820=>array(58,-76,942,848),22821=>array(22,-69,925,840),22822=>array(50,-69,952,823),22823=>array(85,-43,933,837),22824=>array(55,-63,950,845),22825=>array(61,-51,947,778),22826=>array(83,-48,941,834),22827=>array(74,-51,943,834),22828=>array(29,-57,979,840),22829=>array(84,-55,931,798),22830=>array(54,-70,968,826),22831=>array(58,-66,957,835),22832=>array(76,-70,953,835),22833=>array(86,-70,941,829),22834=>array(33,-62,947,835),22835=>array(54,-7,946,839),22836=>array(62,-59,913,831),22837=>array(43,-61,945,835),22838=>array(36,-71,969,824),22839=>array(58,-68,953,835),22840=>array(29,-70,982,855),22841=>array(29,-59,936,830),22842=>array(33,-59,947,835),22843=>array(21,-58,937,835),22844=>array(60,-67,955,835),22845=>array(66,-71,957,835),22846=>array(69,-64,955,834),22847=>array(53,-45,957,835),22848=>array(53,-62,982,783),22849=>array(40,-31,954,821),22850=>array(50,-67,958,832),22851=>array(67,-88,958,847),22852=>array(32,-44,976,842),22853=>array(59,-67,965,838),22854=>array(66,-41,957,835),22855=>array(60,-65,929,840),22856=>array(62,-62,960,848),22857=>array(44,-72,958,840),22858=>array(59,-74,964,831),22859=>array(21,-58,937,835),22860=>array(37,-60,963,828),22861=>array(35,-60,972,843),22862=>array(36,-22,961,851),22863=>array(46,-77,954,840),22864=>array(39,-66,966,841),22865=>array(43,-70,957,830),22866=>array(36,-65,974,838),22867=>array(57,-65,965,829),22868=>array(48,-71,970,835),22869=>array(53,-57,972,843),22870=>array(30,-59,954,839),22871=>array(43,-65,966,844),22872=>array(42,-65,955,829),22873=>array(29,-60,975,848),22874=>array(54,-68,960,839),22875=>array(26,-68,997,841),22876=>array(47,-69,970,836),22877=>array(70,-82,962,836),22878=>array(47,-75,976,833),22879=>array(41,-59,974,840),22880=>array(40,-71,959,829),22881=>array(44,-64,973,793),22882=>array(36,-68,970,840),22883=>array(51,-78,971,807),22884=>array(26,-77,972,837),22885=>array(39,-73,961,840),22886=>array(44,-66,960,839),22887=>array(47,-72,968,842),22888=>array(39,-64,970,852),22889=>array(32,-22,966,845),22890=>array(30,-65,967,843),22891=>array(40,-71,968,844),22892=>array(39,-64,970,847),22893=>array(35,-63,982,839),22894=>array(51,-69,960,849),22895=>array(29,-80,983,839),22896=>array(40,-73,967,781),22897=>array(48,-66,966,839),22898=>array(42,-72,961,832),22899=>array(86,-53,911,836),22900=>array(64,-67,949,819),22901=>array(52,-63,948,840),22902=>array(68,-70,920,821),22903=>array(63,-63,958,833),22904=>array(69,-65,959,836),22905=>array(40,-56,948,836),22906=>array(100,-70,972,832),22907=>array(65,-64,951,828),22908=>array(64,-55,958,831),22909=>array(52,-67,961,818),22910=>array(62,-65,912,829),22911=>array(44,-60,961,830),22912=>array(63,-66,944,821),22913=>array(66,-59,919,844),22914=>array(71,-74,897,815),22915=>array(29,-52,945,840),22916=>array(54,-72,942,836),22917=>array(77,-53,964,816),22918=>array(31,-67,938,824),22919=>array(47,-62,861,833),22920=>array(46,-61,914,828),22921=>array(61,-71,955,832),22922=>array(51,-72,935,832),22923=>array(76,-72,962,833),22924=>array(64,-69,954,837),22925=>array(51,-67,952,837),22926=>array(56,-72,974,840),22927=>array(74,-66,972,842),22928=>array(53,-56,974,841),22929=>array(49,-54,941,849),22930=>array(62,-68,934,839),22931=>array(57,-69,961,836),22932=>array(47,-64,957,853),22933=>array(57,-66,891,838),22934=>array(47,-70,957,830),22935=>array(39,-66,966,850),22936=>array(45,-69,958,830),22937=>array(53,-67,952,835),22938=>array(49,-64,966,840),22939=>array(66,-44,940,823),22940=>array(58,-69,955,831),22941=>array(39,-63,961,835),22942=>array(45,-50,956,827),22943=>array(66,-59,920,785),22944=>array(61,-66,917,835),22945=>array(57,-70,946,837),22946=>array(50,-67,971,836),22947=>array(52,-48,966,839),22948=>array(46,-62,951,830),22949=>array(67,-71,903,834),22950=>array(44,-66,951,836),22951=>array(53,-68,955,836),22952=>array(55,-77,951,829),22953=>array(53,-64,935,824),22954=>array(36,-66,913,818),22955=>array(36,-64,890,825),22956=>array(62,-62,965,828),22957=>array(58,-64,975,844),22958=>array(58,-65,945,838),22959=>array(61,-65,918,845),22960=>array(64,-67,951,842),22961=>array(62,-73,911,835),22962=>array(50,-58,937,835),22963=>array(53,-52,965,847),22964=>array(59,-63,945,844),22965=>array(60,-56,958,832),22966=>array(45,-56,956,835),22967=>array(66,-60,975,844),22968=>array(61,-62,961,830),22969=>array(30,-71,978,833),22970=>array(55,-66,973,838),22971=>array(80,-70,935,837),22972=>array(62,-60,959,830),22973=>array(59,-62,918,837),22974=>array(65,-65,936,828),22975=>array(60,-55,924,821),22976=>array(53,-65,956,842),22977=>array(60,-65,918,834),22978=>array(71,-58,969,830),22979=>array(60,-58,962,826),22980=>array(61,-61,954,826),22981=>array(56,-72,953,839),22982=>array(60,-67,948,832),22983=>array(58,-70,941,830),22984=>array(55,-50,968,860),22985=>array(37,-68,954,840),22986=>array(70,-64,934,832),22987=>array(54,-74,945,835),22988=>array(56,-62,965,839),22989=>array(32,-56,959,831),22990=>array(42,-77,968,834),22991=>array(62,-69,955,837),22992=>array(56,-65,956,818),22993=>array(56,-64,956,838),22994=>array(66,-64,978,841),22995=>array(52,-69,952,827),22996=>array(58,-67,912,836),22997=>array(58,-67,958,827),22998=>array(51,-52,949,822),22999=>array(41,-70,922,825),23000=>array(48,-67,956,850),23001=>array(40,-64,959,834),23002=>array(53,-70,960,833),23003=>array(60,-70,906,830),23004=>array(67,-63,926,850),23005=>array(38,-65,969,832),23006=>array(48,-52,957,850),23007=>array(38,-68,948,842),23008=>array(57,-74,907,832),23009=>array(80,-72,938,829),23010=>array(63,-72,929,831),23011=>array(38,-66,970,846),23012=>array(62,-66,957,837),23013=>array(47,-54,959,833),23014=>array(49,-71,962,843),23015=>array(52,-65,952,845),23016=>array(54,-67,968,837),23017=>array(68,-75,956,827),23018=>array(45,-69,956,824),23019=>array(50,-71,955,831),23020=>array(62,-66,956,829),23021=>array(67,-73,931,837),23022=>array(69,-59,960,837),23023=>array(64,-74,953,823),23024=>array(45,-60,909,836),23025=>array(44,-49,979,860),23026=>array(61,-74,954,831),23027=>array(61,-70,887,830),23028=>array(83,-73,938,824),23029=>array(69,-79,954,821),23030=>array(52,-50,970,858),23031=>array(55,-73,957,827),23032=>array(63,-73,953,827),23033=>array(40,-59,953,845),23034=>array(64,-74,953,823),23035=>array(53,-66,895,831),23036=>array(73,-80,932,822),23037=>array(78,-75,947,820),23038=>array(57,-80,955,823),23039=>array(59,-74,939,842),23040=>array(64,-67,951,830),23041=>array(53,-74,959,832),23042=>array(73,-73,959,832),23043=>array(73,-68,953,833),23044=>array(44,-65,935,829),23045=>array(44,-77,934,817),23046=>array(28,-69,936,822),23047=>array(40,-60,939,836),23048=>array(56,-82,919,834),23049=>array(34,-64,962,839),23050=>array(64,-68,958,830),23051=>array(62,-70,897,836),23052=>array(46,-48,956,840),23053=>array(46,-70,961,840),23054=>array(37,-68,939,830),23055=>array(56,-62,956,838),23056=>array(64,-64,953,837),23057=>array(37,-68,943,830),23058=>array(56,-67,953,845),23059=>array(41,-67,963,823),23060=>array(82,-69,954,839),23061=>array(60,-62,964,837),23062=>array(63,-69,980,829),23063=>array(57,-69,983,833),23064=>array(62,-75,962,831),23065=>array(51,-48,952,845),23066=>array(72,-74,923,808),23067=>array(64,-71,977,833),23068=>array(50,-71,947,833),23069=>array(66,-54,969,852),23070=>array(48,-68,945,833),23071=>array(63,-72,897,831),23072=>array(66,-66,965,831),23073=>array(66,-66,961,831),23074=>array(54,-66,951,867),23075=>array(65,-67,933,845),23076=>array(37,-68,939,829),23077=>array(42,-63,972,832),23078=>array(62,-64,954,828),23079=>array(62,-68,949,846),23080=>array(47,-64,954,828),23081=>array(57,-67,967,848),23082=>array(57,-68,948,828),23083=>array(39,-67,967,828),23084=>array(42,-64,962,833),23085=>array(73,-74,964,833),23086=>array(64,-68,941,832),23087=>array(64,-71,948,833),23088=>array(64,-67,955,840),23089=>array(32,-62,947,826),23090=>array(43,-72,891,819),23091=>array(55,-64,912,839),23092=>array(46,-73,870,832),23093=>array(49,-71,968,835),23094=>array(67,-75,940,793),23095=>array(65,-44,953,833),23096=>array(51,-78,953,833),23097=>array(44,-77,964,828),23098=>array(37,-67,973,823),23099=>array(61,-64,973,835),23100=>array(68,-69,906,832),23101=>array(57,-67,955,828),23102=>array(51,-69,958,827),23103=>array(37,-58,939,827),23104=>array(38,-65,952,835),23105=>array(55,-68,930,832),23106=>array(63,-71,912,840),23107=>array(58,-68,957,834),23108=>array(53,-67,960,839),23109=>array(64,-61,921,847),23110=>array(66,-74,946,836),23111=>array(42,-67,959,834),23112=>array(46,-72,971,831),23113=>array(59,-63,954,836),23114=>array(37,-67,977,837),23115=>array(44,-66,953,837),23116=>array(49,-71,980,828),23117=>array(54,-65,962,839),23118=>array(69,-68,953,842),23119=>array(42,-67,968,848),23120=>array(52,-70,979,827),23121=>array(50,-70,962,830),23122=>array(50,-68,971,836),23123=>array(64,-74,935,827),23124=>array(54,-63,964,834),23125=>array(37,-65,964,836),23126=>array(45,-68,979,829),23127=>array(54,-70,960,832),23128=>array(50,-62,966,831),23129=>array(48,-60,946,841),23130=>array(55,-71,960,833),23131=>array(52,-62,955,838),23132=>array(47,-67,954,790),23133=>array(52,-71,961,828),23134=>array(49,-67,959,839),23135=>array(66,-71,912,829),23136=>array(65,-68,924,839),23137=>array(44,-64,970,839),23138=>array(54,-65,951,850),23139=>array(59,-75,922,834),23140=>array(52,-72,898,830),23141=>array(56,-66,967,833),23142=>array(42,-74,944,832),23143=>array(45,-64,948,837),23144=>array(34,-61,957,834),23145=>array(53,-67,948,837),23146=>array(47,-78,964,822),23147=>array(54,-56,949,834),23148=>array(37,-50,950,829),23149=>array(45,-54,954,833),23150=>array(69,-68,945,834),23151=>array(57,-78,918,795),23152=>array(50,-73,959,835),23153=>array(57,-78,944,848),23154=>array(70,-65,962,835),23155=>array(61,-62,934,835),23156=>array(56,-74,915,780),23157=>array(37,-70,956,825),23158=>array(52,-63,903,831),23159=>array(40,-65,949,852),23160=>array(57,-68,947,830),23161=>array(65,-67,952,835),23162=>array(51,-69,963,841),23163=>array(50,-65,951,833),23164=>array(51,-64,954,840),23165=>array(53,-70,964,832),23166=>array(41,-70,964,849),23167=>array(63,-65,967,834),23168=>array(67,-68,932,832),23169=>array(50,-64,963,849),23170=>array(65,-61,935,858),23171=>array(57,-68,961,832),23172=>array(57,-71,961,833),23173=>array(38,-49,955,827),23174=>array(57,-72,945,835),23175=>array(57,-72,934,832),23176=>array(70,-62,950,824),23177=>array(57,-62,943,832),23178=>array(43,-73,951,833),23179=>array(58,-73,973,823),23180=>array(52,-74,955,830),23181=>array(56,-82,954,852),23182=>array(57,-68,965,838),23183=>array(50,-69,950,830),23184=>array(51,-72,952,787),23185=>array(65,-66,959,842),23186=>array(60,-66,973,836),23187=>array(60,-58,959,841),23188=>array(52,-70,954,834),23189=>array(57,-76,964,833),23190=>array(47,-60,988,842),23191=>array(73,-50,961,836),23192=>array(57,-65,951,842),23193=>array(48,-74,961,843),23194=>array(63,-73,900,827),23195=>array(42,-65,949,836),23196=>array(56,-82,954,833),23197=>array(50,-72,945,835),23198=>array(55,-69,986,832),23199=>array(44,-62,963,810),23200=>array(64,-65,927,845),23201=>array(58,-67,964,833),23202=>array(49,-70,920,825),23203=>array(43,-66,954,835),23204=>array(67,-53,976,832),23205=>array(53,-78,921,834),23206=>array(55,-67,914,832),23207=>array(54,-65,919,837),23208=>array(54,-63,967,835),23209=>array(62,-71,914,827),23210=>array(35,-74,951,815),23211=>array(38,-60,965,836),23212=>array(56,-67,981,825),23213=>array(57,-82,931,825),23214=>array(41,-70,974,849),23215=>array(46,-60,928,845),23216=>array(46,-65,908,832),23217=>array(55,-73,967,840),23218=>array(43,-53,958,852),23219=>array(65,-67,967,846),23220=>array(59,-76,974,823),23221=>array(31,-65,968,834),23222=>array(55,-67,954,827),23223=>array(43,-64,950,837),23224=>array(55,-71,966,843),23225=>array(56,-69,915,834),23226=>array(51,-73,975,829),23227=>array(38,-76,950,832),23228=>array(51,-72,968,818),23229=>array(56,-71,922,818),23230=>array(18,-64,948,837),23231=>array(52,-64,972,855),23232=>array(48,-69,962,833),23233=>array(53,-69,970,832),23234=>array(42,-65,958,840),23235=>array(60,-71,945,840),23236=>array(38,-65,968,839),23237=>array(72,-60,954,844),23238=>array(65,-69,977,833),23239=>array(54,-82,962,829),23240=>array(61,-73,932,831),23241=>array(66,-76,957,831),23242=>array(49,-65,954,832),23243=>array(36,-57,929,818),23244=>array(51,-64,966,850),23245=>array(52,-70,927,832),23246=>array(44,-69,950,840),23247=>array(49,-64,946,842),23248=>array(57,-65,958,829),23249=>array(82,-71,934,791),23250=>array(44,-73,931,820),23251=>array(43,-53,967,844),23252=>array(43,-72,920,826),23253=>array(58,-56,971,830),23254=>array(22,-62,953,831),23255=>array(36,-77,951,837),23256=>array(44,-61,977,843),23257=>array(38,-63,970,841),23258=>array(47,-47,972,833),23259=>array(52,-74,958,785),23260=>array(52,-65,964,849),23261=>array(58,-70,962,834),23262=>array(54,-67,957,836),23263=>array(44,-47,951,841),23264=>array(37,-66,955,841),23265=>array(37,-64,948,836),23266=>array(51,-72,954,826),23267=>array(43,-61,952,836),23268=>array(55,-55,938,836),23269=>array(50,-69,951,831),23270=>array(30,-77,921,826),23271=>array(36,-67,943,830),23272=>array(59,-72,972,833),23273=>array(69,-69,964,835),23274=>array(37,-72,973,839),23275=>array(68,-62,989,837),23276=>array(63,-66,978,834),23277=>array(56,-68,953,831),23278=>array(50,-70,954,828),23279=>array(44,-75,960,833),23280=>array(69,-69,984,837),23281=>array(41,-70,914,823),23282=>array(49,-66,979,840),23283=>array(51,-50,957,859),23284=>array(62,-80,956,829),23285=>array(40,-65,961,836),23286=>array(39,-54,970,856),23287=>array(34,-65,950,841),23288=>array(44,-78,962,837),23289=>array(46,-73,966,828),23290=>array(42,-68,911,835),23291=>array(57,-65,915,823),23292=>array(38,-74,958,831),23293=>array(44,-74,980,838),23294=>array(37,-74,954,836),23295=>array(48,-77,965,834),23296=>array(53,-67,964,852),23297=>array(35,-77,989,831),23298=>array(54,-82,981,833),23299=>array(45,-77,951,827),23300=>array(38,-69,954,833),23301=>array(38,-69,952,829),23302=>array(41,-64,991,858),23303=>array(38,-79,960,832),23304=>array(44,-64,965,835),23305=>array(38,-64,956,841),23306=>array(64,-89,940,832),23307=>array(34,-68,958,835),23308=>array(52,-68,966,834),23309=>array(38,-66,965,835),23310=>array(42,-70,975,831),23311=>array(40,-68,975,831),23312=>array(44,-74,976,841),23313=>array(30,-50,963,844),23314=>array(45,-68,973,864),23315=>array(45,-80,977,839),23316=>array(41,-66,971,831),23317=>array(46,-64,941,835),23318=>array(61,-75,948,848),23319=>array(35,-56,962,850),23320=>array(34,-64,952,837),23321=>array(36,-65,964,837),23322=>array(42,-70,972,844),23323=>array(46,-60,991,836),23324=>array(53,-84,969,849),23325=>array(46,-64,956,848),23326=>array(50,-41,962,835),23327=>array(46,-70,965,853),23328=>array(38,-67,984,838),23329=>array(36,-66,975,843),23330=>array(43,-79,966,837),23331=>array(51,-70,964,837),23332=>array(37,-68,973,848),23333=>array(51,-70,956,825),23334=>array(50,-71,955,826),23335=>array(41,-70,953,825),23336=>array(34,-50,963,838),23337=>array(43,-70,942,831),23338=>array(44,-67,966,844),23339=>array(34,-65,947,840),23340=>array(48,-68,951,829),23341=>array(44,-68,976,815),23342=>array(45,-74,950,807),23343=>array(45,-68,957,824),23344=>array(68,-69,924,791),23345=>array(53,-75,953,840),23346=>array(46,-63,934,829),23347=>array(43,-65,963,831),23348=>array(43,-69,956,850),23349=>array(40,-68,936,845),23350=>array(43,-64,962,859),23351=>array(36,-67,962,846),23352=>array(54,-65,958,851),23353=>array(27,-65,977,829),23354=>array(57,-53,971,829),23355=>array(46,-66,961,841),23356=>array(62,-74,921,831),23357=>array(40,-67,976,839),23358=>array(35,-50,968,848),23359=>array(41,-68,971,836),23360=>array(51,-65,932,831),23361=>array(68,-66,930,785),23362=>array(42,-43,959,840),23363=>array(59,-61,989,840),23364=>array(41,-66,909,832),23365=>array(43,-65,969,821),23366=>array(55,-67,954,831),23367=>array(46,-64,980,832),23368=>array(48,-65,943,831),23369=>array(66,-58,937,839),23370=>array(41,-78,942,839),23371=>array(44,-72,962,825),23372=>array(55,-74,957,839),23373=>array(39,-67,974,831),23374=>array(46,-73,947,830),23375=>array(45,-65,953,846),23376=>array(98,-49,921,787),23377=>array(72,-52,927,782),23378=>array(221,-58,921,778),23379=>array(94,-53,939,781),23380=>array(69,-61,953,825),23381=>array(74,-59,942,783),23382=>array(41,-52,955,786),23383=>array(94,-61,926,832),23384=>array(47,-69,943,839),23385=>array(31,-66,937,823),23386=>array(53,-65,947,840),23387=>array(74,-64,944,831),23388=>array(60,-65,967,834),23389=>array(48,-61,928,834),23390=>array(24,-31,945,786),23391=>array(66,-17,955,786),23392=>array(86,-51,920,828),23393=>array(20,-70,953,839),23394=>array(53,-64,947,847),23395=>array(50,-67,959,838),23396=>array(42,-77,970,838),23397=>array(54,-58,947,852),23398=>array(74,-54,926,826),23399=>array(86,-52,935,826),23400=>array(41,-67,950,800),23401=>array(51,-68,948,833),23402=>array(41,-60,924,842),23403=>array(44,-69,965,815),23404=>array(38,-66,946,791),23405=>array(55,-72,960,785),23406=>array(41,-64,949,836),23407=>array(63,-61,956,796),23408=>array(41,-68,971,834),23409=>array(31,-59,962,798),23410=>array(51,-50,961,789),23411=>array(53,-56,949,855),23412=>array(135,-68,903,823),23413=>array(34,-76,944,817),23414=>array(53,-58,949,838),23415=>array(41,-71,953,831),23416=>array(66,-67,939,831),23417=>array(64,-57,940,840),23418=>array(31,-64,955,790),23419=>array(44,-70,954,823),23420=>array(59,-81,946,833),23421=>array(71,-60,948,837),23422=>array(39,-67,954,788),23423=>array(57,-59,955,846),23424=>array(90,354,883,650),23425=>array(79,-52,934,851),23426=>array(56,-67,945,833),23427=>array(109,-28,902,821),23428=>array(55,-63,952,841),23429=>array(70,-38,942,833),23430=>array(79,-61,932,841),23431=>array(59,-69,931,840),23432=>array(77,-59,923,825),23433=>array(76,-70,912,818),23434=>array(71,-64,950,844),23435=>array(63,-65,951,824),23436=>array(60,-62,946,839),23437=>array(58,-58,942,822),23438=>array(48,-66,955,845),23439=>array(77,-64,927,822),23440=>array(76,-37,972,838),23441=>array(106,-66,923,838),23442=>array(84,-44,940,832),23443=>array(46,-66,958,830),23444=>array(75,-32,925,842),23445=>array(57,-65,894,839),23446=>array(75,-65,942,830),23447=>array(71,-63,945,822),23448=>array(106,-70,894,839),23449=>array(106,-71,894,817),23450=>array(41,-67,953,826),23451=>array(54,-59,954,818),23452=>array(60,-29,953,831),23453=>array(79,-25,925,826),23454=>array(73,-61,929,832),23455=>array(47,-57,955,827),23456=>array(32,-56,957,841),23457=>array(89,-60,904,842),23458=>array(40,-61,958,828),23459=>array(73,-25,931,823),23460=>array(93,-35,907,825),23461=>array(51,-70,908,839),23462=>array(102,-72,915,832),23463=>array(90,-21,910,835),23464=>array(74,-79,949,824),23465=>array(87,-54,933,835),23466=>array(41,-63,921,837),23467=>array(91,-74,894,839),23468=>array(39,-65,966,842),23469=>array(59,-65,932,830),23470=>array(98,-68,902,829),23471=>array(42,-58,934,848),23472=>array(80,-63,931,831),23473=>array(83,-52,893,844),23474=>array(46,-50,955,844),23475=>array(83,-65,920,834),23476=>array(69,-79,934,839),23477=>array(110,-71,901,837),23478=>array(55,-65,960,823),23479=>array(46,-56,955,857),23480=>array(45,-67,968,833),23481=>array(47,-68,953,834),23482=>array(54,-57,955,840),23483=>array(55,-61,949,834),23484=>array(47,-73,959,846),23485=>array(81,-62,927,836),23486=>array(50,-77,917,846),23487=>array(43,-73,906,828),23488=>array(46,-62,955,826),23489=>array(41,-67,982,841),23490=>array(48,-71,969,835),23491=>array(54,-62,952,829),23492=>array(80,-59,941,833),23493=>array(53,-69,956,835),23494=>array(66,-64,944,827),23495=>array(47,-73,959,830),23496=>array(86,-65,921,846),23497=>array(90,-67,912,845),23498=>array(62,-74,963,838),23499=>array(37,-41,968,835),23500=>array(107,-67,900,835),23501=>array(61,-31,953,835),23502=>array(43,-53,926,860),23503=>array(63,-66,961,841),23504=>array(46,-77,962,821),23505=>array(45,-72,929,839),23506=>array(48,-83,952,834),23507=>array(100,-65,900,840),23508=>array(75,-68,971,828),23509=>array(83,-68,930,843),23510=>array(56,-60,981,844),23511=>array(47,-55,944,840),23512=>array(72,-78,931,841),23513=>array(34,-64,966,839),23514=>array(65,-65,957,842),23515=>array(55,-57,956,842),23516=>array(80,-68,917,843),23517=>array(39,-75,952,829),23518=>array(35,-76,962,845),23519=>array(53,-62,954,825),23520=>array(41,-61,936,856),23521=>array(35,-66,974,840),23522=>array(47,-76,960,836),23523=>array(53,-72,948,836),23524=>array(54,-64,953,836),23525=>array(42,-72,977,850),23526=>array(61,-74,952,850),23527=>array(80,-68,917,844),23528=>array(44,-69,930,839),23529=>array(41,-73,970,835),23530=>array(50,-63,914,836),23531=>array(82,-65,910,833),23532=>array(55,-57,953,843),23533=>array(83,-34,925,849),23534=>array(41,-64,970,838),23535=>array(63,-68,917,841),23536=>array(62,-78,967,846),23537=>array(44,-69,975,835),23538=>array(58,-75,968,833),23539=>array(70,-69,939,832),23540=>array(67,-76,957,841),23541=>array(54,-66,969,836),23542=>array(70,-69,939,850),23543=>array(69,-25,923,847),23544=>array(97,-64,912,829),23545=>array(24,-60,915,829),23546=>array(77,-59,932,836),23547=>array(62,-57,913,793),23548=>array(50,-58,916,786),23549=>array(50,-63,916,840),23550=>array(49,-46,951,821),23551=>array(60,-57,934,835),23552=>array(100,-61,945,826),23553=>array(49,-61,945,826),23554=>array(62,-72,935,823),23555=>array(55,-72,936,823),23556=>array(49,-64,948,845),23557=>array(44,-69,962,827),23558=>array(41,-63,940,839),23559=>array(37,-64,956,841),23560=>array(57,-67,947,826),23561=>array(44,-71,951,826),23562=>array(68,-63,932,850),23563=>array(73,-70,933,811),23564=>array(53,-71,955,829),23565=>array(38,-61,952,835),23566=>array(57,-65,944,848),23567=>array(71,-41,927,818),23568=>array(68,-62,945,816),23569=>array(52,-67,944,818),23570=>array(45,-63,954,833),23571=>array(59,-63,935,827),23572=>array(32,-63,909,830),23573=>array(49,-58,961,789),23574=>array(61,-64,939,830),23575=>array(49,-58,961,821),23576=>array(50,-16,921,824),23577=>array(116,-70,861,824),23578=>array(110,-70,864,836),23579=>array(31,-48,962,821),23580=>array(43,-64,952,824),23581=>array(66,-68,898,831),23582=>array(41,-64,970,821),23583=>array(41,-71,970,822),23584=>array(42,-84,972,826),23585=>array(41,-62,961,836),23586=>array(46,-63,954,829),23587=>array(82,-47,936,782),23588=>array(62,-65,927,829),23589=>array(32,-60,963,842),23590=>array(42,-44,959,835),23591=>array(70,-61,932,827),23592=>array(35,-70,949,853),23593=>array(35,-61,964,798),23594=>array(44,-64,964,832),23595=>array(32,-55,962,785),23596=>array(31,-66,963,844),23597=>array(43,-65,962,837),23598=>array(34,-51,958,833),23599=>array(34,-51,958,835),23600=>array(50,-66,961,836),23601=>array(56,-63,951,831),23602=>array(33,-51,958,842),23603=>array(44,-69,959,826),23604=>array(34,-51,958,833),23605=>array(34,-51,960,835),23606=>array(36,-66,971,831),23607=>array(36,-72,974,831),23608=>array(78,-71,880,766),23609=>array(41,-58,956,772),23610=>array(69,-73,926,765),23611=>array(36,-62,963,790),23612=>array(53,-71,934,782),23613=>array(40,-60,960,789),23614=>array(57,-67,940,784),23615=>array(52,-74,951,779),23616=>array(68,-65,895,785),23617=>array(54,-73,938,782),23618=>array(28,-63,917,789),23619=>array(28,-64,961,789),23620=>array(52,-62,903,794),23621=>array(56,-73,930,782),23622=>array(64,-73,896,788),23623=>array(63,-62,897,792),23624=>array(49,-65,886,792),23625=>array(41,-70,935,787),23626=>array(22,-60,846,791),23627=>array(53,-74,933,796),23628=>array(59,-69,894,786),23629=>array(33,-64,964,791),23630=>array(47,-76,939,785),23631=>array(53,-72,930,785),23632=>array(37,-65,972,789),23633=>array(59,-72,894,789),23634=>array(45,-72,956,795),23635=>array(65,-92,946,781),23636=>array(60,-59,952,804),23637=>array(46,-73,943,779),23638=>array(55,-64,932,782),23639=>array(48,-73,964,798),23640=>array(48,-73,964,782),23641=>array(35,-68,951,788),23642=>array(58,-66,899,808),23643=>array(53,-72,930,785),23644=>array(49,-67,957,791),23645=>array(44,-70,935,786),23646=>array(30,-73,877,777),23647=>array(23,-58,963,803),23648=>array(46,-68,935,796),23649=>array(41,-65,911,788),23650=>array(46,-82,939,823),23651=>array(44,-69,973,787),23652=>array(50,-68,900,808),23653=>array(29,-68,953,786),23654=>array(35,-73,913,789),23655=>array(23,-58,975,803),23656=>array(41,-70,962,798),23657=>array(44,-62,959,800),23658=>array(48,-66,966,786),23659=>array(44,-62,983,800),23660=>array(57,-82,912,790),23661=>array(40,-58,934,804),23662=>array(85,-65,895,825),23663=>array(78,-40,952,836),23664=>array(90,-68,912,848),23665=>array(137,-48,863,771),23666=>array(124,-65,853,820),23667=>array(47,-65,950,800),23668=>array(67,-62,915,833),23669=>array(46,-80,882,833),23670=>array(67,-62,915,833),23671=>array(94,-70,920,821),23672=>array(94,4,953,821),23673=>array(53,-27,935,841),23674=>array(85,-28,931,813),23675=>array(110,-64,897,820),23676=>array(113,-70,964,824),23677=>array(113,-50,963,824),23678=>array(89,-69,911,814),23679=>array(90,-67,922,825),23680=>array(143,-65,869,838),23681=>array(80,-65,855,815),23682=>array(104,-31,921,822),23683=>array(95,-75,915,833),23684=>array(113,-65,889,824),23685=>array(95,-68,953,824),23686=>array(97,-62,963,827),23687=>array(110,-64,911,836),23688=>array(89,-52,930,814),23689=>array(103,-66,909,834),23690=>array(118,-67,935,787),23691=>array(106,-71,965,806),23692=>array(43,-65,957,832),23693=>array(86,-68,931,817),23694=>array(63,-71,951,824),23695=>array(104,-69,948,818),23696=>array(76,-66,964,837),23697=>array(41,-73,955,833),23698=>array(96,-71,960,836),23699=>array(101,-70,948,830),23700=>array(45,-69,961,821),23701=>array(52,-68,969,831),23702=>array(93,-29,916,803),23703=>array(134,-58,833,830),23704=>array(87,-68,934,810),23705=>array(53,-67,959,812),23706=>array(40,-62,957,826),23707=>array(115,-63,865,832),23708=>array(140,-26,921,823),23709=>array(53,-66,935,838),23710=>array(91,-62,955,845),23711=>array(97,-70,964,831),23712=>array(91,-20,951,813),23713=>array(113,-59,888,789),23714=>array(80,-62,931,839),23715=>array(109,-54,909,845),23716=>array(65,-66,966,834),23717=>array(98,-70,957,827),23718=>array(70,-27,945,824),23719=>array(54,-56,900,850),23720=>array(80,-25,948,817),23721=>array(69,-68,920,822),23722=>array(107,-64,900,837),23723=>array(66,-64,892,830),23724=>array(81,-67,901,817),23725=>array(103,-72,948,833),23726=>array(103,-43,949,833),23727=>array(97,-30,949,800),23728=>array(98,-69,910,834),23729=>array(47,-67,955,839),23730=>array(87,-62,960,810),23731=>array(76,-65,924,829),23732=>array(93,-8,933,814),23733=>array(76,-65,935,829),23734=>array(66,-66,888,843),23735=>array(66,-67,939,817),23736=>array(35,-72,931,829),23737=>array(87,-70,910,810),23738=>array(41,-66,955,833),23739=>array(62,-57,961,829),23740=>array(62,-67,959,817),23741=>array(63,-66,920,815),23742=>array(66,-67,955,830),23743=>array(101,-66,875,824),23744=>array(144,-65,869,833),23745=>array(67,-69,911,836),23746=>array(107,-62,964,837),23747=>array(97,-67,907,820),23748=>array(91,-68,944,798),23749=>array(66,-75,950,845),23750=>array(111,-70,961,823),23751=>array(30,-62,979,840),23752=>array(107,-70,961,826),23753=>array(48,-70,963,821),23754=>array(163,-78,862,824),23755=>array(100,-60,903,844),23756=>array(107,-12,960,795),23757=>array(101,-64,959,827),23758=>array(134,-77,937,824),23759=>array(104,-68,956,821),23760=>array(107,-70,960,827),23761=>array(53,-41,948,819),23762=>array(101,-62,898,815),23763=>array(108,-76,949,822),23764=>array(103,-32,942,822),23765=>array(71,-70,947,836),23766=>array(111,-76,944,821),23767=>array(100,-67,949,819),23768=>array(106,-12,956,804),23769=>array(58,-58,927,838),23770=>array(54,-29,971,819),23771=>array(74,-76,885,818),23772=>array(44,-44,974,839),23773=>array(144,-61,869,827),23774=>array(46,-69,939,822),23775=>array(50,-67,934,825),23776=>array(79,-64,940,835),23777=>array(76,-64,945,826),23778=>array(73,-67,910,830),23779=>array(82,-60,944,829),23780=>array(89,-65,947,819),23781=>array(93,-62,957,830),23782=>array(40,-65,947,844),23783=>array(88,-63,944,846),23784=>array(77,-57,945,833),23785=>array(43,-52,958,850),23786=>array(62,-63,941,826),23787=>array(78,-67,948,817),23788=>array(109,-61,956,831),23789=>array(66,-67,923,833),23790=>array(98,-60,941,814),23791=>array(37,-64,978,839),23792=>array(77,-65,961,840),23793=>array(47,-65,951,793),23794=>array(46,-59,898,841),23795=>array(39,-67,969,841),23796=>array(77,-64,933,827),23797=>array(66,-43,956,828),23798=>array(118,-70,897,845),23799=>array(89,-62,939,829),23800=>array(105,-78,952,823),23801=>array(39,-71,957,835),23802=>array(66,-72,962,817),23803=>array(79,-69,966,849),23804=>array(69,-62,929,833),23805=>array(70,-73,961,836),23806=>array(93,-71,932,837),23807=>array(101,-62,944,813),23808=>array(131,-68,947,826),23809=>array(55,-64,987,837),23810=>array(91,-65,912,825),23811=>array(87,-65,963,818),23812=>array(69,-32,939,813),23813=>array(69,-54,906,849),23814=>array(85,-23,924,839),23815=>array(63,-66,937,835),23816=>array(92,-65,924,858),23817=>array(77,-62,980,843),23818=>array(64,-63,968,842),23819=>array(66,-73,934,831),23820=>array(109,-68,956,818),23821=>array(63,-63,945,835),23822=>array(77,-69,938,831),23823=>array(109,-73,962,827),23824=>array(90,-42,961,811),23825=>array(76,-66,954,838),23826=>array(69,-68,945,835),23827=>array(93,-65,909,811),23828=>array(49,-68,949,836),23829=>array(66,-64,953,825),23830=>array(46,-80,938,833),23831=>array(134,-67,879,833),23832=>array(66,-68,960,839),23833=>array(33,-61,979,841),23834=>array(66,-52,968,850),23835=>array(66,-66,932,817),23836=>array(90,-27,911,832),23837=>array(107,-68,957,833),23838=>array(91,-62,935,851),23839=>array(49,-22,962,835),23840=>array(109,-71,976,830),23841=>array(71,-57,920,802),23842=>array(65,-71,956,834),23843=>array(55,-66,970,837),23844=>array(79,-64,927,838),23845=>array(100,-73,948,837),23846=>array(74,-33,950,847),23847=>array(29,-64,933,838),23848=>array(107,-69,974,832),23849=>array(59,-74,894,835),23850=>array(95,-64,951,845),23851=>array(61,-74,911,823),23852=>array(50,-50,960,829),23853=>array(36,-70,914,823),23854=>array(127,-67,886,837),23855=>array(86,-22,964,845),23856=>array(106,-68,930,835),23857=>array(73,-74,897,829),23858=>array(109,-28,954,837),23859=>array(106,-71,967,837),23860=>array(33,-63,956,835),23861=>array(111,-68,955,817),23862=>array(52,-65,953,829),23863=>array(79,-71,953,838),23864=>array(108,-81,963,809),23865=>array(108,-69,933,831),23866=>array(38,-73,956,829),23867=>array(72,-68,949,830),23868=>array(109,-72,961,815),23869=>array(60,-31,955,836),23870=>array(82,-65,945,805),23871=>array(109,-63,962,818),23872=>array(48,-70,955,826),23873=>array(109,-27,953,826),23874=>array(43,-67,954,833),23875=>array(108,-71,951,833),23876=>array(74,-71,961,831),23877=>array(41,-71,953,831),23878=>array(39,-70,960,832),23879=>array(45,-65,972,837),23880=>array(92,-67,958,830),23881=>array(106,-70,944,841),23882=>array(79,-65,960,842),23883=>array(66,-64,905,817),23884=>array(47,-69,971,835),23885=>array(36,-62,954,830),23886=>array(66,-65,915,817),23887=>array(57,-75,945,821),23888=>array(34,-62,970,837),23889=>array(109,-70,919,821),23890=>array(99,-52,895,800),23891=>array(114,-42,910,813),23892=>array(63,-69,943,812),23893=>array(103,-69,967,819),23894=>array(83,-23,967,836),23895=>array(45,-70,939,809),23896=>array(82,-71,955,817),23897=>array(55,-70,956,827),23898=>array(26,-66,960,835),23899=>array(33,-64,979,839),23900=>array(60,-62,928,831),23901=>array(92,-63,944,817),23902=>array(51,-71,967,847),23903=>array(37,-77,939,833),23904=>array(106,-62,995,841),23905=>array(47,-56,969,825),23906=>array(106,-70,958,842),23907=>array(111,-72,951,835),23908=>array(70,-60,919,830),23909=>array(110,-68,963,829),23910=>array(81,-20,933,839),23911=>array(105,-73,911,831),23912=>array(109,-74,940,842),23913=>array(63,-70,937,835),23914=>array(81,-75,939,841),23915=>array(83,-66,938,844),23916=>array(76,-74,951,836),23917=>array(59,-76,953,840),23918=>array(64,-65,973,846),23919=>array(77,-39,945,825),23920=>array(83,-64,967,843),23921=>array(105,-72,967,830),23922=>array(110,-72,979,845),23923=>array(37,-47,956,839),23924=>array(78,-67,960,833),23925=>array(114,-61,947,836),23926=>array(69,-54,929,809),23927=>array(101,-67,974,836),23928=>array(48,-71,966,835),23929=>array(79,-76,959,835),23930=>array(109,-67,960,817),23931=>array(79,-66,968,848),23932=>array(112,-67,959,834),23933=>array(98,-67,957,826),23934=>array(38,-49,974,851),23935=>array(68,-74,965,835),23936=>array(109,-65,953,818),23937=>array(76,-68,934,836),23938=>array(62,-65,930,844),23939=>array(93,-64,962,842),23940=>array(50,-64,955,835),23941=>array(36,-59,957,794),23942=>array(109,-69,955,826),23943=>array(66,-64,933,817),23944=>array(48,-71,962,830),23945=>array(127,-68,964,831),23946=>array(46,-58,948,842),23947=>array(83,-63,924,843),23948=>array(51,-56,890,810),23949=>array(107,-73,900,812),23950=>array(51,-64,948,821),23951=>array(40,-78,954,821),23952=>array(107,-73,949,812),23953=>array(81,-75,951,834),23954=>array(95,-53,908,851),23955=>array(98,-71,972,830),23956=>array(45,-65,978,836),23957=>array(109,-70,970,827),23958=>array(60,-63,991,858),23959=>array(92,-67,935,829),23960=>array(29,-71,910,838),23961=>array(76,-71,937,829),23962=>array(24,-67,985,835),23963=>array(76,-62,959,852),23964=>array(37,-72,964,830),23965=>array(66,-24,954,835),23966=>array(116,-71,933,838),23967=>array(78,-72,955,848),23968=>array(76,-64,956,828),23969=>array(40,-79,971,830),23970=>array(62,-64,943,836),23971=>array(39,-64,938,830),23972=>array(33,-59,962,833),23973=>array(66,-73,970,812),23974=>array(67,-72,945,841),23975=>array(82,-64,935,814),23976=>array(100,-67,915,835),23977=>array(109,-80,973,829),23978=>array(40,-68,964,840),23979=>array(79,-67,948,825),23980=>array(66,-77,965,840),23981=>array(103,-64,947,840),23982=>array(66,-57,950,854),23983=>array(44,-80,965,829),23984=>array(106,-69,961,828),23985=>array(106,-69,954,824),23986=>array(57,-60,929,842),23987=>array(40,-52,968,836),23988=>array(38,-73,977,840),23989=>array(115,-68,961,814),23990=>array(45,-73,967,825),23991=>array(29,-63,951,834),23992=>array(75,-65,947,829),23993=>array(62,-65,960,833),23994=>array(40,-73,961,832),23995=>array(37,-84,964,831),23996=>array(74,-70,958,821),23997=>array(52,-66,965,839),23998=>array(78,-32,953,837),23999=>array(74,-64,943,812),24000=>array(39,-64,964,831),24001=>array(73,-63,962,826),24002=>array(49,-64,936,838),24003=>array(54,-64,975,836),24004=>array(67,-63,962,843),24005=>array(46,-68,931,824),24006=>array(93,-67,940,836),24007=>array(95,-56,959,847),24008=>array(69,-64,919,812),24009=>array(69,-67,966,848),24010=>array(72,-62,958,831),24011=>array(43,-65,938,836),24012=>array(42,-69,968,820),24013=>array(38,-73,957,828),24014=>array(54,-61,976,820),24015=>array(93,-70,953,817),24016=>array(78,-61,975,836),24017=>array(106,-68,976,832),24018=>array(58,-64,961,841),24019=>array(55,-87,941,851),24020=>array(48,-64,962,836),24021=>array(96,-63,945,844),24022=>array(42,-67,973,836),24023=>array(58,-64,963,815),24024=>array(82,-72,956,832),24025=>array(74,-65,964,837),24026=>array(37,-68,957,833),24027=>array(43,-60,914,801),24028=>array(166,-60,793,795),24029=>array(58,-70,858,817),24030=>array(55,-64,859,823),24031=>array(55,-70,941,839),24032=>array(74,-36,945,773),24033=>array(22,-53,943,817),24034=>array(61,-59,961,849),24035=>array(61,-59,961,836),24036=>array(122,-67,935,842),24037=>array(95,54,909,696),24038=>array(55,-14,925,819),24039=>array(59,-57,933,773),24040=>array(169,-60,932,791),24041=>array(44,-64,940,790),24042=>array(88,-54,921,806),24043=>array(69,1,949,753),24044=>array(63,-47,955,814),24045=>array(64,-59,955,847),24046=>array(47,-19,936,840),24047=>array(37,-67,936,841),24048=>array(43,-71,959,845),24049=>array(114,0,897,763),24050=>array(138,-17,934,764),24051=>array(174,-24,942,768),24052=>array(140,-12,942,746),24053=>array(59,-65,938,835),24054=>array(68,-58,945,776),24055=>array(38,-43,971,819),24056=>array(100,-50,972,781),24057=>array(33,-35,989,780),24058=>array(72,-72,941,776),24059=>array(44,-43,955,830),24060=>array(136,-67,962,796),24061=>array(63,-80,937,790),24062=>array(154,-69,846,829),24063=>array(82,-63,936,833),24064=>array(72,-68,928,759),24065=>array(91,-62,873,814),24066=>array(72,-68,928,826),24067=>array(58,-67,920,835),24068=>array(110,-65,941,829),24069=>array(61,-64,886,828),24070=>array(95,-76,948,829),24071=>array(71,-66,929,826),24072=>array(105,-63,917,830),24073=>array(110,-61,972,834),24074=>array(98,-61,942,834),24075=>array(70,-50,936,854),24076=>array(64,-65,941,845),24077=>array(70,-69,889,827),24078=>array(102,-59,949,842),24079=>array(90,-69,906,824),24080=>array(91,-79,951,809),24081=>array(51,-62,948,843),24082=>array(47,-62,928,839),24083=>array(90,-63,948,843),24084=>array(90,-72,940,832),24085=>array(118,-67,886,843),24086=>array(96,-66,943,833),24087=>array(91,-74,956,833),24088=>array(104,-72,903,842),24089=>array(76,-66,955,830),24090=>array(72,-70,892,780),24091=>array(139,-65,874,851),24092=>array(90,-70,948,811),24093=>array(104,-68,896,834),24094=>array(111,-70,941,811),24095=>array(66,-68,935,832),24096=>array(165,-67,849,831),24097=>array(110,-68,952,847),24098=>array(110,-72,955,826),24099=>array(46,-69,960,832),24100=>array(47,-66,879,833),24101=>array(115,-65,910,850),24102=>array(65,-59,913,828),24103=>array(89,-67,940,825),24104=>array(76,-72,958,827),24105=>array(110,-67,920,826),24106=>array(111,-76,959,825),24107=>array(112,-74,948,844),24108=>array(57,-67,945,786),24109=>array(50,-71,944,829),24110=>array(54,-55,925,831),24111=>array(65,-59,913,828),24112=>array(88,-65,929,808),24113=>array(90,-64,922,828),24114=>array(65,-64,937,852),24115=>array(81,-68,962,829),24116=>array(97,-68,943,842),24117=>array(80,-65,948,847),24118=>array(89,-65,933,830),24119=>array(86,-62,932,833),24120=>array(94,-67,918,835),24121=>array(80,-72,925,844),24122=>array(80,-65,952,840),24123=>array(92,-64,929,826),24124=>array(90,-65,890,798),24125=>array(94,-73,916,828),24126=>array(106,-68,941,832),24127=>array(81,-68,975,834),24128=>array(79,-70,946,831),24129=>array(111,-72,961,830),24130=>array(38,-65,979,788),24131=>array(73,-70,938,838),24132=>array(89,-64,935,829),24133=>array(85,-69,924,829),24134=>array(85,-69,948,829),24135=>array(55,-64,948,835),24136=>array(79,-71,960,827),24137=>array(88,-67,958,833),24138=>array(111,-78,962,828),24139=>array(54,-69,970,848),24140=>array(84,-72,941,828),24141=>array(106,-70,927,820),24142=>array(62,-57,950,838),24143=>array(110,-69,977,838),24144=>array(41,-76,957,836),24145=>array(35,-76,964,833),24146=>array(75,-65,969,850),24147=>array(107,-68,972,841),24148=>array(57,-65,953,826),24149=>array(57,-63,954,834),24150=>array(75,-69,957,826),24151=>array(70,-61,923,838),24152=>array(109,-70,964,830),24153=>array(89,-60,948,839),24154=>array(55,-64,942,852),24155=>array(85,-65,935,842),24156=>array(104,-70,963,821),24157=>array(104,-71,965,823),24158=>array(63,-74,937,821),24159=>array(78,-71,948,837),24160=>array(92,-70,965,827),24161=>array(68,-66,934,839),24162=>array(71,-64,931,845),24163=>array(89,-72,962,839),24164=>array(89,-70,945,839),24165=>array(61,-64,958,833),24166=>array(52,-62,959,851),24167=>array(101,-70,989,823),24168=>array(88,-50,935,853),24169=>array(113,-73,970,830),24170=>array(116,-65,981,836),24171=>array(55,-64,948,835),24172=>array(66,-68,938,826),24173=>array(89,-53,955,849),24174=>array(92,-72,946,843),24175=>array(94,-55,926,854),24176=>array(81,-65,952,840),24177=>array(55,-65,922,829),24178=>array(100,-58,900,779),24179=>array(71,-70,920,787),24180=>array(86,-68,917,841),24181=>array(59,-68,954,778),24182=>array(76,-65,929,848),24183=>array(89,-70,898,839),24184=>array(94,-67,909,833),24185=>array(60,-66,970,844),24186=>array(91,-37,914,826),24187=>array(53,-48,902,807),24188=>array(53,-65,906,826),24189=>array(115,-63,885,831),24190=>array(61,-66,958,838),24191=>array(49,-61,908,823),24192=>array(53,-72,939,847),24193=>array(35,-61,930,826),24194=>array(58,-66,950,835),24195=>array(45,-65,935,822),24196=>array(28,-64,942,822),24197=>array(24,-66,918,816),24198=>array(39,-75,941,830),24199=>array(35,-51,964,839),24200=>array(51,-68,954,846),24201=>array(50,-68,951,837),24202=>array(45,-67,964,822),24203=>array(43,-66,980,848),24204=>array(58,-64,945,840),24205=>array(44,-67,936,845),24206=>array(25,-76,936,819),24207=>array(45,-71,918,831),24208=>array(32,-68,914,835),24209=>array(26,-67,924,842),24210=>array(28,-64,942,849),24211=>array(27,-60,925,841),24212=>array(46,-59,928,834),24213=>array(43,-63,952,837),24214=>array(39,-66,943,828),24215=>array(45,-64,948,839),24216=>array(25,-64,908,819),24217=>array(39,-66,913,844),24218=>array(45,-68,963,839),24219=>array(56,-53,956,834),24220=>array(41,-68,937,831),24221=>array(24,-84,936,846),24222=>array(25,-59,928,832),24223=>array(39,-68,947,833),24224=>array(42,-67,951,834),24225=>array(25,-70,938,819),24226=>array(48,-53,954,830),24227=>array(55,-67,954,824),24228=>array(48,-55,956,831),24229=>array(29,-65,966,844),24230=>array(46,-68,950,826),24231=>array(48,-66,928,822),24232=>array(44,-67,930,833),24233=>array(25,-64,959,819),24234=>array(39,-76,958,838),24235=>array(54,-76,941,829),24236=>array(44,-58,956,838),24237=>array(37,-63,968,837),24238=>array(41,-61,932,842),24239=>array(25,-71,908,819),24240=>array(51,-77,954,824),24241=>array(41,-67,959,846),24242=>array(44,-68,954,838),24243=>array(41,-51,955,865),24244=>array(49,-64,942,841),24245=>array(38,-66,965,831),24246=>array(36,-55,945,828),24247=>array(41,-67,966,823),24248=>array(50,-61,954,844),24249=>array(26,-68,968,854),24250=>array(25,-61,930,827),24251=>array(50,-63,940,839),24252=>array(46,-69,944,855),24253=>array(49,-63,945,849),24254=>array(43,-74,967,824),24255=>array(39,-66,913,844),24256=>array(31,-62,961,839),24257=>array(45,-69,948,840),24258=>array(51,-71,942,832),24259=>array(42,-67,965,833),24260=>array(37,-54,968,857),24261=>array(40,-66,954,842),24262=>array(30,-64,961,838),24263=>array(34,-69,948,839),24264=>array(43,-73,952,839),24265=>array(44,-59,970,845),24266=>array(46,-60,949,837),24267=>array(31,-54,967,856),24268=>array(39,-73,951,835),24269=>array(38,-71,947,850),24270=>array(46,-68,968,855),24271=>array(37,-54,968,843),24272=>array(40,-67,956,831),24273=>array(42,-66,951,848),24274=>array(39,-70,966,852),24275=>array(35,-65,942,837),24276=>array(32,-50,959,862),24277=>array(37,-67,985,856),24278=>array(39,-67,958,843),24279=>array(58,-71,957,834),24280=>array(41,-72,951,840),24281=>array(57,-78,965,840),24282=>array(42,-69,949,837),24283=>array(16,-63,951,837),24284=>array(46,-70,956,841),24285=>array(44,-70,947,837),24286=>array(36,-75,974,842),24287=>array(47,-64,947,833),24288=>array(46,-71,938,827),24289=>array(34,-70,964,836),24290=>array(42,-65,965,820),24291=>array(54,-68,950,837),24292=>array(49,-63,968,857),24293=>array(31,-70,971,841),24294=>array(36,-72,953,840),24295=>array(28,-72,942,843),24296=>array(24,-72,940,832),24297=>array(30,-67,964,837),24298=>array(29,-69,920,838),24299=>array(24,-84,958,842),24300=>array(22,-62,961,846),24301=>array(44,-66,932,853),24302=>array(35,-70,956,845),24303=>array(43,-67,959,840),24304=>array(40,-75,967,832),24305=>array(37,-54,949,838),24306=>array(35,-66,947,836),24307=>array(40,-75,957,832),24308=>array(33,-62,949,743),24309=>array(44,-73,953,804),24310=>array(33,-62,949,824),24311=>array(33,-62,949,825),24312=>array(33,-62,949,825),24313=>array(49,-71,973,852),24314=>array(33,-62,949,826),24315=>array(33,-62,949,790),24316=>array(33,-62,949,790),24317=>array(43,-71,972,788),24318=>array(36,-72,930,822),24319=>array(79,-56,932,818),24320=>array(36,-57,906,780),24321=>array(47,-66,954,848),24322=>array(56,-67,953,785),24323=>array(61,-62,928,830),24324=>array(48,-65,934,785),24325=>array(48,-59,961,794),24326=>array(70,-59,944,814),24327=>array(45,-64,972,863),24328=>array(52,-67,943,839),24329=>array(61,-63,936,829),24330=>array(59,-76,955,833),24331=>array(81,-63,933,824),24332=>array(74,-62,944,834),24333=>array(78,-62,948,834),24334=>array(73,-62,944,834),24335=>array(74,-62,944,834),24336=>array(74,-62,944,834),24337=>array(37,-61,949,826),24338=>array(42,-67,962,841),24339=>array(143,-60,857,788),24340=>array(110,-66,896,778),24341=>array(138,-61,844,826),24342=>array(64,-55,930,779),24343=>array(56,-66,904,838),24344=>array(80,-63,945,819),24345=>array(77,-71,956,788),24346=>array(61,-68,954,794),24347=>array(80,-63,957,824),24348=>array(92,-66,893,788),24349=>array(65,-57,953,791),24350=>array(77,-66,977,839),24351=>array(69,-64,902,843),24352=>array(62,-66,943,803),24353=>array(80,-63,951,790),24354=>array(76,-65,981,831),24355=>array(63,-55,949,847),24356=>array(63,-68,954,838),24357=>array(70,-63,955,836),24358=>array(80,-65,961,819),24359=>array(68,-63,958,838),24360=>array(72,-68,909,786),24361=>array(63,-63,952,836),24362=>array(67,-60,920,764),24363=>array(62,-63,953,776),24364=>array(62,-63,953,776),24365=>array(76,-65,941,790),24366=>array(47,-64,956,832),24367=>array(55,-75,946,830),24368=>array(83,-65,912,824),24369=>array(56,-65,917,787),24370=>array(80,-63,911,782),24371=>array(62,-56,936,774),24372=>array(80,-63,944,828),24373=>array(68,-64,962,799),24374=>array(77,-59,971,850),24375=>array(70,-63,955,833),24376=>array(63,-66,901,787),24377=>array(56,-59,918,836),24378=>array(63,-74,940,766),24379=>array(89,-62,927,790),24380=>array(63,-63,939,787),24381=>array(89,-62,968,832),24382=>array(68,-63,952,835),24383=>array(54,-48,976,874),24384=>array(57,-68,975,838),24385=>array(70,-65,944,797),24386=>array(80,-58,890,829),24387=>array(75,-67,961,785),24388=>array(69,-63,951,788),24389=>array(62,-67,964,847),24390=>array(91,-48,944,855),24391=>array(68,-76,926,837),24392=>array(70,-69,948,798),24393=>array(68,-67,962,831),24394=>array(66,-63,946,806),24395=>array(73,-82,969,780),24396=>array(49,-65,951,790),24397=>array(81,-74,959,846),24398=>array(52,-67,955,849),24399=>array(68,-70,967,786),24400=>array(167,-4,786,670),24401=>array(62,-37,941,804),24402=>array(27,-62,861,832),24403=>array(123,-60,878,830),24404=>array(67,-57,941,848),24405=>array(71,-61,965,789),24406=>array(59,-58,964,834),24407=>array(50,-75,951,834),24408=>array(53,-68,958,841),24409=>array(30,-72,965,841),24410=>array(30,-52,965,810),24411=>array(40,-61,956,825),24412=>array(40,-61,962,848),24413=>array(54,-71,956,851),24414=>array(40,-61,956,818),24415=>array(52,-57,978,840),24416=>array(68,-60,978,841),24417=>array(294,-59,800,804),24418=>array(59,-67,955,828),24419=>array(37,-66,949,821),24420=>array(53,-68,951,838),24421=>array(44,-67,926,852),24422=>array(33,-67,921,831),24423=>array(57,-61,956,832),24424=>array(52,-40,964,781),24425=>array(43,-62,958,828),24426=>array(20,-69,956,832),24427=>array(41,-65,963,844),24428=>array(47,-64,952,830),24429=>array(62,-65,957,828),24430=>array(51,-62,949,850),24431=>array(55,-74,961,823),24432=>array(47,-74,955,832),24433=>array(47,-68,961,829),24434=>array(36,-68,961,829),24435=>array(178,-67,756,826),24436=>array(58,-69,920,830),24437=>array(58,-66,945,830),24438=>array(49,-65,968,842),24439=>array(41,-73,942,840),24440=>array(52,-64,959,840),24441=>array(38,-70,963,833),24442=>array(58,-66,936,830),24443=>array(40,-66,911,820),24444=>array(51,-73,961,838),24445=>array(46,-70,962,836),24446=>array(41,-68,957,837),24447=>array(34,-66,915,838),24448=>array(47,-61,937,836),24449=>array(33,-70,954,836),24450=>array(44,-65,952,841),24451=>array(56,-65,952,841),24452=>array(45,-66,968,832),24453=>array(37,-67,947,841),24454=>array(57,-70,942,834),24455=>array(54,-64,923,842),24456=>array(37,-70,950,834),24457=>array(39,-68,948,843),24458=>array(61,-65,914,833),24459=>array(36,-67,954,830),24460=>array(42,-67,953,841),24461=>array(44,-65,931,842),24462=>array(44,-65,938,841),24463=>array(44,-65,945,841),24464=>array(35,-70,963,836),24465=>array(50,-74,956,838),24466=>array(48,-73,961,838),24467=>array(48,-73,961,838),24468=>array(56,-68,955,835),24469=>array(39,-63,941,834),24470=>array(49,-70,957,838),24471=>array(50,-70,947,833),24472=>array(36,-68,955,836),24473=>array(40,-64,970,833),24474=>array(59,-68,964,835),24475=>array(53,-68,956,834),24476=>array(44,-68,933,835),24477=>array(56,-68,930,835),24478=>array(49,-71,966,838),24479=>array(55,-73,900,835),24480=>array(39,-65,972,837),24481=>array(37,-62,917,835),24482=>array(44,-75,963,835),24483=>array(44,-68,953,835),24484=>array(44,-71,964,835),24485=>array(42,-68,963,827),24486=>array(40,-73,967,821),24487=>array(35,-65,910,833),24488=>array(46,-67,953,848),24489=>array(44,-67,970,843),24490=>array(40,-67,941,840),24491=>array(49,-62,954,837),24492=>array(46,-65,953,850),24493=>array(45,-67,956,852),24494=>array(35,-76,964,833),24495=>array(46,-64,973,837),24496=>array(44,-68,945,835),24497=>array(47,-68,954,835),24498=>array(41,-72,962,820),24499=>array(35,-70,958,838),24500=>array(31,-71,973,834),24501=>array(31,-71,973,834),24502=>array(48,-70,973,832),24503=>array(35,-70,960,838),24504=>array(26,-68,957,850),24505=>array(47,-70,951,830),24506=>array(56,-74,947,837),24507=>array(53,-68,972,845),24508=>array(31,-70,966,848),24509=>array(31,-67,961,836),24510=>array(39,-72,974,830),24511=>array(18,-62,965,842),24512=>array(28,-70,976,844),24513=>array(40,-70,967,834),24514=>array(43,-66,957,840),24515=>array(41,-17,958,801),24516=>array(300,-62,695,829),24517=>array(52,-8,960,796),24518=>array(41,-73,935,819),24519=>array(63,-66,874,833),24520=>array(46,-20,954,772),24521=>array(63,-69,903,830),24522=>array(51,-63,933,830),24523=>array(63,-63,957,830),24524=>array(47,-29,946,785),24525=>array(39,-31,961,773),24526=>array(46,-20,954,831),24527=>array(55,-59,950,839),24528=>array(45,-23,963,832),24529=>array(50,-21,968,774),24530=>array(43,-60,962,830),24531=>array(46,-67,963,832),24532=>array(42,-64,948,834),24533=>array(52,-73,958,825),24534=>array(46,-67,954,832),24535=>array(46,-20,954,826),24536=>array(49,-19,951,832),24537=>array(49,-64,935,830),24538=>array(37,-64,945,830),24539=>array(69,-76,948,820),24540=>array(46,-59,961,837),24541=>array(42,-64,956,841),24542=>array(59,-42,945,829),24543=>array(50,-60,977,851),24544=>array(56,-14,976,841),24545=>array(56,-67,912,830),24546=>array(45,-22,967,783),24547=>array(40,-67,971,833),24548=>array(43,-65,956,834),24549=>array(41,-65,962,849),24550=>array(48,-75,982,850),24551=>array(48,-74,928,821),24552=>array(36,-68,949,833),24553=>array(60,-25,978,806),24554=>array(53,-67,962,829),24555=>array(50,-73,964,837),24556=>array(30,-57,941,852),24557=>array(51,-68,964,849),24558=>array(46,-69,979,829),24559=>array(46,-65,958,839),24560=>array(37,-63,954,844),24561=>array(36,-65,956,838),24562=>array(23,-66,944,854),24563=>array(35,-64,953,835),24564=>array(48,-65,975,840),24565=>array(30,-58,963,846),24566=>array(46,-69,958,832),24567=>array(44,-71,907,835),24568=>array(30,-67,953,830),24569=>array(46,-67,948,832),24570=>array(47,-75,963,836),24571=>array(43,-68,945,829),24572=>array(46,-67,957,843),24573=>array(63,-32,953,845),24574=>array(38,-60,954,829),24575=>array(41,-21,951,810),24576=>array(55,-67,959,830),24577=>array(36,-44,937,807),24578=>array(41,-20,943,831),24579=>array(35,-72,929,824),24580=>array(46,-63,924,828),24581=>array(40,-71,942,821),24582=>array(44,-67,936,827),24583=>array(56,-67,946,824),24584=>array(43,-67,954,830),24585=>array(41,-60,947,839),24586=>array(52,-67,900,836),24587=>array(47,-70,954,830),24588=>array(45,-70,951,824),24589=>array(61,-71,971,833),24590=>array(59,-29,954,846),24591=>array(35,-69,968,832),24592=>array(52,-66,908,839),24593=>array(44,-70,937,835),24594=>array(49,-25,959,830),24595=>array(45,-71,959,826),24596=>array(44,-57,953,843),24597=>array(61,-64,922,855),24598=>array(22,-58,929,850),24599=>array(47,-69,957,825),24600=>array(29,-25,970,854),24601=>array(47,-67,950,832),24602=>array(37,-51,951,840),24603=>array(47,-68,953,829),24604=>array(39,-68,962,840),24605=>array(54,-23,935,780),24606=>array(47,-71,899,836),24607=>array(47,-67,953,836),24608=>array(50,-22,968,848),24609=>array(48,-66,947,832),24610=>array(50,-68,967,829),24611=>array(63,-24,965,805),24612=>array(63,-26,965,826),24613=>array(43,-24,947,842),24614=>array(41,-69,956,830),24615=>array(54,-68,951,827),24616=>array(53,-19,964,849),24617=>array(32,-68,955,830),24618=>array(45,-58,976,843),24619=>array(44,-68,933,832),24620=>array(59,-58,903,829),24621=>array(38,-66,957,830),24622=>array(50,-73,915,831),24623=>array(38,-65,951,835),24624=>array(45,-65,961,844),24625=>array(40,-57,969,822),24626=>array(38,-66,948,833),24627=>array(43,-54,969,845),24628=>array(38,-74,942,832),24629=>array(49,-67,959,830),24630=>array(32,-71,978,832),24631=>array(64,-32,957,823),24632=>array(64,-31,957,823),24633=>array(39,-28,954,841),24634=>array(35,-63,964,844),24635=>array(63,-22,938,829),24636=>array(45,-26,934,823),24637=>array(44,-61,971,843),24638=>array(23,-57,933,843),24639=>array(33,-63,946,825),24640=>array(45,-63,941,852),24641=>array(37,-25,945,843),24642=>array(57,-69,914,837),24643=>array(37,-68,947,832),24644=>array(57,-70,922,826),24645=>array(55,-68,941,826),24646=>array(49,-70,955,821),24647=>array(29,-57,963,835),24648=>array(23,-62,929,849),24649=>array(51,-48,938,847),24650=>array(27,-65,924,834),24651=>array(54,-32,945,831),24652=>array(58,-71,954,832),24653=>array(49,-69,963,836),24654=>array(23,-57,950,843),24655=>array(48,-27,949,843),24656=>array(49,-27,947,777),24657=>array(23,-71,956,845),24658=>array(35,-59,955,849),24659=>array(34,-62,938,834),24660=>array(42,-53,957,859),24661=>array(57,-17,967,844),24662=>array(42,-41,960,846),24663=>array(23,-58,966,843),24664=>array(69,-69,967,833),24665=>array(49,-49,954,849),24666=>array(44,-52,954,836),24667=>array(54,-68,893,829),24668=>array(23,-59,964,843),24669=>array(47,-48,950,805),24670=>array(60,-74,948,828),24671=>array(43,-55,924,848),24672=>array(45,-84,963,834),24673=>array(52,-70,937,821),24674=>array(36,-62,959,832),24675=>array(41,-22,946,842),24676=>array(31,-65,964,836),24677=>array(38,-65,970,814),24678=>array(59,-71,894,826),24679=>array(45,-45,982,759),24680=>array(45,-70,957,825),24681=>array(46,-40,965,796),24682=>array(38,-66,966,839),24683=>array(52,-57,923,841),24684=>array(28,-67,944,830),24685=>array(43,-62,968,836),24686=>array(56,-66,958,828),24687=>array(43,-25,949,843),24688=>array(54,-65,982,847),24689=>array(41,-65,961,837),24690=>array(60,-70,956,829),24691=>array(37,-42,924,768),24692=>array(53,-28,946,863),24693=>array(47,-28,942,846),24694=>array(46,-16,935,783),24695=>array(51,-35,942,805),24696=>array(35,-68,892,825),24697=>array(23,-75,941,823),24698=>array(50,-62,928,826),24699=>array(39,-63,878,827),24700=>array(39,-64,937,832),24701=>array(38,-66,915,823),24702=>array(38,-55,933,832),24703=>array(59,-22,976,798),24704=>array(53,-67,900,829),24705=>array(55,-64,900,830),24706=>array(26,-67,927,828),24707=>array(37,-67,907,827),24708=>array(55,-61,934,846),24709=>array(45,-66,968,842),24710=>array(44,-35,967,838),24711=>array(42,-62,968,834),24712=>array(45,-66,949,835),24713=>array(33,-31,959,832),24714=>array(51,-38,958,822),24715=>array(46,-72,954,825),24716=>array(42,-66,937,848),24717=>array(49,-63,955,844),24718=>array(57,-62,939,834),24719=>array(57,-73,964,835),24720=>array(56,-39,962,829),24721=>array(45,-68,941,833),24722=>array(46,-67,958,830),24723=>array(44,-61,944,833),24724=>array(31,-62,955,848),24725=>array(46,-67,951,847),24726=>array(31,-66,949,834),24727=>array(43,-63,960,852),24728=>array(42,-41,960,802),24729=>array(43,-67,951,852),24730=>array(43,-66,971,835),24731=>array(11,-69,953,849),24732=>array(48,-64,960,830),24733=>array(47,-68,961,826),24734=>array(41,-55,968,837),24735=>array(43,-67,945,821),24736=>array(29,-35,957,839),24737=>array(39,-43,953,830),24738=>array(40,-68,960,833),24739=>array(52,-58,958,832),24740=>array(39,-58,958,866),24741=>array(52,-58,958,869),24742=>array(22,-66,960,844),24743=>array(22,-66,918,842),24744=>array(49,-23,963,842),24745=>array(40,-64,900,831),24746=>array(62,-25,962,783),24747=>array(52,-32,939,824),24748=>array(37,-16,933,791),24749=>array(32,-62,945,827),24750=>array(45,-74,947,815),24751=>array(29,-61,885,832),24752=>array(52,-67,972,832),24753=>array(39,-72,948,833),24754=>array(43,-38,953,831),24755=>array(40,-47,945,839),24756=>array(37,-62,952,844),24757=>array(48,-67,976,830),24758=>array(127,-62,886,792),24759=>array(50,-67,960,838),24760=>array(30,-67,974,840),24761=>array(62,-36,957,834),24762=>array(62,-67,924,839),24763=>array(46,-65,960,837),24764=>array(21,-62,944,846),24765=>array(36,-78,948,826),24766=>array(34,-57,953,851),24767=>array(46,-63,979,832),24768=>array(45,-64,974,837),24769=>array(37,-28,970,830),24770=>array(52,-67,912,849),24771=>array(51,-74,949,824),24772=>array(38,-28,955,831),24773=>array(19,-66,939,837),24774=>array(31,-68,891,826),24775=>array(43,-67,971,833),24776=>array(52,-70,968,826),24777=>array(48,-26,965,829),24778=>array(27,-60,974,842),24779=>array(29,-61,959,855),24780=>array(52,-31,955,838),24781=>array(43,-74,965,830),24782=>array(41,-27,964,842),24783=>array(34,-64,988,833),24784=>array(32,-66,918,837),24785=>array(50,-20,958,844),24786=>array(42,-41,960,842),24787=>array(31,-72,989,834),24788=>array(52,-68,964,841),24789=>array(49,-58,914,846),24790=>array(26,-38,971,823),24791=>array(50,-51,972,853),24792=>array(43,-67,911,828),24793=>array(38,-52,962,838),24794=>array(41,-65,965,844),24795=>array(40,-53,956,850),24796=>array(47,-73,956,837),24797=>array(45,-71,914,824),24798=>array(47,-72,961,833),24799=>array(23,-61,946,849),24800=>array(56,-28,953,846),24801=>array(62,-25,962,783),24802=>array(39,-31,977,831),24803=>array(53,-43,940,844),24804=>array(44,-69,957,835),24805=>array(35,-32,983,834),24806=>array(47,-62,958,851),24807=>array(46,-68,964,831),24808=>array(35,-75,982,835),24809=>array(23,-32,932,832),24810=>array(37,-23,955,839),24811=>array(37,-47,962,834),24812=>array(40,-65,929,821),24813=>array(20,-53,910,835),24814=>array(31,-60,954,840),24815=>array(23,-64,925,832),24816=>array(44,-66,953,841),24817=>array(43,-65,929,847),24818=>array(46,-68,962,828),24819=>array(43,-47,956,825),24820=>array(45,-67,956,832),24821=>array(43,-71,952,830),24822=>array(49,-57,956,856),24823=>array(41,-51,968,836),24824=>array(49,-70,959,840),24825=>array(46,-37,962,828),24826=>array(39,-58,958,847),24827=>array(60,-64,921,831),24828=>array(53,-70,925,830),24829=>array(40,-54,963,836),24830=>array(47,-68,969,830),24831=>array(59,-69,981,824),24832=>array(29,-71,977,830),24833=>array(28,-51,960,829),24834=>array(28,-51,955,832),24835=>array(52,-61,956,833),24836=>array(51,-88,969,823),24837=>array(58,-70,953,827),24838=>array(44,-29,957,840),24839=>array(47,-70,944,837),24840=>array(29,-62,965,854),24841=>array(30,-73,981,846),24842=>array(30,-57,935,841),24843=>array(49,-73,972,836),24844=>array(47,-68,972,841),24845=>array(65,-49,963,818),24846=>array(34,-69,980,841),24847=>array(43,-48,959,840),24848=>array(40,-72,947,819),24849=>array(55,-58,914,836),24850=>array(46,-53,916,837),24851=>array(30,-56,952,837),24852=>array(55,-73,954,828),24853=>array(40,-67,963,829),24854=>array(38,-58,952,837),24855=>array(30,-45,954,830),24856=>array(47,-70,974,833),24857=>array(28,-54,990,868),24858=>array(38,-45,954,793),24859=>array(72,-65,948,834),24860=>array(38,-68,958,829),24861=>array(49,-62,945,830),24862=>array(51,-72,957,827),24863=>array(47,-29,951,829),24864=>array(31,-74,948,823),24865=>array(19,-74,961,850),24866=>array(37,-74,961,823),24867=>array(48,-68,950,829),24868=>array(27,-64,930,829),24869=>array(48,-68,988,836),24870=>array(53,-70,937,821),24871=>array(28,-61,952,845),24872=>array(52,-49,960,838),24873=>array(55,-77,958,833),24874=>array(48,-68,941,829),24875=>array(38,-67,980,833),24876=>array(43,-60,961,830),24877=>array(57,-74,936,832),24878=>array(60,-71,955,834),24879=>array(56,-72,968,833),24880=>array(57,-74,941,829),24881=>array(45,-74,963,846),24882=>array(58,-67,914,833),24883=>array(28,-23,955,789),24884=>array(30,-67,982,852),24885=>array(52,-70,917,821),24886=>array(60,-58,932,849),24887=>array(37,-68,951,835),24888=>array(44,-33,957,835),24889=>array(52,-76,962,841),24890=>array(49,-68,950,834),24891=>array(62,-40,970,831),24892=>array(49,-66,927,834),24893=>array(40,-66,951,834),24894=>array(32,-63,974,851),24895=>array(43,-52,963,812),24896=>array(47,-71,974,831),24897=>array(62,-38,967,780),24898=>array(42,-50,957,816),24899=>array(44,-72,955,851),24900=>array(38,-59,976,835),24901=>array(55,-75,971,829),24902=>array(50,-54,926,853),24903=>array(40,-42,974,845),24904=>array(38,-48,951,837),24905=>array(50,-72,951,841),24906=>array(35,-72,975,849),24907=>array(50,-48,954,848),24908=>array(41,-68,962,836),24909=>array(48,-72,965,826),24910=>array(41,-69,951,843),24911=>array(60,-78,952,835),24912=>array(47,-51,963,831),24913=>array(48,-65,952,830),24914=>array(46,-72,953,824),24915=>array(39,-68,984,829),24916=>array(48,-71,973,832),24917=>array(51,-63,964,833),24918=>array(53,-74,919,822),24919=>array(15,-43,954,829),24920=>array(29,-76,967,847),24921=>array(38,-58,953,837),24922=>array(37,-63,965,846),24923=>array(38,-68,952,829),24924=>array(47,-44,964,853),24925=>array(41,-58,963,824),24926=>array(20,-58,953,854),24927=>array(52,-74,934,830),24928=>array(36,-76,960,838),24929=>array(40,-73,960,829),24930=>array(38,-69,970,825),24931=>array(40,-68,967,843),24932=>array(52,-49,968,818),24933=>array(39,-66,945,838),24934=>array(39,-36,981,828),24935=>array(49,-52,951,835),24936=>array(28,-70,963,842),24937=>array(40,-67,971,834),24938=>array(40,-68,959,828),24939=>array(42,-50,958,845),24940=>array(47,-64,953,829),24941=>array(44,-33,970,835),24942=>array(45,-77,957,841),24943=>array(40,-68,963,845),24944=>array(55,-21,959,838),24945=>array(39,-65,952,828),24946=>array(48,-65,956,827),24947=>array(37,-68,954,829),24948=>array(54,-66,915,826),24949=>array(37,-65,959,842),24950=>array(50,-67,951,838),24951=>array(39,-57,955,846),24952=>array(57,-31,959,849),24953=>array(57,-31,959,834),24954=>array(32,-75,952,830),24955=>array(41,-76,981,845),24956=>array(36,-29,965,844),24957=>array(35,-63,963,842),24958=>array(38,-25,973,841),24959=>array(70,-32,957,800),24960=>array(51,-70,979,824),24961=>array(45,-65,964,834),24962=>array(55,-60,966,816),24963=>array(38,-39,982,847),24964=>array(37,-45,958,837),24965=>array(58,-51,979,859),24966=>array(33,-69,945,835),24967=>array(47,-29,961,817),24968=>array(45,-72,962,829),24969=>array(42,-73,971,828),24970=>array(42,-70,957,834),24971=>array(48,-28,965,843),24972=>array(39,-36,963,833),24973=>array(28,-60,975,848),24974=>array(38,-73,905,835),24975=>array(46,-61,972,854),24976=>array(36,-76,962,832),24977=>array(42,-58,960,800),24978=>array(36,-70,966,833),24979=>array(43,-61,971,835),24980=>array(25,-67,963,846),24981=>array(43,-61,963,837),24982=>array(25,-60,970,835),24983=>array(29,-60,952,841),24984=>array(52,-70,956,837),24985=>array(37,-47,961,844),24986=>array(42,-63,965,832),24987=>array(42,-72,961,824),24988=>array(45,-62,965,833),24989=>array(53,-52,976,834),24990=>array(23,-75,954,837),24991=>array(32,-68,967,823),24992=>array(31,-47,961,818),24993=>array(48,-70,979,836),24994=>array(17,-87,964,830),24995=>array(29,-70,962,829),24996=>array(36,-72,956,836),24997=>array(40,-47,961,832),24998=>array(52,-70,946,833),24999=>array(38,-68,950,831),25000=>array(50,-33,959,837),25001=>array(43,-29,958,845),25002=>array(36,-68,908,825),25003=>array(51,-55,902,846),25004=>array(46,-68,963,828),25005=>array(34,-58,971,845),25006=>array(38,-71,974,832),25007=>array(45,-59,961,832),25008=>array(44,-62,944,826),25009=>array(47,-71,972,838),25010=>array(42,-38,976,839),25011=>array(36,-70,954,825),25012=>array(35,-65,973,828),25013=>array(49,-39,948,821),25014=>array(32,-68,965,840),25015=>array(38,-66,960,824),25016=>array(32,-66,976,857),25017=>array(41,-65,984,838),25018=>array(43,-67,957,842),25019=>array(43,-67,957,847),25020=>array(45,-32,957,835),25021=>array(48,-56,968,847),25022=>array(38,-71,970,832),25023=>array(33,-78,968,841),25024=>array(37,-72,973,864),25025=>array(37,-79,974,819),25026=>array(46,-58,967,845),25027=>array(38,-66,959,832),25028=>array(29,-69,952,841),25029=>array(31,-85,978,829),25030=>array(42,-62,976,830),25031=>array(48,-26,955,844),25032=>array(29,-63,950,845),25033=>array(39,-68,953,843),25034=>array(18,-68,949,860),25035=>array(42,-58,959,832),25036=>array(44,-63,964,831),25037=>array(38,-68,971,844),25038=>array(53,-68,950,833),25039=>array(49,-70,932,848),25040=>array(40,-71,965,839),25041=>array(53,-26,941,821),25042=>array(30,-63,943,838),25043=>array(48,-69,975,843),25044=>array(33,-70,947,847),25045=>array(36,-59,959,821),25046=>array(51,-41,944,827),25047=>array(25,-69,956,833),25048=>array(53,-52,953,811),25049=>array(60,-71,942,821),25050=>array(33,-71,953,830),25051=>array(37,-71,953,826),25052=>array(37,-71,963,825),25053=>array(49,-71,974,830),25054=>array(41,-59,971,836),25055=>array(46,-44,966,823),25056=>array(38,-70,964,836),25057=>array(38,-69,962,846),25058=>array(43,-73,964,821),25059=>array(46,-62,966,834),25060=>array(38,-69,957,830),25061=>array(44,-70,976,829),25062=>array(48,-59,964,843),25063=>array(44,-68,962,839),25064=>array(36,-71,975,838),25065=>array(34,-56,967,858),25066=>array(41,-70,980,825),25067=>array(47,-73,957,844),25068=>array(29,-55,952,847),25069=>array(51,-85,939,836),25070=>array(47,-73,955,828),25071=>array(48,-41,980,826),25072=>array(47,-65,905,848),25073=>array(47,-71,960,824),25074=>array(32,-42,963,846),25075=>array(26,-56,988,836),25076=>array(27,-68,962,845),25077=>array(41,-68,954,835),25078=>array(32,-72,970,845),25079=>array(43,-69,962,841),25080=>array(46,-32,965,836),25081=>array(29,-67,984,840),25082=>array(27,-67,963,846),25083=>array(30,-80,966,830),25084=>array(29,-65,957,826),25085=>array(42,-68,953,826),25086=>array(43,-66,963,830),25087=>array(43,-55,963,834),25088=>array(42,-54,961,841),25089=>array(39,-44,967,836),25090=>array(40,-72,960,854),25091=>array(42,-78,962,829),25092=>array(34,-57,971,836),25093=>array(39,-36,957,842),25094=>array(59,-29,941,826),25095=>array(39,-36,957,846),25096=>array(90,-52,956,829),25097=>array(73,-64,966,832),25098=>array(65,-64,951,840),25099=>array(74,-70,930,820),25100=>array(51,-57,951,836),25101=>array(64,-67,953,837),25102=>array(50,-66,952,830),25103=>array(42,-68,934,825),25104=>array(50,-72,946,831),25105=>array(61,-60,933,832),25106=>array(61,-64,955,838),25107=>array(70,-66,956,838),25108=>array(85,-58,935,840),25109=>array(44,-68,961,829),25110=>array(70,-58,956,838),25111=>array(32,-74,938,826),25112=>array(100,-69,937,829),25113=>array(102,-67,957,823),25114=>array(65,-60,962,836),25115=>array(81,-57,949,788),25116=>array(67,-67,953,838),25117=>array(63,-74,946,834),25118=>array(77,-49,935,796),25119=>array(51,-65,946,834),25120=>array(68,-69,968,839),25121=>array(33,-72,939,836),25122=>array(43,-64,954,830),25123=>array(45,-71,964,832),25124=>array(33,-65,958,828),25125=>array(52,-59,956,832),25126=>array(35,-73,947,833),25127=>array(43,-64,970,848),25128=>array(65,-65,956,829),25129=>array(52,-65,956,829),25130=>array(54,-61,959,837),25131=>array(36,-63,964,829),25132=>array(52,-61,947,815),25133=>array(42,-70,958,844),25134=>array(39,-77,962,835),25135=>array(52,-68,956,837),25136=>array(56,-73,947,832),25137=>array(41,-65,949,834),25138=>array(52,-68,958,835),25139=>array(24,-62,946,836),25140=>array(43,-63,938,834),25141=>array(50,-65,958,827),25142=>array(69,-64,882,838),25143=>array(53,-66,849,842),25144=>array(57,-64,918,764),25145=>array(45,-71,939,836),25146=>array(51,-59,963,831),25147=>array(39,-68,947,799),25148=>array(89,-72,914,783),25149=>array(57,-67,954,841),25150=>array(44,-71,941,837),25151=>array(40,-66,938,804),25152=>array(42,-70,959,841),25153=>array(43,-70,908,796),25154=>array(61,-65,906,826),25155=>array(45,-64,898,853),25156=>array(38,-68,899,843),25157=>array(38,-68,901,847),25158=>array(38,-68,983,850),25159=>array(35,-67,896,811),25160=>array(28,-68,961,802),25161=>array(28,-77,947,810),25162=>array(52,-72,962,836),25163=>array(85,-68,913,833),25164=>array(266,-62,684,829),25165=>array(64,-62,916,835),25166=>array(53,-61,943,828),25167=>array(56,-61,960,828),25168=>array(66,-71,909,829),25169=>array(53,-48,964,849),25170=>array(45,-65,955,830),25171=>array(54,-62,934,830),25172=>array(66,-67,919,829),25173=>array(43,-61,953,828),25174=>array(80,-61,957,828),25175=>array(53,-61,945,829),25176=>array(55,-69,930,826),25177=>array(61,-69,968,830),25178=>array(58,-67,918,831),25179=>array(44,-64,934,829),25180=>array(59,-65,958,830),25181=>array(39,-61,944,828),25182=>array(48,-53,951,841),25183=>array(39,-65,958,828),25184=>array(38,-56,959,837),25185=>array(48,-57,958,836),25186=>array(47,-63,950,836),25187=>array(71,-68,893,830),25188=>array(53,-68,947,832),25189=>array(53,-66,960,827),25190=>array(46,-64,947,832),25191=>array(25,-67,945,825),25192=>array(42,-61,964,826),25193=>array(42,-63,922,826),25194=>array(29,-65,882,826),25195=>array(44,-62,885,830),25196=>array(55,-65,889,831),25197=>array(39,-53,947,841),25198=>array(49,-64,963,820),25199=>array(52,-57,945,830),25200=>array(50,-66,958,832),25201=>array(41,-51,962,840),25202=>array(59,-68,973,839),25203=>array(45,-78,963,826),25204=>array(68,-66,964,832),25205=>array(42,-55,975,845),25206=>array(50,-72,962,833),25207=>array(50,-67,968,832),25208=>array(78,-58,907,839),25209=>array(45,-72,961,823),25210=>array(42,-55,963,853),25211=>array(48,-69,963,840),25212=>array(50,-69,950,829),25213=>array(50,-67,960,828),25214=>array(63,-68,950,825),25215=>array(33,-67,965,785),25216=>array(37,-74,952,824),25217=>array(50,-64,949,844),25218=>array(63,-55,948,839),25219=>array(62,-59,958,831),25220=>array(39,-63,960,829),25221=>array(31,-55,921,840),25222=>array(37,-57,974,851),25223=>array(57,-63,897,832),25224=>array(56,-66,903,829),25225=>array(53,-64,961,837),25226=>array(40,-62,941,833),25227=>array(42,-55,967,839),25228=>array(61,-58,962,838),25229=>array(42,-65,969,839),25230=>array(51,-71,954,826),25231=>array(56,-70,957,826),25232=>array(58,-66,895,835),25233=>array(47,-69,905,834),25234=>array(57,-58,941,833),25235=>array(40,-69,959,829),25236=>array(57,-52,969,839),25237=>array(56,-66,963,821),25238=>array(52,-64,947,828),25239=>array(46,-63,959,829),25240=>array(61,-68,938,834),25241=>array(48,-67,939,839),25242=>array(31,-60,935,829),25243=>array(28,-78,930,821),25244=>array(51,-77,950,835),25245=>array(55,-55,907,853),25246=>array(42,-56,958,839),25247=>array(37,-66,914,823),25248=>array(36,-54,912,832),25249=>array(36,-56,948,832),25250=>array(38,-71,950,828),25251=>array(46,-63,920,830),25252=>array(27,-66,872,828),25253=>array(49,-69,946,820),25254=>array(54,-52,950,838),25255=>array(93,-57,957,833),25256=>array(41,-65,943,827),25257=>array(50,-66,953,828),25258=>array(39,-65,941,838),25259=>array(45,-71,978,832),25260=>array(44,-70,953,839),25261=>array(44,-60,954,830),25262=>array(51,-62,952,845),25263=>array(45,-62,951,827),25264=>array(44,-69,956,833),25265=>array(50,-61,955,840),25266=>array(56,-70,953,821),25267=>array(50,-74,955,828),25268=>array(49,-67,951,828),25269=>array(43,-64,957,831),25270=>array(50,-70,965,827),25271=>array(45,-56,951,823),25272=>array(58,-67,969,831),25273=>array(61,-67,962,835),25274=>array(61,-65,942,832),25275=>array(43,-68,905,836),25276=>array(73,-66,908,828),25277=>array(62,-67,899,836),25278=>array(52,-60,960,839),25279=>array(48,-64,956,828),25280=>array(61,-64,972,832),25281=>array(61,-64,928,832),25282=>array(53,-69,931,816),25283=>array(57,-62,944,841),25284=>array(48,-68,951,836),25285=>array(44,-60,953,836),25286=>array(53,-62,935,838),25287=>array(37,-68,953,825),25288=>array(50,-67,947,829),25289=>array(49,-64,947,829),25290=>array(52,-62,959,841),25291=>array(44,-73,948,825),25292=>array(48,-64,942,828),25293=>array(73,-64,904,851),25294=>array(42,-68,970,851),25295=>array(60,-58,974,851),25296=>array(49,-64,910,826),25297=>array(63,-67,959,826),25298=>array(39,-68,944,832),25299=>array(53,-63,936,826),25300=>array(40,-77,954,835),25301=>array(74,-64,944,831),25302=>array(43,-62,954,839),25303=>array(61,-73,920,832),25304=>array(65,-61,909,849),25305=>array(60,-63,912,832),25306=>array(52,-75,950,845),25307=>array(69,-67,913,820),25308=>array(47,-79,956,829),25309=>array(44,-66,946,835),25310=>array(70,-64,943,832),25311=>array(41,-61,937,830),25312=>array(55,-61,956,832),25313=>array(36,-66,949,832),25314=>array(31,-52,961,837),25315=>array(29,-61,932,835),25316=>array(57,-68,938,832),25317=>array(40,-72,893,824),25318=>array(38,-55,923,830),25319=>array(40,-61,918,836),25320=>array(38,-74,925,820),25321=>array(30,-64,942,826),25322=>array(61,-63,935,832),25323=>array(54,-66,967,829),25324=>array(39,-70,952,835),25325=>array(43,-70,964,827),25326=>array(45,-67,957,828),25327=>array(37,-71,964,823),25328=>array(58,-72,951,823),25329=>array(35,-69,953,826),25330=>array(36,-65,977,828),25331=>array(38,-67,965,838),25332=>array(33,-64,960,829),25333=>array(60,-68,959,830),25334=>array(46,-64,945,839),25335=>array(41,-65,952,833),25336=>array(60,-75,940,833),25337=>array(54,-71,928,826),25338=>array(55,-65,953,832),25339=>array(56,-80,958,822),25340=>array(48,-70,949,839),25341=>array(44,-64,961,836),25342=>array(45,-63,961,848),25343=>array(38,-70,969,862),25344=>array(62,-81,950,819),25345=>array(39,-64,944,834),25346=>array(36,-49,951,844),25347=>array(56,-52,951,830),25348=>array(60,-66,942,844),25349=>array(60,-62,952,832),25350=>array(78,-62,976,844),25351=>array(52,-68,937,829),25352=>array(54,-62,951,835),25353=>array(57,-67,948,832),25354=>array(41,-66,946,844),25355=>array(57,-50,953,827),25356=>array(49,-65,987,846),25357=>array(46,-51,974,859),25358=>array(48,-65,963,839),25359=>array(60,-74,911,815),25360=>array(63,-51,959,855),25361=>array(47,-75,950,825),25362=>array(60,-78,927,823),25363=>array(44,-64,959,834),25364=>array(52,-64,964,829),25365=>array(66,-70,957,817),25366=>array(38,-65,943,846),25367=>array(60,-62,963,844),25368=>array(49,-67,950,835),25369=>array(19,-68,951,835),25370=>array(54,-68,942,824),25371=>array(42,-60,920,845),25372=>array(60,-50,954,844),25373=>array(25,-62,945,831),25374=>array(34,-60,942,830),25375=>array(26,-64,948,832),25376=>array(42,-64,930,825),25377=>array(35,-62,883,826),25378=>array(36,-64,948,826),25379=>array(36,-66,923,832),25380=>array(37,-61,938,834),25381=>array(33,-59,911,832),25382=>array(61,-61,936,832),25383=>array(60,-53,909,844),25384=>array(42,-69,965,834),25385=>array(46,-66,956,829),25386=>array(47,-73,950,822),25387=>array(51,-71,948,829),25388=>array(56,-59,953,835),25389=>array(53,-60,969,836),25390=>array(60,-67,926,844),25391=>array(45,-74,963,821),25392=>array(60,-49,950,838),25393=>array(60,-60,969,832),25394=>array(56,-63,952,839),25395=>array(53,-66,949,827),25396=>array(40,-64,947,828),25397=>array(38,-51,951,841),25398=>array(36,-56,916,841),25399=>array(39,-68,950,836),25400=>array(56,-72,947,829),25401=>array(36,-68,956,823),25402=>array(44,-66,964,824),25403=>array(52,-73,956,826),25404=>array(41,-56,944,858),25405=>array(44,-69,965,840),25406=>array(47,-70,964,835),25407=>array(60,-52,939,844),25408=>array(60,-64,969,831),25409=>array(50,-68,932,828),25410=>array(43,-72,952,823),25411=>array(51,-65,966,833),25412=>array(59,-65,952,832),25413=>array(62,-70,915,825),25414=>array(53,-69,915,826),25415=>array(56,-69,958,829),25416=>array(43,-59,965,832),25417=>array(35,-72,953,821),25418=>array(53,-63,953,832),25419=>array(48,-67,952,826),25420=>array(45,-71,909,825),25421=>array(38,-68,951,826),25422=>array(52,-65,919,835),25423=>array(56,-67,956,828),25424=>array(55,-67,903,823),25425=>array(56,-73,958,831),25426=>array(67,-65,955,835),25427=>array(64,-67,958,829),25428=>array(76,-65,912,829),25429=>array(39,-69,950,832),25430=>array(46,-69,950,834),25431=>array(58,-64,966,827),25432=>array(65,-65,979,836),25433=>array(59,-65,954,829),25434=>array(67,-63,956,829),25435=>array(67,-63,915,829),25436=>array(44,-78,963,829),25437=>array(67,-61,968,829),25438=>array(44,-63,914,832),25439=>array(32,-64,937,827),25440=>array(50,-64,931,829),25441=>array(31,-63,931,830),25442=>array(25,-73,948,825),25443=>array(49,-62,900,836),25444=>array(66,-67,951,824),25445=>array(58,-70,961,852),25446=>array(73,-52,966,835),25447=>array(36,-74,967,834),25448=>array(43,-68,969,845),25449=>array(27,-66,959,826),25450=>array(67,-65,960,833),25451=>array(54,-63,904,832),25452=>array(37,-60,949,849),25453=>array(37,-65,947,846),25454=>array(37,-54,943,838),25455=>array(56,-64,914,830),25456=>array(50,-64,974,832),25457=>array(50,-71,967,842),25458=>array(36,-56,967,835),25459=>array(53,-58,951,833),25460=>array(67,-61,962,829),25461=>array(41,-54,950,843),25462=>array(30,-71,933,833),25463=>array(40,-75,963,833),25464=>array(54,-69,959,824),25465=>array(67,-72,957,829),25466=>array(23,-61,963,847),25467=>array(27,-64,961,853),25468=>array(53,-59,967,840),25469=>array(51,-51,953,854),25470=>array(67,-64,939,845),25471=>array(67,-63,938,835),25472=>array(45,-72,961,833),25473=>array(53,-71,968,832),25474=>array(56,-74,938,840),25475=>array(44,-65,922,829),25476=>array(38,-65,974,853),25477=>array(46,-65,959,836),25478=>array(67,-65,906,829),25479=>array(41,-67,975,827),25480=>array(52,-69,964,832),25481=>array(46,-71,944,825),25482=>array(48,-65,959,845),25483=>array(67,-69,966,839),25484=>array(79,-61,932,835),25485=>array(51,-69,960,827),25486=>array(45,-63,966,842),25487=>array(62,-69,921,841),25488=>array(61,-65,908,842),25489=>array(50,-73,953,835),25490=>array(41,-69,951,831),25491=>array(41,-71,958,832),25492=>array(73,-69,951,788),25493=>array(40,-72,971,820),25494=>array(40,-74,963,820),25495=>array(38,-65,965,842),25496=>array(49,-76,911,829),25497=>array(40,-66,952,828),25498=>array(40,-69,942,820),25499=>array(38,-65,968,829),25500=>array(48,-70,957,832),25501=>array(53,-70,951,827),25502=>array(45,-52,971,852),25503=>array(34,-60,966,837),25504=>array(41,-71,955,826),25505=>array(39,-58,975,848),25506=>array(39,-69,966,824),25507=>array(45,-71,942,827),25508=>array(49,-69,898,829),25509=>array(43,-71,950,828),25510=>array(40,-69,911,820),25511=>array(36,-65,945,828),25512=>array(52,-68,955,836),25513=>array(41,-68,966,839),25514=>array(49,-72,948,824),25515=>array(41,-51,968,841),25516=>array(50,-62,914,844),25517=>array(46,-59,988,832),25518=>array(55,-68,951,836),25519=>array(38,-67,951,832),25520=>array(54,-52,954,826),25521=>array(83,-67,944,831),25522=>array(73,-71,924,818),25523=>array(31,-65,909,832),25524=>array(37,-60,904,830),25525=>array(40,-72,977,828),25526=>array(40,-71,956,856),25527=>array(22,-70,923,824),25528=>array(41,-63,917,837),25529=>array(65,-59,954,825),25530=>array(54,-62,942,835),25531=>array(28,-65,973,826),25532=>array(30,-64,921,829),25533=>array(42,-60,947,854),25534=>array(49,-63,975,839),25535=>array(40,-72,948,836),25536=>array(37,-65,965,835),25537=>array(59,-74,962,821),25538=>array(61,-68,955,839),25539=>array(43,-68,950,837),25540=>array(39,-64,973,831),25541=>array(40,-69,941,785),25542=>array(46,-67,954,835),25543=>array(50,-67,947,829),25544=>array(53,-72,899,823),25545=>array(46,-69,964,826),25546=>array(55,-70,952,828),25547=>array(50,-74,972,828),25548=>array(57,-70,971,821),25549=>array(36,-66,968,845),25550=>array(47,-59,965,851),25551=>array(53,-69,955,828),25552=>array(48,-72,969,826),25553=>array(55,-72,954,820),25554=>array(48,-71,940,836),25555=>array(57,-68,962,828),25556=>array(33,-50,972,850),25557=>array(54,-64,949,828),25558=>array(37,-67,948,829),25559=>array(51,-72,957,832),25560=>array(53,-71,951,838),25561=>array(62,-69,920,832),25562=>array(46,-77,944,820),25563=>array(40,-65,971,838),25564=>array(36,-60,975,862),25565=>array(53,-69,977,829),25566=>array(35,-72,912,831),25567=>array(57,-74,964,823),25568=>array(41,-63,953,829),25569=>array(54,-62,943,830),25570=>array(40,-72,960,849),25571=>array(37,-63,954,836),25572=>array(57,-64,901,830),25573=>array(55,-67,943,838),25574=>array(44,-67,903,831),25575=>array(43,-68,949,831),25576=>array(49,-69,941,833),25577=>array(50,-68,949,830),25578=>array(34,-66,964,829),25579=>array(66,-51,969,851),25580=>array(40,-69,960,836),25581=>array(73,-71,924,818),25582=>array(56,-68,945,825),25583=>array(56,-68,956,825),25584=>array(53,-62,954,830),25585=>array(67,-70,941,833),25586=>array(38,-53,971,843),25587=>array(53,-73,961,827),25588=>array(61,-69,969,830),25589=>array(38,-66,959,823),25590=>array(34,-64,945,829),25591=>array(48,-70,940,826),25592=>array(28,-57,971,836),25593=>array(48,-63,953,827),25594=>array(39,-76,937,819),25595=>array(35,-66,971,829),25596=>array(49,-61,974,833),25597=>array(32,-60,930,833),25598=>array(40,-72,967,820),25599=>array(35,-68,938,825),25600=>array(43,-63,939,829),25601=>array(42,-73,897,824),25602=>array(35,-53,943,837),25603=>array(95,-59,950,822),25604=>array(50,-59,960,849),25605=>array(34,-63,926,837),25606=>array(39,-68,958,836),25607=>array(45,-64,971,842),25608=>array(52,-72,962,837),25609=>array(39,-58,957,851),25610=>array(53,-62,909,836),25611=>array(53,-75,968,828),25612=>array(53,-75,968,827),25613=>array(51,-70,956,822),25614=>array(61,-68,961,828),25615=>array(50,-66,945,832),25616=>array(50,-75,950,843),25617=>array(43,-67,954,829),25618=>array(53,-57,962,853),25619=>array(27,-66,933,843),25620=>array(28,-65,950,826),25621=>array(51,-61,954,826),25622=>array(42,-64,945,845),25623=>array(66,-60,921,844),25624=>array(47,-50,955,847),25625=>array(43,-64,953,829),25626=>array(55,-64,934,838),25627=>array(49,-70,953,838),25628=>array(44,-78,963,832),25629=>array(67,-67,971,843),25630=>array(60,-67,940,842),25631=>array(48,-72,952,823),25632=>array(56,-70,915,835),25633=>array(35,-67,964,829),25634=>array(43,-65,958,833),25635=>array(44,-72,968,831),25636=>array(41,-50,954,859),25637=>array(44,-55,967,857),25638=>array(52,-64,917,828),25639=>array(56,-71,923,838),25640=>array(59,-64,918,827),25641=>array(43,-65,969,838),25642=>array(46,-70,948,843),25643=>array(50,-64,957,842),25644=>array(38,-71,976,838),25645=>array(40,-71,966,830),25646=>array(56,-70,975,826),25647=>array(43,-70,920,838),25648=>array(56,-68,916,827),25649=>array(67,-71,928,829),25650=>array(38,-66,960,844),25651=>array(47,-70,948,836),25652=>array(36,-59,981,845),25653=>array(49,-67,965,826),25654=>array(37,-66,970,849),25655=>array(58,-72,961,836),25656=>array(43,-68,973,839),25657=>array(55,-65,952,825),25658=>array(39,-77,947,839),25659=>array(38,-64,969,862),25660=>array(43,-69,970,839),25661=>array(40,-65,965,830),25662=>array(42,-61,952,837),25663=>array(52,-57,955,822),25664=>array(56,-69,945,842),25665=>array(65,-62,955,826),25666=>array(47,-58,951,835),25667=>array(35,-55,954,837),25668=>array(47,-60,960,835),25669=>array(38,-63,967,830),25670=>array(31,-63,934,834),25671=>array(28,-76,914,819),25672=>array(43,-64,932,844),25673=>array(52,-64,975,841),25674=>array(38,-66,922,830),25675=>array(45,-73,967,835),25676=>array(55,-71,942,847),25677=>array(58,-71,950,832),25678=>array(55,-70,968,826),25679=>array(52,-64,976,835),25680=>array(50,-66,974,832),25681=>array(56,-68,927,827),25682=>array(43,-69,955,830),25683=>array(51,-66,965,829),25684=>array(40,-66,958,846),25685=>array(43,-68,960,829),25686=>array(43,-63,968,841),25687=>array(33,-69,978,837),25688=>array(45,-73,948,825),25689=>array(55,-71,974,827),25690=>array(49,-59,945,833),25691=>array(44,-51,945,855),25692=>array(35,-73,955,827),25693=>array(53,-70,956,838),25694=>array(56,-68,953,826),25695=>array(41,-75,942,831),25696=>array(53,-67,964,831),25697=>array(47,-70,965,830),25698=>array(53,-70,938,836),25699=>array(43,-64,953,841),25700=>array(37,-59,946,839),25701=>array(52,-68,949,835),25702=>array(47,-76,978,832),25703=>array(41,-68,953,833),25704=>array(39,-72,954,827),25705=>array(37,-63,940,838),25706=>array(43,-66,984,843),25707=>array(51,-66,958,830),25708=>array(57,-72,961,837),25709=>array(42,-67,962,851),25710=>array(54,-70,971,839),25711=>array(56,-67,952,833),25712=>array(50,-70,974,832),25713=>array(53,-68,975,822),25714=>array(51,-67,955,828),25715=>array(37,-67,951,824),25716=>array(30,-56,948,836),25717=>array(50,-70,959,828),25718=>array(38,-63,959,839),25719=>array(52,-67,970,838),25720=>array(45,-72,971,823),25721=>array(53,-65,965,835),25722=>array(53,-64,910,830),25723=>array(34,-78,966,849),25724=>array(51,-66,956,826),25725=>array(31,-54,948,839),25726=>array(40,-64,959,828),25727=>array(55,-70,964,843),25728=>array(60,-54,946,833),25729=>array(43,-68,957,847),25730=>array(42,-67,975,829),25731=>array(73,-64,955,835),25732=>array(36,-65,923,823),25733=>array(31,-68,971,829),25734=>array(73,-66,953,831),25735=>array(46,-69,971,837),25736=>array(54,-68,942,833),25737=>array(58,-68,971,844),25738=>array(42,-69,911,825),25739=>array(39,-71,905,822),25740=>array(42,-85,953,826),25741=>array(44,-67,957,828),25742=>array(55,-64,955,828),25743=>array(38,-70,962,826),25744=>array(67,-73,954,820),25745=>array(31,-77,941,822),25746=>array(41,-69,963,832),25747=>array(55,-69,953,827),25748=>array(42,-66,955,826),25749=>array(37,-67,942,834),25750=>array(39,-77,982,831),25751=>array(40,-81,962,823),25752=>array(41,-52,962,857),25753=>array(45,-62,963,853),25754=>array(37,-60,970,849),25755=>array(41,-74,954,832),25756=>array(43,-68,983,832),25757=>array(45,-56,943,846),25758=>array(33,-71,948,829),25759=>array(51,-67,976,838),25760=>array(35,-73,972,823),25761=>array(22,-64,978,845),25762=>array(50,-63,949,828),25763=>array(41,-68,956,828),25764=>array(39,-68,961,835),25765=>array(40,-71,959,843),25766=>array(55,-70,980,833),25767=>array(34,-64,973,844),25768=>array(55,-71,969,849),25769=>array(37,-61,968,843),25770=>array(39,-64,973,855),25771=>array(46,-63,954,837),25772=>array(41,-63,958,837),25773=>array(29,-69,971,829),25774=>array(32,-65,948,832),25775=>array(55,-64,965,847),25776=>array(36,-69,955,823),25777=>array(40,-71,949,840),25778=>array(37,-69,975,835),25779=>array(40,-70,973,839),25780=>array(12,-73,975,838),25781=>array(25,-61,936,828),25782=>array(33,-68,945,831),25783=>array(40,-65,943,827),25784=>array(41,-66,915,827),25785=>array(35,-64,965,828),25786=>array(33,-62,912,846),25787=>array(40,-78,955,833),25788=>array(47,-68,960,833),25789=>array(36,-79,974,842),25790=>array(38,-68,966,829),25791=>array(34,-69,961,861),25792=>array(45,-66,964,829),25793=>array(32,-70,958,835),25794=>array(54,-69,924,823),25795=>array(27,-76,966,832),25796=>array(43,-67,954,835),25797=>array(45,-67,957,837),25798=>array(31,-64,963,833),25799=>array(49,-67,935,821),25800=>array(39,-66,972,833),25801=>array(41,-69,924,829),25802=>array(73,-65,956,835),25803=>array(52,-66,918,832),25804=>array(75,-38,967,854),25805=>array(39,-62,954,823),25806=>array(47,-73,951,845),25807=>array(33,-78,971,830),25808=>array(42,-68,958,828),25809=>array(43,-78,970,843),25810=>array(29,-68,963,842),25811=>array(39,-53,949,839),25812=>array(48,-74,950,846),25813=>array(55,-65,960,834),25814=>array(48,-71,939,829),25815=>array(49,-64,965,849),25816=>array(54,-64,949,832),25817=>array(34,-79,975,840),25818=>array(41,-70,964,831),25819=>array(40,-73,985,819),25820=>array(47,-70,984,848),25821=>array(45,-66,979,826),25822=>array(30,-64,958,832),25823=>array(53,-70,958,841),25824=>array(53,-77,953,830),25825=>array(44,-63,961,830),25826=>array(36,-65,952,830),25827=>array(57,-65,954,827),25828=>array(61,-67,962,856),25829=>array(84,-51,955,840),25830=>array(46,-70,966,826),25831=>array(55,-59,965,832),25832=>array(42,-74,967,831),25833=>array(48,-68,953,827),25834=>array(47,-69,954,837),25835=>array(39,-76,969,824),25836=>array(42,-63,956,832),25837=>array(45,-49,966,844),25838=>array(44,-58,958,843),25839=>array(34,-71,960,842),25840=>array(49,-67,952,844),25841=>array(58,-71,913,827),25842=>array(36,-75,949,832),25843=>array(33,-67,939,835),25844=>array(43,-68,960,841),25845=>array(51,-62,962,840),25846=>array(42,-64,955,841),25847=>array(41,-70,972,840),25848=>array(41,-50,970,861),25849=>array(40,-68,977,837),25850=>array(43,-69,952,818),25851=>array(31,-67,963,837),25852=>array(51,-71,961,827),25853=>array(54,-70,952,831),25854=>array(41,-64,963,829),25855=>array(63,-64,986,843),25856=>array(49,-65,960,832),25857=>array(42,-78,975,844),25858=>array(42,-77,948,823),25859=>array(42,-73,973,825),25860=>array(44,-67,965,836),25861=>array(46,-77,960,828),25862=>array(40,-70,954,835),25863=>array(39,-65,960,843),25864=>array(31,-83,974,839),25865=>array(43,-64,967,833),25866=>array(35,-72,964,827),25867=>array(27,-72,970,844),25868=>array(61,-70,923,826),25869=>array(36,-73,976,842),25870=>array(39,-69,954,827),25871=>array(40,-62,954,842),25872=>array(46,-67,982,842),25873=>array(41,-71,986,835),25874=>array(23,-71,933,827),25875=>array(27,-65,980,845),25876=>array(56,-76,912,822),25877=>array(29,-66,972,841),25878=>array(50,-71,953,835),25879=>array(46,-68,966,846),25880=>array(39,-69,970,829),25881=>array(44,-74,964,838),25882=>array(35,-68,959,828),25883=>array(38,-64,969,841),25884=>array(42,-74,944,832),25885=>array(36,-68,955,821),25886=>array(52,-64,962,831),25887=>array(32,-70,974,853),25888=>array(48,-72,954,841),25889=>array(49,-64,962,840),25890=>array(41,-65,968,831),25891=>array(48,-61,957,840),25892=>array(55,-72,951,832),25893=>array(33,-63,970,844),25894=>array(63,-66,961,824),25895=>array(29,-72,959,835),25896=>array(35,-73,973,844),25897=>array(38,-57,956,840),25898=>array(41,-62,959,839),25899=>array(36,-64,970,826),25900=>array(39,-72,956,832),25901=>array(26,-71,967,840),25902=>array(48,-65,975,839),25903=>array(78,-65,945,830),25904=>array(41,-55,968,846),25905=>array(58,-80,972,834),25906=>array(63,-73,973,830),25907=>array(41,-71,981,824),25908=>array(34,-76,942,825),25909=>array(68,-72,932,818),25910=>array(67,-70,951,830),25911=>array(71,-67,979,840),25912=>array(48,-67,949,830),25913=>array(103,-65,946,825),25914=>array(86,-75,969,821),25915=>array(64,-68,957,838),25916=>array(62,-67,967,841),25917=>array(46,-71,963,832),25918=>array(46,-65,956,842),25919=>array(38,-74,956,838),25920=>array(114,-77,970,838),25921=>array(129,-82,955,828),25922=>array(24,-61,976,834),25923=>array(87,-80,962,823),25924=>array(29,-71,970,833),25925=>array(54,-67,958,833),25926=>array(52,-68,969,835),25927=>array(28,-65,972,834),25928=>array(60,-64,956,834),25929=>array(42,-67,975,838),25930=>array(46,-62,970,835),25931=>array(37,-68,959,840),25932=>array(27,-64,947,833),25933=>array(47,-70,960,843),25934=>array(38,-69,971,837),25935=>array(57,-63,971,839),25936=>array(33,-67,971,825),25937=>array(39,-68,955,843),25938=>array(32,-67,963,834),25939=>array(38,-69,969,829),25940=>array(54,-54,973,855),25941=>array(43,-70,970,836),25942=>array(48,-74,946,830),25943=>array(63,-74,963,836),25944=>array(48,-61,967,843),25945=>array(30,-60,950,831),25946=>array(30,-70,972,839),25947=>array(23,-60,932,847),25948=>array(37,-74,971,835),25949=>array(99,-69,967,835),25950=>array(81,-70,966,836),25951=>array(46,-73,957,836),25952=>array(44,-84,965,820),25953=>array(43,-77,971,823),25954=>array(39,-61,960,826),25955=>array(65,-72,956,834),25956=>array(42,-74,968,823),25957=>array(44,-80,966,829),25958=>array(42,-67,961,839),25959=>array(45,-59,962,839),25960=>array(66,-71,969,840),25961=>array(52,-69,969,842),25962=>array(44,-76,965,821),25963=>array(35,-61,944,823),25964=>array(44,-70,969,836),25965=>array(42,-71,969,836),25966=>array(36,-74,970,837),25967=>array(99,-75,967,823),25968=>array(42,-69,959,821),25969=>array(45,-63,967,835),25970=>array(55,-71,957,838),25971=>array(47,-75,969,833),25972=>array(51,-18,946,840),25973=>array(60,-69,967,834),25974=>array(104,-76,985,828),25975=>array(41,-65,969,839),25976=>array(60,-70,959,833),25977=>array(58,-76,984,831),25978=>array(60,-71,959,832),25979=>array(36,-65,970,846),25980=>array(60,-73,973,827),25981=>array(36,-68,974,843),25982=>array(64,-77,978,849),25983=>array(44,-77,978,827),25984=>array(35,-72,970,824),25985=>array(63,-69,977,842),25986=>array(45,-66,970,859),25987=>array(51,-68,955,830),25988=>array(38,-65,972,832),25989=>array(52,-72,967,838),25990=>array(52,-69,969,839),25991=>array(62,-69,947,822),25992=>array(49,-73,951,815),25993=>array(49,-63,951,828),25994=>array(36,-72,959,843),25995=>array(47,-68,921,840),25996=>array(36,-63,963,833),25997=>array(26,-65,974,840),25998=>array(29,-64,974,828),25999=>array(47,-66,971,846),26000=>array(36,-63,964,831),26001=>array(35,-68,956,829),26002=>array(44,-71,936,829),26003=>array(43,-70,888,807),26004=>array(60,-75,983,833),26005=>array(53,-65,927,826),26006=>array(49,-42,951,835),26007=>array(62,-64,946,832),26008=>array(54,-65,950,844),26009=>array(38,-68,956,836),26010=>array(67,-65,948,829),26011=>array(27,-72,946,826),26012=>array(32,-71,945,838),26013=>array(67,-65,946,789),26014=>array(46,-73,954,827),26015=>array(42,-79,944,820),26016=>array(51,-70,954,836),26017=>array(46,-77,960,854),26018=>array(60,-76,954,823),26019=>array(33,-76,948,818),26020=>array(75,-71,902,832),26021=>array(81,-69,895,834),26022=>array(48,-69,959,824),26023=>array(77,-64,941,836),26024=>array(50,-69,941,828),26025=>array(66,-75,925,828),26026=>array(47,-70,957,816),26027=>array(37,-69,951,834),26028=>array(53,-73,945,831),26029=>array(99,-66,946,824),26030=>array(63,-70,951,824),26031=>array(49,-75,944,829),26032=>array(54,-62,944,830),26033=>array(45,-67,934,837),26034=>array(65,-65,959,828),26035=>array(47,-73,952,836),26036=>array(36,-79,957,831),26037=>array(65,-65,959,833),26038=>array(43,-68,927,821),26039=>array(106,-66,950,845),26040=>array(44,-62,960,829),26041=>array(52,-67,936,822),26042=>array(38,-63,976,842),26043=>array(42,-61,969,837),26044=>array(41,-62,966,826),26045=>array(42,-49,952,831),26046=>array(51,-73,956,844),26047=>array(54,-50,952,858),26048=>array(48,-69,962,841),26049=>array(70,-65,906,829),26050=>array(36,-68,951,850),26051=>array(34,-70,951,833),26052=>array(49,-67,967,844),26053=>array(33,-67,969,839),26054=>array(48,-61,965,854),26055=>array(64,-73,959,848),26056=>array(34,-73,961,848),26057=>array(42,-69,947,832),26058=>array(35,-60,963,839),26059=>array(39,-66,966,841),26060=>array(39,-68,954,841),26061=>array(44,-73,974,838),26062=>array(50,-74,960,843),26063=>array(35,-67,966,843),26064=>array(42,-59,968,852),26065=>array(42,-61,962,852),26066=>array(18,-65,958,846),26067=>array(44,-67,955,836),26068=>array(30,-86,964,845),26069=>array(61,-55,976,843),26070=>array(39,-68,945,837),26071=>array(37,-70,955,837),26072=>array(37,-65,957,839),26073=>array(45,-55,959,839),26074=>array(44,-68,958,839),26075=>array(37,-67,971,839),26076=>array(40,-61,955,850),26077=>array(37,-64,980,834),26078=>array(31,-67,985,828),26079=>array(33,-71,967,847),26080=>array(65,-59,944,779),26081=>array(93,-50,947,800),26082=>array(47,-55,961,784),26083=>array(110,-64,946,846),26084=>array(86,-65,972,789),26085=>array(237,-32,788,747),26086=>array(84,-13,936,769),26087=>array(140,-52,860,778),26088=>array(195,-61,883,835),26089=>array(86,-68,934,780),26090=>array(89,-53,949,843),26091=>array(89,-73,905,763),26092=>array(39,-61,899,837),26093=>array(52,-62,957,839),26094=>array(54,-65,974,844),26095=>array(54,-66,972,776),26096=>array(92,-65,927,770),26097=>array(85,-61,939,785),26098=>array(46,-66,969,789),26099=>array(111,-64,905,841),26100=>array(101,-54,951,789),26101=>array(121,-66,879,786),26102=>array(103,-62,927,829),26103=>array(87,-65,912,832),26104=>array(95,-68,914,775),26105=>array(63,-64,937,833),26106=>array(91,-7,934,781),26107=>array(35,-58,968,796),26108=>array(95,-74,943,815),26109=>array(92,-47,967,823),26110=>array(73,-64,956,836),26111=>array(111,-67,948,837),26112=>array(105,-54,903,830),26113=>array(104,-62,945,831),26114=>array(69,-61,899,791),26115=>array(48,-72,950,789),26116=>array(102,-69,956,791),26117=>array(109,-71,959,787),26118=>array(82,-50,958,796),26119=>array(51,-62,954,789),26120=>array(105,-66,934,833),26121=>array(99,-56,947,825),26122=>array(68,-68,952,786),26123=>array(49,-68,956,831),26124=>array(158,-64,856,788),26125=>array(116,-53,884,788),26126=>array(109,-65,869,787),26127=>array(86,-69,937,843),26128=>array(109,-70,960,784),26129=>array(103,-66,956,831),26130=>array(103,-63,911,839),26131=>array(75,-67,866,782),26132=>array(79,-62,930,828),26133=>array(101,-68,936,838),26134=>array(101,-46,965,807),26135=>array(77,-68,943,795),26136=>array(64,-63,933,810),26137=>array(66,-74,918,779),26138=>array(66,-53,957,835),26139=>array(97,-14,952,788),26140=>array(49,-60,936,798),26141=>array(67,-68,973,845),26142=>array(57,-62,942,786),26143=>array(96,-18,935,780),26144=>array(88,-67,953,832),26145=>array(118,-57,955,822),26146=>array(123,-69,901,824),26147=>array(100,-72,974,849),26148=>array(102,-65,948,839),26149=>array(45,-67,962,837),26150=>array(50,-68,959,774),26151=>array(100,-65,966,832),26152=>array(116,-62,955,845),26153=>array(73,-67,961,830),26154=>array(51,-65,932,805),26155=>array(115,-56,919,830),26156=>array(159,-68,937,812),26157=>array(120,-68,901,785),26158=>array(50,-72,916,778),26159=>array(68,-66,960,790),26160=>array(64,-24,942,802),26161=>array(70,-18,944,788),26162=>array(106,-66,918,830),26163=>array(120,-76,961,824),26164=>array(84,-67,892,787),26165=>array(104,-71,939,778),26166=>array(33,-62,976,802),26167=>array(57,-14,948,788),26168=>array(110,-77,964,837),26169=>array(99,-66,965,835),26170=>array(85,-69,938,776),26171=>array(50,-61,898,791),26172=>array(41,-43,964,789),26173=>array(91,-61,926,824),26174=>array(53,-17,921,784),26175=>array(95,-56,948,819),26176=>array(113,-68,965,830),26177=>array(47,-65,960,788),26178=>array(113,-65,948,839),26179=>array(54,-51,948,800),26180=>array(108,-57,959,831),26181=>array(102,-31,946,776),26182=>array(102,-22,959,836),26183=>array(104,-72,965,837),26184=>array(89,-63,944,846),26185=>array(72,-60,944,790),26186=>array(110,-12,953,774),26187=>array(74,-65,926,799),26188=>array(107,-68,907,847),26189=>array(107,-65,895,782),26190=>array(107,-69,953,828),26191=>array(61,-73,945,789),26192=>array(107,-61,943,846),26193=>array(136,-62,877,789),26194=>array(97,-54,941,799),26195=>array(90,-67,943,822),26196=>array(100,-64,928,823),26197=>array(64,-65,916,785),26198=>array(101,-72,930,758),26199=>array(80,-71,957,848),26200=>array(101,-62,953,789),26201=>array(94,-62,958,834),26202=>array(110,-70,956,827),26203=>array(102,-58,955,797),26204=>array(55,-53,908,803),26205=>array(59,-30,948,829),26206=>array(79,-69,951,837),26207=>array(30,-67,967,793),26208=>array(90,-68,951,834),26209=>array(110,-68,959,832),26210=>array(68,-62,943,842),26211=>array(102,-67,954,843),26212=>array(82,-65,940,786),26213=>array(91,-71,962,824),26214=>array(98,-59,947,837),26215=>array(97,-60,939,831),26216=>array(30,-68,935,809),26217=>array(97,-69,965,840),26218=>array(110,-74,961,833),26219=>array(106,-71,946,825),26220=>array(102,-60,951,850),26221=>array(97,-68,907,791),26222=>array(53,-70,944,845),26223=>array(58,-61,940,796),26224=>array(102,-67,954,832),26225=>array(107,-71,949,828),26226=>array(110,-68,959,833),26227=>array(58,-71,932,826),26228=>array(75,-52,938,838),26229=>array(52,-60,964,846),26230=>array(117,-64,887,785),26231=>array(50,-68,943,782),26232=>array(41,-52,968,808),26233=>array(110,-72,919,782),26234=>array(82,-69,897,829),26235=>array(105,-40,966,828),26236=>array(104,-72,965,846),26237=>array(59,-63,981,842),26238=>array(87,-62,931,842),26239=>array(87,-62,923,791),26240=>array(107,-70,955,831),26241=>array(86,-65,970,817),26242=>array(64,-71,931,827),26243=>array(58,-70,937,808),26244=>array(90,-49,947,822),26245=>array(79,-59,960,849),26246=>array(90,-67,947,830),26247=>array(106,-71,971,790),26248=>array(57,-62,950,798),26249=>array(89,-65,936,787),26250=>array(121,-80,965,782),26251=>array(106,-55,948,849),26252=>array(86,-61,940,834),26253=>array(115,-69,925,785),26254=>array(95,-63,969,835),26255=>array(115,-65,960,835),26256=>array(91,-51,946,858),26257=>array(62,-63,955,790),26258=>array(89,-21,954,792),26259=>array(36,-69,954,830),26260=>array(110,-68,952,834),26261=>array(108,-67,966,833),26262=>array(89,-67,954,834),26263=>array(98,-64,943,840),26264=>array(82,-55,937,804),26265=>array(104,-72,956,833),26266=>array(89,-64,945,831),26267=>array(107,-25,939,843),26268=>array(60,-68,944,826),26269=>array(101,-56,936,789),26270=>array(112,-50,933,849),26271=>array(109,-24,951,832),26272=>array(74,-56,927,820),26273=>array(104,-70,960,800),26274=>array(92,-70,938,831),26275=>array(46,-63,974,851),26276=>array(92,-64,979,849),26277=>array(50,-59,950,788),26278=>array(39,-62,961,796),26279=>array(97,-72,955,821),26280=>array(59,-25,953,783),26281=>array(110,-72,990,832),26282=>array(113,-70,953,823),26283=>array(83,-68,948,833),26284=>array(65,-71,953,827),26285=>array(112,-64,952,849),26286=>array(51,-65,965,837),26287=>array(100,-75,955,827),26288=>array(100,-69,975,833),26289=>array(104,-26,962,799),26290=>array(112,-68,953,834),26291=>array(83,-62,941,826),26292=>array(66,-66,956,786),26293=>array(101,-53,968,841),26294=>array(92,-71,971,828),26295=>array(115,-68,960,836),26296=>array(89,-62,966,855),26297=>array(58,-56,933,815),26298=>array(109,-74,953,777),26299=>array(115,-68,971,781),26300=>array(68,-71,960,837),26301=>array(115,-70,960,824),26302=>array(99,-77,970,835),26303=>array(89,-69,957,833),26304=>array(101,-8,948,843),26305=>array(59,-37,947,832),26306=>array(89,-68,956,827),26307=>array(70,-64,960,829),26308=>array(94,-68,945,831),26309=>array(59,-71,943,819),26310=>array(32,-60,959,798),26311=>array(53,-74,947,817),26312=>array(96,-14,941,854),26313=>array(107,-61,964,837),26314=>array(110,-77,953,827),26315=>array(114,-70,956,777),26316=>array(55,-25,949,779),26317=>array(112,-64,952,849),26318=>array(79,-62,949,788),26319=>array(51,-67,946,788),26320=>array(86,-47,918,821),26321=>array(35,-75,968,812),26322=>array(94,-59,964,850),26323=>array(31,-75,966,834),26324=>array(57,-66,978,840),26325=>array(84,-72,927,841),26326=>array(81,-62,946,841),26327=>array(95,-67,959,825),26328=>array(101,-69,941,781),26329=>array(97,-63,955,789),26330=>array(94,-61,965,836),26331=>array(89,-70,965,835),26332=>array(85,-70,946,813),26333=>array(103,-64,980,784),26334=>array(93,-66,935,799),26335=>array(55,-67,956,816),26336=>array(93,-71,966,819),26337=>array(54,-32,952,791),26338=>array(99,-61,959,820),26339=>array(91,-72,953,823),26340=>array(91,-64,926,783),26341=>array(92,-67,954,830),26342=>array(88,-64,946,841),26343=>array(116,-68,966,817),26344=>array(90,-53,957,853),26345=>array(48,-62,937,824),26346=>array(90,-64,962,796),26347=>array(49,-71,962,838),26348=>array(92,-68,961,800),26349=>array(82,-68,944,834),26350=>array(83,-64,959,799),26351=>array(98,-67,924,806),26352=>array(166,-33,842,728),26353=>array(175,-61,841,788),26354=>array(163,-68,860,831),26355=>array(71,-56,954,839),26356=>array(48,-72,962,777),26357=>array(71,-60,946,845),26358=>array(61,-71,898,845),26359=>array(62,-67,896,792),26360=>array(84,-64,938,837),26361=>array(53,-70,947,829),26362=>array(53,-70,947,829),26363=>array(43,-68,946,791),26364=>array(57,-67,959,791),26365=>array(127,-65,876,852),26366=>array(38,-65,959,825),26367=>array(56,-68,950,834),26368=>array(53,-73,935,783),26369=>array(60,-71,960,781),26370=>array(54,-68,946,808),26371=>array(33,-74,978,848),26372=>array(98,-68,980,828),26373=>array(63,-63,920,830),26374=>array(94,-64,949,845),26375=>array(23,-74,957,847),26376=>array(86,-76,788,783),26377=>array(45,-65,936,844),26378=>array(33,-65,956,790),26379=>array(65,-77,891,782),26380=>array(23,-68,963,839),26381=>array(53,-75,950,783),26382=>array(47,-57,971,854),26383=>array(41,-56,905,840),26384=>array(34,-66,908,843),26385=>array(52,-64,964,829),26386=>array(43,-64,906,832),26387=>array(39,-71,957,823),26388=>array(60,-67,905,848),26389=>array(36,-73,961,837),26390=>array(36,-64,962,834),26391=>array(49,-74,885,832),26392=>array(33,-71,985,838),26393=>array(90,-65,915,793),26394=>array(72,-69,925,838),26395=>array(73,-36,927,822),26396=>array(36,-62,949,843),26397=>array(72,-68,908,827),26398=>array(42,-60,958,837),26399=>array(60,-70,899,829),26400=>array(33,-72,973,826),26401=>array(39,-85,966,825),26402=>array(85,-39,915,791),26403=>array(41,-72,952,828),26404=>array(65,-77,893,797),26405=>array(61,-66,941,833),26406=>array(34,-61,965,836),26407=>array(54,-73,962,834),26408=>array(77,-68,939,826),26409=>array(77,-58,889,826),26410=>array(65,-67,948,838),26411=>array(55,-67,955,839),26412=>array(41,-67,955,827),26413=>array(46,-62,954,829),26414=>array(75,-65,940,829),26415=>array(34,-69,947,815),26416=>array(51,-15,960,813),26417=>array(65,-70,950,828),26418=>array(57,-63,943,830),26419=>array(56,-71,969,830),26420=>array(49,-55,961,840),26421=>array(54,-68,955,777),26422=>array(53,-68,955,787),26423=>array(54,-58,901,830),26424=>array(66,-67,912,826),26425=>array(55,-63,955,830),26426=>array(54,-73,975,827),26427=>array(58,-66,901,829),26428=>array(54,-56,958,837),26429=>array(45,-62,937,832),26430=>array(48,-62,940,830),26431=>array(37,-54,956,839),26432=>array(53,-66,926,811),26433=>array(53,-64,958,828),26434=>array(42,-64,939,824),26435=>array(39,-65,954,836),26436=>array(42,-63,947,833),26437=>array(51,-61,953,835),26438=>array(39,-58,963,830),26439=>array(33,-62,956,831),26440=>array(37,-68,971,823),26441=>array(43,-69,950,831),26442=>array(43,-67,892,827),26443=>array(61,-63,959,833),26444=>array(33,-67,961,830),26445=>array(55,-68,955,829),26446=>array(51,-70,960,831),26447=>array(64,-62,950,827),26448=>array(40,-75,951,824),26449=>array(44,-71,951,829),26450=>array(44,-71,914,823),26451=>array(32,-69,917,834),26452=>array(47,-71,930,823),26453=>array(34,-64,976,833),26454=>array(43,-72,975,827),26455=>array(40,-67,954,837),26456=>array(47,-76,924,785),26457=>array(39,-70,961,830),26458=>array(50,-59,956,838),26459=>array(49,-70,902,828),26460=>array(49,-70,948,828),26461=>array(42,-64,959,830),26462=>array(39,-58,940,830),26463=>array(71,-67,950,833),26464=>array(39,-58,942,830),26465=>array(40,-65,956,827),26466=>array(44,-23,956,822),26467=>array(51,-58,912,830),26468=>array(51,-58,956,830),26469=>array(49,-57,951,830),26470=>array(47,-66,948,835),26471=>array(46,-59,931,833),26472=>array(22,-68,902,826),26473=>array(21,-62,890,825),26474=>array(51,-58,950,831),26475=>array(47,-62,954,835),26476=>array(41,-61,969,836),26477=>array(40,-62,962,832),26478=>array(47,-62,950,839),26479=>array(41,-63,959,835),26480=>array(46,-73,943,825),26481=>array(50,-71,960,831),26482=>array(31,-64,978,787),26483=>array(44,-65,956,832),26484=>array(54,-69,966,838),26485=>array(40,-68,948,837),26486=>array(44,-58,963,837),26487=>array(44,-68,967,825),26488=>array(49,-77,964,824),26489=>array(60,-69,962,829),26490=>array(39,-61,956,832),26491=>array(39,-61,959,832),26492=>array(51,-64,943,830),26493=>array(55,-70,950,826),26494=>array(39,-62,959,833),26495=>array(31,-73,966,823),26496=>array(42,-55,973,803),26497=>array(45,-73,972,829),26498=>array(71,-71,886,819),26499=>array(50,-75,903,822),26500=>array(45,-61,919,842),26501=>array(51,-68,953,830),26502=>array(39,-61,954,833),26503=>array(37,-70,968,826),26504=>array(58,-55,973,809),26505=>array(51,-58,961,830),26506=>array(46,-61,905,842),26507=>array(51,-58,941,830),26508=>array(42,-64,955,824),26509=>array(42,-59,963,835),26510=>array(36,-69,975,828),26511=>array(47,-65,970,835),26512=>array(41,-68,942,831),26513=>array(40,-61,964,833),26514=>array(47,-62,967,833),26515=>array(32,-59,956,842),26516=>array(55,-73,970,833),26517=>array(48,-62,959,836),26518=>array(48,-70,957,833),26519=>array(30,-69,954,829),26520=>array(42,-64,908,835),26521=>array(38,-58,968,839),26522=>array(57,-68,965,843),26523=>array(33,-66,968,823),26524=>array(48,-67,960,788),26525=>array(48,-64,965,834),26526=>array(24,-69,968,822),26527=>array(54,-80,954,830),26528=>array(39,-64,954,837),26529=>array(51,-65,948,830),26530=>array(31,-68,931,822),26531=>array(32,-76,956,824),26532=>array(40,-68,954,830),26533=>array(20,-67,903,820),26534=>array(51,-66,937,830),26535=>array(19,-73,928,823),26536=>array(23,-72,950,820),26537=>array(48,-74,950,820),26538=>array(41,-63,960,831),26539=>array(15,-58,937,830),26540=>array(42,-66,955,832),26541=>array(39,-51,944,832),26542=>array(55,-70,954,829),26543=>array(52,-62,956,836),26544=>array(42,-63,954,833),26545=>array(43,-62,964,852),26546=>array(42,-55,969,856),26547=>array(38,-68,965,829),26548=>array(51,-62,917,830),26549=>array(41,-67,950,827),26550=>array(47,-66,964,827),26551=>array(51,-58,934,832),26552=>array(51,-58,925,841),26553=>array(51,-58,951,830),26554=>array(42,-69,953,828),26555=>array(37,-62,964,829),26556=>array(40,-48,965,823),26557=>array(26,-54,950,827),26558=>array(48,-72,950,829),26559=>array(7,-66,968,829),26560=>array(45,-73,957,830),26561=>array(32,-62,958,835),26562=>array(51,-77,963,816),26563=>array(39,-80,957,827),26564=>array(46,-58,943,828),26565=>array(39,-55,963,840),26566=>array(51,-58,964,830),26567=>array(51,-71,976,822),26568=>array(51,-72,958,824),26569=>array(42,-69,965,825),26570=>array(34,-66,984,833),26571=>array(50,-70,968,822),26572=>array(49,-66,895,827),26573=>array(47,-75,961,823),26574=>array(51,-63,957,830),26575=>array(45,-62,896,846),26576=>array(44,-69,956,835),26577=>array(40,-65,953,827),26578=>array(45,-61,966,830),26579=>array(51,-66,956,835),26580=>array(48,-67,947,788),26581=>array(58,-67,917,825),26582=>array(32,-66,895,829),26583=>array(33,-68,948,833),26584=>array(58,-67,942,825),26585=>array(40,-64,898,833),26586=>array(37,-66,899,835),26587=>array(39,-69,896,825),26588=>array(40,-60,946,830),26589=>array(51,-66,945,836),26590=>array(51,-66,950,839),26591=>array(37,-65,967,832),26592=>array(26,-62,922,836),26593=>array(26,-69,981,827),26594=>array(51,-58,945,830),26595=>array(36,-81,957,822),26596=>array(51,-58,961,830),26597=>array(50,-12,951,826),26598=>array(58,-68,958,826),26599=>array(51,-59,952,830),26600=>array(48,-66,959,850),26601=>array(35,-65,952,824),26602=>array(50,-79,918,820),26603=>array(44,-71,914,838),26604=>array(55,-61,932,838),26605=>array(51,-77,962,826),26606=>array(51,-65,933,832),26607=>array(51,-61,953,830),26608=>array(64,-63,945,839),26609=>array(41,-67,957,839),26610=>array(43,-63,957,830),26611=>array(34,-61,921,837),26612=>array(44,-68,959,825),26613=>array(35,-60,956,832),26614=>array(50,-66,895,827),26615=>array(33,-55,964,836),26616=>array(48,-66,956,827),26617=>array(45,-66,934,832),26618=>array(50,-68,890,827),26619=>array(50,-12,952,826),26620=>array(36,-73,949,828),26621=>array(27,-75,947,817),26622=>array(27,-75,924,817),26623=>array(40,-64,949,827),26624=>array(43,-67,955,834),26625=>array(46,-61,905,837),26626=>array(46,-64,954,831),26627=>array(43,-76,945,834),26628=>array(60,-65,957,820),26629=>array(25,-65,965,829),26630=>array(38,-72,958,834),26631=>array(21,-59,940,833),26632=>array(17,-71,933,825),26633=>array(20,-71,917,817),26634=>array(17,-69,930,820),26635=>array(25,-60,942,833),26636=>array(21,-72,918,820),26637=>array(21,-68,951,827),26638=>array(21,-74,950,816),26639=>array(32,-57,925,833),26640=>array(32,-63,964,844),26641=>array(20,-71,929,818),26642=>array(58,-65,927,845),26643=>array(37,-65,948,826),26644=>array(56,-64,962,836),26645=>array(63,-68,953,823),26646=>array(54,-62,957,833),26647=>array(60,-65,957,788),26648=>array(63,-71,933,835),26649=>array(45,-66,961,842),26650=>array(38,-69,969,833),26651=>array(34,-65,966,835),26652=>array(39,-67,964,830),26653=>array(34,-64,943,832),26654=>array(56,-64,962,811),26655=>array(38,-63,948,845),26656=>array(45,-67,961,844),26657=>array(37,-74,963,822),26658=>array(39,-64,957,831),26659=>array(39,-64,965,843),26660=>array(32,-65,981,837),26661=>array(52,-65,954,841),26662=>array(39,-70,908,832),26663=>array(33,-64,961,836),26664=>array(32,-70,971,833),26665=>array(51,-58,909,830),26666=>array(28,-63,961,836),26667=>array(51,-68,930,830),26668=>array(53,-67,955,826),26669=>array(38,-68,951,828),26670=>array(53,-70,954,826),26671=>array(38,-68,948,826),26672=>array(29,-64,956,832),26673=>array(33,-77,955,825),26674=>array(36,-65,952,833),26675=>array(45,-68,954,826),26676=>array(38,-63,962,833),26677=>array(36,-67,908,830),26678=>array(17,-62,895,831),26679=>array(17,-61,924,831),26680=>array(33,-67,949,825),26681=>array(51,-71,957,820),26682=>array(44,-68,942,829),26683=>array(33,-58,971,839),26684=>array(44,-65,968,835),26685=>array(50,-59,957,839),26686=>array(39,-77,951,834),26687=>array(44,-66,991,842),26688=>array(54,-67,960,841),26689=>array(39,-68,956,835),26690=>array(39,-66,944,827),26691=>array(39,-72,945,828),26692=>array(33,-68,966,832),26693=>array(40,-65,967,844),26694=>array(30,-69,941,826),26695=>array(63,-65,963,844),26696=>array(63,-65,963,838),26697=>array(39,-60,956,845),26698=>array(50,-48,948,827),26699=>array(33,-71,971,832),26700=>array(52,-67,957,831),26701=>array(51,-67,932,830),26702=>array(51,-58,950,830),26703=>array(31,-64,957,832),26704=>array(46,-65,895,830),26705=>array(53,-65,958,788),26706=>array(52,-63,957,836),26707=>array(39,-65,954,827),26708=>array(38,-62,939,837),26709=>array(54,-74,898,821),26710=>array(54,-74,972,857),26711=>array(54,-74,964,821),26712=>array(50,-74,898,837),26713=>array(51,-65,946,833),26714=>array(45,-75,945,839),26715=>array(36,-66,946,836),26716=>array(54,-74,959,821),26717=>array(37,-66,949,835),26718=>array(36,-74,957,821),26719=>array(22,-71,933,826),26720=>array(18,-67,922,824),26721=>array(17,-74,938,821),26722=>array(20,-81,921,816),26723=>array(51,-60,935,830),26724=>array(26,-63,932,826),26725=>array(36,-53,966,844),26726=>array(25,-75,929,817),26727=>array(25,-78,959,833),26728=>array(27,-61,949,840),26729=>array(24,-69,923,833),26730=>array(44,-68,938,827),26731=>array(37,-69,972,829),26732=>array(48,-61,970,836),26733=>array(26,-72,966,832),26734=>array(41,-70,954,829),26735=>array(44,-65,951,827),26736=>array(43,-65,961,829),26737=>array(41,-68,953,826),26738=>array(33,-64,953,837),26739=>array(19,-73,979,834),26740=>array(51,-76,955,830),26741=>array(49,-74,953,826),26742=>array(42,-71,902,827),26743=>array(51,-63,924,844),26744=>array(44,-71,953,837),26745=>array(48,-66,977,848),26746=>array(35,-67,965,833),26747=>array(46,-73,976,821),26748=>array(36,-65,965,826),26749=>array(56,-23,960,824),26750=>array(51,-72,956,830),26751=>array(51,-62,933,830),26752=>array(46,-67,972,832),26753=>array(53,-68,956,808),26754=>array(50,-65,961,833),26755=>array(41,-66,960,830),26756=>array(32,-62,945,832),26757=>array(46,-71,953,843),26758=>array(38,-68,951,836),26759=>array(49,-65,961,829),26760=>array(31,-62,920,843),26761=>array(41,-69,953,826),26762=>array(39,-62,977,832),26763=>array(41,-71,897,824),26764=>array(48,-69,977,826),26765=>array(33,-67,935,842),26766=>array(39,-67,945,848),26767=>array(51,-67,934,833),26768=>array(32,-64,954,831),26769=>array(34,-76,970,821),26770=>array(42,-69,964,828),26771=>array(38,-70,956,837),26772=>array(28,-67,965,840),26773=>array(21,-67,970,833),26774=>array(37,-82,956,824),26775=>array(35,-68,956,829),26776=>array(36,-62,958,833),26777=>array(50,-70,911,827),26778=>array(50,-68,963,848),26779=>array(34,-68,962,824),26780=>array(30,-69,979,828),26781=>array(42,-71,981,839),26782=>array(45,-65,966,827),26783=>array(63,-68,932,847),26784=>array(51,-64,913,830),26785=>array(40,-72,962,838),26786=>array(44,-63,915,835),26787=>array(41,-70,967,825),26788=>array(47,-68,975,827),26789=>array(45,-71,957,838),26790=>array(49,-59,947,828),26791=>array(47,-62,948,835),26792=>array(41,-68,950,823),26793=>array(44,-64,952,828),26794=>array(43,-67,951,823),26795=>array(47,-69,968,830),26796=>array(42,-68,953,825),26797=>array(51,-73,951,835),26798=>array(42,-66,911,830),26799=>array(44,-70,927,839),26800=>array(40,-67,961,832),26801=>array(36,-54,913,835),26802=>array(44,-61,961,831),26803=>array(51,-70,957,830),26804=>array(30,-76,974,827),26805=>array(41,-79,943,824),26806=>array(31,-64,971,832),26807=>array(29,-62,971,839),26808=>array(36,-65,918,835),26809=>array(51,-58,954,830),26810=>array(46,-58,943,833),26811=>array(33,-65,950,836),26812=>array(33,-64,952,830),26813=>array(36,-54,972,835),26814=>array(27,-60,959,835),26815=>array(54,-55,971,835),26816=>array(24,-60,934,832),26817=>array(36,-64,968,844),26818=>array(23,-70,947,819),26819=>array(50,-67,967,813),26820=>array(39,-68,969,842),26821=>array(24,-72,970,824),26822=>array(30,-70,953,839),26823=>array(48,-68,959,824),26824=>array(43,-68,952,832),26825=>array(58,-71,922,838),26826=>array(72,-71,944,835),26827=>array(29,-70,947,827),26828=>array(41,-70,977,826),26829=>array(51,-58,946,830),26830=>array(51,-71,972,828),26831=>array(33,-71,973,825),26832=>array(42,-59,964,843),26833=>array(48,-73,954,824),26834=>array(27,-68,962,838),26835=>array(42,-72,950,841),26836=>array(39,-70,961,831),26837=>array(39,-70,954,823),26838=>array(37,-66,984,832),26839=>array(48,-65,966,834),26840=>array(39,-65,968,830),26841=>array(21,-66,979,844),26842=>array(57,-72,912,822),26843=>array(36,-75,932,845),26844=>array(41,-71,973,833),26845=>array(42,-73,903,826),26846=>array(42,-72,898,826),26847=>array(50,-64,973,835),26848=>array(54,-67,967,836),26849=>array(40,-72,916,824),26850=>array(37,-68,898,824),26851=>array(39,-70,965,832),26852=>array(51,-72,960,833),26853=>array(39,-69,967,826),26854=>array(43,-67,951,826),26855=>array(39,-70,948,840),26856=>array(44,-53,975,848),26857=>array(36,-75,897,825),26858=>array(36,-59,971,845),26859=>array(32,-58,964,841),26860=>array(30,-64,973,843),26861=>array(32,-68,968,839),26862=>array(30,-69,970,833),26863=>array(52,-70,963,834),26864=>array(38,-64,957,830),26865=>array(39,-67,972,832),26866=>array(22,-68,939,836),26867=>array(27,-71,975,827),26868=>array(40,-74,970,827),26869=>array(35,-70,968,822),26870=>array(33,-67,969,831),26871=>array(36,-68,970,824),26872=>array(42,-70,961,783),26873=>array(39,-70,956,835),26874=>array(42,-64,921,829),26875=>array(45,-62,983,830),26876=>array(32,-61,967,831),26877=>array(46,-70,963,826),26878=>array(44,-56,954,829),26879=>array(26,-77,951,835),26880=>array(34,-64,962,834),26881=>array(31,-62,952,833),26882=>array(31,-65,972,829),26883=>array(31,-62,957,837),26884=>array(39,-73,954,832),26885=>array(21,-75,927,817),26886=>array(51,-71,913,824),26887=>array(42,-78,960,827),26888=>array(36,-70,902,844),26889=>array(39,-65,964,841),26890=>array(48,-71,955,838),26891=>array(35,-67,967,835),26892=>array(51,-58,954,830),26893=>array(29,-73,954,835),26894=>array(37,-71,952,836),26895=>array(51,-58,964,830),26896=>array(35,-68,951,833),26897=>array(48,-79,954,835),26898=>array(36,-64,966,829),26899=>array(37,-67,980,830),26900=>array(48,-71,930,832),26901=>array(39,-69,967,826),26902=>array(29,-67,946,840),26903=>array(41,-62,976,843),26904=>array(29,-37,983,831),26905=>array(41,-68,900,832),26906=>array(31,-65,918,832),26907=>array(41,-62,958,834),26908=>array(33,-62,959,838),26909=>array(38,-71,986,826),26910=>array(38,-71,986,830),26911=>array(18,-76,954,815),26912=>array(32,-71,944,827),26913=>array(21,-70,918,833),26914=>array(18,-76,886,815),26915=>array(33,-72,955,833),26916=>array(34,-63,920,823),26917=>array(44,-62,905,830),26918=>array(27,-63,950,843),26919=>array(18,-76,977,828),26920=>array(27,-70,951,829),26921=>array(18,-76,956,856),26922=>array(42,-67,954,825),26923=>array(18,-76,937,837),26924=>array(33,-76,953,848),26925=>array(10,-63,922,830),26926=>array(18,-76,942,835),26927=>array(32,-64,950,837),26928=>array(28,-65,941,826),26929=>array(18,-76,970,843),26930=>array(36,-70,955,835),26931=>array(33,-55,973,838),26932=>array(31,-71,975,837),26933=>array(26,-73,965,826),26934=>array(39,-70,969,825),26935=>array(38,-69,962,828),26936=>array(19,-55,961,852),26937=>array(39,-70,940,827),26938=>array(18,-76,981,825),26939=>array(39,-67,950,826),26940=>array(26,-70,951,830),26941=>array(36,-67,970,831),26942=>array(18,-76,951,833),26943=>array(30,-64,978,835),26944=>array(37,-68,910,824),26945=>array(39,-71,971,827),26946=>array(30,-63,962,831),26947=>array(30,-61,943,833),26948=>array(33,-70,928,824),26949=>array(30,-73,948,823),26950=>array(30,-70,952,823),26951=>array(18,-76,919,815),26952=>array(44,-72,965,824),26953=>array(42,-69,954,826),26954=>array(47,-72,944,817),26955=>array(38,-69,922,826),26956=>array(41,-72,955,836),26957=>array(35,-70,966,813),26958=>array(30,-71,951,823),26959=>array(38,-68,980,829),26960=>array(18,-76,969,815),26961=>array(35,-73,972,832),26962=>array(39,-64,967,830),26963=>array(47,-64,971,836),26964=>array(39,-70,954,828),26965=>array(28,-76,927,845),26966=>array(21,-63,914,828),26967=>array(27,-59,970,840),26968=>array(36,-69,968,830),26969=>array(33,-70,961,830),26970=>array(48,-69,954,827),26971=>array(44,-60,953,834),26972=>array(39,-71,930,827),26973=>array(39,-70,971,836),26974=>array(39,-70,942,818),26975=>array(32,-71,952,836),26976=>array(33,-67,951,830),26977=>array(33,-76,950,818),26978=>array(44,-62,967,843),26979=>array(49,-67,924,829),26980=>array(26,-76,968,850),26981=>array(31,-60,971,848),26982=>array(41,-64,957,854),26983=>array(18,-76,988,836),26984=>array(37,-74,962,836),26985=>array(33,-69,967,826),26986=>array(39,-62,973,834),26987=>array(39,-70,957,818),26988=>array(37,-70,903,823),26989=>array(52,-69,965,829),26990=>array(39,-70,949,829),26991=>array(35,-64,961,839),26992=>array(37,-76,979,824),26993=>array(34,-71,969,831),26994=>array(24,-64,968,829),26995=>array(34,-64,975,832),26996=>array(42,-70,932,839),26997=>array(39,-68,956,824),26998=>array(44,-68,968,829),26999=>array(42,-70,956,827),27000=>array(34,-66,986,827),27001=>array(39,-70,957,818),27002=>array(36,-70,961,825),27003=>array(39,-65,958,834),27004=>array(18,-52,932,838),27005=>array(50,-64,950,847),27006=>array(39,-75,966,841),27007=>array(27,-67,972,832),27008=>array(37,-68,914,825),27009=>array(39,-70,940,835),27010=>array(30,-70,966,824),27011=>array(31,-71,960,823),27012=>array(21,-64,934,830),27013=>array(44,-76,967,820),27014=>array(30,-68,971,849),27015=>array(29,-76,934,822),27016=>array(16,-68,885,825),27017=>array(27,-75,961,816),27018=>array(28,-67,917,833),27019=>array(27,-67,916,829),27020=>array(28,-72,970,829),27021=>array(30,-67,912,824),27022=>array(33,-62,967,832),27023=>array(33,-64,954,859),27024=>array(28,-71,967,827),27025=>array(31,-70,960,833),27026=>array(24,-64,917,829),27027=>array(31,-68,958,833),27028=>array(46,-61,939,835),27029=>array(33,-64,969,830),27030=>array(46,-67,970,827),27031=>array(33,-70,955,826),27032=>array(29,-66,971,842),27033=>array(38,-68,966,833),27034=>array(39,-70,967,832),27035=>array(30,-68,973,839),27036=>array(54,-70,928,833),27037=>array(30,-73,967,835),27038=>array(33,-70,968,825),27039=>array(24,-64,941,845),27040=>array(39,-72,946,831),27041=>array(30,-69,951,833),27042=>array(24,-64,967,844),27043=>array(27,-69,951,837),27044=>array(28,-70,980,829),27045=>array(38,-65,960,830),27046=>array(49,-56,968,855),27047=>array(38,-74,939,817),27048=>array(47,-69,942,838),27049=>array(26,-69,975,826),27050=>array(31,-71,923,827),27051=>array(33,-68,965,844),27052=>array(40,-74,970,826),27053=>array(28,-65,965,849),27054=>array(61,-67,948,832),27055=>array(31,-60,954,833),27056=>array(34,-68,956,832),27057=>array(19,-66,972,832),27058=>array(39,-70,965,818),27059=>array(36,-65,967,840),27060=>array(53,-66,913,834),27061=>array(31,-70,956,828),27062=>array(37,-69,951,838),27063=>array(41,-67,944,841),27064=>array(18,-70,964,823),27065=>array(26,-70,965,827),27066=>array(37,-64,971,838),27067=>array(55,-62,930,845),27068=>array(32,-64,960,833),27069=>array(32,-75,972,825),27070=>array(39,-70,947,818),27071=>array(39,-70,962,829),27072=>array(32,-62,968,831),27073=>array(39,-70,940,844),27074=>array(23,-70,963,823),27075=>array(36,-60,969,845),27076=>array(39,-70,915,822),27077=>array(43,-69,927,823),27078=>array(42,-69,945,827),27079=>array(33,-78,961,833),27080=>array(24,-64,959,829),27081=>array(26,-73,973,836),27082=>array(34,-67,970,845),27083=>array(40,-68,954,828),27084=>array(28,-72,959,843),27085=>array(31,-70,960,851),27086=>array(39,-70,951,847),27087=>array(25,-67,952,840),27088=>array(39,-70,948,844),27089=>array(30,-68,976,787),27090=>array(40,-68,950,843),27091=>array(39,-70,969,818),27092=>array(33,-67,987,849),27093=>array(35,-70,968,835),27094=>array(43,-77,968,844),27095=>array(49,-61,926,834),27096=>array(35,-62,969,843),27097=>array(34,-69,950,836),27098=>array(33,-70,923,818),27099=>array(13,-57,922,845),27100=>array(19,-76,953,843),27101=>array(39,-70,942,844),27102=>array(13,-57,958,845),27103=>array(21,-64,917,842),27104=>array(21,-65,911,825),27105=>array(13,-67,964,845),27106=>array(20,-73,916,823),27107=>array(24,-74,951,845),27108=>array(32,-71,976,825),27109=>array(37,-64,965,830),27110=>array(38,-73,959,845),27111=>array(31,-64,973,837),27112=>array(29,-62,955,836),27113=>array(29,-60,969,811),27114=>array(26,-67,966,845),27115=>array(43,-66,956,835),27116=>array(33,-78,988,835),27117=>array(33,-70,964,839),27118=>array(34,-72,989,850),27119=>array(13,-65,953,845),27120=>array(13,-68,959,845),27121=>array(30,-67,968,826),27122=>array(27,-71,962,842),27123=>array(53,-65,963,843),27124=>array(34,-65,969,831),27125=>array(13,-57,978,845),27126=>array(22,-71,906,831),27127=>array(31,-73,987,829),27128=>array(37,-70,983,824),27129=>array(37,-64,952,845),27130=>array(28,-66,966,848),27131=>array(33,-58,971,839),27132=>array(38,-71,986,826),27133=>array(44,-71,948,827),27134=>array(30,-72,979,828),27135=>array(26,-65,953,828),27136=>array(45,-67,960,847),27137=>array(46,-64,976,835),27138=>array(60,-64,959,847),27139=>array(21,-74,939,826),27140=>array(21,-71,990,826),27141=>array(39,-64,964,829),27142=>array(30,-76,945,829),27143=>array(27,-73,989,824),27144=>array(36,-70,968,835),27145=>array(37,-80,968,826),27146=>array(28,-66,964,836),27147=>array(34,-67,961,827),27148=>array(26,-68,967,829),27149=>array(30,-84,955,830),27150=>array(26,-65,942,843),27151=>array(30,-69,954,826),27152=>array(26,-65,958,839),27153=>array(36,-61,985,836),27154=>array(26,-65,945,830),27155=>array(39,-69,949,831),27156=>array(36,-67,970,842),27157=>array(30,-77,973,832),27158=>array(46,-72,961,853),27159=>array(43,-68,956,826),27160=>array(32,-70,956,824),27161=>array(33,-70,957,818),27162=>array(33,-70,959,838),27163=>array(44,-61,971,833),27164=>array(33,-79,961,841),27165=>array(39,-71,962,828),27166=>array(46,-61,957,830),27167=>array(41,-67,944,826),27168=>array(30,-69,953,826),27169=>array(31,-69,952,828),27170=>array(33,-70,959,847),27171=>array(35,-62,978,848),27172=>array(6,-73,993,824),27173=>array(38,-73,970,825),27174=>array(40,-67,958,831),27175=>array(35,-76,976,828),27176=>array(39,-68,955,832),27177=>array(25,-72,957,832),27178=>array(26,-72,944,822),27179=>array(37,-62,964,832),27180=>array(33,-70,964,831),27181=>array(33,-60,972,831),27182=>array(33,-70,957,818),27183=>array(18,-72,929,819),27184=>array(36,-63,957,838),27185=>array(22,-74,953,832),27186=>array(34,-55,966,852),27187=>array(32,-66,955,830),27188=>array(34,-71,965,831),27189=>array(44,-67,969,836),27190=>array(27,-70,948,818),27191=>array(27,-67,950,844),27192=>array(48,-68,971,833),27193=>array(39,-71,953,825),27194=>array(38,-68,954,832),27195=>array(39,-81,958,826),27196=>array(39,-77,953,820),27197=>array(35,-65,957,851),27198=>array(30,-66,977,830),27199=>array(33,-70,954,828),27200=>array(44,-64,984,851),27201=>array(37,-69,956,828),27202=>array(35,-76,974,851),27203=>array(24,-70,959,843),27204=>array(34,-69,960,835),27205=>array(21,-70,954,845),27206=>array(46,-74,961,831),27207=>array(31,-67,963,837),27208=>array(36,-69,962,830),27209=>array(33,-80,956,825),27210=>array(34,-71,946,818),27211=>array(36,-62,962,836),27212=>array(33,-70,911,818),27213=>array(39,-68,897,822),27214=>array(38,-70,963,826),27215=>array(36,-71,951,838),27216=>array(44,-65,972,832),27217=>array(34,-68,964,826),27218=>array(36,-70,954,838),27219=>array(36,-72,948,838),27220=>array(36,-79,969,839),27221=>array(44,-58,951,836),27222=>array(43,-68,972,825),27223=>array(31,-68,948,839),27224=>array(36,-61,923,828),27225=>array(27,-69,951,830),27226=>array(39,-70,952,829),27227=>array(21,-68,972,828),27228=>array(47,-64,966,816),27229=>array(40,-68,953,826),27230=>array(35,-65,963,827),27231=>array(36,-68,963,829),27232=>array(37,-80,956,837),27233=>array(38,-70,964,837),27234=>array(37,-72,948,842),27235=>array(37,-72,957,847),27236=>array(44,-67,970,838),27237=>array(47,-69,952,821),27238=>array(32,-58,958,847),27239=>array(45,-61,917,849),27240=>array(33,-74,962,830),27241=>array(36,-67,958,826),27242=>array(38,-79,964,826),27243=>array(47,-70,956,827),27244=>array(37,-72,957,819),27245=>array(40,-72,957,824),27246=>array(53,-72,913,834),27247=>array(39,-70,944,824),27248=>array(37,-72,948,863),27249=>array(24,-69,914,829),27250=>array(37,-72,933,833),27251=>array(30,-55,967,821),27252=>array(30,-71,956,830),27253=>array(37,-72,979,832),27254=>array(43,-74,964,821),27255=>array(32,-73,962,838),27256=>array(43,-73,959,818),27257=>array(21,-73,928,817),27258=>array(37,-72,911,819),27259=>array(29,-72,966,819),27260=>array(15,-63,980,837),27261=>array(41,-76,973,833),27262=>array(41,-66,974,828),27263=>array(26,-58,955,832),27264=>array(29,-61,956,841),27265=>array(46,-65,991,855),27266=>array(37,-71,966,828),27267=>array(50,-76,971,819),27268=>array(31,-66,974,844),27269=>array(24,-72,964,823),27270=>array(39,-73,943,836),27271=>array(36,-65,960,834),27272=>array(37,-72,958,819),27273=>array(37,-65,936,826),27274=>array(36,-66,980,829),27275=>array(37,-72,981,820),27276=>array(43,-65,970,829),27277=>array(31,-76,970,829),27278=>array(22,-65,971,851),27279=>array(37,-72,972,833),27280=>array(21,-70,949,838),27281=>array(50,-68,933,826),27282=>array(42,-75,967,826),27283=>array(27,-71,980,834),27284=>array(46,-59,924,839),27285=>array(51,-76,966,824),27286=>array(27,-69,974,834),27287=>array(33,-54,973,840),27288=>array(33,-72,965,849),27289=>array(35,-76,923,815),27290=>array(35,-74,976,827),27291=>array(31,-71,977,826),27292=>array(32,-64,974,861),27293=>array(41,-78,970,819),27294=>array(27,-66,961,837),27295=>array(29,-83,962,823),27296=>array(34,-65,954,834),27297=>array(34,-70,954,826),27298=>array(33,-68,969,858),27299=>array(33,-63,959,838),27300=>array(35,-71,980,827),27301=>array(29,-73,964,842),27302=>array(41,-70,919,826),27303=>array(33,-70,974,823),27304=>array(33,-74,960,829),27305=>array(22,-64,921,857),27306=>array(42,-64,973,849),27307=>array(15,-63,943,830),27308=>array(29,-61,965,836),27309=>array(40,-72,981,828),27310=>array(40,-65,950,833),27311=>array(38,-56,970,838),27312=>array(35,-68,936,845),27313=>array(25,-56,943,832),27314=>array(35,-68,917,832),27315=>array(40,-65,966,846),27316=>array(34,-68,974,827),27317=>array(35,-69,942,824),27318=>array(38,-71,983,834),27319=>array(36,-70,959,821),27320=>array(37,-63,952,839),27321=>array(38,-65,965,842),27322=>array(45,-64,969,842),27323=>array(24,-62,957,839),27324=>array(27,-69,953,825),27325=>array(36,-61,967,831),27326=>array(105,-51,918,822),27327=>array(34,-68,958,829),27328=>array(36,-69,974,840),27329=>array(26,-66,945,839),27330=>array(36,-50,957,840),27331=>array(44,-66,954,835),27332=>array(44,-71,977,835),27333=>array(36,-71,975,839),27334=>array(48,-68,977,824),27335=>array(32,-75,963,825),27336=>array(31,-62,984,847),27337=>array(27,-70,953,826),27338=>array(31,-71,913,824),27339=>array(42,-70,958,840),27340=>array(44,-69,958,832),27341=>array(40,-75,961,831),27342=>array(35,-71,957,849),27343=>array(28,-64,984,828),27344=>array(40,-65,969,813),27345=>array(43,-66,935,827),27346=>array(30,-73,973,831),27347=>array(30,-61,974,849),27348=>array(42,-65,958,831),27349=>array(42,-72,967,831),27350=>array(34,-62,965,836),27351=>array(42,-67,958,833),27352=>array(42,-62,961,831),27353=>array(44,-70,949,824),27354=>array(39,-61,904,833),27355=>array(47,-66,959,840),27356=>array(43,-59,973,843),27357=>array(30,-70,971,835),27358=>array(33,-66,972,841),27359=>array(32,-71,969,841),27360=>array(37,-71,986,838),27361=>array(58,-72,950,833),27362=>array(20,-72,972,837),27363=>array(22,-72,974,841),27364=>array(41,-68,955,841),27365=>array(33,-71,959,847),27366=>array(29,-68,970,841),27367=>array(34,-65,957,840),27368=>array(36,-71,962,833),27369=>array(44,-65,920,833),27370=>array(32,-65,955,832),27371=>array(41,-68,959,831),27372=>array(43,-62,971,843),27373=>array(30,-62,965,831),27374=>array(36,-67,951,827),27375=>array(31,-68,981,842),27376=>array(30,-78,980,841),27377=>array(43,-65,967,840),27378=>array(33,-65,979,839),27379=>array(35,-58,969,855),27380=>array(19,-72,970,843),27381=>array(27,-66,973,840),27382=>array(32,-62,960,831),27383=>array(16,-45,965,851),27384=>array(38,-72,986,835),27385=>array(40,-68,957,830),27386=>array(38,-61,936,832),27387=>array(45,-62,958,826),27388=>array(28,-78,978,832),27389=>array(48,-68,956,813),27390=>array(31,-64,969,829),27391=>array(32,-67,951,835),27392=>array(33,-70,977,837),27393=>array(22,-70,987,832),27394=>array(31,-69,959,828),27395=>array(34,-58,964,853),27396=>array(35,-65,909,836),27397=>array(31,-69,973,827),27398=>array(21,-66,969,836),27399=>array(31,-66,955,827),27400=>array(45,-64,944,838),27401=>array(40,-62,962,835),27402=>array(38,-71,952,830),27403=>array(33,-68,960,823),27404=>array(33,-68,970,838),27405=>array(28,-68,937,832),27406=>array(44,-71,964,842),27407=>array(34,-67,967,830),27408=>array(39,-73,960,828),27409=>array(33,-70,970,831),27410=>array(40,-74,961,844),27411=>array(33,-78,966,836),27412=>array(33,-65,970,828),27413=>array(33,-70,987,828),27414=>array(40,-63,961,841),27415=>array(39,-65,942,830),27416=>array(47,-68,933,827),27417=>array(49,-62,959,831),27418=>array(35,-68,978,846),27419=>array(38,-71,932,835),27420=>array(40,-65,975,839),27421=>array(56,-67,964,843),27422=>array(49,-64,968,828),27423=>array(36,-69,984,835),27424=>array(51,-69,950,842),27425=>array(49,-66,953,822),27426=>array(20,-64,948,839),27427=>array(48,-72,962,831),27428=>array(41,-75,952,819),27429=>array(106,-75,968,829),27430=>array(35,-75,968,838),27431=>array(101,-66,953,833),27432=>array(56,-73,971,829),27433=>array(51,-62,947,822),27434=>array(90,-68,956,837),27435=>array(66,-68,950,847),27436=>array(44,-68,971,848),27437=>array(115,-73,961,830),27438=>array(60,-68,971,850),27439=>array(55,-74,967,830),27440=>array(30,-72,959,831),27441=>array(34,-72,959,834),27442=>array(47,-65,969,837),27443=>array(107,-74,962,830),27444=>array(101,-73,959,848),27445=>array(46,-62,970,853),27446=>array(44,-76,964,826),27447=>array(30,-69,963,838),27448=>array(47,-66,967,839),27449=>array(57,-79,975,830),27450=>array(61,-65,968,832),27451=>array(50,-72,958,838),27452=>array(50,-72,969,830),27453=>array(39,-71,977,839),27454=>array(50,-70,954,835),27455=>array(54,-67,968,841),27456=>array(46,-76,983,824),27457=>array(65,-73,985,827),27458=>array(61,-71,975,833),27459=>array(58,-72,972,838),27460=>array(102,-69,969,827),27461=>array(56,-72,977,826),27462=>array(47,-71,964,843),27463=>array(22,-74,968,842),27464=>array(29,-73,973,844),27465=>array(34,-70,970,841),27466=>array(54,-73,963,846),27467=>array(33,-69,967,826),27468=>array(65,-66,959,839),27469=>array(51,-73,970,841),27470=>array(39,-72,967,830),27471=>array(49,-72,961,842),27472=>array(110,-79,961,830),27473=>array(46,-69,977,831),27474=>array(60,-69,971,839),27475=>array(39,-65,963,841),27476=>array(32,-73,983,838),27477=>array(53,-83,972,825),27478=>array(60,-77,970,830),27479=>array(49,-68,975,840),27480=>array(52,-56,953,835),27481=>array(37,-67,964,856),27482=>array(64,-65,983,849),27483=>array(31,-70,983,864),27484=>array(37,-80,972,836),27485=>array(63,-72,971,838),27486=>array(55,-71,967,829),27487=>array(48,-67,969,841),27488=>array(53,-59,969,849),27489=>array(37,-68,962,836),27490=>array(76,-6,931,791),27491=>array(100,-5,920,756),27492=>array(37,-57,949,804),27493=>array(57,-60,932,835),27494=>array(63,-58,942,834),27495=>array(40,-66,956,830),27496=>array(41,-66,952,835),27497=>array(53,-62,962,833),27498=>array(63,-20,919,779),27499=>array(40,-28,953,783),27500=>array(46,-74,942,822),27501=>array(53,-67,951,829),27502=>array(37,-59,957,836),27503=>array(98,-70,938,835),27504=>array(60,-51,920,792),27505=>array(45,-20,956,836),27506=>array(45,-70,940,834),27507=>array(48,-70,943,834),27508=>array(33,-56,961,801),27509=>array(30,-55,955,849),27510=>array(80,-70,939,823),27511=>array(41,-58,944,789),27512=>array(47,-71,930,846),27513=>array(79,-75,921,767),27514=>array(71,-75,815,798),27515=>array(60,-67,959,761),27516=>array(26,-60,916,801),27517=>array(41,-68,955,828),27518=>array(58,-59,921,843),27519=>array(56,-62,972,840),27520=>array(39,-57,967,840),27521=>array(44,-74,950,774),27522=>array(49,-47,957,785),27523=>array(41,-73,964,827),27524=>array(54,-71,966,853),27525=>array(53,-74,952,827),27526=>array(65,-74,951,829),27527=>array(31,-68,913,826),27528=>array(44,-63,951,838),27529=>array(63,-75,921,835),27530=>array(61,-66,964,832),27531=>array(47,-61,965,845),27532=>array(33,-73,954,773),27533=>array(57,-64,953,837),27534=>array(43,-73,961,821),27535=>array(42,-76,950,821),27536=>array(52,-70,968,829),27537=>array(52,-74,960,823),27538=>array(32,-87,910,778),27539=>array(35,-71,948,820),27540=>array(57,-69,975,831),27541=>array(55,-58,949,829),27542=>array(40,-67,954,835),27543=>array(38,-53,968,835),27544=>array(68,-60,952,832),27545=>array(57,-64,958,829),27546=>array(44,-70,939,823),27547=>array(48,-47,947,788),27548=>array(39,-68,982,842),27549=>array(39,-68,974,829),27550=>array(40,-60,958,800),27551=>array(54,-67,970,782),27552=>array(39,-71,971,843),27553=>array(36,-71,930,830),27554=>array(50,-70,954,826),27555=>array(54,-72,952,829),27556=>array(55,-70,963,845),27557=>array(39,-78,953,834),27558=>array(43,-69,946,834),27559=>array(52,-71,978,829),27560=>array(43,-68,970,833),27561=>array(35,-65,976,798),27562=>array(47,-20,954,833),27563=>array(57,-64,953,789),27564=>array(50,-64,941,786),27565=>array(35,-44,965,807),27566=>array(40,-67,977,854),27567=>array(55,-66,960,838),27568=>array(36,-68,963,830),27569=>array(42,-73,954,829),27570=>array(44,-66,946,829),27571=>array(52,-70,948,788),27572=>array(98,-66,959,792),27573=>array(41,-73,964,832),27574=>array(58,-80,958,819),27575=>array(46,-68,952,836),27576=>array(45,-69,976,833),27577=>array(81,-72,972,787),27578=>array(51,-72,967,824),27579=>array(51,-70,963,833),27580=>array(49,-68,964,833),27581=>array(35,-65,976,847),27582=>array(35,-72,960,823),27583=>array(31,-73,969,799),27584=>array(73,-64,962,836),27585=>array(58,-68,958,833),27586=>array(52,-67,944,815),27587=>array(58,-72,973,843),27588=>array(58,-69,963,835),27589=>array(39,-72,963,831),27590=>array(69,-68,958,810),27591=>array(53,-76,974,819),27592=>array(55,-73,963,830),27593=>array(71,-29,951,800),27594=>array(41,-63,976,833),27595=>array(92,-57,935,798),27596=>array(74,-58,926,788),27597=>array(77,-66,931,783),27598=>array(64,-63,933,843),27599=>array(64,-63,939,843),27600=>array(55,-65,952,836),27601=>array(44,-62,967,805),27602=>array(56,-69,944,832),27603=>array(43,-62,964,835),27604=>array(59,-36,956,811),27605=>array(58,-59,908,816),27606=>array(63,-43,951,816),27607=>array(87,-67,965,820),27608=>array(76,-62,969,794),27609=>array(41,-54,941,826),27610=>array(56,-65,956,845),27611=>array(79,-23,944,822),27612=>array(52,-18,971,840),27613=>array(52,-18,971,840),27614=>array(78,-41,947,831),27615=>array(52,-40,954,841),27616=>array(49,-32,956,823),27617=>array(52,-18,971,840),27618=>array(55,-27,961,837),27619=>array(71,-32,949,778),27620=>array(48,-62,956,830),27621=>array(52,-18,971,841),27622=>array(55,-58,956,836),27623=>array(62,-26,965,834),27624=>array(54,-25,954,833),27625=>array(52,-18,971,840),27626=>array(35,-19,931,836),27627=>array(80,-54,933,840),27628=>array(51,-24,969,832),27629=>array(44,-39,954,836),27630=>array(30,-65,964,835),27631=>array(59,-30,967,835),27632=>array(47,-29,958,834),27633=>array(47,-28,958,833),27634=>array(39,-76,955,819),27635=>array(70,-44,970,826),27636=>array(47,-28,958,823),27637=>array(30,-65,933,844),27638=>array(44,-28,972,855),27639=>array(90,-55,961,848),27640=>array(55,-28,959,825),27641=>array(28,-70,972,847),27642=>array(48,-28,960,841),27643=>array(31,-65,962,840),27644=>array(31,-68,963,819),27645=>array(44,-32,971,832),27646=>array(47,-67,960,822),27647=>array(35,-67,967,853),27648=>array(54,-69,966,824),27649=>array(60,-28,972,835),27650=>array(53,-76,958,825),27651=>array(46,-45,962,839),27652=>array(38,-54,960,844),27653=>array(49,-34,959,841),27654=>array(54,-43,974,840),27655=>array(30,-25,928,835),27656=>array(68,-56,946,844),27657=>array(37,-58,964,840),27658=>array(54,-43,974,854),27659=>array(52,-69,971,828),27660=>array(48,-40,978,843),27661=>array(33,-66,966,830),27662=>array(61,-46,961,825),27663=>array(83,-68,934,828),27664=>array(100,-54,907,832),27665=>array(51,-67,950,784),27666=>array(91,-71,936,839),27667=>array(111,-61,951,781),27668=>array(39,-56,966,853),27669=>array(36,-67,957,847),27670=>array(51,-64,965,845),27671=>array(36,-62,963,853),27672=>array(46,-69,966,840),27673=>array(44,-62,965,852),27674=>array(26,-68,959,849),27675=>array(52,-69,962,839),27676=>array(35,-63,959,849),27677=>array(36,-75,960,835),27678=>array(36,-72,960,835),27679=>array(37,-76,962,829),27680=>array(10,-71,933,837),27681=>array(45,-76,961,845),27682=>array(38,-63,943,832),27683=>array(50,-67,959,838),27684=>array(40,-63,979,849),27685=>array(37,-66,968,842),27686=>array(41,-65,972,858),27687=>array(42,-70,958,832),27688=>array(41,-73,961,835),27689=>array(21,-64,938,825),27690=>array(38,-66,968,849),27691=>array(47,-68,957,831),27692=>array(39,-61,974,854),27693=>array(38,-66,966,852),27694=>array(48,-79,963,835),27695=>array(45,-74,959,841),27696=>array(35,-70,964,839),27697=>array(25,-69,955,830),27698=>array(25,-70,955,830),27699=>array(43,-71,971,833),27700=>array(47,-64,953,826),27701=>array(320,-38,602,803),27702=>array(51,-74,958,782),27703=>array(47,-64,953,826),27704=>array(51,-65,957,838),27705=>array(85,-28,958,830),27706=>array(40,-64,962,826),27707=>array(69,-60,921,829),27708=>array(54,-39,945,830),27709=>array(27,-71,967,846),27710=>array(71,-32,962,814),27711=>array(60,-65,966,823),27712=>array(51,-55,941,808),27713=>array(58,-59,962,833),27714=>array(61,-65,938,835),27715=>array(60,-62,977,814),27716=>array(60,-63,942,835),27717=>array(59,-51,937,814),27718=>array(33,-65,961,790),27719=>array(46,-49,920,803),27720=>array(70,-59,896,790),27721=>array(40,-59,956,804),27722=>array(57,-66,967,813),27723=>array(59,-57,912,836),27724=>array(62,-72,910,829),27725=>array(44,-71,975,826),27726=>array(53,-62,959,825),27727=>array(62,-65,960,829),27728=>array(67,-71,919,831),27729=>array(67,-42,930,826),27730=>array(55,-49,958,836),27731=>array(55,-64,954,802),27732=>array(60,-37,967,842),27733=>array(57,-65,898,820),27734=>array(54,-65,954,833),27735=>array(48,-67,948,798),27736=>array(48,-59,933,831),27737=>array(51,-67,957,814),27738=>array(49,-52,948,802),27739=>array(43,-63,975,812),27740=>array(33,-46,945,808),27741=>array(47,-62,947,847),27742=>array(58,-68,948,781),27743=>array(65,-51,940,796),27744=>array(48,-46,959,825),27745=>array(58,-52,943,802),27746=>array(74,-58,945,811),27747=>array(92,-68,957,831),27748=>array(51,-63,899,790),27749=>array(52,-70,977,828),27750=>array(44,-68,963,826),27751=>array(69,-68,964,801),27752=>array(70,-57,900,812),27753=>array(55,-40,911,817),27754=>array(54,-41,944,809),27755=>array(53,-68,951,833),27756=>array(57,-67,964,822),27757=>array(61,-69,905,801),27758=>array(41,-65,904,831),27759=>array(48,-61,951,830),27760=>array(48,-64,962,835),27761=>array(50,-70,957,837),27762=>array(41,-68,955,820),27763=>array(49,-73,972,807),27764=>array(53,-64,944,846),27765=>array(53,-73,945,854),27766=>array(42,-66,962,830),27767=>array(59,-63,941,805),27768=>array(54,-69,949,833),27769=>array(58,-59,900,820),27770=>array(56,-72,970,836),27771=>array(41,-75,951,826),27772=>array(41,-75,951,811),27773=>array(63,-61,962,850),27774=>array(41,-62,955,814),27775=>array(62,-57,950,820),27776=>array(45,-75,931,825),27777=>array(56,-48,947,811),27778=>array(58,-67,950,831),27779=>array(48,-64,962,819),27780=>array(46,-60,946,807),27781=>array(47,-70,948,812),27782=>array(63,-66,951,817),27783=>array(48,-60,951,849),27784=>array(56,-73,946,824),27785=>array(51,-58,952,788),27786=>array(49,-58,973,833),27787=>array(51,-69,960,827),27788=>array(41,-44,963,833),27789=>array(56,-38,939,794),27790=>array(45,-62,961,844),27791=>array(62,-67,926,814),27792=>array(43,-63,960,833),27793=>array(66,-51,947,821),27794=>array(58,-71,953,841),27795=>array(54,-62,962,835),27796=>array(54,-60,944,814),27797=>array(59,-56,926,855),27798=>array(54,-64,914,839),27799=>array(35,-58,976,803),27800=>array(52,-50,964,817),27801=>array(51,-62,968,812),27802=>array(65,-44,966,807),27803=>array(41,-65,942,837),27804=>array(70,-66,953,837),27805=>array(31,-69,969,835),27806=>array(52,-74,939,826),27807=>array(41,-61,903,831),27808=>array(66,-64,959,821),27809=>array(47,-62,959,805),27810=>array(40,-66,973,805),27811=>array(58,-63,920,813),27812=>array(42,-47,929,822),27813=>array(41,-57,916,827),27814=>array(52,-46,948,837),27815=>array(28,-63,967,821),27816=>array(58,-58,937,824),27817=>array(41,-62,892,819),27818=>array(45,-62,874,836),27819=>array(56,-61,980,833),27820=>array(62,-72,984,819),27821=>array(39,-67,947,829),27822=>array(57,-30,957,820),27823=>array(52,-52,967,813),27824=>array(53,-71,951,803),27825=>array(53,-44,951,828),27826=>array(38,-58,953,810),27827=>array(49,-67,952,796),27828=>array(46,-47,978,862),27829=>array(73,-53,947,840),27830=>array(51,-73,956,800),27831=>array(53,-81,961,827),27832=>array(42,-63,915,823),27833=>array(64,-69,903,836),27834=>array(54,-74,900,801),27835=>array(48,-64,959,834),27836=>array(52,-61,896,817),27837=>array(69,-64,956,836),27838=>array(67,-56,946,836),27839=>array(43,-48,936,814),27840=>array(45,-68,891,806),27841=>array(59,-62,965,810),27842=>array(45,-73,894,813),27843=>array(47,-70,896,825),27844=>array(39,-63,953,835),27845=>array(49,-66,897,811),27846=>array(28,-50,976,856),27847=>array(48,-73,909,818),27848=>array(81,-66,984,829),27849=>array(46,-73,960,843),27850=>array(60,-57,875,847),27851=>array(39,-66,968,828),27852=>array(42,-32,972,829),27853=>array(44,-67,968,835),27854=>array(97,-62,955,845),27855=>array(42,-71,915,830),27856=>array(64,-68,918,832),27857=>array(57,-75,907,831),27858=>array(55,-64,975,849),27859=>array(50,-53,958,808),27860=>array(46,-53,947,831),27861=>array(64,-59,945,821),27862=>array(56,-68,924,837),27863=>array(61,-53,909,810),27864=>array(78,-67,931,825),27865=>array(54,-64,952,818),27866=>array(38,-39,960,838),27867=>array(56,-67,963,836),27868=>array(41,-69,958,834),27869=>array(55,-68,952,842),27870=>array(51,-72,910,824),27871=>array(62,-63,953,806),27872=>array(36,-50,969,870),27873=>array(46,-46,968,834),27874=>array(50,-75,961,831),27875=>array(62,-27,956,820),27876=>array(59,-65,960,828),27877=>array(56,-64,957,821),27878=>array(62,-57,973,818),27879=>array(55,-70,960,828),27880=>array(60,-46,939,838),27881=>array(49,-58,958,831),27882=>array(53,-59,914,820),27883=>array(54,-53,949,831),27884=>array(53,-72,972,846),27885=>array(52,-73,948,823),27886=>array(63,-69,967,825),27887=>array(49,-63,951,812),27888=>array(38,-65,963,838),27889=>array(59,-71,983,831),27890=>array(50,-46,922,856),27891=>array(42,-58,980,851),27892=>array(58,-26,988,825),27893=>array(57,-67,964,777),27894=>array(45,-66,929,815),27895=>array(57,-62,929,822),27896=>array(53,-62,910,822),27897=>array(53,-50,955,798),27898=>array(42,-62,933,828),27899=>array(43,-55,893,806),27900=>array(47,-76,949,814),27901=>array(55,-70,948,805),27902=>array(63,-58,926,799),27903=>array(64,-72,964,812),27904=>array(51,-69,954,838),27905=>array(57,-71,957,827),27906=>array(57,-66,945,846),27907=>array(44,-78,972,829),27908=>array(71,-57,915,803),27909=>array(57,-66,965,806),27910=>array(47,-60,964,805),27911=>array(56,-63,910,810),27912=>array(50,-73,964,829),27913=>array(49,-67,955,822),27914=>array(56,-64,970,840),27915=>array(42,-65,951,846),27916=>array(45,-62,902,830),27917=>array(52,-44,954,812),27918=>array(58,-69,898,842),27919=>array(56,-70,954,811),27920=>array(55,-70,955,830),27921=>array(49,-66,974,841),27922=>array(46,-53,947,813),27923=>array(55,-65,941,824),27924=>array(58,-61,935,838),27925=>array(41,-73,975,818),27926=>array(46,-70,962,807),27927=>array(60,-62,963,833),27928=>array(47,-74,953,825),27929=>array(42,-62,967,832),27930=>array(49,-70,968,834),27931=>array(57,-72,959,842),27932=>array(38,-67,981,849),27933=>array(55,-71,959,835),27934=>array(48,-55,898,819),27935=>array(45,-74,973,830),27936=>array(51,-68,954,844),27937=>array(71,-67,965,824),27938=>array(53,-79,952,830),27939=>array(51,-65,955,824),27940=>array(44,-38,962,845),27941=>array(48,-62,959,842),27942=>array(52,-70,932,830),27943=>array(42,-77,945,828),27944=>array(52,-74,963,835),27945=>array(55,-63,974,831),27946=>array(69,-60,940,834),27947=>array(50,-53,970,829),27948=>array(53,-71,963,818),27949=>array(50,-45,953,812),27950=>array(52,-60,967,825),27951=>array(53,-68,948,829),27952=>array(54,-52,949,805),27953=>array(56,-64,959,812),27954=>array(57,-70,897,820),27955=>array(56,-64,908,834),27956=>array(48,-65,956,847),27957=>array(50,-59,908,850),27958=>array(56,-63,917,838),27959=>array(55,-57,956,809),27960=>array(59,-75,965,819),27961=>array(54,-53,959,802),27962=>array(55,-72,889,830),27963=>array(43,-70,942,826),27964=>array(50,-54,956,829),27965=>array(50,-59,986,845),27966=>array(51,-72,966,832),27967=>array(58,-63,988,854),27968=>array(48,-73,909,828),27969=>array(40,-70,964,830),27970=>array(48,-73,970,836),27971=>array(49,-74,939,818),27972=>array(48,-61,952,839),27973=>array(46,-70,939,853),27974=>array(34,-61,947,836),27975=>array(37,-63,929,834),27976=>array(62,-80,920,819),27977=>array(46,-71,930,822),27978=>array(57,-54,935,816),27979=>array(48,-63,880,828),27980=>array(45,-63,956,825),27981=>array(45,-68,940,822),27982=>array(36,-64,952,835),27983=>array(55,-68,871,821),27984=>array(54,-68,917,846),27985=>array(57,-60,909,811),27986=>array(46,-69,920,822),27987=>array(40,-58,950,831),27988=>array(43,-64,911,790),27989=>array(54,-64,936,810),27990=>array(46,-66,934,835),27991=>array(56,-63,956,833),27992=>array(66,-64,970,821),27993=>array(41,-65,954,835),27994=>array(24,-54,948,846),27995=>array(42,-70,955,839),27996=>array(47,-65,963,824),27997=>array(52,-45,965,833),27998=>array(50,-54,972,829),27999=>array(50,-76,971,839),28000=>array(40,-65,951,838),28001=>array(60,-63,957,844),28002=>array(63,-44,966,818),28003=>array(56,-64,960,839),28004=>array(52,-65,940,833),28005=>array(45,-35,955,818),28006=>array(42,-52,956,847),28007=>array(53,-43,951,813),28008=>array(57,-68,972,831),28009=>array(29,-63,944,841),28010=>array(62,-63,962,829),28011=>array(46,-60,938,817),28012=>array(48,-49,952,817),28013=>array(47,-70,962,816),28014=>array(46,-68,951,834),28015=>array(54,-47,949,835),28016=>array(55,-65,909,831),28017=>array(54,-70,963,808),28018=>array(54,-72,969,842),28019=>array(57,-76,957,843),28020=>array(53,-60,959,847),28021=>array(43,-74,954,831),28022=>array(46,-69,945,836),28023=>array(42,-62,956,843),28024=>array(42,-69,949,798),28025=>array(43,-67,971,830),28026=>array(54,-67,911,827),28027=>array(50,-65,908,819),28028=>array(42,-65,962,840),28029=>array(53,-66,958,821),28030=>array(53,-70,953,830),28031=>array(56,-78,955,810),28032=>array(51,-66,963,811),28033=>array(55,-76,966,822),28034=>array(48,-68,975,843),28035=>array(52,-71,906,812),28036=>array(55,-68,956,830),28037=>array(28,-26,960,816),28038=>array(44,-67,950,809),28039=>array(50,-38,956,820),28040=>array(64,-67,917,833),28041=>array(48,-58,956,834),28042=>array(55,-52,972,809),28043=>array(56,-71,968,826),28044=>array(49,-61,897,818),28045=>array(50,-67,947,832),28046=>array(36,-66,964,813),28047=>array(63,-68,948,810),28048=>array(59,-67,964,827),28049=>array(49,-68,961,825),28050=>array(45,-68,948,814),28051=>array(74,-65,915,814),28052=>array(53,-67,996,829),28053=>array(42,-68,927,844),28054=>array(39,-48,956,859),28055=>array(57,-70,955,840),28056=>array(37,-53,973,863),28057=>array(36,-68,959,827),28058=>array(54,-64,968,852),28059=>array(61,-61,937,834),28060=>array(41,-59,955,844),28061=>array(52,-54,911,834),28062=>array(44,-59,943,823),28063=>array(44,-58,938,816),28064=>array(49,-63,869,800),28065=>array(41,-70,893,795),28066=>array(51,-67,929,813),28067=>array(22,-63,946,842),28068=>array(45,-59,944,828),28069=>array(50,-61,908,848),28070=>array(62,-53,918,829),28071=>array(46,-62,870,819),28072=>array(45,-60,956,821),28073=>array(53,-41,928,798),28074=>array(45,-67,952,845),28075=>array(51,-65,928,850),28076=>array(67,-67,933,827),28077=>array(76,-69,964,832),28078=>array(63,-66,924,830),28079=>array(39,-64,951,818),28080=>array(58,-67,967,794),28081=>array(50,-69,961,804),28082=>array(52,-68,961,839),28083=>array(66,-52,956,833),28084=>array(43,-56,962,857),28085=>array(53,-63,911,810),28086=>array(69,-50,941,828),28087=>array(85,-71,963,820),28088=>array(53,-65,900,824),28089=>array(51,-72,946,840),28090=>array(72,-73,932,813),28091=>array(54,-72,962,825),28092=>array(49,-61,964,831),28093=>array(66,-71,957,816),28094=>array(82,-68,946,820),28095=>array(54,-51,975,815),28096=>array(54,-74,956,820),28097=>array(54,-71,944,841),28098=>array(78,-65,953,813),28099=>array(50,-50,951,834),28100=>array(65,-62,926,842),28101=>array(40,-58,953,839),28102=>array(54,-64,958,844),28103=>array(48,-65,961,830),28104=>array(65,-80,908,800),28105=>array(84,-71,965,815),28106=>array(57,-70,897,829),28107=>array(28,-63,968,841),28108=>array(45,-62,935,838),28109=>array(66,-77,906,804),28110=>array(66,-67,967,832),28111=>array(88,-74,971,819),28112=>array(85,-69,906,806),28113=>array(31,-66,975,829),28114=>array(35,-66,953,838),28115=>array(63,-72,956,823),28116=>array(69,-56,955,834),28117=>array(80,-60,954,832),28118=>array(38,-65,945,836),28119=>array(59,-62,904,828),28120=>array(47,-58,911,847),28121=>array(40,-62,961,836),28122=>array(48,-66,982,843),28123=>array(71,-71,905,821),28124=>array(74,-75,911,806),28125=>array(40,-62,960,806),28126=>array(29,-65,956,832),28127=>array(37,-54,970,849),28128=>array(46,-64,955,814),28129=>array(47,-62,965,846),28130=>array(79,-70,958,820),28131=>array(50,-58,957,850),28132=>array(40,-61,965,835),28133=>array(40,-64,956,837),28134=>array(50,-36,957,843),28135=>array(50,-39,989,843),28136=>array(57,-61,950,834),28137=>array(47,-73,964,835),28138=>array(39,-58,991,856),28139=>array(41,-42,943,827),28140=>array(24,-61,948,840),28141=>array(70,-68,961,824),28142=>array(43,-59,962,849),28143=>array(50,-66,941,832),28144=>array(38,-53,969,848),28145=>array(44,-68,963,808),28146=>array(57,-79,956,823),28147=>array(50,-61,955,831),28148=>array(34,-33,955,846),28149=>array(47,-65,900,830),28150=>array(52,-65,985,836),28151=>array(55,-60,961,803),28152=>array(39,-64,943,833),28153=>array(42,-37,984,854),28154=>array(42,-60,978,845),28155=>array(53,-55,962,837),28156=>array(49,-68,978,827),28157=>array(64,-53,951,824),28158=>array(51,-69,962,857),28159=>array(70,-68,922,838),28160=>array(76,-80,974,820),28161=>array(47,-68,961,823),28162=>array(51,-60,949,795),28163=>array(41,-70,951,821),28164=>array(44,-62,953,820),28165=>array(39,-67,943,833),28166=>array(42,-57,909,826),28167=>array(39,-63,924,800),28168=>array(42,-60,958,825),28169=>array(39,-67,966,824),28170=>array(59,-72,882,824),28171=>array(48,-31,956,834),28172=>array(46,-60,936,807),28173=>array(54,-75,912,827),28174=>array(52,-60,929,823),28175=>array(52,-62,954,833),28176=>array(36,-63,920,829),28177=>array(50,-48,933,799),28178=>array(36,-65,957,841),28179=>array(46,-57,979,828),28180=>array(50,-48,922,829),28181=>array(42,-57,909,826),28182=>array(60,-72,910,832),28183=>array(51,-61,964,839),28184=>array(82,-69,964,813),28185=>array(34,-65,951,838),28186=>array(47,-65,948,833),28187=>array(54,-76,956,837),28188=>array(50,-72,970,804),28189=>array(33,-76,965,843),28190=>array(81,-71,934,837),28191=>array(46,-62,921,849),28192=>array(53,-68,965,819),28193=>array(49,-71,973,832),28194=>array(29,-54,972,812),28195=>array(33,-29,959,843),28196=>array(63,-77,930,836),28197=>array(48,-70,956,811),28198=>array(51,-59,896,822),28199=>array(62,-71,919,838),28200=>array(46,-76,975,803),28201=>array(36,-61,943,781),28202=>array(61,-80,930,820),28203=>array(45,-65,978,830),28204=>array(64,-65,909,826),28205=>array(65,-65,913,808),28206=>array(50,-65,950,828),28207=>array(47,-56,961,826),28208=>array(54,-67,973,844),28209=>array(49,-49,959,825),28210=>array(55,-39,954,847),28211=>array(40,-70,952,813),28212=>array(62,-65,919,801),28213=>array(49,-70,956,825),28214=>array(57,-79,970,824),28215=>array(49,-58,967,856),28216=>array(54,-77,950,839),28217=>array(49,-50,919,855),28218=>array(28,-71,946,826),28219=>array(46,-72,960,831),28220=>array(58,-65,982,845),28221=>array(51,-74,962,822),28222=>array(43,-57,956,821),28223=>array(45,-67,980,829),28224=>array(52,-76,968,829),28225=>array(49,-72,963,834),28226=>array(52,-60,963,805),28227=>array(44,-61,961,832),28228=>array(80,-69,919,808),28229=>array(39,-46,968,855),28230=>array(43,-69,951,833),28231=>array(41,-73,947,829),28232=>array(48,-59,975,832),28233=>array(50,-71,952,824),28234=>array(49,-69,966,825),28235=>array(46,-71,950,838),28236=>array(52,-63,963,848),28237=>array(54,-64,956,833),28238=>array(43,-64,951,809),28239=>array(47,-71,939,832),28240=>array(48,-65,918,829),28241=>array(45,-48,963,820),28242=>array(52,-71,951,811),28243=>array(43,-53,959,823),28244=>array(50,-65,965,850),28245=>array(40,-73,978,826),28246=>array(68,-68,912,829),28247=>array(69,-61,954,826),28248=>array(69,-65,916,829),28249=>array(69,-38,980,840),28250=>array(54,-70,965,828),28251=>array(38,-65,948,823),28252=>array(49,-65,979,811),28253=>array(55,-69,958,825),28254=>array(60,-77,955,833),28255=>array(42,-37,959,846),28256=>array(55,-66,954,835),28257=>array(52,-66,910,801),28258=>array(55,-72,951,811),28259=>array(48,-44,959,821),28260=>array(43,-57,959,853),28261=>array(45,-70,977,832),28262=>array(52,-46,955,807),28263=>array(44,-68,918,814),28264=>array(49,-67,974,812),28265=>array(45,-64,962,818),28266=>array(49,-63,974,843),28267=>array(50,-67,979,833),28268=>array(25,-67,964,833),28269=>array(29,-65,955,842),28270=>array(34,-50,939,810),28271=>array(51,-68,953,795),28272=>array(43,-48,938,844),28273=>array(56,-65,955,835),28274=>array(41,-56,968,846),28275=>array(55,-64,956,836),28276=>array(53,-40,959,851),28277=>array(45,-60,969,840),28278=>array(45,-70,974,840),28279=>array(49,-70,961,832),28280=>array(52,-70,961,830),28281=>array(49,-68,956,806),28282=>array(64,-65,949,840),28283=>array(45,-64,954,845),28284=>array(48,-46,948,821),28285=>array(65,-62,952,843),28286=>array(54,-61,953,836),28287=>array(49,-39,933,804),28288=>array(38,-59,922,828),28289=>array(44,-70,962,818),28290=>array(44,-67,903,831),28291=>array(48,-64,919,827),28292=>array(48,-63,969,840),28293=>array(29,-63,931,833),28294=>array(42,-69,949,817),28295=>array(29,-52,928,837),28296=>array(46,-68,939,839),28297=>array(48,-64,963,811),28298=>array(48,-67,969,817),28299=>array(48,-33,965,817),28300=>array(46,-61,966,823),28301=>array(49,-69,961,816),28302=>array(44,-54,954,849),28303=>array(37,-65,949,828),28304=>array(48,-70,943,799),28305=>array(51,-72,935,836),28306=>array(43,-71,960,827),28307=>array(65,-71,953,831),28308=>array(50,-74,971,833),28309=>array(50,-60,965,799),28310=>array(54,-67,951,843),28311=>array(38,-70,967,836),28312=>array(31,-41,938,832),28313=>array(45,-70,987,845),28314=>array(55,-68,966,827),28315=>array(55,-74,976,838),28316=>array(45,-66,925,830),28317=>array(43,-67,948,829),28318=>array(64,-72,963,806),28319=>array(48,-66,966,807),28320=>array(55,-45,952,835),28321=>array(35,-70,954,824),28322=>array(48,-34,952,839),28323=>array(38,-67,973,848),28324=>array(41,-71,932,797),28325=>array(53,-64,951,835),28326=>array(46,-69,964,830),28327=>array(51,-62,967,804),28328=>array(51,-59,972,842),28329=>array(26,-60,928,839),28330=>array(26,-69,977,838),28331=>array(53,-59,959,784),28332=>array(53,-59,980,829),28333=>array(53,-59,973,802),28334=>array(52,-68,968,838),28335=>array(66,-70,922,837),28336=>array(58,-49,954,830),28337=>array(44,-66,986,840),28338=>array(34,-64,970,837),28339=>array(51,-71,969,811),28340=>array(56,-67,975,842),28341=>array(56,-71,989,836),28342=>array(53,-68,964,835),28343=>array(46,-65,905,818),28344=>array(56,-67,980,830),28345=>array(62,-65,958,831),28346=>array(54,-60,927,803),28347=>array(57,-63,878,808),28348=>array(57,-41,959,816),28349=>array(36,-64,950,810),28350=>array(45,-64,965,851),28351=>array(45,-70,958,824),28352=>array(55,-73,950,835),28353=>array(44,-65,978,840),28354=>array(51,-62,959,848),28355=>array(36,-52,973,812),28356=>array(46,-65,991,863),28357=>array(53,-68,954,828),28358=>array(55,-68,951,802),28359=>array(53,-69,962,844),28360=>array(63,-64,954,839),28361=>array(47,-62,962,813),28362=>array(55,-63,972,847),28363=>array(45,-65,944,841),28364=>array(38,-58,978,853),28365=>array(48,-73,946,831),28366=>array(46,-65,952,830),28367=>array(35,-49,969,836),28368=>array(43,-68,970,835),28369=>array(49,-62,926,811),28370=>array(57,-74,951,797),28371=>array(41,-66,952,840),28372=>array(57,-65,950,836),28373=>array(27,-64,958,824),28374=>array(53,-71,965,836),28375=>array(43,-49,924,827),28376=>array(48,-61,959,814),28377=>array(47,-39,951,828),28378=>array(44,-79,961,841),28379=>array(43,-76,939,820),28380=>array(54,-70,987,852),28381=>array(44,-51,958,835),28382=>array(43,-72,938,829),28383=>array(37,-63,926,826),28384=>array(46,-64,943,805),28385=>array(38,-59,922,828),28386=>array(37,-43,921,824),28387=>array(37,-76,979,791),28388=>array(39,-57,940,832),28389=>array(45,-54,920,828),28390=>array(46,-60,951,841),28391=>array(46,-54,978,852),28392=>array(43,-70,927,844),28393=>array(40,-39,917,834),28394=>array(45,-69,969,810),28395=>array(50,-68,960,836),28396=>array(44,-64,963,815),28397=>array(55,-74,953,799),28398=>array(55,-75,977,832),28399=>array(45,-68,950,829),28400=>array(61,-65,952,847),28401=>array(61,-71,970,838),28402=>array(45,-68,945,859),28403=>array(36,-80,923,826),28404=>array(36,-68,954,831),28405=>array(49,-73,966,842),28406=>array(56,-73,972,829),28407=>array(63,-64,953,837),28408=>array(38,-64,951,832),28409=>array(54,-66,955,839),28410=>array(50,-49,956,818),28411=>array(50,-64,959,844),28412=>array(54,-60,967,826),28413=>array(56,-68,956,839),28414=>array(57,-68,961,827),28415=>array(46,-69,948,830),28416=>array(33,-72,961,826),28417=>array(44,-60,972,850),28418=>array(23,-65,971,795),28419=>array(51,-73,974,836),28420=>array(55,-81,952,832),28421=>array(55,-70,962,834),28422=>array(29,-64,969,838),28423=>array(51,-74,973,831),28424=>array(51,-68,955,830),28425=>array(41,-70,970,828),28426=>array(35,-72,945,837),28427=>array(41,-67,985,845),28428=>array(35,-41,965,830),28429=>array(50,-71,898,813),28430=>array(52,-73,968,827),28431=>array(46,-67,956,800),28432=>array(66,-71,964,840),28433=>array(47,-52,959,847),28434=>array(57,-74,963,830),28435=>array(37,-58,943,841),28436=>array(40,-66,960,840),28437=>array(38,-65,956,837),28438=>array(47,-62,972,833),28439=>array(46,-54,962,843),28440=>array(51,-53,964,821),28441=>array(69,-68,964,831),28442=>array(42,-31,957,805),28443=>array(46,-45,983,828),28444=>array(47,-52,964,824),28445=>array(50,-65,919,804),28446=>array(56,-69,961,827),28447=>array(51,-28,954,839),28448=>array(28,-63,974,840),28449=>array(56,-70,954,838),28450=>array(38,-68,962,838),28451=>array(37,-58,963,833),28452=>array(38,-63,948,819),28453=>array(50,-52,954,836),28454=>array(38,-68,978,841),28455=>array(47,-67,961,832),28456=>array(61,-70,972,843),28457=>array(38,-62,973,849),28458=>array(41,-62,961,829),28459=>array(36,-68,972,806),28460=>array(47,-69,969,837),28461=>array(57,-70,968,827),28462=>array(49,-69,959,844),28463=>array(50,-60,962,819),28464=>array(40,-68,908,842),28465=>array(39,-71,970,837),28466=>array(44,-68,962,816),28467=>array(41,-67,952,843),28468=>array(47,-76,934,824),28469=>array(33,-58,966,833),28470=>array(34,-35,958,829),28471=>array(37,-71,953,838),28472=>array(48,-68,956,836),28473=>array(56,-68,955,814),28474=>array(51,-72,968,823),28475=>array(47,-71,966,808),28476=>array(51,-70,955,823),28477=>array(63,-74,957,805),28478=>array(45,-62,974,840),28479=>array(36,-68,959,839),28480=>array(43,-50,962,814),28481=>array(38,-66,956,831),28482=>array(54,-58,945,833),28483=>array(50,-71,964,832),28484=>array(51,-65,972,846),28485=>array(45,-72,936,843),28486=>array(37,-63,913,825),28487=>array(43,-66,951,824),28488=>array(39,-55,971,824),28489=>array(44,-54,943,840),28490=>array(36,-61,967,831),28491=>array(40,-65,946,824),28492=>array(48,-46,944,841),28493=>array(40,-43,923,832),28494=>array(48,-71,977,824),28495=>array(51,-70,920,801),28496=>array(52,-64,974,838),28497=>array(30,-63,983,846),28498=>array(50,-64,977,828),28499=>array(55,-52,985,824),28500=>array(57,-68,951,823),28501=>array(47,-71,978,829),28502=>array(53,-45,958,801),28503=>array(49,-66,979,848),28504=>array(33,-66,969,832),28505=>array(31,-60,945,837),28506=>array(41,-59,954,846),28507=>array(55,-65,964,837),28508=>array(53,-48,956,840),28509=>array(44,-70,985,841),28510=>array(42,-65,972,833),28511=>array(58,-64,922,846),28512=>array(40,-70,955,797),28513=>array(49,-71,981,841),28514=>array(37,-66,955,832),28515=>array(48,-68,908,809),28516=>array(71,-69,915,794),28517=>array(69,-72,960,793),28518=>array(44,-64,968,838),28519=>array(52,-70,915,824),28520=>array(69,-62,966,847),28521=>array(49,-74,960,807),28522=>array(52,-71,916,832),28523=>array(49,-68,975,828),28524=>array(49,-69,951,805),28525=>array(40,-71,962,805),28526=>array(58,-79,905,832),28527=>array(44,-62,952,805),28528=>array(57,-68,960,837),28529=>array(57,-56,937,839),28530=>array(57,-70,950,828),28531=>array(50,-71,948,808),28532=>array(36,-63,934,823),28533=>array(38,-69,963,832),28534=>array(48,-63,977,807),28535=>array(52,-72,956,829),28536=>array(32,-71,964,834),28537=>array(32,-51,968,819),28538=>array(38,-68,960,808),28539=>array(48,-68,975,823),28540=>array(53,-49,953,845),28541=>array(51,-71,956,836),28542=>array(49,-74,974,821),28543=>array(36,-65,904,813),28544=>array(33,-38,956,810),28545=>array(46,-60,959,836),28546=>array(42,-69,974,838),28547=>array(33,-78,961,817),28548=>array(46,-52,964,837),28549=>array(45,-50,952,828),28550=>array(51,-61,973,840),28551=>array(44,-56,949,846),28552=>array(45,-70,974,841),28553=>array(35,-66,975,831),28554=>array(48,-62,957,851),28555=>array(50,-71,952,804),28556=>array(37,-64,954,843),28557=>array(42,-62,955,830),28558=>array(36,-59,972,845),28559=>array(34,-58,934,813),28560=>array(46,-75,954,812),28561=>array(40,-49,923,804),28562=>array(42,-56,973,818),28563=>array(49,-68,961,835),28564=>array(32,-50,950,853),28565=>array(55,-69,947,826),28566=>array(46,-68,906,812),28567=>array(37,-60,894,820),28568=>array(32,-51,956,834),28569=>array(41,-70,960,835),28570=>array(32,-68,949,844),28571=>array(32,-74,943,835),28572=>array(52,-58,883,820),28573=>array(44,-59,945,847),28574=>array(68,-74,972,826),28575=>array(62,-63,977,854),28576=>array(40,-46,962,804),28577=>array(39,-67,977,795),28578=>array(59,-68,910,824),28579=>array(41,-65,976,837),28580=>array(35,-68,956,822),28581=>array(66,-73,952,822),28582=>array(45,-69,969,810),28583=>array(43,-41,951,833),28584=>array(41,-43,951,850),28585=>array(87,-68,924,833),28586=>array(55,-77,995,820),28587=>array(66,-65,946,825),28588=>array(62,-79,965,825),28589=>array(71,-71,954,839),28590=>array(19,-65,969,855),28591=>array(69,-70,963,823),28592=>array(63,-69,970,836),28593=>array(45,-68,975,808),28594=>array(68,-69,958,823),28595=>array(24,-68,963,851),28596=>array(35,-73,976,806),28597=>array(35,-55,948,828),28598=>array(42,-44,956,849),28599=>array(36,-57,941,819),28600=>array(52,-57,962,831),28601=>array(28,-56,941,856),28602=>array(75,-53,975,837),28603=>array(45,-56,944,843),28604=>array(42,-65,953,841),28605=>array(56,-66,957,828),28606=>array(37,-57,951,833),28607=>array(71,-71,961,822),28608=>array(40,-72,962,840),28609=>array(54,-59,914,815),28610=>array(28,-68,962,830),28611=>array(34,-75,965,840),28612=>array(74,-68,974,810),28613=>array(39,-54,984,853),28614=>array(47,-67,966,836),28615=>array(41,-44,951,855),28616=>array(43,-68,964,818),28617=>array(44,-66,954,839),28618=>array(69,-78,964,825),28619=>array(77,-70,987,820),28620=>array(49,-71,970,824),28621=>array(70,-57,969,826),28622=>array(74,-68,954,812),28623=>array(68,-65,967,822),28624=>array(68,-64,986,822),28625=>array(39,-63,935,826),28626=>array(49,-58,951,835),28627=>array(28,-68,962,850),28628=>array(51,-71,958,802),28629=>array(53,-70,963,799),28630=>array(69,-63,961,802),28631=>array(39,-63,991,835),28632=>array(39,-60,956,849),28633=>array(52,-49,952,839),28634=>array(52,-65,937,829),28635=>array(43,-62,952,837),28636=>array(54,-54,957,826),28637=>array(53,-69,974,829),28638=>array(42,-64,962,859),28639=>array(48,-71,954,838),28640=>array(35,-59,967,834),28641=>array(40,-68,938,812),28642=>array(45,-70,952,801),28643=>array(59,-73,979,831),28644=>array(40,-58,963,841),28645=>array(40,-60,975,848),28646=>array(35,-63,959,826),28647=>array(55,-68,954,827),28648=>array(53,-41,965,841),28649=>array(51,-68,963,829),28650=>array(49,-43,972,842),28651=>array(47,-55,963,842),28652=>array(53,-64,972,829),28653=>array(58,-60,962,815),28654=>array(20,-68,957,831),28655=>array(41,-65,955,808),28656=>array(50,-61,956,839),28657=>array(46,-73,966,845),28658=>array(45,-78,963,822),28659=>array(52,-69,966,827),28660=>array(47,-68,955,826),28661=>array(79,-57,930,840),28662=>array(47,-65,901,815),28663=>array(51,-64,951,834),28664=>array(46,-65,984,837),28665=>array(24,-29,960,802),28666=>array(35,-69,964,845),28667=>array(50,-76,963,828),28668=>array(25,-73,978,842),28669=>array(45,-72,960,834),28670=>array(43,-71,967,841),28671=>array(56,-67,939,812),28672=>array(56,-70,959,809),28673=>array(46,-78,969,838),28674=>array(63,-61,974,849),28675=>array(58,-57,957,824),28676=>array(76,-68,952,829),28677=>array(52,-43,957,836),28678=>array(41,-71,933,834),28679=>array(45,-83,940,831),28680=>array(45,-70,937,817),28681=>array(36,-59,929,846),28682=>array(40,-52,955,824),28683=>array(48,-65,952,838),28684=>array(42,-62,951,837),28685=>array(47,-54,956,863),28686=>array(47,-67,950,833),28687=>array(61,-67,933,834),28688=>array(59,-62,942,830),28689=>array(34,-68,973,797),28690=>array(41,-43,981,856),28691=>array(39,-67,970,834),28692=>array(49,-71,970,822),28693=>array(37,-71,965,821),28694=>array(44,-65,942,820),28695=>array(41,-53,949,839),28696=>array(48,-67,962,841),28697=>array(51,-70,970,844),28698=>array(39,-59,976,848),28699=>array(48,-71,956,838),28700=>array(36,-69,967,826),28701=>array(38,-59,967,820),28702=>array(44,-65,959,844),28703=>array(40,-65,959,833),28704=>array(46,-63,967,838),28705=>array(35,-69,967,832),28706=>array(41,-64,974,829),28707=>array(24,-42,961,835),28708=>array(51,-72,964,841),28709=>array(45,-71,938,817),28710=>array(40,-65,951,833),28711=>array(45,-68,963,827),28712=>array(42,-71,973,829),28713=>array(40,-66,966,830),28714=>array(55,-65,960,843),28715=>array(46,-73,975,829),28716=>array(42,-73,961,829),28717=>array(50,-70,978,849),28718=>array(50,-66,963,824),28719=>array(55,-63,951,841),28720=>array(48,-62,975,808),28721=>array(42,-63,942,832),28722=>array(40,-67,987,849),28723=>array(50,-64,952,831),28724=>array(36,-70,957,833),28725=>array(53,-76,969,840),28726=>array(54,-63,936,840),28727=>array(44,-68,949,825),28728=>array(41,-60,974,841),28729=>array(39,-62,990,852),28730=>array(43,-65,962,848),28731=>array(37,-71,966,829),28732=>array(39,-58,975,848),28733=>array(49,-64,950,845),28734=>array(59,-70,923,797),28735=>array(52,-65,959,839),28736=>array(53,-61,936,832),28737=>array(56,-65,921,825),28738=>array(55,-62,964,840),28739=>array(59,-59,964,826),28740=>array(46,-63,961,814),28741=>array(45,-46,958,804),28742=>array(36,-45,949,826),28743=>array(41,-62,952,834),28744=>array(45,-65,954,806),28745=>array(51,-68,956,834),28746=>array(50,-67,960,808),28747=>array(46,-76,941,844),28748=>array(49,-70,953,829),28749=>array(49,-67,930,790),28750=>array(39,-36,964,836),28751=>array(33,-67,935,805),28752=>array(56,-37,950,836),28753=>array(46,-67,969,819),28754=>array(46,-69,958,824),28755=>array(36,-68,959,832),28756=>array(41,-66,972,832),28757=>array(41,-62,965,856),28758=>array(49,-65,956,843),28759=>array(48,-55,964,832),28760=>array(34,-72,960,837),28761=>array(52,-78,941,836),28762=>array(37,-66,963,829),28763=>array(50,-64,910,823),28764=>array(48,-71,946,838),28765=>array(46,-69,973,813),28766=>array(32,-71,925,815),28767=>array(55,-69,938,815),28768=>array(47,-66,954,837),28769=>array(45,-57,948,839),28770=>array(44,-70,988,830),28771=>array(50,-69,940,839),28772=>array(28,-63,975,844),28773=>array(45,-68,965,845),28774=>array(34,-73,964,816),28775=>array(39,-36,972,839),28776=>array(44,-77,954,834),28777=>array(38,-36,964,839),28778=>array(48,-67,944,830),28779=>array(85,-66,919,815),28780=>array(39,223,932,469),28781=>array(45,-61,955,771),28782=>array(49,-64,954,829),28783=>array(49,-91,942,814),28784=>array(32,-59,959,782),28785=>array(70,-70,908,825),28786=>array(146,-68,889,832),28787=>array(59,-57,917,833),28788=>array(58,-66,959,827),28789=>array(53,-63,926,790),28790=>array(64,-77,964,824),28791=>array(54,-65,949,829),28792=>array(54,-62,956,840),28793=>array(79,-70,943,837),28794=>array(58,-69,966,819),28795=>array(53,-64,953,830),28796=>array(50,-77,920,832),28797=>array(53,-64,953,817),28798=>array(45,-72,925,835),28799=>array(37,-81,903,826),28800=>array(32,-63,899,826),28801=>array(37,-69,960,800),28802=>array(53,-67,960,826),28803=>array(42,-73,969,780),28804=>array(46,-70,961,825),28805=>array(46,-52,965,804),28806=>array(50,-71,987,835),28807=>array(81,-74,956,838),28808=>array(73,-70,964,825),28809=>array(34,-65,925,828),28810=>array(59,-72,964,840),28811=>array(59,-72,959,832),28812=>array(59,-72,957,849),28813=>array(59,-72,964,832),28814=>array(66,-77,962,829),28815=>array(59,-73,964,837),28816=>array(59,-72,956,834),28817=>array(48,-65,975,831),28818=>array(44,-74,965,833),28819=>array(55,-86,963,820),28820=>array(59,-74,970,828),28821=>array(48,-69,955,836),28822=>array(39,-66,966,826),28823=>array(57,-73,960,829),28824=>array(62,-70,954,840),28825=>array(57,-73,960,840),28826=>array(100,-75,967,827),28827=>array(39,-59,949,833),28828=>array(35,-71,889,822),28829=>array(37,-62,937,827),28830=>array(37,-68,954,823),28831=>array(56,-68,956,822),28832=>array(73,-70,914,831),28833=>array(54,-66,956,826),28834=>array(62,-70,956,831),28835=>array(62,-70,961,831),28836=>array(69,-66,920,829),28837=>array(50,-62,932,829),28838=>array(62,-70,968,844),28839=>array(62,-70,943,831),28840=>array(63,-70,953,852),28841=>array(49,-73,957,829),28842=>array(54,-70,914,831),28843=>array(49,-72,961,822),28844=>array(48,-72,951,831),28845=>array(37,-69,959,830),28846=>array(55,-72,948,839),28847=>array(60,-71,915,830),28848=>array(34,-61,971,849),28849=>array(37,-62,986,838),28850=>array(62,-70,954,838),28851=>array(45,-69,950,827),28852=>array(48,-74,968,825),28853=>array(51,-71,965,834),28854=>array(62,-70,931,831),28855=>array(39,-72,942,828),28856=>array(59,-71,951,842),28857=>array(50,-71,950,830),28858=>array(62,-64,920,838),28859=>array(35,-68,911,823),28860=>array(35,-60,942,832),28861=>array(38,-64,940,830),28862=>array(53,-70,967,820),28863=>array(34,-65,965,844),28864=>array(39,-70,921,825),28865=>array(29,-68,943,830),28866=>array(32,-56,936,833),28867=>array(35,-63,923,823),28868=>array(35,-66,970,846),28869=>array(52,-55,956,832),28870=>array(48,-65,953,832),28871=>array(55,-65,965,830),28872=>array(58,-61,954,831),28873=>array(47,-71,957,843),28874=>array(41,-85,956,841),28875=>array(42,-61,973,849),28876=>array(35,-71,933,837),28877=>array(55,-64,956,826),28878=>array(45,-73,958,788),28879=>array(68,-63,887,845),28880=>array(34,-65,965,844),28881=>array(54,-63,964,829),28882=>array(47,-74,968,824),28883=>array(49,-56,953,832),28884=>array(57,-61,910,831),28885=>array(53,-64,959,832),28886=>array(82,-58,957,839),28887=>array(49,-68,959,835),28888=>array(49,-71,949,830),28889=>array(48,-75,968,839),28890=>array(53,-68,969,833),28891=>array(35,-60,944,826),28892=>array(55,-64,959,837),28893=>array(50,-58,966,785),28894=>array(46,-68,953,830),28895=>array(62,-75,919,834),28896=>array(48,-68,953,829),28897=>array(56,-71,933,831),28898=>array(44,-63,960,827),28899=>array(48,-75,956,829),28900=>array(43,-77,953,832),28901=>array(43,-77,949,825),28902=>array(34,-62,926,831),28903=>array(34,-74,934,818),28904=>array(54,-66,927,824),28905=>array(31,-65,931,841),28906=>array(31,-73,970,836),28907=>array(49,-70,931,812),28908=>array(26,-64,936,833),28909=>array(45,-63,951,829),28910=>array(68,-70,931,828),28911=>array(47,-82,944,842),28912=>array(43,-70,956,826),28913=>array(42,-51,915,839),28914=>array(63,-70,931,825),28915=>array(41,-65,956,831),28916=>array(56,-76,954,820),28917=>array(56,-72,947,831),28918=>array(38,-70,972,826),28919=>array(51,-75,960,837),28920=>array(53,-68,953,824),28921=>array(50,-72,955,842),28922=>array(55,-73,970,831),28923=>array(47,-67,967,829),28924=>array(44,-66,965,826),28925=>array(39,-81,969,839),28926=>array(46,-24,968,815),28927=>array(51,-77,959,833),28928=>array(45,-70,964,823),28929=>array(59,-66,962,826),28930=>array(38,-66,972,836),28931=>array(71,-71,954,835),28932=>array(33,-60,963,804),28933=>array(49,-71,951,832),28934=>array(49,-71,897,824),28935=>array(49,-71,911,833),28936=>array(46,-70,980,846),28937=>array(62,-63,937,798),28938=>array(49,-70,954,832),28939=>array(46,-70,980,829),28940=>array(57,-69,961,849),28941=>array(46,-70,914,829),28942=>array(57,-75,958,829),28943=>array(53,-61,961,775),28944=>array(48,-70,953,826),28945=>array(48,-67,917,826),28946=>array(58,-69,904,826),28947=>array(46,-70,968,833),28948=>array(55,-72,911,828),28949=>array(20,-77,948,832),28950=>array(33,-67,878,825),28951=>array(56,-65,929,835),28952=>array(39,-66,936,817),28953=>array(45,-79,947,831),28954=>array(61,-64,959,823),28955=>array(112,-72,911,781),28956=>array(51,-63,974,832),28957=>array(48,-67,960,833),28958=>array(50,-69,953,830),28959=>array(45,-67,953,831),28960=>array(39,-65,967,845),28961=>array(45,-63,951,844),28962=>array(48,-68,950,829),28963=>array(52,-75,956,785),28964=>array(48,-70,956,844),28965=>array(44,-72,961,845),28966=>array(48,-65,954,836),28967=>array(48,-67,968,826),28968=>array(48,-69,889,826),28969=>array(38,-67,895,826),28970=>array(48,-71,953,846),28971=>array(48,-67,937,826),28972=>array(65,-67,929,826),28973=>array(69,-62,936,839),28974=>array(38,-66,977,841),28975=>array(56,-70,957,837),28976=>array(53,-79,893,837),28977=>array(37,-66,971,840),28978=>array(49,-69,966,841),28979=>array(65,-67,954,834),28980=>array(40,-61,951,838),28981=>array(46,-73,910,824),28982=>array(62,-67,961,838),28983=>array(48,-67,951,850),28984=>array(59,-67,959,803),28985=>array(48,-67,897,826),28986=>array(50,-72,955,827),28987=>array(48,-67,905,826),28988=>array(56,-74,963,829),28989=>array(69,-70,959,821),28990=>array(37,-61,971,840),28991=>array(48,-68,967,855),28992=>array(37,-61,907,829),28993=>array(43,-70,957,832),28994=>array(40,-71,953,826),28995=>array(64,-70,979,847),28996=>array(41,-72,955,829),28997=>array(32,-72,971,829),28998=>array(38,-63,969,835),28999=>array(60,-65,959,829),29000=>array(28,-67,971,826),29001=>array(46,-69,968,830),29002=>array(51,-67,959,841),29003=>array(51,-71,957,826),29004=>array(42,-71,948,849),29005=>array(36,-73,986,827),29006=>array(55,-77,955,839),29007=>array(48,-67,933,826),29008=>array(50,-70,977,830),29009=>array(66,-70,961,831),29010=>array(45,-65,967,846),29011=>array(40,-73,953,828),29012=>array(36,-70,941,838),29013=>array(43,-72,949,793),29014=>array(40,-73,967,844),29015=>array(56,-72,975,835),29016=>array(47,-68,977,826),29017=>array(53,-63,953,832),29018=>array(38,-66,967,807),29019=>array(38,-73,977,788),29020=>array(46,-67,954,827),29021=>array(44,-79,897,823),29022=>array(34,-71,940,836),29023=>array(45,-75,906,825),29024=>array(32,-57,973,836),29025=>array(35,-75,977,829),29026=>array(66,-68,938,833),29027=>array(42,-68,977,829),29028=>array(44,-68,964,833),29029=>array(39,-62,969,834),29030=>array(48,-66,955,843),29031=>array(67,-62,950,788),29032=>array(35,-71,960,828),29033=>array(49,-76,959,829),29034=>array(48,-75,952,842),29035=>array(50,-62,974,840),29036=>array(38,-75,954,826),29037=>array(49,-61,954,830),29038=>array(54,-79,955,831),29039=>array(50,-65,961,832),29040=>array(46,-75,906,829),29041=>array(51,-69,911,828),29042=>array(49,-67,962,837),29043=>array(26,-70,883,823),29044=>array(56,-69,950,828),29045=>array(51,-67,959,831),29046=>array(43,-55,970,837),29047=>array(43,-73,969,846),29048=>array(50,-63,939,832),29049=>array(51,-69,966,829),29050=>array(49,-69,950,826),29051=>array(44,-72,956,836),29052=>array(56,-69,926,850),29053=>array(41,-72,921,822),29054=>array(51,-69,950,828),29055=>array(46,-71,959,838),29056=>array(49,-74,964,827),29057=>array(51,-68,952,836),29058=>array(44,-68,967,831),29059=>array(47,-69,962,840),29060=>array(34,-71,964,847),29061=>array(57,-75,956,820),29062=>array(51,-67,956,829),29063=>array(57,-65,959,843),29064=>array(43,-72,949,801),29065=>array(53,-80,964,826),29066=>array(40,-70,947,844),29067=>array(58,-72,968,838),29068=>array(51,-63,905,831),29069=>array(51,-72,937,843),29070=>array(48,-71,956,827),29071=>array(45,-72,949,834),29072=>array(46,-77,956,832),29073=>array(51,-69,966,850),29074=>array(58,-63,949,839),29075=>array(56,-69,928,839),29076=>array(51,-71,962,835),29077=>array(56,-69,969,828),29078=>array(53,-76,933,835),29079=>array(40,-72,981,850),29080=>array(42,-63,890,830),29081=>array(43,-72,949,785),29082=>array(51,-55,959,835),29083=>array(32,-61,945,832),29084=>array(49,-52,977,830),29085=>array(40,-69,968,846),29086=>array(48,-61,977,825),29087=>array(38,-67,960,831),29088=>array(39,-70,909,835),29089=>array(51,-72,955,826),29090=>array(51,-69,962,843),29091=>array(51,-69,953,833),29092=>array(48,-62,953,827),29093=>array(32,-70,973,824),29094=>array(56,-65,949,837),29095=>array(46,-70,973,839),29096=>array(35,-63,964,830),29097=>array(42,-71,964,826),29098=>array(41,-71,931,825),29099=>array(51,-69,962,851),29100=>array(30,-72,940,833),29101=>array(35,-66,962,835),29102=>array(49,-70,968,827),29103=>array(46,-59,969,843),29104=>array(54,-61,956,825),29105=>array(47,-69,949,831),29106=>array(41,-76,968,821),29107=>array(43,-62,983,833),29108=>array(36,-61,964,838),29109=>array(32,-67,951,848),29110=>array(26,-67,962,828),29111=>array(43,-62,917,853),29112=>array(32,-61,964,835),29113=>array(41,-62,965,835),29114=>array(37,-65,956,836),29115=>array(34,-63,991,848),29116=>array(42,-73,958,826),29117=>array(38,-68,946,824),29118=>array(36,-75,956,837),29119=>array(54,-75,967,831),29120=>array(47,-68,954,825),29121=>array(43,-65,953,832),29122=>array(46,-67,956,826),29123=>array(45,-75,959,831),29124=>array(47,-66,970,842),29125=>array(41,-75,971,826),29126=>array(44,-68,969,826),29127=>array(47,-67,954,835),29128=>array(35,-85,963,837),29129=>array(46,-73,973,837),29130=>array(44,-63,974,839),29131=>array(38,-73,963,837),29132=>array(51,-75,967,827),29133=>array(46,-67,954,836),29134=>array(41,-73,969,850),29135=>array(50,-66,925,830),29136=>array(49,-68,959,833),29137=>array(37,-61,933,844),29138=>array(48,-74,955,829),29139=>array(39,-71,968,836),29140=>array(32,-65,965,837),29141=>array(45,-67,952,828),29142=>array(43,-56,954,833),29143=>array(22,-68,911,829),29144=>array(48,-67,914,829),29145=>array(53,-72,968,798),29146=>array(44,-74,969,828),29147=>array(43,-74,972,785),29148=>array(43,-65,928,829),29149=>array(46,-67,967,824),29150=>array(34,-67,969,837),29151=>array(84,-68,903,832),29152=>array(54,-69,952,825),29153=>array(42,-70,957,825),29154=>array(47,-67,969,838),29155=>array(44,-68,968,849),29156=>array(44,-68,951,822),29157=>array(33,-71,973,829),29158=>array(38,-69,971,836),29159=>array(36,-74,960,823),29160=>array(37,-69,962,847),29161=>array(37,-71,962,845),29162=>array(30,-63,979,836),29163=>array(61,-79,969,847),29164=>array(53,-64,974,835),29165=>array(61,-79,927,828),29166=>array(55,-80,967,830),29167=>array(43,-77,956,820),29168=>array(49,-73,977,829),29169=>array(53,-75,976,830),29170=>array(46,-72,951,843),29171=>array(49,-75,977,823),29172=>array(39,-73,971,857),29173=>array(39,-73,954,835),29174=>array(41,-70,984,838),29175=>array(48,-70,921,857),29176=>array(41,-70,945,830),29177=>array(43,-67,972,784),29178=>array(63,-63,943,853),29179=>array(54,-70,971,831),29180=>array(39,-70,954,830),29181=>array(44,-67,952,833),29182=>array(48,-67,967,833),29183=>array(37,-64,957,831),29184=>array(48,-69,951,831),29185=>array(41,-69,951,823),29186=>array(57,-69,964,840),29187=>array(45,-65,961,831),29188=>array(45,-65,948,827),29189=>array(45,-65,963,827),29190=>array(37,-72,967,828),29191=>array(49,-63,973,839),29192=>array(33,-68,965,838),29193=>array(47,-76,971,847),29194=>array(33,-68,962,839),29195=>array(55,-68,930,833),29196=>array(37,-75,948,841),29197=>array(36,-73,972,847),29198=>array(37,-64,990,845),29199=>array(27,-64,956,827),29200=>array(43,-71,954,830),29201=>array(43,-71,980,837),29202=>array(61,-80,961,858),29203=>array(54,-67,918,829),29204=>array(46,-62,972,841),29205=>array(50,-73,971,843),29206=>array(40,-63,962,843),29207=>array(36,-68,953,826),29208=>array(40,-83,979,841),29209=>array(36,-71,970,838),29210=>array(51,-75,973,824),29211=>array(53,-70,923,830),29212=>array(53,-70,962,834),29213=>array(39,-63,956,843),29214=>array(41,-70,962,831),29215=>array(36,-64,962,837),29216=>array(36,-68,960,830),29217=>array(36,-73,949,842),29218=>array(44,-75,958,845),29219=>array(47,-76,972,831),29220=>array(47,-66,942,830),29221=>array(47,-68,933,827),29222=>array(35,-67,975,838),29223=>array(48,-73,953,824),29224=>array(35,-70,968,830),29225=>array(40,-73,954,822),29226=>array(63,-64,944,835),29227=>array(83,181,938,697),29228=>array(50,-62,958,837),29229=>array(71,-73,924,824),29230=>array(50,-62,958,837),29231=>array(56,-67,950,846),29232=>array(54,-65,957,846),29233=>array(52,-73,943,824),29234=>array(33,-70,934,852),29235=>array(69,-52,916,844),29236=>array(74,-66,970,829),29237=>array(64,-61,943,842),29238=>array(95,-57,923,825),29239=>array(67,-62,951,823),29240=>array(45,-16,954,844),29241=>array(52,-79,964,839),29242=>array(55,-62,961,843),29243=>array(48,-63,960,840),29244=>array(66,-11,962,773),29245=>array(52,-69,963,835),29246=>array(50,-73,940,785),29247=>array(49,-69,732,820),29248=>array(42,-65,969,825),29249=>array(46,-71,951,829),29250=>array(46,-64,954,851),29251=>array(46,-64,968,831),29252=>array(36,-71,969,841),29253=>array(46,-73,949,851),29254=>array(39,-67,951,833),29255=>array(48,-75,895,829),29256=>array(34,-73,966,818),29257=>array(57,-77,957,826),29258=>array(50,-74,909,821),29259=>array(42,-70,966,840),29260=>array(42,-62,944,837),29261=>array(18,-75,927,819),29262=>array(18,-66,960,848),29263=>array(39,-57,950,853),29264=>array(18,-76,940,836),29265=>array(32,-78,922,833),29266=>array(34,-66,968,831),29267=>array(40,-70,957,846),29268=>array(23,-71,959,838),29269=>array(34,-66,959,839),29270=>array(31,-68,951,839),29271=>array(40,-73,949,851),29272=>array(33,-84,955,835),29273=>array(59,-53,929,780),29274=>array(51,-61,939,836),29275=>array(81,-68,939,830),29276=>array(155,-67,719,829),29277=>array(47,-67,938,829),29278=>array(51,-62,914,832),29279=>array(53,-67,947,844),29280=>array(43,-62,964,838),29281=>array(42,-62,953,829),29282=>array(56,-65,944,833),29283=>array(57,-49,914,844),29284=>array(57,-48,931,844),29285=>array(57,-67,954,849),29286=>array(34,-75,937,828),29287=>array(50,-68,974,840),29288=>array(50,-64,957,843),29289=>array(68,-73,921,829),29290=>array(48,-71,954,833),29291=>array(48,-71,949,825),29292=>array(39,-74,927,823),29293=>array(49,-69,937,826),29294=>array(55,-68,972,844),29295=>array(49,-67,949,829),29296=>array(50,-72,908,833),29297=>array(50,-66,960,833),29298=>array(44,-65,954,831),29299=>array(44,-66,960,825),29300=>array(48,-67,968,843),29301=>array(82,-61,934,845),29302=>array(43,-67,976,838),29303=>array(58,-69,984,827),29304=>array(54,-52,962,848),29305=>array(50,-68,944,831),29306=>array(26,-62,923,830),29307=>array(42,-68,950,838),29308=>array(52,-68,951,825),29309=>array(76,-67,945,838),29310=>array(52,-62,956,833),29311=>array(52,-52,955,842),29312=>array(45,-69,933,800),29313=>array(68,-61,945,835),29314=>array(59,-63,954,849),29315=>array(58,-65,956,848),29316=>array(45,-65,949,838),29317=>array(69,-67,918,827),29318=>array(58,-65,953,838),29319=>array(46,-67,959,839),29320=>array(61,-72,968,830),29321=>array(66,-67,957,837),29322=>array(25,-62,932,830),29323=>array(44,-67,947,830),29324=>array(42,-77,973,827),29325=>array(39,-68,962,830),29326=>array(65,-64,962,831),29327=>array(28,-79,906,832),29328=>array(47,-73,954,826),29329=>array(41,-75,970,825),29330=>array(42,-71,950,826),29331=>array(53,-69,914,830),29332=>array(42,-71,974,851),29333=>array(43,-72,952,823),29334=>array(60,-68,954,847),29335=>array(43,-65,965,850),29336=>array(57,-69,947,843),29337=>array(42,-73,947,848),29338=>array(43,-68,958,824),29339=>array(52,-68,965,834),29340=>array(22,-73,973,837),29341=>array(45,-65,954,835),29342=>array(51,-70,976,825),29343=>array(62,-67,912,781),29344=>array(33,-70,965,853),29345=>array(33,-70,944,825),29346=>array(39,-84,956,835),29347=>array(37,-76,973,837),29348=>array(38,-67,980,826),29349=>array(29,-69,966,840),29350=>array(28,-59,983,833),29351=>array(33,-63,960,841),29352=>array(40,-67,947,840),29353=>array(52,-73,975,833),29354=>array(30,-65,972,846),29355=>array(39,-66,946,839),29356=>array(77,-71,949,826),29357=>array(257,-63,643,790),29358=>array(60,-73,962,834),29359=>array(60,-59,933,809),29360=>array(42,-70,963,829),29361=>array(33,-69,952,833),29362=>array(103,-71,950,824),29363=>array(97,-56,897,851),29364=>array(35,-64,945,824),29365=>array(57,-55,960,829),29366=>array(44,-68,940,823),29367=>array(34,-65,911,832),29368=>array(29,-65,889,798),29369=>array(40,-70,956,817),29370=>array(47,-69,959,832),29371=>array(52,-62,950,840),29372=>array(42,-69,959,823),29373=>array(48,-62,951,820),29374=>array(92,-62,942,831),29375=>array(52,-65,943,829),29376=>array(40,-69,951,818),29377=>array(44,-63,956,839),29378=>array(50,-66,948,807),29379=>array(24,-45,944,830),29380=>array(50,-70,972,825),29381=>array(43,-57,943,807),29382=>array(57,-61,913,833),29383=>array(73,-61,964,835),29384=>array(32,-60,942,799),29385=>array(39,-44,950,813),29386=>array(45,-68,973,785),29387=>array(38,-72,973,804),29388=>array(47,-47,951,827),29389=>array(47,-52,958,834),29390=>array(69,-64,920,822),29391=>array(69,-55,943,831),29392=>array(32,-77,970,838),29393=>array(47,-76,960,836),29394=>array(61,-68,934,822),29395=>array(47,-70,958,835),29396=>array(32,-80,963,796),29397=>array(35,-73,920,831),29398=>array(35,-66,966,834),29399=>array(60,-61,921,842),29400=>array(36,-70,963,824),29401=>array(47,-54,957,801),29402=>array(43,-50,958,820),29403=>array(70,-66,886,843),29404=>array(51,-68,953,830),29405=>array(41,-58,934,836),29406=>array(43,-61,924,849),29407=>array(46,-50,962,816),29408=>array(48,-71,969,811),29409=>array(52,-65,963,812),29410=>array(53,-67,973,839),29411=>array(47,-67,963,833),29412=>array(49,-73,953,823),29413=>array(64,-64,909,836),29414=>array(43,-68,956,827),29415=>array(64,-64,958,834),29416=>array(45,-80,967,818),29417=>array(48,-59,954,824),29418=>array(50,-67,911,811),29419=>array(39,-60,955,826),29420=>array(33,-58,948,827),29421=>array(29,-63,942,832),29422=>array(29,-71,930,822),29423=>array(36,-60,955,837),29424=>array(32,-60,920,837),29425=>array(33,-74,959,822),29426=>array(20,-62,948,832),29427=>array(29,-62,971,855),29428=>array(50,-50,958,831),29429=>array(50,-62,957,826),29430=>array(45,-71,956,834),29431=>array(75,-65,918,815),29432=>array(45,-57,958,820),29433=>array(31,-63,967,833),29434=>array(47,-62,959,844),29435=>array(41,-64,973,854),29436=>array(37,-75,968,831),29437=>array(45,-70,962,794),29438=>array(47,-71,960,826),29439=>array(58,-65,971,792),29440=>array(45,-69,966,823),29441=>array(54,-64,917,830),29442=>array(51,-64,956,816),29443=>array(32,-68,946,832),29444=>array(52,-60,965,846),29445=>array(52,-65,950,829),29446=>array(38,-68,965,831),29447=>array(49,-70,955,823),29448=>array(65,-67,955,832),29449=>array(65,-71,957,833),29450=>array(47,-65,953,832),29451=>array(40,-62,962,845),29452=>array(38,-70,969,826),29453=>array(55,-65,984,836),29454=>array(39,-69,939,817),29455=>array(48,-76,908,818),29456=>array(48,-54,970,820),29457=>array(62,-63,958,782),29458=>array(101,-72,962,824),29459=>array(48,-68,968,817),29460=>array(53,-65,951,845),29461=>array(23,-61,945,831),29462=>array(53,-68,911,808),29463=>array(47,-62,955,835),29464=>array(46,-68,914,826),29465=>array(35,-68,963,837),29466=>array(59,-70,953,842),29467=>array(49,-59,958,808),29468=>array(46,-65,954,837),29469=>array(49,-67,953,819),29470=>array(40,-65,978,850),29471=>array(50,-63,968,827),29472=>array(40,-74,960,829),29473=>array(35,-64,894,808),29474=>array(62,-68,927,829),29475=>array(43,-73,959,813),29476=>array(35,-66,959,809),29477=>array(44,-64,964,809),29478=>array(46,-74,961,792),29479=>array(72,-69,923,793),29480=>array(32,-60,959,841),29481=>array(42,-61,951,803),29482=>array(49,-56,921,836),29483=>array(24,-69,933,824),29484=>array(56,-65,911,803),29485=>array(49,-66,966,828),29486=>array(55,-54,955,842),29487=>array(61,-69,950,830),29488=>array(42,-64,974,831),29489=>array(43,-64,961,819),29490=>array(68,-65,933,790),29491=>array(33,-61,967,819),29492=>array(36,-71,975,827),29493=>array(65,-73,929,825),29494=>array(40,-71,955,840),29495=>array(57,-69,970,845),29496=>array(40,-74,897,815),29497=>array(41,-53,962,835),29498=>array(41,-64,966,850),29499=>array(30,-62,962,831),29500=>array(20,-71,943,829),29501=>array(38,-73,950,789),29502=>array(25,-72,929,819),29503=>array(42,-69,977,833),29504=>array(30,-78,977,833),29505=>array(40,-61,922,819),29506=>array(39,-75,979,804),29507=>array(45,-55,969,842),29508=>array(37,-66,970,826),29509=>array(39,-67,954,840),29510=>array(50,-64,979,849),29511=>array(50,-64,974,828),29512=>array(50,-57,962,842),29513=>array(35,-70,984,836),29514=>array(40,-73,963,845),29515=>array(38,-74,960,852),29516=>array(29,-72,973,812),29517=>array(53,-65,958,851),29518=>array(39,-64,970,843),29519=>array(44,-72,971,823),29520=>array(44,-64,949,840),29521=>array(19,-74,953,822),29522=>array(25,-68,949,830),29523=>array(44,-71,960,838),29524=>array(44,-74,960,852),29525=>array(44,-65,953,833),29526=>array(59,-75,947,827),29527=>array(44,-74,981,805),29528=>array(33,-54,965,857),29529=>array(23,-80,977,826),29530=>array(39,-73,955,827),29531=>array(42,-68,983,827),29532=>array(44,-74,954,832),29533=>array(56,-68,924,824),29534=>array(51,-42,962,838),29535=>array(41,-70,961,833),29536=>array(35,-61,967,846),29537=>array(52,-57,932,833),29538=>array(39,-67,973,835),29539=>array(45,-67,972,833),29540=>array(44,-73,973,837),29541=>array(46,-75,960,835),29542=>array(37,-63,943,827),29543=>array(39,-55,965,826),29544=>array(64,-66,920,791),29545=>array(41,-66,967,826),29546=>array(32,-62,984,863),29547=>array(26,-63,975,864),29548=>array(44,-67,960,838),29549=>array(12,-60,936,838),29550=>array(34,-67,975,834),29551=>array(49,-62,966,828),29552=>array(40,-67,957,816),29553=>array(57,-66,960,842),29554=>array(30,-64,964,840),29555=>array(47,-66,951,791),29556=>array(37,-65,951,831),29557=>array(36,-74,971,842),29558=>array(39,-76,969,824),29559=>array(40,-71,972,838),29560=>array(59,-67,972,829),29561=>array(40,-72,954,830),29562=>array(37,-71,975,833),29563=>array(38,-76,958,831),29564=>array(35,-64,973,829),29565=>array(36,-69,987,842),29566=>array(43,-67,959,835),29567=>array(43,-74,963,808),29568=>array(41,-64,959,822),29569=>array(38,-67,961,813),29570=>array(38,-71,963,823),29571=>array(36,-60,965,831),29572=>array(95,-57,915,819),29573=>array(65,-70,973,852),29574=>array(44,-65,956,818),29575=>array(72,-69,928,840),29576=>array(64,-71,970,836),29577=>array(117,0,908,753),29578=>array(85,-30,935,770),29579=>array(92,14,908,766),29580=>array(81,-38,943,822),29581=>array(59,-17,934,825),29582=>array(71,-69,956,790),29583=>array(71,-76,892,823),29584=>array(51,-60,960,775),29585=>array(37,-67,936,762),29586=>array(57,-23,957,763),29587=>array(64,-69,920,829),29588=>array(57,-70,912,822),29589=>array(40,-65,951,787),29590=>array(41,-64,979,835),29591=>array(54,-74,953,785),29592=>array(54,-26,957,778),29593=>array(54,-67,922,825),29594=>array(54,-63,927,769),29595=>array(51,-60,909,787),29596=>array(44,-60,957,806),29597=>array(50,-73,949,821),29598=>array(49,-64,963,833),29599=>array(51,-58,972,827),29600=>array(48,-65,987,855),29601=>array(44,-75,956,775),29602=>array(42,-62,984,820),29603=>array(47,-64,935,841),29604=>array(42,-73,954,823),29605=>array(60,-71,905,785),29606=>array(47,-63,991,837),29607=>array(47,-60,964,834),29608=>array(56,-17,952,767),29609=>array(51,-68,958,779),29610=>array(43,-62,975,831),29611=>array(60,-59,957,840),29612=>array(55,-78,956,779),29613=>array(44,-67,958,823),29614=>array(42,-67,893,825),29615=>array(38,-57,951,782),29616=>array(33,-59,930,788),29617=>array(45,-33,950,828),29618=>array(37,-68,964,840),29619=>array(39,-65,953,835),29620=>array(50,-20,957,824),29621=>array(51,-73,955,827),29622=>array(47,-71,956,782),29623=>array(39,-67,945,832),29624=>array(48,-38,956,827),29625=>array(43,-55,961,829),29626=>array(35,-48,915,826),29627=>array(64,-64,969,830),29628=>array(46,-43,966,810),29629=>array(46,-54,909,849),29630=>array(49,-71,917,780),29631=>array(49,-74,906,783),29632=>array(66,-63,882,846),29633=>array(66,-29,961,779),29634=>array(50,-65,961,779),29635=>array(47,-73,956,831),29636=>array(47,-12,952,827),29637=>array(53,-61,917,838),29638=>array(49,-72,952,842),29639=>array(49,-27,954,783),29640=>array(43,-70,907,830),29641=>array(41,-55,964,794),29642=>array(54,-61,951,789),29643=>array(45,-70,911,830),29644=>array(48,-30,963,824),29645=>array(67,-72,974,849),29646=>array(53,-52,964,847),29647=>array(53,-13,950,760),29648=>array(52,-64,949,829),29649=>array(32,-61,926,824),29650=>array(59,-72,954,827),29651=>array(58,-66,971,837),29652=>array(57,-64,954,832),29653=>array(57,-65,959,835),29654=>array(57,-65,955,821),29655=>array(52,-59,957,827),29656=>array(51,-67,951,836),29657=>array(41,-68,965,831),29658=>array(58,-71,907,771),29659=>array(60,-68,954,828),29660=>array(54,-67,954,833),29661=>array(57,-71,905,780),29662=>array(45,-66,972,840),29663=>array(40,-66,993,789),29664=>array(66,-62,978,837),29665=>array(50,-60,951,795),29666=>array(76,-71,957,781),29667=>array(62,-59,914,837),29668=>array(25,-64,963,834),29669=>array(25,-66,949,789),29670=>array(25,-55,900,875),29671=>array(50,-64,969,835),29672=>array(58,-69,958,829),29673=>array(45,-67,956,833),29674=>array(38,-21,951,831),29675=>array(50,-67,966,840),29676=>array(60,-61,971,835),29677=>array(50,-61,951,811),29678=>array(45,-72,977,788),29679=>array(38,-32,959,833),29680=>array(38,-60,899,829),29681=>array(38,-52,959,782),29682=>array(37,-69,920,764),29683=>array(49,-58,957,834),29684=>array(49,-64,958,828),29685=>array(56,-14,954,788),29686=>array(56,-68,915,822),29687=>array(36,-64,962,833),29688=>array(58,-71,953,775),29689=>array(36,-68,951,834),29690=>array(62,-69,956,787),29691=>array(35,-69,955,843),29692=>array(57,-73,959,782),29693=>array(44,-64,973,832),29694=>array(56,-65,944,780),29695=>array(56,-71,969,780),29696=>array(57,-71,964,830),29697=>array(59,-73,968,831),29698=>array(61,-62,930,845),29699=>array(53,-63,959,831),29700=>array(57,-65,894,782),29701=>array(46,-66,965,815),29702=>array(35,-16,945,775),29703=>array(47,-63,963,833),29704=>array(55,-67,954,819),29705=>array(30,-70,960,830),29706=>array(43,-67,958,789),29707=>array(53,-68,953,837),29708=>array(54,-71,967,824),29709=>array(47,-65,900,832),29710=>array(57,-19,975,817),29711=>array(32,-49,938,827),29712=>array(35,-65,933,828),29713=>array(35,-67,940,833),29714=>array(43,-65,963,846),29715=>array(35,-69,968,828),29716=>array(35,-83,949,831),29717=>array(35,-65,957,841),29718=>array(47,-70,954,835),29719=>array(35,-71,943,839),29720=>array(35,-65,960,833),29721=>array(35,-68,965,835),29722=>array(52,-67,964,787),29723=>array(30,-67,958,786),29724=>array(35,-65,972,836),29725=>array(55,-74,963,787),29726=>array(55,-26,945,796),29727=>array(35,-65,955,843),29728=>array(53,-72,965,826),29729=>array(55,-76,962,822),29730=>array(32,-65,971,774),29731=>array(55,-68,951,838),29732=>array(43,-59,967,849),29733=>array(39,-67,940,834),29734=>array(48,-61,957,841),29735=>array(63,-22,958,784),29736=>array(53,-57,970,790),29737=>array(76,-67,918,787),29738=>array(50,-68,960,836),29739=>array(50,-71,959,831),29740=>array(49,-65,967,836),29741=>array(57,-67,962,830),29742=>array(47,-62,959,821),29743=>array(47,-65,924,837),29744=>array(53,-65,980,838),29745=>array(63,-72,911,774),29746=>array(47,-71,958,832),29747=>array(37,-63,964,826),29748=>array(34,-74,960,802),29749=>array(55,-54,959,791),29750=>array(71,-23,941,787),29751=>array(35,-53,976,820),29752=>array(54,-71,953,825),29753=>array(50,-64,960,798),29754=>array(53,-59,962,831),29755=>array(35,-23,982,843),29756=>array(33,-55,971,852),29757=>array(35,-69,959,835),29758=>array(35,-66,971,774),29759=>array(43,-62,967,793),29760=>array(45,-70,912,827),29761=>array(55,-65,930,788),29762=>array(51,-70,900,783),29763=>array(51,-64,970,842),29764=>array(43,-27,954,832),29765=>array(51,-70,969,788),29766=>array(36,-27,954,782),29767=>array(37,-66,948,835),29768=>array(40,-61,973,796),29769=>array(40,-52,963,823),29770=>array(45,-75,963,825),29771=>array(47,-65,960,832),29772=>array(47,-72,975,788),29773=>array(46,-77,977,832),29774=>array(53,-73,960,822),29775=>array(48,-70,951,845),29776=>array(50,-72,954,839),29777=>array(40,-51,960,850),29778=>array(39,-77,954,780),29779=>array(48,-62,965,835),29780=>array(48,-69,970,846),29781=>array(38,-67,969,789),29782=>array(38,-69,970,840),29783=>array(47,-65,982,843),29784=>array(47,-65,952,783),29785=>array(56,-65,920,841),29786=>array(69,-62,893,830),29787=>array(31,-68,962,829),29788=>array(30,-65,972,816),29789=>array(43,-30,948,851),29790=>array(62,-68,939,833),29791=>array(63,-46,958,785),29792=>array(37,-65,913,834),29793=>array(69,-67,954,840),29794=>array(53,-70,965,824),29795=>array(63,-72,965,836),29796=>array(46,-62,959,841),29797=>array(46,-32,964,783),29798=>array(63,-60,928,839),29799=>array(59,-68,971,835),29800=>array(36,-61,959,789),29801=>array(69,-19,935,839),29802=>array(60,-61,911,787),29803=>array(60,-63,937,835),29804=>array(54,-28,954,843),29805=>array(44,-67,956,850),29806=>array(56,-72,977,781),29807=>array(41,-61,954,798),29808=>array(53,-65,947,856),29809=>array(36,-64,955,840),29810=>array(45,-65,995,858),29811=>array(42,-29,951,839),29812=>array(47,-89,964,824),29813=>array(50,-69,971,787),29814=>array(40,-64,913,822),29815=>array(35,-70,944,827),29816=>array(35,-63,943,830),29817=>array(62,-77,967,818),29818=>array(45,-67,930,839),29819=>array(53,-66,955,802),29820=>array(53,-77,952,819),29821=>array(58,-71,968,826),29822=>array(38,-21,946,828),29823=>array(62,-22,957,792),29824=>array(45,-62,962,839),29825=>array(56,-43,972,837),29826=>array(45,-33,972,829),29827=>array(39,-69,943,833),29828=>array(51,-65,952,847),29829=>array(62,-72,982,822),29830=>array(45,-62,957,800),29831=>array(38,-71,972,828),29832=>array(48,-77,983,826),29833=>array(41,-64,962,833),29834=>array(56,-65,959,824),29835=>array(45,-68,952,828),29836=>array(45,-78,953,834),29837=>array(37,-68,945,831),29838=>array(39,-81,928,775),29839=>array(39,-72,988,841),29840=>array(38,-65,975,841),29841=>array(38,-65,961,836),29842=>array(52,-17,964,832),29843=>array(31,-53,957,829),29844=>array(51,-72,892,827),29845=>array(50,-67,950,783),29846=>array(45,-65,969,799),29847=>array(60,-46,954,818),29848=>array(57,-66,959,837),29849=>array(57,-67,969,850),29850=>array(50,-67,920,787),29851=>array(32,-67,954,831),29852=>array(37,-74,923,824),29853=>array(37,-70,966,833),29854=>array(47,-63,964,828),29855=>array(36,-57,951,801),29856=>array(43,-64,973,836),29857=>array(39,-64,967,844),29858=>array(62,-71,926,797),29859=>array(45,-61,972,839),29860=>array(48,-35,979,826),29861=>array(48,-70,977,830),29862=>array(48,-63,985,840),29863=>array(48,-39,946,836),29864=>array(37,-66,979,839),29865=>array(48,-64,980,837),29866=>array(45,-70,966,784),29867=>array(45,-62,935,836),29868=>array(50,-71,962,845),29869=>array(48,-73,971,811),29870=>array(42,-30,956,848),29871=>array(42,-64,994,858),29872=>array(40,-61,962,808),29873=>array(46,-67,970,782),29874=>array(47,-64,959,816),29875=>array(46,-69,966,816),29876=>array(50,-69,961,826),29877=>array(40,-66,969,840),29878=>array(50,-37,949,823),29879=>array(35,-71,973,832),29880=>array(62,-77,941,831),29881=>array(41,-65,968,833),29882=>array(84,-37,938,836),29883=>array(53,-68,949,785),29884=>array(40,-23,957,839),29885=>array(53,-42,962,799),29886=>array(60,-71,963,837),29887=>array(41,-63,981,841),29888=>array(49,-72,944,780),29889=>array(44,-74,967,823),29890=>array(49,-35,955,819),29891=>array(51,-65,928,786),29892=>array(40,-67,962,836),29893=>array(36,-70,972,839),29894=>array(40,-61,962,813),29895=>array(40,-64,963,789),29896=>array(35,-62,974,830),29897=>array(40,-72,958,829),29898=>array(56,-65,975,845),29899=>array(31,-66,968,839),29900=>array(40,-67,965,847),29901=>array(28,-67,969,831),29902=>array(37,-67,959,840),29903=>array(52,-61,972,834),29904=>array(45,-67,953,830),29905=>array(40,-60,966,790),29906=>array(38,-71,925,825),29907=>array(40,-65,909,787),29908=>array(37,-64,955,788),29909=>array(63,-35,968,778),29910=>array(47,-73,966,839),29911=>array(57,-63,933,838),29912=>array(54,-68,956,826),29913=>array(42,-70,960,832),29914=>array(46,-69,969,836),29915=>array(30,-62,974,832),29916=>array(59,-57,956,834),29917=>array(32,-77,991,826),29918=>array(38,-67,992,837),29919=>array(36,-73,959,837),29920=>array(36,-67,964,838),29921=>array(57,-73,976,826),29922=>array(47,-69,973,834),29923=>array(32,-69,958,828),29924=>array(37,-66,969,856),29925=>array(51,-65,971,836),29926=>array(83,-35,941,773),29927=>array(36,-29,958,771),29928=>array(44,-63,966,783),29929=>array(36,-29,958,771),29930=>array(49,-29,955,811),29931=>array(65,-64,943,842),29932=>array(41,-74,968,838),29933=>array(39,-77,968,820),29934=>array(43,-56,956,807),29935=>array(104,-58,954,766),29936=>array(36,-29,963,782),29937=>array(36,-29,968,771),29938=>array(36,-29,953,822),29939=>array(56,-75,968,818),29940=>array(37,-65,969,838),29941=>array(62,-72,960,832),29942=>array(48,-61,962,842),29943=>array(75,-60,951,838),29944=>array(36,-29,958,772),29945=>array(99,-64,968,791),29946=>array(49,-60,970,800),29947=>array(36,-65,969,831),29948=>array(49,-29,955,786),29949=>array(78,-56,963,833),29950=>array(38,-64,960,824),29951=>array(50,-50,955,839),29952=>array(39,-71,970,827),29953=>array(39,-71,964,835),29954=>array(36,-74,974,832),29955=>array(58,-54,962,836),29956=>array(30,-48,947,784),29957=>array(38,-29,960,790),29958=>array(65,-63,962,854),29959=>array(97,-66,934,825),29960=>array(43,-75,962,838),29961=>array(34,-77,974,836),29962=>array(35,-69,966,830),29963=>array(65,-70,962,829),29964=>array(105,-74,950,787),29965=>array(74,-66,961,828),29966=>array(70,-66,945,827),29967=>array(60,-59,954,834),29968=>array(37,-68,958,828),29969=>array(83,-64,964,848),29970=>array(44,-68,961,824),29971=>array(24,-47,938,825),29972=>array(34,-68,985,829),29973=>array(66,-55,966,838),29974=>array(55,-68,957,785),29975=>array(33,-59,949,835),29976=>array(76,-68,927,827),29977=>array(49,-76,959,828),29978=>array(66,-72,934,835),29979=>array(32,-48,959,845),29980=>array(34,-58,945,834),29981=>array(35,-75,962,823),29982=>array(74,-47,939,836),29983=>array(60,-8,934,824),29984=>array(129,-23,956,830),29985=>array(37,-29,956,830),29986=>array(50,-76,930,838),29987=>array(49,-74,928,831),29988=>array(72,-56,970,811),29989=>array(73,-57,923,812),29990=>array(40,-69,966,811),29991=>array(45,-66,952,829),29992=>array(52,-73,855,788),29993=>array(65,-61,936,785),29994=>array(74,-67,847,842),29995=>array(62,-67,956,843),29996=>array(140,-65,856,798),29997=>array(53,-81,935,783),29998=>array(48,-67,916,844),29999=>array(63,-61,945,836),30000=>array(133,-68,867,762),30001=>array(137,-70,862,833),30002=>array(140,-69,860,785),30003=>array(149,-67,851,833),30004=>array(172,-67,839,832),30005=>array(148,-31,954,824),30006=>array(149,-65,872,833),30007=>array(85,-62,889,783),30008=>array(37,-56,914,856),30009=>array(65,-68,939,833),30010=>array(107,-53,954,790),30011=>array(75,-57,925,800),30012=>array(98,-46,914,810),30013=>array(99,-74,891,823),30014=>array(126,-62,879,844),30015=>array(101,-7,948,830),30016=>array(50,-65,957,779),30017=>array(50,-55,957,833),30018=>array(98,-59,965,850),30019=>array(90,-59,921,837),30020=>array(153,-62,845,824),30021=>array(90,-56,889,830),30022=>array(46,-66,965,823),30023=>array(99,-63,912,845),30024=>array(107,-66,978,791),30025=>array(96,-68,962,833),30026=>array(88,-64,952,828),30027=>array(76,-52,955,835),30028=>array(54,-70,961,782),30029=>array(96,-72,974,835),30030=>array(110,-66,981,831),30031=>array(64,-69,944,780),30032=>array(72,-52,945,791),30033=>array(51,-59,903,838),30034=>array(56,-50,963,833),30035=>array(60,-72,967,813),30036=>array(93,-67,938,839),30037=>array(178,-72,823,780),30038=>array(81,-70,970,836),30039=>array(109,-72,902,843),30040=>array(79,-62,955,839),30041=>array(75,-68,897,818),30042=>array(29,-67,975,848),30043=>array(111,-64,978,853),30044=>array(76,-59,920,836),30045=>array(56,-65,972,836),30046=>array(77,-70,968,838),30047=>array(50,-69,965,817),30048=>array(143,-68,867,845),30049=>array(86,-61,943,846),30050=>array(58,-69,947,801),30051=>array(34,-68,968,834),30052=>array(106,-62,955,832),30053=>array(110,-66,962,839),30054=>array(89,-22,943,828),30055=>array(48,-75,963,812),30056=>array(50,-70,959,808),30057=>array(96,-64,959,795),30058=>array(53,-70,957,836),30059=>array(82,-24,938,836),30060=>array(37,-67,966,854),30061=>array(81,-62,961,850),30062=>array(94,-62,954,847),30063=>array(69,-69,961,849),30064=>array(72,-74,926,784),30065=>array(89,-71,916,797),30066=>array(33,-72,973,847),30067=>array(54,-50,952,813),30068=>array(82,-58,911,831),30069=>array(79,-34,934,836),30070=>array(103,-68,914,841),30071=>array(77,-67,976,786),30072=>array(97,-62,939,835),30073=>array(101,-63,966,844),30074=>array(54,-20,951,803),30075=>array(74,-14,972,836),30076=>array(92,-61,938,782),30077=>array(103,-15,953,851),30078=>array(115,-69,908,783),30079=>array(56,-69,963,839),30080=>array(42,-71,969,828),30081=>array(74,-73,970,811),30082=>array(54,-46,952,786),30083=>array(94,-42,961,840),30084=>array(100,-70,955,822),30085=>array(84,-48,961,814),30086=>array(31,-61,951,814),30087=>array(87,-63,938,833),30088=>array(52,-82,943,829),30089=>array(51,-39,949,822),30090=>array(54,-31,952,791),30091=>array(28,-66,975,773),30092=>array(52,-70,968,835),30093=>array(68,-7,957,787),30094=>array(30,-65,966,827),30095=>array(35,-71,960,821),30096=>array(59,-81,955,837),30097=>array(33,-68,945,827),30098=>array(37,-63,898,822),30099=>array(37,-63,914,822),30100=>array(63,-65,944,823),30101=>array(36,-59,957,852),30102=>array(30,-63,899,838),30103=>array(35,-59,924,842),30104=>array(36,-75,954,833),30105=>array(46,-71,953,852),30106=>array(48,-69,968,820),30107=>array(48,-64,951,841),30108=>array(54,-69,941,845),30109=>array(54,-69,941,815),30110=>array(54,-69,961,845),30111=>array(24,-65,925,836),30112=>array(32,-66,900,838),30113=>array(28,-70,914,840),30114=>array(44,-65,982,855),30115=>array(51,-71,952,825),30116=>array(47,-73,960,845),30117=>array(50,-70,959,825),30118=>array(47,-73,945,845),30119=>array(52,-69,966,841),30120=>array(47,-73,938,845),30121=>array(47,-73,938,845),30122=>array(39,-57,959,854),30123=>array(37,-71,953,840),30124=>array(27,-67,896,849),30125=>array(27,-67,928,850),30126=>array(26,-67,932,840),30127=>array(27,-63,942,848),30128=>array(43,-63,951,849),30129=>array(39,-67,953,829),30130=>array(43,-73,957,831),30131=>array(44,-67,944,834),30132=>array(25,-66,938,851),30133=>array(54,-74,963,841),30134=>array(49,-71,951,830),30135=>array(47,-78,946,835),30136=>array(59,-75,954,829),30137=>array(41,-72,974,826),30138=>array(50,-60,958,835),30139=>array(47,-82,935,834),30140=>array(40,-78,972,825),30141=>array(32,-74,954,839),30142=>array(43,-73,962,829),30143=>array(44,-65,945,849),30144=>array(41,-58,954,855),30145=>array(44,-58,945,852),30146=>array(43,-79,941,832),30147=>array(27,-77,933,834),30148=>array(53,-61,948,856),30149=>array(38,-71,933,840),30150=>array(40,-71,951,847),30151=>array(41,-65,955,827),30152=>array(19,-74,918,848),30153=>array(24,-60,919,827),30154=>array(43,-73,951,830),30155=>array(53,-79,968,835),30156=>array(34,-83,948,840),30157=>array(43,-69,972,833),30158=>array(47,-67,957,846),30159=>array(41,-60,960,850),30160=>array(50,-75,944,829),30161=>array(51,-70,945,836),30162=>array(48,-71,955,827),30163=>array(50,-75,944,829),30164=>array(38,-68,947,844),30165=>array(48,-68,964,825),30166=>array(27,-65,919,846),30167=>array(36,-51,964,859),30168=>array(45,-75,949,826),30169=>array(45,-72,954,839),30170=>array(56,-82,962,832),30171=>array(33,-68,935,834),30172=>array(34,-70,962,847),30173=>array(43,-60,962,841),30174=>array(44,-68,961,834),30175=>array(57,-68,945,843),30176=>array(48,-73,983,846),30177=>array(31,-73,954,843),30178=>array(46,-69,944,835),30179=>array(45,-63,960,836),30180=>array(49,-67,954,847),30181=>array(33,-73,951,847),30182=>array(57,-68,955,835),30183=>array(39,-65,965,845),30184=>array(56,-67,922,852),30185=>array(37,-70,961,831),30186=>array(29,-74,955,846),30187=>array(20,-65,913,839),30188=>array(42,-69,941,841),30189=>array(44,-73,959,845),30190=>array(43,-75,965,840),30191=>array(34,-55,959,858),30192=>array(55,-70,958,832),30193=>array(45,-70,942,848),30194=>array(34,-66,957,838),30195=>array(40,-69,971,834),30196=>array(38,-67,941,834),30197=>array(36,-71,974,851),30198=>array(45,-72,960,851),30199=>array(36,-63,965,849),30200=>array(31,-73,930,839),30201=>array(46,-68,951,843),30202=>array(59,-67,959,834),30203=>array(39,-75,960,845),30204=>array(33,-65,941,836),30205=>array(31,-68,954,848),30206=>array(35,-67,956,842),30207=>array(33,-67,945,834),30208=>array(38,-64,964,837),30209=>array(48,-66,952,838),30210=>array(38,-77,935,843),30211=>array(30,-65,967,848),30212=>array(37,-64,942,841),30213=>array(37,-71,939,846),30214=>array(14,-67,912,845),30215=>array(34,-55,954,854),30216=>array(46,-64,974,855),30217=>array(39,-64,955,826),30218=>array(38,-65,955,852),30219=>array(38,-66,960,838),30220=>array(38,-70,944,847),30221=>array(55,-70,956,845),30222=>array(38,-67,944,840),30223=>array(33,-55,961,857),30224=>array(41,-69,974,850),30225=>array(45,-69,948,848),30226=>array(41,-75,938,848),30227=>array(46,-72,972,849),30228=>array(51,-73,961,838),30229=>array(44,-67,981,854),30230=>array(27,-54,954,860),30231=>array(26,-68,934,847),30232=>array(38,-69,911,835),30233=>array(30,-69,961,836),30234=>array(42,-70,971,836),30235=>array(24,-60,970,855),30236=>array(47,-66,981,840),30237=>array(40,-58,969,861),30238=>array(36,-62,976,848),30239=>array(37,-72,938,833),30240=>array(34,-67,962,841),30241=>array(35,-70,966,841),30242=>array(32,-73,957,841),30243=>array(46,-65,958,831),30244=>array(46,-74,948,841),30245=>array(43,-66,956,851),30246=>array(22,-68,959,851),30247=>array(44,-74,942,833),30248=>array(45,-79,963,837),30249=>array(46,-61,952,849),30250=>array(21,-67,933,823),30251=>array(26,-65,923,840),30252=>array(26,-65,963,840),30253=>array(44,-66,979,847),30254=>array(26,-73,967,847),30255=>array(45,-69,955,834),30256=>array(52,-76,951,841),30257=>array(50,-69,966,836),30258=>array(53,-64,978,854),30259=>array(32,-68,971,851),30260=>array(23,-66,943,841),30261=>array(33,-67,963,847),30262=>array(52,-65,970,848),30263=>array(52,-65,979,848),30264=>array(45,-65,943,848),30265=>array(52,-65,951,848),30266=>array(31,-69,948,852),30267=>array(36,-73,941,829),30268=>array(49,-67,980,850),30269=>array(37,-62,954,836),30270=>array(26,-65,970,832),30271=>array(29,-65,909,838),30272=>array(23,-81,928,826),30273=>array(23,-87,940,826),30274=>array(46,-65,964,830),30275=>array(33,-67,971,847),30276=>array(23,-91,937,826),30277=>array(23,-71,912,836),30278=>array(49,-66,941,841),30279=>array(29,-57,942,846),30280=>array(35,-62,963,829),30281=>array(35,-65,947,849),30282=>array(35,-70,973,853),30283=>array(57,-69,967,854),30284=>array(38,-68,933,844),30285=>array(24,-68,923,835),30286=>array(37,-64,937,840),30287=>array(37,-64,957,850),30288=>array(51,-68,983,849),30289=>array(37,-87,957,850),30290=>array(42,-58,971,836),30291=>array(49,-73,983,831),30292=>array(25,-61,931,828),30293=>array(42,-57,957,836),30294=>array(45,-73,956,833),30295=>array(42,-67,933,836),30296=>array(53,-65,948,844),30297=>array(42,-74,969,832),30298=>array(37,-71,936,833),30299=>array(48,-67,989,843),30300=>array(45,-67,980,841),30301=>array(48,-69,920,838),30302=>array(21,-71,912,835),30303=>array(44,-69,973,844),30304=>array(38,-71,982,846),30305=>array(51,-71,976,844),30306=>array(45,-76,947,840),30307=>array(25,-66,920,841),30308=>array(57,-73,959,837),30309=>array(40,-69,973,852),30310=>array(50,-78,948,846),30311=>array(43,-65,962,836),30312=>array(47,-75,946,834),30313=>array(42,-67,985,854),30314=>array(40,-69,964,854),30315=>array(29,-69,919,838),30316=>array(45,-66,956,854),30317=>array(50,-68,939,850),30318=>array(38,-71,974,845),30319=>array(35,-77,947,844),30320=>array(35,-78,959,854),30321=>array(47,-71,954,856),30322=>array(39,-77,967,854),30323=>array(27,-60,972,853),30324=>array(21,-77,958,849),30325=>array(46,-72,963,833),30326=>array(100,220,956,730),30327=>array(80,-55,936,839),30328=>array(80,-78,936,840),30329=>array(38,-69,967,840),30330=>array(47,-51,957,837),30331=>array(57,-13,957,837),30332=>array(52,-63,960,829),30333=>array(199,-64,822,833),30334=>array(98,-67,914,780),30335=>array(113,-47,959,830),30336=>array(200,-26,891,841),30337=>array(53,-49,947,866),30338=>array(74,-26,924,842),30339=>array(60,-67,950,836),30340=>array(101,-54,882,838),30341=>array(94,-27,941,842),30342=>array(64,-62,947,837),30343=>array(80,-28,932,845),30344=>array(87,-80,954,831),30345=>array(107,-39,959,834),30346=>array(119,-78,962,839),30347=>array(33,-64,959,849),30348=>array(100,-53,967,847),30349=>array(134,-61,898,837),30350=>array(90,-60,952,824),30351=>array(111,-69,954,835),30352=>array(53,-64,947,849),30353=>array(76,-19,944,820),30354=>array(100,-72,956,829),30355=>array(84,-64,923,831),30356=>array(84,-62,944,810),30357=>array(56,-63,947,776),30358=>array(86,-62,930,825),30359=>array(93,-67,907,810),30360=>array(84,-59,959,838),30361=>array(42,-63,943,847),30362=>array(92,-20,933,839),30363=>array(114,-69,889,834),30364=>array(110,-63,957,837),30365=>array(69,-70,964,833),30366=>array(117,-69,982,831),30367=>array(112,-68,975,839),30368=>array(97,-65,953,833),30369=>array(92,-74,960,852),30370=>array(92,-61,964,837),30371=>array(88,-68,946,831),30372=>array(79,-67,948,836),30373=>array(90,-74,960,852),30374=>array(82,-55,954,857),30375=>array(82,-62,946,841),30376=>array(60,-43,954,842),30377=>array(43,-73,970,838),30378=>array(98,-52,969,851),30379=>array(87,-72,956,845),30380=>array(82,-67,941,817),30381=>array(110,-63,963,845),30382=>array(53,-71,940,832),30383=>array(33,-81,951,826),30384=>array(33,-62,965,836),30385=>array(27,-68,939,833),30386=>array(41,-67,932,821),30387=>array(33,-75,956,834),30388=>array(31,-75,956,844),30389=>array(57,-76,966,826),30390=>array(30,-75,976,834),30391=>array(36,-70,956,838),30392=>array(50,-68,966,832),30393=>array(38,-67,954,832),30394=>array(45,-73,971,838),30395=>array(46,-73,969,824),30396=>array(47,-73,956,835),30397=>array(47,-66,969,849),30398=>array(51,-71,969,835),30399=>array(70,34,944,715),30400=>array(57,-20,948,822),30401=>array(57,-14,948,784),30402=>array(57,-14,948,789),30403=>array(48,-17,958,770),30404=>array(60,-53,956,757),30405=>array(47,-11,956,841),30406=>array(49,-25,947,794),30407=>array(46,-40,957,827),30408=>array(59,-38,952,784),30409=>array(41,-21,974,836),30410=>array(45,-18,960,840),30411=>array(55,-37,954,836),30412=>array(48,-20,957,830),30413=>array(62,-22,954,838),30414=>array(55,-14,954,835),30415=>array(52,-19,925,823),30416=>array(50,-44,924,799),30417=>array(52,-23,943,820),30418=>array(47,-28,961,851),30419=>array(60,-20,952,821),30420=>array(59,-23,951,840),30421=>array(63,-32,952,817),30422=>array(39,-32,959,847),30423=>array(57,-33,954,840),30424=>array(65,-32,914,831),30425=>array(51,-33,952,834),30426=>array(61,-34,956,809),30427=>array(50,-23,947,832),30428=>array(63,-32,952,843),30429=>array(60,-23,954,850),30430=>array(63,-32,953,840),30431=>array(58,-27,952,789),30432=>array(57,-46,961,848),30433=>array(48,-35,948,829),30434=>array(58,-27,952,802),30435=>array(53,-26,947,824),30436=>array(62,-35,956,842),30437=>array(53,-24,961,837),30438=>array(26,-26,957,869),30439=>array(40,-78,941,833),30440=>array(38,-24,961,788),30441=>array(60,-18,959,834),30442=>array(53,-12,951,823),30443=>array(32,-54,957,863),30444=>array(58,-10,952,850),30445=>array(65,-38,978,842),30446=>array(206,-42,767,771),30447=>array(98,-62,931,770),30448=>array(101,-68,938,783),30449=>array(118,-59,956,789),30450=>array(63,-70,937,826),30451=>array(107,-27,953,824),30452=>array(95,-70,949,835),30453=>array(109,-40,965,833),30454=>array(75,-68,958,778),30455=>array(109,-61,900,821),30456=>array(43,-65,889,828),30457=>array(86,-34,952,829),30458=>array(116,-71,957,828),30459=>array(107,-62,958,803),30460=>array(100,-71,944,803),30461=>array(101,-59,957,826),30462=>array(68,-73,920,834),30463=>array(75,-55,984,851),30464=>array(130,-65,890,787),30465=>array(53,-70,939,829),30466=>array(119,-59,945,837),30467=>array(119,-73,962,762),30468=>array(96,-52,949,790),30469=>array(92,-62,971,813),30470=>array(119,-66,954,849),30471=>array(88,-72,943,826),30472=>array(93,-65,931,826),30473=>array(52,-70,880,781),30474=>array(101,-55,943,811),30475=>array(71,-67,912,818),30476=>array(73,-62,949,799),30477=>array(96,-21,919,763),30478=>array(85,-58,951,755),30479=>array(96,-67,953,832),30480=>array(114,-21,953,773),30481=>array(106,-70,916,827),30482=>array(119,-70,917,830),30483=>array(99,-73,959,827),30484=>array(50,-67,946,785),30485=>array(116,-71,967,835),30486=>array(119,-62,960,773),30487=>array(119,-58,924,844),30488=>array(42,-57,971,821),30489=>array(118,-65,952,835),30490=>array(65,-62,961,843),30491=>array(124,-64,987,839),30492=>array(124,-64,987,839),30493=>array(118,-64,927,827),30494=>array(78,-84,951,835),30495=>array(64,-84,936,835),30496=>array(98,-71,956,785),30497=>array(94,-53,963,829),30498=>array(34,-65,958,843),30499=>array(116,-71,973,835),30500=>array(95,-71,929,784),30501=>array(44,-52,947,852),30502=>array(76,-56,931,823),30503=>array(110,-73,903,780),30504=>array(96,-69,948,833),30505=>array(88,-49,927,823),30506=>array(88,-68,951,782),30507=>array(95,-55,942,837),30508=>array(88,-67,931,825),30509=>array(124,-21,959,832),30510=>array(88,-70,909,782),30511=>array(80,-64,927,824),30512=>array(88,-42,956,770),30513=>array(106,-78,965,821),30514=>array(110,-70,953,777),30515=>array(107,-71,906,825),30516=>array(111,-40,909,859),30517=>array(119,-65,935,847),30518=>array(94,-21,934,783),30519=>array(39,-67,964,838),30520=>array(86,-62,929,849),30521=>array(103,-51,969,853),30522=>array(104,-67,943,828),30523=>array(110,-70,954,823),30524=>array(96,-64,965,794),30525=>array(105,-74,966,820),30526=>array(57,-67,955,785),30527=>array(88,-61,976,840),30528=>array(39,-69,929,839),30529=>array(101,-72,922,824),30530=>array(37,-67,938,841),30531=>array(97,-73,930,835),30532=>array(104,-67,909,825),30533=>array(107,-49,955,806),30534=>array(98,-55,951,834),30535=>array(110,-64,915,853),30536=>array(88,-16,952,788),30537=>array(88,-24,958,829),30538=>array(107,-48,902,803),30539=>array(97,-68,954,828),30540=>array(100,-71,949,825),30541=>array(96,-50,954,804),30542=>array(109,-47,948,864),30543=>array(112,-68,903,782),30544=>array(100,-69,940,820),30545=>array(96,-18,937,823),30546=>array(118,-75,983,829),30547=>array(100,-74,960,829),30548=>array(105,-70,969,840),30549=>array(112,-66,967,844),30550=>array(112,-74,972,823),30551=>array(105,-66,929,781),30552=>array(76,-73,930,781),30553=>array(110,-79,979,829),30554=>array(97,-72,933,790),30555=>array(109,-68,935,831),30556=>array(98,-63,930,836),30557=>array(72,-69,908,849),30558=>array(110,-64,970,830),30559=>array(95,-48,939,857),30560=>array(109,-30,965,841),30561=>array(87,-26,947,833),30562=>array(98,-64,937,832),30563=>array(57,-67,956,835),30564=>array(104,-64,955,792),30565=>array(104,-64,951,856),30566=>array(96,-30,948,826),30567=>array(97,-48,944,860),30568=>array(137,-57,969,845),30569=>array(118,-73,966,838),30570=>array(78,-70,932,783),30571=>array(92,-72,941,833),30572=>array(94,-65,944,831),30573=>array(113,-68,911,780),30574=>array(108,-67,980,839),30575=>array(88,-69,941,834),30576=>array(92,-65,948,829),30577=>array(88,-68,965,791),30578=>array(92,-22,945,788),30579=>array(92,-32,980,829),30580=>array(92,-65,936,787),30581=>array(107,-53,981,829),30582=>array(92,-64,978,842),30583=>array(92,-55,964,827),30584=>array(111,-64,906,789),30585=>array(98,-66,932,831),30586=>array(109,-74,962,834),30587=>array(92,-20,959,855),30588=>array(107,-69,965,786),30589=>array(86,-62,952,833),30590=>array(58,-72,950,849),30591=>array(49,-66,958,833),30592=>array(40,-65,982,845),30593=>array(111,-69,971,785),30594=>array(44,-67,970,832),30595=>array(100,-69,954,831),30596=>array(93,-65,929,835),30597=>array(79,-79,950,828),30598=>array(92,-60,938,832),30599=>array(97,-63,956,833),30600=>array(121,-79,980,781),30601=>array(93,-73,987,827),30602=>array(92,-77,956,843),30603=>array(94,-78,961,833),30604=>array(90,-26,927,833),30605=>array(97,-58,966,841),30606=>array(89,-62,932,824),30607=>array(54,-75,971,782),30608=>array(124,-45,896,816),30609=>array(91,-67,938,790),30610=>array(87,-60,917,826),30611=>array(104,-66,914,838),30612=>array(92,-74,947,833),30613=>array(98,-50,945,854),30614=>array(114,-69,938,813),30615=>array(116,-70,933,828),30616=>array(89,-23,953,801),30617=>array(109,-72,970,826),30618=>array(107,-80,958,837),30619=>array(108,-69,973,835),30620=>array(97,-73,949,821),30621=>array(105,-65,951,834),30622=>array(95,-69,936,831),30623=>array(82,-70,955,789),30624=>array(79,-39,942,823),30625=>array(109,-72,961,822),30626=>array(88,-83,913,830),30627=>array(94,-37,962,823),30628=>array(79,-62,906,793),30629=>array(102,-72,959,841),30630=>array(79,-65,956,836),30631=>array(90,-62,941,837),30632=>array(108,-73,966,821),30633=>array(88,-72,894,779),30634=>array(86,-23,935,843),30635=>array(114,-70,961,782),30636=>array(95,-68,944,830),30637=>array(94,-66,975,841),30638=>array(100,-62,970,847),30639=>array(88,-68,911,796),30640=>array(85,-75,960,828),30641=>array(102,-70,950,824),30642=>array(106,-68,928,783),30643=>array(95,-35,940,833),30644=>array(105,-71,961,827),30645=>array(109,-62,951,838),30646=>array(108,-64,969,839),30647=>array(105,-68,901,785),30648=>array(98,-70,957,827),30649=>array(89,-69,944,838),30650=>array(96,-70,952,839),30651=>array(68,-75,919,838),30652=>array(82,-67,951,852),30653=>array(52,-64,969,836),30654=>array(72,-46,910,801),30655=>array(39,-65,947,790),30656=>array(68,-77,981,828),30657=>array(99,-23,974,825),30658=>array(94,-66,961,786),30659=>array(76,-63,952,844),30660=>array(92,-76,949,830),30661=>array(81,-70,953,805),30662=>array(96,-65,963,828),30663=>array(91,-64,959,820),30664=>array(81,-70,957,848),30665=>array(98,-55,952,856),30666=>array(103,-68,919,835),30667=>array(87,-67,948,808),30668=>array(102,-72,964,850),30669=>array(31,-62,974,799),30670=>array(94,-65,963,844),30671=>array(92,-69,939,853),30672=>array(99,-67,935,785),30673=>array(68,-67,953,832),30674=>array(77,-67,946,833),30675=>array(91,-68,951,831),30676=>array(99,-70,938,824),30677=>array(41,-72,957,840),30678=>array(97,-62,965,804),30679=>array(71,-71,953,842),30680=>array(92,-68,947,830),30681=>array(88,-54,899,806),30682=>array(102,-77,905,786),30683=>array(81,-57,926,793),30684=>array(39,-66,972,850),30685=>array(39,-77,960,846),30686=>array(60,-68,927,786),30687=>array(44,-67,940,833),30688=>array(33,-70,954,825),30689=>array(43,-61,960,811),30690=>array(69,-71,947,828),30691=>array(42,-66,965,843),30692=>array(80,-56,964,837),30693=>array(69,-73,911,838),30694=>array(62,-67,941,836),30695=>array(34,-67,893,831),30696=>array(37,-68,980,834),30697=>array(39,-61,947,825),30698=>array(39,-65,932,834),30699=>array(27,-61,951,839),30700=>array(33,-29,955,832),30701=>array(51,-77,948,809),30702=>array(36,-73,951,833),30703=>array(33,-67,963,827),30704=>array(59,-70,934,838),30705=>array(40,-71,980,827),30706=>array(34,-65,980,837),30707=>array(67,-70,909,768),30708=>array(39,-66,948,761),30709=>array(61,-61,880,824),30710=>array(39,-57,929,774),30711=>array(44,-63,953,786),30712=>array(38,-64,959,780),30713=>array(37,-66,962,788),30714=>array(29,-33,959,828),30715=>array(51,-29,972,837),30716=>array(39,-2,957,761),30717=>array(59,-77,927,841),30718=>array(40,-70,942,785),30719=>array(49,-68,921,818),30720=>array(23,-59,898,767),30721=>array(39,-62,905,768),30722=>array(38,-68,971,824),30723=>array(45,-69,954,785),30724=>array(22,-69,955,829),30725=>array(44,-73,981,821),30726=>array(49,-70,990,836),30727=>array(42,-65,976,842),30728=>array(32,-71,970,772),30729=>array(48,-62,956,842),30730=>array(42,-64,957,843),30731=>array(42,-3,954,822),30732=>array(53,-62,925,829),30733=>array(43,-71,971,844),30734=>array(36,-77,971,828),30735=>array(43,-69,967,785),30736=>array(43,-70,969,786),30737=>array(51,-61,951,778),30738=>array(32,-51,952,818),30739=>array(39,-69,972,785),30740=>array(36,-71,956,780),30741=>array(42,-63,954,837),30742=>array(21,-68,921,826),30743=>array(29,-67,951,820),30744=>array(28,-44,944,824),30745=>array(42,-35,952,780),30746=>array(26,-62,929,788),30747=>array(41,-69,972,837),30748=>array(24,-69,954,781),30749=>array(50,-56,956,827),30750=>array(42,-64,987,839),30751=>array(41,-62,956,848),30752=>array(32,-17,954,792),30753=>array(52,-35,964,765),30754=>array(44,-59,952,783),30755=>array(44,-32,950,844),30756=>array(42,-29,943,831),30757=>array(29,-55,959,831),30758=>array(41,-53,960,843),30759=>array(40,-65,945,827),30760=>array(47,-75,964,832),30761=>array(42,-65,921,831),30762=>array(38,-60,958,784),30763=>array(57,-37,962,824),30764=>array(39,-19,952,816),30765=>array(37,-65,963,830),30766=>array(44,-53,962,855),30767=>array(51,-64,976,828),30768=>array(34,-68,951,780),30769=>array(46,-77,979,841),30770=>array(35,-29,963,835),30771=>array(43,-54,945,779),30772=>array(46,-70,958,835),30773=>array(23,-59,971,836),30774=>array(42,-66,886,843),30775=>array(59,-70,922,836),30776=>array(36,-26,956,788),30777=>array(35,-68,971,830),30778=>array(54,-72,946,761),30779=>array(29,-62,933,826),30780=>array(31,-31,964,840),30781=>array(42,-57,928,786),30782=>array(32,-60,947,828),30783=>array(33,-66,948,822),30784=>array(35,-60,905,830),30785=>array(30,-33,938,772),30786=>array(32,-11,965,845),30787=>array(37,-65,980,839),30788=>array(35,-66,960,831),30789=>array(41,-20,954,832),30790=>array(35,-65,963,841),30791=>array(46,-78,909,839),30792=>array(41,-72,956,824),30793=>array(42,-68,958,824),30794=>array(45,-72,952,822),30795=>array(35,-73,969,836),30796=>array(28,-57,972,849),30797=>array(30,-60,973,791),30798=>array(36,-63,907,832),30799=>array(36,-69,953,788),30800=>array(43,-70,909,782),30801=>array(36,-70,958,839),30802=>array(35,-68,948,780),30803=>array(25,-32,959,833),30804=>array(35,-71,949,826),30805=>array(38,-67,940,775),30806=>array(30,-74,945,826),30807=>array(29,-72,936,821),30808=>array(35,-64,903,795),30809=>array(25,-25,938,826),30810=>array(35,-66,963,823),30811=>array(35,-63,955,846),30812=>array(42,-20,956,791),30813=>array(50,-70,943,833),30814=>array(41,-67,954,829),30815=>array(35,-67,967,824),30816=>array(45,-71,972,834),30817=>array(35,-68,937,832),30818=>array(41,-70,961,819),30819=>array(35,-68,953,830),30820=>array(33,-67,983,833),30821=>array(42,-68,950,838),30822=>array(35,-51,951,802),30823=>array(35,-64,895,785),30824=>array(49,-62,964,838),30825=>array(50,-65,938,830),30826=>array(33,-54,959,830),30827=>array(26,-70,964,830),30828=>array(46,-61,978,784),30829=>array(41,-35,959,805),30830=>array(51,-57,907,852),30831=>array(34,-69,960,787),30832=>array(51,-65,942,830),30833=>array(49,-71,915,777),30834=>array(42,-64,980,833),30835=>array(35,-54,970,835),30836=>array(32,-65,962,828),30837=>array(39,-63,958,839),30838=>array(35,-66,969,830),30839=>array(32,-32,939,811),30840=>array(35,-67,948,836),30841=>array(39,-61,977,829),30842=>array(35,-56,959,785),30843=>array(44,-68,987,782),30844=>array(59,-78,919,779),30845=>array(35,-32,954,839),30846=>array(29,-16,953,853),30847=>array(37,-27,950,837),30848=>array(44,-67,954,827),30849=>array(26,-54,971,843),30850=>array(35,-57,969,850),30851=>array(36,-72,950,823),30852=>array(44,-70,972,823),30853=>array(36,-72,900,780),30854=>array(41,-52,949,843),30855=>array(42,-71,962,833),30856=>array(35,-65,960,833),30857=>array(53,-68,918,785),30858=>array(35,-57,974,840),30859=>array(35,-67,932,836),30860=>array(35,-67,966,836),30861=>array(33,-52,952,796),30862=>array(43,-64,951,834),30863=>array(39,-72,955,820),30864=>array(35,-67,981,839),30865=>array(31,-68,956,844),30866=>array(35,-23,982,843),30867=>array(44,-68,951,840),30868=>array(31,-62,968,831),30869=>array(35,-64,964,835),30870=>array(44,-70,958,847),30871=>array(43,-69,961,834),30872=>array(44,-74,960,829),30873=>array(47,-67,908,786),30874=>array(39,-63,954,840),30875=>array(27,-75,923,826),30876=>array(23,-71,949,839),30877=>array(35,-72,975,788),30878=>array(45,-50,936,798),30879=>array(35,-62,968,833),30880=>array(41,-67,952,837),30881=>array(37,-64,956,830),30882=>array(46,-65,907,785),30883=>array(49,-68,927,788),30884=>array(47,-71,971,823),30885=>array(32,-67,915,824),30886=>array(50,-70,956,849),30887=>array(60,-67,937,845),30888=>array(44,-73,975,784),30889=>array(44,-72,970,783),30890=>array(28,-54,948,841),30891=>array(46,-74,969,825),30892=>array(28,-73,971,785),30893=>array(29,-68,954,788),30894=>array(35,-72,979,788),30895=>array(34,-61,951,849),30896=>array(45,-29,957,845),30897=>array(34,-72,955,834),30898=>array(47,-67,939,842),30899=>array(39,-72,970,829),30900=>array(41,-24,964,830),30901=>array(32,-74,962,836),30902=>array(35,-57,961,834),30903=>array(35,-71,962,839),30904=>array(35,-69,971,789),30905=>array(25,-10,922,818),30906=>array(34,-69,950,843),30907=>array(29,-57,949,835),30908=>array(50,-60,933,781),30909=>array(35,-66,969,791),30910=>array(30,-70,961,785),30911=>array(39,-75,925,795),30912=>array(31,-58,963,838),30913=>array(37,-57,955,836),30914=>array(46,-65,913,834),30915=>array(37,-73,966,832),30916=>array(46,-73,966,830),30917=>array(37,-76,954,834),30918=>array(32,-69,946,793),30919=>array(32,-53,968,852),30920=>array(41,-64,972,857),30921=>array(43,-62,990,790),30922=>array(52,-68,944,788),30923=>array(20,-40,934,849),30924=>array(32,-70,955,825),30925=>array(19,-71,946,841),30926=>array(29,-75,967,841),30927=>array(34,-68,985,840),30928=>array(42,-61,956,844),30929=>array(41,-24,964,831),30930=>array(41,-64,941,785),30931=>array(32,-58,963,844),30932=>array(25,-59,963,849),30933=>array(32,-24,959,832),30934=>array(29,-57,921,800),30935=>array(32,-71,959,838),30936=>array(31,-67,956,827),30937=>array(24,-79,968,846),30938=>array(43,-66,957,831),30939=>array(39,-50,933,846),30940=>array(43,-55,960,850),30941=>array(40,-71,964,827),30942=>array(44,-75,898,824),30943=>array(51,-66,971,783),30944=>array(39,-64,958,839),30945=>array(25,-70,918,831),30946=>array(36,-72,964,824),30947=>array(36,-64,997,858),30948=>array(31,-66,957,837),30949=>array(47,-68,967,780),30950=>array(47,-64,965,787),30951=>array(43,-68,975,839),30952=>array(37,-64,939,833),30953=>array(45,-72,969,825),30954=>array(38,-65,966,838),30955=>array(38,-70,955,836),30956=>array(44,-67,952,832),30957=>array(45,-73,956,785),30958=>array(30,-61,945,841),30959=>array(33,-69,960,835),30960=>array(35,-65,952,846),30961=>array(33,-66,957,833),30962=>array(32,-63,975,829),30963=>array(46,-72,900,824),30964=>array(41,-21,989,838),30965=>array(41,-67,924,787),30966=>array(41,-64,944,846),30967=>array(37,-74,953,832),30968=>array(41,-76,974,851),30969=>array(56,-70,953,781),30970=>array(41,-72,968,828),30971=>array(30,-57,971,839),30972=>array(53,-68,966,832),30973=>array(38,-63,971,837),30974=>array(42,-65,940,787),30975=>array(32,-65,953,793),30976=>array(74,-68,926,785),30977=>array(45,-68,961,840),30978=>array(53,-70,956,825),30979=>array(54,-64,945,833),30980=>array(44,-62,988,833),30981=>array(41,-72,968,839),30982=>array(44,-68,969,858),30983=>array(43,-62,969,850),30984=>array(36,-58,963,825),30985=>array(43,-75,975,835),30986=>array(41,-59,959,818),30987=>array(51,-64,949,786),30988=>array(36,-65,935,789),30989=>array(53,-59,933,836),30990=>array(36,-65,961,825),30991=>array(44,-55,951,833),30992=>array(39,-71,937,833),30993=>array(40,-52,933,847),30994=>array(29,-58,965,860),30995=>array(44,-35,951,778),30996=>array(43,-68,956,836),30997=>array(44,-67,945,819),30998=>array(44,-70,952,821),30999=>array(51,-74,960,836),31000=>array(46,-69,954,786),31001=>array(33,-61,967,832),31002=>array(44,-20,957,835),31003=>array(41,-27,954,823),31004=>array(41,-67,984,839),31005=>array(33,-65,953,783),31006=>array(44,-66,976,830),31007=>array(22,-60,975,794),31008=>array(51,-31,949,846),31009=>array(34,-67,948,828),31010=>array(44,-76,975,844),31011=>array(32,-67,970,830),31012=>array(35,-67,976,828),31013=>array(41,-66,975,794),31014=>array(39,-74,959,834),31015=>array(46,-55,932,795),31016=>array(50,-54,936,792),31017=>array(36,-76,959,833),31018=>array(32,-63,962,799),31019=>array(26,-71,965,844),31020=>array(50,-70,962,833),31021=>array(59,-70,978,775),31022=>array(22,-60,975,840),31023=>array(36,-65,951,829),31024=>array(49,-69,953,790),31025=>array(44,-68,949,849),31026=>array(44,-62,956,842),31027=>array(26,-64,957,845),31028=>array(31,-61,951,832),31029=>array(44,-62,923,789),31030=>array(64,-58,936,839),31031=>array(50,-23,950,838),31032=>array(35,-75,979,829),31033=>array(33,-68,982,789),31034=>array(91,-68,932,757),31035=>array(235,-68,689,820),31036=>array(42,-59,961,820),31037=>array(54,-57,912,839),31038=>array(47,-69,949,822),31039=>array(48,-56,921,844),31040=>array(77,-68,945,768),31041=>array(39,-68,935,815),31042=>array(35,-55,963,847),31043=>array(35,-69,905,826),31044=>array(35,-70,976,835),31045=>array(45,-69,967,834),31046=>array(38,-67,964,841),31047=>array(36,-63,968,834),31048=>array(46,-67,946,834),31049=>array(36,-63,944,834),31050=>array(35,-55,960,848),31051=>array(36,-76,963,831),31052=>array(41,-71,918,831),31053=>array(45,-65,948,845),31054=>array(41,-71,906,826),31055=>array(34,-68,956,828),31056=>array(40,-60,958,843),31057=>array(34,-68,977,831),31058=>array(34,-72,908,824),31059=>array(47,-70,957,828),31060=>array(42,-52,949,850),31061=>array(42,-69,970,835),31062=>array(35,-73,953,818),31063=>array(57,-69,955,814),31064=>array(29,-52,964,763),31065=>array(34,-57,970,842),31066=>array(72,-69,960,838),31067=>array(32,-69,941,832),31068=>array(32,-69,953,836),31069=>array(35,-67,960,822),31070=>array(55,-67,904,837),31071=>array(64,-67,945,836),31072=>array(67,-68,909,775),31073=>array(60,-64,948,823),31074=>array(36,-64,962,834),31075=>array(44,-68,962,839),31076=>array(47,-69,906,833),31077=>array(39,-68,956,843),31078=>array(39,-68,968,836),31079=>array(37,-69,969,847),31080=>array(73,-61,952,788),31081=>array(50,-70,966,837),31082=>array(46,-72,955,833),31083=>array(27,-54,973,853),31084=>array(50,-69,956,837),31085=>array(46,-66,957,839),31086=>array(50,-69,953,838),31087=>array(30,-65,925,821),31088=>array(43,-64,959,843),31089=>array(50,-69,959,846),31090=>array(35,-65,970,842),31091=>array(45,-72,964,839),31092=>array(39,-74,951,841),31093=>array(50,-69,923,837),31094=>array(50,-69,925,842),31095=>array(36,-63,952,834),31096=>array(28,-61,886,822),31097=>array(27,-64,920,840),31098=>array(57,-66,963,829),31099=>array(50,-70,911,837),31100=>array(31,-53,982,851),31101=>array(40,-67,954,838),31102=>array(50,-69,968,837),31103=>array(32,-69,969,840),31104=>array(39,-74,915,816),31105=>array(46,-65,957,834),31106=>array(33,-70,908,835),31107=>array(50,-69,959,839),31108=>array(38,-64,963,834),31109=>array(45,-65,955,847),31110=>array(36,-69,956,849),31111=>array(50,-69,959,837),31112=>array(44,-68,951,835),31113=>array(28,-69,953,842),31114=>array(32,-69,958,832),31115=>array(38,-53,954,847),31116=>array(50,-69,943,843),31117=>array(36,-63,912,834),31118=>array(44,-67,971,832),31119=>array(38,-69,943,834),31120=>array(46,-69,957,835),31121=>array(32,-69,930,804),31122=>array(43,-69,970,839),31123=>array(38,-72,950,826),31124=>array(32,-69,966,797),31125=>array(38,-62,968,842),31126=>array(28,-57,978,843),31127=>array(51,-62,967,835),31128=>array(36,-56,953,846),31129=>array(32,-64,966,846),31130=>array(31,-70,985,832),31131=>array(30,-78,961,833),31132=>array(88,-67,941,823),31133=>array(50,-69,964,802),31134=>array(50,-75,940,841),31135=>array(50,-69,954,843),31136=>array(30,-71,955,836),31137=>array(49,-64,948,842),31138=>array(34,-72,915,826),31139=>array(48,-71,959,842),31140=>array(47,-68,899,835),31141=>array(38,-69,971,837),31142=>array(63,-66,940,835),31143=>array(60,-69,947,835),31144=>array(42,-72,973,843),31145=>array(50,-69,973,837),31146=>array(55,-69,955,791),31147=>array(32,-55,954,842),31148=>array(51,-71,963,840),31149=>array(44,-66,980,845),31150=>array(60,-69,952,833),31151=>array(50,-70,979,840),31152=>array(39,-64,973,827),31153=>array(26,-69,960,835),31154=>array(35,-72,947,835),31155=>array(50,-69,970,846),31156=>array(24,-59,972,868),31157=>array(43,-69,959,836),31158=>array(30,-81,968,825),31159=>array(37,-68,965,830),31160=>array(72,-59,875,818),31161=>array(120,-71,883,829),31162=>array(130,-64,882,785),31163=>array(69,-65,939,838),31164=>array(131,-65,869,834),31165=>array(38,-59,962,856),31166=>array(55,-70,958,825),31167=>array(52,-64,947,831),31168=>array(50,-59,951,830),31169=>array(40,-68,959,833),31170=>array(50,-50,954,823),31171=>array(50,-76,921,817),31172=>array(44,-67,955,833),31173=>array(45,-67,951,833),31174=>array(49,-70,947,820),31175=>array(50,-70,960,833),31176=>array(36,-52,904,846),31177=>array(42,-70,950,823),31178=>array(47,-69,968,834),31179=>array(43,-73,964,837),31180=>array(59,-71,968,829),31181=>array(45,-70,917,826),31182=>array(39,-69,962,824),31183=>array(48,-71,960,838),31184=>array(51,-69,955,829),31185=>array(41,-69,955,829),31186=>array(43,-70,959,827),31187=>array(41,-69,965,835),31188=>array(41,-69,966,843),31189=>array(39,-61,954,829),31190=>array(42,-76,972,827),31191=>array(41,-70,955,829),31192=>array(43,-61,969,828),31193=>array(41,-69,956,836),31194=>array(41,-69,944,833),31195=>array(49,-71,951,832),31196=>array(35,-71,952,829),31197=>array(51,-71,976,822),31198=>array(53,-70,924,827),31199=>array(32,-73,958,817),31200=>array(42,-70,964,829),31201=>array(41,-69,975,844),31202=>array(37,-78,975,831),31203=>array(39,-59,972,839),31204=>array(42,-75,951,810),31205=>array(41,-69,947,830),31206=>array(52,-68,964,835),31207=>array(39,-72,979,835),31208=>array(41,-69,951,842),31209=>array(36,-70,973,839),31210=>array(37,-49,966,859),31211=>array(34,-65,954,834),31212=>array(41,-57,941,835),31213=>array(42,-62,937,835),31214=>array(48,-73,960,829),31215=>array(24,-62,939,830),31216=>array(44,-59,961,835),31217=>array(59,-69,941,829),31218=>array(31,-71,942,835),31219=>array(41,-69,958,839),31220=>array(41,-69,985,853),31221=>array(66,-69,939,829),31222=>array(39,-69,973,829),31223=>array(47,-67,951,822),31224=>array(44,-61,951,836),31225=>array(33,-69,954,829),31226=>array(45,-59,955,827),31227=>array(49,-70,935,839),31228=>array(55,-69,945,836),31229=>array(30,-61,896,835),31230=>array(33,-72,959,835),31231=>array(67,-69,933,839),31232=>array(41,-71,961,846),31233=>array(47,-61,930,846),31234=>array(36,-64,968,850),31235=>array(35,-55,951,842),31236=>array(40,-72,969,830),31237=>array(36,-70,970,819),31238=>array(26,-64,871,821),31239=>array(62,-64,938,817),31240=>array(43,-60,956,828),31241=>array(24,-64,976,818),31242=>array(49,-52,932,864),31243=>array(29,-70,949,816),31244=>array(38,-55,967,862),31245=>array(52,-70,947,837),31246=>array(36,-70,954,840),31247=>array(26,-64,954,827),31248=>array(41,-71,977,836),31249=>array(28,-51,951,846),31250=>array(43,-72,903,823),31251=>array(47,-72,951,825),31252=>array(30,-62,970,840),31253=>array(47,-72,954,834),31254=>array(26,-70,947,841),31255=>array(38,-67,954,844),31256=>array(34,-52,952,846),31257=>array(39,-57,954,852),31258=>array(41,-70,955,832),31259=>array(45,-70,905,828),31260=>array(33,-57,967,835),31261=>array(70,-73,930,822),31262=>array(27,-72,965,819),31263=>array(76,-61,930,816),31264=>array(49,-80,911,818),31265=>array(41,-64,959,851),31266=>array(43,-70,969,825),31267=>array(39,-64,947,838),31268=>array(36,-64,953,849),31269=>array(56,-65,950,817),31270=>array(33,-69,951,833),31271=>array(34,-65,966,829),31272=>array(32,-68,918,827),31273=>array(55,-64,945,821),31274=>array(50,-64,950,837),31275=>array(34,-74,962,821),31276=>array(26,-71,961,823),31277=>array(21,-68,970,831),31278=>array(47,-65,956,836),31279=>array(33,-71,967,829),31280=>array(33,-50,972,845),31281=>array(32,-69,956,835),31282=>array(32,-64,936,824),31283=>array(19,-61,947,834),31284=>array(26,-64,966,850),31285=>array(26,-64,965,843),31286=>array(26,-72,949,835),31287=>array(24,-66,952,823),31288=>array(24,-68,960,843),31289=>array(22,-67,964,848),31290=>array(26,-71,928,826),31291=>array(45,-71,943,832),31292=>array(38,-69,979,832),31293=>array(40,-65,946,844),31294=>array(47,-51,930,836),31295=>array(55,-75,940,831),31296=>array(45,-74,964,825),31297=>array(26,-70,956,827),31298=>array(41,-68,976,826),31299=>array(33,-58,958,845),31300=>array(27,-59,960,850),31301=>array(37,-66,966,848),31302=>array(39,-73,961,847),31303=>array(36,-76,983,847),31304=>array(47,-71,967,832),31305=>array(31,-61,952,834),31306=>array(27,-68,967,835),31307=>array(39,-70,979,838),31308=>array(31,-62,964,843),31309=>array(40,-74,947,833),31310=>array(39,-70,972,838),31311=>array(32,-55,965,838),31312=>array(30,-61,965,846),31313=>array(26,-63,910,824),31314=>array(38,-72,960,833),31315=>array(26,-64,963,821),31316=>array(43,-78,959,827),31317=>array(41,-65,961,845),31318=>array(40,-72,961,822),31319=>array(41,-68,957,826),31320=>array(43,-77,963,823),31321=>array(26,-68,971,833),31322=>array(38,-70,962,828),31323=>array(46,-78,971,828),31324=>array(37,-71,951,831),31325=>array(41,-66,959,822),31326=>array(26,-73,928,821),31327=>array(33,-71,974,825),31328=>array(32,-68,983,840),31329=>array(35,-63,956,836),31330=>array(22,-74,969,833),31331=>array(35,-79,967,837),31332=>array(32,-59,964,825),31333=>array(42,-73,947,821),31334=>array(47,-65,966,853),31335=>array(40,-72,963,837),31336=>array(45,-67,974,830),31337=>array(31,-66,959,831),31338=>array(51,-71,949,825),31339=>array(28,-56,967,840),31340=>array(38,-80,966,843),31341=>array(28,-69,984,853),31342=>array(30,-70,971,846),31343=>array(36,-63,956,836),31344=>array(21,-69,962,844),31345=>array(36,-69,961,835),31346=>array(51,-73,953,825),31347=>array(36,-78,970,836),31348=>array(66,-59,950,822),31349=>array(94,-14,943,852),31350=>array(48,-44,957,822),31351=>array(44,-71,898,831),31352=>array(45,-59,924,850),31353=>array(92,-58,898,839),31354=>array(88,-17,918,833),31355=>array(66,-68,945,843),31356=>array(48,-68,967,849),31357=>array(60,-70,922,839),31358=>array(60,-69,982,839),31359=>array(58,-62,928,838),31360=>array(58,-32,965,854),31361=>array(60,-65,942,824),31362=>array(56,-65,944,849),31363=>array(54,-56,898,831),31364=>array(63,-69,898,828),31365=>array(109,-62,920,857),31366=>array(51,-60,972,867),31367=>array(48,-36,962,835),31368=>array(78,-76,908,833),31369=>array(72,-64,948,838),31370=>array(47,-75,967,846),31371=>array(107,-67,927,837),31372=>array(64,-67,929,845),31373=>array(52,-65,916,836),31374=>array(72,-62,902,840),31375=>array(81,-79,935,829),31376=>array(66,-8,941,851),31377=>array(65,-69,937,862),31378=>array(75,-35,925,839),31379=>array(50,-38,954,839),31380=>array(40,-51,963,864),31381=>array(27,-68,937,839),31382=>array(42,-70,934,839),31383=>array(102,-69,898,831),31384=>array(28,-67,930,839),31385=>array(63,-65,938,840),31386=>array(50,-72,952,849),31387=>array(47,-75,963,849),31388=>array(73,-61,896,832),31389=>array(37,-69,897,838),31390=>array(75,-73,915,848),31391=>array(43,-83,898,838),31392=>array(38,-65,962,845),31393=>array(60,-71,955,848),31394=>array(53,-75,957,844),31395=>array(63,-62,957,854),31396=>array(94,-54,954,851),31397=>array(37,-64,936,840),31398=>array(57,-68,914,837),31399=>array(65,-68,935,851),31400=>array(60,-65,954,848),31401=>array(102,-73,898,839),31402=>array(56,-38,956,839),31403=>array(46,-72,969,845),31404=>array(42,-64,979,849),31405=>array(53,-67,927,846),31406=>array(55,-64,925,838),31407=>array(37,-65,963,839),31408=>array(81,-70,935,830),31409=>array(42,-73,971,838),31410=>array(57,-70,951,830),31411=>array(49,-70,959,848),31412=>array(86,-79,937,838),31413=>array(58,-62,927,848),31414=>array(53,-80,947,833),31415=>array(52,-77,909,838),31416=>array(53,-30,974,854),31417=>array(34,-64,951,851),31418=>array(57,-76,962,839),31419=>array(51,-52,952,851),31420=>array(38,-58,966,851),31421=>array(38,-71,961,851),31422=>array(63,-68,974,852),31423=>array(56,-76,933,831),31424=>array(51,-72,960,832),31425=>array(36,-62,952,861),31426=>array(41,-64,970,851),31427=>array(47,-67,965,843),31428=>array(77,-66,948,833),31429=>array(48,-75,970,839),31430=>array(62,-68,918,847),31431=>array(53,-80,950,838),31432=>array(50,-49,968,844),31433=>array(54,-68,967,852),31434=>array(57,-71,921,843),31435=>array(95,-3,912,822),31436=>array(86,-73,975,825),31437=>array(86,-67,950,830),31438=>array(56,-54,934,838),31439=>array(49,-67,935,821),31440=>array(49,-65,964,800),31441=>array(40,-54,945,821),31442=>array(83,-65,938,832),31443=>array(59,-21,929,828),31444=>array(49,-55,909,833),31445=>array(49,-62,963,806),31446=>array(48,-16,952,807),31447=>array(53,-60,952,827),31448=>array(60,-72,935,832),31449=>array(73,-66,918,832),31450=>array(46,-68,964,825),31451=>array(45,-78,975,831),31452=>array(66,-54,954,836),31453=>array(27,-26,947,799),31454=>array(39,-58,932,838),31455=>array(38,-66,946,818),31456=>array(60,-68,940,831),31457=>array(24,-64,957,801),31458=>array(44,-74,979,825),31459=>array(35,-69,964,849),31460=>array(54,-70,962,838),31461=>array(68,-33,932,832),31462=>array(45,-65,971,832),31463=>array(56,-68,957,847),31464=>array(54,-62,969,844),31465=>array(79,-23,957,848),31466=>array(66,-25,960,796),31467=>array(45,-71,956,834),31468=>array(40,-71,948,833),31469=>array(67,-65,921,802),31470=>array(48,-73,953,833),31471=>array(43,-70,942,830),31472=>array(45,-63,948,804),31473=>array(48,-65,957,832),31474=>array(48,-68,935,849),31475=>array(48,-23,963,837),31476=>array(37,-72,957,845),31477=>array(38,-69,944,830),31478=>array(39,-76,959,838),31479=>array(55,-69,969,840),31480=>array(39,-76,962,830),31481=>array(49,-62,949,848),31482=>array(68,-5,943,819),31483=>array(47,-67,948,847),31484=>array(54,-71,948,847),31485=>array(54,-59,954,842),31486=>array(54,-10,948,827),31487=>array(42,-60,931,841),31488=>array(48,-23,947,847),31489=>array(47,-15,955,847),31490=>array(41,-69,969,822),31491=>array(44,-64,919,822),31492=>array(37,-73,945,844),31493=>array(47,-73,977,842),31494=>array(40,-44,914,835),31495=>array(67,-75,933,845),31496=>array(44,-65,955,845),31497=>array(47,-66,945,843),31498=>array(37,-68,964,840),31499=>array(62,-58,962,845),31500=>array(54,-57,943,845),31501=>array(56,-61,939,835),31502=>array(52,-69,966,834),31503=>array(74,-69,960,839),31504=>array(43,-70,964,838),31505=>array(65,-64,953,839),31506=>array(43,-77,971,835),31507=>array(44,-50,965,814),31508=>array(33,-25,918,830),31509=>array(39,-63,932,825),31510=>array(44,-67,962,814),31511=>array(44,-77,969,814),31512=>array(44,-57,932,848),31513=>array(51,-18,938,840),31514=>array(45,-69,941,841),31515=>array(50,-65,952,841),31516=>array(44,-64,941,814),31517=>array(60,-69,927,832),31518=>array(52,-63,944,842),31519=>array(53,-62,951,836),31520=>array(52,-17,945,838),31521=>array(52,-14,957,842),31522=>array(55,-71,959,829),31523=>array(37,-30,956,841),31524=>array(45,-68,954,844),31525=>array(62,-62,956,854),31526=>array(42,-73,950,841),31527=>array(37,-69,956,847),31528=>array(38,-59,970,846),31529=>array(43,-72,958,854),31530=>array(54,-14,959,835),31531=>array(54,-65,942,842),31532=>array(62,-62,932,834),31533=>array(31,-80,969,835),31534=>array(44,-56,945,847),31535=>array(49,-74,953,837),31536=>array(45,-65,933,838),31537=>array(55,-56,948,846),31538=>array(51,-65,932,832),31539=>array(55,-63,950,842),31540=>array(41,-65,938,827),31541=>array(44,-70,953,836),31542=>array(44,-71,968,836),31543=>array(40,-61,962,836),31544=>array(71,-20,962,836),31545=>array(54,-64,946,836),31546=>array(27,-63,931,833),31547=>array(52,-61,950,847),31548=>array(34,-59,940,842),31549=>array(39,33,944,842),31550=>array(31,-57,938,823),31551=>array(34,-73,968,842),31552=>array(51,-32,952,820),31553=>array(31,-43,909,823),31554=>array(31,-44,959,823),31555=>array(46,-61,937,836),31556=>array(53,-68,947,845),31557=>array(61,-58,969,848),31558=>array(74,-64,944,839),31559=>array(54,-66,944,841),31560=>array(41,-57,938,843),31561=>array(65,-68,934,838),31562=>array(58,-60,971,850),31563=>array(48,-65,946,848),31564=>array(42,-23,958,840),31565=>array(51,-52,938,854),31566=>array(40,-58,945,841),31567=>array(42,-59,961,848),31568=>array(42,-83,953,847),31569=>array(47,-61,950,833),31570=>array(43,-61,942,849),31571=>array(38,-65,931,837),31572=>array(34,-71,971,843),31573=>array(53,-54,962,844),31574=>array(46,-65,957,844),31575=>array(50,-68,949,842),31576=>array(56,-67,949,839),31577=>array(32,-61,943,834),31578=>array(37,-68,913,834),31579=>array(43,-69,925,829),31580=>array(45,-60,943,847),31581=>array(41,-66,922,820),31582=>array(37,-65,930,834),31583=>array(36,-64,948,837),31584=>array(50,-71,946,837),31585=>array(38,-71,962,841),31586=>array(39,-64,929,825),31587=>array(41,-69,932,840),31588=>array(33,-54,966,853),31589=>array(38,-54,923,849),31590=>array(37,-57,960,850),31591=>array(47,-66,970,839),31592=>array(37,-69,966,842),31593=>array(42,-54,936,857),31594=>array(33,-16,934,853),31595=>array(33,-62,943,853),31596=>array(38,-67,953,837),31597=>array(58,-52,939,857),31598=>array(62,-11,948,837),31599=>array(52,-75,935,837),31600=>array(54,-70,960,843),31601=>array(39,-67,969,843),31602=>array(50,-67,945,847),31603=>array(24,-65,970,846),31604=>array(34,-55,978,849),31605=>array(36,-74,949,845),31606=>array(49,-70,945,836),31607=>array(49,-70,965,840),31608=>array(50,-67,939,843),31609=>array(29,-63,911,833),31610=>array(42,-69,953,847),31611=>array(51,-66,938,827),31612=>array(47,-81,933,841),31613=>array(47,-69,947,841),31614=>array(46,-20,957,842),31615=>array(26,-64,958,841),31616=>array(46,-59,926,833),31617=>array(46,-59,934,833),31618=>array(42,-67,969,841),31619=>array(27,-74,968,841),31620=>array(47,-67,949,841),31621=>array(50,-70,945,841),31622=>array(47,-51,966,848),31623=>array(41,-67,970,846),31624=>array(40,-72,930,835),31625=>array(36,-63,938,842),31626=>array(39,-69,953,831),31627=>array(51,-60,964,847),31628=>array(52,-72,930,835),31629=>array(69,-58,957,847),31630=>array(43,-73,953,841),31631=>array(41,-61,948,851),31632=>array(48,-62,947,841),31633=>array(32,-57,968,852),31634=>array(41,-68,919,827),31635=>array(48,-52,959,846),31636=>array(48,-65,944,846),31637=>array(63,-58,944,849),31638=>array(44,-69,963,834),31639=>array(50,-75,935,841),31640=>array(61,-69,938,841),31641=>array(38,-52,975,855),31642=>array(57,-68,932,840),31643=>array(33,-61,959,855),31644=>array(49,-28,935,841),31645=>array(57,-59,960,850),31646=>array(46,-46,959,844),31647=>array(57,-54,954,850),31648=>array(41,-19,942,853),31649=>array(53,-68,929,845),31650=>array(48,-66,924,832),31651=>array(41,-65,912,831),31652=>array(45,-70,942,837),31653=>array(48,-62,960,832),31654=>array(27,-81,913,835),31655=>array(41,-17,917,829),31656=>array(38,-69,952,823),31657=>array(39,-61,919,834),31658=>array(52,-70,928,843),31659=>array(44,-68,937,824),31660=>array(55,-65,954,842),31661=>array(60,-58,957,855),31662=>array(60,-24,955,855),31663=>array(44,-70,976,833),31664=>array(66,-51,960,828),31665=>array(46,-62,947,846),31666=>array(69,-62,963,855),31667=>array(45,-72,935,855),31668=>array(39,-68,966,844),31669=>array(45,-70,952,843),31670=>array(42,-61,930,842),31671=>array(41,-66,954,847),31672=>array(49,-67,945,842),31673=>array(40,-72,941,837),31674=>array(43,-72,974,842),31675=>array(43,-70,959,842),31676=>array(43,-74,933,842),31677=>array(43,-27,947,842),31678=>array(50,-72,943,837),31679=>array(43,-64,942,842),31680=>array(54,-65,949,841),31681=>array(57,-36,962,835),31682=>array(67,-47,952,835),31683=>array(57,-70,952,835),31684=>array(67,-64,943,842),31685=>array(62,-62,954,842),31686=>array(56,-60,962,848),31687=>array(46,-69,942,840),31688=>array(33,-58,958,837),31689=>array(53,-67,959,838),31690=>array(42,-69,957,843),31691=>array(54,-71,945,849),31692=>array(38,-68,955,841),31693=>array(33,-64,985,837),31694=>array(53,-76,960,837),31695=>array(53,-64,973,847),31696=>array(38,-28,957,847),31697=>array(38,-75,911,829),31698=>array(38,-66,961,829),31699=>array(45,-60,933,836),31700=>array(54,-64,941,851),31701=>array(59,-14,952,832),31702=>array(46,-75,938,832),31703=>array(32,-62,968,844),31704=>array(55,-68,929,829),31705=>array(45,-65,938,849),31706=>array(36,-26,938,842),31707=>array(40,-71,931,840),31708=>array(53,-83,953,844),31709=>array(51,-69,949,843),31710=>array(63,-70,953,832),31711=>array(44,-65,948,836),31712=>array(30,-53,966,855),31713=>array(45,-60,974,855),31714=>array(62,-76,947,827),31715=>array(72,-69,937,837),31716=>array(53,-59,942,845),31717=>array(56,-67,982,847),31718=>array(49,-38,958,844),31719=>array(58,-68,927,829),31720=>array(35,-54,959,849),31721=>array(41,-64,959,855),31722=>array(47,-71,968,846),31723=>array(71,-67,946,832),31724=>array(43,-66,972,832),31725=>array(57,-54,962,849),31726=>array(54,-29,924,827),31727=>array(33,-71,959,827),31728=>array(66,-73,951,839),31729=>array(66,-64,929,830),31730=>array(47,-73,953,844),31731=>array(55,-59,970,853),31732=>array(45,-68,968,836),31733=>array(49,-71,955,828),31734=>array(42,-64,951,838),31735=>array(50,-46,960,856),31736=>array(42,-74,954,829),31737=>array(44,-39,957,827),31738=>array(57,-78,964,850),31739=>array(53,-64,937,846),31740=>array(59,-73,955,838),31741=>array(47,-68,933,831),31742=>array(41,-67,967,850),31743=>array(56,-73,951,830),31744=>array(64,-65,964,846),31745=>array(53,-74,976,830),31746=>array(60,-69,920,832),31747=>array(46,-70,931,831),31748=>array(36,-80,957,845),31749=>array(49,-72,954,828),31750=>array(44,-71,961,837),31751=>array(49,-67,982,849),31752=>array(45,-60,943,829),31753=>array(57,-70,982,845),31754=>array(50,-34,974,823),31755=>array(44,-30,974,839),31756=>array(33,-65,973,847),31757=>array(58,-74,942,844),31758=>array(71,-69,956,832),31759=>array(39,-65,954,845),31760=>array(57,-72,974,834),31761=>array(33,-66,981,853),31762=>array(39,-78,965,851),31763=>array(33,-64,962,855),31764=>array(29,-67,965,855),31765=>array(60,-71,920,847),31766=>array(52,-70,952,829),31767=>array(58,-63,961,821),31768=>array(50,-62,941,838),31769=>array(53,-72,953,841),31770=>array(46,-86,952,850),31771=>array(29,-49,942,858),31772=>array(56,-75,958,834),31773=>array(52,-67,967,833),31774=>array(50,-58,962,860),31775=>array(31,-67,946,844),31776=>array(56,-29,973,842),31777=>array(27,-61,951,844),31778=>array(59,-66,934,834),31779=>array(42,-63,948,847),31780=>array(43,-69,945,847),31781=>array(36,-53,976,855),31782=>array(48,-33,977,839),31783=>array(36,-68,915,842),31784=>array(51,-58,932,847),31785=>array(46,-68,930,835),31786=>array(47,-68,971,843),31787=>array(52,-76,949,842),31788=>array(57,-73,961,836),31789=>array(44,-63,970,838),31790=>array(36,-68,954,847),31791=>array(36,-55,942,847),31792=>array(46,-67,957,833),31793=>array(49,-67,951,849),31794=>array(43,-75,957,849),31795=>array(54,-65,964,840),31796=>array(42,-83,934,856),31797=>array(66,-62,962,834),31798=>array(23,-61,938,856),31799=>array(41,-54,938,856),31800=>array(43,-68,970,847),31801=>array(60,-67,927,837),31802=>array(43,-33,944,837),31803=>array(45,-74,984,829),31804=>array(44,-67,954,837),31805=>array(27,-65,972,841),31806=>array(31,-53,963,854),31807=>array(44,-70,954,853),31808=>array(61,-64,939,842),31809=>array(37,-74,918,824),31810=>array(39,-71,944,836),31811=>array(53,-16,955,849),31812=>array(36,-52,938,842),31813=>array(51,-70,958,841),31814=>array(46,-75,978,845),31815=>array(44,-59,975,850),31816=>array(36,-62,981,835),31817=>array(46,-35,945,842),31818=>array(37,-67,944,850),31819=>array(43,-66,974,835),31820=>array(56,-58,951,852),31821=>array(33,-62,943,852),31822=>array(43,-68,971,835),31823=>array(43,-95,953,835),31824=>array(39,-62,976,848),31825=>array(28,-82,972,847),31826=>array(61,-64,939,834),31827=>array(37,-64,969,840),31828=>array(35,-56,971,845),31829=>array(45,-70,937,842),31830=>array(38,-53,961,853),31831=>array(50,-60,948,845),31832=>array(39,-67,976,849),31833=>array(38,-52,959,853),31834=>array(42,-62,962,837),31835=>array(52,-72,964,839),31836=>array(57,-68,953,846),31837=>array(50,-68,962,846),31838=>array(47,-62,964,847),31839=>array(42,-69,965,851),31840=>array(49,-62,964,855),31841=>array(33,-60,962,818),31842=>array(45,-69,987,838),31843=>array(40,-67,929,841),31844=>array(38,-53,961,853),31845=>array(35,-60,967,853),31846=>array(39,-33,967,837),31847=>array(28,-57,969,854),31848=>array(22,-56,983,848),31849=>array(34,-67,964,848),31850=>array(33,-71,954,842),31851=>array(40,-60,952,857),31852=>array(61,-62,964,854),31853=>array(56,-73,940,856),31854=>array(54,-59,957,854),31855=>array(38,-75,974,837),31856=>array(31,-55,970,844),31857=>array(29,-78,963,835),31858=>array(46,-71,954,835),31859=>array(57,-67,949,830),31860=>array(33,-58,961,844),31861=>array(41,-71,956,823),31862=>array(41,-73,975,823),31863=>array(41,-71,935,823),31864=>array(36,-64,965,828),31865=>array(28,-68,954,826),31866=>array(38,-61,973,832),31867=>array(39,-62,948,834),31868=>array(48,-63,900,814),31869=>array(56,-59,960,838),31870=>array(42,-75,910,827),31871=>array(41,-76,953,822),31872=>array(38,-71,966,827),31873=>array(37,-68,957,829),31874=>array(37,-58,963,841),31875=>array(32,-65,954,832),31876=>array(44,-71,970,824),31877=>array(59,-65,947,839),31878=>array(59,-65,963,829),31879=>array(69,-65,967,843),31880=>array(53,-65,967,828),31881=>array(29,-67,964,829),31882=>array(43,-68,957,826),31883=>array(48,-63,963,837),31884=>array(58,-67,918,826),31885=>array(39,-54,967,850),31886=>array(69,-76,973,837),31887=>array(49,-71,934,837),31888=>array(42,-66,928,829),31889=>array(42,-65,965,829),31890=>array(37,-64,949,837),31891=>array(46,-67,959,838),31892=>array(44,-70,945,824),31893=>array(51,-60,901,849),31894=>array(49,-70,971,825),31895=>array(46,-62,953,833),31896=>array(52,-64,943,840),31897=>array(46,-64,907,836),31898=>array(51,-62,953,833),31899=>array(50,-62,941,834),31900=>array(37,-67,963,818),31901=>array(29,-66,940,802),31902=>array(35,-67,955,832),31903=>array(56,-72,946,789),31904=>array(55,-69,947,830),31905=>array(55,-64,921,830),31906=>array(40,-65,961,846),31907=>array(33,-65,951,830),31908=>array(62,-65,913,838),31909=>array(79,-65,907,829),31910=>array(43,-77,961,836),31911=>array(35,-55,951,829),31912=>array(46,-70,959,823),31913=>array(52,-70,941,828),31914=>array(45,-59,941,823),31915=>array(48,-68,951,838),31916=>array(48,-56,923,843),31917=>array(53,-65,972,853),31918=>array(37,-56,974,836),31919=>array(52,-70,969,824),31920=>array(37,-64,953,837),31921=>array(46,-70,951,842),31922=>array(42,-62,983,838),31923=>array(39,-67,956,829),31924=>array(51,-71,962,824),31925=>array(54,-68,956,844),31926=>array(33,-67,966,835),31927=>array(67,-63,935,837),31928=>array(49,-77,960,836),31929=>array(29,-59,942,835),31930=>array(52,-70,965,839),31931=>array(36,-70,962,830),31932=>array(42,-70,971,830),31933=>array(42,-67,977,831),31934=>array(45,-66,954,837),31935=>array(45,-68,986,821),31936=>array(53,-68,961,833),31937=>array(21,-71,941,839),31938=>array(45,-73,963,832),31939=>array(63,-70,937,810),31940=>array(31,-65,929,833),31941=>array(34,-66,990,830),31942=>array(36,-70,968,810),31943=>array(30,-68,964,836),31944=>array(40,-67,986,829),31945=>array(38,-62,980,841),31946=>array(52,-68,897,835),31947=>array(37,-72,954,830),31948=>array(39,-65,975,841),31949=>array(42,-65,965,843),31950=>array(30,-75,958,844),31951=>array(69,-79,931,840),31952=>array(39,-70,948,827),31953=>array(38,-68,917,831),31954=>array(39,-72,938,822),31955=>array(39,-73,969,834),31956=>array(41,-79,971,826),31957=>array(52,-62,969,850),31958=>array(42,-69,952,827),31959=>array(48,-65,990,847),31960=>array(31,-68,968,832),31961=>array(42,-64,972,837),31962=>array(53,-69,954,832),31963=>array(56,-67,940,837),31964=>array(34,-62,968,828),31965=>array(28,-76,985,853),31966=>array(62,-69,955,849),31967=>array(40,-67,962,840),31968=>array(31,-66,966,833),31969=>array(50,-60,952,847),31970=>array(32,-62,982,832),31971=>array(34,-66,966,832),31972=>array(66,-73,934,828),31973=>array(60,-60,956,839),31974=>array(40,-71,933,839),31975=>array(40,-72,954,818),31976=>array(38,-69,967,830),31977=>array(25,-64,974,861),31978=>array(39,-67,975,832),31979=>array(70,-65,953,838),31980=>array(47,-67,960,826),31981=>array(38,-62,980,843),31982=>array(30,-64,964,832),31983=>array(47,-59,964,838),31984=>array(40,-68,916,833),31985=>array(40,-67,965,840),31986=>array(37,-71,963,828),31987=>array(54,-56,963,836),31988=>array(37,-67,962,797),31989=>array(42,-72,966,823),31990=>array(39,-68,956,833),31991=>array(46,-68,953,828),31992=>array(56,-65,941,847),31993=>array(226,-64,734,824),31994=>array(52,-64,952,839),31995=>array(62,-64,942,833),31996=>array(60,-67,892,825),31997=>array(60,-70,956,828),31998=>array(38,-67,936,839),31999=>array(60,-67,892,825),32000=>array(35,-64,954,839),32001=>array(60,-66,966,832),32002=>array(84,-64,950,839),32003=>array(57,-73,905,822),32004=>array(34,-64,903,839),32005=>array(34,-64,944,841),32006=>array(69,-64,950,839),32007=>array(34,-64,953,844),32008=>array(34,-78,957,839),32009=>array(60,-67,892,825),32010=>array(54,-60,948,831),32011=>array(34,-66,961,839),32012=>array(56,-64,963,825),32013=>array(34,-65,909,839),32014=>array(43,-71,975,829),32015=>array(44,-72,966,825),32016=>array(34,-64,956,839),32017=>array(53,-70,964,834),32018=>array(38,-71,979,844),32019=>array(47,-59,932,815),32020=>array(34,-64,964,839),32021=>array(44,-64,954,839),32022=>array(57,-72,914,824),32023=>array(34,-64,959,839),32024=>array(34,-64,945,841),32025=>array(34,-70,956,839),32026=>array(34,-66,955,839),32027=>array(34,-64,961,839),32028=>array(74,-64,944,839),32029=>array(40,-31,937,815),32030=>array(48,-71,968,828),32031=>array(52,-76,979,834),32032=>array(63,-60,937,834),32033=>array(34,-71,949,839),32034=>array(65,-69,946,835),32035=>array(57,-63,969,837),32036=>array(57,-62,949,843),32037=>array(82,-65,953,837),32038=>array(73,-44,965,824),32039=>array(84,-60,935,834),32040=>array(73,-73,960,833),32041=>array(35,-76,961,839),32042=>array(57,-35,943,839),32043=>array(57,-67,948,825),32044=>array(32,-64,906,839),32045=>array(61,-67,939,820),32046=>array(49,-60,953,831),32047=>array(51,-63,943,808),32048=>array(34,-64,912,839),32049=>array(62,-62,982,834),32050=>array(69,-67,954,839),32051=>array(36,-64,902,839),32052=>array(43,-65,947,839),32053=>array(54,-68,946,839),32054=>array(35,-54,954,838),32055=>array(49,-78,975,831),32056=>array(32,-38,954,839),32057=>array(34,-64,910,839),32058=>array(35,-64,956,839),32059=>array(39,-74,966,823),32060=>array(52,-62,932,829),32061=>array(36,-39,952,838),32062=>array(48,-75,974,843),32063=>array(84,-65,968,839),32064=>array(67,-65,921,828),32065=>array(32,-32,957,839),32066=>array(34,-77,964,839),32067=>array(34,-65,961,839),32068=>array(38,-64,942,839),32069=>array(44,-64,910,839),32070=>array(64,-64,955,839),32071=>array(40,-73,915,835),32072=>array(47,-67,901,837),32073=>array(35,-60,969,826),32074=>array(40,-67,970,840),32075=>array(44,-66,971,839),32076=>array(37,-64,966,839),32077=>array(40,-68,959,831),32078=>array(44,-64,964,839),32079=>array(49,-74,967,839),32080=>array(35,-64,944,839),32081=>array(42,-68,966,829),32082=>array(57,-70,911,826),32083=>array(54,-55,954,819),32084=>array(52,-66,951,833),32085=>array(50,-48,947,817),32086=>array(34,-72,961,839),32087=>array(61,-46,939,831),32088=>array(57,-75,963,832),32089=>array(41,-39,954,831),32090=>array(36,-39,943,830),32091=>array(32,-62,954,845),32092=>array(57,-63,943,827),32093=>array(36,-58,978,843),32094=>array(34,-64,962,841),32095=>array(58,-57,967,816),32096=>array(71,-65,954,837),32097=>array(34,-64,982,849),32098=>array(34,-64,900,842),32099=>array(64,-72,949,839),32100=>array(62,-65,938,820),32101=>array(36,-67,980,831),32102=>array(34,-65,965,853),32103=>array(51,-61,913,831),32104=>array(44,-64,962,839),32105=>array(41,-70,955,827),32106=>array(34,-64,918,839),32107=>array(81,-70,917,836),32108=>array(69,-64,958,834),32109=>array(43,-70,958,835),32110=>array(63,-60,939,838),32111=>array(46,-65,960,836),32112=>array(50,-39,957,825),32113=>array(34,-64,959,839),32114=>array(64,-71,960,839),32115=>array(49,-64,968,844),32116=>array(49,-65,954,843),32117=>array(34,-64,961,839),32118=>array(35,-64,961,839),32119=>array(41,-68,930,819),32120=>array(60,-61,953,817),32121=>array(33,-64,894,839),32122=>array(35,-55,957,857),32123=>array(44,-72,968,838),32124=>array(55,-65,954,833),32125=>array(69,-66,906,839),32126=>array(30,-70,961,833),32127=>array(34,-64,971,839),32128=>array(46,-70,975,823),32129=>array(54,-61,953,836),32130=>array(48,-70,959,830),32131=>array(51,-65,938,838),32132=>array(48,-70,969,836),32133=>array(57,-63,976,816),32134=>array(36,-71,971,820),32135=>array(36,-62,945,820),32136=>array(57,-65,928,849),32137=>array(44,-74,969,839),32138=>array(38,-69,979,836),32139=>array(38,-60,951,833),32140=>array(61,-68,962,832),32141=>array(43,-52,945,843),32142=>array(32,-71,976,839),32143=>array(59,-67,959,839),32144=>array(49,-67,961,839),32145=>array(59,-62,917,813),32146=>array(49,-71,954,826),32147=>array(44,-64,945,839),32148=>array(35,-66,968,846),32149=>array(59,-41,972,826),32150=>array(46,-59,976,853),32151=>array(37,-51,915,813),32152=>array(44,-61,977,841),32153=>array(34,-65,933,839),32154=>array(34,-64,962,839),32155=>array(44,-64,962,839),32156=>array(34,-65,960,839),32157=>array(35,-68,965,839),32158=>array(42,-46,951,828),32159=>array(34,-69,972,839),32160=>array(34,-67,966,843),32161=>array(48,-70,956,830),32162=>array(34,-67,897,839),32163=>array(34,-64,974,839),32164=>array(55,-54,932,786),32165=>array(41,-71,958,824),32166=>array(41,-59,983,836),32167=>array(48,-70,961,832),32168=>array(38,-77,960,849),32169=>array(58,-67,958,832),32170=>array(44,-69,953,832),32171=>array(50,-64,957,839),32172=>array(34,-65,973,839),32173=>array(34,-64,938,839),32174=>array(34,-73,946,843),32175=>array(39,-64,923,848),32176=>array(44,-64,941,839),32177=>array(34,-64,915,839),32178=>array(33,-64,909,839),32179=>array(57,-67,895,827),32180=>array(32,-65,966,839),32181=>array(34,-68,966,839),32182=>array(39,-64,969,820),32183=>array(34,-66,963,839),32184=>array(34,-67,976,856),32185=>array(42,-64,964,845),32186=>array(39,-64,952,839),32187=>array(34,-66,966,839),32188=>array(50,-71,953,841),32189=>array(44,-64,953,840),32190=>array(34,-66,968,839),32191=>array(34,-68,911,839),32192=>array(40,-73,958,837),32193=>array(53,-64,977,829),32194=>array(56,-74,982,829),32195=>array(36,-71,976,844),32196=>array(45,-62,966,822),32197=>array(43,-82,977,826),32198=>array(49,-73,920,828),32199=>array(49,-64,938,839),32200=>array(42,-64,934,842),32201=>array(45,-68,952,827),32202=>array(57,-63,943,803),32203=>array(34,-68,954,839),32204=>array(32,-62,961,856),32205=>array(40,-65,960,839),32206=>array(40,-66,962,839),32207=>array(34,-64,968,839),32208=>array(49,-68,978,840),32209=>array(34,-64,963,839),32210=>array(34,-67,941,839),32211=>array(39,-66,984,830),32212=>array(53,-74,941,818),32213=>array(34,-82,956,839),32214=>array(34,-67,941,839),32215=>array(71,-73,924,820),32216=>array(34,-68,969,839),32217=>array(45,-61,956,832),32218=>array(34,-64,963,840),32219=>array(54,-72,963,831),32220=>array(67,-70,966,839),32221=>array(34,-68,943,839),32222=>array(29,-69,976,848),32223=>array(54,-48,954,836),32224=>array(34,-67,946,839),32225=>array(34,-64,973,839),32226=>array(53,-67,950,829),32227=>array(34,-64,979,839),32228=>array(34,-64,957,839),32229=>array(36,-61,964,840),32230=>array(51,-41,976,819),32231=>array(55,-70,953,836),32232=>array(33,-67,935,839),32233=>array(34,-64,959,839),32234=>array(40,-64,960,837),32235=>array(43,-36,971,850),32236=>array(34,-64,950,839),32237=>array(64,-64,921,829),32238=>array(49,-72,968,831),32239=>array(32,-64,954,839),32240=>array(49,-71,984,834),32241=>array(44,-62,967,833),32242=>array(24,-71,960,839),32243=>array(36,-72,943,847),32244=>array(34,-66,967,839),32245=>array(53,-61,980,839),32246=>array(40,-55,972,841),32247=>array(50,-68,954,830),32248=>array(62,-44,953,810),32249=>array(38,-64,952,820),32250=>array(51,-70,914,830),32251=>array(24,-72,962,839),32252=>array(51,-41,959,830),32253=>array(51,-90,938,840),32254=>array(51,-63,958,830),32255=>array(35,-39,954,839),32256=>array(33,-50,963,828),32257=>array(34,-64,967,839),32258=>array(33,-50,964,823),32259=>array(48,-70,961,828),32260=>array(34,-64,971,839),32261=>array(24,-64,972,839),32262=>array(33,-59,970,849),32263=>array(46,-50,964,855),32264=>array(63,-65,950,829),32265=>array(34,-66,955,839),32266=>array(34,-64,961,839),32267=>array(34,-64,962,847),32268=>array(55,-75,973,814),32269=>array(41,-70,951,841),32270=>array(38,-69,932,827),32271=>array(40,-67,967,844),32272=>array(59,-64,926,850),32273=>array(44,-65,984,852),32274=>array(34,-64,951,839),32275=>array(47,-71,961,823),32276=>array(46,-70,985,822),32277=>array(34,-64,960,839),32278=>array(47,-72,952,841),32279=>array(37,-63,977,855),32280=>array(33,-61,977,842),32281=>array(48,-70,931,828),32282=>array(53,-71,919,833),32283=>array(34,-64,953,839),32284=>array(44,-78,954,826),32285=>array(33,-82,961,839),32286=>array(34,-71,947,839),32287=>array(24,-64,958,839),32288=>array(33,-77,960,826),32289=>array(34,-68,952,839),32290=>array(39,-70,967,844),32291=>array(54,-57,966,817),32292=>array(49,-72,959,824),32293=>array(43,-70,984,830),32294=>array(34,-70,961,839),32295=>array(43,-60,966,839),32296=>array(62,-74,964,828),32297=>array(59,-70,979,825),32298=>array(44,-68,955,810),32299=>array(35,-64,963,843),32300=>array(42,-45,952,842),32301=>array(56,-61,961,850),32302=>array(34,-65,943,839),32303=>array(34,-72,957,839),32304=>array(51,-71,976,823),32305=>array(24,-70,955,839),32306=>array(34,-64,962,839),32307=>array(35,-69,954,823),32308=>array(55,-70,941,832),32309=>array(34,-65,974,839),32310=>array(60,-59,968,840),32311=>array(34,-65,942,839),32312=>array(41,-73,972,827),32313=>array(34,-64,955,839),32314=>array(34,-64,960,839),32315=>array(34,-62,968,839),32316=>array(42,-72,972,831),32317=>array(34,-64,959,844),32318=>array(34,-73,952,839),32319=>array(42,-79,972,845),32320=>array(51,-68,953,824),32321=>array(59,-71,948,837),32322=>array(42,-72,953,830),32323=>array(34,-72,917,839),32324=>array(71,-73,949,805),32325=>array(34,-65,972,839),32326=>array(34,-75,970,839),32327=>array(59,-60,965,846),32328=>array(48,-74,962,841),32329=>array(46,-68,968,820),32330=>array(29,-64,964,839),32331=>array(57,-71,964,829),32332=>array(38,-75,973,839),32333=>array(34,-67,957,839),32334=>array(39,-71,959,831),32335=>array(49,-58,947,820),32336=>array(35,-44,971,825),32337=>array(44,-64,973,832),32338=>array(34,-71,972,839),32339=>array(42,-73,969,831),32340=>array(28,-66,958,839),32341=>array(34,-67,949,840),32342=>array(24,-72,984,839),32343=>array(43,-71,958,827),32344=>array(47,-61,926,845),32345=>array(34,-67,959,839),32346=>array(34,-64,965,859),32347=>array(45,-65,962,838),32348=>array(45,-70,957,838),32349=>array(34,-68,920,839),32350=>array(34,-64,954,839),32351=>array(43,-68,957,830),32352=>array(50,-67,971,840),32353=>array(26,-72,962,839),32354=>array(42,-70,954,826),32355=>array(40,-39,957,825),32356=>array(36,-66,969,838),32357=>array(37,-65,951,836),32358=>array(24,-64,967,839),32359=>array(25,-75,949,839),32360=>array(55,-73,974,830),32361=>array(34,-64,970,839),32362=>array(34,-68,973,864),32363=>array(53,-73,962,841),32364=>array(39,-65,965,837),32365=>array(63,-57,937,833),32366=>array(41,-39,951,812),32367=>array(40,-66,970,807),32368=>array(34,-64,972,839),32369=>array(48,-38,959,837),32370=>array(49,-68,961,829),32371=>array(51,-71,962,845),32372=>array(50,-71,944,831),32373=>array(47,-45,962,834),32374=>array(43,-33,977,829),32375=>array(44,-64,962,836),32376=>array(30,-78,970,830),32377=>array(34,-66,934,839),32378=>array(45,-74,976,834),32379=>array(34,-64,954,839),32380=>array(24,-70,942,839),32381=>array(34,-70,958,839),32382=>array(57,-59,976,836),32383=>array(34,-64,957,844),32384=>array(42,-67,972,829),32385=>array(30,-58,971,851),32386=>array(22,-71,974,850),32387=>array(34,-68,969,839),32388=>array(36,-62,963,833),32389=>array(56,-68,948,850),32390=>array(51,-38,967,830),32391=>array(41,-66,960,831),32392=>array(34,-64,970,839),32393=>array(34,-64,981,845),32394=>array(31,-77,967,839),32395=>array(49,-68,961,837),32396=>array(34,-84,957,839),32397=>array(53,-62,947,789),32398=>array(24,-64,967,839),32399=>array(35,-67,961,839),32400=>array(19,-64,980,839),32401=>array(46,-68,956,833),32402=>array(34,-64,950,839),32403=>array(34,-67,954,839),32404=>array(24,-68,966,847),32405=>array(32,-68,979,849),32406=>array(19,-64,967,839),32407=>array(38,-65,941,833),32408=>array(30,-68,972,839),32409=>array(40,-67,964,835),32410=>array(26,-68,974,829),32411=>array(42,-71,953,839),32412=>array(19,-64,960,847),32413=>array(42,-62,955,822),32414=>array(53,-31,947,842),32415=>array(271,10,660,829),32416=>array(72,-69,847,828),32417=>array(57,-56,933,828),32418=>array(74,3,936,828),32419=>array(57,-64,933,828),32420=>array(43,-67,942,812),32421=>array(57,-24,936,843),32422=>array(61,-62,879,835),32423=>array(62,-71,941,828),32424=>array(58,-56,964,838),32425=>array(54,-66,912,830),32426=>array(57,-15,936,828),32427=>array(73,-69,874,820),32428=>array(46,-69,903,824),32429=>array(57,-54,927,828),32430=>array(77,-71,950,837),32431=>array(70,-34,929,834),32432=>array(57,-47,937,829),32433=>array(66,-59,943,824),32434=>array(40,-59,885,829),32435=>array(52,-57,898,833),32436=>array(72,-21,939,813),32437=>array(41,-64,945,833),32438=>array(32,-21,943,835),32439=>array(75,-67,957,828),32440=>array(46,-70,926,825),32441=>array(71,-65,944,840),32442=>array(60,-66,921,842),32443=>array(60,11,934,828),32444=>array(74,-72,895,824),32445=>array(74,-23,936,820),32446=>array(57,-61,915,828),32447=>array(44,-60,937,831),32448=>array(57,-66,942,829),32449=>array(57,-22,937,828),32450=>array(57,-65,966,832),32451=>array(35,-61,947,830),32452=>array(57,-14,925,807),32453=>array(77,-64,885,835),32454=>array(60,-57,895,783),32455=>array(39,-56,942,802),32456=>array(62,-79,947,834),32457=>array(39,-57,873,827),32458=>array(57,-66,938,832),32459=>array(53,-64,915,827),32460=>array(57,-67,903,828),32461=>array(54,-72,894,786),32462=>array(41,-74,958,818),32463=>array(57,-33,938,819),32464=>array(57,-67,950,832),32465=>array(42,-69,937,834),32466=>array(71,-65,945,835),32467=>array(67,-66,933,837),32468=>array(57,-63,958,840),32469=>array(44,-60,944,835),32470=>array(76,-22,923,828),32471=>array(53,-66,947,830),32472=>array(44,-55,934,838),32473=>array(57,-67,949,852),32474=>array(59,-58,882,839),32475=>array(57,-57,960,842),32476=>array(74,-63,967,847),32477=>array(39,-21,925,832),32478=>array(81,-64,947,840),32479=>array(57,-71,942,838),32480=>array(57,-74,954,828),32481=>array(57,-67,921,835),32482=>array(73,-59,879,827),32483=>array(50,-85,942,807),32484=>array(59,-68,962,832),32485=>array(59,-69,942,834),32486=>array(25,-66,964,833),32487=>array(53,-23,940,809),32488=>array(61,-67,909,847),32489=>array(41,-62,931,833),32490=>array(53,-69,924,829),32491=>array(57,-68,951,834),32492=>array(52,-66,969,828),32493=>array(28,-67,932,833),32494=>array(59,-63,937,836),32495=>array(63,-66,939,827),32496=>array(65,-65,936,838),32497=>array(53,-74,916,827),32498=>array(57,-64,949,828),32499=>array(50,-23,940,826),32500=>array(63,-64,920,836),32501=>array(67,-70,886,842),32502=>array(57,-72,958,836),32503=>array(34,-74,925,792),32504=>array(57,-69,881,827),32505=>array(49,-67,924,840),32506=>array(30,-64,937,828),32507=>array(53,-41,973,839),32508=>array(53,-67,934,844),32509=>array(61,-68,951,843),32510=>array(53,-64,917,850),32511=>array(30,-64,943,819),32512=>array(53,-67,973,818),32513=>array(57,-66,921,836),32514=>array(53,-63,939,829),32515=>array(53,-74,910,827),32516=>array(52,-70,953,832),32517=>array(60,-66,931,814),32518=>array(35,-54,932,841),32519=>array(57,-66,935,828),32520=>array(52,-73,937,830),32521=>array(57,-70,935,822),32522=>array(69,-28,959,805),32523=>array(39,-66,919,830),32524=>array(57,-43,959,828),32525=>array(52,-33,933,830),32526=>array(53,-71,953,818),32527=>array(53,-57,954,839),32528=>array(59,-64,959,842),32529=>array(53,-69,971,831),32530=>array(53,-72,951,844),32531=>array(66,-67,949,827),32532=>array(62,-69,925,848),32533=>array(39,-54,941,838),32534=>array(34,-69,922,837),32535=>array(57,-64,956,828),32536=>array(53,-73,937,834),32537=>array(47,-64,911,827),32538=>array(50,-67,946,832),32539=>array(53,-64,942,827),32540=>array(53,-68,936,843),32541=>array(52,-53,955,816),32542=>array(69,-63,962,855),32543=>array(53,-67,932,850),32544=>array(36,-64,919,847),32545=>array(56,-63,944,847),32546=>array(53,-23,943,840),32547=>array(55,-67,967,851),32548=>array(33,-50,933,824),32549=>array(57,-64,940,819),32550=>array(53,-68,958,827),32551=>array(53,-64,959,827),32552=>array(39,-75,937,822),32553=>array(41,-66,917,841),32554=>array(52,-76,953,817),32555=>array(53,-67,955,837),32556=>array(38,-68,945,825),32557=>array(57,-64,947,855),32558=>array(62,-67,931,839),32559=>array(53,-64,901,851),32560=>array(50,-40,935,806),32561=>array(53,-72,951,834),32562=>array(53,-66,963,827),32563=>array(57,-68,952,828),32564=>array(53,-71,946,842),32565=>array(38,-69,933,822),32566=>array(47,-60,953,831),32567=>array(58,-62,909,838),32568=>array(44,-45,941,836),32569=>array(50,-72,960,845),32570=>array(59,-68,950,836),32571=>array(58,-32,962,836),32572=>array(80,-73,960,851),32573=>array(48,-54,971,848),32574=>array(58,-53,954,855),32575=>array(49,-58,945,843),32576=>array(47,-64,960,851),32577=>array(47,-65,951,851),32578=>array(48,-68,912,780),32579=>array(69,-71,945,838),32580=>array(49,-68,956,833),32581=>array(48,-72,931,834),32582=>array(48,-68,951,829),32583=>array(45,-72,970,838),32584=>array(48,-70,953,831),32585=>array(63,-54,935,837),32586=>array(72,-68,958,825),32587=>array(62,-68,939,838),32588=>array(59,-65,951,790),32589=>array(68,-62,957,797),32590=>array(34,-53,951,842),32591=>array(45,-63,957,841),32592=>array(44,-59,949,838),32593=>array(117,-60,883,780),32594=>array(148,317,884,597),32595=>array(137,265,863,657),32596=>array(114,-68,894,787),32597=>array(64,-64,917,786),32598=>array(110,10,917,802),32599=>array(69,-55,884,792),32600=>array(45,-64,955,787),32601=>array(50,-68,955,789),32602=>array(98,-57,869,791),32603=>array(42,-61,973,798),32604=>array(79,-35,961,777),32605=>array(55,-20,950,798),32606=>array(56,-62,947,790),32607=>array(68,-60,954,787),32608=>array(47,-58,947,784),32609=>array(63,-24,941,785),32610=>array(55,-60,904,792),32611=>array(63,-33,958,763),32612=>array(55,-53,908,785),32613=>array(141,-70,883,779),32614=>array(82,-68,933,783),32615=>array(55,-71,971,780),32616=>array(29,-34,966,794),32617=>array(59,-69,956,782),32618=>array(57,-69,943,794),32619=>array(59,-64,968,787),32620=>array(44,-72,969,784),32621=>array(63,-51,963,800),32622=>array(100,-73,945,813),32623=>array(81,-69,931,787),32624=>array(71,-73,900,810),32625=>array(51,-72,949,791),32626=>array(58,-65,944,789),32627=>array(56,-26,954,780),32628=>array(34,-62,928,776),32629=>array(57,-69,919,783),32630=>array(136,-70,882,783),32631=>array(68,-63,967,807),32632=>array(85,-73,951,782),32633=>array(39,-64,949,788),32634=>array(44,-70,973,783),32635=>array(41,-68,951,782),32636=>array(59,-65,943,810),32637=>array(36,-65,947,791),32638=>array(110,-67,905,794),32639=>array(50,-8,947,805),32640=>array(107,-71,916,787),32641=>array(49,-65,890,772),32642=>array(64,-63,896,802),32643=>array(42,-65,968,792),32644=>array(44,-64,953,815),32645=>array(38,-67,950,807),32646=>array(43,-73,956,784),32647=>array(63,-64,953,788),32648=>array(62,-64,938,796),32649=>array(50,-52,968,792),32650=>array(72,-67,946,855),32651=>array(60,-67,953,821),32652=>array(39,-61,953,844),32653=>array(38,-67,965,836),32654=>array(45,-61,955,845),32655=>array(54,-68,957,842),32656=>array(34,-67,974,830),32657=>array(52,-67,991,854),32658=>array(54,-73,985,842),32659=>array(44,-71,972,842),32660=>array(61,-63,957,856),32661=>array(46,-66,965,848),32662=>array(50,-71,967,834),32663=>array(36,-66,965,841),32664=>array(53,-68,954,843),32665=>array(53,-63,941,854),32666=>array(22,-68,960,847),32667=>array(53,-69,938,846),32668=>array(57,-66,960,844),32669=>array(42,-73,950,839),32670=>array(29,-33,934,838),32671=>array(36,-68,922,823),32672=>array(43,-72,969,840),32673=>array(49,-74,960,845),32674=>array(52,-69,974,837),32675=>array(57,-64,954,787),32676=>array(32,-62,960,850),32677=>array(46,-75,950,833),32678=>array(41,-73,964,834),32679=>array(35,-75,965,830),32680=>array(49,-62,978,858),32681=>array(48,-63,941,843),32682=>array(42,-77,965,842),32683=>array(39,-70,950,845),32684=>array(51,-70,978,822),32685=>array(50,-74,969,827),32686=>array(33,-58,974,860),32687=>array(55,-67,930,842),32688=>array(41,-82,971,831),32689=>array(53,-73,970,833),32690=>array(34,-66,959,853),32691=>array(46,-69,968,832),32692=>array(35,-83,969,808),32693=>array(46,-82,967,826),32694=>array(16,-65,959,842),32695=>array(53,-71,969,835),32696=>array(29,-60,973,841),32697=>array(51,-62,966,853),32698=>array(49,-64,968,833),32699=>array(52,-69,970,836),32700=>array(41,-71,965,797),32701=>array(73,-50,892,785),32702=>array(40,-70,953,783),32703=>array(43,-64,945,780),32704=>array(47,-63,917,836),32705=>array(47,-62,958,822),32706=>array(43,-71,981,790),32707=>array(52,-67,938,840),32708=>array(47,-73,970,837),32709=>array(31,-59,972,839),32710=>array(54,-58,946,790),32711=>array(41,-76,959,785),32712=>array(113,-79,923,788),32713=>array(29,-64,910,826),32714=>array(56,-65,915,821),32715=>array(42,-67,950,836),32716=>array(50,-20,942,798),32717=>array(33,-72,962,821),32718=>array(31,-63,918,838),32719=>array(32,-76,965,785),32720=>array(32,-74,976,827),32721=>array(37,-64,914,828),32722=>array(74,-72,892,782),32723=>array(70,-65,914,838),32724=>array(51,-60,893,855),32725=>array(47,-63,965,845),32726=>array(26,-64,916,817),32727=>array(61,-70,916,829),32728=>array(32,-71,941,818),32729=>array(45,-64,931,836),32730=>array(74,-65,926,801),32731=>array(37,-63,982,844),32732=>array(37,-72,964,783),32733=>array(30,-48,910,825),32734=>array(53,-68,962,834),32735=>array(40,-80,927,807),32736=>array(53,-61,947,807),32737=>array(46,-56,921,826),32738=>array(41,-71,903,782),32739=>array(61,-63,936,797),32740=>array(98,-71,918,785),32741=>array(42,-59,956,834),32742=>array(65,-59,959,863),32743=>array(57,-69,913,855),32744=>array(88,-65,970,785),32745=>array(41,-60,917,795),32746=>array(59,-73,968,825),32747=>array(52,-74,963,783),32748=>array(62,-62,957,790),32749=>array(53,-76,983,824),32750=>array(75,-64,903,788),32751=>array(66,-52,941,802),32752=>array(60,-69,978,853),32753=>array(46,-63,904,848),32754=>array(41,-73,895,780),32755=>array(60,-67,929,785),32756=>array(40,-73,969,816),32757=>array(37,-54,948,854),32758=>array(48,-77,913,839),32759=>array(53,-67,917,830),32760=>array(61,-70,919,835),32761=>array(28,-66,966,830),32762=>array(46,-68,913,845),32763=>array(59,-67,909,824),32764=>array(54,-66,946,807),32765=>array(30,-67,910,832),32766=>array(60,-57,928,795),32767=>array(66,-52,917,843),32768=>array(28,-73,954,828),32769=>array(38,-39,923,832),32770=>array(21,160,923,832),32771=>array(48,-56,929,836),32772=>array(39,-36,948,834),32773=>array(62,-64,929,836),32774=>array(33,-69,938,836),32775=>array(59,-64,950,835),32776=>array(69,-66,933,840),32777=>array(40,-55,951,840),32778=>array(49,-53,950,836),32779=>array(53,-53,950,836),32780=>array(89,-68,923,768),32781=>array(63,-68,934,789),32782=>array(46,-67,970,791),32783=>array(55,-74,951,822),32784=>array(51,-79,956,836),32785=>array(62,-62,954,840),32786=>array(55,-65,968,829),32787=>array(46,-65,924,827),32788=>array(46,-65,957,828),32789=>array(31,-73,954,831),32790=>array(31,-70,970,831),32791=>array(35,-68,924,828),32792=>array(36,-73,943,832),32793=>array(36,-73,951,832),32794=>array(46,-72,960,833),32795=>array(47,-71,951,839),32796=>array(38,-73,909,832),32797=>array(31,-73,938,831),32798=>array(47,-68,914,829),32799=>array(49,-58,964,828),32800=>array(21,-78,964,842),32801=>array(59,-66,929,831),32802=>array(25,-72,914,818),32803=>array(46,-73,968,844),32804=>array(46,-70,956,826),32805=>array(39,-69,933,832),32806=>array(61,-71,927,830),32807=>array(32,-73,922,806),32808=>array(34,-64,959,832),32809=>array(36,-67,964,833),32810=>array(43,-69,954,842),32811=>array(44,-71,943,830),32812=>array(34,-69,954,835),32813=>array(53,-69,949,840),32814=>array(44,-86,968,831),32815=>array(49,-69,966,827),32816=>array(33,-62,979,830),32817=>array(23,-68,955,838),32818=>array(45,-69,972,849),32819=>array(55,-74,922,781),32820=>array(56,-67,967,828),32821=>array(48,-62,954,789),32822=>array(59,-67,930,786),32823=>array(40,-69,960,839),32824=>array(55,-66,916,830),32825=>array(55,-67,978,853),32826=>array(29,-67,944,789),32827=>array(42,-64,951,824),32828=>array(46,-67,957,789),32829=>array(40,-70,950,831),32830=>array(55,-65,960,838),32831=>array(38,-67,954,825),32832=>array(50,-67,967,825),32833=>array(49,-67,951,805),32834=>array(39,-60,952,794),32835=>array(35,-65,961,829),32836=>array(50,-72,971,850),32837=>array(50,-67,945,819),32838=>array(28,-62,966,854),32839=>array(58,-70,957,781),32840=>array(72,-80,921,822),32841=>array(46,-68,921,827),32842=>array(59,-71,914,830),32843=>array(51,-48,923,841),32844=>array(31,-70,955,782),32845=>array(29,-68,924,830),32846=>array(63,-67,962,826),32847=>array(49,-68,960,785),32848=>array(45,-70,959,822),32849=>array(50,-70,955,770),32850=>array(36,-64,941,804),32851=>array(47,-59,960,806),32852=>array(37,-60,940,830),32853=>array(50,-67,955,844),32854=>array(66,-37,934,805),32855=>array(50,-75,968,833),32856=>array(33,-71,955,831),32857=>array(50,-67,974,835),32858=>array(36,-61,948,793),32859=>array(50,-67,956,841),32860=>array(48,-67,956,834),32861=>array(45,-71,952,823),32862=>array(119,-68,901,786),32863=>array(34,-69,950,852),32864=>array(50,-68,959,845),32865=>array(32,-65,968,819),32866=>array(50,-83,949,797),32867=>array(50,-67,953,816),32868=>array(41,-61,970,856),32869=>array(50,-68,925,827),32870=>array(50,-67,964,839),32871=>array(51,-72,970,817),32872=>array(52,-65,963,806),32873=>array(34,-69,928,824),32874=>array(33,-60,950,838),32875=>array(48,-65,963,806),32876=>array(46,-71,971,827),32877=>array(50,-67,969,856),32878=>array(52,-65,967,782),32879=>array(42,-65,946,842),32880=>array(43,-66,973,835),32881=>array(53,-70,948,838),32882=>array(62,-64,946,833),32883=>array(48,-70,952,846),32884=>array(44,-67,963,839),32885=>array(40,-67,962,838),32886=>array(42,-66,951,808),32887=>array(35,-70,960,839),32888=>array(44,-73,942,827),32889=>array(41,-64,967,835),32890=>array(41,-65,948,846),32891=>array(35,-65,954,831),32892=>array(44,-67,966,847),32893=>array(58,-67,966,840),32894=>array(43,-71,962,840),32895=>array(73,-66,945,833),32896=>array(73,-66,931,833),32897=>array(45,-61,947,848),32898=>array(50,-72,953,828),32899=>array(50,-62,941,834),32900=>array(28,-68,945,829),32901=>array(46,-69,947,833),32902=>array(46,-61,946,841),32903=>array(51,-61,949,850),32904=>array(50,-61,953,856),32905=>array(118,-73,882,841),32906=>array(49,-68,959,783),32907=>array(68,-70,898,834),32908=>array(31,-74,948,773),32909=>array(59,-75,957,831),32910=>array(116,-45,892,762),32911=>array(42,-79,958,777),32912=>array(41,-78,977,826),32913=>array(76,-59,921,844),32914=>array(39,-64,954,833),32915=>array(135,-50,924,826),32916=>array(60,-71,963,825),32917=>array(53,-65,908,799),32918=>array(133,-61,861,836),32919=>array(60,-71,944,839),32920=>array(57,-70,933,826),32921=>array(70,-64,841,788),32922=>array(63,-68,938,829),32923=>array(54,-70,942,786),32924=>array(44,-58,965,856),32925=>array(60,-71,936,785),32926=>array(48,-62,959,803),32927=>array(31,-80,950,782),32928=>array(22,-61,886,786),32929=>array(51,-65,944,788),32930=>array(43,-70,969,837),32931=>array(35,-69,972,833),32932=>array(38,-71,939,831),32933=>array(51,-70,949,779),32934=>array(29,-60,968,810),32935=>array(60,-72,944,785),32936=>array(60,-71,940,813),32937=>array(53,-70,901,810),32938=>array(34,-71,949,825),32939=>array(38,-67,957,833),32940=>array(44,-62,961,831),32941=>array(24,-68,877,799),32942=>array(41,-73,957,832),32943=>array(59,-54,953,831),32944=>array(60,-71,977,837),32945=>array(30,-62,945,826),32946=>array(92,-49,907,840),32947=>array(46,-71,921,829),32948=>array(52,-49,928,844),32949=>array(39,-68,954,829),32950=>array(37,-58,956,824),32951=>array(30,-67,939,824),32952=>array(46,-65,956,811),32953=>array(56,-71,959,811),32954=>array(31,-70,953,839),32955=>array(121,-58,897,827),32956=>array(23,-82,950,827),32957=>array(23,-81,956,822),32958=>array(124,-69,944,820),32959=>array(31,-68,894,814),32960=>array(35,-73,946,815),32961=>array(27,-65,948,824),32962=>array(50,-71,912,833),32963=>array(170,-49,849,785),32964=>array(177,-48,838,834),32965=>array(45,-76,974,826),32966=>array(37,-70,954,786),32967=>array(45,-75,928,826),32968=>array(41,-73,968,826),32969=>array(40,-60,903,854),32970=>array(34,-66,908,843),32971=>array(57,-70,934,835),32972=>array(60,-57,937,826),32973=>array(31,-73,977,837),32974=>array(49,-70,944,838),32975=>array(51,-60,957,840),32976=>array(45,-59,905,840),32977=>array(32,-55,966,797),32978=>array(57,-70,945,788),32979=>array(57,-70,959,789),32980=>array(54,-68,968,835),32981=>array(44,-57,961,848),32982=>array(45,-69,934,834),32983=>array(39,-68,980,840),32984=>array(42,-67,957,836),32985=>array(53,-70,940,837),32986=>array(44,-69,948,786),32987=>array(49,-70,899,787),32988=>array(44,-69,953,824),32989=>array(34,-72,948,833),32990=>array(37,-64,958,845),32991=>array(35,-60,962,787),32992=>array(29,-62,957,839),32993=>array(71,-67,895,818),32994=>array(66,-70,948,787),32995=>array(47,-71,964,825),32996=>array(40,-66,967,846),32997=>array(38,-50,935,789),32998=>array(38,-67,981,829),32999=>array(18,-67,931,826),33000=>array(31,-72,939,817),33001=>array(31,-80,946,822),33002=>array(34,-69,921,817),33003=>array(32,-72,923,782),33004=>array(35,-66,932,827),33005=>array(48,-68,910,790),33006=>array(35,-70,965,837),33007=>array(28,-70,969,848),33008=>array(39,-72,963,838),33009=>array(35,-60,959,823),33010=>array(52,-69,975,845),33011=>array(35,-71,967,845),33012=>array(28,-70,912,786),33013=>array(46,-72,959,782),33014=>array(28,-71,946,842),33015=>array(73,-71,878,847),33016=>array(31,-58,924,841),33017=>array(46,-73,965,780),33018=>array(45,-72,948,840),33019=>array(49,-67,967,838),33020=>array(27,-70,947,845),33021=>array(63,-55,959,844),33022=>array(51,-64,952,829),33023=>array(34,-72,959,827),33024=>array(35,-77,972,813),33025=>array(29,-67,962,818),33026=>array(48,-70,952,815),33027=>array(33,-54,947,821),33028=>array(33,-70,965,824),33029=>array(73,-52,940,841),33030=>array(30,-72,958,844),33031=>array(40,-67,915,841),33032=>array(35,-62,967,836),33033=>array(44,-70,972,840),33034=>array(56,-59,944,835),33035=>array(73,-49,940,808),33036=>array(33,-70,943,841),33037=>array(38,-74,951,818),33038=>array(37,-73,932,818),33039=>array(31,-66,920,821),33040=>array(24,-82,951,832),33041=>array(43,-64,951,841),33042=>array(27,-70,980,821),33043=>array(32,-72,962,827),33044=>array(28,-64,923,846),33045=>array(44,-72,967,837),33046=>array(45,-67,951,837),33047=>array(45,-58,925,851),33048=>array(26,-67,963,821),33049=>array(42,-75,948,820),33050=>array(33,-61,913,810),33051=>array(49,-65,945,791),33052=>array(27,-70,944,776),33053=>array(48,-71,946,835),33054=>array(49,-60,970,833),33055=>array(39,-71,953,815),33056=>array(44,-62,972,820),33057=>array(44,-62,972,820),33058=>array(41,-70,942,839),33059=>array(58,-56,935,790),33060=>array(33,-57,967,800),33061=>array(44,-78,964,822),33062=>array(31,-70,968,831),33063=>array(33,-71,985,838),33064=>array(31,-70,975,825),33065=>array(37,-67,965,846),33066=>array(31,-70,961,846),33067=>array(32,-71,968,812),33068=>array(65,-72,986,834),33069=>array(39,-54,950,787),33070=>array(31,-75,948,835),33071=>array(28,-70,952,839),33072=>array(44,-60,956,797),33073=>array(59,-71,944,833),33074=>array(23,-71,970,788),33075=>array(27,-67,964,818),33076=>array(31,-70,969,797),33077=>array(31,-58,947,788),33078=>array(34,-67,925,785),33079=>array(31,-70,906,833),33080=>array(26,-65,944,836),33081=>array(42,-64,962,799),33082=>array(34,-71,943,839),33083=>array(31,-72,959,833),33084=>array(31,-66,948,787),33085=>array(23,-68,945,830),33086=>array(28,-70,957,841),33087=>array(31,-70,974,841),33088=>array(31,-73,976,851),33089=>array(31,-71,953,830),33090=>array(31,-70,969,788),33091=>array(46,-71,981,830),33092=>array(33,-67,953,833),33093=>array(31,-70,970,841),33094=>array(28,-70,965,835),33095=>array(38,-81,974,822),33096=>array(32,-77,940,828),33097=>array(43,-70,959,816),33098=>array(52,-69,956,824),33099=>array(21,-70,970,812),33100=>array(31,-72,972,844),33101=>array(41,-66,972,825),33102=>array(108,-59,958,815),33103=>array(40,-78,980,783),33104=>array(46,-68,948,839),33105=>array(28,-70,952,835),33106=>array(44,-74,944,784),33107=>array(18,-66,936,818),33108=>array(29,-70,947,822),33109=>array(26,-64,962,834),33110=>array(31,-70,973,835),33111=>array(31,-70,955,831),33112=>array(31,-70,919,787),33113=>array(34,-78,951,833),33114=>array(23,-83,949,831),33115=>array(46,-72,954,782),33116=>array(47,-75,973,822),33117=>array(31,-70,975,788),33118=>array(45,-67,970,836),33119=>array(31,-70,952,836),33120=>array(49,-72,987,831),33121=>array(34,-77,903,782),33122=>array(38,-67,911,803),33123=>array(31,-70,948,850),33124=>array(38,-69,955,840),33125=>array(19,-70,945,788),33126=>array(65,-65,925,846),33127=>array(34,-70,973,855),33128=>array(31,-70,956,835),33129=>array(49,-71,974,830),33130=>array(31,-70,953,788),33131=>array(48,-64,945,836),33132=>array(31,-70,977,796),33133=>array(28,-70,947,787),33134=>array(28,-70,964,786),33135=>array(47,-72,956,832),33136=>array(24,-70,941,793),33137=>array(26,-63,964,829),33138=>array(43,-77,981,782),33139=>array(58,-71,911,820),33140=>array(27,-70,972,833),33141=>array(48,-70,980,791),33142=>array(39,-75,979,825),33143=>array(37,-71,954,785),33144=>array(42,-60,952,801),33145=>array(21,-70,973,837),33146=>array(21,-70,968,837),33147=>array(28,-70,950,829),33148=>array(26,-76,941,778),33149=>array(26,-78,950,784),33150=>array(31,-61,951,836),33151=>array(22,-60,958,783),33152=>array(28,-69,938,819),33153=>array(30,-70,983,843),33154=>array(46,-48,944,847),33155=>array(60,-70,967,785),33156=>array(48,-70,986,830),33157=>array(48,-64,954,843),33158=>array(45,-64,953,825),33159=>array(45,-72,981,832),33160=>array(18,-69,939,784),33161=>array(41,-75,964,826),33162=>array(34,-70,961,831),33163=>array(72,-67,932,835),33164=>array(44,-70,980,823),33165=>array(49,-72,961,835),33166=>array(36,-74,972,842),33167=>array(94,-62,906,834),33168=>array(46,-52,944,846),33169=>array(25,-63,934,832),33170=>array(48,-70,963,787),33171=>array(48,-75,969,853),33172=>array(43,-64,953,839),33173=>array(44,-75,920,783),33174=>array(30,-70,971,844),33175=>array(37,-65,959,829),33176=>array(39,-69,962,788),33177=>array(39,-60,969,829),33178=>array(46,-68,941,848),33179=>array(47,-72,954,835),33180=>array(19,-70,972,823),33181=>array(28,-70,966,828),33182=>array(41,-69,944,826),33183=>array(45,-70,958,839),33184=>array(39,-76,977,788),33185=>array(18,-70,987,850),33186=>array(45,-67,951,824),33187=>array(33,-71,938,817),33188=>array(18,-70,968,787),33189=>array(37,-62,950,844),33190=>array(39,-70,954,832),33191=>array(26,-60,950,833),33192=>array(17,-70,975,837),33193=>array(36,-78,969,836),33194=>array(26,-68,891,832),33195=>array(49,-75,982,845),33196=>array(55,-75,986,830),33197=>array(30,-70,969,839),33198=>array(40,-68,975,829),33199=>array(24,-70,981,837),33200=>array(30,-60,966,852),33201=>array(45,-75,983,840),33202=>array(41,-68,969,838),33203=>array(35,-67,949,840),33204=>array(36,-57,963,848),33205=>array(40,-67,964,830),33206=>array(48,-70,930,793),33207=>array(49,-70,967,827),33208=>array(42,-70,956,839),33209=>array(46,-79,956,830),33210=>array(28,-68,922,839),33211=>array(42,-70,959,845),33212=>array(43,-72,976,805),33213=>array(38,-66,956,853),33214=>array(36,-71,983,859),33215=>array(35,-75,969,840),33216=>array(35,-57,960,788),33217=>array(30,-82,961,837),33218=>array(33,-58,927,836),33219=>array(37,-75,952,849),33220=>array(39,-68,959,822),33221=>array(50,-69,916,787),33222=>array(21,-70,963,840),33223=>array(48,-67,931,835),33224=>array(36,-70,940,833),33225=>array(53,-68,991,854),33226=>array(39,-87,974,784),33227=>array(35,-71,959,827),33228=>array(40,-72,973,836),33229=>array(45,-73,966,843),33230=>array(36,-58,962,805),33231=>array(35,-74,955,847),33232=>array(45,-73,964,840),33233=>array(46,-78,948,777),33234=>array(44,-73,969,835),33235=>array(32,-61,966,838),33236=>array(32,-60,973,796),33237=>array(30,-60,965,853),33238=>array(41,-54,954,830),33239=>array(55,-70,979,837),33240=>array(40,-65,956,848),33241=>array(43,-75,969,829),33242=>array(43,-74,971,827),33243=>array(48,-67,946,790),33244=>array(41,-71,972,827),33245=>array(41,-50,964,867),33246=>array(39,-56,955,805),33247=>array(28,-61,970,838),33248=>array(54,-67,942,846),33249=>array(54,-53,949,849),33250=>array(43,-78,956,829),33251=>array(151,-58,927,780),33252=>array(100,-31,976,782),33253=>array(120,-65,959,820),33254=>array(58,-70,954,772),33255=>array(31,-63,956,836),33256=>array(120,-65,932,841),33257=>array(48,-76,965,781),33258=>array(201,-67,821,853),33259=>array(87,-47,948,840),33260=>array(46,-67,967,850),33261=>array(56,-63,970,844),33262=>array(42,-66,937,837),33263=>array(52,-64,946,849),33264=>array(61,-72,925,852),33265=>array(109,-101,922,839),33266=>array(37,-71,967,844),33267=>array(80,-16,915,770),33268=>array(59,-71,971,831),33269=>array(49,-57,965,848),33270=>array(55,-68,962,840),33271=>array(58,-72,960,821),33272=>array(54,-42,952,756),33273=>array(46,-78,954,824),33274=>array(80,-32,933,829),33275=>array(56,-68,959,829),33276=>array(156,-46,863,793),33277=>array(138,-68,825,829),33278=>array(42,-71,966,824),33279=>array(57,-68,954,833),33280=>array(83,-67,917,834),33281=>array(50,-74,956,834),33282=>array(44,-65,969,838),33283=>array(85,-60,898,834),33284=>array(58,-68,927,834),33285=>array(65,-52,874,842),33286=>array(52,-59,924,829),33287=>array(40,-70,955,836),33288=>array(68,-56,951,826),33289=>array(55,-67,965,810),33290=>array(62,-67,947,832),33291=>array(73,-41,936,832),33292=>array(76,-55,909,831),33293=>array(46,-65,958,856),33294=>array(46,-65,958,856),33295=>array(61,-57,879,831),33296=>array(43,-62,948,828),33297=>array(58,-67,956,829),33298=>array(45,-64,945,848),33299=>array(40,-53,931,818),33300=>array(55,-63,971,789),33301=>array(57,-75,961,824),33302=>array(36,-56,947,851),33303=>array(39,-58,955,843),33304=>array(31,-65,933,851),33305=>array(45,-63,965,846),33306=>array(50,-65,949,855),33307=>array(44,-72,942,837),33308=>array(41,-70,943,842),33309=>array(63,-68,937,841),33310=>array(47,-76,949,852),33311=>array(71,-69,936,839),33312=>array(47,-79,902,826),33313=>array(43,-66,947,837),33314=>array(67,-68,921,845),33315=>array(42,-71,943,821),33316=>array(53,-68,975,845),33317=>array(54,-71,963,853),33318=>array(42,-60,981,860),33319=>array(53,-68,948,848),33320=>array(34,-67,978,855),33321=>array(46,-68,958,835),33322=>array(37,-56,960,849),33323=>array(59,-63,945,849),33324=>array(44,-70,963,833),33325=>array(35,-70,935,822),33326=>array(39,-69,931,834),33327=>array(44,-61,910,856),33328=>array(41,-68,932,838),33329=>array(36,-66,944,833),33330=>array(39,-70,986,860),33331=>array(74,-64,915,839),33332=>array(51,-70,962,846),33333=>array(39,-54,951,849),33334=>array(40,-68,896,851),33335=>array(34,-65,963,849),33336=>array(54,-54,956,849),33337=>array(41,-67,957,849),33338=>array(41,-61,906,856),33339=>array(29,-66,924,828),33340=>array(44,-73,965,835),33341=>array(52,-70,972,840),33342=>array(36,-75,924,825),33343=>array(53,-68,973,839),33344=>array(74,-60,964,849),33345=>array(44,-68,975,845),33346=>array(34,-73,965,841),33347=>array(39,-70,978,843),33348=>array(49,-68,951,846),33349=>array(38,-70,966,840),33350=>array(35,-68,976,845),33351=>array(34,-61,965,849),33352=>array(32,-68,972,845),33353=>array(36,-73,962,836),33354=>array(53,-68,930,845),33355=>array(52,-68,971,839),33356=>array(23,-51,974,846),33357=>array(29,-73,963,845),33358=>array(34,-67,954,839),33359=>array(37,-64,954,856),33360=>array(36,-75,977,840),33361=>array(37,-68,915,838),33362=>array(52,-56,912,850),33363=>array(54,-71,980,828),33364=>array(26,-71,986,849),33365=>array(37,-67,938,847),33366=>array(39,-75,957,843),33367=>array(36,-72,959,845),33368=>array(49,-64,964,854),33369=>array(64,-63,991,863),33370=>array(49,-79,950,829),33371=>array(43,-80,956,833),33372=>array(36,-73,950,831),33373=>array(54,-54,966,849),33374=>array(44,-74,971,834),33375=>array(29,-54,963,849),33376=>array(20,-68,980,845),33377=>array(41,-73,923,836),33378=>array(44,-68,965,844),33379=>array(44,-63,967,856),33380=>array(34,-65,978,852),33381=>array(29,-71,968,850),33382=>array(34,-54,955,849),33383=>array(23,-68,970,845),33384=>array(29,-61,972,844),33385=>array(37,-72,970,845),33386=>array(44,-61,982,849),33387=>array(49,-68,973,845),33388=>array(37,-72,959,840),33389=>array(35,-62,970,858),33390=>array(112,-56,974,796),33391=>array(85,-61,963,820),33392=>array(40,-60,942,791),33393=>array(46,-68,958,827),33394=>array(46,-17,958,838),33395=>array(54,-62,938,828),33396=>array(53,-72,969,842),33397=>array(50,-73,961,831),33398=>array(48,-66,960,832),33399=>array(54,-66,960,832),33400=>array(47,-69,912,827),33401=>array(62,310,913,613),33402=>array(69,-29,919,820),33403=>array(64,-66,943,826),33404=>array(66,-64,939,826),33405=>array(42,-68,974,832),33406=>array(62,-60,946,825),33407=>array(60,-64,935,830),33408=>array(64,-66,943,826),33409=>array(56,-67,945,826),33410=>array(61,-57,911,831),33411=>array(47,-52,961,843),33412=>array(41,-69,969,832),33413=>array(61,-63,950,833),33414=>array(63,-67,946,836),33415=>array(81,-69,931,836),33416=>array(63,-69,940,831),33417=>array(65,-85,938,831),33418=>array(59,-71,951,822),33419=>array(65,-62,938,831),33420=>array(64,-61,932,831),33421=>array(67,-62,929,831),33422=>array(68,-61,936,833),33423=>array(53,-23,949,822),33424=>array(78,-71,948,823),33425=>array(60,-28,951,826),33426=>array(66,-20,936,823),33427=>array(71,-66,947,826),33428=>array(50,-68,915,838),33429=>array(62,-66,912,823),33430=>array(60,-66,936,823),33431=>array(62,-70,912,823),33432=>array(70,-80,959,818),33433=>array(65,-65,955,834),33434=>array(64,-46,950,832),33435=>array(66,-73,957,820),33436=>array(52,-58,929,832),33437=>array(55,-74,967,824),33438=>array(54,-72,962,826),33439=>array(36,-62,976,833),33440=>array(46,-71,971,831),33441=>array(62,-70,939,830),33442=>array(44,-67,956,823),33443=>array(38,-70,935,819),33444=>array(47,-64,967,829),33445=>array(57,-68,961,836),33446=>array(45,-75,937,827),33447=>array(71,-51,943,837),33448=>array(49,-65,970,833),33449=>array(38,-80,971,840),33450=>array(80,-64,956,836),33451=>array(34,-58,971,832),33452=>array(39,-60,957,837),33453=>array(78,-35,936,822),33454=>array(73,-63,927,825),33455=>array(33,-19,951,837),33456=>array(47,-62,974,833),33457=>array(49,-69,934,826),33458=>array(29,-44,951,823),33459=>array(52,-63,933,838),33460=>array(58,-77,941,822),33461=>array(49,-69,972,826),33462=>array(53,-69,944,833),33463=>array(82,-20,935,829),33464=>array(68,-71,940,824),33465=>array(58,-67,933,829),33466=>array(55,-84,979,820),33467=>array(59,-67,912,838),33468=>array(72,-38,951,839),33469=>array(57,-57,943,838),33470=>array(60,-61,954,832),33471=>array(48,-52,913,827),33472=>array(52,-73,964,823),33473=>array(44,-68,941,827),33474=>array(56,-75,968,827),33475=>array(47,-76,980,818),33476=>array(63,-75,937,822),33477=>array(44,-71,916,818),33478=>array(44,-55,913,828),33479=>array(63,-65,913,828),33480=>array(53,-68,912,824),33481=>array(67,-51,918,823),33482=>array(49,-84,928,816),33483=>array(59,-64,931,820),33484=>array(63,-67,942,826),33485=>array(29,-44,951,823),33486=>array(65,9,916,824),33487=>array(61,-68,936,822),33488=>array(62,-62,924,837),33489=>array(60,-66,948,828),33490=>array(57,-68,949,833),33491=>array(42,-67,965,832),33492=>array(71,-65,941,832),33493=>array(62,-66,938,827),33494=>array(72,-71,944,822),33495=>array(69,-68,940,830),33496=>array(63,-78,933,820),33497=>array(51,-14,947,840),33498=>array(70,-73,944,833),33499=>array(66,-63,949,833),33500=>array(68,-65,938,834),33501=>array(68,-54,964,834),33502=>array(44,-45,946,820),33503=>array(48,-62,934,837),33504=>array(69,-70,962,824),33505=>array(74,-67,978,833),33506=>array(79,-70,931,834),33507=>array(79,-80,931,834),33508=>array(57,-11,951,833),33509=>array(72,-65,931,827),33510=>array(80,-67,912,832),33511=>array(67,-61,936,830),33512=>array(55,-67,960,829),33513=>array(79,-65,933,827),33514=>array(66,-62,956,830),33515=>array(79,-66,933,827),33516=>array(68,-70,941,823),33517=>array(77,-67,950,832),33518=>array(45,-67,934,830),33519=>array(58,-71,959,829),33520=>array(69,-68,953,826),33521=>array(50,-71,935,823),33522=>array(48,-64,948,829),33523=>array(48,-61,959,836),33524=>array(60,-14,957,830),33525=>array(47,-71,968,825),33526=>array(40,-70,975,823),33527=>array(51,-71,945,822),33528=>array(68,-66,938,827),33529=>array(55,-64,949,827),33530=>array(53,-52,948,833),33531=>array(43,-65,950,830),33532=>array(59,-36,938,827),33533=>array(49,-62,956,827),33534=>array(56,-50,956,839),33535=>array(50,-61,958,836),33536=>array(48,-66,949,832),33537=>array(80,-64,939,838),33538=>array(61,-70,943,828),33539=>array(46,-69,948,811),33540=>array(57,-68,943,836),33541=>array(51,-64,934,838),33542=>array(40,-59,944,836),33543=>array(48,-65,959,830),33544=>array(59,-41,964,830),33545=>array(50,-61,958,836),33546=>array(66,-29,932,836),33547=>array(80,-64,955,836),33548=>array(39,-66,954,831),33549=>array(55,-67,947,828),33550=>array(46,-32,963,831),33551=>array(33,-66,923,827),33552=>array(27,-57,916,826),33553=>array(58,-60,916,826),33554=>array(66,-70,944,825),33555=>array(68,-59,926,826),33556=>array(75,-7,926,826),33557=>array(62,-66,957,826),33558=>array(55,-73,966,821),33559=>array(61,-66,939,829),33560=>array(42,-66,943,835),33561=>array(66,-68,956,829),33562=>array(61,-72,925,822),33563=>array(63,-60,956,833),33564=>array(60,-64,946,832),33565=>array(69,-39,944,811),33566=>array(68,-40,943,811),33567=>array(77,-64,934,842),33568=>array(41,-68,966,826),33569=>array(53,-64,948,831),33570=>array(61,-53,942,841),33571=>array(46,-66,950,828),33572=>array(87,-76,960,826),33573=>array(59,-26,956,820),33574=>array(53,-68,970,824),33575=>array(54,-67,960,817),33576=>array(54,-65,947,834),33577=>array(47,-70,953,825),33578=>array(49,-76,962,822),33579=>array(61,-46,941,830),33580=>array(59,-58,949,838),33581=>array(56,-66,964,833),33582=>array(62,-70,938,826),33583=>array(53,-66,972,835),33584=>array(72,-66,959,835),33585=>array(38,-64,979,834),33586=>array(85,-60,935,838),33587=>array(56,-62,948,830),33588=>array(66,-65,939,834),33589=>array(72,-61,940,838),33590=>array(41,-67,968,831),33591=>array(44,-72,958,819),33592=>array(61,-63,954,840),33593=>array(53,-68,945,834),33594=>array(21,-31,946,859),33595=>array(57,-68,906,827),33596=>array(66,-64,939,833),33597=>array(42,-74,933,834),33598=>array(65,-69,957,827),33599=>array(46,-67,973,829),33600=>array(45,-58,938,833),33601=>array(65,-25,957,817),33602=>array(42,-68,978,823),33603=>array(51,-26,955,832),33604=>array(55,-53,950,839),33605=>array(59,-62,974,831),33606=>array(33,-62,888,834),33607=>array(60,-54,962,843),33608=>array(54,-71,951,825),33609=>array(59,-68,950,833),33610=>array(69,-74,933,827),33611=>array(68,-69,945,820),33612=>array(62,-73,949,823),33613=>array(69,-70,958,829),33614=>array(74,-30,964,811),33615=>array(29,-69,942,834),33616=>array(31,-53,950,844),33617=>array(55,-63,980,831),33618=>array(41,-56,955,837),33619=>array(65,-69,957,828),33620=>array(42,-66,943,833),33621=>array(48,-65,943,835),33622=>array(53,-30,959,837),33623=>array(61,-70,943,828),33624=>array(43,-65,941,827),33625=>array(57,-50,947,831),33626=>array(26,-60,941,831),33627=>array(59,-65,931,826),33628=>array(63,-68,923,823),33629=>array(30,-66,916,825),33630=>array(35,-71,950,825),33631=>array(35,-56,938,824),33632=>array(25,-70,949,827),33633=>array(34,-64,905,827),33634=>array(65,-62,939,830),33635=>array(42,-71,941,817),33636=>array(53,-57,910,833),33637=>array(37,-60,944,831),33638=>array(56,-63,928,831),33639=>array(67,-74,922,822),33640=>array(64,-66,915,825),33641=>array(37,-71,952,826),33642=>array(44,-66,936,824),33643=>array(78,-69,926,826),33644=>array(35,-66,915,827),33645=>array(36,-16,925,821),33646=>array(45,-68,921,824),33647=>array(56,-68,917,822),33648=>array(48,-69,945,826),33649=>array(73,-63,928,821),33650=>array(56,-32,951,821),33651=>array(59,-34,954,805),33652=>array(45,-76,974,829),33653=>array(63,-32,971,823),33654=>array(71,-79,958,825),33655=>array(42,-74,945,834),33656=>array(53,-64,948,832),33657=>array(57,-58,935,831),33658=>array(49,-62,937,823),33659=>array(35,-65,964,831),33660=>array(49,-65,956,831),33661=>array(48,-72,954,832),33662=>array(51,-70,954,821),33663=>array(41,-62,959,827),33664=>array(45,-67,968,821),33665=>array(69,-16,943,826),33666=>array(62,-70,916,821),33667=>array(48,-70,947,827),33668=>array(51,-66,938,821),33669=>array(26,-74,947,822),33670=>array(62,-65,955,835),33671=>array(57,-75,938,824),33672=>array(54,-76,956,821),33673=>array(46,-59,933,839),33674=>array(46,-69,943,822),33675=>array(50,-70,947,824),33676=>array(42,-63,956,822),33677=>array(55,-69,944,820),33678=>array(42,-67,947,832),33679=>array(47,-70,959,824),33680=>array(56,-66,960,818),33681=>array(39,-64,980,832),33682=>array(66,-70,938,833),33683=>array(60,-62,947,833),33684=>array(66,-65,939,820),33685=>array(54,-69,972,829),33686=>array(76,-18,949,836),33687=>array(69,-63,951,836),33688=>array(53,-67,947,832),33689=>array(45,-63,953,832),33690=>array(40,-73,949,825),33691=>array(36,-69,959,826),33692=>array(20,-82,968,828),33693=>array(60,-17,955,838),33694=>array(47,-58,961,830),33695=>array(37,-79,966,831),33696=>array(42,-67,956,831),33697=>array(55,-73,970,831),33698=>array(57,-65,964,834),33699=>array(47,-24,957,832),33700=>array(66,-67,940,827),33701=>array(46,-65,943,824),33702=>array(76,-64,949,824),33703=>array(46,-62,950,832),33704=>array(61,-61,950,835),33705=>array(53,-64,948,835),33706=>array(69,-65,948,831),33707=>array(65,-72,962,823),33708=>array(43,-64,953,834),33709=>array(61,-65,912,829),33710=>array(50,-73,939,827),33711=>array(47,-67,969,824),33712=>array(54,-74,969,823),33713=>array(32,-61,948,829),33714=>array(36,-59,947,809),33715=>array(62,-64,920,826),33716=>array(62,-63,912,827),33717=>array(43,-59,956,832),33718=>array(35,-19,962,823),33719=>array(32,-63,940,830),33720=>array(35,-66,925,827),33721=>array(65,-19,924,825),33722=>array(62,-62,912,824),33723=>array(42,-64,919,818),33724=>array(50,-27,928,824),33725=>array(40,-65,971,837),33726=>array(36,-71,980,829),33727=>array(63,-65,947,827),33728=>array(51,-68,966,830),33729=>array(71,-65,939,833),33730=>array(85,-63,937,823),33731=>array(47,-73,945,823),33732=>array(41,-70,976,824),33733=>array(63,-68,937,835),33734=>array(58,-74,968,828),33735=>array(52,-61,954,839),33736=>array(72,-67,951,824),33737=>array(65,-52,935,840),33738=>array(41,-63,932,836),33739=>array(77,-69,963,826),33740=>array(70,-61,938,838),33741=>array(38,-44,957,833),33742=>array(80,-34,955,823),33743=>array(60,-62,954,832),33744=>array(88,-64,924,835),33745=>array(72,-62,940,832),33746=>array(49,-70,961,844),33747=>array(45,-68,962,822),33748=>array(46,-70,969,832),33749=>array(40,-61,974,829),33750=>array(71,-59,943,844),33751=>array(64,-70,936,826),33752=>array(25,-66,967,832),33753=>array(69,-29,947,827),33754=>array(67,-60,964,821),33755=>array(86,-73,938,820),33756=>array(48,-65,971,837),33757=>array(63,-74,973,824),33758=>array(59,-69,949,826),33759=>array(50,-57,960,834),33760=>array(61,-62,960,836),33761=>array(68,-65,961,832),33762=>array(60,-72,960,820),33763=>array(79,-74,961,820),33764=>array(42,-39,979,818),33765=>array(44,-64,957,832),33766=>array(60,-70,944,831),33767=>array(50,-69,955,832),33768=>array(69,-75,942,827),33769=>array(72,-59,934,837),33770=>array(62,-65,939,830),33771=>array(64,-38,960,812),33772=>array(68,-73,937,823),33773=>array(39,-67,961,833),33774=>array(45,-70,969,829),33775=>array(56,-78,941,838),33776=>array(43,-65,961,833),33777=>array(46,-65,954,831),33778=>array(61,-65,934,841),33779=>array(54,-39,980,815),33780=>array(35,-42,968,816),33781=>array(95,-65,945,824),33782=>array(40,-70,967,835),33783=>array(73,-68,923,826),33784=>array(44,-66,973,832),33785=>array(56,-39,954,832),33786=>array(62,-68,947,829),33787=>array(48,-69,966,822),33788=>array(48,-62,970,835),33789=>array(39,-73,966,832),33790=>array(47,-72,968,831),33791=>array(69,-70,944,825),33792=>array(43,-73,953,826),33793=>array(62,-69,958,836),33794=>array(46,-59,933,839),33795=>array(76,-59,949,836),33796=>array(43,-63,939,826),33797=>array(60,-67,957,838),33798=>array(59,-52,949,841),33799=>array(61,-67,971,827),33800=>array(46,-62,950,832),33801=>array(42,-67,960,826),33802=>array(35,-62,973,833),33803=>array(54,-70,947,833),33804=>array(61,-68,935,839),33805=>array(54,-63,949,838),33806=>array(53,-73,934,834),33807=>array(77,-62,947,833),33808=>array(42,-69,976,826),33809=>array(36,-67,952,833),33810=>array(53,-60,963,820),33811=>array(67,-38,961,811),33812=>array(47,-44,935,838),33813=>array(44,-76,956,828),33814=>array(77,-62,937,815),33815=>array(67,-63,927,819),33816=>array(50,-68,965,830),33817=>array(25,-66,964,832),33818=>array(38,-69,952,826),33819=>array(58,-70,947,825),33820=>array(52,-77,933,822),33821=>array(65,-58,917,829),33822=>array(79,-58,958,826),33823=>array(36,-68,952,824),33824=>array(59,-74,939,820),33825=>array(50,-65,939,826),33826=>array(51,-30,978,835),33827=>array(49,-73,973,823),33828=>array(63,-70,916,818),33829=>array(66,-71,916,819),33830=>array(54,-60,908,830),33831=>array(54,-62,930,831),33832=>array(74,-67,931,828),33833=>array(40,-64,985,833),33834=>array(41,-69,955,839),33835=>array(42,-70,956,825),33836=>array(77,-68,946,834),33837=>array(73,-61,936,831),33838=>array(46,-71,968,827),33839=>array(50,-81,943,829),33840=>array(46,-71,968,825),33841=>array(52,-24,948,832),33842=>array(59,-70,947,828),33843=>array(71,-66,943,824),33844=>array(46,-76,942,827),33845=>array(70,-67,942,833),33846=>array(43,-73,974,821),33847=>array(67,-68,941,823),33848=>array(31,-64,979,830),33849=>array(47,-66,941,831),33850=>array(70,-69,945,831),33851=>array(69,-69,944,825),33852=>array(77,-62,932,839),33853=>array(56,-68,970,835),33854=>array(59,-57,951,829),33855=>array(53,-72,956,823),33856=>array(55,-68,955,825),33857=>array(67,-57,950,821),33858=>array(34,-63,954,828),33859=>array(71,-68,944,829),33860=>array(53,-67,945,826),33861=>array(46,-32,954,824),33862=>array(35,-68,965,832),33863=>array(46,-61,973,832),33864=>array(48,-55,962,832),33865=>array(49,-70,965,839),33866=>array(45,-64,972,849),33867=>array(42,-67,948,830),33868=>array(46,-71,939,822),33869=>array(71,-70,947,823),33870=>array(32,-70,949,829),33871=>array(52,-67,959,829),33872=>array(55,-29,973,828),33873=>array(53,-58,958,832),33874=>array(61,-49,956,832),33875=>array(67,-69,957,826),33876=>array(51,-71,969,827),33877=>array(41,-69,953,845),33878=>array(47,-61,984,832),33879=>array(43,-64,941,826),33880=>array(63,-62,923,833),33881=>array(45,-69,943,826),33882=>array(51,-32,945,833),33883=>array(62,-61,942,837),33884=>array(34,-67,974,825),33885=>array(61,-67,943,823),33886=>array(68,-73,952,823),33887=>array(83,-27,955,826),33888=>array(32,-53,951,841),33889=>array(41,-64,948,830),33890=>array(34,-20,966,831),33891=>array(76,-27,947,839),33892=>array(61,-58,958,832),33893=>array(77,-68,951,829),33894=>array(63,-59,945,839),33895=>array(82,-65,953,825),33896=>array(69,-67,973,826),33897=>array(62,-51,953,828),33898=>array(61,-75,955,843),33899=>array(69,-61,940,840),33900=>array(45,-62,939,838),33901=>array(60,-67,967,833),33902=>array(43,-72,966,826),33903=>array(57,-66,942,823),33904=>array(41,-71,979,824),33905=>array(49,-37,962,834),33906=>array(42,-70,933,833),33907=>array(39,-64,966,833),33908=>array(55,-66,955,828),33909=>array(66,-60,951,835),33910=>array(74,-54,942,829),33911=>array(74,-64,946,842),33912=>array(46,-29,968,829),33913=>array(42,-56,963,842),33914=>array(51,-64,942,830),33915=>array(24,-66,962,830),33916=>array(69,-65,969,838),33917=>array(69,-70,944,827),33918=>array(59,-36,967,827),33919=>array(69,-70,944,838),33920=>array(59,-21,955,831),33921=>array(36,-39,959,831),33922=>array(72,-67,925,842),33923=>array(72,-60,961,838),33924=>array(51,-67,957,838),33925=>array(51,-68,956,838),33926=>array(68,-81,941,826),33927=>array(20,-69,952,833),33928=>array(60,-67,914,824),33929=>array(60,-69,914,828),33930=>array(60,-58,950,828),33931=>array(41,-59,943,833),33932=>array(25,-60,939,833),33933=>array(39,-69,948,826),33934=>array(49,-71,969,832),33935=>array(61,-71,939,827),33936=>array(47,-52,963,839),33937=>array(54,-81,968,822),33938=>array(69,-64,959,832),33939=>array(51,-62,956,832),33940=>array(70,-61,946,833),33941=>array(52,-37,948,840),33942=>array(70,-89,942,830),33943=>array(48,-64,974,830),33944=>array(62,-69,955,825),33945=>array(53,-75,959,839),33946=>array(83,-66,938,826),33947=>array(42,-74,953,826),33948=>array(37,-59,946,835),33949=>array(42,-68,939,826),33950=>array(53,-65,953,831),33951=>array(53,-66,956,830),33952=>array(52,-29,953,825),33953=>array(66,-64,945,834),33954=>array(76,-68,974,825),33955=>array(46,-69,950,826),33956=>array(56,-72,950,826),33957=>array(77,-76,928,835),33958=>array(38,-69,974,835),33959=>array(51,-73,966,824),33960=>array(23,-53,956,841),33961=>array(52,-68,962,825),33962=>array(60,-70,942,835),33963=>array(37,-47,956,854),33964=>array(43,-60,956,829),33965=>array(65,-71,931,845),33966=>array(29,-70,937,822),33967=>array(56,-70,923,835),33968=>array(50,-79,964,827),33969=>array(48,-55,947,840),33970=>array(46,-61,946,839),33971=>array(65,-75,927,839),33972=>array(41,-69,942,833),33973=>array(54,-59,960,833),33974=>array(45,-72,946,823),33975=>array(66,-64,944,833),33976=>array(47,-73,953,824),33977=>array(31,-64,972,835),33978=>array(50,-69,961,833),33979=>array(40,-60,960,833),33980=>array(43,-62,972,836),33981=>array(36,-39,950,823),33982=>array(49,-52,946,839),33983=>array(68,-68,941,833),33984=>array(44,-64,955,835),33985=>array(36,-69,964,829),33986=>array(53,-65,947,830),33987=>array(51,-67,957,833),33988=>array(51,-66,940,838),33989=>array(48,-72,960,823),33990=>array(43,-71,954,824),33991=>array(54,-64,949,831),33992=>array(70,-65,924,833),33993=>array(46,-66,954,839),33994=>array(35,-62,957,832),33995=>array(59,-21,955,834),33996=>array(48,-74,973,825),33997=>array(53,-67,943,831),33998=>array(46,-75,938,826),33999=>array(59,-74,968,826),34000=>array(52,-67,939,830),34001=>array(44,-71,956,835),34002=>array(63,-72,956,825),34003=>array(48,-62,957,840),34004=>array(62,-71,955,826),34005=>array(48,-57,959,830),34006=>array(67,-58,941,837),34007=>array(51,-68,978,829),34008=>array(46,-78,959,824),34009=>array(57,-66,937,833),34010=>array(33,-76,982,830),34011=>array(38,-73,973,827),34012=>array(60,-67,950,830),34013=>array(54,-23,924,821),34014=>array(62,-67,914,821),34015=>array(26,-62,908,832),34016=>array(62,-63,914,827),34017=>array(44,-67,966,832),34018=>array(62,-75,938,830),34019=>array(61,-63,924,829),34020=>array(38,-76,974,825),34021=>array(29,-6,954,827),34022=>array(38,-56,947,826),34023=>array(36,-52,961,839),34024=>array(42,-67,963,828),34025=>array(35,-71,950,825),34026=>array(50,-73,972,824),34027=>array(43,-72,970,822),34028=>array(35,-62,952,833),34029=>array(38,-59,965,827),34030=>array(37,-56,951,839),34031=>array(33,-69,962,832),34032=>array(51,-68,978,829),34033=>array(56,-73,957,820),34034=>array(65,-32,953,823),34035=>array(66,-32,943,824),34036=>array(64,-63,957,825),34037=>array(40,-75,963,827),34038=>array(69,-70,956,823),34039=>array(67,-68,961,823),34040=>array(61,-74,939,851),34041=>array(45,-67,947,829),34042=>array(40,-55,961,833),34043=>array(54,-47,967,844),34044=>array(26,-76,972,829),34045=>array(56,-65,948,832),34046=>array(73,-70,944,823),34047=>array(33,-67,948,834),34048=>array(61,-65,944,827),34049=>array(67,-68,946,831),34050=>array(68,-69,944,827),34051=>array(74,-58,947,839),34052=>array(71,-65,944,822),34053=>array(63,-57,936,838),34054=>array(49,-76,974,825),34055=>array(69,-70,951,826),34056=>array(62,-65,941,824),34057=>array(44,-68,965,827),34058=>array(51,-66,960,832),34059=>array(47,-70,964,828),34060=>array(45,-67,985,832),34061=>array(49,-69,958,823),34062=>array(66,-73,972,825),34063=>array(66,-70,938,822),34064=>array(39,-73,928,838),34065=>array(48,-70,956,835),34066=>array(47,-73,964,824),34067=>array(59,-61,966,835),34068=>array(57,-68,943,825),34069=>array(74,-71,943,817),34070=>array(28,-68,952,824),34071=>array(52,-67,951,838),34072=>array(31,-70,981,825),34073=>array(39,-72,975,823),34074=>array(51,-68,948,836),34075=>array(40,-66,959,828),34076=>array(41,-73,963,827),34077=>array(75,-68,975,825),34078=>array(56,-73,959,832),34079=>array(36,-75,966,820),34080=>array(53,-70,963,826),34081=>array(63,-64,963,839),34082=>array(64,-68,944,838),34083=>array(49,-59,948,835),34084=>array(57,-70,944,826),34085=>array(56,-30,955,835),34086=>array(53,-67,940,835),34087=>array(55,-23,950,820),34088=>array(79,-71,951,823),34089=>array(66,-73,941,824),34090=>array(58,-69,952,829),34091=>array(42,-64,951,832),34092=>array(54,-71,966,835),34093=>array(76,-78,967,834),34094=>array(78,-69,948,822),34095=>array(57,-53,964,841),34096=>array(36,-69,960,824),34097=>array(73,-83,967,824),34098=>array(32,-67,960,824),34099=>array(45,-59,944,841),34100=>array(44,-73,937,840),34101=>array(31,-67,962,832),34102=>array(65,-65,964,829),34103=>array(73,-73,925,817),34104=>array(24,-81,949,822),34105=>array(41,-73,949,822),34106=>array(63,-66,911,827),34107=>array(42,-72,956,832),34108=>array(65,-60,928,834),34109=>array(69,-70,961,834),34110=>array(39,-59,973,835),34111=>array(33,-59,937,832),34112=>array(32,-72,979,829),34113=>array(56,-62,948,833),34114=>array(41,-76,957,833),34115=>array(36,-69,957,831),34116=>array(71,-65,944,823),34117=>array(42,-69,944,826),34118=>array(31,-67,962,833),34119=>array(69,-68,946,823),34120=>array(54,-69,948,830),34121=>array(42,-61,938,837),34122=>array(38,-54,962,817),34123=>array(24,-64,944,830),34124=>array(76,-77,944,818),34125=>array(41,-72,975,823),34126=>array(50,-65,963,832),34127=>array(76,-73,955,826),34128=>array(60,-78,943,829),34129=>array(63,-57,936,839),34130=>array(48,-69,945,838),34131=>array(53,-77,947,835),34132=>array(58,-68,956,829),34133=>array(55,-60,955,836),34134=>array(42,-68,983,829),34135=>array(39,-71,980,835),34136=>array(33,-59,962,835),34137=>array(38,-33,964,833),34138=>array(58,-70,945,842),34139=>array(37,-67,938,827),34140=>array(62,-65,958,833),34141=>array(56,-48,962,842),34142=>array(51,-62,985,830),34143=>array(58,-53,973,831),34144=>array(45,-68,959,831),34145=>array(61,-76,939,840),34146=>array(65,-70,955,832),34147=>array(68,-74,941,831),34148=>array(64,-56,949,832),34149=>array(32,-69,952,826),34150=>array(43,-76,972,823),34151=>array(43,-75,977,833),34152=>array(38,-67,968,832),34153=>array(67,-67,956,836),34154=>array(59,-67,956,833),34155=>array(64,-46,936,842),34156=>array(52,-69,971,823),34157=>array(51,-74,947,840),34158=>array(47,-62,938,826),34159=>array(54,-56,941,829),34160=>array(67,-76,957,834),34161=>array(35,-65,938,826),34162=>array(62,-69,913,821),34163=>array(68,-73,938,832),34164=>array(41,-29,923,825),34165=>array(44,-85,981,831),34166=>array(42,-81,983,827),34167=>array(67,-68,975,829),34168=>array(48,-74,968,821),34169=>array(44,-62,951,835),34170=>array(62,-65,968,831),34171=>array(67,-68,972,831),34172=>array(60,-70,952,826),34173=>array(48,-58,952,848),34174=>array(73,-61,941,836),34175=>array(42,-85,957,833),34176=>array(54,-48,956,846),34177=>array(45,-74,958,830),34178=>array(41,-78,960,823),34179=>array(65,-72,926,822),34180=>array(53,-68,949,832),34181=>array(41,-65,957,823),34182=>array(48,-69,973,828),34183=>array(36,-77,958,834),34184=>array(27,-65,977,833),34185=>array(41,-71,960,824),34186=>array(46,-64,941,832),34187=>array(78,-81,933,826),34188=>array(47,-65,944,833),34189=>array(79,-66,964,828),34190=>array(62,-71,964,824),34191=>array(33,-50,967,834),34192=>array(27,-54,976,838),34193=>array(58,-41,948,806),34194=>array(42,-63,983,834),34195=>array(37,-60,953,826),34196=>array(60,-61,956,834),34197=>array(40,-67,971,824),34198=>array(48,-74,970,823),34199=>array(64,-63,936,830),34200=>array(47,-66,975,831),34201=>array(44,-68,949,836),34202=>array(51,-68,953,826),34203=>array(69,-61,941,838),34204=>array(42,-65,944,827),34205=>array(54,-70,939,823),34206=>array(40,-70,966,829),34207=>array(34,-50,966,841),34208=>array(51,-76,959,827),34209=>array(49,-74,934,820),34210=>array(40,-75,964,829),34211=>array(64,-75,966,823),34212=>array(50,-67,945,831),34213=>array(62,-58,935,831),34214=>array(37,-67,945,834),34215=>array(61,-65,953,827),34216=>array(50,-63,955,829),34217=>array(72,-65,939,832),34218=>array(51,-70,955,849),34219=>array(47,-70,957,830),34220=>array(49,-70,961,841),34221=>array(51,-78,969,828),34222=>array(52,-68,961,820),34223=>array(46,-61,945,835),34224=>array(47,-70,957,830),34225=>array(56,-69,957,828),34226=>array(44,-75,974,836),34227=>array(53,-67,967,828),34228=>array(63,-61,959,832),34229=>array(64,-70,941,826),34230=>array(51,-64,962,826),34231=>array(62,-67,952,833),34232=>array(58,-62,961,831),34233=>array(53,-57,941,831),34234=>array(49,-69,956,833),34235=>array(48,-89,961,832),34236=>array(58,-65,951,840),34237=>array(51,-74,956,823),34238=>array(43,-66,974,823),34239=>array(52,-68,971,827),34240=>array(56,-69,977,827),34241=>array(32,-67,968,842),34242=>array(38,-68,958,825),34243=>array(60,-74,955,828),34244=>array(36,-68,968,828),34245=>array(74,-62,946,833),34246=>array(43,-65,969,829),34247=>array(63,-54,941,839),34248=>array(59,-65,954,832),34249=>array(29,-67,952,832),34250=>array(32,-57,944,831),34251=>array(53,-64,956,829),34252=>array(74,-56,945,832),34253=>array(56,-34,949,839),34254=>array(55,-38,951,842),34255=>array(34,-71,942,824),34256=>array(57,-70,960,834),34257=>array(60,-68,961,833),34258=>array(51,-70,947,828),34259=>array(39,-64,922,826),34260=>array(41,-64,970,834),34261=>array(40,-67,937,833),34262=>array(67,-58,944,833),34263=>array(52,-71,986,824),34264=>array(55,-69,958,818),34265=>array(65,-72,971,826),34266=>array(83,-80,938,828),34267=>array(67,-56,937,821),34268=>array(47,-65,953,831),34269=>array(62,-72,954,836),34270=>array(41,-63,951,830),34271=>array(73,-68,936,825),34272=>array(47,-77,973,824),34273=>array(45,-73,982,827),34274=>array(53,-68,975,827),34275=>array(69,-65,939,827),34276=>array(39,-67,959,836),34277=>array(55,-62,930,826),34278=>array(45,-65,935,829),34279=>array(50,-58,964,824),34280=>array(44,-75,945,829),34281=>array(40,-62,960,836),34282=>array(45,-71,967,830),34283=>array(51,-73,950,836),34284=>array(74,-80,943,832),34285=>array(51,-64,948,835),34286=>array(38,-69,969,845),34287=>array(52,-46,974,822),34288=>array(62,-65,924,829),34289=>array(39,-64,959,826),34290=>array(42,-65,956,826),34291=>array(32,-67,968,828),34292=>array(53,-63,956,818),34293=>array(56,-65,942,845),34294=>array(33,-65,954,832),34295=>array(62,-69,955,826),34296=>array(55,-70,962,827),34297=>array(72,-61,929,839),34298=>array(57,-65,949,832),34299=>array(49,-65,971,839),34300=>array(44,-58,955,836),34301=>array(49,-62,966,833),34302=>array(44,-76,974,830),34303=>array(43,-68,929,837),34304=>array(54,-61,958,838),34305=>array(65,-32,945,823),34306=>array(43,-62,975,837),34307=>array(53,-62,946,838),34308=>array(48,-67,940,832),34309=>array(41,-67,953,832),34310=>array(59,-66,961,836),34311=>array(56,-67,948,827),34312=>array(61,-68,960,833),34313=>array(46,-64,957,855),34314=>array(53,-71,956,818),34315=>array(47,-68,960,837),34316=>array(51,-59,960,833),34317=>array(74,-58,947,832),34318=>array(76,-75,981,842),34319=>array(42,-67,958,832),34320=>array(62,-73,964,840),34321=>array(55,-66,960,838),34322=>array(43,-68,964,832),34323=>array(67,-76,966,830),34324=>array(42,-61,972,832),34325=>array(50,-81,955,832),34326=>array(50,-62,965,838),34327=>array(41,-62,965,837),34328=>array(56,-63,978,829),34329=>array(63,-70,947,831),34330=>array(43,-67,950,830),34331=>array(57,-62,945,830),34332=>array(69,-68,946,825),34333=>array(37,-57,968,832),34334=>array(45,-69,987,835),34335=>array(63,-56,956,823),34336=>array(59,-72,947,824),34337=>array(73,-72,950,827),34338=>array(56,-65,961,833),34339=>array(55,-75,960,830),34340=>array(59,-70,935,828),34341=>array(48,-62,969,828),34342=>array(70,-62,942,829),34343=>array(42,-72,982,831),34344=>array(53,-59,968,829),34345=>array(59,-64,964,833),34346=>array(48,-58,983,831),34347=>array(42,-50,963,830),34348=>array(55,-69,949,822),34349=>array(72,-70,928,839),34350=>array(49,-70,946,830),34351=>array(53,-25,951,830),34352=>array(44,-61,974,830),34353=>array(34,-72,965,829),34354=>array(65,-31,945,821),34355=>array(42,-71,954,828),34356=>array(63,-48,934,844),34357=>array(49,-66,958,827),34358=>array(44,-71,969,828),34359=>array(36,-62,971,832),34360=>array(64,-63,951,836),34361=>array(39,-69,965,829),34362=>array(60,-67,951,827),34363=>array(60,-70,963,825),34364=>array(41,-67,959,829),34365=>array(40,-58,969,838),34366=>array(39,-72,984,826),34367=>array(61,-80,954,835),34368=>array(43,-33,968,823),34369=>array(32,-64,968,849),34370=>array(60,-70,965,832),34371=>array(44,-66,967,828),34372=>array(59,-71,963,837),34373=>array(32,-53,978,837),34374=>array(68,-54,936,849),34375=>array(65,-70,951,834),34376=>array(68,-74,940,832),34377=>array(68,-56,949,831),34378=>array(48,-71,961,828),34379=>array(55,-67,947,842),34380=>array(62,-43,947,830),34381=>array(47,-66,924,829),34382=>array(35,-68,953,835),34383=>array(40,-59,893,834),34384=>array(39,-63,878,840),34385=>array(39,-60,937,832),34386=>array(40,-67,963,847),34387=>array(40,-53,954,843),34388=>array(49,-66,949,835),34389=>array(39,-68,959,836),34390=>array(29,-55,931,837),34391=>array(36,-62,919,837),34392=>array(29,-58,948,837),34393=>array(44,-67,961,827),34394=>array(30,-57,914,830),34395=>array(38,-66,936,829),34396=>array(45,-77,929,841),34397=>array(23,-82,956,830),34398=>array(35,-68,950,838),34399=>array(53,-71,951,829),34400=>array(40,-58,959,840),34401=>array(46,-84,950,823),34402=>array(43,-70,960,831),34403=>array(38,-67,972,828),34404=>array(31,-68,967,827),34405=>array(42,-75,989,831),34406=>array(39,-91,965,830),34407=>array(40,-76,954,834),34408=>array(44,-77,946,823),34409=>array(36,-75,953,829),34410=>array(40,-73,973,832),34411=>array(47,-59,954,850),34412=>array(46,-41,928,809),34413=>array(53,-72,899,811),34414=>array(43,-65,961,816),34415=>array(48,-45,957,849),34416=>array(49,-67,955,815),34417=>array(65,-59,970,792),34418=>array(43,-63,962,815),34419=>array(51,-70,916,829),34420=>array(44,-35,964,827),34421=>array(47,-23,957,841),34422=>array(47,-54,962,814),34423=>array(54,-68,954,819),34424=>array(47,-62,967,814),34425=>array(28,-5,930,813),34426=>array(21,-56,962,811),34427=>array(50,-21,942,814),34428=>array(54,-30,957,831),34429=>array(76,-59,888,792),34430=>array(46,-64,944,823),34431=>array(32,-69,914,772),34432=>array(48,-51,935,832),34433=>array(39,-78,942,814),34434=>array(47,-61,909,830),34435=>array(58,-63,942,839),34436=>array(47,-58,960,836),34437=>array(43,-74,950,810),34438=>array(48,-41,961,791),34439=>array(53,-76,973,808),34440=>array(47,-67,958,814),34441=>array(21,-71,976,838),34442=>array(38,-62,956,822),34443=>array(69,-65,914,808),34444=>array(45,-61,939,842),34445=>array(36,-51,951,817),34446=>array(53,-72,914,802),34447=>array(36,-69,869,805),34448=>array(69,-56,930,840),34449=>array(45,-54,967,844),34450=>array(45,-70,967,829),34451=>array(44,-61,899,833),34452=>array(57,-69,967,823),34453=>array(51,-69,963,793),34454=>array(53,-73,960,805),34455=>array(53,-71,971,823),34456=>array(41,-72,961,827),34457=>array(51,-66,963,838),34458=>array(51,-68,953,828),34459=>array(53,-66,891,815),34460=>array(47,-61,958,824),34461=>array(44,-33,953,833),34462=>array(55,-70,966,822),34463=>array(29,-27,948,809),34464=>array(48,-90,964,825),34465=>array(52,-73,978,808),34466=>array(49,-73,958,823),34467=>array(43,-59,961,807),34468=>array(29,-78,971,784),34469=>array(51,-70,963,833),34470=>array(45,-54,954,829),34471=>array(39,-65,957,854),34472=>array(53,-66,964,830),34473=>array(50,-66,952,833),34474=>array(43,-65,958,830),34475=>array(44,-45,967,834),34476=>array(37,-65,930,809),34477=>array(37,-65,945,809),34478=>array(37,-65,956,835),34479=>array(51,-7,955,825),34480=>array(71,-64,916,830),34481=>array(54,-65,948,844),34482=>array(40,-65,943,811),34483=>array(35,-51,958,849),34484=>array(65,-69,911,839),34485=>array(47,-50,954,828),34486=>array(50,-64,953,831),34487=>array(40,-23,954,814),34488=>array(49,-73,939,818),34489=>array(58,-69,955,839),34490=>array(47,-65,951,829),34491=>array(56,-74,960,824),34492=>array(67,-66,926,844),34493=>array(65,-29,962,809),34494=>array(66,-65,951,831),34495=>array(53,-51,953,823),34496=>array(51,-6,964,851),34497=>array(55,-70,903,812),34498=>array(54,-72,967,830),34499=>array(55,-67,940,810),34500=>array(51,-64,943,830),34501=>array(54,-67,938,829),34502=>array(46,-13,954,837),34503=>array(41,-38,959,828),34504=>array(55,-76,968,826),34505=>array(34,-65,966,854),34506=>array(57,-21,910,831),34507=>array(66,-73,957,788),34508=>array(64,-70,973,819),34509=>array(83,-70,896,824),34510=>array(34,-63,906,809),34511=>array(35,-16,936,814),34512=>array(54,-56,923,843),34513=>array(56,-62,963,851),34514=>array(54,-61,982,849),34515=>array(59,-54,960,840),34516=>array(51,-64,904,837),34517=>array(51,-67,961,837),34518=>array(54,-55,964,825),34519=>array(73,-70,948,859),34520=>array(46,-64,948,835),34521=>array(55,-18,954,844),34522=>array(56,-76,918,821),34523=>array(26,-72,957,829),34524=>array(52,-67,951,840),34525=>array(47,-66,965,811),34526=>array(44,-64,947,826),34527=>array(40,-65,963,821),34528=>array(52,-67,952,841),34529=>array(63,-53,930,814),34530=>array(56,-74,953,827),34531=>array(53,-62,952,827),34532=>array(38,-65,963,841),34533=>array(54,-70,935,839),34534=>array(51,-75,961,820),34535=>array(37,-66,931,820),34536=>array(51,-70,945,807),34537=>array(57,-64,946,779),34538=>array(69,-75,944,829),34539=>array(60,-72,980,841),34540=>array(39,-67,981,827),34541=>array(45,-21,947,824),34542=>array(50,-75,949,836),34543=>array(27,-32,959,833),34544=>array(46,-67,937,825),34545=>array(36,-68,931,821),34546=>array(33,-67,934,823),34547=>array(30,-66,918,821),34548=>array(36,-68,938,840),34549=>array(57,-30,953,815),34550=>array(48,-66,948,827),34551=>array(60,-70,969,822),34552=>array(57,-68,939,832),34553=>array(54,-54,900,826),34554=>array(40,-68,963,838),34555=>array(44,-76,961,820),34556=>array(40,-67,948,835),34557=>array(58,-67,961,825),34558=>array(61,-55,970,835),34559=>array(43,-67,961,834),34560=>array(68,-65,913,776),34561=>array(53,-71,967,830),34562=>array(37,-59,965,847),34563=>array(85,-76,941,788),34564=>array(52,-75,970,815),34565=>array(69,-64,954,835),34566=>array(56,-67,958,809),34567=>array(60,-65,959,835),34568=>array(39,-66,961,809),34569=>array(42,-62,950,835),34570=>array(61,-62,918,832),34571=>array(52,-71,965,855),34572=>array(61,-32,962,826),34573=>array(43,-62,963,850),34574=>array(58,-71,915,815),34575=>array(49,-74,969,818),34576=>array(29,-68,926,833),34577=>array(42,-72,967,829),34578=>array(40,-66,967,813),34579=>array(32,-68,963,811),34580=>array(63,-58,912,828),34581=>array(36,-73,954,830),34582=>array(47,-71,904,815),34583=>array(51,-66,902,815),34584=>array(59,-57,909,847),34585=>array(41,-69,970,829),34586=>array(46,-67,939,824),34587=>array(61,-75,954,813),34588=>array(74,-70,931,833),34589=>array(26,-70,971,843),34590=>array(47,-67,962,832),34591=>array(42,-75,933,845),34592=>array(74,-71,918,813),34593=>array(41,-52,951,842),34594=>array(40,-25,953,813),34595=>array(36,-61,954,845),34596=>array(56,-80,948,823),34597=>array(55,-65,952,829),34598=>array(61,-65,968,828),34599=>array(71,-77,983,823),34600=>array(32,-60,956,839),34601=>array(48,-70,890,815),34602=>array(57,-62,917,831),34603=>array(59,-49,955,809),34604=>array(59,-73,903,814),34605=>array(64,-68,908,825),34606=>array(47,-66,957,837),34607=>array(53,-65,978,838),34608=>array(45,-76,973,790),34609=>array(49,-64,957,855),34610=>array(58,-85,954,818),34611=>array(58,-71,955,834),34612=>array(65,-64,911,815),34613=>array(56,-72,902,813),34614=>array(50,-68,974,842),34615=>array(40,-33,967,831),34616=>array(79,-89,951,778),34617=>array(31,-67,946,826),34618=>array(52,-52,959,851),34619=>array(47,-65,953,839),34620=>array(64,-68,950,832),34621=>array(39,-65,947,814),34622=>array(46,-62,965,811),34623=>array(45,-66,966,830),34624=>array(40,-51,974,842),34625=>array(90,-89,944,774),34626=>array(34,-69,976,817),34627=>array(54,-77,957,814),34628=>array(50,-67,915,825),34629=>array(57,-89,971,787),34630=>array(40,-69,952,819),34631=>array(29,-30,932,806),34632=>array(37,-68,877,810),34633=>array(41,-61,945,848),34634=>array(41,-66,968,846),34635=>array(41,-64,983,813),34636=>array(48,-65,951,832),34637=>array(51,-69,915,817),34638=>array(60,-58,919,836),34639=>array(56,-68,949,832),34640=>array(46,-70,903,814),34641=>array(42,-74,964,811),34642=>array(47,-71,948,815),34643=>array(40,-63,968,829),34644=>array(50,-72,957,824),34645=>array(38,-65,961,835),34646=>array(56,-29,956,829),34647=>array(39,-37,936,834),34648=>array(33,-30,944,818),34649=>array(46,-69,932,807),34650=>array(47,-73,970,814),34651=>array(48,-69,965,828),34652=>array(59,-75,965,836),34653=>array(34,-54,959,853),34654=>array(55,-70,908,814),34655=>array(51,-65,912,815),34656=>array(48,-65,948,812),34657=>array(53,-71,968,815),34658=>array(53,-78,956,815),34659=>array(50,-67,956,837),34660=>array(61,-66,965,852),34661=>array(49,-45,964,848),34662=>array(51,-68,980,834),34663=>array(47,-74,972,823),34664=>array(31,-64,952,809),34665=>array(50,-32,955,824),34666=>array(49,-66,951,815),34667=>array(43,-69,939,825),34668=>array(55,-77,976,825),34669=>array(61,-74,986,812),34670=>array(33,-64,967,845),34671=>array(44,-76,955,825),34672=>array(29,-45,960,831),34673=>array(45,-64,975,837),34674=>array(56,-67,942,831),34675=>array(51,-74,952,829),34676=>array(40,-71,899,833),34677=>array(50,-82,961,831),34678=>array(31,-62,972,842),34679=>array(45,-73,947,833),34680=>array(50,-57,918,826),34681=>array(54,-30,968,813),34682=>array(37,-70,920,834),34683=>array(37,-62,947,837),34684=>array(37,-63,932,813),34685=>array(50,-70,951,821),34686=>array(31,-65,949,823),34687=>array(47,-42,971,806),34688=>array(78,-74,956,837),34689=>array(42,-72,973,815),34690=>array(60,-59,957,831),34691=>array(46,-64,940,849),34692=>array(43,-62,948,843),34693=>array(40,-33,959,853),34694=>array(63,-63,966,837),34695=>array(49,-53,974,853),34696=>array(47,-71,953,810),34697=>array(53,-69,971,830),34698=>array(44,-64,977,843),34699=>array(39,-69,965,836),34700=>array(41,-80,956,858),34701=>array(64,-62,967,826),34702=>array(45,-73,955,827),34703=>array(47,-71,977,834),34704=>array(53,-72,952,830),34705=>array(40,-75,979,845),34706=>array(58,-75,976,834),34707=>array(49,-67,987,836),34708=>array(47,-73,976,836),34709=>array(50,-46,973,852),34710=>array(47,-67,941,813),34711=>array(39,-65,949,848),34712=>array(39,-18,943,838),34713=>array(31,-67,977,832),34714=>array(75,-73,954,852),34715=>array(33,-73,947,845),34716=>array(73,-71,966,826),34717=>array(45,-66,977,842),34718=>array(55,-60,936,836),34719=>array(36,-66,951,833),34720=>array(36,-26,957,840),34721=>array(36,-77,957,840),34722=>array(68,-66,934,839),34723=>array(29,-68,972,835),34724=>array(56,-71,987,842),34725=>array(17,-60,970,855),34726=>array(49,-65,969,831),34727=>array(49,-71,936,832),34728=>array(29,-65,921,825),34729=>array(26,-60,966,841),34730=>array(57,-70,939,837),34731=>array(54,-60,942,850),34732=>array(46,-62,957,836),34733=>array(46,-62,951,854),34734=>array(34,-57,945,836),34735=>array(39,-72,943,836),34736=>array(44,-59,961,835),34737=>array(63,-66,934,832),34738=>array(59,-21,951,826),34739=>array(54,-17,958,842),34740=>array(82,-79,967,823),34741=>array(49,-64,955,812),34742=>array(36,-77,965,816),34743=>array(49,-82,957,847),34744=>array(46,-76,950,829),34745=>array(56,-72,956,826),34746=>array(33,-73,961,835),34747=>array(49,-67,954,836),34748=>array(61,-32,955,822),34749=>array(45,-68,977,843),34750=>array(37,-78,959,840),34751=>array(50,-83,958,836),34752=>array(36,-65,949,819),34753=>array(57,-70,957,827),34754=>array(56,-67,965,841),34755=>array(51,-73,975,818),34756=>array(55,-65,965,834),34757=>array(56,-70,966,831),34758=>array(38,-65,966,834),34759=>array(57,-87,954,835),34760=>array(51,-64,912,809),34761=>array(40,-59,969,834),34762=>array(57,-67,957,787),34763=>array(30,-34,949,828),34764=>array(52,-31,968,832),34765=>array(34,-81,958,811),34766=>array(34,-67,947,829),34767=>array(42,-80,984,825),34768=>array(54,-64,934,839),34769=>array(59,-61,967,852),34770=>array(46,-65,956,833),34771=>array(33,-64,970,841),34772=>array(44,-71,960,815),34773=>array(54,-70,940,831),34774=>array(49,-67,954,836),34775=>array(57,-80,938,834),34776=>array(49,-68,962,844),34777=>array(43,-71,958,838),34778=>array(57,-80,961,820),34779=>array(41,-64,961,832),34780=>array(50,-68,962,838),34781=>array(48,-66,959,846),34782=>array(89,-83,954,825),34783=>array(43,-68,952,835),34784=>array(33,-66,951,835),34785=>array(56,-71,920,837),34786=>array(51,-68,957,832),34787=>array(36,-66,960,833),34788=>array(34,-73,943,806),34789=>array(53,-68,965,847),34790=>array(51,-74,965,827),34791=>array(52,-68,949,833),34792=>array(53,-71,954,790),34793=>array(51,-70,982,821),34794=>array(44,-50,977,815),34795=>array(52,-66,953,813),34796=>array(56,-58,955,823),34797=>array(43,-68,945,834),34798=>array(30,-71,936,833),34799=>array(43,-66,957,832),34800=>array(31,-72,961,835),34801=>array(51,-69,961,836),34802=>array(60,-64,975,840),34803=>array(43,-75,945,818),34804=>array(49,-74,959,830),34805=>array(30,-71,948,807),34806=>array(41,-30,935,814),34807=>array(49,-64,915,829),34808=>array(36,-64,975,819),34809=>array(45,-71,948,851),34810=>array(52,-27,953,831),34811=>array(42,-73,947,850),34812=>array(49,-74,951,830),34813=>array(46,-57,950,833),34814=>array(43,-68,958,855),34815=>array(40,-56,955,843),34816=>array(51,-70,953,839),34817=>array(55,-76,941,841),34818=>array(43,-65,975,828),34819=>array(41,-68,957,849),34820=>array(37,-53,974,861),34821=>array(46,-48,957,819),34822=>array(66,-72,962,833),34823=>array(62,-66,958,832),34824=>array(52,-71,961,828),34825=>array(43,-71,969,820),34826=>array(34,-67,946,851),34827=>array(52,-66,924,817),34828=>array(42,-62,940,820),34829=>array(40,-75,977,824),34830=>array(46,-65,956,833),34831=>array(43,-61,948,847),34832=>array(41,-64,968,849),34833=>array(37,-65,965,839),34834=>array(48,-75,957,802),34835=>array(47,-60,961,835),34836=>array(50,-59,966,846),34837=>array(56,-59,943,829),34838=>array(34,-65,976,832),34839=>array(40,-66,951,806),34840=>array(34,-59,974,842),34841=>array(39,-69,965,842),34842=>array(53,-71,942,840),34843=>array(44,-64,961,839),34844=>array(38,-87,979,834),34845=>array(52,-70,929,784),34846=>array(56,-86,949,838),34847=>array(32,-60,961,848),34848=>array(53,-71,944,786),34849=>array(52,-64,957,844),34850=>array(55,-62,972,858),34851=>array(50,-65,948,818),34852=>array(67,-69,969,853),34853=>array(63,-75,944,846),34854=>array(45,-71,956,827),34855=>array(54,-67,967,844),34856=>array(42,-55,965,842),34857=>array(64,-71,964,823),34858=>array(71,-75,962,845),34859=>array(65,-77,969,831),34860=>array(40,-68,950,839),34861=>array(54,-79,967,854),34862=>array(35,-73,975,802),34863=>array(40,-70,954,844),34864=>array(30,-66,975,846),34865=>array(46,-33,957,833),34866=>array(57,-63,929,842),34867=>array(34,-78,953,806),34868=>array(55,-68,942,826),34869=>array(47,-65,949,828),34870=>array(50,-76,965,793),34871=>array(46,-64,946,807),34872=>array(36,-67,941,826),34873=>array(54,-67,967,844),34874=>array(50,-88,965,809),34875=>array(62,-77,944,830),34876=>array(48,-68,986,819),34877=>array(41,-73,966,829),34878=>array(47,-71,924,815),34879=>array(89,-73,946,847),34880=>array(55,-11,954,806),34881=>array(59,-14,955,846),34882=>array(34,-60,971,811),34883=>array(43,-70,968,833),34884=>array(20,-15,947,834),34885=>array(25,-45,949,853),34886=>array(49,-64,958,836),34887=>array(37,-68,971,836),34888=>array(40,-69,955,832),34889=>array(34,-61,982,849),34890=>array(31,-68,957,830),34891=>array(63,-57,941,842),34892=>array(51,-62,941,845),34893=>array(41,-68,954,827),34894=>array(53,-67,960,829),34895=>array(50,-68,948,829),34896=>array(53,-66,960,829),34897=>array(53,-66,960,829),34898=>array(47,-65,954,835),34899=>array(39,-73,951,824),34900=>array(29,-68,923,828),34901=>array(46,-65,952,833),34902=>array(49,-69,960,833),34903=>array(41,-72,951,831),34904=>array(24,-66,960,853),34905=>array(40,-65,959,831),34906=>array(46,-70,953,825),34907=>array(37,-65,955,839),34908=>array(34,-66,960,816),34909=>array(38,-68,953,835),34910=>array(35,-70,943,831),34911=>array(39,-66,954,841),34912=>array(24,-72,936,839),34913=>array(33,-69,945,835),34914=>array(37,-65,956,837),34915=>array(38,-68,944,826),34916=>array(266,-66,677,819),34917=>array(40,-69,954,843),34918=>array(41,-50,963,842),34919=>array(41,-67,958,844),34920=>array(52,-75,953,835),34921=>array(34,-67,971,843),34922=>array(35,-64,954,843),34923=>array(42,-68,957,830),34924=>array(32,-60,917,839),34925=>array(35,-61,973,841),34926=>array(54,-73,963,845),34927=>array(45,-74,973,845),34928=>array(37,-70,960,832),34929=>array(50,-76,963,844),34930=>array(23,-69,879,803),34931=>array(33,-65,955,831),34932=>array(54,-75,964,842),34933=>array(46,-53,909,805),34934=>array(62,-67,932,844),34935=>array(42,-73,960,829),34936=>array(50,-63,946,837),34937=>array(50,-67,956,838),34938=>array(47,-68,960,850),34939=>array(61,-67,966,838),34940=>array(50,-70,976,850),34941=>array(39,-67,946,810),34942=>array(37,-62,955,858),34943=>array(36,-65,970,848),34944=>array(60,-71,930,838),34945=>array(67,-62,967,833),34946=>array(32,-66,964,832),34947=>array(30,-73,984,823),34948=>array(16,-76,940,837),34949=>array(49,-59,950,829),34950=>array(48,-67,906,842),34951=>array(48,-78,956,842),34952=>array(48,-67,959,831),34953=>array(48,-67,957,842),34954=>array(48,-77,949,842),34955=>array(44,-69,962,837),34956=>array(44,-69,956,851),34957=>array(42,-67,960,839),34958=>array(37,-75,914,845),34959=>array(44,-60,964,845),34960=>array(29,-62,970,845),34961=>array(50,-72,894,840),34962=>array(47,-65,951,828),34963=>array(45,-68,956,844),34964=>array(48,-67,953,842),34965=>array(51,-74,966,841),34966=>array(46,-68,899,827),34967=>array(39,-52,972,853),34968=>array(47,-65,957,843),34969=>array(47,-72,892,848),34970=>array(31,-62,967,847),34971=>array(39,-58,960,850),34972=>array(28,-56,970,847),34973=>array(39,-70,941,848),34974=>array(52,-58,961,840),34975=>array(47,-80,966,838),34976=>array(50,-67,961,846),34977=>array(52,-68,954,841),34978=>array(43,-65,954,838),34979=>array(54,-61,964,848),34980=>array(47,-62,960,845),34981=>array(54,-62,948,848),34982=>array(54,-65,916,848),34983=>array(54,-71,914,848),34984=>array(52,-62,947,844),34985=>array(54,-66,951,848),34986=>array(46,-65,955,842),34987=>array(36,-69,962,838),34988=>array(44,-68,964,849),34989=>array(29,-63,942,840),34990=>array(54,-61,944,856),34991=>array(54,-74,945,848),34992=>array(61,-67,945,811),34993=>array(33,-74,971,834),34994=>array(51,-79,960,854),34995=>array(41,-70,935,848),34996=>array(36,-63,982,842),34997=>array(46,-55,954,833),34998=>array(38,-67,972,844),34999=>array(36,-63,966,850),35000=>array(44,-70,954,836),35001=>array(41,-70,951,842),35002=>array(42,-72,950,844),35003=>array(33,-70,954,842),35004=>array(50,-71,977,841),35005=>array(47,-55,904,852),35006=>array(28,-55,965,844),35007=>array(41,-65,959,838),35008=>array(36,-57,916,842),35009=>array(42,-66,957,840),35010=>array(44,-73,955,828),35011=>array(41,-65,913,835),35012=>array(41,-67,964,840),35013=>array(45,-68,959,830),35014=>array(28,-66,864,822),35015=>array(46,-53,972,855),35016=>array(41,-65,948,842),35017=>array(39,-71,966,842),35018=>array(46,-64,958,852),35019=>array(37,-67,964,834),35020=>array(37,-72,966,846),35021=>array(38,-65,908,842),35022=>array(48,-65,956,847),35023=>array(43,-75,955,840),35024=>array(28,-68,915,842),35025=>array(41,-65,950,842),35026=>array(55,-61,967,850),35027=>array(41,-65,957,842),35028=>array(35,-67,942,845),35029=>array(44,-69,969,833),35030=>array(30,-71,980,840),35031=>array(37,-73,960,840),35032=>array(51,-55,963,832),35033=>array(42,-74,948,823),35034=>array(40,-74,969,830),35035=>array(46,-70,969,838),35036=>array(32,-63,946,834),35037=>array(57,-60,957,832),35038=>array(35,-65,959,841),35039=>array(33,-67,948,833),35040=>array(33,-82,948,786),35041=>array(41,-64,954,821),35042=>array(20,-69,935,815),35043=>array(23,-68,956,832),35044=>array(29,-60,931,840),35045=>array(24,-68,886,822),35046=>array(36,-79,957,841),35047=>array(45,-76,966,840),35048=>array(31,-68,941,849),35049=>array(31,-68,949,842),35050=>array(41,-66,917,842),35051=>array(47,-71,903,842),35052=>array(49,-72,973,839),35053=>array(31,-68,949,842),35054=>array(54,-70,905,840),35055=>array(36,-65,906,844),35056=>array(36,-67,971,838),35057=>array(34,-65,975,843),35058=>array(46,-71,948,823),35059=>array(45,-68,956,836),35060=>array(35,-63,958,830),35061=>array(47,-74,948,832),35062=>array(45,-70,955,840),35063=>array(47,-65,973,838),35064=>array(40,-71,973,822),35065=>array(68,-59,967,842),35066=>array(41,-70,966,837),35067=>array(41,-75,956,824),35068=>array(53,-64,928,823),35069=>array(28,-79,972,842),35070=>array(35,-68,957,825),35071=>array(53,-64,954,845),35072=>array(42,-72,963,843),35073=>array(42,-69,960,785),35074=>array(34,-66,968,833),35075=>array(34,-70,930,837),35076=>array(34,-66,938,835),35077=>array(51,-72,957,839),35078=>array(41,-73,968,837),35079=>array(36,-67,962,845),35080=>array(40,-63,956,840),35081=>array(43,-75,972,835),35082=>array(38,-70,906,823),35083=>array(53,-68,975,841),35084=>array(36,-65,952,823),35085=>array(34,-67,956,837),35086=>array(38,-73,976,847),35087=>array(38,-56,957,855),35088=>array(36,-63,924,834),35089=>array(50,-75,977,838),35090=>array(56,-73,972,842),35091=>array(32,-65,964,836),35092=>array(47,-71,952,842),35093=>array(45,-66,965,840),35094=>array(54,-70,978,837),35095=>array(44,-64,946,840),35096=>array(34,-58,954,838),35097=>array(30,-64,965,837),35098=>array(46,-64,959,841),35099=>array(23,-62,929,821),35100=>array(31,-80,971,836),35101=>array(38,-73,940,833),35102=>array(35,-68,968,820),35103=>array(39,-70,915,842),35104=>array(23,-65,954,829),35105=>array(45,-61,956,838),35106=>array(37,-75,978,839),35107=>array(48,-72,987,836),35108=>array(23,-60,977,833),35109=>array(42,-70,953,820),35110=>array(32,-55,970,855),35111=>array(24,-54,972,846),35112=>array(35,-57,933,847),35113=>array(31,-76,970,843),35114=>array(26,-73,967,820),35115=>array(19,-70,951,838),35116=>array(53,-70,993,835),35117=>array(47,-79,964,856),35118=>array(39,-71,976,833),35119=>array(41,-72,945,841),35120=>array(36,-65,974,846),35121=>array(51,-75,974,846),35122=>array(30,-69,947,845),35123=>array(30,-65,965,837),35124=>array(12,-68,918,821),35125=>array(31,-55,947,855),35126=>array(34,-65,910,817),35127=>array(42,-75,973,833),35128=>array(36,-66,945,842),35129=>array(23,-70,971,823),35130=>array(56,-68,972,840),35131=>array(54,-60,955,843),35132=>array(42,-70,971,833),35133=>array(56,-72,972,832),35134=>array(45,-67,957,850),35135=>array(23,-69,942,828),35136=>array(41,-74,947,833),35137=>array(17,-68,965,819),35138=>array(31,-59,973,853),35139=>array(56,-56,949,840),35140=>array(49,-58,955,843),35141=>array(32,-68,948,833),35142=>array(40,-67,972,844),35143=>array(51,-67,924,842),35144=>array(23,-69,955,821),35145=>array(39,-64,911,837),35146=>array(23,-66,962,821),35147=>array(33,-67,973,837),35148=>array(39,-63,950,817),35149=>array(36,-68,966,832),35150=>array(23,-67,964,833),35151=>array(40,-72,963,839),35152=>array(46,-66,958,838),35153=>array(42,-67,952,843),35154=>array(41,-76,970,831),35155=>array(30,-70,954,832),35156=>array(23,-67,951,831),35157=>array(26,-59,937,831),35158=>array(35,-66,971,846),35159=>array(51,-68,956,835),35160=>array(43,-67,969,837),35161=>array(46,-67,972,838),35162=>array(44,-66,980,845),35163=>array(40,-64,978,844),35164=>array(31,-68,954,846),35165=>array(26,-64,983,858),35166=>array(47,-53,974,835),35167=>array(36,-66,971,834),35168=>array(43,-65,928,835),35169=>array(52,-67,924,835),35170=>array(27,-55,947,856),35171=>array(44,-66,964,846),35172=>array(35,-68,952,836),35173=>array(20,-104,957,841),35174=>array(35,-64,959,836),35175=>array(39,-64,973,843),35176=>array(23,-66,969,825),35177=>array(43,-82,960,839),35178=>array(31,-65,958,829),35179=>array(41,-74,971,835),35180=>array(28,-55,958,845),35181=>array(36,-81,966,831),35182=>array(36,-73,994,831),35183=>array(33,-76,966,826),35184=>array(23,-72,977,846),35185=>array(39,-70,964,840),35186=>array(51,-65,948,841),35187=>array(27,-70,974,831),35188=>array(29,-62,912,826),35189=>array(29,-76,955,843),35190=>array(22,-65,973,835),35191=>array(34,-65,969,825),35192=>array(31,-66,978,831),35193=>array(31,-66,980,831),35194=>array(34,-62,948,834),35195=>array(31,-59,968,849),35196=>array(29,-60,967,841),35197=>array(29,-64,942,841),35198=>array(71,-63,945,782),35199=>array(73,-53,929,772),35200=>array(85,374,935,781),35201=>array(52,-69,935,781),35202=>array(74,-70,971,782),35203=>array(59,-63,955,788),35204=>array(64,-70,938,788),35205=>array(53,-66,930,836),35206=>array(55,-69,963,818),35207=>array(63,-70,937,818),35208=>array(48,-73,967,802),35209=>array(60,-68,950,804),35210=>array(54,-53,934,811),35211=>array(58,-74,944,783),35212=>array(18,-65,948,784),35213=>array(64,-60,935,830),35214=>array(52,-39,956,787),35215=>array(43,-59,954,812),35216=>array(38,-56,957,818),35217=>array(42,-58,956,836),35218=>array(51,-62,956,822),35219=>array(51,-71,960,837),35220=>array(64,-65,944,791),35221=>array(42,-64,956,828),35222=>array(39,-63,959,834),35223=>array(58,-69,953,780),35224=>array(96,-62,938,829),35225=>array(51,-62,946,848),35226=>array(37,-65,908,816),35227=>array(36,-70,966,828),35228=>array(36,-70,954,826),35229=>array(50,-72,962,780),35230=>array(37,-70,961,773),35231=>array(45,-71,962,824),35232=>array(32,-62,971,796),35233=>array(38,-71,967,774),35234=>array(49,-71,968,829),35235=>array(41,-71,966,824),35236=>array(36,-70,969,835),35237=>array(33,-60,971,836),35238=>array(32,-72,971,827),35239=>array(47,-63,960,838),35240=>array(71,-59,963,789),35241=>array(31,-69,963,825),35242=>array(46,-70,957,826),35243=>array(17,-79,957,825),35244=>array(39,-79,950,835),35245=>array(52,-61,965,785),35246=>array(66,-70,937,824),35247=>array(62,-74,977,829),35248=>array(32,-74,978,835),35249=>array(64,-58,939,828),35250=>array(52,-68,974,835),35251=>array(39,-60,970,841),35252=>array(29,-75,972,828),35253=>array(104,-74,975,791),35254=>array(50,-70,962,837),35255=>array(32,-71,966,835),35256=>array(104,-74,975,791),35257=>array(33,-66,963,832),35258=>array(64,-65,935,840),35259=>array(22,-76,987,835),35260=>array(18,-76,966,789),35261=>array(47,-63,960,840),35262=>array(37,-74,967,834),35263=>array(44,-75,967,835),35264=>array(35,-70,960,827),35265=>array(24,-56,921,784),35266=>array(18,-61,932,792),35267=>array(25,-55,971,792),35268=>array(26,-56,932,826),35269=>array(29,-51,934,827),35270=>array(31,-72,937,818),35271=>array(98,-67,941,813),35272=>array(39,-59,913,838),35273=>array(28,-60,920,816),35274=>array(70,-78,938,810),35275=>array(22,-69,936,771),35276=>array(43,-73,931,819),35277=>array(37,-85,973,836),35278=>array(32,-81,938,822),35279=>array(52,-72,933,818),35280=>array(29,-64,936,819),35281=>array(25,-75,942,817),35282=>array(69,-60,863,849),35283=>array(45,-70,886,842),35284=>array(60,-57,924,849),35285=>array(59,-56,911,851),35286=>array(40,-67,979,847),35287=>array(38,-62,975,838),35288=>array(24,-68,959,845),35289=>array(41,-79,963,852),35290=>array(33,-67,975,842),35291=>array(52,-68,954,841),35292=>array(28,-68,937,835),35293=>array(33,-56,962,857),35294=>array(18,-65,913,834),35295=>array(25,-67,955,828),35296=>array(42,-59,972,836),35297=>array(33,-70,989,831),35298=>array(40,-61,900,830),35299=>array(52,-67,949,834),35300=>array(28,-87,963,828),35301=>array(38,-71,969,836),35302=>array(36,-71,962,834),35303=>array(46,-66,934,843),35304=>array(32,-73,966,824),35305=>array(38,-71,967,828),35306=>array(46,-66,938,850),35307=>array(42,-68,974,839),35308=>array(34,-74,960,825),35309=>array(44,-71,955,841),35310=>array(54,-67,962,842),35311=>array(19,-67,922,834),35312=>array(44,-70,951,836),35313=>array(38,-69,965,842),35314=>array(29,-70,954,831),35315=>array(38,-67,981,829),35316=>array(41,-67,962,848),35317=>array(46,-70,935,842),35318=>array(44,-78,967,829),35319=>array(60,-65,930,830),35320=>array(63,-74,926,833),35321=>array(29,-71,960,841),35322=>array(54,-64,965,831),35323=>array(38,-70,975,835),35324=>array(38,-73,975,841),35325=>array(44,-71,959,841),35326=>array(33,-64,973,836),35327=>array(44,-52,955,850),35328=>array(84,-64,916,819),35329=>array(261,-47,747,842),35330=>array(60,-61,955,817),35331=>array(60,-65,951,829),35332=>array(33,-66,966,836),35333=>array(60,-58,967,842),35334=>array(69,-67,876,842),35335=>array(77,-61,909,840),35336=>array(51,-64,954,835),35337=>array(60,-45,948,847),35338=>array(60,-62,959,817),35339=>array(60,-55,914,847),35340=>array(65,-47,948,790),35341=>array(65,-50,946,844),35342=>array(60,-69,949,830),35343=>array(68,-68,964,834),35344=>array(65,-64,955,792),35345=>array(46,-34,963,853),35346=>array(63,-53,904,817),35347=>array(60,-68,902,829),35348=>array(85,-64,928,824),35349=>array(79,-56,912,846),35350=>array(60,-55,960,835),35351=>array(60,-61,957,834),35352=>array(60,-61,957,823),35353=>array(64,-56,964,848),35354=>array(116,-57,874,823),35355=>array(58,-62,954,840),35356=>array(60,-44,968,843),35357=>array(60,-62,948,793),35358=>array(63,-73,976,839),35359=>array(59,-58,964,815),35360=>array(60,-61,899,843),35361=>array(60,-66,963,843),35362=>array(63,-73,960,831),35363=>array(62,-69,955,829),35364=>array(60,-65,934,846),35365=>array(71,-71,907,796),35366=>array(60,-50,950,843),35367=>array(66,-69,963,841),35368=>array(60,-44,954,843),35369=>array(76,-58,930,840),35370=>array(60,-62,945,824),35371=>array(60,-44,960,843),35372=>array(72,-77,972,836),35373=>array(60,-63,975,817),35374=>array(60,-65,952,843),35375=>array(60,-69,982,843),35376=>array(65,-41,957,842),35377=>array(60,-64,949,837),35378=>array(60,-66,891,852),35379=>array(60,-62,964,817),35380=>array(56,-67,956,837),35381=>array(60,-46,917,843),35382=>array(59,-62,961,793),35383=>array(60,-62,901,838),35384=>array(60,-71,948,843),35385=>array(62,-68,951,844),35386=>array(56,-72,965,844),35387=>array(60,-61,947,829),35388=>array(53,-57,950,817),35389=>array(60,-52,921,846),35390=>array(64,-67,958,827),35391=>array(57,-44,964,839),35392=>array(59,-55,951,844),35393=>array(60,-65,953,826),35394=>array(60,-66,964,843),35395=>array(60,-65,982,843),35396=>array(57,-74,966,845),35397=>array(56,-76,976,839),35398=>array(56,-60,961,835),35399=>array(60,-58,978,843),35400=>array(74,-65,942,820),35401=>array(51,-71,977,843),35402=>array(63,-70,952,837),35403=>array(60,-44,957,843),35404=>array(58,-70,948,836),35405=>array(58,-47,947,844),35406=>array(62,-48,954,843),35407=>array(59,-73,911,848),35408=>array(60,-61,951,841),35409=>array(60,-61,952,824),35410=>array(60,-63,952,830),35411=>array(60,-51,963,843),35412=>array(60,-62,905,817),35413=>array(53,-65,956,817),35414=>array(51,-74,972,834),35415=>array(56,-61,903,841),35416=>array(78,-67,920,833),35417=>array(65,-76,965,843),35418=>array(60,-44,963,843),35419=>array(60,-50,964,793),35420=>array(42,-64,971,837),35421=>array(60,-62,925,843),35422=>array(60,-64,909,817),35423=>array(35,-69,972,846),35424=>array(52,-63,965,844),35425=>array(77,-52,914,841),35426=>array(62,-60,910,836),35427=>array(60,-63,958,831),35428=>array(54,-66,966,832),35429=>array(51,-65,977,853),35430=>array(60,-61,963,829),35431=>array(51,-60,957,839),35432=>array(52,-74,971,831),35433=>array(60,-61,954,838),35434=>array(60,-64,964,844),35435=>array(53,-57,961,829),35436=>array(69,-78,951,818),35437=>array(62,-61,954,846),35438=>array(49,-55,955,830),35439=>array(60,-70,899,843),35440=>array(50,-58,945,829),35441=>array(53,-64,958,834),35442=>array(53,-63,954,824),35443=>array(60,-65,954,843),35444=>array(58,-68,951,840),35445=>array(55,-73,963,826),35446=>array(57,-71,905,848),35447=>array(60,-65,904,837),35448=>array(61,-67,974,849),35449=>array(45,-76,914,842),35450=>array(61,-72,914,841),35451=>array(57,-67,966,836),35452=>array(52,-57,954,833),35453=>array(61,-69,956,840),35454=>array(47,-62,925,842),35455=>array(63,-55,954,831),35456=>array(53,-65,946,842),35457=>array(57,-69,951,838),35458=>array(57,-67,957,830),35459=>array(62,-65,916,840),35460=>array(59,-68,981,830),35461=>array(58,-65,977,836),35462=>array(62,-53,957,838),35463=>array(60,-62,978,843),35464=>array(61,-52,957,849),35465=>array(42,-67,958,842),35466=>array(30,-60,954,832),35467=>array(51,-70,967,832),35468=>array(53,-59,964,820),35469=>array(53,-48,964,813),35470=>array(61,-65,976,849),35471=>array(60,-73,982,841),35472=>array(61,-59,970,849),35473=>array(63,-53,957,817),35474=>array(57,-74,986,839),35475=>array(64,-71,936,839),35476=>array(64,-67,967,840),35477=>array(58,-66,963,819),35478=>array(62,-50,956,846),35479=>array(61,-65,936,849),35480=>array(53,-69,975,828),35481=>array(65,-68,961,843),35482=>array(67,-70,926,835),35483=>array(61,-61,970,849),35484=>array(61,-67,968,849),35485=>array(61,-71,972,849),35486=>array(49,-68,949,815),35487=>array(61,-68,957,849),35488=>array(52,-70,961,833),35489=>array(58,-63,964,837),35490=>array(61,-52,958,849),35491=>array(59,-48,954,797),35492=>array(59,-62,944,815),35493=>array(50,-65,945,831),35494=>array(60,-64,895,793),35495=>array(59,-66,953,826),35496=>array(62,-68,954,845),35497=>array(61,-56,948,851),35498=>array(57,-71,964,816),35499=>array(59,-68,967,842),35500=>array(59,-57,956,848),35501=>array(53,-57,966,829),35502=>array(61,-66,964,849),35503=>array(61,-62,932,849),35504=>array(54,-70,952,837),35505=>array(61,-72,962,849),35506=>array(56,-61,970,817),35507=>array(61,-77,932,849),35508=>array(61,-63,977,850),35509=>array(61,-64,968,855),35510=>array(69,-68,974,842),35511=>array(61,-67,939,849),35512=>array(60,-63,955,837),35513=>array(53,-68,954,829),35514=>array(59,-68,977,836),35515=>array(59,-69,967,834),35516=>array(53,-57,958,827),35517=>array(60,-61,965,837),35518=>array(119,-68,903,804),35519=>array(53,-62,915,817),35520=>array(54,-68,950,843),35521=>array(61,-62,963,843),35522=>array(58,-68,897,838),35523=>array(57,-70,970,832),35524=>array(56,-62,959,835),35525=>array(50,-71,963,831),35526=>array(55,-80,952,833),35527=>array(63,-67,962,841),35528=>array(54,-47,963,843),35529=>array(62,-65,958,843),35530=>array(61,-66,937,849),35531=>array(53,-65,956,835),35532=>array(53,-64,974,835),35533=>array(56,-61,956,836),35534=>array(61,-64,960,849),35535=>array(51,-68,969,817),35536=>array(26,-58,946,836),35537=>array(56,-64,978,833),35538=>array(53,-60,960,830),35539=>array(63,-62,959,840),35540=>array(60,-69,975,838),35541=>array(60,-70,959,833),35542=>array(55,-63,973,849),35543=>array(63,-55,986,843),35544=>array(63,-73,980,839),35545=>array(58,-70,963,834),35546=>array(61,-53,983,824),35547=>array(53,-74,975,832),35548=>array(53,-64,971,830),35549=>array(59,-68,973,839),35550=>array(71,-72,928,794),35551=>array(55,-60,967,814),35552=>array(50,-42,947,837),35553=>array(54,-37,973,816),35554=>array(49,-67,954,793),35555=>array(49,-67,914,840),35556=>array(55,-59,951,793),35557=>array(55,-44,947,842),35558=>array(51,-67,946,826),35559=>array(56,-65,951,832),35560=>array(54,-67,927,840),35561=>array(55,-43,936,845),35562=>array(54,-73,949,833),35563=>array(48,-67,964,833),35564=>array(29,-69,953,852),35565=>array(48,-68,970,852),35566=>array(53,-64,965,845),35567=>array(61,-61,955,838),35568=>array(56,-48,971,833),35569=>array(58,-62,951,842),35570=>array(68,-45,959,836),35571=>array(57,-64,947,844),35572=>array(42,-60,945,837),35573=>array(55,-56,953,846),35574=>array(65,-82,957,818),35575=>array(51,-69,964,797),35576=>array(59,-66,948,835),35577=>array(59,-48,947,842),35578=>array(54,-71,952,830),35579=>array(59,-43,953,844),35580=>array(68,-70,981,839),35581=>array(59,-68,947,842),35582=>array(53,-65,949,836),35583=>array(53,-69,950,835),35584=>array(53,-69,969,829),35585=>array(62,-60,926,816),35586=>array(60,-64,911,823),35587=>array(63,-42,959,842),35588=>array(40,-72,967,840),35589=>array(58,-63,914,841),35590=>array(56,-61,919,872),35591=>array(31,-65,970,843),35592=>array(35,-67,969,793),35593=>array(64,-56,984,851),35594=>array(56,-63,961,840),35595=>array(75,-71,987,834),35596=>array(69,-60,954,804),35597=>array(108,-71,902,823),35598=>array(79,-70,956,836),35599=>array(60,-60,958,843),35600=>array(66,-55,968,827),35601=>array(57,-74,957,842),35602=>array(61,-68,963,838),35603=>array(60,-73,960,842),35604=>array(62,-68,954,833),35605=>array(57,-72,959,836),35606=>array(50,-66,968,793),35607=>array(59,-69,951,816),35608=>array(57,-71,952,838),35609=>array(64,-64,978,843),35610=>array(54,-57,961,804),35611=>array(55,-65,952,826),35612=>array(57,-66,962,845),35613=>array(53,-66,951,844),35614=>array(59,-68,930,832),35615=>array(51,-57,926,848),35616=>array(59,-58,957,842),35617=>array(53,-64,952,829),35618=>array(62,-73,972,841),35619=>array(58,-68,953,837),35620=>array(59,-69,955,833),35621=>array(56,-53,968,831),35622=>array(45,-66,958,845),35623=>array(59,-66,954,838),35624=>array(63,-68,984,823),35625=>array(33,-72,976,841),35626=>array(62,-67,956,838),35627=>array(55,-70,951,838),35628=>array(60,-72,947,795),35629=>array(55,-73,947,838),35630=>array(52,-77,958,842),35631=>array(42,-49,945,849),35632=>array(61,-71,964,835),35633=>array(53,-75,948,842),35634=>array(53,-73,970,848),35635=>array(60,-85,957,793),35636=>array(60,-68,951,847),35637=>array(81,-68,922,835),35638=>array(45,-61,960,837),35639=>array(63,-60,964,839),35640=>array(66,-79,974,834),35641=>array(60,-50,953,830),35642=>array(69,-81,958,837),35643=>array(71,-72,938,836),35644=>array(56,-78,946,833),35645=>array(79,-68,940,841),35646=>array(68,-60,983,813),35647=>array(60,-75,942,847),35648=>array(56,-70,968,842),35649=>array(54,-64,954,834),35650=>array(68,-68,956,840),35651=>array(60,-48,961,847),35652=>array(60,-63,918,847),35653=>array(54,-44,946,839),35654=>array(34,-70,943,825),35655=>array(60,-66,972,841),35656=>array(54,-74,972,841),35657=>array(59,-53,956,830),35658=>array(56,-69,950,839),35659=>array(75,-60,922,846),35660=>array(51,-79,968,852),35661=>array(42,-71,944,851),35662=>array(62,-64,941,798),35663=>array(57,-67,972,833),35664=>array(56,-65,954,845),35665=>array(60,-62,965,844),35666=>array(50,-57,970,848),35667=>array(73,-46,977,827),35668=>array(48,-58,951,846),35669=>array(58,-67,955,844),35670=>array(55,-67,960,824),35671=>array(66,-59,959,841),35672=>array(51,-68,959,833),35673=>array(60,-71,971,835),35674=>array(49,-67,954,813),35675=>array(60,-49,966,838),35676=>array(53,-61,952,843),35677=>array(52,-50,966,840),35678=>array(60,-66,976,847),35679=>array(53,-50,969,800),35680=>array(63,-55,960,837),35681=>array(60,-65,945,847),35682=>array(60,-63,978,847),35683=>array(42,-70,970,847),35684=>array(60,-66,985,847),35685=>array(40,-67,979,845),35686=>array(55,-77,944,824),35687=>array(48,-66,967,838),35688=>array(57,-73,977,839),35689=>array(63,-48,966,844),35690=>array(57,-68,948,834),35691=>array(64,-76,962,839),35692=>array(66,-60,961,830),35693=>array(51,-59,973,846),35694=>array(60,-68,985,848),35695=>array(53,-64,939,795),35696=>array(54,-63,962,850),35697=>array(36,-86,955,843),35698=>array(52,-79,973,837),35699=>array(60,-59,953,847),35700=>array(60,-63,967,836),35701=>array(63,-68,959,847),35702=>array(36,-66,955,847),35703=>array(53,-59,971,837),35704=>array(63,-61,964,840),35705=>array(53,-68,977,836),35706=>array(54,-74,967,831),35707=>array(83,-63,936,790),35708=>array(83,-74,936,841),35709=>array(31,-64,971,832),35710=>array(60,-55,956,858),35711=>array(57,-46,965,823),35712=>array(59,-71,961,835),35713=>array(39,-60,961,847),35714=>array(61,-71,959,835),35715=>array(51,-69,959,836),35716=>array(76,-63,920,840),35717=>array(55,-69,973,840),35718=>array(40,-71,955,839),35719=>array(60,-60,923,847),35720=>array(55,-70,971,828),35721=>array(61,-61,953,842),35722=>array(50,-70,960,840),35723=>array(66,-48,953,860),35724=>array(52,-66,968,838),35725=>array(60,-48,938,847),35726=>array(23,-62,952,845),35727=>array(40,-71,955,854),35728=>array(41,-71,944,842),35729=>array(60,-52,969,847),35730=>array(52,-65,961,842),35731=>array(59,-66,957,845),35732=>array(49,-63,967,842),35733=>array(62,-62,900,839),35734=>array(58,-59,960,834),35735=>array(60,-67,951,839),35736=>array(58,-67,960,831),35737=>array(53,-52,949,842),35738=>array(56,-60,959,851),35739=>array(74,-60,957,847),35740=>array(59,-79,967,833),35741=>array(62,-67,956,847),35742=>array(53,-70,968,835),35743=>array(55,-61,949,840),35744=>array(308,-19,665,809),35745=>array(74,-66,937,840),35746=>array(69,-65,926,826),35747=>array(62,-67,953,840),35748=>array(72,-62,958,826),35749=>array(59,-58,960,812),35750=>array(52,-66,922,810),35751=>array(49,13,913,814),35752=>array(75,-70,932,828),35753=>array(66,-22,929,818),35754=>array(50,-58,878,826),35755=>array(70,-29,943,838),35756=>array(68,-30,944,836),35757=>array(65,-74,889,826),35758=>array(49,-71,968,806),35759=>array(68,-57,958,826),35760=>array(80,-28,946,834),35761=>array(61,-60,890,836),35762=>array(56,-68,916,829),35763=>array(49,-58,916,830),35764=>array(61,-11,933,807),35765=>array(47,-25,917,820),35766=>array(49,-64,914,808),35767=>array(62,-61,901,829),35768=>array(64,-65,936,836),35769=>array(62,-64,930,836),35770=>array(52,-30,964,828),35771=>array(50,-65,906,832),35772=>array(56,-59,936,784),35773=>array(54,-61,975,811),35774=>array(54,-54,946,804),35775=>array(71,-71,931,847),35776=>array(74,-71,931,835),35777=>array(59,-22,938,797),35778=>array(67,-66,936,823),35779=>array(67,-64,944,826),35780=>array(78,-67,942,836),35781=>array(53,-29,927,790),35782=>array(49,-54,951,811),35783=>array(58,-60,909,836),35784=>array(69,-69,931,839),35785=>array(69,-69,946,834),35786=>array(69,-74,960,846),35787=>array(62,-64,938,830),35788=>array(66,-54,873,820),35789=>array(51,-61,888,826),35790=>array(56,-69,892,826),35791=>array(49,-56,888,823),35792=>array(43,-71,970,832),35793=>array(63,-60,954,817),35794=>array(63,-60,940,837),35795=>array(58,-26,938,826),35796=>array(56,-71,957,828),35797=>array(57,-61,944,825),35798=>array(63,-27,925,820),35799=>array(41,-62,944,834),35800=>array(67,-66,928,826),35801=>array(56,-59,958,826),35802=>array(47,-57,956,835),35803=>array(57,-68,938,830),35804=>array(43,-75,947,823),35805=>array(72,-65,941,830),35806=>array(62,-66,951,815),35807=>array(53,-79,920,816),35808=>array(62,-19,942,836),35809=>array(71,-63,937,844),35810=>array(61,-62,903,834),35811=>array(57,-69,937,828),35812=>array(68,-58,932,835),35813=>array(69,-79,949,838),35814=>array(59,-67,913,842),35815=>array(61,-25,932,852),35816=>array(60,-58,947,812),35817=>array(54,-54,885,818),35818=>array(76,-57,952,836),35819=>array(76,-65,942,840),35820=>array(54,-16,950,805),35821=>array(53,-70,936,795),35822=>array(57,-74,913,831),35823=>array(61,-69,956,794),35824=>array(57,-66,918,828),35825=>array(70,-69,941,825),35826=>array(72,-60,937,843),35827=>array(49,-54,947,827),35828=>array(66,-68,953,838),35829=>array(56,-65,879,798),35830=>array(56,-71,957,837),35831=>array(61,-66,930,831),35832=>array(68,-67,932,831),35833=>array(48,-70,955,799),35834=>array(54,-66,912,805),35835=>array(56,-69,940,835),35836=>array(61,-57,954,811),35837=>array(59,-64,942,836),35838=>array(56,-66,954,834),35839=>array(56,-65,925,833),35840=>array(56,-77,947,828),35841=>array(50,-72,927,834),35842=>array(50,-51,942,836),35843=>array(72,-85,897,810),35844=>array(67,-67,880,835),35845=>array(69,-70,935,838),35846=>array(69,-64,920,848),35847=>array(57,-71,923,842),35848=>array(55,-71,919,837),35849=>array(55,-66,931,838),35850=>array(55,-25,931,846),35851=>array(72,-67,953,832),35852=>array(60,-51,933,817),35853=>array(61,-66,948,829),35854=>array(53,-65,956,828),35855=>array(56,-69,961,831),35856=>array(57,-67,948,829),35857=>array(53,-70,945,831),35858=>array(74,-62,898,809),35859=>array(62,-66,900,836),35860=>array(55,-62,921,816),35861=>array(58,-72,954,847),35862=>array(60,-72,936,819),35863=>array(49,-65,961,834),35864=>array(54,-66,940,842),35865=>array(68,-66,930,834),35866=>array(60,-64,920,842),35867=>array(65,-69,921,839),35868=>array(59,-55,940,818),35869=>array(50,-74,888,836),35870=>array(78,-51,946,805),35871=>array(54,-65,943,820),35872=>array(60,-69,953,835),35873=>array(75,-65,942,800),35874=>array(53,-66,936,841),35875=>array(63,-74,924,807),35876=>array(74,-71,928,842),35877=>array(59,-35,936,828),35878=>array(63,-66,956,841),35879=>array(60,-36,948,825),35880=>array(54,-35,930,820),35881=>array(57,-61,948,786),35882=>array(58,-68,924,839),35883=>array(51,-79,947,838),35884=>array(58,-74,958,810),35885=>array(55,-70,939,793),35886=>array(57,-67,956,811),35887=>array(64,-75,938,828),35888=>array(46,-65,909,825),35889=>array(60,-62,941,844),35890=>array(59,-66,918,786),35891=>array(48,-75,971,825),35892=>array(47,-61,956,809),35893=>array(54,-78,941,836),35894=>array(56,-67,955,831),35895=>array(34,-53,967,839),35896=>array(59,-64,966,833),35897=>array(42,-58,952,836),35898=>array(37,-62,948,813),35899=>array(49,-68,960,813),35900=>array(32,-73,958,820),35901=>array(57,-69,957,837),35902=>array(34,-48,957,835),35903=>array(38,-66,982,837),35904=>array(35,-64,968,841),35905=>array(54,-63,961,836),35906=>array(45,-72,964,797),35907=>array(37,-71,976,834),35908=>array(37,-66,991,841),35909=>array(29,-70,983,834),35910=>array(100,-14,929,778),35911=>array(62,-17,951,770),35912=>array(62,-12,931,835),35913=>array(53,-68,973,835),35914=>array(57,-32,951,824),35915=>array(41,-26,962,842),35916=>array(51,-69,958,831),35917=>array(52,-73,950,838),35918=>array(48,-18,957,796),35919=>array(54,-67,966,832),35920=>array(70,-25,924,832),35921=>array(28,-67,965,836),35922=>array(34,-67,965,836),35923=>array(45,-46,974,829),35924=>array(45,-47,963,829),35925=>array(70,-49,949,772),35926=>array(58,-70,967,781),35927=>array(41,-75,969,781),35928=>array(43,-41,952,836),35929=>array(62,-55,939,847),35930=>array(31,-61,972,789),35931=>array(58,-69,963,787),35932=>array(43,-75,940,786),35933=>array(33,-46,951,785),35934=>array(43,-52,921,846),35935=>array(40,-65,958,815),35936=>array(43,-41,947,787),35937=>array(67,-59,940,845),35938=>array(49,-62,957,839),35939=>array(43,-71,953,787),35940=>array(29,-70,963,783),35941=>array(36,-64,958,834),35942=>array(49,-70,973,829),35943=>array(43,-75,951,824),35944=>array(41,-67,952,835),35945=>array(39,-64,977,779),35946=>array(88,-66,960,834),35947=>array(60,-72,962,835),35948=>array(47,-69,959,835),35949=>array(48,-70,984,789),35950=>array(42,-68,957,836),35951=>array(39,-77,975,819),35952=>array(77,-77,965,824),35953=>array(50,-61,959,782),35954=>array(42,-64,968,786),35955=>array(113,-69,911,825),35956=>array(43,-73,963,835),35957=>array(52,-71,983,829),35958=>array(34,-72,971,826),35959=>array(41,-62,967,832),35960=>array(125,-58,931,843),35961=>array(57,-56,903,842),35962=>array(61,-58,957,850),35963=>array(50,-67,963,835),35964=>array(40,-65,966,835),35965=>array(48,-65,914,842),35966=>array(48,-48,932,842),35967=>array(68,-52,921,846),35968=>array(41,-72,916,834),35969=>array(36,-57,965,855),35970=>array(65,-52,919,836),35971=>array(48,-63,890,842),35972=>array(46,-69,956,834),35973=>array(55,-61,981,850),35974=>array(46,-67,954,830),35975=>array(48,-55,960,842),35976=>array(48,-73,964,843),35977=>array(43,-64,975,840),35978=>array(54,-63,959,830),35979=>array(48,-65,926,842),35980=>array(41,-66,966,841),35981=>array(55,-59,956,838),35982=>array(48,-61,991,842),35983=>array(35,-73,953,836),35984=>array(46,-64,986,860),35985=>array(42,-75,977,829),35986=>array(37,-70,956,831),35987=>array(44,-67,950,836),35988=>array(34,-61,949,850),35989=>array(35,-62,959,834),35990=>array(36,-48,974,842),35991=>array(37,-71,951,837),35992=>array(26,-65,975,837),35993=>array(40,-60,965,827),35994=>array(43,-68,968,838),35995=>array(38,-71,912,832),35996=>array(55,-70,973,830),35997=>array(89,-68,912,789),35998=>array(59,-69,950,836),35999=>array(59,-69,950,842),36000=>array(53,-69,952,855),36001=>array(46,-73,939,829),36002=>array(59,-67,949,789),36003=>array(65,-70,954,850),36004=>array(52,-54,964,849),36005=>array(46,-78,954,834),36006=>array(52,-69,948,804),36007=>array(54,-69,954,823),36008=>array(52,-71,955,831),36009=>array(50,-67,973,788),36010=>array(38,-78,969,857),36011=>array(57,-74,946,785),36012=>array(57,-67,955,836),36013=>array(52,-75,924,831),36014=>array(53,-70,956,817),36015=>array(48,-68,948,822),36016=>array(51,-73,949,836),36017=>array(14,-67,970,832),36018=>array(43,-75,956,824),36019=>array(53,-70,956,837),36020=>array(57,-67,949,832),36021=>array(43,-66,977,865),36022=>array(57,-65,969,830),36023=>array(65,-67,949,782),36024=>array(63,-69,942,838),36025=>array(47,-75,956,822),36026=>array(51,-75,972,773),36027=>array(73,-71,933,837),36028=>array(50,-64,954,835),36029=>array(60,-62,960,833),36030=>array(49,-54,955,849),36031=>array(72,-67,941,827),36032=>array(65,-73,943,839),36033=>array(61,-67,943,828),36034=>array(57,-63,976,839),36035=>array(40,-65,957,837),36036=>array(54,-68,961,834),36037=>array(54,-77,973,830),36038=>array(21,-70,949,839),36039=>array(61,-70,942,837),36040=>array(66,-79,948,785),36041=>array(37,-58,973,855),36042=>array(41,-58,963,837),36043=>array(37,-76,970,846),36044=>array(66,-77,947,844),36045=>array(49,-59,956,822),36046=>array(44,-69,959,827),36047=>array(57,-73,963,773),36048=>array(31,-67,979,836),36049=>array(37,-71,971,787),36050=>array(40,-64,969,851),36051=>array(44,-74,974,837),36052=>array(101,-85,911,844),36053=>array(51,-66,981,829),36054=>array(31,-69,962,825),36055=>array(55,-74,911,822),36056=>array(49,-59,956,847),36057=>array(63,-71,911,793),36058=>array(45,-70,985,836),36059=>array(52,-76,964,843),36060=>array(60,-66,920,791),36061=>array(40,-70,976,780),36062=>array(71,-74,948,836),36063=>array(40,-73,955,830),36064=>array(59,-65,956,835),36065=>array(32,-67,954,849),36066=>array(70,-73,944,789),36067=>array(48,-69,945,826),36068=>array(48,-67,967,842),36069=>array(41,-73,950,840),36070=>array(42,-63,958,836),36071=>array(39,-68,974,832),36072=>array(57,-79,963,839),36073=>array(42,-60,960,845),36074=>array(63,-68,941,833),36075=>array(69,-70,954,826),36076=>array(55,-68,978,787),36077=>array(43,-65,944,823),36078=>array(40,-74,977,827),36079=>array(57,-60,934,840),36080=>array(49,-70,980,838),36081=>array(56,-76,958,783),36082=>array(38,-73,967,845),36083=>array(51,-75,967,830),36084=>array(44,-71,961,830),36085=>array(55,-68,921,789),36086=>array(40,-67,941,846),36087=>array(69,-70,954,834),36088=>array(31,-66,966,837),36089=>array(44,-66,959,818),36090=>array(58,-65,967,851),36091=>array(50,-65,951,833),36092=>array(41,-66,941,829),36093=>array(50,-73,960,847),36094=>array(113,-76,968,832),36095=>array(41,-72,960,786),36096=>array(68,-76,949,803),36097=>array(42,-61,967,836),36098=>array(41,-71,957,842),36099=>array(49,-62,965,831),36100=>array(61,-68,954,834),36101=>array(51,-70,954,846),36102=>array(37,-67,970,832),36103=>array(46,-71,954,829),36104=>array(34,-73,909,835),36105=>array(47,-71,957,781),36106=>array(60,-72,947,825),36107=>array(41,-70,944,813),36108=>array(36,-64,963,832),36109=>array(36,-74,948,834),36110=>array(47,-66,968,832),36111=>array(42,-62,961,834),36112=>array(47,-59,972,825),36113=>array(55,-66,969,849),36114=>array(70,-73,955,835),36115=>array(27,-65,966,836),36116=>array(49,-71,979,803),36117=>array(56,-73,963,837),36118=>array(47,-73,962,837),36119=>array(41,-73,945,825),36120=>array(26,-72,954,836),36121=>array(31,-71,967,828),36122=>array(30,-65,950,836),36123=>array(54,-70,974,849),36124=>array(55,-63,972,815),36125=>array(77,-58,885,796),36126=>array(65,-63,905,830),36127=>array(57,-65,934,838),36128=>array(73,-61,894,844),36129=>array(48,-61,906,780),36130=>array(42,-70,922,826),36131=>array(60,-66,915,826),36132=>array(61,-67,931,834),36133=>array(47,-74,945,834),36134=>array(32,-72,958,811),36135=>array(29,-63,917,839),36136=>array(25,-69,906,831),36137=>array(33,-70,956,800),36138=>array(33,-66,954,836),36139=>array(34,-65,980,835),36140=>array(32,-67,952,828),36141=>array(33,-64,903,831),36142=>array(28,-71,923,818),36143=>array(43,-69,914,791),36144=>array(48,-68,953,831),36145=>array(30,-59,928,831),36146=>array(70,-78,917,820),36147=>array(61,-71,909,826),36148=>array(42,-67,938,832),36149=>array(41,-65,907,830),36150=>array(31,-58,968,784),36151=>array(47,-65,927,835),36152=>array(83,-66,900,831),36153=>array(60,-63,913,830),36154=>array(24,-72,868,832),36155=>array(35,-69,941,824),36156=>array(31,-56,939,838),36157=>array(39,-86,948,818),36158=>array(47,-71,913,782),36159=>array(33,-69,944,832),36160=>array(60,-84,929,816),36161=>array(30,-59,917,841),36162=>array(33,-64,960,837),36163=>array(38,-68,921,837),36164=>array(71,-70,939,829),36165=>array(39,-79,956,827),36166=>array(31,-64,953,782),36167=>array(39,-69,972,826),36168=>array(39,-70,942,784),36169=>array(34,-70,942,823),36170=>array(39,-69,953,848),36171=>array(37,-69,955,834),36172=>array(39,-69,939,834),36173=>array(76,-70,886,824),36174=>array(43,-58,956,835),36175=>array(84,-54,912,841),36176=>array(39,-69,901,785),36177=>array(43,-66,1003,830),36178=>array(39,-69,911,794),36179=>array(40,-69,930,849),36180=>array(39,-69,939,843),36181=>array(39,-70,957,829),36182=>array(40,-63,943,834),36183=>array(39,-74,900,778),36184=>array(43,-69,915,827),36185=>array(39,-68,939,831),36186=>array(41,-65,951,849),36187=>array(38,-75,961,840),36188=>array(99,-67,936,828),36189=>array(31,-69,906,772),36190=>array(35,-75,930,836),36191=>array(46,-75,954,834),36192=>array(32,-71,895,827),36193=>array(22,-75,931,831),36194=>array(35,-69,949,842),36195=>array(55,-69,943,835),36196=>array(67,-75,930,830),36197=>array(31,-71,961,839),36198=>array(56,-63,984,848),36199=>array(48,-68,957,829),36200=>array(40,-67,966,825),36201=>array(28,-67,961,826),36202=>array(25,-80,971,825),36203=>array(51,-65,970,836),36204=>array(36,-76,962,823),36205=>array(25,-70,958,832),36206=>array(35,-79,975,833),36207=>array(32,-71,960,837),36208=>array(46,-74,960,830),36209=>array(69,-66,950,830),36210=>array(36,-62,963,833),36211=>array(50,-65,966,831),36212=>array(41,-73,967,829),36213=>array(23,-60,942,823),36214=>array(27,-72,965,831),36215=>array(35,-74,945,834),36216=>array(46,-71,973,825),36217=>array(39,-66,960,829),36218=>array(46,-71,973,824),36219=>array(46,-72,974,835),36220=>array(33,-64,968,835),36221=>array(44,-74,972,830),36222=>array(46,-72,974,835),36223=>array(46,-72,978,835),36224=>array(47,-71,970,832),36225=>array(18,-62,960,857),36226=>array(46,-72,974,835),36227=>array(46,-72,974,835),36228=>array(38,-65,975,833),36229=>array(33,-68,959,833),36230=>array(46,-72,978,835),36231=>array(46,-72,974,835),36232=>array(46,-72,974,835),36233=>array(40,-65,968,826),36234=>array(42,-74,962,832),36235=>array(26,-72,938,824),36236=>array(30,-61,967,836),36237=>array(39,-64,977,830),36238=>array(35,-68,978,832),36239=>array(36,-65,981,820),36240=>array(28,-61,973,828),36241=>array(42,-64,973,848),36242=>array(27,-65,965,826),36243=>array(28,-61,981,826),36244=>array(39,-68,976,831),36245=>array(46,-69,966,829),36246=>array(57,-68,966,824),36247=>array(28,-61,965,826),36248=>array(28,-61,965,826),36249=>array(41,-75,959,830),36250=>array(28,-61,965,826),36251=>array(36,-71,969,824),36252=>array(35,-68,970,833),36253=>array(46,-72,974,835),36254=>array(46,-72,974,835),36255=>array(58,-53,973,841),36256=>array(39,-71,977,824),36257=>array(41,-68,971,823),36258=>array(34,-64,960,835),36259=>array(31,-54,960,835),36260=>array(46,-72,974,836),36261=>array(37,-60,968,835),36262=>array(45,-53,974,845),36263=>array(37,-71,981,818),36264=>array(56,-71,966,834),36265=>array(46,-72,974,835),36266=>array(39,-57,979,833),36267=>array(32,-71,984,825),36268=>array(41,-64,983,830),36269=>array(33,-62,984,827),36270=>array(26,-67,975,829),36271=>array(33,-68,970,828),36272=>array(31,-72,979,835),36273=>array(22,-69,937,817),36274=>array(42,-65,970,832),36275=>array(55,-73,970,762),36276=>array(30,-74,968,786),36277=>array(53,-54,896,841),36278=>array(64,-65,967,790),36279=>array(48,-37,974,830),36280=>array(45,-73,940,761),36281=>array(57,-72,965,827),36282=>array(45,-72,974,829),36283=>array(45,-72,967,837),36284=>array(54,-76,947,783),36285=>array(45,-69,959,849),36286=>array(45,-24,954,822),36287=>array(35,-71,971,788),36288=>array(45,-65,870,788),36289=>array(56,-32,959,785),36290=>array(35,-53,954,841),36291=>array(39,-64,963,832),36292=>array(45,-34,953,814),36293=>array(47,-70,955,819),36294=>array(52,-68,972,837),36295=>array(61,-34,951,822),36296=>array(48,-69,960,839),36297=>array(45,-79,971,847),36298=>array(40,-61,967,836),36299=>array(21,-76,948,841),36300=>array(52,-59,975,844),36301=>array(55,-68,951,826),36302=>array(48,-27,950,839),36303=>array(46,-72,907,828),36304=>array(46,-59,964,822),36305=>array(45,-34,966,838),36306=>array(45,-62,965,788),36307=>array(47,-15,955,842),36308=>array(45,-52,921,846),36309=>array(41,-52,947,842),36310=>array(39,-53,947,786),36311=>array(41,-50,951,846),36312=>array(53,-70,956,825),36313=>array(59,-19,963,783),36314=>array(28,-67,919,781),36315=>array(53,-62,978,841),36316=>array(45,-72,954,790),36317=>array(31,-61,947,795),36318=>array(48,-62,939,817),36319=>array(46,-71,964,787),36320=>array(52,-73,975,823),36321=>array(47,-59,955,822),36322=>array(42,-63,913,836),36323=>array(40,-63,953,829),36324=>array(50,-65,983,846),36325=>array(46,-62,964,791),36326=>array(50,-70,977,829),36327=>array(43,-20,968,793),36328=>array(39,-64,962,841),36329=>array(44,-74,967,823),36330=>array(48,-65,965,852),36331=>array(29,-64,947,778),36332=>array(54,-23,958,829),36333=>array(40,-69,972,841),36334=>array(51,-33,956,779),36335=>array(29,-67,968,838),36336=>array(50,-73,954,829),36337=>array(40,-52,950,841),36338=>array(44,-54,963,858),36339=>array(41,-70,945,825),36340=>array(37,-68,952,789),36341=>array(40,-69,959,827),36342=>array(50,-49,982,788),36343=>array(52,-71,938,815),36344=>array(35,-64,929,808),36345=>array(42,-51,935,804),36346=>array(54,-64,979,794),36347=>array(43,-66,948,835),36348=>array(48,-55,916,800),36349=>array(48,-32,969,791),36350=>array(46,-72,974,827),36351=>array(51,-70,966,821),36352=>array(52,-73,970,781),36353=>array(46,-28,945,785),36354=>array(51,-70,961,783),36355=>array(51,-69,909,824),36356=>array(45,-64,955,830),36357=>array(44,-66,970,835),36358=>array(48,-72,970,827),36359=>array(51,-64,953,825),36360=>array(45,-54,960,841),36361=>array(58,-68,981,837),36362=>array(50,-64,897,800),36363=>array(80,-61,915,810),36364=>array(37,-61,917,828),36365=>array(47,-68,948,823),36366=>array(36,-54,969,797),36367=>array(53,-62,980,843),36368=>array(30,-55,945,841),36369=>array(55,-75,967,824),36370=>array(44,-72,965,829),36371=>array(45,-68,959,831),36372=>array(54,-62,965,838),36373=>array(44,-73,972,827),36374=>array(47,-61,972,837),36375=>array(52,-36,976,835),36376=>array(49,-63,916,837),36377=>array(51,-73,981,782),36378=>array(47,-68,984,836),36379=>array(44,-26,954,826),36380=>array(56,-71,982,823),36381=>array(43,-67,972,787),36382=>array(46,-69,952,785),36383=>array(28,-67,886,836),36384=>array(39,-76,966,843),36385=>array(48,-37,986,846),36386=>array(46,-58,907,794),36387=>array(48,-65,953,849),36388=>array(48,-69,954,840),36389=>array(38,-70,950,833),36390=>array(42,-62,965,844),36391=>array(41,-69,979,830),36392=>array(59,-65,975,837),36393=>array(48,-62,976,837),36394=>array(44,-57,969,834),36395=>array(45,-35,957,832),36396=>array(42,-68,921,823),36397=>array(53,-59,970,836),36398=>array(43,-65,949,845),36399=>array(38,-65,919,798),36400=>array(43,-64,962,832),36401=>array(49,-62,982,856),36402=>array(47,-67,950,840),36403=>array(39,-68,978,840),36404=>array(41,-56,918,801),36405=>array(45,-27,958,839),36406=>array(52,-55,987,803),36407=>array(72,-69,959,835),36408=>array(35,-26,953,824),36409=>array(53,-64,956,835),36410=>array(43,-73,946,805),36411=>array(72,-57,916,800),36412=>array(33,-79,963,778),36413=>array(46,-62,942,836),36414=>array(41,-65,932,787),36415=>array(32,-75,983,822),36416=>array(49,-65,975,830),36417=>array(48,-65,944,843),36418=>array(45,-61,984,799),36419=>array(72,-65,948,836),36420=>array(37,-67,946,826),36421=>array(39,-32,967,823),36422=>array(38,-65,954,800),36423=>array(34,-62,984,842),36424=>array(53,-62,937,835),36425=>array(30,-26,937,841),36426=>array(20,-61,967,842),36427=>array(49,-61,903,799),36428=>array(55,-64,982,866),36429=>array(34,-52,968,797),36430=>array(50,-79,961,833),36431=>array(34,-72,968,830),36432=>array(51,-62,986,846),36433=>array(35,-71,937,780),36434=>array(29,-66,914,818),36435=>array(47,-62,920,841),36436=>array(39,-54,972,839),36437=>array(34,-68,949,805),36438=>array(48,-70,965,834),36439=>array(49,-66,962,837),36440=>array(27,-61,966,802),36441=>array(55,-60,981,842),36442=>array(61,-37,960,816),36443=>array(50,-74,951,821),36444=>array(36,-52,915,857),36445=>array(43,-67,971,831),36446=>array(40,-82,959,828),36447=>array(39,-55,955,849),36448=>array(38,-60,958,835),36449=>array(36,-52,952,858),36450=>array(39,-52,948,855),36451=>array(47,-65,954,835),36452=>array(43,-65,979,831),36453=>array(45,-72,969,823),36454=>array(46,-74,905,836),36455=>array(59,-74,962,821),36456=>array(64,-65,971,837),36457=>array(33,-65,972,839),36458=>array(52,-81,965,825),36459=>array(29,-67,933,788),36460=>array(33,-26,969,836),36461=>array(44,-64,912,846),36462=>array(37,-43,974,813),36463=>array(31,-67,971,833),36464=>array(30,-66,939,802),36465=>array(59,-32,971,839),36466=>array(44,-72,970,834),36467=>array(46,-67,979,832),36468=>array(25,-68,956,828),36469=>array(33,-65,965,845),36470=>array(25,-70,965,788),36471=>array(37,-58,963,800),36472=>array(49,-70,974,827),36473=>array(44,-63,979,858),36474=>array(46,-63,962,842),36475=>array(34,-59,961,857),36476=>array(28,-64,963,832),36477=>array(39,-62,975,859),36478=>array(39,-73,973,837),36479=>array(39,-60,916,843),36480=>array(28,-68,951,802),36481=>array(31,-61,965,798),36482=>array(46,-68,977,836),36483=>array(36,-64,965,849),36484=>array(39,-57,960,843),36485=>array(57,-62,924,786),36486=>array(23,-67,976,837),36487=>array(36,-62,953,842),36488=>array(33,-72,982,841),36489=>array(44,-67,968,833),36490=>array(43,-58,958,839),36491=>array(32,-69,964,849),36492=>array(62,-72,961,833),36493=>array(35,-70,956,813),36494=>array(61,-71,958,783),36495=>array(50,-71,918,820),36496=>array(41,-63,974,852),36497=>array(32,-67,956,821),36498=>array(45,-52,961,856),36499=>array(39,-68,974,837),36500=>array(25,-67,941,848),36501=>array(36,-63,960,853),36502=>array(59,-68,915,835),36503=>array(36,-67,979,839),36504=>array(33,-65,967,838),36505=>array(37,-50,901,804),36506=>array(36,-66,973,815),36507=>array(36,-67,979,839),36508=>array(34,-75,927,824),36509=>array(37,-50,917,804),36510=>array(37,-65,985,847),36511=>array(39,-65,976,850),36512=>array(43,-67,960,829),36513=>array(30,-69,955,804),36514=>array(37,-50,910,805),36515=>array(50,-65,967,787),36516=>array(42,-64,956,831),36517=>array(33,-65,963,849),36518=>array(40,-75,975,829),36519=>array(42,-73,966,791),36520=>array(39,-68,956,841),36521=>array(41,-61,980,809),36522=>array(49,-59,964,837),36523=>array(74,-62,924,853),36524=>array(55,-60,904,839),36525=>array(40,-66,969,848),36526=>array(57,-61,968,846),36527=>array(47,-65,945,844),36528=>array(27,-53,969,851),36529=>array(56,-62,965,848),36530=>array(54,-62,976,843),36531=>array(53,-69,917,861),36532=>array(47,-68,972,844),36533=>array(49,-68,973,830),36534=>array(41,-68,965,830),36535=>array(41,-67,970,841),36536=>array(57,-68,956,830),36537=>array(53,-68,946,847),36538=>array(48,-62,936,851),36539=>array(45,-68,948,845),36540=>array(49,-68,975,830),36541=>array(35,-58,958,850),36542=>array(34,-62,969,843),36543=>array(45,-63,966,857),36544=>array(42,-60,964,853),36545=>array(45,-68,962,839),36546=>array(33,-70,969,829),36547=>array(53,-68,968,830),36548=>array(45,-68,977,845),36549=>array(26,-73,977,841),36550=>array(32,-58,946,848),36551=>array(53,-57,968,846),36552=>array(38,-61,948,848),36553=>array(38,-78,934,836),36554=>array(63,-71,935,832),36555=>array(54,-70,948,830),36556=>array(53,-74,957,831),36557=>array(91,-68,923,784),36558=>array(61,-67,913,819),36559=>array(52,-69,958,829),36560=>array(41,-69,958,827),36561=>array(61,-72,978,827),36562=>array(55,-68,951,832),36563=>array(64,-76,963,824),36564=>array(68,-67,917,830),36565=>array(65,-69,921,830),36566=>array(62,-69,961,827),36567=>array(63,-73,962,830),36568=>array(61,-65,957,835),36569=>array(50,-70,945,838),36570=>array(65,-69,977,838),36571=>array(60,-66,954,830),36572=>array(66,-70,918,827),36573=>array(46,-68,966,832),36574=>array(60,-70,961,836),36575=>array(62,-67,965,841),36576=>array(59,-64,949,827),36577=>array(61,-76,968,834),36578=>array(53,-69,964,827),36579=>array(61,-55,913,834),36580=>array(65,-70,950,827),36581=>array(60,-65,915,831),36582=>array(59,-69,956,832),36583=>array(57,-72,960,833),36584=>array(54,-69,965,845),36585=>array(68,-70,954,838),36586=>array(84,-75,924,835),36587=>array(51,-67,969,844),36588=>array(46,-64,966,855),36589=>array(43,-71,945,827),36590=>array(61,-80,968,829),36591=>array(57,-72,950,827),36592=>array(62,-50,940,835),36593=>array(58,-60,975,834),36594=>array(72,-76,929,833),36595=>array(72,-64,977,849),36596=>array(72,-64,962,839),36597=>array(63,-69,952,835),36598=>array(76,-67,970,829),36599=>array(57,-52,959,839),36600=>array(58,-76,913,831),36601=>array(57,-67,962,826),36602=>array(69,-67,918,832),36603=>array(54,-67,950,829),36604=>array(56,-67,979,829),36605=>array(52,-64,976,833),36606=>array(60,-67,968,836),36607=>array(55,-54,949,852),36608=>array(53,-56,948,836),36609=>array(56,-80,977,826),36610=>array(44,-69,961,829),36611=>array(59,-67,965,829),36612=>array(59,-69,970,829),36613=>array(47,-65,967,838),36614=>array(57,-75,960,836),36615=>array(62,-71,966,820),36616=>array(61,-63,959,838),36617=>array(63,-62,956,836),36618=>array(60,-64,954,831),36619=>array(28,-64,980,840),36620=>array(52,-72,939,831),36621=>array(58,-70,967,824),36622=>array(60,-69,937,826),36623=>array(65,-68,966,825),36624=>array(66,-70,973,824),36625=>array(60,-71,951,827),36626=>array(50,-67,967,830),36627=>array(58,-67,966,827),36628=>array(55,-73,948,833),36629=>array(57,-70,950,832),36630=>array(57,-70,900,822),36631=>array(54,-65,962,827),36632=>array(47,-57,966,835),36633=>array(46,-68,966,837),36634=>array(62,-70,971,834),36635=>array(52,-72,939,831),36636=>array(63,-71,940,835),36637=>array(41,-63,953,832),36638=>array(57,-65,924,831),36639=>array(60,-65,971,833),36640=>array(62,-71,978,823),36641=>array(77,-68,912,841),36642=>array(77,-65,956,849),36643=>array(62,-76,903,823),36644=>array(61,-70,953,832),36645=>array(54,-70,955,829),36646=>array(52,-62,954,831),36647=>array(57,-65,949,859),36648=>array(62,-65,930,846),36649=>array(55,-74,951,838),36650=>array(52,-71,971,868),36651=>array(52,-65,967,831),36652=>array(54,-57,970,849),36653=>array(65,-72,975,820),36654=>array(60,-68,977,826),36655=>array(62,-70,951,831),36656=>array(77,-65,959,831),36657=>array(47,-68,979,835),36658=>array(72,-64,957,835),36659=>array(47,-67,964,832),36660=>array(50,-72,951,833),36661=>array(60,-53,923,838),36662=>array(56,-66,947,852),36663=>array(65,-70,919,834),36664=>array(45,-70,960,849),36665=>array(60,-68,974,836),36666=>array(63,-71,940,833),36667=>array(46,-74,941,827),36668=>array(59,-70,959,823),36669=>array(42,-66,967,831),36670=>array(60,-71,964,831),36671=>array(66,-55,948,839),36672=>array(59,-70,959,823),36673=>array(52,-65,944,831),36674=>array(48,-68,968,836),36675=>array(66,-69,973,833),36676=>array(53,-62,949,837),36677=>array(50,-70,967,833),36678=>array(53,-68,958,835),36679=>array(58,-64,968,829),36680=>array(58,-70,974,828),36681=>array(56,-71,947,828),36682=>array(44,-72,943,837),36683=>array(55,-72,974,825),36684=>array(46,-66,946,831),36685=>array(42,-68,972,837),36686=>array(51,-61,964,841),36687=>array(63,-71,958,825),36688=>array(53,-69,969,826),36689=>array(55,-54,968,844),36690=>array(65,-72,959,829),36691=>array(60,-67,978,829),36692=>array(48,-67,954,833),36693=>array(61,-64,948,830),36694=>array(58,-68,962,829),36695=>array(50,-66,961,830),36696=>array(56,-70,984,831),36697=>array(50,-74,974,853),36698=>array(60,-62,971,828),36699=>array(69,-71,964,826),36700=>array(42,-65,970,831),36701=>array(46,-69,977,836),36702=>array(66,-73,958,829),36703=>array(63,-62,960,836),36704=>array(71,-68,929,824),36705=>array(32,-65,961,844),36706=>array(50,-65,970,831),36707=>array(45,-53,969,836),36708=>array(52,-67,956,832),36709=>array(55,-65,941,837),36710=>array(42,-61,956,833),36711=>array(69,-73,922,823),36712=>array(67,-78,940,828),36713=>array(63,-70,934,823),36714=>array(68,-70,977,838),36715=>array(63,-69,901,824),36716=>array(53,-66,935,826),36717=>array(52,-74,937,818),36718=>array(31,-55,951,835),36719=>array(73,-69,949,838),36720=>array(28,-57,939,837),36721=>array(52,-76,929,823),36722=>array(52,-74,933,818),36723=>array(44,-73,929,819),36724=>array(59,-74,903,821),36725=>array(63,-69,946,824),36726=>array(52,-74,962,826),36727=>array(25,-65,920,828),36728=>array(52,-74,952,840),36729=>array(41,-65,947,823),36730=>array(63,-68,901,824),36731=>array(51,-48,938,836),36732=>array(37,-75,936,833),36733=>array(58,-69,939,824),36734=>array(52,-74,930,818),36735=>array(31,-66,948,832),36736=>array(63,-68,960,838),36737=>array(44,-60,940,831),36738=>array(52,-67,950,836),36739=>array(54,-69,948,835),36740=>array(45,-69,937,827),36741=>array(52,-73,931,831),36742=>array(35,-57,925,833),36743=>array(43,-75,950,816),36744=>array(68,-70,932,821),36745=>array(42,-57,948,833),36746=>array(52,-74,942,818),36747=>array(63,-67,905,827),36748=>array(63,-68,966,849),36749=>array(43,-65,961,819),36750=>array(55,-73,922,833),36751=>array(55,-69,944,838),36752=>array(43,-74,923,818),36753=>array(56,-69,936,821),36754=>array(46,-69,959,821),36755=>array(61,-73,943,846),36756=>array(40,-65,914,829),36757=>array(41,-78,949,819),36758=>array(52,-73,931,838),36759=>array(52,-74,948,818),36760=>array(50,-65,951,842),36761=>array(46,-65,938,839),36762=>array(52,-68,947,831),36763=>array(77,-68,923,828),36764=>array(59,-62,945,837),36765=>array(29,-65,948,840),36766=>array(52,-55,953,832),36767=>array(36,-55,954,847),36768=>array(59,-67,945,839),36769=>array(33,-67,954,853),36770=>array(21,-58,954,853),36771=>array(33,-67,967,835),36772=>array(39,-82,974,853),36773=>array(42,-57,960,840),36774=>array(58,-79,932,829),36775=>array(32,-68,945,837),36776=>array(37,-71,949,831),36777=>array(53,-64,933,843),36778=>array(59,-51,947,857),36779=>array(40,-66,915,838),36780=>array(40,-79,945,838),36781=>array(46,-63,962,846),36782=>array(42,-81,959,834),36783=>array(61,-77,938,829),36784=>array(57,-63,963,785),36785=>array(33,-61,955,789),36786=>array(38,-78,963,834),36787=>array(44,-74,956,836),36788=>array(57,-77,968,785),36789=>array(46,-74,960,827),36790=>array(38,-57,938,814),36791=>array(50,-17,957,811),36792=>array(38,-57,938,814),36793=>array(33,-24,939,823),36794=>array(33,-24,939,804),36795=>array(50,-34,955,832),36796=>array(35,-54,965,820),36797=>array(44,-45,944,793),36798=>array(31,-35,940,825),36799=>array(44,-45,944,835),36800=>array(31,-53,952,817),36801=>array(50,-17,957,828),36802=>array(44,-45,944,793),36803=>array(31,-69,952,793),36804=>array(44,-45,944,832),36805=>array(39,-53,960,817),36806=>array(27,-56,957,841),36807=>array(36,-51,933,827),36808=>array(32,-41,938,798),36809=>array(55,-61,979,815),36810=>array(56,-53,940,781),36811=>array(43,-53,972,835),36812=>array(56,-53,940,782),36813=>array(33,-57,962,841),36814=>array(31,-53,952,833),36815=>array(46,-47,952,827),36816=>array(32,-46,944,800),36817=>array(31,-53,952,828),36818=>array(48,-63,970,829),36819=>array(45,-69,966,832),36820=>array(42,-52,960,822),36821=>array(36,-55,968,852),36822=>array(47,-66,979,827),36823=>array(66,-62,988,817),36824=>array(32,-33,927,812),36825=>array(36,-47,942,815),36826=>array(36,-47,942,801),36827=>array(24,-37,935,817),36828=>array(38,-49,941,809),36829=>array(41,-49,938,816),36830=>array(34,-44,944,810),36831=>array(41,-26,938,806),36832=>array(55,-64,973,844),36833=>array(63,-77,974,833),36834=>array(36,-47,942,808),36835=>array(43,-65,967,829),36836=>array(53,-62,968,842),36837=>array(36,-47,942,808),36838=>array(44,-45,944,827),36839=>array(56,-53,940,830),36840=>array(51,-71,975,841),36841=>array(43,-45,946,829),36842=>array(31,-53,952,831),36843=>array(40,-54,961,834),36844=>array(56,-53,940,820),36845=>array(31,-53,952,817),36846=>array(72,-69,979,840),36847=>array(36,-47,952,803),36848=>array(36,-44,959,828),36849=>array(36,-38,959,837),36850=>array(37,-56,951,815),36851=>array(41,-50,939,793),36852=>array(36,-47,965,813),36853=>array(49,-73,982,835),36854=>array(39,-76,975,837),36855=>array(31,-53,952,831),36856=>array(36,-47,965,840),36857=>array(36,-47,965,831),36858=>array(36,-47,965,813),36859=>array(31,-58,960,857),36860=>array(46,-74,972,827),36861=>array(31,-53,952,842),36862=>array(39,-70,974,832),36863=>array(46,-70,978,849),36864=>array(31,-53,952,818),36865=>array(31,-53,952,859),36866=>array(42,-65,935,859),36867=>array(31,-53,952,828),36868=>array(39,-65,982,851),36869=>array(36,-47,965,837),36870=>array(31,-53,952,838),36871=>array(31,-53,952,833),36872=>array(42,-65,948,858),36873=>array(28,-43,942,807),36874=>array(32,-48,940,807),36875=>array(46,-47,952,841),36876=>array(46,-78,968,826),36877=>array(51,-47,950,829),36878=>array(41,-53,962,801),36879=>array(33,-52,954,831),36880=>array(22,-53,953,817),36881=>array(36,-47,965,832),36882=>array(28,-30,930,839),36883=>array(37,-56,951,830),36884=>array(30,-55,951,849),36885=>array(36,-47,965,813),36886=>array(31,-47,960,830),36887=>array(39,-56,953,815),36888=>array(41,-56,959,838),36889=>array(44,-45,944,816),36890=>array(31,-53,952,817),36891=>array(50,-59,963,821),36892=>array(46,-73,980,823),36893=>array(24,-53,945,829),36894=>array(41,-47,970,813),36895=>array(31,-53,952,836),36896=>array(31,-42,946,830),36897=>array(36,-47,965,839),36898=>array(44,-45,944,839),36899=>array(37,-56,951,830),36900=>array(39,-71,980,822),36901=>array(37,-56,976,799),36902=>array(33,-46,939,787),36903=>array(50,-46,944,809),36904=>array(37,-56,951,836),36905=>array(49,-56,963,847),36906=>array(37,-56,951,824),36907=>array(37,-44,951,811),36908=>array(37,-48,951,836),36909=>array(45,-78,971,844),36910=>array(31,-53,952,829),36911=>array(43,-66,981,847),36912=>array(39,-66,963,834),36913=>array(37,-56,951,799),36914=>array(37,-60,951,831),36915=>array(37,-48,951,821),36916=>array(51,-75,976,829),36917=>array(36,-47,965,837),36918=>array(46,-47,952,833),36919=>array(45,-64,959,791),36920=>array(36,-54,957,841),36921=>array(26,-53,947,834),36922=>array(37,-56,951,835),36923=>array(39,-57,942,792),36924=>array(44,-45,944,799),36925=>array(43,-66,961,826),36926=>array(11,-73,952,836),36927=>array(43,-68,966,818),36928=>array(49,-56,963,845),36929=>array(31,-74,952,837),36930=>array(31,-53,952,848),36931=>array(49,-56,963,833),36932=>array(46,-68,960,835),36933=>array(37,-56,951,807),36934=>array(49,-64,963,845),36935=>array(36,-51,964,814),36936=>array(36,-55,964,812),36937=>array(31,-63,956,831),36938=>array(37,-56,960,842),36939=>array(37,-56,951,799),36940=>array(36,-51,964,826),36941=>array(33,-45,959,815),36942=>array(37,-56,951,799),36943=>array(31,-53,952,801),36944=>array(31,-53,952,801),36945=>array(31,-53,952,843),36946=>array(37,-56,950,821),36947=>array(31,-53,952,847),36948=>array(37,-56,951,834),36949=>array(37,-56,951,844),36950=>array(47,-56,955,810),36951=>array(49,-59,953,820),36952=>array(52,-56,960,832),36953=>array(37,-56,951,837),36954=>array(44,-69,963,841),36955=>array(36,-67,975,834),36956=>array(42,-41,961,823),36957=>array(37,-40,955,831),36958=>array(47,-56,955,828),36959=>array(37,-56,951,799),36960=>array(37,-44,953,835),36961=>array(37,-56,951,837),36962=>array(40,-65,961,829),36963=>array(25,-59,946,832),36964=>array(25,-59,946,817),36965=>array(37,-56,951,834),36966=>array(37,-56,951,807),36967=>array(84,-56,977,838),36968=>array(47,-56,955,834),36969=>array(37,-56,951,839),36970=>array(37,-56,952,835),36971=>array(49,-70,982,827),36972=>array(37,-64,977,831),36973=>array(31,-53,952,830),36974=>array(36,-47,939,835),36975=>array(50,-59,955,795),36976=>array(40,-54,976,843),36977=>array(37,-56,972,831),36978=>array(47,-56,961,815),36979=>array(56,-72,981,832),36980=>array(40,-72,973,836),36981=>array(35,-49,958,841),36982=>array(47,-56,965,838),36983=>array(37,-56,956,807),36984=>array(37,-56,951,799),36985=>array(38,-52,975,826),36986=>array(37,-56,951,835),36987=>array(41,-73,976,820),36988=>array(37,-56,968,838),36989=>array(47,-56,961,835),36990=>array(45,-66,972,840),36991=>array(31,-53,952,824),36992=>array(47,-51,961,837),36993=>array(47,-51,961,829),36994=>array(47,-56,961,841),36995=>array(52,-56,966,841),36996=>array(37,-56,951,808),36997=>array(44,-70,972,846),36998=>array(39,-69,980,826),36999=>array(36,-47,971,828),37000=>array(18,-65,964,846),37001=>array(47,-51,961,837),37002=>array(47,-51,961,838),37003=>array(40,-65,971,848),37004=>array(45,-56,961,825),37005=>array(38,-72,983,848),37006=>array(37,-68,971,820),37007=>array(52,-51,966,820),37008=>array(42,-65,973,813),37009=>array(124,-30,927,784),37010=>array(84,-70,942,782),37011=>array(30,-60,912,790),37012=>array(72,-64,934,788),37013=>array(75,-24,931,841),37014=>array(114,-60,912,819),37015=>array(69,-69,939,787),37016=>array(60,-63,938,794),37017=>array(49,-69,958,799),37018=>array(85,-69,939,818),37019=>array(73,-69,939,781),37020=>array(57,-69,939,844),37021=>array(38,-65,916,842),37022=>array(55,-66,956,827),37023=>array(44,-60,947,838),37024=>array(45,-71,953,786),37025=>array(68,-71,959,841),37026=>array(51,-70,945,785),37027=>array(57,-70,940,786),37028=>array(41,-69,955,816),37029=>array(56,-68,950,832),37030=>array(76,-75,937,830),37031=>array(52,-69,945,785),37032=>array(57,-65,938,833),37033=>array(73,-91,911,814),37034=>array(48,-65,941,785),37035=>array(36,-75,959,830),37036=>array(47,-61,912,837),37037=>array(61,-72,943,834),37038=>array(89,-72,911,823),37039=>array(36,-67,919,831),37040=>array(75,-69,954,833),37041=>array(55,-63,927,828),37042=>array(46,-71,956,827),37043=>array(56,-68,957,784),37044=>array(51,-59,947,797),37045=>array(51,-68,938,786),37046=>array(33,-74,939,811),37047=>array(73,-74,941,780),37048=>array(63,-70,939,828),37049=>array(39,-68,917,809),37050=>array(40,-67,923,804),37051=>array(44,-60,909,829),37052=>array(93,-58,942,788),37053=>array(56,-68,943,824),37054=>array(41,-54,954,840),37055=>array(62,-68,943,827),37056=>array(32,-65,942,839),37057=>array(48,-68,942,840),37058=>array(53,-74,958,835),37059=>array(57,-72,959,829),37060=>array(31,-64,945,850),37061=>array(61,-69,957,783),37062=>array(82,-68,963,824),37063=>array(37,-63,961,847),37064=>array(46,-53,947,860),37065=>array(51,-70,945,785),37066=>array(54,-64,936,822),37067=>array(133,-67,930,833),37068=>array(49,-48,955,826),37069=>array(50,-76,910,845),37070=>array(51,-65,930,832),37071=>array(39,-70,912,820),37072=>array(26,-64,915,835),37073=>array(35,-59,921,832),37074=>array(102,-31,968,826),37075=>array(63,-70,930,780),37076=>array(52,-71,958,813),37077=>array(31,-52,958,852),37078=>array(51,-65,949,788),37079=>array(47,-69,968,837),37080=>array(121,-66,931,787),37081=>array(62,-76,956,826),37082=>array(66,-70,956,781),37083=>array(38,-68,939,834),37084=>array(80,-74,966,827),37085=>array(59,-62,947,836),37086=>array(77,-65,910,833),37087=>array(19,-74,942,829),37088=>array(48,-71,950,777),37089=>array(41,-68,945,787),37090=>array(46,-68,955,785),37091=>array(59,-70,944,823),37092=>array(40,-67,943,834),37093=>array(61,-68,954,786),37094=>array(62,-64,930,786),37095=>array(35,-69,916,783),37096=>array(59,-67,943,830),37097=>array(47,-70,952,836),37098=>array(52,-71,956,827),37099=>array(63,-69,967,847),37100=>array(73,-71,949,829),37101=>array(52,-58,941,837),37102=>array(33,-69,941,786),37103=>array(46,-70,962,831),37104=>array(46,-73,947,787),37105=>array(59,-69,938,827),37106=>array(46,-70,951,834),37107=>array(41,-70,949,828),37108=>array(49,-69,963,825),37109=>array(52,-69,942,831),37110=>array(59,-65,965,840),37111=>array(38,-70,947,833),37112=>array(43,-58,914,831),37113=>array(43,-70,954,786),37114=>array(36,-66,967,830),37115=>array(86,-69,960,783),37116=>array(60,-68,952,841),37117=>array(50,-67,949,835),37118=>array(80,-69,963,786),37119=>array(42,-69,966,785),37120=>array(44,-55,947,838),37121=>array(37,-74,951,826),37122=>array(62,-68,948,785),37123=>array(29,-68,954,843),37124=>array(57,-68,962,785),37125=>array(60,-53,947,848),37126=>array(71,-69,963,782),37127=>array(34,-70,959,838),37128=>array(33,-70,953,835),37129=>array(53,-70,938,839),37130=>array(53,-70,938,830),37131=>array(44,-69,951,826),37132=>array(23,-69,965,848),37133=>array(44,-75,949,783),37134=>array(25,-62,953,840),37135=>array(46,-71,948,802),37136=>array(62,-69,955,842),37137=>array(68,-68,949,785),37138=>array(53,-72,949,842),37139=>array(41,-66,949,841),37140=>array(37,-66,945,844),37141=>array(41,-70,938,831),37142=>array(45,-77,968,783),37143=>array(63,-67,951,837),37144=>array(40,-69,957,843),37145=>array(42,-70,933,783),37146=>array(47,-72,935,825),37147=>array(45,-69,953,835),37148=>array(51,-64,953,850),37149=>array(42,-68,940,785),37150=>array(52,-65,948,830),37151=>array(57,-70,943,824),37152=>array(58,-65,954,795),37153=>array(27,-69,945,838),37154=>array(37,-68,966,784),37155=>array(65,-69,940,838),37156=>array(47,-68,947,803),37157=>array(37,-66,946,844),37158=>array(24,-70,950,830),37159=>array(46,-65,951,832),37160=>array(101,-39,946,829),37161=>array(49,-73,950,781),37162=>array(49,-80,955,833),37163=>array(95,-55,942,853),37164=>array(48,-78,965,836),37165=>array(57,-77,956,839),37166=>array(46,-73,952,836),37167=>array(66,-67,947,849),37168=>array(62,-77,949,833),37169=>array(35,-70,953,836),37170=>array(49,-66,951,787),37171=>array(104,-67,949,787),37172=>array(40,-69,974,824),37173=>array(41,-68,960,797),37174=>array(18,-74,962,847),37175=>array(48,-71,943,830),37176=>array(59,-67,941,834),37177=>array(43,-70,960,793),37178=>array(34,-70,949,845),37179=>array(63,-75,958,829),37180=>array(25,-75,958,827),37181=>array(22,-75,978,858),37182=>array(48,-65,954,789),37183=>array(59,-67,958,832),37184=>array(42,-73,959,829),37185=>array(40,-79,954,836),37186=>array(44,-50,960,801),37187=>array(85,-68,956,796),37188=>array(40,-69,958,825),37189=>array(45,-65,956,837),37190=>array(47,-68,947,827),37191=>array(52,-62,962,844),37192=>array(30,-67,951,805),37193=>array(54,-63,946,779),37194=>array(59,-54,953,788),37195=>array(60,-67,950,840),37196=>array(64,-63,915,844),37197=>array(63,-67,945,790),37198=>array(62,-65,954,832),37199=>array(60,-54,961,825),37200=>array(59,-60,950,790),37201=>array(56,-45,966,798),37202=>array(47,-62,943,790),37203=>array(46,-72,966,849),37204=>array(40,-68,979,837),37205=>array(59,-54,957,809),37206=>array(66,-61,973,836),37207=>array(55,-53,916,808),37208=>array(56,-75,984,791),37209=>array(56,-72,955,826),37210=>array(55,-53,962,790),37211=>array(35,-68,969,787),37212=>array(45,-68,980,842),37213=>array(52,-61,943,782),37214=>array(54,-70,968,837),37215=>array(56,-70,943,816),37216=>array(55,-57,956,790),37217=>array(55,-53,959,836),37218=>array(50,-64,951,835),37219=>array(53,-65,955,830),37220=>array(55,-58,951,836),37221=>array(63,-65,977,828),37222=>array(46,-64,972,820),37223=>array(66,-61,965,849),37224=>array(69,-70,961,833),37225=>array(76,-65,919,839),37226=>array(51,-67,967,840),37227=>array(30,-68,958,820),37228=>array(66,-65,913,835),37229=>array(45,-68,956,834),37230=>array(55,-64,932,790),37231=>array(55,-71,953,816),37232=>array(53,-70,974,836),37233=>array(65,-62,922,837),37234=>array(50,-53,946,790),37235=>array(60,-68,960,825),37236=>array(55,-63,968,841),37237=>array(61,-71,949,830),37238=>array(59,-71,955,840),37239=>array(59,-61,924,829),37240=>array(40,-73,967,849),37241=>array(55,-64,952,830),37242=>array(55,-66,960,828),37243=>array(60,-68,973,835),37244=>array(25,-68,977,833),37245=>array(49,-64,920,771),37246=>array(50,-45,913,775),37247=>array(43,-60,939,841),37248=>array(55,-68,955,822),37249=>array(55,-73,963,831),37250=>array(58,-70,975,820),37251=>array(55,-55,971,831),37252=>array(55,-60,929,826),37253=>array(55,-67,952,838),37254=>array(59,-68,964,832),37255=>array(54,-64,960,831),37256=>array(55,-69,978,839),37257=>array(56,-71,951,835),37258=>array(51,-63,967,793),37259=>array(59,-72,949,818),37260=>array(58,-54,961,789),37261=>array(53,-65,966,787),37262=>array(49,-69,955,834),37263=>array(55,-66,951,825),37264=>array(68,-66,919,828),37265=>array(55,-68,966,790),37266=>array(66,-38,962,798),37267=>array(55,-53,963,830),37268=>array(48,-70,951,844),37269=>array(35,-68,949,845),37270=>array(40,-68,963,787),37271=>array(53,-64,968,834),37272=>array(45,-68,953,822),37273=>array(55,-69,964,824),37274=>array(47,-73,961,821),37275=>array(55,-53,968,821),37276=>array(59,-65,974,847),37277=>array(55,-53,952,829),37278=>array(55,-53,958,790),37279=>array(86,-63,921,831),37280=>array(55,-53,967,828),37281=>array(56,-69,948,838),37282=>array(51,-52,941,840),37283=>array(50,-67,954,844),37284=>array(53,-74,947,845),37285=>array(55,-67,963,799),37286=>array(60,-61,967,848),37287=>array(48,-53,957,790),37288=>array(55,-69,954,827),37289=>array(54,-53,961,848),37290=>array(48,-69,975,790),37291=>array(51,-71,945,784),37292=>array(63,-78,955,853),37293=>array(57,-72,981,823),37294=>array(54,-66,952,833),37295=>array(47,-58,959,836),37296=>array(60,-48,960,811),37297=>array(53,-62,977,846),37298=>array(46,-74,972,825),37299=>array(66,-70,962,784),37300=>array(51,-57,952,829),37301=>array(43,-65,970,828),37302=>array(51,-66,947,847),37303=>array(51,-62,965,838),37304=>array(51,-79,979,837),37305=>array(52,-55,944,803),37306=>array(53,-66,959,832),37307=>array(62,-64,961,835),37308=>array(49,-67,963,826),37309=>array(53,-48,939,810),37310=>array(47,-65,961,838),37311=>array(55,-66,961,837),37312=>array(62,-72,982,842),37313=>array(52,-75,964,833),37314=>array(59,-64,962,848),37315=>array(54,-72,964,790),37316=>array(55,-63,961,837),37317=>array(50,-65,981,795),37318=>array(50,-70,966,824),37319=>array(52,-68,956,829),37320=>array(42,-66,978,827),37321=>array(45,-66,907,842),37322=>array(47,-61,934,806),37323=>array(36,-70,951,821),37324=>array(52,-19,948,796),37325=>array(69,-34,947,831),37326=>array(64,-64,931,784),37327=>array(53,-30,947,789),37328=>array(29,-56,953,844),37329=>array(54,-21,960,856),37330=>array(39,-26,547,829),37331=>array(39,-30,959,829),37332=>array(35,-32,954,824),37333=>array(48,-64,944,828),37334=>array(39,-73,934,829),37335=>array(59,-62,909,831),37336=>array(45,-52,956,843),37337=>array(49,-65,958,833),37338=>array(42,-72,967,845),37339=>array(39,-66,927,834),37340=>array(66,-25,948,833),37341=>array(44,-67,950,831),37342=>array(39,-57,958,829),37343=>array(39,-71,989,829),37344=>array(39,-71,967,829),37345=>array(86,-21,916,833),37346=>array(58,-75,940,840),37347=>array(55,-61,921,841),37348=>array(48,-65,957,832),37349=>array(39,-72,982,829),37350=>array(54,-50,906,813),37351=>array(48,-62,896,837),37352=>array(42,-72,957,829),37353=>array(39,-67,959,831),37354=>array(45,-71,956,829),37355=>array(36,-69,955,826),37356=>array(39,-71,958,823),37357=>array(36,-18,955,824),37358=>array(42,-74,953,834),37359=>array(39,-26,930,833),37360=>array(39,-49,916,829),37361=>array(36,-60,963,835),37362=>array(48,-38,958,829),37363=>array(29,-29,961,827),37364=>array(39,-67,958,834),37365=>array(42,-67,965,830),37366=>array(39,-26,963,841),37367=>array(41,-17,953,827),37368=>array(48,-69,920,831),37369=>array(41,-68,950,830),37370=>array(39,-67,942,829),37371=>array(42,-56,964,843),37372=>array(37,-60,969,823),37373=>array(40,-64,967,834),37374=>array(54,-59,967,827),37375=>array(42,-61,959,847),37376=>array(36,-35,954,830),37377=>array(46,-64,948,835),37378=>array(42,-63,966,839),37379=>array(35,-72,957,834),37380=>array(49,-64,964,831),37381=>array(35,-73,894,841),37382=>array(41,-68,972,836),37383=>array(37,-58,966,840),37384=>array(34,-64,959,827),37385=>array(56,-68,914,823),37386=>array(44,-26,972,836),37387=>array(37,-62,954,840),37388=>array(46,-73,985,837),37389=>array(37,-52,965,839),37390=>array(61,-57,920,841),37391=>array(35,-72,898,823),37392=>array(40,-70,977,840),37393=>array(41,-62,971,831),37394=>array(40,-68,979,840),37395=>array(37,-22,958,840),37396=>array(35,-60,973,829),37397=>array(41,-30,951,833),37398=>array(32,-70,976,832),37399=>array(38,-60,966,838),37400=>array(44,-68,973,841),37401=>array(40,-70,990,834),37402=>array(38,-69,962,831),37403=>array(37,-52,949,840),37404=>array(38,-63,964,836),37405=>array(44,-71,954,840),37406=>array(65,-57,923,839),37407=>array(51,-66,896,840),37408=>array(37,-65,964,840),37409=>array(37,-66,891,840),37410=>array(31,-72,980,832),37411=>array(51,-65,944,830),37412=>array(39,-71,909,827),37413=>array(44,-67,976,826),37414=>array(46,-69,951,833),37415=>array(44,-66,964,841),37416=>array(37,-51,949,840),37417=>array(37,-66,928,840),37418=>array(45,-71,970,827),37419=>array(37,-63,961,842),37420=>array(37,-66,981,840),37421=>array(37,-21,968,823),37422=>array(43,-60,953,833),37423=>array(37,-66,922,842),37424=>array(35,-64,954,846),37425=>array(31,-57,964,839),37426=>array(29,-72,976,839),37427=>array(35,-61,957,833),37428=>array(35,-65,975,846),37429=>array(37,-62,962,840),37430=>array(46,-69,961,831),37431=>array(38,-65,948,833),37432=>array(47,-66,975,833),37433=>array(32,-67,972,839),37434=>array(47,-14,950,831),37435=>array(37,-47,912,843),37436=>array(37,-65,948,844),37437=>array(39,-68,944,837),37438=>array(64,-70,912,828),37439=>array(42,-42,918,827),37440=>array(56,-67,914,823),37441=>array(57,-72,971,850),37442=>array(56,-68,970,833),37443=>array(56,-67,967,828),37444=>array(27,-59,974,841),37445=>array(42,-17,953,826),37446=>array(44,-73,950,829),37447=>array(56,-29,943,830),37448=>array(24,-30,957,829),37449=>array(35,-70,981,829),37450=>array(35,-71,920,830),37451=>array(33,-45,964,834),37452=>array(28,-70,981,831),37453=>array(32,-78,967,837),37454=>array(35,-30,954,834),37455=>array(27,-20,947,834),37456=>array(35,-71,950,838),37457=>array(70,-68,919,845),37458=>array(38,-29,952,833),37459=>array(31,-73,948,834),37460=>array(37,-29,953,828),37461=>array(37,-29,953,828),37462=>array(39,-78,986,840),37463=>array(37,-68,958,833),37464=>array(56,-62,932,829),37465=>array(56,-68,948,823),37466=>array(59,-74,912,837),37467=>array(51,-67,959,823),37468=>array(56,-64,962,837),37469=>array(56,-22,955,835),37470=>array(40,-62,966,829),37471=>array(56,-27,971,823),37472=>array(29,-74,976,830),37473=>array(44,-72,953,834),37474=>array(31,-73,980,831),37475=>array(39,-54,953,837),37476=>array(45,-59,919,834),37477=>array(31,-58,959,838),37478=>array(41,-18,954,832),37479=>array(36,-58,957,828),37480=>array(56,-58,934,836),37481=>array(56,-28,979,844),37482=>array(56,-22,954,830),37483=>array(46,-57,937,831),37484=>array(63,-69,913,831),37485=>array(38,-12,959,830),37486=>array(55,-62,913,838),37487=>array(34,-69,967,837),37488=>array(48,-71,908,838),37489=>array(37,-66,948,823),37490=>array(39,-70,953,844),37491=>array(36,-59,964,824),37492=>array(28,-17,947,835),37493=>array(41,-42,983,832),37494=>array(39,-53,907,847),37495=>array(35,-71,948,837),37496=>array(31,-63,973,840),37497=>array(44,-69,941,831),37498=>array(30,-64,959,833),37499=>array(34,-67,966,824),37500=>array(37,-59,962,854),37501=>array(53,-65,963,835),37502=>array(31,-71,969,830),37503=>array(41,-67,974,847),37504=>array(44,-56,968,827),37505=>array(56,-60,909,836),37506=>array(52,-69,903,835),37507=>array(39,-64,960,835),37508=>array(39,-64,914,844),37509=>array(50,-70,921,829),37510=>array(51,-70,949,833),37511=>array(59,-68,980,835),37512=>array(47,-31,956,837),37513=>array(34,-61,955,841),37514=>array(50,-71,957,836),37515=>array(43,-68,952,835),37516=>array(46,-69,955,841),37517=>array(34,-20,947,835),37518=>array(32,-14,968,800),37519=>array(26,-68,974,823),37520=>array(43,-32,967,828),37521=>array(33,-70,959,837),37522=>array(56,-69,956,823),37523=>array(35,-24,973,830),37524=>array(50,-70,955,834),37525=>array(33,-73,970,830),37526=>array(30,-64,967,839),37527=>array(47,-73,952,837),37528=>array(64,-69,903,840),37529=>array(54,-67,967,834),37530=>array(41,-66,964,838),37531=>array(37,-63,959,837),37532=>array(38,-73,961,832),37533=>array(35,-76,964,832),37534=>array(41,-22,964,848),37535=>array(47,-67,930,837),37536=>array(31,-36,958,831),37537=>array(43,-73,945,831),37538=>array(58,-70,969,832),37539=>array(54,-63,927,837),37540=>array(54,-73,964,832),37541=>array(37,-65,963,844),37542=>array(48,-52,921,834),37543=>array(52,-71,961,835),37544=>array(35,-63,951,848),37545=>array(42,-51,955,829),37546=>array(46,-65,954,837),37547=>array(51,-32,971,837),37548=>array(34,-63,956,832),37549=>array(56,-70,933,826),37550=>array(35,-27,960,825),37551=>array(56,-67,952,824),37552=>array(51,-66,949,835),37553=>array(30,-70,942,841),37554=>array(30,-52,958,841),37555=>array(39,-69,959,833),37556=>array(31,-37,987,838),37557=>array(42,-71,969,846),37558=>array(47,-62,975,835),37559=>array(50,-67,942,833),37560=>array(30,-67,953,827),37561=>array(35,-70,958,838),37562=>array(27,-47,987,832),37563=>array(60,-67,925,836),37564=>array(39,-23,955,835),37565=>array(28,-54,981,831),37566=>array(58,-70,969,832),37567=>array(29,-64,895,840),37568=>array(28,-30,953,839),37569=>array(53,-69,917,819),37570=>array(38,-75,975,832),37571=>array(50,-63,978,846),37572=>array(47,-74,984,835),37573=>array(46,-70,951,834),37574=>array(39,-25,964,835),37575=>array(48,-67,961,833),37576=>array(36,-25,967,838),37577=>array(43,-69,975,841),37578=>array(34,-68,984,840),37579=>array(48,-46,977,854),37580=>array(45,-69,968,834),37581=>array(35,-73,957,835),37582=>array(28,-66,970,844),37583=>array(42,-70,980,835),37584=>array(42,-65,957,834),37585=>array(32,-76,968,841),37586=>array(41,-61,980,841),37587=>array(42,-70,916,833),37588=>array(28,-67,967,848),37589=>array(57,-40,982,825),37590=>array(33,-74,959,838),37591=>array(36,-64,903,844),37592=>array(43,-72,978,823),37593=>array(35,-48,947,839),37594=>array(34,-25,966,842),37595=>array(41,-68,931,832),37596=>array(33,-73,970,838),37597=>array(37,-70,954,840),37598=>array(32,-30,954,833),37599=>array(38,-66,979,833),37600=>array(31,-78,971,846),37601=>array(37,-70,981,840),37602=>array(33,-56,973,838),37603=>array(42,-72,958,829),37604=>array(45,-70,919,834),37605=>array(33,-16,950,838),37606=>array(42,-68,930,829),37607=>array(36,-72,969,838),37608=>array(36,-64,955,836),37609=>array(39,-21,954,830),37610=>array(43,-70,951,835),37611=>array(19,-25,951,835),37612=>array(34,-24,966,833),37613=>array(39,-70,959,834),37614=>array(43,-70,964,840),37615=>array(46,-65,957,831),37616=>array(40,-27,954,836),37617=>array(35,-60,968,831),37618=>array(39,-64,954,835),37619=>array(37,-60,945,838),37620=>array(43,-66,954,838),37621=>array(39,-64,960,835),37622=>array(33,-70,973,843),37623=>array(26,-76,968,826),37624=>array(39,-68,945,830),37625=>array(25,-71,962,835),37626=>array(35,-67,965,831),37627=>array(37,-27,971,782),37628=>array(62,-68,908,824),37629=>array(33,-62,965,838),37630=>array(25,-70,914,836),37631=>array(28,-69,920,833),37632=>array(29,-64,982,841),37633=>array(37,-65,977,833),37634=>array(42,-57,971,842),37635=>array(34,-42,966,836),37636=>array(57,-64,968,841),37637=>array(49,-46,946,832),37638=>array(38,-64,953,842),37639=>array(38,-70,947,841),37640=>array(30,-41,978,839),37641=>array(40,-71,967,837),37642=>array(40,-64,960,845),37643=>array(21,-80,903,821),37644=>array(25,-70,941,836),37645=>array(37,-69,959,842),37646=>array(36,-68,905,836),37647=>array(29,-24,962,833),37648=>array(48,-68,954,832),37649=>array(33,-69,972,842),37650=>array(30,-66,956,826),37651=>array(28,-66,964,837),37652=>array(33,-53,975,841),37653=>array(53,-42,961,837),37654=>array(44,-32,981,836),37655=>array(30,-62,958,842),37656=>array(43,-32,952,832),37657=>array(44,-65,934,844),37658=>array(27,-64,957,832),37659=>array(36,-64,994,845),37660=>array(27,-27,971,840),37661=>array(24,-54,969,838),37662=>array(30,-58,951,846),37663=>array(35,-59,968,843),37664=>array(41,-72,963,839),37665=>array(38,-65,952,837),37666=>array(48,-67,956,832),37667=>array(31,-61,962,835),37668=>array(46,-74,981,833),37669=>array(33,-68,954,843),37670=>array(68,-67,920,849),37671=>array(37,-48,923,860),37672=>array(42,-67,956,836),37673=>array(49,-64,907,838),37674=>array(37,-58,973,838),37675=>array(55,-60,917,824),37676=>array(57,-64,973,835),37677=>array(36,-75,905,840),37678=>array(58,-70,917,836),37679=>array(39,-64,955,836),37680=>array(39,-90,986,836),37681=>array(54,-62,948,844),37682=>array(39,-64,973,836),37683=>array(44,-32,956,824),37684=>array(29,-30,956,825),37685=>array(29,-65,962,833),37686=>array(29,-57,974,841),37687=>array(29,-70,983,835),37688=>array(33,-64,975,836),37689=>array(40,-65,956,836),37690=>array(40,-65,958,837),37691=>array(50,-64,962,846),37692=>array(37,-65,978,838),37693=>array(44,-72,981,833),37694=>array(31,-18,938,825),37695=>array(34,-67,951,834),37696=>array(42,-53,957,845),37697=>array(33,-72,961,833),37698=>array(34,-31,982,843),37699=>array(34,-29,961,842),37700=>array(38,-60,967,832),37701=>array(50,-57,962,831),37702=>array(50,-65,921,830),37703=>array(52,-62,979,844),37704=>array(33,-64,964,835),37705=>array(36,-71,978,828),37706=>array(18,-53,969,847),37707=>array(54,-67,914,834),37708=>array(54,-43,971,817),37709=>array(46,-78,969,833),37710=>array(42,-68,951,837),37711=>array(47,-70,959,832),37712=>array(46,-67,983,839),37713=>array(44,-72,981,835),37714=>array(41,-71,979,834),37715=>array(41,-67,954,834),37716=>array(44,-60,965,839),37717=>array(47,-76,964,824),37718=>array(43,-74,955,818),37719=>array(50,-67,943,843),37720=>array(49,-67,915,830),37721=>array(49,-43,973,817),37722=>array(39,-68,964,825),37723=>array(42,-69,971,830),37724=>array(42,-50,963,842),37725=>array(42,-70,944,842),37726=>array(49,-81,978,832),37727=>array(49,-28,954,832),37728=>array(39,-21,957,851),37729=>array(32,-71,970,829),37730=>array(42,-65,948,842),37731=>array(47,-71,950,829),37732=>array(43,-64,960,844),37733=>array(48,-62,976,841),37734=>array(38,-69,957,841),37735=>array(52,-65,926,836),37736=>array(39,-58,955,835),37737=>array(37,-65,973,836),37738=>array(42,-23,981,842),37739=>array(43,-39,967,842),37740=>array(43,-73,974,833),37741=>array(39,-53,964,844),37742=>array(41,-63,969,840),37743=>array(41,-47,960,848),37744=>array(43,-67,981,844),37745=>array(35,-50,968,845),37746=>array(43,-52,963,843),37747=>array(39,-40,973,837),37748=>array(43,-63,954,843),37749=>array(38,-66,963,823),37750=>array(48,-32,965,823),37751=>array(36,-37,978,824),37752=>array(34,-71,923,833),37753=>array(45,-37,961,834),37754=>array(39,-64,950,838),37755=>array(57,-73,936,824),37756=>array(28,-60,963,842),37757=>array(36,-67,917,840),37758=>array(36,-30,959,842),37759=>array(36,-71,925,838),37760=>array(38,-67,976,837),37761=>array(38,-65,969,834),37762=>array(44,-74,968,837),37763=>array(35,-68,974,844),37764=>array(44,-75,969,842),37765=>array(26,-54,969,846),37766=>array(39,-73,951,833),37767=>array(44,-72,920,818),37768=>array(29,-49,956,848),37769=>array(35,-69,920,833),37770=>array(50,-67,925,847),37771=>array(44,-70,938,839),37772=>array(25,-66,970,847),37773=>array(34,-65,971,834),37774=>array(27,-69,978,842),37775=>array(33,-30,986,843),37776=>array(33,-58,957,835),37777=>array(34,-34,957,833),37778=>array(32,-70,970,826),37779=>array(44,-81,969,822),37780=>array(26,-51,963,842),37781=>array(39,-68,964,845),37782=>array(42,-70,970,837),37783=>array(41,-60,970,855),37784=>array(39,-67,954,826),37785=>array(33,-73,924,823),37786=>array(28,-73,965,838),37787=>array(40,-53,951,843),37788=>array(40,-50,976,846),37789=>array(40,-62,988,835),37790=>array(30,-50,960,845),37791=>array(34,-71,986,827),37792=>array(44,-37,953,834),37793=>array(33,-64,955,851),37794=>array(37,-66,950,839),37795=>array(39,-33,972,835),37796=>array(36,-61,974,836),37797=>array(40,-30,976,836),37798=>array(48,-67,925,830),37799=>array(37,-24,960,832),37800=>array(40,-65,965,840),37801=>array(47,-62,990,836),37802=>array(41,-72,975,835),37803=>array(44,-57,976,823),37804=>array(45,-70,936,832),37805=>array(37,-78,963,833),37806=>array(38,-69,952,836),37807=>array(32,-65,954,837),37808=>array(39,-38,961,824),37809=>array(33,-67,974,837),37810=>array(34,-63,980,838),37811=>array(35,-67,965,846),37812=>array(34,-42,980,836),37813=>array(32,-56,967,843),37814=>array(44,-64,929,818),37815=>array(44,-62,936,838),37816=>array(44,-66,950,837),37817=>array(37,-48,968,822),37818=>array(19,-73,981,837),37819=>array(48,-70,959,840),37820=>array(41,-70,942,835),37821=>array(39,-64,970,839),37822=>array(44,-38,968,818),37823=>array(49,-65,969,855),37824=>array(54,-67,926,834),37825=>array(43,-65,970,839),37826=>array(37,-35,957,828),37827=>array(31,-66,974,837),37828=>array(41,-67,962,838),37829=>array(37,-66,958,847),37830=>array(45,-66,955,830),37831=>array(28,-57,973,848),37832=>array(45,-63,969,835),37833=>array(48,-76,966,834),37834=>array(38,-30,979,846),37835=>array(31,-67,951,829),37836=>array(28,-57,978,844),37837=>array(34,-71,962,831),37838=>array(32,-71,962,831),37839=>array(40,-23,957,824),37840=>array(39,-69,960,841),37841=>array(35,-64,951,833),37842=>array(44,-67,983,841),37843=>array(44,-44,989,850),37844=>array(43,-71,965,840),37845=>array(36,-63,961,845),37846=>array(25,-66,967,837),37847=>array(34,-20,968,832),37848=>array(31,-65,953,833),37849=>array(47,-67,967,837),37850=>array(44,-70,982,835),37851=>array(44,-64,933,839),37852=>array(46,-23,956,827),37853=>array(39,-60,984,841),37854=>array(39,-70,956,839),37855=>array(40,-71,954,847),37856=>array(21,-52,989,843),37857=>array(34,-73,964,836),37858=>array(38,-64,965,824),37859=>array(28,-75,983,840),37860=>array(44,-64,956,835),37861=>array(44,-65,942,831),37862=>array(29,-55,979,847),37863=>array(48,-29,968,826),37864=>array(31,-21,962,836),37865=>array(34,-63,974,843),37866=>array(44,-69,978,828),37867=>array(44,-68,962,826),37868=>array(41,-68,942,835),37869=>array(29,-38,964,828),37870=>array(32,-66,966,848),37871=>array(39,-72,972,823),37872=>array(37,-74,930,841),37873=>array(35,-61,967,852),37874=>array(35,-67,949,848),37875=>array(32,-62,920,846),37876=>array(22,-65,970,841),37877=>array(35,-67,961,833),37878=>array(38,-67,981,836),37879=>array(32,-63,974,830),37880=>array(47,-42,982,825),37881=>array(43,-53,959,837),37882=>array(51,-68,993,848),37883=>array(66,-57,979,840),37884=>array(29,-68,979,837),37885=>array(23,-53,954,840),37886=>array(19,-76,969,834),37887=>array(39,-68,979,832),37888=>array(44,-80,954,834),37889=>array(24,-67,954,838),37890=>array(37,-71,946,839),37891=>array(37,-63,963,839),37892=>array(37,-70,971,839),37893=>array(60,-40,972,839),37894=>array(60,-30,972,846),37895=>array(35,-66,969,850),37896=>array(42,-62,964,841),37897=>array(42,-85,969,824),37898=>array(24,-67,954,838),37899=>array(27,-66,952,837),37900=>array(42,-67,988,825),37901=>array(47,-56,925,839),37902=>array(27,-66,975,844),37903=>array(44,-50,952,858),37904=>array(39,-67,973,846),37905=>array(41,-70,961,835),37906=>array(47,-65,952,833),37907=>array(29,-70,971,832),37908=>array(36,-53,943,839),37909=>array(27,-71,959,834),37910=>array(24,-69,963,836),37911=>array(29,-68,911,838),37912=>array(40,-31,956,839),37913=>array(32,-24,959,837),37914=>array(37,-48,968,839),37915=>array(41,-59,965,830),37916=>array(40,-34,958,847),37917=>array(48,-76,954,838),37918=>array(42,-59,962,839),37919=>array(37,-68,954,839),37920=>array(42,-64,954,844),37921=>array(44,-69,951,824),37922=>array(39,-30,972,826),37923=>array(47,-54,935,839),37924=>array(47,-56,938,834),37925=>array(37,-64,954,845),37926=>array(57,-73,905,839),37927=>array(57,-65,927,822),37928=>array(38,-71,966,835),37929=>array(45,-66,978,830),37930=>array(40,-71,954,833),37931=>array(35,-58,951,843),37932=>array(39,-69,959,829),37933=>array(42,-62,970,850),37934=>array(28,-79,969,847),37935=>array(37,-62,963,842),37936=>array(45,-68,973,834),37937=>array(50,-68,980,842),37938=>array(57,-58,930,827),37939=>array(52,-70,935,837),37940=>array(37,-69,972,845),37941=>array(44,-69,951,824),37942=>array(41,-67,976,837),37943=>array(46,-70,970,830),37944=>array(39,-64,951,840),37945=>array(44,-71,974,826),37946=>array(51,-65,945,838),37947=>array(39,-64,966,831),37948=>array(48,-75,967,830),37949=>array(45,-68,977,835),37950=>array(32,-17,951,838),37951=>array(36,-37,966,844),37952=>array(57,-68,979,835),37953=>array(37,-61,980,843),37954=>array(33,-70,963,836),37955=>array(44,-61,967,835),37956=>array(45,-65,960,835),37957=>array(43,-66,971,834),37958=>array(41,-68,969,826),37959=>array(37,-68,979,833),37960=>array(37,-65,974,829),37961=>array(52,-32,959,831),37962=>array(37,-64,970,835),37963=>array(53,-27,956,825),37964=>array(37,-64,977,849),37965=>array(60,-30,972,804),37966=>array(37,-27,959,839),37967=>array(46,-72,963,839),37968=>array(33,-70,961,831),37969=>array(30,-16,957,844),37970=>array(42,-34,974,841),37971=>array(33,-56,959,837),37972=>array(28,-69,977,845),37973=>array(46,-63,977,844),37974=>array(32,-67,968,839),37975=>array(36,-70,983,834),37976=>array(34,-63,933,830),37977=>array(17,-74,974,834),37978=>array(37,-60,981,845),37979=>array(46,-62,970,839),37980=>array(37,-72,954,839),37981=>array(31,-68,982,832),37982=>array(37,-62,964,842),37983=>array(37,-66,966,841),37984=>array(48,-68,982,840),37985=>array(37,-63,942,839),37986=>array(31,-58,960,847),37987=>array(35,-66,967,854),37988=>array(39,-68,969,827),37989=>array(34,-65,974,852),37990=>array(17,-57,989,839),37991=>array(34,-61,959,849),37992=>array(31,-65,973,837),37993=>array(30,-30,958,817),37994=>array(46,-72,957,829),37995=>array(32,-73,973,856),37996=>array(39,-64,964,839),37997=>array(49,-64,927,829),37998=>array(38,-65,964,831),37999=>array(27,-62,980,837),38000=>array(28,-68,969,845),38001=>array(38,-58,965,842),38002=>array(40,-67,974,854),38003=>array(31,-67,986,844),38004=>array(47,-67,951,828),38005=>array(36,-56,957,837),38006=>array(31,-67,975,834),38007=>array(32,-69,955,822),38008=>array(42,-27,969,827),38009=>array(36,-66,963,848),38010=>array(22,-65,967,839),38011=>array(34,-66,977,842),38012=>array(36,-70,960,829),38013=>array(48,-70,959,838),38014=>array(43,-29,967,845),38015=>array(52,-37,962,834),38016=>array(36,-72,974,833),38017=>array(35,-65,984,834),38018=>array(31,-71,970,832),38019=>array(49,-76,937,831),38020=>array(43,-65,961,846),38021=>array(249,-26,702,820),38022=>array(34,-37,943,826),38023=>array(39,-28,938,830),38024=>array(39,-69,933,830),38025=>array(39,-53,939,830),38026=>array(60,-64,890,828),38027=>array(39,-67,957,830),38028=>array(36,-65,926,822),38029=>array(39,-17,944,830),38030=>array(39,-75,942,830),38031=>array(35,-64,896,832),38032=>array(50,-64,931,827),38033=>array(39,-66,965,830),38034=>array(39,-74,942,830),38035=>array(39,-63,904,838),38036=>array(37,-59,902,830),38037=>array(39,-70,933,830),38038=>array(37,-66,926,830),38039=>array(35,-67,960,830),38040=>array(38,-63,948,830),38041=>array(28,-67,926,820),38042=>array(33,-72,952,828),38043=>array(39,-69,956,830),38044=>array(39,-30,937,830),38045=>array(39,-46,955,830),38046=>array(39,-51,958,830),38047=>array(39,-66,906,830),38048=>array(36,-60,914,830),38049=>array(39,-60,943,830),38050=>array(37,-58,913,830),38051=>array(39,-72,965,830),38052=>array(39,-72,960,837),38053=>array(39,-67,873,830),38054=>array(39,-69,963,836),38055=>array(39,-60,907,832),38056=>array(39,-52,918,839),38057=>array(39,-61,903,830),38058=>array(39,-68,963,845),38059=>array(39,-69,943,834),38060=>array(39,-69,966,830),38061=>array(39,-69,933,830),38062=>array(39,-28,935,826),38063=>array(39,-34,958,830),38064=>array(33,-28,934,830),38065=>array(38,-70,962,830),38066=>array(20,-22,950,823),38067=>array(39,-66,941,830),38068=>array(39,-67,940,831),38069=>array(25,-56,968,837),38070=>array(39,-59,946,830),38071=>array(39,-36,938,830),38072=>array(38,-70,927,833),38073=>array(39,-71,948,841),38074=>array(43,-64,949,826),38075=>array(39,-66,931,830),38076=>array(54,-70,894,826),38077=>array(41,-14,929,826),38078=>array(44,-69,897,826),38079=>array(29,-45,894,826),38080=>array(42,-73,888,821),38081=>array(36,-70,954,832),38082=>array(39,-71,903,843),38083=>array(37,-79,955,847),38084=>array(32,-60,955,832),38085=>array(43,-69,930,826),38086=>array(42,-70,915,834),38087=>array(43,-45,964,834),38088=>array(38,-66,937,841),38089=>array(24,-65,937,839),38090=>array(39,-33,940,846),38091=>array(33,-76,950,830),38092=>array(40,-62,937,827),38093=>array(46,-70,955,837),38094=>array(35,-60,955,826),38095=>array(30,-53,914,835),38096=>array(37,-66,949,829),38097=>array(39,-34,941,828),38098=>array(29,-66,937,826),38099=>array(39,-33,954,828),38100=>array(39,-45,957,826),38101=>array(37,-67,937,835),38102=>array(42,-72,945,827),38103=>array(31,-64,927,829),38104=>array(33,-72,935,818),38105=>array(36,-70,933,831),38106=>array(31,-18,947,829),38107=>array(55,-54,894,822),38108=>array(28,-72,917,823),38109=>array(49,-71,900,817),38110=>array(39,-68,908,816),38111=>array(45,-53,905,827),38112=>array(32,-19,948,824),38113=>array(50,-67,916,830),38114=>array(38,-66,950,837),38115=>array(40,-73,938,830),38116=>array(19,-71,951,833),38117=>array(49,-52,939,827),38118=>array(38,-64,958,834),38119=>array(9,-66,927,828),38120=>array(20,-27,936,816),38121=>array(20,-57,948,825),38122=>array(38,-69,958,845),38123=>array(19,-68,948,833),38124=>array(39,-69,945,821),38125=>array(44,-72,885,840),38126=>array(17,-62,919,825),38127=>array(48,-35,954,834),38128=>array(29,-65,952,835),38129=>array(27,-73,953,840),38130=>array(34,-68,938,847),38131=>array(19,-66,942,844),38132=>array(23,-61,891,822),38133=>array(33,-65,934,844),38134=>array(47,-60,971,825),38135=>array(28,-65,911,835),38136=>array(32,-64,923,832),38137=>array(12,-57,923,822),38138=>array(40,-62,934,832),38139=>array(27,-48,947,821),38140=>array(39,-61,970,823),38141=>array(19,-63,951,833),38142=>array(32,-56,943,825),38143=>array(31,-21,930,819),38144=>array(39,-69,923,831),38145=>array(37,-70,955,830),38146=>array(32,-27,952,833),38147=>array(39,-28,942,830),38148=>array(45,-76,916,833),38149=>array(34,-60,903,839),38150=>array(39,-67,941,827),38151=>array(37,-66,948,833),38152=>array(36,-68,963,827),38153=>array(22,-22,965,832),38154=>array(44,-71,944,819),38155=>array(29,-63,952,839),38156=>array(39,-73,943,831),38157=>array(40,-73,957,832),38158=>array(52,-61,896,830),38159=>array(45,-62,895,828),38160=>array(39,-74,942,835),38161=>array(61,-69,908,836),38162=>array(27,-66,961,843),38163=>array(19,-68,963,833),38164=>array(27,-70,914,833),38165=>array(30,-69,949,832),38166=>array(43,-72,950,828),38167=>array(35,-66,933,832),38168=>array(31,-69,943,837),38169=>array(50,-66,939,829),38170=>array(39,-69,939,827),38171=>array(24,-66,976,843),38172=>array(39,-63,970,839),38173=>array(30,-76,940,827),38174=>array(33,-67,967,833),38175=>array(40,-49,953,827),38176=>array(39,-63,909,826),38177=>array(28,-68,917,815),38178=>array(36,-73,900,827),38179=>array(43,-60,908,834),38180=>array(29,-30,932,833),38181=>array(35,-70,937,834),38182=>array(47,-68,904,846),38183=>array(29,-68,921,833),38184=>array(30,-71,961,824),38185=>array(42,-43,962,833),38186=>array(32,-28,953,822),38187=>array(38,-77,942,834),38188=>array(39,-62,952,842),38189=>array(42,-76,952,839),38190=>array(44,-67,955,826),38191=>array(43,-73,928,827),38192=>array(35,-36,939,821),38193=>array(34,-67,918,842),38194=>array(30,-64,959,832),38195=>array(29,-64,974,836),38196=>array(32,-64,959,837),38197=>array(40,-61,936,827),38198=>array(33,-34,957,827),38199=>array(30,-56,948,827),38200=>array(36,-66,943,841),38201=>array(38,-71,957,833),38202=>array(34,-30,959,838),38203=>array(37,-78,959,823),38204=>array(33,-71,966,832),38205=>array(43,-37,950,834),38206=>array(38,-68,964,842),38207=>array(31,-72,968,844),38208=>array(39,-82,957,846),38209=>array(39,-69,977,829),38210=>array(31,-67,953,824),38211=>array(29,-63,961,837),38212=>array(37,-70,932,826),38213=>array(39,-76,903,827),38214=>array(28,-80,957,810),38215=>array(21,-66,951,838),38216=>array(29,-53,951,843),38217=>array(19,-68,937,833),38218=>array(40,-69,946,828),38219=>array(29,-63,970,835),38220=>array(32,-73,945,833),38221=>array(37,-69,949,843),38222=>array(31,-75,968,842),38223=>array(35,-69,917,833),38224=>array(37,-72,919,848),38225=>array(37,-73,927,848),38226=>array(30,-27,951,832),38227=>array(22,-58,950,840),38228=>array(43,-60,941,826),38229=>array(29,-72,977,841),38230=>array(33,-66,956,833),38231=>array(36,-25,949,833),38232=>array(30,-62,973,833),38233=>array(42,-71,946,827),38234=>array(33,-74,919,833),38235=>array(33,-63,949,851),38236=>array(40,-70,958,836),38237=>array(31,-66,946,844),38238=>array(24,-68,965,839),38239=>array(31,-60,971,846),38240=>array(31,-61,973,831),38241=>array(34,-73,941,821),38242=>array(31,-77,970,830),38243=>array(35,-68,956,842),38244=>array(23,-65,961,833),38245=>array(43,-65,941,835),38246=>array(24,-72,959,836),38247=>array(31,-62,894,825),38248=>array(30,-66,943,843),38249=>array(50,-70,952,837),38250=>array(24,-58,958,822),38251=>array(43,-29,966,832),38252=>array(37,-66,968,832),38253=>array(51,-73,918,827),38254=>array(29,-76,974,833),38255=>array(29,-60,914,833),38256=>array(19,-80,953,844),38257=>array(24,-37,950,842),38258=>array(26,-74,959,842),38259=>array(27,-69,952,850),38260=>array(29,-62,964,842),38261=>array(29,-68,965,842),38262=>array(25,-80,971,843),38263=>array(69,-69,942,800),38264=>array(89,-16,892,784),38265=>array(57,-67,965,850),38266=>array(57,-72,962,831),38267=>array(58,-73,976,821),38268=>array(63,-73,921,785),38269=>array(60,-68,975,827),38270=>array(44,-65,986,786),38271=>array(60,-54,957,823),38272=>array(112,-71,871,782),38273=>array(132,-64,882,789),38274=>array(116,-67,890,788),38275=>array(125,-64,875,789),38276=>array(113,-73,936,803),38277=>array(125,-64,874,789),38278=>array(125,-70,888,782),38279=>array(132,-64,883,791),38280=>array(136,-75,895,783),38281=>array(109,-68,891,785),38282=>array(110,-74,891,779),38283=>array(110,-51,890,806),38284=>array(104,-61,909,792),38285=>array(109,-62,910,790),38286=>array(106,-53,883,797),38287=>array(109,-63,890,796),38288=>array(101,-70,903,782),38289=>array(129,-63,886,797),38290=>array(126,-55,899,801),38291=>array(125,-66,892,784),38292=>array(125,-65,902,790),38293=>array(125,-64,875,789),38294=>array(132,-64,882,789),38295=>array(108,-59,892,799),38296=>array(127,-60,883,796),38297=>array(132,-64,882,789),38298=>array(125,-64,875,789),38299=>array(128,-64,889,787),38300=>array(118,-69,898,782),38301=>array(109,-64,891,788),38302=>array(121,-68,900,783),38303=>array(112,-61,900,790),38304=>array(132,-64,882,789),38305=>array(109,-67,894,790),38306=>array(132,-64,882,789),38307=>array(113,-58,887,798),38308=>array(112,-62,888,789),38309=>array(125,-61,885,794),38310=>array(125,-64,875,789),38311=>array(110,-68,900,786),38312=>array(119,-71,894,791),38313=>array(112,-67,900,789),38314=>array(106,-68,896,786),38315=>array(113,-64,894,788),38316=>array(110,-64,890,788),38317=>array(117,-65,907,790),38318=>array(101,-59,899,791),38319=>array(125,-64,875,789),38320=>array(121,-61,895,787),38321=>array(112,-63,888,801),38322=>array(112,-54,888,802),38323=>array(125,-64,875,789),38324=>array(109,-64,891,788),38325=>array(113,-68,910,783),38326=>array(123,-70,912,789),38327=>array(32,-70,928,829),38328=>array(125,-64,875,789),38329=>array(106,-67,894,788),38330=>array(112,-70,916,796),38331=>array(120,-64,894,793),38332=>array(108,-65,894,797),38333=>array(110,-65,901,789),38334=>array(116,-64,906,790),38335=>array(124,-68,912,782),38336=>array(107,-69,893,810),38337=>array(125,-64,875,789),38338=>array(125,-64,875,789),38339=>array(130,-68,906,783),38340=>array(125,-64,875,799),38341=>array(110,-63,888,812),38342=>array(106,-59,890,796),38343=>array(108,-59,892,803),38344=>array(114,-65,909,790),38345=>array(101,-52,894,797),38346=>array(107,-67,897,783),38347=>array(113,-67,898,792),38348=>array(117,-68,904,788),38349=>array(123,-69,913,784),38350=>array(125,-64,875,789),38351=>array(125,-64,875,789),38352=>array(124,-69,914,789),38353=>array(110,-64,911,794),38354=>array(98,-52,895,805),38355=>array(128,-69,908,782),38356=>array(123,-71,910,785),38357=>array(115,-66,907,791),38358=>array(120,-56,895,794),38359=>array(100,-61,900,800),38360=>array(132,-64,882,789),38361=>array(119,-64,881,789),38362=>array(101,-56,893,794),38363=>array(114,-65,897,788),38364=>array(104,-70,904,792),38365=>array(102,-68,898,784),38366=>array(121,-68,916,783),38367=>array(116,-67,893,784),38368=>array(119,-69,917,790),38369=>array(114,-61,902,793),38370=>array(97,-70,902,785),38371=>array(116,-67,892,787),38372=>array(118,-68,915,789),38373=>array(116,-73,908,785),38374=>array(125,-64,875,789),38375=>array(125,-64,875,797),38376=>array(116,-57,874,823),38377=>array(115,-67,853,801),38378=>array(120,-57,879,821),38379=>array(100,-67,867,826),38380=>array(116,-57,874,823),38381=>array(106,-56,860,820),38382=>array(112,-64,864,802),38383=>array(98,-57,869,832),38384=>array(123,-59,883,815),38385=>array(109,-67,862,822),38386=>array(108,-65,873,818),38387=>array(104,-68,864,826),38388=>array(100,-60,859,820),38389=>array(107,-66,864,816),38390=>array(110,-69,865,826),38391=>array(121,-63,874,826),38392=>array(105,-63,872,823),38393=>array(109,-60,875,821),38394=>array(96,-61,870,819),38395=>array(111,-63,873,824),38396=>array(96,-64,867,823),38397=>array(119,-65,874,817),38398=>array(109,-61,867,828),38399=>array(109,-61,867,828),38400=>array(116,-59,889,824),38401=>array(104,-61,880,810),38402=>array(95,-60,866,830),38403=>array(100,-62,873,829),38404=>array(108,-63,862,817),38405=>array(100,-64,877,821),38406=>array(121,-64,879,823),38407=>array(111,-64,889,821),38408=>array(98,-69,871,818),38409=>array(99,-66,873,811),38410=>array(106,-70,872,822),38411=>array(109,-71,865,817),38412=>array(100,-67,868,826),38413=>array(103,-67,865,821),38414=>array(101,-63,873,815),38415=>array(109,-69,862,813),38416=>array(104,-59,858,830),38417=>array(106,-55,865,822),38418=>array(108,-64,874,828),38419=>array(108,-64,874,828),38420=>array(98,-56,876,831),38421=>array(91,-69,871,822),38422=>array(93,-66,870,821),38423=>array(103,-64,872,834),38424=>array(93,-66,870,821),38425=>array(97,-67,875,826),38426=>array(93,-64,868,830),38427=>array(112,-64,888,830),38428=>array(49,-69,942,854),38429=>array(358,-68,720,782),38430=>array(115,-69,926,824),38431=>array(101,-63,942,830),38432=>array(102,-63,960,789),38433=>array(104,-68,935,824),38434=>array(134,-63,964,791),38435=>array(109,-62,949,834),38436=>array(112,-61,969,832),38437=>array(112,-63,970,795),38438=>array(112,-69,959,820),38439=>array(112,-64,955,829),38440=>array(119,-68,959,793),38441=>array(119,-65,939,831),38442=>array(104,-67,964,795),38443=>array(86,-70,959,783),38444=>array(107,-52,959,858),38445=>array(109,-69,952,840),38446=>array(98,-68,935,788),38447=>array(119,-61,954,835),38448=>array(111,-58,960,829),38449=>array(121,-64,952,829),38450=>array(103,-77,953,827),38451=>array(99,-64,875,784),38452=>array(110,-69,883,788),38453=>array(80,-59,951,835),38454=>array(96,-63,946,837),38455=>array(96,-58,950,800),38456=>array(96,-68,963,837),38457=>array(110,-70,960,824),38458=>array(115,-69,965,832),38459=>array(97,-73,949,782),38460=>array(140,-63,964,845),38461=>array(135,-64,953,829),38462=>array(136,-77,975,850),38463=>array(93,-75,927,778),38464=>array(102,-71,946,824),38465=>array(102,-71,954,839),38466=>array(99,-68,948,836),38467=>array(116,-71,955,780),38468=>array(110,-79,945,842),38469=>array(89,-61,945,786),38470=>array(100,-50,924,838),38471=>array(98,-63,932,826),38472=>array(88,-63,930,826),38473=>array(96,-64,921,786),38474=>array(124,-73,942,834),38475=>array(99,-82,936,792),38476=>array(104,-69,941,785),38477=>array(101,-68,955,846),38478=>array(116,-70,966,823),38479=>array(111,-63,927,825),38480=>array(114,-61,945,795),38481=>array(110,-64,929,786),38482=>array(108,-77,956,845),38483=>array(103,-68,955,829),38484=>array(109,-63,960,849),38485=>array(100,-73,950,821),38486=>array(109,-69,972,843),38487=>array(109,-68,918,833),38488=>array(116,-69,958,783),38489=>array(81,-65,958,786),38490=>array(104,-69,962,833),38491=>array(95,-61,964,827),38492=>array(108,-74,958,829),38493=>array(89,-65,951,836),38494=>array(113,-62,959,838),38495=>array(123,-64,953,829),38496=>array(81,-67,951,839),38497=>array(116,-66,966,836),38498=>array(100,-70,959,831),38499=>array(102,-67,950,835),38500=>array(111,-65,956,853),38501=>array(108,-65,909,851),38502=>array(99,-66,952,831),38503=>array(99,-67,922,783),38504=>array(99,-67,929,783),38505=>array(100,-67,944,827),38506=>array(97,-67,939,835),38507=>array(115,-70,953,826),38508=>array(74,-75,963,795),38509=>array(116,-69,953,832),38510=>array(100,-69,954,835),38511=>array(110,-68,965,828),38512=>array(110,-68,964,843),38513=>array(104,-68,909,832),38514=>array(78,-70,935,810),38515=>array(104,-79,950,827),38516=>array(128,-69,974,845),38517=>array(95,-67,970,831),38518=>array(116,-62,917,837),38519=>array(119,-64,896,839),38520=>array(103,-58,951,833),38521=>array(113,-71,948,838),38522=>array(97,-66,958,846),38523=>array(119,-64,939,791),38524=>array(128,-71,967,830),38525=>array(89,-71,934,779),38526=>array(103,-77,967,783),38527=>array(93,-54,958,797),38528=>array(110,-58,956,828),38529=>array(99,-56,954,798),38530=>array(110,-68,964,851),38531=>array(103,-52,969,863),38532=>array(107,-61,972,791),38533=>array(99,-55,902,800),38534=>array(93,-60,959,848),38535=>array(97,-67,961,829),38536=>array(90,-60,964,800),38537=>array(114,-64,959,819),38538=>array(101,-71,950,837),38539=>array(92,-68,927,845),38540=>array(92,-68,943,844),38541=>array(92,-74,932,844),38542=>array(100,-60,958,832),38543=>array(99,-64,942,825),38544=>array(113,-62,952,828),38545=>array(116,-67,957,829),38546=>array(118,-68,963,843),38547=>array(118,-65,957,836),38548=>array(96,-56,932,801),38549=>array(92,-70,941,784),38550=>array(102,-70,928,839),38551=>array(97,-71,956,819),38552=>array(86,-64,957,804),38553=>array(109,-67,960,819),38554=>array(93,-69,954,835),38555=>array(93,-68,950,841),38556=>array(95,-65,941,830),38557=>array(93,-74,916,843),38558=>array(109,-72,983,832),38559=>array(83,-73,970,842),38560=>array(113,-62,965,838),38561=>array(113,-78,965,831),38562=>array(111,-65,973,823),38563=>array(100,-70,957,833),38564=>array(110,-66,960,836),38565=>array(110,-64,963,837),38566=>array(96,-68,937,845),38567=>array(85,-68,963,809),38568=>array(106,-68,967,838),38569=>array(98,-74,970,839),38570=>array(106,-66,962,855),38571=>array(106,-73,954,832),38572=>array(111,-68,947,781),38573=>array(106,-62,953,794),38574=>array(92,-57,952,864),38575=>array(101,-65,938,833),38576=>array(100,-75,934,786),38577=>array(112,-59,953,832),38578=>array(93,-69,920,826),38579=>array(38,-69,984,839),38580=>array(77,-66,936,830),38581=>array(85,-68,955,835),38582=>array(65,-57,958,833),38583=>array(47,-71,963,830),38584=>array(47,-71,963,828),38585=>array(31,-69,954,845),38586=>array(36,-69,937,847),38587=>array(32,-76,968,844),38588=>array(53,-69,947,840),38589=>array(34,-65,897,837),38590=>array(40,-61,932,824),38591=>array(53,-70,953,826),38592=>array(46,-73,948,833),38593=>array(39,-66,939,803),38594=>array(38,-68,951,831),38595=>array(49,-68,953,830),38596=>array(36,-68,953,827),38597=>array(48,-59,953,837),38598=>array(55,-67,962,831),38599=>array(31,-75,924,818),38600=>array(36,-67,952,834),38601=>array(55,-63,957,836),38602=>array(40,-67,956,842),38603=>array(40,-61,932,843),38604=>array(34,-71,956,833),38605=>array(49,-72,948,824),38606=>array(42,-59,956,837),38607=>array(40,-49,916,830),38608=>array(40,-78,928,833),38609=>array(39,-63,953,833),38610=>array(30,-70,949,841),38611=>array(28,-65,954,839),38612=>array(38,-70,955,827),38613=>array(31,-71,952,836),38614=>array(59,-65,954,828),38615=>array(53,-63,950,839),38616=>array(36,-71,975,826),38617=>array(42,-70,958,843),38618=>array(37,-62,946,833),38619=>array(43,-68,954,847),38620=>array(45,-61,955,833),38621=>array(53,-65,954,839),38622=>array(38,-68,956,842),38623=>array(46,-65,939,839),38624=>array(14,-59,925,822),38625=>array(44,-71,952,824),38626=>array(64,-73,957,834),38627=>array(43,-70,950,834),38628=>array(53,-82,914,809),38629=>array(32,-67,970,839),38630=>array(14,-59,965,822),38631=>array(20,-41,956,837),38632=>array(82,-65,943,778),38633=>array(60,-60,955,790),38634=>array(96,-69,888,800),38635=>array(75,-58,929,797),38636=>array(41,-63,948,784),38637=>array(69,-48,965,802),38638=>array(54,-34,964,796),38639=>array(59,-63,963,790),38640=>array(46,-62,971,822),38641=>array(46,-62,941,798),38642=>array(76,-71,930,805),38643=>array(30,-68,916,772),38644=>array(48,-16,941,781),38645=>array(45,-76,982,785),38646=>array(43,-63,961,810),38647=>array(105,-67,914,786),38648=>array(73,-67,938,785),38649=>array(41,-37,956,790),38650=>array(47,-64,926,787),38651=>array(85,-32,945,802),38652=>array(60,-67,936,781),38653=>array(66,-64,941,783),38654=>array(41,-68,941,782),38655=>array(55,-68,975,785),38656=>array(79,-70,930,787),38657=>array(32,-70,948,777),38658=>array(45,-62,981,792),38659=>array(68,-72,935,796),38660=>array(74,-52,916,800),38661=>array(78,-68,953,782),38662=>array(29,-72,947,811),38663=>array(35,-71,965,808),38664=>array(47,-64,951,791),38665=>array(70,-65,947,790),38666=>array(75,-28,930,778),38667=>array(73,-79,947,789),38668=>array(39,-59,899,787),38669=>array(56,-67,935,790),38670=>array(77,-67,943,790),38671=>array(61,-64,924,787),38672=>array(57,-67,974,787),38673=>array(67,-62,942,798),38674=>array(56,-67,970,827),38675=>array(39,-67,956,789),38676=>array(67,-54,939,798),38677=>array(55,-35,962,829),38678=>array(40,-67,968,789),38679=>array(81,-82,965,798),38680=>array(54,-67,913,788),38681=>array(34,-72,986,792),38682=>array(113,-53,949,791),38683=>array(68,-70,938,791),38684=>array(65,-68,909,785),38685=>array(96,-74,911,783),38686=>array(92,-59,967,813),38687=>array(46,-71,956,783),38688=>array(64,-72,968,783),38689=>array(43,-73,981,789),38690=>array(43,-72,969,824),38691=>array(58,-75,952,799),38692=>array(89,-55,902,802),38693=>array(54,-59,965,799),38694=>array(48,-67,967,787),38695=>array(51,-71,962,823),38696=>array(52,-60,939,800),38697=>array(90,-69,927,787),38698=>array(41,-64,924,797),38699=>array(82,-69,919,785),38700=>array(59,-69,941,783),38701=>array(52,-66,891,778),38702=>array(58,-49,955,780),38703=>array(51,-31,979,779),38704=>array(56,-65,964,796),38705=>array(60,-66,927,832),38706=>array(70,-62,965,817),38707=>array(88,-56,938,787),38708=>array(53,-16,975,829),38709=>array(63,-68,957,785),38710=>array(53,-53,959,785),38711=>array(83,-67,936,783),38712=>array(68,-70,900,815),38713=>array(31,-72,946,792),38714=>array(44,-63,964,819),38715=>array(57,-54,951,807),38716=>array(55,-64,971,846),38717=>array(60,-69,962,801),38718=>array(54,-56,949,794),38719=>array(43,-62,992,823),38720=>array(77,-70,948,808),38721=>array(94,-73,928,800),38722=>array(48,-73,941,790),38723=>array(33,-65,967,787),38724=>array(72,-64,928,799),38725=>array(48,-47,970,836),38726=>array(53,-56,949,829),38727=>array(65,-67,961,786),38728=>array(74,-28,929,779),38729=>array(55,-66,978,836),38730=>array(79,-51,934,795),38731=>array(61,-68,957,792),38732=>array(70,-79,939,825),38733=>array(42,-60,971,763),38734=>array(95,-58,971,763),38735=>array(43,-60,971,823),38736=>array(24,-50,981,809),38737=>array(104,-65,915,837),38738=>array(104,-65,915,837),38739=>array(51,-67,927,821),38740=>array(51,-67,938,852),38741=>array(38,-66,948,836),38742=>array(41,-66,952,840),38743=>array(55,-72,959,831),38744=>array(68,-63,968,841),38745=>array(70,-58,938,835),38746=>array(55,-74,976,832),38747=>array(53,-65,968,845),38748=>array(55,-72,950,829),38749=>array(48,-63,968,848),38750=>array(49,-65,944,826),38751=>array(49,-44,959,820),38752=>array(44,-73,925,838),38753=>array(36,-73,970,837),38754=>array(69,-77,924,784),38755=>array(69,-77,924,784),38756=>array(49,-26,963,849),38757=>array(31,-68,955,800),38758=>array(48,-57,957,797),38759=>array(33,-68,990,833),38760=>array(59,-69,949,807),38761=>array(73,-69,927,829),38762=>array(60,-69,951,825),38763=>array(57,-65,960,830),38764=>array(57,-69,953,831),38765=>array(54,-70,915,830),38766=>array(71,-50,919,851),38767=>array(51,-50,949,840),38768=>array(62,-68,969,828),38769=>array(62,-72,971,828),38770=>array(60,-68,968,833),38771=>array(60,-69,952,832),38772=>array(44,-67,969,824),38773=>array(60,-66,951,832),38774=>array(60,-65,956,835),38775=>array(63,-53,896,843),38776=>array(62,-74,971,837),38777=>array(48,-71,928,838),38778=>array(62,-64,986,830),38779=>array(65,-72,966,822),38780=>array(53,-64,955,829),38781=>array(63,-50,956,844),38782=>array(53,-70,947,824),38783=>array(65,-53,924,847),38784=>array(66,-71,917,831),38785=>array(69,-72,967,831),38786=>array(53,-71,967,823),38787=>array(61,-70,963,824),38788=>array(55,-67,961,824),38789=>array(42,-67,961,835),38790=>array(43,-70,957,823),38791=>array(53,-70,925,823),38792=>array(66,-73,978,843),38793=>array(66,-72,960,827),38794=>array(60,-69,953,829),38795=>array(53,-64,950,836),38796=>array(82,-58,966,830),38797=>array(59,-65,951,836),38798=>array(60,-71,970,830),38799=>array(53,-72,944,805),38800=>array(66,-68,940,834),38801=>array(51,-68,937,820),38802=>array(51,-66,949,826),38803=>array(51,-68,956,820),38804=>array(61,-70,969,838),38805=>array(49,-68,971,836),38806=>array(59,-74,959,836),38807=>array(39,-67,968,839),38808=>array(52,-70,943,835),38809=>array(62,-52,916,842),38810=>array(55,-50,955,859),38811=>array(73,-67,954,848),38812=>array(63,-68,961,829),38813=>array(64,-70,936,825),38814=>array(63,-73,959,830),38815=>array(73,-64,960,847),38816=>array(63,-65,919,847),38817=>array(62,-62,953,836),38818=>array(51,-68,976,828),38819=>array(45,-65,965,837),38820=>array(60,-67,954,836),38821=>array(56,-69,977,840),38822=>array(56,-66,968,841),38823=>array(56,-65,947,843),38824=>array(68,-69,922,827),38825=>array(46,-66,914,837),38826=>array(43,-68,952,841),38827=>array(66,-68,918,843),38828=>array(55,-72,967,829),38829=>array(47,-70,962,832),38830=>array(63,-68,975,826),38831=>array(53,-72,913,817),38832=>array(63,-69,951,817),38833=>array(53,-69,926,848),38834=>array(47,-79,952,821),38835=>array(51,-50,968,847),38836=>array(52,-70,948,820),38837=>array(47,-79,995,841),38838=>array(55,-48,943,855),38839=>array(54,-79,946,821),38840=>array(46,-69,952,825),38841=>array(51,-55,948,854),38842=>array(55,-70,956,824),38843=>array(65,-67,961,824),38844=>array(65,-68,970,833),38845=>array(65,-67,964,841),38846=>array(47,-67,948,836),38847=>array(54,-68,960,834),38848=>array(69,-65,961,831),38849=>array(62,-68,956,829),38850=>array(39,-65,950,842),38851=>array(55,-73,949,835),38852=>array(60,-73,967,823),38853=>array(53,-71,960,828),38854=>array(51,-76,968,834),38855=>array(66,-73,960,832),38856=>array(65,-64,981,839),38857=>array(68,-65,961,829),38858=>array(68,-58,946,808),38859=>array(72,-64,931,840),38860=>array(73,-62,901,844),38861=>array(59,-70,981,843),38862=>array(54,-71,981,841),38863=>array(39,-68,968,852),38864=>array(58,-69,985,847),38865=>array(23,-68,968,825),38866=>array(51,-70,943,834),38867=>array(54,-66,946,837),38868=>array(53,-75,973,836),38869=>array(68,-68,954,841),38870=>array(66,-67,977,840),38871=>array(59,-69,954,846),38872=>array(53,-67,976,840),38873=>array(39,-73,975,837),38874=>array(60,-66,949,834),38875=>array(68,-76,988,834),38876=>array(62,-70,951,842),38877=>array(57,-73,956,832),38878=>array(57,-70,959,839),38879=>array(53,-67,972,845),38880=>array(46,-73,952,831),38881=>array(62,-73,958,830),38882=>array(54,-73,966,830),38883=>array(65,-65,927,840),38884=>array(65,-65,981,840),38885=>array(62,-73,957,842),38886=>array(62,-73,894,820),38887=>array(61,-64,901,826),38888=>array(49,-80,948,840),38889=>array(47,-57,915,830),38890=>array(28,-66,945,809),38891=>array(50,-68,951,822),38892=>array(59,-76,901,817),38893=>array(65,-13,935,816),38894=>array(53,-24,947,823),38895=>array(49,-60,964,829),38896=>array(51,-35,956,820),38897=>array(49,-60,964,836),38898=>array(35,-29,966,826),38899=>array(72,-68,928,840),38900=>array(68,-74,932,842),38901=>array(66,-59,916,828),38902=>array(72,-64,914,818),38903=>array(56,-64,921,834),38904=>array(62,-72,972,834),38905=>array(65,-49,959,846),38906=>array(51,-72,973,835),38907=>array(66,-73,957,840),38908=>array(44,-56,951,841),38909=>array(50,-70,952,849),38910=>array(35,-70,941,825),38911=>array(63,-67,937,845),38912=>array(58,-74,976,824),38913=>array(79,-70,938,785),38914=>array(76,-68,950,791),38915=>array(126,-69,939,787),38916=>array(40,-79,961,826),38917=>array(48,-68,947,784),38918=>array(62,-76,960,801),38919=>array(54,-71,962,790),38920=>array(51,-71,946,817),38921=>array(40,-71,946,783),38922=>array(55,-71,961,788),38923=>array(29,-72,957,790),38924=>array(47,-64,964,790),38925=>array(45,-78,965,824),38926=>array(35,-68,970,833),38927=>array(49,-64,963,798),38928=>array(53,-70,959,781),38929=>array(42,-77,953,788),38930=>array(47,-66,957,822),38931=>array(53,-68,952,834),38932=>array(124,-68,952,788),38933=>array(128,-68,952,829),38934=>array(40,-60,966,844),38935=>array(32,-70,970,832),38936=>array(42,-68,955,839),38937=>array(38,-71,957,783),38938=>array(48,-64,966,792),38939=>array(42,-73,972,823),38940=>array(35,-70,962,831),38941=>array(53,-75,957,833),38942=>array(59,-53,968,856),38943=>array(37,-64,943,819),38944=>array(32,-68,967,836),38945=>array(62,-68,966,809),38946=>array(39,-68,956,801),38947=>array(95,-70,947,787),38948=>array(91,-70,963,787),38949=>array(96,-66,962,795),38950=>array(44,-65,961,844),38951=>array(107,-76,968,828),38952=>array(29,-79,971,782),38953=>array(44,-73,963,832),38954=>array(38,-68,961,832),38955=>array(36,-69,957,823),38956=>array(24,-61,959,830),38957=>array(52,-61,959,787),38958=>array(32,-78,975,802),38959=>array(32,-78,975,829),38960=>array(47,-71,967,840),38961=>array(48,-78,965,819),38962=>array(44,-79,964,793),38963=>array(36,-77,970,823),38964=>array(18,-82,959,826),38965=>array(25,-77,970,783),38966=>array(30,-61,959,814),38967=>array(38,-69,972,838),38968=>array(48,-72,959,789),38969=>array(35,-72,973,834),38970=>array(49,-65,965,824),38971=>array(45,-71,960,833),38972=>array(44,-72,973,829),38973=>array(35,-73,954,834),38974=>array(37,-68,948,826),38975=>array(33,-76,955,849),38976=>array(32,-73,951,836),38977=>array(38,-83,963,833),38978=>array(29,-73,964,833),38979=>array(52,-74,959,826),38980=>array(77,-71,962,788),38981=>array(42,-74,956,833),38982=>array(43,-68,964,788),38983=>array(34,-68,963,833),38984=>array(38,-82,959,826),38985=>array(44,-79,965,829),38986=>array(60,-78,953,840),38987=>array(35,-68,963,790),38988=>array(39,-60,956,787),38989=>array(41,-64,951,825),38990=>array(57,-63,959,794),38991=>array(57,-75,958,808),38992=>array(62,-81,971,783),38993=>array(38,-67,975,839),38994=>array(50,-73,964,788),38995=>array(53,-68,963,827),38996=>array(33,-65,961,830),38997=>array(45,-70,956,783),38998=>array(21,-77,967,831),38999=>array(47,-75,968,827),39000=>array(38,-57,962,796),39001=>array(45,-67,979,787),39002=>array(57,-78,964,834),39003=>array(43,-73,960,835),39004=>array(56,-72,970,829),39005=>array(69,-74,951,786),39006=>array(38,-67,960,828),39007=>array(40,-80,955,788),39008=>array(31,-73,960,784),39009=>array(39,-72,959,846),39010=>array(62,-65,973,830),39011=>array(33,-60,963,844),39012=>array(47,-48,963,850),39013=>array(46,-66,966,790),39014=>array(26,-48,963,840),39015=>array(41,-68,959,820),39016=>array(49,-70,959,808),39017=>array(36,-74,964,834),39018=>array(47,-68,978,831),39019=>array(56,-65,967,837),39020=>array(61,-67,952,788),39021=>array(47,-67,952,822),39022=>array(44,-64,965,844),39023=>array(43,-73,964,787),39024=>array(51,-64,958,843),39025=>array(28,-72,959,840),39026=>array(47,-66,964,847),39027=>array(35,-68,959,800),39028=>array(25,-62,961,844),39029=>array(78,-80,908,775),39030=>array(47,-60,930,783),39031=>array(88,-60,934,794),39032=>array(50,-66,937,774),39033=>array(37,-64,937,778),39034=>array(25,-61,940,822),39035=>array(30,-62,937,807),39036=>array(32,-68,933,772),39037=>array(31,-70,936,787),39038=>array(36,-61,953,787),39039=>array(59,-64,955,832),39040=>array(27,-68,935,814),39041=>array(35,-65,930,783),39042=>array(36,-65,936,783),39043=>array(27,-76,921,822),39044=>array(50,-65,936,779),39045=>array(36,-67,940,832),39046=>array(36,-60,940,830),39047=>array(18,-77,940,822),39048=>array(35,-59,943,783),39049=>array(55,-76,918,812),39050=>array(24,-61,933,830),39051=>array(33,-76,964,799),39052=>array(19,-69,915,830),39053=>array(21,-63,921,806),39054=>array(26,-70,942,827),39055=>array(32,-69,931,826),39056=>array(104,-70,929,778),39057=>array(51,-67,957,824),39058=>array(32,-71,950,802),39059=>array(47,-69,952,814),39060=>array(23,-76,933,822),39061=>array(18,-71,950,826),39062=>array(27,-70,942,827),39063=>array(22,-63,934,790),39064=>array(32,-63,941,788),39065=>array(117,-67,962,788),39066=>array(50,-73,937,778),39067=>array(52,-71,935,812),39068=>array(30,-68,940,832),39069=>array(31,-63,941,838),39070=>array(31,-70,921,784),39071=>array(50,-65,940,820),39072=>array(31,-70,940,827),39073=>array(29,-80,938,778),39074=>array(28,-72,937,782),39075=>array(32,-72,947,800),39076=>array(34,-81,964,861),39077=>array(61,-54,941,781),39078=>array(49,-62,927,832),39079=>array(22,-73,939,821),39080=>array(51,-68,967,783),39081=>array(43,-73,972,824),39082=>array(30,-73,965,797),39083=>array(24,-68,967,792),39084=>array(34,-68,954,787),39085=>array(32,-57,964,844),39086=>array(53,-63,967,850),39087=>array(32,-65,968,789),39088=>array(22,-57,955,825),39089=>array(37,-65,970,814),39090=>array(38,-71,967,820),39091=>array(41,-58,958,830),39092=>array(18,-57,944,822),39093=>array(41,-58,958,800),39094=>array(39,-62,959,800),39095=>array(33,-68,960,842),39096=>array(53,-64,963,809),39097=>array(17,-62,963,840),39098=>array(26,-61,967,791),39099=>array(42,-67,972,839),39100=>array(35,-65,970,829),39101=>array(44,-70,978,833),39102=>array(39,-75,970,781),39103=>array(40,-54,964,796),39104=>array(43,-73,961,833),39105=>array(36,-67,982,786),39106=>array(43,-60,970,798),39107=>array(26,-61,967,791),39108=>array(42,-74,970,784),39109=>array(43,-59,956,799),39110=>array(43,-68,980,832),39111=>array(43,-73,961,832),39112=>array(35,-64,966,820),39113=>array(31,-70,965,829),39114=>array(23,-62,974,791),39115=>array(31,-73,973,781),39116=>array(41,-65,974,829),39117=>array(26,-73,988,802),39118=>array(26,-63,942,790),39119=>array(20,-62,939,785),39120=>array(20,-62,939,804),39121=>array(16,-64,934,822),39122=>array(29,-67,936,812),39123=>array(8,-66,927,783),39124=>array(8,-65,939,783),39125=>array(20,-62,939,816),39126=>array(50,-58,972,819),39127=>array(20,-62,939,821),39128=>array(31,-60,963,789),39129=>array(43,-77,960,821),39130=>array(20,-70,931,817),39131=>array(64,-64,963,787),39132=>array(34,-69,967,824),39133=>array(55,-59,937,808),39134=>array(76,-59,936,770),39135=>array(43,-67,957,847),39136=>array(257,-34,731,839),39137=>array(48,-63,958,848),39138=>array(33,-54,962,839),39139=>array(41,-56,967,839),39140=>array(41,-73,936,839),39141=>array(28,-39,965,853),39142=>array(41,-50,966,839),39143=>array(42,-63,978,848),39144=>array(34,-76,939,822),39145=>array(40,-66,957,843),39146=>array(42,-31,949,838),39147=>array(40,-66,969,843),39148=>array(49,-81,957,840),39149=>array(42,-66,943,843),39150=>array(46,-68,957,844),39151=>array(34,-69,964,839),39152=>array(34,-64,951,843),39153=>array(40,-63,958,848),39154=>array(34,-64,969,839),39155=>array(46,-46,964,851),39156=>array(34,-55,956,842),39157=>array(34,-65,948,844),39158=>array(38,-56,960,842),39159=>array(34,-34,964,839),39160=>array(52,-63,958,848),39161=>array(40,-69,903,843),39162=>array(39,-84,979,824),39163=>array(36,-66,971,850),39164=>array(34,-68,906,839),39165=>array(36,-47,965,839),39166=>array(34,-70,944,839),39167=>array(39,-68,922,839),39168=>array(36,-74,985,839),39169=>array(36,-64,965,857),39170=>array(36,-52,954,857),39171=>array(40,-66,961,843),39172=>array(36,-65,948,857),39173=>array(34,-77,961,842),39174=>array(36,-70,960,857),39175=>array(31,-70,907,844),39176=>array(41,-54,964,852),39177=>array(40,-66,921,843),39178=>array(39,-70,964,843),39179=>array(39,-72,976,840),39180=>array(44,-69,958,841),39181=>array(46,-84,950,766),39182=>array(37,-64,982,844),39183=>array(38,-71,966,842),39184=>array(26,-64,974,840),39185=>array(43,-64,948,840),39186=>array(40,-66,959,843),39187=>array(34,-59,964,839),39188=>array(40,-66,944,843),39189=>array(36,-61,984,848),39190=>array(48,-44,953,846),39191=>array(42,-54,960,850),39192=>array(40,-66,971,843),39193=>array(36,-67,961,857),39194=>array(27,-64,956,855),39195=>array(32,-53,964,848),39196=>array(35,-64,980,828),39197=>array(40,-66,947,843),39198=>array(40,-67,959,843),39199=>array(34,-63,981,848),39200=>array(40,-66,957,843),39201=>array(40,-68,912,843),39202=>array(36,-65,956,857),39203=>array(24,-39,977,857),39204=>array(40,-66,961,843),39205=>array(47,-77,982,829),39206=>array(36,-62,978,857),39207=>array(32,-64,968,850),39208=>array(34,-64,931,839),39209=>array(37,-71,972,839),39210=>array(41,-73,990,834),39211=>array(36,-69,956,836),39212=>array(33,-78,918,838),39213=>array(38,-47,958,824),39214=>array(34,-75,943,832),39215=>array(40,-67,989,834),39216=>array(40,-71,959,834),39217=>array(33,-49,964,859),39218=>array(28,-60,915,848),39219=>array(48,-59,959,830),39220=>array(36,-68,963,857),39221=>array(25,-65,978,845),39222=>array(34,-34,947,853),39223=>array(36,-30,969,857),39224=>array(32,-48,975,845),39225=>array(36,-64,954,857),39226=>array(36,-65,951,832),39227=>array(36,-66,960,854),39228=>array(34,-64,971,846),39229=>array(40,-66,960,843),39230=>array(39,-69,932,843),39231=>array(41,-65,971,840),39232=>array(29,-63,950,835),39233=>array(18,-15,966,846),39234=>array(40,-66,959,843),39235=>array(34,-69,972,844),39236=>array(36,-30,964,857),39237=>array(40,-66,957,843),39238=>array(38,-68,950,834),39239=>array(36,-41,956,816),39240=>array(38,-55,955,847),39241=>array(40,-66,948,843),39242=>array(36,-84,957,859),39243=>array(40,-75,954,843),39244=>array(38,-66,959,843),39245=>array(24,-65,962,846),39246=>array(20,-68,956,843),39247=>array(29,-76,982,835),39248=>array(40,-66,953,843),39249=>array(28,-70,968,841),39250=>array(40,-68,962,843),39251=>array(26,-69,983,835),39252=>array(10,-74,957,849),39253=>array(17,-72,972,832),39254=>array(30,-64,967,828),39255=>array(35,-69,955,841),39256=>array(30,-33,960,849),39257=>array(32,-74,970,837),39258=>array(45,-30,929,857),39259=>array(38,-68,971,834),39260=>array(29,-71,982,816),39261=>array(29,-67,950,851),39262=>array(36,-70,960,839),39263=>array(30,-63,982,849),39264=>array(42,-65,956,837),39265=>array(41,-74,964,839),39266=>array(31,-64,983,839),39267=>array(242,2,685,829),39268=>array(31,-43,953,840),39269=>array(32,-60,948,840),39270=>array(31,-26,943,840),39271=>array(30,-66,891,826),39272=>array(25,-38,920,829),39273=>array(20,-67,939,825),39274=>array(40,-13,927,829),39275=>array(41,-69,957,829),39276=>array(41,-70,926,836),39277=>array(48,-71,953,829),39278=>array(47,-68,949,836),39279=>array(43,-58,953,836),39280=>array(42,-73,946,842),39281=>array(37,-28,946,835),39282=>array(41,-68,895,836),39283=>array(45,-68,911,830),39284=>array(41,-57,940,839),39285=>array(33,-67,927,829),39286=>array(36,-73,964,821),39287=>array(41,-66,912,841),39288=>array(49,-60,956,844),39289=>array(32,-65,975,837),39290=>array(42,-65,950,835),39291=>array(41,-71,966,836),39292=>array(39,-72,946,841),39293=>array(41,-65,931,831),39294=>array(41,-36,953,829),39295=>array(44,-61,946,829),39296=>array(41,-65,959,840),39297=>array(41,-79,946,831),39298=>array(36,-61,972,848),39299=>array(32,-68,964,825),39300=>array(40,-60,955,825),39301=>array(42,-70,881,838),39302=>array(47,-67,913,844),39303=>array(26,-16,947,821),39304=>array(37,-64,949,828),39305=>array(38,-71,943,829),39306=>array(41,-68,954,829),39307=>array(34,-68,960,827),39308=>array(48,-53,947,833),39309=>array(35,-71,935,817),39310=>array(43,-65,962,835),39311=>array(44,-67,916,838),39312=>array(27,-67,937,836),39313=>array(31,-43,938,813),39314=>array(27,-65,951,829),39315=>array(26,-90,955,822),39316=>array(29,-64,942,828),39317=>array(30,-81,948,821),39318=>array(95,-67,926,843),39319=>array(34,-64,959,831),39320=>array(55,-65,964,834),39321=>array(40,-65,955,817),39322=>array(40,-62,973,823),39323=>array(40,-74,966,841),39324=>array(40,-71,971,821),39325=>array(33,-77,965,828),39326=>array(44,-68,963,830),39327=>array(59,-68,958,827),39328=>array(70,-70,971,832),39329=>array(52,-69,956,824),39330=>array(34,-68,956,832),39331=>array(37,-62,975,833),39332=>array(48,-62,940,839),39333=>array(18,-62,974,838),39334=>array(33,-68,988,835),39335=>array(33,-61,983,839),39336=>array(28,-69,972,844),39337=>array(28,-67,956,839),39338=>array(33,-78,974,844),39339=>array(45,-70,975,816),39340=>array(56,-65,909,776),39341=>array(35,-68,964,790),39342=>array(52,-64,912,784),39343=>array(45,-73,950,781),39344=>array(56,-62,920,829),39345=>array(49,-63,964,833),39346=>array(36,-63,949,809),39347=>array(47,-62,951,836),39348=>array(53,-57,893,829),39349=>array(53,-69,947,782),39350=>array(30,-67,965,835),39351=>array(45,-62,954,840),39352=>array(45,-53,930,812),39353=>array(45,-52,891,803),39354=>array(32,-74,981,780),39355=>array(35,-71,978,825),39356=>array(40,-65,964,793),39357=>array(46,-68,909,783),39358=>array(25,-66,969,831),39359=>array(38,-57,931,827),39360=>array(45,-55,970,831),39361=>array(47,-66,967,826),39362=>array(55,-74,924,812),39363=>array(53,-69,982,826),39364=>array(45,-69,961,833),39365=>array(45,-66,973,797),39366=>array(27,-52,948,799),39367=>array(47,-76,988,832),39368=>array(28,-48,954,814),39369=>array(39,-66,905,785),39370=>array(45,-63,1002,841),39371=>array(45,-71,921,785),39372=>array(47,-68,965,833),39373=>array(42,-70,954,783),39374=>array(38,-68,906,823),39375=>array(40,-69,954,782),39376=>array(49,-57,956,829),39377=>array(48,-68,937,847),39378=>array(36,-62,919,845),39379=>array(39,-63,971,783),39380=>array(43,-63,957,790),39381=>array(56,-65,897,836),39382=>array(43,-73,981,842),39383=>array(47,-74,987,833),39384=>array(45,-60,964,839),39385=>array(28,-64,962,837),39386=>array(34,-66,972,827),39387=>array(37,-62,961,833),39388=>array(46,-66,974,830),39389=>array(55,-61,943,795),39390=>array(28,-55,962,829),39391=>array(43,-58,916,788),39392=>array(35,-71,938,823),39393=>array(39,-66,911,789),39394=>array(27,-73,962,835),39395=>array(42,-70,966,826),39396=>array(37,-72,959,780),39397=>array(39,-71,969,832),39398=>array(49,-62,957,830),39399=>array(46,-68,918,786),39400=>array(45,-60,944,836),39401=>array(35,-66,975,787),39402=>array(34,-71,964,826),39403=>array(45,-66,990,831),39404=>array(35,-71,957,786),39405=>array(46,-60,949,804),39406=>array(40,-60,961,820),39407=>array(45,-65,966,836),39408=>array(54,-67,924,785),39409=>array(64,-62,972,839),39410=>array(45,-65,927,835),39411=>array(33,-66,968,834),39412=>array(46,-66,975,824),39413=>array(30,-57,965,799),39414=>array(43,-65,927,783),39415=>array(37,-66,985,828),39416=>array(35,-61,946,788),39417=>array(31,-67,967,825),39418=>array(43,-73,980,838),39419=>array(46,-59,959,792),39420=>array(29,-77,974,834),39421=>array(53,-65,927,788),39422=>array(44,-67,966,814),39423=>array(44,-69,967,849),39424=>array(42,-63,951,831),39425=>array(42,-63,949,836),39426=>array(52,-59,954,853),39427=>array(42,-58,973,861),39428=>array(39,-65,974,829),39429=>array(48,-66,957,836),39430=>array(53,-74,927,782),39431=>array(37,-65,991,832),39432=>array(42,-64,953,843),39433=>array(32,-63,979,786),39434=>array(64,-63,924,832),39435=>array(33,-65,981,829),39436=>array(42,-65,958,845),39437=>array(45,-65,982,790),39438=>array(44,-62,956,834),39439=>array(33,-71,970,831),39440=>array(42,-63,956,845),39441=>array(39,-58,952,844),39442=>array(49,-64,963,791),39443=>array(48,-63,973,837),39444=>array(46,-66,937,787),39445=>array(35,-69,956,785),39446=>array(60,-68,958,845),39447=>array(32,-58,969,833),39448=>array(27,-63,974,850),39449=>array(39,-66,933,807),39450=>array(39,-62,960,835),39451=>array(29,-73,968,780),39452=>array(41,-65,970,843),39453=>array(25,-68,977,828),39454=>array(40,-70,967,828),39455=>array(32,-63,937,862),39456=>array(48,-75,988,781),39457=>array(42,-66,957,842),39458=>array(30,-68,980,784),39459=>array(40,-57,960,849),39460=>array(44,-68,978,841),39461=>array(33,-67,984,788),39462=>array(42,-63,968,788),39463=>array(48,-48,917,809),39464=>array(42,-73,945,843),39465=>array(47,-68,979,838),39466=>array(48,-64,973,831),39467=>array(37,-61,976,837),39468=>array(41,-65,984,838),39469=>array(54,-71,939,830),39470=>array(46,-64,924,834),39471=>array(27,-65,939,843),39472=>array(40,-72,967,840),39473=>array(29,-63,972,840),39474=>array(56,-64,965,830),39475=>array(42,-63,944,788),39476=>array(35,-65,955,788),39477=>array(44,-74,967,783),39478=>array(58,-66,923,849),39479=>array(49,-64,970,791),39480=>array(51,-63,941,840),39481=>array(20,-63,966,812),39482=>array(55,-69,959,829),39483=>array(37,-63,968,834),39484=>array(31,-63,965,843),39485=>array(48,-64,922,787),39486=>array(30,-73,961,801),39487=>array(36,-75,959,832),39488=>array(57,-69,968,832),39489=>array(58,-68,956,847),39490=>array(40,-71,984,857),39491=>array(33,-63,949,792),39492=>array(28,-63,973,837),39493=>array(46,-66,951,794),39494=>array(50,-64,958,787),39495=>array(54,-66,946,830),39496=>array(52,-63,937,789),39497=>array(40,-55,955,831),39498=>array(29,-68,962,836),39499=>array(22,-62,989,846),39500=>array(31,-64,962,837),39501=>array(35,-65,967,837),39502=>array(23,-51,943,844),39503=>array(51,-72,963,789),39504=>array(45,-63,980,835),39505=>array(27,-71,956,797),39506=>array(48,-62,948,791),39507=>array(53,-69,924,831),39508=>array(42,-64,961,789),39509=>array(48,-56,979,833),39510=>array(35,-68,977,837),39511=>array(37,-70,962,846),39512=>array(41,-67,973,843),39513=>array(36,-60,964,852),39514=>array(52,-65,951,846),39515=>array(25,-62,945,788),39516=>array(54,-68,951,825),39517=>array(37,-77,962,844),39518=>array(36,-78,974,844),39519=>array(34,-61,964,791),39520=>array(41,-74,970,824),39521=>array(46,-53,964,839),39522=>array(38,-64,951,836),39523=>array(26,-63,972,845),39524=>array(50,-75,976,833),39525=>array(27,-70,955,834),39526=>array(49,-61,930,789),39527=>array(35,-62,937,832),39528=>array(45,-66,927,826),39529=>array(52,-60,959,829),39530=>array(26,-73,964,789),39531=>array(57,-62,938,803),39532=>array(83,-57,892,790),39533=>array(64,-70,945,789),39534=>array(69,-65,947,831),39535=>array(64,-58,876,826),39536=>array(72,-55,933,834),39537=>array(40,-54,926,786),39538=>array(68,-58,891,803),39539=>array(43,-69,951,844),39540=>array(41,-55,896,845),39541=>array(37,-60,936,784),39542=>array(58,-70,953,831),39543=>array(49,-57,897,778),39544=>array(51,-66,940,835),39545=>array(91,-60,914,844),39546=>array(34,-59,872,822),39547=>array(47,-57,942,842),39548=>array(72,-57,926,839),39549=>array(29,-62,944,826),39550=>array(44,-60,912,831),39551=>array(42,-73,959,772),39552=>array(47,-63,949,840),39553=>array(36,-62,941,824),39554=>array(84,-59,890,787),39555=>array(57,-58,924,785),39556=>array(33,-62,940,836),39557=>array(42,-71,941,823),39558=>array(66,-64,953,836),39559=>array(59,-63,933,848),39560=>array(47,-75,945,847),39561=>array(39,-67,936,820),39562=>array(41,-65,920,768),39563=>array(62,-60,950,834),39564=>array(33,-63,943,835),39565=>array(62,-59,954,853),39566=>array(33,-68,968,786),39567=>array(61,-69,943,833),39568=>array(47,-73,949,829),39569=>array(61,-64,939,828),39570=>array(47,-67,956,788),39571=>array(57,-65,941,834),39572=>array(47,-65,958,845),39573=>array(33,-73,957,833),39574=>array(44,-74,953,833),39575=>array(37,-63,927,833),39576=>array(89,-63,934,829),39577=>array(47,-68,978,841),39578=>array(57,-66,953,789),39579=>array(43,-69,954,828),39580=>array(36,-73,951,831),39581=>array(57,-66,904,826),39582=>array(33,-62,947,840),39583=>array(55,-64,901,834),39584=>array(57,-62,944,789),39585=>array(64,-62,936,787),39586=>array(57,-55,956,836),39587=>array(53,-69,942,782),39588=>array(26,-73,953,779),39589=>array(49,-72,936,834),39590=>array(49,-62,931,790),39591=>array(48,-67,952,834),39592=>array(101,-55,899,806),39593=>array(79,-68,965,822),39594=>array(59,-67,978,787),39595=>array(78,-68,964,822),39596=>array(76,-63,967,791),39597=>array(76,-53,951,801),39598=>array(70,-52,967,825),39599=>array(91,-66,958,844),39600=>array(60,-68,963,783),39601=>array(62,-67,952,845),39602=>array(90,-60,967,849),39603=>array(82,-72,973,829),39604=>array(65,-68,958,824),39605=>array(54,-54,971,839),39606=>array(69,-65,962,826),39607=>array(74,-67,948,833),39608=>array(57,-62,958,824),39609=>array(68,-71,961,838),39610=>array(62,-74,945,829),39611=>array(78,-69,962,829),39612=>array(47,-71,937,838),39613=>array(37,-74,959,835),39614=>array(78,-51,970,810),39615=>array(78,-70,953,835),39616=>array(58,-69,930,844),39617=>array(61,-68,964,786),39618=>array(63,-68,957,848),39619=>array(42,-73,943,783),39620=>array(46,-57,967,839),39621=>array(61,-70,940,807),39622=>array(74,-68,947,835),39623=>array(71,-65,941,840),39624=>array(52,-71,954,843),39625=>array(32,-71,959,841),39626=>array(65,-66,948,831),39627=>array(43,-72,938,825),39628=>array(67,-76,937,818),39629=>array(51,-64,968,837),39630=>array(69,-74,962,789),39631=>array(55,-66,941,841),39632=>array(62,-64,956,829),39633=>array(67,-67,908,783),39634=>array(80,-64,958,833),39635=>array(51,-72,947,837),39636=>array(79,-70,934,829),39637=>array(69,-53,955,862),39638=>array(57,-67,948,849),39639=>array(84,-64,954,836),39640=>array(102,-67,916,828),39641=>array(102,-67,916,833),39642=>array(70,-67,958,848),39643=>array(47,-66,968,849),39644=>array(70,-71,956,847),39645=>array(74,-68,926,848),39646=>array(56,-67,946,840),39647=>array(68,-50,956,847),39648=>array(39,-58,963,837),39649=>array(51,-62,961,832),39650=>array(51,-21,953,832),39651=>array(51,-59,957,832),39652=>array(31,-64,973,846),39653=>array(63,-61,967,839),39654=>array(51,-34,955,834),39655=>array(32,-67,967,839),39656=>array(34,-58,964,839),39657=>array(58,-59,959,782),39658=>array(51,-61,956,853),39659=>array(62,-64,970,844),39660=>array(39,-25,964,829),39661=>array(46,-44,962,853),39662=>array(51,-61,956,853),39663=>array(65,-64,969,839),39664=>array(72,-37,948,823),39665=>array(40,-43,966,830),39666=>array(39,-73,958,832),39667=>array(65,-50,938,849),39668=>array(55,-65,950,833),39669=>array(44,-70,949,837),39670=>array(50,-70,957,832),39671=>array(69,-67,957,835),39672=>array(44,-69,948,837),39673=>array(53,-64,989,841),39674=>array(60,-68,948,832),39675=>array(66,-63,957,836),39676=>array(52,-65,966,845),39677=>array(55,-31,956,840),39678=>array(62,-74,952,834),39679=>array(61,-57,981,856),39680=>array(35,-71,962,857),39681=>array(60,-50,942,857),39682=>array(51,-51,942,857),39683=>array(74,-59,955,834),39684=>array(59,-64,965,843),39685=>array(44,-68,962,828),39686=>array(41,-70,964,846),39687=>array(47,-50,964,853),39688=>array(29,-32,968,842),39689=>array(60,-66,956,831),39690=>array(52,-72,973,834),39691=>array(58,-64,954,849),39692=>array(40,-67,967,835),39693=>array(68,-68,949,846),39694=>array(49,-53,943,851),39695=>array(35,-69,942,825),39696=>array(65,-63,955,847),39697=>array(39,-50,965,853),39698=>array(40,-59,954,853),39699=>array(59,-83,903,824),39700=>array(53,-72,979,836),39701=>array(57,-77,971,856),39702=>array(50,-56,969,851),39703=>array(62,-70,968,838),39704=>array(46,-65,980,851),39705=>array(72,-55,961,851),39706=>array(48,-68,957,841),39707=>array(53,-66,955,829),39708=>array(38,-61,938,823),39709=>array(38,-61,938,823),39710=>array(38,-63,966,846),39711=>array(24,-68,949,839),39712=>array(50,-80,966,852),39713=>array(40,-45,932,855),39714=>array(58,-69,959,837),39715=>array(41,-62,944,839),39716=>array(52,-71,958,845),39717=>array(116,-71,891,826),39718=>array(116,-71,891,826),39719=>array(116,-61,893,835),39720=>array(118,-63,894,830),39721=>array(115,-65,898,832),39722=>array(102,-57,897,839),39723=>array(105,-55,901,840),39724=>array(107,-61,907,833),39725=>array(99,-71,901,823),39726=>array(110,-65,917,832),39727=>array(122,-24,909,826),39728=>array(53,-79,953,840),39729=>array(53,-58,952,845),39730=>array(72,-64,945,791),39731=>array(41,-68,927,826),39732=>array(60,-70,948,833),39733=>array(51,-64,955,783),39734=>array(54,-40,969,838),39735=>array(60,-67,977,826),39736=>array(40,-64,923,834),39737=>array(54,-50,939,813),39738=>array(55,-69,952,830),39739=>array(72,-64,927,830),39740=>array(45,-58,962,850),39741=>array(49,-62,973,836),39742=>array(49,-75,973,836),39743=>array(53,-66,968,843),39744=>array(37,-65,962,843),39745=>array(26,-76,959,848),39746=>array(46,-62,960,857),39747=>array(40,-35,941,840),39748=>array(74,-38,952,854),39749=>array(35,-66,962,839),39750=>array(39,-77,977,845),39751=>array(47,-75,960,770),39752=>array(34,-67,968,844),39753=>array(21,-69,929,823),39754=>array(34,-67,977,841),39755=>array(46,-76,961,842),39756=>array(38,-68,963,843),39757=>array(39,-48,960,841),39758=>array(38,-63,970,847),39759=>array(39,-70,966,836),39760=>array(26,-76,957,849),39761=>array(38,-63,966,841),39762=>array(28,-68,956,846),39763=>array(28,-56,956,849),39764=>array(27,-69,960,840),39765=>array(35,-75,970,834),39766=>array(38,-70,964,836),39767=>array(58,-70,960,851),39768=>array(44,-68,947,797),39769=>array(51,-70,965,831),39770=>array(43,-70,956,849),39771=>array(43,-66,894,841),39772=>array(88,-73,976,841),39773=>array(61,-65,887,841),39774=>array(43,-45,958,841),39775=>array(33,-48,957,842),39776=>array(35,-49,949,844),39777=>array(31,-71,916,839),39778=>array(31,-49,973,839),39779=>array(31,-61,945,839),39780=>array(41,-73,979,832),39781=>array(31,-49,976,839),39782=>array(39,-66,966,832),39783=>array(35,-70,976,835),39784=>array(35,-32,959,846),39785=>array(31,-49,931,839),39786=>array(31,-49,969,839),39787=>array(31,-49,969,839),39788=>array(40,-78,963,834),39789=>array(31,-49,955,839),39790=>array(31,-49,974,839),39791=>array(51,-68,947,837),39792=>array(39,-74,978,834),39793=>array(38,-32,954,835),39794=>array(31,-49,952,839),39795=>array(31,-74,948,839),39796=>array(34,-73,953,837),39797=>array(41,-62,973,837),39798=>array(34,-65,905,834),39799=>array(43,-64,966,841),39800=>array(31,-49,950,839),39801=>array(31,-56,954,839),39802=>array(47,-71,964,836),39803=>array(57,-69,919,833),39804=>array(48,-70,963,830),39805=>array(42,-70,961,831),39806=>array(44,-52,964,819),39807=>array(31,-73,981,842),39808=>array(38,-38,948,852),39809=>array(31,-61,962,839),39810=>array(52,-64,914,832),39811=>array(44,-65,948,843),39812=>array(16,-62,932,839),39813=>array(45,-67,982,831),39814=>array(44,-58,963,850),39815=>array(38,-67,976,837),39816=>array(52,-70,927,830),39817=>array(31,-70,950,839),39818=>array(33,-66,886,843),39819=>array(31,-69,944,839),39820=>array(31,-71,961,840),39821=>array(31,-73,971,839),39822=>array(45,-64,957,838),39823=>array(31,-49,947,839),39824=>array(42,-65,960,839),39825=>array(44,-46,967,844),39826=>array(39,-60,959,851),39827=>array(48,-61,961,845),39828=>array(31,-49,933,839),39829=>array(57,-71,970,838),39830=>array(31,-49,935,839),39831=>array(31,-77,948,839),39832=>array(44,-54,935,836),39833=>array(31,-49,908,839),39834=>array(44,-62,958,839),39835=>array(31,-75,976,834),39836=>array(31,-63,953,839),39837=>array(14,-67,991,836),39838=>array(51,-67,970,839),39839=>array(31,-51,964,839),39840=>array(33,-55,954,849),39841=>array(40,-69,972,833),39842=>array(46,-78,995,829),39843=>array(45,-67,915,839),39844=>array(55,-76,954,826),39845=>array(38,-69,984,840),39846=>array(36,-61,910,842),39847=>array(31,-49,954,839),39848=>array(40,-39,953,844),39849=>array(31,-49,937,853),39850=>array(44,-67,959,839),39851=>array(48,-66,959,843),39852=>array(31,-62,961,843),39853=>array(35,-39,967,847),39854=>array(44,-60,960,843),39855=>array(32,-72,974,834),39856=>array(31,-49,939,839),39857=>array(31,-49,949,839),39858=>array(30,-61,979,839),39859=>array(38,-55,945,835),39860=>array(45,-71,982,839),39861=>array(36,-67,966,834),39862=>array(41,-70,965,841),39863=>array(11,-49,939,839),39864=>array(43,-61,978,845),39865=>array(33,-65,944,836),39866=>array(18,-57,948,836),39867=>array(31,-49,975,839),39868=>array(31,-49,972,839),39869=>array(29,-68,979,832),39870=>array(11,-54,959,839),39871=>array(33,-53,962,845),39872=>array(49,-52,979,840),39873=>array(39,-67,978,840),39874=>array(39,-56,937,839),39875=>array(39,-65,961,839),39876=>array(28,-64,979,842),39877=>array(28,-66,983,842),39878=>array(36,-67,957,839),39879=>array(41,-65,965,845),39880=>array(41,-71,977,840),39881=>array(45,-52,954,833),39882=>array(48,-70,960,836),39883=>array(29,-37,980,841),39884=>array(45,-61,954,833),39885=>array(41,-68,964,842),39886=>array(26,-68,961,841),39887=>array(36,-45,914,853),39888=>array(41,-43,955,841),39889=>array(41,-49,964,841),39890=>array(41,-49,945,841),39891=>array(43,-70,964,842),39892=>array(44,-64,950,846),39893=>array(32,-79,974,839),39894=>array(35,-59,964,843),39895=>array(32,-65,971,854),39896=>array(32,-69,968,840),39897=>array(35,-67,962,842),39898=>array(31,-65,988,838),39899=>array(51,-65,916,839),39900=>array(30,-68,971,841),39901=>array(-15,-70,916,841),39902=>array(39,-74,964,825),39903=>array(29,-57,992,827),39904=>array(32,-65,990,831),39905=>array(46,-62,957,846),39906=>array(38,-48,965,845),39907=>array(38,-64,953,845),39908=>array(42,-63,971,836),39909=>array(32,-39,960,841),39910=>array(29,-62,986,838),39911=>array(49,-64,914,854),39912=>array(44,-62,972,843),39913=>array(33,-68,985,868),39914=>array(43,-67,986,839),39915=>array(32,-62,971,842),39916=>array(35,-72,988,836),39917=>array(37,-44,957,796),39918=>array(42,-65,958,845),39919=>array(46,-67,945,837),39920=>array(44,-33,972,851),39921=>array(42,-74,962,836),39922=>array(53,-73,961,828),39923=>array(34,-62,962,841),39924=>array(33,-62,946,836),39925=>array(65,-81,956,834),39926=>array(42,-63,938,836),39927=>array(43,-68,978,843),39928=>array(39,-67,983,837),39929=>array(42,-45,945,836),39930=>array(42,-64,953,837),39931=>array(43,-63,930,837),39932=>array(42,-57,980,849),39933=>array(52,-65,929,837),39934=>array(42,-69,963,836),39935=>array(47,-62,923,848),39936=>array(44,-64,940,847),39937=>array(49,-64,973,847),39938=>array(37,-59,909,840),39939=>array(49,-57,973,847),39940=>array(43,-40,970,847),39941=>array(49,-61,932,847),39942=>array(39,-61,973,843),39943=>array(43,-64,996,845),39944=>array(37,-67,973,836),39945=>array(39,-45,954,847),39946=>array(54,-53,968,847),39947=>array(24,-36,953,834),39948=>array(33,-70,972,829),39949=>array(31,-67,978,837),39950=>array(35,-73,984,838),39951=>array(49,-65,963,847),39952=>array(38,-61,958,844),39953=>array(49,-45,951,847),39954=>array(35,-64,973,844),39955=>array(38,-44,968,849),39956=>array(44,-66,977,835),39957=>array(37,-63,963,827),39958=>array(51,-64,942,848),39959=>array(44,-70,930,834),39960=>array(49,-26,943,843),39961=>array(24,-60,973,847),39962=>array(49,-21,949,855),39963=>array(44,-39,974,826),39964=>array(30,-64,975,852),39965=>array(39,-68,959,838),39966=>array(24,-60,953,847),39967=>array(49,-65,949,847),39968=>array(49,-66,966,847),39969=>array(43,-65,931,837),39970=>array(49,-63,949,847),39971=>array(34,-62,958,836),39972=>array(33,-65,958,845),39973=>array(38,-72,964,828),39974=>array(69,-56,943,847),39975=>array(34,-67,963,836),39976=>array(56,-61,927,844),39977=>array(37,-62,962,845),39978=>array(29,-26,967,847),39979=>array(43,-64,978,838),39980=>array(37,-66,982,830),39981=>array(42,-65,965,843),39982=>array(44,-39,974,826),39983=>array(34,-65,937,839),39984=>array(53,-66,944,839),39985=>array(41,-74,967,838),39986=>array(47,-69,953,840),39987=>array(51,-74,936,835),39988=>array(32,-68,970,831),39989=>array(41,-76,958,845),39990=>array(24,-65,986,839),39991=>array(29,-62,970,845),39992=>array(39,-21,966,847),39993=>array(35,-21,973,845),39994=>array(33,-73,976,862),39995=>array(35,-65,978,837),39996=>array(40,-64,915,837),39997=>array(32,-53,961,849),39998=>array(37,-62,957,838),39999=>array(36,-74,980,839),40000=>array(59,-71,961,791),40001=>array(34,-66,979,843),40002=>array(42,-65,968,847),40003=>array(44,-63,929,847),40004=>array(38,-63,956,845),40005=>array(41,-73,959,851),40006=>array(38,-64,962,849),40007=>array(38,-59,966,846),40008=>array(35,-56,939,841),40009=>array(41,-72,973,835),40010=>array(41,-67,951,835),40011=>array(31,-71,965,837),40012=>array(24,-63,989,845),40013=>array(28,-68,978,841),40014=>array(30,-69,984,840),40015=>array(49,-63,966,847),40016=>array(37,-70,967,839),40017=>array(34,-59,968,847),40018=>array(35,-62,956,855),40019=>array(38,-62,953,831),40020=>array(32,-64,962,851),40021=>array(30,-68,984,842),40022=>array(29,-68,970,842),40023=>array(31,-68,965,843),40024=>array(40,-59,965,842),40025=>array(27,-70,984,837),40026=>array(27,-65,953,837),40027=>array(49,-68,950,847),40028=>array(26,-67,962,845),40029=>array(29,-60,973,847),40030=>array(39,-68,983,831),40031=>array(53,-68,974,848),40032=>array(25,-61,984,861),40033=>array(32,-62,974,838),40034=>array(41,-65,992,830),40035=>array(32,-35,964,849),40036=>array(58,-40,930,839),40037=>array(38,-71,959,839),40038=>array(36,-56,976,822),40039=>array(36,-28,965,842),40040=>array(34,-48,954,854),40041=>array(29,-70,951,854),40042=>array(34,-64,974,834),40043=>array(25,-68,979,854),40044=>array(24,-70,967,854),40045=>array(39,-62,957,852),40046=>array(29,-56,956,848),40047=>array(39,-64,995,847),40048=>array(29,-63,960,854),40049=>array(38,-67,945,838),40050=>array(22,-59,970,854),40051=>array(38,-65,967,843),40052=>array(36,-69,971,841),40053=>array(27,-55,964,858),40054=>array(40,-73,963,837),40055=>array(39,-29,956,839),40056=>array(36,-60,962,851),40057=>array(48,-67,965,841),40058=>array(35,-68,966,828),40059=>array(59,-73,948,824),40060=>array(78,-15,929,826),40061=>array(22,-73,934,841),40062=>array(31,-29,973,839),40063=>array(29,-65,965,841),40064=>array(22,-46,945,841),40065=>array(44,-53,925,849),40066=>array(39,-75,936,836),40067=>array(22,-32,974,841),40068=>array(22,-71,964,841),40069=>array(30,-68,967,838),40070=>array(24,-72,945,824),40071=>array(22,-74,903,841),40072=>array(22,-72,920,817),40073=>array(22,-69,919,841),40074=>array(22,-61,961,845),40075=>array(24,-62,943,840),40076=>array(22,-66,886,843),40077=>array(22,-30,950,843),40078=>array(74,-13,926,822),40079=>array(22,-73,951,841),40080=>array(39,-67,942,834),40081=>array(39,-29,950,839),40082=>array(24,-64,941,828),40083=>array(29,-55,945,837),40084=>array(24,-69,942,838),40085=>array(28,-70,956,824),40086=>array(22,-61,941,841),40087=>array(33,-65,913,840),40088=>array(22,-63,953,841),40089=>array(22,-55,977,840),40090=>array(12,-76,937,836),40091=>array(39,-69,943,844),40092=>array(27,-61,938,846),40093=>array(54,-37,955,823),40094=>array(25,-42,942,830),40095=>array(21,-68,923,821),40096=>array(25,-69,961,830),40097=>array(0,-59,921,818),40098=>array(16,-49,937,822),40099=>array(19,-20,943,834),40100=>array(39,-23,937,828),40101=>array(24,-68,920,829),40102=>array(23,-64,956,832),40103=>array(33,-63,962,831),40104=>array(60,-48,918,822),40105=>array(25,-67,947,842),40106=>array(22,-69,965,841),40107=>array(31,-67,912,836),40108=>array(22,-44,930,841),40109=>array(24,-61,947,834),40110=>array(25,-69,969,834),40111=>array(22,-79,974,841),40112=>array(19,-64,955,825),40113=>array(32,-64,941,830),40114=>array(24,-60,953,824),40115=>array(39,-66,897,828),40116=>array(22,-70,881,816),40117=>array(24,-72,947,824),40118=>array(31,-32,956,849),40119=>array(25,-66,899,830),40120=>array(39,-64,947,846),40121=>array(25,-79,972,839),40122=>array(16,-68,943,819),40123=>array(25,-66,933,834),40124=>array(27,-80,918,825),40125=>array(25,-69,957,830),40126=>array(22,-65,963,841),40127=>array(24,-58,957,841),40128=>array(22,-68,988,841),40129=>array(22,-39,982,841),40130=>array(22,-57,983,841),40131=>array(34,-31,951,842),40132=>array(20,-66,939,812),40133=>array(18,-70,961,828),40134=>array(25,-66,956,842),40135=>array(24,-44,937,844),40136=>array(22,-64,973,844),40137=>array(34,-61,954,841),40138=>array(25,-77,911,836),40139=>array(24,-67,953,822),40140=>array(35,-50,931,820),40141=>array(24,-67,941,834),40142=>array(24,-63,910,824),40143=>array(25,-66,950,830),40144=>array(47,-67,941,824),40145=>array(22,-65,949,843),40146=>array(22,-64,975,852),40147=>array(33,-75,917,828),40148=>array(25,-64,957,830),40149=>array(25,-69,922,830),40150=>array(41,-40,945,835),40151=>array(25,-68,965,836),40152=>array(53,-38,955,836),40153=>array(25,-84,943,840),40154=>array(16,-67,984,868),40155=>array(22,-67,957,841),40156=>array(19,-69,953,825),40157=>array(25,-66,945,848),40158=>array(25,-68,945,834),40159=>array(35,-65,953,851),40160=>array(22,-64,995,841),40161=>array(41,-33,959,841),40162=>array(25,-32,948,833),40163=>array(24,-35,976,849),40164=>array(43,-67,957,856),40165=>array(66,-59,887,852),40166=>array(34,-65,952,847),40167=>array(58,-58,960,842),40168=>array(43,-64,957,848),40169=>array(48,-63,930,849),40170=>array(177,-69,927,843),40171=>array(41,-68,927,788),40172=>array(52,-62,960,851),40173=>array(31,-73,951,841),40174=>array(39,-73,961,841),40175=>array(46,-60,965,796),40176=>array(43,-71,957,840),40177=>array(58,-75,956,840),40178=>array(33,-48,955,861),40179=>array(46,-60,965,796),40180=>array(109,-63,909,851),40181=>array(59,-67,952,841),40182=>array(52,-57,949,850),40183=>array(47,-69,964,846),40184=>array(46,-73,954,835),40185=>array(35,-70,954,847),40186=>array(40,-65,955,846),40187=>array(39,-78,954,841),40188=>array(46,-52,976,864),40189=>array(35,-75,959,844),40190=>array(57,-76,943,841),40191=>array(42,-71,939,841),40192=>array(36,-72,951,848),40193=>array(31,-72,951,848),40194=>array(17,-73,951,848),40195=>array(48,-70,972,840),40196=>array(63,-74,963,843),40197=>array(49,-75,957,838),40198=>array(45,-68,942,841),40199=>array(65,-65,923,848),40200=>array(46,-63,947,791),40201=>array(46,-64,924,842),40202=>array(38,-64,924,842),40203=>array(39,-68,924,842),40204=>array(34,-68,996,781),40205=>array(40,-68,959,844),40206=>array(96,-70,924,836),40207=>array(29,-80,971,851),40208=>array(61,-68,944,833),40209=>array(68,-68,947,847),40210=>array(41,-65,926,838),40211=>array(54,-71,946,835),40212=>array(45,-68,958,835),40213=>array(41,-61,946,841),40214=>array(33,-61,967,853),40215=>array(60,-71,941,843),40216=>array(43,-75,956,839),40217=>array(52,-68,953,844),40218=>array(26,-62,960,841),40219=>array(46,-67,951,840),40220=>array(62,-67,932,827),40221=>array(36,-58,918,849),40222=>array(72,-55,926,845),40223=>array(68,-58,921,846),40224=>array(61,-68,946,843),40225=>array(42,-58,946,853),40226=>array(51,-72,950,838),40227=>array(66,-60,923,845),40228=>array(25,-77,975,843),40229=>array(38,-72,979,841),40230=>array(34,-63,971,842),40231=>array(51,-68,956,835),40232=>array(113,-79,916,843),40233=>array(45,-75,959,835),40234=>array(61,-56,956,841),40235=>array(113,-67,916,843),40236=>array(63,-67,893,821),40237=>array(107,-63,943,841),40238=>array(37,-70,955,836),40239=>array(59,-59,916,845),40240=>array(71,-61,930,847),40241=>array(46,-63,955,841),40242=>array(59,-66,943,841),40243=>array(57,-66,966,838),40244=>array(37,-63,944,849),40245=>array(27,-66,965,841),40246=>array(56,-64,954,840),40247=>array(57,-68,908,824),40248=>array(43,-67,956,843),40249=>array(76,-63,956,855),40250=>array(44,-63,961,839),40251=>array(48,-57,919,853),40252=>array(29,-61,971,856),40253=>array(55,-43,924,850),40254=>array(65,-67,957,841),40255=>array(49,-67,924,844),40256=>array(43,-47,951,858),40257=>array(37,-67,957,839),40258=>array(39,-71,916,842),40259=>array(37,-67,951,841),40260=>array(53,-60,933,843),40261=>array(38,-69,963,838),40262=>array(35,-70,943,855),40263=>array(41,-68,959,841),40264=>array(40,-70,949,841),40265=>array(62,-55,938,808),40266=>array(46,-68,954,841),40267=>array(34,-69,948,840),40268=>array(26,-67,981,840),40269=>array(34,-69,966,840),40270=>array(36,-73,964,840),40271=>array(55,-61,945,846),40272=>array(18,-69,970,847),40273=>array(108,-68,915,838),40274=>array(28,-68,914,842),40275=>array(71,-61,926,845),40276=>array(31,-73,971,847),40277=>array(34,-70,959,840),40278=>array(104,-68,942,846),40279=>array(33,-67,949,840),40280=>array(38,-71,952,839),40281=>array(47,-68,951,841),40282=>array(45,-67,963,841),40283=>array(54,-71,950,840),40284=>array(53,-61,930,843),40285=>array(68,-60,924,840),40286=>array(53,-73,952,847),40287=>array(48,-69,945,839),40288=>array(70,-62,933,842),40289=>array(61,-63,933,842),40290=>array(48,-69,946,845),40291=>array(42,-69,958,840),40292=>array(43,-69,948,850),40293=>array(67,-62,920,834),40294=>array(37,-68,966,839),40295=>array(48,-71,955,838),40296=>array(23,-68,965,845),40297=>array(37,-69,956,841),40298=>array(50,-60,925,849),40299=>array(59,-72,950,841),40300=>array(63,-77,928,849),40301=>array(24,-65,949,844),40302=>array(44,-65,956,844),40303=>array(65,-58,926,853),40304=>array(57,-55,927,851),40305=>array(33,-70,969,848),40306=>array(60,-61,931,841),40307=>array(37,-70,959,841),40308=>array(28,-67,967,848),40309=>array(34,-68,960,846),40310=>array(52,-65,943,844),40311=>array(37,-61,918,848),40312=>array(58,-68,968,847),40313=>array(49,-64,942,838),40314=>array(37,-75,950,841),40315=>array(51,-64,967,847),40316=>array(44,-68,940,844),40317=>array(49,-66,963,849),40318=>array(57,-69,943,840),40319=>array(34,-66,957,851),40320=>array(28,-73,969,853),40321=>array(43,-65,959,847),40322=>array(51,-68,956,835),40323=>array(27,-69,973,840),40324=>array(62,-74,961,852),40325=>array(51,-65,958,849),40326=>array(40,-68,966,847),40327=>array(42,-68,947,844),40328=>array(50,-74,962,841),40329=>array(54,-62,922,845),40330=>array(26,-68,917,848),40331=>array(41,-72,962,840),40332=>array(37,-63,958,852),40333=>array(35,-69,965,840),40334=>array(34,-69,966,850),40335=>array(42,-68,955,842),40336=>array(52,-63,953,839),40337=>array(61,-74,939,827),40338=>array(33,-65,963,838),40339=>array(53,-65,911,846),40340=>array(48,-63,961,844),40341=>array(57,-69,943,840),40342=>array(41,-67,957,834),40343=>array(46,-62,967,842),40344=>array(62,-64,927,844),40345=>array(67,-62,956,850),40346=>array(71,-59,927,846),40347=>array(55,-65,948,838),40348=>array(46,-70,968,838),40349=>array(61,-66,951,842),40350=>array(36,-63,956,840),40351=>array(50,-65,957,843),40352=>array(69,-64,949,834),40353=>array(16,-55,897,853),40354=>array(36,-64,954,843),40355=>array(18,-58,966,841),40356=>array(64,-65,948,839),40357=>array(35,-69,965,840),40358=>array(75,-68,897,828),40359=>array(32,-62,972,826),40360=>array(50,-63,977,838),40361=>array(52,-66,950,838),40362=>array(55,-60,953,841),40363=>array(34,-77,947,841),40364=>array(27,-71,909,846),40365=>array(60,-70,946,847),40366=>array(35,-69,948,848),40367=>array(57,-74,933,829),40368=>array(-9,-77,948,840),40369=>array(47,-73,968,835),40370=>array(43,-68,955,843),40371=>array(52,-68,955,841),40372=>array(40,-65,938,837),40373=>array(49,-59,938,846),40374=>array(45,-69,964,842),40375=>array(83,-68,953,846),40376=>array(40,-64,952,834),40377=>array(69,-70,949,838),40378=>array(47,-67,924,836),40379=>array(85,-61,921,848),40380=>array(31,-69,912,844),40381=>array(26,-69,948,840),40382=>array(60,-69,949,827),40383=>array(53,-55,929,857),40384=>array(74,-62,927,845),40385=>array(36,-49,951,850),40386=>array(66,-57,924,844),40387=>array(50,-53,950,861),40388=>array(46,-61,945,835),40389=>array(52,-63,960,843),40390=>array(53,-67,949,838),40391=>array(61,-72,976,825),40392=>array(45,-70,962,839),40393=>array(30,-73,970,841),40394=>array(56,-66,949,842),40395=>array(44,-72,959,841),40396=>array(21,-64,946,838),40397=>array(47,-65,959,844),40398=>array(34,-73,964,840),40399=>array(43,-64,952,841),40400=>array(40,-68,956,845),40401=>array(43,-71,952,836),40402=>array(62,-65,954,846),40403=>array(49,-63,931,845),40404=>array(52,-67,954,842),40405=>array(58,-65,937,845),40406=>array(54,-70,930,797),40407=>array(115,-68,925,843),40408=>array(52,-64,974,834),40409=>array(58,-63,956,835),40410=>array(32,-76,912,846),40411=>array(45,-65,954,847),40412=>array(41,-67,955,845),40413=>array(50,-70,957,845),40414=>array(44,-67,967,854),40415=>array(46,-67,953,845),40416=>array(40,-69,948,840),40417=>array(39,-71,970,844),40418=>array(36,-67,979,785),40419=>array(65,-65,954,846),40420=>array(61,-70,954,838),40421=>array(60,-71,937,847),40422=>array(26,-56,898,847),40423=>array(47,-69,948,840),40424=>array(48,-65,959,846),40425=>array(56,-49,939,853),40426=>array(54,-63,935,802),40427=>array(59,-52,955,862),40428=>array(48,-65,954,844),40429=>array(39,-66,965,851),40430=>array(41,-65,962,844),40431=>array(32,-68,915,841),40432=>array(37,-69,969,840),40433=>array(50,-67,955,846),40434=>array(65,-66,943,840),40435=>array(113,-62,925,844),40436=>array(98,-69,938,841),40437=>array(35,-67,956,840),40438=>array(54,-73,945,840),40439=>array(62,-77,950,841),40440=>array(60,-68,934,844),40441=>array(40,-76,942,837),40442=>array(62,-67,948,849),40443=>array(29,-77,989,839),40444=>array(48,-69,948,840),40445=>array(50,-73,935,844),40446=>array(58,-65,962,845),40447=>array(53,-61,956,841),40448=>array(33,-68,962,841),40449=>array(34,-67,969,843),40450=>array(48,-74,957,830),40451=>array(32,-64,974,846),40452=>array(47,-73,969,837),40453=>array(62,-70,954,839),40454=>array(50,-72,966,839),40455=>array(45,-65,942,846),40456=>array(36,-69,926,846),40457=>array(38,-62,955,833),40458=>array(33,-66,960,842),40459=>array(59,-65,959,841),40460=>array(36,-66,948,843),40461=>array(34,-61,959,847),40462=>array(68,-59,910,805),40463=>array(50,-70,961,847),40464=>array(42,-67,971,841),40465=>array(44,-51,951,852),40466=>array(34,-63,975,838),40467=>array(93,-65,933,840),40468=>array(41,-70,973,843),40469=>array(43,-65,930,844),40470=>array(63,-67,939,844),40471=>array(71,-72,945,836),40472=>array(24,-71,960,844),40473=>array(57,-64,946,847),40474=>array(50,-65,928,843),40475=>array(45,-67,927,845),40476=>array(34,-65,966,845),40477=>array(41,-65,935,842),40478=>array(62,-67,958,846),40479=>array(80,-53,892,842),40480=>array(34,-65,893,820),40481=>array(30,-57,890,837),40482=>array(58,-65,935,825),40483=>array(98,-52,903,842),40484=>array(27,-66,896,826),40485=>array(96,-53,904,840),40486=>array(23,-64,906,837),40487=>array(35,-63,932,833),40488=>array(53,-63,892,827),40489=>array(37,-69,918,823),40490=>array(49,-65,892,822),40491=>array(26,-66,897,824),40492=>array(34,-66,896,826),40493=>array(100,-68,902,825),40494=>array(72,-69,902,825),40495=>array(32,-58,950,831),40496=>array(50,-70,927,844),40497=>array(70,-65,896,825),40498=>array(24,-57,895,828),40499=>array(35,-62,924,827),40500=>array(81,-63,893,821),40501=>array(41,-57,920,835),40502=>array(61,-59,910,832),40503=>array(50,-63,923,821),40504=>array(50,-59,893,826),40505=>array(29,-62,896,820),40506=>array(15,-66,896,824),40507=>array(37,-63,938,844),40508=>array(49,-67,928,835),40509=>array(26,-53,907,836),40510=>array(64,-60,917,835),40511=>array(39,-55,894,839),40512=>array(40,-62,949,838),40513=>array(62,-64,899,824),40514=>array(62,-60,895,820),40515=>array(98,-61,899,842),40516=>array(30,-54,898,826),40517=>array(32,-59,899,833),40518=>array(16,-60,895,821),40519=>array(90,-63,899,834),40520=>array(20,-66,900,822),40521=>array(41,-62,896,821),40522=>array(52,-64,903,826),40523=>array(60,-63,898,823),40524=>array(24,-64,899,828),40525=>array(81,-62,925,824),40526=>array(43,-71,902,818),40527=>array(24,-68,906,839),40528=>array(44,-64,926,843),40529=>array(51,-66,896,829),40530=>array(26,-68,931,846),40531=>array(49,-64,942,848),40532=>array(41,-64,959,833),40533=>array(52,-67,896,819),40534=>array(16,-64,896,821),40535=>array(61,-68,896,823),40536=>array(62,-69,894,825),40537=>array(39,-67,944,834),40538=>array(64,-63,921,824),40539=>array(19,-67,898,823),40540=>array(39,-65,929,825),40541=>array(70,-65,928,829),40542=>array(50,-61,934,821),40543=>array(44,-65,926,836),40544=>array(83,-67,924,839),40545=>array(36,-67,898,831),40546=>array(46,-67,898,849),40547=>array(38,-70,912,828),40548=>array(19,-56,898,840),40549=>array(83,-67,929,802),40550=>array(33,-61,899,821),40551=>array(20,-63,898,826),40552=>array(46,-69,929,831),40553=>array(48,-60,923,828),40554=>array(36,-63,922,827),40555=>array(42,-64,960,845),40556=>array(39,-65,895,821),40557=>array(31,-63,930,827),40558=>array(37,-62,951,821),40559=>array(61,-62,937,846),40560=>array(45,-78,917,831),40561=>array(30,-65,948,826),40562=>array(63,-64,933,833),40563=>array(29,-56,897,828),40564=>array(29,-70,946,822),40565=>array(125,-70,891,835),40566=>array(91,-52,972,835),40567=>array(91,-73,972,835),40568=>array(82,-60,966,835),40569=>array(94,-71,969,831),40570=>array(88,-59,941,843),40571=>array(69,-72,982,845),40572=>array(72,-66,947,847),40573=>array(52,-18,943,837),40574=>array(92,-45,924,830),40575=>array(57,-67,949,829),40576=>array(29,-66,958,842),40577=>array(42,-64,953,834),40578=>array(21,-60,935,841),40579=>array(39,-75,960,848),40580=>array(40,-74,958,833),40581=>array(30,-60,949,849),40582=>array(30,-60,941,849),40583=>array(30,-67,961,849),40584=>array(21,-60,925,836),40585=>array(48,-75,956,814),40586=>array(52,-72,955,826),40587=>array(67,-64,941,821),40588=>array(36,-57,966,829),40589=>array(25,-70,969,845),40590=>array(25,-80,971,845),40591=>array(25,-74,960,845),40592=>array(25,-73,975,845),40593=>array(37,-64,955,838),40594=>array(40,-70,951,835),40595=>array(37,-68,958,837),40596=>array(25,-74,960,845),40597=>array(36,-65,945,833),40598=>array(25,-70,951,845),40599=>array(43,-67,952,814),40600=>array(25,-72,971,845),40601=>array(25,-73,963,845),40602=>array(25,-78,970,845),40603=>array(25,-70,956,845),40604=>array(25,-75,979,845),40605=>array(58,-63,946,841),40606=>array(25,-80,952,843),40607=>array(26,-68,959,838),40608=>array(25,-76,952,847),40609=>array(25,-79,970,843),40610=>array(25,-74,951,843),40611=>array(35,-68,976,841),40612=>array(42,-69,959,853),40613=>array(58,-75,942,832),40614=>array(56,-65,950,827),40615=>array(40,-75,981,828),40616=>array(43,-84,971,832),40617=>array(37,-64,964,831),40618=>array(37,-64,958,831),40619=>array(43,-84,939,832),40620=>array(45,-84,964,832),40621=>array(37,-64,971,842),40622=>array(47,-68,978,824),40623=>array(43,-84,929,832),40624=>array(38,-54,971,866),40625=>array(43,-84,958,832),40626=>array(43,-84,968,832),40627=>array(43,-84,973,832),40628=>array(25,-63,959,826),40629=>array(34,-63,967,831),40630=>array(41,-71,979,837),40631=>array(44,-66,982,829),40632=>array(43,-57,973,830),40633=>array(37,-65,982,830),40634=>array(37,-65,982,818),40635=>array(43,-70,966,839),40636=>array(45,-68,956,839),40637=>array(41,-72,926,837),40638=>array(23,-67,958,836),40639=>array(36,-68,945,838),40640=>array(37,-71,969,843),40641=>array(39,-66,978,852),40642=>array(34,-73,940,845),40643=>array(55,-76,957,826),40644=>array(75,-83,925,831),40645=>array(50,-76,968,830),40646=>array(50,-76,972,830),40647=>array(58,-78,942,832),40648=>array(56,-78,959,818),40649=>array(58,-67,916,840),40650=>array(50,-78,963,831),40651=>array(28,-79,958,822),40652=>array(49,-72,960,842),40653=>array(35,-68,963,830),40654=>array(49,-68,946,832),40655=>array(39,-62,956,838),40656=>array(31,-64,954,835),40657=>array(81,-67,946,787),40658=>array(81,-67,946,787),40659=>array(48,-67,970,823),40660=>array(36,-65,970,841),40661=>array(43,-78,963,820),40662=>array(41,-75,964,780),40663=>array(39,-60,966,837),40664=>array(45,-69,955,829),40665=>array(43,-67,957,809),40666=>array(60,-70,956,823),40667=>array(47,-67,962,847),40668=>array(63,-66,919,832),40669=>array(58,-62,941,830),40670=>array(63,-64,945,839),40671=>array(58,-63,941,846),40672=>array(37,-64,952,829),40673=>array(33,-78,964,805),40674=>array(29,-72,933,831),40675=>array(43,-57,957,845),40676=>array(42,-52,965,853),40677=>array(38,-62,963,819),40678=>array(38,-68,964,833),40679=>array(44,-68,955,837),40680=>array(41,-70,956,836),40681=>array(30,-67,941,817),40682=>array(31,-76,950,823),40683=>array(25,-51,960,793),40684=>array(33,-68,967,835),40685=>array(45,-70,979,828),40686=>array(48,-53,954,832),40687=>array(52,-63,951,832),40688=>array(49,-59,970,852),40689=>array(26,-88,974,841),40690=>array(38,-55,970,864),40691=>array(47,-79,957,813),40692=>array(44,-67,977,833),40693=>array(56,-62,950,843),40694=>array(35,-73,959,817),40695=>array(37,-80,961,835),40696=>array(46,-64,954,836),40697=>array(46,-65,962,830),40698=>array(39,-74,970,826),40699=>array(34,-69,978,836),40700=>array(36,-62,955,835),40701=>array(120,-33,967,794),40702=>array(139,-42,966,803),40703=>array(45,-32,960,788),40704=>array(40,-56,973,837),40705=>array(63,-46,968,829),40706=>array(62,-54,971,823),40707=>array(68,-51,971,843),40708=>array(40,-54,971,844),40709=>array(57,-54,971,858),40710=>array(49,-42,971,784),40711=>array(48,-56,973,845),40712=>array(70,-49,960,829),40713=>array(58,-38,969,809),40714=>array(45,-39,956,834),40715=>array(84,-55,958,819),40716=>array(63,-51,962,822),40717=>array(63,-53,961,822),40718=>array(48,-65,948,801),40719=>array(41,-75,944,782),40720=>array(55,-69,943,792),40721=>array(44,-65,899,835),40722=>array(50,-67,950,824),40723=>array(59,-74,961,837),40724=>array(59,-74,961,833),40725=>array(60,-60,960,832),40726=>array(42,-73,974,833),40727=>array(44,-76,962,827),40728=>array(60,-68,962,828),40729=>array(51,-65,969,833),40730=>array(51,-69,962,827),40731=>array(43,-71,967,830),40732=>array(46,-67,972,829),40733=>array(37,-61,963,811),40734=>array(60,-35,970,818),40735=>array(34,-47,966,826),40736=>array(61,-60,963,836),40737=>array(40,-69,957,810),40738=>array(62,-52,948,830),40739=>array(74,-72,957,836),40740=>array(76,-73,959,835),40741=>array(68,-60,957,840),40742=>array(66,-69,924,826),40743=>array(66,-69,962,831),40744=>array(65,-60,969,838),40745=>array(63,-46,961,847),40746=>array(54,-56,954,846),40747=>array(61,-55,952,847),40748=>array(60,-58,945,820),40749=>array(68,-66,959,835),40750=>array(59,-68,958,840),40751=>array(56,-51,946,827),40752=>array(68,-65,953,836),40753=>array(57,-43,944,846),40754=>array(70,-77,952,834),40755=>array(65,-71,964,837),40756=>array(57,-55,954,832),40757=>array(59,-66,959,843),40758=>array(58,-75,964,839),40759=>array(49,-53,949,838),40760=>array(56,-66,954,840),40761=>array(87,-66,952,829),40762=>array(70,-58,943,825),40763=>array(42,-58,951,851),40764=>array(51,-71,897,843),40765=>array(43,-70,964,854),40766=>array(38,-65,964,850),40767=>array(30,-72,970,851),40768=>array(31,-68,976,843),40769=>array(56,-62,923,858),40770=>array(41,-75,967,833),40771=>array(43,-70,933,842),40772=>array(45,-67,950,825),40773=>array(36,-64,967,848),40774=>array(36,-62,957,860),40775=>array(49,-66,959,846),40776=>array(44,-64,967,841),40777=>array(53,-66,974,840),40778=>array(52,-70,946,831),40779=>array(55,-73,962,831),40780=>array(39,-74,973,847),40781=>array(32,-73,979,846),40782=>array(39,-67,978,846),40783=>array(43,-69,977,833),40784=>array(32,-69,952,834),40785=>array(36,-67,937,842),40786=>array(53,-73,946,829),40787=>array(58,-37,950,836),40788=>array(58,-63,948,836),40789=>array(62,-41,968,840),40790=>array(62,-65,954,840),40791=>array(65,-64,959,837),40792=>array(56,-52,976,860),40793=>array(57,-71,960,835),40794=>array(57,-71,943,851),40795=>array(61,-62,956,830),40796=>array(47,-48,957,835),40797=>array(60,-64,957,834),40798=>array(61,-71,962,833),40799=>array(40,-63,956,836),40800=>array(40,-63,930,836),40801=>array(40,-63,943,836),40802=>array(42,-68,958,846),40803=>array(55,-63,927,836),40804=>array(45,-65,969,839),40805=>array(55,-87,954,830),40806=>array(46,-73,967,836),40807=>array(64,-65,942,836),40808=>array(42,-45,958,839),40809=>array(64,-63,950,837),40810=>array(58,-63,960,836),40811=>array(66,-65,911,829),40812=>array(46,-63,956,836),40813=>array(63,-66,937,825),40814=>array(59,-73,956,831),40815=>array(59,-56,958,844),40816=>array(54,-48,949,851),40817=>array(58,-68,958,828),40818=>array(55,-66,940,836),40819=>array(73,-64,927,839),40820=>array(54,-67,957,837),40821=>array(60,-42,921,877),40822=>array(56,-60,954,846),40823=>array(58,-66,936,836),40824=>array(57,-29,968,829),40825=>array(47,-65,952,847),40826=>array(54,-71,931,837),40827=>array(59,-71,962,830),40828=>array(60,-56,940,839),40829=>array(47,-70,964,839),40830=>array(53,-69,975,829),40831=>array(75,-61,925,827),40832=>array(52,-59,930,817),40833=>array(52,-59,950,842),40834=>array(52,-59,908,842),40835=>array(52,-47,953,817),40836=>array(46,-57,947,826),40837=>array(52,-47,965,828),40838=>array(52,-67,870,817),40839=>array(51,-53,941,824),40840=>array(52,-70,969,817),40841=>array(50,-71,918,817),40842=>array(54,-68,965,821),40843=>array(44,-77,889,813),40844=>array(68,-68,927,817),40845=>array(50,-66,970,833),40846=>array(44,-63,975,797),40847=>array(59,-76,957,838),40848=>array(44,-63,975,845),40849=>array(50,-61,965,834),40850=>array(61,-64,957,838),40851=>array(45,-68,955,833),40852=>array(60,-69,956,850),40853=>array(44,-64,962,858),40854=>array(47,-47,971,819),40855=>array(63,-56,957,829),40856=>array(71,-65,958,837),40857=>array(37,-65,928,823),40858=>array(23,-66,923,834),40859=>array(21,-62,934,828),40860=>array(37,-41,967,846),40861=>array(16,-55,965,851),40862=>array(56,-54,970,843),40863=>array(50,-34,965,827),40864=>array(28,-64,976,848),40865=>array(56,-48,975,857),40866=>array(31,-62,986,863),40867=>array(29,-68,969,841),40868=>array(31,-43,962,857),40869=>array(31,-74,969,857),44032=>array(98,-69,936,842),44033=>array(88,-59,936,837),44034=>array(88,-61,936,837),44035=>array(88,-71,936,837),44036=>array(90,-45,936,842),44037=>array(88,-69,936,837),44038=>array(88,-76,936,837),44039=>array(88,-44,936,837),44040=>array(88,-62,936,837),44041=>array(88,-64,936,837),44042=>array(88,-64,936,837),44043=>array(88,-64,936,837),44044=>array(88,-70,936,837),44045=>array(88,-64,936,837),44046=>array(88,-64,936,837),44047=>array(88,-76,936,837),44048=>array(88,-62,936,837),44049=>array(88,-61,936,837),44050=>array(88,-70,936,837),44051=>array(88,-74,936,837),44052=>array(88,-69,936,837),44053=>array(88,-67,936,837),44054=>array(88,-72,936,837),44055=>array(88,-71,936,837),44056=>array(88,-66,936,837),44057=>array(88,-59,936,837),44058=>array(88,-60,936,837),44059=>array(88,-69,936,837),44060=>array(104,-69,907,842),44061=>array(88,-61,907,842),44062=>array(88,-61,907,842),44063=>array(88,-71,931,842),44064=>array(90,-46,907,842),44065=>array(88,-68,912,842),44066=>array(88,-76,907,842),44067=>array(88,-44,921,842),44068=>array(88,-62,917,842),44069=>array(88,-64,907,842),44070=>array(88,-64,908,842),44071=>array(88,-64,908,842),44072=>array(88,-69,923,842),44073=>array(88,-64,908,842),44074=>array(88,-64,908,842),44075=>array(88,-76,907,842),44076=>array(88,-62,907,842),44077=>array(88,-61,907,842),44078=>array(88,-69,922,842),44079=>array(88,-74,929,842),44080=>array(88,-69,927,842),44081=>array(88,-68,911,842),44082=>array(88,-72,929,842),44083=>array(88,-70,936,842),44084=>array(88,-66,908,842),44085=>array(88,-59,916,842),44086=>array(88,-60,928,842),44087=>array(88,-68,908,842),44088=>array(98,-68,935,843),44089=>array(90,-59,936,842),44090=>array(90,-61,936,842),44091=>array(90,-71,936,842),44092=>array(90,-45,936,842),44093=>array(90,-69,936,842),44094=>array(90,-76,936,842),44095=>array(90,-44,936,842),44096=>array(90,-62,936,842),44097=>array(90,-64,936,842),44098=>array(90,-64,936,842),44099=>array(90,-64,936,842),44100=>array(90,-70,936,842),44101=>array(90,-64,936,842),44102=>array(90,-64,936,842),44103=>array(90,-76,936,842),44104=>array(90,-62,936,842),44105=>array(90,-61,936,842),44106=>array(90,-70,936,842),44107=>array(90,-74,936,842),44108=>array(90,-69,936,842),44109=>array(90,-67,936,842),44110=>array(90,-72,936,842),44111=>array(90,-71,936,842),44112=>array(90,-66,936,842),44113=>array(90,-59,936,842),44114=>array(90,-60,936,842),44115=>array(90,-69,936,842),44116=>array(104,-69,907,842),44117=>array(88,-61,907,842),44118=>array(88,-61,907,842),44119=>array(88,-71,931,842),44120=>array(90,-46,907,842),44121=>array(88,-68,912,842),44122=>array(88,-76,907,842),44123=>array(88,-44,921,842),44124=>array(88,-62,917,842),44125=>array(88,-64,907,842),44126=>array(88,-64,908,842),44127=>array(88,-64,908,842),44128=>array(88,-69,923,842),44129=>array(88,-64,908,842),44130=>array(88,-64,908,842),44131=>array(88,-76,907,842),44132=>array(88,-62,907,842),44133=>array(88,-61,907,842),44134=>array(88,-69,922,842),44135=>array(88,-74,929,842),44136=>array(88,-69,927,842),44137=>array(88,-68,911,842),44138=>array(88,-72,929,842),44139=>array(88,-70,936,842),44140=>array(88,-66,908,842),44141=>array(88,-59,916,842),44142=>array(88,-60,928,842),44143=>array(88,-68,908,842),44144=>array(98,-70,907,841),44145=>array(90,-61,907,841),44146=>array(90,-61,907,841),44147=>array(90,-71,931,841),44148=>array(90,-46,907,841),44149=>array(90,-68,912,841),44150=>array(90,-76,907,841),44151=>array(90,-44,921,841),44152=>array(90,-62,917,841),44153=>array(90,-64,907,841),44154=>array(90,-64,908,841),44155=>array(90,-64,908,841),44156=>array(90,-69,923,841),44157=>array(90,-64,908,841),44158=>array(90,-64,908,841),44159=>array(90,-76,906,841),44160=>array(90,-62,907,841),44161=>array(90,-61,907,841),44162=>array(90,-69,922,841),44163=>array(90,-74,929,841),44164=>array(90,-69,927,841),44165=>array(90,-68,911,841),44166=>array(90,-72,929,841),44167=>array(90,-70,936,841),44168=>array(90,-66,908,841),44169=>array(90,-59,916,841),44170=>array(90,-60,928,841),44171=>array(90,-68,908,841),44172=>array(93,-68,907,843),44173=>array(74,-61,907,843),44174=>array(74,-61,907,843),44175=>array(74,-71,931,843),44176=>array(70,-46,907,843),44177=>array(74,-68,912,843),44178=>array(74,-76,907,843),44179=>array(74,-44,921,843),44180=>array(74,-62,917,843),44181=>array(74,-64,907,843),44182=>array(74,-64,908,843),44183=>array(74,-64,908,843),44184=>array(74,-69,923,843),44185=>array(74,-64,908,843),44186=>array(74,-64,908,843),44187=>array(74,-76,907,843),44188=>array(74,-62,907,843),44189=>array(74,-61,907,843),44190=>array(74,-69,922,843),44191=>array(74,-74,929,843),44192=>array(74,-69,927,843),44193=>array(74,-68,911,843),44194=>array(74,-72,929,843),44195=>array(74,-70,936,843),44196=>array(74,-66,908,843),44197=>array(74,-59,916,843),44198=>array(74,-60,928,843),44199=>array(74,-68,908,843),44200=>array(98,-70,907,842),44201=>array(90,-61,908,842),44202=>array(90,-61,908,842),44203=>array(90,-71,931,842),44204=>array(90,-46,907,842),44205=>array(90,-68,912,842),44206=>array(90,-76,908,842),44207=>array(90,-44,921,842),44208=>array(90,-62,917,842),44209=>array(90,-64,908,842),44210=>array(90,-64,908,842),44211=>array(90,-64,908,842),44212=>array(90,-69,923,842),44213=>array(90,-64,908,842),44214=>array(90,-64,908,842),44215=>array(90,-76,908,842),44216=>array(90,-62,908,842),44217=>array(90,-61,908,842),44218=>array(90,-69,922,842),44219=>array(90,-74,929,842),44220=>array(90,-69,927,842),44221=>array(90,-68,911,842),44222=>array(90,-72,929,842),44223=>array(90,-70,936,842),44224=>array(90,-66,908,842),44225=>array(90,-59,916,842),44226=>array(90,-60,928,842),44227=>array(90,-68,908,842),44228=>array(78,-68,907,843),44229=>array(79,-61,907,843),44230=>array(79,-61,907,843),44231=>array(79,-71,931,843),44232=>array(70,-46,907,843),44233=>array(79,-68,912,843),44234=>array(79,-76,907,843),44235=>array(79,-44,921,843),44236=>array(79,-62,917,843),44237=>array(79,-64,907,843),44238=>array(79,-64,908,843),44239=>array(79,-64,908,843),44240=>array(79,-69,923,843),44241=>array(79,-64,908,843),44242=>array(79,-64,908,843),44243=>array(79,-76,907,843),44244=>array(79,-62,907,843),44245=>array(79,-61,907,843),44246=>array(79,-69,922,843),44247=>array(79,-74,929,843),44248=>array(79,-69,927,843),44249=>array(79,-68,911,843),44250=>array(79,-72,929,843),44251=>array(79,-70,936,843),44252=>array(79,-66,908,843),44253=>array(79,-59,916,843),44254=>array(79,-60,928,843),44255=>array(79,-68,908,843),44256=>array(62,27,943,700),44257=>array(79,-61,921,770),44258=>array(79,-61,921,770),44259=>array(79,-71,921,770),44260=>array(79,-46,921,770),44261=>array(79,-68,921,770),44262=>array(79,-74,921,770),44263=>array(79,-44,921,770),44264=>array(79,-62,921,770),44265=>array(79,-64,921,770),44266=>array(79,-64,921,770),44267=>array(79,-63,921,770),44268=>array(79,-68,921,770),44269=>array(79,-64,921,770),44270=>array(79,-63,921,770),44271=>array(79,-74,921,770),44272=>array(79,-62,921,770),44273=>array(79,-61,921,770),44274=>array(79,-69,921,770),44275=>array(79,-74,921,770),44276=>array(79,-69,921,770),44277=>array(79,-68,921,770),44278=>array(79,-72,921,770),44279=>array(79,-70,921,770),44280=>array(79,-66,921,770),44281=>array(79,-59,921,770),44282=>array(79,-60,921,770),44283=>array(79,-68,921,770),44284=>array(38,-68,935,843),44285=>array(64,-59,936,842),44286=>array(64,-61,936,842),44287=>array(64,-71,936,842),44288=>array(57,-45,936,842),44289=>array(64,-69,936,842),44290=>array(64,-76,936,842),44291=>array(64,-44,936,842),44292=>array(64,-62,936,842),44293=>array(64,-64,936,842),44294=>array(64,-64,936,842),44295=>array(64,-64,936,842),44296=>array(64,-70,936,842),44297=>array(64,-64,936,842),44298=>array(64,-64,936,842),44299=>array(64,-76,936,842),44300=>array(64,-62,936,842),44301=>array(64,-61,936,842),44302=>array(64,-70,936,842),44303=>array(64,-74,936,842),44304=>array(64,-69,936,842),44305=>array(64,-67,936,842),44306=>array(64,-72,936,842),44307=>array(64,-71,936,842),44308=>array(64,-66,936,842),44309=>array(64,-59,936,842),44310=>array(64,-60,936,842),44311=>array(64,-69,936,842),44312=>array(51,-69,907,842),44313=>array(65,-61,907,841),44314=>array(65,-61,907,841),44315=>array(65,-71,931,841),44316=>array(53,-46,907,841),44317=>array(65,-68,912,841),44318=>array(65,-76,907,841),44319=>array(65,-44,921,841),44320=>array(65,-62,917,841),44321=>array(65,-64,907,841),44322=>array(65,-64,908,841),44323=>array(65,-64,908,841),44324=>array(65,-69,923,841),44325=>array(65,-64,908,841),44326=>array(65,-64,908,841),44327=>array(65,-76,907,841),44328=>array(65,-62,907,841),44329=>array(65,-61,907,841),44330=>array(65,-69,922,841),44331=>array(65,-74,929,841),44332=>array(65,-69,927,841),44333=>array(65,-68,911,841),44334=>array(65,-72,929,841),44335=>array(65,-70,936,841),44336=>array(65,-66,908,841),44337=>array(65,-59,916,841),44338=>array(65,-60,928,841),44339=>array(65,-68,908,841),44340=>array(60,-69,907,842),44341=>array(64,-61,907,842),44342=>array(64,-61,907,842),44343=>array(64,-71,931,842),44344=>array(72,-46,907,842),44345=>array(64,-68,912,842),44346=>array(64,-76,907,842),44347=>array(64,-44,921,842),44348=>array(64,-62,917,842),44349=>array(64,-64,907,842),44350=>array(64,-64,908,842),44351=>array(64,-64,908,842),44352=>array(64,-69,923,842),44353=>array(64,-64,908,842),44354=>array(64,-64,908,842),44355=>array(64,-76,907,842),44356=>array(64,-62,907,842),44357=>array(64,-61,907,842),44358=>array(64,-69,922,842),44359=>array(64,-74,929,842),44360=>array(64,-69,927,842),44361=>array(64,-68,911,842),44362=>array(64,-72,929,842),44363=>array(64,-70,936,842),44364=>array(64,-66,908,842),44365=>array(64,-59,916,842),44366=>array(64,-60,928,842),44367=>array(64,-68,908,842),44368=>array(62,27,943,723),44369=>array(62,-61,943,770),44370=>array(62,-61,943,770),44371=>array(62,-71,943,770),44372=>array(62,-46,943,770),44373=>array(62,-68,943,770),44374=>array(62,-74,943,770),44375=>array(62,-44,943,770),44376=>array(62,-62,943,770),44377=>array(62,-64,943,770),44378=>array(62,-64,943,770),44379=>array(62,-63,943,770),44380=>array(62,-68,943,770),44381=>array(62,-64,943,770),44382=>array(62,-63,943,770),44383=>array(62,-74,943,770),44384=>array(62,-62,943,770),44385=>array(62,-61,943,770),44386=>array(62,-69,943,770),44387=>array(62,-74,943,770),44388=>array(62,-69,943,770),44389=>array(62,-68,943,770),44390=>array(62,-72,943,770),44391=>array(62,-70,943,770),44392=>array(62,-66,943,770),44393=>array(62,-59,943,770),44394=>array(62,-60,943,770),44395=>array(62,-68,943,770),44396=>array(79,-64,920,780),44397=>array(79,-61,921,769),44398=>array(79,-61,921,769),44399=>array(79,-71,921,769),44400=>array(79,-46,921,768),44401=>array(79,-68,921,769),44402=>array(79,-74,921,769),44403=>array(79,-44,921,769),44404=>array(79,-62,921,769),44405=>array(79,-64,921,769),44406=>array(79,-64,921,769),44407=>array(79,-63,921,769),44408=>array(79,-68,921,769),44409=>array(79,-64,921,769),44410=>array(79,-63,921,769),44411=>array(79,-74,921,769),44412=>array(79,-62,921,769),44413=>array(79,-61,921,769),44414=>array(79,-69,921,769),44415=>array(79,-74,921,769),44416=>array(79,-69,921,769),44417=>array(79,-68,921,769),44418=>array(79,-72,921,769),44419=>array(79,-70,921,769),44420=>array(79,-66,921,769),44421=>array(79,-59,921,769),44422=>array(79,-60,921,769),44423=>array(79,-68,921,769),44424=>array(67,-69,907,842),44425=>array(75,-61,907,841),44426=>array(75,-61,907,841),44427=>array(75,-71,931,841),44428=>array(81,-46,907,841),44429=>array(75,-68,912,841),44430=>array(75,-76,907,841),44431=>array(75,-44,921,841),44432=>array(75,-62,917,841),44433=>array(75,-64,907,841),44434=>array(75,-64,908,841),44435=>array(75,-64,908,841),44436=>array(75,-69,923,841),44437=>array(75,-64,908,841),44438=>array(75,-64,908,841),44439=>array(75,-76,906,841),44440=>array(75,-62,907,841),44441=>array(75,-61,907,841),44442=>array(75,-69,922,841),44443=>array(75,-74,929,841),44444=>array(75,-69,927,841),44445=>array(75,-68,911,841),44446=>array(75,-72,929,841),44447=>array(75,-70,936,841),44448=>array(75,-66,908,841),44449=>array(75,-59,916,841),44450=>array(75,-60,928,841),44451=>array(75,-68,908,841),44452=>array(40,-69,908,842),44453=>array(70,-61,907,843),44454=>array(70,-61,907,843),44455=>array(70,-71,931,843),44456=>array(79,-46,907,843),44457=>array(70,-68,912,843),44458=>array(70,-76,907,843),44459=>array(70,-44,921,843),44460=>array(70,-62,917,843),44461=>array(70,-64,907,843),44462=>array(70,-64,908,843),44463=>array(70,-64,908,843),44464=>array(70,-69,923,843),44465=>array(70,-64,908,843),44466=>array(70,-64,908,843),44467=>array(70,-76,907,843),44468=>array(70,-62,907,843),44469=>array(70,-61,907,843),44470=>array(70,-69,922,843),44471=>array(70,-74,929,843),44472=>array(70,-69,927,843),44473=>array(70,-68,911,843),44474=>array(70,-72,929,843),44475=>array(70,-70,936,843),44476=>array(70,-66,908,843),44477=>array(70,-59,916,843),44478=>array(70,-60,928,843),44479=>array(70,-68,908,843),44480=>array(55,-69,907,842),44481=>array(64,-61,907,842),44482=>array(64,-61,907,842),44483=>array(64,-71,931,842),44484=>array(64,-46,907,842),44485=>array(64,-68,912,842),44486=>array(64,-76,907,842),44487=>array(64,-44,921,842),44488=>array(64,-62,917,842),44489=>array(64,-64,907,842),44490=>array(64,-64,908,842),44491=>array(64,-64,908,842),44492=>array(64,-69,923,842),44493=>array(64,-64,908,842),44494=>array(64,-64,908,842),44495=>array(64,-76,907,842),44496=>array(64,-62,907,842),44497=>array(64,-61,907,842),44498=>array(64,-69,922,842),44499=>array(64,-74,929,842),44500=>array(64,-69,927,842),44501=>array(64,-68,911,842),44502=>array(64,-72,929,842),44503=>array(64,-70,936,842),44504=>array(64,-66,908,842),44505=>array(64,-59,916,842),44506=>array(64,-60,928,842),44507=>array(64,-68,908,842),44508=>array(71,-64,928,780),44509=>array(79,-61,921,768),44510=>array(79,-61,921,768),44511=>array(79,-71,921,768),44512=>array(79,-46,921,769),44513=>array(79,-68,921,768),44514=>array(79,-74,921,768),44515=>array(79,-44,921,768),44516=>array(79,-62,921,768),44517=>array(79,-64,921,768),44518=>array(79,-64,921,768),44519=>array(79,-63,921,768),44520=>array(79,-68,921,768),44521=>array(79,-64,921,768),44522=>array(79,-63,921,768),44523=>array(79,-74,921,768),44524=>array(79,-62,921,768),44525=>array(79,-61,921,768),44526=>array(79,-69,921,768),44527=>array(79,-74,921,768),44528=>array(79,-69,921,768),44529=>array(79,-68,921,768),44530=>array(79,-72,921,768),44531=>array(79,-70,921,768),44532=>array(79,-66,921,768),44533=>array(79,-59,921,768),44534=>array(79,-60,921,768),44535=>array(79,-68,921,768),44536=>array(57,62,943,685),44537=>array(78,-61,919,769),44538=>array(78,-61,919,769),44539=>array(78,-71,919,769),44540=>array(79,-46,921,770),44541=>array(78,-68,919,769),44542=>array(78,-74,919,769),44543=>array(78,-44,919,769),44544=>array(78,-62,919,769),44545=>array(78,-64,919,769),44546=>array(78,-64,919,769),44547=>array(78,-63,919,769),44548=>array(78,-68,919,769),44549=>array(78,-64,919,769),44550=>array(78,-63,919,769),44551=>array(78,-74,919,769),44552=>array(78,-62,919,769),44553=>array(78,-61,919,769),44554=>array(78,-69,919,769),44555=>array(78,-74,919,769),44556=>array(78,-69,919,769),44557=>array(78,-68,919,769),44558=>array(78,-72,919,769),44559=>array(78,-70,919,769),44560=>array(78,-66,919,769),44561=>array(78,-59,919,769),44562=>array(78,-60,919,769),44563=>array(78,-68,919,769),44564=>array(52,-69,907,842),44565=>array(64,-61,907,842),44566=>array(64,-61,907,842),44567=>array(64,-71,931,842),44568=>array(68,-46,907,842),44569=>array(64,-68,912,842),44570=>array(64,-76,907,842),44571=>array(64,-44,921,842),44572=>array(64,-62,917,842),44573=>array(64,-64,907,842),44574=>array(64,-64,908,842),44575=>array(64,-64,908,842),44576=>array(64,-69,923,842),44577=>array(64,-64,908,842),44578=>array(64,-64,908,842),44579=>array(64,-76,907,842),44580=>array(64,-62,907,842),44581=>array(64,-61,907,842),44582=>array(64,-69,922,842),44583=>array(64,-74,929,842),44584=>array(64,-69,927,842),44585=>array(64,-68,911,842),44586=>array(64,-72,929,842),44587=>array(64,-70,936,842),44588=>array(64,-66,908,842),44589=>array(64,-59,916,842),44590=>array(64,-60,928,842),44591=>array(64,-68,908,842),44592=>array(90,-69,907,842),44593=>array(63,-61,907,842),44594=>array(63,-61,907,842),44595=>array(63,-71,931,842),44596=>array(77,-46,907,842),44597=>array(63,-68,912,842),44598=>array(63,-76,907,842),44599=>array(63,-44,921,842),44600=>array(63,-62,917,842),44601=>array(63,-64,907,842),44602=>array(63,-64,908,842),44603=>array(63,-64,908,842),44604=>array(63,-69,923,842),44605=>array(63,-64,908,842),44606=>array(63,-64,908,842),44607=>array(63,-76,907,842),44608=>array(63,-62,907,842),44609=>array(63,-61,907,842),44610=>array(63,-69,922,842),44611=>array(63,-74,929,842),44612=>array(63,-69,927,842),44613=>array(63,-68,911,842),44614=>array(63,-72,929,842),44615=>array(63,-70,936,842),44616=>array(63,-66,908,842),44617=>array(63,-59,916,842),44618=>array(63,-60,928,842),44619=>array(63,-68,908,842),44620=>array(46,-69,936,842),44621=>array(88,-59,936,842),44622=>array(88,-61,936,842),44623=>array(88,-71,936,842),44624=>array(60,-45,936,842),44625=>array(88,-69,936,842),44626=>array(88,-76,936,842),44627=>array(88,-44,936,842),44628=>array(88,-62,936,842),44629=>array(88,-64,936,842),44630=>array(88,-64,936,842),44631=>array(88,-64,936,842),44632=>array(88,-70,936,842),44633=>array(88,-64,936,842),44634=>array(88,-64,936,842),44635=>array(88,-76,936,842),44636=>array(88,-62,936,842),44637=>array(88,-61,936,842),44638=>array(88,-70,936,842),44639=>array(88,-74,936,842),44640=>array(88,-69,936,842),44641=>array(88,-67,936,842),44642=>array(88,-72,936,842),44643=>array(88,-71,936,842),44644=>array(88,-66,936,842),44645=>array(88,-59,936,842),44646=>array(88,-60,936,842),44647=>array(88,-69,936,842),44648=>array(41,-69,907,842),44649=>array(68,-61,907,837),44650=>array(68,-61,907,837),44651=>array(68,-71,931,837),44652=>array(50,-46,907,842),44653=>array(68,-68,912,837),44654=>array(68,-76,907,837),44655=>array(68,-44,921,837),44656=>array(68,-62,917,837),44657=>array(68,-64,907,837),44658=>array(68,-64,908,837),44659=>array(68,-64,908,837),44660=>array(68,-69,923,837),44661=>array(68,-64,908,837),44662=>array(68,-64,908,837),44663=>array(68,-76,907,837),44664=>array(68,-62,907,837),44665=>array(68,-61,907,837),44666=>array(68,-69,922,837),44667=>array(68,-74,929,837),44668=>array(68,-69,927,837),44669=>array(68,-68,911,837),44670=>array(68,-72,929,837),44671=>array(68,-70,936,837),44672=>array(68,-66,908,837),44673=>array(68,-59,916,837),44674=>array(68,-60,928,837),44675=>array(68,-68,908,837),44676=>array(46,-69,936,842),44677=>array(88,-59,936,842),44678=>array(88,-61,936,842),44679=>array(88,-71,936,842),44680=>array(60,-45,936,842),44681=>array(88,-69,936,842),44682=>array(88,-76,936,842),44683=>array(88,-44,936,842),44684=>array(88,-62,936,842),44685=>array(88,-64,936,842),44686=>array(88,-64,936,842),44687=>array(88,-64,936,842),44688=>array(88,-70,936,842),44689=>array(88,-64,936,842),44690=>array(88,-64,936,842),44691=>array(88,-76,936,842),44692=>array(88,-62,936,842),44693=>array(88,-61,936,842),44694=>array(88,-70,936,842),44695=>array(88,-74,936,842),44696=>array(88,-69,936,842),44697=>array(88,-67,936,842),44698=>array(88,-72,936,842),44699=>array(88,-71,936,842),44700=>array(88,-66,936,842),44701=>array(88,-59,936,842),44702=>array(88,-60,936,842),44703=>array(88,-69,936,842),44704=>array(41,-69,907,842),44705=>array(68,-61,907,842),44706=>array(68,-61,907,842),44707=>array(68,-71,931,842),44708=>array(50,-46,907,842),44709=>array(68,-68,912,842),44710=>array(68,-76,907,842),44711=>array(68,-44,921,842),44712=>array(68,-62,917,842),44713=>array(68,-64,907,842),44714=>array(68,-64,908,842),44715=>array(68,-64,908,842),44716=>array(68,-69,923,842),44717=>array(68,-64,908,842),44718=>array(68,-64,908,842),44719=>array(68,-76,907,842),44720=>array(68,-62,907,842),44721=>array(68,-61,907,842),44722=>array(68,-69,922,842),44723=>array(68,-74,929,842),44724=>array(68,-69,927,842),44725=>array(68,-68,911,842),44726=>array(68,-72,929,842),44727=>array(68,-70,936,842),44728=>array(68,-66,908,842),44729=>array(68,-59,916,842),44730=>array(68,-60,928,842),44731=>array(68,-68,908,842),44732=>array(46,-70,907,841),44733=>array(88,-61,907,836),44734=>array(88,-61,907,836),44735=>array(88,-71,931,836),44736=>array(60,-46,907,841),44737=>array(88,-68,912,836),44738=>array(88,-76,907,836),44739=>array(88,-44,921,836),44740=>array(88,-62,917,836),44741=>array(88,-64,907,836),44742=>array(88,-64,908,836),44743=>array(88,-64,908,836),44744=>array(88,-69,923,836),44745=>array(88,-64,908,836),44746=>array(88,-64,908,836),44747=>array(88,-76,906,836),44748=>array(88,-62,907,836),44749=>array(88,-61,907,836),44750=>array(88,-69,922,836),44751=>array(88,-74,929,836),44752=>array(88,-69,927,836),44753=>array(88,-68,911,836),44754=>array(88,-72,929,836),44755=>array(88,-70,936,836),44756=>array(88,-66,908,836),44757=>array(88,-59,916,836),44758=>array(88,-60,928,836),44759=>array(88,-68,908,836),44760=>array(36,-68,907,843),44761=>array(53,-61,907,843),44762=>array(53,-61,907,843),44763=>array(53,-71,931,843),44764=>array(35,-46,907,843),44765=>array(53,-68,912,843),44766=>array(53,-76,907,843),44767=>array(53,-44,921,843),44768=>array(53,-62,917,843),44769=>array(53,-64,907,843),44770=>array(53,-64,908,843),44771=>array(53,-64,908,843),44772=>array(53,-69,923,843),44773=>array(53,-64,908,843),44774=>array(53,-64,908,843),44775=>array(53,-76,907,843),44776=>array(53,-62,907,843),44777=>array(53,-61,907,843),44778=>array(53,-69,922,843),44779=>array(53,-74,929,843),44780=>array(53,-69,927,843),44781=>array(53,-68,911,843),44782=>array(53,-72,929,843),44783=>array(53,-70,936,843),44784=>array(53,-66,908,843),44785=>array(53,-59,916,843),44786=>array(53,-60,928,843),44787=>array(53,-68,908,843),44788=>array(46,-69,908,842),44789=>array(88,-61,909,842),44790=>array(88,-61,909,842),44791=>array(88,-71,931,842),44792=>array(60,-46,909,841),44793=>array(88,-68,912,842),44794=>array(88,-76,909,842),44795=>array(88,-44,921,842),44796=>array(88,-62,917,842),44797=>array(88,-64,909,842),44798=>array(88,-64,909,842),44799=>array(88,-64,909,842),44800=>array(88,-69,923,842),44801=>array(88,-64,909,842),44802=>array(88,-64,909,842),44803=>array(88,-76,909,842),44804=>array(88,-62,909,842),44805=>array(88,-61,909,842),44806=>array(88,-69,922,842),44807=>array(88,-74,929,842),44808=>array(88,-69,927,842),44809=>array(88,-68,911,842),44810=>array(88,-72,929,842),44811=>array(88,-70,936,842),44812=>array(88,-66,909,842),44813=>array(88,-59,916,842),44814=>array(88,-60,928,842),44815=>array(88,-68,909,842),44816=>array(36,-68,907,843),44817=>array(53,-61,907,838),44818=>array(53,-61,907,838),44819=>array(53,-71,931,838),44820=>array(35,-46,907,843),44821=>array(53,-68,912,838),44822=>array(53,-76,907,838),44823=>array(53,-44,921,838),44824=>array(53,-62,917,838),44825=>array(53,-64,907,838),44826=>array(53,-64,908,838),44827=>array(53,-64,908,838),44828=>array(53,-69,923,838),44829=>array(53,-64,908,838),44830=>array(53,-64,908,838),44831=>array(53,-76,907,838),44832=>array(53,-62,907,838),44833=>array(53,-61,907,838),44834=>array(53,-69,922,838),44835=>array(53,-74,929,838),44836=>array(53,-69,927,838),44837=>array(53,-68,911,838),44838=>array(53,-72,929,838),44839=>array(53,-70,936,838),44840=>array(53,-66,908,838),44841=>array(53,-59,916,838),44842=>array(53,-60,928,838),44843=>array(53,-68,908,838),44844=>array(60,12,940,714),44845=>array(79,-61,921,767),44846=>array(79,-61,921,767),44847=>array(79,-71,921,767),44848=>array(79,-46,921,766),44849=>array(79,-68,921,767),44850=>array(79,-74,921,767),44851=>array(79,-44,921,767),44852=>array(79,-62,921,767),44853=>array(79,-64,921,767),44854=>array(79,-64,921,767),44855=>array(79,-63,921,767),44856=>array(79,-68,921,767),44857=>array(79,-64,921,767),44858=>array(79,-63,921,767),44859=>array(79,-74,921,767),44860=>array(79,-62,921,767),44861=>array(79,-61,921,767),44862=>array(79,-69,921,767),44863=>array(79,-74,921,767),44864=>array(79,-69,921,767),44865=>array(79,-68,921,767),44866=>array(79,-72,921,767),44867=>array(79,-70,921,767),44868=>array(79,-66,921,767),44869=>array(79,-59,921,767),44870=>array(79,-60,921,767),44871=>array(79,-68,921,767),44872=>array(52,-69,936,842),44873=>array(69,-59,936,837),44874=>array(69,-61,936,837),44875=>array(69,-71,936,837),44876=>array(72,-45,936,842),44877=>array(69,-69,936,837),44878=>array(69,-76,936,837),44879=>array(69,-44,936,837),44880=>array(69,-62,936,837),44881=>array(69,-64,936,837),44882=>array(69,-64,936,837),44883=>array(69,-64,936,837),44884=>array(69,-70,936,837),44885=>array(69,-64,936,837),44886=>array(69,-64,936,837),44887=>array(69,-76,936,837),44888=>array(69,-62,936,837),44889=>array(69,-61,936,837),44890=>array(69,-70,936,837),44891=>array(69,-74,936,837),44892=>array(69,-69,936,837),44893=>array(69,-67,936,837),44894=>array(69,-72,936,837),44895=>array(69,-71,936,837),44896=>array(69,-66,936,837),44897=>array(69,-59,936,837),44898=>array(69,-60,936,837),44899=>array(69,-69,936,837),44900=>array(68,-69,907,842),44901=>array(70,-61,907,842),44902=>array(70,-61,907,842),44903=>array(70,-71,931,842),44904=>array(57,-46,907,842),44905=>array(70,-68,912,842),44906=>array(70,-76,907,842),44907=>array(70,-44,921,842),44908=>array(70,-62,917,842),44909=>array(70,-64,907,842),44910=>array(70,-64,908,842),44911=>array(70,-64,908,842),44912=>array(70,-69,923,842),44913=>array(70,-64,908,842),44914=>array(70,-64,908,842),44915=>array(70,-76,907,842),44916=>array(70,-62,907,842),44917=>array(70,-61,907,842),44918=>array(70,-69,922,842),44919=>array(70,-74,929,842),44920=>array(70,-69,927,842),44921=>array(70,-68,911,842),44922=>array(70,-72,929,842),44923=>array(70,-70,936,842),44924=>array(70,-66,908,842),44925=>array(70,-59,916,842),44926=>array(70,-60,928,842),44927=>array(70,-68,908,842),44928=>array(78,-69,907,842),44929=>array(64,-61,907,842),44930=>array(64,-61,907,842),44931=>array(64,-71,931,842),44932=>array(69,-46,907,842),44933=>array(64,-68,912,842),44934=>array(64,-76,907,842),44935=>array(64,-44,921,842),44936=>array(64,-62,917,842),44937=>array(64,-64,907,842),44938=>array(64,-64,908,842),44939=>array(64,-64,908,842),44940=>array(64,-69,923,842),44941=>array(64,-64,908,842),44942=>array(64,-64,908,842),44943=>array(64,-76,907,842),44944=>array(64,-62,907,842),44945=>array(64,-61,907,842),44946=>array(64,-69,922,842),44947=>array(64,-74,929,842),44948=>array(64,-69,927,842),44949=>array(64,-68,911,842),44950=>array(64,-72,929,842),44951=>array(64,-70,936,842),44952=>array(64,-66,908,842),44953=>array(64,-59,916,842),44954=>array(64,-60,928,842),44955=>array(64,-68,908,842),44956=>array(60,32,940,714),44957=>array(79,-61,921,794),44958=>array(79,-61,921,794),44959=>array(79,-71,921,794),44960=>array(79,-46,921,785),44961=>array(79,-68,921,794),44962=>array(79,-74,921,794),44963=>array(79,-44,921,794),44964=>array(79,-62,921,794),44965=>array(79,-64,921,794),44966=>array(79,-64,921,794),44967=>array(79,-63,921,794),44968=>array(79,-68,921,794),44969=>array(79,-64,921,794),44970=>array(79,-63,921,794),44971=>array(79,-74,921,794),44972=>array(79,-62,921,794),44973=>array(79,-61,921,794),44974=>array(79,-69,921,794),44975=>array(79,-74,921,794),44976=>array(79,-69,921,794),44977=>array(79,-68,921,794),44978=>array(79,-72,921,794),44979=>array(79,-70,921,794),44980=>array(79,-66,921,794),44981=>array(79,-59,921,794),44982=>array(79,-60,921,794),44983=>array(79,-68,921,794),44984=>array(79,-64,921,776),44985=>array(79,-61,921,766),44986=>array(79,-61,921,766),44987=>array(79,-71,921,766),44988=>array(79,-46,921,767),44989=>array(79,-68,921,766),44990=>array(79,-74,921,766),44991=>array(79,-44,921,766),44992=>array(79,-62,921,766),44993=>array(79,-64,921,766),44994=>array(79,-64,921,766),44995=>array(79,-63,921,766),44996=>array(79,-68,921,766),44997=>array(79,-64,921,766),44998=>array(79,-63,921,766),44999=>array(79,-74,921,766),45000=>array(79,-62,921,766),45001=>array(79,-61,921,766),45002=>array(79,-69,921,766),45003=>array(79,-74,921,766),45004=>array(79,-69,921,766),45005=>array(79,-68,921,766),45006=>array(79,-72,921,766),45007=>array(79,-70,921,766),45008=>array(79,-66,921,766),45009=>array(79,-59,921,766),45010=>array(79,-60,921,766),45011=>array(79,-68,921,766),45012=>array(78,-70,907,841),45013=>array(68,-61,907,841),45014=>array(68,-61,907,841),45015=>array(68,-71,931,841),45016=>array(80,-46,907,841),45017=>array(68,-68,912,841),45018=>array(68,-76,907,841),45019=>array(68,-44,921,841),45020=>array(68,-62,917,841),45021=>array(68,-64,907,841),45022=>array(68,-64,908,841),45023=>array(68,-64,908,841),45024=>array(68,-69,923,841),45025=>array(68,-64,908,841),45026=>array(68,-64,908,841),45027=>array(68,-76,906,841),45028=>array(68,-62,907,841),45029=>array(68,-61,907,841),45030=>array(68,-69,922,841),45031=>array(68,-74,929,841),45032=>array(68,-69,927,841),45033=>array(68,-68,911,841),45034=>array(68,-72,929,841),45035=>array(68,-70,936,841),45036=>array(68,-66,908,841),45037=>array(68,-59,916,841),45038=>array(68,-60,928,841),45039=>array(68,-68,908,841),45040=>array(50,-68,912,843),45041=>array(67,-61,907,838),45042=>array(67,-61,907,838),45043=>array(67,-71,931,838),45044=>array(75,-46,907,843),45045=>array(67,-68,912,838),45046=>array(67,-76,907,838),45047=>array(67,-44,921,838),45048=>array(67,-62,917,838),45049=>array(67,-64,907,838),45050=>array(67,-64,908,838),45051=>array(67,-64,908,838),45052=>array(67,-69,923,838),45053=>array(67,-64,908,838),45054=>array(67,-64,908,838),45055=>array(67,-76,907,838),45056=>array(67,-62,907,838),45057=>array(67,-61,907,838),45058=>array(67,-69,922,838),45059=>array(67,-74,929,838),45060=>array(67,-69,927,838),45061=>array(67,-68,911,838),45062=>array(67,-72,929,838),45063=>array(67,-70,936,838),45064=>array(67,-66,908,838),45065=>array(67,-59,916,838),45066=>array(67,-60,928,838),45067=>array(67,-68,908,838),45068=>array(64,-69,907,842),45069=>array(65,-61,907,842),45070=>array(65,-61,907,842),45071=>array(65,-71,931,842),45072=>array(78,-46,907,842),45073=>array(65,-68,912,842),45074=>array(65,-76,907,842),45075=>array(65,-44,921,842),45076=>array(65,-62,917,842),45077=>array(65,-64,907,842),45078=>array(65,-64,908,842),45079=>array(65,-64,908,842),45080=>array(65,-69,923,842),45081=>array(65,-64,908,842),45082=>array(65,-64,908,842),45083=>array(65,-76,907,842),45084=>array(65,-62,907,842),45085=>array(65,-61,907,842),45086=>array(65,-69,922,842),45087=>array(65,-74,929,842),45088=>array(65,-69,927,842),45089=>array(65,-68,911,842),45090=>array(65,-72,929,842),45091=>array(65,-70,936,842),45092=>array(65,-66,908,842),45093=>array(65,-59,916,842),45094=>array(65,-60,928,842),45095=>array(65,-68,908,842),45096=>array(84,-64,921,776),45097=>array(79,-61,921,766),45098=>array(79,-61,921,766),45099=>array(79,-71,921,766),45100=>array(81,-46,922,767),45101=>array(79,-68,921,766),45102=>array(79,-74,921,766),45103=>array(79,-44,921,766),45104=>array(79,-62,921,766),45105=>array(79,-64,921,766),45106=>array(79,-64,921,766),45107=>array(79,-63,921,766),45108=>array(79,-68,921,766),45109=>array(79,-64,921,766),45110=>array(79,-63,921,766),45111=>array(79,-74,921,766),45112=>array(79,-62,921,766),45113=>array(79,-61,921,766),45114=>array(79,-69,921,766),45115=>array(79,-74,921,766),45116=>array(79,-69,921,766),45117=>array(79,-68,921,766),45118=>array(79,-72,921,766),45119=>array(79,-70,921,766),45120=>array(79,-66,921,766),45121=>array(79,-59,921,766),45122=>array(79,-60,921,766),45123=>array(79,-68,921,766),45124=>array(57,52,943,691),45125=>array(79,-61,921,767),45126=>array(79,-61,921,767),45127=>array(79,-71,921,767),45128=>array(79,-46,921,767),45129=>array(79,-68,921,767),45130=>array(79,-74,921,767),45131=>array(79,-44,921,767),45132=>array(79,-62,921,767),45133=>array(79,-64,921,767),45134=>array(79,-64,921,767),45135=>array(79,-63,921,767),45136=>array(79,-68,921,767),45137=>array(79,-64,921,767),45138=>array(79,-63,921,767),45139=>array(79,-74,921,767),45140=>array(79,-62,921,767),45141=>array(79,-61,921,767),45142=>array(79,-69,921,767),45143=>array(79,-74,921,767),45144=>array(79,-69,921,767),45145=>array(79,-68,921,767),45146=>array(79,-72,921,767),45147=>array(79,-70,921,767),45148=>array(79,-66,921,767),45149=>array(79,-59,921,767),45150=>array(79,-60,921,767),45151=>array(79,-68,921,767),45152=>array(66,-69,907,842),45153=>array(75,-61,907,842),45154=>array(75,-61,907,842),45155=>array(75,-71,931,842),45156=>array(74,-46,907,842),45157=>array(75,-68,912,842),45158=>array(75,-76,907,842),45159=>array(75,-44,921,842),45160=>array(75,-62,917,842),45161=>array(75,-64,907,842),45162=>array(75,-64,908,842),45163=>array(75,-64,908,842),45164=>array(75,-69,923,842),45165=>array(75,-64,908,842),45166=>array(75,-64,908,842),45167=>array(75,-76,907,842),45168=>array(75,-62,907,842),45169=>array(75,-61,907,842),45170=>array(75,-69,922,842),45171=>array(75,-74,929,842),45172=>array(75,-69,927,842),45173=>array(75,-68,911,842),45174=>array(75,-72,929,842),45175=>array(75,-70,936,842),45176=>array(75,-66,908,842),45177=>array(75,-59,916,842),45178=>array(75,-60,928,842),45179=>array(75,-68,908,842),45180=>array(56,-69,907,842),45181=>array(123,-61,907,842),45182=>array(123,-61,907,842),45183=>array(123,-71,931,842),45184=>array(105,-46,907,842),45185=>array(123,-68,912,842),45186=>array(123,-76,907,842),45187=>array(123,-44,921,842),45188=>array(123,-62,917,842),45189=>array(123,-64,907,842),45190=>array(123,-64,908,842),45191=>array(123,-64,908,842),45192=>array(123,-69,923,842),45193=>array(123,-64,908,842),45194=>array(123,-64,908,842),45195=>array(123,-76,907,842),45196=>array(123,-62,907,842),45197=>array(123,-61,907,842),45198=>array(123,-69,922,842),45199=>array(123,-74,929,842),45200=>array(123,-69,927,842),45201=>array(123,-68,911,842),45202=>array(123,-72,929,842),45203=>array(123,-70,936,842),45204=>array(123,-66,908,842),45205=>array(123,-59,916,842),45206=>array(123,-60,928,842),45207=>array(123,-68,908,842),45208=>array(109,-69,936,842),45209=>array(109,-59,936,842),45210=>array(109,-61,936,842),45211=>array(109,-71,936,842),45212=>array(109,-45,936,842),45213=>array(109,-69,936,842),45214=>array(109,-76,936,842),45215=>array(109,-44,936,842),45216=>array(109,-62,936,842),45217=>array(109,-64,936,842),45218=>array(109,-64,936,842),45219=>array(109,-64,936,842),45220=>array(109,-70,936,842),45221=>array(109,-64,936,842),45222=>array(109,-64,936,842),45223=>array(109,-76,936,842),45224=>array(109,-62,936,842),45225=>array(109,-61,936,842),45226=>array(109,-70,936,842),45227=>array(109,-74,936,842),45228=>array(109,-69,936,842),45229=>array(109,-67,936,842),45230=>array(109,-72,936,842),45231=>array(109,-71,936,842),45232=>array(109,-66,936,842),45233=>array(109,-59,936,842),45234=>array(109,-60,936,842),45235=>array(109,-69,936,842),45236=>array(133,-69,907,842),45237=>array(109,-61,907,842),45238=>array(109,-61,907,842),45239=>array(109,-71,931,842),45240=>array(109,-46,907,842),45241=>array(109,-68,912,842),45242=>array(109,-76,907,842),45243=>array(109,-44,921,842),45244=>array(109,-62,917,842),45245=>array(109,-64,907,842),45246=>array(109,-64,908,842),45247=>array(109,-64,908,842),45248=>array(109,-69,923,842),45249=>array(109,-64,908,842),45250=>array(109,-64,908,842),45251=>array(109,-76,907,842),45252=>array(109,-62,907,842),45253=>array(109,-61,907,842),45254=>array(109,-69,922,842),45255=>array(109,-74,929,842),45256=>array(109,-69,927,842),45257=>array(109,-68,911,842),45258=>array(109,-72,929,842),45259=>array(109,-70,936,842),45260=>array(109,-66,908,842),45261=>array(109,-59,916,842),45262=>array(109,-60,928,842),45263=>array(109,-68,908,842),45264=>array(109,-69,936,842),45265=>array(109,-59,936,842),45266=>array(109,-61,936,842),45267=>array(109,-71,936,842),45268=>array(109,-45,936,842),45269=>array(109,-69,936,842),45270=>array(109,-76,936,842),45271=>array(109,-44,936,842),45272=>array(109,-62,936,842),45273=>array(109,-64,936,842),45274=>array(109,-64,936,842),45275=>array(109,-64,936,842),45276=>array(109,-70,936,842),45277=>array(109,-64,936,842),45278=>array(109,-64,936,842),45279=>array(109,-76,936,842),45280=>array(109,-62,936,842),45281=>array(109,-61,936,842),45282=>array(109,-70,936,842),45283=>array(109,-74,936,842),45284=>array(109,-69,936,842),45285=>array(109,-67,936,842),45286=>array(109,-72,936,842),45287=>array(109,-71,936,842),45288=>array(109,-66,936,842),45289=>array(109,-59,936,842),45290=>array(109,-60,936,842),45291=>array(109,-69,936,842),45292=>array(133,-69,907,842),45293=>array(109,-61,907,842),45294=>array(109,-61,907,842),45295=>array(109,-71,931,842),45296=>array(109,-46,907,842),45297=>array(109,-68,912,842),45298=>array(109,-76,907,842),45299=>array(109,-44,921,842),45300=>array(109,-62,917,842),45301=>array(109,-64,907,842),45302=>array(109,-64,908,842),45303=>array(109,-64,908,842),45304=>array(109,-69,923,842),45305=>array(109,-64,908,842),45306=>array(109,-64,908,842),45307=>array(109,-76,907,842),45308=>array(109,-62,907,842),45309=>array(109,-61,907,842),45310=>array(109,-69,922,842),45311=>array(109,-74,929,842),45312=>array(109,-69,927,842),45313=>array(109,-68,911,842),45314=>array(109,-72,929,842),45315=>array(109,-70,936,842),45316=>array(109,-66,908,842),45317=>array(109,-59,916,842),45318=>array(109,-60,928,842),45319=>array(109,-68,908,842),45320=>array(109,-70,907,841),45321=>array(109,-61,907,841),45322=>array(109,-61,907,841),45323=>array(109,-71,931,841),45324=>array(109,-46,907,841),45325=>array(109,-68,912,841),45326=>array(109,-76,907,841),45327=>array(109,-44,921,841),45328=>array(109,-62,917,841),45329=>array(109,-64,907,841),45330=>array(109,-64,908,841),45331=>array(109,-64,908,841),45332=>array(109,-69,923,841),45333=>array(109,-64,908,841),45334=>array(109,-64,908,841),45335=>array(109,-76,906,841),45336=>array(109,-62,907,841),45337=>array(109,-61,907,841),45338=>array(109,-69,922,841),45339=>array(109,-74,929,841),45340=>array(109,-69,927,841),45341=>array(109,-68,911,841),45342=>array(109,-72,929,841),45343=>array(109,-70,936,841),45344=>array(109,-66,908,841),45345=>array(109,-59,916,841),45346=>array(109,-60,928,841),45347=>array(109,-68,908,841),45348=>array(134,-68,907,843),45349=>array(109,-61,907,843),45350=>array(109,-61,907,843),45351=>array(109,-71,931,843),45352=>array(109,-46,907,843),45353=>array(109,-68,912,843),45354=>array(109,-76,907,843),45355=>array(109,-44,921,843),45356=>array(109,-62,917,843),45357=>array(109,-64,907,843),45358=>array(109,-64,908,843),45359=>array(109,-64,908,843),45360=>array(109,-69,923,843),45361=>array(109,-64,908,843),45362=>array(109,-64,908,843),45363=>array(109,-76,907,843),45364=>array(109,-62,907,843),45365=>array(109,-61,907,843),45366=>array(109,-69,922,843),45367=>array(109,-74,929,843),45368=>array(109,-69,927,843),45369=>array(109,-68,911,843),45370=>array(109,-72,929,843),45371=>array(109,-70,936,843),45372=>array(109,-66,908,843),45373=>array(109,-59,916,843),45374=>array(109,-60,928,843),45375=>array(109,-68,908,843),45376=>array(109,-69,909,842),45377=>array(109,-61,907,842),45378=>array(109,-61,907,842),45379=>array(109,-71,931,842),45380=>array(109,-46,908,841),45381=>array(109,-68,912,842),45382=>array(109,-76,907,842),45383=>array(109,-44,921,842),45384=>array(109,-62,917,842),45385=>array(109,-64,907,842),45386=>array(109,-64,908,842),45387=>array(109,-64,908,842),45388=>array(109,-69,923,842),45389=>array(109,-64,908,842),45390=>array(109,-64,908,842),45391=>array(109,-76,907,842),45392=>array(109,-62,907,842),45393=>array(109,-61,907,842),45394=>array(109,-69,922,842),45395=>array(109,-74,929,842),45396=>array(109,-69,927,842),45397=>array(109,-68,911,842),45398=>array(109,-72,929,842),45399=>array(109,-70,936,842),45400=>array(109,-66,908,842),45401=>array(109,-59,916,842),45402=>array(109,-60,928,842),45403=>array(109,-68,908,842),45404=>array(144,-68,907,843),45405=>array(109,-61,907,838),45406=>array(109,-61,907,838),45407=>array(109,-71,931,838),45408=>array(109,-46,907,843),45409=>array(109,-68,912,838),45410=>array(109,-76,907,838),45411=>array(109,-44,921,838),45412=>array(109,-62,917,838),45413=>array(109,-64,907,838),45414=>array(109,-64,908,838),45415=>array(109,-64,908,838),45416=>array(109,-69,923,838),45417=>array(109,-64,908,838),45418=>array(109,-64,908,838),45419=>array(109,-76,907,838),45420=>array(109,-62,907,838),45421=>array(109,-61,907,838),45422=>array(109,-69,922,838),45423=>array(109,-74,929,838),45424=>array(109,-69,927,838),45425=>array(109,-68,911,838),45426=>array(109,-72,929,838),45427=>array(109,-70,936,838),45428=>array(109,-66,908,838),45429=>array(109,-59,916,838),45430=>array(109,-60,928,838),45431=>array(109,-68,908,838),45432=>array(62,27,943,732),45433=>array(79,-61,921,797),45434=>array(79,-61,921,797),45435=>array(79,-71,921,797),45436=>array(79,-46,921,792),45437=>array(79,-68,921,797),45438=>array(79,-74,921,797),45439=>array(79,-44,921,797),45440=>array(79,-62,921,797),45441=>array(79,-64,921,797),45442=>array(79,-64,921,797),45443=>array(79,-63,921,797),45444=>array(79,-68,921,797),45445=>array(79,-64,921,797),45446=>array(79,-63,921,797),45447=>array(79,-74,921,797),45448=>array(79,-62,921,797),45449=>array(79,-61,921,797),45450=>array(79,-69,921,797),45451=>array(79,-74,921,797),45452=>array(79,-69,921,797),45453=>array(79,-68,921,797),45454=>array(79,-72,921,797),45455=>array(79,-70,921,797),45456=>array(79,-66,921,797),45457=>array(79,-59,921,797),45458=>array(79,-60,921,797),45459=>array(79,-68,921,797),45460=>array(47,-69,936,842),45461=>array(64,-59,936,842),45462=>array(64,-61,936,842),45463=>array(64,-71,936,842),45464=>array(74,-45,936,842),45465=>array(64,-69,936,842),45466=>array(64,-76,936,842),45467=>array(64,-44,936,842),45468=>array(64,-62,936,842),45469=>array(64,-64,936,842),45470=>array(64,-64,936,842),45471=>array(64,-64,936,842),45472=>array(64,-70,936,842),45473=>array(64,-64,936,842),45474=>array(64,-64,936,842),45475=>array(64,-76,936,842),45476=>array(64,-62,936,842),45477=>array(64,-61,936,842),45478=>array(64,-70,936,842),45479=>array(64,-74,936,842),45480=>array(64,-69,936,842),45481=>array(64,-67,936,842),45482=>array(64,-72,936,842),45483=>array(64,-71,936,842),45484=>array(64,-66,936,842),45485=>array(64,-59,936,842),45486=>array(64,-60,936,842),45487=>array(64,-69,936,842),45488=>array(43,-68,907,843),45489=>array(79,-61,907,843),45490=>array(79,-61,907,843),45491=>array(79,-71,931,843),45492=>array(72,-46,907,842),45493=>array(79,-68,912,843),45494=>array(79,-76,907,843),45495=>array(79,-44,921,843),45496=>array(79,-62,917,843),45497=>array(79,-64,907,843),45498=>array(79,-64,908,843),45499=>array(79,-64,908,843),45500=>array(79,-69,923,843),45501=>array(79,-64,908,843),45502=>array(79,-64,908,843),45503=>array(79,-76,907,843),45504=>array(79,-62,907,843),45505=>array(79,-61,907,843),45506=>array(79,-69,922,843),45507=>array(79,-74,929,843),45508=>array(79,-69,927,843),45509=>array(79,-68,911,843),45510=>array(79,-72,929,843),45511=>array(79,-70,936,843),45512=>array(79,-66,908,843),45513=>array(79,-59,916,843),45514=>array(79,-60,928,843),45515=>array(79,-68,908,843),45516=>array(62,-69,907,842),45517=>array(64,-61,908,842),45518=>array(64,-61,908,842),45519=>array(64,-71,931,842),45520=>array(64,-46,908,841),45521=>array(64,-68,912,842),45522=>array(64,-76,908,842),45523=>array(64,-44,921,842),45524=>array(64,-62,917,842),45525=>array(64,-64,908,842),45526=>array(64,-64,908,842),45527=>array(64,-64,908,842),45528=>array(64,-69,923,842),45529=>array(64,-64,908,842),45530=>array(64,-64,908,842),45531=>array(64,-76,908,842),45532=>array(64,-62,908,842),45533=>array(64,-61,908,842),45534=>array(64,-69,922,842),45535=>array(64,-74,929,842),45536=>array(64,-69,927,842),45537=>array(64,-68,911,842),45538=>array(64,-72,929,842),45539=>array(64,-70,936,842),45540=>array(64,-66,908,842),45541=>array(64,-59,916,842),45542=>array(64,-60,928,842),45543=>array(64,-68,908,842),45544=>array(60,-13,940,742),45545=>array(79,-61,922,797),45546=>array(79,-61,922,797),45547=>array(79,-71,922,797),45548=>array(79,-46,922,797),45549=>array(79,-68,922,797),45550=>array(79,-74,922,797),45551=>array(79,-44,922,797),45552=>array(79,-62,922,797),45553=>array(79,-64,922,797),45554=>array(79,-64,922,797),45555=>array(79,-63,922,797),45556=>array(79,-68,922,797),45557=>array(79,-64,922,797),45558=>array(79,-63,922,797),45559=>array(79,-74,922,797),45560=>array(79,-62,922,797),45561=>array(79,-61,922,797),45562=>array(79,-69,922,797),45563=>array(79,-74,922,797),45564=>array(79,-69,922,797),45565=>array(79,-68,922,797),45566=>array(79,-72,922,797),45567=>array(79,-70,922,797),45568=>array(79,-66,922,797),45569=>array(79,-59,922,797),45570=>array(79,-60,922,797),45571=>array(79,-68,922,797),45572=>array(79,-64,921,797),45573=>array(79,-61,921,797),45574=>array(79,-61,921,797),45575=>array(79,-71,921,797),45576=>array(79,-46,921,797),45577=>array(79,-68,921,797),45578=>array(79,-74,921,797),45579=>array(79,-44,921,797),45580=>array(79,-62,921,797),45581=>array(79,-64,921,797),45582=>array(79,-64,921,797),45583=>array(79,-63,921,797),45584=>array(79,-68,921,797),45585=>array(79,-64,921,797),45586=>array(79,-63,921,797),45587=>array(79,-74,921,797),45588=>array(79,-62,921,797),45589=>array(79,-61,921,797),45590=>array(79,-69,921,797),45591=>array(79,-74,921,797),45592=>array(79,-69,921,797),45593=>array(79,-68,921,797),45594=>array(79,-72,921,797),45595=>array(79,-70,921,797),45596=>array(79,-66,921,797),45597=>array(79,-59,921,797),45598=>array(79,-60,921,797),45599=>array(79,-68,921,797),45600=>array(69,-69,909,842),45601=>array(79,-61,907,841),45602=>array(79,-61,907,841),45603=>array(79,-71,931,841),45604=>array(79,-46,907,841),45605=>array(79,-68,912,841),45606=>array(79,-76,907,841),45607=>array(79,-44,921,841),45608=>array(79,-62,917,841),45609=>array(79,-64,907,841),45610=>array(79,-64,908,841),45611=>array(79,-64,908,841),45612=>array(79,-69,923,841),45613=>array(79,-64,908,841),45614=>array(79,-64,908,841),45615=>array(79,-76,906,841),45616=>array(79,-62,907,841),45617=>array(79,-61,907,841),45618=>array(79,-69,922,841),45619=>array(79,-74,929,841),45620=>array(79,-69,927,841),45621=>array(79,-68,911,841),45622=>array(79,-72,929,841),45623=>array(79,-70,936,841),45624=>array(79,-66,908,841),45625=>array(79,-59,916,841),45626=>array(79,-60,928,841),45627=>array(79,-68,908,841),45628=>array(63,-68,907,843),45629=>array(72,-61,907,843),45630=>array(72,-61,907,843),45631=>array(72,-71,931,843),45632=>array(90,-46,907,843),45633=>array(72,-68,912,843),45634=>array(72,-76,907,843),45635=>array(72,-44,921,843),45636=>array(72,-62,917,843),45637=>array(72,-64,907,843),45638=>array(72,-64,908,843),45639=>array(72,-64,908,843),45640=>array(72,-69,923,843),45641=>array(72,-64,908,843),45642=>array(72,-64,908,843),45643=>array(72,-76,907,843),45644=>array(72,-62,907,843),45645=>array(72,-61,907,843),45646=>array(72,-69,922,843),45647=>array(72,-74,929,843),45648=>array(72,-69,927,843),45649=>array(72,-68,911,843),45650=>array(72,-72,929,843),45651=>array(72,-70,936,843),45652=>array(72,-66,908,843),45653=>array(72,-59,916,843),45654=>array(72,-60,928,843),45655=>array(72,-68,908,843),45656=>array(70,-68,910,843),45657=>array(64,-61,907,842),45658=>array(64,-61,907,842),45659=>array(64,-71,931,842),45660=>array(65,-46,907,841),45661=>array(64,-68,912,842),45662=>array(64,-76,907,842),45663=>array(64,-44,921,842),45664=>array(64,-62,917,842),45665=>array(64,-64,907,842),45666=>array(64,-64,908,842),45667=>array(64,-64,908,842),45668=>array(64,-69,923,842),45669=>array(64,-64,908,842),45670=>array(64,-64,908,842),45671=>array(64,-76,907,842),45672=>array(64,-62,907,842),45673=>array(64,-61,907,842),45674=>array(64,-69,922,842),45675=>array(64,-74,929,842),45676=>array(64,-69,927,842),45677=>array(64,-68,911,842),45678=>array(64,-72,929,842),45679=>array(64,-70,936,842),45680=>array(64,-66,908,842),45681=>array(64,-59,916,842),45682=>array(64,-60,928,842),45683=>array(64,-68,908,842),45684=>array(71,-64,928,797),45685=>array(79,-61,921,797),45686=>array(79,-61,921,797),45687=>array(79,-71,921,797),45688=>array(79,-46,921,797),45689=>array(79,-68,921,797),45690=>array(79,-74,921,797),45691=>array(79,-44,921,797),45692=>array(79,-62,921,797),45693=>array(79,-64,921,797),45694=>array(79,-64,921,797),45695=>array(79,-63,921,797),45696=>array(79,-68,921,797),45697=>array(79,-64,921,797),45698=>array(79,-63,921,797),45699=>array(79,-74,921,797),45700=>array(79,-62,921,797),45701=>array(79,-61,921,797),45702=>array(79,-69,921,797),45703=>array(79,-74,921,797),45704=>array(79,-69,921,797),45705=>array(79,-68,921,797),45706=>array(79,-72,921,797),45707=>array(79,-70,921,797),45708=>array(79,-66,921,797),45709=>array(79,-59,921,797),45710=>array(79,-60,921,797),45711=>array(79,-68,921,797),45712=>array(57,32,943,747),45713=>array(79,-61,921,802),45714=>array(79,-61,921,802),45715=>array(79,-71,921,802),45716=>array(79,-46,921,812),45717=>array(79,-68,921,802),45718=>array(79,-74,921,802),45719=>array(79,-44,921,802),45720=>array(79,-62,921,802),45721=>array(79,-64,921,802),45722=>array(79,-64,921,802),45723=>array(79,-63,921,802),45724=>array(79,-68,921,802),45725=>array(79,-64,921,802),45726=>array(79,-63,921,802),45727=>array(79,-74,921,802),45728=>array(79,-62,921,802),45729=>array(79,-61,921,802),45730=>array(79,-69,921,802),45731=>array(79,-74,921,802),45732=>array(79,-69,921,802),45733=>array(79,-68,921,802),45734=>array(79,-72,921,802),45735=>array(79,-70,921,802),45736=>array(79,-66,921,802),45737=>array(79,-59,921,802),45738=>array(79,-60,921,802),45739=>array(79,-68,921,802),45740=>array(68,-69,907,842),45741=>array(69,-61,907,842),45742=>array(69,-61,907,842),45743=>array(69,-71,931,842),45744=>array(65,-46,907,842),45745=>array(69,-68,912,842),45746=>array(69,-76,907,842),45747=>array(69,-44,921,842),45748=>array(69,-62,917,842),45749=>array(69,-64,907,842),45750=>array(69,-64,908,842),45751=>array(69,-64,908,842),45752=>array(69,-69,923,842),45753=>array(69,-64,908,842),45754=>array(69,-64,908,842),45755=>array(69,-76,907,842),45756=>array(69,-62,907,842),45757=>array(69,-61,907,842),45758=>array(69,-69,922,842),45759=>array(69,-74,929,842),45760=>array(69,-69,927,842),45761=>array(69,-68,911,842),45762=>array(69,-72,929,842),45763=>array(69,-70,936,842),45764=>array(69,-66,908,842),45765=>array(69,-59,916,842),45766=>array(69,-60,928,842),45767=>array(69,-68,908,842),45768=>array(138,-69,907,842),45769=>array(138,-61,907,842),45770=>array(138,-61,907,842),45771=>array(138,-71,931,842),45772=>array(138,-46,907,842),45773=>array(138,-68,912,842),45774=>array(138,-76,907,842),45775=>array(138,-44,921,842),45776=>array(138,-62,917,842),45777=>array(138,-64,907,842),45778=>array(138,-64,908,842),45779=>array(138,-64,908,842),45780=>array(138,-69,923,842),45781=>array(138,-64,908,842),45782=>array(138,-64,908,842),45783=>array(138,-76,907,842),45784=>array(138,-62,907,842),45785=>array(138,-61,907,842),45786=>array(138,-69,922,842),45787=>array(138,-74,929,842),45788=>array(138,-69,927,842),45789=>array(138,-68,911,842),45790=>array(138,-72,929,842),45791=>array(138,-70,936,842),45792=>array(138,-66,908,842),45793=>array(138,-59,916,842),45794=>array(138,-60,928,842),45795=>array(138,-68,908,842),45796=>array(109,-69,936,842),45797=>array(109,-59,936,837),45798=>array(109,-61,936,837),45799=>array(109,-71,936,837),45800=>array(109,-45,936,842),45801=>array(109,-69,936,837),45802=>array(109,-76,936,837),45803=>array(109,-44,936,837),45804=>array(109,-62,936,837),45805=>array(109,-64,936,837),45806=>array(109,-64,936,837),45807=>array(109,-64,936,837),45808=>array(109,-70,936,837),45809=>array(109,-64,936,837),45810=>array(109,-64,936,837),45811=>array(109,-76,936,837),45812=>array(109,-62,936,837),45813=>array(109,-61,936,837),45814=>array(109,-70,936,837),45815=>array(109,-74,936,837),45816=>array(109,-69,936,837),45817=>array(109,-67,936,837),45818=>array(109,-72,936,837),45819=>array(109,-71,936,837),45820=>array(109,-66,936,837),45821=>array(109,-59,936,837),45822=>array(109,-60,936,837),45823=>array(109,-69,936,837),45824=>array(109,-69,907,842),45825=>array(119,-61,907,842),45826=>array(119,-61,907,842),45827=>array(119,-71,931,842),45828=>array(119,-46,907,842),45829=>array(119,-68,912,842),45830=>array(119,-76,907,842),45831=>array(119,-44,921,842),45832=>array(119,-62,917,842),45833=>array(119,-64,907,842),45834=>array(119,-64,908,842),45835=>array(119,-64,908,842),45836=>array(119,-69,923,842),45837=>array(119,-64,908,842),45838=>array(119,-64,908,842),45839=>array(119,-76,907,842),45840=>array(119,-62,907,842),45841=>array(119,-61,907,842),45842=>array(119,-69,922,842),45843=>array(119,-74,929,842),45844=>array(119,-69,927,842),45845=>array(119,-68,911,842),45846=>array(119,-72,929,842),45847=>array(119,-70,936,842),45848=>array(119,-66,908,842),45849=>array(119,-59,916,842),45850=>array(119,-60,928,842),45851=>array(119,-68,908,842),45852=>array(109,-68,935,843),45853=>array(109,-59,936,842),45854=>array(109,-61,936,842),45855=>array(109,-71,936,842),45856=>array(109,-45,936,842),45857=>array(109,-69,936,842),45858=>array(109,-76,936,842),45859=>array(109,-44,936,842),45860=>array(109,-62,936,842),45861=>array(109,-64,936,842),45862=>array(109,-64,936,842),45863=>array(109,-64,936,842),45864=>array(109,-70,936,842),45865=>array(109,-64,936,842),45866=>array(109,-64,936,842),45867=>array(109,-76,936,842),45868=>array(109,-62,936,842),45869=>array(109,-61,936,842),45870=>array(109,-70,936,842),45871=>array(109,-74,936,842),45872=>array(109,-69,936,842),45873=>array(109,-67,936,842),45874=>array(109,-72,936,842),45875=>array(109,-71,936,842),45876=>array(109,-66,936,842),45877=>array(109,-59,936,842),45878=>array(109,-60,936,842),45879=>array(109,-69,936,842),45880=>array(109,-69,907,842),45881=>array(119,-61,907,842),45882=>array(119,-61,907,842),45883=>array(119,-71,931,842),45884=>array(119,-46,907,842),45885=>array(119,-68,912,842),45886=>array(119,-76,907,842),45887=>array(119,-44,921,842),45888=>array(119,-62,917,842),45889=>array(119,-64,907,842),45890=>array(119,-64,908,842),45891=>array(119,-64,908,842),45892=>array(119,-69,923,842),45893=>array(119,-64,908,842),45894=>array(119,-64,908,842),45895=>array(119,-76,907,842),45896=>array(119,-62,907,842),45897=>array(119,-61,907,842),45898=>array(119,-69,922,842),45899=>array(119,-74,929,842),45900=>array(119,-69,927,842),45901=>array(119,-68,911,842),45902=>array(119,-72,929,842),45903=>array(119,-70,936,842),45904=>array(119,-66,908,842),45905=>array(119,-59,916,842),45906=>array(119,-60,928,842),45907=>array(119,-68,908,842),45908=>array(109,-70,907,841),45909=>array(109,-61,907,841),45910=>array(109,-61,907,841),45911=>array(109,-71,931,841),45912=>array(109,-46,907,841),45913=>array(109,-68,912,841),45914=>array(109,-76,907,841),45915=>array(109,-44,921,841),45916=>array(109,-62,917,841),45917=>array(109,-64,907,841),45918=>array(109,-64,908,841),45919=>array(109,-64,908,841),45920=>array(109,-69,923,841),45921=>array(109,-64,908,841),45922=>array(109,-64,908,841),45923=>array(109,-76,906,841),45924=>array(109,-62,907,841),45925=>array(109,-61,907,841),45926=>array(109,-69,922,841),45927=>array(109,-74,929,841),45928=>array(109,-69,927,841),45929=>array(109,-68,911,841),45930=>array(109,-72,929,841),45931=>array(109,-70,936,841),45932=>array(109,-66,908,841),45933=>array(109,-59,916,841),45934=>array(109,-60,928,841),45935=>array(109,-68,908,841),45936=>array(109,-68,907,843),45937=>array(119,-61,907,843),45938=>array(119,-61,907,843),45939=>array(119,-71,931,843),45940=>array(119,-46,907,843),45941=>array(119,-68,912,843),45942=>array(119,-76,907,843),45943=>array(119,-44,921,843),45944=>array(119,-62,917,843),45945=>array(119,-64,907,843),45946=>array(119,-64,908,843),45947=>array(119,-64,908,843),45948=>array(119,-69,923,843),45949=>array(119,-64,908,843),45950=>array(119,-64,908,843),45951=>array(119,-76,907,843),45952=>array(119,-62,907,843),45953=>array(119,-61,907,843),45954=>array(119,-69,922,843),45955=>array(119,-74,929,843),45956=>array(119,-69,927,843),45957=>array(119,-68,911,843),45958=>array(119,-72,929,843),45959=>array(119,-70,936,843),45960=>array(119,-66,908,843),45961=>array(119,-59,916,843),45962=>array(119,-60,928,843),45963=>array(119,-68,908,843),45964=>array(109,-70,907,842),45965=>array(109,-61,908,842),45966=>array(109,-61,908,842),45967=>array(109,-71,931,842),45968=>array(109,-46,907,842),45969=>array(109,-68,912,842),45970=>array(109,-76,908,842),45971=>array(109,-44,921,842),45972=>array(109,-62,917,842),45973=>array(109,-64,908,842),45974=>array(109,-64,908,842),45975=>array(109,-64,908,842),45976=>array(109,-69,923,842),45977=>array(109,-64,908,842),45978=>array(109,-64,908,842),45979=>array(109,-76,908,842),45980=>array(109,-62,908,842),45981=>array(109,-61,908,842),45982=>array(109,-69,922,842),45983=>array(109,-74,929,842),45984=>array(109,-69,927,842),45985=>array(109,-68,911,842),45986=>array(109,-72,929,842),45987=>array(109,-70,936,842),45988=>array(109,-66,908,842),45989=>array(109,-59,916,842),45990=>array(109,-60,928,842),45991=>array(109,-68,908,842),45992=>array(109,-68,907,843),45993=>array(119,-61,907,843),45994=>array(119,-61,907,843),45995=>array(119,-71,931,843),45996=>array(119,-46,907,843),45997=>array(119,-68,912,843),45998=>array(119,-76,907,843),45999=>array(119,-44,921,843),46000=>array(119,-62,917,843),46001=>array(119,-64,907,843),46002=>array(119,-64,908,843),46003=>array(119,-64,908,843),46004=>array(119,-69,923,843),46005=>array(119,-64,908,843),46006=>array(119,-64,908,843),46007=>array(119,-76,907,843),46008=>array(119,-62,907,843),46009=>array(119,-61,907,843),46010=>array(119,-69,922,843),46011=>array(119,-74,929,843),46012=>array(119,-69,927,843),46013=>array(119,-68,911,843),46014=>array(119,-72,929,843),46015=>array(119,-70,936,843),46016=>array(119,-66,908,843),46017=>array(119,-59,916,843),46018=>array(119,-60,928,843),46019=>array(119,-68,908,843),46020=>array(62,-13,943,759),46021=>array(79,-61,921,790),46022=>array(79,-61,921,790),46023=>array(79,-71,921,790),46024=>array(79,-46,921,784),46025=>array(79,-68,921,790),46026=>array(79,-74,921,790),46027=>array(79,-44,921,790),46028=>array(79,-62,921,790),46029=>array(79,-64,921,790),46030=>array(79,-64,921,790),46031=>array(79,-63,921,790),46032=>array(79,-68,921,790),46033=>array(79,-64,921,790),46034=>array(79,-63,921,790),46035=>array(79,-74,921,790),46036=>array(79,-62,921,790),46037=>array(79,-61,921,790),46038=>array(79,-69,921,790),46039=>array(79,-74,921,790),46040=>array(79,-69,921,790),46041=>array(79,-68,921,790),46042=>array(79,-72,921,790),46043=>array(79,-70,921,790),46044=>array(79,-66,921,790),46045=>array(79,-59,921,790),46046=>array(79,-60,921,790),46047=>array(79,-68,921,790),46048=>array(47,-69,936,842),46049=>array(64,-59,936,842),46050=>array(64,-61,936,842),46051=>array(64,-71,936,842),46052=>array(74,-45,936,842),46053=>array(64,-69,936,842),46054=>array(64,-76,936,842),46055=>array(64,-44,936,842),46056=>array(64,-62,936,842),46057=>array(64,-64,936,842),46058=>array(64,-64,936,842),46059=>array(64,-64,936,842),46060=>array(64,-70,936,842),46061=>array(64,-64,936,842),46062=>array(64,-64,936,842),46063=>array(64,-76,936,842),46064=>array(64,-62,936,842),46065=>array(64,-61,936,842),46066=>array(64,-70,936,842),46067=>array(64,-74,936,842),46068=>array(64,-69,936,842),46069=>array(64,-67,936,842),46070=>array(64,-72,936,842),46071=>array(64,-71,936,842),46072=>array(64,-66,936,842),46073=>array(64,-59,936,842),46074=>array(64,-60,936,842),46075=>array(64,-69,936,842),46076=>array(61,-69,906,842),46077=>array(64,-61,907,842),46078=>array(64,-61,907,842),46079=>array(64,-71,931,842),46080=>array(53,-46,907,842),46081=>array(64,-68,912,842),46082=>array(64,-76,907,842),46083=>array(64,-44,921,842),46084=>array(64,-62,917,842),46085=>array(64,-64,907,842),46086=>array(64,-64,908,842),46087=>array(64,-64,908,842),46088=>array(64,-69,923,842),46089=>array(64,-64,908,842),46090=>array(64,-64,908,842),46091=>array(64,-76,907,842),46092=>array(64,-62,907,842),46093=>array(64,-61,907,842),46094=>array(64,-69,922,842),46095=>array(64,-74,929,842),46096=>array(64,-69,927,842),46097=>array(64,-68,911,842),46098=>array(64,-72,929,842),46099=>array(64,-70,936,842),46100=>array(64,-66,908,842),46101=>array(64,-59,916,842),46102=>array(64,-60,928,842),46103=>array(64,-68,908,842),46104=>array(62,-69,907,842),46105=>array(64,-61,907,842),46106=>array(64,-61,907,842),46107=>array(64,-71,931,842),46108=>array(64,-46,908,841),46109=>array(64,-68,912,842),46110=>array(64,-76,907,842),46111=>array(64,-44,921,842),46112=>array(64,-62,917,842),46113=>array(64,-64,907,842),46114=>array(64,-64,908,842),46115=>array(64,-64,908,842),46116=>array(64,-69,923,842),46117=>array(64,-64,908,842),46118=>array(64,-64,908,842),46119=>array(64,-76,907,842),46120=>array(64,-62,907,842),46121=>array(64,-61,907,842),46122=>array(64,-69,922,842),46123=>array(64,-74,929,842),46124=>array(64,-69,927,842),46125=>array(64,-68,911,842),46126=>array(64,-72,929,842),46127=>array(64,-70,936,842),46128=>array(64,-66,908,842),46129=>array(64,-59,916,842),46130=>array(64,-60,928,842),46131=>array(64,-68,908,842),46132=>array(60,-13,940,759),46133=>array(79,-61,921,785),46134=>array(79,-61,921,785),46135=>array(79,-71,921,785),46136=>array(79,-46,922,784),46137=>array(79,-68,921,785),46138=>array(79,-74,921,785),46139=>array(79,-44,921,785),46140=>array(79,-62,921,785),46141=>array(79,-64,921,785),46142=>array(79,-64,921,785),46143=>array(79,-63,921,785),46144=>array(79,-68,921,785),46145=>array(79,-64,921,785),46146=>array(79,-63,921,785),46147=>array(79,-74,921,785),46148=>array(79,-62,921,785),46149=>array(79,-61,921,785),46150=>array(79,-69,921,785),46151=>array(79,-74,921,785),46152=>array(79,-69,921,785),46153=>array(79,-68,921,785),46154=>array(79,-72,921,785),46155=>array(79,-70,921,785),46156=>array(79,-66,921,785),46157=>array(79,-59,921,785),46158=>array(79,-60,921,785),46159=>array(79,-68,921,785),46160=>array(79,-64,920,789),46161=>array(79,-61,921,785),46162=>array(79,-61,921,785),46163=>array(79,-71,921,785),46164=>array(79,-46,921,784),46165=>array(79,-68,921,785),46166=>array(79,-74,921,785),46167=>array(79,-44,921,785),46168=>array(79,-62,921,785),46169=>array(79,-64,921,785),46170=>array(79,-64,921,785),46171=>array(79,-63,921,785),46172=>array(79,-68,921,785),46173=>array(79,-64,921,785),46174=>array(79,-63,921,785),46175=>array(79,-74,921,785),46176=>array(79,-62,921,785),46177=>array(79,-61,921,785),46178=>array(79,-69,921,785),46179=>array(79,-74,921,785),46180=>array(79,-69,921,785),46181=>array(79,-68,921,785),46182=>array(79,-72,921,785),46183=>array(79,-70,921,785),46184=>array(79,-66,921,785),46185=>array(79,-59,921,785),46186=>array(79,-60,921,785),46187=>array(79,-68,921,785),46188=>array(68,-70,907,841),46189=>array(76,-61,907,841),46190=>array(76,-61,907,841),46191=>array(76,-71,931,841),46192=>array(75,-46,907,841),46193=>array(76,-68,912,841),46194=>array(76,-76,907,841),46195=>array(76,-44,921,841),46196=>array(76,-62,917,841),46197=>array(76,-64,907,841),46198=>array(76,-64,908,841),46199=>array(76,-64,908,841),46200=>array(76,-69,923,841),46201=>array(76,-64,908,841),46202=>array(76,-64,908,841),46203=>array(76,-76,906,841),46204=>array(76,-62,907,841),46205=>array(76,-61,907,841),46206=>array(76,-69,922,841),46207=>array(76,-74,929,841),46208=>array(76,-69,927,841),46209=>array(76,-68,911,841),46210=>array(76,-72,929,841),46211=>array(76,-70,936,841),46212=>array(76,-66,908,841),46213=>array(76,-59,916,841),46214=>array(76,-60,928,841),46215=>array(76,-68,908,841),46216=>array(52,-69,908,842),46217=>array(71,-61,907,843),46218=>array(71,-61,907,843),46219=>array(71,-71,931,843),46220=>array(79,-46,907,843),46221=>array(71,-68,912,843),46222=>array(71,-76,907,843),46223=>array(71,-44,921,843),46224=>array(71,-62,917,843),46225=>array(71,-64,907,843),46226=>array(71,-64,908,843),46227=>array(71,-64,908,843),46228=>array(71,-69,923,843),46229=>array(71,-64,908,843),46230=>array(71,-64,908,843),46231=>array(71,-76,907,843),46232=>array(71,-62,907,843),46233=>array(71,-61,907,843),46234=>array(71,-69,922,843),46235=>array(71,-74,929,843),46236=>array(71,-69,927,843),46237=>array(71,-68,911,843),46238=>array(71,-72,929,843),46239=>array(71,-70,936,843),46240=>array(71,-66,908,843),46241=>array(71,-59,916,843),46242=>array(71,-60,928,843),46243=>array(71,-68,908,843),46244=>array(70,-69,907,842),46245=>array(64,-61,907,842),46246=>array(64,-61,907,842),46247=>array(64,-71,931,842),46248=>array(65,-46,907,843),46249=>array(64,-68,912,842),46250=>array(64,-76,907,842),46251=>array(64,-44,921,842),46252=>array(64,-62,917,842),46253=>array(64,-64,907,842),46254=>array(64,-64,908,842),46255=>array(64,-64,908,842),46256=>array(64,-69,923,842),46257=>array(64,-64,908,842),46258=>array(64,-64,908,842),46259=>array(64,-76,907,842),46260=>array(64,-62,907,842),46261=>array(64,-61,907,842),46262=>array(64,-69,922,842),46263=>array(64,-74,929,842),46264=>array(64,-69,927,842),46265=>array(64,-68,911,842),46266=>array(64,-72,929,842),46267=>array(64,-70,936,842),46268=>array(64,-66,908,842),46269=>array(64,-59,916,842),46270=>array(64,-60,928,842),46271=>array(64,-68,908,842),46272=>array(71,-64,928,784),46273=>array(79,-61,921,785),46274=>array(79,-61,921,785),46275=>array(79,-71,921,785),46276=>array(79,-46,921,784),46277=>array(79,-68,921,785),46278=>array(79,-74,921,785),46279=>array(79,-44,921,785),46280=>array(79,-62,921,785),46281=>array(79,-64,921,785),46282=>array(79,-64,921,785),46283=>array(79,-63,921,785),46284=>array(79,-68,921,785),46285=>array(79,-64,921,785),46286=>array(79,-63,921,785),46287=>array(79,-74,921,785),46288=>array(79,-62,921,785),46289=>array(79,-61,921,785),46290=>array(79,-69,921,785),46291=>array(79,-74,921,785),46292=>array(79,-69,921,785),46293=>array(79,-68,921,785),46294=>array(79,-72,921,785),46295=>array(79,-70,921,785),46296=>array(79,-66,921,785),46297=>array(79,-59,921,785),46298=>array(79,-60,921,785),46299=>array(79,-68,921,785),46300=>array(57,42,943,709),46301=>array(79,-61,921,784),46302=>array(79,-61,921,784),46303=>array(79,-71,921,784),46304=>array(79,-46,921,784),46305=>array(79,-68,921,784),46306=>array(79,-74,921,784),46307=>array(79,-44,921,784),46308=>array(79,-62,921,784),46309=>array(79,-64,921,784),46310=>array(79,-64,921,784),46311=>array(79,-63,921,784),46312=>array(79,-68,921,784),46313=>array(79,-64,921,784),46314=>array(79,-63,921,784),46315=>array(79,-74,921,784),46316=>array(79,-62,921,784),46317=>array(79,-61,921,784),46318=>array(79,-69,921,784),46319=>array(79,-74,921,784),46320=>array(79,-69,921,784),46321=>array(79,-68,921,784),46322=>array(79,-72,921,784),46323=>array(79,-70,921,784),46324=>array(79,-66,921,784),46325=>array(79,-59,921,784),46326=>array(79,-60,921,784),46327=>array(79,-68,921,784),46328=>array(66,-69,907,842),46329=>array(64,-61,907,842),46330=>array(64,-61,907,842),46331=>array(64,-71,931,842),46332=>array(64,-46,907,842),46333=>array(64,-68,912,842),46334=>array(64,-76,907,842),46335=>array(64,-44,921,842),46336=>array(64,-62,917,842),46337=>array(64,-64,907,842),46338=>array(64,-64,908,842),46339=>array(64,-64,908,842),46340=>array(64,-69,923,842),46341=>array(64,-64,908,842),46342=>array(64,-64,908,842),46343=>array(64,-76,907,842),46344=>array(64,-62,907,842),46345=>array(64,-61,907,842),46346=>array(64,-69,922,842),46347=>array(64,-74,929,842),46348=>array(64,-69,927,842),46349=>array(64,-68,911,842),46350=>array(64,-72,929,842),46351=>array(64,-70,936,842),46352=>array(64,-66,908,842),46353=>array(64,-59,916,842),46354=>array(64,-60,928,842),46355=>array(64,-68,908,842),46356=>array(119,-69,907,842),46357=>array(124,-61,907,842),46358=>array(124,-61,907,842),46359=>array(124,-71,931,842),46360=>array(124,-46,907,842),46361=>array(124,-68,912,842),46362=>array(124,-76,907,842),46363=>array(124,-44,921,842),46364=>array(124,-62,917,842),46365=>array(124,-64,907,842),46366=>array(124,-64,908,842),46367=>array(124,-64,908,842),46368=>array(124,-69,923,842),46369=>array(124,-64,908,842),46370=>array(124,-64,908,842),46371=>array(124,-76,907,842),46372=>array(124,-62,907,842),46373=>array(124,-61,907,842),46374=>array(124,-69,922,842),46375=>array(124,-74,929,842),46376=>array(124,-69,927,842),46377=>array(124,-68,911,842),46378=>array(124,-72,929,842),46379=>array(124,-70,936,842),46380=>array(124,-66,908,842),46381=>array(124,-59,916,842),46382=>array(124,-60,928,842),46383=>array(124,-68,908,842),46384=>array(94,-69,936,842),46385=>array(94,-59,936,842),46386=>array(94,-61,936,842),46387=>array(94,-71,936,842),46388=>array(94,-45,936,842),46389=>array(94,-69,936,842),46390=>array(94,-76,936,842),46391=>array(94,-44,936,842),46392=>array(94,-62,936,842),46393=>array(94,-64,936,842),46394=>array(94,-64,936,842),46395=>array(94,-64,936,842),46396=>array(94,-70,936,842),46397=>array(94,-64,936,842),46398=>array(94,-64,936,842),46399=>array(94,-76,936,842),46400=>array(94,-62,936,842),46401=>array(94,-61,936,842),46402=>array(94,-70,936,842),46403=>array(94,-74,936,842),46404=>array(94,-69,936,842),46405=>array(94,-67,936,842),46406=>array(94,-72,936,842),46407=>array(94,-71,936,842),46408=>array(94,-66,936,842),46409=>array(94,-59,936,842),46410=>array(94,-60,936,842),46411=>array(94,-69,936,842),46412=>array(99,-69,907,842),46413=>array(99,-61,907,837),46414=>array(99,-61,907,837),46415=>array(99,-71,931,837),46416=>array(99,-46,907,842),46417=>array(99,-68,912,837),46418=>array(99,-76,907,837),46419=>array(99,-44,921,837),46420=>array(99,-62,917,837),46421=>array(99,-64,907,837),46422=>array(99,-64,908,837),46423=>array(99,-64,908,837),46424=>array(99,-69,923,837),46425=>array(99,-64,908,837),46426=>array(99,-64,908,837),46427=>array(99,-76,907,837),46428=>array(99,-62,907,837),46429=>array(99,-61,907,837),46430=>array(99,-69,922,837),46431=>array(99,-74,929,837),46432=>array(99,-69,927,837),46433=>array(99,-68,911,837),46434=>array(99,-72,929,837),46435=>array(99,-70,936,837),46436=>array(99,-66,908,837),46437=>array(99,-59,916,837),46438=>array(99,-60,928,837),46439=>array(99,-68,908,837),46440=>array(94,-69,936,842),46441=>array(94,-59,936,842),46442=>array(94,-61,936,842),46443=>array(94,-71,936,842),46444=>array(94,-45,936,842),46445=>array(94,-69,936,842),46446=>array(94,-76,936,842),46447=>array(94,-44,936,842),46448=>array(94,-62,936,842),46449=>array(94,-64,936,842),46450=>array(94,-64,936,842),46451=>array(94,-64,936,842),46452=>array(94,-70,936,842),46453=>array(94,-64,936,842),46454=>array(94,-64,936,842),46455=>array(94,-76,936,842),46456=>array(94,-62,936,842),46457=>array(94,-61,936,842),46458=>array(94,-70,936,842),46459=>array(94,-74,936,842),46460=>array(94,-69,936,842),46461=>array(94,-67,936,842),46462=>array(94,-72,936,842),46463=>array(94,-71,936,842),46464=>array(94,-66,936,842),46465=>array(94,-59,936,842),46466=>array(94,-60,936,842),46467=>array(94,-69,936,842),46468=>array(99,-69,907,842),46469=>array(99,-61,907,842),46470=>array(99,-61,907,842),46471=>array(99,-71,931,842),46472=>array(99,-46,907,842),46473=>array(99,-68,912,842),46474=>array(99,-76,907,842),46475=>array(99,-44,921,842),46476=>array(99,-62,917,842),46477=>array(99,-64,907,842),46478=>array(99,-64,908,842),46479=>array(99,-64,908,842),46480=>array(99,-69,923,842),46481=>array(99,-64,908,842),46482=>array(99,-64,908,842),46483=>array(99,-76,907,842),46484=>array(99,-62,907,842),46485=>array(99,-61,907,842),46486=>array(99,-69,922,842),46487=>array(99,-74,929,842),46488=>array(99,-69,927,842),46489=>array(99,-68,911,842),46490=>array(99,-72,929,842),46491=>array(99,-70,936,842),46492=>array(99,-66,908,842),46493=>array(99,-59,916,842),46494=>array(99,-60,928,842),46495=>array(99,-68,908,842),46496=>array(94,-70,907,841),46497=>array(94,-61,907,836),46498=>array(94,-61,907,836),46499=>array(94,-71,931,836),46500=>array(94,-46,907,841),46501=>array(94,-68,912,836),46502=>array(94,-76,907,836),46503=>array(94,-44,921,836),46504=>array(94,-62,917,836),46505=>array(94,-64,907,836),46506=>array(94,-64,908,836),46507=>array(94,-64,908,836),46508=>array(94,-69,923,836),46509=>array(94,-64,908,836),46510=>array(94,-64,908,836),46511=>array(94,-76,906,836),46512=>array(94,-62,907,836),46513=>array(94,-61,907,836),46514=>array(94,-69,922,836),46515=>array(94,-74,929,836),46516=>array(94,-69,927,836),46517=>array(94,-68,911,836),46518=>array(94,-72,929,836),46519=>array(94,-70,936,836),46520=>array(94,-66,908,836),46521=>array(94,-59,916,836),46522=>array(94,-60,928,836),46523=>array(94,-68,908,836),46524=>array(99,-68,907,843),46525=>array(99,-61,907,843),46526=>array(99,-61,907,843),46527=>array(99,-71,931,843),46528=>array(99,-46,907,843),46529=>array(99,-68,912,843),46530=>array(99,-76,907,843),46531=>array(99,-44,921,843),46532=>array(99,-62,917,843),46533=>array(99,-64,907,843),46534=>array(99,-64,908,843),46535=>array(99,-64,908,843),46536=>array(99,-69,923,843),46537=>array(99,-64,908,843),46538=>array(99,-64,908,843),46539=>array(99,-76,907,843),46540=>array(99,-62,907,843),46541=>array(99,-61,907,843),46542=>array(99,-69,922,843),46543=>array(99,-74,929,843),46544=>array(99,-69,927,843),46545=>array(99,-68,911,843),46546=>array(99,-72,929,843),46547=>array(99,-70,936,843),46548=>array(99,-66,908,843),46549=>array(99,-59,916,843),46550=>array(99,-60,928,843),46551=>array(99,-68,908,843),46552=>array(94,-69,907,842),46553=>array(94,-61,907,842),46554=>array(94,-61,907,842),46555=>array(94,-71,931,842),46556=>array(94,-46,908,842),46557=>array(94,-68,912,842),46558=>array(94,-76,907,842),46559=>array(94,-44,921,842),46560=>array(94,-62,917,842),46561=>array(94,-64,907,842),46562=>array(94,-64,908,842),46563=>array(94,-64,908,842),46564=>array(94,-69,923,842),46565=>array(94,-64,908,842),46566=>array(94,-64,908,842),46567=>array(94,-76,907,842),46568=>array(94,-62,907,842),46569=>array(94,-61,907,842),46570=>array(94,-69,922,842),46571=>array(94,-74,929,842),46572=>array(94,-69,927,842),46573=>array(94,-68,911,842),46574=>array(94,-72,929,842),46575=>array(94,-70,936,842),46576=>array(94,-66,908,842),46577=>array(94,-59,916,842),46578=>array(94,-60,928,842),46579=>array(94,-68,908,842),46580=>array(99,-68,907,843),46581=>array(94,-61,907,843),46582=>array(94,-61,907,843),46583=>array(94,-71,931,843),46584=>array(94,-46,907,843),46585=>array(94,-68,912,843),46586=>array(94,-76,907,843),46587=>array(94,-44,921,843),46588=>array(94,-62,917,843),46589=>array(94,-64,907,843),46590=>array(94,-64,908,843),46591=>array(94,-64,908,843),46592=>array(94,-69,923,843),46593=>array(94,-64,908,843),46594=>array(94,-64,908,843),46595=>array(94,-76,907,843),46596=>array(94,-62,907,843),46597=>array(94,-61,907,843),46598=>array(94,-69,922,843),46599=>array(94,-74,929,843),46600=>array(94,-69,927,843),46601=>array(94,-68,911,843),46602=>array(94,-72,929,843),46603=>array(94,-70,936,843),46604=>array(94,-66,908,843),46605=>array(94,-59,916,843),46606=>array(94,-60,928,843),46607=>array(94,-68,908,843),46608=>array(60,12,940,740),46609=>array(79,-61,921,795),46610=>array(79,-61,921,795),46611=>array(79,-71,921,795),46612=>array(79,-46,921,795),46613=>array(79,-68,921,795),46614=>array(79,-74,921,795),46615=>array(79,-44,921,795),46616=>array(79,-62,921,795),46617=>array(79,-64,921,795),46618=>array(79,-64,921,795),46619=>array(79,-63,921,795),46620=>array(79,-68,921,795),46621=>array(79,-64,921,795),46622=>array(79,-63,921,795),46623=>array(79,-74,921,795),46624=>array(79,-62,921,795),46625=>array(79,-61,921,795),46626=>array(79,-69,921,795),46627=>array(79,-74,921,795),46628=>array(79,-69,921,795),46629=>array(79,-68,921,795),46630=>array(79,-72,921,795),46631=>array(79,-70,921,795),46632=>array(79,-66,921,795),46633=>array(79,-59,921,795),46634=>array(79,-60,921,795),46635=>array(79,-68,921,795),46636=>array(68,-69,935,842),46637=>array(69,-59,936,837),46638=>array(69,-61,936,837),46639=>array(69,-71,936,837),46640=>array(57,-45,936,842),46641=>array(69,-69,936,837),46642=>array(69,-76,936,837),46643=>array(69,-44,936,837),46644=>array(69,-62,936,837),46645=>array(69,-64,936,837),46646=>array(69,-64,936,837),46647=>array(69,-64,936,837),46648=>array(69,-70,936,837),46649=>array(69,-64,936,837),46650=>array(69,-64,936,837),46651=>array(69,-76,936,837),46652=>array(69,-62,936,837),46653=>array(69,-61,936,837),46654=>array(69,-70,936,837),46655=>array(69,-74,936,837),46656=>array(69,-69,936,837),46657=>array(69,-67,936,837),46658=>array(69,-72,936,837),46659=>array(69,-71,936,837),46660=>array(69,-66,936,837),46661=>array(69,-59,936,837),46662=>array(69,-60,936,837),46663=>array(69,-69,936,837),46664=>array(64,-69,906,842),46665=>array(70,-61,907,842),46666=>array(70,-61,907,842),46667=>array(70,-71,931,842),46668=>array(57,-46,907,842),46669=>array(70,-68,912,842),46670=>array(70,-76,907,842),46671=>array(70,-44,921,842),46672=>array(70,-62,917,842),46673=>array(70,-64,907,842),46674=>array(70,-64,908,842),46675=>array(70,-64,908,842),46676=>array(70,-69,923,842),46677=>array(70,-64,908,842),46678=>array(70,-64,908,842),46679=>array(70,-76,907,842),46680=>array(70,-62,907,842),46681=>array(70,-61,907,842),46682=>array(70,-69,922,842),46683=>array(70,-74,929,842),46684=>array(70,-69,927,842),46685=>array(70,-68,911,842),46686=>array(70,-72,929,842),46687=>array(70,-70,936,842),46688=>array(70,-66,908,842),46689=>array(70,-59,916,842),46690=>array(70,-60,928,842),46691=>array(70,-68,908,842),46692=>array(83,-69,906,842),46693=>array(64,-61,907,842),46694=>array(64,-61,907,842),46695=>array(64,-71,931,842),46696=>array(64,-46,907,842),46697=>array(64,-68,912,842),46698=>array(64,-76,907,842),46699=>array(64,-44,921,842),46700=>array(64,-62,917,842),46701=>array(64,-64,907,842),46702=>array(64,-64,908,842),46703=>array(64,-64,908,842),46704=>array(64,-69,923,842),46705=>array(64,-64,908,842),46706=>array(64,-64,908,842),46707=>array(64,-76,906,842),46708=>array(64,-62,907,842),46709=>array(64,-61,907,842),46710=>array(64,-69,922,842),46711=>array(64,-74,929,842),46712=>array(64,-69,927,842),46713=>array(64,-68,911,842),46714=>array(64,-72,929,842),46715=>array(64,-70,936,842),46716=>array(64,-66,908,842),46717=>array(64,-59,916,842),46718=>array(64,-60,928,842),46719=>array(64,-68,908,842),46720=>array(59,-13,939,750),46721=>array(79,-61,921,795),46722=>array(79,-61,921,795),46723=>array(79,-71,921,795),46724=>array(79,-46,921,795),46725=>array(79,-68,921,795),46726=>array(79,-74,921,795),46727=>array(79,-44,921,795),46728=>array(79,-62,921,795),46729=>array(79,-64,921,795),46730=>array(79,-64,921,795),46731=>array(79,-63,921,795),46732=>array(79,-68,921,795),46733=>array(79,-64,921,795),46734=>array(79,-63,921,795),46735=>array(79,-74,921,795),46736=>array(79,-62,921,795),46737=>array(79,-61,921,795),46738=>array(79,-69,921,795),46739=>array(79,-74,921,795),46740=>array(79,-69,921,795),46741=>array(79,-68,921,795),46742=>array(79,-72,921,795),46743=>array(79,-70,921,795),46744=>array(79,-66,921,795),46745=>array(79,-59,921,795),46746=>array(79,-60,921,795),46747=>array(79,-68,921,795),46748=>array(79,-64,921,785),46749=>array(79,-61,921,795),46750=>array(79,-61,921,795),46751=>array(79,-71,921,795),46752=>array(79,-46,921,795),46753=>array(79,-68,921,795),46754=>array(79,-74,921,795),46755=>array(79,-44,921,795),46756=>array(79,-62,921,795),46757=>array(79,-64,921,795),46758=>array(79,-64,921,795),46759=>array(79,-63,921,795),46760=>array(79,-68,921,795),46761=>array(79,-64,921,795),46762=>array(79,-63,921,795),46763=>array(79,-74,921,795),46764=>array(79,-62,921,795),46765=>array(79,-61,921,795),46766=>array(79,-69,921,795),46767=>array(79,-74,921,795),46768=>array(79,-69,921,795),46769=>array(79,-68,921,795),46770=>array(79,-72,921,795),46771=>array(79,-70,921,795),46772=>array(79,-66,921,795),46773=>array(79,-59,921,795),46774=>array(79,-60,921,795),46775=>array(79,-68,921,795),46776=>array(72,-70,907,841),46777=>array(67,-61,907,841),46778=>array(67,-61,907,841),46779=>array(67,-71,931,841),46780=>array(63,-46,907,841),46781=>array(67,-68,912,841),46782=>array(67,-76,907,841),46783=>array(67,-44,921,841),46784=>array(67,-62,917,841),46785=>array(67,-64,907,841),46786=>array(67,-64,908,841),46787=>array(67,-64,908,841),46788=>array(67,-69,923,841),46789=>array(67,-64,908,841),46790=>array(67,-64,908,841),46791=>array(67,-76,906,841),46792=>array(67,-62,907,841),46793=>array(67,-61,907,841),46794=>array(67,-69,922,841),46795=>array(67,-74,929,841),46796=>array(67,-69,927,841),46797=>array(67,-68,911,841),46798=>array(67,-72,929,841),46799=>array(67,-70,936,841),46800=>array(67,-66,908,841),46801=>array(67,-59,916,841),46802=>array(67,-60,928,841),46803=>array(67,-68,908,841),46804=>array(50,-68,907,843),46805=>array(67,-61,907,843),46806=>array(67,-61,907,843),46807=>array(67,-71,931,843),46808=>array(68,-46,907,842),46809=>array(67,-68,912,843),46810=>array(67,-76,907,843),46811=>array(67,-44,921,843),46812=>array(67,-62,917,843),46813=>array(67,-64,907,843),46814=>array(67,-64,908,843),46815=>array(67,-64,908,843),46816=>array(67,-69,923,843),46817=>array(67,-64,908,843),46818=>array(67,-64,908,843),46819=>array(67,-76,907,843),46820=>array(67,-62,907,843),46821=>array(67,-61,907,843),46822=>array(67,-69,922,843),46823=>array(67,-74,929,843),46824=>array(67,-69,927,843),46825=>array(67,-68,911,843),46826=>array(67,-72,929,843),46827=>array(67,-70,936,843),46828=>array(67,-66,908,843),46829=>array(67,-59,916,843),46830=>array(67,-60,928,843),46831=>array(67,-68,908,843),46832=>array(63,-69,907,842),46833=>array(66,-61,907,842),46834=>array(66,-61,907,842),46835=>array(66,-71,931,842),46836=>array(66,-46,907,842),46837=>array(66,-68,912,842),46838=>array(66,-76,907,842),46839=>array(66,-44,921,842),46840=>array(66,-62,917,842),46841=>array(66,-64,907,842),46842=>array(66,-64,908,842),46843=>array(66,-64,908,842),46844=>array(66,-69,923,842),46845=>array(66,-64,908,842),46846=>array(66,-64,908,842),46847=>array(66,-76,907,842),46848=>array(66,-62,907,842),46849=>array(66,-61,907,842),46850=>array(66,-69,922,842),46851=>array(66,-74,929,842),46852=>array(66,-69,927,842),46853=>array(66,-68,911,842),46854=>array(66,-72,929,842),46855=>array(66,-70,936,842),46856=>array(66,-66,908,842),46857=>array(66,-59,916,842),46858=>array(66,-60,928,842),46859=>array(66,-68,908,842),46860=>array(79,-64,921,785),46861=>array(79,-61,921,795),46862=>array(79,-61,921,795),46863=>array(79,-71,921,795),46864=>array(81,-46,922,795),46865=>array(79,-68,921,795),46866=>array(79,-74,921,795),46867=>array(79,-44,921,795),46868=>array(79,-62,921,795),46869=>array(79,-64,921,795),46870=>array(79,-64,921,795),46871=>array(79,-63,921,795),46872=>array(79,-68,921,795),46873=>array(79,-64,921,795),46874=>array(79,-63,921,795),46875=>array(79,-74,921,795),46876=>array(79,-62,921,795),46877=>array(79,-61,921,795),46878=>array(79,-69,921,795),46879=>array(79,-74,921,795),46880=>array(79,-69,921,795),46881=>array(79,-68,921,795),46882=>array(79,-72,921,795),46883=>array(79,-70,921,795),46884=>array(79,-66,921,795),46885=>array(79,-59,921,795),46886=>array(79,-60,921,795),46887=>array(79,-68,921,795),46888=>array(57,22,943,720),46889=>array(79,-61,922,795),46890=>array(79,-61,922,795),46891=>array(79,-71,922,795),46892=>array(79,-46,921,795),46893=>array(79,-68,922,795),46894=>array(79,-74,922,795),46895=>array(79,-44,922,795),46896=>array(79,-62,922,795),46897=>array(79,-64,922,795),46898=>array(79,-64,922,795),46899=>array(79,-63,922,795),46900=>array(79,-68,922,795),46901=>array(79,-64,922,795),46902=>array(79,-63,922,795),46903=>array(79,-74,922,795),46904=>array(79,-62,922,795),46905=>array(79,-61,922,795),46906=>array(79,-69,922,795),46907=>array(79,-74,922,795),46908=>array(79,-69,922,795),46909=>array(79,-68,922,795),46910=>array(79,-72,922,795),46911=>array(79,-70,922,795),46912=>array(79,-66,922,795),46913=>array(79,-59,922,795),46914=>array(79,-60,922,795),46915=>array(79,-68,922,795),46916=>array(67,-69,907,842),46917=>array(74,-61,908,842),46918=>array(74,-61,908,842),46919=>array(74,-71,931,842),46920=>array(65,-46,907,842),46921=>array(74,-68,912,842),46922=>array(74,-76,908,842),46923=>array(74,-44,921,842),46924=>array(74,-62,917,842),46925=>array(74,-64,908,842),46926=>array(74,-64,908,842),46927=>array(74,-64,908,842),46928=>array(74,-69,923,842),46929=>array(74,-64,908,842),46930=>array(74,-64,908,842),46931=>array(74,-76,908,842),46932=>array(74,-62,908,842),46933=>array(74,-61,908,842),46934=>array(74,-69,922,842),46935=>array(74,-74,929,842),46936=>array(74,-69,927,842),46937=>array(74,-68,911,842),46938=>array(74,-72,929,842),46939=>array(74,-70,936,842),46940=>array(74,-66,908,842),46941=>array(74,-59,916,842),46942=>array(74,-60,928,842),46943=>array(74,-68,908,842),46944=>array(104,-69,907,842),46945=>array(109,-61,907,842),46946=>array(109,-61,907,842),46947=>array(109,-71,931,842),46948=>array(99,-46,907,842),46949=>array(109,-68,912,842),46950=>array(109,-76,907,842),46951=>array(109,-44,921,842),46952=>array(109,-62,917,842),46953=>array(109,-64,907,842),46954=>array(109,-64,908,842),46955=>array(109,-64,908,842),46956=>array(109,-69,923,842),46957=>array(109,-64,908,842),46958=>array(109,-64,908,842),46959=>array(109,-76,907,842),46960=>array(109,-62,907,842),46961=>array(109,-61,907,842),46962=>array(109,-69,922,842),46963=>array(109,-74,929,842),46964=>array(109,-69,927,842),46965=>array(109,-68,911,842),46966=>array(109,-72,929,842),46967=>array(109,-70,936,842),46968=>array(109,-66,908,842),46969=>array(109,-59,916,842),46970=>array(109,-60,928,842),46971=>array(109,-68,908,842),46972=>array(118,-69,936,842),46973=>array(103,-59,936,842),46974=>array(103,-61,936,842),46975=>array(103,-71,936,842),46976=>array(108,-45,936,842),46977=>array(103,-69,936,842),46978=>array(103,-76,936,842),46979=>array(103,-44,936,842),46980=>array(103,-62,936,842),46981=>array(103,-64,936,842),46982=>array(103,-64,936,842),46983=>array(103,-64,936,842),46984=>array(103,-70,936,842),46985=>array(103,-64,936,842),46986=>array(103,-64,936,842),46987=>array(103,-76,936,842),46988=>array(103,-62,936,842),46989=>array(103,-61,936,842),46990=>array(103,-70,936,842),46991=>array(103,-74,936,842),46992=>array(103,-69,936,842),46993=>array(103,-67,936,842),46994=>array(103,-72,936,842),46995=>array(103,-71,936,842),46996=>array(103,-66,936,842),46997=>array(103,-59,936,842),46998=>array(103,-60,936,842),46999=>array(103,-69,936,842),47000=>array(118,-69,907,842),47001=>array(103,-61,907,842),47002=>array(103,-61,907,842),47003=>array(103,-71,931,842),47004=>array(103,-46,907,842),47005=>array(103,-68,912,842),47006=>array(103,-76,907,842),47007=>array(103,-44,921,842),47008=>array(103,-62,917,842),47009=>array(103,-64,907,842),47010=>array(103,-64,908,842),47011=>array(103,-64,908,842),47012=>array(103,-69,923,842),47013=>array(103,-64,908,842),47014=>array(103,-64,908,842),47015=>array(103,-76,907,842),47016=>array(103,-62,907,842),47017=>array(103,-61,907,842),47018=>array(103,-69,922,842),47019=>array(103,-74,929,842),47020=>array(103,-69,927,842),47021=>array(103,-68,911,842),47022=>array(103,-72,929,842),47023=>array(103,-70,936,842),47024=>array(103,-66,908,842),47025=>array(103,-59,916,842),47026=>array(103,-60,928,842),47027=>array(103,-68,908,842),47028=>array(118,-68,935,843),47029=>array(103,-59,936,842),47030=>array(103,-61,936,842),47031=>array(103,-71,936,842),47032=>array(108,-45,936,842),47033=>array(103,-69,936,842),47034=>array(103,-76,936,842),47035=>array(103,-44,936,842),47036=>array(103,-62,936,842),47037=>array(103,-64,936,842),47038=>array(103,-64,936,842),47039=>array(103,-64,936,842),47040=>array(103,-70,936,842),47041=>array(103,-64,936,842),47042=>array(103,-64,936,842),47043=>array(103,-76,936,842),47044=>array(103,-62,936,842),47045=>array(103,-61,936,842),47046=>array(103,-70,936,842),47047=>array(103,-74,936,842),47048=>array(103,-69,936,842),47049=>array(103,-67,936,842),47050=>array(103,-72,936,842),47051=>array(103,-71,936,842),47052=>array(103,-66,936,842),47053=>array(103,-59,936,842),47054=>array(103,-60,936,842),47055=>array(103,-69,936,842),47056=>array(118,-69,907,842),47057=>array(103,-61,907,842),47058=>array(103,-61,907,842),47059=>array(103,-71,931,842),47060=>array(103,-46,907,842),47061=>array(103,-68,912,842),47062=>array(103,-76,907,842),47063=>array(103,-44,921,842),47064=>array(103,-62,917,842),47065=>array(103,-64,907,842),47066=>array(103,-64,908,842),47067=>array(103,-64,908,842),47068=>array(103,-69,923,842),47069=>array(103,-64,908,842),47070=>array(103,-64,908,842),47071=>array(103,-76,907,842),47072=>array(103,-62,907,842),47073=>array(103,-61,907,842),47074=>array(103,-69,922,842),47075=>array(103,-74,929,842),47076=>array(103,-69,927,842),47077=>array(103,-68,911,842),47078=>array(103,-72,929,842),47079=>array(103,-70,936,842),47080=>array(103,-66,908,842),47081=>array(103,-59,916,842),47082=>array(103,-60,928,842),47083=>array(103,-68,908,842),47084=>array(118,-70,907,841),47085=>array(103,-61,907,841),47086=>array(103,-61,907,841),47087=>array(103,-71,931,841),47088=>array(103,-46,907,841),47089=>array(103,-68,912,841),47090=>array(103,-76,907,841),47091=>array(103,-44,921,841),47092=>array(103,-62,917,841),47093=>array(103,-64,907,841),47094=>array(103,-64,908,841),47095=>array(103,-64,908,841),47096=>array(103,-69,923,841),47097=>array(103,-64,908,841),47098=>array(103,-64,908,841),47099=>array(103,-76,906,841),47100=>array(103,-62,907,841),47101=>array(103,-61,907,841),47102=>array(103,-69,922,841),47103=>array(103,-74,929,841),47104=>array(103,-69,927,841),47105=>array(103,-68,911,841),47106=>array(103,-72,929,841),47107=>array(103,-70,936,841),47108=>array(103,-66,908,841),47109=>array(103,-59,916,841),47110=>array(103,-60,928,841),47111=>array(103,-68,908,841),47112=>array(118,-68,907,843),47113=>array(118,-61,907,843),47114=>array(118,-61,907,843),47115=>array(118,-71,931,843),47116=>array(118,-46,907,843),47117=>array(118,-68,912,843),47118=>array(118,-76,907,843),47119=>array(118,-44,921,843),47120=>array(118,-62,917,843),47121=>array(118,-64,907,843),47122=>array(118,-64,908,843),47123=>array(118,-64,908,843),47124=>array(118,-69,923,843),47125=>array(118,-64,908,843),47126=>array(118,-64,908,843),47127=>array(118,-76,907,843),47128=>array(118,-62,907,843),47129=>array(118,-61,907,843),47130=>array(118,-69,922,843),47131=>array(118,-74,929,843),47132=>array(118,-69,927,843),47133=>array(118,-68,911,843),47134=>array(118,-72,929,843),47135=>array(118,-70,936,843),47136=>array(118,-66,908,843),47137=>array(118,-59,916,843),47138=>array(118,-60,928,843),47139=>array(118,-68,908,843),47140=>array(118,-70,907,842),47141=>array(103,-61,908,842),47142=>array(103,-61,908,842),47143=>array(103,-71,931,842),47144=>array(103,-46,907,842),47145=>array(103,-68,912,842),47146=>array(103,-76,908,842),47147=>array(103,-44,921,842),47148=>array(103,-62,917,842),47149=>array(103,-64,908,842),47150=>array(103,-64,908,842),47151=>array(103,-64,908,842),47152=>array(103,-69,923,842),47153=>array(103,-64,908,842),47154=>array(103,-64,908,842),47155=>array(103,-76,908,842),47156=>array(103,-62,908,842),47157=>array(103,-61,908,842),47158=>array(103,-69,922,842),47159=>array(103,-74,929,842),47160=>array(103,-69,927,842),47161=>array(103,-68,911,842),47162=>array(103,-72,929,842),47163=>array(103,-70,936,842),47164=>array(103,-66,908,842),47165=>array(103,-59,916,842),47166=>array(103,-60,928,842),47167=>array(103,-68,908,842),47168=>array(118,-68,907,843),47169=>array(118,-61,907,843),47170=>array(118,-61,907,843),47171=>array(118,-71,931,843),47172=>array(118,-46,907,843),47173=>array(118,-68,912,843),47174=>array(118,-76,907,843),47175=>array(118,-44,921,843),47176=>array(118,-62,917,843),47177=>array(118,-64,907,843),47178=>array(118,-64,908,843),47179=>array(118,-64,908,843),47180=>array(118,-69,923,843),47181=>array(118,-64,908,843),47182=>array(118,-64,908,843),47183=>array(118,-76,907,843),47184=>array(118,-62,907,843),47185=>array(118,-61,907,843),47186=>array(118,-69,922,843),47187=>array(118,-74,929,843),47188=>array(118,-69,927,843),47189=>array(118,-68,911,843),47190=>array(118,-72,929,843),47191=>array(118,-70,936,843),47192=>array(118,-66,908,843),47193=>array(118,-59,916,843),47194=>array(118,-60,928,843),47195=>array(118,-68,908,843),47196=>array(62,27,943,755),47197=>array(79,-61,921,795),47198=>array(79,-61,921,795),47199=>array(79,-71,921,795),47200=>array(79,-46,921,795),47201=>array(79,-68,921,795),47202=>array(79,-74,921,795),47203=>array(79,-44,921,795),47204=>array(79,-62,921,795),47205=>array(79,-64,921,795),47206=>array(79,-64,921,795),47207=>array(79,-63,921,795),47208=>array(79,-68,921,795),47209=>array(79,-64,921,795),47210=>array(79,-63,921,795),47211=>array(79,-74,921,795),47212=>array(79,-62,921,795),47213=>array(79,-61,921,795),47214=>array(79,-69,921,795),47215=>array(79,-74,921,795),47216=>array(79,-69,921,795),47217=>array(79,-68,921,795),47218=>array(79,-72,921,795),47219=>array(79,-70,921,795),47220=>array(79,-66,921,795),47221=>array(79,-59,921,795),47222=>array(79,-60,921,795),47223=>array(79,-68,921,795),47224=>array(52,-69,936,842),47225=>array(68,-59,936,842),47226=>array(68,-61,936,842),47227=>array(68,-71,936,842),47228=>array(74,-45,936,843),47229=>array(68,-69,936,842),47230=>array(68,-76,936,842),47231=>array(68,-44,936,842),47232=>array(68,-62,936,842),47233=>array(68,-64,936,842),47234=>array(68,-64,936,842),47235=>array(68,-64,936,842),47236=>array(68,-70,936,842),47237=>array(68,-64,936,842),47238=>array(68,-64,936,842),47239=>array(68,-76,936,842),47240=>array(68,-62,936,842),47241=>array(68,-61,936,842),47242=>array(68,-70,936,842),47243=>array(68,-74,936,842),47244=>array(68,-69,936,842),47245=>array(68,-67,936,842),47246=>array(68,-72,936,842),47247=>array(68,-71,936,842),47248=>array(68,-66,936,842),47249=>array(68,-59,936,842),47250=>array(68,-60,936,842),47251=>array(68,-69,936,842),47252=>array(61,-68,907,843),47253=>array(64,-61,908,842),47254=>array(64,-61,908,842),47255=>array(64,-71,931,842),47256=>array(58,-46,907,842),47257=>array(64,-68,912,842),47258=>array(64,-76,908,842),47259=>array(64,-44,921,842),47260=>array(64,-62,917,842),47261=>array(64,-64,908,842),47262=>array(64,-64,908,842),47263=>array(64,-64,908,842),47264=>array(64,-69,923,842),47265=>array(64,-64,908,842),47266=>array(64,-64,908,842),47267=>array(64,-76,908,842),47268=>array(64,-62,908,842),47269=>array(64,-61,908,842),47270=>array(64,-69,922,842),47271=>array(64,-74,929,842),47272=>array(64,-69,927,842),47273=>array(64,-68,911,842),47274=>array(64,-72,929,842),47275=>array(64,-70,936,842),47276=>array(64,-66,908,842),47277=>array(64,-59,916,842),47278=>array(64,-60,928,842),47279=>array(64,-68,908,842),47280=>array(62,-69,907,842),47281=>array(64,-61,907,841),47282=>array(64,-61,907,841),47283=>array(64,-71,931,841),47284=>array(64,-46,907,842),47285=>array(64,-68,912,841),47286=>array(64,-76,907,841),47287=>array(64,-44,921,841),47288=>array(64,-62,917,841),47289=>array(64,-64,907,841),47290=>array(64,-64,908,841),47291=>array(64,-64,908,841),47292=>array(64,-69,923,841),47293=>array(64,-64,908,841),47294=>array(64,-64,908,841),47295=>array(64,-76,907,841),47296=>array(64,-62,907,841),47297=>array(64,-61,907,841),47298=>array(64,-69,922,841),47299=>array(64,-74,929,841),47300=>array(64,-69,927,841),47301=>array(64,-68,911,841),47302=>array(64,-72,929,841),47303=>array(64,-70,936,841),47304=>array(64,-66,908,841),47305=>array(64,-59,916,841),47306=>array(64,-60,928,841),47307=>array(64,-68,908,841),47308=>array(62,27,943,755),47309=>array(79,-61,921,795),47310=>array(79,-61,921,795),47311=>array(79,-71,921,795),47312=>array(79,-46,922,795),47313=>array(79,-68,921,795),47314=>array(79,-74,921,795),47315=>array(79,-44,921,795),47316=>array(79,-62,921,795),47317=>array(79,-64,921,795),47318=>array(79,-64,921,795),47319=>array(79,-63,921,795),47320=>array(79,-68,921,795),47321=>array(79,-64,921,795),47322=>array(79,-63,921,795),47323=>array(79,-74,921,795),47324=>array(79,-62,921,795),47325=>array(79,-61,921,795),47326=>array(79,-69,921,795),47327=>array(79,-74,921,795),47328=>array(79,-69,921,795),47329=>array(79,-68,921,795),47330=>array(79,-72,921,795),47331=>array(79,-70,921,795),47332=>array(79,-66,921,795),47333=>array(79,-59,921,795),47334=>array(79,-60,921,795),47335=>array(79,-68,921,795),47336=>array(79,-64,920,795),47337=>array(79,-61,921,795),47338=>array(79,-61,921,795),47339=>array(79,-71,921,795),47340=>array(79,-46,921,795),47341=>array(79,-68,921,795),47342=>array(79,-74,921,795),47343=>array(79,-44,921,795),47344=>array(79,-62,921,795),47345=>array(79,-64,921,795),47346=>array(79,-64,921,795),47347=>array(79,-63,921,795),47348=>array(79,-68,921,795),47349=>array(79,-64,921,795),47350=>array(79,-63,921,795),47351=>array(79,-74,921,795),47352=>array(79,-62,921,795),47353=>array(79,-61,921,795),47354=>array(79,-69,921,795),47355=>array(79,-74,921,795),47356=>array(79,-69,921,795),47357=>array(79,-68,921,795),47358=>array(79,-72,921,795),47359=>array(79,-70,921,795),47360=>array(79,-66,921,795),47361=>array(79,-59,921,795),47362=>array(79,-60,921,795),47363=>array(79,-68,921,795),47364=>array(69,-70,907,841),47365=>array(76,-61,907,841),47366=>array(76,-61,907,841),47367=>array(76,-71,931,841),47368=>array(76,-46,907,841),47369=>array(76,-68,912,841),47370=>array(76,-76,907,841),47371=>array(76,-44,921,841),47372=>array(76,-62,917,841),47373=>array(76,-64,907,841),47374=>array(76,-64,908,841),47375=>array(76,-64,908,841),47376=>array(76,-69,923,841),47377=>array(76,-64,908,841),47378=>array(76,-64,908,841),47379=>array(76,-76,906,841),47380=>array(76,-62,907,841),47381=>array(76,-61,907,841),47382=>array(76,-69,922,841),47383=>array(76,-74,929,841),47384=>array(76,-69,927,841),47385=>array(76,-68,911,841),47386=>array(76,-72,929,841),47387=>array(76,-70,936,841),47388=>array(76,-66,908,841),47389=>array(76,-59,916,841),47390=>array(76,-60,928,841),47391=>array(76,-68,908,841),47392=>array(52,-68,907,843),47393=>array(72,-61,907,843),47394=>array(72,-61,907,843),47395=>array(72,-71,931,843),47396=>array(90,-46,907,843),47397=>array(72,-68,912,843),47398=>array(72,-76,907,843),47399=>array(72,-44,921,843),47400=>array(72,-62,917,843),47401=>array(72,-64,907,843),47402=>array(72,-64,908,843),47403=>array(72,-64,908,843),47404=>array(72,-69,923,843),47405=>array(72,-64,908,843),47406=>array(72,-64,908,843),47407=>array(72,-76,907,843),47408=>array(72,-62,907,843),47409=>array(72,-61,907,843),47410=>array(72,-69,922,843),47411=>array(72,-74,929,843),47412=>array(72,-69,927,843),47413=>array(72,-68,911,843),47414=>array(72,-72,929,843),47415=>array(72,-70,936,843),47416=>array(72,-66,908,843),47417=>array(72,-59,916,843),47418=>array(72,-60,928,843),47419=>array(72,-68,908,843),47420=>array(70,-69,907,842),47421=>array(64,-61,907,842),47422=>array(64,-61,907,842),47423=>array(64,-71,931,842),47424=>array(65,-46,907,843),47425=>array(64,-68,912,842),47426=>array(64,-76,907,842),47427=>array(64,-44,921,842),47428=>array(64,-62,917,842),47429=>array(64,-64,907,842),47430=>array(64,-64,908,842),47431=>array(64,-64,908,842),47432=>array(64,-69,923,842),47433=>array(64,-64,908,842),47434=>array(64,-64,908,842),47435=>array(64,-76,907,842),47436=>array(64,-62,907,842),47437=>array(64,-61,907,842),47438=>array(64,-69,922,842),47439=>array(64,-74,929,842),47440=>array(64,-69,927,842),47441=>array(64,-68,911,842),47442=>array(64,-72,929,842),47443=>array(64,-70,936,842),47444=>array(64,-66,908,842),47445=>array(64,-59,916,842),47446=>array(64,-60,928,842),47447=>array(64,-68,908,842),47448=>array(71,-64,928,795),47449=>array(79,-61,921,795),47450=>array(79,-61,921,795),47451=>array(79,-71,921,795),47452=>array(79,-46,921,795),47453=>array(79,-68,921,795),47454=>array(79,-74,921,795),47455=>array(79,-44,921,795),47456=>array(79,-62,921,795),47457=>array(79,-64,921,795),47458=>array(79,-64,921,795),47459=>array(79,-63,921,795),47460=>array(79,-68,921,795),47461=>array(79,-64,921,795),47462=>array(79,-63,921,795),47463=>array(79,-74,921,795),47464=>array(79,-62,921,795),47465=>array(79,-61,921,795),47466=>array(79,-69,921,795),47467=>array(79,-74,921,795),47468=>array(79,-69,921,795),47469=>array(79,-68,921,795),47470=>array(79,-72,921,795),47471=>array(79,-70,921,795),47472=>array(79,-66,921,795),47473=>array(79,-59,921,795),47474=>array(79,-60,921,795),47475=>array(79,-68,921,795),47476=>array(57,42,943,730),47477=>array(79,-61,921,795),47478=>array(79,-61,921,795),47479=>array(79,-71,921,795),47480=>array(79,-46,921,795),47481=>array(79,-68,921,795),47482=>array(79,-74,921,795),47483=>array(79,-44,921,795),47484=>array(79,-62,921,795),47485=>array(79,-64,921,795),47486=>array(79,-64,921,795),47487=>array(79,-63,921,795),47488=>array(79,-68,921,795),47489=>array(79,-64,921,795),47490=>array(79,-63,921,795),47491=>array(79,-74,921,795),47492=>array(79,-62,921,795),47493=>array(79,-61,921,795),47494=>array(79,-69,921,795),47495=>array(79,-74,921,795),47496=>array(79,-69,921,795),47497=>array(79,-68,921,795),47498=>array(79,-72,921,795),47499=>array(79,-70,921,795),47500=>array(79,-66,921,795),47501=>array(79,-59,921,795),47502=>array(79,-60,921,795),47503=>array(79,-68,921,795),47504=>array(67,-69,907,842),47505=>array(64,-61,908,842),47506=>array(64,-61,908,842),47507=>array(64,-71,931,842),47508=>array(64,-46,908,842),47509=>array(64,-68,912,842),47510=>array(64,-76,908,842),47511=>array(64,-44,921,842),47512=>array(64,-62,917,842),47513=>array(64,-64,908,842),47514=>array(64,-64,908,842),47515=>array(64,-64,908,842),47516=>array(64,-69,923,842),47517=>array(64,-64,908,842),47518=>array(64,-64,908,842),47519=>array(64,-76,908,842),47520=>array(64,-62,908,842),47521=>array(64,-61,908,842),47522=>array(64,-69,922,842),47523=>array(64,-74,929,842),47524=>array(64,-69,927,842),47525=>array(64,-68,911,842),47526=>array(64,-72,929,842),47527=>array(64,-70,936,842),47528=>array(64,-66,908,842),47529=>array(64,-59,916,842),47530=>array(64,-60,928,842),47531=>array(64,-68,908,842),47532=>array(143,-69,907,842),47533=>array(138,-61,907,842),47534=>array(138,-61,907,842),47535=>array(138,-71,931,842),47536=>array(138,-46,907,842),47537=>array(138,-68,912,842),47538=>array(138,-76,907,842),47539=>array(138,-44,921,842),47540=>array(138,-62,917,842),47541=>array(138,-64,907,842),47542=>array(138,-64,908,842),47543=>array(138,-64,908,842),47544=>array(138,-69,923,842),47545=>array(138,-64,908,842),47546=>array(138,-64,908,842),47547=>array(138,-76,907,842),47548=>array(138,-62,907,842),47549=>array(138,-61,907,842),47550=>array(138,-69,922,842),47551=>array(138,-74,929,842),47552=>array(138,-69,927,842),47553=>array(138,-68,911,842),47554=>array(138,-72,929,842),47555=>array(138,-70,936,842),47556=>array(138,-66,908,842),47557=>array(138,-59,916,842),47558=>array(138,-60,928,842),47559=>array(138,-68,908,842),47560=>array(127,-69,936,842),47561=>array(122,-59,936,842),47562=>array(122,-61,936,842),47563=>array(122,-71,936,842),47564=>array(122,-45,936,842),47565=>array(122,-69,936,842),47566=>array(122,-76,936,842),47567=>array(122,-44,936,842),47568=>array(122,-62,936,842),47569=>array(122,-64,936,842),47570=>array(122,-64,936,842),47571=>array(122,-64,936,842),47572=>array(122,-70,936,842),47573=>array(122,-64,936,842),47574=>array(122,-64,936,842),47575=>array(122,-76,936,842),47576=>array(122,-62,936,842),47577=>array(122,-61,936,842),47578=>array(122,-70,936,842),47579=>array(122,-74,936,842),47580=>array(118,-69,936,842),47581=>array(122,-67,936,842),47582=>array(122,-72,936,842),47583=>array(122,-71,936,842),47584=>array(122,-66,936,842),47585=>array(122,-59,936,842),47586=>array(122,-60,936,842),47587=>array(122,-69,936,842),47588=>array(127,-69,907,842),47589=>array(122,-61,907,842),47590=>array(122,-61,907,842),47591=>array(122,-71,931,842),47592=>array(122,-46,907,842),47593=>array(122,-68,912,842),47594=>array(122,-76,907,842),47595=>array(122,-44,921,842),47596=>array(122,-62,917,842),47597=>array(122,-64,907,842),47598=>array(122,-64,908,842),47599=>array(122,-64,908,842),47600=>array(122,-69,923,842),47601=>array(122,-64,908,842),47602=>array(122,-64,908,842),47603=>array(122,-76,907,842),47604=>array(122,-62,907,842),47605=>array(122,-61,907,842),47606=>array(122,-69,922,842),47607=>array(122,-74,929,842),47608=>array(122,-69,927,842),47609=>array(122,-68,911,842),47610=>array(122,-72,929,842),47611=>array(122,-70,936,842),47612=>array(122,-66,908,842),47613=>array(122,-59,916,842),47614=>array(122,-60,928,842),47615=>array(122,-68,908,842),47616=>array(127,-68,935,843),47617=>array(122,-59,936,842),47618=>array(122,-61,936,842),47619=>array(122,-71,936,842),47620=>array(122,-45,936,842),47621=>array(122,-69,936,842),47622=>array(122,-76,936,842),47623=>array(122,-44,936,842),47624=>array(122,-62,936,842),47625=>array(122,-64,936,842),47626=>array(122,-64,936,842),47627=>array(122,-64,936,842),47628=>array(122,-70,936,842),47629=>array(122,-64,936,842),47630=>array(122,-64,936,842),47631=>array(122,-76,936,842),47632=>array(122,-62,936,842),47633=>array(122,-61,936,842),47634=>array(122,-70,936,842),47635=>array(122,-74,936,842),47636=>array(118,-69,936,842),47637=>array(122,-67,936,842),47638=>array(122,-72,936,842),47639=>array(122,-71,936,842),47640=>array(122,-66,936,842),47641=>array(122,-59,936,842),47642=>array(122,-60,936,842),47643=>array(122,-69,936,842),47644=>array(127,-69,907,842),47645=>array(122,-61,907,842),47646=>array(122,-61,907,842),47647=>array(122,-71,931,842),47648=>array(122,-46,907,842),47649=>array(122,-68,912,842),47650=>array(122,-76,907,842),47651=>array(122,-44,921,842),47652=>array(122,-62,917,842),47653=>array(122,-64,907,842),47654=>array(122,-64,908,842),47655=>array(122,-64,908,842),47656=>array(122,-69,923,842),47657=>array(122,-64,908,842),47658=>array(122,-64,908,842),47659=>array(122,-76,907,842),47660=>array(122,-62,907,842),47661=>array(122,-61,907,842),47662=>array(122,-69,922,842),47663=>array(122,-74,929,842),47664=>array(122,-69,927,842),47665=>array(122,-68,911,842),47666=>array(122,-72,929,842),47667=>array(122,-70,936,842),47668=>array(122,-66,908,842),47669=>array(122,-59,916,842),47670=>array(122,-60,928,842),47671=>array(122,-68,908,842),47672=>array(127,-70,907,841),47673=>array(122,-61,907,841),47674=>array(122,-61,907,841),47675=>array(122,-71,931,841),47676=>array(112,-46,907,841),47677=>array(122,-68,912,841),47678=>array(122,-76,907,841),47679=>array(122,-44,921,841),47680=>array(122,-62,917,841),47681=>array(122,-64,907,841),47682=>array(122,-64,908,841),47683=>array(122,-64,908,841),47684=>array(122,-69,923,841),47685=>array(122,-64,908,841),47686=>array(122,-64,908,841),47687=>array(122,-76,906,841),47688=>array(122,-62,907,841),47689=>array(122,-61,907,841),47690=>array(122,-69,922,841),47691=>array(122,-74,929,841),47692=>array(122,-69,927,841),47693=>array(122,-68,911,841),47694=>array(122,-72,929,841),47695=>array(122,-70,936,841),47696=>array(122,-66,908,841),47697=>array(122,-59,916,841),47698=>array(122,-60,928,841),47699=>array(122,-68,908,841),47700=>array(127,-68,907,843),47701=>array(122,-61,907,843),47702=>array(122,-61,907,843),47703=>array(122,-71,931,843),47704=>array(122,-46,907,843),47705=>array(122,-68,912,843),47706=>array(122,-76,907,843),47707=>array(122,-44,921,843),47708=>array(122,-62,917,843),47709=>array(122,-64,907,843),47710=>array(122,-64,908,843),47711=>array(122,-64,908,843),47712=>array(122,-69,923,843),47713=>array(122,-64,908,843),47714=>array(122,-64,908,843),47715=>array(122,-76,907,843),47716=>array(122,-62,907,843),47717=>array(122,-61,907,843),47718=>array(122,-69,922,843),47719=>array(122,-74,929,843),47720=>array(122,-69,927,843),47721=>array(122,-68,911,843),47722=>array(122,-72,929,843),47723=>array(122,-70,936,843),47724=>array(122,-66,908,843),47725=>array(122,-59,916,843),47726=>array(122,-60,928,843),47727=>array(122,-68,908,843),47728=>array(127,-70,907,842),47729=>array(122,-61,908,842),47730=>array(122,-61,908,842),47731=>array(122,-71,931,842),47732=>array(112,-46,907,842),47733=>array(122,-68,912,842),47734=>array(122,-76,908,842),47735=>array(122,-44,921,842),47736=>array(122,-62,917,842),47737=>array(122,-64,908,842),47738=>array(122,-64,908,842),47739=>array(122,-64,908,842),47740=>array(122,-69,923,842),47741=>array(122,-64,908,842),47742=>array(122,-64,908,842),47743=>array(122,-76,908,842),47744=>array(122,-62,908,842),47745=>array(122,-61,908,842),47746=>array(122,-69,922,842),47747=>array(122,-74,929,842),47748=>array(122,-69,927,842),47749=>array(122,-68,911,842),47750=>array(122,-72,929,842),47751=>array(122,-70,936,842),47752=>array(122,-66,908,842),47753=>array(122,-59,916,842),47754=>array(122,-60,928,842),47755=>array(122,-68,908,842),47756=>array(127,-68,907,843),47757=>array(122,-61,907,843),47758=>array(122,-61,907,843),47759=>array(122,-71,931,843),47760=>array(122,-46,907,843),47761=>array(122,-68,912,843),47762=>array(122,-76,907,843),47763=>array(122,-44,921,843),47764=>array(122,-62,917,843),47765=>array(122,-64,907,843),47766=>array(122,-64,908,843),47767=>array(122,-64,908,843),47768=>array(122,-69,923,843),47769=>array(122,-64,908,843),47770=>array(122,-64,908,843),47771=>array(122,-76,907,843),47772=>array(122,-62,907,843),47773=>array(122,-61,907,843),47774=>array(122,-69,922,843),47775=>array(122,-74,929,843),47776=>array(122,-69,927,843),47777=>array(122,-68,911,843),47778=>array(122,-72,929,843),47779=>array(122,-70,936,843),47780=>array(122,-66,908,843),47781=>array(122,-59,916,843),47782=>array(122,-60,928,843),47783=>array(122,-68,908,843),47784=>array(62,17,943,740),47785=>array(79,-61,921,800),47786=>array(79,-61,921,800),47787=>array(79,-71,921,800),47788=>array(79,-46,921,800),47789=>array(79,-68,921,800),47790=>array(79,-74,921,800),47791=>array(79,-44,921,800),47792=>array(79,-62,921,800),47793=>array(79,-64,921,800),47794=>array(79,-64,921,800),47795=>array(79,-63,921,800),47796=>array(79,-68,921,800),47797=>array(79,-64,921,800),47798=>array(79,-63,921,800),47799=>array(79,-74,921,800),47800=>array(79,-62,921,800),47801=>array(79,-61,921,800),47802=>array(79,-69,921,800),47803=>array(79,-74,921,800),47804=>array(79,-69,921,800),47805=>array(79,-68,921,800),47806=>array(79,-72,921,800),47807=>array(79,-70,921,800),47808=>array(79,-66,921,800),47809=>array(79,-59,921,800),47810=>array(79,-60,921,800),47811=>array(79,-68,921,800),47812=>array(52,-69,936,842),47813=>array(77,-59,936,843),47814=>array(77,-61,936,843),47815=>array(77,-71,936,843),47816=>array(66,-45,936,842),47817=>array(77,-69,936,843),47818=>array(77,-76,936,843),47819=>array(77,-44,936,843),47820=>array(77,-62,936,843),47821=>array(77,-64,936,843),47822=>array(77,-64,936,843),47823=>array(77,-64,936,843),47824=>array(77,-70,936,843),47825=>array(77,-64,936,843),47826=>array(77,-64,936,843),47827=>array(77,-76,936,843),47828=>array(77,-62,936,843),47829=>array(77,-61,936,843),47830=>array(77,-70,936,843),47831=>array(77,-74,936,843),47832=>array(77,-69,936,843),47833=>array(77,-67,936,843),47834=>array(77,-72,936,843),47835=>array(77,-71,936,843),47836=>array(77,-66,936,843),47837=>array(77,-59,936,843),47838=>array(77,-60,936,843),47839=>array(77,-69,936,843),47840=>array(61,-69,907,842),47841=>array(79,-61,907,843),47842=>array(79,-61,907,843),47843=>array(79,-71,931,843),47844=>array(72,-46,907,842),47845=>array(79,-68,912,843),47846=>array(79,-76,907,843),47847=>array(79,-44,921,843),47848=>array(79,-62,917,843),47849=>array(79,-64,907,843),47850=>array(79,-64,908,843),47851=>array(79,-64,908,843),47852=>array(79,-69,923,843),47853=>array(79,-64,908,843),47854=>array(79,-64,908,843),47855=>array(79,-76,907,843),47856=>array(79,-62,907,843),47857=>array(79,-61,907,843),47858=>array(79,-69,922,843),47859=>array(79,-74,929,843),47860=>array(79,-69,927,843),47861=>array(79,-68,911,843),47862=>array(79,-72,929,843),47863=>array(79,-70,936,843),47864=>array(79,-66,908,843),47865=>array(79,-59,916,843),47866=>array(79,-60,928,843),47867=>array(79,-68,908,843),47868=>array(61,-69,907,842),47869=>array(64,-61,908,841),47870=>array(64,-61,908,841),47871=>array(64,-71,931,841),47872=>array(65,-46,908,841),47873=>array(64,-68,912,841),47874=>array(64,-76,908,841),47875=>array(64,-44,921,841),47876=>array(64,-62,917,841),47877=>array(64,-64,908,841),47878=>array(64,-64,908,841),47879=>array(64,-64,908,841),47880=>array(64,-69,923,841),47881=>array(64,-64,908,841),47882=>array(64,-64,908,841),47883=>array(64,-76,908,841),47884=>array(64,-62,908,841),47885=>array(64,-61,908,841),47886=>array(64,-69,922,841),47887=>array(64,-74,929,841),47888=>array(64,-69,927,841),47889=>array(64,-68,911,841),47890=>array(64,-72,929,841),47891=>array(64,-70,936,841),47892=>array(64,-66,908,841),47893=>array(64,-59,916,841),47894=>array(64,-60,928,841),47895=>array(64,-68,908,841),47896=>array(60,-3,940,765),47897=>array(79,-61,922,800),47898=>array(79,-61,922,800),47899=>array(79,-71,922,800),47900=>array(79,-46,922,800),47901=>array(79,-68,922,800),47902=>array(79,-74,922,800),47903=>array(79,-44,922,800),47904=>array(79,-62,922,800),47905=>array(79,-64,922,800),47906=>array(79,-64,922,800),47907=>array(79,-63,922,800),47908=>array(79,-68,922,800),47909=>array(79,-64,922,800),47910=>array(79,-63,922,800),47911=>array(79,-74,922,800),47912=>array(79,-62,922,800),47913=>array(79,-61,922,800),47914=>array(79,-69,922,800),47915=>array(79,-74,922,800),47916=>array(79,-69,922,800),47917=>array(79,-68,922,800),47918=>array(79,-72,922,800),47919=>array(79,-70,922,800),47920=>array(79,-66,922,800),47921=>array(79,-59,922,800),47922=>array(79,-60,922,800),47923=>array(79,-68,922,800),47924=>array(79,-64,921,800),47925=>array(79,-61,921,800),47926=>array(79,-61,921,800),47927=>array(79,-71,921,800),47928=>array(79,-46,921,800),47929=>array(79,-68,921,800),47930=>array(79,-74,921,800),47931=>array(79,-44,921,800),47932=>array(79,-62,921,800),47933=>array(79,-64,921,800),47934=>array(79,-64,921,800),47935=>array(79,-63,921,800),47936=>array(79,-68,921,800),47937=>array(79,-64,921,800),47938=>array(79,-63,921,800),47939=>array(79,-74,921,800),47940=>array(79,-62,921,800),47941=>array(79,-61,921,800),47942=>array(79,-69,921,800),47943=>array(79,-74,921,800),47944=>array(79,-69,921,800),47945=>array(79,-68,921,800),47946=>array(79,-72,921,800),47947=>array(79,-70,921,800),47948=>array(79,-66,921,800),47949=>array(79,-59,921,800),47950=>array(79,-60,921,800),47951=>array(79,-68,921,800),47952=>array(69,-70,907,841),47953=>array(79,-61,907,841),47954=>array(79,-61,907,841),47955=>array(79,-71,931,841),47956=>array(79,-46,907,841),47957=>array(79,-68,912,841),47958=>array(79,-76,907,841),47959=>array(79,-44,921,841),47960=>array(79,-62,917,841),47961=>array(79,-64,907,841),47962=>array(79,-64,908,841),47963=>array(79,-64,908,841),47964=>array(79,-69,923,841),47965=>array(79,-64,908,841),47966=>array(79,-64,908,841),47967=>array(79,-76,906,841),47968=>array(79,-62,907,841),47969=>array(79,-61,907,841),47970=>array(79,-69,922,841),47971=>array(79,-74,929,841),47972=>array(79,-69,927,841),47973=>array(79,-68,911,841),47974=>array(79,-72,929,841),47975=>array(79,-70,936,841),47976=>array(79,-66,908,841),47977=>array(79,-59,916,841),47978=>array(79,-60,928,841),47979=>array(79,-68,908,841),47980=>array(63,-68,912,843),47981=>array(72,-61,907,843),47982=>array(72,-61,907,843),47983=>array(72,-71,931,843),47984=>array(89,-46,907,843),47985=>array(72,-68,912,843),47986=>array(72,-76,907,843),47987=>array(72,-44,921,843),47988=>array(72,-62,917,843),47989=>array(72,-64,907,843),47990=>array(72,-64,908,843),47991=>array(72,-64,908,843),47992=>array(72,-69,923,843),47993=>array(72,-64,908,843),47994=>array(72,-64,908,843),47995=>array(72,-76,907,843),47996=>array(72,-62,907,843),47997=>array(72,-61,907,843),47998=>array(72,-69,922,843),47999=>array(72,-74,929,843),48000=>array(72,-69,927,843),48001=>array(72,-68,911,843),48002=>array(72,-72,929,843),48003=>array(72,-70,936,843),48004=>array(72,-66,908,843),48005=>array(72,-59,916,843),48006=>array(72,-60,928,843),48007=>array(72,-68,908,843),48008=>array(51,-69,907,842),48009=>array(65,-61,907,842),48010=>array(65,-61,907,842),48011=>array(65,-71,931,842),48012=>array(65,-46,907,842),48013=>array(65,-68,912,842),48014=>array(65,-76,907,842),48015=>array(65,-44,921,842),48016=>array(65,-62,917,842),48017=>array(65,-64,907,842),48018=>array(65,-64,908,842),48019=>array(65,-64,908,842),48020=>array(65,-69,923,842),48021=>array(65,-64,908,842),48022=>array(65,-64,908,842),48023=>array(65,-76,907,842),48024=>array(65,-62,907,842),48025=>array(65,-61,907,842),48026=>array(65,-69,922,842),48027=>array(65,-74,929,842),48028=>array(65,-69,927,842),48029=>array(65,-68,911,842),48030=>array(65,-72,929,842),48031=>array(65,-70,936,842),48032=>array(65,-66,908,842),48033=>array(65,-59,916,842),48034=>array(65,-60,928,842),48035=>array(65,-68,908,842),48036=>array(71,-64,928,800),48037=>array(79,-61,921,800),48038=>array(79,-61,921,800),48039=>array(79,-71,921,800),48040=>array(79,-46,921,790),48041=>array(79,-68,921,800),48042=>array(79,-74,921,800),48043=>array(79,-44,921,800),48044=>array(79,-62,921,800),48045=>array(79,-64,921,800),48046=>array(79,-64,921,800),48047=>array(79,-63,921,800),48048=>array(79,-68,921,800),48049=>array(79,-64,921,800),48050=>array(79,-63,921,800),48051=>array(79,-74,921,800),48052=>array(79,-62,921,800),48053=>array(79,-61,921,800),48054=>array(79,-69,921,800),48055=>array(79,-74,921,800),48056=>array(79,-69,921,800),48057=>array(79,-68,921,800),48058=>array(79,-72,921,800),48059=>array(79,-70,921,800),48060=>array(79,-66,921,800),48061=>array(79,-59,921,800),48062=>array(79,-60,921,800),48063=>array(79,-68,921,800),48064=>array(57,42,943,710),48065=>array(79,-61,921,791),48066=>array(79,-61,921,791),48067=>array(79,-71,921,791),48068=>array(79,-46,921,791),48069=>array(79,-68,921,791),48070=>array(79,-74,921,791),48071=>array(79,-44,921,791),48072=>array(79,-62,921,791),48073=>array(79,-64,921,791),48074=>array(79,-64,921,791),48075=>array(79,-63,921,791),48076=>array(79,-68,921,791),48077=>array(79,-64,921,791),48078=>array(79,-63,921,791),48079=>array(79,-74,921,791),48080=>array(79,-62,921,791),48081=>array(79,-61,921,791),48082=>array(79,-69,921,791),48083=>array(79,-74,921,791),48084=>array(79,-69,921,791),48085=>array(79,-68,921,791),48086=>array(79,-72,921,791),48087=>array(79,-70,921,791),48088=>array(79,-66,921,791),48089=>array(79,-59,921,791),48090=>array(79,-60,921,791),48091=>array(79,-68,921,791),48092=>array(67,-69,907,842),48093=>array(64,-61,907,842),48094=>array(64,-61,907,842),48095=>array(64,-71,931,842),48096=>array(64,-46,907,842),48097=>array(64,-68,912,842),48098=>array(64,-76,907,842),48099=>array(64,-44,921,842),48100=>array(64,-62,917,842),48101=>array(64,-64,907,842),48102=>array(64,-64,908,842),48103=>array(64,-64,908,842),48104=>array(64,-69,923,842),48105=>array(64,-64,908,842),48106=>array(64,-64,908,842),48107=>array(64,-76,907,842),48108=>array(64,-62,907,842),48109=>array(64,-61,907,842),48110=>array(64,-69,922,842),48111=>array(64,-74,929,842),48112=>array(64,-69,927,842),48113=>array(64,-68,911,842),48114=>array(64,-72,929,842),48115=>array(64,-70,936,842),48116=>array(64,-66,908,842),48117=>array(64,-59,916,842),48118=>array(64,-60,928,842),48119=>array(64,-68,908,842),48120=>array(147,-69,907,842),48121=>array(157,-61,907,842),48122=>array(157,-61,907,842),48123=>array(157,-71,931,842),48124=>array(122,-46,907,842),48125=>array(157,-68,912,842),48126=>array(157,-76,907,842),48127=>array(157,-44,921,842),48128=>array(157,-62,917,842),48129=>array(157,-64,907,842),48130=>array(157,-64,908,842),48131=>array(157,-64,908,842),48132=>array(157,-69,923,842),48133=>array(157,-64,908,842),48134=>array(157,-64,908,842),48135=>array(157,-76,907,842),48136=>array(157,-62,907,842),48137=>array(157,-61,907,842),48138=>array(157,-69,922,842),48139=>array(157,-74,929,842),48140=>array(143,-69,927,842),48141=>array(157,-68,911,842),48142=>array(157,-72,929,842),48143=>array(157,-70,936,842),48144=>array(157,-66,908,842),48145=>array(157,-59,916,842),48146=>array(157,-60,928,842),48147=>array(157,-68,908,842),48148=>array(122,-69,936,842),48149=>array(122,-59,936,837),48150=>array(122,-61,936,837),48151=>array(122,-71,936,837),48152=>array(122,-45,936,842),48153=>array(122,-69,936,837),48154=>array(122,-76,936,837),48155=>array(122,-44,936,837),48156=>array(122,-62,936,837),48157=>array(122,-64,936,837),48158=>array(122,-64,936,837),48159=>array(122,-64,936,837),48160=>array(122,-70,936,837),48161=>array(122,-64,936,837),48162=>array(122,-64,936,837),48163=>array(122,-76,936,837),48164=>array(122,-62,936,837),48165=>array(122,-61,936,837),48166=>array(122,-70,936,837),48167=>array(122,-74,936,837),48168=>array(118,-69,936,837),48169=>array(122,-67,936,837),48170=>array(122,-72,936,837),48171=>array(122,-71,936,837),48172=>array(122,-66,936,837),48173=>array(122,-59,936,837),48174=>array(122,-60,936,837),48175=>array(122,-69,936,837),48176=>array(122,-69,907,842),48177=>array(157,-61,907,842),48178=>array(157,-61,907,842),48179=>array(157,-71,931,842),48180=>array(157,-46,907,842),48181=>array(157,-68,912,842),48182=>array(157,-76,907,842),48183=>array(157,-44,921,842),48184=>array(157,-62,917,842),48185=>array(157,-64,907,842),48186=>array(157,-64,908,842),48187=>array(157,-64,908,842),48188=>array(157,-69,923,842),48189=>array(157,-64,908,842),48190=>array(157,-64,908,842),48191=>array(157,-76,907,842),48192=>array(157,-62,907,842),48193=>array(157,-61,907,842),48194=>array(157,-69,922,842),48195=>array(157,-74,929,842),48196=>array(143,-69,927,842),48197=>array(157,-68,911,842),48198=>array(157,-72,929,842),48199=>array(157,-70,936,842),48200=>array(157,-66,908,842),48201=>array(157,-59,916,842),48202=>array(157,-60,928,842),48203=>array(157,-68,908,842),48204=>array(122,-68,935,843),48205=>array(122,-59,936,842),48206=>array(122,-61,936,842),48207=>array(122,-71,936,842),48208=>array(122,-45,936,842),48209=>array(122,-69,936,842),48210=>array(122,-76,936,842),48211=>array(122,-44,936,842),48212=>array(122,-62,936,842),48213=>array(122,-64,936,842),48214=>array(122,-64,936,842),48215=>array(122,-64,936,842),48216=>array(122,-70,936,842),48217=>array(122,-64,936,842),48218=>array(122,-64,936,842),48219=>array(122,-76,936,842),48220=>array(122,-62,936,842),48221=>array(122,-61,936,842),48222=>array(122,-70,936,842),48223=>array(122,-74,936,842),48224=>array(118,-69,936,842),48225=>array(122,-67,936,842),48226=>array(122,-72,936,842),48227=>array(122,-71,936,842),48228=>array(122,-66,936,842),48229=>array(122,-59,936,842),48230=>array(122,-60,936,842),48231=>array(122,-69,936,842),48232=>array(122,-69,907,842),48233=>array(157,-61,907,842),48234=>array(157,-61,907,842),48235=>array(157,-71,931,842),48236=>array(157,-46,907,842),48237=>array(157,-68,912,842),48238=>array(157,-76,907,842),48239=>array(157,-44,921,842),48240=>array(157,-62,917,842),48241=>array(157,-64,907,842),48242=>array(157,-64,908,842),48243=>array(157,-64,908,842),48244=>array(157,-69,923,842),48245=>array(157,-64,908,842),48246=>array(157,-64,908,842),48247=>array(157,-76,907,842),48248=>array(157,-62,907,842),48249=>array(157,-61,907,842),48250=>array(157,-69,922,842),48251=>array(157,-74,929,842),48252=>array(143,-69,927,842),48253=>array(157,-68,911,842),48254=>array(157,-72,929,842),48255=>array(157,-70,936,842),48256=>array(157,-66,908,842),48257=>array(157,-59,916,842),48258=>array(157,-60,928,842),48259=>array(157,-68,908,842),48260=>array(127,-70,907,841),48261=>array(122,-61,907,841),48262=>array(122,-61,907,841),48263=>array(122,-71,931,841),48264=>array(122,-46,907,841),48265=>array(122,-68,912,841),48266=>array(122,-76,907,841),48267=>array(122,-44,921,841),48268=>array(122,-62,917,841),48269=>array(122,-64,907,841),48270=>array(122,-64,908,841),48271=>array(122,-64,908,841),48272=>array(122,-69,923,841),48273=>array(122,-64,908,841),48274=>array(122,-64,908,841),48275=>array(122,-76,906,841),48276=>array(122,-62,907,841),48277=>array(122,-61,907,841),48278=>array(122,-69,922,841),48279=>array(122,-74,929,841),48280=>array(122,-69,927,841),48281=>array(122,-68,911,841),48282=>array(122,-72,929,841),48283=>array(122,-70,936,841),48284=>array(122,-66,908,841),48285=>array(122,-59,916,841),48286=>array(122,-60,928,841),48287=>array(122,-68,908,841),48288=>array(122,-68,907,843),48289=>array(127,-61,907,843),48290=>array(127,-61,907,843),48291=>array(127,-71,931,843),48292=>array(127,-46,907,843),48293=>array(127,-68,912,843),48294=>array(127,-76,907,843),48295=>array(127,-44,921,843),48296=>array(127,-62,917,843),48297=>array(127,-64,907,843),48298=>array(127,-64,908,843),48299=>array(127,-64,908,843),48300=>array(127,-69,923,843),48301=>array(127,-64,908,843),48302=>array(127,-64,908,843),48303=>array(127,-76,907,843),48304=>array(127,-62,907,843),48305=>array(127,-61,907,843),48306=>array(127,-69,922,843),48307=>array(127,-74,929,843),48308=>array(127,-69,927,843),48309=>array(127,-68,911,843),48310=>array(127,-72,929,843),48311=>array(127,-70,936,843),48312=>array(127,-66,908,843),48313=>array(127,-59,916,843),48314=>array(127,-60,928,843),48315=>array(127,-68,908,843),48316=>array(127,-70,907,842),48317=>array(122,-61,908,842),48318=>array(122,-61,908,842),48319=>array(122,-71,931,842),48320=>array(122,-46,907,842),48321=>array(122,-68,912,842),48322=>array(122,-76,908,842),48323=>array(122,-44,921,842),48324=>array(122,-62,917,842),48325=>array(122,-64,908,842),48326=>array(122,-64,908,842),48327=>array(122,-64,908,842),48328=>array(122,-69,923,842),48329=>array(122,-64,908,842),48330=>array(122,-64,908,842),48331=>array(122,-76,908,842),48332=>array(122,-62,908,842),48333=>array(122,-61,908,842),48334=>array(122,-69,922,842),48335=>array(122,-74,929,842),48336=>array(122,-69,927,842),48337=>array(122,-68,911,842),48338=>array(122,-72,929,842),48339=>array(122,-70,936,842),48340=>array(122,-66,908,842),48341=>array(122,-59,916,842),48342=>array(122,-60,928,842),48343=>array(122,-68,908,842),48344=>array(122,-68,907,843),48345=>array(127,-61,907,843),48346=>array(127,-61,907,843),48347=>array(127,-71,931,843),48348=>array(127,-46,907,843),48349=>array(127,-68,912,843),48350=>array(127,-76,907,843),48351=>array(127,-44,921,843),48352=>array(127,-62,917,843),48353=>array(127,-64,907,843),48354=>array(127,-64,908,843),48355=>array(127,-64,908,843),48356=>array(127,-69,923,843),48357=>array(127,-64,908,843),48358=>array(127,-64,908,843),48359=>array(127,-76,907,843),48360=>array(127,-62,907,843),48361=>array(127,-61,907,843),48362=>array(127,-69,922,843),48363=>array(127,-74,929,843),48364=>array(127,-69,927,843),48365=>array(127,-68,911,843),48366=>array(127,-72,929,843),48367=>array(127,-70,936,843),48368=>array(127,-66,908,843),48369=>array(127,-59,916,843),48370=>array(127,-60,928,843),48371=>array(127,-68,908,843),48372=>array(62,7,943,795),48373=>array(79,-61,921,815),48374=>array(79,-61,921,815),48375=>array(79,-71,921,815),48376=>array(79,-46,921,815),48377=>array(79,-68,921,815),48378=>array(79,-74,921,815),48379=>array(79,-44,921,815),48380=>array(79,-62,921,815),48381=>array(79,-64,921,815),48382=>array(79,-64,921,815),48383=>array(79,-63,921,815),48384=>array(79,-68,921,815),48385=>array(79,-64,921,815),48386=>array(79,-63,921,815),48387=>array(79,-74,921,815),48388=>array(79,-62,921,815),48389=>array(79,-61,921,815),48390=>array(79,-69,921,815),48391=>array(79,-74,921,815),48392=>array(79,-69,921,815),48393=>array(79,-68,921,815),48394=>array(79,-72,921,815),48395=>array(79,-70,921,815),48396=>array(79,-66,921,815),48397=>array(79,-59,921,815),48398=>array(79,-60,921,815),48399=>array(79,-68,921,815),48400=>array(52,-69,936,842),48401=>array(77,-59,936,843),48402=>array(77,-61,936,843),48403=>array(77,-71,936,843),48404=>array(66,-45,936,842),48405=>array(77,-69,936,843),48406=>array(77,-76,936,843),48407=>array(77,-44,936,843),48408=>array(77,-62,936,843),48409=>array(77,-64,936,843),48410=>array(77,-64,936,843),48411=>array(77,-64,936,843),48412=>array(77,-70,936,843),48413=>array(77,-64,936,843),48414=>array(77,-64,936,843),48415=>array(77,-76,936,843),48416=>array(77,-62,936,843),48417=>array(77,-61,936,843),48418=>array(77,-70,936,843),48419=>array(77,-74,936,843),48420=>array(77,-69,936,843),48421=>array(77,-67,936,843),48422=>array(77,-72,936,843),48423=>array(77,-71,936,843),48424=>array(77,-66,936,843),48425=>array(77,-59,936,843),48426=>array(77,-60,936,843),48427=>array(77,-69,936,843),48428=>array(61,-68,907,843),48429=>array(79,-61,907,843),48430=>array(79,-61,907,843),48431=>array(79,-71,931,843),48432=>array(72,-46,907,842),48433=>array(79,-68,912,843),48434=>array(79,-76,907,843),48435=>array(79,-44,921,843),48436=>array(79,-62,917,843),48437=>array(79,-64,907,843),48438=>array(79,-64,908,843),48439=>array(79,-64,908,843),48440=>array(79,-69,923,843),48441=>array(79,-64,908,843),48442=>array(79,-64,908,843),48443=>array(79,-76,907,843),48444=>array(79,-62,907,843),48445=>array(79,-61,907,843),48446=>array(79,-69,922,843),48447=>array(79,-74,929,843),48448=>array(79,-69,927,843),48449=>array(79,-68,911,843),48450=>array(79,-72,929,843),48451=>array(79,-70,936,843),48452=>array(79,-66,908,843),48453=>array(79,-59,916,843),48454=>array(79,-60,928,843),48455=>array(79,-68,908,843),48456=>array(62,-69,907,842),48457=>array(65,-61,907,842),48458=>array(65,-61,907,842),48459=>array(65,-71,931,842),48460=>array(64,-46,907,842),48461=>array(65,-68,912,842),48462=>array(65,-76,907,842),48463=>array(65,-44,921,842),48464=>array(65,-62,917,842),48465=>array(65,-64,907,842),48466=>array(65,-64,908,842),48467=>array(65,-64,908,842),48468=>array(65,-69,923,842),48469=>array(65,-64,908,842),48470=>array(65,-64,908,842),48471=>array(65,-76,907,842),48472=>array(65,-62,907,842),48473=>array(65,-61,907,842),48474=>array(65,-69,922,842),48475=>array(65,-74,929,842),48476=>array(65,-69,927,842),48477=>array(65,-68,911,842),48478=>array(65,-72,929,842),48479=>array(65,-70,936,842),48480=>array(65,-66,908,842),48481=>array(65,-59,916,842),48482=>array(65,-60,928,842),48483=>array(65,-68,908,842),48484=>array(62,7,943,805),48485=>array(79,-61,922,815),48486=>array(79,-61,922,815),48487=>array(79,-71,922,815),48488=>array(79,-46,922,815),48489=>array(79,-68,922,815),48490=>array(79,-74,922,815),48491=>array(79,-44,922,815),48492=>array(79,-62,922,815),48493=>array(79,-64,922,815),48494=>array(79,-64,922,815),48495=>array(79,-63,922,815),48496=>array(79,-68,922,815),48497=>array(79,-64,922,815),48498=>array(79,-63,922,815),48499=>array(79,-74,922,815),48500=>array(79,-62,922,815),48501=>array(79,-61,922,815),48502=>array(79,-69,922,815),48503=>array(79,-74,922,815),48504=>array(79,-69,922,815),48505=>array(79,-68,922,815),48506=>array(79,-72,922,815),48507=>array(79,-70,922,815),48508=>array(79,-66,922,815),48509=>array(79,-59,922,815),48510=>array(79,-60,922,815),48511=>array(79,-68,922,815),48512=>array(79,-64,921,815),48513=>array(79,-61,921,815),48514=>array(79,-61,921,815),48515=>array(79,-71,921,815),48516=>array(79,-46,921,815),48517=>array(79,-68,921,815),48518=>array(79,-74,921,815),48519=>array(79,-44,921,815),48520=>array(79,-62,921,815),48521=>array(79,-64,921,815),48522=>array(79,-64,921,815),48523=>array(79,-63,921,815),48524=>array(79,-68,921,815),48525=>array(79,-64,921,815),48526=>array(79,-63,921,815),48527=>array(79,-74,921,815),48528=>array(79,-62,921,815),48529=>array(79,-61,921,815),48530=>array(79,-69,921,815),48531=>array(79,-74,921,815),48532=>array(79,-69,921,815),48533=>array(79,-68,921,815),48534=>array(79,-72,921,815),48535=>array(79,-70,921,815),48536=>array(79,-66,921,815),48537=>array(79,-59,921,815),48538=>array(79,-60,921,815),48539=>array(79,-68,921,815),48540=>array(69,-70,907,841),48541=>array(75,-61,907,841),48542=>array(75,-61,907,841),48543=>array(75,-71,931,841),48544=>array(76,-46,907,841),48545=>array(75,-68,912,841),48546=>array(75,-76,907,841),48547=>array(75,-44,921,841),48548=>array(75,-62,917,841),48549=>array(75,-64,907,841),48550=>array(75,-64,908,841),48551=>array(75,-64,908,841),48552=>array(75,-69,923,841),48553=>array(75,-64,908,841),48554=>array(75,-64,908,841),48555=>array(75,-76,906,841),48556=>array(75,-62,907,841),48557=>array(75,-61,907,841),48558=>array(75,-69,922,841),48559=>array(75,-74,929,841),48560=>array(75,-69,927,841),48561=>array(75,-68,911,841),48562=>array(75,-72,929,841),48563=>array(75,-70,936,841),48564=>array(75,-66,908,841),48565=>array(75,-59,916,841),48566=>array(75,-60,928,841),48567=>array(75,-68,908,841),48568=>array(63,-68,907,843),48569=>array(72,-61,907,843),48570=>array(72,-61,907,843),48571=>array(72,-71,931,843),48572=>array(76,-46,907,843),48573=>array(72,-68,912,843),48574=>array(72,-76,907,843),48575=>array(72,-44,921,843),48576=>array(72,-62,917,843),48577=>array(72,-64,907,843),48578=>array(72,-64,908,843),48579=>array(72,-64,908,843),48580=>array(72,-69,923,843),48581=>array(72,-64,908,843),48582=>array(72,-64,908,843),48583=>array(72,-76,907,843),48584=>array(72,-62,907,843),48585=>array(72,-61,907,843),48586=>array(72,-69,922,843),48587=>array(72,-74,929,843),48588=>array(72,-69,927,843),48589=>array(72,-68,911,843),48590=>array(72,-72,929,843),48591=>array(72,-70,936,843),48592=>array(72,-66,908,843),48593=>array(72,-59,916,843),48594=>array(72,-60,928,843),48595=>array(72,-68,908,843),48596=>array(70,-69,907,842),48597=>array(65,-61,907,841),48598=>array(65,-61,907,841),48599=>array(65,-71,931,841),48600=>array(65,-46,907,841),48601=>array(65,-68,912,841),48602=>array(65,-76,907,841),48603=>array(65,-44,921,841),48604=>array(65,-62,917,841),48605=>array(65,-64,907,841),48606=>array(65,-64,908,841),48607=>array(65,-64,908,841),48608=>array(65,-69,923,841),48609=>array(65,-64,908,841),48610=>array(65,-64,908,841),48611=>array(65,-76,907,841),48612=>array(65,-62,907,841),48613=>array(65,-61,907,841),48614=>array(65,-69,922,841),48615=>array(65,-74,929,841),48616=>array(65,-69,927,841),48617=>array(65,-68,911,841),48618=>array(65,-72,929,841),48619=>array(65,-70,936,841),48620=>array(65,-66,908,841),48621=>array(65,-59,916,841),48622=>array(65,-60,928,841),48623=>array(65,-68,908,841),48624=>array(71,-64,928,815),48625=>array(79,-61,921,815),48626=>array(79,-61,921,815),48627=>array(79,-71,921,815),48628=>array(79,-46,921,815),48629=>array(79,-68,921,815),48630=>array(79,-74,921,815),48631=>array(79,-44,921,815),48632=>array(79,-62,921,815),48633=>array(79,-64,921,815),48634=>array(79,-64,921,815),48635=>array(79,-63,921,815),48636=>array(79,-68,921,815),48637=>array(79,-64,921,815),48638=>array(79,-63,921,815),48639=>array(79,-74,921,815),48640=>array(79,-62,921,815),48641=>array(79,-61,921,815),48642=>array(79,-69,921,815),48643=>array(79,-74,921,815),48644=>array(79,-69,921,815),48645=>array(79,-68,921,815),48646=>array(79,-72,921,815),48647=>array(79,-70,921,815),48648=>array(79,-66,921,815),48649=>array(79,-59,921,815),48650=>array(79,-60,921,815),48651=>array(79,-68,921,815),48652=>array(57,42,943,750),48653=>array(79,-61,921,825),48654=>array(79,-61,921,825),48655=>array(79,-71,921,825),48656=>array(79,-46,921,825),48657=>array(79,-68,921,825),48658=>array(79,-74,921,825),48659=>array(79,-44,921,825),48660=>array(79,-62,921,825),48661=>array(79,-64,921,825),48662=>array(79,-64,921,825),48663=>array(79,-63,921,825),48664=>array(79,-68,921,825),48665=>array(79,-64,921,825),48666=>array(79,-63,921,825),48667=>array(79,-74,921,825),48668=>array(79,-62,921,825),48669=>array(79,-61,921,825),48670=>array(79,-69,921,825),48671=>array(79,-74,921,825),48672=>array(79,-69,921,825),48673=>array(79,-68,921,825),48674=>array(79,-72,921,825),48675=>array(79,-70,921,825),48676=>array(79,-66,921,825),48677=>array(79,-59,921,825),48678=>array(79,-60,921,825),48679=>array(79,-68,921,825),48680=>array(67,-69,907,842),48681=>array(65,-61,907,842),48682=>array(65,-61,907,842),48683=>array(65,-71,931,842),48684=>array(65,-46,907,841),48685=>array(65,-68,912,842),48686=>array(65,-76,907,842),48687=>array(65,-44,921,842),48688=>array(65,-62,917,842),48689=>array(65,-64,907,842),48690=>array(65,-64,908,842),48691=>array(65,-64,908,842),48692=>array(65,-69,923,842),48693=>array(65,-64,908,842),48694=>array(65,-64,908,842),48695=>array(65,-76,907,842),48696=>array(65,-62,907,842),48697=>array(65,-61,907,842),48698=>array(65,-69,922,842),48699=>array(65,-74,929,842),48700=>array(65,-69,927,842),48701=>array(65,-68,911,842),48702=>array(65,-72,929,842),48703=>array(65,-70,936,842),48704=>array(65,-66,908,842),48705=>array(65,-59,916,842),48706=>array(65,-60,928,842),48707=>array(65,-68,908,842),48708=>array(147,-69,907,842),48709=>array(157,-61,907,842),48710=>array(157,-61,907,842),48711=>array(157,-71,931,842),48712=>array(152,-46,907,842),48713=>array(157,-68,912,842),48714=>array(157,-76,907,842),48715=>array(157,-44,921,842),48716=>array(157,-62,917,842),48717=>array(157,-64,907,842),48718=>array(157,-64,908,842),48719=>array(157,-64,908,842),48720=>array(157,-69,923,842),48721=>array(157,-64,908,842),48722=>array(157,-64,908,842),48723=>array(157,-76,907,842),48724=>array(157,-62,907,842),48725=>array(157,-61,907,842),48726=>array(157,-69,922,842),48727=>array(157,-74,929,842),48728=>array(143,-69,927,842),48729=>array(157,-68,911,842),48730=>array(157,-72,929,842),48731=>array(157,-70,936,842),48732=>array(157,-66,908,842),48733=>array(157,-59,916,842),48734=>array(157,-60,928,842),48735=>array(157,-68,908,842),48736=>array(95,-69,936,842),48737=>array(105,-59,936,842),48738=>array(105,-61,936,842),48739=>array(105,-71,936,842),48740=>array(105,-45,936,842),48741=>array(105,-69,936,842),48742=>array(105,-76,936,842),48743=>array(105,-44,936,842),48744=>array(105,-62,936,842),48745=>array(105,-64,936,842),48746=>array(105,-64,936,842),48747=>array(105,-64,936,842),48748=>array(105,-70,936,842),48749=>array(105,-64,936,842),48750=>array(105,-64,936,842),48751=>array(105,-76,936,842),48752=>array(105,-62,936,842),48753=>array(105,-61,936,842),48754=>array(105,-70,936,842),48755=>array(105,-74,936,842),48756=>array(105,-69,936,842),48757=>array(105,-67,936,842),48758=>array(105,-72,936,842),48759=>array(105,-71,936,842),48760=>array(105,-66,936,842),48761=>array(105,-59,936,842),48762=>array(105,-60,936,842),48763=>array(105,-69,936,842),48764=>array(95,-69,907,842),48765=>array(105,-61,907,842),48766=>array(105,-61,907,842),48767=>array(105,-71,931,842),48768=>array(105,-46,907,842),48769=>array(105,-68,912,842),48770=>array(105,-76,907,842),48771=>array(105,-44,921,842),48772=>array(105,-62,917,842),48773=>array(105,-64,907,842),48774=>array(105,-64,908,842),48775=>array(105,-64,908,842),48776=>array(105,-69,923,842),48777=>array(105,-64,908,842),48778=>array(105,-64,908,842),48779=>array(105,-76,907,842),48780=>array(105,-62,907,842),48781=>array(105,-61,907,842),48782=>array(105,-69,922,842),48783=>array(105,-74,929,842),48784=>array(105,-69,927,842),48785=>array(105,-68,911,842),48786=>array(105,-72,929,842),48787=>array(105,-70,936,842),48788=>array(105,-66,908,842),48789=>array(105,-59,916,842),48790=>array(105,-60,928,842),48791=>array(105,-68,908,842),48792=>array(95,-68,935,843),48793=>array(105,-59,936,842),48794=>array(105,-61,936,842),48795=>array(105,-71,936,842),48796=>array(105,-45,936,842),48797=>array(105,-69,936,842),48798=>array(105,-76,936,842),48799=>array(105,-44,936,842),48800=>array(105,-62,936,842),48801=>array(105,-64,936,842),48802=>array(105,-64,936,842),48803=>array(105,-64,936,842),48804=>array(105,-70,936,842),48805=>array(105,-64,936,842),48806=>array(105,-64,936,842),48807=>array(105,-76,936,842),48808=>array(105,-62,936,842),48809=>array(105,-61,936,842),48810=>array(105,-70,936,842),48811=>array(105,-74,936,842),48812=>array(105,-69,936,842),48813=>array(105,-67,936,842),48814=>array(105,-72,936,842),48815=>array(105,-71,936,842),48816=>array(105,-66,936,842),48817=>array(105,-59,936,842),48818=>array(105,-60,936,842),48819=>array(105,-69,936,842),48820=>array(95,-69,907,842),48821=>array(105,-61,907,842),48822=>array(105,-61,907,842),48823=>array(105,-71,931,842),48824=>array(105,-46,907,842),48825=>array(105,-68,912,842),48826=>array(105,-76,907,842),48827=>array(105,-44,921,842),48828=>array(105,-62,917,842),48829=>array(105,-64,907,842),48830=>array(105,-64,908,842),48831=>array(105,-64,908,842),48832=>array(105,-69,923,842),48833=>array(105,-64,908,842),48834=>array(105,-64,908,842),48835=>array(105,-76,907,842),48836=>array(105,-62,907,842),48837=>array(105,-61,907,842),48838=>array(105,-69,922,842),48839=>array(105,-74,929,842),48840=>array(105,-69,927,842),48841=>array(105,-68,911,842),48842=>array(105,-72,929,842),48843=>array(105,-70,936,842),48844=>array(105,-66,908,842),48845=>array(105,-59,916,842),48846=>array(105,-60,928,842),48847=>array(105,-68,908,842),48848=>array(95,-70,907,841),48849=>array(105,-61,907,841),48850=>array(105,-61,907,841),48851=>array(105,-71,931,841),48852=>array(105,-46,907,841),48853=>array(105,-68,912,841),48854=>array(105,-76,907,841),48855=>array(105,-44,921,841),48856=>array(105,-62,917,841),48857=>array(105,-64,907,841),48858=>array(105,-64,908,841),48859=>array(105,-64,908,841),48860=>array(105,-69,923,841),48861=>array(105,-64,908,841),48862=>array(105,-64,908,841),48863=>array(105,-76,906,841),48864=>array(105,-62,907,841),48865=>array(105,-61,907,841),48866=>array(105,-69,922,841),48867=>array(105,-74,929,841),48868=>array(105,-69,927,841),48869=>array(105,-68,911,841),48870=>array(105,-72,929,841),48871=>array(105,-70,936,841),48872=>array(105,-66,908,841),48873=>array(105,-59,916,841),48874=>array(105,-60,928,841),48875=>array(105,-68,908,841),48876=>array(90,-68,907,843),48877=>array(90,-61,907,843),48878=>array(90,-61,907,843),48879=>array(90,-71,931,843),48880=>array(90,-46,907,843),48881=>array(90,-68,912,843),48882=>array(90,-76,907,843),48883=>array(90,-44,921,843),48884=>array(90,-62,917,843),48885=>array(90,-64,907,843),48886=>array(90,-64,908,843),48887=>array(90,-64,908,843),48888=>array(90,-69,923,843),48889=>array(90,-64,908,843),48890=>array(90,-64,908,843),48891=>array(90,-76,907,843),48892=>array(90,-62,907,843),48893=>array(90,-61,907,843),48894=>array(90,-69,922,843),48895=>array(90,-74,929,843),48896=>array(90,-69,927,843),48897=>array(90,-68,911,843),48898=>array(90,-72,929,843),48899=>array(90,-70,936,843),48900=>array(90,-66,908,843),48901=>array(90,-59,916,843),48902=>array(90,-60,928,843),48903=>array(90,-68,908,843),48904=>array(95,-70,907,842),48905=>array(105,-61,908,842),48906=>array(105,-61,908,842),48907=>array(105,-71,931,842),48908=>array(105,-46,907,842),48909=>array(105,-68,912,842),48910=>array(105,-76,908,842),48911=>array(105,-44,921,842),48912=>array(105,-62,917,842),48913=>array(105,-64,908,842),48914=>array(105,-64,908,842),48915=>array(105,-64,908,842),48916=>array(105,-69,923,842),48917=>array(105,-64,908,842),48918=>array(105,-64,908,842),48919=>array(105,-76,908,842),48920=>array(105,-62,908,842),48921=>array(105,-61,908,842),48922=>array(105,-69,922,842),48923=>array(105,-74,929,842),48924=>array(105,-69,927,842),48925=>array(105,-68,911,842),48926=>array(105,-72,929,842),48927=>array(105,-70,936,842),48928=>array(105,-66,908,842),48929=>array(105,-59,916,842),48930=>array(105,-60,928,842),48931=>array(105,-68,908,842),48932=>array(90,-68,907,843),48933=>array(90,-61,907,843),48934=>array(90,-61,907,843),48935=>array(90,-71,931,843),48936=>array(90,-46,907,843),48937=>array(90,-68,912,843),48938=>array(90,-76,907,843),48939=>array(90,-44,921,843),48940=>array(90,-62,917,843),48941=>array(90,-64,907,843),48942=>array(90,-64,908,843),48943=>array(90,-64,908,843),48944=>array(90,-69,923,843),48945=>array(90,-64,908,843),48946=>array(90,-64,908,843),48947=>array(90,-76,907,843),48948=>array(90,-62,907,843),48949=>array(90,-61,907,843),48950=>array(90,-69,922,843),48951=>array(90,-74,929,843),48952=>array(90,-69,927,843),48953=>array(90,-68,911,843),48954=>array(90,-72,929,843),48955=>array(90,-70,936,843),48956=>array(90,-66,908,843),48957=>array(90,-59,916,843),48958=>array(90,-60,928,843),48959=>array(90,-68,908,843),48960=>array(60,12,940,766),48961=>array(79,-61,921,806),48962=>array(79,-61,921,806),48963=>array(79,-71,921,806),48964=>array(79,-46,921,806),48965=>array(79,-68,921,806),48966=>array(79,-74,921,806),48967=>array(79,-44,921,806),48968=>array(79,-62,921,806),48969=>array(79,-64,921,806),48970=>array(79,-64,921,806),48971=>array(79,-63,921,806),48972=>array(79,-68,921,806),48973=>array(79,-64,921,806),48974=>array(79,-63,921,806),48975=>array(79,-74,921,806),48976=>array(79,-62,921,806),48977=>array(79,-61,921,806),48978=>array(79,-69,921,806),48979=>array(79,-74,921,806),48980=>array(79,-69,921,806),48981=>array(79,-68,921,806),48982=>array(79,-72,921,806),48983=>array(79,-70,921,806),48984=>array(79,-66,921,806),48985=>array(79,-59,921,806),48986=>array(79,-60,921,806),48987=>array(79,-68,921,806),48988=>array(51,-69,936,842),48989=>array(69,-59,937,843),48990=>array(69,-61,937,843),48991=>array(69,-71,937,843),48992=>array(57,-45,937,842),48993=>array(69,-69,937,843),48994=>array(69,-76,937,843),48995=>array(69,-44,937,843),48996=>array(69,-62,937,843),48997=>array(69,-64,937,843),48998=>array(69,-64,937,843),48999=>array(69,-64,937,843),49000=>array(69,-70,937,843),49001=>array(69,-64,937,843),49002=>array(69,-64,937,843),49003=>array(69,-76,937,843),49004=>array(69,-62,937,843),49005=>array(69,-61,937,843),49006=>array(69,-70,937,843),49007=>array(69,-74,937,843),49008=>array(69,-69,937,843),49009=>array(69,-67,937,843),49010=>array(69,-72,937,843),49011=>array(69,-71,937,843),49012=>array(69,-66,937,843),49013=>array(69,-59,937,843),49014=>array(69,-60,937,843),49015=>array(69,-69,937,843),49016=>array(57,-69,907,842),49017=>array(69,-61,908,842),49018=>array(69,-61,908,842),49019=>array(69,-71,931,842),49020=>array(57,-46,908,842),49021=>array(69,-68,912,842),49022=>array(69,-76,908,842),49023=>array(69,-44,921,842),49024=>array(69,-62,917,842),49025=>array(69,-64,908,842),49026=>array(69,-64,908,842),49027=>array(69,-64,908,842),49028=>array(69,-69,923,842),49029=>array(69,-64,908,842),49030=>array(69,-64,908,842),49031=>array(69,-76,908,842),49032=>array(69,-62,908,842),49033=>array(69,-61,908,842),49034=>array(69,-69,922,842),49035=>array(69,-74,929,842),49036=>array(69,-69,927,842),49037=>array(69,-68,911,842),49038=>array(69,-72,929,842),49039=>array(69,-70,936,842),49040=>array(69,-66,908,842),49041=>array(69,-59,916,842),49042=>array(69,-60,928,842),49043=>array(69,-68,908,842),49044=>array(58,-69,907,842),49045=>array(64,-61,907,841),49046=>array(64,-61,907,841),49047=>array(64,-71,931,841),49048=>array(64,-46,907,842),49049=>array(64,-68,912,841),49050=>array(64,-76,907,841),49051=>array(64,-44,921,841),49052=>array(64,-62,917,841),49053=>array(64,-64,907,841),49054=>array(64,-64,908,841),49055=>array(64,-64,908,841),49056=>array(64,-69,923,841),49057=>array(64,-64,908,841),49058=>array(64,-64,908,841),49059=>array(64,-76,907,841),49060=>array(64,-62,907,841),49061=>array(64,-61,907,841),49062=>array(64,-69,922,841),49063=>array(64,-74,929,841),49064=>array(64,-69,927,841),49065=>array(64,-68,911,841),49066=>array(64,-72,929,841),49067=>array(64,-70,936,841),49068=>array(64,-66,908,841),49069=>array(64,-59,916,841),49070=>array(64,-60,928,841),49071=>array(64,-68,908,841),49072=>array(60,-13,940,803),49073=>array(79,-61,921,806),49074=>array(79,-61,921,806),49075=>array(79,-71,921,806),49076=>array(79,-46,921,806),49077=>array(79,-68,921,806),49078=>array(79,-74,921,806),49079=>array(79,-44,921,806),49080=>array(79,-62,921,806),49081=>array(79,-64,921,806),49082=>array(79,-64,921,806),49083=>array(79,-63,921,806),49084=>array(79,-68,921,806),49085=>array(79,-64,921,806),49086=>array(79,-63,921,806),49087=>array(79,-74,921,806),49088=>array(79,-62,921,806),49089=>array(79,-61,921,806),49090=>array(79,-69,921,806),49091=>array(79,-74,921,806),49092=>array(79,-69,921,806),49093=>array(79,-68,921,806),49094=>array(79,-72,921,806),49095=>array(79,-70,921,806),49096=>array(79,-66,921,806),49097=>array(79,-59,921,806),49098=>array(79,-60,921,806),49099=>array(79,-68,921,806),49100=>array(79,-64,921,806),49101=>array(79,-61,921,806),49102=>array(79,-61,921,806),49103=>array(79,-71,921,806),49104=>array(79,-46,921,806),49105=>array(79,-68,921,806),49106=>array(79,-74,921,806),49107=>array(79,-44,921,806),49108=>array(79,-62,921,806),49109=>array(79,-64,921,806),49110=>array(79,-64,921,806),49111=>array(79,-63,921,806),49112=>array(79,-68,921,806),49113=>array(79,-64,921,806),49114=>array(79,-63,921,806),49115=>array(79,-74,921,806),49116=>array(79,-62,921,806),49117=>array(79,-61,921,806),49118=>array(79,-69,921,806),49119=>array(79,-74,921,806),49120=>array(79,-69,921,806),49121=>array(79,-68,921,806),49122=>array(79,-72,921,806),49123=>array(79,-70,921,806),49124=>array(79,-66,921,806),49125=>array(79,-59,921,806),49126=>array(79,-60,921,806),49127=>array(79,-68,921,806),49128=>array(72,-70,907,841),49129=>array(67,-61,907,841),49130=>array(67,-61,907,841),49131=>array(67,-71,931,841),49132=>array(65,-46,907,841),49133=>array(67,-68,912,841),49134=>array(67,-76,907,841),49135=>array(67,-44,921,841),49136=>array(67,-62,917,841),49137=>array(67,-64,907,841),49138=>array(67,-64,908,841),49139=>array(67,-64,908,841),49140=>array(67,-69,923,841),49141=>array(67,-64,908,841),49142=>array(67,-64,908,841),49143=>array(67,-76,906,841),49144=>array(67,-62,907,841),49145=>array(67,-61,907,841),49146=>array(67,-69,922,841),49147=>array(67,-74,929,841),49148=>array(67,-69,927,841),49149=>array(67,-68,911,841),49150=>array(67,-72,929,841),49151=>array(67,-70,936,841),49152=>array(67,-66,908,841),49153=>array(67,-59,916,841),49154=>array(67,-60,928,841),49155=>array(67,-68,908,841),49156=>array(51,-68,907,843),49157=>array(67,-61,907,843),49158=>array(67,-61,907,843),49159=>array(67,-71,931,843),49160=>array(68,-46,907,842),49161=>array(67,-68,912,843),49162=>array(67,-76,907,843),49163=>array(67,-44,921,843),49164=>array(67,-62,917,843),49165=>array(67,-64,907,843),49166=>array(67,-64,908,843),49167=>array(67,-64,908,843),49168=>array(67,-69,923,843),49169=>array(67,-64,908,843),49170=>array(67,-64,908,843),49171=>array(67,-76,907,843),49172=>array(67,-62,907,843),49173=>array(67,-61,907,843),49174=>array(67,-69,922,843),49175=>array(67,-74,929,843),49176=>array(67,-69,927,843),49177=>array(67,-68,911,843),49178=>array(67,-72,929,843),49179=>array(67,-70,936,843),49180=>array(67,-66,908,843),49181=>array(67,-59,916,843),49182=>array(67,-60,928,843),49183=>array(67,-68,908,843),49184=>array(64,-69,907,842),49185=>array(65,-61,907,843),49186=>array(65,-61,907,843),49187=>array(65,-71,931,843),49188=>array(66,-46,907,842),49189=>array(65,-68,912,843),49190=>array(65,-76,907,843),49191=>array(65,-44,921,843),49192=>array(65,-62,917,843),49193=>array(65,-64,907,843),49194=>array(65,-64,908,843),49195=>array(65,-64,908,843),49196=>array(65,-69,923,843),49197=>array(65,-64,908,843),49198=>array(65,-64,908,843),49199=>array(65,-76,907,843),49200=>array(65,-62,907,843),49201=>array(65,-61,907,843),49202=>array(65,-69,922,843),49203=>array(65,-74,929,843),49204=>array(65,-69,927,843),49205=>array(65,-68,911,843),49206=>array(65,-72,929,843),49207=>array(65,-70,936,843),49208=>array(65,-66,908,843),49209=>array(65,-59,916,843),49210=>array(65,-60,928,843),49211=>array(65,-68,908,843),49212=>array(79,-64,921,806),49213=>array(79,-61,921,806),49214=>array(79,-61,921,806),49215=>array(79,-71,921,806),49216=>array(81,-46,922,806),49217=>array(79,-68,921,806),49218=>array(79,-74,921,806),49219=>array(79,-44,921,806),49220=>array(79,-62,921,806),49221=>array(79,-64,921,806),49222=>array(79,-64,921,806),49223=>array(79,-63,921,806),49224=>array(79,-68,921,806),49225=>array(79,-64,921,806),49226=>array(79,-63,921,806),49227=>array(79,-74,921,806),49228=>array(79,-62,921,806),49229=>array(79,-61,921,806),49230=>array(79,-69,921,806),49231=>array(79,-74,921,806),49232=>array(79,-69,921,806),49233=>array(79,-68,921,806),49234=>array(79,-72,921,806),49235=>array(79,-70,921,806),49236=>array(79,-66,921,806),49237=>array(79,-59,921,806),49238=>array(79,-60,921,806),49239=>array(79,-68,921,806),49240=>array(57,22,943,746),49241=>array(79,-61,922,811),49242=>array(79,-61,922,811),49243=>array(79,-71,922,811),49244=>array(79,-46,921,806),49245=>array(79,-68,922,811),49246=>array(79,-74,922,811),49247=>array(79,-44,922,811),49248=>array(79,-62,922,811),49249=>array(79,-64,922,811),49250=>array(79,-64,922,811),49251=>array(79,-63,922,811),49252=>array(79,-68,922,811),49253=>array(79,-64,922,811),49254=>array(79,-63,922,811),49255=>array(79,-74,922,811),49256=>array(79,-62,922,811),49257=>array(79,-61,922,811),49258=>array(79,-69,922,811),49259=>array(79,-74,922,811),49260=>array(79,-69,922,811),49261=>array(79,-68,922,811),49262=>array(79,-72,922,811),49263=>array(79,-70,922,811),49264=>array(79,-66,922,811),49265=>array(79,-59,922,811),49266=>array(79,-60,922,811),49267=>array(79,-68,922,811),49268=>array(68,-69,907,842),49269=>array(74,-61,907,841),49270=>array(74,-61,907,841),49271=>array(74,-71,931,841),49272=>array(65,-46,907,842),49273=>array(74,-68,912,841),49274=>array(74,-76,907,841),49275=>array(74,-44,921,841),49276=>array(74,-62,917,841),49277=>array(74,-64,907,841),49278=>array(74,-64,908,841),49279=>array(74,-64,908,841),49280=>array(74,-69,923,841),49281=>array(74,-64,908,841),49282=>array(74,-64,908,841),49283=>array(74,-76,907,841),49284=>array(74,-62,907,841),49285=>array(74,-61,907,841),49286=>array(74,-69,922,841),49287=>array(74,-74,929,841),49288=>array(74,-69,927,841),49289=>array(74,-68,911,841),49290=>array(74,-72,929,841),49291=>array(74,-70,936,841),49292=>array(74,-66,908,841),49293=>array(74,-59,916,841),49294=>array(74,-60,928,841),49295=>array(74,-68,908,841),49296=>array(110,-69,907,842),49297=>array(120,-61,907,842),49298=>array(120,-61,907,842),49299=>array(120,-71,931,842),49300=>array(130,-46,907,842),49301=>array(120,-68,912,842),49302=>array(120,-76,907,842),49303=>array(120,-44,921,842),49304=>array(120,-62,917,842),49305=>array(120,-64,907,842),49306=>array(120,-64,908,842),49307=>array(120,-64,908,842),49308=>array(120,-69,923,842),49309=>array(120,-64,908,842),49310=>array(120,-64,908,842),49311=>array(120,-76,907,842),49312=>array(120,-62,907,842),49313=>array(120,-61,907,842),49314=>array(120,-69,922,842),49315=>array(120,-74,929,842),49316=>array(120,-69,927,842),49317=>array(120,-68,911,842),49318=>array(120,-72,929,842),49319=>array(120,-70,936,842),49320=>array(120,-66,908,842),49321=>array(120,-59,916,842),49322=>array(120,-60,928,842),49323=>array(120,-68,908,842),49324=>array(48,-69,936,842),49325=>array(81,-59,935,842),49326=>array(81,-61,935,842),49327=>array(81,-71,935,842),49328=>array(58,-45,935,841),49329=>array(81,-69,935,842),49330=>array(81,-76,935,842),49331=>array(81,-44,935,842),49332=>array(81,-62,935,842),49333=>array(81,-64,935,842),49334=>array(81,-64,935,842),49335=>array(81,-64,935,842),49336=>array(81,-70,935,842),49337=>array(81,-64,935,842),49338=>array(81,-64,935,842),49339=>array(81,-76,935,842),49340=>array(81,-62,935,842),49341=>array(81,-61,935,842),49342=>array(81,-70,935,842),49343=>array(81,-74,935,842),49344=>array(81,-69,935,842),49345=>array(81,-67,935,842),49346=>array(81,-72,935,842),49347=>array(81,-71,935,842),49348=>array(81,-66,935,842),49349=>array(81,-59,935,842),49350=>array(81,-60,935,842),49351=>array(81,-69,935,842),49352=>array(43,-69,907,842),49353=>array(75,-61,907,842),49354=>array(75,-61,907,842),49355=>array(75,-71,931,842),49356=>array(62,-46,908,842),49357=>array(75,-68,912,842),49358=>array(75,-76,907,842),49359=>array(75,-44,921,842),49360=>array(75,-62,917,842),49361=>array(75,-64,907,842),49362=>array(75,-64,908,842),49363=>array(75,-64,908,842),49364=>array(75,-69,923,842),49365=>array(75,-64,908,842),49366=>array(75,-64,908,842),49367=>array(75,-76,906,842),49368=>array(75,-62,907,842),49369=>array(75,-61,907,842),49370=>array(75,-69,922,842),49371=>array(75,-74,929,842),49372=>array(75,-69,927,842),49373=>array(75,-68,911,842),49374=>array(75,-72,929,842),49375=>array(75,-70,936,842),49376=>array(75,-66,908,842),49377=>array(75,-59,916,842),49378=>array(75,-60,928,842),49379=>array(75,-68,908,842),49380=>array(48,-68,935,843),49381=>array(81,-59,936,842),49382=>array(81,-61,936,842),49383=>array(81,-71,936,842),49384=>array(62,-45,936,842),49385=>array(81,-69,936,842),49386=>array(81,-76,936,842),49387=>array(81,-44,936,842),49388=>array(81,-62,936,842),49389=>array(81,-64,936,842),49390=>array(81,-64,936,842),49391=>array(81,-64,936,842),49392=>array(81,-70,936,842),49393=>array(81,-64,936,842),49394=>array(81,-64,936,842),49395=>array(81,-76,936,842),49396=>array(81,-62,936,842),49397=>array(81,-61,936,842),49398=>array(81,-70,936,842),49399=>array(81,-74,936,842),49400=>array(81,-69,936,842),49401=>array(81,-67,936,842),49402=>array(81,-72,936,842),49403=>array(81,-71,936,842),49404=>array(81,-66,936,842),49405=>array(81,-59,936,842),49406=>array(81,-60,936,842),49407=>array(81,-69,936,842),49408=>array(43,-69,907,842),49409=>array(75,-61,907,842),49410=>array(75,-61,907,842),49411=>array(75,-71,931,842),49412=>array(62,-46,908,842),49413=>array(75,-68,912,842),49414=>array(75,-76,907,842),49415=>array(75,-44,921,842),49416=>array(75,-62,917,842),49417=>array(75,-64,907,842),49418=>array(75,-64,908,842),49419=>array(75,-64,908,842),49420=>array(75,-69,923,842),49421=>array(75,-64,908,842),49422=>array(75,-64,908,842),49423=>array(75,-76,906,842),49424=>array(75,-62,907,842),49425=>array(75,-61,907,842),49426=>array(75,-69,922,842),49427=>array(75,-74,929,842),49428=>array(75,-69,927,842),49429=>array(75,-68,911,842),49430=>array(75,-72,929,842),49431=>array(75,-70,936,842),49432=>array(75,-66,908,842),49433=>array(75,-59,916,842),49434=>array(75,-60,928,842),49435=>array(75,-68,908,842),49436=>array(59,-70,907,841),49437=>array(81,-61,907,841),49438=>array(81,-61,907,841),49439=>array(81,-71,931,841),49440=>array(62,-46,907,841),49441=>array(81,-68,912,841),49442=>array(81,-76,907,841),49443=>array(81,-44,921,841),49444=>array(81,-62,917,841),49445=>array(81,-64,907,841),49446=>array(81,-64,908,841),49447=>array(81,-64,908,841),49448=>array(81,-69,923,841),49449=>array(81,-64,908,841),49450=>array(81,-64,908,841),49451=>array(81,-76,906,841),49452=>array(81,-62,907,841),49453=>array(81,-61,907,841),49454=>array(81,-69,922,841),49455=>array(81,-74,929,841),49456=>array(81,-69,927,841),49457=>array(81,-68,911,841),49458=>array(81,-72,929,841),49459=>array(81,-70,936,841),49460=>array(81,-66,908,841),49461=>array(81,-59,916,841),49462=>array(81,-60,928,841),49463=>array(81,-68,908,841),49464=>array(46,-68,907,843),49465=>array(75,-61,907,843),49466=>array(75,-61,907,843),49467=>array(75,-71,931,843),49468=>array(58,-46,908,842),49469=>array(75,-68,912,843),49470=>array(75,-76,907,843),49471=>array(75,-44,921,843),49472=>array(75,-62,917,843),49473=>array(75,-64,907,843),49474=>array(75,-64,908,843),49475=>array(75,-64,908,843),49476=>array(75,-69,923,843),49477=>array(75,-64,908,843),49478=>array(75,-64,908,843),49479=>array(75,-76,906,843),49480=>array(75,-62,907,843),49481=>array(75,-61,907,843),49482=>array(75,-69,922,843),49483=>array(75,-74,929,843),49484=>array(75,-69,927,843),49485=>array(75,-68,911,843),49486=>array(75,-72,929,843),49487=>array(75,-70,936,843),49488=>array(75,-66,908,843),49489=>array(75,-59,916,843),49490=>array(75,-60,928,843),49491=>array(75,-68,908,843),49492=>array(46,-70,907,842),49493=>array(81,-61,908,842),49494=>array(81,-61,908,842),49495=>array(81,-71,931,842),49496=>array(58,-46,907,841),49497=>array(81,-68,912,842),49498=>array(81,-76,908,842),49499=>array(81,-44,921,842),49500=>array(81,-62,917,842),49501=>array(81,-64,908,842),49502=>array(81,-64,908,842),49503=>array(81,-64,908,842),49504=>array(81,-69,923,842),49505=>array(81,-64,908,842),49506=>array(81,-64,908,842),49507=>array(81,-76,908,842),49508=>array(81,-62,908,842),49509=>array(81,-61,908,842),49510=>array(81,-69,922,842),49511=>array(81,-74,929,842),49512=>array(81,-69,927,842),49513=>array(81,-68,911,842),49514=>array(81,-72,929,842),49515=>array(81,-70,936,842),49516=>array(81,-66,908,842),49517=>array(81,-59,916,842),49518=>array(81,-60,928,842),49519=>array(81,-68,908,842),49520=>array(46,-68,907,843),49521=>array(45,-61,907,842),49522=>array(45,-61,907,842),49523=>array(45,-71,931,842),49524=>array(47,-46,907,842),49525=>array(45,-68,912,842),49526=>array(45,-76,907,842),49527=>array(45,-44,921,842),49528=>array(45,-62,917,842),49529=>array(45,-64,907,842),49530=>array(45,-64,908,842),49531=>array(45,-64,908,842),49532=>array(45,-69,923,842),49533=>array(45,-64,908,842),49534=>array(45,-64,908,842),49535=>array(45,-76,907,842),49536=>array(45,-62,907,842),49537=>array(45,-61,907,842),49538=>array(45,-69,922,842),49539=>array(45,-74,929,842),49540=>array(45,-69,927,842),49541=>array(45,-68,911,842),49542=>array(45,-72,929,842),49543=>array(45,-70,936,842),49544=>array(45,-66,908,842),49545=>array(45,-59,916,842),49546=>array(45,-60,928,842),49547=>array(45,-68,908,842),49548=>array(62,7,943,771),49549=>array(79,-61,921,822),49550=>array(79,-61,921,822),49551=>array(79,-71,921,822),49552=>array(79,-46,921,822),49553=>array(79,-68,921,822),49554=>array(79,-74,921,822),49555=>array(79,-44,921,822),49556=>array(79,-62,921,822),49557=>array(79,-64,921,822),49558=>array(79,-64,921,822),49559=>array(79,-63,921,822),49560=>array(79,-68,921,822),49561=>array(79,-64,921,822),49562=>array(79,-63,921,822),49563=>array(79,-74,921,822),49564=>array(79,-62,921,822),49565=>array(79,-61,921,822),49566=>array(79,-69,921,822),49567=>array(79,-74,921,822),49568=>array(79,-69,921,822),49569=>array(79,-68,921,822),49570=>array(79,-72,921,822),49571=>array(79,-70,921,822),49572=>array(79,-66,921,822),49573=>array(79,-59,921,822),49574=>array(79,-60,921,822),49575=>array(79,-68,921,822),49576=>array(60,-69,937,842),49577=>array(77,-59,936,842),49578=>array(77,-61,936,842),49579=>array(77,-71,936,842),49580=>array(72,-45,937,842),49581=>array(77,-69,936,842),49582=>array(77,-76,936,842),49583=>array(77,-44,936,842),49584=>array(77,-62,936,842),49585=>array(77,-64,936,842),49586=>array(77,-64,936,842),49587=>array(77,-64,936,842),49588=>array(77,-70,936,842),49589=>array(77,-64,936,842),49590=>array(77,-64,936,842),49591=>array(77,-76,936,842),49592=>array(77,-62,936,842),49593=>array(77,-61,936,842),49594=>array(77,-70,936,842),49595=>array(77,-74,936,842),49596=>array(77,-69,936,842),49597=>array(77,-67,936,842),49598=>array(77,-72,936,842),49599=>array(77,-71,936,842),49600=>array(77,-66,936,842),49601=>array(77,-59,936,842),49602=>array(77,-60,936,842),49603=>array(77,-69,936,842),49604=>array(54,-69,907,842),49605=>array(67,-61,907,842),49606=>array(67,-61,907,842),49607=>array(67,-71,931,842),49608=>array(57,-46,908,842),49609=>array(67,-68,912,842),49610=>array(67,-76,907,842),49611=>array(67,-44,921,842),49612=>array(67,-62,917,842),49613=>array(67,-64,907,842),49614=>array(67,-64,908,842),49615=>array(67,-64,908,842),49616=>array(67,-69,923,842),49617=>array(67,-64,908,842),49618=>array(67,-64,908,842),49619=>array(67,-76,907,842),49620=>array(67,-62,907,842),49621=>array(67,-61,907,842),49622=>array(67,-69,922,842),49623=>array(67,-74,929,842),49624=>array(67,-69,927,842),49625=>array(67,-68,911,842),49626=>array(67,-72,929,842),49627=>array(67,-70,936,842),49628=>array(67,-66,908,842),49629=>array(67,-59,916,842),49630=>array(67,-60,928,842),49631=>array(67,-68,908,842),49632=>array(52,-69,907,842),49633=>array(65,-61,908,842),49634=>array(65,-61,908,842),49635=>array(65,-71,931,842),49636=>array(64,-46,907,842),49637=>array(65,-68,912,842),49638=>array(65,-76,908,842),49639=>array(65,-44,921,842),49640=>array(65,-62,917,842),49641=>array(65,-64,908,842),49642=>array(65,-64,908,842),49643=>array(65,-64,908,842),49644=>array(65,-69,923,842),49645=>array(65,-64,908,842),49646=>array(65,-64,908,842),49647=>array(65,-76,908,842),49648=>array(65,-62,908,842),49649=>array(65,-61,908,842),49650=>array(65,-69,922,842),49651=>array(65,-74,929,842),49652=>array(65,-69,927,842),49653=>array(65,-68,911,842),49654=>array(65,-72,929,842),49655=>array(65,-70,936,842),49656=>array(65,-66,908,842),49657=>array(65,-59,916,842),49658=>array(65,-60,928,842),49659=>array(65,-68,908,842),49660=>array(62,7,938,771),49661=>array(79,-61,922,822),49662=>array(79,-61,922,822),49663=>array(79,-71,922,822),49664=>array(79,-46,922,822),49665=>array(79,-68,922,822),49666=>array(79,-74,922,822),49667=>array(79,-44,922,822),49668=>array(79,-62,922,822),49669=>array(79,-64,922,822),49670=>array(79,-64,922,822),49671=>array(79,-63,922,822),49672=>array(79,-68,922,822),49673=>array(79,-64,922,822),49674=>array(79,-63,922,822),49675=>array(79,-74,922,822),49676=>array(79,-62,922,822),49677=>array(79,-61,922,822),49678=>array(79,-69,922,822),49679=>array(79,-74,922,822),49680=>array(79,-69,922,822),49681=>array(79,-68,922,822),49682=>array(79,-72,922,822),49683=>array(79,-70,922,822),49684=>array(79,-66,922,822),49685=>array(79,-59,922,822),49686=>array(79,-60,922,822),49687=>array(79,-68,922,822),49688=>array(79,-64,921,831),49689=>array(79,-61,921,822),49690=>array(79,-61,921,822),49691=>array(79,-71,921,822),49692=>array(79,-46,921,822),49693=>array(79,-68,921,822),49694=>array(79,-74,921,822),49695=>array(79,-44,921,822),49696=>array(79,-62,921,822),49697=>array(79,-64,921,822),49698=>array(79,-64,921,822),49699=>array(79,-63,921,822),49700=>array(79,-68,921,822),49701=>array(79,-64,921,822),49702=>array(79,-63,921,822),49703=>array(79,-74,921,822),49704=>array(79,-62,921,822),49705=>array(79,-61,921,822),49706=>array(79,-69,921,822),49707=>array(79,-74,921,822),49708=>array(79,-69,921,822),49709=>array(79,-68,921,822),49710=>array(79,-72,921,822),49711=>array(79,-70,921,822),49712=>array(79,-66,921,822),49713=>array(79,-59,921,822),49714=>array(79,-60,921,822),49715=>array(79,-68,921,822),49716=>array(69,-70,907,841),49717=>array(73,-61,907,841),49718=>array(73,-61,907,841),49719=>array(73,-71,931,841),49720=>array(76,-46,907,841),49721=>array(73,-68,912,841),49722=>array(73,-76,907,841),49723=>array(73,-44,921,841),49724=>array(73,-62,917,841),49725=>array(73,-64,907,841),49726=>array(73,-64,908,841),49727=>array(73,-64,908,841),49728=>array(73,-69,923,841),49729=>array(73,-64,908,841),49730=>array(73,-64,908,841),49731=>array(73,-76,906,841),49732=>array(73,-62,907,841),49733=>array(73,-61,907,841),49734=>array(73,-69,922,841),49735=>array(73,-74,929,841),49736=>array(73,-69,927,841),49737=>array(73,-68,911,841),49738=>array(73,-72,929,841),49739=>array(73,-70,936,841),49740=>array(73,-66,908,841),49741=>array(73,-59,916,841),49742=>array(73,-60,928,841),49743=>array(73,-68,908,841),49744=>array(63,-68,907,843),49745=>array(70,-61,907,843),49746=>array(70,-61,907,843),49747=>array(70,-71,931,843),49748=>array(62,-46,907,843),49749=>array(70,-68,912,843),49750=>array(70,-76,907,843),49751=>array(70,-44,921,843),49752=>array(70,-62,917,843),49753=>array(70,-64,907,843),49754=>array(70,-64,908,843),49755=>array(70,-64,908,843),49756=>array(70,-69,923,843),49757=>array(70,-64,908,843),49758=>array(70,-64,908,843),49759=>array(70,-76,907,843),49760=>array(70,-62,907,843),49761=>array(70,-61,907,843),49762=>array(70,-69,922,843),49763=>array(70,-74,929,843),49764=>array(70,-69,927,843),49765=>array(70,-68,911,843),49766=>array(70,-72,929,843),49767=>array(70,-70,936,843),49768=>array(70,-66,908,843),49769=>array(70,-59,916,843),49770=>array(70,-60,928,843),49771=>array(70,-68,908,843),49772=>array(63,-69,907,842),49773=>array(65,-61,907,840),49774=>array(65,-61,907,840),49775=>array(65,-71,931,840),49776=>array(65,-46,907,843),49777=>array(65,-68,912,840),49778=>array(65,-76,907,840),49779=>array(65,-44,921,840),49780=>array(65,-62,917,840),49781=>array(65,-64,907,840),49782=>array(65,-64,908,840),49783=>array(65,-64,908,840),49784=>array(65,-69,923,840),49785=>array(65,-64,908,840),49786=>array(65,-64,908,840),49787=>array(65,-76,907,840),49788=>array(65,-62,907,840),49789=>array(65,-61,907,840),49790=>array(65,-69,922,840),49791=>array(65,-74,929,840),49792=>array(65,-69,927,840),49793=>array(65,-68,911,840),49794=>array(65,-72,929,840),49795=>array(65,-70,936,840),49796=>array(65,-66,908,840),49797=>array(65,-59,916,840),49798=>array(65,-60,928,840),49799=>array(65,-68,908,840),49800=>array(87,-64,928,831),49801=>array(79,-61,921,822),49802=>array(79,-61,921,822),49803=>array(79,-71,921,822),49804=>array(81,-46,922,822),49805=>array(79,-68,921,822),49806=>array(79,-74,921,822),49807=>array(79,-44,921,822),49808=>array(79,-62,921,822),49809=>array(79,-64,921,822),49810=>array(79,-64,921,822),49811=>array(79,-63,921,822),49812=>array(79,-68,921,822),49813=>array(79,-64,921,822),49814=>array(79,-63,921,822),49815=>array(79,-74,921,822),49816=>array(79,-62,921,822),49817=>array(79,-61,921,822),49818=>array(79,-69,921,822),49819=>array(79,-74,921,822),49820=>array(79,-69,921,822),49821=>array(79,-68,921,822),49822=>array(79,-72,921,822),49823=>array(79,-70,921,822),49824=>array(79,-66,921,822),49825=>array(79,-59,921,822),49826=>array(79,-60,921,822),49827=>array(79,-68,921,822),49828=>array(57,52,943,741),49829=>array(79,-61,922,802),49830=>array(79,-61,922,802),49831=>array(79,-71,922,802),49832=>array(79,-46,922,802),49833=>array(79,-68,922,802),49834=>array(79,-74,922,802),49835=>array(79,-44,922,802),49836=>array(79,-62,922,802),49837=>array(79,-64,922,802),49838=>array(79,-64,922,802),49839=>array(79,-63,922,802),49840=>array(79,-68,922,802),49841=>array(79,-64,922,802),49842=>array(79,-63,922,802),49843=>array(79,-74,922,802),49844=>array(79,-62,922,802),49845=>array(79,-61,922,802),49846=>array(79,-69,922,802),49847=>array(79,-74,922,802),49848=>array(79,-69,922,802),49849=>array(79,-68,922,802),49850=>array(79,-72,922,802),49851=>array(79,-70,922,802),49852=>array(79,-66,922,802),49853=>array(79,-59,922,802),49854=>array(79,-60,922,802),49855=>array(79,-68,922,802),49856=>array(78,-69,907,842),49857=>array(65,-61,907,842),49858=>array(65,-61,907,842),49859=>array(65,-71,931,842),49860=>array(65,-46,907,842),49861=>array(65,-68,912,842),49862=>array(65,-76,907,842),49863=>array(65,-44,921,842),49864=>array(65,-62,917,842),49865=>array(65,-64,907,842),49866=>array(65,-64,908,842),49867=>array(65,-64,908,842),49868=>array(65,-69,923,842),49869=>array(65,-64,908,842),49870=>array(65,-64,908,842),49871=>array(65,-76,907,842),49872=>array(65,-62,907,842),49873=>array(65,-61,907,842),49874=>array(65,-69,922,842),49875=>array(65,-74,929,842),49876=>array(65,-69,927,842),49877=>array(65,-68,911,842),49878=>array(65,-72,929,842),49879=>array(65,-70,936,842),49880=>array(65,-66,908,842),49881=>array(65,-59,916,842),49882=>array(65,-60,928,842),49883=>array(65,-68,908,842),49884=>array(90,-69,907,842),49885=>array(106,-61,907,842),49886=>array(106,-61,907,842),49887=>array(106,-71,931,842),49888=>array(104,-46,907,842),49889=>array(106,-68,912,842),49890=>array(106,-76,907,842),49891=>array(106,-44,921,842),49892=>array(106,-62,917,842),49893=>array(106,-64,907,842),49894=>array(106,-64,908,842),49895=>array(106,-64,908,842),49896=>array(106,-69,923,842),49897=>array(106,-64,908,842),49898=>array(106,-64,908,842),49899=>array(106,-76,907,842),49900=>array(106,-62,907,842),49901=>array(106,-61,907,842),49902=>array(106,-69,922,842),49903=>array(106,-74,929,842),49904=>array(106,-69,927,842),49905=>array(106,-68,911,842),49906=>array(106,-72,929,842),49907=>array(106,-70,936,842),49908=>array(106,-66,908,842),49909=>array(106,-59,916,842),49910=>array(106,-60,928,842),49911=>array(106,-68,908,842),49912=>array(20,-69,937,842),49913=>array(62,-59,936,842),49914=>array(62,-61,936,842),49915=>array(62,-71,936,842),49916=>array(72,-45,936,842),49917=>array(62,-69,936,842),49918=>array(62,-76,936,842),49919=>array(62,-44,936,842),49920=>array(62,-62,936,842),49921=>array(62,-64,936,842),49922=>array(62,-64,936,842),49923=>array(62,-64,936,842),49924=>array(62,-70,936,842),49925=>array(62,-64,936,842),49926=>array(62,-64,936,842),49927=>array(62,-76,936,842),49928=>array(62,-62,936,842),49929=>array(62,-61,936,842),49930=>array(62,-70,936,842),49931=>array(62,-74,936,842),49932=>array(62,-69,936,842),49933=>array(62,-67,936,842),49934=>array(62,-72,936,842),49935=>array(62,-71,936,842),49936=>array(62,-66,936,842),49937=>array(62,-59,936,842),49938=>array(62,-60,936,842),49939=>array(62,-69,936,842),49940=>array(21,-69,907,842),49941=>array(55,-61,907,842),49942=>array(55,-61,907,842),49943=>array(55,-71,931,842),49944=>array(52,-46,907,842),49945=>array(55,-68,912,842),49946=>array(55,-76,907,842),49947=>array(55,-44,921,842),49948=>array(55,-62,917,842),49949=>array(55,-64,907,842),49950=>array(55,-64,908,842),49951=>array(55,-64,908,842),49952=>array(55,-69,923,842),49953=>array(55,-64,908,842),49954=>array(55,-64,908,842),49955=>array(55,-76,907,842),49956=>array(55,-62,907,842),49957=>array(55,-61,907,842),49958=>array(55,-69,922,842),49959=>array(55,-74,929,842),49960=>array(55,-69,927,842),49961=>array(55,-68,911,842),49962=>array(55,-72,929,842),49963=>array(55,-70,936,842),49964=>array(55,-66,908,842),49965=>array(55,-59,916,842),49966=>array(55,-60,928,842),49967=>array(55,-68,908,842),49968=>array(20,-68,935,843),49969=>array(62,-59,936,842),49970=>array(62,-61,936,842),49971=>array(62,-71,936,842),49972=>array(72,-45,936,842),49973=>array(62,-69,936,842),49974=>array(62,-76,936,842),49975=>array(62,-44,936,842),49976=>array(62,-62,936,842),49977=>array(62,-64,936,842),49978=>array(62,-64,936,842),49979=>array(62,-64,936,842),49980=>array(62,-70,936,842),49981=>array(62,-64,936,842),49982=>array(62,-64,936,842),49983=>array(62,-76,936,842),49984=>array(62,-62,936,842),49985=>array(62,-61,936,842),49986=>array(62,-70,936,842),49987=>array(62,-74,936,842),49988=>array(62,-69,936,842),49989=>array(62,-67,936,842),49990=>array(62,-72,936,842),49991=>array(62,-71,936,842),49992=>array(62,-66,936,842),49993=>array(62,-59,936,842),49994=>array(62,-60,936,842),49995=>array(62,-69,936,842),49996=>array(21,-69,907,842),49997=>array(60,-61,907,842),49998=>array(60,-61,907,842),49999=>array(60,-71,931,842),50000=>array(52,-46,907,842),50001=>array(60,-68,912,842),50002=>array(60,-76,907,842),50003=>array(60,-44,921,842),50004=>array(60,-62,917,842),50005=>array(60,-64,907,842),50006=>array(60,-64,908,842),50007=>array(60,-64,908,842),50008=>array(60,-69,923,842),50009=>array(60,-64,908,842),50010=>array(60,-64,908,842),50011=>array(60,-76,907,842),50012=>array(60,-62,907,842),50013=>array(60,-61,907,842),50014=>array(60,-69,922,842),50015=>array(60,-74,929,842),50016=>array(60,-69,927,842),50017=>array(60,-68,911,842),50018=>array(60,-72,929,842),50019=>array(60,-70,936,842),50020=>array(60,-66,908,842),50021=>array(60,-59,916,842),50022=>array(60,-60,928,842),50023=>array(60,-68,908,842),50024=>array(20,-70,907,841),50025=>array(72,-61,907,841),50026=>array(72,-61,907,841),50027=>array(72,-71,931,841),50028=>array(72,-46,907,841),50029=>array(72,-68,912,841),50030=>array(72,-76,907,841),50031=>array(72,-44,921,841),50032=>array(72,-62,917,841),50033=>array(72,-64,907,841),50034=>array(72,-64,908,841),50035=>array(72,-64,908,841),50036=>array(72,-69,923,841),50037=>array(72,-64,908,841),50038=>array(72,-64,908,841),50039=>array(72,-76,906,841),50040=>array(72,-62,907,841),50041=>array(72,-61,907,841),50042=>array(72,-69,922,841),50043=>array(72,-74,929,841),50044=>array(72,-69,927,841),50045=>array(72,-68,911,841),50046=>array(72,-72,929,841),50047=>array(72,-70,936,841),50048=>array(72,-66,908,841),50049=>array(72,-59,916,841),50050=>array(72,-60,928,841),50051=>array(72,-68,908,841),50052=>array(20,-68,907,843),50053=>array(50,-61,907,843),50054=>array(50,-61,907,843),50055=>array(50,-71,931,843),50056=>array(52,-46,907,843),50057=>array(50,-68,912,843),50058=>array(50,-76,907,843),50059=>array(50,-44,921,843),50060=>array(50,-62,917,843),50061=>array(50,-64,907,843),50062=>array(50,-64,908,843),50063=>array(50,-64,908,843),50064=>array(50,-69,923,843),50065=>array(50,-64,908,843),50066=>array(50,-64,908,843),50067=>array(50,-76,907,843),50068=>array(50,-62,907,843),50069=>array(50,-61,907,843),50070=>array(50,-69,922,843),50071=>array(50,-74,929,843),50072=>array(50,-69,927,843),50073=>array(50,-68,911,843),50074=>array(50,-72,929,843),50075=>array(50,-70,936,843),50076=>array(50,-66,908,843),50077=>array(50,-59,916,843),50078=>array(50,-60,928,843),50079=>array(50,-68,908,843),50080=>array(20,-70,907,842),50081=>array(52,-61,908,842),50082=>array(52,-61,908,842),50083=>array(52,-71,931,842),50084=>array(52,-46,907,842),50085=>array(52,-68,912,842),50086=>array(52,-76,908,842),50087=>array(52,-44,921,842),50088=>array(52,-62,917,842),50089=>array(52,-64,908,842),50090=>array(52,-64,908,842),50091=>array(52,-64,908,842),50092=>array(52,-69,923,842),50093=>array(52,-64,908,842),50094=>array(52,-64,908,842),50095=>array(52,-76,908,842),50096=>array(52,-62,908,842),50097=>array(52,-61,908,842),50098=>array(52,-69,922,842),50099=>array(52,-74,929,842),50100=>array(52,-69,927,842),50101=>array(52,-68,911,842),50102=>array(52,-72,929,842),50103=>array(52,-70,936,842),50104=>array(52,-66,908,842),50105=>array(52,-59,916,842),50106=>array(52,-60,928,842),50107=>array(52,-68,908,842),50108=>array(20,-68,907,843),50109=>array(50,-61,907,843),50110=>array(50,-61,907,843),50111=>array(50,-71,931,843),50112=>array(40,-46,907,843),50113=>array(50,-68,912,843),50114=>array(50,-76,907,843),50115=>array(50,-44,921,843),50116=>array(50,-62,917,843),50117=>array(50,-64,907,843),50118=>array(50,-64,908,843),50119=>array(50,-64,908,843),50120=>array(50,-69,923,843),50121=>array(50,-64,908,843),50122=>array(50,-64,908,843),50123=>array(50,-76,907,843),50124=>array(50,-62,907,843),50125=>array(50,-61,907,843),50126=>array(50,-69,922,843),50127=>array(50,-74,929,843),50128=>array(50,-69,927,843),50129=>array(50,-68,911,843),50130=>array(50,-72,929,843),50131=>array(50,-70,936,843),50132=>array(50,-66,908,843),50133=>array(50,-59,916,843),50134=>array(50,-60,928,843),50135=>array(50,-68,908,843),50136=>array(62,12,943,774),50137=>array(79,-61,921,788),50138=>array(79,-61,921,788),50139=>array(79,-71,921,788),50140=>array(79,-46,922,788),50141=>array(79,-68,921,788),50142=>array(79,-74,921,788),50143=>array(79,-44,921,788),50144=>array(79,-62,921,788),50145=>array(79,-64,921,788),50146=>array(79,-64,921,788),50147=>array(79,-63,921,788),50148=>array(79,-68,921,788),50149=>array(79,-64,921,788),50150=>array(79,-63,921,788),50151=>array(79,-74,921,788),50152=>array(79,-62,921,788),50153=>array(79,-61,921,788),50154=>array(79,-69,921,788),50155=>array(79,-74,921,788),50156=>array(79,-69,921,788),50157=>array(79,-68,921,788),50158=>array(79,-72,921,788),50159=>array(79,-70,921,788),50160=>array(79,-66,921,788),50161=>array(79,-59,921,788),50162=>array(79,-60,921,788),50163=>array(79,-68,921,788),50164=>array(41,-68,936,843),50165=>array(55,-59,936,842),50166=>array(55,-61,936,842),50167=>array(55,-71,936,842),50168=>array(64,-45,936,842),50169=>array(55,-69,936,842),50170=>array(55,-76,936,842),50171=>array(55,-44,936,842),50172=>array(55,-62,936,842),50173=>array(55,-64,936,842),50174=>array(55,-64,936,842),50175=>array(55,-64,936,842),50176=>array(55,-70,936,842),50177=>array(55,-64,936,842),50178=>array(55,-64,936,842),50179=>array(55,-76,936,842),50180=>array(55,-62,936,842),50181=>array(55,-61,936,842),50182=>array(55,-70,936,842),50183=>array(55,-74,936,842),50184=>array(55,-69,936,842),50185=>array(55,-67,936,842),50186=>array(55,-72,936,842),50187=>array(55,-71,936,842),50188=>array(55,-66,936,842),50189=>array(55,-59,936,842),50190=>array(55,-60,936,842),50191=>array(55,-69,936,842),50192=>array(38,-69,907,842),50193=>array(63,-61,907,842),50194=>array(63,-61,907,842),50195=>array(63,-71,931,842),50196=>array(48,-46,907,842),50197=>array(63,-68,912,842),50198=>array(63,-76,907,842),50199=>array(63,-44,921,842),50200=>array(63,-62,917,842),50201=>array(63,-64,907,842),50202=>array(63,-64,908,842),50203=>array(63,-64,908,842),50204=>array(63,-69,923,842),50205=>array(63,-64,908,842),50206=>array(63,-64,908,842),50207=>array(63,-76,907,842),50208=>array(63,-62,907,842),50209=>array(63,-61,907,842),50210=>array(63,-69,922,842),50211=>array(63,-74,929,842),50212=>array(63,-69,927,842),50213=>array(63,-68,911,842),50214=>array(63,-72,929,842),50215=>array(63,-70,936,842),50216=>array(63,-66,908,842),50217=>array(63,-59,916,842),50218=>array(63,-60,928,842),50219=>array(63,-68,908,842),50220=>array(68,-69,907,842),50221=>array(65,-61,907,842),50222=>array(65,-61,907,842),50223=>array(65,-71,931,842),50224=>array(65,-46,907,842),50225=>array(65,-68,912,842),50226=>array(65,-76,907,842),50227=>array(65,-44,921,842),50228=>array(65,-62,917,842),50229=>array(65,-64,907,842),50230=>array(65,-64,908,842),50231=>array(65,-64,908,842),50232=>array(65,-69,923,842),50233=>array(65,-64,908,842),50234=>array(65,-64,908,842),50235=>array(65,-76,907,842),50236=>array(65,-62,907,842),50237=>array(65,-61,907,842),50238=>array(65,-69,922,842),50239=>array(65,-74,929,842),50240=>array(65,-69,927,842),50241=>array(65,-68,911,842),50242=>array(65,-72,929,842),50243=>array(65,-70,936,842),50244=>array(65,-66,908,842),50245=>array(65,-59,916,842),50246=>array(65,-60,928,842),50247=>array(65,-68,908,842),50248=>array(62,12,943,774),50249=>array(79,-61,922,788),50250=>array(79,-61,922,788),50251=>array(79,-71,922,788),50252=>array(79,-46,922,788),50253=>array(79,-68,922,788),50254=>array(79,-74,922,788),50255=>array(79,-44,922,788),50256=>array(79,-62,922,788),50257=>array(79,-64,922,788),50258=>array(79,-64,922,788),50259=>array(79,-63,922,788),50260=>array(79,-68,922,788),50261=>array(79,-64,922,788),50262=>array(79,-63,922,788),50263=>array(79,-74,922,788),50264=>array(79,-62,922,788),50265=>array(79,-61,922,788),50266=>array(79,-69,922,788),50267=>array(79,-74,922,788),50268=>array(79,-69,922,788),50269=>array(79,-68,922,788),50270=>array(79,-72,922,788),50271=>array(79,-70,922,788),50272=>array(79,-66,922,788),50273=>array(79,-59,922,788),50274=>array(79,-60,922,788),50275=>array(79,-68,922,788),50276=>array(82,-64,924,822),50277=>array(79,-61,921,788),50278=>array(79,-61,921,788),50279=>array(79,-71,921,788),50280=>array(79,-46,921,788),50281=>array(79,-68,921,788),50282=>array(79,-74,921,788),50283=>array(79,-44,921,788),50284=>array(79,-62,921,788),50285=>array(79,-64,921,788),50286=>array(79,-64,921,788),50287=>array(79,-63,921,788),50288=>array(79,-68,921,788),50289=>array(79,-64,921,788),50290=>array(79,-63,921,788),50291=>array(79,-74,921,788),50292=>array(79,-62,921,788),50293=>array(79,-61,921,788),50294=>array(79,-69,921,788),50295=>array(79,-74,921,788),50296=>array(79,-69,921,788),50297=>array(79,-68,921,788),50298=>array(79,-72,921,788),50299=>array(79,-70,921,788),50300=>array(79,-66,921,788),50301=>array(79,-59,921,788),50302=>array(79,-60,921,788),50303=>array(79,-68,921,788),50304=>array(81,-70,907,841),50305=>array(74,-61,908,841),50306=>array(74,-61,908,841),50307=>array(74,-71,931,841),50308=>array(66,-46,908,842),50309=>array(74,-68,912,841),50310=>array(74,-76,908,841),50311=>array(74,-44,921,841),50312=>array(74,-62,917,841),50313=>array(74,-64,908,841),50314=>array(74,-64,908,841),50315=>array(74,-64,908,841),50316=>array(74,-69,923,841),50317=>array(74,-64,908,841),50318=>array(74,-64,908,841),50319=>array(74,-76,908,841),50320=>array(74,-62,908,841),50321=>array(74,-61,908,841),50322=>array(74,-69,922,841),50323=>array(74,-74,929,841),50324=>array(74,-69,927,841),50325=>array(74,-68,911,841),50326=>array(74,-72,929,841),50327=>array(74,-70,936,841),50328=>array(74,-66,908,841),50329=>array(74,-59,916,841),50330=>array(74,-60,928,841),50331=>array(74,-68,908,841),50332=>array(51,-68,907,843),50333=>array(64,-61,907,843),50334=>array(64,-61,907,843),50335=>array(64,-71,931,843),50336=>array(64,-46,907,843),50337=>array(64,-68,912,843),50338=>array(64,-76,907,843),50339=>array(64,-44,921,843),50340=>array(64,-62,917,843),50341=>array(64,-64,907,843),50342=>array(64,-64,908,843),50343=>array(64,-64,908,843),50344=>array(64,-69,923,843),50345=>array(64,-64,908,843),50346=>array(64,-64,908,843),50347=>array(64,-76,907,843),50348=>array(64,-62,907,843),50349=>array(64,-61,907,843),50350=>array(64,-69,922,843),50351=>array(64,-74,929,843),50352=>array(64,-69,927,843),50353=>array(64,-68,911,843),50354=>array(64,-72,929,843),50355=>array(64,-70,936,843),50356=>array(64,-66,908,843),50357=>array(64,-59,916,843),50358=>array(64,-60,928,843),50359=>array(64,-68,908,843),50360=>array(60,-69,907,842),50361=>array(65,-61,907,842),50362=>array(65,-61,907,842),50363=>array(65,-71,931,842),50364=>array(65,-46,907,842),50365=>array(65,-68,912,842),50366=>array(65,-76,907,842),50367=>array(65,-44,921,842),50368=>array(65,-62,917,842),50369=>array(65,-64,907,842),50370=>array(65,-64,908,842),50371=>array(65,-64,908,842),50372=>array(65,-69,923,842),50373=>array(65,-64,908,842),50374=>array(65,-64,908,842),50375=>array(65,-76,907,842),50376=>array(65,-62,907,842),50377=>array(65,-61,907,842),50378=>array(65,-69,922,842),50379=>array(65,-74,929,842),50380=>array(65,-69,927,842),50381=>array(65,-68,911,842),50382=>array(65,-72,929,842),50383=>array(65,-70,936,842),50384=>array(65,-66,908,842),50385=>array(65,-59,916,842),50386=>array(65,-60,928,842),50387=>array(65,-68,908,842),50388=>array(82,-64,924,822),50389=>array(79,-61,921,788),50390=>array(79,-61,921,788),50391=>array(79,-71,921,788),50392=>array(81,-46,922,788),50393=>array(79,-68,921,788),50394=>array(79,-74,921,788),50395=>array(79,-44,921,788),50396=>array(79,-62,921,788),50397=>array(79,-64,921,788),50398=>array(79,-64,921,788),50399=>array(79,-63,921,788),50400=>array(79,-68,921,788),50401=>array(79,-64,921,788),50402=>array(79,-63,921,788),50403=>array(79,-74,921,788),50404=>array(79,-62,921,788),50405=>array(79,-61,921,788),50406=>array(79,-69,921,788),50407=>array(79,-74,921,788),50408=>array(79,-69,921,788),50409=>array(79,-68,921,788),50410=>array(79,-72,921,788),50411=>array(79,-70,921,788),50412=>array(79,-66,921,788),50413=>array(79,-59,921,788),50414=>array(79,-60,921,788),50415=>array(79,-68,921,788),50416=>array(57,22,943,720),50417=>array(79,-61,922,794),50418=>array(79,-61,922,794),50419=>array(79,-71,922,794),50420=>array(79,-46,921,794),50421=>array(79,-68,922,794),50422=>array(79,-74,922,794),50423=>array(79,-44,922,794),50424=>array(79,-62,922,794),50425=>array(79,-64,922,794),50426=>array(79,-64,922,794),50427=>array(79,-63,922,794),50428=>array(79,-68,922,794),50429=>array(79,-64,922,794),50430=>array(79,-63,922,794),50431=>array(79,-74,922,794),50432=>array(79,-62,922,794),50433=>array(79,-61,922,794),50434=>array(79,-69,922,794),50435=>array(79,-74,922,794),50436=>array(79,-69,922,794),50437=>array(79,-68,922,794),50438=>array(79,-72,922,794),50439=>array(79,-70,922,794),50440=>array(79,-66,922,794),50441=>array(79,-59,922,794),50442=>array(79,-60,922,794),50443=>array(79,-68,922,794),50444=>array(67,-69,907,842),50445=>array(75,-61,907,842),50446=>array(75,-61,907,842),50447=>array(75,-71,931,842),50448=>array(65,-46,907,842),50449=>array(75,-68,912,842),50450=>array(75,-76,907,842),50451=>array(75,-44,921,842),50452=>array(75,-62,917,842),50453=>array(75,-64,907,842),50454=>array(75,-64,908,842),50455=>array(75,-64,908,842),50456=>array(75,-69,923,842),50457=>array(75,-64,908,842),50458=>array(75,-64,908,842),50459=>array(75,-76,907,842),50460=>array(75,-62,907,842),50461=>array(75,-61,907,842),50462=>array(75,-69,922,842),50463=>array(75,-74,929,842),50464=>array(75,-69,927,842),50465=>array(75,-68,911,842),50466=>array(75,-72,929,842),50467=>array(75,-70,936,842),50468=>array(75,-66,908,842),50469=>array(75,-59,916,842),50470=>array(75,-60,928,842),50471=>array(75,-68,908,842),50472=>array(48,-69,907,842),50473=>array(68,-61,907,842),50474=>array(68,-61,907,842),50475=>array(68,-71,931,842),50476=>array(68,-46,907,842),50477=>array(68,-68,912,842),50478=>array(68,-76,907,842),50479=>array(68,-44,921,842),50480=>array(68,-62,917,842),50481=>array(68,-64,907,842),50482=>array(68,-64,908,842),50483=>array(68,-64,908,842),50484=>array(68,-69,923,842),50485=>array(68,-64,908,842),50486=>array(68,-64,908,842),50487=>array(68,-76,907,842),50488=>array(68,-62,907,842),50489=>array(68,-61,907,842),50490=>array(68,-69,922,842),50491=>array(68,-74,929,842),50492=>array(68,-69,927,842),50493=>array(68,-68,911,842),50494=>array(68,-72,929,842),50495=>array(68,-70,936,842),50496=>array(68,-66,908,842),50497=>array(68,-59,916,842),50498=>array(68,-60,928,842),50499=>array(68,-68,908,842),50500=>array(108,-69,936,842),50501=>array(113,-59,936,842),50502=>array(113,-61,936,842),50503=>array(113,-71,936,842),50504=>array(100,-45,936,842),50505=>array(113,-69,936,842),50506=>array(113,-76,936,842),50507=>array(113,-44,936,842),50508=>array(113,-62,936,842),50509=>array(113,-64,936,842),50510=>array(113,-64,936,842),50511=>array(113,-64,936,842),50512=>array(113,-70,936,842),50513=>array(113,-64,936,842),50514=>array(113,-64,936,842),50515=>array(113,-76,936,842),50516=>array(113,-62,936,842),50517=>array(113,-61,936,842),50518=>array(113,-70,936,842),50519=>array(113,-74,936,842),50520=>array(113,-69,936,842),50521=>array(113,-67,936,842),50522=>array(113,-72,936,842),50523=>array(113,-71,936,842),50524=>array(113,-66,936,842),50525=>array(113,-59,936,842),50526=>array(113,-60,936,842),50527=>array(113,-69,936,842),50528=>array(105,-69,907,842),50529=>array(93,-61,907,842),50530=>array(93,-61,907,842),50531=>array(93,-71,931,842),50532=>array(80,-46,907,842),50533=>array(93,-68,912,842),50534=>array(93,-76,907,842),50535=>array(93,-44,921,842),50536=>array(93,-62,917,842),50537=>array(93,-64,907,842),50538=>array(93,-64,908,842),50539=>array(93,-64,908,842),50540=>array(93,-69,923,842),50541=>array(93,-64,908,842),50542=>array(93,-64,908,842),50543=>array(93,-76,907,842),50544=>array(93,-62,907,842),50545=>array(93,-61,907,842),50546=>array(93,-69,922,842),50547=>array(93,-74,929,842),50548=>array(93,-69,927,842),50549=>array(93,-68,911,842),50550=>array(93,-72,929,842),50551=>array(93,-70,936,842),50552=>array(93,-66,908,842),50553=>array(93,-59,916,842),50554=>array(93,-60,928,842),50555=>array(93,-68,908,842),50556=>array(123,-68,935,843),50557=>array(113,-59,936,842),50558=>array(113,-61,936,842),50559=>array(113,-71,936,842),50560=>array(100,-45,936,842),50561=>array(113,-69,936,842),50562=>array(113,-76,936,842),50563=>array(113,-44,936,842),50564=>array(113,-62,936,842),50565=>array(113,-64,936,842),50566=>array(113,-64,936,842),50567=>array(113,-64,936,842),50568=>array(113,-70,936,842),50569=>array(113,-64,936,842),50570=>array(113,-64,936,842),50571=>array(113,-76,936,842),50572=>array(113,-62,936,842),50573=>array(113,-61,936,842),50574=>array(113,-70,936,842),50575=>array(113,-74,936,842),50576=>array(113,-69,936,842),50577=>array(113,-67,936,842),50578=>array(113,-72,936,842),50579=>array(113,-71,936,842),50580=>array(113,-66,936,842),50581=>array(113,-59,936,842),50582=>array(113,-60,936,842),50583=>array(113,-69,936,842),50584=>array(105,-69,907,842),50585=>array(93,-61,907,842),50586=>array(93,-61,907,842),50587=>array(93,-71,931,842),50588=>array(85,-46,907,842),50589=>array(93,-68,912,842),50590=>array(93,-76,907,842),50591=>array(93,-44,921,842),50592=>array(93,-62,917,842),50593=>array(93,-64,907,842),50594=>array(93,-64,908,842),50595=>array(93,-64,908,842),50596=>array(93,-69,923,842),50597=>array(93,-64,908,842),50598=>array(93,-64,908,842),50599=>array(93,-76,907,842),50600=>array(93,-62,907,842),50601=>array(93,-61,907,842),50602=>array(93,-69,922,842),50603=>array(93,-74,929,842),50604=>array(93,-69,927,842),50605=>array(93,-68,911,842),50606=>array(93,-72,929,842),50607=>array(93,-70,936,842),50608=>array(93,-66,908,842),50609=>array(93,-59,916,842),50610=>array(93,-60,928,842),50611=>array(93,-68,908,842),50612=>array(93,-70,907,841),50613=>array(88,-61,907,841),50614=>array(88,-61,907,841),50615=>array(88,-71,931,841),50616=>array(85,-46,907,841),50617=>array(88,-68,912,841),50618=>array(88,-76,907,841),50619=>array(88,-44,921,841),50620=>array(88,-62,917,841),50621=>array(88,-64,907,841),50622=>array(88,-64,908,841),50623=>array(88,-64,908,841),50624=>array(88,-69,923,841),50625=>array(88,-64,908,841),50626=>array(88,-64,908,841),50627=>array(88,-76,906,841),50628=>array(88,-62,907,841),50629=>array(88,-61,907,841),50630=>array(88,-69,922,841),50631=>array(88,-74,929,841),50632=>array(88,-69,927,841),50633=>array(88,-68,911,841),50634=>array(88,-72,929,841),50635=>array(88,-70,936,841),50636=>array(88,-66,908,841),50637=>array(88,-59,916,841),50638=>array(88,-60,928,841),50639=>array(88,-68,908,841),50640=>array(85,-68,907,843),50641=>array(75,-61,907,843),50642=>array(75,-61,907,843),50643=>array(75,-71,931,843),50644=>array(76,-46,907,843),50645=>array(75,-68,912,843),50646=>array(75,-76,907,843),50647=>array(75,-44,921,843),50648=>array(75,-62,917,843),50649=>array(75,-64,907,843),50650=>array(75,-64,908,843),50651=>array(75,-64,908,843),50652=>array(75,-69,923,843),50653=>array(75,-64,908,843),50654=>array(75,-64,908,843),50655=>array(75,-76,907,843),50656=>array(75,-62,907,843),50657=>array(75,-61,907,843),50658=>array(75,-69,922,843),50659=>array(75,-74,929,843),50660=>array(75,-69,927,843),50661=>array(75,-68,911,843),50662=>array(75,-72,929,843),50663=>array(75,-70,936,843),50664=>array(75,-66,908,843),50665=>array(75,-59,916,843),50666=>array(75,-60,928,843),50667=>array(75,-68,908,843),50668=>array(93,-70,907,842),50669=>array(88,-61,908,842),50670=>array(88,-61,908,842),50671=>array(88,-71,931,842),50672=>array(85,-46,907,842),50673=>array(88,-68,912,842),50674=>array(88,-76,908,842),50675=>array(88,-44,921,842),50676=>array(88,-62,917,842),50677=>array(88,-64,908,842),50678=>array(88,-64,908,842),50679=>array(88,-64,908,842),50680=>array(88,-69,923,842),50681=>array(88,-64,908,842),50682=>array(88,-64,908,842),50683=>array(88,-76,908,842),50684=>array(88,-62,908,842),50685=>array(88,-61,908,842),50686=>array(88,-69,922,842),50687=>array(88,-74,929,842),50688=>array(88,-69,927,842),50689=>array(88,-68,911,842),50690=>array(88,-72,929,842),50691=>array(88,-70,936,842),50692=>array(88,-66,908,842),50693=>array(88,-59,916,842),50694=>array(88,-60,928,842),50695=>array(88,-68,908,842),50696=>array(85,-68,907,843),50697=>array(75,-61,907,843),50698=>array(75,-61,907,843),50699=>array(75,-71,931,843),50700=>array(76,-46,907,843),50701=>array(75,-68,912,843),50702=>array(75,-76,907,843),50703=>array(75,-44,921,843),50704=>array(75,-62,917,843),50705=>array(75,-64,907,843),50706=>array(75,-64,908,843),50707=>array(75,-64,908,843),50708=>array(75,-69,923,843),50709=>array(75,-64,908,843),50710=>array(75,-64,908,843),50711=>array(75,-76,907,843),50712=>array(75,-62,907,843),50713=>array(75,-61,907,843),50714=>array(75,-69,922,843),50715=>array(75,-74,929,843),50716=>array(75,-69,927,843),50717=>array(75,-68,911,843),50718=>array(75,-72,929,843),50719=>array(75,-70,936,843),50720=>array(75,-66,908,843),50721=>array(75,-59,916,843),50722=>array(75,-60,928,843),50723=>array(75,-68,908,843),50724=>array(62,4,938,763),50725=>array(79,-61,921,808),50726=>array(79,-61,921,808),50727=>array(79,-71,921,808),50728=>array(79,-46,922,803),50729=>array(79,-68,921,808),50730=>array(79,-74,921,808),50731=>array(79,-44,921,808),50732=>array(79,-62,921,808),50733=>array(79,-64,921,808),50734=>array(79,-64,921,808),50735=>array(79,-63,921,808),50736=>array(79,-68,921,808),50737=>array(79,-64,921,808),50738=>array(79,-63,921,808),50739=>array(79,-74,921,808),50740=>array(79,-62,921,808),50741=>array(79,-61,921,808),50742=>array(79,-69,921,808),50743=>array(79,-74,921,808),50744=>array(79,-69,921,808),50745=>array(79,-68,921,808),50746=>array(79,-72,921,808),50747=>array(79,-70,921,808),50748=>array(79,-66,921,808),50749=>array(79,-59,921,808),50750=>array(79,-60,921,808),50751=>array(79,-68,921,808),50752=>array(52,-69,936,842),50753=>array(77,-59,936,842),50754=>array(77,-61,936,842),50755=>array(77,-71,936,842),50756=>array(72,-45,936,842),50757=>array(77,-69,936,842),50758=>array(77,-76,936,842),50759=>array(77,-44,936,842),50760=>array(77,-62,936,842),50761=>array(77,-64,936,842),50762=>array(77,-64,936,842),50763=>array(77,-64,936,842),50764=>array(77,-70,936,842),50765=>array(77,-64,936,842),50766=>array(77,-64,936,842),50767=>array(77,-76,936,842),50768=>array(77,-62,936,842),50769=>array(77,-61,936,842),50770=>array(77,-70,936,842),50771=>array(77,-74,936,842),50772=>array(77,-69,936,842),50773=>array(77,-67,936,842),50774=>array(77,-72,936,842),50775=>array(77,-71,936,842),50776=>array(77,-66,936,842),50777=>array(77,-59,936,842),50778=>array(77,-60,936,842),50779=>array(77,-69,936,842),50780=>array(61,-69,907,842),50781=>array(62,-61,907,842),50782=>array(62,-61,907,842),50783=>array(62,-71,931,842),50784=>array(62,-46,907,842),50785=>array(62,-68,912,842),50786=>array(62,-76,907,842),50787=>array(62,-44,921,842),50788=>array(62,-62,917,842),50789=>array(62,-64,907,842),50790=>array(62,-64,908,842),50791=>array(62,-64,908,842),50792=>array(62,-69,923,842),50793=>array(62,-64,908,842),50794=>array(62,-64,908,842),50795=>array(62,-76,907,842),50796=>array(62,-62,907,842),50797=>array(62,-61,907,842),50798=>array(62,-69,922,842),50799=>array(62,-74,929,842),50800=>array(62,-69,927,842),50801=>array(62,-68,911,842),50802=>array(62,-72,929,842),50803=>array(62,-70,936,842),50804=>array(62,-66,908,842),50805=>array(62,-59,916,842),50806=>array(62,-60,928,842),50807=>array(62,-68,908,842),50808=>array(52,-69,907,842),50809=>array(64,-61,907,842),50810=>array(64,-61,907,842),50811=>array(64,-71,931,842),50812=>array(64,-46,907,842),50813=>array(64,-68,912,842),50814=>array(64,-76,907,842),50815=>array(64,-44,921,842),50816=>array(64,-62,917,842),50817=>array(64,-64,907,842),50818=>array(64,-64,908,842),50819=>array(64,-64,908,842),50820=>array(64,-69,923,842),50821=>array(64,-64,908,842),50822=>array(64,-64,908,842),50823=>array(64,-76,907,842),50824=>array(64,-62,907,842),50825=>array(64,-61,907,842),50826=>array(64,-69,922,842),50827=>array(64,-74,929,842),50828=>array(64,-69,927,842),50829=>array(64,-68,911,842),50830=>array(64,-72,929,842),50831=>array(64,-70,936,842),50832=>array(64,-66,908,842),50833=>array(64,-59,916,842),50834=>array(64,-60,928,842),50835=>array(64,-68,908,842),50836=>array(62,4,938,763),50837=>array(79,-61,922,808),50838=>array(79,-61,922,808),50839=>array(79,-71,922,808),50840=>array(79,-46,922,793),50841=>array(79,-68,922,808),50842=>array(79,-74,922,808),50843=>array(79,-44,922,808),50844=>array(79,-62,922,808),50845=>array(79,-64,922,808),50846=>array(79,-64,922,808),50847=>array(79,-63,922,808),50848=>array(79,-68,922,808),50849=>array(79,-64,922,808),50850=>array(79,-63,922,808),50851=>array(79,-74,922,808),50852=>array(79,-62,922,808),50853=>array(79,-61,922,808),50854=>array(79,-69,922,808),50855=>array(79,-74,922,808),50856=>array(79,-69,922,808),50857=>array(79,-68,922,808),50858=>array(79,-72,922,808),50859=>array(79,-70,922,808),50860=>array(79,-66,922,808),50861=>array(79,-59,922,808),50862=>array(79,-60,922,808),50863=>array(79,-68,922,808),50864=>array(79,-64,921,793),50865=>array(79,-61,921,808),50866=>array(79,-61,921,808),50867=>array(79,-71,921,808),50868=>array(79,-46,921,793),50869=>array(79,-68,921,808),50870=>array(79,-74,921,808),50871=>array(79,-44,921,808),50872=>array(79,-62,921,808),50873=>array(79,-64,921,808),50874=>array(79,-64,921,808),50875=>array(79,-63,921,808),50876=>array(79,-68,921,808),50877=>array(79,-64,921,808),50878=>array(79,-63,921,808),50879=>array(79,-74,921,808),50880=>array(79,-62,921,808),50881=>array(79,-61,921,808),50882=>array(79,-69,921,808),50883=>array(79,-74,921,808),50884=>array(79,-69,921,808),50885=>array(79,-68,921,808),50886=>array(79,-72,921,808),50887=>array(79,-70,921,808),50888=>array(79,-66,921,808),50889=>array(79,-59,921,808),50890=>array(79,-60,921,808),50891=>array(79,-68,921,808),50892=>array(73,-70,907,841),50893=>array(75,-61,908,841),50894=>array(75,-61,908,841),50895=>array(75,-71,931,841),50896=>array(76,-46,907,841),50897=>array(75,-68,912,841),50898=>array(75,-76,908,841),50899=>array(75,-44,921,841),50900=>array(75,-62,917,841),50901=>array(75,-64,908,841),50902=>array(75,-64,908,841),50903=>array(75,-64,908,841),50904=>array(75,-69,923,841),50905=>array(75,-64,908,841),50906=>array(75,-64,908,841),50907=>array(75,-76,908,841),50908=>array(75,-62,908,841),50909=>array(75,-61,908,841),50910=>array(75,-69,922,841),50911=>array(75,-74,929,841),50912=>array(75,-69,927,841),50913=>array(75,-68,911,841),50914=>array(75,-72,929,841),50915=>array(75,-70,936,841),50916=>array(75,-66,908,841),50917=>array(75,-59,916,841),50918=>array(75,-60,928,841),50919=>array(75,-68,908,841),50920=>array(53,-68,907,843),50921=>array(70,-61,907,843),50922=>array(70,-61,907,843),50923=>array(70,-71,931,843),50924=>array(61,-46,907,843),50925=>array(70,-68,912,843),50926=>array(70,-76,907,843),50927=>array(70,-44,921,843),50928=>array(70,-62,917,843),50929=>array(70,-64,907,843),50930=>array(70,-64,908,843),50931=>array(70,-64,908,843),50932=>array(70,-69,923,843),50933=>array(70,-64,908,843),50934=>array(70,-64,908,843),50935=>array(70,-76,907,843),50936=>array(70,-62,907,843),50937=>array(70,-61,907,843),50938=>array(70,-69,922,843),50939=>array(70,-74,929,843),50940=>array(70,-69,927,843),50941=>array(70,-68,911,843),50942=>array(70,-72,929,843),50943=>array(70,-70,936,843),50944=>array(70,-66,908,843),50945=>array(70,-59,916,843),50946=>array(70,-60,928,843),50947=>array(70,-68,908,843),50948=>array(70,-69,907,842),50949=>array(65,-61,907,842),50950=>array(65,-61,907,842),50951=>array(65,-71,931,842),50952=>array(63,-46,907,842),50953=>array(65,-68,912,842),50954=>array(65,-76,907,842),50955=>array(65,-44,921,842),50956=>array(65,-62,917,842),50957=>array(65,-64,907,842),50958=>array(65,-64,908,842),50959=>array(65,-64,908,842),50960=>array(65,-69,923,842),50961=>array(65,-64,908,842),50962=>array(65,-64,908,842),50963=>array(65,-76,907,842),50964=>array(65,-62,907,842),50965=>array(65,-61,907,842),50966=>array(65,-69,922,842),50967=>array(65,-74,929,842),50968=>array(65,-69,927,842),50969=>array(65,-68,911,842),50970=>array(65,-72,929,842),50971=>array(65,-70,936,842),50972=>array(65,-66,908,842),50973=>array(65,-59,916,842),50974=>array(65,-60,928,842),50975=>array(65,-68,908,842),50976=>array(71,-64,928,793),50977=>array(79,-61,921,808),50978=>array(79,-61,921,808),50979=>array(79,-71,921,808),50980=>array(79,-46,921,793),50981=>array(79,-68,921,808),50982=>array(79,-74,921,808),50983=>array(79,-44,921,808),50984=>array(79,-62,921,808),50985=>array(79,-64,921,808),50986=>array(79,-64,921,808),50987=>array(79,-63,921,808),50988=>array(79,-68,921,808),50989=>array(79,-64,921,808),50990=>array(79,-63,921,808),50991=>array(79,-74,921,808),50992=>array(79,-62,921,808),50993=>array(79,-61,921,808),50994=>array(79,-69,921,808),50995=>array(79,-74,921,808),50996=>array(79,-69,921,808),50997=>array(79,-68,921,808),50998=>array(79,-72,921,808),50999=>array(79,-70,921,808),51000=>array(79,-66,921,808),51001=>array(79,-59,921,808),51002=>array(79,-60,921,808),51003=>array(79,-68,921,808),51004=>array(57,42,943,733),51005=>array(79,-61,921,808),51006=>array(79,-61,921,808),51007=>array(79,-71,921,808),51008=>array(79,-46,921,793),51009=>array(79,-68,921,808),51010=>array(79,-74,921,808),51011=>array(79,-44,921,808),51012=>array(79,-62,921,808),51013=>array(79,-64,921,808),51014=>array(79,-64,921,808),51015=>array(79,-63,921,808),51016=>array(79,-68,921,808),51017=>array(79,-64,921,808),51018=>array(79,-63,921,808),51019=>array(79,-74,921,808),51020=>array(79,-62,921,808),51021=>array(79,-61,921,808),51022=>array(79,-69,921,808),51023=>array(79,-74,921,808),51024=>array(79,-69,921,808),51025=>array(79,-68,921,808),51026=>array(79,-72,921,808),51027=>array(79,-70,921,808),51028=>array(79,-66,921,808),51029=>array(79,-59,921,808),51030=>array(79,-60,921,808),51031=>array(79,-68,921,808),51032=>array(67,-69,907,842),51033=>array(75,-61,907,842),51034=>array(75,-61,907,842),51035=>array(75,-71,931,842),51036=>array(66,-46,907,842),51037=>array(75,-68,912,842),51038=>array(75,-76,907,842),51039=>array(75,-44,921,842),51040=>array(75,-62,917,842),51041=>array(75,-64,907,842),51042=>array(75,-64,908,842),51043=>array(75,-64,908,842),51044=>array(75,-69,923,842),51045=>array(75,-64,908,842),51046=>array(75,-64,908,842),51047=>array(75,-76,907,842),51048=>array(75,-62,907,842),51049=>array(75,-61,907,842),51050=>array(75,-69,922,842),51051=>array(75,-74,929,842),51052=>array(75,-69,927,842),51053=>array(75,-68,911,842),51054=>array(75,-72,929,842),51055=>array(75,-70,936,842),51056=>array(75,-66,908,842),51057=>array(75,-59,916,842),51058=>array(75,-60,928,842),51059=>array(75,-68,908,842),51060=>array(134,-69,906,842),51061=>array(119,-61,907,842),51062=>array(119,-61,907,842),51063=>array(119,-71,931,842),51064=>array(108,-46,907,842),51065=>array(119,-68,912,842),51066=>array(119,-76,907,842),51067=>array(119,-44,921,842),51068=>array(119,-62,917,842),51069=>array(119,-64,907,842),51070=>array(119,-64,908,842),51071=>array(119,-64,908,842),51072=>array(119,-69,923,842),51073=>array(119,-64,908,842),51074=>array(119,-64,908,842),51075=>array(119,-76,907,842),51076=>array(119,-62,907,842),51077=>array(119,-61,907,842),51078=>array(119,-69,922,842),51079=>array(119,-74,929,842),51080=>array(119,-69,927,842),51081=>array(119,-68,911,842),51082=>array(119,-72,929,842),51083=>array(119,-70,936,842),51084=>array(119,-66,908,842),51085=>array(119,-59,916,842),51086=>array(119,-60,928,842),51087=>array(119,-68,908,842),51088=>array(73,-69,936,842),51089=>array(83,-59,936,842),51090=>array(83,-61,936,842),51091=>array(83,-71,936,842),51092=>array(71,-45,936,842),51093=>array(83,-69,936,842),51094=>array(83,-76,936,842),51095=>array(83,-44,936,842),51096=>array(83,-62,936,842),51097=>array(83,-64,936,842),51098=>array(83,-64,936,842),51099=>array(83,-64,936,842),51100=>array(83,-70,936,842),51101=>array(83,-64,936,842),51102=>array(83,-64,936,842),51103=>array(83,-76,936,842),51104=>array(83,-62,936,842),51105=>array(83,-61,936,842),51106=>array(83,-70,936,842),51107=>array(83,-74,936,842),51108=>array(83,-69,936,842),51109=>array(83,-67,936,842),51110=>array(83,-72,936,842),51111=>array(83,-71,936,842),51112=>array(83,-66,936,842),51113=>array(83,-59,936,842),51114=>array(83,-60,936,842),51115=>array(83,-69,936,842),51116=>array(50,-69,907,842),51117=>array(84,-61,907,842),51118=>array(84,-61,907,842),51119=>array(84,-71,931,842),51120=>array(76,-46,907,842),51121=>array(84,-68,912,842),51122=>array(84,-76,907,842),51123=>array(84,-44,921,842),51124=>array(84,-62,917,842),51125=>array(84,-64,907,842),51126=>array(84,-64,908,842),51127=>array(84,-64,908,842),51128=>array(84,-69,923,842),51129=>array(84,-64,908,842),51130=>array(84,-64,908,842),51131=>array(84,-76,907,842),51132=>array(84,-62,907,842),51133=>array(84,-61,907,842),51134=>array(84,-69,922,842),51135=>array(84,-74,929,842),51136=>array(84,-69,927,842),51137=>array(84,-68,911,842),51138=>array(84,-72,929,842),51139=>array(84,-70,936,842),51140=>array(84,-66,908,842),51141=>array(84,-59,916,842),51142=>array(84,-60,928,842),51143=>array(84,-68,908,842),51144=>array(73,-68,935,843),51145=>array(83,-59,936,842),51146=>array(83,-61,936,842),51147=>array(83,-71,936,842),51148=>array(71,-45,936,842),51149=>array(83,-69,936,842),51150=>array(83,-76,936,842),51151=>array(83,-44,936,842),51152=>array(83,-62,936,842),51153=>array(83,-64,936,842),51154=>array(83,-64,936,842),51155=>array(83,-64,936,842),51156=>array(83,-70,936,842),51157=>array(83,-64,936,842),51158=>array(83,-64,936,842),51159=>array(83,-76,936,842),51160=>array(83,-62,936,842),51161=>array(83,-61,936,842),51162=>array(83,-70,936,842),51163=>array(83,-74,936,842),51164=>array(83,-69,936,842),51165=>array(83,-67,936,842),51166=>array(83,-72,936,842),51167=>array(83,-71,936,842),51168=>array(83,-66,936,842),51169=>array(83,-59,936,842),51170=>array(83,-60,936,842),51171=>array(83,-69,936,842),51172=>array(50,-69,907,842),51173=>array(84,-61,907,842),51174=>array(84,-61,907,842),51175=>array(84,-71,931,842),51176=>array(76,-46,907,842),51177=>array(84,-68,912,842),51178=>array(84,-76,907,842),51179=>array(84,-44,921,842),51180=>array(84,-62,917,842),51181=>array(84,-64,907,842),51182=>array(84,-64,908,842),51183=>array(84,-64,908,842),51184=>array(84,-69,923,842),51185=>array(84,-64,908,842),51186=>array(84,-64,908,842),51187=>array(84,-76,907,842),51188=>array(84,-62,907,842),51189=>array(84,-61,907,842),51190=>array(84,-69,922,842),51191=>array(84,-74,929,842),51192=>array(84,-69,927,842),51193=>array(84,-68,911,842),51194=>array(84,-72,929,842),51195=>array(84,-70,936,842),51196=>array(84,-66,908,842),51197=>array(84,-59,916,842),51198=>array(84,-60,928,842),51199=>array(84,-68,908,842),51200=>array(68,-70,907,841),51201=>array(83,-61,907,841),51202=>array(83,-61,907,841),51203=>array(83,-71,931,841),51204=>array(71,-46,907,841),51205=>array(83,-68,912,841),51206=>array(83,-76,907,841),51207=>array(83,-44,921,841),51208=>array(83,-62,917,841),51209=>array(83,-64,907,841),51210=>array(83,-64,908,841),51211=>array(83,-64,908,841),51212=>array(83,-69,923,841),51213=>array(83,-64,908,841),51214=>array(83,-64,908,841),51215=>array(83,-76,906,841),51216=>array(83,-62,907,841),51217=>array(83,-61,907,841),51218=>array(83,-69,922,841),51219=>array(83,-74,929,841),51220=>array(83,-69,927,841),51221=>array(83,-68,911,841),51222=>array(83,-72,929,841),51223=>array(83,-70,936,841),51224=>array(83,-66,908,841),51225=>array(83,-59,916,841),51226=>array(83,-60,928,841),51227=>array(83,-68,908,841),51228=>array(50,-69,907,842),51229=>array(64,-61,907,843),51230=>array(64,-61,907,843),51231=>array(64,-71,931,843),51232=>array(56,-46,907,843),51233=>array(64,-68,912,843),51234=>array(64,-76,907,843),51235=>array(64,-44,921,843),51236=>array(64,-62,917,843),51237=>array(64,-64,907,843),51238=>array(64,-64,908,843),51239=>array(64,-64,908,843),51240=>array(64,-69,923,843),51241=>array(64,-64,908,843),51242=>array(64,-64,908,843),51243=>array(64,-76,907,843),51244=>array(64,-62,907,843),51245=>array(64,-61,907,843),51246=>array(64,-69,922,843),51247=>array(64,-74,929,843),51248=>array(64,-69,927,843),51249=>array(64,-68,911,843),51250=>array(64,-72,929,843),51251=>array(64,-70,936,843),51252=>array(64,-66,908,843),51253=>array(64,-59,916,843),51254=>array(64,-60,928,843),51255=>array(64,-68,908,843),51256=>array(58,-70,907,842),51257=>array(63,-61,908,842),51258=>array(63,-61,908,842),51259=>array(63,-71,931,842),51260=>array(70,-46,907,842),51261=>array(63,-68,912,842),51262=>array(63,-76,908,842),51263=>array(63,-44,921,842),51264=>array(63,-62,917,842),51265=>array(63,-64,908,842),51266=>array(63,-64,908,842),51267=>array(63,-64,908,842),51268=>array(63,-69,923,842),51269=>array(63,-64,908,842),51270=>array(63,-64,908,842),51271=>array(63,-76,908,842),51272=>array(63,-62,908,842),51273=>array(63,-61,908,842),51274=>array(63,-69,922,842),51275=>array(63,-74,929,842),51276=>array(63,-69,927,842),51277=>array(63,-68,911,842),51278=>array(63,-72,929,842),51279=>array(63,-70,936,842),51280=>array(63,-66,908,842),51281=>array(63,-59,916,842),51282=>array(63,-60,928,842),51283=>array(63,-68,908,842),51284=>array(38,-69,908,842),51285=>array(62,-61,907,843),51286=>array(62,-61,907,843),51287=>array(62,-71,931,843),51288=>array(53,-46,907,843),51289=>array(62,-68,912,843),51290=>array(62,-76,907,843),51291=>array(62,-44,921,843),51292=>array(62,-62,917,843),51293=>array(62,-64,907,843),51294=>array(62,-64,908,843),51295=>array(62,-64,908,843),51296=>array(62,-69,923,843),51297=>array(62,-64,908,843),51298=>array(62,-64,908,843),51299=>array(62,-76,907,843),51300=>array(62,-62,907,843),51301=>array(62,-61,907,843),51302=>array(62,-69,922,843),51303=>array(62,-74,929,843),51304=>array(62,-69,927,843),51305=>array(62,-68,911,843),51306=>array(62,-72,929,843),51307=>array(62,-70,936,843),51308=>array(62,-66,908,843),51309=>array(62,-59,916,843),51310=>array(62,-60,928,843),51311=>array(62,-68,908,843),51312=>array(62,22,943,742),51313=>array(79,-61,921,798),51314=>array(79,-61,921,798),51315=>array(79,-71,921,798),51316=>array(79,-46,921,798),51317=>array(79,-68,921,798),51318=>array(79,-74,921,798),51319=>array(79,-44,921,798),51320=>array(79,-62,921,798),51321=>array(79,-64,921,798),51322=>array(79,-64,921,798),51323=>array(79,-63,921,798),51324=>array(79,-68,921,798),51325=>array(79,-64,921,798),51326=>array(79,-63,921,798),51327=>array(79,-74,921,798),51328=>array(79,-62,921,798),51329=>array(79,-61,921,798),51330=>array(79,-69,921,798),51331=>array(79,-74,921,798),51332=>array(79,-69,921,798),51333=>array(79,-68,921,798),51334=>array(79,-72,921,798),51335=>array(79,-70,921,798),51336=>array(79,-66,921,798),51337=>array(79,-59,921,798),51338=>array(79,-60,921,798),51339=>array(79,-68,921,798),51340=>array(64,-69,936,842),51341=>array(77,-59,936,842),51342=>array(77,-61,936,842),51343=>array(77,-71,936,842),51344=>array(72,-45,936,842),51345=>array(77,-69,936,842),51346=>array(77,-76,936,842),51347=>array(77,-44,936,842),51348=>array(77,-62,936,842),51349=>array(77,-64,936,842),51350=>array(77,-64,936,842),51351=>array(77,-64,936,842),51352=>array(77,-70,936,842),51353=>array(77,-64,936,842),51354=>array(77,-64,936,842),51355=>array(77,-76,936,842),51356=>array(77,-62,936,842),51357=>array(77,-61,936,842),51358=>array(77,-70,936,842),51359=>array(77,-74,936,842),51360=>array(77,-69,936,842),51361=>array(77,-67,936,842),51362=>array(77,-72,936,842),51363=>array(77,-71,936,842),51364=>array(77,-66,936,842),51365=>array(77,-59,936,842),51366=>array(77,-60,936,842),51367=>array(77,-69,936,842),51368=>array(49,-69,907,842),51369=>array(77,-61,907,842),51370=>array(77,-61,907,842),51371=>array(77,-71,931,842),51372=>array(72,-46,907,842),51373=>array(77,-68,912,842),51374=>array(77,-76,907,842),51375=>array(77,-44,921,842),51376=>array(77,-62,917,842),51377=>array(77,-64,907,842),51378=>array(77,-64,908,842),51379=>array(77,-64,908,842),51380=>array(77,-69,923,842),51381=>array(77,-64,908,842),51382=>array(77,-64,908,842),51383=>array(77,-76,907,842),51384=>array(77,-62,907,842),51385=>array(77,-61,907,842),51386=>array(77,-69,922,842),51387=>array(77,-74,929,842),51388=>array(77,-69,927,842),51389=>array(77,-68,911,842),51390=>array(77,-72,929,842),51391=>array(77,-70,936,842),51392=>array(77,-66,908,842),51393=>array(77,-59,916,842),51394=>array(77,-60,928,842),51395=>array(77,-68,908,842),51396=>array(52,-69,907,842),51397=>array(65,-61,907,842),51398=>array(65,-61,907,842),51399=>array(65,-71,931,842),51400=>array(65,-46,907,842),51401=>array(65,-68,912,842),51402=>array(65,-76,907,842),51403=>array(65,-44,921,842),51404=>array(65,-62,917,842),51405=>array(65,-64,907,842),51406=>array(65,-64,908,842),51407=>array(65,-64,908,842),51408=>array(65,-69,923,842),51409=>array(65,-64,908,842),51410=>array(65,-64,908,842),51411=>array(65,-76,907,842),51412=>array(65,-62,907,842),51413=>array(65,-61,907,842),51414=>array(65,-69,922,842),51415=>array(65,-74,929,842),51416=>array(65,-69,927,842),51417=>array(65,-68,911,842),51418=>array(65,-72,929,842),51419=>array(65,-70,936,842),51420=>array(65,-66,908,842),51421=>array(65,-59,916,842),51422=>array(65,-60,928,842),51423=>array(65,-68,908,842),51424=>array(62,22,938,742),51425=>array(79,-61,922,798),51426=>array(79,-61,922,798),51427=>array(79,-71,922,798),51428=>array(79,-46,922,798),51429=>array(79,-68,922,798),51430=>array(79,-74,922,798),51431=>array(79,-44,922,798),51432=>array(79,-62,922,798),51433=>array(79,-64,922,798),51434=>array(79,-64,922,798),51435=>array(79,-63,922,798),51436=>array(79,-68,922,798),51437=>array(79,-64,922,798),51438=>array(79,-63,922,798),51439=>array(79,-74,922,798),51440=>array(79,-62,922,798),51441=>array(79,-61,922,798),51442=>array(79,-69,922,798),51443=>array(79,-74,922,798),51444=>array(79,-69,922,798),51445=>array(79,-68,922,798),51446=>array(79,-72,922,798),51447=>array(79,-70,922,798),51448=>array(79,-66,922,798),51449=>array(79,-59,922,798),51450=>array(79,-60,922,798),51451=>array(79,-68,922,798),51452=>array(79,-64,921,798),51453=>array(79,-61,921,798),51454=>array(79,-61,921,798),51455=>array(79,-71,921,798),51456=>array(79,-46,921,798),51457=>array(79,-68,921,798),51458=>array(79,-74,921,798),51459=>array(79,-44,921,798),51460=>array(79,-62,921,798),51461=>array(79,-64,921,798),51462=>array(79,-64,921,798),51463=>array(79,-63,921,798),51464=>array(79,-68,921,798),51465=>array(79,-64,921,798),51466=>array(79,-63,921,798),51467=>array(79,-74,921,798),51468=>array(79,-62,921,798),51469=>array(79,-61,921,798),51470=>array(79,-69,921,798),51471=>array(79,-74,921,798),51472=>array(79,-69,921,798),51473=>array(79,-68,921,798),51474=>array(79,-72,921,798),51475=>array(79,-70,921,798),51476=>array(79,-66,921,798),51477=>array(79,-59,921,798),51478=>array(79,-60,921,798),51479=>array(79,-68,921,798),51480=>array(70,-70,907,841),51481=>array(73,-61,910,841),51482=>array(73,-61,910,841),51483=>array(73,-71,931,841),51484=>array(76,-46,909,840),51485=>array(73,-68,912,841),51486=>array(73,-76,910,841),51487=>array(73,-44,921,841),51488=>array(73,-62,917,841),51489=>array(73,-64,910,841),51490=>array(73,-64,910,841),51491=>array(73,-64,910,841),51492=>array(73,-69,923,841),51493=>array(73,-64,910,841),51494=>array(73,-64,910,841),51495=>array(73,-76,910,841),51496=>array(73,-62,910,841),51497=>array(73,-61,910,841),51498=>array(73,-69,922,841),51499=>array(73,-74,929,841),51500=>array(73,-69,927,841),51501=>array(73,-68,911,841),51502=>array(73,-72,929,841),51503=>array(73,-70,936,841),51504=>array(73,-66,910,841),51505=>array(73,-59,916,841),51506=>array(73,-60,928,841),51507=>array(73,-68,910,841),51508=>array(63,-68,907,843),51509=>array(70,-61,907,843),51510=>array(70,-61,907,843),51511=>array(70,-71,931,843),51512=>array(76,-46,907,843),51513=>array(70,-68,912,843),51514=>array(70,-76,907,843),51515=>array(70,-44,921,843),51516=>array(70,-62,917,843),51517=>array(70,-64,907,843),51518=>array(70,-64,908,843),51519=>array(70,-64,908,843),51520=>array(70,-69,923,843),51521=>array(70,-64,908,843),51522=>array(70,-64,908,843),51523=>array(70,-76,907,843),51524=>array(70,-62,907,843),51525=>array(70,-61,907,843),51526=>array(70,-69,922,843),51527=>array(70,-74,929,843),51528=>array(70,-69,927,843),51529=>array(70,-68,911,843),51530=>array(70,-72,929,843),51531=>array(70,-70,936,843),51532=>array(70,-66,908,843),51533=>array(70,-59,916,843),51534=>array(70,-60,928,843),51535=>array(70,-68,908,843),51536=>array(70,-69,907,842),51537=>array(76,-61,907,842),51538=>array(76,-61,907,842),51539=>array(76,-71,931,842),51540=>array(74,-46,907,842),51541=>array(76,-68,912,842),51542=>array(76,-76,907,842),51543=>array(76,-44,921,842),51544=>array(76,-62,917,842),51545=>array(76,-64,907,842),51546=>array(76,-64,908,842),51547=>array(76,-64,908,842),51548=>array(76,-69,923,842),51549=>array(76,-64,908,842),51550=>array(76,-64,908,842),51551=>array(76,-76,906,842),51552=>array(76,-62,907,842),51553=>array(76,-61,907,842),51554=>array(76,-69,922,842),51555=>array(76,-74,929,842),51556=>array(76,-69,927,842),51557=>array(76,-68,911,842),51558=>array(76,-72,929,842),51559=>array(76,-70,936,842),51560=>array(76,-66,908,842),51561=>array(76,-59,916,842),51562=>array(76,-60,928,842),51563=>array(76,-68,908,842),51564=>array(87,-64,928,798),51565=>array(79,-61,921,798),51566=>array(79,-61,921,798),51567=>array(79,-71,921,798),51568=>array(81,-46,922,798),51569=>array(79,-68,921,798),51570=>array(79,-74,921,798),51571=>array(79,-44,921,798),51572=>array(79,-62,921,798),51573=>array(79,-64,921,798),51574=>array(79,-64,921,798),51575=>array(79,-63,921,798),51576=>array(79,-68,921,798),51577=>array(79,-64,921,798),51578=>array(79,-63,921,798),51579=>array(79,-74,921,798),51580=>array(79,-62,921,798),51581=>array(79,-61,921,798),51582=>array(79,-69,921,798),51583=>array(79,-74,921,798),51584=>array(79,-69,921,798),51585=>array(79,-68,921,798),51586=>array(79,-72,921,798),51587=>array(79,-70,921,798),51588=>array(79,-66,921,798),51589=>array(79,-59,921,798),51590=>array(79,-60,921,798),51591=>array(79,-68,921,798),51592=>array(57,52,943,717),51593=>array(79,-61,922,798),51594=>array(79,-61,922,798),51595=>array(79,-71,922,798),51596=>array(79,-46,922,798),51597=>array(79,-68,922,798),51598=>array(79,-74,922,798),51599=>array(79,-44,922,798),51600=>array(79,-62,922,798),51601=>array(79,-64,922,798),51602=>array(79,-64,922,798),51603=>array(79,-63,922,798),51604=>array(79,-68,922,798),51605=>array(79,-64,922,798),51606=>array(79,-63,922,798),51607=>array(79,-74,922,798),51608=>array(79,-62,922,798),51609=>array(79,-61,922,798),51610=>array(79,-69,922,798),51611=>array(79,-74,922,798),51612=>array(79,-69,922,798),51613=>array(79,-68,922,798),51614=>array(79,-72,922,798),51615=>array(79,-70,922,798),51616=>array(79,-66,922,798),51617=>array(79,-59,922,798),51618=>array(79,-60,922,798),51619=>array(79,-68,922,798),51620=>array(78,-69,907,842),51621=>array(65,-61,907,842),51622=>array(65,-61,907,842),51623=>array(65,-71,931,842),51624=>array(65,-46,907,842),51625=>array(65,-68,912,842),51626=>array(65,-76,907,842),51627=>array(65,-44,921,842),51628=>array(65,-62,917,842),51629=>array(65,-64,907,842),51630=>array(65,-64,908,842),51631=>array(65,-64,908,842),51632=>array(65,-69,923,842),51633=>array(65,-64,908,842),51634=>array(65,-64,908,842),51635=>array(65,-76,907,842),51636=>array(65,-62,907,842),51637=>array(65,-61,907,842),51638=>array(65,-69,922,842),51639=>array(65,-74,929,842),51640=>array(65,-69,927,842),51641=>array(65,-68,911,842),51642=>array(65,-72,929,842),51643=>array(65,-70,936,842),51644=>array(65,-66,908,842),51645=>array(65,-59,916,842),51646=>array(65,-60,928,842),51647=>array(65,-68,908,842),51648=>array(116,-69,907,842),51649=>array(123,-61,907,842),51650=>array(123,-61,907,842),51651=>array(123,-71,931,842),51652=>array(105,-46,907,842),51653=>array(123,-68,912,842),51654=>array(123,-76,907,842),51655=>array(123,-44,921,842),51656=>array(123,-62,917,842),51657=>array(123,-64,907,842),51658=>array(123,-64,908,842),51659=>array(123,-64,908,842),51660=>array(123,-69,923,842),51661=>array(123,-64,908,842),51662=>array(123,-64,908,842),51663=>array(123,-76,907,842),51664=>array(123,-62,907,842),51665=>array(123,-61,907,842),51666=>array(123,-69,922,842),51667=>array(123,-74,929,842),51668=>array(123,-69,927,842),51669=>array(123,-68,911,842),51670=>array(123,-72,929,842),51671=>array(123,-70,936,842),51672=>array(123,-66,908,842),51673=>array(123,-59,916,842),51674=>array(123,-60,928,842),51675=>array(123,-68,908,842),51676=>array(36,-69,935,842),51677=>array(59,-59,936,842),51678=>array(59,-61,936,842),51679=>array(59,-71,936,842),51680=>array(50,-45,936,842),51681=>array(59,-69,936,842),51682=>array(59,-76,936,842),51683=>array(59,-44,936,842),51684=>array(59,-62,936,842),51685=>array(59,-64,936,842),51686=>array(59,-64,936,842),51687=>array(59,-64,936,842),51688=>array(59,-70,936,842),51689=>array(59,-64,936,842),51690=>array(59,-64,936,842),51691=>array(59,-76,936,842),51692=>array(59,-62,936,842),51693=>array(59,-61,936,842),51694=>array(59,-70,936,842),51695=>array(59,-74,936,842),51696=>array(59,-69,936,842),51697=>array(59,-67,936,842),51698=>array(59,-72,936,842),51699=>array(59,-71,936,842),51700=>array(59,-66,936,842),51701=>array(59,-59,936,842),51702=>array(59,-60,936,842),51703=>array(59,-69,936,842),51704=>array(33,-69,907,842),51705=>array(44,-61,907,842),51706=>array(44,-61,907,842),51707=>array(44,-71,931,842),51708=>array(52,-46,907,842),51709=>array(44,-68,912,842),51710=>array(44,-76,907,842),51711=>array(44,-44,921,842),51712=>array(44,-62,917,842),51713=>array(44,-64,907,842),51714=>array(44,-64,908,842),51715=>array(44,-64,908,842),51716=>array(44,-69,923,842),51717=>array(44,-64,908,842),51718=>array(44,-64,908,842),51719=>array(44,-76,907,842),51720=>array(44,-62,907,842),51721=>array(44,-61,907,842),51722=>array(44,-69,922,842),51723=>array(44,-74,929,842),51724=>array(44,-69,927,842),51725=>array(44,-68,911,842),51726=>array(44,-72,929,842),51727=>array(44,-70,936,842),51728=>array(44,-66,908,842),51729=>array(44,-59,916,842),51730=>array(44,-60,928,842),51731=>array(44,-68,908,842),51732=>array(36,-68,935,843),51733=>array(59,-59,936,842),51734=>array(59,-61,936,842),51735=>array(59,-71,936,842),51736=>array(50,-45,936,842),51737=>array(59,-69,936,842),51738=>array(59,-76,936,842),51739=>array(59,-44,936,842),51740=>array(59,-62,936,842),51741=>array(59,-64,936,842),51742=>array(59,-64,936,842),51743=>array(59,-64,936,842),51744=>array(59,-70,936,842),51745=>array(59,-64,936,842),51746=>array(59,-64,936,842),51747=>array(59,-76,936,842),51748=>array(59,-62,936,842),51749=>array(59,-61,936,842),51750=>array(59,-70,936,842),51751=>array(59,-74,936,842),51752=>array(59,-69,936,842),51753=>array(59,-67,936,842),51754=>array(59,-72,936,842),51755=>array(59,-71,936,842),51756=>array(59,-66,936,842),51757=>array(59,-59,936,842),51758=>array(59,-60,936,842),51759=>array(59,-69,936,842),51760=>array(33,-69,907,842),51761=>array(44,-61,907,842),51762=>array(44,-61,907,842),51763=>array(44,-71,931,842),51764=>array(52,-46,907,842),51765=>array(44,-68,912,842),51766=>array(44,-76,907,842),51767=>array(44,-44,921,842),51768=>array(44,-62,917,842),51769=>array(44,-64,907,842),51770=>array(44,-64,908,842),51771=>array(44,-64,908,842),51772=>array(44,-69,923,842),51773=>array(44,-64,908,842),51774=>array(44,-64,908,842),51775=>array(44,-76,907,842),51776=>array(44,-62,907,842),51777=>array(44,-61,907,842),51778=>array(44,-69,922,842),51779=>array(44,-74,929,842),51780=>array(44,-69,927,842),51781=>array(44,-68,911,842),51782=>array(44,-72,929,842),51783=>array(44,-70,936,842),51784=>array(44,-66,908,842),51785=>array(44,-59,916,842),51786=>array(44,-60,928,842),51787=>array(44,-68,908,842),51788=>array(41,-70,907,841),51789=>array(64,-61,907,841),51790=>array(64,-61,907,841),51791=>array(64,-71,931,841),51792=>array(55,-46,907,841),51793=>array(64,-68,912,841),51794=>array(64,-76,907,841),51795=>array(64,-44,921,841),51796=>array(64,-62,917,841),51797=>array(64,-64,907,841),51798=>array(64,-64,908,841),51799=>array(64,-64,908,841),51800=>array(64,-69,923,841),51801=>array(64,-64,908,841),51802=>array(64,-64,908,841),51803=>array(64,-76,906,841),51804=>array(64,-62,907,841),51805=>array(64,-61,907,841),51806=>array(64,-69,922,841),51807=>array(64,-74,929,841),51808=>array(64,-69,927,841),51809=>array(64,-68,911,841),51810=>array(64,-72,929,841),51811=>array(64,-70,936,841),51812=>array(64,-66,908,841),51813=>array(64,-59,916,841),51814=>array(64,-60,928,841),51815=>array(64,-68,908,841),51816=>array(33,-68,907,843),51817=>array(44,-61,907,843),51818=>array(44,-61,907,843),51819=>array(44,-71,931,843),51820=>array(52,-46,907,843),51821=>array(44,-68,912,843),51822=>array(44,-76,907,843),51823=>array(44,-44,921,843),51824=>array(44,-62,917,843),51825=>array(44,-64,907,843),51826=>array(44,-64,908,843),51827=>array(44,-64,908,843),51828=>array(44,-69,923,843),51829=>array(44,-64,908,843),51830=>array(44,-64,908,843),51831=>array(44,-76,907,843),51832=>array(44,-62,907,843),51833=>array(44,-61,907,843),51834=>array(44,-69,922,843),51835=>array(44,-74,929,843),51836=>array(44,-69,927,843),51837=>array(44,-68,911,843),51838=>array(44,-72,929,843),51839=>array(44,-70,936,843),51840=>array(44,-66,908,843),51841=>array(44,-59,916,843),51842=>array(44,-60,928,843),51843=>array(44,-68,908,843),51844=>array(36,-70,907,842),51845=>array(54,-61,908,842),51846=>array(54,-61,908,842),51847=>array(54,-71,931,842),51848=>array(55,-46,907,842),51849=>array(54,-68,912,842),51850=>array(54,-76,908,842),51851=>array(54,-44,921,842),51852=>array(54,-62,917,842),51853=>array(54,-64,908,842),51854=>array(54,-64,908,842),51855=>array(54,-64,908,842),51856=>array(54,-69,923,842),51857=>array(54,-64,908,842),51858=>array(54,-64,908,842),51859=>array(54,-76,908,842),51860=>array(54,-62,908,842),51861=>array(54,-61,908,842),51862=>array(54,-69,922,842),51863=>array(54,-74,929,842),51864=>array(54,-69,927,842),51865=>array(54,-68,911,842),51866=>array(54,-72,929,842),51867=>array(54,-70,936,842),51868=>array(54,-66,908,842),51869=>array(54,-59,916,842),51870=>array(54,-60,928,842),51871=>array(54,-68,908,842),51872=>array(33,-68,907,843),51873=>array(49,-61,907,843),51874=>array(49,-61,907,843),51875=>array(49,-71,931,843),51876=>array(47,-46,907,843),51877=>array(49,-68,912,843),51878=>array(49,-76,907,843),51879=>array(49,-44,921,843),51880=>array(49,-62,917,843),51881=>array(49,-64,907,843),51882=>array(49,-64,908,843),51883=>array(49,-64,908,843),51884=>array(49,-69,923,843),51885=>array(49,-64,908,843),51886=>array(49,-64,908,843),51887=>array(49,-76,907,843),51888=>array(49,-62,907,843),51889=>array(49,-61,907,843),51890=>array(49,-69,922,843),51891=>array(49,-74,929,843),51892=>array(49,-69,927,843),51893=>array(49,-68,911,843),51894=>array(49,-72,929,843),51895=>array(49,-70,936,843),51896=>array(49,-66,908,843),51897=>array(49,-59,916,843),51898=>array(49,-60,928,843),51899=>array(49,-68,908,843),51900=>array(55,22,943,755),51901=>array(79,-61,921,786),51902=>array(79,-61,921,786),51903=>array(79,-71,921,786),51904=>array(79,-46,922,786),51905=>array(79,-68,921,786),51906=>array(79,-74,921,786),51907=>array(79,-44,921,786),51908=>array(79,-62,921,786),51909=>array(79,-64,921,786),51910=>array(79,-64,921,786),51911=>array(79,-63,921,786),51912=>array(79,-68,921,786),51913=>array(79,-64,921,786),51914=>array(79,-63,921,786),51915=>array(79,-74,921,786),51916=>array(79,-62,921,786),51917=>array(79,-61,921,786),51918=>array(79,-69,921,786),51919=>array(79,-74,921,786),51920=>array(79,-69,921,786),51921=>array(79,-68,921,786),51922=>array(79,-72,921,786),51923=>array(79,-70,921,786),51924=>array(79,-66,921,786),51925=>array(79,-59,921,786),51926=>array(79,-60,921,786),51927=>array(79,-68,921,786),51928=>array(50,-69,936,842),51929=>array(65,-59,936,842),51930=>array(65,-61,936,842),51931=>array(65,-71,936,842),51932=>array(72,-45,936,842),51933=>array(65,-69,936,842),51934=>array(65,-76,936,842),51935=>array(65,-44,936,842),51936=>array(65,-62,936,842),51937=>array(65,-64,936,842),51938=>array(65,-64,936,842),51939=>array(65,-64,936,842),51940=>array(65,-70,936,842),51941=>array(65,-64,936,842),51942=>array(65,-64,936,842),51943=>array(65,-76,936,842),51944=>array(65,-62,936,842),51945=>array(65,-61,936,842),51946=>array(65,-70,936,842),51947=>array(65,-74,936,842),51948=>array(65,-69,936,842),51949=>array(65,-67,936,842),51950=>array(65,-72,936,842),51951=>array(65,-71,936,842),51952=>array(65,-66,936,842),51953=>array(65,-59,936,842),51954=>array(65,-60,936,842),51955=>array(65,-69,936,842),51956=>array(50,-69,907,842),51957=>array(71,-61,907,842),51958=>array(71,-61,907,842),51959=>array(71,-71,931,842),51960=>array(66,-46,907,842),51961=>array(71,-68,912,842),51962=>array(71,-76,907,842),51963=>array(71,-44,921,842),51964=>array(71,-62,917,842),51965=>array(71,-64,907,842),51966=>array(71,-64,908,842),51967=>array(71,-64,908,842),51968=>array(71,-69,923,842),51969=>array(71,-64,908,842),51970=>array(71,-64,908,842),51971=>array(71,-76,907,842),51972=>array(71,-62,907,842),51973=>array(71,-61,907,842),51974=>array(71,-69,922,842),51975=>array(71,-74,929,842),51976=>array(71,-69,927,842),51977=>array(71,-68,911,842),51978=>array(71,-72,929,842),51979=>array(71,-70,936,842),51980=>array(71,-66,908,842),51981=>array(71,-59,916,842),51982=>array(71,-60,928,842),51983=>array(71,-68,908,842),51984=>array(66,-69,907,842),51985=>array(65,-61,907,842),51986=>array(65,-61,907,842),51987=>array(65,-71,931,842),51988=>array(65,-46,907,842),51989=>array(65,-68,912,842),51990=>array(65,-76,907,842),51991=>array(65,-44,921,842),51992=>array(65,-62,917,842),51993=>array(65,-64,907,842),51994=>array(65,-64,908,842),51995=>array(65,-64,908,842),51996=>array(65,-69,923,842),51997=>array(65,-64,908,842),51998=>array(65,-64,908,842),51999=>array(65,-76,907,842),52000=>array(65,-62,907,842),52001=>array(65,-61,907,842),52002=>array(65,-69,922,842),52003=>array(65,-74,929,842),52004=>array(65,-69,927,842),52005=>array(65,-68,911,842),52006=>array(65,-72,929,842),52007=>array(65,-70,936,842),52008=>array(65,-66,908,842),52009=>array(65,-59,916,842),52010=>array(65,-60,928,842),52011=>array(65,-68,908,842),52012=>array(62,22,943,756),52013=>array(79,-61,922,786),52014=>array(79,-61,922,786),52015=>array(79,-71,922,786),52016=>array(79,-46,922,786),52017=>array(79,-68,922,786),52018=>array(79,-74,922,786),52019=>array(79,-44,922,786),52020=>array(79,-62,922,786),52021=>array(79,-64,922,786),52022=>array(79,-64,922,786),52023=>array(79,-63,922,786),52024=>array(79,-68,922,786),52025=>array(79,-64,922,786),52026=>array(79,-63,922,786),52027=>array(79,-74,922,786),52028=>array(79,-62,922,786),52029=>array(79,-61,922,786),52030=>array(79,-69,922,786),52031=>array(79,-74,922,786),52032=>array(79,-69,922,786),52033=>array(79,-68,922,786),52034=>array(79,-72,922,786),52035=>array(79,-70,922,786),52036=>array(79,-66,922,786),52037=>array(79,-59,922,786),52038=>array(79,-60,922,786),52039=>array(79,-68,922,786),52040=>array(82,-64,924,811),52041=>array(79,-61,921,811),52042=>array(79,-61,921,811),52043=>array(79,-71,921,811),52044=>array(79,-46,921,811),52045=>array(79,-68,921,811),52046=>array(79,-74,921,811),52047=>array(79,-44,921,811),52048=>array(79,-62,921,811),52049=>array(79,-64,921,811),52050=>array(79,-64,921,811),52051=>array(79,-63,921,811),52052=>array(79,-68,921,811),52053=>array(79,-64,921,811),52054=>array(79,-63,921,811),52055=>array(79,-74,921,811),52056=>array(79,-62,921,811),52057=>array(79,-61,921,811),52058=>array(79,-69,921,811),52059=>array(79,-74,921,811),52060=>array(79,-69,921,811),52061=>array(79,-68,921,811),52062=>array(79,-72,921,811),52063=>array(79,-70,921,811),52064=>array(79,-66,921,811),52065=>array(79,-59,921,811),52066=>array(79,-60,921,811),52067=>array(79,-68,921,811),52068=>array(81,-70,907,841),52069=>array(74,-61,909,841),52070=>array(74,-61,909,841),52071=>array(74,-71,931,841),52072=>array(66,-46,909,842),52073=>array(74,-68,912,841),52074=>array(74,-76,909,841),52075=>array(74,-44,921,841),52076=>array(74,-62,917,841),52077=>array(74,-64,909,841),52078=>array(74,-64,909,841),52079=>array(74,-64,909,841),52080=>array(74,-69,923,841),52081=>array(74,-64,909,841),52082=>array(74,-64,909,841),52083=>array(74,-76,909,841),52084=>array(74,-62,909,841),52085=>array(74,-61,909,841),52086=>array(74,-69,922,841),52087=>array(74,-74,929,841),52088=>array(74,-69,927,841),52089=>array(74,-68,911,841),52090=>array(74,-72,929,841),52091=>array(74,-70,936,841),52092=>array(74,-66,909,841),52093=>array(74,-59,916,841),52094=>array(74,-60,928,841),52095=>array(74,-68,909,841),52096=>array(50,-68,907,843),52097=>array(68,-61,907,843),52098=>array(68,-61,907,843),52099=>array(68,-71,931,843),52100=>array(68,-46,907,843),52101=>array(68,-68,912,843),52102=>array(68,-76,907,843),52103=>array(68,-44,921,843),52104=>array(68,-62,917,843),52105=>array(68,-64,907,843),52106=>array(68,-64,908,843),52107=>array(68,-64,908,843),52108=>array(68,-69,923,843),52109=>array(68,-64,908,843),52110=>array(68,-64,908,843),52111=>array(68,-76,907,843),52112=>array(68,-62,907,843),52113=>array(68,-61,907,843),52114=>array(68,-69,922,843),52115=>array(68,-74,929,843),52116=>array(68,-69,927,843),52117=>array(68,-68,911,843),52118=>array(68,-72,929,843),52119=>array(68,-70,936,843),52120=>array(68,-66,908,843),52121=>array(68,-59,916,843),52122=>array(68,-60,928,843),52123=>array(68,-68,908,843),52124=>array(60,-69,907,842),52125=>array(65,-61,907,842),52126=>array(65,-61,907,842),52127=>array(65,-71,931,842),52128=>array(65,-46,907,842),52129=>array(65,-68,912,842),52130=>array(65,-76,907,842),52131=>array(65,-44,921,842),52132=>array(65,-62,917,842),52133=>array(65,-64,907,842),52134=>array(65,-64,908,842),52135=>array(65,-64,908,842),52136=>array(65,-69,923,842),52137=>array(65,-64,908,842),52138=>array(65,-64,908,842),52139=>array(65,-76,907,842),52140=>array(65,-62,907,842),52141=>array(65,-61,907,842),52142=>array(65,-69,922,842),52143=>array(65,-74,929,842),52144=>array(65,-69,927,842),52145=>array(65,-68,911,842),52146=>array(65,-72,929,842),52147=>array(65,-70,936,842),52148=>array(65,-66,908,842),52149=>array(65,-59,916,842),52150=>array(65,-60,928,842),52151=>array(65,-68,908,842),52152=>array(82,-64,924,811),52153=>array(79,-61,921,811),52154=>array(79,-61,921,811),52155=>array(79,-71,921,811),52156=>array(81,-46,922,811),52157=>array(79,-68,921,811),52158=>array(79,-74,921,811),52159=>array(79,-44,921,811),52160=>array(79,-62,921,811),52161=>array(79,-64,921,811),52162=>array(79,-64,921,811),52163=>array(79,-63,921,811),52164=>array(79,-68,921,811),52165=>array(79,-64,921,811),52166=>array(79,-63,921,811),52167=>array(79,-74,921,811),52168=>array(79,-62,921,811),52169=>array(79,-61,921,811),52170=>array(79,-69,921,811),52171=>array(79,-74,921,811),52172=>array(79,-69,921,811),52173=>array(79,-68,921,811),52174=>array(79,-72,921,811),52175=>array(79,-70,921,811),52176=>array(79,-66,921,811),52177=>array(79,-59,921,811),52178=>array(79,-60,921,811),52179=>array(79,-68,921,811),52180=>array(56,37,944,728),52181=>array(79,-61,922,786),52182=>array(79,-61,922,786),52183=>array(79,-71,922,786),52184=>array(79,-46,921,784),52185=>array(79,-68,922,786),52186=>array(79,-74,922,786),52187=>array(79,-44,922,786),52188=>array(79,-62,922,786),52189=>array(79,-64,922,786),52190=>array(79,-64,922,786),52191=>array(79,-63,922,786),52192=>array(79,-68,922,786),52193=>array(79,-64,922,786),52194=>array(79,-63,922,786),52195=>array(79,-74,922,786),52196=>array(79,-62,922,786),52197=>array(79,-61,922,786),52198=>array(79,-69,922,786),52199=>array(79,-74,922,786),52200=>array(79,-69,922,786),52201=>array(79,-68,922,786),52202=>array(79,-72,922,786),52203=>array(79,-70,922,786),52204=>array(79,-66,922,786),52205=>array(79,-59,922,786),52206=>array(79,-60,922,786),52207=>array(79,-68,922,786),52208=>array(63,-69,907,842),52209=>array(65,-61,907,842),52210=>array(65,-61,907,842),52211=>array(65,-71,931,842),52212=>array(65,-46,907,842),52213=>array(65,-68,912,842),52214=>array(65,-76,907,842),52215=>array(65,-44,921,842),52216=>array(65,-62,917,842),52217=>array(65,-64,907,842),52218=>array(65,-64,908,842),52219=>array(65,-64,908,842),52220=>array(65,-69,923,842),52221=>array(65,-64,908,842),52222=>array(65,-64,908,842),52223=>array(65,-76,907,842),52224=>array(65,-62,907,842),52225=>array(65,-61,907,842),52226=>array(65,-69,922,842),52227=>array(65,-74,929,842),52228=>array(65,-69,927,842),52229=>array(65,-68,911,842),52230=>array(65,-72,929,842),52231=>array(65,-70,936,842),52232=>array(65,-66,908,842),52233=>array(65,-59,916,842),52234=>array(65,-60,928,842),52235=>array(65,-68,908,842),52236=>array(76,-69,907,842),52237=>array(60,-61,907,842),52238=>array(60,-61,907,842),52239=>array(60,-71,931,842),52240=>array(57,-46,907,842),52241=>array(60,-68,912,842),52242=>array(60,-76,907,842),52243=>array(60,-44,921,842),52244=>array(60,-62,917,842),52245=>array(60,-64,907,842),52246=>array(60,-64,908,842),52247=>array(60,-64,908,842),52248=>array(60,-69,923,842),52249=>array(60,-64,908,842),52250=>array(60,-64,908,842),52251=>array(60,-76,907,842),52252=>array(60,-62,907,842),52253=>array(60,-61,907,842),52254=>array(60,-69,922,842),52255=>array(60,-74,929,842),52256=>array(60,-69,927,842),52257=>array(60,-68,911,842),52258=>array(60,-72,929,842),52259=>array(60,-70,936,842),52260=>array(60,-66,908,842),52261=>array(60,-59,916,842),52262=>array(60,-60,928,842),52263=>array(60,-68,908,842),52264=>array(86,-69,935,842),52265=>array(71,-59,936,842),52266=>array(71,-61,936,842),52267=>array(71,-71,936,842),52268=>array(64,-45,936,842),52269=>array(71,-69,936,842),52270=>array(71,-76,936,842),52271=>array(71,-44,936,842),52272=>array(71,-62,936,842),52273=>array(71,-64,936,842),52274=>array(71,-64,936,842),52275=>array(71,-64,936,842),52276=>array(71,-70,936,842),52277=>array(71,-64,936,842),52278=>array(71,-64,936,842),52279=>array(71,-76,936,842),52280=>array(71,-62,936,842),52281=>array(71,-61,936,842),52282=>array(71,-70,936,842),52283=>array(71,-74,936,842),52284=>array(71,-69,936,842),52285=>array(71,-67,936,842),52286=>array(71,-72,936,842),52287=>array(71,-71,936,842),52288=>array(71,-66,936,842),52289=>array(71,-59,936,842),52290=>array(71,-60,936,842),52291=>array(71,-69,936,842),52292=>array(81,-69,907,842),52293=>array(69,-61,907,842),52294=>array(69,-61,907,842),52295=>array(69,-71,931,842),52296=>array(64,-46,907,842),52297=>array(69,-68,912,842),52298=>array(69,-76,907,842),52299=>array(69,-44,921,842),52300=>array(69,-62,917,842),52301=>array(69,-64,907,842),52302=>array(69,-64,908,842),52303=>array(69,-64,908,842),52304=>array(69,-69,923,842),52305=>array(69,-64,908,842),52306=>array(69,-64,908,842),52307=>array(69,-76,907,842),52308=>array(69,-62,907,842),52309=>array(69,-61,907,842),52310=>array(69,-69,922,842),52311=>array(69,-74,929,842),52312=>array(69,-69,927,842),52313=>array(69,-68,911,842),52314=>array(69,-72,929,842),52315=>array(69,-70,936,842),52316=>array(69,-66,908,842),52317=>array(69,-59,916,842),52318=>array(69,-60,928,842),52319=>array(69,-68,908,842),52320=>array(86,-68,935,843),52321=>array(74,-59,936,842),52322=>array(74,-61,936,842),52323=>array(74,-71,936,842),52324=>array(64,-45,936,842),52325=>array(74,-69,936,842),52326=>array(74,-76,936,842),52327=>array(74,-44,936,842),52328=>array(74,-62,936,842),52329=>array(74,-64,936,842),52330=>array(74,-64,936,842),52331=>array(74,-64,936,842),52332=>array(74,-70,936,842),52333=>array(74,-64,936,842),52334=>array(74,-64,936,842),52335=>array(74,-76,936,842),52336=>array(74,-62,936,842),52337=>array(74,-61,936,842),52338=>array(74,-70,936,842),52339=>array(74,-74,936,842),52340=>array(74,-69,936,842),52341=>array(74,-67,936,842),52342=>array(74,-72,936,842),52343=>array(74,-71,936,842),52344=>array(74,-66,936,842),52345=>array(74,-59,936,842),52346=>array(74,-60,936,842),52347=>array(74,-69,936,842),52348=>array(81,-69,907,842),52349=>array(71,-61,907,842),52350=>array(71,-61,907,842),52351=>array(71,-71,931,842),52352=>array(64,-46,907,842),52353=>array(71,-68,912,842),52354=>array(71,-76,907,842),52355=>array(71,-44,921,842),52356=>array(71,-62,917,842),52357=>array(71,-64,907,842),52358=>array(71,-64,908,842),52359=>array(71,-64,908,842),52360=>array(71,-69,923,842),52361=>array(71,-64,908,842),52362=>array(71,-64,908,842),52363=>array(71,-76,907,842),52364=>array(71,-62,907,842),52365=>array(71,-61,907,842),52366=>array(71,-69,922,842),52367=>array(71,-74,929,842),52368=>array(71,-69,927,842),52369=>array(71,-68,911,842),52370=>array(71,-72,929,842),52371=>array(71,-70,936,842),52372=>array(71,-66,908,842),52373=>array(71,-59,916,842),52374=>array(71,-60,928,842),52375=>array(71,-68,908,842),52376=>array(86,-70,907,841),52377=>array(68,-61,907,842),52378=>array(68,-61,907,842),52379=>array(68,-71,931,842),52380=>array(66,-46,907,841),52381=>array(68,-68,912,842),52382=>array(68,-76,907,842),52383=>array(68,-44,921,842),52384=>array(68,-62,917,842),52385=>array(68,-64,907,842),52386=>array(68,-64,908,842),52387=>array(68,-64,908,842),52388=>array(68,-69,923,842),52389=>array(68,-64,908,842),52390=>array(68,-64,908,842),52391=>array(68,-76,906,842),52392=>array(68,-62,907,842),52393=>array(68,-61,907,842),52394=>array(68,-69,922,842),52395=>array(68,-74,929,842),52396=>array(68,-69,927,842),52397=>array(68,-68,911,842),52398=>array(68,-72,929,842),52399=>array(68,-70,936,842),52400=>array(68,-66,908,842),52401=>array(68,-59,916,842),52402=>array(68,-60,928,842),52403=>array(68,-68,908,842),52404=>array(71,-68,907,843),52405=>array(65,-61,907,843),52406=>array(65,-61,907,843),52407=>array(65,-71,931,843),52408=>array(66,-46,907,843),52409=>array(65,-68,912,843),52410=>array(65,-76,907,843),52411=>array(65,-44,921,843),52412=>array(65,-62,917,843),52413=>array(65,-64,907,843),52414=>array(65,-64,908,843),52415=>array(65,-64,908,843),52416=>array(65,-69,923,843),52417=>array(65,-64,908,843),52418=>array(65,-64,908,843),52419=>array(65,-76,907,843),52420=>array(65,-62,907,843),52421=>array(65,-61,907,843),52422=>array(65,-69,922,843),52423=>array(65,-74,929,843),52424=>array(65,-69,927,843),52425=>array(65,-68,911,843),52426=>array(65,-72,929,843),52427=>array(65,-70,936,843),52428=>array(65,-66,908,843),52429=>array(65,-59,916,843),52430=>array(65,-60,928,843),52431=>array(65,-68,908,843),52432=>array(86,-70,907,842),52433=>array(65,-61,907,842),52434=>array(65,-61,907,842),52435=>array(65,-71,931,842),52436=>array(62,-46,907,842),52437=>array(65,-68,912,842),52438=>array(65,-76,907,842),52439=>array(65,-44,921,842),52440=>array(65,-62,917,842),52441=>array(65,-64,907,842),52442=>array(65,-64,908,842),52443=>array(65,-64,908,842),52444=>array(65,-69,923,842),52445=>array(65,-64,908,842),52446=>array(65,-64,908,842),52447=>array(65,-76,907,842),52448=>array(65,-62,907,842),52449=>array(65,-61,907,842),52450=>array(65,-69,922,842),52451=>array(65,-74,929,842),52452=>array(65,-69,927,842),52453=>array(65,-68,911,842),52454=>array(65,-72,929,842),52455=>array(65,-70,936,842),52456=>array(65,-66,908,842),52457=>array(65,-59,916,842),52458=>array(65,-60,928,842),52459=>array(65,-68,908,842),52460=>array(71,-68,907,843),52461=>array(65,-61,907,843),52462=>array(65,-61,907,843),52463=>array(65,-71,931,843),52464=>array(65,-46,907,843),52465=>array(65,-68,912,843),52466=>array(65,-76,907,843),52467=>array(65,-44,921,843),52468=>array(65,-62,917,843),52469=>array(65,-64,907,843),52470=>array(65,-64,908,843),52471=>array(65,-64,908,843),52472=>array(65,-69,923,843),52473=>array(65,-64,908,843),52474=>array(65,-64,908,843),52475=>array(65,-76,907,843),52476=>array(65,-62,907,843),52477=>array(65,-61,907,843),52478=>array(65,-69,922,843),52479=>array(65,-74,929,843),52480=>array(65,-69,927,843),52481=>array(65,-68,911,843),52482=>array(65,-72,929,843),52483=>array(65,-70,936,843),52484=>array(65,-66,908,843),52485=>array(65,-59,916,843),52486=>array(65,-60,928,843),52487=>array(65,-68,908,843),52488=>array(62,-3,943,777),52489=>array(79,-61,921,802),52490=>array(79,-61,921,802),52491=>array(79,-71,921,802),52492=>array(79,-46,921,792),52493=>array(79,-68,921,802),52494=>array(79,-74,921,802),52495=>array(79,-44,921,802),52496=>array(79,-62,921,802),52497=>array(79,-64,921,802),52498=>array(79,-64,921,802),52499=>array(79,-63,921,802),52500=>array(79,-68,921,802),52501=>array(79,-64,921,802),52502=>array(79,-63,921,802),52503=>array(79,-74,921,802),52504=>array(79,-62,921,802),52505=>array(79,-61,921,802),52506=>array(79,-69,921,802),52507=>array(79,-74,921,802),52508=>array(79,-69,921,802),52509=>array(79,-68,921,802),52510=>array(79,-72,921,802),52511=>array(79,-70,921,802),52512=>array(79,-66,921,802),52513=>array(79,-59,921,802),52514=>array(79,-60,921,802),52515=>array(79,-68,921,802),52516=>array(64,-69,936,842),52517=>array(77,-59,936,842),52518=>array(77,-61,936,842),52519=>array(77,-71,936,842),52520=>array(72,-45,936,842),52521=>array(77,-69,936,842),52522=>array(77,-76,936,842),52523=>array(77,-44,936,842),52524=>array(77,-62,936,842),52525=>array(77,-64,936,842),52526=>array(77,-64,936,842),52527=>array(77,-64,936,842),52528=>array(77,-70,936,842),52529=>array(77,-64,936,842),52530=>array(77,-64,936,842),52531=>array(77,-76,936,842),52532=>array(77,-62,936,842),52533=>array(77,-61,936,842),52534=>array(77,-70,936,842),52535=>array(77,-74,936,842),52536=>array(77,-69,936,842),52537=>array(77,-67,936,842),52538=>array(77,-72,936,842),52539=>array(77,-71,936,842),52540=>array(77,-66,936,842),52541=>array(77,-59,936,842),52542=>array(77,-60,936,842),52543=>array(77,-69,936,842),52544=>array(57,-69,907,842),52545=>array(72,-61,907,842),52546=>array(72,-61,907,842),52547=>array(72,-71,931,842),52548=>array(72,-46,907,842),52549=>array(72,-68,912,842),52550=>array(72,-76,907,842),52551=>array(72,-44,921,842),52552=>array(72,-62,917,842),52553=>array(72,-64,907,842),52554=>array(72,-64,908,842),52555=>array(72,-64,908,842),52556=>array(72,-69,923,842),52557=>array(72,-64,908,842),52558=>array(72,-64,908,842),52559=>array(72,-76,907,842),52560=>array(72,-62,907,842),52561=>array(72,-61,907,842),52562=>array(72,-69,922,842),52563=>array(72,-74,929,842),52564=>array(72,-69,927,842),52565=>array(72,-68,911,842),52566=>array(72,-72,929,842),52567=>array(72,-70,936,842),52568=>array(72,-66,908,842),52569=>array(72,-59,916,842),52570=>array(72,-60,928,842),52571=>array(72,-68,908,842),52572=>array(67,-69,907,842),52573=>array(65,-61,907,842),52574=>array(65,-61,907,842),52575=>array(65,-71,931,842),52576=>array(65,-46,907,842),52577=>array(65,-68,912,842),52578=>array(65,-76,907,842),52579=>array(65,-44,921,842),52580=>array(65,-62,917,842),52581=>array(65,-64,907,842),52582=>array(65,-64,908,842),52583=>array(65,-64,908,842),52584=>array(65,-69,923,842),52585=>array(65,-64,908,842),52586=>array(65,-64,908,842),52587=>array(65,-76,907,842),52588=>array(65,-62,907,842),52589=>array(65,-61,907,842),52590=>array(65,-69,922,842),52591=>array(65,-74,929,842),52592=>array(65,-69,927,842),52593=>array(65,-68,911,842),52594=>array(65,-72,929,842),52595=>array(65,-70,936,842),52596=>array(65,-66,908,842),52597=>array(65,-59,916,842),52598=>array(65,-60,928,842),52599=>array(65,-68,908,842),52600=>array(62,-3,938,777),52601=>array(79,-61,922,802),52602=>array(79,-61,922,802),52603=>array(79,-71,922,802),52604=>array(79,-46,922,792),52605=>array(79,-68,922,802),52606=>array(79,-74,922,802),52607=>array(79,-44,922,802),52608=>array(79,-62,922,802),52609=>array(79,-64,922,802),52610=>array(79,-64,922,802),52611=>array(79,-63,922,802),52612=>array(79,-68,922,802),52613=>array(79,-64,922,802),52614=>array(79,-63,922,802),52615=>array(79,-74,922,802),52616=>array(79,-62,922,802),52617=>array(79,-61,922,802),52618=>array(79,-69,922,802),52619=>array(79,-74,922,802),52620=>array(79,-69,922,802),52621=>array(79,-68,922,802),52622=>array(79,-72,922,802),52623=>array(79,-70,922,802),52624=>array(79,-66,922,802),52625=>array(79,-59,922,802),52626=>array(79,-60,922,802),52627=>array(79,-68,922,802),52628=>array(79,-64,921,820),52629=>array(79,-61,921,822),52630=>array(79,-61,921,822),52631=>array(79,-71,921,822),52632=>array(79,-46,921,820),52633=>array(79,-68,921,822),52634=>array(79,-74,921,822),52635=>array(79,-44,921,822),52636=>array(79,-62,921,822),52637=>array(79,-64,921,822),52638=>array(79,-64,921,822),52639=>array(79,-63,921,822),52640=>array(79,-68,921,822),52641=>array(79,-64,921,822),52642=>array(79,-63,921,822),52643=>array(79,-74,921,822),52644=>array(79,-62,921,822),52645=>array(79,-61,921,822),52646=>array(79,-69,921,822),52647=>array(79,-74,921,822),52648=>array(79,-69,921,822),52649=>array(79,-68,921,822),52650=>array(79,-72,921,822),52651=>array(79,-70,921,822),52652=>array(79,-66,921,822),52653=>array(79,-59,921,822),52654=>array(79,-60,921,822),52655=>array(79,-68,921,822),52656=>array(70,-70,907,841),52657=>array(75,-61,910,841),52658=>array(75,-61,910,841),52659=>array(75,-71,931,841),52660=>array(76,-46,910,842),52661=>array(75,-68,912,841),52662=>array(75,-76,910,841),52663=>array(75,-44,921,841),52664=>array(75,-62,917,841),52665=>array(75,-64,910,841),52666=>array(75,-64,910,841),52667=>array(75,-64,910,841),52668=>array(75,-69,923,841),52669=>array(75,-64,910,841),52670=>array(75,-64,910,841),52671=>array(75,-76,910,841),52672=>array(75,-62,910,841),52673=>array(75,-61,910,841),52674=>array(75,-69,922,841),52675=>array(75,-74,929,841),52676=>array(75,-69,927,841),52677=>array(75,-68,911,841),52678=>array(75,-72,929,841),52679=>array(75,-70,936,841),52680=>array(75,-66,910,841),52681=>array(75,-59,916,841),52682=>array(75,-60,928,841),52683=>array(75,-68,910,841),52684=>array(63,-68,907,843),52685=>array(70,-61,907,843),52686=>array(70,-61,907,843),52687=>array(70,-71,931,843),52688=>array(76,-46,907,843),52689=>array(70,-68,912,843),52690=>array(70,-76,907,843),52691=>array(70,-44,921,843),52692=>array(70,-62,917,843),52693=>array(70,-64,907,843),52694=>array(70,-64,908,843),52695=>array(70,-64,908,843),52696=>array(70,-69,923,843),52697=>array(70,-64,908,843),52698=>array(70,-64,908,843),52699=>array(70,-76,907,843),52700=>array(70,-62,907,843),52701=>array(70,-61,907,843),52702=>array(70,-69,922,843),52703=>array(70,-74,929,843),52704=>array(70,-69,927,843),52705=>array(70,-68,911,843),52706=>array(70,-72,929,843),52707=>array(70,-70,936,843),52708=>array(70,-66,908,843),52709=>array(70,-59,916,843),52710=>array(70,-60,928,843),52711=>array(70,-68,908,843),52712=>array(70,-69,907,842),52713=>array(65,-61,907,842),52714=>array(65,-61,907,842),52715=>array(65,-71,931,842),52716=>array(66,-46,907,842),52717=>array(65,-68,912,842),52718=>array(65,-76,907,842),52719=>array(65,-44,921,842),52720=>array(65,-62,917,842),52721=>array(65,-64,907,842),52722=>array(65,-64,908,842),52723=>array(65,-64,908,842),52724=>array(65,-69,923,842),52725=>array(65,-64,908,842),52726=>array(65,-64,908,842),52727=>array(65,-76,907,842),52728=>array(65,-62,907,842),52729=>array(65,-61,907,842),52730=>array(65,-69,922,842),52731=>array(65,-74,929,842),52732=>array(65,-69,927,842),52733=>array(65,-68,911,842),52734=>array(65,-72,929,842),52735=>array(65,-70,936,842),52736=>array(65,-66,908,842),52737=>array(65,-59,916,842),52738=>array(65,-60,928,842),52739=>array(65,-68,908,842),52740=>array(87,-54,928,820),52741=>array(79,-61,921,822),52742=>array(79,-61,921,822),52743=>array(79,-71,921,822),52744=>array(81,-46,922,820),52745=>array(79,-68,921,822),52746=>array(79,-74,921,822),52747=>array(79,-44,921,822),52748=>array(79,-62,921,822),52749=>array(79,-64,921,822),52750=>array(79,-64,921,822),52751=>array(79,-63,921,822),52752=>array(79,-68,921,822),52753=>array(79,-64,921,822),52754=>array(79,-63,921,822),52755=>array(79,-74,921,822),52756=>array(79,-62,921,822),52757=>array(79,-61,921,822),52758=>array(79,-69,921,822),52759=>array(79,-74,921,822),52760=>array(79,-69,921,822),52761=>array(79,-68,921,822),52762=>array(79,-72,921,822),52763=>array(79,-70,921,822),52764=>array(79,-66,921,822),52765=>array(79,-59,921,822),52766=>array(79,-60,921,822),52767=>array(79,-68,921,822),52768=>array(57,47,943,752),52769=>array(79,-61,922,802),52770=>array(79,-61,922,802),52771=>array(79,-71,922,802),52772=>array(79,-46,922,792),52773=>array(79,-68,922,802),52774=>array(79,-74,922,802),52775=>array(79,-44,922,802),52776=>array(79,-62,922,802),52777=>array(79,-64,922,802),52778=>array(79,-64,922,802),52779=>array(79,-63,922,802),52780=>array(79,-68,922,802),52781=>array(79,-64,922,802),52782=>array(79,-63,922,802),52783=>array(79,-74,922,802),52784=>array(79,-62,922,802),52785=>array(79,-61,922,802),52786=>array(79,-69,922,802),52787=>array(79,-74,922,802),52788=>array(79,-69,922,802),52789=>array(79,-68,922,802),52790=>array(79,-72,922,802),52791=>array(79,-70,922,802),52792=>array(79,-66,922,802),52793=>array(79,-59,922,802),52794=>array(79,-60,922,802),52795=>array(79,-68,922,802),52796=>array(70,-69,907,842),52797=>array(65,-61,907,842),52798=>array(65,-61,907,842),52799=>array(65,-71,931,842),52800=>array(65,-46,907,842),52801=>array(65,-68,912,842),52802=>array(65,-76,907,842),52803=>array(65,-44,921,842),52804=>array(65,-62,917,842),52805=>array(65,-64,907,842),52806=>array(65,-64,908,842),52807=>array(65,-64,908,842),52808=>array(65,-69,923,842),52809=>array(65,-64,908,842),52810=>array(65,-64,908,842),52811=>array(65,-76,907,842),52812=>array(65,-62,907,842),52813=>array(65,-61,907,842),52814=>array(65,-69,922,842),52815=>array(65,-74,929,842),52816=>array(65,-69,927,842),52817=>array(65,-68,911,842),52818=>array(65,-72,929,842),52819=>array(65,-70,936,842),52820=>array(65,-66,908,842),52821=>array(65,-59,916,842),52822=>array(65,-60,928,842),52823=>array(65,-68,908,842),52824=>array(115,-69,907,842),52825=>array(95,-61,907,842),52826=>array(95,-61,907,842),52827=>array(95,-71,931,842),52828=>array(99,-46,907,842),52829=>array(95,-68,912,842),52830=>array(95,-76,907,842),52831=>array(95,-44,921,842),52832=>array(95,-62,917,842),52833=>array(95,-64,907,842),52834=>array(95,-64,908,842),52835=>array(95,-64,908,842),52836=>array(95,-69,923,842),52837=>array(95,-64,908,842),52838=>array(95,-64,908,842),52839=>array(95,-76,907,842),52840=>array(95,-62,907,842),52841=>array(95,-61,907,842),52842=>array(95,-69,922,842),52843=>array(95,-74,929,842),52844=>array(95,-69,927,842),52845=>array(95,-68,911,842),52846=>array(95,-72,929,842),52847=>array(95,-70,936,842),52848=>array(95,-66,908,842),52849=>array(95,-59,916,842),52850=>array(95,-60,928,842),52851=>array(95,-68,908,842),52852=>array(84,-69,936,842),52853=>array(66,-59,936,842),52854=>array(66,-61,936,842),52855=>array(66,-71,936,842),52856=>array(69,-45,936,842),52857=>array(66,-69,936,842),52858=>array(66,-76,936,842),52859=>array(66,-44,936,842),52860=>array(66,-62,936,842),52861=>array(66,-64,936,842),52862=>array(66,-64,936,842),52863=>array(66,-64,936,842),52864=>array(66,-70,936,842),52865=>array(66,-64,936,842),52866=>array(66,-64,936,842),52867=>array(66,-76,936,842),52868=>array(66,-62,936,842),52869=>array(66,-61,936,842),52870=>array(66,-70,936,842),52871=>array(66,-74,936,842),52872=>array(66,-69,936,842),52873=>array(66,-67,936,842),52874=>array(66,-72,936,842),52875=>array(66,-71,936,842),52876=>array(66,-66,936,842),52877=>array(66,-59,936,842),52878=>array(66,-60,936,842),52879=>array(66,-69,936,842),52880=>array(79,-69,907,842),52881=>array(66,-61,907,842),52882=>array(66,-61,907,842),52883=>array(66,-71,931,842),52884=>array(69,-46,907,842),52885=>array(66,-68,912,842),52886=>array(66,-76,907,842),52887=>array(66,-44,921,842),52888=>array(66,-62,917,842),52889=>array(66,-64,907,842),52890=>array(66,-64,908,842),52891=>array(66,-64,908,842),52892=>array(66,-69,923,842),52893=>array(66,-64,908,842),52894=>array(66,-64,908,842),52895=>array(66,-76,907,842),52896=>array(66,-62,907,842),52897=>array(66,-61,907,842),52898=>array(66,-69,922,842),52899=>array(66,-74,929,842),52900=>array(66,-69,927,842),52901=>array(66,-68,911,842),52902=>array(66,-72,929,842),52903=>array(66,-70,936,842),52904=>array(66,-66,908,842),52905=>array(66,-59,916,842),52906=>array(66,-60,928,842),52907=>array(66,-68,908,842),52908=>array(74,-68,935,843),52909=>array(66,-59,936,842),52910=>array(66,-61,936,842),52911=>array(66,-71,936,842),52912=>array(69,-45,936,842),52913=>array(66,-69,936,842),52914=>array(66,-76,936,842),52915=>array(66,-44,936,842),52916=>array(66,-62,936,842),52917=>array(66,-64,936,842),52918=>array(66,-64,936,842),52919=>array(66,-64,936,842),52920=>array(66,-70,936,842),52921=>array(66,-64,936,842),52922=>array(66,-64,936,842),52923=>array(66,-76,936,842),52924=>array(66,-62,936,842),52925=>array(66,-61,936,842),52926=>array(66,-70,936,842),52927=>array(66,-74,936,842),52928=>array(66,-69,936,842),52929=>array(66,-67,936,842),52930=>array(66,-72,936,842),52931=>array(66,-71,936,842),52932=>array(66,-66,936,842),52933=>array(66,-59,936,842),52934=>array(66,-60,936,842),52935=>array(66,-69,936,842),52936=>array(79,-69,907,842),52937=>array(66,-61,907,842),52938=>array(66,-61,907,842),52939=>array(66,-71,931,842),52940=>array(69,-46,907,842),52941=>array(66,-68,912,842),52942=>array(66,-76,907,842),52943=>array(66,-44,921,842),52944=>array(66,-62,917,842),52945=>array(66,-64,907,842),52946=>array(66,-64,908,842),52947=>array(66,-64,908,842),52948=>array(66,-69,923,842),52949=>array(66,-64,908,842),52950=>array(66,-64,908,842),52951=>array(66,-76,907,842),52952=>array(66,-62,907,842),52953=>array(66,-61,907,842),52954=>array(66,-69,922,842),52955=>array(66,-74,929,842),52956=>array(66,-69,927,842),52957=>array(66,-68,911,842),52958=>array(66,-72,929,842),52959=>array(66,-70,936,842),52960=>array(66,-66,908,842),52961=>array(66,-59,916,842),52962=>array(66,-60,928,842),52963=>array(66,-68,908,842),52964=>array(104,-70,907,841),52965=>array(66,-61,907,841),52966=>array(66,-61,907,841),52967=>array(66,-71,931,841),52968=>array(69,-46,907,841),52969=>array(66,-68,912,841),52970=>array(66,-76,907,841),52971=>array(66,-44,921,841),52972=>array(66,-62,917,841),52973=>array(66,-64,907,841),52974=>array(66,-64,908,841),52975=>array(66,-64,908,841),52976=>array(66,-69,923,841),52977=>array(66,-64,908,841),52978=>array(66,-64,908,841),52979=>array(66,-76,906,841),52980=>array(66,-62,907,841),52981=>array(66,-61,907,841),52982=>array(66,-69,922,841),52983=>array(66,-74,929,841),52984=>array(66,-69,927,841),52985=>array(66,-68,911,841),52986=>array(66,-72,929,841),52987=>array(66,-70,936,841),52988=>array(66,-66,908,841),52989=>array(66,-59,916,841),52990=>array(66,-60,928,841),52991=>array(66,-68,908,841),52992=>array(97,-68,907,843),52993=>array(66,-61,907,843),52994=>array(66,-61,907,843),52995=>array(66,-71,931,843),52996=>array(69,-46,907,843),52997=>array(66,-68,912,843),52998=>array(66,-76,907,843),52999=>array(66,-44,921,843),53000=>array(66,-62,917,843),53001=>array(66,-64,907,843),53002=>array(66,-64,908,843),53003=>array(66,-64,908,843),53004=>array(66,-69,923,843),53005=>array(66,-64,908,843),53006=>array(66,-64,908,843),53007=>array(66,-76,907,843),53008=>array(66,-62,907,843),53009=>array(66,-61,907,843),53010=>array(66,-69,922,843),53011=>array(66,-74,929,843),53012=>array(66,-69,927,843),53013=>array(66,-68,911,843),53014=>array(66,-72,929,843),53015=>array(66,-70,936,843),53016=>array(66,-66,908,843),53017=>array(66,-59,916,843),53018=>array(66,-60,928,843),53019=>array(66,-68,908,843),53020=>array(104,-70,907,842),53021=>array(66,-61,908,842),53022=>array(66,-61,908,842),53023=>array(66,-71,931,842),53024=>array(69,-46,907,842),53025=>array(66,-68,912,842),53026=>array(66,-76,908,842),53027=>array(66,-44,921,842),53028=>array(66,-62,917,842),53029=>array(66,-64,908,842),53030=>array(66,-64,908,842),53031=>array(66,-64,908,842),53032=>array(66,-69,923,842),53033=>array(66,-64,908,842),53034=>array(66,-64,908,842),53035=>array(66,-76,908,842),53036=>array(66,-62,908,842),53037=>array(66,-61,908,842),53038=>array(66,-69,922,842),53039=>array(66,-74,929,842),53040=>array(66,-69,927,842),53041=>array(66,-68,911,842),53042=>array(66,-72,929,842),53043=>array(66,-70,936,842),53044=>array(66,-66,908,842),53045=>array(66,-59,916,842),53046=>array(66,-60,928,842),53047=>array(66,-68,908,842),53048=>array(97,-68,907,843),53049=>array(66,-61,907,843),53050=>array(66,-61,907,843),53051=>array(66,-71,931,843),53052=>array(64,-46,907,843),53053=>array(66,-68,912,843),53054=>array(66,-76,907,843),53055=>array(66,-44,921,843),53056=>array(66,-62,917,843),53057=>array(66,-64,907,843),53058=>array(66,-64,908,843),53059=>array(66,-64,908,843),53060=>array(66,-69,923,843),53061=>array(66,-64,908,843),53062=>array(66,-64,908,843),53063=>array(66,-76,907,843),53064=>array(66,-62,907,843),53065=>array(66,-61,907,843),53066=>array(66,-69,922,843),53067=>array(66,-74,929,843),53068=>array(66,-69,927,843),53069=>array(66,-68,911,843),53070=>array(66,-72,929,843),53071=>array(66,-70,936,843),53072=>array(66,-66,908,843),53073=>array(66,-59,916,843),53074=>array(66,-60,928,843),53075=>array(66,-68,908,843),53076=>array(62,22,943,725),53077=>array(79,-61,921,775),53078=>array(79,-61,921,775),53079=>array(79,-71,921,775),53080=>array(79,-46,922,775),53081=>array(79,-68,921,775),53082=>array(79,-74,921,775),53083=>array(79,-44,921,775),53084=>array(79,-62,921,775),53085=>array(79,-64,921,775),53086=>array(79,-64,921,775),53087=>array(79,-63,921,775),53088=>array(79,-68,921,775),53089=>array(79,-64,921,775),53090=>array(79,-63,921,775),53091=>array(79,-74,921,775),53092=>array(79,-62,921,775),53093=>array(79,-61,921,775),53094=>array(79,-69,921,775),53095=>array(79,-74,921,775),53096=>array(79,-69,921,775),53097=>array(79,-68,921,775),53098=>array(79,-72,921,775),53099=>array(79,-70,921,775),53100=>array(79,-66,921,775),53101=>array(79,-59,921,775),53102=>array(79,-60,921,775),53103=>array(79,-68,921,775),53104=>array(68,-69,936,842),53105=>array(65,-59,936,842),53106=>array(65,-61,936,842),53107=>array(65,-71,936,842),53108=>array(72,-45,936,842),53109=>array(65,-69,936,842),53110=>array(65,-76,936,842),53111=>array(65,-44,936,842),53112=>array(65,-62,936,842),53113=>array(65,-64,936,842),53114=>array(65,-64,936,842),53115=>array(65,-64,936,842),53116=>array(65,-70,936,842),53117=>array(65,-64,936,842),53118=>array(65,-64,936,842),53119=>array(65,-76,936,842),53120=>array(65,-62,936,842),53121=>array(65,-61,936,842),53122=>array(65,-70,936,842),53123=>array(65,-74,936,842),53124=>array(65,-69,936,842),53125=>array(65,-67,936,842),53126=>array(65,-72,936,842),53127=>array(65,-71,936,842),53128=>array(65,-66,936,842),53129=>array(65,-59,936,842),53130=>array(65,-60,936,842),53131=>array(65,-69,936,842),53132=>array(68,-69,907,842),53133=>array(77,-61,907,842),53134=>array(77,-61,907,842),53135=>array(77,-71,931,842),53136=>array(72,-46,907,842),53137=>array(77,-68,912,842),53138=>array(77,-76,907,842),53139=>array(77,-44,921,842),53140=>array(77,-62,917,842),53141=>array(77,-64,907,842),53142=>array(77,-64,908,842),53143=>array(77,-64,908,842),53144=>array(77,-69,923,842),53145=>array(77,-64,908,842),53146=>array(77,-64,908,842),53147=>array(77,-76,907,842),53148=>array(77,-62,907,842),53149=>array(77,-61,907,842),53150=>array(77,-69,922,842),53151=>array(77,-74,929,842),53152=>array(77,-69,927,842),53153=>array(77,-68,911,842),53154=>array(77,-72,929,842),53155=>array(77,-70,936,842),53156=>array(77,-66,908,842),53157=>array(77,-59,916,842),53158=>array(77,-60,928,842),53159=>array(77,-68,908,842),53160=>array(92,-69,907,842),53161=>array(65,-61,907,842),53162=>array(65,-61,907,842),53163=>array(65,-71,931,842),53164=>array(65,-46,907,842),53165=>array(65,-68,912,842),53166=>array(65,-76,907,842),53167=>array(65,-44,921,842),53168=>array(65,-62,917,842),53169=>array(65,-64,907,842),53170=>array(65,-64,908,842),53171=>array(65,-64,908,842),53172=>array(65,-69,923,842),53173=>array(65,-64,908,842),53174=>array(65,-64,908,842),53175=>array(65,-76,907,842),53176=>array(65,-62,907,842),53177=>array(65,-61,907,842),53178=>array(65,-69,922,842),53179=>array(65,-74,929,842),53180=>array(65,-69,927,842),53181=>array(65,-68,911,842),53182=>array(65,-72,929,842),53183=>array(65,-70,936,842),53184=>array(65,-66,908,842),53185=>array(65,-59,916,842),53186=>array(65,-60,928,842),53187=>array(65,-68,908,842),53188=>array(62,22,943,725),53189=>array(79,-61,922,775),53190=>array(79,-61,922,775),53191=>array(79,-71,922,775),53192=>array(79,-46,922,775),53193=>array(79,-68,922,775),53194=>array(79,-74,922,775),53195=>array(79,-44,922,775),53196=>array(79,-62,922,775),53197=>array(79,-64,922,775),53198=>array(79,-64,922,775),53199=>array(79,-63,922,775),53200=>array(79,-68,922,775),53201=>array(79,-64,922,775),53202=>array(79,-63,922,775),53203=>array(79,-74,922,775),53204=>array(79,-62,922,775),53205=>array(79,-61,922,775),53206=>array(79,-69,922,775),53207=>array(79,-74,922,775),53208=>array(79,-69,922,775),53209=>array(79,-68,922,775),53210=>array(79,-72,922,775),53211=>array(79,-70,922,775),53212=>array(79,-66,922,775),53213=>array(79,-59,922,775),53214=>array(79,-60,922,775),53215=>array(79,-68,922,775),53216=>array(87,-64,928,795),53217=>array(79,-61,921,790),53218=>array(79,-61,921,790),53219=>array(79,-71,921,790),53220=>array(79,-46,921,785),53221=>array(79,-68,921,790),53222=>array(79,-74,921,790),53223=>array(79,-44,921,790),53224=>array(79,-62,921,790),53225=>array(79,-64,921,790),53226=>array(79,-64,921,790),53227=>array(79,-63,921,790),53228=>array(79,-68,921,790),53229=>array(79,-64,921,790),53230=>array(79,-63,921,790),53231=>array(79,-74,921,790),53232=>array(79,-62,921,790),53233=>array(79,-61,921,790),53234=>array(79,-69,921,790),53235=>array(79,-74,921,790),53236=>array(79,-69,921,790),53237=>array(79,-68,921,790),53238=>array(79,-72,921,790),53239=>array(79,-70,921,790),53240=>array(79,-66,921,790),53241=>array(79,-59,921,790),53242=>array(79,-60,921,790),53243=>array(79,-68,921,790),53244=>array(70,-70,907,841),53245=>array(75,-61,908,844),53246=>array(75,-61,908,844),53247=>array(75,-71,931,844),53248=>array(76,-46,907,841),53249=>array(75,-68,912,844),53250=>array(75,-76,908,844),53251=>array(75,-44,921,844),53252=>array(75,-62,917,844),53253=>array(75,-64,908,844),53254=>array(75,-64,908,844),53255=>array(75,-64,908,844),53256=>array(75,-69,923,844),53257=>array(75,-64,908,844),53258=>array(75,-64,908,844),53259=>array(75,-76,908,844),53260=>array(75,-62,908,844),53261=>array(75,-61,908,844),53262=>array(75,-69,922,844),53263=>array(75,-74,929,844),53264=>array(75,-69,927,844),53265=>array(75,-68,911,844),53266=>array(75,-72,929,844),53267=>array(75,-70,936,844),53268=>array(75,-66,908,844),53269=>array(75,-59,916,844),53270=>array(75,-60,928,844),53271=>array(75,-68,908,844),53272=>array(61,-68,907,843),53273=>array(70,-61,907,843),53274=>array(70,-61,907,843),53275=>array(70,-71,931,843),53276=>array(76,-46,907,843),53277=>array(70,-68,912,843),53278=>array(70,-76,907,843),53279=>array(70,-44,921,843),53280=>array(70,-62,917,843),53281=>array(70,-64,907,843),53282=>array(70,-64,908,843),53283=>array(70,-64,908,843),53284=>array(70,-69,923,843),53285=>array(70,-64,908,843),53286=>array(70,-64,908,843),53287=>array(70,-76,907,843),53288=>array(70,-62,907,843),53289=>array(70,-61,907,843),53290=>array(70,-69,922,843),53291=>array(70,-74,929,843),53292=>array(70,-69,927,843),53293=>array(70,-68,911,843),53294=>array(70,-72,929,843),53295=>array(70,-70,936,843),53296=>array(70,-66,908,843),53297=>array(70,-59,916,843),53298=>array(70,-60,928,843),53299=>array(70,-68,908,843),53300=>array(67,-69,907,842),53301=>array(65,-61,907,842),53302=>array(65,-61,907,842),53303=>array(65,-71,931,842),53304=>array(65,-46,907,842),53305=>array(65,-68,912,842),53306=>array(65,-76,907,842),53307=>array(65,-44,921,842),53308=>array(65,-62,917,842),53309=>array(65,-64,907,842),53310=>array(65,-64,908,842),53311=>array(65,-64,908,842),53312=>array(65,-69,923,842),53313=>array(65,-64,908,842),53314=>array(65,-64,908,842),53315=>array(65,-76,907,842),53316=>array(65,-62,907,842),53317=>array(65,-61,907,842),53318=>array(65,-69,922,842),53319=>array(65,-74,929,842),53320=>array(65,-69,927,842),53321=>array(65,-68,911,842),53322=>array(65,-72,929,842),53323=>array(65,-70,936,842),53324=>array(65,-66,908,842),53325=>array(65,-59,916,842),53326=>array(65,-60,928,842),53327=>array(65,-68,908,842),53328=>array(87,-64,928,795),53329=>array(79,-61,921,785),53330=>array(79,-61,921,785),53331=>array(79,-71,921,785),53332=>array(96,-46,927,785),53333=>array(79,-68,921,785),53334=>array(79,-74,921,785),53335=>array(79,-44,921,785),53336=>array(79,-62,921,785),53337=>array(79,-64,921,785),53338=>array(79,-64,921,785),53339=>array(79,-63,921,785),53340=>array(79,-68,921,785),53341=>array(79,-64,921,785),53342=>array(79,-63,921,785),53343=>array(79,-74,921,785),53344=>array(79,-62,921,785),53345=>array(79,-61,921,785),53346=>array(79,-69,921,785),53347=>array(79,-74,921,785),53348=>array(79,-69,921,785),53349=>array(79,-68,921,785),53350=>array(79,-72,921,785),53351=>array(79,-70,921,785),53352=>array(79,-66,921,785),53353=>array(79,-59,921,785),53354=>array(79,-60,921,785),53355=>array(79,-68,921,785),53356=>array(67,27,943,700),53357=>array(79,-61,922,785),53358=>array(79,-61,922,785),53359=>array(79,-71,922,785),53360=>array(79,-46,921,785),53361=>array(79,-68,922,785),53362=>array(79,-74,922,785),53363=>array(79,-44,922,785),53364=>array(79,-62,922,785),53365=>array(79,-64,922,785),53366=>array(79,-64,922,785),53367=>array(79,-63,922,785),53368=>array(79,-68,922,785),53369=>array(79,-64,922,785),53370=>array(79,-63,922,785),53371=>array(79,-74,922,785),53372=>array(79,-62,922,785),53373=>array(79,-61,922,785),53374=>array(79,-69,922,785),53375=>array(79,-74,922,785),53376=>array(79,-69,922,785),53377=>array(79,-68,922,785),53378=>array(79,-72,922,785),53379=>array(79,-70,922,785),53380=>array(79,-66,922,785),53381=>array(79,-59,922,785),53382=>array(79,-60,922,785),53383=>array(79,-68,922,785),53384=>array(65,-69,907,842),53385=>array(59,-61,907,842),53386=>array(59,-61,907,842),53387=>array(59,-71,931,842),53388=>array(65,-46,907,842),53389=>array(59,-68,912,842),53390=>array(59,-76,907,842),53391=>array(59,-44,921,842),53392=>array(59,-62,917,842),53393=>array(59,-64,907,842),53394=>array(59,-64,908,842),53395=>array(59,-64,908,842),53396=>array(59,-69,923,842),53397=>array(59,-64,908,842),53398=>array(59,-64,908,842),53399=>array(59,-76,907,842),53400=>array(59,-62,907,842),53401=>array(59,-61,907,842),53402=>array(59,-69,922,842),53403=>array(59,-74,929,842),53404=>array(59,-69,927,842),53405=>array(59,-68,911,842),53406=>array(59,-72,929,842),53407=>array(59,-70,936,842),53408=>array(59,-66,908,842),53409=>array(59,-59,916,842),53410=>array(59,-60,928,842),53411=>array(59,-68,908,842),53412=>array(120,-69,907,842),53413=>array(67,-61,907,842),53414=>array(67,-61,907,842),53415=>array(67,-71,931,842),53416=>array(94,-46,907,842),53417=>array(67,-68,912,842),53418=>array(67,-76,907,842),53419=>array(67,-44,921,842),53420=>array(67,-62,917,842),53421=>array(67,-64,907,842),53422=>array(67,-64,908,842),53423=>array(67,-64,908,842),53424=>array(67,-69,923,842),53425=>array(67,-64,908,842),53426=>array(67,-64,908,842),53427=>array(67,-76,907,842),53428=>array(67,-62,907,842),53429=>array(67,-61,907,842),53430=>array(67,-69,922,842),53431=>array(67,-74,929,842),53432=>array(67,-69,927,842),53433=>array(67,-68,911,842),53434=>array(67,-72,929,842),53435=>array(67,-70,936,842),53436=>array(67,-66,908,842),53437=>array(67,-59,916,842),53438=>array(67,-60,928,842),53439=>array(67,-68,908,842),53440=>array(115,-69,936,842),53441=>array(115,-59,936,842),53442=>array(115,-61,936,842),53443=>array(115,-71,936,842),53444=>array(115,-45,936,842),53445=>array(115,-69,936,842),53446=>array(115,-76,936,842),53447=>array(115,-44,936,842),53448=>array(115,-62,936,842),53449=>array(115,-64,936,842),53450=>array(115,-64,936,842),53451=>array(115,-64,936,842),53452=>array(115,-70,936,842),53453=>array(115,-64,936,842),53454=>array(115,-64,936,842),53455=>array(115,-76,936,842),53456=>array(115,-62,936,842),53457=>array(115,-61,936,842),53458=>array(115,-70,936,842),53459=>array(115,-74,936,842),53460=>array(115,-69,936,842),53461=>array(115,-67,936,842),53462=>array(115,-72,936,842),53463=>array(115,-71,936,842),53464=>array(115,-66,936,842),53465=>array(115,-59,936,842),53466=>array(115,-60,936,842),53467=>array(115,-69,936,842),53468=>array(115,-69,907,842),53469=>array(115,-61,907,842),53470=>array(115,-61,907,842),53471=>array(115,-71,931,842),53472=>array(115,-46,907,842),53473=>array(115,-68,912,842),53474=>array(115,-76,907,842),53475=>array(115,-44,921,842),53476=>array(115,-62,917,842),53477=>array(115,-64,907,842),53478=>array(115,-64,908,842),53479=>array(115,-64,908,842),53480=>array(115,-69,923,842),53481=>array(115,-64,908,842),53482=>array(115,-64,908,842),53483=>array(115,-76,907,842),53484=>array(115,-62,907,842),53485=>array(115,-61,907,842),53486=>array(115,-69,922,842),53487=>array(115,-74,929,842),53488=>array(115,-69,927,842),53489=>array(115,-68,911,842),53490=>array(115,-72,929,842),53491=>array(115,-70,936,842),53492=>array(115,-66,908,842),53493=>array(115,-59,916,842),53494=>array(115,-60,928,842),53495=>array(115,-68,908,842),53496=>array(114,-68,935,843),53497=>array(115,-59,936,842),53498=>array(115,-61,936,842),53499=>array(115,-71,936,842),53500=>array(115,-45,936,842),53501=>array(115,-69,936,842),53502=>array(115,-76,936,842),53503=>array(115,-44,936,842),53504=>array(115,-62,936,842),53505=>array(115,-64,936,842),53506=>array(115,-64,936,842),53507=>array(115,-64,936,842),53508=>array(115,-70,936,842),53509=>array(115,-64,936,842),53510=>array(115,-64,936,842),53511=>array(115,-76,936,842),53512=>array(115,-62,936,842),53513=>array(115,-61,936,842),53514=>array(115,-70,936,842),53515=>array(115,-74,936,842),53516=>array(115,-69,936,842),53517=>array(115,-67,936,842),53518=>array(115,-72,936,842),53519=>array(115,-71,936,842),53520=>array(115,-66,936,842),53521=>array(115,-59,936,842),53522=>array(115,-60,936,842),53523=>array(115,-69,936,842),53524=>array(115,-69,907,842),53525=>array(115,-61,907,842),53526=>array(115,-61,907,842),53527=>array(115,-71,931,842),53528=>array(115,-46,907,842),53529=>array(115,-68,912,842),53530=>array(115,-76,907,842),53531=>array(115,-44,921,842),53532=>array(115,-62,917,842),53533=>array(115,-64,907,842),53534=>array(115,-64,908,842),53535=>array(115,-64,908,842),53536=>array(115,-69,923,842),53537=>array(115,-64,908,842),53538=>array(115,-64,908,842),53539=>array(115,-76,907,842),53540=>array(115,-62,907,842),53541=>array(115,-61,907,842),53542=>array(115,-69,922,842),53543=>array(115,-74,929,842),53544=>array(115,-69,927,842),53545=>array(115,-68,911,842),53546=>array(115,-72,929,842),53547=>array(115,-70,936,842),53548=>array(115,-66,908,842),53549=>array(115,-59,916,842),53550=>array(115,-60,928,842),53551=>array(115,-68,908,842),53552=>array(115,-70,907,841),53553=>array(115,-61,907,841),53554=>array(115,-61,907,841),53555=>array(115,-71,931,841),53556=>array(115,-46,907,841),53557=>array(115,-68,912,841),53558=>array(115,-76,907,841),53559=>array(115,-44,921,841),53560=>array(115,-62,917,841),53561=>array(115,-64,907,841),53562=>array(115,-64,908,841),53563=>array(115,-64,908,841),53564=>array(115,-69,923,841),53565=>array(115,-64,908,841),53566=>array(115,-64,908,841),53567=>array(115,-76,906,841),53568=>array(115,-62,907,841),53569=>array(115,-61,907,841),53570=>array(115,-69,922,841),53571=>array(115,-74,929,841),53572=>array(115,-69,927,841),53573=>array(115,-68,911,841),53574=>array(115,-72,929,841),53575=>array(115,-70,936,841),53576=>array(115,-66,908,841),53577=>array(115,-59,916,841),53578=>array(115,-60,928,841),53579=>array(115,-68,908,841),53580=>array(115,-68,907,843),53581=>array(115,-61,907,843),53582=>array(115,-61,907,843),53583=>array(115,-71,931,843),53584=>array(115,-46,907,843),53585=>array(115,-68,912,843),53586=>array(115,-76,907,843),53587=>array(115,-44,921,843),53588=>array(115,-62,917,843),53589=>array(115,-64,907,843),53590=>array(115,-64,908,843),53591=>array(115,-64,908,843),53592=>array(115,-69,923,843),53593=>array(115,-64,908,843),53594=>array(115,-64,908,843),53595=>array(115,-76,907,843),53596=>array(115,-62,907,843),53597=>array(115,-61,907,843),53598=>array(115,-69,922,843),53599=>array(115,-74,929,843),53600=>array(115,-69,927,843),53601=>array(115,-68,911,843),53602=>array(115,-72,929,843),53603=>array(115,-70,936,843),53604=>array(115,-66,908,843),53605=>array(115,-59,916,843),53606=>array(115,-60,928,843),53607=>array(115,-68,908,843),53608=>array(115,-70,907,842),53609=>array(115,-61,908,842),53610=>array(115,-61,908,842),53611=>array(115,-71,931,842),53612=>array(115,-46,907,842),53613=>array(115,-68,912,842),53614=>array(115,-76,908,842),53615=>array(115,-44,921,842),53616=>array(115,-62,917,842),53617=>array(115,-64,908,842),53618=>array(115,-64,908,842),53619=>array(115,-64,908,842),53620=>array(115,-69,923,842),53621=>array(115,-64,908,842),53622=>array(115,-64,908,842),53623=>array(115,-76,908,842),53624=>array(115,-62,908,842),53625=>array(115,-61,908,842),53626=>array(115,-69,922,842),53627=>array(115,-74,929,842),53628=>array(115,-69,927,842),53629=>array(115,-68,911,842),53630=>array(115,-72,929,842),53631=>array(115,-70,936,842),53632=>array(115,-66,908,842),53633=>array(115,-59,916,842),53634=>array(115,-60,928,842),53635=>array(115,-68,908,842),53636=>array(115,-68,907,843),53637=>array(115,-61,907,843),53638=>array(115,-61,907,843),53639=>array(115,-71,931,843),53640=>array(115,-46,907,843),53641=>array(115,-68,912,843),53642=>array(115,-76,907,843),53643=>array(115,-44,921,843),53644=>array(115,-62,917,843),53645=>array(115,-64,907,843),53646=>array(115,-64,908,843),53647=>array(115,-64,908,843),53648=>array(115,-69,923,843),53649=>array(115,-64,908,843),53650=>array(115,-64,908,843),53651=>array(115,-76,907,843),53652=>array(115,-62,907,843),53653=>array(115,-61,907,843),53654=>array(115,-69,922,843),53655=>array(115,-74,929,843),53656=>array(115,-69,927,843),53657=>array(115,-68,911,843),53658=>array(115,-72,929,843),53659=>array(115,-70,936,843),53660=>array(115,-66,908,843),53661=>array(115,-59,916,843),53662=>array(115,-60,928,843),53663=>array(115,-68,908,843),53664=>array(62,17,943,757),53665=>array(79,-61,921,799),53666=>array(79,-61,921,799),53667=>array(79,-71,921,799),53668=>array(79,-46,922,789),53669=>array(79,-68,921,799),53670=>array(79,-74,921,799),53671=>array(79,-44,921,799),53672=>array(79,-62,921,799),53673=>array(79,-64,921,799),53674=>array(79,-64,921,799),53675=>array(79,-63,921,799),53676=>array(79,-68,921,799),53677=>array(79,-64,921,799),53678=>array(79,-63,921,799),53679=>array(79,-74,921,799),53680=>array(79,-62,921,799),53681=>array(79,-61,921,799),53682=>array(79,-69,921,799),53683=>array(79,-74,921,799),53684=>array(79,-69,921,799),53685=>array(79,-68,921,799),53686=>array(79,-72,921,799),53687=>array(79,-70,921,799),53688=>array(79,-66,921,799),53689=>array(79,-59,921,799),53690=>array(79,-60,921,799),53691=>array(79,-68,921,799),53692=>array(53,-69,936,842),53693=>array(77,-59,936,842),53694=>array(77,-61,936,842),53695=>array(77,-71,936,842),53696=>array(77,-45,936,842),53697=>array(77,-69,936,842),53698=>array(77,-76,936,842),53699=>array(77,-44,936,842),53700=>array(77,-62,936,842),53701=>array(77,-64,936,842),53702=>array(77,-64,936,842),53703=>array(77,-64,936,842),53704=>array(77,-70,936,842),53705=>array(77,-64,936,842),53706=>array(77,-64,936,842),53707=>array(77,-76,936,842),53708=>array(77,-62,936,842),53709=>array(77,-61,936,842),53710=>array(77,-70,936,842),53711=>array(77,-74,936,842),53712=>array(77,-69,936,842),53713=>array(77,-67,936,842),53714=>array(77,-72,936,842),53715=>array(77,-71,936,842),53716=>array(77,-66,936,842),53717=>array(77,-59,936,842),53718=>array(77,-60,936,842),53719=>array(77,-69,936,842),53720=>array(43,-69,907,842),53721=>array(77,-61,907,842),53722=>array(77,-61,907,842),53723=>array(77,-71,931,842),53724=>array(77,-46,907,842),53725=>array(77,-68,912,842),53726=>array(77,-76,907,842),53727=>array(77,-44,921,842),53728=>array(77,-62,917,842),53729=>array(77,-64,907,842),53730=>array(77,-64,908,842),53731=>array(77,-64,908,842),53732=>array(77,-69,923,842),53733=>array(77,-64,908,842),53734=>array(77,-64,908,842),53735=>array(77,-76,907,842),53736=>array(77,-62,907,842),53737=>array(77,-61,907,842),53738=>array(77,-69,922,842),53739=>array(77,-74,929,842),53740=>array(77,-69,927,842),53741=>array(77,-68,911,842),53742=>array(77,-72,929,842),53743=>array(77,-70,936,842),53744=>array(77,-66,908,842),53745=>array(77,-59,916,842),53746=>array(77,-60,928,842),53747=>array(77,-68,908,842),53748=>array(53,-68,907,843),53749=>array(65,-61,907,842),53750=>array(65,-61,907,842),53751=>array(65,-71,931,842),53752=>array(65,-46,907,842),53753=>array(65,-68,912,842),53754=>array(65,-76,907,842),53755=>array(65,-44,921,842),53756=>array(65,-62,917,842),53757=>array(65,-64,907,842),53758=>array(65,-64,908,842),53759=>array(65,-64,908,842),53760=>array(65,-69,923,842),53761=>array(65,-64,908,842),53762=>array(65,-64,908,842),53763=>array(65,-76,907,842),53764=>array(65,-62,907,842),53765=>array(65,-61,907,842),53766=>array(65,-69,922,842),53767=>array(65,-74,929,842),53768=>array(65,-69,927,842),53769=>array(65,-68,911,842),53770=>array(65,-72,929,842),53771=>array(65,-70,936,842),53772=>array(65,-66,908,842),53773=>array(65,-59,916,842),53774=>array(65,-60,928,842),53775=>array(65,-68,908,842),53776=>array(62,7,943,777),53777=>array(79,-61,921,799),53778=>array(79,-61,921,799),53779=>array(79,-71,921,799),53780=>array(79,-46,921,794),53781=>array(79,-68,921,799),53782=>array(79,-74,921,799),53783=>array(79,-44,921,799),53784=>array(79,-62,921,799),53785=>array(79,-64,921,799),53786=>array(79,-64,921,799),53787=>array(79,-63,921,799),53788=>array(79,-68,921,799),53789=>array(79,-64,921,799),53790=>array(79,-63,921,799),53791=>array(79,-74,921,799),53792=>array(79,-62,921,799),53793=>array(79,-61,921,799),53794=>array(79,-69,921,799),53795=>array(79,-74,921,799),53796=>array(79,-69,921,799),53797=>array(79,-68,921,799),53798=>array(79,-72,921,799),53799=>array(79,-70,921,799),53800=>array(79,-66,921,799),53801=>array(79,-59,921,799),53802=>array(79,-60,921,799),53803=>array(79,-68,921,799),53804=>array(82,-64,924,789),53805=>array(79,-61,921,799),53806=>array(79,-61,921,799),53807=>array(79,-71,921,799),53808=>array(79,-46,921,789),53809=>array(79,-68,921,799),53810=>array(79,-74,921,799),53811=>array(79,-44,921,799),53812=>array(79,-62,921,799),53813=>array(79,-64,921,799),53814=>array(79,-64,921,799),53815=>array(79,-63,921,799),53816=>array(79,-68,921,799),53817=>array(79,-64,921,799),53818=>array(79,-63,921,799),53819=>array(79,-74,921,799),53820=>array(79,-62,921,799),53821=>array(79,-61,921,799),53822=>array(79,-69,921,799),53823=>array(79,-74,921,799),53824=>array(79,-69,921,799),53825=>array(79,-68,921,799),53826=>array(79,-72,921,799),53827=>array(79,-70,921,799),53828=>array(79,-66,921,799),53829=>array(79,-59,921,799),53830=>array(79,-60,921,799),53831=>array(79,-68,921,799),53832=>array(76,-70,907,841),53833=>array(74,-61,909,843),53834=>array(74,-61,909,843),53835=>array(74,-71,931,843),53836=>array(75,-46,909,843),53837=>array(74,-68,912,843),53838=>array(74,-76,909,843),53839=>array(74,-44,921,843),53840=>array(74,-62,917,843),53841=>array(74,-64,909,843),53842=>array(74,-64,909,843),53843=>array(74,-64,909,843),53844=>array(74,-69,923,843),53845=>array(74,-64,909,843),53846=>array(74,-64,909,843),53847=>array(74,-76,909,843),53848=>array(74,-62,909,843),53849=>array(74,-61,909,843),53850=>array(74,-69,922,843),53851=>array(74,-74,929,843),53852=>array(74,-69,927,843),53853=>array(74,-68,911,843),53854=>array(74,-72,929,843),53855=>array(74,-70,936,843),53856=>array(74,-66,909,843),53857=>array(74,-59,916,843),53858=>array(74,-60,928,843),53859=>array(74,-68,909,843),53860=>array(56,-68,907,843),53861=>array(68,-61,907,843),53862=>array(68,-61,907,843),53863=>array(68,-71,931,843),53864=>array(74,-46,907,843),53865=>array(68,-68,912,843),53866=>array(68,-76,907,843),53867=>array(68,-44,921,843),53868=>array(68,-62,917,843),53869=>array(68,-64,907,843),53870=>array(68,-64,908,843),53871=>array(68,-64,908,843),53872=>array(68,-69,923,843),53873=>array(68,-64,908,843),53874=>array(68,-64,908,843),53875=>array(68,-76,907,843),53876=>array(68,-62,907,843),53877=>array(68,-61,907,843),53878=>array(68,-69,922,843),53879=>array(68,-74,929,843),53880=>array(68,-69,927,843),53881=>array(68,-68,911,843),53882=>array(68,-72,929,843),53883=>array(68,-70,936,843),53884=>array(68,-66,908,843),53885=>array(68,-59,916,843),53886=>array(68,-60,928,843),53887=>array(68,-68,908,843),53888=>array(67,-69,907,842),53889=>array(65,-61,907,842),53890=>array(65,-61,907,842),53891=>array(65,-71,931,842),53892=>array(65,-46,907,842),53893=>array(65,-68,912,842),53894=>array(65,-76,907,842),53895=>array(65,-44,921,842),53896=>array(65,-62,917,842),53897=>array(65,-64,907,842),53898=>array(65,-64,908,842),53899=>array(65,-64,908,842),53900=>array(65,-69,923,842),53901=>array(65,-64,908,842),53902=>array(65,-64,908,842),53903=>array(65,-76,907,842),53904=>array(65,-62,907,842),53905=>array(65,-61,907,842),53906=>array(65,-69,922,842),53907=>array(65,-74,929,842),53908=>array(65,-69,927,842),53909=>array(65,-68,911,842),53910=>array(65,-72,929,842),53911=>array(65,-70,936,842),53912=>array(65,-66,908,842),53913=>array(65,-59,916,842),53914=>array(65,-60,928,842),53915=>array(65,-68,908,842),53916=>array(82,-64,924,784),53917=>array(79,-61,921,799),53918=>array(79,-61,921,799),53919=>array(79,-71,921,799),53920=>array(81,-46,922,789),53921=>array(79,-68,921,799),53922=>array(79,-74,921,799),53923=>array(79,-44,921,799),53924=>array(79,-62,921,799),53925=>array(79,-64,921,799),53926=>array(79,-64,921,799),53927=>array(79,-63,921,799),53928=>array(79,-68,921,799),53929=>array(79,-64,921,799),53930=>array(79,-63,921,799),53931=>array(79,-74,921,799),53932=>array(79,-62,921,799),53933=>array(79,-61,921,799),53934=>array(79,-69,921,799),53935=>array(79,-74,921,799),53936=>array(79,-69,921,799),53937=>array(79,-68,921,799),53938=>array(79,-72,921,799),53939=>array(79,-70,921,799),53940=>array(79,-66,921,799),53941=>array(79,-59,921,799),53942=>array(79,-60,921,799),53943=>array(79,-68,921,799),53944=>array(57,52,943,719),53945=>array(79,-61,922,796),53946=>array(79,-61,922,796),53947=>array(79,-71,922,796),53948=>array(79,-46,921,791),53949=>array(79,-68,922,796),53950=>array(79,-74,922,796),53951=>array(79,-44,922,796),53952=>array(79,-62,922,796),53953=>array(79,-64,922,796),53954=>array(79,-64,922,796),53955=>array(79,-63,922,796),53956=>array(79,-68,922,796),53957=>array(79,-64,922,796),53958=>array(79,-63,922,796),53959=>array(79,-74,922,796),53960=>array(79,-62,922,796),53961=>array(79,-61,922,796),53962=>array(79,-69,922,796),53963=>array(79,-74,922,796),53964=>array(79,-69,922,796),53965=>array(79,-68,922,796),53966=>array(79,-72,922,796),53967=>array(79,-70,922,796),53968=>array(79,-66,922,796),53969=>array(79,-59,922,796),53970=>array(79,-60,922,796),53971=>array(79,-68,922,796),53972=>array(67,-69,907,842),53973=>array(65,-61,907,842),53974=>array(65,-61,907,842),53975=>array(65,-71,931,842),53976=>array(65,-46,907,842),53977=>array(65,-68,912,842),53978=>array(65,-76,907,842),53979=>array(65,-44,921,842),53980=>array(65,-62,917,842),53981=>array(65,-64,907,842),53982=>array(65,-64,908,842),53983=>array(65,-64,908,842),53984=>array(65,-69,923,842),53985=>array(65,-64,908,842),53986=>array(65,-64,908,842),53987=>array(65,-76,907,842),53988=>array(65,-62,907,842),53989=>array(65,-61,907,842),53990=>array(65,-69,922,842),53991=>array(65,-74,929,842),53992=>array(65,-69,927,842),53993=>array(65,-68,911,842),53994=>array(65,-72,929,842),53995=>array(65,-70,936,842),53996=>array(65,-66,908,842),53997=>array(65,-59,916,842),53998=>array(65,-60,928,842),53999=>array(65,-68,908,842),54000=>array(125,-69,907,842),54001=>array(130,-61,907,842),54002=>array(130,-61,907,842),54003=>array(130,-71,931,842),54004=>array(125,-46,907,842),54005=>array(130,-68,912,842),54006=>array(130,-76,907,842),54007=>array(130,-44,921,842),54008=>array(130,-62,917,842),54009=>array(130,-64,907,842),54010=>array(130,-64,908,842),54011=>array(130,-64,908,842),54012=>array(130,-69,923,842),54013=>array(130,-64,908,842),54014=>array(130,-64,908,842),54015=>array(130,-76,907,842),54016=>array(130,-62,907,842),54017=>array(130,-61,907,842),54018=>array(130,-69,922,842),54019=>array(130,-74,929,842),54020=>array(130,-69,927,842),54021=>array(130,-68,911,842),54022=>array(130,-72,929,842),54023=>array(130,-70,936,842),54024=>array(130,-66,908,842),54025=>array(130,-59,916,842),54026=>array(130,-60,928,842),54027=>array(130,-68,908,842),54028=>array(84,-69,936,842),54029=>array(66,-59,936,842),54030=>array(66,-61,936,842),54031=>array(66,-71,936,842),54032=>array(78,-45,936,842),54033=>array(66,-69,936,842),54034=>array(66,-76,936,842),54035=>array(66,-44,936,842),54036=>array(66,-62,936,842),54037=>array(66,-64,936,842),54038=>array(66,-64,936,842),54039=>array(66,-64,936,842),54040=>array(66,-70,936,842),54041=>array(66,-64,936,842),54042=>array(66,-64,936,842),54043=>array(66,-76,936,842),54044=>array(66,-62,936,842),54045=>array(66,-61,936,842),54046=>array(66,-70,936,842),54047=>array(66,-74,936,842),54048=>array(66,-69,936,842),54049=>array(66,-67,936,842),54050=>array(66,-72,936,842),54051=>array(66,-71,936,842),54052=>array(66,-66,936,842),54053=>array(66,-59,936,842),54054=>array(66,-60,936,842),54055=>array(66,-69,936,842),54056=>array(73,-69,907,842),54057=>array(83,-61,907,842),54058=>array(83,-61,907,842),54059=>array(83,-71,931,842),54060=>array(78,-46,907,842),54061=>array(83,-68,912,842),54062=>array(83,-76,907,842),54063=>array(83,-44,921,842),54064=>array(83,-62,917,842),54065=>array(83,-64,907,842),54066=>array(83,-64,908,842),54067=>array(83,-64,908,842),54068=>array(83,-69,923,842),54069=>array(83,-64,908,842),54070=>array(83,-64,908,842),54071=>array(83,-76,907,842),54072=>array(83,-62,907,842),54073=>array(83,-61,907,842),54074=>array(83,-69,922,842),54075=>array(83,-74,929,842),54076=>array(83,-69,927,842),54077=>array(83,-68,911,842),54078=>array(83,-72,929,842),54079=>array(83,-70,936,842),54080=>array(83,-66,908,842),54081=>array(83,-59,916,842),54082=>array(83,-60,928,842),54083=>array(83,-68,908,842),54084=>array(84,-68,935,843),54085=>array(66,-59,936,842),54086=>array(66,-61,936,842),54087=>array(66,-71,936,842),54088=>array(78,-45,936,842),54089=>array(66,-69,936,842),54090=>array(66,-76,936,842),54091=>array(66,-44,936,842),54092=>array(66,-62,936,842),54093=>array(66,-64,936,842),54094=>array(66,-64,936,842),54095=>array(66,-64,936,842),54096=>array(66,-70,936,842),54097=>array(66,-64,936,842),54098=>array(66,-64,936,842),54099=>array(66,-76,936,842),54100=>array(66,-62,936,842),54101=>array(66,-61,936,842),54102=>array(66,-70,936,842),54103=>array(66,-74,936,842),54104=>array(66,-69,936,842),54105=>array(66,-67,936,842),54106=>array(66,-72,936,842),54107=>array(66,-71,936,842),54108=>array(66,-66,936,842),54109=>array(66,-59,936,842),54110=>array(66,-60,936,842),54111=>array(66,-69,936,842),54112=>array(73,-69,907,842),54113=>array(83,-61,907,842),54114=>array(83,-61,907,842),54115=>array(83,-71,931,842),54116=>array(78,-46,907,842),54117=>array(83,-68,912,842),54118=>array(83,-76,907,842),54119=>array(83,-44,921,842),54120=>array(83,-62,917,842),54121=>array(83,-64,907,842),54122=>array(83,-64,908,842),54123=>array(83,-64,908,842),54124=>array(83,-69,923,842),54125=>array(83,-64,908,842),54126=>array(83,-64,908,842),54127=>array(83,-76,907,842),54128=>array(83,-62,907,842),54129=>array(83,-61,907,842),54130=>array(83,-69,922,842),54131=>array(83,-74,929,842),54132=>array(83,-69,927,842),54133=>array(83,-68,911,842),54134=>array(83,-72,929,842),54135=>array(83,-70,936,842),54136=>array(83,-66,908,842),54137=>array(83,-59,916,842),54138=>array(83,-60,928,842),54139=>array(83,-68,908,842),54140=>array(84,-70,907,841),54141=>array(66,-61,907,841),54142=>array(66,-61,907,841),54143=>array(66,-71,931,841),54144=>array(78,-46,907,841),54145=>array(66,-68,912,841),54146=>array(66,-76,907,841),54147=>array(66,-44,921,841),54148=>array(66,-62,917,841),54149=>array(66,-64,907,841),54150=>array(66,-64,908,841),54151=>array(66,-64,908,841),54152=>array(66,-69,923,841),54153=>array(66,-64,908,841),54154=>array(66,-64,908,841),54155=>array(66,-76,906,841),54156=>array(66,-62,907,841),54157=>array(66,-61,907,841),54158=>array(66,-69,922,841),54159=>array(66,-74,929,841),54160=>array(66,-69,927,841),54161=>array(66,-68,911,841),54162=>array(66,-72,929,841),54163=>array(66,-70,936,841),54164=>array(66,-66,908,841),54165=>array(66,-59,916,841),54166=>array(66,-60,928,841),54167=>array(66,-68,908,841),54168=>array(63,-68,907,843),54169=>array(65,-61,907,843),54170=>array(65,-61,907,843),54171=>array(65,-71,931,843),54172=>array(83,-46,907,843),54173=>array(65,-68,912,843),54174=>array(65,-76,907,843),54175=>array(65,-44,921,843),54176=>array(65,-62,917,843),54177=>array(65,-64,907,843),54178=>array(65,-64,908,843),54179=>array(65,-64,908,843),54180=>array(65,-69,923,843),54181=>array(65,-64,908,843),54182=>array(65,-64,908,843),54183=>array(65,-76,907,843),54184=>array(65,-62,907,843),54185=>array(65,-61,907,843),54186=>array(65,-69,922,843),54187=>array(65,-74,929,843),54188=>array(65,-69,927,843),54189=>array(65,-68,911,843),54190=>array(65,-72,929,843),54191=>array(65,-70,936,843),54192=>array(65,-66,908,843),54193=>array(65,-59,916,843),54194=>array(65,-60,928,843),54195=>array(65,-68,908,843),54196=>array(74,-70,907,842),54197=>array(56,-61,908,842),54198=>array(56,-61,908,842),54199=>array(56,-71,931,842),54200=>array(68,-46,907,842),54201=>array(56,-68,912,842),54202=>array(56,-76,908,842),54203=>array(56,-44,921,842),54204=>array(56,-62,917,842),54205=>array(56,-64,908,842),54206=>array(56,-64,908,842),54207=>array(56,-64,908,842),54208=>array(56,-69,923,842),54209=>array(56,-64,908,842),54210=>array(56,-64,908,842),54211=>array(56,-76,908,842),54212=>array(56,-62,908,842),54213=>array(56,-61,908,842),54214=>array(56,-69,922,842),54215=>array(56,-74,929,842),54216=>array(56,-69,927,842),54217=>array(56,-68,911,842),54218=>array(56,-72,929,842),54219=>array(56,-70,936,842),54220=>array(56,-66,908,842),54221=>array(56,-59,916,842),54222=>array(56,-60,928,842),54223=>array(56,-68,908,842),54224=>array(63,-68,907,843),54225=>array(65,-61,907,843),54226=>array(65,-61,907,843),54227=>array(65,-71,931,843),54228=>array(83,-46,907,843),54229=>array(65,-68,912,843),54230=>array(65,-76,907,843),54231=>array(65,-44,921,843),54232=>array(65,-62,917,843),54233=>array(65,-64,907,843),54234=>array(65,-64,908,843),54235=>array(65,-64,908,843),54236=>array(65,-69,923,843),54237=>array(65,-64,908,843),54238=>array(65,-64,908,843),54239=>array(65,-76,907,843),54240=>array(65,-62,907,843),54241=>array(65,-61,907,843),54242=>array(65,-69,922,843),54243=>array(65,-74,929,843),54244=>array(65,-69,927,843),54245=>array(65,-68,911,843),54246=>array(65,-72,929,843),54247=>array(65,-70,936,843),54248=>array(65,-66,908,843),54249=>array(65,-59,916,843),54250=>array(65,-60,928,843),54251=>array(65,-68,908,843),54252=>array(62,22,938,724),54253=>array(79,-61,921,799),54254=>array(79,-61,921,799),54255=>array(79,-71,921,799),54256=>array(79,-46,922,799),54257=>array(79,-68,921,799),54258=>array(79,-74,921,799),54259=>array(79,-44,921,799),54260=>array(79,-62,921,799),54261=>array(79,-64,921,799),54262=>array(79,-64,921,799),54263=>array(79,-63,921,799),54264=>array(79,-68,921,799),54265=>array(79,-64,921,799),54266=>array(79,-63,921,799),54267=>array(79,-74,921,799),54268=>array(79,-62,921,799),54269=>array(79,-61,921,799),54270=>array(79,-69,921,799),54271=>array(79,-74,921,799),54272=>array(79,-69,921,799),54273=>array(79,-68,921,799),54274=>array(79,-72,921,799),54275=>array(79,-70,921,799),54276=>array(79,-66,921,799),54277=>array(79,-59,921,799),54278=>array(79,-60,921,799),54279=>array(79,-68,921,799),54280=>array(68,-69,936,842),54281=>array(77,-59,936,842),54282=>array(77,-61,936,842),54283=>array(77,-71,936,842),54284=>array(77,-45,936,842),54285=>array(77,-69,936,842),54286=>array(77,-76,936,842),54287=>array(77,-44,936,842),54288=>array(77,-62,936,842),54289=>array(77,-64,936,842),54290=>array(77,-64,936,842),54291=>array(77,-64,936,842),54292=>array(77,-70,936,842),54293=>array(77,-64,936,842),54294=>array(77,-64,936,842),54295=>array(77,-76,936,842),54296=>array(77,-62,936,842),54297=>array(77,-61,936,842),54298=>array(77,-70,936,842),54299=>array(77,-74,936,842),54300=>array(77,-69,936,842),54301=>array(77,-67,936,842),54302=>array(77,-72,936,842),54303=>array(77,-71,936,842),54304=>array(77,-66,936,842),54305=>array(77,-59,936,842),54306=>array(77,-60,936,842),54307=>array(77,-69,936,842),54308=>array(59,-69,907,842),54309=>array(77,-61,907,842),54310=>array(77,-61,907,842),54311=>array(77,-71,931,842),54312=>array(67,-46,907,842),54313=>array(77,-68,912,842),54314=>array(77,-76,907,842),54315=>array(77,-44,921,842),54316=>array(77,-62,917,842),54317=>array(77,-64,907,842),54318=>array(77,-64,908,842),54319=>array(77,-64,908,842),54320=>array(77,-69,923,842),54321=>array(77,-64,908,842),54322=>array(77,-64,908,842),54323=>array(77,-76,907,842),54324=>array(77,-62,907,842),54325=>array(77,-61,907,842),54326=>array(77,-69,922,842),54327=>array(77,-74,929,842),54328=>array(77,-69,927,842),54329=>array(77,-68,911,842),54330=>array(77,-72,929,842),54331=>array(77,-70,936,842),54332=>array(77,-66,908,842),54333=>array(77,-59,916,842),54334=>array(77,-60,928,842),54335=>array(77,-68,908,842),54336=>array(53,-68,908,843),54337=>array(65,-61,907,842),54338=>array(65,-61,907,842),54339=>array(65,-71,931,842),54340=>array(65,-46,907,842),54341=>array(65,-68,912,842),54342=>array(65,-76,907,842),54343=>array(65,-44,921,842),54344=>array(65,-62,917,842),54345=>array(65,-64,907,842),54346=>array(65,-64,908,842),54347=>array(65,-64,908,842),54348=>array(65,-69,923,842),54349=>array(65,-64,908,842),54350=>array(65,-64,908,842),54351=>array(65,-76,907,842),54352=>array(65,-62,907,842),54353=>array(65,-61,907,842),54354=>array(65,-69,922,842),54355=>array(65,-74,929,842),54356=>array(65,-69,927,842),54357=>array(65,-68,911,842),54358=>array(65,-72,929,842),54359=>array(65,-70,936,842),54360=>array(65,-66,908,842),54361=>array(65,-59,916,842),54362=>array(65,-60,928,842),54363=>array(65,-68,908,842),54364=>array(60,17,940,739),54365=>array(79,-61,921,799),54366=>array(79,-61,921,799),54367=>array(79,-71,921,799),54368=>array(79,-46,921,799),54369=>array(79,-68,921,799),54370=>array(79,-74,921,799),54371=>array(79,-44,921,799),54372=>array(79,-62,921,799),54373=>array(79,-64,921,799),54374=>array(79,-64,921,799),54375=>array(79,-63,921,799),54376=>array(79,-68,921,799),54377=>array(79,-64,921,799),54378=>array(79,-63,921,799),54379=>array(79,-74,921,799),54380=>array(79,-62,921,799),54381=>array(79,-61,921,799),54382=>array(79,-69,921,799),54383=>array(79,-74,921,799),54384=>array(79,-69,921,799),54385=>array(79,-68,921,799),54386=>array(79,-72,921,799),54387=>array(79,-70,921,799),54388=>array(79,-66,921,799),54389=>array(79,-59,921,799),54390=>array(79,-60,921,799),54391=>array(79,-68,921,799),54392=>array(79,-64,921,794),54393=>array(79,-61,921,799),54394=>array(79,-61,921,799),54395=>array(79,-71,921,799),54396=>array(79,-46,921,799),54397=>array(79,-68,921,799),54398=>array(79,-74,921,799),54399=>array(79,-44,921,799),54400=>array(79,-62,921,799),54401=>array(79,-64,921,799),54402=>array(79,-64,921,799),54403=>array(79,-63,921,799),54404=>array(79,-68,921,799),54405=>array(79,-64,921,799),54406=>array(79,-63,921,799),54407=>array(79,-74,921,799),54408=>array(79,-62,921,799),54409=>array(79,-61,921,799),54410=>array(79,-69,921,799),54411=>array(79,-74,921,799),54412=>array(79,-69,921,799),54413=>array(79,-68,921,799),54414=>array(79,-72,921,799),54415=>array(79,-70,921,799),54416=>array(79,-66,921,799),54417=>array(79,-59,921,799),54418=>array(79,-60,921,799),54419=>array(79,-68,921,799),54420=>array(67,-65,882,841),54421=>array(72,-61,907,836),54422=>array(72,-61,907,836),54423=>array(72,-71,931,836),54424=>array(75,-46,907,841),54425=>array(72,-68,912,836),54426=>array(72,-76,907,836),54427=>array(72,-44,921,836),54428=>array(72,-62,917,836),54429=>array(72,-64,907,836),54430=>array(72,-64,908,836),54431=>array(72,-64,908,836),54432=>array(72,-69,923,836),54433=>array(72,-64,908,836),54434=>array(72,-64,908,836),54435=>array(72,-76,906,836),54436=>array(72,-62,907,836),54437=>array(72,-61,907,836),54438=>array(72,-69,922,836),54439=>array(72,-74,929,836),54440=>array(72,-69,927,836),54441=>array(72,-68,911,836),54442=>array(72,-72,929,836),54443=>array(72,-70,936,836),54444=>array(72,-66,908,836),54445=>array(72,-59,916,836),54446=>array(72,-60,928,836),54447=>array(72,-68,908,836),54448=>array(62,-63,912,843),54449=>array(70,-61,907,838),54450=>array(70,-61,907,838),54451=>array(70,-71,931,838),54452=>array(76,-46,907,843),54453=>array(70,-68,912,838),54454=>array(70,-76,907,838),54455=>array(70,-44,921,838),54456=>array(70,-62,917,838),54457=>array(70,-64,907,838),54458=>array(70,-64,908,838),54459=>array(70,-64,908,838),54460=>array(70,-69,923,838),54461=>array(70,-64,908,838),54462=>array(70,-64,908,838),54463=>array(70,-76,906,838),54464=>array(70,-62,907,838),54465=>array(70,-61,907,838),54466=>array(70,-69,922,838),54467=>array(70,-74,929,838),54468=>array(70,-69,927,838),54469=>array(70,-68,911,838),54470=>array(70,-72,929,838),54471=>array(70,-70,936,838),54472=>array(70,-66,908,838),54473=>array(70,-59,916,838),54474=>array(70,-60,928,838),54475=>array(70,-68,908,838),54476=>array(71,-69,907,842),54477=>array(65,-61,907,842),54478=>array(65,-61,907,842),54479=>array(65,-71,931,842),54480=>array(65,-46,907,842),54481=>array(65,-68,912,842),54482=>array(65,-76,907,842),54483=>array(65,-44,921,842),54484=>array(65,-62,917,842),54485=>array(65,-64,907,842),54486=>array(65,-64,908,842),54487=>array(65,-64,908,842),54488=>array(65,-69,923,842),54489=>array(65,-64,908,842),54490=>array(65,-64,908,842),54491=>array(65,-76,907,842),54492=>array(65,-62,907,842),54493=>array(65,-61,907,842),54494=>array(65,-69,922,842),54495=>array(65,-74,929,842),54496=>array(65,-69,927,842),54497=>array(65,-68,911,842),54498=>array(65,-72,929,842),54499=>array(65,-70,936,842),54500=>array(65,-66,908,842),54501=>array(65,-59,916,842),54502=>array(65,-60,928,842),54503=>array(65,-68,908,842),54504=>array(79,-64,921,794),54505=>array(79,-61,921,799),54506=>array(79,-61,921,799),54507=>array(79,-71,921,799),54508=>array(81,-46,922,799),54509=>array(79,-68,921,799),54510=>array(79,-74,921,799),54511=>array(79,-44,921,799),54512=>array(79,-62,921,799),54513=>array(79,-64,921,799),54514=>array(79,-64,921,799),54515=>array(79,-63,921,799),54516=>array(79,-68,921,799),54517=>array(79,-64,921,799),54518=>array(79,-63,921,799),54519=>array(79,-74,921,799),54520=>array(79,-62,921,799),54521=>array(79,-61,921,799),54522=>array(79,-69,921,799),54523=>array(79,-74,921,799),54524=>array(79,-69,921,799),54525=>array(79,-68,921,799),54526=>array(79,-72,921,799),54527=>array(79,-70,921,799),54528=>array(79,-66,921,799),54529=>array(79,-59,921,799),54530=>array(79,-60,921,799),54531=>array(79,-68,921,799),54532=>array(57,52,943,724),54533=>array(79,-61,922,799),54534=>array(79,-61,922,799),54535=>array(79,-71,922,799),54536=>array(79,-46,921,799),54537=>array(79,-68,922,799),54538=>array(79,-74,922,799),54539=>array(79,-44,922,799),54540=>array(79,-62,922,799),54541=>array(79,-64,922,799),54542=>array(79,-64,922,799),54543=>array(79,-63,922,799),54544=>array(79,-68,922,799),54545=>array(79,-64,922,799),54546=>array(79,-63,922,799),54547=>array(79,-74,922,799),54548=>array(79,-62,922,799),54549=>array(79,-61,922,799),54550=>array(79,-69,922,799),54551=>array(79,-74,922,799),54552=>array(79,-69,922,799),54553=>array(79,-68,922,799),54554=>array(79,-72,922,799),54555=>array(79,-70,922,799),54556=>array(79,-66,922,799),54557=>array(79,-59,922,799),54558=>array(79,-60,922,799),54559=>array(79,-68,922,799),54560=>array(67,-69,907,842),54561=>array(65,-61,907,842),54562=>array(65,-61,907,842),54563=>array(65,-71,931,842),54564=>array(65,-46,907,842),54565=>array(65,-68,912,842),54566=>array(65,-76,907,842),54567=>array(65,-44,921,842),54568=>array(65,-62,917,842),54569=>array(65,-64,907,842),54570=>array(65,-64,908,842),54571=>array(65,-64,908,842),54572=>array(65,-69,923,842),54573=>array(65,-64,908,842),54574=>array(65,-64,908,842),54575=>array(65,-76,907,842),54576=>array(65,-62,907,842),54577=>array(65,-61,907,842),54578=>array(65,-69,922,842),54579=>array(65,-74,929,842),54580=>array(65,-69,927,842),54581=>array(65,-68,911,842),54582=>array(65,-72,929,842),54583=>array(65,-70,936,842),54584=>array(65,-66,908,842),54585=>array(65,-59,916,842),54586=>array(65,-60,928,842),54587=>array(65,-68,908,842),54588=>array(85,-69,907,842),54589=>array(86,-61,907,842),54590=>array(86,-61,907,842),54591=>array(86,-71,931,842),54592=>array(86,-46,907,842),54593=>array(86,-68,912,842),54594=>array(86,-76,907,842),54595=>array(86,-44,921,842),54596=>array(86,-62,917,842),54597=>array(86,-64,907,842),54598=>array(86,-64,908,842),54599=>array(86,-64,908,842),54600=>array(86,-69,923,842),54601=>array(86,-64,908,842),54602=>array(86,-64,908,842),54603=>array(86,-76,907,842),54604=>array(86,-62,907,842),54605=>array(86,-61,907,842),54606=>array(86,-69,922,842),54607=>array(86,-74,929,842),54608=>array(86,-69,927,842),54609=>array(86,-68,911,842),54610=>array(86,-72,929,842),54611=>array(86,-70,936,842),54612=>array(86,-66,908,842),54613=>array(86,-59,916,842),54614=>array(86,-60,928,842),54615=>array(86,-68,908,842),54616=>array(94,-69,936,842),54617=>array(85,-59,936,842),54618=>array(85,-61,936,842),54619=>array(85,-71,936,842),54620=>array(85,-45,936,842),54621=>array(85,-69,936,842),54622=>array(85,-76,936,842),54623=>array(85,-44,936,842),54624=>array(85,-62,936,842),54625=>array(85,-64,936,842),54626=>array(85,-64,936,842),54627=>array(85,-64,936,842),54628=>array(85,-70,936,842),54629=>array(85,-64,936,842),54630=>array(85,-64,936,842),54631=>array(85,-76,936,842),54632=>array(85,-62,936,842),54633=>array(85,-61,936,842),54634=>array(85,-70,936,842),54635=>array(85,-74,936,842),54636=>array(85,-69,936,842),54637=>array(85,-67,936,842),54638=>array(85,-72,936,842),54639=>array(85,-71,936,842),54640=>array(85,-66,936,842),54641=>array(85,-59,936,842),54642=>array(85,-60,936,842),54643=>array(85,-69,936,842),54644=>array(79,-69,907,842),54645=>array(85,-61,907,842),54646=>array(85,-61,907,842),54647=>array(85,-71,931,842),54648=>array(85,-46,907,842),54649=>array(85,-68,912,842),54650=>array(85,-76,907,842),54651=>array(85,-44,921,842),54652=>array(85,-62,917,842),54653=>array(85,-64,907,842),54654=>array(85,-64,908,842),54655=>array(85,-64,908,842),54656=>array(85,-69,923,842),54657=>array(85,-64,908,842),54658=>array(85,-64,908,842),54659=>array(85,-76,907,842),54660=>array(85,-62,907,842),54661=>array(85,-61,907,842),54662=>array(85,-69,922,842),54663=>array(85,-74,929,842),54664=>array(85,-69,927,842),54665=>array(85,-68,911,842),54666=>array(85,-72,929,842),54667=>array(85,-70,936,842),54668=>array(85,-66,908,842),54669=>array(85,-59,916,842),54670=>array(85,-60,928,842),54671=>array(85,-68,908,842),54672=>array(94,-68,935,843),54673=>array(85,-59,936,842),54674=>array(85,-61,936,842),54675=>array(85,-71,936,842),54676=>array(85,-45,936,842),54677=>array(85,-69,936,842),54678=>array(85,-76,936,842),54679=>array(85,-44,936,842),54680=>array(85,-62,936,842),54681=>array(85,-64,936,842),54682=>array(85,-64,936,842),54683=>array(85,-64,936,842),54684=>array(85,-70,936,842),54685=>array(85,-64,936,842),54686=>array(85,-64,936,842),54687=>array(85,-76,936,842),54688=>array(85,-62,936,842),54689=>array(85,-61,936,842),54690=>array(85,-70,936,842),54691=>array(85,-74,936,842),54692=>array(85,-69,936,842),54693=>array(85,-67,936,842),54694=>array(85,-72,936,842),54695=>array(85,-71,936,842),54696=>array(85,-66,936,842),54697=>array(85,-59,936,842),54698=>array(85,-60,936,842),54699=>array(85,-69,936,842),54700=>array(79,-69,907,842),54701=>array(85,-61,907,842),54702=>array(85,-61,907,842),54703=>array(85,-71,931,842),54704=>array(85,-46,907,842),54705=>array(85,-68,912,842),54706=>array(85,-76,907,842),54707=>array(85,-44,921,842),54708=>array(85,-62,917,842),54709=>array(85,-64,907,842),54710=>array(85,-64,908,842),54711=>array(85,-64,908,842),54712=>array(85,-69,923,842),54713=>array(85,-64,908,842),54714=>array(85,-64,908,842),54715=>array(85,-76,907,842),54716=>array(85,-62,907,842),54717=>array(85,-61,907,842),54718=>array(85,-69,922,842),54719=>array(85,-74,929,842),54720=>array(85,-69,927,842),54721=>array(85,-68,911,842),54722=>array(85,-72,929,842),54723=>array(85,-70,936,842),54724=>array(85,-66,908,842),54725=>array(85,-59,916,842),54726=>array(85,-60,928,842),54727=>array(85,-68,908,842),54728=>array(79,-70,907,841),54729=>array(85,-61,907,842),54730=>array(85,-61,907,842),54731=>array(85,-71,931,842),54732=>array(85,-46,907,841),54733=>array(85,-68,912,842),54734=>array(85,-76,907,842),54735=>array(85,-44,921,842),54736=>array(85,-62,917,842),54737=>array(85,-64,907,842),54738=>array(85,-64,908,842),54739=>array(85,-64,908,842),54740=>array(85,-69,923,842),54741=>array(85,-64,908,842),54742=>array(85,-64,908,842),54743=>array(85,-76,906,842),54744=>array(85,-62,907,842),54745=>array(85,-61,907,842),54746=>array(85,-69,922,842),54747=>array(85,-74,929,842),54748=>array(85,-69,927,842),54749=>array(85,-68,911,842),54750=>array(85,-72,929,842),54751=>array(85,-70,936,842),54752=>array(85,-66,908,842),54753=>array(85,-59,916,842),54754=>array(85,-60,928,842),54755=>array(85,-68,908,842),54756=>array(69,-68,907,843),54757=>array(50,-61,907,843),54758=>array(50,-61,907,843),54759=>array(50,-71,931,843),54760=>array(60,-46,907,843),54761=>array(50,-68,912,843),54762=>array(50,-76,907,843),54763=>array(50,-44,921,843),54764=>array(50,-62,917,843),54765=>array(50,-64,907,843),54766=>array(50,-64,908,843),54767=>array(50,-64,908,843),54768=>array(50,-69,923,843),54769=>array(50,-64,908,843),54770=>array(50,-64,908,843),54771=>array(50,-76,907,843),54772=>array(50,-62,907,843),54773=>array(50,-61,907,843),54774=>array(50,-69,922,843),54775=>array(50,-74,929,843),54776=>array(50,-69,927,843),54777=>array(50,-68,911,843),54778=>array(50,-72,929,843),54779=>array(50,-70,936,843),54780=>array(50,-66,908,843),54781=>array(50,-59,916,843),54782=>array(50,-60,928,843),54783=>array(50,-68,908,843),54784=>array(89,-70,907,842),54785=>array(75,-61,907,842),54786=>array(75,-61,907,842),54787=>array(75,-71,931,842),54788=>array(85,-46,907,842),54789=>array(75,-68,912,842),54790=>array(75,-76,907,842),54791=>array(75,-44,921,842),54792=>array(75,-62,917,842),54793=>array(75,-64,907,842),54794=>array(75,-64,908,842),54795=>array(75,-64,908,842),54796=>array(75,-69,923,842),54797=>array(75,-64,908,842),54798=>array(75,-64,908,842),54799=>array(75,-76,907,842),54800=>array(75,-62,907,842),54801=>array(75,-61,907,842),54802=>array(75,-69,922,842),54803=>array(75,-74,929,842),54804=>array(75,-69,927,842),54805=>array(75,-68,911,842),54806=>array(75,-72,929,842),54807=>array(75,-70,936,842),54808=>array(75,-66,908,842),54809=>array(75,-59,916,842),54810=>array(75,-60,928,842),54811=>array(75,-68,908,842),54812=>array(49,-68,907,843),54813=>array(50,-61,907,843),54814=>array(50,-61,907,843),54815=>array(50,-71,931,843),54816=>array(50,-46,907,843),54817=>array(50,-68,912,843),54818=>array(50,-76,907,843),54819=>array(50,-44,921,843),54820=>array(50,-62,917,843),54821=>array(50,-64,907,843),54822=>array(50,-64,908,843),54823=>array(50,-64,908,843),54824=>array(50,-69,923,843),54825=>array(50,-64,908,843),54826=>array(50,-64,908,843),54827=>array(50,-76,907,843),54828=>array(50,-62,907,843),54829=>array(50,-61,907,843),54830=>array(50,-69,922,843),54831=>array(50,-74,929,843),54832=>array(50,-69,927,843),54833=>array(50,-68,911,843),54834=>array(50,-72,929,843),54835=>array(50,-70,936,843),54836=>array(50,-66,908,843),54837=>array(50,-59,916,843),54838=>array(50,-60,928,843),54839=>array(50,-68,908,843),54840=>array(62,7,938,764),54841=>array(79,-61,921,819),54842=>array(79,-61,921,819),54843=>array(79,-71,921,819),54844=>array(79,-46,922,819),54845=>array(79,-68,921,819),54846=>array(79,-74,921,819),54847=>array(79,-44,921,819),54848=>array(79,-62,921,819),54849=>array(79,-64,921,819),54850=>array(79,-64,921,819),54851=>array(79,-63,921,819),54852=>array(79,-68,921,819),54853=>array(79,-64,921,819),54854=>array(79,-63,921,819),54855=>array(79,-74,921,819),54856=>array(79,-62,921,819),54857=>array(79,-61,921,819),54858=>array(79,-69,921,819),54859=>array(79,-74,921,819),54860=>array(79,-69,921,819),54861=>array(79,-68,921,819),54862=>array(79,-72,921,819),54863=>array(79,-70,921,819),54864=>array(79,-66,921,819),54865=>array(79,-59,921,819),54866=>array(79,-60,921,819),54867=>array(79,-68,921,819),54868=>array(68,-69,936,842),54869=>array(77,-59,936,842),54870=>array(77,-61,936,842),54871=>array(77,-71,936,842),54872=>array(72,-45,936,842),54873=>array(77,-69,936,842),54874=>array(77,-76,936,842),54875=>array(77,-44,936,842),54876=>array(77,-62,936,842),54877=>array(77,-64,936,842),54878=>array(77,-64,936,842),54879=>array(77,-64,936,842),54880=>array(77,-70,936,842),54881=>array(77,-64,936,842),54882=>array(77,-64,936,842),54883=>array(77,-76,936,842),54884=>array(77,-62,936,842),54885=>array(77,-61,936,842),54886=>array(77,-70,936,842),54887=>array(77,-74,936,842),54888=>array(77,-69,936,842),54889=>array(77,-67,936,842),54890=>array(77,-72,936,842),54891=>array(77,-71,936,842),54892=>array(77,-66,936,842),54893=>array(77,-59,936,842),54894=>array(77,-60,936,842),54895=>array(77,-69,936,842),54896=>array(61,-69,907,842),54897=>array(77,-61,907,842),54898=>array(77,-61,907,842),54899=>array(77,-71,931,842),54900=>array(72,-46,907,842),54901=>array(77,-68,912,842),54902=>array(77,-76,907,842),54903=>array(77,-44,921,842),54904=>array(77,-62,917,842),54905=>array(77,-64,907,842),54906=>array(77,-64,908,842),54907=>array(77,-64,908,842),54908=>array(77,-69,923,842),54909=>array(77,-64,908,842),54910=>array(77,-64,908,842),54911=>array(77,-76,907,842),54912=>array(77,-62,907,842),54913=>array(77,-61,907,842),54914=>array(77,-69,922,842),54915=>array(77,-74,929,842),54916=>array(77,-69,927,842),54917=>array(77,-68,911,842),54918=>array(77,-72,929,842),54919=>array(77,-70,936,842),54920=>array(77,-66,908,842),54921=>array(77,-59,916,842),54922=>array(77,-60,928,842),54923=>array(77,-68,908,842),54924=>array(74,-69,907,842),54925=>array(65,-61,907,842),54926=>array(65,-61,907,842),54927=>array(65,-71,931,842),54928=>array(65,-46,907,842),54929=>array(65,-68,912,842),54930=>array(65,-76,907,842),54931=>array(65,-44,921,842),54932=>array(65,-62,917,842),54933=>array(65,-64,907,842),54934=>array(65,-64,908,842),54935=>array(65,-64,908,842),54936=>array(65,-69,923,842),54937=>array(65,-64,908,842),54938=>array(65,-64,908,842),54939=>array(65,-76,907,842),54940=>array(65,-62,907,842),54941=>array(65,-61,907,842),54942=>array(65,-69,922,842),54943=>array(65,-74,929,842),54944=>array(65,-69,927,842),54945=>array(65,-68,911,842),54946=>array(65,-72,929,842),54947=>array(65,-70,936,842),54948=>array(65,-66,908,842),54949=>array(65,-59,916,842),54950=>array(65,-60,928,842),54951=>array(65,-68,908,842),54952=>array(62,7,938,764),54953=>array(79,-61,921,819),54954=>array(79,-61,921,819),54955=>array(79,-71,921,819),54956=>array(79,-46,921,819),54957=>array(79,-68,921,819),54958=>array(79,-74,921,819),54959=>array(79,-44,921,819),54960=>array(79,-62,921,819),54961=>array(79,-64,921,819),54962=>array(79,-64,921,819),54963=>array(79,-63,921,819),54964=>array(79,-68,921,819),54965=>array(79,-64,921,819),54966=>array(79,-63,921,819),54967=>array(79,-74,921,819),54968=>array(79,-62,921,819),54969=>array(79,-61,921,819),54970=>array(79,-69,921,819),54971=>array(79,-74,921,819),54972=>array(79,-69,921,819),54973=>array(79,-68,921,819),54974=>array(79,-72,921,819),54975=>array(79,-70,921,819),54976=>array(79,-66,921,819),54977=>array(79,-59,921,819),54978=>array(79,-60,921,819),54979=>array(79,-68,921,819),54980=>array(79,-64,921,809),54981=>array(79,-61,921,819),54982=>array(79,-61,921,819),54983=>array(79,-71,921,819),54984=>array(79,-46,921,814),54985=>array(79,-68,921,819),54986=>array(79,-74,921,819),54987=>array(79,-44,921,819),54988=>array(79,-62,921,819),54989=>array(79,-64,921,819),54990=>array(79,-64,921,819),54991=>array(79,-63,921,819),54992=>array(79,-68,921,819),54993=>array(79,-64,921,819),54994=>array(79,-63,921,819),54995=>array(79,-74,921,819),54996=>array(79,-62,921,819),54997=>array(79,-61,921,819),54998=>array(79,-69,921,819),54999=>array(79,-74,921,819),55000=>array(79,-69,921,819),55001=>array(79,-68,921,819),55002=>array(79,-72,921,819),55003=>array(79,-70,921,819),55004=>array(79,-66,921,819),55005=>array(79,-59,921,819),55006=>array(79,-60,921,819),55007=>array(79,-68,921,819),55008=>array(70,-70,907,841),55009=>array(75,-61,909,843),55010=>array(75,-61,909,843),55011=>array(75,-71,931,843),55012=>array(76,-46,909,843),55013=>array(75,-68,912,843),55014=>array(75,-76,909,843),55015=>array(75,-44,921,843),55016=>array(75,-62,917,843),55017=>array(75,-64,909,843),55018=>array(75,-64,909,843),55019=>array(75,-64,909,843),55020=>array(75,-69,923,843),55021=>array(75,-64,909,843),55022=>array(75,-64,909,843),55023=>array(75,-76,909,843),55024=>array(75,-62,909,843),55025=>array(75,-61,909,843),55026=>array(75,-69,922,843),55027=>array(75,-74,929,843),55028=>array(75,-69,927,843),55029=>array(75,-68,911,843),55030=>array(75,-72,929,843),55031=>array(75,-70,936,843),55032=>array(75,-66,909,843),55033=>array(75,-59,916,843),55034=>array(75,-60,928,843),55035=>array(75,-68,909,843),55036=>array(63,-68,907,843),55037=>array(70,-61,907,843),55038=>array(70,-61,907,843),55039=>array(70,-71,931,843),55040=>array(76,-46,907,843),55041=>array(70,-68,912,843),55042=>array(70,-76,907,843),55043=>array(70,-44,921,843),55044=>array(70,-62,917,843),55045=>array(70,-64,907,843),55046=>array(70,-64,908,843),55047=>array(70,-64,908,843),55048=>array(70,-69,923,843),55049=>array(70,-64,908,843),55050=>array(70,-64,908,843),55051=>array(70,-76,907,843),55052=>array(70,-62,907,843),55053=>array(70,-61,907,843),55054=>array(70,-69,922,843),55055=>array(70,-74,929,843),55056=>array(70,-69,927,843),55057=>array(70,-68,911,843),55058=>array(70,-72,929,843),55059=>array(70,-70,936,843),55060=>array(70,-66,908,843),55061=>array(70,-59,916,843),55062=>array(70,-60,928,843),55063=>array(70,-68,908,843),55064=>array(70,-69,907,842),55065=>array(65,-61,907,842),55066=>array(65,-61,907,842),55067=>array(65,-71,931,842),55068=>array(65,-46,907,842),55069=>array(65,-68,912,842),55070=>array(65,-76,907,842),55071=>array(65,-44,921,842),55072=>array(65,-62,917,842),55073=>array(65,-64,907,842),55074=>array(65,-64,908,842),55075=>array(65,-64,908,842),55076=>array(65,-69,923,842),55077=>array(65,-64,908,842),55078=>array(65,-64,908,842),55079=>array(65,-76,907,842),55080=>array(65,-62,907,842),55081=>array(65,-61,907,842),55082=>array(65,-69,922,842),55083=>array(65,-74,929,842),55084=>array(65,-69,927,842),55085=>array(65,-68,911,842),55086=>array(65,-72,929,842),55087=>array(65,-70,936,842),55088=>array(65,-66,908,842),55089=>array(65,-59,916,842),55090=>array(65,-60,928,842),55091=>array(65,-68,908,842),55092=>array(87,-64,928,799),55093=>array(79,-61,921,819),55094=>array(79,-61,921,819),55095=>array(79,-71,921,819),55096=>array(79,-46,921,814),55097=>array(79,-68,921,819),55098=>array(79,-74,921,819),55099=>array(79,-44,921,819),55100=>array(79,-62,921,819),55101=>array(79,-64,921,819),55102=>array(79,-64,921,819),55103=>array(79,-63,921,819),55104=>array(79,-68,921,819),55105=>array(79,-64,921,819),55106=>array(79,-63,921,819),55107=>array(79,-74,921,819),55108=>array(79,-62,921,819),55109=>array(79,-61,921,819),55110=>array(79,-69,921,819),55111=>array(79,-74,921,819),55112=>array(79,-69,921,819),55113=>array(79,-68,921,819),55114=>array(79,-72,921,819),55115=>array(79,-70,921,819),55116=>array(79,-66,921,819),55117=>array(79,-59,921,819),55118=>array(79,-60,921,819),55119=>array(79,-68,921,819),55120=>array(52,42,948,744),55121=>array(79,-61,921,819),55122=>array(79,-61,921,819),55123=>array(79,-71,921,819),55124=>array(79,-46,921,815),55125=>array(79,-68,921,819),55126=>array(79,-74,921,819),55127=>array(79,-44,921,819),55128=>array(79,-62,921,819),55129=>array(79,-64,921,819),55130=>array(79,-64,921,819),55131=>array(79,-63,921,819),55132=>array(79,-68,921,819),55133=>array(79,-64,921,819),55134=>array(79,-63,921,819),55135=>array(79,-74,921,819),55136=>array(79,-62,921,819),55137=>array(79,-61,921,819),55138=>array(79,-69,921,819),55139=>array(79,-74,921,819),55140=>array(79,-69,921,819),55141=>array(79,-68,921,819),55142=>array(79,-72,921,819),55143=>array(79,-70,921,819),55144=>array(79,-66,921,819),55145=>array(79,-59,921,819),55146=>array(79,-60,921,819),55147=>array(79,-68,921,819),55148=>array(67,-69,907,842),55149=>array(65,-61,907,842),55150=>array(65,-61,907,842),55151=>array(65,-71,931,842),55152=>array(65,-46,907,842),55153=>array(65,-68,912,842),55154=>array(65,-76,907,842),55155=>array(65,-44,921,842),55156=>array(65,-62,917,842),55157=>array(65,-64,907,842),55158=>array(65,-64,908,842),55159=>array(65,-64,908,842),55160=>array(65,-69,923,842),55161=>array(65,-64,908,842),55162=>array(65,-64,908,842),55163=>array(65,-76,907,842),55164=>array(65,-62,907,842),55165=>array(65,-61,907,842),55166=>array(65,-69,922,842),55167=>array(65,-74,929,842),55168=>array(65,-69,927,842),55169=>array(65,-68,911,842),55170=>array(65,-72,929,842),55171=>array(65,-70,936,842),55172=>array(65,-66,908,842),55173=>array(65,-59,916,842),55174=>array(65,-60,928,842),55175=>array(65,-68,908,842),55176=>array(84,-69,907,842),55177=>array(101,-61,907,842),55178=>array(101,-61,907,842),55179=>array(101,-71,931,842),55180=>array(96,-46,907,842),55181=>array(101,-68,912,842),55182=>array(101,-76,907,842),55183=>array(101,-44,921,842),55184=>array(101,-62,917,842),55185=>array(101,-64,907,842),55186=>array(101,-64,908,842),55187=>array(101,-64,908,842),55188=>array(101,-69,923,842),55189=>array(101,-64,908,842),55190=>array(101,-64,908,842),55191=>array(101,-76,907,842),55192=>array(101,-62,907,842),55193=>array(101,-61,907,842),55194=>array(101,-69,922,842),55195=>array(101,-74,929,842),55196=>array(101,-69,927,842),55197=>array(101,-68,911,842),55198=>array(101,-72,929,842),55199=>array(101,-70,936,842),55200=>array(101,-66,908,842),55201=>array(101,-59,916,842),55202=>array(101,-60,928,842),55203=>array(101,-68,908,842),59393=>array(-54,0,248,634),59394=>array(20,-199,439,530),59395=>array(20,-199,439,530),59396=>array(-70,-12,436,716),59397=>array(-70,-12,436,716),59416=>array(7,637,299,1065),59492=>array(32,0,450,576),59495=>array(32,-1,452,577),59536=>array(38,0,459,770),59557=>array(-1,-221,404,556),59558=>array(-1,-221,481,393),59559=>array(62,-221,904,393),61441=>array(14,0,432,728),61442=>array(14,0,430,728),63232=>array(54,-5,477,560),63233=>array(-601,612,-216,775),63234=>array(-601,612,-216,800),63235=>array(-601,612,-171,800),63236=>array(-601,612,-216,800),63237=>array(-341,612,-283,785),63238=>array(-467,612,-173,819),63239=>array(-620,612,-180,810),63240=>array(-399,612,-226,785),63241=>array(-504,615,-192,832),63242=>array(-167,612,-109,785),63243=>array(-293,612,1,819),63244=>array(-342,612,98,810),63245=>array(-225,612,-52,785),63246=>array(-330,615,-18,832),63247=>array(54,-5,774,558),63248=>array(-563,631,-189,824),63249=>array(-422,609,-265,767),63250=>array(-623,603,-246,849),63251=>array(-274,858,-216,1031),63252=>array(-400,858,-106,1065),63253=>array(-449,858,-9,1056),63254=>array(-333,858,-159,1031),63255=>array(-437,861,-125,1078),63256=>array(-201,-206,-85,-34),63257=>array(-337,-206,-89,-34),63258=>array(-157,-115,-75,-33),63260=>array(111,-210,291,-73),63261=>array(17,-113,269,0),63744=>array(62,-12,931,835),63745=>array(48,-72,962,777),63746=>array(63,-71,935,832),63747=>array(66,-79,948,785),63748=>array(49,-62,926,811),63749=>array(123,-68,886,832),63750=>array(65,-51,902,840),63751=>array(37,-41,967,846),63752=>array(37,-41,967,846),63753=>array(43,-70,957,830),63754=>array(54,-21,960,856),63755=>array(112,-67,904,831),63756=>array(62,-62,960,848),63757=>array(32,-72,970,845),63758=>array(42,-67,985,854),63759=>array(38,-67,950,807),63760=>array(61,-80,954,835),63761=>array(33,-73,961,835),63762=>array(40,-71,973,822),63763=>array(52,-51,966,820),63764=>array(60,-64,959,847),63765=>array(57,-72,959,842),63766=>array(48,-75,968,839),63767=>array(45,-66,972,840),63768=>array(56,-68,970,835),63769=>array(51,-67,967,840),63770=>array(64,-62,972,839),63771=>array(49,-68,962,843),63772=>array(59,-71,883,815),63773=>array(35,-65,909,836),63774=>array(53,-70,923,830),63775=>array(72,-70,928,839),63776=>array(62,-67,958,846),63777=>array(59,-49,964,846),63778=>array(50,-73,964,837),63779=>array(56,-34,949,839),63780=>array(35,-68,952,836),63781=>array(49,-64,947,829),63782=>array(40,-65,956,848),63783=>array(47,-76,968,842),63784=>array(46,-60,949,837),63785=>array(49,-74,885,832),63786=>array(62,-63,962,829),63787=>array(37,-75,968,831),63788=>array(51,-65,930,832),63789=>array(63,-64,956,835),63790=>array(54,-71,966,849),63791=>array(52,-73,919,832),63792=>array(43,-67,954,835),63793=>array(30,-61,974,849),63794=>array(43,-71,954,830),63795=>array(40,-78,941,833),63796=>array(38,-39,923,832),63797=>array(59,-66,961,836),63798=>array(45,-77,929,841),63799=>array(29,-67,968,838),63800=>array(70,-62,965,817),63801=>array(51,-68,947,837),63802=>array(62,-67,948,849),63803=>array(36,-64,952,818),63804=>array(57,-69,958,840),63805=>array(34,-67,974,839),63806=>array(65,-52,935,840),63807=>array(57,-64,968,841),63808=>array(57,-67,949,829),63809=>array(55,-63,973,849),63810=>array(57,-24,950,849),63811=>array(48,-65,934,785),63812=>array(49,-62,964,855),63813=>array(43,-71,962,840),63814=>array(56,-65,944,833),63815=>array(52,-68,944,788),63816=>array(57,-63,976,839),63817=>array(105,-67,914,786),63818=>array(59,-28,949,783),63819=>array(46,-82,939,823),63820=>array(39,-70,949,831),63821=>array(48,-66,982,843),63822=>array(46,-67,956,800),63823=>array(51,-63,943,808),63824=>array(34,-65,942,839),63825=>array(99,-82,936,792),63826=>array(72,-65,917,829),63827=>array(68,-70,898,834),63828=>array(55,-65,973,833),63829=>array(41,-70,959,831),63830=>array(33,-57,967,835),63831=>array(34,-66,968,839),63832=>array(46,-65,954,831),63833=>array(95,-67,970,831),63834=>array(59,-66,961,841),63835=>array(60,-58,974,851),63836=>array(60,-64,959,847),63837=>array(53,-65,949,836),63838=>array(74,-73,939,777),63839=>array(69,-55,923,850),63840=>array(49,-25,959,830),63841=>array(72,-69,928,840),63842=>array(72,-74,926,784),63843=>array(45,-54,948,792),63844=>array(30,-55,956,850),63845=>array(42,-73,947,834),63846=>array(44,-67,970,843),63847=>array(71,-65,928,769),63848=>array(42,-32,972,829),63849=>array(60,-70,959,833),63850=>array(65,-69,946,835),63851=>array(30,-88,968,844),63852=>array(48,-30,949,830),63853=>array(53,-70,939,829),63854=>array(49,-70,965,839),63855=>array(57,-71,964,816),63856=>array(51,-72,967,824),63857=>array(57,-63,963,785),63858=>array(56,-73,946,824),63859=>array(45,-63,961,848),63860=>array(72,-65,931,827),63861=>array(41,-71,955,826),63862=>array(110,-66,962,839),63863=>array(65,-68,950,838),63864=>array(60,-68,953,783),63865=>array(63,-63,961,830),63866=>array(53,-68,956,808),63867=>array(40,-72,954,818),63868=>array(85,-61,963,820),63869=>array(53,-60,960,830),63870=>array(53,-30,947,789),63871=>array(27,-76,929,825),63872=>array(180,-77,840,772),63873=>array(86,-53,911,836),63874=>array(22,-62,961,846),63875=>array(33,-67,969,839),63876=>array(43,-71,967,841),63877=>array(32,-63,962,799),63878=>array(117,-65,907,790),63879=>array(26,-73,964,789),63880=>array(43,-67,952,814),63881=>array(49,-68,946,832),63882=>array(70,-56,863,824),63883=>array(37,-62,947,796),63884=>array(41,-67,930,779),63885=>array(50,-65,970,831),63886=>array(86,-68,917,841),63887=>array(36,-76,958,832),63888=>array(42,-54,961,841),63889=>array(37,-60,970,849),63890=>array(37,-56,963,833),63891=>array(52,-67,962,830),63892=>array(41,-64,962,833),63893=>array(47,-69,968,834),63894=>array(34,-66,967,839),63895=>array(42,-65,946,842),63896=>array(48,-62,944,831),63897=>array(37,-56,951,839),63898=>array(37,-56,951,830),63899=>array(18,-53,969,847),63900=>array(83,-76,901,832),63901=>array(67,-63,942,838),63902=>array(103,-64,898,785),63903=>array(58,-61,954,831),63904=>array(44,-73,955,828),63905=>array(57,-71,964,816),63906=>array(40,-59,966,839),63907=>array(30,-58,963,846),63908=>array(27,-64,961,853),63909=>array(40,-67,977,854),63910=>array(31,-53,963,854),63911=>array(36,-74,971,842),63912=>array(38,-67,961,846),63913=>array(105,-64,897,788),63914=>array(80,-68,917,844),63915=>array(40,-73,961,832),63916=>array(39,-68,962,840),63917=>array(37,-68,964,840),63918=>array(69,-19,935,839),63919=>array(22,-68,960,847),63920=>array(28,-62,966,854),63921=>array(35,-65,975,846),63922=>array(43,-63,961,810),63923=>array(74,-28,929,779),63924=>array(42,-68,955,839),63925=>array(41,-63,911,845),63926=>array(60,-69,952,833),63927=>array(51,-57,952,829),63928=>array(132,-64,882,789),63929=>array(62,-25,962,783),63930=>array(172,-41,829,773),63931=>array(41,-64,983,842),63932=>array(41,-64,970,838),63933=>array(52,-74,951,779),63934=>array(38,-68,956,836),63935=>array(60,-64,959,847),63936=>array(41,-73,969,850),63937=>array(46,-65,964,830),63938=>array(26,-76,972,829),63939=>array(37,-56,968,838),63940=>array(50,-66,970,833),63941=>array(57,-62,950,798),63942=>array(98,-68,935,788),63943=>array(44,-64,911,837),63944=>array(39,-61,959,832),63945=>array(34,-61,921,837),63946=>array(40,-70,964,830),63947=>array(45,-66,925,830),63948=>array(30,-70,960,830),63949=>array(75,-68,897,818),63950=>array(26,-70,964,830),63951=>array(34,-64,956,839),63952=>array(38,-67,960,828),63953=>array(62,-29,946,810),63954=>array(39,-77,962,835),63955=>array(103,-58,951,833),63956=>array(31,-71,976,855),63957=>array(33,-61,979,841),63958=>array(39,-58,991,856),63959=>array(52,-71,971,868),63960=>array(36,-67,954,830),63961=>array(38,-59,976,835),63962=>array(60,-65,957,788),63963=>array(72,-69,928,840),63964=>array(93,-60,959,848),63965=>array(57,-67,920,826),63966=>array(71,-76,947,824),63967=>array(29,-68,953,786),63968=>array(75,-67,866,782),63969=>array(51,-70,960,831),63970=>array(41,-68,950,823),63971=>array(56,-64,957,821),63972=>array(35,-16,945,775),63973=>array(46,-69,944,835),63974=>array(39,-64,949,788),63975=>array(43,-75,955,840),63976=>array(41,-64,954,821),63977=>array(52,-19,948,796),63978=>array(64,-73,957,834),63979=>array(118,-68,939,800),63980=>array(54,-60,927,803),63981=>array(52,-74,958,822),63982=>array(49,-68,958,833),63983=>array(57,-66,959,837),63984=>array(57,-65,949,832),63985=>array(100,-70,956,834),63986=>array(31,-68,959,843),63987=>array(26,-68,959,838),63988=>array(30,-69,954,829),63989=>array(28,-63,968,841),63990=>array(120,-65,932,841),63991=>array(95,-3,912,822),63992=>array(52,-17,945,838),63993=>array(37,-64,949,837),63994=>array(40,-69,951,818),63995=>array(57,-73,960,840),63996=>array(51,-68,959,833),63997=>array(48,-68,950,829),63998=>array(41,-68,968,831),63999=>array(71,-65,906,831),64000=>array(44,-73,897,797),64001=>array(46,-68,950,826),64002=>array(53,-63,936,826),64003=>array(42,-69,952,827),64004=>array(70,-38,942,833),64005=>array(48,-55,898,819),64006=>array(47,-65,953,815),64007=>array(46,-74,941,827),64008=>array(51,-62,941,845),64009=>array(101,-68,955,846),64010=>array(58,-66,944,789),64011=>array(35,-65,942,837),64012=>array(49,-55,942,754),64013=>array(57,-70,964,827),64014=>array(45,-62,955,843),64015=>array(41,-65,969,830),64016=>array(41,-60,968,807),64017=>array(77,-62,953,828),64018=>array(89,-55,952,838),64019=>array(37,-71,948,828),64020=>array(37,-67,976,831),64021=>array(31,-69,973,831),64022=>array(49,-56,921,836),64023=>array(45,-22,947,840),64024=>array(42,-59,961,820),64025=>array(55,-67,904,837),64026=>array(39,-68,956,843),64027=>array(38,-69,943,834),64028=>array(41,-66,952,840),64029=>array(45,-66,954,837),64030=>array(73,-50,892,785),64031=>array(30,-68,935,839),64032=>array(40,-68,969,832),64033=>array(39,-19,946,826),64034=>array(59,-66,948,835),64035=>array(31,-69,953,829),64036=>array(37,-60,961,808),64037=>array(36,-54,957,835),64038=>array(44,-67,943,835),64039=>array(33,-70,949,839),64040=>array(33,-64,959,839),64041=>array(94,-71,936,842),64042=>array(34,-69,964,839),64043=>array(34,-68,906,839),64044=>array(34,-64,931,839),64045=>array(40,-65,938,837),64256=>array(13,0,569,728),64257=>array(14,0,432,728),64258=>array(14,0,430,728),64259=>array(42,0,709,728),64260=>array(13,0,680,728),64261=>array(67,-7,521,728),64262=>array(31,-12,750,700),64275=>array(44,-9,751,618),64276=>array(44,-8,749,609),64277=>array(44,-210,752,609),64278=>array(43,-210,749,609),64279=>array(44,-210,844,609),64286=>array(22,568,311,695),64287=>array(16,162,522,530),64288=>array(32,-12,503,518),64289=>array(58,0,652,518),64290=>array(24,0,619,518),64291=>array(72,0,662,530),64292=>array(38,-12,598,530),64293=>array(33,-12,557,716),64294=>array(72,0,662,518),64295=>array(20,0,565,530),64296=>array(19,-13,726,530),64297=>array(55,0,529,278),64298=>array(72,-12,674,634),64299=>array(72,-12,674,634),64300=>array(72,-12,674,634),64301=>array(72,-12,674,634),64302=>array(60,-104,517,518),64303=>array(60,-144,517,518),64304=>array(60,0,517,518),64305=>array(38,0,533,530),64306=>array(20,0,386,530),64307=>array(24,0,482,518),64308=>array(72,0,526,530),64309=>array(16,0,248,530),64310=>array(-9,0,306,543),64312=>array(68,-12,532,530),64313=>array(16,258,248,530),64314=>array(20,-199,439,530),64315=>array(38,-12,469,530),64316=>array(33,-12,436,716),64318=>array(30,0,526,530),64320=>array(38,0,270,530),64321=>array(25,-12,546,530),64323=>array(45,-199,499,530),64324=>array(37,-12,511,530),64326=>array(45,0,477,518),64327=>array(72,-199,535,518),64328=>array(20,0,439,530),64329=>array(72,-12,674,518),64330=>array(21,-13,565,530),64331=>array(16,0,248,634),64332=>array(38,0,533,622),64333=>array(38,-12,469,622),64334=>array(37,-12,511,622),64335=>array(33,0,517,716),64336=>array(-15,0,256,927),64337=>array(-15,0,274,927),64338=>array(62,-275,709,265),64339=>array(62,-279,789,265),64340=>array(-1,-252,194,284),64341=>array(-1,-256,244,284),64342=>array(62,-270,709,265),64343=>array(62,-270,789,265),64344=>array(-1,-228,233,284),64345=>array(-1,-228,244,284),64346=>array(62,-270,709,265),64347=>array(62,-270,789,265),64348=>array(-1,-242,210,284),64349=>array(-1,-242,244,284),64350=>array(62,-50,709,568),64351=>array(62,-50,789,568),64352=>array(-1,0,194,616),64353=>array(-1,0,244,616),64354=>array(62,-50,709,569),64355=>array(62,-50,789,569),64356=>array(-1,0,222,618),64357=>array(-1,0,244,618),64358=>array(62,-50,709,569),64359=>array(62,-50,789,569),64360=>array(-1,0,245,618),64361=>array(-1,0,244,618),64362=>array(62,0,895,859),64363=>array(62,-33,904,697),64364=>array(-1,0,404,860),64365=>array(-1,0,481,697),64366=>array(62,0,895,890),64367=>array(62,-33,904,727),64368=>array(-1,0,404,890),64369=>array(-1,0,481,727),64370=>array(52,-271,564,453),64371=>array(54,-271,659,453),64372=>array(-1,-236,567,453),64373=>array(-1,-236,638,453),64374=>array(52,-271,564,453),64375=>array(54,-271,659,453),64376=>array(-1,-105,567,453),64377=>array(-1,-105,638,453),64378=>array(52,-271,564,453),64379=>array(54,-271,659,453),64380=>array(-1,-208,567,453),64381=>array(-1,-208,638,453),64382=>array(52,-271,564,453),64383=>array(54,-271,659,453),64384=>array(-1,-236,567,453),64385=>array(-1,-237,638,453),64386=>array(38,-140,368,437),64387=>array(38,-140,459,436),64388=>array(38,0,368,614),64389=>array(38,0,459,638),64390=>array(38,0,368,716),64391=>array(38,0,459,740),64392=>array(38,0,368,746),64393=>array(38,0,459,770),64394=>array(-74,-210,362,554),64395=>array(-74,-210,437,544),64396=>array(-74,-210,369,584),64397=>array(-74,-210,437,574),64398=>array(62,0,827,717),64399=>array(62,0,943,717),64400=>array(-1,0,432,717),64401=>array(-1,0,548,717),64402=>array(62,0,827,793),64403=>array(62,0,943,793),64404=>array(-1,0,432,793),64405=>array(-1,0,548,793),64406=>array(62,-256,827,793),64407=>array(62,-257,943,793),64408=>array(-1,-252,432,793),64409=>array(-1,-256,548,793),64410=>array(62,0,827,839),64411=>array(62,0,943,839),64412=>array(-1,0,432,839),64413=>array(-1,0,548,839),64414=>array(62,-121,630,272),64415=>array(39,-228,724,183),64416=>array(62,-121,630,568),64417=>array(39,-228,724,568),64418=>array(-1,0,245,618),64419=>array(-1,0,244,618),64420=>array(62,-6,452,705),64421=>array(62,0,478,705),64422=>array(62,-6,452,431),64423=>array(2,-85,510,159),64424=>array(-1,-242,194,284),64425=>array(-1,-264,428,196),64426=>array(29,-15,644,593),64427=>array(29,-15,707,593),64428=>array(-1,0,624,593),64429=>array(-1,0,687,593),64430=>array(71,-221,684,297),64431=>array(62,-221,675,95),64432=>array(71,-221,684,473),64433=>array(62,-221,675,363),64467=>array(62,0,689,817),64468=>array(34,0,734,817),64469=>array(-1,0,432,889),64470=>array(-1,0,548,889),64471=>array(-108,-210,408,766),64472=>array(-111,-210,467,704),64473=>array(-108,-210,408,696),64474=>array(-111,-210,467,628),64475=>array(-108,-210,408,789),64476=>array(-111,-210,467,725),64477=>array(-108,-210,441,755),64478=>array(-108,-210,408,750),64479=>array(-111,-210,467,685),64480=>array(-108,-210,408,476),64481=>array(-111,-210,467,379),64482=>array(-108,-210,408,705),64483=>array(-111,-210,467,641),64484=>array(10,-279,730,453),64485=>array(33,-279,935,126),64486=>array(-1,-239,194,284),64487=>array(-1,-239,244,284),64488=>array(-1,0,194,284),64489=>array(-1,0,244,284),64490=>array(79,0,475,716),64491=>array(79,0,518,716),64492=>array(2,-85,710,569),64493=>array(2,-85,754,569),64494=>array(-111,-210,667,569),64495=>array(-111,-210,711,569),64496=>array(-111,-210,667,704),64497=>array(-111,-210,711,704),64498=>array(-111,-210,667,628),64499=>array(-111,-210,711,628),64500=>array(-111,-210,667,725),64501=>array(-111,-210,711,725),64502=>array(33,-279,1135,569),64503=>array(33,-279,1178,569),64504=>array(-1,-256,445,569),64505=>array(34,-270,995,569),64506=>array(34,-270,1038,569),64507=>array(-1,0,445,569),64508=>array(32,-121,679,453),64509=>array(34,-270,794,126),64510=>array(-1,-140,217,284),64511=>array(-1,-140,244,284),64512=>array(54,-271,860,569),64513=>array(54,-271,860,569),64514=>array(58,-265,842,569),64515=>array(34,-270,995,569),64516=>array(34,-265,1005,569),64517=>array(54,-271,853,453),64518=>array(54,-271,853,453),64519=>array(54,-271,853,621),64520=>array(58,-265,834,359),64521=>array(34,-270,988,284),64522=>array(34,-265,998,284),64523=>array(54,-271,876,486),64524=>array(54,-271,876,486),64525=>array(54,-271,876,621),64526=>array(58,-265,858,486),64527=>array(34,-270,1011,486),64528=>array(34,-265,1021,486),64529=>array(54,-271,876,588),64530=>array(58,-265,858,588),64531=>array(34,-270,1011,588),64532=>array(34,-265,1021,588),64533=>array(54,-271,1226,453),64534=>array(58,-265,1208,453),64535=>array(54,-271,1226,453),64536=>array(58,-265,1208,453),64537=>array(54,-271,1226,610),64538=>array(54,-271,1226,610),64539=>array(58,-265,1208,610),64540=>array(54,-271,1350,453),64541=>array(54,-271,1350,453),64542=>array(54,-271,1350,621),64543=>array(58,-265,1332,359),64544=>array(54,-271,1415,453),64545=>array(58,-265,1397,436),64546=>array(54,-271,1415,522),64547=>array(54,-271,1415,522),64548=>array(54,-271,1415,621),64549=>array(58,-265,1397,522),64550=>array(54,-271,1331,686),64551=>array(58,-265,1313,686),64552=>array(58,-265,1313,686),64553=>array(54,-271,1183,492),64554=>array(58,-265,1165,492),64555=>array(54,-271,1183,716),64556=>array(58,-265,1165,716),64557=>array(54,-271,1063,773),64558=>array(54,-271,1063,773),64559=>array(54,-271,1063,773),64560=>array(58,-265,1045,773),64561=>array(34,-270,1198,773),64562=>array(34,-265,1208,773),64563=>array(54,-271,1063,758),64564=>array(58,-265,1045,758),64565=>array(34,-270,1198,758),64566=>array(34,-265,1208,758),64567=>array(79,0,706,717),64568=>array(54,-271,1091,717),64569=>array(54,-271,1091,717),64570=>array(54,-271,1091,717),64571=>array(34,-228,1106,717),64572=>array(58,-265,1073,717),64573=>array(34,-270,1226,717),64574=>array(34,-265,1236,717),64575=>array(54,-271,853,716),64576=>array(54,-271,853,716),64577=>array(54,-271,853,716),64578=>array(58,-265,835,716),64579=>array(34,-270,988,716),64580=>array(34,-265,998,716),64581=>array(54,-271,1078,453),64582=>array(54,-271,1078,453),64583=>array(54,-271,1078,621),64584=>array(58,-265,1060,359),64585=>array(34,-270,1213,359),64586=>array(34,-265,1223,359),64587=>array(54,-271,853,501),64588=>array(54,-271,853,501),64589=>array(54,-271,853,621),64590=>array(58,-265,835,501),64591=>array(34,-270,988,501),64592=>array(34,-265,998,501),64593=>array(54,-271,1283,593),64594=>array(58,-265,1265,593),64595=>array(34,-270,1418,593),64596=>array(34,-265,1428,593),64597=>array(54,-271,876,453),64598=>array(54,-271,876,453),64599=>array(54,-271,876,621),64600=>array(58,-265,858,359),64601=>array(34,-270,1011,284),64602=>array(34,-265,1021,284),64603=>array(38,0,368,889),64604=>array(-74,-210,357,609),64605=>array(32,-121,679,505),64606=>array(4,521,299,990),64607=>array(7,618,299,990),64608=>array(7,648,299,990),64609=>array(4,521,299,990),64610=>array(7,770,299,990),64611=>array(7,588,299,1053),64612=>array(-74,-210,681,569),64613=>array(-74,-210,681,569),64614=>array(58,-265,885,569),64615=>array(39,-228,968,569),64616=>array(34,-270,1038,569),64617=>array(34,-265,1048,569),64618=>array(-74,-210,681,284),64619=>array(-74,-210,681,458),64620=>array(58,-265,885,359),64621=>array(39,-228,968,356),64622=>array(34,-270,1038,284),64623=>array(34,-265,1048,284),64624=>array(-74,-210,681,486),64625=>array(-74,-210,681,486),64626=>array(58,-265,885,486),64627=>array(39,-228,968,486),64628=>array(34,-270,1038,486),64629=>array(34,-265,1048,486),64630=>array(-74,-210,681,588),64631=>array(-74,-210,681,588),64632=>array(58,-265,885,588),64633=>array(39,-228,968,588),64634=>array(34,-270,1038,588),64635=>array(34,-265,1048,588),64636=>array(34,-270,1275,610),64637=>array(34,-265,1285,610),64638=>array(34,-270,1275,595),64639=>array(34,-265,1285,595),64640=>array(79,0,822,717),64641=>array(34,-228,1222,717),64642=>array(58,-265,1189,717),64643=>array(34,-270,1342,717),64644=>array(34,-265,1352,717),64645=>array(58,-265,885,716),64646=>array(34,-270,1038,716),64647=>array(34,-265,1048,716),64648=>array(79,0,807,716),64649=>array(58,-265,1174,359),64650=>array(-74,-210,681,501),64651=>array(-74,-210,681,501),64652=>array(58,-265,885,501),64653=>array(39,-228,968,501),64654=>array(34,-270,1038,501),64655=>array(34,-265,1048,501),64656=>array(34,-270,794,301),64657=>array(-74,-210,681,284),64658=>array(-74,-210,681,458),64659=>array(58,-265,885,359),64660=>array(39,-228,968,356),64661=>array(34,-270,1038,284),64662=>array(34,-265,1048,284),64663=>array(-1,-140,839,569),64664=>array(-1,0,839,569),64665=>array(-1,0,839,612),64666=>array(-1,0,734,569),64667=>array(-1,-269,606,569),64668=>array(-1,-140,832,453),64669=>array(-1,-140,832,453),64670=>array(-1,-140,832,612),64671=>array(-1,-140,727,359),64672=>array(-1,-269,600,376),64673=>array(-1,-140,855,486),64674=>array(-1,0,855,486),64675=>array(-1,0,855,612),64676=>array(-1,0,750,486),64677=>array(-1,-269,623,486),64678=>array(-1,0,750,588),64679=>array(-1,-80,1205,453),64680=>array(-1,-80,1100,453),64681=>array(-1,-140,1205,453),64682=>array(-1,0,1100,453),64683=>array(-1,-140,1205,610),64684=>array(-1,0,1100,610),64685=>array(-1,-140,1329,453),64686=>array(-1,0,1329,453),64687=>array(-1,0,1329,612),64688=>array(-1,0,1224,359),64689=>array(-1,0,1394,453),64690=>array(-1,0,1394,612),64691=>array(-1,0,1289,436),64692=>array(-1,-140,1394,522),64693=>array(-1,0,1394,522),64694=>array(-1,0,1394,612),64695=>array(-1,0,1289,522),64696=>array(-1,0,1310,686),64697=>array(-1,0,1205,686),64698=>array(-1,-140,1162,492),64699=>array(-1,0,1057,492),64700=>array(-1,-140,1162,716),64701=>array(-1,0,1057,716),64702=>array(-1,-140,1042,773),64703=>array(-1,0,1042,773),64704=>array(-1,0,1042,773),64705=>array(-1,0,937,773),64706=>array(-1,0,1042,758),64707=>array(-1,0,937,758),64708=>array(-1,-140,1070,717),64709=>array(-1,0,1070,717),64710=>array(-1,0,1070,717),64711=>array(-1,0,676,717),64712=>array(-1,0,965,717),64713=>array(-1,-140,832,716),64714=>array(-1,0,832,716),64715=>array(-1,0,832,716),64716=>array(-1,0,727,716),64717=>array(-1,-269,600,716),64718=>array(-1,-140,1057,453),64719=>array(-1,0,1057,453),64720=>array(-1,0,1057,612),64721=>array(-1,0,952,359),64722=>array(-1,-140,832,501),64723=>array(-1,0,832,501),64724=>array(-1,0,832,612),64725=>array(-1,0,727,501),64726=>array(-1,-269,600,501),64727=>array(-1,-140,1262,593),64728=>array(-1,0,1157,593),64729=>array(-1,0,624,912),64730=>array(-1,-140,855,453),64731=>array(-1,-140,855,453),64732=>array(-1,-140,855,612),64733=>array(-1,-140,750,359),64734=>array(-1,-269,623,376),64735=>array(-1,0,777,569),64736=>array(-1,-269,650,569),64737=>array(-1,-140,777,359),64738=>array(-1,-269,650,376),64739=>array(-1,0,777,486),64740=>array(-1,-269,650,486),64741=>array(-1,0,777,588),64742=>array(-1,-269,650,588),64743=>array(-1,0,1304,359),64744=>array(-1,-269,1177,376),64745=>array(-1,0,1304,604),64746=>array(-1,-269,1177,604),64747=>array(-1,0,792,717),64748=>array(-1,0,1081,717),64749=>array(-1,0,777,716),64750=>array(-1,0,777,501),64751=>array(-1,-269,650,501),64752=>array(-1,-140,777,359),64753=>array(-1,-269,650,376),64754=>array(-1,0,307,1058),64755=>array(-1,0,303,990),64756=>array(-1,0,299,1054),64757=>array(34,-270,1466,686),64758=>array(34,-265,1476,686),64759=>array(34,-270,1318,492),64760=>array(34,-265,1328,492),64761=>array(34,-270,1318,716),64762=>array(34,-265,1328,716),64763=>array(34,-270,1485,346),64764=>array(34,-265,1495,346),64765=>array(34,-270,1485,604),64766=>array(34,-265,1495,604),64767=>array(34,-270,1361,453),64768=>array(34,-265,1371,453),64769=>array(34,-270,1361,453),64770=>array(34,-265,1371,453),64771=>array(34,-270,1361,610),64772=>array(34,-265,1371,610),64773=>array(34,-270,1550,436),64774=>array(34,-265,1560,436),64775=>array(34,-270,1550,522),64776=>array(34,-265,1560,522),64777=>array(54,-271,1350,604),64778=>array(54,-271,1350,604),64779=>array(54,-271,1350,621),64780=>array(58,-265,1332,604),64781=>array(-74,-210,1128,604),64782=>array(-74,-210,1128,346),64783=>array(-74,-210,1193,436),64784=>array(-74,-210,1193,522),64785=>array(34,-270,1528,686),64786=>array(34,-265,1538,686),64787=>array(34,-270,1349,407),64788=>array(34,-265,1359,407),64789=>array(34,-270,1349,624),64790=>array(34,-265,1359,624),64791=>array(34,-270,1565,346),64792=>array(34,-265,1575,346),64793=>array(34,-270,1565,604),64794=>array(34,-265,1575,604),64795=>array(34,-270,1432,453),64796=>array(34,-265,1442,453),64797=>array(34,-270,1432,453),64798=>array(34,-265,1442,453),64799=>array(34,-270,1432,612),64800=>array(34,-265,1442,612),64801=>array(34,-270,1612,436),64802=>array(34,-265,1622,436),64803=>array(34,-270,1612,522),64804=>array(34,-265,1622,522),64805=>array(54,-271,1430,604),64806=>array(54,-271,1430,604),64807=>array(54,-271,1430,621),64808=>array(58,-265,1412,604),64809=>array(-74,-210,1208,604),64810=>array(-74,-210,1208,346),64811=>array(-74,-210,1255,436),64812=>array(-74,-210,1255,522),64813=>array(-1,-140,1329,604),64814=>array(-1,0,1329,604),64815=>array(-1,0,1329,612),64816=>array(-1,0,1224,604),64817=>array(-1,-269,1097,376),64818=>array(-1,-269,1097,604),64819=>array(-1,0,1205,686),64820=>array(-1,-140,1409,453),64821=>array(-1,0,1409,453),64822=>array(-1,0,1409,612),64823=>array(-1,-140,1409,604),64824=>array(-1,0,1409,604),64825=>array(-1,0,1409,612),64826=>array(-1,0,1267,686),64827=>array(-1,0,1267,686),64828=>array(79,0,615,944),64829=>array(79,0,615,944),64830=>array(82,-218,445,790),64831=>array(155,-218,518,790),64848=>array(-1,-140,1389,486),64849=>array(54,-271,1542,486),64850=>array(-1,-140,1494,486),64851=>array(-1,0,1389,486),64852=>array(-1,0,1389,612),64853=>array(-1,-140,1389,486),64854=>array(-1,0,1389,486),64855=>array(-1,0,1389,612),64856=>array(54,-271,1831,453),64857=>array(-1,-80,1738,453),64858=>array(34,-265,1976,453),64859=>array(34,-270,1965,453),64860=>array(-1,-140,1967,453),64861=>array(-1,-140,1967,453),64862=>array(34,-270,2203,453),64863=>array(54,-271,1963,453),64864=>array(-1,0,1862,453),64865=>array(-1,-140,1862,453),64866=>array(58,-265,1945,359),64867=>array(-1,0,1757,359),64868=>array(54,-271,2115,453),64869=>array(-1,0,2032,453),64870=>array(58,-265,1992,436),64871=>array(58,-265,2050,604),64872=>array(-1,0,1862,604),64873=>array(34,-265,2213,604),64874=>array(54,-271,1963,621),64875=>array(-1,0,1862,612),64876=>array(58,-265,1945,604),64877=>array(-1,0,1757,604),64878=>array(34,-270,2250,522),64879=>array(58,-265,2097,612),64880=>array(-1,0,1927,612),64881=>array(54,-271,1926,686),64882=>array(-1,0,1843,686),64883=>array(-1,0,1738,686),64884=>array(34,-265,2071,686),64885=>array(58,-265,1834,453),64886=>array(58,-265,1729,407),64887=>array(-1,0,1590,492),64888=>array(34,-270,1882,407),64889=>array(58,-265,1729,624),64890=>array(34,-265,1893,624),64891=>array(34,-270,1882,624),64892=>array(58,-265,1760,612),64893=>array(-1,0,1575,773),64894=>array(54,-271,1671,595),64895=>array(58,-265,1655,595),64896=>array(58,-265,1523,716),64897=>array(34,-265,1687,716),64898=>array(34,-270,1676,716),64899=>array(-1,-140,1470,716),64900=>array(54,-271,1542,716),64901=>array(58,-265,1523,716),64902=>array(-1,0,1365,716),64903=>array(54,-271,1437,716),64904=>array(-1,0,1365,716),64905=>array(-1,-140,1695,453),64906=>array(-1,0,1590,453),64907=>array(34,-265,1976,453),64908=>array(-1,-140,1695,453),64909=>array(-1,-140,1590,453),64910=>array(-1,-140,1695,612),64911=>array(-1,0,1590,612),64914=>array(-1,-140,1695,612),64915=>array(-1,-140,1795,593),64916=>array(-1,0,1690,593),64917=>array(-1,0,1365,501),64918=>array(34,-270,1676,501),64919=>array(58,-265,1523,501),64920=>array(-1,-140,1365,501),64921=>array(34,-270,1676,501),64922=>array(34,-265,1582,501),64923=>array(34,-270,1571,501),64924=>array(58,-265,1418,359),64925=>array(-1,-140,1284,359),64926=>array(34,-265,1687,612),64927=>array(34,-265,1687,486),64928=>array(34,-270,1676,486),64929=>array(34,-265,1687,612),64930=>array(34,-270,1676,612),64931=>array(34,-265,1582,486),64932=>array(34,-270,1571,486),64933=>array(34,-265,1976,453),64934=>array(34,-270,2070,453),64935=>array(34,-270,1965,453),64936=>array(34,-270,2203,612),64937=>array(34,-265,2260,453),64938=>array(34,-265,2213,604),64939=>array(34,-265,2260,522),64940=>array(34,-265,1687,716),64941=>array(34,-265,1582,716),64942=>array(34,-265,1687,453),64943=>array(34,-265,1687,453),64944=>array(34,-265,1582,359),64945=>array(34,-265,1871,359),64946=>array(34,-265,1818,595),64947=>array(34,-265,1687,501),64948=>array(-1,0,1575,758),64949=>array(-1,0,1365,716),64950=>array(34,-265,1893,407),64951=>array(34,-265,1885,717),64952=>array(-1,-140,1470,501),64953=>array(34,-265,1976,612),64954=>array(-1,-140,1365,716),64955=>array(58,-265,1722,717),64956=>array(58,-265,1523,716),64957=>array(54,-271,1542,501),64958=>array(34,-265,2081,453),64959=>array(34,-265,2081,453),64960=>array(34,-265,1976,453),64961=>array(34,-265,1818,610),64962=>array(34,-265,1687,453),64963=>array(-1,0,1499,717),64964=>array(-1,-140,1695,492),64965=>array(-1,0,1822,436),64966=>array(34,-265,2213,612),64967=>array(34,-265,1687,501),65008=>array(62,-221,1462,716),65009=>array(62,-221,1110,758),65010=>array(52,0,1077,1015),65011=>array(-74,-210,1277,717),65012=>array(38,0,2049,453),65013=>array(58,-265,2196,716),65014=>array(34,-210,2066,716),65015=>array(62,-140,1490,716),65016=>array(58,-265,1984,716),65017=>array(34,-270,1794,716),65018=>array(77,-156,1842,762),65019=>array(74,-37,1003,826),65056=>array(55,604,450,726),65057=>array(0,604,395,726),65058=>array(55,604,450,726),65059=>array(0,604,395,726),65072=>array(446,87,554,679),65073=>array(461,-121,539,887),65074=>array(461,229,539,537),65075=>array(-5,-121,73,887),65076=>array(0,-118,118,885),65077=>array(45,39,952,277),65078=>array(47,558,954,796),65079=>array(43,31,956,281),65080=>array(43,548,956,798),65081=>array(41,19,960,294),65082=>array(40,543,959,818),65083=>array(45,18,950,306),65084=>array(47,530,952,818),65085=>array(47,-32,953,416),65086=>array(47,420,953,868),65087=>array(47,-2,953,325),65088=>array(47,511,953,838),65089=>array(48,18,952,358),65090=>array(48,473,952,818),65091=>array(48,-12,952,359),65092=>array(48,475,952,848),65097=>array(75,761,925,801),65098=>array(75,731,925,829),65099=>array(-1,771,1001,889),65100=>array(-2,656,1001,884),65101=>array(75,-29,925,11),65102=>array(75,-49,925,49),65103=>array(-1,-112,1001,6),65104=>array(50,-85,114,60),65105=>array(33,109,172,224),65106=>array(53,0,113,60),65108=>array(50,-85,114,311),65109=>array(54,0,114,311),65110=>array(28,0,305,437),65111=>array(51,0,116,430),65112=>array(-4,134,604,177),65113=>array(36,-126,178,437),65114=>array(22,-126,164,437),65115=>array(17,-126,186,437),65116=>array(14,-126,184,437),65117=>array(41,-119,184,430),65118=>array(16,-119,159,430),65119=>array(7,-7,327,437),65120=>array(26,-10,386,437),65121=>array(20,254,214,437),65122=>array(33,70,317,354),65123=>array(19,129,181,182),65124=>array(33,67,317,357),65125=>array(33,67,317,357),65126=>array(33,122,317,302),65128=>array(0,-14,167,430),65129=>array(23,-62,307,469),65130=>array(44,-16,491,437),65131=>array(34,-126,589,437),65136=>array(10,716,290,944),65137=>array(-1,0,299,944),65138=>array(4,716,292,990),65140=>array(8,-255,288,-78),65142=>array(10,716,290,859),65143=>array(-1,0,299,859),65144=>array(4,716,292,990),65145=>array(-1,0,303,990),65146=>array(8,-170,288,-78),65147=>array(-1,-170,297,95),65148=>array(7,716,299,936),65149=>array(-1,0,307,936),65150=>array(3,767,151,915),65151=>array(-1,0,155,915),65152=>array(54,0,469,422),65153=>array(-23,0,270,846),65154=>array(-23,0,274,846),65155=>array(46,0,188,933),65156=>array(46,0,274,933),65157=>array(-108,-210,408,762),65158=>array(-111,-210,467,664),65159=>array(46,-285,188,716),65160=>array(46,-285,274,716),65161=>array(32,-121,679,453),65162=>array(34,-270,794,301),65163=>array(-1,0,201,569),65164=>array(-1,0,244,569),65165=>array(79,0,164,716),65166=>array(79,0,274,716),65167=>array(62,-190,709,265),65168=>array(62,-190,789,265),65169=>array(-1,-140,194,284),65170=>array(-1,-140,244,284),65171=>array(62,-6,452,633),65172=>array(62,0,478,628),65173=>array(62,-50,709,437),65174=>array(62,-50,789,437),65175=>array(-1,0,217,486),65176=>array(-1,0,244,486),65177=>array(62,-50,709,539),65178=>array(62,-50,789,539),65179=>array(-1,0,217,588),65180=>array(-1,0,244,588),65181=>array(52,-271,564,453),65182=>array(54,-271,659,453),65183=>array(-1,-80,567,453),65184=>array(-1,-140,638,453),65185=>array(52,-271,564,453),65186=>array(54,-271,659,453),65187=>array(-1,0,567,453),65188=>array(-1,0,638,453),65189=>array(52,-271,564,621),65190=>array(54,-271,659,621),65191=>array(-1,0,567,610),65192=>array(-1,0,638,612),65193=>array(38,0,368,437),65194=>array(38,0,459,436),65195=>array(38,0,368,629),65196=>array(38,0,459,653),65197=>array(-74,-210,357,290),65198=>array(-74,-210,437,239),65199=>array(-74,-210,357,470),65200=>array(-74,-210,437,458),65201=>array(39,-228,1115,346),65202=>array(39,-228,1195,346),65203=>array(-1,0,691,346),65204=>array(-1,0,771,346),65205=>array(39,-228,1115,604),65206=>array(39,-228,1195,604),65207=>array(-1,0,691,604),65208=>array(-1,0,771,604),65209=>array(39,-228,1230,436),65210=>array(39,-228,1292,436),65211=>array(-1,0,756,436),65212=>array(-1,0,818,436),65213=>array(39,-228,1230,532),65214=>array(39,-228,1292,532),65215=>array(-1,0,756,522),65216=>array(-1,0,818,522),65217=>array(59,0,782,686),65218=>array(59,0,844,686),65219=>array(-1,0,672,686),65220=>array(-1,0,734,686),65221=>array(59,0,782,686),65222=>array(59,0,844,686),65223=>array(-1,0,672,686),65224=>array(-1,0,734,686),65225=>array(53,-271,565,492),65226=>array(55,-271,567,443),65227=>array(-1,0,524,492),65228=>array(-3,0,555,407),65229=>array(53,-271,565,725),65230=>array(55,-271,567,660),65231=>array(-1,0,524,716),65232=>array(-3,0,555,624),65233=>array(62,0,895,773),65234=>array(62,-33,904,610),65235=>array(-1,0,404,773),65236=>array(-1,0,481,610),65237=>array(34,-214,738,678),65238=>array(39,-271,824,557),65239=>array(-1,0,404,758),65240=>array(-1,0,481,595),65241=>array(62,0,689,716),65242=>array(34,0,734,716),65243=>array(-1,0,432,717),65244=>array(-1,0,548,717),65245=>array(34,-121,594,716),65246=>array(34,-228,674,716),65247=>array(-1,0,194,716),65248=>array(-1,0,244,716),65249=>array(58,-265,527,359),65250=>array(58,-265,641,359),65251=>array(-1,0,419,359),65252=>array(-1,0,533,359),65253=>array(62,-121,630,458),65254=>array(39,-228,724,356),65255=>array(-1,0,194,501),65256=>array(-1,0,244,501),65257=>array(62,-6,452,431),65258=>array(62,0,478,446),65259=>array(-1,0,624,593),65260=>array(-1,-269,406,376),65261=>array(-108,-210,408,476),65262=>array(-111,-210,467,379),65263=>array(32,-121,679,453),65264=>array(34,-270,794,126),65265=>array(32,-238,679,453),65266=>array(34,-265,804,146),65267=>array(-1,-140,217,284),65268=>array(-1,-140,244,284),65269=>array(-122,-78,474,862),65270=>array(-121,-78,604,862),65271=>array(-27,-78,474,862),65272=>array(-27,-78,604,862),65273=>array(8,-171,474,716),65274=>array(8,-172,604,716),65275=>array(8,-78,474,716),65276=>array(8,-78,604,716),65281=>array(446,0,555,716),65282=>array(363,462,635,716),65283=>array(234,-12,768,728),65284=>array(263,-103,736,782),65285=>array(128,-27,874,728),65286=>array(199,-17,800,728),65287=>array(447,462,547,716),65288=>array(382,-210,619,728),65289=>array(382,-210,619,728),65290=>array(338,423,661,728),65291=>array(264,116,738,590),65292=>array(447,-141,553,100),65293=>array(366,215,635,303),65294=>array(448,0,548,100),65295=>array(361,-24,639,716),65296=>array(266,-12,732,719),65297=>array(367,0,631,719),65298=>array(263,0,737,719),65299=>array(267,-12,736,719),65300=>array(253,0,748,716),65301=>array(263,-12,737,706),65302=>array(265,-12,737,719),65303=>array(269,0,732,706),65304=>array(265,-12,736,719),65305=>array(266,-12,736,719),65306=>array(449,0,549,518),65307=>array(447,-141,553,518),65308=>array(263,111,737,595),65309=>array(263,203,737,503),65310=>array(263,111,737,595),65311=>array(269,0,731,728),65312=>array(37,-210,962,729),65313=>array(166,0,835,716),65314=>array(229,0,770,716),65315=>array(184,-12,816,728),65316=>array(204,0,796,716),65317=>array(232,0,767,716),65318=>array(258,0,741,716),65319=>array(169,-12,831,728),65320=>array(219,0,781,716),65321=>array(452,0,547,716),65322=>array(304,-12,697,716),65323=>array(204,0,796,716),65324=>array(276,0,724,716),65325=>array(159,0,840,716),65326=>array(218,0,781,716),65327=>array(157,-12,842,728),65328=>array(227,0,773,716),65329=>array(151,-56,849,728),65330=>array(184,0,815,716),65331=>array(215,-12,785,728),65332=>array(216,0,783,716),65333=>array(218,-12,781,716),65334=>array(173,0,827,716),65335=>array(39,0,960,716),65336=>array(172,0,828,716),65337=>array(172,0,828,716),65338=>array(217,0,783,716),65339=>array(403,-199,597,716),65340=>array(361,-24,639,716),65341=>array(403,-199,597,716),65342=>array(291,325,708,716),65343=>array(244,-125,756,-75),65344=>array(410,591,590,728),65345=>array(261,-12,739,530),65346=>array(275,-12,725,716),65347=>array(274,-12,726,530),65348=>array(275,-12,725,716),65349=>array(261,-12,739,530),65350=>array(348,0,651,728),65351=>array(271,-210,728,530),65352=>array(288,0,711,716),65353=>array(456,0,544,716),65354=>array(400,-209,600,716),65355=>array(285,0,715,716),65356=>array(456,0,544,716),65357=>array(148,0,852,530),65358=>array(289,0,711,530),65359=>array(257,-12,743,530),65360=>array(275,-199,725,530),65361=>array(275,-199,725,530),65362=>array(359,0,641,530),65363=>array(285,-12,715,530),65364=>array(374,-7,626,700),65365=>array(289,-12,710,518),65366=>array(262,0,737,518),65367=>array(144,0,856,518),65368=>array(257,0,743,518),65369=>array(262,-210,738,518),65370=>array(270,0,729,518),65371=>array(359,-210,641,728),65372=>array(462,-199,538,716),65373=>array(359,-210,641,728),65374=>array(250,272,749,432),65377=>array(53,-40,235,142),65378=>array(79,-68,421,837),65379=>array(77,-68,423,837),65380=>array(54,-82,296,171),65381=>array(196,332,304,440),65382=>array(65,-53,435,753),65383=>array(63,-11,461,732),65384=>array(46,-3,441,769),65385=>array(79,-9,425,763),65386=>array(61,32,439,689),65387=>array(38,-15,443,751),65388=>array(51,-26,452,756),65389=>array(61,33,439,696),65390=>array(79,19,421,701),65391=>array(56,-3,432,727),65392=>array(81,329,419,411),65393=>array(43,-61,481,751),65394=>array(42,-44,448,795),65395=>array(62,-47,439,803),65396=>array(41,0,459,735),65397=>array(34,-45,464,787),65398=>array(38,-40,443,794),65399=>array(43,-46,457,799),65400=>array(40,-49,436,815),65401=>array(39,-48,461,813),65402=>array(60,-23,440,734),65403=>array(42,-59,458,788),65404=>array(36,-33,461,770),65405=>array(28,-49,472,727),65406=>array(44,-5,468,786),65407=>array(49,-51,442,780),65408=>array(36,-56,453,798),65409=>array(41,-50,459,798),65410=>array(45,-43,455,770),65411=>array(41,-61,459,740),65412=>array(122,-46,444,787),65413=>array(42,-59,458,786),65414=>array(41,16,459,711),65415=>array(42,-47,459,734),65416=>array(25,-51,487,769),65417=>array(52,-43,442,740),65418=>array(35,-29,464,791),65419=>array(95,-5,465,770),65420=>array(66,-54,434,732),65421=>array(26,24,472,645),65422=>array(22,-47,472,785),65423=>array(50,-31,450,729),65424=>array(38,-31,463,769),65425=>array(28,-31,478,790),65426=>array(45,-35,449,782),65427=>array(41,-6,459,739),65428=>array(47,-50,468,797),65429=>array(41,-4,459,730),65430=>array(61,-27,439,730),65431=>array(58,-54,442,748),65432=>array(106,-53,394,768),65433=>array(18,-44,481,788),65434=>array(111,-29,474,788),65435=>array(71,-24,429,730),65436=>array(64,-48,436,731),65437=>array(41,-33,461,749),65438=>array(21,523,250,750),65439=>array(38,591,220,773),65441=>array(50,91,450,665),65442=>array(31,91,469,665),65443=>array(20,78,495,665),65444=>array(49,90,451,665),65445=>array(29,80,492,666),65446=>array(30,91,472,666),65447=>array(54,90,446,664),65448=>array(28,90,472,665),65449=>array(59,90,451,665),65450=>array(42,88,458,665),65451=>array(39,85,461,665),65452=>array(39,85,461,665),65453=>array(39,78,495,665),65454=>array(41,85,459,665),65455=>array(34,85,466,665),65456=>array(32,85,468,666),65457=>array(79,90,421,665),65458=>array(79,90,421,665),65459=>array(37,88,463,665),65460=>array(37,78,495,664),65461=>array(13,80,486,661),65462=>array(2,78,493,663),65463=>array(52,92,448,666),65464=>array(17,78,481,665),65465=>array(11,79,495,666),65466=>array(19,76,481,665),65467=>array(72,90,428,663),65468=>array(56,91,444,664),65469=>array(62,90,438,665),65470=>array(44,88,456,665),65474=>array(105,-64,395,842),65475=>array(95,-64,405,842),65476=>array(103,-64,397,842),65477=>array(90,-64,411,842),65478=>array(103,-65,397,841),65479=>array(40,-63,445,843),65482=>array(103,-64,397,842),65483=>array(39,-63,446,843),65484=>array(43,197,457,614),65485=>array(24,-64,476,842),65486=>array(27,-64,463,842),65487=>array(24,-64,439,842),65490=>array(30,197,470,615),65491=>array(40,76,460,554),65492=>array(31,-65,454,841),65493=>array(25,-63,465,843),65494=>array(31,-64,449,842),65495=>array(40,110,468,588),65498=>array(28,357,472,436),65499=>array(30,-64,450,842),65500=>array(212,-64,288,842),65504=>array(274,-200,726,716),65505=>array(242,-14,758,728),65506=>array(263,203,737,503),65507=>array(244,793,756,843),65508=>array(462,-199,538,716),65509=>array(223,0,777,716),65510=>array(39,0,960,716),65512=>array(207,-218,293,994),65513=>array(40,100,460,412),65514=>array(93,0,405,420),65515=>array(40,100,460,412),65516=>array(93,0,405,420),65517=>array(35,160,465,590),65518=>array(35,160,465,590),65532=>array(0,0,1000,719),65533=>array(85,-21,915,810),65535=>array(125,0,875,750)); +$cw=array(0=>1000,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278,306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,338=>1000,339=>944,340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,352=>667,353=>500,354=>611,355=>278,356=>611,357=>406,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,374=>667,375=>500,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579,393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,402=>278,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500,410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602,426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526,442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444,458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556,614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556,630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216,646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464,662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030,678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222,701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,710=>333,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333,718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758,912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778,928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551,945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678,961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616,978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557,1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1027=>567,1028=>717,1029=>667,1030=>278,1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1036=>584,1038=>635,1039=>723,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722,1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939,1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559,1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823,1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811,1115=>556,1116=>437,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932,1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976,1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556,1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670,1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661,1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735,1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923,1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635,1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427,1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635,1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271,1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427,1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583,1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360,1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360,1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360,1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360,1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316,1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412,1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544,1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800,1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243,1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544,1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421,1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957,1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828,1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470,1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514,1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282,1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480,1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611,2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502,2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600,2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0,2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639,2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582,2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585,2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593,2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0,2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559,2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267,2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567,2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640,2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0,2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591,2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0,2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773,2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446,2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587,2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0,2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590,2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712,2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605,2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0,2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540,2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994,2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295,2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547,3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740,3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690,3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684,3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681,3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361,3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840,3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293,3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667,3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687,3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714,3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549,3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198,3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712,3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546,3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340,3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181,3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664,3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608,3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574,3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724,3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775,3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778,3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778,3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600,3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600,3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600,3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600,3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600,3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600,3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600,3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600,3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600,3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600,4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600,4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634,4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629,4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872,4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810,4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524,4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000,4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000,4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000,4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000,4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000,4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000,4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000,4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000,4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000,4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000,4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000,4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000,4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000,4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000,4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000,4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556,7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620,7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576,7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434,7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747,7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303,7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894,8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766,8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576,8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576,8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556,8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766,8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576,8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556,8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222,8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667,8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758,8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0,8205=>0,8208=>333,8209=>333,8210=>556,8211=>500,8212=>1000,8213=>564,8214=>428,8215=>500,8216=>222,8217=>222,8218=>222,8219=>222,8220=>333,8221=>333,8222=>333,8223=>333,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>556,8230=>1000,8231=>278,8232=>0,8233=>0,8240=>1000,8241=>1330,8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8249=>333,8250=>333,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333,8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333,8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556,8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8364=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700,8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667,8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708,8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8482=>1000,8483=>722,8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115,8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834,8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500,8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713,8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713,8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800,8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713,8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713,8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713,8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823,8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584,8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806,8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584,8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584,8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584,8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584,8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678,8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800,8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672,8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584,8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561,8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584,8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000,8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549,8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549,8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549,9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600,9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600,9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000,9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000,9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000,9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000,9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000,9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000,9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000,9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000,9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000,9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000,9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734,9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650,9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900,9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560,9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000,9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804,9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000,12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000,12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000,12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000,12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000,12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000,12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000,12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000,12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000,12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000,12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000,12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000,12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000,12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000,12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000,12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000,12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000,12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000,12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000,12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000,12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000,12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000,12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000,12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000,12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000,12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000,12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000,12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000,12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000,13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000,13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000,13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000,13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000,13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000,13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000,13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000,13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000,13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000,13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000,13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000,13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000,13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000,13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000,13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000,13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000,13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000,13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000,13309=>1000,13310=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000,19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000,19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000,20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000,20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000,20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000,20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000,20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000,20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000,20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000,20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000,20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000,20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000,20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000,20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000,20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000,20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000,20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000,20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000,20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000,20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000,20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000,20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000,20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000,20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000,20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000,20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000,20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000,20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000,20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000,20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000,20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000,20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000,20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000,20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000,20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000,20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000,20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000,20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000,20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000,20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000,20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000,20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000,20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000,20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000,20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000,20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000,20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000,20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000,20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000,20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000,20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000,20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000,20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000,20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000,20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000,20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000,20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000,20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000,20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000,20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000,20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000,20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000,20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000,20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000,20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000,21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000,21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000,21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000,21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000,21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000,21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000,21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000,21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000,21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000,21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000,21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000,21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000,21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000,21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000,21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000,21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000,21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000,21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000,21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000,21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000,21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000,21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000,21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000,21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000,21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000,21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000,21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000,21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000,21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000,21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000,21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000,21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000,21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000,21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000,21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000,21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000,21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000,21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000,21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000,21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000,21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000,21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000,21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000,21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000,21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000,21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000,21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000,21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000,21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000,21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000,21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000,21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000,21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000,21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000,21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000,21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000,21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000,21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000,21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000,21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000,21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000,21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000,22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000,22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000,22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000,22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000,22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000,22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000,22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000,22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000,22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000,22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000,22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000,22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000,22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000,22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000,22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000,22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000,22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000,22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000,22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000,22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000,22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000,22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000,22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000,22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000,22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000,22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000,22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000,22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000,22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000,22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000,22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000,22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000,22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000,22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000,22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000,22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000,22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000,22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000,22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000,22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000,22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000,22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000,22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000,22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000,22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000,22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000,22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000,22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000,22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000,22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000,22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000,22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000,22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000,22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000,22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000,22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000,22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000,22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000,22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000,22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000,22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000,22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000,22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000,23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000,23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000,23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000,23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000,23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000,23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000,23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000,23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000,23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000,23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000,23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000,23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000,23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000,23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000,23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000,23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000,23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000,23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000,23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000,23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000,23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000,23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000,23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000,23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000,23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000,23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000,23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000,23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000,23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000,23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000,23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000,23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000,23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000,23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000,23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000,23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000,23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000,23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000,23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000,23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000,23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000,23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000,23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000,23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000,23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000,23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000,23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000,23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000,23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000,23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000,23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000,23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000,23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000,23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000,23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000,23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000,23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000,23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000,23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000,23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000,23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000,23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000,24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000,24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000,24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000,24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000,24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000,24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000,24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000,24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000,24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000,24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000,24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000,24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000,24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000,24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000,24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000,24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000,24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000,24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000,24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000,24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000,24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000,24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000,24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000,24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000,24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000,24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000,24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000,24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000,24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000,24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000,24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000,24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000,24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000,24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000,24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000,24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000,24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000,24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000,24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000,24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000,24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000,24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000,24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000,24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000,24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000,24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000,24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000,24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000,24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000,24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000,24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000,24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000,24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000,24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000,24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000,24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000,24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000,24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000,24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000,24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000,24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000,24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000,24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000,25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000,25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000,25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000,25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000,25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000,25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000,25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000,25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000,25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000,25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000,25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000,25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000,25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000,25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000,25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000,25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000,25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000,25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000,25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000,25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000,25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000,25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000,25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000,25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000,25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000,25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000,25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000,25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000,25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000,25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000,25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000,25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000,25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000,25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000,25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000,25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000,25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000,25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000,25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000,25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000,25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000,25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000,25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000,25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000,25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000,25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000,25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000,25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000,25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000,25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000,25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000,25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000,25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000,25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000,25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000,25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000,25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000,25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000,25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000,25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000,25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000,25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000,26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000,26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000,26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000,26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000,26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000,26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000,26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000,26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000,26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000,26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000,26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000,26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000,26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000,26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000,26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000,26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000,26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000,26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000,26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000,26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000,26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000,26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000,26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000,26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000,26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000,26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000,26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000,26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000,26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000,26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000,26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000,26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000,26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000,26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000,26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000,26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000,26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000,26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000,26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000,26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000,26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000,26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000,26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000,26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000,26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000,26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000,26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000,26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000,26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000,26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000,26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000,26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000,26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000,26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000,26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000,26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000,26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000,26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000,26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000,26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000,26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000,26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000,26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000,27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000,27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000,27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000,27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000,27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000,27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000,27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000,27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000,27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000,27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000,27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000,27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000,27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000,27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000,27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000,27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000,27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000,27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000,27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000,27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000,27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000,27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000,27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000,27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000,27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000,27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000,27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000,27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000,27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000,27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000,27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000,27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000,27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000,27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000,27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000,27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000,27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000,27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000,27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000,27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000,27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000,27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000,27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000,27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000,27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000,27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000,27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000,27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000,27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000,27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000,27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000,27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000,27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000,27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000,27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000,27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000,27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000,27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000,27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000,27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000,27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000,27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000,28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000,28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000,28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000,28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000,28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000,28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000,28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000,28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000,28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000,28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000,28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000,28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000,28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000,28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000,28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000,28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000,28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000,28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000,28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000,28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000,28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000,28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000,28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000,28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000,28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000,28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000,28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000,28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000,28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000,28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000,28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000,28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000,28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000,28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000,28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000,28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000,28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000,28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000,28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000,28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000,28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000,28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000,28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000,28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000,28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000,28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000,28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000,28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000,28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000,28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000,28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000,28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000,28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000,28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000,28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000,28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000,28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000,28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000,28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000,28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000,28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000,28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000,28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000,29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000,29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000,29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000,29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000,29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000,29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000,29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000,29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000,29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000,29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000,29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000,29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000,29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000,29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000,29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000,29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000,29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000,29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000,29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000,29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000,29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000,29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000,29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000,29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000,29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000,29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000,29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000,29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000,29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000,29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000,29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000,29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000,29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000,29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000,29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000,29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000,29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000,29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000,29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000,29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000,29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000,29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000,29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000,29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000,29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000,29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000,29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000,29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000,29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000,29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000,29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000,29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000,29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000,29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000,29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000,29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000,29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000,29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000,29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000,29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000,29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000,29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000,30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000,30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000,30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000,30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000,30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000,30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000,30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000,30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000,30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000,30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000,30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000,30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000,30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000,30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000,30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000,30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000,30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000,30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000,30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000,30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000,30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000,30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000,30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000,30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000,30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000,30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000,30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000,30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000,30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000,30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000,30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000,30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000,30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000,30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000,30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000,30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000,30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000,30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000,30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000,30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000,30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000,30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000,30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000,30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000,30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000,30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000,30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000,30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000,30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000,30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000,30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000,30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000,30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000,30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000,30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000,30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000,30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000,30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000,30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000,30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000,30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000,30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000,30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000,31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000,31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000,31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000,31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000,31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000,31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000,31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000,31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000,31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000,31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000,31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000,31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000,31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000,31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000,31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000,31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000,31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000,31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000,31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000,31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000,31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000,31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000,31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000,31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000,31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000,31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000,31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000,31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000,31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000,31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000,31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000,31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000,31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000,31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000,31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000,31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000,31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000,31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000,31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000,31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000,31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000,31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000,31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000,31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000,31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000,31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000,31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000,31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000,31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000,31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000,31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000,31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000,31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000,31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000,31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000,31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000,31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000,31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000,31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000,31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000,31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000,31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000,32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000,32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000,32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000,32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000,32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000,32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000,32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000,32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000,32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000,32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000,32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000,32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000,32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000,32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000,32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000,32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000,32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000,32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000,32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000,32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000,32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000,32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000,32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000,32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000,32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000,32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000,32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000,32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000,32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000,32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000,32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000,32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000,32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000,32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000,32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000,32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000,32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000,32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000,32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000,32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000,32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000,32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000,32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000,32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000,32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000,32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000,32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000,32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000,32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000,32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000,32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000,32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000,32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000,32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000,32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000,32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000,32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000,32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000,32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000,32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000,32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000,32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000,32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000,33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000,33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000,33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000,33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000,33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000,33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000,33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000,33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000,33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000,33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000,33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000,33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000,33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000,33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000,33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000,33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000,33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000,33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000,33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000,33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000,33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000,33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000,33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000,33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000,33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000,33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000,33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000,33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000,33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000,33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000,33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000,33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000,33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000,33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000,33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000,33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000,33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000,33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000,33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000,33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000,33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000,33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000,33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000,33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000,33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000,33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000,33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000,33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000,33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000,33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000,33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000,33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000,33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000,33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000,33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000,33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000,33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000,33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000,33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000,33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000,33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000,33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000,34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000,34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000,34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000,34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000,34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000,34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000,34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000,34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000,34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000,34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000,34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000,34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000,34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000,34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000,34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000,34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000,34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000,34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000,34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000,34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000,34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000,34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000,34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000,34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000,34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000,34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000,34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000,34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000,34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000,34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000,34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000,34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000,34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000,34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000,34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000,34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000,34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000,34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000,34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000,34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000,34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000,34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000,34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000,34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000,34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000,34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000,34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000,34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000,34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000,34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000,34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000,34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000,34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000,34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000,34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000,34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000,34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000,34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000,34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000,34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000,34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000,34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000,34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000,35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000,35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000,35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000,35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000,35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000,35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000,35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000,35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000,35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000,35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000,35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000,35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000,35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000,35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000,35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000,35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000,35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000,35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000,35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000,35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000,35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000,35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000,35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000,35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000,35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000,35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000,35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000,35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000,35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000,35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000,35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000,35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000,35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000,35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000,35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000,35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000,35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000,35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000,35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000,35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000,35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000,35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000,35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000,35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000,35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000,35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000,35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000,35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000,35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000,35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000,35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000,35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000,35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000,35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000,35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000,35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000,35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000,35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000,35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000,35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000,35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000,35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000,36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000,36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000,36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000,36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000,36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000,36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000,36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000,36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000,36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000,36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000,36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000,36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000,36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000,36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000,36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000,36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000,36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000,36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000,36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000,36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000,36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000,36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000,36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000,36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000,36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000,36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000,36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000,36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000,36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000,36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000,36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000,36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000,36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000,36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000,36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000,36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000,36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000,36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000,36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000,36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000,36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000,36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000,36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000,36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000,36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000,36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000,36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000,36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000,36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000,36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000,36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000,36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000,36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000,36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000,36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000,36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000,36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000,36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000,36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000,36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000,36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000,36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000,36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000,37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000,37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000,37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000,37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000,37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000,37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000,37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000,37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000,37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000,37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000,37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000,37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000,37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000,37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000,37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000,37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000,37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000,37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000,37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000,37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000,37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000,37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000,37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000,37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000,37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000,37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000,37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000,37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000,37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000,37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000,37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000,37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000,37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000,37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000,37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000,37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000,37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000,37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000,37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000,37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000,37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000,37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000,37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000,37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000,37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000,37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000,37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000,37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000,37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000,37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000,37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000,37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000,37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000,37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000,37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000,37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000,37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000,37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000,37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000,37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000,37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000,37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000,38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000,38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000,38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000,38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000,38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000,38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000,38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000,38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000,38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000,38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000,38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000,38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000,38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000,38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000,38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000,38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000,38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000,38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000,38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000,38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000,38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000,38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000,38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000,38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000,38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000,38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000,38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000,38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000,38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000,38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000,38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000,38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000,38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000,38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000,38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000,38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000,38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000,38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000,38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000,38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000,38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000,38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000,38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000,38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000,38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000,38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000,38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000,38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000,38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000,38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000,38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000,38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000,38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000,38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000,38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000,38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000,38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000,38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000,38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000,38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000,38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000,38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000,38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000,39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000,39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000,39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000,39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000,39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000,39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000,39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000,39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000,39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000,39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000,39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000,39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000,39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000,39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000,39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000,39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000,39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000,39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000,39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000,39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000,39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000,39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000,39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000,39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000,39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000,39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000,39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000,39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000,39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000,39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000,39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000,39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000,39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000,39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000,39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000,39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000,39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000,39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000,39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000,39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000,39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000,39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000,39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000,39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000,39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000,39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000,39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000,39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000,39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000,39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000,39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000,39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000,39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000,39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000,39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000,39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000,39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000,39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000,39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000,39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000,39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000,39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000,40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000,40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000,40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000,40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000,40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000,40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000,40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000,40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000,40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000,40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000,40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000,40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000,40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000,40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000,40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000,40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000,40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000,40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000,40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000,40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000,40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000,40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000,40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000,40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000,40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000,40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000,40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000,40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000,40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000,40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000,40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000,40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000,40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000,40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000,40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000,40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000,40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000,40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000,40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000,40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000,40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000,40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000,40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000,40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000,40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000,40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000,40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000,40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000,40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000,40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000,40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000,40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000,40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000,40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000,40869=>1000,44032=>1000,44033=>1000,44034=>1000,44035=>1000,44036=>1000,44037=>1000,44038=>1000,44039=>1000,44040=>1000,44041=>1000,44042=>1000,44043=>1000,44044=>1000,44045=>1000,44046=>1000,44047=>1000,44048=>1000,44049=>1000,44050=>1000,44051=>1000,44052=>1000,44053=>1000,44054=>1000,44055=>1000,44056=>1000,44057=>1000,44058=>1000,44059=>1000,44060=>1000,44061=>1000,44062=>1000,44063=>1000,44064=>1000,44065=>1000,44066=>1000,44067=>1000,44068=>1000,44069=>1000,44070=>1000,44071=>1000,44072=>1000,44073=>1000,44074=>1000,44075=>1000,44076=>1000,44077=>1000,44078=>1000,44079=>1000,44080=>1000,44081=>1000,44082=>1000,44083=>1000,44084=>1000,44085=>1000,44086=>1000,44087=>1000,44088=>1000,44089=>1000,44090=>1000,44091=>1000,44092=>1000,44093=>1000,44094=>1000,44095=>1000,44096=>1000,44097=>1000,44098=>1000,44099=>1000,44100=>1000,44101=>1000,44102=>1000,44103=>1000,44104=>1000,44105=>1000,44106=>1000,44107=>1000,44108=>1000,44109=>1000,44110=>1000,44111=>1000,44112=>1000,44113=>1000,44114=>1000,44115=>1000,44116=>1000,44117=>1000,44118=>1000,44119=>1000,44120=>1000,44121=>1000,44122=>1000,44123=>1000,44124=>1000,44125=>1000,44126=>1000,44127=>1000,44128=>1000,44129=>1000,44130=>1000,44131=>1000,44132=>1000,44133=>1000,44134=>1000,44135=>1000,44136=>1000,44137=>1000,44138=>1000,44139=>1000,44140=>1000,44141=>1000,44142=>1000,44143=>1000,44144=>1000,44145=>1000,44146=>1000,44147=>1000,44148=>1000,44149=>1000,44150=>1000,44151=>1000,44152=>1000,44153=>1000,44154=>1000,44155=>1000,44156=>1000,44157=>1000,44158=>1000,44159=>1000,44160=>1000,44161=>1000,44162=>1000,44163=>1000,44164=>1000,44165=>1000,44166=>1000,44167=>1000,44168=>1000,44169=>1000,44170=>1000,44171=>1000,44172=>1000,44173=>1000,44174=>1000,44175=>1000,44176=>1000,44177=>1000,44178=>1000,44179=>1000,44180=>1000,44181=>1000,44182=>1000,44183=>1000,44184=>1000,44185=>1000,44186=>1000,44187=>1000,44188=>1000,44189=>1000,44190=>1000,44191=>1000,44192=>1000,44193=>1000,44194=>1000,44195=>1000,44196=>1000,44197=>1000,44198=>1000,44199=>1000,44200=>1000,44201=>1000,44202=>1000,44203=>1000,44204=>1000,44205=>1000,44206=>1000,44207=>1000,44208=>1000,44209=>1000,44210=>1000,44211=>1000,44212=>1000,44213=>1000,44214=>1000,44215=>1000,44216=>1000,44217=>1000,44218=>1000,44219=>1000,44220=>1000,44221=>1000,44222=>1000,44223=>1000,44224=>1000,44225=>1000,44226=>1000,44227=>1000,44228=>1000,44229=>1000,44230=>1000,44231=>1000,44232=>1000,44233=>1000,44234=>1000,44235=>1000,44236=>1000,44237=>1000,44238=>1000,44239=>1000,44240=>1000,44241=>1000,44242=>1000,44243=>1000,44244=>1000,44245=>1000,44246=>1000,44247=>1000,44248=>1000,44249=>1000,44250=>1000,44251=>1000,44252=>1000,44253=>1000,44254=>1000,44255=>1000,44256=>1000,44257=>1000,44258=>1000,44259=>1000,44260=>1000,44261=>1000,44262=>1000,44263=>1000,44264=>1000,44265=>1000,44266=>1000,44267=>1000,44268=>1000,44269=>1000,44270=>1000,44271=>1000,44272=>1000,44273=>1000,44274=>1000,44275=>1000,44276=>1000,44277=>1000,44278=>1000,44279=>1000,44280=>1000,44281=>1000,44282=>1000,44283=>1000,44284=>1000,44285=>1000,44286=>1000,44287=>1000,44288=>1000,44289=>1000,44290=>1000,44291=>1000,44292=>1000,44293=>1000,44294=>1000,44295=>1000,44296=>1000,44297=>1000,44298=>1000,44299=>1000,44300=>1000,44301=>1000,44302=>1000,44303=>1000,44304=>1000,44305=>1000,44306=>1000,44307=>1000,44308=>1000,44309=>1000,44310=>1000,44311=>1000,44312=>1000,44313=>1000,44314=>1000,44315=>1000,44316=>1000,44317=>1000,44318=>1000,44319=>1000,44320=>1000,44321=>1000,44322=>1000,44323=>1000,44324=>1000,44325=>1000,44326=>1000,44327=>1000,44328=>1000,44329=>1000,44330=>1000,44331=>1000,44332=>1000,44333=>1000,44334=>1000,44335=>1000,44336=>1000,44337=>1000,44338=>1000,44339=>1000,44340=>1000,44341=>1000,44342=>1000,44343=>1000,44344=>1000,44345=>1000,44346=>1000,44347=>1000,44348=>1000,44349=>1000,44350=>1000,44351=>1000,44352=>1000,44353=>1000,44354=>1000,44355=>1000,44356=>1000,44357=>1000,44358=>1000,44359=>1000,44360=>1000,44361=>1000,44362=>1000,44363=>1000,44364=>1000,44365=>1000,44366=>1000,44367=>1000,44368=>1000,44369=>1000,44370=>1000,44371=>1000,44372=>1000,44373=>1000,44374=>1000,44375=>1000,44376=>1000,44377=>1000,44378=>1000,44379=>1000,44380=>1000,44381=>1000,44382=>1000,44383=>1000,44384=>1000,44385=>1000,44386=>1000,44387=>1000,44388=>1000,44389=>1000,44390=>1000,44391=>1000,44392=>1000,44393=>1000,44394=>1000,44395=>1000,44396=>1000,44397=>1000,44398=>1000,44399=>1000,44400=>1000,44401=>1000,44402=>1000,44403=>1000,44404=>1000,44405=>1000,44406=>1000,44407=>1000,44408=>1000,44409=>1000,44410=>1000,44411=>1000,44412=>1000,44413=>1000,44414=>1000,44415=>1000,44416=>1000,44417=>1000,44418=>1000,44419=>1000,44420=>1000,44421=>1000,44422=>1000,44423=>1000,44424=>1000,44425=>1000,44426=>1000,44427=>1000,44428=>1000,44429=>1000,44430=>1000,44431=>1000,44432=>1000,44433=>1000,44434=>1000,44435=>1000,44436=>1000,44437=>1000,44438=>1000,44439=>1000,44440=>1000,44441=>1000,44442=>1000,44443=>1000,44444=>1000,44445=>1000,44446=>1000,44447=>1000,44448=>1000,44449=>1000,44450=>1000,44451=>1000,44452=>1000,44453=>1000,44454=>1000,44455=>1000,44456=>1000,44457=>1000,44458=>1000,44459=>1000,44460=>1000,44461=>1000,44462=>1000,44463=>1000,44464=>1000,44465=>1000,44466=>1000,44467=>1000,44468=>1000,44469=>1000,44470=>1000,44471=>1000,44472=>1000,44473=>1000,44474=>1000,44475=>1000,44476=>1000,44477=>1000,44478=>1000,44479=>1000,44480=>1000,44481=>1000,44482=>1000,44483=>1000,44484=>1000,44485=>1000,44486=>1000,44487=>1000,44488=>1000,44489=>1000,44490=>1000,44491=>1000,44492=>1000,44493=>1000,44494=>1000,44495=>1000,44496=>1000,44497=>1000,44498=>1000,44499=>1000,44500=>1000,44501=>1000,44502=>1000,44503=>1000,44504=>1000,44505=>1000,44506=>1000,44507=>1000,44508=>1000,44509=>1000,44510=>1000,44511=>1000,44512=>1000,44513=>1000,44514=>1000,44515=>1000,44516=>1000,44517=>1000,44518=>1000,44519=>1000,44520=>1000,44521=>1000,44522=>1000,44523=>1000,44524=>1000,44525=>1000,44526=>1000,44527=>1000,44528=>1000,44529=>1000,44530=>1000,44531=>1000,44532=>1000,44533=>1000,44534=>1000,44535=>1000,44536=>1000,44537=>1000,44538=>1000,44539=>1000,44540=>1000,44541=>1000,44542=>1000,44543=>1000,44544=>1000,44545=>1000,44546=>1000,44547=>1000,44548=>1000,44549=>1000,44550=>1000,44551=>1000,44552=>1000,44553=>1000,44554=>1000,44555=>1000,44556=>1000,44557=>1000,44558=>1000,44559=>1000,44560=>1000,44561=>1000,44562=>1000,44563=>1000,44564=>1000,44565=>1000,44566=>1000,44567=>1000,44568=>1000,44569=>1000,44570=>1000,44571=>1000,44572=>1000,44573=>1000,44574=>1000,44575=>1000,44576=>1000,44577=>1000,44578=>1000,44579=>1000,44580=>1000,44581=>1000,44582=>1000,44583=>1000,44584=>1000,44585=>1000,44586=>1000,44587=>1000,44588=>1000,44589=>1000,44590=>1000,44591=>1000,44592=>1000,44593=>1000,44594=>1000,44595=>1000,44596=>1000,44597=>1000,44598=>1000,44599=>1000,44600=>1000,44601=>1000,44602=>1000,44603=>1000,44604=>1000,44605=>1000,44606=>1000,44607=>1000,44608=>1000,44609=>1000,44610=>1000,44611=>1000,44612=>1000,44613=>1000,44614=>1000,44615=>1000,44616=>1000,44617=>1000,44618=>1000,44619=>1000,44620=>1000,44621=>1000,44622=>1000,44623=>1000,44624=>1000,44625=>1000,44626=>1000,44627=>1000,44628=>1000,44629=>1000,44630=>1000,44631=>1000,44632=>1000,44633=>1000,44634=>1000,44635=>1000,44636=>1000,44637=>1000,44638=>1000,44639=>1000,44640=>1000,44641=>1000,44642=>1000,44643=>1000,44644=>1000,44645=>1000,44646=>1000,44647=>1000,44648=>1000,44649=>1000,44650=>1000,44651=>1000,44652=>1000,44653=>1000,44654=>1000,44655=>1000,44656=>1000,44657=>1000,44658=>1000,44659=>1000,44660=>1000,44661=>1000,44662=>1000,44663=>1000,44664=>1000,44665=>1000,44666=>1000,44667=>1000,44668=>1000,44669=>1000,44670=>1000,44671=>1000,44672=>1000,44673=>1000,44674=>1000,44675=>1000,44676=>1000,44677=>1000,44678=>1000,44679=>1000,44680=>1000,44681=>1000,44682=>1000,44683=>1000,44684=>1000,44685=>1000,44686=>1000,44687=>1000,44688=>1000,44689=>1000,44690=>1000,44691=>1000,44692=>1000,44693=>1000,44694=>1000,44695=>1000,44696=>1000,44697=>1000,44698=>1000,44699=>1000,44700=>1000,44701=>1000,44702=>1000,44703=>1000,44704=>1000,44705=>1000,44706=>1000,44707=>1000,44708=>1000,44709=>1000,44710=>1000,44711=>1000,44712=>1000,44713=>1000,44714=>1000,44715=>1000,44716=>1000,44717=>1000,44718=>1000,44719=>1000,44720=>1000,44721=>1000,44722=>1000,44723=>1000,44724=>1000,44725=>1000,44726=>1000,44727=>1000,44728=>1000,44729=>1000,44730=>1000,44731=>1000,44732=>1000,44733=>1000,44734=>1000,44735=>1000,44736=>1000,44737=>1000,44738=>1000,44739=>1000,44740=>1000,44741=>1000,44742=>1000,44743=>1000,44744=>1000,44745=>1000,44746=>1000,44747=>1000,44748=>1000,44749=>1000,44750=>1000,44751=>1000,44752=>1000,44753=>1000,44754=>1000,44755=>1000,44756=>1000,44757=>1000,44758=>1000,44759=>1000,44760=>1000,44761=>1000,44762=>1000,44763=>1000,44764=>1000,44765=>1000,44766=>1000,44767=>1000,44768=>1000,44769=>1000,44770=>1000,44771=>1000,44772=>1000,44773=>1000,44774=>1000,44775=>1000,44776=>1000,44777=>1000,44778=>1000,44779=>1000,44780=>1000,44781=>1000,44782=>1000,44783=>1000,44784=>1000,44785=>1000,44786=>1000,44787=>1000,44788=>1000,44789=>1000,44790=>1000,44791=>1000,44792=>1000,44793=>1000,44794=>1000,44795=>1000,44796=>1000,44797=>1000,44798=>1000,44799=>1000,44800=>1000,44801=>1000,44802=>1000,44803=>1000,44804=>1000,44805=>1000,44806=>1000,44807=>1000,44808=>1000,44809=>1000,44810=>1000,44811=>1000,44812=>1000,44813=>1000,44814=>1000,44815=>1000,44816=>1000,44817=>1000,44818=>1000,44819=>1000,44820=>1000,44821=>1000,44822=>1000,44823=>1000,44824=>1000,44825=>1000,44826=>1000,44827=>1000,44828=>1000,44829=>1000,44830=>1000,44831=>1000,44832=>1000,44833=>1000,44834=>1000,44835=>1000,44836=>1000,44837=>1000,44838=>1000,44839=>1000,44840=>1000,44841=>1000,44842=>1000,44843=>1000,44844=>1000,44845=>1000,44846=>1000,44847=>1000,44848=>1000,44849=>1000,44850=>1000,44851=>1000,44852=>1000,44853=>1000,44854=>1000,44855=>1000,44856=>1000,44857=>1000,44858=>1000,44859=>1000,44860=>1000,44861=>1000,44862=>1000,44863=>1000,44864=>1000,44865=>1000,44866=>1000,44867=>1000,44868=>1000,44869=>1000,44870=>1000,44871=>1000,44872=>1000,44873=>1000,44874=>1000,44875=>1000,44876=>1000,44877=>1000,44878=>1000,44879=>1000,44880=>1000,44881=>1000,44882=>1000,44883=>1000,44884=>1000,44885=>1000,44886=>1000,44887=>1000,44888=>1000,44889=>1000,44890=>1000,44891=>1000,44892=>1000,44893=>1000,44894=>1000,44895=>1000,44896=>1000,44897=>1000,44898=>1000,44899=>1000,44900=>1000,44901=>1000,44902=>1000,44903=>1000,44904=>1000,44905=>1000,44906=>1000,44907=>1000,44908=>1000,44909=>1000,44910=>1000,44911=>1000,44912=>1000,44913=>1000,44914=>1000,44915=>1000,44916=>1000,44917=>1000,44918=>1000,44919=>1000,44920=>1000,44921=>1000,44922=>1000,44923=>1000,44924=>1000,44925=>1000,44926=>1000,44927=>1000,44928=>1000,44929=>1000,44930=>1000,44931=>1000,44932=>1000,44933=>1000,44934=>1000,44935=>1000,44936=>1000,44937=>1000,44938=>1000,44939=>1000,44940=>1000,44941=>1000,44942=>1000,44943=>1000,44944=>1000,44945=>1000,44946=>1000,44947=>1000,44948=>1000,44949=>1000,44950=>1000,44951=>1000,44952=>1000,44953=>1000,44954=>1000,44955=>1000,44956=>1000,44957=>1000,44958=>1000,44959=>1000,44960=>1000,44961=>1000,44962=>1000,44963=>1000,44964=>1000,44965=>1000,44966=>1000,44967=>1000,44968=>1000,44969=>1000,44970=>1000,44971=>1000,44972=>1000,44973=>1000,44974=>1000,44975=>1000,44976=>1000,44977=>1000,44978=>1000,44979=>1000,44980=>1000,44981=>1000,44982=>1000,44983=>1000,44984=>1000,44985=>1000,44986=>1000,44987=>1000,44988=>1000,44989=>1000,44990=>1000,44991=>1000,44992=>1000,44993=>1000,44994=>1000,44995=>1000,44996=>1000,44997=>1000,44998=>1000,44999=>1000,45000=>1000,45001=>1000,45002=>1000,45003=>1000,45004=>1000,45005=>1000,45006=>1000,45007=>1000,45008=>1000,45009=>1000,45010=>1000,45011=>1000,45012=>1000,45013=>1000,45014=>1000,45015=>1000,45016=>1000,45017=>1000,45018=>1000,45019=>1000,45020=>1000,45021=>1000,45022=>1000,45023=>1000,45024=>1000,45025=>1000,45026=>1000,45027=>1000,45028=>1000,45029=>1000,45030=>1000,45031=>1000,45032=>1000,45033=>1000,45034=>1000,45035=>1000,45036=>1000,45037=>1000,45038=>1000,45039=>1000,45040=>1000,45041=>1000,45042=>1000,45043=>1000,45044=>1000,45045=>1000,45046=>1000,45047=>1000,45048=>1000,45049=>1000,45050=>1000,45051=>1000,45052=>1000,45053=>1000,45054=>1000,45055=>1000,45056=>1000,45057=>1000,45058=>1000,45059=>1000,45060=>1000,45061=>1000,45062=>1000,45063=>1000,45064=>1000,45065=>1000,45066=>1000,45067=>1000,45068=>1000,45069=>1000,45070=>1000,45071=>1000,45072=>1000,45073=>1000,45074=>1000,45075=>1000,45076=>1000,45077=>1000,45078=>1000,45079=>1000,45080=>1000,45081=>1000,45082=>1000,45083=>1000,45084=>1000,45085=>1000,45086=>1000,45087=>1000,45088=>1000,45089=>1000,45090=>1000,45091=>1000,45092=>1000,45093=>1000,45094=>1000,45095=>1000,45096=>1000,45097=>1000,45098=>1000,45099=>1000,45100=>1000,45101=>1000,45102=>1000,45103=>1000,45104=>1000,45105=>1000,45106=>1000,45107=>1000,45108=>1000,45109=>1000,45110=>1000,45111=>1000,45112=>1000,45113=>1000,45114=>1000,45115=>1000,45116=>1000,45117=>1000,45118=>1000,45119=>1000,45120=>1000,45121=>1000,45122=>1000,45123=>1000,45124=>1000,45125=>1000,45126=>1000,45127=>1000,45128=>1000,45129=>1000,45130=>1000,45131=>1000,45132=>1000,45133=>1000,45134=>1000,45135=>1000,45136=>1000,45137=>1000,45138=>1000,45139=>1000,45140=>1000,45141=>1000,45142=>1000,45143=>1000,45144=>1000,45145=>1000,45146=>1000,45147=>1000,45148=>1000,45149=>1000,45150=>1000,45151=>1000,45152=>1000,45153=>1000,45154=>1000,45155=>1000,45156=>1000,45157=>1000,45158=>1000,45159=>1000,45160=>1000,45161=>1000,45162=>1000,45163=>1000,45164=>1000,45165=>1000,45166=>1000,45167=>1000,45168=>1000,45169=>1000,45170=>1000,45171=>1000,45172=>1000,45173=>1000,45174=>1000,45175=>1000,45176=>1000,45177=>1000,45178=>1000,45179=>1000,45180=>1000,45181=>1000,45182=>1000,45183=>1000,45184=>1000,45185=>1000,45186=>1000,45187=>1000,45188=>1000,45189=>1000,45190=>1000,45191=>1000,45192=>1000,45193=>1000,45194=>1000,45195=>1000,45196=>1000,45197=>1000,45198=>1000,45199=>1000,45200=>1000,45201=>1000,45202=>1000,45203=>1000,45204=>1000,45205=>1000,45206=>1000,45207=>1000,45208=>1000,45209=>1000,45210=>1000,45211=>1000,45212=>1000,45213=>1000,45214=>1000,45215=>1000,45216=>1000,45217=>1000,45218=>1000,45219=>1000,45220=>1000,45221=>1000,45222=>1000,45223=>1000,45224=>1000,45225=>1000,45226=>1000,45227=>1000,45228=>1000,45229=>1000,45230=>1000,45231=>1000,45232=>1000,45233=>1000,45234=>1000,45235=>1000,45236=>1000,45237=>1000,45238=>1000,45239=>1000,45240=>1000,45241=>1000,45242=>1000,45243=>1000,45244=>1000,45245=>1000,45246=>1000,45247=>1000,45248=>1000,45249=>1000,45250=>1000,45251=>1000,45252=>1000,45253=>1000,45254=>1000,45255=>1000,45256=>1000,45257=>1000,45258=>1000,45259=>1000,45260=>1000,45261=>1000,45262=>1000,45263=>1000,45264=>1000,45265=>1000,45266=>1000,45267=>1000,45268=>1000,45269=>1000,45270=>1000,45271=>1000,45272=>1000,45273=>1000,45274=>1000,45275=>1000,45276=>1000,45277=>1000,45278=>1000,45279=>1000,45280=>1000,45281=>1000,45282=>1000,45283=>1000,45284=>1000,45285=>1000,45286=>1000,45287=>1000,45288=>1000,45289=>1000,45290=>1000,45291=>1000,45292=>1000,45293=>1000,45294=>1000,45295=>1000,45296=>1000,45297=>1000,45298=>1000,45299=>1000,45300=>1000,45301=>1000,45302=>1000,45303=>1000,45304=>1000,45305=>1000,45306=>1000,45307=>1000,45308=>1000,45309=>1000,45310=>1000,45311=>1000,45312=>1000,45313=>1000,45314=>1000,45315=>1000,45316=>1000,45317=>1000,45318=>1000,45319=>1000,45320=>1000,45321=>1000,45322=>1000,45323=>1000,45324=>1000,45325=>1000,45326=>1000,45327=>1000,45328=>1000,45329=>1000,45330=>1000,45331=>1000,45332=>1000,45333=>1000,45334=>1000,45335=>1000,45336=>1000,45337=>1000,45338=>1000,45339=>1000,45340=>1000,45341=>1000,45342=>1000,45343=>1000,45344=>1000,45345=>1000,45346=>1000,45347=>1000,45348=>1000,45349=>1000,45350=>1000,45351=>1000,45352=>1000,45353=>1000,45354=>1000,45355=>1000,45356=>1000,45357=>1000,45358=>1000,45359=>1000,45360=>1000,45361=>1000,45362=>1000,45363=>1000,45364=>1000,45365=>1000,45366=>1000,45367=>1000,45368=>1000,45369=>1000,45370=>1000,45371=>1000,45372=>1000,45373=>1000,45374=>1000,45375=>1000,45376=>1000,45377=>1000,45378=>1000,45379=>1000,45380=>1000,45381=>1000,45382=>1000,45383=>1000,45384=>1000,45385=>1000,45386=>1000,45387=>1000,45388=>1000,45389=>1000,45390=>1000,45391=>1000,45392=>1000,45393=>1000,45394=>1000,45395=>1000,45396=>1000,45397=>1000,45398=>1000,45399=>1000,45400=>1000,45401=>1000,45402=>1000,45403=>1000,45404=>1000,45405=>1000,45406=>1000,45407=>1000,45408=>1000,45409=>1000,45410=>1000,45411=>1000,45412=>1000,45413=>1000,45414=>1000,45415=>1000,45416=>1000,45417=>1000,45418=>1000,45419=>1000,45420=>1000,45421=>1000,45422=>1000,45423=>1000,45424=>1000,45425=>1000,45426=>1000,45427=>1000,45428=>1000,45429=>1000,45430=>1000,45431=>1000,45432=>1000,45433=>1000,45434=>1000,45435=>1000,45436=>1000,45437=>1000,45438=>1000,45439=>1000,45440=>1000,45441=>1000,45442=>1000,45443=>1000,45444=>1000,45445=>1000,45446=>1000,45447=>1000,45448=>1000,45449=>1000,45450=>1000,45451=>1000,45452=>1000,45453=>1000,45454=>1000,45455=>1000,45456=>1000,45457=>1000,45458=>1000,45459=>1000,45460=>1000,45461=>1000,45462=>1000,45463=>1000,45464=>1000,45465=>1000,45466=>1000,45467=>1000,45468=>1000,45469=>1000,45470=>1000,45471=>1000,45472=>1000,45473=>1000,45474=>1000,45475=>1000,45476=>1000,45477=>1000,45478=>1000,45479=>1000,45480=>1000,45481=>1000,45482=>1000,45483=>1000,45484=>1000,45485=>1000,45486=>1000,45487=>1000,45488=>1000,45489=>1000,45490=>1000,45491=>1000,45492=>1000,45493=>1000,45494=>1000,45495=>1000,45496=>1000,45497=>1000,45498=>1000,45499=>1000,45500=>1000,45501=>1000,45502=>1000,45503=>1000,45504=>1000,45505=>1000,45506=>1000,45507=>1000,45508=>1000,45509=>1000,45510=>1000,45511=>1000,45512=>1000,45513=>1000,45514=>1000,45515=>1000,45516=>1000,45517=>1000,45518=>1000,45519=>1000,45520=>1000,45521=>1000,45522=>1000,45523=>1000,45524=>1000,45525=>1000,45526=>1000,45527=>1000,45528=>1000,45529=>1000,45530=>1000,45531=>1000,45532=>1000,45533=>1000,45534=>1000,45535=>1000,45536=>1000,45537=>1000,45538=>1000,45539=>1000,45540=>1000,45541=>1000,45542=>1000,45543=>1000,45544=>1000,45545=>1000,45546=>1000,45547=>1000,45548=>1000,45549=>1000,45550=>1000,45551=>1000,45552=>1000,45553=>1000,45554=>1000,45555=>1000,45556=>1000,45557=>1000,45558=>1000,45559=>1000,45560=>1000,45561=>1000,45562=>1000,45563=>1000,45564=>1000,45565=>1000,45566=>1000,45567=>1000,45568=>1000,45569=>1000,45570=>1000,45571=>1000,45572=>1000,45573=>1000,45574=>1000,45575=>1000,45576=>1000,45577=>1000,45578=>1000,45579=>1000,45580=>1000,45581=>1000,45582=>1000,45583=>1000,45584=>1000,45585=>1000,45586=>1000,45587=>1000,45588=>1000,45589=>1000,45590=>1000,45591=>1000,45592=>1000,45593=>1000,45594=>1000,45595=>1000,45596=>1000,45597=>1000,45598=>1000,45599=>1000,45600=>1000,45601=>1000,45602=>1000,45603=>1000,45604=>1000,45605=>1000,45606=>1000,45607=>1000,45608=>1000,45609=>1000,45610=>1000,45611=>1000,45612=>1000,45613=>1000,45614=>1000,45615=>1000,45616=>1000,45617=>1000,45618=>1000,45619=>1000,45620=>1000,45621=>1000,45622=>1000,45623=>1000,45624=>1000,45625=>1000,45626=>1000,45627=>1000,45628=>1000,45629=>1000,45630=>1000,45631=>1000,45632=>1000,45633=>1000,45634=>1000,45635=>1000,45636=>1000,45637=>1000,45638=>1000,45639=>1000,45640=>1000,45641=>1000,45642=>1000,45643=>1000,45644=>1000,45645=>1000,45646=>1000,45647=>1000,45648=>1000,45649=>1000,45650=>1000,45651=>1000,45652=>1000,45653=>1000,45654=>1000,45655=>1000,45656=>1000,45657=>1000,45658=>1000,45659=>1000,45660=>1000,45661=>1000,45662=>1000,45663=>1000,45664=>1000,45665=>1000,45666=>1000,45667=>1000,45668=>1000,45669=>1000,45670=>1000,45671=>1000,45672=>1000,45673=>1000,45674=>1000,45675=>1000,45676=>1000,45677=>1000,45678=>1000,45679=>1000,45680=>1000,45681=>1000,45682=>1000,45683=>1000,45684=>1000,45685=>1000,45686=>1000,45687=>1000,45688=>1000,45689=>1000,45690=>1000,45691=>1000,45692=>1000,45693=>1000,45694=>1000,45695=>1000,45696=>1000,45697=>1000,45698=>1000,45699=>1000,45700=>1000,45701=>1000,45702=>1000,45703=>1000,45704=>1000,45705=>1000,45706=>1000,45707=>1000,45708=>1000,45709=>1000,45710=>1000,45711=>1000,45712=>1000,45713=>1000,45714=>1000,45715=>1000,45716=>1000,45717=>1000,45718=>1000,45719=>1000,45720=>1000,45721=>1000,45722=>1000,45723=>1000,45724=>1000,45725=>1000,45726=>1000,45727=>1000,45728=>1000,45729=>1000,45730=>1000,45731=>1000,45732=>1000,45733=>1000,45734=>1000,45735=>1000,45736=>1000,45737=>1000,45738=>1000,45739=>1000,45740=>1000,45741=>1000,45742=>1000,45743=>1000,45744=>1000,45745=>1000,45746=>1000,45747=>1000,45748=>1000,45749=>1000,45750=>1000,45751=>1000,45752=>1000,45753=>1000,45754=>1000,45755=>1000,45756=>1000,45757=>1000,45758=>1000,45759=>1000,45760=>1000,45761=>1000,45762=>1000,45763=>1000,45764=>1000,45765=>1000,45766=>1000,45767=>1000,45768=>1000,45769=>1000,45770=>1000,45771=>1000,45772=>1000,45773=>1000,45774=>1000,45775=>1000,45776=>1000,45777=>1000,45778=>1000,45779=>1000,45780=>1000,45781=>1000,45782=>1000,45783=>1000,45784=>1000,45785=>1000,45786=>1000,45787=>1000,45788=>1000,45789=>1000,45790=>1000,45791=>1000,45792=>1000,45793=>1000,45794=>1000,45795=>1000,45796=>1000,45797=>1000,45798=>1000,45799=>1000,45800=>1000,45801=>1000,45802=>1000,45803=>1000,45804=>1000,45805=>1000,45806=>1000,45807=>1000,45808=>1000,45809=>1000,45810=>1000,45811=>1000,45812=>1000,45813=>1000,45814=>1000,45815=>1000,45816=>1000,45817=>1000,45818=>1000,45819=>1000,45820=>1000,45821=>1000,45822=>1000,45823=>1000,45824=>1000,45825=>1000,45826=>1000,45827=>1000,45828=>1000,45829=>1000,45830=>1000,45831=>1000,45832=>1000,45833=>1000,45834=>1000,45835=>1000,45836=>1000,45837=>1000,45838=>1000,45839=>1000,45840=>1000,45841=>1000,45842=>1000,45843=>1000,45844=>1000,45845=>1000,45846=>1000,45847=>1000,45848=>1000,45849=>1000,45850=>1000,45851=>1000,45852=>1000,45853=>1000,45854=>1000,45855=>1000,45856=>1000,45857=>1000,45858=>1000,45859=>1000,45860=>1000,45861=>1000,45862=>1000,45863=>1000,45864=>1000,45865=>1000,45866=>1000,45867=>1000,45868=>1000,45869=>1000,45870=>1000,45871=>1000,45872=>1000,45873=>1000,45874=>1000,45875=>1000,45876=>1000,45877=>1000,45878=>1000,45879=>1000,45880=>1000,45881=>1000,45882=>1000,45883=>1000,45884=>1000,45885=>1000,45886=>1000,45887=>1000,45888=>1000,45889=>1000,45890=>1000,45891=>1000,45892=>1000,45893=>1000,45894=>1000,45895=>1000,45896=>1000,45897=>1000,45898=>1000,45899=>1000,45900=>1000,45901=>1000,45902=>1000,45903=>1000,45904=>1000,45905=>1000,45906=>1000,45907=>1000,45908=>1000,45909=>1000,45910=>1000,45911=>1000,45912=>1000,45913=>1000,45914=>1000,45915=>1000,45916=>1000,45917=>1000,45918=>1000,45919=>1000,45920=>1000,45921=>1000,45922=>1000,45923=>1000,45924=>1000,45925=>1000,45926=>1000,45927=>1000,45928=>1000,45929=>1000,45930=>1000,45931=>1000,45932=>1000,45933=>1000,45934=>1000,45935=>1000,45936=>1000,45937=>1000,45938=>1000,45939=>1000,45940=>1000,45941=>1000,45942=>1000,45943=>1000,45944=>1000,45945=>1000,45946=>1000,45947=>1000,45948=>1000,45949=>1000,45950=>1000,45951=>1000,45952=>1000,45953=>1000,45954=>1000,45955=>1000,45956=>1000,45957=>1000,45958=>1000,45959=>1000,45960=>1000,45961=>1000,45962=>1000,45963=>1000,45964=>1000,45965=>1000,45966=>1000,45967=>1000,45968=>1000,45969=>1000,45970=>1000,45971=>1000,45972=>1000,45973=>1000,45974=>1000,45975=>1000,45976=>1000,45977=>1000,45978=>1000,45979=>1000,45980=>1000,45981=>1000,45982=>1000,45983=>1000,45984=>1000,45985=>1000,45986=>1000,45987=>1000,45988=>1000,45989=>1000,45990=>1000,45991=>1000,45992=>1000,45993=>1000,45994=>1000,45995=>1000,45996=>1000,45997=>1000,45998=>1000,45999=>1000,46000=>1000,46001=>1000,46002=>1000,46003=>1000,46004=>1000,46005=>1000,46006=>1000,46007=>1000,46008=>1000,46009=>1000,46010=>1000,46011=>1000,46012=>1000,46013=>1000,46014=>1000,46015=>1000,46016=>1000,46017=>1000,46018=>1000,46019=>1000,46020=>1000,46021=>1000,46022=>1000,46023=>1000,46024=>1000,46025=>1000,46026=>1000,46027=>1000,46028=>1000,46029=>1000,46030=>1000,46031=>1000,46032=>1000,46033=>1000,46034=>1000,46035=>1000,46036=>1000,46037=>1000,46038=>1000,46039=>1000,46040=>1000,46041=>1000,46042=>1000,46043=>1000,46044=>1000,46045=>1000,46046=>1000,46047=>1000,46048=>1000,46049=>1000,46050=>1000,46051=>1000,46052=>1000,46053=>1000,46054=>1000,46055=>1000,46056=>1000,46057=>1000,46058=>1000,46059=>1000,46060=>1000,46061=>1000,46062=>1000,46063=>1000,46064=>1000,46065=>1000,46066=>1000,46067=>1000,46068=>1000,46069=>1000,46070=>1000,46071=>1000,46072=>1000,46073=>1000,46074=>1000,46075=>1000,46076=>1000,46077=>1000,46078=>1000,46079=>1000,46080=>1000,46081=>1000,46082=>1000,46083=>1000,46084=>1000,46085=>1000,46086=>1000,46087=>1000,46088=>1000,46089=>1000,46090=>1000,46091=>1000,46092=>1000,46093=>1000,46094=>1000,46095=>1000,46096=>1000,46097=>1000,46098=>1000,46099=>1000,46100=>1000,46101=>1000,46102=>1000,46103=>1000,46104=>1000,46105=>1000,46106=>1000,46107=>1000,46108=>1000,46109=>1000,46110=>1000,46111=>1000,46112=>1000,46113=>1000,46114=>1000,46115=>1000,46116=>1000,46117=>1000,46118=>1000,46119=>1000,46120=>1000,46121=>1000,46122=>1000,46123=>1000,46124=>1000,46125=>1000,46126=>1000,46127=>1000,46128=>1000,46129=>1000,46130=>1000,46131=>1000,46132=>1000,46133=>1000,46134=>1000,46135=>1000,46136=>1000,46137=>1000,46138=>1000,46139=>1000,46140=>1000,46141=>1000,46142=>1000,46143=>1000,46144=>1000,46145=>1000,46146=>1000,46147=>1000,46148=>1000,46149=>1000,46150=>1000,46151=>1000,46152=>1000,46153=>1000,46154=>1000,46155=>1000,46156=>1000,46157=>1000,46158=>1000,46159=>1000,46160=>1000,46161=>1000,46162=>1000,46163=>1000,46164=>1000,46165=>1000,46166=>1000,46167=>1000,46168=>1000,46169=>1000,46170=>1000,46171=>1000,46172=>1000,46173=>1000,46174=>1000,46175=>1000,46176=>1000,46177=>1000,46178=>1000,46179=>1000,46180=>1000,46181=>1000,46182=>1000,46183=>1000,46184=>1000,46185=>1000,46186=>1000,46187=>1000,46188=>1000,46189=>1000,46190=>1000,46191=>1000,46192=>1000,46193=>1000,46194=>1000,46195=>1000,46196=>1000,46197=>1000,46198=>1000,46199=>1000,46200=>1000,46201=>1000,46202=>1000,46203=>1000,46204=>1000,46205=>1000,46206=>1000,46207=>1000,46208=>1000,46209=>1000,46210=>1000,46211=>1000,46212=>1000,46213=>1000,46214=>1000,46215=>1000,46216=>1000,46217=>1000,46218=>1000,46219=>1000,46220=>1000,46221=>1000,46222=>1000,46223=>1000,46224=>1000,46225=>1000,46226=>1000,46227=>1000,46228=>1000,46229=>1000,46230=>1000,46231=>1000,46232=>1000,46233=>1000,46234=>1000,46235=>1000,46236=>1000,46237=>1000,46238=>1000,46239=>1000,46240=>1000,46241=>1000,46242=>1000,46243=>1000,46244=>1000,46245=>1000,46246=>1000,46247=>1000,46248=>1000,46249=>1000,46250=>1000,46251=>1000,46252=>1000,46253=>1000,46254=>1000,46255=>1000,46256=>1000,46257=>1000,46258=>1000,46259=>1000,46260=>1000,46261=>1000,46262=>1000,46263=>1000,46264=>1000,46265=>1000,46266=>1000,46267=>1000,46268=>1000,46269=>1000,46270=>1000,46271=>1000,46272=>1000,46273=>1000,46274=>1000,46275=>1000,46276=>1000,46277=>1000,46278=>1000,46279=>1000,46280=>1000,46281=>1000,46282=>1000,46283=>1000,46284=>1000,46285=>1000,46286=>1000,46287=>1000,46288=>1000,46289=>1000,46290=>1000,46291=>1000,46292=>1000,46293=>1000,46294=>1000,46295=>1000,46296=>1000,46297=>1000,46298=>1000,46299=>1000,46300=>1000,46301=>1000,46302=>1000,46303=>1000,46304=>1000,46305=>1000,46306=>1000,46307=>1000,46308=>1000,46309=>1000,46310=>1000,46311=>1000,46312=>1000,46313=>1000,46314=>1000,46315=>1000,46316=>1000,46317=>1000,46318=>1000,46319=>1000,46320=>1000,46321=>1000,46322=>1000,46323=>1000,46324=>1000,46325=>1000,46326=>1000,46327=>1000,46328=>1000,46329=>1000,46330=>1000,46331=>1000,46332=>1000,46333=>1000,46334=>1000,46335=>1000,46336=>1000,46337=>1000,46338=>1000,46339=>1000,46340=>1000,46341=>1000,46342=>1000,46343=>1000,46344=>1000,46345=>1000,46346=>1000,46347=>1000,46348=>1000,46349=>1000,46350=>1000,46351=>1000,46352=>1000,46353=>1000,46354=>1000,46355=>1000,46356=>1000,46357=>1000,46358=>1000,46359=>1000,46360=>1000,46361=>1000,46362=>1000,46363=>1000,46364=>1000,46365=>1000,46366=>1000,46367=>1000,46368=>1000,46369=>1000,46370=>1000,46371=>1000,46372=>1000,46373=>1000,46374=>1000,46375=>1000,46376=>1000,46377=>1000,46378=>1000,46379=>1000,46380=>1000,46381=>1000,46382=>1000,46383=>1000,46384=>1000,46385=>1000,46386=>1000,46387=>1000,46388=>1000,46389=>1000,46390=>1000,46391=>1000,46392=>1000,46393=>1000,46394=>1000,46395=>1000,46396=>1000,46397=>1000,46398=>1000,46399=>1000,46400=>1000,46401=>1000,46402=>1000,46403=>1000,46404=>1000,46405=>1000,46406=>1000,46407=>1000,46408=>1000,46409=>1000,46410=>1000,46411=>1000,46412=>1000,46413=>1000,46414=>1000,46415=>1000,46416=>1000,46417=>1000,46418=>1000,46419=>1000,46420=>1000,46421=>1000,46422=>1000,46423=>1000,46424=>1000,46425=>1000,46426=>1000,46427=>1000,46428=>1000,46429=>1000,46430=>1000,46431=>1000,46432=>1000,46433=>1000,46434=>1000,46435=>1000,46436=>1000,46437=>1000,46438=>1000,46439=>1000,46440=>1000,46441=>1000,46442=>1000,46443=>1000,46444=>1000,46445=>1000,46446=>1000,46447=>1000,46448=>1000,46449=>1000,46450=>1000,46451=>1000,46452=>1000,46453=>1000,46454=>1000,46455=>1000,46456=>1000,46457=>1000,46458=>1000,46459=>1000,46460=>1000,46461=>1000,46462=>1000,46463=>1000,46464=>1000,46465=>1000,46466=>1000,46467=>1000,46468=>1000,46469=>1000,46470=>1000,46471=>1000,46472=>1000,46473=>1000,46474=>1000,46475=>1000,46476=>1000,46477=>1000,46478=>1000,46479=>1000,46480=>1000,46481=>1000,46482=>1000,46483=>1000,46484=>1000,46485=>1000,46486=>1000,46487=>1000,46488=>1000,46489=>1000,46490=>1000,46491=>1000,46492=>1000,46493=>1000,46494=>1000,46495=>1000,46496=>1000,46497=>1000,46498=>1000,46499=>1000,46500=>1000,46501=>1000,46502=>1000,46503=>1000,46504=>1000,46505=>1000,46506=>1000,46507=>1000,46508=>1000,46509=>1000,46510=>1000,46511=>1000,46512=>1000,46513=>1000,46514=>1000,46515=>1000,46516=>1000,46517=>1000,46518=>1000,46519=>1000,46520=>1000,46521=>1000,46522=>1000,46523=>1000,46524=>1000,46525=>1000,46526=>1000,46527=>1000,46528=>1000,46529=>1000,46530=>1000,46531=>1000,46532=>1000,46533=>1000,46534=>1000,46535=>1000,46536=>1000,46537=>1000,46538=>1000,46539=>1000,46540=>1000,46541=>1000,46542=>1000,46543=>1000,46544=>1000,46545=>1000,46546=>1000,46547=>1000,46548=>1000,46549=>1000,46550=>1000,46551=>1000,46552=>1000,46553=>1000,46554=>1000,46555=>1000,46556=>1000,46557=>1000,46558=>1000,46559=>1000,46560=>1000,46561=>1000,46562=>1000,46563=>1000,46564=>1000,46565=>1000,46566=>1000,46567=>1000,46568=>1000,46569=>1000,46570=>1000,46571=>1000,46572=>1000,46573=>1000,46574=>1000,46575=>1000,46576=>1000,46577=>1000,46578=>1000,46579=>1000,46580=>1000,46581=>1000,46582=>1000,46583=>1000,46584=>1000,46585=>1000,46586=>1000,46587=>1000,46588=>1000,46589=>1000,46590=>1000,46591=>1000,46592=>1000,46593=>1000,46594=>1000,46595=>1000,46596=>1000,46597=>1000,46598=>1000,46599=>1000,46600=>1000,46601=>1000,46602=>1000,46603=>1000,46604=>1000,46605=>1000,46606=>1000,46607=>1000,46608=>1000,46609=>1000,46610=>1000,46611=>1000,46612=>1000,46613=>1000,46614=>1000,46615=>1000,46616=>1000,46617=>1000,46618=>1000,46619=>1000,46620=>1000,46621=>1000,46622=>1000,46623=>1000,46624=>1000,46625=>1000,46626=>1000,46627=>1000,46628=>1000,46629=>1000,46630=>1000,46631=>1000,46632=>1000,46633=>1000,46634=>1000,46635=>1000,46636=>1000,46637=>1000,46638=>1000,46639=>1000,46640=>1000,46641=>1000,46642=>1000,46643=>1000,46644=>1000,46645=>1000,46646=>1000,46647=>1000,46648=>1000,46649=>1000,46650=>1000,46651=>1000,46652=>1000,46653=>1000,46654=>1000,46655=>1000,46656=>1000,46657=>1000,46658=>1000,46659=>1000,46660=>1000,46661=>1000,46662=>1000,46663=>1000,46664=>1000,46665=>1000,46666=>1000,46667=>1000,46668=>1000,46669=>1000,46670=>1000,46671=>1000,46672=>1000,46673=>1000,46674=>1000,46675=>1000,46676=>1000,46677=>1000,46678=>1000,46679=>1000,46680=>1000,46681=>1000,46682=>1000,46683=>1000,46684=>1000,46685=>1000,46686=>1000,46687=>1000,46688=>1000,46689=>1000,46690=>1000,46691=>1000,46692=>1000,46693=>1000,46694=>1000,46695=>1000,46696=>1000,46697=>1000,46698=>1000,46699=>1000,46700=>1000,46701=>1000,46702=>1000,46703=>1000,46704=>1000,46705=>1000,46706=>1000,46707=>1000,46708=>1000,46709=>1000,46710=>1000,46711=>1000,46712=>1000,46713=>1000,46714=>1000,46715=>1000,46716=>1000,46717=>1000,46718=>1000,46719=>1000,46720=>1000,46721=>1000,46722=>1000,46723=>1000,46724=>1000,46725=>1000,46726=>1000,46727=>1000,46728=>1000,46729=>1000,46730=>1000,46731=>1000,46732=>1000,46733=>1000,46734=>1000,46735=>1000,46736=>1000,46737=>1000,46738=>1000,46739=>1000,46740=>1000,46741=>1000,46742=>1000,46743=>1000,46744=>1000,46745=>1000,46746=>1000,46747=>1000,46748=>1000,46749=>1000,46750=>1000,46751=>1000,46752=>1000,46753=>1000,46754=>1000,46755=>1000,46756=>1000,46757=>1000,46758=>1000,46759=>1000,46760=>1000,46761=>1000,46762=>1000,46763=>1000,46764=>1000,46765=>1000,46766=>1000,46767=>1000,46768=>1000,46769=>1000,46770=>1000,46771=>1000,46772=>1000,46773=>1000,46774=>1000,46775=>1000,46776=>1000,46777=>1000,46778=>1000,46779=>1000,46780=>1000,46781=>1000,46782=>1000,46783=>1000,46784=>1000,46785=>1000,46786=>1000,46787=>1000,46788=>1000,46789=>1000,46790=>1000,46791=>1000,46792=>1000,46793=>1000,46794=>1000,46795=>1000,46796=>1000,46797=>1000,46798=>1000,46799=>1000,46800=>1000,46801=>1000,46802=>1000,46803=>1000,46804=>1000,46805=>1000,46806=>1000,46807=>1000,46808=>1000,46809=>1000,46810=>1000,46811=>1000,46812=>1000,46813=>1000,46814=>1000,46815=>1000,46816=>1000,46817=>1000,46818=>1000,46819=>1000,46820=>1000,46821=>1000,46822=>1000,46823=>1000,46824=>1000,46825=>1000,46826=>1000,46827=>1000,46828=>1000,46829=>1000,46830=>1000,46831=>1000,46832=>1000,46833=>1000,46834=>1000,46835=>1000,46836=>1000,46837=>1000,46838=>1000,46839=>1000,46840=>1000,46841=>1000,46842=>1000,46843=>1000,46844=>1000,46845=>1000,46846=>1000,46847=>1000,46848=>1000,46849=>1000,46850=>1000,46851=>1000,46852=>1000,46853=>1000,46854=>1000,46855=>1000,46856=>1000,46857=>1000,46858=>1000,46859=>1000,46860=>1000,46861=>1000,46862=>1000,46863=>1000,46864=>1000,46865=>1000,46866=>1000,46867=>1000,46868=>1000,46869=>1000,46870=>1000,46871=>1000,46872=>1000,46873=>1000,46874=>1000,46875=>1000,46876=>1000,46877=>1000,46878=>1000,46879=>1000,46880=>1000,46881=>1000,46882=>1000,46883=>1000,46884=>1000,46885=>1000,46886=>1000,46887=>1000,46888=>1000,46889=>1000,46890=>1000,46891=>1000,46892=>1000,46893=>1000,46894=>1000,46895=>1000,46896=>1000,46897=>1000,46898=>1000,46899=>1000,46900=>1000,46901=>1000,46902=>1000,46903=>1000,46904=>1000,46905=>1000,46906=>1000,46907=>1000,46908=>1000,46909=>1000,46910=>1000,46911=>1000,46912=>1000,46913=>1000,46914=>1000,46915=>1000,46916=>1000,46917=>1000,46918=>1000,46919=>1000,46920=>1000,46921=>1000,46922=>1000,46923=>1000,46924=>1000,46925=>1000,46926=>1000,46927=>1000,46928=>1000,46929=>1000,46930=>1000,46931=>1000,46932=>1000,46933=>1000,46934=>1000,46935=>1000,46936=>1000,46937=>1000,46938=>1000,46939=>1000,46940=>1000,46941=>1000,46942=>1000,46943=>1000,46944=>1000,46945=>1000,46946=>1000,46947=>1000,46948=>1000,46949=>1000,46950=>1000,46951=>1000,46952=>1000,46953=>1000,46954=>1000,46955=>1000,46956=>1000,46957=>1000,46958=>1000,46959=>1000,46960=>1000,46961=>1000,46962=>1000,46963=>1000,46964=>1000,46965=>1000,46966=>1000,46967=>1000,46968=>1000,46969=>1000,46970=>1000,46971=>1000,46972=>1000,46973=>1000,46974=>1000,46975=>1000,46976=>1000,46977=>1000,46978=>1000,46979=>1000,46980=>1000,46981=>1000,46982=>1000,46983=>1000,46984=>1000,46985=>1000,46986=>1000,46987=>1000,46988=>1000,46989=>1000,46990=>1000,46991=>1000,46992=>1000,46993=>1000,46994=>1000,46995=>1000,46996=>1000,46997=>1000,46998=>1000,46999=>1000,47000=>1000,47001=>1000,47002=>1000,47003=>1000,47004=>1000,47005=>1000,47006=>1000,47007=>1000,47008=>1000,47009=>1000,47010=>1000,47011=>1000,47012=>1000,47013=>1000,47014=>1000,47015=>1000,47016=>1000,47017=>1000,47018=>1000,47019=>1000,47020=>1000,47021=>1000,47022=>1000,47023=>1000,47024=>1000,47025=>1000,47026=>1000,47027=>1000,47028=>1000,47029=>1000,47030=>1000,47031=>1000,47032=>1000,47033=>1000,47034=>1000,47035=>1000,47036=>1000,47037=>1000,47038=>1000,47039=>1000,47040=>1000,47041=>1000,47042=>1000,47043=>1000,47044=>1000,47045=>1000,47046=>1000,47047=>1000,47048=>1000,47049=>1000,47050=>1000,47051=>1000,47052=>1000,47053=>1000,47054=>1000,47055=>1000,47056=>1000,47057=>1000,47058=>1000,47059=>1000,47060=>1000,47061=>1000,47062=>1000,47063=>1000,47064=>1000,47065=>1000,47066=>1000,47067=>1000,47068=>1000,47069=>1000,47070=>1000,47071=>1000,47072=>1000,47073=>1000,47074=>1000,47075=>1000,47076=>1000,47077=>1000,47078=>1000,47079=>1000,47080=>1000,47081=>1000,47082=>1000,47083=>1000,47084=>1000,47085=>1000,47086=>1000,47087=>1000,47088=>1000,47089=>1000,47090=>1000,47091=>1000,47092=>1000,47093=>1000,47094=>1000,47095=>1000,47096=>1000,47097=>1000,47098=>1000,47099=>1000,47100=>1000,47101=>1000,47102=>1000,47103=>1000,47104=>1000,47105=>1000,47106=>1000,47107=>1000,47108=>1000,47109=>1000,47110=>1000,47111=>1000,47112=>1000,47113=>1000,47114=>1000,47115=>1000,47116=>1000,47117=>1000,47118=>1000,47119=>1000,47120=>1000,47121=>1000,47122=>1000,47123=>1000,47124=>1000,47125=>1000,47126=>1000,47127=>1000,47128=>1000,47129=>1000,47130=>1000,47131=>1000,47132=>1000,47133=>1000,47134=>1000,47135=>1000,47136=>1000,47137=>1000,47138=>1000,47139=>1000,47140=>1000,47141=>1000,47142=>1000,47143=>1000,47144=>1000,47145=>1000,47146=>1000,47147=>1000,47148=>1000,47149=>1000,47150=>1000,47151=>1000,47152=>1000,47153=>1000,47154=>1000,47155=>1000,47156=>1000,47157=>1000,47158=>1000,47159=>1000,47160=>1000,47161=>1000,47162=>1000,47163=>1000,47164=>1000,47165=>1000,47166=>1000,47167=>1000,47168=>1000,47169=>1000,47170=>1000,47171=>1000,47172=>1000,47173=>1000,47174=>1000,47175=>1000,47176=>1000,47177=>1000,47178=>1000,47179=>1000,47180=>1000,47181=>1000,47182=>1000,47183=>1000,47184=>1000,47185=>1000,47186=>1000,47187=>1000,47188=>1000,47189=>1000,47190=>1000,47191=>1000,47192=>1000,47193=>1000,47194=>1000,47195=>1000,47196=>1000,47197=>1000,47198=>1000,47199=>1000,47200=>1000,47201=>1000,47202=>1000,47203=>1000,47204=>1000,47205=>1000,47206=>1000,47207=>1000,47208=>1000,47209=>1000,47210=>1000,47211=>1000,47212=>1000,47213=>1000,47214=>1000,47215=>1000,47216=>1000,47217=>1000,47218=>1000,47219=>1000,47220=>1000,47221=>1000,47222=>1000,47223=>1000,47224=>1000,47225=>1000,47226=>1000,47227=>1000,47228=>1000,47229=>1000,47230=>1000,47231=>1000,47232=>1000,47233=>1000,47234=>1000,47235=>1000,47236=>1000,47237=>1000,47238=>1000,47239=>1000,47240=>1000,47241=>1000,47242=>1000,47243=>1000,47244=>1000,47245=>1000,47246=>1000,47247=>1000,47248=>1000,47249=>1000,47250=>1000,47251=>1000,47252=>1000,47253=>1000,47254=>1000,47255=>1000,47256=>1000,47257=>1000,47258=>1000,47259=>1000,47260=>1000,47261=>1000,47262=>1000,47263=>1000,47264=>1000,47265=>1000,47266=>1000,47267=>1000,47268=>1000,47269=>1000,47270=>1000,47271=>1000,47272=>1000,47273=>1000,47274=>1000,47275=>1000,47276=>1000,47277=>1000,47278=>1000,47279=>1000,47280=>1000,47281=>1000,47282=>1000,47283=>1000,47284=>1000,47285=>1000,47286=>1000,47287=>1000,47288=>1000,47289=>1000,47290=>1000,47291=>1000,47292=>1000,47293=>1000,47294=>1000,47295=>1000,47296=>1000,47297=>1000,47298=>1000,47299=>1000,47300=>1000,47301=>1000,47302=>1000,47303=>1000,47304=>1000,47305=>1000,47306=>1000,47307=>1000,47308=>1000,47309=>1000,47310=>1000,47311=>1000,47312=>1000,47313=>1000,47314=>1000,47315=>1000,47316=>1000,47317=>1000,47318=>1000,47319=>1000,47320=>1000,47321=>1000,47322=>1000,47323=>1000,47324=>1000,47325=>1000,47326=>1000,47327=>1000,47328=>1000,47329=>1000,47330=>1000,47331=>1000,47332=>1000,47333=>1000,47334=>1000,47335=>1000,47336=>1000,47337=>1000,47338=>1000,47339=>1000,47340=>1000,47341=>1000,47342=>1000,47343=>1000,47344=>1000,47345=>1000,47346=>1000,47347=>1000,47348=>1000,47349=>1000,47350=>1000,47351=>1000,47352=>1000,47353=>1000,47354=>1000,47355=>1000,47356=>1000,47357=>1000,47358=>1000,47359=>1000,47360=>1000,47361=>1000,47362=>1000,47363=>1000,47364=>1000,47365=>1000,47366=>1000,47367=>1000,47368=>1000,47369=>1000,47370=>1000,47371=>1000,47372=>1000,47373=>1000,47374=>1000,47375=>1000,47376=>1000,47377=>1000,47378=>1000,47379=>1000,47380=>1000,47381=>1000,47382=>1000,47383=>1000,47384=>1000,47385=>1000,47386=>1000,47387=>1000,47388=>1000,47389=>1000,47390=>1000,47391=>1000,47392=>1000,47393=>1000,47394=>1000,47395=>1000,47396=>1000,47397=>1000,47398=>1000,47399=>1000,47400=>1000,47401=>1000,47402=>1000,47403=>1000,47404=>1000,47405=>1000,47406=>1000,47407=>1000,47408=>1000,47409=>1000,47410=>1000,47411=>1000,47412=>1000,47413=>1000,47414=>1000,47415=>1000,47416=>1000,47417=>1000,47418=>1000,47419=>1000,47420=>1000,47421=>1000,47422=>1000,47423=>1000,47424=>1000,47425=>1000,47426=>1000,47427=>1000,47428=>1000,47429=>1000,47430=>1000,47431=>1000,47432=>1000,47433=>1000,47434=>1000,47435=>1000,47436=>1000,47437=>1000,47438=>1000,47439=>1000,47440=>1000,47441=>1000,47442=>1000,47443=>1000,47444=>1000,47445=>1000,47446=>1000,47447=>1000,47448=>1000,47449=>1000,47450=>1000,47451=>1000,47452=>1000,47453=>1000,47454=>1000,47455=>1000,47456=>1000,47457=>1000,47458=>1000,47459=>1000,47460=>1000,47461=>1000,47462=>1000,47463=>1000,47464=>1000,47465=>1000,47466=>1000,47467=>1000,47468=>1000,47469=>1000,47470=>1000,47471=>1000,47472=>1000,47473=>1000,47474=>1000,47475=>1000,47476=>1000,47477=>1000,47478=>1000,47479=>1000,47480=>1000,47481=>1000,47482=>1000,47483=>1000,47484=>1000,47485=>1000,47486=>1000,47487=>1000,47488=>1000,47489=>1000,47490=>1000,47491=>1000,47492=>1000,47493=>1000,47494=>1000,47495=>1000,47496=>1000,47497=>1000,47498=>1000,47499=>1000,47500=>1000,47501=>1000,47502=>1000,47503=>1000,47504=>1000,47505=>1000,47506=>1000,47507=>1000,47508=>1000,47509=>1000,47510=>1000,47511=>1000,47512=>1000,47513=>1000,47514=>1000,47515=>1000,47516=>1000,47517=>1000,47518=>1000,47519=>1000,47520=>1000,47521=>1000,47522=>1000,47523=>1000,47524=>1000,47525=>1000,47526=>1000,47527=>1000,47528=>1000,47529=>1000,47530=>1000,47531=>1000,47532=>1000,47533=>1000,47534=>1000,47535=>1000,47536=>1000,47537=>1000,47538=>1000,47539=>1000,47540=>1000,47541=>1000,47542=>1000,47543=>1000,47544=>1000,47545=>1000,47546=>1000,47547=>1000,47548=>1000,47549=>1000,47550=>1000,47551=>1000,47552=>1000,47553=>1000,47554=>1000,47555=>1000,47556=>1000,47557=>1000,47558=>1000,47559=>1000,47560=>1000,47561=>1000,47562=>1000,47563=>1000,47564=>1000,47565=>1000,47566=>1000,47567=>1000,47568=>1000,47569=>1000,47570=>1000,47571=>1000,47572=>1000,47573=>1000,47574=>1000,47575=>1000,47576=>1000,47577=>1000,47578=>1000,47579=>1000,47580=>1000,47581=>1000,47582=>1000,47583=>1000,47584=>1000,47585=>1000,47586=>1000,47587=>1000,47588=>1000,47589=>1000,47590=>1000,47591=>1000,47592=>1000,47593=>1000,47594=>1000,47595=>1000,47596=>1000,47597=>1000,47598=>1000,47599=>1000,47600=>1000,47601=>1000,47602=>1000,47603=>1000,47604=>1000,47605=>1000,47606=>1000,47607=>1000,47608=>1000,47609=>1000,47610=>1000,47611=>1000,47612=>1000,47613=>1000,47614=>1000,47615=>1000,47616=>1000,47617=>1000,47618=>1000,47619=>1000,47620=>1000,47621=>1000,47622=>1000,47623=>1000,47624=>1000,47625=>1000,47626=>1000,47627=>1000,47628=>1000,47629=>1000,47630=>1000,47631=>1000,47632=>1000,47633=>1000,47634=>1000,47635=>1000,47636=>1000,47637=>1000,47638=>1000,47639=>1000,47640=>1000,47641=>1000,47642=>1000,47643=>1000,47644=>1000,47645=>1000,47646=>1000,47647=>1000,47648=>1000,47649=>1000,47650=>1000,47651=>1000,47652=>1000,47653=>1000,47654=>1000,47655=>1000,47656=>1000,47657=>1000,47658=>1000,47659=>1000,47660=>1000,47661=>1000,47662=>1000,47663=>1000,47664=>1000,47665=>1000,47666=>1000,47667=>1000,47668=>1000,47669=>1000,47670=>1000,47671=>1000,47672=>1000,47673=>1000,47674=>1000,47675=>1000,47676=>1000,47677=>1000,47678=>1000,47679=>1000,47680=>1000,47681=>1000,47682=>1000,47683=>1000,47684=>1000,47685=>1000,47686=>1000,47687=>1000,47688=>1000,47689=>1000,47690=>1000,47691=>1000,47692=>1000,47693=>1000,47694=>1000,47695=>1000,47696=>1000,47697=>1000,47698=>1000,47699=>1000,47700=>1000,47701=>1000,47702=>1000,47703=>1000,47704=>1000,47705=>1000,47706=>1000,47707=>1000,47708=>1000,47709=>1000,47710=>1000,47711=>1000,47712=>1000,47713=>1000,47714=>1000,47715=>1000,47716=>1000,47717=>1000,47718=>1000,47719=>1000,47720=>1000,47721=>1000,47722=>1000,47723=>1000,47724=>1000,47725=>1000,47726=>1000,47727=>1000,47728=>1000,47729=>1000,47730=>1000,47731=>1000,47732=>1000,47733=>1000,47734=>1000,47735=>1000,47736=>1000,47737=>1000,47738=>1000,47739=>1000,47740=>1000,47741=>1000,47742=>1000,47743=>1000,47744=>1000,47745=>1000,47746=>1000,47747=>1000,47748=>1000,47749=>1000,47750=>1000,47751=>1000,47752=>1000,47753=>1000,47754=>1000,47755=>1000,47756=>1000,47757=>1000,47758=>1000,47759=>1000,47760=>1000,47761=>1000,47762=>1000,47763=>1000,47764=>1000,47765=>1000,47766=>1000,47767=>1000,47768=>1000,47769=>1000,47770=>1000,47771=>1000,47772=>1000,47773=>1000,47774=>1000,47775=>1000,47776=>1000,47777=>1000,47778=>1000,47779=>1000,47780=>1000,47781=>1000,47782=>1000,47783=>1000,47784=>1000,47785=>1000,47786=>1000,47787=>1000,47788=>1000,47789=>1000,47790=>1000,47791=>1000,47792=>1000,47793=>1000,47794=>1000,47795=>1000,47796=>1000,47797=>1000,47798=>1000,47799=>1000,47800=>1000,47801=>1000,47802=>1000,47803=>1000,47804=>1000,47805=>1000,47806=>1000,47807=>1000,47808=>1000,47809=>1000,47810=>1000,47811=>1000,47812=>1000,47813=>1000,47814=>1000,47815=>1000,47816=>1000,47817=>1000,47818=>1000,47819=>1000,47820=>1000,47821=>1000,47822=>1000,47823=>1000,47824=>1000,47825=>1000,47826=>1000,47827=>1000,47828=>1000,47829=>1000,47830=>1000,47831=>1000,47832=>1000,47833=>1000,47834=>1000,47835=>1000,47836=>1000,47837=>1000,47838=>1000,47839=>1000,47840=>1000,47841=>1000,47842=>1000,47843=>1000,47844=>1000,47845=>1000,47846=>1000,47847=>1000,47848=>1000,47849=>1000,47850=>1000,47851=>1000,47852=>1000,47853=>1000,47854=>1000,47855=>1000,47856=>1000,47857=>1000,47858=>1000,47859=>1000,47860=>1000,47861=>1000,47862=>1000,47863=>1000,47864=>1000,47865=>1000,47866=>1000,47867=>1000,47868=>1000,47869=>1000,47870=>1000,47871=>1000,47872=>1000,47873=>1000,47874=>1000,47875=>1000,47876=>1000,47877=>1000,47878=>1000,47879=>1000,47880=>1000,47881=>1000,47882=>1000,47883=>1000,47884=>1000,47885=>1000,47886=>1000,47887=>1000,47888=>1000,47889=>1000,47890=>1000,47891=>1000,47892=>1000,47893=>1000,47894=>1000,47895=>1000,47896=>1000,47897=>1000,47898=>1000,47899=>1000,47900=>1000,47901=>1000,47902=>1000,47903=>1000,47904=>1000,47905=>1000,47906=>1000,47907=>1000,47908=>1000,47909=>1000,47910=>1000,47911=>1000,47912=>1000,47913=>1000,47914=>1000,47915=>1000,47916=>1000,47917=>1000,47918=>1000,47919=>1000,47920=>1000,47921=>1000,47922=>1000,47923=>1000,47924=>1000,47925=>1000,47926=>1000,47927=>1000,47928=>1000,47929=>1000,47930=>1000,47931=>1000,47932=>1000,47933=>1000,47934=>1000,47935=>1000,47936=>1000,47937=>1000,47938=>1000,47939=>1000,47940=>1000,47941=>1000,47942=>1000,47943=>1000,47944=>1000,47945=>1000,47946=>1000,47947=>1000,47948=>1000,47949=>1000,47950=>1000,47951=>1000,47952=>1000,47953=>1000,47954=>1000,47955=>1000,47956=>1000,47957=>1000,47958=>1000,47959=>1000,47960=>1000,47961=>1000,47962=>1000,47963=>1000,47964=>1000,47965=>1000,47966=>1000,47967=>1000,47968=>1000,47969=>1000,47970=>1000,47971=>1000,47972=>1000,47973=>1000,47974=>1000,47975=>1000,47976=>1000,47977=>1000,47978=>1000,47979=>1000,47980=>1000,47981=>1000,47982=>1000,47983=>1000,47984=>1000,47985=>1000,47986=>1000,47987=>1000,47988=>1000,47989=>1000,47990=>1000,47991=>1000,47992=>1000,47993=>1000,47994=>1000,47995=>1000,47996=>1000,47997=>1000,47998=>1000,47999=>1000,48000=>1000,48001=>1000,48002=>1000,48003=>1000,48004=>1000,48005=>1000,48006=>1000,48007=>1000,48008=>1000,48009=>1000,48010=>1000,48011=>1000,48012=>1000,48013=>1000,48014=>1000,48015=>1000,48016=>1000,48017=>1000,48018=>1000,48019=>1000,48020=>1000,48021=>1000,48022=>1000,48023=>1000,48024=>1000,48025=>1000,48026=>1000,48027=>1000,48028=>1000,48029=>1000,48030=>1000,48031=>1000,48032=>1000,48033=>1000,48034=>1000,48035=>1000,48036=>1000,48037=>1000,48038=>1000,48039=>1000,48040=>1000,48041=>1000,48042=>1000,48043=>1000,48044=>1000,48045=>1000,48046=>1000,48047=>1000,48048=>1000,48049=>1000,48050=>1000,48051=>1000,48052=>1000,48053=>1000,48054=>1000,48055=>1000,48056=>1000,48057=>1000,48058=>1000,48059=>1000,48060=>1000,48061=>1000,48062=>1000,48063=>1000,48064=>1000,48065=>1000,48066=>1000,48067=>1000,48068=>1000,48069=>1000,48070=>1000,48071=>1000,48072=>1000,48073=>1000,48074=>1000,48075=>1000,48076=>1000,48077=>1000,48078=>1000,48079=>1000,48080=>1000,48081=>1000,48082=>1000,48083=>1000,48084=>1000,48085=>1000,48086=>1000,48087=>1000,48088=>1000,48089=>1000,48090=>1000,48091=>1000,48092=>1000,48093=>1000,48094=>1000,48095=>1000,48096=>1000,48097=>1000,48098=>1000,48099=>1000,48100=>1000,48101=>1000,48102=>1000,48103=>1000,48104=>1000,48105=>1000,48106=>1000,48107=>1000,48108=>1000,48109=>1000,48110=>1000,48111=>1000,48112=>1000,48113=>1000,48114=>1000,48115=>1000,48116=>1000,48117=>1000,48118=>1000,48119=>1000,48120=>1000,48121=>1000,48122=>1000,48123=>1000,48124=>1000,48125=>1000,48126=>1000,48127=>1000,48128=>1000,48129=>1000,48130=>1000,48131=>1000,48132=>1000,48133=>1000,48134=>1000,48135=>1000,48136=>1000,48137=>1000,48138=>1000,48139=>1000,48140=>1000,48141=>1000,48142=>1000,48143=>1000,48144=>1000,48145=>1000,48146=>1000,48147=>1000,48148=>1000,48149=>1000,48150=>1000,48151=>1000,48152=>1000,48153=>1000,48154=>1000,48155=>1000,48156=>1000,48157=>1000,48158=>1000,48159=>1000,48160=>1000,48161=>1000,48162=>1000,48163=>1000,48164=>1000,48165=>1000,48166=>1000,48167=>1000,48168=>1000,48169=>1000,48170=>1000,48171=>1000,48172=>1000,48173=>1000,48174=>1000,48175=>1000,48176=>1000,48177=>1000,48178=>1000,48179=>1000,48180=>1000,48181=>1000,48182=>1000,48183=>1000,48184=>1000,48185=>1000,48186=>1000,48187=>1000,48188=>1000,48189=>1000,48190=>1000,48191=>1000,48192=>1000,48193=>1000,48194=>1000,48195=>1000,48196=>1000,48197=>1000,48198=>1000,48199=>1000,48200=>1000,48201=>1000,48202=>1000,48203=>1000,48204=>1000,48205=>1000,48206=>1000,48207=>1000,48208=>1000,48209=>1000,48210=>1000,48211=>1000,48212=>1000,48213=>1000,48214=>1000,48215=>1000,48216=>1000,48217=>1000,48218=>1000,48219=>1000,48220=>1000,48221=>1000,48222=>1000,48223=>1000,48224=>1000,48225=>1000,48226=>1000,48227=>1000,48228=>1000,48229=>1000,48230=>1000,48231=>1000,48232=>1000,48233=>1000,48234=>1000,48235=>1000,48236=>1000,48237=>1000,48238=>1000,48239=>1000,48240=>1000,48241=>1000,48242=>1000,48243=>1000,48244=>1000,48245=>1000,48246=>1000,48247=>1000,48248=>1000,48249=>1000,48250=>1000,48251=>1000,48252=>1000,48253=>1000,48254=>1000,48255=>1000,48256=>1000,48257=>1000,48258=>1000,48259=>1000,48260=>1000,48261=>1000,48262=>1000,48263=>1000,48264=>1000,48265=>1000,48266=>1000,48267=>1000,48268=>1000,48269=>1000,48270=>1000,48271=>1000,48272=>1000,48273=>1000,48274=>1000,48275=>1000,48276=>1000,48277=>1000,48278=>1000,48279=>1000,48280=>1000,48281=>1000,48282=>1000,48283=>1000,48284=>1000,48285=>1000,48286=>1000,48287=>1000,48288=>1000,48289=>1000,48290=>1000,48291=>1000,48292=>1000,48293=>1000,48294=>1000,48295=>1000,48296=>1000,48297=>1000,48298=>1000,48299=>1000,48300=>1000,48301=>1000,48302=>1000,48303=>1000,48304=>1000,48305=>1000,48306=>1000,48307=>1000,48308=>1000,48309=>1000,48310=>1000,48311=>1000,48312=>1000,48313=>1000,48314=>1000,48315=>1000,48316=>1000,48317=>1000,48318=>1000,48319=>1000,48320=>1000,48321=>1000,48322=>1000,48323=>1000,48324=>1000,48325=>1000,48326=>1000,48327=>1000,48328=>1000,48329=>1000,48330=>1000,48331=>1000,48332=>1000,48333=>1000,48334=>1000,48335=>1000,48336=>1000,48337=>1000,48338=>1000,48339=>1000,48340=>1000,48341=>1000,48342=>1000,48343=>1000,48344=>1000,48345=>1000,48346=>1000,48347=>1000,48348=>1000,48349=>1000,48350=>1000,48351=>1000,48352=>1000,48353=>1000,48354=>1000,48355=>1000,48356=>1000,48357=>1000,48358=>1000,48359=>1000,48360=>1000,48361=>1000,48362=>1000,48363=>1000,48364=>1000,48365=>1000,48366=>1000,48367=>1000,48368=>1000,48369=>1000,48370=>1000,48371=>1000,48372=>1000,48373=>1000,48374=>1000,48375=>1000,48376=>1000,48377=>1000,48378=>1000,48379=>1000,48380=>1000,48381=>1000,48382=>1000,48383=>1000,48384=>1000,48385=>1000,48386=>1000,48387=>1000,48388=>1000,48389=>1000,48390=>1000,48391=>1000,48392=>1000,48393=>1000,48394=>1000,48395=>1000,48396=>1000,48397=>1000,48398=>1000,48399=>1000,48400=>1000,48401=>1000,48402=>1000,48403=>1000,48404=>1000,48405=>1000,48406=>1000,48407=>1000,48408=>1000,48409=>1000,48410=>1000,48411=>1000,48412=>1000,48413=>1000,48414=>1000,48415=>1000,48416=>1000,48417=>1000,48418=>1000,48419=>1000,48420=>1000,48421=>1000,48422=>1000,48423=>1000,48424=>1000,48425=>1000,48426=>1000,48427=>1000,48428=>1000,48429=>1000,48430=>1000,48431=>1000,48432=>1000,48433=>1000,48434=>1000,48435=>1000,48436=>1000,48437=>1000,48438=>1000,48439=>1000,48440=>1000,48441=>1000,48442=>1000,48443=>1000,48444=>1000,48445=>1000,48446=>1000,48447=>1000,48448=>1000,48449=>1000,48450=>1000,48451=>1000,48452=>1000,48453=>1000,48454=>1000,48455=>1000,48456=>1000,48457=>1000,48458=>1000,48459=>1000,48460=>1000,48461=>1000,48462=>1000,48463=>1000,48464=>1000,48465=>1000,48466=>1000,48467=>1000,48468=>1000,48469=>1000,48470=>1000,48471=>1000,48472=>1000,48473=>1000,48474=>1000,48475=>1000,48476=>1000,48477=>1000,48478=>1000,48479=>1000,48480=>1000,48481=>1000,48482=>1000,48483=>1000,48484=>1000,48485=>1000,48486=>1000,48487=>1000,48488=>1000,48489=>1000,48490=>1000,48491=>1000,48492=>1000,48493=>1000,48494=>1000,48495=>1000,48496=>1000,48497=>1000,48498=>1000,48499=>1000,48500=>1000,48501=>1000,48502=>1000,48503=>1000,48504=>1000,48505=>1000,48506=>1000,48507=>1000,48508=>1000,48509=>1000,48510=>1000,48511=>1000,48512=>1000,48513=>1000,48514=>1000,48515=>1000,48516=>1000,48517=>1000,48518=>1000,48519=>1000,48520=>1000,48521=>1000,48522=>1000,48523=>1000,48524=>1000,48525=>1000,48526=>1000,48527=>1000,48528=>1000,48529=>1000,48530=>1000,48531=>1000,48532=>1000,48533=>1000,48534=>1000,48535=>1000,48536=>1000,48537=>1000,48538=>1000,48539=>1000,48540=>1000,48541=>1000,48542=>1000,48543=>1000,48544=>1000,48545=>1000,48546=>1000,48547=>1000,48548=>1000,48549=>1000,48550=>1000,48551=>1000,48552=>1000,48553=>1000,48554=>1000,48555=>1000,48556=>1000,48557=>1000,48558=>1000,48559=>1000,48560=>1000,48561=>1000,48562=>1000,48563=>1000,48564=>1000,48565=>1000,48566=>1000,48567=>1000,48568=>1000,48569=>1000,48570=>1000,48571=>1000,48572=>1000,48573=>1000,48574=>1000,48575=>1000,48576=>1000,48577=>1000,48578=>1000,48579=>1000,48580=>1000,48581=>1000,48582=>1000,48583=>1000,48584=>1000,48585=>1000,48586=>1000,48587=>1000,48588=>1000,48589=>1000,48590=>1000,48591=>1000,48592=>1000,48593=>1000,48594=>1000,48595=>1000,48596=>1000,48597=>1000,48598=>1000,48599=>1000,48600=>1000,48601=>1000,48602=>1000,48603=>1000,48604=>1000,48605=>1000,48606=>1000,48607=>1000,48608=>1000,48609=>1000,48610=>1000,48611=>1000,48612=>1000,48613=>1000,48614=>1000,48615=>1000,48616=>1000,48617=>1000,48618=>1000,48619=>1000,48620=>1000,48621=>1000,48622=>1000,48623=>1000,48624=>1000,48625=>1000,48626=>1000,48627=>1000,48628=>1000,48629=>1000,48630=>1000,48631=>1000,48632=>1000,48633=>1000,48634=>1000,48635=>1000,48636=>1000,48637=>1000,48638=>1000,48639=>1000,48640=>1000,48641=>1000,48642=>1000,48643=>1000,48644=>1000,48645=>1000,48646=>1000,48647=>1000,48648=>1000,48649=>1000,48650=>1000,48651=>1000,48652=>1000,48653=>1000,48654=>1000,48655=>1000,48656=>1000,48657=>1000,48658=>1000,48659=>1000,48660=>1000,48661=>1000,48662=>1000,48663=>1000,48664=>1000,48665=>1000,48666=>1000,48667=>1000,48668=>1000,48669=>1000,48670=>1000,48671=>1000,48672=>1000,48673=>1000,48674=>1000,48675=>1000,48676=>1000,48677=>1000,48678=>1000,48679=>1000,48680=>1000,48681=>1000,48682=>1000,48683=>1000,48684=>1000,48685=>1000,48686=>1000,48687=>1000,48688=>1000,48689=>1000,48690=>1000,48691=>1000,48692=>1000,48693=>1000,48694=>1000,48695=>1000,48696=>1000,48697=>1000,48698=>1000,48699=>1000,48700=>1000,48701=>1000,48702=>1000,48703=>1000,48704=>1000,48705=>1000,48706=>1000,48707=>1000,48708=>1000,48709=>1000,48710=>1000,48711=>1000,48712=>1000,48713=>1000,48714=>1000,48715=>1000,48716=>1000,48717=>1000,48718=>1000,48719=>1000,48720=>1000,48721=>1000,48722=>1000,48723=>1000,48724=>1000,48725=>1000,48726=>1000,48727=>1000,48728=>1000,48729=>1000,48730=>1000,48731=>1000,48732=>1000,48733=>1000,48734=>1000,48735=>1000,48736=>1000,48737=>1000,48738=>1000,48739=>1000,48740=>1000,48741=>1000,48742=>1000,48743=>1000,48744=>1000,48745=>1000,48746=>1000,48747=>1000,48748=>1000,48749=>1000,48750=>1000,48751=>1000,48752=>1000,48753=>1000,48754=>1000,48755=>1000,48756=>1000,48757=>1000,48758=>1000,48759=>1000,48760=>1000,48761=>1000,48762=>1000,48763=>1000,48764=>1000,48765=>1000,48766=>1000,48767=>1000,48768=>1000,48769=>1000,48770=>1000,48771=>1000,48772=>1000,48773=>1000,48774=>1000,48775=>1000,48776=>1000,48777=>1000,48778=>1000,48779=>1000,48780=>1000,48781=>1000,48782=>1000,48783=>1000,48784=>1000,48785=>1000,48786=>1000,48787=>1000,48788=>1000,48789=>1000,48790=>1000,48791=>1000,48792=>1000,48793=>1000,48794=>1000,48795=>1000,48796=>1000,48797=>1000,48798=>1000,48799=>1000,48800=>1000,48801=>1000,48802=>1000,48803=>1000,48804=>1000,48805=>1000,48806=>1000,48807=>1000,48808=>1000,48809=>1000,48810=>1000,48811=>1000,48812=>1000,48813=>1000,48814=>1000,48815=>1000,48816=>1000,48817=>1000,48818=>1000,48819=>1000,48820=>1000,48821=>1000,48822=>1000,48823=>1000,48824=>1000,48825=>1000,48826=>1000,48827=>1000,48828=>1000,48829=>1000,48830=>1000,48831=>1000,48832=>1000,48833=>1000,48834=>1000,48835=>1000,48836=>1000,48837=>1000,48838=>1000,48839=>1000,48840=>1000,48841=>1000,48842=>1000,48843=>1000,48844=>1000,48845=>1000,48846=>1000,48847=>1000,48848=>1000,48849=>1000,48850=>1000,48851=>1000,48852=>1000,48853=>1000,48854=>1000,48855=>1000,48856=>1000,48857=>1000,48858=>1000,48859=>1000,48860=>1000,48861=>1000,48862=>1000,48863=>1000,48864=>1000,48865=>1000,48866=>1000,48867=>1000,48868=>1000,48869=>1000,48870=>1000,48871=>1000,48872=>1000,48873=>1000,48874=>1000,48875=>1000,48876=>1000,48877=>1000,48878=>1000,48879=>1000,48880=>1000,48881=>1000,48882=>1000,48883=>1000,48884=>1000,48885=>1000,48886=>1000,48887=>1000,48888=>1000,48889=>1000,48890=>1000,48891=>1000,48892=>1000,48893=>1000,48894=>1000,48895=>1000,48896=>1000,48897=>1000,48898=>1000,48899=>1000,48900=>1000,48901=>1000,48902=>1000,48903=>1000,48904=>1000,48905=>1000,48906=>1000,48907=>1000,48908=>1000,48909=>1000,48910=>1000,48911=>1000,48912=>1000,48913=>1000,48914=>1000,48915=>1000,48916=>1000,48917=>1000,48918=>1000,48919=>1000,48920=>1000,48921=>1000,48922=>1000,48923=>1000,48924=>1000,48925=>1000,48926=>1000,48927=>1000,48928=>1000,48929=>1000,48930=>1000,48931=>1000,48932=>1000,48933=>1000,48934=>1000,48935=>1000,48936=>1000,48937=>1000,48938=>1000,48939=>1000,48940=>1000,48941=>1000,48942=>1000,48943=>1000,48944=>1000,48945=>1000,48946=>1000,48947=>1000,48948=>1000,48949=>1000,48950=>1000,48951=>1000,48952=>1000,48953=>1000,48954=>1000,48955=>1000,48956=>1000,48957=>1000,48958=>1000,48959=>1000,48960=>1000,48961=>1000,48962=>1000,48963=>1000,48964=>1000,48965=>1000,48966=>1000,48967=>1000,48968=>1000,48969=>1000,48970=>1000,48971=>1000,48972=>1000,48973=>1000,48974=>1000,48975=>1000,48976=>1000,48977=>1000,48978=>1000,48979=>1000,48980=>1000,48981=>1000,48982=>1000,48983=>1000,48984=>1000,48985=>1000,48986=>1000,48987=>1000,48988=>1000,48989=>1000,48990=>1000,48991=>1000,48992=>1000,48993=>1000,48994=>1000,48995=>1000,48996=>1000,48997=>1000,48998=>1000,48999=>1000,49000=>1000,49001=>1000,49002=>1000,49003=>1000,49004=>1000,49005=>1000,49006=>1000,49007=>1000,49008=>1000,49009=>1000,49010=>1000,49011=>1000,49012=>1000,49013=>1000,49014=>1000,49015=>1000,49016=>1000,49017=>1000,49018=>1000,49019=>1000,49020=>1000,49021=>1000,49022=>1000,49023=>1000,49024=>1000,49025=>1000,49026=>1000,49027=>1000,49028=>1000,49029=>1000,49030=>1000,49031=>1000,49032=>1000,49033=>1000,49034=>1000,49035=>1000,49036=>1000,49037=>1000,49038=>1000,49039=>1000,49040=>1000,49041=>1000,49042=>1000,49043=>1000,49044=>1000,49045=>1000,49046=>1000,49047=>1000,49048=>1000,49049=>1000,49050=>1000,49051=>1000,49052=>1000,49053=>1000,49054=>1000,49055=>1000,49056=>1000,49057=>1000,49058=>1000,49059=>1000,49060=>1000,49061=>1000,49062=>1000,49063=>1000,49064=>1000,49065=>1000,49066=>1000,49067=>1000,49068=>1000,49069=>1000,49070=>1000,49071=>1000,49072=>1000,49073=>1000,49074=>1000,49075=>1000,49076=>1000,49077=>1000,49078=>1000,49079=>1000,49080=>1000,49081=>1000,49082=>1000,49083=>1000,49084=>1000,49085=>1000,49086=>1000,49087=>1000,49088=>1000,49089=>1000,49090=>1000,49091=>1000,49092=>1000,49093=>1000,49094=>1000,49095=>1000,49096=>1000,49097=>1000,49098=>1000,49099=>1000,49100=>1000,49101=>1000,49102=>1000,49103=>1000,49104=>1000,49105=>1000,49106=>1000,49107=>1000,49108=>1000,49109=>1000,49110=>1000,49111=>1000,49112=>1000,49113=>1000,49114=>1000,49115=>1000,49116=>1000,49117=>1000,49118=>1000,49119=>1000,49120=>1000,49121=>1000,49122=>1000,49123=>1000,49124=>1000,49125=>1000,49126=>1000,49127=>1000,49128=>1000,49129=>1000,49130=>1000,49131=>1000,49132=>1000,49133=>1000,49134=>1000,49135=>1000,49136=>1000,49137=>1000,49138=>1000,49139=>1000,49140=>1000,49141=>1000,49142=>1000,49143=>1000,49144=>1000,49145=>1000,49146=>1000,49147=>1000,49148=>1000,49149=>1000,49150=>1000,49151=>1000,49152=>1000,49153=>1000,49154=>1000,49155=>1000,49156=>1000,49157=>1000,49158=>1000,49159=>1000,49160=>1000,49161=>1000,49162=>1000,49163=>1000,49164=>1000,49165=>1000,49166=>1000,49167=>1000,49168=>1000,49169=>1000,49170=>1000,49171=>1000,49172=>1000,49173=>1000,49174=>1000,49175=>1000,49176=>1000,49177=>1000,49178=>1000,49179=>1000,49180=>1000,49181=>1000,49182=>1000,49183=>1000,49184=>1000,49185=>1000,49186=>1000,49187=>1000,49188=>1000,49189=>1000,49190=>1000,49191=>1000,49192=>1000,49193=>1000,49194=>1000,49195=>1000,49196=>1000,49197=>1000,49198=>1000,49199=>1000,49200=>1000,49201=>1000,49202=>1000,49203=>1000,49204=>1000,49205=>1000,49206=>1000,49207=>1000,49208=>1000,49209=>1000,49210=>1000,49211=>1000,49212=>1000,49213=>1000,49214=>1000,49215=>1000,49216=>1000,49217=>1000,49218=>1000,49219=>1000,49220=>1000,49221=>1000,49222=>1000,49223=>1000,49224=>1000,49225=>1000,49226=>1000,49227=>1000,49228=>1000,49229=>1000,49230=>1000,49231=>1000,49232=>1000,49233=>1000,49234=>1000,49235=>1000,49236=>1000,49237=>1000,49238=>1000,49239=>1000,49240=>1000,49241=>1000,49242=>1000,49243=>1000,49244=>1000,49245=>1000,49246=>1000,49247=>1000,49248=>1000,49249=>1000,49250=>1000,49251=>1000,49252=>1000,49253=>1000,49254=>1000,49255=>1000,49256=>1000,49257=>1000,49258=>1000,49259=>1000,49260=>1000,49261=>1000,49262=>1000,49263=>1000,49264=>1000,49265=>1000,49266=>1000,49267=>1000,49268=>1000,49269=>1000,49270=>1000,49271=>1000,49272=>1000,49273=>1000,49274=>1000,49275=>1000,49276=>1000,49277=>1000,49278=>1000,49279=>1000,49280=>1000,49281=>1000,49282=>1000,49283=>1000,49284=>1000,49285=>1000,49286=>1000,49287=>1000,49288=>1000,49289=>1000,49290=>1000,49291=>1000,49292=>1000,49293=>1000,49294=>1000,49295=>1000,49296=>1000,49297=>1000,49298=>1000,49299=>1000,49300=>1000,49301=>1000,49302=>1000,49303=>1000,49304=>1000,49305=>1000,49306=>1000,49307=>1000,49308=>1000,49309=>1000,49310=>1000,49311=>1000,49312=>1000,49313=>1000,49314=>1000,49315=>1000,49316=>1000,49317=>1000,49318=>1000,49319=>1000,49320=>1000,49321=>1000,49322=>1000,49323=>1000,49324=>1000,49325=>1000,49326=>1000,49327=>1000,49328=>1000,49329=>1000,49330=>1000,49331=>1000,49332=>1000,49333=>1000,49334=>1000,49335=>1000,49336=>1000,49337=>1000,49338=>1000,49339=>1000,49340=>1000,49341=>1000,49342=>1000,49343=>1000,49344=>1000,49345=>1000,49346=>1000,49347=>1000,49348=>1000,49349=>1000,49350=>1000,49351=>1000,49352=>1000,49353=>1000,49354=>1000,49355=>1000,49356=>1000,49357=>1000,49358=>1000,49359=>1000,49360=>1000,49361=>1000,49362=>1000,49363=>1000,49364=>1000,49365=>1000,49366=>1000,49367=>1000,49368=>1000,49369=>1000,49370=>1000,49371=>1000,49372=>1000,49373=>1000,49374=>1000,49375=>1000,49376=>1000,49377=>1000,49378=>1000,49379=>1000,49380=>1000,49381=>1000,49382=>1000,49383=>1000,49384=>1000,49385=>1000,49386=>1000,49387=>1000,49388=>1000,49389=>1000,49390=>1000,49391=>1000,49392=>1000,49393=>1000,49394=>1000,49395=>1000,49396=>1000,49397=>1000,49398=>1000,49399=>1000,49400=>1000,49401=>1000,49402=>1000,49403=>1000,49404=>1000,49405=>1000,49406=>1000,49407=>1000,49408=>1000,49409=>1000,49410=>1000,49411=>1000,49412=>1000,49413=>1000,49414=>1000,49415=>1000,49416=>1000,49417=>1000,49418=>1000,49419=>1000,49420=>1000,49421=>1000,49422=>1000,49423=>1000,49424=>1000,49425=>1000,49426=>1000,49427=>1000,49428=>1000,49429=>1000,49430=>1000,49431=>1000,49432=>1000,49433=>1000,49434=>1000,49435=>1000,49436=>1000,49437=>1000,49438=>1000,49439=>1000,49440=>1000,49441=>1000,49442=>1000,49443=>1000,49444=>1000,49445=>1000,49446=>1000,49447=>1000,49448=>1000,49449=>1000,49450=>1000,49451=>1000,49452=>1000,49453=>1000,49454=>1000,49455=>1000,49456=>1000,49457=>1000,49458=>1000,49459=>1000,49460=>1000,49461=>1000,49462=>1000,49463=>1000,49464=>1000,49465=>1000,49466=>1000,49467=>1000,49468=>1000,49469=>1000,49470=>1000,49471=>1000,49472=>1000,49473=>1000,49474=>1000,49475=>1000,49476=>1000,49477=>1000,49478=>1000,49479=>1000,49480=>1000,49481=>1000,49482=>1000,49483=>1000,49484=>1000,49485=>1000,49486=>1000,49487=>1000,49488=>1000,49489=>1000,49490=>1000,49491=>1000,49492=>1000,49493=>1000,49494=>1000,49495=>1000,49496=>1000,49497=>1000,49498=>1000,49499=>1000,49500=>1000,49501=>1000,49502=>1000,49503=>1000,49504=>1000,49505=>1000,49506=>1000,49507=>1000,49508=>1000,49509=>1000,49510=>1000,49511=>1000,49512=>1000,49513=>1000,49514=>1000,49515=>1000,49516=>1000,49517=>1000,49518=>1000,49519=>1000,49520=>1000,49521=>1000,49522=>1000,49523=>1000,49524=>1000,49525=>1000,49526=>1000,49527=>1000,49528=>1000,49529=>1000,49530=>1000,49531=>1000,49532=>1000,49533=>1000,49534=>1000,49535=>1000,49536=>1000,49537=>1000,49538=>1000,49539=>1000,49540=>1000,49541=>1000,49542=>1000,49543=>1000,49544=>1000,49545=>1000,49546=>1000,49547=>1000,49548=>1000,49549=>1000,49550=>1000,49551=>1000,49552=>1000,49553=>1000,49554=>1000,49555=>1000,49556=>1000,49557=>1000,49558=>1000,49559=>1000,49560=>1000,49561=>1000,49562=>1000,49563=>1000,49564=>1000,49565=>1000,49566=>1000,49567=>1000,49568=>1000,49569=>1000,49570=>1000,49571=>1000,49572=>1000,49573=>1000,49574=>1000,49575=>1000,49576=>1000,49577=>1000,49578=>1000,49579=>1000,49580=>1000,49581=>1000,49582=>1000,49583=>1000,49584=>1000,49585=>1000,49586=>1000,49587=>1000,49588=>1000,49589=>1000,49590=>1000,49591=>1000,49592=>1000,49593=>1000,49594=>1000,49595=>1000,49596=>1000,49597=>1000,49598=>1000,49599=>1000,49600=>1000,49601=>1000,49602=>1000,49603=>1000,49604=>1000,49605=>1000,49606=>1000,49607=>1000,49608=>1000,49609=>1000,49610=>1000,49611=>1000,49612=>1000,49613=>1000,49614=>1000,49615=>1000,49616=>1000,49617=>1000,49618=>1000,49619=>1000,49620=>1000,49621=>1000,49622=>1000,49623=>1000,49624=>1000,49625=>1000,49626=>1000,49627=>1000,49628=>1000,49629=>1000,49630=>1000,49631=>1000,49632=>1000,49633=>1000,49634=>1000,49635=>1000,49636=>1000,49637=>1000,49638=>1000,49639=>1000,49640=>1000,49641=>1000,49642=>1000,49643=>1000,49644=>1000,49645=>1000,49646=>1000,49647=>1000,49648=>1000,49649=>1000,49650=>1000,49651=>1000,49652=>1000,49653=>1000,49654=>1000,49655=>1000,49656=>1000,49657=>1000,49658=>1000,49659=>1000,49660=>1000,49661=>1000,49662=>1000,49663=>1000,49664=>1000,49665=>1000,49666=>1000,49667=>1000,49668=>1000,49669=>1000,49670=>1000,49671=>1000,49672=>1000,49673=>1000,49674=>1000,49675=>1000,49676=>1000,49677=>1000,49678=>1000,49679=>1000,49680=>1000,49681=>1000,49682=>1000,49683=>1000,49684=>1000,49685=>1000,49686=>1000,49687=>1000,49688=>1000,49689=>1000,49690=>1000,49691=>1000,49692=>1000,49693=>1000,49694=>1000,49695=>1000,49696=>1000,49697=>1000,49698=>1000,49699=>1000,49700=>1000,49701=>1000,49702=>1000,49703=>1000,49704=>1000,49705=>1000,49706=>1000,49707=>1000,49708=>1000,49709=>1000,49710=>1000,49711=>1000,49712=>1000,49713=>1000,49714=>1000,49715=>1000,49716=>1000,49717=>1000,49718=>1000,49719=>1000,49720=>1000,49721=>1000,49722=>1000,49723=>1000,49724=>1000,49725=>1000,49726=>1000,49727=>1000,49728=>1000,49729=>1000,49730=>1000,49731=>1000,49732=>1000,49733=>1000,49734=>1000,49735=>1000,49736=>1000,49737=>1000,49738=>1000,49739=>1000,49740=>1000,49741=>1000,49742=>1000,49743=>1000,49744=>1000,49745=>1000,49746=>1000,49747=>1000,49748=>1000,49749=>1000,49750=>1000,49751=>1000,49752=>1000,49753=>1000,49754=>1000,49755=>1000,49756=>1000,49757=>1000,49758=>1000,49759=>1000,49760=>1000,49761=>1000,49762=>1000,49763=>1000,49764=>1000,49765=>1000,49766=>1000,49767=>1000,49768=>1000,49769=>1000,49770=>1000,49771=>1000,49772=>1000,49773=>1000,49774=>1000,49775=>1000,49776=>1000,49777=>1000,49778=>1000,49779=>1000,49780=>1000,49781=>1000,49782=>1000,49783=>1000,49784=>1000,49785=>1000,49786=>1000,49787=>1000,49788=>1000,49789=>1000,49790=>1000,49791=>1000,49792=>1000,49793=>1000,49794=>1000,49795=>1000,49796=>1000,49797=>1000,49798=>1000,49799=>1000,49800=>1000,49801=>1000,49802=>1000,49803=>1000,49804=>1000,49805=>1000,49806=>1000,49807=>1000,49808=>1000,49809=>1000,49810=>1000,49811=>1000,49812=>1000,49813=>1000,49814=>1000,49815=>1000,49816=>1000,49817=>1000,49818=>1000,49819=>1000,49820=>1000,49821=>1000,49822=>1000,49823=>1000,49824=>1000,49825=>1000,49826=>1000,49827=>1000,49828=>1000,49829=>1000,49830=>1000,49831=>1000,49832=>1000,49833=>1000,49834=>1000,49835=>1000,49836=>1000,49837=>1000,49838=>1000,49839=>1000,49840=>1000,49841=>1000,49842=>1000,49843=>1000,49844=>1000,49845=>1000,49846=>1000,49847=>1000,49848=>1000,49849=>1000,49850=>1000,49851=>1000,49852=>1000,49853=>1000,49854=>1000,49855=>1000,49856=>1000,49857=>1000,49858=>1000,49859=>1000,49860=>1000,49861=>1000,49862=>1000,49863=>1000,49864=>1000,49865=>1000,49866=>1000,49867=>1000,49868=>1000,49869=>1000,49870=>1000,49871=>1000,49872=>1000,49873=>1000,49874=>1000,49875=>1000,49876=>1000,49877=>1000,49878=>1000,49879=>1000,49880=>1000,49881=>1000,49882=>1000,49883=>1000,49884=>1000,49885=>1000,49886=>1000,49887=>1000,49888=>1000,49889=>1000,49890=>1000,49891=>1000,49892=>1000,49893=>1000,49894=>1000,49895=>1000,49896=>1000,49897=>1000,49898=>1000,49899=>1000,49900=>1000,49901=>1000,49902=>1000,49903=>1000,49904=>1000,49905=>1000,49906=>1000,49907=>1000,49908=>1000,49909=>1000,49910=>1000,49911=>1000,49912=>1000,49913=>1000,49914=>1000,49915=>1000,49916=>1000,49917=>1000,49918=>1000,49919=>1000,49920=>1000,49921=>1000,49922=>1000,49923=>1000,49924=>1000,49925=>1000,49926=>1000,49927=>1000,49928=>1000,49929=>1000,49930=>1000,49931=>1000,49932=>1000,49933=>1000,49934=>1000,49935=>1000,49936=>1000,49937=>1000,49938=>1000,49939=>1000,49940=>1000,49941=>1000,49942=>1000,49943=>1000,49944=>1000,49945=>1000,49946=>1000,49947=>1000,49948=>1000,49949=>1000,49950=>1000,49951=>1000,49952=>1000,49953=>1000,49954=>1000,49955=>1000,49956=>1000,49957=>1000,49958=>1000,49959=>1000,49960=>1000,49961=>1000,49962=>1000,49963=>1000,49964=>1000,49965=>1000,49966=>1000,49967=>1000,49968=>1000,49969=>1000,49970=>1000,49971=>1000,49972=>1000,49973=>1000,49974=>1000,49975=>1000,49976=>1000,49977=>1000,49978=>1000,49979=>1000,49980=>1000,49981=>1000,49982=>1000,49983=>1000,49984=>1000,49985=>1000,49986=>1000,49987=>1000,49988=>1000,49989=>1000,49990=>1000,49991=>1000,49992=>1000,49993=>1000,49994=>1000,49995=>1000,49996=>1000,49997=>1000,49998=>1000,49999=>1000,50000=>1000,50001=>1000,50002=>1000,50003=>1000,50004=>1000,50005=>1000,50006=>1000,50007=>1000,50008=>1000,50009=>1000,50010=>1000,50011=>1000,50012=>1000,50013=>1000,50014=>1000,50015=>1000,50016=>1000,50017=>1000,50018=>1000,50019=>1000,50020=>1000,50021=>1000,50022=>1000,50023=>1000,50024=>1000,50025=>1000,50026=>1000,50027=>1000,50028=>1000,50029=>1000,50030=>1000,50031=>1000,50032=>1000,50033=>1000,50034=>1000,50035=>1000,50036=>1000,50037=>1000,50038=>1000,50039=>1000,50040=>1000,50041=>1000,50042=>1000,50043=>1000,50044=>1000,50045=>1000,50046=>1000,50047=>1000,50048=>1000,50049=>1000,50050=>1000,50051=>1000,50052=>1000,50053=>1000,50054=>1000,50055=>1000,50056=>1000,50057=>1000,50058=>1000,50059=>1000,50060=>1000,50061=>1000,50062=>1000,50063=>1000,50064=>1000,50065=>1000,50066=>1000,50067=>1000,50068=>1000,50069=>1000,50070=>1000,50071=>1000,50072=>1000,50073=>1000,50074=>1000,50075=>1000,50076=>1000,50077=>1000,50078=>1000,50079=>1000,50080=>1000,50081=>1000,50082=>1000,50083=>1000,50084=>1000,50085=>1000,50086=>1000,50087=>1000,50088=>1000,50089=>1000,50090=>1000,50091=>1000,50092=>1000,50093=>1000,50094=>1000,50095=>1000,50096=>1000,50097=>1000,50098=>1000,50099=>1000,50100=>1000,50101=>1000,50102=>1000,50103=>1000,50104=>1000,50105=>1000,50106=>1000,50107=>1000,50108=>1000,50109=>1000,50110=>1000,50111=>1000,50112=>1000,50113=>1000,50114=>1000,50115=>1000,50116=>1000,50117=>1000,50118=>1000,50119=>1000,50120=>1000,50121=>1000,50122=>1000,50123=>1000,50124=>1000,50125=>1000,50126=>1000,50127=>1000,50128=>1000,50129=>1000,50130=>1000,50131=>1000,50132=>1000,50133=>1000,50134=>1000,50135=>1000,50136=>1000,50137=>1000,50138=>1000,50139=>1000,50140=>1000,50141=>1000,50142=>1000,50143=>1000,50144=>1000,50145=>1000,50146=>1000,50147=>1000,50148=>1000,50149=>1000,50150=>1000,50151=>1000,50152=>1000,50153=>1000,50154=>1000,50155=>1000,50156=>1000,50157=>1000,50158=>1000,50159=>1000,50160=>1000,50161=>1000,50162=>1000,50163=>1000,50164=>1000,50165=>1000,50166=>1000,50167=>1000,50168=>1000,50169=>1000,50170=>1000,50171=>1000,50172=>1000,50173=>1000,50174=>1000,50175=>1000,50176=>1000,50177=>1000,50178=>1000,50179=>1000,50180=>1000,50181=>1000,50182=>1000,50183=>1000,50184=>1000,50185=>1000,50186=>1000,50187=>1000,50188=>1000,50189=>1000,50190=>1000,50191=>1000,50192=>1000,50193=>1000,50194=>1000,50195=>1000,50196=>1000,50197=>1000,50198=>1000,50199=>1000,50200=>1000,50201=>1000,50202=>1000,50203=>1000,50204=>1000,50205=>1000,50206=>1000,50207=>1000,50208=>1000,50209=>1000,50210=>1000,50211=>1000,50212=>1000,50213=>1000,50214=>1000,50215=>1000,50216=>1000,50217=>1000,50218=>1000,50219=>1000,50220=>1000,50221=>1000,50222=>1000,50223=>1000,50224=>1000,50225=>1000,50226=>1000,50227=>1000,50228=>1000,50229=>1000,50230=>1000,50231=>1000,50232=>1000,50233=>1000,50234=>1000,50235=>1000,50236=>1000,50237=>1000,50238=>1000,50239=>1000,50240=>1000,50241=>1000,50242=>1000,50243=>1000,50244=>1000,50245=>1000,50246=>1000,50247=>1000,50248=>1000,50249=>1000,50250=>1000,50251=>1000,50252=>1000,50253=>1000,50254=>1000,50255=>1000,50256=>1000,50257=>1000,50258=>1000,50259=>1000,50260=>1000,50261=>1000,50262=>1000,50263=>1000,50264=>1000,50265=>1000,50266=>1000,50267=>1000,50268=>1000,50269=>1000,50270=>1000,50271=>1000,50272=>1000,50273=>1000,50274=>1000,50275=>1000,50276=>1000,50277=>1000,50278=>1000,50279=>1000,50280=>1000,50281=>1000,50282=>1000,50283=>1000,50284=>1000,50285=>1000,50286=>1000,50287=>1000,50288=>1000,50289=>1000,50290=>1000,50291=>1000,50292=>1000,50293=>1000,50294=>1000,50295=>1000,50296=>1000,50297=>1000,50298=>1000,50299=>1000,50300=>1000,50301=>1000,50302=>1000,50303=>1000,50304=>1000,50305=>1000,50306=>1000,50307=>1000,50308=>1000,50309=>1000,50310=>1000,50311=>1000,50312=>1000,50313=>1000,50314=>1000,50315=>1000,50316=>1000,50317=>1000,50318=>1000,50319=>1000,50320=>1000,50321=>1000,50322=>1000,50323=>1000,50324=>1000,50325=>1000,50326=>1000,50327=>1000,50328=>1000,50329=>1000,50330=>1000,50331=>1000,50332=>1000,50333=>1000,50334=>1000,50335=>1000,50336=>1000,50337=>1000,50338=>1000,50339=>1000,50340=>1000,50341=>1000,50342=>1000,50343=>1000,50344=>1000,50345=>1000,50346=>1000,50347=>1000,50348=>1000,50349=>1000,50350=>1000,50351=>1000,50352=>1000,50353=>1000,50354=>1000,50355=>1000,50356=>1000,50357=>1000,50358=>1000,50359=>1000,50360=>1000,50361=>1000,50362=>1000,50363=>1000,50364=>1000,50365=>1000,50366=>1000,50367=>1000,50368=>1000,50369=>1000,50370=>1000,50371=>1000,50372=>1000,50373=>1000,50374=>1000,50375=>1000,50376=>1000,50377=>1000,50378=>1000,50379=>1000,50380=>1000,50381=>1000,50382=>1000,50383=>1000,50384=>1000,50385=>1000,50386=>1000,50387=>1000,50388=>1000,50389=>1000,50390=>1000,50391=>1000,50392=>1000,50393=>1000,50394=>1000,50395=>1000,50396=>1000,50397=>1000,50398=>1000,50399=>1000,50400=>1000,50401=>1000,50402=>1000,50403=>1000,50404=>1000,50405=>1000,50406=>1000,50407=>1000,50408=>1000,50409=>1000,50410=>1000,50411=>1000,50412=>1000,50413=>1000,50414=>1000,50415=>1000,50416=>1000,50417=>1000,50418=>1000,50419=>1000,50420=>1000,50421=>1000,50422=>1000,50423=>1000,50424=>1000,50425=>1000,50426=>1000,50427=>1000,50428=>1000,50429=>1000,50430=>1000,50431=>1000,50432=>1000,50433=>1000,50434=>1000,50435=>1000,50436=>1000,50437=>1000,50438=>1000,50439=>1000,50440=>1000,50441=>1000,50442=>1000,50443=>1000,50444=>1000,50445=>1000,50446=>1000,50447=>1000,50448=>1000,50449=>1000,50450=>1000,50451=>1000,50452=>1000,50453=>1000,50454=>1000,50455=>1000,50456=>1000,50457=>1000,50458=>1000,50459=>1000,50460=>1000,50461=>1000,50462=>1000,50463=>1000,50464=>1000,50465=>1000,50466=>1000,50467=>1000,50468=>1000,50469=>1000,50470=>1000,50471=>1000,50472=>1000,50473=>1000,50474=>1000,50475=>1000,50476=>1000,50477=>1000,50478=>1000,50479=>1000,50480=>1000,50481=>1000,50482=>1000,50483=>1000,50484=>1000,50485=>1000,50486=>1000,50487=>1000,50488=>1000,50489=>1000,50490=>1000,50491=>1000,50492=>1000,50493=>1000,50494=>1000,50495=>1000,50496=>1000,50497=>1000,50498=>1000,50499=>1000,50500=>1000,50501=>1000,50502=>1000,50503=>1000,50504=>1000,50505=>1000,50506=>1000,50507=>1000,50508=>1000,50509=>1000,50510=>1000,50511=>1000,50512=>1000,50513=>1000,50514=>1000,50515=>1000,50516=>1000,50517=>1000,50518=>1000,50519=>1000,50520=>1000,50521=>1000,50522=>1000,50523=>1000,50524=>1000,50525=>1000,50526=>1000,50527=>1000,50528=>1000,50529=>1000,50530=>1000,50531=>1000,50532=>1000,50533=>1000,50534=>1000,50535=>1000,50536=>1000,50537=>1000,50538=>1000,50539=>1000,50540=>1000,50541=>1000,50542=>1000,50543=>1000,50544=>1000,50545=>1000,50546=>1000,50547=>1000,50548=>1000,50549=>1000,50550=>1000,50551=>1000,50552=>1000,50553=>1000,50554=>1000,50555=>1000,50556=>1000,50557=>1000,50558=>1000,50559=>1000,50560=>1000,50561=>1000,50562=>1000,50563=>1000,50564=>1000,50565=>1000,50566=>1000,50567=>1000,50568=>1000,50569=>1000,50570=>1000,50571=>1000,50572=>1000,50573=>1000,50574=>1000,50575=>1000,50576=>1000,50577=>1000,50578=>1000,50579=>1000,50580=>1000,50581=>1000,50582=>1000,50583=>1000,50584=>1000,50585=>1000,50586=>1000,50587=>1000,50588=>1000,50589=>1000,50590=>1000,50591=>1000,50592=>1000,50593=>1000,50594=>1000,50595=>1000,50596=>1000,50597=>1000,50598=>1000,50599=>1000,50600=>1000,50601=>1000,50602=>1000,50603=>1000,50604=>1000,50605=>1000,50606=>1000,50607=>1000,50608=>1000,50609=>1000,50610=>1000,50611=>1000,50612=>1000,50613=>1000,50614=>1000,50615=>1000,50616=>1000,50617=>1000,50618=>1000,50619=>1000,50620=>1000,50621=>1000,50622=>1000,50623=>1000,50624=>1000,50625=>1000,50626=>1000,50627=>1000,50628=>1000,50629=>1000,50630=>1000,50631=>1000,50632=>1000,50633=>1000,50634=>1000,50635=>1000,50636=>1000,50637=>1000,50638=>1000,50639=>1000,50640=>1000,50641=>1000,50642=>1000,50643=>1000,50644=>1000,50645=>1000,50646=>1000,50647=>1000,50648=>1000,50649=>1000,50650=>1000,50651=>1000,50652=>1000,50653=>1000,50654=>1000,50655=>1000,50656=>1000,50657=>1000,50658=>1000,50659=>1000,50660=>1000,50661=>1000,50662=>1000,50663=>1000,50664=>1000,50665=>1000,50666=>1000,50667=>1000,50668=>1000,50669=>1000,50670=>1000,50671=>1000,50672=>1000,50673=>1000,50674=>1000,50675=>1000,50676=>1000,50677=>1000,50678=>1000,50679=>1000,50680=>1000,50681=>1000,50682=>1000,50683=>1000,50684=>1000,50685=>1000,50686=>1000,50687=>1000,50688=>1000,50689=>1000,50690=>1000,50691=>1000,50692=>1000,50693=>1000,50694=>1000,50695=>1000,50696=>1000,50697=>1000,50698=>1000,50699=>1000,50700=>1000,50701=>1000,50702=>1000,50703=>1000,50704=>1000,50705=>1000,50706=>1000,50707=>1000,50708=>1000,50709=>1000,50710=>1000,50711=>1000,50712=>1000,50713=>1000,50714=>1000,50715=>1000,50716=>1000,50717=>1000,50718=>1000,50719=>1000,50720=>1000,50721=>1000,50722=>1000,50723=>1000,50724=>1000,50725=>1000,50726=>1000,50727=>1000,50728=>1000,50729=>1000,50730=>1000,50731=>1000,50732=>1000,50733=>1000,50734=>1000,50735=>1000,50736=>1000,50737=>1000,50738=>1000,50739=>1000,50740=>1000,50741=>1000,50742=>1000,50743=>1000,50744=>1000,50745=>1000,50746=>1000,50747=>1000,50748=>1000,50749=>1000,50750=>1000,50751=>1000,50752=>1000,50753=>1000,50754=>1000,50755=>1000,50756=>1000,50757=>1000,50758=>1000,50759=>1000,50760=>1000,50761=>1000,50762=>1000,50763=>1000,50764=>1000,50765=>1000,50766=>1000,50767=>1000,50768=>1000,50769=>1000,50770=>1000,50771=>1000,50772=>1000,50773=>1000,50774=>1000,50775=>1000,50776=>1000,50777=>1000,50778=>1000,50779=>1000,50780=>1000,50781=>1000,50782=>1000,50783=>1000,50784=>1000,50785=>1000,50786=>1000,50787=>1000,50788=>1000,50789=>1000,50790=>1000,50791=>1000,50792=>1000,50793=>1000,50794=>1000,50795=>1000,50796=>1000,50797=>1000,50798=>1000,50799=>1000,50800=>1000,50801=>1000,50802=>1000,50803=>1000,50804=>1000,50805=>1000,50806=>1000,50807=>1000,50808=>1000,50809=>1000,50810=>1000,50811=>1000,50812=>1000,50813=>1000,50814=>1000,50815=>1000,50816=>1000,50817=>1000,50818=>1000,50819=>1000,50820=>1000,50821=>1000,50822=>1000,50823=>1000,50824=>1000,50825=>1000,50826=>1000,50827=>1000,50828=>1000,50829=>1000,50830=>1000,50831=>1000,50832=>1000,50833=>1000,50834=>1000,50835=>1000,50836=>1000,50837=>1000,50838=>1000,50839=>1000,50840=>1000,50841=>1000,50842=>1000,50843=>1000,50844=>1000,50845=>1000,50846=>1000,50847=>1000,50848=>1000,50849=>1000,50850=>1000,50851=>1000,50852=>1000,50853=>1000,50854=>1000,50855=>1000,50856=>1000,50857=>1000,50858=>1000,50859=>1000,50860=>1000,50861=>1000,50862=>1000,50863=>1000,50864=>1000,50865=>1000,50866=>1000,50867=>1000,50868=>1000,50869=>1000,50870=>1000,50871=>1000,50872=>1000,50873=>1000,50874=>1000,50875=>1000,50876=>1000,50877=>1000,50878=>1000,50879=>1000,50880=>1000,50881=>1000,50882=>1000,50883=>1000,50884=>1000,50885=>1000,50886=>1000,50887=>1000,50888=>1000,50889=>1000,50890=>1000,50891=>1000,50892=>1000,50893=>1000,50894=>1000,50895=>1000,50896=>1000,50897=>1000,50898=>1000,50899=>1000,50900=>1000,50901=>1000,50902=>1000,50903=>1000,50904=>1000,50905=>1000,50906=>1000,50907=>1000,50908=>1000,50909=>1000,50910=>1000,50911=>1000,50912=>1000,50913=>1000,50914=>1000,50915=>1000,50916=>1000,50917=>1000,50918=>1000,50919=>1000,50920=>1000,50921=>1000,50922=>1000,50923=>1000,50924=>1000,50925=>1000,50926=>1000,50927=>1000,50928=>1000,50929=>1000,50930=>1000,50931=>1000,50932=>1000,50933=>1000,50934=>1000,50935=>1000,50936=>1000,50937=>1000,50938=>1000,50939=>1000,50940=>1000,50941=>1000,50942=>1000,50943=>1000,50944=>1000,50945=>1000,50946=>1000,50947=>1000,50948=>1000,50949=>1000,50950=>1000,50951=>1000,50952=>1000,50953=>1000,50954=>1000,50955=>1000,50956=>1000,50957=>1000,50958=>1000,50959=>1000,50960=>1000,50961=>1000,50962=>1000,50963=>1000,50964=>1000,50965=>1000,50966=>1000,50967=>1000,50968=>1000,50969=>1000,50970=>1000,50971=>1000,50972=>1000,50973=>1000,50974=>1000,50975=>1000,50976=>1000,50977=>1000,50978=>1000,50979=>1000,50980=>1000,50981=>1000,50982=>1000,50983=>1000,50984=>1000,50985=>1000,50986=>1000,50987=>1000,50988=>1000,50989=>1000,50990=>1000,50991=>1000,50992=>1000,50993=>1000,50994=>1000,50995=>1000,50996=>1000,50997=>1000,50998=>1000,50999=>1000,51000=>1000,51001=>1000,51002=>1000,51003=>1000,51004=>1000,51005=>1000,51006=>1000,51007=>1000,51008=>1000,51009=>1000,51010=>1000,51011=>1000,51012=>1000,51013=>1000,51014=>1000,51015=>1000,51016=>1000,51017=>1000,51018=>1000,51019=>1000,51020=>1000,51021=>1000,51022=>1000,51023=>1000,51024=>1000,51025=>1000,51026=>1000,51027=>1000,51028=>1000,51029=>1000,51030=>1000,51031=>1000,51032=>1000,51033=>1000,51034=>1000,51035=>1000,51036=>1000,51037=>1000,51038=>1000,51039=>1000,51040=>1000,51041=>1000,51042=>1000,51043=>1000,51044=>1000,51045=>1000,51046=>1000,51047=>1000,51048=>1000,51049=>1000,51050=>1000,51051=>1000,51052=>1000,51053=>1000,51054=>1000,51055=>1000,51056=>1000,51057=>1000,51058=>1000,51059=>1000,51060=>1000,51061=>1000,51062=>1000,51063=>1000,51064=>1000,51065=>1000,51066=>1000,51067=>1000,51068=>1000,51069=>1000,51070=>1000,51071=>1000,51072=>1000,51073=>1000,51074=>1000,51075=>1000,51076=>1000,51077=>1000,51078=>1000,51079=>1000,51080=>1000,51081=>1000,51082=>1000,51083=>1000,51084=>1000,51085=>1000,51086=>1000,51087=>1000,51088=>1000,51089=>1000,51090=>1000,51091=>1000,51092=>1000,51093=>1000,51094=>1000,51095=>1000,51096=>1000,51097=>1000,51098=>1000,51099=>1000,51100=>1000,51101=>1000,51102=>1000,51103=>1000,51104=>1000,51105=>1000,51106=>1000,51107=>1000,51108=>1000,51109=>1000,51110=>1000,51111=>1000,51112=>1000,51113=>1000,51114=>1000,51115=>1000,51116=>1000,51117=>1000,51118=>1000,51119=>1000,51120=>1000,51121=>1000,51122=>1000,51123=>1000,51124=>1000,51125=>1000,51126=>1000,51127=>1000,51128=>1000,51129=>1000,51130=>1000,51131=>1000,51132=>1000,51133=>1000,51134=>1000,51135=>1000,51136=>1000,51137=>1000,51138=>1000,51139=>1000,51140=>1000,51141=>1000,51142=>1000,51143=>1000,51144=>1000,51145=>1000,51146=>1000,51147=>1000,51148=>1000,51149=>1000,51150=>1000,51151=>1000,51152=>1000,51153=>1000,51154=>1000,51155=>1000,51156=>1000,51157=>1000,51158=>1000,51159=>1000,51160=>1000,51161=>1000,51162=>1000,51163=>1000,51164=>1000,51165=>1000,51166=>1000,51167=>1000,51168=>1000,51169=>1000,51170=>1000,51171=>1000,51172=>1000,51173=>1000,51174=>1000,51175=>1000,51176=>1000,51177=>1000,51178=>1000,51179=>1000,51180=>1000,51181=>1000,51182=>1000,51183=>1000,51184=>1000,51185=>1000,51186=>1000,51187=>1000,51188=>1000,51189=>1000,51190=>1000,51191=>1000,51192=>1000,51193=>1000,51194=>1000,51195=>1000,51196=>1000,51197=>1000,51198=>1000,51199=>1000,51200=>1000,51201=>1000,51202=>1000,51203=>1000,51204=>1000,51205=>1000,51206=>1000,51207=>1000,51208=>1000,51209=>1000,51210=>1000,51211=>1000,51212=>1000,51213=>1000,51214=>1000,51215=>1000,51216=>1000,51217=>1000,51218=>1000,51219=>1000,51220=>1000,51221=>1000,51222=>1000,51223=>1000,51224=>1000,51225=>1000,51226=>1000,51227=>1000,51228=>1000,51229=>1000,51230=>1000,51231=>1000,51232=>1000,51233=>1000,51234=>1000,51235=>1000,51236=>1000,51237=>1000,51238=>1000,51239=>1000,51240=>1000,51241=>1000,51242=>1000,51243=>1000,51244=>1000,51245=>1000,51246=>1000,51247=>1000,51248=>1000,51249=>1000,51250=>1000,51251=>1000,51252=>1000,51253=>1000,51254=>1000,51255=>1000,51256=>1000,51257=>1000,51258=>1000,51259=>1000,51260=>1000,51261=>1000,51262=>1000,51263=>1000,51264=>1000,51265=>1000,51266=>1000,51267=>1000,51268=>1000,51269=>1000,51270=>1000,51271=>1000,51272=>1000,51273=>1000,51274=>1000,51275=>1000,51276=>1000,51277=>1000,51278=>1000,51279=>1000,51280=>1000,51281=>1000,51282=>1000,51283=>1000,51284=>1000,51285=>1000,51286=>1000,51287=>1000,51288=>1000,51289=>1000,51290=>1000,51291=>1000,51292=>1000,51293=>1000,51294=>1000,51295=>1000,51296=>1000,51297=>1000,51298=>1000,51299=>1000,51300=>1000,51301=>1000,51302=>1000,51303=>1000,51304=>1000,51305=>1000,51306=>1000,51307=>1000,51308=>1000,51309=>1000,51310=>1000,51311=>1000,51312=>1000,51313=>1000,51314=>1000,51315=>1000,51316=>1000,51317=>1000,51318=>1000,51319=>1000,51320=>1000,51321=>1000,51322=>1000,51323=>1000,51324=>1000,51325=>1000,51326=>1000,51327=>1000,51328=>1000,51329=>1000,51330=>1000,51331=>1000,51332=>1000,51333=>1000,51334=>1000,51335=>1000,51336=>1000,51337=>1000,51338=>1000,51339=>1000,51340=>1000,51341=>1000,51342=>1000,51343=>1000,51344=>1000,51345=>1000,51346=>1000,51347=>1000,51348=>1000,51349=>1000,51350=>1000,51351=>1000,51352=>1000,51353=>1000,51354=>1000,51355=>1000,51356=>1000,51357=>1000,51358=>1000,51359=>1000,51360=>1000,51361=>1000,51362=>1000,51363=>1000,51364=>1000,51365=>1000,51366=>1000,51367=>1000,51368=>1000,51369=>1000,51370=>1000,51371=>1000,51372=>1000,51373=>1000,51374=>1000,51375=>1000,51376=>1000,51377=>1000,51378=>1000,51379=>1000,51380=>1000,51381=>1000,51382=>1000,51383=>1000,51384=>1000,51385=>1000,51386=>1000,51387=>1000,51388=>1000,51389=>1000,51390=>1000,51391=>1000,51392=>1000,51393=>1000,51394=>1000,51395=>1000,51396=>1000,51397=>1000,51398=>1000,51399=>1000,51400=>1000,51401=>1000,51402=>1000,51403=>1000,51404=>1000,51405=>1000,51406=>1000,51407=>1000,51408=>1000,51409=>1000,51410=>1000,51411=>1000,51412=>1000,51413=>1000,51414=>1000,51415=>1000,51416=>1000,51417=>1000,51418=>1000,51419=>1000,51420=>1000,51421=>1000,51422=>1000,51423=>1000,51424=>1000,51425=>1000,51426=>1000,51427=>1000,51428=>1000,51429=>1000,51430=>1000,51431=>1000,51432=>1000,51433=>1000,51434=>1000,51435=>1000,51436=>1000,51437=>1000,51438=>1000,51439=>1000,51440=>1000,51441=>1000,51442=>1000,51443=>1000,51444=>1000,51445=>1000,51446=>1000,51447=>1000,51448=>1000,51449=>1000,51450=>1000,51451=>1000,51452=>1000,51453=>1000,51454=>1000,51455=>1000,51456=>1000,51457=>1000,51458=>1000,51459=>1000,51460=>1000,51461=>1000,51462=>1000,51463=>1000,51464=>1000,51465=>1000,51466=>1000,51467=>1000,51468=>1000,51469=>1000,51470=>1000,51471=>1000,51472=>1000,51473=>1000,51474=>1000,51475=>1000,51476=>1000,51477=>1000,51478=>1000,51479=>1000,51480=>1000,51481=>1000,51482=>1000,51483=>1000,51484=>1000,51485=>1000,51486=>1000,51487=>1000,51488=>1000,51489=>1000,51490=>1000,51491=>1000,51492=>1000,51493=>1000,51494=>1000,51495=>1000,51496=>1000,51497=>1000,51498=>1000,51499=>1000,51500=>1000,51501=>1000,51502=>1000,51503=>1000,51504=>1000,51505=>1000,51506=>1000,51507=>1000,51508=>1000,51509=>1000,51510=>1000,51511=>1000,51512=>1000,51513=>1000,51514=>1000,51515=>1000,51516=>1000,51517=>1000,51518=>1000,51519=>1000,51520=>1000,51521=>1000,51522=>1000,51523=>1000,51524=>1000,51525=>1000,51526=>1000,51527=>1000,51528=>1000,51529=>1000,51530=>1000,51531=>1000,51532=>1000,51533=>1000,51534=>1000,51535=>1000,51536=>1000,51537=>1000,51538=>1000,51539=>1000,51540=>1000,51541=>1000,51542=>1000,51543=>1000,51544=>1000,51545=>1000,51546=>1000,51547=>1000,51548=>1000,51549=>1000,51550=>1000,51551=>1000,51552=>1000,51553=>1000,51554=>1000,51555=>1000,51556=>1000,51557=>1000,51558=>1000,51559=>1000,51560=>1000,51561=>1000,51562=>1000,51563=>1000,51564=>1000,51565=>1000,51566=>1000,51567=>1000,51568=>1000,51569=>1000,51570=>1000,51571=>1000,51572=>1000,51573=>1000,51574=>1000,51575=>1000,51576=>1000,51577=>1000,51578=>1000,51579=>1000,51580=>1000,51581=>1000,51582=>1000,51583=>1000,51584=>1000,51585=>1000,51586=>1000,51587=>1000,51588=>1000,51589=>1000,51590=>1000,51591=>1000,51592=>1000,51593=>1000,51594=>1000,51595=>1000,51596=>1000,51597=>1000,51598=>1000,51599=>1000,51600=>1000,51601=>1000,51602=>1000,51603=>1000,51604=>1000,51605=>1000,51606=>1000,51607=>1000,51608=>1000,51609=>1000,51610=>1000,51611=>1000,51612=>1000,51613=>1000,51614=>1000,51615=>1000,51616=>1000,51617=>1000,51618=>1000,51619=>1000,51620=>1000,51621=>1000,51622=>1000,51623=>1000,51624=>1000,51625=>1000,51626=>1000,51627=>1000,51628=>1000,51629=>1000,51630=>1000,51631=>1000,51632=>1000,51633=>1000,51634=>1000,51635=>1000,51636=>1000,51637=>1000,51638=>1000,51639=>1000,51640=>1000,51641=>1000,51642=>1000,51643=>1000,51644=>1000,51645=>1000,51646=>1000,51647=>1000,51648=>1000,51649=>1000,51650=>1000,51651=>1000,51652=>1000,51653=>1000,51654=>1000,51655=>1000,51656=>1000,51657=>1000,51658=>1000,51659=>1000,51660=>1000,51661=>1000,51662=>1000,51663=>1000,51664=>1000,51665=>1000,51666=>1000,51667=>1000,51668=>1000,51669=>1000,51670=>1000,51671=>1000,51672=>1000,51673=>1000,51674=>1000,51675=>1000,51676=>1000,51677=>1000,51678=>1000,51679=>1000,51680=>1000,51681=>1000,51682=>1000,51683=>1000,51684=>1000,51685=>1000,51686=>1000,51687=>1000,51688=>1000,51689=>1000,51690=>1000,51691=>1000,51692=>1000,51693=>1000,51694=>1000,51695=>1000,51696=>1000,51697=>1000,51698=>1000,51699=>1000,51700=>1000,51701=>1000,51702=>1000,51703=>1000,51704=>1000,51705=>1000,51706=>1000,51707=>1000,51708=>1000,51709=>1000,51710=>1000,51711=>1000,51712=>1000,51713=>1000,51714=>1000,51715=>1000,51716=>1000,51717=>1000,51718=>1000,51719=>1000,51720=>1000,51721=>1000,51722=>1000,51723=>1000,51724=>1000,51725=>1000,51726=>1000,51727=>1000,51728=>1000,51729=>1000,51730=>1000,51731=>1000,51732=>1000,51733=>1000,51734=>1000,51735=>1000,51736=>1000,51737=>1000,51738=>1000,51739=>1000,51740=>1000,51741=>1000,51742=>1000,51743=>1000,51744=>1000,51745=>1000,51746=>1000,51747=>1000,51748=>1000,51749=>1000,51750=>1000,51751=>1000,51752=>1000,51753=>1000,51754=>1000,51755=>1000,51756=>1000,51757=>1000,51758=>1000,51759=>1000,51760=>1000,51761=>1000,51762=>1000,51763=>1000,51764=>1000,51765=>1000,51766=>1000,51767=>1000,51768=>1000,51769=>1000,51770=>1000,51771=>1000,51772=>1000,51773=>1000,51774=>1000,51775=>1000,51776=>1000,51777=>1000,51778=>1000,51779=>1000,51780=>1000,51781=>1000,51782=>1000,51783=>1000,51784=>1000,51785=>1000,51786=>1000,51787=>1000,51788=>1000,51789=>1000,51790=>1000,51791=>1000,51792=>1000,51793=>1000,51794=>1000,51795=>1000,51796=>1000,51797=>1000,51798=>1000,51799=>1000,51800=>1000,51801=>1000,51802=>1000,51803=>1000,51804=>1000,51805=>1000,51806=>1000,51807=>1000,51808=>1000,51809=>1000,51810=>1000,51811=>1000,51812=>1000,51813=>1000,51814=>1000,51815=>1000,51816=>1000,51817=>1000,51818=>1000,51819=>1000,51820=>1000,51821=>1000,51822=>1000,51823=>1000,51824=>1000,51825=>1000,51826=>1000,51827=>1000,51828=>1000,51829=>1000,51830=>1000,51831=>1000,51832=>1000,51833=>1000,51834=>1000,51835=>1000,51836=>1000,51837=>1000,51838=>1000,51839=>1000,51840=>1000,51841=>1000,51842=>1000,51843=>1000,51844=>1000,51845=>1000,51846=>1000,51847=>1000,51848=>1000,51849=>1000,51850=>1000,51851=>1000,51852=>1000,51853=>1000,51854=>1000,51855=>1000,51856=>1000,51857=>1000,51858=>1000,51859=>1000,51860=>1000,51861=>1000,51862=>1000,51863=>1000,51864=>1000,51865=>1000,51866=>1000,51867=>1000,51868=>1000,51869=>1000,51870=>1000,51871=>1000,51872=>1000,51873=>1000,51874=>1000,51875=>1000,51876=>1000,51877=>1000,51878=>1000,51879=>1000,51880=>1000,51881=>1000,51882=>1000,51883=>1000,51884=>1000,51885=>1000,51886=>1000,51887=>1000,51888=>1000,51889=>1000,51890=>1000,51891=>1000,51892=>1000,51893=>1000,51894=>1000,51895=>1000,51896=>1000,51897=>1000,51898=>1000,51899=>1000,51900=>1000,51901=>1000,51902=>1000,51903=>1000,51904=>1000,51905=>1000,51906=>1000,51907=>1000,51908=>1000,51909=>1000,51910=>1000,51911=>1000,51912=>1000,51913=>1000,51914=>1000,51915=>1000,51916=>1000,51917=>1000,51918=>1000,51919=>1000,51920=>1000,51921=>1000,51922=>1000,51923=>1000,51924=>1000,51925=>1000,51926=>1000,51927=>1000,51928=>1000,51929=>1000,51930=>1000,51931=>1000,51932=>1000,51933=>1000,51934=>1000,51935=>1000,51936=>1000,51937=>1000,51938=>1000,51939=>1000,51940=>1000,51941=>1000,51942=>1000,51943=>1000,51944=>1000,51945=>1000,51946=>1000,51947=>1000,51948=>1000,51949=>1000,51950=>1000,51951=>1000,51952=>1000,51953=>1000,51954=>1000,51955=>1000,51956=>1000,51957=>1000,51958=>1000,51959=>1000,51960=>1000,51961=>1000,51962=>1000,51963=>1000,51964=>1000,51965=>1000,51966=>1000,51967=>1000,51968=>1000,51969=>1000,51970=>1000,51971=>1000,51972=>1000,51973=>1000,51974=>1000,51975=>1000,51976=>1000,51977=>1000,51978=>1000,51979=>1000,51980=>1000,51981=>1000,51982=>1000,51983=>1000,51984=>1000,51985=>1000,51986=>1000,51987=>1000,51988=>1000,51989=>1000,51990=>1000,51991=>1000,51992=>1000,51993=>1000,51994=>1000,51995=>1000,51996=>1000,51997=>1000,51998=>1000,51999=>1000,52000=>1000,52001=>1000,52002=>1000,52003=>1000,52004=>1000,52005=>1000,52006=>1000,52007=>1000,52008=>1000,52009=>1000,52010=>1000,52011=>1000,52012=>1000,52013=>1000,52014=>1000,52015=>1000,52016=>1000,52017=>1000,52018=>1000,52019=>1000,52020=>1000,52021=>1000,52022=>1000,52023=>1000,52024=>1000,52025=>1000,52026=>1000,52027=>1000,52028=>1000,52029=>1000,52030=>1000,52031=>1000,52032=>1000,52033=>1000,52034=>1000,52035=>1000,52036=>1000,52037=>1000,52038=>1000,52039=>1000,52040=>1000,52041=>1000,52042=>1000,52043=>1000,52044=>1000,52045=>1000,52046=>1000,52047=>1000,52048=>1000,52049=>1000,52050=>1000,52051=>1000,52052=>1000,52053=>1000,52054=>1000,52055=>1000,52056=>1000,52057=>1000,52058=>1000,52059=>1000,52060=>1000,52061=>1000,52062=>1000,52063=>1000,52064=>1000,52065=>1000,52066=>1000,52067=>1000,52068=>1000,52069=>1000,52070=>1000,52071=>1000,52072=>1000,52073=>1000,52074=>1000,52075=>1000,52076=>1000,52077=>1000,52078=>1000,52079=>1000,52080=>1000,52081=>1000,52082=>1000,52083=>1000,52084=>1000,52085=>1000,52086=>1000,52087=>1000,52088=>1000,52089=>1000,52090=>1000,52091=>1000,52092=>1000,52093=>1000,52094=>1000,52095=>1000,52096=>1000,52097=>1000,52098=>1000,52099=>1000,52100=>1000,52101=>1000,52102=>1000,52103=>1000,52104=>1000,52105=>1000,52106=>1000,52107=>1000,52108=>1000,52109=>1000,52110=>1000,52111=>1000,52112=>1000,52113=>1000,52114=>1000,52115=>1000,52116=>1000,52117=>1000,52118=>1000,52119=>1000,52120=>1000,52121=>1000,52122=>1000,52123=>1000,52124=>1000,52125=>1000,52126=>1000,52127=>1000,52128=>1000,52129=>1000,52130=>1000,52131=>1000,52132=>1000,52133=>1000,52134=>1000,52135=>1000,52136=>1000,52137=>1000,52138=>1000,52139=>1000,52140=>1000,52141=>1000,52142=>1000,52143=>1000,52144=>1000,52145=>1000,52146=>1000,52147=>1000,52148=>1000,52149=>1000,52150=>1000,52151=>1000,52152=>1000,52153=>1000,52154=>1000,52155=>1000,52156=>1000,52157=>1000,52158=>1000,52159=>1000,52160=>1000,52161=>1000,52162=>1000,52163=>1000,52164=>1000,52165=>1000,52166=>1000,52167=>1000,52168=>1000,52169=>1000,52170=>1000,52171=>1000,52172=>1000,52173=>1000,52174=>1000,52175=>1000,52176=>1000,52177=>1000,52178=>1000,52179=>1000,52180=>1000,52181=>1000,52182=>1000,52183=>1000,52184=>1000,52185=>1000,52186=>1000,52187=>1000,52188=>1000,52189=>1000,52190=>1000,52191=>1000,52192=>1000,52193=>1000,52194=>1000,52195=>1000,52196=>1000,52197=>1000,52198=>1000,52199=>1000,52200=>1000,52201=>1000,52202=>1000,52203=>1000,52204=>1000,52205=>1000,52206=>1000,52207=>1000,52208=>1000,52209=>1000,52210=>1000,52211=>1000,52212=>1000,52213=>1000,52214=>1000,52215=>1000,52216=>1000,52217=>1000,52218=>1000,52219=>1000,52220=>1000,52221=>1000,52222=>1000,52223=>1000,52224=>1000,52225=>1000,52226=>1000,52227=>1000,52228=>1000,52229=>1000,52230=>1000,52231=>1000,52232=>1000,52233=>1000,52234=>1000,52235=>1000,52236=>1000,52237=>1000,52238=>1000,52239=>1000,52240=>1000,52241=>1000,52242=>1000,52243=>1000,52244=>1000,52245=>1000,52246=>1000,52247=>1000,52248=>1000,52249=>1000,52250=>1000,52251=>1000,52252=>1000,52253=>1000,52254=>1000,52255=>1000,52256=>1000,52257=>1000,52258=>1000,52259=>1000,52260=>1000,52261=>1000,52262=>1000,52263=>1000,52264=>1000,52265=>1000,52266=>1000,52267=>1000,52268=>1000,52269=>1000,52270=>1000,52271=>1000,52272=>1000,52273=>1000,52274=>1000,52275=>1000,52276=>1000,52277=>1000,52278=>1000,52279=>1000,52280=>1000,52281=>1000,52282=>1000,52283=>1000,52284=>1000,52285=>1000,52286=>1000,52287=>1000,52288=>1000,52289=>1000,52290=>1000,52291=>1000,52292=>1000,52293=>1000,52294=>1000,52295=>1000,52296=>1000,52297=>1000,52298=>1000,52299=>1000,52300=>1000,52301=>1000,52302=>1000,52303=>1000,52304=>1000,52305=>1000,52306=>1000,52307=>1000,52308=>1000,52309=>1000,52310=>1000,52311=>1000,52312=>1000,52313=>1000,52314=>1000,52315=>1000,52316=>1000,52317=>1000,52318=>1000,52319=>1000,52320=>1000,52321=>1000,52322=>1000,52323=>1000,52324=>1000,52325=>1000,52326=>1000,52327=>1000,52328=>1000,52329=>1000,52330=>1000,52331=>1000,52332=>1000,52333=>1000,52334=>1000,52335=>1000,52336=>1000,52337=>1000,52338=>1000,52339=>1000,52340=>1000,52341=>1000,52342=>1000,52343=>1000,52344=>1000,52345=>1000,52346=>1000,52347=>1000,52348=>1000,52349=>1000,52350=>1000,52351=>1000,52352=>1000,52353=>1000,52354=>1000,52355=>1000,52356=>1000,52357=>1000,52358=>1000,52359=>1000,52360=>1000,52361=>1000,52362=>1000,52363=>1000,52364=>1000,52365=>1000,52366=>1000,52367=>1000,52368=>1000,52369=>1000,52370=>1000,52371=>1000,52372=>1000,52373=>1000,52374=>1000,52375=>1000,52376=>1000,52377=>1000,52378=>1000,52379=>1000,52380=>1000,52381=>1000,52382=>1000,52383=>1000,52384=>1000,52385=>1000,52386=>1000,52387=>1000,52388=>1000,52389=>1000,52390=>1000,52391=>1000,52392=>1000,52393=>1000,52394=>1000,52395=>1000,52396=>1000,52397=>1000,52398=>1000,52399=>1000,52400=>1000,52401=>1000,52402=>1000,52403=>1000,52404=>1000,52405=>1000,52406=>1000,52407=>1000,52408=>1000,52409=>1000,52410=>1000,52411=>1000,52412=>1000,52413=>1000,52414=>1000,52415=>1000,52416=>1000,52417=>1000,52418=>1000,52419=>1000,52420=>1000,52421=>1000,52422=>1000,52423=>1000,52424=>1000,52425=>1000,52426=>1000,52427=>1000,52428=>1000,52429=>1000,52430=>1000,52431=>1000,52432=>1000,52433=>1000,52434=>1000,52435=>1000,52436=>1000,52437=>1000,52438=>1000,52439=>1000,52440=>1000,52441=>1000,52442=>1000,52443=>1000,52444=>1000,52445=>1000,52446=>1000,52447=>1000,52448=>1000,52449=>1000,52450=>1000,52451=>1000,52452=>1000,52453=>1000,52454=>1000,52455=>1000,52456=>1000,52457=>1000,52458=>1000,52459=>1000,52460=>1000,52461=>1000,52462=>1000,52463=>1000,52464=>1000,52465=>1000,52466=>1000,52467=>1000,52468=>1000,52469=>1000,52470=>1000,52471=>1000,52472=>1000,52473=>1000,52474=>1000,52475=>1000,52476=>1000,52477=>1000,52478=>1000,52479=>1000,52480=>1000,52481=>1000,52482=>1000,52483=>1000,52484=>1000,52485=>1000,52486=>1000,52487=>1000,52488=>1000,52489=>1000,52490=>1000,52491=>1000,52492=>1000,52493=>1000,52494=>1000,52495=>1000,52496=>1000,52497=>1000,52498=>1000,52499=>1000,52500=>1000,52501=>1000,52502=>1000,52503=>1000,52504=>1000,52505=>1000,52506=>1000,52507=>1000,52508=>1000,52509=>1000,52510=>1000,52511=>1000,52512=>1000,52513=>1000,52514=>1000,52515=>1000,52516=>1000,52517=>1000,52518=>1000,52519=>1000,52520=>1000,52521=>1000,52522=>1000,52523=>1000,52524=>1000,52525=>1000,52526=>1000,52527=>1000,52528=>1000,52529=>1000,52530=>1000,52531=>1000,52532=>1000,52533=>1000,52534=>1000,52535=>1000,52536=>1000,52537=>1000,52538=>1000,52539=>1000,52540=>1000,52541=>1000,52542=>1000,52543=>1000,52544=>1000,52545=>1000,52546=>1000,52547=>1000,52548=>1000,52549=>1000,52550=>1000,52551=>1000,52552=>1000,52553=>1000,52554=>1000,52555=>1000,52556=>1000,52557=>1000,52558=>1000,52559=>1000,52560=>1000,52561=>1000,52562=>1000,52563=>1000,52564=>1000,52565=>1000,52566=>1000,52567=>1000,52568=>1000,52569=>1000,52570=>1000,52571=>1000,52572=>1000,52573=>1000,52574=>1000,52575=>1000,52576=>1000,52577=>1000,52578=>1000,52579=>1000,52580=>1000,52581=>1000,52582=>1000,52583=>1000,52584=>1000,52585=>1000,52586=>1000,52587=>1000,52588=>1000,52589=>1000,52590=>1000,52591=>1000,52592=>1000,52593=>1000,52594=>1000,52595=>1000,52596=>1000,52597=>1000,52598=>1000,52599=>1000,52600=>1000,52601=>1000,52602=>1000,52603=>1000,52604=>1000,52605=>1000,52606=>1000,52607=>1000,52608=>1000,52609=>1000,52610=>1000,52611=>1000,52612=>1000,52613=>1000,52614=>1000,52615=>1000,52616=>1000,52617=>1000,52618=>1000,52619=>1000,52620=>1000,52621=>1000,52622=>1000,52623=>1000,52624=>1000,52625=>1000,52626=>1000,52627=>1000,52628=>1000,52629=>1000,52630=>1000,52631=>1000,52632=>1000,52633=>1000,52634=>1000,52635=>1000,52636=>1000,52637=>1000,52638=>1000,52639=>1000,52640=>1000,52641=>1000,52642=>1000,52643=>1000,52644=>1000,52645=>1000,52646=>1000,52647=>1000,52648=>1000,52649=>1000,52650=>1000,52651=>1000,52652=>1000,52653=>1000,52654=>1000,52655=>1000,52656=>1000,52657=>1000,52658=>1000,52659=>1000,52660=>1000,52661=>1000,52662=>1000,52663=>1000,52664=>1000,52665=>1000,52666=>1000,52667=>1000,52668=>1000,52669=>1000,52670=>1000,52671=>1000,52672=>1000,52673=>1000,52674=>1000,52675=>1000,52676=>1000,52677=>1000,52678=>1000,52679=>1000,52680=>1000,52681=>1000,52682=>1000,52683=>1000,52684=>1000,52685=>1000,52686=>1000,52687=>1000,52688=>1000,52689=>1000,52690=>1000,52691=>1000,52692=>1000,52693=>1000,52694=>1000,52695=>1000,52696=>1000,52697=>1000,52698=>1000,52699=>1000,52700=>1000,52701=>1000,52702=>1000,52703=>1000,52704=>1000,52705=>1000,52706=>1000,52707=>1000,52708=>1000,52709=>1000,52710=>1000,52711=>1000,52712=>1000,52713=>1000,52714=>1000,52715=>1000,52716=>1000,52717=>1000,52718=>1000,52719=>1000,52720=>1000,52721=>1000,52722=>1000,52723=>1000,52724=>1000,52725=>1000,52726=>1000,52727=>1000,52728=>1000,52729=>1000,52730=>1000,52731=>1000,52732=>1000,52733=>1000,52734=>1000,52735=>1000,52736=>1000,52737=>1000,52738=>1000,52739=>1000,52740=>1000,52741=>1000,52742=>1000,52743=>1000,52744=>1000,52745=>1000,52746=>1000,52747=>1000,52748=>1000,52749=>1000,52750=>1000,52751=>1000,52752=>1000,52753=>1000,52754=>1000,52755=>1000,52756=>1000,52757=>1000,52758=>1000,52759=>1000,52760=>1000,52761=>1000,52762=>1000,52763=>1000,52764=>1000,52765=>1000,52766=>1000,52767=>1000,52768=>1000,52769=>1000,52770=>1000,52771=>1000,52772=>1000,52773=>1000,52774=>1000,52775=>1000,52776=>1000,52777=>1000,52778=>1000,52779=>1000,52780=>1000,52781=>1000,52782=>1000,52783=>1000,52784=>1000,52785=>1000,52786=>1000,52787=>1000,52788=>1000,52789=>1000,52790=>1000,52791=>1000,52792=>1000,52793=>1000,52794=>1000,52795=>1000,52796=>1000,52797=>1000,52798=>1000,52799=>1000,52800=>1000,52801=>1000,52802=>1000,52803=>1000,52804=>1000,52805=>1000,52806=>1000,52807=>1000,52808=>1000,52809=>1000,52810=>1000,52811=>1000,52812=>1000,52813=>1000,52814=>1000,52815=>1000,52816=>1000,52817=>1000,52818=>1000,52819=>1000,52820=>1000,52821=>1000,52822=>1000,52823=>1000,52824=>1000,52825=>1000,52826=>1000,52827=>1000,52828=>1000,52829=>1000,52830=>1000,52831=>1000,52832=>1000,52833=>1000,52834=>1000,52835=>1000,52836=>1000,52837=>1000,52838=>1000,52839=>1000,52840=>1000,52841=>1000,52842=>1000,52843=>1000,52844=>1000,52845=>1000,52846=>1000,52847=>1000,52848=>1000,52849=>1000,52850=>1000,52851=>1000,52852=>1000,52853=>1000,52854=>1000,52855=>1000,52856=>1000,52857=>1000,52858=>1000,52859=>1000,52860=>1000,52861=>1000,52862=>1000,52863=>1000,52864=>1000,52865=>1000,52866=>1000,52867=>1000,52868=>1000,52869=>1000,52870=>1000,52871=>1000,52872=>1000,52873=>1000,52874=>1000,52875=>1000,52876=>1000,52877=>1000,52878=>1000,52879=>1000,52880=>1000,52881=>1000,52882=>1000,52883=>1000,52884=>1000,52885=>1000,52886=>1000,52887=>1000,52888=>1000,52889=>1000,52890=>1000,52891=>1000,52892=>1000,52893=>1000,52894=>1000,52895=>1000,52896=>1000,52897=>1000,52898=>1000,52899=>1000,52900=>1000,52901=>1000,52902=>1000,52903=>1000,52904=>1000,52905=>1000,52906=>1000,52907=>1000,52908=>1000,52909=>1000,52910=>1000,52911=>1000,52912=>1000,52913=>1000,52914=>1000,52915=>1000,52916=>1000,52917=>1000,52918=>1000,52919=>1000,52920=>1000,52921=>1000,52922=>1000,52923=>1000,52924=>1000,52925=>1000,52926=>1000,52927=>1000,52928=>1000,52929=>1000,52930=>1000,52931=>1000,52932=>1000,52933=>1000,52934=>1000,52935=>1000,52936=>1000,52937=>1000,52938=>1000,52939=>1000,52940=>1000,52941=>1000,52942=>1000,52943=>1000,52944=>1000,52945=>1000,52946=>1000,52947=>1000,52948=>1000,52949=>1000,52950=>1000,52951=>1000,52952=>1000,52953=>1000,52954=>1000,52955=>1000,52956=>1000,52957=>1000,52958=>1000,52959=>1000,52960=>1000,52961=>1000,52962=>1000,52963=>1000,52964=>1000,52965=>1000,52966=>1000,52967=>1000,52968=>1000,52969=>1000,52970=>1000,52971=>1000,52972=>1000,52973=>1000,52974=>1000,52975=>1000,52976=>1000,52977=>1000,52978=>1000,52979=>1000,52980=>1000,52981=>1000,52982=>1000,52983=>1000,52984=>1000,52985=>1000,52986=>1000,52987=>1000,52988=>1000,52989=>1000,52990=>1000,52991=>1000,52992=>1000,52993=>1000,52994=>1000,52995=>1000,52996=>1000,52997=>1000,52998=>1000,52999=>1000,53000=>1000,53001=>1000,53002=>1000,53003=>1000,53004=>1000,53005=>1000,53006=>1000,53007=>1000,53008=>1000,53009=>1000,53010=>1000,53011=>1000,53012=>1000,53013=>1000,53014=>1000,53015=>1000,53016=>1000,53017=>1000,53018=>1000,53019=>1000,53020=>1000,53021=>1000,53022=>1000,53023=>1000,53024=>1000,53025=>1000,53026=>1000,53027=>1000,53028=>1000,53029=>1000,53030=>1000,53031=>1000,53032=>1000,53033=>1000,53034=>1000,53035=>1000,53036=>1000,53037=>1000,53038=>1000,53039=>1000,53040=>1000,53041=>1000,53042=>1000,53043=>1000,53044=>1000,53045=>1000,53046=>1000,53047=>1000,53048=>1000,53049=>1000,53050=>1000,53051=>1000,53052=>1000,53053=>1000,53054=>1000,53055=>1000,53056=>1000,53057=>1000,53058=>1000,53059=>1000,53060=>1000,53061=>1000,53062=>1000,53063=>1000,53064=>1000,53065=>1000,53066=>1000,53067=>1000,53068=>1000,53069=>1000,53070=>1000,53071=>1000,53072=>1000,53073=>1000,53074=>1000,53075=>1000,53076=>1000,53077=>1000,53078=>1000,53079=>1000,53080=>1000,53081=>1000,53082=>1000,53083=>1000,53084=>1000,53085=>1000,53086=>1000,53087=>1000,53088=>1000,53089=>1000,53090=>1000,53091=>1000,53092=>1000,53093=>1000,53094=>1000,53095=>1000,53096=>1000,53097=>1000,53098=>1000,53099=>1000,53100=>1000,53101=>1000,53102=>1000,53103=>1000,53104=>1000,53105=>1000,53106=>1000,53107=>1000,53108=>1000,53109=>1000,53110=>1000,53111=>1000,53112=>1000,53113=>1000,53114=>1000,53115=>1000,53116=>1000,53117=>1000,53118=>1000,53119=>1000,53120=>1000,53121=>1000,53122=>1000,53123=>1000,53124=>1000,53125=>1000,53126=>1000,53127=>1000,53128=>1000,53129=>1000,53130=>1000,53131=>1000,53132=>1000,53133=>1000,53134=>1000,53135=>1000,53136=>1000,53137=>1000,53138=>1000,53139=>1000,53140=>1000,53141=>1000,53142=>1000,53143=>1000,53144=>1000,53145=>1000,53146=>1000,53147=>1000,53148=>1000,53149=>1000,53150=>1000,53151=>1000,53152=>1000,53153=>1000,53154=>1000,53155=>1000,53156=>1000,53157=>1000,53158=>1000,53159=>1000,53160=>1000,53161=>1000,53162=>1000,53163=>1000,53164=>1000,53165=>1000,53166=>1000,53167=>1000,53168=>1000,53169=>1000,53170=>1000,53171=>1000,53172=>1000,53173=>1000,53174=>1000,53175=>1000,53176=>1000,53177=>1000,53178=>1000,53179=>1000,53180=>1000,53181=>1000,53182=>1000,53183=>1000,53184=>1000,53185=>1000,53186=>1000,53187=>1000,53188=>1000,53189=>1000,53190=>1000,53191=>1000,53192=>1000,53193=>1000,53194=>1000,53195=>1000,53196=>1000,53197=>1000,53198=>1000,53199=>1000,53200=>1000,53201=>1000,53202=>1000,53203=>1000,53204=>1000,53205=>1000,53206=>1000,53207=>1000,53208=>1000,53209=>1000,53210=>1000,53211=>1000,53212=>1000,53213=>1000,53214=>1000,53215=>1000,53216=>1000,53217=>1000,53218=>1000,53219=>1000,53220=>1000,53221=>1000,53222=>1000,53223=>1000,53224=>1000,53225=>1000,53226=>1000,53227=>1000,53228=>1000,53229=>1000,53230=>1000,53231=>1000,53232=>1000,53233=>1000,53234=>1000,53235=>1000,53236=>1000,53237=>1000,53238=>1000,53239=>1000,53240=>1000,53241=>1000,53242=>1000,53243=>1000,53244=>1000,53245=>1000,53246=>1000,53247=>1000,53248=>1000,53249=>1000,53250=>1000,53251=>1000,53252=>1000,53253=>1000,53254=>1000,53255=>1000,53256=>1000,53257=>1000,53258=>1000,53259=>1000,53260=>1000,53261=>1000,53262=>1000,53263=>1000,53264=>1000,53265=>1000,53266=>1000,53267=>1000,53268=>1000,53269=>1000,53270=>1000,53271=>1000,53272=>1000,53273=>1000,53274=>1000,53275=>1000,53276=>1000,53277=>1000,53278=>1000,53279=>1000,53280=>1000,53281=>1000,53282=>1000,53283=>1000,53284=>1000,53285=>1000,53286=>1000,53287=>1000,53288=>1000,53289=>1000,53290=>1000,53291=>1000,53292=>1000,53293=>1000,53294=>1000,53295=>1000,53296=>1000,53297=>1000,53298=>1000,53299=>1000,53300=>1000,53301=>1000,53302=>1000,53303=>1000,53304=>1000,53305=>1000,53306=>1000,53307=>1000,53308=>1000,53309=>1000,53310=>1000,53311=>1000,53312=>1000,53313=>1000,53314=>1000,53315=>1000,53316=>1000,53317=>1000,53318=>1000,53319=>1000,53320=>1000,53321=>1000,53322=>1000,53323=>1000,53324=>1000,53325=>1000,53326=>1000,53327=>1000,53328=>1000,53329=>1000,53330=>1000,53331=>1000,53332=>1000,53333=>1000,53334=>1000,53335=>1000,53336=>1000,53337=>1000,53338=>1000,53339=>1000,53340=>1000,53341=>1000,53342=>1000,53343=>1000,53344=>1000,53345=>1000,53346=>1000,53347=>1000,53348=>1000,53349=>1000,53350=>1000,53351=>1000,53352=>1000,53353=>1000,53354=>1000,53355=>1000,53356=>1000,53357=>1000,53358=>1000,53359=>1000,53360=>1000,53361=>1000,53362=>1000,53363=>1000,53364=>1000,53365=>1000,53366=>1000,53367=>1000,53368=>1000,53369=>1000,53370=>1000,53371=>1000,53372=>1000,53373=>1000,53374=>1000,53375=>1000,53376=>1000,53377=>1000,53378=>1000,53379=>1000,53380=>1000,53381=>1000,53382=>1000,53383=>1000,53384=>1000,53385=>1000,53386=>1000,53387=>1000,53388=>1000,53389=>1000,53390=>1000,53391=>1000,53392=>1000,53393=>1000,53394=>1000,53395=>1000,53396=>1000,53397=>1000,53398=>1000,53399=>1000,53400=>1000,53401=>1000,53402=>1000,53403=>1000,53404=>1000,53405=>1000,53406=>1000,53407=>1000,53408=>1000,53409=>1000,53410=>1000,53411=>1000,53412=>1000,53413=>1000,53414=>1000,53415=>1000,53416=>1000,53417=>1000,53418=>1000,53419=>1000,53420=>1000,53421=>1000,53422=>1000,53423=>1000,53424=>1000,53425=>1000,53426=>1000,53427=>1000,53428=>1000,53429=>1000,53430=>1000,53431=>1000,53432=>1000,53433=>1000,53434=>1000,53435=>1000,53436=>1000,53437=>1000,53438=>1000,53439=>1000,53440=>1000,53441=>1000,53442=>1000,53443=>1000,53444=>1000,53445=>1000,53446=>1000,53447=>1000,53448=>1000,53449=>1000,53450=>1000,53451=>1000,53452=>1000,53453=>1000,53454=>1000,53455=>1000,53456=>1000,53457=>1000,53458=>1000,53459=>1000,53460=>1000,53461=>1000,53462=>1000,53463=>1000,53464=>1000,53465=>1000,53466=>1000,53467=>1000,53468=>1000,53469=>1000,53470=>1000,53471=>1000,53472=>1000,53473=>1000,53474=>1000,53475=>1000,53476=>1000,53477=>1000,53478=>1000,53479=>1000,53480=>1000,53481=>1000,53482=>1000,53483=>1000,53484=>1000,53485=>1000,53486=>1000,53487=>1000,53488=>1000,53489=>1000,53490=>1000,53491=>1000,53492=>1000,53493=>1000,53494=>1000,53495=>1000,53496=>1000,53497=>1000,53498=>1000,53499=>1000,53500=>1000,53501=>1000,53502=>1000,53503=>1000,53504=>1000,53505=>1000,53506=>1000,53507=>1000,53508=>1000,53509=>1000,53510=>1000,53511=>1000,53512=>1000,53513=>1000,53514=>1000,53515=>1000,53516=>1000,53517=>1000,53518=>1000,53519=>1000,53520=>1000,53521=>1000,53522=>1000,53523=>1000,53524=>1000,53525=>1000,53526=>1000,53527=>1000,53528=>1000,53529=>1000,53530=>1000,53531=>1000,53532=>1000,53533=>1000,53534=>1000,53535=>1000,53536=>1000,53537=>1000,53538=>1000,53539=>1000,53540=>1000,53541=>1000,53542=>1000,53543=>1000,53544=>1000,53545=>1000,53546=>1000,53547=>1000,53548=>1000,53549=>1000,53550=>1000,53551=>1000,53552=>1000,53553=>1000,53554=>1000,53555=>1000,53556=>1000,53557=>1000,53558=>1000,53559=>1000,53560=>1000,53561=>1000,53562=>1000,53563=>1000,53564=>1000,53565=>1000,53566=>1000,53567=>1000,53568=>1000,53569=>1000,53570=>1000,53571=>1000,53572=>1000,53573=>1000,53574=>1000,53575=>1000,53576=>1000,53577=>1000,53578=>1000,53579=>1000,53580=>1000,53581=>1000,53582=>1000,53583=>1000,53584=>1000,53585=>1000,53586=>1000,53587=>1000,53588=>1000,53589=>1000,53590=>1000,53591=>1000,53592=>1000,53593=>1000,53594=>1000,53595=>1000,53596=>1000,53597=>1000,53598=>1000,53599=>1000,53600=>1000,53601=>1000,53602=>1000,53603=>1000,53604=>1000,53605=>1000,53606=>1000,53607=>1000,53608=>1000,53609=>1000,53610=>1000,53611=>1000,53612=>1000,53613=>1000,53614=>1000,53615=>1000,53616=>1000,53617=>1000,53618=>1000,53619=>1000,53620=>1000,53621=>1000,53622=>1000,53623=>1000,53624=>1000,53625=>1000,53626=>1000,53627=>1000,53628=>1000,53629=>1000,53630=>1000,53631=>1000,53632=>1000,53633=>1000,53634=>1000,53635=>1000,53636=>1000,53637=>1000,53638=>1000,53639=>1000,53640=>1000,53641=>1000,53642=>1000,53643=>1000,53644=>1000,53645=>1000,53646=>1000,53647=>1000,53648=>1000,53649=>1000,53650=>1000,53651=>1000,53652=>1000,53653=>1000,53654=>1000,53655=>1000,53656=>1000,53657=>1000,53658=>1000,53659=>1000,53660=>1000,53661=>1000,53662=>1000,53663=>1000,53664=>1000,53665=>1000,53666=>1000,53667=>1000,53668=>1000,53669=>1000,53670=>1000,53671=>1000,53672=>1000,53673=>1000,53674=>1000,53675=>1000,53676=>1000,53677=>1000,53678=>1000,53679=>1000,53680=>1000,53681=>1000,53682=>1000,53683=>1000,53684=>1000,53685=>1000,53686=>1000,53687=>1000,53688=>1000,53689=>1000,53690=>1000,53691=>1000,53692=>1000,53693=>1000,53694=>1000,53695=>1000,53696=>1000,53697=>1000,53698=>1000,53699=>1000,53700=>1000,53701=>1000,53702=>1000,53703=>1000,53704=>1000,53705=>1000,53706=>1000,53707=>1000,53708=>1000,53709=>1000,53710=>1000,53711=>1000,53712=>1000,53713=>1000,53714=>1000,53715=>1000,53716=>1000,53717=>1000,53718=>1000,53719=>1000,53720=>1000,53721=>1000,53722=>1000,53723=>1000,53724=>1000,53725=>1000,53726=>1000,53727=>1000,53728=>1000,53729=>1000,53730=>1000,53731=>1000,53732=>1000,53733=>1000,53734=>1000,53735=>1000,53736=>1000,53737=>1000,53738=>1000,53739=>1000,53740=>1000,53741=>1000,53742=>1000,53743=>1000,53744=>1000,53745=>1000,53746=>1000,53747=>1000,53748=>1000,53749=>1000,53750=>1000,53751=>1000,53752=>1000,53753=>1000,53754=>1000,53755=>1000,53756=>1000,53757=>1000,53758=>1000,53759=>1000,53760=>1000,53761=>1000,53762=>1000,53763=>1000,53764=>1000,53765=>1000,53766=>1000,53767=>1000,53768=>1000,53769=>1000,53770=>1000,53771=>1000,53772=>1000,53773=>1000,53774=>1000,53775=>1000,53776=>1000,53777=>1000,53778=>1000,53779=>1000,53780=>1000,53781=>1000,53782=>1000,53783=>1000,53784=>1000,53785=>1000,53786=>1000,53787=>1000,53788=>1000,53789=>1000,53790=>1000,53791=>1000,53792=>1000,53793=>1000,53794=>1000,53795=>1000,53796=>1000,53797=>1000,53798=>1000,53799=>1000,53800=>1000,53801=>1000,53802=>1000,53803=>1000,53804=>1000,53805=>1000,53806=>1000,53807=>1000,53808=>1000,53809=>1000,53810=>1000,53811=>1000,53812=>1000,53813=>1000,53814=>1000,53815=>1000,53816=>1000,53817=>1000,53818=>1000,53819=>1000,53820=>1000,53821=>1000,53822=>1000,53823=>1000,53824=>1000,53825=>1000,53826=>1000,53827=>1000,53828=>1000,53829=>1000,53830=>1000,53831=>1000,53832=>1000,53833=>1000,53834=>1000,53835=>1000,53836=>1000,53837=>1000,53838=>1000,53839=>1000,53840=>1000,53841=>1000,53842=>1000,53843=>1000,53844=>1000,53845=>1000,53846=>1000,53847=>1000,53848=>1000,53849=>1000,53850=>1000,53851=>1000,53852=>1000,53853=>1000,53854=>1000,53855=>1000,53856=>1000,53857=>1000,53858=>1000,53859=>1000,53860=>1000,53861=>1000,53862=>1000,53863=>1000,53864=>1000,53865=>1000,53866=>1000,53867=>1000,53868=>1000,53869=>1000,53870=>1000,53871=>1000,53872=>1000,53873=>1000,53874=>1000,53875=>1000,53876=>1000,53877=>1000,53878=>1000,53879=>1000,53880=>1000,53881=>1000,53882=>1000,53883=>1000,53884=>1000,53885=>1000,53886=>1000,53887=>1000,53888=>1000,53889=>1000,53890=>1000,53891=>1000,53892=>1000,53893=>1000,53894=>1000,53895=>1000,53896=>1000,53897=>1000,53898=>1000,53899=>1000,53900=>1000,53901=>1000,53902=>1000,53903=>1000,53904=>1000,53905=>1000,53906=>1000,53907=>1000,53908=>1000,53909=>1000,53910=>1000,53911=>1000,53912=>1000,53913=>1000,53914=>1000,53915=>1000,53916=>1000,53917=>1000,53918=>1000,53919=>1000,53920=>1000,53921=>1000,53922=>1000,53923=>1000,53924=>1000,53925=>1000,53926=>1000,53927=>1000,53928=>1000,53929=>1000,53930=>1000,53931=>1000,53932=>1000,53933=>1000,53934=>1000,53935=>1000,53936=>1000,53937=>1000,53938=>1000,53939=>1000,53940=>1000,53941=>1000,53942=>1000,53943=>1000,53944=>1000,53945=>1000,53946=>1000,53947=>1000,53948=>1000,53949=>1000,53950=>1000,53951=>1000,53952=>1000,53953=>1000,53954=>1000,53955=>1000,53956=>1000,53957=>1000,53958=>1000,53959=>1000,53960=>1000,53961=>1000,53962=>1000,53963=>1000,53964=>1000,53965=>1000,53966=>1000,53967=>1000,53968=>1000,53969=>1000,53970=>1000,53971=>1000,53972=>1000,53973=>1000,53974=>1000,53975=>1000,53976=>1000,53977=>1000,53978=>1000,53979=>1000,53980=>1000,53981=>1000,53982=>1000,53983=>1000,53984=>1000,53985=>1000,53986=>1000,53987=>1000,53988=>1000,53989=>1000,53990=>1000,53991=>1000,53992=>1000,53993=>1000,53994=>1000,53995=>1000,53996=>1000,53997=>1000,53998=>1000,53999=>1000,54000=>1000,54001=>1000,54002=>1000,54003=>1000,54004=>1000,54005=>1000,54006=>1000,54007=>1000,54008=>1000,54009=>1000,54010=>1000,54011=>1000,54012=>1000,54013=>1000,54014=>1000,54015=>1000,54016=>1000,54017=>1000,54018=>1000,54019=>1000,54020=>1000,54021=>1000,54022=>1000,54023=>1000,54024=>1000,54025=>1000,54026=>1000,54027=>1000,54028=>1000,54029=>1000,54030=>1000,54031=>1000,54032=>1000,54033=>1000,54034=>1000,54035=>1000,54036=>1000,54037=>1000,54038=>1000,54039=>1000,54040=>1000,54041=>1000,54042=>1000,54043=>1000,54044=>1000,54045=>1000,54046=>1000,54047=>1000,54048=>1000,54049=>1000,54050=>1000,54051=>1000,54052=>1000,54053=>1000,54054=>1000,54055=>1000,54056=>1000,54057=>1000,54058=>1000,54059=>1000,54060=>1000,54061=>1000,54062=>1000,54063=>1000,54064=>1000,54065=>1000,54066=>1000,54067=>1000,54068=>1000,54069=>1000,54070=>1000,54071=>1000,54072=>1000,54073=>1000,54074=>1000,54075=>1000,54076=>1000,54077=>1000,54078=>1000,54079=>1000,54080=>1000,54081=>1000,54082=>1000,54083=>1000,54084=>1000,54085=>1000,54086=>1000,54087=>1000,54088=>1000,54089=>1000,54090=>1000,54091=>1000,54092=>1000,54093=>1000,54094=>1000,54095=>1000,54096=>1000,54097=>1000,54098=>1000,54099=>1000,54100=>1000,54101=>1000,54102=>1000,54103=>1000,54104=>1000,54105=>1000,54106=>1000,54107=>1000,54108=>1000,54109=>1000,54110=>1000,54111=>1000,54112=>1000,54113=>1000,54114=>1000,54115=>1000,54116=>1000,54117=>1000,54118=>1000,54119=>1000,54120=>1000,54121=>1000,54122=>1000,54123=>1000,54124=>1000,54125=>1000,54126=>1000,54127=>1000,54128=>1000,54129=>1000,54130=>1000,54131=>1000,54132=>1000,54133=>1000,54134=>1000,54135=>1000,54136=>1000,54137=>1000,54138=>1000,54139=>1000,54140=>1000,54141=>1000,54142=>1000,54143=>1000,54144=>1000,54145=>1000,54146=>1000,54147=>1000,54148=>1000,54149=>1000,54150=>1000,54151=>1000,54152=>1000,54153=>1000,54154=>1000,54155=>1000,54156=>1000,54157=>1000,54158=>1000,54159=>1000,54160=>1000,54161=>1000,54162=>1000,54163=>1000,54164=>1000,54165=>1000,54166=>1000,54167=>1000,54168=>1000,54169=>1000,54170=>1000,54171=>1000,54172=>1000,54173=>1000,54174=>1000,54175=>1000,54176=>1000,54177=>1000,54178=>1000,54179=>1000,54180=>1000,54181=>1000,54182=>1000,54183=>1000,54184=>1000,54185=>1000,54186=>1000,54187=>1000,54188=>1000,54189=>1000,54190=>1000,54191=>1000,54192=>1000,54193=>1000,54194=>1000,54195=>1000,54196=>1000,54197=>1000,54198=>1000,54199=>1000,54200=>1000,54201=>1000,54202=>1000,54203=>1000,54204=>1000,54205=>1000,54206=>1000,54207=>1000,54208=>1000,54209=>1000,54210=>1000,54211=>1000,54212=>1000,54213=>1000,54214=>1000,54215=>1000,54216=>1000,54217=>1000,54218=>1000,54219=>1000,54220=>1000,54221=>1000,54222=>1000,54223=>1000,54224=>1000,54225=>1000,54226=>1000,54227=>1000,54228=>1000,54229=>1000,54230=>1000,54231=>1000,54232=>1000,54233=>1000,54234=>1000,54235=>1000,54236=>1000,54237=>1000,54238=>1000,54239=>1000,54240=>1000,54241=>1000,54242=>1000,54243=>1000,54244=>1000,54245=>1000,54246=>1000,54247=>1000,54248=>1000,54249=>1000,54250=>1000,54251=>1000,54252=>1000,54253=>1000,54254=>1000,54255=>1000,54256=>1000,54257=>1000,54258=>1000,54259=>1000,54260=>1000,54261=>1000,54262=>1000,54263=>1000,54264=>1000,54265=>1000,54266=>1000,54267=>1000,54268=>1000,54269=>1000,54270=>1000,54271=>1000,54272=>1000,54273=>1000,54274=>1000,54275=>1000,54276=>1000,54277=>1000,54278=>1000,54279=>1000,54280=>1000,54281=>1000,54282=>1000,54283=>1000,54284=>1000,54285=>1000,54286=>1000,54287=>1000,54288=>1000,54289=>1000,54290=>1000,54291=>1000,54292=>1000,54293=>1000,54294=>1000,54295=>1000,54296=>1000,54297=>1000,54298=>1000,54299=>1000,54300=>1000,54301=>1000,54302=>1000,54303=>1000,54304=>1000,54305=>1000,54306=>1000,54307=>1000,54308=>1000,54309=>1000,54310=>1000,54311=>1000,54312=>1000,54313=>1000,54314=>1000,54315=>1000,54316=>1000,54317=>1000,54318=>1000,54319=>1000,54320=>1000,54321=>1000,54322=>1000,54323=>1000,54324=>1000,54325=>1000,54326=>1000,54327=>1000,54328=>1000,54329=>1000,54330=>1000,54331=>1000,54332=>1000,54333=>1000,54334=>1000,54335=>1000,54336=>1000,54337=>1000,54338=>1000,54339=>1000,54340=>1000,54341=>1000,54342=>1000,54343=>1000,54344=>1000,54345=>1000,54346=>1000,54347=>1000,54348=>1000,54349=>1000,54350=>1000,54351=>1000,54352=>1000,54353=>1000,54354=>1000,54355=>1000,54356=>1000,54357=>1000,54358=>1000,54359=>1000,54360=>1000,54361=>1000,54362=>1000,54363=>1000,54364=>1000,54365=>1000,54366=>1000,54367=>1000,54368=>1000,54369=>1000,54370=>1000,54371=>1000,54372=>1000,54373=>1000,54374=>1000,54375=>1000,54376=>1000,54377=>1000,54378=>1000,54379=>1000,54380=>1000,54381=>1000,54382=>1000,54383=>1000,54384=>1000,54385=>1000,54386=>1000,54387=>1000,54388=>1000,54389=>1000,54390=>1000,54391=>1000,54392=>1000,54393=>1000,54394=>1000,54395=>1000,54396=>1000,54397=>1000,54398=>1000,54399=>1000,54400=>1000,54401=>1000,54402=>1000,54403=>1000,54404=>1000,54405=>1000,54406=>1000,54407=>1000,54408=>1000,54409=>1000,54410=>1000,54411=>1000,54412=>1000,54413=>1000,54414=>1000,54415=>1000,54416=>1000,54417=>1000,54418=>1000,54419=>1000,54420=>1000,54421=>1000,54422=>1000,54423=>1000,54424=>1000,54425=>1000,54426=>1000,54427=>1000,54428=>1000,54429=>1000,54430=>1000,54431=>1000,54432=>1000,54433=>1000,54434=>1000,54435=>1000,54436=>1000,54437=>1000,54438=>1000,54439=>1000,54440=>1000,54441=>1000,54442=>1000,54443=>1000,54444=>1000,54445=>1000,54446=>1000,54447=>1000,54448=>1000,54449=>1000,54450=>1000,54451=>1000,54452=>1000,54453=>1000,54454=>1000,54455=>1000,54456=>1000,54457=>1000,54458=>1000,54459=>1000,54460=>1000,54461=>1000,54462=>1000,54463=>1000,54464=>1000,54465=>1000,54466=>1000,54467=>1000,54468=>1000,54469=>1000,54470=>1000,54471=>1000,54472=>1000,54473=>1000,54474=>1000,54475=>1000,54476=>1000,54477=>1000,54478=>1000,54479=>1000,54480=>1000,54481=>1000,54482=>1000,54483=>1000,54484=>1000,54485=>1000,54486=>1000,54487=>1000,54488=>1000,54489=>1000,54490=>1000,54491=>1000,54492=>1000,54493=>1000,54494=>1000,54495=>1000,54496=>1000,54497=>1000,54498=>1000,54499=>1000,54500=>1000,54501=>1000,54502=>1000,54503=>1000,54504=>1000,54505=>1000,54506=>1000,54507=>1000,54508=>1000,54509=>1000,54510=>1000,54511=>1000,54512=>1000,54513=>1000,54514=>1000,54515=>1000,54516=>1000,54517=>1000,54518=>1000,54519=>1000,54520=>1000,54521=>1000,54522=>1000,54523=>1000,54524=>1000,54525=>1000,54526=>1000,54527=>1000,54528=>1000,54529=>1000,54530=>1000,54531=>1000,54532=>1000,54533=>1000,54534=>1000,54535=>1000,54536=>1000,54537=>1000,54538=>1000,54539=>1000,54540=>1000,54541=>1000,54542=>1000,54543=>1000,54544=>1000,54545=>1000,54546=>1000,54547=>1000,54548=>1000,54549=>1000,54550=>1000,54551=>1000,54552=>1000,54553=>1000,54554=>1000,54555=>1000,54556=>1000,54557=>1000,54558=>1000,54559=>1000,54560=>1000,54561=>1000,54562=>1000,54563=>1000,54564=>1000,54565=>1000,54566=>1000,54567=>1000,54568=>1000,54569=>1000,54570=>1000,54571=>1000,54572=>1000,54573=>1000,54574=>1000,54575=>1000,54576=>1000,54577=>1000,54578=>1000,54579=>1000,54580=>1000,54581=>1000,54582=>1000,54583=>1000,54584=>1000,54585=>1000,54586=>1000,54587=>1000,54588=>1000,54589=>1000,54590=>1000,54591=>1000,54592=>1000,54593=>1000,54594=>1000,54595=>1000,54596=>1000,54597=>1000,54598=>1000,54599=>1000,54600=>1000,54601=>1000,54602=>1000,54603=>1000,54604=>1000,54605=>1000,54606=>1000,54607=>1000,54608=>1000,54609=>1000,54610=>1000,54611=>1000,54612=>1000,54613=>1000,54614=>1000,54615=>1000,54616=>1000,54617=>1000,54618=>1000,54619=>1000,54620=>1000,54621=>1000,54622=>1000,54623=>1000,54624=>1000,54625=>1000,54626=>1000,54627=>1000,54628=>1000,54629=>1000,54630=>1000,54631=>1000,54632=>1000,54633=>1000,54634=>1000,54635=>1000,54636=>1000,54637=>1000,54638=>1000,54639=>1000,54640=>1000,54641=>1000,54642=>1000,54643=>1000,54644=>1000,54645=>1000,54646=>1000,54647=>1000,54648=>1000,54649=>1000,54650=>1000,54651=>1000,54652=>1000,54653=>1000,54654=>1000,54655=>1000,54656=>1000,54657=>1000,54658=>1000,54659=>1000,54660=>1000,54661=>1000,54662=>1000,54663=>1000,54664=>1000,54665=>1000,54666=>1000,54667=>1000,54668=>1000,54669=>1000,54670=>1000,54671=>1000,54672=>1000,54673=>1000,54674=>1000,54675=>1000,54676=>1000,54677=>1000,54678=>1000,54679=>1000,54680=>1000,54681=>1000,54682=>1000,54683=>1000,54684=>1000,54685=>1000,54686=>1000,54687=>1000,54688=>1000,54689=>1000,54690=>1000,54691=>1000,54692=>1000,54693=>1000,54694=>1000,54695=>1000,54696=>1000,54697=>1000,54698=>1000,54699=>1000,54700=>1000,54701=>1000,54702=>1000,54703=>1000,54704=>1000,54705=>1000,54706=>1000,54707=>1000,54708=>1000,54709=>1000,54710=>1000,54711=>1000,54712=>1000,54713=>1000,54714=>1000,54715=>1000,54716=>1000,54717=>1000,54718=>1000,54719=>1000,54720=>1000,54721=>1000,54722=>1000,54723=>1000,54724=>1000,54725=>1000,54726=>1000,54727=>1000,54728=>1000,54729=>1000,54730=>1000,54731=>1000,54732=>1000,54733=>1000,54734=>1000,54735=>1000,54736=>1000,54737=>1000,54738=>1000,54739=>1000,54740=>1000,54741=>1000,54742=>1000,54743=>1000,54744=>1000,54745=>1000,54746=>1000,54747=>1000,54748=>1000,54749=>1000,54750=>1000,54751=>1000,54752=>1000,54753=>1000,54754=>1000,54755=>1000,54756=>1000,54757=>1000,54758=>1000,54759=>1000,54760=>1000,54761=>1000,54762=>1000,54763=>1000,54764=>1000,54765=>1000,54766=>1000,54767=>1000,54768=>1000,54769=>1000,54770=>1000,54771=>1000,54772=>1000,54773=>1000,54774=>1000,54775=>1000,54776=>1000,54777=>1000,54778=>1000,54779=>1000,54780=>1000,54781=>1000,54782=>1000,54783=>1000,54784=>1000,54785=>1000,54786=>1000,54787=>1000,54788=>1000,54789=>1000,54790=>1000,54791=>1000,54792=>1000,54793=>1000,54794=>1000,54795=>1000,54796=>1000,54797=>1000,54798=>1000,54799=>1000,54800=>1000,54801=>1000,54802=>1000,54803=>1000,54804=>1000,54805=>1000,54806=>1000,54807=>1000,54808=>1000,54809=>1000,54810=>1000,54811=>1000,54812=>1000,54813=>1000,54814=>1000,54815=>1000,54816=>1000,54817=>1000,54818=>1000,54819=>1000,54820=>1000,54821=>1000,54822=>1000,54823=>1000,54824=>1000,54825=>1000,54826=>1000,54827=>1000,54828=>1000,54829=>1000,54830=>1000,54831=>1000,54832=>1000,54833=>1000,54834=>1000,54835=>1000,54836=>1000,54837=>1000,54838=>1000,54839=>1000,54840=>1000,54841=>1000,54842=>1000,54843=>1000,54844=>1000,54845=>1000,54846=>1000,54847=>1000,54848=>1000,54849=>1000,54850=>1000,54851=>1000,54852=>1000,54853=>1000,54854=>1000,54855=>1000,54856=>1000,54857=>1000,54858=>1000,54859=>1000,54860=>1000,54861=>1000,54862=>1000,54863=>1000,54864=>1000,54865=>1000,54866=>1000,54867=>1000,54868=>1000,54869=>1000,54870=>1000,54871=>1000,54872=>1000,54873=>1000,54874=>1000,54875=>1000,54876=>1000,54877=>1000,54878=>1000,54879=>1000,54880=>1000,54881=>1000,54882=>1000,54883=>1000,54884=>1000,54885=>1000,54886=>1000,54887=>1000,54888=>1000,54889=>1000,54890=>1000,54891=>1000,54892=>1000,54893=>1000,54894=>1000,54895=>1000,54896=>1000,54897=>1000,54898=>1000,54899=>1000,54900=>1000,54901=>1000,54902=>1000,54903=>1000,54904=>1000,54905=>1000,54906=>1000,54907=>1000,54908=>1000,54909=>1000,54910=>1000,54911=>1000,54912=>1000,54913=>1000,54914=>1000,54915=>1000,54916=>1000,54917=>1000,54918=>1000,54919=>1000,54920=>1000,54921=>1000,54922=>1000,54923=>1000,54924=>1000,54925=>1000,54926=>1000,54927=>1000,54928=>1000,54929=>1000,54930=>1000,54931=>1000,54932=>1000,54933=>1000,54934=>1000,54935=>1000,54936=>1000,54937=>1000,54938=>1000,54939=>1000,54940=>1000,54941=>1000,54942=>1000,54943=>1000,54944=>1000,54945=>1000,54946=>1000,54947=>1000,54948=>1000,54949=>1000,54950=>1000,54951=>1000,54952=>1000,54953=>1000,54954=>1000,54955=>1000,54956=>1000,54957=>1000,54958=>1000,54959=>1000,54960=>1000,54961=>1000,54962=>1000,54963=>1000,54964=>1000,54965=>1000,54966=>1000,54967=>1000,54968=>1000,54969=>1000,54970=>1000,54971=>1000,54972=>1000,54973=>1000,54974=>1000,54975=>1000,54976=>1000,54977=>1000,54978=>1000,54979=>1000,54980=>1000,54981=>1000,54982=>1000,54983=>1000,54984=>1000,54985=>1000,54986=>1000,54987=>1000,54988=>1000,54989=>1000,54990=>1000,54991=>1000,54992=>1000,54993=>1000,54994=>1000,54995=>1000,54996=>1000,54997=>1000,54998=>1000,54999=>1000,55000=>1000,55001=>1000,55002=>1000,55003=>1000,55004=>1000,55005=>1000,55006=>1000,55007=>1000,55008=>1000,55009=>1000,55010=>1000,55011=>1000,55012=>1000,55013=>1000,55014=>1000,55015=>1000,55016=>1000,55017=>1000,55018=>1000,55019=>1000,55020=>1000,55021=>1000,55022=>1000,55023=>1000,55024=>1000,55025=>1000,55026=>1000,55027=>1000,55028=>1000,55029=>1000,55030=>1000,55031=>1000,55032=>1000,55033=>1000,55034=>1000,55035=>1000,55036=>1000,55037=>1000,55038=>1000,55039=>1000,55040=>1000,55041=>1000,55042=>1000,55043=>1000,55044=>1000,55045=>1000,55046=>1000,55047=>1000,55048=>1000,55049=>1000,55050=>1000,55051=>1000,55052=>1000,55053=>1000,55054=>1000,55055=>1000,55056=>1000,55057=>1000,55058=>1000,55059=>1000,55060=>1000,55061=>1000,55062=>1000,55063=>1000,55064=>1000,55065=>1000,55066=>1000,55067=>1000,55068=>1000,55069=>1000,55070=>1000,55071=>1000,55072=>1000,55073=>1000,55074=>1000,55075=>1000,55076=>1000,55077=>1000,55078=>1000,55079=>1000,55080=>1000,55081=>1000,55082=>1000,55083=>1000,55084=>1000,55085=>1000,55086=>1000,55087=>1000,55088=>1000,55089=>1000,55090=>1000,55091=>1000,55092=>1000,55093=>1000,55094=>1000,55095=>1000,55096=>1000,55097=>1000,55098=>1000,55099=>1000,55100=>1000,55101=>1000,55102=>1000,55103=>1000,55104=>1000,55105=>1000,55106=>1000,55107=>1000,55108=>1000,55109=>1000,55110=>1000,55111=>1000,55112=>1000,55113=>1000,55114=>1000,55115=>1000,55116=>1000,55117=>1000,55118=>1000,55119=>1000,55120=>1000,55121=>1000,55122=>1000,55123=>1000,55124=>1000,55125=>1000,55126=>1000,55127=>1000,55128=>1000,55129=>1000,55130=>1000,55131=>1000,55132=>1000,55133=>1000,55134=>1000,55135=>1000,55136=>1000,55137=>1000,55138=>1000,55139=>1000,55140=>1000,55141=>1000,55142=>1000,55143=>1000,55144=>1000,55145=>1000,55146=>1000,55147=>1000,55148=>1000,55149=>1000,55150=>1000,55151=>1000,55152=>1000,55153=>1000,55154=>1000,55155=>1000,55156=>1000,55157=>1000,55158=>1000,55159=>1000,55160=>1000,55161=>1000,55162=>1000,55163=>1000,55164=>1000,55165=>1000,55166=>1000,55167=>1000,55168=>1000,55169=>1000,55170=>1000,55171=>1000,55172=>1000,55173=>1000,55174=>1000,55175=>1000,55176=>1000,55177=>1000,55178=>1000,55179=>1000,55180=>1000,55181=>1000,55182=>1000,55183=>1000,55184=>1000,55185=>1000,55186=>1000,55187=>1000,55188=>1000,55189=>1000,55190=>1000,55191=>1000,55192=>1000,55193=>1000,55194=>1000,55195=>1000,55196=>1000,55197=>1000,55198=>1000,55199=>1000,55200=>1000,55201=>1000,55202=>1000,55203=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500,63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849,63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000,63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000,63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000,63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000,63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000,63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000,63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000,63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000,63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000,63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000,63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000,63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000,63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000,63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000,63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000,63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000,63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000,64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000,64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000,64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750,64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730,64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326,64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316,64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788,64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903,64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658,64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436,64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942,64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706,64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466,64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783,64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731,64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932,64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429,64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227,64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073,64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932,64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421,64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884,64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274,64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884,64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911,64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179,64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224,64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806,64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911,64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082,64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574,64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411,64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441,64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254,64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273,64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046,64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944,64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759,64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757,64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686,64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686,64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080,64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130,65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000,65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000,65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200,65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300,65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273,65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243,65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658,65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194,65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843,65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903,65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640,65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803,65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000,65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000,65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000,65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000,65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000,65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000,65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500,65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500,65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500,65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500,65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500,65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500,65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500,65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000,65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,65535=>1000); +// --- EOF --- diff --git a/tcpdf/fonts/cid0jp.php b/tcpdf/fonts/cid0jp.php new file mode 100644 index 0000000..264359b --- /dev/null +++ b/tcpdf/fonts/cid0jp.php @@ -0,0 +1,17 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='cidfont0'; +$name='cid0jp'; +$up=-100; +$ut=50; +$dw=1000; +$diff=''; +$originalsize=23275812; +// Japanese +$enc='UniJIS-UTF16-H'; +$cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'Japan1','Supplement'=>5); +include(dirname(__FILE__).'/uni2cid_aj16.php'); +$desc=array('Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'Ascent'=>1069,'Descent'=>-271,'Leading'=>0,'CapHeight'=>716,'XHeight'=>518,'StemV'=>34,'StemH'=>15,'AvgWidth'=>441,'MaxWidth'=>2259,'MissingWidth'=>1000); +$cbbox=array(0=>array(125,0,875,750),33=>array(85,0,194,716),34=>array(41,462,313,716),35=>array(11,-12,545,728),36=>array(38,-103,511,782),37=>array(73,-27,819,728),38=>array(43,-17,644,728),39=>array(45,462,145,716),40=>array(60,-210,297,728),41=>array(36,-210,273,728),42=>array(33,423,356,728),43=>array(55,116,529,590),44=>array(84,-141,190,100),45=>array(32,215,301,303),46=>array(89,0,189,100),47=>array(0,-24,278,716),48=>array(45,-12,511,719),49=>array(111,0,375,719),50=>array(31,0,505,719),51=>array(44,-12,513,719),52=>array(15,0,510,716),53=>array(42,-12,516,706),54=>array(42,-12,514,719),55=>array(48,0,511,706),56=>array(42,-12,513,719),57=>array(43,-12,513,719),58=>array(90,0,190,518),59=>array(84,-141,190,518),60=>array(55,111,529,595),61=>array(55,203,529,503),62=>array(55,111,529,595),63=>array(46,0,508,728),64=>array(56,-210,981,729),65=>array(-1,0,668,716),66=>array(74,0,615,716),67=>array(51,-12,683,728),68=>array(80,0,672,716),69=>array(79,0,614,716),70=>array(80,0,563,716),71=>array(52,-12,714,728),72=>array(80,0,642,716),73=>array(92,0,187,716),74=>array(27,-12,420,716),75=>array(73,0,665,716),76=>array(75,0,523,716),77=>array(76,0,757,716),78=>array(79,0,642,716),79=>array(47,-12,732,728),80=>array(77,0,623,716),81=>array(47,-56,745,728),82=>array(80,0,711,716),83=>array(45,-12,615,728),84=>array(22,0,589,716),85=>array(79,-12,642,716),86=>array(6,0,660,716),87=>array(12,0,933,716),88=>array(5,0,661,716),89=>array(5,0,661,716),90=>array(18,0,584,716),91=>array(68,-199,262,716),92=>array(0,-24,278,716),93=>array(16,-199,210,716),94=>array(26,325,443,716),95=>array(-6,-125,506,-75),96=>array(42,591,222,728),97=>array(38,-12,516,530),98=>array(67,-12,517,716),99=>array(39,-12,491,530),100=>array(36,-12,486,716),101=>array(39,-12,517,530),102=>array(8,0,311,728),103=>array(34,-210,491,530),104=>array(67,0,490,716),105=>array(67,0,155,716),106=>array(-45,-209,155,716),107=>array(66,0,496,716),108=>array(67,0,155,716),109=>array(65,0,769,530),110=>array(68,0,490,530),111=>array(35,-12,521,530),112=>array(68,-199,518,530),113=>array(38,-199,488,530),114=>array(64,0,346,530),115=>array(31,-12,461,530),116=>array(17,-7,269,700),117=>array(66,-12,487,518),118=>array(13,0,488,518),119=>array(5,0,717,518),120=>array(7,0,493,518),121=>array(16,-210,492,518),122=>array(20,0,479,518),123=>array(28,-210,310,728),124=>array(92,-199,168,716),125=>array(24,-210,306,728),126=>array(43,272,542,432),161=>array(110,-199,219,517),162=>array(55,-200,507,716),163=>array(15,-14,531,728),164=>array(38,115,518,594),165=>array(1,0,555,716),166=>array(92,-199,168,716),167=>array(42,-210,513,728),168=>array(31,611,302,711),169=>array(0,-9,737,728),170=>array(21,364,348,728),171=>array(69,35,487,481),172=>array(55,203,529,503),173=>array(32,215,301,303),174=>array(0,-9,737,728),175=>array(-6,793,506,843),176=>array(65,454,335,725),177=>array(55,0,529,611),178=>array(12,358,316,725),179=>array(16,349,315,725),180=>array(111,591,291,728),181=>array(67,-199,488,518),182=>array(-1,-199,539,716),183=>array(89,302,189,402),184=>array(52,-205,263,11),185=>array(52,358,232,725),186=>array(22,361,343,728),187=>array(69,35,487,481),188=>array(62,-25,789,732),189=>array(62,-25,806,732),190=>array(26,-25,789,732),191=>array(75,-209,537,519),192=>array(-1,0,668,900),193=>array(-1,0,668,900),194=>array(-1,0,668,900),195=>array(-1,0,668,886),196=>array(-1,0,668,881),197=>array(-1,0,668,920),198=>array(0,0,945,716),199=>array(51,-209,684,728),200=>array(79,0,614,900),201=>array(79,0,614,900),202=>array(79,0,614,900),203=>array(79,0,614,881),204=>array(15,0,195,900),205=>array(83,0,264,900),206=>array(-15,0,293,900),207=>array(3,0,274,881),208=>array(1,0,672,716),209=>array(79,0,642,884),210=>array(47,-12,732,900),211=>array(47,-12,732,900),212=>array(47,-12,732,900),213=>array(47,-12,732,884),214=>array(47,-12,732,881),215=>array(79,141,505,567),216=>array(41,-29,742,742),217=>array(79,-12,642,900),218=>array(79,-12,642,900),219=>array(79,-12,642,900),220=>array(79,-12,642,881),221=>array(5,0,661,900),222=>array(77,0,623,716),223=>array(72,-12,577,728),224=>array(38,-12,516,728),225=>array(38,-12,516,728),226=>array(38,-12,516,728),227=>array(38,-12,516,716),228=>array(38,-12,516,711),229=>array(38,-12,516,752),230=>array(34,-12,849,530),231=>array(39,-196,491,530),232=>array(39,-12,517,728),233=>array(39,-12,517,728),234=>array(39,-12,517,728),235=>array(39,-12,517,711),236=>array(13,0,193,728),237=>array(83,0,264,728),238=>array(-15,0,293,728),239=>array(5,0,276,711),240=>array(38,-12,517,716),241=>array(68,0,490,716),242=>array(35,-12,521,728),243=>array(35,-12,521,728),244=>array(35,-12,521,728),245=>array(35,-12,521,716),246=>array(35,-12,521,711),247=>array(55,146,529,560),248=>array(63,-39,549,550),249=>array(66,-12,487,728),250=>array(66,-12,487,728),251=>array(66,-12,487,728),252=>array(66,-12,487,711),253=>array(16,-210,492,728),254=>array(68,-199,518,716),255=>array(16,-210,492,711),256=>array(-1,0,668,833),257=>array(38,-12,516,697),258=>array(-1,0,668,888),259=>array(38,-12,516,722),260=>array(-1,-208,758,716),261=>array(38,-208,571,530),262=>array(51,-12,683,916),263=>array(39,-12,491,728),264=>array(51,-12,683,914),265=>array(39,-12,491,728),266=>array(51,-12,683,877),267=>array(39,-12,491,711),268=>array(51,-12,683,916),269=>array(39,-12,491,728),270=>array(80,0,672,916),271=>array(36,-12,625,716),272=>array(-1,0,672,716),273=>array(36,-12,551,716),274=>array(79,0,614,863),275=>array(39,-12,517,697),276=>array(79,0,614,902),277=>array(39,-12,517,722),278=>array(79,0,614,877),279=>array(39,-12,517,711),280=>array(79,-208,645,716),281=>array(39,-208,517,530),282=>array(79,0,614,916),283=>array(39,-12,517,728),284=>array(52,-12,714,914),285=>array(34,-210,491,728),286=>array(52,-12,714,904),287=>array(34,-210,491,722),288=>array(52,-12,714,877),289=>array(34,-210,491,711),290=>array(52,-210,714,728),291=>array(34,-210,491,775),292=>array(80,0,642,914),293=>array(67,0,490,914),294=>array(-1,0,722,716),295=>array(2,0,490,716),296=>array(-24,0,303,890),297=>array(-53,0,274,717),298=>array(-15,0,290,849),299=>array(-42,0,263,697),300=>array(-3,0,286,904),301=>array(-34,0,255,722),302=>array(91,-208,305,716),303=>array(45,-208,225,716),304=>array(92,0,187,877),305=>array(95,0,183,518),306=>array(92,-12,670,716),307=>array(67,-209,377,716),308=>array(27,-12,526,914),309=>array(-46,-209,263,728),310=>array(73,-210,665,716),311=>array(66,-210,496,716),312=>array(66,0,446,518),313=>array(75,0,523,916),314=>array(50,0,230,916),315=>array(75,-210,523,716),316=>array(58,-210,160,716),317=>array(-29,0,523,916),318=>array(-44,0,264,916),319=>array(75,0,523,716),320=>array(67,0,313,716),321=>array(0,0,521,716),322=>array(1,0,218,716),323=>array(79,0,642,916),324=>array(68,0,490,728),325=>array(79,-210,642,716),326=>array(68,-210,490,530),327=>array(79,0,642,916),328=>array(68,0,490,728),329=>array(-2,0,559,722),330=>array(81,-186,670,728),331=>array(68,-210,489,530),332=>array(47,-12,732,849),333=>array(35,-12,521,697),334=>array(47,-12,732,904),335=>array(35,-12,521,722),336=>array(47,-12,732,914),337=>array(35,-12,521,728),338=>array(63,-12,968,728),339=>array(38,-12,904,530),340=>array(80,0,711,914),341=>array(64,0,346,728),342=>array(80,-210,711,716),343=>array(54,-210,346,530),344=>array(80,0,711,916),345=>array(28,0,346,728),346=>array(45,-12,615,916),347=>array(31,-12,461,728),348=>array(45,-12,615,916),349=>array(31,-12,461,728),350=>array(45,-210,615,728),351=>array(31,-210,461,530),352=>array(45,-12,615,916),353=>array(31,-12,461,728),354=>array(22,-210,589,716),355=>array(17,-210,269,700),356=>array(22,0,589,916),357=>array(17,-7,406,716),358=>array(22,0,589,716),359=>array(17,-7,269,700),360=>array(79,-12,642,890),361=>array(66,-12,487,716),362=>array(79,-12,642,851),363=>array(66,-12,487,697),364=>array(79,-12,642,906),365=>array(66,-12,487,722),366=>array(79,-12,642,955),367=>array(66,-12,487,752),368=>array(79,-12,642,917),369=>array(66,-12,487,728),370=>array(79,-208,642,716),371=>array(66,-208,555,518),372=>array(12,0,933,916),373=>array(5,0,717,728),374=>array(5,0,661,916),375=>array(16,-210,492,728),376=>array(5,0,661,879),377=>array(18,0,584,916),378=>array(20,0,479,728),379=>array(18,0,584,877),380=>array(20,0,479,711),381=>array(18,0,584,916),382=>array(20,0,479,728),383=>array(67,0,292,728),384=>array(-14,-12,515,716),385=>array(0,0,688,716),386=>array(80,0,620,716),387=>array(65,-12,515,716),388=>array(67,-12,517,716),389=>array(67,-12,517,716),390=>array(39,-12,671,728),391=>array(51,-12,769,750),392=>array(39,-12,579,567),393=>array(1,0,672,716),394=>array(0,0,739,716),395=>array(35,0,575,716),396=>array(41,-12,491,716),397=>array(35,-198,522,530),398=>array(53,0,588,716),399=>array(45,-12,676,728),400=>array(42,-13,565,728),401=>array(-20,-154,563,716),402=>array(-14,-154,311,728),403=>array(52,-12,792,750),404=>array(0,-206,649,716),405=>array(67,-12,775,716),406=>array(67,-12,245,716),407=>array(0,0,322,716),408=>array(73,0,690,720),409=>array(66,0,496,728),410=>array(0,-12,322,716),411=>array(13,0,488,716),412=>array(65,-12,769,716),413=>array(-21,-154,642,716),414=>array(68,-199,490,530),415=>array(47,-12,732,728),416=>array(47,-12,776,768),417=>array(35,-12,555,606),418=>array(47,-12,950,728),419=>array(35,-209,715,530),420=>array(0,0,691,716),421=>array(68,-199,519,637),422=>array(80,-122,738,716),423=>array(52,-12,622,728),424=>array(39,-12,469,530),425=>array(47,0,554,716),426=>array(34,-154,405,734),427=>array(17,-151,269,700),428=>array(23,0,549,716),429=>array(17,-7,269,716),430=>array(22,-208,589,716),431=>array(79,-12,776,768),432=>array(66,-12,625,620),433=>array(67,-12,681,716),434=>array(6,0,620,728),435=>array(32,0,745,728),436=>array(16,-210,617,528),437=>array(18,0,584,716),438=>array(20,0,479,519),439=>array(40,-12,582,716),440=>array(46,-12,588,716),441=>array(42,-192,486,518),442=>array(36,-209,437,518),443=>array(31,0,505,728),444=>array(13,-12,516,716),445=>array(37,-12,486,518),446=>array(46,-10,508,716),447=>array(68,-199,498,529),448=>array(92,0,168,716),449=>array(92,0,372,716),450=>array(25,0,449,716),451=>array(85,0,194,716),452=>array(80,0,1303,896),453=>array(80,0,1202,728),454=>array(36,-12,1036,728),455=>array(75,-12,949,716),456=>array(75,-209,709,716),457=>array(67,-209,375,716),458=>array(79,-12,1141,716),459=>array(79,-209,875,716),460=>array(68,-209,709,716),461=>array(-1,0,668,900),462=>array(38,-12,516,728),463=>array(-17,0,292,900),464=>array(-18,0,291,728),465=>array(47,-12,732,900),466=>array(35,-12,521,728),467=>array(79,-12,642,900),468=>array(66,-12,487,728),469=>array(79,-12,642,1003),470=>array(66,-12,487,832),471=>array(79,-12,642,1068),472=>array(66,-12,487,896),473=>array(79,-12,642,1068),474=>array(66,-12,487,896),475=>array(79,-12,642,1068),476=>array(66,-12,487,896),477=>array(39,-11,517,530),478=>array(-1,0,668,1003),479=>array(38,-12,516,832),480=>array(-1,0,668,1003),481=>array(38,-12,516,832),482=>array(0,0,945,865),483=>array(34,-12,849,697),484=>array(52,-12,779,728),485=>array(34,-210,556,530),486=>array(52,-12,714,900),487=>array(34,-210,491,728),488=>array(73,0,665,900),489=>array(66,0,496,900),490=>array(47,-208,732,728),491=>array(33,-208,519,530),492=>array(47,-208,732,865),493=>array(33,-208,519,697),494=>array(48,6,492,898),495=>array(48,-192,492,728),496=>array(-48,-209,261,728),497=>array(80,0,1301,716),498=>array(80,0,1200,716),499=>array(36,-12,1034,716),500=>array(52,-12,714,900),501=>array(34,-210,491,728),506=>array(-1,0,668,1043),507=>array(38,-12,516,937),508=>array(0,0,945,898),509=>array(34,-12,849,728),510=>array(41,-29,742,898),511=>array(63,-39,549,728),512=>array(-1,0,668,894),513=>array(38,-12,516,728),514=>array(-1,0,668,888),515=>array(38,-12,516,722),516=>array(79,0,614,894),517=>array(39,-12,517,728),518=>array(79,0,614,888),519=>array(39,-12,517,722),520=>array(-55,0,291,894),521=>array(-53,0,292,728),522=>array(-3,0,286,888),523=>array(-5,0,284,722),524=>array(47,-12,732,894),525=>array(35,-12,521,728),526=>array(47,-12,732,888),527=>array(35,-12,521,722),528=>array(80,0,711,894),529=>array(14,0,359,728),530=>array(80,0,711,888),531=>array(38,0,346,722),532=>array(79,-12,642,894),533=>array(66,-12,487,728),534=>array(79,-12,642,888),535=>array(66,-12,487,722),592=>array(40,-12,518,530),593=>array(36,-12,486,530),594=>array(70,-12,520,530),595=>array(70,-12,520,716),596=>array(9,-12,461,530),597=>array(39,-91,482,530),598=>array(36,-210,611,716),599=>array(36,-12,611,716),600=>array(39,-12,522,530),601=>array(39,-12,517,530),602=>array(41,-12,772,530),603=>array(36,-12,450,530),604=>array(35,-12,449,530),605=>array(35,-12,701,530),606=>array(36,-12,483,530),607=>array(-51,-210,252,518),608=>array(34,-210,616,716),609=>array(34,-210,491,530),610=>array(36,-12,518,530),611=>array(13,-210,488,518),612=>array(13,-12,488,518),613=>array(66,-198,487,518),614=>array(67,0,490,716),615=>array(67,-210,490,716),616=>array(-2,0,244,716),617=>array(67,-12,280,518),618=>array(33,0,323,518),619=>array(7,0,349,716),620=>array(20,0,403,716),621=>array(67,-210,280,716),622=>array(67,-210,599,716),623=>array(64,-12,768,518),624=>array(64,-209,768,518),625=>array(65,-210,769,530),626=>array(-57,-210,490,530),627=>array(68,-210,615,530),628=>array(68,0,490,518),629=>array(35,-12,521,530),630=>array(36,-12,690,530),631=>array(36,-12,638,530),632=>array(36,-210,522,716),633=>array(-13,-12,269,518),634=>array(-13,-12,269,716),635=>array(-13,-210,394,518),636=>array(64,-198,346,530),637=>array(64,-210,346,530),638=>array(64,0,326,530),639=>array(-14,0,248,530),640=>array(64,0,518,518),641=>array(64,0,518,518),642=>array(31,-208,461,530),643=>array(-83,-210,299,716),644=>array(-53,-210,329,716),645=>array(-83,-210,299,716),646=>array(-125,-198,302,716),647=>array(9,-177,261,530),648=>array(17,-210,294,700),649=>array(20,-12,576,518),650=>array(36,-12,522,518),651=>array(66,-12,520,530),652=>array(13,0,488,518),653=>array(5,0,717,518),654=>array(8,0,484,728),655=>array(2,0,498,518),656=>array(20,-208,653,518),657=>array(20,-79,542,518),658=>array(22,-210,494,518),659=>array(26,-210,494,518),660=>array(16,0,428,728),661=>array(36,0,448,728),662=>array(16,-12,428,716),663=>array(39,-210,491,530),664=>array(36,-12,578,530),665=>array(74,0,496,518),666=>array(36,-12,483,530),667=>array(36,-12,582,616),668=>array(68,0,490,518),669=>array(-125,-198,248,716),670=>array(4,-198,434,518),671=>array(67,0,406,518),672=>array(36,-198,611,716),673=>array(16,0,428,728),674=>array(36,0,448,728),675=>array(36,-12,945,716),676=>array(36,-210,930,716),677=>array(36,-79,1008,716),678=>array(17,-12,650,700),679=>array(17,-210,540,728),680=>array(17,-91,700,700),688=>array(50,344,278,716),689=>array(50,344,278,716),690=>array(-10,235,103,716),691=>array(50,344,210,619),692=>array(-9,338,151,613),693=>array(-9,241,213,613),694=>array(50,344,292,613),695=>array(2,344,386,613),696=>array(8,235,274,613),697=>array(46,462,192,716),698=>array(46,462,342,716),699=>array(64,494,166,728),700=>array(56,482,158,716),701=>array(64,482,166,716),702=>array(44,497,178,716),703=>array(44,497,178,716),704=>array(9,428,230,720),705=>array(20,428,242,720),706=>array(57,423,264,675),707=>array(56,423,263,675),708=>array(34,445,286,652),709=>array(34,446,286,653),710=>array(12,591,321,728),711=>array(12,591,321,728),712=>array(66,506,126,716),713=>array(14,624,319,697),714=>array(111,591,291,728),715=>array(42,591,222,728),716=>array(66,-210,126,0),717=>array(14,-176,319,-113),718=>array(42,-210,222,-73),719=>array(111,-210,291,-73),720=>array(83,0,217,518),721=>array(83,382,217,518),722=>array(44,150,178,369),723=>array(44,150,178,369),724=>array(45,185,295,333),725=>array(45,185,295,333),726=>array(45,164,235,354),727=>array(65,254,297,300),728=>array(22,595,311,722),729=>array(121,611,211,711),730=>array(79,576,255,752),731=>array(89,-208,303,12),732=>array(3,605,330,716),733=>array(28,591,373,728),734=>array(20,195,329,389),736=>array(7,235,271,613),737=>array(50,344,103,716),738=>array(17,338,249,619),739=>array(4,344,271,613),740=>array(25,215,314,724),741=>array(22,0,280,716),742=>array(22,0,280,716),743=>array(22,0,280,716),744=>array(22,0,280,716),745=>array(22,0,280,716),768=>array(-368,591,-188,728),769=>array(-343,591,-163,728),770=>array(-432,591,-124,728),771=>array(-441,605,-114,716),772=>array(-430,624,-125,697),773=>array(-534,624,-22,674),774=>array(-422,595,-133,722),775=>array(-323,611,-233,711),776=>array(-414,611,-143,711),777=>array(-384,722,-172,895),778=>array(-366,574,-190,752),779=>array(-426,591,-81,728),780=>array(-432,591,-124,728),781=>array(-308,591,-248,801),782=>array(-383,591,-173,801),783=>array(-451,591,-105,728),784=>array(-422,595,-133,822),785=>array(-422,595,-133,722),786=>array(-333,591,-231,825),787=>array(-325,579,-223,813),788=>array(-333,579,-231,813),789=>array(7,482,109,716),790=>array(-368,-210,-188,-73),791=>array(-343,-210,-163,-73),792=>array(-337,-252,-219,-62),793=>array(-337,-252,-219,-62),794=>array(-392,591,-164,769),795=>array(-100,330,55,606),796=>array(-326,-210,-230,-40),797=>array(-403,-210,-153,-62),798=>array(-403,-210,-153,-62),799=>array(-373,-252,-183,-62),800=>array(-404,-165,-152,-119),801=>array(-397,-208,-158,20),802=>array(-272,-208,-33,20),803=>array(-323,-210,-233,-110),804=>array(-414,-210,-143,-110),805=>array(-366,-210,-190,-32),806=>array(-325,-210,-223,-46),807=>array(-381,-205,-169,11),808=>array(-326,-208,-112,12),809=>array(-308,-210,-248,-40),810=>array(-407,-190,-148,-77),811=>array(-414,-205,-142,-43),812=>array(-432,-210,-124,-73),813=>array(-432,-210,-124,-73),814=>array(-422,-200,-133,-73),815=>array(-422,-200,-133,-73),816=>array(-441,-185,-114,-72),817=>array(-430,-179,-125,-106),818=>array(-534,-125,-22,-75),819=>array(-534,-210,-22,-55),820=>array(-441,203,-114,316),821=>array(-430,223,-125,296),822=>array(-500,223,-56,296),823=>array(-458,84,-98,434),824=>array(-678,-24,-100,716),825=>array(-311,-210,-216,-40),826=>array(-407,-190,-148,-77),827=>array(-359,-210,-196,-47),828=>array(-414,-186,-142,-83),829=>array(-412,558,-144,790),830=>array(-333,595,-222,922),831=>array(-534,624,-22,779),832=>array(-368,722,-188,859),833=>array(-343,722,-163,859),834=>array(-441,604,-114,717),835=>array(-325,613,-223,847),836=>array(-456,585,-100,720),837=>array(-301,-210,-180,-60),864=>array(-1011,604,-101,716),865=>array(-1000,595,-112,722),884=>array(30,464,301,716),885=>array(30,-132,301,120),890=>array(80,-208,258,-42),894=>array(84,-141,190,518),900=>array(89,600,208,736),901=>array(-27,600,304,736),902=>array(-1,0,668,736),903=>array(89,303,189,403),904=>array(-43,0,651,736),905=>array(-43,0,679,736),906=>array(-43,0,224,736),908=>array(-6,-12,732,736),910=>array(-43,0,740,736),911=>array(-6,0,706,736),912=>array(-56,0,275,736),913=>array(-1,0,668,716),914=>array(74,0,615,716),915=>array(81,0,528,716),916=>array(6,0,675,716),917=>array(79,0,614,716),918=>array(18,0,584,716),919=>array(80,0,642,716),920=>array(47,-12,732,728),921=>array(92,0,187,716),922=>array(73,0,665,716),923=>array(5,0,659,716),924=>array(76,0,757,716),925=>array(79,0,642,716),926=>array(53,0,597,716),927=>array(47,-12,732,728),928=>array(80,0,642,716),929=>array(77,0,623,716),931=>array(47,0,554,716),932=>array(22,0,589,716),933=>array(5,0,661,716),934=>array(47,-26,761,737),935=>array(5,0,661,716),936=>array(46,0,759,716),937=>array(52,0,706,728),938=>array(3,0,274,860),939=>array(5,0,661,860),940=>array(35,-12,541,736),941=>array(29,-12,405,736),942=>array(68,-199,490,736),943=>array(67,0,188,736),944=>array(68,-12,483,736),945=>array(35,-12,541,530),946=>array(66,-199,528,728),947=>array(13,-199,488,518),948=>array(35,-12,522,716),949=>array(29,-12,405,530),950=>array(35,-210,433,716),951=>array(68,-199,490,530),952=>array(45,-12,511,728),953=>array(67,0,155,518),954=>array(65,0,499,518),955=>array(13,0,488,716),956=>array(66,-199,487,518),957=>array(13,0,488,518),958=>array(35,-210,420,728),959=>array(35,-12,521,530),960=>array(16,0,662,518),961=>array(66,-199,536,530),962=>array(35,-210,465,530),963=>array(35,-12,597,534),964=>array(16,0,366,518),965=>array(68,-12,483,518),966=>array(35,-199,614,530),967=>array(7,-199,515,518),968=>array(66,-199,662,518),969=>array(35,-12,731,518),970=>array(-25,0,246,711),971=>array(68,-12,483,711),972=>array(35,-12,521,736),973=>array(68,-12,483,736),974=>array(35,-12,731,736),976=>array(66,-12,528,728),977=>array(23,-12,595,728),978=>array(6,0,627,719),979=>array(-42,0,723,736),980=>array(6,0,627,861),981=>array(35,-199,609,716),982=>array(19,-12,746,518),986=>array(51,-210,671,728),988=>array(80,-209,529,716),990=>array(46,-209,524,728),992=>array(25,-12,645,728),994=>array(80,-209,800,716),995=>array(63,-209,767,518),996=>array(58,0,604,720),997=>array(46,-199,492,521),998=>array(80,-187,626,716),999=>array(25,-13,494,589),1000=>array(46,-12,511,728),1001=>array(48,-196,463,530),1002=>array(3,0,621,716),1003=>array(15,0,591,530),1004=>array(62,-12,596,747),1005=>array(35,-12,597,576),1006=>array(19,0,549,716),1007=>array(11,-196,423,606),1008=>array(20,-11,580,528),1009=>array(66,-209,536,530),1010=>array(39,-12,491,530),1011=>array(-45,-209,155,716),1025=>array(79,0,614,859),1026=>array(25,-11,826,716),1027=>array(80,0,543,869),1028=>array(47,-12,680,728),1029=>array(45,-12,615,728),1030=>array(92,0,187,716),1031=>array(1,0,272,859),1032=>array(27,-12,420,716),1033=>array(9,-11,1070,716),1034=>array(80,0,973,716),1035=>array(24,0,809,716),1036=>array(80,0,580,869),1038=>array(5,-9,633,881),1039=>array(80,-199,643,716),1040=>array(-1,0,668,716),1041=>array(80,0,620,716),1042=>array(74,0,615,716),1043=>array(80,0,543,716),1044=>array(1,-167,642,716),1045=>array(79,0,614,716),1046=>array(3,0,919,716),1047=>array(39,-13,562,728),1048=>array(79,0,643,716),1049=>array(79,0,643,881),1050=>array(80,0,580,717),1051=>array(9,-11,625,716),1052=>array(76,0,757,716),1053=>array(80,0,642,716),1054=>array(47,-12,732,728),1055=>array(80,0,643,716),1056=>array(77,0,623,716),1057=>array(51,-12,683,728),1058=>array(22,0,589,716),1059=>array(5,-9,633,716),1060=>array(40,0,720,716),1061=>array(5,0,661,716),1062=>array(78,-199,706,716),1063=>array(58,0,604,716),1064=>array(80,0,840,716),1065=>array(80,-199,904,716),1066=>array(0,0,757,716),1067=>array(80,0,801,716),1068=>array(80,0,620,716),1069=>array(38,-12,671,728),1070=>array(80,-12,960,728),1071=>array(11,0,642,716),1072=>array(38,-12,516,530),1073=>array(45,-12,532,732),1074=>array(66,0,492,518),1075=>array(66,0,364,518),1076=>array(0,-147,553,518),1077=>array(39,-12,517,530),1078=>array(-3,0,671,518),1079=>array(24,-12,423,530),1080=>array(66,0,493,518),1081=>array(66,0,493,716),1082=>array(66,0,446,518),1083=>array(11,-3,505,518),1084=>array(66,0,617,518),1085=>array(66,0,486,518),1086=>array(35,-12,521,530),1087=>array(67,0,476,518),1088=>array(68,-199,518,530),1089=>array(39,-12,491,530),1090=>array(18,0,439,518),1091=>array(16,-210,492,518),1092=>array(37,-199,788,716),1093=>array(7,0,493,518),1094=>array(66,-199,532,518),1095=>array(46,0,467,518),1096=>array(69,0,734,518),1097=>array(69,-199,792,518),1098=>array(0,0,589,518),1099=>array(66,0,646,518),1100=>array(66,0,492,518),1101=>array(24,-11,474,530),1102=>array(66,-11,709,530),1103=>array(16,0,475,518),1105=>array(39,-12,517,720),1106=>array(2,-209,490,716),1107=>array(66,0,364,720),1108=>array(37,-11,487,530),1109=>array(31,-12,461,530),1110=>array(67,0,155,716),1111=>array(4,0,275,720),1112=>array(-45,-209,155,716),1113=>array(11,-3,842,518),1114=>array(66,0,780,518),1115=>array(2,0,490,716),1116=>array(66,0,446,720),1118=>array(16,-210,492,716),1119=>array(67,-199,476,518),1120=>array(47,-12,929,730),1121=>array(35,-12,731,518),1122=>array(0,0,622,716),1123=>array(-2,0,491,716),1124=>array(92,-12,912,728),1125=>array(68,-11,671,530),1126=>array(-2,0,668,716),1127=>array(0,0,595,518),1128=>array(92,0,952,716),1129=>array(68,0,817,518),1130=>array(0,0,654,716),1131=>array(1,0,599,518),1132=>array(92,0,932,716),1133=>array(68,0,820,518),1134=>array(37,-209,562,898),1135=>array(28,-209,423,728),1136=>array(46,0,759,716),1137=>array(66,-199,662,518),1138=>array(47,-12,732,728),1139=>array(35,-11,521,530),1140=>array(6,0,674,716),1141=>array(13,0,497,518),1142=>array(6,0,674,898),1143=>array(13,0,497,728),1144=>array(47,-210,1268,728),1145=>array(35,-210,1049,530),1146=>array(47,-36,732,750),1147=>array(35,-24,521,542),1148=>array(47,-12,929,926),1149=>array(35,-12,731,758),1150=>array(47,-12,929,880),1151=>array(35,-12,731,711),1152=>array(51,-97,672,728),1153=>array(39,-143,482,530),1154=>array(55,0,631,716),1155=>array(2,621,332,758),1156=>array(4,613,380,774),1157=>array(2,621,332,758),1158=>array(2,621,332,758),1168=>array(80,0,412,883),1169=>array(66,0,321,666),1170=>array(0,0,543,716),1171=>array(-2,0,364,518),1172=>array(80,-185,622,716),1173=>array(67,-209,490,716),1174=>array(3,-199,919,716),1175=>array(-3,-199,671,518),1176=>array(39,-205,562,728),1177=>array(24,-205,423,530),1178=>array(80,-199,580,717),1179=>array(66,-199,446,518),1180=>array(80,0,580,717),1181=>array(66,0,446,518),1182=>array(0,0,580,717),1183=>array(-2,0,446,518),1184=>array(24,0,762,717),1185=>array(0,0,544,518),1186=>array(80,-199,707,716),1187=>array(66,-199,543,518),1188=>array(80,0,880,716),1189=>array(66,0,653,518),1190=>array(80,-174,704,716),1191=>array(67,-174,537,518),1192=>array(47,-154,732,728),1193=>array(35,-141,550,530),1194=>array(51,-208,684,728),1195=>array(39,-208,491,530),1196=>array(21,-199,589,716),1197=>array(18,-199,439,518),1198=>array(5,0,661,716),1199=>array(13,-199,488,518),1200=>array(5,0,661,716),1201=>array(13,-199,488,518),1202=>array(4,-199,660,716),1203=>array(7,-199,493,518),1204=>array(16,-199,882,716),1205=>array(18,-199,631,518),1206=>array(58,-199,670,716),1207=>array(46,-199,524,518),1208=>array(58,0,604,716),1209=>array(46,0,467,518),1210=>array(81,0,627,716),1211=>array(67,0,490,716),1212=>array(7,-12,784,728),1213=>array(7,-11,624,530),1214=>array(7,-208,784,728),1215=>array(7,-208,624,530),1216=>array(92,0,187,716),1217=>array(3,0,919,881),1218=>array(-3,0,671,716),1219=>array(80,-174,580,717),1220=>array(66,-174,445,519),1223=>array(80,-174,703,716),1224=>array(66,-174,547,518),1227=>array(58,-199,604,716),1228=>array(46,-199,467,518),1232=>array(-2,0,668,881),1233=>array(38,-12,516,716),1234=>array(-1,0,668,861),1235=>array(38,-12,516,721),1236=>array(0,0,945,716),1237=>array(34,-12,849,530),1238=>array(79,0,613,881),1239=>array(39,-12,517,716),1240=>array(45,-12,676,728),1241=>array(39,-11,517,530),1242=>array(45,-12,676,859),1243=>array(39,-11,517,719),1244=>array(3,0,919,859),1245=>array(-3,0,671,721),1246=>array(39,-13,562,861),1247=>array(24,-12,423,721),1248=>array(39,-13,562,716),1249=>array(24,-206,457,518),1250=>array(79,0,643,833),1251=>array(66,0,493,697),1252=>array(79,0,643,861),1253=>array(66,0,493,721),1254=>array(47,-12,732,861),1255=>array(35,-12,521,721),1256=>array(47,-12,732,728),1257=>array(35,-11,521,530),1258=>array(47,-12,732,861),1259=>array(35,-11,521,721),1262=>array(5,-9,633,833),1263=>array(16,-210,492,697),1264=>array(5,-9,633,861),1265=>array(16,-210,492,721),1266=>array(5,-9,633,898),1267=>array(16,-210,492,728),1268=>array(58,0,604,861),1269=>array(46,0,467,721),1272=>array(80,0,801,861),1273=>array(66,0,646,721),1329=>array(25,-9,618,678),1330=>array(90,-1,481,685),1331=>array(31,-1,563,684),1332=>array(34,-1,564,684),1333=>array(30,-11,468,677),1334=>array(56,-22,510,692),1335=>array(27,-185,407,671),1336=>array(89,-96,476,684),1337=>array(98,0,722,683),1338=>array(46,-11,613,678),1339=>array(24,-2,503,676),1340=>array(28,-185,357,672),1341=>array(24,-12,539,676),1342=>array(38,-11,675,676),1343=>array(32,-2,462,676),1344=>array(28,-61,410,690),1345=>array(31,-11,515,689),1346=>array(27,-96,559,683),1347=>array(63,0,487,708),1348=>array(26,-11,620,677),1349=>array(101,-10,631,684),1350=>array(36,-11,594,685),1351=>array(32,-11,602,684),1352=>array(90,-1,460,684),1353=>array(69,-19,489,689),1354=>array(78,-1,614,683),1355=>array(55,-23,508,690),1356=>array(86,-2,619,683),1357=>array(30,-12,462,675),1358=>array(37,-96,665,676),1359=>array(101,-11,501,683),1360=>array(87,-7,452,677),1361=>array(104,-15,498,680),1362=>array(23,-7,511,671),1363=>array(106,-6,608,672),1364=>array(35,-8,675,678),1365=>array(100,-16,547,679),1366=>array(76,-15,713,680),1369=>array(87,485,211,705),1370=>array(83,485,207,705),1371=>array(34,485,114,702),1372=>array(20,425,282,702),1373=>array(87,518,210,699),1374=>array(14,476,257,702),1375=>array(38,484,397,702),1377=>array(39,-8,552,315),1378=>array(52,-210,400,319),1379=>array(52,-210,402,319),1380=>array(49,-210,433,319),1381=>array(49,-8,391,613),1382=>array(48,-210,409,319),1383=>array(50,-122,393,613),1384=>array(52,-210,395,319),1385=>array(49,-210,437,319),1386=>array(40,-8,430,613),1387=>array(44,-210,394,613),1388=>array(37,-210,309,315),1389=>array(38,-210,482,613),1390=>array(45,-8,413,580),1391=>array(53,-210,391,613),1392=>array(45,0,398,613),1393=>array(51,-8,397,561),1394=>array(50,-210,401,319),1395=>array(8,-8,386,618),1396=>array(44,-8,404,618),1397=>array(6,-210,197,315),1398=>array(90,-9,394,618),1399=>array(37,-8,359,319),1400=>array(50,0,397,319),1401=>array(79,-210,318,376),1402=>array(39,-210,551,315),1403=>array(55,-210,411,319),1404=>array(29,0,420,319),1405=>array(49,-9,393,315),1406=>array(43,-210,393,613),1407=>array(42,-8,550,319),1408=>array(52,-210,399,319),1409=>array(49,-210,393,319),1410=>array(32,0,308,315),1411=>array(39,-210,550,613),1412=>array(47,0,337,618),1413=>array(52,-8,336,319),1414=>array(78,-210,541,610),1415=>array(49,-8,502,613),1417=>array(80,-21,197,335),1425=>array(97,-194,263,-63),1426=>array(37,568,323,664),1427=>array(112,569,249,789),1428=>array(147,568,213,728),1429=>array(106,568,262,728),1430=>array(104,-195,256,-43),1431=>array(133,568,227,662),1432=>array(82,568,278,684),1433=>array(0,568,152,720),1434=>array(229,-205,340,-43),1435=>array(104,-195,256,-43),1436=>array(104,568,256,720),1437=>array(208,568,360,720),1438=>array(108,568,360,750),1439=>array(12,568,348,716),1440=>array(200,568,348,716),1441=>array(58,568,303,716),1443=>array(92,-191,221,-62),1444=>array(117,-205,228,-43),1445=>array(104,-195,256,-43),1446=>array(54,-215,306,-33),1447=>array(117,-209,242,-35),1448=>array(104,568,256,720),1449=>array(12,568,160,716),1450=>array(97,-194,263,-63),1451=>array(117,568,228,730),1452=>array(92,580,221,709),1453=>array(208,-195,360,-43),1454=>array(0,568,196,684),1455=>array(125,568,235,678),1456=>array(147,-210,213,-50),1457=>array(53,-210,307,-50),1458=>array(69,-210,285,-50),1459=>array(69,-210,285,-50),1460=>array(147,-116,213,-50),1461=>array(100,-116,260,-50),1462=>array(100,-210,260,-50),1463=>array(119,-104,241,-62),1464=>array(119,-144,241,-62),1465=>array(147,568,213,634),1467=>array(53,-210,307,-50),1468=>array(147,231,213,297),1469=>array(159,-184,201,-62),1470=>array(24,430,342,518),1471=>array(119,580,241,622),1472=>array(72,-80,154,598),1473=>array(147,568,213,634),1474=>array(147,568,213,634),1475=>array(69,0,169,518),1476=>array(147,568,213,634),1488=>array(60,0,517,518),1489=>array(38,0,533,530),1490=>array(20,0,386,530),1491=>array(24,0,482,518),1492=>array(72,0,526,530),1493=>array(16,0,248,530),1494=>array(28,0,306,543),1495=>array(72,0,526,530),1496=>array(68,-12,532,530),1497=>array(16,258,248,530),1498=>array(20,-199,439,530),1499=>array(38,-12,469,530),1500=>array(33,-12,436,716),1501=>array(72,0,526,518),1502=>array(30,0,526,530),1503=>array(16,-199,248,530),1504=>array(38,0,270,530),1505=>array(25,-12,546,530),1506=>array(32,-82,503,518),1507=>array(45,-199,499,530),1508=>array(37,-12,511,530),1509=>array(37,-199,468,518),1510=>array(45,0,477,518),1511=>array(72,-199,535,518),1512=>array(20,0,439,530),1513=>array(72,-12,674,518),1514=>array(21,-13,565,530),1520=>array(16,0,522,530),1521=>array(16,0,522,530),1522=>array(16,258,522,530),1523=>array(45,398,221,641),1524=>array(45,398,417,641),1548=>array(90,-3,196,238),1563=>array(90,0,196,479),1567=>array(47,0,509,728),1569=>array(54,0,469,422),1570=>array(-23,0,270,862),1571=>array(46,0,188,933),1572=>array(-108,-210,408,761),1573=>array(46,-174,188,716),1574=>array(32,-121,679,453),1575=>array(79,0,164,716),1576=>array(62,-190,709,265),1577=>array(62,-6,452,633),1578=>array(62,-50,709,437),1579=>array(62,-50,709,539),1580=>array(52,-271,564,453),1581=>array(52,-271,564,453),1582=>array(52,-271,564,621),1583=>array(38,0,368,437),1584=>array(38,0,368,629),1585=>array(-74,-210,357,290),1586=>array(-74,-210,357,470),1587=>array(39,-228,1115,346),1588=>array(39,-228,1115,604),1589=>array(39,-228,1230,436),1590=>array(39,-228,1230,532),1591=>array(59,0,782,686),1592=>array(59,0,782,686),1593=>array(53,-271,565,492),1594=>array(53,-271,565,725),1600=>array(-1,0,280,95),1601=>array(62,0,895,773),1602=>array(34,-214,738,678),1603=>array(62,0,689,716),1604=>array(34,-121,594,716),1605=>array(58,-265,527,359),1606=>array(62,-121,630,456),1607=>array(62,-6,452,431),1608=>array(-108,-210,408,476),1609=>array(32,-121,679,453),1610=>array(32,-238,679,453),1611=>array(10,716,290,944),1612=>array(4,716,292,990),1613=>array(8,-255,288,-78),1614=>array(10,716,290,859),1615=>array(4,716,292,990),1616=>array(8,-170,288,-78),1617=>array(7,716,299,936),1618=>array(3,716,201,965),1632=>array(130,59,348,260),1633=>array(99,0,282,576),1634=>array(35,0,451,576),1635=>array(39,0,473,576),1636=>array(63,-6,443,586),1637=>array(45,-6,435,576),1638=>array(29,0,450,576),1639=>array(21,-6,459,576),1640=>array(21,0,459,582),1641=>array(42,0,466,582),1642=>array(37,-3,516,579),1643=>array(-19,-151,205,100),1644=>array(90,-3,196,238),1645=>array(20,163,418,576),1648=>array(127,716,173,984),1649=>array(-15,0,256,927),1650=>array(-47,0,196,936),1651=>array(-55,-257,188,716),1652=>array(46,716,188,933),1653=>array(79,0,384,777),1654=>array(-108,-210,551,641),1655=>array(-108,-210,551,754),1656=>array(32,-121,775,621),1657=>array(62,-50,709,569),1658=>array(62,-50,709,568),1659=>array(62,-271,709,265),1660=>array(62,-161,709,437),1661=>array(62,-50,709,539),1662=>array(62,-271,709,265),1663=>array(62,-50,709,569),1664=>array(62,-271,709,265),1665=>array(52,-271,564,621),1666=>array(52,-271,564,724),1667=>array(52,-271,564,453),1668=>array(52,-271,564,453),1669=>array(52,-271,564,695),1670=>array(52,-271,564,453),1671=>array(52,-271,564,453),1672=>array(38,0,368,746),1673=>array(38,-95,368,437),1674=>array(38,-155,368,437),1675=>array(38,-155,368,746),1676=>array(38,0,368,614),1677=>array(38,-140,368,437),1678=>array(38,0,368,716),1679=>array(38,0,368,716),1680=>array(38,0,368,746),1681=>array(-74,-210,360,587),1682=>array(-74,-210,357,526),1683=>array(-74,-258,357,290),1684=>array(-74,-267,378,290),1685=>array(-74,-269,442,290),1686=>array(-74,-267,378,290),1687=>array(-74,-210,360,455),1688=>array(-74,-210,360,557),1689=>array(-74,-210,357,587),1690=>array(39,-228,1115,517),1691=>array(39,-254,1115,346),1692=>array(39,-254,1115,603),1693=>array(39,-228,1230,436),1694=>array(39,-228,1230,619),1695=>array(59,0,782,686),1696=>array(53,-271,565,749),1697=>array(62,0,895,556),1698=>array(62,-134,895,556),1699=>array(62,-134,895,773),1700=>array(62,0,895,860),1701=>array(62,-221,895,556),1702=>array(62,0,895,891),1703=>array(34,-214,738,693),1704=>array(34,-214,738,780),1705=>array(62,0,827,717),1706=>array(62,0,997,717),1707=>array(62,0,827,717),1708=>array(62,0,689,759),1709=>array(62,0,689,846),1710=>array(62,-223,689,716),1711=>array(62,0,827,793),1712=>array(62,0,827,793),1713=>array(62,0,827,863),1714=>array(62,-169,827,793),1715=>array(62,-271,827,793),1716=>array(62,0,827,942),1717=>array(34,-121,618,952),1718=>array(34,-121,594,914),1719=>array(34,-121,647,1001),1722=>array(62,-121,630,272),1723=>array(62,-121,630,570),1724=>array(62,-232,630,455),1725=>array(62,-121,630,540),1726=>array(29,-15,644,593),1728=>array(62,-6,452,705),1729=>array(2,-85,510,159),1730=>array(2,-85,510,431),1731=>array(2,-85,510,347),1732=>array(-108,-210,408,476),1733=>array(-108,-210,408,476),1734=>array(-108,-210,408,712),1735=>array(-108,-210,408,758),1736=>array(-108,-210,408,789),1737=>array(-108,-210,408,713),1738=>array(-108,-210,408,655),1739=>array(-108,-210,408,757),1740=>array(32,-121,679,453),1741=>array(-4,-121,789,453),1742=>array(32,-121,679,576),1744=>array(32,-271,679,493),1745=>array(32,-263,679,493),1746=>array(71,-221,684,297),1747=>array(71,-221,684,349),1748=>array(-1,190,280,285),1749=>array(62,-6,452,431),1750=>array(27,352,699,802),1751=>array(27,352,531,802),1752=>array(35,573,287,788),1753=>array(5,573,284,1002),1754=>array(34,354,341,789),1755=>array(25,635,347,869),1756=>array(23,436,669,781),1757=>array(34,27,654,647),1758=>array(2,-87,850,761),1759=>array(78,687,209,808),1760=>array(78,687,209,808),1761=>array(-1,576,340,848),1762=>array(34,414,316,789),1763=>array(23,-267,669,78),1764=>array(-14,714,162,756),1765=>array(-42,395,268,807),1766=>array(36,443,404,754),1767=>array(36,443,404,754),1768=>array(37,573,378,919),1769=>array(34,0,480,736),1770=>array(35,-161,183,-13),1771=>array(35,641,183,789),1772=>array(35,641,183,789),1773=>array(34,-270,316,105),1776=>array(130,59,348,260),1777=>array(99,0,282,576),1778=>array(35,0,451,576),1779=>array(39,0,473,576),1780=>array(35,0,471,661),1781=>array(30,-6,450,576),1782=>array(94,0,403,576),1783=>array(21,-6,459,576),1784=>array(21,0,459,582),1785=>array(42,0,466,582),2305=>array(-375,608,-50,889),2306=>array(-239,608,-109,843),2307=>array(78,69,216,513),2309=>array(42,-17,706,608),2310=>array(42,-18,923,608),2311=>array(-1,-114,545,608),2312=>array(-1,-114,545,891),2313=>array(-1,11,603,608),2314=>array(-1,11,726,608),2315=>array(-1,-44,933,608),2316=>array(-1,-44,690,608),2317=>array(-1,-187,624,864),2318=>array(-1,-187,624,886),2319=>array(-1,-187,624,608),2320=>array(-1,-187,624,889),2321=>array(42,-18,923,864),2322=>array(42,-18,923,886),2323=>array(42,-14,922,889),2324=>array(42,-17,922,892),2325=>array(-1,-17,680,608),2326=>array(-1,-15,745,608),2327=>array(-1,-15,605,608),2328=>array(-1,-17,652,608),2329=>array(-1,0,636,608),2330=>array(-1,-15,700,608),2331=>array(-1,-80,726,608),2332=>array(-1,-17,700,608),2333=>array(-1,-17,725,608),2334=>array(-1,-15,710,608),2335=>array(-1,0,515,608),2336=>array(-1,0,545,608),2337=>array(-1,0,595,608),2338=>array(-1,0,535,608),2339=>array(-1,-17,706,608),2340=>array(-1,-17,598,608),2341=>array(42,-14,650,608),2342=>array(-1,-14,545,608),2343=>array(42,-18,653,616),2344=>array(-1,-15,598,608),2345=>array(-1,-33,598,608),2346=>array(-1,-17,578,608),2347=>array(-2,-15,712,608),2348=>array(-1,-17,604,608),2349=>array(39,-17,702,608),2350=>array(-1,-17,646,608),2351=>array(-1,-17,613,608),2352=>array(-1,-14,499,608),2353=>array(-1,-19,499,608),2354=>array(-1,-14,692,608),2355=>array(-1,0,742,608),2356=>array(-1,-122,742,608),2357=>array(-1,-15,604,608),2358=>array(38,-18,696,616),2359=>array(-1,-15,621,608),2360=>array(-1,-17,659,608),2361=>array(-1,-238,559,608),2364=>array(-404,-197,-274,-67),2365=>array(28,50,386,608),2366=>array(-1,-17,332,608),2367=>array(-1,-15,776,895),2368=>array(-254,-15,332,895),2369=>array(-463,-256,-31,7),2370=>array(-345,-262,84,7),2371=>array(-330,-249,-50,13),2372=>array(-321,-271,-24,46),2373=>array(-338,608,-49,864),2374=>array(-546,598,-135,886),2375=>array(-534,598,-135,889),2376=>array(-475,599,-135,892),2377=>array(-19,-17,332,864),2378=>array(-228,-17,332,886),2379=>array(-260,-17,332,889),2380=>array(-152,-17,332,892),2381=>array(-251,-271,32,0),2384=>array(47,97,830,792),2385=>array(-212,608,-135,788),2386=>array(-612,-99,0,-29),2387=>array(-349,645,-184,832),2388=>array(-261,645,-96,832),2392=>array(-1,-17,680,608),2393=>array(-1,-104,745,608),2394=>array(-1,-54,605,608),2395=>array(-1,-66,700,608),2396=>array(-1,-67,595,608),2397=>array(-1,-77,535,608),2398=>array(-2,-15,712,608),2399=>array(-1,-38,613,608),2400=>array(-1,-71,933,608),2401=>array(-1,-71,690,608),2402=>array(-418,-271,26,13),2403=>array(-418,-271,60,13),2404=>array(128,-17,203,617),2405=>array(128,-17,385,616),2406=>array(147,115,491,468),2407=>array(179,-134,455,689),2408=>array(99,-123,542,644),2409=>array(125,-106,492,677),2410=>array(12,112,617,685),2411=>array(82,-149,576,658),2412=>array(118,-130,545,653),2413=>array(73,23,570,569),2414=>array(84,29,570,667),2415=>array(119,-92,575,648),2416=>array(64,292,298,525),2433=>array(-296,703,10,875),2434=>array(66,-56,396,605),2435=>array(92,0,338,606),2437=>array(0,0,794,607),2438=>array(0,0,1039,690),2439=>array(0,-94,590,875),2440=>array(0,-22,611,875),2441=>array(0,1,656,875),2442=>array(0,0,765,875),2443=>array(54,0,766,688),2444=>array(33,1,596,651),2447=>array(38,0,593,605),2448=>array(38,0,701,876),2451=>array(57,1,629,609),2452=>array(57,1,728,876),2453=>array(0,0,787,607),2454=>array(54,0,663,625),2455=>array(44,0,614,607),2456=>array(0,0,658,607),2457=>array(51,0,621,607),2458=>array(0,0,563,607),2459=>array(0,-93,593,607),2460=>array(0,-42,737,607),2461=>array(0,0,761,607),2462=>array(38,0,829,606),2463=>array(0,0,575,875),2464=>array(0,0,634,876),2465=>array(0,1,656,607),2466=>array(0,0,575,607),2467=>array(55,0,606,607),2468=>array(0,1,688,607),2469=>array(50,0,653,607),2470=>array(0,-24,617,607),2471=>array(45,0,604,624),2472=>array(0,0,603,607),2474=>array(44,0,643,607),2475=>array(0,0,789,607),2476=>array(0,0,601,607),2477=>array(0,2,685,607),2478=>array(0,0,629,607),2479=>array(0,0,609,607),2480=>array(0,-18,601,607),2482=>array(0,-0,648,607),2486=>array(0,0,606,626),2487=>array(0,0,604,607),2488=>array(0,0,645,607),2489=>array(0,-94,590,607),2492=>array(-366,-164,-233,-32),2494=>array(0,0,253,690),2495=>array(0,0,531,850),2496=>array(-334,0,253,875),2497=>array(-357,-269,39,5),2498=>array(-359,-269,21,-73),2499=>array(-314,-270,-60,-77),2500=>array(-380,-271,98,24),2503=>array(0,1,317,607),2504=>array(0,1,317,875),2507=>array(0,0,940,690),2508=>array(0,0,940,875),2509=>array(-187,-267,26,-73),2519=>array(-250,0,253,875),2524=>array(0,-164,656,607),2525=>array(0,-164,561,607),2527=>array(0,-42,604,607),2528=>array(54,-93,766,688),2529=>array(33,-271,596,651),2530=>array(-381,-271,-4,23),2531=>array(-401,-271,333,151),2534=>array(62,55,548,550),2535=>array(46,0,513,624),2536=>array(58,-51,583,636),2537=>array(53,2,671,606),2538=>array(67,0,547,653),2539=>array(62,1,632,638),2540=>array(52,1,616,622),2541=>array(69,0,498,624),2542=>array(55,0,641,622),2543=>array(53,1,559,622),2544=>array(0,0,601,607),2545=>array(0,-51,601,607),2546=>array(36,0,581,606),2547=>array(-87,0,575,875),2548=>array(26,0,571,606),2549=>array(44,1,669,606),2550=>array(54,0,624,606),2551=>array(103,0,165,607),2552=>array(52,0,564,605),2553=>array(48,154,376,451),2554=>array(74,349,492,788),2562=>array(-156,578,-79,731),2565=>array(0,0,696,578),2566=>array(0,0,940,578),2567=>array(0,0,808,822),2568=>array(0,0,808,822),2569=>array(0,-267,683,839),2570=>array(0,-267,683,839),2575=>array(0,2,562,793),2576=>array(0,0,696,839),2579=>array(0,-2,683,836),2580=>array(0,0,696,839),2581=>array(0,0,607,578),2582=>array(0,0,572,578),2583=>array(0,0,646,578),2584=>array(0,0,692,578),2585=>array(0,0,570,578),2586=>array(0,1,597,578),2587=>array(0,0,607,578),2588=>array(0,0,596,578),2589=>array(0,0,546,578),2590=>array(0,0,563,578),2591=>array(0,0,548,578),2592=>array(0,0,586,578),2593=>array(0,0,601,578),2594=>array(0,0,645,578),2595=>array(0,0,645,578),2596=>array(0,0,596,578),2597=>array(0,0,569,578),2598=>array(0,0,645,578),2599=>array(0,0,569,578),2600=>array(0,0,587,578),2602=>array(0,0,569,578),2603=>array(0,0,556,578),2604=>array(0,0,564,578),2605=>array(0,0,554,578),2606=>array(0,0,563,578),2607=>array(0,0,657,578),2608=>array(0,4,545,578),2610=>array(0,-0,682,578),2611=>array(0,-96,682,578),2613=>array(0,0,606,578),2614=>array(0,0,563,578),2616=>array(0,0,563,578),2617=>array(0,0,554,578),2620=>array(-208,-154,-131,-77),2622=>array(0,216,251,578),2623=>array(0,0,397,822),2624=>array(-151,0,251,822),2625=>array(-388,-267,-50,0),2626=>array(-388,-267,-50,0),2631=>array(-473,578,-90,793),2632=>array(-471,578,-90,839),2635=>array(-411,572,-90,803),2636=>array(-379,578,-27,839),2637=>array(-235,-238,51,0),2649=>array(0,0,572,578),2650=>array(0,0,695,578),2651=>array(0,0,596,578),2652=>array(0,0,596,578),2654=>array(0,0,585,578),2662=>array(54,42,537,524),2663=>array(86,0,514,575),2664=>array(53,0,528,577),2665=>array(52,1,527,577),2666=>array(69,0,522,577),2667=>array(57,0,501,579),2668=>array(74,0,530,758),2669=>array(36,0,519,578),2670=>array(64,0,526,578),2671=>array(65,0,525,769),2672=>array(-103,664,103,841),2673=>array(-193,660,111,839),2674=>array(0,2,562,578),2675=>array(0,-2,683,839),2676=>array(28,-110,857,648),2689=>array(-429,608,-23,885),2690=>array(-179,608,-67,822),2691=>array(88,98,212,510),2693=>array(36,0,803,608),2694=>array(36,0,1062,610),2695=>array(42,-1,553,882),2696=>array(42,-1,606,882),2697=>array(60,0,545,742),2698=>array(60,-4,776,882),2699=>array(20,0,780,608),2701=>array(36,0,803,881),2703=>array(36,0,803,881),2704=>array(36,0,803,882),2705=>array(36,0,1062,881),2707=>array(36,0,1062,881),2708=>array(36,0,1062,882),2709=>array(35,0,411,610),2710=>array(5,0,792,608),2711=>array(25,0,625,608),2712=>array(52,-1,579,608),2713=>array(25,0,462,610),2714=>array(36,0,620,608),2715=>array(55,0,643,608),2716=>array(50,0,791,608),2717=>array(34,0,601,608),2718=>array(25,0,669,608),2719=>array(55,0,460,610),2720=>array(59,0,409,610),2721=>array(25,0,404,610),2722=>array(55,-1,447,608),2723=>array(98,-271,714,608),2724=>array(60,0,554,608),2725=>array(45,0,572,608),2726=>array(44,-1,480,608),2727=>array(27,0,561,727),2728=>array(43,0,602,608),2730=>array(5,0,592,608),2731=>array(50,-270,442,608),2732=>array(50,0,684,608),2733=>array(50,0,776,608),2734=>array(27,0,614,608),2735=>array(40,0,514,608),2736=>array(45,-2,411,609),2738=>array(55,0,633,608),2739=>array(52,0,676,609),2741=>array(50,0,558,608),2742=>array(52,0,633,610),2743=>array(75,0,528,608),2744=>array(43,0,684,608),2745=>array(69,0,573,610),2748=>array(-323,-182,-211,-70),2749=>array(52,0,436,608),2750=>array(98,0,291,610),2751=>array(98,0,660,883),2752=>array(-180,0,291,884),2753=>array(-412,-271,28,5),2754=>array(-323,-271,151,5),2755=>array(-271,-271,41,5),2756=>array(-275,-271,65,20),2757=>array(-452,608,-25,881),2759=>array(-509,608,-80,881),2760=>array(-544,608,-96,882),2761=>array(-179,0,291,881),2763=>array(-236,0,291,881),2764=>array(-271,0,291,882),2765=>array(-244,-249,186,5),2768=>array(46,0,815,881),2784=>array(20,-1,875,608),2790=>array(91,61,532,545),2791=>array(110,0,534,608),2792=>array(97,0,524,608),2793=>array(29,0,527,608),2794=>array(18,0,595,609),2795=>array(18,0,598,608),2796=>array(104,0,541,610),2797=>array(25,0,571,608),2798=>array(118,0,532,607),2799=>array(35,1,608,605),2817=>array(-374,776,37,979),2818=>array(34,379,271,717),2819=>array(59,0,332,717),2821=>array(42,0,508,717),2822=>array(42,0,726,717),2823=>array(39,-16,643,717),2824=>array(39,-16,643,717),2825=>array(39,-16,618,717),2826=>array(39,-16,625,717),2827=>array(39,-16,607,717),2828=>array(39,0,516,717),2831=>array(49,0,479,717),2832=>array(49,0,918,913),2835=>array(59,0,561,732),2836=>array(59,0,953,913),2837=>array(39,0,564,717),2838=>array(39,0,539,717),2839=>array(39,0,539,717),2840=>array(39,0,524,717),2841=>array(39,0,688,717),2842=>array(39,0,540,717),2843=>array(39,0,540,717),2844=>array(39,0,554,717),2845=>array(39,-15,540,732),2846=>array(54,0,532,717),2847=>array(39,0,539,717),2848=>array(44,0,534,717),2849=>array(39,0,540,717),2850=>array(39,-12,540,717),2851=>array(44,0,526,717),2852=>array(39,0,540,717),2853=>array(39,0,505,717),2854=>array(39,0,540,717),2855=>array(44,0,521,732),2856=>array(39,0,540,717),2858=>array(39,0,524,717),2859=>array(39,0,703,717),2860=>array(39,0,540,717),2861=>array(39,-16,628,717),2862=>array(39,-0,524,717),2863=>array(56,0,547,717),2864=>array(39,-16,604,717),2866=>array(39,-16,638,717),2867=>array(39,0,554,717),2870=>array(39,0,539,717),2871=>array(39,0,524,717),2872=>array(39,0,524,717),2873=>array(39,-30,540,717),2876=>array(-301,-176,-206,-84),2877=>array(71,0,273,717),2878=>array(82,0,136,717),2879=>array(-522,762,-17,918),2880=>array(-25,1,213,920),2881=>array(-443,-264,123,-51),2882=>array(-359,-271,171,-17),2883=>array(-325,-271,102,-18),2887=>array(59,0,436,717),2888=>array(59,0,1005,913),2891=>array(59,0,945,717),2892=>array(59,0,1006,913),2893=>array(-188,-267,161,-45),2902=>array(-515,717,-20,913),2903=>array(-297,0,198,913),2908=>array(39,-176,540,717),2909=>array(39,-176,540,717),2911=>array(23,-53,623,718),2912=>array(39,-16,607,717),2913=>array(39,-30,540,717),2918=>array(44,0,534,717),2919=>array(49,-12,441,717),2920=>array(39,-12,432,717),2921=>array(34,0,541,717),2922=>array(20,0,487,732),2923=>array(0,-21,605,717),2924=>array(34,-15,476,718),2925=>array(29,-9,495,729),2926=>array(82,0,495,717),2927=>array(54,-15,456,719),2928=>array(50,209,544,557),2946=>array(-388,499,-211,675),2947=>array(37,-11,698,702),2949=>array(22,-271,932,429),2950=>array(22,-271,1071,429),2951=>array(19,-271,915,702),2952=>array(70,0,621,417),2953=>array(55,0,988,429),2954=>array(55,0,1221,429),2958=>array(52,-11,721,417),2959=>array(52,-110,726,417),2960=>array(27,-271,813,429),2962=>array(49,-271,711,429),2963=>array(49,-271,711,429),2964=>array(49,-271,1631,429),2965=>array(36,-11,610,417),2969=>array(70,0,759,417),2970=>array(36,-11,565,417),2972=>array(28,-271,815,429),2974=>array(63,-271,928,417),2975=>array(70,0,778,417),2979=>array(52,-11,1290,429),2980=>array(-4,-271,600,417),2984=>array(-0,-271,577,417),2985=>array(52,-11,1007,429),2986=>array(70,0,623,417),2990=>array(70,0,667,429),2991=>array(83,-11,719,417),2992=>array(70,-113,540,417),2993=>array(2,-271,650,429),2994=>array(52,-11,768,510),2995=>array(52,-11,866,429),2996=>array(62,-271,665,429),2997=>array(52,-11,803,429),2999=>array(52,-271,1067,429),3000=>array(52,-11,1046,510),3001=>array(0,-271,1207,429),3006=>array(70,0,542,417),3007=>array(-245,1,112,702),3008=>array(-282,417,94,702),3009=>array(-117,145,458,417),3010=>array(-117,-52,754,636),3014=>array(61,-12,685,701),3015=>array(56,-11,659,702),3016=>array(52,-11,901,429),3018=>array(61,-12,1661,701),3019=>array(56,-11,1661,702),3020=>array(61,-12,1989,701),3021=>array(-364,523,-237,650),3031=>array(52,-11,866,429),3047=>array(36,-11,610,417),3048=>array(55,0,988,429),3049=>array(70,0,727,417),3050=>array(36,-11,682,417),3051=>array(70,-208,913,645),3052=>array(36,-11,857,417),3053=>array(52,-11,721,417),3054=>array(22,-271,932,429),3055=>array(36,-11,776,417),3056=>array(83,-11,662,702),3057=>array(71,0,714,429),3058=>array(-4,-271,745,417),3073=>array(57,-6,335,481),3074=>array(57,-13,544,471),3075=>array(65,-12,280,474),3077=>array(54,-11,667,474),3078=>array(54,-11,732,473),3079=>array(36,-229,513,472),3080=>array(24,-11,1108,664),3081=>array(57,-11,634,682),3082=>array(57,-11,996,682),3083=>array(57,-11,1239,474),3084=>array(44,-11,856,586),3086=>array(44,-11,556,702),3087=>array(44,-11,556,839),3088=>array(54,-11,656,475),3090=>array(57,-11,610,471),3091=>array(57,-11,610,642),3092=>array(6,-11,856,688),3093=>array(36,-11,474,664),3094=>array(51,-137,620,476),3095=>array(39,-14,510,664),3096=>array(35,-137,874,664),3097=>array(57,-11,610,472),3098=>array(24,-11,630,664),3099=>array(24,-137,630,664),3100=>array(57,-11,610,474),3101=>array(57,-136,1146,664),3102=>array(36,-229,715,472),3103=>array(57,-11,829,550),3104=>array(57,-11,540,664),3105=>array(57,-11,659,664),3106=>array(57,-137,659,664),3107=>array(63,-11,752,474),3108=>array(57,-11,659,664),3109=>array(60,-137,643,664),3110=>array(60,-11,643,664),3111=>array(60,-137,643,664),3112=>array(44,-11,547,664),3114=>array(35,-11,563,664),3115=>array(35,-137,563,664),3116=>array(57,-11,621,473),3117=>array(57,-137,663,664),3118=>array(44,-11,873,664),3119=>array(57,-12,1144,664),3120=>array(57,-11,540,664),3121=>array(57,-12,837,476),3122=>array(57,-11,571,474),3123=>array(48,-11,561,664),3125=>array(44,-11,561,664),3126=>array(48,-11,524,664),3127=>array(35,-137,759,664),3128=>array(24,-11,581,664),3129=>array(31,-11,893,664),3134=>array(6,305,626,545),3135=>array(17,462,281,785),3136=>array(10,462,289,980),3137=>array(-48,-9,302,474),3138=>array(-48,-9,665,545),3139=>array(-203,-271,294,474),3140=>array(-216,-271,687,473),3142=>array(6,466,618,688),3143=>array(6,466,617,889),3144=>array(6,-271,894,688),3146=>array(6,470,843,715),3147=>array(6,470,843,908),3148=>array(6,449,970,688),3149=>array(39,465,655,866),3157=>array(47,767,289,980),3158=>array(-670,-271,109,-31),3168=>array(57,-11,1602,545),3169=>array(44,-11,1263,545),3174=>array(158,-14,682,510),3175=>array(88,-14,752,510),3176=>array(54,0,726,510),3177=>array(199,-13,609,512),3178=>array(136,-12,704,519),3179=>array(60,-14,781,521),3180=>array(106,0,798,510),3181=>array(201,-15,668,513),3182=>array(65,-13,815,510),3183=>array(106,0,798,510),3202=>array(46,84,394,554),3203=>array(46,84,205,553),3205=>array(47,84,608,602),3206=>array(46,84,625,602),3207=>array(37,84,595,602),3208=>array(33,84,850,752),3209=>array(46,84,911,602),3210=>array(46,84,1247,602),3211=>array(37,84,1000,752),3212=>array(37,84,695,602),3214=>array(37,84,606,602),3215=>array(37,84,606,647),3216=>array(44,84,615,602),3218=>array(37,84,630,602),3219=>array(37,84,630,775),3220=>array(38,84,631,774),3221=>array(49,84,415,752),3222=>array(17,84,700,713),3223=>array(51,84,493,752),3224=>array(44,-79,742,752),3225=>array(37,84,630,602),3226=>array(37,84,633,752),3227=>array(46,-79,614,752),3228=>array(37,84,630,602),3229=>array(54,-79,1127,752),3230=>array(37,84,889,602),3231=>array(59,84,627,651),3232=>array(54,84,508,752),3233=>array(54,84,625,752),3234=>array(54,-79,625,752),3235=>array(54,84,682,602),3236=>array(46,84,500,752),3237=>array(54,-79,626,752),3238=>array(54,84,626,752),3239=>array(54,-79,626,752),3240=>array(46,46,514,752),3242=>array(46,84,620,752),3243=>array(46,-79,619,753),3244=>array(37,84,632,602),3245=>array(37,-79,643,752),3246=>array(49,84,928,752),3247=>array(46,84,1057,752),3248=>array(54,84,508,752),3249=>array(49,84,628,602),3250=>array(46,84,615,602),3251=>array(42,84,507,752),3253=>array(49,84,620,752),3254=>array(49,84,506,752),3255=>array(49,70,620,752),3256=>array(44,84,499,752),3257=>array(49,84,675,752),3262=>array(-21,84,370,588),3263=>array(-13,339,307,702),3264=>array(-13,46,635,702),3265=>array(-5,84,312,563),3266=>array(-5,84,673,560),3267=>array(22,-173,364,236),3268=>array(24,-173,614,253),3270=>array(-79,354,258,774),3271=>array(-79,46,606,774),3272=>array(-79,-173,438,774),3274=>array(-79,84,868,774),3275=>array(-79,46,1188,774),3276=>array(-160,276,395,774),3277=>array(-22,335,329,703),3285=>array(49,46,299,560),3286=>array(25,-173,364,301),3294=>array(49,84,624,602),3296=>array(37,84,1654,752),3297=>array(37,84,943,602),3302=>array(42,84,507,686),3303=>array(34,84,515,685),3304=>array(22,98,507,688),3305=>array(52,84,527,684),3306=>array(38,84,515,684),3307=>array(33,84,516,688),3308=>array(42,98,529,687),3309=>array(47,98,525,684),3310=>array(36,84,520,687),3311=>array(46,84,521,667),3330=>array(45,-9,323,269),3331=>array(49,-9,256,464),3333=>array(49,-9,1152,464),3334=>array(49,-173,1309,464),3335=>array(49,-232,856,464),3336=>array(49,-232,1411,464),3337=>array(49,-232,586,464),3338=>array(49,-232,1149,464),3339=>array(44,-271,817,464),3340=>array(49,-9,908,465),3342=>array(44,-271,1157,464),3343=>array(44,-271,1153,464),3344=>array(49,-271,1785,465),3346=>array(49,-9,601,464),3347=>array(49,-9,1065,464),3348=>array(49,-9,1146,464),3349=>array(42,-8,819,464),3350=>array(49,-9,907,465),3351=>array(44,-10,830,464),3352=>array(39,0,1279,464),3353=>array(49,-9,916,465),3354=>array(15,0,940,464),3355=>array(15,-9,1217,464),3356=>array(44,-51,663,464),3357=>array(49,-9,1410,464),3358=>array(49,-9,1166,465),3359=>array(39,-9,524,464),3360=>array(43,-9,517,464),3361=>array(44,-9,1146,464),3362=>array(44,-9,1195,465),3363=>array(49,-12,1219,465),3364=>array(49,-9,830,464),3365=>array(76,0,893,464),3366=>array(49,-9,501,464),3367=>array(49,-9,835,467),3368=>array(44,-12,830,464),3370=>array(44,-9,956,464),3371=>array(44,-9,1104,464),3372=>array(49,-9,1258,465),3373=>array(54,0,504,464),3374=>array(71,0,572,464),3375=>array(44,-9,905,464),3376=>array(49,-9,594,464),3377=>array(44,-8,506,464),3378=>array(76,0,869,464),3379=>array(44,-232,589,464),3380=>array(44,-9,514,464),3381=>array(49,-7,884,464),3382=>array(44,-9,888,464),3383=>array(44,-9,1043,464),3384=>array(44,-9,1146,464),3385=>array(44,-9,1063,464),3390=>array(42,-6,426,464),3391=>array(0,0,330,651),3392=>array(0,0,354,651),3393=>array(39,-271,301,466),3394=>array(39,-271,301,466),3395=>array(8,-271,458,466),3398=>array(49,-9,591,465),3399=>array(49,-8,476,464),3400=>array(49,-9,1230,465),3402=>array(49,-9,1319,465),3403=>array(49,-8,1209,464),3404=>array(49,-9,1398,465),3405=>array(-300,520,-19,721),3415=>array(39,-9,504,464),3424=>array(44,-271,817,464),3425=>array(49,-173,1058,465),3430=>array(49,-9,1080,464),3431=>array(15,-143,852,464),3432=>array(44,-7,840,464),3433=>array(44,-9,1166,464),3434=>array(44,-9,643,651),3435=>array(54,-243,918,651),3436=>array(44,-271,1162,464),3437=>array(49,-271,591,464),3438=>array(49,-271,884,464),3439=>array(44,-9,848,651),3585=>array(54,0,520,558),3586=>array(30,0,573,558),3587=>array(30,0,590,559),3588=>array(52,0,530,558),3589=>array(52,0,530,560),3590=>array(30,-5,590,559),3591=>array(25,-5,396,558),3592=>array(26,-5,481,558),3593=>array(30,-5,622,558),3594=>array(30,0,634,592),3595=>array(30,0,651,592),3596=>array(54,-5,741,558),3597=>array(54,-208,783,558),3598=>array(30,-203,545,558),3599=>array(30,-203,545,558),3600=>array(54,-206,477,560),3601=>array(30,0,710,559),3602=>array(52,-5,751,560),3603=>array(54,-5,857,558),3604=>array(52,0,530,558),3605=>array(52,0,530,560),3606=>array(54,-5,520,558),3607=>array(30,0,575,558),3608=>array(54,0,477,560),3609=>array(30,-5,622,558),3610=>array(30,0,533,558),3611=>array(30,0,533,830),3612=>array(78,0,552,558),3613=>array(78,0,552,830),3614=>array(30,0,620,558),3615=>array(30,0,620,830),3616=>array(30,-5,545,558),3617=>array(30,-5,506,558),3618=>array(75,0,513,558),3619=>array(54,-5,437,560),3620=>array(54,-199,520,558),3621=>array(44,-5,499,558),3622=>array(30,-199,545,558),3623=>array(19,-5,444,558),3624=>array(52,0,562,664),3625=>array(30,0,637,558),3626=>array(44,-5,544,659),3627=>array(30,0,584,558),3628=>array(30,0,684,723),3629=>array(36,0,491,558),3630=>array(61,0,545,656),3631=>array(30,0,442,558),3632=>array(44,49,418,510),3633=>array(-364,631,10,824),3634=>array(26,0,421,558),3635=>array(-223,0,421,767),3636=>array(-493,612,-109,775),3637=>array(-493,612,-109,800),3638=>array(-493,612,-64,800),3639=>array(-493,612,-109,800),3640=>array(-201,-206,-85,-34),3641=>array(-337,-206,-89,-34),3642=>array(-157,-115,-75,-33),3647=>array(84,-103,625,782),3648=>array(75,-5,272,553),3649=>array(75,-5,541,553),3650=>array(27,-5,466,830),3651=>array(30,-5,485,828),3652=>array(10,-5,485,828),3653=>array(26,-199,421,558),3654=>array(30,-199,431,559),3655=>array(-424,603,-47,849),3656=>array(-167,858,-109,1031),3657=>array(-293,858,1,1065),3658=>array(-342,858,98,1056),3659=>array(-225,858,-52,1031),3660=>array(-330,861,-18,1078),3661=>array(-223,609,-65,767),3662=>array(-203,858,-42,1067),3663=>array(60,-5,495,430),3664=>array(60,-5,538,428),3665=>array(50,-5,590,428),3666=>array(75,0,613,611),3667=>array(75,-5,615,428),3668=>array(50,-5,637,611),3669=>array(50,-5,637,611),3670=>array(18,-5,585,611),3671=>array(75,-5,789,574),3672=>array(60,-5,659,574),3673=>array(75,-5,715,574),3674=>array(30,0,598,558),3675=>array(40,-5,964,447),3713=>array(55,-6,721,587),3714=>array(53,-15,664,587),3716=>array(54,-5,670,587),3719=>array(34,-207,470,587),3720=>array(37,-18,636,587),3722=>array(54,-210,629,587),3725=>array(54,-5,670,588),3732=>array(54,-5,665,587),3733=>array(54,-6,780,587),3734=>array(45,-257,711,587),3735=>array(55,-5,862,587),3737=>array(54,-11,690,589),3738=>array(55,-5,686,587),3739=>array(55,-5,686,707),3740=>array(54,-5,780,593),3741=>array(54,-5,780,707),3742=>array(54,-5,800,587),3743=>array(54,-5,800,707),3745=>array(55,-11,721,589),3746=>array(54,-5,670,707),3747=>array(54,-7,643,587),3749=>array(46,-7,646,587),3751=>array(46,-7,646,587),3754=>array(58,-7,673,587),3755=>array(55,-5,862,587),3757=>array(54,-7,671,587),3758=>array(53,-7,664,595),3759=>array(54,-21,604,680),3760=>array(57,113,382,578),3761=>array(57,847,482,1049),3762=>array(34,-5,422,587),3763=>array(1,-5,422,788),3764=>array(139,805,639,1059),3765=>array(139,805,713,1059),3766=>array(139,805,639,1059),3767=>array(139,805,713,1059),3768=>array(308,-269,470,-26),3769=>array(248,-263,528,-15),3771=>array(145,838,635,1060),3772=>array(147,-257,632,-72),3773=>array(55,-5,616,829),3776=>array(34,-5,386,576),3777=>array(34,-5,772,576),3778=>array(28,-5,410,1001),3779=>array(17,-5,429,1037),3780=>array(46,-5,311,1025),3782=>array(34,-267,517,579),3784=>array(349,806,429,1012),3785=>array(148,808,630,1035),3786=>array(163,805,609,1015),3787=>array(281,805,497,1019),3788=>array(212,812,560,1049),3789=>array(308,806,470,967),3792=>array(54,-7,667,578),3793=>array(54,-5,665,578),3794=>array(67,-5,557,796),3795=>array(44,-5,665,829),3796=>array(54,-5,632,776),3797=>array(54,-5,632,776),3798=>array(54,-5,780,829),3799=>array(55,-257,702,579),3800=>array(54,-171,670,579),3801=>array(54,-5,841,577),3804=>array(55,-11,1218,579),3805=>array(55,-11,1218,579),3840=>array(52,207,573,983),3841=>array(52,232,534,864),3842=>array(11,274,571,864),3843=>array(11,274,593,864),3844=>array(0,227,583,720),3845=>array(107,227,464,720),3846=>array(0,-174,583,720),3847=>array(-152,393,649,720),3848=>array(141,-174,512,809),3849=>array(80,81,520,716),3850=>array(34,-62,576,799),3851=>array(92,522,508,716),3852=>array(92,-117,508,716),3853=>array(260,-174,340,716),3854=>array(190,-174,410,716),3855=>array(250,-174,350,716),3856=>array(187,-174,413,716),3857=>array(179,-174,421,716),3858=>array(-20,-124,620,719),3859=>array(21,126,579,706),3860=>array(238,403,371,681),3861=>array(128,254,472,716),3862=>array(128,320,477,716),3863=>array(99,378,510,657),3864=>array(159,-9,537,322),3865=>array(260,-201,340,300),3866=>array(241,459,359,577),3867=>array(151,459,449,577),3868=>array(151,419,449,687),3869=>array(123,346,476,683),3870=>array(66,426,520,607),3871=>array(129,448,455,584),3872=>array(128,-13,472,374),3873=>array(126,-149,444,374),3874=>array(40,-86,530,374),3875=>array(97,-176,507,402),3876=>array(27,19,560,339),3877=>array(80,-13,541,374),3878=>array(33,-42,547,434),3879=>array(24,-13,568,390),3880=>array(57,-63,485,401),3881=>array(82,-82,534,374),3882=>array(-65,-149,653,374),3883=>array(-65,-86,653,374),3884=>array(-65,-176,653,402),3885=>array(-65,19,653,339),3886=>array(-65,-13,653,374),3887=>array(-65,-42,653,434),3888=>array(-65,-13,653,390),3889=>array(-65,-63,653,401),3890=>array(-65,-82,653,374),3891=>array(-65,-13,653,374),3892=>array(227,359,373,609),3893=>array(238,-1,371,150),3894=>array(81,159,519,619),3895=>array(251,52,349,150),3896=>array(87,431,495,735),3897=>array(355,538,551,706),3898=>array(2,419,587,687),3899=>array(13,419,598,687),3900=>array(56,-201,484,837),3901=>array(116,-201,544,837),3902=>array(238,-201,457,180),3903=>array(143,-201,362,180),3904=>array(23,27,558,716),3905=>array(42,207,558,716),3906=>array(22,27,558,716),3907=>array(22,-174,558,716),3908=>array(72,207,528,716),3909=>array(54,207,541,716),3910=>array(43,207,557,716),3911=>array(72,207,528,716),3913=>array(96,27,488,726),3914=>array(72,27,528,716),3915=>array(62,207,538,716),3916=>array(72,27,528,716),3917=>array(72,-174,528,716),3918=>array(102,27,500,716),3919=>array(72,27,528,716),3920=>array(62,207,538,716),3921=>array(72,27,528,716),3922=>array(72,-174,528,716),3923=>array(100,27,498,716),3924=>array(72,207,558,716),3925=>array(72,207,558,716),3926=>array(72,207,558,716),3927=>array(72,-174,558,716),3928=>array(30,207,558,716),3929=>array(54,207,601,864),3930=>array(43,207,601,864),3931=>array(72,207,621,864),3932=>array(72,-174,621,864),3933=>array(31,207,558,726),3934=>array(62,27,542,716),3935=>array(62,207,538,716),3936=>array(72,187,580,716),3937=>array(72,207,558,716),3938=>array(86,207,580,716),3939=>array(72,207,558,716),3940=>array(19,27,538,716),3941=>array(62,27,581,716),3942=>array(72,207,558,716),3943=>array(72,27,528,716),3944=>array(52,207,558,716),3945=>array(23,-174,558,716),3953=>array(208,-51,414,140),3954=>array(87,625,539,864),3955=>array(87,-51,539,864),3956=>array(72,-70,524,153),3957=>array(105,-201,524,180),3958=>array(61,41,513,864),3959=>array(61,-201,513,864),3960=>array(61,-11,513,864),3961=>array(61,-201,513,864),3962=>array(137,643,365,777),3963=>array(137,643,405,897),3964=>array(67,643,573,829),3965=>array(67,643,573,929),3966=>array(241,736,359,854),3967=>array(399,180,517,448),3968=>array(61,625,513,864),3969=>array(61,-51,513,864),3970=>array(193,625,391,852),3971=>array(193,625,391,819),3972=>array(307,-201,535,-67),3973=>array(96,-54,488,726),3974=>array(186,461,432,864),3975=>array(288,666,312,864),3976=>array(162,609,438,864),3977=>array(85,575,515,864),3978=>array(165,634,455,864),3979=>array(163,652,486,864),3984=>array(75,-201,510,180),3985=>array(90,-201,510,180),3986=>array(74,-200,510,180),3987=>array(179,-201,413,180),3988=>array(115,-201,485,180),3989=>array(100,-201,496,180),3991=>array(115,-201,485,180),3993=>array(134,-201,453,186),3994=>array(115,-201,485,180),3995=>array(107,-201,493,180),3996=>array(115,-201,485,180),3997=>array(201,-201,399,180),3998=>array(139,-201,463,180),3999=>array(115,-201,485,180),4000=>array(107,-201,493,180),4001=>array(115,-201,485,180),4002=>array(201,-201,399,180),4003=>array(137,-201,461,180),4004=>array(115,-201,510,180),4005=>array(115,-201,510,180),4006=>array(115,-201,510,180),4007=>array(201,-201,413,180),4008=>array(81,-201,510,180),4009=>array(100,-201,545,301),4010=>array(91,-201,545,301),4011=>array(115,-201,561,301),4012=>array(201,-201,440,245),4013=>array(81,-201,510,188),4017=>array(115,-201,510,180),4018=>array(126,-201,528,180),4019=>array(115,-201,510,180),4020=>array(72,-201,493,180),4021=>array(107,-201,528,180),4022=>array(115,-201,510,180),4023=>array(132,-201,468,180),4025=>array(179,-201,413,180),4256=>array(42,-15,633,716),4257=>array(45,-3,677,716),4258=>array(45,-142,695,716),4259=>array(42,-15,657,716),4260=>array(45,0,543,716),4261=>array(47,0,745,716),4262=>array(1,-7,630,715),4263=>array(35,0,740,716),4264=>array(24,0,494,716),4265=>array(66,0,568,716),4266=>array(45,-7,748,716),4267=>array(34,-7,677,716),4268=>array(66,0,563,716),4269=>array(35,-15,681,732),4270=>array(-1,-15,639,719),4271=>array(-1,-209,624,721),4272=>array(34,-15,689,716),4273=>array(66,-15,581,716),4274=>array(66,0,547,716),4275=>array(35,-15,681,732),4276=>array(35,-209,644,732),4277=>array(34,-209,671,716),4278=>array(66,0,577,732),4279=>array(52,0,557,716),4280=>array(50,-15,557,716),4281=>array(66,0,563,716),4282=>array(35,-163,593,732),4283=>array(34,-7,736,716),4284=>array(66,-209,547,716),4285=>array(49,-15,614,732),4286=>array(66,0,563,716),4287=>array(-66,-171,660,716),4288=>array(45,-15,701,716),4289=>array(66,0,552,716),4290=>array(23,-15,571,716),4291=>array(34,0,539,716),4292=>array(58,-209,618,716),4293=>array(34,-15,758,716),4304=>array(36,-12,398,490),4305=>array(37,-12,519,721),4306=>array(42,-256,523,455),4307=>array(36,-251,836,454),4308=>array(20,-256,472,452),4309=>array(30,-256,498,451),4310=>array(24,-12,689,734),4311=>array(34,-16,834,454),4312=>array(34,-16,495,452),4313=>array(30,-256,498,451),4314=>array(36,-251,921,449),4315=>array(34,-12,486,728),4316=>array(66,-12,518,723),4317=>array(34,-33,700,449),4318=>array(34,-12,502,727),4319=>array(40,-256,508,466),4320=>array(34,-16,651,727),4321=>array(66,-12,512,716),4322=>array(34,-256,772,623),4323=>array(22,-257,745,449),4324=>array(34,-256,743,451),4325=>array(34,-257,436,716),4326=>array(36,-251,655,449),4327=>array(44,-257,446,452),4328=>array(34,-12,486,734),4329=>array(66,0,451,733),4330=>array(45,-256,534,452),4331=>array(34,-12,486,716),4332=>array(32,-256,562,734),4333=>array(34,-257,530,732),4334=>array(66,-12,518,716),4335=>array(32,-238,771,450),4336=>array(35,-12,514,736),4337=>array(40,-12,619,716),4338=>array(10,-12,549,453),4339=>array(23,-256,478,450),4340=>array(34,-257,448,495),4341=>array(43,-250,549,583),4342=>array(35,-256,788,715),4347=>array(87,-12,449,464),4352=>array(129,91,796,665),4353=>array(114,91,844,665),4354=>array(204,90,873,665),4355=>array(184,90,838,664),4356=>array(149,90,888,665),4357=>array(173,90,827,665),4358=>array(215,90,785,665),4359=>array(215,90,785,665),4360=>array(145,88,855,665),4361=>array(107,76,882,663),4362=>array(110,78,890,663),4363=>array(187,92,813,666),4364=>array(109,76,880,665),4365=>array(105,80,895,666),4366=>array(109,76,880,665),4367=>array(206,90,790,663),4368=>array(189,91,837,664),4369=>array(187,90,813,665),4370=>array(156,88,844,665),4371=>array(144,91,844,665),4372=>array(144,93,881,665),4373=>array(144,90,888,665),4374=>array(144,89,853,665),4375=>array(149,89,842,665),4376=>array(149,85,881,665),4377=>array(149,85,887,665),4378=>array(149,85,876,666),4379=>array(232,78,789,722),4380=>array(142,89,853,665),4381=>array(232,78,768,711),4382=>array(145,88,844,665),4383=>array(145,88,881,665),4384=>array(145,88,888,665),4385=>array(145,78,884,664),4386=>array(111,78,889,665),4387=>array(101,78,933,665),4388=>array(93,78,907,665),4389=>array(101,78,962,665),4390=>array(101,78,962,666),4391=>array(140,78,885,666),4392=>array(140,78,885,665),4393=>array(145,88,855,665),4394=>array(145,88,868,665),4395=>array(232,78,768,725),4396=>array(197,78,803,728),4397=>array(130,78,844,665),4398=>array(130,78,858,665),4399=>array(130,78,888,665),4400=>array(125,78,887,665),4401=>array(125,78,860,665),4402=>array(125,78,868,665),4403=>array(57,78,889,665),4404=>array(57,78,949,663),4405=>array(125,78,876,663),4406=>array(117,78,883,666),4407=>array(119,78,885,665),4408=>array(125,78,873,663),4409=>array(125,78,855,665),4410=>array(125,78,868,665),4411=>array(125,78,876,666),4412=>array(216,-1,702,716),4413=>array(92,-1,860,716),4414=>array(298,-1,784,716),4415=>array(140,-1,908,716),4416=>array(258,93,742,659),4417=>array(125,91,844,665),4418=>array(125,90,888,665),4419=>array(125,89,860,665),4420=>array(125,89,853,665),4421=>array(125,78,880,663),4422=>array(125,119,886,664),4423=>array(125,122,874,617),4424=>array(125,78,885,666),4425=>array(125,78,885,665),4426=>array(125,90,855,665),4427=>array(125,91,868,665),4428=>array(232,131,768,551),4429=>array(119,78,874,666),4430=>array(97,-1,903,720),4431=>array(92,-1,903,720),4432=>array(97,-1,903,720),4433=>array(97,-1,908,720),4434=>array(123,78,873,665),4435=>array(123,78,876,666),4436=>array(97,-1,903,814),4437=>array(97,-1,903,814),4438=>array(127,89,853,665),4439=>array(202,78,798,714),4440=>array(100,91,900,666),4441=>array(182,78,818,573),4449=>array(421,-64,711,842),4450=>array(345,-64,655,842),4451=>array(381,-64,676,842),4452=>array(340,-64,661,842),4453=>array(302,-65,597,841),4454=>array(186,-63,677,843),4455=>array(332,-64,626,842),4456=>array(226,-63,687,843),4457=>array(60,197,940,614),4458=>array(46,-64,931,842),4459=>array(51,-64,892,842),4460=>array(61,-64,857,842),4461=>array(60,197,940,615),4462=>array(79,76,921,554),4463=>array(68,-65,882,841),4464=>array(53,-63,912,843),4465=>array(70,-64,867,842),4466=>array(72,111,928,589),4467=>array(57,357,943,436),4468=>array(67,-64,867,842),4469=>array(462,-64,538,842),4470=>array(62,7,943,842),4471=>array(79,-64,936,842),4472=>array(62,7,943,842),4473=>array(62,-3,938,842),4474=>array(62,7,943,841),4475=>array(79,-64,920,841),4476=>array(57,22,943,841),4477=>array(62,7,943,842),4478=>array(79,-64,920,842),4479=>array(63,-70,907,841),4480=>array(63,-68,907,843),4481=>array(63,-68,907,843),4482=>array(62,22,943,783),4483=>array(62,-64,943,783),4484=>array(62,-70,907,842),4485=>array(62,-69,907,842),4486=>array(62,-70,907,842),4487=>array(62,22,943,782),4488=>array(62,-69,907,842),4489=>array(68,-69,936,842),4490=>array(68,-69,907,842),4491=>array(57,22,943,841),4492=>array(63,-68,907,843),4493=>array(79,-64,920,762),4494=>array(68,-69,936,842),4495=>array(68,-70,907,841),4496=>array(68,-63,912,843),4497=>array(68,-70,907,842),4498=>array(63,-68,907,843),4499=>array(79,-64,921,756),4500=>array(68,-64,867,842),4501=>array(79,-64,921,615),4502=>array(79,197,921,615),4503=>array(65,-64,921,842),4504=>array(321,-63,812,843),4505=>array(311,-63,772,843),4506=>array(62,22,943,842),4507=>array(79,-64,921,842),4508=>array(57,22,943,842),4509=>array(410,50,584,842),4510=>array(410,280,584,463),4511=>array(410,-65,719,841),4512=>array(79,-64,921,601),4513=>array(333,-69,667,842),4514=>array(329,280,671,463),4520=>array(129,91,796,665),4521=>array(114,91,844,665),4522=>array(114,78,880,665),4523=>array(204,90,873,665),4524=>array(144,78,880,666),4525=>array(144,91,876,666),4526=>array(184,90,838,664),4527=>array(173,90,827,665),4528=>array(149,85,842,665),4529=>array(149,85,852,665),4530=>array(149,85,853,665),4531=>array(149,78,880,665),4532=>array(149,85,855,665),4533=>array(149,85,868,665),4534=>array(149,85,876,666),4535=>array(215,90,785,665),4536=>array(215,90,785,665),4537=>array(145,78,880,664),4538=>array(107,76,882,663),4539=>array(110,78,890,663),4540=>array(187,92,813,666),4541=>array(109,76,880,665),4542=>array(109,76,880,665),4543=>array(206,90,790,663),4544=>array(189,91,837,664),4545=>array(187,90,813,665),4546=>array(156,88,844,665),4547=>array(114,85,887,665),4548=>array(75,78,913,665),4549=>array(144,91,844,665),4550=>array(144,90,888,665),4551=>array(144,78,880,665),4552=>array(144,93,886,665),4553=>array(144,90,855,665),4554=>array(149,89,842,665),4555=>array(149,85,887,665),4556=>array(76,78,961,665),4557=>array(149,85,881,665),4558=>array(149,85,888,665),4559=>array(76,85,944,666),4560=>array(149,85,887,665),4561=>array(76,85,920,665),4562=>array(76,78,973,665),4563=>array(76,78,973,665),4564=>array(76,85,946,666),4565=>array(149,85,848,728),4566=>array(80,78,960,665),4567=>array(149,85,886,665),4568=>array(149,85,873,665),4569=>array(149,85,878,666),4570=>array(142,89,844,665),4571=>array(142,85,887,665),4572=>array(142,89,853,665),4573=>array(142,78,880,665),4574=>array(84,78,960,665),4575=>array(142,89,886,665),4576=>array(142,78,885,665),4577=>array(142,89,876,666),4578=>array(232,78,768,711),4579=>array(145,85,887,665),4580=>array(145,88,868,665),4581=>array(145,88,876,666),4582=>array(232,78,768,725),4583=>array(130,78,844,665),4584=>array(130,78,888,665),4585=>array(125,78,887,665),4586=>array(125,78,868,665),4587=>array(258,93,742,659),4588=>array(125,91,844,665),4589=>array(72,91,913,665),4590=>array(125,122,874,617),4591=>array(125,90,873,663),4592=>array(232,131,768,551),4593=>array(125,78,880,663),4594=>array(125,119,886,664),4595=>array(127,89,853,665),4596=>array(202,78,798,714),4597=>array(116,91,881,666),4598=>array(116,85,887,666),4599=>array(116,89,852,666),4600=>array(116,89,853,666),4601=>array(182,78,818,573),7680=>array(-1,-210,668,716),7681=>array(38,-210,516,530),7682=>array(74,0,615,881),7683=>array(67,-12,517,881),7684=>array(74,-210,615,716),7685=>array(67,-210,517,716),7686=>array(74,-179,615,716),7687=>array(67,-179,517,716),7688=>array(51,-209,684,898),7689=>array(39,-196,491,728),7690=>array(80,0,672,881),7691=>array(36,-12,486,881),7692=>array(80,-210,672,716),7693=>array(36,-210,486,716),7694=>array(80,-179,672,716),7695=>array(36,-179,486,716),7696=>array(80,-205,672,716),7697=>array(36,-205,486,716),7698=>array(80,-210,672,716),7699=>array(36,-210,486,716),7700=>array(79,0,614,1050),7701=>array(39,-12,517,882),7702=>array(79,0,614,1050),7703=>array(39,-12,517,882),7704=>array(79,-210,614,716),7705=>array(39,-210,517,530),7706=>array(79,-185,614,716),7707=>array(39,-185,517,530),7708=>array(79,-205,614,902),7709=>array(39,-205,517,722),7710=>array(80,0,563,881),7711=>array(8,0,311,881),7712=>array(52,-12,714,865),7713=>array(34,-210,491,697),7714=>array(80,0,642,881),7715=>array(67,0,490,881),7716=>array(80,-210,642,716),7717=>array(67,-210,490,716),7718=>array(80,0,642,881),7719=>array(67,0,490,881),7720=>array(27,-205,642,716),7721=>array(2,-205,490,716),7722=>array(80,-200,642,716),7723=>array(67,-200,490,716),7724=>array(-28,-185,299,716),7725=>array(-58,-185,270,716),7726=>array(3,0,274,1066),7727=>array(5,0,276,896),7728=>array(73,0,665,898),7729=>array(66,0,496,898),7730=>array(73,-210,665,716),7731=>array(66,-210,496,716),7732=>array(73,-179,665,716),7733=>array(66,-179,496,716),7734=>array(75,-210,523,716),7735=>array(67,-210,158,716),7736=>array(75,-210,523,865),7737=>array(-41,-210,264,865),7738=>array(75,-179,523,716),7739=>array(-42,-179,262,716),7740=>array(75,-210,523,716),7741=>array(-39,-210,270,716),7742=>array(76,0,757,898),7743=>array(65,0,769,728),7744=>array(76,0,757,881),7745=>array(65,0,769,711),7746=>array(76,-210,757,716),7747=>array(65,-210,769,530),7748=>array(79,0,642,881),7749=>array(68,0,490,711),7750=>array(79,-210,642,716),7751=>array(68,-210,490,530),7752=>array(79,-179,642,716),7753=>array(68,-179,490,530),7754=>array(79,-210,642,716),7755=>array(68,-210,490,530),7756=>array(47,-12,732,1064),7757=>array(35,-12,521,902),7758=>array(47,-12,732,1035),7759=>array(35,-12,521,865),7760=>array(47,-12,732,1050),7761=>array(35,-12,521,882),7762=>array(47,-12,732,1050),7763=>array(35,-12,521,882),7764=>array(77,0,623,898),7765=>array(68,-199,518,728),7766=>array(77,0,623,881),7767=>array(68,-199,518,711),7768=>array(80,0,711,881),7769=>array(64,0,346,711),7770=>array(80,-210,711,716),7771=>array(64,-210,346,530),7772=>array(80,-210,711,865),7773=>array(14,-210,346,697),7774=>array(80,-179,711,716),7775=>array(8,-179,346,530),7776=>array(45,-12,615,881),7777=>array(31,-12,461,711),7778=>array(45,-210,615,728),7779=>array(31,-210,461,530),7780=>array(45,-12,615,939),7781=>array(31,-12,461,768),7782=>array(45,-12,615,1047),7783=>array(31,-12,461,877),7784=>array(45,-210,615,881),7785=>array(31,-210,461,711),7786=>array(22,0,589,881),7787=>array(17,-7,269,881),7788=>array(22,-210,589,716),7789=>array(17,-210,269,700),7790=>array(22,-179,589,716),7791=>array(-11,-179,293,700),7792=>array(22,-210,589,716),7793=>array(6,-210,315,700),7794=>array(79,-210,642,716),7795=>array(66,-210,487,518),7796=>array(79,-185,642,716),7797=>array(66,-185,487,518),7798=>array(79,-210,642,716),7799=>array(66,-210,487,518),7800=>array(79,-12,642,1072),7801=>array(66,-12,487,902),7802=>array(79,-12,642,1002),7803=>array(66,-12,487,846),7804=>array(6,0,660,886),7805=>array(13,0,488,716),7806=>array(6,-210,660,716),7807=>array(13,-210,488,518),7808=>array(12,0,933,898),7809=>array(5,0,717,728),7810=>array(12,0,933,898),7811=>array(5,0,717,728),7812=>array(12,0,933,881),7813=>array(5,0,717,711),7814=>array(12,0,933,881),7815=>array(5,0,717,711),7816=>array(12,-210,933,716),7817=>array(5,-210,717,518),7818=>array(5,0,661,881),7819=>array(7,0,493,711),7820=>array(5,0,661,881),7821=>array(7,0,493,711),7822=>array(5,0,661,881),7823=>array(16,-210,492,711),7824=>array(18,0,584,898),7825=>array(20,0,479,728),7826=>array(18,-210,584,716),7827=>array(20,-210,479,518),7828=>array(18,-179,584,716),7829=>array(20,-179,479,518),7830=>array(67,-179,490,716),7831=>array(1,-7,272,881),7832=>array(5,0,717,752),7833=>array(16,-210,492,752),7834=>array(38,-12,557,758),7835=>array(8,0,311,881),7840=>array(-1,-210,668,716),7841=>array(38,-210,516,530),7842=>array(-1,0,668,934),7843=>array(38,-12,516,756),7844=>array(-1,0,668,978),7845=>array(38,-12,586,808),7846=>array(-1,0,668,978),7847=>array(-30,-12,516,808),7848=>array(-1,0,668,996),7849=>array(38,-12,573,826),7850=>array(-1,0,668,1058),7851=>array(38,-12,516,888),7852=>array(-1,-210,668,898),7853=>array(38,-210,516,728),7854=>array(-1,0,668,1039),7855=>array(38,-12,516,859),7856=>array(-1,0,668,1039),7857=>array(38,-12,516,859),7858=>array(-1,0,668,1074),7859=>array(38,-12,516,895),7860=>array(-1,0,668,1060),7861=>array(38,-12,516,880),7862=>array(-1,-210,668,902),7863=>array(38,-210,516,722),7864=>array(79,-210,614,716),7865=>array(39,-210,517,530),7866=>array(79,0,614,936),7867=>array(39,-12,517,756),7868=>array(79,0,614,884),7869=>array(39,-12,517,716),7870=>array(79,0,652,978),7871=>array(39,-12,586,808),7872=>array(34,0,614,978),7873=>array(-30,-12,517,808),7874=>array(79,0,638,996),7875=>array(39,-12,573,826),7876=>array(79,0,614,1056),7877=>array(39,-12,517,886),7878=>array(79,-210,614,900),7879=>array(39,-210,517,728),7880=>array(33,0,245,936),7881=>array(33,0,245,756),7882=>array(92,-210,187,716),7883=>array(67,-210,158,716),7884=>array(47,-210,732,728),7885=>array(35,-210,521,530),7886=>array(47,-12,732,936),7887=>array(35,-12,521,756),7888=>array(47,-12,732,978),7889=>array(35,-12,586,808),7890=>array(47,-12,732,978),7891=>array(-30,-12,521,808),7892=>array(47,-12,732,996),7893=>array(35,-12,573,826),7894=>array(47,-12,732,1056),7895=>array(35,-12,521,886),7896=>array(47,-210,732,900),7897=>array(35,-210,521,728),7898=>array(47,-12,776,900),7899=>array(35,-12,555,728),7900=>array(47,-12,776,900),7901=>array(35,-12,555,728),7902=>array(47,-12,776,936),7903=>array(35,-12,555,756),7904=>array(47,-12,776,884),7905=>array(35,-12,555,716),7906=>array(47,-210,776,768),7907=>array(35,-210,555,606),7908=>array(79,-210,642,716),7909=>array(66,-210,487,518),7910=>array(79,-12,642,936),7911=>array(66,-12,487,756),7912=>array(79,-12,776,900),7913=>array(66,-12,625,728),7914=>array(79,-12,776,900),7915=>array(66,-12,625,728),7916=>array(79,-12,776,936),7917=>array(66,-12,625,756),7918=>array(79,-12,776,884),7919=>array(66,-12,625,716),7920=>array(79,-210,776,768),7921=>array(66,-210,625,620),7922=>array(5,0,661,900),7923=>array(16,-210,492,728),7924=>array(5,-210,661,716),7925=>array(16,-210,492,518),7926=>array(5,0,661,936),7927=>array(16,-210,492,756),7928=>array(5,0,661,884),7929=>array(16,-210,492,716),7936=>array(35,-12,541,763),7937=>array(35,-12,541,763),7938=>array(35,-12,541,763),7939=>array(35,-12,541,763),7940=>array(35,-12,541,763),7941=>array(35,-12,541,763),7942=>array(35,-12,541,847),7943=>array(35,-12,541,847),7944=>array(-1,0,668,763),7945=>array(-1,0,668,763),7946=>array(-50,0,681,763),7947=>array(-50,0,681,763),7948=>array(-46,0,681,763),7949=>array(-38,0,681,763),7950=>array(-43,0,719,763),7951=>array(-43,0,719,763),7952=>array(29,-12,405,763),7953=>array(29,-12,405,763),7954=>array(29,-12,405,763),7955=>array(29,-12,405,763),7956=>array(29,-12,405,763),7957=>array(29,-12,405,763),7960=>array(-43,0,639,763),7961=>array(-44,0,639,763),7962=>array(-43,0,770,763),7963=>array(-43,0,770,763),7964=>array(-71,0,770,763),7965=>array(-63,0,769,763),7968=>array(68,-199,490,763),7969=>array(68,-199,490,763),7970=>array(68,-199,490,763),7971=>array(68,-199,490,763),7972=>array(68,-199,490,763),7973=>array(68,-199,490,763),7974=>array(68,-199,490,847),7975=>array(68,-199,490,847),7976=>array(-43,0,667,763),7977=>array(-44,0,667,763),7978=>array(-43,0,798,763),7979=>array(-43,0,798,763),7980=>array(-71,0,798,763),7981=>array(-63,0,798,763),7982=>array(-43,0,843,763),7983=>array(-43,0,843,763),7984=>array(59,0,162,763),7985=>array(53,0,156,763),7986=>array(-13,0,236,763),7987=>array(-13,0,236,763),7988=>array(-15,0,251,763),7989=>array(-15,0,243,763),7990=>array(-36,0,253,847),7991=>array(-36,0,253,847),7992=>array(-43,0,212,763),7993=>array(-44,0,212,763),7994=>array(-43,0,343,763),7995=>array(-43,0,343,763),7996=>array(-71,0,343,763),7997=>array(-63,0,343,763),7998=>array(-43,0,388,763),7999=>array(-43,0,388,763),8000=>array(35,-12,521,763),8001=>array(35,-12,521,763),8002=>array(35,-12,521,763),8003=>array(35,-12,521,763),8004=>array(35,-12,521,763),8005=>array(35,-12,521,763),8008=>array(-30,-12,732,763),8009=>array(-38,-12,732,763),8010=>array(-43,-12,848,763),8011=>array(-31,-12,848,763),8012=>array(-37,-12,848,763),8013=>array(-36,-12,848,763),8016=>array(68,-12,483,763),8017=>array(68,-12,483,763),8018=>array(68,-12,483,763),8019=>array(68,-12,483,763),8020=>array(68,-12,483,763),8021=>array(68,-12,483,763),8022=>array(68,-12,483,847),8023=>array(68,-12,483,847),8025=>array(-43,0,771,763),8027=>array(-43,0,887,763),8029=>array(-43,0,879,763),8031=>array(-43,0,934,763),8032=>array(35,-12,731,763),8033=>array(35,-12,731,763),8034=>array(35,-12,731,763),8035=>array(35,-12,731,763),8036=>array(35,-12,731,763),8037=>array(35,-12,731,763),8038=>array(35,-12,731,847),8039=>array(35,-12,731,847),8040=>array(-30,0,706,763),8041=>array(-38,0,706,763),8042=>array(-43,0,822,763),8043=>array(-43,0,822,763),8044=>array(-43,0,816,763),8045=>array(-43,0,815,763),8046=>array(-43,0,859,763),8047=>array(-43,0,859,763),8048=>array(35,-12,541,736),8049=>array(35,-12,541,736),8050=>array(29,-12,405,736),8051=>array(29,-12,405,736),8052=>array(68,-199,490,736),8053=>array(68,-199,490,736),8054=>array(35,0,155,736),8055=>array(67,0,187,736),8056=>array(35,-12,521,736),8057=>array(35,-12,521,736),8058=>array(68,-12,483,736),8059=>array(68,-12,483,736),8060=>array(35,-12,731,736),8061=>array(35,-12,731,736),8064=>array(35,-208,541,763),8065=>array(35,-208,541,763),8066=>array(35,-208,541,763),8067=>array(35,-208,541,763),8068=>array(35,-208,541,763),8069=>array(35,-208,541,763),8070=>array(35,-208,541,847),8071=>array(35,-208,541,847),8072=>array(-1,-208,668,763),8073=>array(-1,-208,668,763),8074=>array(-50,-208,681,763),8075=>array(-50,-208,681,763),8076=>array(-46,-208,681,763),8077=>array(-38,-208,681,763),8078=>array(-43,-208,719,763),8079=>array(-43,-208,719,763),8080=>array(68,-208,490,763),8081=>array(68,-208,490,763),8082=>array(68,-208,490,763),8083=>array(68,-208,490,763),8084=>array(68,-208,490,763),8085=>array(68,-208,490,763),8086=>array(68,-208,490,847),8087=>array(68,-208,490,847),8088=>array(-43,-208,667,763),8089=>array(-44,-208,667,763),8090=>array(-43,-208,798,763),8091=>array(-43,-208,798,763),8092=>array(-71,-208,798,763),8093=>array(-63,-208,798,763),8094=>array(-43,-208,843,763),8095=>array(-43,-208,843,763),8096=>array(35,-208,731,763),8097=>array(35,-208,731,763),8098=>array(35,-208,731,763),8099=>array(35,-208,731,763),8100=>array(35,-208,731,763),8101=>array(35,-208,731,763),8102=>array(35,-208,731,847),8103=>array(35,-208,731,847),8104=>array(-30,-208,706,763),8105=>array(-38,-208,706,763),8106=>array(-43,-208,822,763),8107=>array(-43,-208,822,763),8108=>array(-43,-208,816,763),8109=>array(-43,-208,815,763),8110=>array(-43,-208,859,763),8111=>array(-43,-208,859,763),8112=>array(35,-12,541,722),8113=>array(35,-12,541,697),8114=>array(35,-208,541,736),8115=>array(35,-208,541,530),8116=>array(35,-208,541,736),8118=>array(35,-12,541,717),8119=>array(35,-208,541,717),8120=>array(-1,0,668,889),8121=>array(-1,0,668,835),8122=>array(-1,0,668,736),8123=>array(-1,0,668,736),8124=>array(-1,-208,668,716),8125=>array(86,579,189,763),8126=>array(111,-208,289,-42),8127=>array(86,579,189,763),8128=>array(-5,590,284,717),8129=>array(-5,591,284,819),8130=>array(68,-208,490,736),8131=>array(68,-208,490,530),8132=>array(68,-208,490,736),8134=>array(68,-199,490,717),8135=>array(68,-208,490,717),8136=>array(-43,0,640,736),8137=>array(-43,0,651,736),8138=>array(-43,0,668,736),8139=>array(-43,0,679,736),8140=>array(80,-208,642,716),8141=>array(16,579,265,763),8142=>array(16,579,282,763),8143=>array(-5,583,284,847),8144=>array(-34,0,255,722),8145=>array(-41,0,264,697),8146=>array(-55,0,276,736),8147=>array(-55,0,276,736),8150=>array(-34,0,255,717),8151=>array(-32,0,257,819),8152=>array(-5,0,284,889),8153=>array(-14,0,291,835),8154=>array(-43,0,213,736),8155=>array(-43,0,213,736),8157=>array(16,579,265,763),8158=>array(16,579,274,763),8159=>array(-5,583,284,847),8160=>array(68,-12,483,722),8161=>array(68,-12,483,697),8162=>array(68,-12,483,736),8163=>array(68,-12,483,736),8164=>array(66,-199,536,763),8165=>array(66,-199,536,763),8166=>array(68,-12,483,717),8167=>array(68,-12,483,819),8168=>array(5,0,661,889),8169=>array(5,0,661,835),8170=>array(-43,0,736,736),8171=>array(-43,0,740,736),8172=>array(-43,0,649,763),8173=>array(-27,600,304,736),8174=>array(-27,600,304,736),8175=>array(70,600,189,736),8178=>array(35,-208,731,736),8179=>array(35,-208,731,518),8180=>array(35,-208,731,736),8182=>array(35,-12,731,717),8183=>array(35,-208,731,717),8184=>array(-17,-12,732,736),8185=>array(-6,-12,732,736),8186=>array(-17,0,706,736),8187=>array(-6,0,706,736),8188=>array(52,-208,706,728),8189=>array(84,600,203,736),8190=>array(88,579,191,763),8208=>array(32,215,301,303),8209=>array(32,215,301,303),8210=>array(-6,223,562,295),8211=>array(-6,223,506,295),8212=>array(-6,223,1006,295),8213=>array(26,223,538,295),8214=>array(92,-85,336,716),8215=>array(-6,-165,506,-35),8216=>array(64,494,166,728),8217=>array(56,482,158,716),8218=>array(53,-132,155,102),8219=>array(64,482,166,716),8220=>array(43,494,297,728),8221=>array(36,482,290,716),8222=>array(36,-132,290,102),8223=>array(44,482,298,716),8224=>array(39,-169,517,699),8225=>array(39,-169,517,706),8226=>array(51,227,299,474),8227=>array(52,197,321,504),8228=>array(89,0,189,100),8229=>array(89,0,467,100),8230=>array(117,0,883,100),8231=>array(89,302,189,402),8240=>array(18,-27,982,728),8241=>array(18,-27,1310,728),8242=>array(46,462,192,716),8243=>array(46,462,342,716),8244=>array(46,462,492,716),8245=>array(30,462,176,716),8246=>array(30,462,326,716),8247=>array(30,462,476,716),8248=>array(30,-175,282,32),8249=>array(44,35,271,481),8250=>array(62,35,289,481),8251=>array(116,-125,883,641),8252=>array(85,0,387,716),8253=>array(46,0,508,747),8254=>array(-6,740,506,790),8255=>array(3,-203,941,4),8256=>array(3,578,941,785),8257=>array(30,-175,282,146),8258=>array(33,-3,786,728),8259=>array(32,185,301,333),8260=>array(-222,-25,393,732),8261=>array(68,-199,262,716),8262=>array(16,-199,210,716),8304=>array(15,349,318,725),8308=>array(11,358,319,725),8309=>array(16,349,313,716),8310=>array(9,349,315,725),8311=>array(36,358,304,716),8312=>array(22,349,312,725),8313=>array(18,349,323,725),8314=>array(37,395,296,654),8315=>array(37,496,296,553),8316=>array(37,436,296,613),8317=>array(32,209,195,769),8318=>array(16,209,178,769),8319=>array(51,358,293,646),8320=>array(15,-24,318,352),8321=>array(52,-15,232,352),8322=>array(12,-15,316,352),8323=>array(16,-24,315,352),8324=>array(11,-15,319,352),8325=>array(16,-24,313,343),8326=>array(9,-24,315,352),8327=>array(36,-15,304,343),8328=>array(22,-24,312,352),8329=>array(18,-24,323,352),8330=>array(37,22,296,281),8331=>array(37,123,296,180),8332=>array(37,63,296,240),8333=>array(32,-164,195,396),8334=>array(16,-164,178,396),8352=>array(20,0,547,719),8353=>array(51,-63,525,782),8354=>array(45,-12,533,728),8355=>array(80,0,554,716),8356=>array(13,-14,528,728),8357=>array(65,-71,769,652),8358=>array(21,0,535,719),8359=>array(21,0,539,716),8360=>array(18,-12,986,716),8361=>array(8,0,929,716),8362=>array(72,0,712,518),8363=>array(67,0,514,723),8364=>array(-14,-12,541,728),8400=>array(28,574,552,716),8401=>array(48,574,572,716),8402=>array(264,-194,336,706),8403=>array(264,-12,336,524),8404=>array(34,419,668,646),8405=>array(32,419,666,646),8406=>array(28,504,555,716),8407=>array(45,504,572,716),8408=>array(146,102,454,410),8409=>array(146,102,465,421),8410=>array(146,91,465,410),8411=>array(112,611,488,707),8412=>array(42,611,558,707),8413=>array(63,-131,837,643),8414=>array(93,-101,807,613),8415=>array(9,-186,891,697),8416=>array(63,-131,837,643),8417=>array(28,504,672,716),8448=>array(46,-27,825,728),8449=>array(46,-27,822,728),8450=>array(37,-15,632,677),8451=>array(44,-12,983,728),8452=>array(41,0,588,662),8453=>array(53,-27,836,728),8454=>array(53,-27,823,728),8455=>array(42,-15,480,677),8456=>array(30,-15,630,677),8457=>array(44,0,873,725),8458=>array(-25,-201,523,327),8459=>array(23,-9,1078,665),8460=>array(46,-20,940,698),8461=>array(19,0,703,662),8462=>array(19,-12,458,694),8463=>array(19,-12,458,694),8464=>array(8,-201,834,654),8465=>array(26,-20,498,677),8466=>array(48,-8,842,664),8467=>array(5,-5,288,627),8468=>array(3,-12,739,716),8469=>array(-12,-11,710,662),8470=>array(79,0,1031,716),8471=>array(0,-9,737,728),8472=>array(48,-216,701,516),8473=>array(19,0,524,662),8474=>array(37,-198,685,677),8475=>array(71,-13,951,658),8476=>array(46,-20,747,686),8477=>array(19,0,677,662),8478=>array(19,0,677,662),8479=>array(19,-176,677,817),8480=>array(93,311,866,723),8481=>array(100,318,1085,716),8482=>array(100,318,861,716),8483=>array(10,-176,711,817),8484=>array(11,0,581,662),8485=>array(50,-192,494,690),8486=>array(28,0,740,677),8487=>array(28,-15,740,662),8488=>array(28,-194,644,687),8489=>array(2,0,245,530),8490=>array(73,0,665,716),8491=>array(-1,0,668,922),8492=>array(105,-5,951,659),8493=>array(53,-20,627,697),8494=>array(35,-12,521,530),8495=>array(31,-4,398,328),8496=>array(75,-6,671,666),8497=>array(35,-6,885,668),8498=>array(47,0,530,716),8499=>array(36,-12,1214,661),8500=>array(37,-6,379,318),8501=>array(64,-19,649,716),8502=>array(67,0,631,716),8503=>array(25,0,325,716),8504=>array(72,-18,630,716),8531=>array(52,-25,815,732),8532=>array(12,-25,815,732),8533=>array(52,-25,813,732),8534=>array(12,-25,813,732),8535=>array(16,-25,813,732),8536=>array(11,-25,813,732),8537=>array(52,-25,813,732),8538=>array(16,-25,813,732),8539=>array(52,-25,804,732),8540=>array(16,-25,804,732),8541=>array(16,-25,804,732),8542=>array(73,-25,804,732),8543=>array(52,-25,727,732),8544=>array(92,0,187,716),8545=>array(92,0,464,716),8546=>array(92,0,741,716),8547=>array(92,0,934,716),8548=>array(6,0,660,716),8549=>array(6,0,843,716),8550=>array(2,0,960,716),8551=>array(2,0,1197,716),8552=>array(92,0,940,716),8553=>array(5,0,661,716),8554=>array(5,0,853,716),8555=>array(5,0,964,716),8556=>array(75,0,523,716),8557=>array(51,-12,683,728),8558=>array(80,0,672,716),8559=>array(76,0,757,716),8560=>array(67,0,155,716),8561=>array(67,0,377,716),8562=>array(67,0,599,716),8563=>array(67,0,697,716),8564=>array(13,0,488,518),8565=>array(13,0,633,716),8566=>array(13,0,855,716),8567=>array(13,0,1077,716),8568=>array(67,0,708,716),8569=>array(7,0,493,518),8570=>array(7,0,645,716),8571=>array(7,0,867,716),8572=>array(67,0,155,716),8573=>array(39,-12,491,530),8574=>array(36,-12,486,716),8575=>array(65,0,769,530),8576=>array(47,0,936,716),8577=>array(80,0,672,716),8578=>array(47,0,936,716),8592=>array(40,100,673,412),8593=>array(201,0,513,662),8594=>array(40,100,673,412),8595=>array(201,0,513,662),8596=>array(40,100,673,412),8597=>array(201,0,513,662),8598=>array(100,102,586,588),8599=>array(128,102,614,588),8600=>array(128,74,614,560),8601=>array(100,74,586,560),8602=>array(40,100,673,412),8603=>array(40,100,673,412),8604=>array(40,100,674,412),8605=>array(39,100,673,412),8606=>array(40,100,673,412),8607=>array(201,0,513,662),8608=>array(40,100,673,412),8609=>array(201,0,513,662),8610=>array(40,100,673,412),8611=>array(40,100,673,412),8612=>array(40,100,673,412),8613=>array(201,0,513,662),8614=>array(40,100,673,412),8615=>array(201,0,513,662),8616=>array(201,0,513,662),8617=>array(40,100,673,482),8618=>array(40,100,673,482),8619=>array(40,100,673,500),8620=>array(40,100,673,500),8621=>array(40,100,774,412),8622=>array(40,100,773,412),8623=>array(199,0,520,662),8624=>array(120,71,553,603),8625=>array(160,71,593,603),8626=>array(120,59,553,591),8627=>array(160,59,593,591),8628=>array(97,94,629,527),8629=>array(120,59,553,591),8630=>array(67,181,638,497),8631=>array(75,181,646,497),8632=>array(81,102,633,662),8633=>array(40,-56,673,568),8634=>array(60,21,740,701),8635=>array(60,21,740,701),8636=>array(40,232,673,412),8637=>array(40,100,673,280),8638=>array(333,0,513,662),8639=>array(201,0,381,662),8640=>array(40,232,673,412),8641=>array(40,100,673,280),8642=>array(333,0,513,662),8643=>array(201,0,381,662),8644=>array(40,-56,673,568),8645=>array(45,0,669,662),8646=>array(40,-56,673,568),8647=>array(40,-56,673,568),8648=>array(45,0,669,662),8649=>array(40,-56,673,568),8650=>array(45,0,669,662),8651=>array(39,30,672,482),8652=>array(40,30,673,482),8653=>array(40,40,673,472),8654=>array(40,40,910,472),8655=>array(40,40,673,472),8656=>array(40,40,673,472),8657=>array(141,0,573,662),8658=>array(40,40,673,472),8659=>array(141,0,573,662),8660=>array(40,40,823,472),8661=>array(141,0,573,783),8662=>array(100,0,688,588),8663=>array(26,0,614,588),8664=>array(26,0,614,588),8665=>array(100,0,688,588),8666=>array(40,40,673,472),8667=>array(40,40,673,472),8668=>array(40,100,773,412),8669=>array(40,100,773,412),8670=>array(201,0,513,662),8671=>array(201,0,513,662),8672=>array(40,100,673,412),8673=>array(201,0,513,662),8674=>array(40,100,673,412),8675=>array(201,0,513,662),8676=>array(40,100,673,412),8677=>array(40,100,673,412),8678=>array(40,40,673,472),8679=>array(141,0,573,662),8680=>array(40,40,673,472),8681=>array(141,0,573,662),8682=>array(141,0,573,662),8704=>array(27,0,573,689),8705=>array(80,-60,528,702),8706=>array(32,-15,486,695),8707=>array(115,0,475,689),8708=>array(115,-73,475,762),8709=>array(46,-23,755,686),8710=>array(6,0,608,688),8711=>array(6,0,608,688),8712=>array(43,33,498,480),8713=>array(43,-57,498,570),8714=>array(89,78,453,435),8715=>array(51,33,506,480),8716=>array(51,-57,506,570),8717=>array(96,78,460,435),8718=>array(98,0,451,512),8719=>array(25,-101,803,751),8720=>array(25,-101,803,751),8721=>array(17,-101,695,752),8722=>array(55,312,529,394),8723=>array(55,0,529,611),8724=>array(55,0,529,627),8725=>array(-222,-25,393,732),8726=>array(0,-24,278,716),8727=>array(33,194,356,499),8728=>array(65,207,335,478),8729=>array(65,207,335,478),8730=>array(41,-19,549,782),8731=>array(41,-19,549,782),8732=>array(41,-19,549,782),8733=>array(75,128,447,384),8734=>array(20,99,529,414),8735=>array(55,0,529,474),8736=>array(55,0,529,474),8737=>array(55,0,529,474),8738=>array(55,-98,444,572),8739=>array(92,-199,168,716),8740=>array(92,-199,352,716),8741=>array(92,-199,326,716),8742=>array(92,-199,510,716),8743=>array(20,0,542,568),8744=>array(20,0,542,568),8745=>array(50,0,512,568),8746=>array(50,0,512,568),8747=>array(63,-271,434,1022),8748=>array(63,-271,734,1022),8749=>array(63,-271,1034,1022),8750=>array(33,-271,459,1022),8751=>array(33,-271,759,1022),8752=>array(33,-271,1059,1022),8753=>array(33,-271,488,1022),8754=>array(33,-271,488,1022),8755=>array(33,-271,498,1022),8756=>array(42,0,521,528),8757=>array(42,0,521,528),8758=>array(161,0,260,528),8759=>array(42,0,521,528),8760=>array(55,312,529,567),8761=>array(55,139,529,567),8762=>array(55,139,529,567),8763=>array(55,139,529,567),8764=>array(55,279,529,424),8765=>array(55,279,529,424),8766=>array(35,212,539,496),8767=>array(40,72,544,636),8768=>array(139,0,284,592),8769=>array(55,171,529,533),8770=>array(55,202,529,535),8771=>array(55,203,529,536),8772=>array(55,91,529,613),8773=>array(55,123,529,584),8774=>array(55,51,529,614),8775=>array(55,51,529,633),8776=>array(55,171,529,533),8777=>array(55,81,529,603),8778=>array(55,123,529,584),8779=>array(55,97,529,584),8780=>array(35,53,539,654),8781=>array(55,155,529,551),8782=>array(55,58,529,648),8783=>array(55,203,529,648),8784=>array(55,203,529,676),8785=>array(55,59,529,647),8786=>array(55,59,529,647),8787=>array(55,59,529,647),8788=>array(55,195,682,511),8789=>array(55,195,682,511),8790=>array(55,189,529,518),8791=>array(55,0,529,617),8792=>array(55,0,529,518),8793=>array(55,0,529,630),8794=>array(55,0,529,630),8795=>array(55,0,529,651),8796=>array(55,0,529,701),8797=>array(55,0,529,605),8798=>array(55,0,529,532),8799=>array(55,0,529,601),8800=>array(55,103,529,603),8801=>array(55,123,529,557),8802=>array(55,23,529,657),8803=>array(55,35,529,645),8804=>array(55,55,529,650),8805=>array(55,55,529,650),8806=>array(55,0,529,783),8807=>array(55,0,529,783),8808=>array(55,-85,529,783),8809=>array(55,-85,529,783),8810=>array(55,111,914,595),8811=>array(55,111,914,595),8812=>array(143,-210,441,728),8813=>array(55,103,529,603),8814=>array(55,23,529,657),8815=>array(55,23,529,657),8816=>array(55,-141,529,657),8817=>array(55,-141,529,657),8818=>array(55,-1,529,656),8819=>array(55,-1,529,656),8820=>array(55,-91,529,718),8821=>array(55,-91,529,718),8822=>array(55,-27,529,821),8823=>array(55,-27,529,821),8824=>array(55,-27,529,821),8825=>array(55,-27,529,821),8826=>array(55,111,529,595),8827=>array(55,111,529,595),8828=>array(55,-33,529,595),8829=>array(55,-33,529,595),8830=>array(55,-1,529,656),8831=>array(55,-1,529,656),8832=>array(55,23,529,657),8833=>array(55,23,529,657),8834=>array(55,122,623,584),8835=>array(55,122,623,584),8836=>array(55,22,623,684),8837=>array(55,22,623,684),8838=>array(55,0,623,626),8839=>array(55,0,623,626),8840=>array(55,-100,623,726),8841=>array(55,-100,623,726),8842=>array(55,-100,623,626),8843=>array(55,-100,623,626),8844=>array(50,0,512,568),8845=>array(50,0,512,568),8846=>array(50,0,512,568),8847=>array(55,122,623,584),8848=>array(55,122,623,584),8849=>array(55,0,623,626),8850=>array(55,0,623,626),8851=>array(50,0,512,568),8852=>array(50,0,512,568),8853=>array(59,-85,741,597),8854=>array(59,-85,741,597),8855=>array(59,-85,741,597),8856=>array(59,-85,741,597),8857=>array(59,-85,741,597),8858=>array(59,-85,741,597),8859=>array(59,-85,741,597),8860=>array(59,-85,741,597),8861=>array(59,-85,741,597),8862=>array(60,0,741,681),8863=>array(60,0,741,681),8864=>array(60,0,741,681),8865=>array(60,0,741,681),8866=>array(60,0,531,512),8867=>array(18,0,489,512),8868=>array(18,0,531,512),8869=>array(18,0,531,512),8870=>array(60,0,381,512),8871=>array(60,0,381,512),8872=>array(60,0,531,512),8873=>array(60,0,531,512),8874=>array(60,0,531,512),8875=>array(60,0,654,512),8876=>array(60,0,531,513),8877=>array(60,0,531,513),8878=>array(60,0,531,513),8879=>array(60,0,654,513),8880=>array(18,-54,531,566),8881=>array(18,-54,531,566),8882=>array(18,0,531,512),8883=>array(18,0,531,512),8884=>array(18,-51,531,562),8885=>array(18,-51,531,562),8886=>array(40,153,673,359),8887=>array(40,153,673,359),8888=>array(40,153,673,359),8889=>array(18,0,531,512),8890=>array(88,0,461,632),8891=>array(50,0,534,638),8892=>array(50,0,534,638),8893=>array(50,0,534,638),8894=>array(55,0,529,474),8895=>array(55,0,529,474),8896=>array(20,0,542,568),8897=>array(20,0,542,568),8898=>array(50,0,512,568),8899=>array(50,0,512,568),8900=>array(156,106,395,406),8901=>array(55,186,195,326),8902=>array(39,39,511,488),8903=>array(30,9,620,502),8904=>array(29,-64,601,576),8905=>array(29,-64,601,576),8906=>array(29,-64,601,576),8907=>array(29,-64,601,576),8908=>array(29,-64,601,576),8909=>array(55,203,529,536),8910=>array(18,0,542,568),8911=>array(18,0,542,568),8912=>array(56,84,623,626),8913=>array(56,84,623,626),8914=>array(63,0,605,567),8915=>array(63,0,605,567),8916=>array(50,0,512,716),8917=>array(55,-199,529,716),8918=>array(55,111,529,595),8919=>array(55,111,529,595),8920=>array(55,111,1299,595),8921=>array(55,111,1299,595),8922=>array(55,-217,529,927),8923=>array(55,-217,529,927),8924=>array(55,55,529,650),8925=>array(55,55,529,650),8926=>array(55,-33,529,595),8927=>array(55,-33,529,595),8928=>array(55,-141,529,657),8929=>array(55,-141,529,657),8930=>array(55,-100,623,726),8931=>array(55,-100,623,726),8932=>array(55,-100,623,626),8933=>array(55,-100,623,626),8934=>array(55,-71,529,656),8935=>array(55,-71,529,656),8936=>array(55,-71,529,656),8937=>array(55,-71,529,656),8938=>array(55,23,529,657),8939=>array(55,23,529,657),8940=>array(55,-45,529,712),8941=>array(55,-45,529,712),8942=>array(89,0,189,766),8943=>array(117,333,883,433),8944=>array(117,0,883,766),8945=>array(117,0,883,766),8960=>array(60,41,490,471),8962=>array(51,24,498,486),8963=>array(129,180,419,395),8964=>array(129,117,419,332),8965=>array(78,130,471,441),8966=>array(78,130,471,565),8967=>array(191,-192,359,693),8968=>array(103,58,346,694),8969=>array(103,58,346,694),8970=>array(103,-192,346,444),8971=>array(103,-192,346,444),8972=>array(251,-40,571,280),8973=>array(-22,-40,299,280),8974=>array(251,232,571,552),8975=>array(-22,232,299,552),8976=>array(49,163,511,403),8977=>array(83,64,467,448),8978=>array(59,156,741,497),8979=>array(59,156,741,497),8980=>array(34,100,516,441),8981=>array(27,9,490,471),8982=>array(26,-102,523,614),8983=>array(18,-51,632,563),8984=>array(63,0,717,654),8985=>array(49,109,511,349),8986=>array(45,-20,505,532),8987=>array(103,0,447,512),8988=>array(111,140,391,420),8989=>array(158,140,439,420),8990=>array(111,92,391,372),8991=>array(158,92,439,372),8992=>array(180,-218,434,752),8993=>array(63,-188,313,782),8994=>array(17,159,696,341),8995=>array(17,171,696,353),8996=>array(18,226,982,547),8997=>array(18,0,982,512),8998=>array(90,0,948,600),8999=>array(90,0,910,600),9000=>array(90,0,910,600),9001=>array(32,-184,299,694),9002=>array(30,-184,297,694),9003=>array(52,0,910,600),9004=>array(57,6,493,509),9005=>array(13,77,537,435),9006=>array(100,108,465,400),9007=>array(38,132,511,380),9008=>array(38,0,504,525),9009=>array(81,62,509,450),9010=>array(35,50,531,462),9011=>array(35,186,531,392),9012=>array(51,84,498,419),9013=>array(51,84,498,419),9014=>array(60,0,540,559),9015=>array(140,0,460,559),9016=>array(60,0,540,559),9017=>array(60,0,540,559),9018=>array(60,0,540,559),9019=>array(60,0,540,559),9020=>array(60,0,540,559),9021=>array(104,0,496,559),9022=>array(60,39,540,519),9023=>array(84,0,517,559),9024=>array(83,0,516,559),9025=>array(60,0,540,559),9026=>array(60,0,540,559),9027=>array(60,0,540,559),9028=>array(60,0,540,559),9029=>array(13,0,556,559),9030=>array(44,0,587,559),9031=>array(60,0,540,559),9032=>array(60,0,540,559),9033=>array(104,0,496,559),9034=>array(60,0,540,559),9035=>array(122,0,478,559),9036=>array(60,0,540,559),9037=>array(60,0,540,559),9038=>array(60,0,540,559),9039=>array(60,0,540,559),9040=>array(60,0,540,559),9041=>array(60,0,540,559),9042=>array(122,0,478,559),9043=>array(60,0,540,559),9044=>array(60,0,540,559),9045=>array(60,0,540,559),9046=>array(60,0,540,559),9047=>array(60,0,540,559),9048=>array(160,0,440,559),9049=>array(60,0,540,559),9050=>array(60,0,540,559),9051=>array(60,0,540,397),9052=>array(60,0,540,475),9053=>array(60,0,540,559),9054=>array(60,0,540,559),9055=>array(60,39,540,519),9056=>array(60,0,540,559),9057=>array(60,0,540,559),9058=>array(122,0,478,559),9059=>array(153,157,447,509),9060=>array(153,161,447,524),9061=>array(104,33,496,559),9062=>array(60,0,540,559),9063=>array(54,0,542,559),9064=>array(50,131,549,464),9065=>array(148,122,452,559),9066=>array(160,122,440,478),9067=>array(103,68,502,508),9068=>array(93,-14,504,573),9069=>array(50,0,549,559),9070=>array(160,-136,440,559),9071=>array(60,0,540,559),9072=>array(60,0,540,559),9073=>array(51,55,550,469),9074=>array(50,89,549,503),9075=>array(163,-14,427,475),9076=>array(90,-212,525,475),9077=>array(26,-14,574,475),9078=>array(60,-136,555,475),9079=>array(60,-136,540,480),9080=>array(160,-136,440,475),9081=>array(26,-136,574,475),9082=>array(61,-14,555,475),9109=>array(60,0,540,559),9216=>array(30,0,565,689),9217=>array(37,0,564,694),9218=>array(37,0,587,694),9219=>array(41,0,587,689),9220=>array(41,0,582,689),9221=>array(41,-42,583,689),9222=>array(9,0,594,689),9223=>array(34,0,565,689),9224=>array(134,112,465,574),9225=>array(134,116,482,574),9226=>array(141,116,462,574),9227=>array(109,116,482,574),9228=>array(141,116,462,574),9229=>array(120,116,489,579),9230=>array(137,112,472,579),9231=>array(137,116,449,579),9232=>array(34,0,560,689),9233=>array(34,0,564,689),9234=>array(34,0,558,689),9235=>array(34,-4,559,689),9236=>array(34,0,573,689),9237=>array(30,0,594,689),9238=>array(37,0,568,694),9239=>array(41,0,575,689),9240=>array(20,0,568,694),9241=>array(141,116,472,574),9242=>array(37,0,575,694),9243=>array(41,-4,573,689),9244=>array(141,112,465,574),9245=>array(120,112,465,579),9246=>array(134,112,465,574),9247=>array(134,112,465,574),9248=>array(137,116,471,579),9249=>array(34,0,565,689),9250=>array(46,-12,561,716),9251=>array(96,-126,505,0),9252=>array(130,116,465,574),9280=>array(103,1,514,650),9281=>array(102,0,514,650),9282=>array(103,1,514,650),9283=>array(103,1,514,650),9284=>array(102,1,514,650),9285=>array(102,336,514,650),9286=>array(102,0,648,702),9287=>array(102,0,648,702),9288=>array(102,117,648,663),9289=>array(102,195,648,507),9290=>array(30,1,574,650),9312=>array(81,-109,919,728),9313=>array(81,-109,919,728),9314=>array(81,-109,919,728),9315=>array(81,-109,919,728),9316=>array(81,-109,919,728),9317=>array(81,-109,919,728),9318=>array(81,-109,919,728),9319=>array(81,-109,919,728),9320=>array(81,-109,919,728),9321=>array(81,-109,919,728),9322=>array(81,-109,919,728),9323=>array(81,-109,919,728),9324=>array(81,-109,919,728),9325=>array(81,-109,919,728),9326=>array(81,-109,919,728),9327=>array(81,-109,919,728),9328=>array(81,-109,919,728),9329=>array(81,-109,919,728),9330=>array(81,-109,919,728),9331=>array(81,-109,919,728),9332=>array(81,-67,919,683),9333=>array(81,-67,919,683),9334=>array(81,-67,919,683),9335=>array(81,-67,919,683),9336=>array(81,-67,919,683),9337=>array(81,-67,919,683),9338=>array(81,-67,919,683),9339=>array(81,-67,919,683),9340=>array(81,-67,919,683),9341=>array(81,-67,919,683),9342=>array(81,-67,919,683),9343=>array(81,-67,919,683),9344=>array(81,-67,919,683),9345=>array(81,-67,919,683),9346=>array(81,-67,919,683),9347=>array(81,-67,919,683),9348=>array(81,-67,919,683),9349=>array(81,-67,919,683),9350=>array(81,-67,919,683),9351=>array(81,-67,919,683),9352=>array(301,79,627,547),9353=>array(273,79,717,547),9354=>array(277,72,717,547),9355=>array(253,79,717,545),9356=>array(272,72,717,539),9357=>array(266,72,717,547),9358=>array(294,79,717,539),9359=>array(275,72,717,547),9360=>array(282,72,717,547),9361=>array(163,72,807,547),9362=>array(191,79,807,547),9363=>array(155,79,807,547),9364=>array(155,72,807,547),9365=>array(159,79,807,547),9366=>array(159,72,807,547),9367=>array(159,72,807,547),9368=>array(159,79,807,547),9369=>array(159,72,807,547),9370=>array(159,72,807,547),9371=>array(185,72,817,547),9372=>array(81,-67,919,683),9373=>array(81,-67,919,683),9374=>array(81,-67,919,683),9375=>array(81,-67,919,683),9376=>array(81,-67,919,683),9377=>array(81,-67,919,683),9378=>array(81,-67,919,683),9379=>array(81,-67,919,683),9380=>array(81,-67,919,683),9381=>array(81,-67,919,683),9382=>array(81,-67,919,683),9383=>array(81,-67,919,683),9384=>array(81,-67,919,683),9385=>array(81,-67,919,683),9386=>array(81,-67,919,683),9387=>array(81,-67,919,683),9388=>array(81,-67,919,683),9389=>array(81,-67,919,683),9390=>array(81,-67,919,683),9391=>array(81,-67,919,683),9392=>array(81,-67,919,683),9393=>array(81,-67,919,683),9394=>array(81,-67,919,683),9395=>array(81,-67,919,683),9396=>array(81,-67,919,683),9397=>array(81,-67,919,683),9398=>array(81,-109,919,728),9399=>array(81,-109,919,728),9400=>array(81,-109,919,728),9401=>array(81,-109,919,728),9402=>array(81,-109,919,728),9403=>array(81,-109,919,728),9404=>array(81,-109,919,728),9405=>array(81,-109,919,728),9406=>array(81,-109,919,728),9407=>array(81,-109,919,728),9408=>array(81,-109,919,728),9409=>array(81,-109,919,728),9410=>array(81,-109,919,728),9411=>array(81,-109,919,728),9412=>array(81,-109,919,728),9413=>array(81,-109,919,728),9414=>array(81,-109,919,728),9415=>array(81,-109,919,728),9416=>array(81,-109,919,728),9417=>array(81,-109,919,728),9418=>array(81,-109,919,728),9419=>array(81,-109,919,728),9420=>array(81,-109,919,728),9421=>array(81,-109,919,728),9422=>array(81,-109,919,728),9423=>array(81,-109,919,728),9424=>array(81,-109,919,728),9425=>array(81,-109,919,728),9426=>array(81,-109,919,728),9427=>array(81,-109,919,728),9428=>array(81,-109,919,728),9429=>array(81,-109,919,728),9430=>array(81,-109,919,728),9431=>array(81,-109,919,728),9432=>array(81,-109,919,728),9433=>array(81,-109,919,728),9434=>array(81,-109,919,728),9435=>array(81,-109,919,728),9436=>array(81,-109,919,728),9437=>array(81,-109,919,728),9438=>array(81,-109,919,728),9439=>array(81,-109,919,728),9440=>array(81,-109,919,728),9441=>array(81,-109,919,728),9442=>array(81,-109,919,728),9443=>array(81,-109,919,728),9444=>array(81,-109,919,728),9445=>array(81,-109,919,728),9446=>array(81,-109,919,728),9447=>array(81,-109,919,728),9448=>array(81,-109,919,728),9449=>array(81,-109,919,728),9450=>array(81,-109,919,728),9472=>array(-11,340,611,425),9473=>array(-11,303,611,474),9474=>array(258,-218,343,994),9475=>array(215,-218,386,994),9476=>array(-11,346,611,431),9477=>array(-11,303,611,474),9478=>array(258,-218,343,994),9479=>array(215,-218,386,994),9480=>array(-11,346,611,431),9481=>array(-11,303,611,474),9482=>array(258,-218,343,994),9483=>array(215,-218,386,994),9484=>array(258,-218,611,431),9485=>array(258,-218,611,474),9486=>array(215,-218,611,431),9487=>array(215,-218,611,474),9488=>array(-11,-218,343,431),9489=>array(-11,-218,343,474),9490=>array(-11,-218,386,431),9491=>array(-11,-218,386,474),9492=>array(258,346,611,994),9493=>array(258,303,611,994),9494=>array(215,346,611,994),9495=>array(215,303,611,994),9496=>array(-11,346,343,994),9497=>array(-11,303,343,994),9498=>array(-11,346,386,994),9499=>array(-11,303,386,994),9500=>array(258,-218,611,994),9501=>array(258,-218,611,994),9502=>array(215,-218,611,994),9503=>array(215,-218,611,994),9504=>array(215,-218,611,994),9505=>array(215,-218,611,994),9506=>array(215,-218,611,994),9507=>array(215,-218,611,994),9508=>array(-11,-218,343,994),9509=>array(-11,-218,343,994),9510=>array(-11,-218,386,994),9511=>array(-11,-218,386,994),9512=>array(-11,-218,386,994),9513=>array(-11,-218,386,994),9514=>array(-11,-218,386,994),9515=>array(-11,-218,386,994),9516=>array(-11,-218,611,431),9517=>array(-11,-218,611,474),9518=>array(-11,-218,611,474),9519=>array(-11,-218,611,474),9520=>array(-11,-218,611,431),9521=>array(-11,-218,611,474),9522=>array(-11,-218,611,474),9523=>array(-11,-218,611,474),9524=>array(-11,346,611,994),9525=>array(-11,303,611,994),9526=>array(-11,303,611,994),9527=>array(-11,303,611,994),9528=>array(-11,346,611,994),9529=>array(-11,303,611,994),9530=>array(-11,303,611,994),9531=>array(-11,303,611,994),9532=>array(-11,-218,611,994),9533=>array(-11,-218,611,994),9534=>array(-11,-218,611,994),9535=>array(-11,-218,611,994),9536=>array(-11,-218,611,994),9537=>array(-11,-218,611,994),9538=>array(-11,-218,611,994),9539=>array(-11,-218,611,994),9540=>array(-11,-218,611,994),9541=>array(-11,-218,611,994),9542=>array(-11,-218,611,994),9543=>array(-11,-218,611,994),9544=>array(-11,-218,611,994),9545=>array(-11,-218,611,994),9546=>array(-11,-218,611,994),9547=>array(-11,-218,611,994),9548=>array(-11,346,611,431),9549=>array(-11,303,611,474),9550=>array(258,-218,343,994),9551=>array(215,-218,386,994),9552=>array(-11,261,611,516),9553=>array(173,-218,428,994),9554=>array(258,-218,611,516),9555=>array(173,-218,611,431),9556=>array(173,-218,611,516),9557=>array(-11,-218,343,516),9558=>array(-11,-218,428,431),9559=>array(-11,-218,428,516),9560=>array(258,261,611,994),9561=>array(173,346,611,994),9562=>array(173,261,611,994),9563=>array(-11,261,343,994),9564=>array(-11,346,428,994),9565=>array(-11,261,428,994),9566=>array(258,-218,611,994),9567=>array(173,-218,611,994),9568=>array(173,-218,611,994),9569=>array(-11,-218,343,994),9570=>array(-11,-218,428,994),9571=>array(-11,-218,428,994),9572=>array(-11,-218,611,516),9573=>array(-11,-218,611,431),9574=>array(-11,-218,611,516),9575=>array(-11,261,611,994),9576=>array(-11,346,611,994),9577=>array(-11,261,611,994),9578=>array(-11,-218,611,994),9579=>array(-11,-218,611,994),9580=>array(-11,-218,611,994),9581=>array(258,77,612,431),9582=>array(-11,77,343,431),9583=>array(-11,346,343,700),9584=>array(258,346,612,700),9585=>array(0,88,600,688),9586=>array(0,88,600,688),9587=>array(0,88,600,688),9588=>array(-11,346,258,431),9589=>array(258,431,343,994),9590=>array(343,346,611,431),9591=>array(258,-218,343,346),9592=>array(-11,303,258,474),9593=>array(215,431,386,994),9594=>array(343,303,611,474),9595=>array(215,-218,386,346),9596=>array(-11,303,611,474),9597=>array(215,-218,386,994),9598=>array(-11,303,611,474),9599=>array(215,-218,386,994),9600=>array(-11,388,611,994),9601=>array(-11,-218,611,-66),9602=>array(-11,-218,611,85),9603=>array(-11,-218,611,237),9604=>array(-11,-218,611,388),9605=>array(-11,-218,611,540),9606=>array(-11,-218,611,691),9607=>array(-11,-218,611,843),9608=>array(-11,-218,611,994),9609=>array(-11,-218,525,994),9610=>array(-11,-218,450,994),9611=>array(-11,-218,375,994),9612=>array(-11,-218,300,994),9613=>array(-11,-218,225,994),9614=>array(-11,-218,150,994),9615=>array(-11,-218,75,994),9616=>array(300,-218,611,994),9617=>array(100,-262,600,1043),9618=>array(0,-264,601,1042),9619=>array(0,-262,601,1042),9620=>array(-11,843,611,994),9621=>array(525,-218,611,994),9632=>array(85,160,515,590),9633=>array(85,160,515,590),9634=>array(85,160,515,590),9635=>array(85,160,515,590),9636=>array(85,160,515,590),9637=>array(85,160,515,590),9638=>array(85,160,515,590),9639=>array(85,160,515,590),9640=>array(85,160,515,590),9641=>array(85,160,515,590),9642=>array(192,267,408,483),9643=>array(192,267,408,483),9644=>array(85,267,515,483),9645=>array(85,267,515,483),9646=>array(192,160,408,590),9647=>array(192,160,408,590),9648=>array(79,275,521,475),9649=>array(79,275,521,475),9650=>array(89,211,511,611),9651=>array(89,211,511,611),9652=>array(146,285,454,552),9653=>array(146,285,454,552),9654=>array(136,164,536,586),9655=>array(136,164,536,586),9656=>array(211,221,478,529),9657=>array(211,221,478,529),9658=>array(85,194,541,556),9659=>array(85,194,541,556),9660=>array(89,139,511,539),9661=>array(89,139,511,539),9662=>array(146,198,454,465),9663=>array(146,198,454,465),9664=>array(64,164,464,586),9665=>array(64,164,464,586),9666=>array(122,221,389,529),9667=>array(122,221,389,529),9668=>array(59,194,515,556),9669=>array(59,194,515,556),9670=>array(69,144,531,606),9671=>array(69,144,531,606),9672=>array(69,144,531,606),9673=>array(85,160,515,590),9674=>array(85,80,515,670),9675=>array(85,160,515,590),9676=>array(86,161,514,589),9677=>array(85,160,515,590),9678=>array(85,160,515,590),9679=>array(85,160,515,590),9680=>array(85,160,515,590),9681=>array(85,160,515,590),9682=>array(85,160,515,590),9683=>array(85,160,515,590),9684=>array(85,160,515,590),9685=>array(85,160,515,590),9686=>array(85,160,300,590),9687=>array(300,160,515,590),9688=>array(0,0,600,600),9689=>array(0,0,600,600),9690=>array(0,300,600,600),9691=>array(0,0,600,300),9692=>array(85,375,300,590),9693=>array(300,375,515,590),9694=>array(300,160,515,375),9695=>array(85,160,300,375),9696=>array(85,375,515,590),9697=>array(85,160,515,375),9698=>array(85,160,515,590),9699=>array(85,160,515,590),9700=>array(85,160,515,590),9701=>array(85,160,515,590),9702=>array(193,268,407,482),9703=>array(85,160,515,590),9704=>array(85,160,515,590),9705=>array(85,160,515,590),9706=>array(85,160,515,590),9707=>array(85,160,515,590),9708=>array(89,211,511,611),9709=>array(89,211,511,611),9710=>array(89,211,511,611),9711=>array(20,95,580,655),9728=>array(65,1,685,621),9729=>array(58,166,944,652),9730=>array(76,6,674,622),9731=>array(105,-3,672,690),9732=>array(81,0,923,690),9733=>array(37,0,779,719),9734=>array(37,0,786,720),9735=>array(107,12,356,451),9736=>array(35,53,436,449),9737=>array(70,0,730,660),9738=>array(70,50,730,620),9739=>array(70,50,730,620),9740=>array(200,100,677,577),9741=>array(100,0,700,600),9742=>array(22,63,696,521),9743=>array(22,63,696,521),9744=>array(63,0,671,607),9745=>array(63,0,671,607),9746=>array(63,0,671,607),9747=>array(129,0,633,668),9754=>array(27,56,924,451),9755=>array(36,56,933,451),9756=>array(84,168,899,531),9757=>array(288,-79,651,736),9758=>array(41,168,856,531),9759=>array(288,-36,651,779),9760=>array(24,15,720,725),9761=>array(50,40,546,610),9762=>array(56,22,694,660),9763=>array(46,115,704,724),9764=>array(45,0,535,652),9765=>array(24,0,436,699),9766=>array(35,0,409,699),9767=>array(87,0,589,637),9768=>array(35,0,409,699),9769=>array(54,20,714,680),9770=>array(88,0,727,664),9771=>array(70,-24,778,656),9772=>array(78,-2,596,691),9773=>array(56,0,741,732),9774=>array(64,0,686,622),9775=>array(64,0,686,622),9776=>array(70,0,830,639),9777=>array(70,0,830,639),9778=>array(70,0,830,639),9779=>array(70,0,830,639),9780=>array(70,0,830,639),9781=>array(70,0,830,639),9782=>array(70,0,830,639),9783=>array(70,0,830,639),9784=>array(60,32,690,661),9785=>array(64,0,686,622),9786=>array(64,0,686,622),9787=>array(64,0,686,622),9788=>array(75,11,675,611),9789=>array(84,-189,659,691),9790=>array(91,-189,666,691),9791=>array(150,-100,590,759),9792=>array(100,-100,640,699),9793=>array(100,-30,640,769),9794=>array(60,-30,711,621),9795=>array(45,0,573,699),9796=>array(26,0,432,699),9797=>array(45,0,587,699),9798=>array(23,0,757,719),9799=>array(80,0,487,699),9800=>array(38,0,796,709),9801=>array(36,0,744,703),9802=>array(35,0,699,699),9803=>array(45,0,842,699),9804=>array(41,-176,749,700),9805=>array(42,-162,1002,699),9806=>array(33,0,863,699),9807=>array(42,-72,1067,699),9808=>array(48,0,747,699),9809=>array(29,-90,808,699),9810=>array(36,106,886,618),9811=>array(34,0,662,699),9812=>array(83,-117,913,709),9813=>array(42,-117,954,729),9814=>array(154,-113,842,706),9815=>array(83,-103,913,707),9816=>array(76,-110,912,727),9817=>array(197,-103,803,710),9818=>array(83,-117,913,709),9819=>array(42,-117,954,729),9820=>array(154,-113,842,706),9821=>array(83,-103,913,707),9822=>array(76,-110,912,727),9823=>array(197,-103,803,710),9824=>array(49,0,673,705),9825=>array(49,0,685,705),9826=>array(51,0,623,706),9827=>array(49,0,755,705),9828=>array(49,0,673,705),9829=>array(49,0,685,705),9830=>array(51,0,623,706),9831=>array(49,0,755,705),9832=>array(56,24,804,680),9833=>array(48,0,316,736),9834=>array(48,0,556,736),9835=>array(48,-70,654,766),9836=>array(48,-70,654,766),9837=>array(107,10,400,736),9838=>array(107,-22,333,736),9839=>array(29,-22,411,736),9985=>array(56,49,901,637),9986=>array(38,48,923,635),9987=>array(56,49,901,637),9988=>array(6,0,979,551),9990=>array(68,-201,700,669),9991=>array(30,0,760,730),9992=>array(17,0,772,654),9993=>array(27,28,663,483),9996=>array(64,0,521,582),9997=>array(59,72,824,515),9998=>array(62,113,848,672),9999=>array(35,170,898,521),10000=>array(62,19,849,578),10001=>array(36,135,908,555),10002=>array(51,135,923,555),10003=>array(18,-10,722,706),10004=>array(34,-9,796,765),10005=>array(47,0,715,668),10006=>array(46,0,714,668),10007=>array(0,-58,567,638),10008=>array(25,-67,650,682),10009=>array(35,0,728,693),10010=>array(34,0,727,693),10011=>array(35,0,724,689),10012=>array(35,0,718,683),10013=>array(35,0,460,690),10014=>array(9,0,542,690),10015=>array(38,0,499,690),10016=>array(36,94,542,600),10017=>array(29,-12,663,720),10018=>array(37,-11,750,702),10019=>array(34,0,755,719),10020=>array(34,0,755,719),10021=>array(36,0,755,719),10022=>array(37,0,756,719),10023=>array(38,0,757,719),10025=>array(37,0,786,720),10026=>array(31,-13,757,713),10027=>array(49,0,792,719),10028=>array(37,0,786,719),10029=>array(42,0,791,719),10030=>array(34,0,783,719),10031=>array(35,-14,795,718),10032=>array(49,1,873,718),10033=>array(29,0,714,719),10034=>array(18,0,706,719),10035=>array(35,0,714,679),10036=>array(35,0,756,721),10037=>array(47,0,745,698),10038=>array(37,0,659,699),10039=>array(35,0,741,706),10040=>array(35,0,733,698),10041=>array(35,0,757,729),10042=>array(35,0,725,688),10043=>array(31,0,675,719),10044=>array(34,7,674,728),10045=>array(13,0,669,719),10046=>array(21,0,680,719),10047=>array(35,0,791,737),10048=>array(35,0,780,728),10049=>array(35,0,754,719),10050=>array(44,-14,745,695),10051=>array(28,0,679,719),10052=>array(32,0,655,696),10053=>array(29,0,667,696),10054=>array(1,0,688,687),10055=>array(30,0,757,719),10056=>array(42,-7,745,696),10057=>array(42,30,670,663),10058=>array(60,0,731,718),10059=>array(26,-21,759,711),10061=>array(41,-33,832,638),10063=>array(23,0,739,714),10064=>array(23,0,739,714),10065=>array(23,0,735,714),10066=>array(23,0,735,714),10070=>array(36,-12,749,701),10072=>array(29,0,109,712),10073=>array(29,0,248,712),10074=>array(29,0,386,712),10075=>array(56,265,336,706),10076=>array(56,265,336,706),10077=>array(38,265,630,706),10078=>array(38,265,630,706),10081=>array(87,-157,666,727),10082=>array(60,-14,484,716),10083=>array(28,-14,516,711),10084=>array(35,0,875,703),10085=>array(38,0,644,764),10086=>array(76,-15,681,709),10087=>array(0,110,760,514),10102=>array(35,-14,753,705),10103=>array(35,-14,753,705),10104=>array(35,-14,753,705),10105=>array(35,-14,753,705),10106=>array(35,-14,753,705),10107=>array(35,-14,753,705),10108=>array(35,-14,753,705),10109=>array(35,-14,753,705),10110=>array(35,-14,753,705),10111=>array(35,-14,753,705),10112=>array(35,-14,753,705),10113=>array(35,-14,753,705),10114=>array(35,-14,753,705),10115=>array(35,-14,753,705),10116=>array(35,-14,753,705),10117=>array(35,-14,753,705),10118=>array(35,-14,753,705),10119=>array(35,-14,753,705),10120=>array(35,-14,753,705),10121=>array(35,-14,753,705),10122=>array(35,-14,753,705),10123=>array(35,-14,753,705),10124=>array(35,-14,753,705),10125=>array(35,-14,753,705),10126=>array(35,-14,753,705),10127=>array(35,-14,753,705),10128=>array(35,-14,753,705),10129=>array(35,-14,753,705),10130=>array(35,-14,753,705),10131=>array(35,-14,753,705),10132=>array(22,66,879,640),10136=>array(106,19,675,558),10137=>array(33,73,909,520),10138=>array(121,-28,619,578),10139=>array(28,73,890,603),10140=>array(38,70,891,636),10141=>array(82,137,843,554),10142=>array(82,137,846,554),10143=>array(35,155,799,536),10144=>array(36,94,838,594),10145=>array(13,94,815,594),10146=>array(35,82,889,610),10147=>array(35,82,889,610),10148=>array(103,147,845,543),10149=>array(42,123,900,578),10150=>array(42,55,901,509),10151=>array(45,-85,418,772),10152=>array(21,-68,868,755),10153=>array(36,43,813,648),10154=>array(41,43,807,648),10155=>array(61,129,832,585),10156=>array(61,129,832,585),10157=>array(37,44,665,651),10158=>array(37,44,665,651),10159=>array(38,93,836,620),10161=>array(38,69,836,596),10162=>array(15,0,746,730),10163=>array(23,128,934,561),10164=>array(42,2,725,685),10165=>array(27,166,838,525),10166=>array(20,5,703,685),10167=>array(93,0,791,694),10168=>array(57,166,886,523),10169=>array(98,13,792,710),10170=>array(35,192,805,498),10171=>array(28,157,858,533),10172=>array(83,199,849,501),10173=>array(15,147,949,549),10174=>array(41,97,889,579),12289=>array(94,-86,336,167),12290=>array(86,-54,373,235),12291=>array(305,220,695,527),12292=>array(100,-35,933,800),12293=>array(137,5,781,779),12294=>array(148,4,839,695),12295=>array(106,-26,920,790),12296=>array(587,-69,921,837),12297=>array(79,-69,413,837),12298=>array(501,-69,950,837),12299=>array(50,-69,499,837),12300=>array(559,349,900,837),12301=>array(100,-68,446,419),12302=>array(560,349,930,835),12303=>array(70,-69,444,421),12304=>array(611,-69,900,837),12305=>array(100,-69,389,837),12306=>array(173,-18,827,735),12307=>array(144,20,845,750),12308=>array(625,-75,900,844),12309=>array(100,-75,375,844),12310=>array(570,-73,930,845),12311=>array(69,-73,429,845),12312=>array(649,-73,877,835),12313=>array(124,-74,352,834),12314=>array(578,-81,861,820),12315=>array(121,-82,404,819),12316=>array(39,289,961,466),12317=>array(535,523,901,853),12318=>array(100,523,466,853),12319=>array(181,-53,547,277),12320=>array(89,66,911,689),12321=>array(445,46,525,715),12322=>array(339,48,660,714),12323=>array(255,47,734,717),12324=>array(153,34,769,707),12325=>array(285,35,742,747),12326=>array(184,255,821,671),12327=>array(185,167,823,691),12328=>array(181,104,816,707),12329=>array(206,35,844,743),12330=>array(112,1,375,265),12331=>array(111,513,375,776),12332=>array(627,514,889,778),12333=>array(624,1,888,264),12334=>array(85,311,237,462),12335=>array(83,207,237,564),12336=>array(68,285,931,479),12337=>array(284,-60,729,810),12338=>array(199,-56,876,814),12339=>array(174,-28,732,782),12340=>array(128,-28,898,782),12341=>array(232,-46,726,796),12342=>array(106,-26,920,790),12343=>array(61,-53,920,827),12351=>array(241,-70,759,836),12353=>array(187,47,786,720),12354=>array(113,-60,867,781),12355=>array(217,45,802,670),12356=>array(144,-30,876,760),12357=>array(191,42,750,687),12358=>array(113,-36,810,759),12359=>array(169,54,811,709),12360=>array(90,-23,881,787),12361=>array(185,66,791,704),12362=>array(102,-12,864,796),12363=>array(80,-31,857,806),12364=>array(58,-31,944,815),12365=>array(99,-31,822,811),12366=>array(100,-30,947,833),12367=>array(145,-22,766,776),12368=>array(145,-22,914,821),12369=>array(162,-55,914,782),12370=>array(97,-62,959,839),12371=>array(163,7,857,716),12372=>array(116,10,869,807),12373=>array(98,-31,814,789),12374=>array(94,-31,925,821),12375=>array(207,-18,857,769),12376=>array(185,-18,905,821),12377=>array(114,-62,886,773),12378=>array(89,-62,915,863),12379=>array(98,-16,879,760),12380=>array(72,-16,938,863),12381=>array(102,-35,887,751),12382=>array(80,-35,925,807),12383=>array(119,-16,881,797),12384=>array(89,-16,905,807),12385=>array(143,-21,844,799),12386=>array(109,-21,905,859),12387=>array(175,123,771,603),12388=>array(122,47,868,645),12389=>array(97,57,895,873),12390=>array(90,-25,856,720),12391=>array(90,-25,903,720),12392=>array(163,10,823,775),12393=>array(163,10,911,810),12394=>array(80,-22,907,800),12395=>array(131,-8,875,779),12396=>array(105,-6,909,782),12397=>array(88,-15,903,773),12398=>array(115,-18,882,714),12399=>array(111,-30,896,774),12400=>array(84,-30,931,840),12401=>array(95,-30,944,843),12402=>array(123,-7,938,742),12403=>array(89,-7,921,840),12404=>array(103,-12,918,861),12405=>array(73,-9,924,757),12406=>array(64,-9,915,840),12407=>array(50,-9,918,861),12408=>array(86,66,909,662),12409=>array(86,66,909,806),12410=>array(66,66,889,827),12411=>array(110,-23,898,771),12412=>array(79,-23,924,823),12413=>array(94,-23,942,827),12414=>array(126,-24,892,797),12415=>array(115,-33,888,772),12416=>array(121,-17,905,789),12417=>array(130,-30,870,796),12418=>array(112,-9,858,789),12419=>array(173,48,804,710),12420=>array(99,-29,887,789),12421=>array(202,34,795,712),12422=>array(135,-48,878,792),12423=>array(192,96,804,699),12424=>array(116,21,879,780),12425=>array(144,-17,817,780),12426=>array(193,-81,777,770),12427=>array(82,11,836,767),12428=>array(105,-29,911,774),12429=>array(100,-11,857,760),12430=>array(160,62,798,700),12431=>array(80,-14,874,782),12432=>array(118,-5,879,745),12433=>array(86,1,895,774),12434=>array(115,-24,853,805),12435=>array(90,-8,906,778),12436=>array(103,-36,940,786),12441=>array(641,603,869,807),12442=>array(703,648,918,861),12443=>array(503,603,731,807),12444=>array(490,648,705,861),12445=>array(153,39,808,744),12446=>array(153,39,827,744),12449=>array(199,54,815,665),12450=>array(94,-61,920,751),12451=>array(218,66,759,704),12452=>array(121,-44,833,800),12453=>array(225,59,789,694),12454=>array(125,-47,880,803),12455=>array(189,91,810,630),12456=>array(80,0,915,735),12457=>array(184,61,822,683),12458=>array(96,-45,952,787),12459=>array(88,-41,858,794),12460=>array(88,-41,888,831),12461=>array(73,-45,901,803),12462=>array(71,-54,930,821),12463=>array(120,-49,857,815),12464=>array(77,-51,924,849),12465=>array(64,-48,908,813),12466=>array(64,-48,908,835),12467=>array(98,-23,859,734),12468=>array(81,-25,910,877),12469=>array(84,-59,917,788),12470=>array(64,-59,966,799),12471=>array(83,-39,904,789),12472=>array(79,-39,900,799),12473=>array(82,-52,952,728),12474=>array(56,-52,946,867),12475=>array(87,-5,912,786),12476=>array(81,-3,900,800),12477=>array(131,-51,841,780),12478=>array(131,-51,876,831),12479=>array(120,-60,851,805),12480=>array(60,-60,910,859),12481=>array(87,-54,921,813),12482=>array(77,-54,930,813),12483=>array(189,61,752,663),12484=>array(89,-47,845,774),12485=>array(101,-47,890,829),12486=>array(73,-61,908,740),12487=>array(73,-61,948,757),12488=>array(291,-46,850,787),12489=>array(325,-44,879,790),12490=>array(82,-63,915,786),12491=>array(77,16,911,711),12492=>array(116,-54,863,734),12493=>array(65,-51,926,786),12494=>array(130,-49,855,740),12495=>array(72,-29,928,791),12496=>array(47,-32,944,799),12497=>array(47,-32,944,837),12498=>array(163,-5,879,770),12499=>array(150,-5,930,799),12500=>array(137,-5,944,799),12501=>array(151,-58,855,732),12502=>array(107,-60,920,886),12503=>array(89,-60,964,857),12504=>array(57,24,937,651),12505=>array(57,24,937,685),12506=>array(57,24,937,685),12507=>array(70,-45,913,785),12508=>array(70,-45,913,821),12509=>array(70,-45,913,849),12510=>array(113,-31,887,729),12511=>array(104,-43,892,769),12512=>array(80,-26,927,792),12513=>array(108,-35,835,787),12514=>array(81,-6,916,739),12515=>array(203,48,790,686),12516=>array(104,-48,884,801),12517=>array(180,93,801,636),12518=>array(75,-4,909,730),12519=>array(205,80,765,640),12520=>array(105,-27,860,730),12521=>array(104,-57,873,748),12522=>array(213,-53,790,768),12523=>array(62,-45,936,788),12524=>array(203,-29,893,788),12525=>array(134,-24,848,730),12526=>array(224,51,769,636),12527=>array(124,-54,867,731),12528=>array(83,-45,918,784),12529=>array(76,-5,910,730),12530=>array(123,-53,863,753),12531=>array(107,-33,896,754),12532=>array(107,-54,884,839),12533=>array(199,57,767,690),12534=>array(179,43,809,694),12535=>array(92,-58,952,834),12536=>array(73,-45,953,843),12537=>array(82,-5,977,861),12538=>array(107,-54,947,846),12539=>array(161,311,313,462),12540=>array(83,339,917,429),12541=>array(271,-27,738,666),12542=>array(271,-27,766,807),12549=>array(157,-41,845,819),12550=>array(113,-35,861,812),12551=>array(149,51,851,697),12552=>array(147,44,849,718),12553=>array(98,-41,843,819),12554=>array(100,-45,900,783),12555=>array(151,-45,840,758),12556=>array(98,-35,843,817),12557=>array(133,-41,806,802),12558=>array(121,-34,879,738),12559=>array(60,-32,871,738),12560=>array(232,-43,676,791),12561=>array(257,-41,677,801),12562=>array(121,-28,879,738),12563=>array(105,6,895,782),12564=>array(142,-33,756,796),12565=>array(61,-30,825,752),12566=>array(227,-15,773,734),12567=>array(149,-35,811,746),12568=>array(113,-39,887,806),12569=>array(149,-32,883,752),12570=>array(163,-37,837,783),12571=>array(121,2,879,738),12572=>array(121,2,879,794),12573=>array(109,8,891,773),12574=>array(112,-39,871,754),12575=>array(82,-10,934,729),12576=>array(163,-48,866,790),12577=>array(111,-20,887,723),12578=>array(133,-37,849,742),12579=>array(166,-33,838,775),12580=>array(94,-21,872,797),12581=>array(164,54,847,751),12582=>array(88,-21,903,731),12583=>array(129,369,871,449),12584=>array(124,-4,877,753),12585=>array(157,29,843,711),12586=>array(87,-26,885,736),12587=>array(88,-21,903,734),12588=>array(60,-32,871,788),12593=>array(129,91,796,665),12594=>array(114,91,844,665),12595=>array(114,78,880,665),12596=>array(204,90,873,665),12597=>array(144,78,880,666),12598=>array(144,91,876,666),12599=>array(184,90,838,664),12600=>array(149,90,888,665),12601=>array(173,90,827,665),12602=>array(149,85,842,665),12603=>array(149,85,852,665),12604=>array(149,85,853,665),12605=>array(149,78,880,665),12606=>array(149,85,855,665),12607=>array(149,85,868,665),12608=>array(149,85,876,666),12609=>array(215,90,785,665),12610=>array(215,90,785,665),12611=>array(145,88,855,665),12612=>array(145,78,880,664),12613=>array(107,76,882,663),12614=>array(110,78,890,663),12615=>array(187,92,813,666),12616=>array(109,76,880,665),12617=>array(105,80,895,666),12618=>array(109,76,880,665),12619=>array(206,90,790,663),12620=>array(189,91,837,664),12621=>array(187,90,813,665),12622=>array(156,88,844,665),12623=>array(421,-64,711,842),12624=>array(345,-64,655,842),12625=>array(381,-64,676,842),12626=>array(340,-64,661,842),12627=>array(302,-65,597,841),12628=>array(186,-63,677,843),12629=>array(332,-64,626,842),12630=>array(226,-63,687,843),12631=>array(60,197,940,614),12632=>array(46,-64,931,842),12633=>array(51,-64,892,842),12634=>array(61,-64,857,842),12635=>array(60,197,940,615),12636=>array(79,76,921,554),12637=>array(68,-65,882,841),12638=>array(53,-63,912,843),12639=>array(70,-64,867,842),12640=>array(72,111,928,589),12641=>array(57,357,943,436),12642=>array(67,-64,867,842),12643=>array(462,-64,538,842),12645=>array(169,93,848,665),12646=>array(169,90,888,665),12647=>array(169,78,880,665),12648=>array(169,93,886,665),12649=>array(85,78,960,665),12650=>array(149,85,888,665),12651=>array(85,78,960,665),12652=>array(149,85,886,665),12653=>array(149,85,885,665),12654=>array(142,89,853,665),12655=>array(142,78,880,665),12656=>array(142,89,886,665),12657=>array(232,78,768,711),12658=>array(145,88,844,665),12659=>array(145,88,888,665),12660=>array(111,78,889,665),12661=>array(101,78,933,665),12662=>array(140,78,885,666),12663=>array(145,88,855,665),12664=>array(232,78,768,725),12665=>array(197,78,803,728),12666=>array(130,78,844,665),12667=>array(130,78,858,665),12668=>array(130,78,888,665),12669=>array(125,78,868,665),12670=>array(117,78,883,666),12671=>array(258,93,742,659),12672=>array(99,214,901,562),12673=>array(232,131,768,551),12674=>array(125,78,880,663),12675=>array(125,119,886,664),12676=>array(202,78,798,714),12677=>array(100,91,900,666),12678=>array(182,78,818,573),12679=>array(62,-64,936,842),12680=>array(62,-64,892,842),12681=>array(62,-64,867,842),12682=>array(52,-64,881,842),12683=>array(52,-63,902,843),12684=>array(52,-64,867,842),12685=>array(430,319,570,459),12686=>array(316,-98,634,855),12688=>array(468,391,532,889),12689=>array(302,391,760,889),12690=>array(56,620,459,664),12691=>array(43,481,468,770),12692=>array(47,446,470,803),12693=>array(62,415,456,817),12694=>array(45,427,479,845),12695=>array(70,401,449,858),12696=>array(44,401,477,827),12697=>array(73,399,448,839),12698=>array(82,423,470,815),12699=>array(39,401,485,834),12700=>array(46,401,469,834),12701=>array(35,401,482,832),12702=>array(30,412,488,859),12703=>array(38,401,490,846),12800=>array(72,-21,977,798),12801=>array(72,-21,977,798),12802=>array(72,-21,977,798),12803=>array(72,-21,977,798),12804=>array(72,-21,977,798),12805=>array(72,-21,977,798),12806=>array(72,-21,977,798),12807=>array(72,-21,977,798),12808=>array(72,-21,977,798),12809=>array(72,-21,977,798),12810=>array(72,-21,977,798),12811=>array(72,-21,977,798),12812=>array(72,-21,977,798),12813=>array(72,-21,977,798),12814=>array(72,-21,977,798),12815=>array(72,-21,977,798),12816=>array(72,-21,977,798),12817=>array(72,-21,977,798),12818=>array(72,-21,977,798),12819=>array(72,-21,977,798),12820=>array(72,-21,977,798),12821=>array(72,-21,977,798),12822=>array(72,-21,977,798),12823=>array(72,-21,977,798),12824=>array(72,-21,977,798),12825=>array(72,-21,977,798),12826=>array(72,-21,977,798),12827=>array(72,-21,977,798),12828=>array(72,-21,977,798),12832=>array(72,-21,976,798),12833=>array(72,-21,976,798),12834=>array(72,-21,976,798),12835=>array(72,-21,976,798),12836=>array(72,-21,976,798),12837=>array(72,-21,976,798),12838=>array(72,-21,976,798),12839=>array(72,-21,976,798),12840=>array(72,-21,976,798),12841=>array(72,-21,976,798),12842=>array(72,-21,976,798),12843=>array(72,-21,976,798),12844=>array(72,-21,976,798),12845=>array(72,-21,976,798),12846=>array(72,-21,976,803),12847=>array(72,-21,976,798),12848=>array(72,-21,976,798),12849=>array(72,-21,976,798),12850=>array(72,-21,976,798),12851=>array(72,-21,976,798),12852=>array(72,-21,976,798),12853=>array(72,-21,976,798),12854=>array(72,-21,976,798),12855=>array(72,-21,976,798),12856=>array(72,-21,976,798),12857=>array(72,-21,976,798),12858=>array(72,-21,976,798),12859=>array(72,-21,976,798),12860=>array(72,-21,976,798),12861=>array(72,-21,976,803),12862=>array(72,-21,976,798),12863=>array(72,-21,976,798),12864=>array(72,-21,976,798),12865=>array(72,-21,976,798),12866=>array(72,-21,976,798),12867=>array(72,-21,976,798),12896=>array(30,-82,970,859),12897=>array(30,-82,970,859),12898=>array(30,-82,970,859),12899=>array(30,-82,970,859),12900=>array(30,-82,970,859),12901=>array(30,-82,970,859),12902=>array(30,-82,970,859),12903=>array(30,-82,970,859),12904=>array(30,-82,970,859),12905=>array(30,-82,970,859),12906=>array(30,-82,970,859),12907=>array(30,-82,970,859),12908=>array(30,-82,970,859),12909=>array(30,-82,970,859),12910=>array(30,-82,970,859),12911=>array(30,-82,970,859),12912=>array(30,-82,970,859),12913=>array(30,-82,970,859),12914=>array(30,-82,970,859),12915=>array(30,-82,970,859),12916=>array(30,-82,970,859),12917=>array(30,-82,970,859),12918=>array(30,-82,970,859),12919=>array(30,-82,970,859),12920=>array(30,-82,970,859),12921=>array(30,-82,970,859),12922=>array(30,-82,970,859),12923=>array(30,-82,970,859),12927=>array(30,-82,970,859),12928=>array(30,-82,970,859),12929=>array(30,-82,970,859),12930=>array(30,-82,970,859),12931=>array(30,-82,970,859),12932=>array(30,-82,970,859),12933=>array(30,-82,970,859),12934=>array(30,-82,970,859),12935=>array(30,-82,970,859),12936=>array(30,-82,970,859),12937=>array(30,-82,970,859),12938=>array(30,-82,970,859),12939=>array(30,-82,970,859),12940=>array(30,-82,970,859),12941=>array(30,-82,970,859),12942=>array(30,-82,970,859),12943=>array(30,-82,970,859),12944=>array(30,-82,970,859),12945=>array(30,-82,970,859),12946=>array(30,-82,970,859),12947=>array(30,-82,970,859),12948=>array(30,-82,970,859),12949=>array(30,-82,970,859),12950=>array(30,-82,970,859),12951=>array(30,-82,970,859),12952=>array(30,-82,970,859),12953=>array(30,-82,970,859),12954=>array(30,-82,970,859),12955=>array(30,-82,970,859),12956=>array(30,-82,970,859),12957=>array(30,-82,970,859),12958=>array(30,-82,970,859),12959=>array(30,-82,970,859),12960=>array(30,-82,970,859),12961=>array(30,-82,970,859),12962=>array(30,-82,970,859),12963=>array(30,-82,970,859),12964=>array(30,-82,970,859),12965=>array(30,-82,970,859),12966=>array(30,-82,970,859),12967=>array(30,-82,970,859),12968=>array(30,-82,970,859),12969=>array(30,-82,970,859),12970=>array(30,-82,970,859),12971=>array(30,-82,970,859),12972=>array(30,-82,970,859),12973=>array(30,-82,970,859),12974=>array(30,-82,970,859),12975=>array(30,-82,970,859),12976=>array(30,-82,970,859),12992=>array(119,-55,892,783),12993=>array(88,-55,892,797),12994=>array(86,-55,892,787),12995=>array(64,-55,892,783),12996=>array(89,-55,892,783),12997=>array(102,-55,897,787),12998=>array(90,-55,892,783),12999=>array(80,-55,892,789),13000=>array(82,-55,892,793),13001=>array(47,-55,892,799),13002=>array(47,-55,892,783),13003=>array(47,-55,892,794),13008=>array(30,-82,970,859),13009=>array(30,-82,970,859),13010=>array(30,-82,970,859),13011=>array(30,-82,970,859),13012=>array(30,-82,970,859),13013=>array(30,-82,970,859),13014=>array(30,-82,970,859),13015=>array(30,-82,970,859),13016=>array(30,-82,970,859),13017=>array(30,-82,970,859),13018=>array(30,-82,970,859),13019=>array(30,-82,970,859),13020=>array(30,-82,970,859),13021=>array(30,-82,970,859),13022=>array(30,-82,970,859),13023=>array(30,-82,970,859),13024=>array(30,-82,970,859),13025=>array(30,-82,970,859),13026=>array(30,-82,970,859),13027=>array(30,-82,970,859),13028=>array(30,-82,970,859),13029=>array(30,-82,970,859),13030=>array(30,-82,970,859),13031=>array(30,-82,970,859),13032=>array(30,-82,970,859),13033=>array(30,-82,970,859),13034=>array(30,-82,970,859),13035=>array(30,-82,970,859),13036=>array(30,-82,970,859),13037=>array(30,-82,970,859),13038=>array(30,-82,970,859),13039=>array(30,-82,970,859),13040=>array(30,-82,970,859),13041=>array(30,-82,970,859),13042=>array(30,-82,970,859),13043=>array(30,-82,970,859),13044=>array(30,-82,970,859),13045=>array(30,-82,970,859),13046=>array(30,-82,970,859),13047=>array(30,-82,970,859),13048=>array(30,-82,970,859),13049=>array(30,-82,970,859),13050=>array(30,-82,970,859),13051=>array(30,-82,970,859),13052=>array(30,-82,970,859),13053=>array(30,-82,970,859),13054=>array(30,-82,970,859),13056=>array(54,-77,959,836),13057=>array(62,-82,960,822),13058=>array(39,-64,954,811),13059=>array(49,-64,945,811),13060=>array(73,-74,957,845),13061=>array(50,-76,949,845),13062=>array(75,-49,949,836),13063=>array(38,-77,962,804),13064=>array(58,-67,945,796),13065=>array(47,-48,949,836),13066=>array(47,-66,945,836),13067=>array(58,-75,921,845),13068=>array(58,-77,944,844),13069=>array(58,-75,944,844),13070=>array(58,-49,924,860),13071=>array(58,-67,965,860),13072=>array(51,-61,975,862),13073=>array(51,129,939,862),13074=>array(51,-75,946,862),13075=>array(51,-74,968,862),13076=>array(51,-47,924,841),13077=>array(38,-66,970,841),13078=>array(50,-78,970,844),13079=>array(51,-78,961,841),13080=>array(33,-66,944,866),13081=>array(33,-78,961,866),13082=>array(46,-66,968,844),13083=>array(54,-73,963,844),13084=>array(46,-48,945,850),13085=>array(55,-77,960,822),13086=>array(40,-71,945,802),13087=>array(46,-72,968,845),13088=>array(46,-76,970,841),13089=>array(66,-82,970,831),13090=>array(48,-76,949,836),13091=>array(48,-77,949,836),13092=>array(54,-48,945,868),13093=>array(50,-71,952,868),13094=>array(156,-64,968,856),13095=>array(156,-76,949,845),13096=>array(55,-54,904,841),13097=>array(61,-77,731,825),13098=>array(37,-64,921,845),13099=>array(37,-76,980,836),13100=>array(37,-64,945,836),13101=>array(37,-64,968,856),13102=>array(56,-78,970,857),13103=>array(49,-64,923,857),13104=>array(106,-41,918,857),13105=>array(106,-64,968,862),13106=>array(71,-78,961,794),13107=>array(53,-77,933,845),13108=>array(57,-69,970,862),13109=>array(57,-76,944,826),13110=>array(39,-73,970,844),13111=>array(39,-75,915,802),13112=>array(39,-41,939,802),13113=>array(39,-64,968,836),13114=>array(39,-48,949,811),13115=>array(39,-71,945,802),13116=>array(39,-73,945,819),13117=>array(40,-77,933,859),13118=>array(40,-77,968,859),13119=>array(40,-76,949,842),13120=>array(40,-77,949,859),13121=>array(40,-64,945,842),13122=>array(40,-76,945,842),13123=>array(55,-72,924,845),13124=>array(49,-64,921,845),13125=>array(37,-72,731,805),13126=>array(55,-72,968,836),13127=>array(57,-69,963,811),13128=>array(61,-76,949,844),13129=>array(61,-75,887,829),13130=>array(39,-72,970,831),13131=>array(67,-60,969,833),13132=>array(67,-77,969,860),13133=>array(67,-77,968,833),13134=>array(59,-77,945,847),13135=>array(49,-64,945,847),13136=>array(57,-76,950,811),13137=>array(107,-77,968,831),13138=>array(107,-73,944,831),13139=>array(49,140,955,857),13140=>array(49,-77,968,836),13141=>array(124,-66,956,835),13142=>array(118,-82,963,835),13143=>array(79,-77,718,798),13144=>array(124,-65,967,826),13145=>array(119,-65,967,826),13146=>array(88,-65,967,826),13147=>array(86,-65,967,826),13148=>array(64,-65,967,826),13149=>array(89,-65,967,826),13150=>array(102,-65,972,826),13151=>array(90,-65,967,826),13152=>array(80,-65,967,826),13153=>array(82,-65,967,826),13154=>array(47,-65,967,826),13155=>array(47,-65,967,826),13156=>array(47,-65,967,826),13157=>array(47,-65,967,826),13158=>array(47,-65,967,826),13159=>array(47,-65,967,826),13160=>array(47,-65,967,826),13161=>array(47,-65,967,826),13162=>array(47,-65,967,826),13163=>array(47,-65,967,826),13164=>array(48,-65,967,826),13165=>array(48,-65,967,826),13166=>array(48,-65,967,826),13167=>array(48,-65,967,826),13168=>array(48,-65,967,826),13169=>array(77,12,942,739),13170=>array(65,11,930,739),13171=>array(50,23,915,751),13172=>array(81,11,971,739),13173=>array(63,16,962,739),13174=>array(90,-71,934,658),13179=>array(37,-70,970,831),13180=>array(54,-60,946,831),13181=>array(28,-43,956,829),13182=>array(59,-67,970,832),13183=>array(23,-86,969,855),13184=>array(84,-171,968,739),13185=>array(82,23,968,739),13186=>array(79,-187,963,739),13187=>array(77,23,965,739),13188=>array(80,23,962,739),13189=>array(78,23,946,739),13190=>array(78,23,946,739),13191=>array(63,23,946,763),13192=>array(58,11,922,739),13193=>array(62,11,938,739),13194=>array(84,-171,942,739),13195=>array(82,23,942,739),13196=>array(80,-187,942,739),13197=>array(80,-187,919,553),13198=>array(77,-187,925,553),13199=>array(91,-187,919,739),13200=>array(91,23,949,739),13201=>array(82,23,952,739),13202=>array(72,23,957,739),13203=>array(52,23,962,763),13204=>array(44,23,952,739),13205=>array(84,-187,926,737),13206=>array(86,23,930,739),13207=>array(65,11,930,739),13208=>array(123,23,926,739),13209=>array(86,23,914,751),13210=>array(86,23,914,553),13211=>array(87,-187,914,553),13212=>array(70,23,930,553),13213=>array(63,16,918,558),13214=>array(83,23,918,739),13215=>array(67,23,958,677),13216=>array(63,16,958,677),13217=>array(149,23,926,677),13218=>array(82,23,958,739),13219=>array(67,23,964,680),13220=>array(63,16,964,680),13221=>array(149,23,932,680),13222=>array(82,23,964,739),13223=>array(75,16,937,740),13224=>array(67,16,958,740),13225=>array(104,11,926,739),13226=>array(69,11,951,739),13227=>array(58,11,961,739),13228=>array(55,23,975,763),13229=>array(70,11,930,739),13230=>array(67,11,959,740),13231=>array(67,11,966,740),13232=>array(92,-171,940,558),13233=>array(91,16,929,558),13234=>array(92,-187,946,558),13235=>array(83,16,947,558),13236=>array(92,-171,954,739),13237=>array(88,23,954,739),13238=>array(92,-187,954,739),13239=>array(70,23,954,739),13240=>array(93,23,954,739),13241=>array(76,23,959,739),13242=>array(84,-171,965,739),13243=>array(87,23,963,739),13244=>array(87,-187,963,739),13245=>array(70,23,967,739),13246=>array(91,23,965,739),13247=>array(72,23,969,739),13248=>array(87,23,945,739),13249=>array(72,23,948,739),13250=>array(65,11,955,553),13251=>array(85,-171,917,739),13252=>array(64,16,940,558),13253=>array(64,11,925,739),13254=>array(50,-187,942,761),13255=>array(63,16,955,763),13256=>array(61,11,939,739),13257=>array(64,-186,960,763),13258=>array(91,11,939,739),13259=>array(102,23,932,739),13260=>array(159,23,837,739),13261=>array(90,22,959,739),13262=>array(79,23,921,739),13263=>array(121,18,860,739),13264=>array(109,23,918,739),13265=>array(151,23,844,739),13266=>array(79,-187,921,739),13267=>array(166,23,842,739),13268=>array(88,11,947,739),13269=>array(87,23,913,739),13270=>array(69,16,931,739),13271=>array(93,-171,907,739),13272=>array(76,-171,955,558),13273=>array(69,23,931,739),13274=>array(84,23,961,739),13275=>array(98,16,918,558),13276=>array(68,23,944,763),13277=>array(51,11,952,739),13280=>array(119,-24,908,777),13281=>array(88,-24,908,797),13282=>array(86,-35,908,787),13283=>array(64,-24,908,781),13284=>array(89,-31,908,780),13285=>array(102,-34,914,787),13286=>array(90,-24,908,777),13287=>array(80,-25,908,789),13288=>array(82,-27,908,793),13289=>array(47,-35,918,795),13290=>array(47,-24,918,776),13291=>array(47,-24,918,793),13292=>array(47,-35,918,792),13293=>array(47,-24,918,785),13294=>array(47,-31,918,780),13295=>array(47,-32,918,787),13296=>array(47,-24,918,777),13297=>array(47,-24,918,786),13298=>array(47,-31,918,788),13299=>array(48,-35,918,795),13300=>array(48,-24,918,792),13301=>array(48,-24,918,792),13302=>array(48,-34,918,792),13303=>array(48,-24,918,792),13304=>array(48,-31,918,792),13305=>array(48,-32,918,792),13306=>array(48,-24,918,792),13307=>array(48,-24,918,792),13308=>array(48,-31,918,792),13309=>array(44,-35,918,795),13310=>array(44,-34,918,790),19968=>array(121,356,896,439),19969=>array(98,-68,911,768),19970=>array(102,-67,897,787),19971=>array(75,-11,896,823),19972=>array(92,9,927,814),19973=>array(92,9,927,814),19974=>array(115,-77,914,738),19975=>array(63,-77,959,738),19976=>array(83,-77,948,827),19977=>array(99,32,911,713),19978=>array(92,10,927,814),19979=>array(84,-59,916,772),19980=>array(53,-64,927,778),19981=>array(71,-65,928,769),19982=>array(68,-64,930,825),19983=>array(85,-66,937,782),19984=>array(98,-63,908,767),19985=>array(78,-11,922,764),19986=>array(80,-13,925,765),19987=>array(73,-68,921,828),19988=>array(84,-14,935,776),19989=>array(85,-6,942,771),19990=>array(64,-65,936,805),19991=>array(74,-69,926,817),19992=>array(76,-13,927,803),19993=>array(68,-74,933,767),19994=>array(67,-12,918,799),19995=>array(55,-4,915,827),19996=>array(52,-72,911,820),19997=>array(70,-9,925,828),19998=>array(58,-17,951,778),19999=>array(100,-54,898,767),20000=>array(68,-36,952,807),20001=>array(62,-64,952,787),20002=>array(66,-57,906,809),20003=>array(98,-62,914,783),20004=>array(62,-61,911,780),20005=>array(38,-61,914,782),20006=>array(68,-13,941,840),20007=>array(64,-74,944,818),20008=>array(439,-66,515,823),20009=>array(283,-55,652,833),20010=>array(30,-70,955,832),20011=>array(136,-53,866,805),20012=>array(248,-68,574,816),20013=>array(131,-65,860,826),20014=>array(71,-64,963,786),20015=>array(83,-68,933,844),20016=>array(73,-61,927,832),20017=>array(73,-72,894,826),20018=>array(123,-68,886,832),20019=>array(59,-70,912,830),20020=>array(103,-59,908,840),20021=>array(84,-54,930,814),20022=>array(289,225,647,575),20023=>array(134,287,875,584),20024=>array(52,-71,950,824),20025=>array(74,-73,939,777),20026=>array(82,-65,836,829),20027=>array(81,-6,930,841),20028=>array(82,-65,932,831),20029=>array(61,-57,912,771),20030=>array(18,-82,950,821),20031=>array(249,-60,554,834),20032=>array(72,-66,928,836),20033=>array(161,-77,953,786),20034=>array(66,-77,953,828),20035=>array(73,-56,894,776),20036=>array(117,-69,879,840),20037=>array(85,-50,957,835),20038=>array(75,-49,949,802),20039=>array(74,-24,940,816),20040=>array(94,-28,930,816),20041=>array(54,-71,955,818),20042=>array(99,262,872,706),20043=>array(64,-63,947,822),20044=>array(71,-68,889,828),20045=>array(56,-67,945,850),20046=>array(93,-64,924,826),20047=>array(65,-63,949,829),20048=>array(49,-59,941,833),20049=>array(54,-61,953,837),20050=>array(89,-77,921,826),20051=>array(87,-73,927,826),20052=>array(39,-69,948,819),20053=>array(38,-62,929,837),20054=>array(59,-65,926,831),20055=>array(50,-70,953,854),20056=>array(50,-70,953,824),20057=>array(158,-14,909,740),20058=>array(222,0,890,782),20059=>array(92,290,913,534),20060=>array(80,-20,954,822),20061=>array(77,-46,948,831),20062=>array(62,-27,925,835),20063=>array(92,-9,930,830),20064=>array(118,-62,818,769),20065=>array(96,-58,834,832),20066=>array(137,-32,953,825),20067=>array(85,-32,953,825),20068=>array(96,-43,924,792),20069=>array(113,-15,894,831),20070=>array(60,-71,894,819),20071=>array(101,-15,922,829),20072=>array(57,-53,953,828),20073=>array(91,-53,937,833),20074=>array(85,-28,958,753),20075=>array(60,-15,875,826),20076=>array(115,-15,889,804),20077=>array(76,-15,918,777),20078=>array(146,-40,897,829),20079=>array(93,-30,914,829),20080=>array(39,-62,920,779),20081=>array(58,-44,936,826),20082=>array(77,-15,954,828),20083=>array(48,-85,958,815),20084=>array(61,-45,938,806),20085=>array(74,-55,961,850),20086=>array(62,-55,956,849),20087=>array(58,-51,952,836),20088=>array(42,-27,959,828),20089=>array(108,-64,976,833),20090=>array(66,-31,938,831),20091=>array(50,-31,943,847),20092=>array(80,-31,966,859),20093=>array(67,-58,929,836),20094=>array(48,-64,950,842),20095=>array(44,-62,958,824),20096=>array(64,-43,956,853),20097=>array(81,-61,961,837),20098=>array(49,-68,962,843),20099=>array(36,-62,960,840),20100=>array(54,-30,954,831),20101=>array(290,-40,544,818),20102=>array(172,-41,829,773),20103=>array(98,-62,895,822),20104=>array(92,-66,913,782),20105=>array(69,-70,939,829),20106=>array(60,-65,950,826),20107=>array(60,-65,950,826),20108=>array(100,103,916,657),20109=>array(98,-51,914,764),20110=>array(89,-69,908,773),20111=>array(64,-62,912,770),20112=>array(64,-62,912,770),20113=>array(71,-50,934,760),20114=>array(78,-6,932,775),20115=>array(42,-66,919,784),20116=>array(82,25,916,744),20117=>array(63,-70,935,829),20118=>array(57,-24,960,791),20119=>array(57,-24,950,822),20120=>array(71,-6,941,770),20121=>array(52,-24,948,780),20122=>array(63,-7,914,775),20123=>array(65,-17,933,829),20124=>array(64,-24,952,783),20125=>array(77,-17,928,852),20126=>array(64,-24,952,783),20127=>array(74,-29,938,811),20128=>array(73,391,927,690),20129=>array(64,-3,936,822),20130=>array(66,-58,959,822),20131=>array(98,-55,911,835),20132=>array(70,-65,946,822),20133=>array(85,-64,931,840),20134=>array(57,-66,934,822),20135=>array(25,-63,889,843),20136=>array(74,-61,926,825),20137=>array(62,-56,916,841),20138=>array(81,-78,941,841),20139=>array(74,-58,936,828),20140=>array(53,-64,950,825),20141=>array(93,-58,907,836),20142=>array(65,-68,950,838),20143=>array(77,-62,923,840),20144=>array(59,-67,942,828),20145=>array(39,-63,941,846),20146=>array(49,-67,920,837),20147=>array(87,-45,961,838),20148=>array(71,-56,973,861),20149=>array(29,-75,944,841),20150=>array(53,-47,947,845),20151=>array(40,-59,955,850),20152=>array(52,-69,953,836),20153=>array(54,-47,960,858),20154=>array(71,-48,943,806),20155=>array(256,-69,592,824),20156=>array(32,-27,973,804),20157=>array(50,-56,978,838),20158=>array(171,16,906,794),20159=>array(34,-64,943,829),20160=>array(48,-68,950,829),20161=>array(47,-65,953,835),20162=>array(65,-65,910,838),20163=>array(43,-67,954,837),20164=>array(42,-66,957,775),20165=>array(23,-62,936,832),20166=>array(44,-67,956,835),20167=>array(39,-73,957,836),20168=>array(49,-73,955,828),20169=>array(60,-67,956,825),20170=>array(33,-77,967,836),20171=>array(54,-71,951,858),20172=>array(56,-47,953,831),20173=>array(58,-71,923,829),20174=>array(18,-72,964,836),20175=>array(44,-62,941,837),20176=>array(30,-58,955,832),20177=>array(30,-34,955,827),20178=>array(31,-68,964,811),20179=>array(26,-28,941,832),20180=>array(50,-64,954,834),20181=>array(46,-64,935,828),20182=>array(32,-68,956,844),20183=>array(51,-64,959,839),20184=>array(55,-73,947,838),20185=>array(43,-68,894,822),20186=>array(55,-64,957,840),20187=>array(60,-73,930,838),20188=>array(54,-63,939,832),20189=>array(56,-15,958,843),20190=>array(51,-67,895,832),20191=>array(54,-64,948,833),20192=>array(48,-67,948,829),20193=>array(46,-66,952,842),20194=>array(48,-69,920,829),20195=>array(46,-68,957,830),20196=>array(38,-67,961,846),20197=>array(66,-52,945,802),20198=>array(48,-66,951,829),20199=>array(76,-39,945,828),20200=>array(44,-66,937,830),20201=>array(57,-59,948,835),20202=>array(27,-75,949,823),20203=>array(44,-80,944,829),20204=>array(32,-57,897,837),20205=>array(24,-65,969,829),20206=>array(34,-70,949,839),20207=>array(41,-63,958,846),20208=>array(31,-64,897,853),20209=>array(54,-67,949,840),20210=>array(50,-68,902,833),20211=>array(52,-67,955,832),20212=>array(48,-66,859,832),20213=>array(52,-67,956,842),20214=>array(45,-67,950,837),20215=>array(33,-74,982,847),20216=>array(28,-69,962,833),20217=>array(43,-79,936,836),20218=>array(58,-38,982,866),20219=>array(27,-73,949,830),20220=>array(33,-67,938,835),20221=>array(50,-74,968,828),20222=>array(23,-67,951,835),20223=>array(56,-70,953,845),20224=>array(49,-61,948,837),20225=>array(28,-28,958,841),20226=>array(41,-65,946,836),20227=>array(49,-55,956,840),20228=>array(52,-68,912,828),20229=>array(41,-64,945,832),20230=>array(49,-64,921,843),20231=>array(45,-66,967,835),20232=>array(40,-59,954,846),20233=>array(40,-69,954,839),20234=>array(34,-75,950,827),20235=>array(39,-55,963,844),20236=>array(41,-72,930,819),20237=>array(29,-73,947,832),20238=>array(49,-66,960,840),20239=>array(50,-67,954,841),20240=>array(47,-73,950,822),20241=>array(49,-71,953,832),20242=>array(51,-66,937,829),20243=>array(46,-66,952,827),20244=>array(41,-71,958,832),20245=>array(50,-71,961,832),20246=>array(55,-87,958,835),20247=>array(34,-75,947,828),20248=>array(42,-64,945,840),20249=>array(50,-69,959,829),20250=>array(51,-56,954,832),20251=>array(39,-68,924,819),20252=>array(65,-57,941,831),20253=>array(45,-64,941,835),20254=>array(28,-81,950,822),20255=>array(30,-58,912,835),20256=>array(28,-66,903,831),20257=>array(50,-74,951,829),20258=>array(49,-67,932,835),20259=>array(50,-67,940,829),20260=>array(30,-66,919,823),20261=>array(39,-73,947,819),20262=>array(31,-59,935,833),20263=>array(25,-67,949,828),20264=>array(37,-67,906,836),20265=>array(37,-67,976,850),20266=>array(32,-68,895,824),20267=>array(34,-66,914,822),20268=>array(50,-66,952,834),20269=>array(39,-63,951,836),20270=>array(49,-71,959,840),20271=>array(62,-65,887,842),20272=>array(38,-67,951,835),20273=>array(62,-65,951,852),20274=>array(51,-76,952,830),20275=>array(36,-66,945,833),20276=>array(42,-65,955,835),20277=>array(42,-65,890,833),20278=>array(26,-71,965,849),20279=>array(33,-70,896,833),20280=>array(48,-65,897,843),20281=>array(34,-69,958,838),20282=>array(52,-68,896,834),20283=>array(45,-65,952,839),20284=>array(40,-69,960,839),20285=>array(29,-68,908,831),20286=>array(43,-69,936,822),20287=>array(44,-66,960,835),20288=>array(44,-65,915,835),20289=>array(48,-64,948,832),20290=>array(48,-64,946,831),20291=>array(45,-66,902,840),20292=>array(45,-66,948,840),20293=>array(45,-66,937,840),20294=>array(31,-73,934,839),20295=>array(38,-67,940,831),20296=>array(50,-65,956,842),20297=>array(42,-64,948,837),20298=>array(37,-73,966,838),20299=>array(36,-66,906,824),20300=>array(45,-63,958,837),20301=>array(41,-71,947,827),20302=>array(38,-68,961,838),20303=>array(35,-70,948,839),20304=>array(34,-66,946,834),20305=>array(42,-67,945,833),20306=>array(40,-63,965,837),20307=>array(37,-64,966,831),20308=>array(35,-63,935,840),20309=>array(33,-70,958,839),20310=>array(47,-67,956,832),20311=>array(48,-67,951,834),20312=>array(40,-61,970,857),20313=>array(61,-63,951,852),20314=>array(57,-67,967,839),20315=>array(47,-65,924,834),20316=>array(37,-67,954,847),20317=>array(66,-67,921,841),20318=>array(43,-69,945,836),20319=>array(46,-73,969,846),20320=>array(16,-73,951,833),20321=>array(48,-71,957,830),20322=>array(38,-61,943,837),20323=>array(37,-65,895,833),20324=>array(44,-68,962,840),20325=>array(26,-18,943,831),20326=>array(38,-64,921,831),20327=>array(47,-65,953,842),20328=>array(43,-59,955,836),20329=>array(39,-67,959,833),20330=>array(50,-68,897,838),20331=>array(52,-66,964,839),20332=>array(41,-65,942,832),20333=>array(37,-69,944,839),20334=>array(53,-64,968,847),20335=>array(44,-65,947,842),20336=>array(48,-67,947,833),20337=>array(48,-24,975,852),20338=>array(47,-70,883,840),20339=>array(21,-72,933,834),20340=>array(54,-74,948,835),20341=>array(37,-70,955,851),20342=>array(35,-73,924,834),20343=>array(53,-66,959,837),20344=>array(48,-55,948,845),20345=>array(42,-59,963,851),20346=>array(44,-67,951,832),20347=>array(22,-84,946,829),20348=>array(27,-70,941,835),20349=>array(63,-57,955,850),20350=>array(24,-67,974,837),20351=>array(50,-73,985,836),20352=>array(44,-70,913,841),20353=>array(46,-64,960,839),20354=>array(43,-63,954,846),20355=>array(41,-66,961,836),20356=>array(18,-66,921,831),20357=>array(41,-61,947,842),20358=>array(63,-64,956,835),20359=>array(40,-70,961,839),20360=>array(48,-62,920,844),20361=>array(32,-67,975,848),20362=>array(32,-67,946,838),20363=>array(41,-63,911,845),20364=>array(33,-81,952,861),20365=>array(52,-74,949,829),20366=>array(52,-74,976,827),20367=>array(36,-80,953,824),20368=>array(36,-61,958,847),20369=>array(39,-65,954,844),20370=>array(42,-64,942,836),20371=>array(42,-64,948,835),20372=>array(43,-71,947,843),20373=>array(42,-62,955,843),20374=>array(42,-62,966,852),20375=>array(50,-65,908,829),20376=>array(42,-70,964,829),20377=>array(38,-59,949,847),20378=>array(48,-57,938,845),20379=>array(38,-70,949,844),20380=>array(49,-73,954,843),20381=>array(36,-73,947,839),20382=>array(52,-55,905,847),20383=>array(44,-70,954,844),20384=>array(28,-67,944,832),20385=>array(24,-61,938,835),20386=>array(47,-67,949,828),20387=>array(32,-65,883,833),20388=>array(37,-60,945,832),20389=>array(10,-61,932,834),20390=>array(38,-74,922,831),20391=>array(18,-60,875,832),20392=>array(41,-55,967,848),20393=>array(32,-59,943,833),20394=>array(27,-69,937,834),20395=>array(37,-60,949,843),20396=>array(27,-69,962,834),20397=>array(27,-69,960,834),20398=>array(34,-68,946,839),20399=>array(44,-73,974,835),20400=>array(44,-73,933,835),20401=>array(44,-73,940,826),20402=>array(42,-73,969,827),20403=>array(39,-63,956,853),20404=>array(48,-61,975,852),20405=>array(36,-64,948,840),20406=>array(49,-63,900,836),20407=>array(41,-63,913,830),20408=>array(49,-63,942,836),20409=>array(35,-63,962,835),20410=>array(57,-65,957,843),20411=>array(51,-72,960,828),20412=>array(55,-64,946,830),20413=>array(53,-64,927,843),20414=>array(52,-64,953,843),20415=>array(42,-73,947,834),20416=>array(43,-63,955,842),20417=>array(35,-59,964,840),20418=>array(40,-65,954,845),20419=>array(20,-70,961,840),20420=>array(41,-64,960,840),20421=>array(42,-70,960,840),20422=>array(20,-70,948,840),20423=>array(28,-64,948,840),20424=>array(20,-70,939,840),20425=>array(53,-67,963,840),20426=>array(42,-79,953,849),20427=>array(40,-70,956,840),20428=>array(40,-70,945,840),20429=>array(59,-69,970,832),20430=>array(42,-57,954,829),20431=>array(52,-67,925,836),20432=>array(54,-66,918,847),20433=>array(21,-67,911,842),20434=>array(54,-67,946,845),20435=>array(39,-67,955,839),20436=>array(39,-54,958,841),20437=>array(39,-65,939,841),20438=>array(47,-64,947,841),20439=>array(36,-65,972,839),20440=>array(31,-62,951,832),20441=>array(42,-70,957,844),20442=>array(25,-68,948,836),20443=>array(50,-64,969,841),20444=>array(44,-65,955,850),20445=>array(35,-73,965,832),20446=>array(48,-61,975,852),20447=>array(23,-69,977,846),20448=>array(44,-68,968,840),20449=>array(32,-68,941,825),20450=>array(43,-82,954,844),20451=>array(25,-76,933,819),20452=>array(25,-70,919,842),20453=>array(26,-67,934,839),20454=>array(23,-71,953,832),20455=>array(25,-69,929,826),20456=>array(35,-69,923,823),20457=>array(32,-58,917,834),20458=>array(19,-61,911,829),20459=>array(25,-69,941,830),20460=>array(42,-64,961,850),20461=>array(19,-58,944,836),20462=>array(33,-76,973,844),20463=>array(33,-71,950,831),20464=>array(42,-64,913,850),20465=>array(22,-69,944,835),20466=>array(17,-57,909,852),20467=>array(37,-66,957,842),20468=>array(47,-60,947,840),20469=>array(41,-69,963,838),20470=>array(34,-69,981,835),20471=>array(46,-68,947,825),20472=>array(36,-68,964,843),20473=>array(51,-67,929,836),20474=>array(34,-61,967,841),20475=>array(51,-72,946,836),20476=>array(41,-74,911,844),20477=>array(44,-72,946,848),20478=>array(39,-65,950,853),20479=>array(39,-65,950,857),20480=>array(44,-68,972,831),20481=>array(47,-66,946,849),20482=>array(37,-68,955,835),20483=>array(44,-65,961,837),20484=>array(39,-64,922,844),20485=>array(32,-64,946,835),20486=>array(49,-68,941,846),20487=>array(45,-75,947,834),20488=>array(43,-65,972,836),20489=>array(62,-71,946,855),20490=>array(43,-65,969,831),20491=>array(50,-68,918,838),20492=>array(39,-65,927,854),20493=>array(39,-69,950,835),20494=>array(49,-72,943,838),20495=>array(31,-73,966,846),20496=>array(14,-67,952,848),20497=>array(27,-70,892,841),20498=>array(53,-68,903,839),20499=>array(50,-66,952,843),20500=>array(38,-66,908,831),20501=>array(46,-67,949,832),20502=>array(42,-65,940,844),20503=>array(54,-64,890,834),20504=>array(35,-65,895,836),20505=>array(20,-68,958,843),20506=>array(36,-64,953,842),20507=>array(54,-77,951,834),20508=>array(45,-72,926,840),20509=>array(73,-73,961,833),20510=>array(35,-68,956,832),20511=>array(41,-68,953,838),20512=>array(46,-71,935,825),20513=>array(52,-65,897,833),20514=>array(44,-64,978,839),20515=>array(29,-69,974,847),20516=>array(36,-68,943,837),20517=>array(26,-69,954,834),20518=>array(34,-67,963,835),20519=>array(62,-59,967,839),20520=>array(32,-71,947,841),20521=>array(36,-67,956,847),20522=>array(49,-77,951,821),20523=>array(31,-71,976,855),20524=>array(46,-65,951,836),20525=>array(12,-67,952,842),20526=>array(33,-67,979,843),20527=>array(52,-68,967,830),20528=>array(44,-65,956,834),20529=>array(59,-59,960,836),20530=>array(59,-64,943,836),20531=>array(51,-64,956,831),20532=>array(46,-68,975,835),20533=>array(47,-62,951,830),20534=>array(39,-65,961,838),20535=>array(52,-62,963,832),20536=>array(47,-62,975,848),20537=>array(39,-71,955,841),20538=>array(35,-86,913,827),20539=>array(30,-65,973,835),20540=>array(37,-68,943,834),20541=>array(54,-59,969,875),20542=>array(29,-59,955,828),20543=>array(39,-64,939,841),20544=>array(46,-70,972,839),20545=>array(44,-68,952,836),20546=>array(48,-65,960,850),20547=>array(27,-73,945,841),20548=>array(46,-70,975,837),20549=>array(46,-70,956,837),20550=>array(39,-69,972,840),20551=>array(41,-70,962,835),20552=>array(45,-69,920,825),20553=>array(42,-66,948,844),20554=>array(45,-67,918,835),20555=>array(40,-72,951,841),20556=>array(36,-66,954,847),20557=>array(47,-73,961,833),20558=>array(33,-71,970,844),20559=>array(38,-68,921,837),20560=>array(35,-71,939,836),20561=>array(37,-68,966,832),20562=>array(41,-66,944,842),20563=>array(47,-68,960,841),20564=>array(41,-66,925,842),20565=>array(31,-68,963,840),20566=>array(31,-66,938,842),20567=>array(55,-67,956,843),20568=>array(46,-65,920,829),20569=>array(61,-65,908,839),20570=>array(51,-74,963,835),20571=>array(46,-67,958,836),20572=>array(37,-65,934,834),20573=>array(37,-65,953,845),20574=>array(44,-70,955,833),20575=>array(49,-52,951,852),20576=>array(46,-75,960,834),20577=>array(51,-64,959,841),20578=>array(40,-54,973,848),20579=>array(54,-68,956,845),20580=>array(44,-71,936,828),20581=>array(43,-73,966,834),20582=>array(43,-70,957,834),20583=>array(28,-70,980,834),20584=>array(31,-71,969,834),20585=>array(55,-73,943,838),20586=>array(47,-53,948,839),20587=>array(53,-66,968,839),20588=>array(33,-68,970,846),20589=>array(38,-62,944,837),20590=>array(45,-71,952,830),20591=>array(41,-74,960,843),20592=>array(40,-73,960,835),20593=>array(43,-67,935,840),20594=>array(43,-65,971,833),20595=>array(44,-64,951,839),20596=>array(42,-68,902,834),20597=>array(48,-79,943,836),20598=>array(38,-62,907,836),20599=>array(53,-63,979,862),20600=>array(37,-71,963,824),20601=>array(23,-66,962,840),20602=>array(44,-66,960,840),20603=>array(23,-66,933,830),20604=>array(36,-61,954,839),20605=>array(41,-67,924,835),20606=>array(27,-69,925,834),20607=>array(21,-57,912,834),20608=>array(26,-72,967,841),20609=>array(50,-72,963,832),20610=>array(49,-69,961,837),20611=>array(55,-70,948,837),20612=>array(41,-64,968,840),20613=>array(31,-65,941,838),20614=>array(56,-75,958,838),20615=>array(58,-72,961,833),20616=>array(30,-65,979,838),20617=>array(44,-69,953,827),20618=>array(44,-73,936,827),20619=>array(44,-69,951,827),20620=>array(44,-58,941,848),20621=>array(36,-64,941,833),20622=>array(41,-58,955,848),20623=>array(45,-75,948,843),20624=>array(39,-65,906,841),20625=>array(31,-65,971,847),20626=>array(38,-65,978,837),20627=>array(53,-60,903,842),20628=>array(45,-57,960,850),20629=>array(60,-71,960,830),20630=>array(29,-80,969,851),20631=>array(29,-69,950,843),20632=>array(52,-58,971,847),20633=>array(29,-69,956,835),20634=>array(25,-57,978,832),20635=>array(44,-66,958,840),20636=>array(46,-72,953,839),20637=>array(39,-73,917,829),20638=>array(39,-62,954,853),20639=>array(42,-71,922,844),20640=>array(37,-67,968,844),20641=>array(47,-44,970,844),20642=>array(37,-68,976,854),20643=>array(32,-65,976,845),20644=>array(42,-64,964,836),20645=>array(28,-64,934,829),20646=>array(28,-72,943,823),20647=>array(30,-66,938,841),20648=>array(28,-63,922,833),20649=>array(27,-61,924,828),20650=>array(27,-76,967,847),20651=>array(34,-70,943,830),20652=>array(30,-60,936,840),20653=>array(34,-68,957,840),20654=>array(44,-66,954,843),20655=>array(44,-64,969,838),20656=>array(38,-71,903,840),20657=>array(40,-74,973,835),20658=>array(32,-67,958,835),20659=>array(35,-70,951,836),20660=>array(35,-65,948,838),20661=>array(41,-72,963,833),20662=>array(46,-74,967,838),20663=>array(31,-67,953,839),20664=>array(42,-80,961,837),20665=>array(39,-65,952,847),20666=>array(29,-65,958,841),20667=>array(28,-66,961,841),20668=>array(33,-66,948,841),20669=>array(44,-71,954,847),20670=>array(35,-67,962,831),20671=>array(39,-70,949,834),20672=>array(29,-72,949,859),20673=>array(47,-62,965,839),20674=>array(30,-72,950,835),20675=>array(26,-65,907,832),20676=>array(46,-65,955,834),20677=>array(33,-70,944,840),20678=>array(17,-61,965,840),20679=>array(36,-57,974,844),20680=>array(41,-81,960,832),20681=>array(37,-66,979,847),20682=>array(41,-64,958,840),20683=>array(46,-80,970,847),20684=>array(25,-71,968,847),20685=>array(43,-66,925,832),20686=>array(37,-58,950,843),20687=>array(40,-62,963,840),20688=>array(45,-66,909,844),20689=>array(35,-66,965,832),20690=>array(47,-65,952,843),20691=>array(55,-79,959,840),20692=>array(46,-67,949,843),20693=>array(48,-64,963,835),20694=>array(39,-68,951,834),20695=>array(52,-71,934,831),20696=>array(23,-67,985,844),20697=>array(44,-70,969,835),20698=>array(41,-64,983,842),20699=>array(38,-74,963,839),20700=>array(55,-45,963,829),20701=>array(55,-70,962,826),20702=>array(33,-65,930,839),20703=>array(38,-56,946,835),20704=>array(62,-70,965,828),20705=>array(53,-52,962,836),20706=>array(43,-67,947,833),20707=>array(34,-64,968,836),20708=>array(68,-67,967,835),20709=>array(38,-67,962,837),20710=>array(35,-64,967,851),20711=>array(39,-60,907,843),20712=>array(39,-72,968,841),20713=>array(52,-52,911,840),20714=>array(54,-64,918,833),20715=>array(52,-52,962,840),20716=>array(34,-68,967,842),20717=>array(24,-65,972,838),20718=>array(29,-71,953,832),20719=>array(57,-72,974,833),20720=>array(47,-63,963,835),20721=>array(30,-62,952,847),20722=>array(25,-75,948,832),20723=>array(20,-69,965,839),20724=>array(52,-52,911,840),20725=>array(45,-61,956,838),20726=>array(43,-70,982,832),20727=>array(45,-72,955,847),20728=>array(30,-70,972,834),20729=>array(28,-71,949,826),20730=>array(47,-70,959,828),20731=>array(35,-65,958,847),20732=>array(47,-66,951,833),20733=>array(37,-68,988,830),20734=>array(41,-57,972,858),20735=>array(34,-70,979,834),20736=>array(39,-68,963,845),20737=>array(39,-74,942,844),20738=>array(36,-76,977,843),20739=>array(44,-70,960,838),20740=>array(36,-67,960,840),20741=>array(53,-68,915,836),20742=>array(26,-66,978,841),20743=>array(50,-66,979,837),20744=>array(34,-61,968,863),20745=>array(38,-69,965,851),20746=>array(34,-72,978,836),20747=>array(20,-72,942,839),20748=>array(28,-58,963,850),20749=>array(39,-56,965,853),20750=>array(42,-65,964,836),20751=>array(38,-67,968,845),20752=>array(28,-68,964,854),20753=>array(47,-79,962,825),20754=>array(36,-60,956,839),20755=>array(52,-67,964,829),20756=>array(32,-65,953,838),20757=>array(41,-71,963,837),20758=>array(51,-65,942,843),20759=>array(30,-64,969,839),20760=>array(31,-64,964,845),20761=>array(31,-64,960,845),20762=>array(37,-59,938,838),20763=>array(39,-67,943,842),20764=>array(39,-67,948,841),20765=>array(50,-65,937,856),20766=>array(37,-75,951,837),20767=>array(28,-73,961,842),20768=>array(47,-71,954,836),20769=>array(54,-68,923,826),20770=>array(46,-70,964,829),20771=>array(64,-74,959,846),20772=>array(49,-68,965,830),20773=>array(47,-79,940,835),20774=>array(42,-76,963,841),20775=>array(37,-77,963,838),20776=>array(39,-80,947,838),20777=>array(49,-75,934,838),20778=>array(30,-73,954,835),20779=>array(40,-73,957,840),20780=>array(5,-73,996,835),20781=>array(35,-73,972,830),20782=>array(36,-66,952,836),20783=>array(26,-64,963,846),20784=>array(44,-75,951,834),20785=>array(28,-66,967,845),20786=>array(40,-68,946,838),20787=>array(41,-66,969,844),20788=>array(33,-69,979,844),20789=>array(32,-68,971,843),20790=>array(33,-67,940,848),20791=>array(36,-69,968,841),20792=>array(44,-55,950,840),20793=>array(30,-72,954,840),20794=>array(29,-69,955,839),20795=>array(27,-68,973,848),20796=>array(34,-70,971,832),20797=>array(47,-72,935,832),20798=>array(36,-71,964,839),20799=>array(39,-81,955,815),20800=>array(46,-64,942,754),20801=>array(82,-59,936,842),20802=>array(40,-65,963,824),20803=>array(76,-67,939,767),20804=>array(85,-65,932,776),20805=>array(64,-68,951,822),20806=>array(73,-64,933,832),20807=>array(40,-60,953,836),20808=>array(89,-67,934,839),20809=>array(66,-63,930,832),20810=>array(49,-68,949,835),20811=>array(60,-67,937,832),20812=>array(51,-60,953,812),20813=>array(52,-70,948,840),20814=>array(68,-60,959,831),20815=>array(37,-66,956,794),20816=>array(52,-66,929,737),20817=>array(67,-64,941,848),20818=>array(88,-62,927,833),20819=>array(36,-64,970,794),20820=>array(63,-67,950,842),20821=>array(41,-65,962,780),20822=>array(58,-67,956,848),20823=>array(42,-62,959,834),20824=>array(30,-50,960,823),20825=>array(29,-80,961,845),20826=>array(52,-64,948,828),20827=>array(30,-79,955,845),20828=>array(52,-66,948,844),20829=>array(29,-80,954,846),20830=>array(28,-81,977,844),20831=>array(41,-68,956,830),20832=>array(36,-66,962,845),20833=>array(27,-79,953,845),20834=>array(32,-71,958,830),20835=>array(34,-81,965,845),20836=>array(28,-79,958,844),20837=>array(85,-38,933,769),20838=>array(143,-12,903,787),20839=>array(127,-69,877,786),20840=>array(40,-23,935,803),20841=>array(60,-68,953,783),20842=>array(35,-66,965,822),20843=>array(44,-36,949,791),20844=>array(51,-54,956,804),20845=>array(62,-29,946,810),20846=>array(46,-60,954,816),20847=>array(118,-57,799,812),20848=>array(65,-27,915,796),20849=>array(75,-70,925,829),20850=>array(90,-57,931,809),20851=>array(38,-62,919,831),20852=>array(47,-51,915,809),20853=>array(53,-66,958,817),20854=>array(63,-65,936,832),20855=>array(63,-64,942,789),20856=>array(52,-71,943,833),20857=>array(63,-47,912,831),20858=>array(46,-54,951,829),20859=>array(33,-67,951,839),20860=>array(50,-62,959,841),20861=>array(65,-63,917,836),20862=>array(65,-61,935,837),20863=>array(79,-56,952,830),20864=>array(57,-74,929,834),20865=>array(50,-67,969,814),20866=>array(131,-66,869,766),20867=>array(136,-69,864,795),20868=>array(52,-66,942,800),20869=>array(131,-64,865,824),20870=>array(151,-51,849,781),20871=>array(70,-62,934,849),20872=>array(107,-61,856,789),20873=>array(53,-67,947,839),20874=>array(52,-66,948,788),20875=>array(131,-65,887,779),20876=>array(47,-79,958,786),20877=>array(67,-61,954,791),20878=>array(117,-55,879,800),20879=>array(122,-65,878,783),20880=>array(189,-50,851,788),20881=>array(189,-60,851,834),20882=>array(131,-65,869,810),20883=>array(60,-65,954,833),20884=>array(101,-60,941,809),20885=>array(43,-61,951,809),20886=>array(94,353,906,541),20887=>array(56,-67,945,762),20888=>array(44,-73,949,825),20889=>array(65,-58,939,786),20890=>array(108,-67,891,772),20891=>array(58,-59,909,780),20892=>array(42,-70,959,828),20893=>array(51,-59,953,799),20894=>array(50,-65,961,782),20895=>array(81,-38,940,806),20896=>array(51,-67,957,787),20897=>array(75,-50,951,763),20898=>array(60,-67,965,783),20899=>array(76,-53,945,790),20900=>array(54,-60,952,795),20901=>array(67,-70,933,793),20902=>array(43,-60,959,785),20903=>array(28,-66,986,783),20904=>array(99,-55,908,785),20905=>array(82,-66,910,802),20906=>array(60,-67,965,785),20907=>array(338,-28,574,766),20908=>array(67,-72,958,855),20909=>array(61,-72,957,840),20910=>array(40,-57,940,717),20911=>array(52,-48,888,781),20912=>array(48,-65,966,837),20913=>array(53,-22,951,769),20914=>array(44,-61,897,833),20915=>array(55,-66,972,836),20916=>array(65,-63,936,793),20917=>array(38,-72,933,758),20918=>array(63,-62,954,834),20919=>array(54,-71,966,849),20920=>array(49,-62,954,835),20921=>array(58,-71,956,839),20922=>array(58,-61,939,786),20923=>array(52,-60,948,832),20924=>array(55,-66,957,827),20925=>array(48,-67,893,830),20926=>array(48,-62,970,843),20927=>array(31,-62,959,841),20928=>array(58,-61,922,839),20929=>array(58,-65,948,835),20930=>array(64,-71,955,840),20931=>array(48,-68,975,843),20932=>array(44,-70,936,835),20933=>array(59,-49,895,788),20934=>array(57,-65,950,835),20935=>array(39,-60,943,830),20936=>array(55,-67,950,822),20937=>array(63,-63,961,830),20938=>array(49,-50,955,854),20939=>array(33,-74,878,781),20940=>array(41,-70,959,831),20941=>array(48,-58,965,839),20942=>array(57,-38,962,817),20943=>array(38,-80,939,834),20944=>array(60,-27,954,787),20945=>array(42,-67,959,834),20946=>array(42,-58,927,835),20947=>array(54,-62,978,791),20948=>array(46,-52,974,866),20949=>array(54,-70,946,788),20950=>array(54,-64,950,841),20951=>array(39,-69,951,825),20952=>array(39,-53,951,851),20953=>array(32,-59,956,797),20954=>array(59,-68,955,831),20955=>array(43,-64,930,832),20956=>array(55,-65,973,833),20957=>array(16,-70,972,819),20958=>array(46,-73,951,818),20959=>array(37,-70,962,837),20960=>array(34,-65,961,774),20961=>array(72,-71,935,767),20962=>array(72,-71,935,831),20963=>array(72,-71,935,801),20964=>array(34,-65,939,791),20965=>array(52,-74,949,778),20966=>array(18,-67,935,818),20967=>array(47,-65,953,791),20968=>array(34,-65,939,791),20969=>array(38,-61,961,791),20970=>array(34,-65,939,791),20971=>array(48,-58,958,842),20972=>array(34,-65,939,791),20973=>array(32,-60,966,837),20974=>array(34,-65,939,791),20975=>array(72,-65,972,826),20976=>array(63,-66,963,792),20977=>array(62,-67,954,836),20978=>array(63,-66,963,792),20979=>array(59,-74,954,839),20980=>array(39,-56,952,800),20981=>array(112,-72,888,808),20982=>array(130,-44,870,775),20983=>array(128,-64,872,798),20984=>array(143,-66,894,778),20985=>array(126,-38,874,775),20986=>array(144,-65,868,838),20987=>array(75,-67,925,826),20988=>array(111,-66,889,819),20989=>array(81,-61,919,799),20990=>array(102,-52,898,803),20991=>array(75,-64,925,828),20992=>array(85,-34,856,760),20993=>array(80,-50,868,782),20994=>array(364,-64,619,827),20995=>array(46,-54,877,761),20996=>array(53,-35,947,751),20997=>array(70,-69,917,751),20998=>array(65,-69,936,779),20999=>array(44,-73,897,797),21000=>array(77,-64,899,817),21001=>array(55,-77,905,826),21002=>array(71,-62,893,831),21003=>array(56,-63,893,831),21004=>array(72,-66,908,836),21005=>array(77,-43,851,828),21006=>array(71,-62,893,839),21007=>array(62,-63,913,840),21008=>array(53,-66,910,821),21009=>array(59,-70,899,829),21010=>array(45,-64,897,835),21011=>array(41,-69,907,826),21012=>array(95,-66,914,836),21013=>array(36,-66,947,806),21014=>array(60,-69,913,826),21015=>array(83,-76,901,832),21016=>array(29,-57,884,841),21017=>array(30,-66,883,823),21018=>array(90,-60,873,830),21019=>array(43,-61,893,837),21020=>array(57,-64,912,832),21021=>array(32,-73,900,822),21022=>array(56,-59,900,833),21023=>array(78,-70,893,831),21024=>array(27,-75,885,820),21025=>array(100,-67,901,828),21026=>array(49,-61,907,835),21027=>array(67,-65,878,831),21028=>array(58,-70,898,832),21029=>array(54,-68,899,825),21030=>array(72,-65,873,831),21031=>array(58,-64,906,831),21032=>array(55,-64,911,841),21033=>array(57,-67,920,826),21034=>array(63,-68,906,830),21035=>array(70,-70,883,821),21036=>array(44,-63,897,841),21037=>array(21,-60,875,827),21038=>array(77,-69,898,831),21039=>array(53,-64,900,823),21040=>array(65,-65,905,826),21041=>array(47,-69,973,825),21042=>array(64,-64,914,828),21043=>array(42,-65,905,831),21044=>array(44,-68,898,826),21045=>array(54,-61,894,833),21046=>array(77,-68,914,836),21047=>array(59,-68,898,830),21048=>array(69,-55,952,837),21049=>array(41,-63,892,837),21050=>array(71,-65,906,831),21051=>array(56,-63,902,829),21052=>array(62,-54,927,831),21053=>array(30,-57,881,837),21054=>array(42,-62,898,825),21055=>array(35,-68,882,823),21056=>array(79,-63,874,826),21057=>array(60,-62,919,831),21058=>array(28,-68,882,830),21059=>array(41,-64,897,845),21060=>array(67,-65,918,831),21061=>array(50,-69,895,829),21062=>array(138,-69,899,829),21063=>array(67,-70,897,830),21064=>array(119,-66,879,825),21065=>array(53,-63,900,834),21066=>array(80,-63,894,833),21067=>array(35,-63,965,836),21068=>array(63,-66,914,835),21069=>array(76,-60,924,850),21070=>array(79,-70,907,841),21071=>array(33,-69,971,839),21072=>array(88,-63,875,830),21073=>array(28,-65,883,838),21074=>array(77,-62,910,829),21075=>array(44,-59,924,814),21076=>array(60,-71,906,829),21077=>array(50,-57,912,845),21078=>array(63,-65,896,833),21079=>array(110,-69,891,830),21080=>array(88,-68,874,830),21081=>array(35,-62,958,830),21082=>array(46,-58,893,836),21083=>array(103,-67,898,829),21084=>array(52,-73,918,851),21085=>array(71,-62,893,848),21086=>array(82,-65,920,836),21087=>array(66,-73,913,823),21088=>array(55,-71,877,844),21089=>array(62,-67,943,835),21090=>array(73,-68,924,823),21091=>array(35,-65,907,844),21092=>array(52,-66,906,826),21093=>array(54,-48,879,836),21094=>array(32,-63,900,840),21095=>array(21,-62,880,833),21096=>array(39,-66,922,834),21097=>array(36,-67,910,834),21098=>array(70,-64,927,842),21099=>array(55,-75,917,835),21100=>array(71,-69,917,833),21101=>array(55,-70,921,821),21102=>array(111,-64,896,829),21103=>array(74,-70,914,829),21104=>array(46,-65,918,828),21105=>array(37,-70,971,837),21106=>array(59,-58,914,833),21107=>array(36,-56,894,804),21108=>array(68,-64,914,835),21109=>array(46,-72,901,842),21110=>array(46,-64,911,838),21111=>array(43,-67,905,848),21112=>array(54,-55,903,845),21113=>array(42,-65,920,824),21114=>array(33,-76,968,833),21115=>array(42,-70,904,831),21116=>array(32,-71,905,852),21117=>array(53,-62,924,829),21118=>array(112,-59,890,829),21119=>array(50,-62,900,846),21120=>array(37,-67,904,819),21121=>array(37,-68,894,835),21122=>array(52,-70,923,829),21123=>array(50,-63,921,830),21124=>array(40,-54,911,835),21125=>array(57,-63,910,823),21126=>array(26,-63,912,844),21127=>array(40,-67,910,835),21128=>array(53,-63,947,840),21129=>array(44,-64,911,837),21130=>array(45,-71,917,854),21131=>array(38,-71,906,823),21132=>array(44,-65,928,836),21133=>array(47,-69,897,848),21134=>array(47,-68,886,848),21135=>array(91,-64,883,842),21136=>array(44,-66,903,825),21137=>array(53,-73,915,827),21138=>array(41,-71,919,843),21139=>array(61,-64,919,861),21140=>array(39,-75,973,840),21141=>array(36,-68,908,825),21142=>array(34,-61,905,852),21143=>array(58,-73,913,830),21144=>array(43,-62,899,860),21145=>array(67,-70,921,841),21146=>array(46,-50,909,848),21147=>array(70,-56,863,824),21148=>array(45,-65,958,825),21149=>array(35,-70,895,820),21150=>array(64,-59,931,838),21151=>array(73,-76,892,823),21152=>array(58,-76,913,831),21153=>array(35,-69,958,829),21154=>array(30,-63,900,824),21155=>array(67,-63,942,838),21156=>array(40,-63,946,839),21157=>array(46,-65,895,846),21158=>array(36,-69,946,844),21159=>array(73,-71,896,824),21160=>array(55,-60,887,832),21161=>array(53,-67,926,833),21162=>array(67,-70,939,822),21163=>array(63,-75,918,823),21164=>array(42,-68,904,844),21165=>array(64,-63,915,830),21166=>array(60,-64,927,836),21167=>array(47,-67,946,834),21168=>array(99,-59,888,833),21169=>array(30,-58,901,831),21170=>array(25,-59,888,833),21171=>array(59,-61,915,830),21172=>array(59,-61,896,841),21173=>array(35,-73,957,827),21174=>array(14,-57,904,822),21175=>array(80,-72,909,842),21176=>array(62,-49,922,831),21177=>array(68,-65,927,832),21178=>array(90,-77,924,824),21179=>array(96,-73,917,828),21180=>array(57,-62,915,839),21181=>array(89,-57,869,792),21182=>array(53,-63,926,830),21183=>array(58,-57,951,833),21184=>array(40,-69,951,846),21185=>array(55,-70,916,829),21186=>array(76,-55,928,839),21187=>array(103,-75,904,831),21188=>array(62,-77,904,839),21189=>array(32,-68,904,836),21190=>array(113,-75,915,843),21191=>array(45,-70,875,809),21192=>array(95,-68,890,830),21193=>array(38,-60,965,835),21194=>array(35,-63,965,836),21195=>array(30,-65,890,830),21196=>array(49,-62,914,850),21197=>array(43,-72,909,826),21198=>array(105,-59,939,832),21199=>array(103,-77,914,840),21200=>array(48,-77,914,822),21201=>array(54,-65,916,836),21202=>array(72,-65,917,829),21203=>array(88,-70,916,828),21204=>array(65,-77,905,832),21205=>array(58,-68,914,832),21206=>array(77,-76,953,839),21207=>array(48,-67,918,811),21208=>array(54,-71,914,827),21209=>array(37,-71,971,844),21210=>array(56,-76,922,827),21211=>array(51,-76,952,838),21212=>array(48,-75,926,832),21213=>array(41,-76,957,839),21214=>array(52,-73,919,832),21215=>array(58,-61,967,837),21216=>array(43,-72,926,827),21217=>array(67,-68,921,832),21218=>array(49,-68,957,829),21219=>array(58,-66,916,837),21220=>array(44,-68,929,827),21221=>array(49,-55,949,819),21222=>array(37,-76,918,842),21223=>array(37,-61,920,841),21224=>array(53,-69,912,842),21225=>array(53,-58,899,850),21226=>array(31,-68,940,842),21227=>array(28,-69,910,822),21228=>array(27,-69,934,840),21229=>array(52,-73,918,849),21230=>array(26,-73,931,835),21231=>array(54,-78,921,844),21232=>array(35,-66,966,834),21233=>array(54,-67,924,830),21234=>array(54,-72,928,833),21235=>array(45,-76,918,839),21236=>array(46,-73,928,825),21237=>array(27,-76,929,825),21238=>array(44,-45,949,840),21239=>array(54,-61,919,844),21240=>array(38,-76,920,838),21241=>array(30,-69,875,826),21242=>array(82,-62,896,850),21243=>array(93,-59,894,838),21244=>array(61,-63,903,826),21245=>array(82,-62,900,839),21246=>array(56,-55,898,829),21247=>array(71,-44,895,852),21248=>array(84,-59,930,838),21249=>array(38,-59,928,838),21250=>array(55,-59,912,844),21251=>array(55,-59,912,844),21252=>array(55,-59,912,844),21253=>array(48,-33,955,838),21254=>array(64,-58,902,842),21255=>array(63,-59,912,839),21256=>array(55,-59,912,844),21257=>array(57,-66,886,837),21258=>array(57,-59,911,845),21259=>array(68,-60,938,841),21260=>array(68,-60,938,841),21261=>array(74,-63,922,843),21262=>array(58,-70,918,829),21263=>array(42,-65,964,834),21264=>array(59,-65,915,845),21265=>array(48,-63,914,840),21266=>array(48,-68,902,843),21267=>array(52,-68,909,843),21268=>array(48,-63,916,840),21269=>array(304,-45,928,803),21270=>array(48,-57,950,836),21271=>array(45,-50,948,792),21272=>array(99,-53,921,804),21273=>array(56,-78,970,811),21274=>array(133,-71,930,795),21275=>array(93,-26,894,768),21276=>array(99,-21,926,788),21277=>array(92,-70,923,831),21278=>array(93,-26,894,768),21279=>array(96,-23,920,794),21280=>array(128,-48,921,790),21281=>array(121,-70,921,791),21282=>array(115,-32,942,778),21283=>array(133,-71,930,795),21284=>array(113,-76,930,811),21285=>array(112,-32,912,791),21286=>array(112,-32,959,796),21287=>array(114,-32,916,796),21288=>array(112,-32,922,796),21289=>array(101,-28,918,785),21290=>array(114,-69,931,789),21291=>array(115,-32,942,778),21292=>array(87,-29,950,789),21293=>array(85,-26,941,792),21294=>array(112,-32,922,796),21295=>array(129,-71,930,795),21296=>array(136,-23,951,787),21297=>array(117,-72,953,814),21298=>array(117,-26,945,804),21299=>array(133,-71,946,795),21300=>array(118,-29,954,780),21301=>array(85,-26,932,804),21302=>array(136,-59,951,795),21303=>array(92,-31,938,784),21304=>array(76,-5,924,762),21305=>array(134,-71,933,742),21306=>array(133,-57,933,784),21307=>array(103,-56,927,791),21308=>array(77,-26,934,797),21309=>array(69,-30,942,787),21310=>array(71,-30,950,796),21311=>array(118,-68,939,800),21312=>array(133,-71,930,795),21313=>array(105,-70,902,838),21314=>array(64,-37,962,786),21315=>array(113,-68,906,830),21316=>array(67,-44,933,821),21317=>array(46,-68,948,819),21318=>array(55,-64,950,833),21319=>array(80,-71,930,827),21320=>array(90,-68,918,834),21321=>array(55,-69,941,829),21322=>array(76,-67,909,824),21323=>array(69,-63,931,827),21324=>array(63,-59,937,825),21325=>array(91,-26,909,787),21326=>array(28,-57,918,831),21327=>array(51,-62,948,834),21328=>array(94,-26,911,787),21329=>array(64,-67,936,846),21330=>array(82,-67,918,837),21331=>array(65,-68,935,826),21332=>array(63,-70,924,835),21333=>array(54,-58,926,841),21334=>array(49,-65,923,832),21335=>array(68,-72,942,830),21336=>array(64,-62,936,854),21337=>array(58,-49,939,830),21338=>array(53,-71,949,835),21339=>array(53,-46,942,813),21340=>array(403,-65,899,825),21341=>array(73,-26,924,790),21342=>array(74,-62,926,819),21343=>array(107,-63,947,828),21344=>array(184,-70,903,832),21345=>array(77,-68,927,828),21346=>array(39,-58,916,829),21347=>array(113,-65,903,833),21348=>array(136,-66,911,826),21349=>array(136,-66,911,826),21350=>array(37,-68,957,827),21351=>array(111,-62,954,818),21352=>array(96,-67,902,836),21353=>array(303,-69,717,781),21354=>array(291,-69,743,781),21355=>array(63,-5,913,747),21356=>array(104,-69,892,832),21357=>array(53,-69,890,746),21358=>array(59,-65,933,835),21359=>array(50,-62,903,839),21360=>array(148,-64,883,835),21361=>array(62,-67,928,836),21362=>array(52,-55,916,799),21363=>array(55,-67,896,786),21364=>array(49,-60,888,826),21365=>array(59,-71,883,815),21366=>array(29,-70,893,836),21367=>array(31,-45,959,834),21368=>array(73,-63,898,846),21369=>array(39,-54,907,861),21370=>array(26,-27,947,783),21371=>array(47,-68,910,837),21372=>array(51,-71,962,832),21373=>array(140,-73,894,827),21374=>array(88,-63,894,788),21375=>array(41,-70,920,834),21376=>array(54,-60,907,829),21377=>array(39,-63,951,835),21378=>array(38,-64,922,791),21379=>array(62,-67,900,836),21380=>array(50,-64,942,777),21381=>array(38,-67,904,774),21382=>array(39,-57,911,786),21383=>array(40,-57,941,789),21384=>array(38,-68,914,792),21385=>array(36,-56,911,781),21386=>array(51,-75,933,775),21387=>array(37,-63,913,771),21388=>array(37,-62,926,778),21389=>array(35,-72,922,775),21390=>array(44,-68,937,796),21391=>array(56,-68,936,777),21392=>array(34,-64,957,788),21393=>array(29,-64,942,788),21394=>array(52,-64,934,779),21395=>array(40,-57,926,798),21396=>array(35,-62,948,793),21397=>array(17,-73,896,786),21398=>array(27,-67,957,788),21399=>array(73,-65,957,780),21400=>array(45,-74,932,779),21401=>array(49,-70,956,795),21402=>array(50,-65,940,809),21403=>array(34,-64,950,788),21404=>array(46,-72,959,782),21405=>array(50,-68,943,780),21406=>array(57,-73,932,764),21407=>array(59,-65,932,787),21408=>array(39,-63,942,788),21409=>array(50,-101,916,782),21410=>array(18,-69,925,785),21411=>array(35,-73,938,765),21412=>array(39,-64,974,792),21413=>array(39,-67,962,793),21414=>array(42,-75,938,816),21415=>array(43,-81,951,786),21416=>array(20,-62,909,785),21417=>array(37,-63,961,802),21418=>array(24,-47,929,811),21419=>array(46,-60,948,795),21420=>array(48,-69,966,784),21421=>array(39,-71,963,785),21422=>array(23,-71,930,791),21423=>array(39,-65,958,791),21424=>array(46,-71,951,783),21425=>array(46,-71,948,783),21426=>array(51,-71,939,784),21427=>array(34,-79,894,835),21428=>array(47,-71,947,798),21429=>array(27,-45,882,821),21430=>array(117,11,903,746),21431=>array(56,-20,928,843),21432=>array(61,-25,941,767),21433=>array(57,-65,949,829),21434=>array(56,-59,933,843),21435=>array(79,-56,931,832),21436=>array(61,-64,932,816),21437=>array(67,-44,905,806),21438=>array(97,-60,971,791),21439=>array(61,-72,913,786),21440=>array(133,-48,955,823),21441=>array(38,-32,962,838),21442=>array(18,-74,970,848),21443=>array(30,-88,968,844),21444=>array(30,-15,968,852),21445=>array(30,-61,968,852),21446=>array(68,-66,977,836),21447=>array(38,-68,961,829),21448=>array(94,-34,920,754),21449=>array(63,-50,948,773),21450=>array(36,-64,945,767),21451=>array(63,-61,939,843),21452=>array(37,-67,955,770),21453=>array(51,-71,942,790),21454=>array(53,-50,962,816),21455=>array(58,-38,930,828),21456=>array(38,-62,940,827),21457=>array(38,-60,940,828),21458=>array(52,-57,944,801),21459=>array(58,-68,930,812),21460=>array(50,-64,963,833),21461=>array(48,-50,944,815),21462=>array(43,-70,960,780),21463=>array(64,-68,936,829),21464=>array(38,-59,934,833),21465=>array(16,-63,942,836),21466=>array(141,-75,963,781),21467=>array(52,-75,966,834),21468=>array(48,-57,961,839),21469=>array(54,-51,962,811),21470=>array(19,-61,953,785),21471=>array(31,-67,969,829),21472=>array(55,-29,954,806),21473=>array(34,-70,971,833),21474=>array(52,-71,945,829),21475=>array(184,5,818,695),21476=>array(83,-71,911,823),21477=>array(65,-51,902,840),21478=>array(78,-70,859,780),21479=>array(78,-70,859,780),21480=>array(124,-76,895,755),21481=>array(120,-65,894,766),21482=>array(58,-40,928,772),21483=>array(113,-64,929,831),21484=>array(76,-70,861,789),21485=>array(95,-65,952,781),21486=>array(98,-66,929,766),21487=>array(98,-64,926,769),21488=>array(124,-51,904,840),21489=>array(116,-25,946,810),21490=>array(63,-65,953,835),21491=>array(69,-62,917,837),21492=>array(43,-47,949,829),21493=>array(121,-13,896,782),21494=>array(90,-53,934,843),21495=>array(65,-59,935,804),21496=>array(111,-63,886,790),21497=>array(98,-70,937,763),21498=>array(107,-42,973,770),21499=>array(132,-65,899,831),21500=>array(116,-54,896,762),21501=>array(99,-66,930,768),21502=>array(135,-57,851,798),21503=>array(93,-37,950,788),21504=>array(98,-40,930,817),21505=>array(98,-67,930,776),21506=>array(102,-65,914,847),21507=>array(98,-26,932,835),21508=>array(57,-65,951,836),21509=>array(106,-56,894,783),21510=>array(96,-63,933,830),21511=>array(98,-67,945,780),21512=>array(40,-73,956,859),21513=>array(64,-72,900,823),21514=>array(157,-70,867,775),21515=>array(104,-61,933,832),21516=>array(118,-75,882,787),21517=>array(56,-67,829,836),21518=>array(44,-64,926,844),21519=>array(71,-76,947,824),21520=>array(99,-19,939,825),21521=>array(133,-75,867,831),21522=>array(72,-32,957,837),21523=>array(104,-65,932,775),21524=>array(104,-23,948,836),21525=>array(162,-70,821,770),21526=>array(104,-64,939,835),21527=>array(99,-58,900,789),21528=>array(97,-68,941,840),21529=>array(103,-72,946,833),21530=>array(103,-75,925,774),21531=>array(46,-70,947,783),21532=>array(95,-39,941,769),21533=>array(52,-66,958,822),21534=>array(53,-72,959,773),21535=>array(90,-71,945,854),21536=>array(92,-69,942,827),21537=>array(83,-49,946,816),21538=>array(58,-50,927,799),21539=>array(102,-6,928,805),21540=>array(108,-69,951,836),21541=>array(112,-71,934,780),21542=>array(48,-70,947,775),21543=>array(95,-29,935,779),21544=>array(86,-41,933,824),21545=>array(95,-62,955,806),21546=>array(91,-50,945,851),21547=>array(37,-65,966,858),21548=>array(104,-58,936,863),21549=>array(100,-68,970,824),21550=>array(99,-73,955,838),21551=>array(47,-58,848,857),21552=>array(97,-67,947,838),21553=>array(95,-70,944,835),21554=>array(96,-76,866,819),21555=>array(72,-67,940,787),21556=>array(43,-72,937,783),21557=>array(99,-74,958,827),21558=>array(106,-68,897,793),21559=>array(94,-74,952,831),21560=>array(98,-68,955,788),21561=>array(109,-70,949,836),21562=>array(116,-71,967,782),21563=>array(102,-72,903,834),21564=>array(89,-68,937,825),21565=>array(99,-51,945,844),21566=>array(70,-72,942,782),21567=>array(67,-67,917,832),21568=>array(98,-65,940,787),21569=>array(106,-62,903,827),21570=>array(180,-77,840,772),21571=>array(87,-69,942,789),21572=>array(74,-61,942,783),21573=>array(96,-74,966,833),21574=>array(51,-68,964,774),21575=>array(69,-66,934,819),21576=>array(77,-17,910,773),21577=>array(53,-71,944,787),21578=>array(67,-67,917,832),21579=>array(96,-69,943,829),21580=>array(116,-55,943,842),21581=>array(111,-51,956,743),21582=>array(116,-66,978,790),21583=>array(97,-66,939,835),21584=>array(101,-60,880,825),21585=>array(53,-72,959,830),21586=>array(100,-68,925,765),21587=>array(100,-26,932,824),21588=>array(79,-68,934,832),21589=>array(94,-7,928,767),21590=>array(91,-70,910,765),21591=>array(99,-74,926,764),21592=>array(84,-81,880,780),21593=>array(157,-68,837,760),21594=>array(111,-68,957,838),21595=>array(111,-31,968,831),21596=>array(101,-62,905,831),21597=>array(93,-64,951,841),21598=>array(97,-63,871,790),21599=>array(110,-65,961,819),21600=>array(97,-70,955,826),21601=>array(95,-70,949,786),21602=>array(100,-71,929,784),21603=>array(93,-63,942,777),21604=>array(89,-83,949,856),21605=>array(98,-60,943,841),21606=>array(98,-74,911,828),21607=>array(94,-63,945,831),21608=>array(39,-67,882,780),21609=>array(109,-54,953,751),21610=>array(109,-60,950,760),21611=>array(109,-60,942,845),21612=>array(108,-65,905,767),21613=>array(98,-14,928,831),21614=>array(108,-66,960,771),21615=>array(99,-67,942,787),21616=>array(84,-68,937,836),21617=>array(90,-68,970,830),21618=>array(102,-60,957,820),21619=>array(90,-65,942,830),21620=>array(108,-68,909,833),21621=>array(98,-65,930,785),21622=>array(79,-71,949,828),21623=>array(115,-62,893,786),21624=>array(94,-20,932,769),21625=>array(95,-49,969,830),21626=>array(106,-60,952,794),21627=>array(105,-67,900,835),21628=>array(98,-67,931,825),21629=>array(33,-73,971,862),21630=>array(104,-28,950,783),21631=>array(95,-61,953,841),21632=>array(94,-31,933,787),21633=>array(122,-66,951,828),21634=>array(89,-21,940,783),21635=>array(83,-34,962,834),21636=>array(115,-70,900,826),21637=>array(81,-68,898,833),21638=>array(107,-36,960,833),21639=>array(104,-28,950,802),21640=>array(89,-59,914,836),21641=>array(89,-74,968,824),21642=>array(89,-34,964,818),21643=>array(108,-70,943,840),21644=>array(53,-70,894,821),21645=>array(111,-65,954,840),21646=>array(39,-68,961,833),21647=>array(79,-63,943,848),21648=>array(90,-70,941,833),21649=>array(89,-51,935,842),21650=>array(54,-75,937,777),21651=>array(97,-34,941,773),21652=>array(97,-70,936,829),21653=>array(91,-67,923,828),21654=>array(104,-64,898,832),21655=>array(94,-3,951,830),21656=>array(97,-67,941,832),21657=>array(100,-59,932,830),21658=>array(86,-80,951,847),21659=>array(102,-68,893,836),21660=>array(102,-42,928,817),21661=>array(90,-7,914,809),21662=>array(98,-67,937,775),21663=>array(102,-64,891,730),21664=>array(51,-65,947,784),21665=>array(103,-50,956,800),21666=>array(61,-53,939,806),21667=>array(99,-68,933,811),21668=>array(80,-42,921,819),21669=>array(106,-30,956,782),21670=>array(90,-71,954,835),21671=>array(106,-67,892,829),21672=>array(64,-74,954,840),21673=>array(96,-64,931,840),21674=>array(82,-65,967,824),21675=>array(35,-71,974,779),21676=>array(98,-72,961,830),21677=>array(91,-65,926,828),21678=>array(107,-70,963,824),21679=>array(90,-65,948,848),21680=>array(117,-71,901,818),21681=>array(119,-70,883,841),21682=>array(119,-73,970,836),21683=>array(88,-60,949,824),21684=>array(100,-67,943,824),21685=>array(84,-63,963,854),21686=>array(110,-68,947,827),21687=>array(88,-62,944,842),21688=>array(58,-66,959,838),21689=>array(91,-51,908,828),21690=>array(91,-23,936,778),21691=>array(88,-63,943,835),21692=>array(119,-55,881,799),21693=>array(103,-64,898,785),21694=>array(105,-30,957,830),21695=>array(99,-69,949,835),21696=>array(47,-68,951,832),21697=>array(116,-66,884,792),21698=>array(91,-64,936,779),21699=>array(108,-69,904,783),21700=>array(90,-72,935,831),21701=>array(102,-61,908,831),21702=>array(106,-80,919,845),21703=>array(108,-25,949,831),21704=>array(84,-66,945,851),21705=>array(74,-60,944,828),21706=>array(104,-75,942,831),21707=>array(95,-27,935,846),21708=>array(85,-71,971,832),21709=>array(97,-55,900,875),21710=>array(103,-66,949,835),21711=>array(108,-73,973,781),21712=>array(99,-26,925,764),21713=>array(102,-18,924,766),21714=>array(87,-46,945,803),21715=>array(103,-63,936,821),21716=>array(98,-64,931,814),21717=>array(99,-61,872,821),21718=>array(93,-52,940,855),21719=>array(86,-60,922,833),21720=>array(103,-71,958,830),21721=>array(100,-47,949,829),21722=>array(81,-77,943,778),21723=>array(51,-69,962,803),21724=>array(101,-70,945,842),21725=>array(88,-62,950,828),21726=>array(108,-70,945,838),21727=>array(75,-59,886,837),21728=>array(110,-65,926,831),21729=>array(62,-62,943,785),21730=>array(89,-52,935,801),21731=>array(120,-14,943,779),21732=>array(87,-55,956,825),21733=>array(70,-60,931,784),21734=>array(84,-67,942,824),21735=>array(81,-66,946,827),21736=>array(109,-69,912,832),21737=>array(100,-15,933,779),21738=>array(107,-74,942,785),21739=>array(113,-73,962,762),21740=>array(78,-55,930,833),21741=>array(64,-71,949,773),21742=>array(92,-68,927,833),21743=>array(118,-65,951,783),21744=>array(80,-44,885,840),21745=>array(98,-65,923,829),21746=>array(63,-62,926,825),21747=>array(99,-81,947,824),21748=>array(108,-73,973,856),21749=>array(82,-69,913,829),21750=>array(88,-64,951,825),21751=>array(103,-70,938,814),21752=>array(94,-74,917,818),21753=>array(92,-68,936,834),21754=>array(87,-70,931,832),21755=>array(102,-66,937,778),21756=>array(95,-68,932,846),21757=>array(91,-74,952,786),21758=>array(95,-64,968,844),21759=>array(65,-62,959,839),21760=>array(110,-62,954,830),21761=>array(97,-62,931,845),21762=>array(116,-52,960,835),21763=>array(116,-66,900,828),21764=>array(101,-66,947,782),21765=>array(87,-45,951,867),21766=>array(101,-69,961,849),21767=>array(53,-76,939,786),21768=>array(88,-30,943,788),21769=>array(94,-68,945,848),21770=>array(106,-66,954,835),21771=>array(112,-62,950,830),21772=>array(98,-74,964,813),21773=>array(113,-74,946,841),21774=>array(98,-52,904,844),21775=>array(84,-62,938,843),21776=>array(44,-71,938,835),21777=>array(92,-36,934,820),21778=>array(88,-65,940,781),21779=>array(116,-71,924,829),21780=>array(99,-70,934,785),21781=>array(100,-48,923,863),21782=>array(82,-23,951,793),21783=>array(103,-65,957,827),21784=>array(34,-60,979,822),21785=>array(112,-57,987,812),21786=>array(97,-62,957,777),21787=>array(101,-66,948,830),21788=>array(59,-37,952,802),21789=>array(104,-62,938,804),21790=>array(92,-65,936,832),21791=>array(95,-37,929,851),21792=>array(91,-72,914,824),21793=>array(109,-61,963,792),21794=>array(104,-62,938,834),21795=>array(86,-29,935,842),21796=>array(74,-73,948,832),21797=>array(97,-46,940,821),21798=>array(97,-67,951,825),21799=>array(110,-70,900,780),21800=>array(80,-44,959,779),21801=>array(99,-73,946,833),21802=>array(74,-65,957,843),21803=>array(74,-27,959,804),21804=>array(87,-70,957,829),21805=>array(104,-71,941,837),21806=>array(42,-67,944,843),21807=>array(97,-65,945,836),21808=>array(100,-64,909,830),21809=>array(115,-68,900,787),21810=>array(107,-79,948,827),21811=>array(82,-69,962,802),21812=>array(106,-71,942,830),21813=>array(112,-44,995,856),21814=>array(113,-66,964,837),21815=>array(94,-75,933,845),21816=>array(78,-35,950,847),21817=>array(81,-56,972,832),21818=>array(110,-74,961,833),21819=>array(104,-65,951,841),21820=>array(113,-68,947,843),21821=>array(92,-67,953,832),21822=>array(84,-30,940,831),21823=>array(92,-28,953,842),21824=>array(105,-73,941,785),21825=>array(103,-66,902,791),21826=>array(93,-76,971,827),21827=>array(97,-70,930,833),21828=>array(84,-63,971,774),21829=>array(95,-67,933,833),21830=>array(55,-56,945,825),21831=>array(39,-73,928,844),21832=>array(111,-65,947,837),21833=>array(76,-76,945,819),21834=>array(93,-66,932,782),21835=>array(109,-66,987,837),21836=>array(86,-31,955,819),21837=>array(84,-57,942,864),21838=>array(46,-67,962,835),21839=>array(119,-71,889,784),21840=>array(89,-62,931,843),21841=>array(84,-77,962,829),21842=>array(113,-68,903,788),21843=>array(54,-60,964,838),21844=>array(91,-60,945,844),21845=>array(111,-62,908,842),21846=>array(83,-62,952,836),21847=>array(123,-65,900,846),21848=>array(104,-72,965,846),21849=>array(85,-55,952,824),21850=>array(77,-66,927,795),21851=>array(83,-73,933,822),21852=>array(83,-68,955,786),21853=>array(76,-67,955,821),21854=>array(91,-25,940,785),21855=>array(35,-68,969,836),21856=>array(88,-60,913,812),21857=>array(95,-66,932,826),21858=>array(109,-61,963,792),21859=>array(83,-68,926,832),21860=>array(91,-69,935,846),21861=>array(97,-70,950,850),21862=>array(91,-64,930,836),21863=>array(90,-72,914,828),21864=>array(90,-66,927,828),21865=>array(121,-63,959,831),21866=>array(110,-64,909,838),21867=>array(115,-65,960,835),21868=>array(63,-66,913,825),21869=>array(94,-66,914,833),21870=>array(79,-63,912,829),21871=>array(82,-68,906,794),21872=>array(86,-71,948,814),21873=>array(86,-48,935,822),21874=>array(104,-50,908,842),21875=>array(86,-30,973,843),21876=>array(115,-58,945,833),21877=>array(105,-64,983,833),21878=>array(86,-72,942,844),21879=>array(94,-64,942,840),21880=>array(91,-65,923,826),21881=>array(91,-80,933,781),21882=>array(91,-72,944,785),21883=>array(92,-67,908,833),21884=>array(90,-67,930,823),21885=>array(114,-59,989,859),21886=>array(76,-66,957,832),21887=>array(110,-30,955,827),21888=>array(95,-69,965,819),21889=>array(93,-58,910,793),21890=>array(108,-69,960,785),21891=>array(92,-67,939,835),21892=>array(56,-70,907,835),21893=>array(92,-18,924,788),21894=>array(82,-50,918,825),21895=>array(112,-67,904,831),21896=>array(86,-65,942,827),21897=>array(88,-74,950,840),21898=>array(92,-72,930,837),21899=>array(83,-65,952,832),21900=>array(52,-71,909,787),21901=>array(104,-69,967,824),21902=>array(112,-67,906,788),21903=>array(84,-59,931,833),21904=>array(79,-81,936,830),21905=>array(97,-65,933,841),21906=>array(92,-48,956,849),21907=>array(110,-72,957,777),21908=>array(91,-70,933,781),21909=>array(110,-66,953,783),21910=>array(97,-66,939,829),21911=>array(85,-68,951,801),21912=>array(81,-67,930,834),21913=>array(85,-60,968,833),21914=>array(79,-65,971,838),21915=>array(91,-67,979,836),21916=>array(86,-63,938,837),21917=>array(105,-55,913,801),21918=>array(77,-73,921,840),21919=>array(116,-61,901,787),21920=>array(97,-32,936,825),21921=>array(107,-71,949,828),21922=>array(107,-71,951,827),21923=>array(52,-74,965,824),21924=>array(90,-18,935,861),21925=>array(110,-71,968,837),21926=>array(132,-68,888,789),21927=>array(79,-26,945,829),21928=>array(86,-73,959,838),21929=>array(76,-71,966,812),21930=>array(75,-73,957,829),21931=>array(96,-55,961,835),21932=>array(50,-71,951,830),21933=>array(88,-53,939,860),21934=>array(53,-68,945,789),21935=>array(89,-59,953,851),21936=>array(90,-72,965,837),21937=>array(90,-70,941,788),21938=>array(107,-65,905,836),21939=>array(82,-28,916,834),21940=>array(72,-71,972,832),21941=>array(75,-62,924,832),21942=>array(94,-63,906,834),21943=>array(110,-67,925,831),21944=>array(65,-77,959,841),21945=>array(90,-26,953,851),21946=>array(112,-62,982,834),21947=>array(80,-70,948,858),21948=>array(110,-32,970,846),21949=>array(90,-66,936,807),21950=>array(82,-66,893,826),21951=>array(50,-69,961,780),21952=>array(49,-72,955,829),21953=>array(88,-64,946,839),21954=>array(108,-72,960,845),21955=>array(94,-68,938,838),21956=>array(82,-62,954,790),21957=>array(88,-73,945,845),21958=>array(84,-65,947,847),21959=>array(56,-75,946,832),21960=>array(107,-29,963,826),21961=>array(87,-64,944,831),21962=>array(110,-68,962,791),21963=>array(106,-70,933,838),21964=>array(98,-22,946,841),21965=>array(108,-70,907,835),21966=>array(104,-68,909,783),21967=>array(112,-68,977,827),21968=>array(118,-70,954,847),21969=>array(88,-21,941,830),21970=>array(76,-64,944,830),21971=>array(81,-73,961,793),21972=>array(90,-85,963,851),21973=>array(95,-68,963,784),21974=>array(92,-70,962,828),21975=>array(105,-70,937,783),21976=>array(84,-59,963,851),21977=>array(111,-64,956,841),21978=>array(118,-56,916,846),21979=>array(95,-56,970,863),21980=>array(95,-69,943,834),21981=>array(92,-64,930,788),21982=>array(119,-66,961,837),21983=>array(89,-27,938,840),21984=>array(48,-81,960,829),21985=>array(83,-71,955,791),21986=>array(100,-36,950,780),21987=>array(112,-68,910,786),21988=>array(92,-70,938,827),21989=>array(84,-68,957,844),21990=>array(80,-68,942,829),21991=>array(34,-75,973,842),21992=>array(83,-68,939,836),21993=>array(91,-67,946,836),21994=>array(90,-70,954,835),21995=>array(89,-66,943,776),21996=>array(93,-70,942,830),21997=>array(91,-37,929,849),21998=>array(63,-57,939,788),21999=>array(87,-39,950,782),22000=>array(68,-75,913,845),22001=>array(90,-68,974,862),22002=>array(71,-57,940,845),22003=>array(90,-67,949,822),22004=>array(72,-54,969,835),22005=>array(88,-54,942,772),22006=>array(83,-68,935,787),22007=>array(86,-64,964,832),22008=>array(58,-57,951,854),22009=>array(83,-56,963,827),22010=>array(117,-68,956,831),22011=>array(98,-69,961,841),22012=>array(118,-72,972,829),22013=>array(82,-76,950,834),22014=>array(79,-68,961,837),22015=>array(115,-78,962,841),22016=>array(87,-73,927,846),22017=>array(76,-68,943,835),22018=>array(121,-68,894,823),22019=>array(83,-70,949,841),22020=>array(83,-70,958,845),22021=>array(82,-64,964,788),22022=>array(83,-72,964,832),22023=>array(101,-80,965,846),22024=>array(91,-72,935,830),22025=>array(50,-65,957,833),22026=>array(85,-68,938,834),22027=>array(73,-78,972,839),22028=>array(91,-70,940,789),22029=>array(90,-74,933,832),22030=>array(86,-67,946,784),22031=>array(60,-66,960,812),22032=>array(91,-50,966,801),22033=>array(106,-70,913,836),22034=>array(99,-25,956,835),22035=>array(102,-63,906,799),22036=>array(90,-73,949,805),22037=>array(116,-64,951,785),22038=>array(84,-74,947,832),22039=>array(109,-67,905,836),22040=>array(91,-68,924,823),22041=>array(81,-73,926,836),22042=>array(101,-70,946,824),22043=>array(74,-75,975,833),22044=>array(106,-61,981,840),22045=>array(96,-70,941,832),22046=>array(103,-70,911,832),22047=>array(91,-68,933,822),22048=>array(81,-54,956,804),22049=>array(89,-23,939,836),22050=>array(106,-59,962,800),22051=>array(86,-65,883,814),22052=>array(91,-64,927,789),22053=>array(84,-65,973,831),22054=>array(27,-86,973,836),22055=>array(90,-64,945,848),22056=>array(91,-65,923,826),22057=>array(81,-68,945,831),22058=>array(106,-83,953,780),22059=>array(84,-71,949,831),22060=>array(77,-72,959,809),22061=>array(91,-59,924,827),22062=>array(95,-69,923,833),22063=>array(79,-77,949,843),22064=>array(86,-65,947,833),22065=>array(89,-72,891,780),22066=>array(79,-75,906,830),22067=>array(113,-80,964,832),22068=>array(91,-65,950,828),22069=>array(76,-67,944,835),22070=>array(93,-65,930,837),22071=>array(100,-48,948,863),22072=>array(80,-63,948,847),22073=>array(86,-67,952,845),22074=>array(115,-66,990,830),22075=>array(90,-69,933,833),22076=>array(77,-67,926,796),22077=>array(107,-68,956,785),22078=>array(111,-71,958,780),22079=>array(82,-68,937,783),22080=>array(113,-80,964,781),22081=>array(85,-48,959,768),22082=>array(92,-64,950,856),22083=>array(110,-63,971,841),22084=>array(77,-68,945,831),22085=>array(109,-70,922,834),22086=>array(113,-69,978,783),22087=>array(103,-36,934,841),22088=>array(98,-68,967,836),22089=>array(106,-68,983,837),22090=>array(108,-67,940,784),22091=>array(88,-73,973,837),22092=>array(92,-73,905,835),22093=>array(85,-71,944,843),22094=>array(87,-23,937,839),22095=>array(106,-63,991,858),22096=>array(64,-70,933,795),22097=>array(90,-62,948,840),22098=>array(86,-74,954,832),22099=>array(93,-76,936,832),22100=>array(79,-11,956,855),22101=>array(61,-77,904,856),22102=>array(82,-68,947,790),22103=>array(82,-61,951,830),22104=>array(80,-62,967,796),22105=>array(95,-70,966,851),22106=>array(109,-72,957,779),22107=>array(86,-68,940,829),22108=>array(80,-61,947,828),22109=>array(80,-64,945,834),22110=>array(79,-72,950,855),22111=>array(39,-72,934,844),22112=>array(78,-67,946,835),22113=>array(90,-59,956,849),22114=>array(80,-68,947,853),22115=>array(122,-75,936,779),22116=>array(81,-62,971,832),22117=>array(80,-72,955,835),22118=>array(104,-64,970,838),22119=>array(80,-68,932,830),22120=>array(49,-62,956,798),22121=>array(51,-23,944,789),22122=>array(80,-70,954,792),22123=>array(88,-32,949,825),22124=>array(92,-27,941,838),22125=>array(83,-57,964,864),22126=>array(104,-81,973,782),22127=>array(84,-75,954,830),22128=>array(99,-70,954,848),22129=>array(80,-68,954,833),22130=>array(74,-66,959,853),22131=>array(99,-73,975,833),22132=>array(85,-76,956,838),22133=>array(70,-72,942,847),22134=>array(84,-68,934,834),22135=>array(101,-76,980,838),22136=>array(76,-70,961,827),22137=>array(106,-53,918,841),22138=>array(83,-61,962,832),22139=>array(77,-38,964,839),22140=>array(95,-68,948,842),22141=>array(74,-63,953,835),22142=>array(106,-70,944,833),22143=>array(102,-71,941,780),22144=>array(89,-69,944,838),22145=>array(115,-68,951,785),22146=>array(92,-39,927,821),22147=>array(95,-76,957,828),22148=>array(79,-53,951,842),22149=>array(84,-65,936,789),22150=>array(83,-62,937,835),22151=>array(81,-68,956,834),22152=>array(65,-71,975,797),22153=>array(81,-61,952,835),22154=>array(91,-67,962,856),22155=>array(91,-65,968,833),22156=>array(100,-77,949,832),22157=>array(98,-33,938,821),22158=>array(91,-67,959,848),22159=>array(75,-64,947,837),22160=>array(92,-52,916,850),22161=>array(92,-62,966,828),22162=>array(81,-78,946,835),22163=>array(92,-70,962,839),22164=>array(75,-80,951,836),22165=>array(84,-69,943,846),22166=>array(82,-36,955,832),22167=>array(104,-66,984,787),22168=>array(91,-72,946,784),22169=>array(92,-70,934,830),22170=>array(111,-52,914,803),22171=>array(81,-69,972,847),22172=>array(84,-20,957,794),22173=>array(91,-80,925,841),22174=>array(41,-68,958,841),22175=>array(118,-48,989,844),22176=>array(72,-62,922,834),22177=>array(69,-67,954,833),22178=>array(57,-70,961,833),22179=>array(36,-64,942,786),22180=>array(75,-78,934,835),22181=>array(82,-60,949,830),22182=>array(78,-65,939,790),22183=>array(90,-71,947,828),22184=>array(79,-70,944,837),22185=>array(86,-68,933,835),22186=>array(98,-70,906,780),22187=>array(89,-69,966,842),22188=>array(92,-64,958,842),22189=>array(74,-63,967,835),22190=>array(43,-68,949,845),22191=>array(88,-66,914,784),22192=>array(103,-68,955,838),22193=>array(77,-68,963,835),22194=>array(55,-65,960,845),22195=>array(58,-64,955,841),22196=>array(46,-62,964,817),22197=>array(85,-59,948,846),22198=>array(82,-65,935,788),22199=>array(89,-69,968,842),22200=>array(74,-74,917,829),22201=>array(63,-72,959,834),22202=>array(67,-63,956,805),22203=>array(106,-60,919,794),22204=>array(76,-76,960,844),22205=>array(76,-75,948,833),22206=>array(92,-64,940,828),22207=>array(71,-67,939,834),22208=>array(84,-64,947,832),22209=>array(80,-66,950,807),22210=>array(55,-77,961,779),22211=>array(87,-65,954,831),22212=>array(83,-71,938,843),22213=>array(57,-66,969,792),22214=>array(87,-81,946,834),22215=>array(111,-68,957,790),22216=>array(82,-75,950,831),22217=>array(98,-65,962,796),22218=>array(72,-75,951,834),22219=>array(92,-74,947,824),22220=>array(88,-52,965,842),22221=>array(55,-51,949,839),22222=>array(64,-62,972,832),22223=>array(50,-68,944,839),22224=>array(75,-78,957,830),22225=>array(88,-74,929,817),22226=>array(74,-57,948,839),22227=>array(87,-52,945,845),22228=>array(78,-70,959,831),22229=>array(83,-77,953,832),22230=>array(74,-51,958,858),22231=>array(133,-54,879,781),22232=>array(129,-52,871,778),22233=>array(123,-30,865,754),22234=>array(132,-73,868,776),22235=>array(121,-35,879,744),22236=>array(123,-30,865,754),22237=>array(107,-65,886,789),22238=>array(129,-30,871,754),22239=>array(74,-68,863,839),22240=>array(130,-64,870,793),22241=>array(121,-64,895,788),22242=>array(109,-64,865,785),22243=>array(122,-64,878,785),22244=>array(110,-72,891,784),22245=>array(121,-67,894,784),22246=>array(113,-67,887,788),22247=>array(120,-67,892,785),22248=>array(121,-65,894,786),22249=>array(121,-67,894,784),22250=>array(138,-67,879,849),22251=>array(101,-68,901,788),22252=>array(111,-53,877,754),22253=>array(95,-63,900,791),22254=>array(99,-51,894,799),22255=>array(128,-59,884,789),22256=>array(114,-65,886,784),22257=>array(138,-67,879,849),22258=>array(122,-59,878,789),22259=>array(121,-70,879,781),22260=>array(109,-70,866,782),22261=>array(106,-63,863,776),22262=>array(122,-59,878,789),22263=>array(122,-68,905,791),22264=>array(115,-64,907,788),22265=>array(105,-64,897,788),22266=>array(115,-70,885,785),22267=>array(115,-70,885,785),22268=>array(115,-70,885,785),22269=>array(122,-59,878,789),22270=>array(110,-66,866,784),22271=>array(96,-68,892,789),22272=>array(106,-65,894,784),22273=>array(116,-69,903,774),22274=>array(112,-67,897,782),22275=>array(106,-70,905,789),22276=>array(101,-66,896,788),22277=>array(116,-69,873,794),22278=>array(112,-68,865,774),22279=>array(102,-67,896,788),22280=>array(105,-69,895,791),22281=>array(113,-65,900,790),22282=>array(107,-65,906,796),22283=>array(109,-67,890,780),22284=>array(96,-53,900,797),22285=>array(102,-61,905,784),22286=>array(116,-69,903,774),22287=>array(107,-69,896,785),22288=>array(111,-69,908,779),22289=>array(111,-69,898,774),22290=>array(102,-70,898,790),22291=>array(113,-71,899,787),22292=>array(103,-71,900,781),22293=>array(116,-69,903,774),22294=>array(119,-68,906,794),22295=>array(119,-68,906,794),22296=>array(112,-64,903,788),22297=>array(116,-69,903,774),22298=>array(93,-54,893,809),22299=>array(95,-53,893,806),22300=>array(98,-67,902,796),22301=>array(106,-69,894,774),22302=>array(99,-65,901,790),22303=>array(78,-13,922,810),22304=>array(59,-58,957,806),22305=>array(100,-15,895,796),22306=>array(54,-59,939,796),22307=>array(61,-29,960,776),22308=>array(53,-59,961,814),22309=>array(89,-67,934,778),22310=>array(68,-55,944,741),22311=>array(37,-63,913,770),22312=>array(49,-65,921,836),22313=>array(42,-64,949,793),22314=>array(55,-62,953,800),22315=>array(49,-55,930,790),22316=>array(49,-78,951,791),22317=>array(73,-39,927,809),22318=>array(43,-58,945,786),22319=>array(39,-53,954,776),22320=>array(56,-52,935,808),22321=>array(58,-58,952,817),22322=>array(50,-45,943,796),22323=>array(56,-71,907,785),22324=>array(68,-61,917,788),22325=>array(44,-59,948,781),22326=>array(60,-61,953,805),22327=>array(44,-65,932,788),22328=>array(59,-56,897,789),22329=>array(39,-63,912,832),22330=>array(29,-63,897,808),22331=>array(62,-64,948,810),22332=>array(84,-41,938,785),22333=>array(62,-72,903,794),22334=>array(40,-71,956,796),22335=>array(50,-63,967,802),22336=>array(44,-32,949,786),22337=>array(43,-69,952,800),22338=>array(43,-70,966,785),22339=>array(51,-68,958,774),22340=>array(44,-66,967,793),22341=>array(48,-60,972,811),22342=>array(38,-63,970,799),22343=>array(50,-63,906,831),22344=>array(44,-72,946,793),22345=>array(44,-59,944,806),22346=>array(41,-77,953,827),22347=>array(58,-78,967,798),22348=>array(53,-24,947,804),22349=>array(43,-71,948,799),22350=>array(48,-66,962,810),22351=>array(40,-55,968,790),22352=>array(73,-29,927,806),22353=>array(47,-67,951,813),22354=>array(57,-43,952,809),22355=>array(57,-29,952,813),22356=>array(57,-49,974,792),22357=>array(57,-59,952,805),22358=>array(28,-54,961,768),22359=>array(33,-70,947,834),22360=>array(43,-58,951,765),22361=>array(57,-54,952,758),22362=>array(52,-19,932,831),22363=>array(43,-38,939,816),22364=>array(41,-69,912,804),22365=>array(33,-58,943,798),22366=>array(35,-67,902,832),22367=>array(41,-60,955,852),22368=>array(62,-14,926,821),22369=>array(48,-71,963,812),22370=>array(46,-67,945,801),22371=>array(84,-14,933,777),22372=>array(65,-48,908,805),22373=>array(65,-32,933,771),22374=>array(48,-21,952,786),22375=>array(65,-49,936,791),22376=>array(60,-60,952,806),22377=>array(39,-68,945,796),22378=>array(50,-67,947,794),22379=>array(38,-52,904,794),22380=>array(56,-67,980,834),22381=>array(46,-83,953,777),22382=>array(53,-58,964,823),22383=>array(42,-14,948,785),22384=>array(59,-67,914,782),22385=>array(43,-70,957,797),22386=>array(60,-71,925,810),22387=>array(61,-71,920,835),22388=>array(60,-56,944,800),22389=>array(45,-18,953,824),22390=>array(40,-65,943,817),22391=>array(48,-61,947,807),22392=>array(56,-54,909,849),22393=>array(45,-60,958,843),22394=>array(45,-69,955,836),22395=>array(56,-63,954,828),22396=>array(51,-67,941,832),22397=>array(67,-66,968,847),22398=>array(75,-61,918,836),22399=>array(71,-79,945,842),22400=>array(56,-63,940,828),22401=>array(56,-60,967,828),22402=>array(73,-32,927,826),22403=>array(49,-11,952,838),22404=>array(47,-31,941,829),22405=>array(37,-67,929,824),22406=>array(35,-66,911,826),22407=>array(30,-65,903,755),22408=>array(34,-32,946,833),22409=>array(46,-28,955,840),22410=>array(70,-61,939,786),22411=>array(59,-25,953,827),22412=>array(30,-70,898,781),22413=>array(55,-70,883,841),22414=>array(30,-65,948,848),22415=>array(55,-71,954,823),22416=>array(56,-36,926,853),22417=>array(50,-58,920,844),22418=>array(52,-36,926,814),22419=>array(37,-63,949,834),22420=>array(59,-20,954,790),22421=>array(59,-11,954,831),22422=>array(67,-43,904,842),22423=>array(37,-54,956,840),22424=>array(50,-73,963,822),22425=>array(43,-52,962,842),22426=>array(49,-11,953,842),22427=>array(43,-65,965,809),22428=>array(58,-62,949,809),22429=>array(46,-57,963,850),22430=>array(42,-43,953,839),22431=>array(51,-73,955,821),22432=>array(37,-68,952,809),22433=>array(34,-32,946,833),22434=>array(50,-69,932,833),22435=>array(47,-14,947,808),22436=>array(31,-22,931,811),22437=>array(49,-70,960,827),22438=>array(75,-27,949,790),22439=>array(38,-77,891,842),22440=>array(48,-59,954,843),22441=>array(50,-8,922,764),22442=>array(41,-70,949,839),22443=>array(32,-11,932,830),22444=>array(41,-72,946,831),22445=>array(43,-6,923,808),22446=>array(41,-66,965,842),22447=>array(40,-49,942,793),22448=>array(51,-64,940,835),22449=>array(41,-60,883,826),22450=>array(41,-27,941,813),22451=>array(45,-67,956,833),22452=>array(40,-66,923,832),22453=>array(50,-72,951,832),22454=>array(59,-65,948,833),22455=>array(56,-65,944,783),22456=>array(51,-67,959,857),22457=>array(43,-68,943,827),22458=>array(49,-68,954,817),22459=>array(49,-72,960,804),22460=>array(63,-24,969,822),22461=>array(55,-15,951,846),22462=>array(54,-64,955,800),22463=>array(53,-66,941,833),22464=>array(97,-32,916,829),22465=>array(57,-70,958,821),22466=>array(46,-70,959,791),22467=>array(50,-71,956,845),22468=>array(46,-65,949,846),22469=>array(65,-24,959,842),22470=>array(63,-71,906,824),22471=>array(51,-61,893,811),22472=>array(46,-68,953,836),22473=>array(46,-73,945,836),22474=>array(55,-15,951,842),22475=>array(39,-25,943,793),22476=>array(54,-74,955,827),22477=>array(61,-67,903,791),22478=>array(41,-68,951,834),22479=>array(36,-64,964,829),22480=>array(50,-62,970,814),22481=>array(55,-30,951,831),22482=>array(47,-62,945,827),22483=>array(61,-65,956,806),22484=>array(40,-68,948,833),22485=>array(55,-20,959,814),22486=>array(59,-48,962,832),22487=>array(43,-56,945,835),22488=>array(39,-64,923,826),22489=>array(43,-70,938,806),22490=>array(31,-67,892,802),22491=>array(31,-51,915,802),22492=>array(48,-27,967,817),22493=>array(17,-43,964,849),22494=>array(26,-58,966,848),22495=>array(36,-69,965,835),22496=>array(39,-68,959,854),22497=>array(53,-20,959,821),22498=>array(47,-48,959,823),22499=>array(48,-65,951,822),22500=>array(39,-56,961,860),22501=>array(53,-67,959,835),22502=>array(32,-61,959,855),22503=>array(32,-52,952,820),22504=>array(26,-65,974,853),22505=>array(46,-60,954,836),22506=>array(42,-12,944,831),22507=>array(56,-62,907,839),22508=>array(51,-73,965,824),22509=>array(35,-64,949,835),22510=>array(48,-72,971,829),22511=>array(45,-30,945,829),22512=>array(46,-62,959,833),22513=>array(45,-74,963,830),22514=>array(50,-68,976,841),22515=>array(62,-68,899,831),22516=>array(35,-67,953,835),22517=>array(47,-50,959,812),22518=>array(32,-67,973,831),22519=>array(57,-69,960,833),22520=>array(55,-67,911,818),22521=>array(36,-65,938,835),22522=>array(36,-28,980,832),22523=>array(46,-67,951,835),22524=>array(52,-64,958,836),22525=>array(42,-69,948,801),22526=>array(52,-27,945,792),22527=>array(67,-27,945,850),22528=>array(48,-65,906,818),22529=>array(47,-67,966,808),22530=>array(84,-14,933,832),22531=>array(52,-23,958,855),22532=>array(53,-67,956,838),22533=>array(56,-22,944,784),22534=>array(45,-73,950,834),22535=>array(60,-22,954,833),22536=>array(56,-48,911,828),22537=>array(45,-58,947,835),22538=>array(68,-12,951,794),22539=>array(41,-55,907,820),22540=>array(57,-69,901,803),22541=>array(42,-69,962,837),22542=>array(44,-70,963,833),22543=>array(63,-23,958,855),22544=>array(50,-71,956,804),22545=>array(45,-29,924,826),22546=>array(53,-49,970,789),22547=>array(57,-67,927,829),22548=>array(52,-67,966,811),22549=>array(58,-19,912,828),22550=>array(55,-65,920,841),22551=>array(26,-65,944,844),22552=>array(76,-28,972,835),22553=>array(32,-25,953,810),22554=>array(51,-65,936,787),22555=>array(54,-67,953,806),22556=>array(53,-67,966,832),22557=>array(64,-67,915,799),22558=>array(37,-65,970,833),22559=>array(59,-63,945,840),22560=>array(35,-72,966,840),22561=>array(38,-19,933,830),22562=>array(50,-70,944,836),22563=>array(66,-68,922,803),22564=>array(48,-70,966,793),22565=>array(54,-12,965,828),22566=>array(40,-50,956,844),22567=>array(35,-51,968,821),22568=>array(60,-69,924,807),22569=>array(38,-71,951,823),22570=>array(32,-68,946,829),22571=>array(38,-68,969,829),22572=>array(56,-70,976,836),22573=>array(66,-32,967,824),22574=>array(60,-69,952,800),22575=>array(43,-65,962,837),22576=>array(44,-62,956,807),22577=>array(65,-67,966,832),22578=>array(67,-16,963,770),22579=>array(43,-52,907,820),22580=>array(42,-63,948,788),22581=>array(39,-68,940,833),22582=>array(58,-67,952,835),22583=>array(52,-70,951,843),22584=>array(56,-71,973,803),22585=>array(50,-25,949,839),22586=>array(60,-66,971,829),22587=>array(49,-29,951,827),22588=>array(47,-16,954,826),22589=>array(54,-64,954,804),22590=>array(52,-64,978,842),22591=>array(58,-71,956,821),22592=>array(40,-69,955,804),22593=>array(55,-27,945,815),22594=>array(40,-26,961,826),22595=>array(40,-68,950,835),22596=>array(35,-66,911,804),22597=>array(45,-72,971,829),22598=>array(54,-60,944,846),22599=>array(50,-27,927,842),22600=>array(59,-16,958,794),22601=>array(50,-73,973,829),22602=>array(47,-68,965,841),22603=>array(64,-17,940,831),22604=>array(46,-68,915,796),22605=>array(28,-55,972,835),22606=>array(52,-71,960,831),22607=>array(39,-41,952,816),22608=>array(36,-64,980,833),22609=>array(53,-11,948,833),22610=>array(36,-65,956,829),22611=>array(56,-71,964,806),22612=>array(42,-69,963,829),22613=>array(54,-68,976,827),22614=>array(49,-65,964,842),22615=>array(46,-17,970,856),22616=>array(44,-69,948,819),22617=>array(42,-63,944,841),22618=>array(37,-60,973,807),22619=>array(53,-70,965,805),22620=>array(41,-60,965,807),22621=>array(55,-66,951,834),22622=>array(48,-30,949,830),22623=>array(55,-40,963,811),22624=>array(50,-60,961,834),22625=>array(52,-61,927,834),22626=>array(62,-60,928,839),22627=>array(58,-31,953,817),22628=>array(54,-70,967,818),22629=>array(59,-69,954,803),22630=>array(64,-46,953,815),22631=>array(54,-8,954,859),22632=>array(37,-67,966,826),22633=>array(49,-34,950,831),22634=>array(49,-65,934,836),22635=>array(47,-69,946,836),22636=>array(35,-68,948,785),22637=>array(47,-30,959,809),22638=>array(47,-64,965,849),22639=>array(63,-67,921,835),22640=>array(52,-46,951,840),22641=>array(57,-26,951,847),22642=>array(33,-56,941,850),22643=>array(53,-66,961,844),22644=>array(56,-71,906,831),22645=>array(44,-49,943,834),22646=>array(54,-69,959,838),22647=>array(56,-64,958,839),22648=>array(53,-26,940,803),22649=>array(53,-24,959,833),22650=>array(48,-69,954,835),22651=>array(46,-73,969,820),22652=>array(42,-66,961,830),22653=>array(34,-58,967,839),22654=>array(49,-34,952,831),22655=>array(33,-62,951,846),22656=>array(43,-71,957,810),22657=>array(52,-64,983,817),22658=>array(47,-70,957,804),22659=>array(39,-65,960,828),22660=>array(51,-65,961,838),22661=>array(52,-25,945,789),22662=>array(56,-69,942,823),22663=>array(53,-71,953,838),22664=>array(52,-64,920,831),22665=>array(28,-64,962,821),22666=>array(63,-26,958,838),22667=>array(60,-68,953,841),22668=>array(46,-67,962,851),22669=>array(58,-38,964,846),22670=>array(46,-69,950,836),22671=>array(45,-43,943,847),22672=>array(56,-32,956,823),22673=>array(48,-65,954,842),22674=>array(19,-80,923,826),22675=>array(45,-40,954,834),22676=>array(45,-58,945,839),22677=>array(40,-60,962,801),22678=>array(40,-69,949,837),22679=>array(38,-73,905,835),22680=>array(39,-67,969,833),22681=>array(38,-71,927,821),22682=>array(29,-68,947,821),22683=>array(34,-72,968,812),22684=>array(60,-35,968,847),22685=>array(39,-57,963,847),22686=>array(52,-62,961,830),22687=>array(31,-64,911,827),22688=>array(48,-70,960,804),22689=>array(40,-69,953,836),22690=>array(49,-64,959,843),22691=>array(36,-76,965,827),22692=>array(29,-69,953,836),22693=>array(49,-32,962,843),22694=>array(52,-63,932,827),22695=>array(55,-61,976,836),22696=>array(56,-43,949,816),22697=>array(38,-68,964,826),22698=>array(43,-52,969,831),22699=>array(41,-72,950,834),22700=>array(67,-27,967,844),22701=>array(32,-24,947,826),22702=>array(67,-15,956,857),22703=>array(34,-33,954,847),22704=>array(49,-67,954,806),22705=>array(39,-32,981,828),22706=>array(30,-62,954,845),22707=>array(43,-76,962,838),22708=>array(47,-57,950,831),22709=>array(60,-69,933,779),22710=>array(47,-68,963,833),22711=>array(35,-68,945,831),22712=>array(52,-62,938,842),22713=>array(52,-67,924,787),22714=>array(32,-64,972,851),22715=>array(52,-68,950,833),22716=>array(56,-33,977,831),22717=>array(46,-75,977,846),22718=>array(64,-25,960,828),22719=>array(56,-70,962,806),22720=>array(26,-69,962,845),22721=>array(62,-26,957,831),22722=>array(36,-38,964,780),22723=>array(43,-26,944,788),22724=>array(44,-32,959,832),22725=>array(62,-32,953,851),22726=>array(79,-34,951,826),22727=>array(43,-34,947,835),22728=>array(50,-68,987,830),22729=>array(47,-72,969,833),22730=>array(48,-71,965,839),22731=>array(61,-65,918,832),22732=>array(35,-79,966,837),22733=>array(41,-32,953,791),22734=>array(38,-54,969,857),22735=>array(49,-34,951,823),22736=>array(53,-35,962,794),22737=>array(46,-26,962,836),22738=>array(44,-18,956,834),22739=>array(42,-45,953,807),22740=>array(41,-55,949,840),22741=>array(43,-62,965,828),22742=>array(31,-51,947,818),22743=>array(36,-35,954,823),22744=>array(59,-28,949,783),22745=>array(52,-77,967,847),22746=>array(61,-66,969,836),22747=>array(53,-65,920,806),22748=>array(35,-60,951,808),22749=>array(36,-65,973,826),22750=>array(51,-63,970,844),22751=>array(57,-24,950,849),22752=>array(29,-68,952,841),22753=>array(29,-64,964,843),22754=>array(46,-65,959,820),22755=>array(38,-64,963,831),22756=>array(42,-61,951,837),22757=>array(42,-70,948,791),22758=>array(59,-70,953,829),22759=>array(33,-72,957,811),22760=>array(71,-28,941,781),22761=>array(59,-71,932,793),22762=>array(31,-75,959,848),22763=>array(103,28,894,796),22764=>array(49,-18,951,796),22765=>array(75,-58,888,834),22766=>array(41,-63,913,829),22767=>array(33,-69,948,820),22768=>array(47,-55,927,837),22769=>array(74,-40,927,846),22770=>array(62,-58,933,846),22771=>array(42,-58,955,846),22772=>array(59,-17,951,826),22773=>array(52,-34,969,842),22774=>array(59,-9,909,834),22775=>array(55,-21,948,835),22776=>array(59,-38,909,834),22777=>array(55,-21,948,835),22778=>array(72,-32,947,831),22779=>array(50,-50,972,806),22780=>array(55,-23,953,830),22781=>array(55,-61,951,836),22782=>array(49,-18,950,829),22783=>array(62,-72,954,845),22784=>array(55,-61,951,836),22785=>array(95,-62,932,847),22786=>array(59,-46,954,826),22787=>array(67,-64,923,791),22788=>array(18,-67,935,818),22789=>array(30,-82,946,827),22790=>array(51,-71,955,833),22791=>array(43,-63,930,827),22792=>array(37,-60,961,832),22793=>array(58,-62,959,830),22794=>array(55,-41,952,812),22795=>array(71,-67,937,842),22796=>array(54,-64,969,833),22797=>array(55,-65,954,829),22798=>array(60,-67,967,829),22799=>array(53,-65,954,812),22800=>array(84,-66,945,844),22801=>array(53,-65,961,843),22802=>array(46,-67,954,795),22803=>array(55,-67,965,823),22804=>array(36,-53,948,841),22805=>array(95,-71,856,842),22806=>array(41,-65,967,836),22807=>array(46,-66,945,828),22808=>array(57,-59,872,844),22809=>array(24,-66,968,789),22810=>array(89,-68,911,849),22811=>array(107,-81,928,807),22812=>array(45,-65,959,828),22813=>array(29,-47,965,804),22814=>array(119,-58,929,821),22815=>array(14,-59,907,842),22816=>array(66,-65,921,847),22817=>array(66,-65,953,847),22818=>array(59,-73,928,839),22819=>array(71,-73,915,845),22820=>array(58,-76,942,848),22821=>array(22,-69,925,840),22822=>array(50,-69,952,823),22823=>array(85,-43,933,837),22824=>array(55,-63,950,845),22825=>array(61,-51,947,778),22826=>array(83,-48,941,834),22827=>array(74,-51,943,834),22828=>array(29,-57,979,840),22829=>array(84,-55,931,798),22830=>array(54,-70,968,826),22831=>array(58,-66,957,835),22832=>array(76,-70,953,835),22833=>array(86,-70,941,829),22834=>array(33,-62,947,835),22835=>array(54,-7,946,839),22836=>array(62,-59,913,831),22837=>array(43,-61,945,835),22838=>array(36,-71,969,824),22839=>array(58,-68,953,835),22840=>array(29,-70,982,855),22841=>array(29,-59,936,830),22842=>array(33,-59,947,835),22843=>array(21,-58,937,835),22844=>array(60,-67,955,835),22845=>array(66,-71,957,835),22846=>array(69,-64,955,834),22847=>array(53,-45,957,835),22848=>array(53,-62,982,783),22849=>array(40,-31,954,821),22850=>array(50,-67,958,832),22851=>array(67,-88,958,847),22852=>array(32,-44,976,842),22853=>array(59,-67,965,838),22854=>array(66,-41,957,835),22855=>array(60,-65,929,840),22856=>array(62,-62,960,848),22857=>array(44,-72,958,840),22858=>array(59,-74,964,831),22859=>array(21,-58,937,835),22860=>array(37,-60,963,828),22861=>array(35,-60,972,843),22862=>array(36,-22,961,851),22863=>array(46,-77,954,840),22864=>array(39,-66,966,841),22865=>array(43,-70,957,830),22866=>array(36,-65,974,838),22867=>array(57,-65,965,829),22868=>array(48,-71,970,835),22869=>array(53,-57,972,843),22870=>array(30,-59,954,839),22871=>array(43,-65,966,844),22872=>array(42,-65,955,829),22873=>array(29,-60,975,848),22874=>array(54,-68,960,839),22875=>array(26,-68,997,841),22876=>array(47,-69,970,836),22877=>array(70,-82,962,836),22878=>array(47,-75,976,833),22879=>array(41,-59,974,840),22880=>array(40,-71,959,829),22881=>array(44,-64,973,793),22882=>array(36,-68,970,840),22883=>array(51,-78,971,807),22884=>array(26,-77,972,837),22885=>array(39,-73,961,840),22886=>array(44,-66,960,839),22887=>array(47,-72,968,842),22888=>array(39,-64,970,852),22889=>array(32,-22,966,845),22890=>array(30,-65,967,843),22891=>array(40,-71,968,844),22892=>array(39,-64,970,847),22893=>array(35,-63,982,839),22894=>array(51,-69,960,849),22895=>array(29,-80,983,839),22896=>array(40,-73,967,781),22897=>array(48,-66,966,839),22898=>array(42,-72,961,832),22899=>array(86,-53,911,836),22900=>array(64,-67,949,819),22901=>array(52,-63,948,840),22902=>array(68,-70,920,821),22903=>array(63,-63,958,833),22904=>array(69,-65,959,836),22905=>array(40,-56,948,836),22906=>array(100,-70,972,832),22907=>array(65,-64,951,828),22908=>array(64,-55,958,831),22909=>array(52,-67,961,818),22910=>array(62,-65,912,829),22911=>array(44,-60,961,830),22912=>array(63,-66,944,821),22913=>array(66,-59,919,844),22914=>array(71,-74,897,815),22915=>array(29,-52,945,840),22916=>array(54,-72,942,836),22917=>array(77,-53,964,816),22918=>array(31,-67,938,824),22919=>array(47,-62,861,833),22920=>array(46,-61,914,828),22921=>array(61,-71,955,832),22922=>array(51,-72,935,832),22923=>array(76,-72,962,833),22924=>array(64,-69,954,837),22925=>array(51,-67,952,837),22926=>array(56,-72,974,840),22927=>array(74,-66,972,842),22928=>array(53,-56,974,841),22929=>array(49,-54,941,849),22930=>array(62,-68,934,839),22931=>array(57,-69,961,836),22932=>array(47,-64,957,853),22933=>array(57,-66,891,838),22934=>array(47,-70,957,830),22935=>array(39,-66,966,850),22936=>array(45,-69,958,830),22937=>array(53,-67,952,835),22938=>array(49,-64,966,840),22939=>array(66,-44,940,823),22940=>array(58,-69,955,831),22941=>array(39,-63,961,835),22942=>array(45,-50,956,827),22943=>array(66,-59,920,785),22944=>array(61,-66,917,835),22945=>array(57,-70,946,837),22946=>array(50,-67,971,836),22947=>array(52,-48,966,839),22948=>array(46,-62,951,830),22949=>array(67,-71,903,834),22950=>array(44,-66,951,836),22951=>array(53,-68,955,836),22952=>array(55,-77,951,829),22953=>array(53,-64,935,824),22954=>array(36,-66,913,818),22955=>array(36,-64,890,825),22956=>array(62,-62,965,828),22957=>array(58,-64,975,844),22958=>array(58,-65,945,838),22959=>array(61,-65,918,845),22960=>array(64,-67,951,842),22961=>array(62,-73,911,835),22962=>array(50,-58,937,835),22963=>array(53,-52,965,847),22964=>array(59,-63,945,844),22965=>array(60,-56,958,832),22966=>array(45,-56,956,835),22967=>array(66,-60,975,844),22968=>array(61,-62,961,830),22969=>array(30,-71,978,833),22970=>array(55,-66,973,838),22971=>array(80,-70,935,837),22972=>array(62,-60,959,830),22973=>array(59,-62,918,837),22974=>array(65,-65,936,828),22975=>array(60,-55,924,821),22976=>array(53,-65,956,842),22977=>array(60,-65,918,834),22978=>array(71,-58,969,830),22979=>array(60,-58,962,826),22980=>array(61,-61,954,826),22981=>array(56,-72,953,839),22982=>array(60,-67,948,832),22983=>array(58,-70,941,830),22984=>array(55,-50,968,860),22985=>array(37,-68,954,840),22986=>array(70,-64,934,832),22987=>array(54,-74,945,835),22988=>array(56,-62,965,839),22989=>array(32,-56,959,831),22990=>array(42,-77,968,834),22991=>array(62,-69,955,837),22992=>array(56,-65,956,818),22993=>array(56,-64,956,838),22994=>array(66,-64,978,841),22995=>array(52,-69,952,827),22996=>array(58,-67,912,836),22997=>array(58,-67,958,827),22998=>array(51,-52,949,822),22999=>array(41,-70,922,825),23000=>array(48,-67,956,850),23001=>array(40,-64,959,834),23002=>array(53,-70,960,833),23003=>array(60,-70,906,830),23004=>array(67,-63,926,850),23005=>array(38,-65,969,832),23006=>array(48,-52,957,850),23007=>array(38,-68,948,842),23008=>array(57,-74,907,832),23009=>array(80,-72,938,829),23010=>array(63,-72,929,831),23011=>array(38,-66,970,846),23012=>array(62,-66,957,837),23013=>array(47,-54,959,833),23014=>array(49,-71,962,843),23015=>array(52,-65,952,845),23016=>array(54,-67,968,837),23017=>array(68,-75,956,827),23018=>array(45,-69,956,824),23019=>array(50,-71,955,831),23020=>array(62,-66,956,829),23021=>array(67,-73,931,837),23022=>array(69,-59,960,837),23023=>array(64,-74,953,823),23024=>array(45,-60,909,836),23025=>array(44,-49,979,860),23026=>array(61,-74,954,831),23027=>array(61,-70,887,830),23028=>array(83,-73,938,824),23029=>array(69,-79,954,821),23030=>array(52,-50,970,858),23031=>array(55,-73,957,827),23032=>array(63,-73,953,827),23033=>array(40,-59,953,845),23034=>array(64,-74,953,823),23035=>array(53,-66,895,831),23036=>array(73,-80,932,822),23037=>array(78,-75,947,820),23038=>array(57,-80,955,823),23039=>array(59,-74,939,842),23040=>array(64,-67,951,830),23041=>array(53,-74,959,832),23042=>array(73,-73,959,832),23043=>array(73,-68,953,833),23044=>array(44,-65,935,829),23045=>array(44,-77,934,817),23046=>array(28,-69,936,822),23047=>array(40,-60,939,836),23048=>array(56,-82,919,834),23049=>array(34,-64,962,839),23050=>array(64,-68,958,830),23051=>array(62,-70,897,836),23052=>array(46,-48,956,840),23053=>array(46,-70,961,840),23054=>array(37,-68,939,830),23055=>array(56,-62,956,838),23056=>array(64,-64,953,837),23057=>array(37,-68,943,830),23058=>array(56,-67,953,845),23059=>array(41,-67,963,823),23060=>array(82,-69,954,839),23061=>array(60,-62,964,837),23062=>array(63,-69,980,829),23063=>array(57,-69,983,833),23064=>array(62,-75,962,831),23065=>array(51,-48,952,845),23066=>array(72,-74,923,808),23067=>array(64,-71,977,833),23068=>array(50,-71,947,833),23069=>array(66,-54,969,852),23070=>array(48,-68,945,833),23071=>array(63,-72,897,831),23072=>array(66,-66,965,831),23073=>array(66,-66,961,831),23074=>array(54,-66,951,867),23075=>array(65,-67,933,845),23076=>array(37,-68,939,829),23077=>array(42,-63,972,832),23078=>array(62,-64,954,828),23079=>array(62,-68,949,846),23080=>array(47,-64,954,828),23081=>array(57,-67,967,848),23082=>array(57,-68,948,828),23083=>array(39,-67,967,828),23084=>array(42,-64,962,833),23085=>array(73,-74,964,833),23086=>array(64,-68,941,832),23087=>array(64,-71,948,833),23088=>array(64,-67,955,840),23089=>array(32,-62,947,826),23090=>array(43,-72,891,819),23091=>array(55,-64,912,839),23092=>array(46,-73,870,832),23093=>array(49,-71,968,835),23094=>array(67,-75,940,793),23095=>array(65,-44,953,833),23096=>array(51,-78,953,833),23097=>array(44,-77,964,828),23098=>array(37,-67,973,823),23099=>array(61,-64,973,835),23100=>array(68,-69,906,832),23101=>array(57,-67,955,828),23102=>array(51,-69,958,827),23103=>array(37,-58,939,827),23104=>array(38,-65,952,835),23105=>array(55,-68,930,832),23106=>array(63,-71,912,840),23107=>array(58,-68,957,834),23108=>array(53,-67,960,839),23109=>array(64,-61,921,847),23110=>array(66,-74,946,836),23111=>array(42,-67,959,834),23112=>array(46,-72,971,831),23113=>array(59,-63,954,836),23114=>array(37,-67,977,837),23115=>array(44,-66,953,837),23116=>array(49,-71,980,828),23117=>array(54,-65,962,839),23118=>array(69,-68,953,842),23119=>array(42,-67,968,848),23120=>array(52,-70,979,827),23121=>array(50,-70,962,830),23122=>array(50,-68,971,836),23123=>array(64,-74,935,827),23124=>array(54,-63,964,834),23125=>array(37,-65,964,836),23126=>array(45,-68,979,829),23127=>array(54,-70,960,832),23128=>array(50,-62,966,831),23129=>array(48,-60,946,841),23130=>array(55,-71,960,833),23131=>array(52,-62,955,838),23132=>array(47,-67,954,790),23133=>array(52,-71,961,828),23134=>array(49,-67,959,839),23135=>array(66,-71,912,829),23136=>array(65,-68,924,839),23137=>array(44,-64,970,839),23138=>array(54,-65,951,850),23139=>array(59,-75,922,834),23140=>array(52,-72,898,830),23141=>array(56,-66,967,833),23142=>array(42,-74,944,832),23143=>array(45,-64,948,837),23144=>array(34,-61,957,834),23145=>array(53,-67,948,837),23146=>array(47,-78,964,822),23147=>array(54,-56,949,834),23148=>array(37,-50,950,829),23149=>array(45,-54,954,833),23150=>array(69,-68,945,834),23151=>array(57,-78,918,795),23152=>array(50,-73,959,835),23153=>array(57,-78,944,848),23154=>array(70,-65,962,835),23155=>array(61,-62,934,835),23156=>array(56,-74,915,780),23157=>array(37,-70,956,825),23158=>array(52,-63,903,831),23159=>array(40,-65,949,852),23160=>array(57,-68,947,830),23161=>array(65,-67,952,835),23162=>array(51,-69,963,841),23163=>array(50,-65,951,833),23164=>array(51,-64,954,840),23165=>array(53,-70,964,832),23166=>array(41,-70,964,849),23167=>array(63,-65,967,834),23168=>array(67,-68,932,832),23169=>array(50,-64,963,849),23170=>array(65,-61,935,858),23171=>array(57,-68,961,832),23172=>array(57,-71,961,833),23173=>array(38,-49,955,827),23174=>array(57,-72,945,835),23175=>array(57,-72,934,832),23176=>array(70,-62,950,824),23177=>array(57,-62,943,832),23178=>array(43,-73,951,833),23179=>array(58,-73,973,823),23180=>array(52,-74,955,830),23181=>array(56,-82,954,852),23182=>array(57,-68,965,838),23183=>array(50,-69,950,830),23184=>array(51,-72,952,787),23185=>array(65,-66,959,842),23186=>array(60,-66,973,836),23187=>array(60,-58,959,841),23188=>array(52,-70,954,834),23189=>array(57,-76,964,833),23190=>array(47,-60,988,842),23191=>array(73,-50,961,836),23192=>array(57,-65,951,842),23193=>array(48,-74,961,843),23194=>array(63,-73,900,827),23195=>array(42,-65,949,836),23196=>array(56,-82,954,833),23197=>array(50,-72,945,835),23198=>array(55,-69,986,832),23199=>array(44,-62,963,810),23200=>array(64,-65,927,845),23201=>array(58,-67,964,833),23202=>array(49,-70,920,825),23203=>array(43,-66,954,835),23204=>array(67,-53,976,832),23205=>array(53,-78,921,834),23206=>array(55,-67,914,832),23207=>array(54,-65,919,837),23208=>array(54,-63,967,835),23209=>array(62,-71,914,827),23210=>array(35,-74,951,815),23211=>array(38,-60,965,836),23212=>array(56,-67,981,825),23213=>array(57,-82,931,825),23214=>array(41,-70,974,849),23215=>array(46,-60,928,845),23216=>array(46,-65,908,832),23217=>array(55,-73,967,840),23218=>array(43,-53,958,852),23219=>array(65,-67,967,846),23220=>array(59,-76,974,823),23221=>array(31,-65,968,834),23222=>array(55,-67,954,827),23223=>array(43,-64,950,837),23224=>array(55,-71,966,843),23225=>array(56,-69,915,834),23226=>array(51,-73,975,829),23227=>array(38,-76,950,832),23228=>array(51,-72,968,818),23229=>array(56,-71,922,818),23230=>array(18,-64,948,837),23231=>array(52,-64,972,855),23232=>array(48,-69,962,833),23233=>array(53,-69,970,832),23234=>array(42,-65,958,840),23235=>array(60,-71,945,840),23236=>array(38,-65,968,839),23237=>array(72,-60,954,844),23238=>array(65,-69,977,833),23239=>array(54,-82,962,829),23240=>array(61,-73,932,831),23241=>array(66,-76,957,831),23242=>array(49,-65,954,832),23243=>array(36,-57,929,818),23244=>array(51,-64,966,850),23245=>array(52,-70,927,832),23246=>array(44,-69,950,840),23247=>array(49,-64,946,842),23248=>array(57,-65,958,829),23249=>array(82,-71,934,791),23250=>array(44,-73,931,820),23251=>array(43,-53,967,844),23252=>array(43,-72,920,826),23253=>array(58,-56,971,830),23254=>array(22,-62,953,831),23255=>array(36,-77,951,837),23256=>array(44,-61,977,843),23257=>array(38,-63,970,841),23258=>array(47,-47,972,833),23259=>array(52,-74,958,785),23260=>array(52,-65,964,849),23261=>array(58,-70,962,834),23262=>array(54,-67,957,836),23263=>array(44,-47,951,841),23264=>array(37,-66,955,841),23265=>array(37,-64,948,836),23266=>array(51,-72,954,826),23267=>array(43,-61,952,836),23268=>array(55,-55,938,836),23269=>array(50,-69,951,831),23270=>array(30,-77,921,826),23271=>array(36,-67,943,830),23272=>array(59,-72,972,833),23273=>array(69,-69,964,835),23274=>array(37,-72,973,839),23275=>array(68,-62,989,837),23276=>array(63,-66,978,834),23277=>array(56,-68,953,831),23278=>array(50,-70,954,828),23279=>array(44,-75,960,833),23280=>array(69,-69,984,837),23281=>array(41,-70,914,823),23282=>array(49,-66,979,840),23283=>array(51,-50,957,859),23284=>array(62,-80,956,829),23285=>array(40,-65,961,836),23286=>array(39,-54,970,856),23287=>array(34,-65,950,841),23288=>array(44,-78,962,837),23289=>array(46,-73,966,828),23290=>array(42,-68,911,835),23291=>array(57,-65,915,823),23292=>array(38,-74,958,831),23293=>array(44,-74,980,838),23294=>array(37,-74,954,836),23295=>array(48,-77,965,834),23296=>array(53,-67,964,852),23297=>array(35,-77,989,831),23298=>array(54,-82,981,833),23299=>array(45,-77,951,827),23300=>array(38,-69,954,833),23301=>array(38,-69,952,829),23302=>array(41,-64,991,858),23303=>array(38,-79,960,832),23304=>array(44,-64,965,835),23305=>array(38,-64,956,841),23306=>array(64,-89,940,832),23307=>array(34,-68,958,835),23308=>array(52,-68,966,834),23309=>array(38,-66,965,835),23310=>array(42,-70,975,831),23311=>array(40,-68,975,831),23312=>array(44,-74,976,841),23313=>array(30,-50,963,844),23314=>array(45,-68,973,864),23315=>array(45,-80,977,839),23316=>array(41,-66,971,831),23317=>array(46,-64,941,835),23318=>array(61,-75,948,848),23319=>array(35,-56,962,850),23320=>array(34,-64,952,837),23321=>array(36,-65,964,837),23322=>array(42,-70,972,844),23323=>array(46,-60,991,836),23324=>array(53,-84,969,849),23325=>array(46,-64,956,848),23326=>array(50,-41,962,835),23327=>array(46,-70,965,853),23328=>array(38,-67,984,838),23329=>array(36,-66,975,843),23330=>array(43,-79,966,837),23331=>array(51,-70,964,837),23332=>array(37,-68,973,848),23333=>array(51,-70,956,825),23334=>array(50,-71,955,826),23335=>array(41,-70,953,825),23336=>array(34,-50,963,838),23337=>array(43,-70,942,831),23338=>array(44,-67,966,844),23339=>array(34,-65,947,840),23340=>array(48,-68,951,829),23341=>array(44,-68,976,815),23342=>array(45,-74,950,807),23343=>array(45,-68,957,824),23344=>array(68,-69,924,791),23345=>array(53,-75,953,840),23346=>array(46,-63,934,829),23347=>array(43,-65,963,831),23348=>array(43,-69,956,850),23349=>array(40,-68,936,845),23350=>array(43,-64,962,859),23351=>array(36,-67,962,846),23352=>array(54,-65,958,851),23353=>array(27,-65,977,829),23354=>array(57,-53,971,829),23355=>array(46,-66,961,841),23356=>array(62,-74,921,831),23357=>array(40,-67,976,839),23358=>array(35,-50,968,848),23359=>array(41,-68,971,836),23360=>array(51,-65,932,831),23361=>array(68,-66,930,785),23362=>array(42,-43,959,840),23363=>array(59,-61,989,840),23364=>array(41,-66,909,832),23365=>array(43,-65,969,821),23366=>array(55,-67,954,831),23367=>array(46,-64,980,832),23368=>array(48,-65,943,831),23369=>array(66,-58,937,839),23370=>array(41,-78,942,839),23371=>array(44,-72,962,825),23372=>array(55,-74,957,839),23373=>array(39,-67,974,831),23374=>array(46,-73,947,830),23375=>array(45,-65,953,846),23376=>array(98,-49,921,787),23377=>array(72,-52,927,782),23378=>array(221,-58,921,778),23379=>array(94,-53,939,781),23380=>array(69,-61,953,825),23381=>array(74,-59,942,783),23382=>array(41,-52,955,786),23383=>array(94,-61,926,832),23384=>array(47,-69,943,839),23385=>array(31,-66,937,823),23386=>array(53,-65,947,840),23387=>array(74,-64,944,831),23388=>array(60,-65,967,834),23389=>array(48,-61,928,834),23390=>array(24,-31,945,786),23391=>array(66,-17,955,786),23392=>array(86,-51,920,828),23393=>array(20,-70,953,839),23394=>array(53,-64,947,847),23395=>array(50,-67,959,838),23396=>array(42,-77,970,838),23397=>array(54,-58,947,852),23398=>array(74,-54,926,826),23399=>array(86,-52,935,826),23400=>array(41,-67,950,800),23401=>array(51,-68,948,833),23402=>array(41,-60,924,842),23403=>array(44,-69,965,815),23404=>array(38,-66,946,791),23405=>array(55,-72,960,785),23406=>array(41,-64,949,836),23407=>array(63,-61,956,796),23408=>array(41,-68,971,834),23409=>array(31,-59,962,798),23410=>array(51,-50,961,789),23411=>array(53,-56,949,855),23412=>array(135,-68,903,823),23413=>array(34,-76,944,817),23414=>array(53,-58,949,838),23415=>array(41,-71,953,831),23416=>array(66,-67,939,831),23417=>array(64,-57,940,840),23418=>array(31,-64,955,790),23419=>array(44,-70,954,823),23420=>array(59,-81,946,833),23421=>array(71,-60,948,837),23422=>array(39,-67,954,788),23423=>array(57,-59,955,846),23424=>array(90,354,883,650),23425=>array(79,-52,934,851),23426=>array(56,-67,945,833),23427=>array(109,-28,902,821),23428=>array(55,-63,952,841),23429=>array(70,-38,942,833),23430=>array(79,-61,932,841),23431=>array(59,-69,931,840),23432=>array(77,-59,923,825),23433=>array(76,-70,912,818),23434=>array(71,-64,950,844),23435=>array(63,-65,951,824),23436=>array(60,-62,946,839),23437=>array(58,-58,942,822),23438=>array(48,-66,955,845),23439=>array(77,-64,927,822),23440=>array(76,-37,972,838),23441=>array(106,-66,923,838),23442=>array(84,-44,940,832),23443=>array(46,-66,958,830),23444=>array(75,-32,925,842),23445=>array(57,-65,894,839),23446=>array(75,-65,942,830),23447=>array(71,-63,945,822),23448=>array(106,-70,894,839),23449=>array(106,-71,894,817),23450=>array(41,-67,953,826),23451=>array(54,-59,954,818),23452=>array(60,-29,953,831),23453=>array(79,-25,925,826),23454=>array(73,-61,929,832),23455=>array(47,-57,955,827),23456=>array(32,-56,957,841),23457=>array(89,-60,904,842),23458=>array(40,-61,958,828),23459=>array(73,-25,931,823),23460=>array(93,-35,907,825),23461=>array(51,-70,908,839),23462=>array(102,-72,915,832),23463=>array(90,-21,910,835),23464=>array(74,-79,949,824),23465=>array(87,-54,933,835),23466=>array(41,-63,921,837),23467=>array(91,-74,894,839),23468=>array(39,-65,966,842),23469=>array(59,-65,932,830),23470=>array(98,-68,902,829),23471=>array(42,-58,934,848),23472=>array(80,-63,931,831),23473=>array(83,-52,893,844),23474=>array(46,-50,955,844),23475=>array(83,-65,920,834),23476=>array(69,-79,934,839),23477=>array(110,-71,901,837),23478=>array(55,-65,960,823),23479=>array(46,-56,955,857),23480=>array(45,-67,968,833),23481=>array(47,-68,953,834),23482=>array(54,-57,955,840),23483=>array(55,-61,949,834),23484=>array(47,-73,959,846),23485=>array(81,-62,927,836),23486=>array(50,-77,917,846),23487=>array(43,-73,906,828),23488=>array(46,-62,955,826),23489=>array(41,-67,982,841),23490=>array(48,-71,969,835),23491=>array(54,-62,952,829),23492=>array(80,-59,941,833),23493=>array(53,-69,956,835),23494=>array(66,-64,944,827),23495=>array(47,-73,959,830),23496=>array(86,-65,921,846),23497=>array(90,-67,912,845),23498=>array(62,-74,963,838),23499=>array(37,-41,968,835),23500=>array(107,-67,900,835),23501=>array(61,-31,953,835),23502=>array(43,-53,926,860),23503=>array(63,-66,961,841),23504=>array(46,-77,962,821),23505=>array(45,-72,929,839),23506=>array(48,-83,952,834),23507=>array(100,-65,900,840),23508=>array(75,-68,971,828),23509=>array(83,-68,930,843),23510=>array(56,-60,981,844),23511=>array(47,-55,944,840),23512=>array(72,-78,931,841),23513=>array(34,-64,966,839),23514=>array(65,-65,957,842),23515=>array(55,-57,956,842),23516=>array(80,-68,917,843),23517=>array(39,-75,952,829),23518=>array(35,-76,962,845),23519=>array(53,-62,954,825),23520=>array(41,-61,936,856),23521=>array(35,-66,974,840),23522=>array(47,-76,960,836),23523=>array(53,-72,948,836),23524=>array(54,-64,953,836),23525=>array(42,-72,977,850),23526=>array(61,-74,952,850),23527=>array(80,-68,917,844),23528=>array(44,-69,930,839),23529=>array(41,-73,970,835),23530=>array(50,-63,914,836),23531=>array(82,-65,910,833),23532=>array(55,-57,953,843),23533=>array(83,-34,925,849),23534=>array(41,-64,970,838),23535=>array(63,-68,917,841),23536=>array(62,-78,967,846),23537=>array(44,-69,975,835),23538=>array(58,-75,968,833),23539=>array(70,-69,939,832),23540=>array(67,-76,957,841),23541=>array(54,-66,969,836),23542=>array(70,-69,939,850),23543=>array(69,-25,923,847),23544=>array(97,-64,912,829),23545=>array(24,-60,915,829),23546=>array(77,-59,932,836),23547=>array(62,-57,913,793),23548=>array(50,-58,916,786),23549=>array(50,-63,916,840),23550=>array(49,-46,951,821),23551=>array(60,-57,934,835),23552=>array(100,-61,945,826),23553=>array(49,-61,945,826),23554=>array(62,-72,935,823),23555=>array(55,-72,936,823),23556=>array(49,-64,948,845),23557=>array(44,-69,962,827),23558=>array(41,-63,940,839),23559=>array(37,-64,956,841),23560=>array(57,-67,947,826),23561=>array(44,-71,951,826),23562=>array(68,-63,932,850),23563=>array(73,-70,933,811),23564=>array(53,-71,955,829),23565=>array(38,-61,952,835),23566=>array(57,-65,944,848),23567=>array(71,-41,927,818),23568=>array(68,-62,945,816),23569=>array(52,-67,944,818),23570=>array(45,-63,954,833),23571=>array(59,-63,935,827),23572=>array(32,-63,909,830),23573=>array(49,-58,961,789),23574=>array(61,-64,939,830),23575=>array(49,-58,961,821),23576=>array(50,-16,921,824),23577=>array(116,-70,861,824),23578=>array(110,-70,864,836),23579=>array(31,-48,962,821),23580=>array(43,-64,952,824),23581=>array(66,-68,898,831),23582=>array(41,-64,970,821),23583=>array(41,-71,970,822),23584=>array(42,-84,972,826),23585=>array(41,-62,961,836),23586=>array(46,-63,954,829),23587=>array(82,-47,936,782),23588=>array(62,-65,927,829),23589=>array(32,-60,963,842),23590=>array(42,-44,959,835),23591=>array(70,-61,932,827),23592=>array(35,-70,949,853),23593=>array(35,-61,964,798),23594=>array(44,-64,964,832),23595=>array(32,-55,962,785),23596=>array(31,-66,963,844),23597=>array(43,-65,962,837),23598=>array(34,-51,958,833),23599=>array(34,-51,958,835),23600=>array(50,-66,961,836),23601=>array(56,-63,951,831),23602=>array(33,-51,958,842),23603=>array(44,-69,959,826),23604=>array(34,-51,958,833),23605=>array(34,-51,960,835),23606=>array(36,-66,971,831),23607=>array(36,-72,974,831),23608=>array(78,-71,880,766),23609=>array(41,-58,956,772),23610=>array(69,-73,926,765),23611=>array(36,-62,963,790),23612=>array(53,-71,934,782),23613=>array(40,-60,960,789),23614=>array(57,-67,940,784),23615=>array(52,-74,951,779),23616=>array(68,-65,895,785),23617=>array(54,-73,938,782),23618=>array(28,-63,917,789),23619=>array(28,-64,961,789),23620=>array(52,-62,903,794),23621=>array(56,-73,930,782),23622=>array(64,-73,896,788),23623=>array(63,-62,897,792),23624=>array(49,-65,886,792),23625=>array(41,-70,935,787),23626=>array(22,-60,846,791),23627=>array(53,-74,933,796),23628=>array(59,-69,894,786),23629=>array(33,-64,964,791),23630=>array(47,-76,939,785),23631=>array(53,-72,930,785),23632=>array(37,-65,972,789),23633=>array(59,-72,894,789),23634=>array(45,-72,956,795),23635=>array(65,-92,946,781),23636=>array(60,-59,952,804),23637=>array(46,-73,943,779),23638=>array(55,-64,932,782),23639=>array(48,-73,964,798),23640=>array(48,-73,964,782),23641=>array(35,-68,951,788),23642=>array(58,-66,899,808),23643=>array(53,-72,930,785),23644=>array(49,-67,957,791),23645=>array(44,-70,935,786),23646=>array(30,-73,877,777),23647=>array(23,-58,963,803),23648=>array(46,-68,935,796),23649=>array(41,-65,911,788),23650=>array(46,-82,939,823),23651=>array(44,-69,973,787),23652=>array(50,-68,900,808),23653=>array(29,-68,953,786),23654=>array(35,-73,913,789),23655=>array(23,-58,975,803),23656=>array(41,-70,962,798),23657=>array(44,-62,959,800),23658=>array(48,-66,966,786),23659=>array(44,-62,983,800),23660=>array(57,-82,912,790),23661=>array(40,-58,934,804),23662=>array(85,-65,895,825),23663=>array(78,-40,952,836),23664=>array(90,-68,912,848),23665=>array(137,-48,863,771),23666=>array(124,-65,853,820),23667=>array(47,-65,950,800),23668=>array(67,-62,915,833),23669=>array(46,-80,882,833),23670=>array(67,-62,915,833),23671=>array(94,-70,920,821),23672=>array(94,4,953,821),23673=>array(53,-27,935,841),23674=>array(85,-28,931,813),23675=>array(110,-64,897,820),23676=>array(113,-70,964,824),23677=>array(113,-50,963,824),23678=>array(89,-69,911,814),23679=>array(90,-67,922,825),23680=>array(143,-65,869,838),23681=>array(80,-65,855,815),23682=>array(104,-31,921,822),23683=>array(95,-75,915,833),23684=>array(113,-65,889,824),23685=>array(95,-68,953,824),23686=>array(97,-62,963,827),23687=>array(110,-64,911,836),23688=>array(89,-52,930,814),23689=>array(103,-66,909,834),23690=>array(118,-67,935,787),23691=>array(106,-71,965,806),23692=>array(43,-65,957,832),23693=>array(86,-68,931,817),23694=>array(63,-71,951,824),23695=>array(104,-69,948,818),23696=>array(76,-66,964,837),23697=>array(41,-73,955,833),23698=>array(96,-71,960,836),23699=>array(101,-70,948,830),23700=>array(45,-69,961,821),23701=>array(52,-68,969,831),23702=>array(93,-29,916,803),23703=>array(134,-58,833,830),23704=>array(87,-68,934,810),23705=>array(53,-67,959,812),23706=>array(40,-62,957,826),23707=>array(115,-63,865,832),23708=>array(140,-26,921,823),23709=>array(53,-66,935,838),23710=>array(91,-62,955,845),23711=>array(97,-70,964,831),23712=>array(91,-20,951,813),23713=>array(113,-59,888,789),23714=>array(80,-62,931,839),23715=>array(109,-54,909,845),23716=>array(65,-66,966,834),23717=>array(98,-70,957,827),23718=>array(70,-27,945,824),23719=>array(54,-56,900,850),23720=>array(80,-25,948,817),23721=>array(69,-68,920,822),23722=>array(107,-64,900,837),23723=>array(66,-64,892,830),23724=>array(81,-67,901,817),23725=>array(103,-72,948,833),23726=>array(103,-43,949,833),23727=>array(97,-30,949,800),23728=>array(98,-69,910,834),23729=>array(47,-67,955,839),23730=>array(87,-62,960,810),23731=>array(76,-65,924,829),23732=>array(93,-8,933,814),23733=>array(76,-65,935,829),23734=>array(66,-66,888,843),23735=>array(66,-67,939,817),23736=>array(35,-72,931,829),23737=>array(87,-70,910,810),23738=>array(41,-66,955,833),23739=>array(62,-57,961,829),23740=>array(62,-67,959,817),23741=>array(63,-66,920,815),23742=>array(66,-67,955,830),23743=>array(101,-66,875,824),23744=>array(144,-65,869,833),23745=>array(67,-69,911,836),23746=>array(107,-62,964,837),23747=>array(97,-67,907,820),23748=>array(91,-68,944,798),23749=>array(66,-75,950,845),23750=>array(111,-70,961,823),23751=>array(30,-62,979,840),23752=>array(107,-70,961,826),23753=>array(48,-70,963,821),23754=>array(163,-78,862,824),23755=>array(100,-60,903,844),23756=>array(107,-12,960,795),23757=>array(101,-64,959,827),23758=>array(134,-77,937,824),23759=>array(104,-68,956,821),23760=>array(107,-70,960,827),23761=>array(53,-41,948,819),23762=>array(101,-62,898,815),23763=>array(108,-76,949,822),23764=>array(103,-32,942,822),23765=>array(71,-70,947,836),23766=>array(111,-76,944,821),23767=>array(100,-67,949,819),23768=>array(106,-12,956,804),23769=>array(58,-58,927,838),23770=>array(54,-29,971,819),23771=>array(74,-76,885,818),23772=>array(44,-44,974,839),23773=>array(144,-61,869,827),23774=>array(46,-69,939,822),23775=>array(50,-67,934,825),23776=>array(79,-64,940,835),23777=>array(76,-64,945,826),23778=>array(73,-67,910,830),23779=>array(82,-60,944,829),23780=>array(89,-65,947,819),23781=>array(93,-62,957,830),23782=>array(40,-65,947,844),23783=>array(88,-63,944,846),23784=>array(77,-57,945,833),23785=>array(43,-52,958,850),23786=>array(62,-63,941,826),23787=>array(78,-67,948,817),23788=>array(109,-61,956,831),23789=>array(66,-67,923,833),23790=>array(98,-60,941,814),23791=>array(37,-64,978,839),23792=>array(77,-65,961,840),23793=>array(47,-65,951,793),23794=>array(46,-59,898,841),23795=>array(39,-67,969,841),23796=>array(77,-64,933,827),23797=>array(66,-43,956,828),23798=>array(118,-70,897,845),23799=>array(89,-62,939,829),23800=>array(105,-78,952,823),23801=>array(39,-71,957,835),23802=>array(66,-72,962,817),23803=>array(79,-69,966,849),23804=>array(69,-62,929,833),23805=>array(70,-73,961,836),23806=>array(93,-71,932,837),23807=>array(101,-62,944,813),23808=>array(131,-68,947,826),23809=>array(55,-64,987,837),23810=>array(91,-65,912,825),23811=>array(87,-65,963,818),23812=>array(69,-32,939,813),23813=>array(69,-54,906,849),23814=>array(85,-23,924,839),23815=>array(63,-66,937,835),23816=>array(92,-65,924,858),23817=>array(77,-62,980,843),23818=>array(64,-63,968,842),23819=>array(66,-73,934,831),23820=>array(109,-68,956,818),23821=>array(63,-63,945,835),23822=>array(77,-69,938,831),23823=>array(109,-73,962,827),23824=>array(90,-42,961,811),23825=>array(76,-66,954,838),23826=>array(69,-68,945,835),23827=>array(93,-65,909,811),23828=>array(49,-68,949,836),23829=>array(66,-64,953,825),23830=>array(46,-80,938,833),23831=>array(134,-67,879,833),23832=>array(66,-68,960,839),23833=>array(33,-61,979,841),23834=>array(66,-52,968,850),23835=>array(66,-66,932,817),23836=>array(90,-27,911,832),23837=>array(107,-68,957,833),23838=>array(91,-62,935,851),23839=>array(49,-22,962,835),23840=>array(109,-71,976,830),23841=>array(71,-57,920,802),23842=>array(65,-71,956,834),23843=>array(55,-66,970,837),23844=>array(79,-64,927,838),23845=>array(100,-73,948,837),23846=>array(74,-33,950,847),23847=>array(29,-64,933,838),23848=>array(107,-69,974,832),23849=>array(59,-74,894,835),23850=>array(95,-64,951,845),23851=>array(61,-74,911,823),23852=>array(50,-50,960,829),23853=>array(36,-70,914,823),23854=>array(127,-67,886,837),23855=>array(86,-22,964,845),23856=>array(106,-68,930,835),23857=>array(73,-74,897,829),23858=>array(109,-28,954,837),23859=>array(106,-71,967,837),23860=>array(33,-63,956,835),23861=>array(111,-68,955,817),23862=>array(52,-65,953,829),23863=>array(79,-71,953,838),23864=>array(108,-81,963,809),23865=>array(108,-69,933,831),23866=>array(38,-73,956,829),23867=>array(72,-68,949,830),23868=>array(109,-72,961,815),23869=>array(60,-31,955,836),23870=>array(82,-65,945,805),23871=>array(109,-63,962,818),23872=>array(48,-70,955,826),23873=>array(109,-27,953,826),23874=>array(43,-67,954,833),23875=>array(108,-71,951,833),23876=>array(74,-71,961,831),23877=>array(41,-71,953,831),23878=>array(39,-70,960,832),23879=>array(45,-65,972,837),23880=>array(92,-67,958,830),23881=>array(106,-70,944,841),23882=>array(79,-65,960,842),23883=>array(66,-64,905,817),23884=>array(47,-69,971,835),23885=>array(36,-62,954,830),23886=>array(66,-65,915,817),23887=>array(57,-75,945,821),23888=>array(34,-62,970,837),23889=>array(109,-70,919,821),23890=>array(99,-52,895,800),23891=>array(114,-42,910,813),23892=>array(63,-69,943,812),23893=>array(103,-69,967,819),23894=>array(83,-23,967,836),23895=>array(45,-70,939,809),23896=>array(82,-71,955,817),23897=>array(55,-70,956,827),23898=>array(26,-66,960,835),23899=>array(33,-64,979,839),23900=>array(60,-62,928,831),23901=>array(92,-63,944,817),23902=>array(51,-71,967,847),23903=>array(37,-77,939,833),23904=>array(106,-62,995,841),23905=>array(47,-56,969,825),23906=>array(106,-70,958,842),23907=>array(111,-72,951,835),23908=>array(70,-60,919,830),23909=>array(110,-68,963,829),23910=>array(81,-20,933,839),23911=>array(105,-73,911,831),23912=>array(109,-74,940,842),23913=>array(63,-70,937,835),23914=>array(81,-75,939,841),23915=>array(83,-66,938,844),23916=>array(76,-74,951,836),23917=>array(59,-76,953,840),23918=>array(64,-65,973,846),23919=>array(77,-39,945,825),23920=>array(83,-64,967,843),23921=>array(105,-72,967,830),23922=>array(110,-72,979,845),23923=>array(37,-47,956,839),23924=>array(78,-67,960,833),23925=>array(114,-61,947,836),23926=>array(69,-54,929,809),23927=>array(101,-67,974,836),23928=>array(48,-71,966,835),23929=>array(79,-76,959,835),23930=>array(109,-67,960,817),23931=>array(79,-66,968,848),23932=>array(112,-67,959,834),23933=>array(98,-67,957,826),23934=>array(38,-49,974,851),23935=>array(68,-74,965,835),23936=>array(109,-65,953,818),23937=>array(76,-68,934,836),23938=>array(62,-65,930,844),23939=>array(93,-64,962,842),23940=>array(50,-64,955,835),23941=>array(36,-59,957,794),23942=>array(109,-69,955,826),23943=>array(66,-64,933,817),23944=>array(48,-71,962,830),23945=>array(127,-68,964,831),23946=>array(46,-58,948,842),23947=>array(83,-63,924,843),23948=>array(51,-56,890,810),23949=>array(107,-73,900,812),23950=>array(51,-64,948,821),23951=>array(40,-78,954,821),23952=>array(107,-73,949,812),23953=>array(81,-75,951,834),23954=>array(95,-53,908,851),23955=>array(98,-71,972,830),23956=>array(45,-65,978,836),23957=>array(109,-70,970,827),23958=>array(60,-63,991,858),23959=>array(92,-67,935,829),23960=>array(29,-71,910,838),23961=>array(76,-71,937,829),23962=>array(24,-67,985,835),23963=>array(76,-62,959,852),23964=>array(37,-72,964,830),23965=>array(66,-24,954,835),23966=>array(116,-71,933,838),23967=>array(78,-72,955,848),23968=>array(76,-64,956,828),23969=>array(40,-79,971,830),23970=>array(62,-64,943,836),23971=>array(39,-64,938,830),23972=>array(33,-59,962,833),23973=>array(66,-73,970,812),23974=>array(67,-72,945,841),23975=>array(82,-64,935,814),23976=>array(100,-67,915,835),23977=>array(109,-80,973,829),23978=>array(40,-68,964,840),23979=>array(79,-67,948,825),23980=>array(66,-77,965,840),23981=>array(103,-64,947,840),23982=>array(66,-57,950,854),23983=>array(44,-80,965,829),23984=>array(106,-69,961,828),23985=>array(106,-69,954,824),23986=>array(57,-60,929,842),23987=>array(40,-52,968,836),23988=>array(38,-73,977,840),23989=>array(115,-68,961,814),23990=>array(45,-73,967,825),23991=>array(29,-63,951,834),23992=>array(75,-65,947,829),23993=>array(62,-65,960,833),23994=>array(40,-73,961,832),23995=>array(37,-84,964,831),23996=>array(74,-70,958,821),23997=>array(52,-66,965,839),23998=>array(78,-32,953,837),23999=>array(74,-64,943,812),24000=>array(39,-64,964,831),24001=>array(73,-63,962,826),24002=>array(49,-64,936,838),24003=>array(54,-64,975,836),24004=>array(67,-63,962,843),24005=>array(46,-68,931,824),24006=>array(93,-67,940,836),24007=>array(95,-56,959,847),24008=>array(69,-64,919,812),24009=>array(69,-67,966,848),24010=>array(72,-62,958,831),24011=>array(43,-65,938,836),24012=>array(42,-69,968,820),24013=>array(38,-73,957,828),24014=>array(54,-61,976,820),24015=>array(93,-70,953,817),24016=>array(78,-61,975,836),24017=>array(106,-68,976,832),24018=>array(58,-64,961,841),24019=>array(55,-87,941,851),24020=>array(48,-64,962,836),24021=>array(96,-63,945,844),24022=>array(42,-67,973,836),24023=>array(58,-64,963,815),24024=>array(82,-72,956,832),24025=>array(74,-65,964,837),24026=>array(37,-68,957,833),24027=>array(43,-60,914,801),24028=>array(166,-60,793,795),24029=>array(58,-70,858,817),24030=>array(55,-64,859,823),24031=>array(55,-70,941,839),24032=>array(74,-36,945,773),24033=>array(22,-53,943,817),24034=>array(61,-59,961,849),24035=>array(61,-59,961,836),24036=>array(122,-67,935,842),24037=>array(95,54,909,696),24038=>array(55,-14,925,819),24039=>array(59,-57,933,773),24040=>array(169,-60,932,791),24041=>array(44,-64,940,790),24042=>array(88,-54,921,806),24043=>array(69,1,949,753),24044=>array(63,-47,955,814),24045=>array(64,-59,955,847),24046=>array(47,-19,936,840),24047=>array(37,-67,936,841),24048=>array(43,-71,959,845),24049=>array(114,0,897,763),24050=>array(138,-17,934,764),24051=>array(174,-24,942,768),24052=>array(140,-12,942,746),24053=>array(59,-65,938,835),24054=>array(68,-58,945,776),24055=>array(38,-43,971,819),24056=>array(100,-50,972,781),24057=>array(33,-35,989,780),24058=>array(72,-72,941,776),24059=>array(44,-43,955,830),24060=>array(136,-67,962,796),24061=>array(63,-80,937,790),24062=>array(154,-69,846,829),24063=>array(82,-63,936,833),24064=>array(72,-68,928,759),24065=>array(91,-62,873,814),24066=>array(72,-68,928,826),24067=>array(58,-67,920,835),24068=>array(110,-65,941,829),24069=>array(61,-64,886,828),24070=>array(95,-76,948,829),24071=>array(71,-66,929,826),24072=>array(105,-63,917,830),24073=>array(110,-61,972,834),24074=>array(98,-61,942,834),24075=>array(70,-50,936,854),24076=>array(64,-65,941,845),24077=>array(70,-69,889,827),24078=>array(102,-59,949,842),24079=>array(90,-69,906,824),24080=>array(91,-79,951,809),24081=>array(51,-62,948,843),24082=>array(47,-62,928,839),24083=>array(90,-63,948,843),24084=>array(90,-72,940,832),24085=>array(118,-67,886,843),24086=>array(96,-66,943,833),24087=>array(91,-74,956,833),24088=>array(104,-72,903,842),24089=>array(76,-66,955,830),24090=>array(72,-70,892,780),24091=>array(139,-65,874,851),24092=>array(90,-70,948,811),24093=>array(104,-68,896,834),24094=>array(111,-70,941,811),24095=>array(66,-68,935,832),24096=>array(165,-67,849,831),24097=>array(110,-68,952,847),24098=>array(110,-72,955,826),24099=>array(46,-69,960,832),24100=>array(47,-66,879,833),24101=>array(115,-65,910,850),24102=>array(65,-59,913,828),24103=>array(89,-67,940,825),24104=>array(76,-72,958,827),24105=>array(110,-67,920,826),24106=>array(111,-76,959,825),24107=>array(112,-74,948,844),24108=>array(57,-67,945,786),24109=>array(50,-71,944,829),24110=>array(54,-55,925,831),24111=>array(65,-59,913,828),24112=>array(88,-65,929,808),24113=>array(90,-64,922,828),24114=>array(65,-64,937,852),24115=>array(81,-68,962,829),24116=>array(97,-68,943,842),24117=>array(80,-65,948,847),24118=>array(89,-65,933,830),24119=>array(86,-62,932,833),24120=>array(94,-67,918,835),24121=>array(80,-72,925,844),24122=>array(80,-65,952,840),24123=>array(92,-64,929,826),24124=>array(90,-65,890,798),24125=>array(94,-73,916,828),24126=>array(106,-68,941,832),24127=>array(81,-68,975,834),24128=>array(79,-70,946,831),24129=>array(111,-72,961,830),24130=>array(38,-65,979,788),24131=>array(73,-70,938,838),24132=>array(89,-64,935,829),24133=>array(85,-69,924,829),24134=>array(85,-69,948,829),24135=>array(55,-64,948,835),24136=>array(79,-71,960,827),24137=>array(88,-67,958,833),24138=>array(111,-78,962,828),24139=>array(54,-69,970,848),24140=>array(84,-72,941,828),24141=>array(106,-70,927,820),24142=>array(62,-57,950,838),24143=>array(110,-69,977,838),24144=>array(41,-76,957,836),24145=>array(35,-76,964,833),24146=>array(75,-65,969,850),24147=>array(107,-68,972,841),24148=>array(57,-65,953,826),24149=>array(57,-63,954,834),24150=>array(75,-69,957,826),24151=>array(70,-61,923,838),24152=>array(109,-70,964,830),24153=>array(89,-60,948,839),24154=>array(55,-64,942,852),24155=>array(85,-65,935,842),24156=>array(104,-70,963,821),24157=>array(104,-71,965,823),24158=>array(63,-74,937,821),24159=>array(78,-71,948,837),24160=>array(92,-70,965,827),24161=>array(68,-66,934,839),24162=>array(71,-64,931,845),24163=>array(89,-72,962,839),24164=>array(89,-70,945,839),24165=>array(61,-64,958,833),24166=>array(52,-62,959,851),24167=>array(101,-70,989,823),24168=>array(88,-50,935,853),24169=>array(113,-73,970,830),24170=>array(116,-65,981,836),24171=>array(55,-64,948,835),24172=>array(66,-68,938,826),24173=>array(89,-53,955,849),24174=>array(92,-72,946,843),24175=>array(94,-55,926,854),24176=>array(81,-65,952,840),24177=>array(55,-65,922,829),24178=>array(100,-58,900,779),24179=>array(71,-70,920,787),24180=>array(86,-68,917,841),24181=>array(59,-68,954,778),24182=>array(76,-65,929,848),24183=>array(89,-70,898,839),24184=>array(94,-67,909,833),24185=>array(60,-66,970,844),24186=>array(91,-37,914,826),24187=>array(53,-48,902,807),24188=>array(53,-65,906,826),24189=>array(115,-63,885,831),24190=>array(61,-66,958,838),24191=>array(49,-61,908,823),24192=>array(53,-72,939,847),24193=>array(35,-61,930,826),24194=>array(58,-66,950,835),24195=>array(45,-65,935,822),24196=>array(28,-64,942,822),24197=>array(24,-66,918,816),24198=>array(39,-75,941,830),24199=>array(35,-51,964,839),24200=>array(51,-68,954,846),24201=>array(50,-68,951,837),24202=>array(45,-67,964,822),24203=>array(43,-66,980,848),24204=>array(58,-64,945,840),24205=>array(44,-67,936,845),24206=>array(25,-76,936,819),24207=>array(45,-71,918,831),24208=>array(32,-68,914,835),24209=>array(26,-67,924,842),24210=>array(28,-64,942,849),24211=>array(27,-60,925,841),24212=>array(46,-59,928,834),24213=>array(43,-63,952,837),24214=>array(39,-66,943,828),24215=>array(45,-64,948,839),24216=>array(25,-64,908,819),24217=>array(39,-66,913,844),24218=>array(45,-68,963,839),24219=>array(56,-53,956,834),24220=>array(41,-68,937,831),24221=>array(24,-84,936,846),24222=>array(25,-59,928,832),24223=>array(39,-68,947,833),24224=>array(42,-67,951,834),24225=>array(25,-70,938,819),24226=>array(48,-53,954,830),24227=>array(55,-67,954,824),24228=>array(48,-55,956,831),24229=>array(29,-65,966,844),24230=>array(46,-68,950,826),24231=>array(48,-66,928,822),24232=>array(44,-67,930,833),24233=>array(25,-64,959,819),24234=>array(39,-76,958,838),24235=>array(54,-76,941,829),24236=>array(44,-58,956,838),24237=>array(37,-63,968,837),24238=>array(41,-61,932,842),24239=>array(25,-71,908,819),24240=>array(51,-77,954,824),24241=>array(41,-67,959,846),24242=>array(44,-68,954,838),24243=>array(41,-51,955,865),24244=>array(49,-64,942,841),24245=>array(38,-66,965,831),24246=>array(36,-55,945,828),24247=>array(41,-67,966,823),24248=>array(50,-61,954,844),24249=>array(26,-68,968,854),24250=>array(25,-61,930,827),24251=>array(50,-63,940,839),24252=>array(46,-69,944,855),24253=>array(49,-63,945,849),24254=>array(43,-74,967,824),24255=>array(39,-66,913,844),24256=>array(31,-62,961,839),24257=>array(45,-69,948,840),24258=>array(51,-71,942,832),24259=>array(42,-67,965,833),24260=>array(37,-54,968,857),24261=>array(40,-66,954,842),24262=>array(30,-64,961,838),24263=>array(34,-69,948,839),24264=>array(43,-73,952,839),24265=>array(44,-59,970,845),24266=>array(46,-60,949,837),24267=>array(31,-54,967,856),24268=>array(39,-73,951,835),24269=>array(38,-71,947,850),24270=>array(46,-68,968,855),24271=>array(37,-54,968,843),24272=>array(40,-67,956,831),24273=>array(42,-66,951,848),24274=>array(39,-70,966,852),24275=>array(35,-65,942,837),24276=>array(32,-50,959,862),24277=>array(37,-67,985,856),24278=>array(39,-67,958,843),24279=>array(58,-71,957,834),24280=>array(41,-72,951,840),24281=>array(57,-78,965,840),24282=>array(42,-69,949,837),24283=>array(16,-63,951,837),24284=>array(46,-70,956,841),24285=>array(44,-70,947,837),24286=>array(36,-75,974,842),24287=>array(47,-64,947,833),24288=>array(46,-71,938,827),24289=>array(34,-70,964,836),24290=>array(42,-65,965,820),24291=>array(54,-68,950,837),24292=>array(49,-63,968,857),24293=>array(31,-70,971,841),24294=>array(36,-72,953,840),24295=>array(28,-72,942,843),24296=>array(24,-72,940,832),24297=>array(30,-67,964,837),24298=>array(29,-69,920,838),24299=>array(24,-84,958,842),24300=>array(22,-62,961,846),24301=>array(44,-66,932,853),24302=>array(35,-70,956,845),24303=>array(43,-67,959,840),24304=>array(40,-75,967,832),24305=>array(37,-54,949,838),24306=>array(35,-66,947,836),24307=>array(40,-75,957,832),24308=>array(33,-62,949,743),24309=>array(44,-73,953,804),24310=>array(33,-62,949,824),24311=>array(33,-62,949,825),24312=>array(33,-62,949,825),24313=>array(49,-71,973,852),24314=>array(33,-62,949,826),24315=>array(33,-62,949,790),24316=>array(33,-62,949,790),24317=>array(43,-71,972,788),24318=>array(36,-72,930,822),24319=>array(79,-56,932,818),24320=>array(36,-57,906,780),24321=>array(47,-66,954,848),24322=>array(56,-67,953,785),24323=>array(61,-62,928,830),24324=>array(48,-65,934,785),24325=>array(48,-59,961,794),24326=>array(70,-59,944,814),24327=>array(45,-64,972,863),24328=>array(52,-67,943,839),24329=>array(61,-63,936,829),24330=>array(59,-76,955,833),24331=>array(81,-63,933,824),24332=>array(74,-62,944,834),24333=>array(78,-62,948,834),24334=>array(73,-62,944,834),24335=>array(74,-62,944,834),24336=>array(74,-62,944,834),24337=>array(37,-61,949,826),24338=>array(42,-67,962,841),24339=>array(143,-60,857,788),24340=>array(110,-66,896,778),24341=>array(138,-61,844,826),24342=>array(64,-55,930,779),24343=>array(56,-66,904,838),24344=>array(80,-63,945,819),24345=>array(77,-71,956,788),24346=>array(61,-68,954,794),24347=>array(80,-63,957,824),24348=>array(92,-66,893,788),24349=>array(65,-57,953,791),24350=>array(77,-66,977,839),24351=>array(69,-64,902,843),24352=>array(62,-66,943,803),24353=>array(80,-63,951,790),24354=>array(76,-65,981,831),24355=>array(63,-55,949,847),24356=>array(63,-68,954,838),24357=>array(70,-63,955,836),24358=>array(80,-65,961,819),24359=>array(68,-63,958,838),24360=>array(72,-68,909,786),24361=>array(63,-63,952,836),24362=>array(67,-60,920,764),24363=>array(62,-63,953,776),24364=>array(62,-63,953,776),24365=>array(76,-65,941,790),24366=>array(47,-64,956,832),24367=>array(55,-75,946,830),24368=>array(83,-65,912,824),24369=>array(56,-65,917,787),24370=>array(80,-63,911,782),24371=>array(62,-56,936,774),24372=>array(80,-63,944,828),24373=>array(68,-64,962,799),24374=>array(77,-59,971,850),24375=>array(70,-63,955,833),24376=>array(63,-66,901,787),24377=>array(56,-59,918,836),24378=>array(63,-74,940,766),24379=>array(89,-62,927,790),24380=>array(63,-63,939,787),24381=>array(89,-62,968,832),24382=>array(68,-63,952,835),24383=>array(54,-48,976,874),24384=>array(57,-68,975,838),24385=>array(70,-65,944,797),24386=>array(80,-58,890,829),24387=>array(75,-67,961,785),24388=>array(69,-63,951,788),24389=>array(62,-67,964,847),24390=>array(91,-48,944,855),24391=>array(68,-76,926,837),24392=>array(70,-69,948,798),24393=>array(68,-67,962,831),24394=>array(66,-63,946,806),24395=>array(73,-82,969,780),24396=>array(49,-65,951,790),24397=>array(81,-74,959,846),24398=>array(52,-67,955,849),24399=>array(68,-70,967,786),24400=>array(167,-4,786,670),24401=>array(62,-37,941,804),24402=>array(27,-62,861,832),24403=>array(123,-60,878,830),24404=>array(67,-57,941,848),24405=>array(71,-61,965,789),24406=>array(59,-58,964,834),24407=>array(50,-75,951,834),24408=>array(53,-68,958,841),24409=>array(30,-72,965,841),24410=>array(30,-52,965,810),24411=>array(40,-61,956,825),24412=>array(40,-61,962,848),24413=>array(54,-71,956,851),24414=>array(40,-61,956,818),24415=>array(52,-57,978,840),24416=>array(68,-60,978,841),24417=>array(294,-59,800,804),24418=>array(59,-67,955,828),24419=>array(37,-66,949,821),24420=>array(53,-68,951,838),24421=>array(44,-67,926,852),24422=>array(33,-67,921,831),24423=>array(57,-61,956,832),24424=>array(52,-40,964,781),24425=>array(43,-62,958,828),24426=>array(20,-69,956,832),24427=>array(41,-65,963,844),24428=>array(47,-64,952,830),24429=>array(62,-65,957,828),24430=>array(51,-62,949,850),24431=>array(55,-74,961,823),24432=>array(47,-74,955,832),24433=>array(47,-68,961,829),24434=>array(36,-68,961,829),24435=>array(178,-67,756,826),24436=>array(58,-69,920,830),24437=>array(58,-66,945,830),24438=>array(49,-65,968,842),24439=>array(41,-73,942,840),24440=>array(52,-64,959,840),24441=>array(38,-70,963,833),24442=>array(58,-66,936,830),24443=>array(40,-66,911,820),24444=>array(51,-73,961,838),24445=>array(46,-70,962,836),24446=>array(41,-68,957,837),24447=>array(34,-66,915,838),24448=>array(47,-61,937,836),24449=>array(33,-70,954,836),24450=>array(44,-65,952,841),24451=>array(56,-65,952,841),24452=>array(45,-66,968,832),24453=>array(37,-67,947,841),24454=>array(57,-70,942,834),24455=>array(54,-64,923,842),24456=>array(37,-70,950,834),24457=>array(39,-68,948,843),24458=>array(61,-65,914,833),24459=>array(36,-67,954,830),24460=>array(42,-67,953,841),24461=>array(44,-65,931,842),24462=>array(44,-65,938,841),24463=>array(44,-65,945,841),24464=>array(35,-70,963,836),24465=>array(50,-74,956,838),24466=>array(48,-73,961,838),24467=>array(48,-73,961,838),24468=>array(56,-68,955,835),24469=>array(39,-63,941,834),24470=>array(49,-70,957,838),24471=>array(50,-70,947,833),24472=>array(36,-68,955,836),24473=>array(40,-64,970,833),24474=>array(59,-68,964,835),24475=>array(53,-68,956,834),24476=>array(44,-68,933,835),24477=>array(56,-68,930,835),24478=>array(49,-71,966,838),24479=>array(55,-73,900,835),24480=>array(39,-65,972,837),24481=>array(37,-62,917,835),24482=>array(44,-75,963,835),24483=>array(44,-68,953,835),24484=>array(44,-71,964,835),24485=>array(42,-68,963,827),24486=>array(40,-73,967,821),24487=>array(35,-65,910,833),24488=>array(46,-67,953,848),24489=>array(44,-67,970,843),24490=>array(40,-67,941,840),24491=>array(49,-62,954,837),24492=>array(46,-65,953,850),24493=>array(45,-67,956,852),24494=>array(35,-76,964,833),24495=>array(46,-64,973,837),24496=>array(44,-68,945,835),24497=>array(47,-68,954,835),24498=>array(41,-72,962,820),24499=>array(35,-70,958,838),24500=>array(31,-71,973,834),24501=>array(31,-71,973,834),24502=>array(48,-70,973,832),24503=>array(35,-70,960,838),24504=>array(26,-68,957,850),24505=>array(47,-70,951,830),24506=>array(56,-74,947,837),24507=>array(53,-68,972,845),24508=>array(31,-70,966,848),24509=>array(31,-67,961,836),24510=>array(39,-72,974,830),24511=>array(18,-62,965,842),24512=>array(28,-70,976,844),24513=>array(40,-70,967,834),24514=>array(43,-66,957,840),24515=>array(41,-17,958,801),24516=>array(300,-62,695,829),24517=>array(52,-8,960,796),24518=>array(41,-73,935,819),24519=>array(63,-66,874,833),24520=>array(46,-20,954,772),24521=>array(63,-69,903,830),24522=>array(51,-63,933,830),24523=>array(63,-63,957,830),24524=>array(47,-29,946,785),24525=>array(39,-31,961,773),24526=>array(46,-20,954,831),24527=>array(55,-59,950,839),24528=>array(45,-23,963,832),24529=>array(50,-21,968,774),24530=>array(43,-60,962,830),24531=>array(46,-67,963,832),24532=>array(42,-64,948,834),24533=>array(52,-73,958,825),24534=>array(46,-67,954,832),24535=>array(46,-20,954,826),24536=>array(49,-19,951,832),24537=>array(49,-64,935,830),24538=>array(37,-64,945,830),24539=>array(69,-76,948,820),24540=>array(46,-59,961,837),24541=>array(42,-64,956,841),24542=>array(59,-42,945,829),24543=>array(50,-60,977,851),24544=>array(56,-14,976,841),24545=>array(56,-67,912,830),24546=>array(45,-22,967,783),24547=>array(40,-67,971,833),24548=>array(43,-65,956,834),24549=>array(41,-65,962,849),24550=>array(48,-75,982,850),24551=>array(48,-74,928,821),24552=>array(36,-68,949,833),24553=>array(60,-25,978,806),24554=>array(53,-67,962,829),24555=>array(50,-73,964,837),24556=>array(30,-57,941,852),24557=>array(51,-68,964,849),24558=>array(46,-69,979,829),24559=>array(46,-65,958,839),24560=>array(37,-63,954,844),24561=>array(36,-65,956,838),24562=>array(23,-66,944,854),24563=>array(35,-64,953,835),24564=>array(48,-65,975,840),24565=>array(30,-58,963,846),24566=>array(46,-69,958,832),24567=>array(44,-71,907,835),24568=>array(30,-67,953,830),24569=>array(46,-67,948,832),24570=>array(47,-75,963,836),24571=>array(43,-68,945,829),24572=>array(46,-67,957,843),24573=>array(63,-32,953,845),24574=>array(38,-60,954,829),24575=>array(41,-21,951,810),24576=>array(55,-67,959,830),24577=>array(36,-44,937,807),24578=>array(41,-20,943,831),24579=>array(35,-72,929,824),24580=>array(46,-63,924,828),24581=>array(40,-71,942,821),24582=>array(44,-67,936,827),24583=>array(56,-67,946,824),24584=>array(43,-67,954,830),24585=>array(41,-60,947,839),24586=>array(52,-67,900,836),24587=>array(47,-70,954,830),24588=>array(45,-70,951,824),24589=>array(61,-71,971,833),24590=>array(59,-29,954,846),24591=>array(35,-69,968,832),24592=>array(52,-66,908,839),24593=>array(44,-70,937,835),24594=>array(49,-25,959,830),24595=>array(45,-71,959,826),24596=>array(44,-57,953,843),24597=>array(61,-64,922,855),24598=>array(22,-58,929,850),24599=>array(47,-69,957,825),24600=>array(29,-25,970,854),24601=>array(47,-67,950,832),24602=>array(37,-51,951,840),24603=>array(47,-68,953,829),24604=>array(39,-68,962,840),24605=>array(54,-23,935,780),24606=>array(47,-71,899,836),24607=>array(47,-67,953,836),24608=>array(50,-22,968,848),24609=>array(48,-66,947,832),24610=>array(50,-68,967,829),24611=>array(63,-24,965,805),24612=>array(63,-26,965,826),24613=>array(43,-24,947,842),24614=>array(41,-69,956,830),24615=>array(54,-68,951,827),24616=>array(53,-19,964,849),24617=>array(32,-68,955,830),24618=>array(45,-58,976,843),24619=>array(44,-68,933,832),24620=>array(59,-58,903,829),24621=>array(38,-66,957,830),24622=>array(50,-73,915,831),24623=>array(38,-65,951,835),24624=>array(45,-65,961,844),24625=>array(40,-57,969,822),24626=>array(38,-66,948,833),24627=>array(43,-54,969,845),24628=>array(38,-74,942,832),24629=>array(49,-67,959,830),24630=>array(32,-71,978,832),24631=>array(64,-32,957,823),24632=>array(64,-31,957,823),24633=>array(39,-28,954,841),24634=>array(35,-63,964,844),24635=>array(63,-22,938,829),24636=>array(45,-26,934,823),24637=>array(44,-61,971,843),24638=>array(23,-57,933,843),24639=>array(33,-63,946,825),24640=>array(45,-63,941,852),24641=>array(37,-25,945,843),24642=>array(57,-69,914,837),24643=>array(37,-68,947,832),24644=>array(57,-70,922,826),24645=>array(55,-68,941,826),24646=>array(49,-70,955,821),24647=>array(29,-57,963,835),24648=>array(23,-62,929,849),24649=>array(51,-48,938,847),24650=>array(27,-65,924,834),24651=>array(54,-32,945,831),24652=>array(58,-71,954,832),24653=>array(49,-69,963,836),24654=>array(23,-57,950,843),24655=>array(48,-27,949,843),24656=>array(49,-27,947,777),24657=>array(23,-71,956,845),24658=>array(35,-59,955,849),24659=>array(34,-62,938,834),24660=>array(42,-53,957,859),24661=>array(57,-17,967,844),24662=>array(42,-41,960,846),24663=>array(23,-58,966,843),24664=>array(69,-69,967,833),24665=>array(49,-49,954,849),24666=>array(44,-52,954,836),24667=>array(54,-68,893,829),24668=>array(23,-59,964,843),24669=>array(47,-48,950,805),24670=>array(60,-74,948,828),24671=>array(43,-55,924,848),24672=>array(45,-84,963,834),24673=>array(52,-70,937,821),24674=>array(36,-62,959,832),24675=>array(41,-22,946,842),24676=>array(31,-65,964,836),24677=>array(38,-65,970,814),24678=>array(59,-71,894,826),24679=>array(45,-45,982,759),24680=>array(45,-70,957,825),24681=>array(46,-40,965,796),24682=>array(38,-66,966,839),24683=>array(52,-57,923,841),24684=>array(28,-67,944,830),24685=>array(43,-62,968,836),24686=>array(56,-66,958,828),24687=>array(43,-25,949,843),24688=>array(54,-65,982,847),24689=>array(41,-65,961,837),24690=>array(60,-70,956,829),24691=>array(37,-42,924,768),24692=>array(53,-28,946,863),24693=>array(47,-28,942,846),24694=>array(46,-16,935,783),24695=>array(51,-35,942,805),24696=>array(35,-68,892,825),24697=>array(23,-75,941,823),24698=>array(50,-62,928,826),24699=>array(39,-63,878,827),24700=>array(39,-64,937,832),24701=>array(38,-66,915,823),24702=>array(38,-55,933,832),24703=>array(59,-22,976,798),24704=>array(53,-67,900,829),24705=>array(55,-64,900,830),24706=>array(26,-67,927,828),24707=>array(37,-67,907,827),24708=>array(55,-61,934,846),24709=>array(45,-66,968,842),24710=>array(44,-35,967,838),24711=>array(42,-62,968,834),24712=>array(45,-66,949,835),24713=>array(33,-31,959,832),24714=>array(51,-38,958,822),24715=>array(46,-72,954,825),24716=>array(42,-66,937,848),24717=>array(49,-63,955,844),24718=>array(57,-62,939,834),24719=>array(57,-73,964,835),24720=>array(56,-39,962,829),24721=>array(45,-68,941,833),24722=>array(46,-67,958,830),24723=>array(44,-61,944,833),24724=>array(31,-62,955,848),24725=>array(46,-67,951,847),24726=>array(31,-66,949,834),24727=>array(43,-63,960,852),24728=>array(42,-41,960,802),24729=>array(43,-67,951,852),24730=>array(43,-66,971,835),24731=>array(11,-69,953,849),24732=>array(48,-64,960,830),24733=>array(47,-68,961,826),24734=>array(41,-55,968,837),24735=>array(43,-67,945,821),24736=>array(29,-35,957,839),24737=>array(39,-43,953,830),24738=>array(40,-68,960,833),24739=>array(52,-58,958,832),24740=>array(39,-58,958,866),24741=>array(52,-58,958,869),24742=>array(22,-66,960,844),24743=>array(22,-66,918,842),24744=>array(49,-23,963,842),24745=>array(40,-64,900,831),24746=>array(62,-25,962,783),24747=>array(52,-32,939,824),24748=>array(37,-16,933,791),24749=>array(32,-62,945,827),24750=>array(45,-74,947,815),24751=>array(29,-61,885,832),24752=>array(52,-67,972,832),24753=>array(39,-72,948,833),24754=>array(43,-38,953,831),24755=>array(40,-47,945,839),24756=>array(37,-62,952,844),24757=>array(48,-67,976,830),24758=>array(127,-62,886,792),24759=>array(50,-67,960,838),24760=>array(30,-67,974,840),24761=>array(62,-36,957,834),24762=>array(62,-67,924,839),24763=>array(46,-65,960,837),24764=>array(21,-62,944,846),24765=>array(36,-78,948,826),24766=>array(34,-57,953,851),24767=>array(46,-63,979,832),24768=>array(45,-64,974,837),24769=>array(37,-28,970,830),24770=>array(52,-67,912,849),24771=>array(51,-74,949,824),24772=>array(38,-28,955,831),24773=>array(19,-66,939,837),24774=>array(31,-68,891,826),24775=>array(43,-67,971,833),24776=>array(52,-70,968,826),24777=>array(48,-26,965,829),24778=>array(27,-60,974,842),24779=>array(29,-61,959,855),24780=>array(52,-31,955,838),24781=>array(43,-74,965,830),24782=>array(41,-27,964,842),24783=>array(34,-64,988,833),24784=>array(32,-66,918,837),24785=>array(50,-20,958,844),24786=>array(42,-41,960,842),24787=>array(31,-72,989,834),24788=>array(52,-68,964,841),24789=>array(49,-58,914,846),24790=>array(26,-38,971,823),24791=>array(50,-51,972,853),24792=>array(43,-67,911,828),24793=>array(38,-52,962,838),24794=>array(41,-65,965,844),24795=>array(40,-53,956,850),24796=>array(47,-73,956,837),24797=>array(45,-71,914,824),24798=>array(47,-72,961,833),24799=>array(23,-61,946,849),24800=>array(56,-28,953,846),24801=>array(62,-25,962,783),24802=>array(39,-31,977,831),24803=>array(53,-43,940,844),24804=>array(44,-69,957,835),24805=>array(35,-32,983,834),24806=>array(47,-62,958,851),24807=>array(46,-68,964,831),24808=>array(35,-75,982,835),24809=>array(23,-32,932,832),24810=>array(37,-23,955,839),24811=>array(37,-47,962,834),24812=>array(40,-65,929,821),24813=>array(20,-53,910,835),24814=>array(31,-60,954,840),24815=>array(23,-64,925,832),24816=>array(44,-66,953,841),24817=>array(43,-65,929,847),24818=>array(46,-68,962,828),24819=>array(43,-47,956,825),24820=>array(45,-67,956,832),24821=>array(43,-71,952,830),24822=>array(49,-57,956,856),24823=>array(41,-51,968,836),24824=>array(49,-70,959,840),24825=>array(46,-37,962,828),24826=>array(39,-58,958,847),24827=>array(60,-64,921,831),24828=>array(53,-70,925,830),24829=>array(40,-54,963,836),24830=>array(47,-68,969,830),24831=>array(59,-69,981,824),24832=>array(29,-71,977,830),24833=>array(28,-51,960,829),24834=>array(28,-51,955,832),24835=>array(52,-61,956,833),24836=>array(51,-88,969,823),24837=>array(58,-70,953,827),24838=>array(44,-29,957,840),24839=>array(47,-70,944,837),24840=>array(29,-62,965,854),24841=>array(30,-73,981,846),24842=>array(30,-57,935,841),24843=>array(49,-73,972,836),24844=>array(47,-68,972,841),24845=>array(65,-49,963,818),24846=>array(34,-69,980,841),24847=>array(43,-48,959,840),24848=>array(40,-72,947,819),24849=>array(55,-58,914,836),24850=>array(46,-53,916,837),24851=>array(30,-56,952,837),24852=>array(55,-73,954,828),24853=>array(40,-67,963,829),24854=>array(38,-58,952,837),24855=>array(30,-45,954,830),24856=>array(47,-70,974,833),24857=>array(28,-54,990,868),24858=>array(38,-45,954,793),24859=>array(72,-65,948,834),24860=>array(38,-68,958,829),24861=>array(49,-62,945,830),24862=>array(51,-72,957,827),24863=>array(47,-29,951,829),24864=>array(31,-74,948,823),24865=>array(19,-74,961,850),24866=>array(37,-74,961,823),24867=>array(48,-68,950,829),24868=>array(27,-64,930,829),24869=>array(48,-68,988,836),24870=>array(53,-70,937,821),24871=>array(28,-61,952,845),24872=>array(52,-49,960,838),24873=>array(55,-77,958,833),24874=>array(48,-68,941,829),24875=>array(38,-67,980,833),24876=>array(43,-60,961,830),24877=>array(57,-74,936,832),24878=>array(60,-71,955,834),24879=>array(56,-72,968,833),24880=>array(57,-74,941,829),24881=>array(45,-74,963,846),24882=>array(58,-67,914,833),24883=>array(28,-23,955,789),24884=>array(30,-67,982,852),24885=>array(52,-70,917,821),24886=>array(60,-58,932,849),24887=>array(37,-68,951,835),24888=>array(44,-33,957,835),24889=>array(52,-76,962,841),24890=>array(49,-68,950,834),24891=>array(62,-40,970,831),24892=>array(49,-66,927,834),24893=>array(40,-66,951,834),24894=>array(32,-63,974,851),24895=>array(43,-52,963,812),24896=>array(47,-71,974,831),24897=>array(62,-38,967,780),24898=>array(42,-50,957,816),24899=>array(44,-72,955,851),24900=>array(38,-59,976,835),24901=>array(55,-75,971,829),24902=>array(50,-54,926,853),24903=>array(40,-42,974,845),24904=>array(38,-48,951,837),24905=>array(50,-72,951,841),24906=>array(35,-72,975,849),24907=>array(50,-48,954,848),24908=>array(41,-68,962,836),24909=>array(48,-72,965,826),24910=>array(41,-69,951,843),24911=>array(60,-78,952,835),24912=>array(47,-51,963,831),24913=>array(48,-65,952,830),24914=>array(46,-72,953,824),24915=>array(39,-68,984,829),24916=>array(48,-71,973,832),24917=>array(51,-63,964,833),24918=>array(53,-74,919,822),24919=>array(15,-43,954,829),24920=>array(29,-76,967,847),24921=>array(38,-58,953,837),24922=>array(37,-63,965,846),24923=>array(38,-68,952,829),24924=>array(47,-44,964,853),24925=>array(41,-58,963,824),24926=>array(20,-58,953,854),24927=>array(52,-74,934,830),24928=>array(36,-76,960,838),24929=>array(40,-73,960,829),24930=>array(38,-69,970,825),24931=>array(40,-68,967,843),24932=>array(52,-49,968,818),24933=>array(39,-66,945,838),24934=>array(39,-36,981,828),24935=>array(49,-52,951,835),24936=>array(28,-70,963,842),24937=>array(40,-67,971,834),24938=>array(40,-68,959,828),24939=>array(42,-50,958,845),24940=>array(47,-64,953,829),24941=>array(44,-33,970,835),24942=>array(45,-77,957,841),24943=>array(40,-68,963,845),24944=>array(55,-21,959,838),24945=>array(39,-65,952,828),24946=>array(48,-65,956,827),24947=>array(37,-68,954,829),24948=>array(54,-66,915,826),24949=>array(37,-65,959,842),24950=>array(50,-67,951,838),24951=>array(39,-57,955,846),24952=>array(57,-31,959,849),24953=>array(57,-31,959,834),24954=>array(32,-75,952,830),24955=>array(41,-76,981,845),24956=>array(36,-29,965,844),24957=>array(35,-63,963,842),24958=>array(38,-25,973,841),24959=>array(70,-32,957,800),24960=>array(51,-70,979,824),24961=>array(45,-65,964,834),24962=>array(55,-60,966,816),24963=>array(38,-39,982,847),24964=>array(37,-45,958,837),24965=>array(58,-51,979,859),24966=>array(33,-69,945,835),24967=>array(47,-29,961,817),24968=>array(45,-72,962,829),24969=>array(42,-73,971,828),24970=>array(42,-70,957,834),24971=>array(48,-28,965,843),24972=>array(39,-36,963,833),24973=>array(28,-60,975,848),24974=>array(38,-73,905,835),24975=>array(46,-61,972,854),24976=>array(36,-76,962,832),24977=>array(42,-58,960,800),24978=>array(36,-70,966,833),24979=>array(43,-61,971,835),24980=>array(25,-67,963,846),24981=>array(43,-61,963,837),24982=>array(25,-60,970,835),24983=>array(29,-60,952,841),24984=>array(52,-70,956,837),24985=>array(37,-47,961,844),24986=>array(42,-63,965,832),24987=>array(42,-72,961,824),24988=>array(45,-62,965,833),24989=>array(53,-52,976,834),24990=>array(23,-75,954,837),24991=>array(32,-68,967,823),24992=>array(31,-47,961,818),24993=>array(48,-70,979,836),24994=>array(17,-87,964,830),24995=>array(29,-70,962,829),24996=>array(36,-72,956,836),24997=>array(40,-47,961,832),24998=>array(52,-70,946,833),24999=>array(38,-68,950,831),25000=>array(50,-33,959,837),25001=>array(43,-29,958,845),25002=>array(36,-68,908,825),25003=>array(51,-55,902,846),25004=>array(46,-68,963,828),25005=>array(34,-58,971,845),25006=>array(38,-71,974,832),25007=>array(45,-59,961,832),25008=>array(44,-62,944,826),25009=>array(47,-71,972,838),25010=>array(42,-38,976,839),25011=>array(36,-70,954,825),25012=>array(35,-65,973,828),25013=>array(49,-39,948,821),25014=>array(32,-68,965,840),25015=>array(38,-66,960,824),25016=>array(32,-66,976,857),25017=>array(41,-65,984,838),25018=>array(43,-67,957,842),25019=>array(43,-67,957,847),25020=>array(45,-32,957,835),25021=>array(48,-56,968,847),25022=>array(38,-71,970,832),25023=>array(33,-78,968,841),25024=>array(37,-72,973,864),25025=>array(37,-79,974,819),25026=>array(46,-58,967,845),25027=>array(38,-66,959,832),25028=>array(29,-69,952,841),25029=>array(31,-85,978,829),25030=>array(42,-62,976,830),25031=>array(48,-26,955,844),25032=>array(29,-63,950,845),25033=>array(39,-68,953,843),25034=>array(18,-68,949,860),25035=>array(42,-58,959,832),25036=>array(44,-63,964,831),25037=>array(38,-68,971,844),25038=>array(53,-68,950,833),25039=>array(49,-70,932,848),25040=>array(40,-71,965,839),25041=>array(53,-26,941,821),25042=>array(30,-63,943,838),25043=>array(48,-69,975,843),25044=>array(33,-70,947,847),25045=>array(36,-59,959,821),25046=>array(51,-41,944,827),25047=>array(25,-69,956,833),25048=>array(53,-52,953,811),25049=>array(60,-71,942,821),25050=>array(33,-71,953,830),25051=>array(37,-71,953,826),25052=>array(37,-71,963,825),25053=>array(49,-71,974,830),25054=>array(41,-59,971,836),25055=>array(46,-44,966,823),25056=>array(38,-70,964,836),25057=>array(38,-69,962,846),25058=>array(43,-73,964,821),25059=>array(46,-62,966,834),25060=>array(38,-69,957,830),25061=>array(44,-70,976,829),25062=>array(48,-59,964,843),25063=>array(44,-68,962,839),25064=>array(36,-71,975,838),25065=>array(34,-56,967,858),25066=>array(41,-70,980,825),25067=>array(47,-73,957,844),25068=>array(29,-55,952,847),25069=>array(51,-85,939,836),25070=>array(47,-73,955,828),25071=>array(48,-41,980,826),25072=>array(47,-65,905,848),25073=>array(47,-71,960,824),25074=>array(32,-42,963,846),25075=>array(26,-56,988,836),25076=>array(27,-68,962,845),25077=>array(41,-68,954,835),25078=>array(32,-72,970,845),25079=>array(43,-69,962,841),25080=>array(46,-32,965,836),25081=>array(29,-67,984,840),25082=>array(27,-67,963,846),25083=>array(30,-80,966,830),25084=>array(29,-65,957,826),25085=>array(42,-68,953,826),25086=>array(43,-66,963,830),25087=>array(43,-55,963,834),25088=>array(42,-54,961,841),25089=>array(39,-44,967,836),25090=>array(40,-72,960,854),25091=>array(42,-78,962,829),25092=>array(34,-57,971,836),25093=>array(39,-36,957,842),25094=>array(59,-29,941,826),25095=>array(39,-36,957,846),25096=>array(90,-52,956,829),25097=>array(73,-64,966,832),25098=>array(65,-64,951,840),25099=>array(74,-70,930,820),25100=>array(51,-57,951,836),25101=>array(64,-67,953,837),25102=>array(50,-66,952,830),25103=>array(42,-68,934,825),25104=>array(50,-72,946,831),25105=>array(61,-60,933,832),25106=>array(61,-64,955,838),25107=>array(70,-66,956,838),25108=>array(85,-58,935,840),25109=>array(44,-68,961,829),25110=>array(70,-58,956,838),25111=>array(32,-74,938,826),25112=>array(100,-69,937,829),25113=>array(102,-67,957,823),25114=>array(65,-60,962,836),25115=>array(81,-57,949,788),25116=>array(67,-67,953,838),25117=>array(63,-74,946,834),25118=>array(77,-49,935,796),25119=>array(51,-65,946,834),25120=>array(68,-69,968,839),25121=>array(33,-72,939,836),25122=>array(43,-64,954,830),25123=>array(45,-71,964,832),25124=>array(33,-65,958,828),25125=>array(52,-59,956,832),25126=>array(35,-73,947,833),25127=>array(43,-64,970,848),25128=>array(65,-65,956,829),25129=>array(52,-65,956,829),25130=>array(54,-61,959,837),25131=>array(36,-63,964,829),25132=>array(52,-61,947,815),25133=>array(42,-70,958,844),25134=>array(39,-77,962,835),25135=>array(52,-68,956,837),25136=>array(56,-73,947,832),25137=>array(41,-65,949,834),25138=>array(52,-68,958,835),25139=>array(24,-62,946,836),25140=>array(43,-63,938,834),25141=>array(50,-65,958,827),25142=>array(69,-64,882,838),25143=>array(53,-66,849,842),25144=>array(57,-64,918,764),25145=>array(45,-71,939,836),25146=>array(51,-59,963,831),25147=>array(39,-68,947,799),25148=>array(89,-72,914,783),25149=>array(57,-67,954,841),25150=>array(44,-71,941,837),25151=>array(40,-66,938,804),25152=>array(42,-70,959,841),25153=>array(43,-70,908,796),25154=>array(61,-65,906,826),25155=>array(45,-64,898,853),25156=>array(38,-68,899,843),25157=>array(38,-68,901,847),25158=>array(38,-68,983,850),25159=>array(35,-67,896,811),25160=>array(28,-68,961,802),25161=>array(28,-77,947,810),25162=>array(52,-72,962,836),25163=>array(85,-68,913,833),25164=>array(266,-62,684,829),25165=>array(64,-62,916,835),25166=>array(53,-61,943,828),25167=>array(56,-61,960,828),25168=>array(66,-71,909,829),25169=>array(53,-48,964,849),25170=>array(45,-65,955,830),25171=>array(54,-62,934,830),25172=>array(66,-67,919,829),25173=>array(43,-61,953,828),25174=>array(80,-61,957,828),25175=>array(53,-61,945,829),25176=>array(55,-69,930,826),25177=>array(61,-69,968,830),25178=>array(58,-67,918,831),25179=>array(44,-64,934,829),25180=>array(59,-65,958,830),25181=>array(39,-61,944,828),25182=>array(48,-53,951,841),25183=>array(39,-65,958,828),25184=>array(38,-56,959,837),25185=>array(48,-57,958,836),25186=>array(47,-63,950,836),25187=>array(71,-68,893,830),25188=>array(53,-68,947,832),25189=>array(53,-66,960,827),25190=>array(46,-64,947,832),25191=>array(25,-67,945,825),25192=>array(42,-61,964,826),25193=>array(42,-63,922,826),25194=>array(29,-65,882,826),25195=>array(44,-62,885,830),25196=>array(55,-65,889,831),25197=>array(39,-53,947,841),25198=>array(49,-64,963,820),25199=>array(52,-57,945,830),25200=>array(50,-66,958,832),25201=>array(41,-51,962,840),25202=>array(59,-68,973,839),25203=>array(45,-78,963,826),25204=>array(68,-66,964,832),25205=>array(42,-55,975,845),25206=>array(50,-72,962,833),25207=>array(50,-67,968,832),25208=>array(78,-58,907,839),25209=>array(45,-72,961,823),25210=>array(42,-55,963,853),25211=>array(48,-69,963,840),25212=>array(50,-69,950,829),25213=>array(50,-67,960,828),25214=>array(63,-68,950,825),25215=>array(33,-67,965,785),25216=>array(37,-74,952,824),25217=>array(50,-64,949,844),25218=>array(63,-55,948,839),25219=>array(62,-59,958,831),25220=>array(39,-63,960,829),25221=>array(31,-55,921,840),25222=>array(37,-57,974,851),25223=>array(57,-63,897,832),25224=>array(56,-66,903,829),25225=>array(53,-64,961,837),25226=>array(40,-62,941,833),25227=>array(42,-55,967,839),25228=>array(61,-58,962,838),25229=>array(42,-65,969,839),25230=>array(51,-71,954,826),25231=>array(56,-70,957,826),25232=>array(58,-66,895,835),25233=>array(47,-69,905,834),25234=>array(57,-58,941,833),25235=>array(40,-69,959,829),25236=>array(57,-52,969,839),25237=>array(56,-66,963,821),25238=>array(52,-64,947,828),25239=>array(46,-63,959,829),25240=>array(61,-68,938,834),25241=>array(48,-67,939,839),25242=>array(31,-60,935,829),25243=>array(28,-78,930,821),25244=>array(51,-77,950,835),25245=>array(55,-55,907,853),25246=>array(42,-56,958,839),25247=>array(37,-66,914,823),25248=>array(36,-54,912,832),25249=>array(36,-56,948,832),25250=>array(38,-71,950,828),25251=>array(46,-63,920,830),25252=>array(27,-66,872,828),25253=>array(49,-69,946,820),25254=>array(54,-52,950,838),25255=>array(93,-57,957,833),25256=>array(41,-65,943,827),25257=>array(50,-66,953,828),25258=>array(39,-65,941,838),25259=>array(45,-71,978,832),25260=>array(44,-70,953,839),25261=>array(44,-60,954,830),25262=>array(51,-62,952,845),25263=>array(45,-62,951,827),25264=>array(44,-69,956,833),25265=>array(50,-61,955,840),25266=>array(56,-70,953,821),25267=>array(50,-74,955,828),25268=>array(49,-67,951,828),25269=>array(43,-64,957,831),25270=>array(50,-70,965,827),25271=>array(45,-56,951,823),25272=>array(58,-67,969,831),25273=>array(61,-67,962,835),25274=>array(61,-65,942,832),25275=>array(43,-68,905,836),25276=>array(73,-66,908,828),25277=>array(62,-67,899,836),25278=>array(52,-60,960,839),25279=>array(48,-64,956,828),25280=>array(61,-64,972,832),25281=>array(61,-64,928,832),25282=>array(53,-69,931,816),25283=>array(57,-62,944,841),25284=>array(48,-68,951,836),25285=>array(44,-60,953,836),25286=>array(53,-62,935,838),25287=>array(37,-68,953,825),25288=>array(50,-67,947,829),25289=>array(49,-64,947,829),25290=>array(52,-62,959,841),25291=>array(44,-73,948,825),25292=>array(48,-64,942,828),25293=>array(73,-64,904,851),25294=>array(42,-68,970,851),25295=>array(60,-58,974,851),25296=>array(49,-64,910,826),25297=>array(63,-67,959,826),25298=>array(39,-68,944,832),25299=>array(53,-63,936,826),25300=>array(40,-77,954,835),25301=>array(74,-64,944,831),25302=>array(43,-62,954,839),25303=>array(61,-73,920,832),25304=>array(65,-61,909,849),25305=>array(60,-63,912,832),25306=>array(52,-75,950,845),25307=>array(69,-67,913,820),25308=>array(47,-79,956,829),25309=>array(44,-66,946,835),25310=>array(70,-64,943,832),25311=>array(41,-61,937,830),25312=>array(55,-61,956,832),25313=>array(36,-66,949,832),25314=>array(31,-52,961,837),25315=>array(29,-61,932,835),25316=>array(57,-68,938,832),25317=>array(40,-72,893,824),25318=>array(38,-55,923,830),25319=>array(40,-61,918,836),25320=>array(38,-74,925,820),25321=>array(30,-64,942,826),25322=>array(61,-63,935,832),25323=>array(54,-66,967,829),25324=>array(39,-70,952,835),25325=>array(43,-70,964,827),25326=>array(45,-67,957,828),25327=>array(37,-71,964,823),25328=>array(58,-72,951,823),25329=>array(35,-69,953,826),25330=>array(36,-65,977,828),25331=>array(38,-67,965,838),25332=>array(33,-64,960,829),25333=>array(60,-68,959,830),25334=>array(46,-64,945,839),25335=>array(41,-65,952,833),25336=>array(60,-75,940,833),25337=>array(54,-71,928,826),25338=>array(55,-65,953,832),25339=>array(56,-80,958,822),25340=>array(48,-70,949,839),25341=>array(44,-64,961,836),25342=>array(45,-63,961,848),25343=>array(38,-70,969,862),25344=>array(62,-81,950,819),25345=>array(39,-64,944,834),25346=>array(36,-49,951,844),25347=>array(56,-52,951,830),25348=>array(60,-66,942,844),25349=>array(60,-62,952,832),25350=>array(78,-62,976,844),25351=>array(52,-68,937,829),25352=>array(54,-62,951,835),25353=>array(57,-67,948,832),25354=>array(41,-66,946,844),25355=>array(57,-50,953,827),25356=>array(49,-65,987,846),25357=>array(46,-51,974,859),25358=>array(48,-65,963,839),25359=>array(60,-74,911,815),25360=>array(63,-51,959,855),25361=>array(47,-75,950,825),25362=>array(60,-78,927,823),25363=>array(44,-64,959,834),25364=>array(52,-64,964,829),25365=>array(66,-70,957,817),25366=>array(38,-65,943,846),25367=>array(60,-62,963,844),25368=>array(49,-67,950,835),25369=>array(19,-68,951,835),25370=>array(54,-68,942,824),25371=>array(42,-60,920,845),25372=>array(60,-50,954,844),25373=>array(25,-62,945,831),25374=>array(34,-60,942,830),25375=>array(26,-64,948,832),25376=>array(42,-64,930,825),25377=>array(35,-62,883,826),25378=>array(36,-64,948,826),25379=>array(36,-66,923,832),25380=>array(37,-61,938,834),25381=>array(33,-59,911,832),25382=>array(61,-61,936,832),25383=>array(60,-53,909,844),25384=>array(42,-69,965,834),25385=>array(46,-66,956,829),25386=>array(47,-73,950,822),25387=>array(51,-71,948,829),25388=>array(56,-59,953,835),25389=>array(53,-60,969,836),25390=>array(60,-67,926,844),25391=>array(45,-74,963,821),25392=>array(60,-49,950,838),25393=>array(60,-60,969,832),25394=>array(56,-63,952,839),25395=>array(53,-66,949,827),25396=>array(40,-64,947,828),25397=>array(38,-51,951,841),25398=>array(36,-56,916,841),25399=>array(39,-68,950,836),25400=>array(56,-72,947,829),25401=>array(36,-68,956,823),25402=>array(44,-66,964,824),25403=>array(52,-73,956,826),25404=>array(41,-56,944,858),25405=>array(44,-69,965,840),25406=>array(47,-70,964,835),25407=>array(60,-52,939,844),25408=>array(60,-64,969,831),25409=>array(50,-68,932,828),25410=>array(43,-72,952,823),25411=>array(51,-65,966,833),25412=>array(59,-65,952,832),25413=>array(62,-70,915,825),25414=>array(53,-69,915,826),25415=>array(56,-69,958,829),25416=>array(43,-59,965,832),25417=>array(35,-72,953,821),25418=>array(53,-63,953,832),25419=>array(48,-67,952,826),25420=>array(45,-71,909,825),25421=>array(38,-68,951,826),25422=>array(52,-65,919,835),25423=>array(56,-67,956,828),25424=>array(55,-67,903,823),25425=>array(56,-73,958,831),25426=>array(67,-65,955,835),25427=>array(64,-67,958,829),25428=>array(76,-65,912,829),25429=>array(39,-69,950,832),25430=>array(46,-69,950,834),25431=>array(58,-64,966,827),25432=>array(65,-65,979,836),25433=>array(59,-65,954,829),25434=>array(67,-63,956,829),25435=>array(67,-63,915,829),25436=>array(44,-78,963,829),25437=>array(67,-61,968,829),25438=>array(44,-63,914,832),25439=>array(32,-64,937,827),25440=>array(50,-64,931,829),25441=>array(31,-63,931,830),25442=>array(25,-73,948,825),25443=>array(49,-62,900,836),25444=>array(66,-67,951,824),25445=>array(58,-70,961,852),25446=>array(73,-52,966,835),25447=>array(36,-74,967,834),25448=>array(43,-68,969,845),25449=>array(27,-66,959,826),25450=>array(67,-65,960,833),25451=>array(54,-63,904,832),25452=>array(37,-60,949,849),25453=>array(37,-65,947,846),25454=>array(37,-54,943,838),25455=>array(56,-64,914,830),25456=>array(50,-64,974,832),25457=>array(50,-71,967,842),25458=>array(36,-56,967,835),25459=>array(53,-58,951,833),25460=>array(67,-61,962,829),25461=>array(41,-54,950,843),25462=>array(30,-71,933,833),25463=>array(40,-75,963,833),25464=>array(54,-69,959,824),25465=>array(67,-72,957,829),25466=>array(23,-61,963,847),25467=>array(27,-64,961,853),25468=>array(53,-59,967,840),25469=>array(51,-51,953,854),25470=>array(67,-64,939,845),25471=>array(67,-63,938,835),25472=>array(45,-72,961,833),25473=>array(53,-71,968,832),25474=>array(56,-74,938,840),25475=>array(44,-65,922,829),25476=>array(38,-65,974,853),25477=>array(46,-65,959,836),25478=>array(67,-65,906,829),25479=>array(41,-67,975,827),25480=>array(52,-69,964,832),25481=>array(46,-71,944,825),25482=>array(48,-65,959,845),25483=>array(67,-69,966,839),25484=>array(79,-61,932,835),25485=>array(51,-69,960,827),25486=>array(45,-63,966,842),25487=>array(62,-69,921,841),25488=>array(61,-65,908,842),25489=>array(50,-73,953,835),25490=>array(41,-69,951,831),25491=>array(41,-71,958,832),25492=>array(73,-69,951,788),25493=>array(40,-72,971,820),25494=>array(40,-74,963,820),25495=>array(38,-65,965,842),25496=>array(49,-76,911,829),25497=>array(40,-66,952,828),25498=>array(40,-69,942,820),25499=>array(38,-65,968,829),25500=>array(48,-70,957,832),25501=>array(53,-70,951,827),25502=>array(45,-52,971,852),25503=>array(34,-60,966,837),25504=>array(41,-71,955,826),25505=>array(39,-58,975,848),25506=>array(39,-69,966,824),25507=>array(45,-71,942,827),25508=>array(49,-69,898,829),25509=>array(43,-71,950,828),25510=>array(40,-69,911,820),25511=>array(36,-65,945,828),25512=>array(52,-68,955,836),25513=>array(41,-68,966,839),25514=>array(49,-72,948,824),25515=>array(41,-51,968,841),25516=>array(50,-62,914,844),25517=>array(46,-59,988,832),25518=>array(55,-68,951,836),25519=>array(38,-67,951,832),25520=>array(54,-52,954,826),25521=>array(83,-67,944,831),25522=>array(73,-71,924,818),25523=>array(31,-65,909,832),25524=>array(37,-60,904,830),25525=>array(40,-72,977,828),25526=>array(40,-71,956,856),25527=>array(22,-70,923,824),25528=>array(41,-63,917,837),25529=>array(65,-59,954,825),25530=>array(54,-62,942,835),25531=>array(28,-65,973,826),25532=>array(30,-64,921,829),25533=>array(42,-60,947,854),25534=>array(49,-63,975,839),25535=>array(40,-72,948,836),25536=>array(37,-65,965,835),25537=>array(59,-74,962,821),25538=>array(61,-68,955,839),25539=>array(43,-68,950,837),25540=>array(39,-64,973,831),25541=>array(40,-69,941,785),25542=>array(46,-67,954,835),25543=>array(50,-67,947,829),25544=>array(53,-72,899,823),25545=>array(46,-69,964,826),25546=>array(55,-70,952,828),25547=>array(50,-74,972,828),25548=>array(57,-70,971,821),25549=>array(36,-66,968,845),25550=>array(47,-59,965,851),25551=>array(53,-69,955,828),25552=>array(48,-72,969,826),25553=>array(55,-72,954,820),25554=>array(48,-71,940,836),25555=>array(57,-68,962,828),25556=>array(33,-50,972,850),25557=>array(54,-64,949,828),25558=>array(37,-67,948,829),25559=>array(51,-72,957,832),25560=>array(53,-71,951,838),25561=>array(62,-69,920,832),25562=>array(46,-77,944,820),25563=>array(40,-65,971,838),25564=>array(36,-60,975,862),25565=>array(53,-69,977,829),25566=>array(35,-72,912,831),25567=>array(57,-74,964,823),25568=>array(41,-63,953,829),25569=>array(54,-62,943,830),25570=>array(40,-72,960,849),25571=>array(37,-63,954,836),25572=>array(57,-64,901,830),25573=>array(55,-67,943,838),25574=>array(44,-67,903,831),25575=>array(43,-68,949,831),25576=>array(49,-69,941,833),25577=>array(50,-68,949,830),25578=>array(34,-66,964,829),25579=>array(66,-51,969,851),25580=>array(40,-69,960,836),25581=>array(73,-71,924,818),25582=>array(56,-68,945,825),25583=>array(56,-68,956,825),25584=>array(53,-62,954,830),25585=>array(67,-70,941,833),25586=>array(38,-53,971,843),25587=>array(53,-73,961,827),25588=>array(61,-69,969,830),25589=>array(38,-66,959,823),25590=>array(34,-64,945,829),25591=>array(48,-70,940,826),25592=>array(28,-57,971,836),25593=>array(48,-63,953,827),25594=>array(39,-76,937,819),25595=>array(35,-66,971,829),25596=>array(49,-61,974,833),25597=>array(32,-60,930,833),25598=>array(40,-72,967,820),25599=>array(35,-68,938,825),25600=>array(43,-63,939,829),25601=>array(42,-73,897,824),25602=>array(35,-53,943,837),25603=>array(95,-59,950,822),25604=>array(50,-59,960,849),25605=>array(34,-63,926,837),25606=>array(39,-68,958,836),25607=>array(45,-64,971,842),25608=>array(52,-72,962,837),25609=>array(39,-58,957,851),25610=>array(53,-62,909,836),25611=>array(53,-75,968,828),25612=>array(53,-75,968,827),25613=>array(51,-70,956,822),25614=>array(61,-68,961,828),25615=>array(50,-66,945,832),25616=>array(50,-75,950,843),25617=>array(43,-67,954,829),25618=>array(53,-57,962,853),25619=>array(27,-66,933,843),25620=>array(28,-65,950,826),25621=>array(51,-61,954,826),25622=>array(42,-64,945,845),25623=>array(66,-60,921,844),25624=>array(47,-50,955,847),25625=>array(43,-64,953,829),25626=>array(55,-64,934,838),25627=>array(49,-70,953,838),25628=>array(44,-78,963,832),25629=>array(67,-67,971,843),25630=>array(60,-67,940,842),25631=>array(48,-72,952,823),25632=>array(56,-70,915,835),25633=>array(35,-67,964,829),25634=>array(43,-65,958,833),25635=>array(44,-72,968,831),25636=>array(41,-50,954,859),25637=>array(44,-55,967,857),25638=>array(52,-64,917,828),25639=>array(56,-71,923,838),25640=>array(59,-64,918,827),25641=>array(43,-65,969,838),25642=>array(46,-70,948,843),25643=>array(50,-64,957,842),25644=>array(38,-71,976,838),25645=>array(40,-71,966,830),25646=>array(56,-70,975,826),25647=>array(43,-70,920,838),25648=>array(56,-68,916,827),25649=>array(67,-71,928,829),25650=>array(38,-66,960,844),25651=>array(47,-70,948,836),25652=>array(36,-59,981,845),25653=>array(49,-67,965,826),25654=>array(37,-66,970,849),25655=>array(58,-72,961,836),25656=>array(43,-68,973,839),25657=>array(55,-65,952,825),25658=>array(39,-77,947,839),25659=>array(38,-64,969,862),25660=>array(43,-69,970,839),25661=>array(40,-65,965,830),25662=>array(42,-61,952,837),25663=>array(52,-57,955,822),25664=>array(56,-69,945,842),25665=>array(65,-62,955,826),25666=>array(47,-58,951,835),25667=>array(35,-55,954,837),25668=>array(47,-60,960,835),25669=>array(38,-63,967,830),25670=>array(31,-63,934,834),25671=>array(28,-76,914,819),25672=>array(43,-64,932,844),25673=>array(52,-64,975,841),25674=>array(38,-66,922,830),25675=>array(45,-73,967,835),25676=>array(55,-71,942,847),25677=>array(58,-71,950,832),25678=>array(55,-70,968,826),25679=>array(52,-64,976,835),25680=>array(50,-66,974,832),25681=>array(56,-68,927,827),25682=>array(43,-69,955,830),25683=>array(51,-66,965,829),25684=>array(40,-66,958,846),25685=>array(43,-68,960,829),25686=>array(43,-63,968,841),25687=>array(33,-69,978,837),25688=>array(45,-73,948,825),25689=>array(55,-71,974,827),25690=>array(49,-59,945,833),25691=>array(44,-51,945,855),25692=>array(35,-73,955,827),25693=>array(53,-70,956,838),25694=>array(56,-68,953,826),25695=>array(41,-75,942,831),25696=>array(53,-67,964,831),25697=>array(47,-70,965,830),25698=>array(53,-70,938,836),25699=>array(43,-64,953,841),25700=>array(37,-59,946,839),25701=>array(52,-68,949,835),25702=>array(47,-76,978,832),25703=>array(41,-68,953,833),25704=>array(39,-72,954,827),25705=>array(37,-63,940,838),25706=>array(43,-66,984,843),25707=>array(51,-66,958,830),25708=>array(57,-72,961,837),25709=>array(42,-67,962,851),25710=>array(54,-70,971,839),25711=>array(56,-67,952,833),25712=>array(50,-70,974,832),25713=>array(53,-68,975,822),25714=>array(51,-67,955,828),25715=>array(37,-67,951,824),25716=>array(30,-56,948,836),25717=>array(50,-70,959,828),25718=>array(38,-63,959,839),25719=>array(52,-67,970,838),25720=>array(45,-72,971,823),25721=>array(53,-65,965,835),25722=>array(53,-64,910,830),25723=>array(34,-78,966,849),25724=>array(51,-66,956,826),25725=>array(31,-54,948,839),25726=>array(40,-64,959,828),25727=>array(55,-70,964,843),25728=>array(60,-54,946,833),25729=>array(43,-68,957,847),25730=>array(42,-67,975,829),25731=>array(73,-64,955,835),25732=>array(36,-65,923,823),25733=>array(31,-68,971,829),25734=>array(73,-66,953,831),25735=>array(46,-69,971,837),25736=>array(54,-68,942,833),25737=>array(58,-68,971,844),25738=>array(42,-69,911,825),25739=>array(39,-71,905,822),25740=>array(42,-85,953,826),25741=>array(44,-67,957,828),25742=>array(55,-64,955,828),25743=>array(38,-70,962,826),25744=>array(67,-73,954,820),25745=>array(31,-77,941,822),25746=>array(41,-69,963,832),25747=>array(55,-69,953,827),25748=>array(42,-66,955,826),25749=>array(37,-67,942,834),25750=>array(39,-77,982,831),25751=>array(40,-81,962,823),25752=>array(41,-52,962,857),25753=>array(45,-62,963,853),25754=>array(37,-60,970,849),25755=>array(41,-74,954,832),25756=>array(43,-68,983,832),25757=>array(45,-56,943,846),25758=>array(33,-71,948,829),25759=>array(51,-67,976,838),25760=>array(35,-73,972,823),25761=>array(22,-64,978,845),25762=>array(50,-63,949,828),25763=>array(41,-68,956,828),25764=>array(39,-68,961,835),25765=>array(40,-71,959,843),25766=>array(55,-70,980,833),25767=>array(34,-64,973,844),25768=>array(55,-71,969,849),25769=>array(37,-61,968,843),25770=>array(39,-64,973,855),25771=>array(46,-63,954,837),25772=>array(41,-63,958,837),25773=>array(29,-69,971,829),25774=>array(32,-65,948,832),25775=>array(55,-64,965,847),25776=>array(36,-69,955,823),25777=>array(40,-71,949,840),25778=>array(37,-69,975,835),25779=>array(40,-70,973,839),25780=>array(12,-73,975,838),25781=>array(25,-61,936,828),25782=>array(33,-68,945,831),25783=>array(40,-65,943,827),25784=>array(41,-66,915,827),25785=>array(35,-64,965,828),25786=>array(33,-62,912,846),25787=>array(40,-78,955,833),25788=>array(47,-68,960,833),25789=>array(36,-79,974,842),25790=>array(38,-68,966,829),25791=>array(34,-69,961,861),25792=>array(45,-66,964,829),25793=>array(32,-70,958,835),25794=>array(54,-69,924,823),25795=>array(27,-76,966,832),25796=>array(43,-67,954,835),25797=>array(45,-67,957,837),25798=>array(31,-64,963,833),25799=>array(49,-67,935,821),25800=>array(39,-66,972,833),25801=>array(41,-69,924,829),25802=>array(73,-65,956,835),25803=>array(52,-66,918,832),25804=>array(75,-38,967,854),25805=>array(39,-62,954,823),25806=>array(47,-73,951,845),25807=>array(33,-78,971,830),25808=>array(42,-68,958,828),25809=>array(43,-78,970,843),25810=>array(29,-68,963,842),25811=>array(39,-53,949,839),25812=>array(48,-74,950,846),25813=>array(55,-65,960,834),25814=>array(48,-71,939,829),25815=>array(49,-64,965,849),25816=>array(54,-64,949,832),25817=>array(34,-79,975,840),25818=>array(41,-70,964,831),25819=>array(40,-73,985,819),25820=>array(47,-70,984,848),25821=>array(45,-66,979,826),25822=>array(30,-64,958,832),25823=>array(53,-70,958,841),25824=>array(53,-77,953,830),25825=>array(44,-63,961,830),25826=>array(36,-65,952,830),25827=>array(57,-65,954,827),25828=>array(61,-67,962,856),25829=>array(84,-51,955,840),25830=>array(46,-70,966,826),25831=>array(55,-59,965,832),25832=>array(42,-74,967,831),25833=>array(48,-68,953,827),25834=>array(47,-69,954,837),25835=>array(39,-76,969,824),25836=>array(42,-63,956,832),25837=>array(45,-49,966,844),25838=>array(44,-58,958,843),25839=>array(34,-71,960,842),25840=>array(49,-67,952,844),25841=>array(58,-71,913,827),25842=>array(36,-75,949,832),25843=>array(33,-67,939,835),25844=>array(43,-68,960,841),25845=>array(51,-62,962,840),25846=>array(42,-64,955,841),25847=>array(41,-70,972,840),25848=>array(41,-50,970,861),25849=>array(40,-68,977,837),25850=>array(43,-69,952,818),25851=>array(31,-67,963,837),25852=>array(51,-71,961,827),25853=>array(54,-70,952,831),25854=>array(41,-64,963,829),25855=>array(63,-64,986,843),25856=>array(49,-65,960,832),25857=>array(42,-78,975,844),25858=>array(42,-77,948,823),25859=>array(42,-73,973,825),25860=>array(44,-67,965,836),25861=>array(46,-77,960,828),25862=>array(40,-70,954,835),25863=>array(39,-65,960,843),25864=>array(31,-83,974,839),25865=>array(43,-64,967,833),25866=>array(35,-72,964,827),25867=>array(27,-72,970,844),25868=>array(61,-70,923,826),25869=>array(36,-73,976,842),25870=>array(39,-69,954,827),25871=>array(40,-62,954,842),25872=>array(46,-67,982,842),25873=>array(41,-71,986,835),25874=>array(23,-71,933,827),25875=>array(27,-65,980,845),25876=>array(56,-76,912,822),25877=>array(29,-66,972,841),25878=>array(50,-71,953,835),25879=>array(46,-68,966,846),25880=>array(39,-69,970,829),25881=>array(44,-74,964,838),25882=>array(35,-68,959,828),25883=>array(38,-64,969,841),25884=>array(42,-74,944,832),25885=>array(36,-68,955,821),25886=>array(52,-64,962,831),25887=>array(32,-70,974,853),25888=>array(48,-72,954,841),25889=>array(49,-64,962,840),25890=>array(41,-65,968,831),25891=>array(48,-61,957,840),25892=>array(55,-72,951,832),25893=>array(33,-63,970,844),25894=>array(63,-66,961,824),25895=>array(29,-72,959,835),25896=>array(35,-73,973,844),25897=>array(38,-57,956,840),25898=>array(41,-62,959,839),25899=>array(36,-64,970,826),25900=>array(39,-72,956,832),25901=>array(26,-71,967,840),25902=>array(48,-65,975,839),25903=>array(78,-65,945,830),25904=>array(41,-55,968,846),25905=>array(58,-80,972,834),25906=>array(63,-73,973,830),25907=>array(41,-71,981,824),25908=>array(34,-76,942,825),25909=>array(68,-72,932,818),25910=>array(67,-70,951,830),25911=>array(71,-67,979,840),25912=>array(48,-67,949,830),25913=>array(103,-65,946,825),25914=>array(86,-75,969,821),25915=>array(64,-68,957,838),25916=>array(62,-67,967,841),25917=>array(46,-71,963,832),25918=>array(46,-65,956,842),25919=>array(38,-74,956,838),25920=>array(114,-77,970,838),25921=>array(129,-82,955,828),25922=>array(24,-61,976,834),25923=>array(87,-80,962,823),25924=>array(29,-71,970,833),25925=>array(54,-67,958,833),25926=>array(52,-68,969,835),25927=>array(28,-65,972,834),25928=>array(60,-64,956,834),25929=>array(42,-67,975,838),25930=>array(46,-62,970,835),25931=>array(37,-68,959,840),25932=>array(27,-64,947,833),25933=>array(47,-70,960,843),25934=>array(38,-69,971,837),25935=>array(57,-63,971,839),25936=>array(33,-67,971,825),25937=>array(39,-68,955,843),25938=>array(32,-67,963,834),25939=>array(38,-69,969,829),25940=>array(54,-54,973,855),25941=>array(43,-70,970,836),25942=>array(48,-74,946,830),25943=>array(63,-74,963,836),25944=>array(48,-61,967,843),25945=>array(30,-60,950,831),25946=>array(30,-70,972,839),25947=>array(23,-60,932,847),25948=>array(37,-74,971,835),25949=>array(99,-69,967,835),25950=>array(81,-70,966,836),25951=>array(46,-73,957,836),25952=>array(44,-84,965,820),25953=>array(43,-77,971,823),25954=>array(39,-61,960,826),25955=>array(65,-72,956,834),25956=>array(42,-74,968,823),25957=>array(44,-80,966,829),25958=>array(42,-67,961,839),25959=>array(45,-59,962,839),25960=>array(66,-71,969,840),25961=>array(52,-69,969,842),25962=>array(44,-76,965,821),25963=>array(35,-61,944,823),25964=>array(44,-70,969,836),25965=>array(42,-71,969,836),25966=>array(36,-74,970,837),25967=>array(99,-75,967,823),25968=>array(42,-69,959,821),25969=>array(45,-63,967,835),25970=>array(55,-71,957,838),25971=>array(47,-75,969,833),25972=>array(51,-18,946,840),25973=>array(60,-69,967,834),25974=>array(104,-76,985,828),25975=>array(41,-65,969,839),25976=>array(60,-70,959,833),25977=>array(58,-76,984,831),25978=>array(60,-71,959,832),25979=>array(36,-65,970,846),25980=>array(60,-73,973,827),25981=>array(36,-68,974,843),25982=>array(64,-77,978,849),25983=>array(44,-77,978,827),25984=>array(35,-72,970,824),25985=>array(63,-69,977,842),25986=>array(45,-66,970,859),25987=>array(51,-68,955,830),25988=>array(38,-65,972,832),25989=>array(52,-72,967,838),25990=>array(52,-69,969,839),25991=>array(62,-69,947,822),25992=>array(49,-73,951,815),25993=>array(49,-63,951,828),25994=>array(36,-72,959,843),25995=>array(47,-68,921,840),25996=>array(36,-63,963,833),25997=>array(26,-65,974,840),25998=>array(29,-64,974,828),25999=>array(47,-66,971,846),26000=>array(36,-63,964,831),26001=>array(35,-68,956,829),26002=>array(44,-71,936,829),26003=>array(43,-70,888,807),26004=>array(60,-75,983,833),26005=>array(53,-65,927,826),26006=>array(49,-42,951,835),26007=>array(62,-64,946,832),26008=>array(54,-65,950,844),26009=>array(38,-68,956,836),26010=>array(67,-65,948,829),26011=>array(27,-72,946,826),26012=>array(32,-71,945,838),26013=>array(67,-65,946,789),26014=>array(46,-73,954,827),26015=>array(42,-79,944,820),26016=>array(51,-70,954,836),26017=>array(46,-77,960,854),26018=>array(60,-76,954,823),26019=>array(33,-76,948,818),26020=>array(75,-71,902,832),26021=>array(81,-69,895,834),26022=>array(48,-69,959,824),26023=>array(77,-64,941,836),26024=>array(50,-69,941,828),26025=>array(66,-75,925,828),26026=>array(47,-70,957,816),26027=>array(37,-69,951,834),26028=>array(53,-73,945,831),26029=>array(99,-66,946,824),26030=>array(63,-70,951,824),26031=>array(49,-75,944,829),26032=>array(54,-62,944,830),26033=>array(45,-67,934,837),26034=>array(65,-65,959,828),26035=>array(47,-73,952,836),26036=>array(36,-79,957,831),26037=>array(65,-65,959,833),26038=>array(43,-68,927,821),26039=>array(106,-66,950,845),26040=>array(44,-62,960,829),26041=>array(52,-67,936,822),26042=>array(38,-63,976,842),26043=>array(42,-61,969,837),26044=>array(41,-62,966,826),26045=>array(42,-49,952,831),26046=>array(51,-73,956,844),26047=>array(54,-50,952,858),26048=>array(48,-69,962,841),26049=>array(70,-65,906,829),26050=>array(36,-68,951,850),26051=>array(34,-70,951,833),26052=>array(49,-67,967,844),26053=>array(33,-67,969,839),26054=>array(48,-61,965,854),26055=>array(64,-73,959,848),26056=>array(34,-73,961,848),26057=>array(42,-69,947,832),26058=>array(35,-60,963,839),26059=>array(39,-66,966,841),26060=>array(39,-68,954,841),26061=>array(44,-73,974,838),26062=>array(50,-74,960,843),26063=>array(35,-67,966,843),26064=>array(42,-59,968,852),26065=>array(42,-61,962,852),26066=>array(18,-65,958,846),26067=>array(44,-67,955,836),26068=>array(30,-86,964,845),26069=>array(61,-55,976,843),26070=>array(39,-68,945,837),26071=>array(37,-70,955,837),26072=>array(37,-65,957,839),26073=>array(45,-55,959,839),26074=>array(44,-68,958,839),26075=>array(37,-67,971,839),26076=>array(40,-61,955,850),26077=>array(37,-64,980,834),26078=>array(31,-67,985,828),26079=>array(33,-71,967,847),26080=>array(65,-59,944,779),26081=>array(93,-50,947,800),26082=>array(47,-55,961,784),26083=>array(110,-64,946,846),26084=>array(86,-65,972,789),26085=>array(237,-32,788,747),26086=>array(84,-13,936,769),26087=>array(140,-52,860,778),26088=>array(195,-61,883,835),26089=>array(86,-68,934,780),26090=>array(89,-53,949,843),26091=>array(89,-73,905,763),26092=>array(39,-61,899,837),26093=>array(52,-62,957,839),26094=>array(54,-65,974,844),26095=>array(54,-66,972,776),26096=>array(92,-65,927,770),26097=>array(85,-61,939,785),26098=>array(46,-66,969,789),26099=>array(111,-64,905,841),26100=>array(101,-54,951,789),26101=>array(121,-66,879,786),26102=>array(103,-62,927,829),26103=>array(87,-65,912,832),26104=>array(95,-68,914,775),26105=>array(63,-64,937,833),26106=>array(91,-7,934,781),26107=>array(35,-58,968,796),26108=>array(95,-74,943,815),26109=>array(92,-47,967,823),26110=>array(73,-64,956,836),26111=>array(111,-67,948,837),26112=>array(105,-54,903,830),26113=>array(104,-62,945,831),26114=>array(69,-61,899,791),26115=>array(48,-72,950,789),26116=>array(102,-69,956,791),26117=>array(109,-71,959,787),26118=>array(82,-50,958,796),26119=>array(51,-62,954,789),26120=>array(105,-66,934,833),26121=>array(99,-56,947,825),26122=>array(68,-68,952,786),26123=>array(49,-68,956,831),26124=>array(158,-64,856,788),26125=>array(116,-53,884,788),26126=>array(109,-65,869,787),26127=>array(86,-69,937,843),26128=>array(109,-70,960,784),26129=>array(103,-66,956,831),26130=>array(103,-63,911,839),26131=>array(75,-67,866,782),26132=>array(79,-62,930,828),26133=>array(101,-68,936,838),26134=>array(101,-46,965,807),26135=>array(77,-68,943,795),26136=>array(64,-63,933,810),26137=>array(66,-74,918,779),26138=>array(66,-53,957,835),26139=>array(97,-14,952,788),26140=>array(49,-60,936,798),26141=>array(67,-68,973,845),26142=>array(57,-62,942,786),26143=>array(96,-18,935,780),26144=>array(88,-67,953,832),26145=>array(118,-57,955,822),26146=>array(123,-69,901,824),26147=>array(100,-72,974,849),26148=>array(102,-65,948,839),26149=>array(45,-67,962,837),26150=>array(50,-68,959,774),26151=>array(100,-65,966,832),26152=>array(116,-62,955,845),26153=>array(73,-67,961,830),26154=>array(51,-65,932,805),26155=>array(115,-56,919,830),26156=>array(159,-68,937,812),26157=>array(120,-68,901,785),26158=>array(50,-72,916,778),26159=>array(68,-66,960,790),26160=>array(64,-24,942,802),26161=>array(70,-18,944,788),26162=>array(106,-66,918,830),26163=>array(120,-76,961,824),26164=>array(84,-67,892,787),26165=>array(104,-71,939,778),26166=>array(33,-62,976,802),26167=>array(57,-14,948,788),26168=>array(110,-77,964,837),26169=>array(99,-66,965,835),26170=>array(85,-69,938,776),26171=>array(50,-61,898,791),26172=>array(41,-43,964,789),26173=>array(91,-61,926,824),26174=>array(53,-17,921,784),26175=>array(95,-56,948,819),26176=>array(113,-68,965,830),26177=>array(47,-65,960,788),26178=>array(113,-65,948,839),26179=>array(54,-51,948,800),26180=>array(108,-57,959,831),26181=>array(102,-31,946,776),26182=>array(102,-22,959,836),26183=>array(104,-72,965,837),26184=>array(89,-63,944,846),26185=>array(72,-60,944,790),26186=>array(110,-12,953,774),26187=>array(74,-65,926,799),26188=>array(107,-68,907,847),26189=>array(107,-65,895,782),26190=>array(107,-69,953,828),26191=>array(61,-73,945,789),26192=>array(107,-61,943,846),26193=>array(136,-62,877,789),26194=>array(97,-54,941,799),26195=>array(90,-67,943,822),26196=>array(100,-64,928,823),26197=>array(64,-65,916,785),26198=>array(101,-72,930,758),26199=>array(80,-71,957,848),26200=>array(101,-62,953,789),26201=>array(94,-62,958,834),26202=>array(110,-70,956,827),26203=>array(102,-58,955,797),26204=>array(55,-53,908,803),26205=>array(59,-30,948,829),26206=>array(79,-69,951,837),26207=>array(30,-67,967,793),26208=>array(90,-68,951,834),26209=>array(110,-68,959,832),26210=>array(68,-62,943,842),26211=>array(102,-67,954,843),26212=>array(82,-65,940,786),26213=>array(91,-71,962,824),26214=>array(98,-59,947,837),26215=>array(97,-60,939,831),26216=>array(30,-68,935,809),26217=>array(97,-69,965,840),26218=>array(110,-74,961,833),26219=>array(106,-71,946,825),26220=>array(102,-60,951,850),26221=>array(97,-68,907,791),26222=>array(53,-70,944,845),26223=>array(58,-61,940,796),26224=>array(102,-67,954,832),26225=>array(107,-71,949,828),26226=>array(110,-68,959,833),26227=>array(58,-71,932,826),26228=>array(75,-52,938,838),26229=>array(52,-60,964,846),26230=>array(117,-64,887,785),26231=>array(50,-68,943,782),26232=>array(41,-52,968,808),26233=>array(110,-72,919,782),26234=>array(82,-69,897,829),26235=>array(105,-40,966,828),26236=>array(104,-72,965,846),26237=>array(59,-63,981,842),26238=>array(87,-62,931,842),26239=>array(87,-62,923,791),26240=>array(107,-70,955,831),26241=>array(86,-65,970,817),26242=>array(64,-71,931,827),26243=>array(58,-70,937,808),26244=>array(90,-49,947,822),26245=>array(79,-59,960,849),26246=>array(90,-67,947,830),26247=>array(106,-71,971,790),26248=>array(57,-62,950,798),26249=>array(89,-65,936,787),26250=>array(121,-80,965,782),26251=>array(106,-55,948,849),26252=>array(86,-61,940,834),26253=>array(115,-69,925,785),26254=>array(95,-63,969,835),26255=>array(115,-65,960,835),26256=>array(91,-51,946,858),26257=>array(62,-63,955,790),26258=>array(89,-21,954,792),26259=>array(36,-69,954,830),26260=>array(110,-68,952,834),26261=>array(108,-67,966,833),26262=>array(89,-67,954,834),26263=>array(98,-64,943,840),26264=>array(82,-55,937,804),26265=>array(104,-72,956,833),26266=>array(89,-64,945,831),26267=>array(107,-25,939,843),26268=>array(60,-68,944,826),26269=>array(101,-56,936,789),26270=>array(112,-50,933,849),26271=>array(109,-24,951,832),26272=>array(74,-56,927,820),26273=>array(104,-70,960,800),26274=>array(92,-70,938,831),26275=>array(46,-63,974,851),26276=>array(92,-64,979,849),26277=>array(50,-59,950,788),26278=>array(39,-62,961,796),26279=>array(97,-72,955,821),26280=>array(59,-25,953,783),26281=>array(110,-72,990,832),26282=>array(113,-70,953,823),26283=>array(83,-68,948,833),26284=>array(65,-71,953,827),26285=>array(112,-64,952,849),26286=>array(51,-65,965,837),26287=>array(100,-75,955,827),26288=>array(100,-69,975,833),26289=>array(104,-26,962,799),26290=>array(112,-68,953,834),26291=>array(83,-62,941,826),26292=>array(66,-66,956,786),26293=>array(101,-53,968,841),26294=>array(92,-71,971,828),26295=>array(115,-68,960,836),26296=>array(89,-62,966,855),26297=>array(58,-56,933,815),26298=>array(109,-74,953,777),26299=>array(115,-68,971,781),26300=>array(68,-71,960,837),26301=>array(115,-70,960,824),26302=>array(99,-77,970,835),26303=>array(89,-69,957,833),26304=>array(101,-8,948,843),26305=>array(59,-37,947,832),26306=>array(89,-68,956,827),26307=>array(70,-64,960,829),26308=>array(94,-68,945,831),26309=>array(59,-71,943,819),26310=>array(32,-60,959,798),26311=>array(53,-74,947,817),26312=>array(96,-14,941,854),26313=>array(107,-61,964,837),26314=>array(110,-77,953,827),26315=>array(114,-70,956,777),26316=>array(55,-25,949,779),26317=>array(112,-64,952,849),26318=>array(79,-62,949,788),26319=>array(51,-67,946,788),26320=>array(86,-47,918,821),26321=>array(35,-75,968,812),26322=>array(94,-59,964,850),26323=>array(31,-75,966,834),26324=>array(57,-66,978,840),26325=>array(84,-72,927,841),26326=>array(81,-62,946,841),26327=>array(95,-67,959,825),26328=>array(101,-69,941,781),26329=>array(97,-63,955,789),26330=>array(94,-61,965,836),26331=>array(89,-70,965,835),26332=>array(85,-70,946,813),26333=>array(103,-64,980,784),26334=>array(93,-66,935,799),26335=>array(55,-67,956,816),26336=>array(93,-71,966,819),26337=>array(54,-32,952,791),26338=>array(99,-61,959,820),26339=>array(91,-72,953,823),26340=>array(91,-64,926,783),26341=>array(92,-67,954,830),26342=>array(88,-64,946,841),26343=>array(116,-68,966,817),26344=>array(90,-53,957,853),26345=>array(48,-62,937,824),26346=>array(90,-64,962,796),26347=>array(49,-71,962,838),26348=>array(92,-68,961,800),26349=>array(82,-68,944,834),26350=>array(83,-64,959,799),26351=>array(98,-67,924,806),26352=>array(166,-33,842,728),26353=>array(175,-61,841,788),26354=>array(163,-68,860,831),26355=>array(71,-56,954,839),26356=>array(48,-72,962,777),26357=>array(71,-60,946,845),26358=>array(61,-71,898,845),26359=>array(62,-67,896,792),26360=>array(84,-64,938,837),26361=>array(53,-70,947,829),26362=>array(53,-70,947,829),26363=>array(43,-68,946,791),26364=>array(57,-67,959,791),26365=>array(127,-65,876,852),26366=>array(38,-65,959,825),26367=>array(56,-68,950,834),26368=>array(53,-73,935,783),26369=>array(60,-71,960,781),26370=>array(54,-68,946,808),26371=>array(33,-74,978,848),26372=>array(98,-68,980,828),26373=>array(63,-63,920,830),26374=>array(94,-64,949,845),26375=>array(23,-74,957,847),26376=>array(86,-76,788,783),26377=>array(45,-65,936,844),26378=>array(33,-65,956,790),26379=>array(65,-77,891,782),26380=>array(23,-68,963,839),26381=>array(53,-75,950,783),26382=>array(47,-57,971,854),26383=>array(41,-56,905,840),26384=>array(34,-66,908,843),26385=>array(52,-64,964,829),26386=>array(43,-64,906,832),26387=>array(39,-71,957,823),26388=>array(60,-67,905,848),26389=>array(36,-73,961,837),26390=>array(36,-64,962,834),26391=>array(49,-74,885,832),26392=>array(33,-71,985,838),26393=>array(90,-65,915,793),26394=>array(72,-69,925,838),26395=>array(73,-36,927,822),26396=>array(36,-62,949,843),26397=>array(72,-68,908,827),26398=>array(42,-60,958,837),26399=>array(60,-70,899,829),26400=>array(33,-72,973,826),26401=>array(39,-85,966,825),26402=>array(85,-39,915,791),26403=>array(41,-72,952,828),26404=>array(65,-77,893,797),26405=>array(61,-66,941,833),26406=>array(34,-61,965,836),26407=>array(54,-73,962,834),26408=>array(77,-68,939,826),26409=>array(77,-58,889,826),26410=>array(65,-67,948,838),26411=>array(55,-67,955,839),26412=>array(41,-67,955,827),26413=>array(46,-62,954,829),26414=>array(75,-65,940,829),26415=>array(34,-69,947,815),26416=>array(51,-15,960,813),26417=>array(65,-70,950,828),26418=>array(57,-63,943,830),26419=>array(56,-71,969,830),26420=>array(49,-55,961,840),26421=>array(54,-68,955,777),26422=>array(53,-68,955,787),26423=>array(54,-58,901,830),26424=>array(66,-67,912,826),26425=>array(55,-63,955,830),26426=>array(54,-73,975,827),26427=>array(58,-66,901,829),26428=>array(54,-56,958,837),26429=>array(45,-62,937,832),26430=>array(48,-62,940,830),26431=>array(37,-54,956,839),26432=>array(53,-66,926,811),26433=>array(53,-64,958,828),26434=>array(42,-64,939,824),26435=>array(39,-65,954,836),26436=>array(42,-63,947,833),26437=>array(51,-61,953,835),26438=>array(39,-58,963,830),26439=>array(33,-62,956,831),26440=>array(37,-68,971,823),26441=>array(43,-69,950,831),26442=>array(43,-67,892,827),26443=>array(61,-63,959,833),26444=>array(33,-67,961,830),26445=>array(55,-68,955,829),26446=>array(51,-70,960,831),26447=>array(64,-62,950,827),26448=>array(40,-75,951,824),26449=>array(44,-71,951,829),26450=>array(44,-71,914,823),26451=>array(32,-69,917,834),26452=>array(47,-71,930,823),26453=>array(34,-64,976,833),26454=>array(43,-72,975,827),26455=>array(40,-67,954,837),26456=>array(47,-76,924,785),26457=>array(39,-70,961,830),26458=>array(50,-59,956,838),26459=>array(49,-70,902,828),26460=>array(49,-70,948,828),26461=>array(42,-64,959,830),26462=>array(39,-58,940,830),26463=>array(71,-67,950,833),26464=>array(39,-58,942,830),26465=>array(40,-65,956,827),26466=>array(44,-23,956,822),26467=>array(51,-58,912,830),26468=>array(51,-58,956,830),26469=>array(49,-57,951,830),26470=>array(47,-66,948,835),26471=>array(46,-59,931,833),26472=>array(22,-68,902,826),26473=>array(21,-62,890,825),26474=>array(51,-58,950,831),26475=>array(47,-62,954,835),26476=>array(41,-61,969,836),26477=>array(40,-62,962,832),26478=>array(47,-62,950,839),26479=>array(41,-63,959,835),26480=>array(46,-73,943,825),26481=>array(50,-71,960,831),26482=>array(31,-64,978,787),26483=>array(44,-65,956,832),26484=>array(54,-69,966,838),26485=>array(40,-68,948,837),26486=>array(44,-58,963,837),26487=>array(44,-68,967,825),26488=>array(49,-77,964,824),26489=>array(60,-69,962,829),26490=>array(39,-61,956,832),26491=>array(39,-61,959,832),26492=>array(51,-64,943,830),26493=>array(55,-70,950,826),26494=>array(39,-62,959,833),26495=>array(31,-73,966,823),26496=>array(42,-55,973,803),26497=>array(45,-73,972,829),26498=>array(71,-71,886,819),26499=>array(50,-75,903,822),26500=>array(45,-61,919,842),26501=>array(51,-68,953,830),26502=>array(39,-61,954,833),26503=>array(37,-70,968,826),26504=>array(58,-55,973,809),26505=>array(51,-58,961,830),26506=>array(46,-61,905,842),26507=>array(51,-58,941,830),26508=>array(42,-64,955,824),26509=>array(42,-59,963,835),26510=>array(36,-69,975,828),26511=>array(47,-65,970,835),26512=>array(41,-68,942,831),26513=>array(40,-61,964,833),26514=>array(47,-62,967,833),26515=>array(32,-59,956,842),26516=>array(55,-73,970,833),26517=>array(48,-62,959,836),26518=>array(48,-70,957,833),26519=>array(30,-69,954,829),26520=>array(42,-64,908,835),26521=>array(38,-58,968,839),26522=>array(57,-68,965,843),26523=>array(33,-66,968,823),26524=>array(48,-67,960,788),26525=>array(48,-64,965,834),26526=>array(24,-69,968,822),26527=>array(54,-80,954,830),26528=>array(39,-64,954,837),26529=>array(51,-65,948,830),26530=>array(31,-68,931,822),26531=>array(32,-76,956,824),26532=>array(40,-68,954,830),26533=>array(20,-67,903,820),26534=>array(51,-66,937,830),26535=>array(19,-73,928,823),26536=>array(23,-72,950,820),26537=>array(48,-74,950,820),26538=>array(41,-63,960,831),26539=>array(15,-58,937,830),26540=>array(42,-66,955,832),26541=>array(39,-51,944,832),26542=>array(55,-70,954,829),26543=>array(52,-62,956,836),26544=>array(42,-63,954,833),26545=>array(43,-62,964,852),26546=>array(42,-55,969,856),26547=>array(38,-68,965,829),26548=>array(51,-62,917,830),26549=>array(41,-67,950,827),26550=>array(47,-66,964,827),26551=>array(51,-58,934,832),26552=>array(51,-58,925,841),26553=>array(51,-58,951,830),26554=>array(42,-69,953,828),26555=>array(37,-62,964,829),26556=>array(40,-48,965,823),26557=>array(26,-54,950,827),26558=>array(48,-72,950,829),26559=>array(7,-66,968,829),26560=>array(45,-73,957,830),26561=>array(32,-62,958,835),26562=>array(51,-77,963,816),26563=>array(39,-80,957,827),26564=>array(46,-58,943,828),26565=>array(39,-55,963,840),26566=>array(51,-58,964,830),26567=>array(51,-71,976,822),26568=>array(51,-72,958,824),26569=>array(42,-69,965,825),26570=>array(34,-66,984,833),26571=>array(50,-70,968,822),26572=>array(49,-66,895,827),26573=>array(47,-75,961,823),26574=>array(51,-63,957,830),26575=>array(45,-62,896,846),26576=>array(44,-69,956,835),26577=>array(40,-65,953,827),26578=>array(45,-61,966,830),26579=>array(51,-66,956,835),26580=>array(48,-67,947,788),26581=>array(58,-67,917,825),26582=>array(32,-66,895,829),26583=>array(33,-68,948,833),26584=>array(58,-67,942,825),26585=>array(40,-64,898,833),26586=>array(37,-66,899,835),26587=>array(39,-69,896,825),26588=>array(40,-60,946,830),26589=>array(51,-66,945,836),26590=>array(51,-66,950,839),26591=>array(37,-65,967,832),26592=>array(26,-62,922,836),26593=>array(26,-69,981,827),26594=>array(51,-58,945,830),26595=>array(36,-81,957,822),26596=>array(51,-58,961,830),26597=>array(50,-12,951,826),26598=>array(58,-68,958,826),26599=>array(51,-59,952,830),26600=>array(48,-66,959,850),26601=>array(35,-65,952,824),26602=>array(50,-79,918,820),26603=>array(44,-71,914,838),26604=>array(55,-61,932,838),26605=>array(51,-77,962,826),26606=>array(51,-65,933,832),26607=>array(51,-61,953,830),26608=>array(64,-63,945,839),26609=>array(41,-67,957,839),26610=>array(43,-63,957,830),26611=>array(34,-61,921,837),26612=>array(44,-68,959,825),26613=>array(35,-60,956,832),26614=>array(50,-66,895,827),26615=>array(33,-55,964,836),26616=>array(48,-66,956,827),26617=>array(45,-66,934,832),26618=>array(50,-68,890,827),26619=>array(50,-12,952,826),26620=>array(36,-73,949,828),26621=>array(27,-75,947,817),26622=>array(27,-75,924,817),26623=>array(40,-64,949,827),26624=>array(43,-67,955,834),26625=>array(46,-61,905,837),26626=>array(46,-64,954,831),26627=>array(43,-76,945,834),26628=>array(60,-65,957,820),26629=>array(25,-65,965,829),26630=>array(38,-72,958,834),26631=>array(21,-59,940,833),26632=>array(17,-71,933,825),26633=>array(20,-71,917,817),26634=>array(17,-69,930,820),26635=>array(25,-60,942,833),26636=>array(21,-72,918,820),26637=>array(21,-68,951,827),26638=>array(21,-74,950,816),26639=>array(32,-57,925,833),26640=>array(32,-63,964,844),26641=>array(20,-71,929,818),26642=>array(58,-65,927,845),26643=>array(37,-65,948,826),26644=>array(56,-64,962,836),26645=>array(63,-68,953,823),26646=>array(54,-62,957,833),26647=>array(60,-65,957,788),26648=>array(63,-71,933,835),26649=>array(45,-66,961,842),26650=>array(38,-69,969,833),26651=>array(34,-65,966,835),26652=>array(39,-67,964,830),26653=>array(34,-64,943,832),26654=>array(56,-64,962,811),26655=>array(38,-63,948,845),26656=>array(45,-67,961,844),26657=>array(37,-74,963,822),26658=>array(39,-64,957,831),26659=>array(39,-64,965,843),26660=>array(32,-65,981,837),26661=>array(52,-65,954,841),26662=>array(39,-70,908,832),26663=>array(33,-64,961,836),26664=>array(32,-70,971,833),26665=>array(51,-58,909,830),26666=>array(28,-63,961,836),26667=>array(51,-68,930,830),26668=>array(53,-67,955,826),26669=>array(38,-68,951,828),26670=>array(53,-70,954,826),26671=>array(38,-68,948,826),26672=>array(29,-64,956,832),26673=>array(33,-77,955,825),26674=>array(36,-65,952,833),26675=>array(45,-68,954,826),26676=>array(38,-63,962,833),26677=>array(36,-67,908,830),26678=>array(17,-62,895,831),26679=>array(17,-61,924,831),26680=>array(33,-67,949,825),26681=>array(51,-71,957,820),26682=>array(44,-68,942,829),26683=>array(33,-58,971,839),26684=>array(44,-65,968,835),26685=>array(50,-59,957,839),26686=>array(39,-77,951,834),26687=>array(44,-66,991,842),26688=>array(54,-67,960,841),26689=>array(39,-68,956,835),26690=>array(39,-66,944,827),26691=>array(39,-72,945,828),26692=>array(33,-68,966,832),26693=>array(40,-65,967,844),26694=>array(30,-69,941,826),26695=>array(63,-65,963,844),26696=>array(63,-65,963,838),26697=>array(39,-60,956,845),26698=>array(50,-48,948,827),26699=>array(33,-71,971,832),26700=>array(52,-67,957,831),26701=>array(51,-67,932,830),26702=>array(51,-58,950,830),26703=>array(31,-64,957,832),26704=>array(46,-65,895,830),26705=>array(53,-65,958,788),26706=>array(52,-63,957,836),26707=>array(39,-65,954,827),26708=>array(38,-62,939,837),26709=>array(54,-74,898,821),26710=>array(54,-74,972,857),26711=>array(54,-74,964,821),26712=>array(50,-74,898,837),26713=>array(51,-65,946,833),26714=>array(45,-75,945,839),26715=>array(36,-66,946,836),26716=>array(54,-74,959,821),26717=>array(37,-66,949,835),26718=>array(36,-74,957,821),26719=>array(22,-71,933,826),26720=>array(18,-67,922,824),26721=>array(17,-74,938,821),26722=>array(20,-81,921,816),26723=>array(51,-60,935,830),26724=>array(26,-63,932,826),26725=>array(36,-53,966,844),26726=>array(25,-75,929,817),26727=>array(25,-78,959,833),26728=>array(27,-61,949,840),26729=>array(24,-69,923,833),26730=>array(44,-68,938,827),26731=>array(37,-69,972,829),26732=>array(48,-61,970,836),26733=>array(26,-72,966,832),26734=>array(41,-70,954,829),26735=>array(44,-65,951,827),26736=>array(43,-65,961,829),26737=>array(41,-68,953,826),26738=>array(33,-64,953,837),26739=>array(19,-73,979,834),26740=>array(51,-76,955,830),26741=>array(49,-74,953,826),26742=>array(42,-71,902,827),26743=>array(51,-63,924,844),26744=>array(44,-71,953,837),26745=>array(48,-66,977,848),26746=>array(35,-67,965,833),26747=>array(46,-73,976,821),26748=>array(36,-65,965,826),26749=>array(56,-23,960,824),26750=>array(51,-72,956,830),26751=>array(51,-62,933,830),26752=>array(46,-67,972,832),26753=>array(53,-68,956,808),26754=>array(50,-65,961,833),26755=>array(41,-66,960,830),26756=>array(32,-62,945,832),26757=>array(46,-71,953,843),26758=>array(38,-68,951,836),26759=>array(49,-65,961,829),26760=>array(31,-62,920,843),26761=>array(41,-69,953,826),26762=>array(39,-62,977,832),26763=>array(41,-71,897,824),26764=>array(48,-69,977,826),26765=>array(33,-67,935,842),26766=>array(39,-67,945,848),26767=>array(51,-67,934,833),26768=>array(32,-64,954,831),26769=>array(34,-76,970,821),26770=>array(42,-69,964,828),26771=>array(38,-70,956,837),26772=>array(28,-67,965,840),26773=>array(21,-67,970,833),26774=>array(37,-82,956,824),26775=>array(35,-68,956,829),26776=>array(36,-62,958,833),26777=>array(50,-70,911,827),26778=>array(50,-68,963,848),26779=>array(34,-68,962,824),26780=>array(30,-69,979,828),26781=>array(42,-71,981,839),26782=>array(45,-65,966,827),26783=>array(63,-68,932,847),26784=>array(51,-64,913,830),26785=>array(40,-72,962,838),26786=>array(44,-63,915,835),26787=>array(41,-70,967,825),26788=>array(47,-68,975,827),26789=>array(45,-71,957,838),26790=>array(49,-59,947,828),26791=>array(47,-62,948,835),26792=>array(41,-68,950,823),26793=>array(44,-64,952,828),26794=>array(43,-67,951,823),26795=>array(47,-69,968,830),26796=>array(42,-68,953,825),26797=>array(51,-73,951,835),26798=>array(42,-66,911,830),26799=>array(44,-70,927,839),26800=>array(40,-67,961,832),26801=>array(36,-54,913,835),26802=>array(44,-61,961,831),26803=>array(51,-70,957,830),26804=>array(30,-76,974,827),26805=>array(41,-79,943,824),26806=>array(31,-64,971,832),26807=>array(29,-62,971,839),26808=>array(36,-65,918,835),26809=>array(51,-58,954,830),26810=>array(46,-58,943,833),26811=>array(33,-65,950,836),26812=>array(33,-64,952,830),26813=>array(36,-54,972,835),26814=>array(27,-60,959,835),26815=>array(54,-55,971,835),26816=>array(24,-60,934,832),26817=>array(36,-64,968,844),26818=>array(23,-70,947,819),26819=>array(50,-67,967,813),26820=>array(39,-68,969,842),26821=>array(24,-72,970,824),26822=>array(30,-70,953,839),26823=>array(48,-68,959,824),26824=>array(43,-68,952,832),26825=>array(58,-71,922,838),26826=>array(72,-71,944,835),26827=>array(29,-70,947,827),26828=>array(41,-70,977,826),26829=>array(51,-58,946,830),26830=>array(51,-71,972,828),26831=>array(33,-71,973,825),26832=>array(42,-59,964,843),26833=>array(48,-73,954,824),26834=>array(27,-68,962,838),26835=>array(42,-72,950,841),26836=>array(39,-70,961,831),26837=>array(39,-70,954,823),26838=>array(37,-66,984,832),26839=>array(48,-65,966,834),26840=>array(39,-65,968,830),26841=>array(21,-66,979,844),26842=>array(57,-72,912,822),26843=>array(36,-75,932,845),26844=>array(41,-71,973,833),26845=>array(42,-73,903,826),26846=>array(42,-72,898,826),26847=>array(50,-64,973,835),26848=>array(54,-67,967,836),26849=>array(40,-72,916,824),26850=>array(37,-68,898,824),26851=>array(39,-70,965,832),26852=>array(51,-72,960,833),26853=>array(39,-69,967,826),26854=>array(43,-67,951,826),26855=>array(39,-70,948,840),26856=>array(44,-53,975,848),26857=>array(36,-75,897,825),26858=>array(36,-59,971,845),26859=>array(32,-58,964,841),26860=>array(30,-64,973,843),26861=>array(32,-68,968,839),26862=>array(30,-69,970,833),26863=>array(52,-70,963,834),26864=>array(38,-64,957,830),26865=>array(39,-67,972,832),26866=>array(22,-68,939,836),26867=>array(27,-71,975,827),26868=>array(40,-74,970,827),26869=>array(35,-70,968,822),26870=>array(33,-67,969,831),26871=>array(36,-68,970,824),26872=>array(42,-70,961,783),26873=>array(39,-70,956,835),26874=>array(42,-64,921,829),26875=>array(45,-62,983,830),26876=>array(32,-61,967,831),26877=>array(46,-70,963,826),26878=>array(44,-56,954,829),26879=>array(26,-77,951,835),26880=>array(34,-64,962,834),26881=>array(31,-62,952,833),26882=>array(31,-65,972,829),26883=>array(31,-62,957,837),26884=>array(39,-73,954,832),26885=>array(21,-75,927,817),26886=>array(51,-71,913,824),26887=>array(42,-78,960,827),26888=>array(36,-70,902,844),26889=>array(39,-65,964,841),26890=>array(48,-71,955,838),26891=>array(35,-67,967,835),26892=>array(51,-58,954,830),26893=>array(29,-73,954,835),26894=>array(37,-71,952,836),26895=>array(51,-58,964,830),26896=>array(35,-68,951,833),26897=>array(48,-79,954,835),26898=>array(36,-64,966,829),26899=>array(37,-67,980,830),26900=>array(48,-71,930,832),26901=>array(39,-69,967,826),26902=>array(29,-67,946,840),26903=>array(41,-62,976,843),26904=>array(29,-37,983,831),26905=>array(41,-68,900,832),26906=>array(31,-65,918,832),26907=>array(41,-62,958,834),26908=>array(33,-62,959,838),26909=>array(38,-71,986,826),26910=>array(38,-71,986,830),26911=>array(18,-76,954,815),26912=>array(32,-71,944,827),26913=>array(21,-70,918,833),26914=>array(18,-76,886,815),26915=>array(33,-72,955,833),26916=>array(34,-63,920,823),26917=>array(44,-62,905,830),26918=>array(27,-63,950,843),26919=>array(18,-76,977,828),26920=>array(27,-70,951,829),26921=>array(18,-76,956,856),26922=>array(42,-67,954,825),26923=>array(18,-76,937,837),26924=>array(33,-76,953,848),26925=>array(10,-63,922,830),26926=>array(18,-76,942,835),26927=>array(32,-64,950,837),26928=>array(28,-65,941,826),26929=>array(18,-76,970,843),26930=>array(36,-70,955,835),26931=>array(33,-55,973,838),26932=>array(31,-71,975,837),26933=>array(26,-73,965,826),26934=>array(39,-70,969,825),26935=>array(38,-69,962,828),26936=>array(19,-55,961,852),26937=>array(39,-70,940,827),26938=>array(18,-76,981,825),26939=>array(39,-67,950,826),26940=>array(26,-70,951,830),26941=>array(36,-67,970,831),26942=>array(18,-76,951,833),26943=>array(30,-64,978,835),26944=>array(37,-68,910,824),26945=>array(39,-71,971,827),26946=>array(30,-63,962,831),26947=>array(30,-61,943,833),26948=>array(33,-70,928,824),26949=>array(30,-73,948,823),26950=>array(30,-70,952,823),26951=>array(18,-76,919,815),26952=>array(44,-72,965,824),26953=>array(42,-69,954,826),26954=>array(47,-72,944,817),26955=>array(38,-69,922,826),26956=>array(41,-72,955,836),26957=>array(35,-70,966,813),26958=>array(30,-71,951,823),26959=>array(38,-68,980,829),26960=>array(18,-76,969,815),26961=>array(35,-73,972,832),26962=>array(39,-64,967,830),26963=>array(47,-64,971,836),26964=>array(39,-70,954,828),26965=>array(28,-76,927,845),26966=>array(21,-63,914,828),26967=>array(27,-59,970,840),26968=>array(36,-69,968,830),26969=>array(33,-70,961,830),26970=>array(48,-69,954,827),26971=>array(44,-60,953,834),26972=>array(39,-71,930,827),26973=>array(39,-70,971,836),26974=>array(39,-70,942,818),26975=>array(32,-71,952,836),26976=>array(33,-67,951,830),26977=>array(33,-76,950,818),26978=>array(44,-62,967,843),26979=>array(49,-67,924,829),26980=>array(26,-76,968,850),26981=>array(31,-60,971,848),26982=>array(41,-64,957,854),26983=>array(18,-76,988,836),26984=>array(37,-74,962,836),26985=>array(33,-69,967,826),26986=>array(39,-62,973,834),26987=>array(39,-70,957,818),26988=>array(37,-70,903,823),26989=>array(52,-69,965,829),26990=>array(39,-70,949,829),26991=>array(35,-64,961,839),26992=>array(37,-76,979,824),26993=>array(34,-71,969,831),26994=>array(24,-64,968,829),26995=>array(34,-64,975,832),26996=>array(42,-70,932,839),26997=>array(39,-68,956,824),26998=>array(44,-68,968,829),26999=>array(42,-70,956,827),27000=>array(34,-66,986,827),27001=>array(39,-70,957,818),27002=>array(36,-70,961,825),27003=>array(39,-65,958,834),27004=>array(18,-52,932,838),27005=>array(50,-64,950,847),27006=>array(39,-75,966,841),27007=>array(27,-67,972,832),27008=>array(37,-68,914,825),27009=>array(39,-70,940,835),27010=>array(30,-70,966,824),27011=>array(31,-71,960,823),27012=>array(21,-64,934,830),27013=>array(44,-76,967,820),27014=>array(30,-68,971,849),27015=>array(29,-76,934,822),27016=>array(16,-68,885,825),27017=>array(27,-75,961,816),27018=>array(28,-67,917,833),27019=>array(27,-67,916,829),27020=>array(28,-72,970,829),27021=>array(30,-67,912,824),27022=>array(33,-62,967,832),27023=>array(33,-64,954,859),27024=>array(28,-71,967,827),27025=>array(31,-70,960,833),27026=>array(24,-64,917,829),27027=>array(31,-68,958,833),27028=>array(46,-61,939,835),27029=>array(33,-64,969,830),27030=>array(46,-67,970,827),27031=>array(33,-70,955,826),27032=>array(29,-66,971,842),27033=>array(38,-68,966,833),27034=>array(39,-70,967,832),27035=>array(30,-68,973,839),27036=>array(54,-70,928,833),27037=>array(30,-73,967,835),27038=>array(33,-70,968,825),27039=>array(24,-64,941,845),27040=>array(39,-72,946,831),27041=>array(30,-69,951,833),27042=>array(24,-64,967,844),27043=>array(27,-69,951,837),27044=>array(28,-70,980,829),27045=>array(38,-65,960,830),27046=>array(49,-56,968,855),27047=>array(38,-74,939,817),27048=>array(47,-69,942,838),27049=>array(26,-69,975,826),27050=>array(31,-71,923,827),27051=>array(33,-68,965,844),27052=>array(40,-74,970,826),27053=>array(28,-65,965,849),27054=>array(61,-67,948,832),27055=>array(31,-60,954,833),27056=>array(34,-68,956,832),27057=>array(19,-66,972,832),27058=>array(39,-70,965,818),27059=>array(36,-65,967,840),27060=>array(53,-66,913,834),27061=>array(31,-70,956,828),27062=>array(37,-69,951,838),27063=>array(41,-67,944,841),27064=>array(18,-70,964,823),27065=>array(26,-70,965,827),27066=>array(37,-64,971,838),27067=>array(55,-62,930,845),27068=>array(32,-64,960,833),27069=>array(32,-75,972,825),27070=>array(39,-70,947,818),27071=>array(39,-70,962,829),27072=>array(32,-62,968,831),27073=>array(39,-70,940,844),27074=>array(23,-70,963,823),27075=>array(36,-60,969,845),27076=>array(39,-70,915,822),27077=>array(43,-69,927,823),27078=>array(42,-69,945,827),27079=>array(33,-78,961,833),27080=>array(24,-64,959,829),27081=>array(26,-73,973,836),27082=>array(34,-67,970,845),27083=>array(40,-68,954,828),27084=>array(28,-72,959,843),27085=>array(31,-70,960,851),27086=>array(39,-70,951,847),27087=>array(25,-67,952,840),27088=>array(39,-70,948,844),27089=>array(30,-68,976,787),27090=>array(40,-68,950,843),27091=>array(39,-70,969,818),27092=>array(33,-67,987,849),27093=>array(35,-70,968,835),27094=>array(43,-77,968,844),27095=>array(49,-61,926,834),27096=>array(35,-62,969,843),27097=>array(34,-69,950,836),27098=>array(33,-70,923,818),27099=>array(13,-57,922,845),27100=>array(19,-76,953,843),27101=>array(39,-70,942,844),27102=>array(13,-57,958,845),27103=>array(21,-64,917,842),27104=>array(21,-65,911,825),27105=>array(13,-67,964,845),27106=>array(20,-73,916,823),27107=>array(24,-74,951,845),27108=>array(32,-71,976,825),27109=>array(37,-64,965,830),27110=>array(38,-73,959,845),27111=>array(31,-64,973,837),27112=>array(29,-62,955,836),27113=>array(29,-60,969,811),27114=>array(26,-67,966,845),27115=>array(43,-66,956,835),27116=>array(33,-78,988,835),27117=>array(33,-70,964,839),27118=>array(34,-72,989,850),27119=>array(13,-65,953,845),27120=>array(13,-68,959,845),27121=>array(30,-67,968,826),27122=>array(27,-71,962,842),27123=>array(53,-65,963,843),27124=>array(34,-65,969,831),27125=>array(13,-57,978,845),27126=>array(22,-71,906,831),27127=>array(31,-73,987,829),27128=>array(37,-70,983,824),27129=>array(37,-64,952,845),27130=>array(28,-66,966,848),27131=>array(33,-58,971,839),27132=>array(38,-71,986,826),27133=>array(44,-71,948,827),27134=>array(30,-72,979,828),27135=>array(26,-65,953,828),27136=>array(45,-67,960,847),27137=>array(46,-64,976,835),27138=>array(60,-64,959,847),27139=>array(21,-74,939,826),27140=>array(21,-71,990,826),27141=>array(39,-64,964,829),27142=>array(30,-76,945,829),27143=>array(27,-73,989,824),27144=>array(36,-70,968,835),27145=>array(37,-80,968,826),27146=>array(28,-66,964,836),27147=>array(34,-67,961,827),27148=>array(26,-68,967,829),27149=>array(30,-84,955,830),27150=>array(26,-65,942,843),27151=>array(30,-69,954,826),27152=>array(26,-65,958,839),27153=>array(36,-61,985,836),27154=>array(26,-65,945,830),27155=>array(39,-69,949,831),27156=>array(36,-67,970,842),27157=>array(30,-77,973,832),27158=>array(46,-72,961,853),27159=>array(43,-68,956,826),27160=>array(32,-70,956,824),27161=>array(33,-70,957,818),27162=>array(33,-70,959,838),27163=>array(44,-61,971,833),27164=>array(33,-79,961,841),27165=>array(39,-71,962,828),27166=>array(46,-61,957,830),27167=>array(41,-67,944,826),27168=>array(30,-69,953,826),27169=>array(31,-69,952,828),27170=>array(33,-70,959,847),27171=>array(35,-62,978,848),27172=>array(6,-73,993,824),27173=>array(38,-73,970,825),27174=>array(40,-67,958,831),27175=>array(35,-76,976,828),27176=>array(39,-68,955,832),27177=>array(25,-72,957,832),27178=>array(26,-72,944,822),27179=>array(37,-62,964,832),27180=>array(33,-70,964,831),27181=>array(33,-60,972,831),27182=>array(33,-70,957,818),27183=>array(18,-72,929,819),27184=>array(36,-63,957,838),27185=>array(22,-74,953,832),27186=>array(34,-55,966,852),27187=>array(32,-66,955,830),27188=>array(34,-71,965,831),27189=>array(44,-67,969,836),27190=>array(27,-70,948,818),27191=>array(27,-67,950,844),27192=>array(48,-68,971,833),27193=>array(39,-71,953,825),27194=>array(38,-68,954,832),27195=>array(39,-81,958,826),27196=>array(39,-77,953,820),27197=>array(35,-65,957,851),27198=>array(30,-66,977,830),27199=>array(33,-70,954,828),27200=>array(44,-64,984,851),27201=>array(37,-69,956,828),27202=>array(35,-76,974,851),27203=>array(24,-70,959,843),27204=>array(34,-69,960,835),27205=>array(21,-70,954,845),27206=>array(46,-74,961,831),27207=>array(31,-67,963,837),27208=>array(36,-69,962,830),27209=>array(33,-80,956,825),27210=>array(34,-71,946,818),27211=>array(36,-62,962,836),27212=>array(33,-70,911,818),27213=>array(39,-68,897,822),27214=>array(38,-70,963,826),27215=>array(36,-71,951,838),27216=>array(44,-65,972,832),27217=>array(34,-68,964,826),27218=>array(36,-70,954,838),27219=>array(36,-72,948,838),27220=>array(36,-79,969,839),27221=>array(44,-58,951,836),27222=>array(43,-68,972,825),27223=>array(31,-68,948,839),27224=>array(36,-61,923,828),27225=>array(27,-69,951,830),27226=>array(39,-70,952,829),27227=>array(21,-68,972,828),27228=>array(47,-64,966,816),27229=>array(40,-68,953,826),27230=>array(35,-65,963,827),27231=>array(36,-68,963,829),27232=>array(37,-80,956,837),27233=>array(38,-70,964,837),27234=>array(37,-72,948,842),27235=>array(37,-72,957,847),27236=>array(44,-67,970,838),27237=>array(47,-69,952,821),27238=>array(32,-58,958,847),27239=>array(45,-61,917,849),27240=>array(33,-74,962,830),27241=>array(36,-67,958,826),27242=>array(38,-79,964,826),27243=>array(47,-70,956,827),27244=>array(37,-72,957,819),27245=>array(40,-72,957,824),27246=>array(53,-72,913,834),27247=>array(39,-70,944,824),27248=>array(37,-72,948,863),27249=>array(24,-69,914,829),27250=>array(37,-72,933,833),27251=>array(30,-55,967,821),27252=>array(30,-71,956,830),27253=>array(37,-72,979,832),27254=>array(43,-74,964,821),27255=>array(32,-73,962,838),27256=>array(43,-73,959,818),27257=>array(21,-73,928,817),27258=>array(37,-72,911,819),27259=>array(29,-72,966,819),27260=>array(15,-63,980,837),27261=>array(41,-76,973,833),27262=>array(41,-66,974,828),27263=>array(26,-58,955,832),27264=>array(29,-61,956,841),27265=>array(46,-65,991,855),27266=>array(37,-71,966,828),27267=>array(50,-76,971,819),27268=>array(31,-66,974,844),27269=>array(24,-72,964,823),27270=>array(39,-73,943,836),27271=>array(36,-65,960,834),27272=>array(37,-72,958,819),27273=>array(37,-65,936,826),27274=>array(36,-66,980,829),27275=>array(37,-72,981,820),27276=>array(43,-65,970,829),27277=>array(31,-76,970,829),27278=>array(22,-65,971,851),27279=>array(37,-72,972,833),27280=>array(21,-70,949,838),27281=>array(50,-68,933,826),27282=>array(42,-75,967,826),27283=>array(27,-71,980,834),27284=>array(46,-59,924,839),27285=>array(51,-76,966,824),27286=>array(27,-69,974,834),27287=>array(33,-54,973,840),27288=>array(33,-72,965,849),27289=>array(35,-76,923,815),27290=>array(35,-74,976,827),27291=>array(31,-71,977,826),27292=>array(32,-64,974,861),27293=>array(41,-78,970,819),27294=>array(27,-66,961,837),27295=>array(29,-83,962,823),27296=>array(34,-65,954,834),27297=>array(34,-70,954,826),27298=>array(33,-68,969,858),27299=>array(33,-63,959,838),27300=>array(35,-71,980,827),27301=>array(29,-73,964,842),27302=>array(41,-70,919,826),27303=>array(33,-70,974,823),27304=>array(33,-74,960,829),27305=>array(22,-64,921,857),27306=>array(42,-64,973,849),27307=>array(15,-63,943,830),27308=>array(29,-61,965,836),27309=>array(40,-72,981,828),27310=>array(40,-65,950,833),27311=>array(38,-56,970,838),27312=>array(35,-68,936,845),27313=>array(25,-56,943,832),27314=>array(35,-68,917,832),27315=>array(40,-65,966,846),27316=>array(34,-68,974,827),27317=>array(35,-69,942,824),27318=>array(38,-71,983,834),27319=>array(36,-70,959,821),27320=>array(37,-63,952,839),27321=>array(38,-65,965,842),27322=>array(45,-64,969,842),27323=>array(24,-62,957,839),27324=>array(27,-69,953,825),27325=>array(36,-61,967,831),27326=>array(105,-51,918,822),27327=>array(34,-68,958,829),27328=>array(36,-69,974,840),27329=>array(26,-66,945,839),27330=>array(36,-50,957,840),27331=>array(44,-66,954,835),27332=>array(44,-71,977,835),27333=>array(36,-71,975,839),27334=>array(48,-68,977,824),27335=>array(32,-75,963,825),27336=>array(31,-62,984,847),27337=>array(27,-70,953,826),27338=>array(31,-71,913,824),27339=>array(42,-70,958,840),27340=>array(44,-69,958,832),27341=>array(40,-75,961,831),27342=>array(35,-71,957,849),27343=>array(28,-64,984,828),27344=>array(40,-65,969,813),27345=>array(43,-66,935,827),27346=>array(30,-73,973,831),27347=>array(30,-61,974,849),27348=>array(42,-65,958,831),27349=>array(42,-72,967,831),27350=>array(34,-62,965,836),27351=>array(42,-67,958,833),27352=>array(42,-62,961,831),27353=>array(44,-70,949,824),27354=>array(39,-61,904,833),27355=>array(47,-66,959,840),27356=>array(43,-59,973,843),27357=>array(30,-70,971,835),27358=>array(33,-66,972,841),27359=>array(32,-71,969,841),27360=>array(37,-71,986,838),27361=>array(58,-72,950,833),27362=>array(20,-72,972,837),27363=>array(22,-72,974,841),27364=>array(41,-68,955,841),27365=>array(33,-71,959,847),27366=>array(29,-68,970,841),27367=>array(34,-65,957,840),27368=>array(36,-71,962,833),27369=>array(44,-65,920,833),27370=>array(32,-65,955,832),27371=>array(41,-68,959,831),27372=>array(43,-62,971,843),27373=>array(30,-62,965,831),27374=>array(36,-67,951,827),27375=>array(31,-68,981,842),27376=>array(30,-78,980,841),27377=>array(43,-65,967,840),27378=>array(33,-65,979,839),27379=>array(35,-58,969,855),27380=>array(19,-72,970,843),27381=>array(27,-66,973,840),27382=>array(32,-62,960,831),27383=>array(16,-45,965,851),27384=>array(38,-72,986,835),27385=>array(40,-68,957,830),27386=>array(38,-61,936,832),27387=>array(45,-62,958,826),27388=>array(28,-78,978,832),27389=>array(48,-68,956,813),27390=>array(31,-64,969,829),27391=>array(32,-67,951,835),27392=>array(33,-70,977,837),27393=>array(22,-70,987,832),27394=>array(31,-69,959,828),27395=>array(34,-58,964,853),27396=>array(35,-65,909,836),27397=>array(31,-69,973,827),27398=>array(21,-66,969,836),27399=>array(31,-66,955,827),27400=>array(45,-64,944,838),27401=>array(40,-62,962,835),27402=>array(38,-71,952,830),27403=>array(33,-68,960,823),27404=>array(33,-68,970,838),27405=>array(28,-68,937,832),27406=>array(44,-71,964,842),27407=>array(34,-67,967,830),27408=>array(39,-73,960,828),27409=>array(33,-70,970,831),27410=>array(40,-74,961,844),27411=>array(33,-78,966,836),27412=>array(33,-65,970,828),27413=>array(33,-70,987,828),27414=>array(40,-63,961,841),27415=>array(39,-65,942,830),27416=>array(47,-68,933,827),27417=>array(49,-62,959,831),27418=>array(35,-68,978,846),27419=>array(38,-71,932,835),27420=>array(40,-65,975,839),27421=>array(56,-67,964,843),27422=>array(49,-64,968,828),27423=>array(36,-69,984,835),27424=>array(51,-69,950,842),27425=>array(49,-66,953,822),27426=>array(20,-64,948,839),27427=>array(48,-72,962,831),27428=>array(41,-75,952,819),27429=>array(106,-75,968,829),27430=>array(35,-75,968,838),27431=>array(101,-66,953,833),27432=>array(56,-73,971,829),27433=>array(51,-62,947,822),27434=>array(90,-68,956,837),27435=>array(66,-68,950,847),27436=>array(44,-68,971,848),27437=>array(115,-73,961,830),27438=>array(60,-68,971,850),27439=>array(55,-74,967,830),27440=>array(30,-72,959,831),27441=>array(34,-72,959,834),27442=>array(47,-65,969,837),27443=>array(107,-74,962,830),27444=>array(101,-73,959,848),27445=>array(46,-62,970,853),27446=>array(44,-76,964,826),27447=>array(30,-69,963,838),27448=>array(47,-66,967,839),27449=>array(57,-79,975,830),27450=>array(61,-65,968,832),27451=>array(50,-72,958,838),27452=>array(50,-72,969,830),27453=>array(39,-71,977,839),27454=>array(50,-70,954,835),27455=>array(54,-67,968,841),27456=>array(46,-76,983,824),27457=>array(65,-73,985,827),27458=>array(61,-71,975,833),27459=>array(58,-72,972,838),27460=>array(102,-69,969,827),27461=>array(56,-72,977,826),27462=>array(47,-71,964,843),27463=>array(22,-74,968,842),27464=>array(29,-73,973,844),27465=>array(34,-70,970,841),27466=>array(54,-73,963,846),27467=>array(33,-69,967,826),27468=>array(65,-66,959,839),27469=>array(51,-73,970,841),27470=>array(39,-72,967,830),27471=>array(49,-72,961,842),27472=>array(110,-79,961,830),27473=>array(46,-69,977,831),27474=>array(60,-69,971,839),27475=>array(39,-65,963,841),27476=>array(32,-73,983,838),27477=>array(53,-83,972,825),27478=>array(60,-77,970,830),27479=>array(49,-68,975,840),27480=>array(52,-56,953,835),27481=>array(37,-67,964,856),27482=>array(64,-65,983,849),27483=>array(31,-70,983,864),27484=>array(37,-80,972,836),27485=>array(63,-72,971,838),27486=>array(55,-71,967,829),27487=>array(48,-67,969,841),27488=>array(53,-59,969,849),27489=>array(37,-68,962,836),27490=>array(76,-6,931,791),27491=>array(100,-5,920,756),27492=>array(37,-57,949,804),27493=>array(57,-60,932,835),27494=>array(63,-58,942,834),27495=>array(40,-66,956,830),27496=>array(41,-66,952,835),27497=>array(53,-62,962,833),27498=>array(63,-20,919,779),27499=>array(40,-28,953,783),27500=>array(46,-74,942,822),27501=>array(53,-67,951,829),27502=>array(37,-59,957,836),27503=>array(98,-70,938,835),27504=>array(60,-51,920,792),27505=>array(45,-20,956,836),27506=>array(45,-70,940,834),27507=>array(48,-70,943,834),27508=>array(33,-56,961,801),27509=>array(30,-55,955,849),27510=>array(80,-70,939,823),27511=>array(41,-58,944,789),27512=>array(47,-71,930,846),27513=>array(79,-75,921,767),27514=>array(71,-75,815,798),27515=>array(60,-67,959,761),27516=>array(26,-60,916,801),27517=>array(41,-68,955,828),27518=>array(58,-59,921,843),27519=>array(56,-62,972,840),27520=>array(39,-57,967,840),27521=>array(44,-74,950,774),27522=>array(49,-47,957,785),27523=>array(41,-73,964,827),27524=>array(54,-71,966,853),27525=>array(53,-74,952,827),27526=>array(65,-74,951,829),27527=>array(31,-68,913,826),27528=>array(44,-63,951,838),27529=>array(63,-75,921,835),27530=>array(61,-66,964,832),27531=>array(47,-61,965,845),27532=>array(33,-73,954,773),27533=>array(57,-64,953,837),27534=>array(43,-73,961,821),27535=>array(42,-76,950,821),27536=>array(52,-70,968,829),27537=>array(52,-74,960,823),27538=>array(32,-87,910,778),27539=>array(35,-71,948,820),27540=>array(57,-69,975,831),27541=>array(55,-58,949,829),27542=>array(40,-67,954,835),27543=>array(38,-53,968,835),27544=>array(68,-60,952,832),27545=>array(57,-64,958,829),27546=>array(44,-70,939,823),27547=>array(48,-47,947,788),27548=>array(39,-68,982,842),27549=>array(39,-68,974,829),27550=>array(40,-60,958,800),27551=>array(54,-67,970,782),27552=>array(39,-71,971,843),27553=>array(36,-71,930,830),27554=>array(50,-70,954,826),27555=>array(54,-72,952,829),27556=>array(55,-70,963,845),27557=>array(39,-78,953,834),27558=>array(43,-69,946,834),27559=>array(52,-71,978,829),27560=>array(43,-68,970,833),27561=>array(35,-65,976,798),27562=>array(47,-20,954,833),27563=>array(57,-64,953,789),27564=>array(50,-64,941,786),27565=>array(35,-44,965,807),27566=>array(40,-67,977,854),27567=>array(55,-66,960,838),27568=>array(36,-68,963,830),27569=>array(42,-73,954,829),27570=>array(44,-66,946,829),27571=>array(52,-70,948,788),27572=>array(98,-66,959,792),27573=>array(41,-73,964,832),27574=>array(58,-80,958,819),27575=>array(46,-68,952,836),27576=>array(45,-69,976,833),27577=>array(81,-72,972,787),27578=>array(51,-72,967,824),27579=>array(51,-70,963,833),27580=>array(49,-68,964,833),27581=>array(35,-65,976,847),27582=>array(35,-72,960,823),27583=>array(31,-73,969,799),27584=>array(73,-64,962,836),27585=>array(58,-68,958,833),27586=>array(52,-67,944,815),27587=>array(58,-72,973,843),27588=>array(58,-69,963,835),27589=>array(39,-72,963,831),27590=>array(69,-68,958,810),27591=>array(53,-76,974,819),27592=>array(55,-73,963,830),27593=>array(71,-29,951,800),27594=>array(41,-63,976,833),27595=>array(92,-57,935,798),27596=>array(74,-58,926,788),27597=>array(77,-66,931,783),27598=>array(64,-63,933,843),27599=>array(64,-63,939,843),27600=>array(55,-65,952,836),27601=>array(44,-62,967,805),27602=>array(56,-69,944,832),27603=>array(43,-62,964,835),27604=>array(59,-36,956,811),27605=>array(58,-59,908,816),27606=>array(63,-43,951,816),27607=>array(87,-67,965,820),27608=>array(76,-62,969,794),27609=>array(41,-54,941,826),27610=>array(56,-65,956,845),27611=>array(79,-23,944,822),27612=>array(52,-18,971,840),27613=>array(52,-18,971,840),27614=>array(78,-41,947,831),27615=>array(52,-40,954,841),27616=>array(49,-32,956,823),27617=>array(52,-18,971,840),27618=>array(55,-27,961,837),27619=>array(71,-32,949,778),27620=>array(48,-62,956,830),27621=>array(52,-18,971,841),27622=>array(55,-58,956,836),27623=>array(62,-26,965,834),27624=>array(54,-25,954,833),27625=>array(52,-18,971,840),27626=>array(35,-19,931,836),27627=>array(80,-54,933,840),27628=>array(51,-24,969,832),27629=>array(44,-39,954,836),27630=>array(30,-65,964,835),27631=>array(59,-30,967,835),27632=>array(47,-29,958,834),27633=>array(47,-28,958,833),27634=>array(39,-76,955,819),27635=>array(70,-44,970,826),27636=>array(47,-28,958,823),27637=>array(30,-65,933,844),27638=>array(44,-28,972,855),27639=>array(90,-55,961,848),27640=>array(55,-28,959,825),27641=>array(28,-70,972,847),27642=>array(48,-28,960,841),27643=>array(31,-65,962,840),27644=>array(31,-68,963,819),27645=>array(44,-32,971,832),27646=>array(47,-67,960,822),27647=>array(35,-67,967,853),27648=>array(54,-69,966,824),27649=>array(60,-28,972,835),27650=>array(53,-76,958,825),27651=>array(46,-45,962,839),27652=>array(38,-54,960,844),27653=>array(49,-34,959,841),27654=>array(54,-43,974,840),27655=>array(30,-25,928,835),27656=>array(68,-56,946,844),27657=>array(37,-58,964,840),27658=>array(54,-43,974,854),27659=>array(52,-69,971,828),27660=>array(48,-40,978,843),27661=>array(33,-66,966,830),27662=>array(61,-46,961,825),27663=>array(83,-68,934,828),27664=>array(100,-54,907,832),27665=>array(51,-67,950,784),27666=>array(91,-71,936,839),27667=>array(111,-61,951,781),27668=>array(39,-56,966,853),27669=>array(36,-67,957,847),27670=>array(51,-64,965,845),27671=>array(36,-62,963,853),27672=>array(46,-69,966,840),27673=>array(44,-62,965,852),27674=>array(26,-68,959,849),27675=>array(52,-69,962,839),27676=>array(35,-63,959,849),27677=>array(36,-75,960,835),27678=>array(36,-72,960,835),27679=>array(37,-76,962,829),27680=>array(10,-71,933,837),27681=>array(45,-76,961,845),27682=>array(38,-63,943,832),27683=>array(50,-67,959,838),27684=>array(40,-63,979,849),27685=>array(37,-66,968,842),27686=>array(41,-65,972,858),27687=>array(42,-70,958,832),27688=>array(41,-73,961,835),27689=>array(21,-64,938,825),27690=>array(38,-66,968,849),27691=>array(47,-68,957,831),27692=>array(39,-61,974,854),27693=>array(38,-66,966,852),27694=>array(48,-79,963,835),27695=>array(45,-74,959,841),27696=>array(35,-70,964,839),27697=>array(25,-69,955,830),27698=>array(25,-70,955,830),27699=>array(43,-71,971,833),27700=>array(47,-64,953,826),27701=>array(320,-38,602,803),27702=>array(51,-74,958,782),27703=>array(47,-64,953,826),27704=>array(51,-65,957,838),27705=>array(85,-28,958,830),27706=>array(40,-64,962,826),27707=>array(69,-60,921,829),27708=>array(54,-39,945,830),27709=>array(27,-71,967,846),27710=>array(71,-32,962,814),27711=>array(60,-65,966,823),27712=>array(51,-55,941,808),27713=>array(58,-59,962,833),27714=>array(61,-65,938,835),27715=>array(60,-62,977,814),27716=>array(60,-63,942,835),27717=>array(59,-51,937,814),27718=>array(33,-65,961,790),27719=>array(46,-49,920,803),27720=>array(70,-59,896,790),27721=>array(40,-59,956,804),27722=>array(57,-66,967,813),27723=>array(59,-57,912,836),27724=>array(62,-72,910,829),27725=>array(44,-71,975,826),27726=>array(53,-62,959,825),27727=>array(62,-65,960,829),27728=>array(67,-71,919,831),27729=>array(67,-42,930,826),27730=>array(55,-49,958,836),27731=>array(55,-64,954,802),27732=>array(60,-37,967,842),27733=>array(57,-65,898,820),27734=>array(54,-65,954,833),27735=>array(48,-67,948,798),27736=>array(48,-59,933,831),27737=>array(51,-67,957,814),27738=>array(49,-52,948,802),27739=>array(43,-63,975,812),27740=>array(33,-46,945,808),27741=>array(47,-62,947,847),27742=>array(58,-68,948,781),27743=>array(65,-51,940,796),27744=>array(48,-46,959,825),27745=>array(58,-52,943,802),27746=>array(74,-58,945,811),27747=>array(92,-68,957,831),27748=>array(51,-63,899,790),27749=>array(52,-70,977,828),27750=>array(44,-68,963,826),27751=>array(69,-68,964,801),27752=>array(70,-57,900,812),27753=>array(55,-40,911,817),27754=>array(54,-41,944,809),27755=>array(53,-68,951,833),27756=>array(57,-67,964,822),27757=>array(61,-69,905,801),27758=>array(41,-65,904,831),27759=>array(48,-61,951,830),27760=>array(48,-64,962,835),27761=>array(50,-70,957,837),27762=>array(41,-68,955,820),27763=>array(49,-73,972,807),27764=>array(53,-64,944,846),27765=>array(53,-73,945,854),27766=>array(42,-66,962,830),27767=>array(59,-63,941,805),27768=>array(54,-69,949,833),27769=>array(58,-59,900,820),27770=>array(56,-72,970,836),27771=>array(41,-75,951,826),27772=>array(41,-75,951,811),27773=>array(63,-61,962,850),27774=>array(41,-62,955,814),27775=>array(62,-57,950,820),27776=>array(45,-75,931,825),27777=>array(56,-48,947,811),27778=>array(58,-67,950,831),27779=>array(48,-64,962,819),27780=>array(46,-60,946,807),27781=>array(47,-70,948,812),27782=>array(63,-66,951,817),27783=>array(48,-60,951,849),27784=>array(56,-73,946,824),27785=>array(51,-58,952,788),27786=>array(49,-58,973,833),27787=>array(51,-69,960,827),27788=>array(41,-44,963,833),27789=>array(56,-38,939,794),27790=>array(45,-62,961,844),27791=>array(62,-67,926,814),27792=>array(43,-63,960,833),27793=>array(66,-51,947,821),27794=>array(58,-71,953,841),27795=>array(54,-62,962,835),27796=>array(54,-60,944,814),27797=>array(59,-56,926,855),27798=>array(54,-64,914,839),27799=>array(35,-58,976,803),27800=>array(52,-50,964,817),27801=>array(51,-62,968,812),27802=>array(65,-44,966,807),27803=>array(41,-65,942,837),27804=>array(70,-66,953,837),27805=>array(31,-69,969,835),27806=>array(52,-74,939,826),27807=>array(41,-61,903,831),27808=>array(66,-64,959,821),27809=>array(47,-62,959,805),27810=>array(40,-66,973,805),27811=>array(58,-63,920,813),27812=>array(42,-47,929,822),27813=>array(41,-57,916,827),27814=>array(52,-46,948,837),27815=>array(28,-63,967,821),27816=>array(58,-58,937,824),27817=>array(41,-62,892,819),27818=>array(45,-62,874,836),27819=>array(56,-61,980,833),27820=>array(62,-72,984,819),27821=>array(39,-67,947,829),27822=>array(57,-30,957,820),27823=>array(52,-52,967,813),27824=>array(53,-71,951,803),27825=>array(53,-44,951,828),27826=>array(38,-58,953,810),27827=>array(49,-67,952,796),27828=>array(46,-47,978,862),27829=>array(73,-53,947,840),27830=>array(51,-73,956,800),27831=>array(53,-81,961,827),27832=>array(42,-63,915,823),27833=>array(64,-69,903,836),27834=>array(54,-74,900,801),27835=>array(48,-64,959,834),27836=>array(52,-61,896,817),27837=>array(69,-64,956,836),27838=>array(67,-56,946,836),27839=>array(43,-48,936,814),27840=>array(45,-68,891,806),27841=>array(59,-62,965,810),27842=>array(45,-73,894,813),27843=>array(47,-70,896,825),27844=>array(39,-63,953,835),27845=>array(49,-66,897,811),27846=>array(28,-50,976,856),27847=>array(48,-73,909,818),27848=>array(81,-66,984,829),27849=>array(46,-73,960,843),27850=>array(60,-57,875,847),27851=>array(39,-66,968,828),27852=>array(42,-32,972,829),27853=>array(44,-67,968,835),27854=>array(97,-62,955,845),27855=>array(42,-71,915,830),27856=>array(64,-68,918,832),27857=>array(57,-75,907,831),27858=>array(55,-64,975,849),27859=>array(50,-53,958,808),27860=>array(46,-53,947,831),27861=>array(64,-59,945,821),27862=>array(56,-68,924,837),27863=>array(61,-53,909,810),27864=>array(78,-67,931,825),27865=>array(54,-64,952,818),27866=>array(38,-39,960,838),27867=>array(56,-67,963,836),27868=>array(41,-69,958,834),27869=>array(55,-68,952,842),27870=>array(51,-72,910,824),27871=>array(62,-63,953,806),27872=>array(36,-50,969,870),27873=>array(46,-46,968,834),27874=>array(50,-75,961,831),27875=>array(62,-27,956,820),27876=>array(59,-65,960,828),27877=>array(56,-64,957,821),27878=>array(62,-57,973,818),27879=>array(55,-70,960,828),27880=>array(60,-46,939,838),27881=>array(49,-58,958,831),27882=>array(53,-59,914,820),27883=>array(54,-53,949,831),27884=>array(53,-72,972,846),27885=>array(52,-73,948,823),27886=>array(63,-69,967,825),27887=>array(49,-63,951,812),27888=>array(38,-65,963,838),27889=>array(59,-71,983,831),27890=>array(50,-46,922,856),27891=>array(42,-58,980,851),27892=>array(58,-26,988,825),27893=>array(57,-67,964,777),27894=>array(45,-66,929,815),27895=>array(57,-62,929,822),27896=>array(53,-62,910,822),27897=>array(53,-50,955,798),27898=>array(42,-62,933,828),27899=>array(43,-55,893,806),27900=>array(47,-76,949,814),27901=>array(55,-70,948,805),27902=>array(63,-58,926,799),27903=>array(64,-72,964,812),27904=>array(51,-69,954,838),27905=>array(57,-71,957,827),27906=>array(57,-66,945,846),27907=>array(44,-78,972,829),27908=>array(71,-57,915,803),27909=>array(57,-66,965,806),27910=>array(47,-60,964,805),27911=>array(56,-63,910,810),27912=>array(50,-73,964,829),27913=>array(49,-67,955,822),27914=>array(56,-64,970,840),27915=>array(42,-65,951,846),27916=>array(45,-62,902,830),27917=>array(52,-44,954,812),27918=>array(58,-69,898,842),27919=>array(56,-70,954,811),27920=>array(55,-70,955,830),27921=>array(49,-66,974,841),27922=>array(46,-53,947,813),27923=>array(55,-65,941,824),27924=>array(58,-61,935,838),27925=>array(41,-73,975,818),27926=>array(46,-70,962,807),27927=>array(60,-62,963,833),27928=>array(47,-74,953,825),27929=>array(42,-62,967,832),27930=>array(49,-70,968,834),27931=>array(57,-72,959,842),27932=>array(38,-67,981,849),27933=>array(55,-71,959,835),27934=>array(48,-55,898,819),27935=>array(45,-74,973,830),27936=>array(51,-68,954,844),27937=>array(71,-67,965,824),27938=>array(53,-79,952,830),27939=>array(51,-65,955,824),27940=>array(44,-38,962,845),27941=>array(48,-62,959,842),27942=>array(52,-70,932,830),27943=>array(42,-77,945,828),27944=>array(52,-74,963,835),27945=>array(55,-63,974,831),27946=>array(69,-60,940,834),27947=>array(50,-53,970,829),27948=>array(53,-71,963,818),27949=>array(50,-45,953,812),27950=>array(52,-60,967,825),27951=>array(53,-68,948,829),27952=>array(54,-52,949,805),27953=>array(56,-64,959,812),27954=>array(57,-70,897,820),27955=>array(56,-64,908,834),27956=>array(48,-65,956,847),27957=>array(50,-59,908,850),27958=>array(56,-63,917,838),27959=>array(55,-57,956,809),27960=>array(59,-75,965,819),27961=>array(54,-53,959,802),27962=>array(55,-72,889,830),27963=>array(43,-70,942,826),27964=>array(50,-54,956,829),27965=>array(50,-59,986,845),27966=>array(51,-72,966,832),27967=>array(58,-63,988,854),27968=>array(48,-73,909,828),27969=>array(40,-70,964,830),27970=>array(48,-73,970,836),27971=>array(49,-74,939,818),27972=>array(48,-61,952,839),27973=>array(46,-70,939,853),27974=>array(34,-61,947,836),27975=>array(37,-63,929,834),27976=>array(62,-80,920,819),27977=>array(46,-71,930,822),27978=>array(57,-54,935,816),27979=>array(48,-63,880,828),27980=>array(45,-63,956,825),27981=>array(45,-68,940,822),27982=>array(36,-64,952,835),27983=>array(55,-68,871,821),27984=>array(54,-68,917,846),27985=>array(57,-60,909,811),27986=>array(46,-69,920,822),27987=>array(40,-58,950,831),27988=>array(43,-64,911,790),27989=>array(54,-64,936,810),27990=>array(46,-66,934,835),27991=>array(56,-63,956,833),27992=>array(66,-64,970,821),27993=>array(41,-65,954,835),27994=>array(24,-54,948,846),27995=>array(42,-70,955,839),27996=>array(47,-65,963,824),27997=>array(52,-45,965,833),27998=>array(50,-54,972,829),27999=>array(50,-76,971,839),28000=>array(40,-65,951,838),28001=>array(60,-63,957,844),28002=>array(63,-44,966,818),28003=>array(56,-64,960,839),28004=>array(52,-65,940,833),28005=>array(45,-35,955,818),28006=>array(42,-52,956,847),28007=>array(53,-43,951,813),28008=>array(57,-68,972,831),28009=>array(29,-63,944,841),28010=>array(62,-63,962,829),28011=>array(46,-60,938,817),28012=>array(48,-49,952,817),28013=>array(47,-70,962,816),28014=>array(46,-68,951,834),28015=>array(54,-47,949,835),28016=>array(55,-65,909,831),28017=>array(54,-70,963,808),28018=>array(54,-72,969,842),28019=>array(57,-76,957,843),28020=>array(53,-60,959,847),28021=>array(43,-74,954,831),28022=>array(46,-69,945,836),28023=>array(42,-62,956,843),28024=>array(42,-69,949,798),28025=>array(43,-67,971,830),28026=>array(54,-67,911,827),28027=>array(50,-65,908,819),28028=>array(42,-65,962,840),28029=>array(53,-66,958,821),28030=>array(53,-70,953,830),28031=>array(56,-78,955,810),28032=>array(51,-66,963,811),28033=>array(55,-76,966,822),28034=>array(48,-68,975,843),28035=>array(52,-71,906,812),28036=>array(55,-68,956,830),28037=>array(28,-26,960,816),28038=>array(44,-67,950,809),28039=>array(50,-38,956,820),28040=>array(64,-67,917,833),28041=>array(48,-58,956,834),28042=>array(55,-52,972,809),28043=>array(56,-71,968,826),28044=>array(49,-61,897,818),28045=>array(50,-67,947,832),28046=>array(36,-66,964,813),28047=>array(63,-68,948,810),28048=>array(59,-67,964,827),28049=>array(49,-68,961,825),28050=>array(45,-68,948,814),28051=>array(74,-65,915,814),28052=>array(53,-67,996,829),28053=>array(42,-68,927,844),28054=>array(39,-48,956,859),28055=>array(57,-70,955,840),28056=>array(37,-53,973,863),28057=>array(36,-68,959,827),28058=>array(54,-64,968,852),28059=>array(61,-61,937,834),28060=>array(41,-59,955,844),28061=>array(52,-54,911,834),28062=>array(44,-59,943,823),28063=>array(44,-58,938,816),28064=>array(49,-63,869,800),28065=>array(41,-70,893,795),28066=>array(51,-67,929,813),28067=>array(22,-63,946,842),28068=>array(45,-59,944,828),28069=>array(50,-61,908,848),28070=>array(62,-53,918,829),28071=>array(46,-62,870,819),28072=>array(45,-60,956,821),28073=>array(53,-41,928,798),28074=>array(45,-67,952,845),28075=>array(51,-65,928,850),28076=>array(67,-67,933,827),28077=>array(76,-69,964,832),28078=>array(63,-66,924,830),28079=>array(39,-64,951,818),28080=>array(58,-67,967,794),28081=>array(50,-69,961,804),28082=>array(52,-68,961,839),28083=>array(66,-52,956,833),28084=>array(43,-56,962,857),28085=>array(53,-63,911,810),28086=>array(69,-50,941,828),28087=>array(85,-71,963,820),28088=>array(53,-65,900,824),28089=>array(51,-72,946,840),28090=>array(72,-73,932,813),28091=>array(54,-72,962,825),28092=>array(49,-61,964,831),28093=>array(66,-71,957,816),28094=>array(82,-68,946,820),28095=>array(54,-51,975,815),28096=>array(54,-74,956,820),28097=>array(54,-71,944,841),28098=>array(78,-65,953,813),28099=>array(50,-50,951,834),28100=>array(65,-62,926,842),28101=>array(40,-58,953,839),28102=>array(54,-64,958,844),28103=>array(48,-65,961,830),28104=>array(65,-80,908,800),28105=>array(84,-71,965,815),28106=>array(57,-70,897,829),28107=>array(28,-63,968,841),28108=>array(45,-62,935,838),28109=>array(66,-77,906,804),28110=>array(66,-67,967,832),28111=>array(88,-74,971,819),28112=>array(85,-69,906,806),28113=>array(31,-66,975,829),28114=>array(35,-66,953,838),28115=>array(63,-72,956,823),28116=>array(69,-56,955,834),28117=>array(80,-60,954,832),28118=>array(38,-65,945,836),28119=>array(59,-62,904,828),28120=>array(47,-58,911,847),28121=>array(40,-62,961,836),28122=>array(48,-66,982,843),28123=>array(71,-71,905,821),28124=>array(74,-75,911,806),28125=>array(40,-62,960,806),28126=>array(29,-65,956,832),28127=>array(37,-54,970,849),28128=>array(46,-64,955,814),28129=>array(47,-62,965,846),28130=>array(79,-70,958,820),28131=>array(50,-58,957,850),28132=>array(40,-61,965,835),28133=>array(40,-64,956,837),28134=>array(50,-36,957,843),28135=>array(50,-39,989,843),28136=>array(57,-61,950,834),28137=>array(47,-73,964,835),28138=>array(39,-58,991,856),28139=>array(41,-42,943,827),28140=>array(24,-61,948,840),28141=>array(70,-68,961,824),28142=>array(43,-59,962,849),28143=>array(50,-66,941,832),28144=>array(38,-53,969,848),28145=>array(44,-68,963,808),28146=>array(57,-79,956,823),28147=>array(50,-61,955,831),28148=>array(34,-33,955,846),28149=>array(47,-65,900,830),28150=>array(52,-65,985,836),28151=>array(55,-60,961,803),28152=>array(39,-64,943,833),28153=>array(42,-37,984,854),28154=>array(42,-60,978,845),28155=>array(53,-55,962,837),28156=>array(49,-68,978,827),28157=>array(64,-53,951,824),28158=>array(51,-69,962,857),28159=>array(70,-68,922,838),28160=>array(76,-80,974,820),28161=>array(47,-68,961,823),28162=>array(51,-60,949,795),28163=>array(41,-70,951,821),28164=>array(44,-62,953,820),28165=>array(39,-67,943,833),28166=>array(42,-57,909,826),28167=>array(39,-63,924,800),28168=>array(42,-60,958,825),28169=>array(39,-67,966,824),28170=>array(59,-72,882,824),28171=>array(48,-31,956,834),28172=>array(46,-60,936,807),28173=>array(54,-75,912,827),28174=>array(52,-60,929,823),28175=>array(52,-62,954,833),28176=>array(36,-63,920,829),28177=>array(50,-48,933,799),28178=>array(36,-65,957,841),28179=>array(46,-57,979,828),28180=>array(50,-48,922,829),28181=>array(42,-57,909,826),28182=>array(60,-72,910,832),28183=>array(51,-61,964,839),28184=>array(82,-69,964,813),28185=>array(34,-65,951,838),28186=>array(47,-65,948,833),28187=>array(54,-76,956,837),28188=>array(50,-72,970,804),28189=>array(33,-76,965,843),28190=>array(81,-71,934,837),28191=>array(46,-62,921,849),28192=>array(53,-68,965,819),28193=>array(49,-71,973,832),28194=>array(29,-54,972,812),28195=>array(33,-29,959,843),28196=>array(63,-77,930,836),28197=>array(48,-70,956,811),28198=>array(51,-59,896,822),28199=>array(62,-71,919,838),28200=>array(46,-76,975,803),28201=>array(36,-61,943,781),28202=>array(61,-80,930,820),28203=>array(45,-65,978,830),28204=>array(64,-65,909,826),28205=>array(65,-65,913,808),28206=>array(50,-65,950,828),28207=>array(47,-56,961,826),28208=>array(54,-67,973,844),28209=>array(49,-49,959,825),28210=>array(55,-39,954,847),28211=>array(40,-70,952,813),28212=>array(62,-65,919,801),28213=>array(49,-70,956,825),28214=>array(57,-79,970,824),28215=>array(49,-58,967,856),28216=>array(54,-77,950,839),28217=>array(49,-50,919,855),28218=>array(28,-71,946,826),28219=>array(46,-72,960,831),28220=>array(58,-65,982,845),28221=>array(51,-74,962,822),28222=>array(43,-57,956,821),28223=>array(45,-67,980,829),28224=>array(52,-76,968,829),28225=>array(49,-72,963,834),28226=>array(52,-60,963,805),28227=>array(44,-61,961,832),28228=>array(80,-69,919,808),28229=>array(39,-46,968,855),28230=>array(43,-69,951,833),28231=>array(41,-73,947,829),28232=>array(48,-59,975,832),28233=>array(50,-71,952,824),28234=>array(49,-69,966,825),28235=>array(46,-71,950,838),28236=>array(52,-63,963,848),28237=>array(54,-64,956,833),28238=>array(43,-64,951,809),28239=>array(47,-71,939,832),28240=>array(48,-65,918,829),28241=>array(45,-48,963,820),28242=>array(52,-71,951,811),28243=>array(43,-53,959,823),28244=>array(50,-65,965,850),28245=>array(40,-73,978,826),28246=>array(68,-68,912,829),28247=>array(69,-61,954,826),28248=>array(69,-65,916,829),28249=>array(69,-38,980,840),28250=>array(54,-70,965,828),28251=>array(38,-65,948,823),28252=>array(49,-65,979,811),28253=>array(55,-69,958,825),28254=>array(60,-77,955,833),28255=>array(42,-37,959,846),28256=>array(55,-66,954,835),28257=>array(52,-66,910,801),28258=>array(55,-72,951,811),28259=>array(48,-44,959,821),28260=>array(43,-57,959,853),28261=>array(45,-70,977,832),28262=>array(52,-46,955,807),28263=>array(44,-68,918,814),28264=>array(49,-67,974,812),28265=>array(45,-64,962,818),28266=>array(49,-63,974,843),28267=>array(50,-67,979,833),28268=>array(25,-67,964,833),28269=>array(29,-65,955,842),28270=>array(34,-50,939,810),28271=>array(51,-68,953,795),28272=>array(43,-48,938,844),28273=>array(56,-65,955,835),28274=>array(41,-56,968,846),28275=>array(55,-64,956,836),28276=>array(53,-40,959,851),28277=>array(45,-60,969,840),28278=>array(45,-70,974,840),28279=>array(49,-70,961,832),28280=>array(52,-70,961,830),28281=>array(49,-68,956,806),28282=>array(64,-65,949,840),28283=>array(45,-64,954,845),28284=>array(48,-46,948,821),28285=>array(65,-62,952,843),28286=>array(54,-61,953,836),28287=>array(49,-39,933,804),28288=>array(38,-59,922,828),28289=>array(44,-70,962,818),28290=>array(44,-67,903,831),28291=>array(48,-64,919,827),28292=>array(48,-63,969,840),28293=>array(29,-63,931,833),28294=>array(42,-69,949,817),28295=>array(29,-52,928,837),28296=>array(46,-68,939,839),28297=>array(48,-64,963,811),28298=>array(48,-67,969,817),28299=>array(48,-33,965,817),28300=>array(46,-61,966,823),28301=>array(49,-69,961,816),28302=>array(44,-54,954,849),28303=>array(37,-65,949,828),28304=>array(48,-70,943,799),28305=>array(51,-72,935,836),28306=>array(43,-71,960,827),28307=>array(65,-71,953,831),28308=>array(50,-74,971,833),28309=>array(50,-60,965,799),28310=>array(54,-67,951,843),28311=>array(38,-70,967,836),28312=>array(31,-41,938,832),28313=>array(45,-70,987,845),28314=>array(55,-68,966,827),28315=>array(55,-74,976,838),28316=>array(45,-66,925,830),28317=>array(43,-67,948,829),28318=>array(64,-72,963,806),28319=>array(48,-66,966,807),28320=>array(55,-45,952,835),28321=>array(35,-70,954,824),28322=>array(48,-34,952,839),28323=>array(38,-67,973,848),28324=>array(41,-71,932,797),28325=>array(53,-64,951,835),28326=>array(46,-69,964,830),28327=>array(51,-62,967,804),28328=>array(51,-59,972,842),28329=>array(26,-60,928,839),28330=>array(26,-69,977,838),28331=>array(53,-59,959,784),28332=>array(53,-59,980,829),28333=>array(53,-59,973,802),28334=>array(52,-68,968,838),28335=>array(66,-70,922,837),28336=>array(58,-49,954,830),28337=>array(44,-66,986,840),28338=>array(34,-64,970,837),28339=>array(51,-71,969,811),28340=>array(56,-67,975,842),28341=>array(56,-71,989,836),28342=>array(53,-68,964,835),28343=>array(46,-65,905,818),28344=>array(56,-67,980,830),28345=>array(62,-65,958,831),28346=>array(54,-60,927,803),28347=>array(57,-63,878,808),28348=>array(57,-41,959,816),28349=>array(36,-64,950,810),28350=>array(45,-64,965,851),28351=>array(45,-70,958,824),28352=>array(55,-73,950,835),28353=>array(44,-65,978,840),28354=>array(51,-62,959,848),28355=>array(36,-52,973,812),28356=>array(46,-65,991,863),28357=>array(53,-68,954,828),28358=>array(55,-68,951,802),28359=>array(53,-69,962,844),28360=>array(63,-64,954,839),28361=>array(47,-62,962,813),28362=>array(55,-63,972,847),28363=>array(45,-65,944,841),28364=>array(38,-58,978,853),28365=>array(48,-73,946,831),28366=>array(46,-65,952,830),28367=>array(35,-49,969,836),28368=>array(43,-68,970,835),28369=>array(49,-62,926,811),28370=>array(57,-74,951,797),28371=>array(41,-66,952,840),28372=>array(57,-65,950,836),28373=>array(27,-64,958,824),28374=>array(53,-71,965,836),28375=>array(43,-49,924,827),28376=>array(48,-61,959,814),28377=>array(47,-39,951,828),28378=>array(44,-79,961,841),28379=>array(43,-76,939,820),28380=>array(54,-70,987,852),28381=>array(44,-51,958,835),28382=>array(43,-72,938,829),28383=>array(37,-63,926,826),28384=>array(46,-64,943,805),28385=>array(38,-59,922,828),28386=>array(37,-43,921,824),28387=>array(37,-76,979,791),28388=>array(39,-57,940,832),28389=>array(45,-54,920,828),28390=>array(46,-60,951,841),28391=>array(46,-54,978,852),28392=>array(43,-70,927,844),28393=>array(40,-39,917,834),28394=>array(45,-69,969,810),28395=>array(50,-68,960,836),28396=>array(44,-64,963,815),28397=>array(55,-74,953,799),28398=>array(55,-75,977,832),28399=>array(45,-68,950,829),28400=>array(61,-65,952,847),28401=>array(61,-71,970,838),28402=>array(45,-68,945,859),28403=>array(36,-80,923,826),28404=>array(36,-68,954,831),28405=>array(49,-73,966,842),28406=>array(56,-73,972,829),28407=>array(63,-64,953,837),28408=>array(38,-64,951,832),28409=>array(54,-66,955,839),28410=>array(50,-49,956,818),28411=>array(50,-64,959,844),28412=>array(54,-60,967,826),28413=>array(56,-68,956,839),28414=>array(57,-68,961,827),28415=>array(46,-69,948,830),28416=>array(33,-72,961,826),28417=>array(44,-60,972,850),28418=>array(23,-65,971,795),28419=>array(51,-73,974,836),28420=>array(55,-81,952,832),28421=>array(55,-70,962,834),28422=>array(29,-64,969,838),28423=>array(51,-74,973,831),28424=>array(51,-68,955,830),28425=>array(41,-70,970,828),28426=>array(35,-72,945,837),28427=>array(41,-67,985,845),28428=>array(35,-41,965,830),28429=>array(50,-71,898,813),28430=>array(52,-73,968,827),28431=>array(46,-67,956,800),28432=>array(66,-71,964,840),28433=>array(47,-52,959,847),28434=>array(57,-74,963,830),28435=>array(37,-58,943,841),28436=>array(40,-66,960,840),28437=>array(38,-65,956,837),28438=>array(47,-62,972,833),28439=>array(46,-54,962,843),28440=>array(51,-53,964,821),28441=>array(69,-68,964,831),28442=>array(42,-31,957,805),28443=>array(46,-45,983,828),28444=>array(47,-52,964,824),28445=>array(50,-65,919,804),28446=>array(56,-69,961,827),28447=>array(51,-28,954,839),28448=>array(28,-63,974,840),28449=>array(56,-70,954,838),28450=>array(38,-68,962,838),28451=>array(37,-58,963,833),28452=>array(38,-63,948,819),28453=>array(50,-52,954,836),28454=>array(38,-68,978,841),28455=>array(47,-67,961,832),28456=>array(61,-70,972,843),28457=>array(38,-62,973,849),28458=>array(41,-62,961,829),28459=>array(36,-68,972,806),28460=>array(47,-69,969,837),28461=>array(57,-70,968,827),28462=>array(49,-69,959,844),28463=>array(50,-60,962,819),28464=>array(40,-68,908,842),28465=>array(39,-71,970,837),28466=>array(44,-68,962,816),28467=>array(41,-67,952,843),28468=>array(47,-76,934,824),28469=>array(33,-58,966,833),28470=>array(34,-35,958,829),28471=>array(37,-71,953,838),28472=>array(48,-68,956,836),28473=>array(56,-68,955,814),28474=>array(51,-72,968,823),28475=>array(47,-71,966,808),28476=>array(51,-70,955,823),28477=>array(63,-74,957,805),28478=>array(45,-62,974,840),28479=>array(36,-68,959,839),28480=>array(43,-50,962,814),28481=>array(38,-66,956,831),28482=>array(54,-58,945,833),28483=>array(50,-71,964,832),28484=>array(51,-65,972,846),28485=>array(45,-72,936,843),28486=>array(37,-63,913,825),28487=>array(43,-66,951,824),28488=>array(39,-55,971,824),28489=>array(44,-54,943,840),28490=>array(36,-61,967,831),28491=>array(40,-65,946,824),28492=>array(48,-46,944,841),28493=>array(40,-43,923,832),28494=>array(48,-71,977,824),28495=>array(51,-70,920,801),28496=>array(52,-64,974,838),28497=>array(30,-63,983,846),28498=>array(50,-64,977,828),28499=>array(55,-52,985,824),28500=>array(57,-68,951,823),28501=>array(47,-71,978,829),28502=>array(53,-45,958,801),28503=>array(49,-66,979,848),28504=>array(33,-66,969,832),28505=>array(31,-60,945,837),28506=>array(41,-59,954,846),28507=>array(55,-65,964,837),28508=>array(53,-48,956,840),28509=>array(44,-70,985,841),28510=>array(42,-65,972,833),28511=>array(58,-64,922,846),28512=>array(40,-70,955,797),28513=>array(49,-71,981,841),28514=>array(37,-66,955,832),28515=>array(48,-68,908,809),28516=>array(71,-69,915,794),28517=>array(69,-72,960,793),28518=>array(44,-64,968,838),28519=>array(52,-70,915,824),28520=>array(69,-62,966,847),28521=>array(49,-74,960,807),28522=>array(52,-71,916,832),28523=>array(49,-68,975,828),28524=>array(49,-69,951,805),28525=>array(40,-71,962,805),28526=>array(58,-79,905,832),28527=>array(44,-62,952,805),28528=>array(57,-68,960,837),28529=>array(57,-56,937,839),28530=>array(57,-70,950,828),28531=>array(50,-71,948,808),28532=>array(36,-63,934,823),28533=>array(38,-69,963,832),28534=>array(48,-63,977,807),28535=>array(52,-72,956,829),28536=>array(32,-71,964,834),28537=>array(32,-51,968,819),28538=>array(38,-68,960,808),28539=>array(48,-68,975,823),28540=>array(53,-49,953,845),28541=>array(51,-71,956,836),28542=>array(49,-74,974,821),28543=>array(36,-65,904,813),28544=>array(33,-38,956,810),28545=>array(46,-60,959,836),28546=>array(42,-69,974,838),28547=>array(33,-78,961,817),28548=>array(46,-52,964,837),28549=>array(45,-50,952,828),28550=>array(51,-61,973,840),28551=>array(44,-56,949,846),28552=>array(45,-70,974,841),28553=>array(35,-66,975,831),28554=>array(48,-62,957,851),28555=>array(50,-71,952,804),28556=>array(37,-64,954,843),28557=>array(42,-62,955,830),28558=>array(36,-59,972,845),28559=>array(34,-58,934,813),28560=>array(46,-75,954,812),28561=>array(40,-49,923,804),28562=>array(42,-56,973,818),28563=>array(49,-68,961,835),28564=>array(32,-50,950,853),28565=>array(55,-69,947,826),28566=>array(46,-68,906,812),28567=>array(37,-60,894,820),28568=>array(32,-51,956,834),28569=>array(41,-70,960,835),28570=>array(32,-68,949,844),28571=>array(32,-74,943,835),28572=>array(52,-58,883,820),28573=>array(44,-59,945,847),28574=>array(68,-74,972,826),28575=>array(62,-63,977,854),28576=>array(40,-46,962,804),28577=>array(39,-67,977,795),28578=>array(59,-68,910,824),28579=>array(41,-65,976,837),28580=>array(35,-68,956,822),28581=>array(66,-73,952,822),28582=>array(45,-69,969,810),28583=>array(43,-41,951,833),28584=>array(41,-43,951,850),28585=>array(87,-68,924,833),28586=>array(55,-77,995,820),28587=>array(66,-65,946,825),28588=>array(62,-79,965,825),28589=>array(71,-71,954,839),28590=>array(19,-65,969,855),28591=>array(69,-70,963,823),28592=>array(63,-69,970,836),28593=>array(45,-68,975,808),28594=>array(68,-69,958,823),28595=>array(24,-68,963,851),28596=>array(35,-73,976,806),28597=>array(35,-55,948,828),28598=>array(42,-44,956,849),28599=>array(36,-57,941,819),28600=>array(52,-57,962,831),28601=>array(28,-56,941,856),28602=>array(75,-53,975,837),28603=>array(45,-56,944,843),28604=>array(42,-65,953,841),28605=>array(56,-66,957,828),28606=>array(37,-57,951,833),28607=>array(71,-71,961,822),28608=>array(40,-72,962,840),28609=>array(54,-59,914,815),28610=>array(28,-68,962,830),28611=>array(34,-75,965,840),28612=>array(74,-68,974,810),28613=>array(39,-54,984,853),28614=>array(47,-67,966,836),28615=>array(41,-44,951,855),28616=>array(43,-68,964,818),28617=>array(44,-66,954,839),28618=>array(69,-78,964,825),28619=>array(77,-70,987,820),28620=>array(49,-71,970,824),28621=>array(70,-57,969,826),28622=>array(74,-68,954,812),28623=>array(68,-65,967,822),28624=>array(68,-64,986,822),28625=>array(39,-63,935,826),28626=>array(49,-58,951,835),28627=>array(28,-68,962,850),28628=>array(51,-71,958,802),28629=>array(53,-70,963,799),28630=>array(69,-63,961,802),28631=>array(39,-63,991,835),28632=>array(39,-60,956,849),28633=>array(52,-49,952,839),28634=>array(52,-65,937,829),28635=>array(43,-62,952,837),28636=>array(54,-54,957,826),28637=>array(53,-69,974,829),28638=>array(42,-64,962,859),28639=>array(48,-71,954,838),28640=>array(35,-59,967,834),28641=>array(40,-68,938,812),28642=>array(45,-70,952,801),28643=>array(59,-73,979,831),28644=>array(40,-58,963,841),28645=>array(40,-60,975,848),28646=>array(35,-63,959,826),28647=>array(55,-68,954,827),28648=>array(53,-41,965,841),28649=>array(51,-68,963,829),28650=>array(49,-43,972,842),28651=>array(47,-55,963,842),28652=>array(53,-64,972,829),28653=>array(58,-60,962,815),28654=>array(20,-68,957,831),28655=>array(41,-65,955,808),28656=>array(50,-61,956,839),28657=>array(46,-73,966,845),28658=>array(45,-78,963,822),28659=>array(52,-69,966,827),28660=>array(47,-68,955,826),28661=>array(79,-57,930,840),28662=>array(47,-65,901,815),28663=>array(51,-64,951,834),28664=>array(46,-65,984,837),28665=>array(24,-29,960,802),28666=>array(35,-69,964,845),28667=>array(50,-76,963,828),28668=>array(25,-73,978,842),28669=>array(45,-72,960,834),28670=>array(43,-71,967,841),28671=>array(56,-67,939,812),28672=>array(56,-70,959,809),28673=>array(46,-78,969,838),28674=>array(63,-61,974,849),28675=>array(58,-57,957,824),28676=>array(76,-68,952,829),28677=>array(52,-43,957,836),28678=>array(41,-71,933,834),28679=>array(45,-83,940,831),28680=>array(45,-70,937,817),28681=>array(36,-59,929,846),28682=>array(40,-52,955,824),28683=>array(48,-65,952,838),28684=>array(42,-62,951,837),28685=>array(47,-54,956,863),28686=>array(47,-67,950,833),28687=>array(61,-67,933,834),28688=>array(59,-62,942,830),28689=>array(34,-68,973,797),28690=>array(41,-43,981,856),28691=>array(39,-67,970,834),28692=>array(49,-71,970,822),28693=>array(37,-71,965,821),28694=>array(44,-65,942,820),28695=>array(41,-53,949,839),28696=>array(48,-67,962,841),28697=>array(51,-70,970,844),28698=>array(39,-59,976,848),28699=>array(48,-71,956,838),28700=>array(36,-69,967,826),28701=>array(38,-59,967,820),28702=>array(44,-65,959,844),28703=>array(40,-65,959,833),28704=>array(46,-63,967,838),28705=>array(35,-69,967,832),28706=>array(41,-64,974,829),28707=>array(24,-42,961,835),28708=>array(51,-72,964,841),28709=>array(45,-71,938,817),28710=>array(40,-65,951,833),28711=>array(45,-68,963,827),28712=>array(42,-71,973,829),28713=>array(40,-66,966,830),28714=>array(55,-65,960,843),28715=>array(46,-73,975,829),28716=>array(42,-73,961,829),28717=>array(50,-70,978,849),28718=>array(50,-66,963,824),28719=>array(55,-63,951,841),28720=>array(48,-62,975,808),28721=>array(42,-63,942,832),28722=>array(40,-67,987,849),28723=>array(50,-64,952,831),28724=>array(36,-70,957,833),28725=>array(53,-76,969,840),28726=>array(54,-63,936,840),28727=>array(44,-68,949,825),28728=>array(41,-60,974,841),28729=>array(39,-62,990,852),28730=>array(43,-65,962,848),28731=>array(37,-71,966,829),28732=>array(39,-58,975,848),28733=>array(49,-64,950,845),28734=>array(59,-70,923,797),28735=>array(52,-65,959,839),28736=>array(53,-61,936,832),28737=>array(56,-65,921,825),28738=>array(55,-62,964,840),28739=>array(59,-59,964,826),28740=>array(46,-63,961,814),28741=>array(45,-46,958,804),28742=>array(36,-45,949,826),28743=>array(41,-62,952,834),28744=>array(45,-65,954,806),28745=>array(51,-68,956,834),28746=>array(50,-67,960,808),28747=>array(46,-76,941,844),28748=>array(49,-70,953,829),28749=>array(49,-67,930,790),28750=>array(39,-36,964,836),28751=>array(33,-67,935,805),28752=>array(56,-37,950,836),28753=>array(46,-67,969,819),28754=>array(46,-69,958,824),28755=>array(36,-68,959,832),28756=>array(41,-66,972,832),28757=>array(41,-62,965,856),28758=>array(49,-65,956,843),28759=>array(48,-55,964,832),28760=>array(34,-72,960,837),28761=>array(52,-78,941,836),28762=>array(37,-66,963,829),28763=>array(50,-64,910,823),28764=>array(48,-71,946,838),28765=>array(46,-69,973,813),28766=>array(32,-71,925,815),28767=>array(55,-69,938,815),28768=>array(47,-66,954,837),28769=>array(45,-57,948,839),28770=>array(44,-70,988,830),28771=>array(50,-69,940,839),28772=>array(28,-63,975,844),28773=>array(45,-68,965,845),28774=>array(34,-73,964,816),28775=>array(39,-36,972,839),28776=>array(44,-77,954,834),28777=>array(38,-36,964,839),28778=>array(48,-67,944,830),28779=>array(85,-66,919,815),28780=>array(39,223,932,469),28781=>array(45,-61,955,771),28782=>array(49,-64,954,829),28783=>array(49,-91,942,814),28784=>array(32,-59,959,782),28785=>array(70,-70,908,825),28786=>array(146,-68,889,832),28787=>array(59,-57,917,833),28788=>array(58,-66,959,827),28789=>array(53,-63,926,790),28790=>array(64,-77,964,824),28791=>array(54,-65,949,829),28792=>array(54,-62,956,840),28793=>array(79,-70,943,837),28794=>array(58,-69,966,819),28795=>array(53,-64,953,830),28796=>array(50,-77,920,832),28797=>array(53,-64,953,817),28798=>array(45,-72,925,835),28799=>array(37,-81,903,826),28800=>array(32,-63,899,826),28801=>array(37,-69,960,800),28802=>array(53,-67,960,826),28803=>array(42,-73,969,780),28804=>array(46,-70,961,825),28805=>array(46,-52,965,804),28806=>array(50,-71,987,835),28807=>array(81,-74,956,838),28808=>array(73,-70,964,825),28809=>array(34,-65,925,828),28810=>array(59,-72,964,840),28811=>array(59,-72,959,832),28812=>array(59,-72,957,849),28813=>array(59,-72,964,832),28814=>array(66,-77,962,829),28815=>array(59,-73,964,837),28816=>array(59,-72,956,834),28817=>array(48,-65,975,831),28818=>array(44,-74,965,833),28819=>array(55,-86,963,820),28820=>array(59,-74,970,828),28821=>array(48,-69,955,836),28822=>array(39,-66,966,826),28823=>array(57,-73,960,829),28824=>array(62,-70,954,840),28825=>array(57,-73,960,840),28826=>array(100,-75,967,827),28827=>array(39,-59,949,833),28828=>array(35,-71,889,822),28829=>array(37,-62,937,827),28830=>array(37,-68,954,823),28831=>array(56,-68,956,822),28832=>array(73,-70,914,831),28833=>array(54,-66,956,826),28834=>array(62,-70,956,831),28835=>array(62,-70,961,831),28836=>array(69,-66,920,829),28837=>array(50,-62,932,829),28838=>array(62,-70,968,844),28839=>array(62,-70,943,831),28840=>array(63,-70,953,852),28841=>array(49,-73,957,829),28842=>array(54,-70,914,831),28843=>array(49,-72,961,822),28844=>array(48,-72,951,831),28845=>array(37,-69,959,830),28846=>array(55,-72,948,839),28847=>array(60,-71,915,830),28848=>array(34,-61,971,849),28849=>array(37,-62,986,838),28850=>array(62,-70,954,838),28851=>array(45,-69,950,827),28852=>array(48,-74,968,825),28853=>array(51,-71,965,834),28854=>array(62,-70,931,831),28855=>array(39,-72,942,828),28856=>array(59,-71,951,842),28857=>array(50,-71,950,830),28858=>array(62,-64,920,838),28859=>array(35,-68,911,823),28860=>array(35,-60,942,832),28861=>array(38,-64,940,830),28862=>array(53,-70,967,820),28863=>array(34,-65,965,844),28864=>array(39,-70,921,825),28865=>array(29,-68,943,830),28866=>array(32,-56,936,833),28867=>array(35,-63,923,823),28868=>array(35,-66,970,846),28869=>array(52,-55,956,832),28870=>array(48,-65,953,832),28871=>array(55,-65,965,830),28872=>array(58,-61,954,831),28873=>array(47,-71,957,843),28874=>array(41,-85,956,841),28875=>array(42,-61,973,849),28876=>array(35,-71,933,837),28877=>array(55,-64,956,826),28878=>array(45,-73,958,788),28879=>array(68,-63,887,845),28880=>array(34,-65,965,844),28881=>array(54,-63,964,829),28882=>array(47,-74,968,824),28883=>array(49,-56,953,832),28884=>array(57,-61,910,831),28885=>array(53,-64,959,832),28886=>array(82,-58,957,839),28887=>array(49,-68,959,835),28888=>array(49,-71,949,830),28889=>array(48,-75,968,839),28890=>array(53,-68,969,833),28891=>array(35,-60,944,826),28892=>array(55,-64,959,837),28893=>array(50,-58,966,785),28894=>array(46,-68,953,830),28895=>array(62,-75,919,834),28896=>array(48,-68,953,829),28897=>array(56,-71,933,831),28898=>array(44,-63,960,827),28899=>array(48,-75,956,829),28900=>array(43,-77,953,832),28901=>array(43,-77,949,825),28902=>array(34,-62,926,831),28903=>array(34,-74,934,818),28904=>array(54,-66,927,824),28905=>array(31,-65,931,841),28906=>array(31,-73,970,836),28907=>array(49,-70,931,812),28908=>array(26,-64,936,833),28909=>array(45,-63,951,829),28910=>array(68,-70,931,828),28911=>array(47,-82,944,842),28912=>array(43,-70,956,826),28913=>array(42,-51,915,839),28914=>array(63,-70,931,825),28915=>array(41,-65,956,831),28916=>array(56,-76,954,820),28917=>array(56,-72,947,831),28918=>array(38,-70,972,826),28919=>array(51,-75,960,837),28920=>array(53,-68,953,824),28921=>array(50,-72,955,842),28922=>array(55,-73,970,831),28923=>array(47,-67,967,829),28924=>array(44,-66,965,826),28925=>array(39,-81,969,839),28926=>array(46,-24,968,815),28927=>array(51,-77,959,833),28928=>array(45,-70,964,823),28929=>array(59,-66,962,826),28930=>array(38,-66,972,836),28931=>array(71,-71,954,835),28932=>array(33,-60,963,804),28933=>array(49,-71,951,832),28934=>array(49,-71,897,824),28935=>array(49,-71,911,833),28936=>array(46,-70,980,846),28937=>array(62,-63,937,798),28938=>array(49,-70,954,832),28939=>array(46,-70,980,829),28940=>array(57,-69,961,849),28941=>array(46,-70,914,829),28942=>array(57,-75,958,829),28943=>array(53,-61,961,775),28944=>array(48,-70,953,826),28945=>array(48,-67,917,826),28946=>array(58,-69,904,826),28947=>array(46,-70,968,833),28948=>array(55,-72,911,828),28949=>array(20,-77,948,832),28950=>array(33,-67,878,825),28951=>array(56,-65,929,835),28952=>array(39,-66,936,817),28953=>array(45,-79,947,831),28954=>array(61,-64,959,823),28955=>array(112,-72,911,781),28956=>array(51,-63,974,832),28957=>array(48,-67,960,833),28958=>array(50,-69,953,830),28959=>array(45,-67,953,831),28960=>array(39,-65,967,845),28961=>array(45,-63,951,844),28962=>array(48,-68,950,829),28963=>array(52,-75,956,785),28964=>array(48,-70,956,844),28965=>array(44,-72,961,845),28966=>array(48,-65,954,836),28967=>array(48,-67,968,826),28968=>array(48,-69,889,826),28969=>array(38,-67,895,826),28970=>array(48,-71,953,846),28971=>array(48,-67,937,826),28972=>array(65,-67,929,826),28973=>array(69,-62,936,839),28974=>array(38,-66,977,841),28975=>array(56,-70,957,837),28976=>array(53,-79,893,837),28977=>array(37,-66,971,840),28978=>array(49,-69,966,841),28979=>array(65,-67,954,834),28980=>array(40,-61,951,838),28981=>array(46,-73,910,824),28982=>array(62,-67,961,838),28983=>array(48,-67,951,850),28984=>array(59,-67,959,803),28985=>array(48,-67,897,826),28986=>array(50,-72,955,827),28987=>array(48,-67,905,826),28988=>array(56,-74,963,829),28989=>array(69,-70,959,821),28990=>array(37,-61,971,840),28991=>array(48,-68,967,855),28992=>array(37,-61,907,829),28993=>array(43,-70,957,832),28994=>array(40,-71,953,826),28995=>array(64,-70,979,847),28996=>array(41,-72,955,829),28997=>array(32,-72,971,829),28998=>array(38,-63,969,835),28999=>array(60,-65,959,829),29000=>array(28,-67,971,826),29001=>array(46,-69,968,830),29002=>array(51,-67,959,841),29003=>array(51,-71,957,826),29004=>array(42,-71,948,849),29005=>array(36,-73,986,827),29006=>array(55,-77,955,839),29007=>array(48,-67,933,826),29008=>array(50,-70,977,830),29009=>array(66,-70,961,831),29010=>array(45,-65,967,846),29011=>array(40,-73,953,828),29012=>array(36,-70,941,838),29013=>array(43,-72,949,793),29014=>array(40,-73,967,844),29015=>array(56,-72,975,835),29016=>array(47,-68,977,826),29017=>array(53,-63,953,832),29018=>array(38,-66,967,807),29019=>array(38,-73,977,788),29020=>array(46,-67,954,827),29021=>array(44,-79,897,823),29022=>array(34,-71,940,836),29023=>array(45,-75,906,825),29024=>array(32,-57,973,836),29025=>array(35,-75,977,829),29026=>array(66,-68,938,833),29027=>array(42,-68,977,829),29028=>array(44,-68,964,833),29029=>array(39,-62,969,834),29030=>array(48,-66,955,843),29031=>array(67,-62,950,788),29032=>array(35,-71,960,828),29033=>array(49,-76,959,829),29034=>array(48,-75,952,842),29035=>array(50,-62,974,840),29036=>array(38,-75,954,826),29037=>array(49,-61,954,830),29038=>array(54,-79,955,831),29039=>array(50,-65,961,832),29040=>array(46,-75,906,829),29041=>array(51,-69,911,828),29042=>array(49,-67,962,837),29043=>array(26,-70,883,823),29044=>array(56,-69,950,828),29045=>array(51,-67,959,831),29046=>array(43,-55,970,837),29047=>array(43,-73,969,846),29048=>array(50,-63,939,832),29049=>array(51,-69,966,829),29050=>array(49,-69,950,826),29051=>array(44,-72,956,836),29052=>array(56,-69,926,850),29053=>array(41,-72,921,822),29054=>array(51,-69,950,828),29055=>array(46,-71,959,838),29056=>array(49,-74,964,827),29057=>array(51,-68,952,836),29058=>array(44,-68,967,831),29059=>array(47,-69,962,840),29060=>array(34,-71,964,847),29061=>array(57,-75,956,820),29062=>array(51,-67,956,829),29063=>array(57,-65,959,843),29064=>array(43,-72,949,801),29065=>array(53,-80,964,826),29066=>array(40,-70,947,844),29067=>array(58,-72,968,838),29068=>array(51,-63,905,831),29069=>array(51,-72,937,843),29070=>array(48,-71,956,827),29071=>array(45,-72,949,834),29072=>array(46,-77,956,832),29073=>array(51,-69,966,850),29074=>array(58,-63,949,839),29075=>array(56,-69,928,839),29076=>array(51,-71,962,835),29077=>array(56,-69,969,828),29078=>array(53,-76,933,835),29079=>array(40,-72,981,850),29080=>array(42,-63,890,830),29081=>array(43,-72,949,785),29082=>array(51,-55,959,835),29083=>array(32,-61,945,832),29084=>array(49,-52,977,830),29085=>array(40,-69,968,846),29086=>array(48,-61,977,825),29087=>array(38,-67,960,831),29088=>array(39,-70,909,835),29089=>array(51,-72,955,826),29090=>array(51,-69,962,843),29091=>array(51,-69,953,833),29092=>array(48,-62,953,827),29093=>array(32,-70,973,824),29094=>array(56,-65,949,837),29095=>array(46,-70,973,839),29096=>array(35,-63,964,830),29097=>array(42,-71,964,826),29098=>array(41,-71,931,825),29099=>array(51,-69,962,851),29100=>array(30,-72,940,833),29101=>array(35,-66,962,835),29102=>array(49,-70,968,827),29103=>array(46,-59,969,843),29104=>array(54,-61,956,825),29105=>array(47,-69,949,831),29106=>array(41,-76,968,821),29107=>array(43,-62,983,833),29108=>array(36,-61,964,838),29109=>array(32,-67,951,848),29110=>array(26,-67,962,828),29111=>array(43,-62,917,853),29112=>array(32,-61,964,835),29113=>array(41,-62,965,835),29114=>array(37,-65,956,836),29115=>array(34,-63,991,848),29116=>array(42,-73,958,826),29117=>array(38,-68,946,824),29118=>array(36,-75,956,837),29119=>array(54,-75,967,831),29120=>array(47,-68,954,825),29121=>array(43,-65,953,832),29122=>array(46,-67,956,826),29123=>array(45,-75,959,831),29124=>array(47,-66,970,842),29125=>array(41,-75,971,826),29126=>array(44,-68,969,826),29127=>array(47,-67,954,835),29128=>array(35,-85,963,837),29129=>array(46,-73,973,837),29130=>array(44,-63,974,839),29131=>array(38,-73,963,837),29132=>array(51,-75,967,827),29133=>array(46,-67,954,836),29134=>array(41,-73,969,850),29135=>array(50,-66,925,830),29136=>array(49,-68,959,833),29137=>array(37,-61,933,844),29138=>array(48,-74,955,829),29139=>array(39,-71,968,836),29140=>array(32,-65,965,837),29141=>array(45,-67,952,828),29142=>array(43,-56,954,833),29143=>array(22,-68,911,829),29144=>array(48,-67,914,829),29145=>array(53,-72,968,798),29146=>array(44,-74,969,828),29147=>array(43,-74,972,785),29148=>array(43,-65,928,829),29149=>array(46,-67,967,824),29150=>array(34,-67,969,837),29151=>array(84,-68,903,832),29152=>array(54,-69,952,825),29153=>array(42,-70,957,825),29154=>array(47,-67,969,838),29155=>array(44,-68,968,849),29156=>array(44,-68,951,822),29157=>array(33,-71,973,829),29158=>array(38,-69,971,836),29159=>array(36,-74,960,823),29160=>array(37,-69,962,847),29161=>array(37,-71,962,845),29162=>array(30,-63,979,836),29163=>array(61,-79,969,847),29164=>array(53,-64,974,835),29165=>array(61,-79,927,828),29166=>array(55,-80,967,830),29167=>array(43,-77,956,820),29168=>array(49,-73,977,829),29169=>array(53,-75,976,830),29170=>array(46,-72,951,843),29171=>array(49,-75,977,823),29172=>array(39,-73,971,857),29173=>array(39,-73,954,835),29174=>array(41,-70,984,838),29175=>array(48,-70,921,857),29176=>array(41,-70,945,830),29177=>array(43,-67,972,784),29178=>array(63,-63,943,853),29179=>array(54,-70,971,831),29180=>array(39,-70,954,830),29181=>array(44,-67,952,833),29182=>array(48,-67,967,833),29183=>array(37,-64,957,831),29184=>array(48,-69,951,831),29185=>array(41,-69,951,823),29186=>array(57,-69,964,840),29187=>array(45,-65,961,831),29188=>array(45,-65,948,827),29189=>array(45,-65,963,827),29190=>array(37,-72,967,828),29191=>array(49,-63,973,839),29192=>array(33,-68,965,838),29193=>array(47,-76,971,847),29194=>array(33,-68,962,839),29195=>array(55,-68,930,833),29196=>array(37,-75,948,841),29197=>array(36,-73,972,847),29198=>array(37,-64,990,845),29199=>array(27,-64,956,827),29200=>array(43,-71,954,830),29201=>array(43,-71,980,837),29202=>array(61,-80,961,858),29203=>array(54,-67,918,829),29204=>array(46,-62,972,841),29205=>array(50,-73,971,843),29206=>array(40,-63,962,843),29207=>array(36,-68,953,826),29208=>array(40,-83,979,841),29209=>array(36,-71,970,838),29210=>array(51,-75,973,824),29211=>array(53,-70,923,830),29212=>array(53,-70,962,834),29213=>array(39,-63,956,843),29214=>array(41,-70,962,831),29215=>array(36,-64,962,837),29216=>array(36,-68,960,830),29217=>array(36,-73,949,842),29218=>array(44,-75,958,845),29219=>array(47,-76,972,831),29220=>array(47,-66,942,830),29221=>array(47,-68,933,827),29222=>array(35,-67,975,838),29223=>array(48,-73,953,824),29224=>array(35,-70,968,830),29225=>array(40,-73,954,822),29226=>array(63,-64,944,835),29227=>array(83,181,938,697),29228=>array(50,-62,958,837),29229=>array(71,-73,924,824),29230=>array(50,-62,958,837),29231=>array(56,-67,950,846),29232=>array(54,-65,957,846),29233=>array(52,-73,943,824),29234=>array(33,-70,934,852),29235=>array(69,-52,916,844),29236=>array(74,-66,970,829),29237=>array(64,-61,943,842),29238=>array(95,-57,923,825),29239=>array(67,-62,951,823),29240=>array(45,-16,954,844),29241=>array(52,-79,964,839),29242=>array(55,-62,961,843),29243=>array(48,-63,960,840),29244=>array(66,-11,962,773),29245=>array(52,-69,963,835),29246=>array(50,-73,940,785),29247=>array(49,-69,732,820),29248=>array(42,-65,969,825),29249=>array(46,-71,951,829),29250=>array(46,-64,954,851),29251=>array(46,-64,968,831),29252=>array(36,-71,969,841),29253=>array(46,-73,949,851),29254=>array(39,-67,951,833),29255=>array(48,-75,895,829),29256=>array(34,-73,966,818),29257=>array(57,-77,957,826),29258=>array(50,-74,909,821),29259=>array(42,-70,966,840),29260=>array(42,-62,944,837),29261=>array(18,-75,927,819),29262=>array(18,-66,960,848),29263=>array(39,-57,950,853),29264=>array(18,-76,940,836),29265=>array(32,-78,922,833),29266=>array(34,-66,968,831),29267=>array(40,-70,957,846),29268=>array(23,-71,959,838),29269=>array(34,-66,959,839),29270=>array(31,-68,951,839),29271=>array(40,-73,949,851),29272=>array(33,-84,955,835),29273=>array(59,-53,929,780),29274=>array(51,-61,939,836),29275=>array(81,-68,939,830),29276=>array(155,-67,719,829),29277=>array(47,-67,938,829),29278=>array(51,-62,914,832),29279=>array(53,-67,947,844),29280=>array(43,-62,964,838),29281=>array(42,-62,953,829),29282=>array(56,-65,944,833),29283=>array(57,-49,914,844),29284=>array(57,-48,931,844),29285=>array(57,-67,954,849),29286=>array(34,-75,937,828),29287=>array(50,-68,974,840),29288=>array(50,-64,957,843),29289=>array(68,-73,921,829),29290=>array(48,-71,954,833),29291=>array(48,-71,949,825),29292=>array(39,-74,927,823),29293=>array(49,-69,937,826),29294=>array(55,-68,972,844),29295=>array(49,-67,949,829),29296=>array(50,-72,908,833),29297=>array(50,-66,960,833),29298=>array(44,-65,954,831),29299=>array(44,-66,960,825),29300=>array(48,-67,968,843),29301=>array(82,-61,934,845),29302=>array(43,-67,976,838),29303=>array(58,-69,984,827),29304=>array(54,-52,962,848),29305=>array(50,-68,944,831),29306=>array(26,-62,923,830),29307=>array(42,-68,950,838),29308=>array(52,-68,951,825),29309=>array(76,-67,945,838),29310=>array(52,-62,956,833),29311=>array(52,-52,955,842),29312=>array(45,-69,933,800),29313=>array(68,-61,945,835),29314=>array(59,-63,954,849),29315=>array(58,-65,956,848),29316=>array(45,-65,949,838),29317=>array(69,-67,918,827),29318=>array(58,-65,953,838),29319=>array(46,-67,959,839),29320=>array(61,-72,968,830),29321=>array(66,-67,957,837),29322=>array(25,-62,932,830),29323=>array(44,-67,947,830),29324=>array(42,-77,973,827),29325=>array(39,-68,962,830),29326=>array(65,-64,962,831),29327=>array(28,-79,906,832),29328=>array(47,-73,954,826),29329=>array(41,-75,970,825),29330=>array(42,-71,950,826),29331=>array(53,-69,914,830),29332=>array(42,-71,974,851),29333=>array(43,-72,952,823),29334=>array(60,-68,954,847),29335=>array(43,-65,965,850),29336=>array(57,-69,947,843),29337=>array(42,-73,947,848),29338=>array(43,-68,958,824),29339=>array(52,-68,965,834),29340=>array(22,-73,973,837),29341=>array(45,-65,954,835),29342=>array(51,-70,976,825),29343=>array(62,-67,912,781),29344=>array(33,-70,965,853),29345=>array(33,-70,944,825),29346=>array(39,-84,956,835),29347=>array(37,-76,973,837),29348=>array(38,-67,980,826),29349=>array(29,-69,966,840),29350=>array(28,-59,983,833),29351=>array(33,-63,960,841),29352=>array(40,-67,947,840),29353=>array(52,-73,975,833),29354=>array(30,-65,972,846),29355=>array(39,-66,946,839),29356=>array(77,-71,949,826),29357=>array(257,-63,643,790),29358=>array(60,-73,962,834),29359=>array(60,-59,933,809),29360=>array(42,-70,963,829),29361=>array(33,-69,952,833),29362=>array(103,-71,950,824),29363=>array(97,-56,897,851),29364=>array(35,-64,945,824),29365=>array(57,-55,960,829),29366=>array(44,-68,940,823),29367=>array(34,-65,911,832),29368=>array(29,-65,889,798),29369=>array(40,-70,956,817),29370=>array(47,-69,959,832),29371=>array(52,-62,950,840),29372=>array(42,-69,959,823),29373=>array(48,-62,951,820),29374=>array(92,-62,942,831),29375=>array(52,-65,943,829),29376=>array(40,-69,951,818),29377=>array(44,-63,956,839),29378=>array(50,-66,948,807),29379=>array(24,-45,944,830),29380=>array(50,-70,972,825),29381=>array(43,-57,943,807),29382=>array(57,-61,913,833),29383=>array(73,-61,964,835),29384=>array(32,-60,942,799),29385=>array(39,-44,950,813),29386=>array(45,-68,973,785),29387=>array(38,-72,973,804),29388=>array(47,-47,951,827),29389=>array(47,-52,958,834),29390=>array(69,-64,920,822),29391=>array(69,-55,943,831),29392=>array(32,-77,970,838),29393=>array(47,-76,960,836),29394=>array(61,-68,934,822),29395=>array(47,-70,958,835),29396=>array(32,-80,963,796),29397=>array(35,-73,920,831),29398=>array(35,-66,966,834),29399=>array(60,-61,921,842),29400=>array(36,-70,963,824),29401=>array(47,-54,957,801),29402=>array(43,-50,958,820),29403=>array(70,-66,886,843),29404=>array(51,-68,953,830),29405=>array(41,-58,934,836),29406=>array(43,-61,924,849),29407=>array(46,-50,962,816),29408=>array(48,-71,969,811),29409=>array(52,-65,963,812),29410=>array(53,-67,973,839),29411=>array(47,-67,963,833),29412=>array(49,-73,953,823),29413=>array(64,-64,909,836),29414=>array(43,-68,956,827),29415=>array(64,-64,958,834),29416=>array(45,-80,967,818),29417=>array(48,-59,954,824),29418=>array(50,-67,911,811),29419=>array(39,-60,955,826),29420=>array(33,-58,948,827),29421=>array(29,-63,942,832),29422=>array(29,-71,930,822),29423=>array(36,-60,955,837),29424=>array(32,-60,920,837),29425=>array(33,-74,959,822),29426=>array(20,-62,948,832),29427=>array(29,-62,971,855),29428=>array(50,-50,958,831),29429=>array(50,-62,957,826),29430=>array(45,-71,956,834),29431=>array(75,-65,918,815),29432=>array(45,-57,958,820),29433=>array(31,-63,967,833),29434=>array(47,-62,959,844),29435=>array(41,-64,973,854),29436=>array(37,-75,968,831),29437=>array(45,-70,962,794),29438=>array(47,-71,960,826),29439=>array(58,-65,971,792),29440=>array(45,-69,966,823),29441=>array(54,-64,917,830),29442=>array(51,-64,956,816),29443=>array(32,-68,946,832),29444=>array(52,-60,965,846),29445=>array(52,-65,950,829),29446=>array(38,-68,965,831),29447=>array(49,-70,955,823),29448=>array(65,-67,955,832),29449=>array(65,-71,957,833),29450=>array(47,-65,953,832),29451=>array(40,-62,962,845),29452=>array(38,-70,969,826),29453=>array(55,-65,984,836),29454=>array(39,-69,939,817),29455=>array(48,-76,908,818),29456=>array(48,-54,970,820),29457=>array(62,-63,958,782),29458=>array(101,-72,962,824),29459=>array(48,-68,968,817),29460=>array(53,-65,951,845),29461=>array(23,-61,945,831),29462=>array(53,-68,911,808),29463=>array(47,-62,955,835),29464=>array(46,-68,914,826),29465=>array(35,-68,963,837),29466=>array(59,-70,953,842),29467=>array(49,-59,958,808),29468=>array(46,-65,954,837),29469=>array(49,-67,953,819),29470=>array(40,-65,978,850),29471=>array(50,-63,968,827),29472=>array(40,-74,960,829),29473=>array(35,-64,894,808),29474=>array(62,-68,927,829),29475=>array(43,-73,959,813),29476=>array(35,-66,959,809),29477=>array(44,-64,964,809),29478=>array(46,-74,961,792),29479=>array(72,-69,923,793),29480=>array(32,-60,959,841),29481=>array(42,-61,951,803),29482=>array(49,-56,921,836),29483=>array(24,-69,933,824),29484=>array(56,-65,911,803),29485=>array(49,-66,966,828),29486=>array(55,-54,955,842),29487=>array(61,-69,950,830),29488=>array(42,-64,974,831),29489=>array(43,-64,961,819),29490=>array(68,-65,933,790),29491=>array(33,-61,967,819),29492=>array(36,-71,975,827),29493=>array(65,-73,929,825),29494=>array(40,-71,955,840),29495=>array(57,-69,970,845),29496=>array(40,-74,897,815),29497=>array(41,-53,962,835),29498=>array(41,-64,966,850),29499=>array(30,-62,962,831),29500=>array(20,-71,943,829),29501=>array(38,-73,950,789),29502=>array(25,-72,929,819),29503=>array(42,-69,977,833),29504=>array(30,-78,977,833),29505=>array(40,-61,922,819),29506=>array(39,-75,979,804),29507=>array(45,-55,969,842),29508=>array(37,-66,970,826),29509=>array(39,-67,954,840),29510=>array(50,-64,979,849),29511=>array(50,-64,974,828),29512=>array(50,-57,962,842),29513=>array(35,-70,984,836),29514=>array(40,-73,963,845),29515=>array(38,-74,960,852),29516=>array(29,-72,973,812),29517=>array(53,-65,958,851),29518=>array(39,-64,970,843),29519=>array(44,-72,971,823),29520=>array(44,-64,949,840),29521=>array(19,-74,953,822),29522=>array(25,-68,949,830),29523=>array(44,-71,960,838),29524=>array(44,-74,960,852),29525=>array(44,-65,953,833),29526=>array(59,-75,947,827),29527=>array(44,-74,981,805),29528=>array(33,-54,965,857),29529=>array(23,-80,977,826),29530=>array(39,-73,955,827),29531=>array(42,-68,983,827),29532=>array(44,-74,954,832),29533=>array(56,-68,924,824),29534=>array(51,-42,962,838),29535=>array(41,-70,961,833),29536=>array(35,-61,967,846),29537=>array(52,-57,932,833),29538=>array(39,-67,973,835),29539=>array(45,-67,972,833),29540=>array(44,-73,973,837),29541=>array(46,-75,960,835),29542=>array(37,-63,943,827),29543=>array(39,-55,965,826),29544=>array(64,-66,920,791),29545=>array(41,-66,967,826),29546=>array(32,-62,984,863),29547=>array(26,-63,975,864),29548=>array(44,-67,960,838),29549=>array(12,-60,936,838),29550=>array(34,-67,975,834),29551=>array(49,-62,966,828),29552=>array(40,-67,957,816),29553=>array(57,-66,960,842),29554=>array(30,-64,964,840),29555=>array(47,-66,951,791),29556=>array(37,-65,951,831),29557=>array(36,-74,971,842),29558=>array(39,-76,969,824),29559=>array(40,-71,972,838),29560=>array(59,-67,972,829),29561=>array(40,-72,954,830),29562=>array(37,-71,975,833),29563=>array(38,-76,958,831),29564=>array(35,-64,973,829),29565=>array(36,-69,987,842),29566=>array(43,-67,959,835),29567=>array(43,-74,963,808),29568=>array(41,-64,959,822),29569=>array(38,-67,961,813),29570=>array(38,-71,963,823),29571=>array(36,-60,965,831),29572=>array(95,-57,915,819),29573=>array(65,-70,973,852),29574=>array(44,-65,956,818),29575=>array(72,-69,928,840),29576=>array(64,-71,970,836),29577=>array(117,0,908,753),29578=>array(85,-30,935,770),29579=>array(92,14,908,766),29580=>array(81,-38,943,822),29581=>array(59,-17,934,825),29582=>array(71,-69,956,790),29583=>array(71,-76,892,823),29584=>array(51,-60,960,775),29585=>array(37,-67,936,762),29586=>array(57,-23,957,763),29587=>array(64,-69,920,829),29588=>array(57,-70,912,822),29589=>array(40,-65,951,787),29590=>array(41,-64,979,835),29591=>array(54,-74,953,785),29592=>array(54,-26,957,778),29593=>array(54,-67,922,825),29594=>array(54,-63,927,769),29595=>array(51,-60,909,787),29596=>array(44,-60,957,806),29597=>array(50,-73,949,821),29598=>array(49,-64,963,833),29599=>array(51,-58,972,827),29600=>array(48,-65,987,855),29601=>array(44,-75,956,775),29602=>array(42,-62,984,820),29603=>array(47,-64,935,841),29604=>array(42,-73,954,823),29605=>array(60,-71,905,785),29606=>array(47,-63,991,837),29607=>array(47,-60,964,834),29608=>array(56,-17,952,767),29609=>array(51,-68,958,779),29610=>array(43,-62,975,831),29611=>array(60,-59,957,840),29612=>array(55,-78,956,779),29613=>array(44,-67,958,823),29614=>array(42,-67,893,825),29615=>array(38,-57,951,782),29616=>array(33,-59,930,788),29617=>array(45,-33,950,828),29618=>array(37,-68,964,840),29619=>array(39,-65,953,835),29620=>array(50,-20,957,824),29621=>array(51,-73,955,827),29622=>array(47,-71,956,782),29623=>array(39,-67,945,832),29624=>array(48,-38,956,827),29625=>array(43,-55,961,829),29626=>array(35,-48,915,826),29627=>array(64,-64,969,830),29628=>array(46,-43,966,810),29629=>array(46,-54,909,849),29630=>array(49,-71,917,780),29631=>array(49,-74,906,783),29632=>array(66,-63,882,846),29633=>array(66,-29,961,779),29634=>array(50,-65,961,779),29635=>array(47,-73,956,831),29636=>array(47,-12,952,827),29637=>array(53,-61,917,838),29638=>array(49,-72,952,842),29639=>array(49,-27,954,783),29640=>array(43,-70,907,830),29641=>array(41,-55,964,794),29642=>array(54,-61,951,789),29643=>array(45,-70,911,830),29644=>array(48,-30,963,824),29645=>array(67,-72,974,849),29646=>array(53,-52,964,847),29647=>array(53,-13,950,760),29648=>array(52,-64,949,829),29649=>array(32,-61,926,824),29650=>array(59,-72,954,827),29651=>array(58,-66,971,837),29652=>array(57,-64,954,832),29653=>array(57,-65,959,835),29654=>array(57,-65,955,821),29655=>array(52,-59,957,827),29656=>array(51,-67,951,836),29657=>array(41,-68,965,831),29658=>array(58,-71,907,771),29659=>array(60,-68,954,828),29660=>array(54,-67,954,833),29661=>array(57,-71,905,780),29662=>array(45,-66,972,840),29663=>array(40,-66,993,789),29664=>array(66,-62,978,837),29665=>array(50,-60,951,795),29666=>array(76,-71,957,781),29667=>array(62,-59,914,837),29668=>array(25,-64,963,834),29669=>array(25,-66,949,789),29670=>array(25,-55,900,875),29671=>array(50,-64,969,835),29672=>array(58,-69,958,829),29673=>array(45,-67,956,833),29674=>array(38,-21,951,831),29675=>array(50,-67,966,840),29676=>array(60,-61,971,835),29677=>array(50,-61,951,811),29678=>array(45,-72,977,788),29679=>array(38,-32,959,833),29680=>array(38,-60,899,829),29681=>array(38,-52,959,782),29682=>array(37,-69,920,764),29683=>array(49,-58,957,834),29684=>array(49,-64,958,828),29685=>array(56,-14,954,788),29686=>array(56,-68,915,822),29687=>array(36,-64,962,833),29688=>array(58,-71,953,775),29689=>array(36,-68,951,834),29690=>array(62,-69,956,787),29691=>array(35,-69,955,843),29692=>array(57,-73,959,782),29693=>array(44,-64,973,832),29694=>array(56,-65,944,780),29695=>array(56,-71,969,780),29696=>array(57,-71,964,830),29697=>array(59,-73,968,831),29698=>array(61,-62,930,845),29699=>array(53,-63,959,831),29700=>array(57,-65,894,782),29701=>array(46,-66,965,815),29702=>array(35,-16,945,775),29703=>array(47,-63,963,833),29704=>array(55,-67,954,819),29705=>array(30,-70,960,830),29706=>array(43,-67,958,789),29707=>array(53,-68,953,837),29708=>array(54,-71,967,824),29709=>array(47,-65,900,832),29710=>array(57,-19,975,817),29711=>array(32,-49,938,827),29712=>array(35,-65,933,828),29713=>array(35,-67,940,833),29714=>array(43,-65,963,846),29715=>array(35,-69,968,828),29716=>array(35,-83,949,831),29717=>array(35,-65,957,841),29718=>array(47,-70,954,835),29719=>array(35,-71,943,839),29720=>array(35,-65,960,833),29721=>array(35,-68,965,835),29722=>array(52,-67,964,787),29723=>array(30,-67,958,786),29724=>array(35,-65,972,836),29725=>array(55,-74,963,787),29726=>array(55,-26,945,796),29727=>array(35,-65,955,843),29728=>array(53,-72,965,826),29729=>array(55,-76,962,822),29730=>array(32,-65,971,774),29731=>array(55,-68,951,838),29732=>array(43,-59,967,849),29733=>array(39,-67,940,834),29734=>array(48,-61,957,841),29735=>array(63,-22,958,784),29736=>array(53,-57,970,790),29737=>array(76,-67,918,787),29738=>array(50,-68,960,836),29739=>array(50,-71,959,831),29740=>array(49,-65,967,836),29741=>array(57,-67,962,830),29742=>array(47,-62,959,821),29743=>array(47,-65,924,837),29744=>array(53,-65,980,838),29745=>array(63,-72,911,774),29746=>array(47,-71,958,832),29747=>array(37,-63,964,826),29748=>array(34,-74,960,802),29749=>array(55,-54,959,791),29750=>array(71,-23,941,787),29751=>array(35,-53,976,820),29752=>array(54,-71,953,825),29753=>array(50,-64,960,798),29754=>array(53,-59,962,831),29755=>array(35,-23,982,843),29756=>array(33,-55,971,852),29757=>array(35,-69,959,835),29758=>array(35,-66,971,774),29759=>array(43,-62,967,793),29760=>array(45,-70,912,827),29761=>array(55,-65,930,788),29762=>array(51,-70,900,783),29763=>array(51,-64,970,842),29764=>array(43,-27,954,832),29765=>array(51,-70,969,788),29766=>array(36,-27,954,782),29767=>array(37,-66,948,835),29768=>array(40,-61,973,796),29769=>array(40,-52,963,823),29770=>array(45,-75,963,825),29771=>array(47,-65,960,832),29772=>array(47,-72,975,788),29773=>array(46,-77,977,832),29774=>array(53,-73,960,822),29775=>array(48,-70,951,845),29776=>array(50,-72,954,839),29777=>array(40,-51,960,850),29778=>array(39,-77,954,780),29779=>array(48,-62,965,835),29780=>array(48,-69,970,846),29781=>array(38,-67,969,789),29782=>array(38,-69,970,840),29783=>array(47,-65,982,843),29784=>array(47,-65,952,783),29785=>array(56,-65,920,841),29786=>array(69,-62,893,830),29787=>array(31,-68,962,829),29788=>array(30,-65,972,816),29789=>array(43,-30,948,851),29790=>array(62,-68,939,833),29791=>array(63,-46,958,785),29792=>array(37,-65,913,834),29793=>array(69,-67,954,840),29794=>array(53,-70,965,824),29795=>array(63,-72,965,836),29796=>array(46,-62,959,841),29797=>array(46,-32,964,783),29798=>array(63,-60,928,839),29799=>array(59,-68,971,835),29800=>array(36,-61,959,789),29801=>array(69,-19,935,839),29802=>array(60,-61,911,787),29803=>array(60,-63,937,835),29804=>array(54,-28,954,843),29805=>array(44,-67,956,850),29806=>array(56,-72,977,781),29807=>array(41,-61,954,798),29808=>array(53,-65,947,856),29809=>array(36,-64,955,840),29810=>array(45,-65,995,858),29811=>array(42,-29,951,839),29812=>array(47,-89,964,824),29813=>array(50,-69,971,787),29814=>array(40,-64,913,822),29815=>array(35,-70,944,827),29816=>array(35,-63,943,830),29817=>array(62,-77,967,818),29818=>array(45,-67,930,839),29819=>array(53,-66,955,802),29820=>array(53,-77,952,819),29821=>array(58,-71,968,826),29822=>array(38,-21,946,828),29823=>array(62,-22,957,792),29824=>array(45,-62,962,839),29825=>array(56,-43,972,837),29826=>array(45,-33,972,829),29827=>array(39,-69,943,833),29828=>array(51,-65,952,847),29829=>array(62,-72,982,822),29830=>array(45,-62,957,800),29831=>array(38,-71,972,828),29832=>array(48,-77,983,826),29833=>array(41,-64,962,833),29834=>array(56,-65,959,824),29835=>array(45,-68,952,828),29836=>array(45,-78,953,834),29837=>array(37,-68,945,831),29838=>array(39,-81,928,775),29839=>array(39,-72,988,841),29840=>array(38,-65,975,841),29841=>array(38,-65,961,836),29842=>array(52,-17,964,832),29843=>array(31,-53,957,829),29844=>array(51,-72,892,827),29845=>array(50,-67,950,783),29846=>array(45,-65,969,799),29847=>array(60,-46,954,818),29848=>array(57,-66,959,837),29849=>array(57,-67,969,850),29850=>array(50,-67,920,787),29851=>array(32,-67,954,831),29852=>array(37,-74,923,824),29853=>array(37,-70,966,833),29854=>array(47,-63,964,828),29855=>array(36,-57,951,801),29856=>array(43,-64,973,836),29857=>array(39,-64,967,844),29858=>array(62,-71,926,797),29859=>array(45,-61,972,839),29860=>array(48,-35,979,826),29861=>array(48,-70,977,830),29862=>array(48,-63,985,840),29863=>array(48,-39,946,836),29864=>array(37,-66,979,839),29865=>array(48,-64,980,837),29866=>array(45,-70,966,784),29867=>array(45,-62,935,836),29868=>array(50,-71,962,845),29869=>array(48,-73,971,811),29870=>array(42,-30,956,848),29871=>array(42,-64,994,858),29872=>array(40,-61,962,808),29873=>array(46,-67,970,782),29874=>array(47,-64,959,816),29875=>array(46,-69,966,816),29876=>array(50,-69,961,826),29877=>array(40,-66,969,840),29878=>array(50,-37,949,823),29879=>array(35,-71,973,832),29880=>array(62,-77,941,831),29881=>array(41,-65,968,833),29882=>array(84,-37,938,836),29883=>array(53,-68,949,785),29884=>array(40,-23,957,839),29885=>array(53,-42,962,799),29886=>array(60,-71,963,837),29887=>array(41,-63,981,841),29888=>array(49,-72,944,780),29889=>array(44,-74,967,823),29890=>array(49,-35,955,819),29891=>array(51,-65,928,786),29892=>array(40,-67,962,836),29893=>array(36,-70,972,839),29894=>array(40,-61,962,813),29895=>array(40,-64,963,789),29896=>array(35,-62,974,830),29897=>array(40,-72,958,829),29898=>array(56,-65,975,845),29899=>array(31,-66,968,839),29900=>array(40,-67,965,847),29901=>array(28,-67,969,831),29902=>array(37,-67,959,840),29903=>array(52,-61,972,834),29904=>array(45,-67,953,830),29905=>array(40,-60,966,790),29906=>array(38,-71,925,825),29907=>array(40,-65,909,787),29908=>array(37,-64,955,788),29909=>array(63,-35,968,778),29910=>array(47,-73,966,839),29911=>array(57,-63,933,838),29912=>array(54,-68,956,826),29913=>array(42,-70,960,832),29914=>array(46,-69,969,836),29915=>array(30,-62,974,832),29916=>array(59,-57,956,834),29917=>array(32,-77,991,826),29918=>array(38,-67,992,837),29919=>array(36,-73,959,837),29920=>array(36,-67,964,838),29921=>array(57,-73,976,826),29922=>array(47,-69,973,834),29923=>array(32,-69,958,828),29924=>array(37,-66,969,856),29925=>array(51,-65,971,836),29926=>array(83,-35,941,773),29927=>array(36,-29,958,771),29928=>array(44,-63,966,783),29929=>array(36,-29,958,771),29930=>array(49,-29,955,811),29931=>array(65,-64,943,842),29932=>array(41,-74,968,838),29933=>array(39,-77,968,820),29934=>array(43,-56,956,807),29935=>array(104,-58,954,766),29936=>array(36,-29,963,782),29937=>array(36,-29,968,771),29938=>array(36,-29,953,822),29939=>array(56,-75,968,818),29940=>array(37,-65,969,838),29941=>array(62,-72,960,832),29942=>array(48,-61,962,842),29943=>array(75,-60,951,838),29944=>array(36,-29,958,772),29945=>array(99,-64,968,791),29946=>array(49,-60,970,800),29947=>array(36,-65,969,831),29948=>array(49,-29,955,786),29949=>array(78,-56,963,833),29950=>array(38,-64,960,824),29951=>array(50,-50,955,839),29952=>array(39,-71,970,827),29953=>array(39,-71,964,835),29954=>array(36,-74,974,832),29955=>array(58,-54,962,836),29956=>array(30,-48,947,784),29957=>array(38,-29,960,790),29958=>array(65,-63,962,854),29959=>array(97,-66,934,825),29960=>array(43,-75,962,838),29961=>array(34,-77,974,836),29962=>array(35,-69,966,830),29963=>array(65,-70,962,829),29964=>array(105,-74,950,787),29965=>array(74,-66,961,828),29966=>array(70,-66,945,827),29967=>array(60,-59,954,834),29968=>array(37,-68,958,828),29969=>array(83,-64,964,848),29970=>array(44,-68,961,824),29971=>array(24,-47,938,825),29972=>array(34,-68,985,829),29973=>array(66,-55,966,838),29974=>array(55,-68,957,785),29975=>array(33,-59,949,835),29976=>array(76,-68,927,827),29977=>array(49,-76,959,828),29978=>array(66,-72,934,835),29979=>array(32,-48,959,845),29980=>array(34,-58,945,834),29981=>array(35,-75,962,823),29982=>array(74,-47,939,836),29983=>array(60,-8,934,824),29984=>array(129,-23,956,830),29985=>array(37,-29,956,830),29986=>array(50,-76,930,838),29987=>array(49,-74,928,831),29988=>array(72,-56,970,811),29989=>array(73,-57,923,812),29990=>array(40,-69,966,811),29991=>array(45,-66,952,829),29992=>array(52,-73,855,788),29993=>array(65,-61,936,785),29994=>array(74,-67,847,842),29995=>array(62,-67,956,843),29996=>array(140,-65,856,798),29997=>array(53,-81,935,783),29998=>array(48,-67,916,844),29999=>array(63,-61,945,836),30000=>array(133,-68,867,762),30001=>array(137,-70,862,833),30002=>array(140,-69,860,785),30003=>array(149,-67,851,833),30004=>array(172,-67,839,832),30005=>array(148,-31,954,824),30006=>array(149,-65,872,833),30007=>array(85,-62,889,783),30008=>array(37,-56,914,856),30009=>array(65,-68,939,833),30010=>array(107,-53,954,790),30011=>array(75,-57,925,800),30012=>array(98,-46,914,810),30013=>array(99,-74,891,823),30014=>array(126,-62,879,844),30015=>array(101,-7,948,830),30016=>array(50,-65,957,779),30017=>array(50,-55,957,833),30018=>array(98,-59,965,850),30019=>array(90,-59,921,837),30020=>array(153,-62,845,824),30021=>array(90,-56,889,830),30022=>array(46,-66,965,823),30023=>array(99,-63,912,845),30024=>array(107,-66,978,791),30025=>array(96,-68,962,833),30026=>array(88,-64,952,828),30027=>array(76,-52,955,835),30028=>array(54,-70,961,782),30029=>array(96,-72,974,835),30030=>array(110,-66,981,831),30031=>array(64,-69,944,780),30032=>array(72,-52,945,791),30033=>array(51,-59,903,838),30034=>array(56,-50,963,833),30035=>array(60,-72,967,813),30036=>array(93,-67,938,839),30037=>array(178,-72,823,780),30038=>array(81,-70,970,836),30039=>array(109,-72,902,843),30040=>array(79,-62,955,839),30041=>array(75,-68,897,818),30042=>array(29,-67,975,848),30043=>array(111,-64,978,853),30044=>array(76,-59,920,836),30045=>array(56,-65,972,836),30046=>array(77,-70,968,838),30047=>array(50,-69,965,817),30048=>array(143,-68,867,845),30049=>array(86,-61,943,846),30050=>array(58,-69,947,801),30051=>array(34,-68,968,834),30052=>array(106,-62,955,832),30053=>array(110,-66,962,839),30054=>array(89,-22,943,828),30055=>array(48,-75,963,812),30056=>array(50,-70,959,808),30057=>array(96,-64,959,795),30058=>array(53,-70,957,836),30059=>array(82,-24,938,836),30060=>array(37,-67,966,854),30061=>array(81,-62,961,850),30062=>array(94,-62,954,847),30063=>array(69,-69,961,849),30064=>array(72,-74,926,784),30065=>array(89,-71,916,797),30066=>array(33,-72,973,847),30067=>array(54,-50,952,813),30068=>array(82,-58,911,831),30069=>array(79,-34,934,836),30070=>array(103,-68,914,841),30071=>array(77,-67,976,786),30072=>array(97,-62,939,835),30073=>array(101,-63,966,844),30074=>array(54,-20,951,803),30075=>array(74,-14,972,836),30076=>array(92,-61,938,782),30077=>array(103,-15,953,851),30078=>array(115,-69,908,783),30079=>array(56,-69,963,839),30080=>array(42,-71,969,828),30081=>array(74,-73,970,811),30082=>array(54,-46,952,786),30083=>array(94,-42,961,840),30084=>array(100,-70,955,822),30085=>array(84,-48,961,814),30086=>array(31,-61,951,814),30087=>array(87,-63,938,833),30088=>array(52,-82,943,829),30089=>array(51,-39,949,822),30090=>array(54,-31,952,791),30091=>array(28,-66,975,773),30092=>array(52,-70,968,835),30093=>array(68,-7,957,787),30094=>array(30,-65,966,827),30095=>array(35,-71,960,821),30096=>array(59,-81,955,837),30097=>array(33,-68,945,827),30098=>array(37,-63,898,822),30099=>array(37,-63,914,822),30100=>array(63,-65,944,823),30101=>array(36,-59,957,852),30102=>array(30,-63,899,838),30103=>array(35,-59,924,842),30104=>array(36,-75,954,833),30105=>array(46,-71,953,852),30106=>array(48,-69,968,820),30107=>array(48,-64,951,841),30108=>array(54,-69,941,845),30109=>array(54,-69,941,815),30110=>array(54,-69,961,845),30111=>array(24,-65,925,836),30112=>array(32,-66,900,838),30113=>array(28,-70,914,840),30114=>array(44,-65,982,855),30115=>array(51,-71,952,825),30116=>array(47,-73,960,845),30117=>array(50,-70,959,825),30118=>array(47,-73,945,845),30119=>array(52,-69,966,841),30120=>array(47,-73,938,845),30121=>array(47,-73,938,845),30122=>array(39,-57,959,854),30123=>array(37,-71,953,840),30124=>array(27,-67,896,849),30125=>array(27,-67,928,850),30126=>array(26,-67,932,840),30127=>array(27,-63,942,848),30128=>array(43,-63,951,849),30129=>array(39,-67,953,829),30130=>array(43,-73,957,831),30131=>array(44,-67,944,834),30132=>array(25,-66,938,851),30133=>array(54,-74,963,841),30134=>array(49,-71,951,830),30135=>array(47,-78,946,835),30136=>array(59,-75,954,829),30137=>array(41,-72,974,826),30138=>array(50,-60,958,835),30139=>array(47,-82,935,834),30140=>array(40,-78,972,825),30141=>array(32,-74,954,839),30142=>array(43,-73,962,829),30143=>array(44,-65,945,849),30144=>array(41,-58,954,855),30145=>array(44,-58,945,852),30146=>array(43,-79,941,832),30147=>array(27,-77,933,834),30148=>array(53,-61,948,856),30149=>array(38,-71,933,840),30150=>array(40,-71,951,847),30151=>array(41,-65,955,827),30152=>array(19,-74,918,848),30153=>array(24,-60,919,827),30154=>array(43,-73,951,830),30155=>array(53,-79,968,835),30156=>array(34,-83,948,840),30157=>array(43,-69,972,833),30158=>array(47,-67,957,846),30159=>array(41,-60,960,850),30160=>array(50,-75,944,829),30161=>array(51,-70,945,836),30162=>array(48,-71,955,827),30163=>array(50,-75,944,829),30164=>array(38,-68,947,844),30165=>array(48,-68,964,825),30166=>array(27,-65,919,846),30167=>array(36,-51,964,859),30168=>array(45,-75,949,826),30169=>array(45,-72,954,839),30170=>array(56,-82,962,832),30171=>array(33,-68,935,834),30172=>array(34,-70,962,847),30173=>array(43,-60,962,841),30174=>array(44,-68,961,834),30175=>array(57,-68,945,843),30176=>array(48,-73,983,846),30177=>array(31,-73,954,843),30178=>array(46,-69,944,835),30179=>array(45,-63,960,836),30180=>array(49,-67,954,847),30181=>array(33,-73,951,847),30182=>array(57,-68,955,835),30183=>array(39,-65,965,845),30184=>array(56,-67,922,852),30185=>array(37,-70,961,831),30186=>array(29,-74,955,846),30187=>array(20,-65,913,839),30188=>array(42,-69,941,841),30189=>array(44,-73,959,845),30190=>array(43,-75,965,840),30191=>array(34,-55,959,858),30192=>array(55,-70,958,832),30193=>array(45,-70,942,848),30194=>array(34,-66,957,838),30195=>array(40,-69,971,834),30196=>array(38,-67,941,834),30197=>array(36,-71,974,851),30198=>array(45,-72,960,851),30199=>array(36,-63,965,849),30200=>array(31,-73,930,839),30201=>array(46,-68,951,843),30202=>array(59,-67,959,834),30203=>array(39,-75,960,845),30204=>array(33,-65,941,836),30205=>array(31,-68,954,848),30206=>array(35,-67,956,842),30207=>array(33,-67,945,834),30208=>array(38,-64,964,837),30209=>array(48,-66,952,838),30210=>array(38,-77,935,843),30211=>array(30,-65,967,848),30212=>array(37,-64,942,841),30213=>array(37,-71,939,846),30214=>array(14,-67,912,845),30215=>array(34,-55,954,854),30216=>array(46,-64,974,855),30217=>array(39,-64,955,826),30218=>array(38,-65,955,852),30219=>array(38,-66,960,838),30220=>array(38,-70,944,847),30221=>array(55,-70,956,845),30222=>array(38,-67,944,840),30223=>array(33,-55,961,857),30224=>array(41,-69,974,850),30225=>array(45,-69,948,848),30226=>array(41,-75,938,848),30227=>array(46,-72,972,849),30228=>array(51,-73,961,838),30229=>array(44,-67,981,854),30230=>array(27,-54,954,860),30231=>array(26,-68,934,847),30232=>array(38,-69,911,835),30233=>array(30,-69,961,836),30234=>array(42,-70,971,836),30235=>array(24,-60,970,855),30236=>array(47,-66,981,840),30237=>array(40,-58,969,861),30238=>array(36,-62,976,848),30239=>array(37,-72,938,833),30240=>array(34,-67,962,841),30241=>array(35,-70,966,841),30242=>array(32,-73,957,841),30243=>array(46,-65,958,831),30244=>array(46,-74,948,841),30245=>array(43,-66,956,851),30246=>array(22,-68,959,851),30247=>array(44,-74,942,833),30248=>array(45,-79,963,837),30249=>array(46,-61,952,849),30250=>array(21,-67,933,823),30251=>array(26,-65,923,840),30252=>array(26,-65,963,840),30253=>array(44,-66,979,847),30254=>array(26,-73,967,847),30255=>array(45,-69,955,834),30256=>array(52,-76,951,841),30257=>array(50,-69,966,836),30258=>array(53,-64,978,854),30259=>array(32,-68,971,851),30260=>array(23,-66,943,841),30261=>array(33,-67,963,847),30262=>array(52,-65,970,848),30263=>array(52,-65,979,848),30264=>array(45,-65,943,848),30265=>array(52,-65,951,848),30266=>array(31,-69,948,852),30267=>array(36,-73,941,829),30268=>array(49,-67,980,850),30269=>array(37,-62,954,836),30270=>array(26,-65,970,832),30271=>array(29,-65,909,838),30272=>array(23,-81,928,826),30273=>array(23,-87,940,826),30274=>array(46,-65,964,830),30275=>array(33,-67,971,847),30276=>array(23,-91,937,826),30277=>array(23,-71,912,836),30278=>array(49,-66,941,841),30279=>array(29,-57,942,846),30280=>array(35,-62,963,829),30281=>array(35,-65,947,849),30282=>array(35,-70,973,853),30283=>array(57,-69,967,854),30284=>array(38,-68,933,844),30285=>array(24,-68,923,835),30286=>array(37,-64,937,840),30287=>array(37,-64,957,850),30288=>array(51,-68,983,849),30289=>array(37,-87,957,850),30290=>array(42,-58,971,836),30291=>array(49,-73,983,831),30292=>array(25,-61,931,828),30293=>array(42,-57,957,836),30294=>array(45,-73,956,833),30295=>array(42,-67,933,836),30296=>array(53,-65,948,844),30297=>array(42,-74,969,832),30298=>array(37,-71,936,833),30299=>array(48,-67,989,843),30300=>array(45,-67,980,841),30301=>array(48,-69,920,838),30302=>array(21,-71,912,835),30303=>array(44,-69,973,844),30304=>array(38,-71,982,846),30305=>array(51,-71,976,844),30306=>array(45,-76,947,840),30307=>array(25,-66,920,841),30308=>array(57,-73,959,837),30309=>array(40,-69,973,852),30310=>array(50,-78,948,846),30311=>array(43,-65,962,836),30312=>array(47,-75,946,834),30313=>array(42,-67,985,854),30314=>array(40,-69,964,854),30315=>array(29,-69,919,838),30316=>array(45,-66,956,854),30317=>array(50,-68,939,850),30318=>array(38,-71,974,845),30319=>array(35,-77,947,844),30320=>array(35,-78,959,854),30321=>array(47,-71,954,856),30322=>array(39,-77,967,854),30323=>array(27,-60,972,853),30324=>array(21,-77,958,849),30325=>array(46,-72,963,833),30326=>array(100,220,956,730),30327=>array(80,-55,936,839),30328=>array(80,-78,936,840),30329=>array(38,-69,967,840),30330=>array(47,-51,957,837),30331=>array(57,-13,957,837),30332=>array(52,-63,960,829),30333=>array(199,-64,822,833),30334=>array(98,-67,914,780),30335=>array(113,-47,959,830),30336=>array(200,-26,891,841),30337=>array(53,-49,947,866),30338=>array(74,-26,924,842),30339=>array(60,-67,950,836),30340=>array(101,-54,882,838),30341=>array(94,-27,941,842),30342=>array(64,-62,947,837),30343=>array(80,-28,932,845),30344=>array(87,-80,954,831),30345=>array(107,-39,959,834),30346=>array(119,-78,962,839),30347=>array(33,-64,959,849),30348=>array(100,-53,967,847),30349=>array(134,-61,898,837),30350=>array(90,-60,952,824),30351=>array(111,-69,954,835),30352=>array(53,-64,947,849),30353=>array(76,-19,944,820),30354=>array(100,-72,956,829),30355=>array(84,-64,923,831),30356=>array(84,-62,944,810),30357=>array(56,-63,947,776),30358=>array(86,-62,930,825),30359=>array(93,-67,907,810),30360=>array(84,-59,959,838),30361=>array(42,-63,943,847),30362=>array(92,-20,933,839),30363=>array(114,-69,889,834),30364=>array(110,-63,957,837),30365=>array(69,-70,964,833),30366=>array(117,-69,982,831),30367=>array(112,-68,975,839),30368=>array(97,-65,953,833),30369=>array(92,-74,960,852),30370=>array(92,-61,964,837),30371=>array(88,-68,946,831),30372=>array(79,-67,948,836),30373=>array(90,-74,960,852),30374=>array(82,-55,954,857),30375=>array(82,-62,946,841),30376=>array(60,-43,954,842),30377=>array(43,-73,970,838),30378=>array(98,-52,969,851),30379=>array(87,-72,956,845),30380=>array(82,-67,941,817),30381=>array(110,-63,963,845),30382=>array(53,-71,940,832),30383=>array(33,-81,951,826),30384=>array(33,-62,965,836),30385=>array(27,-68,939,833),30386=>array(41,-67,932,821),30387=>array(33,-75,956,834),30388=>array(31,-75,956,844),30389=>array(57,-76,966,826),30390=>array(30,-75,976,834),30391=>array(36,-70,956,838),30392=>array(50,-68,966,832),30393=>array(38,-67,954,832),30394=>array(45,-73,971,838),30395=>array(46,-73,969,824),30396=>array(47,-73,956,835),30397=>array(47,-66,969,849),30398=>array(51,-71,969,835),30399=>array(70,34,944,715),30400=>array(57,-20,948,822),30401=>array(57,-14,948,784),30402=>array(57,-14,948,789),30403=>array(48,-17,958,770),30404=>array(60,-53,956,757),30405=>array(47,-11,956,841),30406=>array(49,-25,947,794),30407=>array(46,-40,957,827),30408=>array(59,-38,952,784),30409=>array(41,-21,974,836),30410=>array(45,-18,960,840),30411=>array(55,-37,954,836),30412=>array(48,-20,957,830),30413=>array(62,-22,954,838),30414=>array(55,-14,954,835),30415=>array(52,-19,925,823),30416=>array(50,-44,924,799),30417=>array(52,-23,943,820),30418=>array(47,-28,961,851),30419=>array(60,-20,952,821),30420=>array(59,-23,951,840),30421=>array(63,-32,952,817),30422=>array(39,-32,959,847),30423=>array(57,-33,954,840),30424=>array(65,-32,914,831),30425=>array(51,-33,952,834),30426=>array(61,-34,956,809),30427=>array(50,-23,947,832),30428=>array(63,-32,952,843),30429=>array(60,-23,954,850),30430=>array(63,-32,953,840),30431=>array(58,-27,952,789),30432=>array(57,-46,961,848),30433=>array(48,-35,948,829),30434=>array(58,-27,952,802),30435=>array(53,-26,947,824),30436=>array(62,-35,956,842),30437=>array(53,-24,961,837),30438=>array(26,-26,957,869),30439=>array(40,-78,941,833),30440=>array(38,-24,961,788),30441=>array(60,-18,959,834),30442=>array(53,-12,951,823),30443=>array(32,-54,957,863),30444=>array(58,-10,952,850),30445=>array(65,-38,978,842),30446=>array(206,-42,767,771),30447=>array(98,-62,931,770),30448=>array(101,-68,938,783),30449=>array(118,-59,956,789),30450=>array(63,-70,937,826),30451=>array(107,-27,953,824),30452=>array(95,-70,949,835),30453=>array(109,-40,965,833),30454=>array(75,-68,958,778),30455=>array(109,-61,900,821),30456=>array(43,-65,889,828),30457=>array(86,-34,952,829),30458=>array(116,-71,957,828),30459=>array(107,-62,958,803),30460=>array(100,-71,944,803),30461=>array(101,-59,957,826),30462=>array(68,-73,920,834),30463=>array(75,-55,984,851),30464=>array(130,-65,890,787),30465=>array(53,-70,939,829),30466=>array(119,-59,945,837),30467=>array(119,-73,962,762),30468=>array(96,-52,949,790),30469=>array(92,-62,971,813),30470=>array(119,-66,954,849),30471=>array(88,-72,943,826),30472=>array(93,-65,931,826),30473=>array(52,-70,880,781),30474=>array(101,-55,943,811),30475=>array(71,-67,912,818),30476=>array(73,-62,949,799),30477=>array(96,-21,919,763),30478=>array(85,-58,951,755),30479=>array(96,-67,953,832),30480=>array(114,-21,953,773),30481=>array(106,-70,916,827),30482=>array(119,-70,917,830),30483=>array(99,-73,959,827),30484=>array(50,-67,946,785),30485=>array(116,-71,967,835),30486=>array(119,-62,960,773),30487=>array(119,-58,924,844),30488=>array(42,-57,971,821),30489=>array(118,-65,952,835),30490=>array(65,-62,961,843),30491=>array(124,-64,987,839),30492=>array(124,-64,987,839),30493=>array(118,-64,927,827),30494=>array(78,-84,951,835),30495=>array(64,-84,936,835),30496=>array(98,-71,956,785),30497=>array(94,-53,963,829),30498=>array(34,-65,958,843),30499=>array(116,-71,973,835),30500=>array(95,-71,929,784),30501=>array(44,-52,947,852),30502=>array(76,-56,931,823),30503=>array(110,-73,903,780),30504=>array(96,-69,948,833),30505=>array(88,-49,927,823),30506=>array(88,-68,951,782),30507=>array(95,-55,942,837),30508=>array(88,-67,931,825),30509=>array(124,-21,959,832),30510=>array(88,-70,909,782),30511=>array(80,-64,927,824),30512=>array(88,-42,956,770),30513=>array(106,-78,965,821),30514=>array(110,-70,953,777),30515=>array(107,-71,906,825),30516=>array(111,-40,909,859),30517=>array(119,-65,935,847),30518=>array(94,-21,934,783),30519=>array(39,-67,964,838),30520=>array(86,-62,929,849),30521=>array(103,-51,969,853),30522=>array(104,-67,943,828),30523=>array(110,-70,954,823),30524=>array(96,-64,965,794),30525=>array(105,-74,966,820),30526=>array(57,-67,955,785),30527=>array(88,-61,976,840),30528=>array(39,-69,929,839),30529=>array(101,-72,922,824),30530=>array(37,-67,938,841),30531=>array(97,-73,930,835),30532=>array(104,-67,909,825),30533=>array(107,-49,955,806),30534=>array(98,-55,951,834),30535=>array(110,-64,915,853),30536=>array(88,-16,952,788),30537=>array(88,-24,958,829),30538=>array(107,-48,902,803),30539=>array(97,-68,954,828),30540=>array(100,-71,949,825),30541=>array(96,-50,954,804),30542=>array(109,-47,948,864),30543=>array(112,-68,903,782),30544=>array(100,-69,940,820),30545=>array(96,-18,937,823),30546=>array(118,-75,983,829),30547=>array(100,-74,960,829),30548=>array(105,-70,969,840),30549=>array(112,-66,967,844),30550=>array(112,-74,972,823),30551=>array(105,-66,929,781),30552=>array(76,-73,930,781),30553=>array(110,-79,979,829),30554=>array(97,-72,933,790),30555=>array(109,-68,935,831),30556=>array(98,-63,930,836),30557=>array(72,-69,908,849),30558=>array(110,-64,970,830),30559=>array(95,-48,939,857),30560=>array(109,-30,965,841),30561=>array(87,-26,947,833),30562=>array(98,-64,937,832),30563=>array(57,-67,956,835),30564=>array(104,-64,955,792),30565=>array(104,-64,951,856),30566=>array(96,-30,948,826),30567=>array(97,-48,944,860),30568=>array(137,-57,969,845),30569=>array(118,-73,966,838),30570=>array(78,-70,932,783),30571=>array(92,-72,941,833),30572=>array(94,-65,944,831),30573=>array(113,-68,911,780),30574=>array(108,-67,980,839),30575=>array(88,-69,941,834),30576=>array(92,-65,948,829),30577=>array(88,-68,965,791),30578=>array(92,-22,945,788),30579=>array(92,-32,980,829),30580=>array(92,-65,936,787),30581=>array(107,-53,981,829),30582=>array(92,-64,978,842),30583=>array(92,-55,964,827),30584=>array(111,-64,906,789),30585=>array(98,-66,932,831),30586=>array(109,-74,962,834),30587=>array(92,-20,959,855),30588=>array(107,-69,965,786),30589=>array(86,-62,952,833),30590=>array(58,-72,950,849),30591=>array(49,-66,958,833),30592=>array(40,-65,982,845),30593=>array(111,-69,971,785),30594=>array(44,-67,970,832),30595=>array(100,-69,954,831),30596=>array(93,-65,929,835),30597=>array(79,-79,950,828),30598=>array(92,-60,938,832),30599=>array(97,-63,956,833),30600=>array(121,-79,980,781),30601=>array(93,-73,987,827),30602=>array(92,-77,956,843),30603=>array(94,-78,961,833),30604=>array(90,-26,927,833),30605=>array(97,-58,966,841),30606=>array(89,-62,932,824),30607=>array(54,-75,971,782),30608=>array(124,-45,896,816),30609=>array(91,-67,938,790),30610=>array(87,-60,917,826),30611=>array(104,-66,914,838),30612=>array(92,-74,947,833),30613=>array(98,-50,945,854),30614=>array(114,-69,938,813),30615=>array(116,-70,933,828),30616=>array(89,-23,953,801),30617=>array(109,-72,970,826),30618=>array(107,-80,958,837),30619=>array(108,-69,973,835),30620=>array(97,-73,949,821),30621=>array(105,-65,951,834),30622=>array(95,-69,936,831),30623=>array(82,-70,955,789),30624=>array(79,-39,942,823),30625=>array(109,-72,961,822),30626=>array(88,-83,913,830),30627=>array(94,-37,962,823),30628=>array(79,-62,906,793),30629=>array(102,-72,959,841),30630=>array(79,-65,956,836),30631=>array(90,-62,941,837),30632=>array(108,-73,966,821),30633=>array(88,-72,894,779),30634=>array(86,-23,935,843),30635=>array(114,-70,961,782),30636=>array(95,-68,944,830),30637=>array(94,-66,975,841),30638=>array(100,-62,970,847),30639=>array(88,-68,911,796),30640=>array(85,-75,960,828),30641=>array(102,-70,950,824),30642=>array(106,-68,928,783),30643=>array(95,-35,940,833),30644=>array(105,-71,961,827),30645=>array(109,-62,951,838),30646=>array(108,-64,969,839),30647=>array(105,-68,901,785),30648=>array(98,-70,957,827),30649=>array(89,-69,944,838),30650=>array(96,-70,952,839),30651=>array(68,-75,919,838),30652=>array(82,-67,951,852),30653=>array(52,-64,969,836),30654=>array(72,-46,910,801),30655=>array(39,-65,947,790),30656=>array(68,-77,981,828),30657=>array(99,-23,974,825),30658=>array(94,-66,961,786),30659=>array(76,-63,952,844),30660=>array(92,-76,949,830),30661=>array(81,-70,953,805),30662=>array(96,-65,963,828),30663=>array(91,-64,959,820),30664=>array(81,-70,957,848),30665=>array(98,-55,952,856),30666=>array(103,-68,919,835),30667=>array(87,-67,948,808),30668=>array(102,-72,964,850),30669=>array(31,-62,974,799),30670=>array(94,-65,963,844),30671=>array(92,-69,939,853),30672=>array(99,-67,935,785),30673=>array(68,-67,953,832),30674=>array(77,-67,946,833),30675=>array(91,-68,951,831),30676=>array(99,-70,938,824),30677=>array(41,-72,957,840),30678=>array(97,-62,965,804),30679=>array(71,-71,953,842),30680=>array(92,-68,947,830),30681=>array(88,-54,899,806),30682=>array(102,-77,905,786),30683=>array(81,-57,926,793),30684=>array(39,-66,972,850),30685=>array(39,-77,960,846),30686=>array(60,-68,927,786),30687=>array(44,-67,940,833),30688=>array(33,-70,954,825),30689=>array(43,-61,960,811),30690=>array(69,-71,947,828),30691=>array(42,-66,965,843),30692=>array(80,-56,964,837),30693=>array(69,-73,911,838),30694=>array(62,-67,941,836),30695=>array(34,-67,893,831),30696=>array(37,-68,980,834),30697=>array(39,-61,947,825),30698=>array(39,-65,932,834),30699=>array(27,-61,951,839),30700=>array(33,-29,955,832),30701=>array(51,-77,948,809),30702=>array(36,-73,951,833),30703=>array(33,-67,963,827),30704=>array(59,-70,934,838),30705=>array(40,-71,980,827),30706=>array(34,-65,980,837),30707=>array(67,-70,909,768),30708=>array(39,-66,948,761),30709=>array(61,-61,880,824),30710=>array(39,-57,929,774),30711=>array(44,-63,953,786),30712=>array(38,-64,959,780),30713=>array(37,-66,962,788),30714=>array(29,-33,959,828),30715=>array(51,-29,972,837),30716=>array(39,-2,957,761),30717=>array(59,-77,927,841),30718=>array(40,-70,942,785),30719=>array(49,-68,921,818),30720=>array(23,-59,898,767),30721=>array(39,-62,905,768),30722=>array(38,-68,971,824),30723=>array(45,-69,954,785),30724=>array(22,-69,955,829),30725=>array(44,-73,981,821),30726=>array(49,-70,990,836),30727=>array(42,-65,976,842),30728=>array(32,-71,970,772),30729=>array(48,-62,956,842),30730=>array(42,-64,957,843),30731=>array(42,-3,954,822),30732=>array(53,-62,925,829),30733=>array(43,-71,971,844),30734=>array(36,-77,971,828),30735=>array(43,-69,967,785),30736=>array(43,-70,969,786),30737=>array(51,-61,951,778),30738=>array(32,-51,952,818),30739=>array(39,-69,972,785),30740=>array(36,-71,956,780),30741=>array(42,-63,954,837),30742=>array(21,-68,921,826),30743=>array(29,-67,951,820),30744=>array(28,-44,944,824),30745=>array(42,-35,952,780),30746=>array(26,-62,929,788),30747=>array(41,-69,972,837),30748=>array(24,-69,954,781),30749=>array(50,-56,956,827),30750=>array(42,-64,987,839),30751=>array(41,-62,956,848),30752=>array(32,-17,954,792),30753=>array(52,-35,964,765),30754=>array(44,-59,952,783),30755=>array(44,-32,950,844),30756=>array(42,-29,943,831),30757=>array(29,-55,959,831),30758=>array(41,-53,960,843),30759=>array(40,-65,945,827),30760=>array(47,-75,964,832),30761=>array(42,-65,921,831),30762=>array(38,-60,958,784),30763=>array(57,-37,962,824),30764=>array(39,-19,952,816),30765=>array(37,-65,963,830),30766=>array(44,-53,962,855),30767=>array(51,-64,976,828),30768=>array(34,-68,951,780),30769=>array(46,-77,979,841),30770=>array(35,-29,963,835),30771=>array(43,-54,945,779),30772=>array(46,-70,958,835),30773=>array(23,-59,971,836),30774=>array(42,-66,886,843),30775=>array(59,-70,922,836),30776=>array(36,-26,956,788),30777=>array(35,-68,971,830),30778=>array(54,-72,946,761),30779=>array(29,-62,933,826),30780=>array(31,-31,964,840),30781=>array(42,-57,928,786),30782=>array(32,-60,947,828),30783=>array(33,-66,948,822),30784=>array(35,-60,905,830),30785=>array(30,-33,938,772),30786=>array(32,-11,965,845),30787=>array(37,-65,980,839),30788=>array(35,-66,960,831),30789=>array(41,-20,954,832),30790=>array(35,-65,963,841),30791=>array(46,-78,909,839),30792=>array(41,-72,956,824),30793=>array(42,-68,958,824),30794=>array(45,-72,952,822),30795=>array(35,-73,969,836),30796=>array(28,-57,972,849),30797=>array(30,-60,973,791),30798=>array(36,-63,907,832),30799=>array(36,-69,953,788),30800=>array(43,-70,909,782),30801=>array(36,-70,958,839),30802=>array(35,-68,948,780),30803=>array(25,-32,959,833),30804=>array(35,-71,949,826),30805=>array(38,-67,940,775),30806=>array(30,-74,945,826),30807=>array(29,-72,936,821),30808=>array(35,-64,903,795),30809=>array(25,-25,938,826),30810=>array(35,-66,963,823),30811=>array(35,-63,955,846),30812=>array(42,-20,956,791),30813=>array(50,-70,943,833),30814=>array(41,-67,954,829),30815=>array(35,-67,967,824),30816=>array(45,-71,972,834),30817=>array(35,-68,937,832),30818=>array(41,-70,961,819),30819=>array(35,-68,953,830),30820=>array(33,-67,983,833),30821=>array(42,-68,950,838),30822=>array(35,-51,951,802),30823=>array(35,-64,895,785),30824=>array(49,-62,964,838),30825=>array(50,-65,938,830),30826=>array(33,-54,959,830),30827=>array(26,-70,964,830),30828=>array(46,-61,978,784),30829=>array(41,-35,959,805),30830=>array(51,-57,907,852),30831=>array(34,-69,960,787),30832=>array(51,-65,942,830),30833=>array(49,-71,915,777),30834=>array(42,-64,980,833),30835=>array(35,-54,970,835),30836=>array(32,-65,962,828),30837=>array(39,-63,958,839),30838=>array(35,-66,969,830),30839=>array(32,-32,939,811),30840=>array(35,-67,948,836),30841=>array(39,-61,977,829),30842=>array(35,-56,959,785),30843=>array(44,-68,987,782),30844=>array(59,-78,919,779),30845=>array(35,-32,954,839),30846=>array(29,-16,953,853),30847=>array(37,-27,950,837),30848=>array(44,-67,954,827),30849=>array(26,-54,971,843),30850=>array(35,-57,969,850),30851=>array(36,-72,950,823),30852=>array(44,-70,972,823),30853=>array(36,-72,900,780),30854=>array(41,-52,949,843),30855=>array(42,-71,962,833),30856=>array(35,-65,960,833),30857=>array(53,-68,918,785),30858=>array(35,-57,974,840),30859=>array(35,-67,932,836),30860=>array(35,-67,966,836),30861=>array(33,-52,952,796),30862=>array(43,-64,951,834),30863=>array(39,-72,955,820),30864=>array(35,-67,981,839),30865=>array(31,-68,956,844),30866=>array(35,-23,982,843),30867=>array(44,-68,951,840),30868=>array(31,-62,968,831),30869=>array(35,-64,964,835),30870=>array(44,-70,958,847),30871=>array(43,-69,961,834),30872=>array(44,-74,960,829),30873=>array(47,-67,908,786),30874=>array(39,-63,954,840),30875=>array(27,-75,923,826),30876=>array(23,-71,949,839),30877=>array(35,-72,975,788),30878=>array(45,-50,936,798),30879=>array(35,-62,968,833),30880=>array(41,-67,952,837),30881=>array(37,-64,956,830),30882=>array(46,-65,907,785),30883=>array(49,-68,927,788),30884=>array(47,-71,971,823),30885=>array(32,-67,915,824),30886=>array(50,-70,956,849),30887=>array(60,-67,937,845),30888=>array(44,-73,975,784),30889=>array(44,-72,970,783),30890=>array(28,-54,948,841),30891=>array(46,-74,969,825),30892=>array(28,-73,971,785),30893=>array(29,-68,954,788),30894=>array(35,-72,979,788),30895=>array(34,-61,951,849),30896=>array(45,-29,957,845),30897=>array(34,-72,955,834),30898=>array(47,-67,939,842),30899=>array(39,-72,970,829),30900=>array(41,-24,964,830),30901=>array(32,-74,962,836),30902=>array(35,-57,961,834),30903=>array(35,-71,962,839),30904=>array(35,-69,971,789),30905=>array(25,-10,922,818),30906=>array(34,-69,950,843),30907=>array(29,-57,949,835),30908=>array(50,-60,933,781),30909=>array(35,-66,969,791),30910=>array(30,-70,961,785),30911=>array(39,-75,925,795),30912=>array(31,-58,963,838),30913=>array(37,-57,955,836),30914=>array(46,-65,913,834),30915=>array(37,-73,966,832),30916=>array(46,-73,966,830),30917=>array(37,-76,954,834),30918=>array(32,-69,946,793),30919=>array(32,-53,968,852),30920=>array(41,-64,972,857),30921=>array(43,-62,990,790),30922=>array(52,-68,944,788),30923=>array(20,-40,934,849),30924=>array(32,-70,955,825),30925=>array(19,-71,946,841),30926=>array(29,-75,967,841),30927=>array(34,-68,985,840),30928=>array(42,-61,956,844),30929=>array(41,-24,964,831),30930=>array(41,-64,941,785),30931=>array(32,-58,963,844),30932=>array(25,-59,963,849),30933=>array(32,-24,959,832),30934=>array(29,-57,921,800),30935=>array(32,-71,959,838),30936=>array(31,-67,956,827),30937=>array(24,-79,968,846),30938=>array(43,-66,957,831),30939=>array(39,-50,933,846),30940=>array(43,-55,960,850),30941=>array(40,-71,964,827),30942=>array(44,-75,898,824),30943=>array(51,-66,971,783),30944=>array(39,-64,958,839),30945=>array(25,-70,918,831),30946=>array(36,-72,964,824),30947=>array(36,-64,997,858),30948=>array(31,-66,957,837),30949=>array(47,-68,967,780),30950=>array(47,-64,965,787),30951=>array(43,-68,975,839),30952=>array(37,-64,939,833),30953=>array(45,-72,969,825),30954=>array(38,-65,966,838),30955=>array(38,-70,955,836),30956=>array(44,-67,952,832),30957=>array(45,-73,956,785),30958=>array(30,-61,945,841),30959=>array(33,-69,960,835),30960=>array(35,-65,952,846),30961=>array(33,-66,957,833),30962=>array(32,-63,975,829),30963=>array(46,-72,900,824),30964=>array(41,-21,989,838),30965=>array(41,-67,924,787),30966=>array(41,-64,944,846),30967=>array(37,-74,953,832),30968=>array(41,-76,974,851),30969=>array(56,-70,953,781),30970=>array(41,-72,968,828),30971=>array(30,-57,971,839),30972=>array(53,-68,966,832),30973=>array(38,-63,971,837),30974=>array(42,-65,940,787),30975=>array(32,-65,953,793),30976=>array(74,-68,926,785),30977=>array(45,-68,961,840),30978=>array(53,-70,956,825),30979=>array(54,-64,945,833),30980=>array(44,-62,988,833),30981=>array(41,-72,968,839),30982=>array(44,-68,969,858),30983=>array(43,-62,969,850),30984=>array(36,-58,963,825),30985=>array(43,-75,975,835),30986=>array(41,-59,959,818),30987=>array(51,-64,949,786),30988=>array(36,-65,935,789),30989=>array(53,-59,933,836),30990=>array(36,-65,961,825),30991=>array(44,-55,951,833),30992=>array(39,-71,937,833),30993=>array(40,-52,933,847),30994=>array(29,-58,965,860),30995=>array(44,-35,951,778),30996=>array(43,-68,956,836),30997=>array(44,-67,945,819),30998=>array(44,-70,952,821),30999=>array(51,-74,960,836),31000=>array(46,-69,954,786),31001=>array(33,-61,967,832),31002=>array(44,-20,957,835),31003=>array(41,-27,954,823),31004=>array(41,-67,984,839),31005=>array(33,-65,953,783),31006=>array(44,-66,976,830),31007=>array(22,-60,975,794),31008=>array(51,-31,949,846),31009=>array(34,-67,948,828),31010=>array(44,-76,975,844),31011=>array(32,-67,970,830),31012=>array(35,-67,976,828),31013=>array(41,-66,975,794),31014=>array(39,-74,959,834),31015=>array(46,-55,932,795),31016=>array(50,-54,936,792),31017=>array(36,-76,959,833),31018=>array(32,-63,962,799),31019=>array(26,-71,965,844),31020=>array(50,-70,962,833),31021=>array(59,-70,978,775),31022=>array(22,-60,975,840),31023=>array(36,-65,951,829),31024=>array(49,-69,953,790),31025=>array(44,-68,949,849),31026=>array(44,-62,956,842),31027=>array(26,-64,957,845),31028=>array(31,-61,951,832),31029=>array(44,-62,923,789),31030=>array(64,-58,936,839),31031=>array(50,-23,950,838),31032=>array(35,-75,979,829),31033=>array(33,-68,982,789),31034=>array(91,-68,932,757),31035=>array(235,-68,689,820),31036=>array(42,-59,961,820),31037=>array(54,-57,912,839),31038=>array(47,-69,949,822),31039=>array(48,-56,921,844),31040=>array(77,-68,945,768),31041=>array(39,-68,935,815),31042=>array(35,-55,963,847),31043=>array(35,-69,905,826),31044=>array(35,-70,976,835),31045=>array(45,-69,967,834),31046=>array(38,-67,964,841),31047=>array(36,-63,968,834),31048=>array(46,-67,946,834),31049=>array(36,-63,944,834),31050=>array(35,-55,960,848),31051=>array(36,-76,963,831),31052=>array(41,-71,918,831),31053=>array(45,-65,948,845),31054=>array(41,-71,906,826),31055=>array(34,-68,956,828),31056=>array(40,-60,958,843),31057=>array(34,-68,977,831),31058=>array(34,-72,908,824),31059=>array(47,-70,957,828),31060=>array(42,-52,949,850),31061=>array(42,-69,970,835),31062=>array(35,-73,953,818),31063=>array(57,-69,955,814),31064=>array(29,-52,964,763),31065=>array(34,-57,970,842),31066=>array(72,-69,960,838),31067=>array(32,-69,941,832),31068=>array(32,-69,953,836),31069=>array(35,-67,960,822),31070=>array(55,-67,904,837),31071=>array(64,-67,945,836),31072=>array(67,-68,909,775),31073=>array(60,-64,948,823),31074=>array(36,-64,962,834),31075=>array(44,-68,962,839),31076=>array(47,-69,906,833),31077=>array(39,-68,956,843),31078=>array(39,-68,968,836),31079=>array(37,-69,969,847),31080=>array(73,-61,952,788),31081=>array(50,-70,966,837),31082=>array(46,-72,955,833),31083=>array(27,-54,973,853),31084=>array(50,-69,956,837),31085=>array(46,-66,957,839),31086=>array(50,-69,953,838),31087=>array(30,-65,925,821),31088=>array(43,-64,959,843),31089=>array(50,-69,959,846),31090=>array(35,-65,970,842),31091=>array(45,-72,964,839),31092=>array(39,-74,951,841),31093=>array(50,-69,923,837),31094=>array(50,-69,925,842),31095=>array(36,-63,952,834),31096=>array(28,-61,886,822),31097=>array(27,-64,920,840),31098=>array(57,-66,963,829),31099=>array(50,-70,911,837),31100=>array(31,-53,982,851),31101=>array(40,-67,954,838),31102=>array(50,-69,968,837),31103=>array(32,-69,969,840),31104=>array(39,-74,915,816),31105=>array(46,-65,957,834),31106=>array(33,-70,908,835),31107=>array(50,-69,959,839),31108=>array(38,-64,963,834),31109=>array(45,-65,955,847),31110=>array(36,-69,956,849),31111=>array(50,-69,959,837),31112=>array(44,-68,951,835),31113=>array(28,-69,953,842),31114=>array(32,-69,958,832),31115=>array(38,-53,954,847),31116=>array(50,-69,943,843),31117=>array(36,-63,912,834),31118=>array(44,-67,971,832),31119=>array(38,-69,943,834),31120=>array(46,-69,957,835),31121=>array(32,-69,930,804),31122=>array(43,-69,970,839),31123=>array(38,-72,950,826),31124=>array(32,-69,966,797),31125=>array(38,-62,968,842),31126=>array(28,-57,978,843),31127=>array(51,-62,967,835),31128=>array(36,-56,953,846),31129=>array(32,-64,966,846),31130=>array(31,-70,985,832),31131=>array(30,-78,961,833),31132=>array(88,-67,941,823),31133=>array(50,-69,964,802),31134=>array(50,-75,940,841),31135=>array(50,-69,954,843),31136=>array(30,-71,955,836),31137=>array(49,-64,948,842),31138=>array(34,-72,915,826),31139=>array(48,-71,959,842),31140=>array(47,-68,899,835),31141=>array(38,-69,971,837),31142=>array(63,-66,940,835),31143=>array(60,-69,947,835),31144=>array(42,-72,973,843),31145=>array(50,-69,973,837),31146=>array(55,-69,955,791),31147=>array(32,-55,954,842),31148=>array(51,-71,963,840),31149=>array(44,-66,980,845),31150=>array(60,-69,952,833),31151=>array(50,-70,979,840),31152=>array(39,-64,973,827),31153=>array(26,-69,960,835),31154=>array(35,-72,947,835),31155=>array(50,-69,970,846),31156=>array(24,-59,972,868),31157=>array(43,-69,959,836),31158=>array(30,-81,968,825),31159=>array(37,-68,965,830),31160=>array(72,-59,875,818),31161=>array(120,-71,883,829),31162=>array(130,-64,882,785),31163=>array(69,-65,939,838),31164=>array(131,-65,869,834),31165=>array(38,-59,962,856),31166=>array(55,-70,958,825),31167=>array(52,-64,947,831),31168=>array(50,-59,951,830),31169=>array(40,-68,959,833),31170=>array(50,-50,954,823),31171=>array(50,-76,921,817),31172=>array(44,-67,955,833),31173=>array(45,-67,951,833),31174=>array(49,-70,947,820),31175=>array(50,-70,960,833),31176=>array(36,-52,904,846),31177=>array(42,-70,950,823),31178=>array(47,-69,968,834),31179=>array(43,-73,964,837),31180=>array(59,-71,968,829),31181=>array(45,-70,917,826),31182=>array(39,-69,962,824),31183=>array(48,-71,960,838),31184=>array(51,-69,955,829),31185=>array(41,-69,955,829),31186=>array(43,-70,959,827),31187=>array(41,-69,965,835),31188=>array(41,-69,966,843),31189=>array(39,-61,954,829),31190=>array(42,-76,972,827),31191=>array(41,-70,955,829),31192=>array(43,-61,969,828),31193=>array(41,-69,956,836),31194=>array(41,-69,944,833),31195=>array(49,-71,951,832),31196=>array(35,-71,952,829),31197=>array(51,-71,976,822),31198=>array(53,-70,924,827),31199=>array(32,-73,958,817),31200=>array(42,-70,964,829),31201=>array(41,-69,975,844),31202=>array(37,-78,975,831),31203=>array(39,-59,972,839),31204=>array(42,-75,951,810),31205=>array(41,-69,947,830),31206=>array(52,-68,964,835),31207=>array(39,-72,979,835),31208=>array(41,-69,951,842),31209=>array(36,-70,973,839),31210=>array(37,-49,966,859),31211=>array(34,-65,954,834),31212=>array(41,-57,941,835),31213=>array(42,-62,937,835),31214=>array(48,-73,960,829),31215=>array(24,-62,939,830),31216=>array(44,-59,961,835),31217=>array(59,-69,941,829),31218=>array(31,-71,942,835),31219=>array(41,-69,958,839),31220=>array(41,-69,985,853),31221=>array(66,-69,939,829),31222=>array(39,-69,973,829),31223=>array(47,-67,951,822),31224=>array(44,-61,951,836),31225=>array(33,-69,954,829),31226=>array(45,-59,955,827),31227=>array(49,-70,935,839),31228=>array(55,-69,945,836),31229=>array(30,-61,896,835),31230=>array(33,-72,959,835),31231=>array(67,-69,933,839),31232=>array(41,-71,961,846),31233=>array(47,-61,930,846),31234=>array(36,-64,968,850),31235=>array(35,-55,951,842),31236=>array(40,-72,969,830),31237=>array(36,-70,970,819),31238=>array(26,-64,871,821),31239=>array(62,-64,938,817),31240=>array(43,-60,956,828),31241=>array(24,-64,976,818),31242=>array(49,-52,932,864),31243=>array(29,-70,949,816),31244=>array(38,-55,967,862),31245=>array(52,-70,947,837),31246=>array(36,-70,954,840),31247=>array(26,-64,954,827),31248=>array(41,-71,977,836),31249=>array(28,-51,951,846),31250=>array(43,-72,903,823),31251=>array(47,-72,951,825),31252=>array(30,-62,970,840),31253=>array(47,-72,954,834),31254=>array(26,-70,947,841),31255=>array(38,-67,954,844),31256=>array(34,-52,952,846),31257=>array(39,-57,954,852),31258=>array(41,-70,955,832),31259=>array(45,-70,905,828),31260=>array(33,-57,967,835),31261=>array(70,-73,930,822),31262=>array(27,-72,965,819),31263=>array(76,-61,930,816),31264=>array(49,-80,911,818),31265=>array(41,-64,959,851),31266=>array(43,-70,969,825),31267=>array(39,-64,947,838),31268=>array(36,-64,953,849),31269=>array(56,-65,950,817),31270=>array(33,-69,951,833),31271=>array(34,-65,966,829),31272=>array(32,-68,918,827),31273=>array(55,-64,945,821),31274=>array(50,-64,950,837),31275=>array(34,-74,962,821),31276=>array(26,-71,961,823),31277=>array(21,-68,970,831),31278=>array(47,-65,956,836),31279=>array(33,-71,967,829),31280=>array(33,-50,972,845),31281=>array(32,-69,956,835),31282=>array(32,-64,936,824),31283=>array(19,-61,947,834),31284=>array(26,-64,966,850),31285=>array(26,-64,965,843),31286=>array(26,-72,949,835),31287=>array(24,-66,952,823),31288=>array(24,-68,960,843),31289=>array(22,-67,964,848),31290=>array(26,-71,928,826),31291=>array(45,-71,943,832),31292=>array(38,-69,979,832),31293=>array(40,-65,946,844),31294=>array(47,-51,930,836),31295=>array(55,-75,940,831),31296=>array(45,-74,964,825),31297=>array(26,-70,956,827),31298=>array(41,-68,976,826),31299=>array(33,-58,958,845),31300=>array(27,-59,960,850),31301=>array(37,-66,966,848),31302=>array(39,-73,961,847),31303=>array(36,-76,983,847),31304=>array(47,-71,967,832),31305=>array(31,-61,952,834),31306=>array(27,-68,967,835),31307=>array(39,-70,979,838),31308=>array(31,-62,964,843),31309=>array(40,-74,947,833),31310=>array(39,-70,972,838),31311=>array(32,-55,965,838),31312=>array(30,-61,965,846),31313=>array(26,-63,910,824),31314=>array(38,-72,960,833),31315=>array(26,-64,963,821),31316=>array(43,-78,959,827),31317=>array(41,-65,961,845),31318=>array(40,-72,961,822),31319=>array(41,-68,957,826),31320=>array(43,-77,963,823),31321=>array(26,-68,971,833),31322=>array(38,-70,962,828),31323=>array(46,-78,971,828),31324=>array(37,-71,951,831),31325=>array(41,-66,959,822),31326=>array(26,-73,928,821),31327=>array(33,-71,974,825),31328=>array(32,-68,983,840),31329=>array(35,-63,956,836),31330=>array(22,-74,969,833),31331=>array(35,-79,967,837),31332=>array(32,-59,964,825),31333=>array(42,-73,947,821),31334=>array(47,-65,966,853),31335=>array(40,-72,963,837),31336=>array(45,-67,974,830),31337=>array(31,-66,959,831),31338=>array(51,-71,949,825),31339=>array(28,-56,967,840),31340=>array(38,-80,966,843),31341=>array(28,-69,984,853),31342=>array(30,-70,971,846),31343=>array(36,-63,956,836),31344=>array(21,-69,962,844),31345=>array(36,-69,961,835),31346=>array(51,-73,953,825),31347=>array(36,-78,970,836),31348=>array(66,-59,950,822),31349=>array(94,-14,943,852),31350=>array(48,-44,957,822),31351=>array(44,-71,898,831),31352=>array(45,-59,924,850),31353=>array(92,-58,898,839),31354=>array(88,-17,918,833),31355=>array(66,-68,945,843),31356=>array(48,-68,967,849),31357=>array(60,-70,922,839),31358=>array(60,-69,982,839),31359=>array(58,-62,928,838),31360=>array(58,-32,965,854),31361=>array(60,-65,942,824),31362=>array(56,-65,944,849),31363=>array(54,-56,898,831),31364=>array(63,-69,898,828),31365=>array(109,-62,920,857),31366=>array(51,-60,972,867),31367=>array(48,-36,962,835),31368=>array(78,-76,908,833),31369=>array(72,-64,948,838),31370=>array(47,-75,967,846),31371=>array(107,-67,927,837),31372=>array(64,-67,929,845),31373=>array(52,-65,916,836),31374=>array(72,-62,902,840),31375=>array(81,-79,935,829),31376=>array(66,-8,941,851),31377=>array(65,-69,937,862),31378=>array(75,-35,925,839),31379=>array(50,-38,954,839),31380=>array(40,-51,963,864),31381=>array(27,-68,937,839),31382=>array(42,-70,934,839),31383=>array(102,-69,898,831),31384=>array(28,-67,930,839),31385=>array(63,-65,938,840),31386=>array(50,-72,952,849),31387=>array(47,-75,963,849),31388=>array(73,-61,896,832),31389=>array(37,-69,897,838),31390=>array(75,-73,915,848),31391=>array(43,-83,898,838),31392=>array(38,-65,962,845),31393=>array(60,-71,955,848),31394=>array(53,-75,957,844),31395=>array(63,-62,957,854),31396=>array(94,-54,954,851),31397=>array(37,-64,936,840),31398=>array(57,-68,914,837),31399=>array(65,-68,935,851),31400=>array(60,-65,954,848),31401=>array(102,-73,898,839),31402=>array(56,-38,956,839),31403=>array(46,-72,969,845),31404=>array(42,-64,979,849),31405=>array(53,-67,927,846),31406=>array(55,-64,925,838),31407=>array(37,-65,963,839),31408=>array(81,-70,935,830),31409=>array(42,-73,971,838),31410=>array(57,-70,951,830),31411=>array(49,-70,959,848),31412=>array(86,-79,937,838),31413=>array(58,-62,927,848),31414=>array(53,-80,947,833),31415=>array(52,-77,909,838),31416=>array(53,-30,974,854),31417=>array(34,-64,951,851),31418=>array(57,-76,962,839),31419=>array(51,-52,952,851),31420=>array(38,-58,966,851),31421=>array(38,-71,961,851),31422=>array(63,-68,974,852),31423=>array(56,-76,933,831),31424=>array(51,-72,960,832),31425=>array(36,-62,952,861),31426=>array(41,-64,970,851),31427=>array(47,-67,965,843),31428=>array(77,-66,948,833),31429=>array(48,-75,970,839),31430=>array(62,-68,918,847),31431=>array(53,-80,950,838),31432=>array(50,-49,968,844),31433=>array(54,-68,967,852),31434=>array(57,-71,921,843),31435=>array(95,-3,912,822),31436=>array(86,-73,975,825),31437=>array(86,-67,950,830),31438=>array(56,-54,934,838),31439=>array(49,-67,935,821),31440=>array(49,-65,964,800),31441=>array(40,-54,945,821),31442=>array(83,-65,938,832),31443=>array(59,-21,929,828),31444=>array(49,-55,909,833),31445=>array(49,-62,963,806),31446=>array(48,-16,952,807),31447=>array(53,-60,952,827),31448=>array(60,-72,935,832),31449=>array(73,-66,918,832),31450=>array(46,-68,964,825),31451=>array(45,-78,975,831),31452=>array(66,-54,954,836),31453=>array(27,-26,947,799),31454=>array(39,-58,932,838),31455=>array(38,-66,946,818),31456=>array(60,-68,940,831),31457=>array(24,-64,957,801),31458=>array(44,-74,979,825),31459=>array(35,-69,964,849),31460=>array(54,-70,962,838),31461=>array(68,-33,932,832),31462=>array(45,-65,971,832),31463=>array(56,-68,957,847),31464=>array(54,-62,969,844),31465=>array(79,-23,957,848),31466=>array(66,-25,960,796),31467=>array(45,-71,956,834),31468=>array(40,-71,948,833),31469=>array(67,-65,921,802),31470=>array(48,-73,953,833),31471=>array(43,-70,942,830),31472=>array(45,-63,948,804),31473=>array(48,-65,957,832),31474=>array(48,-68,935,849),31475=>array(48,-23,963,837),31476=>array(37,-72,957,845),31477=>array(38,-69,944,830),31478=>array(39,-76,959,838),31479=>array(55,-69,969,840),31480=>array(39,-76,962,830),31481=>array(49,-62,949,848),31482=>array(68,-5,943,819),31483=>array(47,-67,948,847),31484=>array(54,-71,948,847),31485=>array(54,-59,954,842),31486=>array(54,-10,948,827),31487=>array(42,-60,931,841),31488=>array(48,-23,947,847),31489=>array(47,-15,955,847),31490=>array(41,-69,969,822),31491=>array(44,-64,919,822),31492=>array(37,-73,945,844),31493=>array(47,-73,977,842),31494=>array(40,-44,914,835),31495=>array(67,-75,933,845),31496=>array(44,-65,955,845),31497=>array(47,-66,945,843),31498=>array(37,-68,964,840),31499=>array(62,-58,962,845),31500=>array(54,-57,943,845),31501=>array(56,-61,939,835),31502=>array(52,-69,966,834),31503=>array(74,-69,960,839),31504=>array(43,-70,964,838),31505=>array(65,-64,953,839),31506=>array(43,-77,971,835),31507=>array(44,-50,965,814),31508=>array(33,-25,918,830),31509=>array(39,-63,932,825),31510=>array(44,-67,962,814),31511=>array(44,-77,969,814),31512=>array(44,-57,932,848),31513=>array(51,-18,938,840),31514=>array(45,-69,941,841),31515=>array(50,-65,952,841),31516=>array(44,-64,941,814),31517=>array(60,-69,927,832),31518=>array(52,-63,944,842),31519=>array(53,-62,951,836),31520=>array(52,-17,945,838),31521=>array(52,-14,957,842),31522=>array(55,-71,959,829),31523=>array(37,-30,956,841),31524=>array(45,-68,954,844),31525=>array(62,-62,956,854),31526=>array(42,-73,950,841),31527=>array(37,-69,956,847),31528=>array(38,-59,970,846),31529=>array(43,-72,958,854),31530=>array(54,-14,959,835),31531=>array(54,-65,942,842),31532=>array(62,-62,932,834),31533=>array(31,-80,969,835),31534=>array(44,-56,945,847),31535=>array(49,-74,953,837),31536=>array(45,-65,933,838),31537=>array(55,-56,948,846),31538=>array(51,-65,932,832),31539=>array(55,-63,950,842),31540=>array(41,-65,938,827),31541=>array(44,-70,953,836),31542=>array(44,-71,968,836),31543=>array(40,-61,962,836),31544=>array(71,-20,962,836),31545=>array(54,-64,946,836),31546=>array(27,-63,931,833),31547=>array(52,-61,950,847),31548=>array(34,-59,940,842),31549=>array(39,33,944,842),31550=>array(31,-57,938,823),31551=>array(34,-73,968,842),31552=>array(51,-32,952,820),31553=>array(31,-43,909,823),31554=>array(31,-44,959,823),31555=>array(46,-61,937,836),31556=>array(53,-68,947,845),31557=>array(61,-58,969,848),31558=>array(74,-64,944,839),31559=>array(54,-66,944,841),31560=>array(41,-57,938,843),31561=>array(65,-68,934,838),31562=>array(58,-60,971,850),31563=>array(48,-65,946,848),31564=>array(42,-23,958,840),31565=>array(51,-52,938,854),31566=>array(40,-58,945,841),31567=>array(42,-59,961,848),31568=>array(42,-83,953,847),31569=>array(47,-61,950,833),31570=>array(43,-61,942,849),31571=>array(38,-65,931,837),31572=>array(34,-71,971,843),31573=>array(53,-54,962,844),31574=>array(46,-65,957,844),31575=>array(50,-68,949,842),31576=>array(56,-67,949,839),31577=>array(32,-61,943,834),31578=>array(37,-68,913,834),31579=>array(43,-69,925,829),31580=>array(45,-60,943,847),31581=>array(41,-66,922,820),31582=>array(37,-65,930,834),31583=>array(36,-64,948,837),31584=>array(50,-71,946,837),31585=>array(38,-71,962,841),31586=>array(39,-64,929,825),31587=>array(41,-69,932,840),31588=>array(33,-54,966,853),31589=>array(38,-54,923,849),31590=>array(37,-57,960,850),31591=>array(47,-66,970,839),31592=>array(37,-69,966,842),31593=>array(42,-54,936,857),31594=>array(33,-16,934,853),31595=>array(33,-62,943,853),31596=>array(38,-67,953,837),31597=>array(58,-52,939,857),31598=>array(62,-11,948,837),31599=>array(52,-75,935,837),31600=>array(54,-70,960,843),31601=>array(39,-67,969,843),31602=>array(50,-67,945,847),31603=>array(24,-65,970,846),31604=>array(34,-55,978,849),31605=>array(36,-74,949,845),31606=>array(49,-70,945,836),31607=>array(49,-70,965,840),31608=>array(50,-67,939,843),31609=>array(29,-63,911,833),31610=>array(42,-69,953,847),31611=>array(51,-66,938,827),31612=>array(47,-81,933,841),31613=>array(47,-69,947,841),31614=>array(46,-20,957,842),31615=>array(26,-64,958,841),31616=>array(46,-59,926,833),31617=>array(46,-59,934,833),31618=>array(42,-67,969,841),31619=>array(27,-74,968,841),31620=>array(47,-67,949,841),31621=>array(50,-70,945,841),31622=>array(47,-51,966,848),31623=>array(41,-67,970,846),31624=>array(40,-72,930,835),31625=>array(36,-63,938,842),31626=>array(39,-69,953,831),31627=>array(51,-60,964,847),31628=>array(52,-72,930,835),31629=>array(69,-58,957,847),31630=>array(43,-73,953,841),31631=>array(41,-61,948,851),31632=>array(48,-62,947,841),31633=>array(32,-57,968,852),31634=>array(41,-68,919,827),31635=>array(48,-52,959,846),31636=>array(48,-65,944,846),31637=>array(63,-58,944,849),31638=>array(44,-69,963,834),31639=>array(50,-75,935,841),31640=>array(61,-69,938,841),31641=>array(38,-52,975,855),31642=>array(57,-68,932,840),31643=>array(33,-61,959,855),31644=>array(49,-28,935,841),31645=>array(57,-59,960,850),31646=>array(46,-46,959,844),31647=>array(57,-54,954,850),31648=>array(41,-19,942,853),31649=>array(53,-68,929,845),31650=>array(48,-66,924,832),31651=>array(41,-65,912,831),31652=>array(45,-70,942,837),31653=>array(48,-62,960,832),31654=>array(27,-81,913,835),31655=>array(41,-17,917,829),31656=>array(38,-69,952,823),31657=>array(39,-61,919,834),31658=>array(52,-70,928,843),31659=>array(44,-68,937,824),31660=>array(55,-65,954,842),31661=>array(60,-58,957,855),31662=>array(60,-24,955,855),31663=>array(44,-70,976,833),31664=>array(66,-51,960,828),31665=>array(46,-62,947,846),31666=>array(69,-62,963,855),31667=>array(45,-72,935,855),31668=>array(39,-68,966,844),31669=>array(45,-70,952,843),31670=>array(42,-61,930,842),31671=>array(41,-66,954,847),31672=>array(49,-67,945,842),31673=>array(40,-72,941,837),31674=>array(43,-72,974,842),31675=>array(43,-70,959,842),31676=>array(43,-74,933,842),31677=>array(43,-27,947,842),31678=>array(50,-72,943,837),31679=>array(43,-64,942,842),31680=>array(54,-65,949,841),31681=>array(57,-36,962,835),31682=>array(67,-47,952,835),31683=>array(57,-70,952,835),31684=>array(67,-64,943,842),31685=>array(62,-62,954,842),31686=>array(56,-60,962,848),31687=>array(46,-69,942,840),31688=>array(33,-58,958,837),31689=>array(53,-67,959,838),31690=>array(42,-69,957,843),31691=>array(54,-71,945,849),31692=>array(38,-68,955,841),31693=>array(33,-64,985,837),31694=>array(53,-76,960,837),31695=>array(53,-64,973,847),31696=>array(38,-28,957,847),31697=>array(38,-75,911,829),31698=>array(38,-66,961,829),31699=>array(45,-60,933,836),31700=>array(54,-64,941,851),31701=>array(59,-14,952,832),31702=>array(46,-75,938,832),31703=>array(32,-62,968,844),31704=>array(55,-68,929,829),31705=>array(45,-65,938,849),31706=>array(36,-26,938,842),31707=>array(40,-71,931,840),31708=>array(53,-83,953,844),31709=>array(51,-69,949,843),31710=>array(63,-70,953,832),31711=>array(44,-65,948,836),31712=>array(30,-53,966,855),31713=>array(45,-60,974,855),31714=>array(62,-76,947,827),31715=>array(72,-69,937,837),31716=>array(53,-59,942,845),31717=>array(56,-67,982,847),31718=>array(49,-38,958,844),31719=>array(58,-68,927,829),31720=>array(35,-54,959,849),31721=>array(41,-64,959,855),31722=>array(47,-71,968,846),31723=>array(71,-67,946,832),31724=>array(43,-66,972,832),31725=>array(57,-54,962,849),31726=>array(54,-29,924,827),31727=>array(33,-71,959,827),31728=>array(66,-73,951,839),31729=>array(66,-64,929,830),31730=>array(47,-73,953,844),31731=>array(55,-59,970,853),31732=>array(45,-68,968,836),31733=>array(49,-71,955,828),31734=>array(42,-64,951,838),31735=>array(50,-46,960,856),31736=>array(42,-74,954,829),31737=>array(44,-39,957,827),31738=>array(57,-78,964,850),31739=>array(53,-64,937,846),31740=>array(59,-73,955,838),31741=>array(47,-68,933,831),31742=>array(41,-67,967,850),31743=>array(56,-73,951,830),31744=>array(64,-65,964,846),31745=>array(53,-74,976,830),31746=>array(60,-69,920,832),31747=>array(46,-70,931,831),31748=>array(36,-80,957,845),31749=>array(49,-72,954,828),31750=>array(44,-71,961,837),31751=>array(49,-67,982,849),31752=>array(45,-60,943,829),31753=>array(57,-70,982,845),31754=>array(50,-34,974,823),31755=>array(44,-30,974,839),31756=>array(33,-65,973,847),31757=>array(58,-74,942,844),31758=>array(71,-69,956,832),31759=>array(39,-65,954,845),31760=>array(57,-72,974,834),31761=>array(33,-66,981,853),31762=>array(39,-78,965,851),31763=>array(33,-64,962,855),31764=>array(29,-67,965,855),31765=>array(60,-71,920,847),31766=>array(52,-70,952,829),31767=>array(58,-63,961,821),31768=>array(50,-62,941,838),31769=>array(53,-72,953,841),31770=>array(46,-86,952,850),31771=>array(29,-49,942,858),31772=>array(56,-75,958,834),31773=>array(52,-67,967,833),31774=>array(50,-58,962,860),31775=>array(31,-67,946,844),31776=>array(56,-29,973,842),31777=>array(27,-61,951,844),31778=>array(59,-66,934,834),31779=>array(42,-63,948,847),31780=>array(43,-69,945,847),31781=>array(36,-53,976,855),31782=>array(48,-33,977,839),31783=>array(36,-68,915,842),31784=>array(51,-58,932,847),31785=>array(46,-68,930,835),31786=>array(47,-68,971,843),31787=>array(52,-76,949,842),31788=>array(57,-73,961,836),31789=>array(44,-63,970,838),31790=>array(36,-68,954,847),31791=>array(36,-55,942,847),31792=>array(46,-67,957,833),31793=>array(49,-67,951,849),31794=>array(43,-75,957,849),31795=>array(54,-65,964,840),31796=>array(42,-83,934,856),31797=>array(66,-62,962,834),31798=>array(23,-61,938,856),31799=>array(41,-54,938,856),31800=>array(43,-68,970,847),31801=>array(60,-67,927,837),31802=>array(43,-33,944,837),31803=>array(45,-74,984,829),31804=>array(44,-67,954,837),31805=>array(27,-65,972,841),31806=>array(31,-53,963,854),31807=>array(44,-70,954,853),31808=>array(61,-64,939,842),31809=>array(37,-74,918,824),31810=>array(39,-71,944,836),31811=>array(53,-16,955,849),31812=>array(36,-52,938,842),31813=>array(51,-70,958,841),31814=>array(46,-75,978,845),31815=>array(44,-59,975,850),31816=>array(36,-62,981,835),31817=>array(46,-35,945,842),31818=>array(37,-67,944,850),31819=>array(43,-66,974,835),31820=>array(56,-58,951,852),31821=>array(33,-62,943,852),31822=>array(43,-68,971,835),31823=>array(43,-95,953,835),31824=>array(39,-62,976,848),31825=>array(28,-82,972,847),31826=>array(61,-64,939,834),31827=>array(37,-64,969,840),31828=>array(35,-56,971,845),31829=>array(45,-70,937,842),31830=>array(38,-53,961,853),31831=>array(50,-60,948,845),31832=>array(39,-67,976,849),31833=>array(38,-52,959,853),31834=>array(42,-62,962,837),31835=>array(52,-72,964,839),31836=>array(57,-68,953,846),31837=>array(50,-68,962,846),31838=>array(47,-62,964,847),31839=>array(42,-69,965,851),31840=>array(49,-62,964,855),31841=>array(33,-60,962,818),31842=>array(45,-69,987,838),31843=>array(40,-67,929,841),31844=>array(38,-53,961,853),31845=>array(35,-60,967,853),31846=>array(39,-33,967,837),31847=>array(28,-57,969,854),31848=>array(22,-56,983,848),31849=>array(34,-67,964,848),31850=>array(33,-71,954,842),31851=>array(40,-60,952,857),31852=>array(61,-62,964,854),31853=>array(56,-73,940,856),31854=>array(54,-59,957,854),31855=>array(38,-75,974,837),31856=>array(31,-55,970,844),31857=>array(29,-78,963,835),31858=>array(46,-71,954,835),31859=>array(57,-67,949,830),31860=>array(33,-58,961,844),31861=>array(41,-71,956,823),31862=>array(41,-73,975,823),31863=>array(41,-71,935,823),31864=>array(36,-64,965,828),31865=>array(28,-68,954,826),31866=>array(38,-61,973,832),31867=>array(39,-62,948,834),31868=>array(48,-63,900,814),31869=>array(56,-59,960,838),31870=>array(42,-75,910,827),31871=>array(41,-76,953,822),31872=>array(38,-71,966,827),31873=>array(37,-68,957,829),31874=>array(37,-58,963,841),31875=>array(32,-65,954,832),31876=>array(44,-71,970,824),31877=>array(59,-65,947,839),31878=>array(59,-65,963,829),31879=>array(69,-65,967,843),31880=>array(53,-65,967,828),31881=>array(29,-67,964,829),31882=>array(43,-68,957,826),31883=>array(48,-63,963,837),31884=>array(58,-67,918,826),31885=>array(39,-54,967,850),31886=>array(69,-76,973,837),31887=>array(49,-71,934,837),31888=>array(42,-66,928,829),31889=>array(42,-65,965,829),31890=>array(37,-64,949,837),31891=>array(46,-67,959,838),31892=>array(44,-70,945,824),31893=>array(51,-60,901,849),31894=>array(49,-70,971,825),31895=>array(46,-62,953,833),31896=>array(52,-64,943,840),31897=>array(46,-64,907,836),31898=>array(51,-62,953,833),31899=>array(50,-62,941,834),31900=>array(37,-67,963,818),31901=>array(29,-66,940,802),31902=>array(35,-67,955,832),31903=>array(56,-72,946,789),31904=>array(55,-69,947,830),31905=>array(55,-64,921,830),31906=>array(40,-65,961,846),31907=>array(33,-65,951,830),31908=>array(62,-65,913,838),31909=>array(79,-65,907,829),31910=>array(43,-77,961,836),31911=>array(35,-55,951,829),31912=>array(46,-70,959,823),31913=>array(52,-70,941,828),31914=>array(45,-59,941,823),31915=>array(48,-68,951,838),31916=>array(48,-56,923,843),31917=>array(53,-65,972,853),31918=>array(37,-56,974,836),31919=>array(52,-70,969,824),31920=>array(37,-64,953,837),31921=>array(46,-70,951,842),31922=>array(42,-62,983,838),31923=>array(39,-67,956,829),31924=>array(51,-71,962,824),31925=>array(54,-68,956,844),31926=>array(33,-67,966,835),31927=>array(67,-63,935,837),31928=>array(49,-77,960,836),31929=>array(29,-59,942,835),31930=>array(52,-70,965,839),31931=>array(36,-70,962,830),31932=>array(42,-70,971,830),31933=>array(42,-67,977,831),31934=>array(45,-66,954,837),31935=>array(45,-68,986,821),31936=>array(53,-68,961,833),31937=>array(21,-71,941,839),31938=>array(45,-73,963,832),31939=>array(63,-70,937,810),31940=>array(31,-65,929,833),31941=>array(34,-66,990,830),31942=>array(36,-70,968,810),31943=>array(30,-68,964,836),31944=>array(40,-67,986,829),31945=>array(38,-62,980,841),31946=>array(52,-68,897,835),31947=>array(37,-72,954,830),31948=>array(39,-65,975,841),31949=>array(42,-65,965,843),31950=>array(30,-75,958,844),31951=>array(69,-79,931,840),31952=>array(39,-70,948,827),31953=>array(38,-68,917,831),31954=>array(39,-72,938,822),31955=>array(39,-73,969,834),31956=>array(41,-79,971,826),31957=>array(52,-62,969,850),31958=>array(42,-69,952,827),31959=>array(48,-65,990,847),31960=>array(31,-68,968,832),31961=>array(42,-64,972,837),31962=>array(53,-69,954,832),31963=>array(56,-67,940,837),31964=>array(34,-62,968,828),31965=>array(28,-76,985,853),31966=>array(62,-69,955,849),31967=>array(40,-67,962,840),31968=>array(31,-66,966,833),31969=>array(50,-60,952,847),31970=>array(32,-62,982,832),31971=>array(34,-66,966,832),31972=>array(66,-73,934,828),31973=>array(60,-60,956,839),31974=>array(40,-71,933,839),31975=>array(40,-72,954,818),31976=>array(38,-69,967,830),31977=>array(25,-64,974,861),31978=>array(39,-67,975,832),31979=>array(70,-65,953,838),31980=>array(47,-67,960,826),31981=>array(38,-62,980,843),31982=>array(30,-64,964,832),31983=>array(47,-59,964,838),31984=>array(40,-68,916,833),31985=>array(40,-67,965,840),31986=>array(37,-71,963,828),31987=>array(54,-56,963,836),31988=>array(37,-67,962,797),31989=>array(42,-72,966,823),31990=>array(39,-68,956,833),31991=>array(46,-68,953,828),31992=>array(56,-65,941,847),31993=>array(226,-64,734,824),31994=>array(52,-64,952,839),31995=>array(62,-64,942,833),31996=>array(60,-67,892,825),31997=>array(60,-70,956,828),31998=>array(38,-67,936,839),31999=>array(60,-67,892,825),32000=>array(35,-64,954,839),32001=>array(60,-66,966,832),32002=>array(84,-64,950,839),32003=>array(57,-73,905,822),32004=>array(34,-64,903,839),32005=>array(34,-64,944,841),32006=>array(69,-64,950,839),32007=>array(34,-64,953,844),32008=>array(34,-78,957,839),32009=>array(60,-67,892,825),32010=>array(54,-60,948,831),32011=>array(34,-66,961,839),32012=>array(56,-64,963,825),32013=>array(34,-65,909,839),32014=>array(43,-71,975,829),32015=>array(44,-72,966,825),32016=>array(34,-64,956,839),32017=>array(53,-70,964,834),32018=>array(38,-71,979,844),32019=>array(47,-59,932,815),32020=>array(34,-64,964,839),32021=>array(44,-64,954,839),32022=>array(57,-72,914,824),32023=>array(34,-64,959,839),32024=>array(34,-64,945,841),32025=>array(34,-70,956,839),32026=>array(34,-66,955,839),32027=>array(34,-64,961,839),32028=>array(74,-64,944,839),32029=>array(40,-31,937,815),32030=>array(48,-71,968,828),32031=>array(52,-76,979,834),32032=>array(63,-60,937,834),32033=>array(34,-71,949,839),32034=>array(65,-69,946,835),32035=>array(57,-63,969,837),32036=>array(57,-62,949,843),32037=>array(82,-65,953,837),32038=>array(73,-44,965,824),32039=>array(84,-60,935,834),32040=>array(73,-73,960,833),32041=>array(35,-76,961,839),32042=>array(57,-35,943,839),32043=>array(57,-67,948,825),32044=>array(32,-64,906,839),32045=>array(61,-67,939,820),32046=>array(49,-60,953,831),32047=>array(51,-63,943,808),32048=>array(34,-64,912,839),32049=>array(62,-62,982,834),32050=>array(69,-67,954,839),32051=>array(36,-64,902,839),32052=>array(43,-65,947,839),32053=>array(54,-68,946,839),32054=>array(35,-54,954,838),32055=>array(49,-78,975,831),32056=>array(32,-38,954,839),32057=>array(34,-64,910,839),32058=>array(35,-64,956,839),32059=>array(39,-74,966,823),32060=>array(52,-62,932,829),32061=>array(36,-39,952,838),32062=>array(48,-75,974,843),32063=>array(84,-65,968,839),32064=>array(67,-65,921,828),32065=>array(32,-32,957,839),32066=>array(34,-77,964,839),32067=>array(34,-65,961,839),32068=>array(38,-64,942,839),32069=>array(44,-64,910,839),32070=>array(64,-64,955,839),32071=>array(40,-73,915,835),32072=>array(47,-67,901,837),32073=>array(35,-60,969,826),32074=>array(40,-67,970,840),32075=>array(44,-66,971,839),32076=>array(37,-64,966,839),32077=>array(40,-68,959,831),32078=>array(44,-64,964,839),32079=>array(49,-74,967,839),32080=>array(35,-64,944,839),32081=>array(42,-68,966,829),32082=>array(57,-70,911,826),32083=>array(54,-55,954,819),32084=>array(52,-66,951,833),32085=>array(50,-48,947,817),32086=>array(34,-72,961,839),32087=>array(61,-46,939,831),32088=>array(57,-75,963,832),32089=>array(41,-39,954,831),32090=>array(36,-39,943,830),32091=>array(32,-62,954,845),32092=>array(57,-63,943,827),32093=>array(36,-58,978,843),32094=>array(34,-64,962,841),32095=>array(58,-57,967,816),32096=>array(71,-65,954,837),32097=>array(34,-64,982,849),32098=>array(34,-64,900,842),32099=>array(64,-72,949,839),32100=>array(62,-65,938,820),32101=>array(36,-67,980,831),32102=>array(34,-65,965,853),32103=>array(51,-61,913,831),32104=>array(44,-64,962,839),32105=>array(41,-70,955,827),32106=>array(34,-64,918,839),32107=>array(81,-70,917,836),32108=>array(69,-64,958,834),32109=>array(43,-70,958,835),32110=>array(63,-60,939,838),32111=>array(46,-65,960,836),32112=>array(50,-39,957,825),32113=>array(34,-64,959,839),32114=>array(64,-71,960,839),32115=>array(49,-64,968,844),32116=>array(49,-65,954,843),32117=>array(34,-64,961,839),32118=>array(35,-64,961,839),32119=>array(41,-68,930,819),32120=>array(60,-61,953,817),32121=>array(33,-64,894,839),32122=>array(35,-55,957,857),32123=>array(44,-72,968,838),32124=>array(55,-65,954,833),32125=>array(69,-66,906,839),32126=>array(30,-70,961,833),32127=>array(34,-64,971,839),32128=>array(46,-70,975,823),32129=>array(54,-61,953,836),32130=>array(48,-70,959,830),32131=>array(51,-65,938,838),32132=>array(48,-70,969,836),32133=>array(57,-63,976,816),32134=>array(36,-71,971,820),32135=>array(36,-62,945,820),32136=>array(57,-65,928,849),32137=>array(44,-74,969,839),32138=>array(38,-69,979,836),32139=>array(38,-60,951,833),32140=>array(61,-68,962,832),32141=>array(43,-52,945,843),32142=>array(32,-71,976,839),32143=>array(59,-67,959,839),32144=>array(49,-67,961,839),32145=>array(59,-62,917,813),32146=>array(49,-71,954,826),32147=>array(44,-64,945,839),32148=>array(35,-66,968,846),32149=>array(59,-41,972,826),32150=>array(46,-59,976,853),32151=>array(37,-51,915,813),32152=>array(44,-61,977,841),32153=>array(34,-65,933,839),32154=>array(34,-64,962,839),32155=>array(44,-64,962,839),32156=>array(34,-65,960,839),32157=>array(35,-68,965,839),32158=>array(42,-46,951,828),32159=>array(34,-69,972,839),32160=>array(34,-67,966,843),32161=>array(48,-70,956,830),32162=>array(34,-67,897,839),32163=>array(34,-64,974,839),32164=>array(55,-54,932,786),32165=>array(41,-71,958,824),32166=>array(41,-59,983,836),32167=>array(48,-70,961,832),32168=>array(38,-77,960,849),32169=>array(58,-67,958,832),32170=>array(44,-69,953,832),32171=>array(50,-64,957,839),32172=>array(34,-65,973,839),32173=>array(34,-64,938,839),32174=>array(34,-73,946,843),32175=>array(39,-64,923,848),32176=>array(44,-64,941,839),32177=>array(34,-64,915,839),32178=>array(33,-64,909,839),32179=>array(57,-67,895,827),32180=>array(32,-65,966,839),32181=>array(34,-68,966,839),32182=>array(39,-64,969,820),32183=>array(34,-66,963,839),32184=>array(34,-67,976,856),32185=>array(42,-64,964,845),32186=>array(39,-64,952,839),32187=>array(34,-66,966,839),32188=>array(50,-71,953,841),32189=>array(44,-64,953,840),32190=>array(34,-66,968,839),32191=>array(34,-68,911,839),32192=>array(40,-73,958,837),32193=>array(53,-64,977,829),32194=>array(56,-74,982,829),32195=>array(36,-71,976,844),32196=>array(45,-62,966,822),32197=>array(43,-82,977,826),32198=>array(49,-73,920,828),32199=>array(49,-64,938,839),32200=>array(42,-64,934,842),32201=>array(45,-68,952,827),32202=>array(57,-63,943,803),32203=>array(34,-68,954,839),32204=>array(32,-62,961,856),32205=>array(40,-65,960,839),32206=>array(40,-66,962,839),32207=>array(34,-64,968,839),32208=>array(49,-68,978,840),32209=>array(34,-64,963,839),32210=>array(34,-67,941,839),32211=>array(39,-66,984,830),32212=>array(53,-74,941,818),32213=>array(34,-82,956,839),32214=>array(34,-67,941,839),32215=>array(71,-73,924,820),32216=>array(34,-68,969,839),32217=>array(45,-61,956,832),32218=>array(34,-64,963,840),32219=>array(54,-72,963,831),32220=>array(67,-70,966,839),32221=>array(34,-68,943,839),32222=>array(29,-69,976,848),32223=>array(54,-48,954,836),32224=>array(34,-67,946,839),32225=>array(34,-64,973,839),32226=>array(53,-67,950,829),32227=>array(34,-64,979,839),32228=>array(34,-64,957,839),32229=>array(36,-61,964,840),32230=>array(51,-41,976,819),32231=>array(55,-70,953,836),32232=>array(33,-67,935,839),32233=>array(34,-64,959,839),32234=>array(40,-64,960,837),32235=>array(43,-36,971,850),32236=>array(34,-64,950,839),32237=>array(64,-64,921,829),32238=>array(49,-72,968,831),32239=>array(32,-64,954,839),32240=>array(49,-71,984,834),32241=>array(44,-62,967,833),32242=>array(24,-71,960,839),32243=>array(36,-72,943,847),32244=>array(34,-66,967,839),32245=>array(53,-61,980,839),32246=>array(40,-55,972,841),32247=>array(50,-68,954,830),32248=>array(62,-44,953,810),32249=>array(38,-64,952,820),32250=>array(51,-70,914,830),32251=>array(24,-72,962,839),32252=>array(51,-41,959,830),32253=>array(51,-90,938,840),32254=>array(51,-63,958,830),32255=>array(35,-39,954,839),32256=>array(33,-50,963,828),32257=>array(34,-64,967,839),32258=>array(33,-50,964,823),32259=>array(48,-70,961,828),32260=>array(34,-64,971,839),32261=>array(24,-64,972,839),32262=>array(33,-59,970,849),32263=>array(46,-50,964,855),32264=>array(63,-65,950,829),32265=>array(34,-66,955,839),32266=>array(34,-64,961,839),32267=>array(34,-64,962,847),32268=>array(55,-75,973,814),32269=>array(41,-70,951,841),32270=>array(38,-69,932,827),32271=>array(40,-67,967,844),32272=>array(59,-64,926,850),32273=>array(44,-65,984,852),32274=>array(34,-64,951,839),32275=>array(47,-71,961,823),32276=>array(46,-70,985,822),32277=>array(34,-64,960,839),32278=>array(47,-72,952,841),32279=>array(37,-63,977,855),32280=>array(33,-61,977,842),32281=>array(48,-70,931,828),32282=>array(53,-71,919,833),32283=>array(34,-64,953,839),32284=>array(44,-78,954,826),32285=>array(33,-82,961,839),32286=>array(34,-71,947,839),32287=>array(24,-64,958,839),32288=>array(33,-77,960,826),32289=>array(34,-68,952,839),32290=>array(39,-70,967,844),32291=>array(54,-57,966,817),32292=>array(49,-72,959,824),32293=>array(43,-70,984,830),32294=>array(34,-70,961,839),32295=>array(43,-60,966,839),32296=>array(62,-74,964,828),32297=>array(59,-70,979,825),32298=>array(44,-68,955,810),32299=>array(35,-64,963,843),32300=>array(42,-45,952,842),32301=>array(56,-61,961,850),32302=>array(34,-65,943,839),32303=>array(34,-72,957,839),32304=>array(51,-71,976,823),32305=>array(24,-70,955,839),32306=>array(34,-64,962,839),32307=>array(35,-69,954,823),32308=>array(55,-70,941,832),32309=>array(34,-65,974,839),32310=>array(60,-59,968,840),32311=>array(34,-65,942,839),32312=>array(41,-73,972,827),32313=>array(34,-64,955,839),32314=>array(34,-64,960,839),32315=>array(34,-62,968,839),32316=>array(42,-72,972,831),32317=>array(34,-64,959,844),32318=>array(34,-73,952,839),32319=>array(42,-79,972,845),32320=>array(51,-68,953,824),32321=>array(59,-71,948,837),32322=>array(42,-72,953,830),32323=>array(34,-72,917,839),32324=>array(71,-73,949,805),32325=>array(34,-65,972,839),32326=>array(34,-75,970,839),32327=>array(59,-60,965,846),32328=>array(48,-74,962,841),32329=>array(46,-68,968,820),32330=>array(29,-64,964,839),32331=>array(57,-71,964,829),32332=>array(38,-75,973,839),32333=>array(34,-67,957,839),32334=>array(39,-71,959,831),32335=>array(49,-58,947,820),32336=>array(35,-44,971,825),32337=>array(44,-64,973,832),32338=>array(34,-71,972,839),32339=>array(42,-73,969,831),32340=>array(28,-66,958,839),32341=>array(34,-67,949,840),32342=>array(24,-72,984,839),32343=>array(43,-71,958,827),32344=>array(47,-61,926,845),32345=>array(34,-67,959,839),32346=>array(34,-64,965,859),32347=>array(45,-65,962,838),32348=>array(45,-70,957,838),32349=>array(34,-68,920,839),32350=>array(34,-64,954,839),32351=>array(43,-68,957,830),32352=>array(50,-67,971,840),32353=>array(26,-72,962,839),32354=>array(42,-70,954,826),32355=>array(40,-39,957,825),32356=>array(36,-66,969,838),32357=>array(37,-65,951,836),32358=>array(24,-64,967,839),32359=>array(25,-75,949,839),32360=>array(55,-73,974,830),32361=>array(34,-64,970,839),32362=>array(34,-68,973,864),32363=>array(53,-73,962,841),32364=>array(39,-65,965,837),32365=>array(63,-57,937,833),32366=>array(41,-39,951,812),32367=>array(40,-66,970,807),32368=>array(34,-64,972,839),32369=>array(48,-38,959,837),32370=>array(49,-68,961,829),32371=>array(51,-71,962,845),32372=>array(50,-71,944,831),32373=>array(47,-45,962,834),32374=>array(43,-33,977,829),32375=>array(44,-64,962,836),32376=>array(30,-78,970,830),32377=>array(34,-66,934,839),32378=>array(45,-74,976,834),32379=>array(34,-64,954,839),32380=>array(24,-70,942,839),32381=>array(34,-70,958,839),32382=>array(57,-59,976,836),32383=>array(34,-64,957,844),32384=>array(42,-67,972,829),32385=>array(30,-58,971,851),32386=>array(22,-71,974,850),32387=>array(34,-68,969,839),32388=>array(36,-62,963,833),32389=>array(56,-68,948,850),32390=>array(51,-38,967,830),32391=>array(41,-66,960,831),32392=>array(34,-64,970,839),32393=>array(34,-64,981,845),32394=>array(31,-77,967,839),32395=>array(49,-68,961,837),32396=>array(34,-84,957,839),32397=>array(53,-62,947,789),32398=>array(24,-64,967,839),32399=>array(35,-67,961,839),32400=>array(19,-64,980,839),32401=>array(46,-68,956,833),32402=>array(34,-64,950,839),32403=>array(34,-67,954,839),32404=>array(24,-68,966,847),32405=>array(32,-68,979,849),32406=>array(19,-64,967,839),32407=>array(38,-65,941,833),32408=>array(30,-68,972,839),32409=>array(40,-67,964,835),32410=>array(26,-68,974,829),32411=>array(42,-71,953,839),32412=>array(19,-64,960,847),32413=>array(42,-62,955,822),32414=>array(53,-31,947,842),32415=>array(271,10,660,829),32416=>array(72,-69,847,828),32417=>array(57,-56,933,828),32418=>array(74,3,936,828),32419=>array(57,-64,933,828),32420=>array(43,-67,942,812),32421=>array(57,-24,936,843),32422=>array(61,-62,879,835),32423=>array(62,-71,941,828),32424=>array(58,-56,964,838),32425=>array(54,-66,912,830),32426=>array(57,-15,936,828),32427=>array(73,-69,874,820),32428=>array(46,-69,903,824),32429=>array(57,-54,927,828),32430=>array(77,-71,950,837),32431=>array(70,-34,929,834),32432=>array(57,-47,937,829),32433=>array(66,-59,943,824),32434=>array(40,-59,885,829),32435=>array(52,-57,898,833),32436=>array(72,-21,939,813),32437=>array(41,-64,945,833),32438=>array(32,-21,943,835),32439=>array(75,-67,957,828),32440=>array(46,-70,926,825),32441=>array(71,-65,944,840),32442=>array(60,-66,921,842),32443=>array(60,11,934,828),32444=>array(74,-72,895,824),32445=>array(74,-23,936,820),32446=>array(57,-61,915,828),32447=>array(44,-60,937,831),32448=>array(57,-66,942,829),32449=>array(57,-22,937,828),32450=>array(57,-65,966,832),32451=>array(35,-61,947,830),32452=>array(57,-14,925,807),32453=>array(77,-64,885,835),32454=>array(60,-57,895,783),32455=>array(39,-56,942,802),32456=>array(62,-79,947,834),32457=>array(39,-57,873,827),32458=>array(57,-66,938,832),32459=>array(53,-64,915,827),32460=>array(57,-67,903,828),32461=>array(54,-72,894,786),32462=>array(41,-74,958,818),32463=>array(57,-33,938,819),32464=>array(57,-67,950,832),32465=>array(42,-69,937,834),32466=>array(71,-65,945,835),32467=>array(67,-66,933,837),32468=>array(57,-63,958,840),32469=>array(44,-60,944,835),32470=>array(76,-22,923,828),32471=>array(53,-66,947,830),32472=>array(44,-55,934,838),32473=>array(57,-67,949,852),32474=>array(59,-58,882,839),32475=>array(57,-57,960,842),32476=>array(74,-63,967,847),32477=>array(39,-21,925,832),32478=>array(81,-64,947,840),32479=>array(57,-71,942,838),32480=>array(57,-74,954,828),32481=>array(57,-67,921,835),32482=>array(73,-59,879,827),32483=>array(50,-85,942,807),32484=>array(59,-68,962,832),32485=>array(59,-69,942,834),32486=>array(25,-66,964,833),32487=>array(53,-23,940,809),32488=>array(61,-67,909,847),32489=>array(41,-62,931,833),32490=>array(53,-69,924,829),32491=>array(57,-68,951,834),32492=>array(52,-66,969,828),32493=>array(28,-67,932,833),32494=>array(59,-63,937,836),32495=>array(63,-66,939,827),32496=>array(65,-65,936,838),32497=>array(53,-74,916,827),32498=>array(57,-64,949,828),32499=>array(50,-23,940,826),32500=>array(63,-64,920,836),32501=>array(67,-70,886,842),32502=>array(57,-72,958,836),32503=>array(34,-74,925,792),32504=>array(57,-69,881,827),32505=>array(49,-67,924,840),32506=>array(30,-64,937,828),32507=>array(53,-41,973,839),32508=>array(53,-67,934,844),32509=>array(61,-68,951,843),32510=>array(53,-64,917,850),32511=>array(30,-64,943,819),32512=>array(53,-67,973,818),32513=>array(57,-66,921,836),32514=>array(53,-63,939,829),32515=>array(53,-74,910,827),32516=>array(52,-70,953,832),32517=>array(60,-66,931,814),32518=>array(35,-54,932,841),32519=>array(57,-66,935,828),32520=>array(52,-73,937,830),32521=>array(57,-70,935,822),32522=>array(69,-28,959,805),32523=>array(39,-66,919,830),32524=>array(57,-43,959,828),32525=>array(52,-33,933,830),32526=>array(53,-71,953,818),32527=>array(53,-57,954,839),32528=>array(59,-64,959,842),32529=>array(53,-69,971,831),32530=>array(53,-72,951,844),32531=>array(66,-67,949,827),32532=>array(62,-69,925,848),32533=>array(39,-54,941,838),32534=>array(34,-69,922,837),32535=>array(57,-64,956,828),32536=>array(53,-73,937,834),32537=>array(47,-64,911,827),32538=>array(50,-67,946,832),32539=>array(53,-64,942,827),32540=>array(53,-68,936,843),32541=>array(52,-53,955,816),32542=>array(69,-63,962,855),32543=>array(53,-67,932,850),32544=>array(36,-64,919,847),32545=>array(56,-63,944,847),32546=>array(53,-23,943,840),32547=>array(55,-67,967,851),32548=>array(33,-50,933,824),32549=>array(57,-64,940,819),32550=>array(53,-68,958,827),32551=>array(53,-64,959,827),32552=>array(39,-75,937,822),32553=>array(41,-66,917,841),32554=>array(52,-76,953,817),32555=>array(53,-67,955,837),32556=>array(38,-68,945,825),32557=>array(57,-64,947,855),32558=>array(62,-67,931,839),32559=>array(53,-64,901,851),32560=>array(50,-40,935,806),32561=>array(53,-72,951,834),32562=>array(53,-66,963,827),32563=>array(57,-68,952,828),32564=>array(53,-71,946,842),32565=>array(38,-69,933,822),32566=>array(47,-60,953,831),32567=>array(58,-62,909,838),32568=>array(44,-45,941,836),32569=>array(50,-72,960,845),32570=>array(59,-68,950,836),32571=>array(58,-32,962,836),32572=>array(80,-73,960,851),32573=>array(48,-54,971,848),32574=>array(58,-53,954,855),32575=>array(49,-58,945,843),32576=>array(47,-64,960,851),32577=>array(47,-65,951,851),32578=>array(48,-68,912,780),32579=>array(69,-71,945,838),32580=>array(49,-68,956,833),32581=>array(48,-72,931,834),32582=>array(48,-68,951,829),32583=>array(45,-72,970,838),32584=>array(48,-70,953,831),32585=>array(63,-54,935,837),32586=>array(72,-68,958,825),32587=>array(62,-68,939,838),32588=>array(59,-65,951,790),32589=>array(68,-62,957,797),32590=>array(34,-53,951,842),32591=>array(45,-63,957,841),32592=>array(44,-59,949,838),32593=>array(117,-60,883,780),32594=>array(148,317,884,597),32595=>array(137,265,863,657),32596=>array(114,-68,894,787),32597=>array(64,-64,917,786),32598=>array(110,10,917,802),32599=>array(69,-55,884,792),32600=>array(45,-64,955,787),32601=>array(50,-68,955,789),32602=>array(98,-57,869,791),32603=>array(42,-61,973,798),32604=>array(79,-35,961,777),32605=>array(55,-20,950,798),32606=>array(56,-62,947,790),32607=>array(68,-60,954,787),32608=>array(47,-58,947,784),32609=>array(63,-24,941,785),32610=>array(55,-60,904,792),32611=>array(63,-33,958,763),32612=>array(55,-53,908,785),32613=>array(141,-70,883,779),32614=>array(82,-68,933,783),32615=>array(55,-71,971,780),32616=>array(29,-34,966,794),32617=>array(59,-69,956,782),32618=>array(57,-69,943,794),32619=>array(59,-64,968,787),32620=>array(44,-72,969,784),32621=>array(63,-51,963,800),32622=>array(100,-73,945,813),32623=>array(81,-69,931,787),32624=>array(71,-73,900,810),32625=>array(51,-72,949,791),32626=>array(58,-65,944,789),32627=>array(56,-26,954,780),32628=>array(34,-62,928,776),32629=>array(57,-69,919,783),32630=>array(136,-70,882,783),32631=>array(68,-63,967,807),32632=>array(85,-73,951,782),32633=>array(39,-64,949,788),32634=>array(44,-70,973,783),32635=>array(41,-68,951,782),32636=>array(59,-65,943,810),32637=>array(36,-65,947,791),32638=>array(110,-67,905,794),32639=>array(50,-8,947,805),32640=>array(107,-71,916,787),32641=>array(49,-65,890,772),32642=>array(64,-63,896,802),32643=>array(42,-65,968,792),32644=>array(44,-64,953,815),32645=>array(38,-67,950,807),32646=>array(43,-73,956,784),32647=>array(63,-64,953,788),32648=>array(62,-64,938,796),32649=>array(50,-52,968,792),32650=>array(72,-67,946,855),32651=>array(60,-67,953,821),32652=>array(39,-61,953,844),32653=>array(38,-67,965,836),32654=>array(45,-61,955,845),32655=>array(54,-68,957,842),32656=>array(34,-67,974,830),32657=>array(52,-67,991,854),32658=>array(54,-73,985,842),32659=>array(44,-71,972,842),32660=>array(61,-63,957,856),32661=>array(46,-66,965,848),32662=>array(50,-71,967,834),32663=>array(36,-66,965,841),32664=>array(53,-68,954,843),32665=>array(53,-63,941,854),32666=>array(22,-68,960,847),32667=>array(53,-69,938,846),32668=>array(57,-66,960,844),32669=>array(42,-73,950,839),32670=>array(29,-33,934,838),32671=>array(36,-68,922,823),32672=>array(43,-72,969,840),32673=>array(49,-74,960,845),32674=>array(52,-69,974,837),32675=>array(57,-64,954,787),32676=>array(32,-62,960,850),32677=>array(46,-75,950,833),32678=>array(41,-73,964,834),32679=>array(35,-75,965,830),32680=>array(49,-62,978,858),32681=>array(48,-63,941,843),32682=>array(42,-77,965,842),32683=>array(39,-70,950,845),32684=>array(51,-70,978,822),32685=>array(50,-74,969,827),32686=>array(33,-58,974,860),32687=>array(55,-67,930,842),32688=>array(41,-82,971,831),32689=>array(53,-73,970,833),32690=>array(34,-66,959,853),32691=>array(46,-69,968,832),32692=>array(35,-83,969,808),32693=>array(46,-82,967,826),32694=>array(16,-65,959,842),32695=>array(53,-71,969,835),32696=>array(29,-60,973,841),32697=>array(51,-62,966,853),32698=>array(49,-64,968,833),32699=>array(52,-69,970,836),32700=>array(41,-71,965,797),32701=>array(73,-50,892,785),32702=>array(40,-70,953,783),32703=>array(43,-64,945,780),32704=>array(47,-63,917,836),32705=>array(47,-62,958,822),32706=>array(43,-71,981,790),32707=>array(52,-67,938,840),32708=>array(47,-73,970,837),32709=>array(31,-59,972,839),32710=>array(54,-58,946,790),32711=>array(41,-76,959,785),32712=>array(113,-79,923,788),32713=>array(29,-64,910,826),32714=>array(56,-65,915,821),32715=>array(42,-67,950,836),32716=>array(50,-20,942,798),32717=>array(33,-72,962,821),32718=>array(31,-63,918,838),32719=>array(32,-76,965,785),32720=>array(32,-74,976,827),32721=>array(37,-64,914,828),32722=>array(74,-72,892,782),32723=>array(70,-65,914,838),32724=>array(51,-60,893,855),32725=>array(47,-63,965,845),32726=>array(26,-64,916,817),32727=>array(61,-70,916,829),32728=>array(32,-71,941,818),32729=>array(45,-64,931,836),32730=>array(74,-65,926,801),32731=>array(37,-63,982,844),32732=>array(37,-72,964,783),32733=>array(30,-48,910,825),32734=>array(53,-68,962,834),32735=>array(40,-80,927,807),32736=>array(53,-61,947,807),32737=>array(46,-56,921,826),32738=>array(41,-71,903,782),32739=>array(61,-63,936,797),32740=>array(98,-71,918,785),32741=>array(42,-59,956,834),32742=>array(65,-59,959,863),32743=>array(57,-69,913,855),32744=>array(88,-65,970,785),32745=>array(41,-60,917,795),32746=>array(59,-73,968,825),32747=>array(52,-74,963,783),32748=>array(62,-62,957,790),32749=>array(53,-76,983,824),32750=>array(75,-64,903,788),32751=>array(66,-52,941,802),32752=>array(60,-69,978,853),32753=>array(46,-63,904,848),32754=>array(41,-73,895,780),32755=>array(60,-67,929,785),32756=>array(40,-73,969,816),32757=>array(37,-54,948,854),32758=>array(48,-77,913,839),32759=>array(53,-67,917,830),32760=>array(61,-70,919,835),32761=>array(28,-66,966,830),32762=>array(46,-68,913,845),32763=>array(59,-67,909,824),32764=>array(54,-66,946,807),32765=>array(30,-67,910,832),32766=>array(60,-57,928,795),32767=>array(66,-52,917,843),32768=>array(28,-73,954,828),32769=>array(38,-39,923,832),32770=>array(21,160,923,832),32771=>array(48,-56,929,836),32772=>array(39,-36,948,834),32773=>array(62,-64,929,836),32774=>array(33,-69,938,836),32775=>array(59,-64,950,835),32776=>array(69,-66,933,840),32777=>array(40,-55,951,840),32778=>array(49,-53,950,836),32779=>array(53,-53,950,836),32780=>array(89,-68,923,768),32781=>array(63,-68,934,789),32782=>array(46,-67,970,791),32783=>array(55,-74,951,822),32784=>array(51,-79,956,836),32785=>array(62,-62,954,840),32786=>array(55,-65,968,829),32787=>array(46,-65,924,827),32788=>array(46,-65,957,828),32789=>array(31,-73,954,831),32790=>array(31,-70,970,831),32791=>array(35,-68,924,828),32792=>array(36,-73,943,832),32793=>array(36,-73,951,832),32794=>array(46,-72,960,833),32795=>array(47,-71,951,839),32796=>array(38,-73,909,832),32797=>array(31,-73,938,831),32798=>array(47,-68,914,829),32799=>array(49,-58,964,828),32800=>array(21,-78,964,842),32801=>array(59,-66,929,831),32802=>array(25,-72,914,818),32803=>array(46,-73,968,844),32804=>array(46,-70,956,826),32805=>array(39,-69,933,832),32806=>array(61,-71,927,830),32807=>array(32,-73,922,806),32808=>array(34,-64,959,832),32809=>array(36,-67,964,833),32810=>array(43,-69,954,842),32811=>array(44,-71,943,830),32812=>array(34,-69,954,835),32813=>array(53,-69,949,840),32814=>array(44,-86,968,831),32815=>array(49,-69,966,827),32816=>array(33,-62,979,830),32817=>array(23,-68,955,838),32818=>array(45,-69,972,849),32819=>array(55,-74,922,781),32820=>array(56,-67,967,828),32821=>array(48,-62,954,789),32822=>array(59,-67,930,786),32823=>array(40,-69,960,839),32824=>array(55,-66,916,830),32825=>array(55,-67,978,853),32826=>array(29,-67,944,789),32827=>array(42,-64,951,824),32828=>array(46,-67,957,789),32829=>array(40,-70,950,831),32830=>array(55,-65,960,838),32831=>array(38,-67,954,825),32832=>array(50,-67,967,825),32833=>array(49,-67,951,805),32834=>array(39,-60,952,794),32835=>array(35,-65,961,829),32836=>array(50,-72,971,850),32837=>array(50,-67,945,819),32838=>array(28,-62,966,854),32839=>array(58,-70,957,781),32840=>array(72,-80,921,822),32841=>array(46,-68,921,827),32842=>array(59,-71,914,830),32843=>array(51,-48,923,841),32844=>array(31,-70,955,782),32845=>array(29,-68,924,830),32846=>array(63,-67,962,826),32847=>array(49,-68,960,785),32848=>array(45,-70,959,822),32849=>array(50,-70,955,770),32850=>array(36,-64,941,804),32851=>array(47,-59,960,806),32852=>array(37,-60,940,830),32853=>array(50,-67,955,844),32854=>array(66,-37,934,805),32855=>array(50,-75,968,833),32856=>array(33,-71,955,831),32857=>array(50,-67,974,835),32858=>array(36,-61,948,793),32859=>array(50,-67,956,841),32860=>array(48,-67,956,834),32861=>array(45,-71,952,823),32862=>array(119,-68,901,786),32863=>array(34,-69,950,852),32864=>array(50,-68,959,845),32865=>array(32,-65,968,819),32866=>array(50,-83,949,797),32867=>array(50,-67,953,816),32868=>array(41,-61,970,856),32869=>array(50,-68,925,827),32870=>array(50,-67,964,839),32871=>array(51,-72,970,817),32872=>array(52,-65,963,806),32873=>array(34,-69,928,824),32874=>array(33,-60,950,838),32875=>array(48,-65,963,806),32876=>array(46,-71,971,827),32877=>array(50,-67,969,856),32878=>array(52,-65,967,782),32879=>array(42,-65,946,842),32880=>array(43,-66,973,835),32881=>array(53,-70,948,838),32882=>array(62,-64,946,833),32883=>array(48,-70,952,846),32884=>array(44,-67,963,839),32885=>array(40,-67,962,838),32886=>array(42,-66,951,808),32887=>array(35,-70,960,839),32888=>array(44,-73,942,827),32889=>array(41,-64,967,835),32890=>array(41,-65,948,846),32891=>array(35,-65,954,831),32892=>array(44,-67,966,847),32893=>array(58,-67,966,840),32894=>array(43,-71,962,840),32895=>array(73,-66,945,833),32896=>array(73,-66,931,833),32897=>array(45,-61,947,848),32898=>array(50,-72,953,828),32899=>array(50,-62,941,834),32900=>array(28,-68,945,829),32901=>array(46,-69,947,833),32902=>array(46,-61,946,841),32903=>array(51,-61,949,850),32904=>array(50,-61,953,856),32905=>array(118,-73,882,841),32906=>array(49,-68,959,783),32907=>array(68,-70,898,834),32908=>array(31,-74,948,773),32909=>array(59,-75,957,831),32910=>array(116,-45,892,762),32911=>array(42,-79,958,777),32912=>array(41,-78,977,826),32913=>array(76,-59,921,844),32914=>array(39,-64,954,833),32915=>array(135,-50,924,826),32916=>array(60,-71,963,825),32917=>array(53,-65,908,799),32918=>array(133,-61,861,836),32919=>array(60,-71,944,839),32920=>array(57,-70,933,826),32921=>array(70,-64,841,788),32922=>array(63,-68,938,829),32923=>array(54,-70,942,786),32924=>array(44,-58,965,856),32925=>array(60,-71,936,785),32926=>array(48,-62,959,803),32927=>array(31,-80,950,782),32928=>array(22,-61,886,786),32929=>array(51,-65,944,788),32930=>array(43,-70,969,837),32931=>array(35,-69,972,833),32932=>array(38,-71,939,831),32933=>array(51,-70,949,779),32934=>array(29,-60,968,810),32935=>array(60,-72,944,785),32936=>array(60,-71,940,813),32937=>array(53,-70,901,810),32938=>array(34,-71,949,825),32939=>array(38,-67,957,833),32940=>array(44,-62,961,831),32941=>array(24,-68,877,799),32942=>array(41,-73,957,832),32943=>array(59,-54,953,831),32944=>array(60,-71,977,837),32945=>array(30,-62,945,826),32946=>array(92,-49,907,840),32947=>array(46,-71,921,829),32948=>array(52,-49,928,844),32949=>array(39,-68,954,829),32950=>array(37,-58,956,824),32951=>array(30,-67,939,824),32952=>array(46,-65,956,811),32953=>array(56,-71,959,811),32954=>array(31,-70,953,839),32955=>array(121,-58,897,827),32956=>array(23,-82,950,827),32957=>array(23,-81,956,822),32958=>array(124,-69,944,820),32959=>array(31,-68,894,814),32960=>array(35,-73,946,815),32961=>array(27,-65,948,824),32962=>array(50,-71,912,833),32963=>array(170,-49,849,785),32964=>array(177,-48,838,834),32965=>array(45,-76,974,826),32966=>array(37,-70,954,786),32967=>array(45,-75,928,826),32968=>array(41,-73,968,826),32969=>array(40,-60,903,854),32970=>array(34,-66,908,843),32971=>array(57,-70,934,835),32972=>array(60,-57,937,826),32973=>array(31,-73,977,837),32974=>array(49,-70,944,838),32975=>array(51,-60,957,840),32976=>array(45,-59,905,840),32977=>array(32,-55,966,797),32978=>array(57,-70,945,788),32979=>array(57,-70,959,789),32980=>array(54,-68,968,835),32981=>array(44,-57,961,848),32982=>array(45,-69,934,834),32983=>array(39,-68,980,840),32984=>array(42,-67,957,836),32985=>array(53,-70,940,837),32986=>array(44,-69,948,786),32987=>array(49,-70,899,787),32988=>array(44,-69,953,824),32989=>array(34,-72,948,833),32990=>array(37,-64,958,845),32991=>array(35,-60,962,787),32992=>array(29,-62,957,839),32993=>array(71,-67,895,818),32994=>array(66,-70,948,787),32995=>array(47,-71,964,825),32996=>array(40,-66,967,846),32997=>array(38,-50,935,789),32998=>array(38,-67,981,829),32999=>array(18,-67,931,826),33000=>array(31,-72,939,817),33001=>array(31,-80,946,822),33002=>array(34,-69,921,817),33003=>array(32,-72,923,782),33004=>array(35,-66,932,827),33005=>array(48,-68,910,790),33006=>array(35,-70,965,837),33007=>array(28,-70,969,848),33008=>array(39,-72,963,838),33009=>array(35,-60,959,823),33010=>array(52,-69,975,845),33011=>array(35,-71,967,845),33012=>array(28,-70,912,786),33013=>array(46,-72,959,782),33014=>array(28,-71,946,842),33015=>array(73,-71,878,847),33016=>array(31,-58,924,841),33017=>array(46,-73,965,780),33018=>array(45,-72,948,840),33019=>array(49,-67,967,838),33020=>array(27,-70,947,845),33021=>array(63,-55,959,844),33022=>array(51,-64,952,829),33023=>array(34,-72,959,827),33024=>array(35,-77,972,813),33025=>array(29,-67,962,818),33026=>array(48,-70,952,815),33027=>array(33,-54,947,821),33028=>array(33,-70,965,824),33029=>array(73,-52,940,841),33030=>array(30,-72,958,844),33031=>array(40,-67,915,841),33032=>array(35,-62,967,836),33033=>array(44,-70,972,840),33034=>array(56,-59,944,835),33035=>array(73,-49,940,808),33036=>array(33,-70,943,841),33037=>array(38,-74,951,818),33038=>array(37,-73,932,818),33039=>array(31,-66,920,821),33040=>array(24,-82,951,832),33041=>array(43,-64,951,841),33042=>array(27,-70,980,821),33043=>array(32,-72,962,827),33044=>array(28,-64,923,846),33045=>array(44,-72,967,837),33046=>array(45,-67,951,837),33047=>array(45,-58,925,851),33048=>array(26,-67,963,821),33049=>array(42,-75,948,820),33050=>array(33,-61,913,810),33051=>array(49,-65,945,791),33052=>array(27,-70,944,776),33053=>array(48,-71,946,835),33054=>array(49,-60,970,833),33055=>array(39,-71,953,815),33056=>array(44,-62,972,820),33057=>array(44,-62,972,820),33058=>array(41,-70,942,839),33059=>array(58,-56,935,790),33060=>array(33,-57,967,800),33061=>array(44,-78,964,822),33062=>array(31,-70,968,831),33063=>array(33,-71,985,838),33064=>array(31,-70,975,825),33065=>array(37,-67,965,846),33066=>array(31,-70,961,846),33067=>array(32,-71,968,812),33068=>array(65,-72,986,834),33069=>array(39,-54,950,787),33070=>array(31,-75,948,835),33071=>array(28,-70,952,839),33072=>array(44,-60,956,797),33073=>array(59,-71,944,833),33074=>array(23,-71,970,788),33075=>array(27,-67,964,818),33076=>array(31,-70,969,797),33077=>array(31,-58,947,788),33078=>array(34,-67,925,785),33079=>array(31,-70,906,833),33080=>array(26,-65,944,836),33081=>array(42,-64,962,799),33082=>array(34,-71,943,839),33083=>array(31,-72,959,833),33084=>array(31,-66,948,787),33085=>array(23,-68,945,830),33086=>array(28,-70,957,841),33087=>array(31,-70,974,841),33088=>array(31,-73,976,851),33089=>array(31,-71,953,830),33090=>array(31,-70,969,788),33091=>array(46,-71,981,830),33092=>array(33,-67,953,833),33093=>array(31,-70,970,841),33094=>array(28,-70,965,835),33095=>array(38,-81,974,822),33096=>array(32,-77,940,828),33097=>array(43,-70,959,816),33098=>array(52,-69,956,824),33099=>array(21,-70,970,812),33100=>array(31,-72,972,844),33101=>array(41,-66,972,825),33102=>array(108,-59,958,815),33103=>array(40,-78,980,783),33104=>array(46,-68,948,839),33105=>array(28,-70,952,835),33106=>array(44,-74,944,784),33107=>array(18,-66,936,818),33108=>array(29,-70,947,822),33109=>array(26,-64,962,834),33110=>array(31,-70,973,835),33111=>array(31,-70,955,831),33112=>array(31,-70,919,787),33113=>array(34,-78,951,833),33114=>array(23,-83,949,831),33115=>array(46,-72,954,782),33116=>array(47,-75,973,822),33117=>array(31,-70,975,788),33118=>array(45,-67,970,836),33119=>array(31,-70,952,836),33120=>array(49,-72,987,831),33121=>array(34,-77,903,782),33122=>array(38,-67,911,803),33123=>array(31,-70,948,850),33124=>array(38,-69,955,840),33125=>array(19,-70,945,788),33126=>array(65,-65,925,846),33127=>array(34,-70,973,855),33128=>array(31,-70,956,835),33129=>array(49,-71,974,830),33130=>array(31,-70,953,788),33131=>array(48,-64,945,836),33132=>array(31,-70,977,796),33133=>array(28,-70,947,787),33134=>array(28,-70,964,786),33135=>array(47,-72,956,832),33136=>array(24,-70,941,793),33137=>array(26,-63,964,829),33138=>array(43,-77,981,782),33139=>array(58,-71,911,820),33140=>array(27,-70,972,833),33141=>array(48,-70,980,791),33142=>array(39,-75,979,825),33143=>array(37,-71,954,785),33144=>array(42,-60,952,801),33145=>array(21,-70,973,837),33146=>array(21,-70,968,837),33147=>array(28,-70,950,829),33148=>array(26,-76,941,778),33149=>array(26,-78,950,784),33150=>array(31,-61,951,836),33151=>array(22,-60,958,783),33152=>array(28,-69,938,819),33153=>array(30,-70,983,843),33154=>array(46,-48,944,847),33155=>array(60,-70,967,785),33156=>array(48,-70,986,830),33157=>array(48,-64,954,843),33158=>array(45,-64,953,825),33159=>array(45,-72,981,832),33160=>array(18,-69,939,784),33161=>array(41,-75,964,826),33162=>array(34,-70,961,831),33163=>array(72,-67,932,835),33164=>array(44,-70,980,823),33165=>array(49,-72,961,835),33166=>array(36,-74,972,842),33167=>array(94,-62,906,834),33168=>array(46,-52,944,846),33169=>array(25,-63,934,832),33170=>array(48,-70,963,787),33171=>array(48,-75,969,853),33172=>array(43,-64,953,839),33173=>array(44,-75,920,783),33174=>array(30,-70,971,844),33175=>array(37,-65,959,829),33176=>array(39,-69,962,788),33177=>array(39,-60,969,829),33178=>array(46,-68,941,848),33179=>array(47,-72,954,835),33180=>array(19,-70,972,823),33181=>array(28,-70,966,828),33182=>array(41,-69,944,826),33183=>array(45,-70,958,839),33184=>array(39,-76,977,788),33185=>array(18,-70,987,850),33186=>array(45,-67,951,824),33187=>array(33,-71,938,817),33188=>array(18,-70,968,787),33189=>array(37,-62,950,844),33190=>array(39,-70,954,832),33191=>array(26,-60,950,833),33192=>array(17,-70,975,837),33193=>array(36,-78,969,836),33194=>array(26,-68,891,832),33195=>array(49,-75,982,845),33196=>array(55,-75,986,830),33197=>array(30,-70,969,839),33198=>array(40,-68,975,829),33199=>array(24,-70,981,837),33200=>array(30,-60,966,852),33201=>array(45,-75,983,840),33202=>array(41,-68,969,838),33203=>array(35,-67,949,840),33204=>array(36,-57,963,848),33205=>array(40,-67,964,830),33206=>array(48,-70,930,793),33207=>array(49,-70,967,827),33208=>array(42,-70,956,839),33209=>array(46,-79,956,830),33210=>array(28,-68,922,839),33211=>array(42,-70,959,845),33212=>array(43,-72,976,805),33213=>array(38,-66,956,853),33214=>array(36,-71,983,859),33215=>array(35,-75,969,840),33216=>array(35,-57,960,788),33217=>array(30,-82,961,837),33218=>array(33,-58,927,836),33219=>array(37,-75,952,849),33220=>array(39,-68,959,822),33221=>array(50,-69,916,787),33222=>array(21,-70,963,840),33223=>array(48,-67,931,835),33224=>array(36,-70,940,833),33225=>array(53,-68,991,854),33226=>array(39,-87,974,784),33227=>array(35,-71,959,827),33228=>array(40,-72,973,836),33229=>array(45,-73,966,843),33230=>array(36,-58,962,805),33231=>array(35,-74,955,847),33232=>array(45,-73,964,840),33233=>array(46,-78,948,777),33234=>array(44,-73,969,835),33235=>array(32,-61,966,838),33236=>array(32,-60,973,796),33237=>array(30,-60,965,853),33238=>array(41,-54,954,830),33239=>array(55,-70,979,837),33240=>array(40,-65,956,848),33241=>array(43,-75,969,829),33242=>array(43,-74,971,827),33243=>array(48,-67,946,790),33244=>array(41,-71,972,827),33245=>array(41,-50,964,867),33246=>array(39,-56,955,805),33247=>array(28,-61,970,838),33248=>array(54,-67,942,846),33249=>array(54,-53,949,849),33250=>array(43,-78,956,829),33251=>array(151,-58,927,780),33252=>array(100,-31,976,782),33253=>array(120,-65,959,820),33254=>array(58,-70,954,772),33255=>array(31,-63,956,836),33256=>array(120,-65,932,841),33257=>array(48,-76,965,781),33258=>array(201,-67,821,853),33259=>array(87,-47,948,840),33260=>array(46,-67,967,850),33261=>array(56,-63,970,844),33262=>array(42,-66,937,837),33263=>array(52,-64,946,849),33264=>array(61,-72,925,852),33265=>array(109,-101,922,839),33266=>array(37,-71,967,844),33267=>array(80,-16,915,770),33268=>array(59,-71,971,831),33269=>array(49,-57,965,848),33270=>array(55,-68,962,840),33271=>array(58,-72,960,821),33272=>array(54,-42,952,756),33273=>array(46,-78,954,824),33274=>array(80,-32,933,829),33275=>array(56,-68,959,829),33276=>array(156,-46,863,793),33277=>array(138,-68,825,829),33278=>array(42,-71,966,824),33279=>array(57,-68,954,833),33280=>array(83,-67,917,834),33281=>array(50,-74,956,834),33282=>array(44,-65,969,838),33283=>array(85,-60,898,834),33284=>array(58,-68,927,834),33285=>array(65,-52,874,842),33286=>array(52,-59,924,829),33287=>array(40,-70,955,836),33288=>array(68,-56,951,826),33289=>array(55,-67,965,810),33290=>array(62,-67,947,832),33291=>array(73,-41,936,832),33292=>array(76,-55,909,831),33293=>array(46,-65,958,856),33294=>array(46,-65,958,856),33295=>array(61,-57,879,831),33296=>array(43,-62,948,828),33297=>array(58,-67,956,829),33298=>array(45,-64,945,848),33299=>array(40,-53,931,818),33300=>array(55,-63,971,789),33301=>array(57,-75,961,824),33302=>array(36,-56,947,851),33303=>array(39,-58,955,843),33304=>array(31,-65,933,851),33305=>array(45,-63,965,846),33306=>array(50,-65,949,855),33307=>array(44,-72,942,837),33308=>array(41,-70,943,842),33309=>array(63,-68,937,841),33310=>array(47,-76,949,852),33311=>array(71,-69,936,839),33312=>array(47,-79,902,826),33313=>array(43,-66,947,837),33314=>array(67,-68,921,845),33315=>array(42,-71,943,821),33316=>array(53,-68,975,845),33317=>array(54,-71,963,853),33318=>array(42,-60,981,860),33319=>array(53,-68,948,848),33320=>array(34,-67,978,855),33321=>array(46,-68,958,835),33322=>array(37,-56,960,849),33323=>array(59,-63,945,849),33324=>array(44,-70,963,833),33325=>array(35,-70,935,822),33326=>array(39,-69,931,834),33327=>array(44,-61,910,856),33328=>array(41,-68,932,838),33329=>array(36,-66,944,833),33330=>array(39,-70,986,860),33331=>array(74,-64,915,839),33332=>array(51,-70,962,846),33333=>array(39,-54,951,849),33334=>array(40,-68,896,851),33335=>array(34,-65,963,849),33336=>array(54,-54,956,849),33337=>array(41,-67,957,849),33338=>array(41,-61,906,856),33339=>array(29,-66,924,828),33340=>array(44,-73,965,835),33341=>array(52,-70,972,840),33342=>array(36,-75,924,825),33343=>array(53,-68,973,839),33344=>array(74,-60,964,849),33345=>array(44,-68,975,845),33346=>array(34,-73,965,841),33347=>array(39,-70,978,843),33348=>array(49,-68,951,846),33349=>array(38,-70,966,840),33350=>array(35,-68,976,845),33351=>array(34,-61,965,849),33352=>array(32,-68,972,845),33353=>array(36,-73,962,836),33354=>array(53,-68,930,845),33355=>array(52,-68,971,839),33356=>array(23,-51,974,846),33357=>array(29,-73,963,845),33358=>array(34,-67,954,839),33359=>array(37,-64,954,856),33360=>array(36,-75,977,840),33361=>array(37,-68,915,838),33362=>array(52,-56,912,850),33363=>array(54,-71,980,828),33364=>array(26,-71,986,849),33365=>array(37,-67,938,847),33366=>array(39,-75,957,843),33367=>array(36,-72,959,845),33368=>array(49,-64,964,854),33369=>array(64,-63,991,863),33370=>array(49,-79,950,829),33371=>array(43,-80,956,833),33372=>array(36,-73,950,831),33373=>array(54,-54,966,849),33374=>array(44,-74,971,834),33375=>array(29,-54,963,849),33376=>array(20,-68,980,845),33377=>array(41,-73,923,836),33378=>array(44,-68,965,844),33379=>array(44,-63,967,856),33380=>array(34,-65,978,852),33381=>array(29,-71,968,850),33382=>array(34,-54,955,849),33383=>array(23,-68,970,845),33384=>array(29,-61,972,844),33385=>array(37,-72,970,845),33386=>array(44,-61,982,849),33387=>array(49,-68,973,845),33388=>array(37,-72,959,840),33389=>array(35,-62,970,858),33390=>array(112,-56,974,796),33391=>array(85,-61,963,820),33392=>array(40,-60,942,791),33393=>array(46,-68,958,827),33394=>array(46,-17,958,838),33395=>array(54,-62,938,828),33396=>array(53,-72,969,842),33397=>array(50,-73,961,831),33398=>array(48,-66,960,832),33399=>array(54,-66,960,832),33400=>array(47,-69,912,827),33401=>array(62,310,913,613),33402=>array(69,-29,919,820),33403=>array(64,-66,943,826),33404=>array(66,-64,939,826),33405=>array(42,-68,974,832),33406=>array(62,-60,946,825),33407=>array(60,-64,935,830),33408=>array(64,-66,943,826),33409=>array(56,-67,945,826),33410=>array(61,-57,911,831),33411=>array(47,-52,961,843),33412=>array(41,-69,969,832),33413=>array(61,-63,950,833),33414=>array(63,-67,946,836),33415=>array(81,-69,931,836),33416=>array(63,-69,940,831),33417=>array(65,-85,938,831),33418=>array(59,-71,951,822),33419=>array(65,-62,938,831),33420=>array(64,-61,932,831),33421=>array(67,-62,929,831),33422=>array(68,-61,936,833),33423=>array(53,-23,949,822),33424=>array(78,-71,948,823),33425=>array(60,-28,951,826),33426=>array(66,-20,936,823),33427=>array(71,-66,947,826),33428=>array(50,-68,915,838),33429=>array(62,-66,912,823),33430=>array(60,-66,936,823),33431=>array(62,-70,912,823),33432=>array(70,-80,959,818),33433=>array(65,-65,955,834),33434=>array(64,-46,950,832),33435=>array(66,-73,957,820),33436=>array(52,-58,929,832),33437=>array(55,-74,967,824),33438=>array(54,-72,962,826),33439=>array(36,-62,976,833),33440=>array(46,-71,971,831),33441=>array(62,-70,939,830),33442=>array(44,-67,956,823),33443=>array(38,-70,935,819),33444=>array(47,-64,967,829),33445=>array(57,-68,961,836),33446=>array(45,-75,937,827),33447=>array(71,-51,943,837),33448=>array(49,-65,970,833),33449=>array(38,-80,971,840),33450=>array(80,-64,956,836),33451=>array(34,-58,971,832),33452=>array(39,-60,957,837),33453=>array(78,-35,936,822),33454=>array(73,-63,927,825),33455=>array(33,-19,951,837),33456=>array(47,-62,974,833),33457=>array(49,-69,934,826),33458=>array(29,-44,951,823),33459=>array(52,-63,933,838),33460=>array(58,-77,941,822),33461=>array(49,-69,972,826),33462=>array(53,-69,944,833),33463=>array(82,-20,935,829),33464=>array(68,-71,940,824),33465=>array(58,-67,933,829),33466=>array(55,-84,979,820),33467=>array(59,-67,912,838),33468=>array(72,-38,951,839),33469=>array(57,-57,943,838),33470=>array(60,-61,954,832),33471=>array(48,-52,913,827),33472=>array(52,-73,964,823),33473=>array(44,-68,941,827),33474=>array(56,-75,968,827),33475=>array(47,-76,980,818),33476=>array(63,-75,937,822),33477=>array(44,-71,916,818),33478=>array(44,-55,913,828),33479=>array(63,-65,913,828),33480=>array(53,-68,912,824),33481=>array(67,-51,918,823),33482=>array(49,-84,928,816),33483=>array(59,-64,931,820),33484=>array(63,-67,942,826),33485=>array(29,-44,951,823),33486=>array(65,9,916,824),33487=>array(61,-68,936,822),33488=>array(62,-62,924,837),33489=>array(60,-66,948,828),33490=>array(57,-68,949,833),33491=>array(42,-67,965,832),33492=>array(71,-65,941,832),33493=>array(62,-66,938,827),33494=>array(72,-71,944,822),33495=>array(69,-68,940,830),33496=>array(63,-78,933,820),33497=>array(51,-14,947,840),33498=>array(70,-73,944,833),33499=>array(66,-63,949,833),33500=>array(68,-65,938,834),33501=>array(68,-54,964,834),33502=>array(44,-45,946,820),33503=>array(48,-62,934,837),33504=>array(69,-70,962,824),33505=>array(74,-67,978,833),33506=>array(79,-70,931,834),33507=>array(79,-80,931,834),33508=>array(57,-11,951,833),33509=>array(72,-65,931,827),33510=>array(80,-67,912,832),33511=>array(67,-61,936,830),33512=>array(55,-67,960,829),33513=>array(79,-65,933,827),33514=>array(66,-62,956,830),33515=>array(79,-66,933,827),33516=>array(68,-70,941,823),33517=>array(77,-67,950,832),33518=>array(45,-67,934,830),33519=>array(58,-71,959,829),33520=>array(69,-68,953,826),33521=>array(50,-71,935,823),33522=>array(48,-64,948,829),33523=>array(48,-61,959,836),33524=>array(60,-14,957,830),33525=>array(47,-71,968,825),33526=>array(40,-70,975,823),33527=>array(51,-71,945,822),33528=>array(68,-66,938,827),33529=>array(55,-64,949,827),33530=>array(53,-52,948,833),33531=>array(43,-65,950,830),33532=>array(59,-36,938,827),33533=>array(49,-62,956,827),33534=>array(56,-50,956,839),33535=>array(50,-61,958,836),33536=>array(48,-66,949,832),33537=>array(80,-64,939,838),33538=>array(61,-70,943,828),33539=>array(46,-69,948,811),33540=>array(57,-68,943,836),33541=>array(51,-64,934,838),33542=>array(40,-59,944,836),33543=>array(48,-65,959,830),33544=>array(59,-41,964,830),33545=>array(50,-61,958,836),33546=>array(66,-29,932,836),33547=>array(80,-64,955,836),33548=>array(39,-66,954,831),33549=>array(55,-67,947,828),33550=>array(46,-32,963,831),33551=>array(33,-66,923,827),33552=>array(27,-57,916,826),33553=>array(58,-60,916,826),33554=>array(66,-70,944,825),33555=>array(68,-59,926,826),33556=>array(75,-7,926,826),33557=>array(62,-66,957,826),33558=>array(55,-73,966,821),33559=>array(61,-66,939,829),33560=>array(42,-66,943,835),33561=>array(66,-68,956,829),33562=>array(61,-72,925,822),33563=>array(63,-60,956,833),33564=>array(60,-64,946,832),33565=>array(69,-39,944,811),33566=>array(68,-40,943,811),33567=>array(77,-64,934,842),33568=>array(41,-68,966,826),33569=>array(53,-64,948,831),33570=>array(61,-53,942,841),33571=>array(46,-66,950,828),33572=>array(87,-76,960,826),33573=>array(59,-26,956,820),33574=>array(53,-68,970,824),33575=>array(54,-67,960,817),33576=>array(54,-65,947,834),33577=>array(47,-70,953,825),33578=>array(49,-76,962,822),33579=>array(61,-46,941,830),33580=>array(59,-58,949,838),33581=>array(56,-66,964,833),33582=>array(62,-70,938,826),33583=>array(53,-66,972,835),33584=>array(72,-66,959,835),33585=>array(38,-64,979,834),33586=>array(85,-60,935,838),33587=>array(56,-62,948,830),33588=>array(66,-65,939,834),33589=>array(72,-61,940,838),33590=>array(41,-67,968,831),33591=>array(44,-72,958,819),33592=>array(61,-63,954,840),33593=>array(53,-68,945,834),33594=>array(21,-31,946,859),33595=>array(57,-68,906,827),33596=>array(66,-64,939,833),33597=>array(42,-74,933,834),33598=>array(65,-69,957,827),33599=>array(46,-67,973,829),33600=>array(45,-58,938,833),33601=>array(65,-25,957,817),33602=>array(42,-68,978,823),33603=>array(51,-26,955,832),33604=>array(55,-53,950,839),33605=>array(59,-62,974,831),33606=>array(33,-62,888,834),33607=>array(60,-54,962,843),33608=>array(54,-71,951,825),33609=>array(59,-68,950,833),33610=>array(69,-74,933,827),33611=>array(68,-69,945,820),33612=>array(62,-73,949,823),33613=>array(69,-70,958,829),33614=>array(74,-30,964,811),33615=>array(29,-69,942,834),33616=>array(31,-53,950,844),33617=>array(55,-63,980,831),33618=>array(41,-56,955,837),33619=>array(65,-69,957,828),33620=>array(42,-66,943,833),33621=>array(48,-65,943,835),33622=>array(53,-30,959,837),33623=>array(61,-70,943,828),33624=>array(43,-65,941,827),33625=>array(57,-50,947,831),33626=>array(26,-60,941,831),33627=>array(59,-65,931,826),33628=>array(63,-68,923,823),33629=>array(30,-66,916,825),33630=>array(35,-71,950,825),33631=>array(35,-56,938,824),33632=>array(25,-70,949,827),33633=>array(34,-64,905,827),33634=>array(65,-62,939,830),33635=>array(42,-71,941,817),33636=>array(53,-57,910,833),33637=>array(37,-60,944,831),33638=>array(56,-63,928,831),33639=>array(67,-74,922,822),33640=>array(64,-66,915,825),33641=>array(37,-71,952,826),33642=>array(44,-66,936,824),33643=>array(78,-69,926,826),33644=>array(35,-66,915,827),33645=>array(36,-16,925,821),33646=>array(45,-68,921,824),33647=>array(56,-68,917,822),33648=>array(48,-69,945,826),33649=>array(73,-63,928,821),33650=>array(56,-32,951,821),33651=>array(59,-34,954,805),33652=>array(45,-76,974,829),33653=>array(63,-32,971,823),33654=>array(71,-79,958,825),33655=>array(42,-74,945,834),33656=>array(53,-64,948,832),33657=>array(57,-58,935,831),33658=>array(49,-62,937,823),33659=>array(35,-65,964,831),33660=>array(49,-65,956,831),33661=>array(48,-72,954,832),33662=>array(51,-70,954,821),33663=>array(41,-62,959,827),33664=>array(45,-67,968,821),33665=>array(69,-16,943,826),33666=>array(62,-70,916,821),33667=>array(48,-70,947,827),33668=>array(51,-66,938,821),33669=>array(26,-74,947,822),33670=>array(62,-65,955,835),33671=>array(57,-75,938,824),33672=>array(54,-76,956,821),33673=>array(46,-59,933,839),33674=>array(46,-69,943,822),33675=>array(50,-70,947,824),33676=>array(42,-63,956,822),33677=>array(55,-69,944,820),33678=>array(42,-67,947,832),33679=>array(47,-70,959,824),33680=>array(56,-66,960,818),33681=>array(39,-64,980,832),33682=>array(66,-70,938,833),33683=>array(60,-62,947,833),33684=>array(66,-65,939,820),33685=>array(54,-69,972,829),33686=>array(76,-18,949,836),33687=>array(69,-63,951,836),33688=>array(53,-67,947,832),33689=>array(45,-63,953,832),33690=>array(40,-73,949,825),33691=>array(36,-69,959,826),33692=>array(20,-82,968,828),33693=>array(60,-17,955,838),33694=>array(47,-58,961,830),33695=>array(37,-79,966,831),33696=>array(42,-67,956,831),33697=>array(55,-73,970,831),33698=>array(57,-65,964,834),33699=>array(47,-24,957,832),33700=>array(66,-67,940,827),33701=>array(46,-65,943,824),33702=>array(76,-64,949,824),33703=>array(46,-62,950,832),33704=>array(61,-61,950,835),33705=>array(53,-64,948,835),33706=>array(69,-65,948,831),33707=>array(65,-72,962,823),33708=>array(43,-64,953,834),33709=>array(61,-65,912,829),33710=>array(50,-73,939,827),33711=>array(47,-67,969,824),33712=>array(54,-74,969,823),33713=>array(32,-61,948,829),33714=>array(36,-59,947,809),33715=>array(62,-64,920,826),33716=>array(62,-63,912,827),33717=>array(43,-59,956,832),33718=>array(35,-19,962,823),33719=>array(32,-63,940,830),33720=>array(35,-66,925,827),33721=>array(65,-19,924,825),33722=>array(62,-62,912,824),33723=>array(42,-64,919,818),33724=>array(50,-27,928,824),33725=>array(40,-65,971,837),33726=>array(36,-71,980,829),33727=>array(63,-65,947,827),33728=>array(51,-68,966,830),33729=>array(71,-65,939,833),33730=>array(85,-63,937,823),33731=>array(47,-73,945,823),33732=>array(41,-70,976,824),33733=>array(63,-68,937,835),33734=>array(58,-74,968,828),33735=>array(52,-61,954,839),33736=>array(72,-67,951,824),33737=>array(65,-52,935,840),33738=>array(41,-63,932,836),33739=>array(77,-69,963,826),33740=>array(70,-61,938,838),33741=>array(38,-44,957,833),33742=>array(80,-34,955,823),33743=>array(60,-62,954,832),33744=>array(88,-64,924,835),33745=>array(72,-62,940,832),33746=>array(49,-70,961,844),33747=>array(45,-68,962,822),33748=>array(46,-70,969,832),33749=>array(40,-61,974,829),33750=>array(71,-59,943,844),33751=>array(64,-70,936,826),33752=>array(25,-66,967,832),33753=>array(69,-29,947,827),33754=>array(67,-60,964,821),33755=>array(86,-73,938,820),33756=>array(48,-65,971,837),33757=>array(63,-74,973,824),33758=>array(59,-69,949,826),33759=>array(50,-57,960,834),33760=>array(61,-62,960,836),33761=>array(68,-65,961,832),33762=>array(60,-72,960,820),33763=>array(79,-74,961,820),33764=>array(42,-39,979,818),33765=>array(44,-64,957,832),33766=>array(60,-70,944,831),33767=>array(50,-69,955,832),33768=>array(69,-75,942,827),33769=>array(72,-59,934,837),33770=>array(62,-65,939,830),33771=>array(64,-38,960,812),33772=>array(68,-73,937,823),33773=>array(39,-67,961,833),33774=>array(45,-70,969,829),33775=>array(56,-78,941,838),33776=>array(43,-65,961,833),33777=>array(46,-65,954,831),33778=>array(61,-65,934,841),33779=>array(54,-39,980,815),33780=>array(35,-42,968,816),33781=>array(95,-65,945,824),33782=>array(40,-70,967,835),33783=>array(73,-68,923,826),33784=>array(44,-66,973,832),33785=>array(56,-39,954,832),33786=>array(62,-68,947,829),33787=>array(48,-69,966,822),33788=>array(48,-62,970,835),33789=>array(39,-73,966,832),33790=>array(47,-72,968,831),33791=>array(69,-70,944,825),33792=>array(43,-73,953,826),33793=>array(62,-69,958,836),33794=>array(46,-59,933,839),33795=>array(76,-59,949,836),33796=>array(43,-63,939,826),33797=>array(60,-67,957,838),33798=>array(59,-52,949,841),33799=>array(61,-67,971,827),33800=>array(46,-62,950,832),33801=>array(42,-67,960,826),33802=>array(35,-62,973,833),33803=>array(54,-70,947,833),33804=>array(61,-68,935,839),33805=>array(54,-63,949,838),33806=>array(53,-73,934,834),33807=>array(77,-62,947,833),33808=>array(42,-69,976,826),33809=>array(36,-67,952,833),33810=>array(53,-60,963,820),33811=>array(67,-38,961,811),33812=>array(47,-44,935,838),33813=>array(44,-76,956,828),33814=>array(77,-62,937,815),33815=>array(67,-63,927,819),33816=>array(50,-68,965,830),33817=>array(25,-66,964,832),33818=>array(38,-69,952,826),33819=>array(58,-70,947,825),33820=>array(52,-77,933,822),33821=>array(65,-58,917,829),33822=>array(79,-58,958,826),33823=>array(36,-68,952,824),33824=>array(59,-74,939,820),33825=>array(50,-65,939,826),33826=>array(51,-30,978,835),33827=>array(49,-73,973,823),33828=>array(63,-70,916,818),33829=>array(66,-71,916,819),33830=>array(54,-60,908,830),33831=>array(54,-62,930,831),33832=>array(74,-67,931,828),33833=>array(40,-64,985,833),33834=>array(41,-69,955,839),33835=>array(42,-70,956,825),33836=>array(77,-68,946,834),33837=>array(73,-61,936,831),33838=>array(46,-71,968,827),33839=>array(50,-81,943,829),33840=>array(46,-71,968,825),33841=>array(52,-24,948,832),33842=>array(59,-70,947,828),33843=>array(71,-66,943,824),33844=>array(46,-76,942,827),33845=>array(70,-67,942,833),33846=>array(43,-73,974,821),33847=>array(67,-68,941,823),33848=>array(31,-64,979,830),33849=>array(47,-66,941,831),33850=>array(70,-69,945,831),33851=>array(69,-69,944,825),33852=>array(77,-62,932,839),33853=>array(56,-68,970,835),33854=>array(59,-57,951,829),33855=>array(53,-72,956,823),33856=>array(55,-68,955,825),33857=>array(67,-57,950,821),33858=>array(34,-63,954,828),33859=>array(71,-68,944,829),33860=>array(53,-67,945,826),33861=>array(46,-32,954,824),33862=>array(35,-68,965,832),33863=>array(46,-61,973,832),33864=>array(48,-55,962,832),33865=>array(49,-70,965,839),33866=>array(45,-64,972,849),33867=>array(42,-67,948,830),33868=>array(46,-71,939,822),33869=>array(71,-70,947,823),33870=>array(32,-70,949,829),33871=>array(52,-67,959,829),33872=>array(55,-29,973,828),33873=>array(53,-58,958,832),33874=>array(61,-49,956,832),33875=>array(67,-69,957,826),33876=>array(51,-71,969,827),33877=>array(41,-69,953,845),33878=>array(47,-61,984,832),33879=>array(43,-64,941,826),33880=>array(63,-62,923,833),33881=>array(45,-69,943,826),33882=>array(51,-32,945,833),33883=>array(62,-61,942,837),33884=>array(34,-67,974,825),33885=>array(61,-67,943,823),33886=>array(68,-73,952,823),33887=>array(83,-27,955,826),33888=>array(32,-53,951,841),33889=>array(41,-64,948,830),33890=>array(34,-20,966,831),33891=>array(76,-27,947,839),33892=>array(61,-58,958,832),33893=>array(77,-68,951,829),33894=>array(63,-59,945,839),33895=>array(82,-65,953,825),33896=>array(69,-67,973,826),33897=>array(62,-51,953,828),33898=>array(61,-75,955,843),33899=>array(69,-61,940,840),33900=>array(45,-62,939,838),33901=>array(60,-67,967,833),33902=>array(43,-72,966,826),33903=>array(57,-66,942,823),33904=>array(41,-71,979,824),33905=>array(49,-37,962,834),33906=>array(42,-70,933,833),33907=>array(39,-64,966,833),33908=>array(55,-66,955,828),33909=>array(66,-60,951,835),33910=>array(74,-54,942,829),33911=>array(74,-64,946,842),33912=>array(46,-29,968,829),33913=>array(42,-56,963,842),33914=>array(51,-64,942,830),33915=>array(24,-66,962,830),33916=>array(69,-65,969,838),33917=>array(69,-70,944,827),33918=>array(59,-36,967,827),33919=>array(69,-70,944,838),33920=>array(59,-21,955,831),33921=>array(36,-39,959,831),33922=>array(72,-67,925,842),33923=>array(72,-60,961,838),33924=>array(51,-67,957,838),33925=>array(51,-68,956,838),33926=>array(68,-81,941,826),33927=>array(20,-69,952,833),33928=>array(60,-67,914,824),33929=>array(60,-69,914,828),33930=>array(60,-58,950,828),33931=>array(41,-59,943,833),33932=>array(25,-60,939,833),33933=>array(39,-69,948,826),33934=>array(49,-71,969,832),33935=>array(61,-71,939,827),33936=>array(47,-52,963,839),33937=>array(54,-81,968,822),33938=>array(69,-64,959,832),33939=>array(51,-62,956,832),33940=>array(70,-61,946,833),33941=>array(52,-37,948,840),33942=>array(70,-89,942,830),33943=>array(48,-64,974,830),33944=>array(62,-69,955,825),33945=>array(53,-75,959,839),33946=>array(83,-66,938,826),33947=>array(42,-74,953,826),33948=>array(37,-59,946,835),33949=>array(42,-68,939,826),33950=>array(53,-65,953,831),33951=>array(53,-66,956,830),33952=>array(52,-29,953,825),33953=>array(66,-64,945,834),33954=>array(76,-68,974,825),33955=>array(46,-69,950,826),33956=>array(56,-72,950,826),33957=>array(77,-76,928,835),33958=>array(38,-69,974,835),33959=>array(51,-73,966,824),33960=>array(23,-53,956,841),33961=>array(52,-68,962,825),33962=>array(60,-70,942,835),33963=>array(37,-47,956,854),33964=>array(43,-60,956,829),33965=>array(65,-71,931,845),33966=>array(29,-70,937,822),33967=>array(56,-70,923,835),33968=>array(50,-79,964,827),33969=>array(48,-55,947,840),33970=>array(46,-61,946,839),33971=>array(65,-75,927,839),33972=>array(41,-69,942,833),33973=>array(54,-59,960,833),33974=>array(45,-72,946,823),33975=>array(66,-64,944,833),33976=>array(47,-73,953,824),33977=>array(31,-64,972,835),33978=>array(50,-69,961,833),33979=>array(40,-60,960,833),33980=>array(43,-62,972,836),33981=>array(36,-39,950,823),33982=>array(49,-52,946,839),33983=>array(68,-68,941,833),33984=>array(44,-64,955,835),33985=>array(36,-69,964,829),33986=>array(53,-65,947,830),33987=>array(51,-67,957,833),33988=>array(51,-66,940,838),33989=>array(48,-72,960,823),33990=>array(43,-71,954,824),33991=>array(54,-64,949,831),33992=>array(70,-65,924,833),33993=>array(46,-66,954,839),33994=>array(35,-62,957,832),33995=>array(59,-21,955,834),33996=>array(48,-74,973,825),33997=>array(53,-67,943,831),33998=>array(46,-75,938,826),33999=>array(59,-74,968,826),34000=>array(52,-67,939,830),34001=>array(44,-71,956,835),34002=>array(63,-72,956,825),34003=>array(48,-62,957,840),34004=>array(62,-71,955,826),34005=>array(48,-57,959,830),34006=>array(67,-58,941,837),34007=>array(51,-68,978,829),34008=>array(46,-78,959,824),34009=>array(57,-66,937,833),34010=>array(33,-76,982,830),34011=>array(38,-73,973,827),34012=>array(60,-67,950,830),34013=>array(54,-23,924,821),34014=>array(62,-67,914,821),34015=>array(26,-62,908,832),34016=>array(62,-63,914,827),34017=>array(44,-67,966,832),34018=>array(62,-75,938,830),34019=>array(61,-63,924,829),34020=>array(38,-76,974,825),34021=>array(29,-6,954,827),34022=>array(38,-56,947,826),34023=>array(36,-52,961,839),34024=>array(42,-67,963,828),34025=>array(35,-71,950,825),34026=>array(50,-73,972,824),34027=>array(43,-72,970,822),34028=>array(35,-62,952,833),34029=>array(38,-59,965,827),34030=>array(37,-56,951,839),34031=>array(33,-69,962,832),34032=>array(51,-68,978,829),34033=>array(56,-73,957,820),34034=>array(65,-32,953,823),34035=>array(66,-32,943,824),34036=>array(64,-63,957,825),34037=>array(40,-75,963,827),34038=>array(69,-70,956,823),34039=>array(67,-68,961,823),34040=>array(61,-74,939,851),34041=>array(45,-67,947,829),34042=>array(40,-55,961,833),34043=>array(54,-47,967,844),34044=>array(26,-76,972,829),34045=>array(56,-65,948,832),34046=>array(73,-70,944,823),34047=>array(33,-67,948,834),34048=>array(61,-65,944,827),34049=>array(67,-68,946,831),34050=>array(68,-69,944,827),34051=>array(74,-58,947,839),34052=>array(71,-65,944,822),34053=>array(63,-57,936,838),34054=>array(49,-76,974,825),34055=>array(69,-70,951,826),34056=>array(62,-65,941,824),34057=>array(44,-68,965,827),34058=>array(51,-66,960,832),34059=>array(47,-70,964,828),34060=>array(45,-67,985,832),34061=>array(49,-69,958,823),34062=>array(66,-73,972,825),34063=>array(66,-70,938,822),34064=>array(39,-73,928,838),34065=>array(48,-70,956,835),34066=>array(47,-73,964,824),34067=>array(59,-61,966,835),34068=>array(57,-68,943,825),34069=>array(74,-71,943,817),34070=>array(28,-68,952,824),34071=>array(52,-67,951,838),34072=>array(31,-70,981,825),34073=>array(39,-72,975,823),34074=>array(51,-68,948,836),34075=>array(40,-66,959,828),34076=>array(41,-73,963,827),34077=>array(75,-68,975,825),34078=>array(56,-73,959,832),34079=>array(36,-75,966,820),34080=>array(53,-70,963,826),34081=>array(63,-64,963,839),34082=>array(64,-68,944,838),34083=>array(49,-59,948,835),34084=>array(57,-70,944,826),34085=>array(56,-30,955,835),34086=>array(53,-67,940,835),34087=>array(55,-23,950,820),34088=>array(79,-71,951,823),34089=>array(66,-73,941,824),34090=>array(58,-69,952,829),34091=>array(42,-64,951,832),34092=>array(54,-71,966,835),34093=>array(76,-78,967,834),34094=>array(78,-69,948,822),34095=>array(57,-53,964,841),34096=>array(36,-69,960,824),34097=>array(73,-83,967,824),34098=>array(32,-67,960,824),34099=>array(45,-59,944,841),34100=>array(44,-73,937,840),34101=>array(31,-67,962,832),34102=>array(65,-65,964,829),34103=>array(73,-73,925,817),34104=>array(24,-81,949,822),34105=>array(41,-73,949,822),34106=>array(63,-66,911,827),34107=>array(42,-72,956,832),34108=>array(65,-60,928,834),34109=>array(69,-70,961,834),34110=>array(39,-59,973,835),34111=>array(33,-59,937,832),34112=>array(32,-72,979,829),34113=>array(56,-62,948,833),34114=>array(41,-76,957,833),34115=>array(36,-69,957,831),34116=>array(71,-65,944,823),34117=>array(42,-69,944,826),34118=>array(31,-67,962,833),34119=>array(69,-68,946,823),34120=>array(54,-69,948,830),34121=>array(42,-61,938,837),34122=>array(38,-54,962,817),34123=>array(24,-64,944,830),34124=>array(76,-77,944,818),34125=>array(41,-72,975,823),34126=>array(50,-65,963,832),34127=>array(76,-73,955,826),34128=>array(60,-78,943,829),34129=>array(63,-57,936,839),34130=>array(48,-69,945,838),34131=>array(53,-77,947,835),34132=>array(58,-68,956,829),34133=>array(55,-60,955,836),34134=>array(42,-68,983,829),34135=>array(39,-71,980,835),34136=>array(33,-59,962,835),34137=>array(38,-33,964,833),34138=>array(58,-70,945,842),34139=>array(37,-67,938,827),34140=>array(62,-65,958,833),34141=>array(56,-48,962,842),34142=>array(51,-62,985,830),34143=>array(58,-53,973,831),34144=>array(45,-68,959,831),34145=>array(61,-76,939,840),34146=>array(65,-70,955,832),34147=>array(68,-74,941,831),34148=>array(64,-56,949,832),34149=>array(32,-69,952,826),34150=>array(43,-76,972,823),34151=>array(43,-75,977,833),34152=>array(38,-67,968,832),34153=>array(67,-67,956,836),34154=>array(59,-67,956,833),34155=>array(64,-46,936,842),34156=>array(52,-69,971,823),34157=>array(51,-74,947,840),34158=>array(47,-62,938,826),34159=>array(54,-56,941,829),34160=>array(67,-76,957,834),34161=>array(35,-65,938,826),34162=>array(62,-69,913,821),34163=>array(68,-73,938,832),34164=>array(41,-29,923,825),34165=>array(44,-85,981,831),34166=>array(42,-81,983,827),34167=>array(67,-68,975,829),34168=>array(48,-74,968,821),34169=>array(44,-62,951,835),34170=>array(62,-65,968,831),34171=>array(67,-68,972,831),34172=>array(60,-70,952,826),34173=>array(48,-58,952,848),34174=>array(73,-61,941,836),34175=>array(42,-85,957,833),34176=>array(54,-48,956,846),34177=>array(45,-74,958,830),34178=>array(41,-78,960,823),34179=>array(65,-72,926,822),34180=>array(53,-68,949,832),34181=>array(41,-65,957,823),34182=>array(48,-69,973,828),34183=>array(36,-77,958,834),34184=>array(27,-65,977,833),34185=>array(41,-71,960,824),34186=>array(46,-64,941,832),34187=>array(78,-81,933,826),34188=>array(47,-65,944,833),34189=>array(79,-66,964,828),34190=>array(62,-71,964,824),34191=>array(33,-50,967,834),34192=>array(27,-54,976,838),34193=>array(58,-41,948,806),34194=>array(42,-63,983,834),34195=>array(37,-60,953,826),34196=>array(60,-61,956,834),34197=>array(40,-67,971,824),34198=>array(48,-74,970,823),34199=>array(64,-63,936,830),34200=>array(47,-66,975,831),34201=>array(44,-68,949,836),34202=>array(51,-68,953,826),34203=>array(69,-61,941,838),34204=>array(42,-65,944,827),34205=>array(54,-70,939,823),34206=>array(40,-70,966,829),34207=>array(34,-50,966,841),34208=>array(51,-76,959,827),34209=>array(49,-74,934,820),34210=>array(40,-75,964,829),34211=>array(64,-75,966,823),34212=>array(50,-67,945,831),34213=>array(62,-58,935,831),34214=>array(37,-67,945,834),34215=>array(61,-65,953,827),34216=>array(50,-63,955,829),34217=>array(72,-65,939,832),34218=>array(51,-70,955,849),34219=>array(47,-70,957,830),34220=>array(49,-70,961,841),34221=>array(51,-78,969,828),34222=>array(52,-68,961,820),34223=>array(46,-61,945,835),34224=>array(47,-70,957,830),34225=>array(56,-69,957,828),34226=>array(44,-75,974,836),34227=>array(53,-67,967,828),34228=>array(63,-61,959,832),34229=>array(64,-70,941,826),34230=>array(51,-64,962,826),34231=>array(62,-67,952,833),34232=>array(58,-62,961,831),34233=>array(53,-57,941,831),34234=>array(49,-69,956,833),34235=>array(48,-89,961,832),34236=>array(58,-65,951,840),34237=>array(51,-74,956,823),34238=>array(43,-66,974,823),34239=>array(52,-68,971,827),34240=>array(56,-69,977,827),34241=>array(32,-67,968,842),34242=>array(38,-68,958,825),34243=>array(60,-74,955,828),34244=>array(36,-68,968,828),34245=>array(74,-62,946,833),34246=>array(43,-65,969,829),34247=>array(63,-54,941,839),34248=>array(59,-65,954,832),34249=>array(29,-67,952,832),34250=>array(32,-57,944,831),34251=>array(53,-64,956,829),34252=>array(74,-56,945,832),34253=>array(56,-34,949,839),34254=>array(55,-38,951,842),34255=>array(34,-71,942,824),34256=>array(57,-70,960,834),34257=>array(60,-68,961,833),34258=>array(51,-70,947,828),34259=>array(39,-64,922,826),34260=>array(41,-64,970,834),34261=>array(40,-67,937,833),34262=>array(67,-58,944,833),34263=>array(52,-71,986,824),34264=>array(55,-69,958,818),34265=>array(65,-72,971,826),34266=>array(83,-80,938,828),34267=>array(67,-56,937,821),34268=>array(47,-65,953,831),34269=>array(62,-72,954,836),34270=>array(41,-63,951,830),34271=>array(73,-68,936,825),34272=>array(47,-77,973,824),34273=>array(45,-73,982,827),34274=>array(53,-68,975,827),34275=>array(69,-65,939,827),34276=>array(39,-67,959,836),34277=>array(55,-62,930,826),34278=>array(45,-65,935,829),34279=>array(50,-58,964,824),34280=>array(44,-75,945,829),34281=>array(40,-62,960,836),34282=>array(45,-71,967,830),34283=>array(51,-73,950,836),34284=>array(74,-80,943,832),34285=>array(51,-64,948,835),34286=>array(38,-69,969,845),34287=>array(52,-46,974,822),34288=>array(62,-65,924,829),34289=>array(39,-64,959,826),34290=>array(42,-65,956,826),34291=>array(32,-67,968,828),34292=>array(53,-63,956,818),34293=>array(56,-65,942,845),34294=>array(33,-65,954,832),34295=>array(62,-69,955,826),34296=>array(55,-70,962,827),34297=>array(72,-61,929,839),34298=>array(57,-65,949,832),34299=>array(49,-65,971,839),34300=>array(44,-58,955,836),34301=>array(49,-62,966,833),34302=>array(44,-76,974,830),34303=>array(43,-68,929,837),34304=>array(54,-61,958,838),34305=>array(65,-32,945,823),34306=>array(43,-62,975,837),34307=>array(53,-62,946,838),34308=>array(48,-67,940,832),34309=>array(41,-67,953,832),34310=>array(59,-66,961,836),34311=>array(56,-67,948,827),34312=>array(61,-68,960,833),34313=>array(46,-64,957,855),34314=>array(53,-71,956,818),34315=>array(47,-68,960,837),34316=>array(51,-59,960,833),34317=>array(74,-58,947,832),34318=>array(76,-75,981,842),34319=>array(42,-67,958,832),34320=>array(62,-73,964,840),34321=>array(55,-66,960,838),34322=>array(43,-68,964,832),34323=>array(67,-76,966,830),34324=>array(42,-61,972,832),34325=>array(50,-81,955,832),34326=>array(50,-62,965,838),34327=>array(41,-62,965,837),34328=>array(56,-63,978,829),34329=>array(63,-70,947,831),34330=>array(43,-67,950,830),34331=>array(57,-62,945,830),34332=>array(69,-68,946,825),34333=>array(37,-57,968,832),34334=>array(45,-69,987,835),34335=>array(63,-56,956,823),34336=>array(59,-72,947,824),34337=>array(73,-72,950,827),34338=>array(56,-65,961,833),34339=>array(55,-75,960,830),34340=>array(59,-70,935,828),34341=>array(48,-62,969,828),34342=>array(70,-62,942,829),34343=>array(42,-72,982,831),34344=>array(53,-59,968,829),34345=>array(59,-64,964,833),34346=>array(48,-58,983,831),34347=>array(42,-50,963,830),34348=>array(55,-69,949,822),34349=>array(72,-70,928,839),34350=>array(49,-70,946,830),34351=>array(53,-25,951,830),34352=>array(44,-61,974,830),34353=>array(34,-72,965,829),34354=>array(65,-31,945,821),34355=>array(42,-71,954,828),34356=>array(63,-48,934,844),34357=>array(49,-66,958,827),34358=>array(44,-71,969,828),34359=>array(36,-62,971,832),34360=>array(64,-63,951,836),34361=>array(39,-69,965,829),34362=>array(60,-67,951,827),34363=>array(60,-70,963,825),34364=>array(41,-67,959,829),34365=>array(40,-58,969,838),34366=>array(39,-72,984,826),34367=>array(61,-80,954,835),34368=>array(43,-33,968,823),34369=>array(32,-64,968,849),34370=>array(60,-70,965,832),34371=>array(44,-66,967,828),34372=>array(59,-71,963,837),34373=>array(32,-53,978,837),34374=>array(68,-54,936,849),34375=>array(65,-70,951,834),34376=>array(68,-74,940,832),34377=>array(68,-56,949,831),34378=>array(48,-71,961,828),34379=>array(55,-67,947,842),34380=>array(62,-43,947,830),34381=>array(47,-66,924,829),34382=>array(35,-68,953,835),34383=>array(40,-59,893,834),34384=>array(39,-63,878,840),34385=>array(39,-60,937,832),34386=>array(40,-67,963,847),34387=>array(40,-53,954,843),34388=>array(49,-66,949,835),34389=>array(39,-68,959,836),34390=>array(29,-55,931,837),34391=>array(36,-62,919,837),34392=>array(29,-58,948,837),34393=>array(44,-67,961,827),34394=>array(30,-57,914,830),34395=>array(38,-66,936,829),34396=>array(45,-77,929,841),34397=>array(23,-82,956,830),34398=>array(35,-68,950,838),34399=>array(53,-71,951,829),34400=>array(40,-58,959,840),34401=>array(46,-84,950,823),34402=>array(43,-70,960,831),34403=>array(38,-67,972,828),34404=>array(31,-68,967,827),34405=>array(42,-75,989,831),34406=>array(39,-91,965,830),34407=>array(40,-76,954,834),34408=>array(44,-77,946,823),34409=>array(36,-75,953,829),34410=>array(40,-73,973,832),34411=>array(47,-59,954,850),34412=>array(46,-41,928,809),34413=>array(53,-72,899,811),34414=>array(43,-65,961,816),34415=>array(48,-45,957,849),34416=>array(49,-67,955,815),34417=>array(65,-59,970,792),34418=>array(43,-63,962,815),34419=>array(51,-70,916,829),34420=>array(44,-35,964,827),34421=>array(47,-23,957,841),34422=>array(47,-54,962,814),34423=>array(54,-68,954,819),34424=>array(47,-62,967,814),34425=>array(28,-5,930,813),34426=>array(21,-56,962,811),34427=>array(50,-21,942,814),34428=>array(54,-30,957,831),34429=>array(76,-59,888,792),34430=>array(46,-64,944,823),34431=>array(32,-69,914,772),34432=>array(48,-51,935,832),34433=>array(39,-78,942,814),34434=>array(47,-61,909,830),34435=>array(58,-63,942,839),34436=>array(47,-58,960,836),34437=>array(43,-74,950,810),34438=>array(48,-41,961,791),34439=>array(53,-76,973,808),34440=>array(47,-67,958,814),34441=>array(21,-71,976,838),34442=>array(38,-62,956,822),34443=>array(69,-65,914,808),34444=>array(45,-61,939,842),34445=>array(36,-51,951,817),34446=>array(53,-72,914,802),34447=>array(36,-69,869,805),34448=>array(69,-56,930,840),34449=>array(45,-54,967,844),34450=>array(45,-70,967,829),34451=>array(44,-61,899,833),34452=>array(57,-69,967,823),34453=>array(51,-69,963,793),34454=>array(53,-73,960,805),34455=>array(53,-71,971,823),34456=>array(41,-72,961,827),34457=>array(51,-66,963,838),34458=>array(51,-68,953,828),34459=>array(53,-66,891,815),34460=>array(47,-61,958,824),34461=>array(44,-33,953,833),34462=>array(55,-70,966,822),34463=>array(29,-27,948,809),34464=>array(48,-90,964,825),34465=>array(52,-73,978,808),34466=>array(49,-73,958,823),34467=>array(43,-59,961,807),34468=>array(29,-78,971,784),34469=>array(51,-70,963,833),34470=>array(45,-54,954,829),34471=>array(39,-65,957,854),34472=>array(53,-66,964,830),34473=>array(50,-66,952,833),34474=>array(43,-65,958,830),34475=>array(44,-45,967,834),34476=>array(37,-65,930,809),34477=>array(37,-65,945,809),34478=>array(37,-65,956,835),34479=>array(51,-7,955,825),34480=>array(71,-64,916,830),34481=>array(54,-65,948,844),34482=>array(40,-65,943,811),34483=>array(35,-51,958,849),34484=>array(65,-69,911,839),34485=>array(47,-50,954,828),34486=>array(50,-64,953,831),34487=>array(40,-23,954,814),34488=>array(49,-73,939,818),34489=>array(58,-69,955,839),34490=>array(47,-65,951,829),34491=>array(56,-74,960,824),34492=>array(67,-66,926,844),34493=>array(65,-29,962,809),34494=>array(66,-65,951,831),34495=>array(53,-51,953,823),34496=>array(51,-6,964,851),34497=>array(55,-70,903,812),34498=>array(54,-72,967,830),34499=>array(55,-67,940,810),34500=>array(51,-64,943,830),34501=>array(54,-67,938,829),34502=>array(46,-13,954,837),34503=>array(41,-38,959,828),34504=>array(55,-76,968,826),34505=>array(34,-65,966,854),34506=>array(57,-21,910,831),34507=>array(66,-73,957,788),34508=>array(64,-70,973,819),34509=>array(83,-70,896,824),34510=>array(34,-63,906,809),34511=>array(35,-16,936,814),34512=>array(54,-56,923,843),34513=>array(56,-62,963,851),34514=>array(54,-61,982,849),34515=>array(59,-54,960,840),34516=>array(51,-64,904,837),34517=>array(51,-67,961,837),34518=>array(54,-55,964,825),34519=>array(73,-70,948,859),34520=>array(46,-64,948,835),34521=>array(55,-18,954,844),34522=>array(56,-76,918,821),34523=>array(26,-72,957,829),34524=>array(52,-67,951,840),34525=>array(47,-66,965,811),34526=>array(44,-64,947,826),34527=>array(40,-65,963,821),34528=>array(52,-67,952,841),34529=>array(63,-53,930,814),34530=>array(56,-74,953,827),34531=>array(53,-62,952,827),34532=>array(38,-65,963,841),34533=>array(54,-70,935,839),34534=>array(51,-75,961,820),34535=>array(37,-66,931,820),34536=>array(51,-70,945,807),34537=>array(57,-64,946,779),34538=>array(69,-75,944,829),34539=>array(60,-72,980,841),34540=>array(39,-67,981,827),34541=>array(45,-21,947,824),34542=>array(50,-75,949,836),34543=>array(27,-32,959,833),34544=>array(46,-67,937,825),34545=>array(36,-68,931,821),34546=>array(33,-67,934,823),34547=>array(30,-66,918,821),34548=>array(36,-68,938,840),34549=>array(57,-30,953,815),34550=>array(48,-66,948,827),34551=>array(60,-70,969,822),34552=>array(57,-68,939,832),34553=>array(54,-54,900,826),34554=>array(40,-68,963,838),34555=>array(44,-76,961,820),34556=>array(40,-67,948,835),34557=>array(58,-67,961,825),34558=>array(61,-55,970,835),34559=>array(43,-67,961,834),34560=>array(68,-65,913,776),34561=>array(53,-71,967,830),34562=>array(37,-59,965,847),34563=>array(85,-76,941,788),34564=>array(52,-75,970,815),34565=>array(69,-64,954,835),34566=>array(56,-67,958,809),34567=>array(60,-65,959,835),34568=>array(39,-66,961,809),34569=>array(42,-62,950,835),34570=>array(61,-62,918,832),34571=>array(52,-71,965,855),34572=>array(61,-32,962,826),34573=>array(43,-62,963,850),34574=>array(58,-71,915,815),34575=>array(49,-74,969,818),34576=>array(29,-68,926,833),34577=>array(42,-72,967,829),34578=>array(40,-66,967,813),34579=>array(32,-68,963,811),34580=>array(63,-58,912,828),34581=>array(36,-73,954,830),34582=>array(47,-71,904,815),34583=>array(51,-66,902,815),34584=>array(59,-57,909,847),34585=>array(41,-69,970,829),34586=>array(46,-67,939,824),34587=>array(61,-75,954,813),34588=>array(74,-70,931,833),34589=>array(26,-70,971,843),34590=>array(47,-67,962,832),34591=>array(42,-75,933,845),34592=>array(74,-71,918,813),34593=>array(41,-52,951,842),34594=>array(40,-25,953,813),34595=>array(36,-61,954,845),34596=>array(56,-80,948,823),34597=>array(55,-65,952,829),34598=>array(61,-65,968,828),34599=>array(71,-77,983,823),34600=>array(32,-60,956,839),34601=>array(48,-70,890,815),34602=>array(57,-62,917,831),34603=>array(59,-49,955,809),34604=>array(59,-73,903,814),34605=>array(64,-68,908,825),34606=>array(47,-66,957,837),34607=>array(53,-65,978,838),34608=>array(45,-76,973,790),34609=>array(49,-64,957,855),34610=>array(58,-85,954,818),34611=>array(58,-71,955,834),34612=>array(65,-64,911,815),34613=>array(56,-72,902,813),34614=>array(50,-68,974,842),34615=>array(40,-33,967,831),34616=>array(79,-89,951,778),34617=>array(31,-67,946,826),34618=>array(52,-52,959,851),34619=>array(47,-65,953,839),34620=>array(64,-68,950,832),34621=>array(39,-65,947,814),34622=>array(46,-62,965,811),34623=>array(45,-66,966,830),34624=>array(40,-51,974,842),34625=>array(90,-89,944,774),34626=>array(34,-69,976,817),34627=>array(54,-77,957,814),34628=>array(50,-67,915,825),34629=>array(57,-89,971,787),34630=>array(40,-69,952,819),34631=>array(29,-30,932,806),34632=>array(37,-68,877,810),34633=>array(41,-61,945,848),34634=>array(41,-66,968,846),34635=>array(41,-64,983,813),34636=>array(48,-65,951,832),34637=>array(51,-69,915,817),34638=>array(60,-58,919,836),34639=>array(56,-68,949,832),34640=>array(46,-70,903,814),34641=>array(42,-74,964,811),34642=>array(47,-71,948,815),34643=>array(40,-63,968,829),34644=>array(50,-72,957,824),34645=>array(38,-65,961,835),34646=>array(56,-29,956,829),34647=>array(39,-37,936,834),34648=>array(33,-30,944,818),34649=>array(46,-69,932,807),34650=>array(47,-73,970,814),34651=>array(48,-69,965,828),34652=>array(59,-75,965,836),34653=>array(34,-54,959,853),34654=>array(55,-70,908,814),34655=>array(51,-65,912,815),34656=>array(48,-65,948,812),34657=>array(53,-71,968,815),34658=>array(53,-78,956,815),34659=>array(50,-67,956,837),34660=>array(61,-66,965,852),34661=>array(49,-45,964,848),34662=>array(51,-68,980,834),34663=>array(47,-74,972,823),34664=>array(31,-64,952,809),34665=>array(50,-32,955,824),34666=>array(49,-66,951,815),34667=>array(43,-69,939,825),34668=>array(55,-77,976,825),34669=>array(61,-74,986,812),34670=>array(33,-64,967,845),34671=>array(44,-76,955,825),34672=>array(29,-45,960,831),34673=>array(45,-64,975,837),34674=>array(56,-67,942,831),34675=>array(51,-74,952,829),34676=>array(40,-71,899,833),34677=>array(50,-82,961,831),34678=>array(31,-62,972,842),34679=>array(45,-73,947,833),34680=>array(50,-57,918,826),34681=>array(54,-30,968,813),34682=>array(37,-70,920,834),34683=>array(37,-62,947,837),34684=>array(37,-63,932,813),34685=>array(50,-70,951,821),34686=>array(31,-65,949,823),34687=>array(47,-42,971,806),34688=>array(78,-74,956,837),34689=>array(42,-72,973,815),34690=>array(60,-59,957,831),34691=>array(46,-64,940,849),34692=>array(43,-62,948,843),34693=>array(40,-33,959,853),34694=>array(63,-63,966,837),34695=>array(49,-53,974,853),34696=>array(47,-71,953,810),34697=>array(53,-69,971,830),34698=>array(44,-64,977,843),34699=>array(39,-69,965,836),34700=>array(41,-80,956,858),34701=>array(64,-62,967,826),34702=>array(45,-73,955,827),34703=>array(47,-71,977,834),34704=>array(53,-72,952,830),34705=>array(40,-75,979,845),34706=>array(58,-75,976,834),34707=>array(49,-67,987,836),34708=>array(47,-73,976,836),34709=>array(50,-46,973,852),34710=>array(47,-67,941,813),34711=>array(39,-65,949,848),34712=>array(39,-18,943,838),34713=>array(31,-67,977,832),34714=>array(75,-73,954,852),34715=>array(33,-73,947,845),34716=>array(73,-71,966,826),34717=>array(45,-66,977,842),34718=>array(55,-60,936,836),34719=>array(36,-66,951,833),34720=>array(36,-26,957,840),34721=>array(36,-77,957,840),34722=>array(68,-66,934,839),34723=>array(29,-68,972,835),34724=>array(56,-71,987,842),34725=>array(17,-60,970,855),34726=>array(49,-65,969,831),34727=>array(49,-71,936,832),34728=>array(29,-65,921,825),34729=>array(26,-60,966,841),34730=>array(57,-70,939,837),34731=>array(54,-60,942,850),34732=>array(46,-62,957,836),34733=>array(46,-62,951,854),34734=>array(34,-57,945,836),34735=>array(39,-72,943,836),34736=>array(44,-59,961,835),34737=>array(63,-66,934,832),34738=>array(59,-21,951,826),34739=>array(54,-17,958,842),34740=>array(82,-79,967,823),34741=>array(49,-64,955,812),34742=>array(36,-77,965,816),34743=>array(49,-82,957,847),34744=>array(46,-76,950,829),34745=>array(56,-72,956,826),34746=>array(33,-73,961,835),34747=>array(49,-67,954,836),34748=>array(61,-32,955,822),34749=>array(45,-68,977,843),34750=>array(37,-78,959,840),34751=>array(50,-83,958,836),34752=>array(36,-65,949,819),34753=>array(57,-70,957,827),34754=>array(56,-67,965,841),34755=>array(51,-73,975,818),34756=>array(55,-65,965,834),34757=>array(56,-70,966,831),34758=>array(38,-65,966,834),34759=>array(57,-87,954,835),34760=>array(51,-64,912,809),34761=>array(40,-59,969,834),34762=>array(57,-67,957,787),34763=>array(30,-34,949,828),34764=>array(52,-31,968,832),34765=>array(34,-81,958,811),34766=>array(34,-67,947,829),34767=>array(42,-80,984,825),34768=>array(54,-64,934,839),34769=>array(59,-61,967,852),34770=>array(46,-65,956,833),34771=>array(33,-64,970,841),34772=>array(44,-71,960,815),34773=>array(54,-70,940,831),34774=>array(49,-67,954,836),34775=>array(57,-80,938,834),34776=>array(49,-68,962,844),34777=>array(43,-71,958,838),34778=>array(57,-80,961,820),34779=>array(41,-64,961,832),34780=>array(50,-68,962,838),34781=>array(48,-66,959,846),34782=>array(89,-83,954,825),34783=>array(43,-68,952,835),34784=>array(33,-66,951,835),34785=>array(56,-71,920,837),34786=>array(51,-68,957,832),34787=>array(36,-66,960,833),34788=>array(34,-73,943,806),34789=>array(53,-68,965,847),34790=>array(51,-74,965,827),34791=>array(52,-68,949,833),34792=>array(53,-71,954,790),34793=>array(51,-70,982,821),34794=>array(44,-50,977,815),34795=>array(52,-66,953,813),34796=>array(56,-58,955,823),34797=>array(43,-68,945,834),34798=>array(30,-71,936,833),34799=>array(43,-66,957,832),34800=>array(31,-72,961,835),34801=>array(51,-69,961,836),34802=>array(60,-64,975,840),34803=>array(43,-75,945,818),34804=>array(49,-74,959,830),34805=>array(30,-71,948,807),34806=>array(41,-30,935,814),34807=>array(49,-64,915,829),34808=>array(36,-64,975,819),34809=>array(45,-71,948,851),34810=>array(52,-27,953,831),34811=>array(42,-73,947,850),34812=>array(49,-74,951,830),34813=>array(46,-57,950,833),34814=>array(43,-68,958,855),34815=>array(40,-56,955,843),34816=>array(51,-70,953,839),34817=>array(55,-76,941,841),34818=>array(43,-65,975,828),34819=>array(41,-68,957,849),34820=>array(37,-53,974,861),34821=>array(46,-48,957,819),34822=>array(66,-72,962,833),34823=>array(62,-66,958,832),34824=>array(52,-71,961,828),34825=>array(43,-71,969,820),34826=>array(34,-67,946,851),34827=>array(52,-66,924,817),34828=>array(42,-62,940,820),34829=>array(40,-75,977,824),34830=>array(46,-65,956,833),34831=>array(43,-61,948,847),34832=>array(41,-64,968,849),34833=>array(37,-65,965,839),34834=>array(48,-75,957,802),34835=>array(47,-60,961,835),34836=>array(50,-59,966,846),34837=>array(56,-59,943,829),34838=>array(34,-65,976,832),34839=>array(40,-66,951,806),34840=>array(34,-59,974,842),34841=>array(39,-69,965,842),34842=>array(53,-71,942,840),34843=>array(44,-64,961,839),34844=>array(38,-87,979,834),34845=>array(52,-70,929,784),34846=>array(56,-86,949,838),34847=>array(32,-60,961,848),34848=>array(53,-71,944,786),34849=>array(52,-64,957,844),34850=>array(55,-62,972,858),34851=>array(50,-65,948,818),34852=>array(67,-69,969,853),34853=>array(63,-75,944,846),34854=>array(45,-71,956,827),34855=>array(54,-67,967,844),34856=>array(42,-55,965,842),34857=>array(64,-71,964,823),34858=>array(71,-75,962,845),34859=>array(65,-77,969,831),34860=>array(40,-68,950,839),34861=>array(54,-79,967,854),34862=>array(35,-73,975,802),34863=>array(40,-70,954,844),34864=>array(30,-66,975,846),34865=>array(46,-33,957,833),34866=>array(57,-63,929,842),34867=>array(34,-78,953,806),34868=>array(55,-68,942,826),34869=>array(47,-65,949,828),34870=>array(50,-76,965,793),34871=>array(46,-64,946,807),34872=>array(36,-67,941,826),34873=>array(54,-67,967,844),34874=>array(50,-88,965,809),34875=>array(62,-77,944,830),34876=>array(48,-68,986,819),34877=>array(41,-73,966,829),34878=>array(47,-71,924,815),34879=>array(89,-73,946,847),34880=>array(55,-11,954,806),34881=>array(59,-14,955,846),34882=>array(34,-60,971,811),34883=>array(43,-70,968,833),34884=>array(20,-15,947,834),34885=>array(25,-45,949,853),34886=>array(49,-64,958,836),34887=>array(37,-68,971,836),34888=>array(40,-69,955,832),34889=>array(34,-61,982,849),34890=>array(31,-68,957,830),34891=>array(63,-57,941,842),34892=>array(51,-62,941,845),34893=>array(41,-68,954,827),34894=>array(53,-67,960,829),34895=>array(50,-68,948,829),34896=>array(53,-66,960,829),34897=>array(53,-66,960,829),34898=>array(47,-65,954,835),34899=>array(39,-73,951,824),34900=>array(29,-68,923,828),34901=>array(46,-65,952,833),34902=>array(49,-69,960,833),34903=>array(41,-72,951,831),34904=>array(24,-66,960,853),34905=>array(40,-65,959,831),34906=>array(46,-70,953,825),34907=>array(37,-65,955,839),34908=>array(34,-66,960,816),34909=>array(38,-68,953,835),34910=>array(35,-70,943,831),34911=>array(39,-66,954,841),34912=>array(24,-72,936,839),34913=>array(33,-69,945,835),34914=>array(37,-65,956,837),34915=>array(38,-68,944,826),34916=>array(266,-66,677,819),34917=>array(40,-69,954,843),34918=>array(41,-50,963,842),34919=>array(41,-67,958,844),34920=>array(52,-75,953,835),34921=>array(34,-67,971,843),34922=>array(35,-64,954,843),34923=>array(42,-68,957,830),34924=>array(32,-60,917,839),34925=>array(35,-61,973,841),34926=>array(54,-73,963,845),34927=>array(45,-74,973,845),34928=>array(37,-70,960,832),34929=>array(50,-76,963,844),34930=>array(23,-69,879,803),34931=>array(33,-65,955,831),34932=>array(54,-75,964,842),34933=>array(46,-53,909,805),34934=>array(62,-67,932,844),34935=>array(42,-73,960,829),34936=>array(50,-63,946,837),34937=>array(50,-67,956,838),34938=>array(47,-68,960,850),34939=>array(61,-67,966,838),34940=>array(50,-70,976,850),34941=>array(39,-67,946,810),34942=>array(37,-62,955,858),34943=>array(36,-65,970,848),34944=>array(60,-71,930,838),34945=>array(67,-62,967,833),34946=>array(32,-66,964,832),34947=>array(30,-73,984,823),34948=>array(16,-76,940,837),34949=>array(49,-59,950,829),34950=>array(48,-67,906,842),34951=>array(48,-78,956,842),34952=>array(48,-67,959,831),34953=>array(48,-67,957,842),34954=>array(48,-77,949,842),34955=>array(44,-69,962,837),34956=>array(44,-69,956,851),34957=>array(42,-67,960,839),34958=>array(37,-75,914,845),34959=>array(44,-60,964,845),34960=>array(29,-62,970,845),34961=>array(50,-72,894,840),34962=>array(47,-65,951,828),34963=>array(45,-68,956,844),34964=>array(48,-67,953,842),34965=>array(51,-74,966,841),34966=>array(46,-68,899,827),34967=>array(39,-52,972,853),34968=>array(47,-65,957,843),34969=>array(47,-72,892,848),34970=>array(31,-62,967,847),34971=>array(39,-58,960,850),34972=>array(28,-56,970,847),34973=>array(39,-70,941,848),34974=>array(52,-58,961,840),34975=>array(47,-80,966,838),34976=>array(50,-67,961,846),34977=>array(52,-68,954,841),34978=>array(43,-65,954,838),34979=>array(54,-61,964,848),34980=>array(47,-62,960,845),34981=>array(54,-62,948,848),34982=>array(54,-65,916,848),34983=>array(54,-71,914,848),34984=>array(52,-62,947,844),34985=>array(54,-66,951,848),34986=>array(46,-65,955,842),34987=>array(36,-69,962,838),34988=>array(44,-68,964,849),34989=>array(29,-63,942,840),34990=>array(54,-61,944,856),34991=>array(54,-74,945,848),34992=>array(61,-67,945,811),34993=>array(33,-74,971,834),34994=>array(51,-79,960,854),34995=>array(41,-70,935,848),34996=>array(36,-63,982,842),34997=>array(46,-55,954,833),34998=>array(38,-67,972,844),34999=>array(36,-63,966,850),35000=>array(44,-70,954,836),35001=>array(41,-70,951,842),35002=>array(42,-72,950,844),35003=>array(33,-70,954,842),35004=>array(50,-71,977,841),35005=>array(47,-55,904,852),35006=>array(28,-55,965,844),35007=>array(41,-65,959,838),35008=>array(36,-57,916,842),35009=>array(42,-66,957,840),35010=>array(44,-73,955,828),35011=>array(41,-65,913,835),35012=>array(41,-67,964,840),35013=>array(45,-68,959,830),35014=>array(28,-66,864,822),35015=>array(46,-53,972,855),35016=>array(41,-65,948,842),35017=>array(39,-71,966,842),35018=>array(46,-64,958,852),35019=>array(37,-67,964,834),35020=>array(37,-72,966,846),35021=>array(38,-65,908,842),35022=>array(48,-65,956,847),35023=>array(43,-75,955,840),35024=>array(28,-68,915,842),35025=>array(41,-65,950,842),35026=>array(55,-61,967,850),35027=>array(41,-65,957,842),35028=>array(35,-67,942,845),35029=>array(44,-69,969,833),35030=>array(30,-71,980,840),35031=>array(37,-73,960,840),35032=>array(51,-55,963,832),35033=>array(42,-74,948,823),35034=>array(40,-74,969,830),35035=>array(46,-70,969,838),35036=>array(32,-63,946,834),35037=>array(57,-60,957,832),35038=>array(35,-65,959,841),35039=>array(33,-67,948,833),35040=>array(33,-82,948,786),35041=>array(41,-64,954,821),35042=>array(20,-69,935,815),35043=>array(23,-68,956,832),35044=>array(29,-60,931,840),35045=>array(24,-68,886,822),35046=>array(36,-79,957,841),35047=>array(45,-76,966,840),35048=>array(31,-68,941,849),35049=>array(31,-68,949,842),35050=>array(41,-66,917,842),35051=>array(47,-71,903,842),35052=>array(49,-72,973,839),35053=>array(31,-68,949,842),35054=>array(54,-70,905,840),35055=>array(36,-65,906,844),35056=>array(36,-67,971,838),35057=>array(34,-65,975,843),35058=>array(46,-71,948,823),35059=>array(45,-68,956,836),35060=>array(35,-63,958,830),35061=>array(47,-74,948,832),35062=>array(45,-70,955,840),35063=>array(47,-65,973,838),35064=>array(40,-71,973,822),35065=>array(68,-59,967,842),35066=>array(41,-70,966,837),35067=>array(41,-75,956,824),35068=>array(53,-64,928,823),35069=>array(28,-79,972,842),35070=>array(35,-68,957,825),35071=>array(53,-64,954,845),35072=>array(42,-72,963,843),35073=>array(42,-69,960,785),35074=>array(34,-66,968,833),35075=>array(34,-70,930,837),35076=>array(34,-66,938,835),35077=>array(51,-72,957,839),35078=>array(41,-73,968,837),35079=>array(36,-67,962,845),35080=>array(40,-63,956,840),35081=>array(43,-75,972,835),35082=>array(38,-70,906,823),35083=>array(53,-68,975,841),35084=>array(36,-65,952,823),35085=>array(34,-67,956,837),35086=>array(38,-73,976,847),35087=>array(38,-56,957,855),35088=>array(36,-63,924,834),35089=>array(50,-75,977,838),35090=>array(56,-73,972,842),35091=>array(32,-65,964,836),35092=>array(47,-71,952,842),35093=>array(45,-66,965,840),35094=>array(54,-70,978,837),35095=>array(44,-64,946,840),35096=>array(34,-58,954,838),35097=>array(30,-64,965,837),35098=>array(46,-64,959,841),35099=>array(23,-62,929,821),35100=>array(31,-80,971,836),35101=>array(38,-73,940,833),35102=>array(35,-68,968,820),35103=>array(39,-70,915,842),35104=>array(23,-65,954,829),35105=>array(45,-61,956,838),35106=>array(37,-75,978,839),35107=>array(48,-72,987,836),35108=>array(23,-60,977,833),35109=>array(42,-70,953,820),35110=>array(32,-55,970,855),35111=>array(24,-54,972,846),35112=>array(35,-57,933,847),35113=>array(31,-76,970,843),35114=>array(26,-73,967,820),35115=>array(19,-70,951,838),35116=>array(53,-70,993,835),35117=>array(47,-79,964,856),35118=>array(39,-71,976,833),35119=>array(41,-72,945,841),35120=>array(36,-65,974,846),35121=>array(51,-75,974,846),35122=>array(30,-69,947,845),35123=>array(30,-65,965,837),35124=>array(12,-68,918,821),35125=>array(31,-55,947,855),35126=>array(34,-65,910,817),35127=>array(42,-75,973,833),35128=>array(36,-66,945,842),35129=>array(23,-70,971,823),35130=>array(56,-68,972,840),35131=>array(54,-60,955,843),35132=>array(42,-70,971,833),35133=>array(56,-72,972,832),35134=>array(45,-67,957,850),35135=>array(23,-69,942,828),35136=>array(41,-74,947,833),35137=>array(17,-68,965,819),35138=>array(31,-59,973,853),35139=>array(56,-56,949,840),35140=>array(49,-58,955,843),35141=>array(32,-68,948,833),35142=>array(40,-67,972,844),35143=>array(51,-67,924,842),35144=>array(23,-69,955,821),35145=>array(39,-64,911,837),35146=>array(23,-66,962,821),35147=>array(33,-67,973,837),35148=>array(39,-63,950,817),35149=>array(36,-68,966,832),35150=>array(23,-67,964,833),35151=>array(40,-72,963,839),35152=>array(46,-66,958,838),35153=>array(42,-67,952,843),35154=>array(41,-76,970,831),35155=>array(30,-70,954,832),35156=>array(23,-67,951,831),35157=>array(26,-59,937,831),35158=>array(35,-66,971,846),35159=>array(51,-68,956,835),35160=>array(43,-67,969,837),35161=>array(46,-67,972,838),35162=>array(44,-66,980,845),35163=>array(40,-64,978,844),35164=>array(31,-68,954,846),35165=>array(26,-64,983,858),35166=>array(47,-53,974,835),35167=>array(36,-66,971,834),35168=>array(43,-65,928,835),35169=>array(52,-67,924,835),35170=>array(27,-55,947,856),35171=>array(44,-66,964,846),35172=>array(35,-68,952,836),35173=>array(20,-104,957,841),35174=>array(35,-64,959,836),35175=>array(39,-64,973,843),35176=>array(23,-66,969,825),35177=>array(43,-82,960,839),35178=>array(31,-65,958,829),35179=>array(41,-74,971,835),35180=>array(28,-55,958,845),35181=>array(36,-81,966,831),35182=>array(36,-73,994,831),35183=>array(33,-76,966,826),35184=>array(23,-72,977,846),35185=>array(39,-70,964,840),35186=>array(51,-65,948,841),35187=>array(27,-70,974,831),35188=>array(29,-62,912,826),35189=>array(29,-76,955,843),35190=>array(22,-65,973,835),35191=>array(34,-65,969,825),35192=>array(31,-66,978,831),35193=>array(31,-66,980,831),35194=>array(34,-62,948,834),35195=>array(31,-59,968,849),35196=>array(29,-60,967,841),35197=>array(29,-64,942,841),35198=>array(71,-63,945,782),35199=>array(73,-53,929,772),35200=>array(85,374,935,781),35201=>array(52,-69,935,781),35202=>array(74,-70,971,782),35203=>array(59,-63,955,788),35204=>array(64,-70,938,788),35205=>array(53,-66,930,836),35206=>array(55,-69,963,818),35207=>array(63,-70,937,818),35208=>array(48,-73,967,802),35209=>array(60,-68,950,804),35210=>array(54,-53,934,811),35211=>array(58,-74,944,783),35212=>array(18,-65,948,784),35213=>array(64,-60,935,830),35214=>array(52,-39,956,787),35215=>array(43,-59,954,812),35216=>array(38,-56,957,818),35217=>array(42,-58,956,836),35218=>array(51,-62,956,822),35219=>array(51,-71,960,837),35220=>array(64,-65,944,791),35221=>array(42,-64,956,828),35222=>array(39,-63,959,834),35223=>array(58,-69,953,780),35224=>array(96,-62,938,829),35225=>array(51,-62,946,848),35226=>array(37,-65,908,816),35227=>array(36,-70,966,828),35228=>array(36,-70,954,826),35229=>array(50,-72,962,780),35230=>array(37,-70,961,773),35231=>array(45,-71,962,824),35232=>array(32,-62,971,796),35233=>array(38,-71,967,774),35234=>array(49,-71,968,829),35235=>array(41,-71,966,824),35236=>array(36,-70,969,835),35237=>array(33,-60,971,836),35238=>array(32,-72,971,827),35239=>array(47,-63,960,838),35240=>array(71,-59,963,789),35241=>array(31,-69,963,825),35242=>array(46,-70,957,826),35243=>array(17,-79,957,825),35244=>array(39,-79,950,835),35245=>array(52,-61,965,785),35246=>array(66,-70,937,824),35247=>array(62,-74,977,829),35248=>array(32,-74,978,835),35249=>array(64,-58,939,828),35250=>array(52,-68,974,835),35251=>array(39,-60,970,841),35252=>array(29,-75,972,828),35253=>array(104,-74,975,791),35254=>array(50,-70,962,837),35255=>array(32,-71,966,835),35256=>array(104,-74,975,791),35257=>array(33,-66,963,832),35258=>array(64,-65,935,840),35259=>array(22,-76,987,835),35260=>array(18,-76,966,789),35261=>array(47,-63,960,840),35262=>array(37,-74,967,834),35263=>array(44,-75,967,835),35264=>array(35,-70,960,827),35265=>array(24,-56,921,784),35266=>array(18,-61,932,792),35267=>array(25,-55,971,792),35268=>array(26,-56,932,826),35269=>array(29,-51,934,827),35270=>array(31,-72,937,818),35271=>array(98,-67,941,813),35272=>array(39,-59,913,838),35273=>array(28,-60,920,816),35274=>array(70,-78,938,810),35275=>array(22,-69,936,771),35276=>array(43,-73,931,819),35277=>array(37,-85,973,836),35278=>array(32,-81,938,822),35279=>array(52,-72,933,818),35280=>array(29,-64,936,819),35281=>array(25,-75,942,817),35282=>array(69,-60,863,849),35283=>array(45,-70,886,842),35284=>array(60,-57,924,849),35285=>array(59,-56,911,851),35286=>array(40,-67,979,847),35287=>array(38,-62,975,838),35288=>array(24,-68,959,845),35289=>array(41,-79,963,852),35290=>array(33,-67,975,842),35291=>array(52,-68,954,841),35292=>array(28,-68,937,835),35293=>array(33,-56,962,857),35294=>array(18,-65,913,834),35295=>array(25,-67,955,828),35296=>array(42,-59,972,836),35297=>array(33,-70,989,831),35298=>array(40,-61,900,830),35299=>array(52,-67,949,834),35300=>array(28,-87,963,828),35301=>array(38,-71,969,836),35302=>array(36,-71,962,834),35303=>array(46,-66,934,843),35304=>array(32,-73,966,824),35305=>array(38,-71,967,828),35306=>array(46,-66,938,850),35307=>array(42,-68,974,839),35308=>array(34,-74,960,825),35309=>array(44,-71,955,841),35310=>array(54,-67,962,842),35311=>array(19,-67,922,834),35312=>array(44,-70,951,836),35313=>array(38,-69,965,842),35314=>array(29,-70,954,831),35315=>array(38,-67,981,829),35316=>array(41,-67,962,848),35317=>array(46,-70,935,842),35318=>array(44,-78,967,829),35319=>array(60,-65,930,830),35320=>array(63,-74,926,833),35321=>array(29,-71,960,841),35322=>array(54,-64,965,831),35323=>array(38,-70,975,835),35324=>array(38,-73,975,841),35325=>array(44,-71,959,841),35326=>array(33,-64,973,836),35327=>array(44,-52,955,850),35328=>array(84,-64,916,819),35329=>array(261,-47,747,842),35330=>array(60,-61,955,817),35331=>array(60,-65,951,829),35332=>array(33,-66,966,836),35333=>array(60,-58,967,842),35334=>array(69,-67,876,842),35335=>array(77,-61,909,840),35336=>array(51,-64,954,835),35337=>array(60,-45,948,847),35338=>array(60,-62,959,817),35339=>array(60,-55,914,847),35340=>array(65,-47,948,790),35341=>array(65,-50,946,844),35342=>array(60,-69,949,830),35343=>array(68,-68,964,834),35344=>array(65,-64,955,792),35345=>array(46,-34,963,853),35346=>array(63,-53,904,817),35347=>array(60,-68,902,829),35348=>array(85,-64,928,824),35349=>array(79,-56,912,846),35350=>array(60,-55,960,835),35351=>array(60,-61,957,834),35352=>array(60,-61,957,823),35353=>array(64,-56,964,848),35354=>array(116,-57,874,823),35355=>array(58,-62,954,840),35356=>array(60,-44,968,843),35357=>array(60,-62,948,793),35358=>array(63,-73,976,839),35359=>array(59,-58,964,815),35360=>array(60,-61,899,843),35361=>array(60,-66,963,843),35362=>array(63,-73,960,831),35363=>array(62,-69,955,829),35364=>array(60,-65,934,846),35365=>array(71,-71,907,796),35366=>array(60,-50,950,843),35367=>array(66,-69,963,841),35368=>array(60,-44,954,843),35369=>array(76,-58,930,840),35370=>array(60,-62,945,824),35371=>array(60,-44,960,843),35372=>array(72,-77,972,836),35373=>array(60,-63,975,817),35374=>array(60,-65,952,843),35375=>array(60,-69,982,843),35376=>array(65,-41,957,842),35377=>array(60,-64,949,837),35378=>array(60,-66,891,852),35379=>array(60,-62,964,817),35380=>array(56,-67,956,837),35381=>array(60,-46,917,843),35382=>array(59,-62,961,793),35383=>array(60,-62,901,838),35384=>array(60,-71,948,843),35385=>array(62,-68,951,844),35386=>array(56,-72,965,844),35387=>array(60,-61,947,829),35388=>array(53,-57,950,817),35389=>array(60,-52,921,846),35390=>array(64,-67,958,827),35391=>array(57,-44,964,839),35392=>array(59,-55,951,844),35393=>array(60,-65,953,826),35394=>array(60,-66,964,843),35395=>array(60,-65,982,843),35396=>array(57,-74,966,845),35397=>array(56,-76,976,839),35398=>array(56,-60,961,835),35399=>array(60,-58,978,843),35400=>array(74,-65,942,820),35401=>array(51,-71,977,843),35402=>array(63,-70,952,837),35403=>array(60,-44,957,843),35404=>array(58,-70,948,836),35405=>array(58,-47,947,844),35406=>array(62,-48,954,843),35407=>array(59,-73,911,848),35408=>array(60,-61,951,841),35409=>array(60,-61,952,824),35410=>array(60,-63,952,830),35411=>array(60,-51,963,843),35412=>array(60,-62,905,817),35413=>array(53,-65,956,817),35414=>array(51,-74,972,834),35415=>array(56,-61,903,841),35416=>array(78,-67,920,833),35417=>array(65,-76,965,843),35418=>array(60,-44,963,843),35419=>array(60,-50,964,793),35420=>array(42,-64,971,837),35421=>array(60,-62,925,843),35422=>array(60,-64,909,817),35423=>array(35,-69,972,846),35424=>array(52,-63,965,844),35425=>array(77,-52,914,841),35426=>array(62,-60,910,836),35427=>array(60,-63,958,831),35428=>array(54,-66,966,832),35429=>array(51,-65,977,853),35430=>array(60,-61,963,829),35431=>array(51,-60,957,839),35432=>array(52,-74,971,831),35433=>array(60,-61,954,838),35434=>array(60,-64,964,844),35435=>array(53,-57,961,829),35436=>array(69,-78,951,818),35437=>array(62,-61,954,846),35438=>array(49,-55,955,830),35439=>array(60,-70,899,843),35440=>array(50,-58,945,829),35441=>array(53,-64,958,834),35442=>array(53,-63,954,824),35443=>array(60,-65,954,843),35444=>array(58,-68,951,840),35445=>array(55,-73,963,826),35446=>array(57,-71,905,848),35447=>array(60,-65,904,837),35448=>array(61,-67,974,849),35449=>array(45,-76,914,842),35450=>array(61,-72,914,841),35451=>array(57,-67,966,836),35452=>array(52,-57,954,833),35453=>array(61,-69,956,840),35454=>array(47,-62,925,842),35455=>array(63,-55,954,831),35456=>array(53,-65,946,842),35457=>array(57,-69,951,838),35458=>array(57,-67,957,830),35459=>array(62,-65,916,840),35460=>array(59,-68,981,830),35461=>array(58,-65,977,836),35462=>array(62,-53,957,838),35463=>array(60,-62,978,843),35464=>array(61,-52,957,849),35465=>array(42,-67,958,842),35466=>array(30,-60,954,832),35467=>array(51,-70,967,832),35468=>array(53,-59,964,820),35469=>array(53,-48,964,813),35470=>array(61,-65,976,849),35471=>array(60,-73,982,841),35472=>array(61,-59,970,849),35473=>array(63,-53,957,817),35474=>array(57,-74,986,839),35475=>array(64,-71,936,839),35476=>array(64,-67,967,840),35477=>array(58,-66,963,819),35478=>array(62,-50,956,846),35479=>array(61,-65,936,849),35480=>array(53,-69,975,828),35481=>array(65,-68,961,843),35482=>array(67,-70,926,835),35483=>array(61,-61,970,849),35484=>array(61,-67,968,849),35485=>array(61,-71,972,849),35486=>array(49,-68,949,815),35487=>array(61,-68,957,849),35488=>array(52,-70,961,833),35489=>array(58,-63,964,837),35490=>array(61,-52,958,849),35491=>array(59,-48,954,797),35492=>array(59,-62,944,815),35493=>array(50,-65,945,831),35494=>array(60,-64,895,793),35495=>array(59,-66,953,826),35496=>array(62,-68,954,845),35497=>array(61,-56,948,851),35498=>array(57,-71,964,816),35499=>array(59,-68,967,842),35500=>array(59,-57,956,848),35501=>array(53,-57,966,829),35502=>array(61,-66,964,849),35503=>array(61,-62,932,849),35504=>array(54,-70,952,837),35505=>array(61,-72,962,849),35506=>array(56,-61,970,817),35507=>array(61,-77,932,849),35508=>array(61,-63,977,850),35509=>array(61,-64,968,855),35510=>array(69,-68,974,842),35511=>array(61,-67,939,849),35512=>array(60,-63,955,837),35513=>array(53,-68,954,829),35514=>array(59,-68,977,836),35515=>array(59,-69,967,834),35516=>array(53,-57,958,827),35517=>array(60,-61,965,837),35518=>array(119,-68,903,804),35519=>array(53,-62,915,817),35520=>array(54,-68,950,843),35521=>array(61,-62,963,843),35522=>array(58,-68,897,838),35523=>array(57,-70,970,832),35524=>array(56,-62,959,835),35525=>array(50,-71,963,831),35526=>array(55,-80,952,833),35527=>array(63,-67,962,841),35528=>array(54,-47,963,843),35529=>array(62,-65,958,843),35530=>array(61,-66,937,849),35531=>array(53,-65,956,835),35532=>array(53,-64,974,835),35533=>array(56,-61,956,836),35534=>array(61,-64,960,849),35535=>array(51,-68,969,817),35536=>array(26,-58,946,836),35537=>array(56,-64,978,833),35538=>array(53,-60,960,830),35539=>array(63,-62,959,840),35540=>array(60,-69,975,838),35541=>array(60,-70,959,833),35542=>array(55,-63,973,849),35543=>array(63,-55,986,843),35544=>array(63,-73,980,839),35545=>array(58,-70,963,834),35546=>array(61,-53,983,824),35547=>array(53,-74,975,832),35548=>array(53,-64,971,830),35549=>array(59,-68,973,839),35550=>array(71,-72,928,794),35551=>array(55,-60,967,814),35552=>array(50,-42,947,837),35553=>array(54,-37,973,816),35554=>array(49,-67,954,793),35555=>array(49,-67,914,840),35556=>array(55,-59,951,793),35557=>array(55,-44,947,842),35558=>array(51,-67,946,826),35559=>array(56,-65,951,832),35560=>array(54,-67,927,840),35561=>array(55,-43,936,845),35562=>array(54,-73,949,833),35563=>array(48,-67,964,833),35564=>array(29,-69,953,852),35565=>array(48,-68,970,852),35566=>array(53,-64,965,845),35567=>array(61,-61,955,838),35568=>array(56,-48,971,833),35569=>array(58,-62,951,842),35570=>array(68,-45,959,836),35571=>array(57,-64,947,844),35572=>array(42,-60,945,837),35573=>array(55,-56,953,846),35574=>array(65,-82,957,818),35575=>array(51,-69,964,797),35576=>array(59,-66,948,835),35577=>array(59,-48,947,842),35578=>array(54,-71,952,830),35579=>array(59,-43,953,844),35580=>array(68,-70,981,839),35581=>array(59,-68,947,842),35582=>array(53,-65,949,836),35583=>array(53,-69,950,835),35584=>array(53,-69,969,829),35585=>array(62,-60,926,816),35586=>array(60,-64,911,823),35587=>array(63,-42,959,842),35588=>array(40,-72,967,840),35589=>array(58,-63,914,841),35590=>array(56,-61,919,872),35591=>array(31,-65,970,843),35592=>array(35,-67,969,793),35593=>array(64,-56,984,851),35594=>array(56,-63,961,840),35595=>array(75,-71,987,834),35596=>array(69,-60,954,804),35597=>array(108,-71,902,823),35598=>array(79,-70,956,836),35599=>array(60,-60,958,843),35600=>array(66,-55,968,827),35601=>array(57,-74,957,842),35602=>array(61,-68,963,838),35603=>array(60,-73,960,842),35604=>array(62,-68,954,833),35605=>array(57,-72,959,836),35606=>array(50,-66,968,793),35607=>array(59,-69,951,816),35608=>array(57,-71,952,838),35609=>array(64,-64,978,843),35610=>array(54,-57,961,804),35611=>array(55,-65,952,826),35612=>array(57,-66,962,845),35613=>array(53,-66,951,844),35614=>array(59,-68,930,832),35615=>array(51,-57,926,848),35616=>array(59,-58,957,842),35617=>array(53,-64,952,829),35618=>array(62,-73,972,841),35619=>array(58,-68,953,837),35620=>array(59,-69,955,833),35621=>array(56,-53,968,831),35622=>array(45,-66,958,845),35623=>array(59,-66,954,838),35624=>array(63,-68,984,823),35625=>array(33,-72,976,841),35626=>array(62,-67,956,838),35627=>array(55,-70,951,838),35628=>array(60,-72,947,795),35629=>array(55,-73,947,838),35630=>array(52,-77,958,842),35631=>array(42,-49,945,849),35632=>array(61,-71,964,835),35633=>array(53,-75,948,842),35634=>array(53,-73,970,848),35635=>array(60,-85,957,793),35636=>array(60,-68,951,847),35637=>array(81,-68,922,835),35638=>array(45,-61,960,837),35639=>array(63,-60,964,839),35640=>array(66,-79,974,834),35641=>array(60,-50,953,830),35642=>array(69,-81,958,837),35643=>array(71,-72,938,836),35644=>array(56,-78,946,833),35645=>array(79,-68,940,841),35646=>array(68,-60,983,813),35647=>array(60,-75,942,847),35648=>array(56,-70,968,842),35649=>array(54,-64,954,834),35650=>array(68,-68,956,840),35651=>array(60,-48,961,847),35652=>array(60,-63,918,847),35653=>array(54,-44,946,839),35654=>array(34,-70,943,825),35655=>array(60,-66,972,841),35656=>array(54,-74,972,841),35657=>array(59,-53,956,830),35658=>array(56,-69,950,839),35659=>array(75,-60,922,846),35660=>array(51,-79,968,852),35661=>array(42,-71,944,851),35662=>array(62,-64,941,798),35663=>array(57,-67,972,833),35664=>array(56,-65,954,845),35665=>array(60,-62,965,844),35666=>array(50,-57,970,848),35667=>array(73,-46,977,827),35668=>array(48,-58,951,846),35669=>array(58,-67,955,844),35670=>array(55,-67,960,824),35671=>array(66,-59,959,841),35672=>array(51,-68,959,833),35673=>array(60,-71,971,835),35674=>array(49,-67,954,813),35675=>array(60,-49,966,838),35676=>array(53,-61,952,843),35677=>array(52,-50,966,840),35678=>array(60,-66,976,847),35679=>array(53,-50,969,800),35680=>array(63,-55,960,837),35681=>array(60,-65,945,847),35682=>array(60,-63,978,847),35683=>array(42,-70,970,847),35684=>array(60,-66,985,847),35685=>array(40,-67,979,845),35686=>array(55,-77,944,824),35687=>array(48,-66,967,838),35688=>array(57,-73,977,839),35689=>array(63,-48,966,844),35690=>array(57,-68,948,834),35691=>array(64,-76,962,839),35692=>array(66,-60,961,830),35693=>array(51,-59,973,846),35694=>array(60,-68,985,848),35695=>array(53,-64,939,795),35696=>array(54,-63,962,850),35697=>array(36,-86,955,843),35698=>array(52,-79,973,837),35699=>array(60,-59,953,847),35700=>array(60,-63,967,836),35701=>array(63,-68,959,847),35702=>array(36,-66,955,847),35703=>array(53,-59,971,837),35704=>array(63,-61,964,840),35705=>array(53,-68,977,836),35706=>array(54,-74,967,831),35707=>array(83,-63,936,790),35708=>array(83,-74,936,841),35709=>array(31,-64,971,832),35710=>array(60,-55,956,858),35711=>array(57,-46,965,823),35712=>array(59,-71,961,835),35713=>array(39,-60,961,847),35714=>array(61,-71,959,835),35715=>array(51,-69,959,836),35716=>array(76,-63,920,840),35717=>array(55,-69,973,840),35718=>array(40,-71,955,839),35719=>array(60,-60,923,847),35720=>array(55,-70,971,828),35721=>array(61,-61,953,842),35722=>array(50,-70,960,840),35723=>array(66,-48,953,860),35724=>array(52,-66,968,838),35725=>array(60,-48,938,847),35726=>array(23,-62,952,845),35727=>array(40,-71,955,854),35728=>array(41,-71,944,842),35729=>array(60,-52,969,847),35730=>array(52,-65,961,842),35731=>array(59,-66,957,845),35732=>array(49,-63,967,842),35733=>array(62,-62,900,839),35734=>array(58,-59,960,834),35735=>array(60,-67,951,839),35736=>array(58,-67,960,831),35737=>array(53,-52,949,842),35738=>array(56,-60,959,851),35739=>array(74,-60,957,847),35740=>array(59,-79,967,833),35741=>array(62,-67,956,847),35742=>array(53,-70,968,835),35743=>array(55,-61,949,840),35744=>array(308,-19,665,809),35745=>array(74,-66,937,840),35746=>array(69,-65,926,826),35747=>array(62,-67,953,840),35748=>array(72,-62,958,826),35749=>array(59,-58,960,812),35750=>array(52,-66,922,810),35751=>array(49,13,913,814),35752=>array(75,-70,932,828),35753=>array(66,-22,929,818),35754=>array(50,-58,878,826),35755=>array(70,-29,943,838),35756=>array(68,-30,944,836),35757=>array(65,-74,889,826),35758=>array(49,-71,968,806),35759=>array(68,-57,958,826),35760=>array(80,-28,946,834),35761=>array(61,-60,890,836),35762=>array(56,-68,916,829),35763=>array(49,-58,916,830),35764=>array(61,-11,933,807),35765=>array(47,-25,917,820),35766=>array(49,-64,914,808),35767=>array(62,-61,901,829),35768=>array(64,-65,936,836),35769=>array(62,-64,930,836),35770=>array(52,-30,964,828),35771=>array(50,-65,906,832),35772=>array(56,-59,936,784),35773=>array(54,-61,975,811),35774=>array(54,-54,946,804),35775=>array(71,-71,931,847),35776=>array(74,-71,931,835),35777=>array(59,-22,938,797),35778=>array(67,-66,936,823),35779=>array(67,-64,944,826),35780=>array(78,-67,942,836),35781=>array(53,-29,927,790),35782=>array(49,-54,951,811),35783=>array(58,-60,909,836),35784=>array(69,-69,931,839),35785=>array(69,-69,946,834),35786=>array(69,-74,960,846),35787=>array(62,-64,938,830),35788=>array(66,-54,873,820),35789=>array(51,-61,888,826),35790=>array(56,-69,892,826),35791=>array(49,-56,888,823),35792=>array(43,-71,970,832),35793=>array(63,-60,954,817),35794=>array(63,-60,940,837),35795=>array(58,-26,938,826),35796=>array(56,-71,957,828),35797=>array(57,-61,944,825),35798=>array(63,-27,925,820),35799=>array(41,-62,944,834),35800=>array(67,-66,928,826),35801=>array(56,-59,958,826),35802=>array(47,-57,956,835),35803=>array(57,-68,938,830),35804=>array(43,-75,947,823),35805=>array(72,-65,941,830),35806=>array(62,-66,951,815),35807=>array(53,-79,920,816),35808=>array(62,-19,942,836),35809=>array(71,-63,937,844),35810=>array(61,-62,903,834),35811=>array(57,-69,937,828),35812=>array(68,-58,932,835),35813=>array(69,-79,949,838),35814=>array(59,-67,913,842),35815=>array(61,-25,932,852),35816=>array(60,-58,947,812),35817=>array(54,-54,885,818),35818=>array(76,-57,952,836),35819=>array(76,-65,942,840),35820=>array(54,-16,950,805),35821=>array(53,-70,936,795),35822=>array(57,-74,913,831),35823=>array(61,-69,956,794),35824=>array(57,-66,918,828),35825=>array(70,-69,941,825),35826=>array(72,-60,937,843),35827=>array(49,-54,947,827),35828=>array(66,-68,953,838),35829=>array(56,-65,879,798),35830=>array(56,-71,957,837),35831=>array(61,-66,930,831),35832=>array(68,-67,932,831),35833=>array(48,-70,955,799),35834=>array(54,-66,912,805),35835=>array(56,-69,940,835),35836=>array(61,-57,954,811),35837=>array(59,-64,942,836),35838=>array(56,-66,954,834),35839=>array(56,-65,925,833),35840=>array(56,-77,947,828),35841=>array(50,-72,927,834),35842=>array(50,-51,942,836),35843=>array(72,-85,897,810),35844=>array(67,-67,880,835),35845=>array(69,-70,935,838),35846=>array(69,-64,920,848),35847=>array(57,-71,923,842),35848=>array(55,-71,919,837),35849=>array(55,-66,931,838),35850=>array(55,-25,931,846),35851=>array(72,-67,953,832),35852=>array(60,-51,933,817),35853=>array(61,-66,948,829),35854=>array(53,-65,956,828),35855=>array(56,-69,961,831),35856=>array(57,-67,948,829),35857=>array(53,-70,945,831),35858=>array(74,-62,898,809),35859=>array(62,-66,900,836),35860=>array(55,-62,921,816),35861=>array(58,-72,954,847),35862=>array(60,-72,936,819),35863=>array(49,-65,961,834),35864=>array(54,-66,940,842),35865=>array(68,-66,930,834),35866=>array(60,-64,920,842),35867=>array(65,-69,921,839),35868=>array(59,-55,940,818),35869=>array(50,-74,888,836),35870=>array(78,-51,946,805),35871=>array(54,-65,943,820),35872=>array(60,-69,953,835),35873=>array(75,-65,942,800),35874=>array(53,-66,936,841),35875=>array(63,-74,924,807),35876=>array(74,-71,928,842),35877=>array(59,-35,936,828),35878=>array(63,-66,956,841),35879=>array(60,-36,948,825),35880=>array(54,-35,930,820),35881=>array(57,-61,948,786),35882=>array(58,-68,924,839),35883=>array(51,-79,947,838),35884=>array(58,-74,958,810),35885=>array(55,-70,939,793),35886=>array(57,-67,956,811),35887=>array(64,-75,938,828),35888=>array(46,-65,909,825),35889=>array(60,-62,941,844),35890=>array(59,-66,918,786),35891=>array(48,-75,971,825),35892=>array(47,-61,956,809),35893=>array(54,-78,941,836),35894=>array(56,-67,955,831),35895=>array(34,-53,967,839),35896=>array(59,-64,966,833),35897=>array(42,-58,952,836),35898=>array(37,-62,948,813),35899=>array(49,-68,960,813),35900=>array(32,-73,958,820),35901=>array(57,-69,957,837),35902=>array(34,-48,957,835),35903=>array(38,-66,982,837),35904=>array(35,-64,968,841),35905=>array(54,-63,961,836),35906=>array(45,-72,964,797),35907=>array(37,-71,976,834),35908=>array(37,-66,991,841),35909=>array(29,-70,983,834),35910=>array(100,-14,929,778),35911=>array(62,-17,951,770),35912=>array(62,-12,931,835),35913=>array(53,-68,973,835),35914=>array(57,-32,951,824),35915=>array(41,-26,962,842),35916=>array(51,-69,958,831),35917=>array(52,-73,950,838),35918=>array(48,-18,957,796),35919=>array(54,-67,966,832),35920=>array(70,-25,924,832),35921=>array(28,-67,965,836),35922=>array(34,-67,965,836),35923=>array(45,-46,974,829),35924=>array(45,-47,963,829),35925=>array(70,-49,949,772),35926=>array(58,-70,967,781),35927=>array(41,-75,969,781),35928=>array(43,-41,952,836),35929=>array(62,-55,939,847),35930=>array(31,-61,972,789),35931=>array(58,-69,963,787),35932=>array(43,-75,940,786),35933=>array(33,-46,951,785),35934=>array(43,-52,921,846),35935=>array(40,-65,958,815),35936=>array(43,-41,947,787),35937=>array(67,-59,940,845),35938=>array(49,-62,957,839),35939=>array(43,-71,953,787),35940=>array(29,-70,963,783),35941=>array(36,-64,958,834),35942=>array(49,-70,973,829),35943=>array(43,-75,951,824),35944=>array(41,-67,952,835),35945=>array(39,-64,977,779),35946=>array(88,-66,960,834),35947=>array(60,-72,962,835),35948=>array(47,-69,959,835),35949=>array(48,-70,984,789),35950=>array(42,-68,957,836),35951=>array(39,-77,975,819),35952=>array(77,-77,965,824),35953=>array(50,-61,959,782),35954=>array(42,-64,968,786),35955=>array(113,-69,911,825),35956=>array(43,-73,963,835),35957=>array(52,-71,983,829),35958=>array(34,-72,971,826),35959=>array(41,-62,967,832),35960=>array(125,-58,931,843),35961=>array(57,-56,903,842),35962=>array(61,-58,957,850),35963=>array(50,-67,963,835),35964=>array(40,-65,966,835),35965=>array(48,-65,914,842),35966=>array(48,-48,932,842),35967=>array(68,-52,921,846),35968=>array(41,-72,916,834),35969=>array(36,-57,965,855),35970=>array(65,-52,919,836),35971=>array(48,-63,890,842),35972=>array(46,-69,956,834),35973=>array(55,-61,981,850),35974=>array(46,-67,954,830),35975=>array(48,-55,960,842),35976=>array(48,-73,964,843),35977=>array(43,-64,975,840),35978=>array(54,-63,959,830),35979=>array(48,-65,926,842),35980=>array(41,-66,966,841),35981=>array(55,-59,956,838),35982=>array(48,-61,991,842),35983=>array(35,-73,953,836),35984=>array(46,-64,986,860),35985=>array(42,-75,977,829),35986=>array(37,-70,956,831),35987=>array(44,-67,950,836),35988=>array(34,-61,949,850),35989=>array(35,-62,959,834),35990=>array(36,-48,974,842),35991=>array(37,-71,951,837),35992=>array(26,-65,975,837),35993=>array(40,-60,965,827),35994=>array(43,-68,968,838),35995=>array(38,-71,912,832),35996=>array(55,-70,973,830),35997=>array(89,-68,912,789),35998=>array(59,-69,950,836),35999=>array(59,-69,950,842),36000=>array(53,-69,952,855),36001=>array(46,-73,939,829),36002=>array(59,-67,949,789),36003=>array(65,-70,954,850),36004=>array(52,-54,964,849),36005=>array(46,-78,954,834),36006=>array(52,-69,948,804),36007=>array(54,-69,954,823),36008=>array(52,-71,955,831),36009=>array(50,-67,973,788),36010=>array(38,-78,969,857),36011=>array(57,-74,946,785),36012=>array(57,-67,955,836),36013=>array(52,-75,924,831),36014=>array(53,-70,956,817),36015=>array(48,-68,948,822),36016=>array(51,-73,949,836),36017=>array(14,-67,970,832),36018=>array(43,-75,956,824),36019=>array(53,-70,956,837),36020=>array(57,-67,949,832),36021=>array(43,-66,977,865),36022=>array(57,-65,969,830),36023=>array(65,-67,949,782),36024=>array(63,-69,942,838),36025=>array(47,-75,956,822),36026=>array(51,-75,972,773),36027=>array(73,-71,933,837),36028=>array(50,-64,954,835),36029=>array(60,-62,960,833),36030=>array(49,-54,955,849),36031=>array(72,-67,941,827),36032=>array(65,-73,943,839),36033=>array(61,-67,943,828),36034=>array(57,-63,976,839),36035=>array(40,-65,957,837),36036=>array(54,-68,961,834),36037=>array(54,-77,973,830),36038=>array(21,-70,949,839),36039=>array(61,-70,942,837),36040=>array(66,-79,948,785),36041=>array(37,-58,973,855),36042=>array(41,-58,963,837),36043=>array(37,-76,970,846),36044=>array(66,-77,947,844),36045=>array(49,-59,956,822),36046=>array(44,-69,959,827),36047=>array(57,-73,963,773),36048=>array(31,-67,979,836),36049=>array(37,-71,971,787),36050=>array(40,-64,969,851),36051=>array(44,-74,974,837),36052=>array(101,-85,911,844),36053=>array(51,-66,981,829),36054=>array(31,-69,962,825),36055=>array(55,-74,911,822),36056=>array(49,-59,956,847),36057=>array(63,-71,911,793),36058=>array(45,-70,985,836),36059=>array(52,-76,964,843),36060=>array(60,-66,920,791),36061=>array(40,-70,976,780),36062=>array(71,-74,948,836),36063=>array(40,-73,955,830),36064=>array(59,-65,956,835),36065=>array(32,-67,954,849),36066=>array(70,-73,944,789),36067=>array(48,-69,945,826),36068=>array(48,-67,967,842),36069=>array(41,-73,950,840),36070=>array(42,-63,958,836),36071=>array(39,-68,974,832),36072=>array(57,-79,963,839),36073=>array(42,-60,960,845),36074=>array(63,-68,941,833),36075=>array(69,-70,954,826),36076=>array(55,-68,978,787),36077=>array(43,-65,944,823),36078=>array(40,-74,977,827),36079=>array(57,-60,934,840),36080=>array(49,-70,980,838),36081=>array(56,-76,958,783),36082=>array(38,-73,967,845),36083=>array(51,-75,967,830),36084=>array(44,-71,961,830),36085=>array(55,-68,921,789),36086=>array(40,-67,941,846),36087=>array(69,-70,954,834),36088=>array(31,-66,966,837),36089=>array(44,-66,959,818),36090=>array(58,-65,967,851),36091=>array(50,-65,951,833),36092=>array(41,-66,941,829),36093=>array(50,-73,960,847),36094=>array(113,-76,968,832),36095=>array(41,-72,960,786),36096=>array(68,-76,949,803),36097=>array(42,-61,967,836),36098=>array(41,-71,957,842),36099=>array(49,-62,965,831),36100=>array(61,-68,954,834),36101=>array(51,-70,954,846),36102=>array(37,-67,970,832),36103=>array(46,-71,954,829),36104=>array(34,-73,909,835),36105=>array(47,-71,957,781),36106=>array(60,-72,947,825),36107=>array(41,-70,944,813),36108=>array(36,-64,963,832),36109=>array(36,-74,948,834),36110=>array(47,-66,968,832),36111=>array(42,-62,961,834),36112=>array(47,-59,972,825),36113=>array(55,-66,969,849),36114=>array(70,-73,955,835),36115=>array(27,-65,966,836),36116=>array(49,-71,979,803),36117=>array(56,-73,963,837),36118=>array(47,-73,962,837),36119=>array(41,-73,945,825),36120=>array(26,-72,954,836),36121=>array(31,-71,967,828),36122=>array(30,-65,950,836),36123=>array(54,-70,974,849),36124=>array(55,-63,972,815),36125=>array(77,-58,885,796),36126=>array(65,-63,905,830),36127=>array(57,-65,934,838),36128=>array(73,-61,894,844),36129=>array(48,-61,906,780),36130=>array(42,-70,922,826),36131=>array(60,-66,915,826),36132=>array(61,-67,931,834),36133=>array(47,-74,945,834),36134=>array(32,-72,958,811),36135=>array(29,-63,917,839),36136=>array(25,-69,906,831),36137=>array(33,-70,956,800),36138=>array(33,-66,954,836),36139=>array(34,-65,980,835),36140=>array(32,-67,952,828),36141=>array(33,-64,903,831),36142=>array(28,-71,923,818),36143=>array(43,-69,914,791),36144=>array(48,-68,953,831),36145=>array(30,-59,928,831),36146=>array(70,-78,917,820),36147=>array(61,-71,909,826),36148=>array(42,-67,938,832),36149=>array(41,-65,907,830),36150=>array(31,-58,968,784),36151=>array(47,-65,927,835),36152=>array(83,-66,900,831),36153=>array(60,-63,913,830),36154=>array(24,-72,868,832),36155=>array(35,-69,941,824),36156=>array(31,-56,939,838),36157=>array(39,-86,948,818),36158=>array(47,-71,913,782),36159=>array(33,-69,944,832),36160=>array(60,-84,929,816),36161=>array(30,-59,917,841),36162=>array(33,-64,960,837),36163=>array(38,-68,921,837),36164=>array(71,-70,939,829),36165=>array(39,-79,956,827),36166=>array(31,-64,953,782),36167=>array(39,-69,972,826),36168=>array(39,-70,942,784),36169=>array(34,-70,942,823),36170=>array(39,-69,953,848),36171=>array(37,-69,955,834),36172=>array(39,-69,939,834),36173=>array(76,-70,886,824),36174=>array(43,-58,956,835),36175=>array(84,-54,912,841),36176=>array(39,-69,901,785),36177=>array(43,-66,1003,830),36178=>array(39,-69,911,794),36179=>array(40,-69,930,849),36180=>array(39,-69,939,843),36181=>array(39,-70,957,829),36182=>array(40,-63,943,834),36183=>array(39,-74,900,778),36184=>array(43,-69,915,827),36185=>array(39,-68,939,831),36186=>array(41,-65,951,849),36187=>array(38,-75,961,840),36188=>array(99,-67,936,828),36189=>array(31,-69,906,772),36190=>array(35,-75,930,836),36191=>array(46,-75,954,834),36192=>array(32,-71,895,827),36193=>array(22,-75,931,831),36194=>array(35,-69,949,842),36195=>array(55,-69,943,835),36196=>array(67,-75,930,830),36197=>array(31,-71,961,839),36198=>array(56,-63,984,848),36199=>array(48,-68,957,829),36200=>array(40,-67,966,825),36201=>array(28,-67,961,826),36202=>array(25,-80,971,825),36203=>array(51,-65,970,836),36204=>array(36,-76,962,823),36205=>array(25,-70,958,832),36206=>array(35,-79,975,833),36207=>array(32,-71,960,837),36208=>array(46,-74,960,830),36209=>array(69,-66,950,830),36210=>array(36,-62,963,833),36211=>array(50,-65,966,831),36212=>array(41,-73,967,829),36213=>array(23,-60,942,823),36214=>array(27,-72,965,831),36215=>array(35,-74,945,834),36216=>array(46,-71,973,825),36217=>array(39,-66,960,829),36218=>array(46,-71,973,824),36219=>array(46,-72,974,835),36220=>array(33,-64,968,835),36221=>array(44,-74,972,830),36222=>array(46,-72,974,835),36223=>array(46,-72,978,835),36224=>array(47,-71,970,832),36225=>array(18,-62,960,857),36226=>array(46,-72,974,835),36227=>array(46,-72,974,835),36228=>array(38,-65,975,833),36229=>array(33,-68,959,833),36230=>array(46,-72,978,835),36231=>array(46,-72,974,835),36232=>array(46,-72,974,835),36233=>array(40,-65,968,826),36234=>array(42,-74,962,832),36235=>array(26,-72,938,824),36236=>array(30,-61,967,836),36237=>array(39,-64,977,830),36238=>array(35,-68,978,832),36239=>array(36,-65,981,820),36240=>array(28,-61,973,828),36241=>array(42,-64,973,848),36242=>array(27,-65,965,826),36243=>array(28,-61,981,826),36244=>array(39,-68,976,831),36245=>array(46,-69,966,829),36246=>array(57,-68,966,824),36247=>array(28,-61,965,826),36248=>array(28,-61,965,826),36249=>array(41,-75,959,830),36250=>array(28,-61,965,826),36251=>array(36,-71,969,824),36252=>array(35,-68,970,833),36253=>array(46,-72,974,835),36254=>array(46,-72,974,835),36255=>array(58,-53,973,841),36256=>array(39,-71,977,824),36257=>array(41,-68,971,823),36258=>array(34,-64,960,835),36259=>array(31,-54,960,835),36260=>array(46,-72,974,836),36261=>array(37,-60,968,835),36262=>array(45,-53,974,845),36263=>array(37,-71,981,818),36264=>array(56,-71,966,834),36265=>array(46,-72,974,835),36266=>array(39,-57,979,833),36267=>array(32,-71,984,825),36268=>array(41,-64,983,830),36269=>array(33,-62,984,827),36270=>array(26,-67,975,829),36271=>array(33,-68,970,828),36272=>array(31,-72,979,835),36273=>array(22,-69,937,817),36274=>array(42,-65,970,832),36275=>array(55,-73,970,762),36276=>array(30,-74,968,786),36277=>array(53,-54,896,841),36278=>array(64,-65,967,790),36279=>array(48,-37,974,830),36280=>array(45,-73,940,761),36281=>array(57,-72,965,827),36282=>array(45,-72,974,829),36283=>array(45,-72,967,837),36284=>array(54,-76,947,783),36285=>array(45,-69,959,849),36286=>array(45,-24,954,822),36287=>array(35,-71,971,788),36288=>array(45,-65,870,788),36289=>array(56,-32,959,785),36290=>array(35,-53,954,841),36291=>array(39,-64,963,832),36292=>array(45,-34,953,814),36293=>array(47,-70,955,819),36294=>array(52,-68,972,837),36295=>array(61,-34,951,822),36296=>array(48,-69,960,839),36297=>array(45,-79,971,847),36298=>array(40,-61,967,836),36299=>array(21,-76,948,841),36300=>array(52,-59,975,844),36301=>array(55,-68,951,826),36302=>array(48,-27,950,839),36303=>array(46,-72,907,828),36304=>array(46,-59,964,822),36305=>array(45,-34,966,838),36306=>array(45,-62,965,788),36307=>array(47,-15,955,842),36308=>array(45,-52,921,846),36309=>array(41,-52,947,842),36310=>array(39,-53,947,786),36311=>array(41,-50,951,846),36312=>array(53,-70,956,825),36313=>array(59,-19,963,783),36314=>array(28,-67,919,781),36315=>array(53,-62,978,841),36316=>array(45,-72,954,790),36317=>array(31,-61,947,795),36318=>array(48,-62,939,817),36319=>array(46,-71,964,787),36320=>array(52,-73,975,823),36321=>array(47,-59,955,822),36322=>array(42,-63,913,836),36323=>array(40,-63,953,829),36324=>array(50,-65,983,846),36325=>array(46,-62,964,791),36326=>array(50,-70,977,829),36327=>array(43,-20,968,793),36328=>array(39,-64,962,841),36329=>array(44,-74,967,823),36330=>array(48,-65,965,852),36331=>array(29,-64,947,778),36332=>array(54,-23,958,829),36333=>array(40,-69,972,841),36334=>array(51,-33,956,779),36335=>array(29,-67,968,838),36336=>array(50,-73,954,829),36337=>array(40,-52,950,841),36338=>array(44,-54,963,858),36339=>array(41,-70,945,825),36340=>array(37,-68,952,789),36341=>array(40,-69,959,827),36342=>array(50,-49,982,788),36343=>array(52,-71,938,815),36344=>array(35,-64,929,808),36345=>array(42,-51,935,804),36346=>array(54,-64,979,794),36347=>array(43,-66,948,835),36348=>array(48,-55,916,800),36349=>array(48,-32,969,791),36350=>array(46,-72,974,827),36351=>array(51,-70,966,821),36352=>array(52,-73,970,781),36353=>array(46,-28,945,785),36354=>array(51,-70,961,783),36355=>array(51,-69,909,824),36356=>array(45,-64,955,830),36357=>array(44,-66,970,835),36358=>array(48,-72,970,827),36359=>array(51,-64,953,825),36360=>array(45,-54,960,841),36361=>array(58,-68,981,837),36362=>array(50,-64,897,800),36363=>array(80,-61,915,810),36364=>array(37,-61,917,828),36365=>array(47,-68,948,823),36366=>array(36,-54,969,797),36367=>array(53,-62,980,843),36368=>array(30,-55,945,841),36369=>array(55,-75,967,824),36370=>array(44,-72,965,829),36371=>array(45,-68,959,831),36372=>array(54,-62,965,838),36373=>array(44,-73,972,827),36374=>array(47,-61,972,837),36375=>array(52,-36,976,835),36376=>array(49,-63,916,837),36377=>array(51,-73,981,782),36378=>array(47,-68,984,836),36379=>array(44,-26,954,826),36380=>array(56,-71,982,823),36381=>array(43,-67,972,787),36382=>array(46,-69,952,785),36383=>array(28,-67,886,836),36384=>array(39,-76,966,843),36385=>array(48,-37,986,846),36386=>array(46,-58,907,794),36387=>array(48,-65,953,849),36388=>array(48,-69,954,840),36389=>array(38,-70,950,833),36390=>array(42,-62,965,844),36391=>array(41,-69,979,830),36392=>array(59,-65,975,837),36393=>array(48,-62,976,837),36394=>array(44,-57,969,834),36395=>array(45,-35,957,832),36396=>array(42,-68,921,823),36397=>array(53,-59,970,836),36398=>array(43,-65,949,845),36399=>array(38,-65,919,798),36400=>array(43,-64,962,832),36401=>array(49,-62,982,856),36402=>array(47,-67,950,840),36403=>array(39,-68,978,840),36404=>array(41,-56,918,801),36405=>array(45,-27,958,839),36406=>array(52,-55,987,803),36407=>array(72,-69,959,835),36408=>array(35,-26,953,824),36409=>array(53,-64,956,835),36410=>array(43,-73,946,805),36411=>array(72,-57,916,800),36412=>array(33,-79,963,778),36413=>array(46,-62,942,836),36414=>array(41,-65,932,787),36415=>array(32,-75,983,822),36416=>array(49,-65,975,830),36417=>array(48,-65,944,843),36418=>array(45,-61,984,799),36419=>array(72,-65,948,836),36420=>array(37,-67,946,826),36421=>array(39,-32,967,823),36422=>array(38,-65,954,800),36423=>array(34,-62,984,842),36424=>array(53,-62,937,835),36425=>array(30,-26,937,841),36426=>array(20,-61,967,842),36427=>array(49,-61,903,799),36428=>array(55,-64,982,866),36429=>array(34,-52,968,797),36430=>array(50,-79,961,833),36431=>array(34,-72,968,830),36432=>array(51,-62,986,846),36433=>array(35,-71,937,780),36434=>array(29,-66,914,818),36435=>array(47,-62,920,841),36436=>array(39,-54,972,839),36437=>array(34,-68,949,805),36438=>array(48,-70,965,834),36439=>array(49,-66,962,837),36440=>array(27,-61,966,802),36441=>array(55,-60,981,842),36442=>array(61,-37,960,816),36443=>array(50,-74,951,821),36444=>array(36,-52,915,857),36445=>array(43,-67,971,831),36446=>array(40,-82,959,828),36447=>array(39,-55,955,849),36448=>array(38,-60,958,835),36449=>array(36,-52,952,858),36450=>array(39,-52,948,855),36451=>array(47,-65,954,835),36452=>array(43,-65,979,831),36453=>array(45,-72,969,823),36454=>array(46,-74,905,836),36455=>array(59,-74,962,821),36456=>array(64,-65,971,837),36457=>array(33,-65,972,839),36458=>array(52,-81,965,825),36459=>array(29,-67,933,788),36460=>array(33,-26,969,836),36461=>array(44,-64,912,846),36462=>array(37,-43,974,813),36463=>array(31,-67,971,833),36464=>array(30,-66,939,802),36465=>array(59,-32,971,839),36466=>array(44,-72,970,834),36467=>array(46,-67,979,832),36468=>array(25,-68,956,828),36469=>array(33,-65,965,845),36470=>array(25,-70,965,788),36471=>array(37,-58,963,800),36472=>array(49,-70,974,827),36473=>array(44,-63,979,858),36474=>array(46,-63,962,842),36475=>array(34,-59,961,857),36476=>array(28,-64,963,832),36477=>array(39,-62,975,859),36478=>array(39,-73,973,837),36479=>array(39,-60,916,843),36480=>array(28,-68,951,802),36481=>array(31,-61,965,798),36482=>array(46,-68,977,836),36483=>array(36,-64,965,849),36484=>array(39,-57,960,843),36485=>array(57,-62,924,786),36486=>array(23,-67,976,837),36487=>array(36,-62,953,842),36488=>array(33,-72,982,841),36489=>array(44,-67,968,833),36490=>array(43,-58,958,839),36491=>array(32,-69,964,849),36492=>array(62,-72,961,833),36493=>array(35,-70,956,813),36494=>array(61,-71,958,783),36495=>array(50,-71,918,820),36496=>array(41,-63,974,852),36497=>array(32,-67,956,821),36498=>array(45,-52,961,856),36499=>array(39,-68,974,837),36500=>array(25,-67,941,848),36501=>array(36,-63,960,853),36502=>array(59,-68,915,835),36503=>array(36,-67,979,839),36504=>array(33,-65,967,838),36505=>array(37,-50,901,804),36506=>array(36,-66,973,815),36507=>array(36,-67,979,839),36508=>array(34,-75,927,824),36509=>array(37,-50,917,804),36510=>array(37,-65,985,847),36511=>array(39,-65,976,850),36512=>array(43,-67,960,829),36513=>array(30,-69,955,804),36514=>array(37,-50,910,805),36515=>array(50,-65,967,787),36516=>array(42,-64,956,831),36517=>array(33,-65,963,849),36518=>array(40,-75,975,829),36519=>array(42,-73,966,791),36520=>array(39,-68,956,841),36521=>array(41,-61,980,809),36522=>array(49,-59,964,837),36523=>array(74,-62,924,853),36524=>array(55,-60,904,839),36525=>array(40,-66,969,848),36526=>array(57,-61,968,846),36527=>array(47,-65,945,844),36528=>array(27,-53,969,851),36529=>array(56,-62,965,848),36530=>array(54,-62,976,843),36531=>array(53,-69,917,861),36532=>array(47,-68,972,844),36533=>array(49,-68,973,830),36534=>array(41,-68,965,830),36535=>array(41,-67,970,841),36536=>array(57,-68,956,830),36537=>array(53,-68,946,847),36538=>array(48,-62,936,851),36539=>array(45,-68,948,845),36540=>array(49,-68,975,830),36541=>array(35,-58,958,850),36542=>array(34,-62,969,843),36543=>array(45,-63,966,857),36544=>array(42,-60,964,853),36545=>array(45,-68,962,839),36546=>array(33,-70,969,829),36547=>array(53,-68,968,830),36548=>array(45,-68,977,845),36549=>array(26,-73,977,841),36550=>array(32,-58,946,848),36551=>array(53,-57,968,846),36552=>array(38,-61,948,848),36553=>array(38,-78,934,836),36554=>array(63,-71,935,832),36555=>array(54,-70,948,830),36556=>array(53,-74,957,831),36557=>array(91,-68,923,784),36558=>array(61,-67,913,819),36559=>array(52,-69,958,829),36560=>array(41,-69,958,827),36561=>array(61,-72,978,827),36562=>array(55,-68,951,832),36563=>array(64,-76,963,824),36564=>array(68,-67,917,830),36565=>array(65,-69,921,830),36566=>array(62,-69,961,827),36567=>array(63,-73,962,830),36568=>array(61,-65,957,835),36569=>array(50,-70,945,838),36570=>array(65,-69,977,838),36571=>array(60,-66,954,830),36572=>array(66,-70,918,827),36573=>array(46,-68,966,832),36574=>array(60,-70,961,836),36575=>array(62,-67,965,841),36576=>array(59,-64,949,827),36577=>array(61,-76,968,834),36578=>array(53,-69,964,827),36579=>array(61,-55,913,834),36580=>array(65,-70,950,827),36581=>array(60,-65,915,831),36582=>array(59,-69,956,832),36583=>array(57,-72,960,833),36584=>array(54,-69,965,845),36585=>array(68,-70,954,838),36586=>array(84,-75,924,835),36587=>array(51,-67,969,844),36588=>array(46,-64,966,855),36589=>array(43,-71,945,827),36590=>array(61,-80,968,829),36591=>array(57,-72,950,827),36592=>array(62,-50,940,835),36593=>array(58,-60,975,834),36594=>array(72,-76,929,833),36595=>array(72,-64,977,849),36596=>array(72,-64,962,839),36597=>array(63,-69,952,835),36598=>array(76,-67,970,829),36599=>array(57,-52,959,839),36600=>array(58,-76,913,831),36601=>array(57,-67,962,826),36602=>array(69,-67,918,832),36603=>array(54,-67,950,829),36604=>array(56,-67,979,829),36605=>array(52,-64,976,833),36606=>array(60,-67,968,836),36607=>array(55,-54,949,852),36608=>array(53,-56,948,836),36609=>array(56,-80,977,826),36610=>array(44,-69,961,829),36611=>array(59,-67,965,829),36612=>array(59,-69,970,829),36613=>array(47,-65,967,838),36614=>array(57,-75,960,836),36615=>array(62,-71,966,820),36616=>array(61,-63,959,838),36617=>array(63,-62,956,836),36618=>array(60,-64,954,831),36619=>array(28,-64,980,840),36620=>array(52,-72,939,831),36621=>array(58,-70,967,824),36622=>array(60,-69,937,826),36623=>array(65,-68,966,825),36624=>array(66,-70,973,824),36625=>array(60,-71,951,827),36626=>array(50,-67,967,830),36627=>array(58,-67,966,827),36628=>array(55,-73,948,833),36629=>array(57,-70,950,832),36630=>array(57,-70,900,822),36631=>array(54,-65,962,827),36632=>array(47,-57,966,835),36633=>array(46,-68,966,837),36634=>array(62,-70,971,834),36635=>array(52,-72,939,831),36636=>array(63,-71,940,835),36637=>array(41,-63,953,832),36638=>array(57,-65,924,831),36639=>array(60,-65,971,833),36640=>array(62,-71,978,823),36641=>array(77,-68,912,841),36642=>array(77,-65,956,849),36643=>array(62,-76,903,823),36644=>array(61,-70,953,832),36645=>array(54,-70,955,829),36646=>array(52,-62,954,831),36647=>array(57,-65,949,859),36648=>array(62,-65,930,846),36649=>array(55,-74,951,838),36650=>array(52,-71,971,868),36651=>array(52,-65,967,831),36652=>array(54,-57,970,849),36653=>array(65,-72,975,820),36654=>array(60,-68,977,826),36655=>array(62,-70,951,831),36656=>array(77,-65,959,831),36657=>array(47,-68,979,835),36658=>array(72,-64,957,835),36659=>array(47,-67,964,832),36660=>array(50,-72,951,833),36661=>array(60,-53,923,838),36662=>array(56,-66,947,852),36663=>array(65,-70,919,834),36664=>array(45,-70,960,849),36665=>array(60,-68,974,836),36666=>array(63,-71,940,833),36667=>array(46,-74,941,827),36668=>array(59,-70,959,823),36669=>array(42,-66,967,831),36670=>array(60,-71,964,831),36671=>array(66,-55,948,839),36672=>array(59,-70,959,823),36673=>array(52,-65,944,831),36674=>array(48,-68,968,836),36675=>array(66,-69,973,833),36676=>array(53,-62,949,837),36677=>array(50,-70,967,833),36678=>array(53,-68,958,835),36679=>array(58,-64,968,829),36680=>array(58,-70,974,828),36681=>array(56,-71,947,828),36682=>array(44,-72,943,837),36683=>array(55,-72,974,825),36684=>array(46,-66,946,831),36685=>array(42,-68,972,837),36686=>array(51,-61,964,841),36687=>array(63,-71,958,825),36688=>array(53,-69,969,826),36689=>array(55,-54,968,844),36690=>array(65,-72,959,829),36691=>array(60,-67,978,829),36692=>array(48,-67,954,833),36693=>array(61,-64,948,830),36694=>array(58,-68,962,829),36695=>array(50,-66,961,830),36696=>array(56,-70,984,831),36697=>array(50,-74,974,853),36698=>array(60,-62,971,828),36699=>array(69,-71,964,826),36700=>array(42,-65,970,831),36701=>array(46,-69,977,836),36702=>array(66,-73,958,829),36703=>array(63,-62,960,836),36704=>array(71,-68,929,824),36705=>array(32,-65,961,844),36706=>array(50,-65,970,831),36707=>array(45,-53,969,836),36708=>array(52,-67,956,832),36709=>array(55,-65,941,837),36710=>array(42,-61,956,833),36711=>array(69,-73,922,823),36712=>array(67,-78,940,828),36713=>array(63,-70,934,823),36714=>array(68,-70,977,838),36715=>array(63,-69,901,824),36716=>array(53,-66,935,826),36717=>array(52,-74,937,818),36718=>array(31,-55,951,835),36719=>array(73,-69,949,838),36720=>array(28,-57,939,837),36721=>array(52,-76,929,823),36722=>array(52,-74,933,818),36723=>array(44,-73,929,819),36724=>array(59,-74,903,821),36725=>array(63,-69,946,824),36726=>array(52,-74,962,826),36727=>array(25,-65,920,828),36728=>array(52,-74,952,840),36729=>array(41,-65,947,823),36730=>array(63,-68,901,824),36731=>array(51,-48,938,836),36732=>array(37,-75,936,833),36733=>array(58,-69,939,824),36734=>array(52,-74,930,818),36735=>array(31,-66,948,832),36736=>array(63,-68,960,838),36737=>array(44,-60,940,831),36738=>array(52,-67,950,836),36739=>array(54,-69,948,835),36740=>array(45,-69,937,827),36741=>array(52,-73,931,831),36742=>array(35,-57,925,833),36743=>array(43,-75,950,816),36744=>array(68,-70,932,821),36745=>array(42,-57,948,833),36746=>array(52,-74,942,818),36747=>array(63,-67,905,827),36748=>array(63,-68,966,849),36749=>array(43,-65,961,819),36750=>array(55,-73,922,833),36751=>array(55,-69,944,838),36752=>array(43,-74,923,818),36753=>array(56,-69,936,821),36754=>array(46,-69,959,821),36755=>array(61,-73,943,846),36756=>array(40,-65,914,829),36757=>array(41,-78,949,819),36758=>array(52,-73,931,838),36759=>array(52,-74,948,818),36760=>array(50,-65,951,842),36761=>array(46,-65,938,839),36762=>array(52,-68,947,831),36763=>array(77,-68,923,828),36764=>array(59,-62,945,837),36765=>array(29,-65,948,840),36766=>array(52,-55,953,832),36767=>array(36,-55,954,847),36768=>array(59,-67,945,839),36769=>array(33,-67,954,853),36770=>array(21,-58,954,853),36771=>array(33,-67,967,835),36772=>array(39,-82,974,853),36773=>array(42,-57,960,840),36774=>array(58,-79,932,829),36775=>array(32,-68,945,837),36776=>array(37,-71,949,831),36777=>array(53,-64,933,843),36778=>array(59,-51,947,857),36779=>array(40,-66,915,838),36780=>array(40,-79,945,838),36781=>array(46,-63,962,846),36782=>array(42,-81,959,834),36783=>array(61,-77,938,829),36784=>array(57,-63,963,785),36785=>array(33,-61,955,789),36786=>array(38,-78,963,834),36787=>array(44,-74,956,836),36788=>array(57,-77,968,785),36789=>array(46,-74,960,827),36790=>array(38,-57,938,814),36791=>array(50,-17,957,811),36792=>array(38,-57,938,814),36793=>array(33,-24,939,823),36794=>array(33,-24,939,804),36795=>array(50,-34,955,832),36796=>array(35,-54,965,820),36797=>array(44,-45,944,793),36798=>array(31,-35,940,825),36799=>array(44,-45,944,835),36800=>array(31,-53,952,817),36801=>array(50,-17,957,828),36802=>array(44,-45,944,793),36803=>array(31,-69,952,793),36804=>array(44,-45,944,832),36805=>array(39,-53,960,817),36806=>array(27,-56,957,841),36807=>array(36,-51,933,827),36808=>array(32,-41,938,798),36809=>array(55,-61,979,815),36810=>array(56,-53,940,781),36811=>array(43,-53,972,835),36812=>array(56,-53,940,782),36813=>array(33,-57,962,841),36814=>array(31,-53,952,833),36815=>array(46,-47,952,827),36816=>array(32,-46,944,800),36817=>array(31,-53,952,828),36818=>array(48,-63,970,829),36819=>array(45,-69,966,832),36820=>array(42,-52,960,822),36821=>array(36,-55,968,852),36822=>array(47,-66,979,827),36823=>array(66,-62,988,817),36824=>array(32,-33,927,812),36825=>array(36,-47,942,815),36826=>array(36,-47,942,801),36827=>array(24,-37,935,817),36828=>array(38,-49,941,809),36829=>array(41,-49,938,816),36830=>array(34,-44,944,810),36831=>array(41,-26,938,806),36832=>array(55,-64,973,844),36833=>array(63,-77,974,833),36834=>array(36,-47,942,808),36835=>array(43,-65,967,829),36836=>array(53,-62,968,842),36837=>array(36,-47,942,808),36838=>array(44,-45,944,827),36839=>array(56,-53,940,830),36840=>array(51,-71,975,841),36841=>array(43,-45,946,829),36842=>array(31,-53,952,831),36843=>array(40,-54,961,834),36844=>array(56,-53,940,820),36845=>array(31,-53,952,817),36846=>array(72,-69,979,840),36847=>array(36,-47,952,803),36848=>array(36,-44,959,828),36849=>array(36,-38,959,837),36850=>array(37,-56,951,815),36851=>array(41,-50,939,793),36852=>array(36,-47,965,813),36853=>array(49,-73,982,835),36854=>array(39,-76,975,837),36855=>array(31,-53,952,831),36856=>array(36,-47,965,840),36857=>array(36,-47,965,831),36858=>array(36,-47,965,813),36859=>array(31,-58,960,857),36860=>array(46,-74,972,827),36861=>array(31,-53,952,842),36862=>array(39,-70,974,832),36863=>array(46,-70,978,849),36864=>array(31,-53,952,818),36865=>array(31,-53,952,859),36866=>array(42,-65,935,859),36867=>array(31,-53,952,828),36868=>array(39,-65,982,851),36869=>array(36,-47,965,837),36870=>array(31,-53,952,838),36871=>array(31,-53,952,833),36872=>array(42,-65,948,858),36873=>array(28,-43,942,807),36874=>array(32,-48,940,807),36875=>array(46,-47,952,841),36876=>array(46,-78,968,826),36877=>array(51,-47,950,829),36878=>array(41,-53,962,801),36879=>array(33,-52,954,831),36880=>array(22,-53,953,817),36881=>array(36,-47,965,832),36882=>array(28,-30,930,839),36883=>array(37,-56,951,830),36884=>array(30,-55,951,849),36885=>array(36,-47,965,813),36886=>array(31,-47,960,830),36887=>array(39,-56,953,815),36888=>array(41,-56,959,838),36889=>array(44,-45,944,816),36890=>array(31,-53,952,817),36891=>array(50,-59,963,821),36892=>array(46,-73,980,823),36893=>array(24,-53,945,829),36894=>array(41,-47,970,813),36895=>array(31,-53,952,836),36896=>array(31,-42,946,830),36897=>array(36,-47,965,839),36898=>array(44,-45,944,839),36899=>array(37,-56,951,830),36900=>array(39,-71,980,822),36901=>array(37,-56,976,799),36902=>array(33,-46,939,787),36903=>array(50,-46,944,809),36904=>array(37,-56,951,836),36905=>array(49,-56,963,847),36906=>array(37,-56,951,824),36907=>array(37,-44,951,811),36908=>array(37,-48,951,836),36909=>array(45,-78,971,844),36910=>array(31,-53,952,829),36911=>array(43,-66,981,847),36912=>array(39,-66,963,834),36913=>array(37,-56,951,799),36914=>array(37,-60,951,831),36915=>array(37,-48,951,821),36916=>array(51,-75,976,829),36917=>array(36,-47,965,837),36918=>array(46,-47,952,833),36919=>array(45,-64,959,791),36920=>array(36,-54,957,841),36921=>array(26,-53,947,834),36922=>array(37,-56,951,835),36923=>array(39,-57,942,792),36924=>array(44,-45,944,799),36925=>array(43,-66,961,826),36926=>array(11,-73,952,836),36927=>array(43,-68,966,818),36928=>array(49,-56,963,845),36929=>array(31,-74,952,837),36930=>array(31,-53,952,848),36931=>array(49,-56,963,833),36932=>array(46,-68,960,835),36933=>array(37,-56,951,807),36934=>array(49,-64,963,845),36935=>array(36,-51,964,814),36936=>array(36,-55,964,812),36937=>array(31,-63,956,831),36938=>array(37,-56,960,842),36939=>array(37,-56,951,799),36940=>array(36,-51,964,826),36941=>array(33,-45,959,815),36942=>array(37,-56,951,799),36943=>array(31,-53,952,801),36944=>array(31,-53,952,801),36945=>array(31,-53,952,843),36946=>array(37,-56,950,821),36947=>array(31,-53,952,847),36948=>array(37,-56,951,834),36949=>array(37,-56,951,844),36950=>array(47,-56,955,810),36951=>array(49,-59,953,820),36952=>array(52,-56,960,832),36953=>array(37,-56,951,837),36954=>array(44,-69,963,841),36955=>array(36,-67,975,834),36956=>array(42,-41,961,823),36957=>array(37,-40,955,831),36958=>array(47,-56,955,828),36959=>array(37,-56,951,799),36960=>array(37,-44,953,835),36961=>array(37,-56,951,837),36962=>array(40,-65,961,829),36963=>array(25,-59,946,832),36964=>array(25,-59,946,817),36965=>array(37,-56,951,834),36966=>array(37,-56,951,807),36967=>array(84,-56,977,838),36968=>array(47,-56,955,834),36969=>array(37,-56,951,839),36970=>array(37,-56,952,835),36971=>array(49,-70,982,827),36972=>array(37,-64,977,831),36973=>array(31,-53,952,830),36974=>array(36,-47,939,835),36975=>array(50,-59,955,795),36976=>array(40,-54,976,843),36977=>array(37,-56,972,831),36978=>array(47,-56,961,815),36979=>array(56,-72,981,832),36980=>array(40,-72,973,836),36981=>array(35,-49,958,841),36982=>array(47,-56,965,838),36983=>array(37,-56,956,807),36984=>array(37,-56,951,799),36985=>array(38,-52,975,826),36986=>array(37,-56,951,835),36987=>array(41,-73,976,820),36988=>array(37,-56,968,838),36989=>array(47,-56,961,835),36990=>array(45,-66,972,840),36991=>array(31,-53,952,824),36992=>array(47,-51,961,837),36993=>array(47,-51,961,829),36994=>array(47,-56,961,841),36995=>array(52,-56,966,841),36996=>array(37,-56,951,808),36997=>array(44,-70,972,846),36998=>array(39,-69,980,826),36999=>array(36,-47,971,828),37000=>array(18,-65,964,846),37001=>array(47,-51,961,837),37002=>array(47,-51,961,838),37003=>array(40,-65,971,848),37004=>array(45,-56,961,825),37005=>array(38,-72,983,848),37006=>array(37,-68,971,820),37007=>array(52,-51,966,820),37008=>array(42,-65,973,813),37009=>array(124,-30,927,784),37010=>array(84,-70,942,782),37011=>array(30,-60,912,790),37012=>array(72,-64,934,788),37013=>array(75,-24,931,841),37014=>array(114,-60,912,819),37015=>array(69,-69,939,787),37016=>array(60,-63,938,794),37017=>array(49,-69,958,799),37018=>array(85,-69,939,818),37019=>array(73,-69,939,781),37020=>array(57,-69,939,844),37021=>array(38,-65,916,842),37022=>array(55,-66,956,827),37023=>array(44,-60,947,838),37024=>array(45,-71,953,786),37025=>array(68,-71,959,841),37026=>array(51,-70,945,785),37027=>array(57,-70,940,786),37028=>array(41,-69,955,816),37029=>array(56,-68,950,832),37030=>array(76,-75,937,830),37031=>array(52,-69,945,785),37032=>array(57,-65,938,833),37033=>array(73,-91,911,814),37034=>array(48,-65,941,785),37035=>array(36,-75,959,830),37036=>array(47,-61,912,837),37037=>array(61,-72,943,834),37038=>array(89,-72,911,823),37039=>array(36,-67,919,831),37040=>array(75,-69,954,833),37041=>array(55,-63,927,828),37042=>array(46,-71,956,827),37043=>array(56,-68,957,784),37044=>array(51,-59,947,797),37045=>array(51,-68,938,786),37046=>array(33,-74,939,811),37047=>array(73,-74,941,780),37048=>array(63,-70,939,828),37049=>array(39,-68,917,809),37050=>array(40,-67,923,804),37051=>array(44,-60,909,829),37052=>array(93,-58,942,788),37053=>array(56,-68,943,824),37054=>array(41,-54,954,840),37055=>array(62,-68,943,827),37056=>array(32,-65,942,839),37057=>array(48,-68,942,840),37058=>array(53,-74,958,835),37059=>array(57,-72,959,829),37060=>array(31,-64,945,850),37061=>array(61,-69,957,783),37062=>array(82,-68,963,824),37063=>array(37,-63,961,847),37064=>array(46,-53,947,860),37065=>array(51,-70,945,785),37066=>array(54,-64,936,822),37067=>array(133,-67,930,833),37068=>array(49,-48,955,826),37069=>array(50,-76,910,845),37070=>array(51,-65,930,832),37071=>array(39,-70,912,820),37072=>array(26,-64,915,835),37073=>array(35,-59,921,832),37074=>array(102,-31,968,826),37075=>array(63,-70,930,780),37076=>array(52,-71,958,813),37077=>array(31,-52,958,852),37078=>array(51,-65,949,788),37079=>array(47,-69,968,837),37080=>array(121,-66,931,787),37081=>array(62,-76,956,826),37082=>array(66,-70,956,781),37083=>array(38,-68,939,834),37084=>array(80,-74,966,827),37085=>array(59,-62,947,836),37086=>array(77,-65,910,833),37087=>array(19,-74,942,829),37088=>array(48,-71,950,777),37089=>array(41,-68,945,787),37090=>array(46,-68,955,785),37091=>array(59,-70,944,823),37092=>array(40,-67,943,834),37093=>array(61,-68,954,786),37094=>array(62,-64,930,786),37095=>array(35,-69,916,783),37096=>array(59,-67,943,830),37097=>array(47,-70,952,836),37098=>array(52,-71,956,827),37099=>array(63,-69,967,847),37100=>array(73,-71,949,829),37101=>array(52,-58,941,837),37102=>array(33,-69,941,786),37103=>array(46,-70,962,831),37104=>array(46,-73,947,787),37105=>array(59,-69,938,827),37106=>array(46,-70,951,834),37107=>array(41,-70,949,828),37108=>array(49,-69,963,825),37109=>array(52,-69,942,831),37110=>array(59,-65,965,840),37111=>array(38,-70,947,833),37112=>array(43,-58,914,831),37113=>array(43,-70,954,786),37114=>array(36,-66,967,830),37115=>array(86,-69,960,783),37116=>array(60,-68,952,841),37117=>array(50,-67,949,835),37118=>array(80,-69,963,786),37119=>array(42,-69,966,785),37120=>array(44,-55,947,838),37121=>array(37,-74,951,826),37122=>array(62,-68,948,785),37123=>array(29,-68,954,843),37124=>array(57,-68,962,785),37125=>array(60,-53,947,848),37126=>array(71,-69,963,782),37127=>array(34,-70,959,838),37128=>array(33,-70,953,835),37129=>array(53,-70,938,839),37130=>array(53,-70,938,830),37131=>array(44,-69,951,826),37132=>array(23,-69,965,848),37133=>array(44,-75,949,783),37134=>array(25,-62,953,840),37135=>array(46,-71,948,802),37136=>array(62,-69,955,842),37137=>array(68,-68,949,785),37138=>array(53,-72,949,842),37139=>array(41,-66,949,841),37140=>array(37,-66,945,844),37141=>array(41,-70,938,831),37142=>array(45,-77,968,783),37143=>array(63,-67,951,837),37144=>array(40,-69,957,843),37145=>array(42,-70,933,783),37146=>array(47,-72,935,825),37147=>array(45,-69,953,835),37148=>array(51,-64,953,850),37149=>array(42,-68,940,785),37150=>array(52,-65,948,830),37151=>array(57,-70,943,824),37152=>array(58,-65,954,795),37153=>array(27,-69,945,838),37154=>array(37,-68,966,784),37155=>array(65,-69,940,838),37156=>array(47,-68,947,803),37157=>array(37,-66,946,844),37158=>array(24,-70,950,830),37159=>array(46,-65,951,832),37160=>array(101,-39,946,829),37161=>array(49,-73,950,781),37162=>array(49,-80,955,833),37163=>array(95,-55,942,853),37164=>array(48,-78,965,836),37165=>array(57,-77,956,839),37166=>array(46,-73,952,836),37167=>array(66,-67,947,849),37168=>array(62,-77,949,833),37169=>array(35,-70,953,836),37170=>array(49,-66,951,787),37171=>array(104,-67,949,787),37172=>array(40,-69,974,824),37173=>array(41,-68,960,797),37174=>array(18,-74,962,847),37175=>array(48,-71,943,830),37176=>array(59,-67,941,834),37177=>array(43,-70,960,793),37178=>array(34,-70,949,845),37179=>array(63,-75,958,829),37180=>array(25,-75,958,827),37181=>array(22,-75,978,858),37182=>array(48,-65,954,789),37183=>array(59,-67,958,832),37184=>array(42,-73,959,829),37185=>array(40,-79,954,836),37186=>array(44,-50,960,801),37187=>array(85,-68,956,796),37188=>array(40,-69,958,825),37189=>array(45,-65,956,837),37190=>array(47,-68,947,827),37191=>array(52,-62,962,844),37192=>array(30,-67,951,805),37193=>array(54,-63,946,779),37194=>array(59,-54,953,788),37195=>array(60,-67,950,840),37196=>array(64,-63,915,844),37197=>array(63,-67,945,790),37198=>array(62,-65,954,832),37199=>array(60,-54,961,825),37200=>array(59,-60,950,790),37201=>array(56,-45,966,798),37202=>array(47,-62,943,790),37203=>array(46,-72,966,849),37204=>array(40,-68,979,837),37205=>array(59,-54,957,809),37206=>array(66,-61,973,836),37207=>array(55,-53,916,808),37208=>array(56,-75,984,791),37209=>array(56,-72,955,826),37210=>array(55,-53,962,790),37211=>array(35,-68,969,787),37212=>array(45,-68,980,842),37213=>array(52,-61,943,782),37214=>array(54,-70,968,837),37215=>array(56,-70,943,816),37216=>array(55,-57,956,790),37217=>array(55,-53,959,836),37218=>array(50,-64,951,835),37219=>array(53,-65,955,830),37220=>array(55,-58,951,836),37221=>array(63,-65,977,828),37222=>array(46,-64,972,820),37223=>array(66,-61,965,849),37224=>array(69,-70,961,833),37225=>array(76,-65,919,839),37226=>array(51,-67,967,840),37227=>array(30,-68,958,820),37228=>array(66,-65,913,835),37229=>array(45,-68,956,834),37230=>array(55,-64,932,790),37231=>array(55,-71,953,816),37232=>array(53,-70,974,836),37233=>array(65,-62,922,837),37234=>array(50,-53,946,790),37235=>array(60,-68,960,825),37236=>array(55,-63,968,841),37237=>array(61,-71,949,830),37238=>array(59,-71,955,840),37239=>array(59,-61,924,829),37240=>array(40,-73,967,849),37241=>array(55,-64,952,830),37242=>array(55,-66,960,828),37243=>array(60,-68,973,835),37244=>array(25,-68,977,833),37245=>array(49,-64,920,771),37246=>array(50,-45,913,775),37247=>array(43,-60,939,841),37248=>array(55,-68,955,822),37249=>array(55,-73,963,831),37250=>array(58,-70,975,820),37251=>array(55,-55,971,831),37252=>array(55,-60,929,826),37253=>array(55,-67,952,838),37254=>array(59,-68,964,832),37255=>array(54,-64,960,831),37256=>array(55,-69,978,839),37257=>array(56,-71,951,835),37258=>array(51,-63,967,793),37259=>array(59,-72,949,818),37260=>array(58,-54,961,789),37261=>array(53,-65,966,787),37262=>array(49,-69,955,834),37263=>array(55,-66,951,825),37264=>array(68,-66,919,828),37265=>array(55,-68,966,790),37266=>array(66,-38,962,798),37267=>array(55,-53,963,830),37268=>array(48,-70,951,844),37269=>array(35,-68,949,845),37270=>array(40,-68,963,787),37271=>array(53,-64,968,834),37272=>array(45,-68,953,822),37273=>array(55,-69,964,824),37274=>array(47,-73,961,821),37275=>array(55,-53,968,821),37276=>array(59,-65,974,847),37277=>array(55,-53,952,829),37278=>array(55,-53,958,790),37279=>array(86,-63,921,831),37280=>array(55,-53,967,828),37281=>array(56,-69,948,838),37282=>array(51,-52,941,840),37283=>array(50,-67,954,844),37284=>array(53,-74,947,845),37285=>array(55,-67,963,799),37286=>array(60,-61,967,848),37287=>array(48,-53,957,790),37288=>array(55,-69,954,827),37289=>array(54,-53,961,848),37290=>array(48,-69,975,790),37291=>array(51,-71,945,784),37292=>array(63,-78,955,853),37293=>array(57,-72,981,823),37294=>array(54,-66,952,833),37295=>array(47,-58,959,836),37296=>array(60,-48,960,811),37297=>array(53,-62,977,846),37298=>array(46,-74,972,825),37299=>array(66,-70,962,784),37300=>array(51,-57,952,829),37301=>array(43,-65,970,828),37302=>array(51,-66,947,847),37303=>array(51,-62,965,838),37304=>array(51,-79,979,837),37305=>array(52,-55,944,803),37306=>array(53,-66,959,832),37307=>array(62,-64,961,835),37308=>array(49,-67,963,826),37309=>array(53,-48,939,810),37310=>array(47,-65,961,838),37311=>array(55,-66,961,837),37312=>array(62,-72,982,842),37313=>array(52,-75,964,833),37314=>array(59,-64,962,848),37315=>array(54,-72,964,790),37316=>array(55,-63,961,837),37317=>array(50,-65,981,795),37318=>array(50,-70,966,824),37319=>array(52,-68,956,829),37320=>array(42,-66,978,827),37321=>array(45,-66,907,842),37322=>array(47,-61,934,806),37323=>array(36,-70,951,821),37324=>array(52,-19,948,796),37325=>array(69,-34,947,831),37326=>array(64,-64,931,784),37327=>array(53,-30,947,789),37328=>array(29,-56,953,844),37329=>array(54,-21,960,856),37330=>array(39,-26,547,829),37331=>array(39,-30,959,829),37332=>array(35,-32,954,824),37333=>array(48,-64,944,828),37334=>array(39,-73,934,829),37335=>array(59,-62,909,831),37336=>array(45,-52,956,843),37337=>array(49,-65,958,833),37338=>array(42,-72,967,845),37339=>array(39,-66,927,834),37340=>array(66,-25,948,833),37341=>array(44,-67,950,831),37342=>array(39,-57,958,829),37343=>array(39,-71,989,829),37344=>array(39,-71,967,829),37345=>array(86,-21,916,833),37346=>array(58,-75,940,840),37347=>array(55,-61,921,841),37348=>array(48,-65,957,832),37349=>array(39,-72,982,829),37350=>array(54,-50,906,813),37351=>array(48,-62,896,837),37352=>array(42,-72,957,829),37353=>array(39,-67,959,831),37354=>array(45,-71,956,829),37355=>array(36,-69,955,826),37356=>array(39,-71,958,823),37357=>array(36,-18,955,824),37358=>array(42,-74,953,834),37359=>array(39,-26,930,833),37360=>array(39,-49,916,829),37361=>array(36,-60,963,835),37362=>array(48,-38,958,829),37363=>array(29,-29,961,827),37364=>array(39,-67,958,834),37365=>array(42,-67,965,830),37366=>array(39,-26,963,841),37367=>array(41,-17,953,827),37368=>array(48,-69,920,831),37369=>array(41,-68,950,830),37370=>array(39,-67,942,829),37371=>array(42,-56,964,843),37372=>array(37,-60,969,823),37373=>array(40,-64,967,834),37374=>array(54,-59,967,827),37375=>array(42,-61,959,847),37376=>array(36,-35,954,830),37377=>array(46,-64,948,835),37378=>array(42,-63,966,839),37379=>array(35,-72,957,834),37380=>array(49,-64,964,831),37381=>array(35,-73,894,841),37382=>array(41,-68,972,836),37383=>array(37,-58,966,840),37384=>array(34,-64,959,827),37385=>array(56,-68,914,823),37386=>array(44,-26,972,836),37387=>array(37,-62,954,840),37388=>array(46,-73,985,837),37389=>array(37,-52,965,839),37390=>array(61,-57,920,841),37391=>array(35,-72,898,823),37392=>array(40,-70,977,840),37393=>array(41,-62,971,831),37394=>array(40,-68,979,840),37395=>array(37,-22,958,840),37396=>array(35,-60,973,829),37397=>array(41,-30,951,833),37398=>array(32,-70,976,832),37399=>array(38,-60,966,838),37400=>array(44,-68,973,841),37401=>array(40,-70,990,834),37402=>array(38,-69,962,831),37403=>array(37,-52,949,840),37404=>array(38,-63,964,836),37405=>array(44,-71,954,840),37406=>array(65,-57,923,839),37407=>array(51,-66,896,840),37408=>array(37,-65,964,840),37409=>array(37,-66,891,840),37410=>array(31,-72,980,832),37411=>array(51,-65,944,830),37412=>array(39,-71,909,827),37413=>array(44,-67,976,826),37414=>array(46,-69,951,833),37415=>array(44,-66,964,841),37416=>array(37,-51,949,840),37417=>array(37,-66,928,840),37418=>array(45,-71,970,827),37419=>array(37,-63,961,842),37420=>array(37,-66,981,840),37421=>array(37,-21,968,823),37422=>array(43,-60,953,833),37423=>array(37,-66,922,842),37424=>array(35,-64,954,846),37425=>array(31,-57,964,839),37426=>array(29,-72,976,839),37427=>array(35,-61,957,833),37428=>array(35,-65,975,846),37429=>array(37,-62,962,840),37430=>array(46,-69,961,831),37431=>array(38,-65,948,833),37432=>array(47,-66,975,833),37433=>array(32,-67,972,839),37434=>array(47,-14,950,831),37435=>array(37,-47,912,843),37436=>array(37,-65,948,844),37437=>array(39,-68,944,837),37438=>array(64,-70,912,828),37439=>array(42,-42,918,827),37440=>array(56,-67,914,823),37441=>array(57,-72,971,850),37442=>array(56,-68,970,833),37443=>array(56,-67,967,828),37444=>array(27,-59,974,841),37445=>array(42,-17,953,826),37446=>array(44,-73,950,829),37447=>array(56,-29,943,830),37448=>array(24,-30,957,829),37449=>array(35,-70,981,829),37450=>array(35,-71,920,830),37451=>array(33,-45,964,834),37452=>array(28,-70,981,831),37453=>array(32,-78,967,837),37454=>array(35,-30,954,834),37455=>array(27,-20,947,834),37456=>array(35,-71,950,838),37457=>array(70,-68,919,845),37458=>array(38,-29,952,833),37459=>array(31,-73,948,834),37460=>array(37,-29,953,828),37461=>array(37,-29,953,828),37462=>array(39,-78,986,840),37463=>array(37,-68,958,833),37464=>array(56,-62,932,829),37465=>array(56,-68,948,823),37466=>array(59,-74,912,837),37467=>array(51,-67,959,823),37468=>array(56,-64,962,837),37469=>array(56,-22,955,835),37470=>array(40,-62,966,829),37471=>array(56,-27,971,823),37472=>array(29,-74,976,830),37473=>array(44,-72,953,834),37474=>array(31,-73,980,831),37475=>array(39,-54,953,837),37476=>array(45,-59,919,834),37477=>array(31,-58,959,838),37478=>array(41,-18,954,832),37479=>array(36,-58,957,828),37480=>array(56,-58,934,836),37481=>array(56,-28,979,844),37482=>array(56,-22,954,830),37483=>array(46,-57,937,831),37484=>array(63,-69,913,831),37485=>array(38,-12,959,830),37486=>array(55,-62,913,838),37487=>array(34,-69,967,837),37488=>array(48,-71,908,838),37489=>array(37,-66,948,823),37490=>array(39,-70,953,844),37491=>array(36,-59,964,824),37492=>array(28,-17,947,835),37493=>array(41,-42,983,832),37494=>array(39,-53,907,847),37495=>array(35,-71,948,837),37496=>array(31,-63,973,840),37497=>array(44,-69,941,831),37498=>array(30,-64,959,833),37499=>array(34,-67,966,824),37500=>array(37,-59,962,854),37501=>array(53,-65,963,835),37502=>array(31,-71,969,830),37503=>array(41,-67,974,847),37504=>array(44,-56,968,827),37505=>array(56,-60,909,836),37506=>array(52,-69,903,835),37507=>array(39,-64,960,835),37508=>array(39,-64,914,844),37509=>array(50,-70,921,829),37510=>array(51,-70,949,833),37511=>array(59,-68,980,835),37512=>array(47,-31,956,837),37513=>array(34,-61,955,841),37514=>array(50,-71,957,836),37515=>array(43,-68,952,835),37516=>array(46,-69,955,841),37517=>array(34,-20,947,835),37518=>array(32,-14,968,800),37519=>array(26,-68,974,823),37520=>array(43,-32,967,828),37521=>array(33,-70,959,837),37522=>array(56,-69,956,823),37523=>array(35,-24,973,830),37524=>array(50,-70,955,834),37525=>array(33,-73,970,830),37526=>array(30,-64,967,839),37527=>array(47,-73,952,837),37528=>array(64,-69,903,840),37529=>array(54,-67,967,834),37530=>array(41,-66,964,838),37531=>array(37,-63,959,837),37532=>array(38,-73,961,832),37533=>array(35,-76,964,832),37534=>array(41,-22,964,848),37535=>array(47,-67,930,837),37536=>array(31,-36,958,831),37537=>array(43,-73,945,831),37538=>array(58,-70,969,832),37539=>array(54,-63,927,837),37540=>array(54,-73,964,832),37541=>array(37,-65,963,844),37542=>array(48,-52,921,834),37543=>array(52,-71,961,835),37544=>array(35,-63,951,848),37545=>array(42,-51,955,829),37546=>array(46,-65,954,837),37547=>array(51,-32,971,837),37548=>array(34,-63,956,832),37549=>array(56,-70,933,826),37550=>array(35,-27,960,825),37551=>array(56,-67,952,824),37552=>array(51,-66,949,835),37553=>array(30,-70,942,841),37554=>array(30,-52,958,841),37555=>array(39,-69,959,833),37556=>array(31,-37,987,838),37557=>array(42,-71,969,846),37558=>array(47,-62,975,835),37559=>array(50,-67,942,833),37560=>array(30,-67,953,827),37561=>array(35,-70,958,838),37562=>array(27,-47,987,832),37563=>array(60,-67,925,836),37564=>array(39,-23,955,835),37565=>array(28,-54,981,831),37566=>array(58,-70,969,832),37567=>array(29,-64,895,840),37568=>array(28,-30,953,839),37569=>array(53,-69,917,819),37570=>array(38,-75,975,832),37571=>array(50,-63,978,846),37572=>array(47,-74,984,835),37573=>array(46,-70,951,834),37574=>array(39,-25,964,835),37575=>array(48,-67,961,833),37576=>array(36,-25,967,838),37577=>array(43,-69,975,841),37578=>array(34,-68,984,840),37579=>array(48,-46,977,854),37580=>array(45,-69,968,834),37581=>array(35,-73,957,835),37582=>array(28,-66,970,844),37583=>array(42,-70,980,835),37584=>array(42,-65,957,834),37585=>array(32,-76,968,841),37586=>array(41,-61,980,841),37587=>array(42,-70,916,833),37588=>array(28,-67,967,848),37589=>array(57,-40,982,825),37590=>array(33,-74,959,838),37591=>array(36,-64,903,844),37592=>array(43,-72,978,823),37593=>array(35,-48,947,839),37594=>array(34,-25,966,842),37595=>array(41,-68,931,832),37596=>array(33,-73,970,838),37597=>array(37,-70,954,840),37598=>array(32,-30,954,833),37599=>array(38,-66,979,833),37600=>array(31,-78,971,846),37601=>array(37,-70,981,840),37602=>array(33,-56,973,838),37603=>array(42,-72,958,829),37604=>array(45,-70,919,834),37605=>array(33,-16,950,838),37606=>array(42,-68,930,829),37607=>array(36,-72,969,838),37608=>array(36,-64,955,836),37609=>array(39,-21,954,830),37610=>array(43,-70,951,835),37611=>array(19,-25,951,835),37612=>array(34,-24,966,833),37613=>array(39,-70,959,834),37614=>array(43,-70,964,840),37615=>array(46,-65,957,831),37616=>array(40,-27,954,836),37617=>array(35,-60,968,831),37618=>array(39,-64,954,835),37619=>array(37,-60,945,838),37620=>array(43,-66,954,838),37621=>array(39,-64,960,835),37622=>array(33,-70,973,843),37623=>array(26,-76,968,826),37624=>array(39,-68,945,830),37625=>array(25,-71,962,835),37626=>array(35,-67,965,831),37627=>array(37,-27,971,782),37628=>array(62,-68,908,824),37629=>array(33,-62,965,838),37630=>array(25,-70,914,836),37631=>array(28,-69,920,833),37632=>array(29,-64,982,841),37633=>array(37,-65,977,833),37634=>array(42,-57,971,842),37635=>array(34,-42,966,836),37636=>array(57,-64,968,841),37637=>array(49,-46,946,832),37638=>array(38,-64,953,842),37639=>array(38,-70,947,841),37640=>array(30,-41,978,839),37641=>array(40,-71,967,837),37642=>array(40,-64,960,845),37643=>array(21,-80,903,821),37644=>array(25,-70,941,836),37645=>array(37,-69,959,842),37646=>array(36,-68,905,836),37647=>array(29,-24,962,833),37648=>array(48,-68,954,832),37649=>array(33,-69,972,842),37650=>array(30,-66,956,826),37651=>array(28,-66,964,837),37652=>array(33,-53,975,841),37653=>array(53,-42,961,837),37654=>array(44,-32,981,836),37655=>array(30,-62,958,842),37656=>array(43,-32,952,832),37657=>array(44,-65,934,844),37658=>array(27,-64,957,832),37659=>array(36,-64,994,845),37660=>array(27,-27,971,840),37661=>array(24,-54,969,838),37662=>array(30,-58,951,846),37663=>array(35,-59,968,843),37664=>array(41,-72,963,839),37665=>array(38,-65,952,837),37666=>array(48,-67,956,832),37667=>array(31,-61,962,835),37668=>array(46,-74,981,833),37669=>array(33,-68,954,843),37670=>array(68,-67,920,849),37671=>array(37,-48,923,860),37672=>array(42,-67,956,836),37673=>array(49,-64,907,838),37674=>array(37,-58,973,838),37675=>array(55,-60,917,824),37676=>array(57,-64,973,835),37677=>array(36,-75,905,840),37678=>array(58,-70,917,836),37679=>array(39,-64,955,836),37680=>array(39,-90,986,836),37681=>array(54,-62,948,844),37682=>array(39,-64,973,836),37683=>array(44,-32,956,824),37684=>array(29,-30,956,825),37685=>array(29,-65,962,833),37686=>array(29,-57,974,841),37687=>array(29,-70,983,835),37688=>array(33,-64,975,836),37689=>array(40,-65,956,836),37690=>array(40,-65,958,837),37691=>array(50,-64,962,846),37692=>array(37,-65,978,838),37693=>array(44,-72,981,833),37694=>array(31,-18,938,825),37695=>array(34,-67,951,834),37696=>array(42,-53,957,845),37697=>array(33,-72,961,833),37698=>array(34,-31,982,843),37699=>array(34,-29,961,842),37700=>array(38,-60,967,832),37701=>array(50,-57,962,831),37702=>array(50,-65,921,830),37703=>array(52,-62,979,844),37704=>array(33,-64,964,835),37705=>array(36,-71,978,828),37706=>array(18,-53,969,847),37707=>array(54,-67,914,834),37708=>array(54,-43,971,817),37709=>array(46,-78,969,833),37710=>array(42,-68,951,837),37711=>array(47,-70,959,832),37712=>array(46,-67,983,839),37713=>array(44,-72,981,835),37714=>array(41,-71,979,834),37715=>array(41,-67,954,834),37716=>array(44,-60,965,839),37717=>array(47,-76,964,824),37718=>array(43,-74,955,818),37719=>array(50,-67,943,843),37720=>array(49,-67,915,830),37721=>array(49,-43,973,817),37722=>array(39,-68,964,825),37723=>array(42,-69,971,830),37724=>array(42,-50,963,842),37725=>array(42,-70,944,842),37726=>array(49,-81,978,832),37727=>array(49,-28,954,832),37728=>array(39,-21,957,851),37729=>array(32,-71,970,829),37730=>array(42,-65,948,842),37731=>array(47,-71,950,829),37732=>array(43,-64,960,844),37733=>array(48,-62,976,841),37734=>array(38,-69,957,841),37735=>array(52,-65,926,836),37736=>array(39,-58,955,835),37737=>array(37,-65,973,836),37738=>array(42,-23,981,842),37739=>array(43,-39,967,842),37740=>array(43,-73,974,833),37741=>array(39,-53,964,844),37742=>array(41,-63,969,840),37743=>array(41,-47,960,848),37744=>array(43,-67,981,844),37745=>array(35,-50,968,845),37746=>array(43,-52,963,843),37747=>array(39,-40,973,837),37748=>array(43,-63,954,843),37749=>array(38,-66,963,823),37750=>array(48,-32,965,823),37751=>array(36,-37,978,824),37752=>array(34,-71,923,833),37753=>array(45,-37,961,834),37754=>array(39,-64,950,838),37755=>array(57,-73,936,824),37756=>array(28,-60,963,842),37757=>array(36,-67,917,840),37758=>array(36,-30,959,842),37759=>array(36,-71,925,838),37760=>array(38,-67,976,837),37761=>array(38,-65,969,834),37762=>array(44,-74,968,837),37763=>array(35,-68,974,844),37764=>array(44,-75,969,842),37765=>array(26,-54,969,846),37766=>array(39,-73,951,833),37767=>array(44,-72,920,818),37768=>array(29,-49,956,848),37769=>array(35,-69,920,833),37770=>array(50,-67,925,847),37771=>array(44,-70,938,839),37772=>array(25,-66,970,847),37773=>array(34,-65,971,834),37774=>array(27,-69,978,842),37775=>array(33,-30,986,843),37776=>array(33,-58,957,835),37777=>array(34,-34,957,833),37778=>array(32,-70,970,826),37779=>array(44,-81,969,822),37780=>array(26,-51,963,842),37781=>array(39,-68,964,845),37782=>array(42,-70,970,837),37783=>array(41,-60,970,855),37784=>array(39,-67,954,826),37785=>array(33,-73,924,823),37786=>array(28,-73,965,838),37787=>array(40,-53,951,843),37788=>array(40,-50,976,846),37789=>array(40,-62,988,835),37790=>array(30,-50,960,845),37791=>array(34,-71,986,827),37792=>array(44,-37,953,834),37793=>array(33,-64,955,851),37794=>array(37,-66,950,839),37795=>array(39,-33,972,835),37796=>array(36,-61,974,836),37797=>array(40,-30,976,836),37798=>array(48,-67,925,830),37799=>array(37,-24,960,832),37800=>array(40,-65,965,840),37801=>array(47,-62,990,836),37802=>array(41,-72,975,835),37803=>array(44,-57,976,823),37804=>array(45,-70,936,832),37805=>array(37,-78,963,833),37806=>array(38,-69,952,836),37807=>array(32,-65,954,837),37808=>array(39,-38,961,824),37809=>array(33,-67,974,837),37810=>array(34,-63,980,838),37811=>array(35,-67,965,846),37812=>array(34,-42,980,836),37813=>array(32,-56,967,843),37814=>array(44,-64,929,818),37815=>array(44,-62,936,838),37816=>array(44,-66,950,837),37817=>array(37,-48,968,822),37818=>array(19,-73,981,837),37819=>array(48,-70,959,840),37820=>array(41,-70,942,835),37821=>array(39,-64,970,839),37822=>array(44,-38,968,818),37823=>array(49,-65,969,855),37824=>array(54,-67,926,834),37825=>array(43,-65,970,839),37826=>array(37,-35,957,828),37827=>array(31,-66,974,837),37828=>array(41,-67,962,838),37829=>array(37,-66,958,847),37830=>array(45,-66,955,830),37831=>array(28,-57,973,848),37832=>array(45,-63,969,835),37833=>array(48,-76,966,834),37834=>array(38,-30,979,846),37835=>array(31,-67,951,829),37836=>array(28,-57,978,844),37837=>array(34,-71,962,831),37838=>array(32,-71,962,831),37839=>array(40,-23,957,824),37840=>array(39,-69,960,841),37841=>array(35,-64,951,833),37842=>array(44,-67,983,841),37843=>array(44,-44,989,850),37844=>array(43,-71,965,840),37845=>array(36,-63,961,845),37846=>array(25,-66,967,837),37847=>array(34,-20,968,832),37848=>array(31,-65,953,833),37849=>array(47,-67,967,837),37850=>array(44,-70,982,835),37851=>array(44,-64,933,839),37852=>array(46,-23,956,827),37853=>array(39,-60,984,841),37854=>array(39,-70,956,839),37855=>array(40,-71,954,847),37856=>array(21,-52,989,843),37857=>array(34,-73,964,836),37858=>array(38,-64,965,824),37859=>array(28,-75,983,840),37860=>array(44,-64,956,835),37861=>array(44,-65,942,831),37862=>array(29,-55,979,847),37863=>array(48,-29,968,826),37864=>array(31,-21,962,836),37865=>array(34,-63,974,843),37866=>array(44,-69,978,828),37867=>array(44,-68,962,826),37868=>array(41,-68,942,835),37869=>array(29,-38,964,828),37870=>array(32,-66,966,848),37871=>array(39,-72,972,823),37872=>array(37,-74,930,841),37873=>array(35,-61,967,852),37874=>array(35,-67,949,848),37875=>array(32,-62,920,846),37876=>array(22,-65,970,841),37877=>array(35,-67,961,833),37878=>array(38,-67,981,836),37879=>array(32,-63,974,830),37880=>array(47,-42,982,825),37881=>array(43,-53,959,837),37882=>array(51,-68,993,848),37883=>array(66,-57,979,840),37884=>array(29,-68,979,837),37885=>array(23,-53,954,840),37886=>array(19,-76,969,834),37887=>array(39,-68,979,832),37888=>array(44,-80,954,834),37889=>array(24,-67,954,838),37890=>array(37,-71,946,839),37891=>array(37,-63,963,839),37892=>array(37,-70,971,839),37893=>array(60,-40,972,839),37894=>array(60,-30,972,846),37895=>array(35,-66,969,850),37896=>array(42,-62,964,841),37897=>array(42,-85,969,824),37898=>array(24,-67,954,838),37899=>array(27,-66,952,837),37900=>array(42,-67,988,825),37901=>array(47,-56,925,839),37902=>array(27,-66,975,844),37903=>array(44,-50,952,858),37904=>array(39,-67,973,846),37905=>array(41,-70,961,835),37906=>array(47,-65,952,833),37907=>array(29,-70,971,832),37908=>array(36,-53,943,839),37909=>array(27,-71,959,834),37910=>array(24,-69,963,836),37911=>array(29,-68,911,838),37912=>array(40,-31,956,839),37913=>array(32,-24,959,837),37914=>array(37,-48,968,839),37915=>array(41,-59,965,830),37916=>array(40,-34,958,847),37917=>array(48,-76,954,838),37918=>array(42,-59,962,839),37919=>array(37,-68,954,839),37920=>array(42,-64,954,844),37921=>array(44,-69,951,824),37922=>array(39,-30,972,826),37923=>array(47,-54,935,839),37924=>array(47,-56,938,834),37925=>array(37,-64,954,845),37926=>array(57,-73,905,839),37927=>array(57,-65,927,822),37928=>array(38,-71,966,835),37929=>array(45,-66,978,830),37930=>array(40,-71,954,833),37931=>array(35,-58,951,843),37932=>array(39,-69,959,829),37933=>array(42,-62,970,850),37934=>array(28,-79,969,847),37935=>array(37,-62,963,842),37936=>array(45,-68,973,834),37937=>array(50,-68,980,842),37938=>array(57,-58,930,827),37939=>array(52,-70,935,837),37940=>array(37,-69,972,845),37941=>array(44,-69,951,824),37942=>array(41,-67,976,837),37943=>array(46,-70,970,830),37944=>array(39,-64,951,840),37945=>array(44,-71,974,826),37946=>array(51,-65,945,838),37947=>array(39,-64,966,831),37948=>array(48,-75,967,830),37949=>array(45,-68,977,835),37950=>array(32,-17,951,838),37951=>array(36,-37,966,844),37952=>array(57,-68,979,835),37953=>array(37,-61,980,843),37954=>array(33,-70,963,836),37955=>array(44,-61,967,835),37956=>array(45,-65,960,835),37957=>array(43,-66,971,834),37958=>array(41,-68,969,826),37959=>array(37,-68,979,833),37960=>array(37,-65,974,829),37961=>array(52,-32,959,831),37962=>array(37,-64,970,835),37963=>array(53,-27,956,825),37964=>array(37,-64,977,849),37965=>array(60,-30,972,804),37966=>array(37,-27,959,839),37967=>array(46,-72,963,839),37968=>array(33,-70,961,831),37969=>array(30,-16,957,844),37970=>array(42,-34,974,841),37971=>array(33,-56,959,837),37972=>array(28,-69,977,845),37973=>array(46,-63,977,844),37974=>array(32,-67,968,839),37975=>array(36,-70,983,834),37976=>array(34,-63,933,830),37977=>array(17,-74,974,834),37978=>array(37,-60,981,845),37979=>array(46,-62,970,839),37980=>array(37,-72,954,839),37981=>array(31,-68,982,832),37982=>array(37,-62,964,842),37983=>array(37,-66,966,841),37984=>array(48,-68,982,840),37985=>array(37,-63,942,839),37986=>array(31,-58,960,847),37987=>array(35,-66,967,854),37988=>array(39,-68,969,827),37989=>array(34,-65,974,852),37990=>array(17,-57,989,839),37991=>array(34,-61,959,849),37992=>array(31,-65,973,837),37993=>array(30,-30,958,817),37994=>array(46,-72,957,829),37995=>array(32,-73,973,856),37996=>array(39,-64,964,839),37997=>array(49,-64,927,829),37998=>array(38,-65,964,831),37999=>array(27,-62,980,837),38000=>array(28,-68,969,845),38001=>array(38,-58,965,842),38002=>array(40,-67,974,854),38003=>array(31,-67,986,844),38004=>array(47,-67,951,828),38005=>array(36,-56,957,837),38006=>array(31,-67,975,834),38007=>array(32,-69,955,822),38008=>array(42,-27,969,827),38009=>array(36,-66,963,848),38010=>array(22,-65,967,839),38011=>array(34,-66,977,842),38012=>array(36,-70,960,829),38013=>array(48,-70,959,838),38014=>array(43,-29,967,845),38015=>array(52,-37,962,834),38016=>array(36,-72,974,833),38017=>array(35,-65,984,834),38018=>array(31,-71,970,832),38019=>array(49,-76,937,831),38020=>array(43,-65,961,846),38021=>array(249,-26,702,820),38022=>array(34,-37,943,826),38023=>array(39,-28,938,830),38024=>array(39,-69,933,830),38025=>array(39,-53,939,830),38026=>array(60,-64,890,828),38027=>array(39,-67,957,830),38028=>array(36,-65,926,822),38029=>array(39,-17,944,830),38030=>array(39,-75,942,830),38031=>array(35,-64,896,832),38032=>array(50,-64,931,827),38033=>array(39,-66,965,830),38034=>array(39,-74,942,830),38035=>array(39,-63,904,838),38036=>array(37,-59,902,830),38037=>array(39,-70,933,830),38038=>array(37,-66,926,830),38039=>array(35,-67,960,830),38040=>array(38,-63,948,830),38041=>array(28,-67,926,820),38042=>array(33,-72,952,828),38043=>array(39,-69,956,830),38044=>array(39,-30,937,830),38045=>array(39,-46,955,830),38046=>array(39,-51,958,830),38047=>array(39,-66,906,830),38048=>array(36,-60,914,830),38049=>array(39,-60,943,830),38050=>array(37,-58,913,830),38051=>array(39,-72,965,830),38052=>array(39,-72,960,837),38053=>array(39,-67,873,830),38054=>array(39,-69,963,836),38055=>array(39,-60,907,832),38056=>array(39,-52,918,839),38057=>array(39,-61,903,830),38058=>array(39,-68,963,845),38059=>array(39,-69,943,834),38060=>array(39,-69,966,830),38061=>array(39,-69,933,830),38062=>array(39,-28,935,826),38063=>array(39,-34,958,830),38064=>array(33,-28,934,830),38065=>array(38,-70,962,830),38066=>array(20,-22,950,823),38067=>array(39,-66,941,830),38068=>array(39,-67,940,831),38069=>array(25,-56,968,837),38070=>array(39,-59,946,830),38071=>array(39,-36,938,830),38072=>array(38,-70,927,833),38073=>array(39,-71,948,841),38074=>array(43,-64,949,826),38075=>array(39,-66,931,830),38076=>array(54,-70,894,826),38077=>array(41,-14,929,826),38078=>array(44,-69,897,826),38079=>array(29,-45,894,826),38080=>array(42,-73,888,821),38081=>array(36,-70,954,832),38082=>array(39,-71,903,843),38083=>array(37,-79,955,847),38084=>array(32,-60,955,832),38085=>array(43,-69,930,826),38086=>array(42,-70,915,834),38087=>array(43,-45,964,834),38088=>array(38,-66,937,841),38089=>array(24,-65,937,839),38090=>array(39,-33,940,846),38091=>array(33,-76,950,830),38092=>array(40,-62,937,827),38093=>array(46,-70,955,837),38094=>array(35,-60,955,826),38095=>array(30,-53,914,835),38096=>array(37,-66,949,829),38097=>array(39,-34,941,828),38098=>array(29,-66,937,826),38099=>array(39,-33,954,828),38100=>array(39,-45,957,826),38101=>array(37,-67,937,835),38102=>array(42,-72,945,827),38103=>array(31,-64,927,829),38104=>array(33,-72,935,818),38105=>array(36,-70,933,831),38106=>array(31,-18,947,829),38107=>array(55,-54,894,822),38108=>array(28,-72,917,823),38109=>array(49,-71,900,817),38110=>array(39,-68,908,816),38111=>array(45,-53,905,827),38112=>array(32,-19,948,824),38113=>array(50,-67,916,830),38114=>array(38,-66,950,837),38115=>array(40,-73,938,830),38116=>array(19,-71,951,833),38117=>array(49,-52,939,827),38118=>array(38,-64,958,834),38119=>array(9,-66,927,828),38120=>array(20,-27,936,816),38121=>array(20,-57,948,825),38122=>array(38,-69,958,845),38123=>array(19,-68,948,833),38124=>array(39,-69,945,821),38125=>array(44,-72,885,840),38126=>array(17,-62,919,825),38127=>array(48,-35,954,834),38128=>array(29,-65,952,835),38129=>array(27,-73,953,840),38130=>array(34,-68,938,847),38131=>array(19,-66,942,844),38132=>array(23,-61,891,822),38133=>array(33,-65,934,844),38134=>array(47,-60,971,825),38135=>array(28,-65,911,835),38136=>array(32,-64,923,832),38137=>array(12,-57,923,822),38138=>array(40,-62,934,832),38139=>array(27,-48,947,821),38140=>array(39,-61,970,823),38141=>array(19,-63,951,833),38142=>array(32,-56,943,825),38143=>array(31,-21,930,819),38144=>array(39,-69,923,831),38145=>array(37,-70,955,830),38146=>array(32,-27,952,833),38147=>array(39,-28,942,830),38148=>array(45,-76,916,833),38149=>array(34,-60,903,839),38150=>array(39,-67,941,827),38151=>array(37,-66,948,833),38152=>array(36,-68,963,827),38153=>array(22,-22,965,832),38154=>array(44,-71,944,819),38155=>array(29,-63,952,839),38156=>array(39,-73,943,831),38157=>array(40,-73,957,832),38158=>array(52,-61,896,830),38159=>array(45,-62,895,828),38160=>array(39,-74,942,835),38161=>array(61,-69,908,836),38162=>array(27,-66,961,843),38163=>array(19,-68,963,833),38164=>array(27,-70,914,833),38165=>array(30,-69,949,832),38166=>array(43,-72,950,828),38167=>array(35,-66,933,832),38168=>array(31,-69,943,837),38169=>array(50,-66,939,829),38170=>array(39,-69,939,827),38171=>array(24,-66,976,843),38172=>array(39,-63,970,839),38173=>array(30,-76,940,827),38174=>array(33,-67,967,833),38175=>array(40,-49,953,827),38176=>array(39,-63,909,826),38177=>array(28,-68,917,815),38178=>array(36,-73,900,827),38179=>array(43,-60,908,834),38180=>array(29,-30,932,833),38181=>array(35,-70,937,834),38182=>array(47,-68,904,846),38183=>array(29,-68,921,833),38184=>array(30,-71,961,824),38185=>array(42,-43,962,833),38186=>array(32,-28,953,822),38187=>array(38,-77,942,834),38188=>array(39,-62,952,842),38189=>array(42,-76,952,839),38190=>array(44,-67,955,826),38191=>array(43,-73,928,827),38192=>array(35,-36,939,821),38193=>array(34,-67,918,842),38194=>array(30,-64,959,832),38195=>array(29,-64,974,836),38196=>array(32,-64,959,837),38197=>array(40,-61,936,827),38198=>array(33,-34,957,827),38199=>array(30,-56,948,827),38200=>array(36,-66,943,841),38201=>array(38,-71,957,833),38202=>array(34,-30,959,838),38203=>array(37,-78,959,823),38204=>array(33,-71,966,832),38205=>array(43,-37,950,834),38206=>array(38,-68,964,842),38207=>array(31,-72,968,844),38208=>array(39,-82,957,846),38209=>array(39,-69,977,829),38210=>array(31,-67,953,824),38211=>array(29,-63,961,837),38212=>array(37,-70,932,826),38213=>array(39,-76,903,827),38214=>array(28,-80,957,810),38215=>array(21,-66,951,838),38216=>array(29,-53,951,843),38217=>array(19,-68,937,833),38218=>array(40,-69,946,828),38219=>array(29,-63,970,835),38220=>array(32,-73,945,833),38221=>array(37,-69,949,843),38222=>array(31,-75,968,842),38223=>array(35,-69,917,833),38224=>array(37,-72,919,848),38225=>array(37,-73,927,848),38226=>array(30,-27,951,832),38227=>array(22,-58,950,840),38228=>array(43,-60,941,826),38229=>array(29,-72,977,841),38230=>array(33,-66,956,833),38231=>array(36,-25,949,833),38232=>array(30,-62,973,833),38233=>array(42,-71,946,827),38234=>array(33,-74,919,833),38235=>array(33,-63,949,851),38236=>array(40,-70,958,836),38237=>array(31,-66,946,844),38238=>array(24,-68,965,839),38239=>array(31,-60,971,846),38240=>array(31,-61,973,831),38241=>array(34,-73,941,821),38242=>array(31,-77,970,830),38243=>array(35,-68,956,842),38244=>array(23,-65,961,833),38245=>array(43,-65,941,835),38246=>array(24,-72,959,836),38247=>array(31,-62,894,825),38248=>array(30,-66,943,843),38249=>array(50,-70,952,837),38250=>array(24,-58,958,822),38251=>array(43,-29,966,832),38252=>array(37,-66,968,832),38253=>array(51,-73,918,827),38254=>array(29,-76,974,833),38255=>array(29,-60,914,833),38256=>array(19,-80,953,844),38257=>array(24,-37,950,842),38258=>array(26,-74,959,842),38259=>array(27,-69,952,850),38260=>array(29,-62,964,842),38261=>array(29,-68,965,842),38262=>array(25,-80,971,843),38263=>array(69,-69,942,800),38264=>array(89,-16,892,784),38265=>array(57,-67,965,850),38266=>array(57,-72,962,831),38267=>array(58,-73,976,821),38268=>array(63,-73,921,785),38269=>array(60,-68,975,827),38270=>array(44,-65,986,786),38271=>array(60,-54,957,823),38272=>array(112,-71,871,782),38273=>array(132,-64,882,789),38274=>array(116,-67,890,788),38275=>array(125,-64,875,789),38276=>array(113,-73,936,803),38277=>array(125,-64,874,789),38278=>array(125,-70,888,782),38279=>array(132,-64,883,791),38280=>array(136,-75,895,783),38281=>array(109,-68,891,785),38282=>array(110,-74,891,779),38283=>array(110,-51,890,806),38284=>array(104,-61,909,792),38285=>array(109,-62,910,790),38286=>array(106,-53,883,797),38287=>array(109,-63,890,796),38288=>array(101,-70,903,782),38289=>array(129,-63,886,797),38290=>array(126,-55,899,801),38291=>array(125,-66,892,784),38292=>array(125,-65,902,790),38293=>array(125,-64,875,789),38294=>array(132,-64,882,789),38295=>array(108,-59,892,799),38296=>array(127,-60,883,796),38297=>array(132,-64,882,789),38298=>array(125,-64,875,789),38299=>array(128,-64,889,787),38300=>array(118,-69,898,782),38301=>array(109,-64,891,788),38302=>array(121,-68,900,783),38303=>array(112,-61,900,790),38304=>array(132,-64,882,789),38305=>array(109,-67,894,790),38306=>array(132,-64,882,789),38307=>array(113,-58,887,798),38308=>array(112,-62,888,789),38309=>array(125,-61,885,794),38310=>array(125,-64,875,789),38311=>array(110,-68,900,786),38312=>array(119,-71,894,791),38313=>array(112,-67,900,789),38314=>array(106,-68,896,786),38315=>array(113,-64,894,788),38316=>array(110,-64,890,788),38317=>array(117,-65,907,790),38318=>array(101,-59,899,791),38319=>array(125,-64,875,789),38320=>array(121,-61,895,787),38321=>array(112,-63,888,801),38322=>array(112,-54,888,802),38323=>array(125,-64,875,789),38324=>array(109,-64,891,788),38325=>array(113,-68,910,783),38326=>array(123,-70,912,789),38327=>array(32,-70,928,829),38328=>array(125,-64,875,789),38329=>array(106,-67,894,788),38330=>array(112,-70,916,796),38331=>array(120,-64,894,793),38332=>array(108,-65,894,797),38333=>array(110,-65,901,789),38334=>array(116,-64,906,790),38335=>array(124,-68,912,782),38336=>array(107,-69,893,810),38337=>array(125,-64,875,789),38338=>array(125,-64,875,789),38339=>array(130,-68,906,783),38340=>array(125,-64,875,799),38341=>array(110,-63,888,812),38342=>array(106,-59,890,796),38343=>array(108,-59,892,803),38344=>array(114,-65,909,790),38345=>array(101,-52,894,797),38346=>array(107,-67,897,783),38347=>array(113,-67,898,792),38348=>array(117,-68,904,788),38349=>array(123,-69,913,784),38350=>array(125,-64,875,789),38351=>array(125,-64,875,789),38352=>array(124,-69,914,789),38353=>array(110,-64,911,794),38354=>array(98,-52,895,805),38355=>array(128,-69,908,782),38356=>array(123,-71,910,785),38357=>array(115,-66,907,791),38358=>array(120,-56,895,794),38359=>array(100,-61,900,800),38360=>array(132,-64,882,789),38361=>array(119,-64,881,789),38362=>array(101,-56,893,794),38363=>array(114,-65,897,788),38364=>array(104,-70,904,792),38365=>array(102,-68,898,784),38366=>array(121,-68,916,783),38367=>array(116,-67,893,784),38368=>array(119,-69,917,790),38369=>array(114,-61,902,793),38370=>array(97,-70,902,785),38371=>array(116,-67,892,787),38372=>array(118,-68,915,789),38373=>array(116,-73,908,785),38374=>array(125,-64,875,789),38375=>array(125,-64,875,797),38376=>array(116,-57,874,823),38377=>array(115,-67,853,801),38378=>array(120,-57,879,821),38379=>array(100,-67,867,826),38380=>array(116,-57,874,823),38381=>array(106,-56,860,820),38382=>array(112,-64,864,802),38383=>array(98,-57,869,832),38384=>array(123,-59,883,815),38385=>array(109,-67,862,822),38386=>array(108,-65,873,818),38387=>array(104,-68,864,826),38388=>array(100,-60,859,820),38389=>array(107,-66,864,816),38390=>array(110,-69,865,826),38391=>array(121,-63,874,826),38392=>array(105,-63,872,823),38393=>array(109,-60,875,821),38394=>array(96,-61,870,819),38395=>array(111,-63,873,824),38396=>array(96,-64,867,823),38397=>array(119,-65,874,817),38398=>array(109,-61,867,828),38399=>array(109,-61,867,828),38400=>array(116,-59,889,824),38401=>array(104,-61,880,810),38402=>array(95,-60,866,830),38403=>array(100,-62,873,829),38404=>array(108,-63,862,817),38405=>array(100,-64,877,821),38406=>array(121,-64,879,823),38407=>array(111,-64,889,821),38408=>array(98,-69,871,818),38409=>array(99,-66,873,811),38410=>array(106,-70,872,822),38411=>array(109,-71,865,817),38412=>array(100,-67,868,826),38413=>array(103,-67,865,821),38414=>array(101,-63,873,815),38415=>array(109,-69,862,813),38416=>array(104,-59,858,830),38417=>array(106,-55,865,822),38418=>array(108,-64,874,828),38419=>array(108,-64,874,828),38420=>array(98,-56,876,831),38421=>array(91,-69,871,822),38422=>array(93,-66,870,821),38423=>array(103,-64,872,834),38424=>array(93,-66,870,821),38425=>array(97,-67,875,826),38426=>array(93,-64,868,830),38427=>array(112,-64,888,830),38428=>array(49,-69,942,854),38429=>array(358,-68,720,782),38430=>array(115,-69,926,824),38431=>array(101,-63,942,830),38432=>array(102,-63,960,789),38433=>array(104,-68,935,824),38434=>array(134,-63,964,791),38435=>array(109,-62,949,834),38436=>array(112,-61,969,832),38437=>array(112,-63,970,795),38438=>array(112,-69,959,820),38439=>array(112,-64,955,829),38440=>array(119,-68,959,793),38441=>array(119,-65,939,831),38442=>array(104,-67,964,795),38443=>array(86,-70,959,783),38444=>array(107,-52,959,858),38445=>array(109,-69,952,840),38446=>array(98,-68,935,788),38447=>array(119,-61,954,835),38448=>array(111,-58,960,829),38449=>array(121,-64,952,829),38450=>array(103,-77,953,827),38451=>array(99,-64,875,784),38452=>array(110,-69,883,788),38453=>array(80,-59,951,835),38454=>array(96,-63,946,837),38455=>array(96,-58,950,800),38456=>array(96,-68,963,837),38457=>array(110,-70,960,824),38458=>array(115,-69,965,832),38459=>array(97,-73,949,782),38460=>array(140,-63,964,845),38461=>array(135,-64,953,829),38462=>array(136,-77,975,850),38463=>array(93,-75,927,778),38464=>array(102,-71,946,824),38465=>array(102,-71,954,839),38466=>array(99,-68,948,836),38467=>array(116,-71,955,780),38468=>array(110,-79,945,842),38469=>array(89,-61,945,786),38470=>array(100,-50,924,838),38471=>array(98,-63,932,826),38472=>array(88,-63,930,826),38473=>array(96,-64,921,786),38474=>array(124,-73,942,834),38475=>array(99,-82,936,792),38476=>array(104,-69,941,785),38477=>array(101,-68,955,846),38478=>array(116,-70,966,823),38479=>array(111,-63,927,825),38480=>array(114,-61,945,795),38481=>array(110,-64,929,786),38482=>array(108,-77,956,845),38483=>array(103,-68,955,829),38484=>array(109,-63,960,849),38485=>array(100,-73,950,821),38486=>array(109,-69,972,843),38487=>array(109,-68,918,833),38488=>array(116,-69,958,783),38489=>array(81,-65,958,786),38490=>array(104,-69,962,833),38491=>array(95,-61,964,827),38492=>array(108,-74,958,829),38493=>array(89,-65,951,836),38494=>array(113,-62,959,838),38495=>array(123,-64,953,829),38496=>array(81,-67,951,839),38497=>array(116,-66,966,836),38498=>array(100,-70,959,831),38499=>array(102,-67,950,835),38500=>array(111,-65,956,853),38501=>array(108,-65,909,851),38502=>array(99,-66,952,831),38503=>array(99,-67,922,783),38504=>array(99,-67,929,783),38505=>array(100,-67,944,827),38506=>array(97,-67,939,835),38507=>array(115,-70,953,826),38508=>array(74,-75,963,795),38509=>array(116,-69,953,832),38510=>array(100,-69,954,835),38511=>array(110,-68,965,828),38512=>array(110,-68,964,843),38513=>array(104,-68,909,832),38514=>array(78,-70,935,810),38515=>array(104,-79,950,827),38516=>array(128,-69,974,845),38517=>array(95,-67,970,831),38518=>array(116,-62,917,837),38519=>array(119,-64,896,839),38520=>array(103,-58,951,833),38521=>array(113,-71,948,838),38522=>array(97,-66,958,846),38523=>array(119,-64,939,791),38524=>array(128,-71,967,830),38525=>array(89,-71,934,779),38526=>array(103,-77,967,783),38527=>array(93,-54,958,797),38528=>array(110,-58,956,828),38529=>array(99,-56,954,798),38530=>array(110,-68,964,851),38531=>array(103,-52,969,863),38532=>array(107,-61,972,791),38533=>array(99,-55,902,800),38534=>array(93,-60,959,848),38535=>array(97,-67,961,829),38536=>array(90,-60,964,800),38537=>array(114,-64,959,819),38538=>array(101,-71,950,837),38539=>array(92,-68,927,845),38540=>array(92,-68,943,844),38541=>array(92,-74,932,844),38542=>array(100,-60,958,832),38543=>array(99,-64,942,825),38544=>array(113,-62,952,828),38545=>array(116,-67,957,829),38546=>array(118,-68,963,843),38547=>array(118,-65,957,836),38548=>array(96,-56,932,801),38549=>array(92,-70,941,784),38550=>array(102,-70,928,839),38551=>array(97,-71,956,819),38552=>array(86,-64,957,804),38553=>array(109,-67,960,819),38554=>array(93,-69,954,835),38555=>array(93,-68,950,841),38556=>array(95,-65,941,830),38557=>array(93,-74,916,843),38558=>array(109,-72,983,832),38559=>array(83,-73,970,842),38560=>array(113,-62,965,838),38561=>array(113,-78,965,831),38562=>array(111,-65,973,823),38563=>array(100,-70,957,833),38564=>array(110,-66,960,836),38565=>array(110,-64,963,837),38566=>array(96,-68,937,845),38567=>array(85,-68,963,809),38568=>array(106,-68,967,838),38569=>array(98,-74,970,839),38570=>array(106,-66,962,855),38571=>array(106,-73,954,832),38572=>array(111,-68,947,781),38573=>array(106,-62,953,794),38574=>array(92,-57,952,864),38575=>array(101,-65,938,833),38576=>array(100,-75,934,786),38577=>array(112,-59,953,832),38578=>array(93,-69,920,826),38579=>array(38,-69,984,839),38580=>array(77,-66,936,830),38581=>array(85,-68,955,835),38582=>array(65,-57,958,833),38583=>array(47,-71,963,830),38584=>array(47,-71,963,828),38585=>array(31,-69,954,845),38586=>array(36,-69,937,847),38587=>array(32,-76,968,844),38588=>array(53,-69,947,840),38589=>array(34,-65,897,837),38590=>array(40,-61,932,824),38591=>array(53,-70,953,826),38592=>array(46,-73,948,833),38593=>array(39,-66,939,803),38594=>array(38,-68,951,831),38595=>array(49,-68,953,830),38596=>array(36,-68,953,827),38597=>array(48,-59,953,837),38598=>array(55,-67,962,831),38599=>array(31,-75,924,818),38600=>array(36,-67,952,834),38601=>array(55,-63,957,836),38602=>array(40,-67,956,842),38603=>array(40,-61,932,843),38604=>array(34,-71,956,833),38605=>array(49,-72,948,824),38606=>array(42,-59,956,837),38607=>array(40,-49,916,830),38608=>array(40,-78,928,833),38609=>array(39,-63,953,833),38610=>array(30,-70,949,841),38611=>array(28,-65,954,839),38612=>array(38,-70,955,827),38613=>array(31,-71,952,836),38614=>array(59,-65,954,828),38615=>array(53,-63,950,839),38616=>array(36,-71,975,826),38617=>array(42,-70,958,843),38618=>array(37,-62,946,833),38619=>array(43,-68,954,847),38620=>array(45,-61,955,833),38621=>array(53,-65,954,839),38622=>array(38,-68,956,842),38623=>array(46,-65,939,839),38624=>array(14,-59,925,822),38625=>array(44,-71,952,824),38626=>array(64,-73,957,834),38627=>array(43,-70,950,834),38628=>array(53,-82,914,809),38629=>array(32,-67,970,839),38630=>array(14,-59,965,822),38631=>array(20,-41,956,837),38632=>array(82,-65,943,778),38633=>array(60,-60,955,790),38634=>array(96,-69,888,800),38635=>array(75,-58,929,797),38636=>array(41,-63,948,784),38637=>array(69,-48,965,802),38638=>array(54,-34,964,796),38639=>array(59,-63,963,790),38640=>array(46,-62,971,822),38641=>array(46,-62,941,798),38642=>array(76,-71,930,805),38643=>array(30,-68,916,772),38644=>array(48,-16,941,781),38645=>array(45,-76,982,785),38646=>array(43,-63,961,810),38647=>array(105,-67,914,786),38648=>array(73,-67,938,785),38649=>array(41,-37,956,790),38650=>array(47,-64,926,787),38651=>array(85,-32,945,802),38652=>array(60,-67,936,781),38653=>array(66,-64,941,783),38654=>array(41,-68,941,782),38655=>array(55,-68,975,785),38656=>array(79,-70,930,787),38657=>array(32,-70,948,777),38658=>array(45,-62,981,792),38659=>array(68,-72,935,796),38660=>array(74,-52,916,800),38661=>array(78,-68,953,782),38662=>array(29,-72,947,811),38663=>array(35,-71,965,808),38664=>array(47,-64,951,791),38665=>array(70,-65,947,790),38666=>array(75,-28,930,778),38667=>array(73,-79,947,789),38668=>array(39,-59,899,787),38669=>array(56,-67,935,790),38670=>array(77,-67,943,790),38671=>array(61,-64,924,787),38672=>array(57,-67,974,787),38673=>array(67,-62,942,798),38674=>array(56,-67,970,827),38675=>array(39,-67,956,789),38676=>array(67,-54,939,798),38677=>array(55,-35,962,829),38678=>array(40,-67,968,789),38679=>array(81,-82,965,798),38680=>array(54,-67,913,788),38681=>array(34,-72,986,792),38682=>array(113,-53,949,791),38683=>array(68,-70,938,791),38684=>array(65,-68,909,785),38685=>array(96,-74,911,783),38686=>array(92,-59,967,813),38687=>array(46,-71,956,783),38688=>array(64,-72,968,783),38689=>array(43,-73,981,789),38690=>array(43,-72,969,824),38691=>array(58,-75,952,799),38692=>array(89,-55,902,802),38693=>array(54,-59,965,799),38694=>array(48,-67,967,787),38695=>array(51,-71,962,823),38696=>array(52,-60,939,800),38697=>array(90,-69,927,787),38698=>array(41,-64,924,797),38699=>array(82,-69,919,785),38700=>array(59,-69,941,783),38701=>array(52,-66,891,778),38702=>array(58,-49,955,780),38703=>array(51,-31,979,779),38704=>array(56,-65,964,796),38705=>array(60,-66,927,832),38706=>array(70,-62,965,817),38707=>array(88,-56,938,787),38708=>array(53,-16,975,829),38709=>array(63,-68,957,785),38710=>array(53,-53,959,785),38711=>array(83,-67,936,783),38712=>array(68,-70,900,815),38713=>array(31,-72,946,792),38714=>array(44,-63,964,819),38715=>array(57,-54,951,807),38716=>array(55,-64,971,846),38717=>array(60,-69,962,801),38718=>array(54,-56,949,794),38719=>array(43,-62,992,823),38720=>array(77,-70,948,808),38721=>array(94,-73,928,800),38722=>array(48,-73,941,790),38723=>array(33,-65,967,787),38724=>array(72,-64,928,799),38725=>array(48,-47,970,836),38726=>array(53,-56,949,829),38727=>array(65,-67,961,786),38728=>array(74,-28,929,779),38729=>array(55,-66,978,836),38730=>array(79,-51,934,795),38731=>array(61,-68,957,792),38732=>array(70,-79,939,825),38733=>array(42,-60,971,763),38734=>array(95,-58,971,763),38735=>array(43,-60,971,823),38736=>array(24,-50,981,809),38737=>array(104,-65,915,837),38738=>array(104,-65,915,837),38739=>array(51,-67,927,821),38740=>array(51,-67,938,852),38741=>array(38,-66,948,836),38742=>array(41,-66,952,840),38743=>array(55,-72,959,831),38744=>array(68,-63,968,841),38745=>array(70,-58,938,835),38746=>array(55,-74,976,832),38747=>array(53,-65,968,845),38748=>array(55,-72,950,829),38749=>array(48,-63,968,848),38750=>array(49,-65,944,826),38751=>array(49,-44,959,820),38752=>array(44,-73,925,838),38753=>array(36,-73,970,837),38754=>array(69,-77,924,784),38755=>array(69,-77,924,784),38756=>array(49,-26,963,849),38757=>array(31,-68,955,800),38758=>array(48,-57,957,797),38759=>array(33,-68,990,833),38760=>array(59,-69,949,807),38761=>array(73,-69,927,829),38762=>array(60,-69,951,825),38763=>array(57,-65,960,830),38764=>array(57,-69,953,831),38765=>array(54,-70,915,830),38766=>array(71,-50,919,851),38767=>array(51,-50,949,840),38768=>array(62,-68,969,828),38769=>array(62,-72,971,828),38770=>array(60,-68,968,833),38771=>array(60,-69,952,832),38772=>array(44,-67,969,824),38773=>array(60,-66,951,832),38774=>array(60,-65,956,835),38775=>array(63,-53,896,843),38776=>array(62,-74,971,837),38777=>array(48,-71,928,838),38778=>array(62,-64,986,830),38779=>array(65,-72,966,822),38780=>array(53,-64,955,829),38781=>array(63,-50,956,844),38782=>array(53,-70,947,824),38783=>array(65,-53,924,847),38784=>array(66,-71,917,831),38785=>array(69,-72,967,831),38786=>array(53,-71,967,823),38787=>array(61,-70,963,824),38788=>array(55,-67,961,824),38789=>array(42,-67,961,835),38790=>array(43,-70,957,823),38791=>array(53,-70,925,823),38792=>array(66,-73,978,843),38793=>array(66,-72,960,827),38794=>array(60,-69,953,829),38795=>array(53,-64,950,836),38796=>array(82,-58,966,830),38797=>array(59,-65,951,836),38798=>array(60,-71,970,830),38799=>array(53,-72,944,805),38800=>array(66,-68,940,834),38801=>array(51,-68,937,820),38802=>array(51,-66,949,826),38803=>array(51,-68,956,820),38804=>array(61,-70,969,838),38805=>array(49,-68,971,836),38806=>array(59,-74,959,836),38807=>array(39,-67,968,839),38808=>array(52,-70,943,835),38809=>array(62,-52,916,842),38810=>array(55,-50,955,859),38811=>array(73,-67,954,848),38812=>array(63,-68,961,829),38813=>array(64,-70,936,825),38814=>array(63,-73,959,830),38815=>array(73,-64,960,847),38816=>array(63,-65,919,847),38817=>array(62,-62,953,836),38818=>array(51,-68,976,828),38819=>array(45,-65,965,837),38820=>array(60,-67,954,836),38821=>array(56,-69,977,840),38822=>array(56,-66,968,841),38823=>array(56,-65,947,843),38824=>array(68,-69,922,827),38825=>array(46,-66,914,837),38826=>array(43,-68,952,841),38827=>array(66,-68,918,843),38828=>array(55,-72,967,829),38829=>array(47,-70,962,832),38830=>array(63,-68,975,826),38831=>array(53,-72,913,817),38832=>array(63,-69,951,817),38833=>array(53,-69,926,848),38834=>array(47,-79,952,821),38835=>array(51,-50,968,847),38836=>array(52,-70,948,820),38837=>array(47,-79,995,841),38838=>array(55,-48,943,855),38839=>array(54,-79,946,821),38840=>array(46,-69,952,825),38841=>array(51,-55,948,854),38842=>array(55,-70,956,824),38843=>array(65,-67,961,824),38844=>array(65,-68,970,833),38845=>array(65,-67,964,841),38846=>array(47,-67,948,836),38847=>array(54,-68,960,834),38848=>array(69,-65,961,831),38849=>array(62,-68,956,829),38850=>array(39,-65,950,842),38851=>array(55,-73,949,835),38852=>array(60,-73,967,823),38853=>array(53,-71,960,828),38854=>array(51,-76,968,834),38855=>array(66,-73,960,832),38856=>array(65,-64,981,839),38857=>array(68,-65,961,829),38858=>array(68,-58,946,808),38859=>array(72,-64,931,840),38860=>array(73,-62,901,844),38861=>array(59,-70,981,843),38862=>array(54,-71,981,841),38863=>array(39,-68,968,852),38864=>array(58,-69,985,847),38865=>array(23,-68,968,825),38866=>array(51,-70,943,834),38867=>array(54,-66,946,837),38868=>array(53,-75,973,836),38869=>array(68,-68,954,841),38870=>array(66,-67,977,840),38871=>array(59,-69,954,846),38872=>array(53,-67,976,840),38873=>array(39,-73,975,837),38874=>array(60,-66,949,834),38875=>array(68,-76,988,834),38876=>array(62,-70,951,842),38877=>array(57,-73,956,832),38878=>array(57,-70,959,839),38879=>array(53,-67,972,845),38880=>array(46,-73,952,831),38881=>array(62,-73,958,830),38882=>array(54,-73,966,830),38883=>array(65,-65,927,840),38884=>array(65,-65,981,840),38885=>array(62,-73,957,842),38886=>array(62,-73,894,820),38887=>array(61,-64,901,826),38888=>array(49,-80,948,840),38889=>array(47,-57,915,830),38890=>array(28,-66,945,809),38891=>array(50,-68,951,822),38892=>array(59,-76,901,817),38893=>array(65,-13,935,816),38894=>array(53,-24,947,823),38895=>array(49,-60,964,829),38896=>array(51,-35,956,820),38897=>array(49,-60,964,836),38898=>array(35,-29,966,826),38899=>array(72,-68,928,840),38900=>array(68,-74,932,842),38901=>array(66,-59,916,828),38902=>array(72,-64,914,818),38903=>array(56,-64,921,834),38904=>array(62,-72,972,834),38905=>array(65,-49,959,846),38906=>array(51,-72,973,835),38907=>array(66,-73,957,840),38908=>array(44,-56,951,841),38909=>array(50,-70,952,849),38910=>array(35,-70,941,825),38911=>array(63,-67,937,845),38912=>array(58,-74,976,824),38913=>array(79,-70,938,785),38914=>array(76,-68,950,791),38915=>array(126,-69,939,787),38916=>array(40,-79,961,826),38917=>array(48,-68,947,784),38918=>array(62,-76,960,801),38919=>array(54,-71,962,790),38920=>array(51,-71,946,817),38921=>array(40,-71,946,783),38922=>array(55,-71,961,788),38923=>array(29,-72,957,790),38924=>array(47,-64,964,790),38925=>array(45,-78,965,824),38926=>array(35,-68,970,833),38927=>array(49,-64,963,798),38928=>array(53,-70,959,781),38929=>array(42,-77,953,788),38930=>array(47,-66,957,822),38931=>array(53,-68,952,834),38932=>array(124,-68,952,788),38933=>array(128,-68,952,829),38934=>array(40,-60,966,844),38935=>array(32,-70,970,832),38936=>array(42,-68,955,839),38937=>array(38,-71,957,783),38938=>array(48,-64,966,792),38939=>array(42,-73,972,823),38940=>array(35,-70,962,831),38941=>array(53,-75,957,833),38942=>array(59,-53,968,856),38943=>array(37,-64,943,819),38944=>array(32,-68,967,836),38945=>array(62,-68,966,809),38946=>array(39,-68,956,801),38947=>array(95,-70,947,787),38948=>array(91,-70,963,787),38949=>array(96,-66,962,795),38950=>array(44,-65,961,844),38951=>array(107,-76,968,828),38952=>array(29,-79,971,782),38953=>array(44,-73,963,832),38954=>array(38,-68,961,832),38955=>array(36,-69,957,823),38956=>array(24,-61,959,830),38957=>array(52,-61,959,787),38958=>array(32,-78,975,802),38959=>array(32,-78,975,829),38960=>array(47,-71,967,840),38961=>array(48,-78,965,819),38962=>array(44,-79,964,793),38963=>array(36,-77,970,823),38964=>array(18,-82,959,826),38965=>array(25,-77,970,783),38966=>array(30,-61,959,814),38967=>array(38,-69,972,838),38968=>array(48,-72,959,789),38969=>array(35,-72,973,834),38970=>array(49,-65,965,824),38971=>array(45,-71,960,833),38972=>array(44,-72,973,829),38973=>array(35,-73,954,834),38974=>array(37,-68,948,826),38975=>array(33,-76,955,849),38976=>array(32,-73,951,836),38977=>array(38,-83,963,833),38978=>array(29,-73,964,833),38979=>array(52,-74,959,826),38980=>array(77,-71,962,788),38981=>array(42,-74,956,833),38982=>array(43,-68,964,788),38983=>array(34,-68,963,833),38984=>array(38,-82,959,826),38985=>array(44,-79,965,829),38986=>array(60,-78,953,840),38987=>array(35,-68,963,790),38988=>array(39,-60,956,787),38989=>array(41,-64,951,825),38990=>array(57,-63,959,794),38991=>array(57,-75,958,808),38992=>array(62,-81,971,783),38993=>array(38,-67,975,839),38994=>array(50,-73,964,788),38995=>array(53,-68,963,827),38996=>array(33,-65,961,830),38997=>array(45,-70,956,783),38998=>array(21,-77,967,831),38999=>array(47,-75,968,827),39000=>array(38,-57,962,796),39001=>array(45,-67,979,787),39002=>array(57,-78,964,834),39003=>array(43,-73,960,835),39004=>array(56,-72,970,829),39005=>array(69,-74,951,786),39006=>array(38,-67,960,828),39007=>array(40,-80,955,788),39008=>array(31,-73,960,784),39009=>array(39,-72,959,846),39010=>array(62,-65,973,830),39011=>array(33,-60,963,844),39012=>array(47,-48,963,850),39013=>array(46,-66,966,790),39014=>array(26,-48,963,840),39015=>array(41,-68,959,820),39016=>array(49,-70,959,808),39017=>array(36,-74,964,834),39018=>array(47,-68,978,831),39019=>array(56,-65,967,837),39020=>array(61,-67,952,788),39021=>array(47,-67,952,822),39022=>array(44,-64,965,844),39023=>array(43,-73,964,787),39024=>array(51,-64,958,843),39025=>array(28,-72,959,840),39026=>array(47,-66,964,847),39027=>array(35,-68,959,800),39028=>array(25,-62,961,844),39029=>array(78,-80,908,775),39030=>array(47,-60,930,783),39031=>array(88,-60,934,794),39032=>array(50,-66,937,774),39033=>array(37,-64,937,778),39034=>array(25,-61,940,822),39035=>array(30,-62,937,807),39036=>array(32,-68,933,772),39037=>array(31,-70,936,787),39038=>array(36,-61,953,787),39039=>array(59,-64,955,832),39040=>array(27,-68,935,814),39041=>array(35,-65,930,783),39042=>array(36,-65,936,783),39043=>array(27,-76,921,822),39044=>array(50,-65,936,779),39045=>array(36,-67,940,832),39046=>array(36,-60,940,830),39047=>array(18,-77,940,822),39048=>array(35,-59,943,783),39049=>array(55,-76,918,812),39050=>array(24,-61,933,830),39051=>array(33,-76,964,799),39052=>array(19,-69,915,830),39053=>array(21,-63,921,806),39054=>array(26,-70,942,827),39055=>array(32,-69,931,826),39056=>array(104,-70,929,778),39057=>array(51,-67,957,824),39058=>array(32,-71,950,802),39059=>array(47,-69,952,814),39060=>array(23,-76,933,822),39061=>array(18,-71,950,826),39062=>array(27,-70,942,827),39063=>array(22,-63,934,790),39064=>array(32,-63,941,788),39065=>array(117,-67,962,788),39066=>array(50,-73,937,778),39067=>array(52,-71,935,812),39068=>array(30,-68,940,832),39069=>array(31,-63,941,838),39070=>array(31,-70,921,784),39071=>array(50,-65,940,820),39072=>array(31,-70,940,827),39073=>array(29,-80,938,778),39074=>array(28,-72,937,782),39075=>array(32,-72,947,800),39076=>array(34,-81,964,861),39077=>array(61,-54,941,781),39078=>array(49,-62,927,832),39079=>array(22,-73,939,821),39080=>array(51,-68,967,783),39081=>array(43,-73,972,824),39082=>array(30,-73,965,797),39083=>array(24,-68,967,792),39084=>array(34,-68,954,787),39085=>array(32,-57,964,844),39086=>array(53,-63,967,850),39087=>array(32,-65,968,789),39088=>array(22,-57,955,825),39089=>array(37,-65,970,814),39090=>array(38,-71,967,820),39091=>array(41,-58,958,830),39092=>array(18,-57,944,822),39093=>array(41,-58,958,800),39094=>array(39,-62,959,800),39095=>array(33,-68,960,842),39096=>array(53,-64,963,809),39097=>array(17,-62,963,840),39098=>array(26,-61,967,791),39099=>array(42,-67,972,839),39100=>array(35,-65,970,829),39101=>array(44,-70,978,833),39102=>array(39,-75,970,781),39103=>array(40,-54,964,796),39104=>array(43,-73,961,833),39105=>array(36,-67,982,786),39106=>array(43,-60,970,798),39107=>array(26,-61,967,791),39108=>array(42,-74,970,784),39109=>array(43,-59,956,799),39110=>array(43,-68,980,832),39111=>array(43,-73,961,832),39112=>array(35,-64,966,820),39113=>array(31,-70,965,829),39114=>array(23,-62,974,791),39115=>array(31,-73,973,781),39116=>array(41,-65,974,829),39117=>array(26,-73,988,802),39118=>array(26,-63,942,790),39119=>array(20,-62,939,785),39120=>array(20,-62,939,804),39121=>array(16,-64,934,822),39122=>array(29,-67,936,812),39123=>array(8,-66,927,783),39124=>array(8,-65,939,783),39125=>array(20,-62,939,816),39126=>array(50,-58,972,819),39127=>array(20,-62,939,821),39128=>array(31,-60,963,789),39129=>array(43,-77,960,821),39130=>array(20,-70,931,817),39131=>array(64,-64,963,787),39132=>array(34,-69,967,824),39133=>array(55,-59,937,808),39134=>array(76,-59,936,770),39135=>array(43,-67,957,847),39136=>array(257,-34,731,839),39137=>array(48,-63,958,848),39138=>array(33,-54,962,839),39139=>array(41,-56,967,839),39140=>array(41,-73,936,839),39141=>array(28,-39,965,853),39142=>array(41,-50,966,839),39143=>array(42,-63,978,848),39144=>array(34,-76,939,822),39145=>array(40,-66,957,843),39146=>array(42,-31,949,838),39147=>array(40,-66,969,843),39148=>array(49,-81,957,840),39149=>array(42,-66,943,843),39150=>array(46,-68,957,844),39151=>array(34,-69,964,839),39152=>array(34,-64,951,843),39153=>array(40,-63,958,848),39154=>array(34,-64,969,839),39155=>array(46,-46,964,851),39156=>array(34,-55,956,842),39157=>array(34,-65,948,844),39158=>array(38,-56,960,842),39159=>array(34,-34,964,839),39160=>array(52,-63,958,848),39161=>array(40,-69,903,843),39162=>array(39,-84,979,824),39163=>array(36,-66,971,850),39164=>array(34,-68,906,839),39165=>array(36,-47,965,839),39166=>array(34,-70,944,839),39167=>array(39,-68,922,839),39168=>array(36,-74,985,839),39169=>array(36,-64,965,857),39170=>array(36,-52,954,857),39171=>array(40,-66,961,843),39172=>array(36,-65,948,857),39173=>array(34,-77,961,842),39174=>array(36,-70,960,857),39175=>array(31,-70,907,844),39176=>array(41,-54,964,852),39177=>array(40,-66,921,843),39178=>array(39,-70,964,843),39179=>array(39,-72,976,840),39180=>array(44,-69,958,841),39181=>array(46,-84,950,766),39182=>array(37,-64,982,844),39183=>array(38,-71,966,842),39184=>array(26,-64,974,840),39185=>array(43,-64,948,840),39186=>array(40,-66,959,843),39187=>array(34,-59,964,839),39188=>array(40,-66,944,843),39189=>array(36,-61,984,848),39190=>array(48,-44,953,846),39191=>array(42,-54,960,850),39192=>array(40,-66,971,843),39193=>array(36,-67,961,857),39194=>array(27,-64,956,855),39195=>array(32,-53,964,848),39196=>array(35,-64,980,828),39197=>array(40,-66,947,843),39198=>array(40,-67,959,843),39199=>array(34,-63,981,848),39200=>array(40,-66,957,843),39201=>array(40,-68,912,843),39202=>array(36,-65,956,857),39203=>array(24,-39,977,857),39204=>array(40,-66,961,843),39205=>array(47,-77,982,829),39206=>array(36,-62,978,857),39207=>array(32,-64,968,850),39208=>array(34,-64,931,839),39209=>array(37,-71,972,839),39210=>array(41,-73,990,834),39211=>array(36,-69,956,836),39212=>array(33,-78,918,838),39213=>array(38,-47,958,824),39214=>array(34,-75,943,832),39215=>array(40,-67,989,834),39216=>array(40,-71,959,834),39217=>array(33,-49,964,859),39218=>array(28,-60,915,848),39219=>array(48,-59,959,830),39220=>array(36,-68,963,857),39221=>array(25,-65,978,845),39222=>array(34,-34,947,853),39223=>array(36,-30,969,857),39224=>array(32,-48,975,845),39225=>array(36,-64,954,857),39226=>array(36,-65,951,832),39227=>array(36,-66,960,854),39228=>array(34,-64,971,846),39229=>array(40,-66,960,843),39230=>array(39,-69,932,843),39231=>array(41,-65,971,840),39232=>array(29,-63,950,835),39233=>array(18,-15,966,846),39234=>array(40,-66,959,843),39235=>array(34,-69,972,844),39236=>array(36,-30,964,857),39237=>array(40,-66,957,843),39238=>array(38,-68,950,834),39239=>array(36,-41,956,816),39240=>array(38,-55,955,847),39241=>array(40,-66,948,843),39242=>array(36,-84,957,859),39243=>array(40,-75,954,843),39244=>array(38,-66,959,843),39245=>array(24,-65,962,846),39246=>array(20,-68,956,843),39247=>array(29,-76,982,835),39248=>array(40,-66,953,843),39249=>array(28,-70,968,841),39250=>array(40,-68,962,843),39251=>array(26,-69,983,835),39252=>array(10,-74,957,849),39253=>array(17,-72,972,832),39254=>array(30,-64,967,828),39255=>array(35,-69,955,841),39256=>array(30,-33,960,849),39257=>array(32,-74,970,837),39258=>array(45,-30,929,857),39259=>array(38,-68,971,834),39260=>array(29,-71,982,816),39261=>array(29,-67,950,851),39262=>array(36,-70,960,839),39263=>array(30,-63,982,849),39264=>array(42,-65,956,837),39265=>array(41,-74,964,839),39266=>array(31,-64,983,839),39267=>array(242,2,685,829),39268=>array(31,-43,953,840),39269=>array(32,-60,948,840),39270=>array(31,-26,943,840),39271=>array(30,-66,891,826),39272=>array(25,-38,920,829),39273=>array(20,-67,939,825),39274=>array(40,-13,927,829),39275=>array(41,-69,957,829),39276=>array(41,-70,926,836),39277=>array(48,-71,953,829),39278=>array(47,-68,949,836),39279=>array(43,-58,953,836),39280=>array(42,-73,946,842),39281=>array(37,-28,946,835),39282=>array(41,-68,895,836),39283=>array(45,-68,911,830),39284=>array(41,-57,940,839),39285=>array(33,-67,927,829),39286=>array(36,-73,964,821),39287=>array(41,-66,912,841),39288=>array(49,-60,956,844),39289=>array(32,-65,975,837),39290=>array(42,-65,950,835),39291=>array(41,-71,966,836),39292=>array(39,-72,946,841),39293=>array(41,-65,931,831),39294=>array(41,-36,953,829),39295=>array(44,-61,946,829),39296=>array(41,-65,959,840),39297=>array(41,-79,946,831),39298=>array(36,-61,972,848),39299=>array(32,-68,964,825),39300=>array(40,-60,955,825),39301=>array(42,-70,881,838),39302=>array(47,-67,913,844),39303=>array(26,-16,947,821),39304=>array(37,-64,949,828),39305=>array(38,-71,943,829),39306=>array(41,-68,954,829),39307=>array(34,-68,960,827),39308=>array(48,-53,947,833),39309=>array(35,-71,935,817),39310=>array(43,-65,962,835),39311=>array(44,-67,916,838),39312=>array(27,-67,937,836),39313=>array(31,-43,938,813),39314=>array(27,-65,951,829),39315=>array(26,-90,955,822),39316=>array(29,-64,942,828),39317=>array(30,-81,948,821),39318=>array(95,-67,926,843),39319=>array(34,-64,959,831),39320=>array(55,-65,964,834),39321=>array(40,-65,955,817),39322=>array(40,-62,973,823),39323=>array(40,-74,966,841),39324=>array(40,-71,971,821),39325=>array(33,-77,965,828),39326=>array(44,-68,963,830),39327=>array(59,-68,958,827),39328=>array(70,-70,971,832),39329=>array(52,-69,956,824),39330=>array(34,-68,956,832),39331=>array(37,-62,975,833),39332=>array(48,-62,940,839),39333=>array(18,-62,974,838),39334=>array(33,-68,988,835),39335=>array(33,-61,983,839),39336=>array(28,-69,972,844),39337=>array(28,-67,956,839),39338=>array(33,-78,974,844),39339=>array(45,-70,975,816),39340=>array(56,-65,909,776),39341=>array(35,-68,964,790),39342=>array(52,-64,912,784),39343=>array(45,-73,950,781),39344=>array(56,-62,920,829),39345=>array(49,-63,964,833),39346=>array(36,-63,949,809),39347=>array(47,-62,951,836),39348=>array(53,-57,893,829),39349=>array(53,-69,947,782),39350=>array(30,-67,965,835),39351=>array(45,-62,954,840),39352=>array(45,-53,930,812),39353=>array(45,-52,891,803),39354=>array(32,-74,981,780),39355=>array(35,-71,978,825),39356=>array(40,-65,964,793),39357=>array(46,-68,909,783),39358=>array(25,-66,969,831),39359=>array(38,-57,931,827),39360=>array(45,-55,970,831),39361=>array(47,-66,967,826),39362=>array(55,-74,924,812),39363=>array(53,-69,982,826),39364=>array(45,-69,961,833),39365=>array(45,-66,973,797),39366=>array(27,-52,948,799),39367=>array(47,-76,988,832),39368=>array(28,-48,954,814),39369=>array(39,-66,905,785),39370=>array(45,-63,1002,841),39371=>array(45,-71,921,785),39372=>array(47,-68,965,833),39373=>array(42,-70,954,783),39374=>array(38,-68,906,823),39375=>array(40,-69,954,782),39376=>array(49,-57,956,829),39377=>array(48,-68,937,847),39378=>array(36,-62,919,845),39379=>array(39,-63,971,783),39380=>array(43,-63,957,790),39381=>array(56,-65,897,836),39382=>array(43,-73,981,842),39383=>array(47,-74,987,833),39384=>array(45,-60,964,839),39385=>array(28,-64,962,837),39386=>array(34,-66,972,827),39387=>array(37,-62,961,833),39388=>array(46,-66,974,830),39389=>array(55,-61,943,795),39390=>array(28,-55,962,829),39391=>array(43,-58,916,788),39392=>array(35,-71,938,823),39393=>array(39,-66,911,789),39394=>array(27,-73,962,835),39395=>array(42,-70,966,826),39396=>array(37,-72,959,780),39397=>array(39,-71,969,832),39398=>array(49,-62,957,830),39399=>array(46,-68,918,786),39400=>array(45,-60,944,836),39401=>array(35,-66,975,787),39402=>array(34,-71,964,826),39403=>array(45,-66,990,831),39404=>array(35,-71,957,786),39405=>array(46,-60,949,804),39406=>array(40,-60,961,820),39407=>array(45,-65,966,836),39408=>array(54,-67,924,785),39409=>array(64,-62,972,839),39410=>array(45,-65,927,835),39411=>array(33,-66,968,834),39412=>array(46,-66,975,824),39413=>array(30,-57,965,799),39414=>array(43,-65,927,783),39415=>array(37,-66,985,828),39416=>array(35,-61,946,788),39417=>array(31,-67,967,825),39418=>array(43,-73,980,838),39419=>array(46,-59,959,792),39420=>array(29,-77,974,834),39421=>array(53,-65,927,788),39422=>array(44,-67,966,814),39423=>array(44,-69,967,849),39424=>array(42,-63,951,831),39425=>array(42,-63,949,836),39426=>array(52,-59,954,853),39427=>array(42,-58,973,861),39428=>array(39,-65,974,829),39429=>array(48,-66,957,836),39430=>array(53,-74,927,782),39431=>array(37,-65,991,832),39432=>array(42,-64,953,843),39433=>array(32,-63,979,786),39434=>array(64,-63,924,832),39435=>array(33,-65,981,829),39436=>array(42,-65,958,845),39437=>array(45,-65,982,790),39438=>array(44,-62,956,834),39439=>array(33,-71,970,831),39440=>array(42,-63,956,845),39441=>array(39,-58,952,844),39442=>array(49,-64,963,791),39443=>array(48,-63,973,837),39444=>array(46,-66,937,787),39445=>array(35,-69,956,785),39446=>array(60,-68,958,845),39447=>array(32,-58,969,833),39448=>array(27,-63,974,850),39449=>array(39,-66,933,807),39450=>array(39,-62,960,835),39451=>array(29,-73,968,780),39452=>array(41,-65,970,843),39453=>array(25,-68,977,828),39454=>array(40,-70,967,828),39455=>array(32,-63,937,862),39456=>array(48,-75,988,781),39457=>array(42,-66,957,842),39458=>array(30,-68,980,784),39459=>array(40,-57,960,849),39460=>array(44,-68,978,841),39461=>array(33,-67,984,788),39462=>array(42,-63,968,788),39463=>array(48,-48,917,809),39464=>array(42,-73,945,843),39465=>array(47,-68,979,838),39466=>array(48,-64,973,831),39467=>array(37,-61,976,837),39468=>array(41,-65,984,838),39469=>array(54,-71,939,830),39470=>array(46,-64,924,834),39471=>array(27,-65,939,843),39472=>array(40,-72,967,840),39473=>array(29,-63,972,840),39474=>array(56,-64,965,830),39475=>array(42,-63,944,788),39476=>array(35,-65,955,788),39477=>array(44,-74,967,783),39478=>array(58,-66,923,849),39479=>array(49,-64,970,791),39480=>array(51,-63,941,840),39481=>array(20,-63,966,812),39482=>array(55,-69,959,829),39483=>array(37,-63,968,834),39484=>array(31,-63,965,843),39485=>array(48,-64,922,787),39486=>array(30,-73,961,801),39487=>array(36,-75,959,832),39488=>array(57,-69,968,832),39489=>array(58,-68,956,847),39490=>array(40,-71,984,857),39491=>array(33,-63,949,792),39492=>array(28,-63,973,837),39493=>array(46,-66,951,794),39494=>array(50,-64,958,787),39495=>array(54,-66,946,830),39496=>array(52,-63,937,789),39497=>array(40,-55,955,831),39498=>array(29,-68,962,836),39499=>array(22,-62,989,846),39500=>array(31,-64,962,837),39501=>array(35,-65,967,837),39502=>array(23,-51,943,844),39503=>array(51,-72,963,789),39504=>array(45,-63,980,835),39505=>array(27,-71,956,797),39506=>array(48,-62,948,791),39507=>array(53,-69,924,831),39508=>array(42,-64,961,789),39509=>array(48,-56,979,833),39510=>array(35,-68,977,837),39511=>array(37,-70,962,846),39512=>array(41,-67,973,843),39513=>array(36,-60,964,852),39514=>array(52,-65,951,846),39515=>array(25,-62,945,788),39516=>array(54,-68,951,825),39517=>array(37,-77,962,844),39518=>array(36,-78,974,844),39519=>array(34,-61,964,791),39520=>array(41,-74,970,824),39521=>array(46,-53,964,839),39522=>array(38,-64,951,836),39523=>array(26,-63,972,845),39524=>array(50,-75,976,833),39525=>array(27,-70,955,834),39526=>array(49,-61,930,789),39527=>array(35,-62,937,832),39528=>array(45,-66,927,826),39529=>array(52,-60,959,829),39530=>array(26,-73,964,789),39531=>array(57,-62,938,803),39532=>array(83,-57,892,790),39533=>array(64,-70,945,789),39534=>array(69,-65,947,831),39535=>array(64,-58,876,826),39536=>array(72,-55,933,834),39537=>array(40,-54,926,786),39538=>array(68,-58,891,803),39539=>array(43,-69,951,844),39540=>array(41,-55,896,845),39541=>array(37,-60,936,784),39542=>array(58,-70,953,831),39543=>array(49,-57,897,778),39544=>array(51,-66,940,835),39545=>array(91,-60,914,844),39546=>array(34,-59,872,822),39547=>array(47,-57,942,842),39548=>array(72,-57,926,839),39549=>array(29,-62,944,826),39550=>array(44,-60,912,831),39551=>array(42,-73,959,772),39552=>array(47,-63,949,840),39553=>array(36,-62,941,824),39554=>array(84,-59,890,787),39555=>array(57,-58,924,785),39556=>array(33,-62,940,836),39557=>array(42,-71,941,823),39558=>array(66,-64,953,836),39559=>array(59,-63,933,848),39560=>array(47,-75,945,847),39561=>array(39,-67,936,820),39562=>array(41,-65,920,768),39563=>array(62,-60,950,834),39564=>array(33,-63,943,835),39565=>array(62,-59,954,853),39566=>array(33,-68,968,786),39567=>array(61,-69,943,833),39568=>array(47,-73,949,829),39569=>array(61,-64,939,828),39570=>array(47,-67,956,788),39571=>array(57,-65,941,834),39572=>array(47,-65,958,845),39573=>array(33,-73,957,833),39574=>array(44,-74,953,833),39575=>array(37,-63,927,833),39576=>array(89,-63,934,829),39577=>array(47,-68,978,841),39578=>array(57,-66,953,789),39579=>array(43,-69,954,828),39580=>array(36,-73,951,831),39581=>array(57,-66,904,826),39582=>array(33,-62,947,840),39583=>array(55,-64,901,834),39584=>array(57,-62,944,789),39585=>array(64,-62,936,787),39586=>array(57,-55,956,836),39587=>array(53,-69,942,782),39588=>array(26,-73,953,779),39589=>array(49,-72,936,834),39590=>array(49,-62,931,790),39591=>array(48,-67,952,834),39592=>array(101,-55,899,806),39593=>array(79,-68,965,822),39594=>array(59,-67,978,787),39595=>array(78,-68,964,822),39596=>array(76,-63,967,791),39597=>array(76,-53,951,801),39598=>array(70,-52,967,825),39599=>array(91,-66,958,844),39600=>array(60,-68,963,783),39601=>array(62,-67,952,845),39602=>array(90,-60,967,849),39603=>array(82,-72,973,829),39604=>array(65,-68,958,824),39605=>array(54,-54,971,839),39606=>array(69,-65,962,826),39607=>array(74,-67,948,833),39608=>array(57,-62,958,824),39609=>array(68,-71,961,838),39610=>array(62,-74,945,829),39611=>array(78,-69,962,829),39612=>array(47,-71,937,838),39613=>array(37,-74,959,835),39614=>array(78,-51,970,810),39615=>array(78,-70,953,835),39616=>array(58,-69,930,844),39617=>array(61,-68,964,786),39618=>array(63,-68,957,848),39619=>array(42,-73,943,783),39620=>array(46,-57,967,839),39621=>array(61,-70,940,807),39622=>array(74,-68,947,835),39623=>array(71,-65,941,840),39624=>array(52,-71,954,843),39625=>array(32,-71,959,841),39626=>array(65,-66,948,831),39627=>array(43,-72,938,825),39628=>array(67,-76,937,818),39629=>array(51,-64,968,837),39630=>array(69,-74,962,789),39631=>array(55,-66,941,841),39632=>array(62,-64,956,829),39633=>array(67,-67,908,783),39634=>array(80,-64,958,833),39635=>array(51,-72,947,837),39636=>array(79,-70,934,829),39637=>array(69,-53,955,862),39638=>array(57,-67,948,849),39639=>array(84,-64,954,836),39640=>array(102,-67,916,828),39641=>array(102,-67,916,833),39642=>array(70,-67,958,848),39643=>array(47,-66,968,849),39644=>array(70,-71,956,847),39645=>array(74,-68,926,848),39646=>array(56,-67,946,840),39647=>array(68,-50,956,847),39648=>array(39,-58,963,837),39649=>array(51,-62,961,832),39650=>array(51,-21,953,832),39651=>array(51,-59,957,832),39652=>array(31,-64,973,846),39653=>array(63,-61,967,839),39654=>array(51,-34,955,834),39655=>array(32,-67,967,839),39656=>array(34,-58,964,839),39657=>array(58,-59,959,782),39658=>array(51,-61,956,853),39659=>array(62,-64,970,844),39660=>array(39,-25,964,829),39661=>array(46,-44,962,853),39662=>array(51,-61,956,853),39663=>array(65,-64,969,839),39664=>array(72,-37,948,823),39665=>array(40,-43,966,830),39666=>array(39,-73,958,832),39667=>array(65,-50,938,849),39668=>array(55,-65,950,833),39669=>array(44,-70,949,837),39670=>array(50,-70,957,832),39671=>array(69,-67,957,835),39672=>array(44,-69,948,837),39673=>array(53,-64,989,841),39674=>array(60,-68,948,832),39675=>array(66,-63,957,836),39676=>array(52,-65,966,845),39677=>array(55,-31,956,840),39678=>array(62,-74,952,834),39679=>array(61,-57,981,856),39680=>array(35,-71,962,857),39681=>array(60,-50,942,857),39682=>array(51,-51,942,857),39683=>array(74,-59,955,834),39684=>array(59,-64,965,843),39685=>array(44,-68,962,828),39686=>array(41,-70,964,846),39687=>array(47,-50,964,853),39688=>array(29,-32,968,842),39689=>array(60,-66,956,831),39690=>array(52,-72,973,834),39691=>array(58,-64,954,849),39692=>array(40,-67,967,835),39693=>array(68,-68,949,846),39694=>array(49,-53,943,851),39695=>array(35,-69,942,825),39696=>array(65,-63,955,847),39697=>array(39,-50,965,853),39698=>array(40,-59,954,853),39699=>array(59,-83,903,824),39700=>array(53,-72,979,836),39701=>array(57,-77,971,856),39702=>array(50,-56,969,851),39703=>array(62,-70,968,838),39704=>array(46,-65,980,851),39705=>array(72,-55,961,851),39706=>array(48,-68,957,841),39707=>array(53,-66,955,829),39708=>array(38,-61,938,823),39709=>array(38,-61,938,823),39710=>array(38,-63,966,846),39711=>array(24,-68,949,839),39712=>array(50,-80,966,852),39713=>array(40,-45,932,855),39714=>array(58,-69,959,837),39715=>array(41,-62,944,839),39716=>array(52,-71,958,845),39717=>array(116,-71,891,826),39718=>array(116,-71,891,826),39719=>array(116,-61,893,835),39720=>array(118,-63,894,830),39721=>array(115,-65,898,832),39722=>array(102,-57,897,839),39723=>array(105,-55,901,840),39724=>array(107,-61,907,833),39725=>array(99,-71,901,823),39726=>array(110,-65,917,832),39727=>array(122,-24,909,826),39728=>array(53,-79,953,840),39729=>array(53,-58,952,845),39730=>array(72,-64,945,791),39731=>array(41,-68,927,826),39732=>array(60,-70,948,833),39733=>array(51,-64,955,783),39734=>array(54,-40,969,838),39735=>array(60,-67,977,826),39736=>array(40,-64,923,834),39737=>array(54,-50,939,813),39738=>array(55,-69,952,830),39739=>array(72,-64,927,830),39740=>array(45,-58,962,850),39741=>array(49,-62,973,836),39742=>array(49,-75,973,836),39743=>array(53,-66,968,843),39744=>array(37,-65,962,843),39745=>array(26,-76,959,848),39746=>array(46,-62,960,857),39747=>array(40,-35,941,840),39748=>array(74,-38,952,854),39749=>array(35,-66,962,839),39750=>array(39,-77,977,845),39751=>array(47,-75,960,770),39752=>array(34,-67,968,844),39753=>array(21,-69,929,823),39754=>array(34,-67,977,841),39755=>array(46,-76,961,842),39756=>array(38,-68,963,843),39757=>array(39,-48,960,841),39758=>array(38,-63,970,847),39759=>array(39,-70,966,836),39760=>array(26,-76,957,849),39761=>array(38,-63,966,841),39762=>array(28,-68,956,846),39763=>array(28,-56,956,849),39764=>array(27,-69,960,840),39765=>array(35,-75,970,834),39766=>array(38,-70,964,836),39767=>array(58,-70,960,851),39768=>array(44,-68,947,797),39769=>array(51,-70,965,831),39770=>array(43,-70,956,849),39771=>array(43,-66,894,841),39772=>array(88,-73,976,841),39773=>array(61,-65,887,841),39774=>array(43,-45,958,841),39775=>array(33,-48,957,842),39776=>array(35,-49,949,844),39777=>array(31,-71,916,839),39778=>array(31,-49,973,839),39779=>array(31,-61,945,839),39780=>array(41,-73,979,832),39781=>array(31,-49,976,839),39782=>array(39,-66,966,832),39783=>array(35,-70,976,835),39784=>array(35,-32,959,846),39785=>array(31,-49,931,839),39786=>array(31,-49,969,839),39787=>array(31,-49,969,839),39788=>array(40,-78,963,834),39789=>array(31,-49,955,839),39790=>array(31,-49,974,839),39791=>array(51,-68,947,837),39792=>array(39,-74,978,834),39793=>array(38,-32,954,835),39794=>array(31,-49,952,839),39795=>array(31,-74,948,839),39796=>array(34,-73,953,837),39797=>array(41,-62,973,837),39798=>array(34,-65,905,834),39799=>array(43,-64,966,841),39800=>array(31,-49,950,839),39801=>array(31,-56,954,839),39802=>array(47,-71,964,836),39803=>array(57,-69,919,833),39804=>array(48,-70,963,830),39805=>array(42,-70,961,831),39806=>array(44,-52,964,819),39807=>array(31,-73,981,842),39808=>array(38,-38,948,852),39809=>array(31,-61,962,839),39810=>array(52,-64,914,832),39811=>array(44,-65,948,843),39812=>array(16,-62,932,839),39813=>array(45,-67,982,831),39814=>array(44,-58,963,850),39815=>array(38,-67,976,837),39816=>array(52,-70,927,830),39817=>array(31,-70,950,839),39818=>array(33,-66,886,843),39819=>array(31,-69,944,839),39820=>array(31,-71,961,840),39821=>array(31,-73,971,839),39822=>array(45,-64,957,838),39823=>array(31,-49,947,839),39824=>array(42,-65,960,839),39825=>array(44,-46,967,844),39826=>array(39,-60,959,851),39827=>array(48,-61,961,845),39828=>array(31,-49,933,839),39829=>array(57,-71,970,838),39830=>array(31,-49,935,839),39831=>array(31,-77,948,839),39832=>array(44,-54,935,836),39833=>array(31,-49,908,839),39834=>array(44,-62,958,839),39835=>array(31,-75,976,834),39836=>array(31,-63,953,839),39837=>array(14,-67,991,836),39838=>array(51,-67,970,839),39839=>array(31,-51,964,839),39840=>array(33,-55,954,849),39841=>array(40,-69,972,833),39842=>array(46,-78,995,829),39843=>array(45,-67,915,839),39844=>array(55,-76,954,826),39845=>array(38,-69,984,840),39846=>array(36,-61,910,842),39847=>array(31,-49,954,839),39848=>array(40,-39,953,844),39849=>array(31,-49,937,853),39850=>array(44,-67,959,839),39851=>array(48,-66,959,843),39852=>array(31,-62,961,843),39853=>array(35,-39,967,847),39854=>array(44,-60,960,843),39855=>array(32,-72,974,834),39856=>array(31,-49,939,839),39857=>array(31,-49,949,839),39858=>array(30,-61,979,839),39859=>array(38,-55,945,835),39860=>array(45,-71,982,839),39861=>array(36,-67,966,834),39862=>array(41,-70,965,841),39863=>array(11,-49,939,839),39864=>array(43,-61,978,845),39865=>array(33,-65,944,836),39866=>array(18,-57,948,836),39867=>array(31,-49,975,839),39868=>array(31,-49,972,839),39869=>array(29,-68,979,832),39870=>array(11,-54,959,839),39871=>array(33,-53,962,845),39872=>array(49,-52,979,840),39873=>array(39,-67,978,840),39874=>array(39,-56,937,839),39875=>array(39,-65,961,839),39876=>array(28,-64,979,842),39877=>array(28,-66,983,842),39878=>array(36,-67,957,839),39879=>array(41,-65,965,845),39880=>array(41,-71,977,840),39881=>array(45,-52,954,833),39882=>array(48,-70,960,836),39883=>array(29,-37,980,841),39884=>array(45,-61,954,833),39885=>array(41,-68,964,842),39886=>array(26,-68,961,841),39887=>array(36,-45,914,853),39888=>array(41,-43,955,841),39889=>array(41,-49,964,841),39890=>array(41,-49,945,841),39891=>array(43,-70,964,842),39892=>array(44,-64,950,846),39893=>array(32,-79,974,839),39894=>array(35,-59,964,843),39895=>array(32,-65,971,854),39896=>array(32,-69,968,840),39897=>array(35,-67,962,842),39898=>array(31,-65,988,838),39899=>array(51,-65,916,839),39900=>array(30,-68,971,841),39901=>array(-15,-70,916,841),39902=>array(39,-74,964,825),39903=>array(29,-57,992,827),39904=>array(32,-65,990,831),39905=>array(46,-62,957,846),39906=>array(38,-48,965,845),39907=>array(38,-64,953,845),39908=>array(42,-63,971,836),39909=>array(32,-39,960,841),39910=>array(29,-62,986,838),39911=>array(49,-64,914,854),39912=>array(44,-62,972,843),39913=>array(33,-68,985,868),39914=>array(43,-67,986,839),39915=>array(32,-62,971,842),39916=>array(35,-72,988,836),39917=>array(37,-44,957,796),39918=>array(42,-65,958,845),39919=>array(46,-67,945,837),39920=>array(44,-33,972,851),39921=>array(42,-74,962,836),39922=>array(53,-73,961,828),39923=>array(34,-62,962,841),39924=>array(33,-62,946,836),39925=>array(65,-81,956,834),39926=>array(42,-63,938,836),39927=>array(43,-68,978,843),39928=>array(39,-67,983,837),39929=>array(42,-45,945,836),39930=>array(42,-64,953,837),39931=>array(43,-63,930,837),39932=>array(42,-57,980,849),39933=>array(52,-65,929,837),39934=>array(42,-69,963,836),39935=>array(47,-62,923,848),39936=>array(44,-64,940,847),39937=>array(49,-64,973,847),39938=>array(37,-59,909,840),39939=>array(49,-57,973,847),39940=>array(43,-40,970,847),39941=>array(49,-61,932,847),39942=>array(39,-61,973,843),39943=>array(43,-64,996,845),39944=>array(37,-67,973,836),39945=>array(39,-45,954,847),39946=>array(54,-53,968,847),39947=>array(24,-36,953,834),39948=>array(33,-70,972,829),39949=>array(31,-67,978,837),39950=>array(35,-73,984,838),39951=>array(49,-65,963,847),39952=>array(38,-61,958,844),39953=>array(49,-45,951,847),39954=>array(35,-64,973,844),39955=>array(38,-44,968,849),39956=>array(44,-66,977,835),39957=>array(37,-63,963,827),39958=>array(51,-64,942,848),39959=>array(44,-70,930,834),39960=>array(49,-26,943,843),39961=>array(24,-60,973,847),39962=>array(49,-21,949,855),39963=>array(44,-39,974,826),39964=>array(30,-64,975,852),39965=>array(39,-68,959,838),39966=>array(24,-60,953,847),39967=>array(49,-65,949,847),39968=>array(49,-66,966,847),39969=>array(43,-65,931,837),39970=>array(49,-63,949,847),39971=>array(34,-62,958,836),39972=>array(33,-65,958,845),39973=>array(38,-72,964,828),39974=>array(69,-56,943,847),39975=>array(34,-67,963,836),39976=>array(56,-61,927,844),39977=>array(37,-62,962,845),39978=>array(29,-26,967,847),39979=>array(43,-64,978,838),39980=>array(37,-66,982,830),39981=>array(42,-65,965,843),39982=>array(44,-39,974,826),39983=>array(34,-65,937,839),39984=>array(53,-66,944,839),39985=>array(41,-74,967,838),39986=>array(47,-69,953,840),39987=>array(51,-74,936,835),39988=>array(32,-68,970,831),39989=>array(41,-76,958,845),39990=>array(24,-65,986,839),39991=>array(29,-62,970,845),39992=>array(39,-21,966,847),39993=>array(35,-21,973,845),39994=>array(33,-73,976,862),39995=>array(35,-65,978,837),39996=>array(40,-64,915,837),39997=>array(32,-53,961,849),39998=>array(37,-62,957,838),39999=>array(36,-74,980,839),40000=>array(59,-71,961,791),40001=>array(34,-66,979,843),40002=>array(42,-65,968,847),40003=>array(44,-63,929,847),40004=>array(38,-63,956,845),40005=>array(41,-73,959,851),40006=>array(38,-64,962,849),40007=>array(38,-59,966,846),40008=>array(35,-56,939,841),40009=>array(41,-72,973,835),40010=>array(41,-67,951,835),40011=>array(31,-71,965,837),40012=>array(24,-63,989,845),40013=>array(28,-68,978,841),40014=>array(30,-69,984,840),40015=>array(49,-63,966,847),40016=>array(37,-70,967,839),40017=>array(34,-59,968,847),40018=>array(35,-62,956,855),40019=>array(38,-62,953,831),40020=>array(32,-64,962,851),40021=>array(30,-68,984,842),40022=>array(29,-68,970,842),40023=>array(31,-68,965,843),40024=>array(40,-59,965,842),40025=>array(27,-70,984,837),40026=>array(27,-65,953,837),40027=>array(49,-68,950,847),40028=>array(26,-67,962,845),40029=>array(29,-60,973,847),40030=>array(39,-68,983,831),40031=>array(53,-68,974,848),40032=>array(25,-61,984,861),40033=>array(32,-62,974,838),40034=>array(41,-65,992,830),40035=>array(32,-35,964,849),40036=>array(58,-40,930,839),40037=>array(38,-71,959,839),40038=>array(36,-56,976,822),40039=>array(36,-28,965,842),40040=>array(34,-48,954,854),40041=>array(29,-70,951,854),40042=>array(34,-64,974,834),40043=>array(25,-68,979,854),40044=>array(24,-70,967,854),40045=>array(39,-62,957,852),40046=>array(29,-56,956,848),40047=>array(39,-64,995,847),40048=>array(29,-63,960,854),40049=>array(38,-67,945,838),40050=>array(22,-59,970,854),40051=>array(38,-65,967,843),40052=>array(36,-69,971,841),40053=>array(27,-55,964,858),40054=>array(40,-73,963,837),40055=>array(39,-29,956,839),40056=>array(36,-60,962,851),40057=>array(48,-67,965,841),40058=>array(35,-68,966,828),40059=>array(59,-73,948,824),40060=>array(78,-15,929,826),40061=>array(22,-73,934,841),40062=>array(31,-29,973,839),40063=>array(29,-65,965,841),40064=>array(22,-46,945,841),40065=>array(44,-53,925,849),40066=>array(39,-75,936,836),40067=>array(22,-32,974,841),40068=>array(22,-71,964,841),40069=>array(30,-68,967,838),40070=>array(24,-72,945,824),40071=>array(22,-74,903,841),40072=>array(22,-72,920,817),40073=>array(22,-69,919,841),40074=>array(22,-61,961,845),40075=>array(24,-62,943,840),40076=>array(22,-66,886,843),40077=>array(22,-30,950,843),40078=>array(74,-13,926,822),40079=>array(22,-73,951,841),40080=>array(39,-67,942,834),40081=>array(39,-29,950,839),40082=>array(24,-64,941,828),40083=>array(29,-55,945,837),40084=>array(24,-69,942,838),40085=>array(28,-70,956,824),40086=>array(22,-61,941,841),40087=>array(33,-65,913,840),40088=>array(22,-63,953,841),40089=>array(22,-55,977,840),40090=>array(12,-76,937,836),40091=>array(39,-69,943,844),40092=>array(27,-61,938,846),40093=>array(54,-37,955,823),40094=>array(25,-42,942,830),40095=>array(21,-68,923,821),40096=>array(25,-69,961,830),40097=>array(0,-59,921,818),40098=>array(16,-49,937,822),40099=>array(19,-20,943,834),40100=>array(39,-23,937,828),40101=>array(24,-68,920,829),40102=>array(23,-64,956,832),40103=>array(33,-63,962,831),40104=>array(60,-48,918,822),40105=>array(25,-67,947,842),40106=>array(22,-69,965,841),40107=>array(31,-67,912,836),40108=>array(22,-44,930,841),40109=>array(24,-61,947,834),40110=>array(25,-69,969,834),40111=>array(22,-79,974,841),40112=>array(19,-64,955,825),40113=>array(32,-64,941,830),40114=>array(24,-60,953,824),40115=>array(39,-66,897,828),40116=>array(22,-70,881,816),40117=>array(24,-72,947,824),40118=>array(31,-32,956,849),40119=>array(25,-66,899,830),40120=>array(39,-64,947,846),40121=>array(25,-79,972,839),40122=>array(16,-68,943,819),40123=>array(25,-66,933,834),40124=>array(27,-80,918,825),40125=>array(25,-69,957,830),40126=>array(22,-65,963,841),40127=>array(24,-58,957,841),40128=>array(22,-68,988,841),40129=>array(22,-39,982,841),40130=>array(22,-57,983,841),40131=>array(34,-31,951,842),40132=>array(20,-66,939,812),40133=>array(18,-70,961,828),40134=>array(25,-66,956,842),40135=>array(24,-44,937,844),40136=>array(22,-64,973,844),40137=>array(34,-61,954,841),40138=>array(25,-77,911,836),40139=>array(24,-67,953,822),40140=>array(35,-50,931,820),40141=>array(24,-67,941,834),40142=>array(24,-63,910,824),40143=>array(25,-66,950,830),40144=>array(47,-67,941,824),40145=>array(22,-65,949,843),40146=>array(22,-64,975,852),40147=>array(33,-75,917,828),40148=>array(25,-64,957,830),40149=>array(25,-69,922,830),40150=>array(41,-40,945,835),40151=>array(25,-68,965,836),40152=>array(53,-38,955,836),40153=>array(25,-84,943,840),40154=>array(16,-67,984,868),40155=>array(22,-67,957,841),40156=>array(19,-69,953,825),40157=>array(25,-66,945,848),40158=>array(25,-68,945,834),40159=>array(35,-65,953,851),40160=>array(22,-64,995,841),40161=>array(41,-33,959,841),40162=>array(25,-32,948,833),40163=>array(24,-35,976,849),40164=>array(43,-67,957,856),40165=>array(66,-59,887,852),40166=>array(34,-65,952,847),40167=>array(58,-58,960,842),40168=>array(43,-64,957,848),40169=>array(48,-63,930,849),40170=>array(177,-69,927,843),40171=>array(41,-68,927,788),40172=>array(52,-62,960,851),40173=>array(31,-73,951,841),40174=>array(39,-73,961,841),40175=>array(46,-60,965,796),40176=>array(43,-71,957,840),40177=>array(58,-75,956,840),40178=>array(33,-48,955,861),40179=>array(46,-60,965,796),40180=>array(109,-63,909,851),40181=>array(59,-67,952,841),40182=>array(52,-57,949,850),40183=>array(47,-69,964,846),40184=>array(46,-73,954,835),40185=>array(35,-70,954,847),40186=>array(40,-65,955,846),40187=>array(39,-78,954,841),40188=>array(46,-52,976,864),40189=>array(35,-75,959,844),40190=>array(57,-76,943,841),40191=>array(42,-71,939,841),40192=>array(36,-72,951,848),40193=>array(31,-72,951,848),40194=>array(17,-73,951,848),40195=>array(48,-70,972,840),40196=>array(63,-74,963,843),40197=>array(49,-75,957,838),40198=>array(45,-68,942,841),40199=>array(65,-65,923,848),40200=>array(46,-63,947,791),40201=>array(46,-64,924,842),40202=>array(38,-64,924,842),40203=>array(39,-68,924,842),40204=>array(34,-68,996,781),40205=>array(40,-68,959,844),40206=>array(96,-70,924,836),40207=>array(29,-80,971,851),40208=>array(61,-68,944,833),40209=>array(68,-68,947,847),40210=>array(41,-65,926,838),40211=>array(54,-71,946,835),40212=>array(45,-68,958,835),40213=>array(41,-61,946,841),40214=>array(33,-61,967,853),40215=>array(60,-71,941,843),40216=>array(43,-75,956,839),40217=>array(52,-68,953,844),40218=>array(26,-62,960,841),40219=>array(46,-67,951,840),40220=>array(62,-67,932,827),40221=>array(36,-58,918,849),40222=>array(72,-55,926,845),40223=>array(68,-58,921,846),40224=>array(61,-68,946,843),40225=>array(42,-58,946,853),40226=>array(51,-72,950,838),40227=>array(66,-60,923,845),40228=>array(25,-77,975,843),40229=>array(38,-72,979,841),40230=>array(34,-63,971,842),40231=>array(51,-68,956,835),40232=>array(113,-79,916,843),40233=>array(45,-75,959,835),40234=>array(61,-56,956,841),40235=>array(113,-67,916,843),40236=>array(63,-67,893,821),40237=>array(107,-63,943,841),40238=>array(37,-70,955,836),40239=>array(59,-59,916,845),40240=>array(71,-61,930,847),40241=>array(46,-63,955,841),40242=>array(59,-66,943,841),40243=>array(57,-66,966,838),40244=>array(37,-63,944,849),40245=>array(27,-66,965,841),40246=>array(56,-64,954,840),40247=>array(57,-68,908,824),40248=>array(43,-67,956,843),40249=>array(76,-63,956,855),40250=>array(44,-63,961,839),40251=>array(48,-57,919,853),40252=>array(29,-61,971,856),40253=>array(55,-43,924,850),40254=>array(65,-67,957,841),40255=>array(49,-67,924,844),40256=>array(43,-47,951,858),40257=>array(37,-67,957,839),40258=>array(39,-71,916,842),40259=>array(37,-67,951,841),40260=>array(53,-60,933,843),40261=>array(38,-69,963,838),40262=>array(35,-70,943,855),40263=>array(41,-68,959,841),40264=>array(40,-70,949,841),40265=>array(62,-55,938,808),40266=>array(46,-68,954,841),40267=>array(34,-69,948,840),40268=>array(26,-67,981,840),40269=>array(34,-69,966,840),40270=>array(36,-73,964,840),40271=>array(55,-61,945,846),40272=>array(18,-69,970,847),40273=>array(108,-68,915,838),40274=>array(28,-68,914,842),40275=>array(71,-61,926,845),40276=>array(31,-73,971,847),40277=>array(34,-70,959,840),40278=>array(104,-68,942,846),40279=>array(33,-67,949,840),40280=>array(38,-71,952,839),40281=>array(47,-68,951,841),40282=>array(45,-67,963,841),40283=>array(54,-71,950,840),40284=>array(53,-61,930,843),40285=>array(68,-60,924,840),40286=>array(53,-73,952,847),40287=>array(48,-69,945,839),40288=>array(70,-62,933,842),40289=>array(61,-63,933,842),40290=>array(48,-69,946,845),40291=>array(42,-69,958,840),40292=>array(43,-69,948,850),40293=>array(67,-62,920,834),40294=>array(37,-68,966,839),40295=>array(48,-71,955,838),40296=>array(23,-68,965,845),40297=>array(37,-69,956,841),40298=>array(50,-60,925,849),40299=>array(59,-72,950,841),40300=>array(63,-77,928,849),40301=>array(24,-65,949,844),40302=>array(44,-65,956,844),40303=>array(65,-58,926,853),40304=>array(57,-55,927,851),40305=>array(33,-70,969,848),40306=>array(60,-61,931,841),40307=>array(37,-70,959,841),40308=>array(28,-67,967,848),40309=>array(34,-68,960,846),40310=>array(52,-65,943,844),40311=>array(37,-61,918,848),40312=>array(58,-68,968,847),40313=>array(49,-64,942,838),40314=>array(37,-75,950,841),40315=>array(51,-64,967,847),40316=>array(44,-68,940,844),40317=>array(49,-66,963,849),40318=>array(57,-69,943,840),40319=>array(34,-66,957,851),40320=>array(28,-73,969,853),40321=>array(43,-65,959,847),40322=>array(51,-68,956,835),40323=>array(27,-69,973,840),40324=>array(62,-74,961,852),40325=>array(51,-65,958,849),40326=>array(40,-68,966,847),40327=>array(42,-68,947,844),40328=>array(50,-74,962,841),40329=>array(54,-62,922,845),40330=>array(26,-68,917,848),40331=>array(41,-72,962,840),40332=>array(37,-63,958,852),40333=>array(35,-69,965,840),40334=>array(34,-69,966,850),40335=>array(42,-68,955,842),40336=>array(52,-63,953,839),40337=>array(61,-74,939,827),40338=>array(33,-65,963,838),40339=>array(53,-65,911,846),40340=>array(48,-63,961,844),40341=>array(57,-69,943,840),40342=>array(41,-67,957,834),40343=>array(46,-62,967,842),40344=>array(62,-64,927,844),40345=>array(67,-62,956,850),40346=>array(71,-59,927,846),40347=>array(55,-65,948,838),40348=>array(46,-70,968,838),40349=>array(61,-66,951,842),40350=>array(36,-63,956,840),40351=>array(50,-65,957,843),40352=>array(69,-64,949,834),40353=>array(16,-55,897,853),40354=>array(36,-64,954,843),40355=>array(18,-58,966,841),40356=>array(64,-65,948,839),40357=>array(35,-69,965,840),40358=>array(75,-68,897,828),40359=>array(32,-62,972,826),40360=>array(50,-63,977,838),40361=>array(52,-66,950,838),40362=>array(55,-60,953,841),40363=>array(34,-77,947,841),40364=>array(27,-71,909,846),40365=>array(60,-70,946,847),40366=>array(35,-69,948,848),40367=>array(57,-74,933,829),40368=>array(-9,-77,948,840),40369=>array(47,-73,968,835),40370=>array(43,-68,955,843),40371=>array(52,-68,955,841),40372=>array(40,-65,938,837),40373=>array(49,-59,938,846),40374=>array(45,-69,964,842),40375=>array(83,-68,953,846),40376=>array(40,-64,952,834),40377=>array(69,-70,949,838),40378=>array(47,-67,924,836),40379=>array(85,-61,921,848),40380=>array(31,-69,912,844),40381=>array(26,-69,948,840),40382=>array(60,-69,949,827),40383=>array(53,-55,929,857),40384=>array(74,-62,927,845),40385=>array(36,-49,951,850),40386=>array(66,-57,924,844),40387=>array(50,-53,950,861),40388=>array(46,-61,945,835),40389=>array(52,-63,960,843),40390=>array(53,-67,949,838),40391=>array(61,-72,976,825),40392=>array(45,-70,962,839),40393=>array(30,-73,970,841),40394=>array(56,-66,949,842),40395=>array(44,-72,959,841),40396=>array(21,-64,946,838),40397=>array(47,-65,959,844),40398=>array(34,-73,964,840),40399=>array(43,-64,952,841),40400=>array(40,-68,956,845),40401=>array(43,-71,952,836),40402=>array(62,-65,954,846),40403=>array(49,-63,931,845),40404=>array(52,-67,954,842),40405=>array(58,-65,937,845),40406=>array(54,-70,930,797),40407=>array(115,-68,925,843),40408=>array(52,-64,974,834),40409=>array(58,-63,956,835),40410=>array(32,-76,912,846),40411=>array(45,-65,954,847),40412=>array(41,-67,955,845),40413=>array(50,-70,957,845),40414=>array(44,-67,967,854),40415=>array(46,-67,953,845),40416=>array(40,-69,948,840),40417=>array(39,-71,970,844),40418=>array(36,-67,979,785),40419=>array(65,-65,954,846),40420=>array(61,-70,954,838),40421=>array(60,-71,937,847),40422=>array(26,-56,898,847),40423=>array(47,-69,948,840),40424=>array(48,-65,959,846),40425=>array(56,-49,939,853),40426=>array(54,-63,935,802),40427=>array(59,-52,955,862),40428=>array(48,-65,954,844),40429=>array(39,-66,965,851),40430=>array(41,-65,962,844),40431=>array(32,-68,915,841),40432=>array(37,-69,969,840),40433=>array(50,-67,955,846),40434=>array(65,-66,943,840),40435=>array(113,-62,925,844),40436=>array(98,-69,938,841),40437=>array(35,-67,956,840),40438=>array(54,-73,945,840),40439=>array(62,-77,950,841),40440=>array(60,-68,934,844),40441=>array(40,-76,942,837),40442=>array(62,-67,948,849),40443=>array(29,-77,989,839),40444=>array(48,-69,948,840),40445=>array(50,-73,935,844),40446=>array(58,-65,962,845),40447=>array(53,-61,956,841),40448=>array(33,-68,962,841),40449=>array(34,-67,969,843),40450=>array(48,-74,957,830),40451=>array(32,-64,974,846),40452=>array(47,-73,969,837),40453=>array(62,-70,954,839),40454=>array(50,-72,966,839),40455=>array(45,-65,942,846),40456=>array(36,-69,926,846),40457=>array(38,-62,955,833),40458=>array(33,-66,960,842),40459=>array(59,-65,959,841),40460=>array(36,-66,948,843),40461=>array(34,-61,959,847),40462=>array(68,-59,910,805),40463=>array(50,-70,961,847),40464=>array(42,-67,971,841),40465=>array(44,-51,951,852),40466=>array(34,-63,975,838),40467=>array(93,-65,933,840),40468=>array(41,-70,973,843),40469=>array(43,-65,930,844),40470=>array(63,-67,939,844),40471=>array(71,-72,945,836),40472=>array(24,-71,960,844),40473=>array(57,-64,946,847),40474=>array(50,-65,928,843),40475=>array(45,-67,927,845),40476=>array(34,-65,966,845),40477=>array(41,-65,935,842),40478=>array(62,-67,958,846),40479=>array(80,-53,892,842),40480=>array(34,-65,893,820),40481=>array(30,-57,890,837),40482=>array(58,-65,935,825),40483=>array(98,-52,903,842),40484=>array(27,-66,896,826),40485=>array(96,-53,904,840),40486=>array(23,-64,906,837),40487=>array(35,-63,932,833),40488=>array(53,-63,892,827),40489=>array(37,-69,918,823),40490=>array(49,-65,892,822),40491=>array(26,-66,897,824),40492=>array(34,-66,896,826),40493=>array(100,-68,902,825),40494=>array(72,-69,902,825),40495=>array(32,-58,950,831),40496=>array(50,-70,927,844),40497=>array(70,-65,896,825),40498=>array(24,-57,895,828),40499=>array(35,-62,924,827),40500=>array(81,-63,893,821),40501=>array(41,-57,920,835),40502=>array(61,-59,910,832),40503=>array(50,-63,923,821),40504=>array(50,-59,893,826),40505=>array(29,-62,896,820),40506=>array(15,-66,896,824),40507=>array(37,-63,938,844),40508=>array(49,-67,928,835),40509=>array(26,-53,907,836),40510=>array(64,-60,917,835),40511=>array(39,-55,894,839),40512=>array(40,-62,949,838),40513=>array(62,-64,899,824),40514=>array(62,-60,895,820),40515=>array(98,-61,899,842),40516=>array(30,-54,898,826),40517=>array(32,-59,899,833),40518=>array(16,-60,895,821),40519=>array(90,-63,899,834),40520=>array(20,-66,900,822),40521=>array(41,-62,896,821),40522=>array(52,-64,903,826),40523=>array(60,-63,898,823),40524=>array(24,-64,899,828),40525=>array(81,-62,925,824),40526=>array(43,-71,902,818),40527=>array(24,-68,906,839),40528=>array(44,-64,926,843),40529=>array(51,-66,896,829),40530=>array(26,-68,931,846),40531=>array(49,-64,942,848),40532=>array(41,-64,959,833),40533=>array(52,-67,896,819),40534=>array(16,-64,896,821),40535=>array(61,-68,896,823),40536=>array(62,-69,894,825),40537=>array(39,-67,944,834),40538=>array(64,-63,921,824),40539=>array(19,-67,898,823),40540=>array(39,-65,929,825),40541=>array(70,-65,928,829),40542=>array(50,-61,934,821),40543=>array(44,-65,926,836),40544=>array(83,-67,924,839),40545=>array(36,-67,898,831),40546=>array(46,-67,898,849),40547=>array(38,-70,912,828),40548=>array(19,-56,898,840),40549=>array(83,-67,929,802),40550=>array(33,-61,899,821),40551=>array(20,-63,898,826),40552=>array(46,-69,929,831),40553=>array(48,-60,923,828),40554=>array(36,-63,922,827),40555=>array(42,-64,960,845),40556=>array(39,-65,895,821),40557=>array(31,-63,930,827),40558=>array(37,-62,951,821),40559=>array(61,-62,937,846),40560=>array(45,-78,917,831),40561=>array(30,-65,948,826),40562=>array(63,-64,933,833),40563=>array(29,-56,897,828),40564=>array(29,-70,946,822),40565=>array(125,-70,891,835),40566=>array(91,-52,972,835),40567=>array(91,-73,972,835),40568=>array(82,-60,966,835),40569=>array(94,-71,969,831),40570=>array(88,-59,941,843),40571=>array(69,-72,982,845),40572=>array(72,-66,947,847),40573=>array(52,-18,943,837),40574=>array(92,-45,924,830),40575=>array(57,-67,949,829),40576=>array(29,-66,958,842),40577=>array(42,-64,953,834),40578=>array(21,-60,935,841),40579=>array(39,-75,960,848),40580=>array(40,-74,958,833),40581=>array(30,-60,949,849),40582=>array(30,-60,941,849),40583=>array(30,-67,961,849),40584=>array(21,-60,925,836),40585=>array(48,-75,956,814),40586=>array(52,-72,955,826),40587=>array(67,-64,941,821),40588=>array(36,-57,966,829),40589=>array(25,-70,969,845),40590=>array(25,-80,971,845),40591=>array(25,-74,960,845),40592=>array(25,-73,975,845),40593=>array(37,-64,955,838),40594=>array(40,-70,951,835),40595=>array(37,-68,958,837),40596=>array(25,-74,960,845),40597=>array(36,-65,945,833),40598=>array(25,-70,951,845),40599=>array(43,-67,952,814),40600=>array(25,-72,971,845),40601=>array(25,-73,963,845),40602=>array(25,-78,970,845),40603=>array(25,-70,956,845),40604=>array(25,-75,979,845),40605=>array(58,-63,946,841),40606=>array(25,-80,952,843),40607=>array(26,-68,959,838),40608=>array(25,-76,952,847),40609=>array(25,-79,970,843),40610=>array(25,-74,951,843),40611=>array(35,-68,976,841),40612=>array(42,-69,959,853),40613=>array(58,-75,942,832),40614=>array(56,-65,950,827),40615=>array(40,-75,981,828),40616=>array(43,-84,971,832),40617=>array(37,-64,964,831),40618=>array(37,-64,958,831),40619=>array(43,-84,939,832),40620=>array(45,-84,964,832),40621=>array(37,-64,971,842),40622=>array(47,-68,978,824),40623=>array(43,-84,929,832),40624=>array(38,-54,971,866),40625=>array(43,-84,958,832),40626=>array(43,-84,968,832),40627=>array(43,-84,973,832),40628=>array(25,-63,959,826),40629=>array(34,-63,967,831),40630=>array(41,-71,979,837),40631=>array(44,-66,982,829),40632=>array(43,-57,973,830),40633=>array(37,-65,982,830),40634=>array(37,-65,982,818),40635=>array(43,-70,966,839),40636=>array(45,-68,956,839),40637=>array(41,-72,926,837),40638=>array(23,-67,958,836),40639=>array(36,-68,945,838),40640=>array(37,-71,969,843),40641=>array(39,-66,978,852),40642=>array(34,-73,940,845),40643=>array(55,-76,957,826),40644=>array(75,-83,925,831),40645=>array(50,-76,968,830),40646=>array(50,-76,972,830),40647=>array(58,-78,942,832),40648=>array(56,-78,959,818),40649=>array(58,-67,916,840),40650=>array(50,-78,963,831),40651=>array(28,-79,958,822),40652=>array(49,-72,960,842),40653=>array(35,-68,963,830),40654=>array(49,-68,946,832),40655=>array(39,-62,956,838),40656=>array(31,-64,954,835),40657=>array(81,-67,946,787),40658=>array(81,-67,946,787),40659=>array(48,-67,970,823),40660=>array(36,-65,970,841),40661=>array(43,-78,963,820),40662=>array(41,-75,964,780),40663=>array(39,-60,966,837),40664=>array(45,-69,955,829),40665=>array(43,-67,957,809),40666=>array(60,-70,956,823),40667=>array(47,-67,962,847),40668=>array(63,-66,919,832),40669=>array(58,-62,941,830),40670=>array(63,-64,945,839),40671=>array(58,-63,941,846),40672=>array(37,-64,952,829),40673=>array(33,-78,964,805),40674=>array(29,-72,933,831),40675=>array(43,-57,957,845),40676=>array(42,-52,965,853),40677=>array(38,-62,963,819),40678=>array(38,-68,964,833),40679=>array(44,-68,955,837),40680=>array(41,-70,956,836),40681=>array(30,-67,941,817),40682=>array(31,-76,950,823),40683=>array(25,-51,960,793),40684=>array(33,-68,967,835),40685=>array(45,-70,979,828),40686=>array(48,-53,954,832),40687=>array(52,-63,951,832),40688=>array(49,-59,970,852),40689=>array(26,-88,974,841),40690=>array(38,-55,970,864),40691=>array(47,-79,957,813),40692=>array(44,-67,977,833),40693=>array(56,-62,950,843),40694=>array(35,-73,959,817),40695=>array(37,-80,961,835),40696=>array(46,-64,954,836),40697=>array(46,-65,962,830),40698=>array(39,-74,970,826),40699=>array(34,-69,978,836),40700=>array(36,-62,955,835),40701=>array(120,-33,967,794),40702=>array(139,-42,966,803),40703=>array(45,-32,960,788),40704=>array(40,-56,973,837),40705=>array(63,-46,968,829),40706=>array(62,-54,971,823),40707=>array(68,-51,971,843),40708=>array(40,-54,971,844),40709=>array(57,-54,971,858),40710=>array(49,-42,971,784),40711=>array(48,-56,973,845),40712=>array(70,-49,960,829),40713=>array(58,-38,969,809),40714=>array(45,-39,956,834),40715=>array(84,-55,958,819),40716=>array(63,-51,962,822),40717=>array(63,-53,961,822),40718=>array(48,-65,948,801),40719=>array(41,-75,944,782),40720=>array(55,-69,943,792),40721=>array(44,-65,899,835),40722=>array(50,-67,950,824),40723=>array(59,-74,961,837),40724=>array(59,-74,961,833),40725=>array(60,-60,960,832),40726=>array(42,-73,974,833),40727=>array(44,-76,962,827),40728=>array(60,-68,962,828),40729=>array(51,-65,969,833),40730=>array(51,-69,962,827),40731=>array(43,-71,967,830),40732=>array(46,-67,972,829),40733=>array(37,-61,963,811),40734=>array(60,-35,970,818),40735=>array(34,-47,966,826),40736=>array(61,-60,963,836),40737=>array(40,-69,957,810),40738=>array(62,-52,948,830),40739=>array(74,-72,957,836),40740=>array(76,-73,959,835),40741=>array(68,-60,957,840),40742=>array(66,-69,924,826),40743=>array(66,-69,962,831),40744=>array(65,-60,969,838),40745=>array(63,-46,961,847),40746=>array(54,-56,954,846),40747=>array(61,-55,952,847),40748=>array(60,-58,945,820),40749=>array(68,-66,959,835),40750=>array(59,-68,958,840),40751=>array(56,-51,946,827),40752=>array(68,-65,953,836),40753=>array(57,-43,944,846),40754=>array(70,-77,952,834),40755=>array(65,-71,964,837),40756=>array(57,-55,954,832),40757=>array(59,-66,959,843),40758=>array(58,-75,964,839),40759=>array(49,-53,949,838),40760=>array(56,-66,954,840),40761=>array(87,-66,952,829),40762=>array(70,-58,943,825),40763=>array(42,-58,951,851),40764=>array(51,-71,897,843),40765=>array(43,-70,964,854),40766=>array(38,-65,964,850),40767=>array(30,-72,970,851),40768=>array(31,-68,976,843),40769=>array(56,-62,923,858),40770=>array(41,-75,967,833),40771=>array(43,-70,933,842),40772=>array(45,-67,950,825),40773=>array(36,-64,967,848),40774=>array(36,-62,957,860),40775=>array(49,-66,959,846),40776=>array(44,-64,967,841),40777=>array(53,-66,974,840),40778=>array(52,-70,946,831),40779=>array(55,-73,962,831),40780=>array(39,-74,973,847),40781=>array(32,-73,979,846),40782=>array(39,-67,978,846),40783=>array(43,-69,977,833),40784=>array(32,-69,952,834),40785=>array(36,-67,937,842),40786=>array(53,-73,946,829),40787=>array(58,-37,950,836),40788=>array(58,-63,948,836),40789=>array(62,-41,968,840),40790=>array(62,-65,954,840),40791=>array(65,-64,959,837),40792=>array(56,-52,976,860),40793=>array(57,-71,960,835),40794=>array(57,-71,943,851),40795=>array(61,-62,956,830),40796=>array(47,-48,957,835),40797=>array(60,-64,957,834),40798=>array(61,-71,962,833),40799=>array(40,-63,956,836),40800=>array(40,-63,930,836),40801=>array(40,-63,943,836),40802=>array(42,-68,958,846),40803=>array(55,-63,927,836),40804=>array(45,-65,969,839),40805=>array(55,-87,954,830),40806=>array(46,-73,967,836),40807=>array(64,-65,942,836),40808=>array(42,-45,958,839),40809=>array(64,-63,950,837),40810=>array(58,-63,960,836),40811=>array(66,-65,911,829),40812=>array(46,-63,956,836),40813=>array(63,-66,937,825),40814=>array(59,-73,956,831),40815=>array(59,-56,958,844),40816=>array(54,-48,949,851),40817=>array(58,-68,958,828),40818=>array(55,-66,940,836),40819=>array(73,-64,927,839),40820=>array(54,-67,957,837),40821=>array(60,-42,921,877),40822=>array(56,-60,954,846),40823=>array(58,-66,936,836),40824=>array(57,-29,968,829),40825=>array(47,-65,952,847),40826=>array(54,-71,931,837),40827=>array(59,-71,962,830),40828=>array(60,-56,940,839),40829=>array(47,-70,964,839),40830=>array(53,-69,975,829),40831=>array(75,-61,925,827),40832=>array(52,-59,930,817),40833=>array(52,-59,950,842),40834=>array(52,-59,908,842),40835=>array(52,-47,953,817),40836=>array(46,-57,947,826),40837=>array(52,-47,965,828),40838=>array(52,-67,870,817),40839=>array(51,-53,941,824),40840=>array(52,-70,969,817),40841=>array(50,-71,918,817),40842=>array(54,-68,965,821),40843=>array(44,-77,889,813),40844=>array(68,-68,927,817),40845=>array(50,-66,970,833),40846=>array(44,-63,975,797),40847=>array(59,-76,957,838),40848=>array(44,-63,975,845),40849=>array(50,-61,965,834),40850=>array(61,-64,957,838),40851=>array(45,-68,955,833),40852=>array(60,-69,956,850),40853=>array(44,-64,962,858),40854=>array(47,-47,971,819),40855=>array(63,-56,957,829),40856=>array(71,-65,958,837),40857=>array(37,-65,928,823),40858=>array(23,-66,923,834),40859=>array(21,-62,934,828),40860=>array(37,-41,967,846),40861=>array(16,-55,965,851),40862=>array(56,-54,970,843),40863=>array(50,-34,965,827),40864=>array(28,-64,976,848),40865=>array(56,-48,975,857),40866=>array(31,-62,986,863),40867=>array(29,-68,969,841),40868=>array(31,-43,962,857),40869=>array(31,-74,969,857),44032=>array(98,-69,936,842),44033=>array(88,-59,936,837),44034=>array(88,-61,936,837),44035=>array(88,-71,936,837),44036=>array(90,-45,936,842),44037=>array(88,-69,936,837),44038=>array(88,-76,936,837),44039=>array(88,-44,936,837),44040=>array(88,-62,936,837),44041=>array(88,-64,936,837),44042=>array(88,-64,936,837),44043=>array(88,-64,936,837),44044=>array(88,-70,936,837),44045=>array(88,-64,936,837),44046=>array(88,-64,936,837),44047=>array(88,-76,936,837),44048=>array(88,-62,936,837),44049=>array(88,-61,936,837),44050=>array(88,-70,936,837),44051=>array(88,-74,936,837),44052=>array(88,-69,936,837),44053=>array(88,-67,936,837),44054=>array(88,-72,936,837),44055=>array(88,-71,936,837),44056=>array(88,-66,936,837),44057=>array(88,-59,936,837),44058=>array(88,-60,936,837),44059=>array(88,-69,936,837),44060=>array(104,-69,907,842),44061=>array(88,-61,907,842),44062=>array(88,-61,907,842),44063=>array(88,-71,931,842),44064=>array(90,-46,907,842),44065=>array(88,-68,912,842),44066=>array(88,-76,907,842),44067=>array(88,-44,921,842),44068=>array(88,-62,917,842),44069=>array(88,-64,907,842),44070=>array(88,-64,908,842),44071=>array(88,-64,908,842),44072=>array(88,-69,923,842),44073=>array(88,-64,908,842),44074=>array(88,-64,908,842),44075=>array(88,-76,907,842),44076=>array(88,-62,907,842),44077=>array(88,-61,907,842),44078=>array(88,-69,922,842),44079=>array(88,-74,929,842),44080=>array(88,-69,927,842),44081=>array(88,-68,911,842),44082=>array(88,-72,929,842),44083=>array(88,-70,936,842),44084=>array(88,-66,908,842),44085=>array(88,-59,916,842),44086=>array(88,-60,928,842),44087=>array(88,-68,908,842),44088=>array(98,-68,935,843),44089=>array(90,-59,936,842),44090=>array(90,-61,936,842),44091=>array(90,-71,936,842),44092=>array(90,-45,936,842),44093=>array(90,-69,936,842),44094=>array(90,-76,936,842),44095=>array(90,-44,936,842),44096=>array(90,-62,936,842),44097=>array(90,-64,936,842),44098=>array(90,-64,936,842),44099=>array(90,-64,936,842),44100=>array(90,-70,936,842),44101=>array(90,-64,936,842),44102=>array(90,-64,936,842),44103=>array(90,-76,936,842),44104=>array(90,-62,936,842),44105=>array(90,-61,936,842),44106=>array(90,-70,936,842),44107=>array(90,-74,936,842),44108=>array(90,-69,936,842),44109=>array(90,-67,936,842),44110=>array(90,-72,936,842),44111=>array(90,-71,936,842),44112=>array(90,-66,936,842),44113=>array(90,-59,936,842),44114=>array(90,-60,936,842),44115=>array(90,-69,936,842),44116=>array(104,-69,907,842),44117=>array(88,-61,907,842),44118=>array(88,-61,907,842),44119=>array(88,-71,931,842),44120=>array(90,-46,907,842),44121=>array(88,-68,912,842),44122=>array(88,-76,907,842),44123=>array(88,-44,921,842),44124=>array(88,-62,917,842),44125=>array(88,-64,907,842),44126=>array(88,-64,908,842),44127=>array(88,-64,908,842),44128=>array(88,-69,923,842),44129=>array(88,-64,908,842),44130=>array(88,-64,908,842),44131=>array(88,-76,907,842),44132=>array(88,-62,907,842),44133=>array(88,-61,907,842),44134=>array(88,-69,922,842),44135=>array(88,-74,929,842),44136=>array(88,-69,927,842),44137=>array(88,-68,911,842),44138=>array(88,-72,929,842),44139=>array(88,-70,936,842),44140=>array(88,-66,908,842),44141=>array(88,-59,916,842),44142=>array(88,-60,928,842),44143=>array(88,-68,908,842),44144=>array(98,-70,907,841),44145=>array(90,-61,907,841),44146=>array(90,-61,907,841),44147=>array(90,-71,931,841),44148=>array(90,-46,907,841),44149=>array(90,-68,912,841),44150=>array(90,-76,907,841),44151=>array(90,-44,921,841),44152=>array(90,-62,917,841),44153=>array(90,-64,907,841),44154=>array(90,-64,908,841),44155=>array(90,-64,908,841),44156=>array(90,-69,923,841),44157=>array(90,-64,908,841),44158=>array(90,-64,908,841),44159=>array(90,-76,906,841),44160=>array(90,-62,907,841),44161=>array(90,-61,907,841),44162=>array(90,-69,922,841),44163=>array(90,-74,929,841),44164=>array(90,-69,927,841),44165=>array(90,-68,911,841),44166=>array(90,-72,929,841),44167=>array(90,-70,936,841),44168=>array(90,-66,908,841),44169=>array(90,-59,916,841),44170=>array(90,-60,928,841),44171=>array(90,-68,908,841),44172=>array(93,-68,907,843),44173=>array(74,-61,907,843),44174=>array(74,-61,907,843),44175=>array(74,-71,931,843),44176=>array(70,-46,907,843),44177=>array(74,-68,912,843),44178=>array(74,-76,907,843),44179=>array(74,-44,921,843),44180=>array(74,-62,917,843),44181=>array(74,-64,907,843),44182=>array(74,-64,908,843),44183=>array(74,-64,908,843),44184=>array(74,-69,923,843),44185=>array(74,-64,908,843),44186=>array(74,-64,908,843),44187=>array(74,-76,907,843),44188=>array(74,-62,907,843),44189=>array(74,-61,907,843),44190=>array(74,-69,922,843),44191=>array(74,-74,929,843),44192=>array(74,-69,927,843),44193=>array(74,-68,911,843),44194=>array(74,-72,929,843),44195=>array(74,-70,936,843),44196=>array(74,-66,908,843),44197=>array(74,-59,916,843),44198=>array(74,-60,928,843),44199=>array(74,-68,908,843),44200=>array(98,-70,907,842),44201=>array(90,-61,908,842),44202=>array(90,-61,908,842),44203=>array(90,-71,931,842),44204=>array(90,-46,907,842),44205=>array(90,-68,912,842),44206=>array(90,-76,908,842),44207=>array(90,-44,921,842),44208=>array(90,-62,917,842),44209=>array(90,-64,908,842),44210=>array(90,-64,908,842),44211=>array(90,-64,908,842),44212=>array(90,-69,923,842),44213=>array(90,-64,908,842),44214=>array(90,-64,908,842),44215=>array(90,-76,908,842),44216=>array(90,-62,908,842),44217=>array(90,-61,908,842),44218=>array(90,-69,922,842),44219=>array(90,-74,929,842),44220=>array(90,-69,927,842),44221=>array(90,-68,911,842),44222=>array(90,-72,929,842),44223=>array(90,-70,936,842),44224=>array(90,-66,908,842),44225=>array(90,-59,916,842),44226=>array(90,-60,928,842),44227=>array(90,-68,908,842),44228=>array(78,-68,907,843),44229=>array(79,-61,907,843),44230=>array(79,-61,907,843),44231=>array(79,-71,931,843),44232=>array(70,-46,907,843),44233=>array(79,-68,912,843),44234=>array(79,-76,907,843),44235=>array(79,-44,921,843),44236=>array(79,-62,917,843),44237=>array(79,-64,907,843),44238=>array(79,-64,908,843),44239=>array(79,-64,908,843),44240=>array(79,-69,923,843),44241=>array(79,-64,908,843),44242=>array(79,-64,908,843),44243=>array(79,-76,907,843),44244=>array(79,-62,907,843),44245=>array(79,-61,907,843),44246=>array(79,-69,922,843),44247=>array(79,-74,929,843),44248=>array(79,-69,927,843),44249=>array(79,-68,911,843),44250=>array(79,-72,929,843),44251=>array(79,-70,936,843),44252=>array(79,-66,908,843),44253=>array(79,-59,916,843),44254=>array(79,-60,928,843),44255=>array(79,-68,908,843),44256=>array(62,27,943,700),44257=>array(79,-61,921,770),44258=>array(79,-61,921,770),44259=>array(79,-71,921,770),44260=>array(79,-46,921,770),44261=>array(79,-68,921,770),44262=>array(79,-74,921,770),44263=>array(79,-44,921,770),44264=>array(79,-62,921,770),44265=>array(79,-64,921,770),44266=>array(79,-64,921,770),44267=>array(79,-63,921,770),44268=>array(79,-68,921,770),44269=>array(79,-64,921,770),44270=>array(79,-63,921,770),44271=>array(79,-74,921,770),44272=>array(79,-62,921,770),44273=>array(79,-61,921,770),44274=>array(79,-69,921,770),44275=>array(79,-74,921,770),44276=>array(79,-69,921,770),44277=>array(79,-68,921,770),44278=>array(79,-72,921,770),44279=>array(79,-70,921,770),44280=>array(79,-66,921,770),44281=>array(79,-59,921,770),44282=>array(79,-60,921,770),44283=>array(79,-68,921,770),44284=>array(38,-68,935,843),44285=>array(64,-59,936,842),44286=>array(64,-61,936,842),44287=>array(64,-71,936,842),44288=>array(57,-45,936,842),44289=>array(64,-69,936,842),44290=>array(64,-76,936,842),44291=>array(64,-44,936,842),44292=>array(64,-62,936,842),44293=>array(64,-64,936,842),44294=>array(64,-64,936,842),44295=>array(64,-64,936,842),44296=>array(64,-70,936,842),44297=>array(64,-64,936,842),44298=>array(64,-64,936,842),44299=>array(64,-76,936,842),44300=>array(64,-62,936,842),44301=>array(64,-61,936,842),44302=>array(64,-70,936,842),44303=>array(64,-74,936,842),44304=>array(64,-69,936,842),44305=>array(64,-67,936,842),44306=>array(64,-72,936,842),44307=>array(64,-71,936,842),44308=>array(64,-66,936,842),44309=>array(64,-59,936,842),44310=>array(64,-60,936,842),44311=>array(64,-69,936,842),44312=>array(51,-69,907,842),44313=>array(65,-61,907,841),44314=>array(65,-61,907,841),44315=>array(65,-71,931,841),44316=>array(53,-46,907,841),44317=>array(65,-68,912,841),44318=>array(65,-76,907,841),44319=>array(65,-44,921,841),44320=>array(65,-62,917,841),44321=>array(65,-64,907,841),44322=>array(65,-64,908,841),44323=>array(65,-64,908,841),44324=>array(65,-69,923,841),44325=>array(65,-64,908,841),44326=>array(65,-64,908,841),44327=>array(65,-76,907,841),44328=>array(65,-62,907,841),44329=>array(65,-61,907,841),44330=>array(65,-69,922,841),44331=>array(65,-74,929,841),44332=>array(65,-69,927,841),44333=>array(65,-68,911,841),44334=>array(65,-72,929,841),44335=>array(65,-70,936,841),44336=>array(65,-66,908,841),44337=>array(65,-59,916,841),44338=>array(65,-60,928,841),44339=>array(65,-68,908,841),44340=>array(60,-69,907,842),44341=>array(64,-61,907,842),44342=>array(64,-61,907,842),44343=>array(64,-71,931,842),44344=>array(72,-46,907,842),44345=>array(64,-68,912,842),44346=>array(64,-76,907,842),44347=>array(64,-44,921,842),44348=>array(64,-62,917,842),44349=>array(64,-64,907,842),44350=>array(64,-64,908,842),44351=>array(64,-64,908,842),44352=>array(64,-69,923,842),44353=>array(64,-64,908,842),44354=>array(64,-64,908,842),44355=>array(64,-76,907,842),44356=>array(64,-62,907,842),44357=>array(64,-61,907,842),44358=>array(64,-69,922,842),44359=>array(64,-74,929,842),44360=>array(64,-69,927,842),44361=>array(64,-68,911,842),44362=>array(64,-72,929,842),44363=>array(64,-70,936,842),44364=>array(64,-66,908,842),44365=>array(64,-59,916,842),44366=>array(64,-60,928,842),44367=>array(64,-68,908,842),44368=>array(62,27,943,723),44369=>array(62,-61,943,770),44370=>array(62,-61,943,770),44371=>array(62,-71,943,770),44372=>array(62,-46,943,770),44373=>array(62,-68,943,770),44374=>array(62,-74,943,770),44375=>array(62,-44,943,770),44376=>array(62,-62,943,770),44377=>array(62,-64,943,770),44378=>array(62,-64,943,770),44379=>array(62,-63,943,770),44380=>array(62,-68,943,770),44381=>array(62,-64,943,770),44382=>array(62,-63,943,770),44383=>array(62,-74,943,770),44384=>array(62,-62,943,770),44385=>array(62,-61,943,770),44386=>array(62,-69,943,770),44387=>array(62,-74,943,770),44388=>array(62,-69,943,770),44389=>array(62,-68,943,770),44390=>array(62,-72,943,770),44391=>array(62,-70,943,770),44392=>array(62,-66,943,770),44393=>array(62,-59,943,770),44394=>array(62,-60,943,770),44395=>array(62,-68,943,770),44396=>array(79,-64,920,780),44397=>array(79,-61,921,769),44398=>array(79,-61,921,769),44399=>array(79,-71,921,769),44400=>array(79,-46,921,768),44401=>array(79,-68,921,769),44402=>array(79,-74,921,769),44403=>array(79,-44,921,769),44404=>array(79,-62,921,769),44405=>array(79,-64,921,769),44406=>array(79,-64,921,769),44407=>array(79,-63,921,769),44408=>array(79,-68,921,769),44409=>array(79,-64,921,769),44410=>array(79,-63,921,769),44411=>array(79,-74,921,769),44412=>array(79,-62,921,769),44413=>array(79,-61,921,769),44414=>array(79,-69,921,769),44415=>array(79,-74,921,769),44416=>array(79,-69,921,769),44417=>array(79,-68,921,769),44418=>array(79,-72,921,769),44419=>array(79,-70,921,769),44420=>array(79,-66,921,769),44421=>array(79,-59,921,769),44422=>array(79,-60,921,769),44423=>array(79,-68,921,769),44424=>array(67,-69,907,842),44425=>array(75,-61,907,841),44426=>array(75,-61,907,841),44427=>array(75,-71,931,841),44428=>array(81,-46,907,841),44429=>array(75,-68,912,841),44430=>array(75,-76,907,841),44431=>array(75,-44,921,841),44432=>array(75,-62,917,841),44433=>array(75,-64,907,841),44434=>array(75,-64,908,841),44435=>array(75,-64,908,841),44436=>array(75,-69,923,841),44437=>array(75,-64,908,841),44438=>array(75,-64,908,841),44439=>array(75,-76,906,841),44440=>array(75,-62,907,841),44441=>array(75,-61,907,841),44442=>array(75,-69,922,841),44443=>array(75,-74,929,841),44444=>array(75,-69,927,841),44445=>array(75,-68,911,841),44446=>array(75,-72,929,841),44447=>array(75,-70,936,841),44448=>array(75,-66,908,841),44449=>array(75,-59,916,841),44450=>array(75,-60,928,841),44451=>array(75,-68,908,841),44452=>array(40,-69,908,842),44453=>array(70,-61,907,843),44454=>array(70,-61,907,843),44455=>array(70,-71,931,843),44456=>array(79,-46,907,843),44457=>array(70,-68,912,843),44458=>array(70,-76,907,843),44459=>array(70,-44,921,843),44460=>array(70,-62,917,843),44461=>array(70,-64,907,843),44462=>array(70,-64,908,843),44463=>array(70,-64,908,843),44464=>array(70,-69,923,843),44465=>array(70,-64,908,843),44466=>array(70,-64,908,843),44467=>array(70,-76,907,843),44468=>array(70,-62,907,843),44469=>array(70,-61,907,843),44470=>array(70,-69,922,843),44471=>array(70,-74,929,843),44472=>array(70,-69,927,843),44473=>array(70,-68,911,843),44474=>array(70,-72,929,843),44475=>array(70,-70,936,843),44476=>array(70,-66,908,843),44477=>array(70,-59,916,843),44478=>array(70,-60,928,843),44479=>array(70,-68,908,843),44480=>array(55,-69,907,842),44481=>array(64,-61,907,842),44482=>array(64,-61,907,842),44483=>array(64,-71,931,842),44484=>array(64,-46,907,842),44485=>array(64,-68,912,842),44486=>array(64,-76,907,842),44487=>array(64,-44,921,842),44488=>array(64,-62,917,842),44489=>array(64,-64,907,842),44490=>array(64,-64,908,842),44491=>array(64,-64,908,842),44492=>array(64,-69,923,842),44493=>array(64,-64,908,842),44494=>array(64,-64,908,842),44495=>array(64,-76,907,842),44496=>array(64,-62,907,842),44497=>array(64,-61,907,842),44498=>array(64,-69,922,842),44499=>array(64,-74,929,842),44500=>array(64,-69,927,842),44501=>array(64,-68,911,842),44502=>array(64,-72,929,842),44503=>array(64,-70,936,842),44504=>array(64,-66,908,842),44505=>array(64,-59,916,842),44506=>array(64,-60,928,842),44507=>array(64,-68,908,842),44508=>array(71,-64,928,780),44509=>array(79,-61,921,768),44510=>array(79,-61,921,768),44511=>array(79,-71,921,768),44512=>array(79,-46,921,769),44513=>array(79,-68,921,768),44514=>array(79,-74,921,768),44515=>array(79,-44,921,768),44516=>array(79,-62,921,768),44517=>array(79,-64,921,768),44518=>array(79,-64,921,768),44519=>array(79,-63,921,768),44520=>array(79,-68,921,768),44521=>array(79,-64,921,768),44522=>array(79,-63,921,768),44523=>array(79,-74,921,768),44524=>array(79,-62,921,768),44525=>array(79,-61,921,768),44526=>array(79,-69,921,768),44527=>array(79,-74,921,768),44528=>array(79,-69,921,768),44529=>array(79,-68,921,768),44530=>array(79,-72,921,768),44531=>array(79,-70,921,768),44532=>array(79,-66,921,768),44533=>array(79,-59,921,768),44534=>array(79,-60,921,768),44535=>array(79,-68,921,768),44536=>array(57,62,943,685),44537=>array(78,-61,919,769),44538=>array(78,-61,919,769),44539=>array(78,-71,919,769),44540=>array(79,-46,921,770),44541=>array(78,-68,919,769),44542=>array(78,-74,919,769),44543=>array(78,-44,919,769),44544=>array(78,-62,919,769),44545=>array(78,-64,919,769),44546=>array(78,-64,919,769),44547=>array(78,-63,919,769),44548=>array(78,-68,919,769),44549=>array(78,-64,919,769),44550=>array(78,-63,919,769),44551=>array(78,-74,919,769),44552=>array(78,-62,919,769),44553=>array(78,-61,919,769),44554=>array(78,-69,919,769),44555=>array(78,-74,919,769),44556=>array(78,-69,919,769),44557=>array(78,-68,919,769),44558=>array(78,-72,919,769),44559=>array(78,-70,919,769),44560=>array(78,-66,919,769),44561=>array(78,-59,919,769),44562=>array(78,-60,919,769),44563=>array(78,-68,919,769),44564=>array(52,-69,907,842),44565=>array(64,-61,907,842),44566=>array(64,-61,907,842),44567=>array(64,-71,931,842),44568=>array(68,-46,907,842),44569=>array(64,-68,912,842),44570=>array(64,-76,907,842),44571=>array(64,-44,921,842),44572=>array(64,-62,917,842),44573=>array(64,-64,907,842),44574=>array(64,-64,908,842),44575=>array(64,-64,908,842),44576=>array(64,-69,923,842),44577=>array(64,-64,908,842),44578=>array(64,-64,908,842),44579=>array(64,-76,907,842),44580=>array(64,-62,907,842),44581=>array(64,-61,907,842),44582=>array(64,-69,922,842),44583=>array(64,-74,929,842),44584=>array(64,-69,927,842),44585=>array(64,-68,911,842),44586=>array(64,-72,929,842),44587=>array(64,-70,936,842),44588=>array(64,-66,908,842),44589=>array(64,-59,916,842),44590=>array(64,-60,928,842),44591=>array(64,-68,908,842),44592=>array(90,-69,907,842),44593=>array(63,-61,907,842),44594=>array(63,-61,907,842),44595=>array(63,-71,931,842),44596=>array(77,-46,907,842),44597=>array(63,-68,912,842),44598=>array(63,-76,907,842),44599=>array(63,-44,921,842),44600=>array(63,-62,917,842),44601=>array(63,-64,907,842),44602=>array(63,-64,908,842),44603=>array(63,-64,908,842),44604=>array(63,-69,923,842),44605=>array(63,-64,908,842),44606=>array(63,-64,908,842),44607=>array(63,-76,907,842),44608=>array(63,-62,907,842),44609=>array(63,-61,907,842),44610=>array(63,-69,922,842),44611=>array(63,-74,929,842),44612=>array(63,-69,927,842),44613=>array(63,-68,911,842),44614=>array(63,-72,929,842),44615=>array(63,-70,936,842),44616=>array(63,-66,908,842),44617=>array(63,-59,916,842),44618=>array(63,-60,928,842),44619=>array(63,-68,908,842),44620=>array(46,-69,936,842),44621=>array(88,-59,936,842),44622=>array(88,-61,936,842),44623=>array(88,-71,936,842),44624=>array(60,-45,936,842),44625=>array(88,-69,936,842),44626=>array(88,-76,936,842),44627=>array(88,-44,936,842),44628=>array(88,-62,936,842),44629=>array(88,-64,936,842),44630=>array(88,-64,936,842),44631=>array(88,-64,936,842),44632=>array(88,-70,936,842),44633=>array(88,-64,936,842),44634=>array(88,-64,936,842),44635=>array(88,-76,936,842),44636=>array(88,-62,936,842),44637=>array(88,-61,936,842),44638=>array(88,-70,936,842),44639=>array(88,-74,936,842),44640=>array(88,-69,936,842),44641=>array(88,-67,936,842),44642=>array(88,-72,936,842),44643=>array(88,-71,936,842),44644=>array(88,-66,936,842),44645=>array(88,-59,936,842),44646=>array(88,-60,936,842),44647=>array(88,-69,936,842),44648=>array(41,-69,907,842),44649=>array(68,-61,907,837),44650=>array(68,-61,907,837),44651=>array(68,-71,931,837),44652=>array(50,-46,907,842),44653=>array(68,-68,912,837),44654=>array(68,-76,907,837),44655=>array(68,-44,921,837),44656=>array(68,-62,917,837),44657=>array(68,-64,907,837),44658=>array(68,-64,908,837),44659=>array(68,-64,908,837),44660=>array(68,-69,923,837),44661=>array(68,-64,908,837),44662=>array(68,-64,908,837),44663=>array(68,-76,907,837),44664=>array(68,-62,907,837),44665=>array(68,-61,907,837),44666=>array(68,-69,922,837),44667=>array(68,-74,929,837),44668=>array(68,-69,927,837),44669=>array(68,-68,911,837),44670=>array(68,-72,929,837),44671=>array(68,-70,936,837),44672=>array(68,-66,908,837),44673=>array(68,-59,916,837),44674=>array(68,-60,928,837),44675=>array(68,-68,908,837),44676=>array(46,-69,936,842),44677=>array(88,-59,936,842),44678=>array(88,-61,936,842),44679=>array(88,-71,936,842),44680=>array(60,-45,936,842),44681=>array(88,-69,936,842),44682=>array(88,-76,936,842),44683=>array(88,-44,936,842),44684=>array(88,-62,936,842),44685=>array(88,-64,936,842),44686=>array(88,-64,936,842),44687=>array(88,-64,936,842),44688=>array(88,-70,936,842),44689=>array(88,-64,936,842),44690=>array(88,-64,936,842),44691=>array(88,-76,936,842),44692=>array(88,-62,936,842),44693=>array(88,-61,936,842),44694=>array(88,-70,936,842),44695=>array(88,-74,936,842),44696=>array(88,-69,936,842),44697=>array(88,-67,936,842),44698=>array(88,-72,936,842),44699=>array(88,-71,936,842),44700=>array(88,-66,936,842),44701=>array(88,-59,936,842),44702=>array(88,-60,936,842),44703=>array(88,-69,936,842),44704=>array(41,-69,907,842),44705=>array(68,-61,907,842),44706=>array(68,-61,907,842),44707=>array(68,-71,931,842),44708=>array(50,-46,907,842),44709=>array(68,-68,912,842),44710=>array(68,-76,907,842),44711=>array(68,-44,921,842),44712=>array(68,-62,917,842),44713=>array(68,-64,907,842),44714=>array(68,-64,908,842),44715=>array(68,-64,908,842),44716=>array(68,-69,923,842),44717=>array(68,-64,908,842),44718=>array(68,-64,908,842),44719=>array(68,-76,907,842),44720=>array(68,-62,907,842),44721=>array(68,-61,907,842),44722=>array(68,-69,922,842),44723=>array(68,-74,929,842),44724=>array(68,-69,927,842),44725=>array(68,-68,911,842),44726=>array(68,-72,929,842),44727=>array(68,-70,936,842),44728=>array(68,-66,908,842),44729=>array(68,-59,916,842),44730=>array(68,-60,928,842),44731=>array(68,-68,908,842),44732=>array(46,-70,907,841),44733=>array(88,-61,907,836),44734=>array(88,-61,907,836),44735=>array(88,-71,931,836),44736=>array(60,-46,907,841),44737=>array(88,-68,912,836),44738=>array(88,-76,907,836),44739=>array(88,-44,921,836),44740=>array(88,-62,917,836),44741=>array(88,-64,907,836),44742=>array(88,-64,908,836),44743=>array(88,-64,908,836),44744=>array(88,-69,923,836),44745=>array(88,-64,908,836),44746=>array(88,-64,908,836),44747=>array(88,-76,906,836),44748=>array(88,-62,907,836),44749=>array(88,-61,907,836),44750=>array(88,-69,922,836),44751=>array(88,-74,929,836),44752=>array(88,-69,927,836),44753=>array(88,-68,911,836),44754=>array(88,-72,929,836),44755=>array(88,-70,936,836),44756=>array(88,-66,908,836),44757=>array(88,-59,916,836),44758=>array(88,-60,928,836),44759=>array(88,-68,908,836),44760=>array(36,-68,907,843),44761=>array(53,-61,907,843),44762=>array(53,-61,907,843),44763=>array(53,-71,931,843),44764=>array(35,-46,907,843),44765=>array(53,-68,912,843),44766=>array(53,-76,907,843),44767=>array(53,-44,921,843),44768=>array(53,-62,917,843),44769=>array(53,-64,907,843),44770=>array(53,-64,908,843),44771=>array(53,-64,908,843),44772=>array(53,-69,923,843),44773=>array(53,-64,908,843),44774=>array(53,-64,908,843),44775=>array(53,-76,907,843),44776=>array(53,-62,907,843),44777=>array(53,-61,907,843),44778=>array(53,-69,922,843),44779=>array(53,-74,929,843),44780=>array(53,-69,927,843),44781=>array(53,-68,911,843),44782=>array(53,-72,929,843),44783=>array(53,-70,936,843),44784=>array(53,-66,908,843),44785=>array(53,-59,916,843),44786=>array(53,-60,928,843),44787=>array(53,-68,908,843),44788=>array(46,-69,908,842),44789=>array(88,-61,909,842),44790=>array(88,-61,909,842),44791=>array(88,-71,931,842),44792=>array(60,-46,909,841),44793=>array(88,-68,912,842),44794=>array(88,-76,909,842),44795=>array(88,-44,921,842),44796=>array(88,-62,917,842),44797=>array(88,-64,909,842),44798=>array(88,-64,909,842),44799=>array(88,-64,909,842),44800=>array(88,-69,923,842),44801=>array(88,-64,909,842),44802=>array(88,-64,909,842),44803=>array(88,-76,909,842),44804=>array(88,-62,909,842),44805=>array(88,-61,909,842),44806=>array(88,-69,922,842),44807=>array(88,-74,929,842),44808=>array(88,-69,927,842),44809=>array(88,-68,911,842),44810=>array(88,-72,929,842),44811=>array(88,-70,936,842),44812=>array(88,-66,909,842),44813=>array(88,-59,916,842),44814=>array(88,-60,928,842),44815=>array(88,-68,909,842),44816=>array(36,-68,907,843),44817=>array(53,-61,907,838),44818=>array(53,-61,907,838),44819=>array(53,-71,931,838),44820=>array(35,-46,907,843),44821=>array(53,-68,912,838),44822=>array(53,-76,907,838),44823=>array(53,-44,921,838),44824=>array(53,-62,917,838),44825=>array(53,-64,907,838),44826=>array(53,-64,908,838),44827=>array(53,-64,908,838),44828=>array(53,-69,923,838),44829=>array(53,-64,908,838),44830=>array(53,-64,908,838),44831=>array(53,-76,907,838),44832=>array(53,-62,907,838),44833=>array(53,-61,907,838),44834=>array(53,-69,922,838),44835=>array(53,-74,929,838),44836=>array(53,-69,927,838),44837=>array(53,-68,911,838),44838=>array(53,-72,929,838),44839=>array(53,-70,936,838),44840=>array(53,-66,908,838),44841=>array(53,-59,916,838),44842=>array(53,-60,928,838),44843=>array(53,-68,908,838),44844=>array(60,12,940,714),44845=>array(79,-61,921,767),44846=>array(79,-61,921,767),44847=>array(79,-71,921,767),44848=>array(79,-46,921,766),44849=>array(79,-68,921,767),44850=>array(79,-74,921,767),44851=>array(79,-44,921,767),44852=>array(79,-62,921,767),44853=>array(79,-64,921,767),44854=>array(79,-64,921,767),44855=>array(79,-63,921,767),44856=>array(79,-68,921,767),44857=>array(79,-64,921,767),44858=>array(79,-63,921,767),44859=>array(79,-74,921,767),44860=>array(79,-62,921,767),44861=>array(79,-61,921,767),44862=>array(79,-69,921,767),44863=>array(79,-74,921,767),44864=>array(79,-69,921,767),44865=>array(79,-68,921,767),44866=>array(79,-72,921,767),44867=>array(79,-70,921,767),44868=>array(79,-66,921,767),44869=>array(79,-59,921,767),44870=>array(79,-60,921,767),44871=>array(79,-68,921,767),44872=>array(52,-69,936,842),44873=>array(69,-59,936,837),44874=>array(69,-61,936,837),44875=>array(69,-71,936,837),44876=>array(72,-45,936,842),44877=>array(69,-69,936,837),44878=>array(69,-76,936,837),44879=>array(69,-44,936,837),44880=>array(69,-62,936,837),44881=>array(69,-64,936,837),44882=>array(69,-64,936,837),44883=>array(69,-64,936,837),44884=>array(69,-70,936,837),44885=>array(69,-64,936,837),44886=>array(69,-64,936,837),44887=>array(69,-76,936,837),44888=>array(69,-62,936,837),44889=>array(69,-61,936,837),44890=>array(69,-70,936,837),44891=>array(69,-74,936,837),44892=>array(69,-69,936,837),44893=>array(69,-67,936,837),44894=>array(69,-72,936,837),44895=>array(69,-71,936,837),44896=>array(69,-66,936,837),44897=>array(69,-59,936,837),44898=>array(69,-60,936,837),44899=>array(69,-69,936,837),44900=>array(68,-69,907,842),44901=>array(70,-61,907,842),44902=>array(70,-61,907,842),44903=>array(70,-71,931,842),44904=>array(57,-46,907,842),44905=>array(70,-68,912,842),44906=>array(70,-76,907,842),44907=>array(70,-44,921,842),44908=>array(70,-62,917,842),44909=>array(70,-64,907,842),44910=>array(70,-64,908,842),44911=>array(70,-64,908,842),44912=>array(70,-69,923,842),44913=>array(70,-64,908,842),44914=>array(70,-64,908,842),44915=>array(70,-76,907,842),44916=>array(70,-62,907,842),44917=>array(70,-61,907,842),44918=>array(70,-69,922,842),44919=>array(70,-74,929,842),44920=>array(70,-69,927,842),44921=>array(70,-68,911,842),44922=>array(70,-72,929,842),44923=>array(70,-70,936,842),44924=>array(70,-66,908,842),44925=>array(70,-59,916,842),44926=>array(70,-60,928,842),44927=>array(70,-68,908,842),44928=>array(78,-69,907,842),44929=>array(64,-61,907,842),44930=>array(64,-61,907,842),44931=>array(64,-71,931,842),44932=>array(69,-46,907,842),44933=>array(64,-68,912,842),44934=>array(64,-76,907,842),44935=>array(64,-44,921,842),44936=>array(64,-62,917,842),44937=>array(64,-64,907,842),44938=>array(64,-64,908,842),44939=>array(64,-64,908,842),44940=>array(64,-69,923,842),44941=>array(64,-64,908,842),44942=>array(64,-64,908,842),44943=>array(64,-76,907,842),44944=>array(64,-62,907,842),44945=>array(64,-61,907,842),44946=>array(64,-69,922,842),44947=>array(64,-74,929,842),44948=>array(64,-69,927,842),44949=>array(64,-68,911,842),44950=>array(64,-72,929,842),44951=>array(64,-70,936,842),44952=>array(64,-66,908,842),44953=>array(64,-59,916,842),44954=>array(64,-60,928,842),44955=>array(64,-68,908,842),44956=>array(60,32,940,714),44957=>array(79,-61,921,794),44958=>array(79,-61,921,794),44959=>array(79,-71,921,794),44960=>array(79,-46,921,785),44961=>array(79,-68,921,794),44962=>array(79,-74,921,794),44963=>array(79,-44,921,794),44964=>array(79,-62,921,794),44965=>array(79,-64,921,794),44966=>array(79,-64,921,794),44967=>array(79,-63,921,794),44968=>array(79,-68,921,794),44969=>array(79,-64,921,794),44970=>array(79,-63,921,794),44971=>array(79,-74,921,794),44972=>array(79,-62,921,794),44973=>array(79,-61,921,794),44974=>array(79,-69,921,794),44975=>array(79,-74,921,794),44976=>array(79,-69,921,794),44977=>array(79,-68,921,794),44978=>array(79,-72,921,794),44979=>array(79,-70,921,794),44980=>array(79,-66,921,794),44981=>array(79,-59,921,794),44982=>array(79,-60,921,794),44983=>array(79,-68,921,794),44984=>array(79,-64,921,776),44985=>array(79,-61,921,766),44986=>array(79,-61,921,766),44987=>array(79,-71,921,766),44988=>array(79,-46,921,767),44989=>array(79,-68,921,766),44990=>array(79,-74,921,766),44991=>array(79,-44,921,766),44992=>array(79,-62,921,766),44993=>array(79,-64,921,766),44994=>array(79,-64,921,766),44995=>array(79,-63,921,766),44996=>array(79,-68,921,766),44997=>array(79,-64,921,766),44998=>array(79,-63,921,766),44999=>array(79,-74,921,766),45000=>array(79,-62,921,766),45001=>array(79,-61,921,766),45002=>array(79,-69,921,766),45003=>array(79,-74,921,766),45004=>array(79,-69,921,766),45005=>array(79,-68,921,766),45006=>array(79,-72,921,766),45007=>array(79,-70,921,766),45008=>array(79,-66,921,766),45009=>array(79,-59,921,766),45010=>array(79,-60,921,766),45011=>array(79,-68,921,766),45012=>array(78,-70,907,841),45013=>array(68,-61,907,841),45014=>array(68,-61,907,841),45015=>array(68,-71,931,841),45016=>array(80,-46,907,841),45017=>array(68,-68,912,841),45018=>array(68,-76,907,841),45019=>array(68,-44,921,841),45020=>array(68,-62,917,841),45021=>array(68,-64,907,841),45022=>array(68,-64,908,841),45023=>array(68,-64,908,841),45024=>array(68,-69,923,841),45025=>array(68,-64,908,841),45026=>array(68,-64,908,841),45027=>array(68,-76,906,841),45028=>array(68,-62,907,841),45029=>array(68,-61,907,841),45030=>array(68,-69,922,841),45031=>array(68,-74,929,841),45032=>array(68,-69,927,841),45033=>array(68,-68,911,841),45034=>array(68,-72,929,841),45035=>array(68,-70,936,841),45036=>array(68,-66,908,841),45037=>array(68,-59,916,841),45038=>array(68,-60,928,841),45039=>array(68,-68,908,841),45040=>array(50,-68,912,843),45041=>array(67,-61,907,838),45042=>array(67,-61,907,838),45043=>array(67,-71,931,838),45044=>array(75,-46,907,843),45045=>array(67,-68,912,838),45046=>array(67,-76,907,838),45047=>array(67,-44,921,838),45048=>array(67,-62,917,838),45049=>array(67,-64,907,838),45050=>array(67,-64,908,838),45051=>array(67,-64,908,838),45052=>array(67,-69,923,838),45053=>array(67,-64,908,838),45054=>array(67,-64,908,838),45055=>array(67,-76,907,838),45056=>array(67,-62,907,838),45057=>array(67,-61,907,838),45058=>array(67,-69,922,838),45059=>array(67,-74,929,838),45060=>array(67,-69,927,838),45061=>array(67,-68,911,838),45062=>array(67,-72,929,838),45063=>array(67,-70,936,838),45064=>array(67,-66,908,838),45065=>array(67,-59,916,838),45066=>array(67,-60,928,838),45067=>array(67,-68,908,838),45068=>array(64,-69,907,842),45069=>array(65,-61,907,842),45070=>array(65,-61,907,842),45071=>array(65,-71,931,842),45072=>array(78,-46,907,842),45073=>array(65,-68,912,842),45074=>array(65,-76,907,842),45075=>array(65,-44,921,842),45076=>array(65,-62,917,842),45077=>array(65,-64,907,842),45078=>array(65,-64,908,842),45079=>array(65,-64,908,842),45080=>array(65,-69,923,842),45081=>array(65,-64,908,842),45082=>array(65,-64,908,842),45083=>array(65,-76,907,842),45084=>array(65,-62,907,842),45085=>array(65,-61,907,842),45086=>array(65,-69,922,842),45087=>array(65,-74,929,842),45088=>array(65,-69,927,842),45089=>array(65,-68,911,842),45090=>array(65,-72,929,842),45091=>array(65,-70,936,842),45092=>array(65,-66,908,842),45093=>array(65,-59,916,842),45094=>array(65,-60,928,842),45095=>array(65,-68,908,842),45096=>array(84,-64,921,776),45097=>array(79,-61,921,766),45098=>array(79,-61,921,766),45099=>array(79,-71,921,766),45100=>array(81,-46,922,767),45101=>array(79,-68,921,766),45102=>array(79,-74,921,766),45103=>array(79,-44,921,766),45104=>array(79,-62,921,766),45105=>array(79,-64,921,766),45106=>array(79,-64,921,766),45107=>array(79,-63,921,766),45108=>array(79,-68,921,766),45109=>array(79,-64,921,766),45110=>array(79,-63,921,766),45111=>array(79,-74,921,766),45112=>array(79,-62,921,766),45113=>array(79,-61,921,766),45114=>array(79,-69,921,766),45115=>array(79,-74,921,766),45116=>array(79,-69,921,766),45117=>array(79,-68,921,766),45118=>array(79,-72,921,766),45119=>array(79,-70,921,766),45120=>array(79,-66,921,766),45121=>array(79,-59,921,766),45122=>array(79,-60,921,766),45123=>array(79,-68,921,766),45124=>array(57,52,943,691),45125=>array(79,-61,921,767),45126=>array(79,-61,921,767),45127=>array(79,-71,921,767),45128=>array(79,-46,921,767),45129=>array(79,-68,921,767),45130=>array(79,-74,921,767),45131=>array(79,-44,921,767),45132=>array(79,-62,921,767),45133=>array(79,-64,921,767),45134=>array(79,-64,921,767),45135=>array(79,-63,921,767),45136=>array(79,-68,921,767),45137=>array(79,-64,921,767),45138=>array(79,-63,921,767),45139=>array(79,-74,921,767),45140=>array(79,-62,921,767),45141=>array(79,-61,921,767),45142=>array(79,-69,921,767),45143=>array(79,-74,921,767),45144=>array(79,-69,921,767),45145=>array(79,-68,921,767),45146=>array(79,-72,921,767),45147=>array(79,-70,921,767),45148=>array(79,-66,921,767),45149=>array(79,-59,921,767),45150=>array(79,-60,921,767),45151=>array(79,-68,921,767),45152=>array(66,-69,907,842),45153=>array(75,-61,907,842),45154=>array(75,-61,907,842),45155=>array(75,-71,931,842),45156=>array(74,-46,907,842),45157=>array(75,-68,912,842),45158=>array(75,-76,907,842),45159=>array(75,-44,921,842),45160=>array(75,-62,917,842),45161=>array(75,-64,907,842),45162=>array(75,-64,908,842),45163=>array(75,-64,908,842),45164=>array(75,-69,923,842),45165=>array(75,-64,908,842),45166=>array(75,-64,908,842),45167=>array(75,-76,907,842),45168=>array(75,-62,907,842),45169=>array(75,-61,907,842),45170=>array(75,-69,922,842),45171=>array(75,-74,929,842),45172=>array(75,-69,927,842),45173=>array(75,-68,911,842),45174=>array(75,-72,929,842),45175=>array(75,-70,936,842),45176=>array(75,-66,908,842),45177=>array(75,-59,916,842),45178=>array(75,-60,928,842),45179=>array(75,-68,908,842),45180=>array(56,-69,907,842),45181=>array(123,-61,907,842),45182=>array(123,-61,907,842),45183=>array(123,-71,931,842),45184=>array(105,-46,907,842),45185=>array(123,-68,912,842),45186=>array(123,-76,907,842),45187=>array(123,-44,921,842),45188=>array(123,-62,917,842),45189=>array(123,-64,907,842),45190=>array(123,-64,908,842),45191=>array(123,-64,908,842),45192=>array(123,-69,923,842),45193=>array(123,-64,908,842),45194=>array(123,-64,908,842),45195=>array(123,-76,907,842),45196=>array(123,-62,907,842),45197=>array(123,-61,907,842),45198=>array(123,-69,922,842),45199=>array(123,-74,929,842),45200=>array(123,-69,927,842),45201=>array(123,-68,911,842),45202=>array(123,-72,929,842),45203=>array(123,-70,936,842),45204=>array(123,-66,908,842),45205=>array(123,-59,916,842),45206=>array(123,-60,928,842),45207=>array(123,-68,908,842),45208=>array(109,-69,936,842),45209=>array(109,-59,936,842),45210=>array(109,-61,936,842),45211=>array(109,-71,936,842),45212=>array(109,-45,936,842),45213=>array(109,-69,936,842),45214=>array(109,-76,936,842),45215=>array(109,-44,936,842),45216=>array(109,-62,936,842),45217=>array(109,-64,936,842),45218=>array(109,-64,936,842),45219=>array(109,-64,936,842),45220=>array(109,-70,936,842),45221=>array(109,-64,936,842),45222=>array(109,-64,936,842),45223=>array(109,-76,936,842),45224=>array(109,-62,936,842),45225=>array(109,-61,936,842),45226=>array(109,-70,936,842),45227=>array(109,-74,936,842),45228=>array(109,-69,936,842),45229=>array(109,-67,936,842),45230=>array(109,-72,936,842),45231=>array(109,-71,936,842),45232=>array(109,-66,936,842),45233=>array(109,-59,936,842),45234=>array(109,-60,936,842),45235=>array(109,-69,936,842),45236=>array(133,-69,907,842),45237=>array(109,-61,907,842),45238=>array(109,-61,907,842),45239=>array(109,-71,931,842),45240=>array(109,-46,907,842),45241=>array(109,-68,912,842),45242=>array(109,-76,907,842),45243=>array(109,-44,921,842),45244=>array(109,-62,917,842),45245=>array(109,-64,907,842),45246=>array(109,-64,908,842),45247=>array(109,-64,908,842),45248=>array(109,-69,923,842),45249=>array(109,-64,908,842),45250=>array(109,-64,908,842),45251=>array(109,-76,907,842),45252=>array(109,-62,907,842),45253=>array(109,-61,907,842),45254=>array(109,-69,922,842),45255=>array(109,-74,929,842),45256=>array(109,-69,927,842),45257=>array(109,-68,911,842),45258=>array(109,-72,929,842),45259=>array(109,-70,936,842),45260=>array(109,-66,908,842),45261=>array(109,-59,916,842),45262=>array(109,-60,928,842),45263=>array(109,-68,908,842),45264=>array(109,-69,936,842),45265=>array(109,-59,936,842),45266=>array(109,-61,936,842),45267=>array(109,-71,936,842),45268=>array(109,-45,936,842),45269=>array(109,-69,936,842),45270=>array(109,-76,936,842),45271=>array(109,-44,936,842),45272=>array(109,-62,936,842),45273=>array(109,-64,936,842),45274=>array(109,-64,936,842),45275=>array(109,-64,936,842),45276=>array(109,-70,936,842),45277=>array(109,-64,936,842),45278=>array(109,-64,936,842),45279=>array(109,-76,936,842),45280=>array(109,-62,936,842),45281=>array(109,-61,936,842),45282=>array(109,-70,936,842),45283=>array(109,-74,936,842),45284=>array(109,-69,936,842),45285=>array(109,-67,936,842),45286=>array(109,-72,936,842),45287=>array(109,-71,936,842),45288=>array(109,-66,936,842),45289=>array(109,-59,936,842),45290=>array(109,-60,936,842),45291=>array(109,-69,936,842),45292=>array(133,-69,907,842),45293=>array(109,-61,907,842),45294=>array(109,-61,907,842),45295=>array(109,-71,931,842),45296=>array(109,-46,907,842),45297=>array(109,-68,912,842),45298=>array(109,-76,907,842),45299=>array(109,-44,921,842),45300=>array(109,-62,917,842),45301=>array(109,-64,907,842),45302=>array(109,-64,908,842),45303=>array(109,-64,908,842),45304=>array(109,-69,923,842),45305=>array(109,-64,908,842),45306=>array(109,-64,908,842),45307=>array(109,-76,907,842),45308=>array(109,-62,907,842),45309=>array(109,-61,907,842),45310=>array(109,-69,922,842),45311=>array(109,-74,929,842),45312=>array(109,-69,927,842),45313=>array(109,-68,911,842),45314=>array(109,-72,929,842),45315=>array(109,-70,936,842),45316=>array(109,-66,908,842),45317=>array(109,-59,916,842),45318=>array(109,-60,928,842),45319=>array(109,-68,908,842),45320=>array(109,-70,907,841),45321=>array(109,-61,907,841),45322=>array(109,-61,907,841),45323=>array(109,-71,931,841),45324=>array(109,-46,907,841),45325=>array(109,-68,912,841),45326=>array(109,-76,907,841),45327=>array(109,-44,921,841),45328=>array(109,-62,917,841),45329=>array(109,-64,907,841),45330=>array(109,-64,908,841),45331=>array(109,-64,908,841),45332=>array(109,-69,923,841),45333=>array(109,-64,908,841),45334=>array(109,-64,908,841),45335=>array(109,-76,906,841),45336=>array(109,-62,907,841),45337=>array(109,-61,907,841),45338=>array(109,-69,922,841),45339=>array(109,-74,929,841),45340=>array(109,-69,927,841),45341=>array(109,-68,911,841),45342=>array(109,-72,929,841),45343=>array(109,-70,936,841),45344=>array(109,-66,908,841),45345=>array(109,-59,916,841),45346=>array(109,-60,928,841),45347=>array(109,-68,908,841),45348=>array(134,-68,907,843),45349=>array(109,-61,907,843),45350=>array(109,-61,907,843),45351=>array(109,-71,931,843),45352=>array(109,-46,907,843),45353=>array(109,-68,912,843),45354=>array(109,-76,907,843),45355=>array(109,-44,921,843),45356=>array(109,-62,917,843),45357=>array(109,-64,907,843),45358=>array(109,-64,908,843),45359=>array(109,-64,908,843),45360=>array(109,-69,923,843),45361=>array(109,-64,908,843),45362=>array(109,-64,908,843),45363=>array(109,-76,907,843),45364=>array(109,-62,907,843),45365=>array(109,-61,907,843),45366=>array(109,-69,922,843),45367=>array(109,-74,929,843),45368=>array(109,-69,927,843),45369=>array(109,-68,911,843),45370=>array(109,-72,929,843),45371=>array(109,-70,936,843),45372=>array(109,-66,908,843),45373=>array(109,-59,916,843),45374=>array(109,-60,928,843),45375=>array(109,-68,908,843),45376=>array(109,-69,909,842),45377=>array(109,-61,907,842),45378=>array(109,-61,907,842),45379=>array(109,-71,931,842),45380=>array(109,-46,908,841),45381=>array(109,-68,912,842),45382=>array(109,-76,907,842),45383=>array(109,-44,921,842),45384=>array(109,-62,917,842),45385=>array(109,-64,907,842),45386=>array(109,-64,908,842),45387=>array(109,-64,908,842),45388=>array(109,-69,923,842),45389=>array(109,-64,908,842),45390=>array(109,-64,908,842),45391=>array(109,-76,907,842),45392=>array(109,-62,907,842),45393=>array(109,-61,907,842),45394=>array(109,-69,922,842),45395=>array(109,-74,929,842),45396=>array(109,-69,927,842),45397=>array(109,-68,911,842),45398=>array(109,-72,929,842),45399=>array(109,-70,936,842),45400=>array(109,-66,908,842),45401=>array(109,-59,916,842),45402=>array(109,-60,928,842),45403=>array(109,-68,908,842),45404=>array(144,-68,907,843),45405=>array(109,-61,907,838),45406=>array(109,-61,907,838),45407=>array(109,-71,931,838),45408=>array(109,-46,907,843),45409=>array(109,-68,912,838),45410=>array(109,-76,907,838),45411=>array(109,-44,921,838),45412=>array(109,-62,917,838),45413=>array(109,-64,907,838),45414=>array(109,-64,908,838),45415=>array(109,-64,908,838),45416=>array(109,-69,923,838),45417=>array(109,-64,908,838),45418=>array(109,-64,908,838),45419=>array(109,-76,907,838),45420=>array(109,-62,907,838),45421=>array(109,-61,907,838),45422=>array(109,-69,922,838),45423=>array(109,-74,929,838),45424=>array(109,-69,927,838),45425=>array(109,-68,911,838),45426=>array(109,-72,929,838),45427=>array(109,-70,936,838),45428=>array(109,-66,908,838),45429=>array(109,-59,916,838),45430=>array(109,-60,928,838),45431=>array(109,-68,908,838),45432=>array(62,27,943,732),45433=>array(79,-61,921,797),45434=>array(79,-61,921,797),45435=>array(79,-71,921,797),45436=>array(79,-46,921,792),45437=>array(79,-68,921,797),45438=>array(79,-74,921,797),45439=>array(79,-44,921,797),45440=>array(79,-62,921,797),45441=>array(79,-64,921,797),45442=>array(79,-64,921,797),45443=>array(79,-63,921,797),45444=>array(79,-68,921,797),45445=>array(79,-64,921,797),45446=>array(79,-63,921,797),45447=>array(79,-74,921,797),45448=>array(79,-62,921,797),45449=>array(79,-61,921,797),45450=>array(79,-69,921,797),45451=>array(79,-74,921,797),45452=>array(79,-69,921,797),45453=>array(79,-68,921,797),45454=>array(79,-72,921,797),45455=>array(79,-70,921,797),45456=>array(79,-66,921,797),45457=>array(79,-59,921,797),45458=>array(79,-60,921,797),45459=>array(79,-68,921,797),45460=>array(47,-69,936,842),45461=>array(64,-59,936,842),45462=>array(64,-61,936,842),45463=>array(64,-71,936,842),45464=>array(74,-45,936,842),45465=>array(64,-69,936,842),45466=>array(64,-76,936,842),45467=>array(64,-44,936,842),45468=>array(64,-62,936,842),45469=>array(64,-64,936,842),45470=>array(64,-64,936,842),45471=>array(64,-64,936,842),45472=>array(64,-70,936,842),45473=>array(64,-64,936,842),45474=>array(64,-64,936,842),45475=>array(64,-76,936,842),45476=>array(64,-62,936,842),45477=>array(64,-61,936,842),45478=>array(64,-70,936,842),45479=>array(64,-74,936,842),45480=>array(64,-69,936,842),45481=>array(64,-67,936,842),45482=>array(64,-72,936,842),45483=>array(64,-71,936,842),45484=>array(64,-66,936,842),45485=>array(64,-59,936,842),45486=>array(64,-60,936,842),45487=>array(64,-69,936,842),45488=>array(43,-68,907,843),45489=>array(79,-61,907,843),45490=>array(79,-61,907,843),45491=>array(79,-71,931,843),45492=>array(72,-46,907,842),45493=>array(79,-68,912,843),45494=>array(79,-76,907,843),45495=>array(79,-44,921,843),45496=>array(79,-62,917,843),45497=>array(79,-64,907,843),45498=>array(79,-64,908,843),45499=>array(79,-64,908,843),45500=>array(79,-69,923,843),45501=>array(79,-64,908,843),45502=>array(79,-64,908,843),45503=>array(79,-76,907,843),45504=>array(79,-62,907,843),45505=>array(79,-61,907,843),45506=>array(79,-69,922,843),45507=>array(79,-74,929,843),45508=>array(79,-69,927,843),45509=>array(79,-68,911,843),45510=>array(79,-72,929,843),45511=>array(79,-70,936,843),45512=>array(79,-66,908,843),45513=>array(79,-59,916,843),45514=>array(79,-60,928,843),45515=>array(79,-68,908,843),45516=>array(62,-69,907,842),45517=>array(64,-61,908,842),45518=>array(64,-61,908,842),45519=>array(64,-71,931,842),45520=>array(64,-46,908,841),45521=>array(64,-68,912,842),45522=>array(64,-76,908,842),45523=>array(64,-44,921,842),45524=>array(64,-62,917,842),45525=>array(64,-64,908,842),45526=>array(64,-64,908,842),45527=>array(64,-64,908,842),45528=>array(64,-69,923,842),45529=>array(64,-64,908,842),45530=>array(64,-64,908,842),45531=>array(64,-76,908,842),45532=>array(64,-62,908,842),45533=>array(64,-61,908,842),45534=>array(64,-69,922,842),45535=>array(64,-74,929,842),45536=>array(64,-69,927,842),45537=>array(64,-68,911,842),45538=>array(64,-72,929,842),45539=>array(64,-70,936,842),45540=>array(64,-66,908,842),45541=>array(64,-59,916,842),45542=>array(64,-60,928,842),45543=>array(64,-68,908,842),45544=>array(60,-13,940,742),45545=>array(79,-61,922,797),45546=>array(79,-61,922,797),45547=>array(79,-71,922,797),45548=>array(79,-46,922,797),45549=>array(79,-68,922,797),45550=>array(79,-74,922,797),45551=>array(79,-44,922,797),45552=>array(79,-62,922,797),45553=>array(79,-64,922,797),45554=>array(79,-64,922,797),45555=>array(79,-63,922,797),45556=>array(79,-68,922,797),45557=>array(79,-64,922,797),45558=>array(79,-63,922,797),45559=>array(79,-74,922,797),45560=>array(79,-62,922,797),45561=>array(79,-61,922,797),45562=>array(79,-69,922,797),45563=>array(79,-74,922,797),45564=>array(79,-69,922,797),45565=>array(79,-68,922,797),45566=>array(79,-72,922,797),45567=>array(79,-70,922,797),45568=>array(79,-66,922,797),45569=>array(79,-59,922,797),45570=>array(79,-60,922,797),45571=>array(79,-68,922,797),45572=>array(79,-64,921,797),45573=>array(79,-61,921,797),45574=>array(79,-61,921,797),45575=>array(79,-71,921,797),45576=>array(79,-46,921,797),45577=>array(79,-68,921,797),45578=>array(79,-74,921,797),45579=>array(79,-44,921,797),45580=>array(79,-62,921,797),45581=>array(79,-64,921,797),45582=>array(79,-64,921,797),45583=>array(79,-63,921,797),45584=>array(79,-68,921,797),45585=>array(79,-64,921,797),45586=>array(79,-63,921,797),45587=>array(79,-74,921,797),45588=>array(79,-62,921,797),45589=>array(79,-61,921,797),45590=>array(79,-69,921,797),45591=>array(79,-74,921,797),45592=>array(79,-69,921,797),45593=>array(79,-68,921,797),45594=>array(79,-72,921,797),45595=>array(79,-70,921,797),45596=>array(79,-66,921,797),45597=>array(79,-59,921,797),45598=>array(79,-60,921,797),45599=>array(79,-68,921,797),45600=>array(69,-69,909,842),45601=>array(79,-61,907,841),45602=>array(79,-61,907,841),45603=>array(79,-71,931,841),45604=>array(79,-46,907,841),45605=>array(79,-68,912,841),45606=>array(79,-76,907,841),45607=>array(79,-44,921,841),45608=>array(79,-62,917,841),45609=>array(79,-64,907,841),45610=>array(79,-64,908,841),45611=>array(79,-64,908,841),45612=>array(79,-69,923,841),45613=>array(79,-64,908,841),45614=>array(79,-64,908,841),45615=>array(79,-76,906,841),45616=>array(79,-62,907,841),45617=>array(79,-61,907,841),45618=>array(79,-69,922,841),45619=>array(79,-74,929,841),45620=>array(79,-69,927,841),45621=>array(79,-68,911,841),45622=>array(79,-72,929,841),45623=>array(79,-70,936,841),45624=>array(79,-66,908,841),45625=>array(79,-59,916,841),45626=>array(79,-60,928,841),45627=>array(79,-68,908,841),45628=>array(63,-68,907,843),45629=>array(72,-61,907,843),45630=>array(72,-61,907,843),45631=>array(72,-71,931,843),45632=>array(90,-46,907,843),45633=>array(72,-68,912,843),45634=>array(72,-76,907,843),45635=>array(72,-44,921,843),45636=>array(72,-62,917,843),45637=>array(72,-64,907,843),45638=>array(72,-64,908,843),45639=>array(72,-64,908,843),45640=>array(72,-69,923,843),45641=>array(72,-64,908,843),45642=>array(72,-64,908,843),45643=>array(72,-76,907,843),45644=>array(72,-62,907,843),45645=>array(72,-61,907,843),45646=>array(72,-69,922,843),45647=>array(72,-74,929,843),45648=>array(72,-69,927,843),45649=>array(72,-68,911,843),45650=>array(72,-72,929,843),45651=>array(72,-70,936,843),45652=>array(72,-66,908,843),45653=>array(72,-59,916,843),45654=>array(72,-60,928,843),45655=>array(72,-68,908,843),45656=>array(70,-68,910,843),45657=>array(64,-61,907,842),45658=>array(64,-61,907,842),45659=>array(64,-71,931,842),45660=>array(65,-46,907,841),45661=>array(64,-68,912,842),45662=>array(64,-76,907,842),45663=>array(64,-44,921,842),45664=>array(64,-62,917,842),45665=>array(64,-64,907,842),45666=>array(64,-64,908,842),45667=>array(64,-64,908,842),45668=>array(64,-69,923,842),45669=>array(64,-64,908,842),45670=>array(64,-64,908,842),45671=>array(64,-76,907,842),45672=>array(64,-62,907,842),45673=>array(64,-61,907,842),45674=>array(64,-69,922,842),45675=>array(64,-74,929,842),45676=>array(64,-69,927,842),45677=>array(64,-68,911,842),45678=>array(64,-72,929,842),45679=>array(64,-70,936,842),45680=>array(64,-66,908,842),45681=>array(64,-59,916,842),45682=>array(64,-60,928,842),45683=>array(64,-68,908,842),45684=>array(71,-64,928,797),45685=>array(79,-61,921,797),45686=>array(79,-61,921,797),45687=>array(79,-71,921,797),45688=>array(79,-46,921,797),45689=>array(79,-68,921,797),45690=>array(79,-74,921,797),45691=>array(79,-44,921,797),45692=>array(79,-62,921,797),45693=>array(79,-64,921,797),45694=>array(79,-64,921,797),45695=>array(79,-63,921,797),45696=>array(79,-68,921,797),45697=>array(79,-64,921,797),45698=>array(79,-63,921,797),45699=>array(79,-74,921,797),45700=>array(79,-62,921,797),45701=>array(79,-61,921,797),45702=>array(79,-69,921,797),45703=>array(79,-74,921,797),45704=>array(79,-69,921,797),45705=>array(79,-68,921,797),45706=>array(79,-72,921,797),45707=>array(79,-70,921,797),45708=>array(79,-66,921,797),45709=>array(79,-59,921,797),45710=>array(79,-60,921,797),45711=>array(79,-68,921,797),45712=>array(57,32,943,747),45713=>array(79,-61,921,802),45714=>array(79,-61,921,802),45715=>array(79,-71,921,802),45716=>array(79,-46,921,812),45717=>array(79,-68,921,802),45718=>array(79,-74,921,802),45719=>array(79,-44,921,802),45720=>array(79,-62,921,802),45721=>array(79,-64,921,802),45722=>array(79,-64,921,802),45723=>array(79,-63,921,802),45724=>array(79,-68,921,802),45725=>array(79,-64,921,802),45726=>array(79,-63,921,802),45727=>array(79,-74,921,802),45728=>array(79,-62,921,802),45729=>array(79,-61,921,802),45730=>array(79,-69,921,802),45731=>array(79,-74,921,802),45732=>array(79,-69,921,802),45733=>array(79,-68,921,802),45734=>array(79,-72,921,802),45735=>array(79,-70,921,802),45736=>array(79,-66,921,802),45737=>array(79,-59,921,802),45738=>array(79,-60,921,802),45739=>array(79,-68,921,802),45740=>array(68,-69,907,842),45741=>array(69,-61,907,842),45742=>array(69,-61,907,842),45743=>array(69,-71,931,842),45744=>array(65,-46,907,842),45745=>array(69,-68,912,842),45746=>array(69,-76,907,842),45747=>array(69,-44,921,842),45748=>array(69,-62,917,842),45749=>array(69,-64,907,842),45750=>array(69,-64,908,842),45751=>array(69,-64,908,842),45752=>array(69,-69,923,842),45753=>array(69,-64,908,842),45754=>array(69,-64,908,842),45755=>array(69,-76,907,842),45756=>array(69,-62,907,842),45757=>array(69,-61,907,842),45758=>array(69,-69,922,842),45759=>array(69,-74,929,842),45760=>array(69,-69,927,842),45761=>array(69,-68,911,842),45762=>array(69,-72,929,842),45763=>array(69,-70,936,842),45764=>array(69,-66,908,842),45765=>array(69,-59,916,842),45766=>array(69,-60,928,842),45767=>array(69,-68,908,842),45768=>array(138,-69,907,842),45769=>array(138,-61,907,842),45770=>array(138,-61,907,842),45771=>array(138,-71,931,842),45772=>array(138,-46,907,842),45773=>array(138,-68,912,842),45774=>array(138,-76,907,842),45775=>array(138,-44,921,842),45776=>array(138,-62,917,842),45777=>array(138,-64,907,842),45778=>array(138,-64,908,842),45779=>array(138,-64,908,842),45780=>array(138,-69,923,842),45781=>array(138,-64,908,842),45782=>array(138,-64,908,842),45783=>array(138,-76,907,842),45784=>array(138,-62,907,842),45785=>array(138,-61,907,842),45786=>array(138,-69,922,842),45787=>array(138,-74,929,842),45788=>array(138,-69,927,842),45789=>array(138,-68,911,842),45790=>array(138,-72,929,842),45791=>array(138,-70,936,842),45792=>array(138,-66,908,842),45793=>array(138,-59,916,842),45794=>array(138,-60,928,842),45795=>array(138,-68,908,842),45796=>array(109,-69,936,842),45797=>array(109,-59,936,837),45798=>array(109,-61,936,837),45799=>array(109,-71,936,837),45800=>array(109,-45,936,842),45801=>array(109,-69,936,837),45802=>array(109,-76,936,837),45803=>array(109,-44,936,837),45804=>array(109,-62,936,837),45805=>array(109,-64,936,837),45806=>array(109,-64,936,837),45807=>array(109,-64,936,837),45808=>array(109,-70,936,837),45809=>array(109,-64,936,837),45810=>array(109,-64,936,837),45811=>array(109,-76,936,837),45812=>array(109,-62,936,837),45813=>array(109,-61,936,837),45814=>array(109,-70,936,837),45815=>array(109,-74,936,837),45816=>array(109,-69,936,837),45817=>array(109,-67,936,837),45818=>array(109,-72,936,837),45819=>array(109,-71,936,837),45820=>array(109,-66,936,837),45821=>array(109,-59,936,837),45822=>array(109,-60,936,837),45823=>array(109,-69,936,837),45824=>array(109,-69,907,842),45825=>array(119,-61,907,842),45826=>array(119,-61,907,842),45827=>array(119,-71,931,842),45828=>array(119,-46,907,842),45829=>array(119,-68,912,842),45830=>array(119,-76,907,842),45831=>array(119,-44,921,842),45832=>array(119,-62,917,842),45833=>array(119,-64,907,842),45834=>array(119,-64,908,842),45835=>array(119,-64,908,842),45836=>array(119,-69,923,842),45837=>array(119,-64,908,842),45838=>array(119,-64,908,842),45839=>array(119,-76,907,842),45840=>array(119,-62,907,842),45841=>array(119,-61,907,842),45842=>array(119,-69,922,842),45843=>array(119,-74,929,842),45844=>array(119,-69,927,842),45845=>array(119,-68,911,842),45846=>array(119,-72,929,842),45847=>array(119,-70,936,842),45848=>array(119,-66,908,842),45849=>array(119,-59,916,842),45850=>array(119,-60,928,842),45851=>array(119,-68,908,842),45852=>array(109,-68,935,843),45853=>array(109,-59,936,842),45854=>array(109,-61,936,842),45855=>array(109,-71,936,842),45856=>array(109,-45,936,842),45857=>array(109,-69,936,842),45858=>array(109,-76,936,842),45859=>array(109,-44,936,842),45860=>array(109,-62,936,842),45861=>array(109,-64,936,842),45862=>array(109,-64,936,842),45863=>array(109,-64,936,842),45864=>array(109,-70,936,842),45865=>array(109,-64,936,842),45866=>array(109,-64,936,842),45867=>array(109,-76,936,842),45868=>array(109,-62,936,842),45869=>array(109,-61,936,842),45870=>array(109,-70,936,842),45871=>array(109,-74,936,842),45872=>array(109,-69,936,842),45873=>array(109,-67,936,842),45874=>array(109,-72,936,842),45875=>array(109,-71,936,842),45876=>array(109,-66,936,842),45877=>array(109,-59,936,842),45878=>array(109,-60,936,842),45879=>array(109,-69,936,842),45880=>array(109,-69,907,842),45881=>array(119,-61,907,842),45882=>array(119,-61,907,842),45883=>array(119,-71,931,842),45884=>array(119,-46,907,842),45885=>array(119,-68,912,842),45886=>array(119,-76,907,842),45887=>array(119,-44,921,842),45888=>array(119,-62,917,842),45889=>array(119,-64,907,842),45890=>array(119,-64,908,842),45891=>array(119,-64,908,842),45892=>array(119,-69,923,842),45893=>array(119,-64,908,842),45894=>array(119,-64,908,842),45895=>array(119,-76,907,842),45896=>array(119,-62,907,842),45897=>array(119,-61,907,842),45898=>array(119,-69,922,842),45899=>array(119,-74,929,842),45900=>array(119,-69,927,842),45901=>array(119,-68,911,842),45902=>array(119,-72,929,842),45903=>array(119,-70,936,842),45904=>array(119,-66,908,842),45905=>array(119,-59,916,842),45906=>array(119,-60,928,842),45907=>array(119,-68,908,842),45908=>array(109,-70,907,841),45909=>array(109,-61,907,841),45910=>array(109,-61,907,841),45911=>array(109,-71,931,841),45912=>array(109,-46,907,841),45913=>array(109,-68,912,841),45914=>array(109,-76,907,841),45915=>array(109,-44,921,841),45916=>array(109,-62,917,841),45917=>array(109,-64,907,841),45918=>array(109,-64,908,841),45919=>array(109,-64,908,841),45920=>array(109,-69,923,841),45921=>array(109,-64,908,841),45922=>array(109,-64,908,841),45923=>array(109,-76,906,841),45924=>array(109,-62,907,841),45925=>array(109,-61,907,841),45926=>array(109,-69,922,841),45927=>array(109,-74,929,841),45928=>array(109,-69,927,841),45929=>array(109,-68,911,841),45930=>array(109,-72,929,841),45931=>array(109,-70,936,841),45932=>array(109,-66,908,841),45933=>array(109,-59,916,841),45934=>array(109,-60,928,841),45935=>array(109,-68,908,841),45936=>array(109,-68,907,843),45937=>array(119,-61,907,843),45938=>array(119,-61,907,843),45939=>array(119,-71,931,843),45940=>array(119,-46,907,843),45941=>array(119,-68,912,843),45942=>array(119,-76,907,843),45943=>array(119,-44,921,843),45944=>array(119,-62,917,843),45945=>array(119,-64,907,843),45946=>array(119,-64,908,843),45947=>array(119,-64,908,843),45948=>array(119,-69,923,843),45949=>array(119,-64,908,843),45950=>array(119,-64,908,843),45951=>array(119,-76,907,843),45952=>array(119,-62,907,843),45953=>array(119,-61,907,843),45954=>array(119,-69,922,843),45955=>array(119,-74,929,843),45956=>array(119,-69,927,843),45957=>array(119,-68,911,843),45958=>array(119,-72,929,843),45959=>array(119,-70,936,843),45960=>array(119,-66,908,843),45961=>array(119,-59,916,843),45962=>array(119,-60,928,843),45963=>array(119,-68,908,843),45964=>array(109,-70,907,842),45965=>array(109,-61,908,842),45966=>array(109,-61,908,842),45967=>array(109,-71,931,842),45968=>array(109,-46,907,842),45969=>array(109,-68,912,842),45970=>array(109,-76,908,842),45971=>array(109,-44,921,842),45972=>array(109,-62,917,842),45973=>array(109,-64,908,842),45974=>array(109,-64,908,842),45975=>array(109,-64,908,842),45976=>array(109,-69,923,842),45977=>array(109,-64,908,842),45978=>array(109,-64,908,842),45979=>array(109,-76,908,842),45980=>array(109,-62,908,842),45981=>array(109,-61,908,842),45982=>array(109,-69,922,842),45983=>array(109,-74,929,842),45984=>array(109,-69,927,842),45985=>array(109,-68,911,842),45986=>array(109,-72,929,842),45987=>array(109,-70,936,842),45988=>array(109,-66,908,842),45989=>array(109,-59,916,842),45990=>array(109,-60,928,842),45991=>array(109,-68,908,842),45992=>array(109,-68,907,843),45993=>array(119,-61,907,843),45994=>array(119,-61,907,843),45995=>array(119,-71,931,843),45996=>array(119,-46,907,843),45997=>array(119,-68,912,843),45998=>array(119,-76,907,843),45999=>array(119,-44,921,843),46000=>array(119,-62,917,843),46001=>array(119,-64,907,843),46002=>array(119,-64,908,843),46003=>array(119,-64,908,843),46004=>array(119,-69,923,843),46005=>array(119,-64,908,843),46006=>array(119,-64,908,843),46007=>array(119,-76,907,843),46008=>array(119,-62,907,843),46009=>array(119,-61,907,843),46010=>array(119,-69,922,843),46011=>array(119,-74,929,843),46012=>array(119,-69,927,843),46013=>array(119,-68,911,843),46014=>array(119,-72,929,843),46015=>array(119,-70,936,843),46016=>array(119,-66,908,843),46017=>array(119,-59,916,843),46018=>array(119,-60,928,843),46019=>array(119,-68,908,843),46020=>array(62,-13,943,759),46021=>array(79,-61,921,790),46022=>array(79,-61,921,790),46023=>array(79,-71,921,790),46024=>array(79,-46,921,784),46025=>array(79,-68,921,790),46026=>array(79,-74,921,790),46027=>array(79,-44,921,790),46028=>array(79,-62,921,790),46029=>array(79,-64,921,790),46030=>array(79,-64,921,790),46031=>array(79,-63,921,790),46032=>array(79,-68,921,790),46033=>array(79,-64,921,790),46034=>array(79,-63,921,790),46035=>array(79,-74,921,790),46036=>array(79,-62,921,790),46037=>array(79,-61,921,790),46038=>array(79,-69,921,790),46039=>array(79,-74,921,790),46040=>array(79,-69,921,790),46041=>array(79,-68,921,790),46042=>array(79,-72,921,790),46043=>array(79,-70,921,790),46044=>array(79,-66,921,790),46045=>array(79,-59,921,790),46046=>array(79,-60,921,790),46047=>array(79,-68,921,790),46048=>array(47,-69,936,842),46049=>array(64,-59,936,842),46050=>array(64,-61,936,842),46051=>array(64,-71,936,842),46052=>array(74,-45,936,842),46053=>array(64,-69,936,842),46054=>array(64,-76,936,842),46055=>array(64,-44,936,842),46056=>array(64,-62,936,842),46057=>array(64,-64,936,842),46058=>array(64,-64,936,842),46059=>array(64,-64,936,842),46060=>array(64,-70,936,842),46061=>array(64,-64,936,842),46062=>array(64,-64,936,842),46063=>array(64,-76,936,842),46064=>array(64,-62,936,842),46065=>array(64,-61,936,842),46066=>array(64,-70,936,842),46067=>array(64,-74,936,842),46068=>array(64,-69,936,842),46069=>array(64,-67,936,842),46070=>array(64,-72,936,842),46071=>array(64,-71,936,842),46072=>array(64,-66,936,842),46073=>array(64,-59,936,842),46074=>array(64,-60,936,842),46075=>array(64,-69,936,842),46076=>array(61,-69,906,842),46077=>array(64,-61,907,842),46078=>array(64,-61,907,842),46079=>array(64,-71,931,842),46080=>array(53,-46,907,842),46081=>array(64,-68,912,842),46082=>array(64,-76,907,842),46083=>array(64,-44,921,842),46084=>array(64,-62,917,842),46085=>array(64,-64,907,842),46086=>array(64,-64,908,842),46087=>array(64,-64,908,842),46088=>array(64,-69,923,842),46089=>array(64,-64,908,842),46090=>array(64,-64,908,842),46091=>array(64,-76,907,842),46092=>array(64,-62,907,842),46093=>array(64,-61,907,842),46094=>array(64,-69,922,842),46095=>array(64,-74,929,842),46096=>array(64,-69,927,842),46097=>array(64,-68,911,842),46098=>array(64,-72,929,842),46099=>array(64,-70,936,842),46100=>array(64,-66,908,842),46101=>array(64,-59,916,842),46102=>array(64,-60,928,842),46103=>array(64,-68,908,842),46104=>array(62,-69,907,842),46105=>array(64,-61,907,842),46106=>array(64,-61,907,842),46107=>array(64,-71,931,842),46108=>array(64,-46,908,841),46109=>array(64,-68,912,842),46110=>array(64,-76,907,842),46111=>array(64,-44,921,842),46112=>array(64,-62,917,842),46113=>array(64,-64,907,842),46114=>array(64,-64,908,842),46115=>array(64,-64,908,842),46116=>array(64,-69,923,842),46117=>array(64,-64,908,842),46118=>array(64,-64,908,842),46119=>array(64,-76,907,842),46120=>array(64,-62,907,842),46121=>array(64,-61,907,842),46122=>array(64,-69,922,842),46123=>array(64,-74,929,842),46124=>array(64,-69,927,842),46125=>array(64,-68,911,842),46126=>array(64,-72,929,842),46127=>array(64,-70,936,842),46128=>array(64,-66,908,842),46129=>array(64,-59,916,842),46130=>array(64,-60,928,842),46131=>array(64,-68,908,842),46132=>array(60,-13,940,759),46133=>array(79,-61,921,785),46134=>array(79,-61,921,785),46135=>array(79,-71,921,785),46136=>array(79,-46,922,784),46137=>array(79,-68,921,785),46138=>array(79,-74,921,785),46139=>array(79,-44,921,785),46140=>array(79,-62,921,785),46141=>array(79,-64,921,785),46142=>array(79,-64,921,785),46143=>array(79,-63,921,785),46144=>array(79,-68,921,785),46145=>array(79,-64,921,785),46146=>array(79,-63,921,785),46147=>array(79,-74,921,785),46148=>array(79,-62,921,785),46149=>array(79,-61,921,785),46150=>array(79,-69,921,785),46151=>array(79,-74,921,785),46152=>array(79,-69,921,785),46153=>array(79,-68,921,785),46154=>array(79,-72,921,785),46155=>array(79,-70,921,785),46156=>array(79,-66,921,785),46157=>array(79,-59,921,785),46158=>array(79,-60,921,785),46159=>array(79,-68,921,785),46160=>array(79,-64,920,789),46161=>array(79,-61,921,785),46162=>array(79,-61,921,785),46163=>array(79,-71,921,785),46164=>array(79,-46,921,784),46165=>array(79,-68,921,785),46166=>array(79,-74,921,785),46167=>array(79,-44,921,785),46168=>array(79,-62,921,785),46169=>array(79,-64,921,785),46170=>array(79,-64,921,785),46171=>array(79,-63,921,785),46172=>array(79,-68,921,785),46173=>array(79,-64,921,785),46174=>array(79,-63,921,785),46175=>array(79,-74,921,785),46176=>array(79,-62,921,785),46177=>array(79,-61,921,785),46178=>array(79,-69,921,785),46179=>array(79,-74,921,785),46180=>array(79,-69,921,785),46181=>array(79,-68,921,785),46182=>array(79,-72,921,785),46183=>array(79,-70,921,785),46184=>array(79,-66,921,785),46185=>array(79,-59,921,785),46186=>array(79,-60,921,785),46187=>array(79,-68,921,785),46188=>array(68,-70,907,841),46189=>array(76,-61,907,841),46190=>array(76,-61,907,841),46191=>array(76,-71,931,841),46192=>array(75,-46,907,841),46193=>array(76,-68,912,841),46194=>array(76,-76,907,841),46195=>array(76,-44,921,841),46196=>array(76,-62,917,841),46197=>array(76,-64,907,841),46198=>array(76,-64,908,841),46199=>array(76,-64,908,841),46200=>array(76,-69,923,841),46201=>array(76,-64,908,841),46202=>array(76,-64,908,841),46203=>array(76,-76,906,841),46204=>array(76,-62,907,841),46205=>array(76,-61,907,841),46206=>array(76,-69,922,841),46207=>array(76,-74,929,841),46208=>array(76,-69,927,841),46209=>array(76,-68,911,841),46210=>array(76,-72,929,841),46211=>array(76,-70,936,841),46212=>array(76,-66,908,841),46213=>array(76,-59,916,841),46214=>array(76,-60,928,841),46215=>array(76,-68,908,841),46216=>array(52,-69,908,842),46217=>array(71,-61,907,843),46218=>array(71,-61,907,843),46219=>array(71,-71,931,843),46220=>array(79,-46,907,843),46221=>array(71,-68,912,843),46222=>array(71,-76,907,843),46223=>array(71,-44,921,843),46224=>array(71,-62,917,843),46225=>array(71,-64,907,843),46226=>array(71,-64,908,843),46227=>array(71,-64,908,843),46228=>array(71,-69,923,843),46229=>array(71,-64,908,843),46230=>array(71,-64,908,843),46231=>array(71,-76,907,843),46232=>array(71,-62,907,843),46233=>array(71,-61,907,843),46234=>array(71,-69,922,843),46235=>array(71,-74,929,843),46236=>array(71,-69,927,843),46237=>array(71,-68,911,843),46238=>array(71,-72,929,843),46239=>array(71,-70,936,843),46240=>array(71,-66,908,843),46241=>array(71,-59,916,843),46242=>array(71,-60,928,843),46243=>array(71,-68,908,843),46244=>array(70,-69,907,842),46245=>array(64,-61,907,842),46246=>array(64,-61,907,842),46247=>array(64,-71,931,842),46248=>array(65,-46,907,843),46249=>array(64,-68,912,842),46250=>array(64,-76,907,842),46251=>array(64,-44,921,842),46252=>array(64,-62,917,842),46253=>array(64,-64,907,842),46254=>array(64,-64,908,842),46255=>array(64,-64,908,842),46256=>array(64,-69,923,842),46257=>array(64,-64,908,842),46258=>array(64,-64,908,842),46259=>array(64,-76,907,842),46260=>array(64,-62,907,842),46261=>array(64,-61,907,842),46262=>array(64,-69,922,842),46263=>array(64,-74,929,842),46264=>array(64,-69,927,842),46265=>array(64,-68,911,842),46266=>array(64,-72,929,842),46267=>array(64,-70,936,842),46268=>array(64,-66,908,842),46269=>array(64,-59,916,842),46270=>array(64,-60,928,842),46271=>array(64,-68,908,842),46272=>array(71,-64,928,784),46273=>array(79,-61,921,785),46274=>array(79,-61,921,785),46275=>array(79,-71,921,785),46276=>array(79,-46,921,784),46277=>array(79,-68,921,785),46278=>array(79,-74,921,785),46279=>array(79,-44,921,785),46280=>array(79,-62,921,785),46281=>array(79,-64,921,785),46282=>array(79,-64,921,785),46283=>array(79,-63,921,785),46284=>array(79,-68,921,785),46285=>array(79,-64,921,785),46286=>array(79,-63,921,785),46287=>array(79,-74,921,785),46288=>array(79,-62,921,785),46289=>array(79,-61,921,785),46290=>array(79,-69,921,785),46291=>array(79,-74,921,785),46292=>array(79,-69,921,785),46293=>array(79,-68,921,785),46294=>array(79,-72,921,785),46295=>array(79,-70,921,785),46296=>array(79,-66,921,785),46297=>array(79,-59,921,785),46298=>array(79,-60,921,785),46299=>array(79,-68,921,785),46300=>array(57,42,943,709),46301=>array(79,-61,921,784),46302=>array(79,-61,921,784),46303=>array(79,-71,921,784),46304=>array(79,-46,921,784),46305=>array(79,-68,921,784),46306=>array(79,-74,921,784),46307=>array(79,-44,921,784),46308=>array(79,-62,921,784),46309=>array(79,-64,921,784),46310=>array(79,-64,921,784),46311=>array(79,-63,921,784),46312=>array(79,-68,921,784),46313=>array(79,-64,921,784),46314=>array(79,-63,921,784),46315=>array(79,-74,921,784),46316=>array(79,-62,921,784),46317=>array(79,-61,921,784),46318=>array(79,-69,921,784),46319=>array(79,-74,921,784),46320=>array(79,-69,921,784),46321=>array(79,-68,921,784),46322=>array(79,-72,921,784),46323=>array(79,-70,921,784),46324=>array(79,-66,921,784),46325=>array(79,-59,921,784),46326=>array(79,-60,921,784),46327=>array(79,-68,921,784),46328=>array(66,-69,907,842),46329=>array(64,-61,907,842),46330=>array(64,-61,907,842),46331=>array(64,-71,931,842),46332=>array(64,-46,907,842),46333=>array(64,-68,912,842),46334=>array(64,-76,907,842),46335=>array(64,-44,921,842),46336=>array(64,-62,917,842),46337=>array(64,-64,907,842),46338=>array(64,-64,908,842),46339=>array(64,-64,908,842),46340=>array(64,-69,923,842),46341=>array(64,-64,908,842),46342=>array(64,-64,908,842),46343=>array(64,-76,907,842),46344=>array(64,-62,907,842),46345=>array(64,-61,907,842),46346=>array(64,-69,922,842),46347=>array(64,-74,929,842),46348=>array(64,-69,927,842),46349=>array(64,-68,911,842),46350=>array(64,-72,929,842),46351=>array(64,-70,936,842),46352=>array(64,-66,908,842),46353=>array(64,-59,916,842),46354=>array(64,-60,928,842),46355=>array(64,-68,908,842),46356=>array(119,-69,907,842),46357=>array(124,-61,907,842),46358=>array(124,-61,907,842),46359=>array(124,-71,931,842),46360=>array(124,-46,907,842),46361=>array(124,-68,912,842),46362=>array(124,-76,907,842),46363=>array(124,-44,921,842),46364=>array(124,-62,917,842),46365=>array(124,-64,907,842),46366=>array(124,-64,908,842),46367=>array(124,-64,908,842),46368=>array(124,-69,923,842),46369=>array(124,-64,908,842),46370=>array(124,-64,908,842),46371=>array(124,-76,907,842),46372=>array(124,-62,907,842),46373=>array(124,-61,907,842),46374=>array(124,-69,922,842),46375=>array(124,-74,929,842),46376=>array(124,-69,927,842),46377=>array(124,-68,911,842),46378=>array(124,-72,929,842),46379=>array(124,-70,936,842),46380=>array(124,-66,908,842),46381=>array(124,-59,916,842),46382=>array(124,-60,928,842),46383=>array(124,-68,908,842),46384=>array(94,-69,936,842),46385=>array(94,-59,936,842),46386=>array(94,-61,936,842),46387=>array(94,-71,936,842),46388=>array(94,-45,936,842),46389=>array(94,-69,936,842),46390=>array(94,-76,936,842),46391=>array(94,-44,936,842),46392=>array(94,-62,936,842),46393=>array(94,-64,936,842),46394=>array(94,-64,936,842),46395=>array(94,-64,936,842),46396=>array(94,-70,936,842),46397=>array(94,-64,936,842),46398=>array(94,-64,936,842),46399=>array(94,-76,936,842),46400=>array(94,-62,936,842),46401=>array(94,-61,936,842),46402=>array(94,-70,936,842),46403=>array(94,-74,936,842),46404=>array(94,-69,936,842),46405=>array(94,-67,936,842),46406=>array(94,-72,936,842),46407=>array(94,-71,936,842),46408=>array(94,-66,936,842),46409=>array(94,-59,936,842),46410=>array(94,-60,936,842),46411=>array(94,-69,936,842),46412=>array(99,-69,907,842),46413=>array(99,-61,907,837),46414=>array(99,-61,907,837),46415=>array(99,-71,931,837),46416=>array(99,-46,907,842),46417=>array(99,-68,912,837),46418=>array(99,-76,907,837),46419=>array(99,-44,921,837),46420=>array(99,-62,917,837),46421=>array(99,-64,907,837),46422=>array(99,-64,908,837),46423=>array(99,-64,908,837),46424=>array(99,-69,923,837),46425=>array(99,-64,908,837),46426=>array(99,-64,908,837),46427=>array(99,-76,907,837),46428=>array(99,-62,907,837),46429=>array(99,-61,907,837),46430=>array(99,-69,922,837),46431=>array(99,-74,929,837),46432=>array(99,-69,927,837),46433=>array(99,-68,911,837),46434=>array(99,-72,929,837),46435=>array(99,-70,936,837),46436=>array(99,-66,908,837),46437=>array(99,-59,916,837),46438=>array(99,-60,928,837),46439=>array(99,-68,908,837),46440=>array(94,-69,936,842),46441=>array(94,-59,936,842),46442=>array(94,-61,936,842),46443=>array(94,-71,936,842),46444=>array(94,-45,936,842),46445=>array(94,-69,936,842),46446=>array(94,-76,936,842),46447=>array(94,-44,936,842),46448=>array(94,-62,936,842),46449=>array(94,-64,936,842),46450=>array(94,-64,936,842),46451=>array(94,-64,936,842),46452=>array(94,-70,936,842),46453=>array(94,-64,936,842),46454=>array(94,-64,936,842),46455=>array(94,-76,936,842),46456=>array(94,-62,936,842),46457=>array(94,-61,936,842),46458=>array(94,-70,936,842),46459=>array(94,-74,936,842),46460=>array(94,-69,936,842),46461=>array(94,-67,936,842),46462=>array(94,-72,936,842),46463=>array(94,-71,936,842),46464=>array(94,-66,936,842),46465=>array(94,-59,936,842),46466=>array(94,-60,936,842),46467=>array(94,-69,936,842),46468=>array(99,-69,907,842),46469=>array(99,-61,907,842),46470=>array(99,-61,907,842),46471=>array(99,-71,931,842),46472=>array(99,-46,907,842),46473=>array(99,-68,912,842),46474=>array(99,-76,907,842),46475=>array(99,-44,921,842),46476=>array(99,-62,917,842),46477=>array(99,-64,907,842),46478=>array(99,-64,908,842),46479=>array(99,-64,908,842),46480=>array(99,-69,923,842),46481=>array(99,-64,908,842),46482=>array(99,-64,908,842),46483=>array(99,-76,907,842),46484=>array(99,-62,907,842),46485=>array(99,-61,907,842),46486=>array(99,-69,922,842),46487=>array(99,-74,929,842),46488=>array(99,-69,927,842),46489=>array(99,-68,911,842),46490=>array(99,-72,929,842),46491=>array(99,-70,936,842),46492=>array(99,-66,908,842),46493=>array(99,-59,916,842),46494=>array(99,-60,928,842),46495=>array(99,-68,908,842),46496=>array(94,-70,907,841),46497=>array(94,-61,907,836),46498=>array(94,-61,907,836),46499=>array(94,-71,931,836),46500=>array(94,-46,907,841),46501=>array(94,-68,912,836),46502=>array(94,-76,907,836),46503=>array(94,-44,921,836),46504=>array(94,-62,917,836),46505=>array(94,-64,907,836),46506=>array(94,-64,908,836),46507=>array(94,-64,908,836),46508=>array(94,-69,923,836),46509=>array(94,-64,908,836),46510=>array(94,-64,908,836),46511=>array(94,-76,906,836),46512=>array(94,-62,907,836),46513=>array(94,-61,907,836),46514=>array(94,-69,922,836),46515=>array(94,-74,929,836),46516=>array(94,-69,927,836),46517=>array(94,-68,911,836),46518=>array(94,-72,929,836),46519=>array(94,-70,936,836),46520=>array(94,-66,908,836),46521=>array(94,-59,916,836),46522=>array(94,-60,928,836),46523=>array(94,-68,908,836),46524=>array(99,-68,907,843),46525=>array(99,-61,907,843),46526=>array(99,-61,907,843),46527=>array(99,-71,931,843),46528=>array(99,-46,907,843),46529=>array(99,-68,912,843),46530=>array(99,-76,907,843),46531=>array(99,-44,921,843),46532=>array(99,-62,917,843),46533=>array(99,-64,907,843),46534=>array(99,-64,908,843),46535=>array(99,-64,908,843),46536=>array(99,-69,923,843),46537=>array(99,-64,908,843),46538=>array(99,-64,908,843),46539=>array(99,-76,907,843),46540=>array(99,-62,907,843),46541=>array(99,-61,907,843),46542=>array(99,-69,922,843),46543=>array(99,-74,929,843),46544=>array(99,-69,927,843),46545=>array(99,-68,911,843),46546=>array(99,-72,929,843),46547=>array(99,-70,936,843),46548=>array(99,-66,908,843),46549=>array(99,-59,916,843),46550=>array(99,-60,928,843),46551=>array(99,-68,908,843),46552=>array(94,-69,907,842),46553=>array(94,-61,907,842),46554=>array(94,-61,907,842),46555=>array(94,-71,931,842),46556=>array(94,-46,908,842),46557=>array(94,-68,912,842),46558=>array(94,-76,907,842),46559=>array(94,-44,921,842),46560=>array(94,-62,917,842),46561=>array(94,-64,907,842),46562=>array(94,-64,908,842),46563=>array(94,-64,908,842),46564=>array(94,-69,923,842),46565=>array(94,-64,908,842),46566=>array(94,-64,908,842),46567=>array(94,-76,907,842),46568=>array(94,-62,907,842),46569=>array(94,-61,907,842),46570=>array(94,-69,922,842),46571=>array(94,-74,929,842),46572=>array(94,-69,927,842),46573=>array(94,-68,911,842),46574=>array(94,-72,929,842),46575=>array(94,-70,936,842),46576=>array(94,-66,908,842),46577=>array(94,-59,916,842),46578=>array(94,-60,928,842),46579=>array(94,-68,908,842),46580=>array(99,-68,907,843),46581=>array(94,-61,907,843),46582=>array(94,-61,907,843),46583=>array(94,-71,931,843),46584=>array(94,-46,907,843),46585=>array(94,-68,912,843),46586=>array(94,-76,907,843),46587=>array(94,-44,921,843),46588=>array(94,-62,917,843),46589=>array(94,-64,907,843),46590=>array(94,-64,908,843),46591=>array(94,-64,908,843),46592=>array(94,-69,923,843),46593=>array(94,-64,908,843),46594=>array(94,-64,908,843),46595=>array(94,-76,907,843),46596=>array(94,-62,907,843),46597=>array(94,-61,907,843),46598=>array(94,-69,922,843),46599=>array(94,-74,929,843),46600=>array(94,-69,927,843),46601=>array(94,-68,911,843),46602=>array(94,-72,929,843),46603=>array(94,-70,936,843),46604=>array(94,-66,908,843),46605=>array(94,-59,916,843),46606=>array(94,-60,928,843),46607=>array(94,-68,908,843),46608=>array(60,12,940,740),46609=>array(79,-61,921,795),46610=>array(79,-61,921,795),46611=>array(79,-71,921,795),46612=>array(79,-46,921,795),46613=>array(79,-68,921,795),46614=>array(79,-74,921,795),46615=>array(79,-44,921,795),46616=>array(79,-62,921,795),46617=>array(79,-64,921,795),46618=>array(79,-64,921,795),46619=>array(79,-63,921,795),46620=>array(79,-68,921,795),46621=>array(79,-64,921,795),46622=>array(79,-63,921,795),46623=>array(79,-74,921,795),46624=>array(79,-62,921,795),46625=>array(79,-61,921,795),46626=>array(79,-69,921,795),46627=>array(79,-74,921,795),46628=>array(79,-69,921,795),46629=>array(79,-68,921,795),46630=>array(79,-72,921,795),46631=>array(79,-70,921,795),46632=>array(79,-66,921,795),46633=>array(79,-59,921,795),46634=>array(79,-60,921,795),46635=>array(79,-68,921,795),46636=>array(68,-69,935,842),46637=>array(69,-59,936,837),46638=>array(69,-61,936,837),46639=>array(69,-71,936,837),46640=>array(57,-45,936,842),46641=>array(69,-69,936,837),46642=>array(69,-76,936,837),46643=>array(69,-44,936,837),46644=>array(69,-62,936,837),46645=>array(69,-64,936,837),46646=>array(69,-64,936,837),46647=>array(69,-64,936,837),46648=>array(69,-70,936,837),46649=>array(69,-64,936,837),46650=>array(69,-64,936,837),46651=>array(69,-76,936,837),46652=>array(69,-62,936,837),46653=>array(69,-61,936,837),46654=>array(69,-70,936,837),46655=>array(69,-74,936,837),46656=>array(69,-69,936,837),46657=>array(69,-67,936,837),46658=>array(69,-72,936,837),46659=>array(69,-71,936,837),46660=>array(69,-66,936,837),46661=>array(69,-59,936,837),46662=>array(69,-60,936,837),46663=>array(69,-69,936,837),46664=>array(64,-69,906,842),46665=>array(70,-61,907,842),46666=>array(70,-61,907,842),46667=>array(70,-71,931,842),46668=>array(57,-46,907,842),46669=>array(70,-68,912,842),46670=>array(70,-76,907,842),46671=>array(70,-44,921,842),46672=>array(70,-62,917,842),46673=>array(70,-64,907,842),46674=>array(70,-64,908,842),46675=>array(70,-64,908,842),46676=>array(70,-69,923,842),46677=>array(70,-64,908,842),46678=>array(70,-64,908,842),46679=>array(70,-76,907,842),46680=>array(70,-62,907,842),46681=>array(70,-61,907,842),46682=>array(70,-69,922,842),46683=>array(70,-74,929,842),46684=>array(70,-69,927,842),46685=>array(70,-68,911,842),46686=>array(70,-72,929,842),46687=>array(70,-70,936,842),46688=>array(70,-66,908,842),46689=>array(70,-59,916,842),46690=>array(70,-60,928,842),46691=>array(70,-68,908,842),46692=>array(83,-69,906,842),46693=>array(64,-61,907,842),46694=>array(64,-61,907,842),46695=>array(64,-71,931,842),46696=>array(64,-46,907,842),46697=>array(64,-68,912,842),46698=>array(64,-76,907,842),46699=>array(64,-44,921,842),46700=>array(64,-62,917,842),46701=>array(64,-64,907,842),46702=>array(64,-64,908,842),46703=>array(64,-64,908,842),46704=>array(64,-69,923,842),46705=>array(64,-64,908,842),46706=>array(64,-64,908,842),46707=>array(64,-76,906,842),46708=>array(64,-62,907,842),46709=>array(64,-61,907,842),46710=>array(64,-69,922,842),46711=>array(64,-74,929,842),46712=>array(64,-69,927,842),46713=>array(64,-68,911,842),46714=>array(64,-72,929,842),46715=>array(64,-70,936,842),46716=>array(64,-66,908,842),46717=>array(64,-59,916,842),46718=>array(64,-60,928,842),46719=>array(64,-68,908,842),46720=>array(59,-13,939,750),46721=>array(79,-61,921,795),46722=>array(79,-61,921,795),46723=>array(79,-71,921,795),46724=>array(79,-46,921,795),46725=>array(79,-68,921,795),46726=>array(79,-74,921,795),46727=>array(79,-44,921,795),46728=>array(79,-62,921,795),46729=>array(79,-64,921,795),46730=>array(79,-64,921,795),46731=>array(79,-63,921,795),46732=>array(79,-68,921,795),46733=>array(79,-64,921,795),46734=>array(79,-63,921,795),46735=>array(79,-74,921,795),46736=>array(79,-62,921,795),46737=>array(79,-61,921,795),46738=>array(79,-69,921,795),46739=>array(79,-74,921,795),46740=>array(79,-69,921,795),46741=>array(79,-68,921,795),46742=>array(79,-72,921,795),46743=>array(79,-70,921,795),46744=>array(79,-66,921,795),46745=>array(79,-59,921,795),46746=>array(79,-60,921,795),46747=>array(79,-68,921,795),46748=>array(79,-64,921,785),46749=>array(79,-61,921,795),46750=>array(79,-61,921,795),46751=>array(79,-71,921,795),46752=>array(79,-46,921,795),46753=>array(79,-68,921,795),46754=>array(79,-74,921,795),46755=>array(79,-44,921,795),46756=>array(79,-62,921,795),46757=>array(79,-64,921,795),46758=>array(79,-64,921,795),46759=>array(79,-63,921,795),46760=>array(79,-68,921,795),46761=>array(79,-64,921,795),46762=>array(79,-63,921,795),46763=>array(79,-74,921,795),46764=>array(79,-62,921,795),46765=>array(79,-61,921,795),46766=>array(79,-69,921,795),46767=>array(79,-74,921,795),46768=>array(79,-69,921,795),46769=>array(79,-68,921,795),46770=>array(79,-72,921,795),46771=>array(79,-70,921,795),46772=>array(79,-66,921,795),46773=>array(79,-59,921,795),46774=>array(79,-60,921,795),46775=>array(79,-68,921,795),46776=>array(72,-70,907,841),46777=>array(67,-61,907,841),46778=>array(67,-61,907,841),46779=>array(67,-71,931,841),46780=>array(63,-46,907,841),46781=>array(67,-68,912,841),46782=>array(67,-76,907,841),46783=>array(67,-44,921,841),46784=>array(67,-62,917,841),46785=>array(67,-64,907,841),46786=>array(67,-64,908,841),46787=>array(67,-64,908,841),46788=>array(67,-69,923,841),46789=>array(67,-64,908,841),46790=>array(67,-64,908,841),46791=>array(67,-76,906,841),46792=>array(67,-62,907,841),46793=>array(67,-61,907,841),46794=>array(67,-69,922,841),46795=>array(67,-74,929,841),46796=>array(67,-69,927,841),46797=>array(67,-68,911,841),46798=>array(67,-72,929,841),46799=>array(67,-70,936,841),46800=>array(67,-66,908,841),46801=>array(67,-59,916,841),46802=>array(67,-60,928,841),46803=>array(67,-68,908,841),46804=>array(50,-68,907,843),46805=>array(67,-61,907,843),46806=>array(67,-61,907,843),46807=>array(67,-71,931,843),46808=>array(68,-46,907,842),46809=>array(67,-68,912,843),46810=>array(67,-76,907,843),46811=>array(67,-44,921,843),46812=>array(67,-62,917,843),46813=>array(67,-64,907,843),46814=>array(67,-64,908,843),46815=>array(67,-64,908,843),46816=>array(67,-69,923,843),46817=>array(67,-64,908,843),46818=>array(67,-64,908,843),46819=>array(67,-76,907,843),46820=>array(67,-62,907,843),46821=>array(67,-61,907,843),46822=>array(67,-69,922,843),46823=>array(67,-74,929,843),46824=>array(67,-69,927,843),46825=>array(67,-68,911,843),46826=>array(67,-72,929,843),46827=>array(67,-70,936,843),46828=>array(67,-66,908,843),46829=>array(67,-59,916,843),46830=>array(67,-60,928,843),46831=>array(67,-68,908,843),46832=>array(63,-69,907,842),46833=>array(66,-61,907,842),46834=>array(66,-61,907,842),46835=>array(66,-71,931,842),46836=>array(66,-46,907,842),46837=>array(66,-68,912,842),46838=>array(66,-76,907,842),46839=>array(66,-44,921,842),46840=>array(66,-62,917,842),46841=>array(66,-64,907,842),46842=>array(66,-64,908,842),46843=>array(66,-64,908,842),46844=>array(66,-69,923,842),46845=>array(66,-64,908,842),46846=>array(66,-64,908,842),46847=>array(66,-76,907,842),46848=>array(66,-62,907,842),46849=>array(66,-61,907,842),46850=>array(66,-69,922,842),46851=>array(66,-74,929,842),46852=>array(66,-69,927,842),46853=>array(66,-68,911,842),46854=>array(66,-72,929,842),46855=>array(66,-70,936,842),46856=>array(66,-66,908,842),46857=>array(66,-59,916,842),46858=>array(66,-60,928,842),46859=>array(66,-68,908,842),46860=>array(79,-64,921,785),46861=>array(79,-61,921,795),46862=>array(79,-61,921,795),46863=>array(79,-71,921,795),46864=>array(81,-46,922,795),46865=>array(79,-68,921,795),46866=>array(79,-74,921,795),46867=>array(79,-44,921,795),46868=>array(79,-62,921,795),46869=>array(79,-64,921,795),46870=>array(79,-64,921,795),46871=>array(79,-63,921,795),46872=>array(79,-68,921,795),46873=>array(79,-64,921,795),46874=>array(79,-63,921,795),46875=>array(79,-74,921,795),46876=>array(79,-62,921,795),46877=>array(79,-61,921,795),46878=>array(79,-69,921,795),46879=>array(79,-74,921,795),46880=>array(79,-69,921,795),46881=>array(79,-68,921,795),46882=>array(79,-72,921,795),46883=>array(79,-70,921,795),46884=>array(79,-66,921,795),46885=>array(79,-59,921,795),46886=>array(79,-60,921,795),46887=>array(79,-68,921,795),46888=>array(57,22,943,720),46889=>array(79,-61,922,795),46890=>array(79,-61,922,795),46891=>array(79,-71,922,795),46892=>array(79,-46,921,795),46893=>array(79,-68,922,795),46894=>array(79,-74,922,795),46895=>array(79,-44,922,795),46896=>array(79,-62,922,795),46897=>array(79,-64,922,795),46898=>array(79,-64,922,795),46899=>array(79,-63,922,795),46900=>array(79,-68,922,795),46901=>array(79,-64,922,795),46902=>array(79,-63,922,795),46903=>array(79,-74,922,795),46904=>array(79,-62,922,795),46905=>array(79,-61,922,795),46906=>array(79,-69,922,795),46907=>array(79,-74,922,795),46908=>array(79,-69,922,795),46909=>array(79,-68,922,795),46910=>array(79,-72,922,795),46911=>array(79,-70,922,795),46912=>array(79,-66,922,795),46913=>array(79,-59,922,795),46914=>array(79,-60,922,795),46915=>array(79,-68,922,795),46916=>array(67,-69,907,842),46917=>array(74,-61,908,842),46918=>array(74,-61,908,842),46919=>array(74,-71,931,842),46920=>array(65,-46,907,842),46921=>array(74,-68,912,842),46922=>array(74,-76,908,842),46923=>array(74,-44,921,842),46924=>array(74,-62,917,842),46925=>array(74,-64,908,842),46926=>array(74,-64,908,842),46927=>array(74,-64,908,842),46928=>array(74,-69,923,842),46929=>array(74,-64,908,842),46930=>array(74,-64,908,842),46931=>array(74,-76,908,842),46932=>array(74,-62,908,842),46933=>array(74,-61,908,842),46934=>array(74,-69,922,842),46935=>array(74,-74,929,842),46936=>array(74,-69,927,842),46937=>array(74,-68,911,842),46938=>array(74,-72,929,842),46939=>array(74,-70,936,842),46940=>array(74,-66,908,842),46941=>array(74,-59,916,842),46942=>array(74,-60,928,842),46943=>array(74,-68,908,842),46944=>array(104,-69,907,842),46945=>array(109,-61,907,842),46946=>array(109,-61,907,842),46947=>array(109,-71,931,842),46948=>array(99,-46,907,842),46949=>array(109,-68,912,842),46950=>array(109,-76,907,842),46951=>array(109,-44,921,842),46952=>array(109,-62,917,842),46953=>array(109,-64,907,842),46954=>array(109,-64,908,842),46955=>array(109,-64,908,842),46956=>array(109,-69,923,842),46957=>array(109,-64,908,842),46958=>array(109,-64,908,842),46959=>array(109,-76,907,842),46960=>array(109,-62,907,842),46961=>array(109,-61,907,842),46962=>array(109,-69,922,842),46963=>array(109,-74,929,842),46964=>array(109,-69,927,842),46965=>array(109,-68,911,842),46966=>array(109,-72,929,842),46967=>array(109,-70,936,842),46968=>array(109,-66,908,842),46969=>array(109,-59,916,842),46970=>array(109,-60,928,842),46971=>array(109,-68,908,842),46972=>array(118,-69,936,842),46973=>array(103,-59,936,842),46974=>array(103,-61,936,842),46975=>array(103,-71,936,842),46976=>array(108,-45,936,842),46977=>array(103,-69,936,842),46978=>array(103,-76,936,842),46979=>array(103,-44,936,842),46980=>array(103,-62,936,842),46981=>array(103,-64,936,842),46982=>array(103,-64,936,842),46983=>array(103,-64,936,842),46984=>array(103,-70,936,842),46985=>array(103,-64,936,842),46986=>array(103,-64,936,842),46987=>array(103,-76,936,842),46988=>array(103,-62,936,842),46989=>array(103,-61,936,842),46990=>array(103,-70,936,842),46991=>array(103,-74,936,842),46992=>array(103,-69,936,842),46993=>array(103,-67,936,842),46994=>array(103,-72,936,842),46995=>array(103,-71,936,842),46996=>array(103,-66,936,842),46997=>array(103,-59,936,842),46998=>array(103,-60,936,842),46999=>array(103,-69,936,842),47000=>array(118,-69,907,842),47001=>array(103,-61,907,842),47002=>array(103,-61,907,842),47003=>array(103,-71,931,842),47004=>array(103,-46,907,842),47005=>array(103,-68,912,842),47006=>array(103,-76,907,842),47007=>array(103,-44,921,842),47008=>array(103,-62,917,842),47009=>array(103,-64,907,842),47010=>array(103,-64,908,842),47011=>array(103,-64,908,842),47012=>array(103,-69,923,842),47013=>array(103,-64,908,842),47014=>array(103,-64,908,842),47015=>array(103,-76,907,842),47016=>array(103,-62,907,842),47017=>array(103,-61,907,842),47018=>array(103,-69,922,842),47019=>array(103,-74,929,842),47020=>array(103,-69,927,842),47021=>array(103,-68,911,842),47022=>array(103,-72,929,842),47023=>array(103,-70,936,842),47024=>array(103,-66,908,842),47025=>array(103,-59,916,842),47026=>array(103,-60,928,842),47027=>array(103,-68,908,842),47028=>array(118,-68,935,843),47029=>array(103,-59,936,842),47030=>array(103,-61,936,842),47031=>array(103,-71,936,842),47032=>array(108,-45,936,842),47033=>array(103,-69,936,842),47034=>array(103,-76,936,842),47035=>array(103,-44,936,842),47036=>array(103,-62,936,842),47037=>array(103,-64,936,842),47038=>array(103,-64,936,842),47039=>array(103,-64,936,842),47040=>array(103,-70,936,842),47041=>array(103,-64,936,842),47042=>array(103,-64,936,842),47043=>array(103,-76,936,842),47044=>array(103,-62,936,842),47045=>array(103,-61,936,842),47046=>array(103,-70,936,842),47047=>array(103,-74,936,842),47048=>array(103,-69,936,842),47049=>array(103,-67,936,842),47050=>array(103,-72,936,842),47051=>array(103,-71,936,842),47052=>array(103,-66,936,842),47053=>array(103,-59,936,842),47054=>array(103,-60,936,842),47055=>array(103,-69,936,842),47056=>array(118,-69,907,842),47057=>array(103,-61,907,842),47058=>array(103,-61,907,842),47059=>array(103,-71,931,842),47060=>array(103,-46,907,842),47061=>array(103,-68,912,842),47062=>array(103,-76,907,842),47063=>array(103,-44,921,842),47064=>array(103,-62,917,842),47065=>array(103,-64,907,842),47066=>array(103,-64,908,842),47067=>array(103,-64,908,842),47068=>array(103,-69,923,842),47069=>array(103,-64,908,842),47070=>array(103,-64,908,842),47071=>array(103,-76,907,842),47072=>array(103,-62,907,842),47073=>array(103,-61,907,842),47074=>array(103,-69,922,842),47075=>array(103,-74,929,842),47076=>array(103,-69,927,842),47077=>array(103,-68,911,842),47078=>array(103,-72,929,842),47079=>array(103,-70,936,842),47080=>array(103,-66,908,842),47081=>array(103,-59,916,842),47082=>array(103,-60,928,842),47083=>array(103,-68,908,842),47084=>array(118,-70,907,841),47085=>array(103,-61,907,841),47086=>array(103,-61,907,841),47087=>array(103,-71,931,841),47088=>array(103,-46,907,841),47089=>array(103,-68,912,841),47090=>array(103,-76,907,841),47091=>array(103,-44,921,841),47092=>array(103,-62,917,841),47093=>array(103,-64,907,841),47094=>array(103,-64,908,841),47095=>array(103,-64,908,841),47096=>array(103,-69,923,841),47097=>array(103,-64,908,841),47098=>array(103,-64,908,841),47099=>array(103,-76,906,841),47100=>array(103,-62,907,841),47101=>array(103,-61,907,841),47102=>array(103,-69,922,841),47103=>array(103,-74,929,841),47104=>array(103,-69,927,841),47105=>array(103,-68,911,841),47106=>array(103,-72,929,841),47107=>array(103,-70,936,841),47108=>array(103,-66,908,841),47109=>array(103,-59,916,841),47110=>array(103,-60,928,841),47111=>array(103,-68,908,841),47112=>array(118,-68,907,843),47113=>array(118,-61,907,843),47114=>array(118,-61,907,843),47115=>array(118,-71,931,843),47116=>array(118,-46,907,843),47117=>array(118,-68,912,843),47118=>array(118,-76,907,843),47119=>array(118,-44,921,843),47120=>array(118,-62,917,843),47121=>array(118,-64,907,843),47122=>array(118,-64,908,843),47123=>array(118,-64,908,843),47124=>array(118,-69,923,843),47125=>array(118,-64,908,843),47126=>array(118,-64,908,843),47127=>array(118,-76,907,843),47128=>array(118,-62,907,843),47129=>array(118,-61,907,843),47130=>array(118,-69,922,843),47131=>array(118,-74,929,843),47132=>array(118,-69,927,843),47133=>array(118,-68,911,843),47134=>array(118,-72,929,843),47135=>array(118,-70,936,843),47136=>array(118,-66,908,843),47137=>array(118,-59,916,843),47138=>array(118,-60,928,843),47139=>array(118,-68,908,843),47140=>array(118,-70,907,842),47141=>array(103,-61,908,842),47142=>array(103,-61,908,842),47143=>array(103,-71,931,842),47144=>array(103,-46,907,842),47145=>array(103,-68,912,842),47146=>array(103,-76,908,842),47147=>array(103,-44,921,842),47148=>array(103,-62,917,842),47149=>array(103,-64,908,842),47150=>array(103,-64,908,842),47151=>array(103,-64,908,842),47152=>array(103,-69,923,842),47153=>array(103,-64,908,842),47154=>array(103,-64,908,842),47155=>array(103,-76,908,842),47156=>array(103,-62,908,842),47157=>array(103,-61,908,842),47158=>array(103,-69,922,842),47159=>array(103,-74,929,842),47160=>array(103,-69,927,842),47161=>array(103,-68,911,842),47162=>array(103,-72,929,842),47163=>array(103,-70,936,842),47164=>array(103,-66,908,842),47165=>array(103,-59,916,842),47166=>array(103,-60,928,842),47167=>array(103,-68,908,842),47168=>array(118,-68,907,843),47169=>array(118,-61,907,843),47170=>array(118,-61,907,843),47171=>array(118,-71,931,843),47172=>array(118,-46,907,843),47173=>array(118,-68,912,843),47174=>array(118,-76,907,843),47175=>array(118,-44,921,843),47176=>array(118,-62,917,843),47177=>array(118,-64,907,843),47178=>array(118,-64,908,843),47179=>array(118,-64,908,843),47180=>array(118,-69,923,843),47181=>array(118,-64,908,843),47182=>array(118,-64,908,843),47183=>array(118,-76,907,843),47184=>array(118,-62,907,843),47185=>array(118,-61,907,843),47186=>array(118,-69,922,843),47187=>array(118,-74,929,843),47188=>array(118,-69,927,843),47189=>array(118,-68,911,843),47190=>array(118,-72,929,843),47191=>array(118,-70,936,843),47192=>array(118,-66,908,843),47193=>array(118,-59,916,843),47194=>array(118,-60,928,843),47195=>array(118,-68,908,843),47196=>array(62,27,943,755),47197=>array(79,-61,921,795),47198=>array(79,-61,921,795),47199=>array(79,-71,921,795),47200=>array(79,-46,921,795),47201=>array(79,-68,921,795),47202=>array(79,-74,921,795),47203=>array(79,-44,921,795),47204=>array(79,-62,921,795),47205=>array(79,-64,921,795),47206=>array(79,-64,921,795),47207=>array(79,-63,921,795),47208=>array(79,-68,921,795),47209=>array(79,-64,921,795),47210=>array(79,-63,921,795),47211=>array(79,-74,921,795),47212=>array(79,-62,921,795),47213=>array(79,-61,921,795),47214=>array(79,-69,921,795),47215=>array(79,-74,921,795),47216=>array(79,-69,921,795),47217=>array(79,-68,921,795),47218=>array(79,-72,921,795),47219=>array(79,-70,921,795),47220=>array(79,-66,921,795),47221=>array(79,-59,921,795),47222=>array(79,-60,921,795),47223=>array(79,-68,921,795),47224=>array(52,-69,936,842),47225=>array(68,-59,936,842),47226=>array(68,-61,936,842),47227=>array(68,-71,936,842),47228=>array(74,-45,936,843),47229=>array(68,-69,936,842),47230=>array(68,-76,936,842),47231=>array(68,-44,936,842),47232=>array(68,-62,936,842),47233=>array(68,-64,936,842),47234=>array(68,-64,936,842),47235=>array(68,-64,936,842),47236=>array(68,-70,936,842),47237=>array(68,-64,936,842),47238=>array(68,-64,936,842),47239=>array(68,-76,936,842),47240=>array(68,-62,936,842),47241=>array(68,-61,936,842),47242=>array(68,-70,936,842),47243=>array(68,-74,936,842),47244=>array(68,-69,936,842),47245=>array(68,-67,936,842),47246=>array(68,-72,936,842),47247=>array(68,-71,936,842),47248=>array(68,-66,936,842),47249=>array(68,-59,936,842),47250=>array(68,-60,936,842),47251=>array(68,-69,936,842),47252=>array(61,-68,907,843),47253=>array(64,-61,908,842),47254=>array(64,-61,908,842),47255=>array(64,-71,931,842),47256=>array(58,-46,907,842),47257=>array(64,-68,912,842),47258=>array(64,-76,908,842),47259=>array(64,-44,921,842),47260=>array(64,-62,917,842),47261=>array(64,-64,908,842),47262=>array(64,-64,908,842),47263=>array(64,-64,908,842),47264=>array(64,-69,923,842),47265=>array(64,-64,908,842),47266=>array(64,-64,908,842),47267=>array(64,-76,908,842),47268=>array(64,-62,908,842),47269=>array(64,-61,908,842),47270=>array(64,-69,922,842),47271=>array(64,-74,929,842),47272=>array(64,-69,927,842),47273=>array(64,-68,911,842),47274=>array(64,-72,929,842),47275=>array(64,-70,936,842),47276=>array(64,-66,908,842),47277=>array(64,-59,916,842),47278=>array(64,-60,928,842),47279=>array(64,-68,908,842),47280=>array(62,-69,907,842),47281=>array(64,-61,907,841),47282=>array(64,-61,907,841),47283=>array(64,-71,931,841),47284=>array(64,-46,907,842),47285=>array(64,-68,912,841),47286=>array(64,-76,907,841),47287=>array(64,-44,921,841),47288=>array(64,-62,917,841),47289=>array(64,-64,907,841),47290=>array(64,-64,908,841),47291=>array(64,-64,908,841),47292=>array(64,-69,923,841),47293=>array(64,-64,908,841),47294=>array(64,-64,908,841),47295=>array(64,-76,907,841),47296=>array(64,-62,907,841),47297=>array(64,-61,907,841),47298=>array(64,-69,922,841),47299=>array(64,-74,929,841),47300=>array(64,-69,927,841),47301=>array(64,-68,911,841),47302=>array(64,-72,929,841),47303=>array(64,-70,936,841),47304=>array(64,-66,908,841),47305=>array(64,-59,916,841),47306=>array(64,-60,928,841),47307=>array(64,-68,908,841),47308=>array(62,27,943,755),47309=>array(79,-61,921,795),47310=>array(79,-61,921,795),47311=>array(79,-71,921,795),47312=>array(79,-46,922,795),47313=>array(79,-68,921,795),47314=>array(79,-74,921,795),47315=>array(79,-44,921,795),47316=>array(79,-62,921,795),47317=>array(79,-64,921,795),47318=>array(79,-64,921,795),47319=>array(79,-63,921,795),47320=>array(79,-68,921,795),47321=>array(79,-64,921,795),47322=>array(79,-63,921,795),47323=>array(79,-74,921,795),47324=>array(79,-62,921,795),47325=>array(79,-61,921,795),47326=>array(79,-69,921,795),47327=>array(79,-74,921,795),47328=>array(79,-69,921,795),47329=>array(79,-68,921,795),47330=>array(79,-72,921,795),47331=>array(79,-70,921,795),47332=>array(79,-66,921,795),47333=>array(79,-59,921,795),47334=>array(79,-60,921,795),47335=>array(79,-68,921,795),47336=>array(79,-64,920,795),47337=>array(79,-61,921,795),47338=>array(79,-61,921,795),47339=>array(79,-71,921,795),47340=>array(79,-46,921,795),47341=>array(79,-68,921,795),47342=>array(79,-74,921,795),47343=>array(79,-44,921,795),47344=>array(79,-62,921,795),47345=>array(79,-64,921,795),47346=>array(79,-64,921,795),47347=>array(79,-63,921,795),47348=>array(79,-68,921,795),47349=>array(79,-64,921,795),47350=>array(79,-63,921,795),47351=>array(79,-74,921,795),47352=>array(79,-62,921,795),47353=>array(79,-61,921,795),47354=>array(79,-69,921,795),47355=>array(79,-74,921,795),47356=>array(79,-69,921,795),47357=>array(79,-68,921,795),47358=>array(79,-72,921,795),47359=>array(79,-70,921,795),47360=>array(79,-66,921,795),47361=>array(79,-59,921,795),47362=>array(79,-60,921,795),47363=>array(79,-68,921,795),47364=>array(69,-70,907,841),47365=>array(76,-61,907,841),47366=>array(76,-61,907,841),47367=>array(76,-71,931,841),47368=>array(76,-46,907,841),47369=>array(76,-68,912,841),47370=>array(76,-76,907,841),47371=>array(76,-44,921,841),47372=>array(76,-62,917,841),47373=>array(76,-64,907,841),47374=>array(76,-64,908,841),47375=>array(76,-64,908,841),47376=>array(76,-69,923,841),47377=>array(76,-64,908,841),47378=>array(76,-64,908,841),47379=>array(76,-76,906,841),47380=>array(76,-62,907,841),47381=>array(76,-61,907,841),47382=>array(76,-69,922,841),47383=>array(76,-74,929,841),47384=>array(76,-69,927,841),47385=>array(76,-68,911,841),47386=>array(76,-72,929,841),47387=>array(76,-70,936,841),47388=>array(76,-66,908,841),47389=>array(76,-59,916,841),47390=>array(76,-60,928,841),47391=>array(76,-68,908,841),47392=>array(52,-68,907,843),47393=>array(72,-61,907,843),47394=>array(72,-61,907,843),47395=>array(72,-71,931,843),47396=>array(90,-46,907,843),47397=>array(72,-68,912,843),47398=>array(72,-76,907,843),47399=>array(72,-44,921,843),47400=>array(72,-62,917,843),47401=>array(72,-64,907,843),47402=>array(72,-64,908,843),47403=>array(72,-64,908,843),47404=>array(72,-69,923,843),47405=>array(72,-64,908,843),47406=>array(72,-64,908,843),47407=>array(72,-76,907,843),47408=>array(72,-62,907,843),47409=>array(72,-61,907,843),47410=>array(72,-69,922,843),47411=>array(72,-74,929,843),47412=>array(72,-69,927,843),47413=>array(72,-68,911,843),47414=>array(72,-72,929,843),47415=>array(72,-70,936,843),47416=>array(72,-66,908,843),47417=>array(72,-59,916,843),47418=>array(72,-60,928,843),47419=>array(72,-68,908,843),47420=>array(70,-69,907,842),47421=>array(64,-61,907,842),47422=>array(64,-61,907,842),47423=>array(64,-71,931,842),47424=>array(65,-46,907,843),47425=>array(64,-68,912,842),47426=>array(64,-76,907,842),47427=>array(64,-44,921,842),47428=>array(64,-62,917,842),47429=>array(64,-64,907,842),47430=>array(64,-64,908,842),47431=>array(64,-64,908,842),47432=>array(64,-69,923,842),47433=>array(64,-64,908,842),47434=>array(64,-64,908,842),47435=>array(64,-76,907,842),47436=>array(64,-62,907,842),47437=>array(64,-61,907,842),47438=>array(64,-69,922,842),47439=>array(64,-74,929,842),47440=>array(64,-69,927,842),47441=>array(64,-68,911,842),47442=>array(64,-72,929,842),47443=>array(64,-70,936,842),47444=>array(64,-66,908,842),47445=>array(64,-59,916,842),47446=>array(64,-60,928,842),47447=>array(64,-68,908,842),47448=>array(71,-64,928,795),47449=>array(79,-61,921,795),47450=>array(79,-61,921,795),47451=>array(79,-71,921,795),47452=>array(79,-46,921,795),47453=>array(79,-68,921,795),47454=>array(79,-74,921,795),47455=>array(79,-44,921,795),47456=>array(79,-62,921,795),47457=>array(79,-64,921,795),47458=>array(79,-64,921,795),47459=>array(79,-63,921,795),47460=>array(79,-68,921,795),47461=>array(79,-64,921,795),47462=>array(79,-63,921,795),47463=>array(79,-74,921,795),47464=>array(79,-62,921,795),47465=>array(79,-61,921,795),47466=>array(79,-69,921,795),47467=>array(79,-74,921,795),47468=>array(79,-69,921,795),47469=>array(79,-68,921,795),47470=>array(79,-72,921,795),47471=>array(79,-70,921,795),47472=>array(79,-66,921,795),47473=>array(79,-59,921,795),47474=>array(79,-60,921,795),47475=>array(79,-68,921,795),47476=>array(57,42,943,730),47477=>array(79,-61,921,795),47478=>array(79,-61,921,795),47479=>array(79,-71,921,795),47480=>array(79,-46,921,795),47481=>array(79,-68,921,795),47482=>array(79,-74,921,795),47483=>array(79,-44,921,795),47484=>array(79,-62,921,795),47485=>array(79,-64,921,795),47486=>array(79,-64,921,795),47487=>array(79,-63,921,795),47488=>array(79,-68,921,795),47489=>array(79,-64,921,795),47490=>array(79,-63,921,795),47491=>array(79,-74,921,795),47492=>array(79,-62,921,795),47493=>array(79,-61,921,795),47494=>array(79,-69,921,795),47495=>array(79,-74,921,795),47496=>array(79,-69,921,795),47497=>array(79,-68,921,795),47498=>array(79,-72,921,795),47499=>array(79,-70,921,795),47500=>array(79,-66,921,795),47501=>array(79,-59,921,795),47502=>array(79,-60,921,795),47503=>array(79,-68,921,795),47504=>array(67,-69,907,842),47505=>array(64,-61,908,842),47506=>array(64,-61,908,842),47507=>array(64,-71,931,842),47508=>array(64,-46,908,842),47509=>array(64,-68,912,842),47510=>array(64,-76,908,842),47511=>array(64,-44,921,842),47512=>array(64,-62,917,842),47513=>array(64,-64,908,842),47514=>array(64,-64,908,842),47515=>array(64,-64,908,842),47516=>array(64,-69,923,842),47517=>array(64,-64,908,842),47518=>array(64,-64,908,842),47519=>array(64,-76,908,842),47520=>array(64,-62,908,842),47521=>array(64,-61,908,842),47522=>array(64,-69,922,842),47523=>array(64,-74,929,842),47524=>array(64,-69,927,842),47525=>array(64,-68,911,842),47526=>array(64,-72,929,842),47527=>array(64,-70,936,842),47528=>array(64,-66,908,842),47529=>array(64,-59,916,842),47530=>array(64,-60,928,842),47531=>array(64,-68,908,842),47532=>array(143,-69,907,842),47533=>array(138,-61,907,842),47534=>array(138,-61,907,842),47535=>array(138,-71,931,842),47536=>array(138,-46,907,842),47537=>array(138,-68,912,842),47538=>array(138,-76,907,842),47539=>array(138,-44,921,842),47540=>array(138,-62,917,842),47541=>array(138,-64,907,842),47542=>array(138,-64,908,842),47543=>array(138,-64,908,842),47544=>array(138,-69,923,842),47545=>array(138,-64,908,842),47546=>array(138,-64,908,842),47547=>array(138,-76,907,842),47548=>array(138,-62,907,842),47549=>array(138,-61,907,842),47550=>array(138,-69,922,842),47551=>array(138,-74,929,842),47552=>array(138,-69,927,842),47553=>array(138,-68,911,842),47554=>array(138,-72,929,842),47555=>array(138,-70,936,842),47556=>array(138,-66,908,842),47557=>array(138,-59,916,842),47558=>array(138,-60,928,842),47559=>array(138,-68,908,842),47560=>array(127,-69,936,842),47561=>array(122,-59,936,842),47562=>array(122,-61,936,842),47563=>array(122,-71,936,842),47564=>array(122,-45,936,842),47565=>array(122,-69,936,842),47566=>array(122,-76,936,842),47567=>array(122,-44,936,842),47568=>array(122,-62,936,842),47569=>array(122,-64,936,842),47570=>array(122,-64,936,842),47571=>array(122,-64,936,842),47572=>array(122,-70,936,842),47573=>array(122,-64,936,842),47574=>array(122,-64,936,842),47575=>array(122,-76,936,842),47576=>array(122,-62,936,842),47577=>array(122,-61,936,842),47578=>array(122,-70,936,842),47579=>array(122,-74,936,842),47580=>array(118,-69,936,842),47581=>array(122,-67,936,842),47582=>array(122,-72,936,842),47583=>array(122,-71,936,842),47584=>array(122,-66,936,842),47585=>array(122,-59,936,842),47586=>array(122,-60,936,842),47587=>array(122,-69,936,842),47588=>array(127,-69,907,842),47589=>array(122,-61,907,842),47590=>array(122,-61,907,842),47591=>array(122,-71,931,842),47592=>array(122,-46,907,842),47593=>array(122,-68,912,842),47594=>array(122,-76,907,842),47595=>array(122,-44,921,842),47596=>array(122,-62,917,842),47597=>array(122,-64,907,842),47598=>array(122,-64,908,842),47599=>array(122,-64,908,842),47600=>array(122,-69,923,842),47601=>array(122,-64,908,842),47602=>array(122,-64,908,842),47603=>array(122,-76,907,842),47604=>array(122,-62,907,842),47605=>array(122,-61,907,842),47606=>array(122,-69,922,842),47607=>array(122,-74,929,842),47608=>array(122,-69,927,842),47609=>array(122,-68,911,842),47610=>array(122,-72,929,842),47611=>array(122,-70,936,842),47612=>array(122,-66,908,842),47613=>array(122,-59,916,842),47614=>array(122,-60,928,842),47615=>array(122,-68,908,842),47616=>array(127,-68,935,843),47617=>array(122,-59,936,842),47618=>array(122,-61,936,842),47619=>array(122,-71,936,842),47620=>array(122,-45,936,842),47621=>array(122,-69,936,842),47622=>array(122,-76,936,842),47623=>array(122,-44,936,842),47624=>array(122,-62,936,842),47625=>array(122,-64,936,842),47626=>array(122,-64,936,842),47627=>array(122,-64,936,842),47628=>array(122,-70,936,842),47629=>array(122,-64,936,842),47630=>array(122,-64,936,842),47631=>array(122,-76,936,842),47632=>array(122,-62,936,842),47633=>array(122,-61,936,842),47634=>array(122,-70,936,842),47635=>array(122,-74,936,842),47636=>array(118,-69,936,842),47637=>array(122,-67,936,842),47638=>array(122,-72,936,842),47639=>array(122,-71,936,842),47640=>array(122,-66,936,842),47641=>array(122,-59,936,842),47642=>array(122,-60,936,842),47643=>array(122,-69,936,842),47644=>array(127,-69,907,842),47645=>array(122,-61,907,842),47646=>array(122,-61,907,842),47647=>array(122,-71,931,842),47648=>array(122,-46,907,842),47649=>array(122,-68,912,842),47650=>array(122,-76,907,842),47651=>array(122,-44,921,842),47652=>array(122,-62,917,842),47653=>array(122,-64,907,842),47654=>array(122,-64,908,842),47655=>array(122,-64,908,842),47656=>array(122,-69,923,842),47657=>array(122,-64,908,842),47658=>array(122,-64,908,842),47659=>array(122,-76,907,842),47660=>array(122,-62,907,842),47661=>array(122,-61,907,842),47662=>array(122,-69,922,842),47663=>array(122,-74,929,842),47664=>array(122,-69,927,842),47665=>array(122,-68,911,842),47666=>array(122,-72,929,842),47667=>array(122,-70,936,842),47668=>array(122,-66,908,842),47669=>array(122,-59,916,842),47670=>array(122,-60,928,842),47671=>array(122,-68,908,842),47672=>array(127,-70,907,841),47673=>array(122,-61,907,841),47674=>array(122,-61,907,841),47675=>array(122,-71,931,841),47676=>array(112,-46,907,841),47677=>array(122,-68,912,841),47678=>array(122,-76,907,841),47679=>array(122,-44,921,841),47680=>array(122,-62,917,841),47681=>array(122,-64,907,841),47682=>array(122,-64,908,841),47683=>array(122,-64,908,841),47684=>array(122,-69,923,841),47685=>array(122,-64,908,841),47686=>array(122,-64,908,841),47687=>array(122,-76,906,841),47688=>array(122,-62,907,841),47689=>array(122,-61,907,841),47690=>array(122,-69,922,841),47691=>array(122,-74,929,841),47692=>array(122,-69,927,841),47693=>array(122,-68,911,841),47694=>array(122,-72,929,841),47695=>array(122,-70,936,841),47696=>array(122,-66,908,841),47697=>array(122,-59,916,841),47698=>array(122,-60,928,841),47699=>array(122,-68,908,841),47700=>array(127,-68,907,843),47701=>array(122,-61,907,843),47702=>array(122,-61,907,843),47703=>array(122,-71,931,843),47704=>array(122,-46,907,843),47705=>array(122,-68,912,843),47706=>array(122,-76,907,843),47707=>array(122,-44,921,843),47708=>array(122,-62,917,843),47709=>array(122,-64,907,843),47710=>array(122,-64,908,843),47711=>array(122,-64,908,843),47712=>array(122,-69,923,843),47713=>array(122,-64,908,843),47714=>array(122,-64,908,843),47715=>array(122,-76,907,843),47716=>array(122,-62,907,843),47717=>array(122,-61,907,843),47718=>array(122,-69,922,843),47719=>array(122,-74,929,843),47720=>array(122,-69,927,843),47721=>array(122,-68,911,843),47722=>array(122,-72,929,843),47723=>array(122,-70,936,843),47724=>array(122,-66,908,843),47725=>array(122,-59,916,843),47726=>array(122,-60,928,843),47727=>array(122,-68,908,843),47728=>array(127,-70,907,842),47729=>array(122,-61,908,842),47730=>array(122,-61,908,842),47731=>array(122,-71,931,842),47732=>array(112,-46,907,842),47733=>array(122,-68,912,842),47734=>array(122,-76,908,842),47735=>array(122,-44,921,842),47736=>array(122,-62,917,842),47737=>array(122,-64,908,842),47738=>array(122,-64,908,842),47739=>array(122,-64,908,842),47740=>array(122,-69,923,842),47741=>array(122,-64,908,842),47742=>array(122,-64,908,842),47743=>array(122,-76,908,842),47744=>array(122,-62,908,842),47745=>array(122,-61,908,842),47746=>array(122,-69,922,842),47747=>array(122,-74,929,842),47748=>array(122,-69,927,842),47749=>array(122,-68,911,842),47750=>array(122,-72,929,842),47751=>array(122,-70,936,842),47752=>array(122,-66,908,842),47753=>array(122,-59,916,842),47754=>array(122,-60,928,842),47755=>array(122,-68,908,842),47756=>array(127,-68,907,843),47757=>array(122,-61,907,843),47758=>array(122,-61,907,843),47759=>array(122,-71,931,843),47760=>array(122,-46,907,843),47761=>array(122,-68,912,843),47762=>array(122,-76,907,843),47763=>array(122,-44,921,843),47764=>array(122,-62,917,843),47765=>array(122,-64,907,843),47766=>array(122,-64,908,843),47767=>array(122,-64,908,843),47768=>array(122,-69,923,843),47769=>array(122,-64,908,843),47770=>array(122,-64,908,843),47771=>array(122,-76,907,843),47772=>array(122,-62,907,843),47773=>array(122,-61,907,843),47774=>array(122,-69,922,843),47775=>array(122,-74,929,843),47776=>array(122,-69,927,843),47777=>array(122,-68,911,843),47778=>array(122,-72,929,843),47779=>array(122,-70,936,843),47780=>array(122,-66,908,843),47781=>array(122,-59,916,843),47782=>array(122,-60,928,843),47783=>array(122,-68,908,843),47784=>array(62,17,943,740),47785=>array(79,-61,921,800),47786=>array(79,-61,921,800),47787=>array(79,-71,921,800),47788=>array(79,-46,921,800),47789=>array(79,-68,921,800),47790=>array(79,-74,921,800),47791=>array(79,-44,921,800),47792=>array(79,-62,921,800),47793=>array(79,-64,921,800),47794=>array(79,-64,921,800),47795=>array(79,-63,921,800),47796=>array(79,-68,921,800),47797=>array(79,-64,921,800),47798=>array(79,-63,921,800),47799=>array(79,-74,921,800),47800=>array(79,-62,921,800),47801=>array(79,-61,921,800),47802=>array(79,-69,921,800),47803=>array(79,-74,921,800),47804=>array(79,-69,921,800),47805=>array(79,-68,921,800),47806=>array(79,-72,921,800),47807=>array(79,-70,921,800),47808=>array(79,-66,921,800),47809=>array(79,-59,921,800),47810=>array(79,-60,921,800),47811=>array(79,-68,921,800),47812=>array(52,-69,936,842),47813=>array(77,-59,936,843),47814=>array(77,-61,936,843),47815=>array(77,-71,936,843),47816=>array(66,-45,936,842),47817=>array(77,-69,936,843),47818=>array(77,-76,936,843),47819=>array(77,-44,936,843),47820=>array(77,-62,936,843),47821=>array(77,-64,936,843),47822=>array(77,-64,936,843),47823=>array(77,-64,936,843),47824=>array(77,-70,936,843),47825=>array(77,-64,936,843),47826=>array(77,-64,936,843),47827=>array(77,-76,936,843),47828=>array(77,-62,936,843),47829=>array(77,-61,936,843),47830=>array(77,-70,936,843),47831=>array(77,-74,936,843),47832=>array(77,-69,936,843),47833=>array(77,-67,936,843),47834=>array(77,-72,936,843),47835=>array(77,-71,936,843),47836=>array(77,-66,936,843),47837=>array(77,-59,936,843),47838=>array(77,-60,936,843),47839=>array(77,-69,936,843),47840=>array(61,-69,907,842),47841=>array(79,-61,907,843),47842=>array(79,-61,907,843),47843=>array(79,-71,931,843),47844=>array(72,-46,907,842),47845=>array(79,-68,912,843),47846=>array(79,-76,907,843),47847=>array(79,-44,921,843),47848=>array(79,-62,917,843),47849=>array(79,-64,907,843),47850=>array(79,-64,908,843),47851=>array(79,-64,908,843),47852=>array(79,-69,923,843),47853=>array(79,-64,908,843),47854=>array(79,-64,908,843),47855=>array(79,-76,907,843),47856=>array(79,-62,907,843),47857=>array(79,-61,907,843),47858=>array(79,-69,922,843),47859=>array(79,-74,929,843),47860=>array(79,-69,927,843),47861=>array(79,-68,911,843),47862=>array(79,-72,929,843),47863=>array(79,-70,936,843),47864=>array(79,-66,908,843),47865=>array(79,-59,916,843),47866=>array(79,-60,928,843),47867=>array(79,-68,908,843),47868=>array(61,-69,907,842),47869=>array(64,-61,908,841),47870=>array(64,-61,908,841),47871=>array(64,-71,931,841),47872=>array(65,-46,908,841),47873=>array(64,-68,912,841),47874=>array(64,-76,908,841),47875=>array(64,-44,921,841),47876=>array(64,-62,917,841),47877=>array(64,-64,908,841),47878=>array(64,-64,908,841),47879=>array(64,-64,908,841),47880=>array(64,-69,923,841),47881=>array(64,-64,908,841),47882=>array(64,-64,908,841),47883=>array(64,-76,908,841),47884=>array(64,-62,908,841),47885=>array(64,-61,908,841),47886=>array(64,-69,922,841),47887=>array(64,-74,929,841),47888=>array(64,-69,927,841),47889=>array(64,-68,911,841),47890=>array(64,-72,929,841),47891=>array(64,-70,936,841),47892=>array(64,-66,908,841),47893=>array(64,-59,916,841),47894=>array(64,-60,928,841),47895=>array(64,-68,908,841),47896=>array(60,-3,940,765),47897=>array(79,-61,922,800),47898=>array(79,-61,922,800),47899=>array(79,-71,922,800),47900=>array(79,-46,922,800),47901=>array(79,-68,922,800),47902=>array(79,-74,922,800),47903=>array(79,-44,922,800),47904=>array(79,-62,922,800),47905=>array(79,-64,922,800),47906=>array(79,-64,922,800),47907=>array(79,-63,922,800),47908=>array(79,-68,922,800),47909=>array(79,-64,922,800),47910=>array(79,-63,922,800),47911=>array(79,-74,922,800),47912=>array(79,-62,922,800),47913=>array(79,-61,922,800),47914=>array(79,-69,922,800),47915=>array(79,-74,922,800),47916=>array(79,-69,922,800),47917=>array(79,-68,922,800),47918=>array(79,-72,922,800),47919=>array(79,-70,922,800),47920=>array(79,-66,922,800),47921=>array(79,-59,922,800),47922=>array(79,-60,922,800),47923=>array(79,-68,922,800),47924=>array(79,-64,921,800),47925=>array(79,-61,921,800),47926=>array(79,-61,921,800),47927=>array(79,-71,921,800),47928=>array(79,-46,921,800),47929=>array(79,-68,921,800),47930=>array(79,-74,921,800),47931=>array(79,-44,921,800),47932=>array(79,-62,921,800),47933=>array(79,-64,921,800),47934=>array(79,-64,921,800),47935=>array(79,-63,921,800),47936=>array(79,-68,921,800),47937=>array(79,-64,921,800),47938=>array(79,-63,921,800),47939=>array(79,-74,921,800),47940=>array(79,-62,921,800),47941=>array(79,-61,921,800),47942=>array(79,-69,921,800),47943=>array(79,-74,921,800),47944=>array(79,-69,921,800),47945=>array(79,-68,921,800),47946=>array(79,-72,921,800),47947=>array(79,-70,921,800),47948=>array(79,-66,921,800),47949=>array(79,-59,921,800),47950=>array(79,-60,921,800),47951=>array(79,-68,921,800),47952=>array(69,-70,907,841),47953=>array(79,-61,907,841),47954=>array(79,-61,907,841),47955=>array(79,-71,931,841),47956=>array(79,-46,907,841),47957=>array(79,-68,912,841),47958=>array(79,-76,907,841),47959=>array(79,-44,921,841),47960=>array(79,-62,917,841),47961=>array(79,-64,907,841),47962=>array(79,-64,908,841),47963=>array(79,-64,908,841),47964=>array(79,-69,923,841),47965=>array(79,-64,908,841),47966=>array(79,-64,908,841),47967=>array(79,-76,906,841),47968=>array(79,-62,907,841),47969=>array(79,-61,907,841),47970=>array(79,-69,922,841),47971=>array(79,-74,929,841),47972=>array(79,-69,927,841),47973=>array(79,-68,911,841),47974=>array(79,-72,929,841),47975=>array(79,-70,936,841),47976=>array(79,-66,908,841),47977=>array(79,-59,916,841),47978=>array(79,-60,928,841),47979=>array(79,-68,908,841),47980=>array(63,-68,912,843),47981=>array(72,-61,907,843),47982=>array(72,-61,907,843),47983=>array(72,-71,931,843),47984=>array(89,-46,907,843),47985=>array(72,-68,912,843),47986=>array(72,-76,907,843),47987=>array(72,-44,921,843),47988=>array(72,-62,917,843),47989=>array(72,-64,907,843),47990=>array(72,-64,908,843),47991=>array(72,-64,908,843),47992=>array(72,-69,923,843),47993=>array(72,-64,908,843),47994=>array(72,-64,908,843),47995=>array(72,-76,907,843),47996=>array(72,-62,907,843),47997=>array(72,-61,907,843),47998=>array(72,-69,922,843),47999=>array(72,-74,929,843),48000=>array(72,-69,927,843),48001=>array(72,-68,911,843),48002=>array(72,-72,929,843),48003=>array(72,-70,936,843),48004=>array(72,-66,908,843),48005=>array(72,-59,916,843),48006=>array(72,-60,928,843),48007=>array(72,-68,908,843),48008=>array(51,-69,907,842),48009=>array(65,-61,907,842),48010=>array(65,-61,907,842),48011=>array(65,-71,931,842),48012=>array(65,-46,907,842),48013=>array(65,-68,912,842),48014=>array(65,-76,907,842),48015=>array(65,-44,921,842),48016=>array(65,-62,917,842),48017=>array(65,-64,907,842),48018=>array(65,-64,908,842),48019=>array(65,-64,908,842),48020=>array(65,-69,923,842),48021=>array(65,-64,908,842),48022=>array(65,-64,908,842),48023=>array(65,-76,907,842),48024=>array(65,-62,907,842),48025=>array(65,-61,907,842),48026=>array(65,-69,922,842),48027=>array(65,-74,929,842),48028=>array(65,-69,927,842),48029=>array(65,-68,911,842),48030=>array(65,-72,929,842),48031=>array(65,-70,936,842),48032=>array(65,-66,908,842),48033=>array(65,-59,916,842),48034=>array(65,-60,928,842),48035=>array(65,-68,908,842),48036=>array(71,-64,928,800),48037=>array(79,-61,921,800),48038=>array(79,-61,921,800),48039=>array(79,-71,921,800),48040=>array(79,-46,921,790),48041=>array(79,-68,921,800),48042=>array(79,-74,921,800),48043=>array(79,-44,921,800),48044=>array(79,-62,921,800),48045=>array(79,-64,921,800),48046=>array(79,-64,921,800),48047=>array(79,-63,921,800),48048=>array(79,-68,921,800),48049=>array(79,-64,921,800),48050=>array(79,-63,921,800),48051=>array(79,-74,921,800),48052=>array(79,-62,921,800),48053=>array(79,-61,921,800),48054=>array(79,-69,921,800),48055=>array(79,-74,921,800),48056=>array(79,-69,921,800),48057=>array(79,-68,921,800),48058=>array(79,-72,921,800),48059=>array(79,-70,921,800),48060=>array(79,-66,921,800),48061=>array(79,-59,921,800),48062=>array(79,-60,921,800),48063=>array(79,-68,921,800),48064=>array(57,42,943,710),48065=>array(79,-61,921,791),48066=>array(79,-61,921,791),48067=>array(79,-71,921,791),48068=>array(79,-46,921,791),48069=>array(79,-68,921,791),48070=>array(79,-74,921,791),48071=>array(79,-44,921,791),48072=>array(79,-62,921,791),48073=>array(79,-64,921,791),48074=>array(79,-64,921,791),48075=>array(79,-63,921,791),48076=>array(79,-68,921,791),48077=>array(79,-64,921,791),48078=>array(79,-63,921,791),48079=>array(79,-74,921,791),48080=>array(79,-62,921,791),48081=>array(79,-61,921,791),48082=>array(79,-69,921,791),48083=>array(79,-74,921,791),48084=>array(79,-69,921,791),48085=>array(79,-68,921,791),48086=>array(79,-72,921,791),48087=>array(79,-70,921,791),48088=>array(79,-66,921,791),48089=>array(79,-59,921,791),48090=>array(79,-60,921,791),48091=>array(79,-68,921,791),48092=>array(67,-69,907,842),48093=>array(64,-61,907,842),48094=>array(64,-61,907,842),48095=>array(64,-71,931,842),48096=>array(64,-46,907,842),48097=>array(64,-68,912,842),48098=>array(64,-76,907,842),48099=>array(64,-44,921,842),48100=>array(64,-62,917,842),48101=>array(64,-64,907,842),48102=>array(64,-64,908,842),48103=>array(64,-64,908,842),48104=>array(64,-69,923,842),48105=>array(64,-64,908,842),48106=>array(64,-64,908,842),48107=>array(64,-76,907,842),48108=>array(64,-62,907,842),48109=>array(64,-61,907,842),48110=>array(64,-69,922,842),48111=>array(64,-74,929,842),48112=>array(64,-69,927,842),48113=>array(64,-68,911,842),48114=>array(64,-72,929,842),48115=>array(64,-70,936,842),48116=>array(64,-66,908,842),48117=>array(64,-59,916,842),48118=>array(64,-60,928,842),48119=>array(64,-68,908,842),48120=>array(147,-69,907,842),48121=>array(157,-61,907,842),48122=>array(157,-61,907,842),48123=>array(157,-71,931,842),48124=>array(122,-46,907,842),48125=>array(157,-68,912,842),48126=>array(157,-76,907,842),48127=>array(157,-44,921,842),48128=>array(157,-62,917,842),48129=>array(157,-64,907,842),48130=>array(157,-64,908,842),48131=>array(157,-64,908,842),48132=>array(157,-69,923,842),48133=>array(157,-64,908,842),48134=>array(157,-64,908,842),48135=>array(157,-76,907,842),48136=>array(157,-62,907,842),48137=>array(157,-61,907,842),48138=>array(157,-69,922,842),48139=>array(157,-74,929,842),48140=>array(143,-69,927,842),48141=>array(157,-68,911,842),48142=>array(157,-72,929,842),48143=>array(157,-70,936,842),48144=>array(157,-66,908,842),48145=>array(157,-59,916,842),48146=>array(157,-60,928,842),48147=>array(157,-68,908,842),48148=>array(122,-69,936,842),48149=>array(122,-59,936,837),48150=>array(122,-61,936,837),48151=>array(122,-71,936,837),48152=>array(122,-45,936,842),48153=>array(122,-69,936,837),48154=>array(122,-76,936,837),48155=>array(122,-44,936,837),48156=>array(122,-62,936,837),48157=>array(122,-64,936,837),48158=>array(122,-64,936,837),48159=>array(122,-64,936,837),48160=>array(122,-70,936,837),48161=>array(122,-64,936,837),48162=>array(122,-64,936,837),48163=>array(122,-76,936,837),48164=>array(122,-62,936,837),48165=>array(122,-61,936,837),48166=>array(122,-70,936,837),48167=>array(122,-74,936,837),48168=>array(118,-69,936,837),48169=>array(122,-67,936,837),48170=>array(122,-72,936,837),48171=>array(122,-71,936,837),48172=>array(122,-66,936,837),48173=>array(122,-59,936,837),48174=>array(122,-60,936,837),48175=>array(122,-69,936,837),48176=>array(122,-69,907,842),48177=>array(157,-61,907,842),48178=>array(157,-61,907,842),48179=>array(157,-71,931,842),48180=>array(157,-46,907,842),48181=>array(157,-68,912,842),48182=>array(157,-76,907,842),48183=>array(157,-44,921,842),48184=>array(157,-62,917,842),48185=>array(157,-64,907,842),48186=>array(157,-64,908,842),48187=>array(157,-64,908,842),48188=>array(157,-69,923,842),48189=>array(157,-64,908,842),48190=>array(157,-64,908,842),48191=>array(157,-76,907,842),48192=>array(157,-62,907,842),48193=>array(157,-61,907,842),48194=>array(157,-69,922,842),48195=>array(157,-74,929,842),48196=>array(143,-69,927,842),48197=>array(157,-68,911,842),48198=>array(157,-72,929,842),48199=>array(157,-70,936,842),48200=>array(157,-66,908,842),48201=>array(157,-59,916,842),48202=>array(157,-60,928,842),48203=>array(157,-68,908,842),48204=>array(122,-68,935,843),48205=>array(122,-59,936,842),48206=>array(122,-61,936,842),48207=>array(122,-71,936,842),48208=>array(122,-45,936,842),48209=>array(122,-69,936,842),48210=>array(122,-76,936,842),48211=>array(122,-44,936,842),48212=>array(122,-62,936,842),48213=>array(122,-64,936,842),48214=>array(122,-64,936,842),48215=>array(122,-64,936,842),48216=>array(122,-70,936,842),48217=>array(122,-64,936,842),48218=>array(122,-64,936,842),48219=>array(122,-76,936,842),48220=>array(122,-62,936,842),48221=>array(122,-61,936,842),48222=>array(122,-70,936,842),48223=>array(122,-74,936,842),48224=>array(118,-69,936,842),48225=>array(122,-67,936,842),48226=>array(122,-72,936,842),48227=>array(122,-71,936,842),48228=>array(122,-66,936,842),48229=>array(122,-59,936,842),48230=>array(122,-60,936,842),48231=>array(122,-69,936,842),48232=>array(122,-69,907,842),48233=>array(157,-61,907,842),48234=>array(157,-61,907,842),48235=>array(157,-71,931,842),48236=>array(157,-46,907,842),48237=>array(157,-68,912,842),48238=>array(157,-76,907,842),48239=>array(157,-44,921,842),48240=>array(157,-62,917,842),48241=>array(157,-64,907,842),48242=>array(157,-64,908,842),48243=>array(157,-64,908,842),48244=>array(157,-69,923,842),48245=>array(157,-64,908,842),48246=>array(157,-64,908,842),48247=>array(157,-76,907,842),48248=>array(157,-62,907,842),48249=>array(157,-61,907,842),48250=>array(157,-69,922,842),48251=>array(157,-74,929,842),48252=>array(143,-69,927,842),48253=>array(157,-68,911,842),48254=>array(157,-72,929,842),48255=>array(157,-70,936,842),48256=>array(157,-66,908,842),48257=>array(157,-59,916,842),48258=>array(157,-60,928,842),48259=>array(157,-68,908,842),48260=>array(127,-70,907,841),48261=>array(122,-61,907,841),48262=>array(122,-61,907,841),48263=>array(122,-71,931,841),48264=>array(122,-46,907,841),48265=>array(122,-68,912,841),48266=>array(122,-76,907,841),48267=>array(122,-44,921,841),48268=>array(122,-62,917,841),48269=>array(122,-64,907,841),48270=>array(122,-64,908,841),48271=>array(122,-64,908,841),48272=>array(122,-69,923,841),48273=>array(122,-64,908,841),48274=>array(122,-64,908,841),48275=>array(122,-76,906,841),48276=>array(122,-62,907,841),48277=>array(122,-61,907,841),48278=>array(122,-69,922,841),48279=>array(122,-74,929,841),48280=>array(122,-69,927,841),48281=>array(122,-68,911,841),48282=>array(122,-72,929,841),48283=>array(122,-70,936,841),48284=>array(122,-66,908,841),48285=>array(122,-59,916,841),48286=>array(122,-60,928,841),48287=>array(122,-68,908,841),48288=>array(122,-68,907,843),48289=>array(127,-61,907,843),48290=>array(127,-61,907,843),48291=>array(127,-71,931,843),48292=>array(127,-46,907,843),48293=>array(127,-68,912,843),48294=>array(127,-76,907,843),48295=>array(127,-44,921,843),48296=>array(127,-62,917,843),48297=>array(127,-64,907,843),48298=>array(127,-64,908,843),48299=>array(127,-64,908,843),48300=>array(127,-69,923,843),48301=>array(127,-64,908,843),48302=>array(127,-64,908,843),48303=>array(127,-76,907,843),48304=>array(127,-62,907,843),48305=>array(127,-61,907,843),48306=>array(127,-69,922,843),48307=>array(127,-74,929,843),48308=>array(127,-69,927,843),48309=>array(127,-68,911,843),48310=>array(127,-72,929,843),48311=>array(127,-70,936,843),48312=>array(127,-66,908,843),48313=>array(127,-59,916,843),48314=>array(127,-60,928,843),48315=>array(127,-68,908,843),48316=>array(127,-70,907,842),48317=>array(122,-61,908,842),48318=>array(122,-61,908,842),48319=>array(122,-71,931,842),48320=>array(122,-46,907,842),48321=>array(122,-68,912,842),48322=>array(122,-76,908,842),48323=>array(122,-44,921,842),48324=>array(122,-62,917,842),48325=>array(122,-64,908,842),48326=>array(122,-64,908,842),48327=>array(122,-64,908,842),48328=>array(122,-69,923,842),48329=>array(122,-64,908,842),48330=>array(122,-64,908,842),48331=>array(122,-76,908,842),48332=>array(122,-62,908,842),48333=>array(122,-61,908,842),48334=>array(122,-69,922,842),48335=>array(122,-74,929,842),48336=>array(122,-69,927,842),48337=>array(122,-68,911,842),48338=>array(122,-72,929,842),48339=>array(122,-70,936,842),48340=>array(122,-66,908,842),48341=>array(122,-59,916,842),48342=>array(122,-60,928,842),48343=>array(122,-68,908,842),48344=>array(122,-68,907,843),48345=>array(127,-61,907,843),48346=>array(127,-61,907,843),48347=>array(127,-71,931,843),48348=>array(127,-46,907,843),48349=>array(127,-68,912,843),48350=>array(127,-76,907,843),48351=>array(127,-44,921,843),48352=>array(127,-62,917,843),48353=>array(127,-64,907,843),48354=>array(127,-64,908,843),48355=>array(127,-64,908,843),48356=>array(127,-69,923,843),48357=>array(127,-64,908,843),48358=>array(127,-64,908,843),48359=>array(127,-76,907,843),48360=>array(127,-62,907,843),48361=>array(127,-61,907,843),48362=>array(127,-69,922,843),48363=>array(127,-74,929,843),48364=>array(127,-69,927,843),48365=>array(127,-68,911,843),48366=>array(127,-72,929,843),48367=>array(127,-70,936,843),48368=>array(127,-66,908,843),48369=>array(127,-59,916,843),48370=>array(127,-60,928,843),48371=>array(127,-68,908,843),48372=>array(62,7,943,795),48373=>array(79,-61,921,815),48374=>array(79,-61,921,815),48375=>array(79,-71,921,815),48376=>array(79,-46,921,815),48377=>array(79,-68,921,815),48378=>array(79,-74,921,815),48379=>array(79,-44,921,815),48380=>array(79,-62,921,815),48381=>array(79,-64,921,815),48382=>array(79,-64,921,815),48383=>array(79,-63,921,815),48384=>array(79,-68,921,815),48385=>array(79,-64,921,815),48386=>array(79,-63,921,815),48387=>array(79,-74,921,815),48388=>array(79,-62,921,815),48389=>array(79,-61,921,815),48390=>array(79,-69,921,815),48391=>array(79,-74,921,815),48392=>array(79,-69,921,815),48393=>array(79,-68,921,815),48394=>array(79,-72,921,815),48395=>array(79,-70,921,815),48396=>array(79,-66,921,815),48397=>array(79,-59,921,815),48398=>array(79,-60,921,815),48399=>array(79,-68,921,815),48400=>array(52,-69,936,842),48401=>array(77,-59,936,843),48402=>array(77,-61,936,843),48403=>array(77,-71,936,843),48404=>array(66,-45,936,842),48405=>array(77,-69,936,843),48406=>array(77,-76,936,843),48407=>array(77,-44,936,843),48408=>array(77,-62,936,843),48409=>array(77,-64,936,843),48410=>array(77,-64,936,843),48411=>array(77,-64,936,843),48412=>array(77,-70,936,843),48413=>array(77,-64,936,843),48414=>array(77,-64,936,843),48415=>array(77,-76,936,843),48416=>array(77,-62,936,843),48417=>array(77,-61,936,843),48418=>array(77,-70,936,843),48419=>array(77,-74,936,843),48420=>array(77,-69,936,843),48421=>array(77,-67,936,843),48422=>array(77,-72,936,843),48423=>array(77,-71,936,843),48424=>array(77,-66,936,843),48425=>array(77,-59,936,843),48426=>array(77,-60,936,843),48427=>array(77,-69,936,843),48428=>array(61,-68,907,843),48429=>array(79,-61,907,843),48430=>array(79,-61,907,843),48431=>array(79,-71,931,843),48432=>array(72,-46,907,842),48433=>array(79,-68,912,843),48434=>array(79,-76,907,843),48435=>array(79,-44,921,843),48436=>array(79,-62,917,843),48437=>array(79,-64,907,843),48438=>array(79,-64,908,843),48439=>array(79,-64,908,843),48440=>array(79,-69,923,843),48441=>array(79,-64,908,843),48442=>array(79,-64,908,843),48443=>array(79,-76,907,843),48444=>array(79,-62,907,843),48445=>array(79,-61,907,843),48446=>array(79,-69,922,843),48447=>array(79,-74,929,843),48448=>array(79,-69,927,843),48449=>array(79,-68,911,843),48450=>array(79,-72,929,843),48451=>array(79,-70,936,843),48452=>array(79,-66,908,843),48453=>array(79,-59,916,843),48454=>array(79,-60,928,843),48455=>array(79,-68,908,843),48456=>array(62,-69,907,842),48457=>array(65,-61,907,842),48458=>array(65,-61,907,842),48459=>array(65,-71,931,842),48460=>array(64,-46,907,842),48461=>array(65,-68,912,842),48462=>array(65,-76,907,842),48463=>array(65,-44,921,842),48464=>array(65,-62,917,842),48465=>array(65,-64,907,842),48466=>array(65,-64,908,842),48467=>array(65,-64,908,842),48468=>array(65,-69,923,842),48469=>array(65,-64,908,842),48470=>array(65,-64,908,842),48471=>array(65,-76,907,842),48472=>array(65,-62,907,842),48473=>array(65,-61,907,842),48474=>array(65,-69,922,842),48475=>array(65,-74,929,842),48476=>array(65,-69,927,842),48477=>array(65,-68,911,842),48478=>array(65,-72,929,842),48479=>array(65,-70,936,842),48480=>array(65,-66,908,842),48481=>array(65,-59,916,842),48482=>array(65,-60,928,842),48483=>array(65,-68,908,842),48484=>array(62,7,943,805),48485=>array(79,-61,922,815),48486=>array(79,-61,922,815),48487=>array(79,-71,922,815),48488=>array(79,-46,922,815),48489=>array(79,-68,922,815),48490=>array(79,-74,922,815),48491=>array(79,-44,922,815),48492=>array(79,-62,922,815),48493=>array(79,-64,922,815),48494=>array(79,-64,922,815),48495=>array(79,-63,922,815),48496=>array(79,-68,922,815),48497=>array(79,-64,922,815),48498=>array(79,-63,922,815),48499=>array(79,-74,922,815),48500=>array(79,-62,922,815),48501=>array(79,-61,922,815),48502=>array(79,-69,922,815),48503=>array(79,-74,922,815),48504=>array(79,-69,922,815),48505=>array(79,-68,922,815),48506=>array(79,-72,922,815),48507=>array(79,-70,922,815),48508=>array(79,-66,922,815),48509=>array(79,-59,922,815),48510=>array(79,-60,922,815),48511=>array(79,-68,922,815),48512=>array(79,-64,921,815),48513=>array(79,-61,921,815),48514=>array(79,-61,921,815),48515=>array(79,-71,921,815),48516=>array(79,-46,921,815),48517=>array(79,-68,921,815),48518=>array(79,-74,921,815),48519=>array(79,-44,921,815),48520=>array(79,-62,921,815),48521=>array(79,-64,921,815),48522=>array(79,-64,921,815),48523=>array(79,-63,921,815),48524=>array(79,-68,921,815),48525=>array(79,-64,921,815),48526=>array(79,-63,921,815),48527=>array(79,-74,921,815),48528=>array(79,-62,921,815),48529=>array(79,-61,921,815),48530=>array(79,-69,921,815),48531=>array(79,-74,921,815),48532=>array(79,-69,921,815),48533=>array(79,-68,921,815),48534=>array(79,-72,921,815),48535=>array(79,-70,921,815),48536=>array(79,-66,921,815),48537=>array(79,-59,921,815),48538=>array(79,-60,921,815),48539=>array(79,-68,921,815),48540=>array(69,-70,907,841),48541=>array(75,-61,907,841),48542=>array(75,-61,907,841),48543=>array(75,-71,931,841),48544=>array(76,-46,907,841),48545=>array(75,-68,912,841),48546=>array(75,-76,907,841),48547=>array(75,-44,921,841),48548=>array(75,-62,917,841),48549=>array(75,-64,907,841),48550=>array(75,-64,908,841),48551=>array(75,-64,908,841),48552=>array(75,-69,923,841),48553=>array(75,-64,908,841),48554=>array(75,-64,908,841),48555=>array(75,-76,906,841),48556=>array(75,-62,907,841),48557=>array(75,-61,907,841),48558=>array(75,-69,922,841),48559=>array(75,-74,929,841),48560=>array(75,-69,927,841),48561=>array(75,-68,911,841),48562=>array(75,-72,929,841),48563=>array(75,-70,936,841),48564=>array(75,-66,908,841),48565=>array(75,-59,916,841),48566=>array(75,-60,928,841),48567=>array(75,-68,908,841),48568=>array(63,-68,907,843),48569=>array(72,-61,907,843),48570=>array(72,-61,907,843),48571=>array(72,-71,931,843),48572=>array(76,-46,907,843),48573=>array(72,-68,912,843),48574=>array(72,-76,907,843),48575=>array(72,-44,921,843),48576=>array(72,-62,917,843),48577=>array(72,-64,907,843),48578=>array(72,-64,908,843),48579=>array(72,-64,908,843),48580=>array(72,-69,923,843),48581=>array(72,-64,908,843),48582=>array(72,-64,908,843),48583=>array(72,-76,907,843),48584=>array(72,-62,907,843),48585=>array(72,-61,907,843),48586=>array(72,-69,922,843),48587=>array(72,-74,929,843),48588=>array(72,-69,927,843),48589=>array(72,-68,911,843),48590=>array(72,-72,929,843),48591=>array(72,-70,936,843),48592=>array(72,-66,908,843),48593=>array(72,-59,916,843),48594=>array(72,-60,928,843),48595=>array(72,-68,908,843),48596=>array(70,-69,907,842),48597=>array(65,-61,907,841),48598=>array(65,-61,907,841),48599=>array(65,-71,931,841),48600=>array(65,-46,907,841),48601=>array(65,-68,912,841),48602=>array(65,-76,907,841),48603=>array(65,-44,921,841),48604=>array(65,-62,917,841),48605=>array(65,-64,907,841),48606=>array(65,-64,908,841),48607=>array(65,-64,908,841),48608=>array(65,-69,923,841),48609=>array(65,-64,908,841),48610=>array(65,-64,908,841),48611=>array(65,-76,907,841),48612=>array(65,-62,907,841),48613=>array(65,-61,907,841),48614=>array(65,-69,922,841),48615=>array(65,-74,929,841),48616=>array(65,-69,927,841),48617=>array(65,-68,911,841),48618=>array(65,-72,929,841),48619=>array(65,-70,936,841),48620=>array(65,-66,908,841),48621=>array(65,-59,916,841),48622=>array(65,-60,928,841),48623=>array(65,-68,908,841),48624=>array(71,-64,928,815),48625=>array(79,-61,921,815),48626=>array(79,-61,921,815),48627=>array(79,-71,921,815),48628=>array(79,-46,921,815),48629=>array(79,-68,921,815),48630=>array(79,-74,921,815),48631=>array(79,-44,921,815),48632=>array(79,-62,921,815),48633=>array(79,-64,921,815),48634=>array(79,-64,921,815),48635=>array(79,-63,921,815),48636=>array(79,-68,921,815),48637=>array(79,-64,921,815),48638=>array(79,-63,921,815),48639=>array(79,-74,921,815),48640=>array(79,-62,921,815),48641=>array(79,-61,921,815),48642=>array(79,-69,921,815),48643=>array(79,-74,921,815),48644=>array(79,-69,921,815),48645=>array(79,-68,921,815),48646=>array(79,-72,921,815),48647=>array(79,-70,921,815),48648=>array(79,-66,921,815),48649=>array(79,-59,921,815),48650=>array(79,-60,921,815),48651=>array(79,-68,921,815),48652=>array(57,42,943,750),48653=>array(79,-61,921,825),48654=>array(79,-61,921,825),48655=>array(79,-71,921,825),48656=>array(79,-46,921,825),48657=>array(79,-68,921,825),48658=>array(79,-74,921,825),48659=>array(79,-44,921,825),48660=>array(79,-62,921,825),48661=>array(79,-64,921,825),48662=>array(79,-64,921,825),48663=>array(79,-63,921,825),48664=>array(79,-68,921,825),48665=>array(79,-64,921,825),48666=>array(79,-63,921,825),48667=>array(79,-74,921,825),48668=>array(79,-62,921,825),48669=>array(79,-61,921,825),48670=>array(79,-69,921,825),48671=>array(79,-74,921,825),48672=>array(79,-69,921,825),48673=>array(79,-68,921,825),48674=>array(79,-72,921,825),48675=>array(79,-70,921,825),48676=>array(79,-66,921,825),48677=>array(79,-59,921,825),48678=>array(79,-60,921,825),48679=>array(79,-68,921,825),48680=>array(67,-69,907,842),48681=>array(65,-61,907,842),48682=>array(65,-61,907,842),48683=>array(65,-71,931,842),48684=>array(65,-46,907,841),48685=>array(65,-68,912,842),48686=>array(65,-76,907,842),48687=>array(65,-44,921,842),48688=>array(65,-62,917,842),48689=>array(65,-64,907,842),48690=>array(65,-64,908,842),48691=>array(65,-64,908,842),48692=>array(65,-69,923,842),48693=>array(65,-64,908,842),48694=>array(65,-64,908,842),48695=>array(65,-76,907,842),48696=>array(65,-62,907,842),48697=>array(65,-61,907,842),48698=>array(65,-69,922,842),48699=>array(65,-74,929,842),48700=>array(65,-69,927,842),48701=>array(65,-68,911,842),48702=>array(65,-72,929,842),48703=>array(65,-70,936,842),48704=>array(65,-66,908,842),48705=>array(65,-59,916,842),48706=>array(65,-60,928,842),48707=>array(65,-68,908,842),48708=>array(147,-69,907,842),48709=>array(157,-61,907,842),48710=>array(157,-61,907,842),48711=>array(157,-71,931,842),48712=>array(152,-46,907,842),48713=>array(157,-68,912,842),48714=>array(157,-76,907,842),48715=>array(157,-44,921,842),48716=>array(157,-62,917,842),48717=>array(157,-64,907,842),48718=>array(157,-64,908,842),48719=>array(157,-64,908,842),48720=>array(157,-69,923,842),48721=>array(157,-64,908,842),48722=>array(157,-64,908,842),48723=>array(157,-76,907,842),48724=>array(157,-62,907,842),48725=>array(157,-61,907,842),48726=>array(157,-69,922,842),48727=>array(157,-74,929,842),48728=>array(143,-69,927,842),48729=>array(157,-68,911,842),48730=>array(157,-72,929,842),48731=>array(157,-70,936,842),48732=>array(157,-66,908,842),48733=>array(157,-59,916,842),48734=>array(157,-60,928,842),48735=>array(157,-68,908,842),48736=>array(95,-69,936,842),48737=>array(105,-59,936,842),48738=>array(105,-61,936,842),48739=>array(105,-71,936,842),48740=>array(105,-45,936,842),48741=>array(105,-69,936,842),48742=>array(105,-76,936,842),48743=>array(105,-44,936,842),48744=>array(105,-62,936,842),48745=>array(105,-64,936,842),48746=>array(105,-64,936,842),48747=>array(105,-64,936,842),48748=>array(105,-70,936,842),48749=>array(105,-64,936,842),48750=>array(105,-64,936,842),48751=>array(105,-76,936,842),48752=>array(105,-62,936,842),48753=>array(105,-61,936,842),48754=>array(105,-70,936,842),48755=>array(105,-74,936,842),48756=>array(105,-69,936,842),48757=>array(105,-67,936,842),48758=>array(105,-72,936,842),48759=>array(105,-71,936,842),48760=>array(105,-66,936,842),48761=>array(105,-59,936,842),48762=>array(105,-60,936,842),48763=>array(105,-69,936,842),48764=>array(95,-69,907,842),48765=>array(105,-61,907,842),48766=>array(105,-61,907,842),48767=>array(105,-71,931,842),48768=>array(105,-46,907,842),48769=>array(105,-68,912,842),48770=>array(105,-76,907,842),48771=>array(105,-44,921,842),48772=>array(105,-62,917,842),48773=>array(105,-64,907,842),48774=>array(105,-64,908,842),48775=>array(105,-64,908,842),48776=>array(105,-69,923,842),48777=>array(105,-64,908,842),48778=>array(105,-64,908,842),48779=>array(105,-76,907,842),48780=>array(105,-62,907,842),48781=>array(105,-61,907,842),48782=>array(105,-69,922,842),48783=>array(105,-74,929,842),48784=>array(105,-69,927,842),48785=>array(105,-68,911,842),48786=>array(105,-72,929,842),48787=>array(105,-70,936,842),48788=>array(105,-66,908,842),48789=>array(105,-59,916,842),48790=>array(105,-60,928,842),48791=>array(105,-68,908,842),48792=>array(95,-68,935,843),48793=>array(105,-59,936,842),48794=>array(105,-61,936,842),48795=>array(105,-71,936,842),48796=>array(105,-45,936,842),48797=>array(105,-69,936,842),48798=>array(105,-76,936,842),48799=>array(105,-44,936,842),48800=>array(105,-62,936,842),48801=>array(105,-64,936,842),48802=>array(105,-64,936,842),48803=>array(105,-64,936,842),48804=>array(105,-70,936,842),48805=>array(105,-64,936,842),48806=>array(105,-64,936,842),48807=>array(105,-76,936,842),48808=>array(105,-62,936,842),48809=>array(105,-61,936,842),48810=>array(105,-70,936,842),48811=>array(105,-74,936,842),48812=>array(105,-69,936,842),48813=>array(105,-67,936,842),48814=>array(105,-72,936,842),48815=>array(105,-71,936,842),48816=>array(105,-66,936,842),48817=>array(105,-59,936,842),48818=>array(105,-60,936,842),48819=>array(105,-69,936,842),48820=>array(95,-69,907,842),48821=>array(105,-61,907,842),48822=>array(105,-61,907,842),48823=>array(105,-71,931,842),48824=>array(105,-46,907,842),48825=>array(105,-68,912,842),48826=>array(105,-76,907,842),48827=>array(105,-44,921,842),48828=>array(105,-62,917,842),48829=>array(105,-64,907,842),48830=>array(105,-64,908,842),48831=>array(105,-64,908,842),48832=>array(105,-69,923,842),48833=>array(105,-64,908,842),48834=>array(105,-64,908,842),48835=>array(105,-76,907,842),48836=>array(105,-62,907,842),48837=>array(105,-61,907,842),48838=>array(105,-69,922,842),48839=>array(105,-74,929,842),48840=>array(105,-69,927,842),48841=>array(105,-68,911,842),48842=>array(105,-72,929,842),48843=>array(105,-70,936,842),48844=>array(105,-66,908,842),48845=>array(105,-59,916,842),48846=>array(105,-60,928,842),48847=>array(105,-68,908,842),48848=>array(95,-70,907,841),48849=>array(105,-61,907,841),48850=>array(105,-61,907,841),48851=>array(105,-71,931,841),48852=>array(105,-46,907,841),48853=>array(105,-68,912,841),48854=>array(105,-76,907,841),48855=>array(105,-44,921,841),48856=>array(105,-62,917,841),48857=>array(105,-64,907,841),48858=>array(105,-64,908,841),48859=>array(105,-64,908,841),48860=>array(105,-69,923,841),48861=>array(105,-64,908,841),48862=>array(105,-64,908,841),48863=>array(105,-76,906,841),48864=>array(105,-62,907,841),48865=>array(105,-61,907,841),48866=>array(105,-69,922,841),48867=>array(105,-74,929,841),48868=>array(105,-69,927,841),48869=>array(105,-68,911,841),48870=>array(105,-72,929,841),48871=>array(105,-70,936,841),48872=>array(105,-66,908,841),48873=>array(105,-59,916,841),48874=>array(105,-60,928,841),48875=>array(105,-68,908,841),48876=>array(90,-68,907,843),48877=>array(90,-61,907,843),48878=>array(90,-61,907,843),48879=>array(90,-71,931,843),48880=>array(90,-46,907,843),48881=>array(90,-68,912,843),48882=>array(90,-76,907,843),48883=>array(90,-44,921,843),48884=>array(90,-62,917,843),48885=>array(90,-64,907,843),48886=>array(90,-64,908,843),48887=>array(90,-64,908,843),48888=>array(90,-69,923,843),48889=>array(90,-64,908,843),48890=>array(90,-64,908,843),48891=>array(90,-76,907,843),48892=>array(90,-62,907,843),48893=>array(90,-61,907,843),48894=>array(90,-69,922,843),48895=>array(90,-74,929,843),48896=>array(90,-69,927,843),48897=>array(90,-68,911,843),48898=>array(90,-72,929,843),48899=>array(90,-70,936,843),48900=>array(90,-66,908,843),48901=>array(90,-59,916,843),48902=>array(90,-60,928,843),48903=>array(90,-68,908,843),48904=>array(95,-70,907,842),48905=>array(105,-61,908,842),48906=>array(105,-61,908,842),48907=>array(105,-71,931,842),48908=>array(105,-46,907,842),48909=>array(105,-68,912,842),48910=>array(105,-76,908,842),48911=>array(105,-44,921,842),48912=>array(105,-62,917,842),48913=>array(105,-64,908,842),48914=>array(105,-64,908,842),48915=>array(105,-64,908,842),48916=>array(105,-69,923,842),48917=>array(105,-64,908,842),48918=>array(105,-64,908,842),48919=>array(105,-76,908,842),48920=>array(105,-62,908,842),48921=>array(105,-61,908,842),48922=>array(105,-69,922,842),48923=>array(105,-74,929,842),48924=>array(105,-69,927,842),48925=>array(105,-68,911,842),48926=>array(105,-72,929,842),48927=>array(105,-70,936,842),48928=>array(105,-66,908,842),48929=>array(105,-59,916,842),48930=>array(105,-60,928,842),48931=>array(105,-68,908,842),48932=>array(90,-68,907,843),48933=>array(90,-61,907,843),48934=>array(90,-61,907,843),48935=>array(90,-71,931,843),48936=>array(90,-46,907,843),48937=>array(90,-68,912,843),48938=>array(90,-76,907,843),48939=>array(90,-44,921,843),48940=>array(90,-62,917,843),48941=>array(90,-64,907,843),48942=>array(90,-64,908,843),48943=>array(90,-64,908,843),48944=>array(90,-69,923,843),48945=>array(90,-64,908,843),48946=>array(90,-64,908,843),48947=>array(90,-76,907,843),48948=>array(90,-62,907,843),48949=>array(90,-61,907,843),48950=>array(90,-69,922,843),48951=>array(90,-74,929,843),48952=>array(90,-69,927,843),48953=>array(90,-68,911,843),48954=>array(90,-72,929,843),48955=>array(90,-70,936,843),48956=>array(90,-66,908,843),48957=>array(90,-59,916,843),48958=>array(90,-60,928,843),48959=>array(90,-68,908,843),48960=>array(60,12,940,766),48961=>array(79,-61,921,806),48962=>array(79,-61,921,806),48963=>array(79,-71,921,806),48964=>array(79,-46,921,806),48965=>array(79,-68,921,806),48966=>array(79,-74,921,806),48967=>array(79,-44,921,806),48968=>array(79,-62,921,806),48969=>array(79,-64,921,806),48970=>array(79,-64,921,806),48971=>array(79,-63,921,806),48972=>array(79,-68,921,806),48973=>array(79,-64,921,806),48974=>array(79,-63,921,806),48975=>array(79,-74,921,806),48976=>array(79,-62,921,806),48977=>array(79,-61,921,806),48978=>array(79,-69,921,806),48979=>array(79,-74,921,806),48980=>array(79,-69,921,806),48981=>array(79,-68,921,806),48982=>array(79,-72,921,806),48983=>array(79,-70,921,806),48984=>array(79,-66,921,806),48985=>array(79,-59,921,806),48986=>array(79,-60,921,806),48987=>array(79,-68,921,806),48988=>array(51,-69,936,842),48989=>array(69,-59,937,843),48990=>array(69,-61,937,843),48991=>array(69,-71,937,843),48992=>array(57,-45,937,842),48993=>array(69,-69,937,843),48994=>array(69,-76,937,843),48995=>array(69,-44,937,843),48996=>array(69,-62,937,843),48997=>array(69,-64,937,843),48998=>array(69,-64,937,843),48999=>array(69,-64,937,843),49000=>array(69,-70,937,843),49001=>array(69,-64,937,843),49002=>array(69,-64,937,843),49003=>array(69,-76,937,843),49004=>array(69,-62,937,843),49005=>array(69,-61,937,843),49006=>array(69,-70,937,843),49007=>array(69,-74,937,843),49008=>array(69,-69,937,843),49009=>array(69,-67,937,843),49010=>array(69,-72,937,843),49011=>array(69,-71,937,843),49012=>array(69,-66,937,843),49013=>array(69,-59,937,843),49014=>array(69,-60,937,843),49015=>array(69,-69,937,843),49016=>array(57,-69,907,842),49017=>array(69,-61,908,842),49018=>array(69,-61,908,842),49019=>array(69,-71,931,842),49020=>array(57,-46,908,842),49021=>array(69,-68,912,842),49022=>array(69,-76,908,842),49023=>array(69,-44,921,842),49024=>array(69,-62,917,842),49025=>array(69,-64,908,842),49026=>array(69,-64,908,842),49027=>array(69,-64,908,842),49028=>array(69,-69,923,842),49029=>array(69,-64,908,842),49030=>array(69,-64,908,842),49031=>array(69,-76,908,842),49032=>array(69,-62,908,842),49033=>array(69,-61,908,842),49034=>array(69,-69,922,842),49035=>array(69,-74,929,842),49036=>array(69,-69,927,842),49037=>array(69,-68,911,842),49038=>array(69,-72,929,842),49039=>array(69,-70,936,842),49040=>array(69,-66,908,842),49041=>array(69,-59,916,842),49042=>array(69,-60,928,842),49043=>array(69,-68,908,842),49044=>array(58,-69,907,842),49045=>array(64,-61,907,841),49046=>array(64,-61,907,841),49047=>array(64,-71,931,841),49048=>array(64,-46,907,842),49049=>array(64,-68,912,841),49050=>array(64,-76,907,841),49051=>array(64,-44,921,841),49052=>array(64,-62,917,841),49053=>array(64,-64,907,841),49054=>array(64,-64,908,841),49055=>array(64,-64,908,841),49056=>array(64,-69,923,841),49057=>array(64,-64,908,841),49058=>array(64,-64,908,841),49059=>array(64,-76,907,841),49060=>array(64,-62,907,841),49061=>array(64,-61,907,841),49062=>array(64,-69,922,841),49063=>array(64,-74,929,841),49064=>array(64,-69,927,841),49065=>array(64,-68,911,841),49066=>array(64,-72,929,841),49067=>array(64,-70,936,841),49068=>array(64,-66,908,841),49069=>array(64,-59,916,841),49070=>array(64,-60,928,841),49071=>array(64,-68,908,841),49072=>array(60,-13,940,803),49073=>array(79,-61,921,806),49074=>array(79,-61,921,806),49075=>array(79,-71,921,806),49076=>array(79,-46,921,806),49077=>array(79,-68,921,806),49078=>array(79,-74,921,806),49079=>array(79,-44,921,806),49080=>array(79,-62,921,806),49081=>array(79,-64,921,806),49082=>array(79,-64,921,806),49083=>array(79,-63,921,806),49084=>array(79,-68,921,806),49085=>array(79,-64,921,806),49086=>array(79,-63,921,806),49087=>array(79,-74,921,806),49088=>array(79,-62,921,806),49089=>array(79,-61,921,806),49090=>array(79,-69,921,806),49091=>array(79,-74,921,806),49092=>array(79,-69,921,806),49093=>array(79,-68,921,806),49094=>array(79,-72,921,806),49095=>array(79,-70,921,806),49096=>array(79,-66,921,806),49097=>array(79,-59,921,806),49098=>array(79,-60,921,806),49099=>array(79,-68,921,806),49100=>array(79,-64,921,806),49101=>array(79,-61,921,806),49102=>array(79,-61,921,806),49103=>array(79,-71,921,806),49104=>array(79,-46,921,806),49105=>array(79,-68,921,806),49106=>array(79,-74,921,806),49107=>array(79,-44,921,806),49108=>array(79,-62,921,806),49109=>array(79,-64,921,806),49110=>array(79,-64,921,806),49111=>array(79,-63,921,806),49112=>array(79,-68,921,806),49113=>array(79,-64,921,806),49114=>array(79,-63,921,806),49115=>array(79,-74,921,806),49116=>array(79,-62,921,806),49117=>array(79,-61,921,806),49118=>array(79,-69,921,806),49119=>array(79,-74,921,806),49120=>array(79,-69,921,806),49121=>array(79,-68,921,806),49122=>array(79,-72,921,806),49123=>array(79,-70,921,806),49124=>array(79,-66,921,806),49125=>array(79,-59,921,806),49126=>array(79,-60,921,806),49127=>array(79,-68,921,806),49128=>array(72,-70,907,841),49129=>array(67,-61,907,841),49130=>array(67,-61,907,841),49131=>array(67,-71,931,841),49132=>array(65,-46,907,841),49133=>array(67,-68,912,841),49134=>array(67,-76,907,841),49135=>array(67,-44,921,841),49136=>array(67,-62,917,841),49137=>array(67,-64,907,841),49138=>array(67,-64,908,841),49139=>array(67,-64,908,841),49140=>array(67,-69,923,841),49141=>array(67,-64,908,841),49142=>array(67,-64,908,841),49143=>array(67,-76,906,841),49144=>array(67,-62,907,841),49145=>array(67,-61,907,841),49146=>array(67,-69,922,841),49147=>array(67,-74,929,841),49148=>array(67,-69,927,841),49149=>array(67,-68,911,841),49150=>array(67,-72,929,841),49151=>array(67,-70,936,841),49152=>array(67,-66,908,841),49153=>array(67,-59,916,841),49154=>array(67,-60,928,841),49155=>array(67,-68,908,841),49156=>array(51,-68,907,843),49157=>array(67,-61,907,843),49158=>array(67,-61,907,843),49159=>array(67,-71,931,843),49160=>array(68,-46,907,842),49161=>array(67,-68,912,843),49162=>array(67,-76,907,843),49163=>array(67,-44,921,843),49164=>array(67,-62,917,843),49165=>array(67,-64,907,843),49166=>array(67,-64,908,843),49167=>array(67,-64,908,843),49168=>array(67,-69,923,843),49169=>array(67,-64,908,843),49170=>array(67,-64,908,843),49171=>array(67,-76,907,843),49172=>array(67,-62,907,843),49173=>array(67,-61,907,843),49174=>array(67,-69,922,843),49175=>array(67,-74,929,843),49176=>array(67,-69,927,843),49177=>array(67,-68,911,843),49178=>array(67,-72,929,843),49179=>array(67,-70,936,843),49180=>array(67,-66,908,843),49181=>array(67,-59,916,843),49182=>array(67,-60,928,843),49183=>array(67,-68,908,843),49184=>array(64,-69,907,842),49185=>array(65,-61,907,843),49186=>array(65,-61,907,843),49187=>array(65,-71,931,843),49188=>array(66,-46,907,842),49189=>array(65,-68,912,843),49190=>array(65,-76,907,843),49191=>array(65,-44,921,843),49192=>array(65,-62,917,843),49193=>array(65,-64,907,843),49194=>array(65,-64,908,843),49195=>array(65,-64,908,843),49196=>array(65,-69,923,843),49197=>array(65,-64,908,843),49198=>array(65,-64,908,843),49199=>array(65,-76,907,843),49200=>array(65,-62,907,843),49201=>array(65,-61,907,843),49202=>array(65,-69,922,843),49203=>array(65,-74,929,843),49204=>array(65,-69,927,843),49205=>array(65,-68,911,843),49206=>array(65,-72,929,843),49207=>array(65,-70,936,843),49208=>array(65,-66,908,843),49209=>array(65,-59,916,843),49210=>array(65,-60,928,843),49211=>array(65,-68,908,843),49212=>array(79,-64,921,806),49213=>array(79,-61,921,806),49214=>array(79,-61,921,806),49215=>array(79,-71,921,806),49216=>array(81,-46,922,806),49217=>array(79,-68,921,806),49218=>array(79,-74,921,806),49219=>array(79,-44,921,806),49220=>array(79,-62,921,806),49221=>array(79,-64,921,806),49222=>array(79,-64,921,806),49223=>array(79,-63,921,806),49224=>array(79,-68,921,806),49225=>array(79,-64,921,806),49226=>array(79,-63,921,806),49227=>array(79,-74,921,806),49228=>array(79,-62,921,806),49229=>array(79,-61,921,806),49230=>array(79,-69,921,806),49231=>array(79,-74,921,806),49232=>array(79,-69,921,806),49233=>array(79,-68,921,806),49234=>array(79,-72,921,806),49235=>array(79,-70,921,806),49236=>array(79,-66,921,806),49237=>array(79,-59,921,806),49238=>array(79,-60,921,806),49239=>array(79,-68,921,806),49240=>array(57,22,943,746),49241=>array(79,-61,922,811),49242=>array(79,-61,922,811),49243=>array(79,-71,922,811),49244=>array(79,-46,921,806),49245=>array(79,-68,922,811),49246=>array(79,-74,922,811),49247=>array(79,-44,922,811),49248=>array(79,-62,922,811),49249=>array(79,-64,922,811),49250=>array(79,-64,922,811),49251=>array(79,-63,922,811),49252=>array(79,-68,922,811),49253=>array(79,-64,922,811),49254=>array(79,-63,922,811),49255=>array(79,-74,922,811),49256=>array(79,-62,922,811),49257=>array(79,-61,922,811),49258=>array(79,-69,922,811),49259=>array(79,-74,922,811),49260=>array(79,-69,922,811),49261=>array(79,-68,922,811),49262=>array(79,-72,922,811),49263=>array(79,-70,922,811),49264=>array(79,-66,922,811),49265=>array(79,-59,922,811),49266=>array(79,-60,922,811),49267=>array(79,-68,922,811),49268=>array(68,-69,907,842),49269=>array(74,-61,907,841),49270=>array(74,-61,907,841),49271=>array(74,-71,931,841),49272=>array(65,-46,907,842),49273=>array(74,-68,912,841),49274=>array(74,-76,907,841),49275=>array(74,-44,921,841),49276=>array(74,-62,917,841),49277=>array(74,-64,907,841),49278=>array(74,-64,908,841),49279=>array(74,-64,908,841),49280=>array(74,-69,923,841),49281=>array(74,-64,908,841),49282=>array(74,-64,908,841),49283=>array(74,-76,907,841),49284=>array(74,-62,907,841),49285=>array(74,-61,907,841),49286=>array(74,-69,922,841),49287=>array(74,-74,929,841),49288=>array(74,-69,927,841),49289=>array(74,-68,911,841),49290=>array(74,-72,929,841),49291=>array(74,-70,936,841),49292=>array(74,-66,908,841),49293=>array(74,-59,916,841),49294=>array(74,-60,928,841),49295=>array(74,-68,908,841),49296=>array(110,-69,907,842),49297=>array(120,-61,907,842),49298=>array(120,-61,907,842),49299=>array(120,-71,931,842),49300=>array(130,-46,907,842),49301=>array(120,-68,912,842),49302=>array(120,-76,907,842),49303=>array(120,-44,921,842),49304=>array(120,-62,917,842),49305=>array(120,-64,907,842),49306=>array(120,-64,908,842),49307=>array(120,-64,908,842),49308=>array(120,-69,923,842),49309=>array(120,-64,908,842),49310=>array(120,-64,908,842),49311=>array(120,-76,907,842),49312=>array(120,-62,907,842),49313=>array(120,-61,907,842),49314=>array(120,-69,922,842),49315=>array(120,-74,929,842),49316=>array(120,-69,927,842),49317=>array(120,-68,911,842),49318=>array(120,-72,929,842),49319=>array(120,-70,936,842),49320=>array(120,-66,908,842),49321=>array(120,-59,916,842),49322=>array(120,-60,928,842),49323=>array(120,-68,908,842),49324=>array(48,-69,936,842),49325=>array(81,-59,935,842),49326=>array(81,-61,935,842),49327=>array(81,-71,935,842),49328=>array(58,-45,935,841),49329=>array(81,-69,935,842),49330=>array(81,-76,935,842),49331=>array(81,-44,935,842),49332=>array(81,-62,935,842),49333=>array(81,-64,935,842),49334=>array(81,-64,935,842),49335=>array(81,-64,935,842),49336=>array(81,-70,935,842),49337=>array(81,-64,935,842),49338=>array(81,-64,935,842),49339=>array(81,-76,935,842),49340=>array(81,-62,935,842),49341=>array(81,-61,935,842),49342=>array(81,-70,935,842),49343=>array(81,-74,935,842),49344=>array(81,-69,935,842),49345=>array(81,-67,935,842),49346=>array(81,-72,935,842),49347=>array(81,-71,935,842),49348=>array(81,-66,935,842),49349=>array(81,-59,935,842),49350=>array(81,-60,935,842),49351=>array(81,-69,935,842),49352=>array(43,-69,907,842),49353=>array(75,-61,907,842),49354=>array(75,-61,907,842),49355=>array(75,-71,931,842),49356=>array(62,-46,908,842),49357=>array(75,-68,912,842),49358=>array(75,-76,907,842),49359=>array(75,-44,921,842),49360=>array(75,-62,917,842),49361=>array(75,-64,907,842),49362=>array(75,-64,908,842),49363=>array(75,-64,908,842),49364=>array(75,-69,923,842),49365=>array(75,-64,908,842),49366=>array(75,-64,908,842),49367=>array(75,-76,906,842),49368=>array(75,-62,907,842),49369=>array(75,-61,907,842),49370=>array(75,-69,922,842),49371=>array(75,-74,929,842),49372=>array(75,-69,927,842),49373=>array(75,-68,911,842),49374=>array(75,-72,929,842),49375=>array(75,-70,936,842),49376=>array(75,-66,908,842),49377=>array(75,-59,916,842),49378=>array(75,-60,928,842),49379=>array(75,-68,908,842),49380=>array(48,-68,935,843),49381=>array(81,-59,936,842),49382=>array(81,-61,936,842),49383=>array(81,-71,936,842),49384=>array(62,-45,936,842),49385=>array(81,-69,936,842),49386=>array(81,-76,936,842),49387=>array(81,-44,936,842),49388=>array(81,-62,936,842),49389=>array(81,-64,936,842),49390=>array(81,-64,936,842),49391=>array(81,-64,936,842),49392=>array(81,-70,936,842),49393=>array(81,-64,936,842),49394=>array(81,-64,936,842),49395=>array(81,-76,936,842),49396=>array(81,-62,936,842),49397=>array(81,-61,936,842),49398=>array(81,-70,936,842),49399=>array(81,-74,936,842),49400=>array(81,-69,936,842),49401=>array(81,-67,936,842),49402=>array(81,-72,936,842),49403=>array(81,-71,936,842),49404=>array(81,-66,936,842),49405=>array(81,-59,936,842),49406=>array(81,-60,936,842),49407=>array(81,-69,936,842),49408=>array(43,-69,907,842),49409=>array(75,-61,907,842),49410=>array(75,-61,907,842),49411=>array(75,-71,931,842),49412=>array(62,-46,908,842),49413=>array(75,-68,912,842),49414=>array(75,-76,907,842),49415=>array(75,-44,921,842),49416=>array(75,-62,917,842),49417=>array(75,-64,907,842),49418=>array(75,-64,908,842),49419=>array(75,-64,908,842),49420=>array(75,-69,923,842),49421=>array(75,-64,908,842),49422=>array(75,-64,908,842),49423=>array(75,-76,906,842),49424=>array(75,-62,907,842),49425=>array(75,-61,907,842),49426=>array(75,-69,922,842),49427=>array(75,-74,929,842),49428=>array(75,-69,927,842),49429=>array(75,-68,911,842),49430=>array(75,-72,929,842),49431=>array(75,-70,936,842),49432=>array(75,-66,908,842),49433=>array(75,-59,916,842),49434=>array(75,-60,928,842),49435=>array(75,-68,908,842),49436=>array(59,-70,907,841),49437=>array(81,-61,907,841),49438=>array(81,-61,907,841),49439=>array(81,-71,931,841),49440=>array(62,-46,907,841),49441=>array(81,-68,912,841),49442=>array(81,-76,907,841),49443=>array(81,-44,921,841),49444=>array(81,-62,917,841),49445=>array(81,-64,907,841),49446=>array(81,-64,908,841),49447=>array(81,-64,908,841),49448=>array(81,-69,923,841),49449=>array(81,-64,908,841),49450=>array(81,-64,908,841),49451=>array(81,-76,906,841),49452=>array(81,-62,907,841),49453=>array(81,-61,907,841),49454=>array(81,-69,922,841),49455=>array(81,-74,929,841),49456=>array(81,-69,927,841),49457=>array(81,-68,911,841),49458=>array(81,-72,929,841),49459=>array(81,-70,936,841),49460=>array(81,-66,908,841),49461=>array(81,-59,916,841),49462=>array(81,-60,928,841),49463=>array(81,-68,908,841),49464=>array(46,-68,907,843),49465=>array(75,-61,907,843),49466=>array(75,-61,907,843),49467=>array(75,-71,931,843),49468=>array(58,-46,908,842),49469=>array(75,-68,912,843),49470=>array(75,-76,907,843),49471=>array(75,-44,921,843),49472=>array(75,-62,917,843),49473=>array(75,-64,907,843),49474=>array(75,-64,908,843),49475=>array(75,-64,908,843),49476=>array(75,-69,923,843),49477=>array(75,-64,908,843),49478=>array(75,-64,908,843),49479=>array(75,-76,906,843),49480=>array(75,-62,907,843),49481=>array(75,-61,907,843),49482=>array(75,-69,922,843),49483=>array(75,-74,929,843),49484=>array(75,-69,927,843),49485=>array(75,-68,911,843),49486=>array(75,-72,929,843),49487=>array(75,-70,936,843),49488=>array(75,-66,908,843),49489=>array(75,-59,916,843),49490=>array(75,-60,928,843),49491=>array(75,-68,908,843),49492=>array(46,-70,907,842),49493=>array(81,-61,908,842),49494=>array(81,-61,908,842),49495=>array(81,-71,931,842),49496=>array(58,-46,907,841),49497=>array(81,-68,912,842),49498=>array(81,-76,908,842),49499=>array(81,-44,921,842),49500=>array(81,-62,917,842),49501=>array(81,-64,908,842),49502=>array(81,-64,908,842),49503=>array(81,-64,908,842),49504=>array(81,-69,923,842),49505=>array(81,-64,908,842),49506=>array(81,-64,908,842),49507=>array(81,-76,908,842),49508=>array(81,-62,908,842),49509=>array(81,-61,908,842),49510=>array(81,-69,922,842),49511=>array(81,-74,929,842),49512=>array(81,-69,927,842),49513=>array(81,-68,911,842),49514=>array(81,-72,929,842),49515=>array(81,-70,936,842),49516=>array(81,-66,908,842),49517=>array(81,-59,916,842),49518=>array(81,-60,928,842),49519=>array(81,-68,908,842),49520=>array(46,-68,907,843),49521=>array(45,-61,907,842),49522=>array(45,-61,907,842),49523=>array(45,-71,931,842),49524=>array(47,-46,907,842),49525=>array(45,-68,912,842),49526=>array(45,-76,907,842),49527=>array(45,-44,921,842),49528=>array(45,-62,917,842),49529=>array(45,-64,907,842),49530=>array(45,-64,908,842),49531=>array(45,-64,908,842),49532=>array(45,-69,923,842),49533=>array(45,-64,908,842),49534=>array(45,-64,908,842),49535=>array(45,-76,907,842),49536=>array(45,-62,907,842),49537=>array(45,-61,907,842),49538=>array(45,-69,922,842),49539=>array(45,-74,929,842),49540=>array(45,-69,927,842),49541=>array(45,-68,911,842),49542=>array(45,-72,929,842),49543=>array(45,-70,936,842),49544=>array(45,-66,908,842),49545=>array(45,-59,916,842),49546=>array(45,-60,928,842),49547=>array(45,-68,908,842),49548=>array(62,7,943,771),49549=>array(79,-61,921,822),49550=>array(79,-61,921,822),49551=>array(79,-71,921,822),49552=>array(79,-46,921,822),49553=>array(79,-68,921,822),49554=>array(79,-74,921,822),49555=>array(79,-44,921,822),49556=>array(79,-62,921,822),49557=>array(79,-64,921,822),49558=>array(79,-64,921,822),49559=>array(79,-63,921,822),49560=>array(79,-68,921,822),49561=>array(79,-64,921,822),49562=>array(79,-63,921,822),49563=>array(79,-74,921,822),49564=>array(79,-62,921,822),49565=>array(79,-61,921,822),49566=>array(79,-69,921,822),49567=>array(79,-74,921,822),49568=>array(79,-69,921,822),49569=>array(79,-68,921,822),49570=>array(79,-72,921,822),49571=>array(79,-70,921,822),49572=>array(79,-66,921,822),49573=>array(79,-59,921,822),49574=>array(79,-60,921,822),49575=>array(79,-68,921,822),49576=>array(60,-69,937,842),49577=>array(77,-59,936,842),49578=>array(77,-61,936,842),49579=>array(77,-71,936,842),49580=>array(72,-45,937,842),49581=>array(77,-69,936,842),49582=>array(77,-76,936,842),49583=>array(77,-44,936,842),49584=>array(77,-62,936,842),49585=>array(77,-64,936,842),49586=>array(77,-64,936,842),49587=>array(77,-64,936,842),49588=>array(77,-70,936,842),49589=>array(77,-64,936,842),49590=>array(77,-64,936,842),49591=>array(77,-76,936,842),49592=>array(77,-62,936,842),49593=>array(77,-61,936,842),49594=>array(77,-70,936,842),49595=>array(77,-74,936,842),49596=>array(77,-69,936,842),49597=>array(77,-67,936,842),49598=>array(77,-72,936,842),49599=>array(77,-71,936,842),49600=>array(77,-66,936,842),49601=>array(77,-59,936,842),49602=>array(77,-60,936,842),49603=>array(77,-69,936,842),49604=>array(54,-69,907,842),49605=>array(67,-61,907,842),49606=>array(67,-61,907,842),49607=>array(67,-71,931,842),49608=>array(57,-46,908,842),49609=>array(67,-68,912,842),49610=>array(67,-76,907,842),49611=>array(67,-44,921,842),49612=>array(67,-62,917,842),49613=>array(67,-64,907,842),49614=>array(67,-64,908,842),49615=>array(67,-64,908,842),49616=>array(67,-69,923,842),49617=>array(67,-64,908,842),49618=>array(67,-64,908,842),49619=>array(67,-76,907,842),49620=>array(67,-62,907,842),49621=>array(67,-61,907,842),49622=>array(67,-69,922,842),49623=>array(67,-74,929,842),49624=>array(67,-69,927,842),49625=>array(67,-68,911,842),49626=>array(67,-72,929,842),49627=>array(67,-70,936,842),49628=>array(67,-66,908,842),49629=>array(67,-59,916,842),49630=>array(67,-60,928,842),49631=>array(67,-68,908,842),49632=>array(52,-69,907,842),49633=>array(65,-61,908,842),49634=>array(65,-61,908,842),49635=>array(65,-71,931,842),49636=>array(64,-46,907,842),49637=>array(65,-68,912,842),49638=>array(65,-76,908,842),49639=>array(65,-44,921,842),49640=>array(65,-62,917,842),49641=>array(65,-64,908,842),49642=>array(65,-64,908,842),49643=>array(65,-64,908,842),49644=>array(65,-69,923,842),49645=>array(65,-64,908,842),49646=>array(65,-64,908,842),49647=>array(65,-76,908,842),49648=>array(65,-62,908,842),49649=>array(65,-61,908,842),49650=>array(65,-69,922,842),49651=>array(65,-74,929,842),49652=>array(65,-69,927,842),49653=>array(65,-68,911,842),49654=>array(65,-72,929,842),49655=>array(65,-70,936,842),49656=>array(65,-66,908,842),49657=>array(65,-59,916,842),49658=>array(65,-60,928,842),49659=>array(65,-68,908,842),49660=>array(62,7,938,771),49661=>array(79,-61,922,822),49662=>array(79,-61,922,822),49663=>array(79,-71,922,822),49664=>array(79,-46,922,822),49665=>array(79,-68,922,822),49666=>array(79,-74,922,822),49667=>array(79,-44,922,822),49668=>array(79,-62,922,822),49669=>array(79,-64,922,822),49670=>array(79,-64,922,822),49671=>array(79,-63,922,822),49672=>array(79,-68,922,822),49673=>array(79,-64,922,822),49674=>array(79,-63,922,822),49675=>array(79,-74,922,822),49676=>array(79,-62,922,822),49677=>array(79,-61,922,822),49678=>array(79,-69,922,822),49679=>array(79,-74,922,822),49680=>array(79,-69,922,822),49681=>array(79,-68,922,822),49682=>array(79,-72,922,822),49683=>array(79,-70,922,822),49684=>array(79,-66,922,822),49685=>array(79,-59,922,822),49686=>array(79,-60,922,822),49687=>array(79,-68,922,822),49688=>array(79,-64,921,831),49689=>array(79,-61,921,822),49690=>array(79,-61,921,822),49691=>array(79,-71,921,822),49692=>array(79,-46,921,822),49693=>array(79,-68,921,822),49694=>array(79,-74,921,822),49695=>array(79,-44,921,822),49696=>array(79,-62,921,822),49697=>array(79,-64,921,822),49698=>array(79,-64,921,822),49699=>array(79,-63,921,822),49700=>array(79,-68,921,822),49701=>array(79,-64,921,822),49702=>array(79,-63,921,822),49703=>array(79,-74,921,822),49704=>array(79,-62,921,822),49705=>array(79,-61,921,822),49706=>array(79,-69,921,822),49707=>array(79,-74,921,822),49708=>array(79,-69,921,822),49709=>array(79,-68,921,822),49710=>array(79,-72,921,822),49711=>array(79,-70,921,822),49712=>array(79,-66,921,822),49713=>array(79,-59,921,822),49714=>array(79,-60,921,822),49715=>array(79,-68,921,822),49716=>array(69,-70,907,841),49717=>array(73,-61,907,841),49718=>array(73,-61,907,841),49719=>array(73,-71,931,841),49720=>array(76,-46,907,841),49721=>array(73,-68,912,841),49722=>array(73,-76,907,841),49723=>array(73,-44,921,841),49724=>array(73,-62,917,841),49725=>array(73,-64,907,841),49726=>array(73,-64,908,841),49727=>array(73,-64,908,841),49728=>array(73,-69,923,841),49729=>array(73,-64,908,841),49730=>array(73,-64,908,841),49731=>array(73,-76,906,841),49732=>array(73,-62,907,841),49733=>array(73,-61,907,841),49734=>array(73,-69,922,841),49735=>array(73,-74,929,841),49736=>array(73,-69,927,841),49737=>array(73,-68,911,841),49738=>array(73,-72,929,841),49739=>array(73,-70,936,841),49740=>array(73,-66,908,841),49741=>array(73,-59,916,841),49742=>array(73,-60,928,841),49743=>array(73,-68,908,841),49744=>array(63,-68,907,843),49745=>array(70,-61,907,843),49746=>array(70,-61,907,843),49747=>array(70,-71,931,843),49748=>array(62,-46,907,843),49749=>array(70,-68,912,843),49750=>array(70,-76,907,843),49751=>array(70,-44,921,843),49752=>array(70,-62,917,843),49753=>array(70,-64,907,843),49754=>array(70,-64,908,843),49755=>array(70,-64,908,843),49756=>array(70,-69,923,843),49757=>array(70,-64,908,843),49758=>array(70,-64,908,843),49759=>array(70,-76,907,843),49760=>array(70,-62,907,843),49761=>array(70,-61,907,843),49762=>array(70,-69,922,843),49763=>array(70,-74,929,843),49764=>array(70,-69,927,843),49765=>array(70,-68,911,843),49766=>array(70,-72,929,843),49767=>array(70,-70,936,843),49768=>array(70,-66,908,843),49769=>array(70,-59,916,843),49770=>array(70,-60,928,843),49771=>array(70,-68,908,843),49772=>array(63,-69,907,842),49773=>array(65,-61,907,840),49774=>array(65,-61,907,840),49775=>array(65,-71,931,840),49776=>array(65,-46,907,843),49777=>array(65,-68,912,840),49778=>array(65,-76,907,840),49779=>array(65,-44,921,840),49780=>array(65,-62,917,840),49781=>array(65,-64,907,840),49782=>array(65,-64,908,840),49783=>array(65,-64,908,840),49784=>array(65,-69,923,840),49785=>array(65,-64,908,840),49786=>array(65,-64,908,840),49787=>array(65,-76,907,840),49788=>array(65,-62,907,840),49789=>array(65,-61,907,840),49790=>array(65,-69,922,840),49791=>array(65,-74,929,840),49792=>array(65,-69,927,840),49793=>array(65,-68,911,840),49794=>array(65,-72,929,840),49795=>array(65,-70,936,840),49796=>array(65,-66,908,840),49797=>array(65,-59,916,840),49798=>array(65,-60,928,840),49799=>array(65,-68,908,840),49800=>array(87,-64,928,831),49801=>array(79,-61,921,822),49802=>array(79,-61,921,822),49803=>array(79,-71,921,822),49804=>array(81,-46,922,822),49805=>array(79,-68,921,822),49806=>array(79,-74,921,822),49807=>array(79,-44,921,822),49808=>array(79,-62,921,822),49809=>array(79,-64,921,822),49810=>array(79,-64,921,822),49811=>array(79,-63,921,822),49812=>array(79,-68,921,822),49813=>array(79,-64,921,822),49814=>array(79,-63,921,822),49815=>array(79,-74,921,822),49816=>array(79,-62,921,822),49817=>array(79,-61,921,822),49818=>array(79,-69,921,822),49819=>array(79,-74,921,822),49820=>array(79,-69,921,822),49821=>array(79,-68,921,822),49822=>array(79,-72,921,822),49823=>array(79,-70,921,822),49824=>array(79,-66,921,822),49825=>array(79,-59,921,822),49826=>array(79,-60,921,822),49827=>array(79,-68,921,822),49828=>array(57,52,943,741),49829=>array(79,-61,922,802),49830=>array(79,-61,922,802),49831=>array(79,-71,922,802),49832=>array(79,-46,922,802),49833=>array(79,-68,922,802),49834=>array(79,-74,922,802),49835=>array(79,-44,922,802),49836=>array(79,-62,922,802),49837=>array(79,-64,922,802),49838=>array(79,-64,922,802),49839=>array(79,-63,922,802),49840=>array(79,-68,922,802),49841=>array(79,-64,922,802),49842=>array(79,-63,922,802),49843=>array(79,-74,922,802),49844=>array(79,-62,922,802),49845=>array(79,-61,922,802),49846=>array(79,-69,922,802),49847=>array(79,-74,922,802),49848=>array(79,-69,922,802),49849=>array(79,-68,922,802),49850=>array(79,-72,922,802),49851=>array(79,-70,922,802),49852=>array(79,-66,922,802),49853=>array(79,-59,922,802),49854=>array(79,-60,922,802),49855=>array(79,-68,922,802),49856=>array(78,-69,907,842),49857=>array(65,-61,907,842),49858=>array(65,-61,907,842),49859=>array(65,-71,931,842),49860=>array(65,-46,907,842),49861=>array(65,-68,912,842),49862=>array(65,-76,907,842),49863=>array(65,-44,921,842),49864=>array(65,-62,917,842),49865=>array(65,-64,907,842),49866=>array(65,-64,908,842),49867=>array(65,-64,908,842),49868=>array(65,-69,923,842),49869=>array(65,-64,908,842),49870=>array(65,-64,908,842),49871=>array(65,-76,907,842),49872=>array(65,-62,907,842),49873=>array(65,-61,907,842),49874=>array(65,-69,922,842),49875=>array(65,-74,929,842),49876=>array(65,-69,927,842),49877=>array(65,-68,911,842),49878=>array(65,-72,929,842),49879=>array(65,-70,936,842),49880=>array(65,-66,908,842),49881=>array(65,-59,916,842),49882=>array(65,-60,928,842),49883=>array(65,-68,908,842),49884=>array(90,-69,907,842),49885=>array(106,-61,907,842),49886=>array(106,-61,907,842),49887=>array(106,-71,931,842),49888=>array(104,-46,907,842),49889=>array(106,-68,912,842),49890=>array(106,-76,907,842),49891=>array(106,-44,921,842),49892=>array(106,-62,917,842),49893=>array(106,-64,907,842),49894=>array(106,-64,908,842),49895=>array(106,-64,908,842),49896=>array(106,-69,923,842),49897=>array(106,-64,908,842),49898=>array(106,-64,908,842),49899=>array(106,-76,907,842),49900=>array(106,-62,907,842),49901=>array(106,-61,907,842),49902=>array(106,-69,922,842),49903=>array(106,-74,929,842),49904=>array(106,-69,927,842),49905=>array(106,-68,911,842),49906=>array(106,-72,929,842),49907=>array(106,-70,936,842),49908=>array(106,-66,908,842),49909=>array(106,-59,916,842),49910=>array(106,-60,928,842),49911=>array(106,-68,908,842),49912=>array(20,-69,937,842),49913=>array(62,-59,936,842),49914=>array(62,-61,936,842),49915=>array(62,-71,936,842),49916=>array(72,-45,936,842),49917=>array(62,-69,936,842),49918=>array(62,-76,936,842),49919=>array(62,-44,936,842),49920=>array(62,-62,936,842),49921=>array(62,-64,936,842),49922=>array(62,-64,936,842),49923=>array(62,-64,936,842),49924=>array(62,-70,936,842),49925=>array(62,-64,936,842),49926=>array(62,-64,936,842),49927=>array(62,-76,936,842),49928=>array(62,-62,936,842),49929=>array(62,-61,936,842),49930=>array(62,-70,936,842),49931=>array(62,-74,936,842),49932=>array(62,-69,936,842),49933=>array(62,-67,936,842),49934=>array(62,-72,936,842),49935=>array(62,-71,936,842),49936=>array(62,-66,936,842),49937=>array(62,-59,936,842),49938=>array(62,-60,936,842),49939=>array(62,-69,936,842),49940=>array(21,-69,907,842),49941=>array(55,-61,907,842),49942=>array(55,-61,907,842),49943=>array(55,-71,931,842),49944=>array(52,-46,907,842),49945=>array(55,-68,912,842),49946=>array(55,-76,907,842),49947=>array(55,-44,921,842),49948=>array(55,-62,917,842),49949=>array(55,-64,907,842),49950=>array(55,-64,908,842),49951=>array(55,-64,908,842),49952=>array(55,-69,923,842),49953=>array(55,-64,908,842),49954=>array(55,-64,908,842),49955=>array(55,-76,907,842),49956=>array(55,-62,907,842),49957=>array(55,-61,907,842),49958=>array(55,-69,922,842),49959=>array(55,-74,929,842),49960=>array(55,-69,927,842),49961=>array(55,-68,911,842),49962=>array(55,-72,929,842),49963=>array(55,-70,936,842),49964=>array(55,-66,908,842),49965=>array(55,-59,916,842),49966=>array(55,-60,928,842),49967=>array(55,-68,908,842),49968=>array(20,-68,935,843),49969=>array(62,-59,936,842),49970=>array(62,-61,936,842),49971=>array(62,-71,936,842),49972=>array(72,-45,936,842),49973=>array(62,-69,936,842),49974=>array(62,-76,936,842),49975=>array(62,-44,936,842),49976=>array(62,-62,936,842),49977=>array(62,-64,936,842),49978=>array(62,-64,936,842),49979=>array(62,-64,936,842),49980=>array(62,-70,936,842),49981=>array(62,-64,936,842),49982=>array(62,-64,936,842),49983=>array(62,-76,936,842),49984=>array(62,-62,936,842),49985=>array(62,-61,936,842),49986=>array(62,-70,936,842),49987=>array(62,-74,936,842),49988=>array(62,-69,936,842),49989=>array(62,-67,936,842),49990=>array(62,-72,936,842),49991=>array(62,-71,936,842),49992=>array(62,-66,936,842),49993=>array(62,-59,936,842),49994=>array(62,-60,936,842),49995=>array(62,-69,936,842),49996=>array(21,-69,907,842),49997=>array(60,-61,907,842),49998=>array(60,-61,907,842),49999=>array(60,-71,931,842),50000=>array(52,-46,907,842),50001=>array(60,-68,912,842),50002=>array(60,-76,907,842),50003=>array(60,-44,921,842),50004=>array(60,-62,917,842),50005=>array(60,-64,907,842),50006=>array(60,-64,908,842),50007=>array(60,-64,908,842),50008=>array(60,-69,923,842),50009=>array(60,-64,908,842),50010=>array(60,-64,908,842),50011=>array(60,-76,907,842),50012=>array(60,-62,907,842),50013=>array(60,-61,907,842),50014=>array(60,-69,922,842),50015=>array(60,-74,929,842),50016=>array(60,-69,927,842),50017=>array(60,-68,911,842),50018=>array(60,-72,929,842),50019=>array(60,-70,936,842),50020=>array(60,-66,908,842),50021=>array(60,-59,916,842),50022=>array(60,-60,928,842),50023=>array(60,-68,908,842),50024=>array(20,-70,907,841),50025=>array(72,-61,907,841),50026=>array(72,-61,907,841),50027=>array(72,-71,931,841),50028=>array(72,-46,907,841),50029=>array(72,-68,912,841),50030=>array(72,-76,907,841),50031=>array(72,-44,921,841),50032=>array(72,-62,917,841),50033=>array(72,-64,907,841),50034=>array(72,-64,908,841),50035=>array(72,-64,908,841),50036=>array(72,-69,923,841),50037=>array(72,-64,908,841),50038=>array(72,-64,908,841),50039=>array(72,-76,906,841),50040=>array(72,-62,907,841),50041=>array(72,-61,907,841),50042=>array(72,-69,922,841),50043=>array(72,-74,929,841),50044=>array(72,-69,927,841),50045=>array(72,-68,911,841),50046=>array(72,-72,929,841),50047=>array(72,-70,936,841),50048=>array(72,-66,908,841),50049=>array(72,-59,916,841),50050=>array(72,-60,928,841),50051=>array(72,-68,908,841),50052=>array(20,-68,907,843),50053=>array(50,-61,907,843),50054=>array(50,-61,907,843),50055=>array(50,-71,931,843),50056=>array(52,-46,907,843),50057=>array(50,-68,912,843),50058=>array(50,-76,907,843),50059=>array(50,-44,921,843),50060=>array(50,-62,917,843),50061=>array(50,-64,907,843),50062=>array(50,-64,908,843),50063=>array(50,-64,908,843),50064=>array(50,-69,923,843),50065=>array(50,-64,908,843),50066=>array(50,-64,908,843),50067=>array(50,-76,907,843),50068=>array(50,-62,907,843),50069=>array(50,-61,907,843),50070=>array(50,-69,922,843),50071=>array(50,-74,929,843),50072=>array(50,-69,927,843),50073=>array(50,-68,911,843),50074=>array(50,-72,929,843),50075=>array(50,-70,936,843),50076=>array(50,-66,908,843),50077=>array(50,-59,916,843),50078=>array(50,-60,928,843),50079=>array(50,-68,908,843),50080=>array(20,-70,907,842),50081=>array(52,-61,908,842),50082=>array(52,-61,908,842),50083=>array(52,-71,931,842),50084=>array(52,-46,907,842),50085=>array(52,-68,912,842),50086=>array(52,-76,908,842),50087=>array(52,-44,921,842),50088=>array(52,-62,917,842),50089=>array(52,-64,908,842),50090=>array(52,-64,908,842),50091=>array(52,-64,908,842),50092=>array(52,-69,923,842),50093=>array(52,-64,908,842),50094=>array(52,-64,908,842),50095=>array(52,-76,908,842),50096=>array(52,-62,908,842),50097=>array(52,-61,908,842),50098=>array(52,-69,922,842),50099=>array(52,-74,929,842),50100=>array(52,-69,927,842),50101=>array(52,-68,911,842),50102=>array(52,-72,929,842),50103=>array(52,-70,936,842),50104=>array(52,-66,908,842),50105=>array(52,-59,916,842),50106=>array(52,-60,928,842),50107=>array(52,-68,908,842),50108=>array(20,-68,907,843),50109=>array(50,-61,907,843),50110=>array(50,-61,907,843),50111=>array(50,-71,931,843),50112=>array(40,-46,907,843),50113=>array(50,-68,912,843),50114=>array(50,-76,907,843),50115=>array(50,-44,921,843),50116=>array(50,-62,917,843),50117=>array(50,-64,907,843),50118=>array(50,-64,908,843),50119=>array(50,-64,908,843),50120=>array(50,-69,923,843),50121=>array(50,-64,908,843),50122=>array(50,-64,908,843),50123=>array(50,-76,907,843),50124=>array(50,-62,907,843),50125=>array(50,-61,907,843),50126=>array(50,-69,922,843),50127=>array(50,-74,929,843),50128=>array(50,-69,927,843),50129=>array(50,-68,911,843),50130=>array(50,-72,929,843),50131=>array(50,-70,936,843),50132=>array(50,-66,908,843),50133=>array(50,-59,916,843),50134=>array(50,-60,928,843),50135=>array(50,-68,908,843),50136=>array(62,12,943,774),50137=>array(79,-61,921,788),50138=>array(79,-61,921,788),50139=>array(79,-71,921,788),50140=>array(79,-46,922,788),50141=>array(79,-68,921,788),50142=>array(79,-74,921,788),50143=>array(79,-44,921,788),50144=>array(79,-62,921,788),50145=>array(79,-64,921,788),50146=>array(79,-64,921,788),50147=>array(79,-63,921,788),50148=>array(79,-68,921,788),50149=>array(79,-64,921,788),50150=>array(79,-63,921,788),50151=>array(79,-74,921,788),50152=>array(79,-62,921,788),50153=>array(79,-61,921,788),50154=>array(79,-69,921,788),50155=>array(79,-74,921,788),50156=>array(79,-69,921,788),50157=>array(79,-68,921,788),50158=>array(79,-72,921,788),50159=>array(79,-70,921,788),50160=>array(79,-66,921,788),50161=>array(79,-59,921,788),50162=>array(79,-60,921,788),50163=>array(79,-68,921,788),50164=>array(41,-68,936,843),50165=>array(55,-59,936,842),50166=>array(55,-61,936,842),50167=>array(55,-71,936,842),50168=>array(64,-45,936,842),50169=>array(55,-69,936,842),50170=>array(55,-76,936,842),50171=>array(55,-44,936,842),50172=>array(55,-62,936,842),50173=>array(55,-64,936,842),50174=>array(55,-64,936,842),50175=>array(55,-64,936,842),50176=>array(55,-70,936,842),50177=>array(55,-64,936,842),50178=>array(55,-64,936,842),50179=>array(55,-76,936,842),50180=>array(55,-62,936,842),50181=>array(55,-61,936,842),50182=>array(55,-70,936,842),50183=>array(55,-74,936,842),50184=>array(55,-69,936,842),50185=>array(55,-67,936,842),50186=>array(55,-72,936,842),50187=>array(55,-71,936,842),50188=>array(55,-66,936,842),50189=>array(55,-59,936,842),50190=>array(55,-60,936,842),50191=>array(55,-69,936,842),50192=>array(38,-69,907,842),50193=>array(63,-61,907,842),50194=>array(63,-61,907,842),50195=>array(63,-71,931,842),50196=>array(48,-46,907,842),50197=>array(63,-68,912,842),50198=>array(63,-76,907,842),50199=>array(63,-44,921,842),50200=>array(63,-62,917,842),50201=>array(63,-64,907,842),50202=>array(63,-64,908,842),50203=>array(63,-64,908,842),50204=>array(63,-69,923,842),50205=>array(63,-64,908,842),50206=>array(63,-64,908,842),50207=>array(63,-76,907,842),50208=>array(63,-62,907,842),50209=>array(63,-61,907,842),50210=>array(63,-69,922,842),50211=>array(63,-74,929,842),50212=>array(63,-69,927,842),50213=>array(63,-68,911,842),50214=>array(63,-72,929,842),50215=>array(63,-70,936,842),50216=>array(63,-66,908,842),50217=>array(63,-59,916,842),50218=>array(63,-60,928,842),50219=>array(63,-68,908,842),50220=>array(68,-69,907,842),50221=>array(65,-61,907,842),50222=>array(65,-61,907,842),50223=>array(65,-71,931,842),50224=>array(65,-46,907,842),50225=>array(65,-68,912,842),50226=>array(65,-76,907,842),50227=>array(65,-44,921,842),50228=>array(65,-62,917,842),50229=>array(65,-64,907,842),50230=>array(65,-64,908,842),50231=>array(65,-64,908,842),50232=>array(65,-69,923,842),50233=>array(65,-64,908,842),50234=>array(65,-64,908,842),50235=>array(65,-76,907,842),50236=>array(65,-62,907,842),50237=>array(65,-61,907,842),50238=>array(65,-69,922,842),50239=>array(65,-74,929,842),50240=>array(65,-69,927,842),50241=>array(65,-68,911,842),50242=>array(65,-72,929,842),50243=>array(65,-70,936,842),50244=>array(65,-66,908,842),50245=>array(65,-59,916,842),50246=>array(65,-60,928,842),50247=>array(65,-68,908,842),50248=>array(62,12,943,774),50249=>array(79,-61,922,788),50250=>array(79,-61,922,788),50251=>array(79,-71,922,788),50252=>array(79,-46,922,788),50253=>array(79,-68,922,788),50254=>array(79,-74,922,788),50255=>array(79,-44,922,788),50256=>array(79,-62,922,788),50257=>array(79,-64,922,788),50258=>array(79,-64,922,788),50259=>array(79,-63,922,788),50260=>array(79,-68,922,788),50261=>array(79,-64,922,788),50262=>array(79,-63,922,788),50263=>array(79,-74,922,788),50264=>array(79,-62,922,788),50265=>array(79,-61,922,788),50266=>array(79,-69,922,788),50267=>array(79,-74,922,788),50268=>array(79,-69,922,788),50269=>array(79,-68,922,788),50270=>array(79,-72,922,788),50271=>array(79,-70,922,788),50272=>array(79,-66,922,788),50273=>array(79,-59,922,788),50274=>array(79,-60,922,788),50275=>array(79,-68,922,788),50276=>array(82,-64,924,822),50277=>array(79,-61,921,788),50278=>array(79,-61,921,788),50279=>array(79,-71,921,788),50280=>array(79,-46,921,788),50281=>array(79,-68,921,788),50282=>array(79,-74,921,788),50283=>array(79,-44,921,788),50284=>array(79,-62,921,788),50285=>array(79,-64,921,788),50286=>array(79,-64,921,788),50287=>array(79,-63,921,788),50288=>array(79,-68,921,788),50289=>array(79,-64,921,788),50290=>array(79,-63,921,788),50291=>array(79,-74,921,788),50292=>array(79,-62,921,788),50293=>array(79,-61,921,788),50294=>array(79,-69,921,788),50295=>array(79,-74,921,788),50296=>array(79,-69,921,788),50297=>array(79,-68,921,788),50298=>array(79,-72,921,788),50299=>array(79,-70,921,788),50300=>array(79,-66,921,788),50301=>array(79,-59,921,788),50302=>array(79,-60,921,788),50303=>array(79,-68,921,788),50304=>array(81,-70,907,841),50305=>array(74,-61,908,841),50306=>array(74,-61,908,841),50307=>array(74,-71,931,841),50308=>array(66,-46,908,842),50309=>array(74,-68,912,841),50310=>array(74,-76,908,841),50311=>array(74,-44,921,841),50312=>array(74,-62,917,841),50313=>array(74,-64,908,841),50314=>array(74,-64,908,841),50315=>array(74,-64,908,841),50316=>array(74,-69,923,841),50317=>array(74,-64,908,841),50318=>array(74,-64,908,841),50319=>array(74,-76,908,841),50320=>array(74,-62,908,841),50321=>array(74,-61,908,841),50322=>array(74,-69,922,841),50323=>array(74,-74,929,841),50324=>array(74,-69,927,841),50325=>array(74,-68,911,841),50326=>array(74,-72,929,841),50327=>array(74,-70,936,841),50328=>array(74,-66,908,841),50329=>array(74,-59,916,841),50330=>array(74,-60,928,841),50331=>array(74,-68,908,841),50332=>array(51,-68,907,843),50333=>array(64,-61,907,843),50334=>array(64,-61,907,843),50335=>array(64,-71,931,843),50336=>array(64,-46,907,843),50337=>array(64,-68,912,843),50338=>array(64,-76,907,843),50339=>array(64,-44,921,843),50340=>array(64,-62,917,843),50341=>array(64,-64,907,843),50342=>array(64,-64,908,843),50343=>array(64,-64,908,843),50344=>array(64,-69,923,843),50345=>array(64,-64,908,843),50346=>array(64,-64,908,843),50347=>array(64,-76,907,843),50348=>array(64,-62,907,843),50349=>array(64,-61,907,843),50350=>array(64,-69,922,843),50351=>array(64,-74,929,843),50352=>array(64,-69,927,843),50353=>array(64,-68,911,843),50354=>array(64,-72,929,843),50355=>array(64,-70,936,843),50356=>array(64,-66,908,843),50357=>array(64,-59,916,843),50358=>array(64,-60,928,843),50359=>array(64,-68,908,843),50360=>array(60,-69,907,842),50361=>array(65,-61,907,842),50362=>array(65,-61,907,842),50363=>array(65,-71,931,842),50364=>array(65,-46,907,842),50365=>array(65,-68,912,842),50366=>array(65,-76,907,842),50367=>array(65,-44,921,842),50368=>array(65,-62,917,842),50369=>array(65,-64,907,842),50370=>array(65,-64,908,842),50371=>array(65,-64,908,842),50372=>array(65,-69,923,842),50373=>array(65,-64,908,842),50374=>array(65,-64,908,842),50375=>array(65,-76,907,842),50376=>array(65,-62,907,842),50377=>array(65,-61,907,842),50378=>array(65,-69,922,842),50379=>array(65,-74,929,842),50380=>array(65,-69,927,842),50381=>array(65,-68,911,842),50382=>array(65,-72,929,842),50383=>array(65,-70,936,842),50384=>array(65,-66,908,842),50385=>array(65,-59,916,842),50386=>array(65,-60,928,842),50387=>array(65,-68,908,842),50388=>array(82,-64,924,822),50389=>array(79,-61,921,788),50390=>array(79,-61,921,788),50391=>array(79,-71,921,788),50392=>array(81,-46,922,788),50393=>array(79,-68,921,788),50394=>array(79,-74,921,788),50395=>array(79,-44,921,788),50396=>array(79,-62,921,788),50397=>array(79,-64,921,788),50398=>array(79,-64,921,788),50399=>array(79,-63,921,788),50400=>array(79,-68,921,788),50401=>array(79,-64,921,788),50402=>array(79,-63,921,788),50403=>array(79,-74,921,788),50404=>array(79,-62,921,788),50405=>array(79,-61,921,788),50406=>array(79,-69,921,788),50407=>array(79,-74,921,788),50408=>array(79,-69,921,788),50409=>array(79,-68,921,788),50410=>array(79,-72,921,788),50411=>array(79,-70,921,788),50412=>array(79,-66,921,788),50413=>array(79,-59,921,788),50414=>array(79,-60,921,788),50415=>array(79,-68,921,788),50416=>array(57,22,943,720),50417=>array(79,-61,922,794),50418=>array(79,-61,922,794),50419=>array(79,-71,922,794),50420=>array(79,-46,921,794),50421=>array(79,-68,922,794),50422=>array(79,-74,922,794),50423=>array(79,-44,922,794),50424=>array(79,-62,922,794),50425=>array(79,-64,922,794),50426=>array(79,-64,922,794),50427=>array(79,-63,922,794),50428=>array(79,-68,922,794),50429=>array(79,-64,922,794),50430=>array(79,-63,922,794),50431=>array(79,-74,922,794),50432=>array(79,-62,922,794),50433=>array(79,-61,922,794),50434=>array(79,-69,922,794),50435=>array(79,-74,922,794),50436=>array(79,-69,922,794),50437=>array(79,-68,922,794),50438=>array(79,-72,922,794),50439=>array(79,-70,922,794),50440=>array(79,-66,922,794),50441=>array(79,-59,922,794),50442=>array(79,-60,922,794),50443=>array(79,-68,922,794),50444=>array(67,-69,907,842),50445=>array(75,-61,907,842),50446=>array(75,-61,907,842),50447=>array(75,-71,931,842),50448=>array(65,-46,907,842),50449=>array(75,-68,912,842),50450=>array(75,-76,907,842),50451=>array(75,-44,921,842),50452=>array(75,-62,917,842),50453=>array(75,-64,907,842),50454=>array(75,-64,908,842),50455=>array(75,-64,908,842),50456=>array(75,-69,923,842),50457=>array(75,-64,908,842),50458=>array(75,-64,908,842),50459=>array(75,-76,907,842),50460=>array(75,-62,907,842),50461=>array(75,-61,907,842),50462=>array(75,-69,922,842),50463=>array(75,-74,929,842),50464=>array(75,-69,927,842),50465=>array(75,-68,911,842),50466=>array(75,-72,929,842),50467=>array(75,-70,936,842),50468=>array(75,-66,908,842),50469=>array(75,-59,916,842),50470=>array(75,-60,928,842),50471=>array(75,-68,908,842),50472=>array(48,-69,907,842),50473=>array(68,-61,907,842),50474=>array(68,-61,907,842),50475=>array(68,-71,931,842),50476=>array(68,-46,907,842),50477=>array(68,-68,912,842),50478=>array(68,-76,907,842),50479=>array(68,-44,921,842),50480=>array(68,-62,917,842),50481=>array(68,-64,907,842),50482=>array(68,-64,908,842),50483=>array(68,-64,908,842),50484=>array(68,-69,923,842),50485=>array(68,-64,908,842),50486=>array(68,-64,908,842),50487=>array(68,-76,907,842),50488=>array(68,-62,907,842),50489=>array(68,-61,907,842),50490=>array(68,-69,922,842),50491=>array(68,-74,929,842),50492=>array(68,-69,927,842),50493=>array(68,-68,911,842),50494=>array(68,-72,929,842),50495=>array(68,-70,936,842),50496=>array(68,-66,908,842),50497=>array(68,-59,916,842),50498=>array(68,-60,928,842),50499=>array(68,-68,908,842),50500=>array(108,-69,936,842),50501=>array(113,-59,936,842),50502=>array(113,-61,936,842),50503=>array(113,-71,936,842),50504=>array(100,-45,936,842),50505=>array(113,-69,936,842),50506=>array(113,-76,936,842),50507=>array(113,-44,936,842),50508=>array(113,-62,936,842),50509=>array(113,-64,936,842),50510=>array(113,-64,936,842),50511=>array(113,-64,936,842),50512=>array(113,-70,936,842),50513=>array(113,-64,936,842),50514=>array(113,-64,936,842),50515=>array(113,-76,936,842),50516=>array(113,-62,936,842),50517=>array(113,-61,936,842),50518=>array(113,-70,936,842),50519=>array(113,-74,936,842),50520=>array(113,-69,936,842),50521=>array(113,-67,936,842),50522=>array(113,-72,936,842),50523=>array(113,-71,936,842),50524=>array(113,-66,936,842),50525=>array(113,-59,936,842),50526=>array(113,-60,936,842),50527=>array(113,-69,936,842),50528=>array(105,-69,907,842),50529=>array(93,-61,907,842),50530=>array(93,-61,907,842),50531=>array(93,-71,931,842),50532=>array(80,-46,907,842),50533=>array(93,-68,912,842),50534=>array(93,-76,907,842),50535=>array(93,-44,921,842),50536=>array(93,-62,917,842),50537=>array(93,-64,907,842),50538=>array(93,-64,908,842),50539=>array(93,-64,908,842),50540=>array(93,-69,923,842),50541=>array(93,-64,908,842),50542=>array(93,-64,908,842),50543=>array(93,-76,907,842),50544=>array(93,-62,907,842),50545=>array(93,-61,907,842),50546=>array(93,-69,922,842),50547=>array(93,-74,929,842),50548=>array(93,-69,927,842),50549=>array(93,-68,911,842),50550=>array(93,-72,929,842),50551=>array(93,-70,936,842),50552=>array(93,-66,908,842),50553=>array(93,-59,916,842),50554=>array(93,-60,928,842),50555=>array(93,-68,908,842),50556=>array(123,-68,935,843),50557=>array(113,-59,936,842),50558=>array(113,-61,936,842),50559=>array(113,-71,936,842),50560=>array(100,-45,936,842),50561=>array(113,-69,936,842),50562=>array(113,-76,936,842),50563=>array(113,-44,936,842),50564=>array(113,-62,936,842),50565=>array(113,-64,936,842),50566=>array(113,-64,936,842),50567=>array(113,-64,936,842),50568=>array(113,-70,936,842),50569=>array(113,-64,936,842),50570=>array(113,-64,936,842),50571=>array(113,-76,936,842),50572=>array(113,-62,936,842),50573=>array(113,-61,936,842),50574=>array(113,-70,936,842),50575=>array(113,-74,936,842),50576=>array(113,-69,936,842),50577=>array(113,-67,936,842),50578=>array(113,-72,936,842),50579=>array(113,-71,936,842),50580=>array(113,-66,936,842),50581=>array(113,-59,936,842),50582=>array(113,-60,936,842),50583=>array(113,-69,936,842),50584=>array(105,-69,907,842),50585=>array(93,-61,907,842),50586=>array(93,-61,907,842),50587=>array(93,-71,931,842),50588=>array(85,-46,907,842),50589=>array(93,-68,912,842),50590=>array(93,-76,907,842),50591=>array(93,-44,921,842),50592=>array(93,-62,917,842),50593=>array(93,-64,907,842),50594=>array(93,-64,908,842),50595=>array(93,-64,908,842),50596=>array(93,-69,923,842),50597=>array(93,-64,908,842),50598=>array(93,-64,908,842),50599=>array(93,-76,907,842),50600=>array(93,-62,907,842),50601=>array(93,-61,907,842),50602=>array(93,-69,922,842),50603=>array(93,-74,929,842),50604=>array(93,-69,927,842),50605=>array(93,-68,911,842),50606=>array(93,-72,929,842),50607=>array(93,-70,936,842),50608=>array(93,-66,908,842),50609=>array(93,-59,916,842),50610=>array(93,-60,928,842),50611=>array(93,-68,908,842),50612=>array(93,-70,907,841),50613=>array(88,-61,907,841),50614=>array(88,-61,907,841),50615=>array(88,-71,931,841),50616=>array(85,-46,907,841),50617=>array(88,-68,912,841),50618=>array(88,-76,907,841),50619=>array(88,-44,921,841),50620=>array(88,-62,917,841),50621=>array(88,-64,907,841),50622=>array(88,-64,908,841),50623=>array(88,-64,908,841),50624=>array(88,-69,923,841),50625=>array(88,-64,908,841),50626=>array(88,-64,908,841),50627=>array(88,-76,906,841),50628=>array(88,-62,907,841),50629=>array(88,-61,907,841),50630=>array(88,-69,922,841),50631=>array(88,-74,929,841),50632=>array(88,-69,927,841),50633=>array(88,-68,911,841),50634=>array(88,-72,929,841),50635=>array(88,-70,936,841),50636=>array(88,-66,908,841),50637=>array(88,-59,916,841),50638=>array(88,-60,928,841),50639=>array(88,-68,908,841),50640=>array(85,-68,907,843),50641=>array(75,-61,907,843),50642=>array(75,-61,907,843),50643=>array(75,-71,931,843),50644=>array(76,-46,907,843),50645=>array(75,-68,912,843),50646=>array(75,-76,907,843),50647=>array(75,-44,921,843),50648=>array(75,-62,917,843),50649=>array(75,-64,907,843),50650=>array(75,-64,908,843),50651=>array(75,-64,908,843),50652=>array(75,-69,923,843),50653=>array(75,-64,908,843),50654=>array(75,-64,908,843),50655=>array(75,-76,907,843),50656=>array(75,-62,907,843),50657=>array(75,-61,907,843),50658=>array(75,-69,922,843),50659=>array(75,-74,929,843),50660=>array(75,-69,927,843),50661=>array(75,-68,911,843),50662=>array(75,-72,929,843),50663=>array(75,-70,936,843),50664=>array(75,-66,908,843),50665=>array(75,-59,916,843),50666=>array(75,-60,928,843),50667=>array(75,-68,908,843),50668=>array(93,-70,907,842),50669=>array(88,-61,908,842),50670=>array(88,-61,908,842),50671=>array(88,-71,931,842),50672=>array(85,-46,907,842),50673=>array(88,-68,912,842),50674=>array(88,-76,908,842),50675=>array(88,-44,921,842),50676=>array(88,-62,917,842),50677=>array(88,-64,908,842),50678=>array(88,-64,908,842),50679=>array(88,-64,908,842),50680=>array(88,-69,923,842),50681=>array(88,-64,908,842),50682=>array(88,-64,908,842),50683=>array(88,-76,908,842),50684=>array(88,-62,908,842),50685=>array(88,-61,908,842),50686=>array(88,-69,922,842),50687=>array(88,-74,929,842),50688=>array(88,-69,927,842),50689=>array(88,-68,911,842),50690=>array(88,-72,929,842),50691=>array(88,-70,936,842),50692=>array(88,-66,908,842),50693=>array(88,-59,916,842),50694=>array(88,-60,928,842),50695=>array(88,-68,908,842),50696=>array(85,-68,907,843),50697=>array(75,-61,907,843),50698=>array(75,-61,907,843),50699=>array(75,-71,931,843),50700=>array(76,-46,907,843),50701=>array(75,-68,912,843),50702=>array(75,-76,907,843),50703=>array(75,-44,921,843),50704=>array(75,-62,917,843),50705=>array(75,-64,907,843),50706=>array(75,-64,908,843),50707=>array(75,-64,908,843),50708=>array(75,-69,923,843),50709=>array(75,-64,908,843),50710=>array(75,-64,908,843),50711=>array(75,-76,907,843),50712=>array(75,-62,907,843),50713=>array(75,-61,907,843),50714=>array(75,-69,922,843),50715=>array(75,-74,929,843),50716=>array(75,-69,927,843),50717=>array(75,-68,911,843),50718=>array(75,-72,929,843),50719=>array(75,-70,936,843),50720=>array(75,-66,908,843),50721=>array(75,-59,916,843),50722=>array(75,-60,928,843),50723=>array(75,-68,908,843),50724=>array(62,4,938,763),50725=>array(79,-61,921,808),50726=>array(79,-61,921,808),50727=>array(79,-71,921,808),50728=>array(79,-46,922,803),50729=>array(79,-68,921,808),50730=>array(79,-74,921,808),50731=>array(79,-44,921,808),50732=>array(79,-62,921,808),50733=>array(79,-64,921,808),50734=>array(79,-64,921,808),50735=>array(79,-63,921,808),50736=>array(79,-68,921,808),50737=>array(79,-64,921,808),50738=>array(79,-63,921,808),50739=>array(79,-74,921,808),50740=>array(79,-62,921,808),50741=>array(79,-61,921,808),50742=>array(79,-69,921,808),50743=>array(79,-74,921,808),50744=>array(79,-69,921,808),50745=>array(79,-68,921,808),50746=>array(79,-72,921,808),50747=>array(79,-70,921,808),50748=>array(79,-66,921,808),50749=>array(79,-59,921,808),50750=>array(79,-60,921,808),50751=>array(79,-68,921,808),50752=>array(52,-69,936,842),50753=>array(77,-59,936,842),50754=>array(77,-61,936,842),50755=>array(77,-71,936,842),50756=>array(72,-45,936,842),50757=>array(77,-69,936,842),50758=>array(77,-76,936,842),50759=>array(77,-44,936,842),50760=>array(77,-62,936,842),50761=>array(77,-64,936,842),50762=>array(77,-64,936,842),50763=>array(77,-64,936,842),50764=>array(77,-70,936,842),50765=>array(77,-64,936,842),50766=>array(77,-64,936,842),50767=>array(77,-76,936,842),50768=>array(77,-62,936,842),50769=>array(77,-61,936,842),50770=>array(77,-70,936,842),50771=>array(77,-74,936,842),50772=>array(77,-69,936,842),50773=>array(77,-67,936,842),50774=>array(77,-72,936,842),50775=>array(77,-71,936,842),50776=>array(77,-66,936,842),50777=>array(77,-59,936,842),50778=>array(77,-60,936,842),50779=>array(77,-69,936,842),50780=>array(61,-69,907,842),50781=>array(62,-61,907,842),50782=>array(62,-61,907,842),50783=>array(62,-71,931,842),50784=>array(62,-46,907,842),50785=>array(62,-68,912,842),50786=>array(62,-76,907,842),50787=>array(62,-44,921,842),50788=>array(62,-62,917,842),50789=>array(62,-64,907,842),50790=>array(62,-64,908,842),50791=>array(62,-64,908,842),50792=>array(62,-69,923,842),50793=>array(62,-64,908,842),50794=>array(62,-64,908,842),50795=>array(62,-76,907,842),50796=>array(62,-62,907,842),50797=>array(62,-61,907,842),50798=>array(62,-69,922,842),50799=>array(62,-74,929,842),50800=>array(62,-69,927,842),50801=>array(62,-68,911,842),50802=>array(62,-72,929,842),50803=>array(62,-70,936,842),50804=>array(62,-66,908,842),50805=>array(62,-59,916,842),50806=>array(62,-60,928,842),50807=>array(62,-68,908,842),50808=>array(52,-69,907,842),50809=>array(64,-61,907,842),50810=>array(64,-61,907,842),50811=>array(64,-71,931,842),50812=>array(64,-46,907,842),50813=>array(64,-68,912,842),50814=>array(64,-76,907,842),50815=>array(64,-44,921,842),50816=>array(64,-62,917,842),50817=>array(64,-64,907,842),50818=>array(64,-64,908,842),50819=>array(64,-64,908,842),50820=>array(64,-69,923,842),50821=>array(64,-64,908,842),50822=>array(64,-64,908,842),50823=>array(64,-76,907,842),50824=>array(64,-62,907,842),50825=>array(64,-61,907,842),50826=>array(64,-69,922,842),50827=>array(64,-74,929,842),50828=>array(64,-69,927,842),50829=>array(64,-68,911,842),50830=>array(64,-72,929,842),50831=>array(64,-70,936,842),50832=>array(64,-66,908,842),50833=>array(64,-59,916,842),50834=>array(64,-60,928,842),50835=>array(64,-68,908,842),50836=>array(62,4,938,763),50837=>array(79,-61,922,808),50838=>array(79,-61,922,808),50839=>array(79,-71,922,808),50840=>array(79,-46,922,793),50841=>array(79,-68,922,808),50842=>array(79,-74,922,808),50843=>array(79,-44,922,808),50844=>array(79,-62,922,808),50845=>array(79,-64,922,808),50846=>array(79,-64,922,808),50847=>array(79,-63,922,808),50848=>array(79,-68,922,808),50849=>array(79,-64,922,808),50850=>array(79,-63,922,808),50851=>array(79,-74,922,808),50852=>array(79,-62,922,808),50853=>array(79,-61,922,808),50854=>array(79,-69,922,808),50855=>array(79,-74,922,808),50856=>array(79,-69,922,808),50857=>array(79,-68,922,808),50858=>array(79,-72,922,808),50859=>array(79,-70,922,808),50860=>array(79,-66,922,808),50861=>array(79,-59,922,808),50862=>array(79,-60,922,808),50863=>array(79,-68,922,808),50864=>array(79,-64,921,793),50865=>array(79,-61,921,808),50866=>array(79,-61,921,808),50867=>array(79,-71,921,808),50868=>array(79,-46,921,793),50869=>array(79,-68,921,808),50870=>array(79,-74,921,808),50871=>array(79,-44,921,808),50872=>array(79,-62,921,808),50873=>array(79,-64,921,808),50874=>array(79,-64,921,808),50875=>array(79,-63,921,808),50876=>array(79,-68,921,808),50877=>array(79,-64,921,808),50878=>array(79,-63,921,808),50879=>array(79,-74,921,808),50880=>array(79,-62,921,808),50881=>array(79,-61,921,808),50882=>array(79,-69,921,808),50883=>array(79,-74,921,808),50884=>array(79,-69,921,808),50885=>array(79,-68,921,808),50886=>array(79,-72,921,808),50887=>array(79,-70,921,808),50888=>array(79,-66,921,808),50889=>array(79,-59,921,808),50890=>array(79,-60,921,808),50891=>array(79,-68,921,808),50892=>array(73,-70,907,841),50893=>array(75,-61,908,841),50894=>array(75,-61,908,841),50895=>array(75,-71,931,841),50896=>array(76,-46,907,841),50897=>array(75,-68,912,841),50898=>array(75,-76,908,841),50899=>array(75,-44,921,841),50900=>array(75,-62,917,841),50901=>array(75,-64,908,841),50902=>array(75,-64,908,841),50903=>array(75,-64,908,841),50904=>array(75,-69,923,841),50905=>array(75,-64,908,841),50906=>array(75,-64,908,841),50907=>array(75,-76,908,841),50908=>array(75,-62,908,841),50909=>array(75,-61,908,841),50910=>array(75,-69,922,841),50911=>array(75,-74,929,841),50912=>array(75,-69,927,841),50913=>array(75,-68,911,841),50914=>array(75,-72,929,841),50915=>array(75,-70,936,841),50916=>array(75,-66,908,841),50917=>array(75,-59,916,841),50918=>array(75,-60,928,841),50919=>array(75,-68,908,841),50920=>array(53,-68,907,843),50921=>array(70,-61,907,843),50922=>array(70,-61,907,843),50923=>array(70,-71,931,843),50924=>array(61,-46,907,843),50925=>array(70,-68,912,843),50926=>array(70,-76,907,843),50927=>array(70,-44,921,843),50928=>array(70,-62,917,843),50929=>array(70,-64,907,843),50930=>array(70,-64,908,843),50931=>array(70,-64,908,843),50932=>array(70,-69,923,843),50933=>array(70,-64,908,843),50934=>array(70,-64,908,843),50935=>array(70,-76,907,843),50936=>array(70,-62,907,843),50937=>array(70,-61,907,843),50938=>array(70,-69,922,843),50939=>array(70,-74,929,843),50940=>array(70,-69,927,843),50941=>array(70,-68,911,843),50942=>array(70,-72,929,843),50943=>array(70,-70,936,843),50944=>array(70,-66,908,843),50945=>array(70,-59,916,843),50946=>array(70,-60,928,843),50947=>array(70,-68,908,843),50948=>array(70,-69,907,842),50949=>array(65,-61,907,842),50950=>array(65,-61,907,842),50951=>array(65,-71,931,842),50952=>array(63,-46,907,842),50953=>array(65,-68,912,842),50954=>array(65,-76,907,842),50955=>array(65,-44,921,842),50956=>array(65,-62,917,842),50957=>array(65,-64,907,842),50958=>array(65,-64,908,842),50959=>array(65,-64,908,842),50960=>array(65,-69,923,842),50961=>array(65,-64,908,842),50962=>array(65,-64,908,842),50963=>array(65,-76,907,842),50964=>array(65,-62,907,842),50965=>array(65,-61,907,842),50966=>array(65,-69,922,842),50967=>array(65,-74,929,842),50968=>array(65,-69,927,842),50969=>array(65,-68,911,842),50970=>array(65,-72,929,842),50971=>array(65,-70,936,842),50972=>array(65,-66,908,842),50973=>array(65,-59,916,842),50974=>array(65,-60,928,842),50975=>array(65,-68,908,842),50976=>array(71,-64,928,793),50977=>array(79,-61,921,808),50978=>array(79,-61,921,808),50979=>array(79,-71,921,808),50980=>array(79,-46,921,793),50981=>array(79,-68,921,808),50982=>array(79,-74,921,808),50983=>array(79,-44,921,808),50984=>array(79,-62,921,808),50985=>array(79,-64,921,808),50986=>array(79,-64,921,808),50987=>array(79,-63,921,808),50988=>array(79,-68,921,808),50989=>array(79,-64,921,808),50990=>array(79,-63,921,808),50991=>array(79,-74,921,808),50992=>array(79,-62,921,808),50993=>array(79,-61,921,808),50994=>array(79,-69,921,808),50995=>array(79,-74,921,808),50996=>array(79,-69,921,808),50997=>array(79,-68,921,808),50998=>array(79,-72,921,808),50999=>array(79,-70,921,808),51000=>array(79,-66,921,808),51001=>array(79,-59,921,808),51002=>array(79,-60,921,808),51003=>array(79,-68,921,808),51004=>array(57,42,943,733),51005=>array(79,-61,921,808),51006=>array(79,-61,921,808),51007=>array(79,-71,921,808),51008=>array(79,-46,921,793),51009=>array(79,-68,921,808),51010=>array(79,-74,921,808),51011=>array(79,-44,921,808),51012=>array(79,-62,921,808),51013=>array(79,-64,921,808),51014=>array(79,-64,921,808),51015=>array(79,-63,921,808),51016=>array(79,-68,921,808),51017=>array(79,-64,921,808),51018=>array(79,-63,921,808),51019=>array(79,-74,921,808),51020=>array(79,-62,921,808),51021=>array(79,-61,921,808),51022=>array(79,-69,921,808),51023=>array(79,-74,921,808),51024=>array(79,-69,921,808),51025=>array(79,-68,921,808),51026=>array(79,-72,921,808),51027=>array(79,-70,921,808),51028=>array(79,-66,921,808),51029=>array(79,-59,921,808),51030=>array(79,-60,921,808),51031=>array(79,-68,921,808),51032=>array(67,-69,907,842),51033=>array(75,-61,907,842),51034=>array(75,-61,907,842),51035=>array(75,-71,931,842),51036=>array(66,-46,907,842),51037=>array(75,-68,912,842),51038=>array(75,-76,907,842),51039=>array(75,-44,921,842),51040=>array(75,-62,917,842),51041=>array(75,-64,907,842),51042=>array(75,-64,908,842),51043=>array(75,-64,908,842),51044=>array(75,-69,923,842),51045=>array(75,-64,908,842),51046=>array(75,-64,908,842),51047=>array(75,-76,907,842),51048=>array(75,-62,907,842),51049=>array(75,-61,907,842),51050=>array(75,-69,922,842),51051=>array(75,-74,929,842),51052=>array(75,-69,927,842),51053=>array(75,-68,911,842),51054=>array(75,-72,929,842),51055=>array(75,-70,936,842),51056=>array(75,-66,908,842),51057=>array(75,-59,916,842),51058=>array(75,-60,928,842),51059=>array(75,-68,908,842),51060=>array(134,-69,906,842),51061=>array(119,-61,907,842),51062=>array(119,-61,907,842),51063=>array(119,-71,931,842),51064=>array(108,-46,907,842),51065=>array(119,-68,912,842),51066=>array(119,-76,907,842),51067=>array(119,-44,921,842),51068=>array(119,-62,917,842),51069=>array(119,-64,907,842),51070=>array(119,-64,908,842),51071=>array(119,-64,908,842),51072=>array(119,-69,923,842),51073=>array(119,-64,908,842),51074=>array(119,-64,908,842),51075=>array(119,-76,907,842),51076=>array(119,-62,907,842),51077=>array(119,-61,907,842),51078=>array(119,-69,922,842),51079=>array(119,-74,929,842),51080=>array(119,-69,927,842),51081=>array(119,-68,911,842),51082=>array(119,-72,929,842),51083=>array(119,-70,936,842),51084=>array(119,-66,908,842),51085=>array(119,-59,916,842),51086=>array(119,-60,928,842),51087=>array(119,-68,908,842),51088=>array(73,-69,936,842),51089=>array(83,-59,936,842),51090=>array(83,-61,936,842),51091=>array(83,-71,936,842),51092=>array(71,-45,936,842),51093=>array(83,-69,936,842),51094=>array(83,-76,936,842),51095=>array(83,-44,936,842),51096=>array(83,-62,936,842),51097=>array(83,-64,936,842),51098=>array(83,-64,936,842),51099=>array(83,-64,936,842),51100=>array(83,-70,936,842),51101=>array(83,-64,936,842),51102=>array(83,-64,936,842),51103=>array(83,-76,936,842),51104=>array(83,-62,936,842),51105=>array(83,-61,936,842),51106=>array(83,-70,936,842),51107=>array(83,-74,936,842),51108=>array(83,-69,936,842),51109=>array(83,-67,936,842),51110=>array(83,-72,936,842),51111=>array(83,-71,936,842),51112=>array(83,-66,936,842),51113=>array(83,-59,936,842),51114=>array(83,-60,936,842),51115=>array(83,-69,936,842),51116=>array(50,-69,907,842),51117=>array(84,-61,907,842),51118=>array(84,-61,907,842),51119=>array(84,-71,931,842),51120=>array(76,-46,907,842),51121=>array(84,-68,912,842),51122=>array(84,-76,907,842),51123=>array(84,-44,921,842),51124=>array(84,-62,917,842),51125=>array(84,-64,907,842),51126=>array(84,-64,908,842),51127=>array(84,-64,908,842),51128=>array(84,-69,923,842),51129=>array(84,-64,908,842),51130=>array(84,-64,908,842),51131=>array(84,-76,907,842),51132=>array(84,-62,907,842),51133=>array(84,-61,907,842),51134=>array(84,-69,922,842),51135=>array(84,-74,929,842),51136=>array(84,-69,927,842),51137=>array(84,-68,911,842),51138=>array(84,-72,929,842),51139=>array(84,-70,936,842),51140=>array(84,-66,908,842),51141=>array(84,-59,916,842),51142=>array(84,-60,928,842),51143=>array(84,-68,908,842),51144=>array(73,-68,935,843),51145=>array(83,-59,936,842),51146=>array(83,-61,936,842),51147=>array(83,-71,936,842),51148=>array(71,-45,936,842),51149=>array(83,-69,936,842),51150=>array(83,-76,936,842),51151=>array(83,-44,936,842),51152=>array(83,-62,936,842),51153=>array(83,-64,936,842),51154=>array(83,-64,936,842),51155=>array(83,-64,936,842),51156=>array(83,-70,936,842),51157=>array(83,-64,936,842),51158=>array(83,-64,936,842),51159=>array(83,-76,936,842),51160=>array(83,-62,936,842),51161=>array(83,-61,936,842),51162=>array(83,-70,936,842),51163=>array(83,-74,936,842),51164=>array(83,-69,936,842),51165=>array(83,-67,936,842),51166=>array(83,-72,936,842),51167=>array(83,-71,936,842),51168=>array(83,-66,936,842),51169=>array(83,-59,936,842),51170=>array(83,-60,936,842),51171=>array(83,-69,936,842),51172=>array(50,-69,907,842),51173=>array(84,-61,907,842),51174=>array(84,-61,907,842),51175=>array(84,-71,931,842),51176=>array(76,-46,907,842),51177=>array(84,-68,912,842),51178=>array(84,-76,907,842),51179=>array(84,-44,921,842),51180=>array(84,-62,917,842),51181=>array(84,-64,907,842),51182=>array(84,-64,908,842),51183=>array(84,-64,908,842),51184=>array(84,-69,923,842),51185=>array(84,-64,908,842),51186=>array(84,-64,908,842),51187=>array(84,-76,907,842),51188=>array(84,-62,907,842),51189=>array(84,-61,907,842),51190=>array(84,-69,922,842),51191=>array(84,-74,929,842),51192=>array(84,-69,927,842),51193=>array(84,-68,911,842),51194=>array(84,-72,929,842),51195=>array(84,-70,936,842),51196=>array(84,-66,908,842),51197=>array(84,-59,916,842),51198=>array(84,-60,928,842),51199=>array(84,-68,908,842),51200=>array(68,-70,907,841),51201=>array(83,-61,907,841),51202=>array(83,-61,907,841),51203=>array(83,-71,931,841),51204=>array(71,-46,907,841),51205=>array(83,-68,912,841),51206=>array(83,-76,907,841),51207=>array(83,-44,921,841),51208=>array(83,-62,917,841),51209=>array(83,-64,907,841),51210=>array(83,-64,908,841),51211=>array(83,-64,908,841),51212=>array(83,-69,923,841),51213=>array(83,-64,908,841),51214=>array(83,-64,908,841),51215=>array(83,-76,906,841),51216=>array(83,-62,907,841),51217=>array(83,-61,907,841),51218=>array(83,-69,922,841),51219=>array(83,-74,929,841),51220=>array(83,-69,927,841),51221=>array(83,-68,911,841),51222=>array(83,-72,929,841),51223=>array(83,-70,936,841),51224=>array(83,-66,908,841),51225=>array(83,-59,916,841),51226=>array(83,-60,928,841),51227=>array(83,-68,908,841),51228=>array(50,-69,907,842),51229=>array(64,-61,907,843),51230=>array(64,-61,907,843),51231=>array(64,-71,931,843),51232=>array(56,-46,907,843),51233=>array(64,-68,912,843),51234=>array(64,-76,907,843),51235=>array(64,-44,921,843),51236=>array(64,-62,917,843),51237=>array(64,-64,907,843),51238=>array(64,-64,908,843),51239=>array(64,-64,908,843),51240=>array(64,-69,923,843),51241=>array(64,-64,908,843),51242=>array(64,-64,908,843),51243=>array(64,-76,907,843),51244=>array(64,-62,907,843),51245=>array(64,-61,907,843),51246=>array(64,-69,922,843),51247=>array(64,-74,929,843),51248=>array(64,-69,927,843),51249=>array(64,-68,911,843),51250=>array(64,-72,929,843),51251=>array(64,-70,936,843),51252=>array(64,-66,908,843),51253=>array(64,-59,916,843),51254=>array(64,-60,928,843),51255=>array(64,-68,908,843),51256=>array(58,-70,907,842),51257=>array(63,-61,908,842),51258=>array(63,-61,908,842),51259=>array(63,-71,931,842),51260=>array(70,-46,907,842),51261=>array(63,-68,912,842),51262=>array(63,-76,908,842),51263=>array(63,-44,921,842),51264=>array(63,-62,917,842),51265=>array(63,-64,908,842),51266=>array(63,-64,908,842),51267=>array(63,-64,908,842),51268=>array(63,-69,923,842),51269=>array(63,-64,908,842),51270=>array(63,-64,908,842),51271=>array(63,-76,908,842),51272=>array(63,-62,908,842),51273=>array(63,-61,908,842),51274=>array(63,-69,922,842),51275=>array(63,-74,929,842),51276=>array(63,-69,927,842),51277=>array(63,-68,911,842),51278=>array(63,-72,929,842),51279=>array(63,-70,936,842),51280=>array(63,-66,908,842),51281=>array(63,-59,916,842),51282=>array(63,-60,928,842),51283=>array(63,-68,908,842),51284=>array(38,-69,908,842),51285=>array(62,-61,907,843),51286=>array(62,-61,907,843),51287=>array(62,-71,931,843),51288=>array(53,-46,907,843),51289=>array(62,-68,912,843),51290=>array(62,-76,907,843),51291=>array(62,-44,921,843),51292=>array(62,-62,917,843),51293=>array(62,-64,907,843),51294=>array(62,-64,908,843),51295=>array(62,-64,908,843),51296=>array(62,-69,923,843),51297=>array(62,-64,908,843),51298=>array(62,-64,908,843),51299=>array(62,-76,907,843),51300=>array(62,-62,907,843),51301=>array(62,-61,907,843),51302=>array(62,-69,922,843),51303=>array(62,-74,929,843),51304=>array(62,-69,927,843),51305=>array(62,-68,911,843),51306=>array(62,-72,929,843),51307=>array(62,-70,936,843),51308=>array(62,-66,908,843),51309=>array(62,-59,916,843),51310=>array(62,-60,928,843),51311=>array(62,-68,908,843),51312=>array(62,22,943,742),51313=>array(79,-61,921,798),51314=>array(79,-61,921,798),51315=>array(79,-71,921,798),51316=>array(79,-46,921,798),51317=>array(79,-68,921,798),51318=>array(79,-74,921,798),51319=>array(79,-44,921,798),51320=>array(79,-62,921,798),51321=>array(79,-64,921,798),51322=>array(79,-64,921,798),51323=>array(79,-63,921,798),51324=>array(79,-68,921,798),51325=>array(79,-64,921,798),51326=>array(79,-63,921,798),51327=>array(79,-74,921,798),51328=>array(79,-62,921,798),51329=>array(79,-61,921,798),51330=>array(79,-69,921,798),51331=>array(79,-74,921,798),51332=>array(79,-69,921,798),51333=>array(79,-68,921,798),51334=>array(79,-72,921,798),51335=>array(79,-70,921,798),51336=>array(79,-66,921,798),51337=>array(79,-59,921,798),51338=>array(79,-60,921,798),51339=>array(79,-68,921,798),51340=>array(64,-69,936,842),51341=>array(77,-59,936,842),51342=>array(77,-61,936,842),51343=>array(77,-71,936,842),51344=>array(72,-45,936,842),51345=>array(77,-69,936,842),51346=>array(77,-76,936,842),51347=>array(77,-44,936,842),51348=>array(77,-62,936,842),51349=>array(77,-64,936,842),51350=>array(77,-64,936,842),51351=>array(77,-64,936,842),51352=>array(77,-70,936,842),51353=>array(77,-64,936,842),51354=>array(77,-64,936,842),51355=>array(77,-76,936,842),51356=>array(77,-62,936,842),51357=>array(77,-61,936,842),51358=>array(77,-70,936,842),51359=>array(77,-74,936,842),51360=>array(77,-69,936,842),51361=>array(77,-67,936,842),51362=>array(77,-72,936,842),51363=>array(77,-71,936,842),51364=>array(77,-66,936,842),51365=>array(77,-59,936,842),51366=>array(77,-60,936,842),51367=>array(77,-69,936,842),51368=>array(49,-69,907,842),51369=>array(77,-61,907,842),51370=>array(77,-61,907,842),51371=>array(77,-71,931,842),51372=>array(72,-46,907,842),51373=>array(77,-68,912,842),51374=>array(77,-76,907,842),51375=>array(77,-44,921,842),51376=>array(77,-62,917,842),51377=>array(77,-64,907,842),51378=>array(77,-64,908,842),51379=>array(77,-64,908,842),51380=>array(77,-69,923,842),51381=>array(77,-64,908,842),51382=>array(77,-64,908,842),51383=>array(77,-76,907,842),51384=>array(77,-62,907,842),51385=>array(77,-61,907,842),51386=>array(77,-69,922,842),51387=>array(77,-74,929,842),51388=>array(77,-69,927,842),51389=>array(77,-68,911,842),51390=>array(77,-72,929,842),51391=>array(77,-70,936,842),51392=>array(77,-66,908,842),51393=>array(77,-59,916,842),51394=>array(77,-60,928,842),51395=>array(77,-68,908,842),51396=>array(52,-69,907,842),51397=>array(65,-61,907,842),51398=>array(65,-61,907,842),51399=>array(65,-71,931,842),51400=>array(65,-46,907,842),51401=>array(65,-68,912,842),51402=>array(65,-76,907,842),51403=>array(65,-44,921,842),51404=>array(65,-62,917,842),51405=>array(65,-64,907,842),51406=>array(65,-64,908,842),51407=>array(65,-64,908,842),51408=>array(65,-69,923,842),51409=>array(65,-64,908,842),51410=>array(65,-64,908,842),51411=>array(65,-76,907,842),51412=>array(65,-62,907,842),51413=>array(65,-61,907,842),51414=>array(65,-69,922,842),51415=>array(65,-74,929,842),51416=>array(65,-69,927,842),51417=>array(65,-68,911,842),51418=>array(65,-72,929,842),51419=>array(65,-70,936,842),51420=>array(65,-66,908,842),51421=>array(65,-59,916,842),51422=>array(65,-60,928,842),51423=>array(65,-68,908,842),51424=>array(62,22,938,742),51425=>array(79,-61,922,798),51426=>array(79,-61,922,798),51427=>array(79,-71,922,798),51428=>array(79,-46,922,798),51429=>array(79,-68,922,798),51430=>array(79,-74,922,798),51431=>array(79,-44,922,798),51432=>array(79,-62,922,798),51433=>array(79,-64,922,798),51434=>array(79,-64,922,798),51435=>array(79,-63,922,798),51436=>array(79,-68,922,798),51437=>array(79,-64,922,798),51438=>array(79,-63,922,798),51439=>array(79,-74,922,798),51440=>array(79,-62,922,798),51441=>array(79,-61,922,798),51442=>array(79,-69,922,798),51443=>array(79,-74,922,798),51444=>array(79,-69,922,798),51445=>array(79,-68,922,798),51446=>array(79,-72,922,798),51447=>array(79,-70,922,798),51448=>array(79,-66,922,798),51449=>array(79,-59,922,798),51450=>array(79,-60,922,798),51451=>array(79,-68,922,798),51452=>array(79,-64,921,798),51453=>array(79,-61,921,798),51454=>array(79,-61,921,798),51455=>array(79,-71,921,798),51456=>array(79,-46,921,798),51457=>array(79,-68,921,798),51458=>array(79,-74,921,798),51459=>array(79,-44,921,798),51460=>array(79,-62,921,798),51461=>array(79,-64,921,798),51462=>array(79,-64,921,798),51463=>array(79,-63,921,798),51464=>array(79,-68,921,798),51465=>array(79,-64,921,798),51466=>array(79,-63,921,798),51467=>array(79,-74,921,798),51468=>array(79,-62,921,798),51469=>array(79,-61,921,798),51470=>array(79,-69,921,798),51471=>array(79,-74,921,798),51472=>array(79,-69,921,798),51473=>array(79,-68,921,798),51474=>array(79,-72,921,798),51475=>array(79,-70,921,798),51476=>array(79,-66,921,798),51477=>array(79,-59,921,798),51478=>array(79,-60,921,798),51479=>array(79,-68,921,798),51480=>array(70,-70,907,841),51481=>array(73,-61,910,841),51482=>array(73,-61,910,841),51483=>array(73,-71,931,841),51484=>array(76,-46,909,840),51485=>array(73,-68,912,841),51486=>array(73,-76,910,841),51487=>array(73,-44,921,841),51488=>array(73,-62,917,841),51489=>array(73,-64,910,841),51490=>array(73,-64,910,841),51491=>array(73,-64,910,841),51492=>array(73,-69,923,841),51493=>array(73,-64,910,841),51494=>array(73,-64,910,841),51495=>array(73,-76,910,841),51496=>array(73,-62,910,841),51497=>array(73,-61,910,841),51498=>array(73,-69,922,841),51499=>array(73,-74,929,841),51500=>array(73,-69,927,841),51501=>array(73,-68,911,841),51502=>array(73,-72,929,841),51503=>array(73,-70,936,841),51504=>array(73,-66,910,841),51505=>array(73,-59,916,841),51506=>array(73,-60,928,841),51507=>array(73,-68,910,841),51508=>array(63,-68,907,843),51509=>array(70,-61,907,843),51510=>array(70,-61,907,843),51511=>array(70,-71,931,843),51512=>array(76,-46,907,843),51513=>array(70,-68,912,843),51514=>array(70,-76,907,843),51515=>array(70,-44,921,843),51516=>array(70,-62,917,843),51517=>array(70,-64,907,843),51518=>array(70,-64,908,843),51519=>array(70,-64,908,843),51520=>array(70,-69,923,843),51521=>array(70,-64,908,843),51522=>array(70,-64,908,843),51523=>array(70,-76,907,843),51524=>array(70,-62,907,843),51525=>array(70,-61,907,843),51526=>array(70,-69,922,843),51527=>array(70,-74,929,843),51528=>array(70,-69,927,843),51529=>array(70,-68,911,843),51530=>array(70,-72,929,843),51531=>array(70,-70,936,843),51532=>array(70,-66,908,843),51533=>array(70,-59,916,843),51534=>array(70,-60,928,843),51535=>array(70,-68,908,843),51536=>array(70,-69,907,842),51537=>array(76,-61,907,842),51538=>array(76,-61,907,842),51539=>array(76,-71,931,842),51540=>array(74,-46,907,842),51541=>array(76,-68,912,842),51542=>array(76,-76,907,842),51543=>array(76,-44,921,842),51544=>array(76,-62,917,842),51545=>array(76,-64,907,842),51546=>array(76,-64,908,842),51547=>array(76,-64,908,842),51548=>array(76,-69,923,842),51549=>array(76,-64,908,842),51550=>array(76,-64,908,842),51551=>array(76,-76,906,842),51552=>array(76,-62,907,842),51553=>array(76,-61,907,842),51554=>array(76,-69,922,842),51555=>array(76,-74,929,842),51556=>array(76,-69,927,842),51557=>array(76,-68,911,842),51558=>array(76,-72,929,842),51559=>array(76,-70,936,842),51560=>array(76,-66,908,842),51561=>array(76,-59,916,842),51562=>array(76,-60,928,842),51563=>array(76,-68,908,842),51564=>array(87,-64,928,798),51565=>array(79,-61,921,798),51566=>array(79,-61,921,798),51567=>array(79,-71,921,798),51568=>array(81,-46,922,798),51569=>array(79,-68,921,798),51570=>array(79,-74,921,798),51571=>array(79,-44,921,798),51572=>array(79,-62,921,798),51573=>array(79,-64,921,798),51574=>array(79,-64,921,798),51575=>array(79,-63,921,798),51576=>array(79,-68,921,798),51577=>array(79,-64,921,798),51578=>array(79,-63,921,798),51579=>array(79,-74,921,798),51580=>array(79,-62,921,798),51581=>array(79,-61,921,798),51582=>array(79,-69,921,798),51583=>array(79,-74,921,798),51584=>array(79,-69,921,798),51585=>array(79,-68,921,798),51586=>array(79,-72,921,798),51587=>array(79,-70,921,798),51588=>array(79,-66,921,798),51589=>array(79,-59,921,798),51590=>array(79,-60,921,798),51591=>array(79,-68,921,798),51592=>array(57,52,943,717),51593=>array(79,-61,922,798),51594=>array(79,-61,922,798),51595=>array(79,-71,922,798),51596=>array(79,-46,922,798),51597=>array(79,-68,922,798),51598=>array(79,-74,922,798),51599=>array(79,-44,922,798),51600=>array(79,-62,922,798),51601=>array(79,-64,922,798),51602=>array(79,-64,922,798),51603=>array(79,-63,922,798),51604=>array(79,-68,922,798),51605=>array(79,-64,922,798),51606=>array(79,-63,922,798),51607=>array(79,-74,922,798),51608=>array(79,-62,922,798),51609=>array(79,-61,922,798),51610=>array(79,-69,922,798),51611=>array(79,-74,922,798),51612=>array(79,-69,922,798),51613=>array(79,-68,922,798),51614=>array(79,-72,922,798),51615=>array(79,-70,922,798),51616=>array(79,-66,922,798),51617=>array(79,-59,922,798),51618=>array(79,-60,922,798),51619=>array(79,-68,922,798),51620=>array(78,-69,907,842),51621=>array(65,-61,907,842),51622=>array(65,-61,907,842),51623=>array(65,-71,931,842),51624=>array(65,-46,907,842),51625=>array(65,-68,912,842),51626=>array(65,-76,907,842),51627=>array(65,-44,921,842),51628=>array(65,-62,917,842),51629=>array(65,-64,907,842),51630=>array(65,-64,908,842),51631=>array(65,-64,908,842),51632=>array(65,-69,923,842),51633=>array(65,-64,908,842),51634=>array(65,-64,908,842),51635=>array(65,-76,907,842),51636=>array(65,-62,907,842),51637=>array(65,-61,907,842),51638=>array(65,-69,922,842),51639=>array(65,-74,929,842),51640=>array(65,-69,927,842),51641=>array(65,-68,911,842),51642=>array(65,-72,929,842),51643=>array(65,-70,936,842),51644=>array(65,-66,908,842),51645=>array(65,-59,916,842),51646=>array(65,-60,928,842),51647=>array(65,-68,908,842),51648=>array(116,-69,907,842),51649=>array(123,-61,907,842),51650=>array(123,-61,907,842),51651=>array(123,-71,931,842),51652=>array(105,-46,907,842),51653=>array(123,-68,912,842),51654=>array(123,-76,907,842),51655=>array(123,-44,921,842),51656=>array(123,-62,917,842),51657=>array(123,-64,907,842),51658=>array(123,-64,908,842),51659=>array(123,-64,908,842),51660=>array(123,-69,923,842),51661=>array(123,-64,908,842),51662=>array(123,-64,908,842),51663=>array(123,-76,907,842),51664=>array(123,-62,907,842),51665=>array(123,-61,907,842),51666=>array(123,-69,922,842),51667=>array(123,-74,929,842),51668=>array(123,-69,927,842),51669=>array(123,-68,911,842),51670=>array(123,-72,929,842),51671=>array(123,-70,936,842),51672=>array(123,-66,908,842),51673=>array(123,-59,916,842),51674=>array(123,-60,928,842),51675=>array(123,-68,908,842),51676=>array(36,-69,935,842),51677=>array(59,-59,936,842),51678=>array(59,-61,936,842),51679=>array(59,-71,936,842),51680=>array(50,-45,936,842),51681=>array(59,-69,936,842),51682=>array(59,-76,936,842),51683=>array(59,-44,936,842),51684=>array(59,-62,936,842),51685=>array(59,-64,936,842),51686=>array(59,-64,936,842),51687=>array(59,-64,936,842),51688=>array(59,-70,936,842),51689=>array(59,-64,936,842),51690=>array(59,-64,936,842),51691=>array(59,-76,936,842),51692=>array(59,-62,936,842),51693=>array(59,-61,936,842),51694=>array(59,-70,936,842),51695=>array(59,-74,936,842),51696=>array(59,-69,936,842),51697=>array(59,-67,936,842),51698=>array(59,-72,936,842),51699=>array(59,-71,936,842),51700=>array(59,-66,936,842),51701=>array(59,-59,936,842),51702=>array(59,-60,936,842),51703=>array(59,-69,936,842),51704=>array(33,-69,907,842),51705=>array(44,-61,907,842),51706=>array(44,-61,907,842),51707=>array(44,-71,931,842),51708=>array(52,-46,907,842),51709=>array(44,-68,912,842),51710=>array(44,-76,907,842),51711=>array(44,-44,921,842),51712=>array(44,-62,917,842),51713=>array(44,-64,907,842),51714=>array(44,-64,908,842),51715=>array(44,-64,908,842),51716=>array(44,-69,923,842),51717=>array(44,-64,908,842),51718=>array(44,-64,908,842),51719=>array(44,-76,907,842),51720=>array(44,-62,907,842),51721=>array(44,-61,907,842),51722=>array(44,-69,922,842),51723=>array(44,-74,929,842),51724=>array(44,-69,927,842),51725=>array(44,-68,911,842),51726=>array(44,-72,929,842),51727=>array(44,-70,936,842),51728=>array(44,-66,908,842),51729=>array(44,-59,916,842),51730=>array(44,-60,928,842),51731=>array(44,-68,908,842),51732=>array(36,-68,935,843),51733=>array(59,-59,936,842),51734=>array(59,-61,936,842),51735=>array(59,-71,936,842),51736=>array(50,-45,936,842),51737=>array(59,-69,936,842),51738=>array(59,-76,936,842),51739=>array(59,-44,936,842),51740=>array(59,-62,936,842),51741=>array(59,-64,936,842),51742=>array(59,-64,936,842),51743=>array(59,-64,936,842),51744=>array(59,-70,936,842),51745=>array(59,-64,936,842),51746=>array(59,-64,936,842),51747=>array(59,-76,936,842),51748=>array(59,-62,936,842),51749=>array(59,-61,936,842),51750=>array(59,-70,936,842),51751=>array(59,-74,936,842),51752=>array(59,-69,936,842),51753=>array(59,-67,936,842),51754=>array(59,-72,936,842),51755=>array(59,-71,936,842),51756=>array(59,-66,936,842),51757=>array(59,-59,936,842),51758=>array(59,-60,936,842),51759=>array(59,-69,936,842),51760=>array(33,-69,907,842),51761=>array(44,-61,907,842),51762=>array(44,-61,907,842),51763=>array(44,-71,931,842),51764=>array(52,-46,907,842),51765=>array(44,-68,912,842),51766=>array(44,-76,907,842),51767=>array(44,-44,921,842),51768=>array(44,-62,917,842),51769=>array(44,-64,907,842),51770=>array(44,-64,908,842),51771=>array(44,-64,908,842),51772=>array(44,-69,923,842),51773=>array(44,-64,908,842),51774=>array(44,-64,908,842),51775=>array(44,-76,907,842),51776=>array(44,-62,907,842),51777=>array(44,-61,907,842),51778=>array(44,-69,922,842),51779=>array(44,-74,929,842),51780=>array(44,-69,927,842),51781=>array(44,-68,911,842),51782=>array(44,-72,929,842),51783=>array(44,-70,936,842),51784=>array(44,-66,908,842),51785=>array(44,-59,916,842),51786=>array(44,-60,928,842),51787=>array(44,-68,908,842),51788=>array(41,-70,907,841),51789=>array(64,-61,907,841),51790=>array(64,-61,907,841),51791=>array(64,-71,931,841),51792=>array(55,-46,907,841),51793=>array(64,-68,912,841),51794=>array(64,-76,907,841),51795=>array(64,-44,921,841),51796=>array(64,-62,917,841),51797=>array(64,-64,907,841),51798=>array(64,-64,908,841),51799=>array(64,-64,908,841),51800=>array(64,-69,923,841),51801=>array(64,-64,908,841),51802=>array(64,-64,908,841),51803=>array(64,-76,906,841),51804=>array(64,-62,907,841),51805=>array(64,-61,907,841),51806=>array(64,-69,922,841),51807=>array(64,-74,929,841),51808=>array(64,-69,927,841),51809=>array(64,-68,911,841),51810=>array(64,-72,929,841),51811=>array(64,-70,936,841),51812=>array(64,-66,908,841),51813=>array(64,-59,916,841),51814=>array(64,-60,928,841),51815=>array(64,-68,908,841),51816=>array(33,-68,907,843),51817=>array(44,-61,907,843),51818=>array(44,-61,907,843),51819=>array(44,-71,931,843),51820=>array(52,-46,907,843),51821=>array(44,-68,912,843),51822=>array(44,-76,907,843),51823=>array(44,-44,921,843),51824=>array(44,-62,917,843),51825=>array(44,-64,907,843),51826=>array(44,-64,908,843),51827=>array(44,-64,908,843),51828=>array(44,-69,923,843),51829=>array(44,-64,908,843),51830=>array(44,-64,908,843),51831=>array(44,-76,907,843),51832=>array(44,-62,907,843),51833=>array(44,-61,907,843),51834=>array(44,-69,922,843),51835=>array(44,-74,929,843),51836=>array(44,-69,927,843),51837=>array(44,-68,911,843),51838=>array(44,-72,929,843),51839=>array(44,-70,936,843),51840=>array(44,-66,908,843),51841=>array(44,-59,916,843),51842=>array(44,-60,928,843),51843=>array(44,-68,908,843),51844=>array(36,-70,907,842),51845=>array(54,-61,908,842),51846=>array(54,-61,908,842),51847=>array(54,-71,931,842),51848=>array(55,-46,907,842),51849=>array(54,-68,912,842),51850=>array(54,-76,908,842),51851=>array(54,-44,921,842),51852=>array(54,-62,917,842),51853=>array(54,-64,908,842),51854=>array(54,-64,908,842),51855=>array(54,-64,908,842),51856=>array(54,-69,923,842),51857=>array(54,-64,908,842),51858=>array(54,-64,908,842),51859=>array(54,-76,908,842),51860=>array(54,-62,908,842),51861=>array(54,-61,908,842),51862=>array(54,-69,922,842),51863=>array(54,-74,929,842),51864=>array(54,-69,927,842),51865=>array(54,-68,911,842),51866=>array(54,-72,929,842),51867=>array(54,-70,936,842),51868=>array(54,-66,908,842),51869=>array(54,-59,916,842),51870=>array(54,-60,928,842),51871=>array(54,-68,908,842),51872=>array(33,-68,907,843),51873=>array(49,-61,907,843),51874=>array(49,-61,907,843),51875=>array(49,-71,931,843),51876=>array(47,-46,907,843),51877=>array(49,-68,912,843),51878=>array(49,-76,907,843),51879=>array(49,-44,921,843),51880=>array(49,-62,917,843),51881=>array(49,-64,907,843),51882=>array(49,-64,908,843),51883=>array(49,-64,908,843),51884=>array(49,-69,923,843),51885=>array(49,-64,908,843),51886=>array(49,-64,908,843),51887=>array(49,-76,907,843),51888=>array(49,-62,907,843),51889=>array(49,-61,907,843),51890=>array(49,-69,922,843),51891=>array(49,-74,929,843),51892=>array(49,-69,927,843),51893=>array(49,-68,911,843),51894=>array(49,-72,929,843),51895=>array(49,-70,936,843),51896=>array(49,-66,908,843),51897=>array(49,-59,916,843),51898=>array(49,-60,928,843),51899=>array(49,-68,908,843),51900=>array(55,22,943,755),51901=>array(79,-61,921,786),51902=>array(79,-61,921,786),51903=>array(79,-71,921,786),51904=>array(79,-46,922,786),51905=>array(79,-68,921,786),51906=>array(79,-74,921,786),51907=>array(79,-44,921,786),51908=>array(79,-62,921,786),51909=>array(79,-64,921,786),51910=>array(79,-64,921,786),51911=>array(79,-63,921,786),51912=>array(79,-68,921,786),51913=>array(79,-64,921,786),51914=>array(79,-63,921,786),51915=>array(79,-74,921,786),51916=>array(79,-62,921,786),51917=>array(79,-61,921,786),51918=>array(79,-69,921,786),51919=>array(79,-74,921,786),51920=>array(79,-69,921,786),51921=>array(79,-68,921,786),51922=>array(79,-72,921,786),51923=>array(79,-70,921,786),51924=>array(79,-66,921,786),51925=>array(79,-59,921,786),51926=>array(79,-60,921,786),51927=>array(79,-68,921,786),51928=>array(50,-69,936,842),51929=>array(65,-59,936,842),51930=>array(65,-61,936,842),51931=>array(65,-71,936,842),51932=>array(72,-45,936,842),51933=>array(65,-69,936,842),51934=>array(65,-76,936,842),51935=>array(65,-44,936,842),51936=>array(65,-62,936,842),51937=>array(65,-64,936,842),51938=>array(65,-64,936,842),51939=>array(65,-64,936,842),51940=>array(65,-70,936,842),51941=>array(65,-64,936,842),51942=>array(65,-64,936,842),51943=>array(65,-76,936,842),51944=>array(65,-62,936,842),51945=>array(65,-61,936,842),51946=>array(65,-70,936,842),51947=>array(65,-74,936,842),51948=>array(65,-69,936,842),51949=>array(65,-67,936,842),51950=>array(65,-72,936,842),51951=>array(65,-71,936,842),51952=>array(65,-66,936,842),51953=>array(65,-59,936,842),51954=>array(65,-60,936,842),51955=>array(65,-69,936,842),51956=>array(50,-69,907,842),51957=>array(71,-61,907,842),51958=>array(71,-61,907,842),51959=>array(71,-71,931,842),51960=>array(66,-46,907,842),51961=>array(71,-68,912,842),51962=>array(71,-76,907,842),51963=>array(71,-44,921,842),51964=>array(71,-62,917,842),51965=>array(71,-64,907,842),51966=>array(71,-64,908,842),51967=>array(71,-64,908,842),51968=>array(71,-69,923,842),51969=>array(71,-64,908,842),51970=>array(71,-64,908,842),51971=>array(71,-76,907,842),51972=>array(71,-62,907,842),51973=>array(71,-61,907,842),51974=>array(71,-69,922,842),51975=>array(71,-74,929,842),51976=>array(71,-69,927,842),51977=>array(71,-68,911,842),51978=>array(71,-72,929,842),51979=>array(71,-70,936,842),51980=>array(71,-66,908,842),51981=>array(71,-59,916,842),51982=>array(71,-60,928,842),51983=>array(71,-68,908,842),51984=>array(66,-69,907,842),51985=>array(65,-61,907,842),51986=>array(65,-61,907,842),51987=>array(65,-71,931,842),51988=>array(65,-46,907,842),51989=>array(65,-68,912,842),51990=>array(65,-76,907,842),51991=>array(65,-44,921,842),51992=>array(65,-62,917,842),51993=>array(65,-64,907,842),51994=>array(65,-64,908,842),51995=>array(65,-64,908,842),51996=>array(65,-69,923,842),51997=>array(65,-64,908,842),51998=>array(65,-64,908,842),51999=>array(65,-76,907,842),52000=>array(65,-62,907,842),52001=>array(65,-61,907,842),52002=>array(65,-69,922,842),52003=>array(65,-74,929,842),52004=>array(65,-69,927,842),52005=>array(65,-68,911,842),52006=>array(65,-72,929,842),52007=>array(65,-70,936,842),52008=>array(65,-66,908,842),52009=>array(65,-59,916,842),52010=>array(65,-60,928,842),52011=>array(65,-68,908,842),52012=>array(62,22,943,756),52013=>array(79,-61,922,786),52014=>array(79,-61,922,786),52015=>array(79,-71,922,786),52016=>array(79,-46,922,786),52017=>array(79,-68,922,786),52018=>array(79,-74,922,786),52019=>array(79,-44,922,786),52020=>array(79,-62,922,786),52021=>array(79,-64,922,786),52022=>array(79,-64,922,786),52023=>array(79,-63,922,786),52024=>array(79,-68,922,786),52025=>array(79,-64,922,786),52026=>array(79,-63,922,786),52027=>array(79,-74,922,786),52028=>array(79,-62,922,786),52029=>array(79,-61,922,786),52030=>array(79,-69,922,786),52031=>array(79,-74,922,786),52032=>array(79,-69,922,786),52033=>array(79,-68,922,786),52034=>array(79,-72,922,786),52035=>array(79,-70,922,786),52036=>array(79,-66,922,786),52037=>array(79,-59,922,786),52038=>array(79,-60,922,786),52039=>array(79,-68,922,786),52040=>array(82,-64,924,811),52041=>array(79,-61,921,811),52042=>array(79,-61,921,811),52043=>array(79,-71,921,811),52044=>array(79,-46,921,811),52045=>array(79,-68,921,811),52046=>array(79,-74,921,811),52047=>array(79,-44,921,811),52048=>array(79,-62,921,811),52049=>array(79,-64,921,811),52050=>array(79,-64,921,811),52051=>array(79,-63,921,811),52052=>array(79,-68,921,811),52053=>array(79,-64,921,811),52054=>array(79,-63,921,811),52055=>array(79,-74,921,811),52056=>array(79,-62,921,811),52057=>array(79,-61,921,811),52058=>array(79,-69,921,811),52059=>array(79,-74,921,811),52060=>array(79,-69,921,811),52061=>array(79,-68,921,811),52062=>array(79,-72,921,811),52063=>array(79,-70,921,811),52064=>array(79,-66,921,811),52065=>array(79,-59,921,811),52066=>array(79,-60,921,811),52067=>array(79,-68,921,811),52068=>array(81,-70,907,841),52069=>array(74,-61,909,841),52070=>array(74,-61,909,841),52071=>array(74,-71,931,841),52072=>array(66,-46,909,842),52073=>array(74,-68,912,841),52074=>array(74,-76,909,841),52075=>array(74,-44,921,841),52076=>array(74,-62,917,841),52077=>array(74,-64,909,841),52078=>array(74,-64,909,841),52079=>array(74,-64,909,841),52080=>array(74,-69,923,841),52081=>array(74,-64,909,841),52082=>array(74,-64,909,841),52083=>array(74,-76,909,841),52084=>array(74,-62,909,841),52085=>array(74,-61,909,841),52086=>array(74,-69,922,841),52087=>array(74,-74,929,841),52088=>array(74,-69,927,841),52089=>array(74,-68,911,841),52090=>array(74,-72,929,841),52091=>array(74,-70,936,841),52092=>array(74,-66,909,841),52093=>array(74,-59,916,841),52094=>array(74,-60,928,841),52095=>array(74,-68,909,841),52096=>array(50,-68,907,843),52097=>array(68,-61,907,843),52098=>array(68,-61,907,843),52099=>array(68,-71,931,843),52100=>array(68,-46,907,843),52101=>array(68,-68,912,843),52102=>array(68,-76,907,843),52103=>array(68,-44,921,843),52104=>array(68,-62,917,843),52105=>array(68,-64,907,843),52106=>array(68,-64,908,843),52107=>array(68,-64,908,843),52108=>array(68,-69,923,843),52109=>array(68,-64,908,843),52110=>array(68,-64,908,843),52111=>array(68,-76,907,843),52112=>array(68,-62,907,843),52113=>array(68,-61,907,843),52114=>array(68,-69,922,843),52115=>array(68,-74,929,843),52116=>array(68,-69,927,843),52117=>array(68,-68,911,843),52118=>array(68,-72,929,843),52119=>array(68,-70,936,843),52120=>array(68,-66,908,843),52121=>array(68,-59,916,843),52122=>array(68,-60,928,843),52123=>array(68,-68,908,843),52124=>array(60,-69,907,842),52125=>array(65,-61,907,842),52126=>array(65,-61,907,842),52127=>array(65,-71,931,842),52128=>array(65,-46,907,842),52129=>array(65,-68,912,842),52130=>array(65,-76,907,842),52131=>array(65,-44,921,842),52132=>array(65,-62,917,842),52133=>array(65,-64,907,842),52134=>array(65,-64,908,842),52135=>array(65,-64,908,842),52136=>array(65,-69,923,842),52137=>array(65,-64,908,842),52138=>array(65,-64,908,842),52139=>array(65,-76,907,842),52140=>array(65,-62,907,842),52141=>array(65,-61,907,842),52142=>array(65,-69,922,842),52143=>array(65,-74,929,842),52144=>array(65,-69,927,842),52145=>array(65,-68,911,842),52146=>array(65,-72,929,842),52147=>array(65,-70,936,842),52148=>array(65,-66,908,842),52149=>array(65,-59,916,842),52150=>array(65,-60,928,842),52151=>array(65,-68,908,842),52152=>array(82,-64,924,811),52153=>array(79,-61,921,811),52154=>array(79,-61,921,811),52155=>array(79,-71,921,811),52156=>array(81,-46,922,811),52157=>array(79,-68,921,811),52158=>array(79,-74,921,811),52159=>array(79,-44,921,811),52160=>array(79,-62,921,811),52161=>array(79,-64,921,811),52162=>array(79,-64,921,811),52163=>array(79,-63,921,811),52164=>array(79,-68,921,811),52165=>array(79,-64,921,811),52166=>array(79,-63,921,811),52167=>array(79,-74,921,811),52168=>array(79,-62,921,811),52169=>array(79,-61,921,811),52170=>array(79,-69,921,811),52171=>array(79,-74,921,811),52172=>array(79,-69,921,811),52173=>array(79,-68,921,811),52174=>array(79,-72,921,811),52175=>array(79,-70,921,811),52176=>array(79,-66,921,811),52177=>array(79,-59,921,811),52178=>array(79,-60,921,811),52179=>array(79,-68,921,811),52180=>array(56,37,944,728),52181=>array(79,-61,922,786),52182=>array(79,-61,922,786),52183=>array(79,-71,922,786),52184=>array(79,-46,921,784),52185=>array(79,-68,922,786),52186=>array(79,-74,922,786),52187=>array(79,-44,922,786),52188=>array(79,-62,922,786),52189=>array(79,-64,922,786),52190=>array(79,-64,922,786),52191=>array(79,-63,922,786),52192=>array(79,-68,922,786),52193=>array(79,-64,922,786),52194=>array(79,-63,922,786),52195=>array(79,-74,922,786),52196=>array(79,-62,922,786),52197=>array(79,-61,922,786),52198=>array(79,-69,922,786),52199=>array(79,-74,922,786),52200=>array(79,-69,922,786),52201=>array(79,-68,922,786),52202=>array(79,-72,922,786),52203=>array(79,-70,922,786),52204=>array(79,-66,922,786),52205=>array(79,-59,922,786),52206=>array(79,-60,922,786),52207=>array(79,-68,922,786),52208=>array(63,-69,907,842),52209=>array(65,-61,907,842),52210=>array(65,-61,907,842),52211=>array(65,-71,931,842),52212=>array(65,-46,907,842),52213=>array(65,-68,912,842),52214=>array(65,-76,907,842),52215=>array(65,-44,921,842),52216=>array(65,-62,917,842),52217=>array(65,-64,907,842),52218=>array(65,-64,908,842),52219=>array(65,-64,908,842),52220=>array(65,-69,923,842),52221=>array(65,-64,908,842),52222=>array(65,-64,908,842),52223=>array(65,-76,907,842),52224=>array(65,-62,907,842),52225=>array(65,-61,907,842),52226=>array(65,-69,922,842),52227=>array(65,-74,929,842),52228=>array(65,-69,927,842),52229=>array(65,-68,911,842),52230=>array(65,-72,929,842),52231=>array(65,-70,936,842),52232=>array(65,-66,908,842),52233=>array(65,-59,916,842),52234=>array(65,-60,928,842),52235=>array(65,-68,908,842),52236=>array(76,-69,907,842),52237=>array(60,-61,907,842),52238=>array(60,-61,907,842),52239=>array(60,-71,931,842),52240=>array(57,-46,907,842),52241=>array(60,-68,912,842),52242=>array(60,-76,907,842),52243=>array(60,-44,921,842),52244=>array(60,-62,917,842),52245=>array(60,-64,907,842),52246=>array(60,-64,908,842),52247=>array(60,-64,908,842),52248=>array(60,-69,923,842),52249=>array(60,-64,908,842),52250=>array(60,-64,908,842),52251=>array(60,-76,907,842),52252=>array(60,-62,907,842),52253=>array(60,-61,907,842),52254=>array(60,-69,922,842),52255=>array(60,-74,929,842),52256=>array(60,-69,927,842),52257=>array(60,-68,911,842),52258=>array(60,-72,929,842),52259=>array(60,-70,936,842),52260=>array(60,-66,908,842),52261=>array(60,-59,916,842),52262=>array(60,-60,928,842),52263=>array(60,-68,908,842),52264=>array(86,-69,935,842),52265=>array(71,-59,936,842),52266=>array(71,-61,936,842),52267=>array(71,-71,936,842),52268=>array(64,-45,936,842),52269=>array(71,-69,936,842),52270=>array(71,-76,936,842),52271=>array(71,-44,936,842),52272=>array(71,-62,936,842),52273=>array(71,-64,936,842),52274=>array(71,-64,936,842),52275=>array(71,-64,936,842),52276=>array(71,-70,936,842),52277=>array(71,-64,936,842),52278=>array(71,-64,936,842),52279=>array(71,-76,936,842),52280=>array(71,-62,936,842),52281=>array(71,-61,936,842),52282=>array(71,-70,936,842),52283=>array(71,-74,936,842),52284=>array(71,-69,936,842),52285=>array(71,-67,936,842),52286=>array(71,-72,936,842),52287=>array(71,-71,936,842),52288=>array(71,-66,936,842),52289=>array(71,-59,936,842),52290=>array(71,-60,936,842),52291=>array(71,-69,936,842),52292=>array(81,-69,907,842),52293=>array(69,-61,907,842),52294=>array(69,-61,907,842),52295=>array(69,-71,931,842),52296=>array(64,-46,907,842),52297=>array(69,-68,912,842),52298=>array(69,-76,907,842),52299=>array(69,-44,921,842),52300=>array(69,-62,917,842),52301=>array(69,-64,907,842),52302=>array(69,-64,908,842),52303=>array(69,-64,908,842),52304=>array(69,-69,923,842),52305=>array(69,-64,908,842),52306=>array(69,-64,908,842),52307=>array(69,-76,907,842),52308=>array(69,-62,907,842),52309=>array(69,-61,907,842),52310=>array(69,-69,922,842),52311=>array(69,-74,929,842),52312=>array(69,-69,927,842),52313=>array(69,-68,911,842),52314=>array(69,-72,929,842),52315=>array(69,-70,936,842),52316=>array(69,-66,908,842),52317=>array(69,-59,916,842),52318=>array(69,-60,928,842),52319=>array(69,-68,908,842),52320=>array(86,-68,935,843),52321=>array(74,-59,936,842),52322=>array(74,-61,936,842),52323=>array(74,-71,936,842),52324=>array(64,-45,936,842),52325=>array(74,-69,936,842),52326=>array(74,-76,936,842),52327=>array(74,-44,936,842),52328=>array(74,-62,936,842),52329=>array(74,-64,936,842),52330=>array(74,-64,936,842),52331=>array(74,-64,936,842),52332=>array(74,-70,936,842),52333=>array(74,-64,936,842),52334=>array(74,-64,936,842),52335=>array(74,-76,936,842),52336=>array(74,-62,936,842),52337=>array(74,-61,936,842),52338=>array(74,-70,936,842),52339=>array(74,-74,936,842),52340=>array(74,-69,936,842),52341=>array(74,-67,936,842),52342=>array(74,-72,936,842),52343=>array(74,-71,936,842),52344=>array(74,-66,936,842),52345=>array(74,-59,936,842),52346=>array(74,-60,936,842),52347=>array(74,-69,936,842),52348=>array(81,-69,907,842),52349=>array(71,-61,907,842),52350=>array(71,-61,907,842),52351=>array(71,-71,931,842),52352=>array(64,-46,907,842),52353=>array(71,-68,912,842),52354=>array(71,-76,907,842),52355=>array(71,-44,921,842),52356=>array(71,-62,917,842),52357=>array(71,-64,907,842),52358=>array(71,-64,908,842),52359=>array(71,-64,908,842),52360=>array(71,-69,923,842),52361=>array(71,-64,908,842),52362=>array(71,-64,908,842),52363=>array(71,-76,907,842),52364=>array(71,-62,907,842),52365=>array(71,-61,907,842),52366=>array(71,-69,922,842),52367=>array(71,-74,929,842),52368=>array(71,-69,927,842),52369=>array(71,-68,911,842),52370=>array(71,-72,929,842),52371=>array(71,-70,936,842),52372=>array(71,-66,908,842),52373=>array(71,-59,916,842),52374=>array(71,-60,928,842),52375=>array(71,-68,908,842),52376=>array(86,-70,907,841),52377=>array(68,-61,907,842),52378=>array(68,-61,907,842),52379=>array(68,-71,931,842),52380=>array(66,-46,907,841),52381=>array(68,-68,912,842),52382=>array(68,-76,907,842),52383=>array(68,-44,921,842),52384=>array(68,-62,917,842),52385=>array(68,-64,907,842),52386=>array(68,-64,908,842),52387=>array(68,-64,908,842),52388=>array(68,-69,923,842),52389=>array(68,-64,908,842),52390=>array(68,-64,908,842),52391=>array(68,-76,906,842),52392=>array(68,-62,907,842),52393=>array(68,-61,907,842),52394=>array(68,-69,922,842),52395=>array(68,-74,929,842),52396=>array(68,-69,927,842),52397=>array(68,-68,911,842),52398=>array(68,-72,929,842),52399=>array(68,-70,936,842),52400=>array(68,-66,908,842),52401=>array(68,-59,916,842),52402=>array(68,-60,928,842),52403=>array(68,-68,908,842),52404=>array(71,-68,907,843),52405=>array(65,-61,907,843),52406=>array(65,-61,907,843),52407=>array(65,-71,931,843),52408=>array(66,-46,907,843),52409=>array(65,-68,912,843),52410=>array(65,-76,907,843),52411=>array(65,-44,921,843),52412=>array(65,-62,917,843),52413=>array(65,-64,907,843),52414=>array(65,-64,908,843),52415=>array(65,-64,908,843),52416=>array(65,-69,923,843),52417=>array(65,-64,908,843),52418=>array(65,-64,908,843),52419=>array(65,-76,907,843),52420=>array(65,-62,907,843),52421=>array(65,-61,907,843),52422=>array(65,-69,922,843),52423=>array(65,-74,929,843),52424=>array(65,-69,927,843),52425=>array(65,-68,911,843),52426=>array(65,-72,929,843),52427=>array(65,-70,936,843),52428=>array(65,-66,908,843),52429=>array(65,-59,916,843),52430=>array(65,-60,928,843),52431=>array(65,-68,908,843),52432=>array(86,-70,907,842),52433=>array(65,-61,907,842),52434=>array(65,-61,907,842),52435=>array(65,-71,931,842),52436=>array(62,-46,907,842),52437=>array(65,-68,912,842),52438=>array(65,-76,907,842),52439=>array(65,-44,921,842),52440=>array(65,-62,917,842),52441=>array(65,-64,907,842),52442=>array(65,-64,908,842),52443=>array(65,-64,908,842),52444=>array(65,-69,923,842),52445=>array(65,-64,908,842),52446=>array(65,-64,908,842),52447=>array(65,-76,907,842),52448=>array(65,-62,907,842),52449=>array(65,-61,907,842),52450=>array(65,-69,922,842),52451=>array(65,-74,929,842),52452=>array(65,-69,927,842),52453=>array(65,-68,911,842),52454=>array(65,-72,929,842),52455=>array(65,-70,936,842),52456=>array(65,-66,908,842),52457=>array(65,-59,916,842),52458=>array(65,-60,928,842),52459=>array(65,-68,908,842),52460=>array(71,-68,907,843),52461=>array(65,-61,907,843),52462=>array(65,-61,907,843),52463=>array(65,-71,931,843),52464=>array(65,-46,907,843),52465=>array(65,-68,912,843),52466=>array(65,-76,907,843),52467=>array(65,-44,921,843),52468=>array(65,-62,917,843),52469=>array(65,-64,907,843),52470=>array(65,-64,908,843),52471=>array(65,-64,908,843),52472=>array(65,-69,923,843),52473=>array(65,-64,908,843),52474=>array(65,-64,908,843),52475=>array(65,-76,907,843),52476=>array(65,-62,907,843),52477=>array(65,-61,907,843),52478=>array(65,-69,922,843),52479=>array(65,-74,929,843),52480=>array(65,-69,927,843),52481=>array(65,-68,911,843),52482=>array(65,-72,929,843),52483=>array(65,-70,936,843),52484=>array(65,-66,908,843),52485=>array(65,-59,916,843),52486=>array(65,-60,928,843),52487=>array(65,-68,908,843),52488=>array(62,-3,943,777),52489=>array(79,-61,921,802),52490=>array(79,-61,921,802),52491=>array(79,-71,921,802),52492=>array(79,-46,921,792),52493=>array(79,-68,921,802),52494=>array(79,-74,921,802),52495=>array(79,-44,921,802),52496=>array(79,-62,921,802),52497=>array(79,-64,921,802),52498=>array(79,-64,921,802),52499=>array(79,-63,921,802),52500=>array(79,-68,921,802),52501=>array(79,-64,921,802),52502=>array(79,-63,921,802),52503=>array(79,-74,921,802),52504=>array(79,-62,921,802),52505=>array(79,-61,921,802),52506=>array(79,-69,921,802),52507=>array(79,-74,921,802),52508=>array(79,-69,921,802),52509=>array(79,-68,921,802),52510=>array(79,-72,921,802),52511=>array(79,-70,921,802),52512=>array(79,-66,921,802),52513=>array(79,-59,921,802),52514=>array(79,-60,921,802),52515=>array(79,-68,921,802),52516=>array(64,-69,936,842),52517=>array(77,-59,936,842),52518=>array(77,-61,936,842),52519=>array(77,-71,936,842),52520=>array(72,-45,936,842),52521=>array(77,-69,936,842),52522=>array(77,-76,936,842),52523=>array(77,-44,936,842),52524=>array(77,-62,936,842),52525=>array(77,-64,936,842),52526=>array(77,-64,936,842),52527=>array(77,-64,936,842),52528=>array(77,-70,936,842),52529=>array(77,-64,936,842),52530=>array(77,-64,936,842),52531=>array(77,-76,936,842),52532=>array(77,-62,936,842),52533=>array(77,-61,936,842),52534=>array(77,-70,936,842),52535=>array(77,-74,936,842),52536=>array(77,-69,936,842),52537=>array(77,-67,936,842),52538=>array(77,-72,936,842),52539=>array(77,-71,936,842),52540=>array(77,-66,936,842),52541=>array(77,-59,936,842),52542=>array(77,-60,936,842),52543=>array(77,-69,936,842),52544=>array(57,-69,907,842),52545=>array(72,-61,907,842),52546=>array(72,-61,907,842),52547=>array(72,-71,931,842),52548=>array(72,-46,907,842),52549=>array(72,-68,912,842),52550=>array(72,-76,907,842),52551=>array(72,-44,921,842),52552=>array(72,-62,917,842),52553=>array(72,-64,907,842),52554=>array(72,-64,908,842),52555=>array(72,-64,908,842),52556=>array(72,-69,923,842),52557=>array(72,-64,908,842),52558=>array(72,-64,908,842),52559=>array(72,-76,907,842),52560=>array(72,-62,907,842),52561=>array(72,-61,907,842),52562=>array(72,-69,922,842),52563=>array(72,-74,929,842),52564=>array(72,-69,927,842),52565=>array(72,-68,911,842),52566=>array(72,-72,929,842),52567=>array(72,-70,936,842),52568=>array(72,-66,908,842),52569=>array(72,-59,916,842),52570=>array(72,-60,928,842),52571=>array(72,-68,908,842),52572=>array(67,-69,907,842),52573=>array(65,-61,907,842),52574=>array(65,-61,907,842),52575=>array(65,-71,931,842),52576=>array(65,-46,907,842),52577=>array(65,-68,912,842),52578=>array(65,-76,907,842),52579=>array(65,-44,921,842),52580=>array(65,-62,917,842),52581=>array(65,-64,907,842),52582=>array(65,-64,908,842),52583=>array(65,-64,908,842),52584=>array(65,-69,923,842),52585=>array(65,-64,908,842),52586=>array(65,-64,908,842),52587=>array(65,-76,907,842),52588=>array(65,-62,907,842),52589=>array(65,-61,907,842),52590=>array(65,-69,922,842),52591=>array(65,-74,929,842),52592=>array(65,-69,927,842),52593=>array(65,-68,911,842),52594=>array(65,-72,929,842),52595=>array(65,-70,936,842),52596=>array(65,-66,908,842),52597=>array(65,-59,916,842),52598=>array(65,-60,928,842),52599=>array(65,-68,908,842),52600=>array(62,-3,938,777),52601=>array(79,-61,922,802),52602=>array(79,-61,922,802),52603=>array(79,-71,922,802),52604=>array(79,-46,922,792),52605=>array(79,-68,922,802),52606=>array(79,-74,922,802),52607=>array(79,-44,922,802),52608=>array(79,-62,922,802),52609=>array(79,-64,922,802),52610=>array(79,-64,922,802),52611=>array(79,-63,922,802),52612=>array(79,-68,922,802),52613=>array(79,-64,922,802),52614=>array(79,-63,922,802),52615=>array(79,-74,922,802),52616=>array(79,-62,922,802),52617=>array(79,-61,922,802),52618=>array(79,-69,922,802),52619=>array(79,-74,922,802),52620=>array(79,-69,922,802),52621=>array(79,-68,922,802),52622=>array(79,-72,922,802),52623=>array(79,-70,922,802),52624=>array(79,-66,922,802),52625=>array(79,-59,922,802),52626=>array(79,-60,922,802),52627=>array(79,-68,922,802),52628=>array(79,-64,921,820),52629=>array(79,-61,921,822),52630=>array(79,-61,921,822),52631=>array(79,-71,921,822),52632=>array(79,-46,921,820),52633=>array(79,-68,921,822),52634=>array(79,-74,921,822),52635=>array(79,-44,921,822),52636=>array(79,-62,921,822),52637=>array(79,-64,921,822),52638=>array(79,-64,921,822),52639=>array(79,-63,921,822),52640=>array(79,-68,921,822),52641=>array(79,-64,921,822),52642=>array(79,-63,921,822),52643=>array(79,-74,921,822),52644=>array(79,-62,921,822),52645=>array(79,-61,921,822),52646=>array(79,-69,921,822),52647=>array(79,-74,921,822),52648=>array(79,-69,921,822),52649=>array(79,-68,921,822),52650=>array(79,-72,921,822),52651=>array(79,-70,921,822),52652=>array(79,-66,921,822),52653=>array(79,-59,921,822),52654=>array(79,-60,921,822),52655=>array(79,-68,921,822),52656=>array(70,-70,907,841),52657=>array(75,-61,910,841),52658=>array(75,-61,910,841),52659=>array(75,-71,931,841),52660=>array(76,-46,910,842),52661=>array(75,-68,912,841),52662=>array(75,-76,910,841),52663=>array(75,-44,921,841),52664=>array(75,-62,917,841),52665=>array(75,-64,910,841),52666=>array(75,-64,910,841),52667=>array(75,-64,910,841),52668=>array(75,-69,923,841),52669=>array(75,-64,910,841),52670=>array(75,-64,910,841),52671=>array(75,-76,910,841),52672=>array(75,-62,910,841),52673=>array(75,-61,910,841),52674=>array(75,-69,922,841),52675=>array(75,-74,929,841),52676=>array(75,-69,927,841),52677=>array(75,-68,911,841),52678=>array(75,-72,929,841),52679=>array(75,-70,936,841),52680=>array(75,-66,910,841),52681=>array(75,-59,916,841),52682=>array(75,-60,928,841),52683=>array(75,-68,910,841),52684=>array(63,-68,907,843),52685=>array(70,-61,907,843),52686=>array(70,-61,907,843),52687=>array(70,-71,931,843),52688=>array(76,-46,907,843),52689=>array(70,-68,912,843),52690=>array(70,-76,907,843),52691=>array(70,-44,921,843),52692=>array(70,-62,917,843),52693=>array(70,-64,907,843),52694=>array(70,-64,908,843),52695=>array(70,-64,908,843),52696=>array(70,-69,923,843),52697=>array(70,-64,908,843),52698=>array(70,-64,908,843),52699=>array(70,-76,907,843),52700=>array(70,-62,907,843),52701=>array(70,-61,907,843),52702=>array(70,-69,922,843),52703=>array(70,-74,929,843),52704=>array(70,-69,927,843),52705=>array(70,-68,911,843),52706=>array(70,-72,929,843),52707=>array(70,-70,936,843),52708=>array(70,-66,908,843),52709=>array(70,-59,916,843),52710=>array(70,-60,928,843),52711=>array(70,-68,908,843),52712=>array(70,-69,907,842),52713=>array(65,-61,907,842),52714=>array(65,-61,907,842),52715=>array(65,-71,931,842),52716=>array(66,-46,907,842),52717=>array(65,-68,912,842),52718=>array(65,-76,907,842),52719=>array(65,-44,921,842),52720=>array(65,-62,917,842),52721=>array(65,-64,907,842),52722=>array(65,-64,908,842),52723=>array(65,-64,908,842),52724=>array(65,-69,923,842),52725=>array(65,-64,908,842),52726=>array(65,-64,908,842),52727=>array(65,-76,907,842),52728=>array(65,-62,907,842),52729=>array(65,-61,907,842),52730=>array(65,-69,922,842),52731=>array(65,-74,929,842),52732=>array(65,-69,927,842),52733=>array(65,-68,911,842),52734=>array(65,-72,929,842),52735=>array(65,-70,936,842),52736=>array(65,-66,908,842),52737=>array(65,-59,916,842),52738=>array(65,-60,928,842),52739=>array(65,-68,908,842),52740=>array(87,-54,928,820),52741=>array(79,-61,921,822),52742=>array(79,-61,921,822),52743=>array(79,-71,921,822),52744=>array(81,-46,922,820),52745=>array(79,-68,921,822),52746=>array(79,-74,921,822),52747=>array(79,-44,921,822),52748=>array(79,-62,921,822),52749=>array(79,-64,921,822),52750=>array(79,-64,921,822),52751=>array(79,-63,921,822),52752=>array(79,-68,921,822),52753=>array(79,-64,921,822),52754=>array(79,-63,921,822),52755=>array(79,-74,921,822),52756=>array(79,-62,921,822),52757=>array(79,-61,921,822),52758=>array(79,-69,921,822),52759=>array(79,-74,921,822),52760=>array(79,-69,921,822),52761=>array(79,-68,921,822),52762=>array(79,-72,921,822),52763=>array(79,-70,921,822),52764=>array(79,-66,921,822),52765=>array(79,-59,921,822),52766=>array(79,-60,921,822),52767=>array(79,-68,921,822),52768=>array(57,47,943,752),52769=>array(79,-61,922,802),52770=>array(79,-61,922,802),52771=>array(79,-71,922,802),52772=>array(79,-46,922,792),52773=>array(79,-68,922,802),52774=>array(79,-74,922,802),52775=>array(79,-44,922,802),52776=>array(79,-62,922,802),52777=>array(79,-64,922,802),52778=>array(79,-64,922,802),52779=>array(79,-63,922,802),52780=>array(79,-68,922,802),52781=>array(79,-64,922,802),52782=>array(79,-63,922,802),52783=>array(79,-74,922,802),52784=>array(79,-62,922,802),52785=>array(79,-61,922,802),52786=>array(79,-69,922,802),52787=>array(79,-74,922,802),52788=>array(79,-69,922,802),52789=>array(79,-68,922,802),52790=>array(79,-72,922,802),52791=>array(79,-70,922,802),52792=>array(79,-66,922,802),52793=>array(79,-59,922,802),52794=>array(79,-60,922,802),52795=>array(79,-68,922,802),52796=>array(70,-69,907,842),52797=>array(65,-61,907,842),52798=>array(65,-61,907,842),52799=>array(65,-71,931,842),52800=>array(65,-46,907,842),52801=>array(65,-68,912,842),52802=>array(65,-76,907,842),52803=>array(65,-44,921,842),52804=>array(65,-62,917,842),52805=>array(65,-64,907,842),52806=>array(65,-64,908,842),52807=>array(65,-64,908,842),52808=>array(65,-69,923,842),52809=>array(65,-64,908,842),52810=>array(65,-64,908,842),52811=>array(65,-76,907,842),52812=>array(65,-62,907,842),52813=>array(65,-61,907,842),52814=>array(65,-69,922,842),52815=>array(65,-74,929,842),52816=>array(65,-69,927,842),52817=>array(65,-68,911,842),52818=>array(65,-72,929,842),52819=>array(65,-70,936,842),52820=>array(65,-66,908,842),52821=>array(65,-59,916,842),52822=>array(65,-60,928,842),52823=>array(65,-68,908,842),52824=>array(115,-69,907,842),52825=>array(95,-61,907,842),52826=>array(95,-61,907,842),52827=>array(95,-71,931,842),52828=>array(99,-46,907,842),52829=>array(95,-68,912,842),52830=>array(95,-76,907,842),52831=>array(95,-44,921,842),52832=>array(95,-62,917,842),52833=>array(95,-64,907,842),52834=>array(95,-64,908,842),52835=>array(95,-64,908,842),52836=>array(95,-69,923,842),52837=>array(95,-64,908,842),52838=>array(95,-64,908,842),52839=>array(95,-76,907,842),52840=>array(95,-62,907,842),52841=>array(95,-61,907,842),52842=>array(95,-69,922,842),52843=>array(95,-74,929,842),52844=>array(95,-69,927,842),52845=>array(95,-68,911,842),52846=>array(95,-72,929,842),52847=>array(95,-70,936,842),52848=>array(95,-66,908,842),52849=>array(95,-59,916,842),52850=>array(95,-60,928,842),52851=>array(95,-68,908,842),52852=>array(84,-69,936,842),52853=>array(66,-59,936,842),52854=>array(66,-61,936,842),52855=>array(66,-71,936,842),52856=>array(69,-45,936,842),52857=>array(66,-69,936,842),52858=>array(66,-76,936,842),52859=>array(66,-44,936,842),52860=>array(66,-62,936,842),52861=>array(66,-64,936,842),52862=>array(66,-64,936,842),52863=>array(66,-64,936,842),52864=>array(66,-70,936,842),52865=>array(66,-64,936,842),52866=>array(66,-64,936,842),52867=>array(66,-76,936,842),52868=>array(66,-62,936,842),52869=>array(66,-61,936,842),52870=>array(66,-70,936,842),52871=>array(66,-74,936,842),52872=>array(66,-69,936,842),52873=>array(66,-67,936,842),52874=>array(66,-72,936,842),52875=>array(66,-71,936,842),52876=>array(66,-66,936,842),52877=>array(66,-59,936,842),52878=>array(66,-60,936,842),52879=>array(66,-69,936,842),52880=>array(79,-69,907,842),52881=>array(66,-61,907,842),52882=>array(66,-61,907,842),52883=>array(66,-71,931,842),52884=>array(69,-46,907,842),52885=>array(66,-68,912,842),52886=>array(66,-76,907,842),52887=>array(66,-44,921,842),52888=>array(66,-62,917,842),52889=>array(66,-64,907,842),52890=>array(66,-64,908,842),52891=>array(66,-64,908,842),52892=>array(66,-69,923,842),52893=>array(66,-64,908,842),52894=>array(66,-64,908,842),52895=>array(66,-76,907,842),52896=>array(66,-62,907,842),52897=>array(66,-61,907,842),52898=>array(66,-69,922,842),52899=>array(66,-74,929,842),52900=>array(66,-69,927,842),52901=>array(66,-68,911,842),52902=>array(66,-72,929,842),52903=>array(66,-70,936,842),52904=>array(66,-66,908,842),52905=>array(66,-59,916,842),52906=>array(66,-60,928,842),52907=>array(66,-68,908,842),52908=>array(74,-68,935,843),52909=>array(66,-59,936,842),52910=>array(66,-61,936,842),52911=>array(66,-71,936,842),52912=>array(69,-45,936,842),52913=>array(66,-69,936,842),52914=>array(66,-76,936,842),52915=>array(66,-44,936,842),52916=>array(66,-62,936,842),52917=>array(66,-64,936,842),52918=>array(66,-64,936,842),52919=>array(66,-64,936,842),52920=>array(66,-70,936,842),52921=>array(66,-64,936,842),52922=>array(66,-64,936,842),52923=>array(66,-76,936,842),52924=>array(66,-62,936,842),52925=>array(66,-61,936,842),52926=>array(66,-70,936,842),52927=>array(66,-74,936,842),52928=>array(66,-69,936,842),52929=>array(66,-67,936,842),52930=>array(66,-72,936,842),52931=>array(66,-71,936,842),52932=>array(66,-66,936,842),52933=>array(66,-59,936,842),52934=>array(66,-60,936,842),52935=>array(66,-69,936,842),52936=>array(79,-69,907,842),52937=>array(66,-61,907,842),52938=>array(66,-61,907,842),52939=>array(66,-71,931,842),52940=>array(69,-46,907,842),52941=>array(66,-68,912,842),52942=>array(66,-76,907,842),52943=>array(66,-44,921,842),52944=>array(66,-62,917,842),52945=>array(66,-64,907,842),52946=>array(66,-64,908,842),52947=>array(66,-64,908,842),52948=>array(66,-69,923,842),52949=>array(66,-64,908,842),52950=>array(66,-64,908,842),52951=>array(66,-76,907,842),52952=>array(66,-62,907,842),52953=>array(66,-61,907,842),52954=>array(66,-69,922,842),52955=>array(66,-74,929,842),52956=>array(66,-69,927,842),52957=>array(66,-68,911,842),52958=>array(66,-72,929,842),52959=>array(66,-70,936,842),52960=>array(66,-66,908,842),52961=>array(66,-59,916,842),52962=>array(66,-60,928,842),52963=>array(66,-68,908,842),52964=>array(104,-70,907,841),52965=>array(66,-61,907,841),52966=>array(66,-61,907,841),52967=>array(66,-71,931,841),52968=>array(69,-46,907,841),52969=>array(66,-68,912,841),52970=>array(66,-76,907,841),52971=>array(66,-44,921,841),52972=>array(66,-62,917,841),52973=>array(66,-64,907,841),52974=>array(66,-64,908,841),52975=>array(66,-64,908,841),52976=>array(66,-69,923,841),52977=>array(66,-64,908,841),52978=>array(66,-64,908,841),52979=>array(66,-76,906,841),52980=>array(66,-62,907,841),52981=>array(66,-61,907,841),52982=>array(66,-69,922,841),52983=>array(66,-74,929,841),52984=>array(66,-69,927,841),52985=>array(66,-68,911,841),52986=>array(66,-72,929,841),52987=>array(66,-70,936,841),52988=>array(66,-66,908,841),52989=>array(66,-59,916,841),52990=>array(66,-60,928,841),52991=>array(66,-68,908,841),52992=>array(97,-68,907,843),52993=>array(66,-61,907,843),52994=>array(66,-61,907,843),52995=>array(66,-71,931,843),52996=>array(69,-46,907,843),52997=>array(66,-68,912,843),52998=>array(66,-76,907,843),52999=>array(66,-44,921,843),53000=>array(66,-62,917,843),53001=>array(66,-64,907,843),53002=>array(66,-64,908,843),53003=>array(66,-64,908,843),53004=>array(66,-69,923,843),53005=>array(66,-64,908,843),53006=>array(66,-64,908,843),53007=>array(66,-76,907,843),53008=>array(66,-62,907,843),53009=>array(66,-61,907,843),53010=>array(66,-69,922,843),53011=>array(66,-74,929,843),53012=>array(66,-69,927,843),53013=>array(66,-68,911,843),53014=>array(66,-72,929,843),53015=>array(66,-70,936,843),53016=>array(66,-66,908,843),53017=>array(66,-59,916,843),53018=>array(66,-60,928,843),53019=>array(66,-68,908,843),53020=>array(104,-70,907,842),53021=>array(66,-61,908,842),53022=>array(66,-61,908,842),53023=>array(66,-71,931,842),53024=>array(69,-46,907,842),53025=>array(66,-68,912,842),53026=>array(66,-76,908,842),53027=>array(66,-44,921,842),53028=>array(66,-62,917,842),53029=>array(66,-64,908,842),53030=>array(66,-64,908,842),53031=>array(66,-64,908,842),53032=>array(66,-69,923,842),53033=>array(66,-64,908,842),53034=>array(66,-64,908,842),53035=>array(66,-76,908,842),53036=>array(66,-62,908,842),53037=>array(66,-61,908,842),53038=>array(66,-69,922,842),53039=>array(66,-74,929,842),53040=>array(66,-69,927,842),53041=>array(66,-68,911,842),53042=>array(66,-72,929,842),53043=>array(66,-70,936,842),53044=>array(66,-66,908,842),53045=>array(66,-59,916,842),53046=>array(66,-60,928,842),53047=>array(66,-68,908,842),53048=>array(97,-68,907,843),53049=>array(66,-61,907,843),53050=>array(66,-61,907,843),53051=>array(66,-71,931,843),53052=>array(64,-46,907,843),53053=>array(66,-68,912,843),53054=>array(66,-76,907,843),53055=>array(66,-44,921,843),53056=>array(66,-62,917,843),53057=>array(66,-64,907,843),53058=>array(66,-64,908,843),53059=>array(66,-64,908,843),53060=>array(66,-69,923,843),53061=>array(66,-64,908,843),53062=>array(66,-64,908,843),53063=>array(66,-76,907,843),53064=>array(66,-62,907,843),53065=>array(66,-61,907,843),53066=>array(66,-69,922,843),53067=>array(66,-74,929,843),53068=>array(66,-69,927,843),53069=>array(66,-68,911,843),53070=>array(66,-72,929,843),53071=>array(66,-70,936,843),53072=>array(66,-66,908,843),53073=>array(66,-59,916,843),53074=>array(66,-60,928,843),53075=>array(66,-68,908,843),53076=>array(62,22,943,725),53077=>array(79,-61,921,775),53078=>array(79,-61,921,775),53079=>array(79,-71,921,775),53080=>array(79,-46,922,775),53081=>array(79,-68,921,775),53082=>array(79,-74,921,775),53083=>array(79,-44,921,775),53084=>array(79,-62,921,775),53085=>array(79,-64,921,775),53086=>array(79,-64,921,775),53087=>array(79,-63,921,775),53088=>array(79,-68,921,775),53089=>array(79,-64,921,775),53090=>array(79,-63,921,775),53091=>array(79,-74,921,775),53092=>array(79,-62,921,775),53093=>array(79,-61,921,775),53094=>array(79,-69,921,775),53095=>array(79,-74,921,775),53096=>array(79,-69,921,775),53097=>array(79,-68,921,775),53098=>array(79,-72,921,775),53099=>array(79,-70,921,775),53100=>array(79,-66,921,775),53101=>array(79,-59,921,775),53102=>array(79,-60,921,775),53103=>array(79,-68,921,775),53104=>array(68,-69,936,842),53105=>array(65,-59,936,842),53106=>array(65,-61,936,842),53107=>array(65,-71,936,842),53108=>array(72,-45,936,842),53109=>array(65,-69,936,842),53110=>array(65,-76,936,842),53111=>array(65,-44,936,842),53112=>array(65,-62,936,842),53113=>array(65,-64,936,842),53114=>array(65,-64,936,842),53115=>array(65,-64,936,842),53116=>array(65,-70,936,842),53117=>array(65,-64,936,842),53118=>array(65,-64,936,842),53119=>array(65,-76,936,842),53120=>array(65,-62,936,842),53121=>array(65,-61,936,842),53122=>array(65,-70,936,842),53123=>array(65,-74,936,842),53124=>array(65,-69,936,842),53125=>array(65,-67,936,842),53126=>array(65,-72,936,842),53127=>array(65,-71,936,842),53128=>array(65,-66,936,842),53129=>array(65,-59,936,842),53130=>array(65,-60,936,842),53131=>array(65,-69,936,842),53132=>array(68,-69,907,842),53133=>array(77,-61,907,842),53134=>array(77,-61,907,842),53135=>array(77,-71,931,842),53136=>array(72,-46,907,842),53137=>array(77,-68,912,842),53138=>array(77,-76,907,842),53139=>array(77,-44,921,842),53140=>array(77,-62,917,842),53141=>array(77,-64,907,842),53142=>array(77,-64,908,842),53143=>array(77,-64,908,842),53144=>array(77,-69,923,842),53145=>array(77,-64,908,842),53146=>array(77,-64,908,842),53147=>array(77,-76,907,842),53148=>array(77,-62,907,842),53149=>array(77,-61,907,842),53150=>array(77,-69,922,842),53151=>array(77,-74,929,842),53152=>array(77,-69,927,842),53153=>array(77,-68,911,842),53154=>array(77,-72,929,842),53155=>array(77,-70,936,842),53156=>array(77,-66,908,842),53157=>array(77,-59,916,842),53158=>array(77,-60,928,842),53159=>array(77,-68,908,842),53160=>array(92,-69,907,842),53161=>array(65,-61,907,842),53162=>array(65,-61,907,842),53163=>array(65,-71,931,842),53164=>array(65,-46,907,842),53165=>array(65,-68,912,842),53166=>array(65,-76,907,842),53167=>array(65,-44,921,842),53168=>array(65,-62,917,842),53169=>array(65,-64,907,842),53170=>array(65,-64,908,842),53171=>array(65,-64,908,842),53172=>array(65,-69,923,842),53173=>array(65,-64,908,842),53174=>array(65,-64,908,842),53175=>array(65,-76,907,842),53176=>array(65,-62,907,842),53177=>array(65,-61,907,842),53178=>array(65,-69,922,842),53179=>array(65,-74,929,842),53180=>array(65,-69,927,842),53181=>array(65,-68,911,842),53182=>array(65,-72,929,842),53183=>array(65,-70,936,842),53184=>array(65,-66,908,842),53185=>array(65,-59,916,842),53186=>array(65,-60,928,842),53187=>array(65,-68,908,842),53188=>array(62,22,943,725),53189=>array(79,-61,922,775),53190=>array(79,-61,922,775),53191=>array(79,-71,922,775),53192=>array(79,-46,922,775),53193=>array(79,-68,922,775),53194=>array(79,-74,922,775),53195=>array(79,-44,922,775),53196=>array(79,-62,922,775),53197=>array(79,-64,922,775),53198=>array(79,-64,922,775),53199=>array(79,-63,922,775),53200=>array(79,-68,922,775),53201=>array(79,-64,922,775),53202=>array(79,-63,922,775),53203=>array(79,-74,922,775),53204=>array(79,-62,922,775),53205=>array(79,-61,922,775),53206=>array(79,-69,922,775),53207=>array(79,-74,922,775),53208=>array(79,-69,922,775),53209=>array(79,-68,922,775),53210=>array(79,-72,922,775),53211=>array(79,-70,922,775),53212=>array(79,-66,922,775),53213=>array(79,-59,922,775),53214=>array(79,-60,922,775),53215=>array(79,-68,922,775),53216=>array(87,-64,928,795),53217=>array(79,-61,921,790),53218=>array(79,-61,921,790),53219=>array(79,-71,921,790),53220=>array(79,-46,921,785),53221=>array(79,-68,921,790),53222=>array(79,-74,921,790),53223=>array(79,-44,921,790),53224=>array(79,-62,921,790),53225=>array(79,-64,921,790),53226=>array(79,-64,921,790),53227=>array(79,-63,921,790),53228=>array(79,-68,921,790),53229=>array(79,-64,921,790),53230=>array(79,-63,921,790),53231=>array(79,-74,921,790),53232=>array(79,-62,921,790),53233=>array(79,-61,921,790),53234=>array(79,-69,921,790),53235=>array(79,-74,921,790),53236=>array(79,-69,921,790),53237=>array(79,-68,921,790),53238=>array(79,-72,921,790),53239=>array(79,-70,921,790),53240=>array(79,-66,921,790),53241=>array(79,-59,921,790),53242=>array(79,-60,921,790),53243=>array(79,-68,921,790),53244=>array(70,-70,907,841),53245=>array(75,-61,908,844),53246=>array(75,-61,908,844),53247=>array(75,-71,931,844),53248=>array(76,-46,907,841),53249=>array(75,-68,912,844),53250=>array(75,-76,908,844),53251=>array(75,-44,921,844),53252=>array(75,-62,917,844),53253=>array(75,-64,908,844),53254=>array(75,-64,908,844),53255=>array(75,-64,908,844),53256=>array(75,-69,923,844),53257=>array(75,-64,908,844),53258=>array(75,-64,908,844),53259=>array(75,-76,908,844),53260=>array(75,-62,908,844),53261=>array(75,-61,908,844),53262=>array(75,-69,922,844),53263=>array(75,-74,929,844),53264=>array(75,-69,927,844),53265=>array(75,-68,911,844),53266=>array(75,-72,929,844),53267=>array(75,-70,936,844),53268=>array(75,-66,908,844),53269=>array(75,-59,916,844),53270=>array(75,-60,928,844),53271=>array(75,-68,908,844),53272=>array(61,-68,907,843),53273=>array(70,-61,907,843),53274=>array(70,-61,907,843),53275=>array(70,-71,931,843),53276=>array(76,-46,907,843),53277=>array(70,-68,912,843),53278=>array(70,-76,907,843),53279=>array(70,-44,921,843),53280=>array(70,-62,917,843),53281=>array(70,-64,907,843),53282=>array(70,-64,908,843),53283=>array(70,-64,908,843),53284=>array(70,-69,923,843),53285=>array(70,-64,908,843),53286=>array(70,-64,908,843),53287=>array(70,-76,907,843),53288=>array(70,-62,907,843),53289=>array(70,-61,907,843),53290=>array(70,-69,922,843),53291=>array(70,-74,929,843),53292=>array(70,-69,927,843),53293=>array(70,-68,911,843),53294=>array(70,-72,929,843),53295=>array(70,-70,936,843),53296=>array(70,-66,908,843),53297=>array(70,-59,916,843),53298=>array(70,-60,928,843),53299=>array(70,-68,908,843),53300=>array(67,-69,907,842),53301=>array(65,-61,907,842),53302=>array(65,-61,907,842),53303=>array(65,-71,931,842),53304=>array(65,-46,907,842),53305=>array(65,-68,912,842),53306=>array(65,-76,907,842),53307=>array(65,-44,921,842),53308=>array(65,-62,917,842),53309=>array(65,-64,907,842),53310=>array(65,-64,908,842),53311=>array(65,-64,908,842),53312=>array(65,-69,923,842),53313=>array(65,-64,908,842),53314=>array(65,-64,908,842),53315=>array(65,-76,907,842),53316=>array(65,-62,907,842),53317=>array(65,-61,907,842),53318=>array(65,-69,922,842),53319=>array(65,-74,929,842),53320=>array(65,-69,927,842),53321=>array(65,-68,911,842),53322=>array(65,-72,929,842),53323=>array(65,-70,936,842),53324=>array(65,-66,908,842),53325=>array(65,-59,916,842),53326=>array(65,-60,928,842),53327=>array(65,-68,908,842),53328=>array(87,-64,928,795),53329=>array(79,-61,921,785),53330=>array(79,-61,921,785),53331=>array(79,-71,921,785),53332=>array(96,-46,927,785),53333=>array(79,-68,921,785),53334=>array(79,-74,921,785),53335=>array(79,-44,921,785),53336=>array(79,-62,921,785),53337=>array(79,-64,921,785),53338=>array(79,-64,921,785),53339=>array(79,-63,921,785),53340=>array(79,-68,921,785),53341=>array(79,-64,921,785),53342=>array(79,-63,921,785),53343=>array(79,-74,921,785),53344=>array(79,-62,921,785),53345=>array(79,-61,921,785),53346=>array(79,-69,921,785),53347=>array(79,-74,921,785),53348=>array(79,-69,921,785),53349=>array(79,-68,921,785),53350=>array(79,-72,921,785),53351=>array(79,-70,921,785),53352=>array(79,-66,921,785),53353=>array(79,-59,921,785),53354=>array(79,-60,921,785),53355=>array(79,-68,921,785),53356=>array(67,27,943,700),53357=>array(79,-61,922,785),53358=>array(79,-61,922,785),53359=>array(79,-71,922,785),53360=>array(79,-46,921,785),53361=>array(79,-68,922,785),53362=>array(79,-74,922,785),53363=>array(79,-44,922,785),53364=>array(79,-62,922,785),53365=>array(79,-64,922,785),53366=>array(79,-64,922,785),53367=>array(79,-63,922,785),53368=>array(79,-68,922,785),53369=>array(79,-64,922,785),53370=>array(79,-63,922,785),53371=>array(79,-74,922,785),53372=>array(79,-62,922,785),53373=>array(79,-61,922,785),53374=>array(79,-69,922,785),53375=>array(79,-74,922,785),53376=>array(79,-69,922,785),53377=>array(79,-68,922,785),53378=>array(79,-72,922,785),53379=>array(79,-70,922,785),53380=>array(79,-66,922,785),53381=>array(79,-59,922,785),53382=>array(79,-60,922,785),53383=>array(79,-68,922,785),53384=>array(65,-69,907,842),53385=>array(59,-61,907,842),53386=>array(59,-61,907,842),53387=>array(59,-71,931,842),53388=>array(65,-46,907,842),53389=>array(59,-68,912,842),53390=>array(59,-76,907,842),53391=>array(59,-44,921,842),53392=>array(59,-62,917,842),53393=>array(59,-64,907,842),53394=>array(59,-64,908,842),53395=>array(59,-64,908,842),53396=>array(59,-69,923,842),53397=>array(59,-64,908,842),53398=>array(59,-64,908,842),53399=>array(59,-76,907,842),53400=>array(59,-62,907,842),53401=>array(59,-61,907,842),53402=>array(59,-69,922,842),53403=>array(59,-74,929,842),53404=>array(59,-69,927,842),53405=>array(59,-68,911,842),53406=>array(59,-72,929,842),53407=>array(59,-70,936,842),53408=>array(59,-66,908,842),53409=>array(59,-59,916,842),53410=>array(59,-60,928,842),53411=>array(59,-68,908,842),53412=>array(120,-69,907,842),53413=>array(67,-61,907,842),53414=>array(67,-61,907,842),53415=>array(67,-71,931,842),53416=>array(94,-46,907,842),53417=>array(67,-68,912,842),53418=>array(67,-76,907,842),53419=>array(67,-44,921,842),53420=>array(67,-62,917,842),53421=>array(67,-64,907,842),53422=>array(67,-64,908,842),53423=>array(67,-64,908,842),53424=>array(67,-69,923,842),53425=>array(67,-64,908,842),53426=>array(67,-64,908,842),53427=>array(67,-76,907,842),53428=>array(67,-62,907,842),53429=>array(67,-61,907,842),53430=>array(67,-69,922,842),53431=>array(67,-74,929,842),53432=>array(67,-69,927,842),53433=>array(67,-68,911,842),53434=>array(67,-72,929,842),53435=>array(67,-70,936,842),53436=>array(67,-66,908,842),53437=>array(67,-59,916,842),53438=>array(67,-60,928,842),53439=>array(67,-68,908,842),53440=>array(115,-69,936,842),53441=>array(115,-59,936,842),53442=>array(115,-61,936,842),53443=>array(115,-71,936,842),53444=>array(115,-45,936,842),53445=>array(115,-69,936,842),53446=>array(115,-76,936,842),53447=>array(115,-44,936,842),53448=>array(115,-62,936,842),53449=>array(115,-64,936,842),53450=>array(115,-64,936,842),53451=>array(115,-64,936,842),53452=>array(115,-70,936,842),53453=>array(115,-64,936,842),53454=>array(115,-64,936,842),53455=>array(115,-76,936,842),53456=>array(115,-62,936,842),53457=>array(115,-61,936,842),53458=>array(115,-70,936,842),53459=>array(115,-74,936,842),53460=>array(115,-69,936,842),53461=>array(115,-67,936,842),53462=>array(115,-72,936,842),53463=>array(115,-71,936,842),53464=>array(115,-66,936,842),53465=>array(115,-59,936,842),53466=>array(115,-60,936,842),53467=>array(115,-69,936,842),53468=>array(115,-69,907,842),53469=>array(115,-61,907,842),53470=>array(115,-61,907,842),53471=>array(115,-71,931,842),53472=>array(115,-46,907,842),53473=>array(115,-68,912,842),53474=>array(115,-76,907,842),53475=>array(115,-44,921,842),53476=>array(115,-62,917,842),53477=>array(115,-64,907,842),53478=>array(115,-64,908,842),53479=>array(115,-64,908,842),53480=>array(115,-69,923,842),53481=>array(115,-64,908,842),53482=>array(115,-64,908,842),53483=>array(115,-76,907,842),53484=>array(115,-62,907,842),53485=>array(115,-61,907,842),53486=>array(115,-69,922,842),53487=>array(115,-74,929,842),53488=>array(115,-69,927,842),53489=>array(115,-68,911,842),53490=>array(115,-72,929,842),53491=>array(115,-70,936,842),53492=>array(115,-66,908,842),53493=>array(115,-59,916,842),53494=>array(115,-60,928,842),53495=>array(115,-68,908,842),53496=>array(114,-68,935,843),53497=>array(115,-59,936,842),53498=>array(115,-61,936,842),53499=>array(115,-71,936,842),53500=>array(115,-45,936,842),53501=>array(115,-69,936,842),53502=>array(115,-76,936,842),53503=>array(115,-44,936,842),53504=>array(115,-62,936,842),53505=>array(115,-64,936,842),53506=>array(115,-64,936,842),53507=>array(115,-64,936,842),53508=>array(115,-70,936,842),53509=>array(115,-64,936,842),53510=>array(115,-64,936,842),53511=>array(115,-76,936,842),53512=>array(115,-62,936,842),53513=>array(115,-61,936,842),53514=>array(115,-70,936,842),53515=>array(115,-74,936,842),53516=>array(115,-69,936,842),53517=>array(115,-67,936,842),53518=>array(115,-72,936,842),53519=>array(115,-71,936,842),53520=>array(115,-66,936,842),53521=>array(115,-59,936,842),53522=>array(115,-60,936,842),53523=>array(115,-69,936,842),53524=>array(115,-69,907,842),53525=>array(115,-61,907,842),53526=>array(115,-61,907,842),53527=>array(115,-71,931,842),53528=>array(115,-46,907,842),53529=>array(115,-68,912,842),53530=>array(115,-76,907,842),53531=>array(115,-44,921,842),53532=>array(115,-62,917,842),53533=>array(115,-64,907,842),53534=>array(115,-64,908,842),53535=>array(115,-64,908,842),53536=>array(115,-69,923,842),53537=>array(115,-64,908,842),53538=>array(115,-64,908,842),53539=>array(115,-76,907,842),53540=>array(115,-62,907,842),53541=>array(115,-61,907,842),53542=>array(115,-69,922,842),53543=>array(115,-74,929,842),53544=>array(115,-69,927,842),53545=>array(115,-68,911,842),53546=>array(115,-72,929,842),53547=>array(115,-70,936,842),53548=>array(115,-66,908,842),53549=>array(115,-59,916,842),53550=>array(115,-60,928,842),53551=>array(115,-68,908,842),53552=>array(115,-70,907,841),53553=>array(115,-61,907,841),53554=>array(115,-61,907,841),53555=>array(115,-71,931,841),53556=>array(115,-46,907,841),53557=>array(115,-68,912,841),53558=>array(115,-76,907,841),53559=>array(115,-44,921,841),53560=>array(115,-62,917,841),53561=>array(115,-64,907,841),53562=>array(115,-64,908,841),53563=>array(115,-64,908,841),53564=>array(115,-69,923,841),53565=>array(115,-64,908,841),53566=>array(115,-64,908,841),53567=>array(115,-76,906,841),53568=>array(115,-62,907,841),53569=>array(115,-61,907,841),53570=>array(115,-69,922,841),53571=>array(115,-74,929,841),53572=>array(115,-69,927,841),53573=>array(115,-68,911,841),53574=>array(115,-72,929,841),53575=>array(115,-70,936,841),53576=>array(115,-66,908,841),53577=>array(115,-59,916,841),53578=>array(115,-60,928,841),53579=>array(115,-68,908,841),53580=>array(115,-68,907,843),53581=>array(115,-61,907,843),53582=>array(115,-61,907,843),53583=>array(115,-71,931,843),53584=>array(115,-46,907,843),53585=>array(115,-68,912,843),53586=>array(115,-76,907,843),53587=>array(115,-44,921,843),53588=>array(115,-62,917,843),53589=>array(115,-64,907,843),53590=>array(115,-64,908,843),53591=>array(115,-64,908,843),53592=>array(115,-69,923,843),53593=>array(115,-64,908,843),53594=>array(115,-64,908,843),53595=>array(115,-76,907,843),53596=>array(115,-62,907,843),53597=>array(115,-61,907,843),53598=>array(115,-69,922,843),53599=>array(115,-74,929,843),53600=>array(115,-69,927,843),53601=>array(115,-68,911,843),53602=>array(115,-72,929,843),53603=>array(115,-70,936,843),53604=>array(115,-66,908,843),53605=>array(115,-59,916,843),53606=>array(115,-60,928,843),53607=>array(115,-68,908,843),53608=>array(115,-70,907,842),53609=>array(115,-61,908,842),53610=>array(115,-61,908,842),53611=>array(115,-71,931,842),53612=>array(115,-46,907,842),53613=>array(115,-68,912,842),53614=>array(115,-76,908,842),53615=>array(115,-44,921,842),53616=>array(115,-62,917,842),53617=>array(115,-64,908,842),53618=>array(115,-64,908,842),53619=>array(115,-64,908,842),53620=>array(115,-69,923,842),53621=>array(115,-64,908,842),53622=>array(115,-64,908,842),53623=>array(115,-76,908,842),53624=>array(115,-62,908,842),53625=>array(115,-61,908,842),53626=>array(115,-69,922,842),53627=>array(115,-74,929,842),53628=>array(115,-69,927,842),53629=>array(115,-68,911,842),53630=>array(115,-72,929,842),53631=>array(115,-70,936,842),53632=>array(115,-66,908,842),53633=>array(115,-59,916,842),53634=>array(115,-60,928,842),53635=>array(115,-68,908,842),53636=>array(115,-68,907,843),53637=>array(115,-61,907,843),53638=>array(115,-61,907,843),53639=>array(115,-71,931,843),53640=>array(115,-46,907,843),53641=>array(115,-68,912,843),53642=>array(115,-76,907,843),53643=>array(115,-44,921,843),53644=>array(115,-62,917,843),53645=>array(115,-64,907,843),53646=>array(115,-64,908,843),53647=>array(115,-64,908,843),53648=>array(115,-69,923,843),53649=>array(115,-64,908,843),53650=>array(115,-64,908,843),53651=>array(115,-76,907,843),53652=>array(115,-62,907,843),53653=>array(115,-61,907,843),53654=>array(115,-69,922,843),53655=>array(115,-74,929,843),53656=>array(115,-69,927,843),53657=>array(115,-68,911,843),53658=>array(115,-72,929,843),53659=>array(115,-70,936,843),53660=>array(115,-66,908,843),53661=>array(115,-59,916,843),53662=>array(115,-60,928,843),53663=>array(115,-68,908,843),53664=>array(62,17,943,757),53665=>array(79,-61,921,799),53666=>array(79,-61,921,799),53667=>array(79,-71,921,799),53668=>array(79,-46,922,789),53669=>array(79,-68,921,799),53670=>array(79,-74,921,799),53671=>array(79,-44,921,799),53672=>array(79,-62,921,799),53673=>array(79,-64,921,799),53674=>array(79,-64,921,799),53675=>array(79,-63,921,799),53676=>array(79,-68,921,799),53677=>array(79,-64,921,799),53678=>array(79,-63,921,799),53679=>array(79,-74,921,799),53680=>array(79,-62,921,799),53681=>array(79,-61,921,799),53682=>array(79,-69,921,799),53683=>array(79,-74,921,799),53684=>array(79,-69,921,799),53685=>array(79,-68,921,799),53686=>array(79,-72,921,799),53687=>array(79,-70,921,799),53688=>array(79,-66,921,799),53689=>array(79,-59,921,799),53690=>array(79,-60,921,799),53691=>array(79,-68,921,799),53692=>array(53,-69,936,842),53693=>array(77,-59,936,842),53694=>array(77,-61,936,842),53695=>array(77,-71,936,842),53696=>array(77,-45,936,842),53697=>array(77,-69,936,842),53698=>array(77,-76,936,842),53699=>array(77,-44,936,842),53700=>array(77,-62,936,842),53701=>array(77,-64,936,842),53702=>array(77,-64,936,842),53703=>array(77,-64,936,842),53704=>array(77,-70,936,842),53705=>array(77,-64,936,842),53706=>array(77,-64,936,842),53707=>array(77,-76,936,842),53708=>array(77,-62,936,842),53709=>array(77,-61,936,842),53710=>array(77,-70,936,842),53711=>array(77,-74,936,842),53712=>array(77,-69,936,842),53713=>array(77,-67,936,842),53714=>array(77,-72,936,842),53715=>array(77,-71,936,842),53716=>array(77,-66,936,842),53717=>array(77,-59,936,842),53718=>array(77,-60,936,842),53719=>array(77,-69,936,842),53720=>array(43,-69,907,842),53721=>array(77,-61,907,842),53722=>array(77,-61,907,842),53723=>array(77,-71,931,842),53724=>array(77,-46,907,842),53725=>array(77,-68,912,842),53726=>array(77,-76,907,842),53727=>array(77,-44,921,842),53728=>array(77,-62,917,842),53729=>array(77,-64,907,842),53730=>array(77,-64,908,842),53731=>array(77,-64,908,842),53732=>array(77,-69,923,842),53733=>array(77,-64,908,842),53734=>array(77,-64,908,842),53735=>array(77,-76,907,842),53736=>array(77,-62,907,842),53737=>array(77,-61,907,842),53738=>array(77,-69,922,842),53739=>array(77,-74,929,842),53740=>array(77,-69,927,842),53741=>array(77,-68,911,842),53742=>array(77,-72,929,842),53743=>array(77,-70,936,842),53744=>array(77,-66,908,842),53745=>array(77,-59,916,842),53746=>array(77,-60,928,842),53747=>array(77,-68,908,842),53748=>array(53,-68,907,843),53749=>array(65,-61,907,842),53750=>array(65,-61,907,842),53751=>array(65,-71,931,842),53752=>array(65,-46,907,842),53753=>array(65,-68,912,842),53754=>array(65,-76,907,842),53755=>array(65,-44,921,842),53756=>array(65,-62,917,842),53757=>array(65,-64,907,842),53758=>array(65,-64,908,842),53759=>array(65,-64,908,842),53760=>array(65,-69,923,842),53761=>array(65,-64,908,842),53762=>array(65,-64,908,842),53763=>array(65,-76,907,842),53764=>array(65,-62,907,842),53765=>array(65,-61,907,842),53766=>array(65,-69,922,842),53767=>array(65,-74,929,842),53768=>array(65,-69,927,842),53769=>array(65,-68,911,842),53770=>array(65,-72,929,842),53771=>array(65,-70,936,842),53772=>array(65,-66,908,842),53773=>array(65,-59,916,842),53774=>array(65,-60,928,842),53775=>array(65,-68,908,842),53776=>array(62,7,943,777),53777=>array(79,-61,921,799),53778=>array(79,-61,921,799),53779=>array(79,-71,921,799),53780=>array(79,-46,921,794),53781=>array(79,-68,921,799),53782=>array(79,-74,921,799),53783=>array(79,-44,921,799),53784=>array(79,-62,921,799),53785=>array(79,-64,921,799),53786=>array(79,-64,921,799),53787=>array(79,-63,921,799),53788=>array(79,-68,921,799),53789=>array(79,-64,921,799),53790=>array(79,-63,921,799),53791=>array(79,-74,921,799),53792=>array(79,-62,921,799),53793=>array(79,-61,921,799),53794=>array(79,-69,921,799),53795=>array(79,-74,921,799),53796=>array(79,-69,921,799),53797=>array(79,-68,921,799),53798=>array(79,-72,921,799),53799=>array(79,-70,921,799),53800=>array(79,-66,921,799),53801=>array(79,-59,921,799),53802=>array(79,-60,921,799),53803=>array(79,-68,921,799),53804=>array(82,-64,924,789),53805=>array(79,-61,921,799),53806=>array(79,-61,921,799),53807=>array(79,-71,921,799),53808=>array(79,-46,921,789),53809=>array(79,-68,921,799),53810=>array(79,-74,921,799),53811=>array(79,-44,921,799),53812=>array(79,-62,921,799),53813=>array(79,-64,921,799),53814=>array(79,-64,921,799),53815=>array(79,-63,921,799),53816=>array(79,-68,921,799),53817=>array(79,-64,921,799),53818=>array(79,-63,921,799),53819=>array(79,-74,921,799),53820=>array(79,-62,921,799),53821=>array(79,-61,921,799),53822=>array(79,-69,921,799),53823=>array(79,-74,921,799),53824=>array(79,-69,921,799),53825=>array(79,-68,921,799),53826=>array(79,-72,921,799),53827=>array(79,-70,921,799),53828=>array(79,-66,921,799),53829=>array(79,-59,921,799),53830=>array(79,-60,921,799),53831=>array(79,-68,921,799),53832=>array(76,-70,907,841),53833=>array(74,-61,909,843),53834=>array(74,-61,909,843),53835=>array(74,-71,931,843),53836=>array(75,-46,909,843),53837=>array(74,-68,912,843),53838=>array(74,-76,909,843),53839=>array(74,-44,921,843),53840=>array(74,-62,917,843),53841=>array(74,-64,909,843),53842=>array(74,-64,909,843),53843=>array(74,-64,909,843),53844=>array(74,-69,923,843),53845=>array(74,-64,909,843),53846=>array(74,-64,909,843),53847=>array(74,-76,909,843),53848=>array(74,-62,909,843),53849=>array(74,-61,909,843),53850=>array(74,-69,922,843),53851=>array(74,-74,929,843),53852=>array(74,-69,927,843),53853=>array(74,-68,911,843),53854=>array(74,-72,929,843),53855=>array(74,-70,936,843),53856=>array(74,-66,909,843),53857=>array(74,-59,916,843),53858=>array(74,-60,928,843),53859=>array(74,-68,909,843),53860=>array(56,-68,907,843),53861=>array(68,-61,907,843),53862=>array(68,-61,907,843),53863=>array(68,-71,931,843),53864=>array(74,-46,907,843),53865=>array(68,-68,912,843),53866=>array(68,-76,907,843),53867=>array(68,-44,921,843),53868=>array(68,-62,917,843),53869=>array(68,-64,907,843),53870=>array(68,-64,908,843),53871=>array(68,-64,908,843),53872=>array(68,-69,923,843),53873=>array(68,-64,908,843),53874=>array(68,-64,908,843),53875=>array(68,-76,907,843),53876=>array(68,-62,907,843),53877=>array(68,-61,907,843),53878=>array(68,-69,922,843),53879=>array(68,-74,929,843),53880=>array(68,-69,927,843),53881=>array(68,-68,911,843),53882=>array(68,-72,929,843),53883=>array(68,-70,936,843),53884=>array(68,-66,908,843),53885=>array(68,-59,916,843),53886=>array(68,-60,928,843),53887=>array(68,-68,908,843),53888=>array(67,-69,907,842),53889=>array(65,-61,907,842),53890=>array(65,-61,907,842),53891=>array(65,-71,931,842),53892=>array(65,-46,907,842),53893=>array(65,-68,912,842),53894=>array(65,-76,907,842),53895=>array(65,-44,921,842),53896=>array(65,-62,917,842),53897=>array(65,-64,907,842),53898=>array(65,-64,908,842),53899=>array(65,-64,908,842),53900=>array(65,-69,923,842),53901=>array(65,-64,908,842),53902=>array(65,-64,908,842),53903=>array(65,-76,907,842),53904=>array(65,-62,907,842),53905=>array(65,-61,907,842),53906=>array(65,-69,922,842),53907=>array(65,-74,929,842),53908=>array(65,-69,927,842),53909=>array(65,-68,911,842),53910=>array(65,-72,929,842),53911=>array(65,-70,936,842),53912=>array(65,-66,908,842),53913=>array(65,-59,916,842),53914=>array(65,-60,928,842),53915=>array(65,-68,908,842),53916=>array(82,-64,924,784),53917=>array(79,-61,921,799),53918=>array(79,-61,921,799),53919=>array(79,-71,921,799),53920=>array(81,-46,922,789),53921=>array(79,-68,921,799),53922=>array(79,-74,921,799),53923=>array(79,-44,921,799),53924=>array(79,-62,921,799),53925=>array(79,-64,921,799),53926=>array(79,-64,921,799),53927=>array(79,-63,921,799),53928=>array(79,-68,921,799),53929=>array(79,-64,921,799),53930=>array(79,-63,921,799),53931=>array(79,-74,921,799),53932=>array(79,-62,921,799),53933=>array(79,-61,921,799),53934=>array(79,-69,921,799),53935=>array(79,-74,921,799),53936=>array(79,-69,921,799),53937=>array(79,-68,921,799),53938=>array(79,-72,921,799),53939=>array(79,-70,921,799),53940=>array(79,-66,921,799),53941=>array(79,-59,921,799),53942=>array(79,-60,921,799),53943=>array(79,-68,921,799),53944=>array(57,52,943,719),53945=>array(79,-61,922,796),53946=>array(79,-61,922,796),53947=>array(79,-71,922,796),53948=>array(79,-46,921,791),53949=>array(79,-68,922,796),53950=>array(79,-74,922,796),53951=>array(79,-44,922,796),53952=>array(79,-62,922,796),53953=>array(79,-64,922,796),53954=>array(79,-64,922,796),53955=>array(79,-63,922,796),53956=>array(79,-68,922,796),53957=>array(79,-64,922,796),53958=>array(79,-63,922,796),53959=>array(79,-74,922,796),53960=>array(79,-62,922,796),53961=>array(79,-61,922,796),53962=>array(79,-69,922,796),53963=>array(79,-74,922,796),53964=>array(79,-69,922,796),53965=>array(79,-68,922,796),53966=>array(79,-72,922,796),53967=>array(79,-70,922,796),53968=>array(79,-66,922,796),53969=>array(79,-59,922,796),53970=>array(79,-60,922,796),53971=>array(79,-68,922,796),53972=>array(67,-69,907,842),53973=>array(65,-61,907,842),53974=>array(65,-61,907,842),53975=>array(65,-71,931,842),53976=>array(65,-46,907,842),53977=>array(65,-68,912,842),53978=>array(65,-76,907,842),53979=>array(65,-44,921,842),53980=>array(65,-62,917,842),53981=>array(65,-64,907,842),53982=>array(65,-64,908,842),53983=>array(65,-64,908,842),53984=>array(65,-69,923,842),53985=>array(65,-64,908,842),53986=>array(65,-64,908,842),53987=>array(65,-76,907,842),53988=>array(65,-62,907,842),53989=>array(65,-61,907,842),53990=>array(65,-69,922,842),53991=>array(65,-74,929,842),53992=>array(65,-69,927,842),53993=>array(65,-68,911,842),53994=>array(65,-72,929,842),53995=>array(65,-70,936,842),53996=>array(65,-66,908,842),53997=>array(65,-59,916,842),53998=>array(65,-60,928,842),53999=>array(65,-68,908,842),54000=>array(125,-69,907,842),54001=>array(130,-61,907,842),54002=>array(130,-61,907,842),54003=>array(130,-71,931,842),54004=>array(125,-46,907,842),54005=>array(130,-68,912,842),54006=>array(130,-76,907,842),54007=>array(130,-44,921,842),54008=>array(130,-62,917,842),54009=>array(130,-64,907,842),54010=>array(130,-64,908,842),54011=>array(130,-64,908,842),54012=>array(130,-69,923,842),54013=>array(130,-64,908,842),54014=>array(130,-64,908,842),54015=>array(130,-76,907,842),54016=>array(130,-62,907,842),54017=>array(130,-61,907,842),54018=>array(130,-69,922,842),54019=>array(130,-74,929,842),54020=>array(130,-69,927,842),54021=>array(130,-68,911,842),54022=>array(130,-72,929,842),54023=>array(130,-70,936,842),54024=>array(130,-66,908,842),54025=>array(130,-59,916,842),54026=>array(130,-60,928,842),54027=>array(130,-68,908,842),54028=>array(84,-69,936,842),54029=>array(66,-59,936,842),54030=>array(66,-61,936,842),54031=>array(66,-71,936,842),54032=>array(78,-45,936,842),54033=>array(66,-69,936,842),54034=>array(66,-76,936,842),54035=>array(66,-44,936,842),54036=>array(66,-62,936,842),54037=>array(66,-64,936,842),54038=>array(66,-64,936,842),54039=>array(66,-64,936,842),54040=>array(66,-70,936,842),54041=>array(66,-64,936,842),54042=>array(66,-64,936,842),54043=>array(66,-76,936,842),54044=>array(66,-62,936,842),54045=>array(66,-61,936,842),54046=>array(66,-70,936,842),54047=>array(66,-74,936,842),54048=>array(66,-69,936,842),54049=>array(66,-67,936,842),54050=>array(66,-72,936,842),54051=>array(66,-71,936,842),54052=>array(66,-66,936,842),54053=>array(66,-59,936,842),54054=>array(66,-60,936,842),54055=>array(66,-69,936,842),54056=>array(73,-69,907,842),54057=>array(83,-61,907,842),54058=>array(83,-61,907,842),54059=>array(83,-71,931,842),54060=>array(78,-46,907,842),54061=>array(83,-68,912,842),54062=>array(83,-76,907,842),54063=>array(83,-44,921,842),54064=>array(83,-62,917,842),54065=>array(83,-64,907,842),54066=>array(83,-64,908,842),54067=>array(83,-64,908,842),54068=>array(83,-69,923,842),54069=>array(83,-64,908,842),54070=>array(83,-64,908,842),54071=>array(83,-76,907,842),54072=>array(83,-62,907,842),54073=>array(83,-61,907,842),54074=>array(83,-69,922,842),54075=>array(83,-74,929,842),54076=>array(83,-69,927,842),54077=>array(83,-68,911,842),54078=>array(83,-72,929,842),54079=>array(83,-70,936,842),54080=>array(83,-66,908,842),54081=>array(83,-59,916,842),54082=>array(83,-60,928,842),54083=>array(83,-68,908,842),54084=>array(84,-68,935,843),54085=>array(66,-59,936,842),54086=>array(66,-61,936,842),54087=>array(66,-71,936,842),54088=>array(78,-45,936,842),54089=>array(66,-69,936,842),54090=>array(66,-76,936,842),54091=>array(66,-44,936,842),54092=>array(66,-62,936,842),54093=>array(66,-64,936,842),54094=>array(66,-64,936,842),54095=>array(66,-64,936,842),54096=>array(66,-70,936,842),54097=>array(66,-64,936,842),54098=>array(66,-64,936,842),54099=>array(66,-76,936,842),54100=>array(66,-62,936,842),54101=>array(66,-61,936,842),54102=>array(66,-70,936,842),54103=>array(66,-74,936,842),54104=>array(66,-69,936,842),54105=>array(66,-67,936,842),54106=>array(66,-72,936,842),54107=>array(66,-71,936,842),54108=>array(66,-66,936,842),54109=>array(66,-59,936,842),54110=>array(66,-60,936,842),54111=>array(66,-69,936,842),54112=>array(73,-69,907,842),54113=>array(83,-61,907,842),54114=>array(83,-61,907,842),54115=>array(83,-71,931,842),54116=>array(78,-46,907,842),54117=>array(83,-68,912,842),54118=>array(83,-76,907,842),54119=>array(83,-44,921,842),54120=>array(83,-62,917,842),54121=>array(83,-64,907,842),54122=>array(83,-64,908,842),54123=>array(83,-64,908,842),54124=>array(83,-69,923,842),54125=>array(83,-64,908,842),54126=>array(83,-64,908,842),54127=>array(83,-76,907,842),54128=>array(83,-62,907,842),54129=>array(83,-61,907,842),54130=>array(83,-69,922,842),54131=>array(83,-74,929,842),54132=>array(83,-69,927,842),54133=>array(83,-68,911,842),54134=>array(83,-72,929,842),54135=>array(83,-70,936,842),54136=>array(83,-66,908,842),54137=>array(83,-59,916,842),54138=>array(83,-60,928,842),54139=>array(83,-68,908,842),54140=>array(84,-70,907,841),54141=>array(66,-61,907,841),54142=>array(66,-61,907,841),54143=>array(66,-71,931,841),54144=>array(78,-46,907,841),54145=>array(66,-68,912,841),54146=>array(66,-76,907,841),54147=>array(66,-44,921,841),54148=>array(66,-62,917,841),54149=>array(66,-64,907,841),54150=>array(66,-64,908,841),54151=>array(66,-64,908,841),54152=>array(66,-69,923,841),54153=>array(66,-64,908,841),54154=>array(66,-64,908,841),54155=>array(66,-76,906,841),54156=>array(66,-62,907,841),54157=>array(66,-61,907,841),54158=>array(66,-69,922,841),54159=>array(66,-74,929,841),54160=>array(66,-69,927,841),54161=>array(66,-68,911,841),54162=>array(66,-72,929,841),54163=>array(66,-70,936,841),54164=>array(66,-66,908,841),54165=>array(66,-59,916,841),54166=>array(66,-60,928,841),54167=>array(66,-68,908,841),54168=>array(63,-68,907,843),54169=>array(65,-61,907,843),54170=>array(65,-61,907,843),54171=>array(65,-71,931,843),54172=>array(83,-46,907,843),54173=>array(65,-68,912,843),54174=>array(65,-76,907,843),54175=>array(65,-44,921,843),54176=>array(65,-62,917,843),54177=>array(65,-64,907,843),54178=>array(65,-64,908,843),54179=>array(65,-64,908,843),54180=>array(65,-69,923,843),54181=>array(65,-64,908,843),54182=>array(65,-64,908,843),54183=>array(65,-76,907,843),54184=>array(65,-62,907,843),54185=>array(65,-61,907,843),54186=>array(65,-69,922,843),54187=>array(65,-74,929,843),54188=>array(65,-69,927,843),54189=>array(65,-68,911,843),54190=>array(65,-72,929,843),54191=>array(65,-70,936,843),54192=>array(65,-66,908,843),54193=>array(65,-59,916,843),54194=>array(65,-60,928,843),54195=>array(65,-68,908,843),54196=>array(74,-70,907,842),54197=>array(56,-61,908,842),54198=>array(56,-61,908,842),54199=>array(56,-71,931,842),54200=>array(68,-46,907,842),54201=>array(56,-68,912,842),54202=>array(56,-76,908,842),54203=>array(56,-44,921,842),54204=>array(56,-62,917,842),54205=>array(56,-64,908,842),54206=>array(56,-64,908,842),54207=>array(56,-64,908,842),54208=>array(56,-69,923,842),54209=>array(56,-64,908,842),54210=>array(56,-64,908,842),54211=>array(56,-76,908,842),54212=>array(56,-62,908,842),54213=>array(56,-61,908,842),54214=>array(56,-69,922,842),54215=>array(56,-74,929,842),54216=>array(56,-69,927,842),54217=>array(56,-68,911,842),54218=>array(56,-72,929,842),54219=>array(56,-70,936,842),54220=>array(56,-66,908,842),54221=>array(56,-59,916,842),54222=>array(56,-60,928,842),54223=>array(56,-68,908,842),54224=>array(63,-68,907,843),54225=>array(65,-61,907,843),54226=>array(65,-61,907,843),54227=>array(65,-71,931,843),54228=>array(83,-46,907,843),54229=>array(65,-68,912,843),54230=>array(65,-76,907,843),54231=>array(65,-44,921,843),54232=>array(65,-62,917,843),54233=>array(65,-64,907,843),54234=>array(65,-64,908,843),54235=>array(65,-64,908,843),54236=>array(65,-69,923,843),54237=>array(65,-64,908,843),54238=>array(65,-64,908,843),54239=>array(65,-76,907,843),54240=>array(65,-62,907,843),54241=>array(65,-61,907,843),54242=>array(65,-69,922,843),54243=>array(65,-74,929,843),54244=>array(65,-69,927,843),54245=>array(65,-68,911,843),54246=>array(65,-72,929,843),54247=>array(65,-70,936,843),54248=>array(65,-66,908,843),54249=>array(65,-59,916,843),54250=>array(65,-60,928,843),54251=>array(65,-68,908,843),54252=>array(62,22,938,724),54253=>array(79,-61,921,799),54254=>array(79,-61,921,799),54255=>array(79,-71,921,799),54256=>array(79,-46,922,799),54257=>array(79,-68,921,799),54258=>array(79,-74,921,799),54259=>array(79,-44,921,799),54260=>array(79,-62,921,799),54261=>array(79,-64,921,799),54262=>array(79,-64,921,799),54263=>array(79,-63,921,799),54264=>array(79,-68,921,799),54265=>array(79,-64,921,799),54266=>array(79,-63,921,799),54267=>array(79,-74,921,799),54268=>array(79,-62,921,799),54269=>array(79,-61,921,799),54270=>array(79,-69,921,799),54271=>array(79,-74,921,799),54272=>array(79,-69,921,799),54273=>array(79,-68,921,799),54274=>array(79,-72,921,799),54275=>array(79,-70,921,799),54276=>array(79,-66,921,799),54277=>array(79,-59,921,799),54278=>array(79,-60,921,799),54279=>array(79,-68,921,799),54280=>array(68,-69,936,842),54281=>array(77,-59,936,842),54282=>array(77,-61,936,842),54283=>array(77,-71,936,842),54284=>array(77,-45,936,842),54285=>array(77,-69,936,842),54286=>array(77,-76,936,842),54287=>array(77,-44,936,842),54288=>array(77,-62,936,842),54289=>array(77,-64,936,842),54290=>array(77,-64,936,842),54291=>array(77,-64,936,842),54292=>array(77,-70,936,842),54293=>array(77,-64,936,842),54294=>array(77,-64,936,842),54295=>array(77,-76,936,842),54296=>array(77,-62,936,842),54297=>array(77,-61,936,842),54298=>array(77,-70,936,842),54299=>array(77,-74,936,842),54300=>array(77,-69,936,842),54301=>array(77,-67,936,842),54302=>array(77,-72,936,842),54303=>array(77,-71,936,842),54304=>array(77,-66,936,842),54305=>array(77,-59,936,842),54306=>array(77,-60,936,842),54307=>array(77,-69,936,842),54308=>array(59,-69,907,842),54309=>array(77,-61,907,842),54310=>array(77,-61,907,842),54311=>array(77,-71,931,842),54312=>array(67,-46,907,842),54313=>array(77,-68,912,842),54314=>array(77,-76,907,842),54315=>array(77,-44,921,842),54316=>array(77,-62,917,842),54317=>array(77,-64,907,842),54318=>array(77,-64,908,842),54319=>array(77,-64,908,842),54320=>array(77,-69,923,842),54321=>array(77,-64,908,842),54322=>array(77,-64,908,842),54323=>array(77,-76,907,842),54324=>array(77,-62,907,842),54325=>array(77,-61,907,842),54326=>array(77,-69,922,842),54327=>array(77,-74,929,842),54328=>array(77,-69,927,842),54329=>array(77,-68,911,842),54330=>array(77,-72,929,842),54331=>array(77,-70,936,842),54332=>array(77,-66,908,842),54333=>array(77,-59,916,842),54334=>array(77,-60,928,842),54335=>array(77,-68,908,842),54336=>array(53,-68,908,843),54337=>array(65,-61,907,842),54338=>array(65,-61,907,842),54339=>array(65,-71,931,842),54340=>array(65,-46,907,842),54341=>array(65,-68,912,842),54342=>array(65,-76,907,842),54343=>array(65,-44,921,842),54344=>array(65,-62,917,842),54345=>array(65,-64,907,842),54346=>array(65,-64,908,842),54347=>array(65,-64,908,842),54348=>array(65,-69,923,842),54349=>array(65,-64,908,842),54350=>array(65,-64,908,842),54351=>array(65,-76,907,842),54352=>array(65,-62,907,842),54353=>array(65,-61,907,842),54354=>array(65,-69,922,842),54355=>array(65,-74,929,842),54356=>array(65,-69,927,842),54357=>array(65,-68,911,842),54358=>array(65,-72,929,842),54359=>array(65,-70,936,842),54360=>array(65,-66,908,842),54361=>array(65,-59,916,842),54362=>array(65,-60,928,842),54363=>array(65,-68,908,842),54364=>array(60,17,940,739),54365=>array(79,-61,921,799),54366=>array(79,-61,921,799),54367=>array(79,-71,921,799),54368=>array(79,-46,921,799),54369=>array(79,-68,921,799),54370=>array(79,-74,921,799),54371=>array(79,-44,921,799),54372=>array(79,-62,921,799),54373=>array(79,-64,921,799),54374=>array(79,-64,921,799),54375=>array(79,-63,921,799),54376=>array(79,-68,921,799),54377=>array(79,-64,921,799),54378=>array(79,-63,921,799),54379=>array(79,-74,921,799),54380=>array(79,-62,921,799),54381=>array(79,-61,921,799),54382=>array(79,-69,921,799),54383=>array(79,-74,921,799),54384=>array(79,-69,921,799),54385=>array(79,-68,921,799),54386=>array(79,-72,921,799),54387=>array(79,-70,921,799),54388=>array(79,-66,921,799),54389=>array(79,-59,921,799),54390=>array(79,-60,921,799),54391=>array(79,-68,921,799),54392=>array(79,-64,921,794),54393=>array(79,-61,921,799),54394=>array(79,-61,921,799),54395=>array(79,-71,921,799),54396=>array(79,-46,921,799),54397=>array(79,-68,921,799),54398=>array(79,-74,921,799),54399=>array(79,-44,921,799),54400=>array(79,-62,921,799),54401=>array(79,-64,921,799),54402=>array(79,-64,921,799),54403=>array(79,-63,921,799),54404=>array(79,-68,921,799),54405=>array(79,-64,921,799),54406=>array(79,-63,921,799),54407=>array(79,-74,921,799),54408=>array(79,-62,921,799),54409=>array(79,-61,921,799),54410=>array(79,-69,921,799),54411=>array(79,-74,921,799),54412=>array(79,-69,921,799),54413=>array(79,-68,921,799),54414=>array(79,-72,921,799),54415=>array(79,-70,921,799),54416=>array(79,-66,921,799),54417=>array(79,-59,921,799),54418=>array(79,-60,921,799),54419=>array(79,-68,921,799),54420=>array(67,-65,882,841),54421=>array(72,-61,907,836),54422=>array(72,-61,907,836),54423=>array(72,-71,931,836),54424=>array(75,-46,907,841),54425=>array(72,-68,912,836),54426=>array(72,-76,907,836),54427=>array(72,-44,921,836),54428=>array(72,-62,917,836),54429=>array(72,-64,907,836),54430=>array(72,-64,908,836),54431=>array(72,-64,908,836),54432=>array(72,-69,923,836),54433=>array(72,-64,908,836),54434=>array(72,-64,908,836),54435=>array(72,-76,906,836),54436=>array(72,-62,907,836),54437=>array(72,-61,907,836),54438=>array(72,-69,922,836),54439=>array(72,-74,929,836),54440=>array(72,-69,927,836),54441=>array(72,-68,911,836),54442=>array(72,-72,929,836),54443=>array(72,-70,936,836),54444=>array(72,-66,908,836),54445=>array(72,-59,916,836),54446=>array(72,-60,928,836),54447=>array(72,-68,908,836),54448=>array(62,-63,912,843),54449=>array(70,-61,907,838),54450=>array(70,-61,907,838),54451=>array(70,-71,931,838),54452=>array(76,-46,907,843),54453=>array(70,-68,912,838),54454=>array(70,-76,907,838),54455=>array(70,-44,921,838),54456=>array(70,-62,917,838),54457=>array(70,-64,907,838),54458=>array(70,-64,908,838),54459=>array(70,-64,908,838),54460=>array(70,-69,923,838),54461=>array(70,-64,908,838),54462=>array(70,-64,908,838),54463=>array(70,-76,906,838),54464=>array(70,-62,907,838),54465=>array(70,-61,907,838),54466=>array(70,-69,922,838),54467=>array(70,-74,929,838),54468=>array(70,-69,927,838),54469=>array(70,-68,911,838),54470=>array(70,-72,929,838),54471=>array(70,-70,936,838),54472=>array(70,-66,908,838),54473=>array(70,-59,916,838),54474=>array(70,-60,928,838),54475=>array(70,-68,908,838),54476=>array(71,-69,907,842),54477=>array(65,-61,907,842),54478=>array(65,-61,907,842),54479=>array(65,-71,931,842),54480=>array(65,-46,907,842),54481=>array(65,-68,912,842),54482=>array(65,-76,907,842),54483=>array(65,-44,921,842),54484=>array(65,-62,917,842),54485=>array(65,-64,907,842),54486=>array(65,-64,908,842),54487=>array(65,-64,908,842),54488=>array(65,-69,923,842),54489=>array(65,-64,908,842),54490=>array(65,-64,908,842),54491=>array(65,-76,907,842),54492=>array(65,-62,907,842),54493=>array(65,-61,907,842),54494=>array(65,-69,922,842),54495=>array(65,-74,929,842),54496=>array(65,-69,927,842),54497=>array(65,-68,911,842),54498=>array(65,-72,929,842),54499=>array(65,-70,936,842),54500=>array(65,-66,908,842),54501=>array(65,-59,916,842),54502=>array(65,-60,928,842),54503=>array(65,-68,908,842),54504=>array(79,-64,921,794),54505=>array(79,-61,921,799),54506=>array(79,-61,921,799),54507=>array(79,-71,921,799),54508=>array(81,-46,922,799),54509=>array(79,-68,921,799),54510=>array(79,-74,921,799),54511=>array(79,-44,921,799),54512=>array(79,-62,921,799),54513=>array(79,-64,921,799),54514=>array(79,-64,921,799),54515=>array(79,-63,921,799),54516=>array(79,-68,921,799),54517=>array(79,-64,921,799),54518=>array(79,-63,921,799),54519=>array(79,-74,921,799),54520=>array(79,-62,921,799),54521=>array(79,-61,921,799),54522=>array(79,-69,921,799),54523=>array(79,-74,921,799),54524=>array(79,-69,921,799),54525=>array(79,-68,921,799),54526=>array(79,-72,921,799),54527=>array(79,-70,921,799),54528=>array(79,-66,921,799),54529=>array(79,-59,921,799),54530=>array(79,-60,921,799),54531=>array(79,-68,921,799),54532=>array(57,52,943,724),54533=>array(79,-61,922,799),54534=>array(79,-61,922,799),54535=>array(79,-71,922,799),54536=>array(79,-46,921,799),54537=>array(79,-68,922,799),54538=>array(79,-74,922,799),54539=>array(79,-44,922,799),54540=>array(79,-62,922,799),54541=>array(79,-64,922,799),54542=>array(79,-64,922,799),54543=>array(79,-63,922,799),54544=>array(79,-68,922,799),54545=>array(79,-64,922,799),54546=>array(79,-63,922,799),54547=>array(79,-74,922,799),54548=>array(79,-62,922,799),54549=>array(79,-61,922,799),54550=>array(79,-69,922,799),54551=>array(79,-74,922,799),54552=>array(79,-69,922,799),54553=>array(79,-68,922,799),54554=>array(79,-72,922,799),54555=>array(79,-70,922,799),54556=>array(79,-66,922,799),54557=>array(79,-59,922,799),54558=>array(79,-60,922,799),54559=>array(79,-68,922,799),54560=>array(67,-69,907,842),54561=>array(65,-61,907,842),54562=>array(65,-61,907,842),54563=>array(65,-71,931,842),54564=>array(65,-46,907,842),54565=>array(65,-68,912,842),54566=>array(65,-76,907,842),54567=>array(65,-44,921,842),54568=>array(65,-62,917,842),54569=>array(65,-64,907,842),54570=>array(65,-64,908,842),54571=>array(65,-64,908,842),54572=>array(65,-69,923,842),54573=>array(65,-64,908,842),54574=>array(65,-64,908,842),54575=>array(65,-76,907,842),54576=>array(65,-62,907,842),54577=>array(65,-61,907,842),54578=>array(65,-69,922,842),54579=>array(65,-74,929,842),54580=>array(65,-69,927,842),54581=>array(65,-68,911,842),54582=>array(65,-72,929,842),54583=>array(65,-70,936,842),54584=>array(65,-66,908,842),54585=>array(65,-59,916,842),54586=>array(65,-60,928,842),54587=>array(65,-68,908,842),54588=>array(85,-69,907,842),54589=>array(86,-61,907,842),54590=>array(86,-61,907,842),54591=>array(86,-71,931,842),54592=>array(86,-46,907,842),54593=>array(86,-68,912,842),54594=>array(86,-76,907,842),54595=>array(86,-44,921,842),54596=>array(86,-62,917,842),54597=>array(86,-64,907,842),54598=>array(86,-64,908,842),54599=>array(86,-64,908,842),54600=>array(86,-69,923,842),54601=>array(86,-64,908,842),54602=>array(86,-64,908,842),54603=>array(86,-76,907,842),54604=>array(86,-62,907,842),54605=>array(86,-61,907,842),54606=>array(86,-69,922,842),54607=>array(86,-74,929,842),54608=>array(86,-69,927,842),54609=>array(86,-68,911,842),54610=>array(86,-72,929,842),54611=>array(86,-70,936,842),54612=>array(86,-66,908,842),54613=>array(86,-59,916,842),54614=>array(86,-60,928,842),54615=>array(86,-68,908,842),54616=>array(94,-69,936,842),54617=>array(85,-59,936,842),54618=>array(85,-61,936,842),54619=>array(85,-71,936,842),54620=>array(85,-45,936,842),54621=>array(85,-69,936,842),54622=>array(85,-76,936,842),54623=>array(85,-44,936,842),54624=>array(85,-62,936,842),54625=>array(85,-64,936,842),54626=>array(85,-64,936,842),54627=>array(85,-64,936,842),54628=>array(85,-70,936,842),54629=>array(85,-64,936,842),54630=>array(85,-64,936,842),54631=>array(85,-76,936,842),54632=>array(85,-62,936,842),54633=>array(85,-61,936,842),54634=>array(85,-70,936,842),54635=>array(85,-74,936,842),54636=>array(85,-69,936,842),54637=>array(85,-67,936,842),54638=>array(85,-72,936,842),54639=>array(85,-71,936,842),54640=>array(85,-66,936,842),54641=>array(85,-59,936,842),54642=>array(85,-60,936,842),54643=>array(85,-69,936,842),54644=>array(79,-69,907,842),54645=>array(85,-61,907,842),54646=>array(85,-61,907,842),54647=>array(85,-71,931,842),54648=>array(85,-46,907,842),54649=>array(85,-68,912,842),54650=>array(85,-76,907,842),54651=>array(85,-44,921,842),54652=>array(85,-62,917,842),54653=>array(85,-64,907,842),54654=>array(85,-64,908,842),54655=>array(85,-64,908,842),54656=>array(85,-69,923,842),54657=>array(85,-64,908,842),54658=>array(85,-64,908,842),54659=>array(85,-76,907,842),54660=>array(85,-62,907,842),54661=>array(85,-61,907,842),54662=>array(85,-69,922,842),54663=>array(85,-74,929,842),54664=>array(85,-69,927,842),54665=>array(85,-68,911,842),54666=>array(85,-72,929,842),54667=>array(85,-70,936,842),54668=>array(85,-66,908,842),54669=>array(85,-59,916,842),54670=>array(85,-60,928,842),54671=>array(85,-68,908,842),54672=>array(94,-68,935,843),54673=>array(85,-59,936,842),54674=>array(85,-61,936,842),54675=>array(85,-71,936,842),54676=>array(85,-45,936,842),54677=>array(85,-69,936,842),54678=>array(85,-76,936,842),54679=>array(85,-44,936,842),54680=>array(85,-62,936,842),54681=>array(85,-64,936,842),54682=>array(85,-64,936,842),54683=>array(85,-64,936,842),54684=>array(85,-70,936,842),54685=>array(85,-64,936,842),54686=>array(85,-64,936,842),54687=>array(85,-76,936,842),54688=>array(85,-62,936,842),54689=>array(85,-61,936,842),54690=>array(85,-70,936,842),54691=>array(85,-74,936,842),54692=>array(85,-69,936,842),54693=>array(85,-67,936,842),54694=>array(85,-72,936,842),54695=>array(85,-71,936,842),54696=>array(85,-66,936,842),54697=>array(85,-59,936,842),54698=>array(85,-60,936,842),54699=>array(85,-69,936,842),54700=>array(79,-69,907,842),54701=>array(85,-61,907,842),54702=>array(85,-61,907,842),54703=>array(85,-71,931,842),54704=>array(85,-46,907,842),54705=>array(85,-68,912,842),54706=>array(85,-76,907,842),54707=>array(85,-44,921,842),54708=>array(85,-62,917,842),54709=>array(85,-64,907,842),54710=>array(85,-64,908,842),54711=>array(85,-64,908,842),54712=>array(85,-69,923,842),54713=>array(85,-64,908,842),54714=>array(85,-64,908,842),54715=>array(85,-76,907,842),54716=>array(85,-62,907,842),54717=>array(85,-61,907,842),54718=>array(85,-69,922,842),54719=>array(85,-74,929,842),54720=>array(85,-69,927,842),54721=>array(85,-68,911,842),54722=>array(85,-72,929,842),54723=>array(85,-70,936,842),54724=>array(85,-66,908,842),54725=>array(85,-59,916,842),54726=>array(85,-60,928,842),54727=>array(85,-68,908,842),54728=>array(79,-70,907,841),54729=>array(85,-61,907,842),54730=>array(85,-61,907,842),54731=>array(85,-71,931,842),54732=>array(85,-46,907,841),54733=>array(85,-68,912,842),54734=>array(85,-76,907,842),54735=>array(85,-44,921,842),54736=>array(85,-62,917,842),54737=>array(85,-64,907,842),54738=>array(85,-64,908,842),54739=>array(85,-64,908,842),54740=>array(85,-69,923,842),54741=>array(85,-64,908,842),54742=>array(85,-64,908,842),54743=>array(85,-76,906,842),54744=>array(85,-62,907,842),54745=>array(85,-61,907,842),54746=>array(85,-69,922,842),54747=>array(85,-74,929,842),54748=>array(85,-69,927,842),54749=>array(85,-68,911,842),54750=>array(85,-72,929,842),54751=>array(85,-70,936,842),54752=>array(85,-66,908,842),54753=>array(85,-59,916,842),54754=>array(85,-60,928,842),54755=>array(85,-68,908,842),54756=>array(69,-68,907,843),54757=>array(50,-61,907,843),54758=>array(50,-61,907,843),54759=>array(50,-71,931,843),54760=>array(60,-46,907,843),54761=>array(50,-68,912,843),54762=>array(50,-76,907,843),54763=>array(50,-44,921,843),54764=>array(50,-62,917,843),54765=>array(50,-64,907,843),54766=>array(50,-64,908,843),54767=>array(50,-64,908,843),54768=>array(50,-69,923,843),54769=>array(50,-64,908,843),54770=>array(50,-64,908,843),54771=>array(50,-76,907,843),54772=>array(50,-62,907,843),54773=>array(50,-61,907,843),54774=>array(50,-69,922,843),54775=>array(50,-74,929,843),54776=>array(50,-69,927,843),54777=>array(50,-68,911,843),54778=>array(50,-72,929,843),54779=>array(50,-70,936,843),54780=>array(50,-66,908,843),54781=>array(50,-59,916,843),54782=>array(50,-60,928,843),54783=>array(50,-68,908,843),54784=>array(89,-70,907,842),54785=>array(75,-61,907,842),54786=>array(75,-61,907,842),54787=>array(75,-71,931,842),54788=>array(85,-46,907,842),54789=>array(75,-68,912,842),54790=>array(75,-76,907,842),54791=>array(75,-44,921,842),54792=>array(75,-62,917,842),54793=>array(75,-64,907,842),54794=>array(75,-64,908,842),54795=>array(75,-64,908,842),54796=>array(75,-69,923,842),54797=>array(75,-64,908,842),54798=>array(75,-64,908,842),54799=>array(75,-76,907,842),54800=>array(75,-62,907,842),54801=>array(75,-61,907,842),54802=>array(75,-69,922,842),54803=>array(75,-74,929,842),54804=>array(75,-69,927,842),54805=>array(75,-68,911,842),54806=>array(75,-72,929,842),54807=>array(75,-70,936,842),54808=>array(75,-66,908,842),54809=>array(75,-59,916,842),54810=>array(75,-60,928,842),54811=>array(75,-68,908,842),54812=>array(49,-68,907,843),54813=>array(50,-61,907,843),54814=>array(50,-61,907,843),54815=>array(50,-71,931,843),54816=>array(50,-46,907,843),54817=>array(50,-68,912,843),54818=>array(50,-76,907,843),54819=>array(50,-44,921,843),54820=>array(50,-62,917,843),54821=>array(50,-64,907,843),54822=>array(50,-64,908,843),54823=>array(50,-64,908,843),54824=>array(50,-69,923,843),54825=>array(50,-64,908,843),54826=>array(50,-64,908,843),54827=>array(50,-76,907,843),54828=>array(50,-62,907,843),54829=>array(50,-61,907,843),54830=>array(50,-69,922,843),54831=>array(50,-74,929,843),54832=>array(50,-69,927,843),54833=>array(50,-68,911,843),54834=>array(50,-72,929,843),54835=>array(50,-70,936,843),54836=>array(50,-66,908,843),54837=>array(50,-59,916,843),54838=>array(50,-60,928,843),54839=>array(50,-68,908,843),54840=>array(62,7,938,764),54841=>array(79,-61,921,819),54842=>array(79,-61,921,819),54843=>array(79,-71,921,819),54844=>array(79,-46,922,819),54845=>array(79,-68,921,819),54846=>array(79,-74,921,819),54847=>array(79,-44,921,819),54848=>array(79,-62,921,819),54849=>array(79,-64,921,819),54850=>array(79,-64,921,819),54851=>array(79,-63,921,819),54852=>array(79,-68,921,819),54853=>array(79,-64,921,819),54854=>array(79,-63,921,819),54855=>array(79,-74,921,819),54856=>array(79,-62,921,819),54857=>array(79,-61,921,819),54858=>array(79,-69,921,819),54859=>array(79,-74,921,819),54860=>array(79,-69,921,819),54861=>array(79,-68,921,819),54862=>array(79,-72,921,819),54863=>array(79,-70,921,819),54864=>array(79,-66,921,819),54865=>array(79,-59,921,819),54866=>array(79,-60,921,819),54867=>array(79,-68,921,819),54868=>array(68,-69,936,842),54869=>array(77,-59,936,842),54870=>array(77,-61,936,842),54871=>array(77,-71,936,842),54872=>array(72,-45,936,842),54873=>array(77,-69,936,842),54874=>array(77,-76,936,842),54875=>array(77,-44,936,842),54876=>array(77,-62,936,842),54877=>array(77,-64,936,842),54878=>array(77,-64,936,842),54879=>array(77,-64,936,842),54880=>array(77,-70,936,842),54881=>array(77,-64,936,842),54882=>array(77,-64,936,842),54883=>array(77,-76,936,842),54884=>array(77,-62,936,842),54885=>array(77,-61,936,842),54886=>array(77,-70,936,842),54887=>array(77,-74,936,842),54888=>array(77,-69,936,842),54889=>array(77,-67,936,842),54890=>array(77,-72,936,842),54891=>array(77,-71,936,842),54892=>array(77,-66,936,842),54893=>array(77,-59,936,842),54894=>array(77,-60,936,842),54895=>array(77,-69,936,842),54896=>array(61,-69,907,842),54897=>array(77,-61,907,842),54898=>array(77,-61,907,842),54899=>array(77,-71,931,842),54900=>array(72,-46,907,842),54901=>array(77,-68,912,842),54902=>array(77,-76,907,842),54903=>array(77,-44,921,842),54904=>array(77,-62,917,842),54905=>array(77,-64,907,842),54906=>array(77,-64,908,842),54907=>array(77,-64,908,842),54908=>array(77,-69,923,842),54909=>array(77,-64,908,842),54910=>array(77,-64,908,842),54911=>array(77,-76,907,842),54912=>array(77,-62,907,842),54913=>array(77,-61,907,842),54914=>array(77,-69,922,842),54915=>array(77,-74,929,842),54916=>array(77,-69,927,842),54917=>array(77,-68,911,842),54918=>array(77,-72,929,842),54919=>array(77,-70,936,842),54920=>array(77,-66,908,842),54921=>array(77,-59,916,842),54922=>array(77,-60,928,842),54923=>array(77,-68,908,842),54924=>array(74,-69,907,842),54925=>array(65,-61,907,842),54926=>array(65,-61,907,842),54927=>array(65,-71,931,842),54928=>array(65,-46,907,842),54929=>array(65,-68,912,842),54930=>array(65,-76,907,842),54931=>array(65,-44,921,842),54932=>array(65,-62,917,842),54933=>array(65,-64,907,842),54934=>array(65,-64,908,842),54935=>array(65,-64,908,842),54936=>array(65,-69,923,842),54937=>array(65,-64,908,842),54938=>array(65,-64,908,842),54939=>array(65,-76,907,842),54940=>array(65,-62,907,842),54941=>array(65,-61,907,842),54942=>array(65,-69,922,842),54943=>array(65,-74,929,842),54944=>array(65,-69,927,842),54945=>array(65,-68,911,842),54946=>array(65,-72,929,842),54947=>array(65,-70,936,842),54948=>array(65,-66,908,842),54949=>array(65,-59,916,842),54950=>array(65,-60,928,842),54951=>array(65,-68,908,842),54952=>array(62,7,938,764),54953=>array(79,-61,921,819),54954=>array(79,-61,921,819),54955=>array(79,-71,921,819),54956=>array(79,-46,921,819),54957=>array(79,-68,921,819),54958=>array(79,-74,921,819),54959=>array(79,-44,921,819),54960=>array(79,-62,921,819),54961=>array(79,-64,921,819),54962=>array(79,-64,921,819),54963=>array(79,-63,921,819),54964=>array(79,-68,921,819),54965=>array(79,-64,921,819),54966=>array(79,-63,921,819),54967=>array(79,-74,921,819),54968=>array(79,-62,921,819),54969=>array(79,-61,921,819),54970=>array(79,-69,921,819),54971=>array(79,-74,921,819),54972=>array(79,-69,921,819),54973=>array(79,-68,921,819),54974=>array(79,-72,921,819),54975=>array(79,-70,921,819),54976=>array(79,-66,921,819),54977=>array(79,-59,921,819),54978=>array(79,-60,921,819),54979=>array(79,-68,921,819),54980=>array(79,-64,921,809),54981=>array(79,-61,921,819),54982=>array(79,-61,921,819),54983=>array(79,-71,921,819),54984=>array(79,-46,921,814),54985=>array(79,-68,921,819),54986=>array(79,-74,921,819),54987=>array(79,-44,921,819),54988=>array(79,-62,921,819),54989=>array(79,-64,921,819),54990=>array(79,-64,921,819),54991=>array(79,-63,921,819),54992=>array(79,-68,921,819),54993=>array(79,-64,921,819),54994=>array(79,-63,921,819),54995=>array(79,-74,921,819),54996=>array(79,-62,921,819),54997=>array(79,-61,921,819),54998=>array(79,-69,921,819),54999=>array(79,-74,921,819),55000=>array(79,-69,921,819),55001=>array(79,-68,921,819),55002=>array(79,-72,921,819),55003=>array(79,-70,921,819),55004=>array(79,-66,921,819),55005=>array(79,-59,921,819),55006=>array(79,-60,921,819),55007=>array(79,-68,921,819),55008=>array(70,-70,907,841),55009=>array(75,-61,909,843),55010=>array(75,-61,909,843),55011=>array(75,-71,931,843),55012=>array(76,-46,909,843),55013=>array(75,-68,912,843),55014=>array(75,-76,909,843),55015=>array(75,-44,921,843),55016=>array(75,-62,917,843),55017=>array(75,-64,909,843),55018=>array(75,-64,909,843),55019=>array(75,-64,909,843),55020=>array(75,-69,923,843),55021=>array(75,-64,909,843),55022=>array(75,-64,909,843),55023=>array(75,-76,909,843),55024=>array(75,-62,909,843),55025=>array(75,-61,909,843),55026=>array(75,-69,922,843),55027=>array(75,-74,929,843),55028=>array(75,-69,927,843),55029=>array(75,-68,911,843),55030=>array(75,-72,929,843),55031=>array(75,-70,936,843),55032=>array(75,-66,909,843),55033=>array(75,-59,916,843),55034=>array(75,-60,928,843),55035=>array(75,-68,909,843),55036=>array(63,-68,907,843),55037=>array(70,-61,907,843),55038=>array(70,-61,907,843),55039=>array(70,-71,931,843),55040=>array(76,-46,907,843),55041=>array(70,-68,912,843),55042=>array(70,-76,907,843),55043=>array(70,-44,921,843),55044=>array(70,-62,917,843),55045=>array(70,-64,907,843),55046=>array(70,-64,908,843),55047=>array(70,-64,908,843),55048=>array(70,-69,923,843),55049=>array(70,-64,908,843),55050=>array(70,-64,908,843),55051=>array(70,-76,907,843),55052=>array(70,-62,907,843),55053=>array(70,-61,907,843),55054=>array(70,-69,922,843),55055=>array(70,-74,929,843),55056=>array(70,-69,927,843),55057=>array(70,-68,911,843),55058=>array(70,-72,929,843),55059=>array(70,-70,936,843),55060=>array(70,-66,908,843),55061=>array(70,-59,916,843),55062=>array(70,-60,928,843),55063=>array(70,-68,908,843),55064=>array(70,-69,907,842),55065=>array(65,-61,907,842),55066=>array(65,-61,907,842),55067=>array(65,-71,931,842),55068=>array(65,-46,907,842),55069=>array(65,-68,912,842),55070=>array(65,-76,907,842),55071=>array(65,-44,921,842),55072=>array(65,-62,917,842),55073=>array(65,-64,907,842),55074=>array(65,-64,908,842),55075=>array(65,-64,908,842),55076=>array(65,-69,923,842),55077=>array(65,-64,908,842),55078=>array(65,-64,908,842),55079=>array(65,-76,907,842),55080=>array(65,-62,907,842),55081=>array(65,-61,907,842),55082=>array(65,-69,922,842),55083=>array(65,-74,929,842),55084=>array(65,-69,927,842),55085=>array(65,-68,911,842),55086=>array(65,-72,929,842),55087=>array(65,-70,936,842),55088=>array(65,-66,908,842),55089=>array(65,-59,916,842),55090=>array(65,-60,928,842),55091=>array(65,-68,908,842),55092=>array(87,-64,928,799),55093=>array(79,-61,921,819),55094=>array(79,-61,921,819),55095=>array(79,-71,921,819),55096=>array(79,-46,921,814),55097=>array(79,-68,921,819),55098=>array(79,-74,921,819),55099=>array(79,-44,921,819),55100=>array(79,-62,921,819),55101=>array(79,-64,921,819),55102=>array(79,-64,921,819),55103=>array(79,-63,921,819),55104=>array(79,-68,921,819),55105=>array(79,-64,921,819),55106=>array(79,-63,921,819),55107=>array(79,-74,921,819),55108=>array(79,-62,921,819),55109=>array(79,-61,921,819),55110=>array(79,-69,921,819),55111=>array(79,-74,921,819),55112=>array(79,-69,921,819),55113=>array(79,-68,921,819),55114=>array(79,-72,921,819),55115=>array(79,-70,921,819),55116=>array(79,-66,921,819),55117=>array(79,-59,921,819),55118=>array(79,-60,921,819),55119=>array(79,-68,921,819),55120=>array(52,42,948,744),55121=>array(79,-61,921,819),55122=>array(79,-61,921,819),55123=>array(79,-71,921,819),55124=>array(79,-46,921,815),55125=>array(79,-68,921,819),55126=>array(79,-74,921,819),55127=>array(79,-44,921,819),55128=>array(79,-62,921,819),55129=>array(79,-64,921,819),55130=>array(79,-64,921,819),55131=>array(79,-63,921,819),55132=>array(79,-68,921,819),55133=>array(79,-64,921,819),55134=>array(79,-63,921,819),55135=>array(79,-74,921,819),55136=>array(79,-62,921,819),55137=>array(79,-61,921,819),55138=>array(79,-69,921,819),55139=>array(79,-74,921,819),55140=>array(79,-69,921,819),55141=>array(79,-68,921,819),55142=>array(79,-72,921,819),55143=>array(79,-70,921,819),55144=>array(79,-66,921,819),55145=>array(79,-59,921,819),55146=>array(79,-60,921,819),55147=>array(79,-68,921,819),55148=>array(67,-69,907,842),55149=>array(65,-61,907,842),55150=>array(65,-61,907,842),55151=>array(65,-71,931,842),55152=>array(65,-46,907,842),55153=>array(65,-68,912,842),55154=>array(65,-76,907,842),55155=>array(65,-44,921,842),55156=>array(65,-62,917,842),55157=>array(65,-64,907,842),55158=>array(65,-64,908,842),55159=>array(65,-64,908,842),55160=>array(65,-69,923,842),55161=>array(65,-64,908,842),55162=>array(65,-64,908,842),55163=>array(65,-76,907,842),55164=>array(65,-62,907,842),55165=>array(65,-61,907,842),55166=>array(65,-69,922,842),55167=>array(65,-74,929,842),55168=>array(65,-69,927,842),55169=>array(65,-68,911,842),55170=>array(65,-72,929,842),55171=>array(65,-70,936,842),55172=>array(65,-66,908,842),55173=>array(65,-59,916,842),55174=>array(65,-60,928,842),55175=>array(65,-68,908,842),55176=>array(84,-69,907,842),55177=>array(101,-61,907,842),55178=>array(101,-61,907,842),55179=>array(101,-71,931,842),55180=>array(96,-46,907,842),55181=>array(101,-68,912,842),55182=>array(101,-76,907,842),55183=>array(101,-44,921,842),55184=>array(101,-62,917,842),55185=>array(101,-64,907,842),55186=>array(101,-64,908,842),55187=>array(101,-64,908,842),55188=>array(101,-69,923,842),55189=>array(101,-64,908,842),55190=>array(101,-64,908,842),55191=>array(101,-76,907,842),55192=>array(101,-62,907,842),55193=>array(101,-61,907,842),55194=>array(101,-69,922,842),55195=>array(101,-74,929,842),55196=>array(101,-69,927,842),55197=>array(101,-68,911,842),55198=>array(101,-72,929,842),55199=>array(101,-70,936,842),55200=>array(101,-66,908,842),55201=>array(101,-59,916,842),55202=>array(101,-60,928,842),55203=>array(101,-68,908,842),59393=>array(-54,0,248,634),59394=>array(20,-199,439,530),59395=>array(20,-199,439,530),59396=>array(-70,-12,436,716),59397=>array(-70,-12,436,716),59416=>array(7,637,299,1065),59492=>array(32,0,450,576),59495=>array(32,-1,452,577),59536=>array(38,0,459,770),59557=>array(-1,-221,404,556),59558=>array(-1,-221,481,393),59559=>array(62,-221,904,393),61441=>array(14,0,432,728),61442=>array(14,0,430,728),63232=>array(54,-5,477,560),63233=>array(-601,612,-216,775),63234=>array(-601,612,-216,800),63235=>array(-601,612,-171,800),63236=>array(-601,612,-216,800),63237=>array(-341,612,-283,785),63238=>array(-467,612,-173,819),63239=>array(-620,612,-180,810),63240=>array(-399,612,-226,785),63241=>array(-504,615,-192,832),63242=>array(-167,612,-109,785),63243=>array(-293,612,1,819),63244=>array(-342,612,98,810),63245=>array(-225,612,-52,785),63246=>array(-330,615,-18,832),63247=>array(54,-5,774,558),63248=>array(-563,631,-189,824),63249=>array(-422,609,-265,767),63250=>array(-623,603,-246,849),63251=>array(-274,858,-216,1031),63252=>array(-400,858,-106,1065),63253=>array(-449,858,-9,1056),63254=>array(-333,858,-159,1031),63255=>array(-437,861,-125,1078),63256=>array(-201,-206,-85,-34),63257=>array(-337,-206,-89,-34),63258=>array(-157,-115,-75,-33),63260=>array(111,-210,291,-73),63261=>array(17,-113,269,0),63744=>array(62,-12,931,835),63745=>array(48,-72,962,777),63746=>array(63,-71,935,832),63747=>array(66,-79,948,785),63748=>array(49,-62,926,811),63749=>array(123,-68,886,832),63750=>array(65,-51,902,840),63751=>array(37,-41,967,846),63752=>array(37,-41,967,846),63753=>array(43,-70,957,830),63754=>array(54,-21,960,856),63755=>array(112,-67,904,831),63756=>array(62,-62,960,848),63757=>array(32,-72,970,845),63758=>array(42,-67,985,854),63759=>array(38,-67,950,807),63760=>array(61,-80,954,835),63761=>array(33,-73,961,835),63762=>array(40,-71,973,822),63763=>array(52,-51,966,820),63764=>array(60,-64,959,847),63765=>array(57,-72,959,842),63766=>array(48,-75,968,839),63767=>array(45,-66,972,840),63768=>array(56,-68,970,835),63769=>array(51,-67,967,840),63770=>array(64,-62,972,839),63771=>array(49,-68,962,843),63772=>array(59,-71,883,815),63773=>array(35,-65,909,836),63774=>array(53,-70,923,830),63775=>array(72,-70,928,839),63776=>array(62,-67,958,846),63777=>array(59,-49,964,846),63778=>array(50,-73,964,837),63779=>array(56,-34,949,839),63780=>array(35,-68,952,836),63781=>array(49,-64,947,829),63782=>array(40,-65,956,848),63783=>array(47,-76,968,842),63784=>array(46,-60,949,837),63785=>array(49,-74,885,832),63786=>array(62,-63,962,829),63787=>array(37,-75,968,831),63788=>array(51,-65,930,832),63789=>array(63,-64,956,835),63790=>array(54,-71,966,849),63791=>array(52,-73,919,832),63792=>array(43,-67,954,835),63793=>array(30,-61,974,849),63794=>array(43,-71,954,830),63795=>array(40,-78,941,833),63796=>array(38,-39,923,832),63797=>array(59,-66,961,836),63798=>array(45,-77,929,841),63799=>array(29,-67,968,838),63800=>array(70,-62,965,817),63801=>array(51,-68,947,837),63802=>array(62,-67,948,849),63803=>array(36,-64,952,818),63804=>array(57,-69,958,840),63805=>array(34,-67,974,839),63806=>array(65,-52,935,840),63807=>array(57,-64,968,841),63808=>array(57,-67,949,829),63809=>array(55,-63,973,849),63810=>array(57,-24,950,849),63811=>array(48,-65,934,785),63812=>array(49,-62,964,855),63813=>array(43,-71,962,840),63814=>array(56,-65,944,833),63815=>array(52,-68,944,788),63816=>array(57,-63,976,839),63817=>array(105,-67,914,786),63818=>array(59,-28,949,783),63819=>array(46,-82,939,823),63820=>array(39,-70,949,831),63821=>array(48,-66,982,843),63822=>array(46,-67,956,800),63823=>array(51,-63,943,808),63824=>array(34,-65,942,839),63825=>array(99,-82,936,792),63826=>array(72,-65,917,829),63827=>array(68,-70,898,834),63828=>array(55,-65,973,833),63829=>array(41,-70,959,831),63830=>array(33,-57,967,835),63831=>array(34,-66,968,839),63832=>array(46,-65,954,831),63833=>array(95,-67,970,831),63834=>array(59,-66,961,841),63835=>array(60,-58,974,851),63836=>array(60,-64,959,847),63837=>array(53,-65,949,836),63838=>array(74,-73,939,777),63839=>array(69,-55,923,850),63840=>array(49,-25,959,830),63841=>array(72,-69,928,840),63842=>array(72,-74,926,784),63843=>array(45,-54,948,792),63844=>array(30,-55,956,850),63845=>array(42,-73,947,834),63846=>array(44,-67,970,843),63847=>array(71,-65,928,769),63848=>array(42,-32,972,829),63849=>array(60,-70,959,833),63850=>array(65,-69,946,835),63851=>array(30,-88,968,844),63852=>array(48,-30,949,830),63853=>array(53,-70,939,829),63854=>array(49,-70,965,839),63855=>array(57,-71,964,816),63856=>array(51,-72,967,824),63857=>array(57,-63,963,785),63858=>array(56,-73,946,824),63859=>array(45,-63,961,848),63860=>array(72,-65,931,827),63861=>array(41,-71,955,826),63862=>array(110,-66,962,839),63863=>array(65,-68,950,838),63864=>array(60,-68,953,783),63865=>array(63,-63,961,830),63866=>array(53,-68,956,808),63867=>array(40,-72,954,818),63868=>array(85,-61,963,820),63869=>array(53,-60,960,830),63870=>array(53,-30,947,789),63871=>array(27,-76,929,825),63872=>array(180,-77,840,772),63873=>array(86,-53,911,836),63874=>array(22,-62,961,846),63875=>array(33,-67,969,839),63876=>array(43,-71,967,841),63877=>array(32,-63,962,799),63878=>array(117,-65,907,790),63879=>array(26,-73,964,789),63880=>array(43,-67,952,814),63881=>array(49,-68,946,832),63882=>array(70,-56,863,824),63883=>array(37,-62,947,796),63884=>array(41,-67,930,779),63885=>array(50,-65,970,831),63886=>array(86,-68,917,841),63887=>array(36,-76,958,832),63888=>array(42,-54,961,841),63889=>array(37,-60,970,849),63890=>array(37,-56,963,833),63891=>array(52,-67,962,830),63892=>array(41,-64,962,833),63893=>array(47,-69,968,834),63894=>array(34,-66,967,839),63895=>array(42,-65,946,842),63896=>array(48,-62,944,831),63897=>array(37,-56,951,839),63898=>array(37,-56,951,830),63899=>array(18,-53,969,847),63900=>array(83,-76,901,832),63901=>array(67,-63,942,838),63902=>array(103,-64,898,785),63903=>array(58,-61,954,831),63904=>array(44,-73,955,828),63905=>array(57,-71,964,816),63906=>array(40,-59,966,839),63907=>array(30,-58,963,846),63908=>array(27,-64,961,853),63909=>array(40,-67,977,854),63910=>array(31,-53,963,854),63911=>array(36,-74,971,842),63912=>array(38,-67,961,846),63913=>array(105,-64,897,788),63914=>array(80,-68,917,844),63915=>array(40,-73,961,832),63916=>array(39,-68,962,840),63917=>array(37,-68,964,840),63918=>array(69,-19,935,839),63919=>array(22,-68,960,847),63920=>array(28,-62,966,854),63921=>array(35,-65,975,846),63922=>array(43,-63,961,810),63923=>array(74,-28,929,779),63924=>array(42,-68,955,839),63925=>array(41,-63,911,845),63926=>array(60,-69,952,833),63927=>array(51,-57,952,829),63928=>array(132,-64,882,789),63929=>array(62,-25,962,783),63930=>array(172,-41,829,773),63931=>array(41,-64,983,842),63932=>array(41,-64,970,838),63933=>array(52,-74,951,779),63934=>array(38,-68,956,836),63935=>array(60,-64,959,847),63936=>array(41,-73,969,850),63937=>array(46,-65,964,830),63938=>array(26,-76,972,829),63939=>array(37,-56,968,838),63940=>array(50,-66,970,833),63941=>array(57,-62,950,798),63942=>array(98,-68,935,788),63943=>array(44,-64,911,837),63944=>array(39,-61,959,832),63945=>array(34,-61,921,837),63946=>array(40,-70,964,830),63947=>array(45,-66,925,830),63948=>array(30,-70,960,830),63949=>array(75,-68,897,818),63950=>array(26,-70,964,830),63951=>array(34,-64,956,839),63952=>array(38,-67,960,828),63953=>array(62,-29,946,810),63954=>array(39,-77,962,835),63955=>array(103,-58,951,833),63956=>array(31,-71,976,855),63957=>array(33,-61,979,841),63958=>array(39,-58,991,856),63959=>array(52,-71,971,868),63960=>array(36,-67,954,830),63961=>array(38,-59,976,835),63962=>array(60,-65,957,788),63963=>array(72,-69,928,840),63964=>array(93,-60,959,848),63965=>array(57,-67,920,826),63966=>array(71,-76,947,824),63967=>array(29,-68,953,786),63968=>array(75,-67,866,782),63969=>array(51,-70,960,831),63970=>array(41,-68,950,823),63971=>array(56,-64,957,821),63972=>array(35,-16,945,775),63973=>array(46,-69,944,835),63974=>array(39,-64,949,788),63975=>array(43,-75,955,840),63976=>array(41,-64,954,821),63977=>array(52,-19,948,796),63978=>array(64,-73,957,834),63979=>array(118,-68,939,800),63980=>array(54,-60,927,803),63981=>array(52,-74,958,822),63982=>array(49,-68,958,833),63983=>array(57,-66,959,837),63984=>array(57,-65,949,832),63985=>array(100,-70,956,834),63986=>array(31,-68,959,843),63987=>array(26,-68,959,838),63988=>array(30,-69,954,829),63989=>array(28,-63,968,841),63990=>array(120,-65,932,841),63991=>array(95,-3,912,822),63992=>array(52,-17,945,838),63993=>array(37,-64,949,837),63994=>array(40,-69,951,818),63995=>array(57,-73,960,840),63996=>array(51,-68,959,833),63997=>array(48,-68,950,829),63998=>array(41,-68,968,831),63999=>array(71,-65,906,831),64000=>array(44,-73,897,797),64001=>array(46,-68,950,826),64002=>array(53,-63,936,826),64003=>array(42,-69,952,827),64004=>array(70,-38,942,833),64005=>array(48,-55,898,819),64006=>array(47,-65,953,815),64007=>array(46,-74,941,827),64008=>array(51,-62,941,845),64009=>array(101,-68,955,846),64010=>array(58,-66,944,789),64011=>array(35,-65,942,837),64012=>array(49,-55,942,754),64013=>array(57,-70,964,827),64014=>array(45,-62,955,843),64015=>array(41,-65,969,830),64016=>array(41,-60,968,807),64017=>array(77,-62,953,828),64018=>array(89,-55,952,838),64019=>array(37,-71,948,828),64020=>array(37,-67,976,831),64021=>array(31,-69,973,831),64022=>array(49,-56,921,836),64023=>array(45,-22,947,840),64024=>array(42,-59,961,820),64025=>array(55,-67,904,837),64026=>array(39,-68,956,843),64027=>array(38,-69,943,834),64028=>array(41,-66,952,840),64029=>array(45,-66,954,837),64030=>array(73,-50,892,785),64031=>array(30,-68,935,839),64032=>array(40,-68,969,832),64033=>array(39,-19,946,826),64034=>array(59,-66,948,835),64035=>array(31,-69,953,829),64036=>array(37,-60,961,808),64037=>array(36,-54,957,835),64038=>array(44,-67,943,835),64039=>array(33,-70,949,839),64040=>array(33,-64,959,839),64041=>array(94,-71,936,842),64042=>array(34,-69,964,839),64043=>array(34,-68,906,839),64044=>array(34,-64,931,839),64045=>array(40,-65,938,837),64256=>array(13,0,569,728),64257=>array(14,0,432,728),64258=>array(14,0,430,728),64259=>array(42,0,709,728),64260=>array(13,0,680,728),64261=>array(67,-7,521,728),64262=>array(31,-12,750,700),64275=>array(44,-9,751,618),64276=>array(44,-8,749,609),64277=>array(44,-210,752,609),64278=>array(43,-210,749,609),64279=>array(44,-210,844,609),64286=>array(22,568,311,695),64287=>array(16,162,522,530),64288=>array(32,-12,503,518),64289=>array(58,0,652,518),64290=>array(24,0,619,518),64291=>array(72,0,662,530),64292=>array(38,-12,598,530),64293=>array(33,-12,557,716),64294=>array(72,0,662,518),64295=>array(20,0,565,530),64296=>array(19,-13,726,530),64297=>array(55,0,529,278),64298=>array(72,-12,674,634),64299=>array(72,-12,674,634),64300=>array(72,-12,674,634),64301=>array(72,-12,674,634),64302=>array(60,-104,517,518),64303=>array(60,-144,517,518),64304=>array(60,0,517,518),64305=>array(38,0,533,530),64306=>array(20,0,386,530),64307=>array(24,0,482,518),64308=>array(72,0,526,530),64309=>array(16,0,248,530),64310=>array(-9,0,306,543),64312=>array(68,-12,532,530),64313=>array(16,258,248,530),64314=>array(20,-199,439,530),64315=>array(38,-12,469,530),64316=>array(33,-12,436,716),64318=>array(30,0,526,530),64320=>array(38,0,270,530),64321=>array(25,-12,546,530),64323=>array(45,-199,499,530),64324=>array(37,-12,511,530),64326=>array(45,0,477,518),64327=>array(72,-199,535,518),64328=>array(20,0,439,530),64329=>array(72,-12,674,518),64330=>array(21,-13,565,530),64331=>array(16,0,248,634),64332=>array(38,0,533,622),64333=>array(38,-12,469,622),64334=>array(37,-12,511,622),64335=>array(33,0,517,716),64336=>array(-15,0,256,927),64337=>array(-15,0,274,927),64338=>array(62,-275,709,265),64339=>array(62,-279,789,265),64340=>array(-1,-252,194,284),64341=>array(-1,-256,244,284),64342=>array(62,-270,709,265),64343=>array(62,-270,789,265),64344=>array(-1,-228,233,284),64345=>array(-1,-228,244,284),64346=>array(62,-270,709,265),64347=>array(62,-270,789,265),64348=>array(-1,-242,210,284),64349=>array(-1,-242,244,284),64350=>array(62,-50,709,568),64351=>array(62,-50,789,568),64352=>array(-1,0,194,616),64353=>array(-1,0,244,616),64354=>array(62,-50,709,569),64355=>array(62,-50,789,569),64356=>array(-1,0,222,618),64357=>array(-1,0,244,618),64358=>array(62,-50,709,569),64359=>array(62,-50,789,569),64360=>array(-1,0,245,618),64361=>array(-1,0,244,618),64362=>array(62,0,895,859),64363=>array(62,-33,904,697),64364=>array(-1,0,404,860),64365=>array(-1,0,481,697),64366=>array(62,0,895,890),64367=>array(62,-33,904,727),64368=>array(-1,0,404,890),64369=>array(-1,0,481,727),64370=>array(52,-271,564,453),64371=>array(54,-271,659,453),64372=>array(-1,-236,567,453),64373=>array(-1,-236,638,453),64374=>array(52,-271,564,453),64375=>array(54,-271,659,453),64376=>array(-1,-105,567,453),64377=>array(-1,-105,638,453),64378=>array(52,-271,564,453),64379=>array(54,-271,659,453),64380=>array(-1,-208,567,453),64381=>array(-1,-208,638,453),64382=>array(52,-271,564,453),64383=>array(54,-271,659,453),64384=>array(-1,-236,567,453),64385=>array(-1,-237,638,453),64386=>array(38,-140,368,437),64387=>array(38,-140,459,436),64388=>array(38,0,368,614),64389=>array(38,0,459,638),64390=>array(38,0,368,716),64391=>array(38,0,459,740),64392=>array(38,0,368,746),64393=>array(38,0,459,770),64394=>array(-74,-210,362,554),64395=>array(-74,-210,437,544),64396=>array(-74,-210,369,584),64397=>array(-74,-210,437,574),64398=>array(62,0,827,717),64399=>array(62,0,943,717),64400=>array(-1,0,432,717),64401=>array(-1,0,548,717),64402=>array(62,0,827,793),64403=>array(62,0,943,793),64404=>array(-1,0,432,793),64405=>array(-1,0,548,793),64406=>array(62,-256,827,793),64407=>array(62,-257,943,793),64408=>array(-1,-252,432,793),64409=>array(-1,-256,548,793),64410=>array(62,0,827,839),64411=>array(62,0,943,839),64412=>array(-1,0,432,839),64413=>array(-1,0,548,839),64414=>array(62,-121,630,272),64415=>array(39,-228,724,183),64416=>array(62,-121,630,568),64417=>array(39,-228,724,568),64418=>array(-1,0,245,618),64419=>array(-1,0,244,618),64420=>array(62,-6,452,705),64421=>array(62,0,478,705),64422=>array(62,-6,452,431),64423=>array(2,-85,510,159),64424=>array(-1,-242,194,284),64425=>array(-1,-264,428,196),64426=>array(29,-15,644,593),64427=>array(29,-15,707,593),64428=>array(-1,0,624,593),64429=>array(-1,0,687,593),64430=>array(71,-221,684,297),64431=>array(62,-221,675,95),64432=>array(71,-221,684,473),64433=>array(62,-221,675,363),64467=>array(62,0,689,817),64468=>array(34,0,734,817),64469=>array(-1,0,432,889),64470=>array(-1,0,548,889),64471=>array(-108,-210,408,766),64472=>array(-111,-210,467,704),64473=>array(-108,-210,408,696),64474=>array(-111,-210,467,628),64475=>array(-108,-210,408,789),64476=>array(-111,-210,467,725),64477=>array(-108,-210,441,755),64478=>array(-108,-210,408,750),64479=>array(-111,-210,467,685),64480=>array(-108,-210,408,476),64481=>array(-111,-210,467,379),64482=>array(-108,-210,408,705),64483=>array(-111,-210,467,641),64484=>array(10,-279,730,453),64485=>array(33,-279,935,126),64486=>array(-1,-239,194,284),64487=>array(-1,-239,244,284),64488=>array(-1,0,194,284),64489=>array(-1,0,244,284),64490=>array(79,0,475,716),64491=>array(79,0,518,716),64492=>array(2,-85,710,569),64493=>array(2,-85,754,569),64494=>array(-111,-210,667,569),64495=>array(-111,-210,711,569),64496=>array(-111,-210,667,704),64497=>array(-111,-210,711,704),64498=>array(-111,-210,667,628),64499=>array(-111,-210,711,628),64500=>array(-111,-210,667,725),64501=>array(-111,-210,711,725),64502=>array(33,-279,1135,569),64503=>array(33,-279,1178,569),64504=>array(-1,-256,445,569),64505=>array(34,-270,995,569),64506=>array(34,-270,1038,569),64507=>array(-1,0,445,569),64508=>array(32,-121,679,453),64509=>array(34,-270,794,126),64510=>array(-1,-140,217,284),64511=>array(-1,-140,244,284),64512=>array(54,-271,860,569),64513=>array(54,-271,860,569),64514=>array(58,-265,842,569),64515=>array(34,-270,995,569),64516=>array(34,-265,1005,569),64517=>array(54,-271,853,453),64518=>array(54,-271,853,453),64519=>array(54,-271,853,621),64520=>array(58,-265,834,359),64521=>array(34,-270,988,284),64522=>array(34,-265,998,284),64523=>array(54,-271,876,486),64524=>array(54,-271,876,486),64525=>array(54,-271,876,621),64526=>array(58,-265,858,486),64527=>array(34,-270,1011,486),64528=>array(34,-265,1021,486),64529=>array(54,-271,876,588),64530=>array(58,-265,858,588),64531=>array(34,-270,1011,588),64532=>array(34,-265,1021,588),64533=>array(54,-271,1226,453),64534=>array(58,-265,1208,453),64535=>array(54,-271,1226,453),64536=>array(58,-265,1208,453),64537=>array(54,-271,1226,610),64538=>array(54,-271,1226,610),64539=>array(58,-265,1208,610),64540=>array(54,-271,1350,453),64541=>array(54,-271,1350,453),64542=>array(54,-271,1350,621),64543=>array(58,-265,1332,359),64544=>array(54,-271,1415,453),64545=>array(58,-265,1397,436),64546=>array(54,-271,1415,522),64547=>array(54,-271,1415,522),64548=>array(54,-271,1415,621),64549=>array(58,-265,1397,522),64550=>array(54,-271,1331,686),64551=>array(58,-265,1313,686),64552=>array(58,-265,1313,686),64553=>array(54,-271,1183,492),64554=>array(58,-265,1165,492),64555=>array(54,-271,1183,716),64556=>array(58,-265,1165,716),64557=>array(54,-271,1063,773),64558=>array(54,-271,1063,773),64559=>array(54,-271,1063,773),64560=>array(58,-265,1045,773),64561=>array(34,-270,1198,773),64562=>array(34,-265,1208,773),64563=>array(54,-271,1063,758),64564=>array(58,-265,1045,758),64565=>array(34,-270,1198,758),64566=>array(34,-265,1208,758),64567=>array(79,0,706,717),64568=>array(54,-271,1091,717),64569=>array(54,-271,1091,717),64570=>array(54,-271,1091,717),64571=>array(34,-228,1106,717),64572=>array(58,-265,1073,717),64573=>array(34,-270,1226,717),64574=>array(34,-265,1236,717),64575=>array(54,-271,853,716),64576=>array(54,-271,853,716),64577=>array(54,-271,853,716),64578=>array(58,-265,835,716),64579=>array(34,-270,988,716),64580=>array(34,-265,998,716),64581=>array(54,-271,1078,453),64582=>array(54,-271,1078,453),64583=>array(54,-271,1078,621),64584=>array(58,-265,1060,359),64585=>array(34,-270,1213,359),64586=>array(34,-265,1223,359),64587=>array(54,-271,853,501),64588=>array(54,-271,853,501),64589=>array(54,-271,853,621),64590=>array(58,-265,835,501),64591=>array(34,-270,988,501),64592=>array(34,-265,998,501),64593=>array(54,-271,1283,593),64594=>array(58,-265,1265,593),64595=>array(34,-270,1418,593),64596=>array(34,-265,1428,593),64597=>array(54,-271,876,453),64598=>array(54,-271,876,453),64599=>array(54,-271,876,621),64600=>array(58,-265,858,359),64601=>array(34,-270,1011,284),64602=>array(34,-265,1021,284),64603=>array(38,0,368,889),64604=>array(-74,-210,357,609),64605=>array(32,-121,679,505),64606=>array(4,521,299,990),64607=>array(7,618,299,990),64608=>array(7,648,299,990),64609=>array(4,521,299,990),64610=>array(7,770,299,990),64611=>array(7,588,299,1053),64612=>array(-74,-210,681,569),64613=>array(-74,-210,681,569),64614=>array(58,-265,885,569),64615=>array(39,-228,968,569),64616=>array(34,-270,1038,569),64617=>array(34,-265,1048,569),64618=>array(-74,-210,681,284),64619=>array(-74,-210,681,458),64620=>array(58,-265,885,359),64621=>array(39,-228,968,356),64622=>array(34,-270,1038,284),64623=>array(34,-265,1048,284),64624=>array(-74,-210,681,486),64625=>array(-74,-210,681,486),64626=>array(58,-265,885,486),64627=>array(39,-228,968,486),64628=>array(34,-270,1038,486),64629=>array(34,-265,1048,486),64630=>array(-74,-210,681,588),64631=>array(-74,-210,681,588),64632=>array(58,-265,885,588),64633=>array(39,-228,968,588),64634=>array(34,-270,1038,588),64635=>array(34,-265,1048,588),64636=>array(34,-270,1275,610),64637=>array(34,-265,1285,610),64638=>array(34,-270,1275,595),64639=>array(34,-265,1285,595),64640=>array(79,0,822,717),64641=>array(34,-228,1222,717),64642=>array(58,-265,1189,717),64643=>array(34,-270,1342,717),64644=>array(34,-265,1352,717),64645=>array(58,-265,885,716),64646=>array(34,-270,1038,716),64647=>array(34,-265,1048,716),64648=>array(79,0,807,716),64649=>array(58,-265,1174,359),64650=>array(-74,-210,681,501),64651=>array(-74,-210,681,501),64652=>array(58,-265,885,501),64653=>array(39,-228,968,501),64654=>array(34,-270,1038,501),64655=>array(34,-265,1048,501),64656=>array(34,-270,794,301),64657=>array(-74,-210,681,284),64658=>array(-74,-210,681,458),64659=>array(58,-265,885,359),64660=>array(39,-228,968,356),64661=>array(34,-270,1038,284),64662=>array(34,-265,1048,284),64663=>array(-1,-140,839,569),64664=>array(-1,0,839,569),64665=>array(-1,0,839,612),64666=>array(-1,0,734,569),64667=>array(-1,-269,606,569),64668=>array(-1,-140,832,453),64669=>array(-1,-140,832,453),64670=>array(-1,-140,832,612),64671=>array(-1,-140,727,359),64672=>array(-1,-269,600,376),64673=>array(-1,-140,855,486),64674=>array(-1,0,855,486),64675=>array(-1,0,855,612),64676=>array(-1,0,750,486),64677=>array(-1,-269,623,486),64678=>array(-1,0,750,588),64679=>array(-1,-80,1205,453),64680=>array(-1,-80,1100,453),64681=>array(-1,-140,1205,453),64682=>array(-1,0,1100,453),64683=>array(-1,-140,1205,610),64684=>array(-1,0,1100,610),64685=>array(-1,-140,1329,453),64686=>array(-1,0,1329,453),64687=>array(-1,0,1329,612),64688=>array(-1,0,1224,359),64689=>array(-1,0,1394,453),64690=>array(-1,0,1394,612),64691=>array(-1,0,1289,436),64692=>array(-1,-140,1394,522),64693=>array(-1,0,1394,522),64694=>array(-1,0,1394,612),64695=>array(-1,0,1289,522),64696=>array(-1,0,1310,686),64697=>array(-1,0,1205,686),64698=>array(-1,-140,1162,492),64699=>array(-1,0,1057,492),64700=>array(-1,-140,1162,716),64701=>array(-1,0,1057,716),64702=>array(-1,-140,1042,773),64703=>array(-1,0,1042,773),64704=>array(-1,0,1042,773),64705=>array(-1,0,937,773),64706=>array(-1,0,1042,758),64707=>array(-1,0,937,758),64708=>array(-1,-140,1070,717),64709=>array(-1,0,1070,717),64710=>array(-1,0,1070,717),64711=>array(-1,0,676,717),64712=>array(-1,0,965,717),64713=>array(-1,-140,832,716),64714=>array(-1,0,832,716),64715=>array(-1,0,832,716),64716=>array(-1,0,727,716),64717=>array(-1,-269,600,716),64718=>array(-1,-140,1057,453),64719=>array(-1,0,1057,453),64720=>array(-1,0,1057,612),64721=>array(-1,0,952,359),64722=>array(-1,-140,832,501),64723=>array(-1,0,832,501),64724=>array(-1,0,832,612),64725=>array(-1,0,727,501),64726=>array(-1,-269,600,501),64727=>array(-1,-140,1262,593),64728=>array(-1,0,1157,593),64729=>array(-1,0,624,912),64730=>array(-1,-140,855,453),64731=>array(-1,-140,855,453),64732=>array(-1,-140,855,612),64733=>array(-1,-140,750,359),64734=>array(-1,-269,623,376),64735=>array(-1,0,777,569),64736=>array(-1,-269,650,569),64737=>array(-1,-140,777,359),64738=>array(-1,-269,650,376),64739=>array(-1,0,777,486),64740=>array(-1,-269,650,486),64741=>array(-1,0,777,588),64742=>array(-1,-269,650,588),64743=>array(-1,0,1304,359),64744=>array(-1,-269,1177,376),64745=>array(-1,0,1304,604),64746=>array(-1,-269,1177,604),64747=>array(-1,0,792,717),64748=>array(-1,0,1081,717),64749=>array(-1,0,777,716),64750=>array(-1,0,777,501),64751=>array(-1,-269,650,501),64752=>array(-1,-140,777,359),64753=>array(-1,-269,650,376),64754=>array(-1,0,307,1058),64755=>array(-1,0,303,990),64756=>array(-1,0,299,1054),64757=>array(34,-270,1466,686),64758=>array(34,-265,1476,686),64759=>array(34,-270,1318,492),64760=>array(34,-265,1328,492),64761=>array(34,-270,1318,716),64762=>array(34,-265,1328,716),64763=>array(34,-270,1485,346),64764=>array(34,-265,1495,346),64765=>array(34,-270,1485,604),64766=>array(34,-265,1495,604),64767=>array(34,-270,1361,453),64768=>array(34,-265,1371,453),64769=>array(34,-270,1361,453),64770=>array(34,-265,1371,453),64771=>array(34,-270,1361,610),64772=>array(34,-265,1371,610),64773=>array(34,-270,1550,436),64774=>array(34,-265,1560,436),64775=>array(34,-270,1550,522),64776=>array(34,-265,1560,522),64777=>array(54,-271,1350,604),64778=>array(54,-271,1350,604),64779=>array(54,-271,1350,621),64780=>array(58,-265,1332,604),64781=>array(-74,-210,1128,604),64782=>array(-74,-210,1128,346),64783=>array(-74,-210,1193,436),64784=>array(-74,-210,1193,522),64785=>array(34,-270,1528,686),64786=>array(34,-265,1538,686),64787=>array(34,-270,1349,407),64788=>array(34,-265,1359,407),64789=>array(34,-270,1349,624),64790=>array(34,-265,1359,624),64791=>array(34,-270,1565,346),64792=>array(34,-265,1575,346),64793=>array(34,-270,1565,604),64794=>array(34,-265,1575,604),64795=>array(34,-270,1432,453),64796=>array(34,-265,1442,453),64797=>array(34,-270,1432,453),64798=>array(34,-265,1442,453),64799=>array(34,-270,1432,612),64800=>array(34,-265,1442,612),64801=>array(34,-270,1612,436),64802=>array(34,-265,1622,436),64803=>array(34,-270,1612,522),64804=>array(34,-265,1622,522),64805=>array(54,-271,1430,604),64806=>array(54,-271,1430,604),64807=>array(54,-271,1430,621),64808=>array(58,-265,1412,604),64809=>array(-74,-210,1208,604),64810=>array(-74,-210,1208,346),64811=>array(-74,-210,1255,436),64812=>array(-74,-210,1255,522),64813=>array(-1,-140,1329,604),64814=>array(-1,0,1329,604),64815=>array(-1,0,1329,612),64816=>array(-1,0,1224,604),64817=>array(-1,-269,1097,376),64818=>array(-1,-269,1097,604),64819=>array(-1,0,1205,686),64820=>array(-1,-140,1409,453),64821=>array(-1,0,1409,453),64822=>array(-1,0,1409,612),64823=>array(-1,-140,1409,604),64824=>array(-1,0,1409,604),64825=>array(-1,0,1409,612),64826=>array(-1,0,1267,686),64827=>array(-1,0,1267,686),64828=>array(79,0,615,944),64829=>array(79,0,615,944),64830=>array(82,-218,445,790),64831=>array(155,-218,518,790),64848=>array(-1,-140,1389,486),64849=>array(54,-271,1542,486),64850=>array(-1,-140,1494,486),64851=>array(-1,0,1389,486),64852=>array(-1,0,1389,612),64853=>array(-1,-140,1389,486),64854=>array(-1,0,1389,486),64855=>array(-1,0,1389,612),64856=>array(54,-271,1831,453),64857=>array(-1,-80,1738,453),64858=>array(34,-265,1976,453),64859=>array(34,-270,1965,453),64860=>array(-1,-140,1967,453),64861=>array(-1,-140,1967,453),64862=>array(34,-270,2203,453),64863=>array(54,-271,1963,453),64864=>array(-1,0,1862,453),64865=>array(-1,-140,1862,453),64866=>array(58,-265,1945,359),64867=>array(-1,0,1757,359),64868=>array(54,-271,2115,453),64869=>array(-1,0,2032,453),64870=>array(58,-265,1992,436),64871=>array(58,-265,2050,604),64872=>array(-1,0,1862,604),64873=>array(34,-265,2213,604),64874=>array(54,-271,1963,621),64875=>array(-1,0,1862,612),64876=>array(58,-265,1945,604),64877=>array(-1,0,1757,604),64878=>array(34,-270,2250,522),64879=>array(58,-265,2097,612),64880=>array(-1,0,1927,612),64881=>array(54,-271,1926,686),64882=>array(-1,0,1843,686),64883=>array(-1,0,1738,686),64884=>array(34,-265,2071,686),64885=>array(58,-265,1834,453),64886=>array(58,-265,1729,407),64887=>array(-1,0,1590,492),64888=>array(34,-270,1882,407),64889=>array(58,-265,1729,624),64890=>array(34,-265,1893,624),64891=>array(34,-270,1882,624),64892=>array(58,-265,1760,612),64893=>array(-1,0,1575,773),64894=>array(54,-271,1671,595),64895=>array(58,-265,1655,595),64896=>array(58,-265,1523,716),64897=>array(34,-265,1687,716),64898=>array(34,-270,1676,716),64899=>array(-1,-140,1470,716),64900=>array(54,-271,1542,716),64901=>array(58,-265,1523,716),64902=>array(-1,0,1365,716),64903=>array(54,-271,1437,716),64904=>array(-1,0,1365,716),64905=>array(-1,-140,1695,453),64906=>array(-1,0,1590,453),64907=>array(34,-265,1976,453),64908=>array(-1,-140,1695,453),64909=>array(-1,-140,1590,453),64910=>array(-1,-140,1695,612),64911=>array(-1,0,1590,612),64914=>array(-1,-140,1695,612),64915=>array(-1,-140,1795,593),64916=>array(-1,0,1690,593),64917=>array(-1,0,1365,501),64918=>array(34,-270,1676,501),64919=>array(58,-265,1523,501),64920=>array(-1,-140,1365,501),64921=>array(34,-270,1676,501),64922=>array(34,-265,1582,501),64923=>array(34,-270,1571,501),64924=>array(58,-265,1418,359),64925=>array(-1,-140,1284,359),64926=>array(34,-265,1687,612),64927=>array(34,-265,1687,486),64928=>array(34,-270,1676,486),64929=>array(34,-265,1687,612),64930=>array(34,-270,1676,612),64931=>array(34,-265,1582,486),64932=>array(34,-270,1571,486),64933=>array(34,-265,1976,453),64934=>array(34,-270,2070,453),64935=>array(34,-270,1965,453),64936=>array(34,-270,2203,612),64937=>array(34,-265,2260,453),64938=>array(34,-265,2213,604),64939=>array(34,-265,2260,522),64940=>array(34,-265,1687,716),64941=>array(34,-265,1582,716),64942=>array(34,-265,1687,453),64943=>array(34,-265,1687,453),64944=>array(34,-265,1582,359),64945=>array(34,-265,1871,359),64946=>array(34,-265,1818,595),64947=>array(34,-265,1687,501),64948=>array(-1,0,1575,758),64949=>array(-1,0,1365,716),64950=>array(34,-265,1893,407),64951=>array(34,-265,1885,717),64952=>array(-1,-140,1470,501),64953=>array(34,-265,1976,612),64954=>array(-1,-140,1365,716),64955=>array(58,-265,1722,717),64956=>array(58,-265,1523,716),64957=>array(54,-271,1542,501),64958=>array(34,-265,2081,453),64959=>array(34,-265,2081,453),64960=>array(34,-265,1976,453),64961=>array(34,-265,1818,610),64962=>array(34,-265,1687,453),64963=>array(-1,0,1499,717),64964=>array(-1,-140,1695,492),64965=>array(-1,0,1822,436),64966=>array(34,-265,2213,612),64967=>array(34,-265,1687,501),65008=>array(62,-221,1462,716),65009=>array(62,-221,1110,758),65010=>array(52,0,1077,1015),65011=>array(-74,-210,1277,717),65012=>array(38,0,2049,453),65013=>array(58,-265,2196,716),65014=>array(34,-210,2066,716),65015=>array(62,-140,1490,716),65016=>array(58,-265,1984,716),65017=>array(34,-270,1794,716),65018=>array(77,-156,1842,762),65019=>array(74,-37,1003,826),65056=>array(55,604,450,726),65057=>array(0,604,395,726),65058=>array(55,604,450,726),65059=>array(0,604,395,726),65072=>array(446,87,554,679),65073=>array(461,-121,539,887),65074=>array(461,229,539,537),65075=>array(-5,-121,73,887),65076=>array(0,-118,118,885),65077=>array(45,39,952,277),65078=>array(47,558,954,796),65079=>array(43,31,956,281),65080=>array(43,548,956,798),65081=>array(41,19,960,294),65082=>array(40,543,959,818),65083=>array(45,18,950,306),65084=>array(47,530,952,818),65085=>array(47,-32,953,416),65086=>array(47,420,953,868),65087=>array(47,-2,953,325),65088=>array(47,511,953,838),65089=>array(48,18,952,358),65090=>array(48,473,952,818),65091=>array(48,-12,952,359),65092=>array(48,475,952,848),65097=>array(75,761,925,801),65098=>array(75,731,925,829),65099=>array(-1,771,1001,889),65100=>array(-2,656,1001,884),65101=>array(75,-29,925,11),65102=>array(75,-49,925,49),65103=>array(-1,-112,1001,6),65104=>array(50,-85,114,60),65105=>array(33,109,172,224),65106=>array(53,0,113,60),65108=>array(50,-85,114,311),65109=>array(54,0,114,311),65110=>array(28,0,305,437),65111=>array(51,0,116,430),65112=>array(-4,134,604,177),65113=>array(36,-126,178,437),65114=>array(22,-126,164,437),65115=>array(17,-126,186,437),65116=>array(14,-126,184,437),65117=>array(41,-119,184,430),65118=>array(16,-119,159,430),65119=>array(7,-7,327,437),65120=>array(26,-10,386,437),65121=>array(20,254,214,437),65122=>array(33,70,317,354),65123=>array(19,129,181,182),65124=>array(33,67,317,357),65125=>array(33,67,317,357),65126=>array(33,122,317,302),65128=>array(0,-14,167,430),65129=>array(23,-62,307,469),65130=>array(44,-16,491,437),65131=>array(34,-126,589,437),65136=>array(10,716,290,944),65137=>array(-1,0,299,944),65138=>array(4,716,292,990),65140=>array(8,-255,288,-78),65142=>array(10,716,290,859),65143=>array(-1,0,299,859),65144=>array(4,716,292,990),65145=>array(-1,0,303,990),65146=>array(8,-170,288,-78),65147=>array(-1,-170,297,95),65148=>array(7,716,299,936),65149=>array(-1,0,307,936),65150=>array(3,767,151,915),65151=>array(-1,0,155,915),65152=>array(54,0,469,422),65153=>array(-23,0,270,846),65154=>array(-23,0,274,846),65155=>array(46,0,188,933),65156=>array(46,0,274,933),65157=>array(-108,-210,408,762),65158=>array(-111,-210,467,664),65159=>array(46,-285,188,716),65160=>array(46,-285,274,716),65161=>array(32,-121,679,453),65162=>array(34,-270,794,301),65163=>array(-1,0,201,569),65164=>array(-1,0,244,569),65165=>array(79,0,164,716),65166=>array(79,0,274,716),65167=>array(62,-190,709,265),65168=>array(62,-190,789,265),65169=>array(-1,-140,194,284),65170=>array(-1,-140,244,284),65171=>array(62,-6,452,633),65172=>array(62,0,478,628),65173=>array(62,-50,709,437),65174=>array(62,-50,789,437),65175=>array(-1,0,217,486),65176=>array(-1,0,244,486),65177=>array(62,-50,709,539),65178=>array(62,-50,789,539),65179=>array(-1,0,217,588),65180=>array(-1,0,244,588),65181=>array(52,-271,564,453),65182=>array(54,-271,659,453),65183=>array(-1,-80,567,453),65184=>array(-1,-140,638,453),65185=>array(52,-271,564,453),65186=>array(54,-271,659,453),65187=>array(-1,0,567,453),65188=>array(-1,0,638,453),65189=>array(52,-271,564,621),65190=>array(54,-271,659,621),65191=>array(-1,0,567,610),65192=>array(-1,0,638,612),65193=>array(38,0,368,437),65194=>array(38,0,459,436),65195=>array(38,0,368,629),65196=>array(38,0,459,653),65197=>array(-74,-210,357,290),65198=>array(-74,-210,437,239),65199=>array(-74,-210,357,470),65200=>array(-74,-210,437,458),65201=>array(39,-228,1115,346),65202=>array(39,-228,1195,346),65203=>array(-1,0,691,346),65204=>array(-1,0,771,346),65205=>array(39,-228,1115,604),65206=>array(39,-228,1195,604),65207=>array(-1,0,691,604),65208=>array(-1,0,771,604),65209=>array(39,-228,1230,436),65210=>array(39,-228,1292,436),65211=>array(-1,0,756,436),65212=>array(-1,0,818,436),65213=>array(39,-228,1230,532),65214=>array(39,-228,1292,532),65215=>array(-1,0,756,522),65216=>array(-1,0,818,522),65217=>array(59,0,782,686),65218=>array(59,0,844,686),65219=>array(-1,0,672,686),65220=>array(-1,0,734,686),65221=>array(59,0,782,686),65222=>array(59,0,844,686),65223=>array(-1,0,672,686),65224=>array(-1,0,734,686),65225=>array(53,-271,565,492),65226=>array(55,-271,567,443),65227=>array(-1,0,524,492),65228=>array(-3,0,555,407),65229=>array(53,-271,565,725),65230=>array(55,-271,567,660),65231=>array(-1,0,524,716),65232=>array(-3,0,555,624),65233=>array(62,0,895,773),65234=>array(62,-33,904,610),65235=>array(-1,0,404,773),65236=>array(-1,0,481,610),65237=>array(34,-214,738,678),65238=>array(39,-271,824,557),65239=>array(-1,0,404,758),65240=>array(-1,0,481,595),65241=>array(62,0,689,716),65242=>array(34,0,734,716),65243=>array(-1,0,432,717),65244=>array(-1,0,548,717),65245=>array(34,-121,594,716),65246=>array(34,-228,674,716),65247=>array(-1,0,194,716),65248=>array(-1,0,244,716),65249=>array(58,-265,527,359),65250=>array(58,-265,641,359),65251=>array(-1,0,419,359),65252=>array(-1,0,533,359),65253=>array(62,-121,630,458),65254=>array(39,-228,724,356),65255=>array(-1,0,194,501),65256=>array(-1,0,244,501),65257=>array(62,-6,452,431),65258=>array(62,0,478,446),65259=>array(-1,0,624,593),65260=>array(-1,-269,406,376),65261=>array(-108,-210,408,476),65262=>array(-111,-210,467,379),65263=>array(32,-121,679,453),65264=>array(34,-270,794,126),65265=>array(32,-238,679,453),65266=>array(34,-265,804,146),65267=>array(-1,-140,217,284),65268=>array(-1,-140,244,284),65269=>array(-122,-78,474,862),65270=>array(-121,-78,604,862),65271=>array(-27,-78,474,862),65272=>array(-27,-78,604,862),65273=>array(8,-171,474,716),65274=>array(8,-172,604,716),65275=>array(8,-78,474,716),65276=>array(8,-78,604,716),65281=>array(446,0,555,716),65282=>array(363,462,635,716),65283=>array(234,-12,768,728),65284=>array(263,-103,736,782),65285=>array(128,-27,874,728),65286=>array(199,-17,800,728),65287=>array(447,462,547,716),65288=>array(382,-210,619,728),65289=>array(382,-210,619,728),65290=>array(338,423,661,728),65291=>array(264,116,738,590),65292=>array(447,-141,553,100),65293=>array(366,215,635,303),65294=>array(448,0,548,100),65295=>array(361,-24,639,716),65296=>array(266,-12,732,719),65297=>array(367,0,631,719),65298=>array(263,0,737,719),65299=>array(267,-12,736,719),65300=>array(253,0,748,716),65301=>array(263,-12,737,706),65302=>array(265,-12,737,719),65303=>array(269,0,732,706),65304=>array(265,-12,736,719),65305=>array(266,-12,736,719),65306=>array(449,0,549,518),65307=>array(447,-141,553,518),65308=>array(263,111,737,595),65309=>array(263,203,737,503),65310=>array(263,111,737,595),65311=>array(269,0,731,728),65312=>array(37,-210,962,729),65313=>array(166,0,835,716),65314=>array(229,0,770,716),65315=>array(184,-12,816,728),65316=>array(204,0,796,716),65317=>array(232,0,767,716),65318=>array(258,0,741,716),65319=>array(169,-12,831,728),65320=>array(219,0,781,716),65321=>array(452,0,547,716),65322=>array(304,-12,697,716),65323=>array(204,0,796,716),65324=>array(276,0,724,716),65325=>array(159,0,840,716),65326=>array(218,0,781,716),65327=>array(157,-12,842,728),65328=>array(227,0,773,716),65329=>array(151,-56,849,728),65330=>array(184,0,815,716),65331=>array(215,-12,785,728),65332=>array(216,0,783,716),65333=>array(218,-12,781,716),65334=>array(173,0,827,716),65335=>array(39,0,960,716),65336=>array(172,0,828,716),65337=>array(172,0,828,716),65338=>array(217,0,783,716),65339=>array(403,-199,597,716),65340=>array(361,-24,639,716),65341=>array(403,-199,597,716),65342=>array(291,325,708,716),65343=>array(244,-125,756,-75),65344=>array(410,591,590,728),65345=>array(261,-12,739,530),65346=>array(275,-12,725,716),65347=>array(274,-12,726,530),65348=>array(275,-12,725,716),65349=>array(261,-12,739,530),65350=>array(348,0,651,728),65351=>array(271,-210,728,530),65352=>array(288,0,711,716),65353=>array(456,0,544,716),65354=>array(400,-209,600,716),65355=>array(285,0,715,716),65356=>array(456,0,544,716),65357=>array(148,0,852,530),65358=>array(289,0,711,530),65359=>array(257,-12,743,530),65360=>array(275,-199,725,530),65361=>array(275,-199,725,530),65362=>array(359,0,641,530),65363=>array(285,-12,715,530),65364=>array(374,-7,626,700),65365=>array(289,-12,710,518),65366=>array(262,0,737,518),65367=>array(144,0,856,518),65368=>array(257,0,743,518),65369=>array(262,-210,738,518),65370=>array(270,0,729,518),65371=>array(359,-210,641,728),65372=>array(462,-199,538,716),65373=>array(359,-210,641,728),65374=>array(250,272,749,432),65377=>array(53,-40,235,142),65378=>array(79,-68,421,837),65379=>array(77,-68,423,837),65380=>array(54,-82,296,171),65381=>array(196,332,304,440),65382=>array(65,-53,435,753),65383=>array(63,-11,461,732),65384=>array(46,-3,441,769),65385=>array(79,-9,425,763),65386=>array(61,32,439,689),65387=>array(38,-15,443,751),65388=>array(51,-26,452,756),65389=>array(61,33,439,696),65390=>array(79,19,421,701),65391=>array(56,-3,432,727),65392=>array(81,329,419,411),65393=>array(43,-61,481,751),65394=>array(42,-44,448,795),65395=>array(62,-47,439,803),65396=>array(41,0,459,735),65397=>array(34,-45,464,787),65398=>array(38,-40,443,794),65399=>array(43,-46,457,799),65400=>array(40,-49,436,815),65401=>array(39,-48,461,813),65402=>array(60,-23,440,734),65403=>array(42,-59,458,788),65404=>array(36,-33,461,770),65405=>array(28,-49,472,727),65406=>array(44,-5,468,786),65407=>array(49,-51,442,780),65408=>array(36,-56,453,798),65409=>array(41,-50,459,798),65410=>array(45,-43,455,770),65411=>array(41,-61,459,740),65412=>array(122,-46,444,787),65413=>array(42,-59,458,786),65414=>array(41,16,459,711),65415=>array(42,-47,459,734),65416=>array(25,-51,487,769),65417=>array(52,-43,442,740),65418=>array(35,-29,464,791),65419=>array(95,-5,465,770),65420=>array(66,-54,434,732),65421=>array(26,24,472,645),65422=>array(22,-47,472,785),65423=>array(50,-31,450,729),65424=>array(38,-31,463,769),65425=>array(28,-31,478,790),65426=>array(45,-35,449,782),65427=>array(41,-6,459,739),65428=>array(47,-50,468,797),65429=>array(41,-4,459,730),65430=>array(61,-27,439,730),65431=>array(58,-54,442,748),65432=>array(106,-53,394,768),65433=>array(18,-44,481,788),65434=>array(111,-29,474,788),65435=>array(71,-24,429,730),65436=>array(64,-48,436,731),65437=>array(41,-33,461,749),65438=>array(21,523,250,750),65439=>array(38,591,220,773),65441=>array(50,91,450,665),65442=>array(31,91,469,665),65443=>array(20,78,495,665),65444=>array(49,90,451,665),65445=>array(29,80,492,666),65446=>array(30,91,472,666),65447=>array(54,90,446,664),65448=>array(28,90,472,665),65449=>array(59,90,451,665),65450=>array(42,88,458,665),65451=>array(39,85,461,665),65452=>array(39,85,461,665),65453=>array(39,78,495,665),65454=>array(41,85,459,665),65455=>array(34,85,466,665),65456=>array(32,85,468,666),65457=>array(79,90,421,665),65458=>array(79,90,421,665),65459=>array(37,88,463,665),65460=>array(37,78,495,664),65461=>array(13,80,486,661),65462=>array(2,78,493,663),65463=>array(52,92,448,666),65464=>array(17,78,481,665),65465=>array(11,79,495,666),65466=>array(19,76,481,665),65467=>array(72,90,428,663),65468=>array(56,91,444,664),65469=>array(62,90,438,665),65470=>array(44,88,456,665),65474=>array(105,-64,395,842),65475=>array(95,-64,405,842),65476=>array(103,-64,397,842),65477=>array(90,-64,411,842),65478=>array(103,-65,397,841),65479=>array(40,-63,445,843),65482=>array(103,-64,397,842),65483=>array(39,-63,446,843),65484=>array(43,197,457,614),65485=>array(24,-64,476,842),65486=>array(27,-64,463,842),65487=>array(24,-64,439,842),65490=>array(30,197,470,615),65491=>array(40,76,460,554),65492=>array(31,-65,454,841),65493=>array(25,-63,465,843),65494=>array(31,-64,449,842),65495=>array(40,110,468,588),65498=>array(28,357,472,436),65499=>array(30,-64,450,842),65500=>array(212,-64,288,842),65504=>array(274,-200,726,716),65505=>array(242,-14,758,728),65506=>array(263,203,737,503),65507=>array(244,793,756,843),65508=>array(462,-199,538,716),65509=>array(223,0,777,716),65510=>array(39,0,960,716),65512=>array(207,-218,293,994),65513=>array(40,100,460,412),65514=>array(93,0,405,420),65515=>array(40,100,460,412),65516=>array(93,0,405,420),65517=>array(35,160,465,590),65518=>array(35,160,465,590),65532=>array(0,0,1000,719),65533=>array(85,-21,915,810),65535=>array(125,0,875,750)); +$cw=array(0=>1000,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278,306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,338=>1000,339=>944,340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,352=>667,353=>500,354=>611,355=>278,356=>611,357=>406,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,374=>667,375=>500,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579,393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,402=>278,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500,410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602,426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526,442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444,458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556,614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556,630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216,646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464,662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030,678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222,701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,710=>333,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333,718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758,912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778,928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551,945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678,961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616,978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557,1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1027=>567,1028=>717,1029=>667,1030=>278,1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1036=>584,1038=>635,1039=>723,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722,1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939,1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559,1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823,1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811,1115=>556,1116=>437,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932,1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976,1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556,1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670,1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661,1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735,1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923,1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635,1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427,1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635,1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271,1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427,1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583,1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360,1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360,1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360,1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360,1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316,1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412,1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544,1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800,1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243,1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544,1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421,1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957,1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828,1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470,1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514,1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282,1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480,1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611,2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502,2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600,2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0,2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639,2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582,2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585,2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593,2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0,2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559,2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267,2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567,2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640,2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0,2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591,2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0,2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773,2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446,2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587,2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0,2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590,2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712,2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605,2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0,2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540,2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994,2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295,2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547,3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740,3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690,3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684,3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681,3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361,3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840,3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293,3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667,3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687,3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714,3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549,3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198,3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712,3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546,3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340,3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181,3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664,3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608,3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574,3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724,3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775,3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778,3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778,3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600,3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600,3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600,3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600,3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600,3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600,3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600,3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600,3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600,3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600,4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600,4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634,4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629,4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872,4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810,4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524,4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000,4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000,4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000,4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000,4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000,4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000,4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000,4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000,4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000,4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000,4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000,4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000,4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000,4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000,4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000,4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556,7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620,7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576,7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434,7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747,7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303,7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894,8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766,8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576,8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576,8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556,8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766,8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576,8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556,8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222,8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667,8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758,8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0,8205=>0,8208=>333,8209=>333,8210=>556,8211=>500,8212=>1000,8213=>564,8214=>428,8215=>500,8216=>222,8217=>222,8218=>222,8219=>222,8220=>333,8221=>333,8222=>333,8223=>333,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>556,8230=>1000,8231=>278,8232=>0,8233=>0,8240=>1000,8241=>1330,8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8249=>333,8250=>333,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333,8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333,8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556,8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8364=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700,8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667,8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708,8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8482=>1000,8483=>722,8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115,8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834,8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500,8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713,8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713,8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800,8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713,8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713,8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713,8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823,8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584,8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806,8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584,8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584,8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584,8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584,8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678,8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800,8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672,8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584,8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561,8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584,8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000,8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549,8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549,8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549,9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600,9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600,9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000,9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000,9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000,9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000,9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000,9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000,9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000,9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000,9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000,9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000,9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734,9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650,9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900,9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560,9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000,9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804,9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000,12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000,12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000,12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000,12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000,12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000,12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000,12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000,12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000,12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000,12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000,12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000,12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000,12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000,12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000,12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000,12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000,12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000,12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000,12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000,12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000,12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000,12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000,12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000,12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000,12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000,12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000,12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000,12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000,13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000,13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000,13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000,13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000,13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000,13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000,13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000,13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000,13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000,13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000,13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000,13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000,13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000,13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000,13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000,13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000,13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000,13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000,13309=>1000,13310=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000,19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000,19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000,20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000,20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000,20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000,20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000,20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000,20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000,20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000,20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000,20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000,20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000,20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000,20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000,20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000,20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000,20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000,20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000,20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000,20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000,20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000,20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000,20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000,20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000,20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000,20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000,20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000,20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000,20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000,20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000,20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000,20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000,20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000,20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000,20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000,20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000,20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000,20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000,20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000,20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000,20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000,20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000,20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000,20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000,20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000,20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000,20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000,20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000,20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000,20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000,20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000,20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000,20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000,20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000,20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000,20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000,20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000,20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000,20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000,20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000,20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000,20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000,20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000,20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000,20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000,21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000,21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000,21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000,21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000,21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000,21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000,21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000,21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000,21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000,21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000,21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000,21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000,21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000,21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000,21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000,21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000,21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000,21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000,21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000,21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000,21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000,21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000,21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000,21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000,21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000,21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000,21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000,21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000,21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000,21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000,21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000,21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000,21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000,21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000,21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000,21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000,21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000,21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000,21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000,21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000,21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000,21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000,21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000,21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000,21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000,21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000,21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000,21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000,21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000,21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000,21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000,21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000,21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000,21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000,21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000,21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000,21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000,21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000,21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000,21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000,21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000,21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000,22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000,22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000,22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000,22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000,22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000,22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000,22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000,22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000,22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000,22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000,22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000,22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000,22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000,22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000,22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000,22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000,22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000,22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000,22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000,22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000,22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000,22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000,22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000,22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000,22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000,22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000,22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000,22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000,22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000,22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000,22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000,22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000,22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000,22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000,22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000,22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000,22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000,22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000,22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000,22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000,22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000,22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000,22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000,22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000,22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000,22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000,22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000,22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000,22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000,22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000,22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000,22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000,22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000,22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000,22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000,22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000,22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000,22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000,22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000,22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000,22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000,22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000,22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000,23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000,23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000,23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000,23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000,23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000,23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000,23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000,23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000,23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000,23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000,23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000,23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000,23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000,23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000,23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000,23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000,23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000,23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000,23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000,23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000,23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000,23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000,23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000,23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000,23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000,23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000,23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000,23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000,23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000,23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000,23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000,23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000,23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000,23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000,23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000,23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000,23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000,23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000,23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000,23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000,23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000,23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000,23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000,23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000,23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000,23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000,23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000,23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000,23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000,23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000,23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000,23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000,23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000,23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000,23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000,23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000,23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000,23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000,23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000,23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000,23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000,23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000,24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000,24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000,24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000,24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000,24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000,24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000,24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000,24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000,24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000,24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000,24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000,24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000,24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000,24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000,24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000,24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000,24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000,24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000,24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000,24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000,24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000,24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000,24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000,24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000,24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000,24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000,24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000,24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000,24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000,24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000,24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000,24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000,24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000,24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000,24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000,24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000,24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000,24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000,24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000,24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000,24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000,24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000,24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000,24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000,24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000,24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000,24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000,24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000,24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000,24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000,24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000,24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000,24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000,24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000,24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000,24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000,24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000,24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000,24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000,24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000,24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000,24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000,24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000,25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000,25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000,25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000,25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000,25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000,25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000,25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000,25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000,25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000,25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000,25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000,25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000,25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000,25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000,25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000,25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000,25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000,25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000,25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000,25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000,25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000,25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000,25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000,25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000,25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000,25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000,25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000,25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000,25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000,25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000,25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000,25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000,25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000,25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000,25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000,25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000,25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000,25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000,25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000,25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000,25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000,25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000,25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000,25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000,25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000,25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000,25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000,25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000,25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000,25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000,25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000,25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000,25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000,25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000,25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000,25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000,25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000,25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000,25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000,25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000,25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000,25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000,26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000,26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000,26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000,26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000,26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000,26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000,26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000,26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000,26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000,26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000,26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000,26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000,26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000,26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000,26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000,26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000,26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000,26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000,26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000,26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000,26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000,26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000,26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000,26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000,26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000,26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000,26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000,26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000,26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000,26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000,26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000,26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000,26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000,26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000,26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000,26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000,26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000,26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000,26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000,26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000,26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000,26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000,26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000,26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000,26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000,26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000,26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000,26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000,26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000,26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000,26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000,26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000,26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000,26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000,26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000,26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000,26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000,26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000,26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000,26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000,26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000,26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000,26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000,27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000,27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000,27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000,27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000,27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000,27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000,27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000,27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000,27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000,27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000,27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000,27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000,27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000,27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000,27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000,27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000,27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000,27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000,27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000,27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000,27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000,27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000,27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000,27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000,27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000,27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000,27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000,27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000,27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000,27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000,27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000,27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000,27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000,27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000,27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000,27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000,27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000,27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000,27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000,27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000,27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000,27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000,27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000,27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000,27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000,27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000,27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000,27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000,27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000,27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000,27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000,27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000,27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000,27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000,27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000,27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000,27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000,27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000,27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000,27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000,27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000,27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000,28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000,28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000,28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000,28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000,28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000,28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000,28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000,28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000,28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000,28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000,28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000,28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000,28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000,28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000,28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000,28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000,28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000,28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000,28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000,28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000,28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000,28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000,28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000,28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000,28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000,28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000,28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000,28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000,28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000,28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000,28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000,28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000,28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000,28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000,28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000,28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000,28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000,28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000,28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000,28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000,28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000,28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000,28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000,28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000,28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000,28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000,28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000,28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000,28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000,28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000,28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000,28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000,28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000,28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000,28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000,28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000,28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000,28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000,28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000,28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000,28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000,28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000,28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000,29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000,29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000,29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000,29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000,29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000,29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000,29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000,29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000,29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000,29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000,29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000,29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000,29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000,29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000,29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000,29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000,29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000,29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000,29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000,29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000,29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000,29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000,29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000,29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000,29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000,29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000,29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000,29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000,29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000,29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000,29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000,29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000,29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000,29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000,29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000,29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000,29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000,29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000,29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000,29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000,29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000,29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000,29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000,29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000,29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000,29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000,29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000,29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000,29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000,29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000,29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000,29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000,29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000,29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000,29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000,29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000,29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000,29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000,29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000,29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000,29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000,29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000,30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000,30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000,30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000,30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000,30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000,30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000,30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000,30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000,30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000,30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000,30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000,30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000,30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000,30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000,30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000,30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000,30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000,30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000,30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000,30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000,30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000,30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000,30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000,30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000,30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000,30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000,30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000,30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000,30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000,30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000,30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000,30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000,30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000,30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000,30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000,30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000,30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000,30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000,30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000,30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000,30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000,30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000,30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000,30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000,30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000,30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000,30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000,30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000,30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000,30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000,30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000,30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000,30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000,30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000,30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000,30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000,30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000,30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000,30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000,30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000,30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000,30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000,30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000,31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000,31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000,31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000,31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000,31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000,31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000,31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000,31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000,31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000,31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000,31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000,31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000,31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000,31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000,31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000,31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000,31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000,31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000,31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000,31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000,31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000,31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000,31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000,31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000,31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000,31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000,31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000,31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000,31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000,31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000,31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000,31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000,31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000,31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000,31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000,31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000,31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000,31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000,31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000,31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000,31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000,31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000,31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000,31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000,31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000,31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000,31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000,31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000,31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000,31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000,31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000,31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000,31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000,31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000,31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000,31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000,31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000,31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000,31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000,31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000,31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000,31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000,32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000,32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000,32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000,32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000,32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000,32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000,32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000,32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000,32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000,32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000,32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000,32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000,32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000,32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000,32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000,32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000,32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000,32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000,32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000,32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000,32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000,32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000,32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000,32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000,32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000,32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000,32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000,32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000,32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000,32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000,32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000,32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000,32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000,32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000,32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000,32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000,32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000,32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000,32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000,32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000,32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000,32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000,32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000,32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000,32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000,32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000,32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000,32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000,32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000,32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000,32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000,32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000,32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000,32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000,32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000,32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000,32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000,32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000,32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000,32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000,32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000,32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000,32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000,33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000,33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000,33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000,33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000,33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000,33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000,33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000,33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000,33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000,33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000,33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000,33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000,33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000,33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000,33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000,33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000,33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000,33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000,33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000,33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000,33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000,33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000,33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000,33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000,33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000,33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000,33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000,33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000,33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000,33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000,33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000,33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000,33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000,33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000,33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000,33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000,33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000,33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000,33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000,33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000,33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000,33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000,33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000,33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000,33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000,33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000,33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000,33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000,33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000,33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000,33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000,33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000,33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000,33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000,33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000,33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000,33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000,33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000,33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000,33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000,33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000,33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000,34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000,34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000,34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000,34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000,34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000,34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000,34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000,34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000,34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000,34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000,34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000,34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000,34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000,34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000,34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000,34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000,34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000,34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000,34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000,34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000,34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000,34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000,34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000,34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000,34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000,34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000,34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000,34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000,34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000,34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000,34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000,34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000,34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000,34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000,34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000,34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000,34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000,34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000,34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000,34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000,34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000,34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000,34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000,34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000,34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000,34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000,34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000,34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000,34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000,34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000,34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000,34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000,34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000,34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000,34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000,34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000,34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000,34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000,34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000,34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000,34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000,34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000,34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000,35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000,35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000,35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000,35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000,35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000,35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000,35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000,35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000,35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000,35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000,35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000,35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000,35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000,35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000,35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000,35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000,35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000,35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000,35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000,35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000,35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000,35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000,35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000,35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000,35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000,35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000,35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000,35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000,35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000,35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000,35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000,35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000,35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000,35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000,35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000,35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000,35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000,35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000,35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000,35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000,35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000,35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000,35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000,35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000,35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000,35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000,35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000,35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000,35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000,35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000,35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000,35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000,35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000,35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000,35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000,35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000,35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000,35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000,35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000,35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000,35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000,35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000,36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000,36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000,36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000,36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000,36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000,36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000,36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000,36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000,36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000,36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000,36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000,36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000,36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000,36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000,36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000,36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000,36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000,36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000,36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000,36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000,36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000,36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000,36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000,36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000,36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000,36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000,36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000,36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000,36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000,36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000,36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000,36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000,36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000,36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000,36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000,36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000,36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000,36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000,36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000,36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000,36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000,36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000,36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000,36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000,36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000,36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000,36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000,36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000,36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000,36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000,36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000,36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000,36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000,36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000,36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000,36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000,36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000,36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000,36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000,36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000,36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000,36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000,36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000,37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000,37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000,37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000,37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000,37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000,37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000,37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000,37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000,37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000,37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000,37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000,37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000,37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000,37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000,37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000,37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000,37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000,37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000,37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000,37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000,37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000,37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000,37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000,37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000,37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000,37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000,37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000,37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000,37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000,37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000,37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000,37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000,37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000,37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000,37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000,37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000,37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000,37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000,37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000,37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000,37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000,37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000,37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000,37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000,37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000,37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000,37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000,37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000,37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000,37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000,37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000,37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000,37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000,37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000,37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000,37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000,37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000,37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000,37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000,37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000,37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000,37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000,38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000,38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000,38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000,38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000,38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000,38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000,38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000,38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000,38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000,38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000,38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000,38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000,38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000,38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000,38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000,38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000,38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000,38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000,38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000,38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000,38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000,38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000,38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000,38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000,38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000,38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000,38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000,38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000,38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000,38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000,38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000,38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000,38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000,38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000,38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000,38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000,38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000,38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000,38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000,38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000,38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000,38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000,38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000,38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000,38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000,38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000,38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000,38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000,38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000,38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000,38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000,38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000,38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000,38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000,38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000,38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000,38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000,38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000,38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000,38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000,38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000,38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000,38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000,39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000,39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000,39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000,39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000,39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000,39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000,39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000,39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000,39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000,39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000,39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000,39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000,39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000,39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000,39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000,39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000,39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000,39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000,39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000,39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000,39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000,39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000,39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000,39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000,39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000,39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000,39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000,39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000,39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000,39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000,39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000,39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000,39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000,39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000,39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000,39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000,39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000,39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000,39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000,39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000,39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000,39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000,39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000,39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000,39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000,39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000,39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000,39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000,39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000,39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000,39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000,39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000,39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000,39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000,39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000,39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000,39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000,39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000,39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000,39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000,39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000,39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000,40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000,40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000,40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000,40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000,40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000,40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000,40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000,40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000,40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000,40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000,40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000,40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000,40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000,40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000,40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000,40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000,40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000,40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000,40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000,40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000,40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000,40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000,40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000,40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000,40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000,40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000,40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000,40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000,40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000,40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000,40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000,40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000,40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000,40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000,40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000,40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000,40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000,40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000,40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000,40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000,40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000,40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000,40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000,40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000,40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000,40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000,40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000,40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000,40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000,40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000,40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000,40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000,40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000,40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000,40869=>1000,44032=>1000,44033=>1000,44034=>1000,44035=>1000,44036=>1000,44037=>1000,44038=>1000,44039=>1000,44040=>1000,44041=>1000,44042=>1000,44043=>1000,44044=>1000,44045=>1000,44046=>1000,44047=>1000,44048=>1000,44049=>1000,44050=>1000,44051=>1000,44052=>1000,44053=>1000,44054=>1000,44055=>1000,44056=>1000,44057=>1000,44058=>1000,44059=>1000,44060=>1000,44061=>1000,44062=>1000,44063=>1000,44064=>1000,44065=>1000,44066=>1000,44067=>1000,44068=>1000,44069=>1000,44070=>1000,44071=>1000,44072=>1000,44073=>1000,44074=>1000,44075=>1000,44076=>1000,44077=>1000,44078=>1000,44079=>1000,44080=>1000,44081=>1000,44082=>1000,44083=>1000,44084=>1000,44085=>1000,44086=>1000,44087=>1000,44088=>1000,44089=>1000,44090=>1000,44091=>1000,44092=>1000,44093=>1000,44094=>1000,44095=>1000,44096=>1000,44097=>1000,44098=>1000,44099=>1000,44100=>1000,44101=>1000,44102=>1000,44103=>1000,44104=>1000,44105=>1000,44106=>1000,44107=>1000,44108=>1000,44109=>1000,44110=>1000,44111=>1000,44112=>1000,44113=>1000,44114=>1000,44115=>1000,44116=>1000,44117=>1000,44118=>1000,44119=>1000,44120=>1000,44121=>1000,44122=>1000,44123=>1000,44124=>1000,44125=>1000,44126=>1000,44127=>1000,44128=>1000,44129=>1000,44130=>1000,44131=>1000,44132=>1000,44133=>1000,44134=>1000,44135=>1000,44136=>1000,44137=>1000,44138=>1000,44139=>1000,44140=>1000,44141=>1000,44142=>1000,44143=>1000,44144=>1000,44145=>1000,44146=>1000,44147=>1000,44148=>1000,44149=>1000,44150=>1000,44151=>1000,44152=>1000,44153=>1000,44154=>1000,44155=>1000,44156=>1000,44157=>1000,44158=>1000,44159=>1000,44160=>1000,44161=>1000,44162=>1000,44163=>1000,44164=>1000,44165=>1000,44166=>1000,44167=>1000,44168=>1000,44169=>1000,44170=>1000,44171=>1000,44172=>1000,44173=>1000,44174=>1000,44175=>1000,44176=>1000,44177=>1000,44178=>1000,44179=>1000,44180=>1000,44181=>1000,44182=>1000,44183=>1000,44184=>1000,44185=>1000,44186=>1000,44187=>1000,44188=>1000,44189=>1000,44190=>1000,44191=>1000,44192=>1000,44193=>1000,44194=>1000,44195=>1000,44196=>1000,44197=>1000,44198=>1000,44199=>1000,44200=>1000,44201=>1000,44202=>1000,44203=>1000,44204=>1000,44205=>1000,44206=>1000,44207=>1000,44208=>1000,44209=>1000,44210=>1000,44211=>1000,44212=>1000,44213=>1000,44214=>1000,44215=>1000,44216=>1000,44217=>1000,44218=>1000,44219=>1000,44220=>1000,44221=>1000,44222=>1000,44223=>1000,44224=>1000,44225=>1000,44226=>1000,44227=>1000,44228=>1000,44229=>1000,44230=>1000,44231=>1000,44232=>1000,44233=>1000,44234=>1000,44235=>1000,44236=>1000,44237=>1000,44238=>1000,44239=>1000,44240=>1000,44241=>1000,44242=>1000,44243=>1000,44244=>1000,44245=>1000,44246=>1000,44247=>1000,44248=>1000,44249=>1000,44250=>1000,44251=>1000,44252=>1000,44253=>1000,44254=>1000,44255=>1000,44256=>1000,44257=>1000,44258=>1000,44259=>1000,44260=>1000,44261=>1000,44262=>1000,44263=>1000,44264=>1000,44265=>1000,44266=>1000,44267=>1000,44268=>1000,44269=>1000,44270=>1000,44271=>1000,44272=>1000,44273=>1000,44274=>1000,44275=>1000,44276=>1000,44277=>1000,44278=>1000,44279=>1000,44280=>1000,44281=>1000,44282=>1000,44283=>1000,44284=>1000,44285=>1000,44286=>1000,44287=>1000,44288=>1000,44289=>1000,44290=>1000,44291=>1000,44292=>1000,44293=>1000,44294=>1000,44295=>1000,44296=>1000,44297=>1000,44298=>1000,44299=>1000,44300=>1000,44301=>1000,44302=>1000,44303=>1000,44304=>1000,44305=>1000,44306=>1000,44307=>1000,44308=>1000,44309=>1000,44310=>1000,44311=>1000,44312=>1000,44313=>1000,44314=>1000,44315=>1000,44316=>1000,44317=>1000,44318=>1000,44319=>1000,44320=>1000,44321=>1000,44322=>1000,44323=>1000,44324=>1000,44325=>1000,44326=>1000,44327=>1000,44328=>1000,44329=>1000,44330=>1000,44331=>1000,44332=>1000,44333=>1000,44334=>1000,44335=>1000,44336=>1000,44337=>1000,44338=>1000,44339=>1000,44340=>1000,44341=>1000,44342=>1000,44343=>1000,44344=>1000,44345=>1000,44346=>1000,44347=>1000,44348=>1000,44349=>1000,44350=>1000,44351=>1000,44352=>1000,44353=>1000,44354=>1000,44355=>1000,44356=>1000,44357=>1000,44358=>1000,44359=>1000,44360=>1000,44361=>1000,44362=>1000,44363=>1000,44364=>1000,44365=>1000,44366=>1000,44367=>1000,44368=>1000,44369=>1000,44370=>1000,44371=>1000,44372=>1000,44373=>1000,44374=>1000,44375=>1000,44376=>1000,44377=>1000,44378=>1000,44379=>1000,44380=>1000,44381=>1000,44382=>1000,44383=>1000,44384=>1000,44385=>1000,44386=>1000,44387=>1000,44388=>1000,44389=>1000,44390=>1000,44391=>1000,44392=>1000,44393=>1000,44394=>1000,44395=>1000,44396=>1000,44397=>1000,44398=>1000,44399=>1000,44400=>1000,44401=>1000,44402=>1000,44403=>1000,44404=>1000,44405=>1000,44406=>1000,44407=>1000,44408=>1000,44409=>1000,44410=>1000,44411=>1000,44412=>1000,44413=>1000,44414=>1000,44415=>1000,44416=>1000,44417=>1000,44418=>1000,44419=>1000,44420=>1000,44421=>1000,44422=>1000,44423=>1000,44424=>1000,44425=>1000,44426=>1000,44427=>1000,44428=>1000,44429=>1000,44430=>1000,44431=>1000,44432=>1000,44433=>1000,44434=>1000,44435=>1000,44436=>1000,44437=>1000,44438=>1000,44439=>1000,44440=>1000,44441=>1000,44442=>1000,44443=>1000,44444=>1000,44445=>1000,44446=>1000,44447=>1000,44448=>1000,44449=>1000,44450=>1000,44451=>1000,44452=>1000,44453=>1000,44454=>1000,44455=>1000,44456=>1000,44457=>1000,44458=>1000,44459=>1000,44460=>1000,44461=>1000,44462=>1000,44463=>1000,44464=>1000,44465=>1000,44466=>1000,44467=>1000,44468=>1000,44469=>1000,44470=>1000,44471=>1000,44472=>1000,44473=>1000,44474=>1000,44475=>1000,44476=>1000,44477=>1000,44478=>1000,44479=>1000,44480=>1000,44481=>1000,44482=>1000,44483=>1000,44484=>1000,44485=>1000,44486=>1000,44487=>1000,44488=>1000,44489=>1000,44490=>1000,44491=>1000,44492=>1000,44493=>1000,44494=>1000,44495=>1000,44496=>1000,44497=>1000,44498=>1000,44499=>1000,44500=>1000,44501=>1000,44502=>1000,44503=>1000,44504=>1000,44505=>1000,44506=>1000,44507=>1000,44508=>1000,44509=>1000,44510=>1000,44511=>1000,44512=>1000,44513=>1000,44514=>1000,44515=>1000,44516=>1000,44517=>1000,44518=>1000,44519=>1000,44520=>1000,44521=>1000,44522=>1000,44523=>1000,44524=>1000,44525=>1000,44526=>1000,44527=>1000,44528=>1000,44529=>1000,44530=>1000,44531=>1000,44532=>1000,44533=>1000,44534=>1000,44535=>1000,44536=>1000,44537=>1000,44538=>1000,44539=>1000,44540=>1000,44541=>1000,44542=>1000,44543=>1000,44544=>1000,44545=>1000,44546=>1000,44547=>1000,44548=>1000,44549=>1000,44550=>1000,44551=>1000,44552=>1000,44553=>1000,44554=>1000,44555=>1000,44556=>1000,44557=>1000,44558=>1000,44559=>1000,44560=>1000,44561=>1000,44562=>1000,44563=>1000,44564=>1000,44565=>1000,44566=>1000,44567=>1000,44568=>1000,44569=>1000,44570=>1000,44571=>1000,44572=>1000,44573=>1000,44574=>1000,44575=>1000,44576=>1000,44577=>1000,44578=>1000,44579=>1000,44580=>1000,44581=>1000,44582=>1000,44583=>1000,44584=>1000,44585=>1000,44586=>1000,44587=>1000,44588=>1000,44589=>1000,44590=>1000,44591=>1000,44592=>1000,44593=>1000,44594=>1000,44595=>1000,44596=>1000,44597=>1000,44598=>1000,44599=>1000,44600=>1000,44601=>1000,44602=>1000,44603=>1000,44604=>1000,44605=>1000,44606=>1000,44607=>1000,44608=>1000,44609=>1000,44610=>1000,44611=>1000,44612=>1000,44613=>1000,44614=>1000,44615=>1000,44616=>1000,44617=>1000,44618=>1000,44619=>1000,44620=>1000,44621=>1000,44622=>1000,44623=>1000,44624=>1000,44625=>1000,44626=>1000,44627=>1000,44628=>1000,44629=>1000,44630=>1000,44631=>1000,44632=>1000,44633=>1000,44634=>1000,44635=>1000,44636=>1000,44637=>1000,44638=>1000,44639=>1000,44640=>1000,44641=>1000,44642=>1000,44643=>1000,44644=>1000,44645=>1000,44646=>1000,44647=>1000,44648=>1000,44649=>1000,44650=>1000,44651=>1000,44652=>1000,44653=>1000,44654=>1000,44655=>1000,44656=>1000,44657=>1000,44658=>1000,44659=>1000,44660=>1000,44661=>1000,44662=>1000,44663=>1000,44664=>1000,44665=>1000,44666=>1000,44667=>1000,44668=>1000,44669=>1000,44670=>1000,44671=>1000,44672=>1000,44673=>1000,44674=>1000,44675=>1000,44676=>1000,44677=>1000,44678=>1000,44679=>1000,44680=>1000,44681=>1000,44682=>1000,44683=>1000,44684=>1000,44685=>1000,44686=>1000,44687=>1000,44688=>1000,44689=>1000,44690=>1000,44691=>1000,44692=>1000,44693=>1000,44694=>1000,44695=>1000,44696=>1000,44697=>1000,44698=>1000,44699=>1000,44700=>1000,44701=>1000,44702=>1000,44703=>1000,44704=>1000,44705=>1000,44706=>1000,44707=>1000,44708=>1000,44709=>1000,44710=>1000,44711=>1000,44712=>1000,44713=>1000,44714=>1000,44715=>1000,44716=>1000,44717=>1000,44718=>1000,44719=>1000,44720=>1000,44721=>1000,44722=>1000,44723=>1000,44724=>1000,44725=>1000,44726=>1000,44727=>1000,44728=>1000,44729=>1000,44730=>1000,44731=>1000,44732=>1000,44733=>1000,44734=>1000,44735=>1000,44736=>1000,44737=>1000,44738=>1000,44739=>1000,44740=>1000,44741=>1000,44742=>1000,44743=>1000,44744=>1000,44745=>1000,44746=>1000,44747=>1000,44748=>1000,44749=>1000,44750=>1000,44751=>1000,44752=>1000,44753=>1000,44754=>1000,44755=>1000,44756=>1000,44757=>1000,44758=>1000,44759=>1000,44760=>1000,44761=>1000,44762=>1000,44763=>1000,44764=>1000,44765=>1000,44766=>1000,44767=>1000,44768=>1000,44769=>1000,44770=>1000,44771=>1000,44772=>1000,44773=>1000,44774=>1000,44775=>1000,44776=>1000,44777=>1000,44778=>1000,44779=>1000,44780=>1000,44781=>1000,44782=>1000,44783=>1000,44784=>1000,44785=>1000,44786=>1000,44787=>1000,44788=>1000,44789=>1000,44790=>1000,44791=>1000,44792=>1000,44793=>1000,44794=>1000,44795=>1000,44796=>1000,44797=>1000,44798=>1000,44799=>1000,44800=>1000,44801=>1000,44802=>1000,44803=>1000,44804=>1000,44805=>1000,44806=>1000,44807=>1000,44808=>1000,44809=>1000,44810=>1000,44811=>1000,44812=>1000,44813=>1000,44814=>1000,44815=>1000,44816=>1000,44817=>1000,44818=>1000,44819=>1000,44820=>1000,44821=>1000,44822=>1000,44823=>1000,44824=>1000,44825=>1000,44826=>1000,44827=>1000,44828=>1000,44829=>1000,44830=>1000,44831=>1000,44832=>1000,44833=>1000,44834=>1000,44835=>1000,44836=>1000,44837=>1000,44838=>1000,44839=>1000,44840=>1000,44841=>1000,44842=>1000,44843=>1000,44844=>1000,44845=>1000,44846=>1000,44847=>1000,44848=>1000,44849=>1000,44850=>1000,44851=>1000,44852=>1000,44853=>1000,44854=>1000,44855=>1000,44856=>1000,44857=>1000,44858=>1000,44859=>1000,44860=>1000,44861=>1000,44862=>1000,44863=>1000,44864=>1000,44865=>1000,44866=>1000,44867=>1000,44868=>1000,44869=>1000,44870=>1000,44871=>1000,44872=>1000,44873=>1000,44874=>1000,44875=>1000,44876=>1000,44877=>1000,44878=>1000,44879=>1000,44880=>1000,44881=>1000,44882=>1000,44883=>1000,44884=>1000,44885=>1000,44886=>1000,44887=>1000,44888=>1000,44889=>1000,44890=>1000,44891=>1000,44892=>1000,44893=>1000,44894=>1000,44895=>1000,44896=>1000,44897=>1000,44898=>1000,44899=>1000,44900=>1000,44901=>1000,44902=>1000,44903=>1000,44904=>1000,44905=>1000,44906=>1000,44907=>1000,44908=>1000,44909=>1000,44910=>1000,44911=>1000,44912=>1000,44913=>1000,44914=>1000,44915=>1000,44916=>1000,44917=>1000,44918=>1000,44919=>1000,44920=>1000,44921=>1000,44922=>1000,44923=>1000,44924=>1000,44925=>1000,44926=>1000,44927=>1000,44928=>1000,44929=>1000,44930=>1000,44931=>1000,44932=>1000,44933=>1000,44934=>1000,44935=>1000,44936=>1000,44937=>1000,44938=>1000,44939=>1000,44940=>1000,44941=>1000,44942=>1000,44943=>1000,44944=>1000,44945=>1000,44946=>1000,44947=>1000,44948=>1000,44949=>1000,44950=>1000,44951=>1000,44952=>1000,44953=>1000,44954=>1000,44955=>1000,44956=>1000,44957=>1000,44958=>1000,44959=>1000,44960=>1000,44961=>1000,44962=>1000,44963=>1000,44964=>1000,44965=>1000,44966=>1000,44967=>1000,44968=>1000,44969=>1000,44970=>1000,44971=>1000,44972=>1000,44973=>1000,44974=>1000,44975=>1000,44976=>1000,44977=>1000,44978=>1000,44979=>1000,44980=>1000,44981=>1000,44982=>1000,44983=>1000,44984=>1000,44985=>1000,44986=>1000,44987=>1000,44988=>1000,44989=>1000,44990=>1000,44991=>1000,44992=>1000,44993=>1000,44994=>1000,44995=>1000,44996=>1000,44997=>1000,44998=>1000,44999=>1000,45000=>1000,45001=>1000,45002=>1000,45003=>1000,45004=>1000,45005=>1000,45006=>1000,45007=>1000,45008=>1000,45009=>1000,45010=>1000,45011=>1000,45012=>1000,45013=>1000,45014=>1000,45015=>1000,45016=>1000,45017=>1000,45018=>1000,45019=>1000,45020=>1000,45021=>1000,45022=>1000,45023=>1000,45024=>1000,45025=>1000,45026=>1000,45027=>1000,45028=>1000,45029=>1000,45030=>1000,45031=>1000,45032=>1000,45033=>1000,45034=>1000,45035=>1000,45036=>1000,45037=>1000,45038=>1000,45039=>1000,45040=>1000,45041=>1000,45042=>1000,45043=>1000,45044=>1000,45045=>1000,45046=>1000,45047=>1000,45048=>1000,45049=>1000,45050=>1000,45051=>1000,45052=>1000,45053=>1000,45054=>1000,45055=>1000,45056=>1000,45057=>1000,45058=>1000,45059=>1000,45060=>1000,45061=>1000,45062=>1000,45063=>1000,45064=>1000,45065=>1000,45066=>1000,45067=>1000,45068=>1000,45069=>1000,45070=>1000,45071=>1000,45072=>1000,45073=>1000,45074=>1000,45075=>1000,45076=>1000,45077=>1000,45078=>1000,45079=>1000,45080=>1000,45081=>1000,45082=>1000,45083=>1000,45084=>1000,45085=>1000,45086=>1000,45087=>1000,45088=>1000,45089=>1000,45090=>1000,45091=>1000,45092=>1000,45093=>1000,45094=>1000,45095=>1000,45096=>1000,45097=>1000,45098=>1000,45099=>1000,45100=>1000,45101=>1000,45102=>1000,45103=>1000,45104=>1000,45105=>1000,45106=>1000,45107=>1000,45108=>1000,45109=>1000,45110=>1000,45111=>1000,45112=>1000,45113=>1000,45114=>1000,45115=>1000,45116=>1000,45117=>1000,45118=>1000,45119=>1000,45120=>1000,45121=>1000,45122=>1000,45123=>1000,45124=>1000,45125=>1000,45126=>1000,45127=>1000,45128=>1000,45129=>1000,45130=>1000,45131=>1000,45132=>1000,45133=>1000,45134=>1000,45135=>1000,45136=>1000,45137=>1000,45138=>1000,45139=>1000,45140=>1000,45141=>1000,45142=>1000,45143=>1000,45144=>1000,45145=>1000,45146=>1000,45147=>1000,45148=>1000,45149=>1000,45150=>1000,45151=>1000,45152=>1000,45153=>1000,45154=>1000,45155=>1000,45156=>1000,45157=>1000,45158=>1000,45159=>1000,45160=>1000,45161=>1000,45162=>1000,45163=>1000,45164=>1000,45165=>1000,45166=>1000,45167=>1000,45168=>1000,45169=>1000,45170=>1000,45171=>1000,45172=>1000,45173=>1000,45174=>1000,45175=>1000,45176=>1000,45177=>1000,45178=>1000,45179=>1000,45180=>1000,45181=>1000,45182=>1000,45183=>1000,45184=>1000,45185=>1000,45186=>1000,45187=>1000,45188=>1000,45189=>1000,45190=>1000,45191=>1000,45192=>1000,45193=>1000,45194=>1000,45195=>1000,45196=>1000,45197=>1000,45198=>1000,45199=>1000,45200=>1000,45201=>1000,45202=>1000,45203=>1000,45204=>1000,45205=>1000,45206=>1000,45207=>1000,45208=>1000,45209=>1000,45210=>1000,45211=>1000,45212=>1000,45213=>1000,45214=>1000,45215=>1000,45216=>1000,45217=>1000,45218=>1000,45219=>1000,45220=>1000,45221=>1000,45222=>1000,45223=>1000,45224=>1000,45225=>1000,45226=>1000,45227=>1000,45228=>1000,45229=>1000,45230=>1000,45231=>1000,45232=>1000,45233=>1000,45234=>1000,45235=>1000,45236=>1000,45237=>1000,45238=>1000,45239=>1000,45240=>1000,45241=>1000,45242=>1000,45243=>1000,45244=>1000,45245=>1000,45246=>1000,45247=>1000,45248=>1000,45249=>1000,45250=>1000,45251=>1000,45252=>1000,45253=>1000,45254=>1000,45255=>1000,45256=>1000,45257=>1000,45258=>1000,45259=>1000,45260=>1000,45261=>1000,45262=>1000,45263=>1000,45264=>1000,45265=>1000,45266=>1000,45267=>1000,45268=>1000,45269=>1000,45270=>1000,45271=>1000,45272=>1000,45273=>1000,45274=>1000,45275=>1000,45276=>1000,45277=>1000,45278=>1000,45279=>1000,45280=>1000,45281=>1000,45282=>1000,45283=>1000,45284=>1000,45285=>1000,45286=>1000,45287=>1000,45288=>1000,45289=>1000,45290=>1000,45291=>1000,45292=>1000,45293=>1000,45294=>1000,45295=>1000,45296=>1000,45297=>1000,45298=>1000,45299=>1000,45300=>1000,45301=>1000,45302=>1000,45303=>1000,45304=>1000,45305=>1000,45306=>1000,45307=>1000,45308=>1000,45309=>1000,45310=>1000,45311=>1000,45312=>1000,45313=>1000,45314=>1000,45315=>1000,45316=>1000,45317=>1000,45318=>1000,45319=>1000,45320=>1000,45321=>1000,45322=>1000,45323=>1000,45324=>1000,45325=>1000,45326=>1000,45327=>1000,45328=>1000,45329=>1000,45330=>1000,45331=>1000,45332=>1000,45333=>1000,45334=>1000,45335=>1000,45336=>1000,45337=>1000,45338=>1000,45339=>1000,45340=>1000,45341=>1000,45342=>1000,45343=>1000,45344=>1000,45345=>1000,45346=>1000,45347=>1000,45348=>1000,45349=>1000,45350=>1000,45351=>1000,45352=>1000,45353=>1000,45354=>1000,45355=>1000,45356=>1000,45357=>1000,45358=>1000,45359=>1000,45360=>1000,45361=>1000,45362=>1000,45363=>1000,45364=>1000,45365=>1000,45366=>1000,45367=>1000,45368=>1000,45369=>1000,45370=>1000,45371=>1000,45372=>1000,45373=>1000,45374=>1000,45375=>1000,45376=>1000,45377=>1000,45378=>1000,45379=>1000,45380=>1000,45381=>1000,45382=>1000,45383=>1000,45384=>1000,45385=>1000,45386=>1000,45387=>1000,45388=>1000,45389=>1000,45390=>1000,45391=>1000,45392=>1000,45393=>1000,45394=>1000,45395=>1000,45396=>1000,45397=>1000,45398=>1000,45399=>1000,45400=>1000,45401=>1000,45402=>1000,45403=>1000,45404=>1000,45405=>1000,45406=>1000,45407=>1000,45408=>1000,45409=>1000,45410=>1000,45411=>1000,45412=>1000,45413=>1000,45414=>1000,45415=>1000,45416=>1000,45417=>1000,45418=>1000,45419=>1000,45420=>1000,45421=>1000,45422=>1000,45423=>1000,45424=>1000,45425=>1000,45426=>1000,45427=>1000,45428=>1000,45429=>1000,45430=>1000,45431=>1000,45432=>1000,45433=>1000,45434=>1000,45435=>1000,45436=>1000,45437=>1000,45438=>1000,45439=>1000,45440=>1000,45441=>1000,45442=>1000,45443=>1000,45444=>1000,45445=>1000,45446=>1000,45447=>1000,45448=>1000,45449=>1000,45450=>1000,45451=>1000,45452=>1000,45453=>1000,45454=>1000,45455=>1000,45456=>1000,45457=>1000,45458=>1000,45459=>1000,45460=>1000,45461=>1000,45462=>1000,45463=>1000,45464=>1000,45465=>1000,45466=>1000,45467=>1000,45468=>1000,45469=>1000,45470=>1000,45471=>1000,45472=>1000,45473=>1000,45474=>1000,45475=>1000,45476=>1000,45477=>1000,45478=>1000,45479=>1000,45480=>1000,45481=>1000,45482=>1000,45483=>1000,45484=>1000,45485=>1000,45486=>1000,45487=>1000,45488=>1000,45489=>1000,45490=>1000,45491=>1000,45492=>1000,45493=>1000,45494=>1000,45495=>1000,45496=>1000,45497=>1000,45498=>1000,45499=>1000,45500=>1000,45501=>1000,45502=>1000,45503=>1000,45504=>1000,45505=>1000,45506=>1000,45507=>1000,45508=>1000,45509=>1000,45510=>1000,45511=>1000,45512=>1000,45513=>1000,45514=>1000,45515=>1000,45516=>1000,45517=>1000,45518=>1000,45519=>1000,45520=>1000,45521=>1000,45522=>1000,45523=>1000,45524=>1000,45525=>1000,45526=>1000,45527=>1000,45528=>1000,45529=>1000,45530=>1000,45531=>1000,45532=>1000,45533=>1000,45534=>1000,45535=>1000,45536=>1000,45537=>1000,45538=>1000,45539=>1000,45540=>1000,45541=>1000,45542=>1000,45543=>1000,45544=>1000,45545=>1000,45546=>1000,45547=>1000,45548=>1000,45549=>1000,45550=>1000,45551=>1000,45552=>1000,45553=>1000,45554=>1000,45555=>1000,45556=>1000,45557=>1000,45558=>1000,45559=>1000,45560=>1000,45561=>1000,45562=>1000,45563=>1000,45564=>1000,45565=>1000,45566=>1000,45567=>1000,45568=>1000,45569=>1000,45570=>1000,45571=>1000,45572=>1000,45573=>1000,45574=>1000,45575=>1000,45576=>1000,45577=>1000,45578=>1000,45579=>1000,45580=>1000,45581=>1000,45582=>1000,45583=>1000,45584=>1000,45585=>1000,45586=>1000,45587=>1000,45588=>1000,45589=>1000,45590=>1000,45591=>1000,45592=>1000,45593=>1000,45594=>1000,45595=>1000,45596=>1000,45597=>1000,45598=>1000,45599=>1000,45600=>1000,45601=>1000,45602=>1000,45603=>1000,45604=>1000,45605=>1000,45606=>1000,45607=>1000,45608=>1000,45609=>1000,45610=>1000,45611=>1000,45612=>1000,45613=>1000,45614=>1000,45615=>1000,45616=>1000,45617=>1000,45618=>1000,45619=>1000,45620=>1000,45621=>1000,45622=>1000,45623=>1000,45624=>1000,45625=>1000,45626=>1000,45627=>1000,45628=>1000,45629=>1000,45630=>1000,45631=>1000,45632=>1000,45633=>1000,45634=>1000,45635=>1000,45636=>1000,45637=>1000,45638=>1000,45639=>1000,45640=>1000,45641=>1000,45642=>1000,45643=>1000,45644=>1000,45645=>1000,45646=>1000,45647=>1000,45648=>1000,45649=>1000,45650=>1000,45651=>1000,45652=>1000,45653=>1000,45654=>1000,45655=>1000,45656=>1000,45657=>1000,45658=>1000,45659=>1000,45660=>1000,45661=>1000,45662=>1000,45663=>1000,45664=>1000,45665=>1000,45666=>1000,45667=>1000,45668=>1000,45669=>1000,45670=>1000,45671=>1000,45672=>1000,45673=>1000,45674=>1000,45675=>1000,45676=>1000,45677=>1000,45678=>1000,45679=>1000,45680=>1000,45681=>1000,45682=>1000,45683=>1000,45684=>1000,45685=>1000,45686=>1000,45687=>1000,45688=>1000,45689=>1000,45690=>1000,45691=>1000,45692=>1000,45693=>1000,45694=>1000,45695=>1000,45696=>1000,45697=>1000,45698=>1000,45699=>1000,45700=>1000,45701=>1000,45702=>1000,45703=>1000,45704=>1000,45705=>1000,45706=>1000,45707=>1000,45708=>1000,45709=>1000,45710=>1000,45711=>1000,45712=>1000,45713=>1000,45714=>1000,45715=>1000,45716=>1000,45717=>1000,45718=>1000,45719=>1000,45720=>1000,45721=>1000,45722=>1000,45723=>1000,45724=>1000,45725=>1000,45726=>1000,45727=>1000,45728=>1000,45729=>1000,45730=>1000,45731=>1000,45732=>1000,45733=>1000,45734=>1000,45735=>1000,45736=>1000,45737=>1000,45738=>1000,45739=>1000,45740=>1000,45741=>1000,45742=>1000,45743=>1000,45744=>1000,45745=>1000,45746=>1000,45747=>1000,45748=>1000,45749=>1000,45750=>1000,45751=>1000,45752=>1000,45753=>1000,45754=>1000,45755=>1000,45756=>1000,45757=>1000,45758=>1000,45759=>1000,45760=>1000,45761=>1000,45762=>1000,45763=>1000,45764=>1000,45765=>1000,45766=>1000,45767=>1000,45768=>1000,45769=>1000,45770=>1000,45771=>1000,45772=>1000,45773=>1000,45774=>1000,45775=>1000,45776=>1000,45777=>1000,45778=>1000,45779=>1000,45780=>1000,45781=>1000,45782=>1000,45783=>1000,45784=>1000,45785=>1000,45786=>1000,45787=>1000,45788=>1000,45789=>1000,45790=>1000,45791=>1000,45792=>1000,45793=>1000,45794=>1000,45795=>1000,45796=>1000,45797=>1000,45798=>1000,45799=>1000,45800=>1000,45801=>1000,45802=>1000,45803=>1000,45804=>1000,45805=>1000,45806=>1000,45807=>1000,45808=>1000,45809=>1000,45810=>1000,45811=>1000,45812=>1000,45813=>1000,45814=>1000,45815=>1000,45816=>1000,45817=>1000,45818=>1000,45819=>1000,45820=>1000,45821=>1000,45822=>1000,45823=>1000,45824=>1000,45825=>1000,45826=>1000,45827=>1000,45828=>1000,45829=>1000,45830=>1000,45831=>1000,45832=>1000,45833=>1000,45834=>1000,45835=>1000,45836=>1000,45837=>1000,45838=>1000,45839=>1000,45840=>1000,45841=>1000,45842=>1000,45843=>1000,45844=>1000,45845=>1000,45846=>1000,45847=>1000,45848=>1000,45849=>1000,45850=>1000,45851=>1000,45852=>1000,45853=>1000,45854=>1000,45855=>1000,45856=>1000,45857=>1000,45858=>1000,45859=>1000,45860=>1000,45861=>1000,45862=>1000,45863=>1000,45864=>1000,45865=>1000,45866=>1000,45867=>1000,45868=>1000,45869=>1000,45870=>1000,45871=>1000,45872=>1000,45873=>1000,45874=>1000,45875=>1000,45876=>1000,45877=>1000,45878=>1000,45879=>1000,45880=>1000,45881=>1000,45882=>1000,45883=>1000,45884=>1000,45885=>1000,45886=>1000,45887=>1000,45888=>1000,45889=>1000,45890=>1000,45891=>1000,45892=>1000,45893=>1000,45894=>1000,45895=>1000,45896=>1000,45897=>1000,45898=>1000,45899=>1000,45900=>1000,45901=>1000,45902=>1000,45903=>1000,45904=>1000,45905=>1000,45906=>1000,45907=>1000,45908=>1000,45909=>1000,45910=>1000,45911=>1000,45912=>1000,45913=>1000,45914=>1000,45915=>1000,45916=>1000,45917=>1000,45918=>1000,45919=>1000,45920=>1000,45921=>1000,45922=>1000,45923=>1000,45924=>1000,45925=>1000,45926=>1000,45927=>1000,45928=>1000,45929=>1000,45930=>1000,45931=>1000,45932=>1000,45933=>1000,45934=>1000,45935=>1000,45936=>1000,45937=>1000,45938=>1000,45939=>1000,45940=>1000,45941=>1000,45942=>1000,45943=>1000,45944=>1000,45945=>1000,45946=>1000,45947=>1000,45948=>1000,45949=>1000,45950=>1000,45951=>1000,45952=>1000,45953=>1000,45954=>1000,45955=>1000,45956=>1000,45957=>1000,45958=>1000,45959=>1000,45960=>1000,45961=>1000,45962=>1000,45963=>1000,45964=>1000,45965=>1000,45966=>1000,45967=>1000,45968=>1000,45969=>1000,45970=>1000,45971=>1000,45972=>1000,45973=>1000,45974=>1000,45975=>1000,45976=>1000,45977=>1000,45978=>1000,45979=>1000,45980=>1000,45981=>1000,45982=>1000,45983=>1000,45984=>1000,45985=>1000,45986=>1000,45987=>1000,45988=>1000,45989=>1000,45990=>1000,45991=>1000,45992=>1000,45993=>1000,45994=>1000,45995=>1000,45996=>1000,45997=>1000,45998=>1000,45999=>1000,46000=>1000,46001=>1000,46002=>1000,46003=>1000,46004=>1000,46005=>1000,46006=>1000,46007=>1000,46008=>1000,46009=>1000,46010=>1000,46011=>1000,46012=>1000,46013=>1000,46014=>1000,46015=>1000,46016=>1000,46017=>1000,46018=>1000,46019=>1000,46020=>1000,46021=>1000,46022=>1000,46023=>1000,46024=>1000,46025=>1000,46026=>1000,46027=>1000,46028=>1000,46029=>1000,46030=>1000,46031=>1000,46032=>1000,46033=>1000,46034=>1000,46035=>1000,46036=>1000,46037=>1000,46038=>1000,46039=>1000,46040=>1000,46041=>1000,46042=>1000,46043=>1000,46044=>1000,46045=>1000,46046=>1000,46047=>1000,46048=>1000,46049=>1000,46050=>1000,46051=>1000,46052=>1000,46053=>1000,46054=>1000,46055=>1000,46056=>1000,46057=>1000,46058=>1000,46059=>1000,46060=>1000,46061=>1000,46062=>1000,46063=>1000,46064=>1000,46065=>1000,46066=>1000,46067=>1000,46068=>1000,46069=>1000,46070=>1000,46071=>1000,46072=>1000,46073=>1000,46074=>1000,46075=>1000,46076=>1000,46077=>1000,46078=>1000,46079=>1000,46080=>1000,46081=>1000,46082=>1000,46083=>1000,46084=>1000,46085=>1000,46086=>1000,46087=>1000,46088=>1000,46089=>1000,46090=>1000,46091=>1000,46092=>1000,46093=>1000,46094=>1000,46095=>1000,46096=>1000,46097=>1000,46098=>1000,46099=>1000,46100=>1000,46101=>1000,46102=>1000,46103=>1000,46104=>1000,46105=>1000,46106=>1000,46107=>1000,46108=>1000,46109=>1000,46110=>1000,46111=>1000,46112=>1000,46113=>1000,46114=>1000,46115=>1000,46116=>1000,46117=>1000,46118=>1000,46119=>1000,46120=>1000,46121=>1000,46122=>1000,46123=>1000,46124=>1000,46125=>1000,46126=>1000,46127=>1000,46128=>1000,46129=>1000,46130=>1000,46131=>1000,46132=>1000,46133=>1000,46134=>1000,46135=>1000,46136=>1000,46137=>1000,46138=>1000,46139=>1000,46140=>1000,46141=>1000,46142=>1000,46143=>1000,46144=>1000,46145=>1000,46146=>1000,46147=>1000,46148=>1000,46149=>1000,46150=>1000,46151=>1000,46152=>1000,46153=>1000,46154=>1000,46155=>1000,46156=>1000,46157=>1000,46158=>1000,46159=>1000,46160=>1000,46161=>1000,46162=>1000,46163=>1000,46164=>1000,46165=>1000,46166=>1000,46167=>1000,46168=>1000,46169=>1000,46170=>1000,46171=>1000,46172=>1000,46173=>1000,46174=>1000,46175=>1000,46176=>1000,46177=>1000,46178=>1000,46179=>1000,46180=>1000,46181=>1000,46182=>1000,46183=>1000,46184=>1000,46185=>1000,46186=>1000,46187=>1000,46188=>1000,46189=>1000,46190=>1000,46191=>1000,46192=>1000,46193=>1000,46194=>1000,46195=>1000,46196=>1000,46197=>1000,46198=>1000,46199=>1000,46200=>1000,46201=>1000,46202=>1000,46203=>1000,46204=>1000,46205=>1000,46206=>1000,46207=>1000,46208=>1000,46209=>1000,46210=>1000,46211=>1000,46212=>1000,46213=>1000,46214=>1000,46215=>1000,46216=>1000,46217=>1000,46218=>1000,46219=>1000,46220=>1000,46221=>1000,46222=>1000,46223=>1000,46224=>1000,46225=>1000,46226=>1000,46227=>1000,46228=>1000,46229=>1000,46230=>1000,46231=>1000,46232=>1000,46233=>1000,46234=>1000,46235=>1000,46236=>1000,46237=>1000,46238=>1000,46239=>1000,46240=>1000,46241=>1000,46242=>1000,46243=>1000,46244=>1000,46245=>1000,46246=>1000,46247=>1000,46248=>1000,46249=>1000,46250=>1000,46251=>1000,46252=>1000,46253=>1000,46254=>1000,46255=>1000,46256=>1000,46257=>1000,46258=>1000,46259=>1000,46260=>1000,46261=>1000,46262=>1000,46263=>1000,46264=>1000,46265=>1000,46266=>1000,46267=>1000,46268=>1000,46269=>1000,46270=>1000,46271=>1000,46272=>1000,46273=>1000,46274=>1000,46275=>1000,46276=>1000,46277=>1000,46278=>1000,46279=>1000,46280=>1000,46281=>1000,46282=>1000,46283=>1000,46284=>1000,46285=>1000,46286=>1000,46287=>1000,46288=>1000,46289=>1000,46290=>1000,46291=>1000,46292=>1000,46293=>1000,46294=>1000,46295=>1000,46296=>1000,46297=>1000,46298=>1000,46299=>1000,46300=>1000,46301=>1000,46302=>1000,46303=>1000,46304=>1000,46305=>1000,46306=>1000,46307=>1000,46308=>1000,46309=>1000,46310=>1000,46311=>1000,46312=>1000,46313=>1000,46314=>1000,46315=>1000,46316=>1000,46317=>1000,46318=>1000,46319=>1000,46320=>1000,46321=>1000,46322=>1000,46323=>1000,46324=>1000,46325=>1000,46326=>1000,46327=>1000,46328=>1000,46329=>1000,46330=>1000,46331=>1000,46332=>1000,46333=>1000,46334=>1000,46335=>1000,46336=>1000,46337=>1000,46338=>1000,46339=>1000,46340=>1000,46341=>1000,46342=>1000,46343=>1000,46344=>1000,46345=>1000,46346=>1000,46347=>1000,46348=>1000,46349=>1000,46350=>1000,46351=>1000,46352=>1000,46353=>1000,46354=>1000,46355=>1000,46356=>1000,46357=>1000,46358=>1000,46359=>1000,46360=>1000,46361=>1000,46362=>1000,46363=>1000,46364=>1000,46365=>1000,46366=>1000,46367=>1000,46368=>1000,46369=>1000,46370=>1000,46371=>1000,46372=>1000,46373=>1000,46374=>1000,46375=>1000,46376=>1000,46377=>1000,46378=>1000,46379=>1000,46380=>1000,46381=>1000,46382=>1000,46383=>1000,46384=>1000,46385=>1000,46386=>1000,46387=>1000,46388=>1000,46389=>1000,46390=>1000,46391=>1000,46392=>1000,46393=>1000,46394=>1000,46395=>1000,46396=>1000,46397=>1000,46398=>1000,46399=>1000,46400=>1000,46401=>1000,46402=>1000,46403=>1000,46404=>1000,46405=>1000,46406=>1000,46407=>1000,46408=>1000,46409=>1000,46410=>1000,46411=>1000,46412=>1000,46413=>1000,46414=>1000,46415=>1000,46416=>1000,46417=>1000,46418=>1000,46419=>1000,46420=>1000,46421=>1000,46422=>1000,46423=>1000,46424=>1000,46425=>1000,46426=>1000,46427=>1000,46428=>1000,46429=>1000,46430=>1000,46431=>1000,46432=>1000,46433=>1000,46434=>1000,46435=>1000,46436=>1000,46437=>1000,46438=>1000,46439=>1000,46440=>1000,46441=>1000,46442=>1000,46443=>1000,46444=>1000,46445=>1000,46446=>1000,46447=>1000,46448=>1000,46449=>1000,46450=>1000,46451=>1000,46452=>1000,46453=>1000,46454=>1000,46455=>1000,46456=>1000,46457=>1000,46458=>1000,46459=>1000,46460=>1000,46461=>1000,46462=>1000,46463=>1000,46464=>1000,46465=>1000,46466=>1000,46467=>1000,46468=>1000,46469=>1000,46470=>1000,46471=>1000,46472=>1000,46473=>1000,46474=>1000,46475=>1000,46476=>1000,46477=>1000,46478=>1000,46479=>1000,46480=>1000,46481=>1000,46482=>1000,46483=>1000,46484=>1000,46485=>1000,46486=>1000,46487=>1000,46488=>1000,46489=>1000,46490=>1000,46491=>1000,46492=>1000,46493=>1000,46494=>1000,46495=>1000,46496=>1000,46497=>1000,46498=>1000,46499=>1000,46500=>1000,46501=>1000,46502=>1000,46503=>1000,46504=>1000,46505=>1000,46506=>1000,46507=>1000,46508=>1000,46509=>1000,46510=>1000,46511=>1000,46512=>1000,46513=>1000,46514=>1000,46515=>1000,46516=>1000,46517=>1000,46518=>1000,46519=>1000,46520=>1000,46521=>1000,46522=>1000,46523=>1000,46524=>1000,46525=>1000,46526=>1000,46527=>1000,46528=>1000,46529=>1000,46530=>1000,46531=>1000,46532=>1000,46533=>1000,46534=>1000,46535=>1000,46536=>1000,46537=>1000,46538=>1000,46539=>1000,46540=>1000,46541=>1000,46542=>1000,46543=>1000,46544=>1000,46545=>1000,46546=>1000,46547=>1000,46548=>1000,46549=>1000,46550=>1000,46551=>1000,46552=>1000,46553=>1000,46554=>1000,46555=>1000,46556=>1000,46557=>1000,46558=>1000,46559=>1000,46560=>1000,46561=>1000,46562=>1000,46563=>1000,46564=>1000,46565=>1000,46566=>1000,46567=>1000,46568=>1000,46569=>1000,46570=>1000,46571=>1000,46572=>1000,46573=>1000,46574=>1000,46575=>1000,46576=>1000,46577=>1000,46578=>1000,46579=>1000,46580=>1000,46581=>1000,46582=>1000,46583=>1000,46584=>1000,46585=>1000,46586=>1000,46587=>1000,46588=>1000,46589=>1000,46590=>1000,46591=>1000,46592=>1000,46593=>1000,46594=>1000,46595=>1000,46596=>1000,46597=>1000,46598=>1000,46599=>1000,46600=>1000,46601=>1000,46602=>1000,46603=>1000,46604=>1000,46605=>1000,46606=>1000,46607=>1000,46608=>1000,46609=>1000,46610=>1000,46611=>1000,46612=>1000,46613=>1000,46614=>1000,46615=>1000,46616=>1000,46617=>1000,46618=>1000,46619=>1000,46620=>1000,46621=>1000,46622=>1000,46623=>1000,46624=>1000,46625=>1000,46626=>1000,46627=>1000,46628=>1000,46629=>1000,46630=>1000,46631=>1000,46632=>1000,46633=>1000,46634=>1000,46635=>1000,46636=>1000,46637=>1000,46638=>1000,46639=>1000,46640=>1000,46641=>1000,46642=>1000,46643=>1000,46644=>1000,46645=>1000,46646=>1000,46647=>1000,46648=>1000,46649=>1000,46650=>1000,46651=>1000,46652=>1000,46653=>1000,46654=>1000,46655=>1000,46656=>1000,46657=>1000,46658=>1000,46659=>1000,46660=>1000,46661=>1000,46662=>1000,46663=>1000,46664=>1000,46665=>1000,46666=>1000,46667=>1000,46668=>1000,46669=>1000,46670=>1000,46671=>1000,46672=>1000,46673=>1000,46674=>1000,46675=>1000,46676=>1000,46677=>1000,46678=>1000,46679=>1000,46680=>1000,46681=>1000,46682=>1000,46683=>1000,46684=>1000,46685=>1000,46686=>1000,46687=>1000,46688=>1000,46689=>1000,46690=>1000,46691=>1000,46692=>1000,46693=>1000,46694=>1000,46695=>1000,46696=>1000,46697=>1000,46698=>1000,46699=>1000,46700=>1000,46701=>1000,46702=>1000,46703=>1000,46704=>1000,46705=>1000,46706=>1000,46707=>1000,46708=>1000,46709=>1000,46710=>1000,46711=>1000,46712=>1000,46713=>1000,46714=>1000,46715=>1000,46716=>1000,46717=>1000,46718=>1000,46719=>1000,46720=>1000,46721=>1000,46722=>1000,46723=>1000,46724=>1000,46725=>1000,46726=>1000,46727=>1000,46728=>1000,46729=>1000,46730=>1000,46731=>1000,46732=>1000,46733=>1000,46734=>1000,46735=>1000,46736=>1000,46737=>1000,46738=>1000,46739=>1000,46740=>1000,46741=>1000,46742=>1000,46743=>1000,46744=>1000,46745=>1000,46746=>1000,46747=>1000,46748=>1000,46749=>1000,46750=>1000,46751=>1000,46752=>1000,46753=>1000,46754=>1000,46755=>1000,46756=>1000,46757=>1000,46758=>1000,46759=>1000,46760=>1000,46761=>1000,46762=>1000,46763=>1000,46764=>1000,46765=>1000,46766=>1000,46767=>1000,46768=>1000,46769=>1000,46770=>1000,46771=>1000,46772=>1000,46773=>1000,46774=>1000,46775=>1000,46776=>1000,46777=>1000,46778=>1000,46779=>1000,46780=>1000,46781=>1000,46782=>1000,46783=>1000,46784=>1000,46785=>1000,46786=>1000,46787=>1000,46788=>1000,46789=>1000,46790=>1000,46791=>1000,46792=>1000,46793=>1000,46794=>1000,46795=>1000,46796=>1000,46797=>1000,46798=>1000,46799=>1000,46800=>1000,46801=>1000,46802=>1000,46803=>1000,46804=>1000,46805=>1000,46806=>1000,46807=>1000,46808=>1000,46809=>1000,46810=>1000,46811=>1000,46812=>1000,46813=>1000,46814=>1000,46815=>1000,46816=>1000,46817=>1000,46818=>1000,46819=>1000,46820=>1000,46821=>1000,46822=>1000,46823=>1000,46824=>1000,46825=>1000,46826=>1000,46827=>1000,46828=>1000,46829=>1000,46830=>1000,46831=>1000,46832=>1000,46833=>1000,46834=>1000,46835=>1000,46836=>1000,46837=>1000,46838=>1000,46839=>1000,46840=>1000,46841=>1000,46842=>1000,46843=>1000,46844=>1000,46845=>1000,46846=>1000,46847=>1000,46848=>1000,46849=>1000,46850=>1000,46851=>1000,46852=>1000,46853=>1000,46854=>1000,46855=>1000,46856=>1000,46857=>1000,46858=>1000,46859=>1000,46860=>1000,46861=>1000,46862=>1000,46863=>1000,46864=>1000,46865=>1000,46866=>1000,46867=>1000,46868=>1000,46869=>1000,46870=>1000,46871=>1000,46872=>1000,46873=>1000,46874=>1000,46875=>1000,46876=>1000,46877=>1000,46878=>1000,46879=>1000,46880=>1000,46881=>1000,46882=>1000,46883=>1000,46884=>1000,46885=>1000,46886=>1000,46887=>1000,46888=>1000,46889=>1000,46890=>1000,46891=>1000,46892=>1000,46893=>1000,46894=>1000,46895=>1000,46896=>1000,46897=>1000,46898=>1000,46899=>1000,46900=>1000,46901=>1000,46902=>1000,46903=>1000,46904=>1000,46905=>1000,46906=>1000,46907=>1000,46908=>1000,46909=>1000,46910=>1000,46911=>1000,46912=>1000,46913=>1000,46914=>1000,46915=>1000,46916=>1000,46917=>1000,46918=>1000,46919=>1000,46920=>1000,46921=>1000,46922=>1000,46923=>1000,46924=>1000,46925=>1000,46926=>1000,46927=>1000,46928=>1000,46929=>1000,46930=>1000,46931=>1000,46932=>1000,46933=>1000,46934=>1000,46935=>1000,46936=>1000,46937=>1000,46938=>1000,46939=>1000,46940=>1000,46941=>1000,46942=>1000,46943=>1000,46944=>1000,46945=>1000,46946=>1000,46947=>1000,46948=>1000,46949=>1000,46950=>1000,46951=>1000,46952=>1000,46953=>1000,46954=>1000,46955=>1000,46956=>1000,46957=>1000,46958=>1000,46959=>1000,46960=>1000,46961=>1000,46962=>1000,46963=>1000,46964=>1000,46965=>1000,46966=>1000,46967=>1000,46968=>1000,46969=>1000,46970=>1000,46971=>1000,46972=>1000,46973=>1000,46974=>1000,46975=>1000,46976=>1000,46977=>1000,46978=>1000,46979=>1000,46980=>1000,46981=>1000,46982=>1000,46983=>1000,46984=>1000,46985=>1000,46986=>1000,46987=>1000,46988=>1000,46989=>1000,46990=>1000,46991=>1000,46992=>1000,46993=>1000,46994=>1000,46995=>1000,46996=>1000,46997=>1000,46998=>1000,46999=>1000,47000=>1000,47001=>1000,47002=>1000,47003=>1000,47004=>1000,47005=>1000,47006=>1000,47007=>1000,47008=>1000,47009=>1000,47010=>1000,47011=>1000,47012=>1000,47013=>1000,47014=>1000,47015=>1000,47016=>1000,47017=>1000,47018=>1000,47019=>1000,47020=>1000,47021=>1000,47022=>1000,47023=>1000,47024=>1000,47025=>1000,47026=>1000,47027=>1000,47028=>1000,47029=>1000,47030=>1000,47031=>1000,47032=>1000,47033=>1000,47034=>1000,47035=>1000,47036=>1000,47037=>1000,47038=>1000,47039=>1000,47040=>1000,47041=>1000,47042=>1000,47043=>1000,47044=>1000,47045=>1000,47046=>1000,47047=>1000,47048=>1000,47049=>1000,47050=>1000,47051=>1000,47052=>1000,47053=>1000,47054=>1000,47055=>1000,47056=>1000,47057=>1000,47058=>1000,47059=>1000,47060=>1000,47061=>1000,47062=>1000,47063=>1000,47064=>1000,47065=>1000,47066=>1000,47067=>1000,47068=>1000,47069=>1000,47070=>1000,47071=>1000,47072=>1000,47073=>1000,47074=>1000,47075=>1000,47076=>1000,47077=>1000,47078=>1000,47079=>1000,47080=>1000,47081=>1000,47082=>1000,47083=>1000,47084=>1000,47085=>1000,47086=>1000,47087=>1000,47088=>1000,47089=>1000,47090=>1000,47091=>1000,47092=>1000,47093=>1000,47094=>1000,47095=>1000,47096=>1000,47097=>1000,47098=>1000,47099=>1000,47100=>1000,47101=>1000,47102=>1000,47103=>1000,47104=>1000,47105=>1000,47106=>1000,47107=>1000,47108=>1000,47109=>1000,47110=>1000,47111=>1000,47112=>1000,47113=>1000,47114=>1000,47115=>1000,47116=>1000,47117=>1000,47118=>1000,47119=>1000,47120=>1000,47121=>1000,47122=>1000,47123=>1000,47124=>1000,47125=>1000,47126=>1000,47127=>1000,47128=>1000,47129=>1000,47130=>1000,47131=>1000,47132=>1000,47133=>1000,47134=>1000,47135=>1000,47136=>1000,47137=>1000,47138=>1000,47139=>1000,47140=>1000,47141=>1000,47142=>1000,47143=>1000,47144=>1000,47145=>1000,47146=>1000,47147=>1000,47148=>1000,47149=>1000,47150=>1000,47151=>1000,47152=>1000,47153=>1000,47154=>1000,47155=>1000,47156=>1000,47157=>1000,47158=>1000,47159=>1000,47160=>1000,47161=>1000,47162=>1000,47163=>1000,47164=>1000,47165=>1000,47166=>1000,47167=>1000,47168=>1000,47169=>1000,47170=>1000,47171=>1000,47172=>1000,47173=>1000,47174=>1000,47175=>1000,47176=>1000,47177=>1000,47178=>1000,47179=>1000,47180=>1000,47181=>1000,47182=>1000,47183=>1000,47184=>1000,47185=>1000,47186=>1000,47187=>1000,47188=>1000,47189=>1000,47190=>1000,47191=>1000,47192=>1000,47193=>1000,47194=>1000,47195=>1000,47196=>1000,47197=>1000,47198=>1000,47199=>1000,47200=>1000,47201=>1000,47202=>1000,47203=>1000,47204=>1000,47205=>1000,47206=>1000,47207=>1000,47208=>1000,47209=>1000,47210=>1000,47211=>1000,47212=>1000,47213=>1000,47214=>1000,47215=>1000,47216=>1000,47217=>1000,47218=>1000,47219=>1000,47220=>1000,47221=>1000,47222=>1000,47223=>1000,47224=>1000,47225=>1000,47226=>1000,47227=>1000,47228=>1000,47229=>1000,47230=>1000,47231=>1000,47232=>1000,47233=>1000,47234=>1000,47235=>1000,47236=>1000,47237=>1000,47238=>1000,47239=>1000,47240=>1000,47241=>1000,47242=>1000,47243=>1000,47244=>1000,47245=>1000,47246=>1000,47247=>1000,47248=>1000,47249=>1000,47250=>1000,47251=>1000,47252=>1000,47253=>1000,47254=>1000,47255=>1000,47256=>1000,47257=>1000,47258=>1000,47259=>1000,47260=>1000,47261=>1000,47262=>1000,47263=>1000,47264=>1000,47265=>1000,47266=>1000,47267=>1000,47268=>1000,47269=>1000,47270=>1000,47271=>1000,47272=>1000,47273=>1000,47274=>1000,47275=>1000,47276=>1000,47277=>1000,47278=>1000,47279=>1000,47280=>1000,47281=>1000,47282=>1000,47283=>1000,47284=>1000,47285=>1000,47286=>1000,47287=>1000,47288=>1000,47289=>1000,47290=>1000,47291=>1000,47292=>1000,47293=>1000,47294=>1000,47295=>1000,47296=>1000,47297=>1000,47298=>1000,47299=>1000,47300=>1000,47301=>1000,47302=>1000,47303=>1000,47304=>1000,47305=>1000,47306=>1000,47307=>1000,47308=>1000,47309=>1000,47310=>1000,47311=>1000,47312=>1000,47313=>1000,47314=>1000,47315=>1000,47316=>1000,47317=>1000,47318=>1000,47319=>1000,47320=>1000,47321=>1000,47322=>1000,47323=>1000,47324=>1000,47325=>1000,47326=>1000,47327=>1000,47328=>1000,47329=>1000,47330=>1000,47331=>1000,47332=>1000,47333=>1000,47334=>1000,47335=>1000,47336=>1000,47337=>1000,47338=>1000,47339=>1000,47340=>1000,47341=>1000,47342=>1000,47343=>1000,47344=>1000,47345=>1000,47346=>1000,47347=>1000,47348=>1000,47349=>1000,47350=>1000,47351=>1000,47352=>1000,47353=>1000,47354=>1000,47355=>1000,47356=>1000,47357=>1000,47358=>1000,47359=>1000,47360=>1000,47361=>1000,47362=>1000,47363=>1000,47364=>1000,47365=>1000,47366=>1000,47367=>1000,47368=>1000,47369=>1000,47370=>1000,47371=>1000,47372=>1000,47373=>1000,47374=>1000,47375=>1000,47376=>1000,47377=>1000,47378=>1000,47379=>1000,47380=>1000,47381=>1000,47382=>1000,47383=>1000,47384=>1000,47385=>1000,47386=>1000,47387=>1000,47388=>1000,47389=>1000,47390=>1000,47391=>1000,47392=>1000,47393=>1000,47394=>1000,47395=>1000,47396=>1000,47397=>1000,47398=>1000,47399=>1000,47400=>1000,47401=>1000,47402=>1000,47403=>1000,47404=>1000,47405=>1000,47406=>1000,47407=>1000,47408=>1000,47409=>1000,47410=>1000,47411=>1000,47412=>1000,47413=>1000,47414=>1000,47415=>1000,47416=>1000,47417=>1000,47418=>1000,47419=>1000,47420=>1000,47421=>1000,47422=>1000,47423=>1000,47424=>1000,47425=>1000,47426=>1000,47427=>1000,47428=>1000,47429=>1000,47430=>1000,47431=>1000,47432=>1000,47433=>1000,47434=>1000,47435=>1000,47436=>1000,47437=>1000,47438=>1000,47439=>1000,47440=>1000,47441=>1000,47442=>1000,47443=>1000,47444=>1000,47445=>1000,47446=>1000,47447=>1000,47448=>1000,47449=>1000,47450=>1000,47451=>1000,47452=>1000,47453=>1000,47454=>1000,47455=>1000,47456=>1000,47457=>1000,47458=>1000,47459=>1000,47460=>1000,47461=>1000,47462=>1000,47463=>1000,47464=>1000,47465=>1000,47466=>1000,47467=>1000,47468=>1000,47469=>1000,47470=>1000,47471=>1000,47472=>1000,47473=>1000,47474=>1000,47475=>1000,47476=>1000,47477=>1000,47478=>1000,47479=>1000,47480=>1000,47481=>1000,47482=>1000,47483=>1000,47484=>1000,47485=>1000,47486=>1000,47487=>1000,47488=>1000,47489=>1000,47490=>1000,47491=>1000,47492=>1000,47493=>1000,47494=>1000,47495=>1000,47496=>1000,47497=>1000,47498=>1000,47499=>1000,47500=>1000,47501=>1000,47502=>1000,47503=>1000,47504=>1000,47505=>1000,47506=>1000,47507=>1000,47508=>1000,47509=>1000,47510=>1000,47511=>1000,47512=>1000,47513=>1000,47514=>1000,47515=>1000,47516=>1000,47517=>1000,47518=>1000,47519=>1000,47520=>1000,47521=>1000,47522=>1000,47523=>1000,47524=>1000,47525=>1000,47526=>1000,47527=>1000,47528=>1000,47529=>1000,47530=>1000,47531=>1000,47532=>1000,47533=>1000,47534=>1000,47535=>1000,47536=>1000,47537=>1000,47538=>1000,47539=>1000,47540=>1000,47541=>1000,47542=>1000,47543=>1000,47544=>1000,47545=>1000,47546=>1000,47547=>1000,47548=>1000,47549=>1000,47550=>1000,47551=>1000,47552=>1000,47553=>1000,47554=>1000,47555=>1000,47556=>1000,47557=>1000,47558=>1000,47559=>1000,47560=>1000,47561=>1000,47562=>1000,47563=>1000,47564=>1000,47565=>1000,47566=>1000,47567=>1000,47568=>1000,47569=>1000,47570=>1000,47571=>1000,47572=>1000,47573=>1000,47574=>1000,47575=>1000,47576=>1000,47577=>1000,47578=>1000,47579=>1000,47580=>1000,47581=>1000,47582=>1000,47583=>1000,47584=>1000,47585=>1000,47586=>1000,47587=>1000,47588=>1000,47589=>1000,47590=>1000,47591=>1000,47592=>1000,47593=>1000,47594=>1000,47595=>1000,47596=>1000,47597=>1000,47598=>1000,47599=>1000,47600=>1000,47601=>1000,47602=>1000,47603=>1000,47604=>1000,47605=>1000,47606=>1000,47607=>1000,47608=>1000,47609=>1000,47610=>1000,47611=>1000,47612=>1000,47613=>1000,47614=>1000,47615=>1000,47616=>1000,47617=>1000,47618=>1000,47619=>1000,47620=>1000,47621=>1000,47622=>1000,47623=>1000,47624=>1000,47625=>1000,47626=>1000,47627=>1000,47628=>1000,47629=>1000,47630=>1000,47631=>1000,47632=>1000,47633=>1000,47634=>1000,47635=>1000,47636=>1000,47637=>1000,47638=>1000,47639=>1000,47640=>1000,47641=>1000,47642=>1000,47643=>1000,47644=>1000,47645=>1000,47646=>1000,47647=>1000,47648=>1000,47649=>1000,47650=>1000,47651=>1000,47652=>1000,47653=>1000,47654=>1000,47655=>1000,47656=>1000,47657=>1000,47658=>1000,47659=>1000,47660=>1000,47661=>1000,47662=>1000,47663=>1000,47664=>1000,47665=>1000,47666=>1000,47667=>1000,47668=>1000,47669=>1000,47670=>1000,47671=>1000,47672=>1000,47673=>1000,47674=>1000,47675=>1000,47676=>1000,47677=>1000,47678=>1000,47679=>1000,47680=>1000,47681=>1000,47682=>1000,47683=>1000,47684=>1000,47685=>1000,47686=>1000,47687=>1000,47688=>1000,47689=>1000,47690=>1000,47691=>1000,47692=>1000,47693=>1000,47694=>1000,47695=>1000,47696=>1000,47697=>1000,47698=>1000,47699=>1000,47700=>1000,47701=>1000,47702=>1000,47703=>1000,47704=>1000,47705=>1000,47706=>1000,47707=>1000,47708=>1000,47709=>1000,47710=>1000,47711=>1000,47712=>1000,47713=>1000,47714=>1000,47715=>1000,47716=>1000,47717=>1000,47718=>1000,47719=>1000,47720=>1000,47721=>1000,47722=>1000,47723=>1000,47724=>1000,47725=>1000,47726=>1000,47727=>1000,47728=>1000,47729=>1000,47730=>1000,47731=>1000,47732=>1000,47733=>1000,47734=>1000,47735=>1000,47736=>1000,47737=>1000,47738=>1000,47739=>1000,47740=>1000,47741=>1000,47742=>1000,47743=>1000,47744=>1000,47745=>1000,47746=>1000,47747=>1000,47748=>1000,47749=>1000,47750=>1000,47751=>1000,47752=>1000,47753=>1000,47754=>1000,47755=>1000,47756=>1000,47757=>1000,47758=>1000,47759=>1000,47760=>1000,47761=>1000,47762=>1000,47763=>1000,47764=>1000,47765=>1000,47766=>1000,47767=>1000,47768=>1000,47769=>1000,47770=>1000,47771=>1000,47772=>1000,47773=>1000,47774=>1000,47775=>1000,47776=>1000,47777=>1000,47778=>1000,47779=>1000,47780=>1000,47781=>1000,47782=>1000,47783=>1000,47784=>1000,47785=>1000,47786=>1000,47787=>1000,47788=>1000,47789=>1000,47790=>1000,47791=>1000,47792=>1000,47793=>1000,47794=>1000,47795=>1000,47796=>1000,47797=>1000,47798=>1000,47799=>1000,47800=>1000,47801=>1000,47802=>1000,47803=>1000,47804=>1000,47805=>1000,47806=>1000,47807=>1000,47808=>1000,47809=>1000,47810=>1000,47811=>1000,47812=>1000,47813=>1000,47814=>1000,47815=>1000,47816=>1000,47817=>1000,47818=>1000,47819=>1000,47820=>1000,47821=>1000,47822=>1000,47823=>1000,47824=>1000,47825=>1000,47826=>1000,47827=>1000,47828=>1000,47829=>1000,47830=>1000,47831=>1000,47832=>1000,47833=>1000,47834=>1000,47835=>1000,47836=>1000,47837=>1000,47838=>1000,47839=>1000,47840=>1000,47841=>1000,47842=>1000,47843=>1000,47844=>1000,47845=>1000,47846=>1000,47847=>1000,47848=>1000,47849=>1000,47850=>1000,47851=>1000,47852=>1000,47853=>1000,47854=>1000,47855=>1000,47856=>1000,47857=>1000,47858=>1000,47859=>1000,47860=>1000,47861=>1000,47862=>1000,47863=>1000,47864=>1000,47865=>1000,47866=>1000,47867=>1000,47868=>1000,47869=>1000,47870=>1000,47871=>1000,47872=>1000,47873=>1000,47874=>1000,47875=>1000,47876=>1000,47877=>1000,47878=>1000,47879=>1000,47880=>1000,47881=>1000,47882=>1000,47883=>1000,47884=>1000,47885=>1000,47886=>1000,47887=>1000,47888=>1000,47889=>1000,47890=>1000,47891=>1000,47892=>1000,47893=>1000,47894=>1000,47895=>1000,47896=>1000,47897=>1000,47898=>1000,47899=>1000,47900=>1000,47901=>1000,47902=>1000,47903=>1000,47904=>1000,47905=>1000,47906=>1000,47907=>1000,47908=>1000,47909=>1000,47910=>1000,47911=>1000,47912=>1000,47913=>1000,47914=>1000,47915=>1000,47916=>1000,47917=>1000,47918=>1000,47919=>1000,47920=>1000,47921=>1000,47922=>1000,47923=>1000,47924=>1000,47925=>1000,47926=>1000,47927=>1000,47928=>1000,47929=>1000,47930=>1000,47931=>1000,47932=>1000,47933=>1000,47934=>1000,47935=>1000,47936=>1000,47937=>1000,47938=>1000,47939=>1000,47940=>1000,47941=>1000,47942=>1000,47943=>1000,47944=>1000,47945=>1000,47946=>1000,47947=>1000,47948=>1000,47949=>1000,47950=>1000,47951=>1000,47952=>1000,47953=>1000,47954=>1000,47955=>1000,47956=>1000,47957=>1000,47958=>1000,47959=>1000,47960=>1000,47961=>1000,47962=>1000,47963=>1000,47964=>1000,47965=>1000,47966=>1000,47967=>1000,47968=>1000,47969=>1000,47970=>1000,47971=>1000,47972=>1000,47973=>1000,47974=>1000,47975=>1000,47976=>1000,47977=>1000,47978=>1000,47979=>1000,47980=>1000,47981=>1000,47982=>1000,47983=>1000,47984=>1000,47985=>1000,47986=>1000,47987=>1000,47988=>1000,47989=>1000,47990=>1000,47991=>1000,47992=>1000,47993=>1000,47994=>1000,47995=>1000,47996=>1000,47997=>1000,47998=>1000,47999=>1000,48000=>1000,48001=>1000,48002=>1000,48003=>1000,48004=>1000,48005=>1000,48006=>1000,48007=>1000,48008=>1000,48009=>1000,48010=>1000,48011=>1000,48012=>1000,48013=>1000,48014=>1000,48015=>1000,48016=>1000,48017=>1000,48018=>1000,48019=>1000,48020=>1000,48021=>1000,48022=>1000,48023=>1000,48024=>1000,48025=>1000,48026=>1000,48027=>1000,48028=>1000,48029=>1000,48030=>1000,48031=>1000,48032=>1000,48033=>1000,48034=>1000,48035=>1000,48036=>1000,48037=>1000,48038=>1000,48039=>1000,48040=>1000,48041=>1000,48042=>1000,48043=>1000,48044=>1000,48045=>1000,48046=>1000,48047=>1000,48048=>1000,48049=>1000,48050=>1000,48051=>1000,48052=>1000,48053=>1000,48054=>1000,48055=>1000,48056=>1000,48057=>1000,48058=>1000,48059=>1000,48060=>1000,48061=>1000,48062=>1000,48063=>1000,48064=>1000,48065=>1000,48066=>1000,48067=>1000,48068=>1000,48069=>1000,48070=>1000,48071=>1000,48072=>1000,48073=>1000,48074=>1000,48075=>1000,48076=>1000,48077=>1000,48078=>1000,48079=>1000,48080=>1000,48081=>1000,48082=>1000,48083=>1000,48084=>1000,48085=>1000,48086=>1000,48087=>1000,48088=>1000,48089=>1000,48090=>1000,48091=>1000,48092=>1000,48093=>1000,48094=>1000,48095=>1000,48096=>1000,48097=>1000,48098=>1000,48099=>1000,48100=>1000,48101=>1000,48102=>1000,48103=>1000,48104=>1000,48105=>1000,48106=>1000,48107=>1000,48108=>1000,48109=>1000,48110=>1000,48111=>1000,48112=>1000,48113=>1000,48114=>1000,48115=>1000,48116=>1000,48117=>1000,48118=>1000,48119=>1000,48120=>1000,48121=>1000,48122=>1000,48123=>1000,48124=>1000,48125=>1000,48126=>1000,48127=>1000,48128=>1000,48129=>1000,48130=>1000,48131=>1000,48132=>1000,48133=>1000,48134=>1000,48135=>1000,48136=>1000,48137=>1000,48138=>1000,48139=>1000,48140=>1000,48141=>1000,48142=>1000,48143=>1000,48144=>1000,48145=>1000,48146=>1000,48147=>1000,48148=>1000,48149=>1000,48150=>1000,48151=>1000,48152=>1000,48153=>1000,48154=>1000,48155=>1000,48156=>1000,48157=>1000,48158=>1000,48159=>1000,48160=>1000,48161=>1000,48162=>1000,48163=>1000,48164=>1000,48165=>1000,48166=>1000,48167=>1000,48168=>1000,48169=>1000,48170=>1000,48171=>1000,48172=>1000,48173=>1000,48174=>1000,48175=>1000,48176=>1000,48177=>1000,48178=>1000,48179=>1000,48180=>1000,48181=>1000,48182=>1000,48183=>1000,48184=>1000,48185=>1000,48186=>1000,48187=>1000,48188=>1000,48189=>1000,48190=>1000,48191=>1000,48192=>1000,48193=>1000,48194=>1000,48195=>1000,48196=>1000,48197=>1000,48198=>1000,48199=>1000,48200=>1000,48201=>1000,48202=>1000,48203=>1000,48204=>1000,48205=>1000,48206=>1000,48207=>1000,48208=>1000,48209=>1000,48210=>1000,48211=>1000,48212=>1000,48213=>1000,48214=>1000,48215=>1000,48216=>1000,48217=>1000,48218=>1000,48219=>1000,48220=>1000,48221=>1000,48222=>1000,48223=>1000,48224=>1000,48225=>1000,48226=>1000,48227=>1000,48228=>1000,48229=>1000,48230=>1000,48231=>1000,48232=>1000,48233=>1000,48234=>1000,48235=>1000,48236=>1000,48237=>1000,48238=>1000,48239=>1000,48240=>1000,48241=>1000,48242=>1000,48243=>1000,48244=>1000,48245=>1000,48246=>1000,48247=>1000,48248=>1000,48249=>1000,48250=>1000,48251=>1000,48252=>1000,48253=>1000,48254=>1000,48255=>1000,48256=>1000,48257=>1000,48258=>1000,48259=>1000,48260=>1000,48261=>1000,48262=>1000,48263=>1000,48264=>1000,48265=>1000,48266=>1000,48267=>1000,48268=>1000,48269=>1000,48270=>1000,48271=>1000,48272=>1000,48273=>1000,48274=>1000,48275=>1000,48276=>1000,48277=>1000,48278=>1000,48279=>1000,48280=>1000,48281=>1000,48282=>1000,48283=>1000,48284=>1000,48285=>1000,48286=>1000,48287=>1000,48288=>1000,48289=>1000,48290=>1000,48291=>1000,48292=>1000,48293=>1000,48294=>1000,48295=>1000,48296=>1000,48297=>1000,48298=>1000,48299=>1000,48300=>1000,48301=>1000,48302=>1000,48303=>1000,48304=>1000,48305=>1000,48306=>1000,48307=>1000,48308=>1000,48309=>1000,48310=>1000,48311=>1000,48312=>1000,48313=>1000,48314=>1000,48315=>1000,48316=>1000,48317=>1000,48318=>1000,48319=>1000,48320=>1000,48321=>1000,48322=>1000,48323=>1000,48324=>1000,48325=>1000,48326=>1000,48327=>1000,48328=>1000,48329=>1000,48330=>1000,48331=>1000,48332=>1000,48333=>1000,48334=>1000,48335=>1000,48336=>1000,48337=>1000,48338=>1000,48339=>1000,48340=>1000,48341=>1000,48342=>1000,48343=>1000,48344=>1000,48345=>1000,48346=>1000,48347=>1000,48348=>1000,48349=>1000,48350=>1000,48351=>1000,48352=>1000,48353=>1000,48354=>1000,48355=>1000,48356=>1000,48357=>1000,48358=>1000,48359=>1000,48360=>1000,48361=>1000,48362=>1000,48363=>1000,48364=>1000,48365=>1000,48366=>1000,48367=>1000,48368=>1000,48369=>1000,48370=>1000,48371=>1000,48372=>1000,48373=>1000,48374=>1000,48375=>1000,48376=>1000,48377=>1000,48378=>1000,48379=>1000,48380=>1000,48381=>1000,48382=>1000,48383=>1000,48384=>1000,48385=>1000,48386=>1000,48387=>1000,48388=>1000,48389=>1000,48390=>1000,48391=>1000,48392=>1000,48393=>1000,48394=>1000,48395=>1000,48396=>1000,48397=>1000,48398=>1000,48399=>1000,48400=>1000,48401=>1000,48402=>1000,48403=>1000,48404=>1000,48405=>1000,48406=>1000,48407=>1000,48408=>1000,48409=>1000,48410=>1000,48411=>1000,48412=>1000,48413=>1000,48414=>1000,48415=>1000,48416=>1000,48417=>1000,48418=>1000,48419=>1000,48420=>1000,48421=>1000,48422=>1000,48423=>1000,48424=>1000,48425=>1000,48426=>1000,48427=>1000,48428=>1000,48429=>1000,48430=>1000,48431=>1000,48432=>1000,48433=>1000,48434=>1000,48435=>1000,48436=>1000,48437=>1000,48438=>1000,48439=>1000,48440=>1000,48441=>1000,48442=>1000,48443=>1000,48444=>1000,48445=>1000,48446=>1000,48447=>1000,48448=>1000,48449=>1000,48450=>1000,48451=>1000,48452=>1000,48453=>1000,48454=>1000,48455=>1000,48456=>1000,48457=>1000,48458=>1000,48459=>1000,48460=>1000,48461=>1000,48462=>1000,48463=>1000,48464=>1000,48465=>1000,48466=>1000,48467=>1000,48468=>1000,48469=>1000,48470=>1000,48471=>1000,48472=>1000,48473=>1000,48474=>1000,48475=>1000,48476=>1000,48477=>1000,48478=>1000,48479=>1000,48480=>1000,48481=>1000,48482=>1000,48483=>1000,48484=>1000,48485=>1000,48486=>1000,48487=>1000,48488=>1000,48489=>1000,48490=>1000,48491=>1000,48492=>1000,48493=>1000,48494=>1000,48495=>1000,48496=>1000,48497=>1000,48498=>1000,48499=>1000,48500=>1000,48501=>1000,48502=>1000,48503=>1000,48504=>1000,48505=>1000,48506=>1000,48507=>1000,48508=>1000,48509=>1000,48510=>1000,48511=>1000,48512=>1000,48513=>1000,48514=>1000,48515=>1000,48516=>1000,48517=>1000,48518=>1000,48519=>1000,48520=>1000,48521=>1000,48522=>1000,48523=>1000,48524=>1000,48525=>1000,48526=>1000,48527=>1000,48528=>1000,48529=>1000,48530=>1000,48531=>1000,48532=>1000,48533=>1000,48534=>1000,48535=>1000,48536=>1000,48537=>1000,48538=>1000,48539=>1000,48540=>1000,48541=>1000,48542=>1000,48543=>1000,48544=>1000,48545=>1000,48546=>1000,48547=>1000,48548=>1000,48549=>1000,48550=>1000,48551=>1000,48552=>1000,48553=>1000,48554=>1000,48555=>1000,48556=>1000,48557=>1000,48558=>1000,48559=>1000,48560=>1000,48561=>1000,48562=>1000,48563=>1000,48564=>1000,48565=>1000,48566=>1000,48567=>1000,48568=>1000,48569=>1000,48570=>1000,48571=>1000,48572=>1000,48573=>1000,48574=>1000,48575=>1000,48576=>1000,48577=>1000,48578=>1000,48579=>1000,48580=>1000,48581=>1000,48582=>1000,48583=>1000,48584=>1000,48585=>1000,48586=>1000,48587=>1000,48588=>1000,48589=>1000,48590=>1000,48591=>1000,48592=>1000,48593=>1000,48594=>1000,48595=>1000,48596=>1000,48597=>1000,48598=>1000,48599=>1000,48600=>1000,48601=>1000,48602=>1000,48603=>1000,48604=>1000,48605=>1000,48606=>1000,48607=>1000,48608=>1000,48609=>1000,48610=>1000,48611=>1000,48612=>1000,48613=>1000,48614=>1000,48615=>1000,48616=>1000,48617=>1000,48618=>1000,48619=>1000,48620=>1000,48621=>1000,48622=>1000,48623=>1000,48624=>1000,48625=>1000,48626=>1000,48627=>1000,48628=>1000,48629=>1000,48630=>1000,48631=>1000,48632=>1000,48633=>1000,48634=>1000,48635=>1000,48636=>1000,48637=>1000,48638=>1000,48639=>1000,48640=>1000,48641=>1000,48642=>1000,48643=>1000,48644=>1000,48645=>1000,48646=>1000,48647=>1000,48648=>1000,48649=>1000,48650=>1000,48651=>1000,48652=>1000,48653=>1000,48654=>1000,48655=>1000,48656=>1000,48657=>1000,48658=>1000,48659=>1000,48660=>1000,48661=>1000,48662=>1000,48663=>1000,48664=>1000,48665=>1000,48666=>1000,48667=>1000,48668=>1000,48669=>1000,48670=>1000,48671=>1000,48672=>1000,48673=>1000,48674=>1000,48675=>1000,48676=>1000,48677=>1000,48678=>1000,48679=>1000,48680=>1000,48681=>1000,48682=>1000,48683=>1000,48684=>1000,48685=>1000,48686=>1000,48687=>1000,48688=>1000,48689=>1000,48690=>1000,48691=>1000,48692=>1000,48693=>1000,48694=>1000,48695=>1000,48696=>1000,48697=>1000,48698=>1000,48699=>1000,48700=>1000,48701=>1000,48702=>1000,48703=>1000,48704=>1000,48705=>1000,48706=>1000,48707=>1000,48708=>1000,48709=>1000,48710=>1000,48711=>1000,48712=>1000,48713=>1000,48714=>1000,48715=>1000,48716=>1000,48717=>1000,48718=>1000,48719=>1000,48720=>1000,48721=>1000,48722=>1000,48723=>1000,48724=>1000,48725=>1000,48726=>1000,48727=>1000,48728=>1000,48729=>1000,48730=>1000,48731=>1000,48732=>1000,48733=>1000,48734=>1000,48735=>1000,48736=>1000,48737=>1000,48738=>1000,48739=>1000,48740=>1000,48741=>1000,48742=>1000,48743=>1000,48744=>1000,48745=>1000,48746=>1000,48747=>1000,48748=>1000,48749=>1000,48750=>1000,48751=>1000,48752=>1000,48753=>1000,48754=>1000,48755=>1000,48756=>1000,48757=>1000,48758=>1000,48759=>1000,48760=>1000,48761=>1000,48762=>1000,48763=>1000,48764=>1000,48765=>1000,48766=>1000,48767=>1000,48768=>1000,48769=>1000,48770=>1000,48771=>1000,48772=>1000,48773=>1000,48774=>1000,48775=>1000,48776=>1000,48777=>1000,48778=>1000,48779=>1000,48780=>1000,48781=>1000,48782=>1000,48783=>1000,48784=>1000,48785=>1000,48786=>1000,48787=>1000,48788=>1000,48789=>1000,48790=>1000,48791=>1000,48792=>1000,48793=>1000,48794=>1000,48795=>1000,48796=>1000,48797=>1000,48798=>1000,48799=>1000,48800=>1000,48801=>1000,48802=>1000,48803=>1000,48804=>1000,48805=>1000,48806=>1000,48807=>1000,48808=>1000,48809=>1000,48810=>1000,48811=>1000,48812=>1000,48813=>1000,48814=>1000,48815=>1000,48816=>1000,48817=>1000,48818=>1000,48819=>1000,48820=>1000,48821=>1000,48822=>1000,48823=>1000,48824=>1000,48825=>1000,48826=>1000,48827=>1000,48828=>1000,48829=>1000,48830=>1000,48831=>1000,48832=>1000,48833=>1000,48834=>1000,48835=>1000,48836=>1000,48837=>1000,48838=>1000,48839=>1000,48840=>1000,48841=>1000,48842=>1000,48843=>1000,48844=>1000,48845=>1000,48846=>1000,48847=>1000,48848=>1000,48849=>1000,48850=>1000,48851=>1000,48852=>1000,48853=>1000,48854=>1000,48855=>1000,48856=>1000,48857=>1000,48858=>1000,48859=>1000,48860=>1000,48861=>1000,48862=>1000,48863=>1000,48864=>1000,48865=>1000,48866=>1000,48867=>1000,48868=>1000,48869=>1000,48870=>1000,48871=>1000,48872=>1000,48873=>1000,48874=>1000,48875=>1000,48876=>1000,48877=>1000,48878=>1000,48879=>1000,48880=>1000,48881=>1000,48882=>1000,48883=>1000,48884=>1000,48885=>1000,48886=>1000,48887=>1000,48888=>1000,48889=>1000,48890=>1000,48891=>1000,48892=>1000,48893=>1000,48894=>1000,48895=>1000,48896=>1000,48897=>1000,48898=>1000,48899=>1000,48900=>1000,48901=>1000,48902=>1000,48903=>1000,48904=>1000,48905=>1000,48906=>1000,48907=>1000,48908=>1000,48909=>1000,48910=>1000,48911=>1000,48912=>1000,48913=>1000,48914=>1000,48915=>1000,48916=>1000,48917=>1000,48918=>1000,48919=>1000,48920=>1000,48921=>1000,48922=>1000,48923=>1000,48924=>1000,48925=>1000,48926=>1000,48927=>1000,48928=>1000,48929=>1000,48930=>1000,48931=>1000,48932=>1000,48933=>1000,48934=>1000,48935=>1000,48936=>1000,48937=>1000,48938=>1000,48939=>1000,48940=>1000,48941=>1000,48942=>1000,48943=>1000,48944=>1000,48945=>1000,48946=>1000,48947=>1000,48948=>1000,48949=>1000,48950=>1000,48951=>1000,48952=>1000,48953=>1000,48954=>1000,48955=>1000,48956=>1000,48957=>1000,48958=>1000,48959=>1000,48960=>1000,48961=>1000,48962=>1000,48963=>1000,48964=>1000,48965=>1000,48966=>1000,48967=>1000,48968=>1000,48969=>1000,48970=>1000,48971=>1000,48972=>1000,48973=>1000,48974=>1000,48975=>1000,48976=>1000,48977=>1000,48978=>1000,48979=>1000,48980=>1000,48981=>1000,48982=>1000,48983=>1000,48984=>1000,48985=>1000,48986=>1000,48987=>1000,48988=>1000,48989=>1000,48990=>1000,48991=>1000,48992=>1000,48993=>1000,48994=>1000,48995=>1000,48996=>1000,48997=>1000,48998=>1000,48999=>1000,49000=>1000,49001=>1000,49002=>1000,49003=>1000,49004=>1000,49005=>1000,49006=>1000,49007=>1000,49008=>1000,49009=>1000,49010=>1000,49011=>1000,49012=>1000,49013=>1000,49014=>1000,49015=>1000,49016=>1000,49017=>1000,49018=>1000,49019=>1000,49020=>1000,49021=>1000,49022=>1000,49023=>1000,49024=>1000,49025=>1000,49026=>1000,49027=>1000,49028=>1000,49029=>1000,49030=>1000,49031=>1000,49032=>1000,49033=>1000,49034=>1000,49035=>1000,49036=>1000,49037=>1000,49038=>1000,49039=>1000,49040=>1000,49041=>1000,49042=>1000,49043=>1000,49044=>1000,49045=>1000,49046=>1000,49047=>1000,49048=>1000,49049=>1000,49050=>1000,49051=>1000,49052=>1000,49053=>1000,49054=>1000,49055=>1000,49056=>1000,49057=>1000,49058=>1000,49059=>1000,49060=>1000,49061=>1000,49062=>1000,49063=>1000,49064=>1000,49065=>1000,49066=>1000,49067=>1000,49068=>1000,49069=>1000,49070=>1000,49071=>1000,49072=>1000,49073=>1000,49074=>1000,49075=>1000,49076=>1000,49077=>1000,49078=>1000,49079=>1000,49080=>1000,49081=>1000,49082=>1000,49083=>1000,49084=>1000,49085=>1000,49086=>1000,49087=>1000,49088=>1000,49089=>1000,49090=>1000,49091=>1000,49092=>1000,49093=>1000,49094=>1000,49095=>1000,49096=>1000,49097=>1000,49098=>1000,49099=>1000,49100=>1000,49101=>1000,49102=>1000,49103=>1000,49104=>1000,49105=>1000,49106=>1000,49107=>1000,49108=>1000,49109=>1000,49110=>1000,49111=>1000,49112=>1000,49113=>1000,49114=>1000,49115=>1000,49116=>1000,49117=>1000,49118=>1000,49119=>1000,49120=>1000,49121=>1000,49122=>1000,49123=>1000,49124=>1000,49125=>1000,49126=>1000,49127=>1000,49128=>1000,49129=>1000,49130=>1000,49131=>1000,49132=>1000,49133=>1000,49134=>1000,49135=>1000,49136=>1000,49137=>1000,49138=>1000,49139=>1000,49140=>1000,49141=>1000,49142=>1000,49143=>1000,49144=>1000,49145=>1000,49146=>1000,49147=>1000,49148=>1000,49149=>1000,49150=>1000,49151=>1000,49152=>1000,49153=>1000,49154=>1000,49155=>1000,49156=>1000,49157=>1000,49158=>1000,49159=>1000,49160=>1000,49161=>1000,49162=>1000,49163=>1000,49164=>1000,49165=>1000,49166=>1000,49167=>1000,49168=>1000,49169=>1000,49170=>1000,49171=>1000,49172=>1000,49173=>1000,49174=>1000,49175=>1000,49176=>1000,49177=>1000,49178=>1000,49179=>1000,49180=>1000,49181=>1000,49182=>1000,49183=>1000,49184=>1000,49185=>1000,49186=>1000,49187=>1000,49188=>1000,49189=>1000,49190=>1000,49191=>1000,49192=>1000,49193=>1000,49194=>1000,49195=>1000,49196=>1000,49197=>1000,49198=>1000,49199=>1000,49200=>1000,49201=>1000,49202=>1000,49203=>1000,49204=>1000,49205=>1000,49206=>1000,49207=>1000,49208=>1000,49209=>1000,49210=>1000,49211=>1000,49212=>1000,49213=>1000,49214=>1000,49215=>1000,49216=>1000,49217=>1000,49218=>1000,49219=>1000,49220=>1000,49221=>1000,49222=>1000,49223=>1000,49224=>1000,49225=>1000,49226=>1000,49227=>1000,49228=>1000,49229=>1000,49230=>1000,49231=>1000,49232=>1000,49233=>1000,49234=>1000,49235=>1000,49236=>1000,49237=>1000,49238=>1000,49239=>1000,49240=>1000,49241=>1000,49242=>1000,49243=>1000,49244=>1000,49245=>1000,49246=>1000,49247=>1000,49248=>1000,49249=>1000,49250=>1000,49251=>1000,49252=>1000,49253=>1000,49254=>1000,49255=>1000,49256=>1000,49257=>1000,49258=>1000,49259=>1000,49260=>1000,49261=>1000,49262=>1000,49263=>1000,49264=>1000,49265=>1000,49266=>1000,49267=>1000,49268=>1000,49269=>1000,49270=>1000,49271=>1000,49272=>1000,49273=>1000,49274=>1000,49275=>1000,49276=>1000,49277=>1000,49278=>1000,49279=>1000,49280=>1000,49281=>1000,49282=>1000,49283=>1000,49284=>1000,49285=>1000,49286=>1000,49287=>1000,49288=>1000,49289=>1000,49290=>1000,49291=>1000,49292=>1000,49293=>1000,49294=>1000,49295=>1000,49296=>1000,49297=>1000,49298=>1000,49299=>1000,49300=>1000,49301=>1000,49302=>1000,49303=>1000,49304=>1000,49305=>1000,49306=>1000,49307=>1000,49308=>1000,49309=>1000,49310=>1000,49311=>1000,49312=>1000,49313=>1000,49314=>1000,49315=>1000,49316=>1000,49317=>1000,49318=>1000,49319=>1000,49320=>1000,49321=>1000,49322=>1000,49323=>1000,49324=>1000,49325=>1000,49326=>1000,49327=>1000,49328=>1000,49329=>1000,49330=>1000,49331=>1000,49332=>1000,49333=>1000,49334=>1000,49335=>1000,49336=>1000,49337=>1000,49338=>1000,49339=>1000,49340=>1000,49341=>1000,49342=>1000,49343=>1000,49344=>1000,49345=>1000,49346=>1000,49347=>1000,49348=>1000,49349=>1000,49350=>1000,49351=>1000,49352=>1000,49353=>1000,49354=>1000,49355=>1000,49356=>1000,49357=>1000,49358=>1000,49359=>1000,49360=>1000,49361=>1000,49362=>1000,49363=>1000,49364=>1000,49365=>1000,49366=>1000,49367=>1000,49368=>1000,49369=>1000,49370=>1000,49371=>1000,49372=>1000,49373=>1000,49374=>1000,49375=>1000,49376=>1000,49377=>1000,49378=>1000,49379=>1000,49380=>1000,49381=>1000,49382=>1000,49383=>1000,49384=>1000,49385=>1000,49386=>1000,49387=>1000,49388=>1000,49389=>1000,49390=>1000,49391=>1000,49392=>1000,49393=>1000,49394=>1000,49395=>1000,49396=>1000,49397=>1000,49398=>1000,49399=>1000,49400=>1000,49401=>1000,49402=>1000,49403=>1000,49404=>1000,49405=>1000,49406=>1000,49407=>1000,49408=>1000,49409=>1000,49410=>1000,49411=>1000,49412=>1000,49413=>1000,49414=>1000,49415=>1000,49416=>1000,49417=>1000,49418=>1000,49419=>1000,49420=>1000,49421=>1000,49422=>1000,49423=>1000,49424=>1000,49425=>1000,49426=>1000,49427=>1000,49428=>1000,49429=>1000,49430=>1000,49431=>1000,49432=>1000,49433=>1000,49434=>1000,49435=>1000,49436=>1000,49437=>1000,49438=>1000,49439=>1000,49440=>1000,49441=>1000,49442=>1000,49443=>1000,49444=>1000,49445=>1000,49446=>1000,49447=>1000,49448=>1000,49449=>1000,49450=>1000,49451=>1000,49452=>1000,49453=>1000,49454=>1000,49455=>1000,49456=>1000,49457=>1000,49458=>1000,49459=>1000,49460=>1000,49461=>1000,49462=>1000,49463=>1000,49464=>1000,49465=>1000,49466=>1000,49467=>1000,49468=>1000,49469=>1000,49470=>1000,49471=>1000,49472=>1000,49473=>1000,49474=>1000,49475=>1000,49476=>1000,49477=>1000,49478=>1000,49479=>1000,49480=>1000,49481=>1000,49482=>1000,49483=>1000,49484=>1000,49485=>1000,49486=>1000,49487=>1000,49488=>1000,49489=>1000,49490=>1000,49491=>1000,49492=>1000,49493=>1000,49494=>1000,49495=>1000,49496=>1000,49497=>1000,49498=>1000,49499=>1000,49500=>1000,49501=>1000,49502=>1000,49503=>1000,49504=>1000,49505=>1000,49506=>1000,49507=>1000,49508=>1000,49509=>1000,49510=>1000,49511=>1000,49512=>1000,49513=>1000,49514=>1000,49515=>1000,49516=>1000,49517=>1000,49518=>1000,49519=>1000,49520=>1000,49521=>1000,49522=>1000,49523=>1000,49524=>1000,49525=>1000,49526=>1000,49527=>1000,49528=>1000,49529=>1000,49530=>1000,49531=>1000,49532=>1000,49533=>1000,49534=>1000,49535=>1000,49536=>1000,49537=>1000,49538=>1000,49539=>1000,49540=>1000,49541=>1000,49542=>1000,49543=>1000,49544=>1000,49545=>1000,49546=>1000,49547=>1000,49548=>1000,49549=>1000,49550=>1000,49551=>1000,49552=>1000,49553=>1000,49554=>1000,49555=>1000,49556=>1000,49557=>1000,49558=>1000,49559=>1000,49560=>1000,49561=>1000,49562=>1000,49563=>1000,49564=>1000,49565=>1000,49566=>1000,49567=>1000,49568=>1000,49569=>1000,49570=>1000,49571=>1000,49572=>1000,49573=>1000,49574=>1000,49575=>1000,49576=>1000,49577=>1000,49578=>1000,49579=>1000,49580=>1000,49581=>1000,49582=>1000,49583=>1000,49584=>1000,49585=>1000,49586=>1000,49587=>1000,49588=>1000,49589=>1000,49590=>1000,49591=>1000,49592=>1000,49593=>1000,49594=>1000,49595=>1000,49596=>1000,49597=>1000,49598=>1000,49599=>1000,49600=>1000,49601=>1000,49602=>1000,49603=>1000,49604=>1000,49605=>1000,49606=>1000,49607=>1000,49608=>1000,49609=>1000,49610=>1000,49611=>1000,49612=>1000,49613=>1000,49614=>1000,49615=>1000,49616=>1000,49617=>1000,49618=>1000,49619=>1000,49620=>1000,49621=>1000,49622=>1000,49623=>1000,49624=>1000,49625=>1000,49626=>1000,49627=>1000,49628=>1000,49629=>1000,49630=>1000,49631=>1000,49632=>1000,49633=>1000,49634=>1000,49635=>1000,49636=>1000,49637=>1000,49638=>1000,49639=>1000,49640=>1000,49641=>1000,49642=>1000,49643=>1000,49644=>1000,49645=>1000,49646=>1000,49647=>1000,49648=>1000,49649=>1000,49650=>1000,49651=>1000,49652=>1000,49653=>1000,49654=>1000,49655=>1000,49656=>1000,49657=>1000,49658=>1000,49659=>1000,49660=>1000,49661=>1000,49662=>1000,49663=>1000,49664=>1000,49665=>1000,49666=>1000,49667=>1000,49668=>1000,49669=>1000,49670=>1000,49671=>1000,49672=>1000,49673=>1000,49674=>1000,49675=>1000,49676=>1000,49677=>1000,49678=>1000,49679=>1000,49680=>1000,49681=>1000,49682=>1000,49683=>1000,49684=>1000,49685=>1000,49686=>1000,49687=>1000,49688=>1000,49689=>1000,49690=>1000,49691=>1000,49692=>1000,49693=>1000,49694=>1000,49695=>1000,49696=>1000,49697=>1000,49698=>1000,49699=>1000,49700=>1000,49701=>1000,49702=>1000,49703=>1000,49704=>1000,49705=>1000,49706=>1000,49707=>1000,49708=>1000,49709=>1000,49710=>1000,49711=>1000,49712=>1000,49713=>1000,49714=>1000,49715=>1000,49716=>1000,49717=>1000,49718=>1000,49719=>1000,49720=>1000,49721=>1000,49722=>1000,49723=>1000,49724=>1000,49725=>1000,49726=>1000,49727=>1000,49728=>1000,49729=>1000,49730=>1000,49731=>1000,49732=>1000,49733=>1000,49734=>1000,49735=>1000,49736=>1000,49737=>1000,49738=>1000,49739=>1000,49740=>1000,49741=>1000,49742=>1000,49743=>1000,49744=>1000,49745=>1000,49746=>1000,49747=>1000,49748=>1000,49749=>1000,49750=>1000,49751=>1000,49752=>1000,49753=>1000,49754=>1000,49755=>1000,49756=>1000,49757=>1000,49758=>1000,49759=>1000,49760=>1000,49761=>1000,49762=>1000,49763=>1000,49764=>1000,49765=>1000,49766=>1000,49767=>1000,49768=>1000,49769=>1000,49770=>1000,49771=>1000,49772=>1000,49773=>1000,49774=>1000,49775=>1000,49776=>1000,49777=>1000,49778=>1000,49779=>1000,49780=>1000,49781=>1000,49782=>1000,49783=>1000,49784=>1000,49785=>1000,49786=>1000,49787=>1000,49788=>1000,49789=>1000,49790=>1000,49791=>1000,49792=>1000,49793=>1000,49794=>1000,49795=>1000,49796=>1000,49797=>1000,49798=>1000,49799=>1000,49800=>1000,49801=>1000,49802=>1000,49803=>1000,49804=>1000,49805=>1000,49806=>1000,49807=>1000,49808=>1000,49809=>1000,49810=>1000,49811=>1000,49812=>1000,49813=>1000,49814=>1000,49815=>1000,49816=>1000,49817=>1000,49818=>1000,49819=>1000,49820=>1000,49821=>1000,49822=>1000,49823=>1000,49824=>1000,49825=>1000,49826=>1000,49827=>1000,49828=>1000,49829=>1000,49830=>1000,49831=>1000,49832=>1000,49833=>1000,49834=>1000,49835=>1000,49836=>1000,49837=>1000,49838=>1000,49839=>1000,49840=>1000,49841=>1000,49842=>1000,49843=>1000,49844=>1000,49845=>1000,49846=>1000,49847=>1000,49848=>1000,49849=>1000,49850=>1000,49851=>1000,49852=>1000,49853=>1000,49854=>1000,49855=>1000,49856=>1000,49857=>1000,49858=>1000,49859=>1000,49860=>1000,49861=>1000,49862=>1000,49863=>1000,49864=>1000,49865=>1000,49866=>1000,49867=>1000,49868=>1000,49869=>1000,49870=>1000,49871=>1000,49872=>1000,49873=>1000,49874=>1000,49875=>1000,49876=>1000,49877=>1000,49878=>1000,49879=>1000,49880=>1000,49881=>1000,49882=>1000,49883=>1000,49884=>1000,49885=>1000,49886=>1000,49887=>1000,49888=>1000,49889=>1000,49890=>1000,49891=>1000,49892=>1000,49893=>1000,49894=>1000,49895=>1000,49896=>1000,49897=>1000,49898=>1000,49899=>1000,49900=>1000,49901=>1000,49902=>1000,49903=>1000,49904=>1000,49905=>1000,49906=>1000,49907=>1000,49908=>1000,49909=>1000,49910=>1000,49911=>1000,49912=>1000,49913=>1000,49914=>1000,49915=>1000,49916=>1000,49917=>1000,49918=>1000,49919=>1000,49920=>1000,49921=>1000,49922=>1000,49923=>1000,49924=>1000,49925=>1000,49926=>1000,49927=>1000,49928=>1000,49929=>1000,49930=>1000,49931=>1000,49932=>1000,49933=>1000,49934=>1000,49935=>1000,49936=>1000,49937=>1000,49938=>1000,49939=>1000,49940=>1000,49941=>1000,49942=>1000,49943=>1000,49944=>1000,49945=>1000,49946=>1000,49947=>1000,49948=>1000,49949=>1000,49950=>1000,49951=>1000,49952=>1000,49953=>1000,49954=>1000,49955=>1000,49956=>1000,49957=>1000,49958=>1000,49959=>1000,49960=>1000,49961=>1000,49962=>1000,49963=>1000,49964=>1000,49965=>1000,49966=>1000,49967=>1000,49968=>1000,49969=>1000,49970=>1000,49971=>1000,49972=>1000,49973=>1000,49974=>1000,49975=>1000,49976=>1000,49977=>1000,49978=>1000,49979=>1000,49980=>1000,49981=>1000,49982=>1000,49983=>1000,49984=>1000,49985=>1000,49986=>1000,49987=>1000,49988=>1000,49989=>1000,49990=>1000,49991=>1000,49992=>1000,49993=>1000,49994=>1000,49995=>1000,49996=>1000,49997=>1000,49998=>1000,49999=>1000,50000=>1000,50001=>1000,50002=>1000,50003=>1000,50004=>1000,50005=>1000,50006=>1000,50007=>1000,50008=>1000,50009=>1000,50010=>1000,50011=>1000,50012=>1000,50013=>1000,50014=>1000,50015=>1000,50016=>1000,50017=>1000,50018=>1000,50019=>1000,50020=>1000,50021=>1000,50022=>1000,50023=>1000,50024=>1000,50025=>1000,50026=>1000,50027=>1000,50028=>1000,50029=>1000,50030=>1000,50031=>1000,50032=>1000,50033=>1000,50034=>1000,50035=>1000,50036=>1000,50037=>1000,50038=>1000,50039=>1000,50040=>1000,50041=>1000,50042=>1000,50043=>1000,50044=>1000,50045=>1000,50046=>1000,50047=>1000,50048=>1000,50049=>1000,50050=>1000,50051=>1000,50052=>1000,50053=>1000,50054=>1000,50055=>1000,50056=>1000,50057=>1000,50058=>1000,50059=>1000,50060=>1000,50061=>1000,50062=>1000,50063=>1000,50064=>1000,50065=>1000,50066=>1000,50067=>1000,50068=>1000,50069=>1000,50070=>1000,50071=>1000,50072=>1000,50073=>1000,50074=>1000,50075=>1000,50076=>1000,50077=>1000,50078=>1000,50079=>1000,50080=>1000,50081=>1000,50082=>1000,50083=>1000,50084=>1000,50085=>1000,50086=>1000,50087=>1000,50088=>1000,50089=>1000,50090=>1000,50091=>1000,50092=>1000,50093=>1000,50094=>1000,50095=>1000,50096=>1000,50097=>1000,50098=>1000,50099=>1000,50100=>1000,50101=>1000,50102=>1000,50103=>1000,50104=>1000,50105=>1000,50106=>1000,50107=>1000,50108=>1000,50109=>1000,50110=>1000,50111=>1000,50112=>1000,50113=>1000,50114=>1000,50115=>1000,50116=>1000,50117=>1000,50118=>1000,50119=>1000,50120=>1000,50121=>1000,50122=>1000,50123=>1000,50124=>1000,50125=>1000,50126=>1000,50127=>1000,50128=>1000,50129=>1000,50130=>1000,50131=>1000,50132=>1000,50133=>1000,50134=>1000,50135=>1000,50136=>1000,50137=>1000,50138=>1000,50139=>1000,50140=>1000,50141=>1000,50142=>1000,50143=>1000,50144=>1000,50145=>1000,50146=>1000,50147=>1000,50148=>1000,50149=>1000,50150=>1000,50151=>1000,50152=>1000,50153=>1000,50154=>1000,50155=>1000,50156=>1000,50157=>1000,50158=>1000,50159=>1000,50160=>1000,50161=>1000,50162=>1000,50163=>1000,50164=>1000,50165=>1000,50166=>1000,50167=>1000,50168=>1000,50169=>1000,50170=>1000,50171=>1000,50172=>1000,50173=>1000,50174=>1000,50175=>1000,50176=>1000,50177=>1000,50178=>1000,50179=>1000,50180=>1000,50181=>1000,50182=>1000,50183=>1000,50184=>1000,50185=>1000,50186=>1000,50187=>1000,50188=>1000,50189=>1000,50190=>1000,50191=>1000,50192=>1000,50193=>1000,50194=>1000,50195=>1000,50196=>1000,50197=>1000,50198=>1000,50199=>1000,50200=>1000,50201=>1000,50202=>1000,50203=>1000,50204=>1000,50205=>1000,50206=>1000,50207=>1000,50208=>1000,50209=>1000,50210=>1000,50211=>1000,50212=>1000,50213=>1000,50214=>1000,50215=>1000,50216=>1000,50217=>1000,50218=>1000,50219=>1000,50220=>1000,50221=>1000,50222=>1000,50223=>1000,50224=>1000,50225=>1000,50226=>1000,50227=>1000,50228=>1000,50229=>1000,50230=>1000,50231=>1000,50232=>1000,50233=>1000,50234=>1000,50235=>1000,50236=>1000,50237=>1000,50238=>1000,50239=>1000,50240=>1000,50241=>1000,50242=>1000,50243=>1000,50244=>1000,50245=>1000,50246=>1000,50247=>1000,50248=>1000,50249=>1000,50250=>1000,50251=>1000,50252=>1000,50253=>1000,50254=>1000,50255=>1000,50256=>1000,50257=>1000,50258=>1000,50259=>1000,50260=>1000,50261=>1000,50262=>1000,50263=>1000,50264=>1000,50265=>1000,50266=>1000,50267=>1000,50268=>1000,50269=>1000,50270=>1000,50271=>1000,50272=>1000,50273=>1000,50274=>1000,50275=>1000,50276=>1000,50277=>1000,50278=>1000,50279=>1000,50280=>1000,50281=>1000,50282=>1000,50283=>1000,50284=>1000,50285=>1000,50286=>1000,50287=>1000,50288=>1000,50289=>1000,50290=>1000,50291=>1000,50292=>1000,50293=>1000,50294=>1000,50295=>1000,50296=>1000,50297=>1000,50298=>1000,50299=>1000,50300=>1000,50301=>1000,50302=>1000,50303=>1000,50304=>1000,50305=>1000,50306=>1000,50307=>1000,50308=>1000,50309=>1000,50310=>1000,50311=>1000,50312=>1000,50313=>1000,50314=>1000,50315=>1000,50316=>1000,50317=>1000,50318=>1000,50319=>1000,50320=>1000,50321=>1000,50322=>1000,50323=>1000,50324=>1000,50325=>1000,50326=>1000,50327=>1000,50328=>1000,50329=>1000,50330=>1000,50331=>1000,50332=>1000,50333=>1000,50334=>1000,50335=>1000,50336=>1000,50337=>1000,50338=>1000,50339=>1000,50340=>1000,50341=>1000,50342=>1000,50343=>1000,50344=>1000,50345=>1000,50346=>1000,50347=>1000,50348=>1000,50349=>1000,50350=>1000,50351=>1000,50352=>1000,50353=>1000,50354=>1000,50355=>1000,50356=>1000,50357=>1000,50358=>1000,50359=>1000,50360=>1000,50361=>1000,50362=>1000,50363=>1000,50364=>1000,50365=>1000,50366=>1000,50367=>1000,50368=>1000,50369=>1000,50370=>1000,50371=>1000,50372=>1000,50373=>1000,50374=>1000,50375=>1000,50376=>1000,50377=>1000,50378=>1000,50379=>1000,50380=>1000,50381=>1000,50382=>1000,50383=>1000,50384=>1000,50385=>1000,50386=>1000,50387=>1000,50388=>1000,50389=>1000,50390=>1000,50391=>1000,50392=>1000,50393=>1000,50394=>1000,50395=>1000,50396=>1000,50397=>1000,50398=>1000,50399=>1000,50400=>1000,50401=>1000,50402=>1000,50403=>1000,50404=>1000,50405=>1000,50406=>1000,50407=>1000,50408=>1000,50409=>1000,50410=>1000,50411=>1000,50412=>1000,50413=>1000,50414=>1000,50415=>1000,50416=>1000,50417=>1000,50418=>1000,50419=>1000,50420=>1000,50421=>1000,50422=>1000,50423=>1000,50424=>1000,50425=>1000,50426=>1000,50427=>1000,50428=>1000,50429=>1000,50430=>1000,50431=>1000,50432=>1000,50433=>1000,50434=>1000,50435=>1000,50436=>1000,50437=>1000,50438=>1000,50439=>1000,50440=>1000,50441=>1000,50442=>1000,50443=>1000,50444=>1000,50445=>1000,50446=>1000,50447=>1000,50448=>1000,50449=>1000,50450=>1000,50451=>1000,50452=>1000,50453=>1000,50454=>1000,50455=>1000,50456=>1000,50457=>1000,50458=>1000,50459=>1000,50460=>1000,50461=>1000,50462=>1000,50463=>1000,50464=>1000,50465=>1000,50466=>1000,50467=>1000,50468=>1000,50469=>1000,50470=>1000,50471=>1000,50472=>1000,50473=>1000,50474=>1000,50475=>1000,50476=>1000,50477=>1000,50478=>1000,50479=>1000,50480=>1000,50481=>1000,50482=>1000,50483=>1000,50484=>1000,50485=>1000,50486=>1000,50487=>1000,50488=>1000,50489=>1000,50490=>1000,50491=>1000,50492=>1000,50493=>1000,50494=>1000,50495=>1000,50496=>1000,50497=>1000,50498=>1000,50499=>1000,50500=>1000,50501=>1000,50502=>1000,50503=>1000,50504=>1000,50505=>1000,50506=>1000,50507=>1000,50508=>1000,50509=>1000,50510=>1000,50511=>1000,50512=>1000,50513=>1000,50514=>1000,50515=>1000,50516=>1000,50517=>1000,50518=>1000,50519=>1000,50520=>1000,50521=>1000,50522=>1000,50523=>1000,50524=>1000,50525=>1000,50526=>1000,50527=>1000,50528=>1000,50529=>1000,50530=>1000,50531=>1000,50532=>1000,50533=>1000,50534=>1000,50535=>1000,50536=>1000,50537=>1000,50538=>1000,50539=>1000,50540=>1000,50541=>1000,50542=>1000,50543=>1000,50544=>1000,50545=>1000,50546=>1000,50547=>1000,50548=>1000,50549=>1000,50550=>1000,50551=>1000,50552=>1000,50553=>1000,50554=>1000,50555=>1000,50556=>1000,50557=>1000,50558=>1000,50559=>1000,50560=>1000,50561=>1000,50562=>1000,50563=>1000,50564=>1000,50565=>1000,50566=>1000,50567=>1000,50568=>1000,50569=>1000,50570=>1000,50571=>1000,50572=>1000,50573=>1000,50574=>1000,50575=>1000,50576=>1000,50577=>1000,50578=>1000,50579=>1000,50580=>1000,50581=>1000,50582=>1000,50583=>1000,50584=>1000,50585=>1000,50586=>1000,50587=>1000,50588=>1000,50589=>1000,50590=>1000,50591=>1000,50592=>1000,50593=>1000,50594=>1000,50595=>1000,50596=>1000,50597=>1000,50598=>1000,50599=>1000,50600=>1000,50601=>1000,50602=>1000,50603=>1000,50604=>1000,50605=>1000,50606=>1000,50607=>1000,50608=>1000,50609=>1000,50610=>1000,50611=>1000,50612=>1000,50613=>1000,50614=>1000,50615=>1000,50616=>1000,50617=>1000,50618=>1000,50619=>1000,50620=>1000,50621=>1000,50622=>1000,50623=>1000,50624=>1000,50625=>1000,50626=>1000,50627=>1000,50628=>1000,50629=>1000,50630=>1000,50631=>1000,50632=>1000,50633=>1000,50634=>1000,50635=>1000,50636=>1000,50637=>1000,50638=>1000,50639=>1000,50640=>1000,50641=>1000,50642=>1000,50643=>1000,50644=>1000,50645=>1000,50646=>1000,50647=>1000,50648=>1000,50649=>1000,50650=>1000,50651=>1000,50652=>1000,50653=>1000,50654=>1000,50655=>1000,50656=>1000,50657=>1000,50658=>1000,50659=>1000,50660=>1000,50661=>1000,50662=>1000,50663=>1000,50664=>1000,50665=>1000,50666=>1000,50667=>1000,50668=>1000,50669=>1000,50670=>1000,50671=>1000,50672=>1000,50673=>1000,50674=>1000,50675=>1000,50676=>1000,50677=>1000,50678=>1000,50679=>1000,50680=>1000,50681=>1000,50682=>1000,50683=>1000,50684=>1000,50685=>1000,50686=>1000,50687=>1000,50688=>1000,50689=>1000,50690=>1000,50691=>1000,50692=>1000,50693=>1000,50694=>1000,50695=>1000,50696=>1000,50697=>1000,50698=>1000,50699=>1000,50700=>1000,50701=>1000,50702=>1000,50703=>1000,50704=>1000,50705=>1000,50706=>1000,50707=>1000,50708=>1000,50709=>1000,50710=>1000,50711=>1000,50712=>1000,50713=>1000,50714=>1000,50715=>1000,50716=>1000,50717=>1000,50718=>1000,50719=>1000,50720=>1000,50721=>1000,50722=>1000,50723=>1000,50724=>1000,50725=>1000,50726=>1000,50727=>1000,50728=>1000,50729=>1000,50730=>1000,50731=>1000,50732=>1000,50733=>1000,50734=>1000,50735=>1000,50736=>1000,50737=>1000,50738=>1000,50739=>1000,50740=>1000,50741=>1000,50742=>1000,50743=>1000,50744=>1000,50745=>1000,50746=>1000,50747=>1000,50748=>1000,50749=>1000,50750=>1000,50751=>1000,50752=>1000,50753=>1000,50754=>1000,50755=>1000,50756=>1000,50757=>1000,50758=>1000,50759=>1000,50760=>1000,50761=>1000,50762=>1000,50763=>1000,50764=>1000,50765=>1000,50766=>1000,50767=>1000,50768=>1000,50769=>1000,50770=>1000,50771=>1000,50772=>1000,50773=>1000,50774=>1000,50775=>1000,50776=>1000,50777=>1000,50778=>1000,50779=>1000,50780=>1000,50781=>1000,50782=>1000,50783=>1000,50784=>1000,50785=>1000,50786=>1000,50787=>1000,50788=>1000,50789=>1000,50790=>1000,50791=>1000,50792=>1000,50793=>1000,50794=>1000,50795=>1000,50796=>1000,50797=>1000,50798=>1000,50799=>1000,50800=>1000,50801=>1000,50802=>1000,50803=>1000,50804=>1000,50805=>1000,50806=>1000,50807=>1000,50808=>1000,50809=>1000,50810=>1000,50811=>1000,50812=>1000,50813=>1000,50814=>1000,50815=>1000,50816=>1000,50817=>1000,50818=>1000,50819=>1000,50820=>1000,50821=>1000,50822=>1000,50823=>1000,50824=>1000,50825=>1000,50826=>1000,50827=>1000,50828=>1000,50829=>1000,50830=>1000,50831=>1000,50832=>1000,50833=>1000,50834=>1000,50835=>1000,50836=>1000,50837=>1000,50838=>1000,50839=>1000,50840=>1000,50841=>1000,50842=>1000,50843=>1000,50844=>1000,50845=>1000,50846=>1000,50847=>1000,50848=>1000,50849=>1000,50850=>1000,50851=>1000,50852=>1000,50853=>1000,50854=>1000,50855=>1000,50856=>1000,50857=>1000,50858=>1000,50859=>1000,50860=>1000,50861=>1000,50862=>1000,50863=>1000,50864=>1000,50865=>1000,50866=>1000,50867=>1000,50868=>1000,50869=>1000,50870=>1000,50871=>1000,50872=>1000,50873=>1000,50874=>1000,50875=>1000,50876=>1000,50877=>1000,50878=>1000,50879=>1000,50880=>1000,50881=>1000,50882=>1000,50883=>1000,50884=>1000,50885=>1000,50886=>1000,50887=>1000,50888=>1000,50889=>1000,50890=>1000,50891=>1000,50892=>1000,50893=>1000,50894=>1000,50895=>1000,50896=>1000,50897=>1000,50898=>1000,50899=>1000,50900=>1000,50901=>1000,50902=>1000,50903=>1000,50904=>1000,50905=>1000,50906=>1000,50907=>1000,50908=>1000,50909=>1000,50910=>1000,50911=>1000,50912=>1000,50913=>1000,50914=>1000,50915=>1000,50916=>1000,50917=>1000,50918=>1000,50919=>1000,50920=>1000,50921=>1000,50922=>1000,50923=>1000,50924=>1000,50925=>1000,50926=>1000,50927=>1000,50928=>1000,50929=>1000,50930=>1000,50931=>1000,50932=>1000,50933=>1000,50934=>1000,50935=>1000,50936=>1000,50937=>1000,50938=>1000,50939=>1000,50940=>1000,50941=>1000,50942=>1000,50943=>1000,50944=>1000,50945=>1000,50946=>1000,50947=>1000,50948=>1000,50949=>1000,50950=>1000,50951=>1000,50952=>1000,50953=>1000,50954=>1000,50955=>1000,50956=>1000,50957=>1000,50958=>1000,50959=>1000,50960=>1000,50961=>1000,50962=>1000,50963=>1000,50964=>1000,50965=>1000,50966=>1000,50967=>1000,50968=>1000,50969=>1000,50970=>1000,50971=>1000,50972=>1000,50973=>1000,50974=>1000,50975=>1000,50976=>1000,50977=>1000,50978=>1000,50979=>1000,50980=>1000,50981=>1000,50982=>1000,50983=>1000,50984=>1000,50985=>1000,50986=>1000,50987=>1000,50988=>1000,50989=>1000,50990=>1000,50991=>1000,50992=>1000,50993=>1000,50994=>1000,50995=>1000,50996=>1000,50997=>1000,50998=>1000,50999=>1000,51000=>1000,51001=>1000,51002=>1000,51003=>1000,51004=>1000,51005=>1000,51006=>1000,51007=>1000,51008=>1000,51009=>1000,51010=>1000,51011=>1000,51012=>1000,51013=>1000,51014=>1000,51015=>1000,51016=>1000,51017=>1000,51018=>1000,51019=>1000,51020=>1000,51021=>1000,51022=>1000,51023=>1000,51024=>1000,51025=>1000,51026=>1000,51027=>1000,51028=>1000,51029=>1000,51030=>1000,51031=>1000,51032=>1000,51033=>1000,51034=>1000,51035=>1000,51036=>1000,51037=>1000,51038=>1000,51039=>1000,51040=>1000,51041=>1000,51042=>1000,51043=>1000,51044=>1000,51045=>1000,51046=>1000,51047=>1000,51048=>1000,51049=>1000,51050=>1000,51051=>1000,51052=>1000,51053=>1000,51054=>1000,51055=>1000,51056=>1000,51057=>1000,51058=>1000,51059=>1000,51060=>1000,51061=>1000,51062=>1000,51063=>1000,51064=>1000,51065=>1000,51066=>1000,51067=>1000,51068=>1000,51069=>1000,51070=>1000,51071=>1000,51072=>1000,51073=>1000,51074=>1000,51075=>1000,51076=>1000,51077=>1000,51078=>1000,51079=>1000,51080=>1000,51081=>1000,51082=>1000,51083=>1000,51084=>1000,51085=>1000,51086=>1000,51087=>1000,51088=>1000,51089=>1000,51090=>1000,51091=>1000,51092=>1000,51093=>1000,51094=>1000,51095=>1000,51096=>1000,51097=>1000,51098=>1000,51099=>1000,51100=>1000,51101=>1000,51102=>1000,51103=>1000,51104=>1000,51105=>1000,51106=>1000,51107=>1000,51108=>1000,51109=>1000,51110=>1000,51111=>1000,51112=>1000,51113=>1000,51114=>1000,51115=>1000,51116=>1000,51117=>1000,51118=>1000,51119=>1000,51120=>1000,51121=>1000,51122=>1000,51123=>1000,51124=>1000,51125=>1000,51126=>1000,51127=>1000,51128=>1000,51129=>1000,51130=>1000,51131=>1000,51132=>1000,51133=>1000,51134=>1000,51135=>1000,51136=>1000,51137=>1000,51138=>1000,51139=>1000,51140=>1000,51141=>1000,51142=>1000,51143=>1000,51144=>1000,51145=>1000,51146=>1000,51147=>1000,51148=>1000,51149=>1000,51150=>1000,51151=>1000,51152=>1000,51153=>1000,51154=>1000,51155=>1000,51156=>1000,51157=>1000,51158=>1000,51159=>1000,51160=>1000,51161=>1000,51162=>1000,51163=>1000,51164=>1000,51165=>1000,51166=>1000,51167=>1000,51168=>1000,51169=>1000,51170=>1000,51171=>1000,51172=>1000,51173=>1000,51174=>1000,51175=>1000,51176=>1000,51177=>1000,51178=>1000,51179=>1000,51180=>1000,51181=>1000,51182=>1000,51183=>1000,51184=>1000,51185=>1000,51186=>1000,51187=>1000,51188=>1000,51189=>1000,51190=>1000,51191=>1000,51192=>1000,51193=>1000,51194=>1000,51195=>1000,51196=>1000,51197=>1000,51198=>1000,51199=>1000,51200=>1000,51201=>1000,51202=>1000,51203=>1000,51204=>1000,51205=>1000,51206=>1000,51207=>1000,51208=>1000,51209=>1000,51210=>1000,51211=>1000,51212=>1000,51213=>1000,51214=>1000,51215=>1000,51216=>1000,51217=>1000,51218=>1000,51219=>1000,51220=>1000,51221=>1000,51222=>1000,51223=>1000,51224=>1000,51225=>1000,51226=>1000,51227=>1000,51228=>1000,51229=>1000,51230=>1000,51231=>1000,51232=>1000,51233=>1000,51234=>1000,51235=>1000,51236=>1000,51237=>1000,51238=>1000,51239=>1000,51240=>1000,51241=>1000,51242=>1000,51243=>1000,51244=>1000,51245=>1000,51246=>1000,51247=>1000,51248=>1000,51249=>1000,51250=>1000,51251=>1000,51252=>1000,51253=>1000,51254=>1000,51255=>1000,51256=>1000,51257=>1000,51258=>1000,51259=>1000,51260=>1000,51261=>1000,51262=>1000,51263=>1000,51264=>1000,51265=>1000,51266=>1000,51267=>1000,51268=>1000,51269=>1000,51270=>1000,51271=>1000,51272=>1000,51273=>1000,51274=>1000,51275=>1000,51276=>1000,51277=>1000,51278=>1000,51279=>1000,51280=>1000,51281=>1000,51282=>1000,51283=>1000,51284=>1000,51285=>1000,51286=>1000,51287=>1000,51288=>1000,51289=>1000,51290=>1000,51291=>1000,51292=>1000,51293=>1000,51294=>1000,51295=>1000,51296=>1000,51297=>1000,51298=>1000,51299=>1000,51300=>1000,51301=>1000,51302=>1000,51303=>1000,51304=>1000,51305=>1000,51306=>1000,51307=>1000,51308=>1000,51309=>1000,51310=>1000,51311=>1000,51312=>1000,51313=>1000,51314=>1000,51315=>1000,51316=>1000,51317=>1000,51318=>1000,51319=>1000,51320=>1000,51321=>1000,51322=>1000,51323=>1000,51324=>1000,51325=>1000,51326=>1000,51327=>1000,51328=>1000,51329=>1000,51330=>1000,51331=>1000,51332=>1000,51333=>1000,51334=>1000,51335=>1000,51336=>1000,51337=>1000,51338=>1000,51339=>1000,51340=>1000,51341=>1000,51342=>1000,51343=>1000,51344=>1000,51345=>1000,51346=>1000,51347=>1000,51348=>1000,51349=>1000,51350=>1000,51351=>1000,51352=>1000,51353=>1000,51354=>1000,51355=>1000,51356=>1000,51357=>1000,51358=>1000,51359=>1000,51360=>1000,51361=>1000,51362=>1000,51363=>1000,51364=>1000,51365=>1000,51366=>1000,51367=>1000,51368=>1000,51369=>1000,51370=>1000,51371=>1000,51372=>1000,51373=>1000,51374=>1000,51375=>1000,51376=>1000,51377=>1000,51378=>1000,51379=>1000,51380=>1000,51381=>1000,51382=>1000,51383=>1000,51384=>1000,51385=>1000,51386=>1000,51387=>1000,51388=>1000,51389=>1000,51390=>1000,51391=>1000,51392=>1000,51393=>1000,51394=>1000,51395=>1000,51396=>1000,51397=>1000,51398=>1000,51399=>1000,51400=>1000,51401=>1000,51402=>1000,51403=>1000,51404=>1000,51405=>1000,51406=>1000,51407=>1000,51408=>1000,51409=>1000,51410=>1000,51411=>1000,51412=>1000,51413=>1000,51414=>1000,51415=>1000,51416=>1000,51417=>1000,51418=>1000,51419=>1000,51420=>1000,51421=>1000,51422=>1000,51423=>1000,51424=>1000,51425=>1000,51426=>1000,51427=>1000,51428=>1000,51429=>1000,51430=>1000,51431=>1000,51432=>1000,51433=>1000,51434=>1000,51435=>1000,51436=>1000,51437=>1000,51438=>1000,51439=>1000,51440=>1000,51441=>1000,51442=>1000,51443=>1000,51444=>1000,51445=>1000,51446=>1000,51447=>1000,51448=>1000,51449=>1000,51450=>1000,51451=>1000,51452=>1000,51453=>1000,51454=>1000,51455=>1000,51456=>1000,51457=>1000,51458=>1000,51459=>1000,51460=>1000,51461=>1000,51462=>1000,51463=>1000,51464=>1000,51465=>1000,51466=>1000,51467=>1000,51468=>1000,51469=>1000,51470=>1000,51471=>1000,51472=>1000,51473=>1000,51474=>1000,51475=>1000,51476=>1000,51477=>1000,51478=>1000,51479=>1000,51480=>1000,51481=>1000,51482=>1000,51483=>1000,51484=>1000,51485=>1000,51486=>1000,51487=>1000,51488=>1000,51489=>1000,51490=>1000,51491=>1000,51492=>1000,51493=>1000,51494=>1000,51495=>1000,51496=>1000,51497=>1000,51498=>1000,51499=>1000,51500=>1000,51501=>1000,51502=>1000,51503=>1000,51504=>1000,51505=>1000,51506=>1000,51507=>1000,51508=>1000,51509=>1000,51510=>1000,51511=>1000,51512=>1000,51513=>1000,51514=>1000,51515=>1000,51516=>1000,51517=>1000,51518=>1000,51519=>1000,51520=>1000,51521=>1000,51522=>1000,51523=>1000,51524=>1000,51525=>1000,51526=>1000,51527=>1000,51528=>1000,51529=>1000,51530=>1000,51531=>1000,51532=>1000,51533=>1000,51534=>1000,51535=>1000,51536=>1000,51537=>1000,51538=>1000,51539=>1000,51540=>1000,51541=>1000,51542=>1000,51543=>1000,51544=>1000,51545=>1000,51546=>1000,51547=>1000,51548=>1000,51549=>1000,51550=>1000,51551=>1000,51552=>1000,51553=>1000,51554=>1000,51555=>1000,51556=>1000,51557=>1000,51558=>1000,51559=>1000,51560=>1000,51561=>1000,51562=>1000,51563=>1000,51564=>1000,51565=>1000,51566=>1000,51567=>1000,51568=>1000,51569=>1000,51570=>1000,51571=>1000,51572=>1000,51573=>1000,51574=>1000,51575=>1000,51576=>1000,51577=>1000,51578=>1000,51579=>1000,51580=>1000,51581=>1000,51582=>1000,51583=>1000,51584=>1000,51585=>1000,51586=>1000,51587=>1000,51588=>1000,51589=>1000,51590=>1000,51591=>1000,51592=>1000,51593=>1000,51594=>1000,51595=>1000,51596=>1000,51597=>1000,51598=>1000,51599=>1000,51600=>1000,51601=>1000,51602=>1000,51603=>1000,51604=>1000,51605=>1000,51606=>1000,51607=>1000,51608=>1000,51609=>1000,51610=>1000,51611=>1000,51612=>1000,51613=>1000,51614=>1000,51615=>1000,51616=>1000,51617=>1000,51618=>1000,51619=>1000,51620=>1000,51621=>1000,51622=>1000,51623=>1000,51624=>1000,51625=>1000,51626=>1000,51627=>1000,51628=>1000,51629=>1000,51630=>1000,51631=>1000,51632=>1000,51633=>1000,51634=>1000,51635=>1000,51636=>1000,51637=>1000,51638=>1000,51639=>1000,51640=>1000,51641=>1000,51642=>1000,51643=>1000,51644=>1000,51645=>1000,51646=>1000,51647=>1000,51648=>1000,51649=>1000,51650=>1000,51651=>1000,51652=>1000,51653=>1000,51654=>1000,51655=>1000,51656=>1000,51657=>1000,51658=>1000,51659=>1000,51660=>1000,51661=>1000,51662=>1000,51663=>1000,51664=>1000,51665=>1000,51666=>1000,51667=>1000,51668=>1000,51669=>1000,51670=>1000,51671=>1000,51672=>1000,51673=>1000,51674=>1000,51675=>1000,51676=>1000,51677=>1000,51678=>1000,51679=>1000,51680=>1000,51681=>1000,51682=>1000,51683=>1000,51684=>1000,51685=>1000,51686=>1000,51687=>1000,51688=>1000,51689=>1000,51690=>1000,51691=>1000,51692=>1000,51693=>1000,51694=>1000,51695=>1000,51696=>1000,51697=>1000,51698=>1000,51699=>1000,51700=>1000,51701=>1000,51702=>1000,51703=>1000,51704=>1000,51705=>1000,51706=>1000,51707=>1000,51708=>1000,51709=>1000,51710=>1000,51711=>1000,51712=>1000,51713=>1000,51714=>1000,51715=>1000,51716=>1000,51717=>1000,51718=>1000,51719=>1000,51720=>1000,51721=>1000,51722=>1000,51723=>1000,51724=>1000,51725=>1000,51726=>1000,51727=>1000,51728=>1000,51729=>1000,51730=>1000,51731=>1000,51732=>1000,51733=>1000,51734=>1000,51735=>1000,51736=>1000,51737=>1000,51738=>1000,51739=>1000,51740=>1000,51741=>1000,51742=>1000,51743=>1000,51744=>1000,51745=>1000,51746=>1000,51747=>1000,51748=>1000,51749=>1000,51750=>1000,51751=>1000,51752=>1000,51753=>1000,51754=>1000,51755=>1000,51756=>1000,51757=>1000,51758=>1000,51759=>1000,51760=>1000,51761=>1000,51762=>1000,51763=>1000,51764=>1000,51765=>1000,51766=>1000,51767=>1000,51768=>1000,51769=>1000,51770=>1000,51771=>1000,51772=>1000,51773=>1000,51774=>1000,51775=>1000,51776=>1000,51777=>1000,51778=>1000,51779=>1000,51780=>1000,51781=>1000,51782=>1000,51783=>1000,51784=>1000,51785=>1000,51786=>1000,51787=>1000,51788=>1000,51789=>1000,51790=>1000,51791=>1000,51792=>1000,51793=>1000,51794=>1000,51795=>1000,51796=>1000,51797=>1000,51798=>1000,51799=>1000,51800=>1000,51801=>1000,51802=>1000,51803=>1000,51804=>1000,51805=>1000,51806=>1000,51807=>1000,51808=>1000,51809=>1000,51810=>1000,51811=>1000,51812=>1000,51813=>1000,51814=>1000,51815=>1000,51816=>1000,51817=>1000,51818=>1000,51819=>1000,51820=>1000,51821=>1000,51822=>1000,51823=>1000,51824=>1000,51825=>1000,51826=>1000,51827=>1000,51828=>1000,51829=>1000,51830=>1000,51831=>1000,51832=>1000,51833=>1000,51834=>1000,51835=>1000,51836=>1000,51837=>1000,51838=>1000,51839=>1000,51840=>1000,51841=>1000,51842=>1000,51843=>1000,51844=>1000,51845=>1000,51846=>1000,51847=>1000,51848=>1000,51849=>1000,51850=>1000,51851=>1000,51852=>1000,51853=>1000,51854=>1000,51855=>1000,51856=>1000,51857=>1000,51858=>1000,51859=>1000,51860=>1000,51861=>1000,51862=>1000,51863=>1000,51864=>1000,51865=>1000,51866=>1000,51867=>1000,51868=>1000,51869=>1000,51870=>1000,51871=>1000,51872=>1000,51873=>1000,51874=>1000,51875=>1000,51876=>1000,51877=>1000,51878=>1000,51879=>1000,51880=>1000,51881=>1000,51882=>1000,51883=>1000,51884=>1000,51885=>1000,51886=>1000,51887=>1000,51888=>1000,51889=>1000,51890=>1000,51891=>1000,51892=>1000,51893=>1000,51894=>1000,51895=>1000,51896=>1000,51897=>1000,51898=>1000,51899=>1000,51900=>1000,51901=>1000,51902=>1000,51903=>1000,51904=>1000,51905=>1000,51906=>1000,51907=>1000,51908=>1000,51909=>1000,51910=>1000,51911=>1000,51912=>1000,51913=>1000,51914=>1000,51915=>1000,51916=>1000,51917=>1000,51918=>1000,51919=>1000,51920=>1000,51921=>1000,51922=>1000,51923=>1000,51924=>1000,51925=>1000,51926=>1000,51927=>1000,51928=>1000,51929=>1000,51930=>1000,51931=>1000,51932=>1000,51933=>1000,51934=>1000,51935=>1000,51936=>1000,51937=>1000,51938=>1000,51939=>1000,51940=>1000,51941=>1000,51942=>1000,51943=>1000,51944=>1000,51945=>1000,51946=>1000,51947=>1000,51948=>1000,51949=>1000,51950=>1000,51951=>1000,51952=>1000,51953=>1000,51954=>1000,51955=>1000,51956=>1000,51957=>1000,51958=>1000,51959=>1000,51960=>1000,51961=>1000,51962=>1000,51963=>1000,51964=>1000,51965=>1000,51966=>1000,51967=>1000,51968=>1000,51969=>1000,51970=>1000,51971=>1000,51972=>1000,51973=>1000,51974=>1000,51975=>1000,51976=>1000,51977=>1000,51978=>1000,51979=>1000,51980=>1000,51981=>1000,51982=>1000,51983=>1000,51984=>1000,51985=>1000,51986=>1000,51987=>1000,51988=>1000,51989=>1000,51990=>1000,51991=>1000,51992=>1000,51993=>1000,51994=>1000,51995=>1000,51996=>1000,51997=>1000,51998=>1000,51999=>1000,52000=>1000,52001=>1000,52002=>1000,52003=>1000,52004=>1000,52005=>1000,52006=>1000,52007=>1000,52008=>1000,52009=>1000,52010=>1000,52011=>1000,52012=>1000,52013=>1000,52014=>1000,52015=>1000,52016=>1000,52017=>1000,52018=>1000,52019=>1000,52020=>1000,52021=>1000,52022=>1000,52023=>1000,52024=>1000,52025=>1000,52026=>1000,52027=>1000,52028=>1000,52029=>1000,52030=>1000,52031=>1000,52032=>1000,52033=>1000,52034=>1000,52035=>1000,52036=>1000,52037=>1000,52038=>1000,52039=>1000,52040=>1000,52041=>1000,52042=>1000,52043=>1000,52044=>1000,52045=>1000,52046=>1000,52047=>1000,52048=>1000,52049=>1000,52050=>1000,52051=>1000,52052=>1000,52053=>1000,52054=>1000,52055=>1000,52056=>1000,52057=>1000,52058=>1000,52059=>1000,52060=>1000,52061=>1000,52062=>1000,52063=>1000,52064=>1000,52065=>1000,52066=>1000,52067=>1000,52068=>1000,52069=>1000,52070=>1000,52071=>1000,52072=>1000,52073=>1000,52074=>1000,52075=>1000,52076=>1000,52077=>1000,52078=>1000,52079=>1000,52080=>1000,52081=>1000,52082=>1000,52083=>1000,52084=>1000,52085=>1000,52086=>1000,52087=>1000,52088=>1000,52089=>1000,52090=>1000,52091=>1000,52092=>1000,52093=>1000,52094=>1000,52095=>1000,52096=>1000,52097=>1000,52098=>1000,52099=>1000,52100=>1000,52101=>1000,52102=>1000,52103=>1000,52104=>1000,52105=>1000,52106=>1000,52107=>1000,52108=>1000,52109=>1000,52110=>1000,52111=>1000,52112=>1000,52113=>1000,52114=>1000,52115=>1000,52116=>1000,52117=>1000,52118=>1000,52119=>1000,52120=>1000,52121=>1000,52122=>1000,52123=>1000,52124=>1000,52125=>1000,52126=>1000,52127=>1000,52128=>1000,52129=>1000,52130=>1000,52131=>1000,52132=>1000,52133=>1000,52134=>1000,52135=>1000,52136=>1000,52137=>1000,52138=>1000,52139=>1000,52140=>1000,52141=>1000,52142=>1000,52143=>1000,52144=>1000,52145=>1000,52146=>1000,52147=>1000,52148=>1000,52149=>1000,52150=>1000,52151=>1000,52152=>1000,52153=>1000,52154=>1000,52155=>1000,52156=>1000,52157=>1000,52158=>1000,52159=>1000,52160=>1000,52161=>1000,52162=>1000,52163=>1000,52164=>1000,52165=>1000,52166=>1000,52167=>1000,52168=>1000,52169=>1000,52170=>1000,52171=>1000,52172=>1000,52173=>1000,52174=>1000,52175=>1000,52176=>1000,52177=>1000,52178=>1000,52179=>1000,52180=>1000,52181=>1000,52182=>1000,52183=>1000,52184=>1000,52185=>1000,52186=>1000,52187=>1000,52188=>1000,52189=>1000,52190=>1000,52191=>1000,52192=>1000,52193=>1000,52194=>1000,52195=>1000,52196=>1000,52197=>1000,52198=>1000,52199=>1000,52200=>1000,52201=>1000,52202=>1000,52203=>1000,52204=>1000,52205=>1000,52206=>1000,52207=>1000,52208=>1000,52209=>1000,52210=>1000,52211=>1000,52212=>1000,52213=>1000,52214=>1000,52215=>1000,52216=>1000,52217=>1000,52218=>1000,52219=>1000,52220=>1000,52221=>1000,52222=>1000,52223=>1000,52224=>1000,52225=>1000,52226=>1000,52227=>1000,52228=>1000,52229=>1000,52230=>1000,52231=>1000,52232=>1000,52233=>1000,52234=>1000,52235=>1000,52236=>1000,52237=>1000,52238=>1000,52239=>1000,52240=>1000,52241=>1000,52242=>1000,52243=>1000,52244=>1000,52245=>1000,52246=>1000,52247=>1000,52248=>1000,52249=>1000,52250=>1000,52251=>1000,52252=>1000,52253=>1000,52254=>1000,52255=>1000,52256=>1000,52257=>1000,52258=>1000,52259=>1000,52260=>1000,52261=>1000,52262=>1000,52263=>1000,52264=>1000,52265=>1000,52266=>1000,52267=>1000,52268=>1000,52269=>1000,52270=>1000,52271=>1000,52272=>1000,52273=>1000,52274=>1000,52275=>1000,52276=>1000,52277=>1000,52278=>1000,52279=>1000,52280=>1000,52281=>1000,52282=>1000,52283=>1000,52284=>1000,52285=>1000,52286=>1000,52287=>1000,52288=>1000,52289=>1000,52290=>1000,52291=>1000,52292=>1000,52293=>1000,52294=>1000,52295=>1000,52296=>1000,52297=>1000,52298=>1000,52299=>1000,52300=>1000,52301=>1000,52302=>1000,52303=>1000,52304=>1000,52305=>1000,52306=>1000,52307=>1000,52308=>1000,52309=>1000,52310=>1000,52311=>1000,52312=>1000,52313=>1000,52314=>1000,52315=>1000,52316=>1000,52317=>1000,52318=>1000,52319=>1000,52320=>1000,52321=>1000,52322=>1000,52323=>1000,52324=>1000,52325=>1000,52326=>1000,52327=>1000,52328=>1000,52329=>1000,52330=>1000,52331=>1000,52332=>1000,52333=>1000,52334=>1000,52335=>1000,52336=>1000,52337=>1000,52338=>1000,52339=>1000,52340=>1000,52341=>1000,52342=>1000,52343=>1000,52344=>1000,52345=>1000,52346=>1000,52347=>1000,52348=>1000,52349=>1000,52350=>1000,52351=>1000,52352=>1000,52353=>1000,52354=>1000,52355=>1000,52356=>1000,52357=>1000,52358=>1000,52359=>1000,52360=>1000,52361=>1000,52362=>1000,52363=>1000,52364=>1000,52365=>1000,52366=>1000,52367=>1000,52368=>1000,52369=>1000,52370=>1000,52371=>1000,52372=>1000,52373=>1000,52374=>1000,52375=>1000,52376=>1000,52377=>1000,52378=>1000,52379=>1000,52380=>1000,52381=>1000,52382=>1000,52383=>1000,52384=>1000,52385=>1000,52386=>1000,52387=>1000,52388=>1000,52389=>1000,52390=>1000,52391=>1000,52392=>1000,52393=>1000,52394=>1000,52395=>1000,52396=>1000,52397=>1000,52398=>1000,52399=>1000,52400=>1000,52401=>1000,52402=>1000,52403=>1000,52404=>1000,52405=>1000,52406=>1000,52407=>1000,52408=>1000,52409=>1000,52410=>1000,52411=>1000,52412=>1000,52413=>1000,52414=>1000,52415=>1000,52416=>1000,52417=>1000,52418=>1000,52419=>1000,52420=>1000,52421=>1000,52422=>1000,52423=>1000,52424=>1000,52425=>1000,52426=>1000,52427=>1000,52428=>1000,52429=>1000,52430=>1000,52431=>1000,52432=>1000,52433=>1000,52434=>1000,52435=>1000,52436=>1000,52437=>1000,52438=>1000,52439=>1000,52440=>1000,52441=>1000,52442=>1000,52443=>1000,52444=>1000,52445=>1000,52446=>1000,52447=>1000,52448=>1000,52449=>1000,52450=>1000,52451=>1000,52452=>1000,52453=>1000,52454=>1000,52455=>1000,52456=>1000,52457=>1000,52458=>1000,52459=>1000,52460=>1000,52461=>1000,52462=>1000,52463=>1000,52464=>1000,52465=>1000,52466=>1000,52467=>1000,52468=>1000,52469=>1000,52470=>1000,52471=>1000,52472=>1000,52473=>1000,52474=>1000,52475=>1000,52476=>1000,52477=>1000,52478=>1000,52479=>1000,52480=>1000,52481=>1000,52482=>1000,52483=>1000,52484=>1000,52485=>1000,52486=>1000,52487=>1000,52488=>1000,52489=>1000,52490=>1000,52491=>1000,52492=>1000,52493=>1000,52494=>1000,52495=>1000,52496=>1000,52497=>1000,52498=>1000,52499=>1000,52500=>1000,52501=>1000,52502=>1000,52503=>1000,52504=>1000,52505=>1000,52506=>1000,52507=>1000,52508=>1000,52509=>1000,52510=>1000,52511=>1000,52512=>1000,52513=>1000,52514=>1000,52515=>1000,52516=>1000,52517=>1000,52518=>1000,52519=>1000,52520=>1000,52521=>1000,52522=>1000,52523=>1000,52524=>1000,52525=>1000,52526=>1000,52527=>1000,52528=>1000,52529=>1000,52530=>1000,52531=>1000,52532=>1000,52533=>1000,52534=>1000,52535=>1000,52536=>1000,52537=>1000,52538=>1000,52539=>1000,52540=>1000,52541=>1000,52542=>1000,52543=>1000,52544=>1000,52545=>1000,52546=>1000,52547=>1000,52548=>1000,52549=>1000,52550=>1000,52551=>1000,52552=>1000,52553=>1000,52554=>1000,52555=>1000,52556=>1000,52557=>1000,52558=>1000,52559=>1000,52560=>1000,52561=>1000,52562=>1000,52563=>1000,52564=>1000,52565=>1000,52566=>1000,52567=>1000,52568=>1000,52569=>1000,52570=>1000,52571=>1000,52572=>1000,52573=>1000,52574=>1000,52575=>1000,52576=>1000,52577=>1000,52578=>1000,52579=>1000,52580=>1000,52581=>1000,52582=>1000,52583=>1000,52584=>1000,52585=>1000,52586=>1000,52587=>1000,52588=>1000,52589=>1000,52590=>1000,52591=>1000,52592=>1000,52593=>1000,52594=>1000,52595=>1000,52596=>1000,52597=>1000,52598=>1000,52599=>1000,52600=>1000,52601=>1000,52602=>1000,52603=>1000,52604=>1000,52605=>1000,52606=>1000,52607=>1000,52608=>1000,52609=>1000,52610=>1000,52611=>1000,52612=>1000,52613=>1000,52614=>1000,52615=>1000,52616=>1000,52617=>1000,52618=>1000,52619=>1000,52620=>1000,52621=>1000,52622=>1000,52623=>1000,52624=>1000,52625=>1000,52626=>1000,52627=>1000,52628=>1000,52629=>1000,52630=>1000,52631=>1000,52632=>1000,52633=>1000,52634=>1000,52635=>1000,52636=>1000,52637=>1000,52638=>1000,52639=>1000,52640=>1000,52641=>1000,52642=>1000,52643=>1000,52644=>1000,52645=>1000,52646=>1000,52647=>1000,52648=>1000,52649=>1000,52650=>1000,52651=>1000,52652=>1000,52653=>1000,52654=>1000,52655=>1000,52656=>1000,52657=>1000,52658=>1000,52659=>1000,52660=>1000,52661=>1000,52662=>1000,52663=>1000,52664=>1000,52665=>1000,52666=>1000,52667=>1000,52668=>1000,52669=>1000,52670=>1000,52671=>1000,52672=>1000,52673=>1000,52674=>1000,52675=>1000,52676=>1000,52677=>1000,52678=>1000,52679=>1000,52680=>1000,52681=>1000,52682=>1000,52683=>1000,52684=>1000,52685=>1000,52686=>1000,52687=>1000,52688=>1000,52689=>1000,52690=>1000,52691=>1000,52692=>1000,52693=>1000,52694=>1000,52695=>1000,52696=>1000,52697=>1000,52698=>1000,52699=>1000,52700=>1000,52701=>1000,52702=>1000,52703=>1000,52704=>1000,52705=>1000,52706=>1000,52707=>1000,52708=>1000,52709=>1000,52710=>1000,52711=>1000,52712=>1000,52713=>1000,52714=>1000,52715=>1000,52716=>1000,52717=>1000,52718=>1000,52719=>1000,52720=>1000,52721=>1000,52722=>1000,52723=>1000,52724=>1000,52725=>1000,52726=>1000,52727=>1000,52728=>1000,52729=>1000,52730=>1000,52731=>1000,52732=>1000,52733=>1000,52734=>1000,52735=>1000,52736=>1000,52737=>1000,52738=>1000,52739=>1000,52740=>1000,52741=>1000,52742=>1000,52743=>1000,52744=>1000,52745=>1000,52746=>1000,52747=>1000,52748=>1000,52749=>1000,52750=>1000,52751=>1000,52752=>1000,52753=>1000,52754=>1000,52755=>1000,52756=>1000,52757=>1000,52758=>1000,52759=>1000,52760=>1000,52761=>1000,52762=>1000,52763=>1000,52764=>1000,52765=>1000,52766=>1000,52767=>1000,52768=>1000,52769=>1000,52770=>1000,52771=>1000,52772=>1000,52773=>1000,52774=>1000,52775=>1000,52776=>1000,52777=>1000,52778=>1000,52779=>1000,52780=>1000,52781=>1000,52782=>1000,52783=>1000,52784=>1000,52785=>1000,52786=>1000,52787=>1000,52788=>1000,52789=>1000,52790=>1000,52791=>1000,52792=>1000,52793=>1000,52794=>1000,52795=>1000,52796=>1000,52797=>1000,52798=>1000,52799=>1000,52800=>1000,52801=>1000,52802=>1000,52803=>1000,52804=>1000,52805=>1000,52806=>1000,52807=>1000,52808=>1000,52809=>1000,52810=>1000,52811=>1000,52812=>1000,52813=>1000,52814=>1000,52815=>1000,52816=>1000,52817=>1000,52818=>1000,52819=>1000,52820=>1000,52821=>1000,52822=>1000,52823=>1000,52824=>1000,52825=>1000,52826=>1000,52827=>1000,52828=>1000,52829=>1000,52830=>1000,52831=>1000,52832=>1000,52833=>1000,52834=>1000,52835=>1000,52836=>1000,52837=>1000,52838=>1000,52839=>1000,52840=>1000,52841=>1000,52842=>1000,52843=>1000,52844=>1000,52845=>1000,52846=>1000,52847=>1000,52848=>1000,52849=>1000,52850=>1000,52851=>1000,52852=>1000,52853=>1000,52854=>1000,52855=>1000,52856=>1000,52857=>1000,52858=>1000,52859=>1000,52860=>1000,52861=>1000,52862=>1000,52863=>1000,52864=>1000,52865=>1000,52866=>1000,52867=>1000,52868=>1000,52869=>1000,52870=>1000,52871=>1000,52872=>1000,52873=>1000,52874=>1000,52875=>1000,52876=>1000,52877=>1000,52878=>1000,52879=>1000,52880=>1000,52881=>1000,52882=>1000,52883=>1000,52884=>1000,52885=>1000,52886=>1000,52887=>1000,52888=>1000,52889=>1000,52890=>1000,52891=>1000,52892=>1000,52893=>1000,52894=>1000,52895=>1000,52896=>1000,52897=>1000,52898=>1000,52899=>1000,52900=>1000,52901=>1000,52902=>1000,52903=>1000,52904=>1000,52905=>1000,52906=>1000,52907=>1000,52908=>1000,52909=>1000,52910=>1000,52911=>1000,52912=>1000,52913=>1000,52914=>1000,52915=>1000,52916=>1000,52917=>1000,52918=>1000,52919=>1000,52920=>1000,52921=>1000,52922=>1000,52923=>1000,52924=>1000,52925=>1000,52926=>1000,52927=>1000,52928=>1000,52929=>1000,52930=>1000,52931=>1000,52932=>1000,52933=>1000,52934=>1000,52935=>1000,52936=>1000,52937=>1000,52938=>1000,52939=>1000,52940=>1000,52941=>1000,52942=>1000,52943=>1000,52944=>1000,52945=>1000,52946=>1000,52947=>1000,52948=>1000,52949=>1000,52950=>1000,52951=>1000,52952=>1000,52953=>1000,52954=>1000,52955=>1000,52956=>1000,52957=>1000,52958=>1000,52959=>1000,52960=>1000,52961=>1000,52962=>1000,52963=>1000,52964=>1000,52965=>1000,52966=>1000,52967=>1000,52968=>1000,52969=>1000,52970=>1000,52971=>1000,52972=>1000,52973=>1000,52974=>1000,52975=>1000,52976=>1000,52977=>1000,52978=>1000,52979=>1000,52980=>1000,52981=>1000,52982=>1000,52983=>1000,52984=>1000,52985=>1000,52986=>1000,52987=>1000,52988=>1000,52989=>1000,52990=>1000,52991=>1000,52992=>1000,52993=>1000,52994=>1000,52995=>1000,52996=>1000,52997=>1000,52998=>1000,52999=>1000,53000=>1000,53001=>1000,53002=>1000,53003=>1000,53004=>1000,53005=>1000,53006=>1000,53007=>1000,53008=>1000,53009=>1000,53010=>1000,53011=>1000,53012=>1000,53013=>1000,53014=>1000,53015=>1000,53016=>1000,53017=>1000,53018=>1000,53019=>1000,53020=>1000,53021=>1000,53022=>1000,53023=>1000,53024=>1000,53025=>1000,53026=>1000,53027=>1000,53028=>1000,53029=>1000,53030=>1000,53031=>1000,53032=>1000,53033=>1000,53034=>1000,53035=>1000,53036=>1000,53037=>1000,53038=>1000,53039=>1000,53040=>1000,53041=>1000,53042=>1000,53043=>1000,53044=>1000,53045=>1000,53046=>1000,53047=>1000,53048=>1000,53049=>1000,53050=>1000,53051=>1000,53052=>1000,53053=>1000,53054=>1000,53055=>1000,53056=>1000,53057=>1000,53058=>1000,53059=>1000,53060=>1000,53061=>1000,53062=>1000,53063=>1000,53064=>1000,53065=>1000,53066=>1000,53067=>1000,53068=>1000,53069=>1000,53070=>1000,53071=>1000,53072=>1000,53073=>1000,53074=>1000,53075=>1000,53076=>1000,53077=>1000,53078=>1000,53079=>1000,53080=>1000,53081=>1000,53082=>1000,53083=>1000,53084=>1000,53085=>1000,53086=>1000,53087=>1000,53088=>1000,53089=>1000,53090=>1000,53091=>1000,53092=>1000,53093=>1000,53094=>1000,53095=>1000,53096=>1000,53097=>1000,53098=>1000,53099=>1000,53100=>1000,53101=>1000,53102=>1000,53103=>1000,53104=>1000,53105=>1000,53106=>1000,53107=>1000,53108=>1000,53109=>1000,53110=>1000,53111=>1000,53112=>1000,53113=>1000,53114=>1000,53115=>1000,53116=>1000,53117=>1000,53118=>1000,53119=>1000,53120=>1000,53121=>1000,53122=>1000,53123=>1000,53124=>1000,53125=>1000,53126=>1000,53127=>1000,53128=>1000,53129=>1000,53130=>1000,53131=>1000,53132=>1000,53133=>1000,53134=>1000,53135=>1000,53136=>1000,53137=>1000,53138=>1000,53139=>1000,53140=>1000,53141=>1000,53142=>1000,53143=>1000,53144=>1000,53145=>1000,53146=>1000,53147=>1000,53148=>1000,53149=>1000,53150=>1000,53151=>1000,53152=>1000,53153=>1000,53154=>1000,53155=>1000,53156=>1000,53157=>1000,53158=>1000,53159=>1000,53160=>1000,53161=>1000,53162=>1000,53163=>1000,53164=>1000,53165=>1000,53166=>1000,53167=>1000,53168=>1000,53169=>1000,53170=>1000,53171=>1000,53172=>1000,53173=>1000,53174=>1000,53175=>1000,53176=>1000,53177=>1000,53178=>1000,53179=>1000,53180=>1000,53181=>1000,53182=>1000,53183=>1000,53184=>1000,53185=>1000,53186=>1000,53187=>1000,53188=>1000,53189=>1000,53190=>1000,53191=>1000,53192=>1000,53193=>1000,53194=>1000,53195=>1000,53196=>1000,53197=>1000,53198=>1000,53199=>1000,53200=>1000,53201=>1000,53202=>1000,53203=>1000,53204=>1000,53205=>1000,53206=>1000,53207=>1000,53208=>1000,53209=>1000,53210=>1000,53211=>1000,53212=>1000,53213=>1000,53214=>1000,53215=>1000,53216=>1000,53217=>1000,53218=>1000,53219=>1000,53220=>1000,53221=>1000,53222=>1000,53223=>1000,53224=>1000,53225=>1000,53226=>1000,53227=>1000,53228=>1000,53229=>1000,53230=>1000,53231=>1000,53232=>1000,53233=>1000,53234=>1000,53235=>1000,53236=>1000,53237=>1000,53238=>1000,53239=>1000,53240=>1000,53241=>1000,53242=>1000,53243=>1000,53244=>1000,53245=>1000,53246=>1000,53247=>1000,53248=>1000,53249=>1000,53250=>1000,53251=>1000,53252=>1000,53253=>1000,53254=>1000,53255=>1000,53256=>1000,53257=>1000,53258=>1000,53259=>1000,53260=>1000,53261=>1000,53262=>1000,53263=>1000,53264=>1000,53265=>1000,53266=>1000,53267=>1000,53268=>1000,53269=>1000,53270=>1000,53271=>1000,53272=>1000,53273=>1000,53274=>1000,53275=>1000,53276=>1000,53277=>1000,53278=>1000,53279=>1000,53280=>1000,53281=>1000,53282=>1000,53283=>1000,53284=>1000,53285=>1000,53286=>1000,53287=>1000,53288=>1000,53289=>1000,53290=>1000,53291=>1000,53292=>1000,53293=>1000,53294=>1000,53295=>1000,53296=>1000,53297=>1000,53298=>1000,53299=>1000,53300=>1000,53301=>1000,53302=>1000,53303=>1000,53304=>1000,53305=>1000,53306=>1000,53307=>1000,53308=>1000,53309=>1000,53310=>1000,53311=>1000,53312=>1000,53313=>1000,53314=>1000,53315=>1000,53316=>1000,53317=>1000,53318=>1000,53319=>1000,53320=>1000,53321=>1000,53322=>1000,53323=>1000,53324=>1000,53325=>1000,53326=>1000,53327=>1000,53328=>1000,53329=>1000,53330=>1000,53331=>1000,53332=>1000,53333=>1000,53334=>1000,53335=>1000,53336=>1000,53337=>1000,53338=>1000,53339=>1000,53340=>1000,53341=>1000,53342=>1000,53343=>1000,53344=>1000,53345=>1000,53346=>1000,53347=>1000,53348=>1000,53349=>1000,53350=>1000,53351=>1000,53352=>1000,53353=>1000,53354=>1000,53355=>1000,53356=>1000,53357=>1000,53358=>1000,53359=>1000,53360=>1000,53361=>1000,53362=>1000,53363=>1000,53364=>1000,53365=>1000,53366=>1000,53367=>1000,53368=>1000,53369=>1000,53370=>1000,53371=>1000,53372=>1000,53373=>1000,53374=>1000,53375=>1000,53376=>1000,53377=>1000,53378=>1000,53379=>1000,53380=>1000,53381=>1000,53382=>1000,53383=>1000,53384=>1000,53385=>1000,53386=>1000,53387=>1000,53388=>1000,53389=>1000,53390=>1000,53391=>1000,53392=>1000,53393=>1000,53394=>1000,53395=>1000,53396=>1000,53397=>1000,53398=>1000,53399=>1000,53400=>1000,53401=>1000,53402=>1000,53403=>1000,53404=>1000,53405=>1000,53406=>1000,53407=>1000,53408=>1000,53409=>1000,53410=>1000,53411=>1000,53412=>1000,53413=>1000,53414=>1000,53415=>1000,53416=>1000,53417=>1000,53418=>1000,53419=>1000,53420=>1000,53421=>1000,53422=>1000,53423=>1000,53424=>1000,53425=>1000,53426=>1000,53427=>1000,53428=>1000,53429=>1000,53430=>1000,53431=>1000,53432=>1000,53433=>1000,53434=>1000,53435=>1000,53436=>1000,53437=>1000,53438=>1000,53439=>1000,53440=>1000,53441=>1000,53442=>1000,53443=>1000,53444=>1000,53445=>1000,53446=>1000,53447=>1000,53448=>1000,53449=>1000,53450=>1000,53451=>1000,53452=>1000,53453=>1000,53454=>1000,53455=>1000,53456=>1000,53457=>1000,53458=>1000,53459=>1000,53460=>1000,53461=>1000,53462=>1000,53463=>1000,53464=>1000,53465=>1000,53466=>1000,53467=>1000,53468=>1000,53469=>1000,53470=>1000,53471=>1000,53472=>1000,53473=>1000,53474=>1000,53475=>1000,53476=>1000,53477=>1000,53478=>1000,53479=>1000,53480=>1000,53481=>1000,53482=>1000,53483=>1000,53484=>1000,53485=>1000,53486=>1000,53487=>1000,53488=>1000,53489=>1000,53490=>1000,53491=>1000,53492=>1000,53493=>1000,53494=>1000,53495=>1000,53496=>1000,53497=>1000,53498=>1000,53499=>1000,53500=>1000,53501=>1000,53502=>1000,53503=>1000,53504=>1000,53505=>1000,53506=>1000,53507=>1000,53508=>1000,53509=>1000,53510=>1000,53511=>1000,53512=>1000,53513=>1000,53514=>1000,53515=>1000,53516=>1000,53517=>1000,53518=>1000,53519=>1000,53520=>1000,53521=>1000,53522=>1000,53523=>1000,53524=>1000,53525=>1000,53526=>1000,53527=>1000,53528=>1000,53529=>1000,53530=>1000,53531=>1000,53532=>1000,53533=>1000,53534=>1000,53535=>1000,53536=>1000,53537=>1000,53538=>1000,53539=>1000,53540=>1000,53541=>1000,53542=>1000,53543=>1000,53544=>1000,53545=>1000,53546=>1000,53547=>1000,53548=>1000,53549=>1000,53550=>1000,53551=>1000,53552=>1000,53553=>1000,53554=>1000,53555=>1000,53556=>1000,53557=>1000,53558=>1000,53559=>1000,53560=>1000,53561=>1000,53562=>1000,53563=>1000,53564=>1000,53565=>1000,53566=>1000,53567=>1000,53568=>1000,53569=>1000,53570=>1000,53571=>1000,53572=>1000,53573=>1000,53574=>1000,53575=>1000,53576=>1000,53577=>1000,53578=>1000,53579=>1000,53580=>1000,53581=>1000,53582=>1000,53583=>1000,53584=>1000,53585=>1000,53586=>1000,53587=>1000,53588=>1000,53589=>1000,53590=>1000,53591=>1000,53592=>1000,53593=>1000,53594=>1000,53595=>1000,53596=>1000,53597=>1000,53598=>1000,53599=>1000,53600=>1000,53601=>1000,53602=>1000,53603=>1000,53604=>1000,53605=>1000,53606=>1000,53607=>1000,53608=>1000,53609=>1000,53610=>1000,53611=>1000,53612=>1000,53613=>1000,53614=>1000,53615=>1000,53616=>1000,53617=>1000,53618=>1000,53619=>1000,53620=>1000,53621=>1000,53622=>1000,53623=>1000,53624=>1000,53625=>1000,53626=>1000,53627=>1000,53628=>1000,53629=>1000,53630=>1000,53631=>1000,53632=>1000,53633=>1000,53634=>1000,53635=>1000,53636=>1000,53637=>1000,53638=>1000,53639=>1000,53640=>1000,53641=>1000,53642=>1000,53643=>1000,53644=>1000,53645=>1000,53646=>1000,53647=>1000,53648=>1000,53649=>1000,53650=>1000,53651=>1000,53652=>1000,53653=>1000,53654=>1000,53655=>1000,53656=>1000,53657=>1000,53658=>1000,53659=>1000,53660=>1000,53661=>1000,53662=>1000,53663=>1000,53664=>1000,53665=>1000,53666=>1000,53667=>1000,53668=>1000,53669=>1000,53670=>1000,53671=>1000,53672=>1000,53673=>1000,53674=>1000,53675=>1000,53676=>1000,53677=>1000,53678=>1000,53679=>1000,53680=>1000,53681=>1000,53682=>1000,53683=>1000,53684=>1000,53685=>1000,53686=>1000,53687=>1000,53688=>1000,53689=>1000,53690=>1000,53691=>1000,53692=>1000,53693=>1000,53694=>1000,53695=>1000,53696=>1000,53697=>1000,53698=>1000,53699=>1000,53700=>1000,53701=>1000,53702=>1000,53703=>1000,53704=>1000,53705=>1000,53706=>1000,53707=>1000,53708=>1000,53709=>1000,53710=>1000,53711=>1000,53712=>1000,53713=>1000,53714=>1000,53715=>1000,53716=>1000,53717=>1000,53718=>1000,53719=>1000,53720=>1000,53721=>1000,53722=>1000,53723=>1000,53724=>1000,53725=>1000,53726=>1000,53727=>1000,53728=>1000,53729=>1000,53730=>1000,53731=>1000,53732=>1000,53733=>1000,53734=>1000,53735=>1000,53736=>1000,53737=>1000,53738=>1000,53739=>1000,53740=>1000,53741=>1000,53742=>1000,53743=>1000,53744=>1000,53745=>1000,53746=>1000,53747=>1000,53748=>1000,53749=>1000,53750=>1000,53751=>1000,53752=>1000,53753=>1000,53754=>1000,53755=>1000,53756=>1000,53757=>1000,53758=>1000,53759=>1000,53760=>1000,53761=>1000,53762=>1000,53763=>1000,53764=>1000,53765=>1000,53766=>1000,53767=>1000,53768=>1000,53769=>1000,53770=>1000,53771=>1000,53772=>1000,53773=>1000,53774=>1000,53775=>1000,53776=>1000,53777=>1000,53778=>1000,53779=>1000,53780=>1000,53781=>1000,53782=>1000,53783=>1000,53784=>1000,53785=>1000,53786=>1000,53787=>1000,53788=>1000,53789=>1000,53790=>1000,53791=>1000,53792=>1000,53793=>1000,53794=>1000,53795=>1000,53796=>1000,53797=>1000,53798=>1000,53799=>1000,53800=>1000,53801=>1000,53802=>1000,53803=>1000,53804=>1000,53805=>1000,53806=>1000,53807=>1000,53808=>1000,53809=>1000,53810=>1000,53811=>1000,53812=>1000,53813=>1000,53814=>1000,53815=>1000,53816=>1000,53817=>1000,53818=>1000,53819=>1000,53820=>1000,53821=>1000,53822=>1000,53823=>1000,53824=>1000,53825=>1000,53826=>1000,53827=>1000,53828=>1000,53829=>1000,53830=>1000,53831=>1000,53832=>1000,53833=>1000,53834=>1000,53835=>1000,53836=>1000,53837=>1000,53838=>1000,53839=>1000,53840=>1000,53841=>1000,53842=>1000,53843=>1000,53844=>1000,53845=>1000,53846=>1000,53847=>1000,53848=>1000,53849=>1000,53850=>1000,53851=>1000,53852=>1000,53853=>1000,53854=>1000,53855=>1000,53856=>1000,53857=>1000,53858=>1000,53859=>1000,53860=>1000,53861=>1000,53862=>1000,53863=>1000,53864=>1000,53865=>1000,53866=>1000,53867=>1000,53868=>1000,53869=>1000,53870=>1000,53871=>1000,53872=>1000,53873=>1000,53874=>1000,53875=>1000,53876=>1000,53877=>1000,53878=>1000,53879=>1000,53880=>1000,53881=>1000,53882=>1000,53883=>1000,53884=>1000,53885=>1000,53886=>1000,53887=>1000,53888=>1000,53889=>1000,53890=>1000,53891=>1000,53892=>1000,53893=>1000,53894=>1000,53895=>1000,53896=>1000,53897=>1000,53898=>1000,53899=>1000,53900=>1000,53901=>1000,53902=>1000,53903=>1000,53904=>1000,53905=>1000,53906=>1000,53907=>1000,53908=>1000,53909=>1000,53910=>1000,53911=>1000,53912=>1000,53913=>1000,53914=>1000,53915=>1000,53916=>1000,53917=>1000,53918=>1000,53919=>1000,53920=>1000,53921=>1000,53922=>1000,53923=>1000,53924=>1000,53925=>1000,53926=>1000,53927=>1000,53928=>1000,53929=>1000,53930=>1000,53931=>1000,53932=>1000,53933=>1000,53934=>1000,53935=>1000,53936=>1000,53937=>1000,53938=>1000,53939=>1000,53940=>1000,53941=>1000,53942=>1000,53943=>1000,53944=>1000,53945=>1000,53946=>1000,53947=>1000,53948=>1000,53949=>1000,53950=>1000,53951=>1000,53952=>1000,53953=>1000,53954=>1000,53955=>1000,53956=>1000,53957=>1000,53958=>1000,53959=>1000,53960=>1000,53961=>1000,53962=>1000,53963=>1000,53964=>1000,53965=>1000,53966=>1000,53967=>1000,53968=>1000,53969=>1000,53970=>1000,53971=>1000,53972=>1000,53973=>1000,53974=>1000,53975=>1000,53976=>1000,53977=>1000,53978=>1000,53979=>1000,53980=>1000,53981=>1000,53982=>1000,53983=>1000,53984=>1000,53985=>1000,53986=>1000,53987=>1000,53988=>1000,53989=>1000,53990=>1000,53991=>1000,53992=>1000,53993=>1000,53994=>1000,53995=>1000,53996=>1000,53997=>1000,53998=>1000,53999=>1000,54000=>1000,54001=>1000,54002=>1000,54003=>1000,54004=>1000,54005=>1000,54006=>1000,54007=>1000,54008=>1000,54009=>1000,54010=>1000,54011=>1000,54012=>1000,54013=>1000,54014=>1000,54015=>1000,54016=>1000,54017=>1000,54018=>1000,54019=>1000,54020=>1000,54021=>1000,54022=>1000,54023=>1000,54024=>1000,54025=>1000,54026=>1000,54027=>1000,54028=>1000,54029=>1000,54030=>1000,54031=>1000,54032=>1000,54033=>1000,54034=>1000,54035=>1000,54036=>1000,54037=>1000,54038=>1000,54039=>1000,54040=>1000,54041=>1000,54042=>1000,54043=>1000,54044=>1000,54045=>1000,54046=>1000,54047=>1000,54048=>1000,54049=>1000,54050=>1000,54051=>1000,54052=>1000,54053=>1000,54054=>1000,54055=>1000,54056=>1000,54057=>1000,54058=>1000,54059=>1000,54060=>1000,54061=>1000,54062=>1000,54063=>1000,54064=>1000,54065=>1000,54066=>1000,54067=>1000,54068=>1000,54069=>1000,54070=>1000,54071=>1000,54072=>1000,54073=>1000,54074=>1000,54075=>1000,54076=>1000,54077=>1000,54078=>1000,54079=>1000,54080=>1000,54081=>1000,54082=>1000,54083=>1000,54084=>1000,54085=>1000,54086=>1000,54087=>1000,54088=>1000,54089=>1000,54090=>1000,54091=>1000,54092=>1000,54093=>1000,54094=>1000,54095=>1000,54096=>1000,54097=>1000,54098=>1000,54099=>1000,54100=>1000,54101=>1000,54102=>1000,54103=>1000,54104=>1000,54105=>1000,54106=>1000,54107=>1000,54108=>1000,54109=>1000,54110=>1000,54111=>1000,54112=>1000,54113=>1000,54114=>1000,54115=>1000,54116=>1000,54117=>1000,54118=>1000,54119=>1000,54120=>1000,54121=>1000,54122=>1000,54123=>1000,54124=>1000,54125=>1000,54126=>1000,54127=>1000,54128=>1000,54129=>1000,54130=>1000,54131=>1000,54132=>1000,54133=>1000,54134=>1000,54135=>1000,54136=>1000,54137=>1000,54138=>1000,54139=>1000,54140=>1000,54141=>1000,54142=>1000,54143=>1000,54144=>1000,54145=>1000,54146=>1000,54147=>1000,54148=>1000,54149=>1000,54150=>1000,54151=>1000,54152=>1000,54153=>1000,54154=>1000,54155=>1000,54156=>1000,54157=>1000,54158=>1000,54159=>1000,54160=>1000,54161=>1000,54162=>1000,54163=>1000,54164=>1000,54165=>1000,54166=>1000,54167=>1000,54168=>1000,54169=>1000,54170=>1000,54171=>1000,54172=>1000,54173=>1000,54174=>1000,54175=>1000,54176=>1000,54177=>1000,54178=>1000,54179=>1000,54180=>1000,54181=>1000,54182=>1000,54183=>1000,54184=>1000,54185=>1000,54186=>1000,54187=>1000,54188=>1000,54189=>1000,54190=>1000,54191=>1000,54192=>1000,54193=>1000,54194=>1000,54195=>1000,54196=>1000,54197=>1000,54198=>1000,54199=>1000,54200=>1000,54201=>1000,54202=>1000,54203=>1000,54204=>1000,54205=>1000,54206=>1000,54207=>1000,54208=>1000,54209=>1000,54210=>1000,54211=>1000,54212=>1000,54213=>1000,54214=>1000,54215=>1000,54216=>1000,54217=>1000,54218=>1000,54219=>1000,54220=>1000,54221=>1000,54222=>1000,54223=>1000,54224=>1000,54225=>1000,54226=>1000,54227=>1000,54228=>1000,54229=>1000,54230=>1000,54231=>1000,54232=>1000,54233=>1000,54234=>1000,54235=>1000,54236=>1000,54237=>1000,54238=>1000,54239=>1000,54240=>1000,54241=>1000,54242=>1000,54243=>1000,54244=>1000,54245=>1000,54246=>1000,54247=>1000,54248=>1000,54249=>1000,54250=>1000,54251=>1000,54252=>1000,54253=>1000,54254=>1000,54255=>1000,54256=>1000,54257=>1000,54258=>1000,54259=>1000,54260=>1000,54261=>1000,54262=>1000,54263=>1000,54264=>1000,54265=>1000,54266=>1000,54267=>1000,54268=>1000,54269=>1000,54270=>1000,54271=>1000,54272=>1000,54273=>1000,54274=>1000,54275=>1000,54276=>1000,54277=>1000,54278=>1000,54279=>1000,54280=>1000,54281=>1000,54282=>1000,54283=>1000,54284=>1000,54285=>1000,54286=>1000,54287=>1000,54288=>1000,54289=>1000,54290=>1000,54291=>1000,54292=>1000,54293=>1000,54294=>1000,54295=>1000,54296=>1000,54297=>1000,54298=>1000,54299=>1000,54300=>1000,54301=>1000,54302=>1000,54303=>1000,54304=>1000,54305=>1000,54306=>1000,54307=>1000,54308=>1000,54309=>1000,54310=>1000,54311=>1000,54312=>1000,54313=>1000,54314=>1000,54315=>1000,54316=>1000,54317=>1000,54318=>1000,54319=>1000,54320=>1000,54321=>1000,54322=>1000,54323=>1000,54324=>1000,54325=>1000,54326=>1000,54327=>1000,54328=>1000,54329=>1000,54330=>1000,54331=>1000,54332=>1000,54333=>1000,54334=>1000,54335=>1000,54336=>1000,54337=>1000,54338=>1000,54339=>1000,54340=>1000,54341=>1000,54342=>1000,54343=>1000,54344=>1000,54345=>1000,54346=>1000,54347=>1000,54348=>1000,54349=>1000,54350=>1000,54351=>1000,54352=>1000,54353=>1000,54354=>1000,54355=>1000,54356=>1000,54357=>1000,54358=>1000,54359=>1000,54360=>1000,54361=>1000,54362=>1000,54363=>1000,54364=>1000,54365=>1000,54366=>1000,54367=>1000,54368=>1000,54369=>1000,54370=>1000,54371=>1000,54372=>1000,54373=>1000,54374=>1000,54375=>1000,54376=>1000,54377=>1000,54378=>1000,54379=>1000,54380=>1000,54381=>1000,54382=>1000,54383=>1000,54384=>1000,54385=>1000,54386=>1000,54387=>1000,54388=>1000,54389=>1000,54390=>1000,54391=>1000,54392=>1000,54393=>1000,54394=>1000,54395=>1000,54396=>1000,54397=>1000,54398=>1000,54399=>1000,54400=>1000,54401=>1000,54402=>1000,54403=>1000,54404=>1000,54405=>1000,54406=>1000,54407=>1000,54408=>1000,54409=>1000,54410=>1000,54411=>1000,54412=>1000,54413=>1000,54414=>1000,54415=>1000,54416=>1000,54417=>1000,54418=>1000,54419=>1000,54420=>1000,54421=>1000,54422=>1000,54423=>1000,54424=>1000,54425=>1000,54426=>1000,54427=>1000,54428=>1000,54429=>1000,54430=>1000,54431=>1000,54432=>1000,54433=>1000,54434=>1000,54435=>1000,54436=>1000,54437=>1000,54438=>1000,54439=>1000,54440=>1000,54441=>1000,54442=>1000,54443=>1000,54444=>1000,54445=>1000,54446=>1000,54447=>1000,54448=>1000,54449=>1000,54450=>1000,54451=>1000,54452=>1000,54453=>1000,54454=>1000,54455=>1000,54456=>1000,54457=>1000,54458=>1000,54459=>1000,54460=>1000,54461=>1000,54462=>1000,54463=>1000,54464=>1000,54465=>1000,54466=>1000,54467=>1000,54468=>1000,54469=>1000,54470=>1000,54471=>1000,54472=>1000,54473=>1000,54474=>1000,54475=>1000,54476=>1000,54477=>1000,54478=>1000,54479=>1000,54480=>1000,54481=>1000,54482=>1000,54483=>1000,54484=>1000,54485=>1000,54486=>1000,54487=>1000,54488=>1000,54489=>1000,54490=>1000,54491=>1000,54492=>1000,54493=>1000,54494=>1000,54495=>1000,54496=>1000,54497=>1000,54498=>1000,54499=>1000,54500=>1000,54501=>1000,54502=>1000,54503=>1000,54504=>1000,54505=>1000,54506=>1000,54507=>1000,54508=>1000,54509=>1000,54510=>1000,54511=>1000,54512=>1000,54513=>1000,54514=>1000,54515=>1000,54516=>1000,54517=>1000,54518=>1000,54519=>1000,54520=>1000,54521=>1000,54522=>1000,54523=>1000,54524=>1000,54525=>1000,54526=>1000,54527=>1000,54528=>1000,54529=>1000,54530=>1000,54531=>1000,54532=>1000,54533=>1000,54534=>1000,54535=>1000,54536=>1000,54537=>1000,54538=>1000,54539=>1000,54540=>1000,54541=>1000,54542=>1000,54543=>1000,54544=>1000,54545=>1000,54546=>1000,54547=>1000,54548=>1000,54549=>1000,54550=>1000,54551=>1000,54552=>1000,54553=>1000,54554=>1000,54555=>1000,54556=>1000,54557=>1000,54558=>1000,54559=>1000,54560=>1000,54561=>1000,54562=>1000,54563=>1000,54564=>1000,54565=>1000,54566=>1000,54567=>1000,54568=>1000,54569=>1000,54570=>1000,54571=>1000,54572=>1000,54573=>1000,54574=>1000,54575=>1000,54576=>1000,54577=>1000,54578=>1000,54579=>1000,54580=>1000,54581=>1000,54582=>1000,54583=>1000,54584=>1000,54585=>1000,54586=>1000,54587=>1000,54588=>1000,54589=>1000,54590=>1000,54591=>1000,54592=>1000,54593=>1000,54594=>1000,54595=>1000,54596=>1000,54597=>1000,54598=>1000,54599=>1000,54600=>1000,54601=>1000,54602=>1000,54603=>1000,54604=>1000,54605=>1000,54606=>1000,54607=>1000,54608=>1000,54609=>1000,54610=>1000,54611=>1000,54612=>1000,54613=>1000,54614=>1000,54615=>1000,54616=>1000,54617=>1000,54618=>1000,54619=>1000,54620=>1000,54621=>1000,54622=>1000,54623=>1000,54624=>1000,54625=>1000,54626=>1000,54627=>1000,54628=>1000,54629=>1000,54630=>1000,54631=>1000,54632=>1000,54633=>1000,54634=>1000,54635=>1000,54636=>1000,54637=>1000,54638=>1000,54639=>1000,54640=>1000,54641=>1000,54642=>1000,54643=>1000,54644=>1000,54645=>1000,54646=>1000,54647=>1000,54648=>1000,54649=>1000,54650=>1000,54651=>1000,54652=>1000,54653=>1000,54654=>1000,54655=>1000,54656=>1000,54657=>1000,54658=>1000,54659=>1000,54660=>1000,54661=>1000,54662=>1000,54663=>1000,54664=>1000,54665=>1000,54666=>1000,54667=>1000,54668=>1000,54669=>1000,54670=>1000,54671=>1000,54672=>1000,54673=>1000,54674=>1000,54675=>1000,54676=>1000,54677=>1000,54678=>1000,54679=>1000,54680=>1000,54681=>1000,54682=>1000,54683=>1000,54684=>1000,54685=>1000,54686=>1000,54687=>1000,54688=>1000,54689=>1000,54690=>1000,54691=>1000,54692=>1000,54693=>1000,54694=>1000,54695=>1000,54696=>1000,54697=>1000,54698=>1000,54699=>1000,54700=>1000,54701=>1000,54702=>1000,54703=>1000,54704=>1000,54705=>1000,54706=>1000,54707=>1000,54708=>1000,54709=>1000,54710=>1000,54711=>1000,54712=>1000,54713=>1000,54714=>1000,54715=>1000,54716=>1000,54717=>1000,54718=>1000,54719=>1000,54720=>1000,54721=>1000,54722=>1000,54723=>1000,54724=>1000,54725=>1000,54726=>1000,54727=>1000,54728=>1000,54729=>1000,54730=>1000,54731=>1000,54732=>1000,54733=>1000,54734=>1000,54735=>1000,54736=>1000,54737=>1000,54738=>1000,54739=>1000,54740=>1000,54741=>1000,54742=>1000,54743=>1000,54744=>1000,54745=>1000,54746=>1000,54747=>1000,54748=>1000,54749=>1000,54750=>1000,54751=>1000,54752=>1000,54753=>1000,54754=>1000,54755=>1000,54756=>1000,54757=>1000,54758=>1000,54759=>1000,54760=>1000,54761=>1000,54762=>1000,54763=>1000,54764=>1000,54765=>1000,54766=>1000,54767=>1000,54768=>1000,54769=>1000,54770=>1000,54771=>1000,54772=>1000,54773=>1000,54774=>1000,54775=>1000,54776=>1000,54777=>1000,54778=>1000,54779=>1000,54780=>1000,54781=>1000,54782=>1000,54783=>1000,54784=>1000,54785=>1000,54786=>1000,54787=>1000,54788=>1000,54789=>1000,54790=>1000,54791=>1000,54792=>1000,54793=>1000,54794=>1000,54795=>1000,54796=>1000,54797=>1000,54798=>1000,54799=>1000,54800=>1000,54801=>1000,54802=>1000,54803=>1000,54804=>1000,54805=>1000,54806=>1000,54807=>1000,54808=>1000,54809=>1000,54810=>1000,54811=>1000,54812=>1000,54813=>1000,54814=>1000,54815=>1000,54816=>1000,54817=>1000,54818=>1000,54819=>1000,54820=>1000,54821=>1000,54822=>1000,54823=>1000,54824=>1000,54825=>1000,54826=>1000,54827=>1000,54828=>1000,54829=>1000,54830=>1000,54831=>1000,54832=>1000,54833=>1000,54834=>1000,54835=>1000,54836=>1000,54837=>1000,54838=>1000,54839=>1000,54840=>1000,54841=>1000,54842=>1000,54843=>1000,54844=>1000,54845=>1000,54846=>1000,54847=>1000,54848=>1000,54849=>1000,54850=>1000,54851=>1000,54852=>1000,54853=>1000,54854=>1000,54855=>1000,54856=>1000,54857=>1000,54858=>1000,54859=>1000,54860=>1000,54861=>1000,54862=>1000,54863=>1000,54864=>1000,54865=>1000,54866=>1000,54867=>1000,54868=>1000,54869=>1000,54870=>1000,54871=>1000,54872=>1000,54873=>1000,54874=>1000,54875=>1000,54876=>1000,54877=>1000,54878=>1000,54879=>1000,54880=>1000,54881=>1000,54882=>1000,54883=>1000,54884=>1000,54885=>1000,54886=>1000,54887=>1000,54888=>1000,54889=>1000,54890=>1000,54891=>1000,54892=>1000,54893=>1000,54894=>1000,54895=>1000,54896=>1000,54897=>1000,54898=>1000,54899=>1000,54900=>1000,54901=>1000,54902=>1000,54903=>1000,54904=>1000,54905=>1000,54906=>1000,54907=>1000,54908=>1000,54909=>1000,54910=>1000,54911=>1000,54912=>1000,54913=>1000,54914=>1000,54915=>1000,54916=>1000,54917=>1000,54918=>1000,54919=>1000,54920=>1000,54921=>1000,54922=>1000,54923=>1000,54924=>1000,54925=>1000,54926=>1000,54927=>1000,54928=>1000,54929=>1000,54930=>1000,54931=>1000,54932=>1000,54933=>1000,54934=>1000,54935=>1000,54936=>1000,54937=>1000,54938=>1000,54939=>1000,54940=>1000,54941=>1000,54942=>1000,54943=>1000,54944=>1000,54945=>1000,54946=>1000,54947=>1000,54948=>1000,54949=>1000,54950=>1000,54951=>1000,54952=>1000,54953=>1000,54954=>1000,54955=>1000,54956=>1000,54957=>1000,54958=>1000,54959=>1000,54960=>1000,54961=>1000,54962=>1000,54963=>1000,54964=>1000,54965=>1000,54966=>1000,54967=>1000,54968=>1000,54969=>1000,54970=>1000,54971=>1000,54972=>1000,54973=>1000,54974=>1000,54975=>1000,54976=>1000,54977=>1000,54978=>1000,54979=>1000,54980=>1000,54981=>1000,54982=>1000,54983=>1000,54984=>1000,54985=>1000,54986=>1000,54987=>1000,54988=>1000,54989=>1000,54990=>1000,54991=>1000,54992=>1000,54993=>1000,54994=>1000,54995=>1000,54996=>1000,54997=>1000,54998=>1000,54999=>1000,55000=>1000,55001=>1000,55002=>1000,55003=>1000,55004=>1000,55005=>1000,55006=>1000,55007=>1000,55008=>1000,55009=>1000,55010=>1000,55011=>1000,55012=>1000,55013=>1000,55014=>1000,55015=>1000,55016=>1000,55017=>1000,55018=>1000,55019=>1000,55020=>1000,55021=>1000,55022=>1000,55023=>1000,55024=>1000,55025=>1000,55026=>1000,55027=>1000,55028=>1000,55029=>1000,55030=>1000,55031=>1000,55032=>1000,55033=>1000,55034=>1000,55035=>1000,55036=>1000,55037=>1000,55038=>1000,55039=>1000,55040=>1000,55041=>1000,55042=>1000,55043=>1000,55044=>1000,55045=>1000,55046=>1000,55047=>1000,55048=>1000,55049=>1000,55050=>1000,55051=>1000,55052=>1000,55053=>1000,55054=>1000,55055=>1000,55056=>1000,55057=>1000,55058=>1000,55059=>1000,55060=>1000,55061=>1000,55062=>1000,55063=>1000,55064=>1000,55065=>1000,55066=>1000,55067=>1000,55068=>1000,55069=>1000,55070=>1000,55071=>1000,55072=>1000,55073=>1000,55074=>1000,55075=>1000,55076=>1000,55077=>1000,55078=>1000,55079=>1000,55080=>1000,55081=>1000,55082=>1000,55083=>1000,55084=>1000,55085=>1000,55086=>1000,55087=>1000,55088=>1000,55089=>1000,55090=>1000,55091=>1000,55092=>1000,55093=>1000,55094=>1000,55095=>1000,55096=>1000,55097=>1000,55098=>1000,55099=>1000,55100=>1000,55101=>1000,55102=>1000,55103=>1000,55104=>1000,55105=>1000,55106=>1000,55107=>1000,55108=>1000,55109=>1000,55110=>1000,55111=>1000,55112=>1000,55113=>1000,55114=>1000,55115=>1000,55116=>1000,55117=>1000,55118=>1000,55119=>1000,55120=>1000,55121=>1000,55122=>1000,55123=>1000,55124=>1000,55125=>1000,55126=>1000,55127=>1000,55128=>1000,55129=>1000,55130=>1000,55131=>1000,55132=>1000,55133=>1000,55134=>1000,55135=>1000,55136=>1000,55137=>1000,55138=>1000,55139=>1000,55140=>1000,55141=>1000,55142=>1000,55143=>1000,55144=>1000,55145=>1000,55146=>1000,55147=>1000,55148=>1000,55149=>1000,55150=>1000,55151=>1000,55152=>1000,55153=>1000,55154=>1000,55155=>1000,55156=>1000,55157=>1000,55158=>1000,55159=>1000,55160=>1000,55161=>1000,55162=>1000,55163=>1000,55164=>1000,55165=>1000,55166=>1000,55167=>1000,55168=>1000,55169=>1000,55170=>1000,55171=>1000,55172=>1000,55173=>1000,55174=>1000,55175=>1000,55176=>1000,55177=>1000,55178=>1000,55179=>1000,55180=>1000,55181=>1000,55182=>1000,55183=>1000,55184=>1000,55185=>1000,55186=>1000,55187=>1000,55188=>1000,55189=>1000,55190=>1000,55191=>1000,55192=>1000,55193=>1000,55194=>1000,55195=>1000,55196=>1000,55197=>1000,55198=>1000,55199=>1000,55200=>1000,55201=>1000,55202=>1000,55203=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500,63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849,63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000,63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000,63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000,63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000,63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000,63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000,63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000,63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000,63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000,63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000,63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000,63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000,63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000,63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000,63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000,63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000,63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000,64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000,64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000,64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750,64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730,64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326,64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316,64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788,64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903,64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658,64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436,64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942,64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706,64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466,64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783,64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731,64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932,64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429,64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227,64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073,64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932,64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421,64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884,64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274,64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884,64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911,64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179,64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224,64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806,64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911,64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082,64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574,64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411,64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441,64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254,64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273,64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046,64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944,64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759,64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757,64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686,64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686,64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080,64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130,65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000,65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000,65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200,65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300,65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273,65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243,65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658,65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194,65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843,65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903,65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640,65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803,65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000,65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000,65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000,65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000,65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000,65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000,65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500,65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500,65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500,65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500,65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500,65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500,65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500,65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000,65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,65535=>1000); +// --- EOF --- diff --git a/tcpdf/fonts/cid0kr.php b/tcpdf/fonts/cid0kr.php new file mode 100644 index 0000000..8dbd837 --- /dev/null +++ b/tcpdf/fonts/cid0kr.php @@ -0,0 +1,17 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='cidfont0'; +$name='cid0kr'; +$up=-100; +$ut=50; +$dw=1000; +$diff=''; +$originalsize=23275812; +// Korean +$enc='UniKS-UTF16-H'; +$cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'Korea1','Supplement'=>0); +include(dirname(__FILE__).'/uni2cid_ak12.php'); +$desc=array('Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'Ascent'=>1069,'Descent'=>-271,'Leading'=>0,'CapHeight'=>716,'XHeight'=>518,'StemV'=>34,'StemH'=>15,'AvgWidth'=>441,'MaxWidth'=>2259,'MissingWidth'=>1000); +$cbbox=array(0=>array(125,0,875,750),33=>array(85,0,194,716),34=>array(41,462,313,716),35=>array(11,-12,545,728),36=>array(38,-103,511,782),37=>array(73,-27,819,728),38=>array(43,-17,644,728),39=>array(45,462,145,716),40=>array(60,-210,297,728),41=>array(36,-210,273,728),42=>array(33,423,356,728),43=>array(55,116,529,590),44=>array(84,-141,190,100),45=>array(32,215,301,303),46=>array(89,0,189,100),47=>array(0,-24,278,716),48=>array(45,-12,511,719),49=>array(111,0,375,719),50=>array(31,0,505,719),51=>array(44,-12,513,719),52=>array(15,0,510,716),53=>array(42,-12,516,706),54=>array(42,-12,514,719),55=>array(48,0,511,706),56=>array(42,-12,513,719),57=>array(43,-12,513,719),58=>array(90,0,190,518),59=>array(84,-141,190,518),60=>array(55,111,529,595),61=>array(55,203,529,503),62=>array(55,111,529,595),63=>array(46,0,508,728),64=>array(56,-210,981,729),65=>array(-1,0,668,716),66=>array(74,0,615,716),67=>array(51,-12,683,728),68=>array(80,0,672,716),69=>array(79,0,614,716),70=>array(80,0,563,716),71=>array(52,-12,714,728),72=>array(80,0,642,716),73=>array(92,0,187,716),74=>array(27,-12,420,716),75=>array(73,0,665,716),76=>array(75,0,523,716),77=>array(76,0,757,716),78=>array(79,0,642,716),79=>array(47,-12,732,728),80=>array(77,0,623,716),81=>array(47,-56,745,728),82=>array(80,0,711,716),83=>array(45,-12,615,728),84=>array(22,0,589,716),85=>array(79,-12,642,716),86=>array(6,0,660,716),87=>array(12,0,933,716),88=>array(5,0,661,716),89=>array(5,0,661,716),90=>array(18,0,584,716),91=>array(68,-199,262,716),92=>array(0,-24,278,716),93=>array(16,-199,210,716),94=>array(26,325,443,716),95=>array(-6,-125,506,-75),96=>array(42,591,222,728),97=>array(38,-12,516,530),98=>array(67,-12,517,716),99=>array(39,-12,491,530),100=>array(36,-12,486,716),101=>array(39,-12,517,530),102=>array(8,0,311,728),103=>array(34,-210,491,530),104=>array(67,0,490,716),105=>array(67,0,155,716),106=>array(-45,-209,155,716),107=>array(66,0,496,716),108=>array(67,0,155,716),109=>array(65,0,769,530),110=>array(68,0,490,530),111=>array(35,-12,521,530),112=>array(68,-199,518,530),113=>array(38,-199,488,530),114=>array(64,0,346,530),115=>array(31,-12,461,530),116=>array(17,-7,269,700),117=>array(66,-12,487,518),118=>array(13,0,488,518),119=>array(5,0,717,518),120=>array(7,0,493,518),121=>array(16,-210,492,518),122=>array(20,0,479,518),123=>array(28,-210,310,728),124=>array(92,-199,168,716),125=>array(24,-210,306,728),126=>array(43,272,542,432),161=>array(110,-199,219,517),162=>array(55,-200,507,716),163=>array(15,-14,531,728),164=>array(38,115,518,594),165=>array(1,0,555,716),166=>array(92,-199,168,716),167=>array(42,-210,513,728),168=>array(31,611,302,711),169=>array(0,-9,737,728),170=>array(21,364,348,728),171=>array(69,35,487,481),172=>array(55,203,529,503),173=>array(32,215,301,303),174=>array(0,-9,737,728),175=>array(-6,793,506,843),176=>array(65,454,335,725),177=>array(55,0,529,611),178=>array(12,358,316,725),179=>array(16,349,315,725),180=>array(111,591,291,728),181=>array(67,-199,488,518),182=>array(-1,-199,539,716),183=>array(89,302,189,402),184=>array(52,-205,263,11),185=>array(52,358,232,725),186=>array(22,361,343,728),187=>array(69,35,487,481),188=>array(62,-25,789,732),189=>array(62,-25,806,732),190=>array(26,-25,789,732),191=>array(75,-209,537,519),192=>array(-1,0,668,900),193=>array(-1,0,668,900),194=>array(-1,0,668,900),195=>array(-1,0,668,886),196=>array(-1,0,668,881),197=>array(-1,0,668,920),198=>array(0,0,945,716),199=>array(51,-209,684,728),200=>array(79,0,614,900),201=>array(79,0,614,900),202=>array(79,0,614,900),203=>array(79,0,614,881),204=>array(15,0,195,900),205=>array(83,0,264,900),206=>array(-15,0,293,900),207=>array(3,0,274,881),208=>array(1,0,672,716),209=>array(79,0,642,884),210=>array(47,-12,732,900),211=>array(47,-12,732,900),212=>array(47,-12,732,900),213=>array(47,-12,732,884),214=>array(47,-12,732,881),215=>array(79,141,505,567),216=>array(41,-29,742,742),217=>array(79,-12,642,900),218=>array(79,-12,642,900),219=>array(79,-12,642,900),220=>array(79,-12,642,881),221=>array(5,0,661,900),222=>array(77,0,623,716),223=>array(72,-12,577,728),224=>array(38,-12,516,728),225=>array(38,-12,516,728),226=>array(38,-12,516,728),227=>array(38,-12,516,716),228=>array(38,-12,516,711),229=>array(38,-12,516,752),230=>array(34,-12,849,530),231=>array(39,-196,491,530),232=>array(39,-12,517,728),233=>array(39,-12,517,728),234=>array(39,-12,517,728),235=>array(39,-12,517,711),236=>array(13,0,193,728),237=>array(83,0,264,728),238=>array(-15,0,293,728),239=>array(5,0,276,711),240=>array(38,-12,517,716),241=>array(68,0,490,716),242=>array(35,-12,521,728),243=>array(35,-12,521,728),244=>array(35,-12,521,728),245=>array(35,-12,521,716),246=>array(35,-12,521,711),247=>array(55,146,529,560),248=>array(63,-39,549,550),249=>array(66,-12,487,728),250=>array(66,-12,487,728),251=>array(66,-12,487,728),252=>array(66,-12,487,711),253=>array(16,-210,492,728),254=>array(68,-199,518,716),255=>array(16,-210,492,711),256=>array(-1,0,668,833),257=>array(38,-12,516,697),258=>array(-1,0,668,888),259=>array(38,-12,516,722),260=>array(-1,-208,758,716),261=>array(38,-208,571,530),262=>array(51,-12,683,916),263=>array(39,-12,491,728),264=>array(51,-12,683,914),265=>array(39,-12,491,728),266=>array(51,-12,683,877),267=>array(39,-12,491,711),268=>array(51,-12,683,916),269=>array(39,-12,491,728),270=>array(80,0,672,916),271=>array(36,-12,625,716),272=>array(-1,0,672,716),273=>array(36,-12,551,716),274=>array(79,0,614,863),275=>array(39,-12,517,697),276=>array(79,0,614,902),277=>array(39,-12,517,722),278=>array(79,0,614,877),279=>array(39,-12,517,711),280=>array(79,-208,645,716),281=>array(39,-208,517,530),282=>array(79,0,614,916),283=>array(39,-12,517,728),284=>array(52,-12,714,914),285=>array(34,-210,491,728),286=>array(52,-12,714,904),287=>array(34,-210,491,722),288=>array(52,-12,714,877),289=>array(34,-210,491,711),290=>array(52,-210,714,728),291=>array(34,-210,491,775),292=>array(80,0,642,914),293=>array(67,0,490,914),294=>array(-1,0,722,716),295=>array(2,0,490,716),296=>array(-24,0,303,890),297=>array(-53,0,274,717),298=>array(-15,0,290,849),299=>array(-42,0,263,697),300=>array(-3,0,286,904),301=>array(-34,0,255,722),302=>array(91,-208,305,716),303=>array(45,-208,225,716),304=>array(92,0,187,877),305=>array(95,0,183,518),306=>array(92,-12,670,716),307=>array(67,-209,377,716),308=>array(27,-12,526,914),309=>array(-46,-209,263,728),310=>array(73,-210,665,716),311=>array(66,-210,496,716),312=>array(66,0,446,518),313=>array(75,0,523,916),314=>array(50,0,230,916),315=>array(75,-210,523,716),316=>array(58,-210,160,716),317=>array(-29,0,523,916),318=>array(-44,0,264,916),319=>array(75,0,523,716),320=>array(67,0,313,716),321=>array(0,0,521,716),322=>array(1,0,218,716),323=>array(79,0,642,916),324=>array(68,0,490,728),325=>array(79,-210,642,716),326=>array(68,-210,490,530),327=>array(79,0,642,916),328=>array(68,0,490,728),329=>array(-2,0,559,722),330=>array(81,-186,670,728),331=>array(68,-210,489,530),332=>array(47,-12,732,849),333=>array(35,-12,521,697),334=>array(47,-12,732,904),335=>array(35,-12,521,722),336=>array(47,-12,732,914),337=>array(35,-12,521,728),338=>array(63,-12,968,728),339=>array(38,-12,904,530),340=>array(80,0,711,914),341=>array(64,0,346,728),342=>array(80,-210,711,716),343=>array(54,-210,346,530),344=>array(80,0,711,916),345=>array(28,0,346,728),346=>array(45,-12,615,916),347=>array(31,-12,461,728),348=>array(45,-12,615,916),349=>array(31,-12,461,728),350=>array(45,-210,615,728),351=>array(31,-210,461,530),352=>array(45,-12,615,916),353=>array(31,-12,461,728),354=>array(22,-210,589,716),355=>array(17,-210,269,700),356=>array(22,0,589,916),357=>array(17,-7,406,716),358=>array(22,0,589,716),359=>array(17,-7,269,700),360=>array(79,-12,642,890),361=>array(66,-12,487,716),362=>array(79,-12,642,851),363=>array(66,-12,487,697),364=>array(79,-12,642,906),365=>array(66,-12,487,722),366=>array(79,-12,642,955),367=>array(66,-12,487,752),368=>array(79,-12,642,917),369=>array(66,-12,487,728),370=>array(79,-208,642,716),371=>array(66,-208,555,518),372=>array(12,0,933,916),373=>array(5,0,717,728),374=>array(5,0,661,916),375=>array(16,-210,492,728),376=>array(5,0,661,879),377=>array(18,0,584,916),378=>array(20,0,479,728),379=>array(18,0,584,877),380=>array(20,0,479,711),381=>array(18,0,584,916),382=>array(20,0,479,728),383=>array(67,0,292,728),384=>array(-14,-12,515,716),385=>array(0,0,688,716),386=>array(80,0,620,716),387=>array(65,-12,515,716),388=>array(67,-12,517,716),389=>array(67,-12,517,716),390=>array(39,-12,671,728),391=>array(51,-12,769,750),392=>array(39,-12,579,567),393=>array(1,0,672,716),394=>array(0,0,739,716),395=>array(35,0,575,716),396=>array(41,-12,491,716),397=>array(35,-198,522,530),398=>array(53,0,588,716),399=>array(45,-12,676,728),400=>array(42,-13,565,728),401=>array(-20,-154,563,716),402=>array(-14,-154,311,728),403=>array(52,-12,792,750),404=>array(0,-206,649,716),405=>array(67,-12,775,716),406=>array(67,-12,245,716),407=>array(0,0,322,716),408=>array(73,0,690,720),409=>array(66,0,496,728),410=>array(0,-12,322,716),411=>array(13,0,488,716),412=>array(65,-12,769,716),413=>array(-21,-154,642,716),414=>array(68,-199,490,530),415=>array(47,-12,732,728),416=>array(47,-12,776,768),417=>array(35,-12,555,606),418=>array(47,-12,950,728),419=>array(35,-209,715,530),420=>array(0,0,691,716),421=>array(68,-199,519,637),422=>array(80,-122,738,716),423=>array(52,-12,622,728),424=>array(39,-12,469,530),425=>array(47,0,554,716),426=>array(34,-154,405,734),427=>array(17,-151,269,700),428=>array(23,0,549,716),429=>array(17,-7,269,716),430=>array(22,-208,589,716),431=>array(79,-12,776,768),432=>array(66,-12,625,620),433=>array(67,-12,681,716),434=>array(6,0,620,728),435=>array(32,0,745,728),436=>array(16,-210,617,528),437=>array(18,0,584,716),438=>array(20,0,479,519),439=>array(40,-12,582,716),440=>array(46,-12,588,716),441=>array(42,-192,486,518),442=>array(36,-209,437,518),443=>array(31,0,505,728),444=>array(13,-12,516,716),445=>array(37,-12,486,518),446=>array(46,-10,508,716),447=>array(68,-199,498,529),448=>array(92,0,168,716),449=>array(92,0,372,716),450=>array(25,0,449,716),451=>array(85,0,194,716),452=>array(80,0,1303,896),453=>array(80,0,1202,728),454=>array(36,-12,1036,728),455=>array(75,-12,949,716),456=>array(75,-209,709,716),457=>array(67,-209,375,716),458=>array(79,-12,1141,716),459=>array(79,-209,875,716),460=>array(68,-209,709,716),461=>array(-1,0,668,900),462=>array(38,-12,516,728),463=>array(-17,0,292,900),464=>array(-18,0,291,728),465=>array(47,-12,732,900),466=>array(35,-12,521,728),467=>array(79,-12,642,900),468=>array(66,-12,487,728),469=>array(79,-12,642,1003),470=>array(66,-12,487,832),471=>array(79,-12,642,1068),472=>array(66,-12,487,896),473=>array(79,-12,642,1068),474=>array(66,-12,487,896),475=>array(79,-12,642,1068),476=>array(66,-12,487,896),477=>array(39,-11,517,530),478=>array(-1,0,668,1003),479=>array(38,-12,516,832),480=>array(-1,0,668,1003),481=>array(38,-12,516,832),482=>array(0,0,945,865),483=>array(34,-12,849,697),484=>array(52,-12,779,728),485=>array(34,-210,556,530),486=>array(52,-12,714,900),487=>array(34,-210,491,728),488=>array(73,0,665,900),489=>array(66,0,496,900),490=>array(47,-208,732,728),491=>array(33,-208,519,530),492=>array(47,-208,732,865),493=>array(33,-208,519,697),494=>array(48,6,492,898),495=>array(48,-192,492,728),496=>array(-48,-209,261,728),497=>array(80,0,1301,716),498=>array(80,0,1200,716),499=>array(36,-12,1034,716),500=>array(52,-12,714,900),501=>array(34,-210,491,728),506=>array(-1,0,668,1043),507=>array(38,-12,516,937),508=>array(0,0,945,898),509=>array(34,-12,849,728),510=>array(41,-29,742,898),511=>array(63,-39,549,728),512=>array(-1,0,668,894),513=>array(38,-12,516,728),514=>array(-1,0,668,888),515=>array(38,-12,516,722),516=>array(79,0,614,894),517=>array(39,-12,517,728),518=>array(79,0,614,888),519=>array(39,-12,517,722),520=>array(-55,0,291,894),521=>array(-53,0,292,728),522=>array(-3,0,286,888),523=>array(-5,0,284,722),524=>array(47,-12,732,894),525=>array(35,-12,521,728),526=>array(47,-12,732,888),527=>array(35,-12,521,722),528=>array(80,0,711,894),529=>array(14,0,359,728),530=>array(80,0,711,888),531=>array(38,0,346,722),532=>array(79,-12,642,894),533=>array(66,-12,487,728),534=>array(79,-12,642,888),535=>array(66,-12,487,722),592=>array(40,-12,518,530),593=>array(36,-12,486,530),594=>array(70,-12,520,530),595=>array(70,-12,520,716),596=>array(9,-12,461,530),597=>array(39,-91,482,530),598=>array(36,-210,611,716),599=>array(36,-12,611,716),600=>array(39,-12,522,530),601=>array(39,-12,517,530),602=>array(41,-12,772,530),603=>array(36,-12,450,530),604=>array(35,-12,449,530),605=>array(35,-12,701,530),606=>array(36,-12,483,530),607=>array(-51,-210,252,518),608=>array(34,-210,616,716),609=>array(34,-210,491,530),610=>array(36,-12,518,530),611=>array(13,-210,488,518),612=>array(13,-12,488,518),613=>array(66,-198,487,518),614=>array(67,0,490,716),615=>array(67,-210,490,716),616=>array(-2,0,244,716),617=>array(67,-12,280,518),618=>array(33,0,323,518),619=>array(7,0,349,716),620=>array(20,0,403,716),621=>array(67,-210,280,716),622=>array(67,-210,599,716),623=>array(64,-12,768,518),624=>array(64,-209,768,518),625=>array(65,-210,769,530),626=>array(-57,-210,490,530),627=>array(68,-210,615,530),628=>array(68,0,490,518),629=>array(35,-12,521,530),630=>array(36,-12,690,530),631=>array(36,-12,638,530),632=>array(36,-210,522,716),633=>array(-13,-12,269,518),634=>array(-13,-12,269,716),635=>array(-13,-210,394,518),636=>array(64,-198,346,530),637=>array(64,-210,346,530),638=>array(64,0,326,530),639=>array(-14,0,248,530),640=>array(64,0,518,518),641=>array(64,0,518,518),642=>array(31,-208,461,530),643=>array(-83,-210,299,716),644=>array(-53,-210,329,716),645=>array(-83,-210,299,716),646=>array(-125,-198,302,716),647=>array(9,-177,261,530),648=>array(17,-210,294,700),649=>array(20,-12,576,518),650=>array(36,-12,522,518),651=>array(66,-12,520,530),652=>array(13,0,488,518),653=>array(5,0,717,518),654=>array(8,0,484,728),655=>array(2,0,498,518),656=>array(20,-208,653,518),657=>array(20,-79,542,518),658=>array(22,-210,494,518),659=>array(26,-210,494,518),660=>array(16,0,428,728),661=>array(36,0,448,728),662=>array(16,-12,428,716),663=>array(39,-210,491,530),664=>array(36,-12,578,530),665=>array(74,0,496,518),666=>array(36,-12,483,530),667=>array(36,-12,582,616),668=>array(68,0,490,518),669=>array(-125,-198,248,716),670=>array(4,-198,434,518),671=>array(67,0,406,518),672=>array(36,-198,611,716),673=>array(16,0,428,728),674=>array(36,0,448,728),675=>array(36,-12,945,716),676=>array(36,-210,930,716),677=>array(36,-79,1008,716),678=>array(17,-12,650,700),679=>array(17,-210,540,728),680=>array(17,-91,700,700),688=>array(50,344,278,716),689=>array(50,344,278,716),690=>array(-10,235,103,716),691=>array(50,344,210,619),692=>array(-9,338,151,613),693=>array(-9,241,213,613),694=>array(50,344,292,613),695=>array(2,344,386,613),696=>array(8,235,274,613),697=>array(46,462,192,716),698=>array(46,462,342,716),699=>array(64,494,166,728),700=>array(56,482,158,716),701=>array(64,482,166,716),702=>array(44,497,178,716),703=>array(44,497,178,716),704=>array(9,428,230,720),705=>array(20,428,242,720),706=>array(57,423,264,675),707=>array(56,423,263,675),708=>array(34,445,286,652),709=>array(34,446,286,653),710=>array(12,591,321,728),711=>array(12,591,321,728),712=>array(66,506,126,716),713=>array(14,624,319,697),714=>array(111,591,291,728),715=>array(42,591,222,728),716=>array(66,-210,126,0),717=>array(14,-176,319,-113),718=>array(42,-210,222,-73),719=>array(111,-210,291,-73),720=>array(83,0,217,518),721=>array(83,382,217,518),722=>array(44,150,178,369),723=>array(44,150,178,369),724=>array(45,185,295,333),725=>array(45,185,295,333),726=>array(45,164,235,354),727=>array(65,254,297,300),728=>array(22,595,311,722),729=>array(121,611,211,711),730=>array(79,576,255,752),731=>array(89,-208,303,12),732=>array(3,605,330,716),733=>array(28,591,373,728),734=>array(20,195,329,389),736=>array(7,235,271,613),737=>array(50,344,103,716),738=>array(17,338,249,619),739=>array(4,344,271,613),740=>array(25,215,314,724),741=>array(22,0,280,716),742=>array(22,0,280,716),743=>array(22,0,280,716),744=>array(22,0,280,716),745=>array(22,0,280,716),768=>array(-368,591,-188,728),769=>array(-343,591,-163,728),770=>array(-432,591,-124,728),771=>array(-441,605,-114,716),772=>array(-430,624,-125,697),773=>array(-534,624,-22,674),774=>array(-422,595,-133,722),775=>array(-323,611,-233,711),776=>array(-414,611,-143,711),777=>array(-384,722,-172,895),778=>array(-366,574,-190,752),779=>array(-426,591,-81,728),780=>array(-432,591,-124,728),781=>array(-308,591,-248,801),782=>array(-383,591,-173,801),783=>array(-451,591,-105,728),784=>array(-422,595,-133,822),785=>array(-422,595,-133,722),786=>array(-333,591,-231,825),787=>array(-325,579,-223,813),788=>array(-333,579,-231,813),789=>array(7,482,109,716),790=>array(-368,-210,-188,-73),791=>array(-343,-210,-163,-73),792=>array(-337,-252,-219,-62),793=>array(-337,-252,-219,-62),794=>array(-392,591,-164,769),795=>array(-100,330,55,606),796=>array(-326,-210,-230,-40),797=>array(-403,-210,-153,-62),798=>array(-403,-210,-153,-62),799=>array(-373,-252,-183,-62),800=>array(-404,-165,-152,-119),801=>array(-397,-208,-158,20),802=>array(-272,-208,-33,20),803=>array(-323,-210,-233,-110),804=>array(-414,-210,-143,-110),805=>array(-366,-210,-190,-32),806=>array(-325,-210,-223,-46),807=>array(-381,-205,-169,11),808=>array(-326,-208,-112,12),809=>array(-308,-210,-248,-40),810=>array(-407,-190,-148,-77),811=>array(-414,-205,-142,-43),812=>array(-432,-210,-124,-73),813=>array(-432,-210,-124,-73),814=>array(-422,-200,-133,-73),815=>array(-422,-200,-133,-73),816=>array(-441,-185,-114,-72),817=>array(-430,-179,-125,-106),818=>array(-534,-125,-22,-75),819=>array(-534,-210,-22,-55),820=>array(-441,203,-114,316),821=>array(-430,223,-125,296),822=>array(-500,223,-56,296),823=>array(-458,84,-98,434),824=>array(-678,-24,-100,716),825=>array(-311,-210,-216,-40),826=>array(-407,-190,-148,-77),827=>array(-359,-210,-196,-47),828=>array(-414,-186,-142,-83),829=>array(-412,558,-144,790),830=>array(-333,595,-222,922),831=>array(-534,624,-22,779),832=>array(-368,722,-188,859),833=>array(-343,722,-163,859),834=>array(-441,604,-114,717),835=>array(-325,613,-223,847),836=>array(-456,585,-100,720),837=>array(-301,-210,-180,-60),864=>array(-1011,604,-101,716),865=>array(-1000,595,-112,722),884=>array(30,464,301,716),885=>array(30,-132,301,120),890=>array(80,-208,258,-42),894=>array(84,-141,190,518),900=>array(89,600,208,736),901=>array(-27,600,304,736),902=>array(-1,0,668,736),903=>array(89,303,189,403),904=>array(-43,0,651,736),905=>array(-43,0,679,736),906=>array(-43,0,224,736),908=>array(-6,-12,732,736),910=>array(-43,0,740,736),911=>array(-6,0,706,736),912=>array(-56,0,275,736),913=>array(-1,0,668,716),914=>array(74,0,615,716),915=>array(81,0,528,716),916=>array(6,0,675,716),917=>array(79,0,614,716),918=>array(18,0,584,716),919=>array(80,0,642,716),920=>array(47,-12,732,728),921=>array(92,0,187,716),922=>array(73,0,665,716),923=>array(5,0,659,716),924=>array(76,0,757,716),925=>array(79,0,642,716),926=>array(53,0,597,716),927=>array(47,-12,732,728),928=>array(80,0,642,716),929=>array(77,0,623,716),931=>array(47,0,554,716),932=>array(22,0,589,716),933=>array(5,0,661,716),934=>array(47,-26,761,737),935=>array(5,0,661,716),936=>array(46,0,759,716),937=>array(52,0,706,728),938=>array(3,0,274,860),939=>array(5,0,661,860),940=>array(35,-12,541,736),941=>array(29,-12,405,736),942=>array(68,-199,490,736),943=>array(67,0,188,736),944=>array(68,-12,483,736),945=>array(35,-12,541,530),946=>array(66,-199,528,728),947=>array(13,-199,488,518),948=>array(35,-12,522,716),949=>array(29,-12,405,530),950=>array(35,-210,433,716),951=>array(68,-199,490,530),952=>array(45,-12,511,728),953=>array(67,0,155,518),954=>array(65,0,499,518),955=>array(13,0,488,716),956=>array(66,-199,487,518),957=>array(13,0,488,518),958=>array(35,-210,420,728),959=>array(35,-12,521,530),960=>array(16,0,662,518),961=>array(66,-199,536,530),962=>array(35,-210,465,530),963=>array(35,-12,597,534),964=>array(16,0,366,518),965=>array(68,-12,483,518),966=>array(35,-199,614,530),967=>array(7,-199,515,518),968=>array(66,-199,662,518),969=>array(35,-12,731,518),970=>array(-25,0,246,711),971=>array(68,-12,483,711),972=>array(35,-12,521,736),973=>array(68,-12,483,736),974=>array(35,-12,731,736),976=>array(66,-12,528,728),977=>array(23,-12,595,728),978=>array(6,0,627,719),979=>array(-42,0,723,736),980=>array(6,0,627,861),981=>array(35,-199,609,716),982=>array(19,-12,746,518),986=>array(51,-210,671,728),988=>array(80,-209,529,716),990=>array(46,-209,524,728),992=>array(25,-12,645,728),994=>array(80,-209,800,716),995=>array(63,-209,767,518),996=>array(58,0,604,720),997=>array(46,-199,492,521),998=>array(80,-187,626,716),999=>array(25,-13,494,589),1000=>array(46,-12,511,728),1001=>array(48,-196,463,530),1002=>array(3,0,621,716),1003=>array(15,0,591,530),1004=>array(62,-12,596,747),1005=>array(35,-12,597,576),1006=>array(19,0,549,716),1007=>array(11,-196,423,606),1008=>array(20,-11,580,528),1009=>array(66,-209,536,530),1010=>array(39,-12,491,530),1011=>array(-45,-209,155,716),1025=>array(79,0,614,859),1026=>array(25,-11,826,716),1027=>array(80,0,543,869),1028=>array(47,-12,680,728),1029=>array(45,-12,615,728),1030=>array(92,0,187,716),1031=>array(1,0,272,859),1032=>array(27,-12,420,716),1033=>array(9,-11,1070,716),1034=>array(80,0,973,716),1035=>array(24,0,809,716),1036=>array(80,0,580,869),1038=>array(5,-9,633,881),1039=>array(80,-199,643,716),1040=>array(-1,0,668,716),1041=>array(80,0,620,716),1042=>array(74,0,615,716),1043=>array(80,0,543,716),1044=>array(1,-167,642,716),1045=>array(79,0,614,716),1046=>array(3,0,919,716),1047=>array(39,-13,562,728),1048=>array(79,0,643,716),1049=>array(79,0,643,881),1050=>array(80,0,580,717),1051=>array(9,-11,625,716),1052=>array(76,0,757,716),1053=>array(80,0,642,716),1054=>array(47,-12,732,728),1055=>array(80,0,643,716),1056=>array(77,0,623,716),1057=>array(51,-12,683,728),1058=>array(22,0,589,716),1059=>array(5,-9,633,716),1060=>array(40,0,720,716),1061=>array(5,0,661,716),1062=>array(78,-199,706,716),1063=>array(58,0,604,716),1064=>array(80,0,840,716),1065=>array(80,-199,904,716),1066=>array(0,0,757,716),1067=>array(80,0,801,716),1068=>array(80,0,620,716),1069=>array(38,-12,671,728),1070=>array(80,-12,960,728),1071=>array(11,0,642,716),1072=>array(38,-12,516,530),1073=>array(45,-12,532,732),1074=>array(66,0,492,518),1075=>array(66,0,364,518),1076=>array(0,-147,553,518),1077=>array(39,-12,517,530),1078=>array(-3,0,671,518),1079=>array(24,-12,423,530),1080=>array(66,0,493,518),1081=>array(66,0,493,716),1082=>array(66,0,446,518),1083=>array(11,-3,505,518),1084=>array(66,0,617,518),1085=>array(66,0,486,518),1086=>array(35,-12,521,530),1087=>array(67,0,476,518),1088=>array(68,-199,518,530),1089=>array(39,-12,491,530),1090=>array(18,0,439,518),1091=>array(16,-210,492,518),1092=>array(37,-199,788,716),1093=>array(7,0,493,518),1094=>array(66,-199,532,518),1095=>array(46,0,467,518),1096=>array(69,0,734,518),1097=>array(69,-199,792,518),1098=>array(0,0,589,518),1099=>array(66,0,646,518),1100=>array(66,0,492,518),1101=>array(24,-11,474,530),1102=>array(66,-11,709,530),1103=>array(16,0,475,518),1105=>array(39,-12,517,720),1106=>array(2,-209,490,716),1107=>array(66,0,364,720),1108=>array(37,-11,487,530),1109=>array(31,-12,461,530),1110=>array(67,0,155,716),1111=>array(4,0,275,720),1112=>array(-45,-209,155,716),1113=>array(11,-3,842,518),1114=>array(66,0,780,518),1115=>array(2,0,490,716),1116=>array(66,0,446,720),1118=>array(16,-210,492,716),1119=>array(67,-199,476,518),1120=>array(47,-12,929,730),1121=>array(35,-12,731,518),1122=>array(0,0,622,716),1123=>array(-2,0,491,716),1124=>array(92,-12,912,728),1125=>array(68,-11,671,530),1126=>array(-2,0,668,716),1127=>array(0,0,595,518),1128=>array(92,0,952,716),1129=>array(68,0,817,518),1130=>array(0,0,654,716),1131=>array(1,0,599,518),1132=>array(92,0,932,716),1133=>array(68,0,820,518),1134=>array(37,-209,562,898),1135=>array(28,-209,423,728),1136=>array(46,0,759,716),1137=>array(66,-199,662,518),1138=>array(47,-12,732,728),1139=>array(35,-11,521,530),1140=>array(6,0,674,716),1141=>array(13,0,497,518),1142=>array(6,0,674,898),1143=>array(13,0,497,728),1144=>array(47,-210,1268,728),1145=>array(35,-210,1049,530),1146=>array(47,-36,732,750),1147=>array(35,-24,521,542),1148=>array(47,-12,929,926),1149=>array(35,-12,731,758),1150=>array(47,-12,929,880),1151=>array(35,-12,731,711),1152=>array(51,-97,672,728),1153=>array(39,-143,482,530),1154=>array(55,0,631,716),1155=>array(2,621,332,758),1156=>array(4,613,380,774),1157=>array(2,621,332,758),1158=>array(2,621,332,758),1168=>array(80,0,412,883),1169=>array(66,0,321,666),1170=>array(0,0,543,716),1171=>array(-2,0,364,518),1172=>array(80,-185,622,716),1173=>array(67,-209,490,716),1174=>array(3,-199,919,716),1175=>array(-3,-199,671,518),1176=>array(39,-205,562,728),1177=>array(24,-205,423,530),1178=>array(80,-199,580,717),1179=>array(66,-199,446,518),1180=>array(80,0,580,717),1181=>array(66,0,446,518),1182=>array(0,0,580,717),1183=>array(-2,0,446,518),1184=>array(24,0,762,717),1185=>array(0,0,544,518),1186=>array(80,-199,707,716),1187=>array(66,-199,543,518),1188=>array(80,0,880,716),1189=>array(66,0,653,518),1190=>array(80,-174,704,716),1191=>array(67,-174,537,518),1192=>array(47,-154,732,728),1193=>array(35,-141,550,530),1194=>array(51,-208,684,728),1195=>array(39,-208,491,530),1196=>array(21,-199,589,716),1197=>array(18,-199,439,518),1198=>array(5,0,661,716),1199=>array(13,-199,488,518),1200=>array(5,0,661,716),1201=>array(13,-199,488,518),1202=>array(4,-199,660,716),1203=>array(7,-199,493,518),1204=>array(16,-199,882,716),1205=>array(18,-199,631,518),1206=>array(58,-199,670,716),1207=>array(46,-199,524,518),1208=>array(58,0,604,716),1209=>array(46,0,467,518),1210=>array(81,0,627,716),1211=>array(67,0,490,716),1212=>array(7,-12,784,728),1213=>array(7,-11,624,530),1214=>array(7,-208,784,728),1215=>array(7,-208,624,530),1216=>array(92,0,187,716),1217=>array(3,0,919,881),1218=>array(-3,0,671,716),1219=>array(80,-174,580,717),1220=>array(66,-174,445,519),1223=>array(80,-174,703,716),1224=>array(66,-174,547,518),1227=>array(58,-199,604,716),1228=>array(46,-199,467,518),1232=>array(-2,0,668,881),1233=>array(38,-12,516,716),1234=>array(-1,0,668,861),1235=>array(38,-12,516,721),1236=>array(0,0,945,716),1237=>array(34,-12,849,530),1238=>array(79,0,613,881),1239=>array(39,-12,517,716),1240=>array(45,-12,676,728),1241=>array(39,-11,517,530),1242=>array(45,-12,676,859),1243=>array(39,-11,517,719),1244=>array(3,0,919,859),1245=>array(-3,0,671,721),1246=>array(39,-13,562,861),1247=>array(24,-12,423,721),1248=>array(39,-13,562,716),1249=>array(24,-206,457,518),1250=>array(79,0,643,833),1251=>array(66,0,493,697),1252=>array(79,0,643,861),1253=>array(66,0,493,721),1254=>array(47,-12,732,861),1255=>array(35,-12,521,721),1256=>array(47,-12,732,728),1257=>array(35,-11,521,530),1258=>array(47,-12,732,861),1259=>array(35,-11,521,721),1262=>array(5,-9,633,833),1263=>array(16,-210,492,697),1264=>array(5,-9,633,861),1265=>array(16,-210,492,721),1266=>array(5,-9,633,898),1267=>array(16,-210,492,728),1268=>array(58,0,604,861),1269=>array(46,0,467,721),1272=>array(80,0,801,861),1273=>array(66,0,646,721),1329=>array(25,-9,618,678),1330=>array(90,-1,481,685),1331=>array(31,-1,563,684),1332=>array(34,-1,564,684),1333=>array(30,-11,468,677),1334=>array(56,-22,510,692),1335=>array(27,-185,407,671),1336=>array(89,-96,476,684),1337=>array(98,0,722,683),1338=>array(46,-11,613,678),1339=>array(24,-2,503,676),1340=>array(28,-185,357,672),1341=>array(24,-12,539,676),1342=>array(38,-11,675,676),1343=>array(32,-2,462,676),1344=>array(28,-61,410,690),1345=>array(31,-11,515,689),1346=>array(27,-96,559,683),1347=>array(63,0,487,708),1348=>array(26,-11,620,677),1349=>array(101,-10,631,684),1350=>array(36,-11,594,685),1351=>array(32,-11,602,684),1352=>array(90,-1,460,684),1353=>array(69,-19,489,689),1354=>array(78,-1,614,683),1355=>array(55,-23,508,690),1356=>array(86,-2,619,683),1357=>array(30,-12,462,675),1358=>array(37,-96,665,676),1359=>array(101,-11,501,683),1360=>array(87,-7,452,677),1361=>array(104,-15,498,680),1362=>array(23,-7,511,671),1363=>array(106,-6,608,672),1364=>array(35,-8,675,678),1365=>array(100,-16,547,679),1366=>array(76,-15,713,680),1369=>array(87,485,211,705),1370=>array(83,485,207,705),1371=>array(34,485,114,702),1372=>array(20,425,282,702),1373=>array(87,518,210,699),1374=>array(14,476,257,702),1375=>array(38,484,397,702),1377=>array(39,-8,552,315),1378=>array(52,-210,400,319),1379=>array(52,-210,402,319),1380=>array(49,-210,433,319),1381=>array(49,-8,391,613),1382=>array(48,-210,409,319),1383=>array(50,-122,393,613),1384=>array(52,-210,395,319),1385=>array(49,-210,437,319),1386=>array(40,-8,430,613),1387=>array(44,-210,394,613),1388=>array(37,-210,309,315),1389=>array(38,-210,482,613),1390=>array(45,-8,413,580),1391=>array(53,-210,391,613),1392=>array(45,0,398,613),1393=>array(51,-8,397,561),1394=>array(50,-210,401,319),1395=>array(8,-8,386,618),1396=>array(44,-8,404,618),1397=>array(6,-210,197,315),1398=>array(90,-9,394,618),1399=>array(37,-8,359,319),1400=>array(50,0,397,319),1401=>array(79,-210,318,376),1402=>array(39,-210,551,315),1403=>array(55,-210,411,319),1404=>array(29,0,420,319),1405=>array(49,-9,393,315),1406=>array(43,-210,393,613),1407=>array(42,-8,550,319),1408=>array(52,-210,399,319),1409=>array(49,-210,393,319),1410=>array(32,0,308,315),1411=>array(39,-210,550,613),1412=>array(47,0,337,618),1413=>array(52,-8,336,319),1414=>array(78,-210,541,610),1415=>array(49,-8,502,613),1417=>array(80,-21,197,335),1425=>array(97,-194,263,-63),1426=>array(37,568,323,664),1427=>array(112,569,249,789),1428=>array(147,568,213,728),1429=>array(106,568,262,728),1430=>array(104,-195,256,-43),1431=>array(133,568,227,662),1432=>array(82,568,278,684),1433=>array(0,568,152,720),1434=>array(229,-205,340,-43),1435=>array(104,-195,256,-43),1436=>array(104,568,256,720),1437=>array(208,568,360,720),1438=>array(108,568,360,750),1439=>array(12,568,348,716),1440=>array(200,568,348,716),1441=>array(58,568,303,716),1443=>array(92,-191,221,-62),1444=>array(117,-205,228,-43),1445=>array(104,-195,256,-43),1446=>array(54,-215,306,-33),1447=>array(117,-209,242,-35),1448=>array(104,568,256,720),1449=>array(12,568,160,716),1450=>array(97,-194,263,-63),1451=>array(117,568,228,730),1452=>array(92,580,221,709),1453=>array(208,-195,360,-43),1454=>array(0,568,196,684),1455=>array(125,568,235,678),1456=>array(147,-210,213,-50),1457=>array(53,-210,307,-50),1458=>array(69,-210,285,-50),1459=>array(69,-210,285,-50),1460=>array(147,-116,213,-50),1461=>array(100,-116,260,-50),1462=>array(100,-210,260,-50),1463=>array(119,-104,241,-62),1464=>array(119,-144,241,-62),1465=>array(147,568,213,634),1467=>array(53,-210,307,-50),1468=>array(147,231,213,297),1469=>array(159,-184,201,-62),1470=>array(24,430,342,518),1471=>array(119,580,241,622),1472=>array(72,-80,154,598),1473=>array(147,568,213,634),1474=>array(147,568,213,634),1475=>array(69,0,169,518),1476=>array(147,568,213,634),1488=>array(60,0,517,518),1489=>array(38,0,533,530),1490=>array(20,0,386,530),1491=>array(24,0,482,518),1492=>array(72,0,526,530),1493=>array(16,0,248,530),1494=>array(28,0,306,543),1495=>array(72,0,526,530),1496=>array(68,-12,532,530),1497=>array(16,258,248,530),1498=>array(20,-199,439,530),1499=>array(38,-12,469,530),1500=>array(33,-12,436,716),1501=>array(72,0,526,518),1502=>array(30,0,526,530),1503=>array(16,-199,248,530),1504=>array(38,0,270,530),1505=>array(25,-12,546,530),1506=>array(32,-82,503,518),1507=>array(45,-199,499,530),1508=>array(37,-12,511,530),1509=>array(37,-199,468,518),1510=>array(45,0,477,518),1511=>array(72,-199,535,518),1512=>array(20,0,439,530),1513=>array(72,-12,674,518),1514=>array(21,-13,565,530),1520=>array(16,0,522,530),1521=>array(16,0,522,530),1522=>array(16,258,522,530),1523=>array(45,398,221,641),1524=>array(45,398,417,641),1548=>array(90,-3,196,238),1563=>array(90,0,196,479),1567=>array(47,0,509,728),1569=>array(54,0,469,422),1570=>array(-23,0,270,862),1571=>array(46,0,188,933),1572=>array(-108,-210,408,761),1573=>array(46,-174,188,716),1574=>array(32,-121,679,453),1575=>array(79,0,164,716),1576=>array(62,-190,709,265),1577=>array(62,-6,452,633),1578=>array(62,-50,709,437),1579=>array(62,-50,709,539),1580=>array(52,-271,564,453),1581=>array(52,-271,564,453),1582=>array(52,-271,564,621),1583=>array(38,0,368,437),1584=>array(38,0,368,629),1585=>array(-74,-210,357,290),1586=>array(-74,-210,357,470),1587=>array(39,-228,1115,346),1588=>array(39,-228,1115,604),1589=>array(39,-228,1230,436),1590=>array(39,-228,1230,532),1591=>array(59,0,782,686),1592=>array(59,0,782,686),1593=>array(53,-271,565,492),1594=>array(53,-271,565,725),1600=>array(-1,0,280,95),1601=>array(62,0,895,773),1602=>array(34,-214,738,678),1603=>array(62,0,689,716),1604=>array(34,-121,594,716),1605=>array(58,-265,527,359),1606=>array(62,-121,630,456),1607=>array(62,-6,452,431),1608=>array(-108,-210,408,476),1609=>array(32,-121,679,453),1610=>array(32,-238,679,453),1611=>array(10,716,290,944),1612=>array(4,716,292,990),1613=>array(8,-255,288,-78),1614=>array(10,716,290,859),1615=>array(4,716,292,990),1616=>array(8,-170,288,-78),1617=>array(7,716,299,936),1618=>array(3,716,201,965),1632=>array(130,59,348,260),1633=>array(99,0,282,576),1634=>array(35,0,451,576),1635=>array(39,0,473,576),1636=>array(63,-6,443,586),1637=>array(45,-6,435,576),1638=>array(29,0,450,576),1639=>array(21,-6,459,576),1640=>array(21,0,459,582),1641=>array(42,0,466,582),1642=>array(37,-3,516,579),1643=>array(-19,-151,205,100),1644=>array(90,-3,196,238),1645=>array(20,163,418,576),1648=>array(127,716,173,984),1649=>array(-15,0,256,927),1650=>array(-47,0,196,936),1651=>array(-55,-257,188,716),1652=>array(46,716,188,933),1653=>array(79,0,384,777),1654=>array(-108,-210,551,641),1655=>array(-108,-210,551,754),1656=>array(32,-121,775,621),1657=>array(62,-50,709,569),1658=>array(62,-50,709,568),1659=>array(62,-271,709,265),1660=>array(62,-161,709,437),1661=>array(62,-50,709,539),1662=>array(62,-271,709,265),1663=>array(62,-50,709,569),1664=>array(62,-271,709,265),1665=>array(52,-271,564,621),1666=>array(52,-271,564,724),1667=>array(52,-271,564,453),1668=>array(52,-271,564,453),1669=>array(52,-271,564,695),1670=>array(52,-271,564,453),1671=>array(52,-271,564,453),1672=>array(38,0,368,746),1673=>array(38,-95,368,437),1674=>array(38,-155,368,437),1675=>array(38,-155,368,746),1676=>array(38,0,368,614),1677=>array(38,-140,368,437),1678=>array(38,0,368,716),1679=>array(38,0,368,716),1680=>array(38,0,368,746),1681=>array(-74,-210,360,587),1682=>array(-74,-210,357,526),1683=>array(-74,-258,357,290),1684=>array(-74,-267,378,290),1685=>array(-74,-269,442,290),1686=>array(-74,-267,378,290),1687=>array(-74,-210,360,455),1688=>array(-74,-210,360,557),1689=>array(-74,-210,357,587),1690=>array(39,-228,1115,517),1691=>array(39,-254,1115,346),1692=>array(39,-254,1115,603),1693=>array(39,-228,1230,436),1694=>array(39,-228,1230,619),1695=>array(59,0,782,686),1696=>array(53,-271,565,749),1697=>array(62,0,895,556),1698=>array(62,-134,895,556),1699=>array(62,-134,895,773),1700=>array(62,0,895,860),1701=>array(62,-221,895,556),1702=>array(62,0,895,891),1703=>array(34,-214,738,693),1704=>array(34,-214,738,780),1705=>array(62,0,827,717),1706=>array(62,0,997,717),1707=>array(62,0,827,717),1708=>array(62,0,689,759),1709=>array(62,0,689,846),1710=>array(62,-223,689,716),1711=>array(62,0,827,793),1712=>array(62,0,827,793),1713=>array(62,0,827,863),1714=>array(62,-169,827,793),1715=>array(62,-271,827,793),1716=>array(62,0,827,942),1717=>array(34,-121,618,952),1718=>array(34,-121,594,914),1719=>array(34,-121,647,1001),1722=>array(62,-121,630,272),1723=>array(62,-121,630,570),1724=>array(62,-232,630,455),1725=>array(62,-121,630,540),1726=>array(29,-15,644,593),1728=>array(62,-6,452,705),1729=>array(2,-85,510,159),1730=>array(2,-85,510,431),1731=>array(2,-85,510,347),1732=>array(-108,-210,408,476),1733=>array(-108,-210,408,476),1734=>array(-108,-210,408,712),1735=>array(-108,-210,408,758),1736=>array(-108,-210,408,789),1737=>array(-108,-210,408,713),1738=>array(-108,-210,408,655),1739=>array(-108,-210,408,757),1740=>array(32,-121,679,453),1741=>array(-4,-121,789,453),1742=>array(32,-121,679,576),1744=>array(32,-271,679,493),1745=>array(32,-263,679,493),1746=>array(71,-221,684,297),1747=>array(71,-221,684,349),1748=>array(-1,190,280,285),1749=>array(62,-6,452,431),1750=>array(27,352,699,802),1751=>array(27,352,531,802),1752=>array(35,573,287,788),1753=>array(5,573,284,1002),1754=>array(34,354,341,789),1755=>array(25,635,347,869),1756=>array(23,436,669,781),1757=>array(34,27,654,647),1758=>array(2,-87,850,761),1759=>array(78,687,209,808),1760=>array(78,687,209,808),1761=>array(-1,576,340,848),1762=>array(34,414,316,789),1763=>array(23,-267,669,78),1764=>array(-14,714,162,756),1765=>array(-42,395,268,807),1766=>array(36,443,404,754),1767=>array(36,443,404,754),1768=>array(37,573,378,919),1769=>array(34,0,480,736),1770=>array(35,-161,183,-13),1771=>array(35,641,183,789),1772=>array(35,641,183,789),1773=>array(34,-270,316,105),1776=>array(130,59,348,260),1777=>array(99,0,282,576),1778=>array(35,0,451,576),1779=>array(39,0,473,576),1780=>array(35,0,471,661),1781=>array(30,-6,450,576),1782=>array(94,0,403,576),1783=>array(21,-6,459,576),1784=>array(21,0,459,582),1785=>array(42,0,466,582),2305=>array(-375,608,-50,889),2306=>array(-239,608,-109,843),2307=>array(78,69,216,513),2309=>array(42,-17,706,608),2310=>array(42,-18,923,608),2311=>array(-1,-114,545,608),2312=>array(-1,-114,545,891),2313=>array(-1,11,603,608),2314=>array(-1,11,726,608),2315=>array(-1,-44,933,608),2316=>array(-1,-44,690,608),2317=>array(-1,-187,624,864),2318=>array(-1,-187,624,886),2319=>array(-1,-187,624,608),2320=>array(-1,-187,624,889),2321=>array(42,-18,923,864),2322=>array(42,-18,923,886),2323=>array(42,-14,922,889),2324=>array(42,-17,922,892),2325=>array(-1,-17,680,608),2326=>array(-1,-15,745,608),2327=>array(-1,-15,605,608),2328=>array(-1,-17,652,608),2329=>array(-1,0,636,608),2330=>array(-1,-15,700,608),2331=>array(-1,-80,726,608),2332=>array(-1,-17,700,608),2333=>array(-1,-17,725,608),2334=>array(-1,-15,710,608),2335=>array(-1,0,515,608),2336=>array(-1,0,545,608),2337=>array(-1,0,595,608),2338=>array(-1,0,535,608),2339=>array(-1,-17,706,608),2340=>array(-1,-17,598,608),2341=>array(42,-14,650,608),2342=>array(-1,-14,545,608),2343=>array(42,-18,653,616),2344=>array(-1,-15,598,608),2345=>array(-1,-33,598,608),2346=>array(-1,-17,578,608),2347=>array(-2,-15,712,608),2348=>array(-1,-17,604,608),2349=>array(39,-17,702,608),2350=>array(-1,-17,646,608),2351=>array(-1,-17,613,608),2352=>array(-1,-14,499,608),2353=>array(-1,-19,499,608),2354=>array(-1,-14,692,608),2355=>array(-1,0,742,608),2356=>array(-1,-122,742,608),2357=>array(-1,-15,604,608),2358=>array(38,-18,696,616),2359=>array(-1,-15,621,608),2360=>array(-1,-17,659,608),2361=>array(-1,-238,559,608),2364=>array(-404,-197,-274,-67),2365=>array(28,50,386,608),2366=>array(-1,-17,332,608),2367=>array(-1,-15,776,895),2368=>array(-254,-15,332,895),2369=>array(-463,-256,-31,7),2370=>array(-345,-262,84,7),2371=>array(-330,-249,-50,13),2372=>array(-321,-271,-24,46),2373=>array(-338,608,-49,864),2374=>array(-546,598,-135,886),2375=>array(-534,598,-135,889),2376=>array(-475,599,-135,892),2377=>array(-19,-17,332,864),2378=>array(-228,-17,332,886),2379=>array(-260,-17,332,889),2380=>array(-152,-17,332,892),2381=>array(-251,-271,32,0),2384=>array(47,97,830,792),2385=>array(-212,608,-135,788),2386=>array(-612,-99,0,-29),2387=>array(-349,645,-184,832),2388=>array(-261,645,-96,832),2392=>array(-1,-17,680,608),2393=>array(-1,-104,745,608),2394=>array(-1,-54,605,608),2395=>array(-1,-66,700,608),2396=>array(-1,-67,595,608),2397=>array(-1,-77,535,608),2398=>array(-2,-15,712,608),2399=>array(-1,-38,613,608),2400=>array(-1,-71,933,608),2401=>array(-1,-71,690,608),2402=>array(-418,-271,26,13),2403=>array(-418,-271,60,13),2404=>array(128,-17,203,617),2405=>array(128,-17,385,616),2406=>array(147,115,491,468),2407=>array(179,-134,455,689),2408=>array(99,-123,542,644),2409=>array(125,-106,492,677),2410=>array(12,112,617,685),2411=>array(82,-149,576,658),2412=>array(118,-130,545,653),2413=>array(73,23,570,569),2414=>array(84,29,570,667),2415=>array(119,-92,575,648),2416=>array(64,292,298,525),2433=>array(-296,703,10,875),2434=>array(66,-56,396,605),2435=>array(92,0,338,606),2437=>array(0,0,794,607),2438=>array(0,0,1039,690),2439=>array(0,-94,590,875),2440=>array(0,-22,611,875),2441=>array(0,1,656,875),2442=>array(0,0,765,875),2443=>array(54,0,766,688),2444=>array(33,1,596,651),2447=>array(38,0,593,605),2448=>array(38,0,701,876),2451=>array(57,1,629,609),2452=>array(57,1,728,876),2453=>array(0,0,787,607),2454=>array(54,0,663,625),2455=>array(44,0,614,607),2456=>array(0,0,658,607),2457=>array(51,0,621,607),2458=>array(0,0,563,607),2459=>array(0,-93,593,607),2460=>array(0,-42,737,607),2461=>array(0,0,761,607),2462=>array(38,0,829,606),2463=>array(0,0,575,875),2464=>array(0,0,634,876),2465=>array(0,1,656,607),2466=>array(0,0,575,607),2467=>array(55,0,606,607),2468=>array(0,1,688,607),2469=>array(50,0,653,607),2470=>array(0,-24,617,607),2471=>array(45,0,604,624),2472=>array(0,0,603,607),2474=>array(44,0,643,607),2475=>array(0,0,789,607),2476=>array(0,0,601,607),2477=>array(0,2,685,607),2478=>array(0,0,629,607),2479=>array(0,0,609,607),2480=>array(0,-18,601,607),2482=>array(0,-0,648,607),2486=>array(0,0,606,626),2487=>array(0,0,604,607),2488=>array(0,0,645,607),2489=>array(0,-94,590,607),2492=>array(-366,-164,-233,-32),2494=>array(0,0,253,690),2495=>array(0,0,531,850),2496=>array(-334,0,253,875),2497=>array(-357,-269,39,5),2498=>array(-359,-269,21,-73),2499=>array(-314,-270,-60,-77),2500=>array(-380,-271,98,24),2503=>array(0,1,317,607),2504=>array(0,1,317,875),2507=>array(0,0,940,690),2508=>array(0,0,940,875),2509=>array(-187,-267,26,-73),2519=>array(-250,0,253,875),2524=>array(0,-164,656,607),2525=>array(0,-164,561,607),2527=>array(0,-42,604,607),2528=>array(54,-93,766,688),2529=>array(33,-271,596,651),2530=>array(-381,-271,-4,23),2531=>array(-401,-271,333,151),2534=>array(62,55,548,550),2535=>array(46,0,513,624),2536=>array(58,-51,583,636),2537=>array(53,2,671,606),2538=>array(67,0,547,653),2539=>array(62,1,632,638),2540=>array(52,1,616,622),2541=>array(69,0,498,624),2542=>array(55,0,641,622),2543=>array(53,1,559,622),2544=>array(0,0,601,607),2545=>array(0,-51,601,607),2546=>array(36,0,581,606),2547=>array(-87,0,575,875),2548=>array(26,0,571,606),2549=>array(44,1,669,606),2550=>array(54,0,624,606),2551=>array(103,0,165,607),2552=>array(52,0,564,605),2553=>array(48,154,376,451),2554=>array(74,349,492,788),2562=>array(-156,578,-79,731),2565=>array(0,0,696,578),2566=>array(0,0,940,578),2567=>array(0,0,808,822),2568=>array(0,0,808,822),2569=>array(0,-267,683,839),2570=>array(0,-267,683,839),2575=>array(0,2,562,793),2576=>array(0,0,696,839),2579=>array(0,-2,683,836),2580=>array(0,0,696,839),2581=>array(0,0,607,578),2582=>array(0,0,572,578),2583=>array(0,0,646,578),2584=>array(0,0,692,578),2585=>array(0,0,570,578),2586=>array(0,1,597,578),2587=>array(0,0,607,578),2588=>array(0,0,596,578),2589=>array(0,0,546,578),2590=>array(0,0,563,578),2591=>array(0,0,548,578),2592=>array(0,0,586,578),2593=>array(0,0,601,578),2594=>array(0,0,645,578),2595=>array(0,0,645,578),2596=>array(0,0,596,578),2597=>array(0,0,569,578),2598=>array(0,0,645,578),2599=>array(0,0,569,578),2600=>array(0,0,587,578),2602=>array(0,0,569,578),2603=>array(0,0,556,578),2604=>array(0,0,564,578),2605=>array(0,0,554,578),2606=>array(0,0,563,578),2607=>array(0,0,657,578),2608=>array(0,4,545,578),2610=>array(0,-0,682,578),2611=>array(0,-96,682,578),2613=>array(0,0,606,578),2614=>array(0,0,563,578),2616=>array(0,0,563,578),2617=>array(0,0,554,578),2620=>array(-208,-154,-131,-77),2622=>array(0,216,251,578),2623=>array(0,0,397,822),2624=>array(-151,0,251,822),2625=>array(-388,-267,-50,0),2626=>array(-388,-267,-50,0),2631=>array(-473,578,-90,793),2632=>array(-471,578,-90,839),2635=>array(-411,572,-90,803),2636=>array(-379,578,-27,839),2637=>array(-235,-238,51,0),2649=>array(0,0,572,578),2650=>array(0,0,695,578),2651=>array(0,0,596,578),2652=>array(0,0,596,578),2654=>array(0,0,585,578),2662=>array(54,42,537,524),2663=>array(86,0,514,575),2664=>array(53,0,528,577),2665=>array(52,1,527,577),2666=>array(69,0,522,577),2667=>array(57,0,501,579),2668=>array(74,0,530,758),2669=>array(36,0,519,578),2670=>array(64,0,526,578),2671=>array(65,0,525,769),2672=>array(-103,664,103,841),2673=>array(-193,660,111,839),2674=>array(0,2,562,578),2675=>array(0,-2,683,839),2676=>array(28,-110,857,648),2689=>array(-429,608,-23,885),2690=>array(-179,608,-67,822),2691=>array(88,98,212,510),2693=>array(36,0,803,608),2694=>array(36,0,1062,610),2695=>array(42,-1,553,882),2696=>array(42,-1,606,882),2697=>array(60,0,545,742),2698=>array(60,-4,776,882),2699=>array(20,0,780,608),2701=>array(36,0,803,881),2703=>array(36,0,803,881),2704=>array(36,0,803,882),2705=>array(36,0,1062,881),2707=>array(36,0,1062,881),2708=>array(36,0,1062,882),2709=>array(35,0,411,610),2710=>array(5,0,792,608),2711=>array(25,0,625,608),2712=>array(52,-1,579,608),2713=>array(25,0,462,610),2714=>array(36,0,620,608),2715=>array(55,0,643,608),2716=>array(50,0,791,608),2717=>array(34,0,601,608),2718=>array(25,0,669,608),2719=>array(55,0,460,610),2720=>array(59,0,409,610),2721=>array(25,0,404,610),2722=>array(55,-1,447,608),2723=>array(98,-271,714,608),2724=>array(60,0,554,608),2725=>array(45,0,572,608),2726=>array(44,-1,480,608),2727=>array(27,0,561,727),2728=>array(43,0,602,608),2730=>array(5,0,592,608),2731=>array(50,-270,442,608),2732=>array(50,0,684,608),2733=>array(50,0,776,608),2734=>array(27,0,614,608),2735=>array(40,0,514,608),2736=>array(45,-2,411,609),2738=>array(55,0,633,608),2739=>array(52,0,676,609),2741=>array(50,0,558,608),2742=>array(52,0,633,610),2743=>array(75,0,528,608),2744=>array(43,0,684,608),2745=>array(69,0,573,610),2748=>array(-323,-182,-211,-70),2749=>array(52,0,436,608),2750=>array(98,0,291,610),2751=>array(98,0,660,883),2752=>array(-180,0,291,884),2753=>array(-412,-271,28,5),2754=>array(-323,-271,151,5),2755=>array(-271,-271,41,5),2756=>array(-275,-271,65,20),2757=>array(-452,608,-25,881),2759=>array(-509,608,-80,881),2760=>array(-544,608,-96,882),2761=>array(-179,0,291,881),2763=>array(-236,0,291,881),2764=>array(-271,0,291,882),2765=>array(-244,-249,186,5),2768=>array(46,0,815,881),2784=>array(20,-1,875,608),2790=>array(91,61,532,545),2791=>array(110,0,534,608),2792=>array(97,0,524,608),2793=>array(29,0,527,608),2794=>array(18,0,595,609),2795=>array(18,0,598,608),2796=>array(104,0,541,610),2797=>array(25,0,571,608),2798=>array(118,0,532,607),2799=>array(35,1,608,605),2817=>array(-374,776,37,979),2818=>array(34,379,271,717),2819=>array(59,0,332,717),2821=>array(42,0,508,717),2822=>array(42,0,726,717),2823=>array(39,-16,643,717),2824=>array(39,-16,643,717),2825=>array(39,-16,618,717),2826=>array(39,-16,625,717),2827=>array(39,-16,607,717),2828=>array(39,0,516,717),2831=>array(49,0,479,717),2832=>array(49,0,918,913),2835=>array(59,0,561,732),2836=>array(59,0,953,913),2837=>array(39,0,564,717),2838=>array(39,0,539,717),2839=>array(39,0,539,717),2840=>array(39,0,524,717),2841=>array(39,0,688,717),2842=>array(39,0,540,717),2843=>array(39,0,540,717),2844=>array(39,0,554,717),2845=>array(39,-15,540,732),2846=>array(54,0,532,717),2847=>array(39,0,539,717),2848=>array(44,0,534,717),2849=>array(39,0,540,717),2850=>array(39,-12,540,717),2851=>array(44,0,526,717),2852=>array(39,0,540,717),2853=>array(39,0,505,717),2854=>array(39,0,540,717),2855=>array(44,0,521,732),2856=>array(39,0,540,717),2858=>array(39,0,524,717),2859=>array(39,0,703,717),2860=>array(39,0,540,717),2861=>array(39,-16,628,717),2862=>array(39,-0,524,717),2863=>array(56,0,547,717),2864=>array(39,-16,604,717),2866=>array(39,-16,638,717),2867=>array(39,0,554,717),2870=>array(39,0,539,717),2871=>array(39,0,524,717),2872=>array(39,0,524,717),2873=>array(39,-30,540,717),2876=>array(-301,-176,-206,-84),2877=>array(71,0,273,717),2878=>array(82,0,136,717),2879=>array(-522,762,-17,918),2880=>array(-25,1,213,920),2881=>array(-443,-264,123,-51),2882=>array(-359,-271,171,-17),2883=>array(-325,-271,102,-18),2887=>array(59,0,436,717),2888=>array(59,0,1005,913),2891=>array(59,0,945,717),2892=>array(59,0,1006,913),2893=>array(-188,-267,161,-45),2902=>array(-515,717,-20,913),2903=>array(-297,0,198,913),2908=>array(39,-176,540,717),2909=>array(39,-176,540,717),2911=>array(23,-53,623,718),2912=>array(39,-16,607,717),2913=>array(39,-30,540,717),2918=>array(44,0,534,717),2919=>array(49,-12,441,717),2920=>array(39,-12,432,717),2921=>array(34,0,541,717),2922=>array(20,0,487,732),2923=>array(0,-21,605,717),2924=>array(34,-15,476,718),2925=>array(29,-9,495,729),2926=>array(82,0,495,717),2927=>array(54,-15,456,719),2928=>array(50,209,544,557),2946=>array(-388,499,-211,675),2947=>array(37,-11,698,702),2949=>array(22,-271,932,429),2950=>array(22,-271,1071,429),2951=>array(19,-271,915,702),2952=>array(70,0,621,417),2953=>array(55,0,988,429),2954=>array(55,0,1221,429),2958=>array(52,-11,721,417),2959=>array(52,-110,726,417),2960=>array(27,-271,813,429),2962=>array(49,-271,711,429),2963=>array(49,-271,711,429),2964=>array(49,-271,1631,429),2965=>array(36,-11,610,417),2969=>array(70,0,759,417),2970=>array(36,-11,565,417),2972=>array(28,-271,815,429),2974=>array(63,-271,928,417),2975=>array(70,0,778,417),2979=>array(52,-11,1290,429),2980=>array(-4,-271,600,417),2984=>array(-0,-271,577,417),2985=>array(52,-11,1007,429),2986=>array(70,0,623,417),2990=>array(70,0,667,429),2991=>array(83,-11,719,417),2992=>array(70,-113,540,417),2993=>array(2,-271,650,429),2994=>array(52,-11,768,510),2995=>array(52,-11,866,429),2996=>array(62,-271,665,429),2997=>array(52,-11,803,429),2999=>array(52,-271,1067,429),3000=>array(52,-11,1046,510),3001=>array(0,-271,1207,429),3006=>array(70,0,542,417),3007=>array(-245,1,112,702),3008=>array(-282,417,94,702),3009=>array(-117,145,458,417),3010=>array(-117,-52,754,636),3014=>array(61,-12,685,701),3015=>array(56,-11,659,702),3016=>array(52,-11,901,429),3018=>array(61,-12,1661,701),3019=>array(56,-11,1661,702),3020=>array(61,-12,1989,701),3021=>array(-364,523,-237,650),3031=>array(52,-11,866,429),3047=>array(36,-11,610,417),3048=>array(55,0,988,429),3049=>array(70,0,727,417),3050=>array(36,-11,682,417),3051=>array(70,-208,913,645),3052=>array(36,-11,857,417),3053=>array(52,-11,721,417),3054=>array(22,-271,932,429),3055=>array(36,-11,776,417),3056=>array(83,-11,662,702),3057=>array(71,0,714,429),3058=>array(-4,-271,745,417),3073=>array(57,-6,335,481),3074=>array(57,-13,544,471),3075=>array(65,-12,280,474),3077=>array(54,-11,667,474),3078=>array(54,-11,732,473),3079=>array(36,-229,513,472),3080=>array(24,-11,1108,664),3081=>array(57,-11,634,682),3082=>array(57,-11,996,682),3083=>array(57,-11,1239,474),3084=>array(44,-11,856,586),3086=>array(44,-11,556,702),3087=>array(44,-11,556,839),3088=>array(54,-11,656,475),3090=>array(57,-11,610,471),3091=>array(57,-11,610,642),3092=>array(6,-11,856,688),3093=>array(36,-11,474,664),3094=>array(51,-137,620,476),3095=>array(39,-14,510,664),3096=>array(35,-137,874,664),3097=>array(57,-11,610,472),3098=>array(24,-11,630,664),3099=>array(24,-137,630,664),3100=>array(57,-11,610,474),3101=>array(57,-136,1146,664),3102=>array(36,-229,715,472),3103=>array(57,-11,829,550),3104=>array(57,-11,540,664),3105=>array(57,-11,659,664),3106=>array(57,-137,659,664),3107=>array(63,-11,752,474),3108=>array(57,-11,659,664),3109=>array(60,-137,643,664),3110=>array(60,-11,643,664),3111=>array(60,-137,643,664),3112=>array(44,-11,547,664),3114=>array(35,-11,563,664),3115=>array(35,-137,563,664),3116=>array(57,-11,621,473),3117=>array(57,-137,663,664),3118=>array(44,-11,873,664),3119=>array(57,-12,1144,664),3120=>array(57,-11,540,664),3121=>array(57,-12,837,476),3122=>array(57,-11,571,474),3123=>array(48,-11,561,664),3125=>array(44,-11,561,664),3126=>array(48,-11,524,664),3127=>array(35,-137,759,664),3128=>array(24,-11,581,664),3129=>array(31,-11,893,664),3134=>array(6,305,626,545),3135=>array(17,462,281,785),3136=>array(10,462,289,980),3137=>array(-48,-9,302,474),3138=>array(-48,-9,665,545),3139=>array(-203,-271,294,474),3140=>array(-216,-271,687,473),3142=>array(6,466,618,688),3143=>array(6,466,617,889),3144=>array(6,-271,894,688),3146=>array(6,470,843,715),3147=>array(6,470,843,908),3148=>array(6,449,970,688),3149=>array(39,465,655,866),3157=>array(47,767,289,980),3158=>array(-670,-271,109,-31),3168=>array(57,-11,1602,545),3169=>array(44,-11,1263,545),3174=>array(158,-14,682,510),3175=>array(88,-14,752,510),3176=>array(54,0,726,510),3177=>array(199,-13,609,512),3178=>array(136,-12,704,519),3179=>array(60,-14,781,521),3180=>array(106,0,798,510),3181=>array(201,-15,668,513),3182=>array(65,-13,815,510),3183=>array(106,0,798,510),3202=>array(46,84,394,554),3203=>array(46,84,205,553),3205=>array(47,84,608,602),3206=>array(46,84,625,602),3207=>array(37,84,595,602),3208=>array(33,84,850,752),3209=>array(46,84,911,602),3210=>array(46,84,1247,602),3211=>array(37,84,1000,752),3212=>array(37,84,695,602),3214=>array(37,84,606,602),3215=>array(37,84,606,647),3216=>array(44,84,615,602),3218=>array(37,84,630,602),3219=>array(37,84,630,775),3220=>array(38,84,631,774),3221=>array(49,84,415,752),3222=>array(17,84,700,713),3223=>array(51,84,493,752),3224=>array(44,-79,742,752),3225=>array(37,84,630,602),3226=>array(37,84,633,752),3227=>array(46,-79,614,752),3228=>array(37,84,630,602),3229=>array(54,-79,1127,752),3230=>array(37,84,889,602),3231=>array(59,84,627,651),3232=>array(54,84,508,752),3233=>array(54,84,625,752),3234=>array(54,-79,625,752),3235=>array(54,84,682,602),3236=>array(46,84,500,752),3237=>array(54,-79,626,752),3238=>array(54,84,626,752),3239=>array(54,-79,626,752),3240=>array(46,46,514,752),3242=>array(46,84,620,752),3243=>array(46,-79,619,753),3244=>array(37,84,632,602),3245=>array(37,-79,643,752),3246=>array(49,84,928,752),3247=>array(46,84,1057,752),3248=>array(54,84,508,752),3249=>array(49,84,628,602),3250=>array(46,84,615,602),3251=>array(42,84,507,752),3253=>array(49,84,620,752),3254=>array(49,84,506,752),3255=>array(49,70,620,752),3256=>array(44,84,499,752),3257=>array(49,84,675,752),3262=>array(-21,84,370,588),3263=>array(-13,339,307,702),3264=>array(-13,46,635,702),3265=>array(-5,84,312,563),3266=>array(-5,84,673,560),3267=>array(22,-173,364,236),3268=>array(24,-173,614,253),3270=>array(-79,354,258,774),3271=>array(-79,46,606,774),3272=>array(-79,-173,438,774),3274=>array(-79,84,868,774),3275=>array(-79,46,1188,774),3276=>array(-160,276,395,774),3277=>array(-22,335,329,703),3285=>array(49,46,299,560),3286=>array(25,-173,364,301),3294=>array(49,84,624,602),3296=>array(37,84,1654,752),3297=>array(37,84,943,602),3302=>array(42,84,507,686),3303=>array(34,84,515,685),3304=>array(22,98,507,688),3305=>array(52,84,527,684),3306=>array(38,84,515,684),3307=>array(33,84,516,688),3308=>array(42,98,529,687),3309=>array(47,98,525,684),3310=>array(36,84,520,687),3311=>array(46,84,521,667),3330=>array(45,-9,323,269),3331=>array(49,-9,256,464),3333=>array(49,-9,1152,464),3334=>array(49,-173,1309,464),3335=>array(49,-232,856,464),3336=>array(49,-232,1411,464),3337=>array(49,-232,586,464),3338=>array(49,-232,1149,464),3339=>array(44,-271,817,464),3340=>array(49,-9,908,465),3342=>array(44,-271,1157,464),3343=>array(44,-271,1153,464),3344=>array(49,-271,1785,465),3346=>array(49,-9,601,464),3347=>array(49,-9,1065,464),3348=>array(49,-9,1146,464),3349=>array(42,-8,819,464),3350=>array(49,-9,907,465),3351=>array(44,-10,830,464),3352=>array(39,0,1279,464),3353=>array(49,-9,916,465),3354=>array(15,0,940,464),3355=>array(15,-9,1217,464),3356=>array(44,-51,663,464),3357=>array(49,-9,1410,464),3358=>array(49,-9,1166,465),3359=>array(39,-9,524,464),3360=>array(43,-9,517,464),3361=>array(44,-9,1146,464),3362=>array(44,-9,1195,465),3363=>array(49,-12,1219,465),3364=>array(49,-9,830,464),3365=>array(76,0,893,464),3366=>array(49,-9,501,464),3367=>array(49,-9,835,467),3368=>array(44,-12,830,464),3370=>array(44,-9,956,464),3371=>array(44,-9,1104,464),3372=>array(49,-9,1258,465),3373=>array(54,0,504,464),3374=>array(71,0,572,464),3375=>array(44,-9,905,464),3376=>array(49,-9,594,464),3377=>array(44,-8,506,464),3378=>array(76,0,869,464),3379=>array(44,-232,589,464),3380=>array(44,-9,514,464),3381=>array(49,-7,884,464),3382=>array(44,-9,888,464),3383=>array(44,-9,1043,464),3384=>array(44,-9,1146,464),3385=>array(44,-9,1063,464),3390=>array(42,-6,426,464),3391=>array(0,0,330,651),3392=>array(0,0,354,651),3393=>array(39,-271,301,466),3394=>array(39,-271,301,466),3395=>array(8,-271,458,466),3398=>array(49,-9,591,465),3399=>array(49,-8,476,464),3400=>array(49,-9,1230,465),3402=>array(49,-9,1319,465),3403=>array(49,-8,1209,464),3404=>array(49,-9,1398,465),3405=>array(-300,520,-19,721),3415=>array(39,-9,504,464),3424=>array(44,-271,817,464),3425=>array(49,-173,1058,465),3430=>array(49,-9,1080,464),3431=>array(15,-143,852,464),3432=>array(44,-7,840,464),3433=>array(44,-9,1166,464),3434=>array(44,-9,643,651),3435=>array(54,-243,918,651),3436=>array(44,-271,1162,464),3437=>array(49,-271,591,464),3438=>array(49,-271,884,464),3439=>array(44,-9,848,651),3585=>array(54,0,520,558),3586=>array(30,0,573,558),3587=>array(30,0,590,559),3588=>array(52,0,530,558),3589=>array(52,0,530,560),3590=>array(30,-5,590,559),3591=>array(25,-5,396,558),3592=>array(26,-5,481,558),3593=>array(30,-5,622,558),3594=>array(30,0,634,592),3595=>array(30,0,651,592),3596=>array(54,-5,741,558),3597=>array(54,-208,783,558),3598=>array(30,-203,545,558),3599=>array(30,-203,545,558),3600=>array(54,-206,477,560),3601=>array(30,0,710,559),3602=>array(52,-5,751,560),3603=>array(54,-5,857,558),3604=>array(52,0,530,558),3605=>array(52,0,530,560),3606=>array(54,-5,520,558),3607=>array(30,0,575,558),3608=>array(54,0,477,560),3609=>array(30,-5,622,558),3610=>array(30,0,533,558),3611=>array(30,0,533,830),3612=>array(78,0,552,558),3613=>array(78,0,552,830),3614=>array(30,0,620,558),3615=>array(30,0,620,830),3616=>array(30,-5,545,558),3617=>array(30,-5,506,558),3618=>array(75,0,513,558),3619=>array(54,-5,437,560),3620=>array(54,-199,520,558),3621=>array(44,-5,499,558),3622=>array(30,-199,545,558),3623=>array(19,-5,444,558),3624=>array(52,0,562,664),3625=>array(30,0,637,558),3626=>array(44,-5,544,659),3627=>array(30,0,584,558),3628=>array(30,0,684,723),3629=>array(36,0,491,558),3630=>array(61,0,545,656),3631=>array(30,0,442,558),3632=>array(44,49,418,510),3633=>array(-364,631,10,824),3634=>array(26,0,421,558),3635=>array(-223,0,421,767),3636=>array(-493,612,-109,775),3637=>array(-493,612,-109,800),3638=>array(-493,612,-64,800),3639=>array(-493,612,-109,800),3640=>array(-201,-206,-85,-34),3641=>array(-337,-206,-89,-34),3642=>array(-157,-115,-75,-33),3647=>array(84,-103,625,782),3648=>array(75,-5,272,553),3649=>array(75,-5,541,553),3650=>array(27,-5,466,830),3651=>array(30,-5,485,828),3652=>array(10,-5,485,828),3653=>array(26,-199,421,558),3654=>array(30,-199,431,559),3655=>array(-424,603,-47,849),3656=>array(-167,858,-109,1031),3657=>array(-293,858,1,1065),3658=>array(-342,858,98,1056),3659=>array(-225,858,-52,1031),3660=>array(-330,861,-18,1078),3661=>array(-223,609,-65,767),3662=>array(-203,858,-42,1067),3663=>array(60,-5,495,430),3664=>array(60,-5,538,428),3665=>array(50,-5,590,428),3666=>array(75,0,613,611),3667=>array(75,-5,615,428),3668=>array(50,-5,637,611),3669=>array(50,-5,637,611),3670=>array(18,-5,585,611),3671=>array(75,-5,789,574),3672=>array(60,-5,659,574),3673=>array(75,-5,715,574),3674=>array(30,0,598,558),3675=>array(40,-5,964,447),3713=>array(55,-6,721,587),3714=>array(53,-15,664,587),3716=>array(54,-5,670,587),3719=>array(34,-207,470,587),3720=>array(37,-18,636,587),3722=>array(54,-210,629,587),3725=>array(54,-5,670,588),3732=>array(54,-5,665,587),3733=>array(54,-6,780,587),3734=>array(45,-257,711,587),3735=>array(55,-5,862,587),3737=>array(54,-11,690,589),3738=>array(55,-5,686,587),3739=>array(55,-5,686,707),3740=>array(54,-5,780,593),3741=>array(54,-5,780,707),3742=>array(54,-5,800,587),3743=>array(54,-5,800,707),3745=>array(55,-11,721,589),3746=>array(54,-5,670,707),3747=>array(54,-7,643,587),3749=>array(46,-7,646,587),3751=>array(46,-7,646,587),3754=>array(58,-7,673,587),3755=>array(55,-5,862,587),3757=>array(54,-7,671,587),3758=>array(53,-7,664,595),3759=>array(54,-21,604,680),3760=>array(57,113,382,578),3761=>array(57,847,482,1049),3762=>array(34,-5,422,587),3763=>array(1,-5,422,788),3764=>array(139,805,639,1059),3765=>array(139,805,713,1059),3766=>array(139,805,639,1059),3767=>array(139,805,713,1059),3768=>array(308,-269,470,-26),3769=>array(248,-263,528,-15),3771=>array(145,838,635,1060),3772=>array(147,-257,632,-72),3773=>array(55,-5,616,829),3776=>array(34,-5,386,576),3777=>array(34,-5,772,576),3778=>array(28,-5,410,1001),3779=>array(17,-5,429,1037),3780=>array(46,-5,311,1025),3782=>array(34,-267,517,579),3784=>array(349,806,429,1012),3785=>array(148,808,630,1035),3786=>array(163,805,609,1015),3787=>array(281,805,497,1019),3788=>array(212,812,560,1049),3789=>array(308,806,470,967),3792=>array(54,-7,667,578),3793=>array(54,-5,665,578),3794=>array(67,-5,557,796),3795=>array(44,-5,665,829),3796=>array(54,-5,632,776),3797=>array(54,-5,632,776),3798=>array(54,-5,780,829),3799=>array(55,-257,702,579),3800=>array(54,-171,670,579),3801=>array(54,-5,841,577),3804=>array(55,-11,1218,579),3805=>array(55,-11,1218,579),3840=>array(52,207,573,983),3841=>array(52,232,534,864),3842=>array(11,274,571,864),3843=>array(11,274,593,864),3844=>array(0,227,583,720),3845=>array(107,227,464,720),3846=>array(0,-174,583,720),3847=>array(-152,393,649,720),3848=>array(141,-174,512,809),3849=>array(80,81,520,716),3850=>array(34,-62,576,799),3851=>array(92,522,508,716),3852=>array(92,-117,508,716),3853=>array(260,-174,340,716),3854=>array(190,-174,410,716),3855=>array(250,-174,350,716),3856=>array(187,-174,413,716),3857=>array(179,-174,421,716),3858=>array(-20,-124,620,719),3859=>array(21,126,579,706),3860=>array(238,403,371,681),3861=>array(128,254,472,716),3862=>array(128,320,477,716),3863=>array(99,378,510,657),3864=>array(159,-9,537,322),3865=>array(260,-201,340,300),3866=>array(241,459,359,577),3867=>array(151,459,449,577),3868=>array(151,419,449,687),3869=>array(123,346,476,683),3870=>array(66,426,520,607),3871=>array(129,448,455,584),3872=>array(128,-13,472,374),3873=>array(126,-149,444,374),3874=>array(40,-86,530,374),3875=>array(97,-176,507,402),3876=>array(27,19,560,339),3877=>array(80,-13,541,374),3878=>array(33,-42,547,434),3879=>array(24,-13,568,390),3880=>array(57,-63,485,401),3881=>array(82,-82,534,374),3882=>array(-65,-149,653,374),3883=>array(-65,-86,653,374),3884=>array(-65,-176,653,402),3885=>array(-65,19,653,339),3886=>array(-65,-13,653,374),3887=>array(-65,-42,653,434),3888=>array(-65,-13,653,390),3889=>array(-65,-63,653,401),3890=>array(-65,-82,653,374),3891=>array(-65,-13,653,374),3892=>array(227,359,373,609),3893=>array(238,-1,371,150),3894=>array(81,159,519,619),3895=>array(251,52,349,150),3896=>array(87,431,495,735),3897=>array(355,538,551,706),3898=>array(2,419,587,687),3899=>array(13,419,598,687),3900=>array(56,-201,484,837),3901=>array(116,-201,544,837),3902=>array(238,-201,457,180),3903=>array(143,-201,362,180),3904=>array(23,27,558,716),3905=>array(42,207,558,716),3906=>array(22,27,558,716),3907=>array(22,-174,558,716),3908=>array(72,207,528,716),3909=>array(54,207,541,716),3910=>array(43,207,557,716),3911=>array(72,207,528,716),3913=>array(96,27,488,726),3914=>array(72,27,528,716),3915=>array(62,207,538,716),3916=>array(72,27,528,716),3917=>array(72,-174,528,716),3918=>array(102,27,500,716),3919=>array(72,27,528,716),3920=>array(62,207,538,716),3921=>array(72,27,528,716),3922=>array(72,-174,528,716),3923=>array(100,27,498,716),3924=>array(72,207,558,716),3925=>array(72,207,558,716),3926=>array(72,207,558,716),3927=>array(72,-174,558,716),3928=>array(30,207,558,716),3929=>array(54,207,601,864),3930=>array(43,207,601,864),3931=>array(72,207,621,864),3932=>array(72,-174,621,864),3933=>array(31,207,558,726),3934=>array(62,27,542,716),3935=>array(62,207,538,716),3936=>array(72,187,580,716),3937=>array(72,207,558,716),3938=>array(86,207,580,716),3939=>array(72,207,558,716),3940=>array(19,27,538,716),3941=>array(62,27,581,716),3942=>array(72,207,558,716),3943=>array(72,27,528,716),3944=>array(52,207,558,716),3945=>array(23,-174,558,716),3953=>array(208,-51,414,140),3954=>array(87,625,539,864),3955=>array(87,-51,539,864),3956=>array(72,-70,524,153),3957=>array(105,-201,524,180),3958=>array(61,41,513,864),3959=>array(61,-201,513,864),3960=>array(61,-11,513,864),3961=>array(61,-201,513,864),3962=>array(137,643,365,777),3963=>array(137,643,405,897),3964=>array(67,643,573,829),3965=>array(67,643,573,929),3966=>array(241,736,359,854),3967=>array(399,180,517,448),3968=>array(61,625,513,864),3969=>array(61,-51,513,864),3970=>array(193,625,391,852),3971=>array(193,625,391,819),3972=>array(307,-201,535,-67),3973=>array(96,-54,488,726),3974=>array(186,461,432,864),3975=>array(288,666,312,864),3976=>array(162,609,438,864),3977=>array(85,575,515,864),3978=>array(165,634,455,864),3979=>array(163,652,486,864),3984=>array(75,-201,510,180),3985=>array(90,-201,510,180),3986=>array(74,-200,510,180),3987=>array(179,-201,413,180),3988=>array(115,-201,485,180),3989=>array(100,-201,496,180),3991=>array(115,-201,485,180),3993=>array(134,-201,453,186),3994=>array(115,-201,485,180),3995=>array(107,-201,493,180),3996=>array(115,-201,485,180),3997=>array(201,-201,399,180),3998=>array(139,-201,463,180),3999=>array(115,-201,485,180),4000=>array(107,-201,493,180),4001=>array(115,-201,485,180),4002=>array(201,-201,399,180),4003=>array(137,-201,461,180),4004=>array(115,-201,510,180),4005=>array(115,-201,510,180),4006=>array(115,-201,510,180),4007=>array(201,-201,413,180),4008=>array(81,-201,510,180),4009=>array(100,-201,545,301),4010=>array(91,-201,545,301),4011=>array(115,-201,561,301),4012=>array(201,-201,440,245),4013=>array(81,-201,510,188),4017=>array(115,-201,510,180),4018=>array(126,-201,528,180),4019=>array(115,-201,510,180),4020=>array(72,-201,493,180),4021=>array(107,-201,528,180),4022=>array(115,-201,510,180),4023=>array(132,-201,468,180),4025=>array(179,-201,413,180),4256=>array(42,-15,633,716),4257=>array(45,-3,677,716),4258=>array(45,-142,695,716),4259=>array(42,-15,657,716),4260=>array(45,0,543,716),4261=>array(47,0,745,716),4262=>array(1,-7,630,715),4263=>array(35,0,740,716),4264=>array(24,0,494,716),4265=>array(66,0,568,716),4266=>array(45,-7,748,716),4267=>array(34,-7,677,716),4268=>array(66,0,563,716),4269=>array(35,-15,681,732),4270=>array(-1,-15,639,719),4271=>array(-1,-209,624,721),4272=>array(34,-15,689,716),4273=>array(66,-15,581,716),4274=>array(66,0,547,716),4275=>array(35,-15,681,732),4276=>array(35,-209,644,732),4277=>array(34,-209,671,716),4278=>array(66,0,577,732),4279=>array(52,0,557,716),4280=>array(50,-15,557,716),4281=>array(66,0,563,716),4282=>array(35,-163,593,732),4283=>array(34,-7,736,716),4284=>array(66,-209,547,716),4285=>array(49,-15,614,732),4286=>array(66,0,563,716),4287=>array(-66,-171,660,716),4288=>array(45,-15,701,716),4289=>array(66,0,552,716),4290=>array(23,-15,571,716),4291=>array(34,0,539,716),4292=>array(58,-209,618,716),4293=>array(34,-15,758,716),4304=>array(36,-12,398,490),4305=>array(37,-12,519,721),4306=>array(42,-256,523,455),4307=>array(36,-251,836,454),4308=>array(20,-256,472,452),4309=>array(30,-256,498,451),4310=>array(24,-12,689,734),4311=>array(34,-16,834,454),4312=>array(34,-16,495,452),4313=>array(30,-256,498,451),4314=>array(36,-251,921,449),4315=>array(34,-12,486,728),4316=>array(66,-12,518,723),4317=>array(34,-33,700,449),4318=>array(34,-12,502,727),4319=>array(40,-256,508,466),4320=>array(34,-16,651,727),4321=>array(66,-12,512,716),4322=>array(34,-256,772,623),4323=>array(22,-257,745,449),4324=>array(34,-256,743,451),4325=>array(34,-257,436,716),4326=>array(36,-251,655,449),4327=>array(44,-257,446,452),4328=>array(34,-12,486,734),4329=>array(66,0,451,733),4330=>array(45,-256,534,452),4331=>array(34,-12,486,716),4332=>array(32,-256,562,734),4333=>array(34,-257,530,732),4334=>array(66,-12,518,716),4335=>array(32,-238,771,450),4336=>array(35,-12,514,736),4337=>array(40,-12,619,716),4338=>array(10,-12,549,453),4339=>array(23,-256,478,450),4340=>array(34,-257,448,495),4341=>array(43,-250,549,583),4342=>array(35,-256,788,715),4347=>array(87,-12,449,464),4352=>array(129,91,796,665),4353=>array(114,91,844,665),4354=>array(204,90,873,665),4355=>array(184,90,838,664),4356=>array(149,90,888,665),4357=>array(173,90,827,665),4358=>array(215,90,785,665),4359=>array(215,90,785,665),4360=>array(145,88,855,665),4361=>array(107,76,882,663),4362=>array(110,78,890,663),4363=>array(187,92,813,666),4364=>array(109,76,880,665),4365=>array(105,80,895,666),4366=>array(109,76,880,665),4367=>array(206,90,790,663),4368=>array(189,91,837,664),4369=>array(187,90,813,665),4370=>array(156,88,844,665),4371=>array(144,91,844,665),4372=>array(144,93,881,665),4373=>array(144,90,888,665),4374=>array(144,89,853,665),4375=>array(149,89,842,665),4376=>array(149,85,881,665),4377=>array(149,85,887,665),4378=>array(149,85,876,666),4379=>array(232,78,789,722),4380=>array(142,89,853,665),4381=>array(232,78,768,711),4382=>array(145,88,844,665),4383=>array(145,88,881,665),4384=>array(145,88,888,665),4385=>array(145,78,884,664),4386=>array(111,78,889,665),4387=>array(101,78,933,665),4388=>array(93,78,907,665),4389=>array(101,78,962,665),4390=>array(101,78,962,666),4391=>array(140,78,885,666),4392=>array(140,78,885,665),4393=>array(145,88,855,665),4394=>array(145,88,868,665),4395=>array(232,78,768,725),4396=>array(197,78,803,728),4397=>array(130,78,844,665),4398=>array(130,78,858,665),4399=>array(130,78,888,665),4400=>array(125,78,887,665),4401=>array(125,78,860,665),4402=>array(125,78,868,665),4403=>array(57,78,889,665),4404=>array(57,78,949,663),4405=>array(125,78,876,663),4406=>array(117,78,883,666),4407=>array(119,78,885,665),4408=>array(125,78,873,663),4409=>array(125,78,855,665),4410=>array(125,78,868,665),4411=>array(125,78,876,666),4412=>array(216,-1,702,716),4413=>array(92,-1,860,716),4414=>array(298,-1,784,716),4415=>array(140,-1,908,716),4416=>array(258,93,742,659),4417=>array(125,91,844,665),4418=>array(125,90,888,665),4419=>array(125,89,860,665),4420=>array(125,89,853,665),4421=>array(125,78,880,663),4422=>array(125,119,886,664),4423=>array(125,122,874,617),4424=>array(125,78,885,666),4425=>array(125,78,885,665),4426=>array(125,90,855,665),4427=>array(125,91,868,665),4428=>array(232,131,768,551),4429=>array(119,78,874,666),4430=>array(97,-1,903,720),4431=>array(92,-1,903,720),4432=>array(97,-1,903,720),4433=>array(97,-1,908,720),4434=>array(123,78,873,665),4435=>array(123,78,876,666),4436=>array(97,-1,903,814),4437=>array(97,-1,903,814),4438=>array(127,89,853,665),4439=>array(202,78,798,714),4440=>array(100,91,900,666),4441=>array(182,78,818,573),4449=>array(421,-64,711,842),4450=>array(345,-64,655,842),4451=>array(381,-64,676,842),4452=>array(340,-64,661,842),4453=>array(302,-65,597,841),4454=>array(186,-63,677,843),4455=>array(332,-64,626,842),4456=>array(226,-63,687,843),4457=>array(60,197,940,614),4458=>array(46,-64,931,842),4459=>array(51,-64,892,842),4460=>array(61,-64,857,842),4461=>array(60,197,940,615),4462=>array(79,76,921,554),4463=>array(68,-65,882,841),4464=>array(53,-63,912,843),4465=>array(70,-64,867,842),4466=>array(72,111,928,589),4467=>array(57,357,943,436),4468=>array(67,-64,867,842),4469=>array(462,-64,538,842),4470=>array(62,7,943,842),4471=>array(79,-64,936,842),4472=>array(62,7,943,842),4473=>array(62,-3,938,842),4474=>array(62,7,943,841),4475=>array(79,-64,920,841),4476=>array(57,22,943,841),4477=>array(62,7,943,842),4478=>array(79,-64,920,842),4479=>array(63,-70,907,841),4480=>array(63,-68,907,843),4481=>array(63,-68,907,843),4482=>array(62,22,943,783),4483=>array(62,-64,943,783),4484=>array(62,-70,907,842),4485=>array(62,-69,907,842),4486=>array(62,-70,907,842),4487=>array(62,22,943,782),4488=>array(62,-69,907,842),4489=>array(68,-69,936,842),4490=>array(68,-69,907,842),4491=>array(57,22,943,841),4492=>array(63,-68,907,843),4493=>array(79,-64,920,762),4494=>array(68,-69,936,842),4495=>array(68,-70,907,841),4496=>array(68,-63,912,843),4497=>array(68,-70,907,842),4498=>array(63,-68,907,843),4499=>array(79,-64,921,756),4500=>array(68,-64,867,842),4501=>array(79,-64,921,615),4502=>array(79,197,921,615),4503=>array(65,-64,921,842),4504=>array(321,-63,812,843),4505=>array(311,-63,772,843),4506=>array(62,22,943,842),4507=>array(79,-64,921,842),4508=>array(57,22,943,842),4509=>array(410,50,584,842),4510=>array(410,280,584,463),4511=>array(410,-65,719,841),4512=>array(79,-64,921,601),4513=>array(333,-69,667,842),4514=>array(329,280,671,463),4520=>array(129,91,796,665),4521=>array(114,91,844,665),4522=>array(114,78,880,665),4523=>array(204,90,873,665),4524=>array(144,78,880,666),4525=>array(144,91,876,666),4526=>array(184,90,838,664),4527=>array(173,90,827,665),4528=>array(149,85,842,665),4529=>array(149,85,852,665),4530=>array(149,85,853,665),4531=>array(149,78,880,665),4532=>array(149,85,855,665),4533=>array(149,85,868,665),4534=>array(149,85,876,666),4535=>array(215,90,785,665),4536=>array(215,90,785,665),4537=>array(145,78,880,664),4538=>array(107,76,882,663),4539=>array(110,78,890,663),4540=>array(187,92,813,666),4541=>array(109,76,880,665),4542=>array(109,76,880,665),4543=>array(206,90,790,663),4544=>array(189,91,837,664),4545=>array(187,90,813,665),4546=>array(156,88,844,665),4547=>array(114,85,887,665),4548=>array(75,78,913,665),4549=>array(144,91,844,665),4550=>array(144,90,888,665),4551=>array(144,78,880,665),4552=>array(144,93,886,665),4553=>array(144,90,855,665),4554=>array(149,89,842,665),4555=>array(149,85,887,665),4556=>array(76,78,961,665),4557=>array(149,85,881,665),4558=>array(149,85,888,665),4559=>array(76,85,944,666),4560=>array(149,85,887,665),4561=>array(76,85,920,665),4562=>array(76,78,973,665),4563=>array(76,78,973,665),4564=>array(76,85,946,666),4565=>array(149,85,848,728),4566=>array(80,78,960,665),4567=>array(149,85,886,665),4568=>array(149,85,873,665),4569=>array(149,85,878,666),4570=>array(142,89,844,665),4571=>array(142,85,887,665),4572=>array(142,89,853,665),4573=>array(142,78,880,665),4574=>array(84,78,960,665),4575=>array(142,89,886,665),4576=>array(142,78,885,665),4577=>array(142,89,876,666),4578=>array(232,78,768,711),4579=>array(145,85,887,665),4580=>array(145,88,868,665),4581=>array(145,88,876,666),4582=>array(232,78,768,725),4583=>array(130,78,844,665),4584=>array(130,78,888,665),4585=>array(125,78,887,665),4586=>array(125,78,868,665),4587=>array(258,93,742,659),4588=>array(125,91,844,665),4589=>array(72,91,913,665),4590=>array(125,122,874,617),4591=>array(125,90,873,663),4592=>array(232,131,768,551),4593=>array(125,78,880,663),4594=>array(125,119,886,664),4595=>array(127,89,853,665),4596=>array(202,78,798,714),4597=>array(116,91,881,666),4598=>array(116,85,887,666),4599=>array(116,89,852,666),4600=>array(116,89,853,666),4601=>array(182,78,818,573),7680=>array(-1,-210,668,716),7681=>array(38,-210,516,530),7682=>array(74,0,615,881),7683=>array(67,-12,517,881),7684=>array(74,-210,615,716),7685=>array(67,-210,517,716),7686=>array(74,-179,615,716),7687=>array(67,-179,517,716),7688=>array(51,-209,684,898),7689=>array(39,-196,491,728),7690=>array(80,0,672,881),7691=>array(36,-12,486,881),7692=>array(80,-210,672,716),7693=>array(36,-210,486,716),7694=>array(80,-179,672,716),7695=>array(36,-179,486,716),7696=>array(80,-205,672,716),7697=>array(36,-205,486,716),7698=>array(80,-210,672,716),7699=>array(36,-210,486,716),7700=>array(79,0,614,1050),7701=>array(39,-12,517,882),7702=>array(79,0,614,1050),7703=>array(39,-12,517,882),7704=>array(79,-210,614,716),7705=>array(39,-210,517,530),7706=>array(79,-185,614,716),7707=>array(39,-185,517,530),7708=>array(79,-205,614,902),7709=>array(39,-205,517,722),7710=>array(80,0,563,881),7711=>array(8,0,311,881),7712=>array(52,-12,714,865),7713=>array(34,-210,491,697),7714=>array(80,0,642,881),7715=>array(67,0,490,881),7716=>array(80,-210,642,716),7717=>array(67,-210,490,716),7718=>array(80,0,642,881),7719=>array(67,0,490,881),7720=>array(27,-205,642,716),7721=>array(2,-205,490,716),7722=>array(80,-200,642,716),7723=>array(67,-200,490,716),7724=>array(-28,-185,299,716),7725=>array(-58,-185,270,716),7726=>array(3,0,274,1066),7727=>array(5,0,276,896),7728=>array(73,0,665,898),7729=>array(66,0,496,898),7730=>array(73,-210,665,716),7731=>array(66,-210,496,716),7732=>array(73,-179,665,716),7733=>array(66,-179,496,716),7734=>array(75,-210,523,716),7735=>array(67,-210,158,716),7736=>array(75,-210,523,865),7737=>array(-41,-210,264,865),7738=>array(75,-179,523,716),7739=>array(-42,-179,262,716),7740=>array(75,-210,523,716),7741=>array(-39,-210,270,716),7742=>array(76,0,757,898),7743=>array(65,0,769,728),7744=>array(76,0,757,881),7745=>array(65,0,769,711),7746=>array(76,-210,757,716),7747=>array(65,-210,769,530),7748=>array(79,0,642,881),7749=>array(68,0,490,711),7750=>array(79,-210,642,716),7751=>array(68,-210,490,530),7752=>array(79,-179,642,716),7753=>array(68,-179,490,530),7754=>array(79,-210,642,716),7755=>array(68,-210,490,530),7756=>array(47,-12,732,1064),7757=>array(35,-12,521,902),7758=>array(47,-12,732,1035),7759=>array(35,-12,521,865),7760=>array(47,-12,732,1050),7761=>array(35,-12,521,882),7762=>array(47,-12,732,1050),7763=>array(35,-12,521,882),7764=>array(77,0,623,898),7765=>array(68,-199,518,728),7766=>array(77,0,623,881),7767=>array(68,-199,518,711),7768=>array(80,0,711,881),7769=>array(64,0,346,711),7770=>array(80,-210,711,716),7771=>array(64,-210,346,530),7772=>array(80,-210,711,865),7773=>array(14,-210,346,697),7774=>array(80,-179,711,716),7775=>array(8,-179,346,530),7776=>array(45,-12,615,881),7777=>array(31,-12,461,711),7778=>array(45,-210,615,728),7779=>array(31,-210,461,530),7780=>array(45,-12,615,939),7781=>array(31,-12,461,768),7782=>array(45,-12,615,1047),7783=>array(31,-12,461,877),7784=>array(45,-210,615,881),7785=>array(31,-210,461,711),7786=>array(22,0,589,881),7787=>array(17,-7,269,881),7788=>array(22,-210,589,716),7789=>array(17,-210,269,700),7790=>array(22,-179,589,716),7791=>array(-11,-179,293,700),7792=>array(22,-210,589,716),7793=>array(6,-210,315,700),7794=>array(79,-210,642,716),7795=>array(66,-210,487,518),7796=>array(79,-185,642,716),7797=>array(66,-185,487,518),7798=>array(79,-210,642,716),7799=>array(66,-210,487,518),7800=>array(79,-12,642,1072),7801=>array(66,-12,487,902),7802=>array(79,-12,642,1002),7803=>array(66,-12,487,846),7804=>array(6,0,660,886),7805=>array(13,0,488,716),7806=>array(6,-210,660,716),7807=>array(13,-210,488,518),7808=>array(12,0,933,898),7809=>array(5,0,717,728),7810=>array(12,0,933,898),7811=>array(5,0,717,728),7812=>array(12,0,933,881),7813=>array(5,0,717,711),7814=>array(12,0,933,881),7815=>array(5,0,717,711),7816=>array(12,-210,933,716),7817=>array(5,-210,717,518),7818=>array(5,0,661,881),7819=>array(7,0,493,711),7820=>array(5,0,661,881),7821=>array(7,0,493,711),7822=>array(5,0,661,881),7823=>array(16,-210,492,711),7824=>array(18,0,584,898),7825=>array(20,0,479,728),7826=>array(18,-210,584,716),7827=>array(20,-210,479,518),7828=>array(18,-179,584,716),7829=>array(20,-179,479,518),7830=>array(67,-179,490,716),7831=>array(1,-7,272,881),7832=>array(5,0,717,752),7833=>array(16,-210,492,752),7834=>array(38,-12,557,758),7835=>array(8,0,311,881),7840=>array(-1,-210,668,716),7841=>array(38,-210,516,530),7842=>array(-1,0,668,934),7843=>array(38,-12,516,756),7844=>array(-1,0,668,978),7845=>array(38,-12,586,808),7846=>array(-1,0,668,978),7847=>array(-30,-12,516,808),7848=>array(-1,0,668,996),7849=>array(38,-12,573,826),7850=>array(-1,0,668,1058),7851=>array(38,-12,516,888),7852=>array(-1,-210,668,898),7853=>array(38,-210,516,728),7854=>array(-1,0,668,1039),7855=>array(38,-12,516,859),7856=>array(-1,0,668,1039),7857=>array(38,-12,516,859),7858=>array(-1,0,668,1074),7859=>array(38,-12,516,895),7860=>array(-1,0,668,1060),7861=>array(38,-12,516,880),7862=>array(-1,-210,668,902),7863=>array(38,-210,516,722),7864=>array(79,-210,614,716),7865=>array(39,-210,517,530),7866=>array(79,0,614,936),7867=>array(39,-12,517,756),7868=>array(79,0,614,884),7869=>array(39,-12,517,716),7870=>array(79,0,652,978),7871=>array(39,-12,586,808),7872=>array(34,0,614,978),7873=>array(-30,-12,517,808),7874=>array(79,0,638,996),7875=>array(39,-12,573,826),7876=>array(79,0,614,1056),7877=>array(39,-12,517,886),7878=>array(79,-210,614,900),7879=>array(39,-210,517,728),7880=>array(33,0,245,936),7881=>array(33,0,245,756),7882=>array(92,-210,187,716),7883=>array(67,-210,158,716),7884=>array(47,-210,732,728),7885=>array(35,-210,521,530),7886=>array(47,-12,732,936),7887=>array(35,-12,521,756),7888=>array(47,-12,732,978),7889=>array(35,-12,586,808),7890=>array(47,-12,732,978),7891=>array(-30,-12,521,808),7892=>array(47,-12,732,996),7893=>array(35,-12,573,826),7894=>array(47,-12,732,1056),7895=>array(35,-12,521,886),7896=>array(47,-210,732,900),7897=>array(35,-210,521,728),7898=>array(47,-12,776,900),7899=>array(35,-12,555,728),7900=>array(47,-12,776,900),7901=>array(35,-12,555,728),7902=>array(47,-12,776,936),7903=>array(35,-12,555,756),7904=>array(47,-12,776,884),7905=>array(35,-12,555,716),7906=>array(47,-210,776,768),7907=>array(35,-210,555,606),7908=>array(79,-210,642,716),7909=>array(66,-210,487,518),7910=>array(79,-12,642,936),7911=>array(66,-12,487,756),7912=>array(79,-12,776,900),7913=>array(66,-12,625,728),7914=>array(79,-12,776,900),7915=>array(66,-12,625,728),7916=>array(79,-12,776,936),7917=>array(66,-12,625,756),7918=>array(79,-12,776,884),7919=>array(66,-12,625,716),7920=>array(79,-210,776,768),7921=>array(66,-210,625,620),7922=>array(5,0,661,900),7923=>array(16,-210,492,728),7924=>array(5,-210,661,716),7925=>array(16,-210,492,518),7926=>array(5,0,661,936),7927=>array(16,-210,492,756),7928=>array(5,0,661,884),7929=>array(16,-210,492,716),7936=>array(35,-12,541,763),7937=>array(35,-12,541,763),7938=>array(35,-12,541,763),7939=>array(35,-12,541,763),7940=>array(35,-12,541,763),7941=>array(35,-12,541,763),7942=>array(35,-12,541,847),7943=>array(35,-12,541,847),7944=>array(-1,0,668,763),7945=>array(-1,0,668,763),7946=>array(-50,0,681,763),7947=>array(-50,0,681,763),7948=>array(-46,0,681,763),7949=>array(-38,0,681,763),7950=>array(-43,0,719,763),7951=>array(-43,0,719,763),7952=>array(29,-12,405,763),7953=>array(29,-12,405,763),7954=>array(29,-12,405,763),7955=>array(29,-12,405,763),7956=>array(29,-12,405,763),7957=>array(29,-12,405,763),7960=>array(-43,0,639,763),7961=>array(-44,0,639,763),7962=>array(-43,0,770,763),7963=>array(-43,0,770,763),7964=>array(-71,0,770,763),7965=>array(-63,0,769,763),7968=>array(68,-199,490,763),7969=>array(68,-199,490,763),7970=>array(68,-199,490,763),7971=>array(68,-199,490,763),7972=>array(68,-199,490,763),7973=>array(68,-199,490,763),7974=>array(68,-199,490,847),7975=>array(68,-199,490,847),7976=>array(-43,0,667,763),7977=>array(-44,0,667,763),7978=>array(-43,0,798,763),7979=>array(-43,0,798,763),7980=>array(-71,0,798,763),7981=>array(-63,0,798,763),7982=>array(-43,0,843,763),7983=>array(-43,0,843,763),7984=>array(59,0,162,763),7985=>array(53,0,156,763),7986=>array(-13,0,236,763),7987=>array(-13,0,236,763),7988=>array(-15,0,251,763),7989=>array(-15,0,243,763),7990=>array(-36,0,253,847),7991=>array(-36,0,253,847),7992=>array(-43,0,212,763),7993=>array(-44,0,212,763),7994=>array(-43,0,343,763),7995=>array(-43,0,343,763),7996=>array(-71,0,343,763),7997=>array(-63,0,343,763),7998=>array(-43,0,388,763),7999=>array(-43,0,388,763),8000=>array(35,-12,521,763),8001=>array(35,-12,521,763),8002=>array(35,-12,521,763),8003=>array(35,-12,521,763),8004=>array(35,-12,521,763),8005=>array(35,-12,521,763),8008=>array(-30,-12,732,763),8009=>array(-38,-12,732,763),8010=>array(-43,-12,848,763),8011=>array(-31,-12,848,763),8012=>array(-37,-12,848,763),8013=>array(-36,-12,848,763),8016=>array(68,-12,483,763),8017=>array(68,-12,483,763),8018=>array(68,-12,483,763),8019=>array(68,-12,483,763),8020=>array(68,-12,483,763),8021=>array(68,-12,483,763),8022=>array(68,-12,483,847),8023=>array(68,-12,483,847),8025=>array(-43,0,771,763),8027=>array(-43,0,887,763),8029=>array(-43,0,879,763),8031=>array(-43,0,934,763),8032=>array(35,-12,731,763),8033=>array(35,-12,731,763),8034=>array(35,-12,731,763),8035=>array(35,-12,731,763),8036=>array(35,-12,731,763),8037=>array(35,-12,731,763),8038=>array(35,-12,731,847),8039=>array(35,-12,731,847),8040=>array(-30,0,706,763),8041=>array(-38,0,706,763),8042=>array(-43,0,822,763),8043=>array(-43,0,822,763),8044=>array(-43,0,816,763),8045=>array(-43,0,815,763),8046=>array(-43,0,859,763),8047=>array(-43,0,859,763),8048=>array(35,-12,541,736),8049=>array(35,-12,541,736),8050=>array(29,-12,405,736),8051=>array(29,-12,405,736),8052=>array(68,-199,490,736),8053=>array(68,-199,490,736),8054=>array(35,0,155,736),8055=>array(67,0,187,736),8056=>array(35,-12,521,736),8057=>array(35,-12,521,736),8058=>array(68,-12,483,736),8059=>array(68,-12,483,736),8060=>array(35,-12,731,736),8061=>array(35,-12,731,736),8064=>array(35,-208,541,763),8065=>array(35,-208,541,763),8066=>array(35,-208,541,763),8067=>array(35,-208,541,763),8068=>array(35,-208,541,763),8069=>array(35,-208,541,763),8070=>array(35,-208,541,847),8071=>array(35,-208,541,847),8072=>array(-1,-208,668,763),8073=>array(-1,-208,668,763),8074=>array(-50,-208,681,763),8075=>array(-50,-208,681,763),8076=>array(-46,-208,681,763),8077=>array(-38,-208,681,763),8078=>array(-43,-208,719,763),8079=>array(-43,-208,719,763),8080=>array(68,-208,490,763),8081=>array(68,-208,490,763),8082=>array(68,-208,490,763),8083=>array(68,-208,490,763),8084=>array(68,-208,490,763),8085=>array(68,-208,490,763),8086=>array(68,-208,490,847),8087=>array(68,-208,490,847),8088=>array(-43,-208,667,763),8089=>array(-44,-208,667,763),8090=>array(-43,-208,798,763),8091=>array(-43,-208,798,763),8092=>array(-71,-208,798,763),8093=>array(-63,-208,798,763),8094=>array(-43,-208,843,763),8095=>array(-43,-208,843,763),8096=>array(35,-208,731,763),8097=>array(35,-208,731,763),8098=>array(35,-208,731,763),8099=>array(35,-208,731,763),8100=>array(35,-208,731,763),8101=>array(35,-208,731,763),8102=>array(35,-208,731,847),8103=>array(35,-208,731,847),8104=>array(-30,-208,706,763),8105=>array(-38,-208,706,763),8106=>array(-43,-208,822,763),8107=>array(-43,-208,822,763),8108=>array(-43,-208,816,763),8109=>array(-43,-208,815,763),8110=>array(-43,-208,859,763),8111=>array(-43,-208,859,763),8112=>array(35,-12,541,722),8113=>array(35,-12,541,697),8114=>array(35,-208,541,736),8115=>array(35,-208,541,530),8116=>array(35,-208,541,736),8118=>array(35,-12,541,717),8119=>array(35,-208,541,717),8120=>array(-1,0,668,889),8121=>array(-1,0,668,835),8122=>array(-1,0,668,736),8123=>array(-1,0,668,736),8124=>array(-1,-208,668,716),8125=>array(86,579,189,763),8126=>array(111,-208,289,-42),8127=>array(86,579,189,763),8128=>array(-5,590,284,717),8129=>array(-5,591,284,819),8130=>array(68,-208,490,736),8131=>array(68,-208,490,530),8132=>array(68,-208,490,736),8134=>array(68,-199,490,717),8135=>array(68,-208,490,717),8136=>array(-43,0,640,736),8137=>array(-43,0,651,736),8138=>array(-43,0,668,736),8139=>array(-43,0,679,736),8140=>array(80,-208,642,716),8141=>array(16,579,265,763),8142=>array(16,579,282,763),8143=>array(-5,583,284,847),8144=>array(-34,0,255,722),8145=>array(-41,0,264,697),8146=>array(-55,0,276,736),8147=>array(-55,0,276,736),8150=>array(-34,0,255,717),8151=>array(-32,0,257,819),8152=>array(-5,0,284,889),8153=>array(-14,0,291,835),8154=>array(-43,0,213,736),8155=>array(-43,0,213,736),8157=>array(16,579,265,763),8158=>array(16,579,274,763),8159=>array(-5,583,284,847),8160=>array(68,-12,483,722),8161=>array(68,-12,483,697),8162=>array(68,-12,483,736),8163=>array(68,-12,483,736),8164=>array(66,-199,536,763),8165=>array(66,-199,536,763),8166=>array(68,-12,483,717),8167=>array(68,-12,483,819),8168=>array(5,0,661,889),8169=>array(5,0,661,835),8170=>array(-43,0,736,736),8171=>array(-43,0,740,736),8172=>array(-43,0,649,763),8173=>array(-27,600,304,736),8174=>array(-27,600,304,736),8175=>array(70,600,189,736),8178=>array(35,-208,731,736),8179=>array(35,-208,731,518),8180=>array(35,-208,731,736),8182=>array(35,-12,731,717),8183=>array(35,-208,731,717),8184=>array(-17,-12,732,736),8185=>array(-6,-12,732,736),8186=>array(-17,0,706,736),8187=>array(-6,0,706,736),8188=>array(52,-208,706,728),8189=>array(84,600,203,736),8190=>array(88,579,191,763),8208=>array(32,215,301,303),8209=>array(32,215,301,303),8210=>array(-6,223,562,295),8211=>array(-6,223,506,295),8212=>array(-6,223,1006,295),8213=>array(26,223,538,295),8214=>array(92,-85,336,716),8215=>array(-6,-165,506,-35),8216=>array(64,494,166,728),8217=>array(56,482,158,716),8218=>array(53,-132,155,102),8219=>array(64,482,166,716),8220=>array(43,494,297,728),8221=>array(36,482,290,716),8222=>array(36,-132,290,102),8223=>array(44,482,298,716),8224=>array(39,-169,517,699),8225=>array(39,-169,517,706),8226=>array(51,227,299,474),8227=>array(52,197,321,504),8228=>array(89,0,189,100),8229=>array(89,0,467,100),8230=>array(117,0,883,100),8231=>array(89,302,189,402),8240=>array(18,-27,982,728),8241=>array(18,-27,1310,728),8242=>array(46,462,192,716),8243=>array(46,462,342,716),8244=>array(46,462,492,716),8245=>array(30,462,176,716),8246=>array(30,462,326,716),8247=>array(30,462,476,716),8248=>array(30,-175,282,32),8249=>array(44,35,271,481),8250=>array(62,35,289,481),8251=>array(116,-125,883,641),8252=>array(85,0,387,716),8253=>array(46,0,508,747),8254=>array(-6,740,506,790),8255=>array(3,-203,941,4),8256=>array(3,578,941,785),8257=>array(30,-175,282,146),8258=>array(33,-3,786,728),8259=>array(32,185,301,333),8260=>array(-222,-25,393,732),8261=>array(68,-199,262,716),8262=>array(16,-199,210,716),8304=>array(15,349,318,725),8308=>array(11,358,319,725),8309=>array(16,349,313,716),8310=>array(9,349,315,725),8311=>array(36,358,304,716),8312=>array(22,349,312,725),8313=>array(18,349,323,725),8314=>array(37,395,296,654),8315=>array(37,496,296,553),8316=>array(37,436,296,613),8317=>array(32,209,195,769),8318=>array(16,209,178,769),8319=>array(51,358,293,646),8320=>array(15,-24,318,352),8321=>array(52,-15,232,352),8322=>array(12,-15,316,352),8323=>array(16,-24,315,352),8324=>array(11,-15,319,352),8325=>array(16,-24,313,343),8326=>array(9,-24,315,352),8327=>array(36,-15,304,343),8328=>array(22,-24,312,352),8329=>array(18,-24,323,352),8330=>array(37,22,296,281),8331=>array(37,123,296,180),8332=>array(37,63,296,240),8333=>array(32,-164,195,396),8334=>array(16,-164,178,396),8352=>array(20,0,547,719),8353=>array(51,-63,525,782),8354=>array(45,-12,533,728),8355=>array(80,0,554,716),8356=>array(13,-14,528,728),8357=>array(65,-71,769,652),8358=>array(21,0,535,719),8359=>array(21,0,539,716),8360=>array(18,-12,986,716),8361=>array(8,0,929,716),8362=>array(72,0,712,518),8363=>array(67,0,514,723),8364=>array(-14,-12,541,728),8400=>array(28,574,552,716),8401=>array(48,574,572,716),8402=>array(264,-194,336,706),8403=>array(264,-12,336,524),8404=>array(34,419,668,646),8405=>array(32,419,666,646),8406=>array(28,504,555,716),8407=>array(45,504,572,716),8408=>array(146,102,454,410),8409=>array(146,102,465,421),8410=>array(146,91,465,410),8411=>array(112,611,488,707),8412=>array(42,611,558,707),8413=>array(63,-131,837,643),8414=>array(93,-101,807,613),8415=>array(9,-186,891,697),8416=>array(63,-131,837,643),8417=>array(28,504,672,716),8448=>array(46,-27,825,728),8449=>array(46,-27,822,728),8450=>array(37,-15,632,677),8451=>array(44,-12,983,728),8452=>array(41,0,588,662),8453=>array(53,-27,836,728),8454=>array(53,-27,823,728),8455=>array(42,-15,480,677),8456=>array(30,-15,630,677),8457=>array(44,0,873,725),8458=>array(-25,-201,523,327),8459=>array(23,-9,1078,665),8460=>array(46,-20,940,698),8461=>array(19,0,703,662),8462=>array(19,-12,458,694),8463=>array(19,-12,458,694),8464=>array(8,-201,834,654),8465=>array(26,-20,498,677),8466=>array(48,-8,842,664),8467=>array(5,-5,288,627),8468=>array(3,-12,739,716),8469=>array(-12,-11,710,662),8470=>array(79,0,1031,716),8471=>array(0,-9,737,728),8472=>array(48,-216,701,516),8473=>array(19,0,524,662),8474=>array(37,-198,685,677),8475=>array(71,-13,951,658),8476=>array(46,-20,747,686),8477=>array(19,0,677,662),8478=>array(19,0,677,662),8479=>array(19,-176,677,817),8480=>array(93,311,866,723),8481=>array(100,318,1085,716),8482=>array(100,318,861,716),8483=>array(10,-176,711,817),8484=>array(11,0,581,662),8485=>array(50,-192,494,690),8486=>array(28,0,740,677),8487=>array(28,-15,740,662),8488=>array(28,-194,644,687),8489=>array(2,0,245,530),8490=>array(73,0,665,716),8491=>array(-1,0,668,922),8492=>array(105,-5,951,659),8493=>array(53,-20,627,697),8494=>array(35,-12,521,530),8495=>array(31,-4,398,328),8496=>array(75,-6,671,666),8497=>array(35,-6,885,668),8498=>array(47,0,530,716),8499=>array(36,-12,1214,661),8500=>array(37,-6,379,318),8501=>array(64,-19,649,716),8502=>array(67,0,631,716),8503=>array(25,0,325,716),8504=>array(72,-18,630,716),8531=>array(52,-25,815,732),8532=>array(12,-25,815,732),8533=>array(52,-25,813,732),8534=>array(12,-25,813,732),8535=>array(16,-25,813,732),8536=>array(11,-25,813,732),8537=>array(52,-25,813,732),8538=>array(16,-25,813,732),8539=>array(52,-25,804,732),8540=>array(16,-25,804,732),8541=>array(16,-25,804,732),8542=>array(73,-25,804,732),8543=>array(52,-25,727,732),8544=>array(92,0,187,716),8545=>array(92,0,464,716),8546=>array(92,0,741,716),8547=>array(92,0,934,716),8548=>array(6,0,660,716),8549=>array(6,0,843,716),8550=>array(2,0,960,716),8551=>array(2,0,1197,716),8552=>array(92,0,940,716),8553=>array(5,0,661,716),8554=>array(5,0,853,716),8555=>array(5,0,964,716),8556=>array(75,0,523,716),8557=>array(51,-12,683,728),8558=>array(80,0,672,716),8559=>array(76,0,757,716),8560=>array(67,0,155,716),8561=>array(67,0,377,716),8562=>array(67,0,599,716),8563=>array(67,0,697,716),8564=>array(13,0,488,518),8565=>array(13,0,633,716),8566=>array(13,0,855,716),8567=>array(13,0,1077,716),8568=>array(67,0,708,716),8569=>array(7,0,493,518),8570=>array(7,0,645,716),8571=>array(7,0,867,716),8572=>array(67,0,155,716),8573=>array(39,-12,491,530),8574=>array(36,-12,486,716),8575=>array(65,0,769,530),8576=>array(47,0,936,716),8577=>array(80,0,672,716),8578=>array(47,0,936,716),8592=>array(40,100,673,412),8593=>array(201,0,513,662),8594=>array(40,100,673,412),8595=>array(201,0,513,662),8596=>array(40,100,673,412),8597=>array(201,0,513,662),8598=>array(100,102,586,588),8599=>array(128,102,614,588),8600=>array(128,74,614,560),8601=>array(100,74,586,560),8602=>array(40,100,673,412),8603=>array(40,100,673,412),8604=>array(40,100,674,412),8605=>array(39,100,673,412),8606=>array(40,100,673,412),8607=>array(201,0,513,662),8608=>array(40,100,673,412),8609=>array(201,0,513,662),8610=>array(40,100,673,412),8611=>array(40,100,673,412),8612=>array(40,100,673,412),8613=>array(201,0,513,662),8614=>array(40,100,673,412),8615=>array(201,0,513,662),8616=>array(201,0,513,662),8617=>array(40,100,673,482),8618=>array(40,100,673,482),8619=>array(40,100,673,500),8620=>array(40,100,673,500),8621=>array(40,100,774,412),8622=>array(40,100,773,412),8623=>array(199,0,520,662),8624=>array(120,71,553,603),8625=>array(160,71,593,603),8626=>array(120,59,553,591),8627=>array(160,59,593,591),8628=>array(97,94,629,527),8629=>array(120,59,553,591),8630=>array(67,181,638,497),8631=>array(75,181,646,497),8632=>array(81,102,633,662),8633=>array(40,-56,673,568),8634=>array(60,21,740,701),8635=>array(60,21,740,701),8636=>array(40,232,673,412),8637=>array(40,100,673,280),8638=>array(333,0,513,662),8639=>array(201,0,381,662),8640=>array(40,232,673,412),8641=>array(40,100,673,280),8642=>array(333,0,513,662),8643=>array(201,0,381,662),8644=>array(40,-56,673,568),8645=>array(45,0,669,662),8646=>array(40,-56,673,568),8647=>array(40,-56,673,568),8648=>array(45,0,669,662),8649=>array(40,-56,673,568),8650=>array(45,0,669,662),8651=>array(39,30,672,482),8652=>array(40,30,673,482),8653=>array(40,40,673,472),8654=>array(40,40,910,472),8655=>array(40,40,673,472),8656=>array(40,40,673,472),8657=>array(141,0,573,662),8658=>array(40,40,673,472),8659=>array(141,0,573,662),8660=>array(40,40,823,472),8661=>array(141,0,573,783),8662=>array(100,0,688,588),8663=>array(26,0,614,588),8664=>array(26,0,614,588),8665=>array(100,0,688,588),8666=>array(40,40,673,472),8667=>array(40,40,673,472),8668=>array(40,100,773,412),8669=>array(40,100,773,412),8670=>array(201,0,513,662),8671=>array(201,0,513,662),8672=>array(40,100,673,412),8673=>array(201,0,513,662),8674=>array(40,100,673,412),8675=>array(201,0,513,662),8676=>array(40,100,673,412),8677=>array(40,100,673,412),8678=>array(40,40,673,472),8679=>array(141,0,573,662),8680=>array(40,40,673,472),8681=>array(141,0,573,662),8682=>array(141,0,573,662),8704=>array(27,0,573,689),8705=>array(80,-60,528,702),8706=>array(32,-15,486,695),8707=>array(115,0,475,689),8708=>array(115,-73,475,762),8709=>array(46,-23,755,686),8710=>array(6,0,608,688),8711=>array(6,0,608,688),8712=>array(43,33,498,480),8713=>array(43,-57,498,570),8714=>array(89,78,453,435),8715=>array(51,33,506,480),8716=>array(51,-57,506,570),8717=>array(96,78,460,435),8718=>array(98,0,451,512),8719=>array(25,-101,803,751),8720=>array(25,-101,803,751),8721=>array(17,-101,695,752),8722=>array(55,312,529,394),8723=>array(55,0,529,611),8724=>array(55,0,529,627),8725=>array(-222,-25,393,732),8726=>array(0,-24,278,716),8727=>array(33,194,356,499),8728=>array(65,207,335,478),8729=>array(65,207,335,478),8730=>array(41,-19,549,782),8731=>array(41,-19,549,782),8732=>array(41,-19,549,782),8733=>array(75,128,447,384),8734=>array(20,99,529,414),8735=>array(55,0,529,474),8736=>array(55,0,529,474),8737=>array(55,0,529,474),8738=>array(55,-98,444,572),8739=>array(92,-199,168,716),8740=>array(92,-199,352,716),8741=>array(92,-199,326,716),8742=>array(92,-199,510,716),8743=>array(20,0,542,568),8744=>array(20,0,542,568),8745=>array(50,0,512,568),8746=>array(50,0,512,568),8747=>array(63,-271,434,1022),8748=>array(63,-271,734,1022),8749=>array(63,-271,1034,1022),8750=>array(33,-271,459,1022),8751=>array(33,-271,759,1022),8752=>array(33,-271,1059,1022),8753=>array(33,-271,488,1022),8754=>array(33,-271,488,1022),8755=>array(33,-271,498,1022),8756=>array(42,0,521,528),8757=>array(42,0,521,528),8758=>array(161,0,260,528),8759=>array(42,0,521,528),8760=>array(55,312,529,567),8761=>array(55,139,529,567),8762=>array(55,139,529,567),8763=>array(55,139,529,567),8764=>array(55,279,529,424),8765=>array(55,279,529,424),8766=>array(35,212,539,496),8767=>array(40,72,544,636),8768=>array(139,0,284,592),8769=>array(55,171,529,533),8770=>array(55,202,529,535),8771=>array(55,203,529,536),8772=>array(55,91,529,613),8773=>array(55,123,529,584),8774=>array(55,51,529,614),8775=>array(55,51,529,633),8776=>array(55,171,529,533),8777=>array(55,81,529,603),8778=>array(55,123,529,584),8779=>array(55,97,529,584),8780=>array(35,53,539,654),8781=>array(55,155,529,551),8782=>array(55,58,529,648),8783=>array(55,203,529,648),8784=>array(55,203,529,676),8785=>array(55,59,529,647),8786=>array(55,59,529,647),8787=>array(55,59,529,647),8788=>array(55,195,682,511),8789=>array(55,195,682,511),8790=>array(55,189,529,518),8791=>array(55,0,529,617),8792=>array(55,0,529,518),8793=>array(55,0,529,630),8794=>array(55,0,529,630),8795=>array(55,0,529,651),8796=>array(55,0,529,701),8797=>array(55,0,529,605),8798=>array(55,0,529,532),8799=>array(55,0,529,601),8800=>array(55,103,529,603),8801=>array(55,123,529,557),8802=>array(55,23,529,657),8803=>array(55,35,529,645),8804=>array(55,55,529,650),8805=>array(55,55,529,650),8806=>array(55,0,529,783),8807=>array(55,0,529,783),8808=>array(55,-85,529,783),8809=>array(55,-85,529,783),8810=>array(55,111,914,595),8811=>array(55,111,914,595),8812=>array(143,-210,441,728),8813=>array(55,103,529,603),8814=>array(55,23,529,657),8815=>array(55,23,529,657),8816=>array(55,-141,529,657),8817=>array(55,-141,529,657),8818=>array(55,-1,529,656),8819=>array(55,-1,529,656),8820=>array(55,-91,529,718),8821=>array(55,-91,529,718),8822=>array(55,-27,529,821),8823=>array(55,-27,529,821),8824=>array(55,-27,529,821),8825=>array(55,-27,529,821),8826=>array(55,111,529,595),8827=>array(55,111,529,595),8828=>array(55,-33,529,595),8829=>array(55,-33,529,595),8830=>array(55,-1,529,656),8831=>array(55,-1,529,656),8832=>array(55,23,529,657),8833=>array(55,23,529,657),8834=>array(55,122,623,584),8835=>array(55,122,623,584),8836=>array(55,22,623,684),8837=>array(55,22,623,684),8838=>array(55,0,623,626),8839=>array(55,0,623,626),8840=>array(55,-100,623,726),8841=>array(55,-100,623,726),8842=>array(55,-100,623,626),8843=>array(55,-100,623,626),8844=>array(50,0,512,568),8845=>array(50,0,512,568),8846=>array(50,0,512,568),8847=>array(55,122,623,584),8848=>array(55,122,623,584),8849=>array(55,0,623,626),8850=>array(55,0,623,626),8851=>array(50,0,512,568),8852=>array(50,0,512,568),8853=>array(59,-85,741,597),8854=>array(59,-85,741,597),8855=>array(59,-85,741,597),8856=>array(59,-85,741,597),8857=>array(59,-85,741,597),8858=>array(59,-85,741,597),8859=>array(59,-85,741,597),8860=>array(59,-85,741,597),8861=>array(59,-85,741,597),8862=>array(60,0,741,681),8863=>array(60,0,741,681),8864=>array(60,0,741,681),8865=>array(60,0,741,681),8866=>array(60,0,531,512),8867=>array(18,0,489,512),8868=>array(18,0,531,512),8869=>array(18,0,531,512),8870=>array(60,0,381,512),8871=>array(60,0,381,512),8872=>array(60,0,531,512),8873=>array(60,0,531,512),8874=>array(60,0,531,512),8875=>array(60,0,654,512),8876=>array(60,0,531,513),8877=>array(60,0,531,513),8878=>array(60,0,531,513),8879=>array(60,0,654,513),8880=>array(18,-54,531,566),8881=>array(18,-54,531,566),8882=>array(18,0,531,512),8883=>array(18,0,531,512),8884=>array(18,-51,531,562),8885=>array(18,-51,531,562),8886=>array(40,153,673,359),8887=>array(40,153,673,359),8888=>array(40,153,673,359),8889=>array(18,0,531,512),8890=>array(88,0,461,632),8891=>array(50,0,534,638),8892=>array(50,0,534,638),8893=>array(50,0,534,638),8894=>array(55,0,529,474),8895=>array(55,0,529,474),8896=>array(20,0,542,568),8897=>array(20,0,542,568),8898=>array(50,0,512,568),8899=>array(50,0,512,568),8900=>array(156,106,395,406),8901=>array(55,186,195,326),8902=>array(39,39,511,488),8903=>array(30,9,620,502),8904=>array(29,-64,601,576),8905=>array(29,-64,601,576),8906=>array(29,-64,601,576),8907=>array(29,-64,601,576),8908=>array(29,-64,601,576),8909=>array(55,203,529,536),8910=>array(18,0,542,568),8911=>array(18,0,542,568),8912=>array(56,84,623,626),8913=>array(56,84,623,626),8914=>array(63,0,605,567),8915=>array(63,0,605,567),8916=>array(50,0,512,716),8917=>array(55,-199,529,716),8918=>array(55,111,529,595),8919=>array(55,111,529,595),8920=>array(55,111,1299,595),8921=>array(55,111,1299,595),8922=>array(55,-217,529,927),8923=>array(55,-217,529,927),8924=>array(55,55,529,650),8925=>array(55,55,529,650),8926=>array(55,-33,529,595),8927=>array(55,-33,529,595),8928=>array(55,-141,529,657),8929=>array(55,-141,529,657),8930=>array(55,-100,623,726),8931=>array(55,-100,623,726),8932=>array(55,-100,623,626),8933=>array(55,-100,623,626),8934=>array(55,-71,529,656),8935=>array(55,-71,529,656),8936=>array(55,-71,529,656),8937=>array(55,-71,529,656),8938=>array(55,23,529,657),8939=>array(55,23,529,657),8940=>array(55,-45,529,712),8941=>array(55,-45,529,712),8942=>array(89,0,189,766),8943=>array(117,333,883,433),8944=>array(117,0,883,766),8945=>array(117,0,883,766),8960=>array(60,41,490,471),8962=>array(51,24,498,486),8963=>array(129,180,419,395),8964=>array(129,117,419,332),8965=>array(78,130,471,441),8966=>array(78,130,471,565),8967=>array(191,-192,359,693),8968=>array(103,58,346,694),8969=>array(103,58,346,694),8970=>array(103,-192,346,444),8971=>array(103,-192,346,444),8972=>array(251,-40,571,280),8973=>array(-22,-40,299,280),8974=>array(251,232,571,552),8975=>array(-22,232,299,552),8976=>array(49,163,511,403),8977=>array(83,64,467,448),8978=>array(59,156,741,497),8979=>array(59,156,741,497),8980=>array(34,100,516,441),8981=>array(27,9,490,471),8982=>array(26,-102,523,614),8983=>array(18,-51,632,563),8984=>array(63,0,717,654),8985=>array(49,109,511,349),8986=>array(45,-20,505,532),8987=>array(103,0,447,512),8988=>array(111,140,391,420),8989=>array(158,140,439,420),8990=>array(111,92,391,372),8991=>array(158,92,439,372),8992=>array(180,-218,434,752),8993=>array(63,-188,313,782),8994=>array(17,159,696,341),8995=>array(17,171,696,353),8996=>array(18,226,982,547),8997=>array(18,0,982,512),8998=>array(90,0,948,600),8999=>array(90,0,910,600),9000=>array(90,0,910,600),9001=>array(32,-184,299,694),9002=>array(30,-184,297,694),9003=>array(52,0,910,600),9004=>array(57,6,493,509),9005=>array(13,77,537,435),9006=>array(100,108,465,400),9007=>array(38,132,511,380),9008=>array(38,0,504,525),9009=>array(81,62,509,450),9010=>array(35,50,531,462),9011=>array(35,186,531,392),9012=>array(51,84,498,419),9013=>array(51,84,498,419),9014=>array(60,0,540,559),9015=>array(140,0,460,559),9016=>array(60,0,540,559),9017=>array(60,0,540,559),9018=>array(60,0,540,559),9019=>array(60,0,540,559),9020=>array(60,0,540,559),9021=>array(104,0,496,559),9022=>array(60,39,540,519),9023=>array(84,0,517,559),9024=>array(83,0,516,559),9025=>array(60,0,540,559),9026=>array(60,0,540,559),9027=>array(60,0,540,559),9028=>array(60,0,540,559),9029=>array(13,0,556,559),9030=>array(44,0,587,559),9031=>array(60,0,540,559),9032=>array(60,0,540,559),9033=>array(104,0,496,559),9034=>array(60,0,540,559),9035=>array(122,0,478,559),9036=>array(60,0,540,559),9037=>array(60,0,540,559),9038=>array(60,0,540,559),9039=>array(60,0,540,559),9040=>array(60,0,540,559),9041=>array(60,0,540,559),9042=>array(122,0,478,559),9043=>array(60,0,540,559),9044=>array(60,0,540,559),9045=>array(60,0,540,559),9046=>array(60,0,540,559),9047=>array(60,0,540,559),9048=>array(160,0,440,559),9049=>array(60,0,540,559),9050=>array(60,0,540,559),9051=>array(60,0,540,397),9052=>array(60,0,540,475),9053=>array(60,0,540,559),9054=>array(60,0,540,559),9055=>array(60,39,540,519),9056=>array(60,0,540,559),9057=>array(60,0,540,559),9058=>array(122,0,478,559),9059=>array(153,157,447,509),9060=>array(153,161,447,524),9061=>array(104,33,496,559),9062=>array(60,0,540,559),9063=>array(54,0,542,559),9064=>array(50,131,549,464),9065=>array(148,122,452,559),9066=>array(160,122,440,478),9067=>array(103,68,502,508),9068=>array(93,-14,504,573),9069=>array(50,0,549,559),9070=>array(160,-136,440,559),9071=>array(60,0,540,559),9072=>array(60,0,540,559),9073=>array(51,55,550,469),9074=>array(50,89,549,503),9075=>array(163,-14,427,475),9076=>array(90,-212,525,475),9077=>array(26,-14,574,475),9078=>array(60,-136,555,475),9079=>array(60,-136,540,480),9080=>array(160,-136,440,475),9081=>array(26,-136,574,475),9082=>array(61,-14,555,475),9109=>array(60,0,540,559),9216=>array(30,0,565,689),9217=>array(37,0,564,694),9218=>array(37,0,587,694),9219=>array(41,0,587,689),9220=>array(41,0,582,689),9221=>array(41,-42,583,689),9222=>array(9,0,594,689),9223=>array(34,0,565,689),9224=>array(134,112,465,574),9225=>array(134,116,482,574),9226=>array(141,116,462,574),9227=>array(109,116,482,574),9228=>array(141,116,462,574),9229=>array(120,116,489,579),9230=>array(137,112,472,579),9231=>array(137,116,449,579),9232=>array(34,0,560,689),9233=>array(34,0,564,689),9234=>array(34,0,558,689),9235=>array(34,-4,559,689),9236=>array(34,0,573,689),9237=>array(30,0,594,689),9238=>array(37,0,568,694),9239=>array(41,0,575,689),9240=>array(20,0,568,694),9241=>array(141,116,472,574),9242=>array(37,0,575,694),9243=>array(41,-4,573,689),9244=>array(141,112,465,574),9245=>array(120,112,465,579),9246=>array(134,112,465,574),9247=>array(134,112,465,574),9248=>array(137,116,471,579),9249=>array(34,0,565,689),9250=>array(46,-12,561,716),9251=>array(96,-126,505,0),9252=>array(130,116,465,574),9280=>array(103,1,514,650),9281=>array(102,0,514,650),9282=>array(103,1,514,650),9283=>array(103,1,514,650),9284=>array(102,1,514,650),9285=>array(102,336,514,650),9286=>array(102,0,648,702),9287=>array(102,0,648,702),9288=>array(102,117,648,663),9289=>array(102,195,648,507),9290=>array(30,1,574,650),9312=>array(81,-109,919,728),9313=>array(81,-109,919,728),9314=>array(81,-109,919,728),9315=>array(81,-109,919,728),9316=>array(81,-109,919,728),9317=>array(81,-109,919,728),9318=>array(81,-109,919,728),9319=>array(81,-109,919,728),9320=>array(81,-109,919,728),9321=>array(81,-109,919,728),9322=>array(81,-109,919,728),9323=>array(81,-109,919,728),9324=>array(81,-109,919,728),9325=>array(81,-109,919,728),9326=>array(81,-109,919,728),9327=>array(81,-109,919,728),9328=>array(81,-109,919,728),9329=>array(81,-109,919,728),9330=>array(81,-109,919,728),9331=>array(81,-109,919,728),9332=>array(81,-67,919,683),9333=>array(81,-67,919,683),9334=>array(81,-67,919,683),9335=>array(81,-67,919,683),9336=>array(81,-67,919,683),9337=>array(81,-67,919,683),9338=>array(81,-67,919,683),9339=>array(81,-67,919,683),9340=>array(81,-67,919,683),9341=>array(81,-67,919,683),9342=>array(81,-67,919,683),9343=>array(81,-67,919,683),9344=>array(81,-67,919,683),9345=>array(81,-67,919,683),9346=>array(81,-67,919,683),9347=>array(81,-67,919,683),9348=>array(81,-67,919,683),9349=>array(81,-67,919,683),9350=>array(81,-67,919,683),9351=>array(81,-67,919,683),9352=>array(301,79,627,547),9353=>array(273,79,717,547),9354=>array(277,72,717,547),9355=>array(253,79,717,545),9356=>array(272,72,717,539),9357=>array(266,72,717,547),9358=>array(294,79,717,539),9359=>array(275,72,717,547),9360=>array(282,72,717,547),9361=>array(163,72,807,547),9362=>array(191,79,807,547),9363=>array(155,79,807,547),9364=>array(155,72,807,547),9365=>array(159,79,807,547),9366=>array(159,72,807,547),9367=>array(159,72,807,547),9368=>array(159,79,807,547),9369=>array(159,72,807,547),9370=>array(159,72,807,547),9371=>array(185,72,817,547),9372=>array(81,-67,919,683),9373=>array(81,-67,919,683),9374=>array(81,-67,919,683),9375=>array(81,-67,919,683),9376=>array(81,-67,919,683),9377=>array(81,-67,919,683),9378=>array(81,-67,919,683),9379=>array(81,-67,919,683),9380=>array(81,-67,919,683),9381=>array(81,-67,919,683),9382=>array(81,-67,919,683),9383=>array(81,-67,919,683),9384=>array(81,-67,919,683),9385=>array(81,-67,919,683),9386=>array(81,-67,919,683),9387=>array(81,-67,919,683),9388=>array(81,-67,919,683),9389=>array(81,-67,919,683),9390=>array(81,-67,919,683),9391=>array(81,-67,919,683),9392=>array(81,-67,919,683),9393=>array(81,-67,919,683),9394=>array(81,-67,919,683),9395=>array(81,-67,919,683),9396=>array(81,-67,919,683),9397=>array(81,-67,919,683),9398=>array(81,-109,919,728),9399=>array(81,-109,919,728),9400=>array(81,-109,919,728),9401=>array(81,-109,919,728),9402=>array(81,-109,919,728),9403=>array(81,-109,919,728),9404=>array(81,-109,919,728),9405=>array(81,-109,919,728),9406=>array(81,-109,919,728),9407=>array(81,-109,919,728),9408=>array(81,-109,919,728),9409=>array(81,-109,919,728),9410=>array(81,-109,919,728),9411=>array(81,-109,919,728),9412=>array(81,-109,919,728),9413=>array(81,-109,919,728),9414=>array(81,-109,919,728),9415=>array(81,-109,919,728),9416=>array(81,-109,919,728),9417=>array(81,-109,919,728),9418=>array(81,-109,919,728),9419=>array(81,-109,919,728),9420=>array(81,-109,919,728),9421=>array(81,-109,919,728),9422=>array(81,-109,919,728),9423=>array(81,-109,919,728),9424=>array(81,-109,919,728),9425=>array(81,-109,919,728),9426=>array(81,-109,919,728),9427=>array(81,-109,919,728),9428=>array(81,-109,919,728),9429=>array(81,-109,919,728),9430=>array(81,-109,919,728),9431=>array(81,-109,919,728),9432=>array(81,-109,919,728),9433=>array(81,-109,919,728),9434=>array(81,-109,919,728),9435=>array(81,-109,919,728),9436=>array(81,-109,919,728),9437=>array(81,-109,919,728),9438=>array(81,-109,919,728),9439=>array(81,-109,919,728),9440=>array(81,-109,919,728),9441=>array(81,-109,919,728),9442=>array(81,-109,919,728),9443=>array(81,-109,919,728),9444=>array(81,-109,919,728),9445=>array(81,-109,919,728),9446=>array(81,-109,919,728),9447=>array(81,-109,919,728),9448=>array(81,-109,919,728),9449=>array(81,-109,919,728),9450=>array(81,-109,919,728),9472=>array(-11,340,611,425),9473=>array(-11,303,611,474),9474=>array(258,-218,343,994),9475=>array(215,-218,386,994),9476=>array(-11,346,611,431),9477=>array(-11,303,611,474),9478=>array(258,-218,343,994),9479=>array(215,-218,386,994),9480=>array(-11,346,611,431),9481=>array(-11,303,611,474),9482=>array(258,-218,343,994),9483=>array(215,-218,386,994),9484=>array(258,-218,611,431),9485=>array(258,-218,611,474),9486=>array(215,-218,611,431),9487=>array(215,-218,611,474),9488=>array(-11,-218,343,431),9489=>array(-11,-218,343,474),9490=>array(-11,-218,386,431),9491=>array(-11,-218,386,474),9492=>array(258,346,611,994),9493=>array(258,303,611,994),9494=>array(215,346,611,994),9495=>array(215,303,611,994),9496=>array(-11,346,343,994),9497=>array(-11,303,343,994),9498=>array(-11,346,386,994),9499=>array(-11,303,386,994),9500=>array(258,-218,611,994),9501=>array(258,-218,611,994),9502=>array(215,-218,611,994),9503=>array(215,-218,611,994),9504=>array(215,-218,611,994),9505=>array(215,-218,611,994),9506=>array(215,-218,611,994),9507=>array(215,-218,611,994),9508=>array(-11,-218,343,994),9509=>array(-11,-218,343,994),9510=>array(-11,-218,386,994),9511=>array(-11,-218,386,994),9512=>array(-11,-218,386,994),9513=>array(-11,-218,386,994),9514=>array(-11,-218,386,994),9515=>array(-11,-218,386,994),9516=>array(-11,-218,611,431),9517=>array(-11,-218,611,474),9518=>array(-11,-218,611,474),9519=>array(-11,-218,611,474),9520=>array(-11,-218,611,431),9521=>array(-11,-218,611,474),9522=>array(-11,-218,611,474),9523=>array(-11,-218,611,474),9524=>array(-11,346,611,994),9525=>array(-11,303,611,994),9526=>array(-11,303,611,994),9527=>array(-11,303,611,994),9528=>array(-11,346,611,994),9529=>array(-11,303,611,994),9530=>array(-11,303,611,994),9531=>array(-11,303,611,994),9532=>array(-11,-218,611,994),9533=>array(-11,-218,611,994),9534=>array(-11,-218,611,994),9535=>array(-11,-218,611,994),9536=>array(-11,-218,611,994),9537=>array(-11,-218,611,994),9538=>array(-11,-218,611,994),9539=>array(-11,-218,611,994),9540=>array(-11,-218,611,994),9541=>array(-11,-218,611,994),9542=>array(-11,-218,611,994),9543=>array(-11,-218,611,994),9544=>array(-11,-218,611,994),9545=>array(-11,-218,611,994),9546=>array(-11,-218,611,994),9547=>array(-11,-218,611,994),9548=>array(-11,346,611,431),9549=>array(-11,303,611,474),9550=>array(258,-218,343,994),9551=>array(215,-218,386,994),9552=>array(-11,261,611,516),9553=>array(173,-218,428,994),9554=>array(258,-218,611,516),9555=>array(173,-218,611,431),9556=>array(173,-218,611,516),9557=>array(-11,-218,343,516),9558=>array(-11,-218,428,431),9559=>array(-11,-218,428,516),9560=>array(258,261,611,994),9561=>array(173,346,611,994),9562=>array(173,261,611,994),9563=>array(-11,261,343,994),9564=>array(-11,346,428,994),9565=>array(-11,261,428,994),9566=>array(258,-218,611,994),9567=>array(173,-218,611,994),9568=>array(173,-218,611,994),9569=>array(-11,-218,343,994),9570=>array(-11,-218,428,994),9571=>array(-11,-218,428,994),9572=>array(-11,-218,611,516),9573=>array(-11,-218,611,431),9574=>array(-11,-218,611,516),9575=>array(-11,261,611,994),9576=>array(-11,346,611,994),9577=>array(-11,261,611,994),9578=>array(-11,-218,611,994),9579=>array(-11,-218,611,994),9580=>array(-11,-218,611,994),9581=>array(258,77,612,431),9582=>array(-11,77,343,431),9583=>array(-11,346,343,700),9584=>array(258,346,612,700),9585=>array(0,88,600,688),9586=>array(0,88,600,688),9587=>array(0,88,600,688),9588=>array(-11,346,258,431),9589=>array(258,431,343,994),9590=>array(343,346,611,431),9591=>array(258,-218,343,346),9592=>array(-11,303,258,474),9593=>array(215,431,386,994),9594=>array(343,303,611,474),9595=>array(215,-218,386,346),9596=>array(-11,303,611,474),9597=>array(215,-218,386,994),9598=>array(-11,303,611,474),9599=>array(215,-218,386,994),9600=>array(-11,388,611,994),9601=>array(-11,-218,611,-66),9602=>array(-11,-218,611,85),9603=>array(-11,-218,611,237),9604=>array(-11,-218,611,388),9605=>array(-11,-218,611,540),9606=>array(-11,-218,611,691),9607=>array(-11,-218,611,843),9608=>array(-11,-218,611,994),9609=>array(-11,-218,525,994),9610=>array(-11,-218,450,994),9611=>array(-11,-218,375,994),9612=>array(-11,-218,300,994),9613=>array(-11,-218,225,994),9614=>array(-11,-218,150,994),9615=>array(-11,-218,75,994),9616=>array(300,-218,611,994),9617=>array(100,-262,600,1043),9618=>array(0,-264,601,1042),9619=>array(0,-262,601,1042),9620=>array(-11,843,611,994),9621=>array(525,-218,611,994),9632=>array(85,160,515,590),9633=>array(85,160,515,590),9634=>array(85,160,515,590),9635=>array(85,160,515,590),9636=>array(85,160,515,590),9637=>array(85,160,515,590),9638=>array(85,160,515,590),9639=>array(85,160,515,590),9640=>array(85,160,515,590),9641=>array(85,160,515,590),9642=>array(192,267,408,483),9643=>array(192,267,408,483),9644=>array(85,267,515,483),9645=>array(85,267,515,483),9646=>array(192,160,408,590),9647=>array(192,160,408,590),9648=>array(79,275,521,475),9649=>array(79,275,521,475),9650=>array(89,211,511,611),9651=>array(89,211,511,611),9652=>array(146,285,454,552),9653=>array(146,285,454,552),9654=>array(136,164,536,586),9655=>array(136,164,536,586),9656=>array(211,221,478,529),9657=>array(211,221,478,529),9658=>array(85,194,541,556),9659=>array(85,194,541,556),9660=>array(89,139,511,539),9661=>array(89,139,511,539),9662=>array(146,198,454,465),9663=>array(146,198,454,465),9664=>array(64,164,464,586),9665=>array(64,164,464,586),9666=>array(122,221,389,529),9667=>array(122,221,389,529),9668=>array(59,194,515,556),9669=>array(59,194,515,556),9670=>array(69,144,531,606),9671=>array(69,144,531,606),9672=>array(69,144,531,606),9673=>array(85,160,515,590),9674=>array(85,80,515,670),9675=>array(85,160,515,590),9676=>array(86,161,514,589),9677=>array(85,160,515,590),9678=>array(85,160,515,590),9679=>array(85,160,515,590),9680=>array(85,160,515,590),9681=>array(85,160,515,590),9682=>array(85,160,515,590),9683=>array(85,160,515,590),9684=>array(85,160,515,590),9685=>array(85,160,515,590),9686=>array(85,160,300,590),9687=>array(300,160,515,590),9688=>array(0,0,600,600),9689=>array(0,0,600,600),9690=>array(0,300,600,600),9691=>array(0,0,600,300),9692=>array(85,375,300,590),9693=>array(300,375,515,590),9694=>array(300,160,515,375),9695=>array(85,160,300,375),9696=>array(85,375,515,590),9697=>array(85,160,515,375),9698=>array(85,160,515,590),9699=>array(85,160,515,590),9700=>array(85,160,515,590),9701=>array(85,160,515,590),9702=>array(193,268,407,482),9703=>array(85,160,515,590),9704=>array(85,160,515,590),9705=>array(85,160,515,590),9706=>array(85,160,515,590),9707=>array(85,160,515,590),9708=>array(89,211,511,611),9709=>array(89,211,511,611),9710=>array(89,211,511,611),9711=>array(20,95,580,655),9728=>array(65,1,685,621),9729=>array(58,166,944,652),9730=>array(76,6,674,622),9731=>array(105,-3,672,690),9732=>array(81,0,923,690),9733=>array(37,0,779,719),9734=>array(37,0,786,720),9735=>array(107,12,356,451),9736=>array(35,53,436,449),9737=>array(70,0,730,660),9738=>array(70,50,730,620),9739=>array(70,50,730,620),9740=>array(200,100,677,577),9741=>array(100,0,700,600),9742=>array(22,63,696,521),9743=>array(22,63,696,521),9744=>array(63,0,671,607),9745=>array(63,0,671,607),9746=>array(63,0,671,607),9747=>array(129,0,633,668),9754=>array(27,56,924,451),9755=>array(36,56,933,451),9756=>array(84,168,899,531),9757=>array(288,-79,651,736),9758=>array(41,168,856,531),9759=>array(288,-36,651,779),9760=>array(24,15,720,725),9761=>array(50,40,546,610),9762=>array(56,22,694,660),9763=>array(46,115,704,724),9764=>array(45,0,535,652),9765=>array(24,0,436,699),9766=>array(35,0,409,699),9767=>array(87,0,589,637),9768=>array(35,0,409,699),9769=>array(54,20,714,680),9770=>array(88,0,727,664),9771=>array(70,-24,778,656),9772=>array(78,-2,596,691),9773=>array(56,0,741,732),9774=>array(64,0,686,622),9775=>array(64,0,686,622),9776=>array(70,0,830,639),9777=>array(70,0,830,639),9778=>array(70,0,830,639),9779=>array(70,0,830,639),9780=>array(70,0,830,639),9781=>array(70,0,830,639),9782=>array(70,0,830,639),9783=>array(70,0,830,639),9784=>array(60,32,690,661),9785=>array(64,0,686,622),9786=>array(64,0,686,622),9787=>array(64,0,686,622),9788=>array(75,11,675,611),9789=>array(84,-189,659,691),9790=>array(91,-189,666,691),9791=>array(150,-100,590,759),9792=>array(100,-100,640,699),9793=>array(100,-30,640,769),9794=>array(60,-30,711,621),9795=>array(45,0,573,699),9796=>array(26,0,432,699),9797=>array(45,0,587,699),9798=>array(23,0,757,719),9799=>array(80,0,487,699),9800=>array(38,0,796,709),9801=>array(36,0,744,703),9802=>array(35,0,699,699),9803=>array(45,0,842,699),9804=>array(41,-176,749,700),9805=>array(42,-162,1002,699),9806=>array(33,0,863,699),9807=>array(42,-72,1067,699),9808=>array(48,0,747,699),9809=>array(29,-90,808,699),9810=>array(36,106,886,618),9811=>array(34,0,662,699),9812=>array(83,-117,913,709),9813=>array(42,-117,954,729),9814=>array(154,-113,842,706),9815=>array(83,-103,913,707),9816=>array(76,-110,912,727),9817=>array(197,-103,803,710),9818=>array(83,-117,913,709),9819=>array(42,-117,954,729),9820=>array(154,-113,842,706),9821=>array(83,-103,913,707),9822=>array(76,-110,912,727),9823=>array(197,-103,803,710),9824=>array(49,0,673,705),9825=>array(49,0,685,705),9826=>array(51,0,623,706),9827=>array(49,0,755,705),9828=>array(49,0,673,705),9829=>array(49,0,685,705),9830=>array(51,0,623,706),9831=>array(49,0,755,705),9832=>array(56,24,804,680),9833=>array(48,0,316,736),9834=>array(48,0,556,736),9835=>array(48,-70,654,766),9836=>array(48,-70,654,766),9837=>array(107,10,400,736),9838=>array(107,-22,333,736),9839=>array(29,-22,411,736),9985=>array(56,49,901,637),9986=>array(38,48,923,635),9987=>array(56,49,901,637),9988=>array(6,0,979,551),9990=>array(68,-201,700,669),9991=>array(30,0,760,730),9992=>array(17,0,772,654),9993=>array(27,28,663,483),9996=>array(64,0,521,582),9997=>array(59,72,824,515),9998=>array(62,113,848,672),9999=>array(35,170,898,521),10000=>array(62,19,849,578),10001=>array(36,135,908,555),10002=>array(51,135,923,555),10003=>array(18,-10,722,706),10004=>array(34,-9,796,765),10005=>array(47,0,715,668),10006=>array(46,0,714,668),10007=>array(0,-58,567,638),10008=>array(25,-67,650,682),10009=>array(35,0,728,693),10010=>array(34,0,727,693),10011=>array(35,0,724,689),10012=>array(35,0,718,683),10013=>array(35,0,460,690),10014=>array(9,0,542,690),10015=>array(38,0,499,690),10016=>array(36,94,542,600),10017=>array(29,-12,663,720),10018=>array(37,-11,750,702),10019=>array(34,0,755,719),10020=>array(34,0,755,719),10021=>array(36,0,755,719),10022=>array(37,0,756,719),10023=>array(38,0,757,719),10025=>array(37,0,786,720),10026=>array(31,-13,757,713),10027=>array(49,0,792,719),10028=>array(37,0,786,719),10029=>array(42,0,791,719),10030=>array(34,0,783,719),10031=>array(35,-14,795,718),10032=>array(49,1,873,718),10033=>array(29,0,714,719),10034=>array(18,0,706,719),10035=>array(35,0,714,679),10036=>array(35,0,756,721),10037=>array(47,0,745,698),10038=>array(37,0,659,699),10039=>array(35,0,741,706),10040=>array(35,0,733,698),10041=>array(35,0,757,729),10042=>array(35,0,725,688),10043=>array(31,0,675,719),10044=>array(34,7,674,728),10045=>array(13,0,669,719),10046=>array(21,0,680,719),10047=>array(35,0,791,737),10048=>array(35,0,780,728),10049=>array(35,0,754,719),10050=>array(44,-14,745,695),10051=>array(28,0,679,719),10052=>array(32,0,655,696),10053=>array(29,0,667,696),10054=>array(1,0,688,687),10055=>array(30,0,757,719),10056=>array(42,-7,745,696),10057=>array(42,30,670,663),10058=>array(60,0,731,718),10059=>array(26,-21,759,711),10061=>array(41,-33,832,638),10063=>array(23,0,739,714),10064=>array(23,0,739,714),10065=>array(23,0,735,714),10066=>array(23,0,735,714),10070=>array(36,-12,749,701),10072=>array(29,0,109,712),10073=>array(29,0,248,712),10074=>array(29,0,386,712),10075=>array(56,265,336,706),10076=>array(56,265,336,706),10077=>array(38,265,630,706),10078=>array(38,265,630,706),10081=>array(87,-157,666,727),10082=>array(60,-14,484,716),10083=>array(28,-14,516,711),10084=>array(35,0,875,703),10085=>array(38,0,644,764),10086=>array(76,-15,681,709),10087=>array(0,110,760,514),10102=>array(35,-14,753,705),10103=>array(35,-14,753,705),10104=>array(35,-14,753,705),10105=>array(35,-14,753,705),10106=>array(35,-14,753,705),10107=>array(35,-14,753,705),10108=>array(35,-14,753,705),10109=>array(35,-14,753,705),10110=>array(35,-14,753,705),10111=>array(35,-14,753,705),10112=>array(35,-14,753,705),10113=>array(35,-14,753,705),10114=>array(35,-14,753,705),10115=>array(35,-14,753,705),10116=>array(35,-14,753,705),10117=>array(35,-14,753,705),10118=>array(35,-14,753,705),10119=>array(35,-14,753,705),10120=>array(35,-14,753,705),10121=>array(35,-14,753,705),10122=>array(35,-14,753,705),10123=>array(35,-14,753,705),10124=>array(35,-14,753,705),10125=>array(35,-14,753,705),10126=>array(35,-14,753,705),10127=>array(35,-14,753,705),10128=>array(35,-14,753,705),10129=>array(35,-14,753,705),10130=>array(35,-14,753,705),10131=>array(35,-14,753,705),10132=>array(22,66,879,640),10136=>array(106,19,675,558),10137=>array(33,73,909,520),10138=>array(121,-28,619,578),10139=>array(28,73,890,603),10140=>array(38,70,891,636),10141=>array(82,137,843,554),10142=>array(82,137,846,554),10143=>array(35,155,799,536),10144=>array(36,94,838,594),10145=>array(13,94,815,594),10146=>array(35,82,889,610),10147=>array(35,82,889,610),10148=>array(103,147,845,543),10149=>array(42,123,900,578),10150=>array(42,55,901,509),10151=>array(45,-85,418,772),10152=>array(21,-68,868,755),10153=>array(36,43,813,648),10154=>array(41,43,807,648),10155=>array(61,129,832,585),10156=>array(61,129,832,585),10157=>array(37,44,665,651),10158=>array(37,44,665,651),10159=>array(38,93,836,620),10161=>array(38,69,836,596),10162=>array(15,0,746,730),10163=>array(23,128,934,561),10164=>array(42,2,725,685),10165=>array(27,166,838,525),10166=>array(20,5,703,685),10167=>array(93,0,791,694),10168=>array(57,166,886,523),10169=>array(98,13,792,710),10170=>array(35,192,805,498),10171=>array(28,157,858,533),10172=>array(83,199,849,501),10173=>array(15,147,949,549),10174=>array(41,97,889,579),12289=>array(94,-86,336,167),12290=>array(86,-54,373,235),12291=>array(305,220,695,527),12292=>array(100,-35,933,800),12293=>array(137,5,781,779),12294=>array(148,4,839,695),12295=>array(106,-26,920,790),12296=>array(587,-69,921,837),12297=>array(79,-69,413,837),12298=>array(501,-69,950,837),12299=>array(50,-69,499,837),12300=>array(559,349,900,837),12301=>array(100,-68,446,419),12302=>array(560,349,930,835),12303=>array(70,-69,444,421),12304=>array(611,-69,900,837),12305=>array(100,-69,389,837),12306=>array(173,-18,827,735),12307=>array(144,20,845,750),12308=>array(625,-75,900,844),12309=>array(100,-75,375,844),12310=>array(570,-73,930,845),12311=>array(69,-73,429,845),12312=>array(649,-73,877,835),12313=>array(124,-74,352,834),12314=>array(578,-81,861,820),12315=>array(121,-82,404,819),12316=>array(39,289,961,466),12317=>array(535,523,901,853),12318=>array(100,523,466,853),12319=>array(181,-53,547,277),12320=>array(89,66,911,689),12321=>array(445,46,525,715),12322=>array(339,48,660,714),12323=>array(255,47,734,717),12324=>array(153,34,769,707),12325=>array(285,35,742,747),12326=>array(184,255,821,671),12327=>array(185,167,823,691),12328=>array(181,104,816,707),12329=>array(206,35,844,743),12330=>array(112,1,375,265),12331=>array(111,513,375,776),12332=>array(627,514,889,778),12333=>array(624,1,888,264),12334=>array(85,311,237,462),12335=>array(83,207,237,564),12336=>array(68,285,931,479),12337=>array(284,-60,729,810),12338=>array(199,-56,876,814),12339=>array(174,-28,732,782),12340=>array(128,-28,898,782),12341=>array(232,-46,726,796),12342=>array(106,-26,920,790),12343=>array(61,-53,920,827),12351=>array(241,-70,759,836),12353=>array(187,47,786,720),12354=>array(113,-60,867,781),12355=>array(217,45,802,670),12356=>array(144,-30,876,760),12357=>array(191,42,750,687),12358=>array(113,-36,810,759),12359=>array(169,54,811,709),12360=>array(90,-23,881,787),12361=>array(185,66,791,704),12362=>array(102,-12,864,796),12363=>array(80,-31,857,806),12364=>array(58,-31,944,815),12365=>array(99,-31,822,811),12366=>array(100,-30,947,833),12367=>array(145,-22,766,776),12368=>array(145,-22,914,821),12369=>array(162,-55,914,782),12370=>array(97,-62,959,839),12371=>array(163,7,857,716),12372=>array(116,10,869,807),12373=>array(98,-31,814,789),12374=>array(94,-31,925,821),12375=>array(207,-18,857,769),12376=>array(185,-18,905,821),12377=>array(114,-62,886,773),12378=>array(89,-62,915,863),12379=>array(98,-16,879,760),12380=>array(72,-16,938,863),12381=>array(102,-35,887,751),12382=>array(80,-35,925,807),12383=>array(119,-16,881,797),12384=>array(89,-16,905,807),12385=>array(143,-21,844,799),12386=>array(109,-21,905,859),12387=>array(175,123,771,603),12388=>array(122,47,868,645),12389=>array(97,57,895,873),12390=>array(90,-25,856,720),12391=>array(90,-25,903,720),12392=>array(163,10,823,775),12393=>array(163,10,911,810),12394=>array(80,-22,907,800),12395=>array(131,-8,875,779),12396=>array(105,-6,909,782),12397=>array(88,-15,903,773),12398=>array(115,-18,882,714),12399=>array(111,-30,896,774),12400=>array(84,-30,931,840),12401=>array(95,-30,944,843),12402=>array(123,-7,938,742),12403=>array(89,-7,921,840),12404=>array(103,-12,918,861),12405=>array(73,-9,924,757),12406=>array(64,-9,915,840),12407=>array(50,-9,918,861),12408=>array(86,66,909,662),12409=>array(86,66,909,806),12410=>array(66,66,889,827),12411=>array(110,-23,898,771),12412=>array(79,-23,924,823),12413=>array(94,-23,942,827),12414=>array(126,-24,892,797),12415=>array(115,-33,888,772),12416=>array(121,-17,905,789),12417=>array(130,-30,870,796),12418=>array(112,-9,858,789),12419=>array(173,48,804,710),12420=>array(99,-29,887,789),12421=>array(202,34,795,712),12422=>array(135,-48,878,792),12423=>array(192,96,804,699),12424=>array(116,21,879,780),12425=>array(144,-17,817,780),12426=>array(193,-81,777,770),12427=>array(82,11,836,767),12428=>array(105,-29,911,774),12429=>array(100,-11,857,760),12430=>array(160,62,798,700),12431=>array(80,-14,874,782),12432=>array(118,-5,879,745),12433=>array(86,1,895,774),12434=>array(115,-24,853,805),12435=>array(90,-8,906,778),12436=>array(103,-36,940,786),12441=>array(641,603,869,807),12442=>array(703,648,918,861),12443=>array(503,603,731,807),12444=>array(490,648,705,861),12445=>array(153,39,808,744),12446=>array(153,39,827,744),12449=>array(199,54,815,665),12450=>array(94,-61,920,751),12451=>array(218,66,759,704),12452=>array(121,-44,833,800),12453=>array(225,59,789,694),12454=>array(125,-47,880,803),12455=>array(189,91,810,630),12456=>array(80,0,915,735),12457=>array(184,61,822,683),12458=>array(96,-45,952,787),12459=>array(88,-41,858,794),12460=>array(88,-41,888,831),12461=>array(73,-45,901,803),12462=>array(71,-54,930,821),12463=>array(120,-49,857,815),12464=>array(77,-51,924,849),12465=>array(64,-48,908,813),12466=>array(64,-48,908,835),12467=>array(98,-23,859,734),12468=>array(81,-25,910,877),12469=>array(84,-59,917,788),12470=>array(64,-59,966,799),12471=>array(83,-39,904,789),12472=>array(79,-39,900,799),12473=>array(82,-52,952,728),12474=>array(56,-52,946,867),12475=>array(87,-5,912,786),12476=>array(81,-3,900,800),12477=>array(131,-51,841,780),12478=>array(131,-51,876,831),12479=>array(120,-60,851,805),12480=>array(60,-60,910,859),12481=>array(87,-54,921,813),12482=>array(77,-54,930,813),12483=>array(189,61,752,663),12484=>array(89,-47,845,774),12485=>array(101,-47,890,829),12486=>array(73,-61,908,740),12487=>array(73,-61,948,757),12488=>array(291,-46,850,787),12489=>array(325,-44,879,790),12490=>array(82,-63,915,786),12491=>array(77,16,911,711),12492=>array(116,-54,863,734),12493=>array(65,-51,926,786),12494=>array(130,-49,855,740),12495=>array(72,-29,928,791),12496=>array(47,-32,944,799),12497=>array(47,-32,944,837),12498=>array(163,-5,879,770),12499=>array(150,-5,930,799),12500=>array(137,-5,944,799),12501=>array(151,-58,855,732),12502=>array(107,-60,920,886),12503=>array(89,-60,964,857),12504=>array(57,24,937,651),12505=>array(57,24,937,685),12506=>array(57,24,937,685),12507=>array(70,-45,913,785),12508=>array(70,-45,913,821),12509=>array(70,-45,913,849),12510=>array(113,-31,887,729),12511=>array(104,-43,892,769),12512=>array(80,-26,927,792),12513=>array(108,-35,835,787),12514=>array(81,-6,916,739),12515=>array(203,48,790,686),12516=>array(104,-48,884,801),12517=>array(180,93,801,636),12518=>array(75,-4,909,730),12519=>array(205,80,765,640),12520=>array(105,-27,860,730),12521=>array(104,-57,873,748),12522=>array(213,-53,790,768),12523=>array(62,-45,936,788),12524=>array(203,-29,893,788),12525=>array(134,-24,848,730),12526=>array(224,51,769,636),12527=>array(124,-54,867,731),12528=>array(83,-45,918,784),12529=>array(76,-5,910,730),12530=>array(123,-53,863,753),12531=>array(107,-33,896,754),12532=>array(107,-54,884,839),12533=>array(199,57,767,690),12534=>array(179,43,809,694),12535=>array(92,-58,952,834),12536=>array(73,-45,953,843),12537=>array(82,-5,977,861),12538=>array(107,-54,947,846),12539=>array(161,311,313,462),12540=>array(83,339,917,429),12541=>array(271,-27,738,666),12542=>array(271,-27,766,807),12549=>array(157,-41,845,819),12550=>array(113,-35,861,812),12551=>array(149,51,851,697),12552=>array(147,44,849,718),12553=>array(98,-41,843,819),12554=>array(100,-45,900,783),12555=>array(151,-45,840,758),12556=>array(98,-35,843,817),12557=>array(133,-41,806,802),12558=>array(121,-34,879,738),12559=>array(60,-32,871,738),12560=>array(232,-43,676,791),12561=>array(257,-41,677,801),12562=>array(121,-28,879,738),12563=>array(105,6,895,782),12564=>array(142,-33,756,796),12565=>array(61,-30,825,752),12566=>array(227,-15,773,734),12567=>array(149,-35,811,746),12568=>array(113,-39,887,806),12569=>array(149,-32,883,752),12570=>array(163,-37,837,783),12571=>array(121,2,879,738),12572=>array(121,2,879,794),12573=>array(109,8,891,773),12574=>array(112,-39,871,754),12575=>array(82,-10,934,729),12576=>array(163,-48,866,790),12577=>array(111,-20,887,723),12578=>array(133,-37,849,742),12579=>array(166,-33,838,775),12580=>array(94,-21,872,797),12581=>array(164,54,847,751),12582=>array(88,-21,903,731),12583=>array(129,369,871,449),12584=>array(124,-4,877,753),12585=>array(157,29,843,711),12586=>array(87,-26,885,736),12587=>array(88,-21,903,734),12588=>array(60,-32,871,788),12593=>array(129,91,796,665),12594=>array(114,91,844,665),12595=>array(114,78,880,665),12596=>array(204,90,873,665),12597=>array(144,78,880,666),12598=>array(144,91,876,666),12599=>array(184,90,838,664),12600=>array(149,90,888,665),12601=>array(173,90,827,665),12602=>array(149,85,842,665),12603=>array(149,85,852,665),12604=>array(149,85,853,665),12605=>array(149,78,880,665),12606=>array(149,85,855,665),12607=>array(149,85,868,665),12608=>array(149,85,876,666),12609=>array(215,90,785,665),12610=>array(215,90,785,665),12611=>array(145,88,855,665),12612=>array(145,78,880,664),12613=>array(107,76,882,663),12614=>array(110,78,890,663),12615=>array(187,92,813,666),12616=>array(109,76,880,665),12617=>array(105,80,895,666),12618=>array(109,76,880,665),12619=>array(206,90,790,663),12620=>array(189,91,837,664),12621=>array(187,90,813,665),12622=>array(156,88,844,665),12623=>array(421,-64,711,842),12624=>array(345,-64,655,842),12625=>array(381,-64,676,842),12626=>array(340,-64,661,842),12627=>array(302,-65,597,841),12628=>array(186,-63,677,843),12629=>array(332,-64,626,842),12630=>array(226,-63,687,843),12631=>array(60,197,940,614),12632=>array(46,-64,931,842),12633=>array(51,-64,892,842),12634=>array(61,-64,857,842),12635=>array(60,197,940,615),12636=>array(79,76,921,554),12637=>array(68,-65,882,841),12638=>array(53,-63,912,843),12639=>array(70,-64,867,842),12640=>array(72,111,928,589),12641=>array(57,357,943,436),12642=>array(67,-64,867,842),12643=>array(462,-64,538,842),12645=>array(169,93,848,665),12646=>array(169,90,888,665),12647=>array(169,78,880,665),12648=>array(169,93,886,665),12649=>array(85,78,960,665),12650=>array(149,85,888,665),12651=>array(85,78,960,665),12652=>array(149,85,886,665),12653=>array(149,85,885,665),12654=>array(142,89,853,665),12655=>array(142,78,880,665),12656=>array(142,89,886,665),12657=>array(232,78,768,711),12658=>array(145,88,844,665),12659=>array(145,88,888,665),12660=>array(111,78,889,665),12661=>array(101,78,933,665),12662=>array(140,78,885,666),12663=>array(145,88,855,665),12664=>array(232,78,768,725),12665=>array(197,78,803,728),12666=>array(130,78,844,665),12667=>array(130,78,858,665),12668=>array(130,78,888,665),12669=>array(125,78,868,665),12670=>array(117,78,883,666),12671=>array(258,93,742,659),12672=>array(99,214,901,562),12673=>array(232,131,768,551),12674=>array(125,78,880,663),12675=>array(125,119,886,664),12676=>array(202,78,798,714),12677=>array(100,91,900,666),12678=>array(182,78,818,573),12679=>array(62,-64,936,842),12680=>array(62,-64,892,842),12681=>array(62,-64,867,842),12682=>array(52,-64,881,842),12683=>array(52,-63,902,843),12684=>array(52,-64,867,842),12685=>array(430,319,570,459),12686=>array(316,-98,634,855),12688=>array(468,391,532,889),12689=>array(302,391,760,889),12690=>array(56,620,459,664),12691=>array(43,481,468,770),12692=>array(47,446,470,803),12693=>array(62,415,456,817),12694=>array(45,427,479,845),12695=>array(70,401,449,858),12696=>array(44,401,477,827),12697=>array(73,399,448,839),12698=>array(82,423,470,815),12699=>array(39,401,485,834),12700=>array(46,401,469,834),12701=>array(35,401,482,832),12702=>array(30,412,488,859),12703=>array(38,401,490,846),12800=>array(72,-21,977,798),12801=>array(72,-21,977,798),12802=>array(72,-21,977,798),12803=>array(72,-21,977,798),12804=>array(72,-21,977,798),12805=>array(72,-21,977,798),12806=>array(72,-21,977,798),12807=>array(72,-21,977,798),12808=>array(72,-21,977,798),12809=>array(72,-21,977,798),12810=>array(72,-21,977,798),12811=>array(72,-21,977,798),12812=>array(72,-21,977,798),12813=>array(72,-21,977,798),12814=>array(72,-21,977,798),12815=>array(72,-21,977,798),12816=>array(72,-21,977,798),12817=>array(72,-21,977,798),12818=>array(72,-21,977,798),12819=>array(72,-21,977,798),12820=>array(72,-21,977,798),12821=>array(72,-21,977,798),12822=>array(72,-21,977,798),12823=>array(72,-21,977,798),12824=>array(72,-21,977,798),12825=>array(72,-21,977,798),12826=>array(72,-21,977,798),12827=>array(72,-21,977,798),12828=>array(72,-21,977,798),12832=>array(72,-21,976,798),12833=>array(72,-21,976,798),12834=>array(72,-21,976,798),12835=>array(72,-21,976,798),12836=>array(72,-21,976,798),12837=>array(72,-21,976,798),12838=>array(72,-21,976,798),12839=>array(72,-21,976,798),12840=>array(72,-21,976,798),12841=>array(72,-21,976,798),12842=>array(72,-21,976,798),12843=>array(72,-21,976,798),12844=>array(72,-21,976,798),12845=>array(72,-21,976,798),12846=>array(72,-21,976,803),12847=>array(72,-21,976,798),12848=>array(72,-21,976,798),12849=>array(72,-21,976,798),12850=>array(72,-21,976,798),12851=>array(72,-21,976,798),12852=>array(72,-21,976,798),12853=>array(72,-21,976,798),12854=>array(72,-21,976,798),12855=>array(72,-21,976,798),12856=>array(72,-21,976,798),12857=>array(72,-21,976,798),12858=>array(72,-21,976,798),12859=>array(72,-21,976,798),12860=>array(72,-21,976,798),12861=>array(72,-21,976,803),12862=>array(72,-21,976,798),12863=>array(72,-21,976,798),12864=>array(72,-21,976,798),12865=>array(72,-21,976,798),12866=>array(72,-21,976,798),12867=>array(72,-21,976,798),12896=>array(30,-82,970,859),12897=>array(30,-82,970,859),12898=>array(30,-82,970,859),12899=>array(30,-82,970,859),12900=>array(30,-82,970,859),12901=>array(30,-82,970,859),12902=>array(30,-82,970,859),12903=>array(30,-82,970,859),12904=>array(30,-82,970,859),12905=>array(30,-82,970,859),12906=>array(30,-82,970,859),12907=>array(30,-82,970,859),12908=>array(30,-82,970,859),12909=>array(30,-82,970,859),12910=>array(30,-82,970,859),12911=>array(30,-82,970,859),12912=>array(30,-82,970,859),12913=>array(30,-82,970,859),12914=>array(30,-82,970,859),12915=>array(30,-82,970,859),12916=>array(30,-82,970,859),12917=>array(30,-82,970,859),12918=>array(30,-82,970,859),12919=>array(30,-82,970,859),12920=>array(30,-82,970,859),12921=>array(30,-82,970,859),12922=>array(30,-82,970,859),12923=>array(30,-82,970,859),12927=>array(30,-82,970,859),12928=>array(30,-82,970,859),12929=>array(30,-82,970,859),12930=>array(30,-82,970,859),12931=>array(30,-82,970,859),12932=>array(30,-82,970,859),12933=>array(30,-82,970,859),12934=>array(30,-82,970,859),12935=>array(30,-82,970,859),12936=>array(30,-82,970,859),12937=>array(30,-82,970,859),12938=>array(30,-82,970,859),12939=>array(30,-82,970,859),12940=>array(30,-82,970,859),12941=>array(30,-82,970,859),12942=>array(30,-82,970,859),12943=>array(30,-82,970,859),12944=>array(30,-82,970,859),12945=>array(30,-82,970,859),12946=>array(30,-82,970,859),12947=>array(30,-82,970,859),12948=>array(30,-82,970,859),12949=>array(30,-82,970,859),12950=>array(30,-82,970,859),12951=>array(30,-82,970,859),12952=>array(30,-82,970,859),12953=>array(30,-82,970,859),12954=>array(30,-82,970,859),12955=>array(30,-82,970,859),12956=>array(30,-82,970,859),12957=>array(30,-82,970,859),12958=>array(30,-82,970,859),12959=>array(30,-82,970,859),12960=>array(30,-82,970,859),12961=>array(30,-82,970,859),12962=>array(30,-82,970,859),12963=>array(30,-82,970,859),12964=>array(30,-82,970,859),12965=>array(30,-82,970,859),12966=>array(30,-82,970,859),12967=>array(30,-82,970,859),12968=>array(30,-82,970,859),12969=>array(30,-82,970,859),12970=>array(30,-82,970,859),12971=>array(30,-82,970,859),12972=>array(30,-82,970,859),12973=>array(30,-82,970,859),12974=>array(30,-82,970,859),12975=>array(30,-82,970,859),12976=>array(30,-82,970,859),12992=>array(119,-55,892,783),12993=>array(88,-55,892,797),12994=>array(86,-55,892,787),12995=>array(64,-55,892,783),12996=>array(89,-55,892,783),12997=>array(102,-55,897,787),12998=>array(90,-55,892,783),12999=>array(80,-55,892,789),13000=>array(82,-55,892,793),13001=>array(47,-55,892,799),13002=>array(47,-55,892,783),13003=>array(47,-55,892,794),13008=>array(30,-82,970,859),13009=>array(30,-82,970,859),13010=>array(30,-82,970,859),13011=>array(30,-82,970,859),13012=>array(30,-82,970,859),13013=>array(30,-82,970,859),13014=>array(30,-82,970,859),13015=>array(30,-82,970,859),13016=>array(30,-82,970,859),13017=>array(30,-82,970,859),13018=>array(30,-82,970,859),13019=>array(30,-82,970,859),13020=>array(30,-82,970,859),13021=>array(30,-82,970,859),13022=>array(30,-82,970,859),13023=>array(30,-82,970,859),13024=>array(30,-82,970,859),13025=>array(30,-82,970,859),13026=>array(30,-82,970,859),13027=>array(30,-82,970,859),13028=>array(30,-82,970,859),13029=>array(30,-82,970,859),13030=>array(30,-82,970,859),13031=>array(30,-82,970,859),13032=>array(30,-82,970,859),13033=>array(30,-82,970,859),13034=>array(30,-82,970,859),13035=>array(30,-82,970,859),13036=>array(30,-82,970,859),13037=>array(30,-82,970,859),13038=>array(30,-82,970,859),13039=>array(30,-82,970,859),13040=>array(30,-82,970,859),13041=>array(30,-82,970,859),13042=>array(30,-82,970,859),13043=>array(30,-82,970,859),13044=>array(30,-82,970,859),13045=>array(30,-82,970,859),13046=>array(30,-82,970,859),13047=>array(30,-82,970,859),13048=>array(30,-82,970,859),13049=>array(30,-82,970,859),13050=>array(30,-82,970,859),13051=>array(30,-82,970,859),13052=>array(30,-82,970,859),13053=>array(30,-82,970,859),13054=>array(30,-82,970,859),13056=>array(54,-77,959,836),13057=>array(62,-82,960,822),13058=>array(39,-64,954,811),13059=>array(49,-64,945,811),13060=>array(73,-74,957,845),13061=>array(50,-76,949,845),13062=>array(75,-49,949,836),13063=>array(38,-77,962,804),13064=>array(58,-67,945,796),13065=>array(47,-48,949,836),13066=>array(47,-66,945,836),13067=>array(58,-75,921,845),13068=>array(58,-77,944,844),13069=>array(58,-75,944,844),13070=>array(58,-49,924,860),13071=>array(58,-67,965,860),13072=>array(51,-61,975,862),13073=>array(51,129,939,862),13074=>array(51,-75,946,862),13075=>array(51,-74,968,862),13076=>array(51,-47,924,841),13077=>array(38,-66,970,841),13078=>array(50,-78,970,844),13079=>array(51,-78,961,841),13080=>array(33,-66,944,866),13081=>array(33,-78,961,866),13082=>array(46,-66,968,844),13083=>array(54,-73,963,844),13084=>array(46,-48,945,850),13085=>array(55,-77,960,822),13086=>array(40,-71,945,802),13087=>array(46,-72,968,845),13088=>array(46,-76,970,841),13089=>array(66,-82,970,831),13090=>array(48,-76,949,836),13091=>array(48,-77,949,836),13092=>array(54,-48,945,868),13093=>array(50,-71,952,868),13094=>array(156,-64,968,856),13095=>array(156,-76,949,845),13096=>array(55,-54,904,841),13097=>array(61,-77,731,825),13098=>array(37,-64,921,845),13099=>array(37,-76,980,836),13100=>array(37,-64,945,836),13101=>array(37,-64,968,856),13102=>array(56,-78,970,857),13103=>array(49,-64,923,857),13104=>array(106,-41,918,857),13105=>array(106,-64,968,862),13106=>array(71,-78,961,794),13107=>array(53,-77,933,845),13108=>array(57,-69,970,862),13109=>array(57,-76,944,826),13110=>array(39,-73,970,844),13111=>array(39,-75,915,802),13112=>array(39,-41,939,802),13113=>array(39,-64,968,836),13114=>array(39,-48,949,811),13115=>array(39,-71,945,802),13116=>array(39,-73,945,819),13117=>array(40,-77,933,859),13118=>array(40,-77,968,859),13119=>array(40,-76,949,842),13120=>array(40,-77,949,859),13121=>array(40,-64,945,842),13122=>array(40,-76,945,842),13123=>array(55,-72,924,845),13124=>array(49,-64,921,845),13125=>array(37,-72,731,805),13126=>array(55,-72,968,836),13127=>array(57,-69,963,811),13128=>array(61,-76,949,844),13129=>array(61,-75,887,829),13130=>array(39,-72,970,831),13131=>array(67,-60,969,833),13132=>array(67,-77,969,860),13133=>array(67,-77,968,833),13134=>array(59,-77,945,847),13135=>array(49,-64,945,847),13136=>array(57,-76,950,811),13137=>array(107,-77,968,831),13138=>array(107,-73,944,831),13139=>array(49,140,955,857),13140=>array(49,-77,968,836),13141=>array(124,-66,956,835),13142=>array(118,-82,963,835),13143=>array(79,-77,718,798),13144=>array(124,-65,967,826),13145=>array(119,-65,967,826),13146=>array(88,-65,967,826),13147=>array(86,-65,967,826),13148=>array(64,-65,967,826),13149=>array(89,-65,967,826),13150=>array(102,-65,972,826),13151=>array(90,-65,967,826),13152=>array(80,-65,967,826),13153=>array(82,-65,967,826),13154=>array(47,-65,967,826),13155=>array(47,-65,967,826),13156=>array(47,-65,967,826),13157=>array(47,-65,967,826),13158=>array(47,-65,967,826),13159=>array(47,-65,967,826),13160=>array(47,-65,967,826),13161=>array(47,-65,967,826),13162=>array(47,-65,967,826),13163=>array(47,-65,967,826),13164=>array(48,-65,967,826),13165=>array(48,-65,967,826),13166=>array(48,-65,967,826),13167=>array(48,-65,967,826),13168=>array(48,-65,967,826),13169=>array(77,12,942,739),13170=>array(65,11,930,739),13171=>array(50,23,915,751),13172=>array(81,11,971,739),13173=>array(63,16,962,739),13174=>array(90,-71,934,658),13179=>array(37,-70,970,831),13180=>array(54,-60,946,831),13181=>array(28,-43,956,829),13182=>array(59,-67,970,832),13183=>array(23,-86,969,855),13184=>array(84,-171,968,739),13185=>array(82,23,968,739),13186=>array(79,-187,963,739),13187=>array(77,23,965,739),13188=>array(80,23,962,739),13189=>array(78,23,946,739),13190=>array(78,23,946,739),13191=>array(63,23,946,763),13192=>array(58,11,922,739),13193=>array(62,11,938,739),13194=>array(84,-171,942,739),13195=>array(82,23,942,739),13196=>array(80,-187,942,739),13197=>array(80,-187,919,553),13198=>array(77,-187,925,553),13199=>array(91,-187,919,739),13200=>array(91,23,949,739),13201=>array(82,23,952,739),13202=>array(72,23,957,739),13203=>array(52,23,962,763),13204=>array(44,23,952,739),13205=>array(84,-187,926,737),13206=>array(86,23,930,739),13207=>array(65,11,930,739),13208=>array(123,23,926,739),13209=>array(86,23,914,751),13210=>array(86,23,914,553),13211=>array(87,-187,914,553),13212=>array(70,23,930,553),13213=>array(63,16,918,558),13214=>array(83,23,918,739),13215=>array(67,23,958,677),13216=>array(63,16,958,677),13217=>array(149,23,926,677),13218=>array(82,23,958,739),13219=>array(67,23,964,680),13220=>array(63,16,964,680),13221=>array(149,23,932,680),13222=>array(82,23,964,739),13223=>array(75,16,937,740),13224=>array(67,16,958,740),13225=>array(104,11,926,739),13226=>array(69,11,951,739),13227=>array(58,11,961,739),13228=>array(55,23,975,763),13229=>array(70,11,930,739),13230=>array(67,11,959,740),13231=>array(67,11,966,740),13232=>array(92,-171,940,558),13233=>array(91,16,929,558),13234=>array(92,-187,946,558),13235=>array(83,16,947,558),13236=>array(92,-171,954,739),13237=>array(88,23,954,739),13238=>array(92,-187,954,739),13239=>array(70,23,954,739),13240=>array(93,23,954,739),13241=>array(76,23,959,739),13242=>array(84,-171,965,739),13243=>array(87,23,963,739),13244=>array(87,-187,963,739),13245=>array(70,23,967,739),13246=>array(91,23,965,739),13247=>array(72,23,969,739),13248=>array(87,23,945,739),13249=>array(72,23,948,739),13250=>array(65,11,955,553),13251=>array(85,-171,917,739),13252=>array(64,16,940,558),13253=>array(64,11,925,739),13254=>array(50,-187,942,761),13255=>array(63,16,955,763),13256=>array(61,11,939,739),13257=>array(64,-186,960,763),13258=>array(91,11,939,739),13259=>array(102,23,932,739),13260=>array(159,23,837,739),13261=>array(90,22,959,739),13262=>array(79,23,921,739),13263=>array(121,18,860,739),13264=>array(109,23,918,739),13265=>array(151,23,844,739),13266=>array(79,-187,921,739),13267=>array(166,23,842,739),13268=>array(88,11,947,739),13269=>array(87,23,913,739),13270=>array(69,16,931,739),13271=>array(93,-171,907,739),13272=>array(76,-171,955,558),13273=>array(69,23,931,739),13274=>array(84,23,961,739),13275=>array(98,16,918,558),13276=>array(68,23,944,763),13277=>array(51,11,952,739),13280=>array(119,-24,908,777),13281=>array(88,-24,908,797),13282=>array(86,-35,908,787),13283=>array(64,-24,908,781),13284=>array(89,-31,908,780),13285=>array(102,-34,914,787),13286=>array(90,-24,908,777),13287=>array(80,-25,908,789),13288=>array(82,-27,908,793),13289=>array(47,-35,918,795),13290=>array(47,-24,918,776),13291=>array(47,-24,918,793),13292=>array(47,-35,918,792),13293=>array(47,-24,918,785),13294=>array(47,-31,918,780),13295=>array(47,-32,918,787),13296=>array(47,-24,918,777),13297=>array(47,-24,918,786),13298=>array(47,-31,918,788),13299=>array(48,-35,918,795),13300=>array(48,-24,918,792),13301=>array(48,-24,918,792),13302=>array(48,-34,918,792),13303=>array(48,-24,918,792),13304=>array(48,-31,918,792),13305=>array(48,-32,918,792),13306=>array(48,-24,918,792),13307=>array(48,-24,918,792),13308=>array(48,-31,918,792),13309=>array(44,-35,918,795),13310=>array(44,-34,918,790),19968=>array(121,356,896,439),19969=>array(98,-68,911,768),19970=>array(102,-67,897,787),19971=>array(75,-11,896,823),19972=>array(92,9,927,814),19973=>array(92,9,927,814),19974=>array(115,-77,914,738),19975=>array(63,-77,959,738),19976=>array(83,-77,948,827),19977=>array(99,32,911,713),19978=>array(92,10,927,814),19979=>array(84,-59,916,772),19980=>array(53,-64,927,778),19981=>array(71,-65,928,769),19982=>array(68,-64,930,825),19983=>array(85,-66,937,782),19984=>array(98,-63,908,767),19985=>array(78,-11,922,764),19986=>array(80,-13,925,765),19987=>array(73,-68,921,828),19988=>array(84,-14,935,776),19989=>array(85,-6,942,771),19990=>array(64,-65,936,805),19991=>array(74,-69,926,817),19992=>array(76,-13,927,803),19993=>array(68,-74,933,767),19994=>array(67,-12,918,799),19995=>array(55,-4,915,827),19996=>array(52,-72,911,820),19997=>array(70,-9,925,828),19998=>array(58,-17,951,778),19999=>array(100,-54,898,767),20000=>array(68,-36,952,807),20001=>array(62,-64,952,787),20002=>array(66,-57,906,809),20003=>array(98,-62,914,783),20004=>array(62,-61,911,780),20005=>array(38,-61,914,782),20006=>array(68,-13,941,840),20007=>array(64,-74,944,818),20008=>array(439,-66,515,823),20009=>array(283,-55,652,833),20010=>array(30,-70,955,832),20011=>array(136,-53,866,805),20012=>array(248,-68,574,816),20013=>array(131,-65,860,826),20014=>array(71,-64,963,786),20015=>array(83,-68,933,844),20016=>array(73,-61,927,832),20017=>array(73,-72,894,826),20018=>array(123,-68,886,832),20019=>array(59,-70,912,830),20020=>array(103,-59,908,840),20021=>array(84,-54,930,814),20022=>array(289,225,647,575),20023=>array(134,287,875,584),20024=>array(52,-71,950,824),20025=>array(74,-73,939,777),20026=>array(82,-65,836,829),20027=>array(81,-6,930,841),20028=>array(82,-65,932,831),20029=>array(61,-57,912,771),20030=>array(18,-82,950,821),20031=>array(249,-60,554,834),20032=>array(72,-66,928,836),20033=>array(161,-77,953,786),20034=>array(66,-77,953,828),20035=>array(73,-56,894,776),20036=>array(117,-69,879,840),20037=>array(85,-50,957,835),20038=>array(75,-49,949,802),20039=>array(74,-24,940,816),20040=>array(94,-28,930,816),20041=>array(54,-71,955,818),20042=>array(99,262,872,706),20043=>array(64,-63,947,822),20044=>array(71,-68,889,828),20045=>array(56,-67,945,850),20046=>array(93,-64,924,826),20047=>array(65,-63,949,829),20048=>array(49,-59,941,833),20049=>array(54,-61,953,837),20050=>array(89,-77,921,826),20051=>array(87,-73,927,826),20052=>array(39,-69,948,819),20053=>array(38,-62,929,837),20054=>array(59,-65,926,831),20055=>array(50,-70,953,854),20056=>array(50,-70,953,824),20057=>array(158,-14,909,740),20058=>array(222,0,890,782),20059=>array(92,290,913,534),20060=>array(80,-20,954,822),20061=>array(77,-46,948,831),20062=>array(62,-27,925,835),20063=>array(92,-9,930,830),20064=>array(118,-62,818,769),20065=>array(96,-58,834,832),20066=>array(137,-32,953,825),20067=>array(85,-32,953,825),20068=>array(96,-43,924,792),20069=>array(113,-15,894,831),20070=>array(60,-71,894,819),20071=>array(101,-15,922,829),20072=>array(57,-53,953,828),20073=>array(91,-53,937,833),20074=>array(85,-28,958,753),20075=>array(60,-15,875,826),20076=>array(115,-15,889,804),20077=>array(76,-15,918,777),20078=>array(146,-40,897,829),20079=>array(93,-30,914,829),20080=>array(39,-62,920,779),20081=>array(58,-44,936,826),20082=>array(77,-15,954,828),20083=>array(48,-85,958,815),20084=>array(61,-45,938,806),20085=>array(74,-55,961,850),20086=>array(62,-55,956,849),20087=>array(58,-51,952,836),20088=>array(42,-27,959,828),20089=>array(108,-64,976,833),20090=>array(66,-31,938,831),20091=>array(50,-31,943,847),20092=>array(80,-31,966,859),20093=>array(67,-58,929,836),20094=>array(48,-64,950,842),20095=>array(44,-62,958,824),20096=>array(64,-43,956,853),20097=>array(81,-61,961,837),20098=>array(49,-68,962,843),20099=>array(36,-62,960,840),20100=>array(54,-30,954,831),20101=>array(290,-40,544,818),20102=>array(172,-41,829,773),20103=>array(98,-62,895,822),20104=>array(92,-66,913,782),20105=>array(69,-70,939,829),20106=>array(60,-65,950,826),20107=>array(60,-65,950,826),20108=>array(100,103,916,657),20109=>array(98,-51,914,764),20110=>array(89,-69,908,773),20111=>array(64,-62,912,770),20112=>array(64,-62,912,770),20113=>array(71,-50,934,760),20114=>array(78,-6,932,775),20115=>array(42,-66,919,784),20116=>array(82,25,916,744),20117=>array(63,-70,935,829),20118=>array(57,-24,960,791),20119=>array(57,-24,950,822),20120=>array(71,-6,941,770),20121=>array(52,-24,948,780),20122=>array(63,-7,914,775),20123=>array(65,-17,933,829),20124=>array(64,-24,952,783),20125=>array(77,-17,928,852),20126=>array(64,-24,952,783),20127=>array(74,-29,938,811),20128=>array(73,391,927,690),20129=>array(64,-3,936,822),20130=>array(66,-58,959,822),20131=>array(98,-55,911,835),20132=>array(70,-65,946,822),20133=>array(85,-64,931,840),20134=>array(57,-66,934,822),20135=>array(25,-63,889,843),20136=>array(74,-61,926,825),20137=>array(62,-56,916,841),20138=>array(81,-78,941,841),20139=>array(74,-58,936,828),20140=>array(53,-64,950,825),20141=>array(93,-58,907,836),20142=>array(65,-68,950,838),20143=>array(77,-62,923,840),20144=>array(59,-67,942,828),20145=>array(39,-63,941,846),20146=>array(49,-67,920,837),20147=>array(87,-45,961,838),20148=>array(71,-56,973,861),20149=>array(29,-75,944,841),20150=>array(53,-47,947,845),20151=>array(40,-59,955,850),20152=>array(52,-69,953,836),20153=>array(54,-47,960,858),20154=>array(71,-48,943,806),20155=>array(256,-69,592,824),20156=>array(32,-27,973,804),20157=>array(50,-56,978,838),20158=>array(171,16,906,794),20159=>array(34,-64,943,829),20160=>array(48,-68,950,829),20161=>array(47,-65,953,835),20162=>array(65,-65,910,838),20163=>array(43,-67,954,837),20164=>array(42,-66,957,775),20165=>array(23,-62,936,832),20166=>array(44,-67,956,835),20167=>array(39,-73,957,836),20168=>array(49,-73,955,828),20169=>array(60,-67,956,825),20170=>array(33,-77,967,836),20171=>array(54,-71,951,858),20172=>array(56,-47,953,831),20173=>array(58,-71,923,829),20174=>array(18,-72,964,836),20175=>array(44,-62,941,837),20176=>array(30,-58,955,832),20177=>array(30,-34,955,827),20178=>array(31,-68,964,811),20179=>array(26,-28,941,832),20180=>array(50,-64,954,834),20181=>array(46,-64,935,828),20182=>array(32,-68,956,844),20183=>array(51,-64,959,839),20184=>array(55,-73,947,838),20185=>array(43,-68,894,822),20186=>array(55,-64,957,840),20187=>array(60,-73,930,838),20188=>array(54,-63,939,832),20189=>array(56,-15,958,843),20190=>array(51,-67,895,832),20191=>array(54,-64,948,833),20192=>array(48,-67,948,829),20193=>array(46,-66,952,842),20194=>array(48,-69,920,829),20195=>array(46,-68,957,830),20196=>array(38,-67,961,846),20197=>array(66,-52,945,802),20198=>array(48,-66,951,829),20199=>array(76,-39,945,828),20200=>array(44,-66,937,830),20201=>array(57,-59,948,835),20202=>array(27,-75,949,823),20203=>array(44,-80,944,829),20204=>array(32,-57,897,837),20205=>array(24,-65,969,829),20206=>array(34,-70,949,839),20207=>array(41,-63,958,846),20208=>array(31,-64,897,853),20209=>array(54,-67,949,840),20210=>array(50,-68,902,833),20211=>array(52,-67,955,832),20212=>array(48,-66,859,832),20213=>array(52,-67,956,842),20214=>array(45,-67,950,837),20215=>array(33,-74,982,847),20216=>array(28,-69,962,833),20217=>array(43,-79,936,836),20218=>array(58,-38,982,866),20219=>array(27,-73,949,830),20220=>array(33,-67,938,835),20221=>array(50,-74,968,828),20222=>array(23,-67,951,835),20223=>array(56,-70,953,845),20224=>array(49,-61,948,837),20225=>array(28,-28,958,841),20226=>array(41,-65,946,836),20227=>array(49,-55,956,840),20228=>array(52,-68,912,828),20229=>array(41,-64,945,832),20230=>array(49,-64,921,843),20231=>array(45,-66,967,835),20232=>array(40,-59,954,846),20233=>array(40,-69,954,839),20234=>array(34,-75,950,827),20235=>array(39,-55,963,844),20236=>array(41,-72,930,819),20237=>array(29,-73,947,832),20238=>array(49,-66,960,840),20239=>array(50,-67,954,841),20240=>array(47,-73,950,822),20241=>array(49,-71,953,832),20242=>array(51,-66,937,829),20243=>array(46,-66,952,827),20244=>array(41,-71,958,832),20245=>array(50,-71,961,832),20246=>array(55,-87,958,835),20247=>array(34,-75,947,828),20248=>array(42,-64,945,840),20249=>array(50,-69,959,829),20250=>array(51,-56,954,832),20251=>array(39,-68,924,819),20252=>array(65,-57,941,831),20253=>array(45,-64,941,835),20254=>array(28,-81,950,822),20255=>array(30,-58,912,835),20256=>array(28,-66,903,831),20257=>array(50,-74,951,829),20258=>array(49,-67,932,835),20259=>array(50,-67,940,829),20260=>array(30,-66,919,823),20261=>array(39,-73,947,819),20262=>array(31,-59,935,833),20263=>array(25,-67,949,828),20264=>array(37,-67,906,836),20265=>array(37,-67,976,850),20266=>array(32,-68,895,824),20267=>array(34,-66,914,822),20268=>array(50,-66,952,834),20269=>array(39,-63,951,836),20270=>array(49,-71,959,840),20271=>array(62,-65,887,842),20272=>array(38,-67,951,835),20273=>array(62,-65,951,852),20274=>array(51,-76,952,830),20275=>array(36,-66,945,833),20276=>array(42,-65,955,835),20277=>array(42,-65,890,833),20278=>array(26,-71,965,849),20279=>array(33,-70,896,833),20280=>array(48,-65,897,843),20281=>array(34,-69,958,838),20282=>array(52,-68,896,834),20283=>array(45,-65,952,839),20284=>array(40,-69,960,839),20285=>array(29,-68,908,831),20286=>array(43,-69,936,822),20287=>array(44,-66,960,835),20288=>array(44,-65,915,835),20289=>array(48,-64,948,832),20290=>array(48,-64,946,831),20291=>array(45,-66,902,840),20292=>array(45,-66,948,840),20293=>array(45,-66,937,840),20294=>array(31,-73,934,839),20295=>array(38,-67,940,831),20296=>array(50,-65,956,842),20297=>array(42,-64,948,837),20298=>array(37,-73,966,838),20299=>array(36,-66,906,824),20300=>array(45,-63,958,837),20301=>array(41,-71,947,827),20302=>array(38,-68,961,838),20303=>array(35,-70,948,839),20304=>array(34,-66,946,834),20305=>array(42,-67,945,833),20306=>array(40,-63,965,837),20307=>array(37,-64,966,831),20308=>array(35,-63,935,840),20309=>array(33,-70,958,839),20310=>array(47,-67,956,832),20311=>array(48,-67,951,834),20312=>array(40,-61,970,857),20313=>array(61,-63,951,852),20314=>array(57,-67,967,839),20315=>array(47,-65,924,834),20316=>array(37,-67,954,847),20317=>array(66,-67,921,841),20318=>array(43,-69,945,836),20319=>array(46,-73,969,846),20320=>array(16,-73,951,833),20321=>array(48,-71,957,830),20322=>array(38,-61,943,837),20323=>array(37,-65,895,833),20324=>array(44,-68,962,840),20325=>array(26,-18,943,831),20326=>array(38,-64,921,831),20327=>array(47,-65,953,842),20328=>array(43,-59,955,836),20329=>array(39,-67,959,833),20330=>array(50,-68,897,838),20331=>array(52,-66,964,839),20332=>array(41,-65,942,832),20333=>array(37,-69,944,839),20334=>array(53,-64,968,847),20335=>array(44,-65,947,842),20336=>array(48,-67,947,833),20337=>array(48,-24,975,852),20338=>array(47,-70,883,840),20339=>array(21,-72,933,834),20340=>array(54,-74,948,835),20341=>array(37,-70,955,851),20342=>array(35,-73,924,834),20343=>array(53,-66,959,837),20344=>array(48,-55,948,845),20345=>array(42,-59,963,851),20346=>array(44,-67,951,832),20347=>array(22,-84,946,829),20348=>array(27,-70,941,835),20349=>array(63,-57,955,850),20350=>array(24,-67,974,837),20351=>array(50,-73,985,836),20352=>array(44,-70,913,841),20353=>array(46,-64,960,839),20354=>array(43,-63,954,846),20355=>array(41,-66,961,836),20356=>array(18,-66,921,831),20357=>array(41,-61,947,842),20358=>array(63,-64,956,835),20359=>array(40,-70,961,839),20360=>array(48,-62,920,844),20361=>array(32,-67,975,848),20362=>array(32,-67,946,838),20363=>array(41,-63,911,845),20364=>array(33,-81,952,861),20365=>array(52,-74,949,829),20366=>array(52,-74,976,827),20367=>array(36,-80,953,824),20368=>array(36,-61,958,847),20369=>array(39,-65,954,844),20370=>array(42,-64,942,836),20371=>array(42,-64,948,835),20372=>array(43,-71,947,843),20373=>array(42,-62,955,843),20374=>array(42,-62,966,852),20375=>array(50,-65,908,829),20376=>array(42,-70,964,829),20377=>array(38,-59,949,847),20378=>array(48,-57,938,845),20379=>array(38,-70,949,844),20380=>array(49,-73,954,843),20381=>array(36,-73,947,839),20382=>array(52,-55,905,847),20383=>array(44,-70,954,844),20384=>array(28,-67,944,832),20385=>array(24,-61,938,835),20386=>array(47,-67,949,828),20387=>array(32,-65,883,833),20388=>array(37,-60,945,832),20389=>array(10,-61,932,834),20390=>array(38,-74,922,831),20391=>array(18,-60,875,832),20392=>array(41,-55,967,848),20393=>array(32,-59,943,833),20394=>array(27,-69,937,834),20395=>array(37,-60,949,843),20396=>array(27,-69,962,834),20397=>array(27,-69,960,834),20398=>array(34,-68,946,839),20399=>array(44,-73,974,835),20400=>array(44,-73,933,835),20401=>array(44,-73,940,826),20402=>array(42,-73,969,827),20403=>array(39,-63,956,853),20404=>array(48,-61,975,852),20405=>array(36,-64,948,840),20406=>array(49,-63,900,836),20407=>array(41,-63,913,830),20408=>array(49,-63,942,836),20409=>array(35,-63,962,835),20410=>array(57,-65,957,843),20411=>array(51,-72,960,828),20412=>array(55,-64,946,830),20413=>array(53,-64,927,843),20414=>array(52,-64,953,843),20415=>array(42,-73,947,834),20416=>array(43,-63,955,842),20417=>array(35,-59,964,840),20418=>array(40,-65,954,845),20419=>array(20,-70,961,840),20420=>array(41,-64,960,840),20421=>array(42,-70,960,840),20422=>array(20,-70,948,840),20423=>array(28,-64,948,840),20424=>array(20,-70,939,840),20425=>array(53,-67,963,840),20426=>array(42,-79,953,849),20427=>array(40,-70,956,840),20428=>array(40,-70,945,840),20429=>array(59,-69,970,832),20430=>array(42,-57,954,829),20431=>array(52,-67,925,836),20432=>array(54,-66,918,847),20433=>array(21,-67,911,842),20434=>array(54,-67,946,845),20435=>array(39,-67,955,839),20436=>array(39,-54,958,841),20437=>array(39,-65,939,841),20438=>array(47,-64,947,841),20439=>array(36,-65,972,839),20440=>array(31,-62,951,832),20441=>array(42,-70,957,844),20442=>array(25,-68,948,836),20443=>array(50,-64,969,841),20444=>array(44,-65,955,850),20445=>array(35,-73,965,832),20446=>array(48,-61,975,852),20447=>array(23,-69,977,846),20448=>array(44,-68,968,840),20449=>array(32,-68,941,825),20450=>array(43,-82,954,844),20451=>array(25,-76,933,819),20452=>array(25,-70,919,842),20453=>array(26,-67,934,839),20454=>array(23,-71,953,832),20455=>array(25,-69,929,826),20456=>array(35,-69,923,823),20457=>array(32,-58,917,834),20458=>array(19,-61,911,829),20459=>array(25,-69,941,830),20460=>array(42,-64,961,850),20461=>array(19,-58,944,836),20462=>array(33,-76,973,844),20463=>array(33,-71,950,831),20464=>array(42,-64,913,850),20465=>array(22,-69,944,835),20466=>array(17,-57,909,852),20467=>array(37,-66,957,842),20468=>array(47,-60,947,840),20469=>array(41,-69,963,838),20470=>array(34,-69,981,835),20471=>array(46,-68,947,825),20472=>array(36,-68,964,843),20473=>array(51,-67,929,836),20474=>array(34,-61,967,841),20475=>array(51,-72,946,836),20476=>array(41,-74,911,844),20477=>array(44,-72,946,848),20478=>array(39,-65,950,853),20479=>array(39,-65,950,857),20480=>array(44,-68,972,831),20481=>array(47,-66,946,849),20482=>array(37,-68,955,835),20483=>array(44,-65,961,837),20484=>array(39,-64,922,844),20485=>array(32,-64,946,835),20486=>array(49,-68,941,846),20487=>array(45,-75,947,834),20488=>array(43,-65,972,836),20489=>array(62,-71,946,855),20490=>array(43,-65,969,831),20491=>array(50,-68,918,838),20492=>array(39,-65,927,854),20493=>array(39,-69,950,835),20494=>array(49,-72,943,838),20495=>array(31,-73,966,846),20496=>array(14,-67,952,848),20497=>array(27,-70,892,841),20498=>array(53,-68,903,839),20499=>array(50,-66,952,843),20500=>array(38,-66,908,831),20501=>array(46,-67,949,832),20502=>array(42,-65,940,844),20503=>array(54,-64,890,834),20504=>array(35,-65,895,836),20505=>array(20,-68,958,843),20506=>array(36,-64,953,842),20507=>array(54,-77,951,834),20508=>array(45,-72,926,840),20509=>array(73,-73,961,833),20510=>array(35,-68,956,832),20511=>array(41,-68,953,838),20512=>array(46,-71,935,825),20513=>array(52,-65,897,833),20514=>array(44,-64,978,839),20515=>array(29,-69,974,847),20516=>array(36,-68,943,837),20517=>array(26,-69,954,834),20518=>array(34,-67,963,835),20519=>array(62,-59,967,839),20520=>array(32,-71,947,841),20521=>array(36,-67,956,847),20522=>array(49,-77,951,821),20523=>array(31,-71,976,855),20524=>array(46,-65,951,836),20525=>array(12,-67,952,842),20526=>array(33,-67,979,843),20527=>array(52,-68,967,830),20528=>array(44,-65,956,834),20529=>array(59,-59,960,836),20530=>array(59,-64,943,836),20531=>array(51,-64,956,831),20532=>array(46,-68,975,835),20533=>array(47,-62,951,830),20534=>array(39,-65,961,838),20535=>array(52,-62,963,832),20536=>array(47,-62,975,848),20537=>array(39,-71,955,841),20538=>array(35,-86,913,827),20539=>array(30,-65,973,835),20540=>array(37,-68,943,834),20541=>array(54,-59,969,875),20542=>array(29,-59,955,828),20543=>array(39,-64,939,841),20544=>array(46,-70,972,839),20545=>array(44,-68,952,836),20546=>array(48,-65,960,850),20547=>array(27,-73,945,841),20548=>array(46,-70,975,837),20549=>array(46,-70,956,837),20550=>array(39,-69,972,840),20551=>array(41,-70,962,835),20552=>array(45,-69,920,825),20553=>array(42,-66,948,844),20554=>array(45,-67,918,835),20555=>array(40,-72,951,841),20556=>array(36,-66,954,847),20557=>array(47,-73,961,833),20558=>array(33,-71,970,844),20559=>array(38,-68,921,837),20560=>array(35,-71,939,836),20561=>array(37,-68,966,832),20562=>array(41,-66,944,842),20563=>array(47,-68,960,841),20564=>array(41,-66,925,842),20565=>array(31,-68,963,840),20566=>array(31,-66,938,842),20567=>array(55,-67,956,843),20568=>array(46,-65,920,829),20569=>array(61,-65,908,839),20570=>array(51,-74,963,835),20571=>array(46,-67,958,836),20572=>array(37,-65,934,834),20573=>array(37,-65,953,845),20574=>array(44,-70,955,833),20575=>array(49,-52,951,852),20576=>array(46,-75,960,834),20577=>array(51,-64,959,841),20578=>array(40,-54,973,848),20579=>array(54,-68,956,845),20580=>array(44,-71,936,828),20581=>array(43,-73,966,834),20582=>array(43,-70,957,834),20583=>array(28,-70,980,834),20584=>array(31,-71,969,834),20585=>array(55,-73,943,838),20586=>array(47,-53,948,839),20587=>array(53,-66,968,839),20588=>array(33,-68,970,846),20589=>array(38,-62,944,837),20590=>array(45,-71,952,830),20591=>array(41,-74,960,843),20592=>array(40,-73,960,835),20593=>array(43,-67,935,840),20594=>array(43,-65,971,833),20595=>array(44,-64,951,839),20596=>array(42,-68,902,834),20597=>array(48,-79,943,836),20598=>array(38,-62,907,836),20599=>array(53,-63,979,862),20600=>array(37,-71,963,824),20601=>array(23,-66,962,840),20602=>array(44,-66,960,840),20603=>array(23,-66,933,830),20604=>array(36,-61,954,839),20605=>array(41,-67,924,835),20606=>array(27,-69,925,834),20607=>array(21,-57,912,834),20608=>array(26,-72,967,841),20609=>array(50,-72,963,832),20610=>array(49,-69,961,837),20611=>array(55,-70,948,837),20612=>array(41,-64,968,840),20613=>array(31,-65,941,838),20614=>array(56,-75,958,838),20615=>array(58,-72,961,833),20616=>array(30,-65,979,838),20617=>array(44,-69,953,827),20618=>array(44,-73,936,827),20619=>array(44,-69,951,827),20620=>array(44,-58,941,848),20621=>array(36,-64,941,833),20622=>array(41,-58,955,848),20623=>array(45,-75,948,843),20624=>array(39,-65,906,841),20625=>array(31,-65,971,847),20626=>array(38,-65,978,837),20627=>array(53,-60,903,842),20628=>array(45,-57,960,850),20629=>array(60,-71,960,830),20630=>array(29,-80,969,851),20631=>array(29,-69,950,843),20632=>array(52,-58,971,847),20633=>array(29,-69,956,835),20634=>array(25,-57,978,832),20635=>array(44,-66,958,840),20636=>array(46,-72,953,839),20637=>array(39,-73,917,829),20638=>array(39,-62,954,853),20639=>array(42,-71,922,844),20640=>array(37,-67,968,844),20641=>array(47,-44,970,844),20642=>array(37,-68,976,854),20643=>array(32,-65,976,845),20644=>array(42,-64,964,836),20645=>array(28,-64,934,829),20646=>array(28,-72,943,823),20647=>array(30,-66,938,841),20648=>array(28,-63,922,833),20649=>array(27,-61,924,828),20650=>array(27,-76,967,847),20651=>array(34,-70,943,830),20652=>array(30,-60,936,840),20653=>array(34,-68,957,840),20654=>array(44,-66,954,843),20655=>array(44,-64,969,838),20656=>array(38,-71,903,840),20657=>array(40,-74,973,835),20658=>array(32,-67,958,835),20659=>array(35,-70,951,836),20660=>array(35,-65,948,838),20661=>array(41,-72,963,833),20662=>array(46,-74,967,838),20663=>array(31,-67,953,839),20664=>array(42,-80,961,837),20665=>array(39,-65,952,847),20666=>array(29,-65,958,841),20667=>array(28,-66,961,841),20668=>array(33,-66,948,841),20669=>array(44,-71,954,847),20670=>array(35,-67,962,831),20671=>array(39,-70,949,834),20672=>array(29,-72,949,859),20673=>array(47,-62,965,839),20674=>array(30,-72,950,835),20675=>array(26,-65,907,832),20676=>array(46,-65,955,834),20677=>array(33,-70,944,840),20678=>array(17,-61,965,840),20679=>array(36,-57,974,844),20680=>array(41,-81,960,832),20681=>array(37,-66,979,847),20682=>array(41,-64,958,840),20683=>array(46,-80,970,847),20684=>array(25,-71,968,847),20685=>array(43,-66,925,832),20686=>array(37,-58,950,843),20687=>array(40,-62,963,840),20688=>array(45,-66,909,844),20689=>array(35,-66,965,832),20690=>array(47,-65,952,843),20691=>array(55,-79,959,840),20692=>array(46,-67,949,843),20693=>array(48,-64,963,835),20694=>array(39,-68,951,834),20695=>array(52,-71,934,831),20696=>array(23,-67,985,844),20697=>array(44,-70,969,835),20698=>array(41,-64,983,842),20699=>array(38,-74,963,839),20700=>array(55,-45,963,829),20701=>array(55,-70,962,826),20702=>array(33,-65,930,839),20703=>array(38,-56,946,835),20704=>array(62,-70,965,828),20705=>array(53,-52,962,836),20706=>array(43,-67,947,833),20707=>array(34,-64,968,836),20708=>array(68,-67,967,835),20709=>array(38,-67,962,837),20710=>array(35,-64,967,851),20711=>array(39,-60,907,843),20712=>array(39,-72,968,841),20713=>array(52,-52,911,840),20714=>array(54,-64,918,833),20715=>array(52,-52,962,840),20716=>array(34,-68,967,842),20717=>array(24,-65,972,838),20718=>array(29,-71,953,832),20719=>array(57,-72,974,833),20720=>array(47,-63,963,835),20721=>array(30,-62,952,847),20722=>array(25,-75,948,832),20723=>array(20,-69,965,839),20724=>array(52,-52,911,840),20725=>array(45,-61,956,838),20726=>array(43,-70,982,832),20727=>array(45,-72,955,847),20728=>array(30,-70,972,834),20729=>array(28,-71,949,826),20730=>array(47,-70,959,828),20731=>array(35,-65,958,847),20732=>array(47,-66,951,833),20733=>array(37,-68,988,830),20734=>array(41,-57,972,858),20735=>array(34,-70,979,834),20736=>array(39,-68,963,845),20737=>array(39,-74,942,844),20738=>array(36,-76,977,843),20739=>array(44,-70,960,838),20740=>array(36,-67,960,840),20741=>array(53,-68,915,836),20742=>array(26,-66,978,841),20743=>array(50,-66,979,837),20744=>array(34,-61,968,863),20745=>array(38,-69,965,851),20746=>array(34,-72,978,836),20747=>array(20,-72,942,839),20748=>array(28,-58,963,850),20749=>array(39,-56,965,853),20750=>array(42,-65,964,836),20751=>array(38,-67,968,845),20752=>array(28,-68,964,854),20753=>array(47,-79,962,825),20754=>array(36,-60,956,839),20755=>array(52,-67,964,829),20756=>array(32,-65,953,838),20757=>array(41,-71,963,837),20758=>array(51,-65,942,843),20759=>array(30,-64,969,839),20760=>array(31,-64,964,845),20761=>array(31,-64,960,845),20762=>array(37,-59,938,838),20763=>array(39,-67,943,842),20764=>array(39,-67,948,841),20765=>array(50,-65,937,856),20766=>array(37,-75,951,837),20767=>array(28,-73,961,842),20768=>array(47,-71,954,836),20769=>array(54,-68,923,826),20770=>array(46,-70,964,829),20771=>array(64,-74,959,846),20772=>array(49,-68,965,830),20773=>array(47,-79,940,835),20774=>array(42,-76,963,841),20775=>array(37,-77,963,838),20776=>array(39,-80,947,838),20777=>array(49,-75,934,838),20778=>array(30,-73,954,835),20779=>array(40,-73,957,840),20780=>array(5,-73,996,835),20781=>array(35,-73,972,830),20782=>array(36,-66,952,836),20783=>array(26,-64,963,846),20784=>array(44,-75,951,834),20785=>array(28,-66,967,845),20786=>array(40,-68,946,838),20787=>array(41,-66,969,844),20788=>array(33,-69,979,844),20789=>array(32,-68,971,843),20790=>array(33,-67,940,848),20791=>array(36,-69,968,841),20792=>array(44,-55,950,840),20793=>array(30,-72,954,840),20794=>array(29,-69,955,839),20795=>array(27,-68,973,848),20796=>array(34,-70,971,832),20797=>array(47,-72,935,832),20798=>array(36,-71,964,839),20799=>array(39,-81,955,815),20800=>array(46,-64,942,754),20801=>array(82,-59,936,842),20802=>array(40,-65,963,824),20803=>array(76,-67,939,767),20804=>array(85,-65,932,776),20805=>array(64,-68,951,822),20806=>array(73,-64,933,832),20807=>array(40,-60,953,836),20808=>array(89,-67,934,839),20809=>array(66,-63,930,832),20810=>array(49,-68,949,835),20811=>array(60,-67,937,832),20812=>array(51,-60,953,812),20813=>array(52,-70,948,840),20814=>array(68,-60,959,831),20815=>array(37,-66,956,794),20816=>array(52,-66,929,737),20817=>array(67,-64,941,848),20818=>array(88,-62,927,833),20819=>array(36,-64,970,794),20820=>array(63,-67,950,842),20821=>array(41,-65,962,780),20822=>array(58,-67,956,848),20823=>array(42,-62,959,834),20824=>array(30,-50,960,823),20825=>array(29,-80,961,845),20826=>array(52,-64,948,828),20827=>array(30,-79,955,845),20828=>array(52,-66,948,844),20829=>array(29,-80,954,846),20830=>array(28,-81,977,844),20831=>array(41,-68,956,830),20832=>array(36,-66,962,845),20833=>array(27,-79,953,845),20834=>array(32,-71,958,830),20835=>array(34,-81,965,845),20836=>array(28,-79,958,844),20837=>array(85,-38,933,769),20838=>array(143,-12,903,787),20839=>array(127,-69,877,786),20840=>array(40,-23,935,803),20841=>array(60,-68,953,783),20842=>array(35,-66,965,822),20843=>array(44,-36,949,791),20844=>array(51,-54,956,804),20845=>array(62,-29,946,810),20846=>array(46,-60,954,816),20847=>array(118,-57,799,812),20848=>array(65,-27,915,796),20849=>array(75,-70,925,829),20850=>array(90,-57,931,809),20851=>array(38,-62,919,831),20852=>array(47,-51,915,809),20853=>array(53,-66,958,817),20854=>array(63,-65,936,832),20855=>array(63,-64,942,789),20856=>array(52,-71,943,833),20857=>array(63,-47,912,831),20858=>array(46,-54,951,829),20859=>array(33,-67,951,839),20860=>array(50,-62,959,841),20861=>array(65,-63,917,836),20862=>array(65,-61,935,837),20863=>array(79,-56,952,830),20864=>array(57,-74,929,834),20865=>array(50,-67,969,814),20866=>array(131,-66,869,766),20867=>array(136,-69,864,795),20868=>array(52,-66,942,800),20869=>array(131,-64,865,824),20870=>array(151,-51,849,781),20871=>array(70,-62,934,849),20872=>array(107,-61,856,789),20873=>array(53,-67,947,839),20874=>array(52,-66,948,788),20875=>array(131,-65,887,779),20876=>array(47,-79,958,786),20877=>array(67,-61,954,791),20878=>array(117,-55,879,800),20879=>array(122,-65,878,783),20880=>array(189,-50,851,788),20881=>array(189,-60,851,834),20882=>array(131,-65,869,810),20883=>array(60,-65,954,833),20884=>array(101,-60,941,809),20885=>array(43,-61,951,809),20886=>array(94,353,906,541),20887=>array(56,-67,945,762),20888=>array(44,-73,949,825),20889=>array(65,-58,939,786),20890=>array(108,-67,891,772),20891=>array(58,-59,909,780),20892=>array(42,-70,959,828),20893=>array(51,-59,953,799),20894=>array(50,-65,961,782),20895=>array(81,-38,940,806),20896=>array(51,-67,957,787),20897=>array(75,-50,951,763),20898=>array(60,-67,965,783),20899=>array(76,-53,945,790),20900=>array(54,-60,952,795),20901=>array(67,-70,933,793),20902=>array(43,-60,959,785),20903=>array(28,-66,986,783),20904=>array(99,-55,908,785),20905=>array(82,-66,910,802),20906=>array(60,-67,965,785),20907=>array(338,-28,574,766),20908=>array(67,-72,958,855),20909=>array(61,-72,957,840),20910=>array(40,-57,940,717),20911=>array(52,-48,888,781),20912=>array(48,-65,966,837),20913=>array(53,-22,951,769),20914=>array(44,-61,897,833),20915=>array(55,-66,972,836),20916=>array(65,-63,936,793),20917=>array(38,-72,933,758),20918=>array(63,-62,954,834),20919=>array(54,-71,966,849),20920=>array(49,-62,954,835),20921=>array(58,-71,956,839),20922=>array(58,-61,939,786),20923=>array(52,-60,948,832),20924=>array(55,-66,957,827),20925=>array(48,-67,893,830),20926=>array(48,-62,970,843),20927=>array(31,-62,959,841),20928=>array(58,-61,922,839),20929=>array(58,-65,948,835),20930=>array(64,-71,955,840),20931=>array(48,-68,975,843),20932=>array(44,-70,936,835),20933=>array(59,-49,895,788),20934=>array(57,-65,950,835),20935=>array(39,-60,943,830),20936=>array(55,-67,950,822),20937=>array(63,-63,961,830),20938=>array(49,-50,955,854),20939=>array(33,-74,878,781),20940=>array(41,-70,959,831),20941=>array(48,-58,965,839),20942=>array(57,-38,962,817),20943=>array(38,-80,939,834),20944=>array(60,-27,954,787),20945=>array(42,-67,959,834),20946=>array(42,-58,927,835),20947=>array(54,-62,978,791),20948=>array(46,-52,974,866),20949=>array(54,-70,946,788),20950=>array(54,-64,950,841),20951=>array(39,-69,951,825),20952=>array(39,-53,951,851),20953=>array(32,-59,956,797),20954=>array(59,-68,955,831),20955=>array(43,-64,930,832),20956=>array(55,-65,973,833),20957=>array(16,-70,972,819),20958=>array(46,-73,951,818),20959=>array(37,-70,962,837),20960=>array(34,-65,961,774),20961=>array(72,-71,935,767),20962=>array(72,-71,935,831),20963=>array(72,-71,935,801),20964=>array(34,-65,939,791),20965=>array(52,-74,949,778),20966=>array(18,-67,935,818),20967=>array(47,-65,953,791),20968=>array(34,-65,939,791),20969=>array(38,-61,961,791),20970=>array(34,-65,939,791),20971=>array(48,-58,958,842),20972=>array(34,-65,939,791),20973=>array(32,-60,966,837),20974=>array(34,-65,939,791),20975=>array(72,-65,972,826),20976=>array(63,-66,963,792),20977=>array(62,-67,954,836),20978=>array(63,-66,963,792),20979=>array(59,-74,954,839),20980=>array(39,-56,952,800),20981=>array(112,-72,888,808),20982=>array(130,-44,870,775),20983=>array(128,-64,872,798),20984=>array(143,-66,894,778),20985=>array(126,-38,874,775),20986=>array(144,-65,868,838),20987=>array(75,-67,925,826),20988=>array(111,-66,889,819),20989=>array(81,-61,919,799),20990=>array(102,-52,898,803),20991=>array(75,-64,925,828),20992=>array(85,-34,856,760),20993=>array(80,-50,868,782),20994=>array(364,-64,619,827),20995=>array(46,-54,877,761),20996=>array(53,-35,947,751),20997=>array(70,-69,917,751),20998=>array(65,-69,936,779),20999=>array(44,-73,897,797),21000=>array(77,-64,899,817),21001=>array(55,-77,905,826),21002=>array(71,-62,893,831),21003=>array(56,-63,893,831),21004=>array(72,-66,908,836),21005=>array(77,-43,851,828),21006=>array(71,-62,893,839),21007=>array(62,-63,913,840),21008=>array(53,-66,910,821),21009=>array(59,-70,899,829),21010=>array(45,-64,897,835),21011=>array(41,-69,907,826),21012=>array(95,-66,914,836),21013=>array(36,-66,947,806),21014=>array(60,-69,913,826),21015=>array(83,-76,901,832),21016=>array(29,-57,884,841),21017=>array(30,-66,883,823),21018=>array(90,-60,873,830),21019=>array(43,-61,893,837),21020=>array(57,-64,912,832),21021=>array(32,-73,900,822),21022=>array(56,-59,900,833),21023=>array(78,-70,893,831),21024=>array(27,-75,885,820),21025=>array(100,-67,901,828),21026=>array(49,-61,907,835),21027=>array(67,-65,878,831),21028=>array(58,-70,898,832),21029=>array(54,-68,899,825),21030=>array(72,-65,873,831),21031=>array(58,-64,906,831),21032=>array(55,-64,911,841),21033=>array(57,-67,920,826),21034=>array(63,-68,906,830),21035=>array(70,-70,883,821),21036=>array(44,-63,897,841),21037=>array(21,-60,875,827),21038=>array(77,-69,898,831),21039=>array(53,-64,900,823),21040=>array(65,-65,905,826),21041=>array(47,-69,973,825),21042=>array(64,-64,914,828),21043=>array(42,-65,905,831),21044=>array(44,-68,898,826),21045=>array(54,-61,894,833),21046=>array(77,-68,914,836),21047=>array(59,-68,898,830),21048=>array(69,-55,952,837),21049=>array(41,-63,892,837),21050=>array(71,-65,906,831),21051=>array(56,-63,902,829),21052=>array(62,-54,927,831),21053=>array(30,-57,881,837),21054=>array(42,-62,898,825),21055=>array(35,-68,882,823),21056=>array(79,-63,874,826),21057=>array(60,-62,919,831),21058=>array(28,-68,882,830),21059=>array(41,-64,897,845),21060=>array(67,-65,918,831),21061=>array(50,-69,895,829),21062=>array(138,-69,899,829),21063=>array(67,-70,897,830),21064=>array(119,-66,879,825),21065=>array(53,-63,900,834),21066=>array(80,-63,894,833),21067=>array(35,-63,965,836),21068=>array(63,-66,914,835),21069=>array(76,-60,924,850),21070=>array(79,-70,907,841),21071=>array(33,-69,971,839),21072=>array(88,-63,875,830),21073=>array(28,-65,883,838),21074=>array(77,-62,910,829),21075=>array(44,-59,924,814),21076=>array(60,-71,906,829),21077=>array(50,-57,912,845),21078=>array(63,-65,896,833),21079=>array(110,-69,891,830),21080=>array(88,-68,874,830),21081=>array(35,-62,958,830),21082=>array(46,-58,893,836),21083=>array(103,-67,898,829),21084=>array(52,-73,918,851),21085=>array(71,-62,893,848),21086=>array(82,-65,920,836),21087=>array(66,-73,913,823),21088=>array(55,-71,877,844),21089=>array(62,-67,943,835),21090=>array(73,-68,924,823),21091=>array(35,-65,907,844),21092=>array(52,-66,906,826),21093=>array(54,-48,879,836),21094=>array(32,-63,900,840),21095=>array(21,-62,880,833),21096=>array(39,-66,922,834),21097=>array(36,-67,910,834),21098=>array(70,-64,927,842),21099=>array(55,-75,917,835),21100=>array(71,-69,917,833),21101=>array(55,-70,921,821),21102=>array(111,-64,896,829),21103=>array(74,-70,914,829),21104=>array(46,-65,918,828),21105=>array(37,-70,971,837),21106=>array(59,-58,914,833),21107=>array(36,-56,894,804),21108=>array(68,-64,914,835),21109=>array(46,-72,901,842),21110=>array(46,-64,911,838),21111=>array(43,-67,905,848),21112=>array(54,-55,903,845),21113=>array(42,-65,920,824),21114=>array(33,-76,968,833),21115=>array(42,-70,904,831),21116=>array(32,-71,905,852),21117=>array(53,-62,924,829),21118=>array(112,-59,890,829),21119=>array(50,-62,900,846),21120=>array(37,-67,904,819),21121=>array(37,-68,894,835),21122=>array(52,-70,923,829),21123=>array(50,-63,921,830),21124=>array(40,-54,911,835),21125=>array(57,-63,910,823),21126=>array(26,-63,912,844),21127=>array(40,-67,910,835),21128=>array(53,-63,947,840),21129=>array(44,-64,911,837),21130=>array(45,-71,917,854),21131=>array(38,-71,906,823),21132=>array(44,-65,928,836),21133=>array(47,-69,897,848),21134=>array(47,-68,886,848),21135=>array(91,-64,883,842),21136=>array(44,-66,903,825),21137=>array(53,-73,915,827),21138=>array(41,-71,919,843),21139=>array(61,-64,919,861),21140=>array(39,-75,973,840),21141=>array(36,-68,908,825),21142=>array(34,-61,905,852),21143=>array(58,-73,913,830),21144=>array(43,-62,899,860),21145=>array(67,-70,921,841),21146=>array(46,-50,909,848),21147=>array(70,-56,863,824),21148=>array(45,-65,958,825),21149=>array(35,-70,895,820),21150=>array(64,-59,931,838),21151=>array(73,-76,892,823),21152=>array(58,-76,913,831),21153=>array(35,-69,958,829),21154=>array(30,-63,900,824),21155=>array(67,-63,942,838),21156=>array(40,-63,946,839),21157=>array(46,-65,895,846),21158=>array(36,-69,946,844),21159=>array(73,-71,896,824),21160=>array(55,-60,887,832),21161=>array(53,-67,926,833),21162=>array(67,-70,939,822),21163=>array(63,-75,918,823),21164=>array(42,-68,904,844),21165=>array(64,-63,915,830),21166=>array(60,-64,927,836),21167=>array(47,-67,946,834),21168=>array(99,-59,888,833),21169=>array(30,-58,901,831),21170=>array(25,-59,888,833),21171=>array(59,-61,915,830),21172=>array(59,-61,896,841),21173=>array(35,-73,957,827),21174=>array(14,-57,904,822),21175=>array(80,-72,909,842),21176=>array(62,-49,922,831),21177=>array(68,-65,927,832),21178=>array(90,-77,924,824),21179=>array(96,-73,917,828),21180=>array(57,-62,915,839),21181=>array(89,-57,869,792),21182=>array(53,-63,926,830),21183=>array(58,-57,951,833),21184=>array(40,-69,951,846),21185=>array(55,-70,916,829),21186=>array(76,-55,928,839),21187=>array(103,-75,904,831),21188=>array(62,-77,904,839),21189=>array(32,-68,904,836),21190=>array(113,-75,915,843),21191=>array(45,-70,875,809),21192=>array(95,-68,890,830),21193=>array(38,-60,965,835),21194=>array(35,-63,965,836),21195=>array(30,-65,890,830),21196=>array(49,-62,914,850),21197=>array(43,-72,909,826),21198=>array(105,-59,939,832),21199=>array(103,-77,914,840),21200=>array(48,-77,914,822),21201=>array(54,-65,916,836),21202=>array(72,-65,917,829),21203=>array(88,-70,916,828),21204=>array(65,-77,905,832),21205=>array(58,-68,914,832),21206=>array(77,-76,953,839),21207=>array(48,-67,918,811),21208=>array(54,-71,914,827),21209=>array(37,-71,971,844),21210=>array(56,-76,922,827),21211=>array(51,-76,952,838),21212=>array(48,-75,926,832),21213=>array(41,-76,957,839),21214=>array(52,-73,919,832),21215=>array(58,-61,967,837),21216=>array(43,-72,926,827),21217=>array(67,-68,921,832),21218=>array(49,-68,957,829),21219=>array(58,-66,916,837),21220=>array(44,-68,929,827),21221=>array(49,-55,949,819),21222=>array(37,-76,918,842),21223=>array(37,-61,920,841),21224=>array(53,-69,912,842),21225=>array(53,-58,899,850),21226=>array(31,-68,940,842),21227=>array(28,-69,910,822),21228=>array(27,-69,934,840),21229=>array(52,-73,918,849),21230=>array(26,-73,931,835),21231=>array(54,-78,921,844),21232=>array(35,-66,966,834),21233=>array(54,-67,924,830),21234=>array(54,-72,928,833),21235=>array(45,-76,918,839),21236=>array(46,-73,928,825),21237=>array(27,-76,929,825),21238=>array(44,-45,949,840),21239=>array(54,-61,919,844),21240=>array(38,-76,920,838),21241=>array(30,-69,875,826),21242=>array(82,-62,896,850),21243=>array(93,-59,894,838),21244=>array(61,-63,903,826),21245=>array(82,-62,900,839),21246=>array(56,-55,898,829),21247=>array(71,-44,895,852),21248=>array(84,-59,930,838),21249=>array(38,-59,928,838),21250=>array(55,-59,912,844),21251=>array(55,-59,912,844),21252=>array(55,-59,912,844),21253=>array(48,-33,955,838),21254=>array(64,-58,902,842),21255=>array(63,-59,912,839),21256=>array(55,-59,912,844),21257=>array(57,-66,886,837),21258=>array(57,-59,911,845),21259=>array(68,-60,938,841),21260=>array(68,-60,938,841),21261=>array(74,-63,922,843),21262=>array(58,-70,918,829),21263=>array(42,-65,964,834),21264=>array(59,-65,915,845),21265=>array(48,-63,914,840),21266=>array(48,-68,902,843),21267=>array(52,-68,909,843),21268=>array(48,-63,916,840),21269=>array(304,-45,928,803),21270=>array(48,-57,950,836),21271=>array(45,-50,948,792),21272=>array(99,-53,921,804),21273=>array(56,-78,970,811),21274=>array(133,-71,930,795),21275=>array(93,-26,894,768),21276=>array(99,-21,926,788),21277=>array(92,-70,923,831),21278=>array(93,-26,894,768),21279=>array(96,-23,920,794),21280=>array(128,-48,921,790),21281=>array(121,-70,921,791),21282=>array(115,-32,942,778),21283=>array(133,-71,930,795),21284=>array(113,-76,930,811),21285=>array(112,-32,912,791),21286=>array(112,-32,959,796),21287=>array(114,-32,916,796),21288=>array(112,-32,922,796),21289=>array(101,-28,918,785),21290=>array(114,-69,931,789),21291=>array(115,-32,942,778),21292=>array(87,-29,950,789),21293=>array(85,-26,941,792),21294=>array(112,-32,922,796),21295=>array(129,-71,930,795),21296=>array(136,-23,951,787),21297=>array(117,-72,953,814),21298=>array(117,-26,945,804),21299=>array(133,-71,946,795),21300=>array(118,-29,954,780),21301=>array(85,-26,932,804),21302=>array(136,-59,951,795),21303=>array(92,-31,938,784),21304=>array(76,-5,924,762),21305=>array(134,-71,933,742),21306=>array(133,-57,933,784),21307=>array(103,-56,927,791),21308=>array(77,-26,934,797),21309=>array(69,-30,942,787),21310=>array(71,-30,950,796),21311=>array(118,-68,939,800),21312=>array(133,-71,930,795),21313=>array(105,-70,902,838),21314=>array(64,-37,962,786),21315=>array(113,-68,906,830),21316=>array(67,-44,933,821),21317=>array(46,-68,948,819),21318=>array(55,-64,950,833),21319=>array(80,-71,930,827),21320=>array(90,-68,918,834),21321=>array(55,-69,941,829),21322=>array(76,-67,909,824),21323=>array(69,-63,931,827),21324=>array(63,-59,937,825),21325=>array(91,-26,909,787),21326=>array(28,-57,918,831),21327=>array(51,-62,948,834),21328=>array(94,-26,911,787),21329=>array(64,-67,936,846),21330=>array(82,-67,918,837),21331=>array(65,-68,935,826),21332=>array(63,-70,924,835),21333=>array(54,-58,926,841),21334=>array(49,-65,923,832),21335=>array(68,-72,942,830),21336=>array(64,-62,936,854),21337=>array(58,-49,939,830),21338=>array(53,-71,949,835),21339=>array(53,-46,942,813),21340=>array(403,-65,899,825),21341=>array(73,-26,924,790),21342=>array(74,-62,926,819),21343=>array(107,-63,947,828),21344=>array(184,-70,903,832),21345=>array(77,-68,927,828),21346=>array(39,-58,916,829),21347=>array(113,-65,903,833),21348=>array(136,-66,911,826),21349=>array(136,-66,911,826),21350=>array(37,-68,957,827),21351=>array(111,-62,954,818),21352=>array(96,-67,902,836),21353=>array(303,-69,717,781),21354=>array(291,-69,743,781),21355=>array(63,-5,913,747),21356=>array(104,-69,892,832),21357=>array(53,-69,890,746),21358=>array(59,-65,933,835),21359=>array(50,-62,903,839),21360=>array(148,-64,883,835),21361=>array(62,-67,928,836),21362=>array(52,-55,916,799),21363=>array(55,-67,896,786),21364=>array(49,-60,888,826),21365=>array(59,-71,883,815),21366=>array(29,-70,893,836),21367=>array(31,-45,959,834),21368=>array(73,-63,898,846),21369=>array(39,-54,907,861),21370=>array(26,-27,947,783),21371=>array(47,-68,910,837),21372=>array(51,-71,962,832),21373=>array(140,-73,894,827),21374=>array(88,-63,894,788),21375=>array(41,-70,920,834),21376=>array(54,-60,907,829),21377=>array(39,-63,951,835),21378=>array(38,-64,922,791),21379=>array(62,-67,900,836),21380=>array(50,-64,942,777),21381=>array(38,-67,904,774),21382=>array(39,-57,911,786),21383=>array(40,-57,941,789),21384=>array(38,-68,914,792),21385=>array(36,-56,911,781),21386=>array(51,-75,933,775),21387=>array(37,-63,913,771),21388=>array(37,-62,926,778),21389=>array(35,-72,922,775),21390=>array(44,-68,937,796),21391=>array(56,-68,936,777),21392=>array(34,-64,957,788),21393=>array(29,-64,942,788),21394=>array(52,-64,934,779),21395=>array(40,-57,926,798),21396=>array(35,-62,948,793),21397=>array(17,-73,896,786),21398=>array(27,-67,957,788),21399=>array(73,-65,957,780),21400=>array(45,-74,932,779),21401=>array(49,-70,956,795),21402=>array(50,-65,940,809),21403=>array(34,-64,950,788),21404=>array(46,-72,959,782),21405=>array(50,-68,943,780),21406=>array(57,-73,932,764),21407=>array(59,-65,932,787),21408=>array(39,-63,942,788),21409=>array(50,-101,916,782),21410=>array(18,-69,925,785),21411=>array(35,-73,938,765),21412=>array(39,-64,974,792),21413=>array(39,-67,962,793),21414=>array(42,-75,938,816),21415=>array(43,-81,951,786),21416=>array(20,-62,909,785),21417=>array(37,-63,961,802),21418=>array(24,-47,929,811),21419=>array(46,-60,948,795),21420=>array(48,-69,966,784),21421=>array(39,-71,963,785),21422=>array(23,-71,930,791),21423=>array(39,-65,958,791),21424=>array(46,-71,951,783),21425=>array(46,-71,948,783),21426=>array(51,-71,939,784),21427=>array(34,-79,894,835),21428=>array(47,-71,947,798),21429=>array(27,-45,882,821),21430=>array(117,11,903,746),21431=>array(56,-20,928,843),21432=>array(61,-25,941,767),21433=>array(57,-65,949,829),21434=>array(56,-59,933,843),21435=>array(79,-56,931,832),21436=>array(61,-64,932,816),21437=>array(67,-44,905,806),21438=>array(97,-60,971,791),21439=>array(61,-72,913,786),21440=>array(133,-48,955,823),21441=>array(38,-32,962,838),21442=>array(18,-74,970,848),21443=>array(30,-88,968,844),21444=>array(30,-15,968,852),21445=>array(30,-61,968,852),21446=>array(68,-66,977,836),21447=>array(38,-68,961,829),21448=>array(94,-34,920,754),21449=>array(63,-50,948,773),21450=>array(36,-64,945,767),21451=>array(63,-61,939,843),21452=>array(37,-67,955,770),21453=>array(51,-71,942,790),21454=>array(53,-50,962,816),21455=>array(58,-38,930,828),21456=>array(38,-62,940,827),21457=>array(38,-60,940,828),21458=>array(52,-57,944,801),21459=>array(58,-68,930,812),21460=>array(50,-64,963,833),21461=>array(48,-50,944,815),21462=>array(43,-70,960,780),21463=>array(64,-68,936,829),21464=>array(38,-59,934,833),21465=>array(16,-63,942,836),21466=>array(141,-75,963,781),21467=>array(52,-75,966,834),21468=>array(48,-57,961,839),21469=>array(54,-51,962,811),21470=>array(19,-61,953,785),21471=>array(31,-67,969,829),21472=>array(55,-29,954,806),21473=>array(34,-70,971,833),21474=>array(52,-71,945,829),21475=>array(184,5,818,695),21476=>array(83,-71,911,823),21477=>array(65,-51,902,840),21478=>array(78,-70,859,780),21479=>array(78,-70,859,780),21480=>array(124,-76,895,755),21481=>array(120,-65,894,766),21482=>array(58,-40,928,772),21483=>array(113,-64,929,831),21484=>array(76,-70,861,789),21485=>array(95,-65,952,781),21486=>array(98,-66,929,766),21487=>array(98,-64,926,769),21488=>array(124,-51,904,840),21489=>array(116,-25,946,810),21490=>array(63,-65,953,835),21491=>array(69,-62,917,837),21492=>array(43,-47,949,829),21493=>array(121,-13,896,782),21494=>array(90,-53,934,843),21495=>array(65,-59,935,804),21496=>array(111,-63,886,790),21497=>array(98,-70,937,763),21498=>array(107,-42,973,770),21499=>array(132,-65,899,831),21500=>array(116,-54,896,762),21501=>array(99,-66,930,768),21502=>array(135,-57,851,798),21503=>array(93,-37,950,788),21504=>array(98,-40,930,817),21505=>array(98,-67,930,776),21506=>array(102,-65,914,847),21507=>array(98,-26,932,835),21508=>array(57,-65,951,836),21509=>array(106,-56,894,783),21510=>array(96,-63,933,830),21511=>array(98,-67,945,780),21512=>array(40,-73,956,859),21513=>array(64,-72,900,823),21514=>array(157,-70,867,775),21515=>array(104,-61,933,832),21516=>array(118,-75,882,787),21517=>array(56,-67,829,836),21518=>array(44,-64,926,844),21519=>array(71,-76,947,824),21520=>array(99,-19,939,825),21521=>array(133,-75,867,831),21522=>array(72,-32,957,837),21523=>array(104,-65,932,775),21524=>array(104,-23,948,836),21525=>array(162,-70,821,770),21526=>array(104,-64,939,835),21527=>array(99,-58,900,789),21528=>array(97,-68,941,840),21529=>array(103,-72,946,833),21530=>array(103,-75,925,774),21531=>array(46,-70,947,783),21532=>array(95,-39,941,769),21533=>array(52,-66,958,822),21534=>array(53,-72,959,773),21535=>array(90,-71,945,854),21536=>array(92,-69,942,827),21537=>array(83,-49,946,816),21538=>array(58,-50,927,799),21539=>array(102,-6,928,805),21540=>array(108,-69,951,836),21541=>array(112,-71,934,780),21542=>array(48,-70,947,775),21543=>array(95,-29,935,779),21544=>array(86,-41,933,824),21545=>array(95,-62,955,806),21546=>array(91,-50,945,851),21547=>array(37,-65,966,858),21548=>array(104,-58,936,863),21549=>array(100,-68,970,824),21550=>array(99,-73,955,838),21551=>array(47,-58,848,857),21552=>array(97,-67,947,838),21553=>array(95,-70,944,835),21554=>array(96,-76,866,819),21555=>array(72,-67,940,787),21556=>array(43,-72,937,783),21557=>array(99,-74,958,827),21558=>array(106,-68,897,793),21559=>array(94,-74,952,831),21560=>array(98,-68,955,788),21561=>array(109,-70,949,836),21562=>array(116,-71,967,782),21563=>array(102,-72,903,834),21564=>array(89,-68,937,825),21565=>array(99,-51,945,844),21566=>array(70,-72,942,782),21567=>array(67,-67,917,832),21568=>array(98,-65,940,787),21569=>array(106,-62,903,827),21570=>array(180,-77,840,772),21571=>array(87,-69,942,789),21572=>array(74,-61,942,783),21573=>array(96,-74,966,833),21574=>array(51,-68,964,774),21575=>array(69,-66,934,819),21576=>array(77,-17,910,773),21577=>array(53,-71,944,787),21578=>array(67,-67,917,832),21579=>array(96,-69,943,829),21580=>array(116,-55,943,842),21581=>array(111,-51,956,743),21582=>array(116,-66,978,790),21583=>array(97,-66,939,835),21584=>array(101,-60,880,825),21585=>array(53,-72,959,830),21586=>array(100,-68,925,765),21587=>array(100,-26,932,824),21588=>array(79,-68,934,832),21589=>array(94,-7,928,767),21590=>array(91,-70,910,765),21591=>array(99,-74,926,764),21592=>array(84,-81,880,780),21593=>array(157,-68,837,760),21594=>array(111,-68,957,838),21595=>array(111,-31,968,831),21596=>array(101,-62,905,831),21597=>array(93,-64,951,841),21598=>array(97,-63,871,790),21599=>array(110,-65,961,819),21600=>array(97,-70,955,826),21601=>array(95,-70,949,786),21602=>array(100,-71,929,784),21603=>array(93,-63,942,777),21604=>array(89,-83,949,856),21605=>array(98,-60,943,841),21606=>array(98,-74,911,828),21607=>array(94,-63,945,831),21608=>array(39,-67,882,780),21609=>array(109,-54,953,751),21610=>array(109,-60,950,760),21611=>array(109,-60,942,845),21612=>array(108,-65,905,767),21613=>array(98,-14,928,831),21614=>array(108,-66,960,771),21615=>array(99,-67,942,787),21616=>array(84,-68,937,836),21617=>array(90,-68,970,830),21618=>array(102,-60,957,820),21619=>array(90,-65,942,830),21620=>array(108,-68,909,833),21621=>array(98,-65,930,785),21622=>array(79,-71,949,828),21623=>array(115,-62,893,786),21624=>array(94,-20,932,769),21625=>array(95,-49,969,830),21626=>array(106,-60,952,794),21627=>array(105,-67,900,835),21628=>array(98,-67,931,825),21629=>array(33,-73,971,862),21630=>array(104,-28,950,783),21631=>array(95,-61,953,841),21632=>array(94,-31,933,787),21633=>array(122,-66,951,828),21634=>array(89,-21,940,783),21635=>array(83,-34,962,834),21636=>array(115,-70,900,826),21637=>array(81,-68,898,833),21638=>array(107,-36,960,833),21639=>array(104,-28,950,802),21640=>array(89,-59,914,836),21641=>array(89,-74,968,824),21642=>array(89,-34,964,818),21643=>array(108,-70,943,840),21644=>array(53,-70,894,821),21645=>array(111,-65,954,840),21646=>array(39,-68,961,833),21647=>array(79,-63,943,848),21648=>array(90,-70,941,833),21649=>array(89,-51,935,842),21650=>array(54,-75,937,777),21651=>array(97,-34,941,773),21652=>array(97,-70,936,829),21653=>array(91,-67,923,828),21654=>array(104,-64,898,832),21655=>array(94,-3,951,830),21656=>array(97,-67,941,832),21657=>array(100,-59,932,830),21658=>array(86,-80,951,847),21659=>array(102,-68,893,836),21660=>array(102,-42,928,817),21661=>array(90,-7,914,809),21662=>array(98,-67,937,775),21663=>array(102,-64,891,730),21664=>array(51,-65,947,784),21665=>array(103,-50,956,800),21666=>array(61,-53,939,806),21667=>array(99,-68,933,811),21668=>array(80,-42,921,819),21669=>array(106,-30,956,782),21670=>array(90,-71,954,835),21671=>array(106,-67,892,829),21672=>array(64,-74,954,840),21673=>array(96,-64,931,840),21674=>array(82,-65,967,824),21675=>array(35,-71,974,779),21676=>array(98,-72,961,830),21677=>array(91,-65,926,828),21678=>array(107,-70,963,824),21679=>array(90,-65,948,848),21680=>array(117,-71,901,818),21681=>array(119,-70,883,841),21682=>array(119,-73,970,836),21683=>array(88,-60,949,824),21684=>array(100,-67,943,824),21685=>array(84,-63,963,854),21686=>array(110,-68,947,827),21687=>array(88,-62,944,842),21688=>array(58,-66,959,838),21689=>array(91,-51,908,828),21690=>array(91,-23,936,778),21691=>array(88,-63,943,835),21692=>array(119,-55,881,799),21693=>array(103,-64,898,785),21694=>array(105,-30,957,830),21695=>array(99,-69,949,835),21696=>array(47,-68,951,832),21697=>array(116,-66,884,792),21698=>array(91,-64,936,779),21699=>array(108,-69,904,783),21700=>array(90,-72,935,831),21701=>array(102,-61,908,831),21702=>array(106,-80,919,845),21703=>array(108,-25,949,831),21704=>array(84,-66,945,851),21705=>array(74,-60,944,828),21706=>array(104,-75,942,831),21707=>array(95,-27,935,846),21708=>array(85,-71,971,832),21709=>array(97,-55,900,875),21710=>array(103,-66,949,835),21711=>array(108,-73,973,781),21712=>array(99,-26,925,764),21713=>array(102,-18,924,766),21714=>array(87,-46,945,803),21715=>array(103,-63,936,821),21716=>array(98,-64,931,814),21717=>array(99,-61,872,821),21718=>array(93,-52,940,855),21719=>array(86,-60,922,833),21720=>array(103,-71,958,830),21721=>array(100,-47,949,829),21722=>array(81,-77,943,778),21723=>array(51,-69,962,803),21724=>array(101,-70,945,842),21725=>array(88,-62,950,828),21726=>array(108,-70,945,838),21727=>array(75,-59,886,837),21728=>array(110,-65,926,831),21729=>array(62,-62,943,785),21730=>array(89,-52,935,801),21731=>array(120,-14,943,779),21732=>array(87,-55,956,825),21733=>array(70,-60,931,784),21734=>array(84,-67,942,824),21735=>array(81,-66,946,827),21736=>array(109,-69,912,832),21737=>array(100,-15,933,779),21738=>array(107,-74,942,785),21739=>array(113,-73,962,762),21740=>array(78,-55,930,833),21741=>array(64,-71,949,773),21742=>array(92,-68,927,833),21743=>array(118,-65,951,783),21744=>array(80,-44,885,840),21745=>array(98,-65,923,829),21746=>array(63,-62,926,825),21747=>array(99,-81,947,824),21748=>array(108,-73,973,856),21749=>array(82,-69,913,829),21750=>array(88,-64,951,825),21751=>array(103,-70,938,814),21752=>array(94,-74,917,818),21753=>array(92,-68,936,834),21754=>array(87,-70,931,832),21755=>array(102,-66,937,778),21756=>array(95,-68,932,846),21757=>array(91,-74,952,786),21758=>array(95,-64,968,844),21759=>array(65,-62,959,839),21760=>array(110,-62,954,830),21761=>array(97,-62,931,845),21762=>array(116,-52,960,835),21763=>array(116,-66,900,828),21764=>array(101,-66,947,782),21765=>array(87,-45,951,867),21766=>array(101,-69,961,849),21767=>array(53,-76,939,786),21768=>array(88,-30,943,788),21769=>array(94,-68,945,848),21770=>array(106,-66,954,835),21771=>array(112,-62,950,830),21772=>array(98,-74,964,813),21773=>array(113,-74,946,841),21774=>array(98,-52,904,844),21775=>array(84,-62,938,843),21776=>array(44,-71,938,835),21777=>array(92,-36,934,820),21778=>array(88,-65,940,781),21779=>array(116,-71,924,829),21780=>array(99,-70,934,785),21781=>array(100,-48,923,863),21782=>array(82,-23,951,793),21783=>array(103,-65,957,827),21784=>array(34,-60,979,822),21785=>array(112,-57,987,812),21786=>array(97,-62,957,777),21787=>array(101,-66,948,830),21788=>array(59,-37,952,802),21789=>array(104,-62,938,804),21790=>array(92,-65,936,832),21791=>array(95,-37,929,851),21792=>array(91,-72,914,824),21793=>array(109,-61,963,792),21794=>array(104,-62,938,834),21795=>array(86,-29,935,842),21796=>array(74,-73,948,832),21797=>array(97,-46,940,821),21798=>array(97,-67,951,825),21799=>array(110,-70,900,780),21800=>array(80,-44,959,779),21801=>array(99,-73,946,833),21802=>array(74,-65,957,843),21803=>array(74,-27,959,804),21804=>array(87,-70,957,829),21805=>array(104,-71,941,837),21806=>array(42,-67,944,843),21807=>array(97,-65,945,836),21808=>array(100,-64,909,830),21809=>array(115,-68,900,787),21810=>array(107,-79,948,827),21811=>array(82,-69,962,802),21812=>array(106,-71,942,830),21813=>array(112,-44,995,856),21814=>array(113,-66,964,837),21815=>array(94,-75,933,845),21816=>array(78,-35,950,847),21817=>array(81,-56,972,832),21818=>array(110,-74,961,833),21819=>array(104,-65,951,841),21820=>array(113,-68,947,843),21821=>array(92,-67,953,832),21822=>array(84,-30,940,831),21823=>array(92,-28,953,842),21824=>array(105,-73,941,785),21825=>array(103,-66,902,791),21826=>array(93,-76,971,827),21827=>array(97,-70,930,833),21828=>array(84,-63,971,774),21829=>array(95,-67,933,833),21830=>array(55,-56,945,825),21831=>array(39,-73,928,844),21832=>array(111,-65,947,837),21833=>array(76,-76,945,819),21834=>array(93,-66,932,782),21835=>array(109,-66,987,837),21836=>array(86,-31,955,819),21837=>array(84,-57,942,864),21838=>array(46,-67,962,835),21839=>array(119,-71,889,784),21840=>array(89,-62,931,843),21841=>array(84,-77,962,829),21842=>array(113,-68,903,788),21843=>array(54,-60,964,838),21844=>array(91,-60,945,844),21845=>array(111,-62,908,842),21846=>array(83,-62,952,836),21847=>array(123,-65,900,846),21848=>array(104,-72,965,846),21849=>array(85,-55,952,824),21850=>array(77,-66,927,795),21851=>array(83,-73,933,822),21852=>array(83,-68,955,786),21853=>array(76,-67,955,821),21854=>array(91,-25,940,785),21855=>array(35,-68,969,836),21856=>array(88,-60,913,812),21857=>array(95,-66,932,826),21858=>array(109,-61,963,792),21859=>array(83,-68,926,832),21860=>array(91,-69,935,846),21861=>array(97,-70,950,850),21862=>array(91,-64,930,836),21863=>array(90,-72,914,828),21864=>array(90,-66,927,828),21865=>array(121,-63,959,831),21866=>array(110,-64,909,838),21867=>array(115,-65,960,835),21868=>array(63,-66,913,825),21869=>array(94,-66,914,833),21870=>array(79,-63,912,829),21871=>array(82,-68,906,794),21872=>array(86,-71,948,814),21873=>array(86,-48,935,822),21874=>array(104,-50,908,842),21875=>array(86,-30,973,843),21876=>array(115,-58,945,833),21877=>array(105,-64,983,833),21878=>array(86,-72,942,844),21879=>array(94,-64,942,840),21880=>array(91,-65,923,826),21881=>array(91,-80,933,781),21882=>array(91,-72,944,785),21883=>array(92,-67,908,833),21884=>array(90,-67,930,823),21885=>array(114,-59,989,859),21886=>array(76,-66,957,832),21887=>array(110,-30,955,827),21888=>array(95,-69,965,819),21889=>array(93,-58,910,793),21890=>array(108,-69,960,785),21891=>array(92,-67,939,835),21892=>array(56,-70,907,835),21893=>array(92,-18,924,788),21894=>array(82,-50,918,825),21895=>array(112,-67,904,831),21896=>array(86,-65,942,827),21897=>array(88,-74,950,840),21898=>array(92,-72,930,837),21899=>array(83,-65,952,832),21900=>array(52,-71,909,787),21901=>array(104,-69,967,824),21902=>array(112,-67,906,788),21903=>array(84,-59,931,833),21904=>array(79,-81,936,830),21905=>array(97,-65,933,841),21906=>array(92,-48,956,849),21907=>array(110,-72,957,777),21908=>array(91,-70,933,781),21909=>array(110,-66,953,783),21910=>array(97,-66,939,829),21911=>array(85,-68,951,801),21912=>array(81,-67,930,834),21913=>array(85,-60,968,833),21914=>array(79,-65,971,838),21915=>array(91,-67,979,836),21916=>array(86,-63,938,837),21917=>array(105,-55,913,801),21918=>array(77,-73,921,840),21919=>array(116,-61,901,787),21920=>array(97,-32,936,825),21921=>array(107,-71,949,828),21922=>array(107,-71,951,827),21923=>array(52,-74,965,824),21924=>array(90,-18,935,861),21925=>array(110,-71,968,837),21926=>array(132,-68,888,789),21927=>array(79,-26,945,829),21928=>array(86,-73,959,838),21929=>array(76,-71,966,812),21930=>array(75,-73,957,829),21931=>array(96,-55,961,835),21932=>array(50,-71,951,830),21933=>array(88,-53,939,860),21934=>array(53,-68,945,789),21935=>array(89,-59,953,851),21936=>array(90,-72,965,837),21937=>array(90,-70,941,788),21938=>array(107,-65,905,836),21939=>array(82,-28,916,834),21940=>array(72,-71,972,832),21941=>array(75,-62,924,832),21942=>array(94,-63,906,834),21943=>array(110,-67,925,831),21944=>array(65,-77,959,841),21945=>array(90,-26,953,851),21946=>array(112,-62,982,834),21947=>array(80,-70,948,858),21948=>array(110,-32,970,846),21949=>array(90,-66,936,807),21950=>array(82,-66,893,826),21951=>array(50,-69,961,780),21952=>array(49,-72,955,829),21953=>array(88,-64,946,839),21954=>array(108,-72,960,845),21955=>array(94,-68,938,838),21956=>array(82,-62,954,790),21957=>array(88,-73,945,845),21958=>array(84,-65,947,847),21959=>array(56,-75,946,832),21960=>array(107,-29,963,826),21961=>array(87,-64,944,831),21962=>array(110,-68,962,791),21963=>array(106,-70,933,838),21964=>array(98,-22,946,841),21965=>array(108,-70,907,835),21966=>array(104,-68,909,783),21967=>array(112,-68,977,827),21968=>array(118,-70,954,847),21969=>array(88,-21,941,830),21970=>array(76,-64,944,830),21971=>array(81,-73,961,793),21972=>array(90,-85,963,851),21973=>array(95,-68,963,784),21974=>array(92,-70,962,828),21975=>array(105,-70,937,783),21976=>array(84,-59,963,851),21977=>array(111,-64,956,841),21978=>array(118,-56,916,846),21979=>array(95,-56,970,863),21980=>array(95,-69,943,834),21981=>array(92,-64,930,788),21982=>array(119,-66,961,837),21983=>array(89,-27,938,840),21984=>array(48,-81,960,829),21985=>array(83,-71,955,791),21986=>array(100,-36,950,780),21987=>array(112,-68,910,786),21988=>array(92,-70,938,827),21989=>array(84,-68,957,844),21990=>array(80,-68,942,829),21991=>array(34,-75,973,842),21992=>array(83,-68,939,836),21993=>array(91,-67,946,836),21994=>array(90,-70,954,835),21995=>array(89,-66,943,776),21996=>array(93,-70,942,830),21997=>array(91,-37,929,849),21998=>array(63,-57,939,788),21999=>array(87,-39,950,782),22000=>array(68,-75,913,845),22001=>array(90,-68,974,862),22002=>array(71,-57,940,845),22003=>array(90,-67,949,822),22004=>array(72,-54,969,835),22005=>array(88,-54,942,772),22006=>array(83,-68,935,787),22007=>array(86,-64,964,832),22008=>array(58,-57,951,854),22009=>array(83,-56,963,827),22010=>array(117,-68,956,831),22011=>array(98,-69,961,841),22012=>array(118,-72,972,829),22013=>array(82,-76,950,834),22014=>array(79,-68,961,837),22015=>array(115,-78,962,841),22016=>array(87,-73,927,846),22017=>array(76,-68,943,835),22018=>array(121,-68,894,823),22019=>array(83,-70,949,841),22020=>array(83,-70,958,845),22021=>array(82,-64,964,788),22022=>array(83,-72,964,832),22023=>array(101,-80,965,846),22024=>array(91,-72,935,830),22025=>array(50,-65,957,833),22026=>array(85,-68,938,834),22027=>array(73,-78,972,839),22028=>array(91,-70,940,789),22029=>array(90,-74,933,832),22030=>array(86,-67,946,784),22031=>array(60,-66,960,812),22032=>array(91,-50,966,801),22033=>array(106,-70,913,836),22034=>array(99,-25,956,835),22035=>array(102,-63,906,799),22036=>array(90,-73,949,805),22037=>array(116,-64,951,785),22038=>array(84,-74,947,832),22039=>array(109,-67,905,836),22040=>array(91,-68,924,823),22041=>array(81,-73,926,836),22042=>array(101,-70,946,824),22043=>array(74,-75,975,833),22044=>array(106,-61,981,840),22045=>array(96,-70,941,832),22046=>array(103,-70,911,832),22047=>array(91,-68,933,822),22048=>array(81,-54,956,804),22049=>array(89,-23,939,836),22050=>array(106,-59,962,800),22051=>array(86,-65,883,814),22052=>array(91,-64,927,789),22053=>array(84,-65,973,831),22054=>array(27,-86,973,836),22055=>array(90,-64,945,848),22056=>array(91,-65,923,826),22057=>array(81,-68,945,831),22058=>array(106,-83,953,780),22059=>array(84,-71,949,831),22060=>array(77,-72,959,809),22061=>array(91,-59,924,827),22062=>array(95,-69,923,833),22063=>array(79,-77,949,843),22064=>array(86,-65,947,833),22065=>array(89,-72,891,780),22066=>array(79,-75,906,830),22067=>array(113,-80,964,832),22068=>array(91,-65,950,828),22069=>array(76,-67,944,835),22070=>array(93,-65,930,837),22071=>array(100,-48,948,863),22072=>array(80,-63,948,847),22073=>array(86,-67,952,845),22074=>array(115,-66,990,830),22075=>array(90,-69,933,833),22076=>array(77,-67,926,796),22077=>array(107,-68,956,785),22078=>array(111,-71,958,780),22079=>array(82,-68,937,783),22080=>array(113,-80,964,781),22081=>array(85,-48,959,768),22082=>array(92,-64,950,856),22083=>array(110,-63,971,841),22084=>array(77,-68,945,831),22085=>array(109,-70,922,834),22086=>array(113,-69,978,783),22087=>array(103,-36,934,841),22088=>array(98,-68,967,836),22089=>array(106,-68,983,837),22090=>array(108,-67,940,784),22091=>array(88,-73,973,837),22092=>array(92,-73,905,835),22093=>array(85,-71,944,843),22094=>array(87,-23,937,839),22095=>array(106,-63,991,858),22096=>array(64,-70,933,795),22097=>array(90,-62,948,840),22098=>array(86,-74,954,832),22099=>array(93,-76,936,832),22100=>array(79,-11,956,855),22101=>array(61,-77,904,856),22102=>array(82,-68,947,790),22103=>array(82,-61,951,830),22104=>array(80,-62,967,796),22105=>array(95,-70,966,851),22106=>array(109,-72,957,779),22107=>array(86,-68,940,829),22108=>array(80,-61,947,828),22109=>array(80,-64,945,834),22110=>array(79,-72,950,855),22111=>array(39,-72,934,844),22112=>array(78,-67,946,835),22113=>array(90,-59,956,849),22114=>array(80,-68,947,853),22115=>array(122,-75,936,779),22116=>array(81,-62,971,832),22117=>array(80,-72,955,835),22118=>array(104,-64,970,838),22119=>array(80,-68,932,830),22120=>array(49,-62,956,798),22121=>array(51,-23,944,789),22122=>array(80,-70,954,792),22123=>array(88,-32,949,825),22124=>array(92,-27,941,838),22125=>array(83,-57,964,864),22126=>array(104,-81,973,782),22127=>array(84,-75,954,830),22128=>array(99,-70,954,848),22129=>array(80,-68,954,833),22130=>array(74,-66,959,853),22131=>array(99,-73,975,833),22132=>array(85,-76,956,838),22133=>array(70,-72,942,847),22134=>array(84,-68,934,834),22135=>array(101,-76,980,838),22136=>array(76,-70,961,827),22137=>array(106,-53,918,841),22138=>array(83,-61,962,832),22139=>array(77,-38,964,839),22140=>array(95,-68,948,842),22141=>array(74,-63,953,835),22142=>array(106,-70,944,833),22143=>array(102,-71,941,780),22144=>array(89,-69,944,838),22145=>array(115,-68,951,785),22146=>array(92,-39,927,821),22147=>array(95,-76,957,828),22148=>array(79,-53,951,842),22149=>array(84,-65,936,789),22150=>array(83,-62,937,835),22151=>array(81,-68,956,834),22152=>array(65,-71,975,797),22153=>array(81,-61,952,835),22154=>array(91,-67,962,856),22155=>array(91,-65,968,833),22156=>array(100,-77,949,832),22157=>array(98,-33,938,821),22158=>array(91,-67,959,848),22159=>array(75,-64,947,837),22160=>array(92,-52,916,850),22161=>array(92,-62,966,828),22162=>array(81,-78,946,835),22163=>array(92,-70,962,839),22164=>array(75,-80,951,836),22165=>array(84,-69,943,846),22166=>array(82,-36,955,832),22167=>array(104,-66,984,787),22168=>array(91,-72,946,784),22169=>array(92,-70,934,830),22170=>array(111,-52,914,803),22171=>array(81,-69,972,847),22172=>array(84,-20,957,794),22173=>array(91,-80,925,841),22174=>array(41,-68,958,841),22175=>array(118,-48,989,844),22176=>array(72,-62,922,834),22177=>array(69,-67,954,833),22178=>array(57,-70,961,833),22179=>array(36,-64,942,786),22180=>array(75,-78,934,835),22181=>array(82,-60,949,830),22182=>array(78,-65,939,790),22183=>array(90,-71,947,828),22184=>array(79,-70,944,837),22185=>array(86,-68,933,835),22186=>array(98,-70,906,780),22187=>array(89,-69,966,842),22188=>array(92,-64,958,842),22189=>array(74,-63,967,835),22190=>array(43,-68,949,845),22191=>array(88,-66,914,784),22192=>array(103,-68,955,838),22193=>array(77,-68,963,835),22194=>array(55,-65,960,845),22195=>array(58,-64,955,841),22196=>array(46,-62,964,817),22197=>array(85,-59,948,846),22198=>array(82,-65,935,788),22199=>array(89,-69,968,842),22200=>array(74,-74,917,829),22201=>array(63,-72,959,834),22202=>array(67,-63,956,805),22203=>array(106,-60,919,794),22204=>array(76,-76,960,844),22205=>array(76,-75,948,833),22206=>array(92,-64,940,828),22207=>array(71,-67,939,834),22208=>array(84,-64,947,832),22209=>array(80,-66,950,807),22210=>array(55,-77,961,779),22211=>array(87,-65,954,831),22212=>array(83,-71,938,843),22213=>array(57,-66,969,792),22214=>array(87,-81,946,834),22215=>array(111,-68,957,790),22216=>array(82,-75,950,831),22217=>array(98,-65,962,796),22218=>array(72,-75,951,834),22219=>array(92,-74,947,824),22220=>array(88,-52,965,842),22221=>array(55,-51,949,839),22222=>array(64,-62,972,832),22223=>array(50,-68,944,839),22224=>array(75,-78,957,830),22225=>array(88,-74,929,817),22226=>array(74,-57,948,839),22227=>array(87,-52,945,845),22228=>array(78,-70,959,831),22229=>array(83,-77,953,832),22230=>array(74,-51,958,858),22231=>array(133,-54,879,781),22232=>array(129,-52,871,778),22233=>array(123,-30,865,754),22234=>array(132,-73,868,776),22235=>array(121,-35,879,744),22236=>array(123,-30,865,754),22237=>array(107,-65,886,789),22238=>array(129,-30,871,754),22239=>array(74,-68,863,839),22240=>array(130,-64,870,793),22241=>array(121,-64,895,788),22242=>array(109,-64,865,785),22243=>array(122,-64,878,785),22244=>array(110,-72,891,784),22245=>array(121,-67,894,784),22246=>array(113,-67,887,788),22247=>array(120,-67,892,785),22248=>array(121,-65,894,786),22249=>array(121,-67,894,784),22250=>array(138,-67,879,849),22251=>array(101,-68,901,788),22252=>array(111,-53,877,754),22253=>array(95,-63,900,791),22254=>array(99,-51,894,799),22255=>array(128,-59,884,789),22256=>array(114,-65,886,784),22257=>array(138,-67,879,849),22258=>array(122,-59,878,789),22259=>array(121,-70,879,781),22260=>array(109,-70,866,782),22261=>array(106,-63,863,776),22262=>array(122,-59,878,789),22263=>array(122,-68,905,791),22264=>array(115,-64,907,788),22265=>array(105,-64,897,788),22266=>array(115,-70,885,785),22267=>array(115,-70,885,785),22268=>array(115,-70,885,785),22269=>array(122,-59,878,789),22270=>array(110,-66,866,784),22271=>array(96,-68,892,789),22272=>array(106,-65,894,784),22273=>array(116,-69,903,774),22274=>array(112,-67,897,782),22275=>array(106,-70,905,789),22276=>array(101,-66,896,788),22277=>array(116,-69,873,794),22278=>array(112,-68,865,774),22279=>array(102,-67,896,788),22280=>array(105,-69,895,791),22281=>array(113,-65,900,790),22282=>array(107,-65,906,796),22283=>array(109,-67,890,780),22284=>array(96,-53,900,797),22285=>array(102,-61,905,784),22286=>array(116,-69,903,774),22287=>array(107,-69,896,785),22288=>array(111,-69,908,779),22289=>array(111,-69,898,774),22290=>array(102,-70,898,790),22291=>array(113,-71,899,787),22292=>array(103,-71,900,781),22293=>array(116,-69,903,774),22294=>array(119,-68,906,794),22295=>array(119,-68,906,794),22296=>array(112,-64,903,788),22297=>array(116,-69,903,774),22298=>array(93,-54,893,809),22299=>array(95,-53,893,806),22300=>array(98,-67,902,796),22301=>array(106,-69,894,774),22302=>array(99,-65,901,790),22303=>array(78,-13,922,810),22304=>array(59,-58,957,806),22305=>array(100,-15,895,796),22306=>array(54,-59,939,796),22307=>array(61,-29,960,776),22308=>array(53,-59,961,814),22309=>array(89,-67,934,778),22310=>array(68,-55,944,741),22311=>array(37,-63,913,770),22312=>array(49,-65,921,836),22313=>array(42,-64,949,793),22314=>array(55,-62,953,800),22315=>array(49,-55,930,790),22316=>array(49,-78,951,791),22317=>array(73,-39,927,809),22318=>array(43,-58,945,786),22319=>array(39,-53,954,776),22320=>array(56,-52,935,808),22321=>array(58,-58,952,817),22322=>array(50,-45,943,796),22323=>array(56,-71,907,785),22324=>array(68,-61,917,788),22325=>array(44,-59,948,781),22326=>array(60,-61,953,805),22327=>array(44,-65,932,788),22328=>array(59,-56,897,789),22329=>array(39,-63,912,832),22330=>array(29,-63,897,808),22331=>array(62,-64,948,810),22332=>array(84,-41,938,785),22333=>array(62,-72,903,794),22334=>array(40,-71,956,796),22335=>array(50,-63,967,802),22336=>array(44,-32,949,786),22337=>array(43,-69,952,800),22338=>array(43,-70,966,785),22339=>array(51,-68,958,774),22340=>array(44,-66,967,793),22341=>array(48,-60,972,811),22342=>array(38,-63,970,799),22343=>array(50,-63,906,831),22344=>array(44,-72,946,793),22345=>array(44,-59,944,806),22346=>array(41,-77,953,827),22347=>array(58,-78,967,798),22348=>array(53,-24,947,804),22349=>array(43,-71,948,799),22350=>array(48,-66,962,810),22351=>array(40,-55,968,790),22352=>array(73,-29,927,806),22353=>array(47,-67,951,813),22354=>array(57,-43,952,809),22355=>array(57,-29,952,813),22356=>array(57,-49,974,792),22357=>array(57,-59,952,805),22358=>array(28,-54,961,768),22359=>array(33,-70,947,834),22360=>array(43,-58,951,765),22361=>array(57,-54,952,758),22362=>array(52,-19,932,831),22363=>array(43,-38,939,816),22364=>array(41,-69,912,804),22365=>array(33,-58,943,798),22366=>array(35,-67,902,832),22367=>array(41,-60,955,852),22368=>array(62,-14,926,821),22369=>array(48,-71,963,812),22370=>array(46,-67,945,801),22371=>array(84,-14,933,777),22372=>array(65,-48,908,805),22373=>array(65,-32,933,771),22374=>array(48,-21,952,786),22375=>array(65,-49,936,791),22376=>array(60,-60,952,806),22377=>array(39,-68,945,796),22378=>array(50,-67,947,794),22379=>array(38,-52,904,794),22380=>array(56,-67,980,834),22381=>array(46,-83,953,777),22382=>array(53,-58,964,823),22383=>array(42,-14,948,785),22384=>array(59,-67,914,782),22385=>array(43,-70,957,797),22386=>array(60,-71,925,810),22387=>array(61,-71,920,835),22388=>array(60,-56,944,800),22389=>array(45,-18,953,824),22390=>array(40,-65,943,817),22391=>array(48,-61,947,807),22392=>array(56,-54,909,849),22393=>array(45,-60,958,843),22394=>array(45,-69,955,836),22395=>array(56,-63,954,828),22396=>array(51,-67,941,832),22397=>array(67,-66,968,847),22398=>array(75,-61,918,836),22399=>array(71,-79,945,842),22400=>array(56,-63,940,828),22401=>array(56,-60,967,828),22402=>array(73,-32,927,826),22403=>array(49,-11,952,838),22404=>array(47,-31,941,829),22405=>array(37,-67,929,824),22406=>array(35,-66,911,826),22407=>array(30,-65,903,755),22408=>array(34,-32,946,833),22409=>array(46,-28,955,840),22410=>array(70,-61,939,786),22411=>array(59,-25,953,827),22412=>array(30,-70,898,781),22413=>array(55,-70,883,841),22414=>array(30,-65,948,848),22415=>array(55,-71,954,823),22416=>array(56,-36,926,853),22417=>array(50,-58,920,844),22418=>array(52,-36,926,814),22419=>array(37,-63,949,834),22420=>array(59,-20,954,790),22421=>array(59,-11,954,831),22422=>array(67,-43,904,842),22423=>array(37,-54,956,840),22424=>array(50,-73,963,822),22425=>array(43,-52,962,842),22426=>array(49,-11,953,842),22427=>array(43,-65,965,809),22428=>array(58,-62,949,809),22429=>array(46,-57,963,850),22430=>array(42,-43,953,839),22431=>array(51,-73,955,821),22432=>array(37,-68,952,809),22433=>array(34,-32,946,833),22434=>array(50,-69,932,833),22435=>array(47,-14,947,808),22436=>array(31,-22,931,811),22437=>array(49,-70,960,827),22438=>array(75,-27,949,790),22439=>array(38,-77,891,842),22440=>array(48,-59,954,843),22441=>array(50,-8,922,764),22442=>array(41,-70,949,839),22443=>array(32,-11,932,830),22444=>array(41,-72,946,831),22445=>array(43,-6,923,808),22446=>array(41,-66,965,842),22447=>array(40,-49,942,793),22448=>array(51,-64,940,835),22449=>array(41,-60,883,826),22450=>array(41,-27,941,813),22451=>array(45,-67,956,833),22452=>array(40,-66,923,832),22453=>array(50,-72,951,832),22454=>array(59,-65,948,833),22455=>array(56,-65,944,783),22456=>array(51,-67,959,857),22457=>array(43,-68,943,827),22458=>array(49,-68,954,817),22459=>array(49,-72,960,804),22460=>array(63,-24,969,822),22461=>array(55,-15,951,846),22462=>array(54,-64,955,800),22463=>array(53,-66,941,833),22464=>array(97,-32,916,829),22465=>array(57,-70,958,821),22466=>array(46,-70,959,791),22467=>array(50,-71,956,845),22468=>array(46,-65,949,846),22469=>array(65,-24,959,842),22470=>array(63,-71,906,824),22471=>array(51,-61,893,811),22472=>array(46,-68,953,836),22473=>array(46,-73,945,836),22474=>array(55,-15,951,842),22475=>array(39,-25,943,793),22476=>array(54,-74,955,827),22477=>array(61,-67,903,791),22478=>array(41,-68,951,834),22479=>array(36,-64,964,829),22480=>array(50,-62,970,814),22481=>array(55,-30,951,831),22482=>array(47,-62,945,827),22483=>array(61,-65,956,806),22484=>array(40,-68,948,833),22485=>array(55,-20,959,814),22486=>array(59,-48,962,832),22487=>array(43,-56,945,835),22488=>array(39,-64,923,826),22489=>array(43,-70,938,806),22490=>array(31,-67,892,802),22491=>array(31,-51,915,802),22492=>array(48,-27,967,817),22493=>array(17,-43,964,849),22494=>array(26,-58,966,848),22495=>array(36,-69,965,835),22496=>array(39,-68,959,854),22497=>array(53,-20,959,821),22498=>array(47,-48,959,823),22499=>array(48,-65,951,822),22500=>array(39,-56,961,860),22501=>array(53,-67,959,835),22502=>array(32,-61,959,855),22503=>array(32,-52,952,820),22504=>array(26,-65,974,853),22505=>array(46,-60,954,836),22506=>array(42,-12,944,831),22507=>array(56,-62,907,839),22508=>array(51,-73,965,824),22509=>array(35,-64,949,835),22510=>array(48,-72,971,829),22511=>array(45,-30,945,829),22512=>array(46,-62,959,833),22513=>array(45,-74,963,830),22514=>array(50,-68,976,841),22515=>array(62,-68,899,831),22516=>array(35,-67,953,835),22517=>array(47,-50,959,812),22518=>array(32,-67,973,831),22519=>array(57,-69,960,833),22520=>array(55,-67,911,818),22521=>array(36,-65,938,835),22522=>array(36,-28,980,832),22523=>array(46,-67,951,835),22524=>array(52,-64,958,836),22525=>array(42,-69,948,801),22526=>array(52,-27,945,792),22527=>array(67,-27,945,850),22528=>array(48,-65,906,818),22529=>array(47,-67,966,808),22530=>array(84,-14,933,832),22531=>array(52,-23,958,855),22532=>array(53,-67,956,838),22533=>array(56,-22,944,784),22534=>array(45,-73,950,834),22535=>array(60,-22,954,833),22536=>array(56,-48,911,828),22537=>array(45,-58,947,835),22538=>array(68,-12,951,794),22539=>array(41,-55,907,820),22540=>array(57,-69,901,803),22541=>array(42,-69,962,837),22542=>array(44,-70,963,833),22543=>array(63,-23,958,855),22544=>array(50,-71,956,804),22545=>array(45,-29,924,826),22546=>array(53,-49,970,789),22547=>array(57,-67,927,829),22548=>array(52,-67,966,811),22549=>array(58,-19,912,828),22550=>array(55,-65,920,841),22551=>array(26,-65,944,844),22552=>array(76,-28,972,835),22553=>array(32,-25,953,810),22554=>array(51,-65,936,787),22555=>array(54,-67,953,806),22556=>array(53,-67,966,832),22557=>array(64,-67,915,799),22558=>array(37,-65,970,833),22559=>array(59,-63,945,840),22560=>array(35,-72,966,840),22561=>array(38,-19,933,830),22562=>array(50,-70,944,836),22563=>array(66,-68,922,803),22564=>array(48,-70,966,793),22565=>array(54,-12,965,828),22566=>array(40,-50,956,844),22567=>array(35,-51,968,821),22568=>array(60,-69,924,807),22569=>array(38,-71,951,823),22570=>array(32,-68,946,829),22571=>array(38,-68,969,829),22572=>array(56,-70,976,836),22573=>array(66,-32,967,824),22574=>array(60,-69,952,800),22575=>array(43,-65,962,837),22576=>array(44,-62,956,807),22577=>array(65,-67,966,832),22578=>array(67,-16,963,770),22579=>array(43,-52,907,820),22580=>array(42,-63,948,788),22581=>array(39,-68,940,833),22582=>array(58,-67,952,835),22583=>array(52,-70,951,843),22584=>array(56,-71,973,803),22585=>array(50,-25,949,839),22586=>array(60,-66,971,829),22587=>array(49,-29,951,827),22588=>array(47,-16,954,826),22589=>array(54,-64,954,804),22590=>array(52,-64,978,842),22591=>array(58,-71,956,821),22592=>array(40,-69,955,804),22593=>array(55,-27,945,815),22594=>array(40,-26,961,826),22595=>array(40,-68,950,835),22596=>array(35,-66,911,804),22597=>array(45,-72,971,829),22598=>array(54,-60,944,846),22599=>array(50,-27,927,842),22600=>array(59,-16,958,794),22601=>array(50,-73,973,829),22602=>array(47,-68,965,841),22603=>array(64,-17,940,831),22604=>array(46,-68,915,796),22605=>array(28,-55,972,835),22606=>array(52,-71,960,831),22607=>array(39,-41,952,816),22608=>array(36,-64,980,833),22609=>array(53,-11,948,833),22610=>array(36,-65,956,829),22611=>array(56,-71,964,806),22612=>array(42,-69,963,829),22613=>array(54,-68,976,827),22614=>array(49,-65,964,842),22615=>array(46,-17,970,856),22616=>array(44,-69,948,819),22617=>array(42,-63,944,841),22618=>array(37,-60,973,807),22619=>array(53,-70,965,805),22620=>array(41,-60,965,807),22621=>array(55,-66,951,834),22622=>array(48,-30,949,830),22623=>array(55,-40,963,811),22624=>array(50,-60,961,834),22625=>array(52,-61,927,834),22626=>array(62,-60,928,839),22627=>array(58,-31,953,817),22628=>array(54,-70,967,818),22629=>array(59,-69,954,803),22630=>array(64,-46,953,815),22631=>array(54,-8,954,859),22632=>array(37,-67,966,826),22633=>array(49,-34,950,831),22634=>array(49,-65,934,836),22635=>array(47,-69,946,836),22636=>array(35,-68,948,785),22637=>array(47,-30,959,809),22638=>array(47,-64,965,849),22639=>array(63,-67,921,835),22640=>array(52,-46,951,840),22641=>array(57,-26,951,847),22642=>array(33,-56,941,850),22643=>array(53,-66,961,844),22644=>array(56,-71,906,831),22645=>array(44,-49,943,834),22646=>array(54,-69,959,838),22647=>array(56,-64,958,839),22648=>array(53,-26,940,803),22649=>array(53,-24,959,833),22650=>array(48,-69,954,835),22651=>array(46,-73,969,820),22652=>array(42,-66,961,830),22653=>array(34,-58,967,839),22654=>array(49,-34,952,831),22655=>array(33,-62,951,846),22656=>array(43,-71,957,810),22657=>array(52,-64,983,817),22658=>array(47,-70,957,804),22659=>array(39,-65,960,828),22660=>array(51,-65,961,838),22661=>array(52,-25,945,789),22662=>array(56,-69,942,823),22663=>array(53,-71,953,838),22664=>array(52,-64,920,831),22665=>array(28,-64,962,821),22666=>array(63,-26,958,838),22667=>array(60,-68,953,841),22668=>array(46,-67,962,851),22669=>array(58,-38,964,846),22670=>array(46,-69,950,836),22671=>array(45,-43,943,847),22672=>array(56,-32,956,823),22673=>array(48,-65,954,842),22674=>array(19,-80,923,826),22675=>array(45,-40,954,834),22676=>array(45,-58,945,839),22677=>array(40,-60,962,801),22678=>array(40,-69,949,837),22679=>array(38,-73,905,835),22680=>array(39,-67,969,833),22681=>array(38,-71,927,821),22682=>array(29,-68,947,821),22683=>array(34,-72,968,812),22684=>array(60,-35,968,847),22685=>array(39,-57,963,847),22686=>array(52,-62,961,830),22687=>array(31,-64,911,827),22688=>array(48,-70,960,804),22689=>array(40,-69,953,836),22690=>array(49,-64,959,843),22691=>array(36,-76,965,827),22692=>array(29,-69,953,836),22693=>array(49,-32,962,843),22694=>array(52,-63,932,827),22695=>array(55,-61,976,836),22696=>array(56,-43,949,816),22697=>array(38,-68,964,826),22698=>array(43,-52,969,831),22699=>array(41,-72,950,834),22700=>array(67,-27,967,844),22701=>array(32,-24,947,826),22702=>array(67,-15,956,857),22703=>array(34,-33,954,847),22704=>array(49,-67,954,806),22705=>array(39,-32,981,828),22706=>array(30,-62,954,845),22707=>array(43,-76,962,838),22708=>array(47,-57,950,831),22709=>array(60,-69,933,779),22710=>array(47,-68,963,833),22711=>array(35,-68,945,831),22712=>array(52,-62,938,842),22713=>array(52,-67,924,787),22714=>array(32,-64,972,851),22715=>array(52,-68,950,833),22716=>array(56,-33,977,831),22717=>array(46,-75,977,846),22718=>array(64,-25,960,828),22719=>array(56,-70,962,806),22720=>array(26,-69,962,845),22721=>array(62,-26,957,831),22722=>array(36,-38,964,780),22723=>array(43,-26,944,788),22724=>array(44,-32,959,832),22725=>array(62,-32,953,851),22726=>array(79,-34,951,826),22727=>array(43,-34,947,835),22728=>array(50,-68,987,830),22729=>array(47,-72,969,833),22730=>array(48,-71,965,839),22731=>array(61,-65,918,832),22732=>array(35,-79,966,837),22733=>array(41,-32,953,791),22734=>array(38,-54,969,857),22735=>array(49,-34,951,823),22736=>array(53,-35,962,794),22737=>array(46,-26,962,836),22738=>array(44,-18,956,834),22739=>array(42,-45,953,807),22740=>array(41,-55,949,840),22741=>array(43,-62,965,828),22742=>array(31,-51,947,818),22743=>array(36,-35,954,823),22744=>array(59,-28,949,783),22745=>array(52,-77,967,847),22746=>array(61,-66,969,836),22747=>array(53,-65,920,806),22748=>array(35,-60,951,808),22749=>array(36,-65,973,826),22750=>array(51,-63,970,844),22751=>array(57,-24,950,849),22752=>array(29,-68,952,841),22753=>array(29,-64,964,843),22754=>array(46,-65,959,820),22755=>array(38,-64,963,831),22756=>array(42,-61,951,837),22757=>array(42,-70,948,791),22758=>array(59,-70,953,829),22759=>array(33,-72,957,811),22760=>array(71,-28,941,781),22761=>array(59,-71,932,793),22762=>array(31,-75,959,848),22763=>array(103,28,894,796),22764=>array(49,-18,951,796),22765=>array(75,-58,888,834),22766=>array(41,-63,913,829),22767=>array(33,-69,948,820),22768=>array(47,-55,927,837),22769=>array(74,-40,927,846),22770=>array(62,-58,933,846),22771=>array(42,-58,955,846),22772=>array(59,-17,951,826),22773=>array(52,-34,969,842),22774=>array(59,-9,909,834),22775=>array(55,-21,948,835),22776=>array(59,-38,909,834),22777=>array(55,-21,948,835),22778=>array(72,-32,947,831),22779=>array(50,-50,972,806),22780=>array(55,-23,953,830),22781=>array(55,-61,951,836),22782=>array(49,-18,950,829),22783=>array(62,-72,954,845),22784=>array(55,-61,951,836),22785=>array(95,-62,932,847),22786=>array(59,-46,954,826),22787=>array(67,-64,923,791),22788=>array(18,-67,935,818),22789=>array(30,-82,946,827),22790=>array(51,-71,955,833),22791=>array(43,-63,930,827),22792=>array(37,-60,961,832),22793=>array(58,-62,959,830),22794=>array(55,-41,952,812),22795=>array(71,-67,937,842),22796=>array(54,-64,969,833),22797=>array(55,-65,954,829),22798=>array(60,-67,967,829),22799=>array(53,-65,954,812),22800=>array(84,-66,945,844),22801=>array(53,-65,961,843),22802=>array(46,-67,954,795),22803=>array(55,-67,965,823),22804=>array(36,-53,948,841),22805=>array(95,-71,856,842),22806=>array(41,-65,967,836),22807=>array(46,-66,945,828),22808=>array(57,-59,872,844),22809=>array(24,-66,968,789),22810=>array(89,-68,911,849),22811=>array(107,-81,928,807),22812=>array(45,-65,959,828),22813=>array(29,-47,965,804),22814=>array(119,-58,929,821),22815=>array(14,-59,907,842),22816=>array(66,-65,921,847),22817=>array(66,-65,953,847),22818=>array(59,-73,928,839),22819=>array(71,-73,915,845),22820=>array(58,-76,942,848),22821=>array(22,-69,925,840),22822=>array(50,-69,952,823),22823=>array(85,-43,933,837),22824=>array(55,-63,950,845),22825=>array(61,-51,947,778),22826=>array(83,-48,941,834),22827=>array(74,-51,943,834),22828=>array(29,-57,979,840),22829=>array(84,-55,931,798),22830=>array(54,-70,968,826),22831=>array(58,-66,957,835),22832=>array(76,-70,953,835),22833=>array(86,-70,941,829),22834=>array(33,-62,947,835),22835=>array(54,-7,946,839),22836=>array(62,-59,913,831),22837=>array(43,-61,945,835),22838=>array(36,-71,969,824),22839=>array(58,-68,953,835),22840=>array(29,-70,982,855),22841=>array(29,-59,936,830),22842=>array(33,-59,947,835),22843=>array(21,-58,937,835),22844=>array(60,-67,955,835),22845=>array(66,-71,957,835),22846=>array(69,-64,955,834),22847=>array(53,-45,957,835),22848=>array(53,-62,982,783),22849=>array(40,-31,954,821),22850=>array(50,-67,958,832),22851=>array(67,-88,958,847),22852=>array(32,-44,976,842),22853=>array(59,-67,965,838),22854=>array(66,-41,957,835),22855=>array(60,-65,929,840),22856=>array(62,-62,960,848),22857=>array(44,-72,958,840),22858=>array(59,-74,964,831),22859=>array(21,-58,937,835),22860=>array(37,-60,963,828),22861=>array(35,-60,972,843),22862=>array(36,-22,961,851),22863=>array(46,-77,954,840),22864=>array(39,-66,966,841),22865=>array(43,-70,957,830),22866=>array(36,-65,974,838),22867=>array(57,-65,965,829),22868=>array(48,-71,970,835),22869=>array(53,-57,972,843),22870=>array(30,-59,954,839),22871=>array(43,-65,966,844),22872=>array(42,-65,955,829),22873=>array(29,-60,975,848),22874=>array(54,-68,960,839),22875=>array(26,-68,997,841),22876=>array(47,-69,970,836),22877=>array(70,-82,962,836),22878=>array(47,-75,976,833),22879=>array(41,-59,974,840),22880=>array(40,-71,959,829),22881=>array(44,-64,973,793),22882=>array(36,-68,970,840),22883=>array(51,-78,971,807),22884=>array(26,-77,972,837),22885=>array(39,-73,961,840),22886=>array(44,-66,960,839),22887=>array(47,-72,968,842),22888=>array(39,-64,970,852),22889=>array(32,-22,966,845),22890=>array(30,-65,967,843),22891=>array(40,-71,968,844),22892=>array(39,-64,970,847),22893=>array(35,-63,982,839),22894=>array(51,-69,960,849),22895=>array(29,-80,983,839),22896=>array(40,-73,967,781),22897=>array(48,-66,966,839),22898=>array(42,-72,961,832),22899=>array(86,-53,911,836),22900=>array(64,-67,949,819),22901=>array(52,-63,948,840),22902=>array(68,-70,920,821),22903=>array(63,-63,958,833),22904=>array(69,-65,959,836),22905=>array(40,-56,948,836),22906=>array(100,-70,972,832),22907=>array(65,-64,951,828),22908=>array(64,-55,958,831),22909=>array(52,-67,961,818),22910=>array(62,-65,912,829),22911=>array(44,-60,961,830),22912=>array(63,-66,944,821),22913=>array(66,-59,919,844),22914=>array(71,-74,897,815),22915=>array(29,-52,945,840),22916=>array(54,-72,942,836),22917=>array(77,-53,964,816),22918=>array(31,-67,938,824),22919=>array(47,-62,861,833),22920=>array(46,-61,914,828),22921=>array(61,-71,955,832),22922=>array(51,-72,935,832),22923=>array(76,-72,962,833),22924=>array(64,-69,954,837),22925=>array(51,-67,952,837),22926=>array(56,-72,974,840),22927=>array(74,-66,972,842),22928=>array(53,-56,974,841),22929=>array(49,-54,941,849),22930=>array(62,-68,934,839),22931=>array(57,-69,961,836),22932=>array(47,-64,957,853),22933=>array(57,-66,891,838),22934=>array(47,-70,957,830),22935=>array(39,-66,966,850),22936=>array(45,-69,958,830),22937=>array(53,-67,952,835),22938=>array(49,-64,966,840),22939=>array(66,-44,940,823),22940=>array(58,-69,955,831),22941=>array(39,-63,961,835),22942=>array(45,-50,956,827),22943=>array(66,-59,920,785),22944=>array(61,-66,917,835),22945=>array(57,-70,946,837),22946=>array(50,-67,971,836),22947=>array(52,-48,966,839),22948=>array(46,-62,951,830),22949=>array(67,-71,903,834),22950=>array(44,-66,951,836),22951=>array(53,-68,955,836),22952=>array(55,-77,951,829),22953=>array(53,-64,935,824),22954=>array(36,-66,913,818),22955=>array(36,-64,890,825),22956=>array(62,-62,965,828),22957=>array(58,-64,975,844),22958=>array(58,-65,945,838),22959=>array(61,-65,918,845),22960=>array(64,-67,951,842),22961=>array(62,-73,911,835),22962=>array(50,-58,937,835),22963=>array(53,-52,965,847),22964=>array(59,-63,945,844),22965=>array(60,-56,958,832),22966=>array(45,-56,956,835),22967=>array(66,-60,975,844),22968=>array(61,-62,961,830),22969=>array(30,-71,978,833),22970=>array(55,-66,973,838),22971=>array(80,-70,935,837),22972=>array(62,-60,959,830),22973=>array(59,-62,918,837),22974=>array(65,-65,936,828),22975=>array(60,-55,924,821),22976=>array(53,-65,956,842),22977=>array(60,-65,918,834),22978=>array(71,-58,969,830),22979=>array(60,-58,962,826),22980=>array(61,-61,954,826),22981=>array(56,-72,953,839),22982=>array(60,-67,948,832),22983=>array(58,-70,941,830),22984=>array(55,-50,968,860),22985=>array(37,-68,954,840),22986=>array(70,-64,934,832),22987=>array(54,-74,945,835),22988=>array(56,-62,965,839),22989=>array(32,-56,959,831),22990=>array(42,-77,968,834),22991=>array(62,-69,955,837),22992=>array(56,-65,956,818),22993=>array(56,-64,956,838),22994=>array(66,-64,978,841),22995=>array(52,-69,952,827),22996=>array(58,-67,912,836),22997=>array(58,-67,958,827),22998=>array(51,-52,949,822),22999=>array(41,-70,922,825),23000=>array(48,-67,956,850),23001=>array(40,-64,959,834),23002=>array(53,-70,960,833),23003=>array(60,-70,906,830),23004=>array(67,-63,926,850),23005=>array(38,-65,969,832),23006=>array(48,-52,957,850),23007=>array(38,-68,948,842),23008=>array(57,-74,907,832),23009=>array(80,-72,938,829),23010=>array(63,-72,929,831),23011=>array(38,-66,970,846),23012=>array(62,-66,957,837),23013=>array(47,-54,959,833),23014=>array(49,-71,962,843),23015=>array(52,-65,952,845),23016=>array(54,-67,968,837),23017=>array(68,-75,956,827),23018=>array(45,-69,956,824),23019=>array(50,-71,955,831),23020=>array(62,-66,956,829),23021=>array(67,-73,931,837),23022=>array(69,-59,960,837),23023=>array(64,-74,953,823),23024=>array(45,-60,909,836),23025=>array(44,-49,979,860),23026=>array(61,-74,954,831),23027=>array(61,-70,887,830),23028=>array(83,-73,938,824),23029=>array(69,-79,954,821),23030=>array(52,-50,970,858),23031=>array(55,-73,957,827),23032=>array(63,-73,953,827),23033=>array(40,-59,953,845),23034=>array(64,-74,953,823),23035=>array(53,-66,895,831),23036=>array(73,-80,932,822),23037=>array(78,-75,947,820),23038=>array(57,-80,955,823),23039=>array(59,-74,939,842),23040=>array(64,-67,951,830),23041=>array(53,-74,959,832),23042=>array(73,-73,959,832),23043=>array(73,-68,953,833),23044=>array(44,-65,935,829),23045=>array(44,-77,934,817),23046=>array(28,-69,936,822),23047=>array(40,-60,939,836),23048=>array(56,-82,919,834),23049=>array(34,-64,962,839),23050=>array(64,-68,958,830),23051=>array(62,-70,897,836),23052=>array(46,-48,956,840),23053=>array(46,-70,961,840),23054=>array(37,-68,939,830),23055=>array(56,-62,956,838),23056=>array(64,-64,953,837),23057=>array(37,-68,943,830),23058=>array(56,-67,953,845),23059=>array(41,-67,963,823),23060=>array(82,-69,954,839),23061=>array(60,-62,964,837),23062=>array(63,-69,980,829),23063=>array(57,-69,983,833),23064=>array(62,-75,962,831),23065=>array(51,-48,952,845),23066=>array(72,-74,923,808),23067=>array(64,-71,977,833),23068=>array(50,-71,947,833),23069=>array(66,-54,969,852),23070=>array(48,-68,945,833),23071=>array(63,-72,897,831),23072=>array(66,-66,965,831),23073=>array(66,-66,961,831),23074=>array(54,-66,951,867),23075=>array(65,-67,933,845),23076=>array(37,-68,939,829),23077=>array(42,-63,972,832),23078=>array(62,-64,954,828),23079=>array(62,-68,949,846),23080=>array(47,-64,954,828),23081=>array(57,-67,967,848),23082=>array(57,-68,948,828),23083=>array(39,-67,967,828),23084=>array(42,-64,962,833),23085=>array(73,-74,964,833),23086=>array(64,-68,941,832),23087=>array(64,-71,948,833),23088=>array(64,-67,955,840),23089=>array(32,-62,947,826),23090=>array(43,-72,891,819),23091=>array(55,-64,912,839),23092=>array(46,-73,870,832),23093=>array(49,-71,968,835),23094=>array(67,-75,940,793),23095=>array(65,-44,953,833),23096=>array(51,-78,953,833),23097=>array(44,-77,964,828),23098=>array(37,-67,973,823),23099=>array(61,-64,973,835),23100=>array(68,-69,906,832),23101=>array(57,-67,955,828),23102=>array(51,-69,958,827),23103=>array(37,-58,939,827),23104=>array(38,-65,952,835),23105=>array(55,-68,930,832),23106=>array(63,-71,912,840),23107=>array(58,-68,957,834),23108=>array(53,-67,960,839),23109=>array(64,-61,921,847),23110=>array(66,-74,946,836),23111=>array(42,-67,959,834),23112=>array(46,-72,971,831),23113=>array(59,-63,954,836),23114=>array(37,-67,977,837),23115=>array(44,-66,953,837),23116=>array(49,-71,980,828),23117=>array(54,-65,962,839),23118=>array(69,-68,953,842),23119=>array(42,-67,968,848),23120=>array(52,-70,979,827),23121=>array(50,-70,962,830),23122=>array(50,-68,971,836),23123=>array(64,-74,935,827),23124=>array(54,-63,964,834),23125=>array(37,-65,964,836),23126=>array(45,-68,979,829),23127=>array(54,-70,960,832),23128=>array(50,-62,966,831),23129=>array(48,-60,946,841),23130=>array(55,-71,960,833),23131=>array(52,-62,955,838),23132=>array(47,-67,954,790),23133=>array(52,-71,961,828),23134=>array(49,-67,959,839),23135=>array(66,-71,912,829),23136=>array(65,-68,924,839),23137=>array(44,-64,970,839),23138=>array(54,-65,951,850),23139=>array(59,-75,922,834),23140=>array(52,-72,898,830),23141=>array(56,-66,967,833),23142=>array(42,-74,944,832),23143=>array(45,-64,948,837),23144=>array(34,-61,957,834),23145=>array(53,-67,948,837),23146=>array(47,-78,964,822),23147=>array(54,-56,949,834),23148=>array(37,-50,950,829),23149=>array(45,-54,954,833),23150=>array(69,-68,945,834),23151=>array(57,-78,918,795),23152=>array(50,-73,959,835),23153=>array(57,-78,944,848),23154=>array(70,-65,962,835),23155=>array(61,-62,934,835),23156=>array(56,-74,915,780),23157=>array(37,-70,956,825),23158=>array(52,-63,903,831),23159=>array(40,-65,949,852),23160=>array(57,-68,947,830),23161=>array(65,-67,952,835),23162=>array(51,-69,963,841),23163=>array(50,-65,951,833),23164=>array(51,-64,954,840),23165=>array(53,-70,964,832),23166=>array(41,-70,964,849),23167=>array(63,-65,967,834),23168=>array(67,-68,932,832),23169=>array(50,-64,963,849),23170=>array(65,-61,935,858),23171=>array(57,-68,961,832),23172=>array(57,-71,961,833),23173=>array(38,-49,955,827),23174=>array(57,-72,945,835),23175=>array(57,-72,934,832),23176=>array(70,-62,950,824),23177=>array(57,-62,943,832),23178=>array(43,-73,951,833),23179=>array(58,-73,973,823),23180=>array(52,-74,955,830),23181=>array(56,-82,954,852),23182=>array(57,-68,965,838),23183=>array(50,-69,950,830),23184=>array(51,-72,952,787),23185=>array(65,-66,959,842),23186=>array(60,-66,973,836),23187=>array(60,-58,959,841),23188=>array(52,-70,954,834),23189=>array(57,-76,964,833),23190=>array(47,-60,988,842),23191=>array(73,-50,961,836),23192=>array(57,-65,951,842),23193=>array(48,-74,961,843),23194=>array(63,-73,900,827),23195=>array(42,-65,949,836),23196=>array(56,-82,954,833),23197=>array(50,-72,945,835),23198=>array(55,-69,986,832),23199=>array(44,-62,963,810),23200=>array(64,-65,927,845),23201=>array(58,-67,964,833),23202=>array(49,-70,920,825),23203=>array(43,-66,954,835),23204=>array(67,-53,976,832),23205=>array(53,-78,921,834),23206=>array(55,-67,914,832),23207=>array(54,-65,919,837),23208=>array(54,-63,967,835),23209=>array(62,-71,914,827),23210=>array(35,-74,951,815),23211=>array(38,-60,965,836),23212=>array(56,-67,981,825),23213=>array(57,-82,931,825),23214=>array(41,-70,974,849),23215=>array(46,-60,928,845),23216=>array(46,-65,908,832),23217=>array(55,-73,967,840),23218=>array(43,-53,958,852),23219=>array(65,-67,967,846),23220=>array(59,-76,974,823),23221=>array(31,-65,968,834),23222=>array(55,-67,954,827),23223=>array(43,-64,950,837),23224=>array(55,-71,966,843),23225=>array(56,-69,915,834),23226=>array(51,-73,975,829),23227=>array(38,-76,950,832),23228=>array(51,-72,968,818),23229=>array(56,-71,922,818),23230=>array(18,-64,948,837),23231=>array(52,-64,972,855),23232=>array(48,-69,962,833),23233=>array(53,-69,970,832),23234=>array(42,-65,958,840),23235=>array(60,-71,945,840),23236=>array(38,-65,968,839),23237=>array(72,-60,954,844),23238=>array(65,-69,977,833),23239=>array(54,-82,962,829),23240=>array(61,-73,932,831),23241=>array(66,-76,957,831),23242=>array(49,-65,954,832),23243=>array(36,-57,929,818),23244=>array(51,-64,966,850),23245=>array(52,-70,927,832),23246=>array(44,-69,950,840),23247=>array(49,-64,946,842),23248=>array(57,-65,958,829),23249=>array(82,-71,934,791),23250=>array(44,-73,931,820),23251=>array(43,-53,967,844),23252=>array(43,-72,920,826),23253=>array(58,-56,971,830),23254=>array(22,-62,953,831),23255=>array(36,-77,951,837),23256=>array(44,-61,977,843),23257=>array(38,-63,970,841),23258=>array(47,-47,972,833),23259=>array(52,-74,958,785),23260=>array(52,-65,964,849),23261=>array(58,-70,962,834),23262=>array(54,-67,957,836),23263=>array(44,-47,951,841),23264=>array(37,-66,955,841),23265=>array(37,-64,948,836),23266=>array(51,-72,954,826),23267=>array(43,-61,952,836),23268=>array(55,-55,938,836),23269=>array(50,-69,951,831),23270=>array(30,-77,921,826),23271=>array(36,-67,943,830),23272=>array(59,-72,972,833),23273=>array(69,-69,964,835),23274=>array(37,-72,973,839),23275=>array(68,-62,989,837),23276=>array(63,-66,978,834),23277=>array(56,-68,953,831),23278=>array(50,-70,954,828),23279=>array(44,-75,960,833),23280=>array(69,-69,984,837),23281=>array(41,-70,914,823),23282=>array(49,-66,979,840),23283=>array(51,-50,957,859),23284=>array(62,-80,956,829),23285=>array(40,-65,961,836),23286=>array(39,-54,970,856),23287=>array(34,-65,950,841),23288=>array(44,-78,962,837),23289=>array(46,-73,966,828),23290=>array(42,-68,911,835),23291=>array(57,-65,915,823),23292=>array(38,-74,958,831),23293=>array(44,-74,980,838),23294=>array(37,-74,954,836),23295=>array(48,-77,965,834),23296=>array(53,-67,964,852),23297=>array(35,-77,989,831),23298=>array(54,-82,981,833),23299=>array(45,-77,951,827),23300=>array(38,-69,954,833),23301=>array(38,-69,952,829),23302=>array(41,-64,991,858),23303=>array(38,-79,960,832),23304=>array(44,-64,965,835),23305=>array(38,-64,956,841),23306=>array(64,-89,940,832),23307=>array(34,-68,958,835),23308=>array(52,-68,966,834),23309=>array(38,-66,965,835),23310=>array(42,-70,975,831),23311=>array(40,-68,975,831),23312=>array(44,-74,976,841),23313=>array(30,-50,963,844),23314=>array(45,-68,973,864),23315=>array(45,-80,977,839),23316=>array(41,-66,971,831),23317=>array(46,-64,941,835),23318=>array(61,-75,948,848),23319=>array(35,-56,962,850),23320=>array(34,-64,952,837),23321=>array(36,-65,964,837),23322=>array(42,-70,972,844),23323=>array(46,-60,991,836),23324=>array(53,-84,969,849),23325=>array(46,-64,956,848),23326=>array(50,-41,962,835),23327=>array(46,-70,965,853),23328=>array(38,-67,984,838),23329=>array(36,-66,975,843),23330=>array(43,-79,966,837),23331=>array(51,-70,964,837),23332=>array(37,-68,973,848),23333=>array(51,-70,956,825),23334=>array(50,-71,955,826),23335=>array(41,-70,953,825),23336=>array(34,-50,963,838),23337=>array(43,-70,942,831),23338=>array(44,-67,966,844),23339=>array(34,-65,947,840),23340=>array(48,-68,951,829),23341=>array(44,-68,976,815),23342=>array(45,-74,950,807),23343=>array(45,-68,957,824),23344=>array(68,-69,924,791),23345=>array(53,-75,953,840),23346=>array(46,-63,934,829),23347=>array(43,-65,963,831),23348=>array(43,-69,956,850),23349=>array(40,-68,936,845),23350=>array(43,-64,962,859),23351=>array(36,-67,962,846),23352=>array(54,-65,958,851),23353=>array(27,-65,977,829),23354=>array(57,-53,971,829),23355=>array(46,-66,961,841),23356=>array(62,-74,921,831),23357=>array(40,-67,976,839),23358=>array(35,-50,968,848),23359=>array(41,-68,971,836),23360=>array(51,-65,932,831),23361=>array(68,-66,930,785),23362=>array(42,-43,959,840),23363=>array(59,-61,989,840),23364=>array(41,-66,909,832),23365=>array(43,-65,969,821),23366=>array(55,-67,954,831),23367=>array(46,-64,980,832),23368=>array(48,-65,943,831),23369=>array(66,-58,937,839),23370=>array(41,-78,942,839),23371=>array(44,-72,962,825),23372=>array(55,-74,957,839),23373=>array(39,-67,974,831),23374=>array(46,-73,947,830),23375=>array(45,-65,953,846),23376=>array(98,-49,921,787),23377=>array(72,-52,927,782),23378=>array(221,-58,921,778),23379=>array(94,-53,939,781),23380=>array(69,-61,953,825),23381=>array(74,-59,942,783),23382=>array(41,-52,955,786),23383=>array(94,-61,926,832),23384=>array(47,-69,943,839),23385=>array(31,-66,937,823),23386=>array(53,-65,947,840),23387=>array(74,-64,944,831),23388=>array(60,-65,967,834),23389=>array(48,-61,928,834),23390=>array(24,-31,945,786),23391=>array(66,-17,955,786),23392=>array(86,-51,920,828),23393=>array(20,-70,953,839),23394=>array(53,-64,947,847),23395=>array(50,-67,959,838),23396=>array(42,-77,970,838),23397=>array(54,-58,947,852),23398=>array(74,-54,926,826),23399=>array(86,-52,935,826),23400=>array(41,-67,950,800),23401=>array(51,-68,948,833),23402=>array(41,-60,924,842),23403=>array(44,-69,965,815),23404=>array(38,-66,946,791),23405=>array(55,-72,960,785),23406=>array(41,-64,949,836),23407=>array(63,-61,956,796),23408=>array(41,-68,971,834),23409=>array(31,-59,962,798),23410=>array(51,-50,961,789),23411=>array(53,-56,949,855),23412=>array(135,-68,903,823),23413=>array(34,-76,944,817),23414=>array(53,-58,949,838),23415=>array(41,-71,953,831),23416=>array(66,-67,939,831),23417=>array(64,-57,940,840),23418=>array(31,-64,955,790),23419=>array(44,-70,954,823),23420=>array(59,-81,946,833),23421=>array(71,-60,948,837),23422=>array(39,-67,954,788),23423=>array(57,-59,955,846),23424=>array(90,354,883,650),23425=>array(79,-52,934,851),23426=>array(56,-67,945,833),23427=>array(109,-28,902,821),23428=>array(55,-63,952,841),23429=>array(70,-38,942,833),23430=>array(79,-61,932,841),23431=>array(59,-69,931,840),23432=>array(77,-59,923,825),23433=>array(76,-70,912,818),23434=>array(71,-64,950,844),23435=>array(63,-65,951,824),23436=>array(60,-62,946,839),23437=>array(58,-58,942,822),23438=>array(48,-66,955,845),23439=>array(77,-64,927,822),23440=>array(76,-37,972,838),23441=>array(106,-66,923,838),23442=>array(84,-44,940,832),23443=>array(46,-66,958,830),23444=>array(75,-32,925,842),23445=>array(57,-65,894,839),23446=>array(75,-65,942,830),23447=>array(71,-63,945,822),23448=>array(106,-70,894,839),23449=>array(106,-71,894,817),23450=>array(41,-67,953,826),23451=>array(54,-59,954,818),23452=>array(60,-29,953,831),23453=>array(79,-25,925,826),23454=>array(73,-61,929,832),23455=>array(47,-57,955,827),23456=>array(32,-56,957,841),23457=>array(89,-60,904,842),23458=>array(40,-61,958,828),23459=>array(73,-25,931,823),23460=>array(93,-35,907,825),23461=>array(51,-70,908,839),23462=>array(102,-72,915,832),23463=>array(90,-21,910,835),23464=>array(74,-79,949,824),23465=>array(87,-54,933,835),23466=>array(41,-63,921,837),23467=>array(91,-74,894,839),23468=>array(39,-65,966,842),23469=>array(59,-65,932,830),23470=>array(98,-68,902,829),23471=>array(42,-58,934,848),23472=>array(80,-63,931,831),23473=>array(83,-52,893,844),23474=>array(46,-50,955,844),23475=>array(83,-65,920,834),23476=>array(69,-79,934,839),23477=>array(110,-71,901,837),23478=>array(55,-65,960,823),23479=>array(46,-56,955,857),23480=>array(45,-67,968,833),23481=>array(47,-68,953,834),23482=>array(54,-57,955,840),23483=>array(55,-61,949,834),23484=>array(47,-73,959,846),23485=>array(81,-62,927,836),23486=>array(50,-77,917,846),23487=>array(43,-73,906,828),23488=>array(46,-62,955,826),23489=>array(41,-67,982,841),23490=>array(48,-71,969,835),23491=>array(54,-62,952,829),23492=>array(80,-59,941,833),23493=>array(53,-69,956,835),23494=>array(66,-64,944,827),23495=>array(47,-73,959,830),23496=>array(86,-65,921,846),23497=>array(90,-67,912,845),23498=>array(62,-74,963,838),23499=>array(37,-41,968,835),23500=>array(107,-67,900,835),23501=>array(61,-31,953,835),23502=>array(43,-53,926,860),23503=>array(63,-66,961,841),23504=>array(46,-77,962,821),23505=>array(45,-72,929,839),23506=>array(48,-83,952,834),23507=>array(100,-65,900,840),23508=>array(75,-68,971,828),23509=>array(83,-68,930,843),23510=>array(56,-60,981,844),23511=>array(47,-55,944,840),23512=>array(72,-78,931,841),23513=>array(34,-64,966,839),23514=>array(65,-65,957,842),23515=>array(55,-57,956,842),23516=>array(80,-68,917,843),23517=>array(39,-75,952,829),23518=>array(35,-76,962,845),23519=>array(53,-62,954,825),23520=>array(41,-61,936,856),23521=>array(35,-66,974,840),23522=>array(47,-76,960,836),23523=>array(53,-72,948,836),23524=>array(54,-64,953,836),23525=>array(42,-72,977,850),23526=>array(61,-74,952,850),23527=>array(80,-68,917,844),23528=>array(44,-69,930,839),23529=>array(41,-73,970,835),23530=>array(50,-63,914,836),23531=>array(82,-65,910,833),23532=>array(55,-57,953,843),23533=>array(83,-34,925,849),23534=>array(41,-64,970,838),23535=>array(63,-68,917,841),23536=>array(62,-78,967,846),23537=>array(44,-69,975,835),23538=>array(58,-75,968,833),23539=>array(70,-69,939,832),23540=>array(67,-76,957,841),23541=>array(54,-66,969,836),23542=>array(70,-69,939,850),23543=>array(69,-25,923,847),23544=>array(97,-64,912,829),23545=>array(24,-60,915,829),23546=>array(77,-59,932,836),23547=>array(62,-57,913,793),23548=>array(50,-58,916,786),23549=>array(50,-63,916,840),23550=>array(49,-46,951,821),23551=>array(60,-57,934,835),23552=>array(100,-61,945,826),23553=>array(49,-61,945,826),23554=>array(62,-72,935,823),23555=>array(55,-72,936,823),23556=>array(49,-64,948,845),23557=>array(44,-69,962,827),23558=>array(41,-63,940,839),23559=>array(37,-64,956,841),23560=>array(57,-67,947,826),23561=>array(44,-71,951,826),23562=>array(68,-63,932,850),23563=>array(73,-70,933,811),23564=>array(53,-71,955,829),23565=>array(38,-61,952,835),23566=>array(57,-65,944,848),23567=>array(71,-41,927,818),23568=>array(68,-62,945,816),23569=>array(52,-67,944,818),23570=>array(45,-63,954,833),23571=>array(59,-63,935,827),23572=>array(32,-63,909,830),23573=>array(49,-58,961,789),23574=>array(61,-64,939,830),23575=>array(49,-58,961,821),23576=>array(50,-16,921,824),23577=>array(116,-70,861,824),23578=>array(110,-70,864,836),23579=>array(31,-48,962,821),23580=>array(43,-64,952,824),23581=>array(66,-68,898,831),23582=>array(41,-64,970,821),23583=>array(41,-71,970,822),23584=>array(42,-84,972,826),23585=>array(41,-62,961,836),23586=>array(46,-63,954,829),23587=>array(82,-47,936,782),23588=>array(62,-65,927,829),23589=>array(32,-60,963,842),23590=>array(42,-44,959,835),23591=>array(70,-61,932,827),23592=>array(35,-70,949,853),23593=>array(35,-61,964,798),23594=>array(44,-64,964,832),23595=>array(32,-55,962,785),23596=>array(31,-66,963,844),23597=>array(43,-65,962,837),23598=>array(34,-51,958,833),23599=>array(34,-51,958,835),23600=>array(50,-66,961,836),23601=>array(56,-63,951,831),23602=>array(33,-51,958,842),23603=>array(44,-69,959,826),23604=>array(34,-51,958,833),23605=>array(34,-51,960,835),23606=>array(36,-66,971,831),23607=>array(36,-72,974,831),23608=>array(78,-71,880,766),23609=>array(41,-58,956,772),23610=>array(69,-73,926,765),23611=>array(36,-62,963,790),23612=>array(53,-71,934,782),23613=>array(40,-60,960,789),23614=>array(57,-67,940,784),23615=>array(52,-74,951,779),23616=>array(68,-65,895,785),23617=>array(54,-73,938,782),23618=>array(28,-63,917,789),23619=>array(28,-64,961,789),23620=>array(52,-62,903,794),23621=>array(56,-73,930,782),23622=>array(64,-73,896,788),23623=>array(63,-62,897,792),23624=>array(49,-65,886,792),23625=>array(41,-70,935,787),23626=>array(22,-60,846,791),23627=>array(53,-74,933,796),23628=>array(59,-69,894,786),23629=>array(33,-64,964,791),23630=>array(47,-76,939,785),23631=>array(53,-72,930,785),23632=>array(37,-65,972,789),23633=>array(59,-72,894,789),23634=>array(45,-72,956,795),23635=>array(65,-92,946,781),23636=>array(60,-59,952,804),23637=>array(46,-73,943,779),23638=>array(55,-64,932,782),23639=>array(48,-73,964,798),23640=>array(48,-73,964,782),23641=>array(35,-68,951,788),23642=>array(58,-66,899,808),23643=>array(53,-72,930,785),23644=>array(49,-67,957,791),23645=>array(44,-70,935,786),23646=>array(30,-73,877,777),23647=>array(23,-58,963,803),23648=>array(46,-68,935,796),23649=>array(41,-65,911,788),23650=>array(46,-82,939,823),23651=>array(44,-69,973,787),23652=>array(50,-68,900,808),23653=>array(29,-68,953,786),23654=>array(35,-73,913,789),23655=>array(23,-58,975,803),23656=>array(41,-70,962,798),23657=>array(44,-62,959,800),23658=>array(48,-66,966,786),23659=>array(44,-62,983,800),23660=>array(57,-82,912,790),23661=>array(40,-58,934,804),23662=>array(85,-65,895,825),23663=>array(78,-40,952,836),23664=>array(90,-68,912,848),23665=>array(137,-48,863,771),23666=>array(124,-65,853,820),23667=>array(47,-65,950,800),23668=>array(67,-62,915,833),23669=>array(46,-80,882,833),23670=>array(67,-62,915,833),23671=>array(94,-70,920,821),23672=>array(94,4,953,821),23673=>array(53,-27,935,841),23674=>array(85,-28,931,813),23675=>array(110,-64,897,820),23676=>array(113,-70,964,824),23677=>array(113,-50,963,824),23678=>array(89,-69,911,814),23679=>array(90,-67,922,825),23680=>array(143,-65,869,838),23681=>array(80,-65,855,815),23682=>array(104,-31,921,822),23683=>array(95,-75,915,833),23684=>array(113,-65,889,824),23685=>array(95,-68,953,824),23686=>array(97,-62,963,827),23687=>array(110,-64,911,836),23688=>array(89,-52,930,814),23689=>array(103,-66,909,834),23690=>array(118,-67,935,787),23691=>array(106,-71,965,806),23692=>array(43,-65,957,832),23693=>array(86,-68,931,817),23694=>array(63,-71,951,824),23695=>array(104,-69,948,818),23696=>array(76,-66,964,837),23697=>array(41,-73,955,833),23698=>array(96,-71,960,836),23699=>array(101,-70,948,830),23700=>array(45,-69,961,821),23701=>array(52,-68,969,831),23702=>array(93,-29,916,803),23703=>array(134,-58,833,830),23704=>array(87,-68,934,810),23705=>array(53,-67,959,812),23706=>array(40,-62,957,826),23707=>array(115,-63,865,832),23708=>array(140,-26,921,823),23709=>array(53,-66,935,838),23710=>array(91,-62,955,845),23711=>array(97,-70,964,831),23712=>array(91,-20,951,813),23713=>array(113,-59,888,789),23714=>array(80,-62,931,839),23715=>array(109,-54,909,845),23716=>array(65,-66,966,834),23717=>array(98,-70,957,827),23718=>array(70,-27,945,824),23719=>array(54,-56,900,850),23720=>array(80,-25,948,817),23721=>array(69,-68,920,822),23722=>array(107,-64,900,837),23723=>array(66,-64,892,830),23724=>array(81,-67,901,817),23725=>array(103,-72,948,833),23726=>array(103,-43,949,833),23727=>array(97,-30,949,800),23728=>array(98,-69,910,834),23729=>array(47,-67,955,839),23730=>array(87,-62,960,810),23731=>array(76,-65,924,829),23732=>array(93,-8,933,814),23733=>array(76,-65,935,829),23734=>array(66,-66,888,843),23735=>array(66,-67,939,817),23736=>array(35,-72,931,829),23737=>array(87,-70,910,810),23738=>array(41,-66,955,833),23739=>array(62,-57,961,829),23740=>array(62,-67,959,817),23741=>array(63,-66,920,815),23742=>array(66,-67,955,830),23743=>array(101,-66,875,824),23744=>array(144,-65,869,833),23745=>array(67,-69,911,836),23746=>array(107,-62,964,837),23747=>array(97,-67,907,820),23748=>array(91,-68,944,798),23749=>array(66,-75,950,845),23750=>array(111,-70,961,823),23751=>array(30,-62,979,840),23752=>array(107,-70,961,826),23753=>array(48,-70,963,821),23754=>array(163,-78,862,824),23755=>array(100,-60,903,844),23756=>array(107,-12,960,795),23757=>array(101,-64,959,827),23758=>array(134,-77,937,824),23759=>array(104,-68,956,821),23760=>array(107,-70,960,827),23761=>array(53,-41,948,819),23762=>array(101,-62,898,815),23763=>array(108,-76,949,822),23764=>array(103,-32,942,822),23765=>array(71,-70,947,836),23766=>array(111,-76,944,821),23767=>array(100,-67,949,819),23768=>array(106,-12,956,804),23769=>array(58,-58,927,838),23770=>array(54,-29,971,819),23771=>array(74,-76,885,818),23772=>array(44,-44,974,839),23773=>array(144,-61,869,827),23774=>array(46,-69,939,822),23775=>array(50,-67,934,825),23776=>array(79,-64,940,835),23777=>array(76,-64,945,826),23778=>array(73,-67,910,830),23779=>array(82,-60,944,829),23780=>array(89,-65,947,819),23781=>array(93,-62,957,830),23782=>array(40,-65,947,844),23783=>array(88,-63,944,846),23784=>array(77,-57,945,833),23785=>array(43,-52,958,850),23786=>array(62,-63,941,826),23787=>array(78,-67,948,817),23788=>array(109,-61,956,831),23789=>array(66,-67,923,833),23790=>array(98,-60,941,814),23791=>array(37,-64,978,839),23792=>array(77,-65,961,840),23793=>array(47,-65,951,793),23794=>array(46,-59,898,841),23795=>array(39,-67,969,841),23796=>array(77,-64,933,827),23797=>array(66,-43,956,828),23798=>array(118,-70,897,845),23799=>array(89,-62,939,829),23800=>array(105,-78,952,823),23801=>array(39,-71,957,835),23802=>array(66,-72,962,817),23803=>array(79,-69,966,849),23804=>array(69,-62,929,833),23805=>array(70,-73,961,836),23806=>array(93,-71,932,837),23807=>array(101,-62,944,813),23808=>array(131,-68,947,826),23809=>array(55,-64,987,837),23810=>array(91,-65,912,825),23811=>array(87,-65,963,818),23812=>array(69,-32,939,813),23813=>array(69,-54,906,849),23814=>array(85,-23,924,839),23815=>array(63,-66,937,835),23816=>array(92,-65,924,858),23817=>array(77,-62,980,843),23818=>array(64,-63,968,842),23819=>array(66,-73,934,831),23820=>array(109,-68,956,818),23821=>array(63,-63,945,835),23822=>array(77,-69,938,831),23823=>array(109,-73,962,827),23824=>array(90,-42,961,811),23825=>array(76,-66,954,838),23826=>array(69,-68,945,835),23827=>array(93,-65,909,811),23828=>array(49,-68,949,836),23829=>array(66,-64,953,825),23830=>array(46,-80,938,833),23831=>array(134,-67,879,833),23832=>array(66,-68,960,839),23833=>array(33,-61,979,841),23834=>array(66,-52,968,850),23835=>array(66,-66,932,817),23836=>array(90,-27,911,832),23837=>array(107,-68,957,833),23838=>array(91,-62,935,851),23839=>array(49,-22,962,835),23840=>array(109,-71,976,830),23841=>array(71,-57,920,802),23842=>array(65,-71,956,834),23843=>array(55,-66,970,837),23844=>array(79,-64,927,838),23845=>array(100,-73,948,837),23846=>array(74,-33,950,847),23847=>array(29,-64,933,838),23848=>array(107,-69,974,832),23849=>array(59,-74,894,835),23850=>array(95,-64,951,845),23851=>array(61,-74,911,823),23852=>array(50,-50,960,829),23853=>array(36,-70,914,823),23854=>array(127,-67,886,837),23855=>array(86,-22,964,845),23856=>array(106,-68,930,835),23857=>array(73,-74,897,829),23858=>array(109,-28,954,837),23859=>array(106,-71,967,837),23860=>array(33,-63,956,835),23861=>array(111,-68,955,817),23862=>array(52,-65,953,829),23863=>array(79,-71,953,838),23864=>array(108,-81,963,809),23865=>array(108,-69,933,831),23866=>array(38,-73,956,829),23867=>array(72,-68,949,830),23868=>array(109,-72,961,815),23869=>array(60,-31,955,836),23870=>array(82,-65,945,805),23871=>array(109,-63,962,818),23872=>array(48,-70,955,826),23873=>array(109,-27,953,826),23874=>array(43,-67,954,833),23875=>array(108,-71,951,833),23876=>array(74,-71,961,831),23877=>array(41,-71,953,831),23878=>array(39,-70,960,832),23879=>array(45,-65,972,837),23880=>array(92,-67,958,830),23881=>array(106,-70,944,841),23882=>array(79,-65,960,842),23883=>array(66,-64,905,817),23884=>array(47,-69,971,835),23885=>array(36,-62,954,830),23886=>array(66,-65,915,817),23887=>array(57,-75,945,821),23888=>array(34,-62,970,837),23889=>array(109,-70,919,821),23890=>array(99,-52,895,800),23891=>array(114,-42,910,813),23892=>array(63,-69,943,812),23893=>array(103,-69,967,819),23894=>array(83,-23,967,836),23895=>array(45,-70,939,809),23896=>array(82,-71,955,817),23897=>array(55,-70,956,827),23898=>array(26,-66,960,835),23899=>array(33,-64,979,839),23900=>array(60,-62,928,831),23901=>array(92,-63,944,817),23902=>array(51,-71,967,847),23903=>array(37,-77,939,833),23904=>array(106,-62,995,841),23905=>array(47,-56,969,825),23906=>array(106,-70,958,842),23907=>array(111,-72,951,835),23908=>array(70,-60,919,830),23909=>array(110,-68,963,829),23910=>array(81,-20,933,839),23911=>array(105,-73,911,831),23912=>array(109,-74,940,842),23913=>array(63,-70,937,835),23914=>array(81,-75,939,841),23915=>array(83,-66,938,844),23916=>array(76,-74,951,836),23917=>array(59,-76,953,840),23918=>array(64,-65,973,846),23919=>array(77,-39,945,825),23920=>array(83,-64,967,843),23921=>array(105,-72,967,830),23922=>array(110,-72,979,845),23923=>array(37,-47,956,839),23924=>array(78,-67,960,833),23925=>array(114,-61,947,836),23926=>array(69,-54,929,809),23927=>array(101,-67,974,836),23928=>array(48,-71,966,835),23929=>array(79,-76,959,835),23930=>array(109,-67,960,817),23931=>array(79,-66,968,848),23932=>array(112,-67,959,834),23933=>array(98,-67,957,826),23934=>array(38,-49,974,851),23935=>array(68,-74,965,835),23936=>array(109,-65,953,818),23937=>array(76,-68,934,836),23938=>array(62,-65,930,844),23939=>array(93,-64,962,842),23940=>array(50,-64,955,835),23941=>array(36,-59,957,794),23942=>array(109,-69,955,826),23943=>array(66,-64,933,817),23944=>array(48,-71,962,830),23945=>array(127,-68,964,831),23946=>array(46,-58,948,842),23947=>array(83,-63,924,843),23948=>array(51,-56,890,810),23949=>array(107,-73,900,812),23950=>array(51,-64,948,821),23951=>array(40,-78,954,821),23952=>array(107,-73,949,812),23953=>array(81,-75,951,834),23954=>array(95,-53,908,851),23955=>array(98,-71,972,830),23956=>array(45,-65,978,836),23957=>array(109,-70,970,827),23958=>array(60,-63,991,858),23959=>array(92,-67,935,829),23960=>array(29,-71,910,838),23961=>array(76,-71,937,829),23962=>array(24,-67,985,835),23963=>array(76,-62,959,852),23964=>array(37,-72,964,830),23965=>array(66,-24,954,835),23966=>array(116,-71,933,838),23967=>array(78,-72,955,848),23968=>array(76,-64,956,828),23969=>array(40,-79,971,830),23970=>array(62,-64,943,836),23971=>array(39,-64,938,830),23972=>array(33,-59,962,833),23973=>array(66,-73,970,812),23974=>array(67,-72,945,841),23975=>array(82,-64,935,814),23976=>array(100,-67,915,835),23977=>array(109,-80,973,829),23978=>array(40,-68,964,840),23979=>array(79,-67,948,825),23980=>array(66,-77,965,840),23981=>array(103,-64,947,840),23982=>array(66,-57,950,854),23983=>array(44,-80,965,829),23984=>array(106,-69,961,828),23985=>array(106,-69,954,824),23986=>array(57,-60,929,842),23987=>array(40,-52,968,836),23988=>array(38,-73,977,840),23989=>array(115,-68,961,814),23990=>array(45,-73,967,825),23991=>array(29,-63,951,834),23992=>array(75,-65,947,829),23993=>array(62,-65,960,833),23994=>array(40,-73,961,832),23995=>array(37,-84,964,831),23996=>array(74,-70,958,821),23997=>array(52,-66,965,839),23998=>array(78,-32,953,837),23999=>array(74,-64,943,812),24000=>array(39,-64,964,831),24001=>array(73,-63,962,826),24002=>array(49,-64,936,838),24003=>array(54,-64,975,836),24004=>array(67,-63,962,843),24005=>array(46,-68,931,824),24006=>array(93,-67,940,836),24007=>array(95,-56,959,847),24008=>array(69,-64,919,812),24009=>array(69,-67,966,848),24010=>array(72,-62,958,831),24011=>array(43,-65,938,836),24012=>array(42,-69,968,820),24013=>array(38,-73,957,828),24014=>array(54,-61,976,820),24015=>array(93,-70,953,817),24016=>array(78,-61,975,836),24017=>array(106,-68,976,832),24018=>array(58,-64,961,841),24019=>array(55,-87,941,851),24020=>array(48,-64,962,836),24021=>array(96,-63,945,844),24022=>array(42,-67,973,836),24023=>array(58,-64,963,815),24024=>array(82,-72,956,832),24025=>array(74,-65,964,837),24026=>array(37,-68,957,833),24027=>array(43,-60,914,801),24028=>array(166,-60,793,795),24029=>array(58,-70,858,817),24030=>array(55,-64,859,823),24031=>array(55,-70,941,839),24032=>array(74,-36,945,773),24033=>array(22,-53,943,817),24034=>array(61,-59,961,849),24035=>array(61,-59,961,836),24036=>array(122,-67,935,842),24037=>array(95,54,909,696),24038=>array(55,-14,925,819),24039=>array(59,-57,933,773),24040=>array(169,-60,932,791),24041=>array(44,-64,940,790),24042=>array(88,-54,921,806),24043=>array(69,1,949,753),24044=>array(63,-47,955,814),24045=>array(64,-59,955,847),24046=>array(47,-19,936,840),24047=>array(37,-67,936,841),24048=>array(43,-71,959,845),24049=>array(114,0,897,763),24050=>array(138,-17,934,764),24051=>array(174,-24,942,768),24052=>array(140,-12,942,746),24053=>array(59,-65,938,835),24054=>array(68,-58,945,776),24055=>array(38,-43,971,819),24056=>array(100,-50,972,781),24057=>array(33,-35,989,780),24058=>array(72,-72,941,776),24059=>array(44,-43,955,830),24060=>array(136,-67,962,796),24061=>array(63,-80,937,790),24062=>array(154,-69,846,829),24063=>array(82,-63,936,833),24064=>array(72,-68,928,759),24065=>array(91,-62,873,814),24066=>array(72,-68,928,826),24067=>array(58,-67,920,835),24068=>array(110,-65,941,829),24069=>array(61,-64,886,828),24070=>array(95,-76,948,829),24071=>array(71,-66,929,826),24072=>array(105,-63,917,830),24073=>array(110,-61,972,834),24074=>array(98,-61,942,834),24075=>array(70,-50,936,854),24076=>array(64,-65,941,845),24077=>array(70,-69,889,827),24078=>array(102,-59,949,842),24079=>array(90,-69,906,824),24080=>array(91,-79,951,809),24081=>array(51,-62,948,843),24082=>array(47,-62,928,839),24083=>array(90,-63,948,843),24084=>array(90,-72,940,832),24085=>array(118,-67,886,843),24086=>array(96,-66,943,833),24087=>array(91,-74,956,833),24088=>array(104,-72,903,842),24089=>array(76,-66,955,830),24090=>array(72,-70,892,780),24091=>array(139,-65,874,851),24092=>array(90,-70,948,811),24093=>array(104,-68,896,834),24094=>array(111,-70,941,811),24095=>array(66,-68,935,832),24096=>array(165,-67,849,831),24097=>array(110,-68,952,847),24098=>array(110,-72,955,826),24099=>array(46,-69,960,832),24100=>array(47,-66,879,833),24101=>array(115,-65,910,850),24102=>array(65,-59,913,828),24103=>array(89,-67,940,825),24104=>array(76,-72,958,827),24105=>array(110,-67,920,826),24106=>array(111,-76,959,825),24107=>array(112,-74,948,844),24108=>array(57,-67,945,786),24109=>array(50,-71,944,829),24110=>array(54,-55,925,831),24111=>array(65,-59,913,828),24112=>array(88,-65,929,808),24113=>array(90,-64,922,828),24114=>array(65,-64,937,852),24115=>array(81,-68,962,829),24116=>array(97,-68,943,842),24117=>array(80,-65,948,847),24118=>array(89,-65,933,830),24119=>array(86,-62,932,833),24120=>array(94,-67,918,835),24121=>array(80,-72,925,844),24122=>array(80,-65,952,840),24123=>array(92,-64,929,826),24124=>array(90,-65,890,798),24125=>array(94,-73,916,828),24126=>array(106,-68,941,832),24127=>array(81,-68,975,834),24128=>array(79,-70,946,831),24129=>array(111,-72,961,830),24130=>array(38,-65,979,788),24131=>array(73,-70,938,838),24132=>array(89,-64,935,829),24133=>array(85,-69,924,829),24134=>array(85,-69,948,829),24135=>array(55,-64,948,835),24136=>array(79,-71,960,827),24137=>array(88,-67,958,833),24138=>array(111,-78,962,828),24139=>array(54,-69,970,848),24140=>array(84,-72,941,828),24141=>array(106,-70,927,820),24142=>array(62,-57,950,838),24143=>array(110,-69,977,838),24144=>array(41,-76,957,836),24145=>array(35,-76,964,833),24146=>array(75,-65,969,850),24147=>array(107,-68,972,841),24148=>array(57,-65,953,826),24149=>array(57,-63,954,834),24150=>array(75,-69,957,826),24151=>array(70,-61,923,838),24152=>array(109,-70,964,830),24153=>array(89,-60,948,839),24154=>array(55,-64,942,852),24155=>array(85,-65,935,842),24156=>array(104,-70,963,821),24157=>array(104,-71,965,823),24158=>array(63,-74,937,821),24159=>array(78,-71,948,837),24160=>array(92,-70,965,827),24161=>array(68,-66,934,839),24162=>array(71,-64,931,845),24163=>array(89,-72,962,839),24164=>array(89,-70,945,839),24165=>array(61,-64,958,833),24166=>array(52,-62,959,851),24167=>array(101,-70,989,823),24168=>array(88,-50,935,853),24169=>array(113,-73,970,830),24170=>array(116,-65,981,836),24171=>array(55,-64,948,835),24172=>array(66,-68,938,826),24173=>array(89,-53,955,849),24174=>array(92,-72,946,843),24175=>array(94,-55,926,854),24176=>array(81,-65,952,840),24177=>array(55,-65,922,829),24178=>array(100,-58,900,779),24179=>array(71,-70,920,787),24180=>array(86,-68,917,841),24181=>array(59,-68,954,778),24182=>array(76,-65,929,848),24183=>array(89,-70,898,839),24184=>array(94,-67,909,833),24185=>array(60,-66,970,844),24186=>array(91,-37,914,826),24187=>array(53,-48,902,807),24188=>array(53,-65,906,826),24189=>array(115,-63,885,831),24190=>array(61,-66,958,838),24191=>array(49,-61,908,823),24192=>array(53,-72,939,847),24193=>array(35,-61,930,826),24194=>array(58,-66,950,835),24195=>array(45,-65,935,822),24196=>array(28,-64,942,822),24197=>array(24,-66,918,816),24198=>array(39,-75,941,830),24199=>array(35,-51,964,839),24200=>array(51,-68,954,846),24201=>array(50,-68,951,837),24202=>array(45,-67,964,822),24203=>array(43,-66,980,848),24204=>array(58,-64,945,840),24205=>array(44,-67,936,845),24206=>array(25,-76,936,819),24207=>array(45,-71,918,831),24208=>array(32,-68,914,835),24209=>array(26,-67,924,842),24210=>array(28,-64,942,849),24211=>array(27,-60,925,841),24212=>array(46,-59,928,834),24213=>array(43,-63,952,837),24214=>array(39,-66,943,828),24215=>array(45,-64,948,839),24216=>array(25,-64,908,819),24217=>array(39,-66,913,844),24218=>array(45,-68,963,839),24219=>array(56,-53,956,834),24220=>array(41,-68,937,831),24221=>array(24,-84,936,846),24222=>array(25,-59,928,832),24223=>array(39,-68,947,833),24224=>array(42,-67,951,834),24225=>array(25,-70,938,819),24226=>array(48,-53,954,830),24227=>array(55,-67,954,824),24228=>array(48,-55,956,831),24229=>array(29,-65,966,844),24230=>array(46,-68,950,826),24231=>array(48,-66,928,822),24232=>array(44,-67,930,833),24233=>array(25,-64,959,819),24234=>array(39,-76,958,838),24235=>array(54,-76,941,829),24236=>array(44,-58,956,838),24237=>array(37,-63,968,837),24238=>array(41,-61,932,842),24239=>array(25,-71,908,819),24240=>array(51,-77,954,824),24241=>array(41,-67,959,846),24242=>array(44,-68,954,838),24243=>array(41,-51,955,865),24244=>array(49,-64,942,841),24245=>array(38,-66,965,831),24246=>array(36,-55,945,828),24247=>array(41,-67,966,823),24248=>array(50,-61,954,844),24249=>array(26,-68,968,854),24250=>array(25,-61,930,827),24251=>array(50,-63,940,839),24252=>array(46,-69,944,855),24253=>array(49,-63,945,849),24254=>array(43,-74,967,824),24255=>array(39,-66,913,844),24256=>array(31,-62,961,839),24257=>array(45,-69,948,840),24258=>array(51,-71,942,832),24259=>array(42,-67,965,833),24260=>array(37,-54,968,857),24261=>array(40,-66,954,842),24262=>array(30,-64,961,838),24263=>array(34,-69,948,839),24264=>array(43,-73,952,839),24265=>array(44,-59,970,845),24266=>array(46,-60,949,837),24267=>array(31,-54,967,856),24268=>array(39,-73,951,835),24269=>array(38,-71,947,850),24270=>array(46,-68,968,855),24271=>array(37,-54,968,843),24272=>array(40,-67,956,831),24273=>array(42,-66,951,848),24274=>array(39,-70,966,852),24275=>array(35,-65,942,837),24276=>array(32,-50,959,862),24277=>array(37,-67,985,856),24278=>array(39,-67,958,843),24279=>array(58,-71,957,834),24280=>array(41,-72,951,840),24281=>array(57,-78,965,840),24282=>array(42,-69,949,837),24283=>array(16,-63,951,837),24284=>array(46,-70,956,841),24285=>array(44,-70,947,837),24286=>array(36,-75,974,842),24287=>array(47,-64,947,833),24288=>array(46,-71,938,827),24289=>array(34,-70,964,836),24290=>array(42,-65,965,820),24291=>array(54,-68,950,837),24292=>array(49,-63,968,857),24293=>array(31,-70,971,841),24294=>array(36,-72,953,840),24295=>array(28,-72,942,843),24296=>array(24,-72,940,832),24297=>array(30,-67,964,837),24298=>array(29,-69,920,838),24299=>array(24,-84,958,842),24300=>array(22,-62,961,846),24301=>array(44,-66,932,853),24302=>array(35,-70,956,845),24303=>array(43,-67,959,840),24304=>array(40,-75,967,832),24305=>array(37,-54,949,838),24306=>array(35,-66,947,836),24307=>array(40,-75,957,832),24308=>array(33,-62,949,743),24309=>array(44,-73,953,804),24310=>array(33,-62,949,824),24311=>array(33,-62,949,825),24312=>array(33,-62,949,825),24313=>array(49,-71,973,852),24314=>array(33,-62,949,826),24315=>array(33,-62,949,790),24316=>array(33,-62,949,790),24317=>array(43,-71,972,788),24318=>array(36,-72,930,822),24319=>array(79,-56,932,818),24320=>array(36,-57,906,780),24321=>array(47,-66,954,848),24322=>array(56,-67,953,785),24323=>array(61,-62,928,830),24324=>array(48,-65,934,785),24325=>array(48,-59,961,794),24326=>array(70,-59,944,814),24327=>array(45,-64,972,863),24328=>array(52,-67,943,839),24329=>array(61,-63,936,829),24330=>array(59,-76,955,833),24331=>array(81,-63,933,824),24332=>array(74,-62,944,834),24333=>array(78,-62,948,834),24334=>array(73,-62,944,834),24335=>array(74,-62,944,834),24336=>array(74,-62,944,834),24337=>array(37,-61,949,826),24338=>array(42,-67,962,841),24339=>array(143,-60,857,788),24340=>array(110,-66,896,778),24341=>array(138,-61,844,826),24342=>array(64,-55,930,779),24343=>array(56,-66,904,838),24344=>array(80,-63,945,819),24345=>array(77,-71,956,788),24346=>array(61,-68,954,794),24347=>array(80,-63,957,824),24348=>array(92,-66,893,788),24349=>array(65,-57,953,791),24350=>array(77,-66,977,839),24351=>array(69,-64,902,843),24352=>array(62,-66,943,803),24353=>array(80,-63,951,790),24354=>array(76,-65,981,831),24355=>array(63,-55,949,847),24356=>array(63,-68,954,838),24357=>array(70,-63,955,836),24358=>array(80,-65,961,819),24359=>array(68,-63,958,838),24360=>array(72,-68,909,786),24361=>array(63,-63,952,836),24362=>array(67,-60,920,764),24363=>array(62,-63,953,776),24364=>array(62,-63,953,776),24365=>array(76,-65,941,790),24366=>array(47,-64,956,832),24367=>array(55,-75,946,830),24368=>array(83,-65,912,824),24369=>array(56,-65,917,787),24370=>array(80,-63,911,782),24371=>array(62,-56,936,774),24372=>array(80,-63,944,828),24373=>array(68,-64,962,799),24374=>array(77,-59,971,850),24375=>array(70,-63,955,833),24376=>array(63,-66,901,787),24377=>array(56,-59,918,836),24378=>array(63,-74,940,766),24379=>array(89,-62,927,790),24380=>array(63,-63,939,787),24381=>array(89,-62,968,832),24382=>array(68,-63,952,835),24383=>array(54,-48,976,874),24384=>array(57,-68,975,838),24385=>array(70,-65,944,797),24386=>array(80,-58,890,829),24387=>array(75,-67,961,785),24388=>array(69,-63,951,788),24389=>array(62,-67,964,847),24390=>array(91,-48,944,855),24391=>array(68,-76,926,837),24392=>array(70,-69,948,798),24393=>array(68,-67,962,831),24394=>array(66,-63,946,806),24395=>array(73,-82,969,780),24396=>array(49,-65,951,790),24397=>array(81,-74,959,846),24398=>array(52,-67,955,849),24399=>array(68,-70,967,786),24400=>array(167,-4,786,670),24401=>array(62,-37,941,804),24402=>array(27,-62,861,832),24403=>array(123,-60,878,830),24404=>array(67,-57,941,848),24405=>array(71,-61,965,789),24406=>array(59,-58,964,834),24407=>array(50,-75,951,834),24408=>array(53,-68,958,841),24409=>array(30,-72,965,841),24410=>array(30,-52,965,810),24411=>array(40,-61,956,825),24412=>array(40,-61,962,848),24413=>array(54,-71,956,851),24414=>array(40,-61,956,818),24415=>array(52,-57,978,840),24416=>array(68,-60,978,841),24417=>array(294,-59,800,804),24418=>array(59,-67,955,828),24419=>array(37,-66,949,821),24420=>array(53,-68,951,838),24421=>array(44,-67,926,852),24422=>array(33,-67,921,831),24423=>array(57,-61,956,832),24424=>array(52,-40,964,781),24425=>array(43,-62,958,828),24426=>array(20,-69,956,832),24427=>array(41,-65,963,844),24428=>array(47,-64,952,830),24429=>array(62,-65,957,828),24430=>array(51,-62,949,850),24431=>array(55,-74,961,823),24432=>array(47,-74,955,832),24433=>array(47,-68,961,829),24434=>array(36,-68,961,829),24435=>array(178,-67,756,826),24436=>array(58,-69,920,830),24437=>array(58,-66,945,830),24438=>array(49,-65,968,842),24439=>array(41,-73,942,840),24440=>array(52,-64,959,840),24441=>array(38,-70,963,833),24442=>array(58,-66,936,830),24443=>array(40,-66,911,820),24444=>array(51,-73,961,838),24445=>array(46,-70,962,836),24446=>array(41,-68,957,837),24447=>array(34,-66,915,838),24448=>array(47,-61,937,836),24449=>array(33,-70,954,836),24450=>array(44,-65,952,841),24451=>array(56,-65,952,841),24452=>array(45,-66,968,832),24453=>array(37,-67,947,841),24454=>array(57,-70,942,834),24455=>array(54,-64,923,842),24456=>array(37,-70,950,834),24457=>array(39,-68,948,843),24458=>array(61,-65,914,833),24459=>array(36,-67,954,830),24460=>array(42,-67,953,841),24461=>array(44,-65,931,842),24462=>array(44,-65,938,841),24463=>array(44,-65,945,841),24464=>array(35,-70,963,836),24465=>array(50,-74,956,838),24466=>array(48,-73,961,838),24467=>array(48,-73,961,838),24468=>array(56,-68,955,835),24469=>array(39,-63,941,834),24470=>array(49,-70,957,838),24471=>array(50,-70,947,833),24472=>array(36,-68,955,836),24473=>array(40,-64,970,833),24474=>array(59,-68,964,835),24475=>array(53,-68,956,834),24476=>array(44,-68,933,835),24477=>array(56,-68,930,835),24478=>array(49,-71,966,838),24479=>array(55,-73,900,835),24480=>array(39,-65,972,837),24481=>array(37,-62,917,835),24482=>array(44,-75,963,835),24483=>array(44,-68,953,835),24484=>array(44,-71,964,835),24485=>array(42,-68,963,827),24486=>array(40,-73,967,821),24487=>array(35,-65,910,833),24488=>array(46,-67,953,848),24489=>array(44,-67,970,843),24490=>array(40,-67,941,840),24491=>array(49,-62,954,837),24492=>array(46,-65,953,850),24493=>array(45,-67,956,852),24494=>array(35,-76,964,833),24495=>array(46,-64,973,837),24496=>array(44,-68,945,835),24497=>array(47,-68,954,835),24498=>array(41,-72,962,820),24499=>array(35,-70,958,838),24500=>array(31,-71,973,834),24501=>array(31,-71,973,834),24502=>array(48,-70,973,832),24503=>array(35,-70,960,838),24504=>array(26,-68,957,850),24505=>array(47,-70,951,830),24506=>array(56,-74,947,837),24507=>array(53,-68,972,845),24508=>array(31,-70,966,848),24509=>array(31,-67,961,836),24510=>array(39,-72,974,830),24511=>array(18,-62,965,842),24512=>array(28,-70,976,844),24513=>array(40,-70,967,834),24514=>array(43,-66,957,840),24515=>array(41,-17,958,801),24516=>array(300,-62,695,829),24517=>array(52,-8,960,796),24518=>array(41,-73,935,819),24519=>array(63,-66,874,833),24520=>array(46,-20,954,772),24521=>array(63,-69,903,830),24522=>array(51,-63,933,830),24523=>array(63,-63,957,830),24524=>array(47,-29,946,785),24525=>array(39,-31,961,773),24526=>array(46,-20,954,831),24527=>array(55,-59,950,839),24528=>array(45,-23,963,832),24529=>array(50,-21,968,774),24530=>array(43,-60,962,830),24531=>array(46,-67,963,832),24532=>array(42,-64,948,834),24533=>array(52,-73,958,825),24534=>array(46,-67,954,832),24535=>array(46,-20,954,826),24536=>array(49,-19,951,832),24537=>array(49,-64,935,830),24538=>array(37,-64,945,830),24539=>array(69,-76,948,820),24540=>array(46,-59,961,837),24541=>array(42,-64,956,841),24542=>array(59,-42,945,829),24543=>array(50,-60,977,851),24544=>array(56,-14,976,841),24545=>array(56,-67,912,830),24546=>array(45,-22,967,783),24547=>array(40,-67,971,833),24548=>array(43,-65,956,834),24549=>array(41,-65,962,849),24550=>array(48,-75,982,850),24551=>array(48,-74,928,821),24552=>array(36,-68,949,833),24553=>array(60,-25,978,806),24554=>array(53,-67,962,829),24555=>array(50,-73,964,837),24556=>array(30,-57,941,852),24557=>array(51,-68,964,849),24558=>array(46,-69,979,829),24559=>array(46,-65,958,839),24560=>array(37,-63,954,844),24561=>array(36,-65,956,838),24562=>array(23,-66,944,854),24563=>array(35,-64,953,835),24564=>array(48,-65,975,840),24565=>array(30,-58,963,846),24566=>array(46,-69,958,832),24567=>array(44,-71,907,835),24568=>array(30,-67,953,830),24569=>array(46,-67,948,832),24570=>array(47,-75,963,836),24571=>array(43,-68,945,829),24572=>array(46,-67,957,843),24573=>array(63,-32,953,845),24574=>array(38,-60,954,829),24575=>array(41,-21,951,810),24576=>array(55,-67,959,830),24577=>array(36,-44,937,807),24578=>array(41,-20,943,831),24579=>array(35,-72,929,824),24580=>array(46,-63,924,828),24581=>array(40,-71,942,821),24582=>array(44,-67,936,827),24583=>array(56,-67,946,824),24584=>array(43,-67,954,830),24585=>array(41,-60,947,839),24586=>array(52,-67,900,836),24587=>array(47,-70,954,830),24588=>array(45,-70,951,824),24589=>array(61,-71,971,833),24590=>array(59,-29,954,846),24591=>array(35,-69,968,832),24592=>array(52,-66,908,839),24593=>array(44,-70,937,835),24594=>array(49,-25,959,830),24595=>array(45,-71,959,826),24596=>array(44,-57,953,843),24597=>array(61,-64,922,855),24598=>array(22,-58,929,850),24599=>array(47,-69,957,825),24600=>array(29,-25,970,854),24601=>array(47,-67,950,832),24602=>array(37,-51,951,840),24603=>array(47,-68,953,829),24604=>array(39,-68,962,840),24605=>array(54,-23,935,780),24606=>array(47,-71,899,836),24607=>array(47,-67,953,836),24608=>array(50,-22,968,848),24609=>array(48,-66,947,832),24610=>array(50,-68,967,829),24611=>array(63,-24,965,805),24612=>array(63,-26,965,826),24613=>array(43,-24,947,842),24614=>array(41,-69,956,830),24615=>array(54,-68,951,827),24616=>array(53,-19,964,849),24617=>array(32,-68,955,830),24618=>array(45,-58,976,843),24619=>array(44,-68,933,832),24620=>array(59,-58,903,829),24621=>array(38,-66,957,830),24622=>array(50,-73,915,831),24623=>array(38,-65,951,835),24624=>array(45,-65,961,844),24625=>array(40,-57,969,822),24626=>array(38,-66,948,833),24627=>array(43,-54,969,845),24628=>array(38,-74,942,832),24629=>array(49,-67,959,830),24630=>array(32,-71,978,832),24631=>array(64,-32,957,823),24632=>array(64,-31,957,823),24633=>array(39,-28,954,841),24634=>array(35,-63,964,844),24635=>array(63,-22,938,829),24636=>array(45,-26,934,823),24637=>array(44,-61,971,843),24638=>array(23,-57,933,843),24639=>array(33,-63,946,825),24640=>array(45,-63,941,852),24641=>array(37,-25,945,843),24642=>array(57,-69,914,837),24643=>array(37,-68,947,832),24644=>array(57,-70,922,826),24645=>array(55,-68,941,826),24646=>array(49,-70,955,821),24647=>array(29,-57,963,835),24648=>array(23,-62,929,849),24649=>array(51,-48,938,847),24650=>array(27,-65,924,834),24651=>array(54,-32,945,831),24652=>array(58,-71,954,832),24653=>array(49,-69,963,836),24654=>array(23,-57,950,843),24655=>array(48,-27,949,843),24656=>array(49,-27,947,777),24657=>array(23,-71,956,845),24658=>array(35,-59,955,849),24659=>array(34,-62,938,834),24660=>array(42,-53,957,859),24661=>array(57,-17,967,844),24662=>array(42,-41,960,846),24663=>array(23,-58,966,843),24664=>array(69,-69,967,833),24665=>array(49,-49,954,849),24666=>array(44,-52,954,836),24667=>array(54,-68,893,829),24668=>array(23,-59,964,843),24669=>array(47,-48,950,805),24670=>array(60,-74,948,828),24671=>array(43,-55,924,848),24672=>array(45,-84,963,834),24673=>array(52,-70,937,821),24674=>array(36,-62,959,832),24675=>array(41,-22,946,842),24676=>array(31,-65,964,836),24677=>array(38,-65,970,814),24678=>array(59,-71,894,826),24679=>array(45,-45,982,759),24680=>array(45,-70,957,825),24681=>array(46,-40,965,796),24682=>array(38,-66,966,839),24683=>array(52,-57,923,841),24684=>array(28,-67,944,830),24685=>array(43,-62,968,836),24686=>array(56,-66,958,828),24687=>array(43,-25,949,843),24688=>array(54,-65,982,847),24689=>array(41,-65,961,837),24690=>array(60,-70,956,829),24691=>array(37,-42,924,768),24692=>array(53,-28,946,863),24693=>array(47,-28,942,846),24694=>array(46,-16,935,783),24695=>array(51,-35,942,805),24696=>array(35,-68,892,825),24697=>array(23,-75,941,823),24698=>array(50,-62,928,826),24699=>array(39,-63,878,827),24700=>array(39,-64,937,832),24701=>array(38,-66,915,823),24702=>array(38,-55,933,832),24703=>array(59,-22,976,798),24704=>array(53,-67,900,829),24705=>array(55,-64,900,830),24706=>array(26,-67,927,828),24707=>array(37,-67,907,827),24708=>array(55,-61,934,846),24709=>array(45,-66,968,842),24710=>array(44,-35,967,838),24711=>array(42,-62,968,834),24712=>array(45,-66,949,835),24713=>array(33,-31,959,832),24714=>array(51,-38,958,822),24715=>array(46,-72,954,825),24716=>array(42,-66,937,848),24717=>array(49,-63,955,844),24718=>array(57,-62,939,834),24719=>array(57,-73,964,835),24720=>array(56,-39,962,829),24721=>array(45,-68,941,833),24722=>array(46,-67,958,830),24723=>array(44,-61,944,833),24724=>array(31,-62,955,848),24725=>array(46,-67,951,847),24726=>array(31,-66,949,834),24727=>array(43,-63,960,852),24728=>array(42,-41,960,802),24729=>array(43,-67,951,852),24730=>array(43,-66,971,835),24731=>array(11,-69,953,849),24732=>array(48,-64,960,830),24733=>array(47,-68,961,826),24734=>array(41,-55,968,837),24735=>array(43,-67,945,821),24736=>array(29,-35,957,839),24737=>array(39,-43,953,830),24738=>array(40,-68,960,833),24739=>array(52,-58,958,832),24740=>array(39,-58,958,866),24741=>array(52,-58,958,869),24742=>array(22,-66,960,844),24743=>array(22,-66,918,842),24744=>array(49,-23,963,842),24745=>array(40,-64,900,831),24746=>array(62,-25,962,783),24747=>array(52,-32,939,824),24748=>array(37,-16,933,791),24749=>array(32,-62,945,827),24750=>array(45,-74,947,815),24751=>array(29,-61,885,832),24752=>array(52,-67,972,832),24753=>array(39,-72,948,833),24754=>array(43,-38,953,831),24755=>array(40,-47,945,839),24756=>array(37,-62,952,844),24757=>array(48,-67,976,830),24758=>array(127,-62,886,792),24759=>array(50,-67,960,838),24760=>array(30,-67,974,840),24761=>array(62,-36,957,834),24762=>array(62,-67,924,839),24763=>array(46,-65,960,837),24764=>array(21,-62,944,846),24765=>array(36,-78,948,826),24766=>array(34,-57,953,851),24767=>array(46,-63,979,832),24768=>array(45,-64,974,837),24769=>array(37,-28,970,830),24770=>array(52,-67,912,849),24771=>array(51,-74,949,824),24772=>array(38,-28,955,831),24773=>array(19,-66,939,837),24774=>array(31,-68,891,826),24775=>array(43,-67,971,833),24776=>array(52,-70,968,826),24777=>array(48,-26,965,829),24778=>array(27,-60,974,842),24779=>array(29,-61,959,855),24780=>array(52,-31,955,838),24781=>array(43,-74,965,830),24782=>array(41,-27,964,842),24783=>array(34,-64,988,833),24784=>array(32,-66,918,837),24785=>array(50,-20,958,844),24786=>array(42,-41,960,842),24787=>array(31,-72,989,834),24788=>array(52,-68,964,841),24789=>array(49,-58,914,846),24790=>array(26,-38,971,823),24791=>array(50,-51,972,853),24792=>array(43,-67,911,828),24793=>array(38,-52,962,838),24794=>array(41,-65,965,844),24795=>array(40,-53,956,850),24796=>array(47,-73,956,837),24797=>array(45,-71,914,824),24798=>array(47,-72,961,833),24799=>array(23,-61,946,849),24800=>array(56,-28,953,846),24801=>array(62,-25,962,783),24802=>array(39,-31,977,831),24803=>array(53,-43,940,844),24804=>array(44,-69,957,835),24805=>array(35,-32,983,834),24806=>array(47,-62,958,851),24807=>array(46,-68,964,831),24808=>array(35,-75,982,835),24809=>array(23,-32,932,832),24810=>array(37,-23,955,839),24811=>array(37,-47,962,834),24812=>array(40,-65,929,821),24813=>array(20,-53,910,835),24814=>array(31,-60,954,840),24815=>array(23,-64,925,832),24816=>array(44,-66,953,841),24817=>array(43,-65,929,847),24818=>array(46,-68,962,828),24819=>array(43,-47,956,825),24820=>array(45,-67,956,832),24821=>array(43,-71,952,830),24822=>array(49,-57,956,856),24823=>array(41,-51,968,836),24824=>array(49,-70,959,840),24825=>array(46,-37,962,828),24826=>array(39,-58,958,847),24827=>array(60,-64,921,831),24828=>array(53,-70,925,830),24829=>array(40,-54,963,836),24830=>array(47,-68,969,830),24831=>array(59,-69,981,824),24832=>array(29,-71,977,830),24833=>array(28,-51,960,829),24834=>array(28,-51,955,832),24835=>array(52,-61,956,833),24836=>array(51,-88,969,823),24837=>array(58,-70,953,827),24838=>array(44,-29,957,840),24839=>array(47,-70,944,837),24840=>array(29,-62,965,854),24841=>array(30,-73,981,846),24842=>array(30,-57,935,841),24843=>array(49,-73,972,836),24844=>array(47,-68,972,841),24845=>array(65,-49,963,818),24846=>array(34,-69,980,841),24847=>array(43,-48,959,840),24848=>array(40,-72,947,819),24849=>array(55,-58,914,836),24850=>array(46,-53,916,837),24851=>array(30,-56,952,837),24852=>array(55,-73,954,828),24853=>array(40,-67,963,829),24854=>array(38,-58,952,837),24855=>array(30,-45,954,830),24856=>array(47,-70,974,833),24857=>array(28,-54,990,868),24858=>array(38,-45,954,793),24859=>array(72,-65,948,834),24860=>array(38,-68,958,829),24861=>array(49,-62,945,830),24862=>array(51,-72,957,827),24863=>array(47,-29,951,829),24864=>array(31,-74,948,823),24865=>array(19,-74,961,850),24866=>array(37,-74,961,823),24867=>array(48,-68,950,829),24868=>array(27,-64,930,829),24869=>array(48,-68,988,836),24870=>array(53,-70,937,821),24871=>array(28,-61,952,845),24872=>array(52,-49,960,838),24873=>array(55,-77,958,833),24874=>array(48,-68,941,829),24875=>array(38,-67,980,833),24876=>array(43,-60,961,830),24877=>array(57,-74,936,832),24878=>array(60,-71,955,834),24879=>array(56,-72,968,833),24880=>array(57,-74,941,829),24881=>array(45,-74,963,846),24882=>array(58,-67,914,833),24883=>array(28,-23,955,789),24884=>array(30,-67,982,852),24885=>array(52,-70,917,821),24886=>array(60,-58,932,849),24887=>array(37,-68,951,835),24888=>array(44,-33,957,835),24889=>array(52,-76,962,841),24890=>array(49,-68,950,834),24891=>array(62,-40,970,831),24892=>array(49,-66,927,834),24893=>array(40,-66,951,834),24894=>array(32,-63,974,851),24895=>array(43,-52,963,812),24896=>array(47,-71,974,831),24897=>array(62,-38,967,780),24898=>array(42,-50,957,816),24899=>array(44,-72,955,851),24900=>array(38,-59,976,835),24901=>array(55,-75,971,829),24902=>array(50,-54,926,853),24903=>array(40,-42,974,845),24904=>array(38,-48,951,837),24905=>array(50,-72,951,841),24906=>array(35,-72,975,849),24907=>array(50,-48,954,848),24908=>array(41,-68,962,836),24909=>array(48,-72,965,826),24910=>array(41,-69,951,843),24911=>array(60,-78,952,835),24912=>array(47,-51,963,831),24913=>array(48,-65,952,830),24914=>array(46,-72,953,824),24915=>array(39,-68,984,829),24916=>array(48,-71,973,832),24917=>array(51,-63,964,833),24918=>array(53,-74,919,822),24919=>array(15,-43,954,829),24920=>array(29,-76,967,847),24921=>array(38,-58,953,837),24922=>array(37,-63,965,846),24923=>array(38,-68,952,829),24924=>array(47,-44,964,853),24925=>array(41,-58,963,824),24926=>array(20,-58,953,854),24927=>array(52,-74,934,830),24928=>array(36,-76,960,838),24929=>array(40,-73,960,829),24930=>array(38,-69,970,825),24931=>array(40,-68,967,843),24932=>array(52,-49,968,818),24933=>array(39,-66,945,838),24934=>array(39,-36,981,828),24935=>array(49,-52,951,835),24936=>array(28,-70,963,842),24937=>array(40,-67,971,834),24938=>array(40,-68,959,828),24939=>array(42,-50,958,845),24940=>array(47,-64,953,829),24941=>array(44,-33,970,835),24942=>array(45,-77,957,841),24943=>array(40,-68,963,845),24944=>array(55,-21,959,838),24945=>array(39,-65,952,828),24946=>array(48,-65,956,827),24947=>array(37,-68,954,829),24948=>array(54,-66,915,826),24949=>array(37,-65,959,842),24950=>array(50,-67,951,838),24951=>array(39,-57,955,846),24952=>array(57,-31,959,849),24953=>array(57,-31,959,834),24954=>array(32,-75,952,830),24955=>array(41,-76,981,845),24956=>array(36,-29,965,844),24957=>array(35,-63,963,842),24958=>array(38,-25,973,841),24959=>array(70,-32,957,800),24960=>array(51,-70,979,824),24961=>array(45,-65,964,834),24962=>array(55,-60,966,816),24963=>array(38,-39,982,847),24964=>array(37,-45,958,837),24965=>array(58,-51,979,859),24966=>array(33,-69,945,835),24967=>array(47,-29,961,817),24968=>array(45,-72,962,829),24969=>array(42,-73,971,828),24970=>array(42,-70,957,834),24971=>array(48,-28,965,843),24972=>array(39,-36,963,833),24973=>array(28,-60,975,848),24974=>array(38,-73,905,835),24975=>array(46,-61,972,854),24976=>array(36,-76,962,832),24977=>array(42,-58,960,800),24978=>array(36,-70,966,833),24979=>array(43,-61,971,835),24980=>array(25,-67,963,846),24981=>array(43,-61,963,837),24982=>array(25,-60,970,835),24983=>array(29,-60,952,841),24984=>array(52,-70,956,837),24985=>array(37,-47,961,844),24986=>array(42,-63,965,832),24987=>array(42,-72,961,824),24988=>array(45,-62,965,833),24989=>array(53,-52,976,834),24990=>array(23,-75,954,837),24991=>array(32,-68,967,823),24992=>array(31,-47,961,818),24993=>array(48,-70,979,836),24994=>array(17,-87,964,830),24995=>array(29,-70,962,829),24996=>array(36,-72,956,836),24997=>array(40,-47,961,832),24998=>array(52,-70,946,833),24999=>array(38,-68,950,831),25000=>array(50,-33,959,837),25001=>array(43,-29,958,845),25002=>array(36,-68,908,825),25003=>array(51,-55,902,846),25004=>array(46,-68,963,828),25005=>array(34,-58,971,845),25006=>array(38,-71,974,832),25007=>array(45,-59,961,832),25008=>array(44,-62,944,826),25009=>array(47,-71,972,838),25010=>array(42,-38,976,839),25011=>array(36,-70,954,825),25012=>array(35,-65,973,828),25013=>array(49,-39,948,821),25014=>array(32,-68,965,840),25015=>array(38,-66,960,824),25016=>array(32,-66,976,857),25017=>array(41,-65,984,838),25018=>array(43,-67,957,842),25019=>array(43,-67,957,847),25020=>array(45,-32,957,835),25021=>array(48,-56,968,847),25022=>array(38,-71,970,832),25023=>array(33,-78,968,841),25024=>array(37,-72,973,864),25025=>array(37,-79,974,819),25026=>array(46,-58,967,845),25027=>array(38,-66,959,832),25028=>array(29,-69,952,841),25029=>array(31,-85,978,829),25030=>array(42,-62,976,830),25031=>array(48,-26,955,844),25032=>array(29,-63,950,845),25033=>array(39,-68,953,843),25034=>array(18,-68,949,860),25035=>array(42,-58,959,832),25036=>array(44,-63,964,831),25037=>array(38,-68,971,844),25038=>array(53,-68,950,833),25039=>array(49,-70,932,848),25040=>array(40,-71,965,839),25041=>array(53,-26,941,821),25042=>array(30,-63,943,838),25043=>array(48,-69,975,843),25044=>array(33,-70,947,847),25045=>array(36,-59,959,821),25046=>array(51,-41,944,827),25047=>array(25,-69,956,833),25048=>array(53,-52,953,811),25049=>array(60,-71,942,821),25050=>array(33,-71,953,830),25051=>array(37,-71,953,826),25052=>array(37,-71,963,825),25053=>array(49,-71,974,830),25054=>array(41,-59,971,836),25055=>array(46,-44,966,823),25056=>array(38,-70,964,836),25057=>array(38,-69,962,846),25058=>array(43,-73,964,821),25059=>array(46,-62,966,834),25060=>array(38,-69,957,830),25061=>array(44,-70,976,829),25062=>array(48,-59,964,843),25063=>array(44,-68,962,839),25064=>array(36,-71,975,838),25065=>array(34,-56,967,858),25066=>array(41,-70,980,825),25067=>array(47,-73,957,844),25068=>array(29,-55,952,847),25069=>array(51,-85,939,836),25070=>array(47,-73,955,828),25071=>array(48,-41,980,826),25072=>array(47,-65,905,848),25073=>array(47,-71,960,824),25074=>array(32,-42,963,846),25075=>array(26,-56,988,836),25076=>array(27,-68,962,845),25077=>array(41,-68,954,835),25078=>array(32,-72,970,845),25079=>array(43,-69,962,841),25080=>array(46,-32,965,836),25081=>array(29,-67,984,840),25082=>array(27,-67,963,846),25083=>array(30,-80,966,830),25084=>array(29,-65,957,826),25085=>array(42,-68,953,826),25086=>array(43,-66,963,830),25087=>array(43,-55,963,834),25088=>array(42,-54,961,841),25089=>array(39,-44,967,836),25090=>array(40,-72,960,854),25091=>array(42,-78,962,829),25092=>array(34,-57,971,836),25093=>array(39,-36,957,842),25094=>array(59,-29,941,826),25095=>array(39,-36,957,846),25096=>array(90,-52,956,829),25097=>array(73,-64,966,832),25098=>array(65,-64,951,840),25099=>array(74,-70,930,820),25100=>array(51,-57,951,836),25101=>array(64,-67,953,837),25102=>array(50,-66,952,830),25103=>array(42,-68,934,825),25104=>array(50,-72,946,831),25105=>array(61,-60,933,832),25106=>array(61,-64,955,838),25107=>array(70,-66,956,838),25108=>array(85,-58,935,840),25109=>array(44,-68,961,829),25110=>array(70,-58,956,838),25111=>array(32,-74,938,826),25112=>array(100,-69,937,829),25113=>array(102,-67,957,823),25114=>array(65,-60,962,836),25115=>array(81,-57,949,788),25116=>array(67,-67,953,838),25117=>array(63,-74,946,834),25118=>array(77,-49,935,796),25119=>array(51,-65,946,834),25120=>array(68,-69,968,839),25121=>array(33,-72,939,836),25122=>array(43,-64,954,830),25123=>array(45,-71,964,832),25124=>array(33,-65,958,828),25125=>array(52,-59,956,832),25126=>array(35,-73,947,833),25127=>array(43,-64,970,848),25128=>array(65,-65,956,829),25129=>array(52,-65,956,829),25130=>array(54,-61,959,837),25131=>array(36,-63,964,829),25132=>array(52,-61,947,815),25133=>array(42,-70,958,844),25134=>array(39,-77,962,835),25135=>array(52,-68,956,837),25136=>array(56,-73,947,832),25137=>array(41,-65,949,834),25138=>array(52,-68,958,835),25139=>array(24,-62,946,836),25140=>array(43,-63,938,834),25141=>array(50,-65,958,827),25142=>array(69,-64,882,838),25143=>array(53,-66,849,842),25144=>array(57,-64,918,764),25145=>array(45,-71,939,836),25146=>array(51,-59,963,831),25147=>array(39,-68,947,799),25148=>array(89,-72,914,783),25149=>array(57,-67,954,841),25150=>array(44,-71,941,837),25151=>array(40,-66,938,804),25152=>array(42,-70,959,841),25153=>array(43,-70,908,796),25154=>array(61,-65,906,826),25155=>array(45,-64,898,853),25156=>array(38,-68,899,843),25157=>array(38,-68,901,847),25158=>array(38,-68,983,850),25159=>array(35,-67,896,811),25160=>array(28,-68,961,802),25161=>array(28,-77,947,810),25162=>array(52,-72,962,836),25163=>array(85,-68,913,833),25164=>array(266,-62,684,829),25165=>array(64,-62,916,835),25166=>array(53,-61,943,828),25167=>array(56,-61,960,828),25168=>array(66,-71,909,829),25169=>array(53,-48,964,849),25170=>array(45,-65,955,830),25171=>array(54,-62,934,830),25172=>array(66,-67,919,829),25173=>array(43,-61,953,828),25174=>array(80,-61,957,828),25175=>array(53,-61,945,829),25176=>array(55,-69,930,826),25177=>array(61,-69,968,830),25178=>array(58,-67,918,831),25179=>array(44,-64,934,829),25180=>array(59,-65,958,830),25181=>array(39,-61,944,828),25182=>array(48,-53,951,841),25183=>array(39,-65,958,828),25184=>array(38,-56,959,837),25185=>array(48,-57,958,836),25186=>array(47,-63,950,836),25187=>array(71,-68,893,830),25188=>array(53,-68,947,832),25189=>array(53,-66,960,827),25190=>array(46,-64,947,832),25191=>array(25,-67,945,825),25192=>array(42,-61,964,826),25193=>array(42,-63,922,826),25194=>array(29,-65,882,826),25195=>array(44,-62,885,830),25196=>array(55,-65,889,831),25197=>array(39,-53,947,841),25198=>array(49,-64,963,820),25199=>array(52,-57,945,830),25200=>array(50,-66,958,832),25201=>array(41,-51,962,840),25202=>array(59,-68,973,839),25203=>array(45,-78,963,826),25204=>array(68,-66,964,832),25205=>array(42,-55,975,845),25206=>array(50,-72,962,833),25207=>array(50,-67,968,832),25208=>array(78,-58,907,839),25209=>array(45,-72,961,823),25210=>array(42,-55,963,853),25211=>array(48,-69,963,840),25212=>array(50,-69,950,829),25213=>array(50,-67,960,828),25214=>array(63,-68,950,825),25215=>array(33,-67,965,785),25216=>array(37,-74,952,824),25217=>array(50,-64,949,844),25218=>array(63,-55,948,839),25219=>array(62,-59,958,831),25220=>array(39,-63,960,829),25221=>array(31,-55,921,840),25222=>array(37,-57,974,851),25223=>array(57,-63,897,832),25224=>array(56,-66,903,829),25225=>array(53,-64,961,837),25226=>array(40,-62,941,833),25227=>array(42,-55,967,839),25228=>array(61,-58,962,838),25229=>array(42,-65,969,839),25230=>array(51,-71,954,826),25231=>array(56,-70,957,826),25232=>array(58,-66,895,835),25233=>array(47,-69,905,834),25234=>array(57,-58,941,833),25235=>array(40,-69,959,829),25236=>array(57,-52,969,839),25237=>array(56,-66,963,821),25238=>array(52,-64,947,828),25239=>array(46,-63,959,829),25240=>array(61,-68,938,834),25241=>array(48,-67,939,839),25242=>array(31,-60,935,829),25243=>array(28,-78,930,821),25244=>array(51,-77,950,835),25245=>array(55,-55,907,853),25246=>array(42,-56,958,839),25247=>array(37,-66,914,823),25248=>array(36,-54,912,832),25249=>array(36,-56,948,832),25250=>array(38,-71,950,828),25251=>array(46,-63,920,830),25252=>array(27,-66,872,828),25253=>array(49,-69,946,820),25254=>array(54,-52,950,838),25255=>array(93,-57,957,833),25256=>array(41,-65,943,827),25257=>array(50,-66,953,828),25258=>array(39,-65,941,838),25259=>array(45,-71,978,832),25260=>array(44,-70,953,839),25261=>array(44,-60,954,830),25262=>array(51,-62,952,845),25263=>array(45,-62,951,827),25264=>array(44,-69,956,833),25265=>array(50,-61,955,840),25266=>array(56,-70,953,821),25267=>array(50,-74,955,828),25268=>array(49,-67,951,828),25269=>array(43,-64,957,831),25270=>array(50,-70,965,827),25271=>array(45,-56,951,823),25272=>array(58,-67,969,831),25273=>array(61,-67,962,835),25274=>array(61,-65,942,832),25275=>array(43,-68,905,836),25276=>array(73,-66,908,828),25277=>array(62,-67,899,836),25278=>array(52,-60,960,839),25279=>array(48,-64,956,828),25280=>array(61,-64,972,832),25281=>array(61,-64,928,832),25282=>array(53,-69,931,816),25283=>array(57,-62,944,841),25284=>array(48,-68,951,836),25285=>array(44,-60,953,836),25286=>array(53,-62,935,838),25287=>array(37,-68,953,825),25288=>array(50,-67,947,829),25289=>array(49,-64,947,829),25290=>array(52,-62,959,841),25291=>array(44,-73,948,825),25292=>array(48,-64,942,828),25293=>array(73,-64,904,851),25294=>array(42,-68,970,851),25295=>array(60,-58,974,851),25296=>array(49,-64,910,826),25297=>array(63,-67,959,826),25298=>array(39,-68,944,832),25299=>array(53,-63,936,826),25300=>array(40,-77,954,835),25301=>array(74,-64,944,831),25302=>array(43,-62,954,839),25303=>array(61,-73,920,832),25304=>array(65,-61,909,849),25305=>array(60,-63,912,832),25306=>array(52,-75,950,845),25307=>array(69,-67,913,820),25308=>array(47,-79,956,829),25309=>array(44,-66,946,835),25310=>array(70,-64,943,832),25311=>array(41,-61,937,830),25312=>array(55,-61,956,832),25313=>array(36,-66,949,832),25314=>array(31,-52,961,837),25315=>array(29,-61,932,835),25316=>array(57,-68,938,832),25317=>array(40,-72,893,824),25318=>array(38,-55,923,830),25319=>array(40,-61,918,836),25320=>array(38,-74,925,820),25321=>array(30,-64,942,826),25322=>array(61,-63,935,832),25323=>array(54,-66,967,829),25324=>array(39,-70,952,835),25325=>array(43,-70,964,827),25326=>array(45,-67,957,828),25327=>array(37,-71,964,823),25328=>array(58,-72,951,823),25329=>array(35,-69,953,826),25330=>array(36,-65,977,828),25331=>array(38,-67,965,838),25332=>array(33,-64,960,829),25333=>array(60,-68,959,830),25334=>array(46,-64,945,839),25335=>array(41,-65,952,833),25336=>array(60,-75,940,833),25337=>array(54,-71,928,826),25338=>array(55,-65,953,832),25339=>array(56,-80,958,822),25340=>array(48,-70,949,839),25341=>array(44,-64,961,836),25342=>array(45,-63,961,848),25343=>array(38,-70,969,862),25344=>array(62,-81,950,819),25345=>array(39,-64,944,834),25346=>array(36,-49,951,844),25347=>array(56,-52,951,830),25348=>array(60,-66,942,844),25349=>array(60,-62,952,832),25350=>array(78,-62,976,844),25351=>array(52,-68,937,829),25352=>array(54,-62,951,835),25353=>array(57,-67,948,832),25354=>array(41,-66,946,844),25355=>array(57,-50,953,827),25356=>array(49,-65,987,846),25357=>array(46,-51,974,859),25358=>array(48,-65,963,839),25359=>array(60,-74,911,815),25360=>array(63,-51,959,855),25361=>array(47,-75,950,825),25362=>array(60,-78,927,823),25363=>array(44,-64,959,834),25364=>array(52,-64,964,829),25365=>array(66,-70,957,817),25366=>array(38,-65,943,846),25367=>array(60,-62,963,844),25368=>array(49,-67,950,835),25369=>array(19,-68,951,835),25370=>array(54,-68,942,824),25371=>array(42,-60,920,845),25372=>array(60,-50,954,844),25373=>array(25,-62,945,831),25374=>array(34,-60,942,830),25375=>array(26,-64,948,832),25376=>array(42,-64,930,825),25377=>array(35,-62,883,826),25378=>array(36,-64,948,826),25379=>array(36,-66,923,832),25380=>array(37,-61,938,834),25381=>array(33,-59,911,832),25382=>array(61,-61,936,832),25383=>array(60,-53,909,844),25384=>array(42,-69,965,834),25385=>array(46,-66,956,829),25386=>array(47,-73,950,822),25387=>array(51,-71,948,829),25388=>array(56,-59,953,835),25389=>array(53,-60,969,836),25390=>array(60,-67,926,844),25391=>array(45,-74,963,821),25392=>array(60,-49,950,838),25393=>array(60,-60,969,832),25394=>array(56,-63,952,839),25395=>array(53,-66,949,827),25396=>array(40,-64,947,828),25397=>array(38,-51,951,841),25398=>array(36,-56,916,841),25399=>array(39,-68,950,836),25400=>array(56,-72,947,829),25401=>array(36,-68,956,823),25402=>array(44,-66,964,824),25403=>array(52,-73,956,826),25404=>array(41,-56,944,858),25405=>array(44,-69,965,840),25406=>array(47,-70,964,835),25407=>array(60,-52,939,844),25408=>array(60,-64,969,831),25409=>array(50,-68,932,828),25410=>array(43,-72,952,823),25411=>array(51,-65,966,833),25412=>array(59,-65,952,832),25413=>array(62,-70,915,825),25414=>array(53,-69,915,826),25415=>array(56,-69,958,829),25416=>array(43,-59,965,832),25417=>array(35,-72,953,821),25418=>array(53,-63,953,832),25419=>array(48,-67,952,826),25420=>array(45,-71,909,825),25421=>array(38,-68,951,826),25422=>array(52,-65,919,835),25423=>array(56,-67,956,828),25424=>array(55,-67,903,823),25425=>array(56,-73,958,831),25426=>array(67,-65,955,835),25427=>array(64,-67,958,829),25428=>array(76,-65,912,829),25429=>array(39,-69,950,832),25430=>array(46,-69,950,834),25431=>array(58,-64,966,827),25432=>array(65,-65,979,836),25433=>array(59,-65,954,829),25434=>array(67,-63,956,829),25435=>array(67,-63,915,829),25436=>array(44,-78,963,829),25437=>array(67,-61,968,829),25438=>array(44,-63,914,832),25439=>array(32,-64,937,827),25440=>array(50,-64,931,829),25441=>array(31,-63,931,830),25442=>array(25,-73,948,825),25443=>array(49,-62,900,836),25444=>array(66,-67,951,824),25445=>array(58,-70,961,852),25446=>array(73,-52,966,835),25447=>array(36,-74,967,834),25448=>array(43,-68,969,845),25449=>array(27,-66,959,826),25450=>array(67,-65,960,833),25451=>array(54,-63,904,832),25452=>array(37,-60,949,849),25453=>array(37,-65,947,846),25454=>array(37,-54,943,838),25455=>array(56,-64,914,830),25456=>array(50,-64,974,832),25457=>array(50,-71,967,842),25458=>array(36,-56,967,835),25459=>array(53,-58,951,833),25460=>array(67,-61,962,829),25461=>array(41,-54,950,843),25462=>array(30,-71,933,833),25463=>array(40,-75,963,833),25464=>array(54,-69,959,824),25465=>array(67,-72,957,829),25466=>array(23,-61,963,847),25467=>array(27,-64,961,853),25468=>array(53,-59,967,840),25469=>array(51,-51,953,854),25470=>array(67,-64,939,845),25471=>array(67,-63,938,835),25472=>array(45,-72,961,833),25473=>array(53,-71,968,832),25474=>array(56,-74,938,840),25475=>array(44,-65,922,829),25476=>array(38,-65,974,853),25477=>array(46,-65,959,836),25478=>array(67,-65,906,829),25479=>array(41,-67,975,827),25480=>array(52,-69,964,832),25481=>array(46,-71,944,825),25482=>array(48,-65,959,845),25483=>array(67,-69,966,839),25484=>array(79,-61,932,835),25485=>array(51,-69,960,827),25486=>array(45,-63,966,842),25487=>array(62,-69,921,841),25488=>array(61,-65,908,842),25489=>array(50,-73,953,835),25490=>array(41,-69,951,831),25491=>array(41,-71,958,832),25492=>array(73,-69,951,788),25493=>array(40,-72,971,820),25494=>array(40,-74,963,820),25495=>array(38,-65,965,842),25496=>array(49,-76,911,829),25497=>array(40,-66,952,828),25498=>array(40,-69,942,820),25499=>array(38,-65,968,829),25500=>array(48,-70,957,832),25501=>array(53,-70,951,827),25502=>array(45,-52,971,852),25503=>array(34,-60,966,837),25504=>array(41,-71,955,826),25505=>array(39,-58,975,848),25506=>array(39,-69,966,824),25507=>array(45,-71,942,827),25508=>array(49,-69,898,829),25509=>array(43,-71,950,828),25510=>array(40,-69,911,820),25511=>array(36,-65,945,828),25512=>array(52,-68,955,836),25513=>array(41,-68,966,839),25514=>array(49,-72,948,824),25515=>array(41,-51,968,841),25516=>array(50,-62,914,844),25517=>array(46,-59,988,832),25518=>array(55,-68,951,836),25519=>array(38,-67,951,832),25520=>array(54,-52,954,826),25521=>array(83,-67,944,831),25522=>array(73,-71,924,818),25523=>array(31,-65,909,832),25524=>array(37,-60,904,830),25525=>array(40,-72,977,828),25526=>array(40,-71,956,856),25527=>array(22,-70,923,824),25528=>array(41,-63,917,837),25529=>array(65,-59,954,825),25530=>array(54,-62,942,835),25531=>array(28,-65,973,826),25532=>array(30,-64,921,829),25533=>array(42,-60,947,854),25534=>array(49,-63,975,839),25535=>array(40,-72,948,836),25536=>array(37,-65,965,835),25537=>array(59,-74,962,821),25538=>array(61,-68,955,839),25539=>array(43,-68,950,837),25540=>array(39,-64,973,831),25541=>array(40,-69,941,785),25542=>array(46,-67,954,835),25543=>array(50,-67,947,829),25544=>array(53,-72,899,823),25545=>array(46,-69,964,826),25546=>array(55,-70,952,828),25547=>array(50,-74,972,828),25548=>array(57,-70,971,821),25549=>array(36,-66,968,845),25550=>array(47,-59,965,851),25551=>array(53,-69,955,828),25552=>array(48,-72,969,826),25553=>array(55,-72,954,820),25554=>array(48,-71,940,836),25555=>array(57,-68,962,828),25556=>array(33,-50,972,850),25557=>array(54,-64,949,828),25558=>array(37,-67,948,829),25559=>array(51,-72,957,832),25560=>array(53,-71,951,838),25561=>array(62,-69,920,832),25562=>array(46,-77,944,820),25563=>array(40,-65,971,838),25564=>array(36,-60,975,862),25565=>array(53,-69,977,829),25566=>array(35,-72,912,831),25567=>array(57,-74,964,823),25568=>array(41,-63,953,829),25569=>array(54,-62,943,830),25570=>array(40,-72,960,849),25571=>array(37,-63,954,836),25572=>array(57,-64,901,830),25573=>array(55,-67,943,838),25574=>array(44,-67,903,831),25575=>array(43,-68,949,831),25576=>array(49,-69,941,833),25577=>array(50,-68,949,830),25578=>array(34,-66,964,829),25579=>array(66,-51,969,851),25580=>array(40,-69,960,836),25581=>array(73,-71,924,818),25582=>array(56,-68,945,825),25583=>array(56,-68,956,825),25584=>array(53,-62,954,830),25585=>array(67,-70,941,833),25586=>array(38,-53,971,843),25587=>array(53,-73,961,827),25588=>array(61,-69,969,830),25589=>array(38,-66,959,823),25590=>array(34,-64,945,829),25591=>array(48,-70,940,826),25592=>array(28,-57,971,836),25593=>array(48,-63,953,827),25594=>array(39,-76,937,819),25595=>array(35,-66,971,829),25596=>array(49,-61,974,833),25597=>array(32,-60,930,833),25598=>array(40,-72,967,820),25599=>array(35,-68,938,825),25600=>array(43,-63,939,829),25601=>array(42,-73,897,824),25602=>array(35,-53,943,837),25603=>array(95,-59,950,822),25604=>array(50,-59,960,849),25605=>array(34,-63,926,837),25606=>array(39,-68,958,836),25607=>array(45,-64,971,842),25608=>array(52,-72,962,837),25609=>array(39,-58,957,851),25610=>array(53,-62,909,836),25611=>array(53,-75,968,828),25612=>array(53,-75,968,827),25613=>array(51,-70,956,822),25614=>array(61,-68,961,828),25615=>array(50,-66,945,832),25616=>array(50,-75,950,843),25617=>array(43,-67,954,829),25618=>array(53,-57,962,853),25619=>array(27,-66,933,843),25620=>array(28,-65,950,826),25621=>array(51,-61,954,826),25622=>array(42,-64,945,845),25623=>array(66,-60,921,844),25624=>array(47,-50,955,847),25625=>array(43,-64,953,829),25626=>array(55,-64,934,838),25627=>array(49,-70,953,838),25628=>array(44,-78,963,832),25629=>array(67,-67,971,843),25630=>array(60,-67,940,842),25631=>array(48,-72,952,823),25632=>array(56,-70,915,835),25633=>array(35,-67,964,829),25634=>array(43,-65,958,833),25635=>array(44,-72,968,831),25636=>array(41,-50,954,859),25637=>array(44,-55,967,857),25638=>array(52,-64,917,828),25639=>array(56,-71,923,838),25640=>array(59,-64,918,827),25641=>array(43,-65,969,838),25642=>array(46,-70,948,843),25643=>array(50,-64,957,842),25644=>array(38,-71,976,838),25645=>array(40,-71,966,830),25646=>array(56,-70,975,826),25647=>array(43,-70,920,838),25648=>array(56,-68,916,827),25649=>array(67,-71,928,829),25650=>array(38,-66,960,844),25651=>array(47,-70,948,836),25652=>array(36,-59,981,845),25653=>array(49,-67,965,826),25654=>array(37,-66,970,849),25655=>array(58,-72,961,836),25656=>array(43,-68,973,839),25657=>array(55,-65,952,825),25658=>array(39,-77,947,839),25659=>array(38,-64,969,862),25660=>array(43,-69,970,839),25661=>array(40,-65,965,830),25662=>array(42,-61,952,837),25663=>array(52,-57,955,822),25664=>array(56,-69,945,842),25665=>array(65,-62,955,826),25666=>array(47,-58,951,835),25667=>array(35,-55,954,837),25668=>array(47,-60,960,835),25669=>array(38,-63,967,830),25670=>array(31,-63,934,834),25671=>array(28,-76,914,819),25672=>array(43,-64,932,844),25673=>array(52,-64,975,841),25674=>array(38,-66,922,830),25675=>array(45,-73,967,835),25676=>array(55,-71,942,847),25677=>array(58,-71,950,832),25678=>array(55,-70,968,826),25679=>array(52,-64,976,835),25680=>array(50,-66,974,832),25681=>array(56,-68,927,827),25682=>array(43,-69,955,830),25683=>array(51,-66,965,829),25684=>array(40,-66,958,846),25685=>array(43,-68,960,829),25686=>array(43,-63,968,841),25687=>array(33,-69,978,837),25688=>array(45,-73,948,825),25689=>array(55,-71,974,827),25690=>array(49,-59,945,833),25691=>array(44,-51,945,855),25692=>array(35,-73,955,827),25693=>array(53,-70,956,838),25694=>array(56,-68,953,826),25695=>array(41,-75,942,831),25696=>array(53,-67,964,831),25697=>array(47,-70,965,830),25698=>array(53,-70,938,836),25699=>array(43,-64,953,841),25700=>array(37,-59,946,839),25701=>array(52,-68,949,835),25702=>array(47,-76,978,832),25703=>array(41,-68,953,833),25704=>array(39,-72,954,827),25705=>array(37,-63,940,838),25706=>array(43,-66,984,843),25707=>array(51,-66,958,830),25708=>array(57,-72,961,837),25709=>array(42,-67,962,851),25710=>array(54,-70,971,839),25711=>array(56,-67,952,833),25712=>array(50,-70,974,832),25713=>array(53,-68,975,822),25714=>array(51,-67,955,828),25715=>array(37,-67,951,824),25716=>array(30,-56,948,836),25717=>array(50,-70,959,828),25718=>array(38,-63,959,839),25719=>array(52,-67,970,838),25720=>array(45,-72,971,823),25721=>array(53,-65,965,835),25722=>array(53,-64,910,830),25723=>array(34,-78,966,849),25724=>array(51,-66,956,826),25725=>array(31,-54,948,839),25726=>array(40,-64,959,828),25727=>array(55,-70,964,843),25728=>array(60,-54,946,833),25729=>array(43,-68,957,847),25730=>array(42,-67,975,829),25731=>array(73,-64,955,835),25732=>array(36,-65,923,823),25733=>array(31,-68,971,829),25734=>array(73,-66,953,831),25735=>array(46,-69,971,837),25736=>array(54,-68,942,833),25737=>array(58,-68,971,844),25738=>array(42,-69,911,825),25739=>array(39,-71,905,822),25740=>array(42,-85,953,826),25741=>array(44,-67,957,828),25742=>array(55,-64,955,828),25743=>array(38,-70,962,826),25744=>array(67,-73,954,820),25745=>array(31,-77,941,822),25746=>array(41,-69,963,832),25747=>array(55,-69,953,827),25748=>array(42,-66,955,826),25749=>array(37,-67,942,834),25750=>array(39,-77,982,831),25751=>array(40,-81,962,823),25752=>array(41,-52,962,857),25753=>array(45,-62,963,853),25754=>array(37,-60,970,849),25755=>array(41,-74,954,832),25756=>array(43,-68,983,832),25757=>array(45,-56,943,846),25758=>array(33,-71,948,829),25759=>array(51,-67,976,838),25760=>array(35,-73,972,823),25761=>array(22,-64,978,845),25762=>array(50,-63,949,828),25763=>array(41,-68,956,828),25764=>array(39,-68,961,835),25765=>array(40,-71,959,843),25766=>array(55,-70,980,833),25767=>array(34,-64,973,844),25768=>array(55,-71,969,849),25769=>array(37,-61,968,843),25770=>array(39,-64,973,855),25771=>array(46,-63,954,837),25772=>array(41,-63,958,837),25773=>array(29,-69,971,829),25774=>array(32,-65,948,832),25775=>array(55,-64,965,847),25776=>array(36,-69,955,823),25777=>array(40,-71,949,840),25778=>array(37,-69,975,835),25779=>array(40,-70,973,839),25780=>array(12,-73,975,838),25781=>array(25,-61,936,828),25782=>array(33,-68,945,831),25783=>array(40,-65,943,827),25784=>array(41,-66,915,827),25785=>array(35,-64,965,828),25786=>array(33,-62,912,846),25787=>array(40,-78,955,833),25788=>array(47,-68,960,833),25789=>array(36,-79,974,842),25790=>array(38,-68,966,829),25791=>array(34,-69,961,861),25792=>array(45,-66,964,829),25793=>array(32,-70,958,835),25794=>array(54,-69,924,823),25795=>array(27,-76,966,832),25796=>array(43,-67,954,835),25797=>array(45,-67,957,837),25798=>array(31,-64,963,833),25799=>array(49,-67,935,821),25800=>array(39,-66,972,833),25801=>array(41,-69,924,829),25802=>array(73,-65,956,835),25803=>array(52,-66,918,832),25804=>array(75,-38,967,854),25805=>array(39,-62,954,823),25806=>array(47,-73,951,845),25807=>array(33,-78,971,830),25808=>array(42,-68,958,828),25809=>array(43,-78,970,843),25810=>array(29,-68,963,842),25811=>array(39,-53,949,839),25812=>array(48,-74,950,846),25813=>array(55,-65,960,834),25814=>array(48,-71,939,829),25815=>array(49,-64,965,849),25816=>array(54,-64,949,832),25817=>array(34,-79,975,840),25818=>array(41,-70,964,831),25819=>array(40,-73,985,819),25820=>array(47,-70,984,848),25821=>array(45,-66,979,826),25822=>array(30,-64,958,832),25823=>array(53,-70,958,841),25824=>array(53,-77,953,830),25825=>array(44,-63,961,830),25826=>array(36,-65,952,830),25827=>array(57,-65,954,827),25828=>array(61,-67,962,856),25829=>array(84,-51,955,840),25830=>array(46,-70,966,826),25831=>array(55,-59,965,832),25832=>array(42,-74,967,831),25833=>array(48,-68,953,827),25834=>array(47,-69,954,837),25835=>array(39,-76,969,824),25836=>array(42,-63,956,832),25837=>array(45,-49,966,844),25838=>array(44,-58,958,843),25839=>array(34,-71,960,842),25840=>array(49,-67,952,844),25841=>array(58,-71,913,827),25842=>array(36,-75,949,832),25843=>array(33,-67,939,835),25844=>array(43,-68,960,841),25845=>array(51,-62,962,840),25846=>array(42,-64,955,841),25847=>array(41,-70,972,840),25848=>array(41,-50,970,861),25849=>array(40,-68,977,837),25850=>array(43,-69,952,818),25851=>array(31,-67,963,837),25852=>array(51,-71,961,827),25853=>array(54,-70,952,831),25854=>array(41,-64,963,829),25855=>array(63,-64,986,843),25856=>array(49,-65,960,832),25857=>array(42,-78,975,844),25858=>array(42,-77,948,823),25859=>array(42,-73,973,825),25860=>array(44,-67,965,836),25861=>array(46,-77,960,828),25862=>array(40,-70,954,835),25863=>array(39,-65,960,843),25864=>array(31,-83,974,839),25865=>array(43,-64,967,833),25866=>array(35,-72,964,827),25867=>array(27,-72,970,844),25868=>array(61,-70,923,826),25869=>array(36,-73,976,842),25870=>array(39,-69,954,827),25871=>array(40,-62,954,842),25872=>array(46,-67,982,842),25873=>array(41,-71,986,835),25874=>array(23,-71,933,827),25875=>array(27,-65,980,845),25876=>array(56,-76,912,822),25877=>array(29,-66,972,841),25878=>array(50,-71,953,835),25879=>array(46,-68,966,846),25880=>array(39,-69,970,829),25881=>array(44,-74,964,838),25882=>array(35,-68,959,828),25883=>array(38,-64,969,841),25884=>array(42,-74,944,832),25885=>array(36,-68,955,821),25886=>array(52,-64,962,831),25887=>array(32,-70,974,853),25888=>array(48,-72,954,841),25889=>array(49,-64,962,840),25890=>array(41,-65,968,831),25891=>array(48,-61,957,840),25892=>array(55,-72,951,832),25893=>array(33,-63,970,844),25894=>array(63,-66,961,824),25895=>array(29,-72,959,835),25896=>array(35,-73,973,844),25897=>array(38,-57,956,840),25898=>array(41,-62,959,839),25899=>array(36,-64,970,826),25900=>array(39,-72,956,832),25901=>array(26,-71,967,840),25902=>array(48,-65,975,839),25903=>array(78,-65,945,830),25904=>array(41,-55,968,846),25905=>array(58,-80,972,834),25906=>array(63,-73,973,830),25907=>array(41,-71,981,824),25908=>array(34,-76,942,825),25909=>array(68,-72,932,818),25910=>array(67,-70,951,830),25911=>array(71,-67,979,840),25912=>array(48,-67,949,830),25913=>array(103,-65,946,825),25914=>array(86,-75,969,821),25915=>array(64,-68,957,838),25916=>array(62,-67,967,841),25917=>array(46,-71,963,832),25918=>array(46,-65,956,842),25919=>array(38,-74,956,838),25920=>array(114,-77,970,838),25921=>array(129,-82,955,828),25922=>array(24,-61,976,834),25923=>array(87,-80,962,823),25924=>array(29,-71,970,833),25925=>array(54,-67,958,833),25926=>array(52,-68,969,835),25927=>array(28,-65,972,834),25928=>array(60,-64,956,834),25929=>array(42,-67,975,838),25930=>array(46,-62,970,835),25931=>array(37,-68,959,840),25932=>array(27,-64,947,833),25933=>array(47,-70,960,843),25934=>array(38,-69,971,837),25935=>array(57,-63,971,839),25936=>array(33,-67,971,825),25937=>array(39,-68,955,843),25938=>array(32,-67,963,834),25939=>array(38,-69,969,829),25940=>array(54,-54,973,855),25941=>array(43,-70,970,836),25942=>array(48,-74,946,830),25943=>array(63,-74,963,836),25944=>array(48,-61,967,843),25945=>array(30,-60,950,831),25946=>array(30,-70,972,839),25947=>array(23,-60,932,847),25948=>array(37,-74,971,835),25949=>array(99,-69,967,835),25950=>array(81,-70,966,836),25951=>array(46,-73,957,836),25952=>array(44,-84,965,820),25953=>array(43,-77,971,823),25954=>array(39,-61,960,826),25955=>array(65,-72,956,834),25956=>array(42,-74,968,823),25957=>array(44,-80,966,829),25958=>array(42,-67,961,839),25959=>array(45,-59,962,839),25960=>array(66,-71,969,840),25961=>array(52,-69,969,842),25962=>array(44,-76,965,821),25963=>array(35,-61,944,823),25964=>array(44,-70,969,836),25965=>array(42,-71,969,836),25966=>array(36,-74,970,837),25967=>array(99,-75,967,823),25968=>array(42,-69,959,821),25969=>array(45,-63,967,835),25970=>array(55,-71,957,838),25971=>array(47,-75,969,833),25972=>array(51,-18,946,840),25973=>array(60,-69,967,834),25974=>array(104,-76,985,828),25975=>array(41,-65,969,839),25976=>array(60,-70,959,833),25977=>array(58,-76,984,831),25978=>array(60,-71,959,832),25979=>array(36,-65,970,846),25980=>array(60,-73,973,827),25981=>array(36,-68,974,843),25982=>array(64,-77,978,849),25983=>array(44,-77,978,827),25984=>array(35,-72,970,824),25985=>array(63,-69,977,842),25986=>array(45,-66,970,859),25987=>array(51,-68,955,830),25988=>array(38,-65,972,832),25989=>array(52,-72,967,838),25990=>array(52,-69,969,839),25991=>array(62,-69,947,822),25992=>array(49,-73,951,815),25993=>array(49,-63,951,828),25994=>array(36,-72,959,843),25995=>array(47,-68,921,840),25996=>array(36,-63,963,833),25997=>array(26,-65,974,840),25998=>array(29,-64,974,828),25999=>array(47,-66,971,846),26000=>array(36,-63,964,831),26001=>array(35,-68,956,829),26002=>array(44,-71,936,829),26003=>array(43,-70,888,807),26004=>array(60,-75,983,833),26005=>array(53,-65,927,826),26006=>array(49,-42,951,835),26007=>array(62,-64,946,832),26008=>array(54,-65,950,844),26009=>array(38,-68,956,836),26010=>array(67,-65,948,829),26011=>array(27,-72,946,826),26012=>array(32,-71,945,838),26013=>array(67,-65,946,789),26014=>array(46,-73,954,827),26015=>array(42,-79,944,820),26016=>array(51,-70,954,836),26017=>array(46,-77,960,854),26018=>array(60,-76,954,823),26019=>array(33,-76,948,818),26020=>array(75,-71,902,832),26021=>array(81,-69,895,834),26022=>array(48,-69,959,824),26023=>array(77,-64,941,836),26024=>array(50,-69,941,828),26025=>array(66,-75,925,828),26026=>array(47,-70,957,816),26027=>array(37,-69,951,834),26028=>array(53,-73,945,831),26029=>array(99,-66,946,824),26030=>array(63,-70,951,824),26031=>array(49,-75,944,829),26032=>array(54,-62,944,830),26033=>array(45,-67,934,837),26034=>array(65,-65,959,828),26035=>array(47,-73,952,836),26036=>array(36,-79,957,831),26037=>array(65,-65,959,833),26038=>array(43,-68,927,821),26039=>array(106,-66,950,845),26040=>array(44,-62,960,829),26041=>array(52,-67,936,822),26042=>array(38,-63,976,842),26043=>array(42,-61,969,837),26044=>array(41,-62,966,826),26045=>array(42,-49,952,831),26046=>array(51,-73,956,844),26047=>array(54,-50,952,858),26048=>array(48,-69,962,841),26049=>array(70,-65,906,829),26050=>array(36,-68,951,850),26051=>array(34,-70,951,833),26052=>array(49,-67,967,844),26053=>array(33,-67,969,839),26054=>array(48,-61,965,854),26055=>array(64,-73,959,848),26056=>array(34,-73,961,848),26057=>array(42,-69,947,832),26058=>array(35,-60,963,839),26059=>array(39,-66,966,841),26060=>array(39,-68,954,841),26061=>array(44,-73,974,838),26062=>array(50,-74,960,843),26063=>array(35,-67,966,843),26064=>array(42,-59,968,852),26065=>array(42,-61,962,852),26066=>array(18,-65,958,846),26067=>array(44,-67,955,836),26068=>array(30,-86,964,845),26069=>array(61,-55,976,843),26070=>array(39,-68,945,837),26071=>array(37,-70,955,837),26072=>array(37,-65,957,839),26073=>array(45,-55,959,839),26074=>array(44,-68,958,839),26075=>array(37,-67,971,839),26076=>array(40,-61,955,850),26077=>array(37,-64,980,834),26078=>array(31,-67,985,828),26079=>array(33,-71,967,847),26080=>array(65,-59,944,779),26081=>array(93,-50,947,800),26082=>array(47,-55,961,784),26083=>array(110,-64,946,846),26084=>array(86,-65,972,789),26085=>array(237,-32,788,747),26086=>array(84,-13,936,769),26087=>array(140,-52,860,778),26088=>array(195,-61,883,835),26089=>array(86,-68,934,780),26090=>array(89,-53,949,843),26091=>array(89,-73,905,763),26092=>array(39,-61,899,837),26093=>array(52,-62,957,839),26094=>array(54,-65,974,844),26095=>array(54,-66,972,776),26096=>array(92,-65,927,770),26097=>array(85,-61,939,785),26098=>array(46,-66,969,789),26099=>array(111,-64,905,841),26100=>array(101,-54,951,789),26101=>array(121,-66,879,786),26102=>array(103,-62,927,829),26103=>array(87,-65,912,832),26104=>array(95,-68,914,775),26105=>array(63,-64,937,833),26106=>array(91,-7,934,781),26107=>array(35,-58,968,796),26108=>array(95,-74,943,815),26109=>array(92,-47,967,823),26110=>array(73,-64,956,836),26111=>array(111,-67,948,837),26112=>array(105,-54,903,830),26113=>array(104,-62,945,831),26114=>array(69,-61,899,791),26115=>array(48,-72,950,789),26116=>array(102,-69,956,791),26117=>array(109,-71,959,787),26118=>array(82,-50,958,796),26119=>array(51,-62,954,789),26120=>array(105,-66,934,833),26121=>array(99,-56,947,825),26122=>array(68,-68,952,786),26123=>array(49,-68,956,831),26124=>array(158,-64,856,788),26125=>array(116,-53,884,788),26126=>array(109,-65,869,787),26127=>array(86,-69,937,843),26128=>array(109,-70,960,784),26129=>array(103,-66,956,831),26130=>array(103,-63,911,839),26131=>array(75,-67,866,782),26132=>array(79,-62,930,828),26133=>array(101,-68,936,838),26134=>array(101,-46,965,807),26135=>array(77,-68,943,795),26136=>array(64,-63,933,810),26137=>array(66,-74,918,779),26138=>array(66,-53,957,835),26139=>array(97,-14,952,788),26140=>array(49,-60,936,798),26141=>array(67,-68,973,845),26142=>array(57,-62,942,786),26143=>array(96,-18,935,780),26144=>array(88,-67,953,832),26145=>array(118,-57,955,822),26146=>array(123,-69,901,824),26147=>array(100,-72,974,849),26148=>array(102,-65,948,839),26149=>array(45,-67,962,837),26150=>array(50,-68,959,774),26151=>array(100,-65,966,832),26152=>array(116,-62,955,845),26153=>array(73,-67,961,830),26154=>array(51,-65,932,805),26155=>array(115,-56,919,830),26156=>array(159,-68,937,812),26157=>array(120,-68,901,785),26158=>array(50,-72,916,778),26159=>array(68,-66,960,790),26160=>array(64,-24,942,802),26161=>array(70,-18,944,788),26162=>array(106,-66,918,830),26163=>array(120,-76,961,824),26164=>array(84,-67,892,787),26165=>array(104,-71,939,778),26166=>array(33,-62,976,802),26167=>array(57,-14,948,788),26168=>array(110,-77,964,837),26169=>array(99,-66,965,835),26170=>array(85,-69,938,776),26171=>array(50,-61,898,791),26172=>array(41,-43,964,789),26173=>array(91,-61,926,824),26174=>array(53,-17,921,784),26175=>array(95,-56,948,819),26176=>array(113,-68,965,830),26177=>array(47,-65,960,788),26178=>array(113,-65,948,839),26179=>array(54,-51,948,800),26180=>array(108,-57,959,831),26181=>array(102,-31,946,776),26182=>array(102,-22,959,836),26183=>array(104,-72,965,837),26184=>array(89,-63,944,846),26185=>array(72,-60,944,790),26186=>array(110,-12,953,774),26187=>array(74,-65,926,799),26188=>array(107,-68,907,847),26189=>array(107,-65,895,782),26190=>array(107,-69,953,828),26191=>array(61,-73,945,789),26192=>array(107,-61,943,846),26193=>array(136,-62,877,789),26194=>array(97,-54,941,799),26195=>array(90,-67,943,822),26196=>array(100,-64,928,823),26197=>array(64,-65,916,785),26198=>array(101,-72,930,758),26199=>array(80,-71,957,848),26200=>array(101,-62,953,789),26201=>array(94,-62,958,834),26202=>array(110,-70,956,827),26203=>array(102,-58,955,797),26204=>array(55,-53,908,803),26205=>array(59,-30,948,829),26206=>array(79,-69,951,837),26207=>array(30,-67,967,793),26208=>array(90,-68,951,834),26209=>array(110,-68,959,832),26210=>array(68,-62,943,842),26211=>array(102,-67,954,843),26212=>array(82,-65,940,786),26213=>array(91,-71,962,824),26214=>array(98,-59,947,837),26215=>array(97,-60,939,831),26216=>array(30,-68,935,809),26217=>array(97,-69,965,840),26218=>array(110,-74,961,833),26219=>array(106,-71,946,825),26220=>array(102,-60,951,850),26221=>array(97,-68,907,791),26222=>array(53,-70,944,845),26223=>array(58,-61,940,796),26224=>array(102,-67,954,832),26225=>array(107,-71,949,828),26226=>array(110,-68,959,833),26227=>array(58,-71,932,826),26228=>array(75,-52,938,838),26229=>array(52,-60,964,846),26230=>array(117,-64,887,785),26231=>array(50,-68,943,782),26232=>array(41,-52,968,808),26233=>array(110,-72,919,782),26234=>array(82,-69,897,829),26235=>array(105,-40,966,828),26236=>array(104,-72,965,846),26237=>array(59,-63,981,842),26238=>array(87,-62,931,842),26239=>array(87,-62,923,791),26240=>array(107,-70,955,831),26241=>array(86,-65,970,817),26242=>array(64,-71,931,827),26243=>array(58,-70,937,808),26244=>array(90,-49,947,822),26245=>array(79,-59,960,849),26246=>array(90,-67,947,830),26247=>array(106,-71,971,790),26248=>array(57,-62,950,798),26249=>array(89,-65,936,787),26250=>array(121,-80,965,782),26251=>array(106,-55,948,849),26252=>array(86,-61,940,834),26253=>array(115,-69,925,785),26254=>array(95,-63,969,835),26255=>array(115,-65,960,835),26256=>array(91,-51,946,858),26257=>array(62,-63,955,790),26258=>array(89,-21,954,792),26259=>array(36,-69,954,830),26260=>array(110,-68,952,834),26261=>array(108,-67,966,833),26262=>array(89,-67,954,834),26263=>array(98,-64,943,840),26264=>array(82,-55,937,804),26265=>array(104,-72,956,833),26266=>array(89,-64,945,831),26267=>array(107,-25,939,843),26268=>array(60,-68,944,826),26269=>array(101,-56,936,789),26270=>array(112,-50,933,849),26271=>array(109,-24,951,832),26272=>array(74,-56,927,820),26273=>array(104,-70,960,800),26274=>array(92,-70,938,831),26275=>array(46,-63,974,851),26276=>array(92,-64,979,849),26277=>array(50,-59,950,788),26278=>array(39,-62,961,796),26279=>array(97,-72,955,821),26280=>array(59,-25,953,783),26281=>array(110,-72,990,832),26282=>array(113,-70,953,823),26283=>array(83,-68,948,833),26284=>array(65,-71,953,827),26285=>array(112,-64,952,849),26286=>array(51,-65,965,837),26287=>array(100,-75,955,827),26288=>array(100,-69,975,833),26289=>array(104,-26,962,799),26290=>array(112,-68,953,834),26291=>array(83,-62,941,826),26292=>array(66,-66,956,786),26293=>array(101,-53,968,841),26294=>array(92,-71,971,828),26295=>array(115,-68,960,836),26296=>array(89,-62,966,855),26297=>array(58,-56,933,815),26298=>array(109,-74,953,777),26299=>array(115,-68,971,781),26300=>array(68,-71,960,837),26301=>array(115,-70,960,824),26302=>array(99,-77,970,835),26303=>array(89,-69,957,833),26304=>array(101,-8,948,843),26305=>array(59,-37,947,832),26306=>array(89,-68,956,827),26307=>array(70,-64,960,829),26308=>array(94,-68,945,831),26309=>array(59,-71,943,819),26310=>array(32,-60,959,798),26311=>array(53,-74,947,817),26312=>array(96,-14,941,854),26313=>array(107,-61,964,837),26314=>array(110,-77,953,827),26315=>array(114,-70,956,777),26316=>array(55,-25,949,779),26317=>array(112,-64,952,849),26318=>array(79,-62,949,788),26319=>array(51,-67,946,788),26320=>array(86,-47,918,821),26321=>array(35,-75,968,812),26322=>array(94,-59,964,850),26323=>array(31,-75,966,834),26324=>array(57,-66,978,840),26325=>array(84,-72,927,841),26326=>array(81,-62,946,841),26327=>array(95,-67,959,825),26328=>array(101,-69,941,781),26329=>array(97,-63,955,789),26330=>array(94,-61,965,836),26331=>array(89,-70,965,835),26332=>array(85,-70,946,813),26333=>array(103,-64,980,784),26334=>array(93,-66,935,799),26335=>array(55,-67,956,816),26336=>array(93,-71,966,819),26337=>array(54,-32,952,791),26338=>array(99,-61,959,820),26339=>array(91,-72,953,823),26340=>array(91,-64,926,783),26341=>array(92,-67,954,830),26342=>array(88,-64,946,841),26343=>array(116,-68,966,817),26344=>array(90,-53,957,853),26345=>array(48,-62,937,824),26346=>array(90,-64,962,796),26347=>array(49,-71,962,838),26348=>array(92,-68,961,800),26349=>array(82,-68,944,834),26350=>array(83,-64,959,799),26351=>array(98,-67,924,806),26352=>array(166,-33,842,728),26353=>array(175,-61,841,788),26354=>array(163,-68,860,831),26355=>array(71,-56,954,839),26356=>array(48,-72,962,777),26357=>array(71,-60,946,845),26358=>array(61,-71,898,845),26359=>array(62,-67,896,792),26360=>array(84,-64,938,837),26361=>array(53,-70,947,829),26362=>array(53,-70,947,829),26363=>array(43,-68,946,791),26364=>array(57,-67,959,791),26365=>array(127,-65,876,852),26366=>array(38,-65,959,825),26367=>array(56,-68,950,834),26368=>array(53,-73,935,783),26369=>array(60,-71,960,781),26370=>array(54,-68,946,808),26371=>array(33,-74,978,848),26372=>array(98,-68,980,828),26373=>array(63,-63,920,830),26374=>array(94,-64,949,845),26375=>array(23,-74,957,847),26376=>array(86,-76,788,783),26377=>array(45,-65,936,844),26378=>array(33,-65,956,790),26379=>array(65,-77,891,782),26380=>array(23,-68,963,839),26381=>array(53,-75,950,783),26382=>array(47,-57,971,854),26383=>array(41,-56,905,840),26384=>array(34,-66,908,843),26385=>array(52,-64,964,829),26386=>array(43,-64,906,832),26387=>array(39,-71,957,823),26388=>array(60,-67,905,848),26389=>array(36,-73,961,837),26390=>array(36,-64,962,834),26391=>array(49,-74,885,832),26392=>array(33,-71,985,838),26393=>array(90,-65,915,793),26394=>array(72,-69,925,838),26395=>array(73,-36,927,822),26396=>array(36,-62,949,843),26397=>array(72,-68,908,827),26398=>array(42,-60,958,837),26399=>array(60,-70,899,829),26400=>array(33,-72,973,826),26401=>array(39,-85,966,825),26402=>array(85,-39,915,791),26403=>array(41,-72,952,828),26404=>array(65,-77,893,797),26405=>array(61,-66,941,833),26406=>array(34,-61,965,836),26407=>array(54,-73,962,834),26408=>array(77,-68,939,826),26409=>array(77,-58,889,826),26410=>array(65,-67,948,838),26411=>array(55,-67,955,839),26412=>array(41,-67,955,827),26413=>array(46,-62,954,829),26414=>array(75,-65,940,829),26415=>array(34,-69,947,815),26416=>array(51,-15,960,813),26417=>array(65,-70,950,828),26418=>array(57,-63,943,830),26419=>array(56,-71,969,830),26420=>array(49,-55,961,840),26421=>array(54,-68,955,777),26422=>array(53,-68,955,787),26423=>array(54,-58,901,830),26424=>array(66,-67,912,826),26425=>array(55,-63,955,830),26426=>array(54,-73,975,827),26427=>array(58,-66,901,829),26428=>array(54,-56,958,837),26429=>array(45,-62,937,832),26430=>array(48,-62,940,830),26431=>array(37,-54,956,839),26432=>array(53,-66,926,811),26433=>array(53,-64,958,828),26434=>array(42,-64,939,824),26435=>array(39,-65,954,836),26436=>array(42,-63,947,833),26437=>array(51,-61,953,835),26438=>array(39,-58,963,830),26439=>array(33,-62,956,831),26440=>array(37,-68,971,823),26441=>array(43,-69,950,831),26442=>array(43,-67,892,827),26443=>array(61,-63,959,833),26444=>array(33,-67,961,830),26445=>array(55,-68,955,829),26446=>array(51,-70,960,831),26447=>array(64,-62,950,827),26448=>array(40,-75,951,824),26449=>array(44,-71,951,829),26450=>array(44,-71,914,823),26451=>array(32,-69,917,834),26452=>array(47,-71,930,823),26453=>array(34,-64,976,833),26454=>array(43,-72,975,827),26455=>array(40,-67,954,837),26456=>array(47,-76,924,785),26457=>array(39,-70,961,830),26458=>array(50,-59,956,838),26459=>array(49,-70,902,828),26460=>array(49,-70,948,828),26461=>array(42,-64,959,830),26462=>array(39,-58,940,830),26463=>array(71,-67,950,833),26464=>array(39,-58,942,830),26465=>array(40,-65,956,827),26466=>array(44,-23,956,822),26467=>array(51,-58,912,830),26468=>array(51,-58,956,830),26469=>array(49,-57,951,830),26470=>array(47,-66,948,835),26471=>array(46,-59,931,833),26472=>array(22,-68,902,826),26473=>array(21,-62,890,825),26474=>array(51,-58,950,831),26475=>array(47,-62,954,835),26476=>array(41,-61,969,836),26477=>array(40,-62,962,832),26478=>array(47,-62,950,839),26479=>array(41,-63,959,835),26480=>array(46,-73,943,825),26481=>array(50,-71,960,831),26482=>array(31,-64,978,787),26483=>array(44,-65,956,832),26484=>array(54,-69,966,838),26485=>array(40,-68,948,837),26486=>array(44,-58,963,837),26487=>array(44,-68,967,825),26488=>array(49,-77,964,824),26489=>array(60,-69,962,829),26490=>array(39,-61,956,832),26491=>array(39,-61,959,832),26492=>array(51,-64,943,830),26493=>array(55,-70,950,826),26494=>array(39,-62,959,833),26495=>array(31,-73,966,823),26496=>array(42,-55,973,803),26497=>array(45,-73,972,829),26498=>array(71,-71,886,819),26499=>array(50,-75,903,822),26500=>array(45,-61,919,842),26501=>array(51,-68,953,830),26502=>array(39,-61,954,833),26503=>array(37,-70,968,826),26504=>array(58,-55,973,809),26505=>array(51,-58,961,830),26506=>array(46,-61,905,842),26507=>array(51,-58,941,830),26508=>array(42,-64,955,824),26509=>array(42,-59,963,835),26510=>array(36,-69,975,828),26511=>array(47,-65,970,835),26512=>array(41,-68,942,831),26513=>array(40,-61,964,833),26514=>array(47,-62,967,833),26515=>array(32,-59,956,842),26516=>array(55,-73,970,833),26517=>array(48,-62,959,836),26518=>array(48,-70,957,833),26519=>array(30,-69,954,829),26520=>array(42,-64,908,835),26521=>array(38,-58,968,839),26522=>array(57,-68,965,843),26523=>array(33,-66,968,823),26524=>array(48,-67,960,788),26525=>array(48,-64,965,834),26526=>array(24,-69,968,822),26527=>array(54,-80,954,830),26528=>array(39,-64,954,837),26529=>array(51,-65,948,830),26530=>array(31,-68,931,822),26531=>array(32,-76,956,824),26532=>array(40,-68,954,830),26533=>array(20,-67,903,820),26534=>array(51,-66,937,830),26535=>array(19,-73,928,823),26536=>array(23,-72,950,820),26537=>array(48,-74,950,820),26538=>array(41,-63,960,831),26539=>array(15,-58,937,830),26540=>array(42,-66,955,832),26541=>array(39,-51,944,832),26542=>array(55,-70,954,829),26543=>array(52,-62,956,836),26544=>array(42,-63,954,833),26545=>array(43,-62,964,852),26546=>array(42,-55,969,856),26547=>array(38,-68,965,829),26548=>array(51,-62,917,830),26549=>array(41,-67,950,827),26550=>array(47,-66,964,827),26551=>array(51,-58,934,832),26552=>array(51,-58,925,841),26553=>array(51,-58,951,830),26554=>array(42,-69,953,828),26555=>array(37,-62,964,829),26556=>array(40,-48,965,823),26557=>array(26,-54,950,827),26558=>array(48,-72,950,829),26559=>array(7,-66,968,829),26560=>array(45,-73,957,830),26561=>array(32,-62,958,835),26562=>array(51,-77,963,816),26563=>array(39,-80,957,827),26564=>array(46,-58,943,828),26565=>array(39,-55,963,840),26566=>array(51,-58,964,830),26567=>array(51,-71,976,822),26568=>array(51,-72,958,824),26569=>array(42,-69,965,825),26570=>array(34,-66,984,833),26571=>array(50,-70,968,822),26572=>array(49,-66,895,827),26573=>array(47,-75,961,823),26574=>array(51,-63,957,830),26575=>array(45,-62,896,846),26576=>array(44,-69,956,835),26577=>array(40,-65,953,827),26578=>array(45,-61,966,830),26579=>array(51,-66,956,835),26580=>array(48,-67,947,788),26581=>array(58,-67,917,825),26582=>array(32,-66,895,829),26583=>array(33,-68,948,833),26584=>array(58,-67,942,825),26585=>array(40,-64,898,833),26586=>array(37,-66,899,835),26587=>array(39,-69,896,825),26588=>array(40,-60,946,830),26589=>array(51,-66,945,836),26590=>array(51,-66,950,839),26591=>array(37,-65,967,832),26592=>array(26,-62,922,836),26593=>array(26,-69,981,827),26594=>array(51,-58,945,830),26595=>array(36,-81,957,822),26596=>array(51,-58,961,830),26597=>array(50,-12,951,826),26598=>array(58,-68,958,826),26599=>array(51,-59,952,830),26600=>array(48,-66,959,850),26601=>array(35,-65,952,824),26602=>array(50,-79,918,820),26603=>array(44,-71,914,838),26604=>array(55,-61,932,838),26605=>array(51,-77,962,826),26606=>array(51,-65,933,832),26607=>array(51,-61,953,830),26608=>array(64,-63,945,839),26609=>array(41,-67,957,839),26610=>array(43,-63,957,830),26611=>array(34,-61,921,837),26612=>array(44,-68,959,825),26613=>array(35,-60,956,832),26614=>array(50,-66,895,827),26615=>array(33,-55,964,836),26616=>array(48,-66,956,827),26617=>array(45,-66,934,832),26618=>array(50,-68,890,827),26619=>array(50,-12,952,826),26620=>array(36,-73,949,828),26621=>array(27,-75,947,817),26622=>array(27,-75,924,817),26623=>array(40,-64,949,827),26624=>array(43,-67,955,834),26625=>array(46,-61,905,837),26626=>array(46,-64,954,831),26627=>array(43,-76,945,834),26628=>array(60,-65,957,820),26629=>array(25,-65,965,829),26630=>array(38,-72,958,834),26631=>array(21,-59,940,833),26632=>array(17,-71,933,825),26633=>array(20,-71,917,817),26634=>array(17,-69,930,820),26635=>array(25,-60,942,833),26636=>array(21,-72,918,820),26637=>array(21,-68,951,827),26638=>array(21,-74,950,816),26639=>array(32,-57,925,833),26640=>array(32,-63,964,844),26641=>array(20,-71,929,818),26642=>array(58,-65,927,845),26643=>array(37,-65,948,826),26644=>array(56,-64,962,836),26645=>array(63,-68,953,823),26646=>array(54,-62,957,833),26647=>array(60,-65,957,788),26648=>array(63,-71,933,835),26649=>array(45,-66,961,842),26650=>array(38,-69,969,833),26651=>array(34,-65,966,835),26652=>array(39,-67,964,830),26653=>array(34,-64,943,832),26654=>array(56,-64,962,811),26655=>array(38,-63,948,845),26656=>array(45,-67,961,844),26657=>array(37,-74,963,822),26658=>array(39,-64,957,831),26659=>array(39,-64,965,843),26660=>array(32,-65,981,837),26661=>array(52,-65,954,841),26662=>array(39,-70,908,832),26663=>array(33,-64,961,836),26664=>array(32,-70,971,833),26665=>array(51,-58,909,830),26666=>array(28,-63,961,836),26667=>array(51,-68,930,830),26668=>array(53,-67,955,826),26669=>array(38,-68,951,828),26670=>array(53,-70,954,826),26671=>array(38,-68,948,826),26672=>array(29,-64,956,832),26673=>array(33,-77,955,825),26674=>array(36,-65,952,833),26675=>array(45,-68,954,826),26676=>array(38,-63,962,833),26677=>array(36,-67,908,830),26678=>array(17,-62,895,831),26679=>array(17,-61,924,831),26680=>array(33,-67,949,825),26681=>array(51,-71,957,820),26682=>array(44,-68,942,829),26683=>array(33,-58,971,839),26684=>array(44,-65,968,835),26685=>array(50,-59,957,839),26686=>array(39,-77,951,834),26687=>array(44,-66,991,842),26688=>array(54,-67,960,841),26689=>array(39,-68,956,835),26690=>array(39,-66,944,827),26691=>array(39,-72,945,828),26692=>array(33,-68,966,832),26693=>array(40,-65,967,844),26694=>array(30,-69,941,826),26695=>array(63,-65,963,844),26696=>array(63,-65,963,838),26697=>array(39,-60,956,845),26698=>array(50,-48,948,827),26699=>array(33,-71,971,832),26700=>array(52,-67,957,831),26701=>array(51,-67,932,830),26702=>array(51,-58,950,830),26703=>array(31,-64,957,832),26704=>array(46,-65,895,830),26705=>array(53,-65,958,788),26706=>array(52,-63,957,836),26707=>array(39,-65,954,827),26708=>array(38,-62,939,837),26709=>array(54,-74,898,821),26710=>array(54,-74,972,857),26711=>array(54,-74,964,821),26712=>array(50,-74,898,837),26713=>array(51,-65,946,833),26714=>array(45,-75,945,839),26715=>array(36,-66,946,836),26716=>array(54,-74,959,821),26717=>array(37,-66,949,835),26718=>array(36,-74,957,821),26719=>array(22,-71,933,826),26720=>array(18,-67,922,824),26721=>array(17,-74,938,821),26722=>array(20,-81,921,816),26723=>array(51,-60,935,830),26724=>array(26,-63,932,826),26725=>array(36,-53,966,844),26726=>array(25,-75,929,817),26727=>array(25,-78,959,833),26728=>array(27,-61,949,840),26729=>array(24,-69,923,833),26730=>array(44,-68,938,827),26731=>array(37,-69,972,829),26732=>array(48,-61,970,836),26733=>array(26,-72,966,832),26734=>array(41,-70,954,829),26735=>array(44,-65,951,827),26736=>array(43,-65,961,829),26737=>array(41,-68,953,826),26738=>array(33,-64,953,837),26739=>array(19,-73,979,834),26740=>array(51,-76,955,830),26741=>array(49,-74,953,826),26742=>array(42,-71,902,827),26743=>array(51,-63,924,844),26744=>array(44,-71,953,837),26745=>array(48,-66,977,848),26746=>array(35,-67,965,833),26747=>array(46,-73,976,821),26748=>array(36,-65,965,826),26749=>array(56,-23,960,824),26750=>array(51,-72,956,830),26751=>array(51,-62,933,830),26752=>array(46,-67,972,832),26753=>array(53,-68,956,808),26754=>array(50,-65,961,833),26755=>array(41,-66,960,830),26756=>array(32,-62,945,832),26757=>array(46,-71,953,843),26758=>array(38,-68,951,836),26759=>array(49,-65,961,829),26760=>array(31,-62,920,843),26761=>array(41,-69,953,826),26762=>array(39,-62,977,832),26763=>array(41,-71,897,824),26764=>array(48,-69,977,826),26765=>array(33,-67,935,842),26766=>array(39,-67,945,848),26767=>array(51,-67,934,833),26768=>array(32,-64,954,831),26769=>array(34,-76,970,821),26770=>array(42,-69,964,828),26771=>array(38,-70,956,837),26772=>array(28,-67,965,840),26773=>array(21,-67,970,833),26774=>array(37,-82,956,824),26775=>array(35,-68,956,829),26776=>array(36,-62,958,833),26777=>array(50,-70,911,827),26778=>array(50,-68,963,848),26779=>array(34,-68,962,824),26780=>array(30,-69,979,828),26781=>array(42,-71,981,839),26782=>array(45,-65,966,827),26783=>array(63,-68,932,847),26784=>array(51,-64,913,830),26785=>array(40,-72,962,838),26786=>array(44,-63,915,835),26787=>array(41,-70,967,825),26788=>array(47,-68,975,827),26789=>array(45,-71,957,838),26790=>array(49,-59,947,828),26791=>array(47,-62,948,835),26792=>array(41,-68,950,823),26793=>array(44,-64,952,828),26794=>array(43,-67,951,823),26795=>array(47,-69,968,830),26796=>array(42,-68,953,825),26797=>array(51,-73,951,835),26798=>array(42,-66,911,830),26799=>array(44,-70,927,839),26800=>array(40,-67,961,832),26801=>array(36,-54,913,835),26802=>array(44,-61,961,831),26803=>array(51,-70,957,830),26804=>array(30,-76,974,827),26805=>array(41,-79,943,824),26806=>array(31,-64,971,832),26807=>array(29,-62,971,839),26808=>array(36,-65,918,835),26809=>array(51,-58,954,830),26810=>array(46,-58,943,833),26811=>array(33,-65,950,836),26812=>array(33,-64,952,830),26813=>array(36,-54,972,835),26814=>array(27,-60,959,835),26815=>array(54,-55,971,835),26816=>array(24,-60,934,832),26817=>array(36,-64,968,844),26818=>array(23,-70,947,819),26819=>array(50,-67,967,813),26820=>array(39,-68,969,842),26821=>array(24,-72,970,824),26822=>array(30,-70,953,839),26823=>array(48,-68,959,824),26824=>array(43,-68,952,832),26825=>array(58,-71,922,838),26826=>array(72,-71,944,835),26827=>array(29,-70,947,827),26828=>array(41,-70,977,826),26829=>array(51,-58,946,830),26830=>array(51,-71,972,828),26831=>array(33,-71,973,825),26832=>array(42,-59,964,843),26833=>array(48,-73,954,824),26834=>array(27,-68,962,838),26835=>array(42,-72,950,841),26836=>array(39,-70,961,831),26837=>array(39,-70,954,823),26838=>array(37,-66,984,832),26839=>array(48,-65,966,834),26840=>array(39,-65,968,830),26841=>array(21,-66,979,844),26842=>array(57,-72,912,822),26843=>array(36,-75,932,845),26844=>array(41,-71,973,833),26845=>array(42,-73,903,826),26846=>array(42,-72,898,826),26847=>array(50,-64,973,835),26848=>array(54,-67,967,836),26849=>array(40,-72,916,824),26850=>array(37,-68,898,824),26851=>array(39,-70,965,832),26852=>array(51,-72,960,833),26853=>array(39,-69,967,826),26854=>array(43,-67,951,826),26855=>array(39,-70,948,840),26856=>array(44,-53,975,848),26857=>array(36,-75,897,825),26858=>array(36,-59,971,845),26859=>array(32,-58,964,841),26860=>array(30,-64,973,843),26861=>array(32,-68,968,839),26862=>array(30,-69,970,833),26863=>array(52,-70,963,834),26864=>array(38,-64,957,830),26865=>array(39,-67,972,832),26866=>array(22,-68,939,836),26867=>array(27,-71,975,827),26868=>array(40,-74,970,827),26869=>array(35,-70,968,822),26870=>array(33,-67,969,831),26871=>array(36,-68,970,824),26872=>array(42,-70,961,783),26873=>array(39,-70,956,835),26874=>array(42,-64,921,829),26875=>array(45,-62,983,830),26876=>array(32,-61,967,831),26877=>array(46,-70,963,826),26878=>array(44,-56,954,829),26879=>array(26,-77,951,835),26880=>array(34,-64,962,834),26881=>array(31,-62,952,833),26882=>array(31,-65,972,829),26883=>array(31,-62,957,837),26884=>array(39,-73,954,832),26885=>array(21,-75,927,817),26886=>array(51,-71,913,824),26887=>array(42,-78,960,827),26888=>array(36,-70,902,844),26889=>array(39,-65,964,841),26890=>array(48,-71,955,838),26891=>array(35,-67,967,835),26892=>array(51,-58,954,830),26893=>array(29,-73,954,835),26894=>array(37,-71,952,836),26895=>array(51,-58,964,830),26896=>array(35,-68,951,833),26897=>array(48,-79,954,835),26898=>array(36,-64,966,829),26899=>array(37,-67,980,830),26900=>array(48,-71,930,832),26901=>array(39,-69,967,826),26902=>array(29,-67,946,840),26903=>array(41,-62,976,843),26904=>array(29,-37,983,831),26905=>array(41,-68,900,832),26906=>array(31,-65,918,832),26907=>array(41,-62,958,834),26908=>array(33,-62,959,838),26909=>array(38,-71,986,826),26910=>array(38,-71,986,830),26911=>array(18,-76,954,815),26912=>array(32,-71,944,827),26913=>array(21,-70,918,833),26914=>array(18,-76,886,815),26915=>array(33,-72,955,833),26916=>array(34,-63,920,823),26917=>array(44,-62,905,830),26918=>array(27,-63,950,843),26919=>array(18,-76,977,828),26920=>array(27,-70,951,829),26921=>array(18,-76,956,856),26922=>array(42,-67,954,825),26923=>array(18,-76,937,837),26924=>array(33,-76,953,848),26925=>array(10,-63,922,830),26926=>array(18,-76,942,835),26927=>array(32,-64,950,837),26928=>array(28,-65,941,826),26929=>array(18,-76,970,843),26930=>array(36,-70,955,835),26931=>array(33,-55,973,838),26932=>array(31,-71,975,837),26933=>array(26,-73,965,826),26934=>array(39,-70,969,825),26935=>array(38,-69,962,828),26936=>array(19,-55,961,852),26937=>array(39,-70,940,827),26938=>array(18,-76,981,825),26939=>array(39,-67,950,826),26940=>array(26,-70,951,830),26941=>array(36,-67,970,831),26942=>array(18,-76,951,833),26943=>array(30,-64,978,835),26944=>array(37,-68,910,824),26945=>array(39,-71,971,827),26946=>array(30,-63,962,831),26947=>array(30,-61,943,833),26948=>array(33,-70,928,824),26949=>array(30,-73,948,823),26950=>array(30,-70,952,823),26951=>array(18,-76,919,815),26952=>array(44,-72,965,824),26953=>array(42,-69,954,826),26954=>array(47,-72,944,817),26955=>array(38,-69,922,826),26956=>array(41,-72,955,836),26957=>array(35,-70,966,813),26958=>array(30,-71,951,823),26959=>array(38,-68,980,829),26960=>array(18,-76,969,815),26961=>array(35,-73,972,832),26962=>array(39,-64,967,830),26963=>array(47,-64,971,836),26964=>array(39,-70,954,828),26965=>array(28,-76,927,845),26966=>array(21,-63,914,828),26967=>array(27,-59,970,840),26968=>array(36,-69,968,830),26969=>array(33,-70,961,830),26970=>array(48,-69,954,827),26971=>array(44,-60,953,834),26972=>array(39,-71,930,827),26973=>array(39,-70,971,836),26974=>array(39,-70,942,818),26975=>array(32,-71,952,836),26976=>array(33,-67,951,830),26977=>array(33,-76,950,818),26978=>array(44,-62,967,843),26979=>array(49,-67,924,829),26980=>array(26,-76,968,850),26981=>array(31,-60,971,848),26982=>array(41,-64,957,854),26983=>array(18,-76,988,836),26984=>array(37,-74,962,836),26985=>array(33,-69,967,826),26986=>array(39,-62,973,834),26987=>array(39,-70,957,818),26988=>array(37,-70,903,823),26989=>array(52,-69,965,829),26990=>array(39,-70,949,829),26991=>array(35,-64,961,839),26992=>array(37,-76,979,824),26993=>array(34,-71,969,831),26994=>array(24,-64,968,829),26995=>array(34,-64,975,832),26996=>array(42,-70,932,839),26997=>array(39,-68,956,824),26998=>array(44,-68,968,829),26999=>array(42,-70,956,827),27000=>array(34,-66,986,827),27001=>array(39,-70,957,818),27002=>array(36,-70,961,825),27003=>array(39,-65,958,834),27004=>array(18,-52,932,838),27005=>array(50,-64,950,847),27006=>array(39,-75,966,841),27007=>array(27,-67,972,832),27008=>array(37,-68,914,825),27009=>array(39,-70,940,835),27010=>array(30,-70,966,824),27011=>array(31,-71,960,823),27012=>array(21,-64,934,830),27013=>array(44,-76,967,820),27014=>array(30,-68,971,849),27015=>array(29,-76,934,822),27016=>array(16,-68,885,825),27017=>array(27,-75,961,816),27018=>array(28,-67,917,833),27019=>array(27,-67,916,829),27020=>array(28,-72,970,829),27021=>array(30,-67,912,824),27022=>array(33,-62,967,832),27023=>array(33,-64,954,859),27024=>array(28,-71,967,827),27025=>array(31,-70,960,833),27026=>array(24,-64,917,829),27027=>array(31,-68,958,833),27028=>array(46,-61,939,835),27029=>array(33,-64,969,830),27030=>array(46,-67,970,827),27031=>array(33,-70,955,826),27032=>array(29,-66,971,842),27033=>array(38,-68,966,833),27034=>array(39,-70,967,832),27035=>array(30,-68,973,839),27036=>array(54,-70,928,833),27037=>array(30,-73,967,835),27038=>array(33,-70,968,825),27039=>array(24,-64,941,845),27040=>array(39,-72,946,831),27041=>array(30,-69,951,833),27042=>array(24,-64,967,844),27043=>array(27,-69,951,837),27044=>array(28,-70,980,829),27045=>array(38,-65,960,830),27046=>array(49,-56,968,855),27047=>array(38,-74,939,817),27048=>array(47,-69,942,838),27049=>array(26,-69,975,826),27050=>array(31,-71,923,827),27051=>array(33,-68,965,844),27052=>array(40,-74,970,826),27053=>array(28,-65,965,849),27054=>array(61,-67,948,832),27055=>array(31,-60,954,833),27056=>array(34,-68,956,832),27057=>array(19,-66,972,832),27058=>array(39,-70,965,818),27059=>array(36,-65,967,840),27060=>array(53,-66,913,834),27061=>array(31,-70,956,828),27062=>array(37,-69,951,838),27063=>array(41,-67,944,841),27064=>array(18,-70,964,823),27065=>array(26,-70,965,827),27066=>array(37,-64,971,838),27067=>array(55,-62,930,845),27068=>array(32,-64,960,833),27069=>array(32,-75,972,825),27070=>array(39,-70,947,818),27071=>array(39,-70,962,829),27072=>array(32,-62,968,831),27073=>array(39,-70,940,844),27074=>array(23,-70,963,823),27075=>array(36,-60,969,845),27076=>array(39,-70,915,822),27077=>array(43,-69,927,823),27078=>array(42,-69,945,827),27079=>array(33,-78,961,833),27080=>array(24,-64,959,829),27081=>array(26,-73,973,836),27082=>array(34,-67,970,845),27083=>array(40,-68,954,828),27084=>array(28,-72,959,843),27085=>array(31,-70,960,851),27086=>array(39,-70,951,847),27087=>array(25,-67,952,840),27088=>array(39,-70,948,844),27089=>array(30,-68,976,787),27090=>array(40,-68,950,843),27091=>array(39,-70,969,818),27092=>array(33,-67,987,849),27093=>array(35,-70,968,835),27094=>array(43,-77,968,844),27095=>array(49,-61,926,834),27096=>array(35,-62,969,843),27097=>array(34,-69,950,836),27098=>array(33,-70,923,818),27099=>array(13,-57,922,845),27100=>array(19,-76,953,843),27101=>array(39,-70,942,844),27102=>array(13,-57,958,845),27103=>array(21,-64,917,842),27104=>array(21,-65,911,825),27105=>array(13,-67,964,845),27106=>array(20,-73,916,823),27107=>array(24,-74,951,845),27108=>array(32,-71,976,825),27109=>array(37,-64,965,830),27110=>array(38,-73,959,845),27111=>array(31,-64,973,837),27112=>array(29,-62,955,836),27113=>array(29,-60,969,811),27114=>array(26,-67,966,845),27115=>array(43,-66,956,835),27116=>array(33,-78,988,835),27117=>array(33,-70,964,839),27118=>array(34,-72,989,850),27119=>array(13,-65,953,845),27120=>array(13,-68,959,845),27121=>array(30,-67,968,826),27122=>array(27,-71,962,842),27123=>array(53,-65,963,843),27124=>array(34,-65,969,831),27125=>array(13,-57,978,845),27126=>array(22,-71,906,831),27127=>array(31,-73,987,829),27128=>array(37,-70,983,824),27129=>array(37,-64,952,845),27130=>array(28,-66,966,848),27131=>array(33,-58,971,839),27132=>array(38,-71,986,826),27133=>array(44,-71,948,827),27134=>array(30,-72,979,828),27135=>array(26,-65,953,828),27136=>array(45,-67,960,847),27137=>array(46,-64,976,835),27138=>array(60,-64,959,847),27139=>array(21,-74,939,826),27140=>array(21,-71,990,826),27141=>array(39,-64,964,829),27142=>array(30,-76,945,829),27143=>array(27,-73,989,824),27144=>array(36,-70,968,835),27145=>array(37,-80,968,826),27146=>array(28,-66,964,836),27147=>array(34,-67,961,827),27148=>array(26,-68,967,829),27149=>array(30,-84,955,830),27150=>array(26,-65,942,843),27151=>array(30,-69,954,826),27152=>array(26,-65,958,839),27153=>array(36,-61,985,836),27154=>array(26,-65,945,830),27155=>array(39,-69,949,831),27156=>array(36,-67,970,842),27157=>array(30,-77,973,832),27158=>array(46,-72,961,853),27159=>array(43,-68,956,826),27160=>array(32,-70,956,824),27161=>array(33,-70,957,818),27162=>array(33,-70,959,838),27163=>array(44,-61,971,833),27164=>array(33,-79,961,841),27165=>array(39,-71,962,828),27166=>array(46,-61,957,830),27167=>array(41,-67,944,826),27168=>array(30,-69,953,826),27169=>array(31,-69,952,828),27170=>array(33,-70,959,847),27171=>array(35,-62,978,848),27172=>array(6,-73,993,824),27173=>array(38,-73,970,825),27174=>array(40,-67,958,831),27175=>array(35,-76,976,828),27176=>array(39,-68,955,832),27177=>array(25,-72,957,832),27178=>array(26,-72,944,822),27179=>array(37,-62,964,832),27180=>array(33,-70,964,831),27181=>array(33,-60,972,831),27182=>array(33,-70,957,818),27183=>array(18,-72,929,819),27184=>array(36,-63,957,838),27185=>array(22,-74,953,832),27186=>array(34,-55,966,852),27187=>array(32,-66,955,830),27188=>array(34,-71,965,831),27189=>array(44,-67,969,836),27190=>array(27,-70,948,818),27191=>array(27,-67,950,844),27192=>array(48,-68,971,833),27193=>array(39,-71,953,825),27194=>array(38,-68,954,832),27195=>array(39,-81,958,826),27196=>array(39,-77,953,820),27197=>array(35,-65,957,851),27198=>array(30,-66,977,830),27199=>array(33,-70,954,828),27200=>array(44,-64,984,851),27201=>array(37,-69,956,828),27202=>array(35,-76,974,851),27203=>array(24,-70,959,843),27204=>array(34,-69,960,835),27205=>array(21,-70,954,845),27206=>array(46,-74,961,831),27207=>array(31,-67,963,837),27208=>array(36,-69,962,830),27209=>array(33,-80,956,825),27210=>array(34,-71,946,818),27211=>array(36,-62,962,836),27212=>array(33,-70,911,818),27213=>array(39,-68,897,822),27214=>array(38,-70,963,826),27215=>array(36,-71,951,838),27216=>array(44,-65,972,832),27217=>array(34,-68,964,826),27218=>array(36,-70,954,838),27219=>array(36,-72,948,838),27220=>array(36,-79,969,839),27221=>array(44,-58,951,836),27222=>array(43,-68,972,825),27223=>array(31,-68,948,839),27224=>array(36,-61,923,828),27225=>array(27,-69,951,830),27226=>array(39,-70,952,829),27227=>array(21,-68,972,828),27228=>array(47,-64,966,816),27229=>array(40,-68,953,826),27230=>array(35,-65,963,827),27231=>array(36,-68,963,829),27232=>array(37,-80,956,837),27233=>array(38,-70,964,837),27234=>array(37,-72,948,842),27235=>array(37,-72,957,847),27236=>array(44,-67,970,838),27237=>array(47,-69,952,821),27238=>array(32,-58,958,847),27239=>array(45,-61,917,849),27240=>array(33,-74,962,830),27241=>array(36,-67,958,826),27242=>array(38,-79,964,826),27243=>array(47,-70,956,827),27244=>array(37,-72,957,819),27245=>array(40,-72,957,824),27246=>array(53,-72,913,834),27247=>array(39,-70,944,824),27248=>array(37,-72,948,863),27249=>array(24,-69,914,829),27250=>array(37,-72,933,833),27251=>array(30,-55,967,821),27252=>array(30,-71,956,830),27253=>array(37,-72,979,832),27254=>array(43,-74,964,821),27255=>array(32,-73,962,838),27256=>array(43,-73,959,818),27257=>array(21,-73,928,817),27258=>array(37,-72,911,819),27259=>array(29,-72,966,819),27260=>array(15,-63,980,837),27261=>array(41,-76,973,833),27262=>array(41,-66,974,828),27263=>array(26,-58,955,832),27264=>array(29,-61,956,841),27265=>array(46,-65,991,855),27266=>array(37,-71,966,828),27267=>array(50,-76,971,819),27268=>array(31,-66,974,844),27269=>array(24,-72,964,823),27270=>array(39,-73,943,836),27271=>array(36,-65,960,834),27272=>array(37,-72,958,819),27273=>array(37,-65,936,826),27274=>array(36,-66,980,829),27275=>array(37,-72,981,820),27276=>array(43,-65,970,829),27277=>array(31,-76,970,829),27278=>array(22,-65,971,851),27279=>array(37,-72,972,833),27280=>array(21,-70,949,838),27281=>array(50,-68,933,826),27282=>array(42,-75,967,826),27283=>array(27,-71,980,834),27284=>array(46,-59,924,839),27285=>array(51,-76,966,824),27286=>array(27,-69,974,834),27287=>array(33,-54,973,840),27288=>array(33,-72,965,849),27289=>array(35,-76,923,815),27290=>array(35,-74,976,827),27291=>array(31,-71,977,826),27292=>array(32,-64,974,861),27293=>array(41,-78,970,819),27294=>array(27,-66,961,837),27295=>array(29,-83,962,823),27296=>array(34,-65,954,834),27297=>array(34,-70,954,826),27298=>array(33,-68,969,858),27299=>array(33,-63,959,838),27300=>array(35,-71,980,827),27301=>array(29,-73,964,842),27302=>array(41,-70,919,826),27303=>array(33,-70,974,823),27304=>array(33,-74,960,829),27305=>array(22,-64,921,857),27306=>array(42,-64,973,849),27307=>array(15,-63,943,830),27308=>array(29,-61,965,836),27309=>array(40,-72,981,828),27310=>array(40,-65,950,833),27311=>array(38,-56,970,838),27312=>array(35,-68,936,845),27313=>array(25,-56,943,832),27314=>array(35,-68,917,832),27315=>array(40,-65,966,846),27316=>array(34,-68,974,827),27317=>array(35,-69,942,824),27318=>array(38,-71,983,834),27319=>array(36,-70,959,821),27320=>array(37,-63,952,839),27321=>array(38,-65,965,842),27322=>array(45,-64,969,842),27323=>array(24,-62,957,839),27324=>array(27,-69,953,825),27325=>array(36,-61,967,831),27326=>array(105,-51,918,822),27327=>array(34,-68,958,829),27328=>array(36,-69,974,840),27329=>array(26,-66,945,839),27330=>array(36,-50,957,840),27331=>array(44,-66,954,835),27332=>array(44,-71,977,835),27333=>array(36,-71,975,839),27334=>array(48,-68,977,824),27335=>array(32,-75,963,825),27336=>array(31,-62,984,847),27337=>array(27,-70,953,826),27338=>array(31,-71,913,824),27339=>array(42,-70,958,840),27340=>array(44,-69,958,832),27341=>array(40,-75,961,831),27342=>array(35,-71,957,849),27343=>array(28,-64,984,828),27344=>array(40,-65,969,813),27345=>array(43,-66,935,827),27346=>array(30,-73,973,831),27347=>array(30,-61,974,849),27348=>array(42,-65,958,831),27349=>array(42,-72,967,831),27350=>array(34,-62,965,836),27351=>array(42,-67,958,833),27352=>array(42,-62,961,831),27353=>array(44,-70,949,824),27354=>array(39,-61,904,833),27355=>array(47,-66,959,840),27356=>array(43,-59,973,843),27357=>array(30,-70,971,835),27358=>array(33,-66,972,841),27359=>array(32,-71,969,841),27360=>array(37,-71,986,838),27361=>array(58,-72,950,833),27362=>array(20,-72,972,837),27363=>array(22,-72,974,841),27364=>array(41,-68,955,841),27365=>array(33,-71,959,847),27366=>array(29,-68,970,841),27367=>array(34,-65,957,840),27368=>array(36,-71,962,833),27369=>array(44,-65,920,833),27370=>array(32,-65,955,832),27371=>array(41,-68,959,831),27372=>array(43,-62,971,843),27373=>array(30,-62,965,831),27374=>array(36,-67,951,827),27375=>array(31,-68,981,842),27376=>array(30,-78,980,841),27377=>array(43,-65,967,840),27378=>array(33,-65,979,839),27379=>array(35,-58,969,855),27380=>array(19,-72,970,843),27381=>array(27,-66,973,840),27382=>array(32,-62,960,831),27383=>array(16,-45,965,851),27384=>array(38,-72,986,835),27385=>array(40,-68,957,830),27386=>array(38,-61,936,832),27387=>array(45,-62,958,826),27388=>array(28,-78,978,832),27389=>array(48,-68,956,813),27390=>array(31,-64,969,829),27391=>array(32,-67,951,835),27392=>array(33,-70,977,837),27393=>array(22,-70,987,832),27394=>array(31,-69,959,828),27395=>array(34,-58,964,853),27396=>array(35,-65,909,836),27397=>array(31,-69,973,827),27398=>array(21,-66,969,836),27399=>array(31,-66,955,827),27400=>array(45,-64,944,838),27401=>array(40,-62,962,835),27402=>array(38,-71,952,830),27403=>array(33,-68,960,823),27404=>array(33,-68,970,838),27405=>array(28,-68,937,832),27406=>array(44,-71,964,842),27407=>array(34,-67,967,830),27408=>array(39,-73,960,828),27409=>array(33,-70,970,831),27410=>array(40,-74,961,844),27411=>array(33,-78,966,836),27412=>array(33,-65,970,828),27413=>array(33,-70,987,828),27414=>array(40,-63,961,841),27415=>array(39,-65,942,830),27416=>array(47,-68,933,827),27417=>array(49,-62,959,831),27418=>array(35,-68,978,846),27419=>array(38,-71,932,835),27420=>array(40,-65,975,839),27421=>array(56,-67,964,843),27422=>array(49,-64,968,828),27423=>array(36,-69,984,835),27424=>array(51,-69,950,842),27425=>array(49,-66,953,822),27426=>array(20,-64,948,839),27427=>array(48,-72,962,831),27428=>array(41,-75,952,819),27429=>array(106,-75,968,829),27430=>array(35,-75,968,838),27431=>array(101,-66,953,833),27432=>array(56,-73,971,829),27433=>array(51,-62,947,822),27434=>array(90,-68,956,837),27435=>array(66,-68,950,847),27436=>array(44,-68,971,848),27437=>array(115,-73,961,830),27438=>array(60,-68,971,850),27439=>array(55,-74,967,830),27440=>array(30,-72,959,831),27441=>array(34,-72,959,834),27442=>array(47,-65,969,837),27443=>array(107,-74,962,830),27444=>array(101,-73,959,848),27445=>array(46,-62,970,853),27446=>array(44,-76,964,826),27447=>array(30,-69,963,838),27448=>array(47,-66,967,839),27449=>array(57,-79,975,830),27450=>array(61,-65,968,832),27451=>array(50,-72,958,838),27452=>array(50,-72,969,830),27453=>array(39,-71,977,839),27454=>array(50,-70,954,835),27455=>array(54,-67,968,841),27456=>array(46,-76,983,824),27457=>array(65,-73,985,827),27458=>array(61,-71,975,833),27459=>array(58,-72,972,838),27460=>array(102,-69,969,827),27461=>array(56,-72,977,826),27462=>array(47,-71,964,843),27463=>array(22,-74,968,842),27464=>array(29,-73,973,844),27465=>array(34,-70,970,841),27466=>array(54,-73,963,846),27467=>array(33,-69,967,826),27468=>array(65,-66,959,839),27469=>array(51,-73,970,841),27470=>array(39,-72,967,830),27471=>array(49,-72,961,842),27472=>array(110,-79,961,830),27473=>array(46,-69,977,831),27474=>array(60,-69,971,839),27475=>array(39,-65,963,841),27476=>array(32,-73,983,838),27477=>array(53,-83,972,825),27478=>array(60,-77,970,830),27479=>array(49,-68,975,840),27480=>array(52,-56,953,835),27481=>array(37,-67,964,856),27482=>array(64,-65,983,849),27483=>array(31,-70,983,864),27484=>array(37,-80,972,836),27485=>array(63,-72,971,838),27486=>array(55,-71,967,829),27487=>array(48,-67,969,841),27488=>array(53,-59,969,849),27489=>array(37,-68,962,836),27490=>array(76,-6,931,791),27491=>array(100,-5,920,756),27492=>array(37,-57,949,804),27493=>array(57,-60,932,835),27494=>array(63,-58,942,834),27495=>array(40,-66,956,830),27496=>array(41,-66,952,835),27497=>array(53,-62,962,833),27498=>array(63,-20,919,779),27499=>array(40,-28,953,783),27500=>array(46,-74,942,822),27501=>array(53,-67,951,829),27502=>array(37,-59,957,836),27503=>array(98,-70,938,835),27504=>array(60,-51,920,792),27505=>array(45,-20,956,836),27506=>array(45,-70,940,834),27507=>array(48,-70,943,834),27508=>array(33,-56,961,801),27509=>array(30,-55,955,849),27510=>array(80,-70,939,823),27511=>array(41,-58,944,789),27512=>array(47,-71,930,846),27513=>array(79,-75,921,767),27514=>array(71,-75,815,798),27515=>array(60,-67,959,761),27516=>array(26,-60,916,801),27517=>array(41,-68,955,828),27518=>array(58,-59,921,843),27519=>array(56,-62,972,840),27520=>array(39,-57,967,840),27521=>array(44,-74,950,774),27522=>array(49,-47,957,785),27523=>array(41,-73,964,827),27524=>array(54,-71,966,853),27525=>array(53,-74,952,827),27526=>array(65,-74,951,829),27527=>array(31,-68,913,826),27528=>array(44,-63,951,838),27529=>array(63,-75,921,835),27530=>array(61,-66,964,832),27531=>array(47,-61,965,845),27532=>array(33,-73,954,773),27533=>array(57,-64,953,837),27534=>array(43,-73,961,821),27535=>array(42,-76,950,821),27536=>array(52,-70,968,829),27537=>array(52,-74,960,823),27538=>array(32,-87,910,778),27539=>array(35,-71,948,820),27540=>array(57,-69,975,831),27541=>array(55,-58,949,829),27542=>array(40,-67,954,835),27543=>array(38,-53,968,835),27544=>array(68,-60,952,832),27545=>array(57,-64,958,829),27546=>array(44,-70,939,823),27547=>array(48,-47,947,788),27548=>array(39,-68,982,842),27549=>array(39,-68,974,829),27550=>array(40,-60,958,800),27551=>array(54,-67,970,782),27552=>array(39,-71,971,843),27553=>array(36,-71,930,830),27554=>array(50,-70,954,826),27555=>array(54,-72,952,829),27556=>array(55,-70,963,845),27557=>array(39,-78,953,834),27558=>array(43,-69,946,834),27559=>array(52,-71,978,829),27560=>array(43,-68,970,833),27561=>array(35,-65,976,798),27562=>array(47,-20,954,833),27563=>array(57,-64,953,789),27564=>array(50,-64,941,786),27565=>array(35,-44,965,807),27566=>array(40,-67,977,854),27567=>array(55,-66,960,838),27568=>array(36,-68,963,830),27569=>array(42,-73,954,829),27570=>array(44,-66,946,829),27571=>array(52,-70,948,788),27572=>array(98,-66,959,792),27573=>array(41,-73,964,832),27574=>array(58,-80,958,819),27575=>array(46,-68,952,836),27576=>array(45,-69,976,833),27577=>array(81,-72,972,787),27578=>array(51,-72,967,824),27579=>array(51,-70,963,833),27580=>array(49,-68,964,833),27581=>array(35,-65,976,847),27582=>array(35,-72,960,823),27583=>array(31,-73,969,799),27584=>array(73,-64,962,836),27585=>array(58,-68,958,833),27586=>array(52,-67,944,815),27587=>array(58,-72,973,843),27588=>array(58,-69,963,835),27589=>array(39,-72,963,831),27590=>array(69,-68,958,810),27591=>array(53,-76,974,819),27592=>array(55,-73,963,830),27593=>array(71,-29,951,800),27594=>array(41,-63,976,833),27595=>array(92,-57,935,798),27596=>array(74,-58,926,788),27597=>array(77,-66,931,783),27598=>array(64,-63,933,843),27599=>array(64,-63,939,843),27600=>array(55,-65,952,836),27601=>array(44,-62,967,805),27602=>array(56,-69,944,832),27603=>array(43,-62,964,835),27604=>array(59,-36,956,811),27605=>array(58,-59,908,816),27606=>array(63,-43,951,816),27607=>array(87,-67,965,820),27608=>array(76,-62,969,794),27609=>array(41,-54,941,826),27610=>array(56,-65,956,845),27611=>array(79,-23,944,822),27612=>array(52,-18,971,840),27613=>array(52,-18,971,840),27614=>array(78,-41,947,831),27615=>array(52,-40,954,841),27616=>array(49,-32,956,823),27617=>array(52,-18,971,840),27618=>array(55,-27,961,837),27619=>array(71,-32,949,778),27620=>array(48,-62,956,830),27621=>array(52,-18,971,841),27622=>array(55,-58,956,836),27623=>array(62,-26,965,834),27624=>array(54,-25,954,833),27625=>array(52,-18,971,840),27626=>array(35,-19,931,836),27627=>array(80,-54,933,840),27628=>array(51,-24,969,832),27629=>array(44,-39,954,836),27630=>array(30,-65,964,835),27631=>array(59,-30,967,835),27632=>array(47,-29,958,834),27633=>array(47,-28,958,833),27634=>array(39,-76,955,819),27635=>array(70,-44,970,826),27636=>array(47,-28,958,823),27637=>array(30,-65,933,844),27638=>array(44,-28,972,855),27639=>array(90,-55,961,848),27640=>array(55,-28,959,825),27641=>array(28,-70,972,847),27642=>array(48,-28,960,841),27643=>array(31,-65,962,840),27644=>array(31,-68,963,819),27645=>array(44,-32,971,832),27646=>array(47,-67,960,822),27647=>array(35,-67,967,853),27648=>array(54,-69,966,824),27649=>array(60,-28,972,835),27650=>array(53,-76,958,825),27651=>array(46,-45,962,839),27652=>array(38,-54,960,844),27653=>array(49,-34,959,841),27654=>array(54,-43,974,840),27655=>array(30,-25,928,835),27656=>array(68,-56,946,844),27657=>array(37,-58,964,840),27658=>array(54,-43,974,854),27659=>array(52,-69,971,828),27660=>array(48,-40,978,843),27661=>array(33,-66,966,830),27662=>array(61,-46,961,825),27663=>array(83,-68,934,828),27664=>array(100,-54,907,832),27665=>array(51,-67,950,784),27666=>array(91,-71,936,839),27667=>array(111,-61,951,781),27668=>array(39,-56,966,853),27669=>array(36,-67,957,847),27670=>array(51,-64,965,845),27671=>array(36,-62,963,853),27672=>array(46,-69,966,840),27673=>array(44,-62,965,852),27674=>array(26,-68,959,849),27675=>array(52,-69,962,839),27676=>array(35,-63,959,849),27677=>array(36,-75,960,835),27678=>array(36,-72,960,835),27679=>array(37,-76,962,829),27680=>array(10,-71,933,837),27681=>array(45,-76,961,845),27682=>array(38,-63,943,832),27683=>array(50,-67,959,838),27684=>array(40,-63,979,849),27685=>array(37,-66,968,842),27686=>array(41,-65,972,858),27687=>array(42,-70,958,832),27688=>array(41,-73,961,835),27689=>array(21,-64,938,825),27690=>array(38,-66,968,849),27691=>array(47,-68,957,831),27692=>array(39,-61,974,854),27693=>array(38,-66,966,852),27694=>array(48,-79,963,835),27695=>array(45,-74,959,841),27696=>array(35,-70,964,839),27697=>array(25,-69,955,830),27698=>array(25,-70,955,830),27699=>array(43,-71,971,833),27700=>array(47,-64,953,826),27701=>array(320,-38,602,803),27702=>array(51,-74,958,782),27703=>array(47,-64,953,826),27704=>array(51,-65,957,838),27705=>array(85,-28,958,830),27706=>array(40,-64,962,826),27707=>array(69,-60,921,829),27708=>array(54,-39,945,830),27709=>array(27,-71,967,846),27710=>array(71,-32,962,814),27711=>array(60,-65,966,823),27712=>array(51,-55,941,808),27713=>array(58,-59,962,833),27714=>array(61,-65,938,835),27715=>array(60,-62,977,814),27716=>array(60,-63,942,835),27717=>array(59,-51,937,814),27718=>array(33,-65,961,790),27719=>array(46,-49,920,803),27720=>array(70,-59,896,790),27721=>array(40,-59,956,804),27722=>array(57,-66,967,813),27723=>array(59,-57,912,836),27724=>array(62,-72,910,829),27725=>array(44,-71,975,826),27726=>array(53,-62,959,825),27727=>array(62,-65,960,829),27728=>array(67,-71,919,831),27729=>array(67,-42,930,826),27730=>array(55,-49,958,836),27731=>array(55,-64,954,802),27732=>array(60,-37,967,842),27733=>array(57,-65,898,820),27734=>array(54,-65,954,833),27735=>array(48,-67,948,798),27736=>array(48,-59,933,831),27737=>array(51,-67,957,814),27738=>array(49,-52,948,802),27739=>array(43,-63,975,812),27740=>array(33,-46,945,808),27741=>array(47,-62,947,847),27742=>array(58,-68,948,781),27743=>array(65,-51,940,796),27744=>array(48,-46,959,825),27745=>array(58,-52,943,802),27746=>array(74,-58,945,811),27747=>array(92,-68,957,831),27748=>array(51,-63,899,790),27749=>array(52,-70,977,828),27750=>array(44,-68,963,826),27751=>array(69,-68,964,801),27752=>array(70,-57,900,812),27753=>array(55,-40,911,817),27754=>array(54,-41,944,809),27755=>array(53,-68,951,833),27756=>array(57,-67,964,822),27757=>array(61,-69,905,801),27758=>array(41,-65,904,831),27759=>array(48,-61,951,830),27760=>array(48,-64,962,835),27761=>array(50,-70,957,837),27762=>array(41,-68,955,820),27763=>array(49,-73,972,807),27764=>array(53,-64,944,846),27765=>array(53,-73,945,854),27766=>array(42,-66,962,830),27767=>array(59,-63,941,805),27768=>array(54,-69,949,833),27769=>array(58,-59,900,820),27770=>array(56,-72,970,836),27771=>array(41,-75,951,826),27772=>array(41,-75,951,811),27773=>array(63,-61,962,850),27774=>array(41,-62,955,814),27775=>array(62,-57,950,820),27776=>array(45,-75,931,825),27777=>array(56,-48,947,811),27778=>array(58,-67,950,831),27779=>array(48,-64,962,819),27780=>array(46,-60,946,807),27781=>array(47,-70,948,812),27782=>array(63,-66,951,817),27783=>array(48,-60,951,849),27784=>array(56,-73,946,824),27785=>array(51,-58,952,788),27786=>array(49,-58,973,833),27787=>array(51,-69,960,827),27788=>array(41,-44,963,833),27789=>array(56,-38,939,794),27790=>array(45,-62,961,844),27791=>array(62,-67,926,814),27792=>array(43,-63,960,833),27793=>array(66,-51,947,821),27794=>array(58,-71,953,841),27795=>array(54,-62,962,835),27796=>array(54,-60,944,814),27797=>array(59,-56,926,855),27798=>array(54,-64,914,839),27799=>array(35,-58,976,803),27800=>array(52,-50,964,817),27801=>array(51,-62,968,812),27802=>array(65,-44,966,807),27803=>array(41,-65,942,837),27804=>array(70,-66,953,837),27805=>array(31,-69,969,835),27806=>array(52,-74,939,826),27807=>array(41,-61,903,831),27808=>array(66,-64,959,821),27809=>array(47,-62,959,805),27810=>array(40,-66,973,805),27811=>array(58,-63,920,813),27812=>array(42,-47,929,822),27813=>array(41,-57,916,827),27814=>array(52,-46,948,837),27815=>array(28,-63,967,821),27816=>array(58,-58,937,824),27817=>array(41,-62,892,819),27818=>array(45,-62,874,836),27819=>array(56,-61,980,833),27820=>array(62,-72,984,819),27821=>array(39,-67,947,829),27822=>array(57,-30,957,820),27823=>array(52,-52,967,813),27824=>array(53,-71,951,803),27825=>array(53,-44,951,828),27826=>array(38,-58,953,810),27827=>array(49,-67,952,796),27828=>array(46,-47,978,862),27829=>array(73,-53,947,840),27830=>array(51,-73,956,800),27831=>array(53,-81,961,827),27832=>array(42,-63,915,823),27833=>array(64,-69,903,836),27834=>array(54,-74,900,801),27835=>array(48,-64,959,834),27836=>array(52,-61,896,817),27837=>array(69,-64,956,836),27838=>array(67,-56,946,836),27839=>array(43,-48,936,814),27840=>array(45,-68,891,806),27841=>array(59,-62,965,810),27842=>array(45,-73,894,813),27843=>array(47,-70,896,825),27844=>array(39,-63,953,835),27845=>array(49,-66,897,811),27846=>array(28,-50,976,856),27847=>array(48,-73,909,818),27848=>array(81,-66,984,829),27849=>array(46,-73,960,843),27850=>array(60,-57,875,847),27851=>array(39,-66,968,828),27852=>array(42,-32,972,829),27853=>array(44,-67,968,835),27854=>array(97,-62,955,845),27855=>array(42,-71,915,830),27856=>array(64,-68,918,832),27857=>array(57,-75,907,831),27858=>array(55,-64,975,849),27859=>array(50,-53,958,808),27860=>array(46,-53,947,831),27861=>array(64,-59,945,821),27862=>array(56,-68,924,837),27863=>array(61,-53,909,810),27864=>array(78,-67,931,825),27865=>array(54,-64,952,818),27866=>array(38,-39,960,838),27867=>array(56,-67,963,836),27868=>array(41,-69,958,834),27869=>array(55,-68,952,842),27870=>array(51,-72,910,824),27871=>array(62,-63,953,806),27872=>array(36,-50,969,870),27873=>array(46,-46,968,834),27874=>array(50,-75,961,831),27875=>array(62,-27,956,820),27876=>array(59,-65,960,828),27877=>array(56,-64,957,821),27878=>array(62,-57,973,818),27879=>array(55,-70,960,828),27880=>array(60,-46,939,838),27881=>array(49,-58,958,831),27882=>array(53,-59,914,820),27883=>array(54,-53,949,831),27884=>array(53,-72,972,846),27885=>array(52,-73,948,823),27886=>array(63,-69,967,825),27887=>array(49,-63,951,812),27888=>array(38,-65,963,838),27889=>array(59,-71,983,831),27890=>array(50,-46,922,856),27891=>array(42,-58,980,851),27892=>array(58,-26,988,825),27893=>array(57,-67,964,777),27894=>array(45,-66,929,815),27895=>array(57,-62,929,822),27896=>array(53,-62,910,822),27897=>array(53,-50,955,798),27898=>array(42,-62,933,828),27899=>array(43,-55,893,806),27900=>array(47,-76,949,814),27901=>array(55,-70,948,805),27902=>array(63,-58,926,799),27903=>array(64,-72,964,812),27904=>array(51,-69,954,838),27905=>array(57,-71,957,827),27906=>array(57,-66,945,846),27907=>array(44,-78,972,829),27908=>array(71,-57,915,803),27909=>array(57,-66,965,806),27910=>array(47,-60,964,805),27911=>array(56,-63,910,810),27912=>array(50,-73,964,829),27913=>array(49,-67,955,822),27914=>array(56,-64,970,840),27915=>array(42,-65,951,846),27916=>array(45,-62,902,830),27917=>array(52,-44,954,812),27918=>array(58,-69,898,842),27919=>array(56,-70,954,811),27920=>array(55,-70,955,830),27921=>array(49,-66,974,841),27922=>array(46,-53,947,813),27923=>array(55,-65,941,824),27924=>array(58,-61,935,838),27925=>array(41,-73,975,818),27926=>array(46,-70,962,807),27927=>array(60,-62,963,833),27928=>array(47,-74,953,825),27929=>array(42,-62,967,832),27930=>array(49,-70,968,834),27931=>array(57,-72,959,842),27932=>array(38,-67,981,849),27933=>array(55,-71,959,835),27934=>array(48,-55,898,819),27935=>array(45,-74,973,830),27936=>array(51,-68,954,844),27937=>array(71,-67,965,824),27938=>array(53,-79,952,830),27939=>array(51,-65,955,824),27940=>array(44,-38,962,845),27941=>array(48,-62,959,842),27942=>array(52,-70,932,830),27943=>array(42,-77,945,828),27944=>array(52,-74,963,835),27945=>array(55,-63,974,831),27946=>array(69,-60,940,834),27947=>array(50,-53,970,829),27948=>array(53,-71,963,818),27949=>array(50,-45,953,812),27950=>array(52,-60,967,825),27951=>array(53,-68,948,829),27952=>array(54,-52,949,805),27953=>array(56,-64,959,812),27954=>array(57,-70,897,820),27955=>array(56,-64,908,834),27956=>array(48,-65,956,847),27957=>array(50,-59,908,850),27958=>array(56,-63,917,838),27959=>array(55,-57,956,809),27960=>array(59,-75,965,819),27961=>array(54,-53,959,802),27962=>array(55,-72,889,830),27963=>array(43,-70,942,826),27964=>array(50,-54,956,829),27965=>array(50,-59,986,845),27966=>array(51,-72,966,832),27967=>array(58,-63,988,854),27968=>array(48,-73,909,828),27969=>array(40,-70,964,830),27970=>array(48,-73,970,836),27971=>array(49,-74,939,818),27972=>array(48,-61,952,839),27973=>array(46,-70,939,853),27974=>array(34,-61,947,836),27975=>array(37,-63,929,834),27976=>array(62,-80,920,819),27977=>array(46,-71,930,822),27978=>array(57,-54,935,816),27979=>array(48,-63,880,828),27980=>array(45,-63,956,825),27981=>array(45,-68,940,822),27982=>array(36,-64,952,835),27983=>array(55,-68,871,821),27984=>array(54,-68,917,846),27985=>array(57,-60,909,811),27986=>array(46,-69,920,822),27987=>array(40,-58,950,831),27988=>array(43,-64,911,790),27989=>array(54,-64,936,810),27990=>array(46,-66,934,835),27991=>array(56,-63,956,833),27992=>array(66,-64,970,821),27993=>array(41,-65,954,835),27994=>array(24,-54,948,846),27995=>array(42,-70,955,839),27996=>array(47,-65,963,824),27997=>array(52,-45,965,833),27998=>array(50,-54,972,829),27999=>array(50,-76,971,839),28000=>array(40,-65,951,838),28001=>array(60,-63,957,844),28002=>array(63,-44,966,818),28003=>array(56,-64,960,839),28004=>array(52,-65,940,833),28005=>array(45,-35,955,818),28006=>array(42,-52,956,847),28007=>array(53,-43,951,813),28008=>array(57,-68,972,831),28009=>array(29,-63,944,841),28010=>array(62,-63,962,829),28011=>array(46,-60,938,817),28012=>array(48,-49,952,817),28013=>array(47,-70,962,816),28014=>array(46,-68,951,834),28015=>array(54,-47,949,835),28016=>array(55,-65,909,831),28017=>array(54,-70,963,808),28018=>array(54,-72,969,842),28019=>array(57,-76,957,843),28020=>array(53,-60,959,847),28021=>array(43,-74,954,831),28022=>array(46,-69,945,836),28023=>array(42,-62,956,843),28024=>array(42,-69,949,798),28025=>array(43,-67,971,830),28026=>array(54,-67,911,827),28027=>array(50,-65,908,819),28028=>array(42,-65,962,840),28029=>array(53,-66,958,821),28030=>array(53,-70,953,830),28031=>array(56,-78,955,810),28032=>array(51,-66,963,811),28033=>array(55,-76,966,822),28034=>array(48,-68,975,843),28035=>array(52,-71,906,812),28036=>array(55,-68,956,830),28037=>array(28,-26,960,816),28038=>array(44,-67,950,809),28039=>array(50,-38,956,820),28040=>array(64,-67,917,833),28041=>array(48,-58,956,834),28042=>array(55,-52,972,809),28043=>array(56,-71,968,826),28044=>array(49,-61,897,818),28045=>array(50,-67,947,832),28046=>array(36,-66,964,813),28047=>array(63,-68,948,810),28048=>array(59,-67,964,827),28049=>array(49,-68,961,825),28050=>array(45,-68,948,814),28051=>array(74,-65,915,814),28052=>array(53,-67,996,829),28053=>array(42,-68,927,844),28054=>array(39,-48,956,859),28055=>array(57,-70,955,840),28056=>array(37,-53,973,863),28057=>array(36,-68,959,827),28058=>array(54,-64,968,852),28059=>array(61,-61,937,834),28060=>array(41,-59,955,844),28061=>array(52,-54,911,834),28062=>array(44,-59,943,823),28063=>array(44,-58,938,816),28064=>array(49,-63,869,800),28065=>array(41,-70,893,795),28066=>array(51,-67,929,813),28067=>array(22,-63,946,842),28068=>array(45,-59,944,828),28069=>array(50,-61,908,848),28070=>array(62,-53,918,829),28071=>array(46,-62,870,819),28072=>array(45,-60,956,821),28073=>array(53,-41,928,798),28074=>array(45,-67,952,845),28075=>array(51,-65,928,850),28076=>array(67,-67,933,827),28077=>array(76,-69,964,832),28078=>array(63,-66,924,830),28079=>array(39,-64,951,818),28080=>array(58,-67,967,794),28081=>array(50,-69,961,804),28082=>array(52,-68,961,839),28083=>array(66,-52,956,833),28084=>array(43,-56,962,857),28085=>array(53,-63,911,810),28086=>array(69,-50,941,828),28087=>array(85,-71,963,820),28088=>array(53,-65,900,824),28089=>array(51,-72,946,840),28090=>array(72,-73,932,813),28091=>array(54,-72,962,825),28092=>array(49,-61,964,831),28093=>array(66,-71,957,816),28094=>array(82,-68,946,820),28095=>array(54,-51,975,815),28096=>array(54,-74,956,820),28097=>array(54,-71,944,841),28098=>array(78,-65,953,813),28099=>array(50,-50,951,834),28100=>array(65,-62,926,842),28101=>array(40,-58,953,839),28102=>array(54,-64,958,844),28103=>array(48,-65,961,830),28104=>array(65,-80,908,800),28105=>array(84,-71,965,815),28106=>array(57,-70,897,829),28107=>array(28,-63,968,841),28108=>array(45,-62,935,838),28109=>array(66,-77,906,804),28110=>array(66,-67,967,832),28111=>array(88,-74,971,819),28112=>array(85,-69,906,806),28113=>array(31,-66,975,829),28114=>array(35,-66,953,838),28115=>array(63,-72,956,823),28116=>array(69,-56,955,834),28117=>array(80,-60,954,832),28118=>array(38,-65,945,836),28119=>array(59,-62,904,828),28120=>array(47,-58,911,847),28121=>array(40,-62,961,836),28122=>array(48,-66,982,843),28123=>array(71,-71,905,821),28124=>array(74,-75,911,806),28125=>array(40,-62,960,806),28126=>array(29,-65,956,832),28127=>array(37,-54,970,849),28128=>array(46,-64,955,814),28129=>array(47,-62,965,846),28130=>array(79,-70,958,820),28131=>array(50,-58,957,850),28132=>array(40,-61,965,835),28133=>array(40,-64,956,837),28134=>array(50,-36,957,843),28135=>array(50,-39,989,843),28136=>array(57,-61,950,834),28137=>array(47,-73,964,835),28138=>array(39,-58,991,856),28139=>array(41,-42,943,827),28140=>array(24,-61,948,840),28141=>array(70,-68,961,824),28142=>array(43,-59,962,849),28143=>array(50,-66,941,832),28144=>array(38,-53,969,848),28145=>array(44,-68,963,808),28146=>array(57,-79,956,823),28147=>array(50,-61,955,831),28148=>array(34,-33,955,846),28149=>array(47,-65,900,830),28150=>array(52,-65,985,836),28151=>array(55,-60,961,803),28152=>array(39,-64,943,833),28153=>array(42,-37,984,854),28154=>array(42,-60,978,845),28155=>array(53,-55,962,837),28156=>array(49,-68,978,827),28157=>array(64,-53,951,824),28158=>array(51,-69,962,857),28159=>array(70,-68,922,838),28160=>array(76,-80,974,820),28161=>array(47,-68,961,823),28162=>array(51,-60,949,795),28163=>array(41,-70,951,821),28164=>array(44,-62,953,820),28165=>array(39,-67,943,833),28166=>array(42,-57,909,826),28167=>array(39,-63,924,800),28168=>array(42,-60,958,825),28169=>array(39,-67,966,824),28170=>array(59,-72,882,824),28171=>array(48,-31,956,834),28172=>array(46,-60,936,807),28173=>array(54,-75,912,827),28174=>array(52,-60,929,823),28175=>array(52,-62,954,833),28176=>array(36,-63,920,829),28177=>array(50,-48,933,799),28178=>array(36,-65,957,841),28179=>array(46,-57,979,828),28180=>array(50,-48,922,829),28181=>array(42,-57,909,826),28182=>array(60,-72,910,832),28183=>array(51,-61,964,839),28184=>array(82,-69,964,813),28185=>array(34,-65,951,838),28186=>array(47,-65,948,833),28187=>array(54,-76,956,837),28188=>array(50,-72,970,804),28189=>array(33,-76,965,843),28190=>array(81,-71,934,837),28191=>array(46,-62,921,849),28192=>array(53,-68,965,819),28193=>array(49,-71,973,832),28194=>array(29,-54,972,812),28195=>array(33,-29,959,843),28196=>array(63,-77,930,836),28197=>array(48,-70,956,811),28198=>array(51,-59,896,822),28199=>array(62,-71,919,838),28200=>array(46,-76,975,803),28201=>array(36,-61,943,781),28202=>array(61,-80,930,820),28203=>array(45,-65,978,830),28204=>array(64,-65,909,826),28205=>array(65,-65,913,808),28206=>array(50,-65,950,828),28207=>array(47,-56,961,826),28208=>array(54,-67,973,844),28209=>array(49,-49,959,825),28210=>array(55,-39,954,847),28211=>array(40,-70,952,813),28212=>array(62,-65,919,801),28213=>array(49,-70,956,825),28214=>array(57,-79,970,824),28215=>array(49,-58,967,856),28216=>array(54,-77,950,839),28217=>array(49,-50,919,855),28218=>array(28,-71,946,826),28219=>array(46,-72,960,831),28220=>array(58,-65,982,845),28221=>array(51,-74,962,822),28222=>array(43,-57,956,821),28223=>array(45,-67,980,829),28224=>array(52,-76,968,829),28225=>array(49,-72,963,834),28226=>array(52,-60,963,805),28227=>array(44,-61,961,832),28228=>array(80,-69,919,808),28229=>array(39,-46,968,855),28230=>array(43,-69,951,833),28231=>array(41,-73,947,829),28232=>array(48,-59,975,832),28233=>array(50,-71,952,824),28234=>array(49,-69,966,825),28235=>array(46,-71,950,838),28236=>array(52,-63,963,848),28237=>array(54,-64,956,833),28238=>array(43,-64,951,809),28239=>array(47,-71,939,832),28240=>array(48,-65,918,829),28241=>array(45,-48,963,820),28242=>array(52,-71,951,811),28243=>array(43,-53,959,823),28244=>array(50,-65,965,850),28245=>array(40,-73,978,826),28246=>array(68,-68,912,829),28247=>array(69,-61,954,826),28248=>array(69,-65,916,829),28249=>array(69,-38,980,840),28250=>array(54,-70,965,828),28251=>array(38,-65,948,823),28252=>array(49,-65,979,811),28253=>array(55,-69,958,825),28254=>array(60,-77,955,833),28255=>array(42,-37,959,846),28256=>array(55,-66,954,835),28257=>array(52,-66,910,801),28258=>array(55,-72,951,811),28259=>array(48,-44,959,821),28260=>array(43,-57,959,853),28261=>array(45,-70,977,832),28262=>array(52,-46,955,807),28263=>array(44,-68,918,814),28264=>array(49,-67,974,812),28265=>array(45,-64,962,818),28266=>array(49,-63,974,843),28267=>array(50,-67,979,833),28268=>array(25,-67,964,833),28269=>array(29,-65,955,842),28270=>array(34,-50,939,810),28271=>array(51,-68,953,795),28272=>array(43,-48,938,844),28273=>array(56,-65,955,835),28274=>array(41,-56,968,846),28275=>array(55,-64,956,836),28276=>array(53,-40,959,851),28277=>array(45,-60,969,840),28278=>array(45,-70,974,840),28279=>array(49,-70,961,832),28280=>array(52,-70,961,830),28281=>array(49,-68,956,806),28282=>array(64,-65,949,840),28283=>array(45,-64,954,845),28284=>array(48,-46,948,821),28285=>array(65,-62,952,843),28286=>array(54,-61,953,836),28287=>array(49,-39,933,804),28288=>array(38,-59,922,828),28289=>array(44,-70,962,818),28290=>array(44,-67,903,831),28291=>array(48,-64,919,827),28292=>array(48,-63,969,840),28293=>array(29,-63,931,833),28294=>array(42,-69,949,817),28295=>array(29,-52,928,837),28296=>array(46,-68,939,839),28297=>array(48,-64,963,811),28298=>array(48,-67,969,817),28299=>array(48,-33,965,817),28300=>array(46,-61,966,823),28301=>array(49,-69,961,816),28302=>array(44,-54,954,849),28303=>array(37,-65,949,828),28304=>array(48,-70,943,799),28305=>array(51,-72,935,836),28306=>array(43,-71,960,827),28307=>array(65,-71,953,831),28308=>array(50,-74,971,833),28309=>array(50,-60,965,799),28310=>array(54,-67,951,843),28311=>array(38,-70,967,836),28312=>array(31,-41,938,832),28313=>array(45,-70,987,845),28314=>array(55,-68,966,827),28315=>array(55,-74,976,838),28316=>array(45,-66,925,830),28317=>array(43,-67,948,829),28318=>array(64,-72,963,806),28319=>array(48,-66,966,807),28320=>array(55,-45,952,835),28321=>array(35,-70,954,824),28322=>array(48,-34,952,839),28323=>array(38,-67,973,848),28324=>array(41,-71,932,797),28325=>array(53,-64,951,835),28326=>array(46,-69,964,830),28327=>array(51,-62,967,804),28328=>array(51,-59,972,842),28329=>array(26,-60,928,839),28330=>array(26,-69,977,838),28331=>array(53,-59,959,784),28332=>array(53,-59,980,829),28333=>array(53,-59,973,802),28334=>array(52,-68,968,838),28335=>array(66,-70,922,837),28336=>array(58,-49,954,830),28337=>array(44,-66,986,840),28338=>array(34,-64,970,837),28339=>array(51,-71,969,811),28340=>array(56,-67,975,842),28341=>array(56,-71,989,836),28342=>array(53,-68,964,835),28343=>array(46,-65,905,818),28344=>array(56,-67,980,830),28345=>array(62,-65,958,831),28346=>array(54,-60,927,803),28347=>array(57,-63,878,808),28348=>array(57,-41,959,816),28349=>array(36,-64,950,810),28350=>array(45,-64,965,851),28351=>array(45,-70,958,824),28352=>array(55,-73,950,835),28353=>array(44,-65,978,840),28354=>array(51,-62,959,848),28355=>array(36,-52,973,812),28356=>array(46,-65,991,863),28357=>array(53,-68,954,828),28358=>array(55,-68,951,802),28359=>array(53,-69,962,844),28360=>array(63,-64,954,839),28361=>array(47,-62,962,813),28362=>array(55,-63,972,847),28363=>array(45,-65,944,841),28364=>array(38,-58,978,853),28365=>array(48,-73,946,831),28366=>array(46,-65,952,830),28367=>array(35,-49,969,836),28368=>array(43,-68,970,835),28369=>array(49,-62,926,811),28370=>array(57,-74,951,797),28371=>array(41,-66,952,840),28372=>array(57,-65,950,836),28373=>array(27,-64,958,824),28374=>array(53,-71,965,836),28375=>array(43,-49,924,827),28376=>array(48,-61,959,814),28377=>array(47,-39,951,828),28378=>array(44,-79,961,841),28379=>array(43,-76,939,820),28380=>array(54,-70,987,852),28381=>array(44,-51,958,835),28382=>array(43,-72,938,829),28383=>array(37,-63,926,826),28384=>array(46,-64,943,805),28385=>array(38,-59,922,828),28386=>array(37,-43,921,824),28387=>array(37,-76,979,791),28388=>array(39,-57,940,832),28389=>array(45,-54,920,828),28390=>array(46,-60,951,841),28391=>array(46,-54,978,852),28392=>array(43,-70,927,844),28393=>array(40,-39,917,834),28394=>array(45,-69,969,810),28395=>array(50,-68,960,836),28396=>array(44,-64,963,815),28397=>array(55,-74,953,799),28398=>array(55,-75,977,832),28399=>array(45,-68,950,829),28400=>array(61,-65,952,847),28401=>array(61,-71,970,838),28402=>array(45,-68,945,859),28403=>array(36,-80,923,826),28404=>array(36,-68,954,831),28405=>array(49,-73,966,842),28406=>array(56,-73,972,829),28407=>array(63,-64,953,837),28408=>array(38,-64,951,832),28409=>array(54,-66,955,839),28410=>array(50,-49,956,818),28411=>array(50,-64,959,844),28412=>array(54,-60,967,826),28413=>array(56,-68,956,839),28414=>array(57,-68,961,827),28415=>array(46,-69,948,830),28416=>array(33,-72,961,826),28417=>array(44,-60,972,850),28418=>array(23,-65,971,795),28419=>array(51,-73,974,836),28420=>array(55,-81,952,832),28421=>array(55,-70,962,834),28422=>array(29,-64,969,838),28423=>array(51,-74,973,831),28424=>array(51,-68,955,830),28425=>array(41,-70,970,828),28426=>array(35,-72,945,837),28427=>array(41,-67,985,845),28428=>array(35,-41,965,830),28429=>array(50,-71,898,813),28430=>array(52,-73,968,827),28431=>array(46,-67,956,800),28432=>array(66,-71,964,840),28433=>array(47,-52,959,847),28434=>array(57,-74,963,830),28435=>array(37,-58,943,841),28436=>array(40,-66,960,840),28437=>array(38,-65,956,837),28438=>array(47,-62,972,833),28439=>array(46,-54,962,843),28440=>array(51,-53,964,821),28441=>array(69,-68,964,831),28442=>array(42,-31,957,805),28443=>array(46,-45,983,828),28444=>array(47,-52,964,824),28445=>array(50,-65,919,804),28446=>array(56,-69,961,827),28447=>array(51,-28,954,839),28448=>array(28,-63,974,840),28449=>array(56,-70,954,838),28450=>array(38,-68,962,838),28451=>array(37,-58,963,833),28452=>array(38,-63,948,819),28453=>array(50,-52,954,836),28454=>array(38,-68,978,841),28455=>array(47,-67,961,832),28456=>array(61,-70,972,843),28457=>array(38,-62,973,849),28458=>array(41,-62,961,829),28459=>array(36,-68,972,806),28460=>array(47,-69,969,837),28461=>array(57,-70,968,827),28462=>array(49,-69,959,844),28463=>array(50,-60,962,819),28464=>array(40,-68,908,842),28465=>array(39,-71,970,837),28466=>array(44,-68,962,816),28467=>array(41,-67,952,843),28468=>array(47,-76,934,824),28469=>array(33,-58,966,833),28470=>array(34,-35,958,829),28471=>array(37,-71,953,838),28472=>array(48,-68,956,836),28473=>array(56,-68,955,814),28474=>array(51,-72,968,823),28475=>array(47,-71,966,808),28476=>array(51,-70,955,823),28477=>array(63,-74,957,805),28478=>array(45,-62,974,840),28479=>array(36,-68,959,839),28480=>array(43,-50,962,814),28481=>array(38,-66,956,831),28482=>array(54,-58,945,833),28483=>array(50,-71,964,832),28484=>array(51,-65,972,846),28485=>array(45,-72,936,843),28486=>array(37,-63,913,825),28487=>array(43,-66,951,824),28488=>array(39,-55,971,824),28489=>array(44,-54,943,840),28490=>array(36,-61,967,831),28491=>array(40,-65,946,824),28492=>array(48,-46,944,841),28493=>array(40,-43,923,832),28494=>array(48,-71,977,824),28495=>array(51,-70,920,801),28496=>array(52,-64,974,838),28497=>array(30,-63,983,846),28498=>array(50,-64,977,828),28499=>array(55,-52,985,824),28500=>array(57,-68,951,823),28501=>array(47,-71,978,829),28502=>array(53,-45,958,801),28503=>array(49,-66,979,848),28504=>array(33,-66,969,832),28505=>array(31,-60,945,837),28506=>array(41,-59,954,846),28507=>array(55,-65,964,837),28508=>array(53,-48,956,840),28509=>array(44,-70,985,841),28510=>array(42,-65,972,833),28511=>array(58,-64,922,846),28512=>array(40,-70,955,797),28513=>array(49,-71,981,841),28514=>array(37,-66,955,832),28515=>array(48,-68,908,809),28516=>array(71,-69,915,794),28517=>array(69,-72,960,793),28518=>array(44,-64,968,838),28519=>array(52,-70,915,824),28520=>array(69,-62,966,847),28521=>array(49,-74,960,807),28522=>array(52,-71,916,832),28523=>array(49,-68,975,828),28524=>array(49,-69,951,805),28525=>array(40,-71,962,805),28526=>array(58,-79,905,832),28527=>array(44,-62,952,805),28528=>array(57,-68,960,837),28529=>array(57,-56,937,839),28530=>array(57,-70,950,828),28531=>array(50,-71,948,808),28532=>array(36,-63,934,823),28533=>array(38,-69,963,832),28534=>array(48,-63,977,807),28535=>array(52,-72,956,829),28536=>array(32,-71,964,834),28537=>array(32,-51,968,819),28538=>array(38,-68,960,808),28539=>array(48,-68,975,823),28540=>array(53,-49,953,845),28541=>array(51,-71,956,836),28542=>array(49,-74,974,821),28543=>array(36,-65,904,813),28544=>array(33,-38,956,810),28545=>array(46,-60,959,836),28546=>array(42,-69,974,838),28547=>array(33,-78,961,817),28548=>array(46,-52,964,837),28549=>array(45,-50,952,828),28550=>array(51,-61,973,840),28551=>array(44,-56,949,846),28552=>array(45,-70,974,841),28553=>array(35,-66,975,831),28554=>array(48,-62,957,851),28555=>array(50,-71,952,804),28556=>array(37,-64,954,843),28557=>array(42,-62,955,830),28558=>array(36,-59,972,845),28559=>array(34,-58,934,813),28560=>array(46,-75,954,812),28561=>array(40,-49,923,804),28562=>array(42,-56,973,818),28563=>array(49,-68,961,835),28564=>array(32,-50,950,853),28565=>array(55,-69,947,826),28566=>array(46,-68,906,812),28567=>array(37,-60,894,820),28568=>array(32,-51,956,834),28569=>array(41,-70,960,835),28570=>array(32,-68,949,844),28571=>array(32,-74,943,835),28572=>array(52,-58,883,820),28573=>array(44,-59,945,847),28574=>array(68,-74,972,826),28575=>array(62,-63,977,854),28576=>array(40,-46,962,804),28577=>array(39,-67,977,795),28578=>array(59,-68,910,824),28579=>array(41,-65,976,837),28580=>array(35,-68,956,822),28581=>array(66,-73,952,822),28582=>array(45,-69,969,810),28583=>array(43,-41,951,833),28584=>array(41,-43,951,850),28585=>array(87,-68,924,833),28586=>array(55,-77,995,820),28587=>array(66,-65,946,825),28588=>array(62,-79,965,825),28589=>array(71,-71,954,839),28590=>array(19,-65,969,855),28591=>array(69,-70,963,823),28592=>array(63,-69,970,836),28593=>array(45,-68,975,808),28594=>array(68,-69,958,823),28595=>array(24,-68,963,851),28596=>array(35,-73,976,806),28597=>array(35,-55,948,828),28598=>array(42,-44,956,849),28599=>array(36,-57,941,819),28600=>array(52,-57,962,831),28601=>array(28,-56,941,856),28602=>array(75,-53,975,837),28603=>array(45,-56,944,843),28604=>array(42,-65,953,841),28605=>array(56,-66,957,828),28606=>array(37,-57,951,833),28607=>array(71,-71,961,822),28608=>array(40,-72,962,840),28609=>array(54,-59,914,815),28610=>array(28,-68,962,830),28611=>array(34,-75,965,840),28612=>array(74,-68,974,810),28613=>array(39,-54,984,853),28614=>array(47,-67,966,836),28615=>array(41,-44,951,855),28616=>array(43,-68,964,818),28617=>array(44,-66,954,839),28618=>array(69,-78,964,825),28619=>array(77,-70,987,820),28620=>array(49,-71,970,824),28621=>array(70,-57,969,826),28622=>array(74,-68,954,812),28623=>array(68,-65,967,822),28624=>array(68,-64,986,822),28625=>array(39,-63,935,826),28626=>array(49,-58,951,835),28627=>array(28,-68,962,850),28628=>array(51,-71,958,802),28629=>array(53,-70,963,799),28630=>array(69,-63,961,802),28631=>array(39,-63,991,835),28632=>array(39,-60,956,849),28633=>array(52,-49,952,839),28634=>array(52,-65,937,829),28635=>array(43,-62,952,837),28636=>array(54,-54,957,826),28637=>array(53,-69,974,829),28638=>array(42,-64,962,859),28639=>array(48,-71,954,838),28640=>array(35,-59,967,834),28641=>array(40,-68,938,812),28642=>array(45,-70,952,801),28643=>array(59,-73,979,831),28644=>array(40,-58,963,841),28645=>array(40,-60,975,848),28646=>array(35,-63,959,826),28647=>array(55,-68,954,827),28648=>array(53,-41,965,841),28649=>array(51,-68,963,829),28650=>array(49,-43,972,842),28651=>array(47,-55,963,842),28652=>array(53,-64,972,829),28653=>array(58,-60,962,815),28654=>array(20,-68,957,831),28655=>array(41,-65,955,808),28656=>array(50,-61,956,839),28657=>array(46,-73,966,845),28658=>array(45,-78,963,822),28659=>array(52,-69,966,827),28660=>array(47,-68,955,826),28661=>array(79,-57,930,840),28662=>array(47,-65,901,815),28663=>array(51,-64,951,834),28664=>array(46,-65,984,837),28665=>array(24,-29,960,802),28666=>array(35,-69,964,845),28667=>array(50,-76,963,828),28668=>array(25,-73,978,842),28669=>array(45,-72,960,834),28670=>array(43,-71,967,841),28671=>array(56,-67,939,812),28672=>array(56,-70,959,809),28673=>array(46,-78,969,838),28674=>array(63,-61,974,849),28675=>array(58,-57,957,824),28676=>array(76,-68,952,829),28677=>array(52,-43,957,836),28678=>array(41,-71,933,834),28679=>array(45,-83,940,831),28680=>array(45,-70,937,817),28681=>array(36,-59,929,846),28682=>array(40,-52,955,824),28683=>array(48,-65,952,838),28684=>array(42,-62,951,837),28685=>array(47,-54,956,863),28686=>array(47,-67,950,833),28687=>array(61,-67,933,834),28688=>array(59,-62,942,830),28689=>array(34,-68,973,797),28690=>array(41,-43,981,856),28691=>array(39,-67,970,834),28692=>array(49,-71,970,822),28693=>array(37,-71,965,821),28694=>array(44,-65,942,820),28695=>array(41,-53,949,839),28696=>array(48,-67,962,841),28697=>array(51,-70,970,844),28698=>array(39,-59,976,848),28699=>array(48,-71,956,838),28700=>array(36,-69,967,826),28701=>array(38,-59,967,820),28702=>array(44,-65,959,844),28703=>array(40,-65,959,833),28704=>array(46,-63,967,838),28705=>array(35,-69,967,832),28706=>array(41,-64,974,829),28707=>array(24,-42,961,835),28708=>array(51,-72,964,841),28709=>array(45,-71,938,817),28710=>array(40,-65,951,833),28711=>array(45,-68,963,827),28712=>array(42,-71,973,829),28713=>array(40,-66,966,830),28714=>array(55,-65,960,843),28715=>array(46,-73,975,829),28716=>array(42,-73,961,829),28717=>array(50,-70,978,849),28718=>array(50,-66,963,824),28719=>array(55,-63,951,841),28720=>array(48,-62,975,808),28721=>array(42,-63,942,832),28722=>array(40,-67,987,849),28723=>array(50,-64,952,831),28724=>array(36,-70,957,833),28725=>array(53,-76,969,840),28726=>array(54,-63,936,840),28727=>array(44,-68,949,825),28728=>array(41,-60,974,841),28729=>array(39,-62,990,852),28730=>array(43,-65,962,848),28731=>array(37,-71,966,829),28732=>array(39,-58,975,848),28733=>array(49,-64,950,845),28734=>array(59,-70,923,797),28735=>array(52,-65,959,839),28736=>array(53,-61,936,832),28737=>array(56,-65,921,825),28738=>array(55,-62,964,840),28739=>array(59,-59,964,826),28740=>array(46,-63,961,814),28741=>array(45,-46,958,804),28742=>array(36,-45,949,826),28743=>array(41,-62,952,834),28744=>array(45,-65,954,806),28745=>array(51,-68,956,834),28746=>array(50,-67,960,808),28747=>array(46,-76,941,844),28748=>array(49,-70,953,829),28749=>array(49,-67,930,790),28750=>array(39,-36,964,836),28751=>array(33,-67,935,805),28752=>array(56,-37,950,836),28753=>array(46,-67,969,819),28754=>array(46,-69,958,824),28755=>array(36,-68,959,832),28756=>array(41,-66,972,832),28757=>array(41,-62,965,856),28758=>array(49,-65,956,843),28759=>array(48,-55,964,832),28760=>array(34,-72,960,837),28761=>array(52,-78,941,836),28762=>array(37,-66,963,829),28763=>array(50,-64,910,823),28764=>array(48,-71,946,838),28765=>array(46,-69,973,813),28766=>array(32,-71,925,815),28767=>array(55,-69,938,815),28768=>array(47,-66,954,837),28769=>array(45,-57,948,839),28770=>array(44,-70,988,830),28771=>array(50,-69,940,839),28772=>array(28,-63,975,844),28773=>array(45,-68,965,845),28774=>array(34,-73,964,816),28775=>array(39,-36,972,839),28776=>array(44,-77,954,834),28777=>array(38,-36,964,839),28778=>array(48,-67,944,830),28779=>array(85,-66,919,815),28780=>array(39,223,932,469),28781=>array(45,-61,955,771),28782=>array(49,-64,954,829),28783=>array(49,-91,942,814),28784=>array(32,-59,959,782),28785=>array(70,-70,908,825),28786=>array(146,-68,889,832),28787=>array(59,-57,917,833),28788=>array(58,-66,959,827),28789=>array(53,-63,926,790),28790=>array(64,-77,964,824),28791=>array(54,-65,949,829),28792=>array(54,-62,956,840),28793=>array(79,-70,943,837),28794=>array(58,-69,966,819),28795=>array(53,-64,953,830),28796=>array(50,-77,920,832),28797=>array(53,-64,953,817),28798=>array(45,-72,925,835),28799=>array(37,-81,903,826),28800=>array(32,-63,899,826),28801=>array(37,-69,960,800),28802=>array(53,-67,960,826),28803=>array(42,-73,969,780),28804=>array(46,-70,961,825),28805=>array(46,-52,965,804),28806=>array(50,-71,987,835),28807=>array(81,-74,956,838),28808=>array(73,-70,964,825),28809=>array(34,-65,925,828),28810=>array(59,-72,964,840),28811=>array(59,-72,959,832),28812=>array(59,-72,957,849),28813=>array(59,-72,964,832),28814=>array(66,-77,962,829),28815=>array(59,-73,964,837),28816=>array(59,-72,956,834),28817=>array(48,-65,975,831),28818=>array(44,-74,965,833),28819=>array(55,-86,963,820),28820=>array(59,-74,970,828),28821=>array(48,-69,955,836),28822=>array(39,-66,966,826),28823=>array(57,-73,960,829),28824=>array(62,-70,954,840),28825=>array(57,-73,960,840),28826=>array(100,-75,967,827),28827=>array(39,-59,949,833),28828=>array(35,-71,889,822),28829=>array(37,-62,937,827),28830=>array(37,-68,954,823),28831=>array(56,-68,956,822),28832=>array(73,-70,914,831),28833=>array(54,-66,956,826),28834=>array(62,-70,956,831),28835=>array(62,-70,961,831),28836=>array(69,-66,920,829),28837=>array(50,-62,932,829),28838=>array(62,-70,968,844),28839=>array(62,-70,943,831),28840=>array(63,-70,953,852),28841=>array(49,-73,957,829),28842=>array(54,-70,914,831),28843=>array(49,-72,961,822),28844=>array(48,-72,951,831),28845=>array(37,-69,959,830),28846=>array(55,-72,948,839),28847=>array(60,-71,915,830),28848=>array(34,-61,971,849),28849=>array(37,-62,986,838),28850=>array(62,-70,954,838),28851=>array(45,-69,950,827),28852=>array(48,-74,968,825),28853=>array(51,-71,965,834),28854=>array(62,-70,931,831),28855=>array(39,-72,942,828),28856=>array(59,-71,951,842),28857=>array(50,-71,950,830),28858=>array(62,-64,920,838),28859=>array(35,-68,911,823),28860=>array(35,-60,942,832),28861=>array(38,-64,940,830),28862=>array(53,-70,967,820),28863=>array(34,-65,965,844),28864=>array(39,-70,921,825),28865=>array(29,-68,943,830),28866=>array(32,-56,936,833),28867=>array(35,-63,923,823),28868=>array(35,-66,970,846),28869=>array(52,-55,956,832),28870=>array(48,-65,953,832),28871=>array(55,-65,965,830),28872=>array(58,-61,954,831),28873=>array(47,-71,957,843),28874=>array(41,-85,956,841),28875=>array(42,-61,973,849),28876=>array(35,-71,933,837),28877=>array(55,-64,956,826),28878=>array(45,-73,958,788),28879=>array(68,-63,887,845),28880=>array(34,-65,965,844),28881=>array(54,-63,964,829),28882=>array(47,-74,968,824),28883=>array(49,-56,953,832),28884=>array(57,-61,910,831),28885=>array(53,-64,959,832),28886=>array(82,-58,957,839),28887=>array(49,-68,959,835),28888=>array(49,-71,949,830),28889=>array(48,-75,968,839),28890=>array(53,-68,969,833),28891=>array(35,-60,944,826),28892=>array(55,-64,959,837),28893=>array(50,-58,966,785),28894=>array(46,-68,953,830),28895=>array(62,-75,919,834),28896=>array(48,-68,953,829),28897=>array(56,-71,933,831),28898=>array(44,-63,960,827),28899=>array(48,-75,956,829),28900=>array(43,-77,953,832),28901=>array(43,-77,949,825),28902=>array(34,-62,926,831),28903=>array(34,-74,934,818),28904=>array(54,-66,927,824),28905=>array(31,-65,931,841),28906=>array(31,-73,970,836),28907=>array(49,-70,931,812),28908=>array(26,-64,936,833),28909=>array(45,-63,951,829),28910=>array(68,-70,931,828),28911=>array(47,-82,944,842),28912=>array(43,-70,956,826),28913=>array(42,-51,915,839),28914=>array(63,-70,931,825),28915=>array(41,-65,956,831),28916=>array(56,-76,954,820),28917=>array(56,-72,947,831),28918=>array(38,-70,972,826),28919=>array(51,-75,960,837),28920=>array(53,-68,953,824),28921=>array(50,-72,955,842),28922=>array(55,-73,970,831),28923=>array(47,-67,967,829),28924=>array(44,-66,965,826),28925=>array(39,-81,969,839),28926=>array(46,-24,968,815),28927=>array(51,-77,959,833),28928=>array(45,-70,964,823),28929=>array(59,-66,962,826),28930=>array(38,-66,972,836),28931=>array(71,-71,954,835),28932=>array(33,-60,963,804),28933=>array(49,-71,951,832),28934=>array(49,-71,897,824),28935=>array(49,-71,911,833),28936=>array(46,-70,980,846),28937=>array(62,-63,937,798),28938=>array(49,-70,954,832),28939=>array(46,-70,980,829),28940=>array(57,-69,961,849),28941=>array(46,-70,914,829),28942=>array(57,-75,958,829),28943=>array(53,-61,961,775),28944=>array(48,-70,953,826),28945=>array(48,-67,917,826),28946=>array(58,-69,904,826),28947=>array(46,-70,968,833),28948=>array(55,-72,911,828),28949=>array(20,-77,948,832),28950=>array(33,-67,878,825),28951=>array(56,-65,929,835),28952=>array(39,-66,936,817),28953=>array(45,-79,947,831),28954=>array(61,-64,959,823),28955=>array(112,-72,911,781),28956=>array(51,-63,974,832),28957=>array(48,-67,960,833),28958=>array(50,-69,953,830),28959=>array(45,-67,953,831),28960=>array(39,-65,967,845),28961=>array(45,-63,951,844),28962=>array(48,-68,950,829),28963=>array(52,-75,956,785),28964=>array(48,-70,956,844),28965=>array(44,-72,961,845),28966=>array(48,-65,954,836),28967=>array(48,-67,968,826),28968=>array(48,-69,889,826),28969=>array(38,-67,895,826),28970=>array(48,-71,953,846),28971=>array(48,-67,937,826),28972=>array(65,-67,929,826),28973=>array(69,-62,936,839),28974=>array(38,-66,977,841),28975=>array(56,-70,957,837),28976=>array(53,-79,893,837),28977=>array(37,-66,971,840),28978=>array(49,-69,966,841),28979=>array(65,-67,954,834),28980=>array(40,-61,951,838),28981=>array(46,-73,910,824),28982=>array(62,-67,961,838),28983=>array(48,-67,951,850),28984=>array(59,-67,959,803),28985=>array(48,-67,897,826),28986=>array(50,-72,955,827),28987=>array(48,-67,905,826),28988=>array(56,-74,963,829),28989=>array(69,-70,959,821),28990=>array(37,-61,971,840),28991=>array(48,-68,967,855),28992=>array(37,-61,907,829),28993=>array(43,-70,957,832),28994=>array(40,-71,953,826),28995=>array(64,-70,979,847),28996=>array(41,-72,955,829),28997=>array(32,-72,971,829),28998=>array(38,-63,969,835),28999=>array(60,-65,959,829),29000=>array(28,-67,971,826),29001=>array(46,-69,968,830),29002=>array(51,-67,959,841),29003=>array(51,-71,957,826),29004=>array(42,-71,948,849),29005=>array(36,-73,986,827),29006=>array(55,-77,955,839),29007=>array(48,-67,933,826),29008=>array(50,-70,977,830),29009=>array(66,-70,961,831),29010=>array(45,-65,967,846),29011=>array(40,-73,953,828),29012=>array(36,-70,941,838),29013=>array(43,-72,949,793),29014=>array(40,-73,967,844),29015=>array(56,-72,975,835),29016=>array(47,-68,977,826),29017=>array(53,-63,953,832),29018=>array(38,-66,967,807),29019=>array(38,-73,977,788),29020=>array(46,-67,954,827),29021=>array(44,-79,897,823),29022=>array(34,-71,940,836),29023=>array(45,-75,906,825),29024=>array(32,-57,973,836),29025=>array(35,-75,977,829),29026=>array(66,-68,938,833),29027=>array(42,-68,977,829),29028=>array(44,-68,964,833),29029=>array(39,-62,969,834),29030=>array(48,-66,955,843),29031=>array(67,-62,950,788),29032=>array(35,-71,960,828),29033=>array(49,-76,959,829),29034=>array(48,-75,952,842),29035=>array(50,-62,974,840),29036=>array(38,-75,954,826),29037=>array(49,-61,954,830),29038=>array(54,-79,955,831),29039=>array(50,-65,961,832),29040=>array(46,-75,906,829),29041=>array(51,-69,911,828),29042=>array(49,-67,962,837),29043=>array(26,-70,883,823),29044=>array(56,-69,950,828),29045=>array(51,-67,959,831),29046=>array(43,-55,970,837),29047=>array(43,-73,969,846),29048=>array(50,-63,939,832),29049=>array(51,-69,966,829),29050=>array(49,-69,950,826),29051=>array(44,-72,956,836),29052=>array(56,-69,926,850),29053=>array(41,-72,921,822),29054=>array(51,-69,950,828),29055=>array(46,-71,959,838),29056=>array(49,-74,964,827),29057=>array(51,-68,952,836),29058=>array(44,-68,967,831),29059=>array(47,-69,962,840),29060=>array(34,-71,964,847),29061=>array(57,-75,956,820),29062=>array(51,-67,956,829),29063=>array(57,-65,959,843),29064=>array(43,-72,949,801),29065=>array(53,-80,964,826),29066=>array(40,-70,947,844),29067=>array(58,-72,968,838),29068=>array(51,-63,905,831),29069=>array(51,-72,937,843),29070=>array(48,-71,956,827),29071=>array(45,-72,949,834),29072=>array(46,-77,956,832),29073=>array(51,-69,966,850),29074=>array(58,-63,949,839),29075=>array(56,-69,928,839),29076=>array(51,-71,962,835),29077=>array(56,-69,969,828),29078=>array(53,-76,933,835),29079=>array(40,-72,981,850),29080=>array(42,-63,890,830),29081=>array(43,-72,949,785),29082=>array(51,-55,959,835),29083=>array(32,-61,945,832),29084=>array(49,-52,977,830),29085=>array(40,-69,968,846),29086=>array(48,-61,977,825),29087=>array(38,-67,960,831),29088=>array(39,-70,909,835),29089=>array(51,-72,955,826),29090=>array(51,-69,962,843),29091=>array(51,-69,953,833),29092=>array(48,-62,953,827),29093=>array(32,-70,973,824),29094=>array(56,-65,949,837),29095=>array(46,-70,973,839),29096=>array(35,-63,964,830),29097=>array(42,-71,964,826),29098=>array(41,-71,931,825),29099=>array(51,-69,962,851),29100=>array(30,-72,940,833),29101=>array(35,-66,962,835),29102=>array(49,-70,968,827),29103=>array(46,-59,969,843),29104=>array(54,-61,956,825),29105=>array(47,-69,949,831),29106=>array(41,-76,968,821),29107=>array(43,-62,983,833),29108=>array(36,-61,964,838),29109=>array(32,-67,951,848),29110=>array(26,-67,962,828),29111=>array(43,-62,917,853),29112=>array(32,-61,964,835),29113=>array(41,-62,965,835),29114=>array(37,-65,956,836),29115=>array(34,-63,991,848),29116=>array(42,-73,958,826),29117=>array(38,-68,946,824),29118=>array(36,-75,956,837),29119=>array(54,-75,967,831),29120=>array(47,-68,954,825),29121=>array(43,-65,953,832),29122=>array(46,-67,956,826),29123=>array(45,-75,959,831),29124=>array(47,-66,970,842),29125=>array(41,-75,971,826),29126=>array(44,-68,969,826),29127=>array(47,-67,954,835),29128=>array(35,-85,963,837),29129=>array(46,-73,973,837),29130=>array(44,-63,974,839),29131=>array(38,-73,963,837),29132=>array(51,-75,967,827),29133=>array(46,-67,954,836),29134=>array(41,-73,969,850),29135=>array(50,-66,925,830),29136=>array(49,-68,959,833),29137=>array(37,-61,933,844),29138=>array(48,-74,955,829),29139=>array(39,-71,968,836),29140=>array(32,-65,965,837),29141=>array(45,-67,952,828),29142=>array(43,-56,954,833),29143=>array(22,-68,911,829),29144=>array(48,-67,914,829),29145=>array(53,-72,968,798),29146=>array(44,-74,969,828),29147=>array(43,-74,972,785),29148=>array(43,-65,928,829),29149=>array(46,-67,967,824),29150=>array(34,-67,969,837),29151=>array(84,-68,903,832),29152=>array(54,-69,952,825),29153=>array(42,-70,957,825),29154=>array(47,-67,969,838),29155=>array(44,-68,968,849),29156=>array(44,-68,951,822),29157=>array(33,-71,973,829),29158=>array(38,-69,971,836),29159=>array(36,-74,960,823),29160=>array(37,-69,962,847),29161=>array(37,-71,962,845),29162=>array(30,-63,979,836),29163=>array(61,-79,969,847),29164=>array(53,-64,974,835),29165=>array(61,-79,927,828),29166=>array(55,-80,967,830),29167=>array(43,-77,956,820),29168=>array(49,-73,977,829),29169=>array(53,-75,976,830),29170=>array(46,-72,951,843),29171=>array(49,-75,977,823),29172=>array(39,-73,971,857),29173=>array(39,-73,954,835),29174=>array(41,-70,984,838),29175=>array(48,-70,921,857),29176=>array(41,-70,945,830),29177=>array(43,-67,972,784),29178=>array(63,-63,943,853),29179=>array(54,-70,971,831),29180=>array(39,-70,954,830),29181=>array(44,-67,952,833),29182=>array(48,-67,967,833),29183=>array(37,-64,957,831),29184=>array(48,-69,951,831),29185=>array(41,-69,951,823),29186=>array(57,-69,964,840),29187=>array(45,-65,961,831),29188=>array(45,-65,948,827),29189=>array(45,-65,963,827),29190=>array(37,-72,967,828),29191=>array(49,-63,973,839),29192=>array(33,-68,965,838),29193=>array(47,-76,971,847),29194=>array(33,-68,962,839),29195=>array(55,-68,930,833),29196=>array(37,-75,948,841),29197=>array(36,-73,972,847),29198=>array(37,-64,990,845),29199=>array(27,-64,956,827),29200=>array(43,-71,954,830),29201=>array(43,-71,980,837),29202=>array(61,-80,961,858),29203=>array(54,-67,918,829),29204=>array(46,-62,972,841),29205=>array(50,-73,971,843),29206=>array(40,-63,962,843),29207=>array(36,-68,953,826),29208=>array(40,-83,979,841),29209=>array(36,-71,970,838),29210=>array(51,-75,973,824),29211=>array(53,-70,923,830),29212=>array(53,-70,962,834),29213=>array(39,-63,956,843),29214=>array(41,-70,962,831),29215=>array(36,-64,962,837),29216=>array(36,-68,960,830),29217=>array(36,-73,949,842),29218=>array(44,-75,958,845),29219=>array(47,-76,972,831),29220=>array(47,-66,942,830),29221=>array(47,-68,933,827),29222=>array(35,-67,975,838),29223=>array(48,-73,953,824),29224=>array(35,-70,968,830),29225=>array(40,-73,954,822),29226=>array(63,-64,944,835),29227=>array(83,181,938,697),29228=>array(50,-62,958,837),29229=>array(71,-73,924,824),29230=>array(50,-62,958,837),29231=>array(56,-67,950,846),29232=>array(54,-65,957,846),29233=>array(52,-73,943,824),29234=>array(33,-70,934,852),29235=>array(69,-52,916,844),29236=>array(74,-66,970,829),29237=>array(64,-61,943,842),29238=>array(95,-57,923,825),29239=>array(67,-62,951,823),29240=>array(45,-16,954,844),29241=>array(52,-79,964,839),29242=>array(55,-62,961,843),29243=>array(48,-63,960,840),29244=>array(66,-11,962,773),29245=>array(52,-69,963,835),29246=>array(50,-73,940,785),29247=>array(49,-69,732,820),29248=>array(42,-65,969,825),29249=>array(46,-71,951,829),29250=>array(46,-64,954,851),29251=>array(46,-64,968,831),29252=>array(36,-71,969,841),29253=>array(46,-73,949,851),29254=>array(39,-67,951,833),29255=>array(48,-75,895,829),29256=>array(34,-73,966,818),29257=>array(57,-77,957,826),29258=>array(50,-74,909,821),29259=>array(42,-70,966,840),29260=>array(42,-62,944,837),29261=>array(18,-75,927,819),29262=>array(18,-66,960,848),29263=>array(39,-57,950,853),29264=>array(18,-76,940,836),29265=>array(32,-78,922,833),29266=>array(34,-66,968,831),29267=>array(40,-70,957,846),29268=>array(23,-71,959,838),29269=>array(34,-66,959,839),29270=>array(31,-68,951,839),29271=>array(40,-73,949,851),29272=>array(33,-84,955,835),29273=>array(59,-53,929,780),29274=>array(51,-61,939,836),29275=>array(81,-68,939,830),29276=>array(155,-67,719,829),29277=>array(47,-67,938,829),29278=>array(51,-62,914,832),29279=>array(53,-67,947,844),29280=>array(43,-62,964,838),29281=>array(42,-62,953,829),29282=>array(56,-65,944,833),29283=>array(57,-49,914,844),29284=>array(57,-48,931,844),29285=>array(57,-67,954,849),29286=>array(34,-75,937,828),29287=>array(50,-68,974,840),29288=>array(50,-64,957,843),29289=>array(68,-73,921,829),29290=>array(48,-71,954,833),29291=>array(48,-71,949,825),29292=>array(39,-74,927,823),29293=>array(49,-69,937,826),29294=>array(55,-68,972,844),29295=>array(49,-67,949,829),29296=>array(50,-72,908,833),29297=>array(50,-66,960,833),29298=>array(44,-65,954,831),29299=>array(44,-66,960,825),29300=>array(48,-67,968,843),29301=>array(82,-61,934,845),29302=>array(43,-67,976,838),29303=>array(58,-69,984,827),29304=>array(54,-52,962,848),29305=>array(50,-68,944,831),29306=>array(26,-62,923,830),29307=>array(42,-68,950,838),29308=>array(52,-68,951,825),29309=>array(76,-67,945,838),29310=>array(52,-62,956,833),29311=>array(52,-52,955,842),29312=>array(45,-69,933,800),29313=>array(68,-61,945,835),29314=>array(59,-63,954,849),29315=>array(58,-65,956,848),29316=>array(45,-65,949,838),29317=>array(69,-67,918,827),29318=>array(58,-65,953,838),29319=>array(46,-67,959,839),29320=>array(61,-72,968,830),29321=>array(66,-67,957,837),29322=>array(25,-62,932,830),29323=>array(44,-67,947,830),29324=>array(42,-77,973,827),29325=>array(39,-68,962,830),29326=>array(65,-64,962,831),29327=>array(28,-79,906,832),29328=>array(47,-73,954,826),29329=>array(41,-75,970,825),29330=>array(42,-71,950,826),29331=>array(53,-69,914,830),29332=>array(42,-71,974,851),29333=>array(43,-72,952,823),29334=>array(60,-68,954,847),29335=>array(43,-65,965,850),29336=>array(57,-69,947,843),29337=>array(42,-73,947,848),29338=>array(43,-68,958,824),29339=>array(52,-68,965,834),29340=>array(22,-73,973,837),29341=>array(45,-65,954,835),29342=>array(51,-70,976,825),29343=>array(62,-67,912,781),29344=>array(33,-70,965,853),29345=>array(33,-70,944,825),29346=>array(39,-84,956,835),29347=>array(37,-76,973,837),29348=>array(38,-67,980,826),29349=>array(29,-69,966,840),29350=>array(28,-59,983,833),29351=>array(33,-63,960,841),29352=>array(40,-67,947,840),29353=>array(52,-73,975,833),29354=>array(30,-65,972,846),29355=>array(39,-66,946,839),29356=>array(77,-71,949,826),29357=>array(257,-63,643,790),29358=>array(60,-73,962,834),29359=>array(60,-59,933,809),29360=>array(42,-70,963,829),29361=>array(33,-69,952,833),29362=>array(103,-71,950,824),29363=>array(97,-56,897,851),29364=>array(35,-64,945,824),29365=>array(57,-55,960,829),29366=>array(44,-68,940,823),29367=>array(34,-65,911,832),29368=>array(29,-65,889,798),29369=>array(40,-70,956,817),29370=>array(47,-69,959,832),29371=>array(52,-62,950,840),29372=>array(42,-69,959,823),29373=>array(48,-62,951,820),29374=>array(92,-62,942,831),29375=>array(52,-65,943,829),29376=>array(40,-69,951,818),29377=>array(44,-63,956,839),29378=>array(50,-66,948,807),29379=>array(24,-45,944,830),29380=>array(50,-70,972,825),29381=>array(43,-57,943,807),29382=>array(57,-61,913,833),29383=>array(73,-61,964,835),29384=>array(32,-60,942,799),29385=>array(39,-44,950,813),29386=>array(45,-68,973,785),29387=>array(38,-72,973,804),29388=>array(47,-47,951,827),29389=>array(47,-52,958,834),29390=>array(69,-64,920,822),29391=>array(69,-55,943,831),29392=>array(32,-77,970,838),29393=>array(47,-76,960,836),29394=>array(61,-68,934,822),29395=>array(47,-70,958,835),29396=>array(32,-80,963,796),29397=>array(35,-73,920,831),29398=>array(35,-66,966,834),29399=>array(60,-61,921,842),29400=>array(36,-70,963,824),29401=>array(47,-54,957,801),29402=>array(43,-50,958,820),29403=>array(70,-66,886,843),29404=>array(51,-68,953,830),29405=>array(41,-58,934,836),29406=>array(43,-61,924,849),29407=>array(46,-50,962,816),29408=>array(48,-71,969,811),29409=>array(52,-65,963,812),29410=>array(53,-67,973,839),29411=>array(47,-67,963,833),29412=>array(49,-73,953,823),29413=>array(64,-64,909,836),29414=>array(43,-68,956,827),29415=>array(64,-64,958,834),29416=>array(45,-80,967,818),29417=>array(48,-59,954,824),29418=>array(50,-67,911,811),29419=>array(39,-60,955,826),29420=>array(33,-58,948,827),29421=>array(29,-63,942,832),29422=>array(29,-71,930,822),29423=>array(36,-60,955,837),29424=>array(32,-60,920,837),29425=>array(33,-74,959,822),29426=>array(20,-62,948,832),29427=>array(29,-62,971,855),29428=>array(50,-50,958,831),29429=>array(50,-62,957,826),29430=>array(45,-71,956,834),29431=>array(75,-65,918,815),29432=>array(45,-57,958,820),29433=>array(31,-63,967,833),29434=>array(47,-62,959,844),29435=>array(41,-64,973,854),29436=>array(37,-75,968,831),29437=>array(45,-70,962,794),29438=>array(47,-71,960,826),29439=>array(58,-65,971,792),29440=>array(45,-69,966,823),29441=>array(54,-64,917,830),29442=>array(51,-64,956,816),29443=>array(32,-68,946,832),29444=>array(52,-60,965,846),29445=>array(52,-65,950,829),29446=>array(38,-68,965,831),29447=>array(49,-70,955,823),29448=>array(65,-67,955,832),29449=>array(65,-71,957,833),29450=>array(47,-65,953,832),29451=>array(40,-62,962,845),29452=>array(38,-70,969,826),29453=>array(55,-65,984,836),29454=>array(39,-69,939,817),29455=>array(48,-76,908,818),29456=>array(48,-54,970,820),29457=>array(62,-63,958,782),29458=>array(101,-72,962,824),29459=>array(48,-68,968,817),29460=>array(53,-65,951,845),29461=>array(23,-61,945,831),29462=>array(53,-68,911,808),29463=>array(47,-62,955,835),29464=>array(46,-68,914,826),29465=>array(35,-68,963,837),29466=>array(59,-70,953,842),29467=>array(49,-59,958,808),29468=>array(46,-65,954,837),29469=>array(49,-67,953,819),29470=>array(40,-65,978,850),29471=>array(50,-63,968,827),29472=>array(40,-74,960,829),29473=>array(35,-64,894,808),29474=>array(62,-68,927,829),29475=>array(43,-73,959,813),29476=>array(35,-66,959,809),29477=>array(44,-64,964,809),29478=>array(46,-74,961,792),29479=>array(72,-69,923,793),29480=>array(32,-60,959,841),29481=>array(42,-61,951,803),29482=>array(49,-56,921,836),29483=>array(24,-69,933,824),29484=>array(56,-65,911,803),29485=>array(49,-66,966,828),29486=>array(55,-54,955,842),29487=>array(61,-69,950,830),29488=>array(42,-64,974,831),29489=>array(43,-64,961,819),29490=>array(68,-65,933,790),29491=>array(33,-61,967,819),29492=>array(36,-71,975,827),29493=>array(65,-73,929,825),29494=>array(40,-71,955,840),29495=>array(57,-69,970,845),29496=>array(40,-74,897,815),29497=>array(41,-53,962,835),29498=>array(41,-64,966,850),29499=>array(30,-62,962,831),29500=>array(20,-71,943,829),29501=>array(38,-73,950,789),29502=>array(25,-72,929,819),29503=>array(42,-69,977,833),29504=>array(30,-78,977,833),29505=>array(40,-61,922,819),29506=>array(39,-75,979,804),29507=>array(45,-55,969,842),29508=>array(37,-66,970,826),29509=>array(39,-67,954,840),29510=>array(50,-64,979,849),29511=>array(50,-64,974,828),29512=>array(50,-57,962,842),29513=>array(35,-70,984,836),29514=>array(40,-73,963,845),29515=>array(38,-74,960,852),29516=>array(29,-72,973,812),29517=>array(53,-65,958,851),29518=>array(39,-64,970,843),29519=>array(44,-72,971,823),29520=>array(44,-64,949,840),29521=>array(19,-74,953,822),29522=>array(25,-68,949,830),29523=>array(44,-71,960,838),29524=>array(44,-74,960,852),29525=>array(44,-65,953,833),29526=>array(59,-75,947,827),29527=>array(44,-74,981,805),29528=>array(33,-54,965,857),29529=>array(23,-80,977,826),29530=>array(39,-73,955,827),29531=>array(42,-68,983,827),29532=>array(44,-74,954,832),29533=>array(56,-68,924,824),29534=>array(51,-42,962,838),29535=>array(41,-70,961,833),29536=>array(35,-61,967,846),29537=>array(52,-57,932,833),29538=>array(39,-67,973,835),29539=>array(45,-67,972,833),29540=>array(44,-73,973,837),29541=>array(46,-75,960,835),29542=>array(37,-63,943,827),29543=>array(39,-55,965,826),29544=>array(64,-66,920,791),29545=>array(41,-66,967,826),29546=>array(32,-62,984,863),29547=>array(26,-63,975,864),29548=>array(44,-67,960,838),29549=>array(12,-60,936,838),29550=>array(34,-67,975,834),29551=>array(49,-62,966,828),29552=>array(40,-67,957,816),29553=>array(57,-66,960,842),29554=>array(30,-64,964,840),29555=>array(47,-66,951,791),29556=>array(37,-65,951,831),29557=>array(36,-74,971,842),29558=>array(39,-76,969,824),29559=>array(40,-71,972,838),29560=>array(59,-67,972,829),29561=>array(40,-72,954,830),29562=>array(37,-71,975,833),29563=>array(38,-76,958,831),29564=>array(35,-64,973,829),29565=>array(36,-69,987,842),29566=>array(43,-67,959,835),29567=>array(43,-74,963,808),29568=>array(41,-64,959,822),29569=>array(38,-67,961,813),29570=>array(38,-71,963,823),29571=>array(36,-60,965,831),29572=>array(95,-57,915,819),29573=>array(65,-70,973,852),29574=>array(44,-65,956,818),29575=>array(72,-69,928,840),29576=>array(64,-71,970,836),29577=>array(117,0,908,753),29578=>array(85,-30,935,770),29579=>array(92,14,908,766),29580=>array(81,-38,943,822),29581=>array(59,-17,934,825),29582=>array(71,-69,956,790),29583=>array(71,-76,892,823),29584=>array(51,-60,960,775),29585=>array(37,-67,936,762),29586=>array(57,-23,957,763),29587=>array(64,-69,920,829),29588=>array(57,-70,912,822),29589=>array(40,-65,951,787),29590=>array(41,-64,979,835),29591=>array(54,-74,953,785),29592=>array(54,-26,957,778),29593=>array(54,-67,922,825),29594=>array(54,-63,927,769),29595=>array(51,-60,909,787),29596=>array(44,-60,957,806),29597=>array(50,-73,949,821),29598=>array(49,-64,963,833),29599=>array(51,-58,972,827),29600=>array(48,-65,987,855),29601=>array(44,-75,956,775),29602=>array(42,-62,984,820),29603=>array(47,-64,935,841),29604=>array(42,-73,954,823),29605=>array(60,-71,905,785),29606=>array(47,-63,991,837),29607=>array(47,-60,964,834),29608=>array(56,-17,952,767),29609=>array(51,-68,958,779),29610=>array(43,-62,975,831),29611=>array(60,-59,957,840),29612=>array(55,-78,956,779),29613=>array(44,-67,958,823),29614=>array(42,-67,893,825),29615=>array(38,-57,951,782),29616=>array(33,-59,930,788),29617=>array(45,-33,950,828),29618=>array(37,-68,964,840),29619=>array(39,-65,953,835),29620=>array(50,-20,957,824),29621=>array(51,-73,955,827),29622=>array(47,-71,956,782),29623=>array(39,-67,945,832),29624=>array(48,-38,956,827),29625=>array(43,-55,961,829),29626=>array(35,-48,915,826),29627=>array(64,-64,969,830),29628=>array(46,-43,966,810),29629=>array(46,-54,909,849),29630=>array(49,-71,917,780),29631=>array(49,-74,906,783),29632=>array(66,-63,882,846),29633=>array(66,-29,961,779),29634=>array(50,-65,961,779),29635=>array(47,-73,956,831),29636=>array(47,-12,952,827),29637=>array(53,-61,917,838),29638=>array(49,-72,952,842),29639=>array(49,-27,954,783),29640=>array(43,-70,907,830),29641=>array(41,-55,964,794),29642=>array(54,-61,951,789),29643=>array(45,-70,911,830),29644=>array(48,-30,963,824),29645=>array(67,-72,974,849),29646=>array(53,-52,964,847),29647=>array(53,-13,950,760),29648=>array(52,-64,949,829),29649=>array(32,-61,926,824),29650=>array(59,-72,954,827),29651=>array(58,-66,971,837),29652=>array(57,-64,954,832),29653=>array(57,-65,959,835),29654=>array(57,-65,955,821),29655=>array(52,-59,957,827),29656=>array(51,-67,951,836),29657=>array(41,-68,965,831),29658=>array(58,-71,907,771),29659=>array(60,-68,954,828),29660=>array(54,-67,954,833),29661=>array(57,-71,905,780),29662=>array(45,-66,972,840),29663=>array(40,-66,993,789),29664=>array(66,-62,978,837),29665=>array(50,-60,951,795),29666=>array(76,-71,957,781),29667=>array(62,-59,914,837),29668=>array(25,-64,963,834),29669=>array(25,-66,949,789),29670=>array(25,-55,900,875),29671=>array(50,-64,969,835),29672=>array(58,-69,958,829),29673=>array(45,-67,956,833),29674=>array(38,-21,951,831),29675=>array(50,-67,966,840),29676=>array(60,-61,971,835),29677=>array(50,-61,951,811),29678=>array(45,-72,977,788),29679=>array(38,-32,959,833),29680=>array(38,-60,899,829),29681=>array(38,-52,959,782),29682=>array(37,-69,920,764),29683=>array(49,-58,957,834),29684=>array(49,-64,958,828),29685=>array(56,-14,954,788),29686=>array(56,-68,915,822),29687=>array(36,-64,962,833),29688=>array(58,-71,953,775),29689=>array(36,-68,951,834),29690=>array(62,-69,956,787),29691=>array(35,-69,955,843),29692=>array(57,-73,959,782),29693=>array(44,-64,973,832),29694=>array(56,-65,944,780),29695=>array(56,-71,969,780),29696=>array(57,-71,964,830),29697=>array(59,-73,968,831),29698=>array(61,-62,930,845),29699=>array(53,-63,959,831),29700=>array(57,-65,894,782),29701=>array(46,-66,965,815),29702=>array(35,-16,945,775),29703=>array(47,-63,963,833),29704=>array(55,-67,954,819),29705=>array(30,-70,960,830),29706=>array(43,-67,958,789),29707=>array(53,-68,953,837),29708=>array(54,-71,967,824),29709=>array(47,-65,900,832),29710=>array(57,-19,975,817),29711=>array(32,-49,938,827),29712=>array(35,-65,933,828),29713=>array(35,-67,940,833),29714=>array(43,-65,963,846),29715=>array(35,-69,968,828),29716=>array(35,-83,949,831),29717=>array(35,-65,957,841),29718=>array(47,-70,954,835),29719=>array(35,-71,943,839),29720=>array(35,-65,960,833),29721=>array(35,-68,965,835),29722=>array(52,-67,964,787),29723=>array(30,-67,958,786),29724=>array(35,-65,972,836),29725=>array(55,-74,963,787),29726=>array(55,-26,945,796),29727=>array(35,-65,955,843),29728=>array(53,-72,965,826),29729=>array(55,-76,962,822),29730=>array(32,-65,971,774),29731=>array(55,-68,951,838),29732=>array(43,-59,967,849),29733=>array(39,-67,940,834),29734=>array(48,-61,957,841),29735=>array(63,-22,958,784),29736=>array(53,-57,970,790),29737=>array(76,-67,918,787),29738=>array(50,-68,960,836),29739=>array(50,-71,959,831),29740=>array(49,-65,967,836),29741=>array(57,-67,962,830),29742=>array(47,-62,959,821),29743=>array(47,-65,924,837),29744=>array(53,-65,980,838),29745=>array(63,-72,911,774),29746=>array(47,-71,958,832),29747=>array(37,-63,964,826),29748=>array(34,-74,960,802),29749=>array(55,-54,959,791),29750=>array(71,-23,941,787),29751=>array(35,-53,976,820),29752=>array(54,-71,953,825),29753=>array(50,-64,960,798),29754=>array(53,-59,962,831),29755=>array(35,-23,982,843),29756=>array(33,-55,971,852),29757=>array(35,-69,959,835),29758=>array(35,-66,971,774),29759=>array(43,-62,967,793),29760=>array(45,-70,912,827),29761=>array(55,-65,930,788),29762=>array(51,-70,900,783),29763=>array(51,-64,970,842),29764=>array(43,-27,954,832),29765=>array(51,-70,969,788),29766=>array(36,-27,954,782),29767=>array(37,-66,948,835),29768=>array(40,-61,973,796),29769=>array(40,-52,963,823),29770=>array(45,-75,963,825),29771=>array(47,-65,960,832),29772=>array(47,-72,975,788),29773=>array(46,-77,977,832),29774=>array(53,-73,960,822),29775=>array(48,-70,951,845),29776=>array(50,-72,954,839),29777=>array(40,-51,960,850),29778=>array(39,-77,954,780),29779=>array(48,-62,965,835),29780=>array(48,-69,970,846),29781=>array(38,-67,969,789),29782=>array(38,-69,970,840),29783=>array(47,-65,982,843),29784=>array(47,-65,952,783),29785=>array(56,-65,920,841),29786=>array(69,-62,893,830),29787=>array(31,-68,962,829),29788=>array(30,-65,972,816),29789=>array(43,-30,948,851),29790=>array(62,-68,939,833),29791=>array(63,-46,958,785),29792=>array(37,-65,913,834),29793=>array(69,-67,954,840),29794=>array(53,-70,965,824),29795=>array(63,-72,965,836),29796=>array(46,-62,959,841),29797=>array(46,-32,964,783),29798=>array(63,-60,928,839),29799=>array(59,-68,971,835),29800=>array(36,-61,959,789),29801=>array(69,-19,935,839),29802=>array(60,-61,911,787),29803=>array(60,-63,937,835),29804=>array(54,-28,954,843),29805=>array(44,-67,956,850),29806=>array(56,-72,977,781),29807=>array(41,-61,954,798),29808=>array(53,-65,947,856),29809=>array(36,-64,955,840),29810=>array(45,-65,995,858),29811=>array(42,-29,951,839),29812=>array(47,-89,964,824),29813=>array(50,-69,971,787),29814=>array(40,-64,913,822),29815=>array(35,-70,944,827),29816=>array(35,-63,943,830),29817=>array(62,-77,967,818),29818=>array(45,-67,930,839),29819=>array(53,-66,955,802),29820=>array(53,-77,952,819),29821=>array(58,-71,968,826),29822=>array(38,-21,946,828),29823=>array(62,-22,957,792),29824=>array(45,-62,962,839),29825=>array(56,-43,972,837),29826=>array(45,-33,972,829),29827=>array(39,-69,943,833),29828=>array(51,-65,952,847),29829=>array(62,-72,982,822),29830=>array(45,-62,957,800),29831=>array(38,-71,972,828),29832=>array(48,-77,983,826),29833=>array(41,-64,962,833),29834=>array(56,-65,959,824),29835=>array(45,-68,952,828),29836=>array(45,-78,953,834),29837=>array(37,-68,945,831),29838=>array(39,-81,928,775),29839=>array(39,-72,988,841),29840=>array(38,-65,975,841),29841=>array(38,-65,961,836),29842=>array(52,-17,964,832),29843=>array(31,-53,957,829),29844=>array(51,-72,892,827),29845=>array(50,-67,950,783),29846=>array(45,-65,969,799),29847=>array(60,-46,954,818),29848=>array(57,-66,959,837),29849=>array(57,-67,969,850),29850=>array(50,-67,920,787),29851=>array(32,-67,954,831),29852=>array(37,-74,923,824),29853=>array(37,-70,966,833),29854=>array(47,-63,964,828),29855=>array(36,-57,951,801),29856=>array(43,-64,973,836),29857=>array(39,-64,967,844),29858=>array(62,-71,926,797),29859=>array(45,-61,972,839),29860=>array(48,-35,979,826),29861=>array(48,-70,977,830),29862=>array(48,-63,985,840),29863=>array(48,-39,946,836),29864=>array(37,-66,979,839),29865=>array(48,-64,980,837),29866=>array(45,-70,966,784),29867=>array(45,-62,935,836),29868=>array(50,-71,962,845),29869=>array(48,-73,971,811),29870=>array(42,-30,956,848),29871=>array(42,-64,994,858),29872=>array(40,-61,962,808),29873=>array(46,-67,970,782),29874=>array(47,-64,959,816),29875=>array(46,-69,966,816),29876=>array(50,-69,961,826),29877=>array(40,-66,969,840),29878=>array(50,-37,949,823),29879=>array(35,-71,973,832),29880=>array(62,-77,941,831),29881=>array(41,-65,968,833),29882=>array(84,-37,938,836),29883=>array(53,-68,949,785),29884=>array(40,-23,957,839),29885=>array(53,-42,962,799),29886=>array(60,-71,963,837),29887=>array(41,-63,981,841),29888=>array(49,-72,944,780),29889=>array(44,-74,967,823),29890=>array(49,-35,955,819),29891=>array(51,-65,928,786),29892=>array(40,-67,962,836),29893=>array(36,-70,972,839),29894=>array(40,-61,962,813),29895=>array(40,-64,963,789),29896=>array(35,-62,974,830),29897=>array(40,-72,958,829),29898=>array(56,-65,975,845),29899=>array(31,-66,968,839),29900=>array(40,-67,965,847),29901=>array(28,-67,969,831),29902=>array(37,-67,959,840),29903=>array(52,-61,972,834),29904=>array(45,-67,953,830),29905=>array(40,-60,966,790),29906=>array(38,-71,925,825),29907=>array(40,-65,909,787),29908=>array(37,-64,955,788),29909=>array(63,-35,968,778),29910=>array(47,-73,966,839),29911=>array(57,-63,933,838),29912=>array(54,-68,956,826),29913=>array(42,-70,960,832),29914=>array(46,-69,969,836),29915=>array(30,-62,974,832),29916=>array(59,-57,956,834),29917=>array(32,-77,991,826),29918=>array(38,-67,992,837),29919=>array(36,-73,959,837),29920=>array(36,-67,964,838),29921=>array(57,-73,976,826),29922=>array(47,-69,973,834),29923=>array(32,-69,958,828),29924=>array(37,-66,969,856),29925=>array(51,-65,971,836),29926=>array(83,-35,941,773),29927=>array(36,-29,958,771),29928=>array(44,-63,966,783),29929=>array(36,-29,958,771),29930=>array(49,-29,955,811),29931=>array(65,-64,943,842),29932=>array(41,-74,968,838),29933=>array(39,-77,968,820),29934=>array(43,-56,956,807),29935=>array(104,-58,954,766),29936=>array(36,-29,963,782),29937=>array(36,-29,968,771),29938=>array(36,-29,953,822),29939=>array(56,-75,968,818),29940=>array(37,-65,969,838),29941=>array(62,-72,960,832),29942=>array(48,-61,962,842),29943=>array(75,-60,951,838),29944=>array(36,-29,958,772),29945=>array(99,-64,968,791),29946=>array(49,-60,970,800),29947=>array(36,-65,969,831),29948=>array(49,-29,955,786),29949=>array(78,-56,963,833),29950=>array(38,-64,960,824),29951=>array(50,-50,955,839),29952=>array(39,-71,970,827),29953=>array(39,-71,964,835),29954=>array(36,-74,974,832),29955=>array(58,-54,962,836),29956=>array(30,-48,947,784),29957=>array(38,-29,960,790),29958=>array(65,-63,962,854),29959=>array(97,-66,934,825),29960=>array(43,-75,962,838),29961=>array(34,-77,974,836),29962=>array(35,-69,966,830),29963=>array(65,-70,962,829),29964=>array(105,-74,950,787),29965=>array(74,-66,961,828),29966=>array(70,-66,945,827),29967=>array(60,-59,954,834),29968=>array(37,-68,958,828),29969=>array(83,-64,964,848),29970=>array(44,-68,961,824),29971=>array(24,-47,938,825),29972=>array(34,-68,985,829),29973=>array(66,-55,966,838),29974=>array(55,-68,957,785),29975=>array(33,-59,949,835),29976=>array(76,-68,927,827),29977=>array(49,-76,959,828),29978=>array(66,-72,934,835),29979=>array(32,-48,959,845),29980=>array(34,-58,945,834),29981=>array(35,-75,962,823),29982=>array(74,-47,939,836),29983=>array(60,-8,934,824),29984=>array(129,-23,956,830),29985=>array(37,-29,956,830),29986=>array(50,-76,930,838),29987=>array(49,-74,928,831),29988=>array(72,-56,970,811),29989=>array(73,-57,923,812),29990=>array(40,-69,966,811),29991=>array(45,-66,952,829),29992=>array(52,-73,855,788),29993=>array(65,-61,936,785),29994=>array(74,-67,847,842),29995=>array(62,-67,956,843),29996=>array(140,-65,856,798),29997=>array(53,-81,935,783),29998=>array(48,-67,916,844),29999=>array(63,-61,945,836),30000=>array(133,-68,867,762),30001=>array(137,-70,862,833),30002=>array(140,-69,860,785),30003=>array(149,-67,851,833),30004=>array(172,-67,839,832),30005=>array(148,-31,954,824),30006=>array(149,-65,872,833),30007=>array(85,-62,889,783),30008=>array(37,-56,914,856),30009=>array(65,-68,939,833),30010=>array(107,-53,954,790),30011=>array(75,-57,925,800),30012=>array(98,-46,914,810),30013=>array(99,-74,891,823),30014=>array(126,-62,879,844),30015=>array(101,-7,948,830),30016=>array(50,-65,957,779),30017=>array(50,-55,957,833),30018=>array(98,-59,965,850),30019=>array(90,-59,921,837),30020=>array(153,-62,845,824),30021=>array(90,-56,889,830),30022=>array(46,-66,965,823),30023=>array(99,-63,912,845),30024=>array(107,-66,978,791),30025=>array(96,-68,962,833),30026=>array(88,-64,952,828),30027=>array(76,-52,955,835),30028=>array(54,-70,961,782),30029=>array(96,-72,974,835),30030=>array(110,-66,981,831),30031=>array(64,-69,944,780),30032=>array(72,-52,945,791),30033=>array(51,-59,903,838),30034=>array(56,-50,963,833),30035=>array(60,-72,967,813),30036=>array(93,-67,938,839),30037=>array(178,-72,823,780),30038=>array(81,-70,970,836),30039=>array(109,-72,902,843),30040=>array(79,-62,955,839),30041=>array(75,-68,897,818),30042=>array(29,-67,975,848),30043=>array(111,-64,978,853),30044=>array(76,-59,920,836),30045=>array(56,-65,972,836),30046=>array(77,-70,968,838),30047=>array(50,-69,965,817),30048=>array(143,-68,867,845),30049=>array(86,-61,943,846),30050=>array(58,-69,947,801),30051=>array(34,-68,968,834),30052=>array(106,-62,955,832),30053=>array(110,-66,962,839),30054=>array(89,-22,943,828),30055=>array(48,-75,963,812),30056=>array(50,-70,959,808),30057=>array(96,-64,959,795),30058=>array(53,-70,957,836),30059=>array(82,-24,938,836),30060=>array(37,-67,966,854),30061=>array(81,-62,961,850),30062=>array(94,-62,954,847),30063=>array(69,-69,961,849),30064=>array(72,-74,926,784),30065=>array(89,-71,916,797),30066=>array(33,-72,973,847),30067=>array(54,-50,952,813),30068=>array(82,-58,911,831),30069=>array(79,-34,934,836),30070=>array(103,-68,914,841),30071=>array(77,-67,976,786),30072=>array(97,-62,939,835),30073=>array(101,-63,966,844),30074=>array(54,-20,951,803),30075=>array(74,-14,972,836),30076=>array(92,-61,938,782),30077=>array(103,-15,953,851),30078=>array(115,-69,908,783),30079=>array(56,-69,963,839),30080=>array(42,-71,969,828),30081=>array(74,-73,970,811),30082=>array(54,-46,952,786),30083=>array(94,-42,961,840),30084=>array(100,-70,955,822),30085=>array(84,-48,961,814),30086=>array(31,-61,951,814),30087=>array(87,-63,938,833),30088=>array(52,-82,943,829),30089=>array(51,-39,949,822),30090=>array(54,-31,952,791),30091=>array(28,-66,975,773),30092=>array(52,-70,968,835),30093=>array(68,-7,957,787),30094=>array(30,-65,966,827),30095=>array(35,-71,960,821),30096=>array(59,-81,955,837),30097=>array(33,-68,945,827),30098=>array(37,-63,898,822),30099=>array(37,-63,914,822),30100=>array(63,-65,944,823),30101=>array(36,-59,957,852),30102=>array(30,-63,899,838),30103=>array(35,-59,924,842),30104=>array(36,-75,954,833),30105=>array(46,-71,953,852),30106=>array(48,-69,968,820),30107=>array(48,-64,951,841),30108=>array(54,-69,941,845),30109=>array(54,-69,941,815),30110=>array(54,-69,961,845),30111=>array(24,-65,925,836),30112=>array(32,-66,900,838),30113=>array(28,-70,914,840),30114=>array(44,-65,982,855),30115=>array(51,-71,952,825),30116=>array(47,-73,960,845),30117=>array(50,-70,959,825),30118=>array(47,-73,945,845),30119=>array(52,-69,966,841),30120=>array(47,-73,938,845),30121=>array(47,-73,938,845),30122=>array(39,-57,959,854),30123=>array(37,-71,953,840),30124=>array(27,-67,896,849),30125=>array(27,-67,928,850),30126=>array(26,-67,932,840),30127=>array(27,-63,942,848),30128=>array(43,-63,951,849),30129=>array(39,-67,953,829),30130=>array(43,-73,957,831),30131=>array(44,-67,944,834),30132=>array(25,-66,938,851),30133=>array(54,-74,963,841),30134=>array(49,-71,951,830),30135=>array(47,-78,946,835),30136=>array(59,-75,954,829),30137=>array(41,-72,974,826),30138=>array(50,-60,958,835),30139=>array(47,-82,935,834),30140=>array(40,-78,972,825),30141=>array(32,-74,954,839),30142=>array(43,-73,962,829),30143=>array(44,-65,945,849),30144=>array(41,-58,954,855),30145=>array(44,-58,945,852),30146=>array(43,-79,941,832),30147=>array(27,-77,933,834),30148=>array(53,-61,948,856),30149=>array(38,-71,933,840),30150=>array(40,-71,951,847),30151=>array(41,-65,955,827),30152=>array(19,-74,918,848),30153=>array(24,-60,919,827),30154=>array(43,-73,951,830),30155=>array(53,-79,968,835),30156=>array(34,-83,948,840),30157=>array(43,-69,972,833),30158=>array(47,-67,957,846),30159=>array(41,-60,960,850),30160=>array(50,-75,944,829),30161=>array(51,-70,945,836),30162=>array(48,-71,955,827),30163=>array(50,-75,944,829),30164=>array(38,-68,947,844),30165=>array(48,-68,964,825),30166=>array(27,-65,919,846),30167=>array(36,-51,964,859),30168=>array(45,-75,949,826),30169=>array(45,-72,954,839),30170=>array(56,-82,962,832),30171=>array(33,-68,935,834),30172=>array(34,-70,962,847),30173=>array(43,-60,962,841),30174=>array(44,-68,961,834),30175=>array(57,-68,945,843),30176=>array(48,-73,983,846),30177=>array(31,-73,954,843),30178=>array(46,-69,944,835),30179=>array(45,-63,960,836),30180=>array(49,-67,954,847),30181=>array(33,-73,951,847),30182=>array(57,-68,955,835),30183=>array(39,-65,965,845),30184=>array(56,-67,922,852),30185=>array(37,-70,961,831),30186=>array(29,-74,955,846),30187=>array(20,-65,913,839),30188=>array(42,-69,941,841),30189=>array(44,-73,959,845),30190=>array(43,-75,965,840),30191=>array(34,-55,959,858),30192=>array(55,-70,958,832),30193=>array(45,-70,942,848),30194=>array(34,-66,957,838),30195=>array(40,-69,971,834),30196=>array(38,-67,941,834),30197=>array(36,-71,974,851),30198=>array(45,-72,960,851),30199=>array(36,-63,965,849),30200=>array(31,-73,930,839),30201=>array(46,-68,951,843),30202=>array(59,-67,959,834),30203=>array(39,-75,960,845),30204=>array(33,-65,941,836),30205=>array(31,-68,954,848),30206=>array(35,-67,956,842),30207=>array(33,-67,945,834),30208=>array(38,-64,964,837),30209=>array(48,-66,952,838),30210=>array(38,-77,935,843),30211=>array(30,-65,967,848),30212=>array(37,-64,942,841),30213=>array(37,-71,939,846),30214=>array(14,-67,912,845),30215=>array(34,-55,954,854),30216=>array(46,-64,974,855),30217=>array(39,-64,955,826),30218=>array(38,-65,955,852),30219=>array(38,-66,960,838),30220=>array(38,-70,944,847),30221=>array(55,-70,956,845),30222=>array(38,-67,944,840),30223=>array(33,-55,961,857),30224=>array(41,-69,974,850),30225=>array(45,-69,948,848),30226=>array(41,-75,938,848),30227=>array(46,-72,972,849),30228=>array(51,-73,961,838),30229=>array(44,-67,981,854),30230=>array(27,-54,954,860),30231=>array(26,-68,934,847),30232=>array(38,-69,911,835),30233=>array(30,-69,961,836),30234=>array(42,-70,971,836),30235=>array(24,-60,970,855),30236=>array(47,-66,981,840),30237=>array(40,-58,969,861),30238=>array(36,-62,976,848),30239=>array(37,-72,938,833),30240=>array(34,-67,962,841),30241=>array(35,-70,966,841),30242=>array(32,-73,957,841),30243=>array(46,-65,958,831),30244=>array(46,-74,948,841),30245=>array(43,-66,956,851),30246=>array(22,-68,959,851),30247=>array(44,-74,942,833),30248=>array(45,-79,963,837),30249=>array(46,-61,952,849),30250=>array(21,-67,933,823),30251=>array(26,-65,923,840),30252=>array(26,-65,963,840),30253=>array(44,-66,979,847),30254=>array(26,-73,967,847),30255=>array(45,-69,955,834),30256=>array(52,-76,951,841),30257=>array(50,-69,966,836),30258=>array(53,-64,978,854),30259=>array(32,-68,971,851),30260=>array(23,-66,943,841),30261=>array(33,-67,963,847),30262=>array(52,-65,970,848),30263=>array(52,-65,979,848),30264=>array(45,-65,943,848),30265=>array(52,-65,951,848),30266=>array(31,-69,948,852),30267=>array(36,-73,941,829),30268=>array(49,-67,980,850),30269=>array(37,-62,954,836),30270=>array(26,-65,970,832),30271=>array(29,-65,909,838),30272=>array(23,-81,928,826),30273=>array(23,-87,940,826),30274=>array(46,-65,964,830),30275=>array(33,-67,971,847),30276=>array(23,-91,937,826),30277=>array(23,-71,912,836),30278=>array(49,-66,941,841),30279=>array(29,-57,942,846),30280=>array(35,-62,963,829),30281=>array(35,-65,947,849),30282=>array(35,-70,973,853),30283=>array(57,-69,967,854),30284=>array(38,-68,933,844),30285=>array(24,-68,923,835),30286=>array(37,-64,937,840),30287=>array(37,-64,957,850),30288=>array(51,-68,983,849),30289=>array(37,-87,957,850),30290=>array(42,-58,971,836),30291=>array(49,-73,983,831),30292=>array(25,-61,931,828),30293=>array(42,-57,957,836),30294=>array(45,-73,956,833),30295=>array(42,-67,933,836),30296=>array(53,-65,948,844),30297=>array(42,-74,969,832),30298=>array(37,-71,936,833),30299=>array(48,-67,989,843),30300=>array(45,-67,980,841),30301=>array(48,-69,920,838),30302=>array(21,-71,912,835),30303=>array(44,-69,973,844),30304=>array(38,-71,982,846),30305=>array(51,-71,976,844),30306=>array(45,-76,947,840),30307=>array(25,-66,920,841),30308=>array(57,-73,959,837),30309=>array(40,-69,973,852),30310=>array(50,-78,948,846),30311=>array(43,-65,962,836),30312=>array(47,-75,946,834),30313=>array(42,-67,985,854),30314=>array(40,-69,964,854),30315=>array(29,-69,919,838),30316=>array(45,-66,956,854),30317=>array(50,-68,939,850),30318=>array(38,-71,974,845),30319=>array(35,-77,947,844),30320=>array(35,-78,959,854),30321=>array(47,-71,954,856),30322=>array(39,-77,967,854),30323=>array(27,-60,972,853),30324=>array(21,-77,958,849),30325=>array(46,-72,963,833),30326=>array(100,220,956,730),30327=>array(80,-55,936,839),30328=>array(80,-78,936,840),30329=>array(38,-69,967,840),30330=>array(47,-51,957,837),30331=>array(57,-13,957,837),30332=>array(52,-63,960,829),30333=>array(199,-64,822,833),30334=>array(98,-67,914,780),30335=>array(113,-47,959,830),30336=>array(200,-26,891,841),30337=>array(53,-49,947,866),30338=>array(74,-26,924,842),30339=>array(60,-67,950,836),30340=>array(101,-54,882,838),30341=>array(94,-27,941,842),30342=>array(64,-62,947,837),30343=>array(80,-28,932,845),30344=>array(87,-80,954,831),30345=>array(107,-39,959,834),30346=>array(119,-78,962,839),30347=>array(33,-64,959,849),30348=>array(100,-53,967,847),30349=>array(134,-61,898,837),30350=>array(90,-60,952,824),30351=>array(111,-69,954,835),30352=>array(53,-64,947,849),30353=>array(76,-19,944,820),30354=>array(100,-72,956,829),30355=>array(84,-64,923,831),30356=>array(84,-62,944,810),30357=>array(56,-63,947,776),30358=>array(86,-62,930,825),30359=>array(93,-67,907,810),30360=>array(84,-59,959,838),30361=>array(42,-63,943,847),30362=>array(92,-20,933,839),30363=>array(114,-69,889,834),30364=>array(110,-63,957,837),30365=>array(69,-70,964,833),30366=>array(117,-69,982,831),30367=>array(112,-68,975,839),30368=>array(97,-65,953,833),30369=>array(92,-74,960,852),30370=>array(92,-61,964,837),30371=>array(88,-68,946,831),30372=>array(79,-67,948,836),30373=>array(90,-74,960,852),30374=>array(82,-55,954,857),30375=>array(82,-62,946,841),30376=>array(60,-43,954,842),30377=>array(43,-73,970,838),30378=>array(98,-52,969,851),30379=>array(87,-72,956,845),30380=>array(82,-67,941,817),30381=>array(110,-63,963,845),30382=>array(53,-71,940,832),30383=>array(33,-81,951,826),30384=>array(33,-62,965,836),30385=>array(27,-68,939,833),30386=>array(41,-67,932,821),30387=>array(33,-75,956,834),30388=>array(31,-75,956,844),30389=>array(57,-76,966,826),30390=>array(30,-75,976,834),30391=>array(36,-70,956,838),30392=>array(50,-68,966,832),30393=>array(38,-67,954,832),30394=>array(45,-73,971,838),30395=>array(46,-73,969,824),30396=>array(47,-73,956,835),30397=>array(47,-66,969,849),30398=>array(51,-71,969,835),30399=>array(70,34,944,715),30400=>array(57,-20,948,822),30401=>array(57,-14,948,784),30402=>array(57,-14,948,789),30403=>array(48,-17,958,770),30404=>array(60,-53,956,757),30405=>array(47,-11,956,841),30406=>array(49,-25,947,794),30407=>array(46,-40,957,827),30408=>array(59,-38,952,784),30409=>array(41,-21,974,836),30410=>array(45,-18,960,840),30411=>array(55,-37,954,836),30412=>array(48,-20,957,830),30413=>array(62,-22,954,838),30414=>array(55,-14,954,835),30415=>array(52,-19,925,823),30416=>array(50,-44,924,799),30417=>array(52,-23,943,820),30418=>array(47,-28,961,851),30419=>array(60,-20,952,821),30420=>array(59,-23,951,840),30421=>array(63,-32,952,817),30422=>array(39,-32,959,847),30423=>array(57,-33,954,840),30424=>array(65,-32,914,831),30425=>array(51,-33,952,834),30426=>array(61,-34,956,809),30427=>array(50,-23,947,832),30428=>array(63,-32,952,843),30429=>array(60,-23,954,850),30430=>array(63,-32,953,840),30431=>array(58,-27,952,789),30432=>array(57,-46,961,848),30433=>array(48,-35,948,829),30434=>array(58,-27,952,802),30435=>array(53,-26,947,824),30436=>array(62,-35,956,842),30437=>array(53,-24,961,837),30438=>array(26,-26,957,869),30439=>array(40,-78,941,833),30440=>array(38,-24,961,788),30441=>array(60,-18,959,834),30442=>array(53,-12,951,823),30443=>array(32,-54,957,863),30444=>array(58,-10,952,850),30445=>array(65,-38,978,842),30446=>array(206,-42,767,771),30447=>array(98,-62,931,770),30448=>array(101,-68,938,783),30449=>array(118,-59,956,789),30450=>array(63,-70,937,826),30451=>array(107,-27,953,824),30452=>array(95,-70,949,835),30453=>array(109,-40,965,833),30454=>array(75,-68,958,778),30455=>array(109,-61,900,821),30456=>array(43,-65,889,828),30457=>array(86,-34,952,829),30458=>array(116,-71,957,828),30459=>array(107,-62,958,803),30460=>array(100,-71,944,803),30461=>array(101,-59,957,826),30462=>array(68,-73,920,834),30463=>array(75,-55,984,851),30464=>array(130,-65,890,787),30465=>array(53,-70,939,829),30466=>array(119,-59,945,837),30467=>array(119,-73,962,762),30468=>array(96,-52,949,790),30469=>array(92,-62,971,813),30470=>array(119,-66,954,849),30471=>array(88,-72,943,826),30472=>array(93,-65,931,826),30473=>array(52,-70,880,781),30474=>array(101,-55,943,811),30475=>array(71,-67,912,818),30476=>array(73,-62,949,799),30477=>array(96,-21,919,763),30478=>array(85,-58,951,755),30479=>array(96,-67,953,832),30480=>array(114,-21,953,773),30481=>array(106,-70,916,827),30482=>array(119,-70,917,830),30483=>array(99,-73,959,827),30484=>array(50,-67,946,785),30485=>array(116,-71,967,835),30486=>array(119,-62,960,773),30487=>array(119,-58,924,844),30488=>array(42,-57,971,821),30489=>array(118,-65,952,835),30490=>array(65,-62,961,843),30491=>array(124,-64,987,839),30492=>array(124,-64,987,839),30493=>array(118,-64,927,827),30494=>array(78,-84,951,835),30495=>array(64,-84,936,835),30496=>array(98,-71,956,785),30497=>array(94,-53,963,829),30498=>array(34,-65,958,843),30499=>array(116,-71,973,835),30500=>array(95,-71,929,784),30501=>array(44,-52,947,852),30502=>array(76,-56,931,823),30503=>array(110,-73,903,780),30504=>array(96,-69,948,833),30505=>array(88,-49,927,823),30506=>array(88,-68,951,782),30507=>array(95,-55,942,837),30508=>array(88,-67,931,825),30509=>array(124,-21,959,832),30510=>array(88,-70,909,782),30511=>array(80,-64,927,824),30512=>array(88,-42,956,770),30513=>array(106,-78,965,821),30514=>array(110,-70,953,777),30515=>array(107,-71,906,825),30516=>array(111,-40,909,859),30517=>array(119,-65,935,847),30518=>array(94,-21,934,783),30519=>array(39,-67,964,838),30520=>array(86,-62,929,849),30521=>array(103,-51,969,853),30522=>array(104,-67,943,828),30523=>array(110,-70,954,823),30524=>array(96,-64,965,794),30525=>array(105,-74,966,820),30526=>array(57,-67,955,785),30527=>array(88,-61,976,840),30528=>array(39,-69,929,839),30529=>array(101,-72,922,824),30530=>array(37,-67,938,841),30531=>array(97,-73,930,835),30532=>array(104,-67,909,825),30533=>array(107,-49,955,806),30534=>array(98,-55,951,834),30535=>array(110,-64,915,853),30536=>array(88,-16,952,788),30537=>array(88,-24,958,829),30538=>array(107,-48,902,803),30539=>array(97,-68,954,828),30540=>array(100,-71,949,825),30541=>array(96,-50,954,804),30542=>array(109,-47,948,864),30543=>array(112,-68,903,782),30544=>array(100,-69,940,820),30545=>array(96,-18,937,823),30546=>array(118,-75,983,829),30547=>array(100,-74,960,829),30548=>array(105,-70,969,840),30549=>array(112,-66,967,844),30550=>array(112,-74,972,823),30551=>array(105,-66,929,781),30552=>array(76,-73,930,781),30553=>array(110,-79,979,829),30554=>array(97,-72,933,790),30555=>array(109,-68,935,831),30556=>array(98,-63,930,836),30557=>array(72,-69,908,849),30558=>array(110,-64,970,830),30559=>array(95,-48,939,857),30560=>array(109,-30,965,841),30561=>array(87,-26,947,833),30562=>array(98,-64,937,832),30563=>array(57,-67,956,835),30564=>array(104,-64,955,792),30565=>array(104,-64,951,856),30566=>array(96,-30,948,826),30567=>array(97,-48,944,860),30568=>array(137,-57,969,845),30569=>array(118,-73,966,838),30570=>array(78,-70,932,783),30571=>array(92,-72,941,833),30572=>array(94,-65,944,831),30573=>array(113,-68,911,780),30574=>array(108,-67,980,839),30575=>array(88,-69,941,834),30576=>array(92,-65,948,829),30577=>array(88,-68,965,791),30578=>array(92,-22,945,788),30579=>array(92,-32,980,829),30580=>array(92,-65,936,787),30581=>array(107,-53,981,829),30582=>array(92,-64,978,842),30583=>array(92,-55,964,827),30584=>array(111,-64,906,789),30585=>array(98,-66,932,831),30586=>array(109,-74,962,834),30587=>array(92,-20,959,855),30588=>array(107,-69,965,786),30589=>array(86,-62,952,833),30590=>array(58,-72,950,849),30591=>array(49,-66,958,833),30592=>array(40,-65,982,845),30593=>array(111,-69,971,785),30594=>array(44,-67,970,832),30595=>array(100,-69,954,831),30596=>array(93,-65,929,835),30597=>array(79,-79,950,828),30598=>array(92,-60,938,832),30599=>array(97,-63,956,833),30600=>array(121,-79,980,781),30601=>array(93,-73,987,827),30602=>array(92,-77,956,843),30603=>array(94,-78,961,833),30604=>array(90,-26,927,833),30605=>array(97,-58,966,841),30606=>array(89,-62,932,824),30607=>array(54,-75,971,782),30608=>array(124,-45,896,816),30609=>array(91,-67,938,790),30610=>array(87,-60,917,826),30611=>array(104,-66,914,838),30612=>array(92,-74,947,833),30613=>array(98,-50,945,854),30614=>array(114,-69,938,813),30615=>array(116,-70,933,828),30616=>array(89,-23,953,801),30617=>array(109,-72,970,826),30618=>array(107,-80,958,837),30619=>array(108,-69,973,835),30620=>array(97,-73,949,821),30621=>array(105,-65,951,834),30622=>array(95,-69,936,831),30623=>array(82,-70,955,789),30624=>array(79,-39,942,823),30625=>array(109,-72,961,822),30626=>array(88,-83,913,830),30627=>array(94,-37,962,823),30628=>array(79,-62,906,793),30629=>array(102,-72,959,841),30630=>array(79,-65,956,836),30631=>array(90,-62,941,837),30632=>array(108,-73,966,821),30633=>array(88,-72,894,779),30634=>array(86,-23,935,843),30635=>array(114,-70,961,782),30636=>array(95,-68,944,830),30637=>array(94,-66,975,841),30638=>array(100,-62,970,847),30639=>array(88,-68,911,796),30640=>array(85,-75,960,828),30641=>array(102,-70,950,824),30642=>array(106,-68,928,783),30643=>array(95,-35,940,833),30644=>array(105,-71,961,827),30645=>array(109,-62,951,838),30646=>array(108,-64,969,839),30647=>array(105,-68,901,785),30648=>array(98,-70,957,827),30649=>array(89,-69,944,838),30650=>array(96,-70,952,839),30651=>array(68,-75,919,838),30652=>array(82,-67,951,852),30653=>array(52,-64,969,836),30654=>array(72,-46,910,801),30655=>array(39,-65,947,790),30656=>array(68,-77,981,828),30657=>array(99,-23,974,825),30658=>array(94,-66,961,786),30659=>array(76,-63,952,844),30660=>array(92,-76,949,830),30661=>array(81,-70,953,805),30662=>array(96,-65,963,828),30663=>array(91,-64,959,820),30664=>array(81,-70,957,848),30665=>array(98,-55,952,856),30666=>array(103,-68,919,835),30667=>array(87,-67,948,808),30668=>array(102,-72,964,850),30669=>array(31,-62,974,799),30670=>array(94,-65,963,844),30671=>array(92,-69,939,853),30672=>array(99,-67,935,785),30673=>array(68,-67,953,832),30674=>array(77,-67,946,833),30675=>array(91,-68,951,831),30676=>array(99,-70,938,824),30677=>array(41,-72,957,840),30678=>array(97,-62,965,804),30679=>array(71,-71,953,842),30680=>array(92,-68,947,830),30681=>array(88,-54,899,806),30682=>array(102,-77,905,786),30683=>array(81,-57,926,793),30684=>array(39,-66,972,850),30685=>array(39,-77,960,846),30686=>array(60,-68,927,786),30687=>array(44,-67,940,833),30688=>array(33,-70,954,825),30689=>array(43,-61,960,811),30690=>array(69,-71,947,828),30691=>array(42,-66,965,843),30692=>array(80,-56,964,837),30693=>array(69,-73,911,838),30694=>array(62,-67,941,836),30695=>array(34,-67,893,831),30696=>array(37,-68,980,834),30697=>array(39,-61,947,825),30698=>array(39,-65,932,834),30699=>array(27,-61,951,839),30700=>array(33,-29,955,832),30701=>array(51,-77,948,809),30702=>array(36,-73,951,833),30703=>array(33,-67,963,827),30704=>array(59,-70,934,838),30705=>array(40,-71,980,827),30706=>array(34,-65,980,837),30707=>array(67,-70,909,768),30708=>array(39,-66,948,761),30709=>array(61,-61,880,824),30710=>array(39,-57,929,774),30711=>array(44,-63,953,786),30712=>array(38,-64,959,780),30713=>array(37,-66,962,788),30714=>array(29,-33,959,828),30715=>array(51,-29,972,837),30716=>array(39,-2,957,761),30717=>array(59,-77,927,841),30718=>array(40,-70,942,785),30719=>array(49,-68,921,818),30720=>array(23,-59,898,767),30721=>array(39,-62,905,768),30722=>array(38,-68,971,824),30723=>array(45,-69,954,785),30724=>array(22,-69,955,829),30725=>array(44,-73,981,821),30726=>array(49,-70,990,836),30727=>array(42,-65,976,842),30728=>array(32,-71,970,772),30729=>array(48,-62,956,842),30730=>array(42,-64,957,843),30731=>array(42,-3,954,822),30732=>array(53,-62,925,829),30733=>array(43,-71,971,844),30734=>array(36,-77,971,828),30735=>array(43,-69,967,785),30736=>array(43,-70,969,786),30737=>array(51,-61,951,778),30738=>array(32,-51,952,818),30739=>array(39,-69,972,785),30740=>array(36,-71,956,780),30741=>array(42,-63,954,837),30742=>array(21,-68,921,826),30743=>array(29,-67,951,820),30744=>array(28,-44,944,824),30745=>array(42,-35,952,780),30746=>array(26,-62,929,788),30747=>array(41,-69,972,837),30748=>array(24,-69,954,781),30749=>array(50,-56,956,827),30750=>array(42,-64,987,839),30751=>array(41,-62,956,848),30752=>array(32,-17,954,792),30753=>array(52,-35,964,765),30754=>array(44,-59,952,783),30755=>array(44,-32,950,844),30756=>array(42,-29,943,831),30757=>array(29,-55,959,831),30758=>array(41,-53,960,843),30759=>array(40,-65,945,827),30760=>array(47,-75,964,832),30761=>array(42,-65,921,831),30762=>array(38,-60,958,784),30763=>array(57,-37,962,824),30764=>array(39,-19,952,816),30765=>array(37,-65,963,830),30766=>array(44,-53,962,855),30767=>array(51,-64,976,828),30768=>array(34,-68,951,780),30769=>array(46,-77,979,841),30770=>array(35,-29,963,835),30771=>array(43,-54,945,779),30772=>array(46,-70,958,835),30773=>array(23,-59,971,836),30774=>array(42,-66,886,843),30775=>array(59,-70,922,836),30776=>array(36,-26,956,788),30777=>array(35,-68,971,830),30778=>array(54,-72,946,761),30779=>array(29,-62,933,826),30780=>array(31,-31,964,840),30781=>array(42,-57,928,786),30782=>array(32,-60,947,828),30783=>array(33,-66,948,822),30784=>array(35,-60,905,830),30785=>array(30,-33,938,772),30786=>array(32,-11,965,845),30787=>array(37,-65,980,839),30788=>array(35,-66,960,831),30789=>array(41,-20,954,832),30790=>array(35,-65,963,841),30791=>array(46,-78,909,839),30792=>array(41,-72,956,824),30793=>array(42,-68,958,824),30794=>array(45,-72,952,822),30795=>array(35,-73,969,836),30796=>array(28,-57,972,849),30797=>array(30,-60,973,791),30798=>array(36,-63,907,832),30799=>array(36,-69,953,788),30800=>array(43,-70,909,782),30801=>array(36,-70,958,839),30802=>array(35,-68,948,780),30803=>array(25,-32,959,833),30804=>array(35,-71,949,826),30805=>array(38,-67,940,775),30806=>array(30,-74,945,826),30807=>array(29,-72,936,821),30808=>array(35,-64,903,795),30809=>array(25,-25,938,826),30810=>array(35,-66,963,823),30811=>array(35,-63,955,846),30812=>array(42,-20,956,791),30813=>array(50,-70,943,833),30814=>array(41,-67,954,829),30815=>array(35,-67,967,824),30816=>array(45,-71,972,834),30817=>array(35,-68,937,832),30818=>array(41,-70,961,819),30819=>array(35,-68,953,830),30820=>array(33,-67,983,833),30821=>array(42,-68,950,838),30822=>array(35,-51,951,802),30823=>array(35,-64,895,785),30824=>array(49,-62,964,838),30825=>array(50,-65,938,830),30826=>array(33,-54,959,830),30827=>array(26,-70,964,830),30828=>array(46,-61,978,784),30829=>array(41,-35,959,805),30830=>array(51,-57,907,852),30831=>array(34,-69,960,787),30832=>array(51,-65,942,830),30833=>array(49,-71,915,777),30834=>array(42,-64,980,833),30835=>array(35,-54,970,835),30836=>array(32,-65,962,828),30837=>array(39,-63,958,839),30838=>array(35,-66,969,830),30839=>array(32,-32,939,811),30840=>array(35,-67,948,836),30841=>array(39,-61,977,829),30842=>array(35,-56,959,785),30843=>array(44,-68,987,782),30844=>array(59,-78,919,779),30845=>array(35,-32,954,839),30846=>array(29,-16,953,853),30847=>array(37,-27,950,837),30848=>array(44,-67,954,827),30849=>array(26,-54,971,843),30850=>array(35,-57,969,850),30851=>array(36,-72,950,823),30852=>array(44,-70,972,823),30853=>array(36,-72,900,780),30854=>array(41,-52,949,843),30855=>array(42,-71,962,833),30856=>array(35,-65,960,833),30857=>array(53,-68,918,785),30858=>array(35,-57,974,840),30859=>array(35,-67,932,836),30860=>array(35,-67,966,836),30861=>array(33,-52,952,796),30862=>array(43,-64,951,834),30863=>array(39,-72,955,820),30864=>array(35,-67,981,839),30865=>array(31,-68,956,844),30866=>array(35,-23,982,843),30867=>array(44,-68,951,840),30868=>array(31,-62,968,831),30869=>array(35,-64,964,835),30870=>array(44,-70,958,847),30871=>array(43,-69,961,834),30872=>array(44,-74,960,829),30873=>array(47,-67,908,786),30874=>array(39,-63,954,840),30875=>array(27,-75,923,826),30876=>array(23,-71,949,839),30877=>array(35,-72,975,788),30878=>array(45,-50,936,798),30879=>array(35,-62,968,833),30880=>array(41,-67,952,837),30881=>array(37,-64,956,830),30882=>array(46,-65,907,785),30883=>array(49,-68,927,788),30884=>array(47,-71,971,823),30885=>array(32,-67,915,824),30886=>array(50,-70,956,849),30887=>array(60,-67,937,845),30888=>array(44,-73,975,784),30889=>array(44,-72,970,783),30890=>array(28,-54,948,841),30891=>array(46,-74,969,825),30892=>array(28,-73,971,785),30893=>array(29,-68,954,788),30894=>array(35,-72,979,788),30895=>array(34,-61,951,849),30896=>array(45,-29,957,845),30897=>array(34,-72,955,834),30898=>array(47,-67,939,842),30899=>array(39,-72,970,829),30900=>array(41,-24,964,830),30901=>array(32,-74,962,836),30902=>array(35,-57,961,834),30903=>array(35,-71,962,839),30904=>array(35,-69,971,789),30905=>array(25,-10,922,818),30906=>array(34,-69,950,843),30907=>array(29,-57,949,835),30908=>array(50,-60,933,781),30909=>array(35,-66,969,791),30910=>array(30,-70,961,785),30911=>array(39,-75,925,795),30912=>array(31,-58,963,838),30913=>array(37,-57,955,836),30914=>array(46,-65,913,834),30915=>array(37,-73,966,832),30916=>array(46,-73,966,830),30917=>array(37,-76,954,834),30918=>array(32,-69,946,793),30919=>array(32,-53,968,852),30920=>array(41,-64,972,857),30921=>array(43,-62,990,790),30922=>array(52,-68,944,788),30923=>array(20,-40,934,849),30924=>array(32,-70,955,825),30925=>array(19,-71,946,841),30926=>array(29,-75,967,841),30927=>array(34,-68,985,840),30928=>array(42,-61,956,844),30929=>array(41,-24,964,831),30930=>array(41,-64,941,785),30931=>array(32,-58,963,844),30932=>array(25,-59,963,849),30933=>array(32,-24,959,832),30934=>array(29,-57,921,800),30935=>array(32,-71,959,838),30936=>array(31,-67,956,827),30937=>array(24,-79,968,846),30938=>array(43,-66,957,831),30939=>array(39,-50,933,846),30940=>array(43,-55,960,850),30941=>array(40,-71,964,827),30942=>array(44,-75,898,824),30943=>array(51,-66,971,783),30944=>array(39,-64,958,839),30945=>array(25,-70,918,831),30946=>array(36,-72,964,824),30947=>array(36,-64,997,858),30948=>array(31,-66,957,837),30949=>array(47,-68,967,780),30950=>array(47,-64,965,787),30951=>array(43,-68,975,839),30952=>array(37,-64,939,833),30953=>array(45,-72,969,825),30954=>array(38,-65,966,838),30955=>array(38,-70,955,836),30956=>array(44,-67,952,832),30957=>array(45,-73,956,785),30958=>array(30,-61,945,841),30959=>array(33,-69,960,835),30960=>array(35,-65,952,846),30961=>array(33,-66,957,833),30962=>array(32,-63,975,829),30963=>array(46,-72,900,824),30964=>array(41,-21,989,838),30965=>array(41,-67,924,787),30966=>array(41,-64,944,846),30967=>array(37,-74,953,832),30968=>array(41,-76,974,851),30969=>array(56,-70,953,781),30970=>array(41,-72,968,828),30971=>array(30,-57,971,839),30972=>array(53,-68,966,832),30973=>array(38,-63,971,837),30974=>array(42,-65,940,787),30975=>array(32,-65,953,793),30976=>array(74,-68,926,785),30977=>array(45,-68,961,840),30978=>array(53,-70,956,825),30979=>array(54,-64,945,833),30980=>array(44,-62,988,833),30981=>array(41,-72,968,839),30982=>array(44,-68,969,858),30983=>array(43,-62,969,850),30984=>array(36,-58,963,825),30985=>array(43,-75,975,835),30986=>array(41,-59,959,818),30987=>array(51,-64,949,786),30988=>array(36,-65,935,789),30989=>array(53,-59,933,836),30990=>array(36,-65,961,825),30991=>array(44,-55,951,833),30992=>array(39,-71,937,833),30993=>array(40,-52,933,847),30994=>array(29,-58,965,860),30995=>array(44,-35,951,778),30996=>array(43,-68,956,836),30997=>array(44,-67,945,819),30998=>array(44,-70,952,821),30999=>array(51,-74,960,836),31000=>array(46,-69,954,786),31001=>array(33,-61,967,832),31002=>array(44,-20,957,835),31003=>array(41,-27,954,823),31004=>array(41,-67,984,839),31005=>array(33,-65,953,783),31006=>array(44,-66,976,830),31007=>array(22,-60,975,794),31008=>array(51,-31,949,846),31009=>array(34,-67,948,828),31010=>array(44,-76,975,844),31011=>array(32,-67,970,830),31012=>array(35,-67,976,828),31013=>array(41,-66,975,794),31014=>array(39,-74,959,834),31015=>array(46,-55,932,795),31016=>array(50,-54,936,792),31017=>array(36,-76,959,833),31018=>array(32,-63,962,799),31019=>array(26,-71,965,844),31020=>array(50,-70,962,833),31021=>array(59,-70,978,775),31022=>array(22,-60,975,840),31023=>array(36,-65,951,829),31024=>array(49,-69,953,790),31025=>array(44,-68,949,849),31026=>array(44,-62,956,842),31027=>array(26,-64,957,845),31028=>array(31,-61,951,832),31029=>array(44,-62,923,789),31030=>array(64,-58,936,839),31031=>array(50,-23,950,838),31032=>array(35,-75,979,829),31033=>array(33,-68,982,789),31034=>array(91,-68,932,757),31035=>array(235,-68,689,820),31036=>array(42,-59,961,820),31037=>array(54,-57,912,839),31038=>array(47,-69,949,822),31039=>array(48,-56,921,844),31040=>array(77,-68,945,768),31041=>array(39,-68,935,815),31042=>array(35,-55,963,847),31043=>array(35,-69,905,826),31044=>array(35,-70,976,835),31045=>array(45,-69,967,834),31046=>array(38,-67,964,841),31047=>array(36,-63,968,834),31048=>array(46,-67,946,834),31049=>array(36,-63,944,834),31050=>array(35,-55,960,848),31051=>array(36,-76,963,831),31052=>array(41,-71,918,831),31053=>array(45,-65,948,845),31054=>array(41,-71,906,826),31055=>array(34,-68,956,828),31056=>array(40,-60,958,843),31057=>array(34,-68,977,831),31058=>array(34,-72,908,824),31059=>array(47,-70,957,828),31060=>array(42,-52,949,850),31061=>array(42,-69,970,835),31062=>array(35,-73,953,818),31063=>array(57,-69,955,814),31064=>array(29,-52,964,763),31065=>array(34,-57,970,842),31066=>array(72,-69,960,838),31067=>array(32,-69,941,832),31068=>array(32,-69,953,836),31069=>array(35,-67,960,822),31070=>array(55,-67,904,837),31071=>array(64,-67,945,836),31072=>array(67,-68,909,775),31073=>array(60,-64,948,823),31074=>array(36,-64,962,834),31075=>array(44,-68,962,839),31076=>array(47,-69,906,833),31077=>array(39,-68,956,843),31078=>array(39,-68,968,836),31079=>array(37,-69,969,847),31080=>array(73,-61,952,788),31081=>array(50,-70,966,837),31082=>array(46,-72,955,833),31083=>array(27,-54,973,853),31084=>array(50,-69,956,837),31085=>array(46,-66,957,839),31086=>array(50,-69,953,838),31087=>array(30,-65,925,821),31088=>array(43,-64,959,843),31089=>array(50,-69,959,846),31090=>array(35,-65,970,842),31091=>array(45,-72,964,839),31092=>array(39,-74,951,841),31093=>array(50,-69,923,837),31094=>array(50,-69,925,842),31095=>array(36,-63,952,834),31096=>array(28,-61,886,822),31097=>array(27,-64,920,840),31098=>array(57,-66,963,829),31099=>array(50,-70,911,837),31100=>array(31,-53,982,851),31101=>array(40,-67,954,838),31102=>array(50,-69,968,837),31103=>array(32,-69,969,840),31104=>array(39,-74,915,816),31105=>array(46,-65,957,834),31106=>array(33,-70,908,835),31107=>array(50,-69,959,839),31108=>array(38,-64,963,834),31109=>array(45,-65,955,847),31110=>array(36,-69,956,849),31111=>array(50,-69,959,837),31112=>array(44,-68,951,835),31113=>array(28,-69,953,842),31114=>array(32,-69,958,832),31115=>array(38,-53,954,847),31116=>array(50,-69,943,843),31117=>array(36,-63,912,834),31118=>array(44,-67,971,832),31119=>array(38,-69,943,834),31120=>array(46,-69,957,835),31121=>array(32,-69,930,804),31122=>array(43,-69,970,839),31123=>array(38,-72,950,826),31124=>array(32,-69,966,797),31125=>array(38,-62,968,842),31126=>array(28,-57,978,843),31127=>array(51,-62,967,835),31128=>array(36,-56,953,846),31129=>array(32,-64,966,846),31130=>array(31,-70,985,832),31131=>array(30,-78,961,833),31132=>array(88,-67,941,823),31133=>array(50,-69,964,802),31134=>array(50,-75,940,841),31135=>array(50,-69,954,843),31136=>array(30,-71,955,836),31137=>array(49,-64,948,842),31138=>array(34,-72,915,826),31139=>array(48,-71,959,842),31140=>array(47,-68,899,835),31141=>array(38,-69,971,837),31142=>array(63,-66,940,835),31143=>array(60,-69,947,835),31144=>array(42,-72,973,843),31145=>array(50,-69,973,837),31146=>array(55,-69,955,791),31147=>array(32,-55,954,842),31148=>array(51,-71,963,840),31149=>array(44,-66,980,845),31150=>array(60,-69,952,833),31151=>array(50,-70,979,840),31152=>array(39,-64,973,827),31153=>array(26,-69,960,835),31154=>array(35,-72,947,835),31155=>array(50,-69,970,846),31156=>array(24,-59,972,868),31157=>array(43,-69,959,836),31158=>array(30,-81,968,825),31159=>array(37,-68,965,830),31160=>array(72,-59,875,818),31161=>array(120,-71,883,829),31162=>array(130,-64,882,785),31163=>array(69,-65,939,838),31164=>array(131,-65,869,834),31165=>array(38,-59,962,856),31166=>array(55,-70,958,825),31167=>array(52,-64,947,831),31168=>array(50,-59,951,830),31169=>array(40,-68,959,833),31170=>array(50,-50,954,823),31171=>array(50,-76,921,817),31172=>array(44,-67,955,833),31173=>array(45,-67,951,833),31174=>array(49,-70,947,820),31175=>array(50,-70,960,833),31176=>array(36,-52,904,846),31177=>array(42,-70,950,823),31178=>array(47,-69,968,834),31179=>array(43,-73,964,837),31180=>array(59,-71,968,829),31181=>array(45,-70,917,826),31182=>array(39,-69,962,824),31183=>array(48,-71,960,838),31184=>array(51,-69,955,829),31185=>array(41,-69,955,829),31186=>array(43,-70,959,827),31187=>array(41,-69,965,835),31188=>array(41,-69,966,843),31189=>array(39,-61,954,829),31190=>array(42,-76,972,827),31191=>array(41,-70,955,829),31192=>array(43,-61,969,828),31193=>array(41,-69,956,836),31194=>array(41,-69,944,833),31195=>array(49,-71,951,832),31196=>array(35,-71,952,829),31197=>array(51,-71,976,822),31198=>array(53,-70,924,827),31199=>array(32,-73,958,817),31200=>array(42,-70,964,829),31201=>array(41,-69,975,844),31202=>array(37,-78,975,831),31203=>array(39,-59,972,839),31204=>array(42,-75,951,810),31205=>array(41,-69,947,830),31206=>array(52,-68,964,835),31207=>array(39,-72,979,835),31208=>array(41,-69,951,842),31209=>array(36,-70,973,839),31210=>array(37,-49,966,859),31211=>array(34,-65,954,834),31212=>array(41,-57,941,835),31213=>array(42,-62,937,835),31214=>array(48,-73,960,829),31215=>array(24,-62,939,830),31216=>array(44,-59,961,835),31217=>array(59,-69,941,829),31218=>array(31,-71,942,835),31219=>array(41,-69,958,839),31220=>array(41,-69,985,853),31221=>array(66,-69,939,829),31222=>array(39,-69,973,829),31223=>array(47,-67,951,822),31224=>array(44,-61,951,836),31225=>array(33,-69,954,829),31226=>array(45,-59,955,827),31227=>array(49,-70,935,839),31228=>array(55,-69,945,836),31229=>array(30,-61,896,835),31230=>array(33,-72,959,835),31231=>array(67,-69,933,839),31232=>array(41,-71,961,846),31233=>array(47,-61,930,846),31234=>array(36,-64,968,850),31235=>array(35,-55,951,842),31236=>array(40,-72,969,830),31237=>array(36,-70,970,819),31238=>array(26,-64,871,821),31239=>array(62,-64,938,817),31240=>array(43,-60,956,828),31241=>array(24,-64,976,818),31242=>array(49,-52,932,864),31243=>array(29,-70,949,816),31244=>array(38,-55,967,862),31245=>array(52,-70,947,837),31246=>array(36,-70,954,840),31247=>array(26,-64,954,827),31248=>array(41,-71,977,836),31249=>array(28,-51,951,846),31250=>array(43,-72,903,823),31251=>array(47,-72,951,825),31252=>array(30,-62,970,840),31253=>array(47,-72,954,834),31254=>array(26,-70,947,841),31255=>array(38,-67,954,844),31256=>array(34,-52,952,846),31257=>array(39,-57,954,852),31258=>array(41,-70,955,832),31259=>array(45,-70,905,828),31260=>array(33,-57,967,835),31261=>array(70,-73,930,822),31262=>array(27,-72,965,819),31263=>array(76,-61,930,816),31264=>array(49,-80,911,818),31265=>array(41,-64,959,851),31266=>array(43,-70,969,825),31267=>array(39,-64,947,838),31268=>array(36,-64,953,849),31269=>array(56,-65,950,817),31270=>array(33,-69,951,833),31271=>array(34,-65,966,829),31272=>array(32,-68,918,827),31273=>array(55,-64,945,821),31274=>array(50,-64,950,837),31275=>array(34,-74,962,821),31276=>array(26,-71,961,823),31277=>array(21,-68,970,831),31278=>array(47,-65,956,836),31279=>array(33,-71,967,829),31280=>array(33,-50,972,845),31281=>array(32,-69,956,835),31282=>array(32,-64,936,824),31283=>array(19,-61,947,834),31284=>array(26,-64,966,850),31285=>array(26,-64,965,843),31286=>array(26,-72,949,835),31287=>array(24,-66,952,823),31288=>array(24,-68,960,843),31289=>array(22,-67,964,848),31290=>array(26,-71,928,826),31291=>array(45,-71,943,832),31292=>array(38,-69,979,832),31293=>array(40,-65,946,844),31294=>array(47,-51,930,836),31295=>array(55,-75,940,831),31296=>array(45,-74,964,825),31297=>array(26,-70,956,827),31298=>array(41,-68,976,826),31299=>array(33,-58,958,845),31300=>array(27,-59,960,850),31301=>array(37,-66,966,848),31302=>array(39,-73,961,847),31303=>array(36,-76,983,847),31304=>array(47,-71,967,832),31305=>array(31,-61,952,834),31306=>array(27,-68,967,835),31307=>array(39,-70,979,838),31308=>array(31,-62,964,843),31309=>array(40,-74,947,833),31310=>array(39,-70,972,838),31311=>array(32,-55,965,838),31312=>array(30,-61,965,846),31313=>array(26,-63,910,824),31314=>array(38,-72,960,833),31315=>array(26,-64,963,821),31316=>array(43,-78,959,827),31317=>array(41,-65,961,845),31318=>array(40,-72,961,822),31319=>array(41,-68,957,826),31320=>array(43,-77,963,823),31321=>array(26,-68,971,833),31322=>array(38,-70,962,828),31323=>array(46,-78,971,828),31324=>array(37,-71,951,831),31325=>array(41,-66,959,822),31326=>array(26,-73,928,821),31327=>array(33,-71,974,825),31328=>array(32,-68,983,840),31329=>array(35,-63,956,836),31330=>array(22,-74,969,833),31331=>array(35,-79,967,837),31332=>array(32,-59,964,825),31333=>array(42,-73,947,821),31334=>array(47,-65,966,853),31335=>array(40,-72,963,837),31336=>array(45,-67,974,830),31337=>array(31,-66,959,831),31338=>array(51,-71,949,825),31339=>array(28,-56,967,840),31340=>array(38,-80,966,843),31341=>array(28,-69,984,853),31342=>array(30,-70,971,846),31343=>array(36,-63,956,836),31344=>array(21,-69,962,844),31345=>array(36,-69,961,835),31346=>array(51,-73,953,825),31347=>array(36,-78,970,836),31348=>array(66,-59,950,822),31349=>array(94,-14,943,852),31350=>array(48,-44,957,822),31351=>array(44,-71,898,831),31352=>array(45,-59,924,850),31353=>array(92,-58,898,839),31354=>array(88,-17,918,833),31355=>array(66,-68,945,843),31356=>array(48,-68,967,849),31357=>array(60,-70,922,839),31358=>array(60,-69,982,839),31359=>array(58,-62,928,838),31360=>array(58,-32,965,854),31361=>array(60,-65,942,824),31362=>array(56,-65,944,849),31363=>array(54,-56,898,831),31364=>array(63,-69,898,828),31365=>array(109,-62,920,857),31366=>array(51,-60,972,867),31367=>array(48,-36,962,835),31368=>array(78,-76,908,833),31369=>array(72,-64,948,838),31370=>array(47,-75,967,846),31371=>array(107,-67,927,837),31372=>array(64,-67,929,845),31373=>array(52,-65,916,836),31374=>array(72,-62,902,840),31375=>array(81,-79,935,829),31376=>array(66,-8,941,851),31377=>array(65,-69,937,862),31378=>array(75,-35,925,839),31379=>array(50,-38,954,839),31380=>array(40,-51,963,864),31381=>array(27,-68,937,839),31382=>array(42,-70,934,839),31383=>array(102,-69,898,831),31384=>array(28,-67,930,839),31385=>array(63,-65,938,840),31386=>array(50,-72,952,849),31387=>array(47,-75,963,849),31388=>array(73,-61,896,832),31389=>array(37,-69,897,838),31390=>array(75,-73,915,848),31391=>array(43,-83,898,838),31392=>array(38,-65,962,845),31393=>array(60,-71,955,848),31394=>array(53,-75,957,844),31395=>array(63,-62,957,854),31396=>array(94,-54,954,851),31397=>array(37,-64,936,840),31398=>array(57,-68,914,837),31399=>array(65,-68,935,851),31400=>array(60,-65,954,848),31401=>array(102,-73,898,839),31402=>array(56,-38,956,839),31403=>array(46,-72,969,845),31404=>array(42,-64,979,849),31405=>array(53,-67,927,846),31406=>array(55,-64,925,838),31407=>array(37,-65,963,839),31408=>array(81,-70,935,830),31409=>array(42,-73,971,838),31410=>array(57,-70,951,830),31411=>array(49,-70,959,848),31412=>array(86,-79,937,838),31413=>array(58,-62,927,848),31414=>array(53,-80,947,833),31415=>array(52,-77,909,838),31416=>array(53,-30,974,854),31417=>array(34,-64,951,851),31418=>array(57,-76,962,839),31419=>array(51,-52,952,851),31420=>array(38,-58,966,851),31421=>array(38,-71,961,851),31422=>array(63,-68,974,852),31423=>array(56,-76,933,831),31424=>array(51,-72,960,832),31425=>array(36,-62,952,861),31426=>array(41,-64,970,851),31427=>array(47,-67,965,843),31428=>array(77,-66,948,833),31429=>array(48,-75,970,839),31430=>array(62,-68,918,847),31431=>array(53,-80,950,838),31432=>array(50,-49,968,844),31433=>array(54,-68,967,852),31434=>array(57,-71,921,843),31435=>array(95,-3,912,822),31436=>array(86,-73,975,825),31437=>array(86,-67,950,830),31438=>array(56,-54,934,838),31439=>array(49,-67,935,821),31440=>array(49,-65,964,800),31441=>array(40,-54,945,821),31442=>array(83,-65,938,832),31443=>array(59,-21,929,828),31444=>array(49,-55,909,833),31445=>array(49,-62,963,806),31446=>array(48,-16,952,807),31447=>array(53,-60,952,827),31448=>array(60,-72,935,832),31449=>array(73,-66,918,832),31450=>array(46,-68,964,825),31451=>array(45,-78,975,831),31452=>array(66,-54,954,836),31453=>array(27,-26,947,799),31454=>array(39,-58,932,838),31455=>array(38,-66,946,818),31456=>array(60,-68,940,831),31457=>array(24,-64,957,801),31458=>array(44,-74,979,825),31459=>array(35,-69,964,849),31460=>array(54,-70,962,838),31461=>array(68,-33,932,832),31462=>array(45,-65,971,832),31463=>array(56,-68,957,847),31464=>array(54,-62,969,844),31465=>array(79,-23,957,848),31466=>array(66,-25,960,796),31467=>array(45,-71,956,834),31468=>array(40,-71,948,833),31469=>array(67,-65,921,802),31470=>array(48,-73,953,833),31471=>array(43,-70,942,830),31472=>array(45,-63,948,804),31473=>array(48,-65,957,832),31474=>array(48,-68,935,849),31475=>array(48,-23,963,837),31476=>array(37,-72,957,845),31477=>array(38,-69,944,830),31478=>array(39,-76,959,838),31479=>array(55,-69,969,840),31480=>array(39,-76,962,830),31481=>array(49,-62,949,848),31482=>array(68,-5,943,819),31483=>array(47,-67,948,847),31484=>array(54,-71,948,847),31485=>array(54,-59,954,842),31486=>array(54,-10,948,827),31487=>array(42,-60,931,841),31488=>array(48,-23,947,847),31489=>array(47,-15,955,847),31490=>array(41,-69,969,822),31491=>array(44,-64,919,822),31492=>array(37,-73,945,844),31493=>array(47,-73,977,842),31494=>array(40,-44,914,835),31495=>array(67,-75,933,845),31496=>array(44,-65,955,845),31497=>array(47,-66,945,843),31498=>array(37,-68,964,840),31499=>array(62,-58,962,845),31500=>array(54,-57,943,845),31501=>array(56,-61,939,835),31502=>array(52,-69,966,834),31503=>array(74,-69,960,839),31504=>array(43,-70,964,838),31505=>array(65,-64,953,839),31506=>array(43,-77,971,835),31507=>array(44,-50,965,814),31508=>array(33,-25,918,830),31509=>array(39,-63,932,825),31510=>array(44,-67,962,814),31511=>array(44,-77,969,814),31512=>array(44,-57,932,848),31513=>array(51,-18,938,840),31514=>array(45,-69,941,841),31515=>array(50,-65,952,841),31516=>array(44,-64,941,814),31517=>array(60,-69,927,832),31518=>array(52,-63,944,842),31519=>array(53,-62,951,836),31520=>array(52,-17,945,838),31521=>array(52,-14,957,842),31522=>array(55,-71,959,829),31523=>array(37,-30,956,841),31524=>array(45,-68,954,844),31525=>array(62,-62,956,854),31526=>array(42,-73,950,841),31527=>array(37,-69,956,847),31528=>array(38,-59,970,846),31529=>array(43,-72,958,854),31530=>array(54,-14,959,835),31531=>array(54,-65,942,842),31532=>array(62,-62,932,834),31533=>array(31,-80,969,835),31534=>array(44,-56,945,847),31535=>array(49,-74,953,837),31536=>array(45,-65,933,838),31537=>array(55,-56,948,846),31538=>array(51,-65,932,832),31539=>array(55,-63,950,842),31540=>array(41,-65,938,827),31541=>array(44,-70,953,836),31542=>array(44,-71,968,836),31543=>array(40,-61,962,836),31544=>array(71,-20,962,836),31545=>array(54,-64,946,836),31546=>array(27,-63,931,833),31547=>array(52,-61,950,847),31548=>array(34,-59,940,842),31549=>array(39,33,944,842),31550=>array(31,-57,938,823),31551=>array(34,-73,968,842),31552=>array(51,-32,952,820),31553=>array(31,-43,909,823),31554=>array(31,-44,959,823),31555=>array(46,-61,937,836),31556=>array(53,-68,947,845),31557=>array(61,-58,969,848),31558=>array(74,-64,944,839),31559=>array(54,-66,944,841),31560=>array(41,-57,938,843),31561=>array(65,-68,934,838),31562=>array(58,-60,971,850),31563=>array(48,-65,946,848),31564=>array(42,-23,958,840),31565=>array(51,-52,938,854),31566=>array(40,-58,945,841),31567=>array(42,-59,961,848),31568=>array(42,-83,953,847),31569=>array(47,-61,950,833),31570=>array(43,-61,942,849),31571=>array(38,-65,931,837),31572=>array(34,-71,971,843),31573=>array(53,-54,962,844),31574=>array(46,-65,957,844),31575=>array(50,-68,949,842),31576=>array(56,-67,949,839),31577=>array(32,-61,943,834),31578=>array(37,-68,913,834),31579=>array(43,-69,925,829),31580=>array(45,-60,943,847),31581=>array(41,-66,922,820),31582=>array(37,-65,930,834),31583=>array(36,-64,948,837),31584=>array(50,-71,946,837),31585=>array(38,-71,962,841),31586=>array(39,-64,929,825),31587=>array(41,-69,932,840),31588=>array(33,-54,966,853),31589=>array(38,-54,923,849),31590=>array(37,-57,960,850),31591=>array(47,-66,970,839),31592=>array(37,-69,966,842),31593=>array(42,-54,936,857),31594=>array(33,-16,934,853),31595=>array(33,-62,943,853),31596=>array(38,-67,953,837),31597=>array(58,-52,939,857),31598=>array(62,-11,948,837),31599=>array(52,-75,935,837),31600=>array(54,-70,960,843),31601=>array(39,-67,969,843),31602=>array(50,-67,945,847),31603=>array(24,-65,970,846),31604=>array(34,-55,978,849),31605=>array(36,-74,949,845),31606=>array(49,-70,945,836),31607=>array(49,-70,965,840),31608=>array(50,-67,939,843),31609=>array(29,-63,911,833),31610=>array(42,-69,953,847),31611=>array(51,-66,938,827),31612=>array(47,-81,933,841),31613=>array(47,-69,947,841),31614=>array(46,-20,957,842),31615=>array(26,-64,958,841),31616=>array(46,-59,926,833),31617=>array(46,-59,934,833),31618=>array(42,-67,969,841),31619=>array(27,-74,968,841),31620=>array(47,-67,949,841),31621=>array(50,-70,945,841),31622=>array(47,-51,966,848),31623=>array(41,-67,970,846),31624=>array(40,-72,930,835),31625=>array(36,-63,938,842),31626=>array(39,-69,953,831),31627=>array(51,-60,964,847),31628=>array(52,-72,930,835),31629=>array(69,-58,957,847),31630=>array(43,-73,953,841),31631=>array(41,-61,948,851),31632=>array(48,-62,947,841),31633=>array(32,-57,968,852),31634=>array(41,-68,919,827),31635=>array(48,-52,959,846),31636=>array(48,-65,944,846),31637=>array(63,-58,944,849),31638=>array(44,-69,963,834),31639=>array(50,-75,935,841),31640=>array(61,-69,938,841),31641=>array(38,-52,975,855),31642=>array(57,-68,932,840),31643=>array(33,-61,959,855),31644=>array(49,-28,935,841),31645=>array(57,-59,960,850),31646=>array(46,-46,959,844),31647=>array(57,-54,954,850),31648=>array(41,-19,942,853),31649=>array(53,-68,929,845),31650=>array(48,-66,924,832),31651=>array(41,-65,912,831),31652=>array(45,-70,942,837),31653=>array(48,-62,960,832),31654=>array(27,-81,913,835),31655=>array(41,-17,917,829),31656=>array(38,-69,952,823),31657=>array(39,-61,919,834),31658=>array(52,-70,928,843),31659=>array(44,-68,937,824),31660=>array(55,-65,954,842),31661=>array(60,-58,957,855),31662=>array(60,-24,955,855),31663=>array(44,-70,976,833),31664=>array(66,-51,960,828),31665=>array(46,-62,947,846),31666=>array(69,-62,963,855),31667=>array(45,-72,935,855),31668=>array(39,-68,966,844),31669=>array(45,-70,952,843),31670=>array(42,-61,930,842),31671=>array(41,-66,954,847),31672=>array(49,-67,945,842),31673=>array(40,-72,941,837),31674=>array(43,-72,974,842),31675=>array(43,-70,959,842),31676=>array(43,-74,933,842),31677=>array(43,-27,947,842),31678=>array(50,-72,943,837),31679=>array(43,-64,942,842),31680=>array(54,-65,949,841),31681=>array(57,-36,962,835),31682=>array(67,-47,952,835),31683=>array(57,-70,952,835),31684=>array(67,-64,943,842),31685=>array(62,-62,954,842),31686=>array(56,-60,962,848),31687=>array(46,-69,942,840),31688=>array(33,-58,958,837),31689=>array(53,-67,959,838),31690=>array(42,-69,957,843),31691=>array(54,-71,945,849),31692=>array(38,-68,955,841),31693=>array(33,-64,985,837),31694=>array(53,-76,960,837),31695=>array(53,-64,973,847),31696=>array(38,-28,957,847),31697=>array(38,-75,911,829),31698=>array(38,-66,961,829),31699=>array(45,-60,933,836),31700=>array(54,-64,941,851),31701=>array(59,-14,952,832),31702=>array(46,-75,938,832),31703=>array(32,-62,968,844),31704=>array(55,-68,929,829),31705=>array(45,-65,938,849),31706=>array(36,-26,938,842),31707=>array(40,-71,931,840),31708=>array(53,-83,953,844),31709=>array(51,-69,949,843),31710=>array(63,-70,953,832),31711=>array(44,-65,948,836),31712=>array(30,-53,966,855),31713=>array(45,-60,974,855),31714=>array(62,-76,947,827),31715=>array(72,-69,937,837),31716=>array(53,-59,942,845),31717=>array(56,-67,982,847),31718=>array(49,-38,958,844),31719=>array(58,-68,927,829),31720=>array(35,-54,959,849),31721=>array(41,-64,959,855),31722=>array(47,-71,968,846),31723=>array(71,-67,946,832),31724=>array(43,-66,972,832),31725=>array(57,-54,962,849),31726=>array(54,-29,924,827),31727=>array(33,-71,959,827),31728=>array(66,-73,951,839),31729=>array(66,-64,929,830),31730=>array(47,-73,953,844),31731=>array(55,-59,970,853),31732=>array(45,-68,968,836),31733=>array(49,-71,955,828),31734=>array(42,-64,951,838),31735=>array(50,-46,960,856),31736=>array(42,-74,954,829),31737=>array(44,-39,957,827),31738=>array(57,-78,964,850),31739=>array(53,-64,937,846),31740=>array(59,-73,955,838),31741=>array(47,-68,933,831),31742=>array(41,-67,967,850),31743=>array(56,-73,951,830),31744=>array(64,-65,964,846),31745=>array(53,-74,976,830),31746=>array(60,-69,920,832),31747=>array(46,-70,931,831),31748=>array(36,-80,957,845),31749=>array(49,-72,954,828),31750=>array(44,-71,961,837),31751=>array(49,-67,982,849),31752=>array(45,-60,943,829),31753=>array(57,-70,982,845),31754=>array(50,-34,974,823),31755=>array(44,-30,974,839),31756=>array(33,-65,973,847),31757=>array(58,-74,942,844),31758=>array(71,-69,956,832),31759=>array(39,-65,954,845),31760=>array(57,-72,974,834),31761=>array(33,-66,981,853),31762=>array(39,-78,965,851),31763=>array(33,-64,962,855),31764=>array(29,-67,965,855),31765=>array(60,-71,920,847),31766=>array(52,-70,952,829),31767=>array(58,-63,961,821),31768=>array(50,-62,941,838),31769=>array(53,-72,953,841),31770=>array(46,-86,952,850),31771=>array(29,-49,942,858),31772=>array(56,-75,958,834),31773=>array(52,-67,967,833),31774=>array(50,-58,962,860),31775=>array(31,-67,946,844),31776=>array(56,-29,973,842),31777=>array(27,-61,951,844),31778=>array(59,-66,934,834),31779=>array(42,-63,948,847),31780=>array(43,-69,945,847),31781=>array(36,-53,976,855),31782=>array(48,-33,977,839),31783=>array(36,-68,915,842),31784=>array(51,-58,932,847),31785=>array(46,-68,930,835),31786=>array(47,-68,971,843),31787=>array(52,-76,949,842),31788=>array(57,-73,961,836),31789=>array(44,-63,970,838),31790=>array(36,-68,954,847),31791=>array(36,-55,942,847),31792=>array(46,-67,957,833),31793=>array(49,-67,951,849),31794=>array(43,-75,957,849),31795=>array(54,-65,964,840),31796=>array(42,-83,934,856),31797=>array(66,-62,962,834),31798=>array(23,-61,938,856),31799=>array(41,-54,938,856),31800=>array(43,-68,970,847),31801=>array(60,-67,927,837),31802=>array(43,-33,944,837),31803=>array(45,-74,984,829),31804=>array(44,-67,954,837),31805=>array(27,-65,972,841),31806=>array(31,-53,963,854),31807=>array(44,-70,954,853),31808=>array(61,-64,939,842),31809=>array(37,-74,918,824),31810=>array(39,-71,944,836),31811=>array(53,-16,955,849),31812=>array(36,-52,938,842),31813=>array(51,-70,958,841),31814=>array(46,-75,978,845),31815=>array(44,-59,975,850),31816=>array(36,-62,981,835),31817=>array(46,-35,945,842),31818=>array(37,-67,944,850),31819=>array(43,-66,974,835),31820=>array(56,-58,951,852),31821=>array(33,-62,943,852),31822=>array(43,-68,971,835),31823=>array(43,-95,953,835),31824=>array(39,-62,976,848),31825=>array(28,-82,972,847),31826=>array(61,-64,939,834),31827=>array(37,-64,969,840),31828=>array(35,-56,971,845),31829=>array(45,-70,937,842),31830=>array(38,-53,961,853),31831=>array(50,-60,948,845),31832=>array(39,-67,976,849),31833=>array(38,-52,959,853),31834=>array(42,-62,962,837),31835=>array(52,-72,964,839),31836=>array(57,-68,953,846),31837=>array(50,-68,962,846),31838=>array(47,-62,964,847),31839=>array(42,-69,965,851),31840=>array(49,-62,964,855),31841=>array(33,-60,962,818),31842=>array(45,-69,987,838),31843=>array(40,-67,929,841),31844=>array(38,-53,961,853),31845=>array(35,-60,967,853),31846=>array(39,-33,967,837),31847=>array(28,-57,969,854),31848=>array(22,-56,983,848),31849=>array(34,-67,964,848),31850=>array(33,-71,954,842),31851=>array(40,-60,952,857),31852=>array(61,-62,964,854),31853=>array(56,-73,940,856),31854=>array(54,-59,957,854),31855=>array(38,-75,974,837),31856=>array(31,-55,970,844),31857=>array(29,-78,963,835),31858=>array(46,-71,954,835),31859=>array(57,-67,949,830),31860=>array(33,-58,961,844),31861=>array(41,-71,956,823),31862=>array(41,-73,975,823),31863=>array(41,-71,935,823),31864=>array(36,-64,965,828),31865=>array(28,-68,954,826),31866=>array(38,-61,973,832),31867=>array(39,-62,948,834),31868=>array(48,-63,900,814),31869=>array(56,-59,960,838),31870=>array(42,-75,910,827),31871=>array(41,-76,953,822),31872=>array(38,-71,966,827),31873=>array(37,-68,957,829),31874=>array(37,-58,963,841),31875=>array(32,-65,954,832),31876=>array(44,-71,970,824),31877=>array(59,-65,947,839),31878=>array(59,-65,963,829),31879=>array(69,-65,967,843),31880=>array(53,-65,967,828),31881=>array(29,-67,964,829),31882=>array(43,-68,957,826),31883=>array(48,-63,963,837),31884=>array(58,-67,918,826),31885=>array(39,-54,967,850),31886=>array(69,-76,973,837),31887=>array(49,-71,934,837),31888=>array(42,-66,928,829),31889=>array(42,-65,965,829),31890=>array(37,-64,949,837),31891=>array(46,-67,959,838),31892=>array(44,-70,945,824),31893=>array(51,-60,901,849),31894=>array(49,-70,971,825),31895=>array(46,-62,953,833),31896=>array(52,-64,943,840),31897=>array(46,-64,907,836),31898=>array(51,-62,953,833),31899=>array(50,-62,941,834),31900=>array(37,-67,963,818),31901=>array(29,-66,940,802),31902=>array(35,-67,955,832),31903=>array(56,-72,946,789),31904=>array(55,-69,947,830),31905=>array(55,-64,921,830),31906=>array(40,-65,961,846),31907=>array(33,-65,951,830),31908=>array(62,-65,913,838),31909=>array(79,-65,907,829),31910=>array(43,-77,961,836),31911=>array(35,-55,951,829),31912=>array(46,-70,959,823),31913=>array(52,-70,941,828),31914=>array(45,-59,941,823),31915=>array(48,-68,951,838),31916=>array(48,-56,923,843),31917=>array(53,-65,972,853),31918=>array(37,-56,974,836),31919=>array(52,-70,969,824),31920=>array(37,-64,953,837),31921=>array(46,-70,951,842),31922=>array(42,-62,983,838),31923=>array(39,-67,956,829),31924=>array(51,-71,962,824),31925=>array(54,-68,956,844),31926=>array(33,-67,966,835),31927=>array(67,-63,935,837),31928=>array(49,-77,960,836),31929=>array(29,-59,942,835),31930=>array(52,-70,965,839),31931=>array(36,-70,962,830),31932=>array(42,-70,971,830),31933=>array(42,-67,977,831),31934=>array(45,-66,954,837),31935=>array(45,-68,986,821),31936=>array(53,-68,961,833),31937=>array(21,-71,941,839),31938=>array(45,-73,963,832),31939=>array(63,-70,937,810),31940=>array(31,-65,929,833),31941=>array(34,-66,990,830),31942=>array(36,-70,968,810),31943=>array(30,-68,964,836),31944=>array(40,-67,986,829),31945=>array(38,-62,980,841),31946=>array(52,-68,897,835),31947=>array(37,-72,954,830),31948=>array(39,-65,975,841),31949=>array(42,-65,965,843),31950=>array(30,-75,958,844),31951=>array(69,-79,931,840),31952=>array(39,-70,948,827),31953=>array(38,-68,917,831),31954=>array(39,-72,938,822),31955=>array(39,-73,969,834),31956=>array(41,-79,971,826),31957=>array(52,-62,969,850),31958=>array(42,-69,952,827),31959=>array(48,-65,990,847),31960=>array(31,-68,968,832),31961=>array(42,-64,972,837),31962=>array(53,-69,954,832),31963=>array(56,-67,940,837),31964=>array(34,-62,968,828),31965=>array(28,-76,985,853),31966=>array(62,-69,955,849),31967=>array(40,-67,962,840),31968=>array(31,-66,966,833),31969=>array(50,-60,952,847),31970=>array(32,-62,982,832),31971=>array(34,-66,966,832),31972=>array(66,-73,934,828),31973=>array(60,-60,956,839),31974=>array(40,-71,933,839),31975=>array(40,-72,954,818),31976=>array(38,-69,967,830),31977=>array(25,-64,974,861),31978=>array(39,-67,975,832),31979=>array(70,-65,953,838),31980=>array(47,-67,960,826),31981=>array(38,-62,980,843),31982=>array(30,-64,964,832),31983=>array(47,-59,964,838),31984=>array(40,-68,916,833),31985=>array(40,-67,965,840),31986=>array(37,-71,963,828),31987=>array(54,-56,963,836),31988=>array(37,-67,962,797),31989=>array(42,-72,966,823),31990=>array(39,-68,956,833),31991=>array(46,-68,953,828),31992=>array(56,-65,941,847),31993=>array(226,-64,734,824),31994=>array(52,-64,952,839),31995=>array(62,-64,942,833),31996=>array(60,-67,892,825),31997=>array(60,-70,956,828),31998=>array(38,-67,936,839),31999=>array(60,-67,892,825),32000=>array(35,-64,954,839),32001=>array(60,-66,966,832),32002=>array(84,-64,950,839),32003=>array(57,-73,905,822),32004=>array(34,-64,903,839),32005=>array(34,-64,944,841),32006=>array(69,-64,950,839),32007=>array(34,-64,953,844),32008=>array(34,-78,957,839),32009=>array(60,-67,892,825),32010=>array(54,-60,948,831),32011=>array(34,-66,961,839),32012=>array(56,-64,963,825),32013=>array(34,-65,909,839),32014=>array(43,-71,975,829),32015=>array(44,-72,966,825),32016=>array(34,-64,956,839),32017=>array(53,-70,964,834),32018=>array(38,-71,979,844),32019=>array(47,-59,932,815),32020=>array(34,-64,964,839),32021=>array(44,-64,954,839),32022=>array(57,-72,914,824),32023=>array(34,-64,959,839),32024=>array(34,-64,945,841),32025=>array(34,-70,956,839),32026=>array(34,-66,955,839),32027=>array(34,-64,961,839),32028=>array(74,-64,944,839),32029=>array(40,-31,937,815),32030=>array(48,-71,968,828),32031=>array(52,-76,979,834),32032=>array(63,-60,937,834),32033=>array(34,-71,949,839),32034=>array(65,-69,946,835),32035=>array(57,-63,969,837),32036=>array(57,-62,949,843),32037=>array(82,-65,953,837),32038=>array(73,-44,965,824),32039=>array(84,-60,935,834),32040=>array(73,-73,960,833),32041=>array(35,-76,961,839),32042=>array(57,-35,943,839),32043=>array(57,-67,948,825),32044=>array(32,-64,906,839),32045=>array(61,-67,939,820),32046=>array(49,-60,953,831),32047=>array(51,-63,943,808),32048=>array(34,-64,912,839),32049=>array(62,-62,982,834),32050=>array(69,-67,954,839),32051=>array(36,-64,902,839),32052=>array(43,-65,947,839),32053=>array(54,-68,946,839),32054=>array(35,-54,954,838),32055=>array(49,-78,975,831),32056=>array(32,-38,954,839),32057=>array(34,-64,910,839),32058=>array(35,-64,956,839),32059=>array(39,-74,966,823),32060=>array(52,-62,932,829),32061=>array(36,-39,952,838),32062=>array(48,-75,974,843),32063=>array(84,-65,968,839),32064=>array(67,-65,921,828),32065=>array(32,-32,957,839),32066=>array(34,-77,964,839),32067=>array(34,-65,961,839),32068=>array(38,-64,942,839),32069=>array(44,-64,910,839),32070=>array(64,-64,955,839),32071=>array(40,-73,915,835),32072=>array(47,-67,901,837),32073=>array(35,-60,969,826),32074=>array(40,-67,970,840),32075=>array(44,-66,971,839),32076=>array(37,-64,966,839),32077=>array(40,-68,959,831),32078=>array(44,-64,964,839),32079=>array(49,-74,967,839),32080=>array(35,-64,944,839),32081=>array(42,-68,966,829),32082=>array(57,-70,911,826),32083=>array(54,-55,954,819),32084=>array(52,-66,951,833),32085=>array(50,-48,947,817),32086=>array(34,-72,961,839),32087=>array(61,-46,939,831),32088=>array(57,-75,963,832),32089=>array(41,-39,954,831),32090=>array(36,-39,943,830),32091=>array(32,-62,954,845),32092=>array(57,-63,943,827),32093=>array(36,-58,978,843),32094=>array(34,-64,962,841),32095=>array(58,-57,967,816),32096=>array(71,-65,954,837),32097=>array(34,-64,982,849),32098=>array(34,-64,900,842),32099=>array(64,-72,949,839),32100=>array(62,-65,938,820),32101=>array(36,-67,980,831),32102=>array(34,-65,965,853),32103=>array(51,-61,913,831),32104=>array(44,-64,962,839),32105=>array(41,-70,955,827),32106=>array(34,-64,918,839),32107=>array(81,-70,917,836),32108=>array(69,-64,958,834),32109=>array(43,-70,958,835),32110=>array(63,-60,939,838),32111=>array(46,-65,960,836),32112=>array(50,-39,957,825),32113=>array(34,-64,959,839),32114=>array(64,-71,960,839),32115=>array(49,-64,968,844),32116=>array(49,-65,954,843),32117=>array(34,-64,961,839),32118=>array(35,-64,961,839),32119=>array(41,-68,930,819),32120=>array(60,-61,953,817),32121=>array(33,-64,894,839),32122=>array(35,-55,957,857),32123=>array(44,-72,968,838),32124=>array(55,-65,954,833),32125=>array(69,-66,906,839),32126=>array(30,-70,961,833),32127=>array(34,-64,971,839),32128=>array(46,-70,975,823),32129=>array(54,-61,953,836),32130=>array(48,-70,959,830),32131=>array(51,-65,938,838),32132=>array(48,-70,969,836),32133=>array(57,-63,976,816),32134=>array(36,-71,971,820),32135=>array(36,-62,945,820),32136=>array(57,-65,928,849),32137=>array(44,-74,969,839),32138=>array(38,-69,979,836),32139=>array(38,-60,951,833),32140=>array(61,-68,962,832),32141=>array(43,-52,945,843),32142=>array(32,-71,976,839),32143=>array(59,-67,959,839),32144=>array(49,-67,961,839),32145=>array(59,-62,917,813),32146=>array(49,-71,954,826),32147=>array(44,-64,945,839),32148=>array(35,-66,968,846),32149=>array(59,-41,972,826),32150=>array(46,-59,976,853),32151=>array(37,-51,915,813),32152=>array(44,-61,977,841),32153=>array(34,-65,933,839),32154=>array(34,-64,962,839),32155=>array(44,-64,962,839),32156=>array(34,-65,960,839),32157=>array(35,-68,965,839),32158=>array(42,-46,951,828),32159=>array(34,-69,972,839),32160=>array(34,-67,966,843),32161=>array(48,-70,956,830),32162=>array(34,-67,897,839),32163=>array(34,-64,974,839),32164=>array(55,-54,932,786),32165=>array(41,-71,958,824),32166=>array(41,-59,983,836),32167=>array(48,-70,961,832),32168=>array(38,-77,960,849),32169=>array(58,-67,958,832),32170=>array(44,-69,953,832),32171=>array(50,-64,957,839),32172=>array(34,-65,973,839),32173=>array(34,-64,938,839),32174=>array(34,-73,946,843),32175=>array(39,-64,923,848),32176=>array(44,-64,941,839),32177=>array(34,-64,915,839),32178=>array(33,-64,909,839),32179=>array(57,-67,895,827),32180=>array(32,-65,966,839),32181=>array(34,-68,966,839),32182=>array(39,-64,969,820),32183=>array(34,-66,963,839),32184=>array(34,-67,976,856),32185=>array(42,-64,964,845),32186=>array(39,-64,952,839),32187=>array(34,-66,966,839),32188=>array(50,-71,953,841),32189=>array(44,-64,953,840),32190=>array(34,-66,968,839),32191=>array(34,-68,911,839),32192=>array(40,-73,958,837),32193=>array(53,-64,977,829),32194=>array(56,-74,982,829),32195=>array(36,-71,976,844),32196=>array(45,-62,966,822),32197=>array(43,-82,977,826),32198=>array(49,-73,920,828),32199=>array(49,-64,938,839),32200=>array(42,-64,934,842),32201=>array(45,-68,952,827),32202=>array(57,-63,943,803),32203=>array(34,-68,954,839),32204=>array(32,-62,961,856),32205=>array(40,-65,960,839),32206=>array(40,-66,962,839),32207=>array(34,-64,968,839),32208=>array(49,-68,978,840),32209=>array(34,-64,963,839),32210=>array(34,-67,941,839),32211=>array(39,-66,984,830),32212=>array(53,-74,941,818),32213=>array(34,-82,956,839),32214=>array(34,-67,941,839),32215=>array(71,-73,924,820),32216=>array(34,-68,969,839),32217=>array(45,-61,956,832),32218=>array(34,-64,963,840),32219=>array(54,-72,963,831),32220=>array(67,-70,966,839),32221=>array(34,-68,943,839),32222=>array(29,-69,976,848),32223=>array(54,-48,954,836),32224=>array(34,-67,946,839),32225=>array(34,-64,973,839),32226=>array(53,-67,950,829),32227=>array(34,-64,979,839),32228=>array(34,-64,957,839),32229=>array(36,-61,964,840),32230=>array(51,-41,976,819),32231=>array(55,-70,953,836),32232=>array(33,-67,935,839),32233=>array(34,-64,959,839),32234=>array(40,-64,960,837),32235=>array(43,-36,971,850),32236=>array(34,-64,950,839),32237=>array(64,-64,921,829),32238=>array(49,-72,968,831),32239=>array(32,-64,954,839),32240=>array(49,-71,984,834),32241=>array(44,-62,967,833),32242=>array(24,-71,960,839),32243=>array(36,-72,943,847),32244=>array(34,-66,967,839),32245=>array(53,-61,980,839),32246=>array(40,-55,972,841),32247=>array(50,-68,954,830),32248=>array(62,-44,953,810),32249=>array(38,-64,952,820),32250=>array(51,-70,914,830),32251=>array(24,-72,962,839),32252=>array(51,-41,959,830),32253=>array(51,-90,938,840),32254=>array(51,-63,958,830),32255=>array(35,-39,954,839),32256=>array(33,-50,963,828),32257=>array(34,-64,967,839),32258=>array(33,-50,964,823),32259=>array(48,-70,961,828),32260=>array(34,-64,971,839),32261=>array(24,-64,972,839),32262=>array(33,-59,970,849),32263=>array(46,-50,964,855),32264=>array(63,-65,950,829),32265=>array(34,-66,955,839),32266=>array(34,-64,961,839),32267=>array(34,-64,962,847),32268=>array(55,-75,973,814),32269=>array(41,-70,951,841),32270=>array(38,-69,932,827),32271=>array(40,-67,967,844),32272=>array(59,-64,926,850),32273=>array(44,-65,984,852),32274=>array(34,-64,951,839),32275=>array(47,-71,961,823),32276=>array(46,-70,985,822),32277=>array(34,-64,960,839),32278=>array(47,-72,952,841),32279=>array(37,-63,977,855),32280=>array(33,-61,977,842),32281=>array(48,-70,931,828),32282=>array(53,-71,919,833),32283=>array(34,-64,953,839),32284=>array(44,-78,954,826),32285=>array(33,-82,961,839),32286=>array(34,-71,947,839),32287=>array(24,-64,958,839),32288=>array(33,-77,960,826),32289=>array(34,-68,952,839),32290=>array(39,-70,967,844),32291=>array(54,-57,966,817),32292=>array(49,-72,959,824),32293=>array(43,-70,984,830),32294=>array(34,-70,961,839),32295=>array(43,-60,966,839),32296=>array(62,-74,964,828),32297=>array(59,-70,979,825),32298=>array(44,-68,955,810),32299=>array(35,-64,963,843),32300=>array(42,-45,952,842),32301=>array(56,-61,961,850),32302=>array(34,-65,943,839),32303=>array(34,-72,957,839),32304=>array(51,-71,976,823),32305=>array(24,-70,955,839),32306=>array(34,-64,962,839),32307=>array(35,-69,954,823),32308=>array(55,-70,941,832),32309=>array(34,-65,974,839),32310=>array(60,-59,968,840),32311=>array(34,-65,942,839),32312=>array(41,-73,972,827),32313=>array(34,-64,955,839),32314=>array(34,-64,960,839),32315=>array(34,-62,968,839),32316=>array(42,-72,972,831),32317=>array(34,-64,959,844),32318=>array(34,-73,952,839),32319=>array(42,-79,972,845),32320=>array(51,-68,953,824),32321=>array(59,-71,948,837),32322=>array(42,-72,953,830),32323=>array(34,-72,917,839),32324=>array(71,-73,949,805),32325=>array(34,-65,972,839),32326=>array(34,-75,970,839),32327=>array(59,-60,965,846),32328=>array(48,-74,962,841),32329=>array(46,-68,968,820),32330=>array(29,-64,964,839),32331=>array(57,-71,964,829),32332=>array(38,-75,973,839),32333=>array(34,-67,957,839),32334=>array(39,-71,959,831),32335=>array(49,-58,947,820),32336=>array(35,-44,971,825),32337=>array(44,-64,973,832),32338=>array(34,-71,972,839),32339=>array(42,-73,969,831),32340=>array(28,-66,958,839),32341=>array(34,-67,949,840),32342=>array(24,-72,984,839),32343=>array(43,-71,958,827),32344=>array(47,-61,926,845),32345=>array(34,-67,959,839),32346=>array(34,-64,965,859),32347=>array(45,-65,962,838),32348=>array(45,-70,957,838),32349=>array(34,-68,920,839),32350=>array(34,-64,954,839),32351=>array(43,-68,957,830),32352=>array(50,-67,971,840),32353=>array(26,-72,962,839),32354=>array(42,-70,954,826),32355=>array(40,-39,957,825),32356=>array(36,-66,969,838),32357=>array(37,-65,951,836),32358=>array(24,-64,967,839),32359=>array(25,-75,949,839),32360=>array(55,-73,974,830),32361=>array(34,-64,970,839),32362=>array(34,-68,973,864),32363=>array(53,-73,962,841),32364=>array(39,-65,965,837),32365=>array(63,-57,937,833),32366=>array(41,-39,951,812),32367=>array(40,-66,970,807),32368=>array(34,-64,972,839),32369=>array(48,-38,959,837),32370=>array(49,-68,961,829),32371=>array(51,-71,962,845),32372=>array(50,-71,944,831),32373=>array(47,-45,962,834),32374=>array(43,-33,977,829),32375=>array(44,-64,962,836),32376=>array(30,-78,970,830),32377=>array(34,-66,934,839),32378=>array(45,-74,976,834),32379=>array(34,-64,954,839),32380=>array(24,-70,942,839),32381=>array(34,-70,958,839),32382=>array(57,-59,976,836),32383=>array(34,-64,957,844),32384=>array(42,-67,972,829),32385=>array(30,-58,971,851),32386=>array(22,-71,974,850),32387=>array(34,-68,969,839),32388=>array(36,-62,963,833),32389=>array(56,-68,948,850),32390=>array(51,-38,967,830),32391=>array(41,-66,960,831),32392=>array(34,-64,970,839),32393=>array(34,-64,981,845),32394=>array(31,-77,967,839),32395=>array(49,-68,961,837),32396=>array(34,-84,957,839),32397=>array(53,-62,947,789),32398=>array(24,-64,967,839),32399=>array(35,-67,961,839),32400=>array(19,-64,980,839),32401=>array(46,-68,956,833),32402=>array(34,-64,950,839),32403=>array(34,-67,954,839),32404=>array(24,-68,966,847),32405=>array(32,-68,979,849),32406=>array(19,-64,967,839),32407=>array(38,-65,941,833),32408=>array(30,-68,972,839),32409=>array(40,-67,964,835),32410=>array(26,-68,974,829),32411=>array(42,-71,953,839),32412=>array(19,-64,960,847),32413=>array(42,-62,955,822),32414=>array(53,-31,947,842),32415=>array(271,10,660,829),32416=>array(72,-69,847,828),32417=>array(57,-56,933,828),32418=>array(74,3,936,828),32419=>array(57,-64,933,828),32420=>array(43,-67,942,812),32421=>array(57,-24,936,843),32422=>array(61,-62,879,835),32423=>array(62,-71,941,828),32424=>array(58,-56,964,838),32425=>array(54,-66,912,830),32426=>array(57,-15,936,828),32427=>array(73,-69,874,820),32428=>array(46,-69,903,824),32429=>array(57,-54,927,828),32430=>array(77,-71,950,837),32431=>array(70,-34,929,834),32432=>array(57,-47,937,829),32433=>array(66,-59,943,824),32434=>array(40,-59,885,829),32435=>array(52,-57,898,833),32436=>array(72,-21,939,813),32437=>array(41,-64,945,833),32438=>array(32,-21,943,835),32439=>array(75,-67,957,828),32440=>array(46,-70,926,825),32441=>array(71,-65,944,840),32442=>array(60,-66,921,842),32443=>array(60,11,934,828),32444=>array(74,-72,895,824),32445=>array(74,-23,936,820),32446=>array(57,-61,915,828),32447=>array(44,-60,937,831),32448=>array(57,-66,942,829),32449=>array(57,-22,937,828),32450=>array(57,-65,966,832),32451=>array(35,-61,947,830),32452=>array(57,-14,925,807),32453=>array(77,-64,885,835),32454=>array(60,-57,895,783),32455=>array(39,-56,942,802),32456=>array(62,-79,947,834),32457=>array(39,-57,873,827),32458=>array(57,-66,938,832),32459=>array(53,-64,915,827),32460=>array(57,-67,903,828),32461=>array(54,-72,894,786),32462=>array(41,-74,958,818),32463=>array(57,-33,938,819),32464=>array(57,-67,950,832),32465=>array(42,-69,937,834),32466=>array(71,-65,945,835),32467=>array(67,-66,933,837),32468=>array(57,-63,958,840),32469=>array(44,-60,944,835),32470=>array(76,-22,923,828),32471=>array(53,-66,947,830),32472=>array(44,-55,934,838),32473=>array(57,-67,949,852),32474=>array(59,-58,882,839),32475=>array(57,-57,960,842),32476=>array(74,-63,967,847),32477=>array(39,-21,925,832),32478=>array(81,-64,947,840),32479=>array(57,-71,942,838),32480=>array(57,-74,954,828),32481=>array(57,-67,921,835),32482=>array(73,-59,879,827),32483=>array(50,-85,942,807),32484=>array(59,-68,962,832),32485=>array(59,-69,942,834),32486=>array(25,-66,964,833),32487=>array(53,-23,940,809),32488=>array(61,-67,909,847),32489=>array(41,-62,931,833),32490=>array(53,-69,924,829),32491=>array(57,-68,951,834),32492=>array(52,-66,969,828),32493=>array(28,-67,932,833),32494=>array(59,-63,937,836),32495=>array(63,-66,939,827),32496=>array(65,-65,936,838),32497=>array(53,-74,916,827),32498=>array(57,-64,949,828),32499=>array(50,-23,940,826),32500=>array(63,-64,920,836),32501=>array(67,-70,886,842),32502=>array(57,-72,958,836),32503=>array(34,-74,925,792),32504=>array(57,-69,881,827),32505=>array(49,-67,924,840),32506=>array(30,-64,937,828),32507=>array(53,-41,973,839),32508=>array(53,-67,934,844),32509=>array(61,-68,951,843),32510=>array(53,-64,917,850),32511=>array(30,-64,943,819),32512=>array(53,-67,973,818),32513=>array(57,-66,921,836),32514=>array(53,-63,939,829),32515=>array(53,-74,910,827),32516=>array(52,-70,953,832),32517=>array(60,-66,931,814),32518=>array(35,-54,932,841),32519=>array(57,-66,935,828),32520=>array(52,-73,937,830),32521=>array(57,-70,935,822),32522=>array(69,-28,959,805),32523=>array(39,-66,919,830),32524=>array(57,-43,959,828),32525=>array(52,-33,933,830),32526=>array(53,-71,953,818),32527=>array(53,-57,954,839),32528=>array(59,-64,959,842),32529=>array(53,-69,971,831),32530=>array(53,-72,951,844),32531=>array(66,-67,949,827),32532=>array(62,-69,925,848),32533=>array(39,-54,941,838),32534=>array(34,-69,922,837),32535=>array(57,-64,956,828),32536=>array(53,-73,937,834),32537=>array(47,-64,911,827),32538=>array(50,-67,946,832),32539=>array(53,-64,942,827),32540=>array(53,-68,936,843),32541=>array(52,-53,955,816),32542=>array(69,-63,962,855),32543=>array(53,-67,932,850),32544=>array(36,-64,919,847),32545=>array(56,-63,944,847),32546=>array(53,-23,943,840),32547=>array(55,-67,967,851),32548=>array(33,-50,933,824),32549=>array(57,-64,940,819),32550=>array(53,-68,958,827),32551=>array(53,-64,959,827),32552=>array(39,-75,937,822),32553=>array(41,-66,917,841),32554=>array(52,-76,953,817),32555=>array(53,-67,955,837),32556=>array(38,-68,945,825),32557=>array(57,-64,947,855),32558=>array(62,-67,931,839),32559=>array(53,-64,901,851),32560=>array(50,-40,935,806),32561=>array(53,-72,951,834),32562=>array(53,-66,963,827),32563=>array(57,-68,952,828),32564=>array(53,-71,946,842),32565=>array(38,-69,933,822),32566=>array(47,-60,953,831),32567=>array(58,-62,909,838),32568=>array(44,-45,941,836),32569=>array(50,-72,960,845),32570=>array(59,-68,950,836),32571=>array(58,-32,962,836),32572=>array(80,-73,960,851),32573=>array(48,-54,971,848),32574=>array(58,-53,954,855),32575=>array(49,-58,945,843),32576=>array(47,-64,960,851),32577=>array(47,-65,951,851),32578=>array(48,-68,912,780),32579=>array(69,-71,945,838),32580=>array(49,-68,956,833),32581=>array(48,-72,931,834),32582=>array(48,-68,951,829),32583=>array(45,-72,970,838),32584=>array(48,-70,953,831),32585=>array(63,-54,935,837),32586=>array(72,-68,958,825),32587=>array(62,-68,939,838),32588=>array(59,-65,951,790),32589=>array(68,-62,957,797),32590=>array(34,-53,951,842),32591=>array(45,-63,957,841),32592=>array(44,-59,949,838),32593=>array(117,-60,883,780),32594=>array(148,317,884,597),32595=>array(137,265,863,657),32596=>array(114,-68,894,787),32597=>array(64,-64,917,786),32598=>array(110,10,917,802),32599=>array(69,-55,884,792),32600=>array(45,-64,955,787),32601=>array(50,-68,955,789),32602=>array(98,-57,869,791),32603=>array(42,-61,973,798),32604=>array(79,-35,961,777),32605=>array(55,-20,950,798),32606=>array(56,-62,947,790),32607=>array(68,-60,954,787),32608=>array(47,-58,947,784),32609=>array(63,-24,941,785),32610=>array(55,-60,904,792),32611=>array(63,-33,958,763),32612=>array(55,-53,908,785),32613=>array(141,-70,883,779),32614=>array(82,-68,933,783),32615=>array(55,-71,971,780),32616=>array(29,-34,966,794),32617=>array(59,-69,956,782),32618=>array(57,-69,943,794),32619=>array(59,-64,968,787),32620=>array(44,-72,969,784),32621=>array(63,-51,963,800),32622=>array(100,-73,945,813),32623=>array(81,-69,931,787),32624=>array(71,-73,900,810),32625=>array(51,-72,949,791),32626=>array(58,-65,944,789),32627=>array(56,-26,954,780),32628=>array(34,-62,928,776),32629=>array(57,-69,919,783),32630=>array(136,-70,882,783),32631=>array(68,-63,967,807),32632=>array(85,-73,951,782),32633=>array(39,-64,949,788),32634=>array(44,-70,973,783),32635=>array(41,-68,951,782),32636=>array(59,-65,943,810),32637=>array(36,-65,947,791),32638=>array(110,-67,905,794),32639=>array(50,-8,947,805),32640=>array(107,-71,916,787),32641=>array(49,-65,890,772),32642=>array(64,-63,896,802),32643=>array(42,-65,968,792),32644=>array(44,-64,953,815),32645=>array(38,-67,950,807),32646=>array(43,-73,956,784),32647=>array(63,-64,953,788),32648=>array(62,-64,938,796),32649=>array(50,-52,968,792),32650=>array(72,-67,946,855),32651=>array(60,-67,953,821),32652=>array(39,-61,953,844),32653=>array(38,-67,965,836),32654=>array(45,-61,955,845),32655=>array(54,-68,957,842),32656=>array(34,-67,974,830),32657=>array(52,-67,991,854),32658=>array(54,-73,985,842),32659=>array(44,-71,972,842),32660=>array(61,-63,957,856),32661=>array(46,-66,965,848),32662=>array(50,-71,967,834),32663=>array(36,-66,965,841),32664=>array(53,-68,954,843),32665=>array(53,-63,941,854),32666=>array(22,-68,960,847),32667=>array(53,-69,938,846),32668=>array(57,-66,960,844),32669=>array(42,-73,950,839),32670=>array(29,-33,934,838),32671=>array(36,-68,922,823),32672=>array(43,-72,969,840),32673=>array(49,-74,960,845),32674=>array(52,-69,974,837),32675=>array(57,-64,954,787),32676=>array(32,-62,960,850),32677=>array(46,-75,950,833),32678=>array(41,-73,964,834),32679=>array(35,-75,965,830),32680=>array(49,-62,978,858),32681=>array(48,-63,941,843),32682=>array(42,-77,965,842),32683=>array(39,-70,950,845),32684=>array(51,-70,978,822),32685=>array(50,-74,969,827),32686=>array(33,-58,974,860),32687=>array(55,-67,930,842),32688=>array(41,-82,971,831),32689=>array(53,-73,970,833),32690=>array(34,-66,959,853),32691=>array(46,-69,968,832),32692=>array(35,-83,969,808),32693=>array(46,-82,967,826),32694=>array(16,-65,959,842),32695=>array(53,-71,969,835),32696=>array(29,-60,973,841),32697=>array(51,-62,966,853),32698=>array(49,-64,968,833),32699=>array(52,-69,970,836),32700=>array(41,-71,965,797),32701=>array(73,-50,892,785),32702=>array(40,-70,953,783),32703=>array(43,-64,945,780),32704=>array(47,-63,917,836),32705=>array(47,-62,958,822),32706=>array(43,-71,981,790),32707=>array(52,-67,938,840),32708=>array(47,-73,970,837),32709=>array(31,-59,972,839),32710=>array(54,-58,946,790),32711=>array(41,-76,959,785),32712=>array(113,-79,923,788),32713=>array(29,-64,910,826),32714=>array(56,-65,915,821),32715=>array(42,-67,950,836),32716=>array(50,-20,942,798),32717=>array(33,-72,962,821),32718=>array(31,-63,918,838),32719=>array(32,-76,965,785),32720=>array(32,-74,976,827),32721=>array(37,-64,914,828),32722=>array(74,-72,892,782),32723=>array(70,-65,914,838),32724=>array(51,-60,893,855),32725=>array(47,-63,965,845),32726=>array(26,-64,916,817),32727=>array(61,-70,916,829),32728=>array(32,-71,941,818),32729=>array(45,-64,931,836),32730=>array(74,-65,926,801),32731=>array(37,-63,982,844),32732=>array(37,-72,964,783),32733=>array(30,-48,910,825),32734=>array(53,-68,962,834),32735=>array(40,-80,927,807),32736=>array(53,-61,947,807),32737=>array(46,-56,921,826),32738=>array(41,-71,903,782),32739=>array(61,-63,936,797),32740=>array(98,-71,918,785),32741=>array(42,-59,956,834),32742=>array(65,-59,959,863),32743=>array(57,-69,913,855),32744=>array(88,-65,970,785),32745=>array(41,-60,917,795),32746=>array(59,-73,968,825),32747=>array(52,-74,963,783),32748=>array(62,-62,957,790),32749=>array(53,-76,983,824),32750=>array(75,-64,903,788),32751=>array(66,-52,941,802),32752=>array(60,-69,978,853),32753=>array(46,-63,904,848),32754=>array(41,-73,895,780),32755=>array(60,-67,929,785),32756=>array(40,-73,969,816),32757=>array(37,-54,948,854),32758=>array(48,-77,913,839),32759=>array(53,-67,917,830),32760=>array(61,-70,919,835),32761=>array(28,-66,966,830),32762=>array(46,-68,913,845),32763=>array(59,-67,909,824),32764=>array(54,-66,946,807),32765=>array(30,-67,910,832),32766=>array(60,-57,928,795),32767=>array(66,-52,917,843),32768=>array(28,-73,954,828),32769=>array(38,-39,923,832),32770=>array(21,160,923,832),32771=>array(48,-56,929,836),32772=>array(39,-36,948,834),32773=>array(62,-64,929,836),32774=>array(33,-69,938,836),32775=>array(59,-64,950,835),32776=>array(69,-66,933,840),32777=>array(40,-55,951,840),32778=>array(49,-53,950,836),32779=>array(53,-53,950,836),32780=>array(89,-68,923,768),32781=>array(63,-68,934,789),32782=>array(46,-67,970,791),32783=>array(55,-74,951,822),32784=>array(51,-79,956,836),32785=>array(62,-62,954,840),32786=>array(55,-65,968,829),32787=>array(46,-65,924,827),32788=>array(46,-65,957,828),32789=>array(31,-73,954,831),32790=>array(31,-70,970,831),32791=>array(35,-68,924,828),32792=>array(36,-73,943,832),32793=>array(36,-73,951,832),32794=>array(46,-72,960,833),32795=>array(47,-71,951,839),32796=>array(38,-73,909,832),32797=>array(31,-73,938,831),32798=>array(47,-68,914,829),32799=>array(49,-58,964,828),32800=>array(21,-78,964,842),32801=>array(59,-66,929,831),32802=>array(25,-72,914,818),32803=>array(46,-73,968,844),32804=>array(46,-70,956,826),32805=>array(39,-69,933,832),32806=>array(61,-71,927,830),32807=>array(32,-73,922,806),32808=>array(34,-64,959,832),32809=>array(36,-67,964,833),32810=>array(43,-69,954,842),32811=>array(44,-71,943,830),32812=>array(34,-69,954,835),32813=>array(53,-69,949,840),32814=>array(44,-86,968,831),32815=>array(49,-69,966,827),32816=>array(33,-62,979,830),32817=>array(23,-68,955,838),32818=>array(45,-69,972,849),32819=>array(55,-74,922,781),32820=>array(56,-67,967,828),32821=>array(48,-62,954,789),32822=>array(59,-67,930,786),32823=>array(40,-69,960,839),32824=>array(55,-66,916,830),32825=>array(55,-67,978,853),32826=>array(29,-67,944,789),32827=>array(42,-64,951,824),32828=>array(46,-67,957,789),32829=>array(40,-70,950,831),32830=>array(55,-65,960,838),32831=>array(38,-67,954,825),32832=>array(50,-67,967,825),32833=>array(49,-67,951,805),32834=>array(39,-60,952,794),32835=>array(35,-65,961,829),32836=>array(50,-72,971,850),32837=>array(50,-67,945,819),32838=>array(28,-62,966,854),32839=>array(58,-70,957,781),32840=>array(72,-80,921,822),32841=>array(46,-68,921,827),32842=>array(59,-71,914,830),32843=>array(51,-48,923,841),32844=>array(31,-70,955,782),32845=>array(29,-68,924,830),32846=>array(63,-67,962,826),32847=>array(49,-68,960,785),32848=>array(45,-70,959,822),32849=>array(50,-70,955,770),32850=>array(36,-64,941,804),32851=>array(47,-59,960,806),32852=>array(37,-60,940,830),32853=>array(50,-67,955,844),32854=>array(66,-37,934,805),32855=>array(50,-75,968,833),32856=>array(33,-71,955,831),32857=>array(50,-67,974,835),32858=>array(36,-61,948,793),32859=>array(50,-67,956,841),32860=>array(48,-67,956,834),32861=>array(45,-71,952,823),32862=>array(119,-68,901,786),32863=>array(34,-69,950,852),32864=>array(50,-68,959,845),32865=>array(32,-65,968,819),32866=>array(50,-83,949,797),32867=>array(50,-67,953,816),32868=>array(41,-61,970,856),32869=>array(50,-68,925,827),32870=>array(50,-67,964,839),32871=>array(51,-72,970,817),32872=>array(52,-65,963,806),32873=>array(34,-69,928,824),32874=>array(33,-60,950,838),32875=>array(48,-65,963,806),32876=>array(46,-71,971,827),32877=>array(50,-67,969,856),32878=>array(52,-65,967,782),32879=>array(42,-65,946,842),32880=>array(43,-66,973,835),32881=>array(53,-70,948,838),32882=>array(62,-64,946,833),32883=>array(48,-70,952,846),32884=>array(44,-67,963,839),32885=>array(40,-67,962,838),32886=>array(42,-66,951,808),32887=>array(35,-70,960,839),32888=>array(44,-73,942,827),32889=>array(41,-64,967,835),32890=>array(41,-65,948,846),32891=>array(35,-65,954,831),32892=>array(44,-67,966,847),32893=>array(58,-67,966,840),32894=>array(43,-71,962,840),32895=>array(73,-66,945,833),32896=>array(73,-66,931,833),32897=>array(45,-61,947,848),32898=>array(50,-72,953,828),32899=>array(50,-62,941,834),32900=>array(28,-68,945,829),32901=>array(46,-69,947,833),32902=>array(46,-61,946,841),32903=>array(51,-61,949,850),32904=>array(50,-61,953,856),32905=>array(118,-73,882,841),32906=>array(49,-68,959,783),32907=>array(68,-70,898,834),32908=>array(31,-74,948,773),32909=>array(59,-75,957,831),32910=>array(116,-45,892,762),32911=>array(42,-79,958,777),32912=>array(41,-78,977,826),32913=>array(76,-59,921,844),32914=>array(39,-64,954,833),32915=>array(135,-50,924,826),32916=>array(60,-71,963,825),32917=>array(53,-65,908,799),32918=>array(133,-61,861,836),32919=>array(60,-71,944,839),32920=>array(57,-70,933,826),32921=>array(70,-64,841,788),32922=>array(63,-68,938,829),32923=>array(54,-70,942,786),32924=>array(44,-58,965,856),32925=>array(60,-71,936,785),32926=>array(48,-62,959,803),32927=>array(31,-80,950,782),32928=>array(22,-61,886,786),32929=>array(51,-65,944,788),32930=>array(43,-70,969,837),32931=>array(35,-69,972,833),32932=>array(38,-71,939,831),32933=>array(51,-70,949,779),32934=>array(29,-60,968,810),32935=>array(60,-72,944,785),32936=>array(60,-71,940,813),32937=>array(53,-70,901,810),32938=>array(34,-71,949,825),32939=>array(38,-67,957,833),32940=>array(44,-62,961,831),32941=>array(24,-68,877,799),32942=>array(41,-73,957,832),32943=>array(59,-54,953,831),32944=>array(60,-71,977,837),32945=>array(30,-62,945,826),32946=>array(92,-49,907,840),32947=>array(46,-71,921,829),32948=>array(52,-49,928,844),32949=>array(39,-68,954,829),32950=>array(37,-58,956,824),32951=>array(30,-67,939,824),32952=>array(46,-65,956,811),32953=>array(56,-71,959,811),32954=>array(31,-70,953,839),32955=>array(121,-58,897,827),32956=>array(23,-82,950,827),32957=>array(23,-81,956,822),32958=>array(124,-69,944,820),32959=>array(31,-68,894,814),32960=>array(35,-73,946,815),32961=>array(27,-65,948,824),32962=>array(50,-71,912,833),32963=>array(170,-49,849,785),32964=>array(177,-48,838,834),32965=>array(45,-76,974,826),32966=>array(37,-70,954,786),32967=>array(45,-75,928,826),32968=>array(41,-73,968,826),32969=>array(40,-60,903,854),32970=>array(34,-66,908,843),32971=>array(57,-70,934,835),32972=>array(60,-57,937,826),32973=>array(31,-73,977,837),32974=>array(49,-70,944,838),32975=>array(51,-60,957,840),32976=>array(45,-59,905,840),32977=>array(32,-55,966,797),32978=>array(57,-70,945,788),32979=>array(57,-70,959,789),32980=>array(54,-68,968,835),32981=>array(44,-57,961,848),32982=>array(45,-69,934,834),32983=>array(39,-68,980,840),32984=>array(42,-67,957,836),32985=>array(53,-70,940,837),32986=>array(44,-69,948,786),32987=>array(49,-70,899,787),32988=>array(44,-69,953,824),32989=>array(34,-72,948,833),32990=>array(37,-64,958,845),32991=>array(35,-60,962,787),32992=>array(29,-62,957,839),32993=>array(71,-67,895,818),32994=>array(66,-70,948,787),32995=>array(47,-71,964,825),32996=>array(40,-66,967,846),32997=>array(38,-50,935,789),32998=>array(38,-67,981,829),32999=>array(18,-67,931,826),33000=>array(31,-72,939,817),33001=>array(31,-80,946,822),33002=>array(34,-69,921,817),33003=>array(32,-72,923,782),33004=>array(35,-66,932,827),33005=>array(48,-68,910,790),33006=>array(35,-70,965,837),33007=>array(28,-70,969,848),33008=>array(39,-72,963,838),33009=>array(35,-60,959,823),33010=>array(52,-69,975,845),33011=>array(35,-71,967,845),33012=>array(28,-70,912,786),33013=>array(46,-72,959,782),33014=>array(28,-71,946,842),33015=>array(73,-71,878,847),33016=>array(31,-58,924,841),33017=>array(46,-73,965,780),33018=>array(45,-72,948,840),33019=>array(49,-67,967,838),33020=>array(27,-70,947,845),33021=>array(63,-55,959,844),33022=>array(51,-64,952,829),33023=>array(34,-72,959,827),33024=>array(35,-77,972,813),33025=>array(29,-67,962,818),33026=>array(48,-70,952,815),33027=>array(33,-54,947,821),33028=>array(33,-70,965,824),33029=>array(73,-52,940,841),33030=>array(30,-72,958,844),33031=>array(40,-67,915,841),33032=>array(35,-62,967,836),33033=>array(44,-70,972,840),33034=>array(56,-59,944,835),33035=>array(73,-49,940,808),33036=>array(33,-70,943,841),33037=>array(38,-74,951,818),33038=>array(37,-73,932,818),33039=>array(31,-66,920,821),33040=>array(24,-82,951,832),33041=>array(43,-64,951,841),33042=>array(27,-70,980,821),33043=>array(32,-72,962,827),33044=>array(28,-64,923,846),33045=>array(44,-72,967,837),33046=>array(45,-67,951,837),33047=>array(45,-58,925,851),33048=>array(26,-67,963,821),33049=>array(42,-75,948,820),33050=>array(33,-61,913,810),33051=>array(49,-65,945,791),33052=>array(27,-70,944,776),33053=>array(48,-71,946,835),33054=>array(49,-60,970,833),33055=>array(39,-71,953,815),33056=>array(44,-62,972,820),33057=>array(44,-62,972,820),33058=>array(41,-70,942,839),33059=>array(58,-56,935,790),33060=>array(33,-57,967,800),33061=>array(44,-78,964,822),33062=>array(31,-70,968,831),33063=>array(33,-71,985,838),33064=>array(31,-70,975,825),33065=>array(37,-67,965,846),33066=>array(31,-70,961,846),33067=>array(32,-71,968,812),33068=>array(65,-72,986,834),33069=>array(39,-54,950,787),33070=>array(31,-75,948,835),33071=>array(28,-70,952,839),33072=>array(44,-60,956,797),33073=>array(59,-71,944,833),33074=>array(23,-71,970,788),33075=>array(27,-67,964,818),33076=>array(31,-70,969,797),33077=>array(31,-58,947,788),33078=>array(34,-67,925,785),33079=>array(31,-70,906,833),33080=>array(26,-65,944,836),33081=>array(42,-64,962,799),33082=>array(34,-71,943,839),33083=>array(31,-72,959,833),33084=>array(31,-66,948,787),33085=>array(23,-68,945,830),33086=>array(28,-70,957,841),33087=>array(31,-70,974,841),33088=>array(31,-73,976,851),33089=>array(31,-71,953,830),33090=>array(31,-70,969,788),33091=>array(46,-71,981,830),33092=>array(33,-67,953,833),33093=>array(31,-70,970,841),33094=>array(28,-70,965,835),33095=>array(38,-81,974,822),33096=>array(32,-77,940,828),33097=>array(43,-70,959,816),33098=>array(52,-69,956,824),33099=>array(21,-70,970,812),33100=>array(31,-72,972,844),33101=>array(41,-66,972,825),33102=>array(108,-59,958,815),33103=>array(40,-78,980,783),33104=>array(46,-68,948,839),33105=>array(28,-70,952,835),33106=>array(44,-74,944,784),33107=>array(18,-66,936,818),33108=>array(29,-70,947,822),33109=>array(26,-64,962,834),33110=>array(31,-70,973,835),33111=>array(31,-70,955,831),33112=>array(31,-70,919,787),33113=>array(34,-78,951,833),33114=>array(23,-83,949,831),33115=>array(46,-72,954,782),33116=>array(47,-75,973,822),33117=>array(31,-70,975,788),33118=>array(45,-67,970,836),33119=>array(31,-70,952,836),33120=>array(49,-72,987,831),33121=>array(34,-77,903,782),33122=>array(38,-67,911,803),33123=>array(31,-70,948,850),33124=>array(38,-69,955,840),33125=>array(19,-70,945,788),33126=>array(65,-65,925,846),33127=>array(34,-70,973,855),33128=>array(31,-70,956,835),33129=>array(49,-71,974,830),33130=>array(31,-70,953,788),33131=>array(48,-64,945,836),33132=>array(31,-70,977,796),33133=>array(28,-70,947,787),33134=>array(28,-70,964,786),33135=>array(47,-72,956,832),33136=>array(24,-70,941,793),33137=>array(26,-63,964,829),33138=>array(43,-77,981,782),33139=>array(58,-71,911,820),33140=>array(27,-70,972,833),33141=>array(48,-70,980,791),33142=>array(39,-75,979,825),33143=>array(37,-71,954,785),33144=>array(42,-60,952,801),33145=>array(21,-70,973,837),33146=>array(21,-70,968,837),33147=>array(28,-70,950,829),33148=>array(26,-76,941,778),33149=>array(26,-78,950,784),33150=>array(31,-61,951,836),33151=>array(22,-60,958,783),33152=>array(28,-69,938,819),33153=>array(30,-70,983,843),33154=>array(46,-48,944,847),33155=>array(60,-70,967,785),33156=>array(48,-70,986,830),33157=>array(48,-64,954,843),33158=>array(45,-64,953,825),33159=>array(45,-72,981,832),33160=>array(18,-69,939,784),33161=>array(41,-75,964,826),33162=>array(34,-70,961,831),33163=>array(72,-67,932,835),33164=>array(44,-70,980,823),33165=>array(49,-72,961,835),33166=>array(36,-74,972,842),33167=>array(94,-62,906,834),33168=>array(46,-52,944,846),33169=>array(25,-63,934,832),33170=>array(48,-70,963,787),33171=>array(48,-75,969,853),33172=>array(43,-64,953,839),33173=>array(44,-75,920,783),33174=>array(30,-70,971,844),33175=>array(37,-65,959,829),33176=>array(39,-69,962,788),33177=>array(39,-60,969,829),33178=>array(46,-68,941,848),33179=>array(47,-72,954,835),33180=>array(19,-70,972,823),33181=>array(28,-70,966,828),33182=>array(41,-69,944,826),33183=>array(45,-70,958,839),33184=>array(39,-76,977,788),33185=>array(18,-70,987,850),33186=>array(45,-67,951,824),33187=>array(33,-71,938,817),33188=>array(18,-70,968,787),33189=>array(37,-62,950,844),33190=>array(39,-70,954,832),33191=>array(26,-60,950,833),33192=>array(17,-70,975,837),33193=>array(36,-78,969,836),33194=>array(26,-68,891,832),33195=>array(49,-75,982,845),33196=>array(55,-75,986,830),33197=>array(30,-70,969,839),33198=>array(40,-68,975,829),33199=>array(24,-70,981,837),33200=>array(30,-60,966,852),33201=>array(45,-75,983,840),33202=>array(41,-68,969,838),33203=>array(35,-67,949,840),33204=>array(36,-57,963,848),33205=>array(40,-67,964,830),33206=>array(48,-70,930,793),33207=>array(49,-70,967,827),33208=>array(42,-70,956,839),33209=>array(46,-79,956,830),33210=>array(28,-68,922,839),33211=>array(42,-70,959,845),33212=>array(43,-72,976,805),33213=>array(38,-66,956,853),33214=>array(36,-71,983,859),33215=>array(35,-75,969,840),33216=>array(35,-57,960,788),33217=>array(30,-82,961,837),33218=>array(33,-58,927,836),33219=>array(37,-75,952,849),33220=>array(39,-68,959,822),33221=>array(50,-69,916,787),33222=>array(21,-70,963,840),33223=>array(48,-67,931,835),33224=>array(36,-70,940,833),33225=>array(53,-68,991,854),33226=>array(39,-87,974,784),33227=>array(35,-71,959,827),33228=>array(40,-72,973,836),33229=>array(45,-73,966,843),33230=>array(36,-58,962,805),33231=>array(35,-74,955,847),33232=>array(45,-73,964,840),33233=>array(46,-78,948,777),33234=>array(44,-73,969,835),33235=>array(32,-61,966,838),33236=>array(32,-60,973,796),33237=>array(30,-60,965,853),33238=>array(41,-54,954,830),33239=>array(55,-70,979,837),33240=>array(40,-65,956,848),33241=>array(43,-75,969,829),33242=>array(43,-74,971,827),33243=>array(48,-67,946,790),33244=>array(41,-71,972,827),33245=>array(41,-50,964,867),33246=>array(39,-56,955,805),33247=>array(28,-61,970,838),33248=>array(54,-67,942,846),33249=>array(54,-53,949,849),33250=>array(43,-78,956,829),33251=>array(151,-58,927,780),33252=>array(100,-31,976,782),33253=>array(120,-65,959,820),33254=>array(58,-70,954,772),33255=>array(31,-63,956,836),33256=>array(120,-65,932,841),33257=>array(48,-76,965,781),33258=>array(201,-67,821,853),33259=>array(87,-47,948,840),33260=>array(46,-67,967,850),33261=>array(56,-63,970,844),33262=>array(42,-66,937,837),33263=>array(52,-64,946,849),33264=>array(61,-72,925,852),33265=>array(109,-101,922,839),33266=>array(37,-71,967,844),33267=>array(80,-16,915,770),33268=>array(59,-71,971,831),33269=>array(49,-57,965,848),33270=>array(55,-68,962,840),33271=>array(58,-72,960,821),33272=>array(54,-42,952,756),33273=>array(46,-78,954,824),33274=>array(80,-32,933,829),33275=>array(56,-68,959,829),33276=>array(156,-46,863,793),33277=>array(138,-68,825,829),33278=>array(42,-71,966,824),33279=>array(57,-68,954,833),33280=>array(83,-67,917,834),33281=>array(50,-74,956,834),33282=>array(44,-65,969,838),33283=>array(85,-60,898,834),33284=>array(58,-68,927,834),33285=>array(65,-52,874,842),33286=>array(52,-59,924,829),33287=>array(40,-70,955,836),33288=>array(68,-56,951,826),33289=>array(55,-67,965,810),33290=>array(62,-67,947,832),33291=>array(73,-41,936,832),33292=>array(76,-55,909,831),33293=>array(46,-65,958,856),33294=>array(46,-65,958,856),33295=>array(61,-57,879,831),33296=>array(43,-62,948,828),33297=>array(58,-67,956,829),33298=>array(45,-64,945,848),33299=>array(40,-53,931,818),33300=>array(55,-63,971,789),33301=>array(57,-75,961,824),33302=>array(36,-56,947,851),33303=>array(39,-58,955,843),33304=>array(31,-65,933,851),33305=>array(45,-63,965,846),33306=>array(50,-65,949,855),33307=>array(44,-72,942,837),33308=>array(41,-70,943,842),33309=>array(63,-68,937,841),33310=>array(47,-76,949,852),33311=>array(71,-69,936,839),33312=>array(47,-79,902,826),33313=>array(43,-66,947,837),33314=>array(67,-68,921,845),33315=>array(42,-71,943,821),33316=>array(53,-68,975,845),33317=>array(54,-71,963,853),33318=>array(42,-60,981,860),33319=>array(53,-68,948,848),33320=>array(34,-67,978,855),33321=>array(46,-68,958,835),33322=>array(37,-56,960,849),33323=>array(59,-63,945,849),33324=>array(44,-70,963,833),33325=>array(35,-70,935,822),33326=>array(39,-69,931,834),33327=>array(44,-61,910,856),33328=>array(41,-68,932,838),33329=>array(36,-66,944,833),33330=>array(39,-70,986,860),33331=>array(74,-64,915,839),33332=>array(51,-70,962,846),33333=>array(39,-54,951,849),33334=>array(40,-68,896,851),33335=>array(34,-65,963,849),33336=>array(54,-54,956,849),33337=>array(41,-67,957,849),33338=>array(41,-61,906,856),33339=>array(29,-66,924,828),33340=>array(44,-73,965,835),33341=>array(52,-70,972,840),33342=>array(36,-75,924,825),33343=>array(53,-68,973,839),33344=>array(74,-60,964,849),33345=>array(44,-68,975,845),33346=>array(34,-73,965,841),33347=>array(39,-70,978,843),33348=>array(49,-68,951,846),33349=>array(38,-70,966,840),33350=>array(35,-68,976,845),33351=>array(34,-61,965,849),33352=>array(32,-68,972,845),33353=>array(36,-73,962,836),33354=>array(53,-68,930,845),33355=>array(52,-68,971,839),33356=>array(23,-51,974,846),33357=>array(29,-73,963,845),33358=>array(34,-67,954,839),33359=>array(37,-64,954,856),33360=>array(36,-75,977,840),33361=>array(37,-68,915,838),33362=>array(52,-56,912,850),33363=>array(54,-71,980,828),33364=>array(26,-71,986,849),33365=>array(37,-67,938,847),33366=>array(39,-75,957,843),33367=>array(36,-72,959,845),33368=>array(49,-64,964,854),33369=>array(64,-63,991,863),33370=>array(49,-79,950,829),33371=>array(43,-80,956,833),33372=>array(36,-73,950,831),33373=>array(54,-54,966,849),33374=>array(44,-74,971,834),33375=>array(29,-54,963,849),33376=>array(20,-68,980,845),33377=>array(41,-73,923,836),33378=>array(44,-68,965,844),33379=>array(44,-63,967,856),33380=>array(34,-65,978,852),33381=>array(29,-71,968,850),33382=>array(34,-54,955,849),33383=>array(23,-68,970,845),33384=>array(29,-61,972,844),33385=>array(37,-72,970,845),33386=>array(44,-61,982,849),33387=>array(49,-68,973,845),33388=>array(37,-72,959,840),33389=>array(35,-62,970,858),33390=>array(112,-56,974,796),33391=>array(85,-61,963,820),33392=>array(40,-60,942,791),33393=>array(46,-68,958,827),33394=>array(46,-17,958,838),33395=>array(54,-62,938,828),33396=>array(53,-72,969,842),33397=>array(50,-73,961,831),33398=>array(48,-66,960,832),33399=>array(54,-66,960,832),33400=>array(47,-69,912,827),33401=>array(62,310,913,613),33402=>array(69,-29,919,820),33403=>array(64,-66,943,826),33404=>array(66,-64,939,826),33405=>array(42,-68,974,832),33406=>array(62,-60,946,825),33407=>array(60,-64,935,830),33408=>array(64,-66,943,826),33409=>array(56,-67,945,826),33410=>array(61,-57,911,831),33411=>array(47,-52,961,843),33412=>array(41,-69,969,832),33413=>array(61,-63,950,833),33414=>array(63,-67,946,836),33415=>array(81,-69,931,836),33416=>array(63,-69,940,831),33417=>array(65,-85,938,831),33418=>array(59,-71,951,822),33419=>array(65,-62,938,831),33420=>array(64,-61,932,831),33421=>array(67,-62,929,831),33422=>array(68,-61,936,833),33423=>array(53,-23,949,822),33424=>array(78,-71,948,823),33425=>array(60,-28,951,826),33426=>array(66,-20,936,823),33427=>array(71,-66,947,826),33428=>array(50,-68,915,838),33429=>array(62,-66,912,823),33430=>array(60,-66,936,823),33431=>array(62,-70,912,823),33432=>array(70,-80,959,818),33433=>array(65,-65,955,834),33434=>array(64,-46,950,832),33435=>array(66,-73,957,820),33436=>array(52,-58,929,832),33437=>array(55,-74,967,824),33438=>array(54,-72,962,826),33439=>array(36,-62,976,833),33440=>array(46,-71,971,831),33441=>array(62,-70,939,830),33442=>array(44,-67,956,823),33443=>array(38,-70,935,819),33444=>array(47,-64,967,829),33445=>array(57,-68,961,836),33446=>array(45,-75,937,827),33447=>array(71,-51,943,837),33448=>array(49,-65,970,833),33449=>array(38,-80,971,840),33450=>array(80,-64,956,836),33451=>array(34,-58,971,832),33452=>array(39,-60,957,837),33453=>array(78,-35,936,822),33454=>array(73,-63,927,825),33455=>array(33,-19,951,837),33456=>array(47,-62,974,833),33457=>array(49,-69,934,826),33458=>array(29,-44,951,823),33459=>array(52,-63,933,838),33460=>array(58,-77,941,822),33461=>array(49,-69,972,826),33462=>array(53,-69,944,833),33463=>array(82,-20,935,829),33464=>array(68,-71,940,824),33465=>array(58,-67,933,829),33466=>array(55,-84,979,820),33467=>array(59,-67,912,838),33468=>array(72,-38,951,839),33469=>array(57,-57,943,838),33470=>array(60,-61,954,832),33471=>array(48,-52,913,827),33472=>array(52,-73,964,823),33473=>array(44,-68,941,827),33474=>array(56,-75,968,827),33475=>array(47,-76,980,818),33476=>array(63,-75,937,822),33477=>array(44,-71,916,818),33478=>array(44,-55,913,828),33479=>array(63,-65,913,828),33480=>array(53,-68,912,824),33481=>array(67,-51,918,823),33482=>array(49,-84,928,816),33483=>array(59,-64,931,820),33484=>array(63,-67,942,826),33485=>array(29,-44,951,823),33486=>array(65,9,916,824),33487=>array(61,-68,936,822),33488=>array(62,-62,924,837),33489=>array(60,-66,948,828),33490=>array(57,-68,949,833),33491=>array(42,-67,965,832),33492=>array(71,-65,941,832),33493=>array(62,-66,938,827),33494=>array(72,-71,944,822),33495=>array(69,-68,940,830),33496=>array(63,-78,933,820),33497=>array(51,-14,947,840),33498=>array(70,-73,944,833),33499=>array(66,-63,949,833),33500=>array(68,-65,938,834),33501=>array(68,-54,964,834),33502=>array(44,-45,946,820),33503=>array(48,-62,934,837),33504=>array(69,-70,962,824),33505=>array(74,-67,978,833),33506=>array(79,-70,931,834),33507=>array(79,-80,931,834),33508=>array(57,-11,951,833),33509=>array(72,-65,931,827),33510=>array(80,-67,912,832),33511=>array(67,-61,936,830),33512=>array(55,-67,960,829),33513=>array(79,-65,933,827),33514=>array(66,-62,956,830),33515=>array(79,-66,933,827),33516=>array(68,-70,941,823),33517=>array(77,-67,950,832),33518=>array(45,-67,934,830),33519=>array(58,-71,959,829),33520=>array(69,-68,953,826),33521=>array(50,-71,935,823),33522=>array(48,-64,948,829),33523=>array(48,-61,959,836),33524=>array(60,-14,957,830),33525=>array(47,-71,968,825),33526=>array(40,-70,975,823),33527=>array(51,-71,945,822),33528=>array(68,-66,938,827),33529=>array(55,-64,949,827),33530=>array(53,-52,948,833),33531=>array(43,-65,950,830),33532=>array(59,-36,938,827),33533=>array(49,-62,956,827),33534=>array(56,-50,956,839),33535=>array(50,-61,958,836),33536=>array(48,-66,949,832),33537=>array(80,-64,939,838),33538=>array(61,-70,943,828),33539=>array(46,-69,948,811),33540=>array(57,-68,943,836),33541=>array(51,-64,934,838),33542=>array(40,-59,944,836),33543=>array(48,-65,959,830),33544=>array(59,-41,964,830),33545=>array(50,-61,958,836),33546=>array(66,-29,932,836),33547=>array(80,-64,955,836),33548=>array(39,-66,954,831),33549=>array(55,-67,947,828),33550=>array(46,-32,963,831),33551=>array(33,-66,923,827),33552=>array(27,-57,916,826),33553=>array(58,-60,916,826),33554=>array(66,-70,944,825),33555=>array(68,-59,926,826),33556=>array(75,-7,926,826),33557=>array(62,-66,957,826),33558=>array(55,-73,966,821),33559=>array(61,-66,939,829),33560=>array(42,-66,943,835),33561=>array(66,-68,956,829),33562=>array(61,-72,925,822),33563=>array(63,-60,956,833),33564=>array(60,-64,946,832),33565=>array(69,-39,944,811),33566=>array(68,-40,943,811),33567=>array(77,-64,934,842),33568=>array(41,-68,966,826),33569=>array(53,-64,948,831),33570=>array(61,-53,942,841),33571=>array(46,-66,950,828),33572=>array(87,-76,960,826),33573=>array(59,-26,956,820),33574=>array(53,-68,970,824),33575=>array(54,-67,960,817),33576=>array(54,-65,947,834),33577=>array(47,-70,953,825),33578=>array(49,-76,962,822),33579=>array(61,-46,941,830),33580=>array(59,-58,949,838),33581=>array(56,-66,964,833),33582=>array(62,-70,938,826),33583=>array(53,-66,972,835),33584=>array(72,-66,959,835),33585=>array(38,-64,979,834),33586=>array(85,-60,935,838),33587=>array(56,-62,948,830),33588=>array(66,-65,939,834),33589=>array(72,-61,940,838),33590=>array(41,-67,968,831),33591=>array(44,-72,958,819),33592=>array(61,-63,954,840),33593=>array(53,-68,945,834),33594=>array(21,-31,946,859),33595=>array(57,-68,906,827),33596=>array(66,-64,939,833),33597=>array(42,-74,933,834),33598=>array(65,-69,957,827),33599=>array(46,-67,973,829),33600=>array(45,-58,938,833),33601=>array(65,-25,957,817),33602=>array(42,-68,978,823),33603=>array(51,-26,955,832),33604=>array(55,-53,950,839),33605=>array(59,-62,974,831),33606=>array(33,-62,888,834),33607=>array(60,-54,962,843),33608=>array(54,-71,951,825),33609=>array(59,-68,950,833),33610=>array(69,-74,933,827),33611=>array(68,-69,945,820),33612=>array(62,-73,949,823),33613=>array(69,-70,958,829),33614=>array(74,-30,964,811),33615=>array(29,-69,942,834),33616=>array(31,-53,950,844),33617=>array(55,-63,980,831),33618=>array(41,-56,955,837),33619=>array(65,-69,957,828),33620=>array(42,-66,943,833),33621=>array(48,-65,943,835),33622=>array(53,-30,959,837),33623=>array(61,-70,943,828),33624=>array(43,-65,941,827),33625=>array(57,-50,947,831),33626=>array(26,-60,941,831),33627=>array(59,-65,931,826),33628=>array(63,-68,923,823),33629=>array(30,-66,916,825),33630=>array(35,-71,950,825),33631=>array(35,-56,938,824),33632=>array(25,-70,949,827),33633=>array(34,-64,905,827),33634=>array(65,-62,939,830),33635=>array(42,-71,941,817),33636=>array(53,-57,910,833),33637=>array(37,-60,944,831),33638=>array(56,-63,928,831),33639=>array(67,-74,922,822),33640=>array(64,-66,915,825),33641=>array(37,-71,952,826),33642=>array(44,-66,936,824),33643=>array(78,-69,926,826),33644=>array(35,-66,915,827),33645=>array(36,-16,925,821),33646=>array(45,-68,921,824),33647=>array(56,-68,917,822),33648=>array(48,-69,945,826),33649=>array(73,-63,928,821),33650=>array(56,-32,951,821),33651=>array(59,-34,954,805),33652=>array(45,-76,974,829),33653=>array(63,-32,971,823),33654=>array(71,-79,958,825),33655=>array(42,-74,945,834),33656=>array(53,-64,948,832),33657=>array(57,-58,935,831),33658=>array(49,-62,937,823),33659=>array(35,-65,964,831),33660=>array(49,-65,956,831),33661=>array(48,-72,954,832),33662=>array(51,-70,954,821),33663=>array(41,-62,959,827),33664=>array(45,-67,968,821),33665=>array(69,-16,943,826),33666=>array(62,-70,916,821),33667=>array(48,-70,947,827),33668=>array(51,-66,938,821),33669=>array(26,-74,947,822),33670=>array(62,-65,955,835),33671=>array(57,-75,938,824),33672=>array(54,-76,956,821),33673=>array(46,-59,933,839),33674=>array(46,-69,943,822),33675=>array(50,-70,947,824),33676=>array(42,-63,956,822),33677=>array(55,-69,944,820),33678=>array(42,-67,947,832),33679=>array(47,-70,959,824),33680=>array(56,-66,960,818),33681=>array(39,-64,980,832),33682=>array(66,-70,938,833),33683=>array(60,-62,947,833),33684=>array(66,-65,939,820),33685=>array(54,-69,972,829),33686=>array(76,-18,949,836),33687=>array(69,-63,951,836),33688=>array(53,-67,947,832),33689=>array(45,-63,953,832),33690=>array(40,-73,949,825),33691=>array(36,-69,959,826),33692=>array(20,-82,968,828),33693=>array(60,-17,955,838),33694=>array(47,-58,961,830),33695=>array(37,-79,966,831),33696=>array(42,-67,956,831),33697=>array(55,-73,970,831),33698=>array(57,-65,964,834),33699=>array(47,-24,957,832),33700=>array(66,-67,940,827),33701=>array(46,-65,943,824),33702=>array(76,-64,949,824),33703=>array(46,-62,950,832),33704=>array(61,-61,950,835),33705=>array(53,-64,948,835),33706=>array(69,-65,948,831),33707=>array(65,-72,962,823),33708=>array(43,-64,953,834),33709=>array(61,-65,912,829),33710=>array(50,-73,939,827),33711=>array(47,-67,969,824),33712=>array(54,-74,969,823),33713=>array(32,-61,948,829),33714=>array(36,-59,947,809),33715=>array(62,-64,920,826),33716=>array(62,-63,912,827),33717=>array(43,-59,956,832),33718=>array(35,-19,962,823),33719=>array(32,-63,940,830),33720=>array(35,-66,925,827),33721=>array(65,-19,924,825),33722=>array(62,-62,912,824),33723=>array(42,-64,919,818),33724=>array(50,-27,928,824),33725=>array(40,-65,971,837),33726=>array(36,-71,980,829),33727=>array(63,-65,947,827),33728=>array(51,-68,966,830),33729=>array(71,-65,939,833),33730=>array(85,-63,937,823),33731=>array(47,-73,945,823),33732=>array(41,-70,976,824),33733=>array(63,-68,937,835),33734=>array(58,-74,968,828),33735=>array(52,-61,954,839),33736=>array(72,-67,951,824),33737=>array(65,-52,935,840),33738=>array(41,-63,932,836),33739=>array(77,-69,963,826),33740=>array(70,-61,938,838),33741=>array(38,-44,957,833),33742=>array(80,-34,955,823),33743=>array(60,-62,954,832),33744=>array(88,-64,924,835),33745=>array(72,-62,940,832),33746=>array(49,-70,961,844),33747=>array(45,-68,962,822),33748=>array(46,-70,969,832),33749=>array(40,-61,974,829),33750=>array(71,-59,943,844),33751=>array(64,-70,936,826),33752=>array(25,-66,967,832),33753=>array(69,-29,947,827),33754=>array(67,-60,964,821),33755=>array(86,-73,938,820),33756=>array(48,-65,971,837),33757=>array(63,-74,973,824),33758=>array(59,-69,949,826),33759=>array(50,-57,960,834),33760=>array(61,-62,960,836),33761=>array(68,-65,961,832),33762=>array(60,-72,960,820),33763=>array(79,-74,961,820),33764=>array(42,-39,979,818),33765=>array(44,-64,957,832),33766=>array(60,-70,944,831),33767=>array(50,-69,955,832),33768=>array(69,-75,942,827),33769=>array(72,-59,934,837),33770=>array(62,-65,939,830),33771=>array(64,-38,960,812),33772=>array(68,-73,937,823),33773=>array(39,-67,961,833),33774=>array(45,-70,969,829),33775=>array(56,-78,941,838),33776=>array(43,-65,961,833),33777=>array(46,-65,954,831),33778=>array(61,-65,934,841),33779=>array(54,-39,980,815),33780=>array(35,-42,968,816),33781=>array(95,-65,945,824),33782=>array(40,-70,967,835),33783=>array(73,-68,923,826),33784=>array(44,-66,973,832),33785=>array(56,-39,954,832),33786=>array(62,-68,947,829),33787=>array(48,-69,966,822),33788=>array(48,-62,970,835),33789=>array(39,-73,966,832),33790=>array(47,-72,968,831),33791=>array(69,-70,944,825),33792=>array(43,-73,953,826),33793=>array(62,-69,958,836),33794=>array(46,-59,933,839),33795=>array(76,-59,949,836),33796=>array(43,-63,939,826),33797=>array(60,-67,957,838),33798=>array(59,-52,949,841),33799=>array(61,-67,971,827),33800=>array(46,-62,950,832),33801=>array(42,-67,960,826),33802=>array(35,-62,973,833),33803=>array(54,-70,947,833),33804=>array(61,-68,935,839),33805=>array(54,-63,949,838),33806=>array(53,-73,934,834),33807=>array(77,-62,947,833),33808=>array(42,-69,976,826),33809=>array(36,-67,952,833),33810=>array(53,-60,963,820),33811=>array(67,-38,961,811),33812=>array(47,-44,935,838),33813=>array(44,-76,956,828),33814=>array(77,-62,937,815),33815=>array(67,-63,927,819),33816=>array(50,-68,965,830),33817=>array(25,-66,964,832),33818=>array(38,-69,952,826),33819=>array(58,-70,947,825),33820=>array(52,-77,933,822),33821=>array(65,-58,917,829),33822=>array(79,-58,958,826),33823=>array(36,-68,952,824),33824=>array(59,-74,939,820),33825=>array(50,-65,939,826),33826=>array(51,-30,978,835),33827=>array(49,-73,973,823),33828=>array(63,-70,916,818),33829=>array(66,-71,916,819),33830=>array(54,-60,908,830),33831=>array(54,-62,930,831),33832=>array(74,-67,931,828),33833=>array(40,-64,985,833),33834=>array(41,-69,955,839),33835=>array(42,-70,956,825),33836=>array(77,-68,946,834),33837=>array(73,-61,936,831),33838=>array(46,-71,968,827),33839=>array(50,-81,943,829),33840=>array(46,-71,968,825),33841=>array(52,-24,948,832),33842=>array(59,-70,947,828),33843=>array(71,-66,943,824),33844=>array(46,-76,942,827),33845=>array(70,-67,942,833),33846=>array(43,-73,974,821),33847=>array(67,-68,941,823),33848=>array(31,-64,979,830),33849=>array(47,-66,941,831),33850=>array(70,-69,945,831),33851=>array(69,-69,944,825),33852=>array(77,-62,932,839),33853=>array(56,-68,970,835),33854=>array(59,-57,951,829),33855=>array(53,-72,956,823),33856=>array(55,-68,955,825),33857=>array(67,-57,950,821),33858=>array(34,-63,954,828),33859=>array(71,-68,944,829),33860=>array(53,-67,945,826),33861=>array(46,-32,954,824),33862=>array(35,-68,965,832),33863=>array(46,-61,973,832),33864=>array(48,-55,962,832),33865=>array(49,-70,965,839),33866=>array(45,-64,972,849),33867=>array(42,-67,948,830),33868=>array(46,-71,939,822),33869=>array(71,-70,947,823),33870=>array(32,-70,949,829),33871=>array(52,-67,959,829),33872=>array(55,-29,973,828),33873=>array(53,-58,958,832),33874=>array(61,-49,956,832),33875=>array(67,-69,957,826),33876=>array(51,-71,969,827),33877=>array(41,-69,953,845),33878=>array(47,-61,984,832),33879=>array(43,-64,941,826),33880=>array(63,-62,923,833),33881=>array(45,-69,943,826),33882=>array(51,-32,945,833),33883=>array(62,-61,942,837),33884=>array(34,-67,974,825),33885=>array(61,-67,943,823),33886=>array(68,-73,952,823),33887=>array(83,-27,955,826),33888=>array(32,-53,951,841),33889=>array(41,-64,948,830),33890=>array(34,-20,966,831),33891=>array(76,-27,947,839),33892=>array(61,-58,958,832),33893=>array(77,-68,951,829),33894=>array(63,-59,945,839),33895=>array(82,-65,953,825),33896=>array(69,-67,973,826),33897=>array(62,-51,953,828),33898=>array(61,-75,955,843),33899=>array(69,-61,940,840),33900=>array(45,-62,939,838),33901=>array(60,-67,967,833),33902=>array(43,-72,966,826),33903=>array(57,-66,942,823),33904=>array(41,-71,979,824),33905=>array(49,-37,962,834),33906=>array(42,-70,933,833),33907=>array(39,-64,966,833),33908=>array(55,-66,955,828),33909=>array(66,-60,951,835),33910=>array(74,-54,942,829),33911=>array(74,-64,946,842),33912=>array(46,-29,968,829),33913=>array(42,-56,963,842),33914=>array(51,-64,942,830),33915=>array(24,-66,962,830),33916=>array(69,-65,969,838),33917=>array(69,-70,944,827),33918=>array(59,-36,967,827),33919=>array(69,-70,944,838),33920=>array(59,-21,955,831),33921=>array(36,-39,959,831),33922=>array(72,-67,925,842),33923=>array(72,-60,961,838),33924=>array(51,-67,957,838),33925=>array(51,-68,956,838),33926=>array(68,-81,941,826),33927=>array(20,-69,952,833),33928=>array(60,-67,914,824),33929=>array(60,-69,914,828),33930=>array(60,-58,950,828),33931=>array(41,-59,943,833),33932=>array(25,-60,939,833),33933=>array(39,-69,948,826),33934=>array(49,-71,969,832),33935=>array(61,-71,939,827),33936=>array(47,-52,963,839),33937=>array(54,-81,968,822),33938=>array(69,-64,959,832),33939=>array(51,-62,956,832),33940=>array(70,-61,946,833),33941=>array(52,-37,948,840),33942=>array(70,-89,942,830),33943=>array(48,-64,974,830),33944=>array(62,-69,955,825),33945=>array(53,-75,959,839),33946=>array(83,-66,938,826),33947=>array(42,-74,953,826),33948=>array(37,-59,946,835),33949=>array(42,-68,939,826),33950=>array(53,-65,953,831),33951=>array(53,-66,956,830),33952=>array(52,-29,953,825),33953=>array(66,-64,945,834),33954=>array(76,-68,974,825),33955=>array(46,-69,950,826),33956=>array(56,-72,950,826),33957=>array(77,-76,928,835),33958=>array(38,-69,974,835),33959=>array(51,-73,966,824),33960=>array(23,-53,956,841),33961=>array(52,-68,962,825),33962=>array(60,-70,942,835),33963=>array(37,-47,956,854),33964=>array(43,-60,956,829),33965=>array(65,-71,931,845),33966=>array(29,-70,937,822),33967=>array(56,-70,923,835),33968=>array(50,-79,964,827),33969=>array(48,-55,947,840),33970=>array(46,-61,946,839),33971=>array(65,-75,927,839),33972=>array(41,-69,942,833),33973=>array(54,-59,960,833),33974=>array(45,-72,946,823),33975=>array(66,-64,944,833),33976=>array(47,-73,953,824),33977=>array(31,-64,972,835),33978=>array(50,-69,961,833),33979=>array(40,-60,960,833),33980=>array(43,-62,972,836),33981=>array(36,-39,950,823),33982=>array(49,-52,946,839),33983=>array(68,-68,941,833),33984=>array(44,-64,955,835),33985=>array(36,-69,964,829),33986=>array(53,-65,947,830),33987=>array(51,-67,957,833),33988=>array(51,-66,940,838),33989=>array(48,-72,960,823),33990=>array(43,-71,954,824),33991=>array(54,-64,949,831),33992=>array(70,-65,924,833),33993=>array(46,-66,954,839),33994=>array(35,-62,957,832),33995=>array(59,-21,955,834),33996=>array(48,-74,973,825),33997=>array(53,-67,943,831),33998=>array(46,-75,938,826),33999=>array(59,-74,968,826),34000=>array(52,-67,939,830),34001=>array(44,-71,956,835),34002=>array(63,-72,956,825),34003=>array(48,-62,957,840),34004=>array(62,-71,955,826),34005=>array(48,-57,959,830),34006=>array(67,-58,941,837),34007=>array(51,-68,978,829),34008=>array(46,-78,959,824),34009=>array(57,-66,937,833),34010=>array(33,-76,982,830),34011=>array(38,-73,973,827),34012=>array(60,-67,950,830),34013=>array(54,-23,924,821),34014=>array(62,-67,914,821),34015=>array(26,-62,908,832),34016=>array(62,-63,914,827),34017=>array(44,-67,966,832),34018=>array(62,-75,938,830),34019=>array(61,-63,924,829),34020=>array(38,-76,974,825),34021=>array(29,-6,954,827),34022=>array(38,-56,947,826),34023=>array(36,-52,961,839),34024=>array(42,-67,963,828),34025=>array(35,-71,950,825),34026=>array(50,-73,972,824),34027=>array(43,-72,970,822),34028=>array(35,-62,952,833),34029=>array(38,-59,965,827),34030=>array(37,-56,951,839),34031=>array(33,-69,962,832),34032=>array(51,-68,978,829),34033=>array(56,-73,957,820),34034=>array(65,-32,953,823),34035=>array(66,-32,943,824),34036=>array(64,-63,957,825),34037=>array(40,-75,963,827),34038=>array(69,-70,956,823),34039=>array(67,-68,961,823),34040=>array(61,-74,939,851),34041=>array(45,-67,947,829),34042=>array(40,-55,961,833),34043=>array(54,-47,967,844),34044=>array(26,-76,972,829),34045=>array(56,-65,948,832),34046=>array(73,-70,944,823),34047=>array(33,-67,948,834),34048=>array(61,-65,944,827),34049=>array(67,-68,946,831),34050=>array(68,-69,944,827),34051=>array(74,-58,947,839),34052=>array(71,-65,944,822),34053=>array(63,-57,936,838),34054=>array(49,-76,974,825),34055=>array(69,-70,951,826),34056=>array(62,-65,941,824),34057=>array(44,-68,965,827),34058=>array(51,-66,960,832),34059=>array(47,-70,964,828),34060=>array(45,-67,985,832),34061=>array(49,-69,958,823),34062=>array(66,-73,972,825),34063=>array(66,-70,938,822),34064=>array(39,-73,928,838),34065=>array(48,-70,956,835),34066=>array(47,-73,964,824),34067=>array(59,-61,966,835),34068=>array(57,-68,943,825),34069=>array(74,-71,943,817),34070=>array(28,-68,952,824),34071=>array(52,-67,951,838),34072=>array(31,-70,981,825),34073=>array(39,-72,975,823),34074=>array(51,-68,948,836),34075=>array(40,-66,959,828),34076=>array(41,-73,963,827),34077=>array(75,-68,975,825),34078=>array(56,-73,959,832),34079=>array(36,-75,966,820),34080=>array(53,-70,963,826),34081=>array(63,-64,963,839),34082=>array(64,-68,944,838),34083=>array(49,-59,948,835),34084=>array(57,-70,944,826),34085=>array(56,-30,955,835),34086=>array(53,-67,940,835),34087=>array(55,-23,950,820),34088=>array(79,-71,951,823),34089=>array(66,-73,941,824),34090=>array(58,-69,952,829),34091=>array(42,-64,951,832),34092=>array(54,-71,966,835),34093=>array(76,-78,967,834),34094=>array(78,-69,948,822),34095=>array(57,-53,964,841),34096=>array(36,-69,960,824),34097=>array(73,-83,967,824),34098=>array(32,-67,960,824),34099=>array(45,-59,944,841),34100=>array(44,-73,937,840),34101=>array(31,-67,962,832),34102=>array(65,-65,964,829),34103=>array(73,-73,925,817),34104=>array(24,-81,949,822),34105=>array(41,-73,949,822),34106=>array(63,-66,911,827),34107=>array(42,-72,956,832),34108=>array(65,-60,928,834),34109=>array(69,-70,961,834),34110=>array(39,-59,973,835),34111=>array(33,-59,937,832),34112=>array(32,-72,979,829),34113=>array(56,-62,948,833),34114=>array(41,-76,957,833),34115=>array(36,-69,957,831),34116=>array(71,-65,944,823),34117=>array(42,-69,944,826),34118=>array(31,-67,962,833),34119=>array(69,-68,946,823),34120=>array(54,-69,948,830),34121=>array(42,-61,938,837),34122=>array(38,-54,962,817),34123=>array(24,-64,944,830),34124=>array(76,-77,944,818),34125=>array(41,-72,975,823),34126=>array(50,-65,963,832),34127=>array(76,-73,955,826),34128=>array(60,-78,943,829),34129=>array(63,-57,936,839),34130=>array(48,-69,945,838),34131=>array(53,-77,947,835),34132=>array(58,-68,956,829),34133=>array(55,-60,955,836),34134=>array(42,-68,983,829),34135=>array(39,-71,980,835),34136=>array(33,-59,962,835),34137=>array(38,-33,964,833),34138=>array(58,-70,945,842),34139=>array(37,-67,938,827),34140=>array(62,-65,958,833),34141=>array(56,-48,962,842),34142=>array(51,-62,985,830),34143=>array(58,-53,973,831),34144=>array(45,-68,959,831),34145=>array(61,-76,939,840),34146=>array(65,-70,955,832),34147=>array(68,-74,941,831),34148=>array(64,-56,949,832),34149=>array(32,-69,952,826),34150=>array(43,-76,972,823),34151=>array(43,-75,977,833),34152=>array(38,-67,968,832),34153=>array(67,-67,956,836),34154=>array(59,-67,956,833),34155=>array(64,-46,936,842),34156=>array(52,-69,971,823),34157=>array(51,-74,947,840),34158=>array(47,-62,938,826),34159=>array(54,-56,941,829),34160=>array(67,-76,957,834),34161=>array(35,-65,938,826),34162=>array(62,-69,913,821),34163=>array(68,-73,938,832),34164=>array(41,-29,923,825),34165=>array(44,-85,981,831),34166=>array(42,-81,983,827),34167=>array(67,-68,975,829),34168=>array(48,-74,968,821),34169=>array(44,-62,951,835),34170=>array(62,-65,968,831),34171=>array(67,-68,972,831),34172=>array(60,-70,952,826),34173=>array(48,-58,952,848),34174=>array(73,-61,941,836),34175=>array(42,-85,957,833),34176=>array(54,-48,956,846),34177=>array(45,-74,958,830),34178=>array(41,-78,960,823),34179=>array(65,-72,926,822),34180=>array(53,-68,949,832),34181=>array(41,-65,957,823),34182=>array(48,-69,973,828),34183=>array(36,-77,958,834),34184=>array(27,-65,977,833),34185=>array(41,-71,960,824),34186=>array(46,-64,941,832),34187=>array(78,-81,933,826),34188=>array(47,-65,944,833),34189=>array(79,-66,964,828),34190=>array(62,-71,964,824),34191=>array(33,-50,967,834),34192=>array(27,-54,976,838),34193=>array(58,-41,948,806),34194=>array(42,-63,983,834),34195=>array(37,-60,953,826),34196=>array(60,-61,956,834),34197=>array(40,-67,971,824),34198=>array(48,-74,970,823),34199=>array(64,-63,936,830),34200=>array(47,-66,975,831),34201=>array(44,-68,949,836),34202=>array(51,-68,953,826),34203=>array(69,-61,941,838),34204=>array(42,-65,944,827),34205=>array(54,-70,939,823),34206=>array(40,-70,966,829),34207=>array(34,-50,966,841),34208=>array(51,-76,959,827),34209=>array(49,-74,934,820),34210=>array(40,-75,964,829),34211=>array(64,-75,966,823),34212=>array(50,-67,945,831),34213=>array(62,-58,935,831),34214=>array(37,-67,945,834),34215=>array(61,-65,953,827),34216=>array(50,-63,955,829),34217=>array(72,-65,939,832),34218=>array(51,-70,955,849),34219=>array(47,-70,957,830),34220=>array(49,-70,961,841),34221=>array(51,-78,969,828),34222=>array(52,-68,961,820),34223=>array(46,-61,945,835),34224=>array(47,-70,957,830),34225=>array(56,-69,957,828),34226=>array(44,-75,974,836),34227=>array(53,-67,967,828),34228=>array(63,-61,959,832),34229=>array(64,-70,941,826),34230=>array(51,-64,962,826),34231=>array(62,-67,952,833),34232=>array(58,-62,961,831),34233=>array(53,-57,941,831),34234=>array(49,-69,956,833),34235=>array(48,-89,961,832),34236=>array(58,-65,951,840),34237=>array(51,-74,956,823),34238=>array(43,-66,974,823),34239=>array(52,-68,971,827),34240=>array(56,-69,977,827),34241=>array(32,-67,968,842),34242=>array(38,-68,958,825),34243=>array(60,-74,955,828),34244=>array(36,-68,968,828),34245=>array(74,-62,946,833),34246=>array(43,-65,969,829),34247=>array(63,-54,941,839),34248=>array(59,-65,954,832),34249=>array(29,-67,952,832),34250=>array(32,-57,944,831),34251=>array(53,-64,956,829),34252=>array(74,-56,945,832),34253=>array(56,-34,949,839),34254=>array(55,-38,951,842),34255=>array(34,-71,942,824),34256=>array(57,-70,960,834),34257=>array(60,-68,961,833),34258=>array(51,-70,947,828),34259=>array(39,-64,922,826),34260=>array(41,-64,970,834),34261=>array(40,-67,937,833),34262=>array(67,-58,944,833),34263=>array(52,-71,986,824),34264=>array(55,-69,958,818),34265=>array(65,-72,971,826),34266=>array(83,-80,938,828),34267=>array(67,-56,937,821),34268=>array(47,-65,953,831),34269=>array(62,-72,954,836),34270=>array(41,-63,951,830),34271=>array(73,-68,936,825),34272=>array(47,-77,973,824),34273=>array(45,-73,982,827),34274=>array(53,-68,975,827),34275=>array(69,-65,939,827),34276=>array(39,-67,959,836),34277=>array(55,-62,930,826),34278=>array(45,-65,935,829),34279=>array(50,-58,964,824),34280=>array(44,-75,945,829),34281=>array(40,-62,960,836),34282=>array(45,-71,967,830),34283=>array(51,-73,950,836),34284=>array(74,-80,943,832),34285=>array(51,-64,948,835),34286=>array(38,-69,969,845),34287=>array(52,-46,974,822),34288=>array(62,-65,924,829),34289=>array(39,-64,959,826),34290=>array(42,-65,956,826),34291=>array(32,-67,968,828),34292=>array(53,-63,956,818),34293=>array(56,-65,942,845),34294=>array(33,-65,954,832),34295=>array(62,-69,955,826),34296=>array(55,-70,962,827),34297=>array(72,-61,929,839),34298=>array(57,-65,949,832),34299=>array(49,-65,971,839),34300=>array(44,-58,955,836),34301=>array(49,-62,966,833),34302=>array(44,-76,974,830),34303=>array(43,-68,929,837),34304=>array(54,-61,958,838),34305=>array(65,-32,945,823),34306=>array(43,-62,975,837),34307=>array(53,-62,946,838),34308=>array(48,-67,940,832),34309=>array(41,-67,953,832),34310=>array(59,-66,961,836),34311=>array(56,-67,948,827),34312=>array(61,-68,960,833),34313=>array(46,-64,957,855),34314=>array(53,-71,956,818),34315=>array(47,-68,960,837),34316=>array(51,-59,960,833),34317=>array(74,-58,947,832),34318=>array(76,-75,981,842),34319=>array(42,-67,958,832),34320=>array(62,-73,964,840),34321=>array(55,-66,960,838),34322=>array(43,-68,964,832),34323=>array(67,-76,966,830),34324=>array(42,-61,972,832),34325=>array(50,-81,955,832),34326=>array(50,-62,965,838),34327=>array(41,-62,965,837),34328=>array(56,-63,978,829),34329=>array(63,-70,947,831),34330=>array(43,-67,950,830),34331=>array(57,-62,945,830),34332=>array(69,-68,946,825),34333=>array(37,-57,968,832),34334=>array(45,-69,987,835),34335=>array(63,-56,956,823),34336=>array(59,-72,947,824),34337=>array(73,-72,950,827),34338=>array(56,-65,961,833),34339=>array(55,-75,960,830),34340=>array(59,-70,935,828),34341=>array(48,-62,969,828),34342=>array(70,-62,942,829),34343=>array(42,-72,982,831),34344=>array(53,-59,968,829),34345=>array(59,-64,964,833),34346=>array(48,-58,983,831),34347=>array(42,-50,963,830),34348=>array(55,-69,949,822),34349=>array(72,-70,928,839),34350=>array(49,-70,946,830),34351=>array(53,-25,951,830),34352=>array(44,-61,974,830),34353=>array(34,-72,965,829),34354=>array(65,-31,945,821),34355=>array(42,-71,954,828),34356=>array(63,-48,934,844),34357=>array(49,-66,958,827),34358=>array(44,-71,969,828),34359=>array(36,-62,971,832),34360=>array(64,-63,951,836),34361=>array(39,-69,965,829),34362=>array(60,-67,951,827),34363=>array(60,-70,963,825),34364=>array(41,-67,959,829),34365=>array(40,-58,969,838),34366=>array(39,-72,984,826),34367=>array(61,-80,954,835),34368=>array(43,-33,968,823),34369=>array(32,-64,968,849),34370=>array(60,-70,965,832),34371=>array(44,-66,967,828),34372=>array(59,-71,963,837),34373=>array(32,-53,978,837),34374=>array(68,-54,936,849),34375=>array(65,-70,951,834),34376=>array(68,-74,940,832),34377=>array(68,-56,949,831),34378=>array(48,-71,961,828),34379=>array(55,-67,947,842),34380=>array(62,-43,947,830),34381=>array(47,-66,924,829),34382=>array(35,-68,953,835),34383=>array(40,-59,893,834),34384=>array(39,-63,878,840),34385=>array(39,-60,937,832),34386=>array(40,-67,963,847),34387=>array(40,-53,954,843),34388=>array(49,-66,949,835),34389=>array(39,-68,959,836),34390=>array(29,-55,931,837),34391=>array(36,-62,919,837),34392=>array(29,-58,948,837),34393=>array(44,-67,961,827),34394=>array(30,-57,914,830),34395=>array(38,-66,936,829),34396=>array(45,-77,929,841),34397=>array(23,-82,956,830),34398=>array(35,-68,950,838),34399=>array(53,-71,951,829),34400=>array(40,-58,959,840),34401=>array(46,-84,950,823),34402=>array(43,-70,960,831),34403=>array(38,-67,972,828),34404=>array(31,-68,967,827),34405=>array(42,-75,989,831),34406=>array(39,-91,965,830),34407=>array(40,-76,954,834),34408=>array(44,-77,946,823),34409=>array(36,-75,953,829),34410=>array(40,-73,973,832),34411=>array(47,-59,954,850),34412=>array(46,-41,928,809),34413=>array(53,-72,899,811),34414=>array(43,-65,961,816),34415=>array(48,-45,957,849),34416=>array(49,-67,955,815),34417=>array(65,-59,970,792),34418=>array(43,-63,962,815),34419=>array(51,-70,916,829),34420=>array(44,-35,964,827),34421=>array(47,-23,957,841),34422=>array(47,-54,962,814),34423=>array(54,-68,954,819),34424=>array(47,-62,967,814),34425=>array(28,-5,930,813),34426=>array(21,-56,962,811),34427=>array(50,-21,942,814),34428=>array(54,-30,957,831),34429=>array(76,-59,888,792),34430=>array(46,-64,944,823),34431=>array(32,-69,914,772),34432=>array(48,-51,935,832),34433=>array(39,-78,942,814),34434=>array(47,-61,909,830),34435=>array(58,-63,942,839),34436=>array(47,-58,960,836),34437=>array(43,-74,950,810),34438=>array(48,-41,961,791),34439=>array(53,-76,973,808),34440=>array(47,-67,958,814),34441=>array(21,-71,976,838),34442=>array(38,-62,956,822),34443=>array(69,-65,914,808),34444=>array(45,-61,939,842),34445=>array(36,-51,951,817),34446=>array(53,-72,914,802),34447=>array(36,-69,869,805),34448=>array(69,-56,930,840),34449=>array(45,-54,967,844),34450=>array(45,-70,967,829),34451=>array(44,-61,899,833),34452=>array(57,-69,967,823),34453=>array(51,-69,963,793),34454=>array(53,-73,960,805),34455=>array(53,-71,971,823),34456=>array(41,-72,961,827),34457=>array(51,-66,963,838),34458=>array(51,-68,953,828),34459=>array(53,-66,891,815),34460=>array(47,-61,958,824),34461=>array(44,-33,953,833),34462=>array(55,-70,966,822),34463=>array(29,-27,948,809),34464=>array(48,-90,964,825),34465=>array(52,-73,978,808),34466=>array(49,-73,958,823),34467=>array(43,-59,961,807),34468=>array(29,-78,971,784),34469=>array(51,-70,963,833),34470=>array(45,-54,954,829),34471=>array(39,-65,957,854),34472=>array(53,-66,964,830),34473=>array(50,-66,952,833),34474=>array(43,-65,958,830),34475=>array(44,-45,967,834),34476=>array(37,-65,930,809),34477=>array(37,-65,945,809),34478=>array(37,-65,956,835),34479=>array(51,-7,955,825),34480=>array(71,-64,916,830),34481=>array(54,-65,948,844),34482=>array(40,-65,943,811),34483=>array(35,-51,958,849),34484=>array(65,-69,911,839),34485=>array(47,-50,954,828),34486=>array(50,-64,953,831),34487=>array(40,-23,954,814),34488=>array(49,-73,939,818),34489=>array(58,-69,955,839),34490=>array(47,-65,951,829),34491=>array(56,-74,960,824),34492=>array(67,-66,926,844),34493=>array(65,-29,962,809),34494=>array(66,-65,951,831),34495=>array(53,-51,953,823),34496=>array(51,-6,964,851),34497=>array(55,-70,903,812),34498=>array(54,-72,967,830),34499=>array(55,-67,940,810),34500=>array(51,-64,943,830),34501=>array(54,-67,938,829),34502=>array(46,-13,954,837),34503=>array(41,-38,959,828),34504=>array(55,-76,968,826),34505=>array(34,-65,966,854),34506=>array(57,-21,910,831),34507=>array(66,-73,957,788),34508=>array(64,-70,973,819),34509=>array(83,-70,896,824),34510=>array(34,-63,906,809),34511=>array(35,-16,936,814),34512=>array(54,-56,923,843),34513=>array(56,-62,963,851),34514=>array(54,-61,982,849),34515=>array(59,-54,960,840),34516=>array(51,-64,904,837),34517=>array(51,-67,961,837),34518=>array(54,-55,964,825),34519=>array(73,-70,948,859),34520=>array(46,-64,948,835),34521=>array(55,-18,954,844),34522=>array(56,-76,918,821),34523=>array(26,-72,957,829),34524=>array(52,-67,951,840),34525=>array(47,-66,965,811),34526=>array(44,-64,947,826),34527=>array(40,-65,963,821),34528=>array(52,-67,952,841),34529=>array(63,-53,930,814),34530=>array(56,-74,953,827),34531=>array(53,-62,952,827),34532=>array(38,-65,963,841),34533=>array(54,-70,935,839),34534=>array(51,-75,961,820),34535=>array(37,-66,931,820),34536=>array(51,-70,945,807),34537=>array(57,-64,946,779),34538=>array(69,-75,944,829),34539=>array(60,-72,980,841),34540=>array(39,-67,981,827),34541=>array(45,-21,947,824),34542=>array(50,-75,949,836),34543=>array(27,-32,959,833),34544=>array(46,-67,937,825),34545=>array(36,-68,931,821),34546=>array(33,-67,934,823),34547=>array(30,-66,918,821),34548=>array(36,-68,938,840),34549=>array(57,-30,953,815),34550=>array(48,-66,948,827),34551=>array(60,-70,969,822),34552=>array(57,-68,939,832),34553=>array(54,-54,900,826),34554=>array(40,-68,963,838),34555=>array(44,-76,961,820),34556=>array(40,-67,948,835),34557=>array(58,-67,961,825),34558=>array(61,-55,970,835),34559=>array(43,-67,961,834),34560=>array(68,-65,913,776),34561=>array(53,-71,967,830),34562=>array(37,-59,965,847),34563=>array(85,-76,941,788),34564=>array(52,-75,970,815),34565=>array(69,-64,954,835),34566=>array(56,-67,958,809),34567=>array(60,-65,959,835),34568=>array(39,-66,961,809),34569=>array(42,-62,950,835),34570=>array(61,-62,918,832),34571=>array(52,-71,965,855),34572=>array(61,-32,962,826),34573=>array(43,-62,963,850),34574=>array(58,-71,915,815),34575=>array(49,-74,969,818),34576=>array(29,-68,926,833),34577=>array(42,-72,967,829),34578=>array(40,-66,967,813),34579=>array(32,-68,963,811),34580=>array(63,-58,912,828),34581=>array(36,-73,954,830),34582=>array(47,-71,904,815),34583=>array(51,-66,902,815),34584=>array(59,-57,909,847),34585=>array(41,-69,970,829),34586=>array(46,-67,939,824),34587=>array(61,-75,954,813),34588=>array(74,-70,931,833),34589=>array(26,-70,971,843),34590=>array(47,-67,962,832),34591=>array(42,-75,933,845),34592=>array(74,-71,918,813),34593=>array(41,-52,951,842),34594=>array(40,-25,953,813),34595=>array(36,-61,954,845),34596=>array(56,-80,948,823),34597=>array(55,-65,952,829),34598=>array(61,-65,968,828),34599=>array(71,-77,983,823),34600=>array(32,-60,956,839),34601=>array(48,-70,890,815),34602=>array(57,-62,917,831),34603=>array(59,-49,955,809),34604=>array(59,-73,903,814),34605=>array(64,-68,908,825),34606=>array(47,-66,957,837),34607=>array(53,-65,978,838),34608=>array(45,-76,973,790),34609=>array(49,-64,957,855),34610=>array(58,-85,954,818),34611=>array(58,-71,955,834),34612=>array(65,-64,911,815),34613=>array(56,-72,902,813),34614=>array(50,-68,974,842),34615=>array(40,-33,967,831),34616=>array(79,-89,951,778),34617=>array(31,-67,946,826),34618=>array(52,-52,959,851),34619=>array(47,-65,953,839),34620=>array(64,-68,950,832),34621=>array(39,-65,947,814),34622=>array(46,-62,965,811),34623=>array(45,-66,966,830),34624=>array(40,-51,974,842),34625=>array(90,-89,944,774),34626=>array(34,-69,976,817),34627=>array(54,-77,957,814),34628=>array(50,-67,915,825),34629=>array(57,-89,971,787),34630=>array(40,-69,952,819),34631=>array(29,-30,932,806),34632=>array(37,-68,877,810),34633=>array(41,-61,945,848),34634=>array(41,-66,968,846),34635=>array(41,-64,983,813),34636=>array(48,-65,951,832),34637=>array(51,-69,915,817),34638=>array(60,-58,919,836),34639=>array(56,-68,949,832),34640=>array(46,-70,903,814),34641=>array(42,-74,964,811),34642=>array(47,-71,948,815),34643=>array(40,-63,968,829),34644=>array(50,-72,957,824),34645=>array(38,-65,961,835),34646=>array(56,-29,956,829),34647=>array(39,-37,936,834),34648=>array(33,-30,944,818),34649=>array(46,-69,932,807),34650=>array(47,-73,970,814),34651=>array(48,-69,965,828),34652=>array(59,-75,965,836),34653=>array(34,-54,959,853),34654=>array(55,-70,908,814),34655=>array(51,-65,912,815),34656=>array(48,-65,948,812),34657=>array(53,-71,968,815),34658=>array(53,-78,956,815),34659=>array(50,-67,956,837),34660=>array(61,-66,965,852),34661=>array(49,-45,964,848),34662=>array(51,-68,980,834),34663=>array(47,-74,972,823),34664=>array(31,-64,952,809),34665=>array(50,-32,955,824),34666=>array(49,-66,951,815),34667=>array(43,-69,939,825),34668=>array(55,-77,976,825),34669=>array(61,-74,986,812),34670=>array(33,-64,967,845),34671=>array(44,-76,955,825),34672=>array(29,-45,960,831),34673=>array(45,-64,975,837),34674=>array(56,-67,942,831),34675=>array(51,-74,952,829),34676=>array(40,-71,899,833),34677=>array(50,-82,961,831),34678=>array(31,-62,972,842),34679=>array(45,-73,947,833),34680=>array(50,-57,918,826),34681=>array(54,-30,968,813),34682=>array(37,-70,920,834),34683=>array(37,-62,947,837),34684=>array(37,-63,932,813),34685=>array(50,-70,951,821),34686=>array(31,-65,949,823),34687=>array(47,-42,971,806),34688=>array(78,-74,956,837),34689=>array(42,-72,973,815),34690=>array(60,-59,957,831),34691=>array(46,-64,940,849),34692=>array(43,-62,948,843),34693=>array(40,-33,959,853),34694=>array(63,-63,966,837),34695=>array(49,-53,974,853),34696=>array(47,-71,953,810),34697=>array(53,-69,971,830),34698=>array(44,-64,977,843),34699=>array(39,-69,965,836),34700=>array(41,-80,956,858),34701=>array(64,-62,967,826),34702=>array(45,-73,955,827),34703=>array(47,-71,977,834),34704=>array(53,-72,952,830),34705=>array(40,-75,979,845),34706=>array(58,-75,976,834),34707=>array(49,-67,987,836),34708=>array(47,-73,976,836),34709=>array(50,-46,973,852),34710=>array(47,-67,941,813),34711=>array(39,-65,949,848),34712=>array(39,-18,943,838),34713=>array(31,-67,977,832),34714=>array(75,-73,954,852),34715=>array(33,-73,947,845),34716=>array(73,-71,966,826),34717=>array(45,-66,977,842),34718=>array(55,-60,936,836),34719=>array(36,-66,951,833),34720=>array(36,-26,957,840),34721=>array(36,-77,957,840),34722=>array(68,-66,934,839),34723=>array(29,-68,972,835),34724=>array(56,-71,987,842),34725=>array(17,-60,970,855),34726=>array(49,-65,969,831),34727=>array(49,-71,936,832),34728=>array(29,-65,921,825),34729=>array(26,-60,966,841),34730=>array(57,-70,939,837),34731=>array(54,-60,942,850),34732=>array(46,-62,957,836),34733=>array(46,-62,951,854),34734=>array(34,-57,945,836),34735=>array(39,-72,943,836),34736=>array(44,-59,961,835),34737=>array(63,-66,934,832),34738=>array(59,-21,951,826),34739=>array(54,-17,958,842),34740=>array(82,-79,967,823),34741=>array(49,-64,955,812),34742=>array(36,-77,965,816),34743=>array(49,-82,957,847),34744=>array(46,-76,950,829),34745=>array(56,-72,956,826),34746=>array(33,-73,961,835),34747=>array(49,-67,954,836),34748=>array(61,-32,955,822),34749=>array(45,-68,977,843),34750=>array(37,-78,959,840),34751=>array(50,-83,958,836),34752=>array(36,-65,949,819),34753=>array(57,-70,957,827),34754=>array(56,-67,965,841),34755=>array(51,-73,975,818),34756=>array(55,-65,965,834),34757=>array(56,-70,966,831),34758=>array(38,-65,966,834),34759=>array(57,-87,954,835),34760=>array(51,-64,912,809),34761=>array(40,-59,969,834),34762=>array(57,-67,957,787),34763=>array(30,-34,949,828),34764=>array(52,-31,968,832),34765=>array(34,-81,958,811),34766=>array(34,-67,947,829),34767=>array(42,-80,984,825),34768=>array(54,-64,934,839),34769=>array(59,-61,967,852),34770=>array(46,-65,956,833),34771=>array(33,-64,970,841),34772=>array(44,-71,960,815),34773=>array(54,-70,940,831),34774=>array(49,-67,954,836),34775=>array(57,-80,938,834),34776=>array(49,-68,962,844),34777=>array(43,-71,958,838),34778=>array(57,-80,961,820),34779=>array(41,-64,961,832),34780=>array(50,-68,962,838),34781=>array(48,-66,959,846),34782=>array(89,-83,954,825),34783=>array(43,-68,952,835),34784=>array(33,-66,951,835),34785=>array(56,-71,920,837),34786=>array(51,-68,957,832),34787=>array(36,-66,960,833),34788=>array(34,-73,943,806),34789=>array(53,-68,965,847),34790=>array(51,-74,965,827),34791=>array(52,-68,949,833),34792=>array(53,-71,954,790),34793=>array(51,-70,982,821),34794=>array(44,-50,977,815),34795=>array(52,-66,953,813),34796=>array(56,-58,955,823),34797=>array(43,-68,945,834),34798=>array(30,-71,936,833),34799=>array(43,-66,957,832),34800=>array(31,-72,961,835),34801=>array(51,-69,961,836),34802=>array(60,-64,975,840),34803=>array(43,-75,945,818),34804=>array(49,-74,959,830),34805=>array(30,-71,948,807),34806=>array(41,-30,935,814),34807=>array(49,-64,915,829),34808=>array(36,-64,975,819),34809=>array(45,-71,948,851),34810=>array(52,-27,953,831),34811=>array(42,-73,947,850),34812=>array(49,-74,951,830),34813=>array(46,-57,950,833),34814=>array(43,-68,958,855),34815=>array(40,-56,955,843),34816=>array(51,-70,953,839),34817=>array(55,-76,941,841),34818=>array(43,-65,975,828),34819=>array(41,-68,957,849),34820=>array(37,-53,974,861),34821=>array(46,-48,957,819),34822=>array(66,-72,962,833),34823=>array(62,-66,958,832),34824=>array(52,-71,961,828),34825=>array(43,-71,969,820),34826=>array(34,-67,946,851),34827=>array(52,-66,924,817),34828=>array(42,-62,940,820),34829=>array(40,-75,977,824),34830=>array(46,-65,956,833),34831=>array(43,-61,948,847),34832=>array(41,-64,968,849),34833=>array(37,-65,965,839),34834=>array(48,-75,957,802),34835=>array(47,-60,961,835),34836=>array(50,-59,966,846),34837=>array(56,-59,943,829),34838=>array(34,-65,976,832),34839=>array(40,-66,951,806),34840=>array(34,-59,974,842),34841=>array(39,-69,965,842),34842=>array(53,-71,942,840),34843=>array(44,-64,961,839),34844=>array(38,-87,979,834),34845=>array(52,-70,929,784),34846=>array(56,-86,949,838),34847=>array(32,-60,961,848),34848=>array(53,-71,944,786),34849=>array(52,-64,957,844),34850=>array(55,-62,972,858),34851=>array(50,-65,948,818),34852=>array(67,-69,969,853),34853=>array(63,-75,944,846),34854=>array(45,-71,956,827),34855=>array(54,-67,967,844),34856=>array(42,-55,965,842),34857=>array(64,-71,964,823),34858=>array(71,-75,962,845),34859=>array(65,-77,969,831),34860=>array(40,-68,950,839),34861=>array(54,-79,967,854),34862=>array(35,-73,975,802),34863=>array(40,-70,954,844),34864=>array(30,-66,975,846),34865=>array(46,-33,957,833),34866=>array(57,-63,929,842),34867=>array(34,-78,953,806),34868=>array(55,-68,942,826),34869=>array(47,-65,949,828),34870=>array(50,-76,965,793),34871=>array(46,-64,946,807),34872=>array(36,-67,941,826),34873=>array(54,-67,967,844),34874=>array(50,-88,965,809),34875=>array(62,-77,944,830),34876=>array(48,-68,986,819),34877=>array(41,-73,966,829),34878=>array(47,-71,924,815),34879=>array(89,-73,946,847),34880=>array(55,-11,954,806),34881=>array(59,-14,955,846),34882=>array(34,-60,971,811),34883=>array(43,-70,968,833),34884=>array(20,-15,947,834),34885=>array(25,-45,949,853),34886=>array(49,-64,958,836),34887=>array(37,-68,971,836),34888=>array(40,-69,955,832),34889=>array(34,-61,982,849),34890=>array(31,-68,957,830),34891=>array(63,-57,941,842),34892=>array(51,-62,941,845),34893=>array(41,-68,954,827),34894=>array(53,-67,960,829),34895=>array(50,-68,948,829),34896=>array(53,-66,960,829),34897=>array(53,-66,960,829),34898=>array(47,-65,954,835),34899=>array(39,-73,951,824),34900=>array(29,-68,923,828),34901=>array(46,-65,952,833),34902=>array(49,-69,960,833),34903=>array(41,-72,951,831),34904=>array(24,-66,960,853),34905=>array(40,-65,959,831),34906=>array(46,-70,953,825),34907=>array(37,-65,955,839),34908=>array(34,-66,960,816),34909=>array(38,-68,953,835),34910=>array(35,-70,943,831),34911=>array(39,-66,954,841),34912=>array(24,-72,936,839),34913=>array(33,-69,945,835),34914=>array(37,-65,956,837),34915=>array(38,-68,944,826),34916=>array(266,-66,677,819),34917=>array(40,-69,954,843),34918=>array(41,-50,963,842),34919=>array(41,-67,958,844),34920=>array(52,-75,953,835),34921=>array(34,-67,971,843),34922=>array(35,-64,954,843),34923=>array(42,-68,957,830),34924=>array(32,-60,917,839),34925=>array(35,-61,973,841),34926=>array(54,-73,963,845),34927=>array(45,-74,973,845),34928=>array(37,-70,960,832),34929=>array(50,-76,963,844),34930=>array(23,-69,879,803),34931=>array(33,-65,955,831),34932=>array(54,-75,964,842),34933=>array(46,-53,909,805),34934=>array(62,-67,932,844),34935=>array(42,-73,960,829),34936=>array(50,-63,946,837),34937=>array(50,-67,956,838),34938=>array(47,-68,960,850),34939=>array(61,-67,966,838),34940=>array(50,-70,976,850),34941=>array(39,-67,946,810),34942=>array(37,-62,955,858),34943=>array(36,-65,970,848),34944=>array(60,-71,930,838),34945=>array(67,-62,967,833),34946=>array(32,-66,964,832),34947=>array(30,-73,984,823),34948=>array(16,-76,940,837),34949=>array(49,-59,950,829),34950=>array(48,-67,906,842),34951=>array(48,-78,956,842),34952=>array(48,-67,959,831),34953=>array(48,-67,957,842),34954=>array(48,-77,949,842),34955=>array(44,-69,962,837),34956=>array(44,-69,956,851),34957=>array(42,-67,960,839),34958=>array(37,-75,914,845),34959=>array(44,-60,964,845),34960=>array(29,-62,970,845),34961=>array(50,-72,894,840),34962=>array(47,-65,951,828),34963=>array(45,-68,956,844),34964=>array(48,-67,953,842),34965=>array(51,-74,966,841),34966=>array(46,-68,899,827),34967=>array(39,-52,972,853),34968=>array(47,-65,957,843),34969=>array(47,-72,892,848),34970=>array(31,-62,967,847),34971=>array(39,-58,960,850),34972=>array(28,-56,970,847),34973=>array(39,-70,941,848),34974=>array(52,-58,961,840),34975=>array(47,-80,966,838),34976=>array(50,-67,961,846),34977=>array(52,-68,954,841),34978=>array(43,-65,954,838),34979=>array(54,-61,964,848),34980=>array(47,-62,960,845),34981=>array(54,-62,948,848),34982=>array(54,-65,916,848),34983=>array(54,-71,914,848),34984=>array(52,-62,947,844),34985=>array(54,-66,951,848),34986=>array(46,-65,955,842),34987=>array(36,-69,962,838),34988=>array(44,-68,964,849),34989=>array(29,-63,942,840),34990=>array(54,-61,944,856),34991=>array(54,-74,945,848),34992=>array(61,-67,945,811),34993=>array(33,-74,971,834),34994=>array(51,-79,960,854),34995=>array(41,-70,935,848),34996=>array(36,-63,982,842),34997=>array(46,-55,954,833),34998=>array(38,-67,972,844),34999=>array(36,-63,966,850),35000=>array(44,-70,954,836),35001=>array(41,-70,951,842),35002=>array(42,-72,950,844),35003=>array(33,-70,954,842),35004=>array(50,-71,977,841),35005=>array(47,-55,904,852),35006=>array(28,-55,965,844),35007=>array(41,-65,959,838),35008=>array(36,-57,916,842),35009=>array(42,-66,957,840),35010=>array(44,-73,955,828),35011=>array(41,-65,913,835),35012=>array(41,-67,964,840),35013=>array(45,-68,959,830),35014=>array(28,-66,864,822),35015=>array(46,-53,972,855),35016=>array(41,-65,948,842),35017=>array(39,-71,966,842),35018=>array(46,-64,958,852),35019=>array(37,-67,964,834),35020=>array(37,-72,966,846),35021=>array(38,-65,908,842),35022=>array(48,-65,956,847),35023=>array(43,-75,955,840),35024=>array(28,-68,915,842),35025=>array(41,-65,950,842),35026=>array(55,-61,967,850),35027=>array(41,-65,957,842),35028=>array(35,-67,942,845),35029=>array(44,-69,969,833),35030=>array(30,-71,980,840),35031=>array(37,-73,960,840),35032=>array(51,-55,963,832),35033=>array(42,-74,948,823),35034=>array(40,-74,969,830),35035=>array(46,-70,969,838),35036=>array(32,-63,946,834),35037=>array(57,-60,957,832),35038=>array(35,-65,959,841),35039=>array(33,-67,948,833),35040=>array(33,-82,948,786),35041=>array(41,-64,954,821),35042=>array(20,-69,935,815),35043=>array(23,-68,956,832),35044=>array(29,-60,931,840),35045=>array(24,-68,886,822),35046=>array(36,-79,957,841),35047=>array(45,-76,966,840),35048=>array(31,-68,941,849),35049=>array(31,-68,949,842),35050=>array(41,-66,917,842),35051=>array(47,-71,903,842),35052=>array(49,-72,973,839),35053=>array(31,-68,949,842),35054=>array(54,-70,905,840),35055=>array(36,-65,906,844),35056=>array(36,-67,971,838),35057=>array(34,-65,975,843),35058=>array(46,-71,948,823),35059=>array(45,-68,956,836),35060=>array(35,-63,958,830),35061=>array(47,-74,948,832),35062=>array(45,-70,955,840),35063=>array(47,-65,973,838),35064=>array(40,-71,973,822),35065=>array(68,-59,967,842),35066=>array(41,-70,966,837),35067=>array(41,-75,956,824),35068=>array(53,-64,928,823),35069=>array(28,-79,972,842),35070=>array(35,-68,957,825),35071=>array(53,-64,954,845),35072=>array(42,-72,963,843),35073=>array(42,-69,960,785),35074=>array(34,-66,968,833),35075=>array(34,-70,930,837),35076=>array(34,-66,938,835),35077=>array(51,-72,957,839),35078=>array(41,-73,968,837),35079=>array(36,-67,962,845),35080=>array(40,-63,956,840),35081=>array(43,-75,972,835),35082=>array(38,-70,906,823),35083=>array(53,-68,975,841),35084=>array(36,-65,952,823),35085=>array(34,-67,956,837),35086=>array(38,-73,976,847),35087=>array(38,-56,957,855),35088=>array(36,-63,924,834),35089=>array(50,-75,977,838),35090=>array(56,-73,972,842),35091=>array(32,-65,964,836),35092=>array(47,-71,952,842),35093=>array(45,-66,965,840),35094=>array(54,-70,978,837),35095=>array(44,-64,946,840),35096=>array(34,-58,954,838),35097=>array(30,-64,965,837),35098=>array(46,-64,959,841),35099=>array(23,-62,929,821),35100=>array(31,-80,971,836),35101=>array(38,-73,940,833),35102=>array(35,-68,968,820),35103=>array(39,-70,915,842),35104=>array(23,-65,954,829),35105=>array(45,-61,956,838),35106=>array(37,-75,978,839),35107=>array(48,-72,987,836),35108=>array(23,-60,977,833),35109=>array(42,-70,953,820),35110=>array(32,-55,970,855),35111=>array(24,-54,972,846),35112=>array(35,-57,933,847),35113=>array(31,-76,970,843),35114=>array(26,-73,967,820),35115=>array(19,-70,951,838),35116=>array(53,-70,993,835),35117=>array(47,-79,964,856),35118=>array(39,-71,976,833),35119=>array(41,-72,945,841),35120=>array(36,-65,974,846),35121=>array(51,-75,974,846),35122=>array(30,-69,947,845),35123=>array(30,-65,965,837),35124=>array(12,-68,918,821),35125=>array(31,-55,947,855),35126=>array(34,-65,910,817),35127=>array(42,-75,973,833),35128=>array(36,-66,945,842),35129=>array(23,-70,971,823),35130=>array(56,-68,972,840),35131=>array(54,-60,955,843),35132=>array(42,-70,971,833),35133=>array(56,-72,972,832),35134=>array(45,-67,957,850),35135=>array(23,-69,942,828),35136=>array(41,-74,947,833),35137=>array(17,-68,965,819),35138=>array(31,-59,973,853),35139=>array(56,-56,949,840),35140=>array(49,-58,955,843),35141=>array(32,-68,948,833),35142=>array(40,-67,972,844),35143=>array(51,-67,924,842),35144=>array(23,-69,955,821),35145=>array(39,-64,911,837),35146=>array(23,-66,962,821),35147=>array(33,-67,973,837),35148=>array(39,-63,950,817),35149=>array(36,-68,966,832),35150=>array(23,-67,964,833),35151=>array(40,-72,963,839),35152=>array(46,-66,958,838),35153=>array(42,-67,952,843),35154=>array(41,-76,970,831),35155=>array(30,-70,954,832),35156=>array(23,-67,951,831),35157=>array(26,-59,937,831),35158=>array(35,-66,971,846),35159=>array(51,-68,956,835),35160=>array(43,-67,969,837),35161=>array(46,-67,972,838),35162=>array(44,-66,980,845),35163=>array(40,-64,978,844),35164=>array(31,-68,954,846),35165=>array(26,-64,983,858),35166=>array(47,-53,974,835),35167=>array(36,-66,971,834),35168=>array(43,-65,928,835),35169=>array(52,-67,924,835),35170=>array(27,-55,947,856),35171=>array(44,-66,964,846),35172=>array(35,-68,952,836),35173=>array(20,-104,957,841),35174=>array(35,-64,959,836),35175=>array(39,-64,973,843),35176=>array(23,-66,969,825),35177=>array(43,-82,960,839),35178=>array(31,-65,958,829),35179=>array(41,-74,971,835),35180=>array(28,-55,958,845),35181=>array(36,-81,966,831),35182=>array(36,-73,994,831),35183=>array(33,-76,966,826),35184=>array(23,-72,977,846),35185=>array(39,-70,964,840),35186=>array(51,-65,948,841),35187=>array(27,-70,974,831),35188=>array(29,-62,912,826),35189=>array(29,-76,955,843),35190=>array(22,-65,973,835),35191=>array(34,-65,969,825),35192=>array(31,-66,978,831),35193=>array(31,-66,980,831),35194=>array(34,-62,948,834),35195=>array(31,-59,968,849),35196=>array(29,-60,967,841),35197=>array(29,-64,942,841),35198=>array(71,-63,945,782),35199=>array(73,-53,929,772),35200=>array(85,374,935,781),35201=>array(52,-69,935,781),35202=>array(74,-70,971,782),35203=>array(59,-63,955,788),35204=>array(64,-70,938,788),35205=>array(53,-66,930,836),35206=>array(55,-69,963,818),35207=>array(63,-70,937,818),35208=>array(48,-73,967,802),35209=>array(60,-68,950,804),35210=>array(54,-53,934,811),35211=>array(58,-74,944,783),35212=>array(18,-65,948,784),35213=>array(64,-60,935,830),35214=>array(52,-39,956,787),35215=>array(43,-59,954,812),35216=>array(38,-56,957,818),35217=>array(42,-58,956,836),35218=>array(51,-62,956,822),35219=>array(51,-71,960,837),35220=>array(64,-65,944,791),35221=>array(42,-64,956,828),35222=>array(39,-63,959,834),35223=>array(58,-69,953,780),35224=>array(96,-62,938,829),35225=>array(51,-62,946,848),35226=>array(37,-65,908,816),35227=>array(36,-70,966,828),35228=>array(36,-70,954,826),35229=>array(50,-72,962,780),35230=>array(37,-70,961,773),35231=>array(45,-71,962,824),35232=>array(32,-62,971,796),35233=>array(38,-71,967,774),35234=>array(49,-71,968,829),35235=>array(41,-71,966,824),35236=>array(36,-70,969,835),35237=>array(33,-60,971,836),35238=>array(32,-72,971,827),35239=>array(47,-63,960,838),35240=>array(71,-59,963,789),35241=>array(31,-69,963,825),35242=>array(46,-70,957,826),35243=>array(17,-79,957,825),35244=>array(39,-79,950,835),35245=>array(52,-61,965,785),35246=>array(66,-70,937,824),35247=>array(62,-74,977,829),35248=>array(32,-74,978,835),35249=>array(64,-58,939,828),35250=>array(52,-68,974,835),35251=>array(39,-60,970,841),35252=>array(29,-75,972,828),35253=>array(104,-74,975,791),35254=>array(50,-70,962,837),35255=>array(32,-71,966,835),35256=>array(104,-74,975,791),35257=>array(33,-66,963,832),35258=>array(64,-65,935,840),35259=>array(22,-76,987,835),35260=>array(18,-76,966,789),35261=>array(47,-63,960,840),35262=>array(37,-74,967,834),35263=>array(44,-75,967,835),35264=>array(35,-70,960,827),35265=>array(24,-56,921,784),35266=>array(18,-61,932,792),35267=>array(25,-55,971,792),35268=>array(26,-56,932,826),35269=>array(29,-51,934,827),35270=>array(31,-72,937,818),35271=>array(98,-67,941,813),35272=>array(39,-59,913,838),35273=>array(28,-60,920,816),35274=>array(70,-78,938,810),35275=>array(22,-69,936,771),35276=>array(43,-73,931,819),35277=>array(37,-85,973,836),35278=>array(32,-81,938,822),35279=>array(52,-72,933,818),35280=>array(29,-64,936,819),35281=>array(25,-75,942,817),35282=>array(69,-60,863,849),35283=>array(45,-70,886,842),35284=>array(60,-57,924,849),35285=>array(59,-56,911,851),35286=>array(40,-67,979,847),35287=>array(38,-62,975,838),35288=>array(24,-68,959,845),35289=>array(41,-79,963,852),35290=>array(33,-67,975,842),35291=>array(52,-68,954,841),35292=>array(28,-68,937,835),35293=>array(33,-56,962,857),35294=>array(18,-65,913,834),35295=>array(25,-67,955,828),35296=>array(42,-59,972,836),35297=>array(33,-70,989,831),35298=>array(40,-61,900,830),35299=>array(52,-67,949,834),35300=>array(28,-87,963,828),35301=>array(38,-71,969,836),35302=>array(36,-71,962,834),35303=>array(46,-66,934,843),35304=>array(32,-73,966,824),35305=>array(38,-71,967,828),35306=>array(46,-66,938,850),35307=>array(42,-68,974,839),35308=>array(34,-74,960,825),35309=>array(44,-71,955,841),35310=>array(54,-67,962,842),35311=>array(19,-67,922,834),35312=>array(44,-70,951,836),35313=>array(38,-69,965,842),35314=>array(29,-70,954,831),35315=>array(38,-67,981,829),35316=>array(41,-67,962,848),35317=>array(46,-70,935,842),35318=>array(44,-78,967,829),35319=>array(60,-65,930,830),35320=>array(63,-74,926,833),35321=>array(29,-71,960,841),35322=>array(54,-64,965,831),35323=>array(38,-70,975,835),35324=>array(38,-73,975,841),35325=>array(44,-71,959,841),35326=>array(33,-64,973,836),35327=>array(44,-52,955,850),35328=>array(84,-64,916,819),35329=>array(261,-47,747,842),35330=>array(60,-61,955,817),35331=>array(60,-65,951,829),35332=>array(33,-66,966,836),35333=>array(60,-58,967,842),35334=>array(69,-67,876,842),35335=>array(77,-61,909,840),35336=>array(51,-64,954,835),35337=>array(60,-45,948,847),35338=>array(60,-62,959,817),35339=>array(60,-55,914,847),35340=>array(65,-47,948,790),35341=>array(65,-50,946,844),35342=>array(60,-69,949,830),35343=>array(68,-68,964,834),35344=>array(65,-64,955,792),35345=>array(46,-34,963,853),35346=>array(63,-53,904,817),35347=>array(60,-68,902,829),35348=>array(85,-64,928,824),35349=>array(79,-56,912,846),35350=>array(60,-55,960,835),35351=>array(60,-61,957,834),35352=>array(60,-61,957,823),35353=>array(64,-56,964,848),35354=>array(116,-57,874,823),35355=>array(58,-62,954,840),35356=>array(60,-44,968,843),35357=>array(60,-62,948,793),35358=>array(63,-73,976,839),35359=>array(59,-58,964,815),35360=>array(60,-61,899,843),35361=>array(60,-66,963,843),35362=>array(63,-73,960,831),35363=>array(62,-69,955,829),35364=>array(60,-65,934,846),35365=>array(71,-71,907,796),35366=>array(60,-50,950,843),35367=>array(66,-69,963,841),35368=>array(60,-44,954,843),35369=>array(76,-58,930,840),35370=>array(60,-62,945,824),35371=>array(60,-44,960,843),35372=>array(72,-77,972,836),35373=>array(60,-63,975,817),35374=>array(60,-65,952,843),35375=>array(60,-69,982,843),35376=>array(65,-41,957,842),35377=>array(60,-64,949,837),35378=>array(60,-66,891,852),35379=>array(60,-62,964,817),35380=>array(56,-67,956,837),35381=>array(60,-46,917,843),35382=>array(59,-62,961,793),35383=>array(60,-62,901,838),35384=>array(60,-71,948,843),35385=>array(62,-68,951,844),35386=>array(56,-72,965,844),35387=>array(60,-61,947,829),35388=>array(53,-57,950,817),35389=>array(60,-52,921,846),35390=>array(64,-67,958,827),35391=>array(57,-44,964,839),35392=>array(59,-55,951,844),35393=>array(60,-65,953,826),35394=>array(60,-66,964,843),35395=>array(60,-65,982,843),35396=>array(57,-74,966,845),35397=>array(56,-76,976,839),35398=>array(56,-60,961,835),35399=>array(60,-58,978,843),35400=>array(74,-65,942,820),35401=>array(51,-71,977,843),35402=>array(63,-70,952,837),35403=>array(60,-44,957,843),35404=>array(58,-70,948,836),35405=>array(58,-47,947,844),35406=>array(62,-48,954,843),35407=>array(59,-73,911,848),35408=>array(60,-61,951,841),35409=>array(60,-61,952,824),35410=>array(60,-63,952,830),35411=>array(60,-51,963,843),35412=>array(60,-62,905,817),35413=>array(53,-65,956,817),35414=>array(51,-74,972,834),35415=>array(56,-61,903,841),35416=>array(78,-67,920,833),35417=>array(65,-76,965,843),35418=>array(60,-44,963,843),35419=>array(60,-50,964,793),35420=>array(42,-64,971,837),35421=>array(60,-62,925,843),35422=>array(60,-64,909,817),35423=>array(35,-69,972,846),35424=>array(52,-63,965,844),35425=>array(77,-52,914,841),35426=>array(62,-60,910,836),35427=>array(60,-63,958,831),35428=>array(54,-66,966,832),35429=>array(51,-65,977,853),35430=>array(60,-61,963,829),35431=>array(51,-60,957,839),35432=>array(52,-74,971,831),35433=>array(60,-61,954,838),35434=>array(60,-64,964,844),35435=>array(53,-57,961,829),35436=>array(69,-78,951,818),35437=>array(62,-61,954,846),35438=>array(49,-55,955,830),35439=>array(60,-70,899,843),35440=>array(50,-58,945,829),35441=>array(53,-64,958,834),35442=>array(53,-63,954,824),35443=>array(60,-65,954,843),35444=>array(58,-68,951,840),35445=>array(55,-73,963,826),35446=>array(57,-71,905,848),35447=>array(60,-65,904,837),35448=>array(61,-67,974,849),35449=>array(45,-76,914,842),35450=>array(61,-72,914,841),35451=>array(57,-67,966,836),35452=>array(52,-57,954,833),35453=>array(61,-69,956,840),35454=>array(47,-62,925,842),35455=>array(63,-55,954,831),35456=>array(53,-65,946,842),35457=>array(57,-69,951,838),35458=>array(57,-67,957,830),35459=>array(62,-65,916,840),35460=>array(59,-68,981,830),35461=>array(58,-65,977,836),35462=>array(62,-53,957,838),35463=>array(60,-62,978,843),35464=>array(61,-52,957,849),35465=>array(42,-67,958,842),35466=>array(30,-60,954,832),35467=>array(51,-70,967,832),35468=>array(53,-59,964,820),35469=>array(53,-48,964,813),35470=>array(61,-65,976,849),35471=>array(60,-73,982,841),35472=>array(61,-59,970,849),35473=>array(63,-53,957,817),35474=>array(57,-74,986,839),35475=>array(64,-71,936,839),35476=>array(64,-67,967,840),35477=>array(58,-66,963,819),35478=>array(62,-50,956,846),35479=>array(61,-65,936,849),35480=>array(53,-69,975,828),35481=>array(65,-68,961,843),35482=>array(67,-70,926,835),35483=>array(61,-61,970,849),35484=>array(61,-67,968,849),35485=>array(61,-71,972,849),35486=>array(49,-68,949,815),35487=>array(61,-68,957,849),35488=>array(52,-70,961,833),35489=>array(58,-63,964,837),35490=>array(61,-52,958,849),35491=>array(59,-48,954,797),35492=>array(59,-62,944,815),35493=>array(50,-65,945,831),35494=>array(60,-64,895,793),35495=>array(59,-66,953,826),35496=>array(62,-68,954,845),35497=>array(61,-56,948,851),35498=>array(57,-71,964,816),35499=>array(59,-68,967,842),35500=>array(59,-57,956,848),35501=>array(53,-57,966,829),35502=>array(61,-66,964,849),35503=>array(61,-62,932,849),35504=>array(54,-70,952,837),35505=>array(61,-72,962,849),35506=>array(56,-61,970,817),35507=>array(61,-77,932,849),35508=>array(61,-63,977,850),35509=>array(61,-64,968,855),35510=>array(69,-68,974,842),35511=>array(61,-67,939,849),35512=>array(60,-63,955,837),35513=>array(53,-68,954,829),35514=>array(59,-68,977,836),35515=>array(59,-69,967,834),35516=>array(53,-57,958,827),35517=>array(60,-61,965,837),35518=>array(119,-68,903,804),35519=>array(53,-62,915,817),35520=>array(54,-68,950,843),35521=>array(61,-62,963,843),35522=>array(58,-68,897,838),35523=>array(57,-70,970,832),35524=>array(56,-62,959,835),35525=>array(50,-71,963,831),35526=>array(55,-80,952,833),35527=>array(63,-67,962,841),35528=>array(54,-47,963,843),35529=>array(62,-65,958,843),35530=>array(61,-66,937,849),35531=>array(53,-65,956,835),35532=>array(53,-64,974,835),35533=>array(56,-61,956,836),35534=>array(61,-64,960,849),35535=>array(51,-68,969,817),35536=>array(26,-58,946,836),35537=>array(56,-64,978,833),35538=>array(53,-60,960,830),35539=>array(63,-62,959,840),35540=>array(60,-69,975,838),35541=>array(60,-70,959,833),35542=>array(55,-63,973,849),35543=>array(63,-55,986,843),35544=>array(63,-73,980,839),35545=>array(58,-70,963,834),35546=>array(61,-53,983,824),35547=>array(53,-74,975,832),35548=>array(53,-64,971,830),35549=>array(59,-68,973,839),35550=>array(71,-72,928,794),35551=>array(55,-60,967,814),35552=>array(50,-42,947,837),35553=>array(54,-37,973,816),35554=>array(49,-67,954,793),35555=>array(49,-67,914,840),35556=>array(55,-59,951,793),35557=>array(55,-44,947,842),35558=>array(51,-67,946,826),35559=>array(56,-65,951,832),35560=>array(54,-67,927,840),35561=>array(55,-43,936,845),35562=>array(54,-73,949,833),35563=>array(48,-67,964,833),35564=>array(29,-69,953,852),35565=>array(48,-68,970,852),35566=>array(53,-64,965,845),35567=>array(61,-61,955,838),35568=>array(56,-48,971,833),35569=>array(58,-62,951,842),35570=>array(68,-45,959,836),35571=>array(57,-64,947,844),35572=>array(42,-60,945,837),35573=>array(55,-56,953,846),35574=>array(65,-82,957,818),35575=>array(51,-69,964,797),35576=>array(59,-66,948,835),35577=>array(59,-48,947,842),35578=>array(54,-71,952,830),35579=>array(59,-43,953,844),35580=>array(68,-70,981,839),35581=>array(59,-68,947,842),35582=>array(53,-65,949,836),35583=>array(53,-69,950,835),35584=>array(53,-69,969,829),35585=>array(62,-60,926,816),35586=>array(60,-64,911,823),35587=>array(63,-42,959,842),35588=>array(40,-72,967,840),35589=>array(58,-63,914,841),35590=>array(56,-61,919,872),35591=>array(31,-65,970,843),35592=>array(35,-67,969,793),35593=>array(64,-56,984,851),35594=>array(56,-63,961,840),35595=>array(75,-71,987,834),35596=>array(69,-60,954,804),35597=>array(108,-71,902,823),35598=>array(79,-70,956,836),35599=>array(60,-60,958,843),35600=>array(66,-55,968,827),35601=>array(57,-74,957,842),35602=>array(61,-68,963,838),35603=>array(60,-73,960,842),35604=>array(62,-68,954,833),35605=>array(57,-72,959,836),35606=>array(50,-66,968,793),35607=>array(59,-69,951,816),35608=>array(57,-71,952,838),35609=>array(64,-64,978,843),35610=>array(54,-57,961,804),35611=>array(55,-65,952,826),35612=>array(57,-66,962,845),35613=>array(53,-66,951,844),35614=>array(59,-68,930,832),35615=>array(51,-57,926,848),35616=>array(59,-58,957,842),35617=>array(53,-64,952,829),35618=>array(62,-73,972,841),35619=>array(58,-68,953,837),35620=>array(59,-69,955,833),35621=>array(56,-53,968,831),35622=>array(45,-66,958,845),35623=>array(59,-66,954,838),35624=>array(63,-68,984,823),35625=>array(33,-72,976,841),35626=>array(62,-67,956,838),35627=>array(55,-70,951,838),35628=>array(60,-72,947,795),35629=>array(55,-73,947,838),35630=>array(52,-77,958,842),35631=>array(42,-49,945,849),35632=>array(61,-71,964,835),35633=>array(53,-75,948,842),35634=>array(53,-73,970,848),35635=>array(60,-85,957,793),35636=>array(60,-68,951,847),35637=>array(81,-68,922,835),35638=>array(45,-61,960,837),35639=>array(63,-60,964,839),35640=>array(66,-79,974,834),35641=>array(60,-50,953,830),35642=>array(69,-81,958,837),35643=>array(71,-72,938,836),35644=>array(56,-78,946,833),35645=>array(79,-68,940,841),35646=>array(68,-60,983,813),35647=>array(60,-75,942,847),35648=>array(56,-70,968,842),35649=>array(54,-64,954,834),35650=>array(68,-68,956,840),35651=>array(60,-48,961,847),35652=>array(60,-63,918,847),35653=>array(54,-44,946,839),35654=>array(34,-70,943,825),35655=>array(60,-66,972,841),35656=>array(54,-74,972,841),35657=>array(59,-53,956,830),35658=>array(56,-69,950,839),35659=>array(75,-60,922,846),35660=>array(51,-79,968,852),35661=>array(42,-71,944,851),35662=>array(62,-64,941,798),35663=>array(57,-67,972,833),35664=>array(56,-65,954,845),35665=>array(60,-62,965,844),35666=>array(50,-57,970,848),35667=>array(73,-46,977,827),35668=>array(48,-58,951,846),35669=>array(58,-67,955,844),35670=>array(55,-67,960,824),35671=>array(66,-59,959,841),35672=>array(51,-68,959,833),35673=>array(60,-71,971,835),35674=>array(49,-67,954,813),35675=>array(60,-49,966,838),35676=>array(53,-61,952,843),35677=>array(52,-50,966,840),35678=>array(60,-66,976,847),35679=>array(53,-50,969,800),35680=>array(63,-55,960,837),35681=>array(60,-65,945,847),35682=>array(60,-63,978,847),35683=>array(42,-70,970,847),35684=>array(60,-66,985,847),35685=>array(40,-67,979,845),35686=>array(55,-77,944,824),35687=>array(48,-66,967,838),35688=>array(57,-73,977,839),35689=>array(63,-48,966,844),35690=>array(57,-68,948,834),35691=>array(64,-76,962,839),35692=>array(66,-60,961,830),35693=>array(51,-59,973,846),35694=>array(60,-68,985,848),35695=>array(53,-64,939,795),35696=>array(54,-63,962,850),35697=>array(36,-86,955,843),35698=>array(52,-79,973,837),35699=>array(60,-59,953,847),35700=>array(60,-63,967,836),35701=>array(63,-68,959,847),35702=>array(36,-66,955,847),35703=>array(53,-59,971,837),35704=>array(63,-61,964,840),35705=>array(53,-68,977,836),35706=>array(54,-74,967,831),35707=>array(83,-63,936,790),35708=>array(83,-74,936,841),35709=>array(31,-64,971,832),35710=>array(60,-55,956,858),35711=>array(57,-46,965,823),35712=>array(59,-71,961,835),35713=>array(39,-60,961,847),35714=>array(61,-71,959,835),35715=>array(51,-69,959,836),35716=>array(76,-63,920,840),35717=>array(55,-69,973,840),35718=>array(40,-71,955,839),35719=>array(60,-60,923,847),35720=>array(55,-70,971,828),35721=>array(61,-61,953,842),35722=>array(50,-70,960,840),35723=>array(66,-48,953,860),35724=>array(52,-66,968,838),35725=>array(60,-48,938,847),35726=>array(23,-62,952,845),35727=>array(40,-71,955,854),35728=>array(41,-71,944,842),35729=>array(60,-52,969,847),35730=>array(52,-65,961,842),35731=>array(59,-66,957,845),35732=>array(49,-63,967,842),35733=>array(62,-62,900,839),35734=>array(58,-59,960,834),35735=>array(60,-67,951,839),35736=>array(58,-67,960,831),35737=>array(53,-52,949,842),35738=>array(56,-60,959,851),35739=>array(74,-60,957,847),35740=>array(59,-79,967,833),35741=>array(62,-67,956,847),35742=>array(53,-70,968,835),35743=>array(55,-61,949,840),35744=>array(308,-19,665,809),35745=>array(74,-66,937,840),35746=>array(69,-65,926,826),35747=>array(62,-67,953,840),35748=>array(72,-62,958,826),35749=>array(59,-58,960,812),35750=>array(52,-66,922,810),35751=>array(49,13,913,814),35752=>array(75,-70,932,828),35753=>array(66,-22,929,818),35754=>array(50,-58,878,826),35755=>array(70,-29,943,838),35756=>array(68,-30,944,836),35757=>array(65,-74,889,826),35758=>array(49,-71,968,806),35759=>array(68,-57,958,826),35760=>array(80,-28,946,834),35761=>array(61,-60,890,836),35762=>array(56,-68,916,829),35763=>array(49,-58,916,830),35764=>array(61,-11,933,807),35765=>array(47,-25,917,820),35766=>array(49,-64,914,808),35767=>array(62,-61,901,829),35768=>array(64,-65,936,836),35769=>array(62,-64,930,836),35770=>array(52,-30,964,828),35771=>array(50,-65,906,832),35772=>array(56,-59,936,784),35773=>array(54,-61,975,811),35774=>array(54,-54,946,804),35775=>array(71,-71,931,847),35776=>array(74,-71,931,835),35777=>array(59,-22,938,797),35778=>array(67,-66,936,823),35779=>array(67,-64,944,826),35780=>array(78,-67,942,836),35781=>array(53,-29,927,790),35782=>array(49,-54,951,811),35783=>array(58,-60,909,836),35784=>array(69,-69,931,839),35785=>array(69,-69,946,834),35786=>array(69,-74,960,846),35787=>array(62,-64,938,830),35788=>array(66,-54,873,820),35789=>array(51,-61,888,826),35790=>array(56,-69,892,826),35791=>array(49,-56,888,823),35792=>array(43,-71,970,832),35793=>array(63,-60,954,817),35794=>array(63,-60,940,837),35795=>array(58,-26,938,826),35796=>array(56,-71,957,828),35797=>array(57,-61,944,825),35798=>array(63,-27,925,820),35799=>array(41,-62,944,834),35800=>array(67,-66,928,826),35801=>array(56,-59,958,826),35802=>array(47,-57,956,835),35803=>array(57,-68,938,830),35804=>array(43,-75,947,823),35805=>array(72,-65,941,830),35806=>array(62,-66,951,815),35807=>array(53,-79,920,816),35808=>array(62,-19,942,836),35809=>array(71,-63,937,844),35810=>array(61,-62,903,834),35811=>array(57,-69,937,828),35812=>array(68,-58,932,835),35813=>array(69,-79,949,838),35814=>array(59,-67,913,842),35815=>array(61,-25,932,852),35816=>array(60,-58,947,812),35817=>array(54,-54,885,818),35818=>array(76,-57,952,836),35819=>array(76,-65,942,840),35820=>array(54,-16,950,805),35821=>array(53,-70,936,795),35822=>array(57,-74,913,831),35823=>array(61,-69,956,794),35824=>array(57,-66,918,828),35825=>array(70,-69,941,825),35826=>array(72,-60,937,843),35827=>array(49,-54,947,827),35828=>array(66,-68,953,838),35829=>array(56,-65,879,798),35830=>array(56,-71,957,837),35831=>array(61,-66,930,831),35832=>array(68,-67,932,831),35833=>array(48,-70,955,799),35834=>array(54,-66,912,805),35835=>array(56,-69,940,835),35836=>array(61,-57,954,811),35837=>array(59,-64,942,836),35838=>array(56,-66,954,834),35839=>array(56,-65,925,833),35840=>array(56,-77,947,828),35841=>array(50,-72,927,834),35842=>array(50,-51,942,836),35843=>array(72,-85,897,810),35844=>array(67,-67,880,835),35845=>array(69,-70,935,838),35846=>array(69,-64,920,848),35847=>array(57,-71,923,842),35848=>array(55,-71,919,837),35849=>array(55,-66,931,838),35850=>array(55,-25,931,846),35851=>array(72,-67,953,832),35852=>array(60,-51,933,817),35853=>array(61,-66,948,829),35854=>array(53,-65,956,828),35855=>array(56,-69,961,831),35856=>array(57,-67,948,829),35857=>array(53,-70,945,831),35858=>array(74,-62,898,809),35859=>array(62,-66,900,836),35860=>array(55,-62,921,816),35861=>array(58,-72,954,847),35862=>array(60,-72,936,819),35863=>array(49,-65,961,834),35864=>array(54,-66,940,842),35865=>array(68,-66,930,834),35866=>array(60,-64,920,842),35867=>array(65,-69,921,839),35868=>array(59,-55,940,818),35869=>array(50,-74,888,836),35870=>array(78,-51,946,805),35871=>array(54,-65,943,820),35872=>array(60,-69,953,835),35873=>array(75,-65,942,800),35874=>array(53,-66,936,841),35875=>array(63,-74,924,807),35876=>array(74,-71,928,842),35877=>array(59,-35,936,828),35878=>array(63,-66,956,841),35879=>array(60,-36,948,825),35880=>array(54,-35,930,820),35881=>array(57,-61,948,786),35882=>array(58,-68,924,839),35883=>array(51,-79,947,838),35884=>array(58,-74,958,810),35885=>array(55,-70,939,793),35886=>array(57,-67,956,811),35887=>array(64,-75,938,828),35888=>array(46,-65,909,825),35889=>array(60,-62,941,844),35890=>array(59,-66,918,786),35891=>array(48,-75,971,825),35892=>array(47,-61,956,809),35893=>array(54,-78,941,836),35894=>array(56,-67,955,831),35895=>array(34,-53,967,839),35896=>array(59,-64,966,833),35897=>array(42,-58,952,836),35898=>array(37,-62,948,813),35899=>array(49,-68,960,813),35900=>array(32,-73,958,820),35901=>array(57,-69,957,837),35902=>array(34,-48,957,835),35903=>array(38,-66,982,837),35904=>array(35,-64,968,841),35905=>array(54,-63,961,836),35906=>array(45,-72,964,797),35907=>array(37,-71,976,834),35908=>array(37,-66,991,841),35909=>array(29,-70,983,834),35910=>array(100,-14,929,778),35911=>array(62,-17,951,770),35912=>array(62,-12,931,835),35913=>array(53,-68,973,835),35914=>array(57,-32,951,824),35915=>array(41,-26,962,842),35916=>array(51,-69,958,831),35917=>array(52,-73,950,838),35918=>array(48,-18,957,796),35919=>array(54,-67,966,832),35920=>array(70,-25,924,832),35921=>array(28,-67,965,836),35922=>array(34,-67,965,836),35923=>array(45,-46,974,829),35924=>array(45,-47,963,829),35925=>array(70,-49,949,772),35926=>array(58,-70,967,781),35927=>array(41,-75,969,781),35928=>array(43,-41,952,836),35929=>array(62,-55,939,847),35930=>array(31,-61,972,789),35931=>array(58,-69,963,787),35932=>array(43,-75,940,786),35933=>array(33,-46,951,785),35934=>array(43,-52,921,846),35935=>array(40,-65,958,815),35936=>array(43,-41,947,787),35937=>array(67,-59,940,845),35938=>array(49,-62,957,839),35939=>array(43,-71,953,787),35940=>array(29,-70,963,783),35941=>array(36,-64,958,834),35942=>array(49,-70,973,829),35943=>array(43,-75,951,824),35944=>array(41,-67,952,835),35945=>array(39,-64,977,779),35946=>array(88,-66,960,834),35947=>array(60,-72,962,835),35948=>array(47,-69,959,835),35949=>array(48,-70,984,789),35950=>array(42,-68,957,836),35951=>array(39,-77,975,819),35952=>array(77,-77,965,824),35953=>array(50,-61,959,782),35954=>array(42,-64,968,786),35955=>array(113,-69,911,825),35956=>array(43,-73,963,835),35957=>array(52,-71,983,829),35958=>array(34,-72,971,826),35959=>array(41,-62,967,832),35960=>array(125,-58,931,843),35961=>array(57,-56,903,842),35962=>array(61,-58,957,850),35963=>array(50,-67,963,835),35964=>array(40,-65,966,835),35965=>array(48,-65,914,842),35966=>array(48,-48,932,842),35967=>array(68,-52,921,846),35968=>array(41,-72,916,834),35969=>array(36,-57,965,855),35970=>array(65,-52,919,836),35971=>array(48,-63,890,842),35972=>array(46,-69,956,834),35973=>array(55,-61,981,850),35974=>array(46,-67,954,830),35975=>array(48,-55,960,842),35976=>array(48,-73,964,843),35977=>array(43,-64,975,840),35978=>array(54,-63,959,830),35979=>array(48,-65,926,842),35980=>array(41,-66,966,841),35981=>array(55,-59,956,838),35982=>array(48,-61,991,842),35983=>array(35,-73,953,836),35984=>array(46,-64,986,860),35985=>array(42,-75,977,829),35986=>array(37,-70,956,831),35987=>array(44,-67,950,836),35988=>array(34,-61,949,850),35989=>array(35,-62,959,834),35990=>array(36,-48,974,842),35991=>array(37,-71,951,837),35992=>array(26,-65,975,837),35993=>array(40,-60,965,827),35994=>array(43,-68,968,838),35995=>array(38,-71,912,832),35996=>array(55,-70,973,830),35997=>array(89,-68,912,789),35998=>array(59,-69,950,836),35999=>array(59,-69,950,842),36000=>array(53,-69,952,855),36001=>array(46,-73,939,829),36002=>array(59,-67,949,789),36003=>array(65,-70,954,850),36004=>array(52,-54,964,849),36005=>array(46,-78,954,834),36006=>array(52,-69,948,804),36007=>array(54,-69,954,823),36008=>array(52,-71,955,831),36009=>array(50,-67,973,788),36010=>array(38,-78,969,857),36011=>array(57,-74,946,785),36012=>array(57,-67,955,836),36013=>array(52,-75,924,831),36014=>array(53,-70,956,817),36015=>array(48,-68,948,822),36016=>array(51,-73,949,836),36017=>array(14,-67,970,832),36018=>array(43,-75,956,824),36019=>array(53,-70,956,837),36020=>array(57,-67,949,832),36021=>array(43,-66,977,865),36022=>array(57,-65,969,830),36023=>array(65,-67,949,782),36024=>array(63,-69,942,838),36025=>array(47,-75,956,822),36026=>array(51,-75,972,773),36027=>array(73,-71,933,837),36028=>array(50,-64,954,835),36029=>array(60,-62,960,833),36030=>array(49,-54,955,849),36031=>array(72,-67,941,827),36032=>array(65,-73,943,839),36033=>array(61,-67,943,828),36034=>array(57,-63,976,839),36035=>array(40,-65,957,837),36036=>array(54,-68,961,834),36037=>array(54,-77,973,830),36038=>array(21,-70,949,839),36039=>array(61,-70,942,837),36040=>array(66,-79,948,785),36041=>array(37,-58,973,855),36042=>array(41,-58,963,837),36043=>array(37,-76,970,846),36044=>array(66,-77,947,844),36045=>array(49,-59,956,822),36046=>array(44,-69,959,827),36047=>array(57,-73,963,773),36048=>array(31,-67,979,836),36049=>array(37,-71,971,787),36050=>array(40,-64,969,851),36051=>array(44,-74,974,837),36052=>array(101,-85,911,844),36053=>array(51,-66,981,829),36054=>array(31,-69,962,825),36055=>array(55,-74,911,822),36056=>array(49,-59,956,847),36057=>array(63,-71,911,793),36058=>array(45,-70,985,836),36059=>array(52,-76,964,843),36060=>array(60,-66,920,791),36061=>array(40,-70,976,780),36062=>array(71,-74,948,836),36063=>array(40,-73,955,830),36064=>array(59,-65,956,835),36065=>array(32,-67,954,849),36066=>array(70,-73,944,789),36067=>array(48,-69,945,826),36068=>array(48,-67,967,842),36069=>array(41,-73,950,840),36070=>array(42,-63,958,836),36071=>array(39,-68,974,832),36072=>array(57,-79,963,839),36073=>array(42,-60,960,845),36074=>array(63,-68,941,833),36075=>array(69,-70,954,826),36076=>array(55,-68,978,787),36077=>array(43,-65,944,823),36078=>array(40,-74,977,827),36079=>array(57,-60,934,840),36080=>array(49,-70,980,838),36081=>array(56,-76,958,783),36082=>array(38,-73,967,845),36083=>array(51,-75,967,830),36084=>array(44,-71,961,830),36085=>array(55,-68,921,789),36086=>array(40,-67,941,846),36087=>array(69,-70,954,834),36088=>array(31,-66,966,837),36089=>array(44,-66,959,818),36090=>array(58,-65,967,851),36091=>array(50,-65,951,833),36092=>array(41,-66,941,829),36093=>array(50,-73,960,847),36094=>array(113,-76,968,832),36095=>array(41,-72,960,786),36096=>array(68,-76,949,803),36097=>array(42,-61,967,836),36098=>array(41,-71,957,842),36099=>array(49,-62,965,831),36100=>array(61,-68,954,834),36101=>array(51,-70,954,846),36102=>array(37,-67,970,832),36103=>array(46,-71,954,829),36104=>array(34,-73,909,835),36105=>array(47,-71,957,781),36106=>array(60,-72,947,825),36107=>array(41,-70,944,813),36108=>array(36,-64,963,832),36109=>array(36,-74,948,834),36110=>array(47,-66,968,832),36111=>array(42,-62,961,834),36112=>array(47,-59,972,825),36113=>array(55,-66,969,849),36114=>array(70,-73,955,835),36115=>array(27,-65,966,836),36116=>array(49,-71,979,803),36117=>array(56,-73,963,837),36118=>array(47,-73,962,837),36119=>array(41,-73,945,825),36120=>array(26,-72,954,836),36121=>array(31,-71,967,828),36122=>array(30,-65,950,836),36123=>array(54,-70,974,849),36124=>array(55,-63,972,815),36125=>array(77,-58,885,796),36126=>array(65,-63,905,830),36127=>array(57,-65,934,838),36128=>array(73,-61,894,844),36129=>array(48,-61,906,780),36130=>array(42,-70,922,826),36131=>array(60,-66,915,826),36132=>array(61,-67,931,834),36133=>array(47,-74,945,834),36134=>array(32,-72,958,811),36135=>array(29,-63,917,839),36136=>array(25,-69,906,831),36137=>array(33,-70,956,800),36138=>array(33,-66,954,836),36139=>array(34,-65,980,835),36140=>array(32,-67,952,828),36141=>array(33,-64,903,831),36142=>array(28,-71,923,818),36143=>array(43,-69,914,791),36144=>array(48,-68,953,831),36145=>array(30,-59,928,831),36146=>array(70,-78,917,820),36147=>array(61,-71,909,826),36148=>array(42,-67,938,832),36149=>array(41,-65,907,830),36150=>array(31,-58,968,784),36151=>array(47,-65,927,835),36152=>array(83,-66,900,831),36153=>array(60,-63,913,830),36154=>array(24,-72,868,832),36155=>array(35,-69,941,824),36156=>array(31,-56,939,838),36157=>array(39,-86,948,818),36158=>array(47,-71,913,782),36159=>array(33,-69,944,832),36160=>array(60,-84,929,816),36161=>array(30,-59,917,841),36162=>array(33,-64,960,837),36163=>array(38,-68,921,837),36164=>array(71,-70,939,829),36165=>array(39,-79,956,827),36166=>array(31,-64,953,782),36167=>array(39,-69,972,826),36168=>array(39,-70,942,784),36169=>array(34,-70,942,823),36170=>array(39,-69,953,848),36171=>array(37,-69,955,834),36172=>array(39,-69,939,834),36173=>array(76,-70,886,824),36174=>array(43,-58,956,835),36175=>array(84,-54,912,841),36176=>array(39,-69,901,785),36177=>array(43,-66,1003,830),36178=>array(39,-69,911,794),36179=>array(40,-69,930,849),36180=>array(39,-69,939,843),36181=>array(39,-70,957,829),36182=>array(40,-63,943,834),36183=>array(39,-74,900,778),36184=>array(43,-69,915,827),36185=>array(39,-68,939,831),36186=>array(41,-65,951,849),36187=>array(38,-75,961,840),36188=>array(99,-67,936,828),36189=>array(31,-69,906,772),36190=>array(35,-75,930,836),36191=>array(46,-75,954,834),36192=>array(32,-71,895,827),36193=>array(22,-75,931,831),36194=>array(35,-69,949,842),36195=>array(55,-69,943,835),36196=>array(67,-75,930,830),36197=>array(31,-71,961,839),36198=>array(56,-63,984,848),36199=>array(48,-68,957,829),36200=>array(40,-67,966,825),36201=>array(28,-67,961,826),36202=>array(25,-80,971,825),36203=>array(51,-65,970,836),36204=>array(36,-76,962,823),36205=>array(25,-70,958,832),36206=>array(35,-79,975,833),36207=>array(32,-71,960,837),36208=>array(46,-74,960,830),36209=>array(69,-66,950,830),36210=>array(36,-62,963,833),36211=>array(50,-65,966,831),36212=>array(41,-73,967,829),36213=>array(23,-60,942,823),36214=>array(27,-72,965,831),36215=>array(35,-74,945,834),36216=>array(46,-71,973,825),36217=>array(39,-66,960,829),36218=>array(46,-71,973,824),36219=>array(46,-72,974,835),36220=>array(33,-64,968,835),36221=>array(44,-74,972,830),36222=>array(46,-72,974,835),36223=>array(46,-72,978,835),36224=>array(47,-71,970,832),36225=>array(18,-62,960,857),36226=>array(46,-72,974,835),36227=>array(46,-72,974,835),36228=>array(38,-65,975,833),36229=>array(33,-68,959,833),36230=>array(46,-72,978,835),36231=>array(46,-72,974,835),36232=>array(46,-72,974,835),36233=>array(40,-65,968,826),36234=>array(42,-74,962,832),36235=>array(26,-72,938,824),36236=>array(30,-61,967,836),36237=>array(39,-64,977,830),36238=>array(35,-68,978,832),36239=>array(36,-65,981,820),36240=>array(28,-61,973,828),36241=>array(42,-64,973,848),36242=>array(27,-65,965,826),36243=>array(28,-61,981,826),36244=>array(39,-68,976,831),36245=>array(46,-69,966,829),36246=>array(57,-68,966,824),36247=>array(28,-61,965,826),36248=>array(28,-61,965,826),36249=>array(41,-75,959,830),36250=>array(28,-61,965,826),36251=>array(36,-71,969,824),36252=>array(35,-68,970,833),36253=>array(46,-72,974,835),36254=>array(46,-72,974,835),36255=>array(58,-53,973,841),36256=>array(39,-71,977,824),36257=>array(41,-68,971,823),36258=>array(34,-64,960,835),36259=>array(31,-54,960,835),36260=>array(46,-72,974,836),36261=>array(37,-60,968,835),36262=>array(45,-53,974,845),36263=>array(37,-71,981,818),36264=>array(56,-71,966,834),36265=>array(46,-72,974,835),36266=>array(39,-57,979,833),36267=>array(32,-71,984,825),36268=>array(41,-64,983,830),36269=>array(33,-62,984,827),36270=>array(26,-67,975,829),36271=>array(33,-68,970,828),36272=>array(31,-72,979,835),36273=>array(22,-69,937,817),36274=>array(42,-65,970,832),36275=>array(55,-73,970,762),36276=>array(30,-74,968,786),36277=>array(53,-54,896,841),36278=>array(64,-65,967,790),36279=>array(48,-37,974,830),36280=>array(45,-73,940,761),36281=>array(57,-72,965,827),36282=>array(45,-72,974,829),36283=>array(45,-72,967,837),36284=>array(54,-76,947,783),36285=>array(45,-69,959,849),36286=>array(45,-24,954,822),36287=>array(35,-71,971,788),36288=>array(45,-65,870,788),36289=>array(56,-32,959,785),36290=>array(35,-53,954,841),36291=>array(39,-64,963,832),36292=>array(45,-34,953,814),36293=>array(47,-70,955,819),36294=>array(52,-68,972,837),36295=>array(61,-34,951,822),36296=>array(48,-69,960,839),36297=>array(45,-79,971,847),36298=>array(40,-61,967,836),36299=>array(21,-76,948,841),36300=>array(52,-59,975,844),36301=>array(55,-68,951,826),36302=>array(48,-27,950,839),36303=>array(46,-72,907,828),36304=>array(46,-59,964,822),36305=>array(45,-34,966,838),36306=>array(45,-62,965,788),36307=>array(47,-15,955,842),36308=>array(45,-52,921,846),36309=>array(41,-52,947,842),36310=>array(39,-53,947,786),36311=>array(41,-50,951,846),36312=>array(53,-70,956,825),36313=>array(59,-19,963,783),36314=>array(28,-67,919,781),36315=>array(53,-62,978,841),36316=>array(45,-72,954,790),36317=>array(31,-61,947,795),36318=>array(48,-62,939,817),36319=>array(46,-71,964,787),36320=>array(52,-73,975,823),36321=>array(47,-59,955,822),36322=>array(42,-63,913,836),36323=>array(40,-63,953,829),36324=>array(50,-65,983,846),36325=>array(46,-62,964,791),36326=>array(50,-70,977,829),36327=>array(43,-20,968,793),36328=>array(39,-64,962,841),36329=>array(44,-74,967,823),36330=>array(48,-65,965,852),36331=>array(29,-64,947,778),36332=>array(54,-23,958,829),36333=>array(40,-69,972,841),36334=>array(51,-33,956,779),36335=>array(29,-67,968,838),36336=>array(50,-73,954,829),36337=>array(40,-52,950,841),36338=>array(44,-54,963,858),36339=>array(41,-70,945,825),36340=>array(37,-68,952,789),36341=>array(40,-69,959,827),36342=>array(50,-49,982,788),36343=>array(52,-71,938,815),36344=>array(35,-64,929,808),36345=>array(42,-51,935,804),36346=>array(54,-64,979,794),36347=>array(43,-66,948,835),36348=>array(48,-55,916,800),36349=>array(48,-32,969,791),36350=>array(46,-72,974,827),36351=>array(51,-70,966,821),36352=>array(52,-73,970,781),36353=>array(46,-28,945,785),36354=>array(51,-70,961,783),36355=>array(51,-69,909,824),36356=>array(45,-64,955,830),36357=>array(44,-66,970,835),36358=>array(48,-72,970,827),36359=>array(51,-64,953,825),36360=>array(45,-54,960,841),36361=>array(58,-68,981,837),36362=>array(50,-64,897,800),36363=>array(80,-61,915,810),36364=>array(37,-61,917,828),36365=>array(47,-68,948,823),36366=>array(36,-54,969,797),36367=>array(53,-62,980,843),36368=>array(30,-55,945,841),36369=>array(55,-75,967,824),36370=>array(44,-72,965,829),36371=>array(45,-68,959,831),36372=>array(54,-62,965,838),36373=>array(44,-73,972,827),36374=>array(47,-61,972,837),36375=>array(52,-36,976,835),36376=>array(49,-63,916,837),36377=>array(51,-73,981,782),36378=>array(47,-68,984,836),36379=>array(44,-26,954,826),36380=>array(56,-71,982,823),36381=>array(43,-67,972,787),36382=>array(46,-69,952,785),36383=>array(28,-67,886,836),36384=>array(39,-76,966,843),36385=>array(48,-37,986,846),36386=>array(46,-58,907,794),36387=>array(48,-65,953,849),36388=>array(48,-69,954,840),36389=>array(38,-70,950,833),36390=>array(42,-62,965,844),36391=>array(41,-69,979,830),36392=>array(59,-65,975,837),36393=>array(48,-62,976,837),36394=>array(44,-57,969,834),36395=>array(45,-35,957,832),36396=>array(42,-68,921,823),36397=>array(53,-59,970,836),36398=>array(43,-65,949,845),36399=>array(38,-65,919,798),36400=>array(43,-64,962,832),36401=>array(49,-62,982,856),36402=>array(47,-67,950,840),36403=>array(39,-68,978,840),36404=>array(41,-56,918,801),36405=>array(45,-27,958,839),36406=>array(52,-55,987,803),36407=>array(72,-69,959,835),36408=>array(35,-26,953,824),36409=>array(53,-64,956,835),36410=>array(43,-73,946,805),36411=>array(72,-57,916,800),36412=>array(33,-79,963,778),36413=>array(46,-62,942,836),36414=>array(41,-65,932,787),36415=>array(32,-75,983,822),36416=>array(49,-65,975,830),36417=>array(48,-65,944,843),36418=>array(45,-61,984,799),36419=>array(72,-65,948,836),36420=>array(37,-67,946,826),36421=>array(39,-32,967,823),36422=>array(38,-65,954,800),36423=>array(34,-62,984,842),36424=>array(53,-62,937,835),36425=>array(30,-26,937,841),36426=>array(20,-61,967,842),36427=>array(49,-61,903,799),36428=>array(55,-64,982,866),36429=>array(34,-52,968,797),36430=>array(50,-79,961,833),36431=>array(34,-72,968,830),36432=>array(51,-62,986,846),36433=>array(35,-71,937,780),36434=>array(29,-66,914,818),36435=>array(47,-62,920,841),36436=>array(39,-54,972,839),36437=>array(34,-68,949,805),36438=>array(48,-70,965,834),36439=>array(49,-66,962,837),36440=>array(27,-61,966,802),36441=>array(55,-60,981,842),36442=>array(61,-37,960,816),36443=>array(50,-74,951,821),36444=>array(36,-52,915,857),36445=>array(43,-67,971,831),36446=>array(40,-82,959,828),36447=>array(39,-55,955,849),36448=>array(38,-60,958,835),36449=>array(36,-52,952,858),36450=>array(39,-52,948,855),36451=>array(47,-65,954,835),36452=>array(43,-65,979,831),36453=>array(45,-72,969,823),36454=>array(46,-74,905,836),36455=>array(59,-74,962,821),36456=>array(64,-65,971,837),36457=>array(33,-65,972,839),36458=>array(52,-81,965,825),36459=>array(29,-67,933,788),36460=>array(33,-26,969,836),36461=>array(44,-64,912,846),36462=>array(37,-43,974,813),36463=>array(31,-67,971,833),36464=>array(30,-66,939,802),36465=>array(59,-32,971,839),36466=>array(44,-72,970,834),36467=>array(46,-67,979,832),36468=>array(25,-68,956,828),36469=>array(33,-65,965,845),36470=>array(25,-70,965,788),36471=>array(37,-58,963,800),36472=>array(49,-70,974,827),36473=>array(44,-63,979,858),36474=>array(46,-63,962,842),36475=>array(34,-59,961,857),36476=>array(28,-64,963,832),36477=>array(39,-62,975,859),36478=>array(39,-73,973,837),36479=>array(39,-60,916,843),36480=>array(28,-68,951,802),36481=>array(31,-61,965,798),36482=>array(46,-68,977,836),36483=>array(36,-64,965,849),36484=>array(39,-57,960,843),36485=>array(57,-62,924,786),36486=>array(23,-67,976,837),36487=>array(36,-62,953,842),36488=>array(33,-72,982,841),36489=>array(44,-67,968,833),36490=>array(43,-58,958,839),36491=>array(32,-69,964,849),36492=>array(62,-72,961,833),36493=>array(35,-70,956,813),36494=>array(61,-71,958,783),36495=>array(50,-71,918,820),36496=>array(41,-63,974,852),36497=>array(32,-67,956,821),36498=>array(45,-52,961,856),36499=>array(39,-68,974,837),36500=>array(25,-67,941,848),36501=>array(36,-63,960,853),36502=>array(59,-68,915,835),36503=>array(36,-67,979,839),36504=>array(33,-65,967,838),36505=>array(37,-50,901,804),36506=>array(36,-66,973,815),36507=>array(36,-67,979,839),36508=>array(34,-75,927,824),36509=>array(37,-50,917,804),36510=>array(37,-65,985,847),36511=>array(39,-65,976,850),36512=>array(43,-67,960,829),36513=>array(30,-69,955,804),36514=>array(37,-50,910,805),36515=>array(50,-65,967,787),36516=>array(42,-64,956,831),36517=>array(33,-65,963,849),36518=>array(40,-75,975,829),36519=>array(42,-73,966,791),36520=>array(39,-68,956,841),36521=>array(41,-61,980,809),36522=>array(49,-59,964,837),36523=>array(74,-62,924,853),36524=>array(55,-60,904,839),36525=>array(40,-66,969,848),36526=>array(57,-61,968,846),36527=>array(47,-65,945,844),36528=>array(27,-53,969,851),36529=>array(56,-62,965,848),36530=>array(54,-62,976,843),36531=>array(53,-69,917,861),36532=>array(47,-68,972,844),36533=>array(49,-68,973,830),36534=>array(41,-68,965,830),36535=>array(41,-67,970,841),36536=>array(57,-68,956,830),36537=>array(53,-68,946,847),36538=>array(48,-62,936,851),36539=>array(45,-68,948,845),36540=>array(49,-68,975,830),36541=>array(35,-58,958,850),36542=>array(34,-62,969,843),36543=>array(45,-63,966,857),36544=>array(42,-60,964,853),36545=>array(45,-68,962,839),36546=>array(33,-70,969,829),36547=>array(53,-68,968,830),36548=>array(45,-68,977,845),36549=>array(26,-73,977,841),36550=>array(32,-58,946,848),36551=>array(53,-57,968,846),36552=>array(38,-61,948,848),36553=>array(38,-78,934,836),36554=>array(63,-71,935,832),36555=>array(54,-70,948,830),36556=>array(53,-74,957,831),36557=>array(91,-68,923,784),36558=>array(61,-67,913,819),36559=>array(52,-69,958,829),36560=>array(41,-69,958,827),36561=>array(61,-72,978,827),36562=>array(55,-68,951,832),36563=>array(64,-76,963,824),36564=>array(68,-67,917,830),36565=>array(65,-69,921,830),36566=>array(62,-69,961,827),36567=>array(63,-73,962,830),36568=>array(61,-65,957,835),36569=>array(50,-70,945,838),36570=>array(65,-69,977,838),36571=>array(60,-66,954,830),36572=>array(66,-70,918,827),36573=>array(46,-68,966,832),36574=>array(60,-70,961,836),36575=>array(62,-67,965,841),36576=>array(59,-64,949,827),36577=>array(61,-76,968,834),36578=>array(53,-69,964,827),36579=>array(61,-55,913,834),36580=>array(65,-70,950,827),36581=>array(60,-65,915,831),36582=>array(59,-69,956,832),36583=>array(57,-72,960,833),36584=>array(54,-69,965,845),36585=>array(68,-70,954,838),36586=>array(84,-75,924,835),36587=>array(51,-67,969,844),36588=>array(46,-64,966,855),36589=>array(43,-71,945,827),36590=>array(61,-80,968,829),36591=>array(57,-72,950,827),36592=>array(62,-50,940,835),36593=>array(58,-60,975,834),36594=>array(72,-76,929,833),36595=>array(72,-64,977,849),36596=>array(72,-64,962,839),36597=>array(63,-69,952,835),36598=>array(76,-67,970,829),36599=>array(57,-52,959,839),36600=>array(58,-76,913,831),36601=>array(57,-67,962,826),36602=>array(69,-67,918,832),36603=>array(54,-67,950,829),36604=>array(56,-67,979,829),36605=>array(52,-64,976,833),36606=>array(60,-67,968,836),36607=>array(55,-54,949,852),36608=>array(53,-56,948,836),36609=>array(56,-80,977,826),36610=>array(44,-69,961,829),36611=>array(59,-67,965,829),36612=>array(59,-69,970,829),36613=>array(47,-65,967,838),36614=>array(57,-75,960,836),36615=>array(62,-71,966,820),36616=>array(61,-63,959,838),36617=>array(63,-62,956,836),36618=>array(60,-64,954,831),36619=>array(28,-64,980,840),36620=>array(52,-72,939,831),36621=>array(58,-70,967,824),36622=>array(60,-69,937,826),36623=>array(65,-68,966,825),36624=>array(66,-70,973,824),36625=>array(60,-71,951,827),36626=>array(50,-67,967,830),36627=>array(58,-67,966,827),36628=>array(55,-73,948,833),36629=>array(57,-70,950,832),36630=>array(57,-70,900,822),36631=>array(54,-65,962,827),36632=>array(47,-57,966,835),36633=>array(46,-68,966,837),36634=>array(62,-70,971,834),36635=>array(52,-72,939,831),36636=>array(63,-71,940,835),36637=>array(41,-63,953,832),36638=>array(57,-65,924,831),36639=>array(60,-65,971,833),36640=>array(62,-71,978,823),36641=>array(77,-68,912,841),36642=>array(77,-65,956,849),36643=>array(62,-76,903,823),36644=>array(61,-70,953,832),36645=>array(54,-70,955,829),36646=>array(52,-62,954,831),36647=>array(57,-65,949,859),36648=>array(62,-65,930,846),36649=>array(55,-74,951,838),36650=>array(52,-71,971,868),36651=>array(52,-65,967,831),36652=>array(54,-57,970,849),36653=>array(65,-72,975,820),36654=>array(60,-68,977,826),36655=>array(62,-70,951,831),36656=>array(77,-65,959,831),36657=>array(47,-68,979,835),36658=>array(72,-64,957,835),36659=>array(47,-67,964,832),36660=>array(50,-72,951,833),36661=>array(60,-53,923,838),36662=>array(56,-66,947,852),36663=>array(65,-70,919,834),36664=>array(45,-70,960,849),36665=>array(60,-68,974,836),36666=>array(63,-71,940,833),36667=>array(46,-74,941,827),36668=>array(59,-70,959,823),36669=>array(42,-66,967,831),36670=>array(60,-71,964,831),36671=>array(66,-55,948,839),36672=>array(59,-70,959,823),36673=>array(52,-65,944,831),36674=>array(48,-68,968,836),36675=>array(66,-69,973,833),36676=>array(53,-62,949,837),36677=>array(50,-70,967,833),36678=>array(53,-68,958,835),36679=>array(58,-64,968,829),36680=>array(58,-70,974,828),36681=>array(56,-71,947,828),36682=>array(44,-72,943,837),36683=>array(55,-72,974,825),36684=>array(46,-66,946,831),36685=>array(42,-68,972,837),36686=>array(51,-61,964,841),36687=>array(63,-71,958,825),36688=>array(53,-69,969,826),36689=>array(55,-54,968,844),36690=>array(65,-72,959,829),36691=>array(60,-67,978,829),36692=>array(48,-67,954,833),36693=>array(61,-64,948,830),36694=>array(58,-68,962,829),36695=>array(50,-66,961,830),36696=>array(56,-70,984,831),36697=>array(50,-74,974,853),36698=>array(60,-62,971,828),36699=>array(69,-71,964,826),36700=>array(42,-65,970,831),36701=>array(46,-69,977,836),36702=>array(66,-73,958,829),36703=>array(63,-62,960,836),36704=>array(71,-68,929,824),36705=>array(32,-65,961,844),36706=>array(50,-65,970,831),36707=>array(45,-53,969,836),36708=>array(52,-67,956,832),36709=>array(55,-65,941,837),36710=>array(42,-61,956,833),36711=>array(69,-73,922,823),36712=>array(67,-78,940,828),36713=>array(63,-70,934,823),36714=>array(68,-70,977,838),36715=>array(63,-69,901,824),36716=>array(53,-66,935,826),36717=>array(52,-74,937,818),36718=>array(31,-55,951,835),36719=>array(73,-69,949,838),36720=>array(28,-57,939,837),36721=>array(52,-76,929,823),36722=>array(52,-74,933,818),36723=>array(44,-73,929,819),36724=>array(59,-74,903,821),36725=>array(63,-69,946,824),36726=>array(52,-74,962,826),36727=>array(25,-65,920,828),36728=>array(52,-74,952,840),36729=>array(41,-65,947,823),36730=>array(63,-68,901,824),36731=>array(51,-48,938,836),36732=>array(37,-75,936,833),36733=>array(58,-69,939,824),36734=>array(52,-74,930,818),36735=>array(31,-66,948,832),36736=>array(63,-68,960,838),36737=>array(44,-60,940,831),36738=>array(52,-67,950,836),36739=>array(54,-69,948,835),36740=>array(45,-69,937,827),36741=>array(52,-73,931,831),36742=>array(35,-57,925,833),36743=>array(43,-75,950,816),36744=>array(68,-70,932,821),36745=>array(42,-57,948,833),36746=>array(52,-74,942,818),36747=>array(63,-67,905,827),36748=>array(63,-68,966,849),36749=>array(43,-65,961,819),36750=>array(55,-73,922,833),36751=>array(55,-69,944,838),36752=>array(43,-74,923,818),36753=>array(56,-69,936,821),36754=>array(46,-69,959,821),36755=>array(61,-73,943,846),36756=>array(40,-65,914,829),36757=>array(41,-78,949,819),36758=>array(52,-73,931,838),36759=>array(52,-74,948,818),36760=>array(50,-65,951,842),36761=>array(46,-65,938,839),36762=>array(52,-68,947,831),36763=>array(77,-68,923,828),36764=>array(59,-62,945,837),36765=>array(29,-65,948,840),36766=>array(52,-55,953,832),36767=>array(36,-55,954,847),36768=>array(59,-67,945,839),36769=>array(33,-67,954,853),36770=>array(21,-58,954,853),36771=>array(33,-67,967,835),36772=>array(39,-82,974,853),36773=>array(42,-57,960,840),36774=>array(58,-79,932,829),36775=>array(32,-68,945,837),36776=>array(37,-71,949,831),36777=>array(53,-64,933,843),36778=>array(59,-51,947,857),36779=>array(40,-66,915,838),36780=>array(40,-79,945,838),36781=>array(46,-63,962,846),36782=>array(42,-81,959,834),36783=>array(61,-77,938,829),36784=>array(57,-63,963,785),36785=>array(33,-61,955,789),36786=>array(38,-78,963,834),36787=>array(44,-74,956,836),36788=>array(57,-77,968,785),36789=>array(46,-74,960,827),36790=>array(38,-57,938,814),36791=>array(50,-17,957,811),36792=>array(38,-57,938,814),36793=>array(33,-24,939,823),36794=>array(33,-24,939,804),36795=>array(50,-34,955,832),36796=>array(35,-54,965,820),36797=>array(44,-45,944,793),36798=>array(31,-35,940,825),36799=>array(44,-45,944,835),36800=>array(31,-53,952,817),36801=>array(50,-17,957,828),36802=>array(44,-45,944,793),36803=>array(31,-69,952,793),36804=>array(44,-45,944,832),36805=>array(39,-53,960,817),36806=>array(27,-56,957,841),36807=>array(36,-51,933,827),36808=>array(32,-41,938,798),36809=>array(55,-61,979,815),36810=>array(56,-53,940,781),36811=>array(43,-53,972,835),36812=>array(56,-53,940,782),36813=>array(33,-57,962,841),36814=>array(31,-53,952,833),36815=>array(46,-47,952,827),36816=>array(32,-46,944,800),36817=>array(31,-53,952,828),36818=>array(48,-63,970,829),36819=>array(45,-69,966,832),36820=>array(42,-52,960,822),36821=>array(36,-55,968,852),36822=>array(47,-66,979,827),36823=>array(66,-62,988,817),36824=>array(32,-33,927,812),36825=>array(36,-47,942,815),36826=>array(36,-47,942,801),36827=>array(24,-37,935,817),36828=>array(38,-49,941,809),36829=>array(41,-49,938,816),36830=>array(34,-44,944,810),36831=>array(41,-26,938,806),36832=>array(55,-64,973,844),36833=>array(63,-77,974,833),36834=>array(36,-47,942,808),36835=>array(43,-65,967,829),36836=>array(53,-62,968,842),36837=>array(36,-47,942,808),36838=>array(44,-45,944,827),36839=>array(56,-53,940,830),36840=>array(51,-71,975,841),36841=>array(43,-45,946,829),36842=>array(31,-53,952,831),36843=>array(40,-54,961,834),36844=>array(56,-53,940,820),36845=>array(31,-53,952,817),36846=>array(72,-69,979,840),36847=>array(36,-47,952,803),36848=>array(36,-44,959,828),36849=>array(36,-38,959,837),36850=>array(37,-56,951,815),36851=>array(41,-50,939,793),36852=>array(36,-47,965,813),36853=>array(49,-73,982,835),36854=>array(39,-76,975,837),36855=>array(31,-53,952,831),36856=>array(36,-47,965,840),36857=>array(36,-47,965,831),36858=>array(36,-47,965,813),36859=>array(31,-58,960,857),36860=>array(46,-74,972,827),36861=>array(31,-53,952,842),36862=>array(39,-70,974,832),36863=>array(46,-70,978,849),36864=>array(31,-53,952,818),36865=>array(31,-53,952,859),36866=>array(42,-65,935,859),36867=>array(31,-53,952,828),36868=>array(39,-65,982,851),36869=>array(36,-47,965,837),36870=>array(31,-53,952,838),36871=>array(31,-53,952,833),36872=>array(42,-65,948,858),36873=>array(28,-43,942,807),36874=>array(32,-48,940,807),36875=>array(46,-47,952,841),36876=>array(46,-78,968,826),36877=>array(51,-47,950,829),36878=>array(41,-53,962,801),36879=>array(33,-52,954,831),36880=>array(22,-53,953,817),36881=>array(36,-47,965,832),36882=>array(28,-30,930,839),36883=>array(37,-56,951,830),36884=>array(30,-55,951,849),36885=>array(36,-47,965,813),36886=>array(31,-47,960,830),36887=>array(39,-56,953,815),36888=>array(41,-56,959,838),36889=>array(44,-45,944,816),36890=>array(31,-53,952,817),36891=>array(50,-59,963,821),36892=>array(46,-73,980,823),36893=>array(24,-53,945,829),36894=>array(41,-47,970,813),36895=>array(31,-53,952,836),36896=>array(31,-42,946,830),36897=>array(36,-47,965,839),36898=>array(44,-45,944,839),36899=>array(37,-56,951,830),36900=>array(39,-71,980,822),36901=>array(37,-56,976,799),36902=>array(33,-46,939,787),36903=>array(50,-46,944,809),36904=>array(37,-56,951,836),36905=>array(49,-56,963,847),36906=>array(37,-56,951,824),36907=>array(37,-44,951,811),36908=>array(37,-48,951,836),36909=>array(45,-78,971,844),36910=>array(31,-53,952,829),36911=>array(43,-66,981,847),36912=>array(39,-66,963,834),36913=>array(37,-56,951,799),36914=>array(37,-60,951,831),36915=>array(37,-48,951,821),36916=>array(51,-75,976,829),36917=>array(36,-47,965,837),36918=>array(46,-47,952,833),36919=>array(45,-64,959,791),36920=>array(36,-54,957,841),36921=>array(26,-53,947,834),36922=>array(37,-56,951,835),36923=>array(39,-57,942,792),36924=>array(44,-45,944,799),36925=>array(43,-66,961,826),36926=>array(11,-73,952,836),36927=>array(43,-68,966,818),36928=>array(49,-56,963,845),36929=>array(31,-74,952,837),36930=>array(31,-53,952,848),36931=>array(49,-56,963,833),36932=>array(46,-68,960,835),36933=>array(37,-56,951,807),36934=>array(49,-64,963,845),36935=>array(36,-51,964,814),36936=>array(36,-55,964,812),36937=>array(31,-63,956,831),36938=>array(37,-56,960,842),36939=>array(37,-56,951,799),36940=>array(36,-51,964,826),36941=>array(33,-45,959,815),36942=>array(37,-56,951,799),36943=>array(31,-53,952,801),36944=>array(31,-53,952,801),36945=>array(31,-53,952,843),36946=>array(37,-56,950,821),36947=>array(31,-53,952,847),36948=>array(37,-56,951,834),36949=>array(37,-56,951,844),36950=>array(47,-56,955,810),36951=>array(49,-59,953,820),36952=>array(52,-56,960,832),36953=>array(37,-56,951,837),36954=>array(44,-69,963,841),36955=>array(36,-67,975,834),36956=>array(42,-41,961,823),36957=>array(37,-40,955,831),36958=>array(47,-56,955,828),36959=>array(37,-56,951,799),36960=>array(37,-44,953,835),36961=>array(37,-56,951,837),36962=>array(40,-65,961,829),36963=>array(25,-59,946,832),36964=>array(25,-59,946,817),36965=>array(37,-56,951,834),36966=>array(37,-56,951,807),36967=>array(84,-56,977,838),36968=>array(47,-56,955,834),36969=>array(37,-56,951,839),36970=>array(37,-56,952,835),36971=>array(49,-70,982,827),36972=>array(37,-64,977,831),36973=>array(31,-53,952,830),36974=>array(36,-47,939,835),36975=>array(50,-59,955,795),36976=>array(40,-54,976,843),36977=>array(37,-56,972,831),36978=>array(47,-56,961,815),36979=>array(56,-72,981,832),36980=>array(40,-72,973,836),36981=>array(35,-49,958,841),36982=>array(47,-56,965,838),36983=>array(37,-56,956,807),36984=>array(37,-56,951,799),36985=>array(38,-52,975,826),36986=>array(37,-56,951,835),36987=>array(41,-73,976,820),36988=>array(37,-56,968,838),36989=>array(47,-56,961,835),36990=>array(45,-66,972,840),36991=>array(31,-53,952,824),36992=>array(47,-51,961,837),36993=>array(47,-51,961,829),36994=>array(47,-56,961,841),36995=>array(52,-56,966,841),36996=>array(37,-56,951,808),36997=>array(44,-70,972,846),36998=>array(39,-69,980,826),36999=>array(36,-47,971,828),37000=>array(18,-65,964,846),37001=>array(47,-51,961,837),37002=>array(47,-51,961,838),37003=>array(40,-65,971,848),37004=>array(45,-56,961,825),37005=>array(38,-72,983,848),37006=>array(37,-68,971,820),37007=>array(52,-51,966,820),37008=>array(42,-65,973,813),37009=>array(124,-30,927,784),37010=>array(84,-70,942,782),37011=>array(30,-60,912,790),37012=>array(72,-64,934,788),37013=>array(75,-24,931,841),37014=>array(114,-60,912,819),37015=>array(69,-69,939,787),37016=>array(60,-63,938,794),37017=>array(49,-69,958,799),37018=>array(85,-69,939,818),37019=>array(73,-69,939,781),37020=>array(57,-69,939,844),37021=>array(38,-65,916,842),37022=>array(55,-66,956,827),37023=>array(44,-60,947,838),37024=>array(45,-71,953,786),37025=>array(68,-71,959,841),37026=>array(51,-70,945,785),37027=>array(57,-70,940,786),37028=>array(41,-69,955,816),37029=>array(56,-68,950,832),37030=>array(76,-75,937,830),37031=>array(52,-69,945,785),37032=>array(57,-65,938,833),37033=>array(73,-91,911,814),37034=>array(48,-65,941,785),37035=>array(36,-75,959,830),37036=>array(47,-61,912,837),37037=>array(61,-72,943,834),37038=>array(89,-72,911,823),37039=>array(36,-67,919,831),37040=>array(75,-69,954,833),37041=>array(55,-63,927,828),37042=>array(46,-71,956,827),37043=>array(56,-68,957,784),37044=>array(51,-59,947,797),37045=>array(51,-68,938,786),37046=>array(33,-74,939,811),37047=>array(73,-74,941,780),37048=>array(63,-70,939,828),37049=>array(39,-68,917,809),37050=>array(40,-67,923,804),37051=>array(44,-60,909,829),37052=>array(93,-58,942,788),37053=>array(56,-68,943,824),37054=>array(41,-54,954,840),37055=>array(62,-68,943,827),37056=>array(32,-65,942,839),37057=>array(48,-68,942,840),37058=>array(53,-74,958,835),37059=>array(57,-72,959,829),37060=>array(31,-64,945,850),37061=>array(61,-69,957,783),37062=>array(82,-68,963,824),37063=>array(37,-63,961,847),37064=>array(46,-53,947,860),37065=>array(51,-70,945,785),37066=>array(54,-64,936,822),37067=>array(133,-67,930,833),37068=>array(49,-48,955,826),37069=>array(50,-76,910,845),37070=>array(51,-65,930,832),37071=>array(39,-70,912,820),37072=>array(26,-64,915,835),37073=>array(35,-59,921,832),37074=>array(102,-31,968,826),37075=>array(63,-70,930,780),37076=>array(52,-71,958,813),37077=>array(31,-52,958,852),37078=>array(51,-65,949,788),37079=>array(47,-69,968,837),37080=>array(121,-66,931,787),37081=>array(62,-76,956,826),37082=>array(66,-70,956,781),37083=>array(38,-68,939,834),37084=>array(80,-74,966,827),37085=>array(59,-62,947,836),37086=>array(77,-65,910,833),37087=>array(19,-74,942,829),37088=>array(48,-71,950,777),37089=>array(41,-68,945,787),37090=>array(46,-68,955,785),37091=>array(59,-70,944,823),37092=>array(40,-67,943,834),37093=>array(61,-68,954,786),37094=>array(62,-64,930,786),37095=>array(35,-69,916,783),37096=>array(59,-67,943,830),37097=>array(47,-70,952,836),37098=>array(52,-71,956,827),37099=>array(63,-69,967,847),37100=>array(73,-71,949,829),37101=>array(52,-58,941,837),37102=>array(33,-69,941,786),37103=>array(46,-70,962,831),37104=>array(46,-73,947,787),37105=>array(59,-69,938,827),37106=>array(46,-70,951,834),37107=>array(41,-70,949,828),37108=>array(49,-69,963,825),37109=>array(52,-69,942,831),37110=>array(59,-65,965,840),37111=>array(38,-70,947,833),37112=>array(43,-58,914,831),37113=>array(43,-70,954,786),37114=>array(36,-66,967,830),37115=>array(86,-69,960,783),37116=>array(60,-68,952,841),37117=>array(50,-67,949,835),37118=>array(80,-69,963,786),37119=>array(42,-69,966,785),37120=>array(44,-55,947,838),37121=>array(37,-74,951,826),37122=>array(62,-68,948,785),37123=>array(29,-68,954,843),37124=>array(57,-68,962,785),37125=>array(60,-53,947,848),37126=>array(71,-69,963,782),37127=>array(34,-70,959,838),37128=>array(33,-70,953,835),37129=>array(53,-70,938,839),37130=>array(53,-70,938,830),37131=>array(44,-69,951,826),37132=>array(23,-69,965,848),37133=>array(44,-75,949,783),37134=>array(25,-62,953,840),37135=>array(46,-71,948,802),37136=>array(62,-69,955,842),37137=>array(68,-68,949,785),37138=>array(53,-72,949,842),37139=>array(41,-66,949,841),37140=>array(37,-66,945,844),37141=>array(41,-70,938,831),37142=>array(45,-77,968,783),37143=>array(63,-67,951,837),37144=>array(40,-69,957,843),37145=>array(42,-70,933,783),37146=>array(47,-72,935,825),37147=>array(45,-69,953,835),37148=>array(51,-64,953,850),37149=>array(42,-68,940,785),37150=>array(52,-65,948,830),37151=>array(57,-70,943,824),37152=>array(58,-65,954,795),37153=>array(27,-69,945,838),37154=>array(37,-68,966,784),37155=>array(65,-69,940,838),37156=>array(47,-68,947,803),37157=>array(37,-66,946,844),37158=>array(24,-70,950,830),37159=>array(46,-65,951,832),37160=>array(101,-39,946,829),37161=>array(49,-73,950,781),37162=>array(49,-80,955,833),37163=>array(95,-55,942,853),37164=>array(48,-78,965,836),37165=>array(57,-77,956,839),37166=>array(46,-73,952,836),37167=>array(66,-67,947,849),37168=>array(62,-77,949,833),37169=>array(35,-70,953,836),37170=>array(49,-66,951,787),37171=>array(104,-67,949,787),37172=>array(40,-69,974,824),37173=>array(41,-68,960,797),37174=>array(18,-74,962,847),37175=>array(48,-71,943,830),37176=>array(59,-67,941,834),37177=>array(43,-70,960,793),37178=>array(34,-70,949,845),37179=>array(63,-75,958,829),37180=>array(25,-75,958,827),37181=>array(22,-75,978,858),37182=>array(48,-65,954,789),37183=>array(59,-67,958,832),37184=>array(42,-73,959,829),37185=>array(40,-79,954,836),37186=>array(44,-50,960,801),37187=>array(85,-68,956,796),37188=>array(40,-69,958,825),37189=>array(45,-65,956,837),37190=>array(47,-68,947,827),37191=>array(52,-62,962,844),37192=>array(30,-67,951,805),37193=>array(54,-63,946,779),37194=>array(59,-54,953,788),37195=>array(60,-67,950,840),37196=>array(64,-63,915,844),37197=>array(63,-67,945,790),37198=>array(62,-65,954,832),37199=>array(60,-54,961,825),37200=>array(59,-60,950,790),37201=>array(56,-45,966,798),37202=>array(47,-62,943,790),37203=>array(46,-72,966,849),37204=>array(40,-68,979,837),37205=>array(59,-54,957,809),37206=>array(66,-61,973,836),37207=>array(55,-53,916,808),37208=>array(56,-75,984,791),37209=>array(56,-72,955,826),37210=>array(55,-53,962,790),37211=>array(35,-68,969,787),37212=>array(45,-68,980,842),37213=>array(52,-61,943,782),37214=>array(54,-70,968,837),37215=>array(56,-70,943,816),37216=>array(55,-57,956,790),37217=>array(55,-53,959,836),37218=>array(50,-64,951,835),37219=>array(53,-65,955,830),37220=>array(55,-58,951,836),37221=>array(63,-65,977,828),37222=>array(46,-64,972,820),37223=>array(66,-61,965,849),37224=>array(69,-70,961,833),37225=>array(76,-65,919,839),37226=>array(51,-67,967,840),37227=>array(30,-68,958,820),37228=>array(66,-65,913,835),37229=>array(45,-68,956,834),37230=>array(55,-64,932,790),37231=>array(55,-71,953,816),37232=>array(53,-70,974,836),37233=>array(65,-62,922,837),37234=>array(50,-53,946,790),37235=>array(60,-68,960,825),37236=>array(55,-63,968,841),37237=>array(61,-71,949,830),37238=>array(59,-71,955,840),37239=>array(59,-61,924,829),37240=>array(40,-73,967,849),37241=>array(55,-64,952,830),37242=>array(55,-66,960,828),37243=>array(60,-68,973,835),37244=>array(25,-68,977,833),37245=>array(49,-64,920,771),37246=>array(50,-45,913,775),37247=>array(43,-60,939,841),37248=>array(55,-68,955,822),37249=>array(55,-73,963,831),37250=>array(58,-70,975,820),37251=>array(55,-55,971,831),37252=>array(55,-60,929,826),37253=>array(55,-67,952,838),37254=>array(59,-68,964,832),37255=>array(54,-64,960,831),37256=>array(55,-69,978,839),37257=>array(56,-71,951,835),37258=>array(51,-63,967,793),37259=>array(59,-72,949,818),37260=>array(58,-54,961,789),37261=>array(53,-65,966,787),37262=>array(49,-69,955,834),37263=>array(55,-66,951,825),37264=>array(68,-66,919,828),37265=>array(55,-68,966,790),37266=>array(66,-38,962,798),37267=>array(55,-53,963,830),37268=>array(48,-70,951,844),37269=>array(35,-68,949,845),37270=>array(40,-68,963,787),37271=>array(53,-64,968,834),37272=>array(45,-68,953,822),37273=>array(55,-69,964,824),37274=>array(47,-73,961,821),37275=>array(55,-53,968,821),37276=>array(59,-65,974,847),37277=>array(55,-53,952,829),37278=>array(55,-53,958,790),37279=>array(86,-63,921,831),37280=>array(55,-53,967,828),37281=>array(56,-69,948,838),37282=>array(51,-52,941,840),37283=>array(50,-67,954,844),37284=>array(53,-74,947,845),37285=>array(55,-67,963,799),37286=>array(60,-61,967,848),37287=>array(48,-53,957,790),37288=>array(55,-69,954,827),37289=>array(54,-53,961,848),37290=>array(48,-69,975,790),37291=>array(51,-71,945,784),37292=>array(63,-78,955,853),37293=>array(57,-72,981,823),37294=>array(54,-66,952,833),37295=>array(47,-58,959,836),37296=>array(60,-48,960,811),37297=>array(53,-62,977,846),37298=>array(46,-74,972,825),37299=>array(66,-70,962,784),37300=>array(51,-57,952,829),37301=>array(43,-65,970,828),37302=>array(51,-66,947,847),37303=>array(51,-62,965,838),37304=>array(51,-79,979,837),37305=>array(52,-55,944,803),37306=>array(53,-66,959,832),37307=>array(62,-64,961,835),37308=>array(49,-67,963,826),37309=>array(53,-48,939,810),37310=>array(47,-65,961,838),37311=>array(55,-66,961,837),37312=>array(62,-72,982,842),37313=>array(52,-75,964,833),37314=>array(59,-64,962,848),37315=>array(54,-72,964,790),37316=>array(55,-63,961,837),37317=>array(50,-65,981,795),37318=>array(50,-70,966,824),37319=>array(52,-68,956,829),37320=>array(42,-66,978,827),37321=>array(45,-66,907,842),37322=>array(47,-61,934,806),37323=>array(36,-70,951,821),37324=>array(52,-19,948,796),37325=>array(69,-34,947,831),37326=>array(64,-64,931,784),37327=>array(53,-30,947,789),37328=>array(29,-56,953,844),37329=>array(54,-21,960,856),37330=>array(39,-26,547,829),37331=>array(39,-30,959,829),37332=>array(35,-32,954,824),37333=>array(48,-64,944,828),37334=>array(39,-73,934,829),37335=>array(59,-62,909,831),37336=>array(45,-52,956,843),37337=>array(49,-65,958,833),37338=>array(42,-72,967,845),37339=>array(39,-66,927,834),37340=>array(66,-25,948,833),37341=>array(44,-67,950,831),37342=>array(39,-57,958,829),37343=>array(39,-71,989,829),37344=>array(39,-71,967,829),37345=>array(86,-21,916,833),37346=>array(58,-75,940,840),37347=>array(55,-61,921,841),37348=>array(48,-65,957,832),37349=>array(39,-72,982,829),37350=>array(54,-50,906,813),37351=>array(48,-62,896,837),37352=>array(42,-72,957,829),37353=>array(39,-67,959,831),37354=>array(45,-71,956,829),37355=>array(36,-69,955,826),37356=>array(39,-71,958,823),37357=>array(36,-18,955,824),37358=>array(42,-74,953,834),37359=>array(39,-26,930,833),37360=>array(39,-49,916,829),37361=>array(36,-60,963,835),37362=>array(48,-38,958,829),37363=>array(29,-29,961,827),37364=>array(39,-67,958,834),37365=>array(42,-67,965,830),37366=>array(39,-26,963,841),37367=>array(41,-17,953,827),37368=>array(48,-69,920,831),37369=>array(41,-68,950,830),37370=>array(39,-67,942,829),37371=>array(42,-56,964,843),37372=>array(37,-60,969,823),37373=>array(40,-64,967,834),37374=>array(54,-59,967,827),37375=>array(42,-61,959,847),37376=>array(36,-35,954,830),37377=>array(46,-64,948,835),37378=>array(42,-63,966,839),37379=>array(35,-72,957,834),37380=>array(49,-64,964,831),37381=>array(35,-73,894,841),37382=>array(41,-68,972,836),37383=>array(37,-58,966,840),37384=>array(34,-64,959,827),37385=>array(56,-68,914,823),37386=>array(44,-26,972,836),37387=>array(37,-62,954,840),37388=>array(46,-73,985,837),37389=>array(37,-52,965,839),37390=>array(61,-57,920,841),37391=>array(35,-72,898,823),37392=>array(40,-70,977,840),37393=>array(41,-62,971,831),37394=>array(40,-68,979,840),37395=>array(37,-22,958,840),37396=>array(35,-60,973,829),37397=>array(41,-30,951,833),37398=>array(32,-70,976,832),37399=>array(38,-60,966,838),37400=>array(44,-68,973,841),37401=>array(40,-70,990,834),37402=>array(38,-69,962,831),37403=>array(37,-52,949,840),37404=>array(38,-63,964,836),37405=>array(44,-71,954,840),37406=>array(65,-57,923,839),37407=>array(51,-66,896,840),37408=>array(37,-65,964,840),37409=>array(37,-66,891,840),37410=>array(31,-72,980,832),37411=>array(51,-65,944,830),37412=>array(39,-71,909,827),37413=>array(44,-67,976,826),37414=>array(46,-69,951,833),37415=>array(44,-66,964,841),37416=>array(37,-51,949,840),37417=>array(37,-66,928,840),37418=>array(45,-71,970,827),37419=>array(37,-63,961,842),37420=>array(37,-66,981,840),37421=>array(37,-21,968,823),37422=>array(43,-60,953,833),37423=>array(37,-66,922,842),37424=>array(35,-64,954,846),37425=>array(31,-57,964,839),37426=>array(29,-72,976,839),37427=>array(35,-61,957,833),37428=>array(35,-65,975,846),37429=>array(37,-62,962,840),37430=>array(46,-69,961,831),37431=>array(38,-65,948,833),37432=>array(47,-66,975,833),37433=>array(32,-67,972,839),37434=>array(47,-14,950,831),37435=>array(37,-47,912,843),37436=>array(37,-65,948,844),37437=>array(39,-68,944,837),37438=>array(64,-70,912,828),37439=>array(42,-42,918,827),37440=>array(56,-67,914,823),37441=>array(57,-72,971,850),37442=>array(56,-68,970,833),37443=>array(56,-67,967,828),37444=>array(27,-59,974,841),37445=>array(42,-17,953,826),37446=>array(44,-73,950,829),37447=>array(56,-29,943,830),37448=>array(24,-30,957,829),37449=>array(35,-70,981,829),37450=>array(35,-71,920,830),37451=>array(33,-45,964,834),37452=>array(28,-70,981,831),37453=>array(32,-78,967,837),37454=>array(35,-30,954,834),37455=>array(27,-20,947,834),37456=>array(35,-71,950,838),37457=>array(70,-68,919,845),37458=>array(38,-29,952,833),37459=>array(31,-73,948,834),37460=>array(37,-29,953,828),37461=>array(37,-29,953,828),37462=>array(39,-78,986,840),37463=>array(37,-68,958,833),37464=>array(56,-62,932,829),37465=>array(56,-68,948,823),37466=>array(59,-74,912,837),37467=>array(51,-67,959,823),37468=>array(56,-64,962,837),37469=>array(56,-22,955,835),37470=>array(40,-62,966,829),37471=>array(56,-27,971,823),37472=>array(29,-74,976,830),37473=>array(44,-72,953,834),37474=>array(31,-73,980,831),37475=>array(39,-54,953,837),37476=>array(45,-59,919,834),37477=>array(31,-58,959,838),37478=>array(41,-18,954,832),37479=>array(36,-58,957,828),37480=>array(56,-58,934,836),37481=>array(56,-28,979,844),37482=>array(56,-22,954,830),37483=>array(46,-57,937,831),37484=>array(63,-69,913,831),37485=>array(38,-12,959,830),37486=>array(55,-62,913,838),37487=>array(34,-69,967,837),37488=>array(48,-71,908,838),37489=>array(37,-66,948,823),37490=>array(39,-70,953,844),37491=>array(36,-59,964,824),37492=>array(28,-17,947,835),37493=>array(41,-42,983,832),37494=>array(39,-53,907,847),37495=>array(35,-71,948,837),37496=>array(31,-63,973,840),37497=>array(44,-69,941,831),37498=>array(30,-64,959,833),37499=>array(34,-67,966,824),37500=>array(37,-59,962,854),37501=>array(53,-65,963,835),37502=>array(31,-71,969,830),37503=>array(41,-67,974,847),37504=>array(44,-56,968,827),37505=>array(56,-60,909,836),37506=>array(52,-69,903,835),37507=>array(39,-64,960,835),37508=>array(39,-64,914,844),37509=>array(50,-70,921,829),37510=>array(51,-70,949,833),37511=>array(59,-68,980,835),37512=>array(47,-31,956,837),37513=>array(34,-61,955,841),37514=>array(50,-71,957,836),37515=>array(43,-68,952,835),37516=>array(46,-69,955,841),37517=>array(34,-20,947,835),37518=>array(32,-14,968,800),37519=>array(26,-68,974,823),37520=>array(43,-32,967,828),37521=>array(33,-70,959,837),37522=>array(56,-69,956,823),37523=>array(35,-24,973,830),37524=>array(50,-70,955,834),37525=>array(33,-73,970,830),37526=>array(30,-64,967,839),37527=>array(47,-73,952,837),37528=>array(64,-69,903,840),37529=>array(54,-67,967,834),37530=>array(41,-66,964,838),37531=>array(37,-63,959,837),37532=>array(38,-73,961,832),37533=>array(35,-76,964,832),37534=>array(41,-22,964,848),37535=>array(47,-67,930,837),37536=>array(31,-36,958,831),37537=>array(43,-73,945,831),37538=>array(58,-70,969,832),37539=>array(54,-63,927,837),37540=>array(54,-73,964,832),37541=>array(37,-65,963,844),37542=>array(48,-52,921,834),37543=>array(52,-71,961,835),37544=>array(35,-63,951,848),37545=>array(42,-51,955,829),37546=>array(46,-65,954,837),37547=>array(51,-32,971,837),37548=>array(34,-63,956,832),37549=>array(56,-70,933,826),37550=>array(35,-27,960,825),37551=>array(56,-67,952,824),37552=>array(51,-66,949,835),37553=>array(30,-70,942,841),37554=>array(30,-52,958,841),37555=>array(39,-69,959,833),37556=>array(31,-37,987,838),37557=>array(42,-71,969,846),37558=>array(47,-62,975,835),37559=>array(50,-67,942,833),37560=>array(30,-67,953,827),37561=>array(35,-70,958,838),37562=>array(27,-47,987,832),37563=>array(60,-67,925,836),37564=>array(39,-23,955,835),37565=>array(28,-54,981,831),37566=>array(58,-70,969,832),37567=>array(29,-64,895,840),37568=>array(28,-30,953,839),37569=>array(53,-69,917,819),37570=>array(38,-75,975,832),37571=>array(50,-63,978,846),37572=>array(47,-74,984,835),37573=>array(46,-70,951,834),37574=>array(39,-25,964,835),37575=>array(48,-67,961,833),37576=>array(36,-25,967,838),37577=>array(43,-69,975,841),37578=>array(34,-68,984,840),37579=>array(48,-46,977,854),37580=>array(45,-69,968,834),37581=>array(35,-73,957,835),37582=>array(28,-66,970,844),37583=>array(42,-70,980,835),37584=>array(42,-65,957,834),37585=>array(32,-76,968,841),37586=>array(41,-61,980,841),37587=>array(42,-70,916,833),37588=>array(28,-67,967,848),37589=>array(57,-40,982,825),37590=>array(33,-74,959,838),37591=>array(36,-64,903,844),37592=>array(43,-72,978,823),37593=>array(35,-48,947,839),37594=>array(34,-25,966,842),37595=>array(41,-68,931,832),37596=>array(33,-73,970,838),37597=>array(37,-70,954,840),37598=>array(32,-30,954,833),37599=>array(38,-66,979,833),37600=>array(31,-78,971,846),37601=>array(37,-70,981,840),37602=>array(33,-56,973,838),37603=>array(42,-72,958,829),37604=>array(45,-70,919,834),37605=>array(33,-16,950,838),37606=>array(42,-68,930,829),37607=>array(36,-72,969,838),37608=>array(36,-64,955,836),37609=>array(39,-21,954,830),37610=>array(43,-70,951,835),37611=>array(19,-25,951,835),37612=>array(34,-24,966,833),37613=>array(39,-70,959,834),37614=>array(43,-70,964,840),37615=>array(46,-65,957,831),37616=>array(40,-27,954,836),37617=>array(35,-60,968,831),37618=>array(39,-64,954,835),37619=>array(37,-60,945,838),37620=>array(43,-66,954,838),37621=>array(39,-64,960,835),37622=>array(33,-70,973,843),37623=>array(26,-76,968,826),37624=>array(39,-68,945,830),37625=>array(25,-71,962,835),37626=>array(35,-67,965,831),37627=>array(37,-27,971,782),37628=>array(62,-68,908,824),37629=>array(33,-62,965,838),37630=>array(25,-70,914,836),37631=>array(28,-69,920,833),37632=>array(29,-64,982,841),37633=>array(37,-65,977,833),37634=>array(42,-57,971,842),37635=>array(34,-42,966,836),37636=>array(57,-64,968,841),37637=>array(49,-46,946,832),37638=>array(38,-64,953,842),37639=>array(38,-70,947,841),37640=>array(30,-41,978,839),37641=>array(40,-71,967,837),37642=>array(40,-64,960,845),37643=>array(21,-80,903,821),37644=>array(25,-70,941,836),37645=>array(37,-69,959,842),37646=>array(36,-68,905,836),37647=>array(29,-24,962,833),37648=>array(48,-68,954,832),37649=>array(33,-69,972,842),37650=>array(30,-66,956,826),37651=>array(28,-66,964,837),37652=>array(33,-53,975,841),37653=>array(53,-42,961,837),37654=>array(44,-32,981,836),37655=>array(30,-62,958,842),37656=>array(43,-32,952,832),37657=>array(44,-65,934,844),37658=>array(27,-64,957,832),37659=>array(36,-64,994,845),37660=>array(27,-27,971,840),37661=>array(24,-54,969,838),37662=>array(30,-58,951,846),37663=>array(35,-59,968,843),37664=>array(41,-72,963,839),37665=>array(38,-65,952,837),37666=>array(48,-67,956,832),37667=>array(31,-61,962,835),37668=>array(46,-74,981,833),37669=>array(33,-68,954,843),37670=>array(68,-67,920,849),37671=>array(37,-48,923,860),37672=>array(42,-67,956,836),37673=>array(49,-64,907,838),37674=>array(37,-58,973,838),37675=>array(55,-60,917,824),37676=>array(57,-64,973,835),37677=>array(36,-75,905,840),37678=>array(58,-70,917,836),37679=>array(39,-64,955,836),37680=>array(39,-90,986,836),37681=>array(54,-62,948,844),37682=>array(39,-64,973,836),37683=>array(44,-32,956,824),37684=>array(29,-30,956,825),37685=>array(29,-65,962,833),37686=>array(29,-57,974,841),37687=>array(29,-70,983,835),37688=>array(33,-64,975,836),37689=>array(40,-65,956,836),37690=>array(40,-65,958,837),37691=>array(50,-64,962,846),37692=>array(37,-65,978,838),37693=>array(44,-72,981,833),37694=>array(31,-18,938,825),37695=>array(34,-67,951,834),37696=>array(42,-53,957,845),37697=>array(33,-72,961,833),37698=>array(34,-31,982,843),37699=>array(34,-29,961,842),37700=>array(38,-60,967,832),37701=>array(50,-57,962,831),37702=>array(50,-65,921,830),37703=>array(52,-62,979,844),37704=>array(33,-64,964,835),37705=>array(36,-71,978,828),37706=>array(18,-53,969,847),37707=>array(54,-67,914,834),37708=>array(54,-43,971,817),37709=>array(46,-78,969,833),37710=>array(42,-68,951,837),37711=>array(47,-70,959,832),37712=>array(46,-67,983,839),37713=>array(44,-72,981,835),37714=>array(41,-71,979,834),37715=>array(41,-67,954,834),37716=>array(44,-60,965,839),37717=>array(47,-76,964,824),37718=>array(43,-74,955,818),37719=>array(50,-67,943,843),37720=>array(49,-67,915,830),37721=>array(49,-43,973,817),37722=>array(39,-68,964,825),37723=>array(42,-69,971,830),37724=>array(42,-50,963,842),37725=>array(42,-70,944,842),37726=>array(49,-81,978,832),37727=>array(49,-28,954,832),37728=>array(39,-21,957,851),37729=>array(32,-71,970,829),37730=>array(42,-65,948,842),37731=>array(47,-71,950,829),37732=>array(43,-64,960,844),37733=>array(48,-62,976,841),37734=>array(38,-69,957,841),37735=>array(52,-65,926,836),37736=>array(39,-58,955,835),37737=>array(37,-65,973,836),37738=>array(42,-23,981,842),37739=>array(43,-39,967,842),37740=>array(43,-73,974,833),37741=>array(39,-53,964,844),37742=>array(41,-63,969,840),37743=>array(41,-47,960,848),37744=>array(43,-67,981,844),37745=>array(35,-50,968,845),37746=>array(43,-52,963,843),37747=>array(39,-40,973,837),37748=>array(43,-63,954,843),37749=>array(38,-66,963,823),37750=>array(48,-32,965,823),37751=>array(36,-37,978,824),37752=>array(34,-71,923,833),37753=>array(45,-37,961,834),37754=>array(39,-64,950,838),37755=>array(57,-73,936,824),37756=>array(28,-60,963,842),37757=>array(36,-67,917,840),37758=>array(36,-30,959,842),37759=>array(36,-71,925,838),37760=>array(38,-67,976,837),37761=>array(38,-65,969,834),37762=>array(44,-74,968,837),37763=>array(35,-68,974,844),37764=>array(44,-75,969,842),37765=>array(26,-54,969,846),37766=>array(39,-73,951,833),37767=>array(44,-72,920,818),37768=>array(29,-49,956,848),37769=>array(35,-69,920,833),37770=>array(50,-67,925,847),37771=>array(44,-70,938,839),37772=>array(25,-66,970,847),37773=>array(34,-65,971,834),37774=>array(27,-69,978,842),37775=>array(33,-30,986,843),37776=>array(33,-58,957,835),37777=>array(34,-34,957,833),37778=>array(32,-70,970,826),37779=>array(44,-81,969,822),37780=>array(26,-51,963,842),37781=>array(39,-68,964,845),37782=>array(42,-70,970,837),37783=>array(41,-60,970,855),37784=>array(39,-67,954,826),37785=>array(33,-73,924,823),37786=>array(28,-73,965,838),37787=>array(40,-53,951,843),37788=>array(40,-50,976,846),37789=>array(40,-62,988,835),37790=>array(30,-50,960,845),37791=>array(34,-71,986,827),37792=>array(44,-37,953,834),37793=>array(33,-64,955,851),37794=>array(37,-66,950,839),37795=>array(39,-33,972,835),37796=>array(36,-61,974,836),37797=>array(40,-30,976,836),37798=>array(48,-67,925,830),37799=>array(37,-24,960,832),37800=>array(40,-65,965,840),37801=>array(47,-62,990,836),37802=>array(41,-72,975,835),37803=>array(44,-57,976,823),37804=>array(45,-70,936,832),37805=>array(37,-78,963,833),37806=>array(38,-69,952,836),37807=>array(32,-65,954,837),37808=>array(39,-38,961,824),37809=>array(33,-67,974,837),37810=>array(34,-63,980,838),37811=>array(35,-67,965,846),37812=>array(34,-42,980,836),37813=>array(32,-56,967,843),37814=>array(44,-64,929,818),37815=>array(44,-62,936,838),37816=>array(44,-66,950,837),37817=>array(37,-48,968,822),37818=>array(19,-73,981,837),37819=>array(48,-70,959,840),37820=>array(41,-70,942,835),37821=>array(39,-64,970,839),37822=>array(44,-38,968,818),37823=>array(49,-65,969,855),37824=>array(54,-67,926,834),37825=>array(43,-65,970,839),37826=>array(37,-35,957,828),37827=>array(31,-66,974,837),37828=>array(41,-67,962,838),37829=>array(37,-66,958,847),37830=>array(45,-66,955,830),37831=>array(28,-57,973,848),37832=>array(45,-63,969,835),37833=>array(48,-76,966,834),37834=>array(38,-30,979,846),37835=>array(31,-67,951,829),37836=>array(28,-57,978,844),37837=>array(34,-71,962,831),37838=>array(32,-71,962,831),37839=>array(40,-23,957,824),37840=>array(39,-69,960,841),37841=>array(35,-64,951,833),37842=>array(44,-67,983,841),37843=>array(44,-44,989,850),37844=>array(43,-71,965,840),37845=>array(36,-63,961,845),37846=>array(25,-66,967,837),37847=>array(34,-20,968,832),37848=>array(31,-65,953,833),37849=>array(47,-67,967,837),37850=>array(44,-70,982,835),37851=>array(44,-64,933,839),37852=>array(46,-23,956,827),37853=>array(39,-60,984,841),37854=>array(39,-70,956,839),37855=>array(40,-71,954,847),37856=>array(21,-52,989,843),37857=>array(34,-73,964,836),37858=>array(38,-64,965,824),37859=>array(28,-75,983,840),37860=>array(44,-64,956,835),37861=>array(44,-65,942,831),37862=>array(29,-55,979,847),37863=>array(48,-29,968,826),37864=>array(31,-21,962,836),37865=>array(34,-63,974,843),37866=>array(44,-69,978,828),37867=>array(44,-68,962,826),37868=>array(41,-68,942,835),37869=>array(29,-38,964,828),37870=>array(32,-66,966,848),37871=>array(39,-72,972,823),37872=>array(37,-74,930,841),37873=>array(35,-61,967,852),37874=>array(35,-67,949,848),37875=>array(32,-62,920,846),37876=>array(22,-65,970,841),37877=>array(35,-67,961,833),37878=>array(38,-67,981,836),37879=>array(32,-63,974,830),37880=>array(47,-42,982,825),37881=>array(43,-53,959,837),37882=>array(51,-68,993,848),37883=>array(66,-57,979,840),37884=>array(29,-68,979,837),37885=>array(23,-53,954,840),37886=>array(19,-76,969,834),37887=>array(39,-68,979,832),37888=>array(44,-80,954,834),37889=>array(24,-67,954,838),37890=>array(37,-71,946,839),37891=>array(37,-63,963,839),37892=>array(37,-70,971,839),37893=>array(60,-40,972,839),37894=>array(60,-30,972,846),37895=>array(35,-66,969,850),37896=>array(42,-62,964,841),37897=>array(42,-85,969,824),37898=>array(24,-67,954,838),37899=>array(27,-66,952,837),37900=>array(42,-67,988,825),37901=>array(47,-56,925,839),37902=>array(27,-66,975,844),37903=>array(44,-50,952,858),37904=>array(39,-67,973,846),37905=>array(41,-70,961,835),37906=>array(47,-65,952,833),37907=>array(29,-70,971,832),37908=>array(36,-53,943,839),37909=>array(27,-71,959,834),37910=>array(24,-69,963,836),37911=>array(29,-68,911,838),37912=>array(40,-31,956,839),37913=>array(32,-24,959,837),37914=>array(37,-48,968,839),37915=>array(41,-59,965,830),37916=>array(40,-34,958,847),37917=>array(48,-76,954,838),37918=>array(42,-59,962,839),37919=>array(37,-68,954,839),37920=>array(42,-64,954,844),37921=>array(44,-69,951,824),37922=>array(39,-30,972,826),37923=>array(47,-54,935,839),37924=>array(47,-56,938,834),37925=>array(37,-64,954,845),37926=>array(57,-73,905,839),37927=>array(57,-65,927,822),37928=>array(38,-71,966,835),37929=>array(45,-66,978,830),37930=>array(40,-71,954,833),37931=>array(35,-58,951,843),37932=>array(39,-69,959,829),37933=>array(42,-62,970,850),37934=>array(28,-79,969,847),37935=>array(37,-62,963,842),37936=>array(45,-68,973,834),37937=>array(50,-68,980,842),37938=>array(57,-58,930,827),37939=>array(52,-70,935,837),37940=>array(37,-69,972,845),37941=>array(44,-69,951,824),37942=>array(41,-67,976,837),37943=>array(46,-70,970,830),37944=>array(39,-64,951,840),37945=>array(44,-71,974,826),37946=>array(51,-65,945,838),37947=>array(39,-64,966,831),37948=>array(48,-75,967,830),37949=>array(45,-68,977,835),37950=>array(32,-17,951,838),37951=>array(36,-37,966,844),37952=>array(57,-68,979,835),37953=>array(37,-61,980,843),37954=>array(33,-70,963,836),37955=>array(44,-61,967,835),37956=>array(45,-65,960,835),37957=>array(43,-66,971,834),37958=>array(41,-68,969,826),37959=>array(37,-68,979,833),37960=>array(37,-65,974,829),37961=>array(52,-32,959,831),37962=>array(37,-64,970,835),37963=>array(53,-27,956,825),37964=>array(37,-64,977,849),37965=>array(60,-30,972,804),37966=>array(37,-27,959,839),37967=>array(46,-72,963,839),37968=>array(33,-70,961,831),37969=>array(30,-16,957,844),37970=>array(42,-34,974,841),37971=>array(33,-56,959,837),37972=>array(28,-69,977,845),37973=>array(46,-63,977,844),37974=>array(32,-67,968,839),37975=>array(36,-70,983,834),37976=>array(34,-63,933,830),37977=>array(17,-74,974,834),37978=>array(37,-60,981,845),37979=>array(46,-62,970,839),37980=>array(37,-72,954,839),37981=>array(31,-68,982,832),37982=>array(37,-62,964,842),37983=>array(37,-66,966,841),37984=>array(48,-68,982,840),37985=>array(37,-63,942,839),37986=>array(31,-58,960,847),37987=>array(35,-66,967,854),37988=>array(39,-68,969,827),37989=>array(34,-65,974,852),37990=>array(17,-57,989,839),37991=>array(34,-61,959,849),37992=>array(31,-65,973,837),37993=>array(30,-30,958,817),37994=>array(46,-72,957,829),37995=>array(32,-73,973,856),37996=>array(39,-64,964,839),37997=>array(49,-64,927,829),37998=>array(38,-65,964,831),37999=>array(27,-62,980,837),38000=>array(28,-68,969,845),38001=>array(38,-58,965,842),38002=>array(40,-67,974,854),38003=>array(31,-67,986,844),38004=>array(47,-67,951,828),38005=>array(36,-56,957,837),38006=>array(31,-67,975,834),38007=>array(32,-69,955,822),38008=>array(42,-27,969,827),38009=>array(36,-66,963,848),38010=>array(22,-65,967,839),38011=>array(34,-66,977,842),38012=>array(36,-70,960,829),38013=>array(48,-70,959,838),38014=>array(43,-29,967,845),38015=>array(52,-37,962,834),38016=>array(36,-72,974,833),38017=>array(35,-65,984,834),38018=>array(31,-71,970,832),38019=>array(49,-76,937,831),38020=>array(43,-65,961,846),38021=>array(249,-26,702,820),38022=>array(34,-37,943,826),38023=>array(39,-28,938,830),38024=>array(39,-69,933,830),38025=>array(39,-53,939,830),38026=>array(60,-64,890,828),38027=>array(39,-67,957,830),38028=>array(36,-65,926,822),38029=>array(39,-17,944,830),38030=>array(39,-75,942,830),38031=>array(35,-64,896,832),38032=>array(50,-64,931,827),38033=>array(39,-66,965,830),38034=>array(39,-74,942,830),38035=>array(39,-63,904,838),38036=>array(37,-59,902,830),38037=>array(39,-70,933,830),38038=>array(37,-66,926,830),38039=>array(35,-67,960,830),38040=>array(38,-63,948,830),38041=>array(28,-67,926,820),38042=>array(33,-72,952,828),38043=>array(39,-69,956,830),38044=>array(39,-30,937,830),38045=>array(39,-46,955,830),38046=>array(39,-51,958,830),38047=>array(39,-66,906,830),38048=>array(36,-60,914,830),38049=>array(39,-60,943,830),38050=>array(37,-58,913,830),38051=>array(39,-72,965,830),38052=>array(39,-72,960,837),38053=>array(39,-67,873,830),38054=>array(39,-69,963,836),38055=>array(39,-60,907,832),38056=>array(39,-52,918,839),38057=>array(39,-61,903,830),38058=>array(39,-68,963,845),38059=>array(39,-69,943,834),38060=>array(39,-69,966,830),38061=>array(39,-69,933,830),38062=>array(39,-28,935,826),38063=>array(39,-34,958,830),38064=>array(33,-28,934,830),38065=>array(38,-70,962,830),38066=>array(20,-22,950,823),38067=>array(39,-66,941,830),38068=>array(39,-67,940,831),38069=>array(25,-56,968,837),38070=>array(39,-59,946,830),38071=>array(39,-36,938,830),38072=>array(38,-70,927,833),38073=>array(39,-71,948,841),38074=>array(43,-64,949,826),38075=>array(39,-66,931,830),38076=>array(54,-70,894,826),38077=>array(41,-14,929,826),38078=>array(44,-69,897,826),38079=>array(29,-45,894,826),38080=>array(42,-73,888,821),38081=>array(36,-70,954,832),38082=>array(39,-71,903,843),38083=>array(37,-79,955,847),38084=>array(32,-60,955,832),38085=>array(43,-69,930,826),38086=>array(42,-70,915,834),38087=>array(43,-45,964,834),38088=>array(38,-66,937,841),38089=>array(24,-65,937,839),38090=>array(39,-33,940,846),38091=>array(33,-76,950,830),38092=>array(40,-62,937,827),38093=>array(46,-70,955,837),38094=>array(35,-60,955,826),38095=>array(30,-53,914,835),38096=>array(37,-66,949,829),38097=>array(39,-34,941,828),38098=>array(29,-66,937,826),38099=>array(39,-33,954,828),38100=>array(39,-45,957,826),38101=>array(37,-67,937,835),38102=>array(42,-72,945,827),38103=>array(31,-64,927,829),38104=>array(33,-72,935,818),38105=>array(36,-70,933,831),38106=>array(31,-18,947,829),38107=>array(55,-54,894,822),38108=>array(28,-72,917,823),38109=>array(49,-71,900,817),38110=>array(39,-68,908,816),38111=>array(45,-53,905,827),38112=>array(32,-19,948,824),38113=>array(50,-67,916,830),38114=>array(38,-66,950,837),38115=>array(40,-73,938,830),38116=>array(19,-71,951,833),38117=>array(49,-52,939,827),38118=>array(38,-64,958,834),38119=>array(9,-66,927,828),38120=>array(20,-27,936,816),38121=>array(20,-57,948,825),38122=>array(38,-69,958,845),38123=>array(19,-68,948,833),38124=>array(39,-69,945,821),38125=>array(44,-72,885,840),38126=>array(17,-62,919,825),38127=>array(48,-35,954,834),38128=>array(29,-65,952,835),38129=>array(27,-73,953,840),38130=>array(34,-68,938,847),38131=>array(19,-66,942,844),38132=>array(23,-61,891,822),38133=>array(33,-65,934,844),38134=>array(47,-60,971,825),38135=>array(28,-65,911,835),38136=>array(32,-64,923,832),38137=>array(12,-57,923,822),38138=>array(40,-62,934,832),38139=>array(27,-48,947,821),38140=>array(39,-61,970,823),38141=>array(19,-63,951,833),38142=>array(32,-56,943,825),38143=>array(31,-21,930,819),38144=>array(39,-69,923,831),38145=>array(37,-70,955,830),38146=>array(32,-27,952,833),38147=>array(39,-28,942,830),38148=>array(45,-76,916,833),38149=>array(34,-60,903,839),38150=>array(39,-67,941,827),38151=>array(37,-66,948,833),38152=>array(36,-68,963,827),38153=>array(22,-22,965,832),38154=>array(44,-71,944,819),38155=>array(29,-63,952,839),38156=>array(39,-73,943,831),38157=>array(40,-73,957,832),38158=>array(52,-61,896,830),38159=>array(45,-62,895,828),38160=>array(39,-74,942,835),38161=>array(61,-69,908,836),38162=>array(27,-66,961,843),38163=>array(19,-68,963,833),38164=>array(27,-70,914,833),38165=>array(30,-69,949,832),38166=>array(43,-72,950,828),38167=>array(35,-66,933,832),38168=>array(31,-69,943,837),38169=>array(50,-66,939,829),38170=>array(39,-69,939,827),38171=>array(24,-66,976,843),38172=>array(39,-63,970,839),38173=>array(30,-76,940,827),38174=>array(33,-67,967,833),38175=>array(40,-49,953,827),38176=>array(39,-63,909,826),38177=>array(28,-68,917,815),38178=>array(36,-73,900,827),38179=>array(43,-60,908,834),38180=>array(29,-30,932,833),38181=>array(35,-70,937,834),38182=>array(47,-68,904,846),38183=>array(29,-68,921,833),38184=>array(30,-71,961,824),38185=>array(42,-43,962,833),38186=>array(32,-28,953,822),38187=>array(38,-77,942,834),38188=>array(39,-62,952,842),38189=>array(42,-76,952,839),38190=>array(44,-67,955,826),38191=>array(43,-73,928,827),38192=>array(35,-36,939,821),38193=>array(34,-67,918,842),38194=>array(30,-64,959,832),38195=>array(29,-64,974,836),38196=>array(32,-64,959,837),38197=>array(40,-61,936,827),38198=>array(33,-34,957,827),38199=>array(30,-56,948,827),38200=>array(36,-66,943,841),38201=>array(38,-71,957,833),38202=>array(34,-30,959,838),38203=>array(37,-78,959,823),38204=>array(33,-71,966,832),38205=>array(43,-37,950,834),38206=>array(38,-68,964,842),38207=>array(31,-72,968,844),38208=>array(39,-82,957,846),38209=>array(39,-69,977,829),38210=>array(31,-67,953,824),38211=>array(29,-63,961,837),38212=>array(37,-70,932,826),38213=>array(39,-76,903,827),38214=>array(28,-80,957,810),38215=>array(21,-66,951,838),38216=>array(29,-53,951,843),38217=>array(19,-68,937,833),38218=>array(40,-69,946,828),38219=>array(29,-63,970,835),38220=>array(32,-73,945,833),38221=>array(37,-69,949,843),38222=>array(31,-75,968,842),38223=>array(35,-69,917,833),38224=>array(37,-72,919,848),38225=>array(37,-73,927,848),38226=>array(30,-27,951,832),38227=>array(22,-58,950,840),38228=>array(43,-60,941,826),38229=>array(29,-72,977,841),38230=>array(33,-66,956,833),38231=>array(36,-25,949,833),38232=>array(30,-62,973,833),38233=>array(42,-71,946,827),38234=>array(33,-74,919,833),38235=>array(33,-63,949,851),38236=>array(40,-70,958,836),38237=>array(31,-66,946,844),38238=>array(24,-68,965,839),38239=>array(31,-60,971,846),38240=>array(31,-61,973,831),38241=>array(34,-73,941,821),38242=>array(31,-77,970,830),38243=>array(35,-68,956,842),38244=>array(23,-65,961,833),38245=>array(43,-65,941,835),38246=>array(24,-72,959,836),38247=>array(31,-62,894,825),38248=>array(30,-66,943,843),38249=>array(50,-70,952,837),38250=>array(24,-58,958,822),38251=>array(43,-29,966,832),38252=>array(37,-66,968,832),38253=>array(51,-73,918,827),38254=>array(29,-76,974,833),38255=>array(29,-60,914,833),38256=>array(19,-80,953,844),38257=>array(24,-37,950,842),38258=>array(26,-74,959,842),38259=>array(27,-69,952,850),38260=>array(29,-62,964,842),38261=>array(29,-68,965,842),38262=>array(25,-80,971,843),38263=>array(69,-69,942,800),38264=>array(89,-16,892,784),38265=>array(57,-67,965,850),38266=>array(57,-72,962,831),38267=>array(58,-73,976,821),38268=>array(63,-73,921,785),38269=>array(60,-68,975,827),38270=>array(44,-65,986,786),38271=>array(60,-54,957,823),38272=>array(112,-71,871,782),38273=>array(132,-64,882,789),38274=>array(116,-67,890,788),38275=>array(125,-64,875,789),38276=>array(113,-73,936,803),38277=>array(125,-64,874,789),38278=>array(125,-70,888,782),38279=>array(132,-64,883,791),38280=>array(136,-75,895,783),38281=>array(109,-68,891,785),38282=>array(110,-74,891,779),38283=>array(110,-51,890,806),38284=>array(104,-61,909,792),38285=>array(109,-62,910,790),38286=>array(106,-53,883,797),38287=>array(109,-63,890,796),38288=>array(101,-70,903,782),38289=>array(129,-63,886,797),38290=>array(126,-55,899,801),38291=>array(125,-66,892,784),38292=>array(125,-65,902,790),38293=>array(125,-64,875,789),38294=>array(132,-64,882,789),38295=>array(108,-59,892,799),38296=>array(127,-60,883,796),38297=>array(132,-64,882,789),38298=>array(125,-64,875,789),38299=>array(128,-64,889,787),38300=>array(118,-69,898,782),38301=>array(109,-64,891,788),38302=>array(121,-68,900,783),38303=>array(112,-61,900,790),38304=>array(132,-64,882,789),38305=>array(109,-67,894,790),38306=>array(132,-64,882,789),38307=>array(113,-58,887,798),38308=>array(112,-62,888,789),38309=>array(125,-61,885,794),38310=>array(125,-64,875,789),38311=>array(110,-68,900,786),38312=>array(119,-71,894,791),38313=>array(112,-67,900,789),38314=>array(106,-68,896,786),38315=>array(113,-64,894,788),38316=>array(110,-64,890,788),38317=>array(117,-65,907,790),38318=>array(101,-59,899,791),38319=>array(125,-64,875,789),38320=>array(121,-61,895,787),38321=>array(112,-63,888,801),38322=>array(112,-54,888,802),38323=>array(125,-64,875,789),38324=>array(109,-64,891,788),38325=>array(113,-68,910,783),38326=>array(123,-70,912,789),38327=>array(32,-70,928,829),38328=>array(125,-64,875,789),38329=>array(106,-67,894,788),38330=>array(112,-70,916,796),38331=>array(120,-64,894,793),38332=>array(108,-65,894,797),38333=>array(110,-65,901,789),38334=>array(116,-64,906,790),38335=>array(124,-68,912,782),38336=>array(107,-69,893,810),38337=>array(125,-64,875,789),38338=>array(125,-64,875,789),38339=>array(130,-68,906,783),38340=>array(125,-64,875,799),38341=>array(110,-63,888,812),38342=>array(106,-59,890,796),38343=>array(108,-59,892,803),38344=>array(114,-65,909,790),38345=>array(101,-52,894,797),38346=>array(107,-67,897,783),38347=>array(113,-67,898,792),38348=>array(117,-68,904,788),38349=>array(123,-69,913,784),38350=>array(125,-64,875,789),38351=>array(125,-64,875,789),38352=>array(124,-69,914,789),38353=>array(110,-64,911,794),38354=>array(98,-52,895,805),38355=>array(128,-69,908,782),38356=>array(123,-71,910,785),38357=>array(115,-66,907,791),38358=>array(120,-56,895,794),38359=>array(100,-61,900,800),38360=>array(132,-64,882,789),38361=>array(119,-64,881,789),38362=>array(101,-56,893,794),38363=>array(114,-65,897,788),38364=>array(104,-70,904,792),38365=>array(102,-68,898,784),38366=>array(121,-68,916,783),38367=>array(116,-67,893,784),38368=>array(119,-69,917,790),38369=>array(114,-61,902,793),38370=>array(97,-70,902,785),38371=>array(116,-67,892,787),38372=>array(118,-68,915,789),38373=>array(116,-73,908,785),38374=>array(125,-64,875,789),38375=>array(125,-64,875,797),38376=>array(116,-57,874,823),38377=>array(115,-67,853,801),38378=>array(120,-57,879,821),38379=>array(100,-67,867,826),38380=>array(116,-57,874,823),38381=>array(106,-56,860,820),38382=>array(112,-64,864,802),38383=>array(98,-57,869,832),38384=>array(123,-59,883,815),38385=>array(109,-67,862,822),38386=>array(108,-65,873,818),38387=>array(104,-68,864,826),38388=>array(100,-60,859,820),38389=>array(107,-66,864,816),38390=>array(110,-69,865,826),38391=>array(121,-63,874,826),38392=>array(105,-63,872,823),38393=>array(109,-60,875,821),38394=>array(96,-61,870,819),38395=>array(111,-63,873,824),38396=>array(96,-64,867,823),38397=>array(119,-65,874,817),38398=>array(109,-61,867,828),38399=>array(109,-61,867,828),38400=>array(116,-59,889,824),38401=>array(104,-61,880,810),38402=>array(95,-60,866,830),38403=>array(100,-62,873,829),38404=>array(108,-63,862,817),38405=>array(100,-64,877,821),38406=>array(121,-64,879,823),38407=>array(111,-64,889,821),38408=>array(98,-69,871,818),38409=>array(99,-66,873,811),38410=>array(106,-70,872,822),38411=>array(109,-71,865,817),38412=>array(100,-67,868,826),38413=>array(103,-67,865,821),38414=>array(101,-63,873,815),38415=>array(109,-69,862,813),38416=>array(104,-59,858,830),38417=>array(106,-55,865,822),38418=>array(108,-64,874,828),38419=>array(108,-64,874,828),38420=>array(98,-56,876,831),38421=>array(91,-69,871,822),38422=>array(93,-66,870,821),38423=>array(103,-64,872,834),38424=>array(93,-66,870,821),38425=>array(97,-67,875,826),38426=>array(93,-64,868,830),38427=>array(112,-64,888,830),38428=>array(49,-69,942,854),38429=>array(358,-68,720,782),38430=>array(115,-69,926,824),38431=>array(101,-63,942,830),38432=>array(102,-63,960,789),38433=>array(104,-68,935,824),38434=>array(134,-63,964,791),38435=>array(109,-62,949,834),38436=>array(112,-61,969,832),38437=>array(112,-63,970,795),38438=>array(112,-69,959,820),38439=>array(112,-64,955,829),38440=>array(119,-68,959,793),38441=>array(119,-65,939,831),38442=>array(104,-67,964,795),38443=>array(86,-70,959,783),38444=>array(107,-52,959,858),38445=>array(109,-69,952,840),38446=>array(98,-68,935,788),38447=>array(119,-61,954,835),38448=>array(111,-58,960,829),38449=>array(121,-64,952,829),38450=>array(103,-77,953,827),38451=>array(99,-64,875,784),38452=>array(110,-69,883,788),38453=>array(80,-59,951,835),38454=>array(96,-63,946,837),38455=>array(96,-58,950,800),38456=>array(96,-68,963,837),38457=>array(110,-70,960,824),38458=>array(115,-69,965,832),38459=>array(97,-73,949,782),38460=>array(140,-63,964,845),38461=>array(135,-64,953,829),38462=>array(136,-77,975,850),38463=>array(93,-75,927,778),38464=>array(102,-71,946,824),38465=>array(102,-71,954,839),38466=>array(99,-68,948,836),38467=>array(116,-71,955,780),38468=>array(110,-79,945,842),38469=>array(89,-61,945,786),38470=>array(100,-50,924,838),38471=>array(98,-63,932,826),38472=>array(88,-63,930,826),38473=>array(96,-64,921,786),38474=>array(124,-73,942,834),38475=>array(99,-82,936,792),38476=>array(104,-69,941,785),38477=>array(101,-68,955,846),38478=>array(116,-70,966,823),38479=>array(111,-63,927,825),38480=>array(114,-61,945,795),38481=>array(110,-64,929,786),38482=>array(108,-77,956,845),38483=>array(103,-68,955,829),38484=>array(109,-63,960,849),38485=>array(100,-73,950,821),38486=>array(109,-69,972,843),38487=>array(109,-68,918,833),38488=>array(116,-69,958,783),38489=>array(81,-65,958,786),38490=>array(104,-69,962,833),38491=>array(95,-61,964,827),38492=>array(108,-74,958,829),38493=>array(89,-65,951,836),38494=>array(113,-62,959,838),38495=>array(123,-64,953,829),38496=>array(81,-67,951,839),38497=>array(116,-66,966,836),38498=>array(100,-70,959,831),38499=>array(102,-67,950,835),38500=>array(111,-65,956,853),38501=>array(108,-65,909,851),38502=>array(99,-66,952,831),38503=>array(99,-67,922,783),38504=>array(99,-67,929,783),38505=>array(100,-67,944,827),38506=>array(97,-67,939,835),38507=>array(115,-70,953,826),38508=>array(74,-75,963,795),38509=>array(116,-69,953,832),38510=>array(100,-69,954,835),38511=>array(110,-68,965,828),38512=>array(110,-68,964,843),38513=>array(104,-68,909,832),38514=>array(78,-70,935,810),38515=>array(104,-79,950,827),38516=>array(128,-69,974,845),38517=>array(95,-67,970,831),38518=>array(116,-62,917,837),38519=>array(119,-64,896,839),38520=>array(103,-58,951,833),38521=>array(113,-71,948,838),38522=>array(97,-66,958,846),38523=>array(119,-64,939,791),38524=>array(128,-71,967,830),38525=>array(89,-71,934,779),38526=>array(103,-77,967,783),38527=>array(93,-54,958,797),38528=>array(110,-58,956,828),38529=>array(99,-56,954,798),38530=>array(110,-68,964,851),38531=>array(103,-52,969,863),38532=>array(107,-61,972,791),38533=>array(99,-55,902,800),38534=>array(93,-60,959,848),38535=>array(97,-67,961,829),38536=>array(90,-60,964,800),38537=>array(114,-64,959,819),38538=>array(101,-71,950,837),38539=>array(92,-68,927,845),38540=>array(92,-68,943,844),38541=>array(92,-74,932,844),38542=>array(100,-60,958,832),38543=>array(99,-64,942,825),38544=>array(113,-62,952,828),38545=>array(116,-67,957,829),38546=>array(118,-68,963,843),38547=>array(118,-65,957,836),38548=>array(96,-56,932,801),38549=>array(92,-70,941,784),38550=>array(102,-70,928,839),38551=>array(97,-71,956,819),38552=>array(86,-64,957,804),38553=>array(109,-67,960,819),38554=>array(93,-69,954,835),38555=>array(93,-68,950,841),38556=>array(95,-65,941,830),38557=>array(93,-74,916,843),38558=>array(109,-72,983,832),38559=>array(83,-73,970,842),38560=>array(113,-62,965,838),38561=>array(113,-78,965,831),38562=>array(111,-65,973,823),38563=>array(100,-70,957,833),38564=>array(110,-66,960,836),38565=>array(110,-64,963,837),38566=>array(96,-68,937,845),38567=>array(85,-68,963,809),38568=>array(106,-68,967,838),38569=>array(98,-74,970,839),38570=>array(106,-66,962,855),38571=>array(106,-73,954,832),38572=>array(111,-68,947,781),38573=>array(106,-62,953,794),38574=>array(92,-57,952,864),38575=>array(101,-65,938,833),38576=>array(100,-75,934,786),38577=>array(112,-59,953,832),38578=>array(93,-69,920,826),38579=>array(38,-69,984,839),38580=>array(77,-66,936,830),38581=>array(85,-68,955,835),38582=>array(65,-57,958,833),38583=>array(47,-71,963,830),38584=>array(47,-71,963,828),38585=>array(31,-69,954,845),38586=>array(36,-69,937,847),38587=>array(32,-76,968,844),38588=>array(53,-69,947,840),38589=>array(34,-65,897,837),38590=>array(40,-61,932,824),38591=>array(53,-70,953,826),38592=>array(46,-73,948,833),38593=>array(39,-66,939,803),38594=>array(38,-68,951,831),38595=>array(49,-68,953,830),38596=>array(36,-68,953,827),38597=>array(48,-59,953,837),38598=>array(55,-67,962,831),38599=>array(31,-75,924,818),38600=>array(36,-67,952,834),38601=>array(55,-63,957,836),38602=>array(40,-67,956,842),38603=>array(40,-61,932,843),38604=>array(34,-71,956,833),38605=>array(49,-72,948,824),38606=>array(42,-59,956,837),38607=>array(40,-49,916,830),38608=>array(40,-78,928,833),38609=>array(39,-63,953,833),38610=>array(30,-70,949,841),38611=>array(28,-65,954,839),38612=>array(38,-70,955,827),38613=>array(31,-71,952,836),38614=>array(59,-65,954,828),38615=>array(53,-63,950,839),38616=>array(36,-71,975,826),38617=>array(42,-70,958,843),38618=>array(37,-62,946,833),38619=>array(43,-68,954,847),38620=>array(45,-61,955,833),38621=>array(53,-65,954,839),38622=>array(38,-68,956,842),38623=>array(46,-65,939,839),38624=>array(14,-59,925,822),38625=>array(44,-71,952,824),38626=>array(64,-73,957,834),38627=>array(43,-70,950,834),38628=>array(53,-82,914,809),38629=>array(32,-67,970,839),38630=>array(14,-59,965,822),38631=>array(20,-41,956,837),38632=>array(82,-65,943,778),38633=>array(60,-60,955,790),38634=>array(96,-69,888,800),38635=>array(75,-58,929,797),38636=>array(41,-63,948,784),38637=>array(69,-48,965,802),38638=>array(54,-34,964,796),38639=>array(59,-63,963,790),38640=>array(46,-62,971,822),38641=>array(46,-62,941,798),38642=>array(76,-71,930,805),38643=>array(30,-68,916,772),38644=>array(48,-16,941,781),38645=>array(45,-76,982,785),38646=>array(43,-63,961,810),38647=>array(105,-67,914,786),38648=>array(73,-67,938,785),38649=>array(41,-37,956,790),38650=>array(47,-64,926,787),38651=>array(85,-32,945,802),38652=>array(60,-67,936,781),38653=>array(66,-64,941,783),38654=>array(41,-68,941,782),38655=>array(55,-68,975,785),38656=>array(79,-70,930,787),38657=>array(32,-70,948,777),38658=>array(45,-62,981,792),38659=>array(68,-72,935,796),38660=>array(74,-52,916,800),38661=>array(78,-68,953,782),38662=>array(29,-72,947,811),38663=>array(35,-71,965,808),38664=>array(47,-64,951,791),38665=>array(70,-65,947,790),38666=>array(75,-28,930,778),38667=>array(73,-79,947,789),38668=>array(39,-59,899,787),38669=>array(56,-67,935,790),38670=>array(77,-67,943,790),38671=>array(61,-64,924,787),38672=>array(57,-67,974,787),38673=>array(67,-62,942,798),38674=>array(56,-67,970,827),38675=>array(39,-67,956,789),38676=>array(67,-54,939,798),38677=>array(55,-35,962,829),38678=>array(40,-67,968,789),38679=>array(81,-82,965,798),38680=>array(54,-67,913,788),38681=>array(34,-72,986,792),38682=>array(113,-53,949,791),38683=>array(68,-70,938,791),38684=>array(65,-68,909,785),38685=>array(96,-74,911,783),38686=>array(92,-59,967,813),38687=>array(46,-71,956,783),38688=>array(64,-72,968,783),38689=>array(43,-73,981,789),38690=>array(43,-72,969,824),38691=>array(58,-75,952,799),38692=>array(89,-55,902,802),38693=>array(54,-59,965,799),38694=>array(48,-67,967,787),38695=>array(51,-71,962,823),38696=>array(52,-60,939,800),38697=>array(90,-69,927,787),38698=>array(41,-64,924,797),38699=>array(82,-69,919,785),38700=>array(59,-69,941,783),38701=>array(52,-66,891,778),38702=>array(58,-49,955,780),38703=>array(51,-31,979,779),38704=>array(56,-65,964,796),38705=>array(60,-66,927,832),38706=>array(70,-62,965,817),38707=>array(88,-56,938,787),38708=>array(53,-16,975,829),38709=>array(63,-68,957,785),38710=>array(53,-53,959,785),38711=>array(83,-67,936,783),38712=>array(68,-70,900,815),38713=>array(31,-72,946,792),38714=>array(44,-63,964,819),38715=>array(57,-54,951,807),38716=>array(55,-64,971,846),38717=>array(60,-69,962,801),38718=>array(54,-56,949,794),38719=>array(43,-62,992,823),38720=>array(77,-70,948,808),38721=>array(94,-73,928,800),38722=>array(48,-73,941,790),38723=>array(33,-65,967,787),38724=>array(72,-64,928,799),38725=>array(48,-47,970,836),38726=>array(53,-56,949,829),38727=>array(65,-67,961,786),38728=>array(74,-28,929,779),38729=>array(55,-66,978,836),38730=>array(79,-51,934,795),38731=>array(61,-68,957,792),38732=>array(70,-79,939,825),38733=>array(42,-60,971,763),38734=>array(95,-58,971,763),38735=>array(43,-60,971,823),38736=>array(24,-50,981,809),38737=>array(104,-65,915,837),38738=>array(104,-65,915,837),38739=>array(51,-67,927,821),38740=>array(51,-67,938,852),38741=>array(38,-66,948,836),38742=>array(41,-66,952,840),38743=>array(55,-72,959,831),38744=>array(68,-63,968,841),38745=>array(70,-58,938,835),38746=>array(55,-74,976,832),38747=>array(53,-65,968,845),38748=>array(55,-72,950,829),38749=>array(48,-63,968,848),38750=>array(49,-65,944,826),38751=>array(49,-44,959,820),38752=>array(44,-73,925,838),38753=>array(36,-73,970,837),38754=>array(69,-77,924,784),38755=>array(69,-77,924,784),38756=>array(49,-26,963,849),38757=>array(31,-68,955,800),38758=>array(48,-57,957,797),38759=>array(33,-68,990,833),38760=>array(59,-69,949,807),38761=>array(73,-69,927,829),38762=>array(60,-69,951,825),38763=>array(57,-65,960,830),38764=>array(57,-69,953,831),38765=>array(54,-70,915,830),38766=>array(71,-50,919,851),38767=>array(51,-50,949,840),38768=>array(62,-68,969,828),38769=>array(62,-72,971,828),38770=>array(60,-68,968,833),38771=>array(60,-69,952,832),38772=>array(44,-67,969,824),38773=>array(60,-66,951,832),38774=>array(60,-65,956,835),38775=>array(63,-53,896,843),38776=>array(62,-74,971,837),38777=>array(48,-71,928,838),38778=>array(62,-64,986,830),38779=>array(65,-72,966,822),38780=>array(53,-64,955,829),38781=>array(63,-50,956,844),38782=>array(53,-70,947,824),38783=>array(65,-53,924,847),38784=>array(66,-71,917,831),38785=>array(69,-72,967,831),38786=>array(53,-71,967,823),38787=>array(61,-70,963,824),38788=>array(55,-67,961,824),38789=>array(42,-67,961,835),38790=>array(43,-70,957,823),38791=>array(53,-70,925,823),38792=>array(66,-73,978,843),38793=>array(66,-72,960,827),38794=>array(60,-69,953,829),38795=>array(53,-64,950,836),38796=>array(82,-58,966,830),38797=>array(59,-65,951,836),38798=>array(60,-71,970,830),38799=>array(53,-72,944,805),38800=>array(66,-68,940,834),38801=>array(51,-68,937,820),38802=>array(51,-66,949,826),38803=>array(51,-68,956,820),38804=>array(61,-70,969,838),38805=>array(49,-68,971,836),38806=>array(59,-74,959,836),38807=>array(39,-67,968,839),38808=>array(52,-70,943,835),38809=>array(62,-52,916,842),38810=>array(55,-50,955,859),38811=>array(73,-67,954,848),38812=>array(63,-68,961,829),38813=>array(64,-70,936,825),38814=>array(63,-73,959,830),38815=>array(73,-64,960,847),38816=>array(63,-65,919,847),38817=>array(62,-62,953,836),38818=>array(51,-68,976,828),38819=>array(45,-65,965,837),38820=>array(60,-67,954,836),38821=>array(56,-69,977,840),38822=>array(56,-66,968,841),38823=>array(56,-65,947,843),38824=>array(68,-69,922,827),38825=>array(46,-66,914,837),38826=>array(43,-68,952,841),38827=>array(66,-68,918,843),38828=>array(55,-72,967,829),38829=>array(47,-70,962,832),38830=>array(63,-68,975,826),38831=>array(53,-72,913,817),38832=>array(63,-69,951,817),38833=>array(53,-69,926,848),38834=>array(47,-79,952,821),38835=>array(51,-50,968,847),38836=>array(52,-70,948,820),38837=>array(47,-79,995,841),38838=>array(55,-48,943,855),38839=>array(54,-79,946,821),38840=>array(46,-69,952,825),38841=>array(51,-55,948,854),38842=>array(55,-70,956,824),38843=>array(65,-67,961,824),38844=>array(65,-68,970,833),38845=>array(65,-67,964,841),38846=>array(47,-67,948,836),38847=>array(54,-68,960,834),38848=>array(69,-65,961,831),38849=>array(62,-68,956,829),38850=>array(39,-65,950,842),38851=>array(55,-73,949,835),38852=>array(60,-73,967,823),38853=>array(53,-71,960,828),38854=>array(51,-76,968,834),38855=>array(66,-73,960,832),38856=>array(65,-64,981,839),38857=>array(68,-65,961,829),38858=>array(68,-58,946,808),38859=>array(72,-64,931,840),38860=>array(73,-62,901,844),38861=>array(59,-70,981,843),38862=>array(54,-71,981,841),38863=>array(39,-68,968,852),38864=>array(58,-69,985,847),38865=>array(23,-68,968,825),38866=>array(51,-70,943,834),38867=>array(54,-66,946,837),38868=>array(53,-75,973,836),38869=>array(68,-68,954,841),38870=>array(66,-67,977,840),38871=>array(59,-69,954,846),38872=>array(53,-67,976,840),38873=>array(39,-73,975,837),38874=>array(60,-66,949,834),38875=>array(68,-76,988,834),38876=>array(62,-70,951,842),38877=>array(57,-73,956,832),38878=>array(57,-70,959,839),38879=>array(53,-67,972,845),38880=>array(46,-73,952,831),38881=>array(62,-73,958,830),38882=>array(54,-73,966,830),38883=>array(65,-65,927,840),38884=>array(65,-65,981,840),38885=>array(62,-73,957,842),38886=>array(62,-73,894,820),38887=>array(61,-64,901,826),38888=>array(49,-80,948,840),38889=>array(47,-57,915,830),38890=>array(28,-66,945,809),38891=>array(50,-68,951,822),38892=>array(59,-76,901,817),38893=>array(65,-13,935,816),38894=>array(53,-24,947,823),38895=>array(49,-60,964,829),38896=>array(51,-35,956,820),38897=>array(49,-60,964,836),38898=>array(35,-29,966,826),38899=>array(72,-68,928,840),38900=>array(68,-74,932,842),38901=>array(66,-59,916,828),38902=>array(72,-64,914,818),38903=>array(56,-64,921,834),38904=>array(62,-72,972,834),38905=>array(65,-49,959,846),38906=>array(51,-72,973,835),38907=>array(66,-73,957,840),38908=>array(44,-56,951,841),38909=>array(50,-70,952,849),38910=>array(35,-70,941,825),38911=>array(63,-67,937,845),38912=>array(58,-74,976,824),38913=>array(79,-70,938,785),38914=>array(76,-68,950,791),38915=>array(126,-69,939,787),38916=>array(40,-79,961,826),38917=>array(48,-68,947,784),38918=>array(62,-76,960,801),38919=>array(54,-71,962,790),38920=>array(51,-71,946,817),38921=>array(40,-71,946,783),38922=>array(55,-71,961,788),38923=>array(29,-72,957,790),38924=>array(47,-64,964,790),38925=>array(45,-78,965,824),38926=>array(35,-68,970,833),38927=>array(49,-64,963,798),38928=>array(53,-70,959,781),38929=>array(42,-77,953,788),38930=>array(47,-66,957,822),38931=>array(53,-68,952,834),38932=>array(124,-68,952,788),38933=>array(128,-68,952,829),38934=>array(40,-60,966,844),38935=>array(32,-70,970,832),38936=>array(42,-68,955,839),38937=>array(38,-71,957,783),38938=>array(48,-64,966,792),38939=>array(42,-73,972,823),38940=>array(35,-70,962,831),38941=>array(53,-75,957,833),38942=>array(59,-53,968,856),38943=>array(37,-64,943,819),38944=>array(32,-68,967,836),38945=>array(62,-68,966,809),38946=>array(39,-68,956,801),38947=>array(95,-70,947,787),38948=>array(91,-70,963,787),38949=>array(96,-66,962,795),38950=>array(44,-65,961,844),38951=>array(107,-76,968,828),38952=>array(29,-79,971,782),38953=>array(44,-73,963,832),38954=>array(38,-68,961,832),38955=>array(36,-69,957,823),38956=>array(24,-61,959,830),38957=>array(52,-61,959,787),38958=>array(32,-78,975,802),38959=>array(32,-78,975,829),38960=>array(47,-71,967,840),38961=>array(48,-78,965,819),38962=>array(44,-79,964,793),38963=>array(36,-77,970,823),38964=>array(18,-82,959,826),38965=>array(25,-77,970,783),38966=>array(30,-61,959,814),38967=>array(38,-69,972,838),38968=>array(48,-72,959,789),38969=>array(35,-72,973,834),38970=>array(49,-65,965,824),38971=>array(45,-71,960,833),38972=>array(44,-72,973,829),38973=>array(35,-73,954,834),38974=>array(37,-68,948,826),38975=>array(33,-76,955,849),38976=>array(32,-73,951,836),38977=>array(38,-83,963,833),38978=>array(29,-73,964,833),38979=>array(52,-74,959,826),38980=>array(77,-71,962,788),38981=>array(42,-74,956,833),38982=>array(43,-68,964,788),38983=>array(34,-68,963,833),38984=>array(38,-82,959,826),38985=>array(44,-79,965,829),38986=>array(60,-78,953,840),38987=>array(35,-68,963,790),38988=>array(39,-60,956,787),38989=>array(41,-64,951,825),38990=>array(57,-63,959,794),38991=>array(57,-75,958,808),38992=>array(62,-81,971,783),38993=>array(38,-67,975,839),38994=>array(50,-73,964,788),38995=>array(53,-68,963,827),38996=>array(33,-65,961,830),38997=>array(45,-70,956,783),38998=>array(21,-77,967,831),38999=>array(47,-75,968,827),39000=>array(38,-57,962,796),39001=>array(45,-67,979,787),39002=>array(57,-78,964,834),39003=>array(43,-73,960,835),39004=>array(56,-72,970,829),39005=>array(69,-74,951,786),39006=>array(38,-67,960,828),39007=>array(40,-80,955,788),39008=>array(31,-73,960,784),39009=>array(39,-72,959,846),39010=>array(62,-65,973,830),39011=>array(33,-60,963,844),39012=>array(47,-48,963,850),39013=>array(46,-66,966,790),39014=>array(26,-48,963,840),39015=>array(41,-68,959,820),39016=>array(49,-70,959,808),39017=>array(36,-74,964,834),39018=>array(47,-68,978,831),39019=>array(56,-65,967,837),39020=>array(61,-67,952,788),39021=>array(47,-67,952,822),39022=>array(44,-64,965,844),39023=>array(43,-73,964,787),39024=>array(51,-64,958,843),39025=>array(28,-72,959,840),39026=>array(47,-66,964,847),39027=>array(35,-68,959,800),39028=>array(25,-62,961,844),39029=>array(78,-80,908,775),39030=>array(47,-60,930,783),39031=>array(88,-60,934,794),39032=>array(50,-66,937,774),39033=>array(37,-64,937,778),39034=>array(25,-61,940,822),39035=>array(30,-62,937,807),39036=>array(32,-68,933,772),39037=>array(31,-70,936,787),39038=>array(36,-61,953,787),39039=>array(59,-64,955,832),39040=>array(27,-68,935,814),39041=>array(35,-65,930,783),39042=>array(36,-65,936,783),39043=>array(27,-76,921,822),39044=>array(50,-65,936,779),39045=>array(36,-67,940,832),39046=>array(36,-60,940,830),39047=>array(18,-77,940,822),39048=>array(35,-59,943,783),39049=>array(55,-76,918,812),39050=>array(24,-61,933,830),39051=>array(33,-76,964,799),39052=>array(19,-69,915,830),39053=>array(21,-63,921,806),39054=>array(26,-70,942,827),39055=>array(32,-69,931,826),39056=>array(104,-70,929,778),39057=>array(51,-67,957,824),39058=>array(32,-71,950,802),39059=>array(47,-69,952,814),39060=>array(23,-76,933,822),39061=>array(18,-71,950,826),39062=>array(27,-70,942,827),39063=>array(22,-63,934,790),39064=>array(32,-63,941,788),39065=>array(117,-67,962,788),39066=>array(50,-73,937,778),39067=>array(52,-71,935,812),39068=>array(30,-68,940,832),39069=>array(31,-63,941,838),39070=>array(31,-70,921,784),39071=>array(50,-65,940,820),39072=>array(31,-70,940,827),39073=>array(29,-80,938,778),39074=>array(28,-72,937,782),39075=>array(32,-72,947,800),39076=>array(34,-81,964,861),39077=>array(61,-54,941,781),39078=>array(49,-62,927,832),39079=>array(22,-73,939,821),39080=>array(51,-68,967,783),39081=>array(43,-73,972,824),39082=>array(30,-73,965,797),39083=>array(24,-68,967,792),39084=>array(34,-68,954,787),39085=>array(32,-57,964,844),39086=>array(53,-63,967,850),39087=>array(32,-65,968,789),39088=>array(22,-57,955,825),39089=>array(37,-65,970,814),39090=>array(38,-71,967,820),39091=>array(41,-58,958,830),39092=>array(18,-57,944,822),39093=>array(41,-58,958,800),39094=>array(39,-62,959,800),39095=>array(33,-68,960,842),39096=>array(53,-64,963,809),39097=>array(17,-62,963,840),39098=>array(26,-61,967,791),39099=>array(42,-67,972,839),39100=>array(35,-65,970,829),39101=>array(44,-70,978,833),39102=>array(39,-75,970,781),39103=>array(40,-54,964,796),39104=>array(43,-73,961,833),39105=>array(36,-67,982,786),39106=>array(43,-60,970,798),39107=>array(26,-61,967,791),39108=>array(42,-74,970,784),39109=>array(43,-59,956,799),39110=>array(43,-68,980,832),39111=>array(43,-73,961,832),39112=>array(35,-64,966,820),39113=>array(31,-70,965,829),39114=>array(23,-62,974,791),39115=>array(31,-73,973,781),39116=>array(41,-65,974,829),39117=>array(26,-73,988,802),39118=>array(26,-63,942,790),39119=>array(20,-62,939,785),39120=>array(20,-62,939,804),39121=>array(16,-64,934,822),39122=>array(29,-67,936,812),39123=>array(8,-66,927,783),39124=>array(8,-65,939,783),39125=>array(20,-62,939,816),39126=>array(50,-58,972,819),39127=>array(20,-62,939,821),39128=>array(31,-60,963,789),39129=>array(43,-77,960,821),39130=>array(20,-70,931,817),39131=>array(64,-64,963,787),39132=>array(34,-69,967,824),39133=>array(55,-59,937,808),39134=>array(76,-59,936,770),39135=>array(43,-67,957,847),39136=>array(257,-34,731,839),39137=>array(48,-63,958,848),39138=>array(33,-54,962,839),39139=>array(41,-56,967,839),39140=>array(41,-73,936,839),39141=>array(28,-39,965,853),39142=>array(41,-50,966,839),39143=>array(42,-63,978,848),39144=>array(34,-76,939,822),39145=>array(40,-66,957,843),39146=>array(42,-31,949,838),39147=>array(40,-66,969,843),39148=>array(49,-81,957,840),39149=>array(42,-66,943,843),39150=>array(46,-68,957,844),39151=>array(34,-69,964,839),39152=>array(34,-64,951,843),39153=>array(40,-63,958,848),39154=>array(34,-64,969,839),39155=>array(46,-46,964,851),39156=>array(34,-55,956,842),39157=>array(34,-65,948,844),39158=>array(38,-56,960,842),39159=>array(34,-34,964,839),39160=>array(52,-63,958,848),39161=>array(40,-69,903,843),39162=>array(39,-84,979,824),39163=>array(36,-66,971,850),39164=>array(34,-68,906,839),39165=>array(36,-47,965,839),39166=>array(34,-70,944,839),39167=>array(39,-68,922,839),39168=>array(36,-74,985,839),39169=>array(36,-64,965,857),39170=>array(36,-52,954,857),39171=>array(40,-66,961,843),39172=>array(36,-65,948,857),39173=>array(34,-77,961,842),39174=>array(36,-70,960,857),39175=>array(31,-70,907,844),39176=>array(41,-54,964,852),39177=>array(40,-66,921,843),39178=>array(39,-70,964,843),39179=>array(39,-72,976,840),39180=>array(44,-69,958,841),39181=>array(46,-84,950,766),39182=>array(37,-64,982,844),39183=>array(38,-71,966,842),39184=>array(26,-64,974,840),39185=>array(43,-64,948,840),39186=>array(40,-66,959,843),39187=>array(34,-59,964,839),39188=>array(40,-66,944,843),39189=>array(36,-61,984,848),39190=>array(48,-44,953,846),39191=>array(42,-54,960,850),39192=>array(40,-66,971,843),39193=>array(36,-67,961,857),39194=>array(27,-64,956,855),39195=>array(32,-53,964,848),39196=>array(35,-64,980,828),39197=>array(40,-66,947,843),39198=>array(40,-67,959,843),39199=>array(34,-63,981,848),39200=>array(40,-66,957,843),39201=>array(40,-68,912,843),39202=>array(36,-65,956,857),39203=>array(24,-39,977,857),39204=>array(40,-66,961,843),39205=>array(47,-77,982,829),39206=>array(36,-62,978,857),39207=>array(32,-64,968,850),39208=>array(34,-64,931,839),39209=>array(37,-71,972,839),39210=>array(41,-73,990,834),39211=>array(36,-69,956,836),39212=>array(33,-78,918,838),39213=>array(38,-47,958,824),39214=>array(34,-75,943,832),39215=>array(40,-67,989,834),39216=>array(40,-71,959,834),39217=>array(33,-49,964,859),39218=>array(28,-60,915,848),39219=>array(48,-59,959,830),39220=>array(36,-68,963,857),39221=>array(25,-65,978,845),39222=>array(34,-34,947,853),39223=>array(36,-30,969,857),39224=>array(32,-48,975,845),39225=>array(36,-64,954,857),39226=>array(36,-65,951,832),39227=>array(36,-66,960,854),39228=>array(34,-64,971,846),39229=>array(40,-66,960,843),39230=>array(39,-69,932,843),39231=>array(41,-65,971,840),39232=>array(29,-63,950,835),39233=>array(18,-15,966,846),39234=>array(40,-66,959,843),39235=>array(34,-69,972,844),39236=>array(36,-30,964,857),39237=>array(40,-66,957,843),39238=>array(38,-68,950,834),39239=>array(36,-41,956,816),39240=>array(38,-55,955,847),39241=>array(40,-66,948,843),39242=>array(36,-84,957,859),39243=>array(40,-75,954,843),39244=>array(38,-66,959,843),39245=>array(24,-65,962,846),39246=>array(20,-68,956,843),39247=>array(29,-76,982,835),39248=>array(40,-66,953,843),39249=>array(28,-70,968,841),39250=>array(40,-68,962,843),39251=>array(26,-69,983,835),39252=>array(10,-74,957,849),39253=>array(17,-72,972,832),39254=>array(30,-64,967,828),39255=>array(35,-69,955,841),39256=>array(30,-33,960,849),39257=>array(32,-74,970,837),39258=>array(45,-30,929,857),39259=>array(38,-68,971,834),39260=>array(29,-71,982,816),39261=>array(29,-67,950,851),39262=>array(36,-70,960,839),39263=>array(30,-63,982,849),39264=>array(42,-65,956,837),39265=>array(41,-74,964,839),39266=>array(31,-64,983,839),39267=>array(242,2,685,829),39268=>array(31,-43,953,840),39269=>array(32,-60,948,840),39270=>array(31,-26,943,840),39271=>array(30,-66,891,826),39272=>array(25,-38,920,829),39273=>array(20,-67,939,825),39274=>array(40,-13,927,829),39275=>array(41,-69,957,829),39276=>array(41,-70,926,836),39277=>array(48,-71,953,829),39278=>array(47,-68,949,836),39279=>array(43,-58,953,836),39280=>array(42,-73,946,842),39281=>array(37,-28,946,835),39282=>array(41,-68,895,836),39283=>array(45,-68,911,830),39284=>array(41,-57,940,839),39285=>array(33,-67,927,829),39286=>array(36,-73,964,821),39287=>array(41,-66,912,841),39288=>array(49,-60,956,844),39289=>array(32,-65,975,837),39290=>array(42,-65,950,835),39291=>array(41,-71,966,836),39292=>array(39,-72,946,841),39293=>array(41,-65,931,831),39294=>array(41,-36,953,829),39295=>array(44,-61,946,829),39296=>array(41,-65,959,840),39297=>array(41,-79,946,831),39298=>array(36,-61,972,848),39299=>array(32,-68,964,825),39300=>array(40,-60,955,825),39301=>array(42,-70,881,838),39302=>array(47,-67,913,844),39303=>array(26,-16,947,821),39304=>array(37,-64,949,828),39305=>array(38,-71,943,829),39306=>array(41,-68,954,829),39307=>array(34,-68,960,827),39308=>array(48,-53,947,833),39309=>array(35,-71,935,817),39310=>array(43,-65,962,835),39311=>array(44,-67,916,838),39312=>array(27,-67,937,836),39313=>array(31,-43,938,813),39314=>array(27,-65,951,829),39315=>array(26,-90,955,822),39316=>array(29,-64,942,828),39317=>array(30,-81,948,821),39318=>array(95,-67,926,843),39319=>array(34,-64,959,831),39320=>array(55,-65,964,834),39321=>array(40,-65,955,817),39322=>array(40,-62,973,823),39323=>array(40,-74,966,841),39324=>array(40,-71,971,821),39325=>array(33,-77,965,828),39326=>array(44,-68,963,830),39327=>array(59,-68,958,827),39328=>array(70,-70,971,832),39329=>array(52,-69,956,824),39330=>array(34,-68,956,832),39331=>array(37,-62,975,833),39332=>array(48,-62,940,839),39333=>array(18,-62,974,838),39334=>array(33,-68,988,835),39335=>array(33,-61,983,839),39336=>array(28,-69,972,844),39337=>array(28,-67,956,839),39338=>array(33,-78,974,844),39339=>array(45,-70,975,816),39340=>array(56,-65,909,776),39341=>array(35,-68,964,790),39342=>array(52,-64,912,784),39343=>array(45,-73,950,781),39344=>array(56,-62,920,829),39345=>array(49,-63,964,833),39346=>array(36,-63,949,809),39347=>array(47,-62,951,836),39348=>array(53,-57,893,829),39349=>array(53,-69,947,782),39350=>array(30,-67,965,835),39351=>array(45,-62,954,840),39352=>array(45,-53,930,812),39353=>array(45,-52,891,803),39354=>array(32,-74,981,780),39355=>array(35,-71,978,825),39356=>array(40,-65,964,793),39357=>array(46,-68,909,783),39358=>array(25,-66,969,831),39359=>array(38,-57,931,827),39360=>array(45,-55,970,831),39361=>array(47,-66,967,826),39362=>array(55,-74,924,812),39363=>array(53,-69,982,826),39364=>array(45,-69,961,833),39365=>array(45,-66,973,797),39366=>array(27,-52,948,799),39367=>array(47,-76,988,832),39368=>array(28,-48,954,814),39369=>array(39,-66,905,785),39370=>array(45,-63,1002,841),39371=>array(45,-71,921,785),39372=>array(47,-68,965,833),39373=>array(42,-70,954,783),39374=>array(38,-68,906,823),39375=>array(40,-69,954,782),39376=>array(49,-57,956,829),39377=>array(48,-68,937,847),39378=>array(36,-62,919,845),39379=>array(39,-63,971,783),39380=>array(43,-63,957,790),39381=>array(56,-65,897,836),39382=>array(43,-73,981,842),39383=>array(47,-74,987,833),39384=>array(45,-60,964,839),39385=>array(28,-64,962,837),39386=>array(34,-66,972,827),39387=>array(37,-62,961,833),39388=>array(46,-66,974,830),39389=>array(55,-61,943,795),39390=>array(28,-55,962,829),39391=>array(43,-58,916,788),39392=>array(35,-71,938,823),39393=>array(39,-66,911,789),39394=>array(27,-73,962,835),39395=>array(42,-70,966,826),39396=>array(37,-72,959,780),39397=>array(39,-71,969,832),39398=>array(49,-62,957,830),39399=>array(46,-68,918,786),39400=>array(45,-60,944,836),39401=>array(35,-66,975,787),39402=>array(34,-71,964,826),39403=>array(45,-66,990,831),39404=>array(35,-71,957,786),39405=>array(46,-60,949,804),39406=>array(40,-60,961,820),39407=>array(45,-65,966,836),39408=>array(54,-67,924,785),39409=>array(64,-62,972,839),39410=>array(45,-65,927,835),39411=>array(33,-66,968,834),39412=>array(46,-66,975,824),39413=>array(30,-57,965,799),39414=>array(43,-65,927,783),39415=>array(37,-66,985,828),39416=>array(35,-61,946,788),39417=>array(31,-67,967,825),39418=>array(43,-73,980,838),39419=>array(46,-59,959,792),39420=>array(29,-77,974,834),39421=>array(53,-65,927,788),39422=>array(44,-67,966,814),39423=>array(44,-69,967,849),39424=>array(42,-63,951,831),39425=>array(42,-63,949,836),39426=>array(52,-59,954,853),39427=>array(42,-58,973,861),39428=>array(39,-65,974,829),39429=>array(48,-66,957,836),39430=>array(53,-74,927,782),39431=>array(37,-65,991,832),39432=>array(42,-64,953,843),39433=>array(32,-63,979,786),39434=>array(64,-63,924,832),39435=>array(33,-65,981,829),39436=>array(42,-65,958,845),39437=>array(45,-65,982,790),39438=>array(44,-62,956,834),39439=>array(33,-71,970,831),39440=>array(42,-63,956,845),39441=>array(39,-58,952,844),39442=>array(49,-64,963,791),39443=>array(48,-63,973,837),39444=>array(46,-66,937,787),39445=>array(35,-69,956,785),39446=>array(60,-68,958,845),39447=>array(32,-58,969,833),39448=>array(27,-63,974,850),39449=>array(39,-66,933,807),39450=>array(39,-62,960,835),39451=>array(29,-73,968,780),39452=>array(41,-65,970,843),39453=>array(25,-68,977,828),39454=>array(40,-70,967,828),39455=>array(32,-63,937,862),39456=>array(48,-75,988,781),39457=>array(42,-66,957,842),39458=>array(30,-68,980,784),39459=>array(40,-57,960,849),39460=>array(44,-68,978,841),39461=>array(33,-67,984,788),39462=>array(42,-63,968,788),39463=>array(48,-48,917,809),39464=>array(42,-73,945,843),39465=>array(47,-68,979,838),39466=>array(48,-64,973,831),39467=>array(37,-61,976,837),39468=>array(41,-65,984,838),39469=>array(54,-71,939,830),39470=>array(46,-64,924,834),39471=>array(27,-65,939,843),39472=>array(40,-72,967,840),39473=>array(29,-63,972,840),39474=>array(56,-64,965,830),39475=>array(42,-63,944,788),39476=>array(35,-65,955,788),39477=>array(44,-74,967,783),39478=>array(58,-66,923,849),39479=>array(49,-64,970,791),39480=>array(51,-63,941,840),39481=>array(20,-63,966,812),39482=>array(55,-69,959,829),39483=>array(37,-63,968,834),39484=>array(31,-63,965,843),39485=>array(48,-64,922,787),39486=>array(30,-73,961,801),39487=>array(36,-75,959,832),39488=>array(57,-69,968,832),39489=>array(58,-68,956,847),39490=>array(40,-71,984,857),39491=>array(33,-63,949,792),39492=>array(28,-63,973,837),39493=>array(46,-66,951,794),39494=>array(50,-64,958,787),39495=>array(54,-66,946,830),39496=>array(52,-63,937,789),39497=>array(40,-55,955,831),39498=>array(29,-68,962,836),39499=>array(22,-62,989,846),39500=>array(31,-64,962,837),39501=>array(35,-65,967,837),39502=>array(23,-51,943,844),39503=>array(51,-72,963,789),39504=>array(45,-63,980,835),39505=>array(27,-71,956,797),39506=>array(48,-62,948,791),39507=>array(53,-69,924,831),39508=>array(42,-64,961,789),39509=>array(48,-56,979,833),39510=>array(35,-68,977,837),39511=>array(37,-70,962,846),39512=>array(41,-67,973,843),39513=>array(36,-60,964,852),39514=>array(52,-65,951,846),39515=>array(25,-62,945,788),39516=>array(54,-68,951,825),39517=>array(37,-77,962,844),39518=>array(36,-78,974,844),39519=>array(34,-61,964,791),39520=>array(41,-74,970,824),39521=>array(46,-53,964,839),39522=>array(38,-64,951,836),39523=>array(26,-63,972,845),39524=>array(50,-75,976,833),39525=>array(27,-70,955,834),39526=>array(49,-61,930,789),39527=>array(35,-62,937,832),39528=>array(45,-66,927,826),39529=>array(52,-60,959,829),39530=>array(26,-73,964,789),39531=>array(57,-62,938,803),39532=>array(83,-57,892,790),39533=>array(64,-70,945,789),39534=>array(69,-65,947,831),39535=>array(64,-58,876,826),39536=>array(72,-55,933,834),39537=>array(40,-54,926,786),39538=>array(68,-58,891,803),39539=>array(43,-69,951,844),39540=>array(41,-55,896,845),39541=>array(37,-60,936,784),39542=>array(58,-70,953,831),39543=>array(49,-57,897,778),39544=>array(51,-66,940,835),39545=>array(91,-60,914,844),39546=>array(34,-59,872,822),39547=>array(47,-57,942,842),39548=>array(72,-57,926,839),39549=>array(29,-62,944,826),39550=>array(44,-60,912,831),39551=>array(42,-73,959,772),39552=>array(47,-63,949,840),39553=>array(36,-62,941,824),39554=>array(84,-59,890,787),39555=>array(57,-58,924,785),39556=>array(33,-62,940,836),39557=>array(42,-71,941,823),39558=>array(66,-64,953,836),39559=>array(59,-63,933,848),39560=>array(47,-75,945,847),39561=>array(39,-67,936,820),39562=>array(41,-65,920,768),39563=>array(62,-60,950,834),39564=>array(33,-63,943,835),39565=>array(62,-59,954,853),39566=>array(33,-68,968,786),39567=>array(61,-69,943,833),39568=>array(47,-73,949,829),39569=>array(61,-64,939,828),39570=>array(47,-67,956,788),39571=>array(57,-65,941,834),39572=>array(47,-65,958,845),39573=>array(33,-73,957,833),39574=>array(44,-74,953,833),39575=>array(37,-63,927,833),39576=>array(89,-63,934,829),39577=>array(47,-68,978,841),39578=>array(57,-66,953,789),39579=>array(43,-69,954,828),39580=>array(36,-73,951,831),39581=>array(57,-66,904,826),39582=>array(33,-62,947,840),39583=>array(55,-64,901,834),39584=>array(57,-62,944,789),39585=>array(64,-62,936,787),39586=>array(57,-55,956,836),39587=>array(53,-69,942,782),39588=>array(26,-73,953,779),39589=>array(49,-72,936,834),39590=>array(49,-62,931,790),39591=>array(48,-67,952,834),39592=>array(101,-55,899,806),39593=>array(79,-68,965,822),39594=>array(59,-67,978,787),39595=>array(78,-68,964,822),39596=>array(76,-63,967,791),39597=>array(76,-53,951,801),39598=>array(70,-52,967,825),39599=>array(91,-66,958,844),39600=>array(60,-68,963,783),39601=>array(62,-67,952,845),39602=>array(90,-60,967,849),39603=>array(82,-72,973,829),39604=>array(65,-68,958,824),39605=>array(54,-54,971,839),39606=>array(69,-65,962,826),39607=>array(74,-67,948,833),39608=>array(57,-62,958,824),39609=>array(68,-71,961,838),39610=>array(62,-74,945,829),39611=>array(78,-69,962,829),39612=>array(47,-71,937,838),39613=>array(37,-74,959,835),39614=>array(78,-51,970,810),39615=>array(78,-70,953,835),39616=>array(58,-69,930,844),39617=>array(61,-68,964,786),39618=>array(63,-68,957,848),39619=>array(42,-73,943,783),39620=>array(46,-57,967,839),39621=>array(61,-70,940,807),39622=>array(74,-68,947,835),39623=>array(71,-65,941,840),39624=>array(52,-71,954,843),39625=>array(32,-71,959,841),39626=>array(65,-66,948,831),39627=>array(43,-72,938,825),39628=>array(67,-76,937,818),39629=>array(51,-64,968,837),39630=>array(69,-74,962,789),39631=>array(55,-66,941,841),39632=>array(62,-64,956,829),39633=>array(67,-67,908,783),39634=>array(80,-64,958,833),39635=>array(51,-72,947,837),39636=>array(79,-70,934,829),39637=>array(69,-53,955,862),39638=>array(57,-67,948,849),39639=>array(84,-64,954,836),39640=>array(102,-67,916,828),39641=>array(102,-67,916,833),39642=>array(70,-67,958,848),39643=>array(47,-66,968,849),39644=>array(70,-71,956,847),39645=>array(74,-68,926,848),39646=>array(56,-67,946,840),39647=>array(68,-50,956,847),39648=>array(39,-58,963,837),39649=>array(51,-62,961,832),39650=>array(51,-21,953,832),39651=>array(51,-59,957,832),39652=>array(31,-64,973,846),39653=>array(63,-61,967,839),39654=>array(51,-34,955,834),39655=>array(32,-67,967,839),39656=>array(34,-58,964,839),39657=>array(58,-59,959,782),39658=>array(51,-61,956,853),39659=>array(62,-64,970,844),39660=>array(39,-25,964,829),39661=>array(46,-44,962,853),39662=>array(51,-61,956,853),39663=>array(65,-64,969,839),39664=>array(72,-37,948,823),39665=>array(40,-43,966,830),39666=>array(39,-73,958,832),39667=>array(65,-50,938,849),39668=>array(55,-65,950,833),39669=>array(44,-70,949,837),39670=>array(50,-70,957,832),39671=>array(69,-67,957,835),39672=>array(44,-69,948,837),39673=>array(53,-64,989,841),39674=>array(60,-68,948,832),39675=>array(66,-63,957,836),39676=>array(52,-65,966,845),39677=>array(55,-31,956,840),39678=>array(62,-74,952,834),39679=>array(61,-57,981,856),39680=>array(35,-71,962,857),39681=>array(60,-50,942,857),39682=>array(51,-51,942,857),39683=>array(74,-59,955,834),39684=>array(59,-64,965,843),39685=>array(44,-68,962,828),39686=>array(41,-70,964,846),39687=>array(47,-50,964,853),39688=>array(29,-32,968,842),39689=>array(60,-66,956,831),39690=>array(52,-72,973,834),39691=>array(58,-64,954,849),39692=>array(40,-67,967,835),39693=>array(68,-68,949,846),39694=>array(49,-53,943,851),39695=>array(35,-69,942,825),39696=>array(65,-63,955,847),39697=>array(39,-50,965,853),39698=>array(40,-59,954,853),39699=>array(59,-83,903,824),39700=>array(53,-72,979,836),39701=>array(57,-77,971,856),39702=>array(50,-56,969,851),39703=>array(62,-70,968,838),39704=>array(46,-65,980,851),39705=>array(72,-55,961,851),39706=>array(48,-68,957,841),39707=>array(53,-66,955,829),39708=>array(38,-61,938,823),39709=>array(38,-61,938,823),39710=>array(38,-63,966,846),39711=>array(24,-68,949,839),39712=>array(50,-80,966,852),39713=>array(40,-45,932,855),39714=>array(58,-69,959,837),39715=>array(41,-62,944,839),39716=>array(52,-71,958,845),39717=>array(116,-71,891,826),39718=>array(116,-71,891,826),39719=>array(116,-61,893,835),39720=>array(118,-63,894,830),39721=>array(115,-65,898,832),39722=>array(102,-57,897,839),39723=>array(105,-55,901,840),39724=>array(107,-61,907,833),39725=>array(99,-71,901,823),39726=>array(110,-65,917,832),39727=>array(122,-24,909,826),39728=>array(53,-79,953,840),39729=>array(53,-58,952,845),39730=>array(72,-64,945,791),39731=>array(41,-68,927,826),39732=>array(60,-70,948,833),39733=>array(51,-64,955,783),39734=>array(54,-40,969,838),39735=>array(60,-67,977,826),39736=>array(40,-64,923,834),39737=>array(54,-50,939,813),39738=>array(55,-69,952,830),39739=>array(72,-64,927,830),39740=>array(45,-58,962,850),39741=>array(49,-62,973,836),39742=>array(49,-75,973,836),39743=>array(53,-66,968,843),39744=>array(37,-65,962,843),39745=>array(26,-76,959,848),39746=>array(46,-62,960,857),39747=>array(40,-35,941,840),39748=>array(74,-38,952,854),39749=>array(35,-66,962,839),39750=>array(39,-77,977,845),39751=>array(47,-75,960,770),39752=>array(34,-67,968,844),39753=>array(21,-69,929,823),39754=>array(34,-67,977,841),39755=>array(46,-76,961,842),39756=>array(38,-68,963,843),39757=>array(39,-48,960,841),39758=>array(38,-63,970,847),39759=>array(39,-70,966,836),39760=>array(26,-76,957,849),39761=>array(38,-63,966,841),39762=>array(28,-68,956,846),39763=>array(28,-56,956,849),39764=>array(27,-69,960,840),39765=>array(35,-75,970,834),39766=>array(38,-70,964,836),39767=>array(58,-70,960,851),39768=>array(44,-68,947,797),39769=>array(51,-70,965,831),39770=>array(43,-70,956,849),39771=>array(43,-66,894,841),39772=>array(88,-73,976,841),39773=>array(61,-65,887,841),39774=>array(43,-45,958,841),39775=>array(33,-48,957,842),39776=>array(35,-49,949,844),39777=>array(31,-71,916,839),39778=>array(31,-49,973,839),39779=>array(31,-61,945,839),39780=>array(41,-73,979,832),39781=>array(31,-49,976,839),39782=>array(39,-66,966,832),39783=>array(35,-70,976,835),39784=>array(35,-32,959,846),39785=>array(31,-49,931,839),39786=>array(31,-49,969,839),39787=>array(31,-49,969,839),39788=>array(40,-78,963,834),39789=>array(31,-49,955,839),39790=>array(31,-49,974,839),39791=>array(51,-68,947,837),39792=>array(39,-74,978,834),39793=>array(38,-32,954,835),39794=>array(31,-49,952,839),39795=>array(31,-74,948,839),39796=>array(34,-73,953,837),39797=>array(41,-62,973,837),39798=>array(34,-65,905,834),39799=>array(43,-64,966,841),39800=>array(31,-49,950,839),39801=>array(31,-56,954,839),39802=>array(47,-71,964,836),39803=>array(57,-69,919,833),39804=>array(48,-70,963,830),39805=>array(42,-70,961,831),39806=>array(44,-52,964,819),39807=>array(31,-73,981,842),39808=>array(38,-38,948,852),39809=>array(31,-61,962,839),39810=>array(52,-64,914,832),39811=>array(44,-65,948,843),39812=>array(16,-62,932,839),39813=>array(45,-67,982,831),39814=>array(44,-58,963,850),39815=>array(38,-67,976,837),39816=>array(52,-70,927,830),39817=>array(31,-70,950,839),39818=>array(33,-66,886,843),39819=>array(31,-69,944,839),39820=>array(31,-71,961,840),39821=>array(31,-73,971,839),39822=>array(45,-64,957,838),39823=>array(31,-49,947,839),39824=>array(42,-65,960,839),39825=>array(44,-46,967,844),39826=>array(39,-60,959,851),39827=>array(48,-61,961,845),39828=>array(31,-49,933,839),39829=>array(57,-71,970,838),39830=>array(31,-49,935,839),39831=>array(31,-77,948,839),39832=>array(44,-54,935,836),39833=>array(31,-49,908,839),39834=>array(44,-62,958,839),39835=>array(31,-75,976,834),39836=>array(31,-63,953,839),39837=>array(14,-67,991,836),39838=>array(51,-67,970,839),39839=>array(31,-51,964,839),39840=>array(33,-55,954,849),39841=>array(40,-69,972,833),39842=>array(46,-78,995,829),39843=>array(45,-67,915,839),39844=>array(55,-76,954,826),39845=>array(38,-69,984,840),39846=>array(36,-61,910,842),39847=>array(31,-49,954,839),39848=>array(40,-39,953,844),39849=>array(31,-49,937,853),39850=>array(44,-67,959,839),39851=>array(48,-66,959,843),39852=>array(31,-62,961,843),39853=>array(35,-39,967,847),39854=>array(44,-60,960,843),39855=>array(32,-72,974,834),39856=>array(31,-49,939,839),39857=>array(31,-49,949,839),39858=>array(30,-61,979,839),39859=>array(38,-55,945,835),39860=>array(45,-71,982,839),39861=>array(36,-67,966,834),39862=>array(41,-70,965,841),39863=>array(11,-49,939,839),39864=>array(43,-61,978,845),39865=>array(33,-65,944,836),39866=>array(18,-57,948,836),39867=>array(31,-49,975,839),39868=>array(31,-49,972,839),39869=>array(29,-68,979,832),39870=>array(11,-54,959,839),39871=>array(33,-53,962,845),39872=>array(49,-52,979,840),39873=>array(39,-67,978,840),39874=>array(39,-56,937,839),39875=>array(39,-65,961,839),39876=>array(28,-64,979,842),39877=>array(28,-66,983,842),39878=>array(36,-67,957,839),39879=>array(41,-65,965,845),39880=>array(41,-71,977,840),39881=>array(45,-52,954,833),39882=>array(48,-70,960,836),39883=>array(29,-37,980,841),39884=>array(45,-61,954,833),39885=>array(41,-68,964,842),39886=>array(26,-68,961,841),39887=>array(36,-45,914,853),39888=>array(41,-43,955,841),39889=>array(41,-49,964,841),39890=>array(41,-49,945,841),39891=>array(43,-70,964,842),39892=>array(44,-64,950,846),39893=>array(32,-79,974,839),39894=>array(35,-59,964,843),39895=>array(32,-65,971,854),39896=>array(32,-69,968,840),39897=>array(35,-67,962,842),39898=>array(31,-65,988,838),39899=>array(51,-65,916,839),39900=>array(30,-68,971,841),39901=>array(-15,-70,916,841),39902=>array(39,-74,964,825),39903=>array(29,-57,992,827),39904=>array(32,-65,990,831),39905=>array(46,-62,957,846),39906=>array(38,-48,965,845),39907=>array(38,-64,953,845),39908=>array(42,-63,971,836),39909=>array(32,-39,960,841),39910=>array(29,-62,986,838),39911=>array(49,-64,914,854),39912=>array(44,-62,972,843),39913=>array(33,-68,985,868),39914=>array(43,-67,986,839),39915=>array(32,-62,971,842),39916=>array(35,-72,988,836),39917=>array(37,-44,957,796),39918=>array(42,-65,958,845),39919=>array(46,-67,945,837),39920=>array(44,-33,972,851),39921=>array(42,-74,962,836),39922=>array(53,-73,961,828),39923=>array(34,-62,962,841),39924=>array(33,-62,946,836),39925=>array(65,-81,956,834),39926=>array(42,-63,938,836),39927=>array(43,-68,978,843),39928=>array(39,-67,983,837),39929=>array(42,-45,945,836),39930=>array(42,-64,953,837),39931=>array(43,-63,930,837),39932=>array(42,-57,980,849),39933=>array(52,-65,929,837),39934=>array(42,-69,963,836),39935=>array(47,-62,923,848),39936=>array(44,-64,940,847),39937=>array(49,-64,973,847),39938=>array(37,-59,909,840),39939=>array(49,-57,973,847),39940=>array(43,-40,970,847),39941=>array(49,-61,932,847),39942=>array(39,-61,973,843),39943=>array(43,-64,996,845),39944=>array(37,-67,973,836),39945=>array(39,-45,954,847),39946=>array(54,-53,968,847),39947=>array(24,-36,953,834),39948=>array(33,-70,972,829),39949=>array(31,-67,978,837),39950=>array(35,-73,984,838),39951=>array(49,-65,963,847),39952=>array(38,-61,958,844),39953=>array(49,-45,951,847),39954=>array(35,-64,973,844),39955=>array(38,-44,968,849),39956=>array(44,-66,977,835),39957=>array(37,-63,963,827),39958=>array(51,-64,942,848),39959=>array(44,-70,930,834),39960=>array(49,-26,943,843),39961=>array(24,-60,973,847),39962=>array(49,-21,949,855),39963=>array(44,-39,974,826),39964=>array(30,-64,975,852),39965=>array(39,-68,959,838),39966=>array(24,-60,953,847),39967=>array(49,-65,949,847),39968=>array(49,-66,966,847),39969=>array(43,-65,931,837),39970=>array(49,-63,949,847),39971=>array(34,-62,958,836),39972=>array(33,-65,958,845),39973=>array(38,-72,964,828),39974=>array(69,-56,943,847),39975=>array(34,-67,963,836),39976=>array(56,-61,927,844),39977=>array(37,-62,962,845),39978=>array(29,-26,967,847),39979=>array(43,-64,978,838),39980=>array(37,-66,982,830),39981=>array(42,-65,965,843),39982=>array(44,-39,974,826),39983=>array(34,-65,937,839),39984=>array(53,-66,944,839),39985=>array(41,-74,967,838),39986=>array(47,-69,953,840),39987=>array(51,-74,936,835),39988=>array(32,-68,970,831),39989=>array(41,-76,958,845),39990=>array(24,-65,986,839),39991=>array(29,-62,970,845),39992=>array(39,-21,966,847),39993=>array(35,-21,973,845),39994=>array(33,-73,976,862),39995=>array(35,-65,978,837),39996=>array(40,-64,915,837),39997=>array(32,-53,961,849),39998=>array(37,-62,957,838),39999=>array(36,-74,980,839),40000=>array(59,-71,961,791),40001=>array(34,-66,979,843),40002=>array(42,-65,968,847),40003=>array(44,-63,929,847),40004=>array(38,-63,956,845),40005=>array(41,-73,959,851),40006=>array(38,-64,962,849),40007=>array(38,-59,966,846),40008=>array(35,-56,939,841),40009=>array(41,-72,973,835),40010=>array(41,-67,951,835),40011=>array(31,-71,965,837),40012=>array(24,-63,989,845),40013=>array(28,-68,978,841),40014=>array(30,-69,984,840),40015=>array(49,-63,966,847),40016=>array(37,-70,967,839),40017=>array(34,-59,968,847),40018=>array(35,-62,956,855),40019=>array(38,-62,953,831),40020=>array(32,-64,962,851),40021=>array(30,-68,984,842),40022=>array(29,-68,970,842),40023=>array(31,-68,965,843),40024=>array(40,-59,965,842),40025=>array(27,-70,984,837),40026=>array(27,-65,953,837),40027=>array(49,-68,950,847),40028=>array(26,-67,962,845),40029=>array(29,-60,973,847),40030=>array(39,-68,983,831),40031=>array(53,-68,974,848),40032=>array(25,-61,984,861),40033=>array(32,-62,974,838),40034=>array(41,-65,992,830),40035=>array(32,-35,964,849),40036=>array(58,-40,930,839),40037=>array(38,-71,959,839),40038=>array(36,-56,976,822),40039=>array(36,-28,965,842),40040=>array(34,-48,954,854),40041=>array(29,-70,951,854),40042=>array(34,-64,974,834),40043=>array(25,-68,979,854),40044=>array(24,-70,967,854),40045=>array(39,-62,957,852),40046=>array(29,-56,956,848),40047=>array(39,-64,995,847),40048=>array(29,-63,960,854),40049=>array(38,-67,945,838),40050=>array(22,-59,970,854),40051=>array(38,-65,967,843),40052=>array(36,-69,971,841),40053=>array(27,-55,964,858),40054=>array(40,-73,963,837),40055=>array(39,-29,956,839),40056=>array(36,-60,962,851),40057=>array(48,-67,965,841),40058=>array(35,-68,966,828),40059=>array(59,-73,948,824),40060=>array(78,-15,929,826),40061=>array(22,-73,934,841),40062=>array(31,-29,973,839),40063=>array(29,-65,965,841),40064=>array(22,-46,945,841),40065=>array(44,-53,925,849),40066=>array(39,-75,936,836),40067=>array(22,-32,974,841),40068=>array(22,-71,964,841),40069=>array(30,-68,967,838),40070=>array(24,-72,945,824),40071=>array(22,-74,903,841),40072=>array(22,-72,920,817),40073=>array(22,-69,919,841),40074=>array(22,-61,961,845),40075=>array(24,-62,943,840),40076=>array(22,-66,886,843),40077=>array(22,-30,950,843),40078=>array(74,-13,926,822),40079=>array(22,-73,951,841),40080=>array(39,-67,942,834),40081=>array(39,-29,950,839),40082=>array(24,-64,941,828),40083=>array(29,-55,945,837),40084=>array(24,-69,942,838),40085=>array(28,-70,956,824),40086=>array(22,-61,941,841),40087=>array(33,-65,913,840),40088=>array(22,-63,953,841),40089=>array(22,-55,977,840),40090=>array(12,-76,937,836),40091=>array(39,-69,943,844),40092=>array(27,-61,938,846),40093=>array(54,-37,955,823),40094=>array(25,-42,942,830),40095=>array(21,-68,923,821),40096=>array(25,-69,961,830),40097=>array(0,-59,921,818),40098=>array(16,-49,937,822),40099=>array(19,-20,943,834),40100=>array(39,-23,937,828),40101=>array(24,-68,920,829),40102=>array(23,-64,956,832),40103=>array(33,-63,962,831),40104=>array(60,-48,918,822),40105=>array(25,-67,947,842),40106=>array(22,-69,965,841),40107=>array(31,-67,912,836),40108=>array(22,-44,930,841),40109=>array(24,-61,947,834),40110=>array(25,-69,969,834),40111=>array(22,-79,974,841),40112=>array(19,-64,955,825),40113=>array(32,-64,941,830),40114=>array(24,-60,953,824),40115=>array(39,-66,897,828),40116=>array(22,-70,881,816),40117=>array(24,-72,947,824),40118=>array(31,-32,956,849),40119=>array(25,-66,899,830),40120=>array(39,-64,947,846),40121=>array(25,-79,972,839),40122=>array(16,-68,943,819),40123=>array(25,-66,933,834),40124=>array(27,-80,918,825),40125=>array(25,-69,957,830),40126=>array(22,-65,963,841),40127=>array(24,-58,957,841),40128=>array(22,-68,988,841),40129=>array(22,-39,982,841),40130=>array(22,-57,983,841),40131=>array(34,-31,951,842),40132=>array(20,-66,939,812),40133=>array(18,-70,961,828),40134=>array(25,-66,956,842),40135=>array(24,-44,937,844),40136=>array(22,-64,973,844),40137=>array(34,-61,954,841),40138=>array(25,-77,911,836),40139=>array(24,-67,953,822),40140=>array(35,-50,931,820),40141=>array(24,-67,941,834),40142=>array(24,-63,910,824),40143=>array(25,-66,950,830),40144=>array(47,-67,941,824),40145=>array(22,-65,949,843),40146=>array(22,-64,975,852),40147=>array(33,-75,917,828),40148=>array(25,-64,957,830),40149=>array(25,-69,922,830),40150=>array(41,-40,945,835),40151=>array(25,-68,965,836),40152=>array(53,-38,955,836),40153=>array(25,-84,943,840),40154=>array(16,-67,984,868),40155=>array(22,-67,957,841),40156=>array(19,-69,953,825),40157=>array(25,-66,945,848),40158=>array(25,-68,945,834),40159=>array(35,-65,953,851),40160=>array(22,-64,995,841),40161=>array(41,-33,959,841),40162=>array(25,-32,948,833),40163=>array(24,-35,976,849),40164=>array(43,-67,957,856),40165=>array(66,-59,887,852),40166=>array(34,-65,952,847),40167=>array(58,-58,960,842),40168=>array(43,-64,957,848),40169=>array(48,-63,930,849),40170=>array(177,-69,927,843),40171=>array(41,-68,927,788),40172=>array(52,-62,960,851),40173=>array(31,-73,951,841),40174=>array(39,-73,961,841),40175=>array(46,-60,965,796),40176=>array(43,-71,957,840),40177=>array(58,-75,956,840),40178=>array(33,-48,955,861),40179=>array(46,-60,965,796),40180=>array(109,-63,909,851),40181=>array(59,-67,952,841),40182=>array(52,-57,949,850),40183=>array(47,-69,964,846),40184=>array(46,-73,954,835),40185=>array(35,-70,954,847),40186=>array(40,-65,955,846),40187=>array(39,-78,954,841),40188=>array(46,-52,976,864),40189=>array(35,-75,959,844),40190=>array(57,-76,943,841),40191=>array(42,-71,939,841),40192=>array(36,-72,951,848),40193=>array(31,-72,951,848),40194=>array(17,-73,951,848),40195=>array(48,-70,972,840),40196=>array(63,-74,963,843),40197=>array(49,-75,957,838),40198=>array(45,-68,942,841),40199=>array(65,-65,923,848),40200=>array(46,-63,947,791),40201=>array(46,-64,924,842),40202=>array(38,-64,924,842),40203=>array(39,-68,924,842),40204=>array(34,-68,996,781),40205=>array(40,-68,959,844),40206=>array(96,-70,924,836),40207=>array(29,-80,971,851),40208=>array(61,-68,944,833),40209=>array(68,-68,947,847),40210=>array(41,-65,926,838),40211=>array(54,-71,946,835),40212=>array(45,-68,958,835),40213=>array(41,-61,946,841),40214=>array(33,-61,967,853),40215=>array(60,-71,941,843),40216=>array(43,-75,956,839),40217=>array(52,-68,953,844),40218=>array(26,-62,960,841),40219=>array(46,-67,951,840),40220=>array(62,-67,932,827),40221=>array(36,-58,918,849),40222=>array(72,-55,926,845),40223=>array(68,-58,921,846),40224=>array(61,-68,946,843),40225=>array(42,-58,946,853),40226=>array(51,-72,950,838),40227=>array(66,-60,923,845),40228=>array(25,-77,975,843),40229=>array(38,-72,979,841),40230=>array(34,-63,971,842),40231=>array(51,-68,956,835),40232=>array(113,-79,916,843),40233=>array(45,-75,959,835),40234=>array(61,-56,956,841),40235=>array(113,-67,916,843),40236=>array(63,-67,893,821),40237=>array(107,-63,943,841),40238=>array(37,-70,955,836),40239=>array(59,-59,916,845),40240=>array(71,-61,930,847),40241=>array(46,-63,955,841),40242=>array(59,-66,943,841),40243=>array(57,-66,966,838),40244=>array(37,-63,944,849),40245=>array(27,-66,965,841),40246=>array(56,-64,954,840),40247=>array(57,-68,908,824),40248=>array(43,-67,956,843),40249=>array(76,-63,956,855),40250=>array(44,-63,961,839),40251=>array(48,-57,919,853),40252=>array(29,-61,971,856),40253=>array(55,-43,924,850),40254=>array(65,-67,957,841),40255=>array(49,-67,924,844),40256=>array(43,-47,951,858),40257=>array(37,-67,957,839),40258=>array(39,-71,916,842),40259=>array(37,-67,951,841),40260=>array(53,-60,933,843),40261=>array(38,-69,963,838),40262=>array(35,-70,943,855),40263=>array(41,-68,959,841),40264=>array(40,-70,949,841),40265=>array(62,-55,938,808),40266=>array(46,-68,954,841),40267=>array(34,-69,948,840),40268=>array(26,-67,981,840),40269=>array(34,-69,966,840),40270=>array(36,-73,964,840),40271=>array(55,-61,945,846),40272=>array(18,-69,970,847),40273=>array(108,-68,915,838),40274=>array(28,-68,914,842),40275=>array(71,-61,926,845),40276=>array(31,-73,971,847),40277=>array(34,-70,959,840),40278=>array(104,-68,942,846),40279=>array(33,-67,949,840),40280=>array(38,-71,952,839),40281=>array(47,-68,951,841),40282=>array(45,-67,963,841),40283=>array(54,-71,950,840),40284=>array(53,-61,930,843),40285=>array(68,-60,924,840),40286=>array(53,-73,952,847),40287=>array(48,-69,945,839),40288=>array(70,-62,933,842),40289=>array(61,-63,933,842),40290=>array(48,-69,946,845),40291=>array(42,-69,958,840),40292=>array(43,-69,948,850),40293=>array(67,-62,920,834),40294=>array(37,-68,966,839),40295=>array(48,-71,955,838),40296=>array(23,-68,965,845),40297=>array(37,-69,956,841),40298=>array(50,-60,925,849),40299=>array(59,-72,950,841),40300=>array(63,-77,928,849),40301=>array(24,-65,949,844),40302=>array(44,-65,956,844),40303=>array(65,-58,926,853),40304=>array(57,-55,927,851),40305=>array(33,-70,969,848),40306=>array(60,-61,931,841),40307=>array(37,-70,959,841),40308=>array(28,-67,967,848),40309=>array(34,-68,960,846),40310=>array(52,-65,943,844),40311=>array(37,-61,918,848),40312=>array(58,-68,968,847),40313=>array(49,-64,942,838),40314=>array(37,-75,950,841),40315=>array(51,-64,967,847),40316=>array(44,-68,940,844),40317=>array(49,-66,963,849),40318=>array(57,-69,943,840),40319=>array(34,-66,957,851),40320=>array(28,-73,969,853),40321=>array(43,-65,959,847),40322=>array(51,-68,956,835),40323=>array(27,-69,973,840),40324=>array(62,-74,961,852),40325=>array(51,-65,958,849),40326=>array(40,-68,966,847),40327=>array(42,-68,947,844),40328=>array(50,-74,962,841),40329=>array(54,-62,922,845),40330=>array(26,-68,917,848),40331=>array(41,-72,962,840),40332=>array(37,-63,958,852),40333=>array(35,-69,965,840),40334=>array(34,-69,966,850),40335=>array(42,-68,955,842),40336=>array(52,-63,953,839),40337=>array(61,-74,939,827),40338=>array(33,-65,963,838),40339=>array(53,-65,911,846),40340=>array(48,-63,961,844),40341=>array(57,-69,943,840),40342=>array(41,-67,957,834),40343=>array(46,-62,967,842),40344=>array(62,-64,927,844),40345=>array(67,-62,956,850),40346=>array(71,-59,927,846),40347=>array(55,-65,948,838),40348=>array(46,-70,968,838),40349=>array(61,-66,951,842),40350=>array(36,-63,956,840),40351=>array(50,-65,957,843),40352=>array(69,-64,949,834),40353=>array(16,-55,897,853),40354=>array(36,-64,954,843),40355=>array(18,-58,966,841),40356=>array(64,-65,948,839),40357=>array(35,-69,965,840),40358=>array(75,-68,897,828),40359=>array(32,-62,972,826),40360=>array(50,-63,977,838),40361=>array(52,-66,950,838),40362=>array(55,-60,953,841),40363=>array(34,-77,947,841),40364=>array(27,-71,909,846),40365=>array(60,-70,946,847),40366=>array(35,-69,948,848),40367=>array(57,-74,933,829),40368=>array(-9,-77,948,840),40369=>array(47,-73,968,835),40370=>array(43,-68,955,843),40371=>array(52,-68,955,841),40372=>array(40,-65,938,837),40373=>array(49,-59,938,846),40374=>array(45,-69,964,842),40375=>array(83,-68,953,846),40376=>array(40,-64,952,834),40377=>array(69,-70,949,838),40378=>array(47,-67,924,836),40379=>array(85,-61,921,848),40380=>array(31,-69,912,844),40381=>array(26,-69,948,840),40382=>array(60,-69,949,827),40383=>array(53,-55,929,857),40384=>array(74,-62,927,845),40385=>array(36,-49,951,850),40386=>array(66,-57,924,844),40387=>array(50,-53,950,861),40388=>array(46,-61,945,835),40389=>array(52,-63,960,843),40390=>array(53,-67,949,838),40391=>array(61,-72,976,825),40392=>array(45,-70,962,839),40393=>array(30,-73,970,841),40394=>array(56,-66,949,842),40395=>array(44,-72,959,841),40396=>array(21,-64,946,838),40397=>array(47,-65,959,844),40398=>array(34,-73,964,840),40399=>array(43,-64,952,841),40400=>array(40,-68,956,845),40401=>array(43,-71,952,836),40402=>array(62,-65,954,846),40403=>array(49,-63,931,845),40404=>array(52,-67,954,842),40405=>array(58,-65,937,845),40406=>array(54,-70,930,797),40407=>array(115,-68,925,843),40408=>array(52,-64,974,834),40409=>array(58,-63,956,835),40410=>array(32,-76,912,846),40411=>array(45,-65,954,847),40412=>array(41,-67,955,845),40413=>array(50,-70,957,845),40414=>array(44,-67,967,854),40415=>array(46,-67,953,845),40416=>array(40,-69,948,840),40417=>array(39,-71,970,844),40418=>array(36,-67,979,785),40419=>array(65,-65,954,846),40420=>array(61,-70,954,838),40421=>array(60,-71,937,847),40422=>array(26,-56,898,847),40423=>array(47,-69,948,840),40424=>array(48,-65,959,846),40425=>array(56,-49,939,853),40426=>array(54,-63,935,802),40427=>array(59,-52,955,862),40428=>array(48,-65,954,844),40429=>array(39,-66,965,851),40430=>array(41,-65,962,844),40431=>array(32,-68,915,841),40432=>array(37,-69,969,840),40433=>array(50,-67,955,846),40434=>array(65,-66,943,840),40435=>array(113,-62,925,844),40436=>array(98,-69,938,841),40437=>array(35,-67,956,840),40438=>array(54,-73,945,840),40439=>array(62,-77,950,841),40440=>array(60,-68,934,844),40441=>array(40,-76,942,837),40442=>array(62,-67,948,849),40443=>array(29,-77,989,839),40444=>array(48,-69,948,840),40445=>array(50,-73,935,844),40446=>array(58,-65,962,845),40447=>array(53,-61,956,841),40448=>array(33,-68,962,841),40449=>array(34,-67,969,843),40450=>array(48,-74,957,830),40451=>array(32,-64,974,846),40452=>array(47,-73,969,837),40453=>array(62,-70,954,839),40454=>array(50,-72,966,839),40455=>array(45,-65,942,846),40456=>array(36,-69,926,846),40457=>array(38,-62,955,833),40458=>array(33,-66,960,842),40459=>array(59,-65,959,841),40460=>array(36,-66,948,843),40461=>array(34,-61,959,847),40462=>array(68,-59,910,805),40463=>array(50,-70,961,847),40464=>array(42,-67,971,841),40465=>array(44,-51,951,852),40466=>array(34,-63,975,838),40467=>array(93,-65,933,840),40468=>array(41,-70,973,843),40469=>array(43,-65,930,844),40470=>array(63,-67,939,844),40471=>array(71,-72,945,836),40472=>array(24,-71,960,844),40473=>array(57,-64,946,847),40474=>array(50,-65,928,843),40475=>array(45,-67,927,845),40476=>array(34,-65,966,845),40477=>array(41,-65,935,842),40478=>array(62,-67,958,846),40479=>array(80,-53,892,842),40480=>array(34,-65,893,820),40481=>array(30,-57,890,837),40482=>array(58,-65,935,825),40483=>array(98,-52,903,842),40484=>array(27,-66,896,826),40485=>array(96,-53,904,840),40486=>array(23,-64,906,837),40487=>array(35,-63,932,833),40488=>array(53,-63,892,827),40489=>array(37,-69,918,823),40490=>array(49,-65,892,822),40491=>array(26,-66,897,824),40492=>array(34,-66,896,826),40493=>array(100,-68,902,825),40494=>array(72,-69,902,825),40495=>array(32,-58,950,831),40496=>array(50,-70,927,844),40497=>array(70,-65,896,825),40498=>array(24,-57,895,828),40499=>array(35,-62,924,827),40500=>array(81,-63,893,821),40501=>array(41,-57,920,835),40502=>array(61,-59,910,832),40503=>array(50,-63,923,821),40504=>array(50,-59,893,826),40505=>array(29,-62,896,820),40506=>array(15,-66,896,824),40507=>array(37,-63,938,844),40508=>array(49,-67,928,835),40509=>array(26,-53,907,836),40510=>array(64,-60,917,835),40511=>array(39,-55,894,839),40512=>array(40,-62,949,838),40513=>array(62,-64,899,824),40514=>array(62,-60,895,820),40515=>array(98,-61,899,842),40516=>array(30,-54,898,826),40517=>array(32,-59,899,833),40518=>array(16,-60,895,821),40519=>array(90,-63,899,834),40520=>array(20,-66,900,822),40521=>array(41,-62,896,821),40522=>array(52,-64,903,826),40523=>array(60,-63,898,823),40524=>array(24,-64,899,828),40525=>array(81,-62,925,824),40526=>array(43,-71,902,818),40527=>array(24,-68,906,839),40528=>array(44,-64,926,843),40529=>array(51,-66,896,829),40530=>array(26,-68,931,846),40531=>array(49,-64,942,848),40532=>array(41,-64,959,833),40533=>array(52,-67,896,819),40534=>array(16,-64,896,821),40535=>array(61,-68,896,823),40536=>array(62,-69,894,825),40537=>array(39,-67,944,834),40538=>array(64,-63,921,824),40539=>array(19,-67,898,823),40540=>array(39,-65,929,825),40541=>array(70,-65,928,829),40542=>array(50,-61,934,821),40543=>array(44,-65,926,836),40544=>array(83,-67,924,839),40545=>array(36,-67,898,831),40546=>array(46,-67,898,849),40547=>array(38,-70,912,828),40548=>array(19,-56,898,840),40549=>array(83,-67,929,802),40550=>array(33,-61,899,821),40551=>array(20,-63,898,826),40552=>array(46,-69,929,831),40553=>array(48,-60,923,828),40554=>array(36,-63,922,827),40555=>array(42,-64,960,845),40556=>array(39,-65,895,821),40557=>array(31,-63,930,827),40558=>array(37,-62,951,821),40559=>array(61,-62,937,846),40560=>array(45,-78,917,831),40561=>array(30,-65,948,826),40562=>array(63,-64,933,833),40563=>array(29,-56,897,828),40564=>array(29,-70,946,822),40565=>array(125,-70,891,835),40566=>array(91,-52,972,835),40567=>array(91,-73,972,835),40568=>array(82,-60,966,835),40569=>array(94,-71,969,831),40570=>array(88,-59,941,843),40571=>array(69,-72,982,845),40572=>array(72,-66,947,847),40573=>array(52,-18,943,837),40574=>array(92,-45,924,830),40575=>array(57,-67,949,829),40576=>array(29,-66,958,842),40577=>array(42,-64,953,834),40578=>array(21,-60,935,841),40579=>array(39,-75,960,848),40580=>array(40,-74,958,833),40581=>array(30,-60,949,849),40582=>array(30,-60,941,849),40583=>array(30,-67,961,849),40584=>array(21,-60,925,836),40585=>array(48,-75,956,814),40586=>array(52,-72,955,826),40587=>array(67,-64,941,821),40588=>array(36,-57,966,829),40589=>array(25,-70,969,845),40590=>array(25,-80,971,845),40591=>array(25,-74,960,845),40592=>array(25,-73,975,845),40593=>array(37,-64,955,838),40594=>array(40,-70,951,835),40595=>array(37,-68,958,837),40596=>array(25,-74,960,845),40597=>array(36,-65,945,833),40598=>array(25,-70,951,845),40599=>array(43,-67,952,814),40600=>array(25,-72,971,845),40601=>array(25,-73,963,845),40602=>array(25,-78,970,845),40603=>array(25,-70,956,845),40604=>array(25,-75,979,845),40605=>array(58,-63,946,841),40606=>array(25,-80,952,843),40607=>array(26,-68,959,838),40608=>array(25,-76,952,847),40609=>array(25,-79,970,843),40610=>array(25,-74,951,843),40611=>array(35,-68,976,841),40612=>array(42,-69,959,853),40613=>array(58,-75,942,832),40614=>array(56,-65,950,827),40615=>array(40,-75,981,828),40616=>array(43,-84,971,832),40617=>array(37,-64,964,831),40618=>array(37,-64,958,831),40619=>array(43,-84,939,832),40620=>array(45,-84,964,832),40621=>array(37,-64,971,842),40622=>array(47,-68,978,824),40623=>array(43,-84,929,832),40624=>array(38,-54,971,866),40625=>array(43,-84,958,832),40626=>array(43,-84,968,832),40627=>array(43,-84,973,832),40628=>array(25,-63,959,826),40629=>array(34,-63,967,831),40630=>array(41,-71,979,837),40631=>array(44,-66,982,829),40632=>array(43,-57,973,830),40633=>array(37,-65,982,830),40634=>array(37,-65,982,818),40635=>array(43,-70,966,839),40636=>array(45,-68,956,839),40637=>array(41,-72,926,837),40638=>array(23,-67,958,836),40639=>array(36,-68,945,838),40640=>array(37,-71,969,843),40641=>array(39,-66,978,852),40642=>array(34,-73,940,845),40643=>array(55,-76,957,826),40644=>array(75,-83,925,831),40645=>array(50,-76,968,830),40646=>array(50,-76,972,830),40647=>array(58,-78,942,832),40648=>array(56,-78,959,818),40649=>array(58,-67,916,840),40650=>array(50,-78,963,831),40651=>array(28,-79,958,822),40652=>array(49,-72,960,842),40653=>array(35,-68,963,830),40654=>array(49,-68,946,832),40655=>array(39,-62,956,838),40656=>array(31,-64,954,835),40657=>array(81,-67,946,787),40658=>array(81,-67,946,787),40659=>array(48,-67,970,823),40660=>array(36,-65,970,841),40661=>array(43,-78,963,820),40662=>array(41,-75,964,780),40663=>array(39,-60,966,837),40664=>array(45,-69,955,829),40665=>array(43,-67,957,809),40666=>array(60,-70,956,823),40667=>array(47,-67,962,847),40668=>array(63,-66,919,832),40669=>array(58,-62,941,830),40670=>array(63,-64,945,839),40671=>array(58,-63,941,846),40672=>array(37,-64,952,829),40673=>array(33,-78,964,805),40674=>array(29,-72,933,831),40675=>array(43,-57,957,845),40676=>array(42,-52,965,853),40677=>array(38,-62,963,819),40678=>array(38,-68,964,833),40679=>array(44,-68,955,837),40680=>array(41,-70,956,836),40681=>array(30,-67,941,817),40682=>array(31,-76,950,823),40683=>array(25,-51,960,793),40684=>array(33,-68,967,835),40685=>array(45,-70,979,828),40686=>array(48,-53,954,832),40687=>array(52,-63,951,832),40688=>array(49,-59,970,852),40689=>array(26,-88,974,841),40690=>array(38,-55,970,864),40691=>array(47,-79,957,813),40692=>array(44,-67,977,833),40693=>array(56,-62,950,843),40694=>array(35,-73,959,817),40695=>array(37,-80,961,835),40696=>array(46,-64,954,836),40697=>array(46,-65,962,830),40698=>array(39,-74,970,826),40699=>array(34,-69,978,836),40700=>array(36,-62,955,835),40701=>array(120,-33,967,794),40702=>array(139,-42,966,803),40703=>array(45,-32,960,788),40704=>array(40,-56,973,837),40705=>array(63,-46,968,829),40706=>array(62,-54,971,823),40707=>array(68,-51,971,843),40708=>array(40,-54,971,844),40709=>array(57,-54,971,858),40710=>array(49,-42,971,784),40711=>array(48,-56,973,845),40712=>array(70,-49,960,829),40713=>array(58,-38,969,809),40714=>array(45,-39,956,834),40715=>array(84,-55,958,819),40716=>array(63,-51,962,822),40717=>array(63,-53,961,822),40718=>array(48,-65,948,801),40719=>array(41,-75,944,782),40720=>array(55,-69,943,792),40721=>array(44,-65,899,835),40722=>array(50,-67,950,824),40723=>array(59,-74,961,837),40724=>array(59,-74,961,833),40725=>array(60,-60,960,832),40726=>array(42,-73,974,833),40727=>array(44,-76,962,827),40728=>array(60,-68,962,828),40729=>array(51,-65,969,833),40730=>array(51,-69,962,827),40731=>array(43,-71,967,830),40732=>array(46,-67,972,829),40733=>array(37,-61,963,811),40734=>array(60,-35,970,818),40735=>array(34,-47,966,826),40736=>array(61,-60,963,836),40737=>array(40,-69,957,810),40738=>array(62,-52,948,830),40739=>array(74,-72,957,836),40740=>array(76,-73,959,835),40741=>array(68,-60,957,840),40742=>array(66,-69,924,826),40743=>array(66,-69,962,831),40744=>array(65,-60,969,838),40745=>array(63,-46,961,847),40746=>array(54,-56,954,846),40747=>array(61,-55,952,847),40748=>array(60,-58,945,820),40749=>array(68,-66,959,835),40750=>array(59,-68,958,840),40751=>array(56,-51,946,827),40752=>array(68,-65,953,836),40753=>array(57,-43,944,846),40754=>array(70,-77,952,834),40755=>array(65,-71,964,837),40756=>array(57,-55,954,832),40757=>array(59,-66,959,843),40758=>array(58,-75,964,839),40759=>array(49,-53,949,838),40760=>array(56,-66,954,840),40761=>array(87,-66,952,829),40762=>array(70,-58,943,825),40763=>array(42,-58,951,851),40764=>array(51,-71,897,843),40765=>array(43,-70,964,854),40766=>array(38,-65,964,850),40767=>array(30,-72,970,851),40768=>array(31,-68,976,843),40769=>array(56,-62,923,858),40770=>array(41,-75,967,833),40771=>array(43,-70,933,842),40772=>array(45,-67,950,825),40773=>array(36,-64,967,848),40774=>array(36,-62,957,860),40775=>array(49,-66,959,846),40776=>array(44,-64,967,841),40777=>array(53,-66,974,840),40778=>array(52,-70,946,831),40779=>array(55,-73,962,831),40780=>array(39,-74,973,847),40781=>array(32,-73,979,846),40782=>array(39,-67,978,846),40783=>array(43,-69,977,833),40784=>array(32,-69,952,834),40785=>array(36,-67,937,842),40786=>array(53,-73,946,829),40787=>array(58,-37,950,836),40788=>array(58,-63,948,836),40789=>array(62,-41,968,840),40790=>array(62,-65,954,840),40791=>array(65,-64,959,837),40792=>array(56,-52,976,860),40793=>array(57,-71,960,835),40794=>array(57,-71,943,851),40795=>array(61,-62,956,830),40796=>array(47,-48,957,835),40797=>array(60,-64,957,834),40798=>array(61,-71,962,833),40799=>array(40,-63,956,836),40800=>array(40,-63,930,836),40801=>array(40,-63,943,836),40802=>array(42,-68,958,846),40803=>array(55,-63,927,836),40804=>array(45,-65,969,839),40805=>array(55,-87,954,830),40806=>array(46,-73,967,836),40807=>array(64,-65,942,836),40808=>array(42,-45,958,839),40809=>array(64,-63,950,837),40810=>array(58,-63,960,836),40811=>array(66,-65,911,829),40812=>array(46,-63,956,836),40813=>array(63,-66,937,825),40814=>array(59,-73,956,831),40815=>array(59,-56,958,844),40816=>array(54,-48,949,851),40817=>array(58,-68,958,828),40818=>array(55,-66,940,836),40819=>array(73,-64,927,839),40820=>array(54,-67,957,837),40821=>array(60,-42,921,877),40822=>array(56,-60,954,846),40823=>array(58,-66,936,836),40824=>array(57,-29,968,829),40825=>array(47,-65,952,847),40826=>array(54,-71,931,837),40827=>array(59,-71,962,830),40828=>array(60,-56,940,839),40829=>array(47,-70,964,839),40830=>array(53,-69,975,829),40831=>array(75,-61,925,827),40832=>array(52,-59,930,817),40833=>array(52,-59,950,842),40834=>array(52,-59,908,842),40835=>array(52,-47,953,817),40836=>array(46,-57,947,826),40837=>array(52,-47,965,828),40838=>array(52,-67,870,817),40839=>array(51,-53,941,824),40840=>array(52,-70,969,817),40841=>array(50,-71,918,817),40842=>array(54,-68,965,821),40843=>array(44,-77,889,813),40844=>array(68,-68,927,817),40845=>array(50,-66,970,833),40846=>array(44,-63,975,797),40847=>array(59,-76,957,838),40848=>array(44,-63,975,845),40849=>array(50,-61,965,834),40850=>array(61,-64,957,838),40851=>array(45,-68,955,833),40852=>array(60,-69,956,850),40853=>array(44,-64,962,858),40854=>array(47,-47,971,819),40855=>array(63,-56,957,829),40856=>array(71,-65,958,837),40857=>array(37,-65,928,823),40858=>array(23,-66,923,834),40859=>array(21,-62,934,828),40860=>array(37,-41,967,846),40861=>array(16,-55,965,851),40862=>array(56,-54,970,843),40863=>array(50,-34,965,827),40864=>array(28,-64,976,848),40865=>array(56,-48,975,857),40866=>array(31,-62,986,863),40867=>array(29,-68,969,841),40868=>array(31,-43,962,857),40869=>array(31,-74,969,857),44032=>array(98,-69,936,842),44033=>array(88,-59,936,837),44034=>array(88,-61,936,837),44035=>array(88,-71,936,837),44036=>array(90,-45,936,842),44037=>array(88,-69,936,837),44038=>array(88,-76,936,837),44039=>array(88,-44,936,837),44040=>array(88,-62,936,837),44041=>array(88,-64,936,837),44042=>array(88,-64,936,837),44043=>array(88,-64,936,837),44044=>array(88,-70,936,837),44045=>array(88,-64,936,837),44046=>array(88,-64,936,837),44047=>array(88,-76,936,837),44048=>array(88,-62,936,837),44049=>array(88,-61,936,837),44050=>array(88,-70,936,837),44051=>array(88,-74,936,837),44052=>array(88,-69,936,837),44053=>array(88,-67,936,837),44054=>array(88,-72,936,837),44055=>array(88,-71,936,837),44056=>array(88,-66,936,837),44057=>array(88,-59,936,837),44058=>array(88,-60,936,837),44059=>array(88,-69,936,837),44060=>array(104,-69,907,842),44061=>array(88,-61,907,842),44062=>array(88,-61,907,842),44063=>array(88,-71,931,842),44064=>array(90,-46,907,842),44065=>array(88,-68,912,842),44066=>array(88,-76,907,842),44067=>array(88,-44,921,842),44068=>array(88,-62,917,842),44069=>array(88,-64,907,842),44070=>array(88,-64,908,842),44071=>array(88,-64,908,842),44072=>array(88,-69,923,842),44073=>array(88,-64,908,842),44074=>array(88,-64,908,842),44075=>array(88,-76,907,842),44076=>array(88,-62,907,842),44077=>array(88,-61,907,842),44078=>array(88,-69,922,842),44079=>array(88,-74,929,842),44080=>array(88,-69,927,842),44081=>array(88,-68,911,842),44082=>array(88,-72,929,842),44083=>array(88,-70,936,842),44084=>array(88,-66,908,842),44085=>array(88,-59,916,842),44086=>array(88,-60,928,842),44087=>array(88,-68,908,842),44088=>array(98,-68,935,843),44089=>array(90,-59,936,842),44090=>array(90,-61,936,842),44091=>array(90,-71,936,842),44092=>array(90,-45,936,842),44093=>array(90,-69,936,842),44094=>array(90,-76,936,842),44095=>array(90,-44,936,842),44096=>array(90,-62,936,842),44097=>array(90,-64,936,842),44098=>array(90,-64,936,842),44099=>array(90,-64,936,842),44100=>array(90,-70,936,842),44101=>array(90,-64,936,842),44102=>array(90,-64,936,842),44103=>array(90,-76,936,842),44104=>array(90,-62,936,842),44105=>array(90,-61,936,842),44106=>array(90,-70,936,842),44107=>array(90,-74,936,842),44108=>array(90,-69,936,842),44109=>array(90,-67,936,842),44110=>array(90,-72,936,842),44111=>array(90,-71,936,842),44112=>array(90,-66,936,842),44113=>array(90,-59,936,842),44114=>array(90,-60,936,842),44115=>array(90,-69,936,842),44116=>array(104,-69,907,842),44117=>array(88,-61,907,842),44118=>array(88,-61,907,842),44119=>array(88,-71,931,842),44120=>array(90,-46,907,842),44121=>array(88,-68,912,842),44122=>array(88,-76,907,842),44123=>array(88,-44,921,842),44124=>array(88,-62,917,842),44125=>array(88,-64,907,842),44126=>array(88,-64,908,842),44127=>array(88,-64,908,842),44128=>array(88,-69,923,842),44129=>array(88,-64,908,842),44130=>array(88,-64,908,842),44131=>array(88,-76,907,842),44132=>array(88,-62,907,842),44133=>array(88,-61,907,842),44134=>array(88,-69,922,842),44135=>array(88,-74,929,842),44136=>array(88,-69,927,842),44137=>array(88,-68,911,842),44138=>array(88,-72,929,842),44139=>array(88,-70,936,842),44140=>array(88,-66,908,842),44141=>array(88,-59,916,842),44142=>array(88,-60,928,842),44143=>array(88,-68,908,842),44144=>array(98,-70,907,841),44145=>array(90,-61,907,841),44146=>array(90,-61,907,841),44147=>array(90,-71,931,841),44148=>array(90,-46,907,841),44149=>array(90,-68,912,841),44150=>array(90,-76,907,841),44151=>array(90,-44,921,841),44152=>array(90,-62,917,841),44153=>array(90,-64,907,841),44154=>array(90,-64,908,841),44155=>array(90,-64,908,841),44156=>array(90,-69,923,841),44157=>array(90,-64,908,841),44158=>array(90,-64,908,841),44159=>array(90,-76,906,841),44160=>array(90,-62,907,841),44161=>array(90,-61,907,841),44162=>array(90,-69,922,841),44163=>array(90,-74,929,841),44164=>array(90,-69,927,841),44165=>array(90,-68,911,841),44166=>array(90,-72,929,841),44167=>array(90,-70,936,841),44168=>array(90,-66,908,841),44169=>array(90,-59,916,841),44170=>array(90,-60,928,841),44171=>array(90,-68,908,841),44172=>array(93,-68,907,843),44173=>array(74,-61,907,843),44174=>array(74,-61,907,843),44175=>array(74,-71,931,843),44176=>array(70,-46,907,843),44177=>array(74,-68,912,843),44178=>array(74,-76,907,843),44179=>array(74,-44,921,843),44180=>array(74,-62,917,843),44181=>array(74,-64,907,843),44182=>array(74,-64,908,843),44183=>array(74,-64,908,843),44184=>array(74,-69,923,843),44185=>array(74,-64,908,843),44186=>array(74,-64,908,843),44187=>array(74,-76,907,843),44188=>array(74,-62,907,843),44189=>array(74,-61,907,843),44190=>array(74,-69,922,843),44191=>array(74,-74,929,843),44192=>array(74,-69,927,843),44193=>array(74,-68,911,843),44194=>array(74,-72,929,843),44195=>array(74,-70,936,843),44196=>array(74,-66,908,843),44197=>array(74,-59,916,843),44198=>array(74,-60,928,843),44199=>array(74,-68,908,843),44200=>array(98,-70,907,842),44201=>array(90,-61,908,842),44202=>array(90,-61,908,842),44203=>array(90,-71,931,842),44204=>array(90,-46,907,842),44205=>array(90,-68,912,842),44206=>array(90,-76,908,842),44207=>array(90,-44,921,842),44208=>array(90,-62,917,842),44209=>array(90,-64,908,842),44210=>array(90,-64,908,842),44211=>array(90,-64,908,842),44212=>array(90,-69,923,842),44213=>array(90,-64,908,842),44214=>array(90,-64,908,842),44215=>array(90,-76,908,842),44216=>array(90,-62,908,842),44217=>array(90,-61,908,842),44218=>array(90,-69,922,842),44219=>array(90,-74,929,842),44220=>array(90,-69,927,842),44221=>array(90,-68,911,842),44222=>array(90,-72,929,842),44223=>array(90,-70,936,842),44224=>array(90,-66,908,842),44225=>array(90,-59,916,842),44226=>array(90,-60,928,842),44227=>array(90,-68,908,842),44228=>array(78,-68,907,843),44229=>array(79,-61,907,843),44230=>array(79,-61,907,843),44231=>array(79,-71,931,843),44232=>array(70,-46,907,843),44233=>array(79,-68,912,843),44234=>array(79,-76,907,843),44235=>array(79,-44,921,843),44236=>array(79,-62,917,843),44237=>array(79,-64,907,843),44238=>array(79,-64,908,843),44239=>array(79,-64,908,843),44240=>array(79,-69,923,843),44241=>array(79,-64,908,843),44242=>array(79,-64,908,843),44243=>array(79,-76,907,843),44244=>array(79,-62,907,843),44245=>array(79,-61,907,843),44246=>array(79,-69,922,843),44247=>array(79,-74,929,843),44248=>array(79,-69,927,843),44249=>array(79,-68,911,843),44250=>array(79,-72,929,843),44251=>array(79,-70,936,843),44252=>array(79,-66,908,843),44253=>array(79,-59,916,843),44254=>array(79,-60,928,843),44255=>array(79,-68,908,843),44256=>array(62,27,943,700),44257=>array(79,-61,921,770),44258=>array(79,-61,921,770),44259=>array(79,-71,921,770),44260=>array(79,-46,921,770),44261=>array(79,-68,921,770),44262=>array(79,-74,921,770),44263=>array(79,-44,921,770),44264=>array(79,-62,921,770),44265=>array(79,-64,921,770),44266=>array(79,-64,921,770),44267=>array(79,-63,921,770),44268=>array(79,-68,921,770),44269=>array(79,-64,921,770),44270=>array(79,-63,921,770),44271=>array(79,-74,921,770),44272=>array(79,-62,921,770),44273=>array(79,-61,921,770),44274=>array(79,-69,921,770),44275=>array(79,-74,921,770),44276=>array(79,-69,921,770),44277=>array(79,-68,921,770),44278=>array(79,-72,921,770),44279=>array(79,-70,921,770),44280=>array(79,-66,921,770),44281=>array(79,-59,921,770),44282=>array(79,-60,921,770),44283=>array(79,-68,921,770),44284=>array(38,-68,935,843),44285=>array(64,-59,936,842),44286=>array(64,-61,936,842),44287=>array(64,-71,936,842),44288=>array(57,-45,936,842),44289=>array(64,-69,936,842),44290=>array(64,-76,936,842),44291=>array(64,-44,936,842),44292=>array(64,-62,936,842),44293=>array(64,-64,936,842),44294=>array(64,-64,936,842),44295=>array(64,-64,936,842),44296=>array(64,-70,936,842),44297=>array(64,-64,936,842),44298=>array(64,-64,936,842),44299=>array(64,-76,936,842),44300=>array(64,-62,936,842),44301=>array(64,-61,936,842),44302=>array(64,-70,936,842),44303=>array(64,-74,936,842),44304=>array(64,-69,936,842),44305=>array(64,-67,936,842),44306=>array(64,-72,936,842),44307=>array(64,-71,936,842),44308=>array(64,-66,936,842),44309=>array(64,-59,936,842),44310=>array(64,-60,936,842),44311=>array(64,-69,936,842),44312=>array(51,-69,907,842),44313=>array(65,-61,907,841),44314=>array(65,-61,907,841),44315=>array(65,-71,931,841),44316=>array(53,-46,907,841),44317=>array(65,-68,912,841),44318=>array(65,-76,907,841),44319=>array(65,-44,921,841),44320=>array(65,-62,917,841),44321=>array(65,-64,907,841),44322=>array(65,-64,908,841),44323=>array(65,-64,908,841),44324=>array(65,-69,923,841),44325=>array(65,-64,908,841),44326=>array(65,-64,908,841),44327=>array(65,-76,907,841),44328=>array(65,-62,907,841),44329=>array(65,-61,907,841),44330=>array(65,-69,922,841),44331=>array(65,-74,929,841),44332=>array(65,-69,927,841),44333=>array(65,-68,911,841),44334=>array(65,-72,929,841),44335=>array(65,-70,936,841),44336=>array(65,-66,908,841),44337=>array(65,-59,916,841),44338=>array(65,-60,928,841),44339=>array(65,-68,908,841),44340=>array(60,-69,907,842),44341=>array(64,-61,907,842),44342=>array(64,-61,907,842),44343=>array(64,-71,931,842),44344=>array(72,-46,907,842),44345=>array(64,-68,912,842),44346=>array(64,-76,907,842),44347=>array(64,-44,921,842),44348=>array(64,-62,917,842),44349=>array(64,-64,907,842),44350=>array(64,-64,908,842),44351=>array(64,-64,908,842),44352=>array(64,-69,923,842),44353=>array(64,-64,908,842),44354=>array(64,-64,908,842),44355=>array(64,-76,907,842),44356=>array(64,-62,907,842),44357=>array(64,-61,907,842),44358=>array(64,-69,922,842),44359=>array(64,-74,929,842),44360=>array(64,-69,927,842),44361=>array(64,-68,911,842),44362=>array(64,-72,929,842),44363=>array(64,-70,936,842),44364=>array(64,-66,908,842),44365=>array(64,-59,916,842),44366=>array(64,-60,928,842),44367=>array(64,-68,908,842),44368=>array(62,27,943,723),44369=>array(62,-61,943,770),44370=>array(62,-61,943,770),44371=>array(62,-71,943,770),44372=>array(62,-46,943,770),44373=>array(62,-68,943,770),44374=>array(62,-74,943,770),44375=>array(62,-44,943,770),44376=>array(62,-62,943,770),44377=>array(62,-64,943,770),44378=>array(62,-64,943,770),44379=>array(62,-63,943,770),44380=>array(62,-68,943,770),44381=>array(62,-64,943,770),44382=>array(62,-63,943,770),44383=>array(62,-74,943,770),44384=>array(62,-62,943,770),44385=>array(62,-61,943,770),44386=>array(62,-69,943,770),44387=>array(62,-74,943,770),44388=>array(62,-69,943,770),44389=>array(62,-68,943,770),44390=>array(62,-72,943,770),44391=>array(62,-70,943,770),44392=>array(62,-66,943,770),44393=>array(62,-59,943,770),44394=>array(62,-60,943,770),44395=>array(62,-68,943,770),44396=>array(79,-64,920,780),44397=>array(79,-61,921,769),44398=>array(79,-61,921,769),44399=>array(79,-71,921,769),44400=>array(79,-46,921,768),44401=>array(79,-68,921,769),44402=>array(79,-74,921,769),44403=>array(79,-44,921,769),44404=>array(79,-62,921,769),44405=>array(79,-64,921,769),44406=>array(79,-64,921,769),44407=>array(79,-63,921,769),44408=>array(79,-68,921,769),44409=>array(79,-64,921,769),44410=>array(79,-63,921,769),44411=>array(79,-74,921,769),44412=>array(79,-62,921,769),44413=>array(79,-61,921,769),44414=>array(79,-69,921,769),44415=>array(79,-74,921,769),44416=>array(79,-69,921,769),44417=>array(79,-68,921,769),44418=>array(79,-72,921,769),44419=>array(79,-70,921,769),44420=>array(79,-66,921,769),44421=>array(79,-59,921,769),44422=>array(79,-60,921,769),44423=>array(79,-68,921,769),44424=>array(67,-69,907,842),44425=>array(75,-61,907,841),44426=>array(75,-61,907,841),44427=>array(75,-71,931,841),44428=>array(81,-46,907,841),44429=>array(75,-68,912,841),44430=>array(75,-76,907,841),44431=>array(75,-44,921,841),44432=>array(75,-62,917,841),44433=>array(75,-64,907,841),44434=>array(75,-64,908,841),44435=>array(75,-64,908,841),44436=>array(75,-69,923,841),44437=>array(75,-64,908,841),44438=>array(75,-64,908,841),44439=>array(75,-76,906,841),44440=>array(75,-62,907,841),44441=>array(75,-61,907,841),44442=>array(75,-69,922,841),44443=>array(75,-74,929,841),44444=>array(75,-69,927,841),44445=>array(75,-68,911,841),44446=>array(75,-72,929,841),44447=>array(75,-70,936,841),44448=>array(75,-66,908,841),44449=>array(75,-59,916,841),44450=>array(75,-60,928,841),44451=>array(75,-68,908,841),44452=>array(40,-69,908,842),44453=>array(70,-61,907,843),44454=>array(70,-61,907,843),44455=>array(70,-71,931,843),44456=>array(79,-46,907,843),44457=>array(70,-68,912,843),44458=>array(70,-76,907,843),44459=>array(70,-44,921,843),44460=>array(70,-62,917,843),44461=>array(70,-64,907,843),44462=>array(70,-64,908,843),44463=>array(70,-64,908,843),44464=>array(70,-69,923,843),44465=>array(70,-64,908,843),44466=>array(70,-64,908,843),44467=>array(70,-76,907,843),44468=>array(70,-62,907,843),44469=>array(70,-61,907,843),44470=>array(70,-69,922,843),44471=>array(70,-74,929,843),44472=>array(70,-69,927,843),44473=>array(70,-68,911,843),44474=>array(70,-72,929,843),44475=>array(70,-70,936,843),44476=>array(70,-66,908,843),44477=>array(70,-59,916,843),44478=>array(70,-60,928,843),44479=>array(70,-68,908,843),44480=>array(55,-69,907,842),44481=>array(64,-61,907,842),44482=>array(64,-61,907,842),44483=>array(64,-71,931,842),44484=>array(64,-46,907,842),44485=>array(64,-68,912,842),44486=>array(64,-76,907,842),44487=>array(64,-44,921,842),44488=>array(64,-62,917,842),44489=>array(64,-64,907,842),44490=>array(64,-64,908,842),44491=>array(64,-64,908,842),44492=>array(64,-69,923,842),44493=>array(64,-64,908,842),44494=>array(64,-64,908,842),44495=>array(64,-76,907,842),44496=>array(64,-62,907,842),44497=>array(64,-61,907,842),44498=>array(64,-69,922,842),44499=>array(64,-74,929,842),44500=>array(64,-69,927,842),44501=>array(64,-68,911,842),44502=>array(64,-72,929,842),44503=>array(64,-70,936,842),44504=>array(64,-66,908,842),44505=>array(64,-59,916,842),44506=>array(64,-60,928,842),44507=>array(64,-68,908,842),44508=>array(71,-64,928,780),44509=>array(79,-61,921,768),44510=>array(79,-61,921,768),44511=>array(79,-71,921,768),44512=>array(79,-46,921,769),44513=>array(79,-68,921,768),44514=>array(79,-74,921,768),44515=>array(79,-44,921,768),44516=>array(79,-62,921,768),44517=>array(79,-64,921,768),44518=>array(79,-64,921,768),44519=>array(79,-63,921,768),44520=>array(79,-68,921,768),44521=>array(79,-64,921,768),44522=>array(79,-63,921,768),44523=>array(79,-74,921,768),44524=>array(79,-62,921,768),44525=>array(79,-61,921,768),44526=>array(79,-69,921,768),44527=>array(79,-74,921,768),44528=>array(79,-69,921,768),44529=>array(79,-68,921,768),44530=>array(79,-72,921,768),44531=>array(79,-70,921,768),44532=>array(79,-66,921,768),44533=>array(79,-59,921,768),44534=>array(79,-60,921,768),44535=>array(79,-68,921,768),44536=>array(57,62,943,685),44537=>array(78,-61,919,769),44538=>array(78,-61,919,769),44539=>array(78,-71,919,769),44540=>array(79,-46,921,770),44541=>array(78,-68,919,769),44542=>array(78,-74,919,769),44543=>array(78,-44,919,769),44544=>array(78,-62,919,769),44545=>array(78,-64,919,769),44546=>array(78,-64,919,769),44547=>array(78,-63,919,769),44548=>array(78,-68,919,769),44549=>array(78,-64,919,769),44550=>array(78,-63,919,769),44551=>array(78,-74,919,769),44552=>array(78,-62,919,769),44553=>array(78,-61,919,769),44554=>array(78,-69,919,769),44555=>array(78,-74,919,769),44556=>array(78,-69,919,769),44557=>array(78,-68,919,769),44558=>array(78,-72,919,769),44559=>array(78,-70,919,769),44560=>array(78,-66,919,769),44561=>array(78,-59,919,769),44562=>array(78,-60,919,769),44563=>array(78,-68,919,769),44564=>array(52,-69,907,842),44565=>array(64,-61,907,842),44566=>array(64,-61,907,842),44567=>array(64,-71,931,842),44568=>array(68,-46,907,842),44569=>array(64,-68,912,842),44570=>array(64,-76,907,842),44571=>array(64,-44,921,842),44572=>array(64,-62,917,842),44573=>array(64,-64,907,842),44574=>array(64,-64,908,842),44575=>array(64,-64,908,842),44576=>array(64,-69,923,842),44577=>array(64,-64,908,842),44578=>array(64,-64,908,842),44579=>array(64,-76,907,842),44580=>array(64,-62,907,842),44581=>array(64,-61,907,842),44582=>array(64,-69,922,842),44583=>array(64,-74,929,842),44584=>array(64,-69,927,842),44585=>array(64,-68,911,842),44586=>array(64,-72,929,842),44587=>array(64,-70,936,842),44588=>array(64,-66,908,842),44589=>array(64,-59,916,842),44590=>array(64,-60,928,842),44591=>array(64,-68,908,842),44592=>array(90,-69,907,842),44593=>array(63,-61,907,842),44594=>array(63,-61,907,842),44595=>array(63,-71,931,842),44596=>array(77,-46,907,842),44597=>array(63,-68,912,842),44598=>array(63,-76,907,842),44599=>array(63,-44,921,842),44600=>array(63,-62,917,842),44601=>array(63,-64,907,842),44602=>array(63,-64,908,842),44603=>array(63,-64,908,842),44604=>array(63,-69,923,842),44605=>array(63,-64,908,842),44606=>array(63,-64,908,842),44607=>array(63,-76,907,842),44608=>array(63,-62,907,842),44609=>array(63,-61,907,842),44610=>array(63,-69,922,842),44611=>array(63,-74,929,842),44612=>array(63,-69,927,842),44613=>array(63,-68,911,842),44614=>array(63,-72,929,842),44615=>array(63,-70,936,842),44616=>array(63,-66,908,842),44617=>array(63,-59,916,842),44618=>array(63,-60,928,842),44619=>array(63,-68,908,842),44620=>array(46,-69,936,842),44621=>array(88,-59,936,842),44622=>array(88,-61,936,842),44623=>array(88,-71,936,842),44624=>array(60,-45,936,842),44625=>array(88,-69,936,842),44626=>array(88,-76,936,842),44627=>array(88,-44,936,842),44628=>array(88,-62,936,842),44629=>array(88,-64,936,842),44630=>array(88,-64,936,842),44631=>array(88,-64,936,842),44632=>array(88,-70,936,842),44633=>array(88,-64,936,842),44634=>array(88,-64,936,842),44635=>array(88,-76,936,842),44636=>array(88,-62,936,842),44637=>array(88,-61,936,842),44638=>array(88,-70,936,842),44639=>array(88,-74,936,842),44640=>array(88,-69,936,842),44641=>array(88,-67,936,842),44642=>array(88,-72,936,842),44643=>array(88,-71,936,842),44644=>array(88,-66,936,842),44645=>array(88,-59,936,842),44646=>array(88,-60,936,842),44647=>array(88,-69,936,842),44648=>array(41,-69,907,842),44649=>array(68,-61,907,837),44650=>array(68,-61,907,837),44651=>array(68,-71,931,837),44652=>array(50,-46,907,842),44653=>array(68,-68,912,837),44654=>array(68,-76,907,837),44655=>array(68,-44,921,837),44656=>array(68,-62,917,837),44657=>array(68,-64,907,837),44658=>array(68,-64,908,837),44659=>array(68,-64,908,837),44660=>array(68,-69,923,837),44661=>array(68,-64,908,837),44662=>array(68,-64,908,837),44663=>array(68,-76,907,837),44664=>array(68,-62,907,837),44665=>array(68,-61,907,837),44666=>array(68,-69,922,837),44667=>array(68,-74,929,837),44668=>array(68,-69,927,837),44669=>array(68,-68,911,837),44670=>array(68,-72,929,837),44671=>array(68,-70,936,837),44672=>array(68,-66,908,837),44673=>array(68,-59,916,837),44674=>array(68,-60,928,837),44675=>array(68,-68,908,837),44676=>array(46,-69,936,842),44677=>array(88,-59,936,842),44678=>array(88,-61,936,842),44679=>array(88,-71,936,842),44680=>array(60,-45,936,842),44681=>array(88,-69,936,842),44682=>array(88,-76,936,842),44683=>array(88,-44,936,842),44684=>array(88,-62,936,842),44685=>array(88,-64,936,842),44686=>array(88,-64,936,842),44687=>array(88,-64,936,842),44688=>array(88,-70,936,842),44689=>array(88,-64,936,842),44690=>array(88,-64,936,842),44691=>array(88,-76,936,842),44692=>array(88,-62,936,842),44693=>array(88,-61,936,842),44694=>array(88,-70,936,842),44695=>array(88,-74,936,842),44696=>array(88,-69,936,842),44697=>array(88,-67,936,842),44698=>array(88,-72,936,842),44699=>array(88,-71,936,842),44700=>array(88,-66,936,842),44701=>array(88,-59,936,842),44702=>array(88,-60,936,842),44703=>array(88,-69,936,842),44704=>array(41,-69,907,842),44705=>array(68,-61,907,842),44706=>array(68,-61,907,842),44707=>array(68,-71,931,842),44708=>array(50,-46,907,842),44709=>array(68,-68,912,842),44710=>array(68,-76,907,842),44711=>array(68,-44,921,842),44712=>array(68,-62,917,842),44713=>array(68,-64,907,842),44714=>array(68,-64,908,842),44715=>array(68,-64,908,842),44716=>array(68,-69,923,842),44717=>array(68,-64,908,842),44718=>array(68,-64,908,842),44719=>array(68,-76,907,842),44720=>array(68,-62,907,842),44721=>array(68,-61,907,842),44722=>array(68,-69,922,842),44723=>array(68,-74,929,842),44724=>array(68,-69,927,842),44725=>array(68,-68,911,842),44726=>array(68,-72,929,842),44727=>array(68,-70,936,842),44728=>array(68,-66,908,842),44729=>array(68,-59,916,842),44730=>array(68,-60,928,842),44731=>array(68,-68,908,842),44732=>array(46,-70,907,841),44733=>array(88,-61,907,836),44734=>array(88,-61,907,836),44735=>array(88,-71,931,836),44736=>array(60,-46,907,841),44737=>array(88,-68,912,836),44738=>array(88,-76,907,836),44739=>array(88,-44,921,836),44740=>array(88,-62,917,836),44741=>array(88,-64,907,836),44742=>array(88,-64,908,836),44743=>array(88,-64,908,836),44744=>array(88,-69,923,836),44745=>array(88,-64,908,836),44746=>array(88,-64,908,836),44747=>array(88,-76,906,836),44748=>array(88,-62,907,836),44749=>array(88,-61,907,836),44750=>array(88,-69,922,836),44751=>array(88,-74,929,836),44752=>array(88,-69,927,836),44753=>array(88,-68,911,836),44754=>array(88,-72,929,836),44755=>array(88,-70,936,836),44756=>array(88,-66,908,836),44757=>array(88,-59,916,836),44758=>array(88,-60,928,836),44759=>array(88,-68,908,836),44760=>array(36,-68,907,843),44761=>array(53,-61,907,843),44762=>array(53,-61,907,843),44763=>array(53,-71,931,843),44764=>array(35,-46,907,843),44765=>array(53,-68,912,843),44766=>array(53,-76,907,843),44767=>array(53,-44,921,843),44768=>array(53,-62,917,843),44769=>array(53,-64,907,843),44770=>array(53,-64,908,843),44771=>array(53,-64,908,843),44772=>array(53,-69,923,843),44773=>array(53,-64,908,843),44774=>array(53,-64,908,843),44775=>array(53,-76,907,843),44776=>array(53,-62,907,843),44777=>array(53,-61,907,843),44778=>array(53,-69,922,843),44779=>array(53,-74,929,843),44780=>array(53,-69,927,843),44781=>array(53,-68,911,843),44782=>array(53,-72,929,843),44783=>array(53,-70,936,843),44784=>array(53,-66,908,843),44785=>array(53,-59,916,843),44786=>array(53,-60,928,843),44787=>array(53,-68,908,843),44788=>array(46,-69,908,842),44789=>array(88,-61,909,842),44790=>array(88,-61,909,842),44791=>array(88,-71,931,842),44792=>array(60,-46,909,841),44793=>array(88,-68,912,842),44794=>array(88,-76,909,842),44795=>array(88,-44,921,842),44796=>array(88,-62,917,842),44797=>array(88,-64,909,842),44798=>array(88,-64,909,842),44799=>array(88,-64,909,842),44800=>array(88,-69,923,842),44801=>array(88,-64,909,842),44802=>array(88,-64,909,842),44803=>array(88,-76,909,842),44804=>array(88,-62,909,842),44805=>array(88,-61,909,842),44806=>array(88,-69,922,842),44807=>array(88,-74,929,842),44808=>array(88,-69,927,842),44809=>array(88,-68,911,842),44810=>array(88,-72,929,842),44811=>array(88,-70,936,842),44812=>array(88,-66,909,842),44813=>array(88,-59,916,842),44814=>array(88,-60,928,842),44815=>array(88,-68,909,842),44816=>array(36,-68,907,843),44817=>array(53,-61,907,838),44818=>array(53,-61,907,838),44819=>array(53,-71,931,838),44820=>array(35,-46,907,843),44821=>array(53,-68,912,838),44822=>array(53,-76,907,838),44823=>array(53,-44,921,838),44824=>array(53,-62,917,838),44825=>array(53,-64,907,838),44826=>array(53,-64,908,838),44827=>array(53,-64,908,838),44828=>array(53,-69,923,838),44829=>array(53,-64,908,838),44830=>array(53,-64,908,838),44831=>array(53,-76,907,838),44832=>array(53,-62,907,838),44833=>array(53,-61,907,838),44834=>array(53,-69,922,838),44835=>array(53,-74,929,838),44836=>array(53,-69,927,838),44837=>array(53,-68,911,838),44838=>array(53,-72,929,838),44839=>array(53,-70,936,838),44840=>array(53,-66,908,838),44841=>array(53,-59,916,838),44842=>array(53,-60,928,838),44843=>array(53,-68,908,838),44844=>array(60,12,940,714),44845=>array(79,-61,921,767),44846=>array(79,-61,921,767),44847=>array(79,-71,921,767),44848=>array(79,-46,921,766),44849=>array(79,-68,921,767),44850=>array(79,-74,921,767),44851=>array(79,-44,921,767),44852=>array(79,-62,921,767),44853=>array(79,-64,921,767),44854=>array(79,-64,921,767),44855=>array(79,-63,921,767),44856=>array(79,-68,921,767),44857=>array(79,-64,921,767),44858=>array(79,-63,921,767),44859=>array(79,-74,921,767),44860=>array(79,-62,921,767),44861=>array(79,-61,921,767),44862=>array(79,-69,921,767),44863=>array(79,-74,921,767),44864=>array(79,-69,921,767),44865=>array(79,-68,921,767),44866=>array(79,-72,921,767),44867=>array(79,-70,921,767),44868=>array(79,-66,921,767),44869=>array(79,-59,921,767),44870=>array(79,-60,921,767),44871=>array(79,-68,921,767),44872=>array(52,-69,936,842),44873=>array(69,-59,936,837),44874=>array(69,-61,936,837),44875=>array(69,-71,936,837),44876=>array(72,-45,936,842),44877=>array(69,-69,936,837),44878=>array(69,-76,936,837),44879=>array(69,-44,936,837),44880=>array(69,-62,936,837),44881=>array(69,-64,936,837),44882=>array(69,-64,936,837),44883=>array(69,-64,936,837),44884=>array(69,-70,936,837),44885=>array(69,-64,936,837),44886=>array(69,-64,936,837),44887=>array(69,-76,936,837),44888=>array(69,-62,936,837),44889=>array(69,-61,936,837),44890=>array(69,-70,936,837),44891=>array(69,-74,936,837),44892=>array(69,-69,936,837),44893=>array(69,-67,936,837),44894=>array(69,-72,936,837),44895=>array(69,-71,936,837),44896=>array(69,-66,936,837),44897=>array(69,-59,936,837),44898=>array(69,-60,936,837),44899=>array(69,-69,936,837),44900=>array(68,-69,907,842),44901=>array(70,-61,907,842),44902=>array(70,-61,907,842),44903=>array(70,-71,931,842),44904=>array(57,-46,907,842),44905=>array(70,-68,912,842),44906=>array(70,-76,907,842),44907=>array(70,-44,921,842),44908=>array(70,-62,917,842),44909=>array(70,-64,907,842),44910=>array(70,-64,908,842),44911=>array(70,-64,908,842),44912=>array(70,-69,923,842),44913=>array(70,-64,908,842),44914=>array(70,-64,908,842),44915=>array(70,-76,907,842),44916=>array(70,-62,907,842),44917=>array(70,-61,907,842),44918=>array(70,-69,922,842),44919=>array(70,-74,929,842),44920=>array(70,-69,927,842),44921=>array(70,-68,911,842),44922=>array(70,-72,929,842),44923=>array(70,-70,936,842),44924=>array(70,-66,908,842),44925=>array(70,-59,916,842),44926=>array(70,-60,928,842),44927=>array(70,-68,908,842),44928=>array(78,-69,907,842),44929=>array(64,-61,907,842),44930=>array(64,-61,907,842),44931=>array(64,-71,931,842),44932=>array(69,-46,907,842),44933=>array(64,-68,912,842),44934=>array(64,-76,907,842),44935=>array(64,-44,921,842),44936=>array(64,-62,917,842),44937=>array(64,-64,907,842),44938=>array(64,-64,908,842),44939=>array(64,-64,908,842),44940=>array(64,-69,923,842),44941=>array(64,-64,908,842),44942=>array(64,-64,908,842),44943=>array(64,-76,907,842),44944=>array(64,-62,907,842),44945=>array(64,-61,907,842),44946=>array(64,-69,922,842),44947=>array(64,-74,929,842),44948=>array(64,-69,927,842),44949=>array(64,-68,911,842),44950=>array(64,-72,929,842),44951=>array(64,-70,936,842),44952=>array(64,-66,908,842),44953=>array(64,-59,916,842),44954=>array(64,-60,928,842),44955=>array(64,-68,908,842),44956=>array(60,32,940,714),44957=>array(79,-61,921,794),44958=>array(79,-61,921,794),44959=>array(79,-71,921,794),44960=>array(79,-46,921,785),44961=>array(79,-68,921,794),44962=>array(79,-74,921,794),44963=>array(79,-44,921,794),44964=>array(79,-62,921,794),44965=>array(79,-64,921,794),44966=>array(79,-64,921,794),44967=>array(79,-63,921,794),44968=>array(79,-68,921,794),44969=>array(79,-64,921,794),44970=>array(79,-63,921,794),44971=>array(79,-74,921,794),44972=>array(79,-62,921,794),44973=>array(79,-61,921,794),44974=>array(79,-69,921,794),44975=>array(79,-74,921,794),44976=>array(79,-69,921,794),44977=>array(79,-68,921,794),44978=>array(79,-72,921,794),44979=>array(79,-70,921,794),44980=>array(79,-66,921,794),44981=>array(79,-59,921,794),44982=>array(79,-60,921,794),44983=>array(79,-68,921,794),44984=>array(79,-64,921,776),44985=>array(79,-61,921,766),44986=>array(79,-61,921,766),44987=>array(79,-71,921,766),44988=>array(79,-46,921,767),44989=>array(79,-68,921,766),44990=>array(79,-74,921,766),44991=>array(79,-44,921,766),44992=>array(79,-62,921,766),44993=>array(79,-64,921,766),44994=>array(79,-64,921,766),44995=>array(79,-63,921,766),44996=>array(79,-68,921,766),44997=>array(79,-64,921,766),44998=>array(79,-63,921,766),44999=>array(79,-74,921,766),45000=>array(79,-62,921,766),45001=>array(79,-61,921,766),45002=>array(79,-69,921,766),45003=>array(79,-74,921,766),45004=>array(79,-69,921,766),45005=>array(79,-68,921,766),45006=>array(79,-72,921,766),45007=>array(79,-70,921,766),45008=>array(79,-66,921,766),45009=>array(79,-59,921,766),45010=>array(79,-60,921,766),45011=>array(79,-68,921,766),45012=>array(78,-70,907,841),45013=>array(68,-61,907,841),45014=>array(68,-61,907,841),45015=>array(68,-71,931,841),45016=>array(80,-46,907,841),45017=>array(68,-68,912,841),45018=>array(68,-76,907,841),45019=>array(68,-44,921,841),45020=>array(68,-62,917,841),45021=>array(68,-64,907,841),45022=>array(68,-64,908,841),45023=>array(68,-64,908,841),45024=>array(68,-69,923,841),45025=>array(68,-64,908,841),45026=>array(68,-64,908,841),45027=>array(68,-76,906,841),45028=>array(68,-62,907,841),45029=>array(68,-61,907,841),45030=>array(68,-69,922,841),45031=>array(68,-74,929,841),45032=>array(68,-69,927,841),45033=>array(68,-68,911,841),45034=>array(68,-72,929,841),45035=>array(68,-70,936,841),45036=>array(68,-66,908,841),45037=>array(68,-59,916,841),45038=>array(68,-60,928,841),45039=>array(68,-68,908,841),45040=>array(50,-68,912,843),45041=>array(67,-61,907,838),45042=>array(67,-61,907,838),45043=>array(67,-71,931,838),45044=>array(75,-46,907,843),45045=>array(67,-68,912,838),45046=>array(67,-76,907,838),45047=>array(67,-44,921,838),45048=>array(67,-62,917,838),45049=>array(67,-64,907,838),45050=>array(67,-64,908,838),45051=>array(67,-64,908,838),45052=>array(67,-69,923,838),45053=>array(67,-64,908,838),45054=>array(67,-64,908,838),45055=>array(67,-76,907,838),45056=>array(67,-62,907,838),45057=>array(67,-61,907,838),45058=>array(67,-69,922,838),45059=>array(67,-74,929,838),45060=>array(67,-69,927,838),45061=>array(67,-68,911,838),45062=>array(67,-72,929,838),45063=>array(67,-70,936,838),45064=>array(67,-66,908,838),45065=>array(67,-59,916,838),45066=>array(67,-60,928,838),45067=>array(67,-68,908,838),45068=>array(64,-69,907,842),45069=>array(65,-61,907,842),45070=>array(65,-61,907,842),45071=>array(65,-71,931,842),45072=>array(78,-46,907,842),45073=>array(65,-68,912,842),45074=>array(65,-76,907,842),45075=>array(65,-44,921,842),45076=>array(65,-62,917,842),45077=>array(65,-64,907,842),45078=>array(65,-64,908,842),45079=>array(65,-64,908,842),45080=>array(65,-69,923,842),45081=>array(65,-64,908,842),45082=>array(65,-64,908,842),45083=>array(65,-76,907,842),45084=>array(65,-62,907,842),45085=>array(65,-61,907,842),45086=>array(65,-69,922,842),45087=>array(65,-74,929,842),45088=>array(65,-69,927,842),45089=>array(65,-68,911,842),45090=>array(65,-72,929,842),45091=>array(65,-70,936,842),45092=>array(65,-66,908,842),45093=>array(65,-59,916,842),45094=>array(65,-60,928,842),45095=>array(65,-68,908,842),45096=>array(84,-64,921,776),45097=>array(79,-61,921,766),45098=>array(79,-61,921,766),45099=>array(79,-71,921,766),45100=>array(81,-46,922,767),45101=>array(79,-68,921,766),45102=>array(79,-74,921,766),45103=>array(79,-44,921,766),45104=>array(79,-62,921,766),45105=>array(79,-64,921,766),45106=>array(79,-64,921,766),45107=>array(79,-63,921,766),45108=>array(79,-68,921,766),45109=>array(79,-64,921,766),45110=>array(79,-63,921,766),45111=>array(79,-74,921,766),45112=>array(79,-62,921,766),45113=>array(79,-61,921,766),45114=>array(79,-69,921,766),45115=>array(79,-74,921,766),45116=>array(79,-69,921,766),45117=>array(79,-68,921,766),45118=>array(79,-72,921,766),45119=>array(79,-70,921,766),45120=>array(79,-66,921,766),45121=>array(79,-59,921,766),45122=>array(79,-60,921,766),45123=>array(79,-68,921,766),45124=>array(57,52,943,691),45125=>array(79,-61,921,767),45126=>array(79,-61,921,767),45127=>array(79,-71,921,767),45128=>array(79,-46,921,767),45129=>array(79,-68,921,767),45130=>array(79,-74,921,767),45131=>array(79,-44,921,767),45132=>array(79,-62,921,767),45133=>array(79,-64,921,767),45134=>array(79,-64,921,767),45135=>array(79,-63,921,767),45136=>array(79,-68,921,767),45137=>array(79,-64,921,767),45138=>array(79,-63,921,767),45139=>array(79,-74,921,767),45140=>array(79,-62,921,767),45141=>array(79,-61,921,767),45142=>array(79,-69,921,767),45143=>array(79,-74,921,767),45144=>array(79,-69,921,767),45145=>array(79,-68,921,767),45146=>array(79,-72,921,767),45147=>array(79,-70,921,767),45148=>array(79,-66,921,767),45149=>array(79,-59,921,767),45150=>array(79,-60,921,767),45151=>array(79,-68,921,767),45152=>array(66,-69,907,842),45153=>array(75,-61,907,842),45154=>array(75,-61,907,842),45155=>array(75,-71,931,842),45156=>array(74,-46,907,842),45157=>array(75,-68,912,842),45158=>array(75,-76,907,842),45159=>array(75,-44,921,842),45160=>array(75,-62,917,842),45161=>array(75,-64,907,842),45162=>array(75,-64,908,842),45163=>array(75,-64,908,842),45164=>array(75,-69,923,842),45165=>array(75,-64,908,842),45166=>array(75,-64,908,842),45167=>array(75,-76,907,842),45168=>array(75,-62,907,842),45169=>array(75,-61,907,842),45170=>array(75,-69,922,842),45171=>array(75,-74,929,842),45172=>array(75,-69,927,842),45173=>array(75,-68,911,842),45174=>array(75,-72,929,842),45175=>array(75,-70,936,842),45176=>array(75,-66,908,842),45177=>array(75,-59,916,842),45178=>array(75,-60,928,842),45179=>array(75,-68,908,842),45180=>array(56,-69,907,842),45181=>array(123,-61,907,842),45182=>array(123,-61,907,842),45183=>array(123,-71,931,842),45184=>array(105,-46,907,842),45185=>array(123,-68,912,842),45186=>array(123,-76,907,842),45187=>array(123,-44,921,842),45188=>array(123,-62,917,842),45189=>array(123,-64,907,842),45190=>array(123,-64,908,842),45191=>array(123,-64,908,842),45192=>array(123,-69,923,842),45193=>array(123,-64,908,842),45194=>array(123,-64,908,842),45195=>array(123,-76,907,842),45196=>array(123,-62,907,842),45197=>array(123,-61,907,842),45198=>array(123,-69,922,842),45199=>array(123,-74,929,842),45200=>array(123,-69,927,842),45201=>array(123,-68,911,842),45202=>array(123,-72,929,842),45203=>array(123,-70,936,842),45204=>array(123,-66,908,842),45205=>array(123,-59,916,842),45206=>array(123,-60,928,842),45207=>array(123,-68,908,842),45208=>array(109,-69,936,842),45209=>array(109,-59,936,842),45210=>array(109,-61,936,842),45211=>array(109,-71,936,842),45212=>array(109,-45,936,842),45213=>array(109,-69,936,842),45214=>array(109,-76,936,842),45215=>array(109,-44,936,842),45216=>array(109,-62,936,842),45217=>array(109,-64,936,842),45218=>array(109,-64,936,842),45219=>array(109,-64,936,842),45220=>array(109,-70,936,842),45221=>array(109,-64,936,842),45222=>array(109,-64,936,842),45223=>array(109,-76,936,842),45224=>array(109,-62,936,842),45225=>array(109,-61,936,842),45226=>array(109,-70,936,842),45227=>array(109,-74,936,842),45228=>array(109,-69,936,842),45229=>array(109,-67,936,842),45230=>array(109,-72,936,842),45231=>array(109,-71,936,842),45232=>array(109,-66,936,842),45233=>array(109,-59,936,842),45234=>array(109,-60,936,842),45235=>array(109,-69,936,842),45236=>array(133,-69,907,842),45237=>array(109,-61,907,842),45238=>array(109,-61,907,842),45239=>array(109,-71,931,842),45240=>array(109,-46,907,842),45241=>array(109,-68,912,842),45242=>array(109,-76,907,842),45243=>array(109,-44,921,842),45244=>array(109,-62,917,842),45245=>array(109,-64,907,842),45246=>array(109,-64,908,842),45247=>array(109,-64,908,842),45248=>array(109,-69,923,842),45249=>array(109,-64,908,842),45250=>array(109,-64,908,842),45251=>array(109,-76,907,842),45252=>array(109,-62,907,842),45253=>array(109,-61,907,842),45254=>array(109,-69,922,842),45255=>array(109,-74,929,842),45256=>array(109,-69,927,842),45257=>array(109,-68,911,842),45258=>array(109,-72,929,842),45259=>array(109,-70,936,842),45260=>array(109,-66,908,842),45261=>array(109,-59,916,842),45262=>array(109,-60,928,842),45263=>array(109,-68,908,842),45264=>array(109,-69,936,842),45265=>array(109,-59,936,842),45266=>array(109,-61,936,842),45267=>array(109,-71,936,842),45268=>array(109,-45,936,842),45269=>array(109,-69,936,842),45270=>array(109,-76,936,842),45271=>array(109,-44,936,842),45272=>array(109,-62,936,842),45273=>array(109,-64,936,842),45274=>array(109,-64,936,842),45275=>array(109,-64,936,842),45276=>array(109,-70,936,842),45277=>array(109,-64,936,842),45278=>array(109,-64,936,842),45279=>array(109,-76,936,842),45280=>array(109,-62,936,842),45281=>array(109,-61,936,842),45282=>array(109,-70,936,842),45283=>array(109,-74,936,842),45284=>array(109,-69,936,842),45285=>array(109,-67,936,842),45286=>array(109,-72,936,842),45287=>array(109,-71,936,842),45288=>array(109,-66,936,842),45289=>array(109,-59,936,842),45290=>array(109,-60,936,842),45291=>array(109,-69,936,842),45292=>array(133,-69,907,842),45293=>array(109,-61,907,842),45294=>array(109,-61,907,842),45295=>array(109,-71,931,842),45296=>array(109,-46,907,842),45297=>array(109,-68,912,842),45298=>array(109,-76,907,842),45299=>array(109,-44,921,842),45300=>array(109,-62,917,842),45301=>array(109,-64,907,842),45302=>array(109,-64,908,842),45303=>array(109,-64,908,842),45304=>array(109,-69,923,842),45305=>array(109,-64,908,842),45306=>array(109,-64,908,842),45307=>array(109,-76,907,842),45308=>array(109,-62,907,842),45309=>array(109,-61,907,842),45310=>array(109,-69,922,842),45311=>array(109,-74,929,842),45312=>array(109,-69,927,842),45313=>array(109,-68,911,842),45314=>array(109,-72,929,842),45315=>array(109,-70,936,842),45316=>array(109,-66,908,842),45317=>array(109,-59,916,842),45318=>array(109,-60,928,842),45319=>array(109,-68,908,842),45320=>array(109,-70,907,841),45321=>array(109,-61,907,841),45322=>array(109,-61,907,841),45323=>array(109,-71,931,841),45324=>array(109,-46,907,841),45325=>array(109,-68,912,841),45326=>array(109,-76,907,841),45327=>array(109,-44,921,841),45328=>array(109,-62,917,841),45329=>array(109,-64,907,841),45330=>array(109,-64,908,841),45331=>array(109,-64,908,841),45332=>array(109,-69,923,841),45333=>array(109,-64,908,841),45334=>array(109,-64,908,841),45335=>array(109,-76,906,841),45336=>array(109,-62,907,841),45337=>array(109,-61,907,841),45338=>array(109,-69,922,841),45339=>array(109,-74,929,841),45340=>array(109,-69,927,841),45341=>array(109,-68,911,841),45342=>array(109,-72,929,841),45343=>array(109,-70,936,841),45344=>array(109,-66,908,841),45345=>array(109,-59,916,841),45346=>array(109,-60,928,841),45347=>array(109,-68,908,841),45348=>array(134,-68,907,843),45349=>array(109,-61,907,843),45350=>array(109,-61,907,843),45351=>array(109,-71,931,843),45352=>array(109,-46,907,843),45353=>array(109,-68,912,843),45354=>array(109,-76,907,843),45355=>array(109,-44,921,843),45356=>array(109,-62,917,843),45357=>array(109,-64,907,843),45358=>array(109,-64,908,843),45359=>array(109,-64,908,843),45360=>array(109,-69,923,843),45361=>array(109,-64,908,843),45362=>array(109,-64,908,843),45363=>array(109,-76,907,843),45364=>array(109,-62,907,843),45365=>array(109,-61,907,843),45366=>array(109,-69,922,843),45367=>array(109,-74,929,843),45368=>array(109,-69,927,843),45369=>array(109,-68,911,843),45370=>array(109,-72,929,843),45371=>array(109,-70,936,843),45372=>array(109,-66,908,843),45373=>array(109,-59,916,843),45374=>array(109,-60,928,843),45375=>array(109,-68,908,843),45376=>array(109,-69,909,842),45377=>array(109,-61,907,842),45378=>array(109,-61,907,842),45379=>array(109,-71,931,842),45380=>array(109,-46,908,841),45381=>array(109,-68,912,842),45382=>array(109,-76,907,842),45383=>array(109,-44,921,842),45384=>array(109,-62,917,842),45385=>array(109,-64,907,842),45386=>array(109,-64,908,842),45387=>array(109,-64,908,842),45388=>array(109,-69,923,842),45389=>array(109,-64,908,842),45390=>array(109,-64,908,842),45391=>array(109,-76,907,842),45392=>array(109,-62,907,842),45393=>array(109,-61,907,842),45394=>array(109,-69,922,842),45395=>array(109,-74,929,842),45396=>array(109,-69,927,842),45397=>array(109,-68,911,842),45398=>array(109,-72,929,842),45399=>array(109,-70,936,842),45400=>array(109,-66,908,842),45401=>array(109,-59,916,842),45402=>array(109,-60,928,842),45403=>array(109,-68,908,842),45404=>array(144,-68,907,843),45405=>array(109,-61,907,838),45406=>array(109,-61,907,838),45407=>array(109,-71,931,838),45408=>array(109,-46,907,843),45409=>array(109,-68,912,838),45410=>array(109,-76,907,838),45411=>array(109,-44,921,838),45412=>array(109,-62,917,838),45413=>array(109,-64,907,838),45414=>array(109,-64,908,838),45415=>array(109,-64,908,838),45416=>array(109,-69,923,838),45417=>array(109,-64,908,838),45418=>array(109,-64,908,838),45419=>array(109,-76,907,838),45420=>array(109,-62,907,838),45421=>array(109,-61,907,838),45422=>array(109,-69,922,838),45423=>array(109,-74,929,838),45424=>array(109,-69,927,838),45425=>array(109,-68,911,838),45426=>array(109,-72,929,838),45427=>array(109,-70,936,838),45428=>array(109,-66,908,838),45429=>array(109,-59,916,838),45430=>array(109,-60,928,838),45431=>array(109,-68,908,838),45432=>array(62,27,943,732),45433=>array(79,-61,921,797),45434=>array(79,-61,921,797),45435=>array(79,-71,921,797),45436=>array(79,-46,921,792),45437=>array(79,-68,921,797),45438=>array(79,-74,921,797),45439=>array(79,-44,921,797),45440=>array(79,-62,921,797),45441=>array(79,-64,921,797),45442=>array(79,-64,921,797),45443=>array(79,-63,921,797),45444=>array(79,-68,921,797),45445=>array(79,-64,921,797),45446=>array(79,-63,921,797),45447=>array(79,-74,921,797),45448=>array(79,-62,921,797),45449=>array(79,-61,921,797),45450=>array(79,-69,921,797),45451=>array(79,-74,921,797),45452=>array(79,-69,921,797),45453=>array(79,-68,921,797),45454=>array(79,-72,921,797),45455=>array(79,-70,921,797),45456=>array(79,-66,921,797),45457=>array(79,-59,921,797),45458=>array(79,-60,921,797),45459=>array(79,-68,921,797),45460=>array(47,-69,936,842),45461=>array(64,-59,936,842),45462=>array(64,-61,936,842),45463=>array(64,-71,936,842),45464=>array(74,-45,936,842),45465=>array(64,-69,936,842),45466=>array(64,-76,936,842),45467=>array(64,-44,936,842),45468=>array(64,-62,936,842),45469=>array(64,-64,936,842),45470=>array(64,-64,936,842),45471=>array(64,-64,936,842),45472=>array(64,-70,936,842),45473=>array(64,-64,936,842),45474=>array(64,-64,936,842),45475=>array(64,-76,936,842),45476=>array(64,-62,936,842),45477=>array(64,-61,936,842),45478=>array(64,-70,936,842),45479=>array(64,-74,936,842),45480=>array(64,-69,936,842),45481=>array(64,-67,936,842),45482=>array(64,-72,936,842),45483=>array(64,-71,936,842),45484=>array(64,-66,936,842),45485=>array(64,-59,936,842),45486=>array(64,-60,936,842),45487=>array(64,-69,936,842),45488=>array(43,-68,907,843),45489=>array(79,-61,907,843),45490=>array(79,-61,907,843),45491=>array(79,-71,931,843),45492=>array(72,-46,907,842),45493=>array(79,-68,912,843),45494=>array(79,-76,907,843),45495=>array(79,-44,921,843),45496=>array(79,-62,917,843),45497=>array(79,-64,907,843),45498=>array(79,-64,908,843),45499=>array(79,-64,908,843),45500=>array(79,-69,923,843),45501=>array(79,-64,908,843),45502=>array(79,-64,908,843),45503=>array(79,-76,907,843),45504=>array(79,-62,907,843),45505=>array(79,-61,907,843),45506=>array(79,-69,922,843),45507=>array(79,-74,929,843),45508=>array(79,-69,927,843),45509=>array(79,-68,911,843),45510=>array(79,-72,929,843),45511=>array(79,-70,936,843),45512=>array(79,-66,908,843),45513=>array(79,-59,916,843),45514=>array(79,-60,928,843),45515=>array(79,-68,908,843),45516=>array(62,-69,907,842),45517=>array(64,-61,908,842),45518=>array(64,-61,908,842),45519=>array(64,-71,931,842),45520=>array(64,-46,908,841),45521=>array(64,-68,912,842),45522=>array(64,-76,908,842),45523=>array(64,-44,921,842),45524=>array(64,-62,917,842),45525=>array(64,-64,908,842),45526=>array(64,-64,908,842),45527=>array(64,-64,908,842),45528=>array(64,-69,923,842),45529=>array(64,-64,908,842),45530=>array(64,-64,908,842),45531=>array(64,-76,908,842),45532=>array(64,-62,908,842),45533=>array(64,-61,908,842),45534=>array(64,-69,922,842),45535=>array(64,-74,929,842),45536=>array(64,-69,927,842),45537=>array(64,-68,911,842),45538=>array(64,-72,929,842),45539=>array(64,-70,936,842),45540=>array(64,-66,908,842),45541=>array(64,-59,916,842),45542=>array(64,-60,928,842),45543=>array(64,-68,908,842),45544=>array(60,-13,940,742),45545=>array(79,-61,922,797),45546=>array(79,-61,922,797),45547=>array(79,-71,922,797),45548=>array(79,-46,922,797),45549=>array(79,-68,922,797),45550=>array(79,-74,922,797),45551=>array(79,-44,922,797),45552=>array(79,-62,922,797),45553=>array(79,-64,922,797),45554=>array(79,-64,922,797),45555=>array(79,-63,922,797),45556=>array(79,-68,922,797),45557=>array(79,-64,922,797),45558=>array(79,-63,922,797),45559=>array(79,-74,922,797),45560=>array(79,-62,922,797),45561=>array(79,-61,922,797),45562=>array(79,-69,922,797),45563=>array(79,-74,922,797),45564=>array(79,-69,922,797),45565=>array(79,-68,922,797),45566=>array(79,-72,922,797),45567=>array(79,-70,922,797),45568=>array(79,-66,922,797),45569=>array(79,-59,922,797),45570=>array(79,-60,922,797),45571=>array(79,-68,922,797),45572=>array(79,-64,921,797),45573=>array(79,-61,921,797),45574=>array(79,-61,921,797),45575=>array(79,-71,921,797),45576=>array(79,-46,921,797),45577=>array(79,-68,921,797),45578=>array(79,-74,921,797),45579=>array(79,-44,921,797),45580=>array(79,-62,921,797),45581=>array(79,-64,921,797),45582=>array(79,-64,921,797),45583=>array(79,-63,921,797),45584=>array(79,-68,921,797),45585=>array(79,-64,921,797),45586=>array(79,-63,921,797),45587=>array(79,-74,921,797),45588=>array(79,-62,921,797),45589=>array(79,-61,921,797),45590=>array(79,-69,921,797),45591=>array(79,-74,921,797),45592=>array(79,-69,921,797),45593=>array(79,-68,921,797),45594=>array(79,-72,921,797),45595=>array(79,-70,921,797),45596=>array(79,-66,921,797),45597=>array(79,-59,921,797),45598=>array(79,-60,921,797),45599=>array(79,-68,921,797),45600=>array(69,-69,909,842),45601=>array(79,-61,907,841),45602=>array(79,-61,907,841),45603=>array(79,-71,931,841),45604=>array(79,-46,907,841),45605=>array(79,-68,912,841),45606=>array(79,-76,907,841),45607=>array(79,-44,921,841),45608=>array(79,-62,917,841),45609=>array(79,-64,907,841),45610=>array(79,-64,908,841),45611=>array(79,-64,908,841),45612=>array(79,-69,923,841),45613=>array(79,-64,908,841),45614=>array(79,-64,908,841),45615=>array(79,-76,906,841),45616=>array(79,-62,907,841),45617=>array(79,-61,907,841),45618=>array(79,-69,922,841),45619=>array(79,-74,929,841),45620=>array(79,-69,927,841),45621=>array(79,-68,911,841),45622=>array(79,-72,929,841),45623=>array(79,-70,936,841),45624=>array(79,-66,908,841),45625=>array(79,-59,916,841),45626=>array(79,-60,928,841),45627=>array(79,-68,908,841),45628=>array(63,-68,907,843),45629=>array(72,-61,907,843),45630=>array(72,-61,907,843),45631=>array(72,-71,931,843),45632=>array(90,-46,907,843),45633=>array(72,-68,912,843),45634=>array(72,-76,907,843),45635=>array(72,-44,921,843),45636=>array(72,-62,917,843),45637=>array(72,-64,907,843),45638=>array(72,-64,908,843),45639=>array(72,-64,908,843),45640=>array(72,-69,923,843),45641=>array(72,-64,908,843),45642=>array(72,-64,908,843),45643=>array(72,-76,907,843),45644=>array(72,-62,907,843),45645=>array(72,-61,907,843),45646=>array(72,-69,922,843),45647=>array(72,-74,929,843),45648=>array(72,-69,927,843),45649=>array(72,-68,911,843),45650=>array(72,-72,929,843),45651=>array(72,-70,936,843),45652=>array(72,-66,908,843),45653=>array(72,-59,916,843),45654=>array(72,-60,928,843),45655=>array(72,-68,908,843),45656=>array(70,-68,910,843),45657=>array(64,-61,907,842),45658=>array(64,-61,907,842),45659=>array(64,-71,931,842),45660=>array(65,-46,907,841),45661=>array(64,-68,912,842),45662=>array(64,-76,907,842),45663=>array(64,-44,921,842),45664=>array(64,-62,917,842),45665=>array(64,-64,907,842),45666=>array(64,-64,908,842),45667=>array(64,-64,908,842),45668=>array(64,-69,923,842),45669=>array(64,-64,908,842),45670=>array(64,-64,908,842),45671=>array(64,-76,907,842),45672=>array(64,-62,907,842),45673=>array(64,-61,907,842),45674=>array(64,-69,922,842),45675=>array(64,-74,929,842),45676=>array(64,-69,927,842),45677=>array(64,-68,911,842),45678=>array(64,-72,929,842),45679=>array(64,-70,936,842),45680=>array(64,-66,908,842),45681=>array(64,-59,916,842),45682=>array(64,-60,928,842),45683=>array(64,-68,908,842),45684=>array(71,-64,928,797),45685=>array(79,-61,921,797),45686=>array(79,-61,921,797),45687=>array(79,-71,921,797),45688=>array(79,-46,921,797),45689=>array(79,-68,921,797),45690=>array(79,-74,921,797),45691=>array(79,-44,921,797),45692=>array(79,-62,921,797),45693=>array(79,-64,921,797),45694=>array(79,-64,921,797),45695=>array(79,-63,921,797),45696=>array(79,-68,921,797),45697=>array(79,-64,921,797),45698=>array(79,-63,921,797),45699=>array(79,-74,921,797),45700=>array(79,-62,921,797),45701=>array(79,-61,921,797),45702=>array(79,-69,921,797),45703=>array(79,-74,921,797),45704=>array(79,-69,921,797),45705=>array(79,-68,921,797),45706=>array(79,-72,921,797),45707=>array(79,-70,921,797),45708=>array(79,-66,921,797),45709=>array(79,-59,921,797),45710=>array(79,-60,921,797),45711=>array(79,-68,921,797),45712=>array(57,32,943,747),45713=>array(79,-61,921,802),45714=>array(79,-61,921,802),45715=>array(79,-71,921,802),45716=>array(79,-46,921,812),45717=>array(79,-68,921,802),45718=>array(79,-74,921,802),45719=>array(79,-44,921,802),45720=>array(79,-62,921,802),45721=>array(79,-64,921,802),45722=>array(79,-64,921,802),45723=>array(79,-63,921,802),45724=>array(79,-68,921,802),45725=>array(79,-64,921,802),45726=>array(79,-63,921,802),45727=>array(79,-74,921,802),45728=>array(79,-62,921,802),45729=>array(79,-61,921,802),45730=>array(79,-69,921,802),45731=>array(79,-74,921,802),45732=>array(79,-69,921,802),45733=>array(79,-68,921,802),45734=>array(79,-72,921,802),45735=>array(79,-70,921,802),45736=>array(79,-66,921,802),45737=>array(79,-59,921,802),45738=>array(79,-60,921,802),45739=>array(79,-68,921,802),45740=>array(68,-69,907,842),45741=>array(69,-61,907,842),45742=>array(69,-61,907,842),45743=>array(69,-71,931,842),45744=>array(65,-46,907,842),45745=>array(69,-68,912,842),45746=>array(69,-76,907,842),45747=>array(69,-44,921,842),45748=>array(69,-62,917,842),45749=>array(69,-64,907,842),45750=>array(69,-64,908,842),45751=>array(69,-64,908,842),45752=>array(69,-69,923,842),45753=>array(69,-64,908,842),45754=>array(69,-64,908,842),45755=>array(69,-76,907,842),45756=>array(69,-62,907,842),45757=>array(69,-61,907,842),45758=>array(69,-69,922,842),45759=>array(69,-74,929,842),45760=>array(69,-69,927,842),45761=>array(69,-68,911,842),45762=>array(69,-72,929,842),45763=>array(69,-70,936,842),45764=>array(69,-66,908,842),45765=>array(69,-59,916,842),45766=>array(69,-60,928,842),45767=>array(69,-68,908,842),45768=>array(138,-69,907,842),45769=>array(138,-61,907,842),45770=>array(138,-61,907,842),45771=>array(138,-71,931,842),45772=>array(138,-46,907,842),45773=>array(138,-68,912,842),45774=>array(138,-76,907,842),45775=>array(138,-44,921,842),45776=>array(138,-62,917,842),45777=>array(138,-64,907,842),45778=>array(138,-64,908,842),45779=>array(138,-64,908,842),45780=>array(138,-69,923,842),45781=>array(138,-64,908,842),45782=>array(138,-64,908,842),45783=>array(138,-76,907,842),45784=>array(138,-62,907,842),45785=>array(138,-61,907,842),45786=>array(138,-69,922,842),45787=>array(138,-74,929,842),45788=>array(138,-69,927,842),45789=>array(138,-68,911,842),45790=>array(138,-72,929,842),45791=>array(138,-70,936,842),45792=>array(138,-66,908,842),45793=>array(138,-59,916,842),45794=>array(138,-60,928,842),45795=>array(138,-68,908,842),45796=>array(109,-69,936,842),45797=>array(109,-59,936,837),45798=>array(109,-61,936,837),45799=>array(109,-71,936,837),45800=>array(109,-45,936,842),45801=>array(109,-69,936,837),45802=>array(109,-76,936,837),45803=>array(109,-44,936,837),45804=>array(109,-62,936,837),45805=>array(109,-64,936,837),45806=>array(109,-64,936,837),45807=>array(109,-64,936,837),45808=>array(109,-70,936,837),45809=>array(109,-64,936,837),45810=>array(109,-64,936,837),45811=>array(109,-76,936,837),45812=>array(109,-62,936,837),45813=>array(109,-61,936,837),45814=>array(109,-70,936,837),45815=>array(109,-74,936,837),45816=>array(109,-69,936,837),45817=>array(109,-67,936,837),45818=>array(109,-72,936,837),45819=>array(109,-71,936,837),45820=>array(109,-66,936,837),45821=>array(109,-59,936,837),45822=>array(109,-60,936,837),45823=>array(109,-69,936,837),45824=>array(109,-69,907,842),45825=>array(119,-61,907,842),45826=>array(119,-61,907,842),45827=>array(119,-71,931,842),45828=>array(119,-46,907,842),45829=>array(119,-68,912,842),45830=>array(119,-76,907,842),45831=>array(119,-44,921,842),45832=>array(119,-62,917,842),45833=>array(119,-64,907,842),45834=>array(119,-64,908,842),45835=>array(119,-64,908,842),45836=>array(119,-69,923,842),45837=>array(119,-64,908,842),45838=>array(119,-64,908,842),45839=>array(119,-76,907,842),45840=>array(119,-62,907,842),45841=>array(119,-61,907,842),45842=>array(119,-69,922,842),45843=>array(119,-74,929,842),45844=>array(119,-69,927,842),45845=>array(119,-68,911,842),45846=>array(119,-72,929,842),45847=>array(119,-70,936,842),45848=>array(119,-66,908,842),45849=>array(119,-59,916,842),45850=>array(119,-60,928,842),45851=>array(119,-68,908,842),45852=>array(109,-68,935,843),45853=>array(109,-59,936,842),45854=>array(109,-61,936,842),45855=>array(109,-71,936,842),45856=>array(109,-45,936,842),45857=>array(109,-69,936,842),45858=>array(109,-76,936,842),45859=>array(109,-44,936,842),45860=>array(109,-62,936,842),45861=>array(109,-64,936,842),45862=>array(109,-64,936,842),45863=>array(109,-64,936,842),45864=>array(109,-70,936,842),45865=>array(109,-64,936,842),45866=>array(109,-64,936,842),45867=>array(109,-76,936,842),45868=>array(109,-62,936,842),45869=>array(109,-61,936,842),45870=>array(109,-70,936,842),45871=>array(109,-74,936,842),45872=>array(109,-69,936,842),45873=>array(109,-67,936,842),45874=>array(109,-72,936,842),45875=>array(109,-71,936,842),45876=>array(109,-66,936,842),45877=>array(109,-59,936,842),45878=>array(109,-60,936,842),45879=>array(109,-69,936,842),45880=>array(109,-69,907,842),45881=>array(119,-61,907,842),45882=>array(119,-61,907,842),45883=>array(119,-71,931,842),45884=>array(119,-46,907,842),45885=>array(119,-68,912,842),45886=>array(119,-76,907,842),45887=>array(119,-44,921,842),45888=>array(119,-62,917,842),45889=>array(119,-64,907,842),45890=>array(119,-64,908,842),45891=>array(119,-64,908,842),45892=>array(119,-69,923,842),45893=>array(119,-64,908,842),45894=>array(119,-64,908,842),45895=>array(119,-76,907,842),45896=>array(119,-62,907,842),45897=>array(119,-61,907,842),45898=>array(119,-69,922,842),45899=>array(119,-74,929,842),45900=>array(119,-69,927,842),45901=>array(119,-68,911,842),45902=>array(119,-72,929,842),45903=>array(119,-70,936,842),45904=>array(119,-66,908,842),45905=>array(119,-59,916,842),45906=>array(119,-60,928,842),45907=>array(119,-68,908,842),45908=>array(109,-70,907,841),45909=>array(109,-61,907,841),45910=>array(109,-61,907,841),45911=>array(109,-71,931,841),45912=>array(109,-46,907,841),45913=>array(109,-68,912,841),45914=>array(109,-76,907,841),45915=>array(109,-44,921,841),45916=>array(109,-62,917,841),45917=>array(109,-64,907,841),45918=>array(109,-64,908,841),45919=>array(109,-64,908,841),45920=>array(109,-69,923,841),45921=>array(109,-64,908,841),45922=>array(109,-64,908,841),45923=>array(109,-76,906,841),45924=>array(109,-62,907,841),45925=>array(109,-61,907,841),45926=>array(109,-69,922,841),45927=>array(109,-74,929,841),45928=>array(109,-69,927,841),45929=>array(109,-68,911,841),45930=>array(109,-72,929,841),45931=>array(109,-70,936,841),45932=>array(109,-66,908,841),45933=>array(109,-59,916,841),45934=>array(109,-60,928,841),45935=>array(109,-68,908,841),45936=>array(109,-68,907,843),45937=>array(119,-61,907,843),45938=>array(119,-61,907,843),45939=>array(119,-71,931,843),45940=>array(119,-46,907,843),45941=>array(119,-68,912,843),45942=>array(119,-76,907,843),45943=>array(119,-44,921,843),45944=>array(119,-62,917,843),45945=>array(119,-64,907,843),45946=>array(119,-64,908,843),45947=>array(119,-64,908,843),45948=>array(119,-69,923,843),45949=>array(119,-64,908,843),45950=>array(119,-64,908,843),45951=>array(119,-76,907,843),45952=>array(119,-62,907,843),45953=>array(119,-61,907,843),45954=>array(119,-69,922,843),45955=>array(119,-74,929,843),45956=>array(119,-69,927,843),45957=>array(119,-68,911,843),45958=>array(119,-72,929,843),45959=>array(119,-70,936,843),45960=>array(119,-66,908,843),45961=>array(119,-59,916,843),45962=>array(119,-60,928,843),45963=>array(119,-68,908,843),45964=>array(109,-70,907,842),45965=>array(109,-61,908,842),45966=>array(109,-61,908,842),45967=>array(109,-71,931,842),45968=>array(109,-46,907,842),45969=>array(109,-68,912,842),45970=>array(109,-76,908,842),45971=>array(109,-44,921,842),45972=>array(109,-62,917,842),45973=>array(109,-64,908,842),45974=>array(109,-64,908,842),45975=>array(109,-64,908,842),45976=>array(109,-69,923,842),45977=>array(109,-64,908,842),45978=>array(109,-64,908,842),45979=>array(109,-76,908,842),45980=>array(109,-62,908,842),45981=>array(109,-61,908,842),45982=>array(109,-69,922,842),45983=>array(109,-74,929,842),45984=>array(109,-69,927,842),45985=>array(109,-68,911,842),45986=>array(109,-72,929,842),45987=>array(109,-70,936,842),45988=>array(109,-66,908,842),45989=>array(109,-59,916,842),45990=>array(109,-60,928,842),45991=>array(109,-68,908,842),45992=>array(109,-68,907,843),45993=>array(119,-61,907,843),45994=>array(119,-61,907,843),45995=>array(119,-71,931,843),45996=>array(119,-46,907,843),45997=>array(119,-68,912,843),45998=>array(119,-76,907,843),45999=>array(119,-44,921,843),46000=>array(119,-62,917,843),46001=>array(119,-64,907,843),46002=>array(119,-64,908,843),46003=>array(119,-64,908,843),46004=>array(119,-69,923,843),46005=>array(119,-64,908,843),46006=>array(119,-64,908,843),46007=>array(119,-76,907,843),46008=>array(119,-62,907,843),46009=>array(119,-61,907,843),46010=>array(119,-69,922,843),46011=>array(119,-74,929,843),46012=>array(119,-69,927,843),46013=>array(119,-68,911,843),46014=>array(119,-72,929,843),46015=>array(119,-70,936,843),46016=>array(119,-66,908,843),46017=>array(119,-59,916,843),46018=>array(119,-60,928,843),46019=>array(119,-68,908,843),46020=>array(62,-13,943,759),46021=>array(79,-61,921,790),46022=>array(79,-61,921,790),46023=>array(79,-71,921,790),46024=>array(79,-46,921,784),46025=>array(79,-68,921,790),46026=>array(79,-74,921,790),46027=>array(79,-44,921,790),46028=>array(79,-62,921,790),46029=>array(79,-64,921,790),46030=>array(79,-64,921,790),46031=>array(79,-63,921,790),46032=>array(79,-68,921,790),46033=>array(79,-64,921,790),46034=>array(79,-63,921,790),46035=>array(79,-74,921,790),46036=>array(79,-62,921,790),46037=>array(79,-61,921,790),46038=>array(79,-69,921,790),46039=>array(79,-74,921,790),46040=>array(79,-69,921,790),46041=>array(79,-68,921,790),46042=>array(79,-72,921,790),46043=>array(79,-70,921,790),46044=>array(79,-66,921,790),46045=>array(79,-59,921,790),46046=>array(79,-60,921,790),46047=>array(79,-68,921,790),46048=>array(47,-69,936,842),46049=>array(64,-59,936,842),46050=>array(64,-61,936,842),46051=>array(64,-71,936,842),46052=>array(74,-45,936,842),46053=>array(64,-69,936,842),46054=>array(64,-76,936,842),46055=>array(64,-44,936,842),46056=>array(64,-62,936,842),46057=>array(64,-64,936,842),46058=>array(64,-64,936,842),46059=>array(64,-64,936,842),46060=>array(64,-70,936,842),46061=>array(64,-64,936,842),46062=>array(64,-64,936,842),46063=>array(64,-76,936,842),46064=>array(64,-62,936,842),46065=>array(64,-61,936,842),46066=>array(64,-70,936,842),46067=>array(64,-74,936,842),46068=>array(64,-69,936,842),46069=>array(64,-67,936,842),46070=>array(64,-72,936,842),46071=>array(64,-71,936,842),46072=>array(64,-66,936,842),46073=>array(64,-59,936,842),46074=>array(64,-60,936,842),46075=>array(64,-69,936,842),46076=>array(61,-69,906,842),46077=>array(64,-61,907,842),46078=>array(64,-61,907,842),46079=>array(64,-71,931,842),46080=>array(53,-46,907,842),46081=>array(64,-68,912,842),46082=>array(64,-76,907,842),46083=>array(64,-44,921,842),46084=>array(64,-62,917,842),46085=>array(64,-64,907,842),46086=>array(64,-64,908,842),46087=>array(64,-64,908,842),46088=>array(64,-69,923,842),46089=>array(64,-64,908,842),46090=>array(64,-64,908,842),46091=>array(64,-76,907,842),46092=>array(64,-62,907,842),46093=>array(64,-61,907,842),46094=>array(64,-69,922,842),46095=>array(64,-74,929,842),46096=>array(64,-69,927,842),46097=>array(64,-68,911,842),46098=>array(64,-72,929,842),46099=>array(64,-70,936,842),46100=>array(64,-66,908,842),46101=>array(64,-59,916,842),46102=>array(64,-60,928,842),46103=>array(64,-68,908,842),46104=>array(62,-69,907,842),46105=>array(64,-61,907,842),46106=>array(64,-61,907,842),46107=>array(64,-71,931,842),46108=>array(64,-46,908,841),46109=>array(64,-68,912,842),46110=>array(64,-76,907,842),46111=>array(64,-44,921,842),46112=>array(64,-62,917,842),46113=>array(64,-64,907,842),46114=>array(64,-64,908,842),46115=>array(64,-64,908,842),46116=>array(64,-69,923,842),46117=>array(64,-64,908,842),46118=>array(64,-64,908,842),46119=>array(64,-76,907,842),46120=>array(64,-62,907,842),46121=>array(64,-61,907,842),46122=>array(64,-69,922,842),46123=>array(64,-74,929,842),46124=>array(64,-69,927,842),46125=>array(64,-68,911,842),46126=>array(64,-72,929,842),46127=>array(64,-70,936,842),46128=>array(64,-66,908,842),46129=>array(64,-59,916,842),46130=>array(64,-60,928,842),46131=>array(64,-68,908,842),46132=>array(60,-13,940,759),46133=>array(79,-61,921,785),46134=>array(79,-61,921,785),46135=>array(79,-71,921,785),46136=>array(79,-46,922,784),46137=>array(79,-68,921,785),46138=>array(79,-74,921,785),46139=>array(79,-44,921,785),46140=>array(79,-62,921,785),46141=>array(79,-64,921,785),46142=>array(79,-64,921,785),46143=>array(79,-63,921,785),46144=>array(79,-68,921,785),46145=>array(79,-64,921,785),46146=>array(79,-63,921,785),46147=>array(79,-74,921,785),46148=>array(79,-62,921,785),46149=>array(79,-61,921,785),46150=>array(79,-69,921,785),46151=>array(79,-74,921,785),46152=>array(79,-69,921,785),46153=>array(79,-68,921,785),46154=>array(79,-72,921,785),46155=>array(79,-70,921,785),46156=>array(79,-66,921,785),46157=>array(79,-59,921,785),46158=>array(79,-60,921,785),46159=>array(79,-68,921,785),46160=>array(79,-64,920,789),46161=>array(79,-61,921,785),46162=>array(79,-61,921,785),46163=>array(79,-71,921,785),46164=>array(79,-46,921,784),46165=>array(79,-68,921,785),46166=>array(79,-74,921,785),46167=>array(79,-44,921,785),46168=>array(79,-62,921,785),46169=>array(79,-64,921,785),46170=>array(79,-64,921,785),46171=>array(79,-63,921,785),46172=>array(79,-68,921,785),46173=>array(79,-64,921,785),46174=>array(79,-63,921,785),46175=>array(79,-74,921,785),46176=>array(79,-62,921,785),46177=>array(79,-61,921,785),46178=>array(79,-69,921,785),46179=>array(79,-74,921,785),46180=>array(79,-69,921,785),46181=>array(79,-68,921,785),46182=>array(79,-72,921,785),46183=>array(79,-70,921,785),46184=>array(79,-66,921,785),46185=>array(79,-59,921,785),46186=>array(79,-60,921,785),46187=>array(79,-68,921,785),46188=>array(68,-70,907,841),46189=>array(76,-61,907,841),46190=>array(76,-61,907,841),46191=>array(76,-71,931,841),46192=>array(75,-46,907,841),46193=>array(76,-68,912,841),46194=>array(76,-76,907,841),46195=>array(76,-44,921,841),46196=>array(76,-62,917,841),46197=>array(76,-64,907,841),46198=>array(76,-64,908,841),46199=>array(76,-64,908,841),46200=>array(76,-69,923,841),46201=>array(76,-64,908,841),46202=>array(76,-64,908,841),46203=>array(76,-76,906,841),46204=>array(76,-62,907,841),46205=>array(76,-61,907,841),46206=>array(76,-69,922,841),46207=>array(76,-74,929,841),46208=>array(76,-69,927,841),46209=>array(76,-68,911,841),46210=>array(76,-72,929,841),46211=>array(76,-70,936,841),46212=>array(76,-66,908,841),46213=>array(76,-59,916,841),46214=>array(76,-60,928,841),46215=>array(76,-68,908,841),46216=>array(52,-69,908,842),46217=>array(71,-61,907,843),46218=>array(71,-61,907,843),46219=>array(71,-71,931,843),46220=>array(79,-46,907,843),46221=>array(71,-68,912,843),46222=>array(71,-76,907,843),46223=>array(71,-44,921,843),46224=>array(71,-62,917,843),46225=>array(71,-64,907,843),46226=>array(71,-64,908,843),46227=>array(71,-64,908,843),46228=>array(71,-69,923,843),46229=>array(71,-64,908,843),46230=>array(71,-64,908,843),46231=>array(71,-76,907,843),46232=>array(71,-62,907,843),46233=>array(71,-61,907,843),46234=>array(71,-69,922,843),46235=>array(71,-74,929,843),46236=>array(71,-69,927,843),46237=>array(71,-68,911,843),46238=>array(71,-72,929,843),46239=>array(71,-70,936,843),46240=>array(71,-66,908,843),46241=>array(71,-59,916,843),46242=>array(71,-60,928,843),46243=>array(71,-68,908,843),46244=>array(70,-69,907,842),46245=>array(64,-61,907,842),46246=>array(64,-61,907,842),46247=>array(64,-71,931,842),46248=>array(65,-46,907,843),46249=>array(64,-68,912,842),46250=>array(64,-76,907,842),46251=>array(64,-44,921,842),46252=>array(64,-62,917,842),46253=>array(64,-64,907,842),46254=>array(64,-64,908,842),46255=>array(64,-64,908,842),46256=>array(64,-69,923,842),46257=>array(64,-64,908,842),46258=>array(64,-64,908,842),46259=>array(64,-76,907,842),46260=>array(64,-62,907,842),46261=>array(64,-61,907,842),46262=>array(64,-69,922,842),46263=>array(64,-74,929,842),46264=>array(64,-69,927,842),46265=>array(64,-68,911,842),46266=>array(64,-72,929,842),46267=>array(64,-70,936,842),46268=>array(64,-66,908,842),46269=>array(64,-59,916,842),46270=>array(64,-60,928,842),46271=>array(64,-68,908,842),46272=>array(71,-64,928,784),46273=>array(79,-61,921,785),46274=>array(79,-61,921,785),46275=>array(79,-71,921,785),46276=>array(79,-46,921,784),46277=>array(79,-68,921,785),46278=>array(79,-74,921,785),46279=>array(79,-44,921,785),46280=>array(79,-62,921,785),46281=>array(79,-64,921,785),46282=>array(79,-64,921,785),46283=>array(79,-63,921,785),46284=>array(79,-68,921,785),46285=>array(79,-64,921,785),46286=>array(79,-63,921,785),46287=>array(79,-74,921,785),46288=>array(79,-62,921,785),46289=>array(79,-61,921,785),46290=>array(79,-69,921,785),46291=>array(79,-74,921,785),46292=>array(79,-69,921,785),46293=>array(79,-68,921,785),46294=>array(79,-72,921,785),46295=>array(79,-70,921,785),46296=>array(79,-66,921,785),46297=>array(79,-59,921,785),46298=>array(79,-60,921,785),46299=>array(79,-68,921,785),46300=>array(57,42,943,709),46301=>array(79,-61,921,784),46302=>array(79,-61,921,784),46303=>array(79,-71,921,784),46304=>array(79,-46,921,784),46305=>array(79,-68,921,784),46306=>array(79,-74,921,784),46307=>array(79,-44,921,784),46308=>array(79,-62,921,784),46309=>array(79,-64,921,784),46310=>array(79,-64,921,784),46311=>array(79,-63,921,784),46312=>array(79,-68,921,784),46313=>array(79,-64,921,784),46314=>array(79,-63,921,784),46315=>array(79,-74,921,784),46316=>array(79,-62,921,784),46317=>array(79,-61,921,784),46318=>array(79,-69,921,784),46319=>array(79,-74,921,784),46320=>array(79,-69,921,784),46321=>array(79,-68,921,784),46322=>array(79,-72,921,784),46323=>array(79,-70,921,784),46324=>array(79,-66,921,784),46325=>array(79,-59,921,784),46326=>array(79,-60,921,784),46327=>array(79,-68,921,784),46328=>array(66,-69,907,842),46329=>array(64,-61,907,842),46330=>array(64,-61,907,842),46331=>array(64,-71,931,842),46332=>array(64,-46,907,842),46333=>array(64,-68,912,842),46334=>array(64,-76,907,842),46335=>array(64,-44,921,842),46336=>array(64,-62,917,842),46337=>array(64,-64,907,842),46338=>array(64,-64,908,842),46339=>array(64,-64,908,842),46340=>array(64,-69,923,842),46341=>array(64,-64,908,842),46342=>array(64,-64,908,842),46343=>array(64,-76,907,842),46344=>array(64,-62,907,842),46345=>array(64,-61,907,842),46346=>array(64,-69,922,842),46347=>array(64,-74,929,842),46348=>array(64,-69,927,842),46349=>array(64,-68,911,842),46350=>array(64,-72,929,842),46351=>array(64,-70,936,842),46352=>array(64,-66,908,842),46353=>array(64,-59,916,842),46354=>array(64,-60,928,842),46355=>array(64,-68,908,842),46356=>array(119,-69,907,842),46357=>array(124,-61,907,842),46358=>array(124,-61,907,842),46359=>array(124,-71,931,842),46360=>array(124,-46,907,842),46361=>array(124,-68,912,842),46362=>array(124,-76,907,842),46363=>array(124,-44,921,842),46364=>array(124,-62,917,842),46365=>array(124,-64,907,842),46366=>array(124,-64,908,842),46367=>array(124,-64,908,842),46368=>array(124,-69,923,842),46369=>array(124,-64,908,842),46370=>array(124,-64,908,842),46371=>array(124,-76,907,842),46372=>array(124,-62,907,842),46373=>array(124,-61,907,842),46374=>array(124,-69,922,842),46375=>array(124,-74,929,842),46376=>array(124,-69,927,842),46377=>array(124,-68,911,842),46378=>array(124,-72,929,842),46379=>array(124,-70,936,842),46380=>array(124,-66,908,842),46381=>array(124,-59,916,842),46382=>array(124,-60,928,842),46383=>array(124,-68,908,842),46384=>array(94,-69,936,842),46385=>array(94,-59,936,842),46386=>array(94,-61,936,842),46387=>array(94,-71,936,842),46388=>array(94,-45,936,842),46389=>array(94,-69,936,842),46390=>array(94,-76,936,842),46391=>array(94,-44,936,842),46392=>array(94,-62,936,842),46393=>array(94,-64,936,842),46394=>array(94,-64,936,842),46395=>array(94,-64,936,842),46396=>array(94,-70,936,842),46397=>array(94,-64,936,842),46398=>array(94,-64,936,842),46399=>array(94,-76,936,842),46400=>array(94,-62,936,842),46401=>array(94,-61,936,842),46402=>array(94,-70,936,842),46403=>array(94,-74,936,842),46404=>array(94,-69,936,842),46405=>array(94,-67,936,842),46406=>array(94,-72,936,842),46407=>array(94,-71,936,842),46408=>array(94,-66,936,842),46409=>array(94,-59,936,842),46410=>array(94,-60,936,842),46411=>array(94,-69,936,842),46412=>array(99,-69,907,842),46413=>array(99,-61,907,837),46414=>array(99,-61,907,837),46415=>array(99,-71,931,837),46416=>array(99,-46,907,842),46417=>array(99,-68,912,837),46418=>array(99,-76,907,837),46419=>array(99,-44,921,837),46420=>array(99,-62,917,837),46421=>array(99,-64,907,837),46422=>array(99,-64,908,837),46423=>array(99,-64,908,837),46424=>array(99,-69,923,837),46425=>array(99,-64,908,837),46426=>array(99,-64,908,837),46427=>array(99,-76,907,837),46428=>array(99,-62,907,837),46429=>array(99,-61,907,837),46430=>array(99,-69,922,837),46431=>array(99,-74,929,837),46432=>array(99,-69,927,837),46433=>array(99,-68,911,837),46434=>array(99,-72,929,837),46435=>array(99,-70,936,837),46436=>array(99,-66,908,837),46437=>array(99,-59,916,837),46438=>array(99,-60,928,837),46439=>array(99,-68,908,837),46440=>array(94,-69,936,842),46441=>array(94,-59,936,842),46442=>array(94,-61,936,842),46443=>array(94,-71,936,842),46444=>array(94,-45,936,842),46445=>array(94,-69,936,842),46446=>array(94,-76,936,842),46447=>array(94,-44,936,842),46448=>array(94,-62,936,842),46449=>array(94,-64,936,842),46450=>array(94,-64,936,842),46451=>array(94,-64,936,842),46452=>array(94,-70,936,842),46453=>array(94,-64,936,842),46454=>array(94,-64,936,842),46455=>array(94,-76,936,842),46456=>array(94,-62,936,842),46457=>array(94,-61,936,842),46458=>array(94,-70,936,842),46459=>array(94,-74,936,842),46460=>array(94,-69,936,842),46461=>array(94,-67,936,842),46462=>array(94,-72,936,842),46463=>array(94,-71,936,842),46464=>array(94,-66,936,842),46465=>array(94,-59,936,842),46466=>array(94,-60,936,842),46467=>array(94,-69,936,842),46468=>array(99,-69,907,842),46469=>array(99,-61,907,842),46470=>array(99,-61,907,842),46471=>array(99,-71,931,842),46472=>array(99,-46,907,842),46473=>array(99,-68,912,842),46474=>array(99,-76,907,842),46475=>array(99,-44,921,842),46476=>array(99,-62,917,842),46477=>array(99,-64,907,842),46478=>array(99,-64,908,842),46479=>array(99,-64,908,842),46480=>array(99,-69,923,842),46481=>array(99,-64,908,842),46482=>array(99,-64,908,842),46483=>array(99,-76,907,842),46484=>array(99,-62,907,842),46485=>array(99,-61,907,842),46486=>array(99,-69,922,842),46487=>array(99,-74,929,842),46488=>array(99,-69,927,842),46489=>array(99,-68,911,842),46490=>array(99,-72,929,842),46491=>array(99,-70,936,842),46492=>array(99,-66,908,842),46493=>array(99,-59,916,842),46494=>array(99,-60,928,842),46495=>array(99,-68,908,842),46496=>array(94,-70,907,841),46497=>array(94,-61,907,836),46498=>array(94,-61,907,836),46499=>array(94,-71,931,836),46500=>array(94,-46,907,841),46501=>array(94,-68,912,836),46502=>array(94,-76,907,836),46503=>array(94,-44,921,836),46504=>array(94,-62,917,836),46505=>array(94,-64,907,836),46506=>array(94,-64,908,836),46507=>array(94,-64,908,836),46508=>array(94,-69,923,836),46509=>array(94,-64,908,836),46510=>array(94,-64,908,836),46511=>array(94,-76,906,836),46512=>array(94,-62,907,836),46513=>array(94,-61,907,836),46514=>array(94,-69,922,836),46515=>array(94,-74,929,836),46516=>array(94,-69,927,836),46517=>array(94,-68,911,836),46518=>array(94,-72,929,836),46519=>array(94,-70,936,836),46520=>array(94,-66,908,836),46521=>array(94,-59,916,836),46522=>array(94,-60,928,836),46523=>array(94,-68,908,836),46524=>array(99,-68,907,843),46525=>array(99,-61,907,843),46526=>array(99,-61,907,843),46527=>array(99,-71,931,843),46528=>array(99,-46,907,843),46529=>array(99,-68,912,843),46530=>array(99,-76,907,843),46531=>array(99,-44,921,843),46532=>array(99,-62,917,843),46533=>array(99,-64,907,843),46534=>array(99,-64,908,843),46535=>array(99,-64,908,843),46536=>array(99,-69,923,843),46537=>array(99,-64,908,843),46538=>array(99,-64,908,843),46539=>array(99,-76,907,843),46540=>array(99,-62,907,843),46541=>array(99,-61,907,843),46542=>array(99,-69,922,843),46543=>array(99,-74,929,843),46544=>array(99,-69,927,843),46545=>array(99,-68,911,843),46546=>array(99,-72,929,843),46547=>array(99,-70,936,843),46548=>array(99,-66,908,843),46549=>array(99,-59,916,843),46550=>array(99,-60,928,843),46551=>array(99,-68,908,843),46552=>array(94,-69,907,842),46553=>array(94,-61,907,842),46554=>array(94,-61,907,842),46555=>array(94,-71,931,842),46556=>array(94,-46,908,842),46557=>array(94,-68,912,842),46558=>array(94,-76,907,842),46559=>array(94,-44,921,842),46560=>array(94,-62,917,842),46561=>array(94,-64,907,842),46562=>array(94,-64,908,842),46563=>array(94,-64,908,842),46564=>array(94,-69,923,842),46565=>array(94,-64,908,842),46566=>array(94,-64,908,842),46567=>array(94,-76,907,842),46568=>array(94,-62,907,842),46569=>array(94,-61,907,842),46570=>array(94,-69,922,842),46571=>array(94,-74,929,842),46572=>array(94,-69,927,842),46573=>array(94,-68,911,842),46574=>array(94,-72,929,842),46575=>array(94,-70,936,842),46576=>array(94,-66,908,842),46577=>array(94,-59,916,842),46578=>array(94,-60,928,842),46579=>array(94,-68,908,842),46580=>array(99,-68,907,843),46581=>array(94,-61,907,843),46582=>array(94,-61,907,843),46583=>array(94,-71,931,843),46584=>array(94,-46,907,843),46585=>array(94,-68,912,843),46586=>array(94,-76,907,843),46587=>array(94,-44,921,843),46588=>array(94,-62,917,843),46589=>array(94,-64,907,843),46590=>array(94,-64,908,843),46591=>array(94,-64,908,843),46592=>array(94,-69,923,843),46593=>array(94,-64,908,843),46594=>array(94,-64,908,843),46595=>array(94,-76,907,843),46596=>array(94,-62,907,843),46597=>array(94,-61,907,843),46598=>array(94,-69,922,843),46599=>array(94,-74,929,843),46600=>array(94,-69,927,843),46601=>array(94,-68,911,843),46602=>array(94,-72,929,843),46603=>array(94,-70,936,843),46604=>array(94,-66,908,843),46605=>array(94,-59,916,843),46606=>array(94,-60,928,843),46607=>array(94,-68,908,843),46608=>array(60,12,940,740),46609=>array(79,-61,921,795),46610=>array(79,-61,921,795),46611=>array(79,-71,921,795),46612=>array(79,-46,921,795),46613=>array(79,-68,921,795),46614=>array(79,-74,921,795),46615=>array(79,-44,921,795),46616=>array(79,-62,921,795),46617=>array(79,-64,921,795),46618=>array(79,-64,921,795),46619=>array(79,-63,921,795),46620=>array(79,-68,921,795),46621=>array(79,-64,921,795),46622=>array(79,-63,921,795),46623=>array(79,-74,921,795),46624=>array(79,-62,921,795),46625=>array(79,-61,921,795),46626=>array(79,-69,921,795),46627=>array(79,-74,921,795),46628=>array(79,-69,921,795),46629=>array(79,-68,921,795),46630=>array(79,-72,921,795),46631=>array(79,-70,921,795),46632=>array(79,-66,921,795),46633=>array(79,-59,921,795),46634=>array(79,-60,921,795),46635=>array(79,-68,921,795),46636=>array(68,-69,935,842),46637=>array(69,-59,936,837),46638=>array(69,-61,936,837),46639=>array(69,-71,936,837),46640=>array(57,-45,936,842),46641=>array(69,-69,936,837),46642=>array(69,-76,936,837),46643=>array(69,-44,936,837),46644=>array(69,-62,936,837),46645=>array(69,-64,936,837),46646=>array(69,-64,936,837),46647=>array(69,-64,936,837),46648=>array(69,-70,936,837),46649=>array(69,-64,936,837),46650=>array(69,-64,936,837),46651=>array(69,-76,936,837),46652=>array(69,-62,936,837),46653=>array(69,-61,936,837),46654=>array(69,-70,936,837),46655=>array(69,-74,936,837),46656=>array(69,-69,936,837),46657=>array(69,-67,936,837),46658=>array(69,-72,936,837),46659=>array(69,-71,936,837),46660=>array(69,-66,936,837),46661=>array(69,-59,936,837),46662=>array(69,-60,936,837),46663=>array(69,-69,936,837),46664=>array(64,-69,906,842),46665=>array(70,-61,907,842),46666=>array(70,-61,907,842),46667=>array(70,-71,931,842),46668=>array(57,-46,907,842),46669=>array(70,-68,912,842),46670=>array(70,-76,907,842),46671=>array(70,-44,921,842),46672=>array(70,-62,917,842),46673=>array(70,-64,907,842),46674=>array(70,-64,908,842),46675=>array(70,-64,908,842),46676=>array(70,-69,923,842),46677=>array(70,-64,908,842),46678=>array(70,-64,908,842),46679=>array(70,-76,907,842),46680=>array(70,-62,907,842),46681=>array(70,-61,907,842),46682=>array(70,-69,922,842),46683=>array(70,-74,929,842),46684=>array(70,-69,927,842),46685=>array(70,-68,911,842),46686=>array(70,-72,929,842),46687=>array(70,-70,936,842),46688=>array(70,-66,908,842),46689=>array(70,-59,916,842),46690=>array(70,-60,928,842),46691=>array(70,-68,908,842),46692=>array(83,-69,906,842),46693=>array(64,-61,907,842),46694=>array(64,-61,907,842),46695=>array(64,-71,931,842),46696=>array(64,-46,907,842),46697=>array(64,-68,912,842),46698=>array(64,-76,907,842),46699=>array(64,-44,921,842),46700=>array(64,-62,917,842),46701=>array(64,-64,907,842),46702=>array(64,-64,908,842),46703=>array(64,-64,908,842),46704=>array(64,-69,923,842),46705=>array(64,-64,908,842),46706=>array(64,-64,908,842),46707=>array(64,-76,906,842),46708=>array(64,-62,907,842),46709=>array(64,-61,907,842),46710=>array(64,-69,922,842),46711=>array(64,-74,929,842),46712=>array(64,-69,927,842),46713=>array(64,-68,911,842),46714=>array(64,-72,929,842),46715=>array(64,-70,936,842),46716=>array(64,-66,908,842),46717=>array(64,-59,916,842),46718=>array(64,-60,928,842),46719=>array(64,-68,908,842),46720=>array(59,-13,939,750),46721=>array(79,-61,921,795),46722=>array(79,-61,921,795),46723=>array(79,-71,921,795),46724=>array(79,-46,921,795),46725=>array(79,-68,921,795),46726=>array(79,-74,921,795),46727=>array(79,-44,921,795),46728=>array(79,-62,921,795),46729=>array(79,-64,921,795),46730=>array(79,-64,921,795),46731=>array(79,-63,921,795),46732=>array(79,-68,921,795),46733=>array(79,-64,921,795),46734=>array(79,-63,921,795),46735=>array(79,-74,921,795),46736=>array(79,-62,921,795),46737=>array(79,-61,921,795),46738=>array(79,-69,921,795),46739=>array(79,-74,921,795),46740=>array(79,-69,921,795),46741=>array(79,-68,921,795),46742=>array(79,-72,921,795),46743=>array(79,-70,921,795),46744=>array(79,-66,921,795),46745=>array(79,-59,921,795),46746=>array(79,-60,921,795),46747=>array(79,-68,921,795),46748=>array(79,-64,921,785),46749=>array(79,-61,921,795),46750=>array(79,-61,921,795),46751=>array(79,-71,921,795),46752=>array(79,-46,921,795),46753=>array(79,-68,921,795),46754=>array(79,-74,921,795),46755=>array(79,-44,921,795),46756=>array(79,-62,921,795),46757=>array(79,-64,921,795),46758=>array(79,-64,921,795),46759=>array(79,-63,921,795),46760=>array(79,-68,921,795),46761=>array(79,-64,921,795),46762=>array(79,-63,921,795),46763=>array(79,-74,921,795),46764=>array(79,-62,921,795),46765=>array(79,-61,921,795),46766=>array(79,-69,921,795),46767=>array(79,-74,921,795),46768=>array(79,-69,921,795),46769=>array(79,-68,921,795),46770=>array(79,-72,921,795),46771=>array(79,-70,921,795),46772=>array(79,-66,921,795),46773=>array(79,-59,921,795),46774=>array(79,-60,921,795),46775=>array(79,-68,921,795),46776=>array(72,-70,907,841),46777=>array(67,-61,907,841),46778=>array(67,-61,907,841),46779=>array(67,-71,931,841),46780=>array(63,-46,907,841),46781=>array(67,-68,912,841),46782=>array(67,-76,907,841),46783=>array(67,-44,921,841),46784=>array(67,-62,917,841),46785=>array(67,-64,907,841),46786=>array(67,-64,908,841),46787=>array(67,-64,908,841),46788=>array(67,-69,923,841),46789=>array(67,-64,908,841),46790=>array(67,-64,908,841),46791=>array(67,-76,906,841),46792=>array(67,-62,907,841),46793=>array(67,-61,907,841),46794=>array(67,-69,922,841),46795=>array(67,-74,929,841),46796=>array(67,-69,927,841),46797=>array(67,-68,911,841),46798=>array(67,-72,929,841),46799=>array(67,-70,936,841),46800=>array(67,-66,908,841),46801=>array(67,-59,916,841),46802=>array(67,-60,928,841),46803=>array(67,-68,908,841),46804=>array(50,-68,907,843),46805=>array(67,-61,907,843),46806=>array(67,-61,907,843),46807=>array(67,-71,931,843),46808=>array(68,-46,907,842),46809=>array(67,-68,912,843),46810=>array(67,-76,907,843),46811=>array(67,-44,921,843),46812=>array(67,-62,917,843),46813=>array(67,-64,907,843),46814=>array(67,-64,908,843),46815=>array(67,-64,908,843),46816=>array(67,-69,923,843),46817=>array(67,-64,908,843),46818=>array(67,-64,908,843),46819=>array(67,-76,907,843),46820=>array(67,-62,907,843),46821=>array(67,-61,907,843),46822=>array(67,-69,922,843),46823=>array(67,-74,929,843),46824=>array(67,-69,927,843),46825=>array(67,-68,911,843),46826=>array(67,-72,929,843),46827=>array(67,-70,936,843),46828=>array(67,-66,908,843),46829=>array(67,-59,916,843),46830=>array(67,-60,928,843),46831=>array(67,-68,908,843),46832=>array(63,-69,907,842),46833=>array(66,-61,907,842),46834=>array(66,-61,907,842),46835=>array(66,-71,931,842),46836=>array(66,-46,907,842),46837=>array(66,-68,912,842),46838=>array(66,-76,907,842),46839=>array(66,-44,921,842),46840=>array(66,-62,917,842),46841=>array(66,-64,907,842),46842=>array(66,-64,908,842),46843=>array(66,-64,908,842),46844=>array(66,-69,923,842),46845=>array(66,-64,908,842),46846=>array(66,-64,908,842),46847=>array(66,-76,907,842),46848=>array(66,-62,907,842),46849=>array(66,-61,907,842),46850=>array(66,-69,922,842),46851=>array(66,-74,929,842),46852=>array(66,-69,927,842),46853=>array(66,-68,911,842),46854=>array(66,-72,929,842),46855=>array(66,-70,936,842),46856=>array(66,-66,908,842),46857=>array(66,-59,916,842),46858=>array(66,-60,928,842),46859=>array(66,-68,908,842),46860=>array(79,-64,921,785),46861=>array(79,-61,921,795),46862=>array(79,-61,921,795),46863=>array(79,-71,921,795),46864=>array(81,-46,922,795),46865=>array(79,-68,921,795),46866=>array(79,-74,921,795),46867=>array(79,-44,921,795),46868=>array(79,-62,921,795),46869=>array(79,-64,921,795),46870=>array(79,-64,921,795),46871=>array(79,-63,921,795),46872=>array(79,-68,921,795),46873=>array(79,-64,921,795),46874=>array(79,-63,921,795),46875=>array(79,-74,921,795),46876=>array(79,-62,921,795),46877=>array(79,-61,921,795),46878=>array(79,-69,921,795),46879=>array(79,-74,921,795),46880=>array(79,-69,921,795),46881=>array(79,-68,921,795),46882=>array(79,-72,921,795),46883=>array(79,-70,921,795),46884=>array(79,-66,921,795),46885=>array(79,-59,921,795),46886=>array(79,-60,921,795),46887=>array(79,-68,921,795),46888=>array(57,22,943,720),46889=>array(79,-61,922,795),46890=>array(79,-61,922,795),46891=>array(79,-71,922,795),46892=>array(79,-46,921,795),46893=>array(79,-68,922,795),46894=>array(79,-74,922,795),46895=>array(79,-44,922,795),46896=>array(79,-62,922,795),46897=>array(79,-64,922,795),46898=>array(79,-64,922,795),46899=>array(79,-63,922,795),46900=>array(79,-68,922,795),46901=>array(79,-64,922,795),46902=>array(79,-63,922,795),46903=>array(79,-74,922,795),46904=>array(79,-62,922,795),46905=>array(79,-61,922,795),46906=>array(79,-69,922,795),46907=>array(79,-74,922,795),46908=>array(79,-69,922,795),46909=>array(79,-68,922,795),46910=>array(79,-72,922,795),46911=>array(79,-70,922,795),46912=>array(79,-66,922,795),46913=>array(79,-59,922,795),46914=>array(79,-60,922,795),46915=>array(79,-68,922,795),46916=>array(67,-69,907,842),46917=>array(74,-61,908,842),46918=>array(74,-61,908,842),46919=>array(74,-71,931,842),46920=>array(65,-46,907,842),46921=>array(74,-68,912,842),46922=>array(74,-76,908,842),46923=>array(74,-44,921,842),46924=>array(74,-62,917,842),46925=>array(74,-64,908,842),46926=>array(74,-64,908,842),46927=>array(74,-64,908,842),46928=>array(74,-69,923,842),46929=>array(74,-64,908,842),46930=>array(74,-64,908,842),46931=>array(74,-76,908,842),46932=>array(74,-62,908,842),46933=>array(74,-61,908,842),46934=>array(74,-69,922,842),46935=>array(74,-74,929,842),46936=>array(74,-69,927,842),46937=>array(74,-68,911,842),46938=>array(74,-72,929,842),46939=>array(74,-70,936,842),46940=>array(74,-66,908,842),46941=>array(74,-59,916,842),46942=>array(74,-60,928,842),46943=>array(74,-68,908,842),46944=>array(104,-69,907,842),46945=>array(109,-61,907,842),46946=>array(109,-61,907,842),46947=>array(109,-71,931,842),46948=>array(99,-46,907,842),46949=>array(109,-68,912,842),46950=>array(109,-76,907,842),46951=>array(109,-44,921,842),46952=>array(109,-62,917,842),46953=>array(109,-64,907,842),46954=>array(109,-64,908,842),46955=>array(109,-64,908,842),46956=>array(109,-69,923,842),46957=>array(109,-64,908,842),46958=>array(109,-64,908,842),46959=>array(109,-76,907,842),46960=>array(109,-62,907,842),46961=>array(109,-61,907,842),46962=>array(109,-69,922,842),46963=>array(109,-74,929,842),46964=>array(109,-69,927,842),46965=>array(109,-68,911,842),46966=>array(109,-72,929,842),46967=>array(109,-70,936,842),46968=>array(109,-66,908,842),46969=>array(109,-59,916,842),46970=>array(109,-60,928,842),46971=>array(109,-68,908,842),46972=>array(118,-69,936,842),46973=>array(103,-59,936,842),46974=>array(103,-61,936,842),46975=>array(103,-71,936,842),46976=>array(108,-45,936,842),46977=>array(103,-69,936,842),46978=>array(103,-76,936,842),46979=>array(103,-44,936,842),46980=>array(103,-62,936,842),46981=>array(103,-64,936,842),46982=>array(103,-64,936,842),46983=>array(103,-64,936,842),46984=>array(103,-70,936,842),46985=>array(103,-64,936,842),46986=>array(103,-64,936,842),46987=>array(103,-76,936,842),46988=>array(103,-62,936,842),46989=>array(103,-61,936,842),46990=>array(103,-70,936,842),46991=>array(103,-74,936,842),46992=>array(103,-69,936,842),46993=>array(103,-67,936,842),46994=>array(103,-72,936,842),46995=>array(103,-71,936,842),46996=>array(103,-66,936,842),46997=>array(103,-59,936,842),46998=>array(103,-60,936,842),46999=>array(103,-69,936,842),47000=>array(118,-69,907,842),47001=>array(103,-61,907,842),47002=>array(103,-61,907,842),47003=>array(103,-71,931,842),47004=>array(103,-46,907,842),47005=>array(103,-68,912,842),47006=>array(103,-76,907,842),47007=>array(103,-44,921,842),47008=>array(103,-62,917,842),47009=>array(103,-64,907,842),47010=>array(103,-64,908,842),47011=>array(103,-64,908,842),47012=>array(103,-69,923,842),47013=>array(103,-64,908,842),47014=>array(103,-64,908,842),47015=>array(103,-76,907,842),47016=>array(103,-62,907,842),47017=>array(103,-61,907,842),47018=>array(103,-69,922,842),47019=>array(103,-74,929,842),47020=>array(103,-69,927,842),47021=>array(103,-68,911,842),47022=>array(103,-72,929,842),47023=>array(103,-70,936,842),47024=>array(103,-66,908,842),47025=>array(103,-59,916,842),47026=>array(103,-60,928,842),47027=>array(103,-68,908,842),47028=>array(118,-68,935,843),47029=>array(103,-59,936,842),47030=>array(103,-61,936,842),47031=>array(103,-71,936,842),47032=>array(108,-45,936,842),47033=>array(103,-69,936,842),47034=>array(103,-76,936,842),47035=>array(103,-44,936,842),47036=>array(103,-62,936,842),47037=>array(103,-64,936,842),47038=>array(103,-64,936,842),47039=>array(103,-64,936,842),47040=>array(103,-70,936,842),47041=>array(103,-64,936,842),47042=>array(103,-64,936,842),47043=>array(103,-76,936,842),47044=>array(103,-62,936,842),47045=>array(103,-61,936,842),47046=>array(103,-70,936,842),47047=>array(103,-74,936,842),47048=>array(103,-69,936,842),47049=>array(103,-67,936,842),47050=>array(103,-72,936,842),47051=>array(103,-71,936,842),47052=>array(103,-66,936,842),47053=>array(103,-59,936,842),47054=>array(103,-60,936,842),47055=>array(103,-69,936,842),47056=>array(118,-69,907,842),47057=>array(103,-61,907,842),47058=>array(103,-61,907,842),47059=>array(103,-71,931,842),47060=>array(103,-46,907,842),47061=>array(103,-68,912,842),47062=>array(103,-76,907,842),47063=>array(103,-44,921,842),47064=>array(103,-62,917,842),47065=>array(103,-64,907,842),47066=>array(103,-64,908,842),47067=>array(103,-64,908,842),47068=>array(103,-69,923,842),47069=>array(103,-64,908,842),47070=>array(103,-64,908,842),47071=>array(103,-76,907,842),47072=>array(103,-62,907,842),47073=>array(103,-61,907,842),47074=>array(103,-69,922,842),47075=>array(103,-74,929,842),47076=>array(103,-69,927,842),47077=>array(103,-68,911,842),47078=>array(103,-72,929,842),47079=>array(103,-70,936,842),47080=>array(103,-66,908,842),47081=>array(103,-59,916,842),47082=>array(103,-60,928,842),47083=>array(103,-68,908,842),47084=>array(118,-70,907,841),47085=>array(103,-61,907,841),47086=>array(103,-61,907,841),47087=>array(103,-71,931,841),47088=>array(103,-46,907,841),47089=>array(103,-68,912,841),47090=>array(103,-76,907,841),47091=>array(103,-44,921,841),47092=>array(103,-62,917,841),47093=>array(103,-64,907,841),47094=>array(103,-64,908,841),47095=>array(103,-64,908,841),47096=>array(103,-69,923,841),47097=>array(103,-64,908,841),47098=>array(103,-64,908,841),47099=>array(103,-76,906,841),47100=>array(103,-62,907,841),47101=>array(103,-61,907,841),47102=>array(103,-69,922,841),47103=>array(103,-74,929,841),47104=>array(103,-69,927,841),47105=>array(103,-68,911,841),47106=>array(103,-72,929,841),47107=>array(103,-70,936,841),47108=>array(103,-66,908,841),47109=>array(103,-59,916,841),47110=>array(103,-60,928,841),47111=>array(103,-68,908,841),47112=>array(118,-68,907,843),47113=>array(118,-61,907,843),47114=>array(118,-61,907,843),47115=>array(118,-71,931,843),47116=>array(118,-46,907,843),47117=>array(118,-68,912,843),47118=>array(118,-76,907,843),47119=>array(118,-44,921,843),47120=>array(118,-62,917,843),47121=>array(118,-64,907,843),47122=>array(118,-64,908,843),47123=>array(118,-64,908,843),47124=>array(118,-69,923,843),47125=>array(118,-64,908,843),47126=>array(118,-64,908,843),47127=>array(118,-76,907,843),47128=>array(118,-62,907,843),47129=>array(118,-61,907,843),47130=>array(118,-69,922,843),47131=>array(118,-74,929,843),47132=>array(118,-69,927,843),47133=>array(118,-68,911,843),47134=>array(118,-72,929,843),47135=>array(118,-70,936,843),47136=>array(118,-66,908,843),47137=>array(118,-59,916,843),47138=>array(118,-60,928,843),47139=>array(118,-68,908,843),47140=>array(118,-70,907,842),47141=>array(103,-61,908,842),47142=>array(103,-61,908,842),47143=>array(103,-71,931,842),47144=>array(103,-46,907,842),47145=>array(103,-68,912,842),47146=>array(103,-76,908,842),47147=>array(103,-44,921,842),47148=>array(103,-62,917,842),47149=>array(103,-64,908,842),47150=>array(103,-64,908,842),47151=>array(103,-64,908,842),47152=>array(103,-69,923,842),47153=>array(103,-64,908,842),47154=>array(103,-64,908,842),47155=>array(103,-76,908,842),47156=>array(103,-62,908,842),47157=>array(103,-61,908,842),47158=>array(103,-69,922,842),47159=>array(103,-74,929,842),47160=>array(103,-69,927,842),47161=>array(103,-68,911,842),47162=>array(103,-72,929,842),47163=>array(103,-70,936,842),47164=>array(103,-66,908,842),47165=>array(103,-59,916,842),47166=>array(103,-60,928,842),47167=>array(103,-68,908,842),47168=>array(118,-68,907,843),47169=>array(118,-61,907,843),47170=>array(118,-61,907,843),47171=>array(118,-71,931,843),47172=>array(118,-46,907,843),47173=>array(118,-68,912,843),47174=>array(118,-76,907,843),47175=>array(118,-44,921,843),47176=>array(118,-62,917,843),47177=>array(118,-64,907,843),47178=>array(118,-64,908,843),47179=>array(118,-64,908,843),47180=>array(118,-69,923,843),47181=>array(118,-64,908,843),47182=>array(118,-64,908,843),47183=>array(118,-76,907,843),47184=>array(118,-62,907,843),47185=>array(118,-61,907,843),47186=>array(118,-69,922,843),47187=>array(118,-74,929,843),47188=>array(118,-69,927,843),47189=>array(118,-68,911,843),47190=>array(118,-72,929,843),47191=>array(118,-70,936,843),47192=>array(118,-66,908,843),47193=>array(118,-59,916,843),47194=>array(118,-60,928,843),47195=>array(118,-68,908,843),47196=>array(62,27,943,755),47197=>array(79,-61,921,795),47198=>array(79,-61,921,795),47199=>array(79,-71,921,795),47200=>array(79,-46,921,795),47201=>array(79,-68,921,795),47202=>array(79,-74,921,795),47203=>array(79,-44,921,795),47204=>array(79,-62,921,795),47205=>array(79,-64,921,795),47206=>array(79,-64,921,795),47207=>array(79,-63,921,795),47208=>array(79,-68,921,795),47209=>array(79,-64,921,795),47210=>array(79,-63,921,795),47211=>array(79,-74,921,795),47212=>array(79,-62,921,795),47213=>array(79,-61,921,795),47214=>array(79,-69,921,795),47215=>array(79,-74,921,795),47216=>array(79,-69,921,795),47217=>array(79,-68,921,795),47218=>array(79,-72,921,795),47219=>array(79,-70,921,795),47220=>array(79,-66,921,795),47221=>array(79,-59,921,795),47222=>array(79,-60,921,795),47223=>array(79,-68,921,795),47224=>array(52,-69,936,842),47225=>array(68,-59,936,842),47226=>array(68,-61,936,842),47227=>array(68,-71,936,842),47228=>array(74,-45,936,843),47229=>array(68,-69,936,842),47230=>array(68,-76,936,842),47231=>array(68,-44,936,842),47232=>array(68,-62,936,842),47233=>array(68,-64,936,842),47234=>array(68,-64,936,842),47235=>array(68,-64,936,842),47236=>array(68,-70,936,842),47237=>array(68,-64,936,842),47238=>array(68,-64,936,842),47239=>array(68,-76,936,842),47240=>array(68,-62,936,842),47241=>array(68,-61,936,842),47242=>array(68,-70,936,842),47243=>array(68,-74,936,842),47244=>array(68,-69,936,842),47245=>array(68,-67,936,842),47246=>array(68,-72,936,842),47247=>array(68,-71,936,842),47248=>array(68,-66,936,842),47249=>array(68,-59,936,842),47250=>array(68,-60,936,842),47251=>array(68,-69,936,842),47252=>array(61,-68,907,843),47253=>array(64,-61,908,842),47254=>array(64,-61,908,842),47255=>array(64,-71,931,842),47256=>array(58,-46,907,842),47257=>array(64,-68,912,842),47258=>array(64,-76,908,842),47259=>array(64,-44,921,842),47260=>array(64,-62,917,842),47261=>array(64,-64,908,842),47262=>array(64,-64,908,842),47263=>array(64,-64,908,842),47264=>array(64,-69,923,842),47265=>array(64,-64,908,842),47266=>array(64,-64,908,842),47267=>array(64,-76,908,842),47268=>array(64,-62,908,842),47269=>array(64,-61,908,842),47270=>array(64,-69,922,842),47271=>array(64,-74,929,842),47272=>array(64,-69,927,842),47273=>array(64,-68,911,842),47274=>array(64,-72,929,842),47275=>array(64,-70,936,842),47276=>array(64,-66,908,842),47277=>array(64,-59,916,842),47278=>array(64,-60,928,842),47279=>array(64,-68,908,842),47280=>array(62,-69,907,842),47281=>array(64,-61,907,841),47282=>array(64,-61,907,841),47283=>array(64,-71,931,841),47284=>array(64,-46,907,842),47285=>array(64,-68,912,841),47286=>array(64,-76,907,841),47287=>array(64,-44,921,841),47288=>array(64,-62,917,841),47289=>array(64,-64,907,841),47290=>array(64,-64,908,841),47291=>array(64,-64,908,841),47292=>array(64,-69,923,841),47293=>array(64,-64,908,841),47294=>array(64,-64,908,841),47295=>array(64,-76,907,841),47296=>array(64,-62,907,841),47297=>array(64,-61,907,841),47298=>array(64,-69,922,841),47299=>array(64,-74,929,841),47300=>array(64,-69,927,841),47301=>array(64,-68,911,841),47302=>array(64,-72,929,841),47303=>array(64,-70,936,841),47304=>array(64,-66,908,841),47305=>array(64,-59,916,841),47306=>array(64,-60,928,841),47307=>array(64,-68,908,841),47308=>array(62,27,943,755),47309=>array(79,-61,921,795),47310=>array(79,-61,921,795),47311=>array(79,-71,921,795),47312=>array(79,-46,922,795),47313=>array(79,-68,921,795),47314=>array(79,-74,921,795),47315=>array(79,-44,921,795),47316=>array(79,-62,921,795),47317=>array(79,-64,921,795),47318=>array(79,-64,921,795),47319=>array(79,-63,921,795),47320=>array(79,-68,921,795),47321=>array(79,-64,921,795),47322=>array(79,-63,921,795),47323=>array(79,-74,921,795),47324=>array(79,-62,921,795),47325=>array(79,-61,921,795),47326=>array(79,-69,921,795),47327=>array(79,-74,921,795),47328=>array(79,-69,921,795),47329=>array(79,-68,921,795),47330=>array(79,-72,921,795),47331=>array(79,-70,921,795),47332=>array(79,-66,921,795),47333=>array(79,-59,921,795),47334=>array(79,-60,921,795),47335=>array(79,-68,921,795),47336=>array(79,-64,920,795),47337=>array(79,-61,921,795),47338=>array(79,-61,921,795),47339=>array(79,-71,921,795),47340=>array(79,-46,921,795),47341=>array(79,-68,921,795),47342=>array(79,-74,921,795),47343=>array(79,-44,921,795),47344=>array(79,-62,921,795),47345=>array(79,-64,921,795),47346=>array(79,-64,921,795),47347=>array(79,-63,921,795),47348=>array(79,-68,921,795),47349=>array(79,-64,921,795),47350=>array(79,-63,921,795),47351=>array(79,-74,921,795),47352=>array(79,-62,921,795),47353=>array(79,-61,921,795),47354=>array(79,-69,921,795),47355=>array(79,-74,921,795),47356=>array(79,-69,921,795),47357=>array(79,-68,921,795),47358=>array(79,-72,921,795),47359=>array(79,-70,921,795),47360=>array(79,-66,921,795),47361=>array(79,-59,921,795),47362=>array(79,-60,921,795),47363=>array(79,-68,921,795),47364=>array(69,-70,907,841),47365=>array(76,-61,907,841),47366=>array(76,-61,907,841),47367=>array(76,-71,931,841),47368=>array(76,-46,907,841),47369=>array(76,-68,912,841),47370=>array(76,-76,907,841),47371=>array(76,-44,921,841),47372=>array(76,-62,917,841),47373=>array(76,-64,907,841),47374=>array(76,-64,908,841),47375=>array(76,-64,908,841),47376=>array(76,-69,923,841),47377=>array(76,-64,908,841),47378=>array(76,-64,908,841),47379=>array(76,-76,906,841),47380=>array(76,-62,907,841),47381=>array(76,-61,907,841),47382=>array(76,-69,922,841),47383=>array(76,-74,929,841),47384=>array(76,-69,927,841),47385=>array(76,-68,911,841),47386=>array(76,-72,929,841),47387=>array(76,-70,936,841),47388=>array(76,-66,908,841),47389=>array(76,-59,916,841),47390=>array(76,-60,928,841),47391=>array(76,-68,908,841),47392=>array(52,-68,907,843),47393=>array(72,-61,907,843),47394=>array(72,-61,907,843),47395=>array(72,-71,931,843),47396=>array(90,-46,907,843),47397=>array(72,-68,912,843),47398=>array(72,-76,907,843),47399=>array(72,-44,921,843),47400=>array(72,-62,917,843),47401=>array(72,-64,907,843),47402=>array(72,-64,908,843),47403=>array(72,-64,908,843),47404=>array(72,-69,923,843),47405=>array(72,-64,908,843),47406=>array(72,-64,908,843),47407=>array(72,-76,907,843),47408=>array(72,-62,907,843),47409=>array(72,-61,907,843),47410=>array(72,-69,922,843),47411=>array(72,-74,929,843),47412=>array(72,-69,927,843),47413=>array(72,-68,911,843),47414=>array(72,-72,929,843),47415=>array(72,-70,936,843),47416=>array(72,-66,908,843),47417=>array(72,-59,916,843),47418=>array(72,-60,928,843),47419=>array(72,-68,908,843),47420=>array(70,-69,907,842),47421=>array(64,-61,907,842),47422=>array(64,-61,907,842),47423=>array(64,-71,931,842),47424=>array(65,-46,907,843),47425=>array(64,-68,912,842),47426=>array(64,-76,907,842),47427=>array(64,-44,921,842),47428=>array(64,-62,917,842),47429=>array(64,-64,907,842),47430=>array(64,-64,908,842),47431=>array(64,-64,908,842),47432=>array(64,-69,923,842),47433=>array(64,-64,908,842),47434=>array(64,-64,908,842),47435=>array(64,-76,907,842),47436=>array(64,-62,907,842),47437=>array(64,-61,907,842),47438=>array(64,-69,922,842),47439=>array(64,-74,929,842),47440=>array(64,-69,927,842),47441=>array(64,-68,911,842),47442=>array(64,-72,929,842),47443=>array(64,-70,936,842),47444=>array(64,-66,908,842),47445=>array(64,-59,916,842),47446=>array(64,-60,928,842),47447=>array(64,-68,908,842),47448=>array(71,-64,928,795),47449=>array(79,-61,921,795),47450=>array(79,-61,921,795),47451=>array(79,-71,921,795),47452=>array(79,-46,921,795),47453=>array(79,-68,921,795),47454=>array(79,-74,921,795),47455=>array(79,-44,921,795),47456=>array(79,-62,921,795),47457=>array(79,-64,921,795),47458=>array(79,-64,921,795),47459=>array(79,-63,921,795),47460=>array(79,-68,921,795),47461=>array(79,-64,921,795),47462=>array(79,-63,921,795),47463=>array(79,-74,921,795),47464=>array(79,-62,921,795),47465=>array(79,-61,921,795),47466=>array(79,-69,921,795),47467=>array(79,-74,921,795),47468=>array(79,-69,921,795),47469=>array(79,-68,921,795),47470=>array(79,-72,921,795),47471=>array(79,-70,921,795),47472=>array(79,-66,921,795),47473=>array(79,-59,921,795),47474=>array(79,-60,921,795),47475=>array(79,-68,921,795),47476=>array(57,42,943,730),47477=>array(79,-61,921,795),47478=>array(79,-61,921,795),47479=>array(79,-71,921,795),47480=>array(79,-46,921,795),47481=>array(79,-68,921,795),47482=>array(79,-74,921,795),47483=>array(79,-44,921,795),47484=>array(79,-62,921,795),47485=>array(79,-64,921,795),47486=>array(79,-64,921,795),47487=>array(79,-63,921,795),47488=>array(79,-68,921,795),47489=>array(79,-64,921,795),47490=>array(79,-63,921,795),47491=>array(79,-74,921,795),47492=>array(79,-62,921,795),47493=>array(79,-61,921,795),47494=>array(79,-69,921,795),47495=>array(79,-74,921,795),47496=>array(79,-69,921,795),47497=>array(79,-68,921,795),47498=>array(79,-72,921,795),47499=>array(79,-70,921,795),47500=>array(79,-66,921,795),47501=>array(79,-59,921,795),47502=>array(79,-60,921,795),47503=>array(79,-68,921,795),47504=>array(67,-69,907,842),47505=>array(64,-61,908,842),47506=>array(64,-61,908,842),47507=>array(64,-71,931,842),47508=>array(64,-46,908,842),47509=>array(64,-68,912,842),47510=>array(64,-76,908,842),47511=>array(64,-44,921,842),47512=>array(64,-62,917,842),47513=>array(64,-64,908,842),47514=>array(64,-64,908,842),47515=>array(64,-64,908,842),47516=>array(64,-69,923,842),47517=>array(64,-64,908,842),47518=>array(64,-64,908,842),47519=>array(64,-76,908,842),47520=>array(64,-62,908,842),47521=>array(64,-61,908,842),47522=>array(64,-69,922,842),47523=>array(64,-74,929,842),47524=>array(64,-69,927,842),47525=>array(64,-68,911,842),47526=>array(64,-72,929,842),47527=>array(64,-70,936,842),47528=>array(64,-66,908,842),47529=>array(64,-59,916,842),47530=>array(64,-60,928,842),47531=>array(64,-68,908,842),47532=>array(143,-69,907,842),47533=>array(138,-61,907,842),47534=>array(138,-61,907,842),47535=>array(138,-71,931,842),47536=>array(138,-46,907,842),47537=>array(138,-68,912,842),47538=>array(138,-76,907,842),47539=>array(138,-44,921,842),47540=>array(138,-62,917,842),47541=>array(138,-64,907,842),47542=>array(138,-64,908,842),47543=>array(138,-64,908,842),47544=>array(138,-69,923,842),47545=>array(138,-64,908,842),47546=>array(138,-64,908,842),47547=>array(138,-76,907,842),47548=>array(138,-62,907,842),47549=>array(138,-61,907,842),47550=>array(138,-69,922,842),47551=>array(138,-74,929,842),47552=>array(138,-69,927,842),47553=>array(138,-68,911,842),47554=>array(138,-72,929,842),47555=>array(138,-70,936,842),47556=>array(138,-66,908,842),47557=>array(138,-59,916,842),47558=>array(138,-60,928,842),47559=>array(138,-68,908,842),47560=>array(127,-69,936,842),47561=>array(122,-59,936,842),47562=>array(122,-61,936,842),47563=>array(122,-71,936,842),47564=>array(122,-45,936,842),47565=>array(122,-69,936,842),47566=>array(122,-76,936,842),47567=>array(122,-44,936,842),47568=>array(122,-62,936,842),47569=>array(122,-64,936,842),47570=>array(122,-64,936,842),47571=>array(122,-64,936,842),47572=>array(122,-70,936,842),47573=>array(122,-64,936,842),47574=>array(122,-64,936,842),47575=>array(122,-76,936,842),47576=>array(122,-62,936,842),47577=>array(122,-61,936,842),47578=>array(122,-70,936,842),47579=>array(122,-74,936,842),47580=>array(118,-69,936,842),47581=>array(122,-67,936,842),47582=>array(122,-72,936,842),47583=>array(122,-71,936,842),47584=>array(122,-66,936,842),47585=>array(122,-59,936,842),47586=>array(122,-60,936,842),47587=>array(122,-69,936,842),47588=>array(127,-69,907,842),47589=>array(122,-61,907,842),47590=>array(122,-61,907,842),47591=>array(122,-71,931,842),47592=>array(122,-46,907,842),47593=>array(122,-68,912,842),47594=>array(122,-76,907,842),47595=>array(122,-44,921,842),47596=>array(122,-62,917,842),47597=>array(122,-64,907,842),47598=>array(122,-64,908,842),47599=>array(122,-64,908,842),47600=>array(122,-69,923,842),47601=>array(122,-64,908,842),47602=>array(122,-64,908,842),47603=>array(122,-76,907,842),47604=>array(122,-62,907,842),47605=>array(122,-61,907,842),47606=>array(122,-69,922,842),47607=>array(122,-74,929,842),47608=>array(122,-69,927,842),47609=>array(122,-68,911,842),47610=>array(122,-72,929,842),47611=>array(122,-70,936,842),47612=>array(122,-66,908,842),47613=>array(122,-59,916,842),47614=>array(122,-60,928,842),47615=>array(122,-68,908,842),47616=>array(127,-68,935,843),47617=>array(122,-59,936,842),47618=>array(122,-61,936,842),47619=>array(122,-71,936,842),47620=>array(122,-45,936,842),47621=>array(122,-69,936,842),47622=>array(122,-76,936,842),47623=>array(122,-44,936,842),47624=>array(122,-62,936,842),47625=>array(122,-64,936,842),47626=>array(122,-64,936,842),47627=>array(122,-64,936,842),47628=>array(122,-70,936,842),47629=>array(122,-64,936,842),47630=>array(122,-64,936,842),47631=>array(122,-76,936,842),47632=>array(122,-62,936,842),47633=>array(122,-61,936,842),47634=>array(122,-70,936,842),47635=>array(122,-74,936,842),47636=>array(118,-69,936,842),47637=>array(122,-67,936,842),47638=>array(122,-72,936,842),47639=>array(122,-71,936,842),47640=>array(122,-66,936,842),47641=>array(122,-59,936,842),47642=>array(122,-60,936,842),47643=>array(122,-69,936,842),47644=>array(127,-69,907,842),47645=>array(122,-61,907,842),47646=>array(122,-61,907,842),47647=>array(122,-71,931,842),47648=>array(122,-46,907,842),47649=>array(122,-68,912,842),47650=>array(122,-76,907,842),47651=>array(122,-44,921,842),47652=>array(122,-62,917,842),47653=>array(122,-64,907,842),47654=>array(122,-64,908,842),47655=>array(122,-64,908,842),47656=>array(122,-69,923,842),47657=>array(122,-64,908,842),47658=>array(122,-64,908,842),47659=>array(122,-76,907,842),47660=>array(122,-62,907,842),47661=>array(122,-61,907,842),47662=>array(122,-69,922,842),47663=>array(122,-74,929,842),47664=>array(122,-69,927,842),47665=>array(122,-68,911,842),47666=>array(122,-72,929,842),47667=>array(122,-70,936,842),47668=>array(122,-66,908,842),47669=>array(122,-59,916,842),47670=>array(122,-60,928,842),47671=>array(122,-68,908,842),47672=>array(127,-70,907,841),47673=>array(122,-61,907,841),47674=>array(122,-61,907,841),47675=>array(122,-71,931,841),47676=>array(112,-46,907,841),47677=>array(122,-68,912,841),47678=>array(122,-76,907,841),47679=>array(122,-44,921,841),47680=>array(122,-62,917,841),47681=>array(122,-64,907,841),47682=>array(122,-64,908,841),47683=>array(122,-64,908,841),47684=>array(122,-69,923,841),47685=>array(122,-64,908,841),47686=>array(122,-64,908,841),47687=>array(122,-76,906,841),47688=>array(122,-62,907,841),47689=>array(122,-61,907,841),47690=>array(122,-69,922,841),47691=>array(122,-74,929,841),47692=>array(122,-69,927,841),47693=>array(122,-68,911,841),47694=>array(122,-72,929,841),47695=>array(122,-70,936,841),47696=>array(122,-66,908,841),47697=>array(122,-59,916,841),47698=>array(122,-60,928,841),47699=>array(122,-68,908,841),47700=>array(127,-68,907,843),47701=>array(122,-61,907,843),47702=>array(122,-61,907,843),47703=>array(122,-71,931,843),47704=>array(122,-46,907,843),47705=>array(122,-68,912,843),47706=>array(122,-76,907,843),47707=>array(122,-44,921,843),47708=>array(122,-62,917,843),47709=>array(122,-64,907,843),47710=>array(122,-64,908,843),47711=>array(122,-64,908,843),47712=>array(122,-69,923,843),47713=>array(122,-64,908,843),47714=>array(122,-64,908,843),47715=>array(122,-76,907,843),47716=>array(122,-62,907,843),47717=>array(122,-61,907,843),47718=>array(122,-69,922,843),47719=>array(122,-74,929,843),47720=>array(122,-69,927,843),47721=>array(122,-68,911,843),47722=>array(122,-72,929,843),47723=>array(122,-70,936,843),47724=>array(122,-66,908,843),47725=>array(122,-59,916,843),47726=>array(122,-60,928,843),47727=>array(122,-68,908,843),47728=>array(127,-70,907,842),47729=>array(122,-61,908,842),47730=>array(122,-61,908,842),47731=>array(122,-71,931,842),47732=>array(112,-46,907,842),47733=>array(122,-68,912,842),47734=>array(122,-76,908,842),47735=>array(122,-44,921,842),47736=>array(122,-62,917,842),47737=>array(122,-64,908,842),47738=>array(122,-64,908,842),47739=>array(122,-64,908,842),47740=>array(122,-69,923,842),47741=>array(122,-64,908,842),47742=>array(122,-64,908,842),47743=>array(122,-76,908,842),47744=>array(122,-62,908,842),47745=>array(122,-61,908,842),47746=>array(122,-69,922,842),47747=>array(122,-74,929,842),47748=>array(122,-69,927,842),47749=>array(122,-68,911,842),47750=>array(122,-72,929,842),47751=>array(122,-70,936,842),47752=>array(122,-66,908,842),47753=>array(122,-59,916,842),47754=>array(122,-60,928,842),47755=>array(122,-68,908,842),47756=>array(127,-68,907,843),47757=>array(122,-61,907,843),47758=>array(122,-61,907,843),47759=>array(122,-71,931,843),47760=>array(122,-46,907,843),47761=>array(122,-68,912,843),47762=>array(122,-76,907,843),47763=>array(122,-44,921,843),47764=>array(122,-62,917,843),47765=>array(122,-64,907,843),47766=>array(122,-64,908,843),47767=>array(122,-64,908,843),47768=>array(122,-69,923,843),47769=>array(122,-64,908,843),47770=>array(122,-64,908,843),47771=>array(122,-76,907,843),47772=>array(122,-62,907,843),47773=>array(122,-61,907,843),47774=>array(122,-69,922,843),47775=>array(122,-74,929,843),47776=>array(122,-69,927,843),47777=>array(122,-68,911,843),47778=>array(122,-72,929,843),47779=>array(122,-70,936,843),47780=>array(122,-66,908,843),47781=>array(122,-59,916,843),47782=>array(122,-60,928,843),47783=>array(122,-68,908,843),47784=>array(62,17,943,740),47785=>array(79,-61,921,800),47786=>array(79,-61,921,800),47787=>array(79,-71,921,800),47788=>array(79,-46,921,800),47789=>array(79,-68,921,800),47790=>array(79,-74,921,800),47791=>array(79,-44,921,800),47792=>array(79,-62,921,800),47793=>array(79,-64,921,800),47794=>array(79,-64,921,800),47795=>array(79,-63,921,800),47796=>array(79,-68,921,800),47797=>array(79,-64,921,800),47798=>array(79,-63,921,800),47799=>array(79,-74,921,800),47800=>array(79,-62,921,800),47801=>array(79,-61,921,800),47802=>array(79,-69,921,800),47803=>array(79,-74,921,800),47804=>array(79,-69,921,800),47805=>array(79,-68,921,800),47806=>array(79,-72,921,800),47807=>array(79,-70,921,800),47808=>array(79,-66,921,800),47809=>array(79,-59,921,800),47810=>array(79,-60,921,800),47811=>array(79,-68,921,800),47812=>array(52,-69,936,842),47813=>array(77,-59,936,843),47814=>array(77,-61,936,843),47815=>array(77,-71,936,843),47816=>array(66,-45,936,842),47817=>array(77,-69,936,843),47818=>array(77,-76,936,843),47819=>array(77,-44,936,843),47820=>array(77,-62,936,843),47821=>array(77,-64,936,843),47822=>array(77,-64,936,843),47823=>array(77,-64,936,843),47824=>array(77,-70,936,843),47825=>array(77,-64,936,843),47826=>array(77,-64,936,843),47827=>array(77,-76,936,843),47828=>array(77,-62,936,843),47829=>array(77,-61,936,843),47830=>array(77,-70,936,843),47831=>array(77,-74,936,843),47832=>array(77,-69,936,843),47833=>array(77,-67,936,843),47834=>array(77,-72,936,843),47835=>array(77,-71,936,843),47836=>array(77,-66,936,843),47837=>array(77,-59,936,843),47838=>array(77,-60,936,843),47839=>array(77,-69,936,843),47840=>array(61,-69,907,842),47841=>array(79,-61,907,843),47842=>array(79,-61,907,843),47843=>array(79,-71,931,843),47844=>array(72,-46,907,842),47845=>array(79,-68,912,843),47846=>array(79,-76,907,843),47847=>array(79,-44,921,843),47848=>array(79,-62,917,843),47849=>array(79,-64,907,843),47850=>array(79,-64,908,843),47851=>array(79,-64,908,843),47852=>array(79,-69,923,843),47853=>array(79,-64,908,843),47854=>array(79,-64,908,843),47855=>array(79,-76,907,843),47856=>array(79,-62,907,843),47857=>array(79,-61,907,843),47858=>array(79,-69,922,843),47859=>array(79,-74,929,843),47860=>array(79,-69,927,843),47861=>array(79,-68,911,843),47862=>array(79,-72,929,843),47863=>array(79,-70,936,843),47864=>array(79,-66,908,843),47865=>array(79,-59,916,843),47866=>array(79,-60,928,843),47867=>array(79,-68,908,843),47868=>array(61,-69,907,842),47869=>array(64,-61,908,841),47870=>array(64,-61,908,841),47871=>array(64,-71,931,841),47872=>array(65,-46,908,841),47873=>array(64,-68,912,841),47874=>array(64,-76,908,841),47875=>array(64,-44,921,841),47876=>array(64,-62,917,841),47877=>array(64,-64,908,841),47878=>array(64,-64,908,841),47879=>array(64,-64,908,841),47880=>array(64,-69,923,841),47881=>array(64,-64,908,841),47882=>array(64,-64,908,841),47883=>array(64,-76,908,841),47884=>array(64,-62,908,841),47885=>array(64,-61,908,841),47886=>array(64,-69,922,841),47887=>array(64,-74,929,841),47888=>array(64,-69,927,841),47889=>array(64,-68,911,841),47890=>array(64,-72,929,841),47891=>array(64,-70,936,841),47892=>array(64,-66,908,841),47893=>array(64,-59,916,841),47894=>array(64,-60,928,841),47895=>array(64,-68,908,841),47896=>array(60,-3,940,765),47897=>array(79,-61,922,800),47898=>array(79,-61,922,800),47899=>array(79,-71,922,800),47900=>array(79,-46,922,800),47901=>array(79,-68,922,800),47902=>array(79,-74,922,800),47903=>array(79,-44,922,800),47904=>array(79,-62,922,800),47905=>array(79,-64,922,800),47906=>array(79,-64,922,800),47907=>array(79,-63,922,800),47908=>array(79,-68,922,800),47909=>array(79,-64,922,800),47910=>array(79,-63,922,800),47911=>array(79,-74,922,800),47912=>array(79,-62,922,800),47913=>array(79,-61,922,800),47914=>array(79,-69,922,800),47915=>array(79,-74,922,800),47916=>array(79,-69,922,800),47917=>array(79,-68,922,800),47918=>array(79,-72,922,800),47919=>array(79,-70,922,800),47920=>array(79,-66,922,800),47921=>array(79,-59,922,800),47922=>array(79,-60,922,800),47923=>array(79,-68,922,800),47924=>array(79,-64,921,800),47925=>array(79,-61,921,800),47926=>array(79,-61,921,800),47927=>array(79,-71,921,800),47928=>array(79,-46,921,800),47929=>array(79,-68,921,800),47930=>array(79,-74,921,800),47931=>array(79,-44,921,800),47932=>array(79,-62,921,800),47933=>array(79,-64,921,800),47934=>array(79,-64,921,800),47935=>array(79,-63,921,800),47936=>array(79,-68,921,800),47937=>array(79,-64,921,800),47938=>array(79,-63,921,800),47939=>array(79,-74,921,800),47940=>array(79,-62,921,800),47941=>array(79,-61,921,800),47942=>array(79,-69,921,800),47943=>array(79,-74,921,800),47944=>array(79,-69,921,800),47945=>array(79,-68,921,800),47946=>array(79,-72,921,800),47947=>array(79,-70,921,800),47948=>array(79,-66,921,800),47949=>array(79,-59,921,800),47950=>array(79,-60,921,800),47951=>array(79,-68,921,800),47952=>array(69,-70,907,841),47953=>array(79,-61,907,841),47954=>array(79,-61,907,841),47955=>array(79,-71,931,841),47956=>array(79,-46,907,841),47957=>array(79,-68,912,841),47958=>array(79,-76,907,841),47959=>array(79,-44,921,841),47960=>array(79,-62,917,841),47961=>array(79,-64,907,841),47962=>array(79,-64,908,841),47963=>array(79,-64,908,841),47964=>array(79,-69,923,841),47965=>array(79,-64,908,841),47966=>array(79,-64,908,841),47967=>array(79,-76,906,841),47968=>array(79,-62,907,841),47969=>array(79,-61,907,841),47970=>array(79,-69,922,841),47971=>array(79,-74,929,841),47972=>array(79,-69,927,841),47973=>array(79,-68,911,841),47974=>array(79,-72,929,841),47975=>array(79,-70,936,841),47976=>array(79,-66,908,841),47977=>array(79,-59,916,841),47978=>array(79,-60,928,841),47979=>array(79,-68,908,841),47980=>array(63,-68,912,843),47981=>array(72,-61,907,843),47982=>array(72,-61,907,843),47983=>array(72,-71,931,843),47984=>array(89,-46,907,843),47985=>array(72,-68,912,843),47986=>array(72,-76,907,843),47987=>array(72,-44,921,843),47988=>array(72,-62,917,843),47989=>array(72,-64,907,843),47990=>array(72,-64,908,843),47991=>array(72,-64,908,843),47992=>array(72,-69,923,843),47993=>array(72,-64,908,843),47994=>array(72,-64,908,843),47995=>array(72,-76,907,843),47996=>array(72,-62,907,843),47997=>array(72,-61,907,843),47998=>array(72,-69,922,843),47999=>array(72,-74,929,843),48000=>array(72,-69,927,843),48001=>array(72,-68,911,843),48002=>array(72,-72,929,843),48003=>array(72,-70,936,843),48004=>array(72,-66,908,843),48005=>array(72,-59,916,843),48006=>array(72,-60,928,843),48007=>array(72,-68,908,843),48008=>array(51,-69,907,842),48009=>array(65,-61,907,842),48010=>array(65,-61,907,842),48011=>array(65,-71,931,842),48012=>array(65,-46,907,842),48013=>array(65,-68,912,842),48014=>array(65,-76,907,842),48015=>array(65,-44,921,842),48016=>array(65,-62,917,842),48017=>array(65,-64,907,842),48018=>array(65,-64,908,842),48019=>array(65,-64,908,842),48020=>array(65,-69,923,842),48021=>array(65,-64,908,842),48022=>array(65,-64,908,842),48023=>array(65,-76,907,842),48024=>array(65,-62,907,842),48025=>array(65,-61,907,842),48026=>array(65,-69,922,842),48027=>array(65,-74,929,842),48028=>array(65,-69,927,842),48029=>array(65,-68,911,842),48030=>array(65,-72,929,842),48031=>array(65,-70,936,842),48032=>array(65,-66,908,842),48033=>array(65,-59,916,842),48034=>array(65,-60,928,842),48035=>array(65,-68,908,842),48036=>array(71,-64,928,800),48037=>array(79,-61,921,800),48038=>array(79,-61,921,800),48039=>array(79,-71,921,800),48040=>array(79,-46,921,790),48041=>array(79,-68,921,800),48042=>array(79,-74,921,800),48043=>array(79,-44,921,800),48044=>array(79,-62,921,800),48045=>array(79,-64,921,800),48046=>array(79,-64,921,800),48047=>array(79,-63,921,800),48048=>array(79,-68,921,800),48049=>array(79,-64,921,800),48050=>array(79,-63,921,800),48051=>array(79,-74,921,800),48052=>array(79,-62,921,800),48053=>array(79,-61,921,800),48054=>array(79,-69,921,800),48055=>array(79,-74,921,800),48056=>array(79,-69,921,800),48057=>array(79,-68,921,800),48058=>array(79,-72,921,800),48059=>array(79,-70,921,800),48060=>array(79,-66,921,800),48061=>array(79,-59,921,800),48062=>array(79,-60,921,800),48063=>array(79,-68,921,800),48064=>array(57,42,943,710),48065=>array(79,-61,921,791),48066=>array(79,-61,921,791),48067=>array(79,-71,921,791),48068=>array(79,-46,921,791),48069=>array(79,-68,921,791),48070=>array(79,-74,921,791),48071=>array(79,-44,921,791),48072=>array(79,-62,921,791),48073=>array(79,-64,921,791),48074=>array(79,-64,921,791),48075=>array(79,-63,921,791),48076=>array(79,-68,921,791),48077=>array(79,-64,921,791),48078=>array(79,-63,921,791),48079=>array(79,-74,921,791),48080=>array(79,-62,921,791),48081=>array(79,-61,921,791),48082=>array(79,-69,921,791),48083=>array(79,-74,921,791),48084=>array(79,-69,921,791),48085=>array(79,-68,921,791),48086=>array(79,-72,921,791),48087=>array(79,-70,921,791),48088=>array(79,-66,921,791),48089=>array(79,-59,921,791),48090=>array(79,-60,921,791),48091=>array(79,-68,921,791),48092=>array(67,-69,907,842),48093=>array(64,-61,907,842),48094=>array(64,-61,907,842),48095=>array(64,-71,931,842),48096=>array(64,-46,907,842),48097=>array(64,-68,912,842),48098=>array(64,-76,907,842),48099=>array(64,-44,921,842),48100=>array(64,-62,917,842),48101=>array(64,-64,907,842),48102=>array(64,-64,908,842),48103=>array(64,-64,908,842),48104=>array(64,-69,923,842),48105=>array(64,-64,908,842),48106=>array(64,-64,908,842),48107=>array(64,-76,907,842),48108=>array(64,-62,907,842),48109=>array(64,-61,907,842),48110=>array(64,-69,922,842),48111=>array(64,-74,929,842),48112=>array(64,-69,927,842),48113=>array(64,-68,911,842),48114=>array(64,-72,929,842),48115=>array(64,-70,936,842),48116=>array(64,-66,908,842),48117=>array(64,-59,916,842),48118=>array(64,-60,928,842),48119=>array(64,-68,908,842),48120=>array(147,-69,907,842),48121=>array(157,-61,907,842),48122=>array(157,-61,907,842),48123=>array(157,-71,931,842),48124=>array(122,-46,907,842),48125=>array(157,-68,912,842),48126=>array(157,-76,907,842),48127=>array(157,-44,921,842),48128=>array(157,-62,917,842),48129=>array(157,-64,907,842),48130=>array(157,-64,908,842),48131=>array(157,-64,908,842),48132=>array(157,-69,923,842),48133=>array(157,-64,908,842),48134=>array(157,-64,908,842),48135=>array(157,-76,907,842),48136=>array(157,-62,907,842),48137=>array(157,-61,907,842),48138=>array(157,-69,922,842),48139=>array(157,-74,929,842),48140=>array(143,-69,927,842),48141=>array(157,-68,911,842),48142=>array(157,-72,929,842),48143=>array(157,-70,936,842),48144=>array(157,-66,908,842),48145=>array(157,-59,916,842),48146=>array(157,-60,928,842),48147=>array(157,-68,908,842),48148=>array(122,-69,936,842),48149=>array(122,-59,936,837),48150=>array(122,-61,936,837),48151=>array(122,-71,936,837),48152=>array(122,-45,936,842),48153=>array(122,-69,936,837),48154=>array(122,-76,936,837),48155=>array(122,-44,936,837),48156=>array(122,-62,936,837),48157=>array(122,-64,936,837),48158=>array(122,-64,936,837),48159=>array(122,-64,936,837),48160=>array(122,-70,936,837),48161=>array(122,-64,936,837),48162=>array(122,-64,936,837),48163=>array(122,-76,936,837),48164=>array(122,-62,936,837),48165=>array(122,-61,936,837),48166=>array(122,-70,936,837),48167=>array(122,-74,936,837),48168=>array(118,-69,936,837),48169=>array(122,-67,936,837),48170=>array(122,-72,936,837),48171=>array(122,-71,936,837),48172=>array(122,-66,936,837),48173=>array(122,-59,936,837),48174=>array(122,-60,936,837),48175=>array(122,-69,936,837),48176=>array(122,-69,907,842),48177=>array(157,-61,907,842),48178=>array(157,-61,907,842),48179=>array(157,-71,931,842),48180=>array(157,-46,907,842),48181=>array(157,-68,912,842),48182=>array(157,-76,907,842),48183=>array(157,-44,921,842),48184=>array(157,-62,917,842),48185=>array(157,-64,907,842),48186=>array(157,-64,908,842),48187=>array(157,-64,908,842),48188=>array(157,-69,923,842),48189=>array(157,-64,908,842),48190=>array(157,-64,908,842),48191=>array(157,-76,907,842),48192=>array(157,-62,907,842),48193=>array(157,-61,907,842),48194=>array(157,-69,922,842),48195=>array(157,-74,929,842),48196=>array(143,-69,927,842),48197=>array(157,-68,911,842),48198=>array(157,-72,929,842),48199=>array(157,-70,936,842),48200=>array(157,-66,908,842),48201=>array(157,-59,916,842),48202=>array(157,-60,928,842),48203=>array(157,-68,908,842),48204=>array(122,-68,935,843),48205=>array(122,-59,936,842),48206=>array(122,-61,936,842),48207=>array(122,-71,936,842),48208=>array(122,-45,936,842),48209=>array(122,-69,936,842),48210=>array(122,-76,936,842),48211=>array(122,-44,936,842),48212=>array(122,-62,936,842),48213=>array(122,-64,936,842),48214=>array(122,-64,936,842),48215=>array(122,-64,936,842),48216=>array(122,-70,936,842),48217=>array(122,-64,936,842),48218=>array(122,-64,936,842),48219=>array(122,-76,936,842),48220=>array(122,-62,936,842),48221=>array(122,-61,936,842),48222=>array(122,-70,936,842),48223=>array(122,-74,936,842),48224=>array(118,-69,936,842),48225=>array(122,-67,936,842),48226=>array(122,-72,936,842),48227=>array(122,-71,936,842),48228=>array(122,-66,936,842),48229=>array(122,-59,936,842),48230=>array(122,-60,936,842),48231=>array(122,-69,936,842),48232=>array(122,-69,907,842),48233=>array(157,-61,907,842),48234=>array(157,-61,907,842),48235=>array(157,-71,931,842),48236=>array(157,-46,907,842),48237=>array(157,-68,912,842),48238=>array(157,-76,907,842),48239=>array(157,-44,921,842),48240=>array(157,-62,917,842),48241=>array(157,-64,907,842),48242=>array(157,-64,908,842),48243=>array(157,-64,908,842),48244=>array(157,-69,923,842),48245=>array(157,-64,908,842),48246=>array(157,-64,908,842),48247=>array(157,-76,907,842),48248=>array(157,-62,907,842),48249=>array(157,-61,907,842),48250=>array(157,-69,922,842),48251=>array(157,-74,929,842),48252=>array(143,-69,927,842),48253=>array(157,-68,911,842),48254=>array(157,-72,929,842),48255=>array(157,-70,936,842),48256=>array(157,-66,908,842),48257=>array(157,-59,916,842),48258=>array(157,-60,928,842),48259=>array(157,-68,908,842),48260=>array(127,-70,907,841),48261=>array(122,-61,907,841),48262=>array(122,-61,907,841),48263=>array(122,-71,931,841),48264=>array(122,-46,907,841),48265=>array(122,-68,912,841),48266=>array(122,-76,907,841),48267=>array(122,-44,921,841),48268=>array(122,-62,917,841),48269=>array(122,-64,907,841),48270=>array(122,-64,908,841),48271=>array(122,-64,908,841),48272=>array(122,-69,923,841),48273=>array(122,-64,908,841),48274=>array(122,-64,908,841),48275=>array(122,-76,906,841),48276=>array(122,-62,907,841),48277=>array(122,-61,907,841),48278=>array(122,-69,922,841),48279=>array(122,-74,929,841),48280=>array(122,-69,927,841),48281=>array(122,-68,911,841),48282=>array(122,-72,929,841),48283=>array(122,-70,936,841),48284=>array(122,-66,908,841),48285=>array(122,-59,916,841),48286=>array(122,-60,928,841),48287=>array(122,-68,908,841),48288=>array(122,-68,907,843),48289=>array(127,-61,907,843),48290=>array(127,-61,907,843),48291=>array(127,-71,931,843),48292=>array(127,-46,907,843),48293=>array(127,-68,912,843),48294=>array(127,-76,907,843),48295=>array(127,-44,921,843),48296=>array(127,-62,917,843),48297=>array(127,-64,907,843),48298=>array(127,-64,908,843),48299=>array(127,-64,908,843),48300=>array(127,-69,923,843),48301=>array(127,-64,908,843),48302=>array(127,-64,908,843),48303=>array(127,-76,907,843),48304=>array(127,-62,907,843),48305=>array(127,-61,907,843),48306=>array(127,-69,922,843),48307=>array(127,-74,929,843),48308=>array(127,-69,927,843),48309=>array(127,-68,911,843),48310=>array(127,-72,929,843),48311=>array(127,-70,936,843),48312=>array(127,-66,908,843),48313=>array(127,-59,916,843),48314=>array(127,-60,928,843),48315=>array(127,-68,908,843),48316=>array(127,-70,907,842),48317=>array(122,-61,908,842),48318=>array(122,-61,908,842),48319=>array(122,-71,931,842),48320=>array(122,-46,907,842),48321=>array(122,-68,912,842),48322=>array(122,-76,908,842),48323=>array(122,-44,921,842),48324=>array(122,-62,917,842),48325=>array(122,-64,908,842),48326=>array(122,-64,908,842),48327=>array(122,-64,908,842),48328=>array(122,-69,923,842),48329=>array(122,-64,908,842),48330=>array(122,-64,908,842),48331=>array(122,-76,908,842),48332=>array(122,-62,908,842),48333=>array(122,-61,908,842),48334=>array(122,-69,922,842),48335=>array(122,-74,929,842),48336=>array(122,-69,927,842),48337=>array(122,-68,911,842),48338=>array(122,-72,929,842),48339=>array(122,-70,936,842),48340=>array(122,-66,908,842),48341=>array(122,-59,916,842),48342=>array(122,-60,928,842),48343=>array(122,-68,908,842),48344=>array(122,-68,907,843),48345=>array(127,-61,907,843),48346=>array(127,-61,907,843),48347=>array(127,-71,931,843),48348=>array(127,-46,907,843),48349=>array(127,-68,912,843),48350=>array(127,-76,907,843),48351=>array(127,-44,921,843),48352=>array(127,-62,917,843),48353=>array(127,-64,907,843),48354=>array(127,-64,908,843),48355=>array(127,-64,908,843),48356=>array(127,-69,923,843),48357=>array(127,-64,908,843),48358=>array(127,-64,908,843),48359=>array(127,-76,907,843),48360=>array(127,-62,907,843),48361=>array(127,-61,907,843),48362=>array(127,-69,922,843),48363=>array(127,-74,929,843),48364=>array(127,-69,927,843),48365=>array(127,-68,911,843),48366=>array(127,-72,929,843),48367=>array(127,-70,936,843),48368=>array(127,-66,908,843),48369=>array(127,-59,916,843),48370=>array(127,-60,928,843),48371=>array(127,-68,908,843),48372=>array(62,7,943,795),48373=>array(79,-61,921,815),48374=>array(79,-61,921,815),48375=>array(79,-71,921,815),48376=>array(79,-46,921,815),48377=>array(79,-68,921,815),48378=>array(79,-74,921,815),48379=>array(79,-44,921,815),48380=>array(79,-62,921,815),48381=>array(79,-64,921,815),48382=>array(79,-64,921,815),48383=>array(79,-63,921,815),48384=>array(79,-68,921,815),48385=>array(79,-64,921,815),48386=>array(79,-63,921,815),48387=>array(79,-74,921,815),48388=>array(79,-62,921,815),48389=>array(79,-61,921,815),48390=>array(79,-69,921,815),48391=>array(79,-74,921,815),48392=>array(79,-69,921,815),48393=>array(79,-68,921,815),48394=>array(79,-72,921,815),48395=>array(79,-70,921,815),48396=>array(79,-66,921,815),48397=>array(79,-59,921,815),48398=>array(79,-60,921,815),48399=>array(79,-68,921,815),48400=>array(52,-69,936,842),48401=>array(77,-59,936,843),48402=>array(77,-61,936,843),48403=>array(77,-71,936,843),48404=>array(66,-45,936,842),48405=>array(77,-69,936,843),48406=>array(77,-76,936,843),48407=>array(77,-44,936,843),48408=>array(77,-62,936,843),48409=>array(77,-64,936,843),48410=>array(77,-64,936,843),48411=>array(77,-64,936,843),48412=>array(77,-70,936,843),48413=>array(77,-64,936,843),48414=>array(77,-64,936,843),48415=>array(77,-76,936,843),48416=>array(77,-62,936,843),48417=>array(77,-61,936,843),48418=>array(77,-70,936,843),48419=>array(77,-74,936,843),48420=>array(77,-69,936,843),48421=>array(77,-67,936,843),48422=>array(77,-72,936,843),48423=>array(77,-71,936,843),48424=>array(77,-66,936,843),48425=>array(77,-59,936,843),48426=>array(77,-60,936,843),48427=>array(77,-69,936,843),48428=>array(61,-68,907,843),48429=>array(79,-61,907,843),48430=>array(79,-61,907,843),48431=>array(79,-71,931,843),48432=>array(72,-46,907,842),48433=>array(79,-68,912,843),48434=>array(79,-76,907,843),48435=>array(79,-44,921,843),48436=>array(79,-62,917,843),48437=>array(79,-64,907,843),48438=>array(79,-64,908,843),48439=>array(79,-64,908,843),48440=>array(79,-69,923,843),48441=>array(79,-64,908,843),48442=>array(79,-64,908,843),48443=>array(79,-76,907,843),48444=>array(79,-62,907,843),48445=>array(79,-61,907,843),48446=>array(79,-69,922,843),48447=>array(79,-74,929,843),48448=>array(79,-69,927,843),48449=>array(79,-68,911,843),48450=>array(79,-72,929,843),48451=>array(79,-70,936,843),48452=>array(79,-66,908,843),48453=>array(79,-59,916,843),48454=>array(79,-60,928,843),48455=>array(79,-68,908,843),48456=>array(62,-69,907,842),48457=>array(65,-61,907,842),48458=>array(65,-61,907,842),48459=>array(65,-71,931,842),48460=>array(64,-46,907,842),48461=>array(65,-68,912,842),48462=>array(65,-76,907,842),48463=>array(65,-44,921,842),48464=>array(65,-62,917,842),48465=>array(65,-64,907,842),48466=>array(65,-64,908,842),48467=>array(65,-64,908,842),48468=>array(65,-69,923,842),48469=>array(65,-64,908,842),48470=>array(65,-64,908,842),48471=>array(65,-76,907,842),48472=>array(65,-62,907,842),48473=>array(65,-61,907,842),48474=>array(65,-69,922,842),48475=>array(65,-74,929,842),48476=>array(65,-69,927,842),48477=>array(65,-68,911,842),48478=>array(65,-72,929,842),48479=>array(65,-70,936,842),48480=>array(65,-66,908,842),48481=>array(65,-59,916,842),48482=>array(65,-60,928,842),48483=>array(65,-68,908,842),48484=>array(62,7,943,805),48485=>array(79,-61,922,815),48486=>array(79,-61,922,815),48487=>array(79,-71,922,815),48488=>array(79,-46,922,815),48489=>array(79,-68,922,815),48490=>array(79,-74,922,815),48491=>array(79,-44,922,815),48492=>array(79,-62,922,815),48493=>array(79,-64,922,815),48494=>array(79,-64,922,815),48495=>array(79,-63,922,815),48496=>array(79,-68,922,815),48497=>array(79,-64,922,815),48498=>array(79,-63,922,815),48499=>array(79,-74,922,815),48500=>array(79,-62,922,815),48501=>array(79,-61,922,815),48502=>array(79,-69,922,815),48503=>array(79,-74,922,815),48504=>array(79,-69,922,815),48505=>array(79,-68,922,815),48506=>array(79,-72,922,815),48507=>array(79,-70,922,815),48508=>array(79,-66,922,815),48509=>array(79,-59,922,815),48510=>array(79,-60,922,815),48511=>array(79,-68,922,815),48512=>array(79,-64,921,815),48513=>array(79,-61,921,815),48514=>array(79,-61,921,815),48515=>array(79,-71,921,815),48516=>array(79,-46,921,815),48517=>array(79,-68,921,815),48518=>array(79,-74,921,815),48519=>array(79,-44,921,815),48520=>array(79,-62,921,815),48521=>array(79,-64,921,815),48522=>array(79,-64,921,815),48523=>array(79,-63,921,815),48524=>array(79,-68,921,815),48525=>array(79,-64,921,815),48526=>array(79,-63,921,815),48527=>array(79,-74,921,815),48528=>array(79,-62,921,815),48529=>array(79,-61,921,815),48530=>array(79,-69,921,815),48531=>array(79,-74,921,815),48532=>array(79,-69,921,815),48533=>array(79,-68,921,815),48534=>array(79,-72,921,815),48535=>array(79,-70,921,815),48536=>array(79,-66,921,815),48537=>array(79,-59,921,815),48538=>array(79,-60,921,815),48539=>array(79,-68,921,815),48540=>array(69,-70,907,841),48541=>array(75,-61,907,841),48542=>array(75,-61,907,841),48543=>array(75,-71,931,841),48544=>array(76,-46,907,841),48545=>array(75,-68,912,841),48546=>array(75,-76,907,841),48547=>array(75,-44,921,841),48548=>array(75,-62,917,841),48549=>array(75,-64,907,841),48550=>array(75,-64,908,841),48551=>array(75,-64,908,841),48552=>array(75,-69,923,841),48553=>array(75,-64,908,841),48554=>array(75,-64,908,841),48555=>array(75,-76,906,841),48556=>array(75,-62,907,841),48557=>array(75,-61,907,841),48558=>array(75,-69,922,841),48559=>array(75,-74,929,841),48560=>array(75,-69,927,841),48561=>array(75,-68,911,841),48562=>array(75,-72,929,841),48563=>array(75,-70,936,841),48564=>array(75,-66,908,841),48565=>array(75,-59,916,841),48566=>array(75,-60,928,841),48567=>array(75,-68,908,841),48568=>array(63,-68,907,843),48569=>array(72,-61,907,843),48570=>array(72,-61,907,843),48571=>array(72,-71,931,843),48572=>array(76,-46,907,843),48573=>array(72,-68,912,843),48574=>array(72,-76,907,843),48575=>array(72,-44,921,843),48576=>array(72,-62,917,843),48577=>array(72,-64,907,843),48578=>array(72,-64,908,843),48579=>array(72,-64,908,843),48580=>array(72,-69,923,843),48581=>array(72,-64,908,843),48582=>array(72,-64,908,843),48583=>array(72,-76,907,843),48584=>array(72,-62,907,843),48585=>array(72,-61,907,843),48586=>array(72,-69,922,843),48587=>array(72,-74,929,843),48588=>array(72,-69,927,843),48589=>array(72,-68,911,843),48590=>array(72,-72,929,843),48591=>array(72,-70,936,843),48592=>array(72,-66,908,843),48593=>array(72,-59,916,843),48594=>array(72,-60,928,843),48595=>array(72,-68,908,843),48596=>array(70,-69,907,842),48597=>array(65,-61,907,841),48598=>array(65,-61,907,841),48599=>array(65,-71,931,841),48600=>array(65,-46,907,841),48601=>array(65,-68,912,841),48602=>array(65,-76,907,841),48603=>array(65,-44,921,841),48604=>array(65,-62,917,841),48605=>array(65,-64,907,841),48606=>array(65,-64,908,841),48607=>array(65,-64,908,841),48608=>array(65,-69,923,841),48609=>array(65,-64,908,841),48610=>array(65,-64,908,841),48611=>array(65,-76,907,841),48612=>array(65,-62,907,841),48613=>array(65,-61,907,841),48614=>array(65,-69,922,841),48615=>array(65,-74,929,841),48616=>array(65,-69,927,841),48617=>array(65,-68,911,841),48618=>array(65,-72,929,841),48619=>array(65,-70,936,841),48620=>array(65,-66,908,841),48621=>array(65,-59,916,841),48622=>array(65,-60,928,841),48623=>array(65,-68,908,841),48624=>array(71,-64,928,815),48625=>array(79,-61,921,815),48626=>array(79,-61,921,815),48627=>array(79,-71,921,815),48628=>array(79,-46,921,815),48629=>array(79,-68,921,815),48630=>array(79,-74,921,815),48631=>array(79,-44,921,815),48632=>array(79,-62,921,815),48633=>array(79,-64,921,815),48634=>array(79,-64,921,815),48635=>array(79,-63,921,815),48636=>array(79,-68,921,815),48637=>array(79,-64,921,815),48638=>array(79,-63,921,815),48639=>array(79,-74,921,815),48640=>array(79,-62,921,815),48641=>array(79,-61,921,815),48642=>array(79,-69,921,815),48643=>array(79,-74,921,815),48644=>array(79,-69,921,815),48645=>array(79,-68,921,815),48646=>array(79,-72,921,815),48647=>array(79,-70,921,815),48648=>array(79,-66,921,815),48649=>array(79,-59,921,815),48650=>array(79,-60,921,815),48651=>array(79,-68,921,815),48652=>array(57,42,943,750),48653=>array(79,-61,921,825),48654=>array(79,-61,921,825),48655=>array(79,-71,921,825),48656=>array(79,-46,921,825),48657=>array(79,-68,921,825),48658=>array(79,-74,921,825),48659=>array(79,-44,921,825),48660=>array(79,-62,921,825),48661=>array(79,-64,921,825),48662=>array(79,-64,921,825),48663=>array(79,-63,921,825),48664=>array(79,-68,921,825),48665=>array(79,-64,921,825),48666=>array(79,-63,921,825),48667=>array(79,-74,921,825),48668=>array(79,-62,921,825),48669=>array(79,-61,921,825),48670=>array(79,-69,921,825),48671=>array(79,-74,921,825),48672=>array(79,-69,921,825),48673=>array(79,-68,921,825),48674=>array(79,-72,921,825),48675=>array(79,-70,921,825),48676=>array(79,-66,921,825),48677=>array(79,-59,921,825),48678=>array(79,-60,921,825),48679=>array(79,-68,921,825),48680=>array(67,-69,907,842),48681=>array(65,-61,907,842),48682=>array(65,-61,907,842),48683=>array(65,-71,931,842),48684=>array(65,-46,907,841),48685=>array(65,-68,912,842),48686=>array(65,-76,907,842),48687=>array(65,-44,921,842),48688=>array(65,-62,917,842),48689=>array(65,-64,907,842),48690=>array(65,-64,908,842),48691=>array(65,-64,908,842),48692=>array(65,-69,923,842),48693=>array(65,-64,908,842),48694=>array(65,-64,908,842),48695=>array(65,-76,907,842),48696=>array(65,-62,907,842),48697=>array(65,-61,907,842),48698=>array(65,-69,922,842),48699=>array(65,-74,929,842),48700=>array(65,-69,927,842),48701=>array(65,-68,911,842),48702=>array(65,-72,929,842),48703=>array(65,-70,936,842),48704=>array(65,-66,908,842),48705=>array(65,-59,916,842),48706=>array(65,-60,928,842),48707=>array(65,-68,908,842),48708=>array(147,-69,907,842),48709=>array(157,-61,907,842),48710=>array(157,-61,907,842),48711=>array(157,-71,931,842),48712=>array(152,-46,907,842),48713=>array(157,-68,912,842),48714=>array(157,-76,907,842),48715=>array(157,-44,921,842),48716=>array(157,-62,917,842),48717=>array(157,-64,907,842),48718=>array(157,-64,908,842),48719=>array(157,-64,908,842),48720=>array(157,-69,923,842),48721=>array(157,-64,908,842),48722=>array(157,-64,908,842),48723=>array(157,-76,907,842),48724=>array(157,-62,907,842),48725=>array(157,-61,907,842),48726=>array(157,-69,922,842),48727=>array(157,-74,929,842),48728=>array(143,-69,927,842),48729=>array(157,-68,911,842),48730=>array(157,-72,929,842),48731=>array(157,-70,936,842),48732=>array(157,-66,908,842),48733=>array(157,-59,916,842),48734=>array(157,-60,928,842),48735=>array(157,-68,908,842),48736=>array(95,-69,936,842),48737=>array(105,-59,936,842),48738=>array(105,-61,936,842),48739=>array(105,-71,936,842),48740=>array(105,-45,936,842),48741=>array(105,-69,936,842),48742=>array(105,-76,936,842),48743=>array(105,-44,936,842),48744=>array(105,-62,936,842),48745=>array(105,-64,936,842),48746=>array(105,-64,936,842),48747=>array(105,-64,936,842),48748=>array(105,-70,936,842),48749=>array(105,-64,936,842),48750=>array(105,-64,936,842),48751=>array(105,-76,936,842),48752=>array(105,-62,936,842),48753=>array(105,-61,936,842),48754=>array(105,-70,936,842),48755=>array(105,-74,936,842),48756=>array(105,-69,936,842),48757=>array(105,-67,936,842),48758=>array(105,-72,936,842),48759=>array(105,-71,936,842),48760=>array(105,-66,936,842),48761=>array(105,-59,936,842),48762=>array(105,-60,936,842),48763=>array(105,-69,936,842),48764=>array(95,-69,907,842),48765=>array(105,-61,907,842),48766=>array(105,-61,907,842),48767=>array(105,-71,931,842),48768=>array(105,-46,907,842),48769=>array(105,-68,912,842),48770=>array(105,-76,907,842),48771=>array(105,-44,921,842),48772=>array(105,-62,917,842),48773=>array(105,-64,907,842),48774=>array(105,-64,908,842),48775=>array(105,-64,908,842),48776=>array(105,-69,923,842),48777=>array(105,-64,908,842),48778=>array(105,-64,908,842),48779=>array(105,-76,907,842),48780=>array(105,-62,907,842),48781=>array(105,-61,907,842),48782=>array(105,-69,922,842),48783=>array(105,-74,929,842),48784=>array(105,-69,927,842),48785=>array(105,-68,911,842),48786=>array(105,-72,929,842),48787=>array(105,-70,936,842),48788=>array(105,-66,908,842),48789=>array(105,-59,916,842),48790=>array(105,-60,928,842),48791=>array(105,-68,908,842),48792=>array(95,-68,935,843),48793=>array(105,-59,936,842),48794=>array(105,-61,936,842),48795=>array(105,-71,936,842),48796=>array(105,-45,936,842),48797=>array(105,-69,936,842),48798=>array(105,-76,936,842),48799=>array(105,-44,936,842),48800=>array(105,-62,936,842),48801=>array(105,-64,936,842),48802=>array(105,-64,936,842),48803=>array(105,-64,936,842),48804=>array(105,-70,936,842),48805=>array(105,-64,936,842),48806=>array(105,-64,936,842),48807=>array(105,-76,936,842),48808=>array(105,-62,936,842),48809=>array(105,-61,936,842),48810=>array(105,-70,936,842),48811=>array(105,-74,936,842),48812=>array(105,-69,936,842),48813=>array(105,-67,936,842),48814=>array(105,-72,936,842),48815=>array(105,-71,936,842),48816=>array(105,-66,936,842),48817=>array(105,-59,936,842),48818=>array(105,-60,936,842),48819=>array(105,-69,936,842),48820=>array(95,-69,907,842),48821=>array(105,-61,907,842),48822=>array(105,-61,907,842),48823=>array(105,-71,931,842),48824=>array(105,-46,907,842),48825=>array(105,-68,912,842),48826=>array(105,-76,907,842),48827=>array(105,-44,921,842),48828=>array(105,-62,917,842),48829=>array(105,-64,907,842),48830=>array(105,-64,908,842),48831=>array(105,-64,908,842),48832=>array(105,-69,923,842),48833=>array(105,-64,908,842),48834=>array(105,-64,908,842),48835=>array(105,-76,907,842),48836=>array(105,-62,907,842),48837=>array(105,-61,907,842),48838=>array(105,-69,922,842),48839=>array(105,-74,929,842),48840=>array(105,-69,927,842),48841=>array(105,-68,911,842),48842=>array(105,-72,929,842),48843=>array(105,-70,936,842),48844=>array(105,-66,908,842),48845=>array(105,-59,916,842),48846=>array(105,-60,928,842),48847=>array(105,-68,908,842),48848=>array(95,-70,907,841),48849=>array(105,-61,907,841),48850=>array(105,-61,907,841),48851=>array(105,-71,931,841),48852=>array(105,-46,907,841),48853=>array(105,-68,912,841),48854=>array(105,-76,907,841),48855=>array(105,-44,921,841),48856=>array(105,-62,917,841),48857=>array(105,-64,907,841),48858=>array(105,-64,908,841),48859=>array(105,-64,908,841),48860=>array(105,-69,923,841),48861=>array(105,-64,908,841),48862=>array(105,-64,908,841),48863=>array(105,-76,906,841),48864=>array(105,-62,907,841),48865=>array(105,-61,907,841),48866=>array(105,-69,922,841),48867=>array(105,-74,929,841),48868=>array(105,-69,927,841),48869=>array(105,-68,911,841),48870=>array(105,-72,929,841),48871=>array(105,-70,936,841),48872=>array(105,-66,908,841),48873=>array(105,-59,916,841),48874=>array(105,-60,928,841),48875=>array(105,-68,908,841),48876=>array(90,-68,907,843),48877=>array(90,-61,907,843),48878=>array(90,-61,907,843),48879=>array(90,-71,931,843),48880=>array(90,-46,907,843),48881=>array(90,-68,912,843),48882=>array(90,-76,907,843),48883=>array(90,-44,921,843),48884=>array(90,-62,917,843),48885=>array(90,-64,907,843),48886=>array(90,-64,908,843),48887=>array(90,-64,908,843),48888=>array(90,-69,923,843),48889=>array(90,-64,908,843),48890=>array(90,-64,908,843),48891=>array(90,-76,907,843),48892=>array(90,-62,907,843),48893=>array(90,-61,907,843),48894=>array(90,-69,922,843),48895=>array(90,-74,929,843),48896=>array(90,-69,927,843),48897=>array(90,-68,911,843),48898=>array(90,-72,929,843),48899=>array(90,-70,936,843),48900=>array(90,-66,908,843),48901=>array(90,-59,916,843),48902=>array(90,-60,928,843),48903=>array(90,-68,908,843),48904=>array(95,-70,907,842),48905=>array(105,-61,908,842),48906=>array(105,-61,908,842),48907=>array(105,-71,931,842),48908=>array(105,-46,907,842),48909=>array(105,-68,912,842),48910=>array(105,-76,908,842),48911=>array(105,-44,921,842),48912=>array(105,-62,917,842),48913=>array(105,-64,908,842),48914=>array(105,-64,908,842),48915=>array(105,-64,908,842),48916=>array(105,-69,923,842),48917=>array(105,-64,908,842),48918=>array(105,-64,908,842),48919=>array(105,-76,908,842),48920=>array(105,-62,908,842),48921=>array(105,-61,908,842),48922=>array(105,-69,922,842),48923=>array(105,-74,929,842),48924=>array(105,-69,927,842),48925=>array(105,-68,911,842),48926=>array(105,-72,929,842),48927=>array(105,-70,936,842),48928=>array(105,-66,908,842),48929=>array(105,-59,916,842),48930=>array(105,-60,928,842),48931=>array(105,-68,908,842),48932=>array(90,-68,907,843),48933=>array(90,-61,907,843),48934=>array(90,-61,907,843),48935=>array(90,-71,931,843),48936=>array(90,-46,907,843),48937=>array(90,-68,912,843),48938=>array(90,-76,907,843),48939=>array(90,-44,921,843),48940=>array(90,-62,917,843),48941=>array(90,-64,907,843),48942=>array(90,-64,908,843),48943=>array(90,-64,908,843),48944=>array(90,-69,923,843),48945=>array(90,-64,908,843),48946=>array(90,-64,908,843),48947=>array(90,-76,907,843),48948=>array(90,-62,907,843),48949=>array(90,-61,907,843),48950=>array(90,-69,922,843),48951=>array(90,-74,929,843),48952=>array(90,-69,927,843),48953=>array(90,-68,911,843),48954=>array(90,-72,929,843),48955=>array(90,-70,936,843),48956=>array(90,-66,908,843),48957=>array(90,-59,916,843),48958=>array(90,-60,928,843),48959=>array(90,-68,908,843),48960=>array(60,12,940,766),48961=>array(79,-61,921,806),48962=>array(79,-61,921,806),48963=>array(79,-71,921,806),48964=>array(79,-46,921,806),48965=>array(79,-68,921,806),48966=>array(79,-74,921,806),48967=>array(79,-44,921,806),48968=>array(79,-62,921,806),48969=>array(79,-64,921,806),48970=>array(79,-64,921,806),48971=>array(79,-63,921,806),48972=>array(79,-68,921,806),48973=>array(79,-64,921,806),48974=>array(79,-63,921,806),48975=>array(79,-74,921,806),48976=>array(79,-62,921,806),48977=>array(79,-61,921,806),48978=>array(79,-69,921,806),48979=>array(79,-74,921,806),48980=>array(79,-69,921,806),48981=>array(79,-68,921,806),48982=>array(79,-72,921,806),48983=>array(79,-70,921,806),48984=>array(79,-66,921,806),48985=>array(79,-59,921,806),48986=>array(79,-60,921,806),48987=>array(79,-68,921,806),48988=>array(51,-69,936,842),48989=>array(69,-59,937,843),48990=>array(69,-61,937,843),48991=>array(69,-71,937,843),48992=>array(57,-45,937,842),48993=>array(69,-69,937,843),48994=>array(69,-76,937,843),48995=>array(69,-44,937,843),48996=>array(69,-62,937,843),48997=>array(69,-64,937,843),48998=>array(69,-64,937,843),48999=>array(69,-64,937,843),49000=>array(69,-70,937,843),49001=>array(69,-64,937,843),49002=>array(69,-64,937,843),49003=>array(69,-76,937,843),49004=>array(69,-62,937,843),49005=>array(69,-61,937,843),49006=>array(69,-70,937,843),49007=>array(69,-74,937,843),49008=>array(69,-69,937,843),49009=>array(69,-67,937,843),49010=>array(69,-72,937,843),49011=>array(69,-71,937,843),49012=>array(69,-66,937,843),49013=>array(69,-59,937,843),49014=>array(69,-60,937,843),49015=>array(69,-69,937,843),49016=>array(57,-69,907,842),49017=>array(69,-61,908,842),49018=>array(69,-61,908,842),49019=>array(69,-71,931,842),49020=>array(57,-46,908,842),49021=>array(69,-68,912,842),49022=>array(69,-76,908,842),49023=>array(69,-44,921,842),49024=>array(69,-62,917,842),49025=>array(69,-64,908,842),49026=>array(69,-64,908,842),49027=>array(69,-64,908,842),49028=>array(69,-69,923,842),49029=>array(69,-64,908,842),49030=>array(69,-64,908,842),49031=>array(69,-76,908,842),49032=>array(69,-62,908,842),49033=>array(69,-61,908,842),49034=>array(69,-69,922,842),49035=>array(69,-74,929,842),49036=>array(69,-69,927,842),49037=>array(69,-68,911,842),49038=>array(69,-72,929,842),49039=>array(69,-70,936,842),49040=>array(69,-66,908,842),49041=>array(69,-59,916,842),49042=>array(69,-60,928,842),49043=>array(69,-68,908,842),49044=>array(58,-69,907,842),49045=>array(64,-61,907,841),49046=>array(64,-61,907,841),49047=>array(64,-71,931,841),49048=>array(64,-46,907,842),49049=>array(64,-68,912,841),49050=>array(64,-76,907,841),49051=>array(64,-44,921,841),49052=>array(64,-62,917,841),49053=>array(64,-64,907,841),49054=>array(64,-64,908,841),49055=>array(64,-64,908,841),49056=>array(64,-69,923,841),49057=>array(64,-64,908,841),49058=>array(64,-64,908,841),49059=>array(64,-76,907,841),49060=>array(64,-62,907,841),49061=>array(64,-61,907,841),49062=>array(64,-69,922,841),49063=>array(64,-74,929,841),49064=>array(64,-69,927,841),49065=>array(64,-68,911,841),49066=>array(64,-72,929,841),49067=>array(64,-70,936,841),49068=>array(64,-66,908,841),49069=>array(64,-59,916,841),49070=>array(64,-60,928,841),49071=>array(64,-68,908,841),49072=>array(60,-13,940,803),49073=>array(79,-61,921,806),49074=>array(79,-61,921,806),49075=>array(79,-71,921,806),49076=>array(79,-46,921,806),49077=>array(79,-68,921,806),49078=>array(79,-74,921,806),49079=>array(79,-44,921,806),49080=>array(79,-62,921,806),49081=>array(79,-64,921,806),49082=>array(79,-64,921,806),49083=>array(79,-63,921,806),49084=>array(79,-68,921,806),49085=>array(79,-64,921,806),49086=>array(79,-63,921,806),49087=>array(79,-74,921,806),49088=>array(79,-62,921,806),49089=>array(79,-61,921,806),49090=>array(79,-69,921,806),49091=>array(79,-74,921,806),49092=>array(79,-69,921,806),49093=>array(79,-68,921,806),49094=>array(79,-72,921,806),49095=>array(79,-70,921,806),49096=>array(79,-66,921,806),49097=>array(79,-59,921,806),49098=>array(79,-60,921,806),49099=>array(79,-68,921,806),49100=>array(79,-64,921,806),49101=>array(79,-61,921,806),49102=>array(79,-61,921,806),49103=>array(79,-71,921,806),49104=>array(79,-46,921,806),49105=>array(79,-68,921,806),49106=>array(79,-74,921,806),49107=>array(79,-44,921,806),49108=>array(79,-62,921,806),49109=>array(79,-64,921,806),49110=>array(79,-64,921,806),49111=>array(79,-63,921,806),49112=>array(79,-68,921,806),49113=>array(79,-64,921,806),49114=>array(79,-63,921,806),49115=>array(79,-74,921,806),49116=>array(79,-62,921,806),49117=>array(79,-61,921,806),49118=>array(79,-69,921,806),49119=>array(79,-74,921,806),49120=>array(79,-69,921,806),49121=>array(79,-68,921,806),49122=>array(79,-72,921,806),49123=>array(79,-70,921,806),49124=>array(79,-66,921,806),49125=>array(79,-59,921,806),49126=>array(79,-60,921,806),49127=>array(79,-68,921,806),49128=>array(72,-70,907,841),49129=>array(67,-61,907,841),49130=>array(67,-61,907,841),49131=>array(67,-71,931,841),49132=>array(65,-46,907,841),49133=>array(67,-68,912,841),49134=>array(67,-76,907,841),49135=>array(67,-44,921,841),49136=>array(67,-62,917,841),49137=>array(67,-64,907,841),49138=>array(67,-64,908,841),49139=>array(67,-64,908,841),49140=>array(67,-69,923,841),49141=>array(67,-64,908,841),49142=>array(67,-64,908,841),49143=>array(67,-76,906,841),49144=>array(67,-62,907,841),49145=>array(67,-61,907,841),49146=>array(67,-69,922,841),49147=>array(67,-74,929,841),49148=>array(67,-69,927,841),49149=>array(67,-68,911,841),49150=>array(67,-72,929,841),49151=>array(67,-70,936,841),49152=>array(67,-66,908,841),49153=>array(67,-59,916,841),49154=>array(67,-60,928,841),49155=>array(67,-68,908,841),49156=>array(51,-68,907,843),49157=>array(67,-61,907,843),49158=>array(67,-61,907,843),49159=>array(67,-71,931,843),49160=>array(68,-46,907,842),49161=>array(67,-68,912,843),49162=>array(67,-76,907,843),49163=>array(67,-44,921,843),49164=>array(67,-62,917,843),49165=>array(67,-64,907,843),49166=>array(67,-64,908,843),49167=>array(67,-64,908,843),49168=>array(67,-69,923,843),49169=>array(67,-64,908,843),49170=>array(67,-64,908,843),49171=>array(67,-76,907,843),49172=>array(67,-62,907,843),49173=>array(67,-61,907,843),49174=>array(67,-69,922,843),49175=>array(67,-74,929,843),49176=>array(67,-69,927,843),49177=>array(67,-68,911,843),49178=>array(67,-72,929,843),49179=>array(67,-70,936,843),49180=>array(67,-66,908,843),49181=>array(67,-59,916,843),49182=>array(67,-60,928,843),49183=>array(67,-68,908,843),49184=>array(64,-69,907,842),49185=>array(65,-61,907,843),49186=>array(65,-61,907,843),49187=>array(65,-71,931,843),49188=>array(66,-46,907,842),49189=>array(65,-68,912,843),49190=>array(65,-76,907,843),49191=>array(65,-44,921,843),49192=>array(65,-62,917,843),49193=>array(65,-64,907,843),49194=>array(65,-64,908,843),49195=>array(65,-64,908,843),49196=>array(65,-69,923,843),49197=>array(65,-64,908,843),49198=>array(65,-64,908,843),49199=>array(65,-76,907,843),49200=>array(65,-62,907,843),49201=>array(65,-61,907,843),49202=>array(65,-69,922,843),49203=>array(65,-74,929,843),49204=>array(65,-69,927,843),49205=>array(65,-68,911,843),49206=>array(65,-72,929,843),49207=>array(65,-70,936,843),49208=>array(65,-66,908,843),49209=>array(65,-59,916,843),49210=>array(65,-60,928,843),49211=>array(65,-68,908,843),49212=>array(79,-64,921,806),49213=>array(79,-61,921,806),49214=>array(79,-61,921,806),49215=>array(79,-71,921,806),49216=>array(81,-46,922,806),49217=>array(79,-68,921,806),49218=>array(79,-74,921,806),49219=>array(79,-44,921,806),49220=>array(79,-62,921,806),49221=>array(79,-64,921,806),49222=>array(79,-64,921,806),49223=>array(79,-63,921,806),49224=>array(79,-68,921,806),49225=>array(79,-64,921,806),49226=>array(79,-63,921,806),49227=>array(79,-74,921,806),49228=>array(79,-62,921,806),49229=>array(79,-61,921,806),49230=>array(79,-69,921,806),49231=>array(79,-74,921,806),49232=>array(79,-69,921,806),49233=>array(79,-68,921,806),49234=>array(79,-72,921,806),49235=>array(79,-70,921,806),49236=>array(79,-66,921,806),49237=>array(79,-59,921,806),49238=>array(79,-60,921,806),49239=>array(79,-68,921,806),49240=>array(57,22,943,746),49241=>array(79,-61,922,811),49242=>array(79,-61,922,811),49243=>array(79,-71,922,811),49244=>array(79,-46,921,806),49245=>array(79,-68,922,811),49246=>array(79,-74,922,811),49247=>array(79,-44,922,811),49248=>array(79,-62,922,811),49249=>array(79,-64,922,811),49250=>array(79,-64,922,811),49251=>array(79,-63,922,811),49252=>array(79,-68,922,811),49253=>array(79,-64,922,811),49254=>array(79,-63,922,811),49255=>array(79,-74,922,811),49256=>array(79,-62,922,811),49257=>array(79,-61,922,811),49258=>array(79,-69,922,811),49259=>array(79,-74,922,811),49260=>array(79,-69,922,811),49261=>array(79,-68,922,811),49262=>array(79,-72,922,811),49263=>array(79,-70,922,811),49264=>array(79,-66,922,811),49265=>array(79,-59,922,811),49266=>array(79,-60,922,811),49267=>array(79,-68,922,811),49268=>array(68,-69,907,842),49269=>array(74,-61,907,841),49270=>array(74,-61,907,841),49271=>array(74,-71,931,841),49272=>array(65,-46,907,842),49273=>array(74,-68,912,841),49274=>array(74,-76,907,841),49275=>array(74,-44,921,841),49276=>array(74,-62,917,841),49277=>array(74,-64,907,841),49278=>array(74,-64,908,841),49279=>array(74,-64,908,841),49280=>array(74,-69,923,841),49281=>array(74,-64,908,841),49282=>array(74,-64,908,841),49283=>array(74,-76,907,841),49284=>array(74,-62,907,841),49285=>array(74,-61,907,841),49286=>array(74,-69,922,841),49287=>array(74,-74,929,841),49288=>array(74,-69,927,841),49289=>array(74,-68,911,841),49290=>array(74,-72,929,841),49291=>array(74,-70,936,841),49292=>array(74,-66,908,841),49293=>array(74,-59,916,841),49294=>array(74,-60,928,841),49295=>array(74,-68,908,841),49296=>array(110,-69,907,842),49297=>array(120,-61,907,842),49298=>array(120,-61,907,842),49299=>array(120,-71,931,842),49300=>array(130,-46,907,842),49301=>array(120,-68,912,842),49302=>array(120,-76,907,842),49303=>array(120,-44,921,842),49304=>array(120,-62,917,842),49305=>array(120,-64,907,842),49306=>array(120,-64,908,842),49307=>array(120,-64,908,842),49308=>array(120,-69,923,842),49309=>array(120,-64,908,842),49310=>array(120,-64,908,842),49311=>array(120,-76,907,842),49312=>array(120,-62,907,842),49313=>array(120,-61,907,842),49314=>array(120,-69,922,842),49315=>array(120,-74,929,842),49316=>array(120,-69,927,842),49317=>array(120,-68,911,842),49318=>array(120,-72,929,842),49319=>array(120,-70,936,842),49320=>array(120,-66,908,842),49321=>array(120,-59,916,842),49322=>array(120,-60,928,842),49323=>array(120,-68,908,842),49324=>array(48,-69,936,842),49325=>array(81,-59,935,842),49326=>array(81,-61,935,842),49327=>array(81,-71,935,842),49328=>array(58,-45,935,841),49329=>array(81,-69,935,842),49330=>array(81,-76,935,842),49331=>array(81,-44,935,842),49332=>array(81,-62,935,842),49333=>array(81,-64,935,842),49334=>array(81,-64,935,842),49335=>array(81,-64,935,842),49336=>array(81,-70,935,842),49337=>array(81,-64,935,842),49338=>array(81,-64,935,842),49339=>array(81,-76,935,842),49340=>array(81,-62,935,842),49341=>array(81,-61,935,842),49342=>array(81,-70,935,842),49343=>array(81,-74,935,842),49344=>array(81,-69,935,842),49345=>array(81,-67,935,842),49346=>array(81,-72,935,842),49347=>array(81,-71,935,842),49348=>array(81,-66,935,842),49349=>array(81,-59,935,842),49350=>array(81,-60,935,842),49351=>array(81,-69,935,842),49352=>array(43,-69,907,842),49353=>array(75,-61,907,842),49354=>array(75,-61,907,842),49355=>array(75,-71,931,842),49356=>array(62,-46,908,842),49357=>array(75,-68,912,842),49358=>array(75,-76,907,842),49359=>array(75,-44,921,842),49360=>array(75,-62,917,842),49361=>array(75,-64,907,842),49362=>array(75,-64,908,842),49363=>array(75,-64,908,842),49364=>array(75,-69,923,842),49365=>array(75,-64,908,842),49366=>array(75,-64,908,842),49367=>array(75,-76,906,842),49368=>array(75,-62,907,842),49369=>array(75,-61,907,842),49370=>array(75,-69,922,842),49371=>array(75,-74,929,842),49372=>array(75,-69,927,842),49373=>array(75,-68,911,842),49374=>array(75,-72,929,842),49375=>array(75,-70,936,842),49376=>array(75,-66,908,842),49377=>array(75,-59,916,842),49378=>array(75,-60,928,842),49379=>array(75,-68,908,842),49380=>array(48,-68,935,843),49381=>array(81,-59,936,842),49382=>array(81,-61,936,842),49383=>array(81,-71,936,842),49384=>array(62,-45,936,842),49385=>array(81,-69,936,842),49386=>array(81,-76,936,842),49387=>array(81,-44,936,842),49388=>array(81,-62,936,842),49389=>array(81,-64,936,842),49390=>array(81,-64,936,842),49391=>array(81,-64,936,842),49392=>array(81,-70,936,842),49393=>array(81,-64,936,842),49394=>array(81,-64,936,842),49395=>array(81,-76,936,842),49396=>array(81,-62,936,842),49397=>array(81,-61,936,842),49398=>array(81,-70,936,842),49399=>array(81,-74,936,842),49400=>array(81,-69,936,842),49401=>array(81,-67,936,842),49402=>array(81,-72,936,842),49403=>array(81,-71,936,842),49404=>array(81,-66,936,842),49405=>array(81,-59,936,842),49406=>array(81,-60,936,842),49407=>array(81,-69,936,842),49408=>array(43,-69,907,842),49409=>array(75,-61,907,842),49410=>array(75,-61,907,842),49411=>array(75,-71,931,842),49412=>array(62,-46,908,842),49413=>array(75,-68,912,842),49414=>array(75,-76,907,842),49415=>array(75,-44,921,842),49416=>array(75,-62,917,842),49417=>array(75,-64,907,842),49418=>array(75,-64,908,842),49419=>array(75,-64,908,842),49420=>array(75,-69,923,842),49421=>array(75,-64,908,842),49422=>array(75,-64,908,842),49423=>array(75,-76,906,842),49424=>array(75,-62,907,842),49425=>array(75,-61,907,842),49426=>array(75,-69,922,842),49427=>array(75,-74,929,842),49428=>array(75,-69,927,842),49429=>array(75,-68,911,842),49430=>array(75,-72,929,842),49431=>array(75,-70,936,842),49432=>array(75,-66,908,842),49433=>array(75,-59,916,842),49434=>array(75,-60,928,842),49435=>array(75,-68,908,842),49436=>array(59,-70,907,841),49437=>array(81,-61,907,841),49438=>array(81,-61,907,841),49439=>array(81,-71,931,841),49440=>array(62,-46,907,841),49441=>array(81,-68,912,841),49442=>array(81,-76,907,841),49443=>array(81,-44,921,841),49444=>array(81,-62,917,841),49445=>array(81,-64,907,841),49446=>array(81,-64,908,841),49447=>array(81,-64,908,841),49448=>array(81,-69,923,841),49449=>array(81,-64,908,841),49450=>array(81,-64,908,841),49451=>array(81,-76,906,841),49452=>array(81,-62,907,841),49453=>array(81,-61,907,841),49454=>array(81,-69,922,841),49455=>array(81,-74,929,841),49456=>array(81,-69,927,841),49457=>array(81,-68,911,841),49458=>array(81,-72,929,841),49459=>array(81,-70,936,841),49460=>array(81,-66,908,841),49461=>array(81,-59,916,841),49462=>array(81,-60,928,841),49463=>array(81,-68,908,841),49464=>array(46,-68,907,843),49465=>array(75,-61,907,843),49466=>array(75,-61,907,843),49467=>array(75,-71,931,843),49468=>array(58,-46,908,842),49469=>array(75,-68,912,843),49470=>array(75,-76,907,843),49471=>array(75,-44,921,843),49472=>array(75,-62,917,843),49473=>array(75,-64,907,843),49474=>array(75,-64,908,843),49475=>array(75,-64,908,843),49476=>array(75,-69,923,843),49477=>array(75,-64,908,843),49478=>array(75,-64,908,843),49479=>array(75,-76,906,843),49480=>array(75,-62,907,843),49481=>array(75,-61,907,843),49482=>array(75,-69,922,843),49483=>array(75,-74,929,843),49484=>array(75,-69,927,843),49485=>array(75,-68,911,843),49486=>array(75,-72,929,843),49487=>array(75,-70,936,843),49488=>array(75,-66,908,843),49489=>array(75,-59,916,843),49490=>array(75,-60,928,843),49491=>array(75,-68,908,843),49492=>array(46,-70,907,842),49493=>array(81,-61,908,842),49494=>array(81,-61,908,842),49495=>array(81,-71,931,842),49496=>array(58,-46,907,841),49497=>array(81,-68,912,842),49498=>array(81,-76,908,842),49499=>array(81,-44,921,842),49500=>array(81,-62,917,842),49501=>array(81,-64,908,842),49502=>array(81,-64,908,842),49503=>array(81,-64,908,842),49504=>array(81,-69,923,842),49505=>array(81,-64,908,842),49506=>array(81,-64,908,842),49507=>array(81,-76,908,842),49508=>array(81,-62,908,842),49509=>array(81,-61,908,842),49510=>array(81,-69,922,842),49511=>array(81,-74,929,842),49512=>array(81,-69,927,842),49513=>array(81,-68,911,842),49514=>array(81,-72,929,842),49515=>array(81,-70,936,842),49516=>array(81,-66,908,842),49517=>array(81,-59,916,842),49518=>array(81,-60,928,842),49519=>array(81,-68,908,842),49520=>array(46,-68,907,843),49521=>array(45,-61,907,842),49522=>array(45,-61,907,842),49523=>array(45,-71,931,842),49524=>array(47,-46,907,842),49525=>array(45,-68,912,842),49526=>array(45,-76,907,842),49527=>array(45,-44,921,842),49528=>array(45,-62,917,842),49529=>array(45,-64,907,842),49530=>array(45,-64,908,842),49531=>array(45,-64,908,842),49532=>array(45,-69,923,842),49533=>array(45,-64,908,842),49534=>array(45,-64,908,842),49535=>array(45,-76,907,842),49536=>array(45,-62,907,842),49537=>array(45,-61,907,842),49538=>array(45,-69,922,842),49539=>array(45,-74,929,842),49540=>array(45,-69,927,842),49541=>array(45,-68,911,842),49542=>array(45,-72,929,842),49543=>array(45,-70,936,842),49544=>array(45,-66,908,842),49545=>array(45,-59,916,842),49546=>array(45,-60,928,842),49547=>array(45,-68,908,842),49548=>array(62,7,943,771),49549=>array(79,-61,921,822),49550=>array(79,-61,921,822),49551=>array(79,-71,921,822),49552=>array(79,-46,921,822),49553=>array(79,-68,921,822),49554=>array(79,-74,921,822),49555=>array(79,-44,921,822),49556=>array(79,-62,921,822),49557=>array(79,-64,921,822),49558=>array(79,-64,921,822),49559=>array(79,-63,921,822),49560=>array(79,-68,921,822),49561=>array(79,-64,921,822),49562=>array(79,-63,921,822),49563=>array(79,-74,921,822),49564=>array(79,-62,921,822),49565=>array(79,-61,921,822),49566=>array(79,-69,921,822),49567=>array(79,-74,921,822),49568=>array(79,-69,921,822),49569=>array(79,-68,921,822),49570=>array(79,-72,921,822),49571=>array(79,-70,921,822),49572=>array(79,-66,921,822),49573=>array(79,-59,921,822),49574=>array(79,-60,921,822),49575=>array(79,-68,921,822),49576=>array(60,-69,937,842),49577=>array(77,-59,936,842),49578=>array(77,-61,936,842),49579=>array(77,-71,936,842),49580=>array(72,-45,937,842),49581=>array(77,-69,936,842),49582=>array(77,-76,936,842),49583=>array(77,-44,936,842),49584=>array(77,-62,936,842),49585=>array(77,-64,936,842),49586=>array(77,-64,936,842),49587=>array(77,-64,936,842),49588=>array(77,-70,936,842),49589=>array(77,-64,936,842),49590=>array(77,-64,936,842),49591=>array(77,-76,936,842),49592=>array(77,-62,936,842),49593=>array(77,-61,936,842),49594=>array(77,-70,936,842),49595=>array(77,-74,936,842),49596=>array(77,-69,936,842),49597=>array(77,-67,936,842),49598=>array(77,-72,936,842),49599=>array(77,-71,936,842),49600=>array(77,-66,936,842),49601=>array(77,-59,936,842),49602=>array(77,-60,936,842),49603=>array(77,-69,936,842),49604=>array(54,-69,907,842),49605=>array(67,-61,907,842),49606=>array(67,-61,907,842),49607=>array(67,-71,931,842),49608=>array(57,-46,908,842),49609=>array(67,-68,912,842),49610=>array(67,-76,907,842),49611=>array(67,-44,921,842),49612=>array(67,-62,917,842),49613=>array(67,-64,907,842),49614=>array(67,-64,908,842),49615=>array(67,-64,908,842),49616=>array(67,-69,923,842),49617=>array(67,-64,908,842),49618=>array(67,-64,908,842),49619=>array(67,-76,907,842),49620=>array(67,-62,907,842),49621=>array(67,-61,907,842),49622=>array(67,-69,922,842),49623=>array(67,-74,929,842),49624=>array(67,-69,927,842),49625=>array(67,-68,911,842),49626=>array(67,-72,929,842),49627=>array(67,-70,936,842),49628=>array(67,-66,908,842),49629=>array(67,-59,916,842),49630=>array(67,-60,928,842),49631=>array(67,-68,908,842),49632=>array(52,-69,907,842),49633=>array(65,-61,908,842),49634=>array(65,-61,908,842),49635=>array(65,-71,931,842),49636=>array(64,-46,907,842),49637=>array(65,-68,912,842),49638=>array(65,-76,908,842),49639=>array(65,-44,921,842),49640=>array(65,-62,917,842),49641=>array(65,-64,908,842),49642=>array(65,-64,908,842),49643=>array(65,-64,908,842),49644=>array(65,-69,923,842),49645=>array(65,-64,908,842),49646=>array(65,-64,908,842),49647=>array(65,-76,908,842),49648=>array(65,-62,908,842),49649=>array(65,-61,908,842),49650=>array(65,-69,922,842),49651=>array(65,-74,929,842),49652=>array(65,-69,927,842),49653=>array(65,-68,911,842),49654=>array(65,-72,929,842),49655=>array(65,-70,936,842),49656=>array(65,-66,908,842),49657=>array(65,-59,916,842),49658=>array(65,-60,928,842),49659=>array(65,-68,908,842),49660=>array(62,7,938,771),49661=>array(79,-61,922,822),49662=>array(79,-61,922,822),49663=>array(79,-71,922,822),49664=>array(79,-46,922,822),49665=>array(79,-68,922,822),49666=>array(79,-74,922,822),49667=>array(79,-44,922,822),49668=>array(79,-62,922,822),49669=>array(79,-64,922,822),49670=>array(79,-64,922,822),49671=>array(79,-63,922,822),49672=>array(79,-68,922,822),49673=>array(79,-64,922,822),49674=>array(79,-63,922,822),49675=>array(79,-74,922,822),49676=>array(79,-62,922,822),49677=>array(79,-61,922,822),49678=>array(79,-69,922,822),49679=>array(79,-74,922,822),49680=>array(79,-69,922,822),49681=>array(79,-68,922,822),49682=>array(79,-72,922,822),49683=>array(79,-70,922,822),49684=>array(79,-66,922,822),49685=>array(79,-59,922,822),49686=>array(79,-60,922,822),49687=>array(79,-68,922,822),49688=>array(79,-64,921,831),49689=>array(79,-61,921,822),49690=>array(79,-61,921,822),49691=>array(79,-71,921,822),49692=>array(79,-46,921,822),49693=>array(79,-68,921,822),49694=>array(79,-74,921,822),49695=>array(79,-44,921,822),49696=>array(79,-62,921,822),49697=>array(79,-64,921,822),49698=>array(79,-64,921,822),49699=>array(79,-63,921,822),49700=>array(79,-68,921,822),49701=>array(79,-64,921,822),49702=>array(79,-63,921,822),49703=>array(79,-74,921,822),49704=>array(79,-62,921,822),49705=>array(79,-61,921,822),49706=>array(79,-69,921,822),49707=>array(79,-74,921,822),49708=>array(79,-69,921,822),49709=>array(79,-68,921,822),49710=>array(79,-72,921,822),49711=>array(79,-70,921,822),49712=>array(79,-66,921,822),49713=>array(79,-59,921,822),49714=>array(79,-60,921,822),49715=>array(79,-68,921,822),49716=>array(69,-70,907,841),49717=>array(73,-61,907,841),49718=>array(73,-61,907,841),49719=>array(73,-71,931,841),49720=>array(76,-46,907,841),49721=>array(73,-68,912,841),49722=>array(73,-76,907,841),49723=>array(73,-44,921,841),49724=>array(73,-62,917,841),49725=>array(73,-64,907,841),49726=>array(73,-64,908,841),49727=>array(73,-64,908,841),49728=>array(73,-69,923,841),49729=>array(73,-64,908,841),49730=>array(73,-64,908,841),49731=>array(73,-76,906,841),49732=>array(73,-62,907,841),49733=>array(73,-61,907,841),49734=>array(73,-69,922,841),49735=>array(73,-74,929,841),49736=>array(73,-69,927,841),49737=>array(73,-68,911,841),49738=>array(73,-72,929,841),49739=>array(73,-70,936,841),49740=>array(73,-66,908,841),49741=>array(73,-59,916,841),49742=>array(73,-60,928,841),49743=>array(73,-68,908,841),49744=>array(63,-68,907,843),49745=>array(70,-61,907,843),49746=>array(70,-61,907,843),49747=>array(70,-71,931,843),49748=>array(62,-46,907,843),49749=>array(70,-68,912,843),49750=>array(70,-76,907,843),49751=>array(70,-44,921,843),49752=>array(70,-62,917,843),49753=>array(70,-64,907,843),49754=>array(70,-64,908,843),49755=>array(70,-64,908,843),49756=>array(70,-69,923,843),49757=>array(70,-64,908,843),49758=>array(70,-64,908,843),49759=>array(70,-76,907,843),49760=>array(70,-62,907,843),49761=>array(70,-61,907,843),49762=>array(70,-69,922,843),49763=>array(70,-74,929,843),49764=>array(70,-69,927,843),49765=>array(70,-68,911,843),49766=>array(70,-72,929,843),49767=>array(70,-70,936,843),49768=>array(70,-66,908,843),49769=>array(70,-59,916,843),49770=>array(70,-60,928,843),49771=>array(70,-68,908,843),49772=>array(63,-69,907,842),49773=>array(65,-61,907,840),49774=>array(65,-61,907,840),49775=>array(65,-71,931,840),49776=>array(65,-46,907,843),49777=>array(65,-68,912,840),49778=>array(65,-76,907,840),49779=>array(65,-44,921,840),49780=>array(65,-62,917,840),49781=>array(65,-64,907,840),49782=>array(65,-64,908,840),49783=>array(65,-64,908,840),49784=>array(65,-69,923,840),49785=>array(65,-64,908,840),49786=>array(65,-64,908,840),49787=>array(65,-76,907,840),49788=>array(65,-62,907,840),49789=>array(65,-61,907,840),49790=>array(65,-69,922,840),49791=>array(65,-74,929,840),49792=>array(65,-69,927,840),49793=>array(65,-68,911,840),49794=>array(65,-72,929,840),49795=>array(65,-70,936,840),49796=>array(65,-66,908,840),49797=>array(65,-59,916,840),49798=>array(65,-60,928,840),49799=>array(65,-68,908,840),49800=>array(87,-64,928,831),49801=>array(79,-61,921,822),49802=>array(79,-61,921,822),49803=>array(79,-71,921,822),49804=>array(81,-46,922,822),49805=>array(79,-68,921,822),49806=>array(79,-74,921,822),49807=>array(79,-44,921,822),49808=>array(79,-62,921,822),49809=>array(79,-64,921,822),49810=>array(79,-64,921,822),49811=>array(79,-63,921,822),49812=>array(79,-68,921,822),49813=>array(79,-64,921,822),49814=>array(79,-63,921,822),49815=>array(79,-74,921,822),49816=>array(79,-62,921,822),49817=>array(79,-61,921,822),49818=>array(79,-69,921,822),49819=>array(79,-74,921,822),49820=>array(79,-69,921,822),49821=>array(79,-68,921,822),49822=>array(79,-72,921,822),49823=>array(79,-70,921,822),49824=>array(79,-66,921,822),49825=>array(79,-59,921,822),49826=>array(79,-60,921,822),49827=>array(79,-68,921,822),49828=>array(57,52,943,741),49829=>array(79,-61,922,802),49830=>array(79,-61,922,802),49831=>array(79,-71,922,802),49832=>array(79,-46,922,802),49833=>array(79,-68,922,802),49834=>array(79,-74,922,802),49835=>array(79,-44,922,802),49836=>array(79,-62,922,802),49837=>array(79,-64,922,802),49838=>array(79,-64,922,802),49839=>array(79,-63,922,802),49840=>array(79,-68,922,802),49841=>array(79,-64,922,802),49842=>array(79,-63,922,802),49843=>array(79,-74,922,802),49844=>array(79,-62,922,802),49845=>array(79,-61,922,802),49846=>array(79,-69,922,802),49847=>array(79,-74,922,802),49848=>array(79,-69,922,802),49849=>array(79,-68,922,802),49850=>array(79,-72,922,802),49851=>array(79,-70,922,802),49852=>array(79,-66,922,802),49853=>array(79,-59,922,802),49854=>array(79,-60,922,802),49855=>array(79,-68,922,802),49856=>array(78,-69,907,842),49857=>array(65,-61,907,842),49858=>array(65,-61,907,842),49859=>array(65,-71,931,842),49860=>array(65,-46,907,842),49861=>array(65,-68,912,842),49862=>array(65,-76,907,842),49863=>array(65,-44,921,842),49864=>array(65,-62,917,842),49865=>array(65,-64,907,842),49866=>array(65,-64,908,842),49867=>array(65,-64,908,842),49868=>array(65,-69,923,842),49869=>array(65,-64,908,842),49870=>array(65,-64,908,842),49871=>array(65,-76,907,842),49872=>array(65,-62,907,842),49873=>array(65,-61,907,842),49874=>array(65,-69,922,842),49875=>array(65,-74,929,842),49876=>array(65,-69,927,842),49877=>array(65,-68,911,842),49878=>array(65,-72,929,842),49879=>array(65,-70,936,842),49880=>array(65,-66,908,842),49881=>array(65,-59,916,842),49882=>array(65,-60,928,842),49883=>array(65,-68,908,842),49884=>array(90,-69,907,842),49885=>array(106,-61,907,842),49886=>array(106,-61,907,842),49887=>array(106,-71,931,842),49888=>array(104,-46,907,842),49889=>array(106,-68,912,842),49890=>array(106,-76,907,842),49891=>array(106,-44,921,842),49892=>array(106,-62,917,842),49893=>array(106,-64,907,842),49894=>array(106,-64,908,842),49895=>array(106,-64,908,842),49896=>array(106,-69,923,842),49897=>array(106,-64,908,842),49898=>array(106,-64,908,842),49899=>array(106,-76,907,842),49900=>array(106,-62,907,842),49901=>array(106,-61,907,842),49902=>array(106,-69,922,842),49903=>array(106,-74,929,842),49904=>array(106,-69,927,842),49905=>array(106,-68,911,842),49906=>array(106,-72,929,842),49907=>array(106,-70,936,842),49908=>array(106,-66,908,842),49909=>array(106,-59,916,842),49910=>array(106,-60,928,842),49911=>array(106,-68,908,842),49912=>array(20,-69,937,842),49913=>array(62,-59,936,842),49914=>array(62,-61,936,842),49915=>array(62,-71,936,842),49916=>array(72,-45,936,842),49917=>array(62,-69,936,842),49918=>array(62,-76,936,842),49919=>array(62,-44,936,842),49920=>array(62,-62,936,842),49921=>array(62,-64,936,842),49922=>array(62,-64,936,842),49923=>array(62,-64,936,842),49924=>array(62,-70,936,842),49925=>array(62,-64,936,842),49926=>array(62,-64,936,842),49927=>array(62,-76,936,842),49928=>array(62,-62,936,842),49929=>array(62,-61,936,842),49930=>array(62,-70,936,842),49931=>array(62,-74,936,842),49932=>array(62,-69,936,842),49933=>array(62,-67,936,842),49934=>array(62,-72,936,842),49935=>array(62,-71,936,842),49936=>array(62,-66,936,842),49937=>array(62,-59,936,842),49938=>array(62,-60,936,842),49939=>array(62,-69,936,842),49940=>array(21,-69,907,842),49941=>array(55,-61,907,842),49942=>array(55,-61,907,842),49943=>array(55,-71,931,842),49944=>array(52,-46,907,842),49945=>array(55,-68,912,842),49946=>array(55,-76,907,842),49947=>array(55,-44,921,842),49948=>array(55,-62,917,842),49949=>array(55,-64,907,842),49950=>array(55,-64,908,842),49951=>array(55,-64,908,842),49952=>array(55,-69,923,842),49953=>array(55,-64,908,842),49954=>array(55,-64,908,842),49955=>array(55,-76,907,842),49956=>array(55,-62,907,842),49957=>array(55,-61,907,842),49958=>array(55,-69,922,842),49959=>array(55,-74,929,842),49960=>array(55,-69,927,842),49961=>array(55,-68,911,842),49962=>array(55,-72,929,842),49963=>array(55,-70,936,842),49964=>array(55,-66,908,842),49965=>array(55,-59,916,842),49966=>array(55,-60,928,842),49967=>array(55,-68,908,842),49968=>array(20,-68,935,843),49969=>array(62,-59,936,842),49970=>array(62,-61,936,842),49971=>array(62,-71,936,842),49972=>array(72,-45,936,842),49973=>array(62,-69,936,842),49974=>array(62,-76,936,842),49975=>array(62,-44,936,842),49976=>array(62,-62,936,842),49977=>array(62,-64,936,842),49978=>array(62,-64,936,842),49979=>array(62,-64,936,842),49980=>array(62,-70,936,842),49981=>array(62,-64,936,842),49982=>array(62,-64,936,842),49983=>array(62,-76,936,842),49984=>array(62,-62,936,842),49985=>array(62,-61,936,842),49986=>array(62,-70,936,842),49987=>array(62,-74,936,842),49988=>array(62,-69,936,842),49989=>array(62,-67,936,842),49990=>array(62,-72,936,842),49991=>array(62,-71,936,842),49992=>array(62,-66,936,842),49993=>array(62,-59,936,842),49994=>array(62,-60,936,842),49995=>array(62,-69,936,842),49996=>array(21,-69,907,842),49997=>array(60,-61,907,842),49998=>array(60,-61,907,842),49999=>array(60,-71,931,842),50000=>array(52,-46,907,842),50001=>array(60,-68,912,842),50002=>array(60,-76,907,842),50003=>array(60,-44,921,842),50004=>array(60,-62,917,842),50005=>array(60,-64,907,842),50006=>array(60,-64,908,842),50007=>array(60,-64,908,842),50008=>array(60,-69,923,842),50009=>array(60,-64,908,842),50010=>array(60,-64,908,842),50011=>array(60,-76,907,842),50012=>array(60,-62,907,842),50013=>array(60,-61,907,842),50014=>array(60,-69,922,842),50015=>array(60,-74,929,842),50016=>array(60,-69,927,842),50017=>array(60,-68,911,842),50018=>array(60,-72,929,842),50019=>array(60,-70,936,842),50020=>array(60,-66,908,842),50021=>array(60,-59,916,842),50022=>array(60,-60,928,842),50023=>array(60,-68,908,842),50024=>array(20,-70,907,841),50025=>array(72,-61,907,841),50026=>array(72,-61,907,841),50027=>array(72,-71,931,841),50028=>array(72,-46,907,841),50029=>array(72,-68,912,841),50030=>array(72,-76,907,841),50031=>array(72,-44,921,841),50032=>array(72,-62,917,841),50033=>array(72,-64,907,841),50034=>array(72,-64,908,841),50035=>array(72,-64,908,841),50036=>array(72,-69,923,841),50037=>array(72,-64,908,841),50038=>array(72,-64,908,841),50039=>array(72,-76,906,841),50040=>array(72,-62,907,841),50041=>array(72,-61,907,841),50042=>array(72,-69,922,841),50043=>array(72,-74,929,841),50044=>array(72,-69,927,841),50045=>array(72,-68,911,841),50046=>array(72,-72,929,841),50047=>array(72,-70,936,841),50048=>array(72,-66,908,841),50049=>array(72,-59,916,841),50050=>array(72,-60,928,841),50051=>array(72,-68,908,841),50052=>array(20,-68,907,843),50053=>array(50,-61,907,843),50054=>array(50,-61,907,843),50055=>array(50,-71,931,843),50056=>array(52,-46,907,843),50057=>array(50,-68,912,843),50058=>array(50,-76,907,843),50059=>array(50,-44,921,843),50060=>array(50,-62,917,843),50061=>array(50,-64,907,843),50062=>array(50,-64,908,843),50063=>array(50,-64,908,843),50064=>array(50,-69,923,843),50065=>array(50,-64,908,843),50066=>array(50,-64,908,843),50067=>array(50,-76,907,843),50068=>array(50,-62,907,843),50069=>array(50,-61,907,843),50070=>array(50,-69,922,843),50071=>array(50,-74,929,843),50072=>array(50,-69,927,843),50073=>array(50,-68,911,843),50074=>array(50,-72,929,843),50075=>array(50,-70,936,843),50076=>array(50,-66,908,843),50077=>array(50,-59,916,843),50078=>array(50,-60,928,843),50079=>array(50,-68,908,843),50080=>array(20,-70,907,842),50081=>array(52,-61,908,842),50082=>array(52,-61,908,842),50083=>array(52,-71,931,842),50084=>array(52,-46,907,842),50085=>array(52,-68,912,842),50086=>array(52,-76,908,842),50087=>array(52,-44,921,842),50088=>array(52,-62,917,842),50089=>array(52,-64,908,842),50090=>array(52,-64,908,842),50091=>array(52,-64,908,842),50092=>array(52,-69,923,842),50093=>array(52,-64,908,842),50094=>array(52,-64,908,842),50095=>array(52,-76,908,842),50096=>array(52,-62,908,842),50097=>array(52,-61,908,842),50098=>array(52,-69,922,842),50099=>array(52,-74,929,842),50100=>array(52,-69,927,842),50101=>array(52,-68,911,842),50102=>array(52,-72,929,842),50103=>array(52,-70,936,842),50104=>array(52,-66,908,842),50105=>array(52,-59,916,842),50106=>array(52,-60,928,842),50107=>array(52,-68,908,842),50108=>array(20,-68,907,843),50109=>array(50,-61,907,843),50110=>array(50,-61,907,843),50111=>array(50,-71,931,843),50112=>array(40,-46,907,843),50113=>array(50,-68,912,843),50114=>array(50,-76,907,843),50115=>array(50,-44,921,843),50116=>array(50,-62,917,843),50117=>array(50,-64,907,843),50118=>array(50,-64,908,843),50119=>array(50,-64,908,843),50120=>array(50,-69,923,843),50121=>array(50,-64,908,843),50122=>array(50,-64,908,843),50123=>array(50,-76,907,843),50124=>array(50,-62,907,843),50125=>array(50,-61,907,843),50126=>array(50,-69,922,843),50127=>array(50,-74,929,843),50128=>array(50,-69,927,843),50129=>array(50,-68,911,843),50130=>array(50,-72,929,843),50131=>array(50,-70,936,843),50132=>array(50,-66,908,843),50133=>array(50,-59,916,843),50134=>array(50,-60,928,843),50135=>array(50,-68,908,843),50136=>array(62,12,943,774),50137=>array(79,-61,921,788),50138=>array(79,-61,921,788),50139=>array(79,-71,921,788),50140=>array(79,-46,922,788),50141=>array(79,-68,921,788),50142=>array(79,-74,921,788),50143=>array(79,-44,921,788),50144=>array(79,-62,921,788),50145=>array(79,-64,921,788),50146=>array(79,-64,921,788),50147=>array(79,-63,921,788),50148=>array(79,-68,921,788),50149=>array(79,-64,921,788),50150=>array(79,-63,921,788),50151=>array(79,-74,921,788),50152=>array(79,-62,921,788),50153=>array(79,-61,921,788),50154=>array(79,-69,921,788),50155=>array(79,-74,921,788),50156=>array(79,-69,921,788),50157=>array(79,-68,921,788),50158=>array(79,-72,921,788),50159=>array(79,-70,921,788),50160=>array(79,-66,921,788),50161=>array(79,-59,921,788),50162=>array(79,-60,921,788),50163=>array(79,-68,921,788),50164=>array(41,-68,936,843),50165=>array(55,-59,936,842),50166=>array(55,-61,936,842),50167=>array(55,-71,936,842),50168=>array(64,-45,936,842),50169=>array(55,-69,936,842),50170=>array(55,-76,936,842),50171=>array(55,-44,936,842),50172=>array(55,-62,936,842),50173=>array(55,-64,936,842),50174=>array(55,-64,936,842),50175=>array(55,-64,936,842),50176=>array(55,-70,936,842),50177=>array(55,-64,936,842),50178=>array(55,-64,936,842),50179=>array(55,-76,936,842),50180=>array(55,-62,936,842),50181=>array(55,-61,936,842),50182=>array(55,-70,936,842),50183=>array(55,-74,936,842),50184=>array(55,-69,936,842),50185=>array(55,-67,936,842),50186=>array(55,-72,936,842),50187=>array(55,-71,936,842),50188=>array(55,-66,936,842),50189=>array(55,-59,936,842),50190=>array(55,-60,936,842),50191=>array(55,-69,936,842),50192=>array(38,-69,907,842),50193=>array(63,-61,907,842),50194=>array(63,-61,907,842),50195=>array(63,-71,931,842),50196=>array(48,-46,907,842),50197=>array(63,-68,912,842),50198=>array(63,-76,907,842),50199=>array(63,-44,921,842),50200=>array(63,-62,917,842),50201=>array(63,-64,907,842),50202=>array(63,-64,908,842),50203=>array(63,-64,908,842),50204=>array(63,-69,923,842),50205=>array(63,-64,908,842),50206=>array(63,-64,908,842),50207=>array(63,-76,907,842),50208=>array(63,-62,907,842),50209=>array(63,-61,907,842),50210=>array(63,-69,922,842),50211=>array(63,-74,929,842),50212=>array(63,-69,927,842),50213=>array(63,-68,911,842),50214=>array(63,-72,929,842),50215=>array(63,-70,936,842),50216=>array(63,-66,908,842),50217=>array(63,-59,916,842),50218=>array(63,-60,928,842),50219=>array(63,-68,908,842),50220=>array(68,-69,907,842),50221=>array(65,-61,907,842),50222=>array(65,-61,907,842),50223=>array(65,-71,931,842),50224=>array(65,-46,907,842),50225=>array(65,-68,912,842),50226=>array(65,-76,907,842),50227=>array(65,-44,921,842),50228=>array(65,-62,917,842),50229=>array(65,-64,907,842),50230=>array(65,-64,908,842),50231=>array(65,-64,908,842),50232=>array(65,-69,923,842),50233=>array(65,-64,908,842),50234=>array(65,-64,908,842),50235=>array(65,-76,907,842),50236=>array(65,-62,907,842),50237=>array(65,-61,907,842),50238=>array(65,-69,922,842),50239=>array(65,-74,929,842),50240=>array(65,-69,927,842),50241=>array(65,-68,911,842),50242=>array(65,-72,929,842),50243=>array(65,-70,936,842),50244=>array(65,-66,908,842),50245=>array(65,-59,916,842),50246=>array(65,-60,928,842),50247=>array(65,-68,908,842),50248=>array(62,12,943,774),50249=>array(79,-61,922,788),50250=>array(79,-61,922,788),50251=>array(79,-71,922,788),50252=>array(79,-46,922,788),50253=>array(79,-68,922,788),50254=>array(79,-74,922,788),50255=>array(79,-44,922,788),50256=>array(79,-62,922,788),50257=>array(79,-64,922,788),50258=>array(79,-64,922,788),50259=>array(79,-63,922,788),50260=>array(79,-68,922,788),50261=>array(79,-64,922,788),50262=>array(79,-63,922,788),50263=>array(79,-74,922,788),50264=>array(79,-62,922,788),50265=>array(79,-61,922,788),50266=>array(79,-69,922,788),50267=>array(79,-74,922,788),50268=>array(79,-69,922,788),50269=>array(79,-68,922,788),50270=>array(79,-72,922,788),50271=>array(79,-70,922,788),50272=>array(79,-66,922,788),50273=>array(79,-59,922,788),50274=>array(79,-60,922,788),50275=>array(79,-68,922,788),50276=>array(82,-64,924,822),50277=>array(79,-61,921,788),50278=>array(79,-61,921,788),50279=>array(79,-71,921,788),50280=>array(79,-46,921,788),50281=>array(79,-68,921,788),50282=>array(79,-74,921,788),50283=>array(79,-44,921,788),50284=>array(79,-62,921,788),50285=>array(79,-64,921,788),50286=>array(79,-64,921,788),50287=>array(79,-63,921,788),50288=>array(79,-68,921,788),50289=>array(79,-64,921,788),50290=>array(79,-63,921,788),50291=>array(79,-74,921,788),50292=>array(79,-62,921,788),50293=>array(79,-61,921,788),50294=>array(79,-69,921,788),50295=>array(79,-74,921,788),50296=>array(79,-69,921,788),50297=>array(79,-68,921,788),50298=>array(79,-72,921,788),50299=>array(79,-70,921,788),50300=>array(79,-66,921,788),50301=>array(79,-59,921,788),50302=>array(79,-60,921,788),50303=>array(79,-68,921,788),50304=>array(81,-70,907,841),50305=>array(74,-61,908,841),50306=>array(74,-61,908,841),50307=>array(74,-71,931,841),50308=>array(66,-46,908,842),50309=>array(74,-68,912,841),50310=>array(74,-76,908,841),50311=>array(74,-44,921,841),50312=>array(74,-62,917,841),50313=>array(74,-64,908,841),50314=>array(74,-64,908,841),50315=>array(74,-64,908,841),50316=>array(74,-69,923,841),50317=>array(74,-64,908,841),50318=>array(74,-64,908,841),50319=>array(74,-76,908,841),50320=>array(74,-62,908,841),50321=>array(74,-61,908,841),50322=>array(74,-69,922,841),50323=>array(74,-74,929,841),50324=>array(74,-69,927,841),50325=>array(74,-68,911,841),50326=>array(74,-72,929,841),50327=>array(74,-70,936,841),50328=>array(74,-66,908,841),50329=>array(74,-59,916,841),50330=>array(74,-60,928,841),50331=>array(74,-68,908,841),50332=>array(51,-68,907,843),50333=>array(64,-61,907,843),50334=>array(64,-61,907,843),50335=>array(64,-71,931,843),50336=>array(64,-46,907,843),50337=>array(64,-68,912,843),50338=>array(64,-76,907,843),50339=>array(64,-44,921,843),50340=>array(64,-62,917,843),50341=>array(64,-64,907,843),50342=>array(64,-64,908,843),50343=>array(64,-64,908,843),50344=>array(64,-69,923,843),50345=>array(64,-64,908,843),50346=>array(64,-64,908,843),50347=>array(64,-76,907,843),50348=>array(64,-62,907,843),50349=>array(64,-61,907,843),50350=>array(64,-69,922,843),50351=>array(64,-74,929,843),50352=>array(64,-69,927,843),50353=>array(64,-68,911,843),50354=>array(64,-72,929,843),50355=>array(64,-70,936,843),50356=>array(64,-66,908,843),50357=>array(64,-59,916,843),50358=>array(64,-60,928,843),50359=>array(64,-68,908,843),50360=>array(60,-69,907,842),50361=>array(65,-61,907,842),50362=>array(65,-61,907,842),50363=>array(65,-71,931,842),50364=>array(65,-46,907,842),50365=>array(65,-68,912,842),50366=>array(65,-76,907,842),50367=>array(65,-44,921,842),50368=>array(65,-62,917,842),50369=>array(65,-64,907,842),50370=>array(65,-64,908,842),50371=>array(65,-64,908,842),50372=>array(65,-69,923,842),50373=>array(65,-64,908,842),50374=>array(65,-64,908,842),50375=>array(65,-76,907,842),50376=>array(65,-62,907,842),50377=>array(65,-61,907,842),50378=>array(65,-69,922,842),50379=>array(65,-74,929,842),50380=>array(65,-69,927,842),50381=>array(65,-68,911,842),50382=>array(65,-72,929,842),50383=>array(65,-70,936,842),50384=>array(65,-66,908,842),50385=>array(65,-59,916,842),50386=>array(65,-60,928,842),50387=>array(65,-68,908,842),50388=>array(82,-64,924,822),50389=>array(79,-61,921,788),50390=>array(79,-61,921,788),50391=>array(79,-71,921,788),50392=>array(81,-46,922,788),50393=>array(79,-68,921,788),50394=>array(79,-74,921,788),50395=>array(79,-44,921,788),50396=>array(79,-62,921,788),50397=>array(79,-64,921,788),50398=>array(79,-64,921,788),50399=>array(79,-63,921,788),50400=>array(79,-68,921,788),50401=>array(79,-64,921,788),50402=>array(79,-63,921,788),50403=>array(79,-74,921,788),50404=>array(79,-62,921,788),50405=>array(79,-61,921,788),50406=>array(79,-69,921,788),50407=>array(79,-74,921,788),50408=>array(79,-69,921,788),50409=>array(79,-68,921,788),50410=>array(79,-72,921,788),50411=>array(79,-70,921,788),50412=>array(79,-66,921,788),50413=>array(79,-59,921,788),50414=>array(79,-60,921,788),50415=>array(79,-68,921,788),50416=>array(57,22,943,720),50417=>array(79,-61,922,794),50418=>array(79,-61,922,794),50419=>array(79,-71,922,794),50420=>array(79,-46,921,794),50421=>array(79,-68,922,794),50422=>array(79,-74,922,794),50423=>array(79,-44,922,794),50424=>array(79,-62,922,794),50425=>array(79,-64,922,794),50426=>array(79,-64,922,794),50427=>array(79,-63,922,794),50428=>array(79,-68,922,794),50429=>array(79,-64,922,794),50430=>array(79,-63,922,794),50431=>array(79,-74,922,794),50432=>array(79,-62,922,794),50433=>array(79,-61,922,794),50434=>array(79,-69,922,794),50435=>array(79,-74,922,794),50436=>array(79,-69,922,794),50437=>array(79,-68,922,794),50438=>array(79,-72,922,794),50439=>array(79,-70,922,794),50440=>array(79,-66,922,794),50441=>array(79,-59,922,794),50442=>array(79,-60,922,794),50443=>array(79,-68,922,794),50444=>array(67,-69,907,842),50445=>array(75,-61,907,842),50446=>array(75,-61,907,842),50447=>array(75,-71,931,842),50448=>array(65,-46,907,842),50449=>array(75,-68,912,842),50450=>array(75,-76,907,842),50451=>array(75,-44,921,842),50452=>array(75,-62,917,842),50453=>array(75,-64,907,842),50454=>array(75,-64,908,842),50455=>array(75,-64,908,842),50456=>array(75,-69,923,842),50457=>array(75,-64,908,842),50458=>array(75,-64,908,842),50459=>array(75,-76,907,842),50460=>array(75,-62,907,842),50461=>array(75,-61,907,842),50462=>array(75,-69,922,842),50463=>array(75,-74,929,842),50464=>array(75,-69,927,842),50465=>array(75,-68,911,842),50466=>array(75,-72,929,842),50467=>array(75,-70,936,842),50468=>array(75,-66,908,842),50469=>array(75,-59,916,842),50470=>array(75,-60,928,842),50471=>array(75,-68,908,842),50472=>array(48,-69,907,842),50473=>array(68,-61,907,842),50474=>array(68,-61,907,842),50475=>array(68,-71,931,842),50476=>array(68,-46,907,842),50477=>array(68,-68,912,842),50478=>array(68,-76,907,842),50479=>array(68,-44,921,842),50480=>array(68,-62,917,842),50481=>array(68,-64,907,842),50482=>array(68,-64,908,842),50483=>array(68,-64,908,842),50484=>array(68,-69,923,842),50485=>array(68,-64,908,842),50486=>array(68,-64,908,842),50487=>array(68,-76,907,842),50488=>array(68,-62,907,842),50489=>array(68,-61,907,842),50490=>array(68,-69,922,842),50491=>array(68,-74,929,842),50492=>array(68,-69,927,842),50493=>array(68,-68,911,842),50494=>array(68,-72,929,842),50495=>array(68,-70,936,842),50496=>array(68,-66,908,842),50497=>array(68,-59,916,842),50498=>array(68,-60,928,842),50499=>array(68,-68,908,842),50500=>array(108,-69,936,842),50501=>array(113,-59,936,842),50502=>array(113,-61,936,842),50503=>array(113,-71,936,842),50504=>array(100,-45,936,842),50505=>array(113,-69,936,842),50506=>array(113,-76,936,842),50507=>array(113,-44,936,842),50508=>array(113,-62,936,842),50509=>array(113,-64,936,842),50510=>array(113,-64,936,842),50511=>array(113,-64,936,842),50512=>array(113,-70,936,842),50513=>array(113,-64,936,842),50514=>array(113,-64,936,842),50515=>array(113,-76,936,842),50516=>array(113,-62,936,842),50517=>array(113,-61,936,842),50518=>array(113,-70,936,842),50519=>array(113,-74,936,842),50520=>array(113,-69,936,842),50521=>array(113,-67,936,842),50522=>array(113,-72,936,842),50523=>array(113,-71,936,842),50524=>array(113,-66,936,842),50525=>array(113,-59,936,842),50526=>array(113,-60,936,842),50527=>array(113,-69,936,842),50528=>array(105,-69,907,842),50529=>array(93,-61,907,842),50530=>array(93,-61,907,842),50531=>array(93,-71,931,842),50532=>array(80,-46,907,842),50533=>array(93,-68,912,842),50534=>array(93,-76,907,842),50535=>array(93,-44,921,842),50536=>array(93,-62,917,842),50537=>array(93,-64,907,842),50538=>array(93,-64,908,842),50539=>array(93,-64,908,842),50540=>array(93,-69,923,842),50541=>array(93,-64,908,842),50542=>array(93,-64,908,842),50543=>array(93,-76,907,842),50544=>array(93,-62,907,842),50545=>array(93,-61,907,842),50546=>array(93,-69,922,842),50547=>array(93,-74,929,842),50548=>array(93,-69,927,842),50549=>array(93,-68,911,842),50550=>array(93,-72,929,842),50551=>array(93,-70,936,842),50552=>array(93,-66,908,842),50553=>array(93,-59,916,842),50554=>array(93,-60,928,842),50555=>array(93,-68,908,842),50556=>array(123,-68,935,843),50557=>array(113,-59,936,842),50558=>array(113,-61,936,842),50559=>array(113,-71,936,842),50560=>array(100,-45,936,842),50561=>array(113,-69,936,842),50562=>array(113,-76,936,842),50563=>array(113,-44,936,842),50564=>array(113,-62,936,842),50565=>array(113,-64,936,842),50566=>array(113,-64,936,842),50567=>array(113,-64,936,842),50568=>array(113,-70,936,842),50569=>array(113,-64,936,842),50570=>array(113,-64,936,842),50571=>array(113,-76,936,842),50572=>array(113,-62,936,842),50573=>array(113,-61,936,842),50574=>array(113,-70,936,842),50575=>array(113,-74,936,842),50576=>array(113,-69,936,842),50577=>array(113,-67,936,842),50578=>array(113,-72,936,842),50579=>array(113,-71,936,842),50580=>array(113,-66,936,842),50581=>array(113,-59,936,842),50582=>array(113,-60,936,842),50583=>array(113,-69,936,842),50584=>array(105,-69,907,842),50585=>array(93,-61,907,842),50586=>array(93,-61,907,842),50587=>array(93,-71,931,842),50588=>array(85,-46,907,842),50589=>array(93,-68,912,842),50590=>array(93,-76,907,842),50591=>array(93,-44,921,842),50592=>array(93,-62,917,842),50593=>array(93,-64,907,842),50594=>array(93,-64,908,842),50595=>array(93,-64,908,842),50596=>array(93,-69,923,842),50597=>array(93,-64,908,842),50598=>array(93,-64,908,842),50599=>array(93,-76,907,842),50600=>array(93,-62,907,842),50601=>array(93,-61,907,842),50602=>array(93,-69,922,842),50603=>array(93,-74,929,842),50604=>array(93,-69,927,842),50605=>array(93,-68,911,842),50606=>array(93,-72,929,842),50607=>array(93,-70,936,842),50608=>array(93,-66,908,842),50609=>array(93,-59,916,842),50610=>array(93,-60,928,842),50611=>array(93,-68,908,842),50612=>array(93,-70,907,841),50613=>array(88,-61,907,841),50614=>array(88,-61,907,841),50615=>array(88,-71,931,841),50616=>array(85,-46,907,841),50617=>array(88,-68,912,841),50618=>array(88,-76,907,841),50619=>array(88,-44,921,841),50620=>array(88,-62,917,841),50621=>array(88,-64,907,841),50622=>array(88,-64,908,841),50623=>array(88,-64,908,841),50624=>array(88,-69,923,841),50625=>array(88,-64,908,841),50626=>array(88,-64,908,841),50627=>array(88,-76,906,841),50628=>array(88,-62,907,841),50629=>array(88,-61,907,841),50630=>array(88,-69,922,841),50631=>array(88,-74,929,841),50632=>array(88,-69,927,841),50633=>array(88,-68,911,841),50634=>array(88,-72,929,841),50635=>array(88,-70,936,841),50636=>array(88,-66,908,841),50637=>array(88,-59,916,841),50638=>array(88,-60,928,841),50639=>array(88,-68,908,841),50640=>array(85,-68,907,843),50641=>array(75,-61,907,843),50642=>array(75,-61,907,843),50643=>array(75,-71,931,843),50644=>array(76,-46,907,843),50645=>array(75,-68,912,843),50646=>array(75,-76,907,843),50647=>array(75,-44,921,843),50648=>array(75,-62,917,843),50649=>array(75,-64,907,843),50650=>array(75,-64,908,843),50651=>array(75,-64,908,843),50652=>array(75,-69,923,843),50653=>array(75,-64,908,843),50654=>array(75,-64,908,843),50655=>array(75,-76,907,843),50656=>array(75,-62,907,843),50657=>array(75,-61,907,843),50658=>array(75,-69,922,843),50659=>array(75,-74,929,843),50660=>array(75,-69,927,843),50661=>array(75,-68,911,843),50662=>array(75,-72,929,843),50663=>array(75,-70,936,843),50664=>array(75,-66,908,843),50665=>array(75,-59,916,843),50666=>array(75,-60,928,843),50667=>array(75,-68,908,843),50668=>array(93,-70,907,842),50669=>array(88,-61,908,842),50670=>array(88,-61,908,842),50671=>array(88,-71,931,842),50672=>array(85,-46,907,842),50673=>array(88,-68,912,842),50674=>array(88,-76,908,842),50675=>array(88,-44,921,842),50676=>array(88,-62,917,842),50677=>array(88,-64,908,842),50678=>array(88,-64,908,842),50679=>array(88,-64,908,842),50680=>array(88,-69,923,842),50681=>array(88,-64,908,842),50682=>array(88,-64,908,842),50683=>array(88,-76,908,842),50684=>array(88,-62,908,842),50685=>array(88,-61,908,842),50686=>array(88,-69,922,842),50687=>array(88,-74,929,842),50688=>array(88,-69,927,842),50689=>array(88,-68,911,842),50690=>array(88,-72,929,842),50691=>array(88,-70,936,842),50692=>array(88,-66,908,842),50693=>array(88,-59,916,842),50694=>array(88,-60,928,842),50695=>array(88,-68,908,842),50696=>array(85,-68,907,843),50697=>array(75,-61,907,843),50698=>array(75,-61,907,843),50699=>array(75,-71,931,843),50700=>array(76,-46,907,843),50701=>array(75,-68,912,843),50702=>array(75,-76,907,843),50703=>array(75,-44,921,843),50704=>array(75,-62,917,843),50705=>array(75,-64,907,843),50706=>array(75,-64,908,843),50707=>array(75,-64,908,843),50708=>array(75,-69,923,843),50709=>array(75,-64,908,843),50710=>array(75,-64,908,843),50711=>array(75,-76,907,843),50712=>array(75,-62,907,843),50713=>array(75,-61,907,843),50714=>array(75,-69,922,843),50715=>array(75,-74,929,843),50716=>array(75,-69,927,843),50717=>array(75,-68,911,843),50718=>array(75,-72,929,843),50719=>array(75,-70,936,843),50720=>array(75,-66,908,843),50721=>array(75,-59,916,843),50722=>array(75,-60,928,843),50723=>array(75,-68,908,843),50724=>array(62,4,938,763),50725=>array(79,-61,921,808),50726=>array(79,-61,921,808),50727=>array(79,-71,921,808),50728=>array(79,-46,922,803),50729=>array(79,-68,921,808),50730=>array(79,-74,921,808),50731=>array(79,-44,921,808),50732=>array(79,-62,921,808),50733=>array(79,-64,921,808),50734=>array(79,-64,921,808),50735=>array(79,-63,921,808),50736=>array(79,-68,921,808),50737=>array(79,-64,921,808),50738=>array(79,-63,921,808),50739=>array(79,-74,921,808),50740=>array(79,-62,921,808),50741=>array(79,-61,921,808),50742=>array(79,-69,921,808),50743=>array(79,-74,921,808),50744=>array(79,-69,921,808),50745=>array(79,-68,921,808),50746=>array(79,-72,921,808),50747=>array(79,-70,921,808),50748=>array(79,-66,921,808),50749=>array(79,-59,921,808),50750=>array(79,-60,921,808),50751=>array(79,-68,921,808),50752=>array(52,-69,936,842),50753=>array(77,-59,936,842),50754=>array(77,-61,936,842),50755=>array(77,-71,936,842),50756=>array(72,-45,936,842),50757=>array(77,-69,936,842),50758=>array(77,-76,936,842),50759=>array(77,-44,936,842),50760=>array(77,-62,936,842),50761=>array(77,-64,936,842),50762=>array(77,-64,936,842),50763=>array(77,-64,936,842),50764=>array(77,-70,936,842),50765=>array(77,-64,936,842),50766=>array(77,-64,936,842),50767=>array(77,-76,936,842),50768=>array(77,-62,936,842),50769=>array(77,-61,936,842),50770=>array(77,-70,936,842),50771=>array(77,-74,936,842),50772=>array(77,-69,936,842),50773=>array(77,-67,936,842),50774=>array(77,-72,936,842),50775=>array(77,-71,936,842),50776=>array(77,-66,936,842),50777=>array(77,-59,936,842),50778=>array(77,-60,936,842),50779=>array(77,-69,936,842),50780=>array(61,-69,907,842),50781=>array(62,-61,907,842),50782=>array(62,-61,907,842),50783=>array(62,-71,931,842),50784=>array(62,-46,907,842),50785=>array(62,-68,912,842),50786=>array(62,-76,907,842),50787=>array(62,-44,921,842),50788=>array(62,-62,917,842),50789=>array(62,-64,907,842),50790=>array(62,-64,908,842),50791=>array(62,-64,908,842),50792=>array(62,-69,923,842),50793=>array(62,-64,908,842),50794=>array(62,-64,908,842),50795=>array(62,-76,907,842),50796=>array(62,-62,907,842),50797=>array(62,-61,907,842),50798=>array(62,-69,922,842),50799=>array(62,-74,929,842),50800=>array(62,-69,927,842),50801=>array(62,-68,911,842),50802=>array(62,-72,929,842),50803=>array(62,-70,936,842),50804=>array(62,-66,908,842),50805=>array(62,-59,916,842),50806=>array(62,-60,928,842),50807=>array(62,-68,908,842),50808=>array(52,-69,907,842),50809=>array(64,-61,907,842),50810=>array(64,-61,907,842),50811=>array(64,-71,931,842),50812=>array(64,-46,907,842),50813=>array(64,-68,912,842),50814=>array(64,-76,907,842),50815=>array(64,-44,921,842),50816=>array(64,-62,917,842),50817=>array(64,-64,907,842),50818=>array(64,-64,908,842),50819=>array(64,-64,908,842),50820=>array(64,-69,923,842),50821=>array(64,-64,908,842),50822=>array(64,-64,908,842),50823=>array(64,-76,907,842),50824=>array(64,-62,907,842),50825=>array(64,-61,907,842),50826=>array(64,-69,922,842),50827=>array(64,-74,929,842),50828=>array(64,-69,927,842),50829=>array(64,-68,911,842),50830=>array(64,-72,929,842),50831=>array(64,-70,936,842),50832=>array(64,-66,908,842),50833=>array(64,-59,916,842),50834=>array(64,-60,928,842),50835=>array(64,-68,908,842),50836=>array(62,4,938,763),50837=>array(79,-61,922,808),50838=>array(79,-61,922,808),50839=>array(79,-71,922,808),50840=>array(79,-46,922,793),50841=>array(79,-68,922,808),50842=>array(79,-74,922,808),50843=>array(79,-44,922,808),50844=>array(79,-62,922,808),50845=>array(79,-64,922,808),50846=>array(79,-64,922,808),50847=>array(79,-63,922,808),50848=>array(79,-68,922,808),50849=>array(79,-64,922,808),50850=>array(79,-63,922,808),50851=>array(79,-74,922,808),50852=>array(79,-62,922,808),50853=>array(79,-61,922,808),50854=>array(79,-69,922,808),50855=>array(79,-74,922,808),50856=>array(79,-69,922,808),50857=>array(79,-68,922,808),50858=>array(79,-72,922,808),50859=>array(79,-70,922,808),50860=>array(79,-66,922,808),50861=>array(79,-59,922,808),50862=>array(79,-60,922,808),50863=>array(79,-68,922,808),50864=>array(79,-64,921,793),50865=>array(79,-61,921,808),50866=>array(79,-61,921,808),50867=>array(79,-71,921,808),50868=>array(79,-46,921,793),50869=>array(79,-68,921,808),50870=>array(79,-74,921,808),50871=>array(79,-44,921,808),50872=>array(79,-62,921,808),50873=>array(79,-64,921,808),50874=>array(79,-64,921,808),50875=>array(79,-63,921,808),50876=>array(79,-68,921,808),50877=>array(79,-64,921,808),50878=>array(79,-63,921,808),50879=>array(79,-74,921,808),50880=>array(79,-62,921,808),50881=>array(79,-61,921,808),50882=>array(79,-69,921,808),50883=>array(79,-74,921,808),50884=>array(79,-69,921,808),50885=>array(79,-68,921,808),50886=>array(79,-72,921,808),50887=>array(79,-70,921,808),50888=>array(79,-66,921,808),50889=>array(79,-59,921,808),50890=>array(79,-60,921,808),50891=>array(79,-68,921,808),50892=>array(73,-70,907,841),50893=>array(75,-61,908,841),50894=>array(75,-61,908,841),50895=>array(75,-71,931,841),50896=>array(76,-46,907,841),50897=>array(75,-68,912,841),50898=>array(75,-76,908,841),50899=>array(75,-44,921,841),50900=>array(75,-62,917,841),50901=>array(75,-64,908,841),50902=>array(75,-64,908,841),50903=>array(75,-64,908,841),50904=>array(75,-69,923,841),50905=>array(75,-64,908,841),50906=>array(75,-64,908,841),50907=>array(75,-76,908,841),50908=>array(75,-62,908,841),50909=>array(75,-61,908,841),50910=>array(75,-69,922,841),50911=>array(75,-74,929,841),50912=>array(75,-69,927,841),50913=>array(75,-68,911,841),50914=>array(75,-72,929,841),50915=>array(75,-70,936,841),50916=>array(75,-66,908,841),50917=>array(75,-59,916,841),50918=>array(75,-60,928,841),50919=>array(75,-68,908,841),50920=>array(53,-68,907,843),50921=>array(70,-61,907,843),50922=>array(70,-61,907,843),50923=>array(70,-71,931,843),50924=>array(61,-46,907,843),50925=>array(70,-68,912,843),50926=>array(70,-76,907,843),50927=>array(70,-44,921,843),50928=>array(70,-62,917,843),50929=>array(70,-64,907,843),50930=>array(70,-64,908,843),50931=>array(70,-64,908,843),50932=>array(70,-69,923,843),50933=>array(70,-64,908,843),50934=>array(70,-64,908,843),50935=>array(70,-76,907,843),50936=>array(70,-62,907,843),50937=>array(70,-61,907,843),50938=>array(70,-69,922,843),50939=>array(70,-74,929,843),50940=>array(70,-69,927,843),50941=>array(70,-68,911,843),50942=>array(70,-72,929,843),50943=>array(70,-70,936,843),50944=>array(70,-66,908,843),50945=>array(70,-59,916,843),50946=>array(70,-60,928,843),50947=>array(70,-68,908,843),50948=>array(70,-69,907,842),50949=>array(65,-61,907,842),50950=>array(65,-61,907,842),50951=>array(65,-71,931,842),50952=>array(63,-46,907,842),50953=>array(65,-68,912,842),50954=>array(65,-76,907,842),50955=>array(65,-44,921,842),50956=>array(65,-62,917,842),50957=>array(65,-64,907,842),50958=>array(65,-64,908,842),50959=>array(65,-64,908,842),50960=>array(65,-69,923,842),50961=>array(65,-64,908,842),50962=>array(65,-64,908,842),50963=>array(65,-76,907,842),50964=>array(65,-62,907,842),50965=>array(65,-61,907,842),50966=>array(65,-69,922,842),50967=>array(65,-74,929,842),50968=>array(65,-69,927,842),50969=>array(65,-68,911,842),50970=>array(65,-72,929,842),50971=>array(65,-70,936,842),50972=>array(65,-66,908,842),50973=>array(65,-59,916,842),50974=>array(65,-60,928,842),50975=>array(65,-68,908,842),50976=>array(71,-64,928,793),50977=>array(79,-61,921,808),50978=>array(79,-61,921,808),50979=>array(79,-71,921,808),50980=>array(79,-46,921,793),50981=>array(79,-68,921,808),50982=>array(79,-74,921,808),50983=>array(79,-44,921,808),50984=>array(79,-62,921,808),50985=>array(79,-64,921,808),50986=>array(79,-64,921,808),50987=>array(79,-63,921,808),50988=>array(79,-68,921,808),50989=>array(79,-64,921,808),50990=>array(79,-63,921,808),50991=>array(79,-74,921,808),50992=>array(79,-62,921,808),50993=>array(79,-61,921,808),50994=>array(79,-69,921,808),50995=>array(79,-74,921,808),50996=>array(79,-69,921,808),50997=>array(79,-68,921,808),50998=>array(79,-72,921,808),50999=>array(79,-70,921,808),51000=>array(79,-66,921,808),51001=>array(79,-59,921,808),51002=>array(79,-60,921,808),51003=>array(79,-68,921,808),51004=>array(57,42,943,733),51005=>array(79,-61,921,808),51006=>array(79,-61,921,808),51007=>array(79,-71,921,808),51008=>array(79,-46,921,793),51009=>array(79,-68,921,808),51010=>array(79,-74,921,808),51011=>array(79,-44,921,808),51012=>array(79,-62,921,808),51013=>array(79,-64,921,808),51014=>array(79,-64,921,808),51015=>array(79,-63,921,808),51016=>array(79,-68,921,808),51017=>array(79,-64,921,808),51018=>array(79,-63,921,808),51019=>array(79,-74,921,808),51020=>array(79,-62,921,808),51021=>array(79,-61,921,808),51022=>array(79,-69,921,808),51023=>array(79,-74,921,808),51024=>array(79,-69,921,808),51025=>array(79,-68,921,808),51026=>array(79,-72,921,808),51027=>array(79,-70,921,808),51028=>array(79,-66,921,808),51029=>array(79,-59,921,808),51030=>array(79,-60,921,808),51031=>array(79,-68,921,808),51032=>array(67,-69,907,842),51033=>array(75,-61,907,842),51034=>array(75,-61,907,842),51035=>array(75,-71,931,842),51036=>array(66,-46,907,842),51037=>array(75,-68,912,842),51038=>array(75,-76,907,842),51039=>array(75,-44,921,842),51040=>array(75,-62,917,842),51041=>array(75,-64,907,842),51042=>array(75,-64,908,842),51043=>array(75,-64,908,842),51044=>array(75,-69,923,842),51045=>array(75,-64,908,842),51046=>array(75,-64,908,842),51047=>array(75,-76,907,842),51048=>array(75,-62,907,842),51049=>array(75,-61,907,842),51050=>array(75,-69,922,842),51051=>array(75,-74,929,842),51052=>array(75,-69,927,842),51053=>array(75,-68,911,842),51054=>array(75,-72,929,842),51055=>array(75,-70,936,842),51056=>array(75,-66,908,842),51057=>array(75,-59,916,842),51058=>array(75,-60,928,842),51059=>array(75,-68,908,842),51060=>array(134,-69,906,842),51061=>array(119,-61,907,842),51062=>array(119,-61,907,842),51063=>array(119,-71,931,842),51064=>array(108,-46,907,842),51065=>array(119,-68,912,842),51066=>array(119,-76,907,842),51067=>array(119,-44,921,842),51068=>array(119,-62,917,842),51069=>array(119,-64,907,842),51070=>array(119,-64,908,842),51071=>array(119,-64,908,842),51072=>array(119,-69,923,842),51073=>array(119,-64,908,842),51074=>array(119,-64,908,842),51075=>array(119,-76,907,842),51076=>array(119,-62,907,842),51077=>array(119,-61,907,842),51078=>array(119,-69,922,842),51079=>array(119,-74,929,842),51080=>array(119,-69,927,842),51081=>array(119,-68,911,842),51082=>array(119,-72,929,842),51083=>array(119,-70,936,842),51084=>array(119,-66,908,842),51085=>array(119,-59,916,842),51086=>array(119,-60,928,842),51087=>array(119,-68,908,842),51088=>array(73,-69,936,842),51089=>array(83,-59,936,842),51090=>array(83,-61,936,842),51091=>array(83,-71,936,842),51092=>array(71,-45,936,842),51093=>array(83,-69,936,842),51094=>array(83,-76,936,842),51095=>array(83,-44,936,842),51096=>array(83,-62,936,842),51097=>array(83,-64,936,842),51098=>array(83,-64,936,842),51099=>array(83,-64,936,842),51100=>array(83,-70,936,842),51101=>array(83,-64,936,842),51102=>array(83,-64,936,842),51103=>array(83,-76,936,842),51104=>array(83,-62,936,842),51105=>array(83,-61,936,842),51106=>array(83,-70,936,842),51107=>array(83,-74,936,842),51108=>array(83,-69,936,842),51109=>array(83,-67,936,842),51110=>array(83,-72,936,842),51111=>array(83,-71,936,842),51112=>array(83,-66,936,842),51113=>array(83,-59,936,842),51114=>array(83,-60,936,842),51115=>array(83,-69,936,842),51116=>array(50,-69,907,842),51117=>array(84,-61,907,842),51118=>array(84,-61,907,842),51119=>array(84,-71,931,842),51120=>array(76,-46,907,842),51121=>array(84,-68,912,842),51122=>array(84,-76,907,842),51123=>array(84,-44,921,842),51124=>array(84,-62,917,842),51125=>array(84,-64,907,842),51126=>array(84,-64,908,842),51127=>array(84,-64,908,842),51128=>array(84,-69,923,842),51129=>array(84,-64,908,842),51130=>array(84,-64,908,842),51131=>array(84,-76,907,842),51132=>array(84,-62,907,842),51133=>array(84,-61,907,842),51134=>array(84,-69,922,842),51135=>array(84,-74,929,842),51136=>array(84,-69,927,842),51137=>array(84,-68,911,842),51138=>array(84,-72,929,842),51139=>array(84,-70,936,842),51140=>array(84,-66,908,842),51141=>array(84,-59,916,842),51142=>array(84,-60,928,842),51143=>array(84,-68,908,842),51144=>array(73,-68,935,843),51145=>array(83,-59,936,842),51146=>array(83,-61,936,842),51147=>array(83,-71,936,842),51148=>array(71,-45,936,842),51149=>array(83,-69,936,842),51150=>array(83,-76,936,842),51151=>array(83,-44,936,842),51152=>array(83,-62,936,842),51153=>array(83,-64,936,842),51154=>array(83,-64,936,842),51155=>array(83,-64,936,842),51156=>array(83,-70,936,842),51157=>array(83,-64,936,842),51158=>array(83,-64,936,842),51159=>array(83,-76,936,842),51160=>array(83,-62,936,842),51161=>array(83,-61,936,842),51162=>array(83,-70,936,842),51163=>array(83,-74,936,842),51164=>array(83,-69,936,842),51165=>array(83,-67,936,842),51166=>array(83,-72,936,842),51167=>array(83,-71,936,842),51168=>array(83,-66,936,842),51169=>array(83,-59,936,842),51170=>array(83,-60,936,842),51171=>array(83,-69,936,842),51172=>array(50,-69,907,842),51173=>array(84,-61,907,842),51174=>array(84,-61,907,842),51175=>array(84,-71,931,842),51176=>array(76,-46,907,842),51177=>array(84,-68,912,842),51178=>array(84,-76,907,842),51179=>array(84,-44,921,842),51180=>array(84,-62,917,842),51181=>array(84,-64,907,842),51182=>array(84,-64,908,842),51183=>array(84,-64,908,842),51184=>array(84,-69,923,842),51185=>array(84,-64,908,842),51186=>array(84,-64,908,842),51187=>array(84,-76,907,842),51188=>array(84,-62,907,842),51189=>array(84,-61,907,842),51190=>array(84,-69,922,842),51191=>array(84,-74,929,842),51192=>array(84,-69,927,842),51193=>array(84,-68,911,842),51194=>array(84,-72,929,842),51195=>array(84,-70,936,842),51196=>array(84,-66,908,842),51197=>array(84,-59,916,842),51198=>array(84,-60,928,842),51199=>array(84,-68,908,842),51200=>array(68,-70,907,841),51201=>array(83,-61,907,841),51202=>array(83,-61,907,841),51203=>array(83,-71,931,841),51204=>array(71,-46,907,841),51205=>array(83,-68,912,841),51206=>array(83,-76,907,841),51207=>array(83,-44,921,841),51208=>array(83,-62,917,841),51209=>array(83,-64,907,841),51210=>array(83,-64,908,841),51211=>array(83,-64,908,841),51212=>array(83,-69,923,841),51213=>array(83,-64,908,841),51214=>array(83,-64,908,841),51215=>array(83,-76,906,841),51216=>array(83,-62,907,841),51217=>array(83,-61,907,841),51218=>array(83,-69,922,841),51219=>array(83,-74,929,841),51220=>array(83,-69,927,841),51221=>array(83,-68,911,841),51222=>array(83,-72,929,841),51223=>array(83,-70,936,841),51224=>array(83,-66,908,841),51225=>array(83,-59,916,841),51226=>array(83,-60,928,841),51227=>array(83,-68,908,841),51228=>array(50,-69,907,842),51229=>array(64,-61,907,843),51230=>array(64,-61,907,843),51231=>array(64,-71,931,843),51232=>array(56,-46,907,843),51233=>array(64,-68,912,843),51234=>array(64,-76,907,843),51235=>array(64,-44,921,843),51236=>array(64,-62,917,843),51237=>array(64,-64,907,843),51238=>array(64,-64,908,843),51239=>array(64,-64,908,843),51240=>array(64,-69,923,843),51241=>array(64,-64,908,843),51242=>array(64,-64,908,843),51243=>array(64,-76,907,843),51244=>array(64,-62,907,843),51245=>array(64,-61,907,843),51246=>array(64,-69,922,843),51247=>array(64,-74,929,843),51248=>array(64,-69,927,843),51249=>array(64,-68,911,843),51250=>array(64,-72,929,843),51251=>array(64,-70,936,843),51252=>array(64,-66,908,843),51253=>array(64,-59,916,843),51254=>array(64,-60,928,843),51255=>array(64,-68,908,843),51256=>array(58,-70,907,842),51257=>array(63,-61,908,842),51258=>array(63,-61,908,842),51259=>array(63,-71,931,842),51260=>array(70,-46,907,842),51261=>array(63,-68,912,842),51262=>array(63,-76,908,842),51263=>array(63,-44,921,842),51264=>array(63,-62,917,842),51265=>array(63,-64,908,842),51266=>array(63,-64,908,842),51267=>array(63,-64,908,842),51268=>array(63,-69,923,842),51269=>array(63,-64,908,842),51270=>array(63,-64,908,842),51271=>array(63,-76,908,842),51272=>array(63,-62,908,842),51273=>array(63,-61,908,842),51274=>array(63,-69,922,842),51275=>array(63,-74,929,842),51276=>array(63,-69,927,842),51277=>array(63,-68,911,842),51278=>array(63,-72,929,842),51279=>array(63,-70,936,842),51280=>array(63,-66,908,842),51281=>array(63,-59,916,842),51282=>array(63,-60,928,842),51283=>array(63,-68,908,842),51284=>array(38,-69,908,842),51285=>array(62,-61,907,843),51286=>array(62,-61,907,843),51287=>array(62,-71,931,843),51288=>array(53,-46,907,843),51289=>array(62,-68,912,843),51290=>array(62,-76,907,843),51291=>array(62,-44,921,843),51292=>array(62,-62,917,843),51293=>array(62,-64,907,843),51294=>array(62,-64,908,843),51295=>array(62,-64,908,843),51296=>array(62,-69,923,843),51297=>array(62,-64,908,843),51298=>array(62,-64,908,843),51299=>array(62,-76,907,843),51300=>array(62,-62,907,843),51301=>array(62,-61,907,843),51302=>array(62,-69,922,843),51303=>array(62,-74,929,843),51304=>array(62,-69,927,843),51305=>array(62,-68,911,843),51306=>array(62,-72,929,843),51307=>array(62,-70,936,843),51308=>array(62,-66,908,843),51309=>array(62,-59,916,843),51310=>array(62,-60,928,843),51311=>array(62,-68,908,843),51312=>array(62,22,943,742),51313=>array(79,-61,921,798),51314=>array(79,-61,921,798),51315=>array(79,-71,921,798),51316=>array(79,-46,921,798),51317=>array(79,-68,921,798),51318=>array(79,-74,921,798),51319=>array(79,-44,921,798),51320=>array(79,-62,921,798),51321=>array(79,-64,921,798),51322=>array(79,-64,921,798),51323=>array(79,-63,921,798),51324=>array(79,-68,921,798),51325=>array(79,-64,921,798),51326=>array(79,-63,921,798),51327=>array(79,-74,921,798),51328=>array(79,-62,921,798),51329=>array(79,-61,921,798),51330=>array(79,-69,921,798),51331=>array(79,-74,921,798),51332=>array(79,-69,921,798),51333=>array(79,-68,921,798),51334=>array(79,-72,921,798),51335=>array(79,-70,921,798),51336=>array(79,-66,921,798),51337=>array(79,-59,921,798),51338=>array(79,-60,921,798),51339=>array(79,-68,921,798),51340=>array(64,-69,936,842),51341=>array(77,-59,936,842),51342=>array(77,-61,936,842),51343=>array(77,-71,936,842),51344=>array(72,-45,936,842),51345=>array(77,-69,936,842),51346=>array(77,-76,936,842),51347=>array(77,-44,936,842),51348=>array(77,-62,936,842),51349=>array(77,-64,936,842),51350=>array(77,-64,936,842),51351=>array(77,-64,936,842),51352=>array(77,-70,936,842),51353=>array(77,-64,936,842),51354=>array(77,-64,936,842),51355=>array(77,-76,936,842),51356=>array(77,-62,936,842),51357=>array(77,-61,936,842),51358=>array(77,-70,936,842),51359=>array(77,-74,936,842),51360=>array(77,-69,936,842),51361=>array(77,-67,936,842),51362=>array(77,-72,936,842),51363=>array(77,-71,936,842),51364=>array(77,-66,936,842),51365=>array(77,-59,936,842),51366=>array(77,-60,936,842),51367=>array(77,-69,936,842),51368=>array(49,-69,907,842),51369=>array(77,-61,907,842),51370=>array(77,-61,907,842),51371=>array(77,-71,931,842),51372=>array(72,-46,907,842),51373=>array(77,-68,912,842),51374=>array(77,-76,907,842),51375=>array(77,-44,921,842),51376=>array(77,-62,917,842),51377=>array(77,-64,907,842),51378=>array(77,-64,908,842),51379=>array(77,-64,908,842),51380=>array(77,-69,923,842),51381=>array(77,-64,908,842),51382=>array(77,-64,908,842),51383=>array(77,-76,907,842),51384=>array(77,-62,907,842),51385=>array(77,-61,907,842),51386=>array(77,-69,922,842),51387=>array(77,-74,929,842),51388=>array(77,-69,927,842),51389=>array(77,-68,911,842),51390=>array(77,-72,929,842),51391=>array(77,-70,936,842),51392=>array(77,-66,908,842),51393=>array(77,-59,916,842),51394=>array(77,-60,928,842),51395=>array(77,-68,908,842),51396=>array(52,-69,907,842),51397=>array(65,-61,907,842),51398=>array(65,-61,907,842),51399=>array(65,-71,931,842),51400=>array(65,-46,907,842),51401=>array(65,-68,912,842),51402=>array(65,-76,907,842),51403=>array(65,-44,921,842),51404=>array(65,-62,917,842),51405=>array(65,-64,907,842),51406=>array(65,-64,908,842),51407=>array(65,-64,908,842),51408=>array(65,-69,923,842),51409=>array(65,-64,908,842),51410=>array(65,-64,908,842),51411=>array(65,-76,907,842),51412=>array(65,-62,907,842),51413=>array(65,-61,907,842),51414=>array(65,-69,922,842),51415=>array(65,-74,929,842),51416=>array(65,-69,927,842),51417=>array(65,-68,911,842),51418=>array(65,-72,929,842),51419=>array(65,-70,936,842),51420=>array(65,-66,908,842),51421=>array(65,-59,916,842),51422=>array(65,-60,928,842),51423=>array(65,-68,908,842),51424=>array(62,22,938,742),51425=>array(79,-61,922,798),51426=>array(79,-61,922,798),51427=>array(79,-71,922,798),51428=>array(79,-46,922,798),51429=>array(79,-68,922,798),51430=>array(79,-74,922,798),51431=>array(79,-44,922,798),51432=>array(79,-62,922,798),51433=>array(79,-64,922,798),51434=>array(79,-64,922,798),51435=>array(79,-63,922,798),51436=>array(79,-68,922,798),51437=>array(79,-64,922,798),51438=>array(79,-63,922,798),51439=>array(79,-74,922,798),51440=>array(79,-62,922,798),51441=>array(79,-61,922,798),51442=>array(79,-69,922,798),51443=>array(79,-74,922,798),51444=>array(79,-69,922,798),51445=>array(79,-68,922,798),51446=>array(79,-72,922,798),51447=>array(79,-70,922,798),51448=>array(79,-66,922,798),51449=>array(79,-59,922,798),51450=>array(79,-60,922,798),51451=>array(79,-68,922,798),51452=>array(79,-64,921,798),51453=>array(79,-61,921,798),51454=>array(79,-61,921,798),51455=>array(79,-71,921,798),51456=>array(79,-46,921,798),51457=>array(79,-68,921,798),51458=>array(79,-74,921,798),51459=>array(79,-44,921,798),51460=>array(79,-62,921,798),51461=>array(79,-64,921,798),51462=>array(79,-64,921,798),51463=>array(79,-63,921,798),51464=>array(79,-68,921,798),51465=>array(79,-64,921,798),51466=>array(79,-63,921,798),51467=>array(79,-74,921,798),51468=>array(79,-62,921,798),51469=>array(79,-61,921,798),51470=>array(79,-69,921,798),51471=>array(79,-74,921,798),51472=>array(79,-69,921,798),51473=>array(79,-68,921,798),51474=>array(79,-72,921,798),51475=>array(79,-70,921,798),51476=>array(79,-66,921,798),51477=>array(79,-59,921,798),51478=>array(79,-60,921,798),51479=>array(79,-68,921,798),51480=>array(70,-70,907,841),51481=>array(73,-61,910,841),51482=>array(73,-61,910,841),51483=>array(73,-71,931,841),51484=>array(76,-46,909,840),51485=>array(73,-68,912,841),51486=>array(73,-76,910,841),51487=>array(73,-44,921,841),51488=>array(73,-62,917,841),51489=>array(73,-64,910,841),51490=>array(73,-64,910,841),51491=>array(73,-64,910,841),51492=>array(73,-69,923,841),51493=>array(73,-64,910,841),51494=>array(73,-64,910,841),51495=>array(73,-76,910,841),51496=>array(73,-62,910,841),51497=>array(73,-61,910,841),51498=>array(73,-69,922,841),51499=>array(73,-74,929,841),51500=>array(73,-69,927,841),51501=>array(73,-68,911,841),51502=>array(73,-72,929,841),51503=>array(73,-70,936,841),51504=>array(73,-66,910,841),51505=>array(73,-59,916,841),51506=>array(73,-60,928,841),51507=>array(73,-68,910,841),51508=>array(63,-68,907,843),51509=>array(70,-61,907,843),51510=>array(70,-61,907,843),51511=>array(70,-71,931,843),51512=>array(76,-46,907,843),51513=>array(70,-68,912,843),51514=>array(70,-76,907,843),51515=>array(70,-44,921,843),51516=>array(70,-62,917,843),51517=>array(70,-64,907,843),51518=>array(70,-64,908,843),51519=>array(70,-64,908,843),51520=>array(70,-69,923,843),51521=>array(70,-64,908,843),51522=>array(70,-64,908,843),51523=>array(70,-76,907,843),51524=>array(70,-62,907,843),51525=>array(70,-61,907,843),51526=>array(70,-69,922,843),51527=>array(70,-74,929,843),51528=>array(70,-69,927,843),51529=>array(70,-68,911,843),51530=>array(70,-72,929,843),51531=>array(70,-70,936,843),51532=>array(70,-66,908,843),51533=>array(70,-59,916,843),51534=>array(70,-60,928,843),51535=>array(70,-68,908,843),51536=>array(70,-69,907,842),51537=>array(76,-61,907,842),51538=>array(76,-61,907,842),51539=>array(76,-71,931,842),51540=>array(74,-46,907,842),51541=>array(76,-68,912,842),51542=>array(76,-76,907,842),51543=>array(76,-44,921,842),51544=>array(76,-62,917,842),51545=>array(76,-64,907,842),51546=>array(76,-64,908,842),51547=>array(76,-64,908,842),51548=>array(76,-69,923,842),51549=>array(76,-64,908,842),51550=>array(76,-64,908,842),51551=>array(76,-76,906,842),51552=>array(76,-62,907,842),51553=>array(76,-61,907,842),51554=>array(76,-69,922,842),51555=>array(76,-74,929,842),51556=>array(76,-69,927,842),51557=>array(76,-68,911,842),51558=>array(76,-72,929,842),51559=>array(76,-70,936,842),51560=>array(76,-66,908,842),51561=>array(76,-59,916,842),51562=>array(76,-60,928,842),51563=>array(76,-68,908,842),51564=>array(87,-64,928,798),51565=>array(79,-61,921,798),51566=>array(79,-61,921,798),51567=>array(79,-71,921,798),51568=>array(81,-46,922,798),51569=>array(79,-68,921,798),51570=>array(79,-74,921,798),51571=>array(79,-44,921,798),51572=>array(79,-62,921,798),51573=>array(79,-64,921,798),51574=>array(79,-64,921,798),51575=>array(79,-63,921,798),51576=>array(79,-68,921,798),51577=>array(79,-64,921,798),51578=>array(79,-63,921,798),51579=>array(79,-74,921,798),51580=>array(79,-62,921,798),51581=>array(79,-61,921,798),51582=>array(79,-69,921,798),51583=>array(79,-74,921,798),51584=>array(79,-69,921,798),51585=>array(79,-68,921,798),51586=>array(79,-72,921,798),51587=>array(79,-70,921,798),51588=>array(79,-66,921,798),51589=>array(79,-59,921,798),51590=>array(79,-60,921,798),51591=>array(79,-68,921,798),51592=>array(57,52,943,717),51593=>array(79,-61,922,798),51594=>array(79,-61,922,798),51595=>array(79,-71,922,798),51596=>array(79,-46,922,798),51597=>array(79,-68,922,798),51598=>array(79,-74,922,798),51599=>array(79,-44,922,798),51600=>array(79,-62,922,798),51601=>array(79,-64,922,798),51602=>array(79,-64,922,798),51603=>array(79,-63,922,798),51604=>array(79,-68,922,798),51605=>array(79,-64,922,798),51606=>array(79,-63,922,798),51607=>array(79,-74,922,798),51608=>array(79,-62,922,798),51609=>array(79,-61,922,798),51610=>array(79,-69,922,798),51611=>array(79,-74,922,798),51612=>array(79,-69,922,798),51613=>array(79,-68,922,798),51614=>array(79,-72,922,798),51615=>array(79,-70,922,798),51616=>array(79,-66,922,798),51617=>array(79,-59,922,798),51618=>array(79,-60,922,798),51619=>array(79,-68,922,798),51620=>array(78,-69,907,842),51621=>array(65,-61,907,842),51622=>array(65,-61,907,842),51623=>array(65,-71,931,842),51624=>array(65,-46,907,842),51625=>array(65,-68,912,842),51626=>array(65,-76,907,842),51627=>array(65,-44,921,842),51628=>array(65,-62,917,842),51629=>array(65,-64,907,842),51630=>array(65,-64,908,842),51631=>array(65,-64,908,842),51632=>array(65,-69,923,842),51633=>array(65,-64,908,842),51634=>array(65,-64,908,842),51635=>array(65,-76,907,842),51636=>array(65,-62,907,842),51637=>array(65,-61,907,842),51638=>array(65,-69,922,842),51639=>array(65,-74,929,842),51640=>array(65,-69,927,842),51641=>array(65,-68,911,842),51642=>array(65,-72,929,842),51643=>array(65,-70,936,842),51644=>array(65,-66,908,842),51645=>array(65,-59,916,842),51646=>array(65,-60,928,842),51647=>array(65,-68,908,842),51648=>array(116,-69,907,842),51649=>array(123,-61,907,842),51650=>array(123,-61,907,842),51651=>array(123,-71,931,842),51652=>array(105,-46,907,842),51653=>array(123,-68,912,842),51654=>array(123,-76,907,842),51655=>array(123,-44,921,842),51656=>array(123,-62,917,842),51657=>array(123,-64,907,842),51658=>array(123,-64,908,842),51659=>array(123,-64,908,842),51660=>array(123,-69,923,842),51661=>array(123,-64,908,842),51662=>array(123,-64,908,842),51663=>array(123,-76,907,842),51664=>array(123,-62,907,842),51665=>array(123,-61,907,842),51666=>array(123,-69,922,842),51667=>array(123,-74,929,842),51668=>array(123,-69,927,842),51669=>array(123,-68,911,842),51670=>array(123,-72,929,842),51671=>array(123,-70,936,842),51672=>array(123,-66,908,842),51673=>array(123,-59,916,842),51674=>array(123,-60,928,842),51675=>array(123,-68,908,842),51676=>array(36,-69,935,842),51677=>array(59,-59,936,842),51678=>array(59,-61,936,842),51679=>array(59,-71,936,842),51680=>array(50,-45,936,842),51681=>array(59,-69,936,842),51682=>array(59,-76,936,842),51683=>array(59,-44,936,842),51684=>array(59,-62,936,842),51685=>array(59,-64,936,842),51686=>array(59,-64,936,842),51687=>array(59,-64,936,842),51688=>array(59,-70,936,842),51689=>array(59,-64,936,842),51690=>array(59,-64,936,842),51691=>array(59,-76,936,842),51692=>array(59,-62,936,842),51693=>array(59,-61,936,842),51694=>array(59,-70,936,842),51695=>array(59,-74,936,842),51696=>array(59,-69,936,842),51697=>array(59,-67,936,842),51698=>array(59,-72,936,842),51699=>array(59,-71,936,842),51700=>array(59,-66,936,842),51701=>array(59,-59,936,842),51702=>array(59,-60,936,842),51703=>array(59,-69,936,842),51704=>array(33,-69,907,842),51705=>array(44,-61,907,842),51706=>array(44,-61,907,842),51707=>array(44,-71,931,842),51708=>array(52,-46,907,842),51709=>array(44,-68,912,842),51710=>array(44,-76,907,842),51711=>array(44,-44,921,842),51712=>array(44,-62,917,842),51713=>array(44,-64,907,842),51714=>array(44,-64,908,842),51715=>array(44,-64,908,842),51716=>array(44,-69,923,842),51717=>array(44,-64,908,842),51718=>array(44,-64,908,842),51719=>array(44,-76,907,842),51720=>array(44,-62,907,842),51721=>array(44,-61,907,842),51722=>array(44,-69,922,842),51723=>array(44,-74,929,842),51724=>array(44,-69,927,842),51725=>array(44,-68,911,842),51726=>array(44,-72,929,842),51727=>array(44,-70,936,842),51728=>array(44,-66,908,842),51729=>array(44,-59,916,842),51730=>array(44,-60,928,842),51731=>array(44,-68,908,842),51732=>array(36,-68,935,843),51733=>array(59,-59,936,842),51734=>array(59,-61,936,842),51735=>array(59,-71,936,842),51736=>array(50,-45,936,842),51737=>array(59,-69,936,842),51738=>array(59,-76,936,842),51739=>array(59,-44,936,842),51740=>array(59,-62,936,842),51741=>array(59,-64,936,842),51742=>array(59,-64,936,842),51743=>array(59,-64,936,842),51744=>array(59,-70,936,842),51745=>array(59,-64,936,842),51746=>array(59,-64,936,842),51747=>array(59,-76,936,842),51748=>array(59,-62,936,842),51749=>array(59,-61,936,842),51750=>array(59,-70,936,842),51751=>array(59,-74,936,842),51752=>array(59,-69,936,842),51753=>array(59,-67,936,842),51754=>array(59,-72,936,842),51755=>array(59,-71,936,842),51756=>array(59,-66,936,842),51757=>array(59,-59,936,842),51758=>array(59,-60,936,842),51759=>array(59,-69,936,842),51760=>array(33,-69,907,842),51761=>array(44,-61,907,842),51762=>array(44,-61,907,842),51763=>array(44,-71,931,842),51764=>array(52,-46,907,842),51765=>array(44,-68,912,842),51766=>array(44,-76,907,842),51767=>array(44,-44,921,842),51768=>array(44,-62,917,842),51769=>array(44,-64,907,842),51770=>array(44,-64,908,842),51771=>array(44,-64,908,842),51772=>array(44,-69,923,842),51773=>array(44,-64,908,842),51774=>array(44,-64,908,842),51775=>array(44,-76,907,842),51776=>array(44,-62,907,842),51777=>array(44,-61,907,842),51778=>array(44,-69,922,842),51779=>array(44,-74,929,842),51780=>array(44,-69,927,842),51781=>array(44,-68,911,842),51782=>array(44,-72,929,842),51783=>array(44,-70,936,842),51784=>array(44,-66,908,842),51785=>array(44,-59,916,842),51786=>array(44,-60,928,842),51787=>array(44,-68,908,842),51788=>array(41,-70,907,841),51789=>array(64,-61,907,841),51790=>array(64,-61,907,841),51791=>array(64,-71,931,841),51792=>array(55,-46,907,841),51793=>array(64,-68,912,841),51794=>array(64,-76,907,841),51795=>array(64,-44,921,841),51796=>array(64,-62,917,841),51797=>array(64,-64,907,841),51798=>array(64,-64,908,841),51799=>array(64,-64,908,841),51800=>array(64,-69,923,841),51801=>array(64,-64,908,841),51802=>array(64,-64,908,841),51803=>array(64,-76,906,841),51804=>array(64,-62,907,841),51805=>array(64,-61,907,841),51806=>array(64,-69,922,841),51807=>array(64,-74,929,841),51808=>array(64,-69,927,841),51809=>array(64,-68,911,841),51810=>array(64,-72,929,841),51811=>array(64,-70,936,841),51812=>array(64,-66,908,841),51813=>array(64,-59,916,841),51814=>array(64,-60,928,841),51815=>array(64,-68,908,841),51816=>array(33,-68,907,843),51817=>array(44,-61,907,843),51818=>array(44,-61,907,843),51819=>array(44,-71,931,843),51820=>array(52,-46,907,843),51821=>array(44,-68,912,843),51822=>array(44,-76,907,843),51823=>array(44,-44,921,843),51824=>array(44,-62,917,843),51825=>array(44,-64,907,843),51826=>array(44,-64,908,843),51827=>array(44,-64,908,843),51828=>array(44,-69,923,843),51829=>array(44,-64,908,843),51830=>array(44,-64,908,843),51831=>array(44,-76,907,843),51832=>array(44,-62,907,843),51833=>array(44,-61,907,843),51834=>array(44,-69,922,843),51835=>array(44,-74,929,843),51836=>array(44,-69,927,843),51837=>array(44,-68,911,843),51838=>array(44,-72,929,843),51839=>array(44,-70,936,843),51840=>array(44,-66,908,843),51841=>array(44,-59,916,843),51842=>array(44,-60,928,843),51843=>array(44,-68,908,843),51844=>array(36,-70,907,842),51845=>array(54,-61,908,842),51846=>array(54,-61,908,842),51847=>array(54,-71,931,842),51848=>array(55,-46,907,842),51849=>array(54,-68,912,842),51850=>array(54,-76,908,842),51851=>array(54,-44,921,842),51852=>array(54,-62,917,842),51853=>array(54,-64,908,842),51854=>array(54,-64,908,842),51855=>array(54,-64,908,842),51856=>array(54,-69,923,842),51857=>array(54,-64,908,842),51858=>array(54,-64,908,842),51859=>array(54,-76,908,842),51860=>array(54,-62,908,842),51861=>array(54,-61,908,842),51862=>array(54,-69,922,842),51863=>array(54,-74,929,842),51864=>array(54,-69,927,842),51865=>array(54,-68,911,842),51866=>array(54,-72,929,842),51867=>array(54,-70,936,842),51868=>array(54,-66,908,842),51869=>array(54,-59,916,842),51870=>array(54,-60,928,842),51871=>array(54,-68,908,842),51872=>array(33,-68,907,843),51873=>array(49,-61,907,843),51874=>array(49,-61,907,843),51875=>array(49,-71,931,843),51876=>array(47,-46,907,843),51877=>array(49,-68,912,843),51878=>array(49,-76,907,843),51879=>array(49,-44,921,843),51880=>array(49,-62,917,843),51881=>array(49,-64,907,843),51882=>array(49,-64,908,843),51883=>array(49,-64,908,843),51884=>array(49,-69,923,843),51885=>array(49,-64,908,843),51886=>array(49,-64,908,843),51887=>array(49,-76,907,843),51888=>array(49,-62,907,843),51889=>array(49,-61,907,843),51890=>array(49,-69,922,843),51891=>array(49,-74,929,843),51892=>array(49,-69,927,843),51893=>array(49,-68,911,843),51894=>array(49,-72,929,843),51895=>array(49,-70,936,843),51896=>array(49,-66,908,843),51897=>array(49,-59,916,843),51898=>array(49,-60,928,843),51899=>array(49,-68,908,843),51900=>array(55,22,943,755),51901=>array(79,-61,921,786),51902=>array(79,-61,921,786),51903=>array(79,-71,921,786),51904=>array(79,-46,922,786),51905=>array(79,-68,921,786),51906=>array(79,-74,921,786),51907=>array(79,-44,921,786),51908=>array(79,-62,921,786),51909=>array(79,-64,921,786),51910=>array(79,-64,921,786),51911=>array(79,-63,921,786),51912=>array(79,-68,921,786),51913=>array(79,-64,921,786),51914=>array(79,-63,921,786),51915=>array(79,-74,921,786),51916=>array(79,-62,921,786),51917=>array(79,-61,921,786),51918=>array(79,-69,921,786),51919=>array(79,-74,921,786),51920=>array(79,-69,921,786),51921=>array(79,-68,921,786),51922=>array(79,-72,921,786),51923=>array(79,-70,921,786),51924=>array(79,-66,921,786),51925=>array(79,-59,921,786),51926=>array(79,-60,921,786),51927=>array(79,-68,921,786),51928=>array(50,-69,936,842),51929=>array(65,-59,936,842),51930=>array(65,-61,936,842),51931=>array(65,-71,936,842),51932=>array(72,-45,936,842),51933=>array(65,-69,936,842),51934=>array(65,-76,936,842),51935=>array(65,-44,936,842),51936=>array(65,-62,936,842),51937=>array(65,-64,936,842),51938=>array(65,-64,936,842),51939=>array(65,-64,936,842),51940=>array(65,-70,936,842),51941=>array(65,-64,936,842),51942=>array(65,-64,936,842),51943=>array(65,-76,936,842),51944=>array(65,-62,936,842),51945=>array(65,-61,936,842),51946=>array(65,-70,936,842),51947=>array(65,-74,936,842),51948=>array(65,-69,936,842),51949=>array(65,-67,936,842),51950=>array(65,-72,936,842),51951=>array(65,-71,936,842),51952=>array(65,-66,936,842),51953=>array(65,-59,936,842),51954=>array(65,-60,936,842),51955=>array(65,-69,936,842),51956=>array(50,-69,907,842),51957=>array(71,-61,907,842),51958=>array(71,-61,907,842),51959=>array(71,-71,931,842),51960=>array(66,-46,907,842),51961=>array(71,-68,912,842),51962=>array(71,-76,907,842),51963=>array(71,-44,921,842),51964=>array(71,-62,917,842),51965=>array(71,-64,907,842),51966=>array(71,-64,908,842),51967=>array(71,-64,908,842),51968=>array(71,-69,923,842),51969=>array(71,-64,908,842),51970=>array(71,-64,908,842),51971=>array(71,-76,907,842),51972=>array(71,-62,907,842),51973=>array(71,-61,907,842),51974=>array(71,-69,922,842),51975=>array(71,-74,929,842),51976=>array(71,-69,927,842),51977=>array(71,-68,911,842),51978=>array(71,-72,929,842),51979=>array(71,-70,936,842),51980=>array(71,-66,908,842),51981=>array(71,-59,916,842),51982=>array(71,-60,928,842),51983=>array(71,-68,908,842),51984=>array(66,-69,907,842),51985=>array(65,-61,907,842),51986=>array(65,-61,907,842),51987=>array(65,-71,931,842),51988=>array(65,-46,907,842),51989=>array(65,-68,912,842),51990=>array(65,-76,907,842),51991=>array(65,-44,921,842),51992=>array(65,-62,917,842),51993=>array(65,-64,907,842),51994=>array(65,-64,908,842),51995=>array(65,-64,908,842),51996=>array(65,-69,923,842),51997=>array(65,-64,908,842),51998=>array(65,-64,908,842),51999=>array(65,-76,907,842),52000=>array(65,-62,907,842),52001=>array(65,-61,907,842),52002=>array(65,-69,922,842),52003=>array(65,-74,929,842),52004=>array(65,-69,927,842),52005=>array(65,-68,911,842),52006=>array(65,-72,929,842),52007=>array(65,-70,936,842),52008=>array(65,-66,908,842),52009=>array(65,-59,916,842),52010=>array(65,-60,928,842),52011=>array(65,-68,908,842),52012=>array(62,22,943,756),52013=>array(79,-61,922,786),52014=>array(79,-61,922,786),52015=>array(79,-71,922,786),52016=>array(79,-46,922,786),52017=>array(79,-68,922,786),52018=>array(79,-74,922,786),52019=>array(79,-44,922,786),52020=>array(79,-62,922,786),52021=>array(79,-64,922,786),52022=>array(79,-64,922,786),52023=>array(79,-63,922,786),52024=>array(79,-68,922,786),52025=>array(79,-64,922,786),52026=>array(79,-63,922,786),52027=>array(79,-74,922,786),52028=>array(79,-62,922,786),52029=>array(79,-61,922,786),52030=>array(79,-69,922,786),52031=>array(79,-74,922,786),52032=>array(79,-69,922,786),52033=>array(79,-68,922,786),52034=>array(79,-72,922,786),52035=>array(79,-70,922,786),52036=>array(79,-66,922,786),52037=>array(79,-59,922,786),52038=>array(79,-60,922,786),52039=>array(79,-68,922,786),52040=>array(82,-64,924,811),52041=>array(79,-61,921,811),52042=>array(79,-61,921,811),52043=>array(79,-71,921,811),52044=>array(79,-46,921,811),52045=>array(79,-68,921,811),52046=>array(79,-74,921,811),52047=>array(79,-44,921,811),52048=>array(79,-62,921,811),52049=>array(79,-64,921,811),52050=>array(79,-64,921,811),52051=>array(79,-63,921,811),52052=>array(79,-68,921,811),52053=>array(79,-64,921,811),52054=>array(79,-63,921,811),52055=>array(79,-74,921,811),52056=>array(79,-62,921,811),52057=>array(79,-61,921,811),52058=>array(79,-69,921,811),52059=>array(79,-74,921,811),52060=>array(79,-69,921,811),52061=>array(79,-68,921,811),52062=>array(79,-72,921,811),52063=>array(79,-70,921,811),52064=>array(79,-66,921,811),52065=>array(79,-59,921,811),52066=>array(79,-60,921,811),52067=>array(79,-68,921,811),52068=>array(81,-70,907,841),52069=>array(74,-61,909,841),52070=>array(74,-61,909,841),52071=>array(74,-71,931,841),52072=>array(66,-46,909,842),52073=>array(74,-68,912,841),52074=>array(74,-76,909,841),52075=>array(74,-44,921,841),52076=>array(74,-62,917,841),52077=>array(74,-64,909,841),52078=>array(74,-64,909,841),52079=>array(74,-64,909,841),52080=>array(74,-69,923,841),52081=>array(74,-64,909,841),52082=>array(74,-64,909,841),52083=>array(74,-76,909,841),52084=>array(74,-62,909,841),52085=>array(74,-61,909,841),52086=>array(74,-69,922,841),52087=>array(74,-74,929,841),52088=>array(74,-69,927,841),52089=>array(74,-68,911,841),52090=>array(74,-72,929,841),52091=>array(74,-70,936,841),52092=>array(74,-66,909,841),52093=>array(74,-59,916,841),52094=>array(74,-60,928,841),52095=>array(74,-68,909,841),52096=>array(50,-68,907,843),52097=>array(68,-61,907,843),52098=>array(68,-61,907,843),52099=>array(68,-71,931,843),52100=>array(68,-46,907,843),52101=>array(68,-68,912,843),52102=>array(68,-76,907,843),52103=>array(68,-44,921,843),52104=>array(68,-62,917,843),52105=>array(68,-64,907,843),52106=>array(68,-64,908,843),52107=>array(68,-64,908,843),52108=>array(68,-69,923,843),52109=>array(68,-64,908,843),52110=>array(68,-64,908,843),52111=>array(68,-76,907,843),52112=>array(68,-62,907,843),52113=>array(68,-61,907,843),52114=>array(68,-69,922,843),52115=>array(68,-74,929,843),52116=>array(68,-69,927,843),52117=>array(68,-68,911,843),52118=>array(68,-72,929,843),52119=>array(68,-70,936,843),52120=>array(68,-66,908,843),52121=>array(68,-59,916,843),52122=>array(68,-60,928,843),52123=>array(68,-68,908,843),52124=>array(60,-69,907,842),52125=>array(65,-61,907,842),52126=>array(65,-61,907,842),52127=>array(65,-71,931,842),52128=>array(65,-46,907,842),52129=>array(65,-68,912,842),52130=>array(65,-76,907,842),52131=>array(65,-44,921,842),52132=>array(65,-62,917,842),52133=>array(65,-64,907,842),52134=>array(65,-64,908,842),52135=>array(65,-64,908,842),52136=>array(65,-69,923,842),52137=>array(65,-64,908,842),52138=>array(65,-64,908,842),52139=>array(65,-76,907,842),52140=>array(65,-62,907,842),52141=>array(65,-61,907,842),52142=>array(65,-69,922,842),52143=>array(65,-74,929,842),52144=>array(65,-69,927,842),52145=>array(65,-68,911,842),52146=>array(65,-72,929,842),52147=>array(65,-70,936,842),52148=>array(65,-66,908,842),52149=>array(65,-59,916,842),52150=>array(65,-60,928,842),52151=>array(65,-68,908,842),52152=>array(82,-64,924,811),52153=>array(79,-61,921,811),52154=>array(79,-61,921,811),52155=>array(79,-71,921,811),52156=>array(81,-46,922,811),52157=>array(79,-68,921,811),52158=>array(79,-74,921,811),52159=>array(79,-44,921,811),52160=>array(79,-62,921,811),52161=>array(79,-64,921,811),52162=>array(79,-64,921,811),52163=>array(79,-63,921,811),52164=>array(79,-68,921,811),52165=>array(79,-64,921,811),52166=>array(79,-63,921,811),52167=>array(79,-74,921,811),52168=>array(79,-62,921,811),52169=>array(79,-61,921,811),52170=>array(79,-69,921,811),52171=>array(79,-74,921,811),52172=>array(79,-69,921,811),52173=>array(79,-68,921,811),52174=>array(79,-72,921,811),52175=>array(79,-70,921,811),52176=>array(79,-66,921,811),52177=>array(79,-59,921,811),52178=>array(79,-60,921,811),52179=>array(79,-68,921,811),52180=>array(56,37,944,728),52181=>array(79,-61,922,786),52182=>array(79,-61,922,786),52183=>array(79,-71,922,786),52184=>array(79,-46,921,784),52185=>array(79,-68,922,786),52186=>array(79,-74,922,786),52187=>array(79,-44,922,786),52188=>array(79,-62,922,786),52189=>array(79,-64,922,786),52190=>array(79,-64,922,786),52191=>array(79,-63,922,786),52192=>array(79,-68,922,786),52193=>array(79,-64,922,786),52194=>array(79,-63,922,786),52195=>array(79,-74,922,786),52196=>array(79,-62,922,786),52197=>array(79,-61,922,786),52198=>array(79,-69,922,786),52199=>array(79,-74,922,786),52200=>array(79,-69,922,786),52201=>array(79,-68,922,786),52202=>array(79,-72,922,786),52203=>array(79,-70,922,786),52204=>array(79,-66,922,786),52205=>array(79,-59,922,786),52206=>array(79,-60,922,786),52207=>array(79,-68,922,786),52208=>array(63,-69,907,842),52209=>array(65,-61,907,842),52210=>array(65,-61,907,842),52211=>array(65,-71,931,842),52212=>array(65,-46,907,842),52213=>array(65,-68,912,842),52214=>array(65,-76,907,842),52215=>array(65,-44,921,842),52216=>array(65,-62,917,842),52217=>array(65,-64,907,842),52218=>array(65,-64,908,842),52219=>array(65,-64,908,842),52220=>array(65,-69,923,842),52221=>array(65,-64,908,842),52222=>array(65,-64,908,842),52223=>array(65,-76,907,842),52224=>array(65,-62,907,842),52225=>array(65,-61,907,842),52226=>array(65,-69,922,842),52227=>array(65,-74,929,842),52228=>array(65,-69,927,842),52229=>array(65,-68,911,842),52230=>array(65,-72,929,842),52231=>array(65,-70,936,842),52232=>array(65,-66,908,842),52233=>array(65,-59,916,842),52234=>array(65,-60,928,842),52235=>array(65,-68,908,842),52236=>array(76,-69,907,842),52237=>array(60,-61,907,842),52238=>array(60,-61,907,842),52239=>array(60,-71,931,842),52240=>array(57,-46,907,842),52241=>array(60,-68,912,842),52242=>array(60,-76,907,842),52243=>array(60,-44,921,842),52244=>array(60,-62,917,842),52245=>array(60,-64,907,842),52246=>array(60,-64,908,842),52247=>array(60,-64,908,842),52248=>array(60,-69,923,842),52249=>array(60,-64,908,842),52250=>array(60,-64,908,842),52251=>array(60,-76,907,842),52252=>array(60,-62,907,842),52253=>array(60,-61,907,842),52254=>array(60,-69,922,842),52255=>array(60,-74,929,842),52256=>array(60,-69,927,842),52257=>array(60,-68,911,842),52258=>array(60,-72,929,842),52259=>array(60,-70,936,842),52260=>array(60,-66,908,842),52261=>array(60,-59,916,842),52262=>array(60,-60,928,842),52263=>array(60,-68,908,842),52264=>array(86,-69,935,842),52265=>array(71,-59,936,842),52266=>array(71,-61,936,842),52267=>array(71,-71,936,842),52268=>array(64,-45,936,842),52269=>array(71,-69,936,842),52270=>array(71,-76,936,842),52271=>array(71,-44,936,842),52272=>array(71,-62,936,842),52273=>array(71,-64,936,842),52274=>array(71,-64,936,842),52275=>array(71,-64,936,842),52276=>array(71,-70,936,842),52277=>array(71,-64,936,842),52278=>array(71,-64,936,842),52279=>array(71,-76,936,842),52280=>array(71,-62,936,842),52281=>array(71,-61,936,842),52282=>array(71,-70,936,842),52283=>array(71,-74,936,842),52284=>array(71,-69,936,842),52285=>array(71,-67,936,842),52286=>array(71,-72,936,842),52287=>array(71,-71,936,842),52288=>array(71,-66,936,842),52289=>array(71,-59,936,842),52290=>array(71,-60,936,842),52291=>array(71,-69,936,842),52292=>array(81,-69,907,842),52293=>array(69,-61,907,842),52294=>array(69,-61,907,842),52295=>array(69,-71,931,842),52296=>array(64,-46,907,842),52297=>array(69,-68,912,842),52298=>array(69,-76,907,842),52299=>array(69,-44,921,842),52300=>array(69,-62,917,842),52301=>array(69,-64,907,842),52302=>array(69,-64,908,842),52303=>array(69,-64,908,842),52304=>array(69,-69,923,842),52305=>array(69,-64,908,842),52306=>array(69,-64,908,842),52307=>array(69,-76,907,842),52308=>array(69,-62,907,842),52309=>array(69,-61,907,842),52310=>array(69,-69,922,842),52311=>array(69,-74,929,842),52312=>array(69,-69,927,842),52313=>array(69,-68,911,842),52314=>array(69,-72,929,842),52315=>array(69,-70,936,842),52316=>array(69,-66,908,842),52317=>array(69,-59,916,842),52318=>array(69,-60,928,842),52319=>array(69,-68,908,842),52320=>array(86,-68,935,843),52321=>array(74,-59,936,842),52322=>array(74,-61,936,842),52323=>array(74,-71,936,842),52324=>array(64,-45,936,842),52325=>array(74,-69,936,842),52326=>array(74,-76,936,842),52327=>array(74,-44,936,842),52328=>array(74,-62,936,842),52329=>array(74,-64,936,842),52330=>array(74,-64,936,842),52331=>array(74,-64,936,842),52332=>array(74,-70,936,842),52333=>array(74,-64,936,842),52334=>array(74,-64,936,842),52335=>array(74,-76,936,842),52336=>array(74,-62,936,842),52337=>array(74,-61,936,842),52338=>array(74,-70,936,842),52339=>array(74,-74,936,842),52340=>array(74,-69,936,842),52341=>array(74,-67,936,842),52342=>array(74,-72,936,842),52343=>array(74,-71,936,842),52344=>array(74,-66,936,842),52345=>array(74,-59,936,842),52346=>array(74,-60,936,842),52347=>array(74,-69,936,842),52348=>array(81,-69,907,842),52349=>array(71,-61,907,842),52350=>array(71,-61,907,842),52351=>array(71,-71,931,842),52352=>array(64,-46,907,842),52353=>array(71,-68,912,842),52354=>array(71,-76,907,842),52355=>array(71,-44,921,842),52356=>array(71,-62,917,842),52357=>array(71,-64,907,842),52358=>array(71,-64,908,842),52359=>array(71,-64,908,842),52360=>array(71,-69,923,842),52361=>array(71,-64,908,842),52362=>array(71,-64,908,842),52363=>array(71,-76,907,842),52364=>array(71,-62,907,842),52365=>array(71,-61,907,842),52366=>array(71,-69,922,842),52367=>array(71,-74,929,842),52368=>array(71,-69,927,842),52369=>array(71,-68,911,842),52370=>array(71,-72,929,842),52371=>array(71,-70,936,842),52372=>array(71,-66,908,842),52373=>array(71,-59,916,842),52374=>array(71,-60,928,842),52375=>array(71,-68,908,842),52376=>array(86,-70,907,841),52377=>array(68,-61,907,842),52378=>array(68,-61,907,842),52379=>array(68,-71,931,842),52380=>array(66,-46,907,841),52381=>array(68,-68,912,842),52382=>array(68,-76,907,842),52383=>array(68,-44,921,842),52384=>array(68,-62,917,842),52385=>array(68,-64,907,842),52386=>array(68,-64,908,842),52387=>array(68,-64,908,842),52388=>array(68,-69,923,842),52389=>array(68,-64,908,842),52390=>array(68,-64,908,842),52391=>array(68,-76,906,842),52392=>array(68,-62,907,842),52393=>array(68,-61,907,842),52394=>array(68,-69,922,842),52395=>array(68,-74,929,842),52396=>array(68,-69,927,842),52397=>array(68,-68,911,842),52398=>array(68,-72,929,842),52399=>array(68,-70,936,842),52400=>array(68,-66,908,842),52401=>array(68,-59,916,842),52402=>array(68,-60,928,842),52403=>array(68,-68,908,842),52404=>array(71,-68,907,843),52405=>array(65,-61,907,843),52406=>array(65,-61,907,843),52407=>array(65,-71,931,843),52408=>array(66,-46,907,843),52409=>array(65,-68,912,843),52410=>array(65,-76,907,843),52411=>array(65,-44,921,843),52412=>array(65,-62,917,843),52413=>array(65,-64,907,843),52414=>array(65,-64,908,843),52415=>array(65,-64,908,843),52416=>array(65,-69,923,843),52417=>array(65,-64,908,843),52418=>array(65,-64,908,843),52419=>array(65,-76,907,843),52420=>array(65,-62,907,843),52421=>array(65,-61,907,843),52422=>array(65,-69,922,843),52423=>array(65,-74,929,843),52424=>array(65,-69,927,843),52425=>array(65,-68,911,843),52426=>array(65,-72,929,843),52427=>array(65,-70,936,843),52428=>array(65,-66,908,843),52429=>array(65,-59,916,843),52430=>array(65,-60,928,843),52431=>array(65,-68,908,843),52432=>array(86,-70,907,842),52433=>array(65,-61,907,842),52434=>array(65,-61,907,842),52435=>array(65,-71,931,842),52436=>array(62,-46,907,842),52437=>array(65,-68,912,842),52438=>array(65,-76,907,842),52439=>array(65,-44,921,842),52440=>array(65,-62,917,842),52441=>array(65,-64,907,842),52442=>array(65,-64,908,842),52443=>array(65,-64,908,842),52444=>array(65,-69,923,842),52445=>array(65,-64,908,842),52446=>array(65,-64,908,842),52447=>array(65,-76,907,842),52448=>array(65,-62,907,842),52449=>array(65,-61,907,842),52450=>array(65,-69,922,842),52451=>array(65,-74,929,842),52452=>array(65,-69,927,842),52453=>array(65,-68,911,842),52454=>array(65,-72,929,842),52455=>array(65,-70,936,842),52456=>array(65,-66,908,842),52457=>array(65,-59,916,842),52458=>array(65,-60,928,842),52459=>array(65,-68,908,842),52460=>array(71,-68,907,843),52461=>array(65,-61,907,843),52462=>array(65,-61,907,843),52463=>array(65,-71,931,843),52464=>array(65,-46,907,843),52465=>array(65,-68,912,843),52466=>array(65,-76,907,843),52467=>array(65,-44,921,843),52468=>array(65,-62,917,843),52469=>array(65,-64,907,843),52470=>array(65,-64,908,843),52471=>array(65,-64,908,843),52472=>array(65,-69,923,843),52473=>array(65,-64,908,843),52474=>array(65,-64,908,843),52475=>array(65,-76,907,843),52476=>array(65,-62,907,843),52477=>array(65,-61,907,843),52478=>array(65,-69,922,843),52479=>array(65,-74,929,843),52480=>array(65,-69,927,843),52481=>array(65,-68,911,843),52482=>array(65,-72,929,843),52483=>array(65,-70,936,843),52484=>array(65,-66,908,843),52485=>array(65,-59,916,843),52486=>array(65,-60,928,843),52487=>array(65,-68,908,843),52488=>array(62,-3,943,777),52489=>array(79,-61,921,802),52490=>array(79,-61,921,802),52491=>array(79,-71,921,802),52492=>array(79,-46,921,792),52493=>array(79,-68,921,802),52494=>array(79,-74,921,802),52495=>array(79,-44,921,802),52496=>array(79,-62,921,802),52497=>array(79,-64,921,802),52498=>array(79,-64,921,802),52499=>array(79,-63,921,802),52500=>array(79,-68,921,802),52501=>array(79,-64,921,802),52502=>array(79,-63,921,802),52503=>array(79,-74,921,802),52504=>array(79,-62,921,802),52505=>array(79,-61,921,802),52506=>array(79,-69,921,802),52507=>array(79,-74,921,802),52508=>array(79,-69,921,802),52509=>array(79,-68,921,802),52510=>array(79,-72,921,802),52511=>array(79,-70,921,802),52512=>array(79,-66,921,802),52513=>array(79,-59,921,802),52514=>array(79,-60,921,802),52515=>array(79,-68,921,802),52516=>array(64,-69,936,842),52517=>array(77,-59,936,842),52518=>array(77,-61,936,842),52519=>array(77,-71,936,842),52520=>array(72,-45,936,842),52521=>array(77,-69,936,842),52522=>array(77,-76,936,842),52523=>array(77,-44,936,842),52524=>array(77,-62,936,842),52525=>array(77,-64,936,842),52526=>array(77,-64,936,842),52527=>array(77,-64,936,842),52528=>array(77,-70,936,842),52529=>array(77,-64,936,842),52530=>array(77,-64,936,842),52531=>array(77,-76,936,842),52532=>array(77,-62,936,842),52533=>array(77,-61,936,842),52534=>array(77,-70,936,842),52535=>array(77,-74,936,842),52536=>array(77,-69,936,842),52537=>array(77,-67,936,842),52538=>array(77,-72,936,842),52539=>array(77,-71,936,842),52540=>array(77,-66,936,842),52541=>array(77,-59,936,842),52542=>array(77,-60,936,842),52543=>array(77,-69,936,842),52544=>array(57,-69,907,842),52545=>array(72,-61,907,842),52546=>array(72,-61,907,842),52547=>array(72,-71,931,842),52548=>array(72,-46,907,842),52549=>array(72,-68,912,842),52550=>array(72,-76,907,842),52551=>array(72,-44,921,842),52552=>array(72,-62,917,842),52553=>array(72,-64,907,842),52554=>array(72,-64,908,842),52555=>array(72,-64,908,842),52556=>array(72,-69,923,842),52557=>array(72,-64,908,842),52558=>array(72,-64,908,842),52559=>array(72,-76,907,842),52560=>array(72,-62,907,842),52561=>array(72,-61,907,842),52562=>array(72,-69,922,842),52563=>array(72,-74,929,842),52564=>array(72,-69,927,842),52565=>array(72,-68,911,842),52566=>array(72,-72,929,842),52567=>array(72,-70,936,842),52568=>array(72,-66,908,842),52569=>array(72,-59,916,842),52570=>array(72,-60,928,842),52571=>array(72,-68,908,842),52572=>array(67,-69,907,842),52573=>array(65,-61,907,842),52574=>array(65,-61,907,842),52575=>array(65,-71,931,842),52576=>array(65,-46,907,842),52577=>array(65,-68,912,842),52578=>array(65,-76,907,842),52579=>array(65,-44,921,842),52580=>array(65,-62,917,842),52581=>array(65,-64,907,842),52582=>array(65,-64,908,842),52583=>array(65,-64,908,842),52584=>array(65,-69,923,842),52585=>array(65,-64,908,842),52586=>array(65,-64,908,842),52587=>array(65,-76,907,842),52588=>array(65,-62,907,842),52589=>array(65,-61,907,842),52590=>array(65,-69,922,842),52591=>array(65,-74,929,842),52592=>array(65,-69,927,842),52593=>array(65,-68,911,842),52594=>array(65,-72,929,842),52595=>array(65,-70,936,842),52596=>array(65,-66,908,842),52597=>array(65,-59,916,842),52598=>array(65,-60,928,842),52599=>array(65,-68,908,842),52600=>array(62,-3,938,777),52601=>array(79,-61,922,802),52602=>array(79,-61,922,802),52603=>array(79,-71,922,802),52604=>array(79,-46,922,792),52605=>array(79,-68,922,802),52606=>array(79,-74,922,802),52607=>array(79,-44,922,802),52608=>array(79,-62,922,802),52609=>array(79,-64,922,802),52610=>array(79,-64,922,802),52611=>array(79,-63,922,802),52612=>array(79,-68,922,802),52613=>array(79,-64,922,802),52614=>array(79,-63,922,802),52615=>array(79,-74,922,802),52616=>array(79,-62,922,802),52617=>array(79,-61,922,802),52618=>array(79,-69,922,802),52619=>array(79,-74,922,802),52620=>array(79,-69,922,802),52621=>array(79,-68,922,802),52622=>array(79,-72,922,802),52623=>array(79,-70,922,802),52624=>array(79,-66,922,802),52625=>array(79,-59,922,802),52626=>array(79,-60,922,802),52627=>array(79,-68,922,802),52628=>array(79,-64,921,820),52629=>array(79,-61,921,822),52630=>array(79,-61,921,822),52631=>array(79,-71,921,822),52632=>array(79,-46,921,820),52633=>array(79,-68,921,822),52634=>array(79,-74,921,822),52635=>array(79,-44,921,822),52636=>array(79,-62,921,822),52637=>array(79,-64,921,822),52638=>array(79,-64,921,822),52639=>array(79,-63,921,822),52640=>array(79,-68,921,822),52641=>array(79,-64,921,822),52642=>array(79,-63,921,822),52643=>array(79,-74,921,822),52644=>array(79,-62,921,822),52645=>array(79,-61,921,822),52646=>array(79,-69,921,822),52647=>array(79,-74,921,822),52648=>array(79,-69,921,822),52649=>array(79,-68,921,822),52650=>array(79,-72,921,822),52651=>array(79,-70,921,822),52652=>array(79,-66,921,822),52653=>array(79,-59,921,822),52654=>array(79,-60,921,822),52655=>array(79,-68,921,822),52656=>array(70,-70,907,841),52657=>array(75,-61,910,841),52658=>array(75,-61,910,841),52659=>array(75,-71,931,841),52660=>array(76,-46,910,842),52661=>array(75,-68,912,841),52662=>array(75,-76,910,841),52663=>array(75,-44,921,841),52664=>array(75,-62,917,841),52665=>array(75,-64,910,841),52666=>array(75,-64,910,841),52667=>array(75,-64,910,841),52668=>array(75,-69,923,841),52669=>array(75,-64,910,841),52670=>array(75,-64,910,841),52671=>array(75,-76,910,841),52672=>array(75,-62,910,841),52673=>array(75,-61,910,841),52674=>array(75,-69,922,841),52675=>array(75,-74,929,841),52676=>array(75,-69,927,841),52677=>array(75,-68,911,841),52678=>array(75,-72,929,841),52679=>array(75,-70,936,841),52680=>array(75,-66,910,841),52681=>array(75,-59,916,841),52682=>array(75,-60,928,841),52683=>array(75,-68,910,841),52684=>array(63,-68,907,843),52685=>array(70,-61,907,843),52686=>array(70,-61,907,843),52687=>array(70,-71,931,843),52688=>array(76,-46,907,843),52689=>array(70,-68,912,843),52690=>array(70,-76,907,843),52691=>array(70,-44,921,843),52692=>array(70,-62,917,843),52693=>array(70,-64,907,843),52694=>array(70,-64,908,843),52695=>array(70,-64,908,843),52696=>array(70,-69,923,843),52697=>array(70,-64,908,843),52698=>array(70,-64,908,843),52699=>array(70,-76,907,843),52700=>array(70,-62,907,843),52701=>array(70,-61,907,843),52702=>array(70,-69,922,843),52703=>array(70,-74,929,843),52704=>array(70,-69,927,843),52705=>array(70,-68,911,843),52706=>array(70,-72,929,843),52707=>array(70,-70,936,843),52708=>array(70,-66,908,843),52709=>array(70,-59,916,843),52710=>array(70,-60,928,843),52711=>array(70,-68,908,843),52712=>array(70,-69,907,842),52713=>array(65,-61,907,842),52714=>array(65,-61,907,842),52715=>array(65,-71,931,842),52716=>array(66,-46,907,842),52717=>array(65,-68,912,842),52718=>array(65,-76,907,842),52719=>array(65,-44,921,842),52720=>array(65,-62,917,842),52721=>array(65,-64,907,842),52722=>array(65,-64,908,842),52723=>array(65,-64,908,842),52724=>array(65,-69,923,842),52725=>array(65,-64,908,842),52726=>array(65,-64,908,842),52727=>array(65,-76,907,842),52728=>array(65,-62,907,842),52729=>array(65,-61,907,842),52730=>array(65,-69,922,842),52731=>array(65,-74,929,842),52732=>array(65,-69,927,842),52733=>array(65,-68,911,842),52734=>array(65,-72,929,842),52735=>array(65,-70,936,842),52736=>array(65,-66,908,842),52737=>array(65,-59,916,842),52738=>array(65,-60,928,842),52739=>array(65,-68,908,842),52740=>array(87,-54,928,820),52741=>array(79,-61,921,822),52742=>array(79,-61,921,822),52743=>array(79,-71,921,822),52744=>array(81,-46,922,820),52745=>array(79,-68,921,822),52746=>array(79,-74,921,822),52747=>array(79,-44,921,822),52748=>array(79,-62,921,822),52749=>array(79,-64,921,822),52750=>array(79,-64,921,822),52751=>array(79,-63,921,822),52752=>array(79,-68,921,822),52753=>array(79,-64,921,822),52754=>array(79,-63,921,822),52755=>array(79,-74,921,822),52756=>array(79,-62,921,822),52757=>array(79,-61,921,822),52758=>array(79,-69,921,822),52759=>array(79,-74,921,822),52760=>array(79,-69,921,822),52761=>array(79,-68,921,822),52762=>array(79,-72,921,822),52763=>array(79,-70,921,822),52764=>array(79,-66,921,822),52765=>array(79,-59,921,822),52766=>array(79,-60,921,822),52767=>array(79,-68,921,822),52768=>array(57,47,943,752),52769=>array(79,-61,922,802),52770=>array(79,-61,922,802),52771=>array(79,-71,922,802),52772=>array(79,-46,922,792),52773=>array(79,-68,922,802),52774=>array(79,-74,922,802),52775=>array(79,-44,922,802),52776=>array(79,-62,922,802),52777=>array(79,-64,922,802),52778=>array(79,-64,922,802),52779=>array(79,-63,922,802),52780=>array(79,-68,922,802),52781=>array(79,-64,922,802),52782=>array(79,-63,922,802),52783=>array(79,-74,922,802),52784=>array(79,-62,922,802),52785=>array(79,-61,922,802),52786=>array(79,-69,922,802),52787=>array(79,-74,922,802),52788=>array(79,-69,922,802),52789=>array(79,-68,922,802),52790=>array(79,-72,922,802),52791=>array(79,-70,922,802),52792=>array(79,-66,922,802),52793=>array(79,-59,922,802),52794=>array(79,-60,922,802),52795=>array(79,-68,922,802),52796=>array(70,-69,907,842),52797=>array(65,-61,907,842),52798=>array(65,-61,907,842),52799=>array(65,-71,931,842),52800=>array(65,-46,907,842),52801=>array(65,-68,912,842),52802=>array(65,-76,907,842),52803=>array(65,-44,921,842),52804=>array(65,-62,917,842),52805=>array(65,-64,907,842),52806=>array(65,-64,908,842),52807=>array(65,-64,908,842),52808=>array(65,-69,923,842),52809=>array(65,-64,908,842),52810=>array(65,-64,908,842),52811=>array(65,-76,907,842),52812=>array(65,-62,907,842),52813=>array(65,-61,907,842),52814=>array(65,-69,922,842),52815=>array(65,-74,929,842),52816=>array(65,-69,927,842),52817=>array(65,-68,911,842),52818=>array(65,-72,929,842),52819=>array(65,-70,936,842),52820=>array(65,-66,908,842),52821=>array(65,-59,916,842),52822=>array(65,-60,928,842),52823=>array(65,-68,908,842),52824=>array(115,-69,907,842),52825=>array(95,-61,907,842),52826=>array(95,-61,907,842),52827=>array(95,-71,931,842),52828=>array(99,-46,907,842),52829=>array(95,-68,912,842),52830=>array(95,-76,907,842),52831=>array(95,-44,921,842),52832=>array(95,-62,917,842),52833=>array(95,-64,907,842),52834=>array(95,-64,908,842),52835=>array(95,-64,908,842),52836=>array(95,-69,923,842),52837=>array(95,-64,908,842),52838=>array(95,-64,908,842),52839=>array(95,-76,907,842),52840=>array(95,-62,907,842),52841=>array(95,-61,907,842),52842=>array(95,-69,922,842),52843=>array(95,-74,929,842),52844=>array(95,-69,927,842),52845=>array(95,-68,911,842),52846=>array(95,-72,929,842),52847=>array(95,-70,936,842),52848=>array(95,-66,908,842),52849=>array(95,-59,916,842),52850=>array(95,-60,928,842),52851=>array(95,-68,908,842),52852=>array(84,-69,936,842),52853=>array(66,-59,936,842),52854=>array(66,-61,936,842),52855=>array(66,-71,936,842),52856=>array(69,-45,936,842),52857=>array(66,-69,936,842),52858=>array(66,-76,936,842),52859=>array(66,-44,936,842),52860=>array(66,-62,936,842),52861=>array(66,-64,936,842),52862=>array(66,-64,936,842),52863=>array(66,-64,936,842),52864=>array(66,-70,936,842),52865=>array(66,-64,936,842),52866=>array(66,-64,936,842),52867=>array(66,-76,936,842),52868=>array(66,-62,936,842),52869=>array(66,-61,936,842),52870=>array(66,-70,936,842),52871=>array(66,-74,936,842),52872=>array(66,-69,936,842),52873=>array(66,-67,936,842),52874=>array(66,-72,936,842),52875=>array(66,-71,936,842),52876=>array(66,-66,936,842),52877=>array(66,-59,936,842),52878=>array(66,-60,936,842),52879=>array(66,-69,936,842),52880=>array(79,-69,907,842),52881=>array(66,-61,907,842),52882=>array(66,-61,907,842),52883=>array(66,-71,931,842),52884=>array(69,-46,907,842),52885=>array(66,-68,912,842),52886=>array(66,-76,907,842),52887=>array(66,-44,921,842),52888=>array(66,-62,917,842),52889=>array(66,-64,907,842),52890=>array(66,-64,908,842),52891=>array(66,-64,908,842),52892=>array(66,-69,923,842),52893=>array(66,-64,908,842),52894=>array(66,-64,908,842),52895=>array(66,-76,907,842),52896=>array(66,-62,907,842),52897=>array(66,-61,907,842),52898=>array(66,-69,922,842),52899=>array(66,-74,929,842),52900=>array(66,-69,927,842),52901=>array(66,-68,911,842),52902=>array(66,-72,929,842),52903=>array(66,-70,936,842),52904=>array(66,-66,908,842),52905=>array(66,-59,916,842),52906=>array(66,-60,928,842),52907=>array(66,-68,908,842),52908=>array(74,-68,935,843),52909=>array(66,-59,936,842),52910=>array(66,-61,936,842),52911=>array(66,-71,936,842),52912=>array(69,-45,936,842),52913=>array(66,-69,936,842),52914=>array(66,-76,936,842),52915=>array(66,-44,936,842),52916=>array(66,-62,936,842),52917=>array(66,-64,936,842),52918=>array(66,-64,936,842),52919=>array(66,-64,936,842),52920=>array(66,-70,936,842),52921=>array(66,-64,936,842),52922=>array(66,-64,936,842),52923=>array(66,-76,936,842),52924=>array(66,-62,936,842),52925=>array(66,-61,936,842),52926=>array(66,-70,936,842),52927=>array(66,-74,936,842),52928=>array(66,-69,936,842),52929=>array(66,-67,936,842),52930=>array(66,-72,936,842),52931=>array(66,-71,936,842),52932=>array(66,-66,936,842),52933=>array(66,-59,936,842),52934=>array(66,-60,936,842),52935=>array(66,-69,936,842),52936=>array(79,-69,907,842),52937=>array(66,-61,907,842),52938=>array(66,-61,907,842),52939=>array(66,-71,931,842),52940=>array(69,-46,907,842),52941=>array(66,-68,912,842),52942=>array(66,-76,907,842),52943=>array(66,-44,921,842),52944=>array(66,-62,917,842),52945=>array(66,-64,907,842),52946=>array(66,-64,908,842),52947=>array(66,-64,908,842),52948=>array(66,-69,923,842),52949=>array(66,-64,908,842),52950=>array(66,-64,908,842),52951=>array(66,-76,907,842),52952=>array(66,-62,907,842),52953=>array(66,-61,907,842),52954=>array(66,-69,922,842),52955=>array(66,-74,929,842),52956=>array(66,-69,927,842),52957=>array(66,-68,911,842),52958=>array(66,-72,929,842),52959=>array(66,-70,936,842),52960=>array(66,-66,908,842),52961=>array(66,-59,916,842),52962=>array(66,-60,928,842),52963=>array(66,-68,908,842),52964=>array(104,-70,907,841),52965=>array(66,-61,907,841),52966=>array(66,-61,907,841),52967=>array(66,-71,931,841),52968=>array(69,-46,907,841),52969=>array(66,-68,912,841),52970=>array(66,-76,907,841),52971=>array(66,-44,921,841),52972=>array(66,-62,917,841),52973=>array(66,-64,907,841),52974=>array(66,-64,908,841),52975=>array(66,-64,908,841),52976=>array(66,-69,923,841),52977=>array(66,-64,908,841),52978=>array(66,-64,908,841),52979=>array(66,-76,906,841),52980=>array(66,-62,907,841),52981=>array(66,-61,907,841),52982=>array(66,-69,922,841),52983=>array(66,-74,929,841),52984=>array(66,-69,927,841),52985=>array(66,-68,911,841),52986=>array(66,-72,929,841),52987=>array(66,-70,936,841),52988=>array(66,-66,908,841),52989=>array(66,-59,916,841),52990=>array(66,-60,928,841),52991=>array(66,-68,908,841),52992=>array(97,-68,907,843),52993=>array(66,-61,907,843),52994=>array(66,-61,907,843),52995=>array(66,-71,931,843),52996=>array(69,-46,907,843),52997=>array(66,-68,912,843),52998=>array(66,-76,907,843),52999=>array(66,-44,921,843),53000=>array(66,-62,917,843),53001=>array(66,-64,907,843),53002=>array(66,-64,908,843),53003=>array(66,-64,908,843),53004=>array(66,-69,923,843),53005=>array(66,-64,908,843),53006=>array(66,-64,908,843),53007=>array(66,-76,907,843),53008=>array(66,-62,907,843),53009=>array(66,-61,907,843),53010=>array(66,-69,922,843),53011=>array(66,-74,929,843),53012=>array(66,-69,927,843),53013=>array(66,-68,911,843),53014=>array(66,-72,929,843),53015=>array(66,-70,936,843),53016=>array(66,-66,908,843),53017=>array(66,-59,916,843),53018=>array(66,-60,928,843),53019=>array(66,-68,908,843),53020=>array(104,-70,907,842),53021=>array(66,-61,908,842),53022=>array(66,-61,908,842),53023=>array(66,-71,931,842),53024=>array(69,-46,907,842),53025=>array(66,-68,912,842),53026=>array(66,-76,908,842),53027=>array(66,-44,921,842),53028=>array(66,-62,917,842),53029=>array(66,-64,908,842),53030=>array(66,-64,908,842),53031=>array(66,-64,908,842),53032=>array(66,-69,923,842),53033=>array(66,-64,908,842),53034=>array(66,-64,908,842),53035=>array(66,-76,908,842),53036=>array(66,-62,908,842),53037=>array(66,-61,908,842),53038=>array(66,-69,922,842),53039=>array(66,-74,929,842),53040=>array(66,-69,927,842),53041=>array(66,-68,911,842),53042=>array(66,-72,929,842),53043=>array(66,-70,936,842),53044=>array(66,-66,908,842),53045=>array(66,-59,916,842),53046=>array(66,-60,928,842),53047=>array(66,-68,908,842),53048=>array(97,-68,907,843),53049=>array(66,-61,907,843),53050=>array(66,-61,907,843),53051=>array(66,-71,931,843),53052=>array(64,-46,907,843),53053=>array(66,-68,912,843),53054=>array(66,-76,907,843),53055=>array(66,-44,921,843),53056=>array(66,-62,917,843),53057=>array(66,-64,907,843),53058=>array(66,-64,908,843),53059=>array(66,-64,908,843),53060=>array(66,-69,923,843),53061=>array(66,-64,908,843),53062=>array(66,-64,908,843),53063=>array(66,-76,907,843),53064=>array(66,-62,907,843),53065=>array(66,-61,907,843),53066=>array(66,-69,922,843),53067=>array(66,-74,929,843),53068=>array(66,-69,927,843),53069=>array(66,-68,911,843),53070=>array(66,-72,929,843),53071=>array(66,-70,936,843),53072=>array(66,-66,908,843),53073=>array(66,-59,916,843),53074=>array(66,-60,928,843),53075=>array(66,-68,908,843),53076=>array(62,22,943,725),53077=>array(79,-61,921,775),53078=>array(79,-61,921,775),53079=>array(79,-71,921,775),53080=>array(79,-46,922,775),53081=>array(79,-68,921,775),53082=>array(79,-74,921,775),53083=>array(79,-44,921,775),53084=>array(79,-62,921,775),53085=>array(79,-64,921,775),53086=>array(79,-64,921,775),53087=>array(79,-63,921,775),53088=>array(79,-68,921,775),53089=>array(79,-64,921,775),53090=>array(79,-63,921,775),53091=>array(79,-74,921,775),53092=>array(79,-62,921,775),53093=>array(79,-61,921,775),53094=>array(79,-69,921,775),53095=>array(79,-74,921,775),53096=>array(79,-69,921,775),53097=>array(79,-68,921,775),53098=>array(79,-72,921,775),53099=>array(79,-70,921,775),53100=>array(79,-66,921,775),53101=>array(79,-59,921,775),53102=>array(79,-60,921,775),53103=>array(79,-68,921,775),53104=>array(68,-69,936,842),53105=>array(65,-59,936,842),53106=>array(65,-61,936,842),53107=>array(65,-71,936,842),53108=>array(72,-45,936,842),53109=>array(65,-69,936,842),53110=>array(65,-76,936,842),53111=>array(65,-44,936,842),53112=>array(65,-62,936,842),53113=>array(65,-64,936,842),53114=>array(65,-64,936,842),53115=>array(65,-64,936,842),53116=>array(65,-70,936,842),53117=>array(65,-64,936,842),53118=>array(65,-64,936,842),53119=>array(65,-76,936,842),53120=>array(65,-62,936,842),53121=>array(65,-61,936,842),53122=>array(65,-70,936,842),53123=>array(65,-74,936,842),53124=>array(65,-69,936,842),53125=>array(65,-67,936,842),53126=>array(65,-72,936,842),53127=>array(65,-71,936,842),53128=>array(65,-66,936,842),53129=>array(65,-59,936,842),53130=>array(65,-60,936,842),53131=>array(65,-69,936,842),53132=>array(68,-69,907,842),53133=>array(77,-61,907,842),53134=>array(77,-61,907,842),53135=>array(77,-71,931,842),53136=>array(72,-46,907,842),53137=>array(77,-68,912,842),53138=>array(77,-76,907,842),53139=>array(77,-44,921,842),53140=>array(77,-62,917,842),53141=>array(77,-64,907,842),53142=>array(77,-64,908,842),53143=>array(77,-64,908,842),53144=>array(77,-69,923,842),53145=>array(77,-64,908,842),53146=>array(77,-64,908,842),53147=>array(77,-76,907,842),53148=>array(77,-62,907,842),53149=>array(77,-61,907,842),53150=>array(77,-69,922,842),53151=>array(77,-74,929,842),53152=>array(77,-69,927,842),53153=>array(77,-68,911,842),53154=>array(77,-72,929,842),53155=>array(77,-70,936,842),53156=>array(77,-66,908,842),53157=>array(77,-59,916,842),53158=>array(77,-60,928,842),53159=>array(77,-68,908,842),53160=>array(92,-69,907,842),53161=>array(65,-61,907,842),53162=>array(65,-61,907,842),53163=>array(65,-71,931,842),53164=>array(65,-46,907,842),53165=>array(65,-68,912,842),53166=>array(65,-76,907,842),53167=>array(65,-44,921,842),53168=>array(65,-62,917,842),53169=>array(65,-64,907,842),53170=>array(65,-64,908,842),53171=>array(65,-64,908,842),53172=>array(65,-69,923,842),53173=>array(65,-64,908,842),53174=>array(65,-64,908,842),53175=>array(65,-76,907,842),53176=>array(65,-62,907,842),53177=>array(65,-61,907,842),53178=>array(65,-69,922,842),53179=>array(65,-74,929,842),53180=>array(65,-69,927,842),53181=>array(65,-68,911,842),53182=>array(65,-72,929,842),53183=>array(65,-70,936,842),53184=>array(65,-66,908,842),53185=>array(65,-59,916,842),53186=>array(65,-60,928,842),53187=>array(65,-68,908,842),53188=>array(62,22,943,725),53189=>array(79,-61,922,775),53190=>array(79,-61,922,775),53191=>array(79,-71,922,775),53192=>array(79,-46,922,775),53193=>array(79,-68,922,775),53194=>array(79,-74,922,775),53195=>array(79,-44,922,775),53196=>array(79,-62,922,775),53197=>array(79,-64,922,775),53198=>array(79,-64,922,775),53199=>array(79,-63,922,775),53200=>array(79,-68,922,775),53201=>array(79,-64,922,775),53202=>array(79,-63,922,775),53203=>array(79,-74,922,775),53204=>array(79,-62,922,775),53205=>array(79,-61,922,775),53206=>array(79,-69,922,775),53207=>array(79,-74,922,775),53208=>array(79,-69,922,775),53209=>array(79,-68,922,775),53210=>array(79,-72,922,775),53211=>array(79,-70,922,775),53212=>array(79,-66,922,775),53213=>array(79,-59,922,775),53214=>array(79,-60,922,775),53215=>array(79,-68,922,775),53216=>array(87,-64,928,795),53217=>array(79,-61,921,790),53218=>array(79,-61,921,790),53219=>array(79,-71,921,790),53220=>array(79,-46,921,785),53221=>array(79,-68,921,790),53222=>array(79,-74,921,790),53223=>array(79,-44,921,790),53224=>array(79,-62,921,790),53225=>array(79,-64,921,790),53226=>array(79,-64,921,790),53227=>array(79,-63,921,790),53228=>array(79,-68,921,790),53229=>array(79,-64,921,790),53230=>array(79,-63,921,790),53231=>array(79,-74,921,790),53232=>array(79,-62,921,790),53233=>array(79,-61,921,790),53234=>array(79,-69,921,790),53235=>array(79,-74,921,790),53236=>array(79,-69,921,790),53237=>array(79,-68,921,790),53238=>array(79,-72,921,790),53239=>array(79,-70,921,790),53240=>array(79,-66,921,790),53241=>array(79,-59,921,790),53242=>array(79,-60,921,790),53243=>array(79,-68,921,790),53244=>array(70,-70,907,841),53245=>array(75,-61,908,844),53246=>array(75,-61,908,844),53247=>array(75,-71,931,844),53248=>array(76,-46,907,841),53249=>array(75,-68,912,844),53250=>array(75,-76,908,844),53251=>array(75,-44,921,844),53252=>array(75,-62,917,844),53253=>array(75,-64,908,844),53254=>array(75,-64,908,844),53255=>array(75,-64,908,844),53256=>array(75,-69,923,844),53257=>array(75,-64,908,844),53258=>array(75,-64,908,844),53259=>array(75,-76,908,844),53260=>array(75,-62,908,844),53261=>array(75,-61,908,844),53262=>array(75,-69,922,844),53263=>array(75,-74,929,844),53264=>array(75,-69,927,844),53265=>array(75,-68,911,844),53266=>array(75,-72,929,844),53267=>array(75,-70,936,844),53268=>array(75,-66,908,844),53269=>array(75,-59,916,844),53270=>array(75,-60,928,844),53271=>array(75,-68,908,844),53272=>array(61,-68,907,843),53273=>array(70,-61,907,843),53274=>array(70,-61,907,843),53275=>array(70,-71,931,843),53276=>array(76,-46,907,843),53277=>array(70,-68,912,843),53278=>array(70,-76,907,843),53279=>array(70,-44,921,843),53280=>array(70,-62,917,843),53281=>array(70,-64,907,843),53282=>array(70,-64,908,843),53283=>array(70,-64,908,843),53284=>array(70,-69,923,843),53285=>array(70,-64,908,843),53286=>array(70,-64,908,843),53287=>array(70,-76,907,843),53288=>array(70,-62,907,843),53289=>array(70,-61,907,843),53290=>array(70,-69,922,843),53291=>array(70,-74,929,843),53292=>array(70,-69,927,843),53293=>array(70,-68,911,843),53294=>array(70,-72,929,843),53295=>array(70,-70,936,843),53296=>array(70,-66,908,843),53297=>array(70,-59,916,843),53298=>array(70,-60,928,843),53299=>array(70,-68,908,843),53300=>array(67,-69,907,842),53301=>array(65,-61,907,842),53302=>array(65,-61,907,842),53303=>array(65,-71,931,842),53304=>array(65,-46,907,842),53305=>array(65,-68,912,842),53306=>array(65,-76,907,842),53307=>array(65,-44,921,842),53308=>array(65,-62,917,842),53309=>array(65,-64,907,842),53310=>array(65,-64,908,842),53311=>array(65,-64,908,842),53312=>array(65,-69,923,842),53313=>array(65,-64,908,842),53314=>array(65,-64,908,842),53315=>array(65,-76,907,842),53316=>array(65,-62,907,842),53317=>array(65,-61,907,842),53318=>array(65,-69,922,842),53319=>array(65,-74,929,842),53320=>array(65,-69,927,842),53321=>array(65,-68,911,842),53322=>array(65,-72,929,842),53323=>array(65,-70,936,842),53324=>array(65,-66,908,842),53325=>array(65,-59,916,842),53326=>array(65,-60,928,842),53327=>array(65,-68,908,842),53328=>array(87,-64,928,795),53329=>array(79,-61,921,785),53330=>array(79,-61,921,785),53331=>array(79,-71,921,785),53332=>array(96,-46,927,785),53333=>array(79,-68,921,785),53334=>array(79,-74,921,785),53335=>array(79,-44,921,785),53336=>array(79,-62,921,785),53337=>array(79,-64,921,785),53338=>array(79,-64,921,785),53339=>array(79,-63,921,785),53340=>array(79,-68,921,785),53341=>array(79,-64,921,785),53342=>array(79,-63,921,785),53343=>array(79,-74,921,785),53344=>array(79,-62,921,785),53345=>array(79,-61,921,785),53346=>array(79,-69,921,785),53347=>array(79,-74,921,785),53348=>array(79,-69,921,785),53349=>array(79,-68,921,785),53350=>array(79,-72,921,785),53351=>array(79,-70,921,785),53352=>array(79,-66,921,785),53353=>array(79,-59,921,785),53354=>array(79,-60,921,785),53355=>array(79,-68,921,785),53356=>array(67,27,943,700),53357=>array(79,-61,922,785),53358=>array(79,-61,922,785),53359=>array(79,-71,922,785),53360=>array(79,-46,921,785),53361=>array(79,-68,922,785),53362=>array(79,-74,922,785),53363=>array(79,-44,922,785),53364=>array(79,-62,922,785),53365=>array(79,-64,922,785),53366=>array(79,-64,922,785),53367=>array(79,-63,922,785),53368=>array(79,-68,922,785),53369=>array(79,-64,922,785),53370=>array(79,-63,922,785),53371=>array(79,-74,922,785),53372=>array(79,-62,922,785),53373=>array(79,-61,922,785),53374=>array(79,-69,922,785),53375=>array(79,-74,922,785),53376=>array(79,-69,922,785),53377=>array(79,-68,922,785),53378=>array(79,-72,922,785),53379=>array(79,-70,922,785),53380=>array(79,-66,922,785),53381=>array(79,-59,922,785),53382=>array(79,-60,922,785),53383=>array(79,-68,922,785),53384=>array(65,-69,907,842),53385=>array(59,-61,907,842),53386=>array(59,-61,907,842),53387=>array(59,-71,931,842),53388=>array(65,-46,907,842),53389=>array(59,-68,912,842),53390=>array(59,-76,907,842),53391=>array(59,-44,921,842),53392=>array(59,-62,917,842),53393=>array(59,-64,907,842),53394=>array(59,-64,908,842),53395=>array(59,-64,908,842),53396=>array(59,-69,923,842),53397=>array(59,-64,908,842),53398=>array(59,-64,908,842),53399=>array(59,-76,907,842),53400=>array(59,-62,907,842),53401=>array(59,-61,907,842),53402=>array(59,-69,922,842),53403=>array(59,-74,929,842),53404=>array(59,-69,927,842),53405=>array(59,-68,911,842),53406=>array(59,-72,929,842),53407=>array(59,-70,936,842),53408=>array(59,-66,908,842),53409=>array(59,-59,916,842),53410=>array(59,-60,928,842),53411=>array(59,-68,908,842),53412=>array(120,-69,907,842),53413=>array(67,-61,907,842),53414=>array(67,-61,907,842),53415=>array(67,-71,931,842),53416=>array(94,-46,907,842),53417=>array(67,-68,912,842),53418=>array(67,-76,907,842),53419=>array(67,-44,921,842),53420=>array(67,-62,917,842),53421=>array(67,-64,907,842),53422=>array(67,-64,908,842),53423=>array(67,-64,908,842),53424=>array(67,-69,923,842),53425=>array(67,-64,908,842),53426=>array(67,-64,908,842),53427=>array(67,-76,907,842),53428=>array(67,-62,907,842),53429=>array(67,-61,907,842),53430=>array(67,-69,922,842),53431=>array(67,-74,929,842),53432=>array(67,-69,927,842),53433=>array(67,-68,911,842),53434=>array(67,-72,929,842),53435=>array(67,-70,936,842),53436=>array(67,-66,908,842),53437=>array(67,-59,916,842),53438=>array(67,-60,928,842),53439=>array(67,-68,908,842),53440=>array(115,-69,936,842),53441=>array(115,-59,936,842),53442=>array(115,-61,936,842),53443=>array(115,-71,936,842),53444=>array(115,-45,936,842),53445=>array(115,-69,936,842),53446=>array(115,-76,936,842),53447=>array(115,-44,936,842),53448=>array(115,-62,936,842),53449=>array(115,-64,936,842),53450=>array(115,-64,936,842),53451=>array(115,-64,936,842),53452=>array(115,-70,936,842),53453=>array(115,-64,936,842),53454=>array(115,-64,936,842),53455=>array(115,-76,936,842),53456=>array(115,-62,936,842),53457=>array(115,-61,936,842),53458=>array(115,-70,936,842),53459=>array(115,-74,936,842),53460=>array(115,-69,936,842),53461=>array(115,-67,936,842),53462=>array(115,-72,936,842),53463=>array(115,-71,936,842),53464=>array(115,-66,936,842),53465=>array(115,-59,936,842),53466=>array(115,-60,936,842),53467=>array(115,-69,936,842),53468=>array(115,-69,907,842),53469=>array(115,-61,907,842),53470=>array(115,-61,907,842),53471=>array(115,-71,931,842),53472=>array(115,-46,907,842),53473=>array(115,-68,912,842),53474=>array(115,-76,907,842),53475=>array(115,-44,921,842),53476=>array(115,-62,917,842),53477=>array(115,-64,907,842),53478=>array(115,-64,908,842),53479=>array(115,-64,908,842),53480=>array(115,-69,923,842),53481=>array(115,-64,908,842),53482=>array(115,-64,908,842),53483=>array(115,-76,907,842),53484=>array(115,-62,907,842),53485=>array(115,-61,907,842),53486=>array(115,-69,922,842),53487=>array(115,-74,929,842),53488=>array(115,-69,927,842),53489=>array(115,-68,911,842),53490=>array(115,-72,929,842),53491=>array(115,-70,936,842),53492=>array(115,-66,908,842),53493=>array(115,-59,916,842),53494=>array(115,-60,928,842),53495=>array(115,-68,908,842),53496=>array(114,-68,935,843),53497=>array(115,-59,936,842),53498=>array(115,-61,936,842),53499=>array(115,-71,936,842),53500=>array(115,-45,936,842),53501=>array(115,-69,936,842),53502=>array(115,-76,936,842),53503=>array(115,-44,936,842),53504=>array(115,-62,936,842),53505=>array(115,-64,936,842),53506=>array(115,-64,936,842),53507=>array(115,-64,936,842),53508=>array(115,-70,936,842),53509=>array(115,-64,936,842),53510=>array(115,-64,936,842),53511=>array(115,-76,936,842),53512=>array(115,-62,936,842),53513=>array(115,-61,936,842),53514=>array(115,-70,936,842),53515=>array(115,-74,936,842),53516=>array(115,-69,936,842),53517=>array(115,-67,936,842),53518=>array(115,-72,936,842),53519=>array(115,-71,936,842),53520=>array(115,-66,936,842),53521=>array(115,-59,936,842),53522=>array(115,-60,936,842),53523=>array(115,-69,936,842),53524=>array(115,-69,907,842),53525=>array(115,-61,907,842),53526=>array(115,-61,907,842),53527=>array(115,-71,931,842),53528=>array(115,-46,907,842),53529=>array(115,-68,912,842),53530=>array(115,-76,907,842),53531=>array(115,-44,921,842),53532=>array(115,-62,917,842),53533=>array(115,-64,907,842),53534=>array(115,-64,908,842),53535=>array(115,-64,908,842),53536=>array(115,-69,923,842),53537=>array(115,-64,908,842),53538=>array(115,-64,908,842),53539=>array(115,-76,907,842),53540=>array(115,-62,907,842),53541=>array(115,-61,907,842),53542=>array(115,-69,922,842),53543=>array(115,-74,929,842),53544=>array(115,-69,927,842),53545=>array(115,-68,911,842),53546=>array(115,-72,929,842),53547=>array(115,-70,936,842),53548=>array(115,-66,908,842),53549=>array(115,-59,916,842),53550=>array(115,-60,928,842),53551=>array(115,-68,908,842),53552=>array(115,-70,907,841),53553=>array(115,-61,907,841),53554=>array(115,-61,907,841),53555=>array(115,-71,931,841),53556=>array(115,-46,907,841),53557=>array(115,-68,912,841),53558=>array(115,-76,907,841),53559=>array(115,-44,921,841),53560=>array(115,-62,917,841),53561=>array(115,-64,907,841),53562=>array(115,-64,908,841),53563=>array(115,-64,908,841),53564=>array(115,-69,923,841),53565=>array(115,-64,908,841),53566=>array(115,-64,908,841),53567=>array(115,-76,906,841),53568=>array(115,-62,907,841),53569=>array(115,-61,907,841),53570=>array(115,-69,922,841),53571=>array(115,-74,929,841),53572=>array(115,-69,927,841),53573=>array(115,-68,911,841),53574=>array(115,-72,929,841),53575=>array(115,-70,936,841),53576=>array(115,-66,908,841),53577=>array(115,-59,916,841),53578=>array(115,-60,928,841),53579=>array(115,-68,908,841),53580=>array(115,-68,907,843),53581=>array(115,-61,907,843),53582=>array(115,-61,907,843),53583=>array(115,-71,931,843),53584=>array(115,-46,907,843),53585=>array(115,-68,912,843),53586=>array(115,-76,907,843),53587=>array(115,-44,921,843),53588=>array(115,-62,917,843),53589=>array(115,-64,907,843),53590=>array(115,-64,908,843),53591=>array(115,-64,908,843),53592=>array(115,-69,923,843),53593=>array(115,-64,908,843),53594=>array(115,-64,908,843),53595=>array(115,-76,907,843),53596=>array(115,-62,907,843),53597=>array(115,-61,907,843),53598=>array(115,-69,922,843),53599=>array(115,-74,929,843),53600=>array(115,-69,927,843),53601=>array(115,-68,911,843),53602=>array(115,-72,929,843),53603=>array(115,-70,936,843),53604=>array(115,-66,908,843),53605=>array(115,-59,916,843),53606=>array(115,-60,928,843),53607=>array(115,-68,908,843),53608=>array(115,-70,907,842),53609=>array(115,-61,908,842),53610=>array(115,-61,908,842),53611=>array(115,-71,931,842),53612=>array(115,-46,907,842),53613=>array(115,-68,912,842),53614=>array(115,-76,908,842),53615=>array(115,-44,921,842),53616=>array(115,-62,917,842),53617=>array(115,-64,908,842),53618=>array(115,-64,908,842),53619=>array(115,-64,908,842),53620=>array(115,-69,923,842),53621=>array(115,-64,908,842),53622=>array(115,-64,908,842),53623=>array(115,-76,908,842),53624=>array(115,-62,908,842),53625=>array(115,-61,908,842),53626=>array(115,-69,922,842),53627=>array(115,-74,929,842),53628=>array(115,-69,927,842),53629=>array(115,-68,911,842),53630=>array(115,-72,929,842),53631=>array(115,-70,936,842),53632=>array(115,-66,908,842),53633=>array(115,-59,916,842),53634=>array(115,-60,928,842),53635=>array(115,-68,908,842),53636=>array(115,-68,907,843),53637=>array(115,-61,907,843),53638=>array(115,-61,907,843),53639=>array(115,-71,931,843),53640=>array(115,-46,907,843),53641=>array(115,-68,912,843),53642=>array(115,-76,907,843),53643=>array(115,-44,921,843),53644=>array(115,-62,917,843),53645=>array(115,-64,907,843),53646=>array(115,-64,908,843),53647=>array(115,-64,908,843),53648=>array(115,-69,923,843),53649=>array(115,-64,908,843),53650=>array(115,-64,908,843),53651=>array(115,-76,907,843),53652=>array(115,-62,907,843),53653=>array(115,-61,907,843),53654=>array(115,-69,922,843),53655=>array(115,-74,929,843),53656=>array(115,-69,927,843),53657=>array(115,-68,911,843),53658=>array(115,-72,929,843),53659=>array(115,-70,936,843),53660=>array(115,-66,908,843),53661=>array(115,-59,916,843),53662=>array(115,-60,928,843),53663=>array(115,-68,908,843),53664=>array(62,17,943,757),53665=>array(79,-61,921,799),53666=>array(79,-61,921,799),53667=>array(79,-71,921,799),53668=>array(79,-46,922,789),53669=>array(79,-68,921,799),53670=>array(79,-74,921,799),53671=>array(79,-44,921,799),53672=>array(79,-62,921,799),53673=>array(79,-64,921,799),53674=>array(79,-64,921,799),53675=>array(79,-63,921,799),53676=>array(79,-68,921,799),53677=>array(79,-64,921,799),53678=>array(79,-63,921,799),53679=>array(79,-74,921,799),53680=>array(79,-62,921,799),53681=>array(79,-61,921,799),53682=>array(79,-69,921,799),53683=>array(79,-74,921,799),53684=>array(79,-69,921,799),53685=>array(79,-68,921,799),53686=>array(79,-72,921,799),53687=>array(79,-70,921,799),53688=>array(79,-66,921,799),53689=>array(79,-59,921,799),53690=>array(79,-60,921,799),53691=>array(79,-68,921,799),53692=>array(53,-69,936,842),53693=>array(77,-59,936,842),53694=>array(77,-61,936,842),53695=>array(77,-71,936,842),53696=>array(77,-45,936,842),53697=>array(77,-69,936,842),53698=>array(77,-76,936,842),53699=>array(77,-44,936,842),53700=>array(77,-62,936,842),53701=>array(77,-64,936,842),53702=>array(77,-64,936,842),53703=>array(77,-64,936,842),53704=>array(77,-70,936,842),53705=>array(77,-64,936,842),53706=>array(77,-64,936,842),53707=>array(77,-76,936,842),53708=>array(77,-62,936,842),53709=>array(77,-61,936,842),53710=>array(77,-70,936,842),53711=>array(77,-74,936,842),53712=>array(77,-69,936,842),53713=>array(77,-67,936,842),53714=>array(77,-72,936,842),53715=>array(77,-71,936,842),53716=>array(77,-66,936,842),53717=>array(77,-59,936,842),53718=>array(77,-60,936,842),53719=>array(77,-69,936,842),53720=>array(43,-69,907,842),53721=>array(77,-61,907,842),53722=>array(77,-61,907,842),53723=>array(77,-71,931,842),53724=>array(77,-46,907,842),53725=>array(77,-68,912,842),53726=>array(77,-76,907,842),53727=>array(77,-44,921,842),53728=>array(77,-62,917,842),53729=>array(77,-64,907,842),53730=>array(77,-64,908,842),53731=>array(77,-64,908,842),53732=>array(77,-69,923,842),53733=>array(77,-64,908,842),53734=>array(77,-64,908,842),53735=>array(77,-76,907,842),53736=>array(77,-62,907,842),53737=>array(77,-61,907,842),53738=>array(77,-69,922,842),53739=>array(77,-74,929,842),53740=>array(77,-69,927,842),53741=>array(77,-68,911,842),53742=>array(77,-72,929,842),53743=>array(77,-70,936,842),53744=>array(77,-66,908,842),53745=>array(77,-59,916,842),53746=>array(77,-60,928,842),53747=>array(77,-68,908,842),53748=>array(53,-68,907,843),53749=>array(65,-61,907,842),53750=>array(65,-61,907,842),53751=>array(65,-71,931,842),53752=>array(65,-46,907,842),53753=>array(65,-68,912,842),53754=>array(65,-76,907,842),53755=>array(65,-44,921,842),53756=>array(65,-62,917,842),53757=>array(65,-64,907,842),53758=>array(65,-64,908,842),53759=>array(65,-64,908,842),53760=>array(65,-69,923,842),53761=>array(65,-64,908,842),53762=>array(65,-64,908,842),53763=>array(65,-76,907,842),53764=>array(65,-62,907,842),53765=>array(65,-61,907,842),53766=>array(65,-69,922,842),53767=>array(65,-74,929,842),53768=>array(65,-69,927,842),53769=>array(65,-68,911,842),53770=>array(65,-72,929,842),53771=>array(65,-70,936,842),53772=>array(65,-66,908,842),53773=>array(65,-59,916,842),53774=>array(65,-60,928,842),53775=>array(65,-68,908,842),53776=>array(62,7,943,777),53777=>array(79,-61,921,799),53778=>array(79,-61,921,799),53779=>array(79,-71,921,799),53780=>array(79,-46,921,794),53781=>array(79,-68,921,799),53782=>array(79,-74,921,799),53783=>array(79,-44,921,799),53784=>array(79,-62,921,799),53785=>array(79,-64,921,799),53786=>array(79,-64,921,799),53787=>array(79,-63,921,799),53788=>array(79,-68,921,799),53789=>array(79,-64,921,799),53790=>array(79,-63,921,799),53791=>array(79,-74,921,799),53792=>array(79,-62,921,799),53793=>array(79,-61,921,799),53794=>array(79,-69,921,799),53795=>array(79,-74,921,799),53796=>array(79,-69,921,799),53797=>array(79,-68,921,799),53798=>array(79,-72,921,799),53799=>array(79,-70,921,799),53800=>array(79,-66,921,799),53801=>array(79,-59,921,799),53802=>array(79,-60,921,799),53803=>array(79,-68,921,799),53804=>array(82,-64,924,789),53805=>array(79,-61,921,799),53806=>array(79,-61,921,799),53807=>array(79,-71,921,799),53808=>array(79,-46,921,789),53809=>array(79,-68,921,799),53810=>array(79,-74,921,799),53811=>array(79,-44,921,799),53812=>array(79,-62,921,799),53813=>array(79,-64,921,799),53814=>array(79,-64,921,799),53815=>array(79,-63,921,799),53816=>array(79,-68,921,799),53817=>array(79,-64,921,799),53818=>array(79,-63,921,799),53819=>array(79,-74,921,799),53820=>array(79,-62,921,799),53821=>array(79,-61,921,799),53822=>array(79,-69,921,799),53823=>array(79,-74,921,799),53824=>array(79,-69,921,799),53825=>array(79,-68,921,799),53826=>array(79,-72,921,799),53827=>array(79,-70,921,799),53828=>array(79,-66,921,799),53829=>array(79,-59,921,799),53830=>array(79,-60,921,799),53831=>array(79,-68,921,799),53832=>array(76,-70,907,841),53833=>array(74,-61,909,843),53834=>array(74,-61,909,843),53835=>array(74,-71,931,843),53836=>array(75,-46,909,843),53837=>array(74,-68,912,843),53838=>array(74,-76,909,843),53839=>array(74,-44,921,843),53840=>array(74,-62,917,843),53841=>array(74,-64,909,843),53842=>array(74,-64,909,843),53843=>array(74,-64,909,843),53844=>array(74,-69,923,843),53845=>array(74,-64,909,843),53846=>array(74,-64,909,843),53847=>array(74,-76,909,843),53848=>array(74,-62,909,843),53849=>array(74,-61,909,843),53850=>array(74,-69,922,843),53851=>array(74,-74,929,843),53852=>array(74,-69,927,843),53853=>array(74,-68,911,843),53854=>array(74,-72,929,843),53855=>array(74,-70,936,843),53856=>array(74,-66,909,843),53857=>array(74,-59,916,843),53858=>array(74,-60,928,843),53859=>array(74,-68,909,843),53860=>array(56,-68,907,843),53861=>array(68,-61,907,843),53862=>array(68,-61,907,843),53863=>array(68,-71,931,843),53864=>array(74,-46,907,843),53865=>array(68,-68,912,843),53866=>array(68,-76,907,843),53867=>array(68,-44,921,843),53868=>array(68,-62,917,843),53869=>array(68,-64,907,843),53870=>array(68,-64,908,843),53871=>array(68,-64,908,843),53872=>array(68,-69,923,843),53873=>array(68,-64,908,843),53874=>array(68,-64,908,843),53875=>array(68,-76,907,843),53876=>array(68,-62,907,843),53877=>array(68,-61,907,843),53878=>array(68,-69,922,843),53879=>array(68,-74,929,843),53880=>array(68,-69,927,843),53881=>array(68,-68,911,843),53882=>array(68,-72,929,843),53883=>array(68,-70,936,843),53884=>array(68,-66,908,843),53885=>array(68,-59,916,843),53886=>array(68,-60,928,843),53887=>array(68,-68,908,843),53888=>array(67,-69,907,842),53889=>array(65,-61,907,842),53890=>array(65,-61,907,842),53891=>array(65,-71,931,842),53892=>array(65,-46,907,842),53893=>array(65,-68,912,842),53894=>array(65,-76,907,842),53895=>array(65,-44,921,842),53896=>array(65,-62,917,842),53897=>array(65,-64,907,842),53898=>array(65,-64,908,842),53899=>array(65,-64,908,842),53900=>array(65,-69,923,842),53901=>array(65,-64,908,842),53902=>array(65,-64,908,842),53903=>array(65,-76,907,842),53904=>array(65,-62,907,842),53905=>array(65,-61,907,842),53906=>array(65,-69,922,842),53907=>array(65,-74,929,842),53908=>array(65,-69,927,842),53909=>array(65,-68,911,842),53910=>array(65,-72,929,842),53911=>array(65,-70,936,842),53912=>array(65,-66,908,842),53913=>array(65,-59,916,842),53914=>array(65,-60,928,842),53915=>array(65,-68,908,842),53916=>array(82,-64,924,784),53917=>array(79,-61,921,799),53918=>array(79,-61,921,799),53919=>array(79,-71,921,799),53920=>array(81,-46,922,789),53921=>array(79,-68,921,799),53922=>array(79,-74,921,799),53923=>array(79,-44,921,799),53924=>array(79,-62,921,799),53925=>array(79,-64,921,799),53926=>array(79,-64,921,799),53927=>array(79,-63,921,799),53928=>array(79,-68,921,799),53929=>array(79,-64,921,799),53930=>array(79,-63,921,799),53931=>array(79,-74,921,799),53932=>array(79,-62,921,799),53933=>array(79,-61,921,799),53934=>array(79,-69,921,799),53935=>array(79,-74,921,799),53936=>array(79,-69,921,799),53937=>array(79,-68,921,799),53938=>array(79,-72,921,799),53939=>array(79,-70,921,799),53940=>array(79,-66,921,799),53941=>array(79,-59,921,799),53942=>array(79,-60,921,799),53943=>array(79,-68,921,799),53944=>array(57,52,943,719),53945=>array(79,-61,922,796),53946=>array(79,-61,922,796),53947=>array(79,-71,922,796),53948=>array(79,-46,921,791),53949=>array(79,-68,922,796),53950=>array(79,-74,922,796),53951=>array(79,-44,922,796),53952=>array(79,-62,922,796),53953=>array(79,-64,922,796),53954=>array(79,-64,922,796),53955=>array(79,-63,922,796),53956=>array(79,-68,922,796),53957=>array(79,-64,922,796),53958=>array(79,-63,922,796),53959=>array(79,-74,922,796),53960=>array(79,-62,922,796),53961=>array(79,-61,922,796),53962=>array(79,-69,922,796),53963=>array(79,-74,922,796),53964=>array(79,-69,922,796),53965=>array(79,-68,922,796),53966=>array(79,-72,922,796),53967=>array(79,-70,922,796),53968=>array(79,-66,922,796),53969=>array(79,-59,922,796),53970=>array(79,-60,922,796),53971=>array(79,-68,922,796),53972=>array(67,-69,907,842),53973=>array(65,-61,907,842),53974=>array(65,-61,907,842),53975=>array(65,-71,931,842),53976=>array(65,-46,907,842),53977=>array(65,-68,912,842),53978=>array(65,-76,907,842),53979=>array(65,-44,921,842),53980=>array(65,-62,917,842),53981=>array(65,-64,907,842),53982=>array(65,-64,908,842),53983=>array(65,-64,908,842),53984=>array(65,-69,923,842),53985=>array(65,-64,908,842),53986=>array(65,-64,908,842),53987=>array(65,-76,907,842),53988=>array(65,-62,907,842),53989=>array(65,-61,907,842),53990=>array(65,-69,922,842),53991=>array(65,-74,929,842),53992=>array(65,-69,927,842),53993=>array(65,-68,911,842),53994=>array(65,-72,929,842),53995=>array(65,-70,936,842),53996=>array(65,-66,908,842),53997=>array(65,-59,916,842),53998=>array(65,-60,928,842),53999=>array(65,-68,908,842),54000=>array(125,-69,907,842),54001=>array(130,-61,907,842),54002=>array(130,-61,907,842),54003=>array(130,-71,931,842),54004=>array(125,-46,907,842),54005=>array(130,-68,912,842),54006=>array(130,-76,907,842),54007=>array(130,-44,921,842),54008=>array(130,-62,917,842),54009=>array(130,-64,907,842),54010=>array(130,-64,908,842),54011=>array(130,-64,908,842),54012=>array(130,-69,923,842),54013=>array(130,-64,908,842),54014=>array(130,-64,908,842),54015=>array(130,-76,907,842),54016=>array(130,-62,907,842),54017=>array(130,-61,907,842),54018=>array(130,-69,922,842),54019=>array(130,-74,929,842),54020=>array(130,-69,927,842),54021=>array(130,-68,911,842),54022=>array(130,-72,929,842),54023=>array(130,-70,936,842),54024=>array(130,-66,908,842),54025=>array(130,-59,916,842),54026=>array(130,-60,928,842),54027=>array(130,-68,908,842),54028=>array(84,-69,936,842),54029=>array(66,-59,936,842),54030=>array(66,-61,936,842),54031=>array(66,-71,936,842),54032=>array(78,-45,936,842),54033=>array(66,-69,936,842),54034=>array(66,-76,936,842),54035=>array(66,-44,936,842),54036=>array(66,-62,936,842),54037=>array(66,-64,936,842),54038=>array(66,-64,936,842),54039=>array(66,-64,936,842),54040=>array(66,-70,936,842),54041=>array(66,-64,936,842),54042=>array(66,-64,936,842),54043=>array(66,-76,936,842),54044=>array(66,-62,936,842),54045=>array(66,-61,936,842),54046=>array(66,-70,936,842),54047=>array(66,-74,936,842),54048=>array(66,-69,936,842),54049=>array(66,-67,936,842),54050=>array(66,-72,936,842),54051=>array(66,-71,936,842),54052=>array(66,-66,936,842),54053=>array(66,-59,936,842),54054=>array(66,-60,936,842),54055=>array(66,-69,936,842),54056=>array(73,-69,907,842),54057=>array(83,-61,907,842),54058=>array(83,-61,907,842),54059=>array(83,-71,931,842),54060=>array(78,-46,907,842),54061=>array(83,-68,912,842),54062=>array(83,-76,907,842),54063=>array(83,-44,921,842),54064=>array(83,-62,917,842),54065=>array(83,-64,907,842),54066=>array(83,-64,908,842),54067=>array(83,-64,908,842),54068=>array(83,-69,923,842),54069=>array(83,-64,908,842),54070=>array(83,-64,908,842),54071=>array(83,-76,907,842),54072=>array(83,-62,907,842),54073=>array(83,-61,907,842),54074=>array(83,-69,922,842),54075=>array(83,-74,929,842),54076=>array(83,-69,927,842),54077=>array(83,-68,911,842),54078=>array(83,-72,929,842),54079=>array(83,-70,936,842),54080=>array(83,-66,908,842),54081=>array(83,-59,916,842),54082=>array(83,-60,928,842),54083=>array(83,-68,908,842),54084=>array(84,-68,935,843),54085=>array(66,-59,936,842),54086=>array(66,-61,936,842),54087=>array(66,-71,936,842),54088=>array(78,-45,936,842),54089=>array(66,-69,936,842),54090=>array(66,-76,936,842),54091=>array(66,-44,936,842),54092=>array(66,-62,936,842),54093=>array(66,-64,936,842),54094=>array(66,-64,936,842),54095=>array(66,-64,936,842),54096=>array(66,-70,936,842),54097=>array(66,-64,936,842),54098=>array(66,-64,936,842),54099=>array(66,-76,936,842),54100=>array(66,-62,936,842),54101=>array(66,-61,936,842),54102=>array(66,-70,936,842),54103=>array(66,-74,936,842),54104=>array(66,-69,936,842),54105=>array(66,-67,936,842),54106=>array(66,-72,936,842),54107=>array(66,-71,936,842),54108=>array(66,-66,936,842),54109=>array(66,-59,936,842),54110=>array(66,-60,936,842),54111=>array(66,-69,936,842),54112=>array(73,-69,907,842),54113=>array(83,-61,907,842),54114=>array(83,-61,907,842),54115=>array(83,-71,931,842),54116=>array(78,-46,907,842),54117=>array(83,-68,912,842),54118=>array(83,-76,907,842),54119=>array(83,-44,921,842),54120=>array(83,-62,917,842),54121=>array(83,-64,907,842),54122=>array(83,-64,908,842),54123=>array(83,-64,908,842),54124=>array(83,-69,923,842),54125=>array(83,-64,908,842),54126=>array(83,-64,908,842),54127=>array(83,-76,907,842),54128=>array(83,-62,907,842),54129=>array(83,-61,907,842),54130=>array(83,-69,922,842),54131=>array(83,-74,929,842),54132=>array(83,-69,927,842),54133=>array(83,-68,911,842),54134=>array(83,-72,929,842),54135=>array(83,-70,936,842),54136=>array(83,-66,908,842),54137=>array(83,-59,916,842),54138=>array(83,-60,928,842),54139=>array(83,-68,908,842),54140=>array(84,-70,907,841),54141=>array(66,-61,907,841),54142=>array(66,-61,907,841),54143=>array(66,-71,931,841),54144=>array(78,-46,907,841),54145=>array(66,-68,912,841),54146=>array(66,-76,907,841),54147=>array(66,-44,921,841),54148=>array(66,-62,917,841),54149=>array(66,-64,907,841),54150=>array(66,-64,908,841),54151=>array(66,-64,908,841),54152=>array(66,-69,923,841),54153=>array(66,-64,908,841),54154=>array(66,-64,908,841),54155=>array(66,-76,906,841),54156=>array(66,-62,907,841),54157=>array(66,-61,907,841),54158=>array(66,-69,922,841),54159=>array(66,-74,929,841),54160=>array(66,-69,927,841),54161=>array(66,-68,911,841),54162=>array(66,-72,929,841),54163=>array(66,-70,936,841),54164=>array(66,-66,908,841),54165=>array(66,-59,916,841),54166=>array(66,-60,928,841),54167=>array(66,-68,908,841),54168=>array(63,-68,907,843),54169=>array(65,-61,907,843),54170=>array(65,-61,907,843),54171=>array(65,-71,931,843),54172=>array(83,-46,907,843),54173=>array(65,-68,912,843),54174=>array(65,-76,907,843),54175=>array(65,-44,921,843),54176=>array(65,-62,917,843),54177=>array(65,-64,907,843),54178=>array(65,-64,908,843),54179=>array(65,-64,908,843),54180=>array(65,-69,923,843),54181=>array(65,-64,908,843),54182=>array(65,-64,908,843),54183=>array(65,-76,907,843),54184=>array(65,-62,907,843),54185=>array(65,-61,907,843),54186=>array(65,-69,922,843),54187=>array(65,-74,929,843),54188=>array(65,-69,927,843),54189=>array(65,-68,911,843),54190=>array(65,-72,929,843),54191=>array(65,-70,936,843),54192=>array(65,-66,908,843),54193=>array(65,-59,916,843),54194=>array(65,-60,928,843),54195=>array(65,-68,908,843),54196=>array(74,-70,907,842),54197=>array(56,-61,908,842),54198=>array(56,-61,908,842),54199=>array(56,-71,931,842),54200=>array(68,-46,907,842),54201=>array(56,-68,912,842),54202=>array(56,-76,908,842),54203=>array(56,-44,921,842),54204=>array(56,-62,917,842),54205=>array(56,-64,908,842),54206=>array(56,-64,908,842),54207=>array(56,-64,908,842),54208=>array(56,-69,923,842),54209=>array(56,-64,908,842),54210=>array(56,-64,908,842),54211=>array(56,-76,908,842),54212=>array(56,-62,908,842),54213=>array(56,-61,908,842),54214=>array(56,-69,922,842),54215=>array(56,-74,929,842),54216=>array(56,-69,927,842),54217=>array(56,-68,911,842),54218=>array(56,-72,929,842),54219=>array(56,-70,936,842),54220=>array(56,-66,908,842),54221=>array(56,-59,916,842),54222=>array(56,-60,928,842),54223=>array(56,-68,908,842),54224=>array(63,-68,907,843),54225=>array(65,-61,907,843),54226=>array(65,-61,907,843),54227=>array(65,-71,931,843),54228=>array(83,-46,907,843),54229=>array(65,-68,912,843),54230=>array(65,-76,907,843),54231=>array(65,-44,921,843),54232=>array(65,-62,917,843),54233=>array(65,-64,907,843),54234=>array(65,-64,908,843),54235=>array(65,-64,908,843),54236=>array(65,-69,923,843),54237=>array(65,-64,908,843),54238=>array(65,-64,908,843),54239=>array(65,-76,907,843),54240=>array(65,-62,907,843),54241=>array(65,-61,907,843),54242=>array(65,-69,922,843),54243=>array(65,-74,929,843),54244=>array(65,-69,927,843),54245=>array(65,-68,911,843),54246=>array(65,-72,929,843),54247=>array(65,-70,936,843),54248=>array(65,-66,908,843),54249=>array(65,-59,916,843),54250=>array(65,-60,928,843),54251=>array(65,-68,908,843),54252=>array(62,22,938,724),54253=>array(79,-61,921,799),54254=>array(79,-61,921,799),54255=>array(79,-71,921,799),54256=>array(79,-46,922,799),54257=>array(79,-68,921,799),54258=>array(79,-74,921,799),54259=>array(79,-44,921,799),54260=>array(79,-62,921,799),54261=>array(79,-64,921,799),54262=>array(79,-64,921,799),54263=>array(79,-63,921,799),54264=>array(79,-68,921,799),54265=>array(79,-64,921,799),54266=>array(79,-63,921,799),54267=>array(79,-74,921,799),54268=>array(79,-62,921,799),54269=>array(79,-61,921,799),54270=>array(79,-69,921,799),54271=>array(79,-74,921,799),54272=>array(79,-69,921,799),54273=>array(79,-68,921,799),54274=>array(79,-72,921,799),54275=>array(79,-70,921,799),54276=>array(79,-66,921,799),54277=>array(79,-59,921,799),54278=>array(79,-60,921,799),54279=>array(79,-68,921,799),54280=>array(68,-69,936,842),54281=>array(77,-59,936,842),54282=>array(77,-61,936,842),54283=>array(77,-71,936,842),54284=>array(77,-45,936,842),54285=>array(77,-69,936,842),54286=>array(77,-76,936,842),54287=>array(77,-44,936,842),54288=>array(77,-62,936,842),54289=>array(77,-64,936,842),54290=>array(77,-64,936,842),54291=>array(77,-64,936,842),54292=>array(77,-70,936,842),54293=>array(77,-64,936,842),54294=>array(77,-64,936,842),54295=>array(77,-76,936,842),54296=>array(77,-62,936,842),54297=>array(77,-61,936,842),54298=>array(77,-70,936,842),54299=>array(77,-74,936,842),54300=>array(77,-69,936,842),54301=>array(77,-67,936,842),54302=>array(77,-72,936,842),54303=>array(77,-71,936,842),54304=>array(77,-66,936,842),54305=>array(77,-59,936,842),54306=>array(77,-60,936,842),54307=>array(77,-69,936,842),54308=>array(59,-69,907,842),54309=>array(77,-61,907,842),54310=>array(77,-61,907,842),54311=>array(77,-71,931,842),54312=>array(67,-46,907,842),54313=>array(77,-68,912,842),54314=>array(77,-76,907,842),54315=>array(77,-44,921,842),54316=>array(77,-62,917,842),54317=>array(77,-64,907,842),54318=>array(77,-64,908,842),54319=>array(77,-64,908,842),54320=>array(77,-69,923,842),54321=>array(77,-64,908,842),54322=>array(77,-64,908,842),54323=>array(77,-76,907,842),54324=>array(77,-62,907,842),54325=>array(77,-61,907,842),54326=>array(77,-69,922,842),54327=>array(77,-74,929,842),54328=>array(77,-69,927,842),54329=>array(77,-68,911,842),54330=>array(77,-72,929,842),54331=>array(77,-70,936,842),54332=>array(77,-66,908,842),54333=>array(77,-59,916,842),54334=>array(77,-60,928,842),54335=>array(77,-68,908,842),54336=>array(53,-68,908,843),54337=>array(65,-61,907,842),54338=>array(65,-61,907,842),54339=>array(65,-71,931,842),54340=>array(65,-46,907,842),54341=>array(65,-68,912,842),54342=>array(65,-76,907,842),54343=>array(65,-44,921,842),54344=>array(65,-62,917,842),54345=>array(65,-64,907,842),54346=>array(65,-64,908,842),54347=>array(65,-64,908,842),54348=>array(65,-69,923,842),54349=>array(65,-64,908,842),54350=>array(65,-64,908,842),54351=>array(65,-76,907,842),54352=>array(65,-62,907,842),54353=>array(65,-61,907,842),54354=>array(65,-69,922,842),54355=>array(65,-74,929,842),54356=>array(65,-69,927,842),54357=>array(65,-68,911,842),54358=>array(65,-72,929,842),54359=>array(65,-70,936,842),54360=>array(65,-66,908,842),54361=>array(65,-59,916,842),54362=>array(65,-60,928,842),54363=>array(65,-68,908,842),54364=>array(60,17,940,739),54365=>array(79,-61,921,799),54366=>array(79,-61,921,799),54367=>array(79,-71,921,799),54368=>array(79,-46,921,799),54369=>array(79,-68,921,799),54370=>array(79,-74,921,799),54371=>array(79,-44,921,799),54372=>array(79,-62,921,799),54373=>array(79,-64,921,799),54374=>array(79,-64,921,799),54375=>array(79,-63,921,799),54376=>array(79,-68,921,799),54377=>array(79,-64,921,799),54378=>array(79,-63,921,799),54379=>array(79,-74,921,799),54380=>array(79,-62,921,799),54381=>array(79,-61,921,799),54382=>array(79,-69,921,799),54383=>array(79,-74,921,799),54384=>array(79,-69,921,799),54385=>array(79,-68,921,799),54386=>array(79,-72,921,799),54387=>array(79,-70,921,799),54388=>array(79,-66,921,799),54389=>array(79,-59,921,799),54390=>array(79,-60,921,799),54391=>array(79,-68,921,799),54392=>array(79,-64,921,794),54393=>array(79,-61,921,799),54394=>array(79,-61,921,799),54395=>array(79,-71,921,799),54396=>array(79,-46,921,799),54397=>array(79,-68,921,799),54398=>array(79,-74,921,799),54399=>array(79,-44,921,799),54400=>array(79,-62,921,799),54401=>array(79,-64,921,799),54402=>array(79,-64,921,799),54403=>array(79,-63,921,799),54404=>array(79,-68,921,799),54405=>array(79,-64,921,799),54406=>array(79,-63,921,799),54407=>array(79,-74,921,799),54408=>array(79,-62,921,799),54409=>array(79,-61,921,799),54410=>array(79,-69,921,799),54411=>array(79,-74,921,799),54412=>array(79,-69,921,799),54413=>array(79,-68,921,799),54414=>array(79,-72,921,799),54415=>array(79,-70,921,799),54416=>array(79,-66,921,799),54417=>array(79,-59,921,799),54418=>array(79,-60,921,799),54419=>array(79,-68,921,799),54420=>array(67,-65,882,841),54421=>array(72,-61,907,836),54422=>array(72,-61,907,836),54423=>array(72,-71,931,836),54424=>array(75,-46,907,841),54425=>array(72,-68,912,836),54426=>array(72,-76,907,836),54427=>array(72,-44,921,836),54428=>array(72,-62,917,836),54429=>array(72,-64,907,836),54430=>array(72,-64,908,836),54431=>array(72,-64,908,836),54432=>array(72,-69,923,836),54433=>array(72,-64,908,836),54434=>array(72,-64,908,836),54435=>array(72,-76,906,836),54436=>array(72,-62,907,836),54437=>array(72,-61,907,836),54438=>array(72,-69,922,836),54439=>array(72,-74,929,836),54440=>array(72,-69,927,836),54441=>array(72,-68,911,836),54442=>array(72,-72,929,836),54443=>array(72,-70,936,836),54444=>array(72,-66,908,836),54445=>array(72,-59,916,836),54446=>array(72,-60,928,836),54447=>array(72,-68,908,836),54448=>array(62,-63,912,843),54449=>array(70,-61,907,838),54450=>array(70,-61,907,838),54451=>array(70,-71,931,838),54452=>array(76,-46,907,843),54453=>array(70,-68,912,838),54454=>array(70,-76,907,838),54455=>array(70,-44,921,838),54456=>array(70,-62,917,838),54457=>array(70,-64,907,838),54458=>array(70,-64,908,838),54459=>array(70,-64,908,838),54460=>array(70,-69,923,838),54461=>array(70,-64,908,838),54462=>array(70,-64,908,838),54463=>array(70,-76,906,838),54464=>array(70,-62,907,838),54465=>array(70,-61,907,838),54466=>array(70,-69,922,838),54467=>array(70,-74,929,838),54468=>array(70,-69,927,838),54469=>array(70,-68,911,838),54470=>array(70,-72,929,838),54471=>array(70,-70,936,838),54472=>array(70,-66,908,838),54473=>array(70,-59,916,838),54474=>array(70,-60,928,838),54475=>array(70,-68,908,838),54476=>array(71,-69,907,842),54477=>array(65,-61,907,842),54478=>array(65,-61,907,842),54479=>array(65,-71,931,842),54480=>array(65,-46,907,842),54481=>array(65,-68,912,842),54482=>array(65,-76,907,842),54483=>array(65,-44,921,842),54484=>array(65,-62,917,842),54485=>array(65,-64,907,842),54486=>array(65,-64,908,842),54487=>array(65,-64,908,842),54488=>array(65,-69,923,842),54489=>array(65,-64,908,842),54490=>array(65,-64,908,842),54491=>array(65,-76,907,842),54492=>array(65,-62,907,842),54493=>array(65,-61,907,842),54494=>array(65,-69,922,842),54495=>array(65,-74,929,842),54496=>array(65,-69,927,842),54497=>array(65,-68,911,842),54498=>array(65,-72,929,842),54499=>array(65,-70,936,842),54500=>array(65,-66,908,842),54501=>array(65,-59,916,842),54502=>array(65,-60,928,842),54503=>array(65,-68,908,842),54504=>array(79,-64,921,794),54505=>array(79,-61,921,799),54506=>array(79,-61,921,799),54507=>array(79,-71,921,799),54508=>array(81,-46,922,799),54509=>array(79,-68,921,799),54510=>array(79,-74,921,799),54511=>array(79,-44,921,799),54512=>array(79,-62,921,799),54513=>array(79,-64,921,799),54514=>array(79,-64,921,799),54515=>array(79,-63,921,799),54516=>array(79,-68,921,799),54517=>array(79,-64,921,799),54518=>array(79,-63,921,799),54519=>array(79,-74,921,799),54520=>array(79,-62,921,799),54521=>array(79,-61,921,799),54522=>array(79,-69,921,799),54523=>array(79,-74,921,799),54524=>array(79,-69,921,799),54525=>array(79,-68,921,799),54526=>array(79,-72,921,799),54527=>array(79,-70,921,799),54528=>array(79,-66,921,799),54529=>array(79,-59,921,799),54530=>array(79,-60,921,799),54531=>array(79,-68,921,799),54532=>array(57,52,943,724),54533=>array(79,-61,922,799),54534=>array(79,-61,922,799),54535=>array(79,-71,922,799),54536=>array(79,-46,921,799),54537=>array(79,-68,922,799),54538=>array(79,-74,922,799),54539=>array(79,-44,922,799),54540=>array(79,-62,922,799),54541=>array(79,-64,922,799),54542=>array(79,-64,922,799),54543=>array(79,-63,922,799),54544=>array(79,-68,922,799),54545=>array(79,-64,922,799),54546=>array(79,-63,922,799),54547=>array(79,-74,922,799),54548=>array(79,-62,922,799),54549=>array(79,-61,922,799),54550=>array(79,-69,922,799),54551=>array(79,-74,922,799),54552=>array(79,-69,922,799),54553=>array(79,-68,922,799),54554=>array(79,-72,922,799),54555=>array(79,-70,922,799),54556=>array(79,-66,922,799),54557=>array(79,-59,922,799),54558=>array(79,-60,922,799),54559=>array(79,-68,922,799),54560=>array(67,-69,907,842),54561=>array(65,-61,907,842),54562=>array(65,-61,907,842),54563=>array(65,-71,931,842),54564=>array(65,-46,907,842),54565=>array(65,-68,912,842),54566=>array(65,-76,907,842),54567=>array(65,-44,921,842),54568=>array(65,-62,917,842),54569=>array(65,-64,907,842),54570=>array(65,-64,908,842),54571=>array(65,-64,908,842),54572=>array(65,-69,923,842),54573=>array(65,-64,908,842),54574=>array(65,-64,908,842),54575=>array(65,-76,907,842),54576=>array(65,-62,907,842),54577=>array(65,-61,907,842),54578=>array(65,-69,922,842),54579=>array(65,-74,929,842),54580=>array(65,-69,927,842),54581=>array(65,-68,911,842),54582=>array(65,-72,929,842),54583=>array(65,-70,936,842),54584=>array(65,-66,908,842),54585=>array(65,-59,916,842),54586=>array(65,-60,928,842),54587=>array(65,-68,908,842),54588=>array(85,-69,907,842),54589=>array(86,-61,907,842),54590=>array(86,-61,907,842),54591=>array(86,-71,931,842),54592=>array(86,-46,907,842),54593=>array(86,-68,912,842),54594=>array(86,-76,907,842),54595=>array(86,-44,921,842),54596=>array(86,-62,917,842),54597=>array(86,-64,907,842),54598=>array(86,-64,908,842),54599=>array(86,-64,908,842),54600=>array(86,-69,923,842),54601=>array(86,-64,908,842),54602=>array(86,-64,908,842),54603=>array(86,-76,907,842),54604=>array(86,-62,907,842),54605=>array(86,-61,907,842),54606=>array(86,-69,922,842),54607=>array(86,-74,929,842),54608=>array(86,-69,927,842),54609=>array(86,-68,911,842),54610=>array(86,-72,929,842),54611=>array(86,-70,936,842),54612=>array(86,-66,908,842),54613=>array(86,-59,916,842),54614=>array(86,-60,928,842),54615=>array(86,-68,908,842),54616=>array(94,-69,936,842),54617=>array(85,-59,936,842),54618=>array(85,-61,936,842),54619=>array(85,-71,936,842),54620=>array(85,-45,936,842),54621=>array(85,-69,936,842),54622=>array(85,-76,936,842),54623=>array(85,-44,936,842),54624=>array(85,-62,936,842),54625=>array(85,-64,936,842),54626=>array(85,-64,936,842),54627=>array(85,-64,936,842),54628=>array(85,-70,936,842),54629=>array(85,-64,936,842),54630=>array(85,-64,936,842),54631=>array(85,-76,936,842),54632=>array(85,-62,936,842),54633=>array(85,-61,936,842),54634=>array(85,-70,936,842),54635=>array(85,-74,936,842),54636=>array(85,-69,936,842),54637=>array(85,-67,936,842),54638=>array(85,-72,936,842),54639=>array(85,-71,936,842),54640=>array(85,-66,936,842),54641=>array(85,-59,936,842),54642=>array(85,-60,936,842),54643=>array(85,-69,936,842),54644=>array(79,-69,907,842),54645=>array(85,-61,907,842),54646=>array(85,-61,907,842),54647=>array(85,-71,931,842),54648=>array(85,-46,907,842),54649=>array(85,-68,912,842),54650=>array(85,-76,907,842),54651=>array(85,-44,921,842),54652=>array(85,-62,917,842),54653=>array(85,-64,907,842),54654=>array(85,-64,908,842),54655=>array(85,-64,908,842),54656=>array(85,-69,923,842),54657=>array(85,-64,908,842),54658=>array(85,-64,908,842),54659=>array(85,-76,907,842),54660=>array(85,-62,907,842),54661=>array(85,-61,907,842),54662=>array(85,-69,922,842),54663=>array(85,-74,929,842),54664=>array(85,-69,927,842),54665=>array(85,-68,911,842),54666=>array(85,-72,929,842),54667=>array(85,-70,936,842),54668=>array(85,-66,908,842),54669=>array(85,-59,916,842),54670=>array(85,-60,928,842),54671=>array(85,-68,908,842),54672=>array(94,-68,935,843),54673=>array(85,-59,936,842),54674=>array(85,-61,936,842),54675=>array(85,-71,936,842),54676=>array(85,-45,936,842),54677=>array(85,-69,936,842),54678=>array(85,-76,936,842),54679=>array(85,-44,936,842),54680=>array(85,-62,936,842),54681=>array(85,-64,936,842),54682=>array(85,-64,936,842),54683=>array(85,-64,936,842),54684=>array(85,-70,936,842),54685=>array(85,-64,936,842),54686=>array(85,-64,936,842),54687=>array(85,-76,936,842),54688=>array(85,-62,936,842),54689=>array(85,-61,936,842),54690=>array(85,-70,936,842),54691=>array(85,-74,936,842),54692=>array(85,-69,936,842),54693=>array(85,-67,936,842),54694=>array(85,-72,936,842),54695=>array(85,-71,936,842),54696=>array(85,-66,936,842),54697=>array(85,-59,936,842),54698=>array(85,-60,936,842),54699=>array(85,-69,936,842),54700=>array(79,-69,907,842),54701=>array(85,-61,907,842),54702=>array(85,-61,907,842),54703=>array(85,-71,931,842),54704=>array(85,-46,907,842),54705=>array(85,-68,912,842),54706=>array(85,-76,907,842),54707=>array(85,-44,921,842),54708=>array(85,-62,917,842),54709=>array(85,-64,907,842),54710=>array(85,-64,908,842),54711=>array(85,-64,908,842),54712=>array(85,-69,923,842),54713=>array(85,-64,908,842),54714=>array(85,-64,908,842),54715=>array(85,-76,907,842),54716=>array(85,-62,907,842),54717=>array(85,-61,907,842),54718=>array(85,-69,922,842),54719=>array(85,-74,929,842),54720=>array(85,-69,927,842),54721=>array(85,-68,911,842),54722=>array(85,-72,929,842),54723=>array(85,-70,936,842),54724=>array(85,-66,908,842),54725=>array(85,-59,916,842),54726=>array(85,-60,928,842),54727=>array(85,-68,908,842),54728=>array(79,-70,907,841),54729=>array(85,-61,907,842),54730=>array(85,-61,907,842),54731=>array(85,-71,931,842),54732=>array(85,-46,907,841),54733=>array(85,-68,912,842),54734=>array(85,-76,907,842),54735=>array(85,-44,921,842),54736=>array(85,-62,917,842),54737=>array(85,-64,907,842),54738=>array(85,-64,908,842),54739=>array(85,-64,908,842),54740=>array(85,-69,923,842),54741=>array(85,-64,908,842),54742=>array(85,-64,908,842),54743=>array(85,-76,906,842),54744=>array(85,-62,907,842),54745=>array(85,-61,907,842),54746=>array(85,-69,922,842),54747=>array(85,-74,929,842),54748=>array(85,-69,927,842),54749=>array(85,-68,911,842),54750=>array(85,-72,929,842),54751=>array(85,-70,936,842),54752=>array(85,-66,908,842),54753=>array(85,-59,916,842),54754=>array(85,-60,928,842),54755=>array(85,-68,908,842),54756=>array(69,-68,907,843),54757=>array(50,-61,907,843),54758=>array(50,-61,907,843),54759=>array(50,-71,931,843),54760=>array(60,-46,907,843),54761=>array(50,-68,912,843),54762=>array(50,-76,907,843),54763=>array(50,-44,921,843),54764=>array(50,-62,917,843),54765=>array(50,-64,907,843),54766=>array(50,-64,908,843),54767=>array(50,-64,908,843),54768=>array(50,-69,923,843),54769=>array(50,-64,908,843),54770=>array(50,-64,908,843),54771=>array(50,-76,907,843),54772=>array(50,-62,907,843),54773=>array(50,-61,907,843),54774=>array(50,-69,922,843),54775=>array(50,-74,929,843),54776=>array(50,-69,927,843),54777=>array(50,-68,911,843),54778=>array(50,-72,929,843),54779=>array(50,-70,936,843),54780=>array(50,-66,908,843),54781=>array(50,-59,916,843),54782=>array(50,-60,928,843),54783=>array(50,-68,908,843),54784=>array(89,-70,907,842),54785=>array(75,-61,907,842),54786=>array(75,-61,907,842),54787=>array(75,-71,931,842),54788=>array(85,-46,907,842),54789=>array(75,-68,912,842),54790=>array(75,-76,907,842),54791=>array(75,-44,921,842),54792=>array(75,-62,917,842),54793=>array(75,-64,907,842),54794=>array(75,-64,908,842),54795=>array(75,-64,908,842),54796=>array(75,-69,923,842),54797=>array(75,-64,908,842),54798=>array(75,-64,908,842),54799=>array(75,-76,907,842),54800=>array(75,-62,907,842),54801=>array(75,-61,907,842),54802=>array(75,-69,922,842),54803=>array(75,-74,929,842),54804=>array(75,-69,927,842),54805=>array(75,-68,911,842),54806=>array(75,-72,929,842),54807=>array(75,-70,936,842),54808=>array(75,-66,908,842),54809=>array(75,-59,916,842),54810=>array(75,-60,928,842),54811=>array(75,-68,908,842),54812=>array(49,-68,907,843),54813=>array(50,-61,907,843),54814=>array(50,-61,907,843),54815=>array(50,-71,931,843),54816=>array(50,-46,907,843),54817=>array(50,-68,912,843),54818=>array(50,-76,907,843),54819=>array(50,-44,921,843),54820=>array(50,-62,917,843),54821=>array(50,-64,907,843),54822=>array(50,-64,908,843),54823=>array(50,-64,908,843),54824=>array(50,-69,923,843),54825=>array(50,-64,908,843),54826=>array(50,-64,908,843),54827=>array(50,-76,907,843),54828=>array(50,-62,907,843),54829=>array(50,-61,907,843),54830=>array(50,-69,922,843),54831=>array(50,-74,929,843),54832=>array(50,-69,927,843),54833=>array(50,-68,911,843),54834=>array(50,-72,929,843),54835=>array(50,-70,936,843),54836=>array(50,-66,908,843),54837=>array(50,-59,916,843),54838=>array(50,-60,928,843),54839=>array(50,-68,908,843),54840=>array(62,7,938,764),54841=>array(79,-61,921,819),54842=>array(79,-61,921,819),54843=>array(79,-71,921,819),54844=>array(79,-46,922,819),54845=>array(79,-68,921,819),54846=>array(79,-74,921,819),54847=>array(79,-44,921,819),54848=>array(79,-62,921,819),54849=>array(79,-64,921,819),54850=>array(79,-64,921,819),54851=>array(79,-63,921,819),54852=>array(79,-68,921,819),54853=>array(79,-64,921,819),54854=>array(79,-63,921,819),54855=>array(79,-74,921,819),54856=>array(79,-62,921,819),54857=>array(79,-61,921,819),54858=>array(79,-69,921,819),54859=>array(79,-74,921,819),54860=>array(79,-69,921,819),54861=>array(79,-68,921,819),54862=>array(79,-72,921,819),54863=>array(79,-70,921,819),54864=>array(79,-66,921,819),54865=>array(79,-59,921,819),54866=>array(79,-60,921,819),54867=>array(79,-68,921,819),54868=>array(68,-69,936,842),54869=>array(77,-59,936,842),54870=>array(77,-61,936,842),54871=>array(77,-71,936,842),54872=>array(72,-45,936,842),54873=>array(77,-69,936,842),54874=>array(77,-76,936,842),54875=>array(77,-44,936,842),54876=>array(77,-62,936,842),54877=>array(77,-64,936,842),54878=>array(77,-64,936,842),54879=>array(77,-64,936,842),54880=>array(77,-70,936,842),54881=>array(77,-64,936,842),54882=>array(77,-64,936,842),54883=>array(77,-76,936,842),54884=>array(77,-62,936,842),54885=>array(77,-61,936,842),54886=>array(77,-70,936,842),54887=>array(77,-74,936,842),54888=>array(77,-69,936,842),54889=>array(77,-67,936,842),54890=>array(77,-72,936,842),54891=>array(77,-71,936,842),54892=>array(77,-66,936,842),54893=>array(77,-59,936,842),54894=>array(77,-60,936,842),54895=>array(77,-69,936,842),54896=>array(61,-69,907,842),54897=>array(77,-61,907,842),54898=>array(77,-61,907,842),54899=>array(77,-71,931,842),54900=>array(72,-46,907,842),54901=>array(77,-68,912,842),54902=>array(77,-76,907,842),54903=>array(77,-44,921,842),54904=>array(77,-62,917,842),54905=>array(77,-64,907,842),54906=>array(77,-64,908,842),54907=>array(77,-64,908,842),54908=>array(77,-69,923,842),54909=>array(77,-64,908,842),54910=>array(77,-64,908,842),54911=>array(77,-76,907,842),54912=>array(77,-62,907,842),54913=>array(77,-61,907,842),54914=>array(77,-69,922,842),54915=>array(77,-74,929,842),54916=>array(77,-69,927,842),54917=>array(77,-68,911,842),54918=>array(77,-72,929,842),54919=>array(77,-70,936,842),54920=>array(77,-66,908,842),54921=>array(77,-59,916,842),54922=>array(77,-60,928,842),54923=>array(77,-68,908,842),54924=>array(74,-69,907,842),54925=>array(65,-61,907,842),54926=>array(65,-61,907,842),54927=>array(65,-71,931,842),54928=>array(65,-46,907,842),54929=>array(65,-68,912,842),54930=>array(65,-76,907,842),54931=>array(65,-44,921,842),54932=>array(65,-62,917,842),54933=>array(65,-64,907,842),54934=>array(65,-64,908,842),54935=>array(65,-64,908,842),54936=>array(65,-69,923,842),54937=>array(65,-64,908,842),54938=>array(65,-64,908,842),54939=>array(65,-76,907,842),54940=>array(65,-62,907,842),54941=>array(65,-61,907,842),54942=>array(65,-69,922,842),54943=>array(65,-74,929,842),54944=>array(65,-69,927,842),54945=>array(65,-68,911,842),54946=>array(65,-72,929,842),54947=>array(65,-70,936,842),54948=>array(65,-66,908,842),54949=>array(65,-59,916,842),54950=>array(65,-60,928,842),54951=>array(65,-68,908,842),54952=>array(62,7,938,764),54953=>array(79,-61,921,819),54954=>array(79,-61,921,819),54955=>array(79,-71,921,819),54956=>array(79,-46,921,819),54957=>array(79,-68,921,819),54958=>array(79,-74,921,819),54959=>array(79,-44,921,819),54960=>array(79,-62,921,819),54961=>array(79,-64,921,819),54962=>array(79,-64,921,819),54963=>array(79,-63,921,819),54964=>array(79,-68,921,819),54965=>array(79,-64,921,819),54966=>array(79,-63,921,819),54967=>array(79,-74,921,819),54968=>array(79,-62,921,819),54969=>array(79,-61,921,819),54970=>array(79,-69,921,819),54971=>array(79,-74,921,819),54972=>array(79,-69,921,819),54973=>array(79,-68,921,819),54974=>array(79,-72,921,819),54975=>array(79,-70,921,819),54976=>array(79,-66,921,819),54977=>array(79,-59,921,819),54978=>array(79,-60,921,819),54979=>array(79,-68,921,819),54980=>array(79,-64,921,809),54981=>array(79,-61,921,819),54982=>array(79,-61,921,819),54983=>array(79,-71,921,819),54984=>array(79,-46,921,814),54985=>array(79,-68,921,819),54986=>array(79,-74,921,819),54987=>array(79,-44,921,819),54988=>array(79,-62,921,819),54989=>array(79,-64,921,819),54990=>array(79,-64,921,819),54991=>array(79,-63,921,819),54992=>array(79,-68,921,819),54993=>array(79,-64,921,819),54994=>array(79,-63,921,819),54995=>array(79,-74,921,819),54996=>array(79,-62,921,819),54997=>array(79,-61,921,819),54998=>array(79,-69,921,819),54999=>array(79,-74,921,819),55000=>array(79,-69,921,819),55001=>array(79,-68,921,819),55002=>array(79,-72,921,819),55003=>array(79,-70,921,819),55004=>array(79,-66,921,819),55005=>array(79,-59,921,819),55006=>array(79,-60,921,819),55007=>array(79,-68,921,819),55008=>array(70,-70,907,841),55009=>array(75,-61,909,843),55010=>array(75,-61,909,843),55011=>array(75,-71,931,843),55012=>array(76,-46,909,843),55013=>array(75,-68,912,843),55014=>array(75,-76,909,843),55015=>array(75,-44,921,843),55016=>array(75,-62,917,843),55017=>array(75,-64,909,843),55018=>array(75,-64,909,843),55019=>array(75,-64,909,843),55020=>array(75,-69,923,843),55021=>array(75,-64,909,843),55022=>array(75,-64,909,843),55023=>array(75,-76,909,843),55024=>array(75,-62,909,843),55025=>array(75,-61,909,843),55026=>array(75,-69,922,843),55027=>array(75,-74,929,843),55028=>array(75,-69,927,843),55029=>array(75,-68,911,843),55030=>array(75,-72,929,843),55031=>array(75,-70,936,843),55032=>array(75,-66,909,843),55033=>array(75,-59,916,843),55034=>array(75,-60,928,843),55035=>array(75,-68,909,843),55036=>array(63,-68,907,843),55037=>array(70,-61,907,843),55038=>array(70,-61,907,843),55039=>array(70,-71,931,843),55040=>array(76,-46,907,843),55041=>array(70,-68,912,843),55042=>array(70,-76,907,843),55043=>array(70,-44,921,843),55044=>array(70,-62,917,843),55045=>array(70,-64,907,843),55046=>array(70,-64,908,843),55047=>array(70,-64,908,843),55048=>array(70,-69,923,843),55049=>array(70,-64,908,843),55050=>array(70,-64,908,843),55051=>array(70,-76,907,843),55052=>array(70,-62,907,843),55053=>array(70,-61,907,843),55054=>array(70,-69,922,843),55055=>array(70,-74,929,843),55056=>array(70,-69,927,843),55057=>array(70,-68,911,843),55058=>array(70,-72,929,843),55059=>array(70,-70,936,843),55060=>array(70,-66,908,843),55061=>array(70,-59,916,843),55062=>array(70,-60,928,843),55063=>array(70,-68,908,843),55064=>array(70,-69,907,842),55065=>array(65,-61,907,842),55066=>array(65,-61,907,842),55067=>array(65,-71,931,842),55068=>array(65,-46,907,842),55069=>array(65,-68,912,842),55070=>array(65,-76,907,842),55071=>array(65,-44,921,842),55072=>array(65,-62,917,842),55073=>array(65,-64,907,842),55074=>array(65,-64,908,842),55075=>array(65,-64,908,842),55076=>array(65,-69,923,842),55077=>array(65,-64,908,842),55078=>array(65,-64,908,842),55079=>array(65,-76,907,842),55080=>array(65,-62,907,842),55081=>array(65,-61,907,842),55082=>array(65,-69,922,842),55083=>array(65,-74,929,842),55084=>array(65,-69,927,842),55085=>array(65,-68,911,842),55086=>array(65,-72,929,842),55087=>array(65,-70,936,842),55088=>array(65,-66,908,842),55089=>array(65,-59,916,842),55090=>array(65,-60,928,842),55091=>array(65,-68,908,842),55092=>array(87,-64,928,799),55093=>array(79,-61,921,819),55094=>array(79,-61,921,819),55095=>array(79,-71,921,819),55096=>array(79,-46,921,814),55097=>array(79,-68,921,819),55098=>array(79,-74,921,819),55099=>array(79,-44,921,819),55100=>array(79,-62,921,819),55101=>array(79,-64,921,819),55102=>array(79,-64,921,819),55103=>array(79,-63,921,819),55104=>array(79,-68,921,819),55105=>array(79,-64,921,819),55106=>array(79,-63,921,819),55107=>array(79,-74,921,819),55108=>array(79,-62,921,819),55109=>array(79,-61,921,819),55110=>array(79,-69,921,819),55111=>array(79,-74,921,819),55112=>array(79,-69,921,819),55113=>array(79,-68,921,819),55114=>array(79,-72,921,819),55115=>array(79,-70,921,819),55116=>array(79,-66,921,819),55117=>array(79,-59,921,819),55118=>array(79,-60,921,819),55119=>array(79,-68,921,819),55120=>array(52,42,948,744),55121=>array(79,-61,921,819),55122=>array(79,-61,921,819),55123=>array(79,-71,921,819),55124=>array(79,-46,921,815),55125=>array(79,-68,921,819),55126=>array(79,-74,921,819),55127=>array(79,-44,921,819),55128=>array(79,-62,921,819),55129=>array(79,-64,921,819),55130=>array(79,-64,921,819),55131=>array(79,-63,921,819),55132=>array(79,-68,921,819),55133=>array(79,-64,921,819),55134=>array(79,-63,921,819),55135=>array(79,-74,921,819),55136=>array(79,-62,921,819),55137=>array(79,-61,921,819),55138=>array(79,-69,921,819),55139=>array(79,-74,921,819),55140=>array(79,-69,921,819),55141=>array(79,-68,921,819),55142=>array(79,-72,921,819),55143=>array(79,-70,921,819),55144=>array(79,-66,921,819),55145=>array(79,-59,921,819),55146=>array(79,-60,921,819),55147=>array(79,-68,921,819),55148=>array(67,-69,907,842),55149=>array(65,-61,907,842),55150=>array(65,-61,907,842),55151=>array(65,-71,931,842),55152=>array(65,-46,907,842),55153=>array(65,-68,912,842),55154=>array(65,-76,907,842),55155=>array(65,-44,921,842),55156=>array(65,-62,917,842),55157=>array(65,-64,907,842),55158=>array(65,-64,908,842),55159=>array(65,-64,908,842),55160=>array(65,-69,923,842),55161=>array(65,-64,908,842),55162=>array(65,-64,908,842),55163=>array(65,-76,907,842),55164=>array(65,-62,907,842),55165=>array(65,-61,907,842),55166=>array(65,-69,922,842),55167=>array(65,-74,929,842),55168=>array(65,-69,927,842),55169=>array(65,-68,911,842),55170=>array(65,-72,929,842),55171=>array(65,-70,936,842),55172=>array(65,-66,908,842),55173=>array(65,-59,916,842),55174=>array(65,-60,928,842),55175=>array(65,-68,908,842),55176=>array(84,-69,907,842),55177=>array(101,-61,907,842),55178=>array(101,-61,907,842),55179=>array(101,-71,931,842),55180=>array(96,-46,907,842),55181=>array(101,-68,912,842),55182=>array(101,-76,907,842),55183=>array(101,-44,921,842),55184=>array(101,-62,917,842),55185=>array(101,-64,907,842),55186=>array(101,-64,908,842),55187=>array(101,-64,908,842),55188=>array(101,-69,923,842),55189=>array(101,-64,908,842),55190=>array(101,-64,908,842),55191=>array(101,-76,907,842),55192=>array(101,-62,907,842),55193=>array(101,-61,907,842),55194=>array(101,-69,922,842),55195=>array(101,-74,929,842),55196=>array(101,-69,927,842),55197=>array(101,-68,911,842),55198=>array(101,-72,929,842),55199=>array(101,-70,936,842),55200=>array(101,-66,908,842),55201=>array(101,-59,916,842),55202=>array(101,-60,928,842),55203=>array(101,-68,908,842),59393=>array(-54,0,248,634),59394=>array(20,-199,439,530),59395=>array(20,-199,439,530),59396=>array(-70,-12,436,716),59397=>array(-70,-12,436,716),59416=>array(7,637,299,1065),59492=>array(32,0,450,576),59495=>array(32,-1,452,577),59536=>array(38,0,459,770),59557=>array(-1,-221,404,556),59558=>array(-1,-221,481,393),59559=>array(62,-221,904,393),61441=>array(14,0,432,728),61442=>array(14,0,430,728),63232=>array(54,-5,477,560),63233=>array(-601,612,-216,775),63234=>array(-601,612,-216,800),63235=>array(-601,612,-171,800),63236=>array(-601,612,-216,800),63237=>array(-341,612,-283,785),63238=>array(-467,612,-173,819),63239=>array(-620,612,-180,810),63240=>array(-399,612,-226,785),63241=>array(-504,615,-192,832),63242=>array(-167,612,-109,785),63243=>array(-293,612,1,819),63244=>array(-342,612,98,810),63245=>array(-225,612,-52,785),63246=>array(-330,615,-18,832),63247=>array(54,-5,774,558),63248=>array(-563,631,-189,824),63249=>array(-422,609,-265,767),63250=>array(-623,603,-246,849),63251=>array(-274,858,-216,1031),63252=>array(-400,858,-106,1065),63253=>array(-449,858,-9,1056),63254=>array(-333,858,-159,1031),63255=>array(-437,861,-125,1078),63256=>array(-201,-206,-85,-34),63257=>array(-337,-206,-89,-34),63258=>array(-157,-115,-75,-33),63260=>array(111,-210,291,-73),63261=>array(17,-113,269,0),63744=>array(62,-12,931,835),63745=>array(48,-72,962,777),63746=>array(63,-71,935,832),63747=>array(66,-79,948,785),63748=>array(49,-62,926,811),63749=>array(123,-68,886,832),63750=>array(65,-51,902,840),63751=>array(37,-41,967,846),63752=>array(37,-41,967,846),63753=>array(43,-70,957,830),63754=>array(54,-21,960,856),63755=>array(112,-67,904,831),63756=>array(62,-62,960,848),63757=>array(32,-72,970,845),63758=>array(42,-67,985,854),63759=>array(38,-67,950,807),63760=>array(61,-80,954,835),63761=>array(33,-73,961,835),63762=>array(40,-71,973,822),63763=>array(52,-51,966,820),63764=>array(60,-64,959,847),63765=>array(57,-72,959,842),63766=>array(48,-75,968,839),63767=>array(45,-66,972,840),63768=>array(56,-68,970,835),63769=>array(51,-67,967,840),63770=>array(64,-62,972,839),63771=>array(49,-68,962,843),63772=>array(59,-71,883,815),63773=>array(35,-65,909,836),63774=>array(53,-70,923,830),63775=>array(72,-70,928,839),63776=>array(62,-67,958,846),63777=>array(59,-49,964,846),63778=>array(50,-73,964,837),63779=>array(56,-34,949,839),63780=>array(35,-68,952,836),63781=>array(49,-64,947,829),63782=>array(40,-65,956,848),63783=>array(47,-76,968,842),63784=>array(46,-60,949,837),63785=>array(49,-74,885,832),63786=>array(62,-63,962,829),63787=>array(37,-75,968,831),63788=>array(51,-65,930,832),63789=>array(63,-64,956,835),63790=>array(54,-71,966,849),63791=>array(52,-73,919,832),63792=>array(43,-67,954,835),63793=>array(30,-61,974,849),63794=>array(43,-71,954,830),63795=>array(40,-78,941,833),63796=>array(38,-39,923,832),63797=>array(59,-66,961,836),63798=>array(45,-77,929,841),63799=>array(29,-67,968,838),63800=>array(70,-62,965,817),63801=>array(51,-68,947,837),63802=>array(62,-67,948,849),63803=>array(36,-64,952,818),63804=>array(57,-69,958,840),63805=>array(34,-67,974,839),63806=>array(65,-52,935,840),63807=>array(57,-64,968,841),63808=>array(57,-67,949,829),63809=>array(55,-63,973,849),63810=>array(57,-24,950,849),63811=>array(48,-65,934,785),63812=>array(49,-62,964,855),63813=>array(43,-71,962,840),63814=>array(56,-65,944,833),63815=>array(52,-68,944,788),63816=>array(57,-63,976,839),63817=>array(105,-67,914,786),63818=>array(59,-28,949,783),63819=>array(46,-82,939,823),63820=>array(39,-70,949,831),63821=>array(48,-66,982,843),63822=>array(46,-67,956,800),63823=>array(51,-63,943,808),63824=>array(34,-65,942,839),63825=>array(99,-82,936,792),63826=>array(72,-65,917,829),63827=>array(68,-70,898,834),63828=>array(55,-65,973,833),63829=>array(41,-70,959,831),63830=>array(33,-57,967,835),63831=>array(34,-66,968,839),63832=>array(46,-65,954,831),63833=>array(95,-67,970,831),63834=>array(59,-66,961,841),63835=>array(60,-58,974,851),63836=>array(60,-64,959,847),63837=>array(53,-65,949,836),63838=>array(74,-73,939,777),63839=>array(69,-55,923,850),63840=>array(49,-25,959,830),63841=>array(72,-69,928,840),63842=>array(72,-74,926,784),63843=>array(45,-54,948,792),63844=>array(30,-55,956,850),63845=>array(42,-73,947,834),63846=>array(44,-67,970,843),63847=>array(71,-65,928,769),63848=>array(42,-32,972,829),63849=>array(60,-70,959,833),63850=>array(65,-69,946,835),63851=>array(30,-88,968,844),63852=>array(48,-30,949,830),63853=>array(53,-70,939,829),63854=>array(49,-70,965,839),63855=>array(57,-71,964,816),63856=>array(51,-72,967,824),63857=>array(57,-63,963,785),63858=>array(56,-73,946,824),63859=>array(45,-63,961,848),63860=>array(72,-65,931,827),63861=>array(41,-71,955,826),63862=>array(110,-66,962,839),63863=>array(65,-68,950,838),63864=>array(60,-68,953,783),63865=>array(63,-63,961,830),63866=>array(53,-68,956,808),63867=>array(40,-72,954,818),63868=>array(85,-61,963,820),63869=>array(53,-60,960,830),63870=>array(53,-30,947,789),63871=>array(27,-76,929,825),63872=>array(180,-77,840,772),63873=>array(86,-53,911,836),63874=>array(22,-62,961,846),63875=>array(33,-67,969,839),63876=>array(43,-71,967,841),63877=>array(32,-63,962,799),63878=>array(117,-65,907,790),63879=>array(26,-73,964,789),63880=>array(43,-67,952,814),63881=>array(49,-68,946,832),63882=>array(70,-56,863,824),63883=>array(37,-62,947,796),63884=>array(41,-67,930,779),63885=>array(50,-65,970,831),63886=>array(86,-68,917,841),63887=>array(36,-76,958,832),63888=>array(42,-54,961,841),63889=>array(37,-60,970,849),63890=>array(37,-56,963,833),63891=>array(52,-67,962,830),63892=>array(41,-64,962,833),63893=>array(47,-69,968,834),63894=>array(34,-66,967,839),63895=>array(42,-65,946,842),63896=>array(48,-62,944,831),63897=>array(37,-56,951,839),63898=>array(37,-56,951,830),63899=>array(18,-53,969,847),63900=>array(83,-76,901,832),63901=>array(67,-63,942,838),63902=>array(103,-64,898,785),63903=>array(58,-61,954,831),63904=>array(44,-73,955,828),63905=>array(57,-71,964,816),63906=>array(40,-59,966,839),63907=>array(30,-58,963,846),63908=>array(27,-64,961,853),63909=>array(40,-67,977,854),63910=>array(31,-53,963,854),63911=>array(36,-74,971,842),63912=>array(38,-67,961,846),63913=>array(105,-64,897,788),63914=>array(80,-68,917,844),63915=>array(40,-73,961,832),63916=>array(39,-68,962,840),63917=>array(37,-68,964,840),63918=>array(69,-19,935,839),63919=>array(22,-68,960,847),63920=>array(28,-62,966,854),63921=>array(35,-65,975,846),63922=>array(43,-63,961,810),63923=>array(74,-28,929,779),63924=>array(42,-68,955,839),63925=>array(41,-63,911,845),63926=>array(60,-69,952,833),63927=>array(51,-57,952,829),63928=>array(132,-64,882,789),63929=>array(62,-25,962,783),63930=>array(172,-41,829,773),63931=>array(41,-64,983,842),63932=>array(41,-64,970,838),63933=>array(52,-74,951,779),63934=>array(38,-68,956,836),63935=>array(60,-64,959,847),63936=>array(41,-73,969,850),63937=>array(46,-65,964,830),63938=>array(26,-76,972,829),63939=>array(37,-56,968,838),63940=>array(50,-66,970,833),63941=>array(57,-62,950,798),63942=>array(98,-68,935,788),63943=>array(44,-64,911,837),63944=>array(39,-61,959,832),63945=>array(34,-61,921,837),63946=>array(40,-70,964,830),63947=>array(45,-66,925,830),63948=>array(30,-70,960,830),63949=>array(75,-68,897,818),63950=>array(26,-70,964,830),63951=>array(34,-64,956,839),63952=>array(38,-67,960,828),63953=>array(62,-29,946,810),63954=>array(39,-77,962,835),63955=>array(103,-58,951,833),63956=>array(31,-71,976,855),63957=>array(33,-61,979,841),63958=>array(39,-58,991,856),63959=>array(52,-71,971,868),63960=>array(36,-67,954,830),63961=>array(38,-59,976,835),63962=>array(60,-65,957,788),63963=>array(72,-69,928,840),63964=>array(93,-60,959,848),63965=>array(57,-67,920,826),63966=>array(71,-76,947,824),63967=>array(29,-68,953,786),63968=>array(75,-67,866,782),63969=>array(51,-70,960,831),63970=>array(41,-68,950,823),63971=>array(56,-64,957,821),63972=>array(35,-16,945,775),63973=>array(46,-69,944,835),63974=>array(39,-64,949,788),63975=>array(43,-75,955,840),63976=>array(41,-64,954,821),63977=>array(52,-19,948,796),63978=>array(64,-73,957,834),63979=>array(118,-68,939,800),63980=>array(54,-60,927,803),63981=>array(52,-74,958,822),63982=>array(49,-68,958,833),63983=>array(57,-66,959,837),63984=>array(57,-65,949,832),63985=>array(100,-70,956,834),63986=>array(31,-68,959,843),63987=>array(26,-68,959,838),63988=>array(30,-69,954,829),63989=>array(28,-63,968,841),63990=>array(120,-65,932,841),63991=>array(95,-3,912,822),63992=>array(52,-17,945,838),63993=>array(37,-64,949,837),63994=>array(40,-69,951,818),63995=>array(57,-73,960,840),63996=>array(51,-68,959,833),63997=>array(48,-68,950,829),63998=>array(41,-68,968,831),63999=>array(71,-65,906,831),64000=>array(44,-73,897,797),64001=>array(46,-68,950,826),64002=>array(53,-63,936,826),64003=>array(42,-69,952,827),64004=>array(70,-38,942,833),64005=>array(48,-55,898,819),64006=>array(47,-65,953,815),64007=>array(46,-74,941,827),64008=>array(51,-62,941,845),64009=>array(101,-68,955,846),64010=>array(58,-66,944,789),64011=>array(35,-65,942,837),64012=>array(49,-55,942,754),64013=>array(57,-70,964,827),64014=>array(45,-62,955,843),64015=>array(41,-65,969,830),64016=>array(41,-60,968,807),64017=>array(77,-62,953,828),64018=>array(89,-55,952,838),64019=>array(37,-71,948,828),64020=>array(37,-67,976,831),64021=>array(31,-69,973,831),64022=>array(49,-56,921,836),64023=>array(45,-22,947,840),64024=>array(42,-59,961,820),64025=>array(55,-67,904,837),64026=>array(39,-68,956,843),64027=>array(38,-69,943,834),64028=>array(41,-66,952,840),64029=>array(45,-66,954,837),64030=>array(73,-50,892,785),64031=>array(30,-68,935,839),64032=>array(40,-68,969,832),64033=>array(39,-19,946,826),64034=>array(59,-66,948,835),64035=>array(31,-69,953,829),64036=>array(37,-60,961,808),64037=>array(36,-54,957,835),64038=>array(44,-67,943,835),64039=>array(33,-70,949,839),64040=>array(33,-64,959,839),64041=>array(94,-71,936,842),64042=>array(34,-69,964,839),64043=>array(34,-68,906,839),64044=>array(34,-64,931,839),64045=>array(40,-65,938,837),64256=>array(13,0,569,728),64257=>array(14,0,432,728),64258=>array(14,0,430,728),64259=>array(42,0,709,728),64260=>array(13,0,680,728),64261=>array(67,-7,521,728),64262=>array(31,-12,750,700),64275=>array(44,-9,751,618),64276=>array(44,-8,749,609),64277=>array(44,-210,752,609),64278=>array(43,-210,749,609),64279=>array(44,-210,844,609),64286=>array(22,568,311,695),64287=>array(16,162,522,530),64288=>array(32,-12,503,518),64289=>array(58,0,652,518),64290=>array(24,0,619,518),64291=>array(72,0,662,530),64292=>array(38,-12,598,530),64293=>array(33,-12,557,716),64294=>array(72,0,662,518),64295=>array(20,0,565,530),64296=>array(19,-13,726,530),64297=>array(55,0,529,278),64298=>array(72,-12,674,634),64299=>array(72,-12,674,634),64300=>array(72,-12,674,634),64301=>array(72,-12,674,634),64302=>array(60,-104,517,518),64303=>array(60,-144,517,518),64304=>array(60,0,517,518),64305=>array(38,0,533,530),64306=>array(20,0,386,530),64307=>array(24,0,482,518),64308=>array(72,0,526,530),64309=>array(16,0,248,530),64310=>array(-9,0,306,543),64312=>array(68,-12,532,530),64313=>array(16,258,248,530),64314=>array(20,-199,439,530),64315=>array(38,-12,469,530),64316=>array(33,-12,436,716),64318=>array(30,0,526,530),64320=>array(38,0,270,530),64321=>array(25,-12,546,530),64323=>array(45,-199,499,530),64324=>array(37,-12,511,530),64326=>array(45,0,477,518),64327=>array(72,-199,535,518),64328=>array(20,0,439,530),64329=>array(72,-12,674,518),64330=>array(21,-13,565,530),64331=>array(16,0,248,634),64332=>array(38,0,533,622),64333=>array(38,-12,469,622),64334=>array(37,-12,511,622),64335=>array(33,0,517,716),64336=>array(-15,0,256,927),64337=>array(-15,0,274,927),64338=>array(62,-275,709,265),64339=>array(62,-279,789,265),64340=>array(-1,-252,194,284),64341=>array(-1,-256,244,284),64342=>array(62,-270,709,265),64343=>array(62,-270,789,265),64344=>array(-1,-228,233,284),64345=>array(-1,-228,244,284),64346=>array(62,-270,709,265),64347=>array(62,-270,789,265),64348=>array(-1,-242,210,284),64349=>array(-1,-242,244,284),64350=>array(62,-50,709,568),64351=>array(62,-50,789,568),64352=>array(-1,0,194,616),64353=>array(-1,0,244,616),64354=>array(62,-50,709,569),64355=>array(62,-50,789,569),64356=>array(-1,0,222,618),64357=>array(-1,0,244,618),64358=>array(62,-50,709,569),64359=>array(62,-50,789,569),64360=>array(-1,0,245,618),64361=>array(-1,0,244,618),64362=>array(62,0,895,859),64363=>array(62,-33,904,697),64364=>array(-1,0,404,860),64365=>array(-1,0,481,697),64366=>array(62,0,895,890),64367=>array(62,-33,904,727),64368=>array(-1,0,404,890),64369=>array(-1,0,481,727),64370=>array(52,-271,564,453),64371=>array(54,-271,659,453),64372=>array(-1,-236,567,453),64373=>array(-1,-236,638,453),64374=>array(52,-271,564,453),64375=>array(54,-271,659,453),64376=>array(-1,-105,567,453),64377=>array(-1,-105,638,453),64378=>array(52,-271,564,453),64379=>array(54,-271,659,453),64380=>array(-1,-208,567,453),64381=>array(-1,-208,638,453),64382=>array(52,-271,564,453),64383=>array(54,-271,659,453),64384=>array(-1,-236,567,453),64385=>array(-1,-237,638,453),64386=>array(38,-140,368,437),64387=>array(38,-140,459,436),64388=>array(38,0,368,614),64389=>array(38,0,459,638),64390=>array(38,0,368,716),64391=>array(38,0,459,740),64392=>array(38,0,368,746),64393=>array(38,0,459,770),64394=>array(-74,-210,362,554),64395=>array(-74,-210,437,544),64396=>array(-74,-210,369,584),64397=>array(-74,-210,437,574),64398=>array(62,0,827,717),64399=>array(62,0,943,717),64400=>array(-1,0,432,717),64401=>array(-1,0,548,717),64402=>array(62,0,827,793),64403=>array(62,0,943,793),64404=>array(-1,0,432,793),64405=>array(-1,0,548,793),64406=>array(62,-256,827,793),64407=>array(62,-257,943,793),64408=>array(-1,-252,432,793),64409=>array(-1,-256,548,793),64410=>array(62,0,827,839),64411=>array(62,0,943,839),64412=>array(-1,0,432,839),64413=>array(-1,0,548,839),64414=>array(62,-121,630,272),64415=>array(39,-228,724,183),64416=>array(62,-121,630,568),64417=>array(39,-228,724,568),64418=>array(-1,0,245,618),64419=>array(-1,0,244,618),64420=>array(62,-6,452,705),64421=>array(62,0,478,705),64422=>array(62,-6,452,431),64423=>array(2,-85,510,159),64424=>array(-1,-242,194,284),64425=>array(-1,-264,428,196),64426=>array(29,-15,644,593),64427=>array(29,-15,707,593),64428=>array(-1,0,624,593),64429=>array(-1,0,687,593),64430=>array(71,-221,684,297),64431=>array(62,-221,675,95),64432=>array(71,-221,684,473),64433=>array(62,-221,675,363),64467=>array(62,0,689,817),64468=>array(34,0,734,817),64469=>array(-1,0,432,889),64470=>array(-1,0,548,889),64471=>array(-108,-210,408,766),64472=>array(-111,-210,467,704),64473=>array(-108,-210,408,696),64474=>array(-111,-210,467,628),64475=>array(-108,-210,408,789),64476=>array(-111,-210,467,725),64477=>array(-108,-210,441,755),64478=>array(-108,-210,408,750),64479=>array(-111,-210,467,685),64480=>array(-108,-210,408,476),64481=>array(-111,-210,467,379),64482=>array(-108,-210,408,705),64483=>array(-111,-210,467,641),64484=>array(10,-279,730,453),64485=>array(33,-279,935,126),64486=>array(-1,-239,194,284),64487=>array(-1,-239,244,284),64488=>array(-1,0,194,284),64489=>array(-1,0,244,284),64490=>array(79,0,475,716),64491=>array(79,0,518,716),64492=>array(2,-85,710,569),64493=>array(2,-85,754,569),64494=>array(-111,-210,667,569),64495=>array(-111,-210,711,569),64496=>array(-111,-210,667,704),64497=>array(-111,-210,711,704),64498=>array(-111,-210,667,628),64499=>array(-111,-210,711,628),64500=>array(-111,-210,667,725),64501=>array(-111,-210,711,725),64502=>array(33,-279,1135,569),64503=>array(33,-279,1178,569),64504=>array(-1,-256,445,569),64505=>array(34,-270,995,569),64506=>array(34,-270,1038,569),64507=>array(-1,0,445,569),64508=>array(32,-121,679,453),64509=>array(34,-270,794,126),64510=>array(-1,-140,217,284),64511=>array(-1,-140,244,284),64512=>array(54,-271,860,569),64513=>array(54,-271,860,569),64514=>array(58,-265,842,569),64515=>array(34,-270,995,569),64516=>array(34,-265,1005,569),64517=>array(54,-271,853,453),64518=>array(54,-271,853,453),64519=>array(54,-271,853,621),64520=>array(58,-265,834,359),64521=>array(34,-270,988,284),64522=>array(34,-265,998,284),64523=>array(54,-271,876,486),64524=>array(54,-271,876,486),64525=>array(54,-271,876,621),64526=>array(58,-265,858,486),64527=>array(34,-270,1011,486),64528=>array(34,-265,1021,486),64529=>array(54,-271,876,588),64530=>array(58,-265,858,588),64531=>array(34,-270,1011,588),64532=>array(34,-265,1021,588),64533=>array(54,-271,1226,453),64534=>array(58,-265,1208,453),64535=>array(54,-271,1226,453),64536=>array(58,-265,1208,453),64537=>array(54,-271,1226,610),64538=>array(54,-271,1226,610),64539=>array(58,-265,1208,610),64540=>array(54,-271,1350,453),64541=>array(54,-271,1350,453),64542=>array(54,-271,1350,621),64543=>array(58,-265,1332,359),64544=>array(54,-271,1415,453),64545=>array(58,-265,1397,436),64546=>array(54,-271,1415,522),64547=>array(54,-271,1415,522),64548=>array(54,-271,1415,621),64549=>array(58,-265,1397,522),64550=>array(54,-271,1331,686),64551=>array(58,-265,1313,686),64552=>array(58,-265,1313,686),64553=>array(54,-271,1183,492),64554=>array(58,-265,1165,492),64555=>array(54,-271,1183,716),64556=>array(58,-265,1165,716),64557=>array(54,-271,1063,773),64558=>array(54,-271,1063,773),64559=>array(54,-271,1063,773),64560=>array(58,-265,1045,773),64561=>array(34,-270,1198,773),64562=>array(34,-265,1208,773),64563=>array(54,-271,1063,758),64564=>array(58,-265,1045,758),64565=>array(34,-270,1198,758),64566=>array(34,-265,1208,758),64567=>array(79,0,706,717),64568=>array(54,-271,1091,717),64569=>array(54,-271,1091,717),64570=>array(54,-271,1091,717),64571=>array(34,-228,1106,717),64572=>array(58,-265,1073,717),64573=>array(34,-270,1226,717),64574=>array(34,-265,1236,717),64575=>array(54,-271,853,716),64576=>array(54,-271,853,716),64577=>array(54,-271,853,716),64578=>array(58,-265,835,716),64579=>array(34,-270,988,716),64580=>array(34,-265,998,716),64581=>array(54,-271,1078,453),64582=>array(54,-271,1078,453),64583=>array(54,-271,1078,621),64584=>array(58,-265,1060,359),64585=>array(34,-270,1213,359),64586=>array(34,-265,1223,359),64587=>array(54,-271,853,501),64588=>array(54,-271,853,501),64589=>array(54,-271,853,621),64590=>array(58,-265,835,501),64591=>array(34,-270,988,501),64592=>array(34,-265,998,501),64593=>array(54,-271,1283,593),64594=>array(58,-265,1265,593),64595=>array(34,-270,1418,593),64596=>array(34,-265,1428,593),64597=>array(54,-271,876,453),64598=>array(54,-271,876,453),64599=>array(54,-271,876,621),64600=>array(58,-265,858,359),64601=>array(34,-270,1011,284),64602=>array(34,-265,1021,284),64603=>array(38,0,368,889),64604=>array(-74,-210,357,609),64605=>array(32,-121,679,505),64606=>array(4,521,299,990),64607=>array(7,618,299,990),64608=>array(7,648,299,990),64609=>array(4,521,299,990),64610=>array(7,770,299,990),64611=>array(7,588,299,1053),64612=>array(-74,-210,681,569),64613=>array(-74,-210,681,569),64614=>array(58,-265,885,569),64615=>array(39,-228,968,569),64616=>array(34,-270,1038,569),64617=>array(34,-265,1048,569),64618=>array(-74,-210,681,284),64619=>array(-74,-210,681,458),64620=>array(58,-265,885,359),64621=>array(39,-228,968,356),64622=>array(34,-270,1038,284),64623=>array(34,-265,1048,284),64624=>array(-74,-210,681,486),64625=>array(-74,-210,681,486),64626=>array(58,-265,885,486),64627=>array(39,-228,968,486),64628=>array(34,-270,1038,486),64629=>array(34,-265,1048,486),64630=>array(-74,-210,681,588),64631=>array(-74,-210,681,588),64632=>array(58,-265,885,588),64633=>array(39,-228,968,588),64634=>array(34,-270,1038,588),64635=>array(34,-265,1048,588),64636=>array(34,-270,1275,610),64637=>array(34,-265,1285,610),64638=>array(34,-270,1275,595),64639=>array(34,-265,1285,595),64640=>array(79,0,822,717),64641=>array(34,-228,1222,717),64642=>array(58,-265,1189,717),64643=>array(34,-270,1342,717),64644=>array(34,-265,1352,717),64645=>array(58,-265,885,716),64646=>array(34,-270,1038,716),64647=>array(34,-265,1048,716),64648=>array(79,0,807,716),64649=>array(58,-265,1174,359),64650=>array(-74,-210,681,501),64651=>array(-74,-210,681,501),64652=>array(58,-265,885,501),64653=>array(39,-228,968,501),64654=>array(34,-270,1038,501),64655=>array(34,-265,1048,501),64656=>array(34,-270,794,301),64657=>array(-74,-210,681,284),64658=>array(-74,-210,681,458),64659=>array(58,-265,885,359),64660=>array(39,-228,968,356),64661=>array(34,-270,1038,284),64662=>array(34,-265,1048,284),64663=>array(-1,-140,839,569),64664=>array(-1,0,839,569),64665=>array(-1,0,839,612),64666=>array(-1,0,734,569),64667=>array(-1,-269,606,569),64668=>array(-1,-140,832,453),64669=>array(-1,-140,832,453),64670=>array(-1,-140,832,612),64671=>array(-1,-140,727,359),64672=>array(-1,-269,600,376),64673=>array(-1,-140,855,486),64674=>array(-1,0,855,486),64675=>array(-1,0,855,612),64676=>array(-1,0,750,486),64677=>array(-1,-269,623,486),64678=>array(-1,0,750,588),64679=>array(-1,-80,1205,453),64680=>array(-1,-80,1100,453),64681=>array(-1,-140,1205,453),64682=>array(-1,0,1100,453),64683=>array(-1,-140,1205,610),64684=>array(-1,0,1100,610),64685=>array(-1,-140,1329,453),64686=>array(-1,0,1329,453),64687=>array(-1,0,1329,612),64688=>array(-1,0,1224,359),64689=>array(-1,0,1394,453),64690=>array(-1,0,1394,612),64691=>array(-1,0,1289,436),64692=>array(-1,-140,1394,522),64693=>array(-1,0,1394,522),64694=>array(-1,0,1394,612),64695=>array(-1,0,1289,522),64696=>array(-1,0,1310,686),64697=>array(-1,0,1205,686),64698=>array(-1,-140,1162,492),64699=>array(-1,0,1057,492),64700=>array(-1,-140,1162,716),64701=>array(-1,0,1057,716),64702=>array(-1,-140,1042,773),64703=>array(-1,0,1042,773),64704=>array(-1,0,1042,773),64705=>array(-1,0,937,773),64706=>array(-1,0,1042,758),64707=>array(-1,0,937,758),64708=>array(-1,-140,1070,717),64709=>array(-1,0,1070,717),64710=>array(-1,0,1070,717),64711=>array(-1,0,676,717),64712=>array(-1,0,965,717),64713=>array(-1,-140,832,716),64714=>array(-1,0,832,716),64715=>array(-1,0,832,716),64716=>array(-1,0,727,716),64717=>array(-1,-269,600,716),64718=>array(-1,-140,1057,453),64719=>array(-1,0,1057,453),64720=>array(-1,0,1057,612),64721=>array(-1,0,952,359),64722=>array(-1,-140,832,501),64723=>array(-1,0,832,501),64724=>array(-1,0,832,612),64725=>array(-1,0,727,501),64726=>array(-1,-269,600,501),64727=>array(-1,-140,1262,593),64728=>array(-1,0,1157,593),64729=>array(-1,0,624,912),64730=>array(-1,-140,855,453),64731=>array(-1,-140,855,453),64732=>array(-1,-140,855,612),64733=>array(-1,-140,750,359),64734=>array(-1,-269,623,376),64735=>array(-1,0,777,569),64736=>array(-1,-269,650,569),64737=>array(-1,-140,777,359),64738=>array(-1,-269,650,376),64739=>array(-1,0,777,486),64740=>array(-1,-269,650,486),64741=>array(-1,0,777,588),64742=>array(-1,-269,650,588),64743=>array(-1,0,1304,359),64744=>array(-1,-269,1177,376),64745=>array(-1,0,1304,604),64746=>array(-1,-269,1177,604),64747=>array(-1,0,792,717),64748=>array(-1,0,1081,717),64749=>array(-1,0,777,716),64750=>array(-1,0,777,501),64751=>array(-1,-269,650,501),64752=>array(-1,-140,777,359),64753=>array(-1,-269,650,376),64754=>array(-1,0,307,1058),64755=>array(-1,0,303,990),64756=>array(-1,0,299,1054),64757=>array(34,-270,1466,686),64758=>array(34,-265,1476,686),64759=>array(34,-270,1318,492),64760=>array(34,-265,1328,492),64761=>array(34,-270,1318,716),64762=>array(34,-265,1328,716),64763=>array(34,-270,1485,346),64764=>array(34,-265,1495,346),64765=>array(34,-270,1485,604),64766=>array(34,-265,1495,604),64767=>array(34,-270,1361,453),64768=>array(34,-265,1371,453),64769=>array(34,-270,1361,453),64770=>array(34,-265,1371,453),64771=>array(34,-270,1361,610),64772=>array(34,-265,1371,610),64773=>array(34,-270,1550,436),64774=>array(34,-265,1560,436),64775=>array(34,-270,1550,522),64776=>array(34,-265,1560,522),64777=>array(54,-271,1350,604),64778=>array(54,-271,1350,604),64779=>array(54,-271,1350,621),64780=>array(58,-265,1332,604),64781=>array(-74,-210,1128,604),64782=>array(-74,-210,1128,346),64783=>array(-74,-210,1193,436),64784=>array(-74,-210,1193,522),64785=>array(34,-270,1528,686),64786=>array(34,-265,1538,686),64787=>array(34,-270,1349,407),64788=>array(34,-265,1359,407),64789=>array(34,-270,1349,624),64790=>array(34,-265,1359,624),64791=>array(34,-270,1565,346),64792=>array(34,-265,1575,346),64793=>array(34,-270,1565,604),64794=>array(34,-265,1575,604),64795=>array(34,-270,1432,453),64796=>array(34,-265,1442,453),64797=>array(34,-270,1432,453),64798=>array(34,-265,1442,453),64799=>array(34,-270,1432,612),64800=>array(34,-265,1442,612),64801=>array(34,-270,1612,436),64802=>array(34,-265,1622,436),64803=>array(34,-270,1612,522),64804=>array(34,-265,1622,522),64805=>array(54,-271,1430,604),64806=>array(54,-271,1430,604),64807=>array(54,-271,1430,621),64808=>array(58,-265,1412,604),64809=>array(-74,-210,1208,604),64810=>array(-74,-210,1208,346),64811=>array(-74,-210,1255,436),64812=>array(-74,-210,1255,522),64813=>array(-1,-140,1329,604),64814=>array(-1,0,1329,604),64815=>array(-1,0,1329,612),64816=>array(-1,0,1224,604),64817=>array(-1,-269,1097,376),64818=>array(-1,-269,1097,604),64819=>array(-1,0,1205,686),64820=>array(-1,-140,1409,453),64821=>array(-1,0,1409,453),64822=>array(-1,0,1409,612),64823=>array(-1,-140,1409,604),64824=>array(-1,0,1409,604),64825=>array(-1,0,1409,612),64826=>array(-1,0,1267,686),64827=>array(-1,0,1267,686),64828=>array(79,0,615,944),64829=>array(79,0,615,944),64830=>array(82,-218,445,790),64831=>array(155,-218,518,790),64848=>array(-1,-140,1389,486),64849=>array(54,-271,1542,486),64850=>array(-1,-140,1494,486),64851=>array(-1,0,1389,486),64852=>array(-1,0,1389,612),64853=>array(-1,-140,1389,486),64854=>array(-1,0,1389,486),64855=>array(-1,0,1389,612),64856=>array(54,-271,1831,453),64857=>array(-1,-80,1738,453),64858=>array(34,-265,1976,453),64859=>array(34,-270,1965,453),64860=>array(-1,-140,1967,453),64861=>array(-1,-140,1967,453),64862=>array(34,-270,2203,453),64863=>array(54,-271,1963,453),64864=>array(-1,0,1862,453),64865=>array(-1,-140,1862,453),64866=>array(58,-265,1945,359),64867=>array(-1,0,1757,359),64868=>array(54,-271,2115,453),64869=>array(-1,0,2032,453),64870=>array(58,-265,1992,436),64871=>array(58,-265,2050,604),64872=>array(-1,0,1862,604),64873=>array(34,-265,2213,604),64874=>array(54,-271,1963,621),64875=>array(-1,0,1862,612),64876=>array(58,-265,1945,604),64877=>array(-1,0,1757,604),64878=>array(34,-270,2250,522),64879=>array(58,-265,2097,612),64880=>array(-1,0,1927,612),64881=>array(54,-271,1926,686),64882=>array(-1,0,1843,686),64883=>array(-1,0,1738,686),64884=>array(34,-265,2071,686),64885=>array(58,-265,1834,453),64886=>array(58,-265,1729,407),64887=>array(-1,0,1590,492),64888=>array(34,-270,1882,407),64889=>array(58,-265,1729,624),64890=>array(34,-265,1893,624),64891=>array(34,-270,1882,624),64892=>array(58,-265,1760,612),64893=>array(-1,0,1575,773),64894=>array(54,-271,1671,595),64895=>array(58,-265,1655,595),64896=>array(58,-265,1523,716),64897=>array(34,-265,1687,716),64898=>array(34,-270,1676,716),64899=>array(-1,-140,1470,716),64900=>array(54,-271,1542,716),64901=>array(58,-265,1523,716),64902=>array(-1,0,1365,716),64903=>array(54,-271,1437,716),64904=>array(-1,0,1365,716),64905=>array(-1,-140,1695,453),64906=>array(-1,0,1590,453),64907=>array(34,-265,1976,453),64908=>array(-1,-140,1695,453),64909=>array(-1,-140,1590,453),64910=>array(-1,-140,1695,612),64911=>array(-1,0,1590,612),64914=>array(-1,-140,1695,612),64915=>array(-1,-140,1795,593),64916=>array(-1,0,1690,593),64917=>array(-1,0,1365,501),64918=>array(34,-270,1676,501),64919=>array(58,-265,1523,501),64920=>array(-1,-140,1365,501),64921=>array(34,-270,1676,501),64922=>array(34,-265,1582,501),64923=>array(34,-270,1571,501),64924=>array(58,-265,1418,359),64925=>array(-1,-140,1284,359),64926=>array(34,-265,1687,612),64927=>array(34,-265,1687,486),64928=>array(34,-270,1676,486),64929=>array(34,-265,1687,612),64930=>array(34,-270,1676,612),64931=>array(34,-265,1582,486),64932=>array(34,-270,1571,486),64933=>array(34,-265,1976,453),64934=>array(34,-270,2070,453),64935=>array(34,-270,1965,453),64936=>array(34,-270,2203,612),64937=>array(34,-265,2260,453),64938=>array(34,-265,2213,604),64939=>array(34,-265,2260,522),64940=>array(34,-265,1687,716),64941=>array(34,-265,1582,716),64942=>array(34,-265,1687,453),64943=>array(34,-265,1687,453),64944=>array(34,-265,1582,359),64945=>array(34,-265,1871,359),64946=>array(34,-265,1818,595),64947=>array(34,-265,1687,501),64948=>array(-1,0,1575,758),64949=>array(-1,0,1365,716),64950=>array(34,-265,1893,407),64951=>array(34,-265,1885,717),64952=>array(-1,-140,1470,501),64953=>array(34,-265,1976,612),64954=>array(-1,-140,1365,716),64955=>array(58,-265,1722,717),64956=>array(58,-265,1523,716),64957=>array(54,-271,1542,501),64958=>array(34,-265,2081,453),64959=>array(34,-265,2081,453),64960=>array(34,-265,1976,453),64961=>array(34,-265,1818,610),64962=>array(34,-265,1687,453),64963=>array(-1,0,1499,717),64964=>array(-1,-140,1695,492),64965=>array(-1,0,1822,436),64966=>array(34,-265,2213,612),64967=>array(34,-265,1687,501),65008=>array(62,-221,1462,716),65009=>array(62,-221,1110,758),65010=>array(52,0,1077,1015),65011=>array(-74,-210,1277,717),65012=>array(38,0,2049,453),65013=>array(58,-265,2196,716),65014=>array(34,-210,2066,716),65015=>array(62,-140,1490,716),65016=>array(58,-265,1984,716),65017=>array(34,-270,1794,716),65018=>array(77,-156,1842,762),65019=>array(74,-37,1003,826),65056=>array(55,604,450,726),65057=>array(0,604,395,726),65058=>array(55,604,450,726),65059=>array(0,604,395,726),65072=>array(446,87,554,679),65073=>array(461,-121,539,887),65074=>array(461,229,539,537),65075=>array(-5,-121,73,887),65076=>array(0,-118,118,885),65077=>array(45,39,952,277),65078=>array(47,558,954,796),65079=>array(43,31,956,281),65080=>array(43,548,956,798),65081=>array(41,19,960,294),65082=>array(40,543,959,818),65083=>array(45,18,950,306),65084=>array(47,530,952,818),65085=>array(47,-32,953,416),65086=>array(47,420,953,868),65087=>array(47,-2,953,325),65088=>array(47,511,953,838),65089=>array(48,18,952,358),65090=>array(48,473,952,818),65091=>array(48,-12,952,359),65092=>array(48,475,952,848),65097=>array(75,761,925,801),65098=>array(75,731,925,829),65099=>array(-1,771,1001,889),65100=>array(-2,656,1001,884),65101=>array(75,-29,925,11),65102=>array(75,-49,925,49),65103=>array(-1,-112,1001,6),65104=>array(50,-85,114,60),65105=>array(33,109,172,224),65106=>array(53,0,113,60),65108=>array(50,-85,114,311),65109=>array(54,0,114,311),65110=>array(28,0,305,437),65111=>array(51,0,116,430),65112=>array(-4,134,604,177),65113=>array(36,-126,178,437),65114=>array(22,-126,164,437),65115=>array(17,-126,186,437),65116=>array(14,-126,184,437),65117=>array(41,-119,184,430),65118=>array(16,-119,159,430),65119=>array(7,-7,327,437),65120=>array(26,-10,386,437),65121=>array(20,254,214,437),65122=>array(33,70,317,354),65123=>array(19,129,181,182),65124=>array(33,67,317,357),65125=>array(33,67,317,357),65126=>array(33,122,317,302),65128=>array(0,-14,167,430),65129=>array(23,-62,307,469),65130=>array(44,-16,491,437),65131=>array(34,-126,589,437),65136=>array(10,716,290,944),65137=>array(-1,0,299,944),65138=>array(4,716,292,990),65140=>array(8,-255,288,-78),65142=>array(10,716,290,859),65143=>array(-1,0,299,859),65144=>array(4,716,292,990),65145=>array(-1,0,303,990),65146=>array(8,-170,288,-78),65147=>array(-1,-170,297,95),65148=>array(7,716,299,936),65149=>array(-1,0,307,936),65150=>array(3,767,151,915),65151=>array(-1,0,155,915),65152=>array(54,0,469,422),65153=>array(-23,0,270,846),65154=>array(-23,0,274,846),65155=>array(46,0,188,933),65156=>array(46,0,274,933),65157=>array(-108,-210,408,762),65158=>array(-111,-210,467,664),65159=>array(46,-285,188,716),65160=>array(46,-285,274,716),65161=>array(32,-121,679,453),65162=>array(34,-270,794,301),65163=>array(-1,0,201,569),65164=>array(-1,0,244,569),65165=>array(79,0,164,716),65166=>array(79,0,274,716),65167=>array(62,-190,709,265),65168=>array(62,-190,789,265),65169=>array(-1,-140,194,284),65170=>array(-1,-140,244,284),65171=>array(62,-6,452,633),65172=>array(62,0,478,628),65173=>array(62,-50,709,437),65174=>array(62,-50,789,437),65175=>array(-1,0,217,486),65176=>array(-1,0,244,486),65177=>array(62,-50,709,539),65178=>array(62,-50,789,539),65179=>array(-1,0,217,588),65180=>array(-1,0,244,588),65181=>array(52,-271,564,453),65182=>array(54,-271,659,453),65183=>array(-1,-80,567,453),65184=>array(-1,-140,638,453),65185=>array(52,-271,564,453),65186=>array(54,-271,659,453),65187=>array(-1,0,567,453),65188=>array(-1,0,638,453),65189=>array(52,-271,564,621),65190=>array(54,-271,659,621),65191=>array(-1,0,567,610),65192=>array(-1,0,638,612),65193=>array(38,0,368,437),65194=>array(38,0,459,436),65195=>array(38,0,368,629),65196=>array(38,0,459,653),65197=>array(-74,-210,357,290),65198=>array(-74,-210,437,239),65199=>array(-74,-210,357,470),65200=>array(-74,-210,437,458),65201=>array(39,-228,1115,346),65202=>array(39,-228,1195,346),65203=>array(-1,0,691,346),65204=>array(-1,0,771,346),65205=>array(39,-228,1115,604),65206=>array(39,-228,1195,604),65207=>array(-1,0,691,604),65208=>array(-1,0,771,604),65209=>array(39,-228,1230,436),65210=>array(39,-228,1292,436),65211=>array(-1,0,756,436),65212=>array(-1,0,818,436),65213=>array(39,-228,1230,532),65214=>array(39,-228,1292,532),65215=>array(-1,0,756,522),65216=>array(-1,0,818,522),65217=>array(59,0,782,686),65218=>array(59,0,844,686),65219=>array(-1,0,672,686),65220=>array(-1,0,734,686),65221=>array(59,0,782,686),65222=>array(59,0,844,686),65223=>array(-1,0,672,686),65224=>array(-1,0,734,686),65225=>array(53,-271,565,492),65226=>array(55,-271,567,443),65227=>array(-1,0,524,492),65228=>array(-3,0,555,407),65229=>array(53,-271,565,725),65230=>array(55,-271,567,660),65231=>array(-1,0,524,716),65232=>array(-3,0,555,624),65233=>array(62,0,895,773),65234=>array(62,-33,904,610),65235=>array(-1,0,404,773),65236=>array(-1,0,481,610),65237=>array(34,-214,738,678),65238=>array(39,-271,824,557),65239=>array(-1,0,404,758),65240=>array(-1,0,481,595),65241=>array(62,0,689,716),65242=>array(34,0,734,716),65243=>array(-1,0,432,717),65244=>array(-1,0,548,717),65245=>array(34,-121,594,716),65246=>array(34,-228,674,716),65247=>array(-1,0,194,716),65248=>array(-1,0,244,716),65249=>array(58,-265,527,359),65250=>array(58,-265,641,359),65251=>array(-1,0,419,359),65252=>array(-1,0,533,359),65253=>array(62,-121,630,458),65254=>array(39,-228,724,356),65255=>array(-1,0,194,501),65256=>array(-1,0,244,501),65257=>array(62,-6,452,431),65258=>array(62,0,478,446),65259=>array(-1,0,624,593),65260=>array(-1,-269,406,376),65261=>array(-108,-210,408,476),65262=>array(-111,-210,467,379),65263=>array(32,-121,679,453),65264=>array(34,-270,794,126),65265=>array(32,-238,679,453),65266=>array(34,-265,804,146),65267=>array(-1,-140,217,284),65268=>array(-1,-140,244,284),65269=>array(-122,-78,474,862),65270=>array(-121,-78,604,862),65271=>array(-27,-78,474,862),65272=>array(-27,-78,604,862),65273=>array(8,-171,474,716),65274=>array(8,-172,604,716),65275=>array(8,-78,474,716),65276=>array(8,-78,604,716),65281=>array(446,0,555,716),65282=>array(363,462,635,716),65283=>array(234,-12,768,728),65284=>array(263,-103,736,782),65285=>array(128,-27,874,728),65286=>array(199,-17,800,728),65287=>array(447,462,547,716),65288=>array(382,-210,619,728),65289=>array(382,-210,619,728),65290=>array(338,423,661,728),65291=>array(264,116,738,590),65292=>array(447,-141,553,100),65293=>array(366,215,635,303),65294=>array(448,0,548,100),65295=>array(361,-24,639,716),65296=>array(266,-12,732,719),65297=>array(367,0,631,719),65298=>array(263,0,737,719),65299=>array(267,-12,736,719),65300=>array(253,0,748,716),65301=>array(263,-12,737,706),65302=>array(265,-12,737,719),65303=>array(269,0,732,706),65304=>array(265,-12,736,719),65305=>array(266,-12,736,719),65306=>array(449,0,549,518),65307=>array(447,-141,553,518),65308=>array(263,111,737,595),65309=>array(263,203,737,503),65310=>array(263,111,737,595),65311=>array(269,0,731,728),65312=>array(37,-210,962,729),65313=>array(166,0,835,716),65314=>array(229,0,770,716),65315=>array(184,-12,816,728),65316=>array(204,0,796,716),65317=>array(232,0,767,716),65318=>array(258,0,741,716),65319=>array(169,-12,831,728),65320=>array(219,0,781,716),65321=>array(452,0,547,716),65322=>array(304,-12,697,716),65323=>array(204,0,796,716),65324=>array(276,0,724,716),65325=>array(159,0,840,716),65326=>array(218,0,781,716),65327=>array(157,-12,842,728),65328=>array(227,0,773,716),65329=>array(151,-56,849,728),65330=>array(184,0,815,716),65331=>array(215,-12,785,728),65332=>array(216,0,783,716),65333=>array(218,-12,781,716),65334=>array(173,0,827,716),65335=>array(39,0,960,716),65336=>array(172,0,828,716),65337=>array(172,0,828,716),65338=>array(217,0,783,716),65339=>array(403,-199,597,716),65340=>array(361,-24,639,716),65341=>array(403,-199,597,716),65342=>array(291,325,708,716),65343=>array(244,-125,756,-75),65344=>array(410,591,590,728),65345=>array(261,-12,739,530),65346=>array(275,-12,725,716),65347=>array(274,-12,726,530),65348=>array(275,-12,725,716),65349=>array(261,-12,739,530),65350=>array(348,0,651,728),65351=>array(271,-210,728,530),65352=>array(288,0,711,716),65353=>array(456,0,544,716),65354=>array(400,-209,600,716),65355=>array(285,0,715,716),65356=>array(456,0,544,716),65357=>array(148,0,852,530),65358=>array(289,0,711,530),65359=>array(257,-12,743,530),65360=>array(275,-199,725,530),65361=>array(275,-199,725,530),65362=>array(359,0,641,530),65363=>array(285,-12,715,530),65364=>array(374,-7,626,700),65365=>array(289,-12,710,518),65366=>array(262,0,737,518),65367=>array(144,0,856,518),65368=>array(257,0,743,518),65369=>array(262,-210,738,518),65370=>array(270,0,729,518),65371=>array(359,-210,641,728),65372=>array(462,-199,538,716),65373=>array(359,-210,641,728),65374=>array(250,272,749,432),65377=>array(53,-40,235,142),65378=>array(79,-68,421,837),65379=>array(77,-68,423,837),65380=>array(54,-82,296,171),65381=>array(196,332,304,440),65382=>array(65,-53,435,753),65383=>array(63,-11,461,732),65384=>array(46,-3,441,769),65385=>array(79,-9,425,763),65386=>array(61,32,439,689),65387=>array(38,-15,443,751),65388=>array(51,-26,452,756),65389=>array(61,33,439,696),65390=>array(79,19,421,701),65391=>array(56,-3,432,727),65392=>array(81,329,419,411),65393=>array(43,-61,481,751),65394=>array(42,-44,448,795),65395=>array(62,-47,439,803),65396=>array(41,0,459,735),65397=>array(34,-45,464,787),65398=>array(38,-40,443,794),65399=>array(43,-46,457,799),65400=>array(40,-49,436,815),65401=>array(39,-48,461,813),65402=>array(60,-23,440,734),65403=>array(42,-59,458,788),65404=>array(36,-33,461,770),65405=>array(28,-49,472,727),65406=>array(44,-5,468,786),65407=>array(49,-51,442,780),65408=>array(36,-56,453,798),65409=>array(41,-50,459,798),65410=>array(45,-43,455,770),65411=>array(41,-61,459,740),65412=>array(122,-46,444,787),65413=>array(42,-59,458,786),65414=>array(41,16,459,711),65415=>array(42,-47,459,734),65416=>array(25,-51,487,769),65417=>array(52,-43,442,740),65418=>array(35,-29,464,791),65419=>array(95,-5,465,770),65420=>array(66,-54,434,732),65421=>array(26,24,472,645),65422=>array(22,-47,472,785),65423=>array(50,-31,450,729),65424=>array(38,-31,463,769),65425=>array(28,-31,478,790),65426=>array(45,-35,449,782),65427=>array(41,-6,459,739),65428=>array(47,-50,468,797),65429=>array(41,-4,459,730),65430=>array(61,-27,439,730),65431=>array(58,-54,442,748),65432=>array(106,-53,394,768),65433=>array(18,-44,481,788),65434=>array(111,-29,474,788),65435=>array(71,-24,429,730),65436=>array(64,-48,436,731),65437=>array(41,-33,461,749),65438=>array(21,523,250,750),65439=>array(38,591,220,773),65441=>array(50,91,450,665),65442=>array(31,91,469,665),65443=>array(20,78,495,665),65444=>array(49,90,451,665),65445=>array(29,80,492,666),65446=>array(30,91,472,666),65447=>array(54,90,446,664),65448=>array(28,90,472,665),65449=>array(59,90,451,665),65450=>array(42,88,458,665),65451=>array(39,85,461,665),65452=>array(39,85,461,665),65453=>array(39,78,495,665),65454=>array(41,85,459,665),65455=>array(34,85,466,665),65456=>array(32,85,468,666),65457=>array(79,90,421,665),65458=>array(79,90,421,665),65459=>array(37,88,463,665),65460=>array(37,78,495,664),65461=>array(13,80,486,661),65462=>array(2,78,493,663),65463=>array(52,92,448,666),65464=>array(17,78,481,665),65465=>array(11,79,495,666),65466=>array(19,76,481,665),65467=>array(72,90,428,663),65468=>array(56,91,444,664),65469=>array(62,90,438,665),65470=>array(44,88,456,665),65474=>array(105,-64,395,842),65475=>array(95,-64,405,842),65476=>array(103,-64,397,842),65477=>array(90,-64,411,842),65478=>array(103,-65,397,841),65479=>array(40,-63,445,843),65482=>array(103,-64,397,842),65483=>array(39,-63,446,843),65484=>array(43,197,457,614),65485=>array(24,-64,476,842),65486=>array(27,-64,463,842),65487=>array(24,-64,439,842),65490=>array(30,197,470,615),65491=>array(40,76,460,554),65492=>array(31,-65,454,841),65493=>array(25,-63,465,843),65494=>array(31,-64,449,842),65495=>array(40,110,468,588),65498=>array(28,357,472,436),65499=>array(30,-64,450,842),65500=>array(212,-64,288,842),65504=>array(274,-200,726,716),65505=>array(242,-14,758,728),65506=>array(263,203,737,503),65507=>array(244,793,756,843),65508=>array(462,-199,538,716),65509=>array(223,0,777,716),65510=>array(39,0,960,716),65512=>array(207,-218,293,994),65513=>array(40,100,460,412),65514=>array(93,0,405,420),65515=>array(40,100,460,412),65516=>array(93,0,405,420),65517=>array(35,160,465,590),65518=>array(35,160,465,590),65532=>array(0,0,1000,719),65533=>array(85,-21,915,810),65535=>array(125,0,875,750)); +$cw=array(0=>1000,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278,306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,338=>1000,339=>944,340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,352=>667,353=>500,354=>611,355=>278,356=>611,357=>406,358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,374=>667,375=>500,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579,393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,402=>278,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500,410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602,426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526,442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444,458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889,510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556,614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556,630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216,646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464,662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030,678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222,701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,710=>333,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333,718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758,912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778,928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551,945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678,961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616,978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557,1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1027=>567,1028=>717,1029=>667,1030=>278,1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1036=>584,1038=>635,1039=>723,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722,1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939,1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559,1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823,1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811,1115=>556,1116=>437,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932,1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976,1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556,1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670,1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661,1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735,1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923,1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635,1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427,1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635,1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271,1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427,1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583,1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360,1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360,1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360,1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360,1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316,1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412,1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544,1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800,1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243,1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544,1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421,1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957,1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828,1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470,1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514,1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282,1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480,1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611,2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502,2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600,2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0,2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639,2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582,2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585,2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593,2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0,2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559,2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267,2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567,2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640,2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0,2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591,2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0,2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773,2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446,2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587,2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0,2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590,2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712,2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605,2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0,2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540,2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994,2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295,2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547,3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740,3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690,3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684,3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681,3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361,3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840,3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293,3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667,3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687,3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714,3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549,3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198,3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712,3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546,3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340,3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181,3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664,3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608,3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574,3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724,3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775,3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778,3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778,3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600,3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600,3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600,3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600,3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600,3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600,3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600,3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600,3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600,3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600,4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600,4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634,4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629,4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872,4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810,4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524,4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000,4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000,4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000,4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000,4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000,4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000,4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000,4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000,4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000,4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000,4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000,4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000,4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000,4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000,4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000,4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278,7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556,7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620,7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576,7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434,7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747,7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303,7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894,8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766,8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576,8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576,8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556,8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766,8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576,8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556,8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222,8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667,8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758,8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0,8205=>0,8208=>333,8209=>333,8210=>556,8211=>500,8212=>1000,8213=>564,8214=>428,8215=>500,8216=>222,8217=>222,8218=>222,8219=>222,8220=>333,8221=>333,8222=>333,8223=>333,8224=>556,8225=>556,8226=>350,8227=>350,8228=>278,8229=>556,8230=>1000,8231=>278,8232=>0,8233=>0,8240=>1000,8241=>1330,8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8249=>333,8250=>333,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333,8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333,8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556,8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8364=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700,8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667,8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708,8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8482=>1000,8483=>722,8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115,8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834,8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500,8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713,8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713,8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800,8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713,8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713,8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713,8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823,8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584,8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806,8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584,8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584,8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584,8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584,8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678,8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800,8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672,8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584,8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561,8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584,8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000,8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549,8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549,8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549,9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600,9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600,9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000,9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000,9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000,9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000,9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000,9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000,9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000,9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000,9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000,9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000,9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734,9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650,9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900,9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560,9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000,9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804,9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000,12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000,12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000,12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000,12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000,12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000,12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000,12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000,12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000,12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000,12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000,12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000,12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000,12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000,12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000,12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000,12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000,12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000,12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000,12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000,12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000,12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000,12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000,12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000,12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000,12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000,12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000,12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000,12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000,13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000,13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000,13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000,13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000,13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000,13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000,13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000,13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000,13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000,13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000,13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000,13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000,13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000,13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000,13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000,13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000,13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000,13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000,13309=>1000,13310=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000,19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000,19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000,20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000,20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000,20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000,20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000,20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000,20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000,20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000,20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000,20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000,20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000,20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000,20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000,20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000,20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000,20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000,20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000,20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000,20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000,20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000,20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000,20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000,20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000,20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000,20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000,20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000,20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000,20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000,20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000,20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000,20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000,20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000,20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000,20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000,20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000,20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000,20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000,20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000,20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000,20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000,20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000,20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000,20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000,20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000,20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000,20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000,20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000,20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000,20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000,20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000,20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000,20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000,20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000,20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000,20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000,20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000,20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000,20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000,20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000,20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000,20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000,20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000,20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000,20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000,21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000,21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000,21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000,21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000,21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000,21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000,21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000,21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000,21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000,21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000,21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000,21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000,21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000,21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000,21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000,21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000,21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000,21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000,21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000,21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000,21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000,21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000,21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000,21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000,21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000,21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000,21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000,21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000,21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000,21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000,21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000,21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000,21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000,21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000,21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000,21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000,21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000,21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000,21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000,21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000,21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000,21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000,21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000,21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000,21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000,21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000,21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000,21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000,21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000,21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000,21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000,21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000,21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000,21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000,21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000,21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000,21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000,21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000,21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000,21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000,21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000,21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000,22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000,22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000,22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000,22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000,22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000,22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000,22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000,22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000,22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000,22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000,22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000,22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000,22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000,22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000,22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000,22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000,22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000,22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000,22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000,22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000,22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000,22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000,22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000,22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000,22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000,22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000,22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000,22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000,22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000,22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000,22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000,22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000,22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000,22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000,22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000,22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000,22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000,22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000,22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000,22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000,22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000,22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000,22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000,22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000,22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000,22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000,22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000,22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000,22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000,22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000,22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000,22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000,22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000,22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000,22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000,22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000,22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000,22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000,22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000,22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000,22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000,22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000,22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000,23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000,23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000,23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000,23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000,23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000,23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000,23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000,23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000,23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000,23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000,23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000,23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000,23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000,23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000,23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000,23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000,23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000,23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000,23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000,23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000,23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000,23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000,23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000,23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000,23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000,23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000,23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000,23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000,23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000,23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000,23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000,23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000,23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000,23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000,23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000,23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000,23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000,23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000,23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000,23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000,23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000,23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000,23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000,23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000,23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000,23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000,23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000,23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000,23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000,23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000,23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000,23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000,23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000,23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000,23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000,23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000,23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000,23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000,23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000,23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000,23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000,23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000,24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000,24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000,24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000,24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000,24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000,24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000,24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000,24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000,24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000,24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000,24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000,24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000,24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000,24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000,24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000,24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000,24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000,24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000,24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000,24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000,24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000,24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000,24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000,24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000,24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000,24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000,24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000,24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000,24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000,24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000,24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000,24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000,24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000,24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000,24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000,24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000,24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000,24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000,24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000,24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000,24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000,24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000,24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000,24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000,24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000,24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000,24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000,24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000,24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000,24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000,24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000,24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000,24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000,24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000,24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000,24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000,24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000,24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000,24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000,24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000,24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000,24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000,24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000,25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000,25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000,25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000,25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000,25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000,25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000,25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000,25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000,25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000,25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000,25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000,25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000,25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000,25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000,25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000,25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000,25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000,25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000,25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000,25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000,25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000,25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000,25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000,25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000,25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000,25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000,25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000,25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000,25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000,25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000,25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000,25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000,25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000,25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000,25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000,25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000,25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000,25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000,25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000,25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000,25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000,25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000,25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000,25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000,25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000,25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000,25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000,25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000,25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000,25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000,25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000,25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000,25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000,25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000,25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000,25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000,25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000,25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000,25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000,25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000,25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000,25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000,26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000,26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000,26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000,26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000,26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000,26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000,26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000,26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000,26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000,26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000,26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000,26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000,26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000,26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000,26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000,26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000,26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000,26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000,26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000,26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000,26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000,26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000,26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000,26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000,26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000,26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000,26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000,26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000,26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000,26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000,26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000,26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000,26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000,26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000,26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000,26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000,26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000,26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000,26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000,26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000,26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000,26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000,26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000,26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000,26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000,26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000,26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000,26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000,26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000,26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000,26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000,26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000,26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000,26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000,26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000,26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000,26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000,26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000,26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000,26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000,26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000,26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000,26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000,27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000,27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000,27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000,27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000,27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000,27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000,27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000,27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000,27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000,27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000,27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000,27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000,27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000,27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000,27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000,27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000,27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000,27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000,27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000,27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000,27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000,27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000,27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000,27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000,27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000,27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000,27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000,27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000,27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000,27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000,27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000,27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000,27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000,27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000,27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000,27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000,27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000,27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000,27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000,27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000,27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000,27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000,27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000,27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000,27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000,27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000,27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000,27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000,27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000,27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000,27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000,27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000,27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000,27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000,27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000,27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000,27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000,27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000,27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000,27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000,27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000,27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000,28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000,28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000,28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000,28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000,28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000,28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000,28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000,28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000,28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000,28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000,28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000,28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000,28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000,28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000,28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000,28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000,28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000,28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000,28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000,28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000,28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000,28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000,28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000,28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000,28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000,28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000,28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000,28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000,28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000,28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000,28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000,28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000,28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000,28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000,28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000,28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000,28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000,28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000,28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000,28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000,28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000,28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000,28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000,28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000,28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000,28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000,28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000,28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000,28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000,28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000,28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000,28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000,28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000,28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000,28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000,28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000,28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000,28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000,28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000,28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000,28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000,28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000,28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000,29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000,29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000,29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000,29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000,29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000,29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000,29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000,29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000,29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000,29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000,29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000,29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000,29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000,29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000,29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000,29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000,29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000,29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000,29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000,29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000,29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000,29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000,29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000,29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000,29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000,29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000,29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000,29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000,29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000,29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000,29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000,29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000,29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000,29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000,29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000,29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000,29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000,29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000,29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000,29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000,29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000,29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000,29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000,29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000,29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000,29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000,29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000,29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000,29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000,29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000,29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000,29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000,29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000,29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000,29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000,29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000,29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000,29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000,29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000,29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000,29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000,29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000,30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000,30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000,30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000,30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000,30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000,30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000,30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000,30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000,30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000,30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000,30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000,30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000,30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000,30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000,30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000,30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000,30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000,30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000,30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000,30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000,30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000,30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000,30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000,30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000,30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000,30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000,30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000,30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000,30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000,30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000,30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000,30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000,30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000,30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000,30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000,30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000,30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000,30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000,30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000,30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000,30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000,30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000,30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000,30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000,30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000,30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000,30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000,30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000,30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000,30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000,30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000,30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000,30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000,30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000,30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000,30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000,30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000,30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000,30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000,30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000,30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000,30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000,30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000,31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000,31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000,31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000,31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000,31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000,31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000,31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000,31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000,31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000,31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000,31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000,31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000,31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000,31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000,31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000,31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000,31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000,31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000,31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000,31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000,31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000,31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000,31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000,31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000,31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000,31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000,31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000,31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000,31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000,31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000,31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000,31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000,31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000,31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000,31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000,31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000,31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000,31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000,31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000,31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000,31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000,31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000,31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000,31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000,31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000,31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000,31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000,31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000,31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000,31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000,31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000,31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000,31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000,31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000,31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000,31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000,31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000,31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000,31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000,31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000,31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000,31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000,32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000,32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000,32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000,32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000,32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000,32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000,32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000,32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000,32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000,32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000,32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000,32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000,32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000,32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000,32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000,32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000,32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000,32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000,32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000,32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000,32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000,32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000,32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000,32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000,32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000,32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000,32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000,32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000,32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000,32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000,32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000,32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000,32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000,32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000,32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000,32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000,32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000,32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000,32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000,32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000,32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000,32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000,32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000,32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000,32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000,32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000,32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000,32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000,32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000,32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000,32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000,32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000,32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000,32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000,32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000,32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000,32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000,32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000,32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000,32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000,32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000,32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000,32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000,33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000,33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000,33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000,33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000,33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000,33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000,33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000,33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000,33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000,33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000,33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000,33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000,33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000,33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000,33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000,33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000,33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000,33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000,33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000,33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000,33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000,33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000,33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000,33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000,33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000,33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000,33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000,33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000,33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000,33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000,33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000,33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000,33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000,33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000,33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000,33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000,33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000,33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000,33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000,33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000,33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000,33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000,33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000,33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000,33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000,33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000,33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000,33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000,33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000,33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000,33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000,33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000,33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000,33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000,33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000,33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000,33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000,33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000,33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000,33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000,33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000,33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000,34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000,34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000,34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000,34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000,34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000,34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000,34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000,34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000,34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000,34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000,34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000,34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000,34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000,34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000,34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000,34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000,34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000,34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000,34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000,34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000,34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000,34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000,34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000,34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000,34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000,34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000,34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000,34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000,34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000,34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000,34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000,34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000,34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000,34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000,34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000,34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000,34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000,34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000,34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000,34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000,34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000,34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000,34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000,34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000,34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000,34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000,34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000,34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000,34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000,34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000,34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000,34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000,34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000,34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000,34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000,34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000,34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000,34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000,34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000,34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000,34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000,34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000,34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000,35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000,35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000,35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000,35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000,35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000,35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000,35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000,35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000,35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000,35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000,35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000,35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000,35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000,35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000,35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000,35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000,35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000,35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000,35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000,35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000,35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000,35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000,35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000,35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000,35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000,35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000,35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000,35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000,35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000,35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000,35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000,35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000,35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000,35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000,35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000,35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000,35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000,35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000,35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000,35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000,35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000,35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000,35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000,35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000,35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000,35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000,35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000,35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000,35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000,35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000,35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000,35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000,35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000,35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000,35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000,35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000,35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000,35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000,35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000,35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000,35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000,35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000,36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000,36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000,36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000,36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000,36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000,36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000,36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000,36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000,36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000,36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000,36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000,36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000,36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000,36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000,36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000,36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000,36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000,36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000,36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000,36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000,36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000,36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000,36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000,36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000,36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000,36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000,36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000,36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000,36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000,36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000,36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000,36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000,36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000,36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000,36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000,36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000,36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000,36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000,36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000,36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000,36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000,36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000,36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000,36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000,36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000,36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000,36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000,36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000,36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000,36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000,36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000,36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000,36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000,36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000,36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000,36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000,36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000,36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000,36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000,36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000,36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000,36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000,36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000,37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000,37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000,37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000,37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000,37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000,37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000,37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000,37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000,37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000,37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000,37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000,37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000,37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000,37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000,37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000,37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000,37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000,37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000,37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000,37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000,37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000,37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000,37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000,37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000,37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000,37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000,37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000,37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000,37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000,37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000,37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000,37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000,37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000,37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000,37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000,37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000,37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000,37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000,37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000,37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000,37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000,37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000,37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000,37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000,37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000,37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000,37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000,37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000,37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000,37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000,37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000,37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000,37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000,37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000,37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000,37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000,37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000,37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000,37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000,37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000,37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000,37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000,38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000,38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000,38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000,38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000,38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000,38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000,38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000,38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000,38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000,38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000,38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000,38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000,38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000,38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000,38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000,38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000,38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000,38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000,38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000,38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000,38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000,38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000,38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000,38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000,38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000,38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000,38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000,38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000,38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000,38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000,38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000,38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000,38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000,38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000,38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000,38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000,38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000,38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000,38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000,38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000,38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000,38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000,38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000,38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000,38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000,38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000,38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000,38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000,38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000,38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000,38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000,38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000,38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000,38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000,38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000,38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000,38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000,38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000,38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000,38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000,38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000,38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000,38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000,39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000,39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000,39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000,39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000,39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000,39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000,39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000,39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000,39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000,39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000,39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000,39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000,39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000,39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000,39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000,39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000,39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000,39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000,39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000,39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000,39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000,39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000,39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000,39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000,39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000,39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000,39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000,39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000,39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000,39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000,39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000,39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000,39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000,39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000,39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000,39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000,39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000,39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000,39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000,39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000,39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000,39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000,39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000,39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000,39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000,39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000,39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000,39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000,39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000,39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000,39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000,39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000,39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000,39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000,39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000,39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000,39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000,39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000,39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000,39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000,39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000,39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000,40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000,40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000,40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000,40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000,40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000,40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000,40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000,40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000,40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000,40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000,40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000,40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000,40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000,40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000,40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000,40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000,40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000,40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000,40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000,40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000,40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000,40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000,40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000,40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000,40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000,40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000,40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000,40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000,40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000,40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000,40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000,40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000,40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000,40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000,40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000,40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000,40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000,40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000,40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000,40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000,40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000,40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000,40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000,40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000,40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000,40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000,40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000,40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000,40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000,40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000,40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000,40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000,40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000,40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000,40869=>1000,44032=>1000,44033=>1000,44034=>1000,44035=>1000,44036=>1000,44037=>1000,44038=>1000,44039=>1000,44040=>1000,44041=>1000,44042=>1000,44043=>1000,44044=>1000,44045=>1000,44046=>1000,44047=>1000,44048=>1000,44049=>1000,44050=>1000,44051=>1000,44052=>1000,44053=>1000,44054=>1000,44055=>1000,44056=>1000,44057=>1000,44058=>1000,44059=>1000,44060=>1000,44061=>1000,44062=>1000,44063=>1000,44064=>1000,44065=>1000,44066=>1000,44067=>1000,44068=>1000,44069=>1000,44070=>1000,44071=>1000,44072=>1000,44073=>1000,44074=>1000,44075=>1000,44076=>1000,44077=>1000,44078=>1000,44079=>1000,44080=>1000,44081=>1000,44082=>1000,44083=>1000,44084=>1000,44085=>1000,44086=>1000,44087=>1000,44088=>1000,44089=>1000,44090=>1000,44091=>1000,44092=>1000,44093=>1000,44094=>1000,44095=>1000,44096=>1000,44097=>1000,44098=>1000,44099=>1000,44100=>1000,44101=>1000,44102=>1000,44103=>1000,44104=>1000,44105=>1000,44106=>1000,44107=>1000,44108=>1000,44109=>1000,44110=>1000,44111=>1000,44112=>1000,44113=>1000,44114=>1000,44115=>1000,44116=>1000,44117=>1000,44118=>1000,44119=>1000,44120=>1000,44121=>1000,44122=>1000,44123=>1000,44124=>1000,44125=>1000,44126=>1000,44127=>1000,44128=>1000,44129=>1000,44130=>1000,44131=>1000,44132=>1000,44133=>1000,44134=>1000,44135=>1000,44136=>1000,44137=>1000,44138=>1000,44139=>1000,44140=>1000,44141=>1000,44142=>1000,44143=>1000,44144=>1000,44145=>1000,44146=>1000,44147=>1000,44148=>1000,44149=>1000,44150=>1000,44151=>1000,44152=>1000,44153=>1000,44154=>1000,44155=>1000,44156=>1000,44157=>1000,44158=>1000,44159=>1000,44160=>1000,44161=>1000,44162=>1000,44163=>1000,44164=>1000,44165=>1000,44166=>1000,44167=>1000,44168=>1000,44169=>1000,44170=>1000,44171=>1000,44172=>1000,44173=>1000,44174=>1000,44175=>1000,44176=>1000,44177=>1000,44178=>1000,44179=>1000,44180=>1000,44181=>1000,44182=>1000,44183=>1000,44184=>1000,44185=>1000,44186=>1000,44187=>1000,44188=>1000,44189=>1000,44190=>1000,44191=>1000,44192=>1000,44193=>1000,44194=>1000,44195=>1000,44196=>1000,44197=>1000,44198=>1000,44199=>1000,44200=>1000,44201=>1000,44202=>1000,44203=>1000,44204=>1000,44205=>1000,44206=>1000,44207=>1000,44208=>1000,44209=>1000,44210=>1000,44211=>1000,44212=>1000,44213=>1000,44214=>1000,44215=>1000,44216=>1000,44217=>1000,44218=>1000,44219=>1000,44220=>1000,44221=>1000,44222=>1000,44223=>1000,44224=>1000,44225=>1000,44226=>1000,44227=>1000,44228=>1000,44229=>1000,44230=>1000,44231=>1000,44232=>1000,44233=>1000,44234=>1000,44235=>1000,44236=>1000,44237=>1000,44238=>1000,44239=>1000,44240=>1000,44241=>1000,44242=>1000,44243=>1000,44244=>1000,44245=>1000,44246=>1000,44247=>1000,44248=>1000,44249=>1000,44250=>1000,44251=>1000,44252=>1000,44253=>1000,44254=>1000,44255=>1000,44256=>1000,44257=>1000,44258=>1000,44259=>1000,44260=>1000,44261=>1000,44262=>1000,44263=>1000,44264=>1000,44265=>1000,44266=>1000,44267=>1000,44268=>1000,44269=>1000,44270=>1000,44271=>1000,44272=>1000,44273=>1000,44274=>1000,44275=>1000,44276=>1000,44277=>1000,44278=>1000,44279=>1000,44280=>1000,44281=>1000,44282=>1000,44283=>1000,44284=>1000,44285=>1000,44286=>1000,44287=>1000,44288=>1000,44289=>1000,44290=>1000,44291=>1000,44292=>1000,44293=>1000,44294=>1000,44295=>1000,44296=>1000,44297=>1000,44298=>1000,44299=>1000,44300=>1000,44301=>1000,44302=>1000,44303=>1000,44304=>1000,44305=>1000,44306=>1000,44307=>1000,44308=>1000,44309=>1000,44310=>1000,44311=>1000,44312=>1000,44313=>1000,44314=>1000,44315=>1000,44316=>1000,44317=>1000,44318=>1000,44319=>1000,44320=>1000,44321=>1000,44322=>1000,44323=>1000,44324=>1000,44325=>1000,44326=>1000,44327=>1000,44328=>1000,44329=>1000,44330=>1000,44331=>1000,44332=>1000,44333=>1000,44334=>1000,44335=>1000,44336=>1000,44337=>1000,44338=>1000,44339=>1000,44340=>1000,44341=>1000,44342=>1000,44343=>1000,44344=>1000,44345=>1000,44346=>1000,44347=>1000,44348=>1000,44349=>1000,44350=>1000,44351=>1000,44352=>1000,44353=>1000,44354=>1000,44355=>1000,44356=>1000,44357=>1000,44358=>1000,44359=>1000,44360=>1000,44361=>1000,44362=>1000,44363=>1000,44364=>1000,44365=>1000,44366=>1000,44367=>1000,44368=>1000,44369=>1000,44370=>1000,44371=>1000,44372=>1000,44373=>1000,44374=>1000,44375=>1000,44376=>1000,44377=>1000,44378=>1000,44379=>1000,44380=>1000,44381=>1000,44382=>1000,44383=>1000,44384=>1000,44385=>1000,44386=>1000,44387=>1000,44388=>1000,44389=>1000,44390=>1000,44391=>1000,44392=>1000,44393=>1000,44394=>1000,44395=>1000,44396=>1000,44397=>1000,44398=>1000,44399=>1000,44400=>1000,44401=>1000,44402=>1000,44403=>1000,44404=>1000,44405=>1000,44406=>1000,44407=>1000,44408=>1000,44409=>1000,44410=>1000,44411=>1000,44412=>1000,44413=>1000,44414=>1000,44415=>1000,44416=>1000,44417=>1000,44418=>1000,44419=>1000,44420=>1000,44421=>1000,44422=>1000,44423=>1000,44424=>1000,44425=>1000,44426=>1000,44427=>1000,44428=>1000,44429=>1000,44430=>1000,44431=>1000,44432=>1000,44433=>1000,44434=>1000,44435=>1000,44436=>1000,44437=>1000,44438=>1000,44439=>1000,44440=>1000,44441=>1000,44442=>1000,44443=>1000,44444=>1000,44445=>1000,44446=>1000,44447=>1000,44448=>1000,44449=>1000,44450=>1000,44451=>1000,44452=>1000,44453=>1000,44454=>1000,44455=>1000,44456=>1000,44457=>1000,44458=>1000,44459=>1000,44460=>1000,44461=>1000,44462=>1000,44463=>1000,44464=>1000,44465=>1000,44466=>1000,44467=>1000,44468=>1000,44469=>1000,44470=>1000,44471=>1000,44472=>1000,44473=>1000,44474=>1000,44475=>1000,44476=>1000,44477=>1000,44478=>1000,44479=>1000,44480=>1000,44481=>1000,44482=>1000,44483=>1000,44484=>1000,44485=>1000,44486=>1000,44487=>1000,44488=>1000,44489=>1000,44490=>1000,44491=>1000,44492=>1000,44493=>1000,44494=>1000,44495=>1000,44496=>1000,44497=>1000,44498=>1000,44499=>1000,44500=>1000,44501=>1000,44502=>1000,44503=>1000,44504=>1000,44505=>1000,44506=>1000,44507=>1000,44508=>1000,44509=>1000,44510=>1000,44511=>1000,44512=>1000,44513=>1000,44514=>1000,44515=>1000,44516=>1000,44517=>1000,44518=>1000,44519=>1000,44520=>1000,44521=>1000,44522=>1000,44523=>1000,44524=>1000,44525=>1000,44526=>1000,44527=>1000,44528=>1000,44529=>1000,44530=>1000,44531=>1000,44532=>1000,44533=>1000,44534=>1000,44535=>1000,44536=>1000,44537=>1000,44538=>1000,44539=>1000,44540=>1000,44541=>1000,44542=>1000,44543=>1000,44544=>1000,44545=>1000,44546=>1000,44547=>1000,44548=>1000,44549=>1000,44550=>1000,44551=>1000,44552=>1000,44553=>1000,44554=>1000,44555=>1000,44556=>1000,44557=>1000,44558=>1000,44559=>1000,44560=>1000,44561=>1000,44562=>1000,44563=>1000,44564=>1000,44565=>1000,44566=>1000,44567=>1000,44568=>1000,44569=>1000,44570=>1000,44571=>1000,44572=>1000,44573=>1000,44574=>1000,44575=>1000,44576=>1000,44577=>1000,44578=>1000,44579=>1000,44580=>1000,44581=>1000,44582=>1000,44583=>1000,44584=>1000,44585=>1000,44586=>1000,44587=>1000,44588=>1000,44589=>1000,44590=>1000,44591=>1000,44592=>1000,44593=>1000,44594=>1000,44595=>1000,44596=>1000,44597=>1000,44598=>1000,44599=>1000,44600=>1000,44601=>1000,44602=>1000,44603=>1000,44604=>1000,44605=>1000,44606=>1000,44607=>1000,44608=>1000,44609=>1000,44610=>1000,44611=>1000,44612=>1000,44613=>1000,44614=>1000,44615=>1000,44616=>1000,44617=>1000,44618=>1000,44619=>1000,44620=>1000,44621=>1000,44622=>1000,44623=>1000,44624=>1000,44625=>1000,44626=>1000,44627=>1000,44628=>1000,44629=>1000,44630=>1000,44631=>1000,44632=>1000,44633=>1000,44634=>1000,44635=>1000,44636=>1000,44637=>1000,44638=>1000,44639=>1000,44640=>1000,44641=>1000,44642=>1000,44643=>1000,44644=>1000,44645=>1000,44646=>1000,44647=>1000,44648=>1000,44649=>1000,44650=>1000,44651=>1000,44652=>1000,44653=>1000,44654=>1000,44655=>1000,44656=>1000,44657=>1000,44658=>1000,44659=>1000,44660=>1000,44661=>1000,44662=>1000,44663=>1000,44664=>1000,44665=>1000,44666=>1000,44667=>1000,44668=>1000,44669=>1000,44670=>1000,44671=>1000,44672=>1000,44673=>1000,44674=>1000,44675=>1000,44676=>1000,44677=>1000,44678=>1000,44679=>1000,44680=>1000,44681=>1000,44682=>1000,44683=>1000,44684=>1000,44685=>1000,44686=>1000,44687=>1000,44688=>1000,44689=>1000,44690=>1000,44691=>1000,44692=>1000,44693=>1000,44694=>1000,44695=>1000,44696=>1000,44697=>1000,44698=>1000,44699=>1000,44700=>1000,44701=>1000,44702=>1000,44703=>1000,44704=>1000,44705=>1000,44706=>1000,44707=>1000,44708=>1000,44709=>1000,44710=>1000,44711=>1000,44712=>1000,44713=>1000,44714=>1000,44715=>1000,44716=>1000,44717=>1000,44718=>1000,44719=>1000,44720=>1000,44721=>1000,44722=>1000,44723=>1000,44724=>1000,44725=>1000,44726=>1000,44727=>1000,44728=>1000,44729=>1000,44730=>1000,44731=>1000,44732=>1000,44733=>1000,44734=>1000,44735=>1000,44736=>1000,44737=>1000,44738=>1000,44739=>1000,44740=>1000,44741=>1000,44742=>1000,44743=>1000,44744=>1000,44745=>1000,44746=>1000,44747=>1000,44748=>1000,44749=>1000,44750=>1000,44751=>1000,44752=>1000,44753=>1000,44754=>1000,44755=>1000,44756=>1000,44757=>1000,44758=>1000,44759=>1000,44760=>1000,44761=>1000,44762=>1000,44763=>1000,44764=>1000,44765=>1000,44766=>1000,44767=>1000,44768=>1000,44769=>1000,44770=>1000,44771=>1000,44772=>1000,44773=>1000,44774=>1000,44775=>1000,44776=>1000,44777=>1000,44778=>1000,44779=>1000,44780=>1000,44781=>1000,44782=>1000,44783=>1000,44784=>1000,44785=>1000,44786=>1000,44787=>1000,44788=>1000,44789=>1000,44790=>1000,44791=>1000,44792=>1000,44793=>1000,44794=>1000,44795=>1000,44796=>1000,44797=>1000,44798=>1000,44799=>1000,44800=>1000,44801=>1000,44802=>1000,44803=>1000,44804=>1000,44805=>1000,44806=>1000,44807=>1000,44808=>1000,44809=>1000,44810=>1000,44811=>1000,44812=>1000,44813=>1000,44814=>1000,44815=>1000,44816=>1000,44817=>1000,44818=>1000,44819=>1000,44820=>1000,44821=>1000,44822=>1000,44823=>1000,44824=>1000,44825=>1000,44826=>1000,44827=>1000,44828=>1000,44829=>1000,44830=>1000,44831=>1000,44832=>1000,44833=>1000,44834=>1000,44835=>1000,44836=>1000,44837=>1000,44838=>1000,44839=>1000,44840=>1000,44841=>1000,44842=>1000,44843=>1000,44844=>1000,44845=>1000,44846=>1000,44847=>1000,44848=>1000,44849=>1000,44850=>1000,44851=>1000,44852=>1000,44853=>1000,44854=>1000,44855=>1000,44856=>1000,44857=>1000,44858=>1000,44859=>1000,44860=>1000,44861=>1000,44862=>1000,44863=>1000,44864=>1000,44865=>1000,44866=>1000,44867=>1000,44868=>1000,44869=>1000,44870=>1000,44871=>1000,44872=>1000,44873=>1000,44874=>1000,44875=>1000,44876=>1000,44877=>1000,44878=>1000,44879=>1000,44880=>1000,44881=>1000,44882=>1000,44883=>1000,44884=>1000,44885=>1000,44886=>1000,44887=>1000,44888=>1000,44889=>1000,44890=>1000,44891=>1000,44892=>1000,44893=>1000,44894=>1000,44895=>1000,44896=>1000,44897=>1000,44898=>1000,44899=>1000,44900=>1000,44901=>1000,44902=>1000,44903=>1000,44904=>1000,44905=>1000,44906=>1000,44907=>1000,44908=>1000,44909=>1000,44910=>1000,44911=>1000,44912=>1000,44913=>1000,44914=>1000,44915=>1000,44916=>1000,44917=>1000,44918=>1000,44919=>1000,44920=>1000,44921=>1000,44922=>1000,44923=>1000,44924=>1000,44925=>1000,44926=>1000,44927=>1000,44928=>1000,44929=>1000,44930=>1000,44931=>1000,44932=>1000,44933=>1000,44934=>1000,44935=>1000,44936=>1000,44937=>1000,44938=>1000,44939=>1000,44940=>1000,44941=>1000,44942=>1000,44943=>1000,44944=>1000,44945=>1000,44946=>1000,44947=>1000,44948=>1000,44949=>1000,44950=>1000,44951=>1000,44952=>1000,44953=>1000,44954=>1000,44955=>1000,44956=>1000,44957=>1000,44958=>1000,44959=>1000,44960=>1000,44961=>1000,44962=>1000,44963=>1000,44964=>1000,44965=>1000,44966=>1000,44967=>1000,44968=>1000,44969=>1000,44970=>1000,44971=>1000,44972=>1000,44973=>1000,44974=>1000,44975=>1000,44976=>1000,44977=>1000,44978=>1000,44979=>1000,44980=>1000,44981=>1000,44982=>1000,44983=>1000,44984=>1000,44985=>1000,44986=>1000,44987=>1000,44988=>1000,44989=>1000,44990=>1000,44991=>1000,44992=>1000,44993=>1000,44994=>1000,44995=>1000,44996=>1000,44997=>1000,44998=>1000,44999=>1000,45000=>1000,45001=>1000,45002=>1000,45003=>1000,45004=>1000,45005=>1000,45006=>1000,45007=>1000,45008=>1000,45009=>1000,45010=>1000,45011=>1000,45012=>1000,45013=>1000,45014=>1000,45015=>1000,45016=>1000,45017=>1000,45018=>1000,45019=>1000,45020=>1000,45021=>1000,45022=>1000,45023=>1000,45024=>1000,45025=>1000,45026=>1000,45027=>1000,45028=>1000,45029=>1000,45030=>1000,45031=>1000,45032=>1000,45033=>1000,45034=>1000,45035=>1000,45036=>1000,45037=>1000,45038=>1000,45039=>1000,45040=>1000,45041=>1000,45042=>1000,45043=>1000,45044=>1000,45045=>1000,45046=>1000,45047=>1000,45048=>1000,45049=>1000,45050=>1000,45051=>1000,45052=>1000,45053=>1000,45054=>1000,45055=>1000,45056=>1000,45057=>1000,45058=>1000,45059=>1000,45060=>1000,45061=>1000,45062=>1000,45063=>1000,45064=>1000,45065=>1000,45066=>1000,45067=>1000,45068=>1000,45069=>1000,45070=>1000,45071=>1000,45072=>1000,45073=>1000,45074=>1000,45075=>1000,45076=>1000,45077=>1000,45078=>1000,45079=>1000,45080=>1000,45081=>1000,45082=>1000,45083=>1000,45084=>1000,45085=>1000,45086=>1000,45087=>1000,45088=>1000,45089=>1000,45090=>1000,45091=>1000,45092=>1000,45093=>1000,45094=>1000,45095=>1000,45096=>1000,45097=>1000,45098=>1000,45099=>1000,45100=>1000,45101=>1000,45102=>1000,45103=>1000,45104=>1000,45105=>1000,45106=>1000,45107=>1000,45108=>1000,45109=>1000,45110=>1000,45111=>1000,45112=>1000,45113=>1000,45114=>1000,45115=>1000,45116=>1000,45117=>1000,45118=>1000,45119=>1000,45120=>1000,45121=>1000,45122=>1000,45123=>1000,45124=>1000,45125=>1000,45126=>1000,45127=>1000,45128=>1000,45129=>1000,45130=>1000,45131=>1000,45132=>1000,45133=>1000,45134=>1000,45135=>1000,45136=>1000,45137=>1000,45138=>1000,45139=>1000,45140=>1000,45141=>1000,45142=>1000,45143=>1000,45144=>1000,45145=>1000,45146=>1000,45147=>1000,45148=>1000,45149=>1000,45150=>1000,45151=>1000,45152=>1000,45153=>1000,45154=>1000,45155=>1000,45156=>1000,45157=>1000,45158=>1000,45159=>1000,45160=>1000,45161=>1000,45162=>1000,45163=>1000,45164=>1000,45165=>1000,45166=>1000,45167=>1000,45168=>1000,45169=>1000,45170=>1000,45171=>1000,45172=>1000,45173=>1000,45174=>1000,45175=>1000,45176=>1000,45177=>1000,45178=>1000,45179=>1000,45180=>1000,45181=>1000,45182=>1000,45183=>1000,45184=>1000,45185=>1000,45186=>1000,45187=>1000,45188=>1000,45189=>1000,45190=>1000,45191=>1000,45192=>1000,45193=>1000,45194=>1000,45195=>1000,45196=>1000,45197=>1000,45198=>1000,45199=>1000,45200=>1000,45201=>1000,45202=>1000,45203=>1000,45204=>1000,45205=>1000,45206=>1000,45207=>1000,45208=>1000,45209=>1000,45210=>1000,45211=>1000,45212=>1000,45213=>1000,45214=>1000,45215=>1000,45216=>1000,45217=>1000,45218=>1000,45219=>1000,45220=>1000,45221=>1000,45222=>1000,45223=>1000,45224=>1000,45225=>1000,45226=>1000,45227=>1000,45228=>1000,45229=>1000,45230=>1000,45231=>1000,45232=>1000,45233=>1000,45234=>1000,45235=>1000,45236=>1000,45237=>1000,45238=>1000,45239=>1000,45240=>1000,45241=>1000,45242=>1000,45243=>1000,45244=>1000,45245=>1000,45246=>1000,45247=>1000,45248=>1000,45249=>1000,45250=>1000,45251=>1000,45252=>1000,45253=>1000,45254=>1000,45255=>1000,45256=>1000,45257=>1000,45258=>1000,45259=>1000,45260=>1000,45261=>1000,45262=>1000,45263=>1000,45264=>1000,45265=>1000,45266=>1000,45267=>1000,45268=>1000,45269=>1000,45270=>1000,45271=>1000,45272=>1000,45273=>1000,45274=>1000,45275=>1000,45276=>1000,45277=>1000,45278=>1000,45279=>1000,45280=>1000,45281=>1000,45282=>1000,45283=>1000,45284=>1000,45285=>1000,45286=>1000,45287=>1000,45288=>1000,45289=>1000,45290=>1000,45291=>1000,45292=>1000,45293=>1000,45294=>1000,45295=>1000,45296=>1000,45297=>1000,45298=>1000,45299=>1000,45300=>1000,45301=>1000,45302=>1000,45303=>1000,45304=>1000,45305=>1000,45306=>1000,45307=>1000,45308=>1000,45309=>1000,45310=>1000,45311=>1000,45312=>1000,45313=>1000,45314=>1000,45315=>1000,45316=>1000,45317=>1000,45318=>1000,45319=>1000,45320=>1000,45321=>1000,45322=>1000,45323=>1000,45324=>1000,45325=>1000,45326=>1000,45327=>1000,45328=>1000,45329=>1000,45330=>1000,45331=>1000,45332=>1000,45333=>1000,45334=>1000,45335=>1000,45336=>1000,45337=>1000,45338=>1000,45339=>1000,45340=>1000,45341=>1000,45342=>1000,45343=>1000,45344=>1000,45345=>1000,45346=>1000,45347=>1000,45348=>1000,45349=>1000,45350=>1000,45351=>1000,45352=>1000,45353=>1000,45354=>1000,45355=>1000,45356=>1000,45357=>1000,45358=>1000,45359=>1000,45360=>1000,45361=>1000,45362=>1000,45363=>1000,45364=>1000,45365=>1000,45366=>1000,45367=>1000,45368=>1000,45369=>1000,45370=>1000,45371=>1000,45372=>1000,45373=>1000,45374=>1000,45375=>1000,45376=>1000,45377=>1000,45378=>1000,45379=>1000,45380=>1000,45381=>1000,45382=>1000,45383=>1000,45384=>1000,45385=>1000,45386=>1000,45387=>1000,45388=>1000,45389=>1000,45390=>1000,45391=>1000,45392=>1000,45393=>1000,45394=>1000,45395=>1000,45396=>1000,45397=>1000,45398=>1000,45399=>1000,45400=>1000,45401=>1000,45402=>1000,45403=>1000,45404=>1000,45405=>1000,45406=>1000,45407=>1000,45408=>1000,45409=>1000,45410=>1000,45411=>1000,45412=>1000,45413=>1000,45414=>1000,45415=>1000,45416=>1000,45417=>1000,45418=>1000,45419=>1000,45420=>1000,45421=>1000,45422=>1000,45423=>1000,45424=>1000,45425=>1000,45426=>1000,45427=>1000,45428=>1000,45429=>1000,45430=>1000,45431=>1000,45432=>1000,45433=>1000,45434=>1000,45435=>1000,45436=>1000,45437=>1000,45438=>1000,45439=>1000,45440=>1000,45441=>1000,45442=>1000,45443=>1000,45444=>1000,45445=>1000,45446=>1000,45447=>1000,45448=>1000,45449=>1000,45450=>1000,45451=>1000,45452=>1000,45453=>1000,45454=>1000,45455=>1000,45456=>1000,45457=>1000,45458=>1000,45459=>1000,45460=>1000,45461=>1000,45462=>1000,45463=>1000,45464=>1000,45465=>1000,45466=>1000,45467=>1000,45468=>1000,45469=>1000,45470=>1000,45471=>1000,45472=>1000,45473=>1000,45474=>1000,45475=>1000,45476=>1000,45477=>1000,45478=>1000,45479=>1000,45480=>1000,45481=>1000,45482=>1000,45483=>1000,45484=>1000,45485=>1000,45486=>1000,45487=>1000,45488=>1000,45489=>1000,45490=>1000,45491=>1000,45492=>1000,45493=>1000,45494=>1000,45495=>1000,45496=>1000,45497=>1000,45498=>1000,45499=>1000,45500=>1000,45501=>1000,45502=>1000,45503=>1000,45504=>1000,45505=>1000,45506=>1000,45507=>1000,45508=>1000,45509=>1000,45510=>1000,45511=>1000,45512=>1000,45513=>1000,45514=>1000,45515=>1000,45516=>1000,45517=>1000,45518=>1000,45519=>1000,45520=>1000,45521=>1000,45522=>1000,45523=>1000,45524=>1000,45525=>1000,45526=>1000,45527=>1000,45528=>1000,45529=>1000,45530=>1000,45531=>1000,45532=>1000,45533=>1000,45534=>1000,45535=>1000,45536=>1000,45537=>1000,45538=>1000,45539=>1000,45540=>1000,45541=>1000,45542=>1000,45543=>1000,45544=>1000,45545=>1000,45546=>1000,45547=>1000,45548=>1000,45549=>1000,45550=>1000,45551=>1000,45552=>1000,45553=>1000,45554=>1000,45555=>1000,45556=>1000,45557=>1000,45558=>1000,45559=>1000,45560=>1000,45561=>1000,45562=>1000,45563=>1000,45564=>1000,45565=>1000,45566=>1000,45567=>1000,45568=>1000,45569=>1000,45570=>1000,45571=>1000,45572=>1000,45573=>1000,45574=>1000,45575=>1000,45576=>1000,45577=>1000,45578=>1000,45579=>1000,45580=>1000,45581=>1000,45582=>1000,45583=>1000,45584=>1000,45585=>1000,45586=>1000,45587=>1000,45588=>1000,45589=>1000,45590=>1000,45591=>1000,45592=>1000,45593=>1000,45594=>1000,45595=>1000,45596=>1000,45597=>1000,45598=>1000,45599=>1000,45600=>1000,45601=>1000,45602=>1000,45603=>1000,45604=>1000,45605=>1000,45606=>1000,45607=>1000,45608=>1000,45609=>1000,45610=>1000,45611=>1000,45612=>1000,45613=>1000,45614=>1000,45615=>1000,45616=>1000,45617=>1000,45618=>1000,45619=>1000,45620=>1000,45621=>1000,45622=>1000,45623=>1000,45624=>1000,45625=>1000,45626=>1000,45627=>1000,45628=>1000,45629=>1000,45630=>1000,45631=>1000,45632=>1000,45633=>1000,45634=>1000,45635=>1000,45636=>1000,45637=>1000,45638=>1000,45639=>1000,45640=>1000,45641=>1000,45642=>1000,45643=>1000,45644=>1000,45645=>1000,45646=>1000,45647=>1000,45648=>1000,45649=>1000,45650=>1000,45651=>1000,45652=>1000,45653=>1000,45654=>1000,45655=>1000,45656=>1000,45657=>1000,45658=>1000,45659=>1000,45660=>1000,45661=>1000,45662=>1000,45663=>1000,45664=>1000,45665=>1000,45666=>1000,45667=>1000,45668=>1000,45669=>1000,45670=>1000,45671=>1000,45672=>1000,45673=>1000,45674=>1000,45675=>1000,45676=>1000,45677=>1000,45678=>1000,45679=>1000,45680=>1000,45681=>1000,45682=>1000,45683=>1000,45684=>1000,45685=>1000,45686=>1000,45687=>1000,45688=>1000,45689=>1000,45690=>1000,45691=>1000,45692=>1000,45693=>1000,45694=>1000,45695=>1000,45696=>1000,45697=>1000,45698=>1000,45699=>1000,45700=>1000,45701=>1000,45702=>1000,45703=>1000,45704=>1000,45705=>1000,45706=>1000,45707=>1000,45708=>1000,45709=>1000,45710=>1000,45711=>1000,45712=>1000,45713=>1000,45714=>1000,45715=>1000,45716=>1000,45717=>1000,45718=>1000,45719=>1000,45720=>1000,45721=>1000,45722=>1000,45723=>1000,45724=>1000,45725=>1000,45726=>1000,45727=>1000,45728=>1000,45729=>1000,45730=>1000,45731=>1000,45732=>1000,45733=>1000,45734=>1000,45735=>1000,45736=>1000,45737=>1000,45738=>1000,45739=>1000,45740=>1000,45741=>1000,45742=>1000,45743=>1000,45744=>1000,45745=>1000,45746=>1000,45747=>1000,45748=>1000,45749=>1000,45750=>1000,45751=>1000,45752=>1000,45753=>1000,45754=>1000,45755=>1000,45756=>1000,45757=>1000,45758=>1000,45759=>1000,45760=>1000,45761=>1000,45762=>1000,45763=>1000,45764=>1000,45765=>1000,45766=>1000,45767=>1000,45768=>1000,45769=>1000,45770=>1000,45771=>1000,45772=>1000,45773=>1000,45774=>1000,45775=>1000,45776=>1000,45777=>1000,45778=>1000,45779=>1000,45780=>1000,45781=>1000,45782=>1000,45783=>1000,45784=>1000,45785=>1000,45786=>1000,45787=>1000,45788=>1000,45789=>1000,45790=>1000,45791=>1000,45792=>1000,45793=>1000,45794=>1000,45795=>1000,45796=>1000,45797=>1000,45798=>1000,45799=>1000,45800=>1000,45801=>1000,45802=>1000,45803=>1000,45804=>1000,45805=>1000,45806=>1000,45807=>1000,45808=>1000,45809=>1000,45810=>1000,45811=>1000,45812=>1000,45813=>1000,45814=>1000,45815=>1000,45816=>1000,45817=>1000,45818=>1000,45819=>1000,45820=>1000,45821=>1000,45822=>1000,45823=>1000,45824=>1000,45825=>1000,45826=>1000,45827=>1000,45828=>1000,45829=>1000,45830=>1000,45831=>1000,45832=>1000,45833=>1000,45834=>1000,45835=>1000,45836=>1000,45837=>1000,45838=>1000,45839=>1000,45840=>1000,45841=>1000,45842=>1000,45843=>1000,45844=>1000,45845=>1000,45846=>1000,45847=>1000,45848=>1000,45849=>1000,45850=>1000,45851=>1000,45852=>1000,45853=>1000,45854=>1000,45855=>1000,45856=>1000,45857=>1000,45858=>1000,45859=>1000,45860=>1000,45861=>1000,45862=>1000,45863=>1000,45864=>1000,45865=>1000,45866=>1000,45867=>1000,45868=>1000,45869=>1000,45870=>1000,45871=>1000,45872=>1000,45873=>1000,45874=>1000,45875=>1000,45876=>1000,45877=>1000,45878=>1000,45879=>1000,45880=>1000,45881=>1000,45882=>1000,45883=>1000,45884=>1000,45885=>1000,45886=>1000,45887=>1000,45888=>1000,45889=>1000,45890=>1000,45891=>1000,45892=>1000,45893=>1000,45894=>1000,45895=>1000,45896=>1000,45897=>1000,45898=>1000,45899=>1000,45900=>1000,45901=>1000,45902=>1000,45903=>1000,45904=>1000,45905=>1000,45906=>1000,45907=>1000,45908=>1000,45909=>1000,45910=>1000,45911=>1000,45912=>1000,45913=>1000,45914=>1000,45915=>1000,45916=>1000,45917=>1000,45918=>1000,45919=>1000,45920=>1000,45921=>1000,45922=>1000,45923=>1000,45924=>1000,45925=>1000,45926=>1000,45927=>1000,45928=>1000,45929=>1000,45930=>1000,45931=>1000,45932=>1000,45933=>1000,45934=>1000,45935=>1000,45936=>1000,45937=>1000,45938=>1000,45939=>1000,45940=>1000,45941=>1000,45942=>1000,45943=>1000,45944=>1000,45945=>1000,45946=>1000,45947=>1000,45948=>1000,45949=>1000,45950=>1000,45951=>1000,45952=>1000,45953=>1000,45954=>1000,45955=>1000,45956=>1000,45957=>1000,45958=>1000,45959=>1000,45960=>1000,45961=>1000,45962=>1000,45963=>1000,45964=>1000,45965=>1000,45966=>1000,45967=>1000,45968=>1000,45969=>1000,45970=>1000,45971=>1000,45972=>1000,45973=>1000,45974=>1000,45975=>1000,45976=>1000,45977=>1000,45978=>1000,45979=>1000,45980=>1000,45981=>1000,45982=>1000,45983=>1000,45984=>1000,45985=>1000,45986=>1000,45987=>1000,45988=>1000,45989=>1000,45990=>1000,45991=>1000,45992=>1000,45993=>1000,45994=>1000,45995=>1000,45996=>1000,45997=>1000,45998=>1000,45999=>1000,46000=>1000,46001=>1000,46002=>1000,46003=>1000,46004=>1000,46005=>1000,46006=>1000,46007=>1000,46008=>1000,46009=>1000,46010=>1000,46011=>1000,46012=>1000,46013=>1000,46014=>1000,46015=>1000,46016=>1000,46017=>1000,46018=>1000,46019=>1000,46020=>1000,46021=>1000,46022=>1000,46023=>1000,46024=>1000,46025=>1000,46026=>1000,46027=>1000,46028=>1000,46029=>1000,46030=>1000,46031=>1000,46032=>1000,46033=>1000,46034=>1000,46035=>1000,46036=>1000,46037=>1000,46038=>1000,46039=>1000,46040=>1000,46041=>1000,46042=>1000,46043=>1000,46044=>1000,46045=>1000,46046=>1000,46047=>1000,46048=>1000,46049=>1000,46050=>1000,46051=>1000,46052=>1000,46053=>1000,46054=>1000,46055=>1000,46056=>1000,46057=>1000,46058=>1000,46059=>1000,46060=>1000,46061=>1000,46062=>1000,46063=>1000,46064=>1000,46065=>1000,46066=>1000,46067=>1000,46068=>1000,46069=>1000,46070=>1000,46071=>1000,46072=>1000,46073=>1000,46074=>1000,46075=>1000,46076=>1000,46077=>1000,46078=>1000,46079=>1000,46080=>1000,46081=>1000,46082=>1000,46083=>1000,46084=>1000,46085=>1000,46086=>1000,46087=>1000,46088=>1000,46089=>1000,46090=>1000,46091=>1000,46092=>1000,46093=>1000,46094=>1000,46095=>1000,46096=>1000,46097=>1000,46098=>1000,46099=>1000,46100=>1000,46101=>1000,46102=>1000,46103=>1000,46104=>1000,46105=>1000,46106=>1000,46107=>1000,46108=>1000,46109=>1000,46110=>1000,46111=>1000,46112=>1000,46113=>1000,46114=>1000,46115=>1000,46116=>1000,46117=>1000,46118=>1000,46119=>1000,46120=>1000,46121=>1000,46122=>1000,46123=>1000,46124=>1000,46125=>1000,46126=>1000,46127=>1000,46128=>1000,46129=>1000,46130=>1000,46131=>1000,46132=>1000,46133=>1000,46134=>1000,46135=>1000,46136=>1000,46137=>1000,46138=>1000,46139=>1000,46140=>1000,46141=>1000,46142=>1000,46143=>1000,46144=>1000,46145=>1000,46146=>1000,46147=>1000,46148=>1000,46149=>1000,46150=>1000,46151=>1000,46152=>1000,46153=>1000,46154=>1000,46155=>1000,46156=>1000,46157=>1000,46158=>1000,46159=>1000,46160=>1000,46161=>1000,46162=>1000,46163=>1000,46164=>1000,46165=>1000,46166=>1000,46167=>1000,46168=>1000,46169=>1000,46170=>1000,46171=>1000,46172=>1000,46173=>1000,46174=>1000,46175=>1000,46176=>1000,46177=>1000,46178=>1000,46179=>1000,46180=>1000,46181=>1000,46182=>1000,46183=>1000,46184=>1000,46185=>1000,46186=>1000,46187=>1000,46188=>1000,46189=>1000,46190=>1000,46191=>1000,46192=>1000,46193=>1000,46194=>1000,46195=>1000,46196=>1000,46197=>1000,46198=>1000,46199=>1000,46200=>1000,46201=>1000,46202=>1000,46203=>1000,46204=>1000,46205=>1000,46206=>1000,46207=>1000,46208=>1000,46209=>1000,46210=>1000,46211=>1000,46212=>1000,46213=>1000,46214=>1000,46215=>1000,46216=>1000,46217=>1000,46218=>1000,46219=>1000,46220=>1000,46221=>1000,46222=>1000,46223=>1000,46224=>1000,46225=>1000,46226=>1000,46227=>1000,46228=>1000,46229=>1000,46230=>1000,46231=>1000,46232=>1000,46233=>1000,46234=>1000,46235=>1000,46236=>1000,46237=>1000,46238=>1000,46239=>1000,46240=>1000,46241=>1000,46242=>1000,46243=>1000,46244=>1000,46245=>1000,46246=>1000,46247=>1000,46248=>1000,46249=>1000,46250=>1000,46251=>1000,46252=>1000,46253=>1000,46254=>1000,46255=>1000,46256=>1000,46257=>1000,46258=>1000,46259=>1000,46260=>1000,46261=>1000,46262=>1000,46263=>1000,46264=>1000,46265=>1000,46266=>1000,46267=>1000,46268=>1000,46269=>1000,46270=>1000,46271=>1000,46272=>1000,46273=>1000,46274=>1000,46275=>1000,46276=>1000,46277=>1000,46278=>1000,46279=>1000,46280=>1000,46281=>1000,46282=>1000,46283=>1000,46284=>1000,46285=>1000,46286=>1000,46287=>1000,46288=>1000,46289=>1000,46290=>1000,46291=>1000,46292=>1000,46293=>1000,46294=>1000,46295=>1000,46296=>1000,46297=>1000,46298=>1000,46299=>1000,46300=>1000,46301=>1000,46302=>1000,46303=>1000,46304=>1000,46305=>1000,46306=>1000,46307=>1000,46308=>1000,46309=>1000,46310=>1000,46311=>1000,46312=>1000,46313=>1000,46314=>1000,46315=>1000,46316=>1000,46317=>1000,46318=>1000,46319=>1000,46320=>1000,46321=>1000,46322=>1000,46323=>1000,46324=>1000,46325=>1000,46326=>1000,46327=>1000,46328=>1000,46329=>1000,46330=>1000,46331=>1000,46332=>1000,46333=>1000,46334=>1000,46335=>1000,46336=>1000,46337=>1000,46338=>1000,46339=>1000,46340=>1000,46341=>1000,46342=>1000,46343=>1000,46344=>1000,46345=>1000,46346=>1000,46347=>1000,46348=>1000,46349=>1000,46350=>1000,46351=>1000,46352=>1000,46353=>1000,46354=>1000,46355=>1000,46356=>1000,46357=>1000,46358=>1000,46359=>1000,46360=>1000,46361=>1000,46362=>1000,46363=>1000,46364=>1000,46365=>1000,46366=>1000,46367=>1000,46368=>1000,46369=>1000,46370=>1000,46371=>1000,46372=>1000,46373=>1000,46374=>1000,46375=>1000,46376=>1000,46377=>1000,46378=>1000,46379=>1000,46380=>1000,46381=>1000,46382=>1000,46383=>1000,46384=>1000,46385=>1000,46386=>1000,46387=>1000,46388=>1000,46389=>1000,46390=>1000,46391=>1000,46392=>1000,46393=>1000,46394=>1000,46395=>1000,46396=>1000,46397=>1000,46398=>1000,46399=>1000,46400=>1000,46401=>1000,46402=>1000,46403=>1000,46404=>1000,46405=>1000,46406=>1000,46407=>1000,46408=>1000,46409=>1000,46410=>1000,46411=>1000,46412=>1000,46413=>1000,46414=>1000,46415=>1000,46416=>1000,46417=>1000,46418=>1000,46419=>1000,46420=>1000,46421=>1000,46422=>1000,46423=>1000,46424=>1000,46425=>1000,46426=>1000,46427=>1000,46428=>1000,46429=>1000,46430=>1000,46431=>1000,46432=>1000,46433=>1000,46434=>1000,46435=>1000,46436=>1000,46437=>1000,46438=>1000,46439=>1000,46440=>1000,46441=>1000,46442=>1000,46443=>1000,46444=>1000,46445=>1000,46446=>1000,46447=>1000,46448=>1000,46449=>1000,46450=>1000,46451=>1000,46452=>1000,46453=>1000,46454=>1000,46455=>1000,46456=>1000,46457=>1000,46458=>1000,46459=>1000,46460=>1000,46461=>1000,46462=>1000,46463=>1000,46464=>1000,46465=>1000,46466=>1000,46467=>1000,46468=>1000,46469=>1000,46470=>1000,46471=>1000,46472=>1000,46473=>1000,46474=>1000,46475=>1000,46476=>1000,46477=>1000,46478=>1000,46479=>1000,46480=>1000,46481=>1000,46482=>1000,46483=>1000,46484=>1000,46485=>1000,46486=>1000,46487=>1000,46488=>1000,46489=>1000,46490=>1000,46491=>1000,46492=>1000,46493=>1000,46494=>1000,46495=>1000,46496=>1000,46497=>1000,46498=>1000,46499=>1000,46500=>1000,46501=>1000,46502=>1000,46503=>1000,46504=>1000,46505=>1000,46506=>1000,46507=>1000,46508=>1000,46509=>1000,46510=>1000,46511=>1000,46512=>1000,46513=>1000,46514=>1000,46515=>1000,46516=>1000,46517=>1000,46518=>1000,46519=>1000,46520=>1000,46521=>1000,46522=>1000,46523=>1000,46524=>1000,46525=>1000,46526=>1000,46527=>1000,46528=>1000,46529=>1000,46530=>1000,46531=>1000,46532=>1000,46533=>1000,46534=>1000,46535=>1000,46536=>1000,46537=>1000,46538=>1000,46539=>1000,46540=>1000,46541=>1000,46542=>1000,46543=>1000,46544=>1000,46545=>1000,46546=>1000,46547=>1000,46548=>1000,46549=>1000,46550=>1000,46551=>1000,46552=>1000,46553=>1000,46554=>1000,46555=>1000,46556=>1000,46557=>1000,46558=>1000,46559=>1000,46560=>1000,46561=>1000,46562=>1000,46563=>1000,46564=>1000,46565=>1000,46566=>1000,46567=>1000,46568=>1000,46569=>1000,46570=>1000,46571=>1000,46572=>1000,46573=>1000,46574=>1000,46575=>1000,46576=>1000,46577=>1000,46578=>1000,46579=>1000,46580=>1000,46581=>1000,46582=>1000,46583=>1000,46584=>1000,46585=>1000,46586=>1000,46587=>1000,46588=>1000,46589=>1000,46590=>1000,46591=>1000,46592=>1000,46593=>1000,46594=>1000,46595=>1000,46596=>1000,46597=>1000,46598=>1000,46599=>1000,46600=>1000,46601=>1000,46602=>1000,46603=>1000,46604=>1000,46605=>1000,46606=>1000,46607=>1000,46608=>1000,46609=>1000,46610=>1000,46611=>1000,46612=>1000,46613=>1000,46614=>1000,46615=>1000,46616=>1000,46617=>1000,46618=>1000,46619=>1000,46620=>1000,46621=>1000,46622=>1000,46623=>1000,46624=>1000,46625=>1000,46626=>1000,46627=>1000,46628=>1000,46629=>1000,46630=>1000,46631=>1000,46632=>1000,46633=>1000,46634=>1000,46635=>1000,46636=>1000,46637=>1000,46638=>1000,46639=>1000,46640=>1000,46641=>1000,46642=>1000,46643=>1000,46644=>1000,46645=>1000,46646=>1000,46647=>1000,46648=>1000,46649=>1000,46650=>1000,46651=>1000,46652=>1000,46653=>1000,46654=>1000,46655=>1000,46656=>1000,46657=>1000,46658=>1000,46659=>1000,46660=>1000,46661=>1000,46662=>1000,46663=>1000,46664=>1000,46665=>1000,46666=>1000,46667=>1000,46668=>1000,46669=>1000,46670=>1000,46671=>1000,46672=>1000,46673=>1000,46674=>1000,46675=>1000,46676=>1000,46677=>1000,46678=>1000,46679=>1000,46680=>1000,46681=>1000,46682=>1000,46683=>1000,46684=>1000,46685=>1000,46686=>1000,46687=>1000,46688=>1000,46689=>1000,46690=>1000,46691=>1000,46692=>1000,46693=>1000,46694=>1000,46695=>1000,46696=>1000,46697=>1000,46698=>1000,46699=>1000,46700=>1000,46701=>1000,46702=>1000,46703=>1000,46704=>1000,46705=>1000,46706=>1000,46707=>1000,46708=>1000,46709=>1000,46710=>1000,46711=>1000,46712=>1000,46713=>1000,46714=>1000,46715=>1000,46716=>1000,46717=>1000,46718=>1000,46719=>1000,46720=>1000,46721=>1000,46722=>1000,46723=>1000,46724=>1000,46725=>1000,46726=>1000,46727=>1000,46728=>1000,46729=>1000,46730=>1000,46731=>1000,46732=>1000,46733=>1000,46734=>1000,46735=>1000,46736=>1000,46737=>1000,46738=>1000,46739=>1000,46740=>1000,46741=>1000,46742=>1000,46743=>1000,46744=>1000,46745=>1000,46746=>1000,46747=>1000,46748=>1000,46749=>1000,46750=>1000,46751=>1000,46752=>1000,46753=>1000,46754=>1000,46755=>1000,46756=>1000,46757=>1000,46758=>1000,46759=>1000,46760=>1000,46761=>1000,46762=>1000,46763=>1000,46764=>1000,46765=>1000,46766=>1000,46767=>1000,46768=>1000,46769=>1000,46770=>1000,46771=>1000,46772=>1000,46773=>1000,46774=>1000,46775=>1000,46776=>1000,46777=>1000,46778=>1000,46779=>1000,46780=>1000,46781=>1000,46782=>1000,46783=>1000,46784=>1000,46785=>1000,46786=>1000,46787=>1000,46788=>1000,46789=>1000,46790=>1000,46791=>1000,46792=>1000,46793=>1000,46794=>1000,46795=>1000,46796=>1000,46797=>1000,46798=>1000,46799=>1000,46800=>1000,46801=>1000,46802=>1000,46803=>1000,46804=>1000,46805=>1000,46806=>1000,46807=>1000,46808=>1000,46809=>1000,46810=>1000,46811=>1000,46812=>1000,46813=>1000,46814=>1000,46815=>1000,46816=>1000,46817=>1000,46818=>1000,46819=>1000,46820=>1000,46821=>1000,46822=>1000,46823=>1000,46824=>1000,46825=>1000,46826=>1000,46827=>1000,46828=>1000,46829=>1000,46830=>1000,46831=>1000,46832=>1000,46833=>1000,46834=>1000,46835=>1000,46836=>1000,46837=>1000,46838=>1000,46839=>1000,46840=>1000,46841=>1000,46842=>1000,46843=>1000,46844=>1000,46845=>1000,46846=>1000,46847=>1000,46848=>1000,46849=>1000,46850=>1000,46851=>1000,46852=>1000,46853=>1000,46854=>1000,46855=>1000,46856=>1000,46857=>1000,46858=>1000,46859=>1000,46860=>1000,46861=>1000,46862=>1000,46863=>1000,46864=>1000,46865=>1000,46866=>1000,46867=>1000,46868=>1000,46869=>1000,46870=>1000,46871=>1000,46872=>1000,46873=>1000,46874=>1000,46875=>1000,46876=>1000,46877=>1000,46878=>1000,46879=>1000,46880=>1000,46881=>1000,46882=>1000,46883=>1000,46884=>1000,46885=>1000,46886=>1000,46887=>1000,46888=>1000,46889=>1000,46890=>1000,46891=>1000,46892=>1000,46893=>1000,46894=>1000,46895=>1000,46896=>1000,46897=>1000,46898=>1000,46899=>1000,46900=>1000,46901=>1000,46902=>1000,46903=>1000,46904=>1000,46905=>1000,46906=>1000,46907=>1000,46908=>1000,46909=>1000,46910=>1000,46911=>1000,46912=>1000,46913=>1000,46914=>1000,46915=>1000,46916=>1000,46917=>1000,46918=>1000,46919=>1000,46920=>1000,46921=>1000,46922=>1000,46923=>1000,46924=>1000,46925=>1000,46926=>1000,46927=>1000,46928=>1000,46929=>1000,46930=>1000,46931=>1000,46932=>1000,46933=>1000,46934=>1000,46935=>1000,46936=>1000,46937=>1000,46938=>1000,46939=>1000,46940=>1000,46941=>1000,46942=>1000,46943=>1000,46944=>1000,46945=>1000,46946=>1000,46947=>1000,46948=>1000,46949=>1000,46950=>1000,46951=>1000,46952=>1000,46953=>1000,46954=>1000,46955=>1000,46956=>1000,46957=>1000,46958=>1000,46959=>1000,46960=>1000,46961=>1000,46962=>1000,46963=>1000,46964=>1000,46965=>1000,46966=>1000,46967=>1000,46968=>1000,46969=>1000,46970=>1000,46971=>1000,46972=>1000,46973=>1000,46974=>1000,46975=>1000,46976=>1000,46977=>1000,46978=>1000,46979=>1000,46980=>1000,46981=>1000,46982=>1000,46983=>1000,46984=>1000,46985=>1000,46986=>1000,46987=>1000,46988=>1000,46989=>1000,46990=>1000,46991=>1000,46992=>1000,46993=>1000,46994=>1000,46995=>1000,46996=>1000,46997=>1000,46998=>1000,46999=>1000,47000=>1000,47001=>1000,47002=>1000,47003=>1000,47004=>1000,47005=>1000,47006=>1000,47007=>1000,47008=>1000,47009=>1000,47010=>1000,47011=>1000,47012=>1000,47013=>1000,47014=>1000,47015=>1000,47016=>1000,47017=>1000,47018=>1000,47019=>1000,47020=>1000,47021=>1000,47022=>1000,47023=>1000,47024=>1000,47025=>1000,47026=>1000,47027=>1000,47028=>1000,47029=>1000,47030=>1000,47031=>1000,47032=>1000,47033=>1000,47034=>1000,47035=>1000,47036=>1000,47037=>1000,47038=>1000,47039=>1000,47040=>1000,47041=>1000,47042=>1000,47043=>1000,47044=>1000,47045=>1000,47046=>1000,47047=>1000,47048=>1000,47049=>1000,47050=>1000,47051=>1000,47052=>1000,47053=>1000,47054=>1000,47055=>1000,47056=>1000,47057=>1000,47058=>1000,47059=>1000,47060=>1000,47061=>1000,47062=>1000,47063=>1000,47064=>1000,47065=>1000,47066=>1000,47067=>1000,47068=>1000,47069=>1000,47070=>1000,47071=>1000,47072=>1000,47073=>1000,47074=>1000,47075=>1000,47076=>1000,47077=>1000,47078=>1000,47079=>1000,47080=>1000,47081=>1000,47082=>1000,47083=>1000,47084=>1000,47085=>1000,47086=>1000,47087=>1000,47088=>1000,47089=>1000,47090=>1000,47091=>1000,47092=>1000,47093=>1000,47094=>1000,47095=>1000,47096=>1000,47097=>1000,47098=>1000,47099=>1000,47100=>1000,47101=>1000,47102=>1000,47103=>1000,47104=>1000,47105=>1000,47106=>1000,47107=>1000,47108=>1000,47109=>1000,47110=>1000,47111=>1000,47112=>1000,47113=>1000,47114=>1000,47115=>1000,47116=>1000,47117=>1000,47118=>1000,47119=>1000,47120=>1000,47121=>1000,47122=>1000,47123=>1000,47124=>1000,47125=>1000,47126=>1000,47127=>1000,47128=>1000,47129=>1000,47130=>1000,47131=>1000,47132=>1000,47133=>1000,47134=>1000,47135=>1000,47136=>1000,47137=>1000,47138=>1000,47139=>1000,47140=>1000,47141=>1000,47142=>1000,47143=>1000,47144=>1000,47145=>1000,47146=>1000,47147=>1000,47148=>1000,47149=>1000,47150=>1000,47151=>1000,47152=>1000,47153=>1000,47154=>1000,47155=>1000,47156=>1000,47157=>1000,47158=>1000,47159=>1000,47160=>1000,47161=>1000,47162=>1000,47163=>1000,47164=>1000,47165=>1000,47166=>1000,47167=>1000,47168=>1000,47169=>1000,47170=>1000,47171=>1000,47172=>1000,47173=>1000,47174=>1000,47175=>1000,47176=>1000,47177=>1000,47178=>1000,47179=>1000,47180=>1000,47181=>1000,47182=>1000,47183=>1000,47184=>1000,47185=>1000,47186=>1000,47187=>1000,47188=>1000,47189=>1000,47190=>1000,47191=>1000,47192=>1000,47193=>1000,47194=>1000,47195=>1000,47196=>1000,47197=>1000,47198=>1000,47199=>1000,47200=>1000,47201=>1000,47202=>1000,47203=>1000,47204=>1000,47205=>1000,47206=>1000,47207=>1000,47208=>1000,47209=>1000,47210=>1000,47211=>1000,47212=>1000,47213=>1000,47214=>1000,47215=>1000,47216=>1000,47217=>1000,47218=>1000,47219=>1000,47220=>1000,47221=>1000,47222=>1000,47223=>1000,47224=>1000,47225=>1000,47226=>1000,47227=>1000,47228=>1000,47229=>1000,47230=>1000,47231=>1000,47232=>1000,47233=>1000,47234=>1000,47235=>1000,47236=>1000,47237=>1000,47238=>1000,47239=>1000,47240=>1000,47241=>1000,47242=>1000,47243=>1000,47244=>1000,47245=>1000,47246=>1000,47247=>1000,47248=>1000,47249=>1000,47250=>1000,47251=>1000,47252=>1000,47253=>1000,47254=>1000,47255=>1000,47256=>1000,47257=>1000,47258=>1000,47259=>1000,47260=>1000,47261=>1000,47262=>1000,47263=>1000,47264=>1000,47265=>1000,47266=>1000,47267=>1000,47268=>1000,47269=>1000,47270=>1000,47271=>1000,47272=>1000,47273=>1000,47274=>1000,47275=>1000,47276=>1000,47277=>1000,47278=>1000,47279=>1000,47280=>1000,47281=>1000,47282=>1000,47283=>1000,47284=>1000,47285=>1000,47286=>1000,47287=>1000,47288=>1000,47289=>1000,47290=>1000,47291=>1000,47292=>1000,47293=>1000,47294=>1000,47295=>1000,47296=>1000,47297=>1000,47298=>1000,47299=>1000,47300=>1000,47301=>1000,47302=>1000,47303=>1000,47304=>1000,47305=>1000,47306=>1000,47307=>1000,47308=>1000,47309=>1000,47310=>1000,47311=>1000,47312=>1000,47313=>1000,47314=>1000,47315=>1000,47316=>1000,47317=>1000,47318=>1000,47319=>1000,47320=>1000,47321=>1000,47322=>1000,47323=>1000,47324=>1000,47325=>1000,47326=>1000,47327=>1000,47328=>1000,47329=>1000,47330=>1000,47331=>1000,47332=>1000,47333=>1000,47334=>1000,47335=>1000,47336=>1000,47337=>1000,47338=>1000,47339=>1000,47340=>1000,47341=>1000,47342=>1000,47343=>1000,47344=>1000,47345=>1000,47346=>1000,47347=>1000,47348=>1000,47349=>1000,47350=>1000,47351=>1000,47352=>1000,47353=>1000,47354=>1000,47355=>1000,47356=>1000,47357=>1000,47358=>1000,47359=>1000,47360=>1000,47361=>1000,47362=>1000,47363=>1000,47364=>1000,47365=>1000,47366=>1000,47367=>1000,47368=>1000,47369=>1000,47370=>1000,47371=>1000,47372=>1000,47373=>1000,47374=>1000,47375=>1000,47376=>1000,47377=>1000,47378=>1000,47379=>1000,47380=>1000,47381=>1000,47382=>1000,47383=>1000,47384=>1000,47385=>1000,47386=>1000,47387=>1000,47388=>1000,47389=>1000,47390=>1000,47391=>1000,47392=>1000,47393=>1000,47394=>1000,47395=>1000,47396=>1000,47397=>1000,47398=>1000,47399=>1000,47400=>1000,47401=>1000,47402=>1000,47403=>1000,47404=>1000,47405=>1000,47406=>1000,47407=>1000,47408=>1000,47409=>1000,47410=>1000,47411=>1000,47412=>1000,47413=>1000,47414=>1000,47415=>1000,47416=>1000,47417=>1000,47418=>1000,47419=>1000,47420=>1000,47421=>1000,47422=>1000,47423=>1000,47424=>1000,47425=>1000,47426=>1000,47427=>1000,47428=>1000,47429=>1000,47430=>1000,47431=>1000,47432=>1000,47433=>1000,47434=>1000,47435=>1000,47436=>1000,47437=>1000,47438=>1000,47439=>1000,47440=>1000,47441=>1000,47442=>1000,47443=>1000,47444=>1000,47445=>1000,47446=>1000,47447=>1000,47448=>1000,47449=>1000,47450=>1000,47451=>1000,47452=>1000,47453=>1000,47454=>1000,47455=>1000,47456=>1000,47457=>1000,47458=>1000,47459=>1000,47460=>1000,47461=>1000,47462=>1000,47463=>1000,47464=>1000,47465=>1000,47466=>1000,47467=>1000,47468=>1000,47469=>1000,47470=>1000,47471=>1000,47472=>1000,47473=>1000,47474=>1000,47475=>1000,47476=>1000,47477=>1000,47478=>1000,47479=>1000,47480=>1000,47481=>1000,47482=>1000,47483=>1000,47484=>1000,47485=>1000,47486=>1000,47487=>1000,47488=>1000,47489=>1000,47490=>1000,47491=>1000,47492=>1000,47493=>1000,47494=>1000,47495=>1000,47496=>1000,47497=>1000,47498=>1000,47499=>1000,47500=>1000,47501=>1000,47502=>1000,47503=>1000,47504=>1000,47505=>1000,47506=>1000,47507=>1000,47508=>1000,47509=>1000,47510=>1000,47511=>1000,47512=>1000,47513=>1000,47514=>1000,47515=>1000,47516=>1000,47517=>1000,47518=>1000,47519=>1000,47520=>1000,47521=>1000,47522=>1000,47523=>1000,47524=>1000,47525=>1000,47526=>1000,47527=>1000,47528=>1000,47529=>1000,47530=>1000,47531=>1000,47532=>1000,47533=>1000,47534=>1000,47535=>1000,47536=>1000,47537=>1000,47538=>1000,47539=>1000,47540=>1000,47541=>1000,47542=>1000,47543=>1000,47544=>1000,47545=>1000,47546=>1000,47547=>1000,47548=>1000,47549=>1000,47550=>1000,47551=>1000,47552=>1000,47553=>1000,47554=>1000,47555=>1000,47556=>1000,47557=>1000,47558=>1000,47559=>1000,47560=>1000,47561=>1000,47562=>1000,47563=>1000,47564=>1000,47565=>1000,47566=>1000,47567=>1000,47568=>1000,47569=>1000,47570=>1000,47571=>1000,47572=>1000,47573=>1000,47574=>1000,47575=>1000,47576=>1000,47577=>1000,47578=>1000,47579=>1000,47580=>1000,47581=>1000,47582=>1000,47583=>1000,47584=>1000,47585=>1000,47586=>1000,47587=>1000,47588=>1000,47589=>1000,47590=>1000,47591=>1000,47592=>1000,47593=>1000,47594=>1000,47595=>1000,47596=>1000,47597=>1000,47598=>1000,47599=>1000,47600=>1000,47601=>1000,47602=>1000,47603=>1000,47604=>1000,47605=>1000,47606=>1000,47607=>1000,47608=>1000,47609=>1000,47610=>1000,47611=>1000,47612=>1000,47613=>1000,47614=>1000,47615=>1000,47616=>1000,47617=>1000,47618=>1000,47619=>1000,47620=>1000,47621=>1000,47622=>1000,47623=>1000,47624=>1000,47625=>1000,47626=>1000,47627=>1000,47628=>1000,47629=>1000,47630=>1000,47631=>1000,47632=>1000,47633=>1000,47634=>1000,47635=>1000,47636=>1000,47637=>1000,47638=>1000,47639=>1000,47640=>1000,47641=>1000,47642=>1000,47643=>1000,47644=>1000,47645=>1000,47646=>1000,47647=>1000,47648=>1000,47649=>1000,47650=>1000,47651=>1000,47652=>1000,47653=>1000,47654=>1000,47655=>1000,47656=>1000,47657=>1000,47658=>1000,47659=>1000,47660=>1000,47661=>1000,47662=>1000,47663=>1000,47664=>1000,47665=>1000,47666=>1000,47667=>1000,47668=>1000,47669=>1000,47670=>1000,47671=>1000,47672=>1000,47673=>1000,47674=>1000,47675=>1000,47676=>1000,47677=>1000,47678=>1000,47679=>1000,47680=>1000,47681=>1000,47682=>1000,47683=>1000,47684=>1000,47685=>1000,47686=>1000,47687=>1000,47688=>1000,47689=>1000,47690=>1000,47691=>1000,47692=>1000,47693=>1000,47694=>1000,47695=>1000,47696=>1000,47697=>1000,47698=>1000,47699=>1000,47700=>1000,47701=>1000,47702=>1000,47703=>1000,47704=>1000,47705=>1000,47706=>1000,47707=>1000,47708=>1000,47709=>1000,47710=>1000,47711=>1000,47712=>1000,47713=>1000,47714=>1000,47715=>1000,47716=>1000,47717=>1000,47718=>1000,47719=>1000,47720=>1000,47721=>1000,47722=>1000,47723=>1000,47724=>1000,47725=>1000,47726=>1000,47727=>1000,47728=>1000,47729=>1000,47730=>1000,47731=>1000,47732=>1000,47733=>1000,47734=>1000,47735=>1000,47736=>1000,47737=>1000,47738=>1000,47739=>1000,47740=>1000,47741=>1000,47742=>1000,47743=>1000,47744=>1000,47745=>1000,47746=>1000,47747=>1000,47748=>1000,47749=>1000,47750=>1000,47751=>1000,47752=>1000,47753=>1000,47754=>1000,47755=>1000,47756=>1000,47757=>1000,47758=>1000,47759=>1000,47760=>1000,47761=>1000,47762=>1000,47763=>1000,47764=>1000,47765=>1000,47766=>1000,47767=>1000,47768=>1000,47769=>1000,47770=>1000,47771=>1000,47772=>1000,47773=>1000,47774=>1000,47775=>1000,47776=>1000,47777=>1000,47778=>1000,47779=>1000,47780=>1000,47781=>1000,47782=>1000,47783=>1000,47784=>1000,47785=>1000,47786=>1000,47787=>1000,47788=>1000,47789=>1000,47790=>1000,47791=>1000,47792=>1000,47793=>1000,47794=>1000,47795=>1000,47796=>1000,47797=>1000,47798=>1000,47799=>1000,47800=>1000,47801=>1000,47802=>1000,47803=>1000,47804=>1000,47805=>1000,47806=>1000,47807=>1000,47808=>1000,47809=>1000,47810=>1000,47811=>1000,47812=>1000,47813=>1000,47814=>1000,47815=>1000,47816=>1000,47817=>1000,47818=>1000,47819=>1000,47820=>1000,47821=>1000,47822=>1000,47823=>1000,47824=>1000,47825=>1000,47826=>1000,47827=>1000,47828=>1000,47829=>1000,47830=>1000,47831=>1000,47832=>1000,47833=>1000,47834=>1000,47835=>1000,47836=>1000,47837=>1000,47838=>1000,47839=>1000,47840=>1000,47841=>1000,47842=>1000,47843=>1000,47844=>1000,47845=>1000,47846=>1000,47847=>1000,47848=>1000,47849=>1000,47850=>1000,47851=>1000,47852=>1000,47853=>1000,47854=>1000,47855=>1000,47856=>1000,47857=>1000,47858=>1000,47859=>1000,47860=>1000,47861=>1000,47862=>1000,47863=>1000,47864=>1000,47865=>1000,47866=>1000,47867=>1000,47868=>1000,47869=>1000,47870=>1000,47871=>1000,47872=>1000,47873=>1000,47874=>1000,47875=>1000,47876=>1000,47877=>1000,47878=>1000,47879=>1000,47880=>1000,47881=>1000,47882=>1000,47883=>1000,47884=>1000,47885=>1000,47886=>1000,47887=>1000,47888=>1000,47889=>1000,47890=>1000,47891=>1000,47892=>1000,47893=>1000,47894=>1000,47895=>1000,47896=>1000,47897=>1000,47898=>1000,47899=>1000,47900=>1000,47901=>1000,47902=>1000,47903=>1000,47904=>1000,47905=>1000,47906=>1000,47907=>1000,47908=>1000,47909=>1000,47910=>1000,47911=>1000,47912=>1000,47913=>1000,47914=>1000,47915=>1000,47916=>1000,47917=>1000,47918=>1000,47919=>1000,47920=>1000,47921=>1000,47922=>1000,47923=>1000,47924=>1000,47925=>1000,47926=>1000,47927=>1000,47928=>1000,47929=>1000,47930=>1000,47931=>1000,47932=>1000,47933=>1000,47934=>1000,47935=>1000,47936=>1000,47937=>1000,47938=>1000,47939=>1000,47940=>1000,47941=>1000,47942=>1000,47943=>1000,47944=>1000,47945=>1000,47946=>1000,47947=>1000,47948=>1000,47949=>1000,47950=>1000,47951=>1000,47952=>1000,47953=>1000,47954=>1000,47955=>1000,47956=>1000,47957=>1000,47958=>1000,47959=>1000,47960=>1000,47961=>1000,47962=>1000,47963=>1000,47964=>1000,47965=>1000,47966=>1000,47967=>1000,47968=>1000,47969=>1000,47970=>1000,47971=>1000,47972=>1000,47973=>1000,47974=>1000,47975=>1000,47976=>1000,47977=>1000,47978=>1000,47979=>1000,47980=>1000,47981=>1000,47982=>1000,47983=>1000,47984=>1000,47985=>1000,47986=>1000,47987=>1000,47988=>1000,47989=>1000,47990=>1000,47991=>1000,47992=>1000,47993=>1000,47994=>1000,47995=>1000,47996=>1000,47997=>1000,47998=>1000,47999=>1000,48000=>1000,48001=>1000,48002=>1000,48003=>1000,48004=>1000,48005=>1000,48006=>1000,48007=>1000,48008=>1000,48009=>1000,48010=>1000,48011=>1000,48012=>1000,48013=>1000,48014=>1000,48015=>1000,48016=>1000,48017=>1000,48018=>1000,48019=>1000,48020=>1000,48021=>1000,48022=>1000,48023=>1000,48024=>1000,48025=>1000,48026=>1000,48027=>1000,48028=>1000,48029=>1000,48030=>1000,48031=>1000,48032=>1000,48033=>1000,48034=>1000,48035=>1000,48036=>1000,48037=>1000,48038=>1000,48039=>1000,48040=>1000,48041=>1000,48042=>1000,48043=>1000,48044=>1000,48045=>1000,48046=>1000,48047=>1000,48048=>1000,48049=>1000,48050=>1000,48051=>1000,48052=>1000,48053=>1000,48054=>1000,48055=>1000,48056=>1000,48057=>1000,48058=>1000,48059=>1000,48060=>1000,48061=>1000,48062=>1000,48063=>1000,48064=>1000,48065=>1000,48066=>1000,48067=>1000,48068=>1000,48069=>1000,48070=>1000,48071=>1000,48072=>1000,48073=>1000,48074=>1000,48075=>1000,48076=>1000,48077=>1000,48078=>1000,48079=>1000,48080=>1000,48081=>1000,48082=>1000,48083=>1000,48084=>1000,48085=>1000,48086=>1000,48087=>1000,48088=>1000,48089=>1000,48090=>1000,48091=>1000,48092=>1000,48093=>1000,48094=>1000,48095=>1000,48096=>1000,48097=>1000,48098=>1000,48099=>1000,48100=>1000,48101=>1000,48102=>1000,48103=>1000,48104=>1000,48105=>1000,48106=>1000,48107=>1000,48108=>1000,48109=>1000,48110=>1000,48111=>1000,48112=>1000,48113=>1000,48114=>1000,48115=>1000,48116=>1000,48117=>1000,48118=>1000,48119=>1000,48120=>1000,48121=>1000,48122=>1000,48123=>1000,48124=>1000,48125=>1000,48126=>1000,48127=>1000,48128=>1000,48129=>1000,48130=>1000,48131=>1000,48132=>1000,48133=>1000,48134=>1000,48135=>1000,48136=>1000,48137=>1000,48138=>1000,48139=>1000,48140=>1000,48141=>1000,48142=>1000,48143=>1000,48144=>1000,48145=>1000,48146=>1000,48147=>1000,48148=>1000,48149=>1000,48150=>1000,48151=>1000,48152=>1000,48153=>1000,48154=>1000,48155=>1000,48156=>1000,48157=>1000,48158=>1000,48159=>1000,48160=>1000,48161=>1000,48162=>1000,48163=>1000,48164=>1000,48165=>1000,48166=>1000,48167=>1000,48168=>1000,48169=>1000,48170=>1000,48171=>1000,48172=>1000,48173=>1000,48174=>1000,48175=>1000,48176=>1000,48177=>1000,48178=>1000,48179=>1000,48180=>1000,48181=>1000,48182=>1000,48183=>1000,48184=>1000,48185=>1000,48186=>1000,48187=>1000,48188=>1000,48189=>1000,48190=>1000,48191=>1000,48192=>1000,48193=>1000,48194=>1000,48195=>1000,48196=>1000,48197=>1000,48198=>1000,48199=>1000,48200=>1000,48201=>1000,48202=>1000,48203=>1000,48204=>1000,48205=>1000,48206=>1000,48207=>1000,48208=>1000,48209=>1000,48210=>1000,48211=>1000,48212=>1000,48213=>1000,48214=>1000,48215=>1000,48216=>1000,48217=>1000,48218=>1000,48219=>1000,48220=>1000,48221=>1000,48222=>1000,48223=>1000,48224=>1000,48225=>1000,48226=>1000,48227=>1000,48228=>1000,48229=>1000,48230=>1000,48231=>1000,48232=>1000,48233=>1000,48234=>1000,48235=>1000,48236=>1000,48237=>1000,48238=>1000,48239=>1000,48240=>1000,48241=>1000,48242=>1000,48243=>1000,48244=>1000,48245=>1000,48246=>1000,48247=>1000,48248=>1000,48249=>1000,48250=>1000,48251=>1000,48252=>1000,48253=>1000,48254=>1000,48255=>1000,48256=>1000,48257=>1000,48258=>1000,48259=>1000,48260=>1000,48261=>1000,48262=>1000,48263=>1000,48264=>1000,48265=>1000,48266=>1000,48267=>1000,48268=>1000,48269=>1000,48270=>1000,48271=>1000,48272=>1000,48273=>1000,48274=>1000,48275=>1000,48276=>1000,48277=>1000,48278=>1000,48279=>1000,48280=>1000,48281=>1000,48282=>1000,48283=>1000,48284=>1000,48285=>1000,48286=>1000,48287=>1000,48288=>1000,48289=>1000,48290=>1000,48291=>1000,48292=>1000,48293=>1000,48294=>1000,48295=>1000,48296=>1000,48297=>1000,48298=>1000,48299=>1000,48300=>1000,48301=>1000,48302=>1000,48303=>1000,48304=>1000,48305=>1000,48306=>1000,48307=>1000,48308=>1000,48309=>1000,48310=>1000,48311=>1000,48312=>1000,48313=>1000,48314=>1000,48315=>1000,48316=>1000,48317=>1000,48318=>1000,48319=>1000,48320=>1000,48321=>1000,48322=>1000,48323=>1000,48324=>1000,48325=>1000,48326=>1000,48327=>1000,48328=>1000,48329=>1000,48330=>1000,48331=>1000,48332=>1000,48333=>1000,48334=>1000,48335=>1000,48336=>1000,48337=>1000,48338=>1000,48339=>1000,48340=>1000,48341=>1000,48342=>1000,48343=>1000,48344=>1000,48345=>1000,48346=>1000,48347=>1000,48348=>1000,48349=>1000,48350=>1000,48351=>1000,48352=>1000,48353=>1000,48354=>1000,48355=>1000,48356=>1000,48357=>1000,48358=>1000,48359=>1000,48360=>1000,48361=>1000,48362=>1000,48363=>1000,48364=>1000,48365=>1000,48366=>1000,48367=>1000,48368=>1000,48369=>1000,48370=>1000,48371=>1000,48372=>1000,48373=>1000,48374=>1000,48375=>1000,48376=>1000,48377=>1000,48378=>1000,48379=>1000,48380=>1000,48381=>1000,48382=>1000,48383=>1000,48384=>1000,48385=>1000,48386=>1000,48387=>1000,48388=>1000,48389=>1000,48390=>1000,48391=>1000,48392=>1000,48393=>1000,48394=>1000,48395=>1000,48396=>1000,48397=>1000,48398=>1000,48399=>1000,48400=>1000,48401=>1000,48402=>1000,48403=>1000,48404=>1000,48405=>1000,48406=>1000,48407=>1000,48408=>1000,48409=>1000,48410=>1000,48411=>1000,48412=>1000,48413=>1000,48414=>1000,48415=>1000,48416=>1000,48417=>1000,48418=>1000,48419=>1000,48420=>1000,48421=>1000,48422=>1000,48423=>1000,48424=>1000,48425=>1000,48426=>1000,48427=>1000,48428=>1000,48429=>1000,48430=>1000,48431=>1000,48432=>1000,48433=>1000,48434=>1000,48435=>1000,48436=>1000,48437=>1000,48438=>1000,48439=>1000,48440=>1000,48441=>1000,48442=>1000,48443=>1000,48444=>1000,48445=>1000,48446=>1000,48447=>1000,48448=>1000,48449=>1000,48450=>1000,48451=>1000,48452=>1000,48453=>1000,48454=>1000,48455=>1000,48456=>1000,48457=>1000,48458=>1000,48459=>1000,48460=>1000,48461=>1000,48462=>1000,48463=>1000,48464=>1000,48465=>1000,48466=>1000,48467=>1000,48468=>1000,48469=>1000,48470=>1000,48471=>1000,48472=>1000,48473=>1000,48474=>1000,48475=>1000,48476=>1000,48477=>1000,48478=>1000,48479=>1000,48480=>1000,48481=>1000,48482=>1000,48483=>1000,48484=>1000,48485=>1000,48486=>1000,48487=>1000,48488=>1000,48489=>1000,48490=>1000,48491=>1000,48492=>1000,48493=>1000,48494=>1000,48495=>1000,48496=>1000,48497=>1000,48498=>1000,48499=>1000,48500=>1000,48501=>1000,48502=>1000,48503=>1000,48504=>1000,48505=>1000,48506=>1000,48507=>1000,48508=>1000,48509=>1000,48510=>1000,48511=>1000,48512=>1000,48513=>1000,48514=>1000,48515=>1000,48516=>1000,48517=>1000,48518=>1000,48519=>1000,48520=>1000,48521=>1000,48522=>1000,48523=>1000,48524=>1000,48525=>1000,48526=>1000,48527=>1000,48528=>1000,48529=>1000,48530=>1000,48531=>1000,48532=>1000,48533=>1000,48534=>1000,48535=>1000,48536=>1000,48537=>1000,48538=>1000,48539=>1000,48540=>1000,48541=>1000,48542=>1000,48543=>1000,48544=>1000,48545=>1000,48546=>1000,48547=>1000,48548=>1000,48549=>1000,48550=>1000,48551=>1000,48552=>1000,48553=>1000,48554=>1000,48555=>1000,48556=>1000,48557=>1000,48558=>1000,48559=>1000,48560=>1000,48561=>1000,48562=>1000,48563=>1000,48564=>1000,48565=>1000,48566=>1000,48567=>1000,48568=>1000,48569=>1000,48570=>1000,48571=>1000,48572=>1000,48573=>1000,48574=>1000,48575=>1000,48576=>1000,48577=>1000,48578=>1000,48579=>1000,48580=>1000,48581=>1000,48582=>1000,48583=>1000,48584=>1000,48585=>1000,48586=>1000,48587=>1000,48588=>1000,48589=>1000,48590=>1000,48591=>1000,48592=>1000,48593=>1000,48594=>1000,48595=>1000,48596=>1000,48597=>1000,48598=>1000,48599=>1000,48600=>1000,48601=>1000,48602=>1000,48603=>1000,48604=>1000,48605=>1000,48606=>1000,48607=>1000,48608=>1000,48609=>1000,48610=>1000,48611=>1000,48612=>1000,48613=>1000,48614=>1000,48615=>1000,48616=>1000,48617=>1000,48618=>1000,48619=>1000,48620=>1000,48621=>1000,48622=>1000,48623=>1000,48624=>1000,48625=>1000,48626=>1000,48627=>1000,48628=>1000,48629=>1000,48630=>1000,48631=>1000,48632=>1000,48633=>1000,48634=>1000,48635=>1000,48636=>1000,48637=>1000,48638=>1000,48639=>1000,48640=>1000,48641=>1000,48642=>1000,48643=>1000,48644=>1000,48645=>1000,48646=>1000,48647=>1000,48648=>1000,48649=>1000,48650=>1000,48651=>1000,48652=>1000,48653=>1000,48654=>1000,48655=>1000,48656=>1000,48657=>1000,48658=>1000,48659=>1000,48660=>1000,48661=>1000,48662=>1000,48663=>1000,48664=>1000,48665=>1000,48666=>1000,48667=>1000,48668=>1000,48669=>1000,48670=>1000,48671=>1000,48672=>1000,48673=>1000,48674=>1000,48675=>1000,48676=>1000,48677=>1000,48678=>1000,48679=>1000,48680=>1000,48681=>1000,48682=>1000,48683=>1000,48684=>1000,48685=>1000,48686=>1000,48687=>1000,48688=>1000,48689=>1000,48690=>1000,48691=>1000,48692=>1000,48693=>1000,48694=>1000,48695=>1000,48696=>1000,48697=>1000,48698=>1000,48699=>1000,48700=>1000,48701=>1000,48702=>1000,48703=>1000,48704=>1000,48705=>1000,48706=>1000,48707=>1000,48708=>1000,48709=>1000,48710=>1000,48711=>1000,48712=>1000,48713=>1000,48714=>1000,48715=>1000,48716=>1000,48717=>1000,48718=>1000,48719=>1000,48720=>1000,48721=>1000,48722=>1000,48723=>1000,48724=>1000,48725=>1000,48726=>1000,48727=>1000,48728=>1000,48729=>1000,48730=>1000,48731=>1000,48732=>1000,48733=>1000,48734=>1000,48735=>1000,48736=>1000,48737=>1000,48738=>1000,48739=>1000,48740=>1000,48741=>1000,48742=>1000,48743=>1000,48744=>1000,48745=>1000,48746=>1000,48747=>1000,48748=>1000,48749=>1000,48750=>1000,48751=>1000,48752=>1000,48753=>1000,48754=>1000,48755=>1000,48756=>1000,48757=>1000,48758=>1000,48759=>1000,48760=>1000,48761=>1000,48762=>1000,48763=>1000,48764=>1000,48765=>1000,48766=>1000,48767=>1000,48768=>1000,48769=>1000,48770=>1000,48771=>1000,48772=>1000,48773=>1000,48774=>1000,48775=>1000,48776=>1000,48777=>1000,48778=>1000,48779=>1000,48780=>1000,48781=>1000,48782=>1000,48783=>1000,48784=>1000,48785=>1000,48786=>1000,48787=>1000,48788=>1000,48789=>1000,48790=>1000,48791=>1000,48792=>1000,48793=>1000,48794=>1000,48795=>1000,48796=>1000,48797=>1000,48798=>1000,48799=>1000,48800=>1000,48801=>1000,48802=>1000,48803=>1000,48804=>1000,48805=>1000,48806=>1000,48807=>1000,48808=>1000,48809=>1000,48810=>1000,48811=>1000,48812=>1000,48813=>1000,48814=>1000,48815=>1000,48816=>1000,48817=>1000,48818=>1000,48819=>1000,48820=>1000,48821=>1000,48822=>1000,48823=>1000,48824=>1000,48825=>1000,48826=>1000,48827=>1000,48828=>1000,48829=>1000,48830=>1000,48831=>1000,48832=>1000,48833=>1000,48834=>1000,48835=>1000,48836=>1000,48837=>1000,48838=>1000,48839=>1000,48840=>1000,48841=>1000,48842=>1000,48843=>1000,48844=>1000,48845=>1000,48846=>1000,48847=>1000,48848=>1000,48849=>1000,48850=>1000,48851=>1000,48852=>1000,48853=>1000,48854=>1000,48855=>1000,48856=>1000,48857=>1000,48858=>1000,48859=>1000,48860=>1000,48861=>1000,48862=>1000,48863=>1000,48864=>1000,48865=>1000,48866=>1000,48867=>1000,48868=>1000,48869=>1000,48870=>1000,48871=>1000,48872=>1000,48873=>1000,48874=>1000,48875=>1000,48876=>1000,48877=>1000,48878=>1000,48879=>1000,48880=>1000,48881=>1000,48882=>1000,48883=>1000,48884=>1000,48885=>1000,48886=>1000,48887=>1000,48888=>1000,48889=>1000,48890=>1000,48891=>1000,48892=>1000,48893=>1000,48894=>1000,48895=>1000,48896=>1000,48897=>1000,48898=>1000,48899=>1000,48900=>1000,48901=>1000,48902=>1000,48903=>1000,48904=>1000,48905=>1000,48906=>1000,48907=>1000,48908=>1000,48909=>1000,48910=>1000,48911=>1000,48912=>1000,48913=>1000,48914=>1000,48915=>1000,48916=>1000,48917=>1000,48918=>1000,48919=>1000,48920=>1000,48921=>1000,48922=>1000,48923=>1000,48924=>1000,48925=>1000,48926=>1000,48927=>1000,48928=>1000,48929=>1000,48930=>1000,48931=>1000,48932=>1000,48933=>1000,48934=>1000,48935=>1000,48936=>1000,48937=>1000,48938=>1000,48939=>1000,48940=>1000,48941=>1000,48942=>1000,48943=>1000,48944=>1000,48945=>1000,48946=>1000,48947=>1000,48948=>1000,48949=>1000,48950=>1000,48951=>1000,48952=>1000,48953=>1000,48954=>1000,48955=>1000,48956=>1000,48957=>1000,48958=>1000,48959=>1000,48960=>1000,48961=>1000,48962=>1000,48963=>1000,48964=>1000,48965=>1000,48966=>1000,48967=>1000,48968=>1000,48969=>1000,48970=>1000,48971=>1000,48972=>1000,48973=>1000,48974=>1000,48975=>1000,48976=>1000,48977=>1000,48978=>1000,48979=>1000,48980=>1000,48981=>1000,48982=>1000,48983=>1000,48984=>1000,48985=>1000,48986=>1000,48987=>1000,48988=>1000,48989=>1000,48990=>1000,48991=>1000,48992=>1000,48993=>1000,48994=>1000,48995=>1000,48996=>1000,48997=>1000,48998=>1000,48999=>1000,49000=>1000,49001=>1000,49002=>1000,49003=>1000,49004=>1000,49005=>1000,49006=>1000,49007=>1000,49008=>1000,49009=>1000,49010=>1000,49011=>1000,49012=>1000,49013=>1000,49014=>1000,49015=>1000,49016=>1000,49017=>1000,49018=>1000,49019=>1000,49020=>1000,49021=>1000,49022=>1000,49023=>1000,49024=>1000,49025=>1000,49026=>1000,49027=>1000,49028=>1000,49029=>1000,49030=>1000,49031=>1000,49032=>1000,49033=>1000,49034=>1000,49035=>1000,49036=>1000,49037=>1000,49038=>1000,49039=>1000,49040=>1000,49041=>1000,49042=>1000,49043=>1000,49044=>1000,49045=>1000,49046=>1000,49047=>1000,49048=>1000,49049=>1000,49050=>1000,49051=>1000,49052=>1000,49053=>1000,49054=>1000,49055=>1000,49056=>1000,49057=>1000,49058=>1000,49059=>1000,49060=>1000,49061=>1000,49062=>1000,49063=>1000,49064=>1000,49065=>1000,49066=>1000,49067=>1000,49068=>1000,49069=>1000,49070=>1000,49071=>1000,49072=>1000,49073=>1000,49074=>1000,49075=>1000,49076=>1000,49077=>1000,49078=>1000,49079=>1000,49080=>1000,49081=>1000,49082=>1000,49083=>1000,49084=>1000,49085=>1000,49086=>1000,49087=>1000,49088=>1000,49089=>1000,49090=>1000,49091=>1000,49092=>1000,49093=>1000,49094=>1000,49095=>1000,49096=>1000,49097=>1000,49098=>1000,49099=>1000,49100=>1000,49101=>1000,49102=>1000,49103=>1000,49104=>1000,49105=>1000,49106=>1000,49107=>1000,49108=>1000,49109=>1000,49110=>1000,49111=>1000,49112=>1000,49113=>1000,49114=>1000,49115=>1000,49116=>1000,49117=>1000,49118=>1000,49119=>1000,49120=>1000,49121=>1000,49122=>1000,49123=>1000,49124=>1000,49125=>1000,49126=>1000,49127=>1000,49128=>1000,49129=>1000,49130=>1000,49131=>1000,49132=>1000,49133=>1000,49134=>1000,49135=>1000,49136=>1000,49137=>1000,49138=>1000,49139=>1000,49140=>1000,49141=>1000,49142=>1000,49143=>1000,49144=>1000,49145=>1000,49146=>1000,49147=>1000,49148=>1000,49149=>1000,49150=>1000,49151=>1000,49152=>1000,49153=>1000,49154=>1000,49155=>1000,49156=>1000,49157=>1000,49158=>1000,49159=>1000,49160=>1000,49161=>1000,49162=>1000,49163=>1000,49164=>1000,49165=>1000,49166=>1000,49167=>1000,49168=>1000,49169=>1000,49170=>1000,49171=>1000,49172=>1000,49173=>1000,49174=>1000,49175=>1000,49176=>1000,49177=>1000,49178=>1000,49179=>1000,49180=>1000,49181=>1000,49182=>1000,49183=>1000,49184=>1000,49185=>1000,49186=>1000,49187=>1000,49188=>1000,49189=>1000,49190=>1000,49191=>1000,49192=>1000,49193=>1000,49194=>1000,49195=>1000,49196=>1000,49197=>1000,49198=>1000,49199=>1000,49200=>1000,49201=>1000,49202=>1000,49203=>1000,49204=>1000,49205=>1000,49206=>1000,49207=>1000,49208=>1000,49209=>1000,49210=>1000,49211=>1000,49212=>1000,49213=>1000,49214=>1000,49215=>1000,49216=>1000,49217=>1000,49218=>1000,49219=>1000,49220=>1000,49221=>1000,49222=>1000,49223=>1000,49224=>1000,49225=>1000,49226=>1000,49227=>1000,49228=>1000,49229=>1000,49230=>1000,49231=>1000,49232=>1000,49233=>1000,49234=>1000,49235=>1000,49236=>1000,49237=>1000,49238=>1000,49239=>1000,49240=>1000,49241=>1000,49242=>1000,49243=>1000,49244=>1000,49245=>1000,49246=>1000,49247=>1000,49248=>1000,49249=>1000,49250=>1000,49251=>1000,49252=>1000,49253=>1000,49254=>1000,49255=>1000,49256=>1000,49257=>1000,49258=>1000,49259=>1000,49260=>1000,49261=>1000,49262=>1000,49263=>1000,49264=>1000,49265=>1000,49266=>1000,49267=>1000,49268=>1000,49269=>1000,49270=>1000,49271=>1000,49272=>1000,49273=>1000,49274=>1000,49275=>1000,49276=>1000,49277=>1000,49278=>1000,49279=>1000,49280=>1000,49281=>1000,49282=>1000,49283=>1000,49284=>1000,49285=>1000,49286=>1000,49287=>1000,49288=>1000,49289=>1000,49290=>1000,49291=>1000,49292=>1000,49293=>1000,49294=>1000,49295=>1000,49296=>1000,49297=>1000,49298=>1000,49299=>1000,49300=>1000,49301=>1000,49302=>1000,49303=>1000,49304=>1000,49305=>1000,49306=>1000,49307=>1000,49308=>1000,49309=>1000,49310=>1000,49311=>1000,49312=>1000,49313=>1000,49314=>1000,49315=>1000,49316=>1000,49317=>1000,49318=>1000,49319=>1000,49320=>1000,49321=>1000,49322=>1000,49323=>1000,49324=>1000,49325=>1000,49326=>1000,49327=>1000,49328=>1000,49329=>1000,49330=>1000,49331=>1000,49332=>1000,49333=>1000,49334=>1000,49335=>1000,49336=>1000,49337=>1000,49338=>1000,49339=>1000,49340=>1000,49341=>1000,49342=>1000,49343=>1000,49344=>1000,49345=>1000,49346=>1000,49347=>1000,49348=>1000,49349=>1000,49350=>1000,49351=>1000,49352=>1000,49353=>1000,49354=>1000,49355=>1000,49356=>1000,49357=>1000,49358=>1000,49359=>1000,49360=>1000,49361=>1000,49362=>1000,49363=>1000,49364=>1000,49365=>1000,49366=>1000,49367=>1000,49368=>1000,49369=>1000,49370=>1000,49371=>1000,49372=>1000,49373=>1000,49374=>1000,49375=>1000,49376=>1000,49377=>1000,49378=>1000,49379=>1000,49380=>1000,49381=>1000,49382=>1000,49383=>1000,49384=>1000,49385=>1000,49386=>1000,49387=>1000,49388=>1000,49389=>1000,49390=>1000,49391=>1000,49392=>1000,49393=>1000,49394=>1000,49395=>1000,49396=>1000,49397=>1000,49398=>1000,49399=>1000,49400=>1000,49401=>1000,49402=>1000,49403=>1000,49404=>1000,49405=>1000,49406=>1000,49407=>1000,49408=>1000,49409=>1000,49410=>1000,49411=>1000,49412=>1000,49413=>1000,49414=>1000,49415=>1000,49416=>1000,49417=>1000,49418=>1000,49419=>1000,49420=>1000,49421=>1000,49422=>1000,49423=>1000,49424=>1000,49425=>1000,49426=>1000,49427=>1000,49428=>1000,49429=>1000,49430=>1000,49431=>1000,49432=>1000,49433=>1000,49434=>1000,49435=>1000,49436=>1000,49437=>1000,49438=>1000,49439=>1000,49440=>1000,49441=>1000,49442=>1000,49443=>1000,49444=>1000,49445=>1000,49446=>1000,49447=>1000,49448=>1000,49449=>1000,49450=>1000,49451=>1000,49452=>1000,49453=>1000,49454=>1000,49455=>1000,49456=>1000,49457=>1000,49458=>1000,49459=>1000,49460=>1000,49461=>1000,49462=>1000,49463=>1000,49464=>1000,49465=>1000,49466=>1000,49467=>1000,49468=>1000,49469=>1000,49470=>1000,49471=>1000,49472=>1000,49473=>1000,49474=>1000,49475=>1000,49476=>1000,49477=>1000,49478=>1000,49479=>1000,49480=>1000,49481=>1000,49482=>1000,49483=>1000,49484=>1000,49485=>1000,49486=>1000,49487=>1000,49488=>1000,49489=>1000,49490=>1000,49491=>1000,49492=>1000,49493=>1000,49494=>1000,49495=>1000,49496=>1000,49497=>1000,49498=>1000,49499=>1000,49500=>1000,49501=>1000,49502=>1000,49503=>1000,49504=>1000,49505=>1000,49506=>1000,49507=>1000,49508=>1000,49509=>1000,49510=>1000,49511=>1000,49512=>1000,49513=>1000,49514=>1000,49515=>1000,49516=>1000,49517=>1000,49518=>1000,49519=>1000,49520=>1000,49521=>1000,49522=>1000,49523=>1000,49524=>1000,49525=>1000,49526=>1000,49527=>1000,49528=>1000,49529=>1000,49530=>1000,49531=>1000,49532=>1000,49533=>1000,49534=>1000,49535=>1000,49536=>1000,49537=>1000,49538=>1000,49539=>1000,49540=>1000,49541=>1000,49542=>1000,49543=>1000,49544=>1000,49545=>1000,49546=>1000,49547=>1000,49548=>1000,49549=>1000,49550=>1000,49551=>1000,49552=>1000,49553=>1000,49554=>1000,49555=>1000,49556=>1000,49557=>1000,49558=>1000,49559=>1000,49560=>1000,49561=>1000,49562=>1000,49563=>1000,49564=>1000,49565=>1000,49566=>1000,49567=>1000,49568=>1000,49569=>1000,49570=>1000,49571=>1000,49572=>1000,49573=>1000,49574=>1000,49575=>1000,49576=>1000,49577=>1000,49578=>1000,49579=>1000,49580=>1000,49581=>1000,49582=>1000,49583=>1000,49584=>1000,49585=>1000,49586=>1000,49587=>1000,49588=>1000,49589=>1000,49590=>1000,49591=>1000,49592=>1000,49593=>1000,49594=>1000,49595=>1000,49596=>1000,49597=>1000,49598=>1000,49599=>1000,49600=>1000,49601=>1000,49602=>1000,49603=>1000,49604=>1000,49605=>1000,49606=>1000,49607=>1000,49608=>1000,49609=>1000,49610=>1000,49611=>1000,49612=>1000,49613=>1000,49614=>1000,49615=>1000,49616=>1000,49617=>1000,49618=>1000,49619=>1000,49620=>1000,49621=>1000,49622=>1000,49623=>1000,49624=>1000,49625=>1000,49626=>1000,49627=>1000,49628=>1000,49629=>1000,49630=>1000,49631=>1000,49632=>1000,49633=>1000,49634=>1000,49635=>1000,49636=>1000,49637=>1000,49638=>1000,49639=>1000,49640=>1000,49641=>1000,49642=>1000,49643=>1000,49644=>1000,49645=>1000,49646=>1000,49647=>1000,49648=>1000,49649=>1000,49650=>1000,49651=>1000,49652=>1000,49653=>1000,49654=>1000,49655=>1000,49656=>1000,49657=>1000,49658=>1000,49659=>1000,49660=>1000,49661=>1000,49662=>1000,49663=>1000,49664=>1000,49665=>1000,49666=>1000,49667=>1000,49668=>1000,49669=>1000,49670=>1000,49671=>1000,49672=>1000,49673=>1000,49674=>1000,49675=>1000,49676=>1000,49677=>1000,49678=>1000,49679=>1000,49680=>1000,49681=>1000,49682=>1000,49683=>1000,49684=>1000,49685=>1000,49686=>1000,49687=>1000,49688=>1000,49689=>1000,49690=>1000,49691=>1000,49692=>1000,49693=>1000,49694=>1000,49695=>1000,49696=>1000,49697=>1000,49698=>1000,49699=>1000,49700=>1000,49701=>1000,49702=>1000,49703=>1000,49704=>1000,49705=>1000,49706=>1000,49707=>1000,49708=>1000,49709=>1000,49710=>1000,49711=>1000,49712=>1000,49713=>1000,49714=>1000,49715=>1000,49716=>1000,49717=>1000,49718=>1000,49719=>1000,49720=>1000,49721=>1000,49722=>1000,49723=>1000,49724=>1000,49725=>1000,49726=>1000,49727=>1000,49728=>1000,49729=>1000,49730=>1000,49731=>1000,49732=>1000,49733=>1000,49734=>1000,49735=>1000,49736=>1000,49737=>1000,49738=>1000,49739=>1000,49740=>1000,49741=>1000,49742=>1000,49743=>1000,49744=>1000,49745=>1000,49746=>1000,49747=>1000,49748=>1000,49749=>1000,49750=>1000,49751=>1000,49752=>1000,49753=>1000,49754=>1000,49755=>1000,49756=>1000,49757=>1000,49758=>1000,49759=>1000,49760=>1000,49761=>1000,49762=>1000,49763=>1000,49764=>1000,49765=>1000,49766=>1000,49767=>1000,49768=>1000,49769=>1000,49770=>1000,49771=>1000,49772=>1000,49773=>1000,49774=>1000,49775=>1000,49776=>1000,49777=>1000,49778=>1000,49779=>1000,49780=>1000,49781=>1000,49782=>1000,49783=>1000,49784=>1000,49785=>1000,49786=>1000,49787=>1000,49788=>1000,49789=>1000,49790=>1000,49791=>1000,49792=>1000,49793=>1000,49794=>1000,49795=>1000,49796=>1000,49797=>1000,49798=>1000,49799=>1000,49800=>1000,49801=>1000,49802=>1000,49803=>1000,49804=>1000,49805=>1000,49806=>1000,49807=>1000,49808=>1000,49809=>1000,49810=>1000,49811=>1000,49812=>1000,49813=>1000,49814=>1000,49815=>1000,49816=>1000,49817=>1000,49818=>1000,49819=>1000,49820=>1000,49821=>1000,49822=>1000,49823=>1000,49824=>1000,49825=>1000,49826=>1000,49827=>1000,49828=>1000,49829=>1000,49830=>1000,49831=>1000,49832=>1000,49833=>1000,49834=>1000,49835=>1000,49836=>1000,49837=>1000,49838=>1000,49839=>1000,49840=>1000,49841=>1000,49842=>1000,49843=>1000,49844=>1000,49845=>1000,49846=>1000,49847=>1000,49848=>1000,49849=>1000,49850=>1000,49851=>1000,49852=>1000,49853=>1000,49854=>1000,49855=>1000,49856=>1000,49857=>1000,49858=>1000,49859=>1000,49860=>1000,49861=>1000,49862=>1000,49863=>1000,49864=>1000,49865=>1000,49866=>1000,49867=>1000,49868=>1000,49869=>1000,49870=>1000,49871=>1000,49872=>1000,49873=>1000,49874=>1000,49875=>1000,49876=>1000,49877=>1000,49878=>1000,49879=>1000,49880=>1000,49881=>1000,49882=>1000,49883=>1000,49884=>1000,49885=>1000,49886=>1000,49887=>1000,49888=>1000,49889=>1000,49890=>1000,49891=>1000,49892=>1000,49893=>1000,49894=>1000,49895=>1000,49896=>1000,49897=>1000,49898=>1000,49899=>1000,49900=>1000,49901=>1000,49902=>1000,49903=>1000,49904=>1000,49905=>1000,49906=>1000,49907=>1000,49908=>1000,49909=>1000,49910=>1000,49911=>1000,49912=>1000,49913=>1000,49914=>1000,49915=>1000,49916=>1000,49917=>1000,49918=>1000,49919=>1000,49920=>1000,49921=>1000,49922=>1000,49923=>1000,49924=>1000,49925=>1000,49926=>1000,49927=>1000,49928=>1000,49929=>1000,49930=>1000,49931=>1000,49932=>1000,49933=>1000,49934=>1000,49935=>1000,49936=>1000,49937=>1000,49938=>1000,49939=>1000,49940=>1000,49941=>1000,49942=>1000,49943=>1000,49944=>1000,49945=>1000,49946=>1000,49947=>1000,49948=>1000,49949=>1000,49950=>1000,49951=>1000,49952=>1000,49953=>1000,49954=>1000,49955=>1000,49956=>1000,49957=>1000,49958=>1000,49959=>1000,49960=>1000,49961=>1000,49962=>1000,49963=>1000,49964=>1000,49965=>1000,49966=>1000,49967=>1000,49968=>1000,49969=>1000,49970=>1000,49971=>1000,49972=>1000,49973=>1000,49974=>1000,49975=>1000,49976=>1000,49977=>1000,49978=>1000,49979=>1000,49980=>1000,49981=>1000,49982=>1000,49983=>1000,49984=>1000,49985=>1000,49986=>1000,49987=>1000,49988=>1000,49989=>1000,49990=>1000,49991=>1000,49992=>1000,49993=>1000,49994=>1000,49995=>1000,49996=>1000,49997=>1000,49998=>1000,49999=>1000,50000=>1000,50001=>1000,50002=>1000,50003=>1000,50004=>1000,50005=>1000,50006=>1000,50007=>1000,50008=>1000,50009=>1000,50010=>1000,50011=>1000,50012=>1000,50013=>1000,50014=>1000,50015=>1000,50016=>1000,50017=>1000,50018=>1000,50019=>1000,50020=>1000,50021=>1000,50022=>1000,50023=>1000,50024=>1000,50025=>1000,50026=>1000,50027=>1000,50028=>1000,50029=>1000,50030=>1000,50031=>1000,50032=>1000,50033=>1000,50034=>1000,50035=>1000,50036=>1000,50037=>1000,50038=>1000,50039=>1000,50040=>1000,50041=>1000,50042=>1000,50043=>1000,50044=>1000,50045=>1000,50046=>1000,50047=>1000,50048=>1000,50049=>1000,50050=>1000,50051=>1000,50052=>1000,50053=>1000,50054=>1000,50055=>1000,50056=>1000,50057=>1000,50058=>1000,50059=>1000,50060=>1000,50061=>1000,50062=>1000,50063=>1000,50064=>1000,50065=>1000,50066=>1000,50067=>1000,50068=>1000,50069=>1000,50070=>1000,50071=>1000,50072=>1000,50073=>1000,50074=>1000,50075=>1000,50076=>1000,50077=>1000,50078=>1000,50079=>1000,50080=>1000,50081=>1000,50082=>1000,50083=>1000,50084=>1000,50085=>1000,50086=>1000,50087=>1000,50088=>1000,50089=>1000,50090=>1000,50091=>1000,50092=>1000,50093=>1000,50094=>1000,50095=>1000,50096=>1000,50097=>1000,50098=>1000,50099=>1000,50100=>1000,50101=>1000,50102=>1000,50103=>1000,50104=>1000,50105=>1000,50106=>1000,50107=>1000,50108=>1000,50109=>1000,50110=>1000,50111=>1000,50112=>1000,50113=>1000,50114=>1000,50115=>1000,50116=>1000,50117=>1000,50118=>1000,50119=>1000,50120=>1000,50121=>1000,50122=>1000,50123=>1000,50124=>1000,50125=>1000,50126=>1000,50127=>1000,50128=>1000,50129=>1000,50130=>1000,50131=>1000,50132=>1000,50133=>1000,50134=>1000,50135=>1000,50136=>1000,50137=>1000,50138=>1000,50139=>1000,50140=>1000,50141=>1000,50142=>1000,50143=>1000,50144=>1000,50145=>1000,50146=>1000,50147=>1000,50148=>1000,50149=>1000,50150=>1000,50151=>1000,50152=>1000,50153=>1000,50154=>1000,50155=>1000,50156=>1000,50157=>1000,50158=>1000,50159=>1000,50160=>1000,50161=>1000,50162=>1000,50163=>1000,50164=>1000,50165=>1000,50166=>1000,50167=>1000,50168=>1000,50169=>1000,50170=>1000,50171=>1000,50172=>1000,50173=>1000,50174=>1000,50175=>1000,50176=>1000,50177=>1000,50178=>1000,50179=>1000,50180=>1000,50181=>1000,50182=>1000,50183=>1000,50184=>1000,50185=>1000,50186=>1000,50187=>1000,50188=>1000,50189=>1000,50190=>1000,50191=>1000,50192=>1000,50193=>1000,50194=>1000,50195=>1000,50196=>1000,50197=>1000,50198=>1000,50199=>1000,50200=>1000,50201=>1000,50202=>1000,50203=>1000,50204=>1000,50205=>1000,50206=>1000,50207=>1000,50208=>1000,50209=>1000,50210=>1000,50211=>1000,50212=>1000,50213=>1000,50214=>1000,50215=>1000,50216=>1000,50217=>1000,50218=>1000,50219=>1000,50220=>1000,50221=>1000,50222=>1000,50223=>1000,50224=>1000,50225=>1000,50226=>1000,50227=>1000,50228=>1000,50229=>1000,50230=>1000,50231=>1000,50232=>1000,50233=>1000,50234=>1000,50235=>1000,50236=>1000,50237=>1000,50238=>1000,50239=>1000,50240=>1000,50241=>1000,50242=>1000,50243=>1000,50244=>1000,50245=>1000,50246=>1000,50247=>1000,50248=>1000,50249=>1000,50250=>1000,50251=>1000,50252=>1000,50253=>1000,50254=>1000,50255=>1000,50256=>1000,50257=>1000,50258=>1000,50259=>1000,50260=>1000,50261=>1000,50262=>1000,50263=>1000,50264=>1000,50265=>1000,50266=>1000,50267=>1000,50268=>1000,50269=>1000,50270=>1000,50271=>1000,50272=>1000,50273=>1000,50274=>1000,50275=>1000,50276=>1000,50277=>1000,50278=>1000,50279=>1000,50280=>1000,50281=>1000,50282=>1000,50283=>1000,50284=>1000,50285=>1000,50286=>1000,50287=>1000,50288=>1000,50289=>1000,50290=>1000,50291=>1000,50292=>1000,50293=>1000,50294=>1000,50295=>1000,50296=>1000,50297=>1000,50298=>1000,50299=>1000,50300=>1000,50301=>1000,50302=>1000,50303=>1000,50304=>1000,50305=>1000,50306=>1000,50307=>1000,50308=>1000,50309=>1000,50310=>1000,50311=>1000,50312=>1000,50313=>1000,50314=>1000,50315=>1000,50316=>1000,50317=>1000,50318=>1000,50319=>1000,50320=>1000,50321=>1000,50322=>1000,50323=>1000,50324=>1000,50325=>1000,50326=>1000,50327=>1000,50328=>1000,50329=>1000,50330=>1000,50331=>1000,50332=>1000,50333=>1000,50334=>1000,50335=>1000,50336=>1000,50337=>1000,50338=>1000,50339=>1000,50340=>1000,50341=>1000,50342=>1000,50343=>1000,50344=>1000,50345=>1000,50346=>1000,50347=>1000,50348=>1000,50349=>1000,50350=>1000,50351=>1000,50352=>1000,50353=>1000,50354=>1000,50355=>1000,50356=>1000,50357=>1000,50358=>1000,50359=>1000,50360=>1000,50361=>1000,50362=>1000,50363=>1000,50364=>1000,50365=>1000,50366=>1000,50367=>1000,50368=>1000,50369=>1000,50370=>1000,50371=>1000,50372=>1000,50373=>1000,50374=>1000,50375=>1000,50376=>1000,50377=>1000,50378=>1000,50379=>1000,50380=>1000,50381=>1000,50382=>1000,50383=>1000,50384=>1000,50385=>1000,50386=>1000,50387=>1000,50388=>1000,50389=>1000,50390=>1000,50391=>1000,50392=>1000,50393=>1000,50394=>1000,50395=>1000,50396=>1000,50397=>1000,50398=>1000,50399=>1000,50400=>1000,50401=>1000,50402=>1000,50403=>1000,50404=>1000,50405=>1000,50406=>1000,50407=>1000,50408=>1000,50409=>1000,50410=>1000,50411=>1000,50412=>1000,50413=>1000,50414=>1000,50415=>1000,50416=>1000,50417=>1000,50418=>1000,50419=>1000,50420=>1000,50421=>1000,50422=>1000,50423=>1000,50424=>1000,50425=>1000,50426=>1000,50427=>1000,50428=>1000,50429=>1000,50430=>1000,50431=>1000,50432=>1000,50433=>1000,50434=>1000,50435=>1000,50436=>1000,50437=>1000,50438=>1000,50439=>1000,50440=>1000,50441=>1000,50442=>1000,50443=>1000,50444=>1000,50445=>1000,50446=>1000,50447=>1000,50448=>1000,50449=>1000,50450=>1000,50451=>1000,50452=>1000,50453=>1000,50454=>1000,50455=>1000,50456=>1000,50457=>1000,50458=>1000,50459=>1000,50460=>1000,50461=>1000,50462=>1000,50463=>1000,50464=>1000,50465=>1000,50466=>1000,50467=>1000,50468=>1000,50469=>1000,50470=>1000,50471=>1000,50472=>1000,50473=>1000,50474=>1000,50475=>1000,50476=>1000,50477=>1000,50478=>1000,50479=>1000,50480=>1000,50481=>1000,50482=>1000,50483=>1000,50484=>1000,50485=>1000,50486=>1000,50487=>1000,50488=>1000,50489=>1000,50490=>1000,50491=>1000,50492=>1000,50493=>1000,50494=>1000,50495=>1000,50496=>1000,50497=>1000,50498=>1000,50499=>1000,50500=>1000,50501=>1000,50502=>1000,50503=>1000,50504=>1000,50505=>1000,50506=>1000,50507=>1000,50508=>1000,50509=>1000,50510=>1000,50511=>1000,50512=>1000,50513=>1000,50514=>1000,50515=>1000,50516=>1000,50517=>1000,50518=>1000,50519=>1000,50520=>1000,50521=>1000,50522=>1000,50523=>1000,50524=>1000,50525=>1000,50526=>1000,50527=>1000,50528=>1000,50529=>1000,50530=>1000,50531=>1000,50532=>1000,50533=>1000,50534=>1000,50535=>1000,50536=>1000,50537=>1000,50538=>1000,50539=>1000,50540=>1000,50541=>1000,50542=>1000,50543=>1000,50544=>1000,50545=>1000,50546=>1000,50547=>1000,50548=>1000,50549=>1000,50550=>1000,50551=>1000,50552=>1000,50553=>1000,50554=>1000,50555=>1000,50556=>1000,50557=>1000,50558=>1000,50559=>1000,50560=>1000,50561=>1000,50562=>1000,50563=>1000,50564=>1000,50565=>1000,50566=>1000,50567=>1000,50568=>1000,50569=>1000,50570=>1000,50571=>1000,50572=>1000,50573=>1000,50574=>1000,50575=>1000,50576=>1000,50577=>1000,50578=>1000,50579=>1000,50580=>1000,50581=>1000,50582=>1000,50583=>1000,50584=>1000,50585=>1000,50586=>1000,50587=>1000,50588=>1000,50589=>1000,50590=>1000,50591=>1000,50592=>1000,50593=>1000,50594=>1000,50595=>1000,50596=>1000,50597=>1000,50598=>1000,50599=>1000,50600=>1000,50601=>1000,50602=>1000,50603=>1000,50604=>1000,50605=>1000,50606=>1000,50607=>1000,50608=>1000,50609=>1000,50610=>1000,50611=>1000,50612=>1000,50613=>1000,50614=>1000,50615=>1000,50616=>1000,50617=>1000,50618=>1000,50619=>1000,50620=>1000,50621=>1000,50622=>1000,50623=>1000,50624=>1000,50625=>1000,50626=>1000,50627=>1000,50628=>1000,50629=>1000,50630=>1000,50631=>1000,50632=>1000,50633=>1000,50634=>1000,50635=>1000,50636=>1000,50637=>1000,50638=>1000,50639=>1000,50640=>1000,50641=>1000,50642=>1000,50643=>1000,50644=>1000,50645=>1000,50646=>1000,50647=>1000,50648=>1000,50649=>1000,50650=>1000,50651=>1000,50652=>1000,50653=>1000,50654=>1000,50655=>1000,50656=>1000,50657=>1000,50658=>1000,50659=>1000,50660=>1000,50661=>1000,50662=>1000,50663=>1000,50664=>1000,50665=>1000,50666=>1000,50667=>1000,50668=>1000,50669=>1000,50670=>1000,50671=>1000,50672=>1000,50673=>1000,50674=>1000,50675=>1000,50676=>1000,50677=>1000,50678=>1000,50679=>1000,50680=>1000,50681=>1000,50682=>1000,50683=>1000,50684=>1000,50685=>1000,50686=>1000,50687=>1000,50688=>1000,50689=>1000,50690=>1000,50691=>1000,50692=>1000,50693=>1000,50694=>1000,50695=>1000,50696=>1000,50697=>1000,50698=>1000,50699=>1000,50700=>1000,50701=>1000,50702=>1000,50703=>1000,50704=>1000,50705=>1000,50706=>1000,50707=>1000,50708=>1000,50709=>1000,50710=>1000,50711=>1000,50712=>1000,50713=>1000,50714=>1000,50715=>1000,50716=>1000,50717=>1000,50718=>1000,50719=>1000,50720=>1000,50721=>1000,50722=>1000,50723=>1000,50724=>1000,50725=>1000,50726=>1000,50727=>1000,50728=>1000,50729=>1000,50730=>1000,50731=>1000,50732=>1000,50733=>1000,50734=>1000,50735=>1000,50736=>1000,50737=>1000,50738=>1000,50739=>1000,50740=>1000,50741=>1000,50742=>1000,50743=>1000,50744=>1000,50745=>1000,50746=>1000,50747=>1000,50748=>1000,50749=>1000,50750=>1000,50751=>1000,50752=>1000,50753=>1000,50754=>1000,50755=>1000,50756=>1000,50757=>1000,50758=>1000,50759=>1000,50760=>1000,50761=>1000,50762=>1000,50763=>1000,50764=>1000,50765=>1000,50766=>1000,50767=>1000,50768=>1000,50769=>1000,50770=>1000,50771=>1000,50772=>1000,50773=>1000,50774=>1000,50775=>1000,50776=>1000,50777=>1000,50778=>1000,50779=>1000,50780=>1000,50781=>1000,50782=>1000,50783=>1000,50784=>1000,50785=>1000,50786=>1000,50787=>1000,50788=>1000,50789=>1000,50790=>1000,50791=>1000,50792=>1000,50793=>1000,50794=>1000,50795=>1000,50796=>1000,50797=>1000,50798=>1000,50799=>1000,50800=>1000,50801=>1000,50802=>1000,50803=>1000,50804=>1000,50805=>1000,50806=>1000,50807=>1000,50808=>1000,50809=>1000,50810=>1000,50811=>1000,50812=>1000,50813=>1000,50814=>1000,50815=>1000,50816=>1000,50817=>1000,50818=>1000,50819=>1000,50820=>1000,50821=>1000,50822=>1000,50823=>1000,50824=>1000,50825=>1000,50826=>1000,50827=>1000,50828=>1000,50829=>1000,50830=>1000,50831=>1000,50832=>1000,50833=>1000,50834=>1000,50835=>1000,50836=>1000,50837=>1000,50838=>1000,50839=>1000,50840=>1000,50841=>1000,50842=>1000,50843=>1000,50844=>1000,50845=>1000,50846=>1000,50847=>1000,50848=>1000,50849=>1000,50850=>1000,50851=>1000,50852=>1000,50853=>1000,50854=>1000,50855=>1000,50856=>1000,50857=>1000,50858=>1000,50859=>1000,50860=>1000,50861=>1000,50862=>1000,50863=>1000,50864=>1000,50865=>1000,50866=>1000,50867=>1000,50868=>1000,50869=>1000,50870=>1000,50871=>1000,50872=>1000,50873=>1000,50874=>1000,50875=>1000,50876=>1000,50877=>1000,50878=>1000,50879=>1000,50880=>1000,50881=>1000,50882=>1000,50883=>1000,50884=>1000,50885=>1000,50886=>1000,50887=>1000,50888=>1000,50889=>1000,50890=>1000,50891=>1000,50892=>1000,50893=>1000,50894=>1000,50895=>1000,50896=>1000,50897=>1000,50898=>1000,50899=>1000,50900=>1000,50901=>1000,50902=>1000,50903=>1000,50904=>1000,50905=>1000,50906=>1000,50907=>1000,50908=>1000,50909=>1000,50910=>1000,50911=>1000,50912=>1000,50913=>1000,50914=>1000,50915=>1000,50916=>1000,50917=>1000,50918=>1000,50919=>1000,50920=>1000,50921=>1000,50922=>1000,50923=>1000,50924=>1000,50925=>1000,50926=>1000,50927=>1000,50928=>1000,50929=>1000,50930=>1000,50931=>1000,50932=>1000,50933=>1000,50934=>1000,50935=>1000,50936=>1000,50937=>1000,50938=>1000,50939=>1000,50940=>1000,50941=>1000,50942=>1000,50943=>1000,50944=>1000,50945=>1000,50946=>1000,50947=>1000,50948=>1000,50949=>1000,50950=>1000,50951=>1000,50952=>1000,50953=>1000,50954=>1000,50955=>1000,50956=>1000,50957=>1000,50958=>1000,50959=>1000,50960=>1000,50961=>1000,50962=>1000,50963=>1000,50964=>1000,50965=>1000,50966=>1000,50967=>1000,50968=>1000,50969=>1000,50970=>1000,50971=>1000,50972=>1000,50973=>1000,50974=>1000,50975=>1000,50976=>1000,50977=>1000,50978=>1000,50979=>1000,50980=>1000,50981=>1000,50982=>1000,50983=>1000,50984=>1000,50985=>1000,50986=>1000,50987=>1000,50988=>1000,50989=>1000,50990=>1000,50991=>1000,50992=>1000,50993=>1000,50994=>1000,50995=>1000,50996=>1000,50997=>1000,50998=>1000,50999=>1000,51000=>1000,51001=>1000,51002=>1000,51003=>1000,51004=>1000,51005=>1000,51006=>1000,51007=>1000,51008=>1000,51009=>1000,51010=>1000,51011=>1000,51012=>1000,51013=>1000,51014=>1000,51015=>1000,51016=>1000,51017=>1000,51018=>1000,51019=>1000,51020=>1000,51021=>1000,51022=>1000,51023=>1000,51024=>1000,51025=>1000,51026=>1000,51027=>1000,51028=>1000,51029=>1000,51030=>1000,51031=>1000,51032=>1000,51033=>1000,51034=>1000,51035=>1000,51036=>1000,51037=>1000,51038=>1000,51039=>1000,51040=>1000,51041=>1000,51042=>1000,51043=>1000,51044=>1000,51045=>1000,51046=>1000,51047=>1000,51048=>1000,51049=>1000,51050=>1000,51051=>1000,51052=>1000,51053=>1000,51054=>1000,51055=>1000,51056=>1000,51057=>1000,51058=>1000,51059=>1000,51060=>1000,51061=>1000,51062=>1000,51063=>1000,51064=>1000,51065=>1000,51066=>1000,51067=>1000,51068=>1000,51069=>1000,51070=>1000,51071=>1000,51072=>1000,51073=>1000,51074=>1000,51075=>1000,51076=>1000,51077=>1000,51078=>1000,51079=>1000,51080=>1000,51081=>1000,51082=>1000,51083=>1000,51084=>1000,51085=>1000,51086=>1000,51087=>1000,51088=>1000,51089=>1000,51090=>1000,51091=>1000,51092=>1000,51093=>1000,51094=>1000,51095=>1000,51096=>1000,51097=>1000,51098=>1000,51099=>1000,51100=>1000,51101=>1000,51102=>1000,51103=>1000,51104=>1000,51105=>1000,51106=>1000,51107=>1000,51108=>1000,51109=>1000,51110=>1000,51111=>1000,51112=>1000,51113=>1000,51114=>1000,51115=>1000,51116=>1000,51117=>1000,51118=>1000,51119=>1000,51120=>1000,51121=>1000,51122=>1000,51123=>1000,51124=>1000,51125=>1000,51126=>1000,51127=>1000,51128=>1000,51129=>1000,51130=>1000,51131=>1000,51132=>1000,51133=>1000,51134=>1000,51135=>1000,51136=>1000,51137=>1000,51138=>1000,51139=>1000,51140=>1000,51141=>1000,51142=>1000,51143=>1000,51144=>1000,51145=>1000,51146=>1000,51147=>1000,51148=>1000,51149=>1000,51150=>1000,51151=>1000,51152=>1000,51153=>1000,51154=>1000,51155=>1000,51156=>1000,51157=>1000,51158=>1000,51159=>1000,51160=>1000,51161=>1000,51162=>1000,51163=>1000,51164=>1000,51165=>1000,51166=>1000,51167=>1000,51168=>1000,51169=>1000,51170=>1000,51171=>1000,51172=>1000,51173=>1000,51174=>1000,51175=>1000,51176=>1000,51177=>1000,51178=>1000,51179=>1000,51180=>1000,51181=>1000,51182=>1000,51183=>1000,51184=>1000,51185=>1000,51186=>1000,51187=>1000,51188=>1000,51189=>1000,51190=>1000,51191=>1000,51192=>1000,51193=>1000,51194=>1000,51195=>1000,51196=>1000,51197=>1000,51198=>1000,51199=>1000,51200=>1000,51201=>1000,51202=>1000,51203=>1000,51204=>1000,51205=>1000,51206=>1000,51207=>1000,51208=>1000,51209=>1000,51210=>1000,51211=>1000,51212=>1000,51213=>1000,51214=>1000,51215=>1000,51216=>1000,51217=>1000,51218=>1000,51219=>1000,51220=>1000,51221=>1000,51222=>1000,51223=>1000,51224=>1000,51225=>1000,51226=>1000,51227=>1000,51228=>1000,51229=>1000,51230=>1000,51231=>1000,51232=>1000,51233=>1000,51234=>1000,51235=>1000,51236=>1000,51237=>1000,51238=>1000,51239=>1000,51240=>1000,51241=>1000,51242=>1000,51243=>1000,51244=>1000,51245=>1000,51246=>1000,51247=>1000,51248=>1000,51249=>1000,51250=>1000,51251=>1000,51252=>1000,51253=>1000,51254=>1000,51255=>1000,51256=>1000,51257=>1000,51258=>1000,51259=>1000,51260=>1000,51261=>1000,51262=>1000,51263=>1000,51264=>1000,51265=>1000,51266=>1000,51267=>1000,51268=>1000,51269=>1000,51270=>1000,51271=>1000,51272=>1000,51273=>1000,51274=>1000,51275=>1000,51276=>1000,51277=>1000,51278=>1000,51279=>1000,51280=>1000,51281=>1000,51282=>1000,51283=>1000,51284=>1000,51285=>1000,51286=>1000,51287=>1000,51288=>1000,51289=>1000,51290=>1000,51291=>1000,51292=>1000,51293=>1000,51294=>1000,51295=>1000,51296=>1000,51297=>1000,51298=>1000,51299=>1000,51300=>1000,51301=>1000,51302=>1000,51303=>1000,51304=>1000,51305=>1000,51306=>1000,51307=>1000,51308=>1000,51309=>1000,51310=>1000,51311=>1000,51312=>1000,51313=>1000,51314=>1000,51315=>1000,51316=>1000,51317=>1000,51318=>1000,51319=>1000,51320=>1000,51321=>1000,51322=>1000,51323=>1000,51324=>1000,51325=>1000,51326=>1000,51327=>1000,51328=>1000,51329=>1000,51330=>1000,51331=>1000,51332=>1000,51333=>1000,51334=>1000,51335=>1000,51336=>1000,51337=>1000,51338=>1000,51339=>1000,51340=>1000,51341=>1000,51342=>1000,51343=>1000,51344=>1000,51345=>1000,51346=>1000,51347=>1000,51348=>1000,51349=>1000,51350=>1000,51351=>1000,51352=>1000,51353=>1000,51354=>1000,51355=>1000,51356=>1000,51357=>1000,51358=>1000,51359=>1000,51360=>1000,51361=>1000,51362=>1000,51363=>1000,51364=>1000,51365=>1000,51366=>1000,51367=>1000,51368=>1000,51369=>1000,51370=>1000,51371=>1000,51372=>1000,51373=>1000,51374=>1000,51375=>1000,51376=>1000,51377=>1000,51378=>1000,51379=>1000,51380=>1000,51381=>1000,51382=>1000,51383=>1000,51384=>1000,51385=>1000,51386=>1000,51387=>1000,51388=>1000,51389=>1000,51390=>1000,51391=>1000,51392=>1000,51393=>1000,51394=>1000,51395=>1000,51396=>1000,51397=>1000,51398=>1000,51399=>1000,51400=>1000,51401=>1000,51402=>1000,51403=>1000,51404=>1000,51405=>1000,51406=>1000,51407=>1000,51408=>1000,51409=>1000,51410=>1000,51411=>1000,51412=>1000,51413=>1000,51414=>1000,51415=>1000,51416=>1000,51417=>1000,51418=>1000,51419=>1000,51420=>1000,51421=>1000,51422=>1000,51423=>1000,51424=>1000,51425=>1000,51426=>1000,51427=>1000,51428=>1000,51429=>1000,51430=>1000,51431=>1000,51432=>1000,51433=>1000,51434=>1000,51435=>1000,51436=>1000,51437=>1000,51438=>1000,51439=>1000,51440=>1000,51441=>1000,51442=>1000,51443=>1000,51444=>1000,51445=>1000,51446=>1000,51447=>1000,51448=>1000,51449=>1000,51450=>1000,51451=>1000,51452=>1000,51453=>1000,51454=>1000,51455=>1000,51456=>1000,51457=>1000,51458=>1000,51459=>1000,51460=>1000,51461=>1000,51462=>1000,51463=>1000,51464=>1000,51465=>1000,51466=>1000,51467=>1000,51468=>1000,51469=>1000,51470=>1000,51471=>1000,51472=>1000,51473=>1000,51474=>1000,51475=>1000,51476=>1000,51477=>1000,51478=>1000,51479=>1000,51480=>1000,51481=>1000,51482=>1000,51483=>1000,51484=>1000,51485=>1000,51486=>1000,51487=>1000,51488=>1000,51489=>1000,51490=>1000,51491=>1000,51492=>1000,51493=>1000,51494=>1000,51495=>1000,51496=>1000,51497=>1000,51498=>1000,51499=>1000,51500=>1000,51501=>1000,51502=>1000,51503=>1000,51504=>1000,51505=>1000,51506=>1000,51507=>1000,51508=>1000,51509=>1000,51510=>1000,51511=>1000,51512=>1000,51513=>1000,51514=>1000,51515=>1000,51516=>1000,51517=>1000,51518=>1000,51519=>1000,51520=>1000,51521=>1000,51522=>1000,51523=>1000,51524=>1000,51525=>1000,51526=>1000,51527=>1000,51528=>1000,51529=>1000,51530=>1000,51531=>1000,51532=>1000,51533=>1000,51534=>1000,51535=>1000,51536=>1000,51537=>1000,51538=>1000,51539=>1000,51540=>1000,51541=>1000,51542=>1000,51543=>1000,51544=>1000,51545=>1000,51546=>1000,51547=>1000,51548=>1000,51549=>1000,51550=>1000,51551=>1000,51552=>1000,51553=>1000,51554=>1000,51555=>1000,51556=>1000,51557=>1000,51558=>1000,51559=>1000,51560=>1000,51561=>1000,51562=>1000,51563=>1000,51564=>1000,51565=>1000,51566=>1000,51567=>1000,51568=>1000,51569=>1000,51570=>1000,51571=>1000,51572=>1000,51573=>1000,51574=>1000,51575=>1000,51576=>1000,51577=>1000,51578=>1000,51579=>1000,51580=>1000,51581=>1000,51582=>1000,51583=>1000,51584=>1000,51585=>1000,51586=>1000,51587=>1000,51588=>1000,51589=>1000,51590=>1000,51591=>1000,51592=>1000,51593=>1000,51594=>1000,51595=>1000,51596=>1000,51597=>1000,51598=>1000,51599=>1000,51600=>1000,51601=>1000,51602=>1000,51603=>1000,51604=>1000,51605=>1000,51606=>1000,51607=>1000,51608=>1000,51609=>1000,51610=>1000,51611=>1000,51612=>1000,51613=>1000,51614=>1000,51615=>1000,51616=>1000,51617=>1000,51618=>1000,51619=>1000,51620=>1000,51621=>1000,51622=>1000,51623=>1000,51624=>1000,51625=>1000,51626=>1000,51627=>1000,51628=>1000,51629=>1000,51630=>1000,51631=>1000,51632=>1000,51633=>1000,51634=>1000,51635=>1000,51636=>1000,51637=>1000,51638=>1000,51639=>1000,51640=>1000,51641=>1000,51642=>1000,51643=>1000,51644=>1000,51645=>1000,51646=>1000,51647=>1000,51648=>1000,51649=>1000,51650=>1000,51651=>1000,51652=>1000,51653=>1000,51654=>1000,51655=>1000,51656=>1000,51657=>1000,51658=>1000,51659=>1000,51660=>1000,51661=>1000,51662=>1000,51663=>1000,51664=>1000,51665=>1000,51666=>1000,51667=>1000,51668=>1000,51669=>1000,51670=>1000,51671=>1000,51672=>1000,51673=>1000,51674=>1000,51675=>1000,51676=>1000,51677=>1000,51678=>1000,51679=>1000,51680=>1000,51681=>1000,51682=>1000,51683=>1000,51684=>1000,51685=>1000,51686=>1000,51687=>1000,51688=>1000,51689=>1000,51690=>1000,51691=>1000,51692=>1000,51693=>1000,51694=>1000,51695=>1000,51696=>1000,51697=>1000,51698=>1000,51699=>1000,51700=>1000,51701=>1000,51702=>1000,51703=>1000,51704=>1000,51705=>1000,51706=>1000,51707=>1000,51708=>1000,51709=>1000,51710=>1000,51711=>1000,51712=>1000,51713=>1000,51714=>1000,51715=>1000,51716=>1000,51717=>1000,51718=>1000,51719=>1000,51720=>1000,51721=>1000,51722=>1000,51723=>1000,51724=>1000,51725=>1000,51726=>1000,51727=>1000,51728=>1000,51729=>1000,51730=>1000,51731=>1000,51732=>1000,51733=>1000,51734=>1000,51735=>1000,51736=>1000,51737=>1000,51738=>1000,51739=>1000,51740=>1000,51741=>1000,51742=>1000,51743=>1000,51744=>1000,51745=>1000,51746=>1000,51747=>1000,51748=>1000,51749=>1000,51750=>1000,51751=>1000,51752=>1000,51753=>1000,51754=>1000,51755=>1000,51756=>1000,51757=>1000,51758=>1000,51759=>1000,51760=>1000,51761=>1000,51762=>1000,51763=>1000,51764=>1000,51765=>1000,51766=>1000,51767=>1000,51768=>1000,51769=>1000,51770=>1000,51771=>1000,51772=>1000,51773=>1000,51774=>1000,51775=>1000,51776=>1000,51777=>1000,51778=>1000,51779=>1000,51780=>1000,51781=>1000,51782=>1000,51783=>1000,51784=>1000,51785=>1000,51786=>1000,51787=>1000,51788=>1000,51789=>1000,51790=>1000,51791=>1000,51792=>1000,51793=>1000,51794=>1000,51795=>1000,51796=>1000,51797=>1000,51798=>1000,51799=>1000,51800=>1000,51801=>1000,51802=>1000,51803=>1000,51804=>1000,51805=>1000,51806=>1000,51807=>1000,51808=>1000,51809=>1000,51810=>1000,51811=>1000,51812=>1000,51813=>1000,51814=>1000,51815=>1000,51816=>1000,51817=>1000,51818=>1000,51819=>1000,51820=>1000,51821=>1000,51822=>1000,51823=>1000,51824=>1000,51825=>1000,51826=>1000,51827=>1000,51828=>1000,51829=>1000,51830=>1000,51831=>1000,51832=>1000,51833=>1000,51834=>1000,51835=>1000,51836=>1000,51837=>1000,51838=>1000,51839=>1000,51840=>1000,51841=>1000,51842=>1000,51843=>1000,51844=>1000,51845=>1000,51846=>1000,51847=>1000,51848=>1000,51849=>1000,51850=>1000,51851=>1000,51852=>1000,51853=>1000,51854=>1000,51855=>1000,51856=>1000,51857=>1000,51858=>1000,51859=>1000,51860=>1000,51861=>1000,51862=>1000,51863=>1000,51864=>1000,51865=>1000,51866=>1000,51867=>1000,51868=>1000,51869=>1000,51870=>1000,51871=>1000,51872=>1000,51873=>1000,51874=>1000,51875=>1000,51876=>1000,51877=>1000,51878=>1000,51879=>1000,51880=>1000,51881=>1000,51882=>1000,51883=>1000,51884=>1000,51885=>1000,51886=>1000,51887=>1000,51888=>1000,51889=>1000,51890=>1000,51891=>1000,51892=>1000,51893=>1000,51894=>1000,51895=>1000,51896=>1000,51897=>1000,51898=>1000,51899=>1000,51900=>1000,51901=>1000,51902=>1000,51903=>1000,51904=>1000,51905=>1000,51906=>1000,51907=>1000,51908=>1000,51909=>1000,51910=>1000,51911=>1000,51912=>1000,51913=>1000,51914=>1000,51915=>1000,51916=>1000,51917=>1000,51918=>1000,51919=>1000,51920=>1000,51921=>1000,51922=>1000,51923=>1000,51924=>1000,51925=>1000,51926=>1000,51927=>1000,51928=>1000,51929=>1000,51930=>1000,51931=>1000,51932=>1000,51933=>1000,51934=>1000,51935=>1000,51936=>1000,51937=>1000,51938=>1000,51939=>1000,51940=>1000,51941=>1000,51942=>1000,51943=>1000,51944=>1000,51945=>1000,51946=>1000,51947=>1000,51948=>1000,51949=>1000,51950=>1000,51951=>1000,51952=>1000,51953=>1000,51954=>1000,51955=>1000,51956=>1000,51957=>1000,51958=>1000,51959=>1000,51960=>1000,51961=>1000,51962=>1000,51963=>1000,51964=>1000,51965=>1000,51966=>1000,51967=>1000,51968=>1000,51969=>1000,51970=>1000,51971=>1000,51972=>1000,51973=>1000,51974=>1000,51975=>1000,51976=>1000,51977=>1000,51978=>1000,51979=>1000,51980=>1000,51981=>1000,51982=>1000,51983=>1000,51984=>1000,51985=>1000,51986=>1000,51987=>1000,51988=>1000,51989=>1000,51990=>1000,51991=>1000,51992=>1000,51993=>1000,51994=>1000,51995=>1000,51996=>1000,51997=>1000,51998=>1000,51999=>1000,52000=>1000,52001=>1000,52002=>1000,52003=>1000,52004=>1000,52005=>1000,52006=>1000,52007=>1000,52008=>1000,52009=>1000,52010=>1000,52011=>1000,52012=>1000,52013=>1000,52014=>1000,52015=>1000,52016=>1000,52017=>1000,52018=>1000,52019=>1000,52020=>1000,52021=>1000,52022=>1000,52023=>1000,52024=>1000,52025=>1000,52026=>1000,52027=>1000,52028=>1000,52029=>1000,52030=>1000,52031=>1000,52032=>1000,52033=>1000,52034=>1000,52035=>1000,52036=>1000,52037=>1000,52038=>1000,52039=>1000,52040=>1000,52041=>1000,52042=>1000,52043=>1000,52044=>1000,52045=>1000,52046=>1000,52047=>1000,52048=>1000,52049=>1000,52050=>1000,52051=>1000,52052=>1000,52053=>1000,52054=>1000,52055=>1000,52056=>1000,52057=>1000,52058=>1000,52059=>1000,52060=>1000,52061=>1000,52062=>1000,52063=>1000,52064=>1000,52065=>1000,52066=>1000,52067=>1000,52068=>1000,52069=>1000,52070=>1000,52071=>1000,52072=>1000,52073=>1000,52074=>1000,52075=>1000,52076=>1000,52077=>1000,52078=>1000,52079=>1000,52080=>1000,52081=>1000,52082=>1000,52083=>1000,52084=>1000,52085=>1000,52086=>1000,52087=>1000,52088=>1000,52089=>1000,52090=>1000,52091=>1000,52092=>1000,52093=>1000,52094=>1000,52095=>1000,52096=>1000,52097=>1000,52098=>1000,52099=>1000,52100=>1000,52101=>1000,52102=>1000,52103=>1000,52104=>1000,52105=>1000,52106=>1000,52107=>1000,52108=>1000,52109=>1000,52110=>1000,52111=>1000,52112=>1000,52113=>1000,52114=>1000,52115=>1000,52116=>1000,52117=>1000,52118=>1000,52119=>1000,52120=>1000,52121=>1000,52122=>1000,52123=>1000,52124=>1000,52125=>1000,52126=>1000,52127=>1000,52128=>1000,52129=>1000,52130=>1000,52131=>1000,52132=>1000,52133=>1000,52134=>1000,52135=>1000,52136=>1000,52137=>1000,52138=>1000,52139=>1000,52140=>1000,52141=>1000,52142=>1000,52143=>1000,52144=>1000,52145=>1000,52146=>1000,52147=>1000,52148=>1000,52149=>1000,52150=>1000,52151=>1000,52152=>1000,52153=>1000,52154=>1000,52155=>1000,52156=>1000,52157=>1000,52158=>1000,52159=>1000,52160=>1000,52161=>1000,52162=>1000,52163=>1000,52164=>1000,52165=>1000,52166=>1000,52167=>1000,52168=>1000,52169=>1000,52170=>1000,52171=>1000,52172=>1000,52173=>1000,52174=>1000,52175=>1000,52176=>1000,52177=>1000,52178=>1000,52179=>1000,52180=>1000,52181=>1000,52182=>1000,52183=>1000,52184=>1000,52185=>1000,52186=>1000,52187=>1000,52188=>1000,52189=>1000,52190=>1000,52191=>1000,52192=>1000,52193=>1000,52194=>1000,52195=>1000,52196=>1000,52197=>1000,52198=>1000,52199=>1000,52200=>1000,52201=>1000,52202=>1000,52203=>1000,52204=>1000,52205=>1000,52206=>1000,52207=>1000,52208=>1000,52209=>1000,52210=>1000,52211=>1000,52212=>1000,52213=>1000,52214=>1000,52215=>1000,52216=>1000,52217=>1000,52218=>1000,52219=>1000,52220=>1000,52221=>1000,52222=>1000,52223=>1000,52224=>1000,52225=>1000,52226=>1000,52227=>1000,52228=>1000,52229=>1000,52230=>1000,52231=>1000,52232=>1000,52233=>1000,52234=>1000,52235=>1000,52236=>1000,52237=>1000,52238=>1000,52239=>1000,52240=>1000,52241=>1000,52242=>1000,52243=>1000,52244=>1000,52245=>1000,52246=>1000,52247=>1000,52248=>1000,52249=>1000,52250=>1000,52251=>1000,52252=>1000,52253=>1000,52254=>1000,52255=>1000,52256=>1000,52257=>1000,52258=>1000,52259=>1000,52260=>1000,52261=>1000,52262=>1000,52263=>1000,52264=>1000,52265=>1000,52266=>1000,52267=>1000,52268=>1000,52269=>1000,52270=>1000,52271=>1000,52272=>1000,52273=>1000,52274=>1000,52275=>1000,52276=>1000,52277=>1000,52278=>1000,52279=>1000,52280=>1000,52281=>1000,52282=>1000,52283=>1000,52284=>1000,52285=>1000,52286=>1000,52287=>1000,52288=>1000,52289=>1000,52290=>1000,52291=>1000,52292=>1000,52293=>1000,52294=>1000,52295=>1000,52296=>1000,52297=>1000,52298=>1000,52299=>1000,52300=>1000,52301=>1000,52302=>1000,52303=>1000,52304=>1000,52305=>1000,52306=>1000,52307=>1000,52308=>1000,52309=>1000,52310=>1000,52311=>1000,52312=>1000,52313=>1000,52314=>1000,52315=>1000,52316=>1000,52317=>1000,52318=>1000,52319=>1000,52320=>1000,52321=>1000,52322=>1000,52323=>1000,52324=>1000,52325=>1000,52326=>1000,52327=>1000,52328=>1000,52329=>1000,52330=>1000,52331=>1000,52332=>1000,52333=>1000,52334=>1000,52335=>1000,52336=>1000,52337=>1000,52338=>1000,52339=>1000,52340=>1000,52341=>1000,52342=>1000,52343=>1000,52344=>1000,52345=>1000,52346=>1000,52347=>1000,52348=>1000,52349=>1000,52350=>1000,52351=>1000,52352=>1000,52353=>1000,52354=>1000,52355=>1000,52356=>1000,52357=>1000,52358=>1000,52359=>1000,52360=>1000,52361=>1000,52362=>1000,52363=>1000,52364=>1000,52365=>1000,52366=>1000,52367=>1000,52368=>1000,52369=>1000,52370=>1000,52371=>1000,52372=>1000,52373=>1000,52374=>1000,52375=>1000,52376=>1000,52377=>1000,52378=>1000,52379=>1000,52380=>1000,52381=>1000,52382=>1000,52383=>1000,52384=>1000,52385=>1000,52386=>1000,52387=>1000,52388=>1000,52389=>1000,52390=>1000,52391=>1000,52392=>1000,52393=>1000,52394=>1000,52395=>1000,52396=>1000,52397=>1000,52398=>1000,52399=>1000,52400=>1000,52401=>1000,52402=>1000,52403=>1000,52404=>1000,52405=>1000,52406=>1000,52407=>1000,52408=>1000,52409=>1000,52410=>1000,52411=>1000,52412=>1000,52413=>1000,52414=>1000,52415=>1000,52416=>1000,52417=>1000,52418=>1000,52419=>1000,52420=>1000,52421=>1000,52422=>1000,52423=>1000,52424=>1000,52425=>1000,52426=>1000,52427=>1000,52428=>1000,52429=>1000,52430=>1000,52431=>1000,52432=>1000,52433=>1000,52434=>1000,52435=>1000,52436=>1000,52437=>1000,52438=>1000,52439=>1000,52440=>1000,52441=>1000,52442=>1000,52443=>1000,52444=>1000,52445=>1000,52446=>1000,52447=>1000,52448=>1000,52449=>1000,52450=>1000,52451=>1000,52452=>1000,52453=>1000,52454=>1000,52455=>1000,52456=>1000,52457=>1000,52458=>1000,52459=>1000,52460=>1000,52461=>1000,52462=>1000,52463=>1000,52464=>1000,52465=>1000,52466=>1000,52467=>1000,52468=>1000,52469=>1000,52470=>1000,52471=>1000,52472=>1000,52473=>1000,52474=>1000,52475=>1000,52476=>1000,52477=>1000,52478=>1000,52479=>1000,52480=>1000,52481=>1000,52482=>1000,52483=>1000,52484=>1000,52485=>1000,52486=>1000,52487=>1000,52488=>1000,52489=>1000,52490=>1000,52491=>1000,52492=>1000,52493=>1000,52494=>1000,52495=>1000,52496=>1000,52497=>1000,52498=>1000,52499=>1000,52500=>1000,52501=>1000,52502=>1000,52503=>1000,52504=>1000,52505=>1000,52506=>1000,52507=>1000,52508=>1000,52509=>1000,52510=>1000,52511=>1000,52512=>1000,52513=>1000,52514=>1000,52515=>1000,52516=>1000,52517=>1000,52518=>1000,52519=>1000,52520=>1000,52521=>1000,52522=>1000,52523=>1000,52524=>1000,52525=>1000,52526=>1000,52527=>1000,52528=>1000,52529=>1000,52530=>1000,52531=>1000,52532=>1000,52533=>1000,52534=>1000,52535=>1000,52536=>1000,52537=>1000,52538=>1000,52539=>1000,52540=>1000,52541=>1000,52542=>1000,52543=>1000,52544=>1000,52545=>1000,52546=>1000,52547=>1000,52548=>1000,52549=>1000,52550=>1000,52551=>1000,52552=>1000,52553=>1000,52554=>1000,52555=>1000,52556=>1000,52557=>1000,52558=>1000,52559=>1000,52560=>1000,52561=>1000,52562=>1000,52563=>1000,52564=>1000,52565=>1000,52566=>1000,52567=>1000,52568=>1000,52569=>1000,52570=>1000,52571=>1000,52572=>1000,52573=>1000,52574=>1000,52575=>1000,52576=>1000,52577=>1000,52578=>1000,52579=>1000,52580=>1000,52581=>1000,52582=>1000,52583=>1000,52584=>1000,52585=>1000,52586=>1000,52587=>1000,52588=>1000,52589=>1000,52590=>1000,52591=>1000,52592=>1000,52593=>1000,52594=>1000,52595=>1000,52596=>1000,52597=>1000,52598=>1000,52599=>1000,52600=>1000,52601=>1000,52602=>1000,52603=>1000,52604=>1000,52605=>1000,52606=>1000,52607=>1000,52608=>1000,52609=>1000,52610=>1000,52611=>1000,52612=>1000,52613=>1000,52614=>1000,52615=>1000,52616=>1000,52617=>1000,52618=>1000,52619=>1000,52620=>1000,52621=>1000,52622=>1000,52623=>1000,52624=>1000,52625=>1000,52626=>1000,52627=>1000,52628=>1000,52629=>1000,52630=>1000,52631=>1000,52632=>1000,52633=>1000,52634=>1000,52635=>1000,52636=>1000,52637=>1000,52638=>1000,52639=>1000,52640=>1000,52641=>1000,52642=>1000,52643=>1000,52644=>1000,52645=>1000,52646=>1000,52647=>1000,52648=>1000,52649=>1000,52650=>1000,52651=>1000,52652=>1000,52653=>1000,52654=>1000,52655=>1000,52656=>1000,52657=>1000,52658=>1000,52659=>1000,52660=>1000,52661=>1000,52662=>1000,52663=>1000,52664=>1000,52665=>1000,52666=>1000,52667=>1000,52668=>1000,52669=>1000,52670=>1000,52671=>1000,52672=>1000,52673=>1000,52674=>1000,52675=>1000,52676=>1000,52677=>1000,52678=>1000,52679=>1000,52680=>1000,52681=>1000,52682=>1000,52683=>1000,52684=>1000,52685=>1000,52686=>1000,52687=>1000,52688=>1000,52689=>1000,52690=>1000,52691=>1000,52692=>1000,52693=>1000,52694=>1000,52695=>1000,52696=>1000,52697=>1000,52698=>1000,52699=>1000,52700=>1000,52701=>1000,52702=>1000,52703=>1000,52704=>1000,52705=>1000,52706=>1000,52707=>1000,52708=>1000,52709=>1000,52710=>1000,52711=>1000,52712=>1000,52713=>1000,52714=>1000,52715=>1000,52716=>1000,52717=>1000,52718=>1000,52719=>1000,52720=>1000,52721=>1000,52722=>1000,52723=>1000,52724=>1000,52725=>1000,52726=>1000,52727=>1000,52728=>1000,52729=>1000,52730=>1000,52731=>1000,52732=>1000,52733=>1000,52734=>1000,52735=>1000,52736=>1000,52737=>1000,52738=>1000,52739=>1000,52740=>1000,52741=>1000,52742=>1000,52743=>1000,52744=>1000,52745=>1000,52746=>1000,52747=>1000,52748=>1000,52749=>1000,52750=>1000,52751=>1000,52752=>1000,52753=>1000,52754=>1000,52755=>1000,52756=>1000,52757=>1000,52758=>1000,52759=>1000,52760=>1000,52761=>1000,52762=>1000,52763=>1000,52764=>1000,52765=>1000,52766=>1000,52767=>1000,52768=>1000,52769=>1000,52770=>1000,52771=>1000,52772=>1000,52773=>1000,52774=>1000,52775=>1000,52776=>1000,52777=>1000,52778=>1000,52779=>1000,52780=>1000,52781=>1000,52782=>1000,52783=>1000,52784=>1000,52785=>1000,52786=>1000,52787=>1000,52788=>1000,52789=>1000,52790=>1000,52791=>1000,52792=>1000,52793=>1000,52794=>1000,52795=>1000,52796=>1000,52797=>1000,52798=>1000,52799=>1000,52800=>1000,52801=>1000,52802=>1000,52803=>1000,52804=>1000,52805=>1000,52806=>1000,52807=>1000,52808=>1000,52809=>1000,52810=>1000,52811=>1000,52812=>1000,52813=>1000,52814=>1000,52815=>1000,52816=>1000,52817=>1000,52818=>1000,52819=>1000,52820=>1000,52821=>1000,52822=>1000,52823=>1000,52824=>1000,52825=>1000,52826=>1000,52827=>1000,52828=>1000,52829=>1000,52830=>1000,52831=>1000,52832=>1000,52833=>1000,52834=>1000,52835=>1000,52836=>1000,52837=>1000,52838=>1000,52839=>1000,52840=>1000,52841=>1000,52842=>1000,52843=>1000,52844=>1000,52845=>1000,52846=>1000,52847=>1000,52848=>1000,52849=>1000,52850=>1000,52851=>1000,52852=>1000,52853=>1000,52854=>1000,52855=>1000,52856=>1000,52857=>1000,52858=>1000,52859=>1000,52860=>1000,52861=>1000,52862=>1000,52863=>1000,52864=>1000,52865=>1000,52866=>1000,52867=>1000,52868=>1000,52869=>1000,52870=>1000,52871=>1000,52872=>1000,52873=>1000,52874=>1000,52875=>1000,52876=>1000,52877=>1000,52878=>1000,52879=>1000,52880=>1000,52881=>1000,52882=>1000,52883=>1000,52884=>1000,52885=>1000,52886=>1000,52887=>1000,52888=>1000,52889=>1000,52890=>1000,52891=>1000,52892=>1000,52893=>1000,52894=>1000,52895=>1000,52896=>1000,52897=>1000,52898=>1000,52899=>1000,52900=>1000,52901=>1000,52902=>1000,52903=>1000,52904=>1000,52905=>1000,52906=>1000,52907=>1000,52908=>1000,52909=>1000,52910=>1000,52911=>1000,52912=>1000,52913=>1000,52914=>1000,52915=>1000,52916=>1000,52917=>1000,52918=>1000,52919=>1000,52920=>1000,52921=>1000,52922=>1000,52923=>1000,52924=>1000,52925=>1000,52926=>1000,52927=>1000,52928=>1000,52929=>1000,52930=>1000,52931=>1000,52932=>1000,52933=>1000,52934=>1000,52935=>1000,52936=>1000,52937=>1000,52938=>1000,52939=>1000,52940=>1000,52941=>1000,52942=>1000,52943=>1000,52944=>1000,52945=>1000,52946=>1000,52947=>1000,52948=>1000,52949=>1000,52950=>1000,52951=>1000,52952=>1000,52953=>1000,52954=>1000,52955=>1000,52956=>1000,52957=>1000,52958=>1000,52959=>1000,52960=>1000,52961=>1000,52962=>1000,52963=>1000,52964=>1000,52965=>1000,52966=>1000,52967=>1000,52968=>1000,52969=>1000,52970=>1000,52971=>1000,52972=>1000,52973=>1000,52974=>1000,52975=>1000,52976=>1000,52977=>1000,52978=>1000,52979=>1000,52980=>1000,52981=>1000,52982=>1000,52983=>1000,52984=>1000,52985=>1000,52986=>1000,52987=>1000,52988=>1000,52989=>1000,52990=>1000,52991=>1000,52992=>1000,52993=>1000,52994=>1000,52995=>1000,52996=>1000,52997=>1000,52998=>1000,52999=>1000,53000=>1000,53001=>1000,53002=>1000,53003=>1000,53004=>1000,53005=>1000,53006=>1000,53007=>1000,53008=>1000,53009=>1000,53010=>1000,53011=>1000,53012=>1000,53013=>1000,53014=>1000,53015=>1000,53016=>1000,53017=>1000,53018=>1000,53019=>1000,53020=>1000,53021=>1000,53022=>1000,53023=>1000,53024=>1000,53025=>1000,53026=>1000,53027=>1000,53028=>1000,53029=>1000,53030=>1000,53031=>1000,53032=>1000,53033=>1000,53034=>1000,53035=>1000,53036=>1000,53037=>1000,53038=>1000,53039=>1000,53040=>1000,53041=>1000,53042=>1000,53043=>1000,53044=>1000,53045=>1000,53046=>1000,53047=>1000,53048=>1000,53049=>1000,53050=>1000,53051=>1000,53052=>1000,53053=>1000,53054=>1000,53055=>1000,53056=>1000,53057=>1000,53058=>1000,53059=>1000,53060=>1000,53061=>1000,53062=>1000,53063=>1000,53064=>1000,53065=>1000,53066=>1000,53067=>1000,53068=>1000,53069=>1000,53070=>1000,53071=>1000,53072=>1000,53073=>1000,53074=>1000,53075=>1000,53076=>1000,53077=>1000,53078=>1000,53079=>1000,53080=>1000,53081=>1000,53082=>1000,53083=>1000,53084=>1000,53085=>1000,53086=>1000,53087=>1000,53088=>1000,53089=>1000,53090=>1000,53091=>1000,53092=>1000,53093=>1000,53094=>1000,53095=>1000,53096=>1000,53097=>1000,53098=>1000,53099=>1000,53100=>1000,53101=>1000,53102=>1000,53103=>1000,53104=>1000,53105=>1000,53106=>1000,53107=>1000,53108=>1000,53109=>1000,53110=>1000,53111=>1000,53112=>1000,53113=>1000,53114=>1000,53115=>1000,53116=>1000,53117=>1000,53118=>1000,53119=>1000,53120=>1000,53121=>1000,53122=>1000,53123=>1000,53124=>1000,53125=>1000,53126=>1000,53127=>1000,53128=>1000,53129=>1000,53130=>1000,53131=>1000,53132=>1000,53133=>1000,53134=>1000,53135=>1000,53136=>1000,53137=>1000,53138=>1000,53139=>1000,53140=>1000,53141=>1000,53142=>1000,53143=>1000,53144=>1000,53145=>1000,53146=>1000,53147=>1000,53148=>1000,53149=>1000,53150=>1000,53151=>1000,53152=>1000,53153=>1000,53154=>1000,53155=>1000,53156=>1000,53157=>1000,53158=>1000,53159=>1000,53160=>1000,53161=>1000,53162=>1000,53163=>1000,53164=>1000,53165=>1000,53166=>1000,53167=>1000,53168=>1000,53169=>1000,53170=>1000,53171=>1000,53172=>1000,53173=>1000,53174=>1000,53175=>1000,53176=>1000,53177=>1000,53178=>1000,53179=>1000,53180=>1000,53181=>1000,53182=>1000,53183=>1000,53184=>1000,53185=>1000,53186=>1000,53187=>1000,53188=>1000,53189=>1000,53190=>1000,53191=>1000,53192=>1000,53193=>1000,53194=>1000,53195=>1000,53196=>1000,53197=>1000,53198=>1000,53199=>1000,53200=>1000,53201=>1000,53202=>1000,53203=>1000,53204=>1000,53205=>1000,53206=>1000,53207=>1000,53208=>1000,53209=>1000,53210=>1000,53211=>1000,53212=>1000,53213=>1000,53214=>1000,53215=>1000,53216=>1000,53217=>1000,53218=>1000,53219=>1000,53220=>1000,53221=>1000,53222=>1000,53223=>1000,53224=>1000,53225=>1000,53226=>1000,53227=>1000,53228=>1000,53229=>1000,53230=>1000,53231=>1000,53232=>1000,53233=>1000,53234=>1000,53235=>1000,53236=>1000,53237=>1000,53238=>1000,53239=>1000,53240=>1000,53241=>1000,53242=>1000,53243=>1000,53244=>1000,53245=>1000,53246=>1000,53247=>1000,53248=>1000,53249=>1000,53250=>1000,53251=>1000,53252=>1000,53253=>1000,53254=>1000,53255=>1000,53256=>1000,53257=>1000,53258=>1000,53259=>1000,53260=>1000,53261=>1000,53262=>1000,53263=>1000,53264=>1000,53265=>1000,53266=>1000,53267=>1000,53268=>1000,53269=>1000,53270=>1000,53271=>1000,53272=>1000,53273=>1000,53274=>1000,53275=>1000,53276=>1000,53277=>1000,53278=>1000,53279=>1000,53280=>1000,53281=>1000,53282=>1000,53283=>1000,53284=>1000,53285=>1000,53286=>1000,53287=>1000,53288=>1000,53289=>1000,53290=>1000,53291=>1000,53292=>1000,53293=>1000,53294=>1000,53295=>1000,53296=>1000,53297=>1000,53298=>1000,53299=>1000,53300=>1000,53301=>1000,53302=>1000,53303=>1000,53304=>1000,53305=>1000,53306=>1000,53307=>1000,53308=>1000,53309=>1000,53310=>1000,53311=>1000,53312=>1000,53313=>1000,53314=>1000,53315=>1000,53316=>1000,53317=>1000,53318=>1000,53319=>1000,53320=>1000,53321=>1000,53322=>1000,53323=>1000,53324=>1000,53325=>1000,53326=>1000,53327=>1000,53328=>1000,53329=>1000,53330=>1000,53331=>1000,53332=>1000,53333=>1000,53334=>1000,53335=>1000,53336=>1000,53337=>1000,53338=>1000,53339=>1000,53340=>1000,53341=>1000,53342=>1000,53343=>1000,53344=>1000,53345=>1000,53346=>1000,53347=>1000,53348=>1000,53349=>1000,53350=>1000,53351=>1000,53352=>1000,53353=>1000,53354=>1000,53355=>1000,53356=>1000,53357=>1000,53358=>1000,53359=>1000,53360=>1000,53361=>1000,53362=>1000,53363=>1000,53364=>1000,53365=>1000,53366=>1000,53367=>1000,53368=>1000,53369=>1000,53370=>1000,53371=>1000,53372=>1000,53373=>1000,53374=>1000,53375=>1000,53376=>1000,53377=>1000,53378=>1000,53379=>1000,53380=>1000,53381=>1000,53382=>1000,53383=>1000,53384=>1000,53385=>1000,53386=>1000,53387=>1000,53388=>1000,53389=>1000,53390=>1000,53391=>1000,53392=>1000,53393=>1000,53394=>1000,53395=>1000,53396=>1000,53397=>1000,53398=>1000,53399=>1000,53400=>1000,53401=>1000,53402=>1000,53403=>1000,53404=>1000,53405=>1000,53406=>1000,53407=>1000,53408=>1000,53409=>1000,53410=>1000,53411=>1000,53412=>1000,53413=>1000,53414=>1000,53415=>1000,53416=>1000,53417=>1000,53418=>1000,53419=>1000,53420=>1000,53421=>1000,53422=>1000,53423=>1000,53424=>1000,53425=>1000,53426=>1000,53427=>1000,53428=>1000,53429=>1000,53430=>1000,53431=>1000,53432=>1000,53433=>1000,53434=>1000,53435=>1000,53436=>1000,53437=>1000,53438=>1000,53439=>1000,53440=>1000,53441=>1000,53442=>1000,53443=>1000,53444=>1000,53445=>1000,53446=>1000,53447=>1000,53448=>1000,53449=>1000,53450=>1000,53451=>1000,53452=>1000,53453=>1000,53454=>1000,53455=>1000,53456=>1000,53457=>1000,53458=>1000,53459=>1000,53460=>1000,53461=>1000,53462=>1000,53463=>1000,53464=>1000,53465=>1000,53466=>1000,53467=>1000,53468=>1000,53469=>1000,53470=>1000,53471=>1000,53472=>1000,53473=>1000,53474=>1000,53475=>1000,53476=>1000,53477=>1000,53478=>1000,53479=>1000,53480=>1000,53481=>1000,53482=>1000,53483=>1000,53484=>1000,53485=>1000,53486=>1000,53487=>1000,53488=>1000,53489=>1000,53490=>1000,53491=>1000,53492=>1000,53493=>1000,53494=>1000,53495=>1000,53496=>1000,53497=>1000,53498=>1000,53499=>1000,53500=>1000,53501=>1000,53502=>1000,53503=>1000,53504=>1000,53505=>1000,53506=>1000,53507=>1000,53508=>1000,53509=>1000,53510=>1000,53511=>1000,53512=>1000,53513=>1000,53514=>1000,53515=>1000,53516=>1000,53517=>1000,53518=>1000,53519=>1000,53520=>1000,53521=>1000,53522=>1000,53523=>1000,53524=>1000,53525=>1000,53526=>1000,53527=>1000,53528=>1000,53529=>1000,53530=>1000,53531=>1000,53532=>1000,53533=>1000,53534=>1000,53535=>1000,53536=>1000,53537=>1000,53538=>1000,53539=>1000,53540=>1000,53541=>1000,53542=>1000,53543=>1000,53544=>1000,53545=>1000,53546=>1000,53547=>1000,53548=>1000,53549=>1000,53550=>1000,53551=>1000,53552=>1000,53553=>1000,53554=>1000,53555=>1000,53556=>1000,53557=>1000,53558=>1000,53559=>1000,53560=>1000,53561=>1000,53562=>1000,53563=>1000,53564=>1000,53565=>1000,53566=>1000,53567=>1000,53568=>1000,53569=>1000,53570=>1000,53571=>1000,53572=>1000,53573=>1000,53574=>1000,53575=>1000,53576=>1000,53577=>1000,53578=>1000,53579=>1000,53580=>1000,53581=>1000,53582=>1000,53583=>1000,53584=>1000,53585=>1000,53586=>1000,53587=>1000,53588=>1000,53589=>1000,53590=>1000,53591=>1000,53592=>1000,53593=>1000,53594=>1000,53595=>1000,53596=>1000,53597=>1000,53598=>1000,53599=>1000,53600=>1000,53601=>1000,53602=>1000,53603=>1000,53604=>1000,53605=>1000,53606=>1000,53607=>1000,53608=>1000,53609=>1000,53610=>1000,53611=>1000,53612=>1000,53613=>1000,53614=>1000,53615=>1000,53616=>1000,53617=>1000,53618=>1000,53619=>1000,53620=>1000,53621=>1000,53622=>1000,53623=>1000,53624=>1000,53625=>1000,53626=>1000,53627=>1000,53628=>1000,53629=>1000,53630=>1000,53631=>1000,53632=>1000,53633=>1000,53634=>1000,53635=>1000,53636=>1000,53637=>1000,53638=>1000,53639=>1000,53640=>1000,53641=>1000,53642=>1000,53643=>1000,53644=>1000,53645=>1000,53646=>1000,53647=>1000,53648=>1000,53649=>1000,53650=>1000,53651=>1000,53652=>1000,53653=>1000,53654=>1000,53655=>1000,53656=>1000,53657=>1000,53658=>1000,53659=>1000,53660=>1000,53661=>1000,53662=>1000,53663=>1000,53664=>1000,53665=>1000,53666=>1000,53667=>1000,53668=>1000,53669=>1000,53670=>1000,53671=>1000,53672=>1000,53673=>1000,53674=>1000,53675=>1000,53676=>1000,53677=>1000,53678=>1000,53679=>1000,53680=>1000,53681=>1000,53682=>1000,53683=>1000,53684=>1000,53685=>1000,53686=>1000,53687=>1000,53688=>1000,53689=>1000,53690=>1000,53691=>1000,53692=>1000,53693=>1000,53694=>1000,53695=>1000,53696=>1000,53697=>1000,53698=>1000,53699=>1000,53700=>1000,53701=>1000,53702=>1000,53703=>1000,53704=>1000,53705=>1000,53706=>1000,53707=>1000,53708=>1000,53709=>1000,53710=>1000,53711=>1000,53712=>1000,53713=>1000,53714=>1000,53715=>1000,53716=>1000,53717=>1000,53718=>1000,53719=>1000,53720=>1000,53721=>1000,53722=>1000,53723=>1000,53724=>1000,53725=>1000,53726=>1000,53727=>1000,53728=>1000,53729=>1000,53730=>1000,53731=>1000,53732=>1000,53733=>1000,53734=>1000,53735=>1000,53736=>1000,53737=>1000,53738=>1000,53739=>1000,53740=>1000,53741=>1000,53742=>1000,53743=>1000,53744=>1000,53745=>1000,53746=>1000,53747=>1000,53748=>1000,53749=>1000,53750=>1000,53751=>1000,53752=>1000,53753=>1000,53754=>1000,53755=>1000,53756=>1000,53757=>1000,53758=>1000,53759=>1000,53760=>1000,53761=>1000,53762=>1000,53763=>1000,53764=>1000,53765=>1000,53766=>1000,53767=>1000,53768=>1000,53769=>1000,53770=>1000,53771=>1000,53772=>1000,53773=>1000,53774=>1000,53775=>1000,53776=>1000,53777=>1000,53778=>1000,53779=>1000,53780=>1000,53781=>1000,53782=>1000,53783=>1000,53784=>1000,53785=>1000,53786=>1000,53787=>1000,53788=>1000,53789=>1000,53790=>1000,53791=>1000,53792=>1000,53793=>1000,53794=>1000,53795=>1000,53796=>1000,53797=>1000,53798=>1000,53799=>1000,53800=>1000,53801=>1000,53802=>1000,53803=>1000,53804=>1000,53805=>1000,53806=>1000,53807=>1000,53808=>1000,53809=>1000,53810=>1000,53811=>1000,53812=>1000,53813=>1000,53814=>1000,53815=>1000,53816=>1000,53817=>1000,53818=>1000,53819=>1000,53820=>1000,53821=>1000,53822=>1000,53823=>1000,53824=>1000,53825=>1000,53826=>1000,53827=>1000,53828=>1000,53829=>1000,53830=>1000,53831=>1000,53832=>1000,53833=>1000,53834=>1000,53835=>1000,53836=>1000,53837=>1000,53838=>1000,53839=>1000,53840=>1000,53841=>1000,53842=>1000,53843=>1000,53844=>1000,53845=>1000,53846=>1000,53847=>1000,53848=>1000,53849=>1000,53850=>1000,53851=>1000,53852=>1000,53853=>1000,53854=>1000,53855=>1000,53856=>1000,53857=>1000,53858=>1000,53859=>1000,53860=>1000,53861=>1000,53862=>1000,53863=>1000,53864=>1000,53865=>1000,53866=>1000,53867=>1000,53868=>1000,53869=>1000,53870=>1000,53871=>1000,53872=>1000,53873=>1000,53874=>1000,53875=>1000,53876=>1000,53877=>1000,53878=>1000,53879=>1000,53880=>1000,53881=>1000,53882=>1000,53883=>1000,53884=>1000,53885=>1000,53886=>1000,53887=>1000,53888=>1000,53889=>1000,53890=>1000,53891=>1000,53892=>1000,53893=>1000,53894=>1000,53895=>1000,53896=>1000,53897=>1000,53898=>1000,53899=>1000,53900=>1000,53901=>1000,53902=>1000,53903=>1000,53904=>1000,53905=>1000,53906=>1000,53907=>1000,53908=>1000,53909=>1000,53910=>1000,53911=>1000,53912=>1000,53913=>1000,53914=>1000,53915=>1000,53916=>1000,53917=>1000,53918=>1000,53919=>1000,53920=>1000,53921=>1000,53922=>1000,53923=>1000,53924=>1000,53925=>1000,53926=>1000,53927=>1000,53928=>1000,53929=>1000,53930=>1000,53931=>1000,53932=>1000,53933=>1000,53934=>1000,53935=>1000,53936=>1000,53937=>1000,53938=>1000,53939=>1000,53940=>1000,53941=>1000,53942=>1000,53943=>1000,53944=>1000,53945=>1000,53946=>1000,53947=>1000,53948=>1000,53949=>1000,53950=>1000,53951=>1000,53952=>1000,53953=>1000,53954=>1000,53955=>1000,53956=>1000,53957=>1000,53958=>1000,53959=>1000,53960=>1000,53961=>1000,53962=>1000,53963=>1000,53964=>1000,53965=>1000,53966=>1000,53967=>1000,53968=>1000,53969=>1000,53970=>1000,53971=>1000,53972=>1000,53973=>1000,53974=>1000,53975=>1000,53976=>1000,53977=>1000,53978=>1000,53979=>1000,53980=>1000,53981=>1000,53982=>1000,53983=>1000,53984=>1000,53985=>1000,53986=>1000,53987=>1000,53988=>1000,53989=>1000,53990=>1000,53991=>1000,53992=>1000,53993=>1000,53994=>1000,53995=>1000,53996=>1000,53997=>1000,53998=>1000,53999=>1000,54000=>1000,54001=>1000,54002=>1000,54003=>1000,54004=>1000,54005=>1000,54006=>1000,54007=>1000,54008=>1000,54009=>1000,54010=>1000,54011=>1000,54012=>1000,54013=>1000,54014=>1000,54015=>1000,54016=>1000,54017=>1000,54018=>1000,54019=>1000,54020=>1000,54021=>1000,54022=>1000,54023=>1000,54024=>1000,54025=>1000,54026=>1000,54027=>1000,54028=>1000,54029=>1000,54030=>1000,54031=>1000,54032=>1000,54033=>1000,54034=>1000,54035=>1000,54036=>1000,54037=>1000,54038=>1000,54039=>1000,54040=>1000,54041=>1000,54042=>1000,54043=>1000,54044=>1000,54045=>1000,54046=>1000,54047=>1000,54048=>1000,54049=>1000,54050=>1000,54051=>1000,54052=>1000,54053=>1000,54054=>1000,54055=>1000,54056=>1000,54057=>1000,54058=>1000,54059=>1000,54060=>1000,54061=>1000,54062=>1000,54063=>1000,54064=>1000,54065=>1000,54066=>1000,54067=>1000,54068=>1000,54069=>1000,54070=>1000,54071=>1000,54072=>1000,54073=>1000,54074=>1000,54075=>1000,54076=>1000,54077=>1000,54078=>1000,54079=>1000,54080=>1000,54081=>1000,54082=>1000,54083=>1000,54084=>1000,54085=>1000,54086=>1000,54087=>1000,54088=>1000,54089=>1000,54090=>1000,54091=>1000,54092=>1000,54093=>1000,54094=>1000,54095=>1000,54096=>1000,54097=>1000,54098=>1000,54099=>1000,54100=>1000,54101=>1000,54102=>1000,54103=>1000,54104=>1000,54105=>1000,54106=>1000,54107=>1000,54108=>1000,54109=>1000,54110=>1000,54111=>1000,54112=>1000,54113=>1000,54114=>1000,54115=>1000,54116=>1000,54117=>1000,54118=>1000,54119=>1000,54120=>1000,54121=>1000,54122=>1000,54123=>1000,54124=>1000,54125=>1000,54126=>1000,54127=>1000,54128=>1000,54129=>1000,54130=>1000,54131=>1000,54132=>1000,54133=>1000,54134=>1000,54135=>1000,54136=>1000,54137=>1000,54138=>1000,54139=>1000,54140=>1000,54141=>1000,54142=>1000,54143=>1000,54144=>1000,54145=>1000,54146=>1000,54147=>1000,54148=>1000,54149=>1000,54150=>1000,54151=>1000,54152=>1000,54153=>1000,54154=>1000,54155=>1000,54156=>1000,54157=>1000,54158=>1000,54159=>1000,54160=>1000,54161=>1000,54162=>1000,54163=>1000,54164=>1000,54165=>1000,54166=>1000,54167=>1000,54168=>1000,54169=>1000,54170=>1000,54171=>1000,54172=>1000,54173=>1000,54174=>1000,54175=>1000,54176=>1000,54177=>1000,54178=>1000,54179=>1000,54180=>1000,54181=>1000,54182=>1000,54183=>1000,54184=>1000,54185=>1000,54186=>1000,54187=>1000,54188=>1000,54189=>1000,54190=>1000,54191=>1000,54192=>1000,54193=>1000,54194=>1000,54195=>1000,54196=>1000,54197=>1000,54198=>1000,54199=>1000,54200=>1000,54201=>1000,54202=>1000,54203=>1000,54204=>1000,54205=>1000,54206=>1000,54207=>1000,54208=>1000,54209=>1000,54210=>1000,54211=>1000,54212=>1000,54213=>1000,54214=>1000,54215=>1000,54216=>1000,54217=>1000,54218=>1000,54219=>1000,54220=>1000,54221=>1000,54222=>1000,54223=>1000,54224=>1000,54225=>1000,54226=>1000,54227=>1000,54228=>1000,54229=>1000,54230=>1000,54231=>1000,54232=>1000,54233=>1000,54234=>1000,54235=>1000,54236=>1000,54237=>1000,54238=>1000,54239=>1000,54240=>1000,54241=>1000,54242=>1000,54243=>1000,54244=>1000,54245=>1000,54246=>1000,54247=>1000,54248=>1000,54249=>1000,54250=>1000,54251=>1000,54252=>1000,54253=>1000,54254=>1000,54255=>1000,54256=>1000,54257=>1000,54258=>1000,54259=>1000,54260=>1000,54261=>1000,54262=>1000,54263=>1000,54264=>1000,54265=>1000,54266=>1000,54267=>1000,54268=>1000,54269=>1000,54270=>1000,54271=>1000,54272=>1000,54273=>1000,54274=>1000,54275=>1000,54276=>1000,54277=>1000,54278=>1000,54279=>1000,54280=>1000,54281=>1000,54282=>1000,54283=>1000,54284=>1000,54285=>1000,54286=>1000,54287=>1000,54288=>1000,54289=>1000,54290=>1000,54291=>1000,54292=>1000,54293=>1000,54294=>1000,54295=>1000,54296=>1000,54297=>1000,54298=>1000,54299=>1000,54300=>1000,54301=>1000,54302=>1000,54303=>1000,54304=>1000,54305=>1000,54306=>1000,54307=>1000,54308=>1000,54309=>1000,54310=>1000,54311=>1000,54312=>1000,54313=>1000,54314=>1000,54315=>1000,54316=>1000,54317=>1000,54318=>1000,54319=>1000,54320=>1000,54321=>1000,54322=>1000,54323=>1000,54324=>1000,54325=>1000,54326=>1000,54327=>1000,54328=>1000,54329=>1000,54330=>1000,54331=>1000,54332=>1000,54333=>1000,54334=>1000,54335=>1000,54336=>1000,54337=>1000,54338=>1000,54339=>1000,54340=>1000,54341=>1000,54342=>1000,54343=>1000,54344=>1000,54345=>1000,54346=>1000,54347=>1000,54348=>1000,54349=>1000,54350=>1000,54351=>1000,54352=>1000,54353=>1000,54354=>1000,54355=>1000,54356=>1000,54357=>1000,54358=>1000,54359=>1000,54360=>1000,54361=>1000,54362=>1000,54363=>1000,54364=>1000,54365=>1000,54366=>1000,54367=>1000,54368=>1000,54369=>1000,54370=>1000,54371=>1000,54372=>1000,54373=>1000,54374=>1000,54375=>1000,54376=>1000,54377=>1000,54378=>1000,54379=>1000,54380=>1000,54381=>1000,54382=>1000,54383=>1000,54384=>1000,54385=>1000,54386=>1000,54387=>1000,54388=>1000,54389=>1000,54390=>1000,54391=>1000,54392=>1000,54393=>1000,54394=>1000,54395=>1000,54396=>1000,54397=>1000,54398=>1000,54399=>1000,54400=>1000,54401=>1000,54402=>1000,54403=>1000,54404=>1000,54405=>1000,54406=>1000,54407=>1000,54408=>1000,54409=>1000,54410=>1000,54411=>1000,54412=>1000,54413=>1000,54414=>1000,54415=>1000,54416=>1000,54417=>1000,54418=>1000,54419=>1000,54420=>1000,54421=>1000,54422=>1000,54423=>1000,54424=>1000,54425=>1000,54426=>1000,54427=>1000,54428=>1000,54429=>1000,54430=>1000,54431=>1000,54432=>1000,54433=>1000,54434=>1000,54435=>1000,54436=>1000,54437=>1000,54438=>1000,54439=>1000,54440=>1000,54441=>1000,54442=>1000,54443=>1000,54444=>1000,54445=>1000,54446=>1000,54447=>1000,54448=>1000,54449=>1000,54450=>1000,54451=>1000,54452=>1000,54453=>1000,54454=>1000,54455=>1000,54456=>1000,54457=>1000,54458=>1000,54459=>1000,54460=>1000,54461=>1000,54462=>1000,54463=>1000,54464=>1000,54465=>1000,54466=>1000,54467=>1000,54468=>1000,54469=>1000,54470=>1000,54471=>1000,54472=>1000,54473=>1000,54474=>1000,54475=>1000,54476=>1000,54477=>1000,54478=>1000,54479=>1000,54480=>1000,54481=>1000,54482=>1000,54483=>1000,54484=>1000,54485=>1000,54486=>1000,54487=>1000,54488=>1000,54489=>1000,54490=>1000,54491=>1000,54492=>1000,54493=>1000,54494=>1000,54495=>1000,54496=>1000,54497=>1000,54498=>1000,54499=>1000,54500=>1000,54501=>1000,54502=>1000,54503=>1000,54504=>1000,54505=>1000,54506=>1000,54507=>1000,54508=>1000,54509=>1000,54510=>1000,54511=>1000,54512=>1000,54513=>1000,54514=>1000,54515=>1000,54516=>1000,54517=>1000,54518=>1000,54519=>1000,54520=>1000,54521=>1000,54522=>1000,54523=>1000,54524=>1000,54525=>1000,54526=>1000,54527=>1000,54528=>1000,54529=>1000,54530=>1000,54531=>1000,54532=>1000,54533=>1000,54534=>1000,54535=>1000,54536=>1000,54537=>1000,54538=>1000,54539=>1000,54540=>1000,54541=>1000,54542=>1000,54543=>1000,54544=>1000,54545=>1000,54546=>1000,54547=>1000,54548=>1000,54549=>1000,54550=>1000,54551=>1000,54552=>1000,54553=>1000,54554=>1000,54555=>1000,54556=>1000,54557=>1000,54558=>1000,54559=>1000,54560=>1000,54561=>1000,54562=>1000,54563=>1000,54564=>1000,54565=>1000,54566=>1000,54567=>1000,54568=>1000,54569=>1000,54570=>1000,54571=>1000,54572=>1000,54573=>1000,54574=>1000,54575=>1000,54576=>1000,54577=>1000,54578=>1000,54579=>1000,54580=>1000,54581=>1000,54582=>1000,54583=>1000,54584=>1000,54585=>1000,54586=>1000,54587=>1000,54588=>1000,54589=>1000,54590=>1000,54591=>1000,54592=>1000,54593=>1000,54594=>1000,54595=>1000,54596=>1000,54597=>1000,54598=>1000,54599=>1000,54600=>1000,54601=>1000,54602=>1000,54603=>1000,54604=>1000,54605=>1000,54606=>1000,54607=>1000,54608=>1000,54609=>1000,54610=>1000,54611=>1000,54612=>1000,54613=>1000,54614=>1000,54615=>1000,54616=>1000,54617=>1000,54618=>1000,54619=>1000,54620=>1000,54621=>1000,54622=>1000,54623=>1000,54624=>1000,54625=>1000,54626=>1000,54627=>1000,54628=>1000,54629=>1000,54630=>1000,54631=>1000,54632=>1000,54633=>1000,54634=>1000,54635=>1000,54636=>1000,54637=>1000,54638=>1000,54639=>1000,54640=>1000,54641=>1000,54642=>1000,54643=>1000,54644=>1000,54645=>1000,54646=>1000,54647=>1000,54648=>1000,54649=>1000,54650=>1000,54651=>1000,54652=>1000,54653=>1000,54654=>1000,54655=>1000,54656=>1000,54657=>1000,54658=>1000,54659=>1000,54660=>1000,54661=>1000,54662=>1000,54663=>1000,54664=>1000,54665=>1000,54666=>1000,54667=>1000,54668=>1000,54669=>1000,54670=>1000,54671=>1000,54672=>1000,54673=>1000,54674=>1000,54675=>1000,54676=>1000,54677=>1000,54678=>1000,54679=>1000,54680=>1000,54681=>1000,54682=>1000,54683=>1000,54684=>1000,54685=>1000,54686=>1000,54687=>1000,54688=>1000,54689=>1000,54690=>1000,54691=>1000,54692=>1000,54693=>1000,54694=>1000,54695=>1000,54696=>1000,54697=>1000,54698=>1000,54699=>1000,54700=>1000,54701=>1000,54702=>1000,54703=>1000,54704=>1000,54705=>1000,54706=>1000,54707=>1000,54708=>1000,54709=>1000,54710=>1000,54711=>1000,54712=>1000,54713=>1000,54714=>1000,54715=>1000,54716=>1000,54717=>1000,54718=>1000,54719=>1000,54720=>1000,54721=>1000,54722=>1000,54723=>1000,54724=>1000,54725=>1000,54726=>1000,54727=>1000,54728=>1000,54729=>1000,54730=>1000,54731=>1000,54732=>1000,54733=>1000,54734=>1000,54735=>1000,54736=>1000,54737=>1000,54738=>1000,54739=>1000,54740=>1000,54741=>1000,54742=>1000,54743=>1000,54744=>1000,54745=>1000,54746=>1000,54747=>1000,54748=>1000,54749=>1000,54750=>1000,54751=>1000,54752=>1000,54753=>1000,54754=>1000,54755=>1000,54756=>1000,54757=>1000,54758=>1000,54759=>1000,54760=>1000,54761=>1000,54762=>1000,54763=>1000,54764=>1000,54765=>1000,54766=>1000,54767=>1000,54768=>1000,54769=>1000,54770=>1000,54771=>1000,54772=>1000,54773=>1000,54774=>1000,54775=>1000,54776=>1000,54777=>1000,54778=>1000,54779=>1000,54780=>1000,54781=>1000,54782=>1000,54783=>1000,54784=>1000,54785=>1000,54786=>1000,54787=>1000,54788=>1000,54789=>1000,54790=>1000,54791=>1000,54792=>1000,54793=>1000,54794=>1000,54795=>1000,54796=>1000,54797=>1000,54798=>1000,54799=>1000,54800=>1000,54801=>1000,54802=>1000,54803=>1000,54804=>1000,54805=>1000,54806=>1000,54807=>1000,54808=>1000,54809=>1000,54810=>1000,54811=>1000,54812=>1000,54813=>1000,54814=>1000,54815=>1000,54816=>1000,54817=>1000,54818=>1000,54819=>1000,54820=>1000,54821=>1000,54822=>1000,54823=>1000,54824=>1000,54825=>1000,54826=>1000,54827=>1000,54828=>1000,54829=>1000,54830=>1000,54831=>1000,54832=>1000,54833=>1000,54834=>1000,54835=>1000,54836=>1000,54837=>1000,54838=>1000,54839=>1000,54840=>1000,54841=>1000,54842=>1000,54843=>1000,54844=>1000,54845=>1000,54846=>1000,54847=>1000,54848=>1000,54849=>1000,54850=>1000,54851=>1000,54852=>1000,54853=>1000,54854=>1000,54855=>1000,54856=>1000,54857=>1000,54858=>1000,54859=>1000,54860=>1000,54861=>1000,54862=>1000,54863=>1000,54864=>1000,54865=>1000,54866=>1000,54867=>1000,54868=>1000,54869=>1000,54870=>1000,54871=>1000,54872=>1000,54873=>1000,54874=>1000,54875=>1000,54876=>1000,54877=>1000,54878=>1000,54879=>1000,54880=>1000,54881=>1000,54882=>1000,54883=>1000,54884=>1000,54885=>1000,54886=>1000,54887=>1000,54888=>1000,54889=>1000,54890=>1000,54891=>1000,54892=>1000,54893=>1000,54894=>1000,54895=>1000,54896=>1000,54897=>1000,54898=>1000,54899=>1000,54900=>1000,54901=>1000,54902=>1000,54903=>1000,54904=>1000,54905=>1000,54906=>1000,54907=>1000,54908=>1000,54909=>1000,54910=>1000,54911=>1000,54912=>1000,54913=>1000,54914=>1000,54915=>1000,54916=>1000,54917=>1000,54918=>1000,54919=>1000,54920=>1000,54921=>1000,54922=>1000,54923=>1000,54924=>1000,54925=>1000,54926=>1000,54927=>1000,54928=>1000,54929=>1000,54930=>1000,54931=>1000,54932=>1000,54933=>1000,54934=>1000,54935=>1000,54936=>1000,54937=>1000,54938=>1000,54939=>1000,54940=>1000,54941=>1000,54942=>1000,54943=>1000,54944=>1000,54945=>1000,54946=>1000,54947=>1000,54948=>1000,54949=>1000,54950=>1000,54951=>1000,54952=>1000,54953=>1000,54954=>1000,54955=>1000,54956=>1000,54957=>1000,54958=>1000,54959=>1000,54960=>1000,54961=>1000,54962=>1000,54963=>1000,54964=>1000,54965=>1000,54966=>1000,54967=>1000,54968=>1000,54969=>1000,54970=>1000,54971=>1000,54972=>1000,54973=>1000,54974=>1000,54975=>1000,54976=>1000,54977=>1000,54978=>1000,54979=>1000,54980=>1000,54981=>1000,54982=>1000,54983=>1000,54984=>1000,54985=>1000,54986=>1000,54987=>1000,54988=>1000,54989=>1000,54990=>1000,54991=>1000,54992=>1000,54993=>1000,54994=>1000,54995=>1000,54996=>1000,54997=>1000,54998=>1000,54999=>1000,55000=>1000,55001=>1000,55002=>1000,55003=>1000,55004=>1000,55005=>1000,55006=>1000,55007=>1000,55008=>1000,55009=>1000,55010=>1000,55011=>1000,55012=>1000,55013=>1000,55014=>1000,55015=>1000,55016=>1000,55017=>1000,55018=>1000,55019=>1000,55020=>1000,55021=>1000,55022=>1000,55023=>1000,55024=>1000,55025=>1000,55026=>1000,55027=>1000,55028=>1000,55029=>1000,55030=>1000,55031=>1000,55032=>1000,55033=>1000,55034=>1000,55035=>1000,55036=>1000,55037=>1000,55038=>1000,55039=>1000,55040=>1000,55041=>1000,55042=>1000,55043=>1000,55044=>1000,55045=>1000,55046=>1000,55047=>1000,55048=>1000,55049=>1000,55050=>1000,55051=>1000,55052=>1000,55053=>1000,55054=>1000,55055=>1000,55056=>1000,55057=>1000,55058=>1000,55059=>1000,55060=>1000,55061=>1000,55062=>1000,55063=>1000,55064=>1000,55065=>1000,55066=>1000,55067=>1000,55068=>1000,55069=>1000,55070=>1000,55071=>1000,55072=>1000,55073=>1000,55074=>1000,55075=>1000,55076=>1000,55077=>1000,55078=>1000,55079=>1000,55080=>1000,55081=>1000,55082=>1000,55083=>1000,55084=>1000,55085=>1000,55086=>1000,55087=>1000,55088=>1000,55089=>1000,55090=>1000,55091=>1000,55092=>1000,55093=>1000,55094=>1000,55095=>1000,55096=>1000,55097=>1000,55098=>1000,55099=>1000,55100=>1000,55101=>1000,55102=>1000,55103=>1000,55104=>1000,55105=>1000,55106=>1000,55107=>1000,55108=>1000,55109=>1000,55110=>1000,55111=>1000,55112=>1000,55113=>1000,55114=>1000,55115=>1000,55116=>1000,55117=>1000,55118=>1000,55119=>1000,55120=>1000,55121=>1000,55122=>1000,55123=>1000,55124=>1000,55125=>1000,55126=>1000,55127=>1000,55128=>1000,55129=>1000,55130=>1000,55131=>1000,55132=>1000,55133=>1000,55134=>1000,55135=>1000,55136=>1000,55137=>1000,55138=>1000,55139=>1000,55140=>1000,55141=>1000,55142=>1000,55143=>1000,55144=>1000,55145=>1000,55146=>1000,55147=>1000,55148=>1000,55149=>1000,55150=>1000,55151=>1000,55152=>1000,55153=>1000,55154=>1000,55155=>1000,55156=>1000,55157=>1000,55158=>1000,55159=>1000,55160=>1000,55161=>1000,55162=>1000,55163=>1000,55164=>1000,55165=>1000,55166=>1000,55167=>1000,55168=>1000,55169=>1000,55170=>1000,55171=>1000,55172=>1000,55173=>1000,55174=>1000,55175=>1000,55176=>1000,55177=>1000,55178=>1000,55179=>1000,55180=>1000,55181=>1000,55182=>1000,55183=>1000,55184=>1000,55185=>1000,55186=>1000,55187=>1000,55188=>1000,55189=>1000,55190=>1000,55191=>1000,55192=>1000,55193=>1000,55194=>1000,55195=>1000,55196=>1000,55197=>1000,55198=>1000,55199=>1000,55200=>1000,55201=>1000,55202=>1000,55203=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500,63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849,63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000,63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000,63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000,63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000,63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000,63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000,63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000,63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000,63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000,63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000,63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000,63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000,63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000,63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000,63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000,63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000,63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000,64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000,64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000,64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750,64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730,64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326,64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316,64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788,64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903,64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658,64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436,64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942,64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706,64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466,64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783,64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731,64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932,64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429,64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227,64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073,64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932,64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421,64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884,64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274,64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884,64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911,64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179,64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224,64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806,64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911,64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082,64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574,64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411,64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441,64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254,64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273,64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046,64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944,64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759,64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757,64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686,64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686,64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080,64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130,65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000,65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000,65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200,65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300,65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273,65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243,65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658,65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194,65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843,65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903,65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640,65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803,65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000,65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000,65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000,65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000,65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000,65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000,65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500,65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500,65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500,65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500,65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500,65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500,65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500,65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000,65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,65535=>1000); +// --- EOF --- diff --git a/tcpdf/fonts/courier.php b/tcpdf/fonts/courier.php new file mode 100644 index 0000000..e935b67 --- /dev/null +++ b/tcpdf/fonts/courier.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Courier'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc=''; +$desc=array('Flags'=>33,'FontBBox'=>'[-23 -250 715 805]','ItalicAngle'=>0,'Ascent'=>805,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>426,'StemV'=>51,'StemH'=>51,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/courierb.php b/tcpdf/fonts/courierb.php new file mode 100644 index 0000000..acb01b0 --- /dev/null +++ b/tcpdf/fonts/courierb.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Courier-Bold'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc=''; +$desc=array('Flags'=>33,'FontBBox'=>'[-113 -250 749 801]','ItalicAngle'=>0,'Ascent'=>801,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>439,'StemV'=>106,'StemH'=>84,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/courierbi.php b/tcpdf/fonts/courierbi.php new file mode 100644 index 0000000..631c623 --- /dev/null +++ b/tcpdf/fonts/courierbi.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Courier-BoldOblique'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc=''; +$desc=array('Flags'=>97,'FontBBox'=>'[-57 -250 869 801]','ItalicAngle'=>-12,'Ascent'=>801,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>439,'StemV'=>106,'StemH'=>84,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/courieri.php b/tcpdf/fonts/courieri.php new file mode 100644 index 0000000..5ae725d --- /dev/null +++ b/tcpdf/fonts/courieri.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Courier-Oblique'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc=''; +$desc=array('Flags'=>97,'FontBBox'=>'[-27 -250 849 805]','ItalicAngle'=>-12,'Ascent'=>805,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>426,'StemV'=>51,'StemH'=>51,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/AUTHORS b/tcpdf/fonts/dejavu-fonts-ttf-2.34/AUTHORS new file mode 100644 index 0000000..94df1e3 --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/AUTHORS @@ -0,0 +1,54 @@ +abysta at yandex.ru +Adrian Schroeter +Aleksey Chalabyan +Andrey Valentinovich Panov +Ben Laenen +Besarion Gugushvili +Bhikkhu Pesala +Clayborne Arevalo +Dafydd Harries +Danilo Segan +Davide Viti +David Jez +David Lawrence Ramsey +Denis Jacquerye +Dwayne Bailey +Eugeniy Meshcheryakov +Gee Fung Sit +Heikki Lindroos +James Cloos +James Crippen +John Karp +Keenan Pepper +Lars Naesbye Christensen +Lior Halphon +MaEr +Mashrab Kuvatov +Max Berger +Mederic Boquien +Michael Everson +MihailJP +Misu Moldovan +Nguyen Thai Ngoc Duy +Nicolas Mailhot +Norayr Chilingarian +Ognyan Kulev +Ondrej Koala Vacha +Peter Cernak +Remy Oudompheng +Roozbeh Pournader +Rouben Hakobian +Sahak Petrosyan +Sander Vesik +Stepan Roh +Stephen Hartke +Steve Tinney +Tavmjong Bah +Thomas Henlich +Tim May +Valentin Stoykov +Vasek Stodulka +Wesley Transue +Yoshiki Ohshima + +$Id: AUTHORS 2495 2011-11-14 22:56:26Z noct_dreamer $ diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/BUGS b/tcpdf/fonts/dejavu-fonts-ttf-2.34/BUGS new file mode 100644 index 0000000..49b36de --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/BUGS @@ -0,0 +1,3 @@ +See http://dejavu.sourceforge.net/wiki/index.php/Bugs + +$Id: BUGS 80 2004-11-13 13:12:02Z src $ diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/LICENSE b/tcpdf/fonts/dejavu-fonts-ttf-2.34/LICENSE new file mode 100644 index 0000000..254e2cc --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/LICENSE @@ -0,0 +1,99 @@ +Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. +Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + +Bitstream Vera Fonts Copyright +------------------------------ + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is +a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute the +Font Software, including without limitation the rights to use, copy, merge, +publish, distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to the +following conditions: + +The above copyright and trademark notices and this permission notice shall +be included in all copies of one or more of the Font Software typefaces. + +The Font Software may be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may be modified and +additional glyphs or characters may be added to the Fonts, only if the fonts +are renamed to names not containing either the words "Bitstream" or the word +"Vera". + +This License becomes null and void to the extent applicable to Fonts or Font +Software that has been modified and is distributed under the "Bitstream +Vera" names. + +The Font Software may be sold as part of a larger software package but no +copy of one or more of the Font Software typefaces may be sold by itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME +FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING +ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE +FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font Software +without prior written authorization from the Gnome Foundation or Bitstream +Inc., respectively. For further information, contact: fonts at gnome dot +org. + +Arev Fonts Copyright +------------------------------ + +Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and +associated documentation files (the "Font Software"), to reproduce +and distribute the modifications to the Bitstream Vera Font Software, +including without limitation the rights to use, copy, merge, publish, +distribute, and/or sell copies of the Font Software, and to permit +persons to whom the Font Software is furnished to do so, subject to +the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Tavmjong Bah" or the word "Arev". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Tavmjong Bah Arev" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the name of Tavmjong Bah shall not +be used in advertising or otherwise to promote the sale, use or other +dealings in this Font Software without prior written authorization +from Tavmjong Bah. For further information, contact: tavmjong @ free +. fr. + +$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $ diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/NEWS b/tcpdf/fonts/dejavu-fonts-ttf-2.34/NEWS new file mode 100644 index 0000000..c846d49 --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/NEWS @@ -0,0 +1,1373 @@ +Changes from 2.33 to 2.34 +* Sans, SansMono, Serif: unlinked references of U+2596 for bug 50848 + (by Denis Jacquerye) +* Sans, SansMono, Serif: added U+A7AA (by Denis Jacquerye) +* Sans, SansMono, Serif: added U+2A6A, U+2A6B, U+2E1F based on U+223B + (by Denis Jacquerye) +* Sans, Serif: removed superfluous ligature definitions for ffl und ffi + (bug 55363) (by Gee Fung Sit 薛至峰) +* Sans, Serif: swapped glyphs for U+25D2 and U+25D3 (bug 55197) + (by Gee Fung Sit 薛至峰) +* Sans, Serif: added U+A740, U+A741 (by Denis Jacquerye) +* Sans: added U+20BA Turkish Lira sign (by Denis Jacquerye) +* Sans: replaced Georgian Asomtavruli U+10A0-U+10C5 and Mkhedruli U+10D0-U+10FC + with new version (by Besarion Gugushvili) +* Sans: added Georgian Nuskhuri U+2D00-U+U+2D25 (by Besarion Gugushvili) +* Sans: added Private Use Area glyphs for Georgian U+F400-U+F441 + (by Besarion Gugushvili) +* Sans: tweaked U+0250, U+0254 (by Denis Jacquerye) +* Sans: adjusted hinting of U+032C-U+032D, avoiding problem on some platforms + (by Denis Jacquerye) +* Sans: added U+A7A0-U+A7A9, pre-1921 Latvian letters with oblique stroke + (by Denis Jacquerye) +* Sans: added anchors to U+2C6D (by Denis Jacquerye) +* Sans: added cedilla anchor to some Latin characters (by Denis Jacquerye) +* Sans: added ogonek anchor to A, E, O, U, Y (by Denis Jacquerye) +* Sans: adjusted ogonek reference in U+0172, U+01EA, U+01EB + (by Denis Jacquerye) +* Sans: added anchors to U+0104, U+0105 (by Denis Jacquerye) +* Sans: added U+1F600, U+1F611, U+1F615, U+1F617, U+1F619, U+1F61B, U+1F61F, + U+1F626-U+1F627, U+1F62E-U+1F62F, U+1F634 (by Gee Fung Sit 薛至峰) +* Sans: replaced U+27A1 with mirror image of U+2B05 for consistency + (by Gee Fung Sit 薛至峰) +* Sans: copied hints from U+14A3, U+14A7 to U+2142-U+2143 + (by Gee Fung Sit 薛至峰) +* Sans: added Lisu block (by Gee Fung Sit 薛至峰) +* Sans: typographical improvements to U+0166-U+0167, U+02A6, U+02AA + (by Gee Fung Sit 薛至峰) +* Sans: slightly change hinting of "2" to fix bug 37395 (by Ben Laenen) +* Sans: fixed U+1444 which had wrong top dot that shouldn't be there + (by Denis Jacquerye) +* Sans: added anchors for diacritics to U+01B7, U+01B8, U+01B9, U+0292 + (by Denis Jacquerye) +* Sans: added U+01B7, U+01B8 to context for case diacritics above +* SansMono: fixed U+0574 (by Ruben Hakobian) +* SansMono: added U+2016, U+27C2 (by Yoshiki Ohshima) +* SansMono: added U+02CE, U+02CF (by Denis Jacquerye) +* SansMono: added U+2148, U+27E6-U+27E7, U+2B05-U+2B0D, U+1D55A + (by Gee Fung Sit 薛至峰) +* Serif: added U+02BA, U+02C2-U+02C5, U+02CA-U+02CB, U+02D7, U+02F3, U+02F7, + U+046C-U+046D, U+0476-U+0477, U+1D7C-U+1D7F, U+20B8, U+2132, U+214E, U+2C7B + to Serif (by Gee Fung Sit 薛至峰) +* Serif: typographic improvements to U+0194, U+01B1, U+0263, U+028A, U+02A6, + U+02A8, U+02AA, U+02E0, U+03DC, U+1D3B, U+1D7B (by Gee Fung Sit 薛至峰) +* Serif: added small cap versions of q, x (in italic styles), delta, theta, xi, + sigma, phi, omega, not wired in yet (by Gee Fung Sit 薛至峰) +* Serif: added anchors to U+0234-U+0236 (by Gee Fung Sit 薛至峰) +* Serif: added U+02EC, U+02EF, U+02F0, U+0360 (by Denis Jacquerye) + +Changes from 2.32 to 2.33 + +* added Old Italic block to Sans (by MaEr) +* added U+051E, U+051F to Sans (by MaEr) +* added U+01BA, U+0372-U+0373, U+0376-U+0377, U+03CF, U+1D00-U+1D01, + U+1D03-U+1D07, U+1D0A-U+1D13, U+1D15, U+1D18-U+1D1C, U+1D20-U+1D2B, + U+1D2F, U+1D3D, U+1D5C-U+1D61, U+1D66-U+1D6B, U+1DB8, U+1E9C-U+1E9D, + U+1EFA-U+1EFB, U+2C60-U+2C61, U+2C63, U+A726-U+A73C, U+A73E-U+A73F, + U+A746-U+A747, U+A74A-U+A74B, U+A74E+U+A74F, U+A768-U+A769, U+A77B-U+A77C, + U+A780-U+A787, U+A790-U+A791, U+A7FA-U+A7FF to Serif (by Gee Fung Sit 薛至峰) +* added alternate forms to U+014A and U+01B7 in Serif (by Gee Fung Sit 薛至峰) +* typographical improvements to U+0166-U+0167, U+0197, U+01B5-U+01B6, U+01BB, + U+0222-U+0223, U+023D, U+0250-U+0252, U+026E, U+0274, U+028F, U+029F, + U+02A3-U+02A5, U+02AB, U+03FE-U+03FF, U+1D02, U+1D14, U+1D1D-U+1D1F, U+1D3B, + U+1D43-U+1D46, U+1D59, U+1D9B, U+2C71, U+2C73 in Serif (by Gee Fung Sit 薛至峰) +* fixed bugs #31762 and #34700 plus other small fixes (wrong direction, + duplicate points, etc.) for Sans and Serif (by Gee Fung Sit 薛至峰) +* added U+204B to Mono (by Gee Fung Sit 薛至峰) +* added U+26E2 to Sans (by Gee Fung Sit 薛至峰) +* added Playing Cards block (U+1F0A0-U+1F0DF) to Sans (by Gee Fung Sit 薛至峰) +* emoticons in Sans: replace U+2639-U+263B with better versions, add + U+1F601-U+1F610, U+1F612-U+1F614, U+1F616, U+1F618, U+1F61A, U+1F61C-U+1F61E, + U+1F620-U+1F624, U+1F625, U+1F628-U+1F62B, U+1F62D, U+1F630-U+1F633, + U+1F635-U+1F640 (by Ben Laenen and Denis Jacquerye) +* added U+A78E, U+A790-U+A791 to Sans and Mono (by Denis Jacquerye) +* added U+A7FA to Sans (by Denis Jacquerye) +* subscripts: added U+2095-U+209C to Sans, Serif and Mono, adjusted + U+1D49-U+1D4A in Sans and Mono (by Denis Jacquerye) +* added U+0243 to Mono (by Denis Jacquerye) +* adjusted U+0307 to match dot of i, replaced dotaccent U+02D9 with U+0307 in +most dependencies in Sans (by Denis Jacquerye) +* adjusted anchors of f and added them to long s in Sans (by Denis Jacquerye) +* added anchors to precomposed dependencies of D and d (by Denis Jacquerye) +* added debug glyphs U+F002 and U+F003 which will show current point size (by + Ben Laenen) +* use correct version for Serbian italic be (by Eugeniy Meshcheryakov) +* added pictograms U+1F42D-U+1F42E, U+1F431, U+1F435 (by Denis Jacquerye) +* improved Hebrew in Sans (by Lior Halphon) +* improved Armenian in Sans, and added Armenian in Serif and Mono (by Rouben + Hakobian (Tarumian), Aleksey Chalabyan and Norayr Chilingarian) +* remove "locl" feature for Romanian for S/T/s/t with cedilla/comma accent (by + Ben Laenen) +* replace wrong "dflt" script tag in Mono with "DFLT" (by Ben Laenen) + +Changes from 2.31 to 2.32 + +* added to Sans: Latin small letter p with stroke (U+1D7D), Latin capital + letter p with stroke through descender (U+A750), Latin small letter p with + stroke through descender (U+A751), Latin capital letter thorn with stroke + (U+A764), Latin small letter thorn with stroke (U+A765), Latin capital letter + thorn with stroke through descender (U+A766), Latin small letter thorn with + stroke through descender (U+A767), Latin capital letter q with stroke through + descender (U+A756), Latin small letter q with stroke through descender + (U+A757), Latin capital letter p with flourish (U+A752), Latin small letter p + with flourish (U+A753) (by Ben Laenen) +* add new Indian rupee symbol (U+20B9) to Sans, Serif and Mono (although + standardization in Unicode not complete yet, UTC did assign this code point) + (by Ben Laenen) +* Sans: adjusted U+0E3F, U+20AB, U+20AD-U+20AE, U+20B1, U+20B5, U+20B8 to have + them take up the same width as digits (by Gee Fung Sit 薛至峰) +* added U+23E8 to Sans (by Thomas Henlich) +* fixed numerous bugs (#22579, #28189, #28977, N'Ko in Windows, fixed U+FB4F, + anchors for U+0332-U+0333, made extensions in Misc. Technical connect, and + other small fixes) (by Gee Fung Sit 薛至峰) +* added looptail g as stylistic variant to Serif (by Gee Fung Sit 薛至峰) +* added the remaining precomposed characters in Latin Extended Additional in + Serif (by Gee Fung Sit 薛至峰) +* added Georgian Mkhedruli (U+10D0-U+10FC) to Sans ExtraLight (by Besarion + Gugushvili) +* fix spacing in hinting of U+042E (Ю) in Mono (by Ben Laenen) +* replaced U+2650 and minor changes to U+2640-U+2642, U+2699, U+26A2-U+26A5, + U+26B2-U+26B5, U+26B8 in Sans (by Gee Fung Sit 薛至峰) +* added U+1E9C-U+1E9D, U+1EFA-U+1EFB, U+2028-U+2029, U+20B8, U+2150-U+2152, + U+2189, U+26C0-U+26C3, U+A722-U+A725, U+1F030-U+1F093 to Sans (by Gee Fung + Sit 薛至峰) +* added U+1E9C-U+1E9E, U+1EFA-U+1EFB, U+2028-U+2029, U+20B8, U+2181-U+2182, + U+2185 U+A722-U+A725, to Sans ExtraLight (by Gee Fung Sit 薛至峰) +* added U+20B8, U+22A2-U+22A5, U+A722-U+A725 to Mono (by Gee Fung Sit 薛至峰) +* added U+02CD, U+01BF, U+01F7, U+0222-U+0223, U+0243-U+0244, U+0246-U+024F, + U+2150-U+2152, U+2189, U+239B-U+23AD and U+A73D to Serif (by Gee Fung Sit + 薛至峰) + +Changes from 2.30 to 2.31 + +* fixed bug where Serif Condensed Italic wouldn't get proper subfamily tags (by + Ben Laenen) +* added math operators U+2234-U+2237 to Mono (by Ben Laenen) +* removed buggy instructions of U+032D (by Eugeniy Meshcheryakov) +* added U+2C70, U+2C7E, U+2C7F to Sans and Sans Mono (by Denis Jacquerye) +* added U+2C7D to Sans Mono (by Denis Jacquerye) +* added U+2C6D, U+2C70-2C73, U+2C7E-2C7F to Serif (by Denis Jacquerye) +* added extremas to alpha U+03B1 in Serif-Italic (by Denis Jacquerye) +* added U+4A4, U+4A5 to Mono (by Andrey V. Panov) +* added Arabic letters U+0657, U+0670, U+0688-U+0690, U+0693-U+0694, + U+0696-U+0697, U+0699-U+06A0, U+06A2-U+06A3, U+06A5, U+06A7-U+06A8, + U+06AA-U+06AE, U+06B0-U+06B4, U+06B6-U+06B9, U+06BB-U+06BE and their + contextual forms to Sans (by MihailJP) +* added U+A78D LATIN CAPITAL LETTER TURNED H for coming Unicode 6.0 (by Denis + Jacquerye) + +Changes from 2.29 to 2.30 + +* added U+0462-U+0463 to Mono (by Denis Jacquerye) +* corrected U+1E53 in Serif (by Gee Fung Sit) +* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit) +* added U+1E78-U+1E79 to Mono (by Gee Fung Sit) +* fixed missing diacritics in Latin Extended Additional in Sans ExtraLight + (moved stacked diacritics out of PUA in the process) (by Gee Fung Sit) +* fixed anchors on U+1E78 in Serif (by Gee Fung Sit) +* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye) +* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye) +* added U+1DC4-U+1DC9 to context class for dotless substitution (by Denis + Jacquerye) +* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit) +* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit) +* added U+A726-U+A727 to Mono (Denis Jacquerye) +* changed U+04BE and U+04BF according to recommedations of Sasha Ankwab in Sans + (by Andrey V. Panov) +* remove "Symbol Charset" from set of codepages in Sans (by Eugeniy + Meshcheryakov) + +Changes from 2.28 to 2.29 + +* modified U+10FB in Sans to be a mirror image of U+2056, since U+10FB is not + Georgian-specific (by Roozbeh Pournader) +* added U+2B1F, U+2B24, U+2B53, U+2B54 in Sans (by Roozbeh Pournader) +* fixed TUR opentype language tag to TRK in Serif (bug 19825) (by Ben Laenen) +* early implementation of Abkhaz letter U+0524-U+0525 in Sans + (by Michael Everson and abysta) +* flipped U+1D538 in Sans (by Gee Fung Sit) +* added U+26B3-U+26B8, U+1D7D8-U+1D7E1 in Sans (by Gee Fung Sit) +* corrected U+1D7A9 in Sans Bold Oblique (by Gee Fung Sit) +* Fixed U+0649 to be dual-joining in Sans Mono (by Roozbeh Pournader) +* Remove unnecessary 'isol' feature from Sans Mono (by Roozbeh Pournader) +* Remove 'cmap' mappings for U+066E, U+066F, U+067C, U+067D, U+0681, U+0682, + U+0685, U+0692, U+06A1, U+06B5, U+06BA, U+06C6, U+06CE, and U+06D5 + in Sans Mono (bug 20323) (by Roozbeh Pournader) +* add half brackets (U+2E22 - U+2E25, by Steve Tinney) + +Changes from 2.27 to 2.28 + +* added U+A789, U+A78A in Sans and Sans Mono (by Denis Jacquerye) +* modified U+02D6, U+02D7, U+02EE in Sans and Sans Mono (by Denis Jacquerye) +* added U+1E9E (German capital ß) to Sans and Serif (by Denis Jacquerye) +* adjusted width of U+01B7-U+01B9 in Serif Italic (by Denis Jacquerye) +* modified U+021C, U+021D in Sans (by Denis Jacquerye) +* added U+021C, U+021D in Mono (by Denis Jacquerye) +* added U+F428 (Georgian Nuskhuri "f") in private use area (by Besarion + Gugushvili) +* updated Georgian mkhedruli (U+10D0-U+10FA) with new version (by Besarion + Gugushvili) +* updated Georgian asomtavruli (U+10A0-U+10C5) with new version (by Besarion + Gugushvili) +* added Georgian nuskhuri (U+2D00-U+2D25) (by Besarion Gugushvili) +* added Georgian mtavruli in private use area (U+F400-U+F426) (by Besarion + Gugushvili) +* added mark anchors above to Cyrillic U+0430-U+0438, U+043A-U+044F, + U+0454-U+0455 in Mono (by Ben Laenen) +* modified/moved up U+0318-U+0319, U+031C-U+031F, U+0329-U+032A, U+032C-U+032D, + U+0339-U+033B, U+0348 and U+0353 in Sans to prevent cut-off (by Gee Fung Sit) +* added U+035A to Sans (by Gee Fung Sit) +* updated fontconfig files (by Nicolas Mailhot) +* added U+2032-2037 to Mono (by Denis Jacquerye) +* added Ogham to Sans ExtraLight (by Gee Fung Sit) +* added U+2C6F, U+2C79, U+2C7C-2C7D to Mono (by Gee Fung Sit) +* added U+210F to Serif and Sans ExtraLight (by Gee Fung Sit) +* changed U+210F to a more common glyph in Sans and Mono (by Gee Fung Sit) + +Changes from 2.26 to 2.27 + +* added some of Michael Everson's new Cyrillic glyphs to Sans (by Wesley + Transue) +* removed blank glyph at U+05EF from Sans Bold Oblique (by Gee Fung Sit) +* small adjustments to existing tone bars in Sans and Mono (by Gee Fung Sit) +* added U+0372-U+0373, U+0376-U+0377, U+03CF, U+A668-U+A66E, U+A708-U+A711, + U+A71B-U+A71F to Sans (by Gee Fung Sit) +* copied U+02E5-U+02E9 over from Sans to fix inconsistencies in Serif (by Gee + Fung Sit) +* added U+021C-U+021D, U+0370-U+0371, U+037B-U+037D, U+0470-U+0471, + U+0510-U+0515, U+051A-U+051D, U+1E9F, U+2C64, U+2C6E-U+2C6F, U+2C79, + U+2C7C-U+2C7D, U+A644-U+A647, U+A650-U+A651, U+A654-U+A657, U+A708-U+A716, + U+A71B-U+A71F to Serif (by Gee Fung Sit) +* added U+A708-U+A716, U+A71B-U+A71F to Mono (by Gee Fung Sit) +* added anchors to U+017F (ſ) and fixed U+1E9B (ẛ) in Serif (by Gee Fung Sit) +* made U+0325 smaller in Sans Bold and Serif to match Sans Book (by Gee Fung + Sit) +* fixes to U+02F3 (moved up), U+228F-U+2294 (more square-like) and + U+22CE-U+22CF (stroke width) in Sans (by Gee Fung Sit) +* replaced U+2202 ∂ (Sans and Mono) and U+221D ∝, U+221E ∞ (Sans) with glyphs + from Arev (with small changes) (by Gee Fung Sit) +* added U+22B0-U+22B1, U+22C7, U+22D0-U+22D5 from Arev to Sans to complete the + block (by Gee Fung Sit) +* added U+0514-U+0515 to Sans ExtraLight (by Gee Fung Sit) +* skewed U+A78C in all Oblique/Italic fonts (by Gee Fung Sit) +* moved U+2215 to U+2044 in Sans and Serif and replaced U+2215 with reference + to U+002F in all fonts (by Gee Fung Sit) +* added U+2C6E to Mono (by Denis Jacquerye) +* added U+A782 and U+A783 in Sans (by Wesley Transue) +* added U+0244, U+024C-024D, U+2C64 in Sans Mono (by Denis Jacquerye) +* modified U+01AE in Sans Mono (by Denis Jacquerye) +* added U+2C7A to all fonts (by Gee Fung Sit) +* italicized/small changes to U+2C76 in Serif (Bold) Italic (by Gee Fung Sit) +* improved outlines of U+2C68, U+2C6A, U+2C6C in Serif (Bold) Italic (by Gee + Fung Sit) +* rounded U+2C77 at the bottom in Serif (by Gee Fung Sit) +* added joining behavior for tone letters (U+02E5-U+02E9) in Sans (bug #15669) + (by Gee Fung Sit) +* fixed outline of y.alt in Sans Regular (by Denis Jacquerye) +* changed references of U+1D5A8, U+1D5C5, U+1D5DC, U+1D5F9, U+1D610, U+1D62D, + U+1D644 and U+1D661 to stylistic alternates to have a better distinction (by + Gee Fung Sit) +* hinted I.alt in Sans Regular (by Gee Fung Sit) +* added U+0487, completing Cyrillic block (by Gee Fung Sit) +* extended the bar of U+0463 to the right and moved the anchor (by Gee Fung + Sit) +* added anchors to glyphs in Cyrillic block (by Gee Fung Sit) +* added (preliminary) hints to tone letter forms (U+02E5.5, U+02E9.1, stem) in + Sans Book (by Gee Fung Sit) + +Changes from 2.25 to 2.26 + +- added glyphs for Cyrillic-B to Sans (by Wesley Transue) +- added U+0370-U+0371 to Sans (by Wesley Transue) +- added U+019C, U+01A2-U+01A3, U+01A6, U+01E4-U+01E5, U+024C-U+024D, U+0285, + U+0290, U+02A0, U+0370-U+0371, U+03F1, U+03FC to Sans ExtraLight (by Wesley + Transue) +- added U+20A0-U+20A5, U+20A7-U+20B3, U+2105, U+210D, U+210F, U+2115, U+2117, + U+2119-U+211A, U+211D, U+2124, U+212E, U+2200-U+2204 to Mono (by Heikki + Lindroos) +- added U+01BA and U+01BF to Mono (by Heikki Lindroos) +- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye) +- added alternative shape for y in Sans (by Denis Jacquerye) +- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos) +- changed U+047C-U+047D to references instead of outlines in Sans (by Wesley + Transue) +- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue) +- added U+A734-U+A737 to Sans (by Wesley Transue) +- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit) +- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit) +- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit) +- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit) +- added U+2016, U+2032-U+2038, U+2042, U+2045-U+2046, U+204B-U+204F, + U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit) +- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit) +- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit) +- added U+221B-U+221C to Mono (by Gee Fung Sit) +- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit) +- update U+04B4-U+04B5 in Serif (by Andrey V. Panov) +- increased max-storage value from maxp table to 153 (by Andrey V. Panov) +- added U+0472-U+0473, U+0510-U+0511, U+051A-U+051D, U+0606-U+0607, + U+0609-U+060A, U+1E26-U+1E27, U+1E54-U+1E55, U+1E7C-U+1E7D, U+1E8C-U+1E8D, + U+1E90-U+1E91, U+1E97-U+1E99, U+1E9F, U+1EAC-U+1EAD, U+1EB6-U+1EB7, + U+1EC6-U+1EC7, U+1ED8-U+1EDD, U+1EE0-U+1EE3, U+1EE8-U+1EEB, U+1EEE-U+1EF1 to + Mono (by Gee Fung Sit) +- added locl rules for S/T cedilla for Romanian and Moldavian so they get + rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen) +- removed ligature rule from Armenian U+0587 bug:16113 (by Gee Fung Sit) + +Changes from 2.24 to 2.25 + +- moved/added U+2E18 (by Gee Fung Sit) +- added empty glyph for U+2064 in Sans and Serif (by Gee Fung Sit) +- added U+22CE-U+22CF to Sans (by Gee Fung Sit) +- Sans Oblique and Bold Oblique, Serif: reverted digits hinting instructions back to before revision 1590, which fixed mistaken debian bug #471024. This fixes Debian bug #411308. The original bug was in freetype not in the fonts (by Denis Jacquerye) +- added U+A726-U+A729, U+A730-U+A733, U+A738-U+A73F, U+A746-U+A74B, U+A74E-U+A74F, U+A780-U+A781, U+A7FB-U+A7FF to Sans (by Gee Fung Sit) +- added Macedonian italic glyph shape for U+0453 in Serif (by Ben Laenen) +- changed descenders in U+0446, U+0449, U+0497, U+04A3, U+04AD (by Andrey V. Panov) +- updated main SFD files to SplineFontDB 3.0 (Denis Jacquerye and Gee Fung Sit) +- moved U+0561 2 up since it wasn't aligned with the baseline well (by Ben Laenen) +- added U+2E2E to Sans (by Gee Fung Sit) +- replaced U+2699 with simpler version in Sans (by Gee Fung Sit) +- added a lot of hinting instructions to Latin Extended B, Greek and Coptic glyphs Sans Book (by Wesley Transue) +- differentiated U+2219 from U+22C5 and adjusted affected references in Sans and Mono (by Gee Fung Sit) +- made Hebrew narrower in Sans Bold and Sans Bold Oblique (by Denis Jacquerye) +- added Kurdish and Chuvash letters from Unicode 5.1 Cyrillic Extended block (by Wesley Transue) +- added U+1E9F, U+A644-U+A647, U+A64C-U+A64D, U+A650-U+A651, U+A654-U+A655, U+A712U+A716 to Sans (by Gee Fung Sit) +- added several glyphs to Sans ExtraLight (by Gee Fung Sit) +- added hinting instructions to U+046A-U+046B, U+0508-U+0509, U+050B, U+0512-U+0513 in Sans Book (by Wesley Transue) +- corrected width of U+027E in Sans Book (by Gee Fung Sit) +- added U+2C79, U+2C7B-U+2C7D to Sans (by Gee Fung Sit) +- added a bunch of glyphs+small corrections to Sans Light (by Gee Fung Sit) +- added U+0496, U+0497, U+04B0, U+04B1 (by Andrey V. Panov) +- updated U+0493, U+049B, U+04B3, U+04B7, U+04F7 (by Andrey V. Panov) +- further improvements in extended Cyrillic (by Andrey V. Panov) + +Changes from 2.23 to 2.24 + +- instructions for U+05C0 ׀, U+05C3 ׃, U+05F3 ׳, and U+05F4 ״ in DejaVu + Sans. (by Wesley Transue) +- instructions for U+2116 in Sans (by Andrey V. Panov) +- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added + U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by + Denis Jacquerye) +- updated and instructed U+0401 in Sans (by Andrey V. Panov) +- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction. + Also, added a few more glyph instructions. (by Wesley Transue) +- removed OS2Sub and OS2Strike that weren't intentional in Sans + ExtraLight. (by Denis Jacquerye) +- updated instructions for U+401, U+44F in Serif Book. (by Andrey V. + Panov) +- instructions for U+02C4 ˄, U+02C5 ˅, U+03D8 Ϙ, U+03D9 ϙ, U+0494 Ҕ, and + U+0495 ҕ in Sans Book. (by Wesley Transue) +- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆ + in Sans Book. (by Wesley Transue) +- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and + U+451 using code generated with xgridfit (by Andrey V. Panov) +- instructions for a few glyphs in the Latin Extended-B Block, Greek + Block, Cyrillic Block, and N'Ko block. (by Wesley Transue) +- updated sfdnormalize.pl, and SFD files to new SFD format with empty + lines. (by Denis Jacquerye) + +Changes from 2.22 to 2.23 + +- fixed bug which made Condensed fonts appear instead of normal width ones +- added U+20DB, U+20DC, and U+20E1 to Sans (by Roozbeh Pournader) +- added hinting instructions to U+01A7, U+01AA-U+01AC, U+01AE-U+01AF, + U+01BC-U+01BD, U+01BF, U+01F7, U+0277, U+027F, U+0285-U+0286, U+0297, U+02AF, + U+02B4-U+02B5, U+02BD, U+030D, U+0311, U+0329, U+04A0-U+04A1 in Sans Book (by + Wesley Transue) +- modified hinting instructions of U+04A2 in Sans Book (by Wesley Transue) +- added hinting instructions to U+237D, U+2423 in Mono Book and Mono Bold (by + Wesley Transue) +- added mathematical alphanumeric symbols to all styles (by Max Berger) +- added Unicode 5.1 U+2E18 as U+2E18.u51 (not yet usable) to Sans (by Roozbeh + Pournader) +- dereferenced all glyphs with mixed references and outlines (by Denis + Jacquerye) +- removed non-zero width from U+0344 in Sans (by Denis Jacquerye) + +Changes from 2.21 to 2.22 + +- directory structure has changed, we now use the Makefile +- modified Armenian U+0565 in Sans (by Սահակ Պետրոսյան) +- added double struck letters and numbers U+2102, U+210D, U+2115, + U+2119-U+211A, U+211D, U+2124, U+213C-U+2140, U+2145-U+2149, U+1D538-U+1D539, + U+1D53B-U+1D53E, U+1D540-U+1D544, U+1D546, U+1D54A-U+1D550, U+1D552-U+1D56B, + U+1D7D8-U+1D7E1 to Serif (by Stephen Hartke) +- added letterlike symbols U+2103, U+2109, U+2127, U+214B, U+2141-U+2144 to + Serif (by Ben Laenen) +- fixed outline direction of U+2143 in Sans Bold/Bold Oblique (by Ben Laenen) +- added arrow set in Serif: arrows: U+2194-U+21FF; dingbats: U+27A1; + supplemental arrows A: U+27F0-U+27FF; supplemental arrows B: U+2900-U+2975, + U+297A; miscellaneous symbols and arrows: U+2B00-U+2B11 (by Ben Laenen) +- added U+0180, U+01DE, U+01E0-01E1, U+022A, U+022C, U+0230, U+1E08-U+1E09, + U+1E10-U+1E11, U+1EB0-U+1EB1 to Mono (by Denis Jacquerye) +- adjusted U+01D5, U+01D7, U+01D9, U+1DB in Mono (by Denis Jacquerye) +- added Ogham in Sans (by Wesley Transue) +- added Yijing Hexagram Symbols in Sans (by Wesley Transue) +- hinting instructions added to Cyrillic U+0460, U+04A6-U+04A7, U+04AC-U+04AD, + U+04C7-U+04C8, U+04F6-U+04F7, U+04FA-U+04FB, U+050C-U+050D in Sans Book (by + Wesley Transue) +- adjusted Cyrillic letters U+042A, U+044A, U+044C, U+0459-U+045B, U+0462, + U+048C-U+048D in Serif (by Andrey V. Panov) +- hinting instructions added to Lao U+0EB7 in Sans (by Wesley Transue) +- added Roman numerals and Claudian letter U+2160-U+2184 in Serif (by Ben + Laenen) +- added U+FFF9-U+FFFD to Sans, Serif and Mono (by Lars Næsbye Christensen) +- added mathematical symbols to Serif: U+2200, U+2203-U+2204, U+2213-U+2214, + U+2217-U+2218, U+2223-U+2226, U+2250-U+2255, U+2295-U+22AF, U+22C5 (by Ben + Laenen) +- modified bullet symbol U+2219 in Serif (by Ben Laenen) + +Changes from 2.20 to 2.21 + +- added U+FE20-U+FE23 (half diacritics) to Sans (by Denis Jacquerye) +- added anchor "half" to position right half of double marks, U+FE21 or U+FE23 + to Sans (by Denis Jacquerye) +- shifted U+0360 up to avoid collision with some outlines in Sans (by Denis + Jacquerye) +- added anchor above-mark anchor to U+035D, U+035E, U+0360, U+0361 in Sans (by + Denis Jacquerye) +- added instructions for ff, ffi, ffl ligatures in Serif Bold (by Eugeniy + Meshcheryakov) +- added instructions to some N'Ko glyphs (by Wesley Transue) +- added instructions to some Lao glyphs (by Wesley Transue) +- cleaning up 'liga' Standard Ligature in Latin, in Sans and Sans Mono (by + Denis Jacquerye) +- added U+046A, U+046B (big yus) in Serif (by Andrey V. Panov) +- added box drawing symbols to Sans and Serif (by Lars Næsbye Christensen) +- added Makefile to improve font and packages generating (by Nicolas Mailhot) + +Changes from 2.19 to 2.20 + +- removed TeX and TeXData tags from all sfd files (by Eugeniy Meshcheryakov) +- removed all 'frac' lookups (by Eugeniy Meshcheryakov) +- fixed duplicate glyph names (by Eugeniy Meshcheryakov) +- removed standard ligatures with U+00B7 in Mono (by Eugeniy Meshcheryakov) +- use reference to U+002D in U+00AD in Sans Oblique, and adjust instructions + (by Eugeniy Meshcheryakov) +- updated Cyrillic in Sans Extra Light (by Andrey V. Panov) +- added instructions to N'Ko U+07C1-U+07C6, U+07CA, U+07CE-U+07CF, U+07D1, + U+07D3-U+07D4, U+07D8, U+07DB and U+07EB in Sans (by Wesley Transue) +- added instructions to Lao U+0E8A, U+0E95, U+0E97, U+EA5, U+0EB4 and U+0EB5 + (by Wesley Transue) +- adjusted instructions for Hebrew glyphs (by Denis Jacquerye) +- added instructions for U+0265 in Sans Bold (by Denis Jacquerye) +- fix U+1D68 in Sans: it had the shape of delta, where it should be a rho (by + Ben Laenen) +- remove U+1D5C glyph in Sans Oblique (it was empty) (by Ben Laenen) +- fix instructions of U+01AD in Sans Bold (by Ben Laenen) +- fix instructions of U+042D in Serif (by Ben Laenen) +- remove buggy instructions of U+2328 in Serif (by Ben Laenen) +- corrected width of U+2C75-U+2C76 in Sans Bold and Serif Bold (by Gee Fung Sit) +- added U+2C75-U+2C77 to Mono (by Gee Fung Sit) + +Changes from 2.18 to 2.19 + +- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp) +- added Mark to Base anchors: 'cedilla' for combining cedilla and + 'above-legacy' for stacking above precomposed glyphs (just a,e,i,o,u with + macron for now) in Sans (by Denis Jacquerye). +- added contextual substitution for Case and Dotless forms in all Sans variants + (by Denis Jacquerye). +- renamed 'ccmp' lookups for RTL and Basic (LGC, etc.) (by Denis Jacquerye) +- added anchor 'cedilla' for vowels in Sans. (by Denis Jacquerye) +- extended contextual dotless and case substitutions to handle both below and + above diacritics (by Denis Jacquerye) +- renamed Dotless and Case Form GSUB lookups in Sans with meaningful names (by + Denis Jacquerye) + +Changes from 2.17 to 2.18 + +- Re-encoded the source files for Full Unicode (by Ben Laenen) +- Re-enabled the "ff", "fl", "fi", "ffl", "ffi" ligatures by default in Serif + (by Ben Laenen) +- Disabled the "fi", "ffi" ligatures for languages with dotless i in Serif (by + Ben Laenen) +- added Tifinagh to Sans Book and Bold, U+2D30-U+2D65, U+2D6F, partially hinted + in Sans Book. (by Denis Jacquerye) +- added Tai Xuan Jing Symbols (U+1D300-1D356) to Sans (by Remy Oudompheng) +- added double-struck letters (U+1D538-U+1D56B minus reserved code points) to + Sans (by Gee Fung Sit) +- added U+22EE-U+22F1 to Sans (by Gee Fung Sit) +- added U+2C67-U+2C6C, U+2C75-U+2C77 to Serif (by Gee Fung Sit) +- italicized various glyphs in Latin Extended-B, IPA Extensions, Spacing + Modifier Letters, Phonetic Extension (Supplement) and Super- and Subscripts + in Serif Oblique fonts (by Gee Fung Sit) +- modified outlines, bearings of Hebrew U+05D6, U+05D8, U+05DB, U+05DE, U+05E0, + U+05E1, U+05E2, U+05EA in Sans Book and Oblique, adjusted hinting in Book + based on Yotam Benshalom's comments. (by Denis Jacquerye) +- added Braille Patterns (U+2800-U+28FF) to Serif fonts (by Gee Fung Sit) +- added N'Ko to Sans Book and Bold: U+07C0-U+07E7, U+07EB-U+07F5, U+07F8-U+07FA + (by Eugeniy Meshcheryakov) +- added U+0ED8 (Lao digit 8) to Sans (by Remy Oudompheng) +- added Lao diacritics U+0EB0-0EB9, U+0EBB-0EBC, U+0EC8-0ECD to Mono (by Remy + Oudompheng) +- renamed Serif [Bold] Oblique, make it Italic (by Eugeniy Meshcheryakov) +- added U+29FA-U+29FB to Sans and Sans Mono (by Gee Fung Sit) +- swapped glyphs for Eng U+014A from Sami Eng to African Eng, the latter being + more common (by Denis Jacquerye) +- swapped ae U+00E6 and ae.alt in Serif Italics fonts, thus fixing #8213 (by + Denis Jacquerye) +- minor improvements to Misc. Symbols in Sans (by Gee Fung Sit) +- minor improvements and additions to Sans ExtraLight (by Gee Fung Sit) +- improved instructions for various Cyrillic letters (by Eugeniy Meshcheryakov) +- fixed hinting of theta and chi in Sans Book (by Ben Laenen) +- added Georgian Mkhedruli to Sans, Serif and Mono, ASumtavruli to Sans and + Serif (by Besarion Gugushvili) + +Changes from 2.16 to 2.17 + +- Sans fonts: fix position for certain combinations of Arabic fatha, kasra, + shadda, damma, kasratan, dammatan, fathatan and hamza (by Ben Laenen) +- added 'ae.alt' to Serif Oblique fonts, with design matching shape of italic + 'a' instead of slanted 'a', see bug #8213 (by Denis Jacquerye) +- added super- and subscripts to Serif and Mono: U+1D2C-U+1D2E, U+1D30-U+1D3C, + U+1D3E-U+1D42, U+1D62-U+1D65, U+1D78, U+2071, U+207A-U+207E, U+208A-U+208E, + U+2090-U+2094 (by Gee Fung Sit) + +Changes from 2.15 to 2.16 + +- fixed hinting instructions for digits in DejaVu Sans Oblique, Bold Oblique, + and Serif Book to not change glyph width (by Eugeniy Meshcheryakov) +- added instructions for U+0404, U+0411, U+0413, U+0414, U+0417-U+041B, U+041F, + U+0423, U+0424, U+0426-U+0429, U+042C, U+042E, U+042F, U+0490 in Serif Bold + (by Eugeniy Meshcheryakov) +- added U+0220 and Eng.alt to Serif fonts (by Denis Jacquerye) +- added U+232C, U+2394, U+23E3 to Sans fonts (by John Karp) +- added U+230C-U+230F, U+231C-U+231F to Sans fonts, fixing bug:9547 + (by John Karp) +- adjusted dot below, dot above, dieresis above, dieresis below in Sans fonts + (by Denis Jacquerye) +- added U+2300, U+2301, U+2303, U+2304, U+2305, U+2307, U+2326, U+2327, U+232B, + arrow.base to Sans fonts (by John Karp) +- adjusted dot and dieresis below and above in Serif fonts (by Denis Jacquerye) +- added U+1E1C-U+1E1D to Serif fonts (by Denis Jacquerye) +- added U+22BE, U+22BF (by Wesley Transue) +- added U+2324; modified U+2325: more standard proportions, and matches U+2324 + and U+2387; added U+2387 : flipped U+2325 with standard arrowhead + (by John Karp) +- added Lao digits U+0ED0-0ED7, U+0ED9 (by Remy Oudompheng) +- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F, + U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691, + U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE, + U+06C6, U+06CC, U+06CE, U+06D5, U+06F0-06F9 (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95, + U+FB9E, U+FB9F, U+FBAA-FBAD, U+FBE8, U+FBE9, U+FBFC-FBFF (by Remy Oudompheng) +- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC, + U+FEFF (by Remy Oudompheng) +- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans + (by Eugeniy Meshcheryakov) +- added U+2102 to Mono (by Eugeniy Meshcheryakov) +- added U+2983-U+2984 to Sans (by Gee Fung Sit) +- added U+2A2F to Sans, Serif and Mono (by Gee Fung Sit) +- added U+2373-2375, U+237A to Sans (by John Karp) +- converted kern pairs to kern classes with Tavmjong Bah's scripts + (by Denis Jacquerye) +- set ScriptLang of kerning classes to just latn because of Pango bug + (by Denis Jacquerye) +- added DNK to ScriptLang latn otherwise it is excluded, and SRB and MDK to + cyrl (by Denis Jacquerye) +- removed flag 0x80 in generate.pe, otherwise it generates kerning tables some + systems don't like; thus loosing Apple tables (by Denis Jacquerye) +- removed ligature for precomposed legacy characters of Sans Oblique fonts + (by Denis Jacquerye) +- added bearings to en dash U+2013, em dash U+2014 and figure dash U+2012 + by making dashes shorter, preserving character width (by Denis Jacquerye) +- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible; + added instructions in Sans Book; changed U+1e00-U+1e01 to use new ring below + (by Denis Jacquerye) +- adjusted circumflex below on U+1E12-U+1E13, U+1E18-U+1E19, U+1E3C-U+1E3D, + U+1E4A-U+1E4B, U+1E70-U+1E71, U+1E76-U+1E77 in Sans fonts (by Denis Jacquerye) +- Added U+0ED4, U+0ED5 to DejaVu Sans (by Remy Oudompheng) +- Lao-specific anchors (by Remy Oudompheng) +- added alternate I to match the small capital in Sans (by Gee Fung Sit) + +Changes from 2.14 to 2.15 + +- improved hinting in Sans Oblique to deal with some spacing and inconsistency + issues (by Ben Laenen) +- added anchors to Mono Book, and added GPOS rules for combining diacritics to + show up as zero width glyphs (by Ben Laenen) +- removed U+F21C (PUA), it was copy of U+2C64 from Latin Extended C (by Eugeniy + Meshcheryakov) +- added U+27E6-U+27E7 to Sans (by Gee Fung Sit) +- added U+1407, U+1409, U+140C-U+141B, U+141D-U+1425, U+1427-U+142E, + U+1435-U+1438, U+143A-U+1449, U+1452, U+1454, U+1457-U+1465, U+1467-U+146A, + U+1471, U+1474-U+1482, U+1484-U+1488, U+148F, U+1492, U+14A0, U+14A2, U+14A9, + U+14AC-U+14BA, U+14BC, U+14BD, U+14C6, U+14C9-U+14CF, U+14D1, U+14D2, U+14D9, + U+14DC-U+14E9, U+14EC, U+14F3, U+14F6-U+1504, U+1506, U+1507, U+1510-U+1525, + U+152C, U+152F-U+153D, U+1540, U+1541, U+154E, U+154F, U+1552, U+155B, U+155C, + U+1568, U+1569, U+1574-U+157B, U+157D, U+15A7-U+15AE, U+1646, U+1647 (by + Eugeniy Meshcheryakov) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc in Sans Book (by Denis Jacquerye) +- added U+0496-U+0497 in Serif (by Andrey V. Panov) + +Changes from 2.13 to 2.14 + +- added Philippine peso glyph U+20B1 (by Clayborne Arevalo) +- made U+2012 have the same width as digits, according to Unicode 5.0, + page 206 (by Roozbeh Pournader) +- made all of the "above" combining characters remove the dot of "i", + "j", etc (Soft_Dotted characters), according to Unicode 5.0, + page 228 (by Roozbeh Pournader) +- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts + except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed), + U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif + and Serif Condensed) respect the Soft_Dotted property (by Roozbeh + Pournader) +- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Remy Oudompheng) +- added U+203D to Serif (by Gee Fung Sit) +- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee + Fung Sit) +- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432) + (by Ben Laenen) +- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A, + U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA, + U+0EAB, U+0EAD-0EAF to Sans Mono (by Remy Oudompheng) +- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07, + U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D, + U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59, + U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77, + U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono + (by Ben Laenen) +- renamed uppercase variants of diacritics (macron, breve, double grave, + double acute, inverted breve, dot above) to "uni03XX.case" in Mono + (by Ben Laenen) +- moved uppercase variants of diacritics up in Mono so they properly + vertically align on capitals (by Ben Laenen) +- precomposed glyphs with macron, breve, double grave, double acute, + inverted breve, dot above, macron below, breve below, inverted breve + below, dot below, cedilla, caron below, circumflex below, diaeresis + below, tilde below now reference to combining diacritics instead of + space modifiers in Mono (by Ben Laenen) +- made ring below (U+0325), and half rings below (U+031C and U+0339) + smaller in Mono (by Ben Laenen) +- added U+205F to all fonts (by Roozbeh Pournader) +- added U+035E-U+035F to Sans (by Roozbeh Pournader) +- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F, + U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader) +- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B, + U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F, + U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11, + U+2B20-U+2B23 to Sans (by John Karp) +- reshaped omega (U+03C9) in Mono (by Ben Laenen) +- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F, + U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344, + U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354, + U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365, + U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383, + U+2388-U+238B, U+2395 in Mono (by Ben Laenen) + +Changes from 2.12 to 2.13 + +- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book + (by Denis Jacquerye) +- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans + (by Denis Jacquerye) +- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF, + U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5, + U+22EF to Sans Mono (by Roozbeh Pournader) +- added U+04FA-U+04FD to Sans (by Michael Everson) +- removed U+2329 and U+232A because of their CJK properties, added U+27E8 + and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader) +- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482, + U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A + in Sans (by Michael Everson) +- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F, + U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov) +- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447, + U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique + (by Andrey V. Panov) +- modified U+024C to match glyph in Unicode chart, fixing bug #9039 + (by Denis Jacquerye) +- made some canonically equivalent characters share the same glyph: + U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA + to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader) +- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts, + based on a recent decision by Unicode Technical Committee to only use + the digraph form (by Michael Everson) +- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401 + (by Denis Jacquerye) +- fixed several contours to not intersect, use horizontal or vertical tangents, + use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye) +- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE, + U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov) +- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov) +- made traditional shape for U+452, U+45B (by Andrey V. Panov) +- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize + the font as supporting English (by Denis Jacquerye) + +Changes from 2.11 to 2.12 + +- added U+0180 to Serif (by Denis Jacquerye) +- improved and/or hinted Armenian letters U+0542, U+0546, U+0562, + U+0563, U+0564, U+0577, U+0582 in Sans (by Ben Laenen) +- added U+4FE-U+4FF, U+512-U+513, U+2114, U+214E, U+26B2 to Sans + (by Gee Fung Sit) +- adjusted U+0496-U+0497, U+049A-U+04A1 in Sans to match U+0416, + U+041A, U+0436 and U+043A (by Gee Fung Sit) +- Mathematical Operators in Sans: changed U+22C0-U+22C1 to match + other n-ary operators, adjusted U+2203-U+2204, changed U+2220 in + Sans to match the style of U+2221 (by Gee Fung Sit) +- added U+1401, U+1403-U+1406, U+140A, U+140B, U+1426, U+142F, + U+1431-U+1434, U+1438, U+1439, U+1449, U+144A, U+144C, + U+144E-U+1451, U+1455, U+1456, U+1466, U+146B, U+146D-U+1470, + U+1472, U+1473, U+1483, U+1489, U+148B-U+148E, U+1490, U+1491, + U+14A1, U+14A3, U+14A5-U+14A8, U+14AA, U+14AB, U+14BB, U+14C0, + U+14C2-U+14C5, U+14C7, U+14C8, U+14D0, U+14D3, U+14D5-U+14D8, + U+14DA, U+14DB, U+14EA, U+14ED, U+14EF-U+14F2, U+14F4, U+14F5, + U+1405, U+1526, U+1528-U+152B, U+152D, U+152E, U+153E, + U+1542-U+1544, U+1546-U+154D, U+1550, U+1553, U+1555-U+155A, + U+1567, U+156A, U+157C, U+157F-U+1585, U+158A-U+158D, + U+158F-U+1596, U+15A0-U+15A6, U+15DE, U+15E1, U+166E-U+1676 to + Sans (by Eugeniy Meshcheryakov) +- re-enabled Latin ligatures fi, ffi, fl, ffl and ff in Sans + (by Ben Laenen) +- made italic shape for U+436, U+44A, U+44B, U+44C, U+44E, U+45F, + U+463 in SerifOblique and SerifBoldOblique (by Andrey V. Panov) +- fixed sub- and superscript metrics in Condensed Sans (bug #8848) + (by Ben Laenen) +- added U+474, U+475 in Serif (by Andrey V. Panov) +- hinted Greek glyphs U+03B7, U+30B8, U+03B9, U+03C1, U+03C3, + U+03C6 in Mono Book (by Ben Laenen) + +Changes from 2.10 to 2.11 + +- added instructions for Hebrew glyphs (Sans Book, by Eugeniy + Meshcheryakov) +- changed U+01A6 (Latin Yr) after bug #8212, in Sans, Serif and + Sans Mono fonts (by Denis Jacquerye). +- removed instruction for U+2600-U+26A1 (by Mederic Boquien) +- added U+202F and set width of U+00A0 (nobreakingspace) to the + same as U+0020, space (by Denis Jacquerye). +- added and improved instructions for various Cyrillic letters + (by Eugeniy Meshcheryakov) +- Changed U+416, U+42F, U+427 (non-Bold), U+436, U+447 (non-Bold), + U+44F, U+437 (Bold), corrected U+40F, U+414, U+424, U+426, U+429, + U+434, U+438 (Bold), U+446, U+449, U+44D (non-Bold), U+45F in + Sans Mono (by Andrey V. Panov) +- made small corrections to Cyrillic, most appreciable to U+409, + U+413, U+41B, U+427 and U+433, U+434, U+43B, U+447, U+459 + (upright fonts) to Serif (by Andrey V. Panov) +- adjusted bearings of U+410, U+416, U+41A, U+42F, U+436, U+43A, + U+443, U+44F in Serif (by Andrey V. Panov) +- enlarged width of U+44A, U+44B, U+44C, U+463 in Serif + (by Andrey V. Panov) +- added ligature "iacute" as "afii10103" (U+456) "acutecomb" in + Serif (by Andrey V. Panov) +- made italic shape to U+446, U+448, U+449 in Serif (by Andrey V. + Panov) +- added "afii10831" (U+F6C7), "afii10832" (U+F6C8) in Serif (by + Andrey V. Panov) +- new minimum version of fontforge is 20061014 (by Ben Laenen) + +Changes from 2.9 to 2.10: + +- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F, + U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8, + U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and + U+FB29 to Sans (by Gee Fung Sit) +- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D, + U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB, + U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD + (by Remy Oudompheng) +- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen) +- changes to U+222B-222D in Sans Mono (by Remy Oudompheng) +- ported the three remaining currency symbols from Arev (U+20B0, + U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye + Christensen) +- corrected U+20A5 in Sans (by Gee Fung Sit) +- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115, + U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit) +- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces, + fixed incorrect direction of U+2329 in Sans faces, and improved + U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David + Lawrence Ramsey) +- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen) +- added two special glyphs U+F000 and U+F001 in Sans Book that show the + current ppem size (horizontal and vertical) (by Ben Laenen) +- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions + (by David Lawrence Ramsey) +- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David + Lawrence Ramsey) +- respaced all Geometric Shapes characters in Serif faces to match those + in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and + Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again, + and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1 + again (by David Lawrence Ramsey) +- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique + and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit) +- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by + Gee Fung Sit) +- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by + Gee Fung Sit) +- added U+0242, U+0245 to Serif (by Gee Fung Sit) +- replaced the SHPIX routines which gave them bad spacing at certain + sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen) + +Changes from 2.8 to 2.9: + +- DejaVuSansExtraLight.sfd: changed family name from "DejaVu Sans" to + "DejaVu Sans Light" (in case we add a Light weight variant), so legacy + apps that understand only 4 styles are happy. (by Denis Jacquerye) +- added Name ID 16, aka preferred family name, and Name ID 17, aka + preferred style name, so contemporary apps that understand more that 4 + styles can use big fonts families "DejaVu Sans" and "DejaVu Serif". For + those, Extralight and Condensed are just styles not different families. + (by Denis Jacquerye) +- added U+22B6-22BD, U+22C0-22C1, U+22D6-22D7 to Sans. (by Remy Oudompheng) +- added U+037B, U+2184, U+2C67-U+2C6A and U+2C75-U+2C77 to Sans (by Gee + Fung Sit) +- adjusted asteriskmath (U+2217) for consistency with other mathematical + operators in Sans (by Ben Laenen) +- hinted some Armenian capitals in Sans Book (by Ben Laenen) +- added U+0246 - U+0249 (by Ben Laenen) +- BUGFIX : swapped U+224E and U+224F, in Sans, Sans Condensed and Sans Mono + (by Remy Oudompheng) +- adjusted U+20B5 (by Mederic Boquien) +- swapped U+21DA and U+21DB which were in wrong order (by Heikki Lindroos) +- added U+222E-2233, U+239B-23AD, U+2A00-2A02, U+2A0F-2A1C to Sans (by Remy + Oudompheng) +- added U+239B-23AD to Mono (by Remy Oudompheng) +- added U+2024-2025 to Serif (by Mederic Boquien) +- added U+222C-222D, U+2A0C-2A0E to Serif (by Remy Oudompheng) +- added U+2190-21FF to Mono (by Heikki Lindroos) +- added Hebrew glyphs - U+05B0-U+05BD, U+05BF-U+05C3, U+05C6, U+05C7, + U+05D0-U+05EA, U+05F0-U+05F2, U+FB1F, U+FB20, U+FB2A-U+FB36, + U+FB38-U+FB3C, U+FB3E, U+FB40, U+FB41, U+FB43, U+FB44, U+FB46-U+FB4E (by + Gee Fung Sit and Eugeniy Meshcheryakov) +- adjustments for Cyrillic in Sans (by Andrey V. Panov) +- made italic shape for U+0434, U+0456, U+0457 in SerifOblique and Serif + Bold Oblique (by Andrey V. Panov) + +Changes from 2.7 to 2.8: + +- fixed instructions for U+0423, U+0427, U+0447, U+0448 in Serif, so they + look good at large sizes too (by Eugeniy Meshcheryakov) +- added U+FB00 and U+FB03 to U+FB06 to Serif typefaces (by Heikki Lindroos) +- added U+26B0-U+26B1, U+2701-U+2704, U+2706-U+2709, U+270C-U+2727, U+2729 + to U+274B, U+274D, U+274F to U+2752, U+2756, U+2758-U+275E, U+2761 to + U+2775 (by Heikki Lindroos) +- added and improved instructions for Cyrillic letters in Mono and Serif + (Book, by Eugeniy Meshcheryakov) +- rotated U+26B0 (was too small in mono) (by Gee Fung Sit) +- adjusted U+1EDA-U+1EDD, U+1EE8-U+1EEB, capitals using capital specific + accent and moved diacritics to match position on U+00F2 (ograve), etc. + (by Denis Jacquerye) +- added U+20D6, U+20D7 to Sans (by Gee Fung Sit) +- made Armenian ligatures discretionary since the Firefox ligature problem + still isn't fixed (by Ben Laenen) +- moved Armenian hyphen U+058A to a higher position (bug #7436) (by Ben + Laenen) +- hinted Greek glyphs in Sans Bold (by Ben Laenen) +- enabled Arabic lam-alif ligatures when diacritics are used (by Ben Laenen) + +Changes from 2.6 to 2.7: + +- added glyphs needed for Kurdish: U+0695, U+06B5, U+06C6, U+06CE and their + init/medi/fina forms in Sans (by Ben Laenen) +- added U+02CD, U+01F8 - U+01F9, U+1E3E - U+1E3F, U+1E30 - U+1E35, U+1EBC - + U+1EBD, U+1EF8 - U+1EF9 (includes glyphs needed for Yoruba, Maori, Guarani + and Twi) (by Ben Laenen) +- added U+22C8-22CC, U+29CE-29D5, U+2A7D-2AA0, U+2AAE-2ABA, U+2AF9-2AFA to + Sans (by Remy Oudompheng) +- adjusted diacritics on Vietnamese, Pinyin and other characters: + U+01A0-U+01A1, U+01AF-U+01B0, U+01D5-U+01DC, U+01DE-01E1, U+01FA-U+01FB + U+022A-U+022D, U+0230-U+0231, U+1E14-U+1E17, U+1E4C-U+1E53, U+1E78-U+1E7B, + U+1EA4-U+1EF1 in Sans (Book, Bold and Oblique) (by Denis Jacquerye) +- added basic arrows U+2190-U+2193 in Serif, which completes MES-1 compliance + for Serif (by Ben Laenen) +- added U+01E4, U+01E5, U+01FA, U+01FB, U+02BD, U+02C9 and U+02EE to Serif + (by Ben Laenen) +- fixed U+0209 in Serif Bold Oblique (by Ben Laenen) +- adjusted Box Drawing block characters U+2500-257F in Mono to fit character + cell, shifting them up by 416 (Denis Jacquerye) +- redid U+0194 in Sans (by Ben Laenen) +- added U+2217-2218, U+2295-22A1 to Mono (by Remy Oudompheng) +- added U+0462 to Serif (by Andrey V. Panov) +- added U+226C, U+228C-228E, U+2293-2294, U+22F2-22FF to Sans (by Remy + Oudompheng) +- adjusted U+2208-220D in Sans (by Remy Oudompheng) +- improved some Cyrillic glyphs in Mono (by Andrey V. Panov), rewritten + instructions for changed glyphs (by Eugeniy Meshcheryakov) +- added U+1E0E-1E0F, U+1E8E-1E8F to Mono fonts (by Denis Jacquerye). (bug + #7166) +- renamed 'Dotabove' to 'Dotaccent' in Mono Sans Oblique to match other fonts + (by Denis Jacquerye). +- added U+200B-U+200F in Sans faces and Serif faces, U+200B and U+200C were + in Sans already (by Lars Naesbye Christensen) +- added U+2601-U+262F, U+263D, U+263E, U+2648-U+265F, U+2668, U+2670-U+268B, + U+2690-U+269C, U+26A0, U+26A1, U+2794, U+2798-U+27AF, U+27B1-U+27BE to Mono + (by Heikki Lindroos) +- replaced the references with unshifted ones for both κ U+03BA and к U+043A + in Mono Book (by Denis Jacquerye) +- fixing glyph for U+04ED in Mono Book, consisted only of dieresis (by Andrey + V. Panov). + +Changes from 2.5 to 2.6: + +- redid U+2032 - U+2037, U+2057 based on Arev in Sans (by Gee Fung Sit) +- added U+0195, corrected U+039E, U+204B in Sans ExtraLight (by Gee Fung Sit) +- added instructions for some Cyrillic letters in Sans Bold (by Eugeniy + Meshcheryakov) +- added vulgar fractions U+2153-U+215F for Serif, made with references (by + Lars Naesbye Christensen) +- added U+228F-2292, U+2299-22AF, U+22B2-22B5, U+22CD, U+22D8-22ED to Sans + (by Remy Oudompheng) +- added U+2208-220D, U+2238-223D, U+2278-2281, U+228A-228B, U+228F-2292, + U+22CD, U+22DA-22E9 to Mono (by Remy Oudompheng) +- fixed misplaced dot in U+2250 in Mono (by Remy Oudompheng) +- added instructions for some Cyrillic letters in Mono Book and Bold(by + Eugeniy Meshcheryakov) +- minor changes to U+2241, U+2261-2263, U+22A4, U+22A5 in Sans (by Remy + Oudompheng) +- added hinting instructions to lowercase Armenian glyphs in Sans Book (by + Ben Laenen) +- changed U+2208, U+220B to match U+2209 and U+220C in Sans Bold (by Remy + Oudompheng) +- added Braille patterns U+2800-U+28FF to Sans (by Mederic Boquien) +- added instructions for some Cyrillic letters in Serif Book (by Eugeniy + Meshcheryakov) +- renamed BoldOblique fonts to Bold Oblique in TTF Name as originally in + Bitstream Vera fonts (by Denis Jacquerye) +- added hinting instructions to some Latin-B Extended and IPA characters in + Sans Book (by Denis Jacquerye and Ben Laenen) +- adjusted bearings, replaced diacritics, hinted hook and horn for + Vietnamese in Sans Book (by Denis Jacquerye) +- made FAX, TM, TEL, etc. discritionary ligatures in Sans and Serif fonts + (by Denis Jacquerye) +- removed ligatures of precomposed characters in Sans and Serif fonts (by + Denis Jacquerye) +- added U+F208, U+F20A, U+F215-F217, U+F21A-F21B, U+F25F in PUA (from SIL's + PUA, probably in Unicode 5.0): U+0243, U+0244, U+0245, U+024C, U+024D, + U+2C64, (U+2C6D), (U+2C71) +- modified some glyphs in Serif Oblique to make them more italic (by Denis + Jacquerye) + +Changes from 2.4 to 2.5: + +- fixed excessive kerning bug that occurs with Pango (by Denis Jacquerye) +- added U+20AF to Sans and Serif (by Lars Naesbye Christensen) +- regenerated Condensed faces (by Ben Laenen) +- added U+035C-U+035D to Sans, fixed U+0361 (by Denis Jacquerye) +- integrated 255 characters from Arev fonts: Latin Extended-B, Spacing + Modifiers, Combining Diacritical Marks, Cyrillic, Cyrillic supplement, + General Punctuation, Letterlike Symbols, Arrows, Mathematical Operators, + Miscellaneous Technical, Dingbats, Alphabetic Presentation Forms (by Denis + Jacquerye) +- added basic Cyrillic and basic Greek to Sans ExtraLight (by Denis Jacquerye) +- added U+0498, U+049A, U+04AA, U+04AB, U+04AF to Serif (by Eugeniy + Meshcheryakov) +- added U+0494, U+0495, U+0498, U+0499, U+04AA, U+04AB, U+04C3, U+04C4, + U+04C7, U+04C8 to Mono (by Eugeniy Meshcheryakov) +- adjusted weight of U+0256, U+0257, U+0260, U+0272, U+0273, U+0277, U+029B, + U+02A0 and modifed U+028B and U+027A in Mono (by Denis Jacquerye) +- added U+2000-200A to Mono (by Denis Jacquerye) +- added vulgar fractions U+2153 - U+215F to Mono (by Gee Fung Sit) +- adapted metrics of Arabic glyphs so they stay above cut-off height in Sans + (by Ben Laenen) +- fixed mkmk anchors for Arabic diacritics so they stack properly in Sans (by + Ben Laenen) +- fixed weight of lowercase upsilon in Sans Bold, make small adjustment to + lowercase omega in Sans (by Ben Laenen) +- added U+210E (by Mederic Boquien) +- unslanted U+2201, U+221B and U+221C in Sans Oblique (by Mederic Boquien) +- added several mathematical relation symbols to Sans and Mono (U+2241-224C, + U+2250-2255, U+2260-2269, U+226E-2277, U+2282-2287) modified U+223C to match + other tildes, and U+2282-2284 to have the same shape. (by Remy Oudompheng) +- made U+2234-U+2237 refer to U+2219 instead of U+00B7 in Sans (by Mederic + Boquien) +- added U+2238-223B, U+226A-226B, U+2278-2281, U+2288-228B to Sans (by Remy + Oudompheng) +- unslanted and changed reference of U+22C5 from U+00B7 to U+2219 in Sans (by + Mederic Boquien) +- added U+224D-225F, U+226D, U+22C6 to Sans and unslanted U+2219 in Sans + Oblique. (by Remy Oudompheng) +- added U+224D-225F, U+226D to Mono, shifted U+2266-2269 higher upwards and + unslanted U+2219 in Oblique. (by Remy Oudompheng) +- merged Coptic glyphs from Arev 0.2 (by Lars Naesbye Christensen) +- fixed and adjusted various Cyrillic glyphs in Serif (by Andrey V. Panov) +- made fi, fl... ligatures discretionary ligatures (by Ben Laenen) + +Changes from 2.3 to 2.4: + +- added U+04A2, U+04A3, U+04AC - U+04AF, U+04BA, U+04BB, U+04C0 - + U+04C2, U+04CB, U+04CD, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04E8 - U+04F5, + U+04F6 - U+04F9 to Mono (by Eugeniy Meshcheryakov) +- added U+048C, U+048D, U+0494, U+0495, U+049E - U+04A7, U+04AC - + U+04AE, U+04B4- U+04B7, U+04BA, U+04BB, U+04C0 - U+04C4, U+04C7, U+04C8, + U+04CB, U+04CC, U+04D8 - U+04DF, U+04E2 - U+04E5, U+04EC - U+04F9 to Serif + (by Eugeniy Meshcheryakov) +- added U+2134 to Sans (by Gee Fung Sit) +- added U+2080 - U+2089 to all faces (by Gee Fung Sit) +- several minor corrections to Sans (by Gee Fung Sit) +- major corrections to Sans Condensed (by Gee Fung Sit) +- corrected Superscripts and Subscripts in Sans (by Gee Fung Sit) +- corrected anchors of U+0316-U+0319 (by Denis Jacquerye) +- Verajja integrated (by Stepan Roh) +- copied U+2328, U+2600, U+2639-U+263C, U+263F-U+2647, U+2660-U+2667, + and U+2669-U+266F from Sans to Serif, and copied scaled-down versions of + them to Sans Mono (by David Lawrence Ramsey) +- added U+20B4 to all faces (by Eugeniy Meshcheryakov) +- added more minor positional adjustments to U+2638 in all faces to + match the other miscellaneous symbols in Verajja, and rescale it in Sans + Mono so that it looks better (by David Lawrence Ramsey) +- added U+2242, U+2243 and U+22A4 (by Mederic Boquien) +- corrected U+2245 in Sans (by Mederic Boquien) +- added U+0221, U+0234-0236 (by Denis Jacquerye) +- added in Arabic block to Sans: U+060C, U+0615, U+061B, U+061F, U+0621 +- U+063A, U+0640 - U+0655, U+0660 - U+066F, U+0679 - U+0687, U+0698, U+06A1, + U+06A9, U+06AF, U+06BA, U+06BF, U+06CC, U+06F0 - U+06F9 (by Ben Laenen) +- added in Arabic Presentation Forms A to Sans: U+FB52 - U+FB81, U+FB8A +- U+FB95, U+FB9E - U+FB9F, U+FBE8 - U+FBE9, U+FBFC - U+FBFF (by Ben Laenen) +- added complete Arabic Presentation Forms B to Sans: U+FE70 - U+FE74, + U+FE76 - U+FEFC, U+FEFF (by Ben Laenen) +- added complete Greek Extended block to Mono (by Ben Laenen) +- modified Greek capitals with tonos in Mono (by Ben Laenen) +- added U+01C4-01CC, U+01D5, U+01DE, U+01E0-U+01E1, U+01E6-U+01E9, + U+01EE-U+01F5, U+01F8-U+0217, U+021E-U+021F, U+0226-U+022A, U+022C to Serif + (by Denis Jacquerye) +- adjusted U+043B and U+044F in Serif (by Denis Jacquerye) +- added U+2000-U+200A (by Denis Jacquerye) +- added U+1E00-U+1E0B, U+1E0E-U+1E11, U+1E14-U+1E1C, U+1E1E-U+1E23, + U+1E26-U+1E2D, U+1E30-U+1E35, U+1E3A-U+1E3B, U+1E3E-U+1E40, U+1E48-U+1E49, + U+1E50-U+1E56, U+1E58-U+1E59, U+1E5E-U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, + U+1E72-U+1E7D, U+1E86-U+1E9B, U+1EA0-U+1EA3, U+1EAC-U+1EB7, U+1EBA-U+1EBD, + U+1EC6-U+1ECF, U+1ED8-U+1ED9, U+1EE6-U+1EE7, U+1EF4-U+1EF9 to Serif (by + Denis Jacquerye) +- added U+048E, U+048F, U+049C-U+049F, U+04B8, U+04B9, U+04BC-U+04BF, + U+04C3, U+04C4 to Sans (by Eugeniy Meshcheryakov) +- added DejaVu Sans Extra Light (by Denis Jacquerye) +- Adjusted underline position for (hopefully) improved legibility in + Sans, Serif, Mono (Tim May) +- added auto-generated DejaVu LGC (by Stepan Roh) + +Changes from 2.2 to 2.3: + +- fixed bug U+042B and U+044B behave badly in Sans Bold or Oblique (by + Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+04D0-U+04D7, U+04E6, U+04E7 to Mono (by Eugeniy Meshcheryakov) +- added U+048A - U+048D, U+0498, U+0499, U+04AA, U+04AB, U+04B0, U+04B1, + U+04C0, U+04C9, U+04CA, U+04CE, U+04CD, U+04DA, U+04DB, U+04DE, U+04DF, + U+04E2 - U+04E5, U+04EC - U+04F8, U+04F9 to Sans (by Eugeniy Meshcheryakov) +- added U+04E0, U+04E1 to all faces (by Eugeniy Meshcheryakov) +- added Greek Extended to Sans and Serif: U+1F00-U+1F15, U+1F18-U+1F1D, + U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D, + U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB, + U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE (by Ben Laenen) +- added Greek variant letterforms, archaic letters and symbols to Mono: + U+03D0-U+03E1, U+03F0-U+03FF (by Ben Laenen) +- added Armenian block and Armenian ligatures to Sans (U+0531 - U+0556, + U+0559 - U+055F, U+0561 - U+0587, U+0589 - U+058A, U+FB13 - U+FB17) (by Ben + Laenen) +- redid some Greek characters in Sans and Mono to make them look better + and to correct some errors (by Ben Laenen) +- added U+27E0 to all faces (by David Lawrence Ramsey) +- added underscore (U+005F) consistency fixes: extended the Sans Mono + and Sans Mono Oblique underscores to touch both horizontal edges, and + reduced the height of the Sans Bold Oblique underscore to match the Sans + Bold underscore (by David Lawrence Ramsey) +- added underscore (U+005F) derivatives and consistency fixes for them: + made U+0332 a reference to underscore at Denis Jacquerye's suggestion; made + U+0333 two references to underscore; made U+033F two references to U+203E; + added U+2017 as two references to underscore, and made U+0333 a reference to + it; and added U+203E as a reference to underscore, and made U+0305 a + reference to it (by David Lawrence Ramsey) +- added U+201B, U+2220, U+2320-U+2321, U+23AE, U+23CF, all remaining + Geometric Shapes glyphs (U+25A0-U+25C9, U+25CB-U+25D7, U+25D9-U+25E5, + U+25E7-U+25FF), and U+2B12-U+2B13 to all faces (by David Lawrence Ramsey) +- added minor positional adjustments to U+2638 in all faces (by David + Lawrence Ramsey) +- added U+201F to Sans Mono and Serif faces (by David Lawrence Ramsey) +- added U+01B7, U+01F6, U+0464 - U+0465, U+2160 - U+2180, U+2183, + U+220A, U+220D, U+2329, U+232A, U+2422, U+27E8 - U+27EB, U+2680 - U+2685 to + Sans (by Gee Fung Sit ???) +- added U+2116 to Sans and Serif (by Gee Fung Sit) +- changed florin sign U+0192 in Sans (by Gee Fung Sit) +- added anchor points to some glyphs (by Denis Jacquerye) +- adjusted height of IPA superscripts U+02B0-02B8, U+02C0-02C1, + U+02E0-02E4, U+207F to match with height of U+00B2 (by Denis Jacquerye) +- added U+0184-U+0185, U+019C, U+019F, U+01A0-U+01A3, U+01A6, U+01AA, + U+01AF-U+01B0, U+01B2-U+01B4, U+01B7-U+01B8, U+01BC-U+01BC, U+0224-U+0225, + U+023A-U+0240, U+1D16-U+1D17, U+1D1D-U+1D1E, U+1D43-U+1D5B, U+1D7B, + U+1D85,U+1D9B-1DB7, U+1DB9-U+1DBF, U+20A6 to all fonts (by Denis Jacquerye) +- added added U+0182, U+018B, U+018E, U+01A0-U+01A1, U+01B1, U+01B9, + U+01C0-U+01C3, U+0238-U+0239, U+1D02, U+1D08-U+1D09, U+1D14, U+1D1F, U+1D77 + to Serif and Mono (by Denis Jacquerye) +- added U+0181, U+0183, U+0187-U+0188, U+018A-U+018F, U+0191, U+0193, + U+0195-U+019B, U+019D-U+019E, U+01A4-U+01A5, U+01AC-U+01AE, U+01B5-U+01B6, + U+01B9, U+01BB, U+01F6 to Serif (by Denis Jacquerye) +- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193, + U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6, + U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye) +- added to Mono and Serif (by Denis Jacquerye) + +Changes from 2.1 to 2.2: + +- reworked the vertical orientation of the Blocks Elements characters + in all faces to remove their overly large descenders, in order to fix + problems with e.g. terminal emulators (by David Lawrence Ramsey) +- copied bullet in Sans faces to Serif faces for consistency (by David + Lawrence Ramsey) +- added U+2023, U+25D8, U+25E6, and U+29EB to all faces (by David + Lawrence Ramsey) +- added U+1EB8, U+1EB9, U+1ECA - U+1ECD, U+1EE4, U+1EE5 (by Tim May) +- added U+01DD, U+02BE, U+02BF, U+02D3 to all, changed U+02D2 in + non-Condensed and U+1EE5 in Serif (by Tim May) +- fixed U+01CE, replacing wrong circumflex by caron (by Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- added U+20B5 (by Denis Jacquerye) +- added U+0181 - U+0183, U+0187, U+0188, U+018A - U+018D, U+0191, + U+0193, U+0195 - U+019B, U+019D, U+019E, U+01A4, U+01A7 - U+01A9, U+01AB - + U+01AE, U+01B1, U+01B5, U+01B6, U+01BB, U+01C0 - U+01C3, U+01F1 - U+01F3, + U+0238, U+0239, U+1D02, U+1D08, U+1D09, U+1D14, U+1D1F, U+1D77, U+2103, + U+2126, U+2127, U+212A, U+212B, U+2132, U+214B, U+2210, U+2217, U+2218, + U+2A0C - U+2A0E, U+FB00, U+FB03 and U+FB04 to Sans (by Gee Fung Sit) +- added U+01A9, U+01C3 and U+2126 to Mono and Serif (by Gee Fung Sit) +- adjusted bearings of U+028B in Sans (by Gee Fung Sit) +- added U+018F, U+0494-U+0497, U+04A0-U+04A7, U+04AC-U+04AF, + U+04B4-U+04B7, U+04BA-U+04BB, U+04C1-U+04C2, U+04C5-U+04C8, U+04CB-U+04CC, + U+04D0-U+04D9, U+04DC-U+04DD, U+04E6-U+04EB to Sans (by Eugeniy + Meshcheryakov) +- replaced with references U+0391-U+0393, U+0395-U+0397, U+0399, U+039A, + U+039C, U+039D, U+039F-U+03A1, U+03A4, U+03A5, U+03A7, U+03BF, U+03DC, + U+0405, U+0406, U+0408, U+0410, U+0412, U+0415, U+0417, U+041A, + U+041C-U+041E, U+0420-U+0422, U+0425, U+0430, U+0435, U+043E, U+0440, + U+0441, U+0443, U+0445, U+0455-U+0458 in Serif and Mono (by Eugeniy + Meshcheryakov) +- added U+04D0-U+04D7, U+04E6-U+04EB to Serif (by Eugeniy Meshcheryakov) +- added U+212A and U+212B to the rest of the faces (by Lars Naesbye + Christensen) +- added U+2318 and U+2325 to Sans and Serif (by Lars Naesbye Christensen) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E, + U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben + Laenen) +- added U+2070 and U+2074-U+2079 (by Mederic Boquien) + +Changes from 2.0 to 2.1: + +*** Be aware that names of some TTF files changed since version 2.0. *** + +- added U+0323, U+1E0C, U+1E0D, U+1E24, U+1E25, U+1E36 - U+1E39, U+1E42, + U+1E43, U+1E46, U+1E47, U+1E5A - U+1E5D, U+1E62, U+1E63, U+1E6C, U+1E6D, + U+1E7E, U+1E7F (by Tim May) +- fixed bug where GNOME applications used Mono Bold Oblique instead of + Mono Oblique (by Keenan Pepper) +- added and improved TrueType instructions and related settings (by + Keenan Pepper) +- added U+1E41, U+1E57, U+1E61 (by Sander Vesik) +- added U+0189, U+0309, U+0313, U+0314, U+031A, U+031B, U+0327, U+0328, + U+032B, U+0333, U+033C (by Denis Jacquerye) +- adjusted and fixed U+0186, U+0254, U+0291, U+0316 - U+0319, U+031C - + U+0320, U+0323 - U+0326, U+0329 - U+032A, U+032C - U+0332, U+0339 - U+033B, + U+033E, U+033F (by Denis Jacquerye) +- fixed U+1E12, U+1E3C, U+1E4A, U+1E70 to have normal below diacritics + (by Denis Jacquerye) +- fixed U+1E82, U+1E84 and U+1EF2 to have uppercase above diacritics (by + Denis Jacquerye) +- added anchor points to some glyphs (by Denis Jacquerye) +- dropped "-Roman" from font names - affects both internal TTF names and + names of generated files (by Stepan Roh) +- attempt to fix bug Vertical spacing too big for Mono by exchanging + LineGap and OS2TypoLinegap values (proofed by Stefan Rank) +- added Greek capitals U+0391 - U+03A1, U+03A3 - U+03A9, U+03AA, U+03AB + in Mono (by Ben Laenen) +- added the per ten thousand sign U+2031 (by Mederic Boquien) +- added U+2207, U+221D, U+221F, U+2227 - U+222A, and U+2261 (by David + Lawrence Ramsey) +- new logo (by Gee Fung Sit) +- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203, + U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit) + +Changes from 1.15 to 2.0: + +- "Italized" basic glyphs in all Serif Oblique and their Condensed faces + (by David Jez) +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- added anchor points to some glyphs (by Denis Jacquerye) +- many new spacing and combining accents (by Denis Jacquerye) +- smart substitutions for transforming i and j to dottless form and for + using uppercase diacritics (by Denis Jacquerye) +- fixed remaining erroneously slanted characters in Serif Oblique faces (by + David Lawrence Ramsey) +- copied bullet in Sans faces to Sans Oblique faces for consistency (by + David Lawrence Ramsey) +- added U+203C and U+2047-U+2049 (by David Lawrence Ramsey) +- added Greek glyphs to Serif (by Ben Laenen, Condensed merge by David Jez) +- fixed bug LTR glyphs behaving like RTL (by Ben Laenen) +- fixed wrong glyph directions (by David Jez) +- fixed repositioned accents in Condensed faces (by David Jez) + +Changes from 1.14 to 1.15: + +- added and improved TrueType instructions and related settings (by Keenan + Pepper) +- fixed U+2302, U+2319 (by David Lawrence Ramsey) +- fixed yet another monospace bug (by Stepan Roh) +- fixed potential "too big ascender/descender" bug (by Stepan Roh) +- fixed U+026E and U+028E (by Denis Jacquerye) +- added U+0186, U+0190, U+0300 - U+0304, U+0306 - U+0308, U+030A - U+030C, + U+0321, U+0322 (by Denis Jacquerye) +- added rest of Block Elements: U+2591 - U+2593 (by David Lawrence Ramsey) +- added U+2311, U+237D and U+2638 (by David Lawrence Ramsey) +- added U+01CD - U+01D4 (by Denis Jacquerye) +- fixed accents of U+00F2 - U+00F6 by replacing them with references in Mono + Bold (by David Jez) +- added U+0490, U+0491 (by Eugeniy Meshcheryakov) +- added hints to U+0404 and U+0454 in Sans (by Eugeniy Meshcheryakov) +- completed Greek glyphs from U+0370 to U+03CF in Serif (by Ben Laenen) +- fixed shape of U+0255 in Sans Bold and Sans Bold Oblique (by Denis + Jacquerye) + +Changes from 1.13 to 1.14: + +- fixed bug where Mono faces were not recognized as fixed pitch in Windows + by correcting Venda glyphs (by David Jez) +- added and improved TrueType instructions (by Keenan Pepper) +- added 6 Uzbekian glyphs (by Mashrab Kuvatov) +- added Greek glyphs to Sans and Serif, changed pi and omega to fit in (by + Ben Laenen) +- added IPA and related superscript glyphs (by Denis Jacquerye) +- fixed buggy Venda glyphs (by David Lawrence Ramsey and Stepan Roh) +- added U+2302, U+2310, U+2319 (by David Lawrence Ramsey) +- fixed slanted U+00AC in Serif Oblique faces (by David Lawrence Ramsey) +- added 29 glyphs from Block Elements (by David Lawrence Ramsey) + +Changes from 1.12 to 1.13: + +- removed all stems (PS hints) (requested by David Jez) +- added U+01D6, U+01DF, U+022B, U+022D and U+0231 (by Sander Vesik) +- added 10 Venda glyphs (by Dwayne Bailey) +- fixed bug when fonts had no name on Microsoft Windows (by Stepan Roh) +- updated 'missing' glyph U+FFFD (by David Jez) +- set TTF flag fsType to 'Installable Embedding' (= unrestricted usage) + (idea by C. Tiffany) + +Changes from 1.11 to 1.12: + +- added long s (by James Cloos) +- prettier comma accent in gcommaaccent (by David Jez) +- added Hbar, hbar, kgreenlandic, napostrophe, Eng, eng, Tbar, tbar, + afii57929 (by David Jez) +- changed Iogonek, iogonek, IJ, ij to look better (by David Jez) +- glyph uni0237 renamed to dotlessj (requested by David Jez) +- fixed accents for dcaron, lcaron, tcaron, Uogonek, uogonek in Serif (by + David Jez) +- added U+2500 - U+257F box drawing glyphs to Sans Mono (by David Jez) +- fixed accents in Wcircumflex, Ycircumflex and Zdotaccent (by David Jez) +- extra kerning for F (by Sander Vesik) +- added 'missing' glyph U+FFFD (by David Jez) + +Changes from 1.10 to 1.11: + +- kerning updates (by Sander Vesik) +- added Iogonek, iogonek, IJ, ij, Uogonek, uogonek (from SuSE standard fonts + by Adrian Schroeter, SuSE AG) +- added Gcommaaccent, gcommaaccent, Kcommaaccent, kcommaaccent, + Lcommaaccent, lcommaaccent, Ncommaaccent, ncommaaccent, Rcommaaccent, + rcommaaccent (by Stepan Roh) + +Changes from 1.9 to 1.10: + +- added U+022E, U+022F (by Sander Vesik) +- kerning updates for DejaVu Sans (by Sander Vesik) +- fixed too wide cyrillic glyphs in DejaVu Sans Mono (by Valentin Stoykov) +- fixed ligatures bug in Mono (by Stepan Roh) + +Changes from 1.8 to 1.9: + +- integrated Arev Cyrillics (by Danilo Segan) +- added U+01EA, U+01EB, U+01EC, U+01ED (by Sander Vesik) + +Changes from 1.7 to 1.8: + +- fixed accents in Serif Oblique and Serif Bold Oblique (by Stepan Roh) + +Changes from 1.6 to 1.7: + +- added automatically generated Condensed typefaces (by Stepan Roh) + +Changes from 1.5 to 1.6: + +- monospace bug fixed (by Stepan Roh) +- incorrect Bitstream foundry assigned by fontconfig and KDE Font Installer +fixed (by Stepan Roh) +- added automatically generated Oblique version of Serif typefaces (by +Stepan Roh) +- corrected cyrillic D and d (by Danilo Segan and David Jez) +- fixed accents position in Oblique version of Serif typefaces (by Danilo +Segan and Sander Vesik) +- fixed incorrect computation of OS2Win* fields (by Stepan Roh) +- added visiblespace U+2423 (by David Jez) +- fixed 'line height' bug by fixing ascender and descender values (by David +Jez and Stepan Roh) +- fixed part of 'worse than Vera' bug (by Peter Cernak) +- smaller comma accent U+0326 (by David Jez) + +Changes from 1.4 to 1.5: + +- added Cyrillics (96 characters) and Dcroat to the rest of typefaces (by +Danilo Segan) +- fixed bugs in some Cyrillic characters, some of them reported by Sander +Vesik (by Danilo Segan) +- added U+0100, U+0101, U+0112, U+0113, U+012A, U+012B, U+014C, U+014D, +U+016A, U+016B, U+01E2, U+01E3, U+0232 and U+0233 (by Sander Vesik) +- added Romanian characters (by Misu Moldovan) +- added U+0108, U+0109, U+010A, U+010B, U+0114, U+0115, U+0116, U+0117, +U+011C, U+011D, U+0120, U+0121, U+0124, U+0125, U+0128, U+0129, U+012C, +U+012D, U+0134, U+0135, U+014E, U+014F, U+0150, U+0151, U+015C, U+015D, +U+0168, U+0169, U+016C, U+016D, U+0170, U+0171 and U+0237 (by James +Crippen) +- added U+02BB, U+2010, U+2011, U+2012 and U+2015 (by Stepan Roh) + +Changes from 1.3 to 1.4: + +- added Polish characters (Aogonek, aogonek, Eogonek, eogonek, Nacute, +nacute, Sacute, sacute, Zacute, zacute, Zdotaccent, zdotaccent) (by Stepan +Roh) + +Changes from 1.2 to 1.3: + +- added Cyrillics (96 characters) and Dcroat to Sans typefaces (by Danilo +Segan from his BePa fonts) + +Changes from 1.1 to 1.2: + +- added Ldot, ldot, Wcircumflex, wcircumflex, Ycircumflex, ycircumflex, + Wgrave, wgrave, Wacute, wacute, Wdieresis, wdieresis, Ygrave and ygrave + (from The Olwen Font Family 0.2 by Dafydd Harries) + +Changes from 1.0 to 1.1: + +- added Lacute, lacute, Lcaron, lcaron, Racute and racute (by Peter Cernak) + +Changes from 0.9.4 to 1.0: + +- none, just changed version and updated README + +Changes from 0.9.3 to 0.9.4: + +- fixed TTF generation (kerning tables were missing) + +Changes from 0.9.2 to 0.9.3: + +- kerning of added characters +- proper caron shape for dcaron in Mono (by Ondrej Koala Vacha) +- minor visual changes + +Changes from 0.9.1 to 0.9.2: + +- internal bugged version + +Changes from 0.9 to 0.9.1: + +- proper caron shape for dcaron and tcaron +- minor visual changes + +$Id: NEWS 2535 2013-08-25 15:21:17Z moyogo $ diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/README b/tcpdf/fonts/dejavu-fonts-ttf-2.34/README new file mode 100644 index 0000000..162a893 --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/README @@ -0,0 +1,59 @@ +DejaVu fonts 2.34 (c)2004-2013 DejaVu fonts team +------------------------------------------------ + +The DejaVu fonts are a font family based on the Bitstream Vera Fonts +(http://gnome.org/fonts/). Its purpose is to provide a wider range of +characters (see status.txt for more information) while maintaining the +original look and feel. + +DejaVu fonts are based on Bitstream Vera fonts version 1.10. + +Available fonts (Sans = sans serif, Mono = monospaced): + +DejaVu Sans Mono +DejaVu Sans Mono Bold +DejaVu Sans Mono Bold Oblique +DejaVu Sans Mono Oblique +DejaVu Sans +DejaVu Sans Bold +DejaVu Sans Bold Oblique +DejaVu Sans Oblique +DejaVu Sans ExtraLight (experimental) +DejaVu Serif +DejaVu Serif Bold +DejaVu Serif Bold Italic (experimental) +DejaVu Serif Italic (experimental) +DejaVu Sans Condensed (experimental) +DejaVu Sans Condensed Bold (experimental) +DejaVu Sans Condensed Bold Oblique (experimental) +DejaVu Sans Condensed Oblique (experimental) +DejaVu Serif Condensed (experimental) +DejaVu Serif Condensed Bold (experimental) +DejaVu Serif Condensed Bold Italic (experimental) +DejaVu Serif Condensed Italic (experimental) + +All fonts are also available as derivative called DejaVu LGC with support +only for Latin, Greek and Cyrillic scripts. + +For license information see LICENSE. What's new is described in NEWS. Known +bugs are in BUGS. All authors are mentioned in AUTHORS. + +Fonts are published in source form as SFD files (Spline Font Database from +FontForge - http://fontforge.sf.net/) and in compiled form as TTF files +(TrueType fonts). + +For more information go to http://dejavu.sourceforge.net/. + +Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah: +--------------------------- +U+01BA, U+01BF, U+01F7, U+021C-U+021D, U+0220, U+0222-U+0223, +U+02B9, U+02BA, U+02BD, U+02C2-U+02C5, U+02d4-U+02D5, +U+02D7, U+02EC-U+02EE, U+0346-U+034E, U+0360, U+0362, +U+03E2-03EF, U+0460-0463, U+0466-U+0486, U+0488-U+0489, U+04A8-U+04A9, +U+0500-U+050F, U+2055-205E, U+20B0, U+20B2-U+20B3, U+2102, U+210D, U+210F, +U+2111, U+2113, U+2115, U+2118-U+211A, U+211C-U+211D, U+2124, U+2135, +U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704, +U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794, +U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06 + +$Id: README 2535 2013-08-25 15:21:17Z moyogo $ diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/langcover.txt b/tcpdf/fonts/dejavu-fonts-ttf-2.34/langcover.txt new file mode 100644 index 0000000..4db5bca --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/langcover.txt @@ -0,0 +1,249 @@ +This is the language coverage file for DejaVu fonts +($Id: langcover.txt 2538 2013-08-25 16:02:56Z moyogo $) + + Sans Serif Sans Mono +aa Afar 100% (62/62) 100% (62/62) 100% (62/62) +ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90) +af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69) +ak Akan 100% (73/73) 100% (73/73) 100% (73/73) +am Amharic (0/264) (0/264) (0/264) +an Aragonese 100% (66/66) 100% (66/66) 100% (66/66) +ar Arabic 100% (36/36) (0/36) 100% (36/36) +as Assamese (0/64) (0/64) (0/64) +ast Asturian/Bable/Leonese/Asturleonese 100% (70/70) 100% (70/70) 100% (70/70) +av Avaric 100% (67/67) 100% (67/67) 100% (67/67) +ay Aymara 100% (60/60) 100% (60/60) 100% (60/60) +az-az Azerbaijani in Azerbaijan 100% (66/66) 100% (66/66) 100% (66/66) +az-ir Azerbaijani in Iran 100% (40/40) (0/40) 100% (40/40) +ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82) +be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68) +ber-dz Berber in Algeria 100% (70/70) 100% (70/70) 100% (70/70) +ber-ma Berber in Morocco 100% (32/32) (0/32) (0/32) +bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60) +bh Bihari (Devanagari script) (0/68) (0/68) (0/68) +bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68) +bi Bislama 100% (58/58) 100% (58/58) 100% (58/58) +bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78) +bm Bambara 100% (60/60) 100% (60/60) 100% (60/60) +bn Bengali (0/63) (0/63) (0/63) +bo Tibetan (0/95) (0/95) (0/95) +br Breton 100% (64/64) 100% (64/64) 100% (64/64) +brx Bodo (Devanagari script) (0/82) (0/82) (0/82) +bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62) +bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70) +byn Blin/Bilin (0/255) (0/255) (0/255) +ca Catalan 100% (74/74) 100% (74/74) 100% (74/74) +ce Chechen 100% (67/67) 100% (67/67) 100% (67/67) +ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58) +chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 100% (76/76) +chr Cherokee (0/85) (0/85) (0/85) +co Corsican 100% (84/84) 100% (84/84) 100% (84/84) +crh Crimean Tatar/Crimean Turkish 100% (68/68) 100% (68/68) 100% (68/68) +cs Czech 100% (82/82) 100% (82/82) 100% (82/82) +csb Kashubian 100% (74/74) 100% (74/74) 100% (74/74) +cu Old Church Slavonic 100% (103/103) 90% (93/103) 78% (81/103) +cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74) +cy Welsh 100% (78/78) 100% (78/78) 100% (78/78) +da Danish 100% (70/70) 100% (70/70) 100% (70/70) +de German 100% (59/59) 100% (59/59) 100% (59/59) +doi Dogri (0/85) (0/85) (0/85) +dv Divehi/Dhivehi/Maldivian (0/49) (0/49) (0/49) +dz Dzongkha (0/95) (0/95) (0/95) +ee Ewe 100% (99/99) 100% (99/99) 100% (99/99) +el Greek 100% (69/69) 100% (69/69) 100% (69/69) +en English 100% (72/72) 100% (72/72) 100% (72/72) +eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64) +es Spanish 100% (66/66) 100% (66/66) 100% (66/66) +et Estonian 100% (64/64) 100% (64/64) 100% (64/64) +eu Basque 100% (56/56) 100% (56/56) 100% (56/56) +fa Persian 100% (40/40) (0/40) 100% (40/40) +fat Fanti 100% (73/73) 100% (73/73) 100% (73/73) +ff Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62) +fi Finnish 100% (62/62) 100% (62/62) 100% (62/62) +fil Filipino 100% (84/84) 100% (84/84) 100% (84/84) +fj Fijian 100% (52/52) 100% (52/52) 100% (52/52) +fo Faroese 100% (68/68) 100% (68/68) 100% (68/68) +fr French 100% (84/84) 100% (84/84) 100% (84/84) +fur Friulian 100% (66/66) 100% (66/66) 100% (66/66) +fy Frisian 100% (75/75) 100% (75/75) 100% (75/75) +ga Irish 100% (80/80) 100% (80/80) 100% (80/80) +gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70) +gez Ethiopic (Geez) (0/218) (0/218) (0/218) +gl Galician 100% (66/66) 100% (66/66) 100% (66/66) +gn Guarani 100% (70/70) 100% (70/70) 100% (70/70) +gu Gujarati (0/68) (0/68) (0/68) +gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54) +ha Hausa 100% (60/60) 100% (60/60) 100% (60/60) +haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63) +he Hebrew 100% (27/27) (0/27) (0/27) +hi Hindi (Devanagari script) (0/68) (0/68) (0/68) +hne Chhattisgarhi (0/68) (0/68) (0/68) +ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52) +hr Croatian 100% (62/62) 100% (62/62) 100% (62/62) +hsb Upper Sorbian 100% (72/72) 100% (72/72) 100% (72/72) +ht Haitian/Haitian Creole 100% (56/56) 100% (56/56) 100% (56/56) +hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70) +hy Armenian 100% (77/77) 100% (77/77) 100% (77/77) +hz Herero 100% (57/57) 100% (57/57) 100% (57/57) +ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52) +id Indonesian 100% (54/54) 100% (54/54) 100% (54/54) +ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52) +ig Igbo 100% (58/58) 100% (58/58) 100% (58/58) +ii Sichuan Yi/Nuosu (0/1165) (0/1165) (0/1165) +ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68) +io Ido 100% (52/52) 100% (52/52) 100% (52/52) +is Icelandic 100% (70/70) 100% (70/70) 100% (70/70) +it Italian 100% (72/72) 100% (72/72) 100% (72/72) +iu Inuktitut 100% (161/161) (0/161) (0/161) +ja Japanese (0/6537) (0/6537) (0/6537) +jv Javanese 100% (56/56) 100% (56/56) 100% (56/56) +ka Georgian 100% (33/33) 100% (33/33) 100% (33/33) +kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78) +kab Kabyle 100% (70/70) 100% (70/70) 100% (70/70) +ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56) +kj Kuanyama/Kwanyama 100% (52/52) 100% (52/52) 100% (52/52) +kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77) +kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81) +km Central Khmer (0/63) (0/63) (0/63) +kn Kannada (0/70) (0/70) (0/70) +ko Korean (0/2443) (0/2443) (0/2443) +kok Kokani (Devanagari script) (0/68) (0/68) (0/68) +kr Kanuri 100% (56/56) 100% (56/56) 100% (56/56) +ks Kashmiri 78% (26/33) (0/33) 69% (23/33) +ku-am Kurdish in Armenia 100% (64/64) 100% (64/64) 100% (64/64) +ku-iq Kurdish in Iraq 100% (32/32) (0/32) 87% (28/32) +ku-ir Kurdish in Iran 100% (32/32) (0/32) 87% (28/32) +ku-tr Kurdish in Turkey 100% (62/62) 100% (62/62) 100% (62/62) +kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66) +kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70) +kw Cornish 100% (64/64) 100% (64/64) 100% (64/64) +kwm Kwambi 100% (52/52) 100% (52/52) 100% (52/52) +ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70) +la Latin 100% (68/68) 100% (68/68) 100% (68/68) +lah Lahnda 92% (25/27) (0/27) 85% (23/27) +lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75) +lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67) +lg Ganda 100% (54/54) 100% (54/54) 100% (54/54) +li Limburgan/Limburger/Limburgish 100% (62/62) 100% (62/62) 100% (62/62) +ln Lingala 100% (81/81) 100% (81/81) 100% (81/81) +lo Lao 100% (55/55) (0/55) 83% (46/55) +lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70) +lv Latvian 100% (78/78) 100% (78/78) 100% (78/78) +mai Maithili (Devanagari script) (0/68) (0/68) (0/68) +mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56) +mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62) +mi Maori 100% (64/64) 100% (64/64) 100% (64/64) +mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42) +ml Malayalam (0/68) (0/68) (0/68) +mn-cn Mongolian in China (0/130) (0/130) (0/130) +mn-mn Mongolian in Mongolia 100% (70/70) 100% (70/70) 100% (70/70) +mni Maniputi (0/78) (0/78) (0/78) +mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128) +mr Marathi (Devanagari script) (0/68) (0/68) (0/68) +ms Malay 100% (52/52) 100% (52/52) 100% (52/52) +mt Maltese 100% (72/72) 100% (72/72) 100% (72/72) +my Burmese (Myanmar) (0/48) (0/48) (0/48) +na Nauru 100% (60/60) 100% (60/60) 100% (60/60) +nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70) +nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59) +ne Nepali (0/72) (0/72) (0/72) +ng Ndonga 100% (52/52) 100% (52/52) 100% (52/52) +nl Dutch 100% (82/82) 100% (82/82) 100% (82/82) +nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76) +no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70) +nqo N'Ko 91% (54/59) (0/59) (0/59) +nr Ndebele, South 100% (52/52) 100% (52/52) 100% (52/52) +nso Northern Sotho 100% (58/58) 100% (58/58) 100% (58/58) +nv Navajo/Navaho 100% (72/72) 100% (72/72) 100% (72/72) +ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54) +oc Occitan 100% (70/70) 100% (70/70) 100% (70/70) +om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52) +or Oriya (0/68) (0/68) (0/68) +os Ossetic 100% (66/66) 100% (66/66) 100% (66/66) +ota Ottoman Turkish 100% (37/37) (0/37) 97% (36/37) +pa Panjabi/Punjabi (0/63) (0/63) (0/63) +pa-pk Panjabi/Punjabi in Pakistan 92% (25/27) (0/27) 85% (23/27) +pap-an Papiamento in Netherlands Antilles 100% (72/72) 100% (72/72) 100% (72/72) +pap-aw Papiamento in Aruba 100% (54/54) 100% (54/54) 100% (54/54) +pes Western Farsi 100% (40/40) (0/40) 100% (40/40) +pl Polish 100% (70/70) 100% (70/70) 100% (70/70) +prs Dari/Eastern Farsi 100% (40/40) (0/40) 100% (40/40) +ps-af Pashto in Afghanistan 95% (47/49) (0/49) 77% (38/49) +ps-pk Pashto in Pakistan 93% (46/49) (0/49) 75% (37/49) +pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82) +qu Quechua 100% (55/55) 100% (55/55) 100% (55/55) +rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66) +rn Rundi 100% (52/52) 100% (52/52) 100% (52/52) +ro Romanian 100% (62/62) 100% (62/62) 100% (62/62) +ru Russian 100% (66/66) 100% (66/66) 100% (66/66) +rw Kinyarwanda 100% (52/52) 100% (52/52) 100% (52/52) +sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68) +sah Yakut 100% (76/76) 100% (76/76) 100% (76/76) +sat Santali (Devanagari script) (0/70) (0/70) (0/70) +sc Sardinian 100% (62/62) 100% (62/62) 100% (62/62) +sco Scots 100% (56/56) 100% (56/56) 100% (56/56) +sd Sindhi 100% (54/54) (0/54) 79% (43/54) +se North Sami 100% (66/66) 100% (66/66) 100% (66/66) +sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66) +sg Sango 100% (72/72) 100% (72/72) 100% (72/72) +sh Serbo-Croatian 100% (156/156) 100% (156/156) 98% (154/156) +shs Secwepemctsin 100% (48/48) 100% (48/48) 100% (48/48) +si Sinhala/Sinhalese (0/73) (0/73) (0/73) +sid Sidamo (0/281) (0/281) (0/281) +sk Slovak 100% (86/86) 100% (86/86) 100% (86/86) +sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62) +sm Samoan 100% (53/53) 100% (53/53) 100% (53/53) +sma South Sami 100% (60/60) 100% (60/60) 100% (60/60) +smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60) +smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68) +sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80) +sn Shona 100% (52/52) 100% (52/52) 100% (52/52) +so Somali 100% (52/52) 100% (52/52) 100% (52/52) +sq Albanian 100% (56/56) 100% (56/56) 100% (56/56) +sr Serbian 100% (60/60) 100% (60/60) 100% (60/60) +ss Swati 100% (52/52) 100% (52/52) 100% (52/52) +st Sotho, Southern 100% (52/52) 100% (52/52) 100% (52/52) +su Sundanese 100% (54/54) 100% (54/54) 100% (54/54) +sv Swedish 100% (68/68) 100% (68/68) 100% (68/68) +sw Swahili 100% (52/52) 100% (52/52) 100% (52/52) +syr Syriac (0/45) (0/45) (0/45) +ta Tamil (0/48) (0/48) (0/48) +te Telugu (0/70) (0/70) (0/70) +tg Tajik 100% (78/78) 100% (78/78) 97% (76/78) +th Thai 1% (1/74) (0/74) (0/74) +ti-er Eritrean Tigrinya (0/255) (0/255) (0/255) +ti-et Ethiopian Tigrinya (0/281) (0/281) (0/281) +tig Tigre (0/221) (0/221) (0/221) +tk Turkmen 100% (68/68) 100% (68/68) 100% (68/68) +tl Tagalog 100% (84/84) 100% (84/84) 100% (84/84) +tn Tswana 100% (58/58) 100% (58/58) 100% (58/58) +to Tonga 100% (53/53) 100% (53/53) 100% (53/53) +tr Turkish 100% (70/70) 100% (70/70) 100% (70/70) +ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52) +tt Tatar 100% (76/76) 100% (76/76) 100% (76/76) +tw Twi 100% (73/73) 100% (73/73) 100% (73/73) +ty Tahitian 100% (65/65) 100% (65/65) 100% (65/65) +tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70) +ug Uyghur 87% (29/33) (0/33) 78% (26/33) +uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72) +ur Urdu 92% (25/27) (0/27) 85% (23/27) +uz Uzbek 100% (52/52) 100% (52/52) 100% (52/52) +ve Venda 100% (62/62) 100% (62/62) 100% (62/62) +vi Vietnamese 100% (194/194) 100% (194/194) 76% (148/194) +vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54) +vot Votic 100% (62/62) 100% (62/62) 100% (62/62) +wa Walloon 100% (70/70) 100% (70/70) 100% (70/70) +wal Wolaitta/Wolaytta (0/281) (0/281) (0/281) +wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76) +wo Wolof 100% (66/66) 100% (66/66) 100% (66/66) +xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52) +yap Yapese 100% (58/58) 100% (58/58) 100% (58/58) +yi Yiddish 100% (27/27) (0/27) (0/27) +yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119) +za Zhuang/Chuang 100% (52/52) 100% (52/52) 100% (52/52) +zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-hk Chinese Hong Kong Supplementary Character Set (0/2213) (0/2213) (0/2213) +zh-mo Chinese in Macau (0/2213) (0/2213) (0/2213) +zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765) +zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063) +zu Zulu 100% (52/52) 100% (52/52) 100% (52/52) diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/status.txt b/tcpdf/fonts/dejavu-fonts-ttf-2.34/status.txt new file mode 100644 index 0000000..cb94ab9 --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/status.txt @@ -0,0 +1,6766 @@ +This is the status file for DejaVu fonts +($Id: status.txt 2475 2011-02-27 14:51:17Z ben_laenen $) + +original = present in original Bitstream Vera 1.10 +<version> = added in DejaVu fonts <version> + +U+0020 space original +U+0021 exclam original +U+0022 quotedbl original +U+0023 numbersign original +U+0024 dollar original +U+0025 percent original +U+0026 ampersand original +U+0027 quotesingle original +U+0028 parenleft original +U+0029 parenright original +U+002a asterisk original +U+002b plus original +U+002c comma original +U+002d hyphen original +U+002e period original +U+002f slash original +U+0030 zero original +U+0031 one original +U+0032 two original +U+0033 three original +U+0034 four original +U+0035 five original +U+0036 six original +U+0037 seven original +U+0038 eight original +U+0039 nine original +U+003a colon original +U+003b semicolon original +U+003c less original +U+003d equal original +U+003e greater original +U+003f question original +U+0040 at original +U+0041 A original +U+0042 B original +U+0043 C original +U+0044 D original +U+0045 E original +U+0046 F original +U+0047 G original +U+0048 H original +U+0049 I original +U+004a J original +U+004b K original +U+004c L original +U+004d M original +U+004e N original +U+004f O original +U+0050 P original +U+0051 Q original +U+0052 R original +U+0053 S original +U+0054 T original +U+0055 U original +U+0056 V original +U+0057 W original +U+0058 X original +U+0059 Y original +U+005a Z original +U+005b bracketleft original +U+005c backslash original +U+005d bracketright original +U+005e asciicircum original +U+005f underscore original +U+0060 grave original +U+0061 a original +U+0062 b original +U+0063 c original +U+0064 d original +U+0065 e original +U+0066 f original +U+0067 g original +U+0068 h original +U+0069 i original +U+006a j original +U+006b k original +U+006c l original +U+006d m original +U+006e n original +U+006f o original +U+0070 p original +U+0071 q original +U+0072 r original +U+0073 s original +U+0074 t original +U+0075 u original +U+0076 v original +U+0077 w original +U+0078 x original +U+0079 y original +U+007a z original +U+007b braceleft original +U+007c bar original +U+007d braceright original +U+007e asciitilde original +U+00a0 nonbreakingspace original +U+00a1 exclamdown original +U+00a2 cent original +U+00a3 sterling original +U+00a4 currency original +U+00a5 yen original +U+00a6 brokenbar original +U+00a7 section original +U+00a8 dieresis original +U+00a9 copyright original +U+00aa ordfeminine original +U+00ab guillemotleft original +U+00ac logicalnot original +U+00ad sfthyphen original +U+00ae registered original +U+00af macron original +U+00b0 degree original +U+00b1 plusminus original +U+00b2 twosuperior original +U+00b3 threesuperior original +U+00b4 acute original +U+00b5 mu original +U+00b6 paragraph original +U+00b7 periodcentered original +U+00b8 cedilla original +U+00b9 onesuperior original +U+00ba ordmasculine original +U+00bb guillemotright original +U+00bc onequarter original +U+00bd onehalf original +U+00be threequarters original +U+00bf questiondown original +U+00c0 Agrave original +U+00c1 Aacute original +U+00c2 Acircumflex original +U+00c3 Atilde original +U+00c4 Adieresis original +U+00c5 Aring original +U+00c6 AE original +U+00c7 Ccedilla original +U+00c8 Egrave original +U+00c9 Eacute original +U+00ca Ecircumflex original +U+00cb Edieresis original +U+00cc Igrave original +U+00cd Iacute original +U+00ce Icircumflex original +U+00cf Idieresis original +U+00d0 Eth original +U+00d1 Ntilde original +U+00d2 Ograve original +U+00d3 Oacute original +U+00d4 Ocircumflex original +U+00d5 Otilde original +U+00d6 Odieresis original +U+00d7 multiply original +U+00d8 Oslash original +U+00d9 Ugrave original +U+00da Uacute original +U+00db Ucircumflex original +U+00dc Udieresis original +U+00dd Yacute original +U+00de Thorn original +U+00df germandbls original +U+00e0 agrave original +U+00e1 aacute original +U+00e2 acircumflex original +U+00e3 atilde original +U+00e4 adieresis original +U+00e5 aring original +U+00e6 ae original +U+00e7 ccedilla original +U+00e8 egrave original +U+00e9 eacute original +U+00ea ecircumflex original +U+00eb edieresis original +U+00ec igrave original +U+00ed iacute original +U+00ee icircumflex original +U+00ef idieresis original +U+00f0 eth original +U+00f1 ntilde original +U+00f2 ograve original +U+00f3 oacute original +U+00f4 ocircumflex original +U+00f5 otilde original +U+00f6 odieresis original +U+00f7 divide original +U+00f8 oslash original +U+00f9 ugrave original +U+00fa uacute original +U+00fb ucircumflex original +U+00fc udieresis original +U+00fd yacute original +U+00fe thorn original +U+00ff ydieresis original +U+0100 Amacron 1.5 +U+0101 amacron 1.5 +U+0102 Abreve 1.5 +U+0103 abreve 1.5 +U+0104 Aogonek 1.4 +U+0105 aogonek 1.4 +U+0106 Cacute original +U+0107 cacute original +U+0108 Ccircumflex 1.5 +U+0109 ccircumflex 1.5 +U+010a Cdotaccent 1.5 +U+010b cdotaccent 1.5 +U+010c Ccaron original +U+010d ccaron original +U+010e Dcaron 1.0 +U+010f dcaron 1.0 +U+0110 Dcroat 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0111 dcroat original +U+0112 Emacron 1.5 +U+0113 emacron 1.5 +U+0114 Ebreve 1.5 +U+0115 ebreve 1.5 +U+0116 Edotaccent 1.5 +U+0117 edotaccent 1.5 +U+0118 Eogonek 1.4 +U+0119 eogonek 1.4 +U+011a Ecaron 1.0 +U+011b ecaron 1.0 +U+011c Gcircumflex 1.5 +U+011d gcircumflex 1.5 +U+011e Gbreve original +U+011f gbreve original +U+0120 Gdotaccent 1.5 +U+0121 gdotaccent 1.5 +U+0122 Gcommaaccent 1.11 +U+0123 gcommaaccent 1.11 +U+0124 Hcircumflex 1.5 +U+0125 hcircumflex 1.5 +U+0126 Hbar 1.12 +U+0127 hbar 1.12 +U+0128 Itilde 1.5 +U+0129 itilde 1.5 +U+012a Imacron 1.5 +U+012b imacron 1.5 +U+012c Ibreve 1.5 +U+012d ibreve 1.5 +U+012e Iogonek 1.11 +U+012f iogonek 1.11 +U+0130 Idotaccent original +U+0131 dotlessi original +U+0132 IJ 1.11 +U+0133 ij 1.11 +U+0134 Jcircumflex 1.5 +U+0135 jcircumflex 1.5 +U+0136 Kcommaaccent 1.11 +U+0137 kcommaaccent 1.11 +U+0138 kgreenlandic 1.12 +U+0139 Lacute 1.1 +U+013a lacute 1.1 +U+013b Lcommaaccent 1.11 +U+013c lcommaaccent 1.11 +U+013d Lcaron 1.1 +U+013e lcaron 1.1 +U+013f Ldot 1.2 +U+0140 ldot 1.2 +U+0141 Lslash original +U+0142 lslash original +U+0143 Nacute 1.4 +U+0144 nacute 1.4 +U+0145 Ncommaaccent 1.11 +U+0146 ncommaaccent 1.11 +U+0147 Ncaron 1.0 +U+0148 ncaron 1.0 +U+0149 napostrophe 1.12 +U+014a Eng 1.12 +U+014b eng 1.12 +U+014c Omacron 1.5 +U+014d omacron 1.5 +U+014e Obreve 1.5 +U+014f obreve 1.5 +U+0150 Ohungarumlaut 1.5 +U+0151 ohungarumlaut 1.5 +U+0152 OE original +U+0153 oe original +U+0154 Racute 1.1 +U+0155 racute 1.1 +U+0156 Rcommaaccent 1.11 +U+0157 rcommaaccent 1.11 +U+0158 Rcaron 1.0 +U+0159 rcaron 1.0 +U+015a Sacute 1.4 +U+015b sacute 1.4 +U+015c Scircumflex 1.5 +U+015d scircumflex 1.5 +U+015e Scedilla original +U+015f scedilla original +U+0160 Scaron original +U+0161 scaron original +U+0162 Tcommaaccent 1.5 +U+0163 tcommaaccent 1.5 +U+0164 Tcaron 1.0 +U+0165 tcaron 1.0 +U+0166 Tbar 1.12 +U+0167 tbar 1.12 +U+0168 Utilde 1.5 +U+0169 utilde 1.5 +U+016a Umacron 1.5 +U+016b umacron 1.5 +U+016c Ubreve 1.5 +U+016d ubreve 1.5 +U+016e Uring 1.0 +U+016f uring 1.0 +U+0170 Uhungarumlaut 1.5 +U+0171 uhungarumlaut 1.5 +U+0172 Uogonek 1.11 +U+0173 uogonek 1.11 +U+0174 Wcircumflex 1.2 +U+0175 wcircumflex 1.2 +U+0176 Ycircumflex 1.2 +U+0177 ycircumflex 1.2 +U+0178 Ydieresis original +U+0179 Zacute 1.4 +U+017a zacute 1.4 +U+017b Zdotaccent 1.4 +U+017c zdotaccent 1.4 +U+017d Zcaron original +U+017e zcaron original +U+017f longs 1.12 +U+0180 uni0180 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0181 uni0181 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0182 uni0182 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0183 uni0183 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0184 uni0184 2.3 +U+0185 uni0185 2.3 +U+0186 uni0186 1.15 +U+0187 uni0187 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0188 uni0188 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0189 uni0189 2.1 +U+018a uni018A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018b uni018B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018c uni018C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018d uni018D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018e uni018E 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+018f uni018F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0190 uni0190 1.15 +U+0191 uni0191 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0192 florin original +U+0193 uni0193 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0194 uni0194 1.14 +U+0195 uni0195 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0196 uni0196 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0197 uni0197 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0198 uni0198 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0199 uni0199 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019a uni019A 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019b uni019B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+019c uni019C 2.3 +U+019d uni019D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019e uni019E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+019f uni019F 2.3 +U+01a0 Ohorn 2.3 +U+01a1 ohorn 2.3 +U+01a2 uni01A2 2.3 +U+01a3 uni01A3 2.3 +U+01a4 uni01A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a5 uni01A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a6 uni01A6 2.3 +U+01a7 uni01A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a8 uni01A8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01a9 uni01A9 2.2 +U+01aa uni01AA 2.3 +U+01ab uni01AB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ac uni01AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ad uni01AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01ae uni01AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01af Uhorn 2.3 +U+01b0 uhorn 2.3 +U+01b1 uni01B1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b2 uni01B2 2.3 +U+01b3 uni01B3 2.3 +U+01b4 uni01B4 2.3 +U+01b5 uni01B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b6 uni01B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01b7 uni01B7 2.3 +U+01b8 uni01B8 2.3 +U+01b9 uni01B9 2.3 +U+01ba uni01BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01bb uni01BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01bc uni01BC 2.3 +U+01bd uni01BD 2.3 +U+01be uni01BE 2.3 +U+01bf uni01BF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01c0 uni01C0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c1 uni01C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c2 uni01C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+01c3 uni01C3 2.2 +U+01c4 uni01C4 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c5 uni01C5 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c6 uni01C6 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c7 uni01C7 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c8 uni01C8 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01c9 uni01C9 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01ca uni01CA 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cb uni01CB 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cc uni01CC 1.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01cd uni01CD 1.15 +U+01ce uni01CE 1.15 +U+01cf uni01CF 1.15 +U+01d0 uni01D0 1.15 +U+01d1 uni01D1 1.15 +U+01d2 uni01D2 1.15 +U+01d3 uni01D3 1.15 +U+01d4 uni01D4 1.15 +U+01d5 uni01D5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01d6 uni01D6 1.13 +U+01d7 uni01D7 2.3 +U+01d8 uni01D8 2.3 +U+01d9 uni01D9 2.3 +U+01da uni01DA 2.3 +U+01db uni01DB 2.3 +U+01dc uni01DC 2.3 +U+01dd uni01DD 2.2 +U+01de uni01DE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique) 2.23 (Serif Italic Condensed) +U+01df uni01DF 1.13 +U+01e0 uni01E0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e1 uni01E1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e2 uni01E2 1.5 +U+01e3 uni01E3 1.5 +U+01e4 uni01E4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e5 uni01E5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+01e6 Gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e7 gcaron 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e8 uni01E8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01e9 uni01E9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ea uni01EA 1.9 +U+01eb uni01EB 1.9 +U+01ec uni01EC 1.9 +U+01ed uni01ED 1.9 +U+01ee uni01EE 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ef uni01EF 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f0 uni01F0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono) 2.22 (Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+01f1 uni01F1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f2 uni01F2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f3 uni01F3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01f4 uni01F4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f5 uni01F5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f6 uni01F6 2.3 +U+01f7 uni01F7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+01f8 uni01F8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01f9 uni01F9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fa Aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fb aringacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+01fc AEacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fd aeacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01fe Oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+01ff oslashacute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0200 uni0200 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0201 uni0201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0202 uni0202 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0203 uni0203 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0204 uni0204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0205 uni0205 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0206 uni0206 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0207 uni0207 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0208 uni0208 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0209 uni0209 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020a uni020A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020b uni020B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020c uni020C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020d uni020D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020e uni020E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+020f uni020F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0210 uni0210 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0211 uni0211 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0212 uni0212 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0213 uni0213 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0214 uni0214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0215 uni0215 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0216 uni0216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0217 uni0217 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0218 Scommaaccent 1.5 +U+0219 scommaaccent 1.5 +U+021a uni021A 1.5 +U+021b uni021B 1.5 +U+021c uni021C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+021d uni021D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+021e uni021E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+021f uni021F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0220 uni0220 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.18 (Sans Mono, Sans Mono Bold) 2.23 (Serif Italic Condensed) +U+0221 uni0221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0222 uni0222 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0223 uni0223 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0224 uni0224 2.3 +U+0225 uni0225 2.3 +U+0226 uni0226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0227 uni0227 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0228 uni0228 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0229 uni0229 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022a uni022A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022b uni022B 1.13 +U+022c uni022C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+022d uni022D 1.13 +U+022e uni022E 1.10 +U+022f uni022F 1.10 +U+0230 uni0230 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0231 uni0231 1.13 +U+0232 uni0232 1.5 +U+0233 uni0233 1.5 +U+0234 uni0234 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0235 uni0235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0236 uni0236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0237 dotlessj 1.5 +U+0238 uni0238 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0239 uni0239 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+023a uni023A 2.3 +U+023b uni023B 2.3 +U+023c uni023C 2.3 +U+023d uni023D 2.3 +U+023e uni023E 2.3 +U+023f uni023F 2.3 +U+0240 uni0240 2.3 +U+0241 uni0241 2.3 +U+0242 uni0242 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+0243 uni0243 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0244 uni0244 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0245 uni0245 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0246 uni0246 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0247 uni0247 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0248 uni0248 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0249 uni0249 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024a uni024A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024b uni024B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024c uni024C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024d uni024D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024e uni024E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+024f uni024F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0250 uni0250 1.14 +U+0251 uni0251 1.14 +U+0252 uni0252 1.14 +U+0253 uni0253 1.14 +U+0254 uni0254 1.14 +U+0255 uni0255 1.14 +U+0256 uni0256 1.14 +U+0257 uni0257 1.14 +U+0258 uni0258 1.14 +U+0259 uni0259 1.14 +U+025a uni025A 1.14 +U+025b uni025B 1.14 +U+025c uni025C 1.14 +U+025d uni025D 1.14 +U+025e uni025E 1.14 +U+025f uni025F 1.14 +U+0260 uni0260 1.14 +U+0261 uni0261 1.14 +U+0262 uni0262 1.14 +U+0263 uni0263 1.14 +U+0264 uni0264 1.14 +U+0265 uni0265 1.14 +U+0266 uni0266 1.14 +U+0267 uni0267 1.14 +U+0268 uni0268 1.14 +U+0269 uni0269 1.14 +U+026a uni026A 1.14 +U+026b uni026B 1.14 +U+026c uni026C 1.14 +U+026d uni026D 1.14 +U+026e uni026E 1.14 +U+026f uni026F 1.14 +U+0270 uni0270 1.14 +U+0271 uni0271 1.14 +U+0272 uni0272 1.14 +U+0273 uni0273 1.14 +U+0274 uni0274 1.14 +U+0275 uni0275 1.14 +U+0276 uni0276 1.14 +U+0277 uni0277 1.14 +U+0278 uni0278 1.14 +U+0279 uni0279 1.14 +U+027a uni027A 1.14 +U+027b uni027B 1.14 +U+027c uni027C 1.14 +U+027d uni027D 1.14 +U+027e uni027E 1.14 +U+027f uni027F 1.14 +U+0280 uni0280 1.14 +U+0281 uni0281 1.14 +U+0282 uni0282 1.14 +U+0283 uni0283 1.14 +U+0284 uni0284 1.14 +U+0285 uni0285 1.14 +U+0286 uni0286 1.14 +U+0287 uni0287 1.14 +U+0288 uni0288 1.14 +U+0289 uni0289 1.14 +U+028a uni028A 1.14 +U+028b uni028B 1.14 +U+028c uni028C 1.14 +U+028d uni028D 1.14 +U+028e uni028E 1.14 +U+028f uni028F 1.14 +U+0290 uni0290 1.14 +U+0291 uni0291 1.14 +U+0292 uni0292 1.14 +U+0293 uni0293 1.14 +U+0294 uni0294 1.14 +U+0295 uni0295 1.14 +U+0296 uni0296 1.14 +U+0297 uni0297 1.14 +U+0298 uni0298 1.14 +U+0299 uni0299 1.14 +U+029a uni029A 1.14 +U+029b uni029B 1.14 +U+029c uni029C 1.14 +U+029d uni029D 1.14 +U+029e uni029E 1.14 +U+029f uni029F 1.14 +U+02a0 uni02A0 1.14 +U+02a1 uni02A1 1.14 +U+02a2 uni02A2 1.14 +U+02a3 uni02A3 1.14 +U+02a4 uni02A4 1.14 +U+02a5 uni02A5 1.14 +U+02a6 uni02A6 1.14 +U+02a7 uni02A7 1.14 +U+02a8 uni02A8 1.14 +U+02a9 uni02A9 1.14 +U+02aa uni02AA 1.14 +U+02ab uni02AB 1.14 +U+02ac uni02AC 1.14 +U+02ad uni02AD 1.14 +U+02ae uni02AE 1.14 +U+02af uni02AF 1.14 +U+02b0 uni02B0 1.14 +U+02b1 uni02B1 1.14 +U+02b2 uni02B2 1.14 +U+02b3 uni02B3 1.14 +U+02b4 uni02B4 1.14 +U+02b5 uni02B5 1.14 +U+02b6 uni02B6 1.14 +U+02b7 uni02B7 1.14 +U+02b8 uni02B8 1.14 +U+02b9 uni02B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+02ba uni02BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02bb uni02BB 1.5 +U+02bc uni02BC 1.12 +U+02bd uni02BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02be uni02BE 2.2 +U+02bf uni02BF 2.2 +U+02c0 uni02C0 1.14 +U+02c1 uni02C1 1.14 +U+02c2 uni02C2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c3 uni02C3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c4 uni02C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c5 uni02C5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02c6 circumflex original +U+02c7 caron original +U+02c8 uni02C8 2.0 +U+02c9 uni02C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+02ca uni02CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02cb uni02CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02cc uni02CC 2.0 +U+02cd uni02CD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02ce uni02CE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02cf uni02CF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02d0 uni02D0 1.14 +U+02d1 uni02D1 1.14 +U+02d2 uni02D2 2.0 +U+02d3 uni02D3 2.2 +U+02d4 uni02D4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d5 uni02D5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02d6 uni02D6 2.0 +U+02d7 uni02D7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02d8 breve original +U+02d9 dotaccent original +U+02da ring original +U+02db ogonek original +U+02dc tilde original +U+02dd hungarumlaut original +U+02de uni02DE 2.0 +U+02df uni02DF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02e0 uni02E0 1.14 +U+02e1 uni02E1 1.14 +U+02e2 uni02E2 1.14 +U+02e3 uni02E3 1.14 +U+02e4 uni02E4 1.14 +U+02e5 uni02E5 2.0 +U+02e6 uni02E6 2.0 +U+02e7 uni02E7 2.0 +U+02e8 uni02E8 2.0 +U+02e9 uni02E9 2.0 +U+02ec uni02EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02ed uni02ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+02ee uni02EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+02ef uni02EF 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02f0 uni02F0 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02f3 uni02F3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+02f7 uni02F7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0300 gravecomb 1.15 +U+0301 acutecomb 1.15 +U+0302 uni0302 1.15 +U+0303 tildecomb 1.15 +U+0304 uni0304 1.15 +U+0305 uni0305 2.0 +U+0306 uni0306 1.15 +U+0307 uni0307 1.15 +U+0308 uni0308 1.15 +U+0309 hookabovecomb 2.1 +U+030a uni030A 1.15 +U+030b uni030B 1.15 +U+030c uni030C 1.15 +U+030d uni030D 2.0 +U+030e uni030E 2.0 +U+030f uni030F 2.0 +U+0310 uni0310 2.0 +U+0311 uni0311 2.0 +U+0312 uni0312 1.11 +U+0313 uni0313 2.1 +U+0314 uni0314 2.1 +U+0315 uni0315 2.0 +U+0316 uni0316 2.0 +U+0317 uni0317 2.0 +U+0318 uni0318 2.0 +U+0319 uni0319 2.0 +U+031a uni031A 2.1 +U+031b uni031B 2.1 +U+031c uni031C 2.0 +U+031d uni031D 2.0 +U+031e uni031E 2.0 +U+031f uni031F 2.0 +U+0320 uni0320 2.0 +U+0321 uni0321 1.15 +U+0322 uni0322 1.15 +U+0323 dotbelowcomb 2.1 +U+0324 uni0324 2.0 +U+0325 uni0325 2.0 +U+0326 uni0326 1.5 +U+0327 uni0327 2.1 +U+0328 uni0328 2.1 +U+0329 uni0329 2.0 +U+032a uni032A 2.0 +U+032b uni032B 2.1 +U+032c uni032C 2.0 +U+032d uni032D 2.0 +U+032e uni032E 2.0 +U+032f uni032F 2.0 +U+0330 uni0330 2.0 +U+0331 uni0331 2.0 +U+0332 uni0332 2.0 +U+0333 uni0333 2.1 +U+0334 uni0334 2.3 +U+0335 uni0335 2.3 +U+0336 uni0336 2.3 +U+0337 uni0337 2.3 +U+0338 uni0338 2.3 +U+0339 uni0339 2.0 +U+033a uni033A 2.0 +U+033b uni033B 2.0 +U+033c uni033C 2.1 +U+033d uni033D 2.0 +U+033e uni033E 2.1 +U+033f uni033F 2.1 +U+0340 uni0340 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0341 uni0341 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0342 uni0342 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0343 uni0343 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0344 uni0344 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0345 uni0345 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0346 uni0346 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0347 uni0347 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0348 uni0348 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0349 uni0349 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034a uni034A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034b uni034B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034c uni034C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034d uni034D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034e uni034E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+034f uni034F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0351 uni0351 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0352 uni0352 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.28 (Sans Condensed Oblique, Sans Oblique) +U+0353 uni0353 2.5 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0357 uni0357 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0358 uni0358 2.3 +U+035a uni035A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035c uni035C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035d uni035D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+035e uni035E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+035f uni035F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0360 uni0360 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0361 uni0361 2.0 +U+0362 uni0362 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0370 uni0370 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0371 uni0371 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0372 uni0372 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0373 uni0373 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0374 uni0374 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0375 uni0375 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0376 uni0376 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0377 uni0377 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+037a uni037A 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+037b uni037B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+037c uni037C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+037d uni037D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+037e uni037E 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0384 tonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0385 dieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0386 Alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0387 anoteleia 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0388 Epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0389 Etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038a Iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038c Omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038e Upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+038f Omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0390 iotadieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0391 Alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0392 Beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0393 Gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0394 uni0394 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0395 Epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0396 Zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0397 Eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0398 Theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0399 Iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039a Kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039b Lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039c Mu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039d Nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039e Xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+039f Omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a0 Pi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a1 Rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a3 Sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a4 Tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a5 Upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a6 Phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a7 Chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a8 Psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03a9 Omega original +U+03aa Iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ab Upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.1 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ac alphatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ad epsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ae etatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03af iotatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b0 upsilondieresistonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b1 alpha 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b2 beta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b3 gamma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b4 delta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b5 epsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b6 zeta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b7 eta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b8 theta 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03b9 iota 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ba kappa 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bb lambda 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bc uni03BC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bd nu 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03be xi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03bf omicron 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c0 pi original +U+03c1 rho 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c2 sigma1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c3 sigma 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c4 tau 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c5 upsilon 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c6 phi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c7 chi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c8 psi 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03c9 omega 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ca iotadieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cb upsilondieresis 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cc omicrontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cd upsilontonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ce omegatonos 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 1.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.2 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03cf uni03CF 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+03d0 uni03D0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d1 theta1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d2 Upsilon1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d3 uni03D3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d4 uni03D4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d5 phi1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03d6 omega1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03d7 uni03D7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03d8 uni03D8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03d9 uni03D9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03da uni03DA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03db uni03DB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03dc uni03DC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03dd uni03DD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03de uni03DE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03df uni03DF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e0 uni03E0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e1 uni03E1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03e2 uni03E2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e3 uni03E3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e4 uni03E4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e5 uni03E5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e6 uni03E6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e7 uni03E7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e8 uni03E8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03e9 uni03E9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ea uni03EA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03eb uni03EB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ec uni03EC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ed uni03ED 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ee uni03EE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03ef uni03EF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+03f0 uni03F0 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03f1 uni03F1 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03f2 uni03F2 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f3 uni03F3 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f4 uni03F4 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f5 uni03F5 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f6 uni03F6 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f7 uni03F7 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f8 uni03F8 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03f9 uni03F9 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fa uni03FA 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fb uni03FB 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+03fc uni03FC 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+03fd uni03FD 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03fe uni03FE 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+03ff uni03FF 1.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.0 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0400 uni0400 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0401 uni0401 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0402 uni0402 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0403 uni0403 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0404 uni0404 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0405 uni0405 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0406 uni0406 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0407 uni0407 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0408 uni0408 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0409 uni0409 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040a uni040A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040b uni040B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040c uni040C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040d uni040D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040e uni040E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+040f uni040F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0410 uni0410 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0411 uni0411 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0412 uni0412 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0413 uni0413 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0414 uni0414 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0415 uni0415 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0416 uni0416 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0417 uni0417 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0418 uni0418 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0419 uni0419 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041a uni041A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041b uni041B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041c uni041C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041d uni041D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041e uni041E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+041f uni041F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0420 uni0420 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0421 uni0421 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0422 uni0422 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0423 uni0423 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0424 uni0424 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0425 uni0425 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0426 uni0426 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0427 uni0427 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0428 uni0428 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0429 uni0429 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042a uni042A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042b uni042B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042c uni042C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042d uni042D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042e uni042E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+042f uni042F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0430 uni0430 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0431 uni0431 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0432 uni0432 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0433 uni0433 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0434 uni0434 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0435 uni0435 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0436 uni0436 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0437 uni0437 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0438 uni0438 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0439 uni0439 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043a uni043A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043b uni043B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043c uni043C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043d uni043D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043e uni043E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+043f uni043F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0440 uni0440 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0441 uni0441 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0442 uni0442 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0443 uni0443 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0444 uni0444 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0445 uni0445 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0446 uni0446 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0447 uni0447 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0448 uni0448 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0449 uni0449 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044a uni044A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044b uni044B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044c uni044C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044d uni044D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044e uni044E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+044f uni044F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0450 uni0450 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0451 uni0451 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0452 uni0452 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0453 uni0453 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0454 uni0454 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0455 uni0455 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0456 uni0456 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0457 uni0457 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0458 uni0458 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0459 uni0459 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045a uni045A 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045b uni045B 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045c uni045C 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045d uni045D 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045e uni045E 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+045f uni045F 1.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 1.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold) 1.6 (Serif Bold Italic, Serif Italic) 1.7 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+0460 uni0460 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0461 uni0461 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) +U+0462 uni0462 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0463 uni0463 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0464 uni0464 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0465 uni0465 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0466 uni0466 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0467 uni0467 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0468 uni0468 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0469 uni0469 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046a uni046A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046b uni046B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.21 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+046c uni046C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+046d uni046D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+046e uni046E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+046f uni046F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0470 uni0470 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0471 uni0471 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0472 uni0472 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0473 uni0473 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0474 uni0474 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0475 uni0475 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.12 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0476 uni0476 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0477 uni0477 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0478 uni0478 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0479 uni0479 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047a uni047A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047b uni047B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047c uni047C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047d uni047D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047e uni047E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+047f uni047F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0480 uni0480 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0481 uni0481 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0482 uni0482 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0483 uni0483 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0484 uni0484 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0485 uni0485 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0486 uni0486 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0487 uni0487 2.9 (Sans, Sans Condensed) 2.27 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0488 uni0488 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0489 uni0489 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048a uni048A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048b uni048B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048c uni048C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048d uni048D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+048e uni048E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+048f uni048F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0490 uni0490 1.15 +U+0491 uni0491 1.15 +U+0492 uni0492 1.14 +U+0493 uni0493 1.14 +U+0494 uni0494 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0495 uni0495 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+0496 uni0496 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0497 uni0497 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.15 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0498 uni0498 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+0499 uni0499 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049a uni049A 1.14 +U+049b uni049B 1.14 +U+049c uni049C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049d uni049D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+049e uni049E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+049f uni049F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a0 uni04A0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a1 uni04A1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04a2 uni04A2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a3 uni04A3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a4 uni04A4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04a5 uni04A5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+04a6 uni04A6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a7 uni04A7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04a8 uni04A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04a9 uni04A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04aa uni04AA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ab uni04AB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ac uni04AC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ad uni04AD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04ae uni04AE 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04af uni04AF 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b0 uni04B0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+04b1 uni04B1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+04b2 uni04B2 1.14 +U+04b3 uni04B3 1.14 +U+04b4 uni04B4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b5 uni04B5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04b6 uni04B6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b7 uni04B7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04b8 uni04B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04b9 uni04B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ba uni04BA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04bb uni04BB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04bc uni04BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bd uni04BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04be uni04BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04bf uni04BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c0 uni04C0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04c1 uni04C1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c2 uni04C2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04c3 uni04C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c4 uni04C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04c5 uni04C5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c6 uni04C6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04c7 uni04C7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c8 uni04C8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+04c9 uni04C9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ca uni04CA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cb uni04CB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cc uni04CC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04cd uni04CD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04ce uni04CE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04cf uni04CF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d0 uni04D0 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d1 uni04D1 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d2 uni04D2 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d3 uni04D3 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d4 uni04D4 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d5 uni04D5 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d6 uni04D6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d7 uni04D7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04d8 uni04D8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04d9 uni04D9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04da uni04DA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04db uni04DB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04dc uni04DC 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04dd uni04DD 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04de uni04DE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04df uni04DF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e0 uni04E0 2.3 +U+04e1 uni04E1 2.3 +U+04e2 uni04E2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e3 uni04E3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e4 uni04E4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e5 uni04E5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04e6 uni04E6 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e7 uni04E7 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04e8 uni04E8 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04e9 uni04E9 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ea uni04EA 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04eb uni04EB 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+04ec uni04EC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ed uni04ED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ee uni04EE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04ef uni04EF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f0 uni04F0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f1 uni04F1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f2 uni04F2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f3 uni04F3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f4 uni04F4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f5 uni04F5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04f6 uni04F6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f7 uni04F7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f8 uni04F8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+04f9 uni04F9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+04fa uni04FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fb uni04FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fc uni04FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fd uni04FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+04fe uni04FE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+04ff uni04FF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0500 uni0500 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0501 uni0501 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) +U+0502 uni0502 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0503 uni0503 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0504 uni0504 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0505 uni0505 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0506 uni0506 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0507 uni0507 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0508 uni0508 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0509 uni0509 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050a uni050A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050b uni050B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050c uni050C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050d uni050D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050e uni050E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+050f uni050F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0510 uni0510 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0511 uni0511 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0512 uni0512 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0513 uni0513 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0514 uni0514 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0515 uni0515 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+0516 uni0516 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0517 uni0517 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0518 uni0518 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0519 uni0519 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+051a uni051A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051b uni051B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051c uni051C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051d uni051D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+051e uni051E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+051f uni051F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0520 uni0520 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0521 uni0521 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0522 uni0522 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0523 uni0523 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0524 uni0524 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0525 uni0525 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0531 uni0531 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0532 uni0532 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0533 uni0533 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0534 uni0534 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0535 uni0535 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0536 uni0536 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0537 uni0537 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0538 uni0538 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0539 uni0539 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053a uni053A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053b uni053B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053c uni053C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053d uni053D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053e uni053E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+053f uni053F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0540 uni0540 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0541 uni0541 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0542 uni0542 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0543 uni0543 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0544 uni0544 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0545 uni0545 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0546 uni0546 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0547 uni0547 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0548 uni0548 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0549 uni0549 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054a uni054A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054b uni054B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054c uni054C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054d uni054D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054e uni054E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+054f uni054F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0550 uni0550 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0551 uni0551 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0552 uni0552 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0553 uni0553 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0554 uni0554 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0555 uni0555 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0556 uni0556 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0559 uni0559 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055a uni055A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055b uni055B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055c uni055C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055d uni055D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055e uni055E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+055f uni055F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0561 uni0561 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0562 uni0562 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0563 uni0563 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0564 uni0564 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0565 uni0565 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0566 uni0566 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0567 uni0567 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0568 uni0568 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0569 uni0569 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056a uni056A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056b uni056B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056c uni056C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056d uni056D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056e uni056E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+056f uni056F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0570 uni0570 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0571 uni0571 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0572 uni0572 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0573 uni0573 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0574 uni0574 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0575 uni0575 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0576 uni0576 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0577 uni0577 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0578 uni0578 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0579 uni0579 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057a uni057A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057b uni057B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057c uni057C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057d uni057D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057e uni057E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+057f uni057F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0580 uni0580 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0581 uni0581 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0582 uni0582 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0583 uni0583 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0584 uni0584 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0585 uni0585 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0586 uni0586 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0587 uni0587 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+0589 uni0589 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+058a uni058A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+05b0 uni05B0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b1 uni05B1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b2 uni05B2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b3 uni05B3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b4 uni05B4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b5 uni05B5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b6 uni05B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b7 uni05B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b8 uni05B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05b9 uni05B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ba uni05BA 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05bb uni05BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bc uni05BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05bd uni05BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05be uni05BE 2.9 (Sans Condensed Oblique, Sans Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) +U+05bf uni05BF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c0 uni05C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c1 uni05C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c2 uni05C2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c3 uni05C3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c6 uni05C6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05c7 uni05C7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d0 uni05D0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d1 uni05D1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d2 uni05D2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d3 uni05D3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d4 uni05D4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d5 uni05D5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d6 uni05D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d7 uni05D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d8 uni05D8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05d9 uni05D9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05da uni05DA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05db uni05DB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dc uni05DC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05dd uni05DD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05de uni05DE 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05df uni05DF 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e0 uni05E0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e1 uni05E1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e2 uni05E2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e3 uni05E3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e4 uni05E4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e5 uni05E5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e6 uni05E6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e7 uni05E7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e8 uni05E8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05e9 uni05E9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05ea uni05EA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f0 uni05F0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f1 uni05F1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f2 uni05F2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+05f3 uni05F3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+05f4 uni05F4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0606 uni0606 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0607 uni0607 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+0609 uni0609 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060a uni060A 2.26 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold) +U+060c uni060C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0615 uni0615 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061b uni061B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+061f uni061F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0621 uni0621 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0622 uni0622 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0623 uni0623 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0624 uni0624 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0625 uni0625 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0626 uni0626 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0627 uni0627 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0628 uni0628 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0629 uni0629 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062a uni062A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062b uni062B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062c uni062C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062d uni062D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062e uni062E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+062f uni062F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0630 uni0630 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0631 uni0631 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0632 uni0632 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0633 uni0633 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0634 uni0634 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0635 uni0635 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0636 uni0636 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0637 uni0637 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0638 uni0638 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0639 uni0639 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+063a uni063A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0640 uni0640 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0641 uni0641 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0642 uni0642 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0643 uni0643 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0644 uni0644 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0645 uni0645 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0646 uni0646 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0647 uni0647 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0648 uni0648 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0649 uni0649 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064a uni064A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064b uni064B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064c uni064C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064d uni064D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064e uni064E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+064f uni064F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0650 uni0650 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0651 uni0651 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0652 uni0652 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0653 uni0653 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0654 uni0654 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0655 uni0655 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0657 uni0657 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+065a uni065A 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0660 uni0660 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0661 uni0661 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0662 uni0662 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0663 uni0663 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0664 uni0664 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0665 uni0665 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0666 uni0666 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0667 uni0667 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0668 uni0668 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0669 uni0669 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066a uni066A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066b uni066B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066c uni066C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066d uni066D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066e uni066E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+066f uni066F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0670 uni0670 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0674 uni0674 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans ExtraLight) 2.16 (Sans Mono, Sans Mono Bold) +U+0679 uni0679 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067a uni067A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067b uni067B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067c uni067C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067d uni067D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067e uni067E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+067f uni067F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0680 uni0680 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0681 uni0681 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0682 uni0682 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0683 uni0683 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0684 uni0684 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0685 uni0685 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0686 uni0686 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0687 uni0687 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0688 uni0688 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0689 uni0689 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068a uni068A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068b uni068B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068c uni068C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068d uni068D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068e uni068E 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+068f uni068F 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0690 uni0690 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0691 uni0691 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0692 uni0692 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0693 uni0693 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0694 uni0694 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0695 uni0695 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0696 uni0696 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0697 uni0697 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0698 uni0698 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+0699 uni0699 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069a uni069A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069b uni069B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069c uni069C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069d uni069D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069e uni069E 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+069f uni069F 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a0 uni06A0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a1 uni06A1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a2 uni06A2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a3 uni06A3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a4 uni06A4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06a5 uni06A5 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a6 uni06A6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a7 uni06A7 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a8 uni06A8 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06a9 uni06A9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06aa uni06AA 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ab uni06AB 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ac uni06AC 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ad uni06AD 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ae uni06AE 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06af uni06AF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06b0 uni06B0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b1 uni06B1 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b2 uni06B2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b3 uni06B3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b4 uni06B4 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b5 uni06B5 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06b6 uni06B6 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b7 uni06B7 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b8 uni06B8 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06b9 uni06B9 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06ba uni06BA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06bb uni06BB 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bc uni06BC 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bd uni06BD 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06be uni06BE 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06bf uni06BF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+06c6 uni06C6 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06cc uni06CC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06ce uni06CE 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06d5 uni06D5 2.10 (Sans, Sans Bold) 2.11 (Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f0 uni06F0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f1 uni06F1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f2 uni06F2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f3 uni06F3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f4 uni06F4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f5 uni06F5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f6 uni06F6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f7 uni06F7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f8 uni06F8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+06f9 uni06F9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+07c0 uni07C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c1 uni07C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c2 uni07C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c3 uni07C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c4 uni07C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c5 uni07C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c6 uni07C6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c7 uni07C7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c8 uni07C8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07c9 uni07C9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ca uni07CA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cb uni07CB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cc uni07CC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cd uni07CD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ce uni07CE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07cf uni07CF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d0 uni07D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d1 uni07D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d2 uni07D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d3 uni07D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d4 uni07D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d5 uni07D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d6 uni07D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d7 uni07D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d8 uni07D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07d9 uni07D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07da uni07DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07db uni07DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dc uni07DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07dd uni07DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07de uni07DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07df uni07DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e0 uni07E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e1 uni07E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e2 uni07E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e3 uni07E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e4 uni07E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e5 uni07E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e6 uni07E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07e7 uni07E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07eb uni07EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ec uni07EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ed uni07ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ee uni07EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07ef uni07EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f0 uni07F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f1 uni07F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f2 uni07F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f3 uni07F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f4 uni07F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f5 uni07F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f8 uni07F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07f9 uni07F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+07fa uni07FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+0e3f uni0E3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0e81 uni0E81 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e82 uni0E82 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e84 uni0E84 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e87 uni0E87 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e88 uni0E88 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8a uni0E8A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e8d uni0E8D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e94 uni0E94 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e95 uni0E95 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e96 uni0E96 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e97 uni0E97 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e99 uni0E99 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9a uni0E9A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9b uni0E9B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9c uni0E9C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9d uni0E9D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9e uni0E9E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0e9f uni0E9F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea1 uni0EA1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea2 uni0EA2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea3 uni0EA3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea5 uni0EA5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ea7 uni0EA7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaa uni0EAA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eab uni0EAB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ead uni0EAD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eae uni0EAE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eaf uni0EAF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb0 uni0EB0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb1 uni0EB1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb2 uni0EB2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb3 uni0EB3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb4 uni0EB4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb5 uni0EB5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb6 uni0EB6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb7 uni0EB7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb8 uni0EB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eb9 uni0EB9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebb uni0EBB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebc uni0EBC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ebd uni0EBD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec0 uni0EC0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec1 uni0EC1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec2 uni0EC2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec3 uni0EC3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec4 uni0EC4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec6 uni0EC6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ec8 uni0EC8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ec9 uni0EC9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0eca uni0ECA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecb uni0ECB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecc uni0ECC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ecd uni0ECD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+0ed0 uni0ED0 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed1 uni0ED1 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed2 uni0ED2 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed3 uni0ED3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed4 uni0ED4 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed5 uni0ED5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed6 uni0ED6 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed7 uni0ED7 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0ed8 uni0ED8 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+0ed9 uni0ED9 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edc uni0EDC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+0edd uni0EDD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+10a0 uni10A0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a1 uni10A1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a2 uni10A2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a3 uni10A3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a4 uni10A4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a5 uni10A5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a6 uni10A6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a7 uni10A7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a8 uni10A8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10a9 uni10A9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10aa uni10AA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ab uni10AB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ac uni10AC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ad uni10AD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ae uni10AE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10af uni10AF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b0 uni10B0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b1 uni10B1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b2 uni10B2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b3 uni10B3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b4 uni10B4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b5 uni10B5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b6 uni10B6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b7 uni10B7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b8 uni10B8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10b9 uni10B9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10ba uni10BA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bb uni10BB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bc uni10BC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bd uni10BD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10be uni10BE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10bf uni10BF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c0 uni10C0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c1 uni10C1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c2 uni10C2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c3 uni10C3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c4 uni10C4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10c5 uni10C5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+10d0 uni10D0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d1 uni10D1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d2 uni10D2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d3 uni10D3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d4 uni10D4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d5 uni10D5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d6 uni10D6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d7 uni10D7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d8 uni10D8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10d9 uni10D9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10da uni10DA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10db uni10DB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10dc uni10DC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10dd uni10DD 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10de uni10DE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10df uni10DF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e0 uni10E0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e1 uni10E1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e2 uni10E2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e3 uni10E3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e4 uni10E4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e5 uni10E5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e6 uni10E6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e7 uni10E7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e8 uni10E8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10e9 uni10E9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ea uni10EA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10eb uni10EB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ec uni10EC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ed uni10ED 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ee uni10EE 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10ef uni10EF 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f0 uni10F0 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f1 uni10F1 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f2 uni10F2 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f3 uni10F3 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f4 uni10F4 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f5 uni10F5 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f6 uni10F6 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f7 uni10F7 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f8 uni10F8 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10f9 uni10F9 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fa uni10FA 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fb uni10FB 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+10fc uni10FC 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Mono, Sans Mono Bold, Serif, Serif Bold, Serif Condensed, Serif Condensed Bold) 2.20 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+1401 uni1401 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1402 uni1402 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1403 uni1403 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1404 uni1404 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1405 uni1405 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1406 uni1406 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1407 uni1407 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1409 uni1409 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140a uni140A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140b uni140B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140c uni140C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140d uni140D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140e uni140E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+140f uni140F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1410 uni1410 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1411 uni1411 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1412 uni1412 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1413 uni1413 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1414 uni1414 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1415 uni1415 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1416 uni1416 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1417 uni1417 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1418 uni1418 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1419 uni1419 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141a uni141A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141b uni141B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141d uni141D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141e uni141E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+141f uni141F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1420 uni1420 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1421 uni1421 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1422 uni1422 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1423 uni1423 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1424 uni1424 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1425 uni1425 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1426 uni1426 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1427 uni1427 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1428 uni1428 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1429 uni1429 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142a uni142A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142b uni142B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142c uni142C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142d uni142D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142e uni142E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+142f uni142F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1430 uni1430 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1431 uni1431 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1432 uni1432 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1433 uni1433 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1434 uni1434 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1435 uni1435 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1437 uni1437 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1438 uni1438 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1439 uni1439 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143a uni143A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143b uni143B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143c uni143C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143d uni143D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143e uni143E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+143f uni143F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1440 uni1440 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1441 uni1441 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1442 uni1442 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1443 uni1443 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1444 uni1444 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1445 uni1445 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1446 uni1446 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1447 uni1447 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1448 uni1448 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1449 uni1449 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144a uni144A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144c uni144C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144d uni144D 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144e uni144E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+144f uni144F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1450 uni1450 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1451 uni1451 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1452 uni1452 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1454 uni1454 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1455 uni1455 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1456 uni1456 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1457 uni1457 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1458 uni1458 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1459 uni1459 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145a uni145A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145b uni145B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145c uni145C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145d uni145D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145e uni145E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+145f uni145F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1460 uni1460 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1461 uni1461 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1462 uni1462 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1463 uni1463 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1464 uni1464 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1465 uni1465 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1466 uni1466 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1467 uni1467 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1468 uni1468 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1469 uni1469 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146a uni146A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146b uni146B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146c uni146C 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146d uni146D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146e uni146E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+146f uni146F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1470 uni1470 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1471 uni1471 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1472 uni1472 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1473 uni1473 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1474 uni1474 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1475 uni1475 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1476 uni1476 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1477 uni1477 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1478 uni1478 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1479 uni1479 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147a uni147A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147b uni147B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147c uni147C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147d uni147D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147e uni147E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+147f uni147F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1480 uni1480 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1481 uni1481 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1482 uni1482 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1483 uni1483 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1484 uni1484 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1485 uni1485 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1486 uni1486 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1487 uni1487 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1488 uni1488 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1489 uni1489 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148a uni148A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148b uni148B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148c uni148C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148d uni148D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148e uni148E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+148f uni148F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1490 uni1490 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1491 uni1491 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1492 uni1492 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1493 uni1493 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1494 uni1494 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1495 uni1495 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1496 uni1496 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1497 uni1497 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1498 uni1498 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1499 uni1499 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149a uni149A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149b uni149B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149c uni149C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149d uni149D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149e uni149E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+149f uni149F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a0 uni14A0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a1 uni14A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a2 uni14A2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a3 uni14A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a4 uni14A4 2.13 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.15 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+14a5 uni14A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a6 uni14A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a7 uni14A7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a8 uni14A8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14a9 uni14A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14aa uni14AA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ab uni14AB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ac uni14AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ad uni14AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ae uni14AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14af uni14AF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b0 uni14B0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b1 uni14B1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b2 uni14B2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b3 uni14B3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b4 uni14B4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b5 uni14B5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b6 uni14B6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b7 uni14B7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b8 uni14B8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14b9 uni14B9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ba uni14BA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bb uni14BB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bc uni14BC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14bd uni14BD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c0 uni14C0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c1 uni14C1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c2 uni14C2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c3 uni14C3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c4 uni14C4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c5 uni14C5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c6 uni14C6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c7 uni14C7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c8 uni14C8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14c9 uni14C9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ca uni14CA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cb uni14CB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cc uni14CC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cd uni14CD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ce uni14CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14cf uni14CF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d0 uni14D0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d1 uni14D1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d2 uni14D2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d3 uni14D3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d4 uni14D4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d5 uni14D5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d6 uni14D6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d7 uni14D7 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d8 uni14D8 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14d9 uni14D9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14da uni14DA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14db uni14DB 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dc uni14DC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14dd uni14DD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14de uni14DE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14df uni14DF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e0 uni14E0 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e1 uni14E1 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e2 uni14E2 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e3 uni14E3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e4 uni14E4 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e5 uni14E5 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e6 uni14E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e7 uni14E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e8 uni14E8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14e9 uni14E9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ea uni14EA 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ec uni14EC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ed uni14ED 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ee uni14EE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ef uni14EF 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f0 uni14F0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f1 uni14F1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f2 uni14F2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f3 uni14F3 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f4 uni14F4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f5 uni14F5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f6 uni14F6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f7 uni14F7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f8 uni14F8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14f9 uni14F9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fa uni14FA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fb uni14FB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fc uni14FC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fd uni14FD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14fe uni14FE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+14ff uni14FF 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1500 uni1500 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1501 uni1501 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1502 uni1502 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1503 uni1503 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1504 uni1504 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1505 uni1505 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1506 uni1506 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1507 uni1507 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1510 uni1510 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1511 uni1511 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1512 uni1512 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1513 uni1513 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1514 uni1514 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1515 uni1515 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1516 uni1516 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1517 uni1517 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1518 uni1518 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1519 uni1519 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151a uni151A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151b uni151B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151c uni151C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151d uni151D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151e uni151E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+151f uni151F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1520 uni1520 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1521 uni1521 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1522 uni1522 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1523 uni1523 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1524 uni1524 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1525 uni1525 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1526 uni1526 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1527 uni1527 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1528 uni1528 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1529 uni1529 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152a uni152A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152b uni152B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152c uni152C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152d uni152D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152e uni152E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+152f uni152F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1530 uni1530 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1531 uni1531 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1532 uni1532 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1533 uni1533 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1534 uni1534 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1535 uni1535 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1536 uni1536 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1537 uni1537 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1538 uni1538 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1539 uni1539 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153a uni153A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153b uni153B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153c uni153C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153d uni153D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+153e uni153E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1540 uni1540 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1541 uni1541 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1542 uni1542 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1543 uni1543 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1544 uni1544 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1545 uni1545 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1546 uni1546 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1547 uni1547 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1548 uni1548 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1549 uni1549 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154a uni154A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154b uni154B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154c uni154C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154d uni154D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154e uni154E 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+154f uni154F 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1550 uni1550 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1552 uni1552 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1553 uni1553 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1554 uni1554 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1555 uni1555 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1556 uni1556 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1557 uni1557 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1558 uni1558 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1559 uni1559 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155a uni155A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155b uni155B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155c uni155C 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155d uni155D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155e uni155E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+155f uni155F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1560 uni1560 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1561 uni1561 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1562 uni1562 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1563 uni1563 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1564 uni1564 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1565 uni1565 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1566 uni1566 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1567 uni1567 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1568 uni1568 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1569 uni1569 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+156a uni156A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1574 uni1574 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1575 uni1575 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1576 uni1576 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1577 uni1577 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1578 uni1578 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1579 uni1579 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157a uni157A 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157b uni157B 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157c uni157C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157d uni157D 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157e uni157E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+157f uni157F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1580 uni1580 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1581 uni1581 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1582 uni1582 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1583 uni1583 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1584 uni1584 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1585 uni1585 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158a uni158A 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158b uni158B 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158c uni158C 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158d uni158D 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158e uni158E 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+158f uni158F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1590 uni1590 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1591 uni1591 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1592 uni1592 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1593 uni1593 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1594 uni1594 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1595 uni1595 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1596 uni1596 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a0 uni15A0 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a1 uni15A1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a2 uni15A2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a3 uni15A3 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a4 uni15A4 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a5 uni15A5 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a6 uni15A6 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a7 uni15A7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a8 uni15A8 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15a9 uni15A9 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15aa uni15AA 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ab uni15AB 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ac uni15AC 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ad uni15AD 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15ae uni15AE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15af uni15AF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15de uni15DE 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+15e1 uni15E1 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1646 uni1646 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1647 uni1647 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166e uni166E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+166f uni166F 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1670 uni1670 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1671 uni1671 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1672 uni1672 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1673 uni1673 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1674 uni1674 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1675 uni1675 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1676 uni1676 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1680 uni1680 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1681 uni1681 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1682 uni1682 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1683 uni1683 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1684 uni1684 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1685 uni1685 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1686 uni1686 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1687 uni1687 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1688 uni1688 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1689 uni1689 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168a uni168A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168b uni168B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168c uni168C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168d uni168D 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168e uni168E 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+168f uni168F 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1690 uni1690 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1691 uni1691 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1692 uni1692 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1693 uni1693 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1694 uni1694 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1695 uni1695 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1696 uni1696 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1697 uni1697 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1698 uni1698 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1699 uni1699 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169a uni169A 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169b uni169B 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+169c uni169C 2.22 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.28 (Sans ExtraLight) +U+1d00 uni1D00 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d01 uni1D01 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d02 uni1D02 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d03 uni1D03 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d04 uni1D04 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d05 uni1D05 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d06 uni1D06 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d07 uni1D07 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d08 uni1D08 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d09 uni1D09 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d0a uni1D0A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0b uni1D0B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0c uni1D0C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0d uni1D0D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0e uni1D0E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d0f uni1D0F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d10 uni1D10 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d11 uni1D11 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d12 uni1D12 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d13 uni1D13 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d14 uni1D14 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d15 uni1D15 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d16 uni1D16 2.3 +U+1d17 uni1D17 2.3 +U+1d18 uni1D18 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d19 uni1D19 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1a uni1D1A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1b uni1D1B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1c uni1D1C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d1d uni1D1D 2.3 +U+1d1e uni1D1E 2.3 +U+1d1f uni1D1F 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+1d20 uni1D20 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d21 uni1D21 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d22 uni1D22 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d23 uni1D23 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d24 uni1D24 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d25 uni1D25 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d26 uni1D26 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d27 uni1D27 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d28 uni1D28 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d29 uni1D29 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d2a uni1D2A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d2b uni1D2B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans ExtraLight) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d2c uni1D2C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2d uni1D2D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2e uni1D2E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d2f uni1D2F 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d30 uni1D30 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d31 uni1D31 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d32 uni1D32 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d33 uni1D33 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d34 uni1D34 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d35 uni1D35 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d36 uni1D36 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d37 uni1D37 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d38 uni1D38 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d39 uni1D39 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3a uni1D3A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3b uni1D3B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3c uni1D3C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3d uni1D3D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d3e uni1D3E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d3f uni1D3F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d40 uni1D40 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d41 uni1D41 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d42 uni1D42 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d43 uni1D43 2.3 +U+1d44 uni1D44 2.3 +U+1d45 uni1D45 2.3 +U+1d46 uni1D46 2.3 +U+1d47 uni1D47 2.3 +U+1d48 uni1D48 2.3 +U+1d49 uni1D49 2.3 +U+1d4a uni1D4A 2.3 +U+1d4b uni1D4B 2.3 +U+1d4c uni1D4C 2.3 +U+1d4d uni1D4D 2.3 +U+1d4e uni1D4E 2.3 +U+1d4f uni1D4F 2.3 +U+1d50 uni1D50 2.3 +U+1d51 uni1D51 2.3 +U+1d52 uni1D52 2.3 +U+1d53 uni1D53 2.3 +U+1d54 uni1D54 2.3 +U+1d55 uni1D55 2.3 +U+1d56 uni1D56 2.3 +U+1d57 uni1D57 2.3 +U+1d58 uni1D58 2.3 +U+1d59 uni1D59 2.3 +U+1d5a uni1D5A 2.3 +U+1d5b uni1D5B 2.3 +U+1d5c uni1D5C 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d5d uni1D5D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d5e uni1D5E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d5f uni1D5F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d60 uni1D60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d61 uni1D61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d62 uni1D62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d63 uni1D63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d64 uni1D64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d65 uni1D65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d66 uni1D66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d67 uni1D67 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d68 uni1D68 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d69 uni1D69 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d6a uni1D6A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d6b uni1D6B 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d77 uni1D77 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1d78 uni1D78 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1d7b uni1D7B 2.3 +U+1d7c uni1D7C 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d7d uni1D7D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d7e uni1D7E 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d7f uni1D7F 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1d85 uni1D85 2.3 +U+1d9b uni1D9B 2.3 +U+1d9c uni1D9C 2.3 +U+1d9d uni1D9D 2.3 +U+1d9e uni1D9E 2.3 +U+1d9f uni1D9F 2.3 +U+1da0 uni1DA0 2.3 +U+1da1 uni1DA1 2.3 +U+1da2 uni1DA2 2.3 +U+1da3 uni1DA3 2.3 +U+1da4 uni1DA4 2.3 +U+1da5 uni1DA5 2.3 +U+1da6 uni1DA6 2.3 +U+1da7 uni1DA7 2.3 +U+1da8 uni1DA8 2.3 +U+1da9 uni1DA9 2.3 +U+1daa uni1DAA 2.3 +U+1dab uni1DAB 2.3 +U+1dac uni1DAC 2.3 +U+1dad uni1DAD 2.3 +U+1dae uni1DAE 2.3 +U+1daf uni1DAF 2.3 +U+1db0 uni1DB0 2.3 +U+1db1 uni1DB1 2.3 +U+1db2 uni1DB2 2.3 +U+1db3 uni1DB3 2.3 +U+1db4 uni1DB4 2.3 +U+1db5 uni1DB5 2.3 +U+1db6 uni1DB6 2.3 +U+1db7 uni1DB7 2.3 +U+1db8 uni1DB8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1db9 uni1DB9 2.3 +U+1dba uni1DBA 2.3 +U+1dbb uni1DBB 2.3 +U+1dbc uni1DBC 2.3 +U+1dbd uni1DBD 2.3 +U+1dbe uni1DBE 2.3 +U+1dbf uni1DBF 2.3 +U+1dc4 uni1DC4 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc5 uni1DC5 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc6 uni1DC6 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc7 uni1DC7 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc8 uni1DC8 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1dc9 uni1DC9 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e00 uni1E00 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e01 uni1E01 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e02 uni1E02 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e03 uni1E03 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e04 uni1E04 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e05 uni1E05 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e06 uni1E06 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e07 uni1E07 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e08 uni1E08 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e09 uni1E09 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0a uni1E0A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0b uni1E0B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0c uni1E0C 2.1 +U+1e0d uni1E0D 2.1 +U+1e0e uni1E0E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e0f uni1E0F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e10 uni1E10 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e11 uni1E11 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e12 uni1E12 1.13 +U+1e13 uni1E13 1.13 +U+1e14 uni1E14 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e15 uni1E15 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e16 uni1E16 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e17 uni1E17 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e18 uni1E18 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e19 uni1E19 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1a uni1E1A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1b uni1E1B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1c uni1E1C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1d uni1E1D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+1e1e uni1E1E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e1f uni1E1F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e20 uni1E20 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e21 uni1E21 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e22 uni1E22 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e23 uni1E23 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e24 uni1E24 2.1 +U+1e25 uni1E25 2.1 +U+1e26 uni1E26 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e27 uni1E27 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e28 uni1E28 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e29 uni1E29 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2a uni1E2A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2b uni1E2B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2c uni1E2C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2d uni1E2D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e2e uni1E2E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e2f uni1E2F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e30 uni1E30 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e31 uni1E31 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e32 uni1E32 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e33 uni1E33 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e34 uni1E34 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e35 uni1E35 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e36 uni1E36 2.1 +U+1e37 uni1E37 2.1 +U+1e38 uni1E38 2.1 +U+1e39 uni1E39 2.1 +U+1e3a uni1E3A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3b uni1E3B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3c uni1E3C 1.13 +U+1e3d uni1E3D 1.13 +U+1e3e uni1E3E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e3f uni1E3F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e40 uni1E40 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e41 uni1E41 2.1 +U+1e42 uni1E42 2.1 +U+1e43 uni1E43 2.1 +U+1e44 uni1E44 1.13 +U+1e45 uni1E45 1.13 +U+1e46 uni1E46 2.1 +U+1e47 uni1E47 2.1 +U+1e48 uni1E48 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e49 uni1E49 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e4a uni1E4A 1.13 +U+1e4b uni1E4B 1.13 +U+1e4c uni1E4C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e4d uni1E4D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1e4e uni1E4E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e4f uni1E4F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e50 uni1E50 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e51 uni1E51 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e52 uni1E52 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e53 uni1E53 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e54 uni1E54 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e55 uni1E55 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e56 uni1E56 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e57 uni1E57 2.1 +U+1e58 uni1E58 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e59 uni1E59 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5a uni1E5A 2.1 +U+1e5b uni1E5B 2.1 +U+1e5c uni1E5C 2.1 +U+1e5d uni1E5D 2.1 +U+1e5e uni1E5E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e5f uni1E5F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e60 uni1E60 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e61 uni1E61 2.1 +U+1e62 uni1E62 2.1 +U+1e63 uni1E63 2.1 +U+1e64 uni1E64 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e65 uni1E65 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e66 uni1E66 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e67 uni1E67 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e68 uni1E68 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e69 uni1E69 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6a uni1E6A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6b uni1E6B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6c uni1E6C 2.1 +U+1e6d uni1E6D 2.1 +U+1e6e uni1E6E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e6f uni1E6F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e70 uni1E70 1.13 +U+1e71 uni1E71 1.13 +U+1e72 uni1E72 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e73 uni1E73 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e74 uni1E74 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e75 uni1E75 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e76 uni1E76 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e77 uni1E77 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e78 uni1E78 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e79 uni1E79 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7a uni1E7A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7b uni1E7B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e7c uni1E7C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7d uni1E7D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e7e uni1E7E 2.1 +U+1e7f uni1E7F 2.1 +U+1e80 Wgrave 1.2 +U+1e81 wgrave 1.2 +U+1e82 Wacute 1.2 +U+1e83 wacute 1.2 +U+1e84 Wdieresis 1.2 +U+1e85 wdieresis 1.2 +U+1e86 uni1E86 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e87 uni1E87 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e88 uni1E88 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e89 uni1E89 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8a uni1E8A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8b uni1E8B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8c uni1E8C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8d uni1E8D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e8e uni1E8E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e8f uni1E8F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e90 uni1E90 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e91 uni1E91 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e92 uni1E92 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e93 uni1E93 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e94 uni1E94 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e95 uni1E95 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e96 uni1E96 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e97 uni1E97 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e98 uni1E98 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e99 uni1E99 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1e9a uni1E9A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1e9b uni1E9B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1e9c uni1E9C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e9d uni1E9D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1e9e uni1E9E 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.32 (Sans ExtraLight) +U+1e9f uni1E9F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1ea0 uni1EA0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ea1 uni1EA1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ea2 uni1EA2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ea3 uni1EA3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ea4 uni1EA4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea5 uni1EA5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea6 uni1EA6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea7 uni1EA7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea8 uni1EA8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ea9 uni1EA9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eaa uni1EAA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eab uni1EAB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eac uni1EAC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ead uni1EAD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eae uni1EAE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eaf uni1EAF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb0 uni1EB0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1eb1 uni1EB1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.22 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1eb2 uni1EB2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb3 uni1EB3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb4 uni1EB4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb5 uni1EB5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eb6 uni1EB6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eb7 uni1EB7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eb8 uni1EB8 2.2 +U+1eb9 uni1EB9 2.2 +U+1eba uni1EBA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ebb uni1EBB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ebc uni1EBC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ebd uni1EBD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ebe uni1ebe 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ebf uni1ebF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec0 uni1EC0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec1 uni1EC1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec2 uni1EC2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec3 uni1EC3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec4 uni1EC4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec5 uni1EC5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ec6 uni1EC6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ec7 uni1EC7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ec8 uni1EC8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ec9 uni1EC9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1eca uni1ECA 2.2 +U+1ecb uni1ECB 2.2 +U+1ecc uni1ECC 2.2 +U+1ecd uni1ECD 2.2 +U+1ece uni1ECE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ecf uni1ECF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ed0 uni1ED0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed1 uni1ED1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed2 uni1ED2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed3 uni1ED3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed4 uni1ED4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed5 uni1ED5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed6 uni1ED6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed7 uni1ED7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ed8 uni1ED8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1ed9 uni1ED9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1eda uni1EDA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edb uni1EDB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edc uni1EDC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edd uni1EDD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ede uni1EDE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1edf uni1EDF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee0 uni1EE0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee1 uni1EE1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee2 uni1EE2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee3 uni1EE3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee4 uni1EE4 2.2 +U+1ee5 uni1EE5 2.2 +U+1ee6 uni1EE6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ee7 uni1EE7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ee8 uni1EE8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ee9 uni1EE9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eea uni1EEA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eeb uni1EEB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eec uni1EEC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eed uni1EED 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eee uni1EEE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1eef uni1EEF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ef0 uni1EF0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ef1 uni1EF1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1ef2 Ygrave 1.2 +U+1ef3 ygrave 1.2 +U+1ef4 uni1EF4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef5 uni1EF5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef6 uni1EF6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ef7 uni1EF7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ef8 uni1EF8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ef9 uni1EF9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1efa uni1EFA 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1efb uni1EFB 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+1f00 uni1F00 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f01 uni1F01 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f02 uni1F02 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f03 uni1F03 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f04 uni1F04 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f05 uni1F05 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f06 uni1F06 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f07 uni1F07 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f08 uni1F08 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f09 uni1F09 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0a uni1F0A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0b uni1F0B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0c uni1F0C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0d uni1F0D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0e uni1F0E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f0f uni1F0F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f10 uni1F10 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f11 uni1F11 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f12 uni1F12 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f13 uni1F13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f14 uni1F14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f15 uni1F15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f18 uni1F18 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f19 uni1F19 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1a uni1F1A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1b uni1F1B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1c uni1F1C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f1d uni1F1D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f20 uni1F20 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f21 uni1F21 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f22 uni1F22 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f23 uni1F23 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f24 uni1F24 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f25 uni1F25 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f26 uni1F26 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f27 uni1F27 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f28 uni1F28 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f29 uni1F29 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2a uni1F2A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2b uni1F2B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2c uni1F2C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2d uni1F2D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2e uni1F2E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f2f uni1F2F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f30 uni1F30 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f31 uni1F31 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f32 uni1F32 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f33 uni1F33 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f34 uni1F34 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f35 uni1F35 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f36 uni1F36 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f37 uni1F37 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f38 uni1F38 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f39 uni1F39 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3a uni1F3A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3b uni1F3B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3c uni1F3C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3d uni1F3D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3e uni1F3E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f3f uni1F3F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f40 uni1F40 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f41 uni1F41 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f42 uni1F42 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f43 uni1F43 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f44 uni1F44 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f45 uni1F45 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f48 uni1F48 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f49 uni1F49 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4a uni1F4A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4b uni1F4B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4c uni1F4C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f4d uni1F4D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f50 uni1F50 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f51 uni1F51 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f52 uni1F52 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f53 uni1F53 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f54 uni1F54 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f55 uni1F55 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f56 uni1F56 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f57 uni1F57 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f59 uni1F59 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5b uni1F5B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5d uni1F5D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f5f uni1F5F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f60 uni1F60 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f61 uni1F61 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f62 uni1F62 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f63 uni1F63 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f64 uni1F64 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f65 uni1F65 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f66 uni1F66 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f67 uni1F67 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f68 uni1F68 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f69 uni1F69 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6a uni1F6A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6b uni1F6B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6c uni1F6C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6d uni1F6D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6e uni1F6E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f6f uni1F6F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f70 uni1F70 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f71 uni1F71 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f72 uni1F72 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f73 uni1F73 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f74 uni1F74 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f75 uni1F75 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f76 uni1F76 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f77 uni1F77 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f78 uni1F78 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f79 uni1F79 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1f7a uni1F7A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7b uni1F7B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7c uni1F7C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f7d uni1F7D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f80 uni1F80 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f81 uni1F81 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f82 uni1F82 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f83 uni1F83 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f84 uni1F84 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f85 uni1F85 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f86 uni1F86 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f87 uni1F87 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f88 uni1F88 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f89 uni1F89 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8a uni1F8A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8b uni1F8B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8c uni1F8C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8d uni1F8D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8e uni1F8E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f8f uni1F8F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f90 uni1F90 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f91 uni1F91 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f92 uni1F92 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f93 uni1F93 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f94 uni1F94 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f95 uni1F95 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f96 uni1F96 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f97 uni1F97 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f98 uni1F98 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f99 uni1F99 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9a uni1F9A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9b uni1F9B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9c uni1F9C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9d uni1F9D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9e uni1F9E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1f9f uni1F9F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa0 uni1FA0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa1 uni1FA1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa2 uni1FA2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa3 uni1FA3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa4 uni1FA4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa5 uni1FA5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa6 uni1FA6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa7 uni1FA7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa8 uni1FA8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fa9 uni1FA9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faa uni1FAA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fab uni1FAB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fac uni1FAC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fad uni1FAD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fae uni1FAE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1faf uni1FAF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb0 uni1FB0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb1 uni1FB1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb2 uni1FB2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb3 uni1FB3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb4 uni1FB4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb6 uni1FB6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb7 uni1FB7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fb8 uni1FB8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fb9 uni1FB9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fba uni1FBA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbb uni1FBB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbc uni1FBC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbd uni1FBD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fbe uni1FBE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fbf uni1FBF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc0 uni1FC0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc1 uni1FC1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc2 uni1FC2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc3 uni1FC3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc4 uni1FC4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc6 uni1FC6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc7 uni1FC7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fc8 uni1FC8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fc9 uni1FC9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fca uni1FCA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcb uni1FCB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fcc uni1FCC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcd uni1FCD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fce uni1FCE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fcf uni1FCF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd0 uni1FD0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd1 uni1FD1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd2 uni1FD2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd3 uni1FD3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd6 uni1FD6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd7 uni1FD7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fd8 uni1FD8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fd9 uni1FD9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fda uni1FDA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdb uni1FDB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fdd uni1FDD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fde uni1FDE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fdf uni1FDF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe0 uni1FE0 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe1 uni1FE1 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe2 uni1FE2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe3 uni1FE3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe4 uni1FE4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe5 uni1FE5 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe6 uni1FE6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe7 uni1FE7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fe8 uni1FE8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fe9 uni1FE9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fea uni1FEA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1feb uni1FEB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fec uni1FEC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1fed uni1FED 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fee uni1FEE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1fef uni1FEF 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff2 uni1FF2 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff3 uni1FF3 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff4 uni1FF4 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff6 uni1FF6 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff7 uni1FF7 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ff8 uni1FF8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ff9 uni1FF9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffa uni1FFA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffb uni1FFB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.10 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffc uni1FFC 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+1ffd uni1FFD 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+1ffe uni1FFE 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.5 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2000 uni2000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2001 uni2001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2002 uni2002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2003 uni2003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2004 uni2004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2005 uni2005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2006 uni2006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2007 uni2007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2008 uni2008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2009 uni2009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+200a uni200A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+200b uni200B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200c uni200C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200d uni200D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200e uni200E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+200f uni200F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.8 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2010 uni2010 1.5 +U+2011 uni2011 1.5 +U+2012 figuredash 1.5 +U+2013 endash original +U+2014 emdash original +U+2015 uni2015 1.5 +U+2016 uni2016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2017 underscoredbl 2.3 +U+2018 quoteleft original +U+2019 quoteright original +U+201a quotesinglbase original +U+201b quotereversed 2.3 +U+201c quotedblleft original +U+201d quotedblright original +U+201e quotedblbase original +U+201f uni201F 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.3 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+2020 dagger original +U+2021 daggerdbl original +U+2022 bullet original +U+2023 uni2023 2.2 +U+2024 onedotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2025 twodotenleader 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2026 ellipsis original +U+2027 uni2027 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2028 uni2028 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2029 uni2029 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+202a uni202A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202b uni202B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202c uni202C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202d uni202D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202e uni202E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+202f uni202F 2.11 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) +U+2030 perthousand original +U+2031 uni2031 2.1 +U+2032 minute 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2033 second 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2034 uni2034 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2035 uni2035 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2036 uni2036 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2037 uni2037 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2038 uni2038 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2039 guilsinglleft original +U+203a guilsinglright original +U+203b uni203B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+203c exclamdbl 2.0 +U+203d uni203D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.11 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.14 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+203e uni203E 2.3 +U+203f uni203F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2040 uni2040 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2041 uni2041 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2042 uni2042 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2043 uni2043 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2044 fraction 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2045 uni2045 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2046 uni2046 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2047 uni2047 2.0 +U+2048 uni2048 2.0 +U+2049 uni2049 2.0 +U+204a uni204A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+204b uni204B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.33 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+204c uni204C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204d uni204D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204e uni204E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+204f uni204F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2050 uni2050 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2051 uni2051 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2052 uni2052 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2053 uni2053 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2054 uni2054 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2055 uni2055 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2056 uni2056 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2057 uni2057 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2058 uni2058 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2059 uni2059 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205a uni205A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205b uni205B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205c uni205C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205d uni205D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205e uni205E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+205f uni205F 2.14 +U+2060 uni2060 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2061 uni2061 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2062 uni2062 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2063 uni2063 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2064 uni2064 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+206a uni206A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206b uni206B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206c uni206C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206d uni206D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206e uni206E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+206f uni206F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2070 uni2070 2.2 +U+2071 uni2071 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2074 uni2074 2.2 +U+2075 uni2075 2.2 +U+2076 uni2076 2.2 +U+2077 uni2077 2.2 +U+2078 uni2078 2.2 +U+2079 uni2079 2.2 +U+207a uni207A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207b uni207B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207c uni207C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207d uni207D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207e uni207E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+207f uni207F 1.14 +U+2080 uni2080 2.4 +U+2081 uni2081 2.4 +U+2082 uni2082 2.4 +U+2083 uni2083 2.4 +U+2084 uni2084 2.4 +U+2085 uni2085 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2086 uni2086 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2087 uni2087 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2088 uni2088 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2089 uni2089 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+208a uni208A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208b uni208B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208c uni208C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208d uni208D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+208e uni208E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2090 uni2090 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2091 uni2091 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2092 uni2092 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2093 uni2093 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2094 uni2094 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.17 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.18 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2095 uni2095 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2096 uni2096 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2097 uni2097 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2098 uni2098 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2099 uni2099 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+209a uni209A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+209b uni209B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+209c uni209C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+20a0 uni20A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a1 colonmonetary 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a2 uni20A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a3 franc 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a4 lira 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a5 uni20A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a6 uni20A6 2.3 +U+20a7 peseta 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a8 uni20A8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20a9 uni20A9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20aa uni20AA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ab dong 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ac Euro original +U+20ad uni20AD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20ae uni20AE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20af uni20AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b0 uni20B0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b1 uni20B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+20b2 uni20B2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b3 uni20B3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+20b4 uni20B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+20b5 uni20B5 2.2 +U+20b8 uni20B8 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+20b9 uni20B9 2.32 +U+20ba uni20BA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20d0 uni20D0 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d1 uni20D1 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+20d6 uni20D6 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20d7 uni20D7 2.8 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20db uni20DB 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20dc uni20DC 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+20e1 uni20E1 2.23 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2100 uni2100 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2101 uni2101 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2102 uni2102 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.16 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Condensed) +U+2103 uni2103 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2104 uni2104 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2105 uni2105 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2106 uni2106 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2107 uni2107 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2108 uni2108 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2109 uni2109 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+210b uni210B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210c uni210C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+210d uni210D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+210e uni210E 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.23 (Serif Italic Condensed) 2.26 (Sans ExtraLight) +U+210f uni210F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.28 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2110 uni2110 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2111 Ifraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2112 uni2112 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2113 uni2113 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2114 uni2114 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2115 uni2115 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2116 uni2116 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2117 uni2117 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2118 weierstrass 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2119 uni2119 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211a uni211A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211b uni211B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211c Rfraktur 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211d uni211D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+211e prescription 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+211f uni211F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2120 uni2120 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2121 uni2121 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2122 trademark original +U+2123 uni2123 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2124 uni2124 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2125 uni2125 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2126 uni2126 2.2 +U+2127 uni2127 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2128 uni2128 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2129 uni2129 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212a uni212A 2.2 +U+212b uni212B 2.2 +U+212c uni212C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212d uni212D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+212e estimated 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+212f uni212F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2130 uni2130 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2131 uni2131 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2132 uni2132 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2133 uni2133 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2134 uni2134 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2135 aleph 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2136 uni2136 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2137 uni2137 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2138 uni2138 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2139 uni2139 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213a uni213A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213b uni213B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+213c uni213C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213d uni213D 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213e uni213E 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+213f uni213F 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2140 uni2140 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2141 uni2141 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2142 uni2142 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2143 uni2143 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2144 uni2144 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans ExtraLight) +U+2145 uni2145 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2146 uni2146 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2147 uni2147 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+2148 uni2148 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2149 uni2149 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.22 (Serif, Serif Condensed) +U+214b uni214B 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+214e uni214E 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2150 uni2150 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2151 uni2151 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2152 uni2152 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2153 onethird 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2154 twothirds 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2155 uni2155 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2156 uni2156 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2157 uni2157 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2158 uni2158 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2159 uni2159 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215a uni215A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215b oneeighth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215c threeeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215d fiveeighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215e seveneighths 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+215f uni215F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.6 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2160 uni2160 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2161 uni2161 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2162 uni2162 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2163 uni2163 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2164 uni2164 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2165 uni2165 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2166 uni2166 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2167 uni2167 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2168 uni2168 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2169 uni2169 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216a uni216A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216b uni216B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216c uni216C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216d uni216D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216e uni216E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+216f uni216F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2170 uni2170 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2171 uni2171 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2172 uni2172 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2173 uni2173 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2174 uni2174 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2175 uni2175 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2176 uni2176 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2177 uni2177 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2178 uni2178 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2179 uni2179 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217a uni217A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217b uni217B 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217c uni217C 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217d uni217D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217e uni217E 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+217f uni217F 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2180 uni2180 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2181 uni2181 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+2182 uni2182 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans ExtraLight) +U+2183 uni2183 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2184 uni2184 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2185 uni2185 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2189 uni2189 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2190 arrowleft 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2191 arrowup 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2192 arrowright 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2193 arrowdown 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2194 arrowboth 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2195 arrowupdn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2196 uni2196 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2197 uni2197 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2198 uni2198 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2199 uni2199 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219a uni219A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219b uni219B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219c uni219C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219d uni219D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219e uni219E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+219f uni219F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a0 uni21A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a1 uni21A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a2 uni21A2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a3 uni21A3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a4 uni21A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a5 uni21A5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a6 uni21A6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a7 uni21A7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a8 arrowupdnbse 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21a9 uni21A9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21aa uni21AA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ab uni21AB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ac uni21AC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ad uni21AD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ae uni21AE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21af uni21AF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b0 uni21B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b1 uni21B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b2 uni21B2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b3 uni21B3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b4 uni21B4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b5 carriagereturn 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b6 uni21B6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b7 uni21B7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b8 uni21B8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21b9 uni21B9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ba uni21BA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bb uni21BB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bc uni21BC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bd uni21BD 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21be uni21BE 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21bf uni21BF 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c0 uni21C0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c1 uni21C1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c2 uni21C2 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c3 uni21C3 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c4 uni21C4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c5 uni21C5 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c6 uni21C6 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c7 uni21C7 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c8 uni21C8 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21c9 uni21C9 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ca uni21CA 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cb uni21CB 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cc uni21CC 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cd uni21CD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ce uni21CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21cf uni21CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d0 arrowdblleft 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d1 arrowdblup 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d2 arrowdblright 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d3 arrowdbldown 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d4 arrowdblboth 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d5 uni21D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d6 uni21D6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d7 uni21D7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d8 uni21D8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21d9 uni21D9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21da uni21DA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21db uni21DB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21dc uni21DC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21dd uni21DD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21de uni21DE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21df uni21DF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e0 uni21E0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e1 uni21E1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e2 uni21E2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e3 uni21E3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e4 uni21E4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e5 uni21E5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e6 uni21E6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e7 uni21E7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e8 uni21E8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21e9 uni21E9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ea uni21EA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21eb uni21EB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ec uni21EC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ed uni21ED 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ee uni21EE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ef uni21EF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f0 uni21F0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f1 uni21F1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f2 uni21F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f3 uni21F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f4 uni21F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f5 uni21F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f6 uni21F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f7 uni21F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f8 uni21F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21f9 uni21F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fa uni21FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fb uni21FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fc uni21FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fd uni21FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21fe uni21FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+21ff uni21FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2200 universal 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2201 uni2201 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2202 partialdiff original +U+2203 existential 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans ExtraLight) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2204 uni2204 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2205 emptyset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2206 Delta original +U+2207 gradient 2.1 +U+2208 element 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2209 notelement 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220a uni220A 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220b suchthat 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220c uni220C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+220d uni220D 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+220e uni220E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+220f product original +U+2210 uni2210 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2211 summation original +U+2212 minus original +U+2213 uni2213 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2214 uni2214 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2215 uni2215 original +U+2216 uni2216 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2217 asteriskmath 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2218 uni2218 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2219 uni2219 original +U+221a radical original +U+221b uni221B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221c uni221C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.26 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+221d proportional 2.1 +U+221e infinity original +U+221f orthogonal 2.1 +U+2220 angle 2.3 +U+2221 uni2221 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2222 uni2222 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2223 uni2223 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2224 uni2224 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2225 uni2225 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2226 uni2226 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2227 logicaland 2.1 +U+2228 logicalor 2.1 +U+2229 intersection 2.1 +U+222a union 2.1 +U+222b integral original +U+222c uni222C 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+222d uni222D 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+222e uni222E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+222f uni222F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2230 uni2230 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2231 uni2231 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2232 uni2232 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2233 uni2233 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2234 therefore 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2235 uni2235 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2236 uni2236 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2237 uni2237 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2238 uni2238 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2239 uni2239 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223a uni223A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223b uni223B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223c similar 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223d uni223D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+223e uni223E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+223f uni223F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2240 uni2240 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2241 uni2241 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2242 uni2242 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2243 uni2243 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2244 uni2244 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2245 congruent 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2246 uni2246 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2247 uni2247 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2248 approxequal original +U+2249 uni2249 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224a uni224A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224b uni224B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224c uni224C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224d uni224D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224e uni224E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+224f uni224F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2250 uni2250 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2251 uni2251 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2252 uni2252 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2253 uni2253 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2254 uni2254 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2255 uni2255 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2256 uni2256 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2257 uni2257 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2258 uni2258 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2259 uni2259 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225a uni225A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225b uni225B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225c uni225C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225d uni225D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225e uni225E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+225f uni225F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2260 notequal original +U+2261 equivalence 2.1 +U+2262 uni2262 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2263 uni2263 2.1 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2264 lessequal original +U+2265 greaterequal original +U+2266 uni2266 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2267 uni2267 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2268 uni2268 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2269 uni2269 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226a uni226A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226b uni226B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226c uni226C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+226d uni226D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226e uni226E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+226f uni226F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2270 uni2270 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2271 uni2271 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2272 uni2272 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2273 uni2273 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2274 uni2274 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2275 uni2275 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2276 uni2276 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2277 uni2277 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2278 uni2278 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2279 uni2279 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227a uni227A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227b uni227B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227c uni227C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227d uni227D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227e uni227E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+227f uni227F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2280 uni2280 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2281 uni2281 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2282 propersubset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2283 propersuperset 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2284 notsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2285 uni2285 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2286 reflexsubset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2287 reflexsuperset 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2288 uni2288 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2289 uni2289 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+228a uni228A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228b uni228B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.6 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+228c uni228C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228d uni228D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228e uni228E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+228f uni228F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2290 uni2290 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2291 uni2291 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2292 uni2292 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2293 uni2293 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2294 uni2294 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2295 circleplus 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2296 uni2296 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2297 circlemultiply 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2298 uni2298 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2299 uni2299 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229a uni229A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229b uni229B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229c uni229C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229d uni229D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229e uni229E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+229f uni229F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a0 uni22A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a1 uni22A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a2 uni22A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a3 uni22A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a4 uni22A4 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a5 perpendicular 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.32 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22a6 uni22A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a7 uni22A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a8 uni22A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22a9 uni22A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22aa uni22AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ab uni22AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ac uni22AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ad uni22AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22ae uni22AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22af uni22AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22b0 uni22B0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b1 uni22B1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b2 uni22B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b3 uni22B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b4 uni22B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b5 uni22B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b6 uni22B6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b7 uni22B7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b8 uni22B8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22b9 uni22B9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ba uni22BA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bb uni22BB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bc uni22BC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22bd uni22BD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22be uni22BE 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+22bf uni22BF 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+22c0 uni22C0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c1 uni22C1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c2 uni22C2 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c3 uni22C3 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c4 uni22C4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c5 dotmath 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+22c6 uni22C6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+22c7 uni22C7 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c8 uni22C8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22c9 uni22C9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ca uni22CA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cb uni22CB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cc uni22CC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cd uni22CD 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22ce uni22CE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22cf uni22CF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d0 uni22D0 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d1 uni22D1 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d2 uni22D2 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d3 uni22D3 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d4 uni22D4 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d5 uni22D5 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d6 uni22D6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d7 uni22D7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22d8 uni22D8 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22d9 uni22D9 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22da uni22DA 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22db uni22DB 2.6 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.7 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+22dc uni22DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22dd uni22DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22de uni22DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22df uni22DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e0 uni22E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e1 uni22E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e2 uni22E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e3 uni22E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e4 uni22E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e5 uni22E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e6 uni22E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e7 uni22E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e8 uni22E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22e9 uni22E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+22ea uni22EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22eb uni22EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ec uni22EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ed uni22ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ee uni22EE 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ef uni22EF 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f0 uni22F0 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f1 uni22F1 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f2 uni22F2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f3 uni22F3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f4 uni22F4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f5 uni22F5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f6 uni22F6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f7 uni22F7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f8 uni22F8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22f9 uni22F9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fa uni22FA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fb uni22FB 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fc uni22FC 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fd uni22FD 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22fe uni22FE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+22ff uni22FF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2300 uni2300 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2301 uni2301 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2302 house 1.14 +U+2303 uni2303 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2304 uni2304 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2305 uni2305 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2306 uni2306 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2307 uni2307 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2308 uni2308 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2309 uni2309 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230a uni230A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230b uni230B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+230c uni230C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230d uni230D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230e uni230E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+230f uni230F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2310 revlogicalnot 1.14 +U+2311 uni2311 1.15 +U+2312 uni2312 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2313 uni2313 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2314 uni2314 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2315 uni2315 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2318 uni2318 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2319 uni2319 1.14 +U+231c uni231C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231d uni231D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231e uni231E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+231f uni231F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2320 integraltp 2.3 +U+2321 integralbt 2.3 +U+2324 uni2324 2.16 (Sans, Sans Bold, Sans Bold Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique) 2.19 (Sans Condensed Oblique, Sans Oblique) +U+2325 uni2325 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2326 uni2326 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2327 uni2327 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2328 uni2328 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2329 angleleft 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) +U+232a angleright 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.10 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) +U+232b uni232B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+232c uni232C 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2335 uni2335 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2337 uni2337 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2338 uni2338 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2339 uni2339 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233a uni233A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233b uni233B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233c uni233C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233d uni233D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+233e uni233E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2341 uni2341 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2342 uni2342 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2343 uni2343 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2344 uni2344 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2347 uni2347 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2348 uni2348 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2349 uni2349 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234b uni234B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234c uni234C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+234d uni234D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2350 uni2350 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2352 uni2352 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2353 uni2353 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2354 uni2354 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2357 uni2357 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2358 uni2358 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2359 uni2359 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235a uni235A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235b uni235B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235c uni235C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235e uni235E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+235f uni235F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2360 uni2360 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2363 uni2363 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2364 uni2364 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2365 uni2365 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2368 uni2368 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2369 uni2369 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236b uni236B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236c uni236C 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236d uni236D 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236e uni236E 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+236f uni236F 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2370 uni2370 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2373 uni2373 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2374 uni2374 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2375 uni2375 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2376 uni2376 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2377 uni2377 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2378 uni2378 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2379 uni2379 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+237a uni237A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+237d uni237D 1.15 +U+2380 uni2380 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2381 uni2381 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2382 uni2382 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2383 uni2383 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2387 uni2387 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2388 uni2388 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2389 uni2389 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238a uni238A 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+238b uni238B 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2394 uni2394 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2395 uni2395 2.14 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+239b uni239B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239c uni239C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239d uni239D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239e uni239E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+239f uni239F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a0 uni23A0 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a1 uni23A1 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a2 uni23A2 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a3 uni23A3 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a4 uni23A4 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a5 uni23A5 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a6 uni23A6 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a7 uni23A7 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a8 uni23A8 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23a9 uni23A9 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23aa uni23AA 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ab uni23AB 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ac uni23AC 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ad uni23AD 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+23ae uni23AE 2.3 +U+23ce uni23CE 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+23cf uni23CF 2.3 +U+23e3 uni23E3 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+23e5 uni23E5 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+23e8 uni23E8 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2422 uni2422 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2423 uni2423 1.6 +U+2460 uni2460 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2461 uni2461 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2462 uni2462 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2463 uni2463 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2464 uni2464 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2465 uni2465 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2466 uni2466 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2467 uni2467 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2468 uni2468 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2469 uni2469 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2500 SF100000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2501 uni2501 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2502 SF110000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2503 uni2503 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2504 uni2504 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2505 uni2505 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2506 uni2506 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2507 uni2507 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2508 uni2508 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2509 uni2509 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250a uni250A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250b uni250B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250c SF010000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250d uni250D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250e uni250E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+250f uni250F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2510 SF030000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2511 uni2511 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2512 uni2512 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2513 uni2513 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2514 SF020000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2515 uni2515 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2516 uni2516 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2517 uni2517 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2518 SF040000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2519 uni2519 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251a uni251A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251b uni251B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251c SF080000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251d uni251D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251e uni251E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+251f uni251F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2520 uni2520 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2521 uni2521 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2522 uni2522 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2523 uni2523 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2524 SF090000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2525 uni2525 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2526 uni2526 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2527 uni2527 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2528 uni2528 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2529 uni2529 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252a uni252A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252b uni252B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252c SF060000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252d uni252D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252e uni252E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+252f uni252F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2530 uni2530 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2531 uni2531 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2532 uni2532 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2533 uni2533 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2534 SF070000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2535 uni2535 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2536 uni2536 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2537 uni2537 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2538 uni2538 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2539 uni2539 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253a uni253A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253b uni253B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253c SF050000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253d uni253D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253e uni253E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+253f uni253F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2540 uni2540 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2541 uni2541 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2542 uni2542 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2543 uni2543 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2544 uni2544 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2545 uni2545 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2546 uni2546 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2547 uni2547 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2548 uni2548 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2549 uni2549 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254a uni254A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254b uni254B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254c uni254C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254d uni254D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254e uni254E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+254f uni254F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2550 SF430000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2551 SF240000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2552 SF510000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2553 SF520000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2554 SF390000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2555 SF220000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2556 SF210000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2557 SF250000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2558 SF500000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2559 SF490000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255a SF380000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255b SF280000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255c SF270000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255d SF260000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255e SF360000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+255f SF370000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2560 SF420000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2561 SF190000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2562 SF200000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2563 SF230000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2564 SF470000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2565 SF480000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2566 SF410000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2567 SF450000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2568 SF460000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2569 SF400000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256a SF540000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256b SF530000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256c SF440000 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256d uni256D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256e uni256E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+256f uni256F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2570 uni2570 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2571 uni2571 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2572 uni2572 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2573 uni2573 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2574 uni2574 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2575 uni2575 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2576 uni2576 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2577 uni2577 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2578 uni2578 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2579 uni2579 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257a uni257A 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257b uni257B 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257c uni257C 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257d uni257D 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257e uni257E 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+257f uni257F 1.12 (Sans Mono, Sans Mono Oblique) 2.21 (Sans, Sans Condensed, Sans Condensed Oblique, Sans Oblique, Serif, Serif Condensed, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2580 upblock 1.14 +U+2581 uni2581 1.14 +U+2582 uni2582 1.14 +U+2583 uni2583 1.14 +U+2584 dnblock 1.14 +U+2585 uni2585 1.14 +U+2586 uni2586 1.14 +U+2587 uni2587 1.14 +U+2588 block 1.14 +U+2589 uni2589 1.14 +U+258a uni258A 1.14 +U+258b uni258B 1.14 +U+258c lfblock 1.14 +U+258d uni258D 1.14 +U+258e uni258E 1.14 +U+258f uni258F 1.14 +U+2590 rtblock 1.14 +U+2591 ltshade 1.15 +U+2592 shade 1.15 +U+2593 dkshade 1.15 +U+2594 uni2594 1.14 +U+2595 uni2595 1.14 +U+2596 uni2596 1.14 +U+2597 uni2597 1.14 +U+2598 uni2598 1.14 +U+2599 uni2599 1.14 +U+259a uni259A 1.14 +U+259b uni259B 1.14 +U+259c uni259C 1.14 +U+259d uni259D 1.14 +U+259e uni259E 1.14 +U+259f uni259F 1.14 +U+25a0 filledbox 2.3 +U+25a1 H22073 2.3 +U+25a2 uni25A2 2.3 +U+25a3 uni25A3 2.3 +U+25a4 uni25A4 2.3 +U+25a5 uni25A5 2.3 +U+25a6 uni25A6 2.3 +U+25a7 uni25A7 2.3 +U+25a8 uni25A8 2.3 +U+25a9 uni25A9 2.3 +U+25aa H18543 2.3 +U+25ab H18551 2.3 +U+25ac filledrect 2.3 +U+25ad uni25AD 2.3 +U+25ae uni25AE 2.3 +U+25af uni25AF 2.3 +U+25b0 uni25B0 2.3 +U+25b1 uni25B1 2.3 +U+25b2 triagup 2.3 +U+25b3 uni25B3 2.3 +U+25b4 uni25B4 2.3 +U+25b5 uni25B5 2.3 +U+25b6 uni25B6 2.3 +U+25b7 uni25B7 2.3 +U+25b8 uni25B8 2.3 +U+25b9 uni25B9 2.3 +U+25ba triagrt 2.3 +U+25bb uni25BB 2.3 +U+25bc triagdn 2.3 +U+25bd uni25BD 2.3 +U+25be uni25BE 2.3 +U+25bf uni25BF 2.3 +U+25c0 uni25C0 2.3 +U+25c1 uni25C1 2.3 +U+25c2 uni25C2 2.3 +U+25c3 uni25C3 2.3 +U+25c4 triaglf 2.3 +U+25c5 uni25C5 2.3 +U+25c6 uni25C6 2.3 +U+25c7 uni25C7 2.3 +U+25c8 uni25C8 2.3 +U+25c9 uni25C9 2.3 +U+25ca lozenge original +U+25cb circle 2.3 +U+25cc uni25CC 2.3 +U+25cd uni25CD 2.3 +U+25ce uni25CE 2.3 +U+25cf H18533 2.3 +U+25d0 uni25D0 2.3 +U+25d1 uni25D1 2.3 +U+25d2 uni25D2 2.3 +U+25d3 uni25D3 2.3 +U+25d4 uni25D4 2.3 +U+25d5 uni25D5 2.3 +U+25d6 uni25D6 2.3 +U+25d7 uni25D7 2.3 +U+25d8 invbullet 2.2 +U+25d9 invcircle 2.3 +U+25da uni25DA 2.3 +U+25db uni25DB 2.3 +U+25dc uni25DC 2.3 +U+25dd uni25DD 2.3 +U+25de uni25DE 2.3 +U+25df uni25DF 2.3 +U+25e0 uni25E0 2.3 +U+25e1 uni25E1 2.3 +U+25e2 uni25E2 2.3 +U+25e3 uni25E3 2.3 +U+25e4 uni25E4 2.3 +U+25e5 uni25E5 2.3 +U+25e6 openbullet 2.2 +U+25e7 uni25E7 2.3 +U+25e8 uni25E8 2.3 +U+25e9 uni25E9 2.3 +U+25ea uni25EA 2.3 +U+25eb uni25EB 2.3 +U+25ec uni25EC 2.3 +U+25ed uni25ED 2.3 +U+25ee uni25EE 2.3 +U+25ef uni25EF 2.3 +U+25f0 uni25F0 2.3 +U+25f1 uni25F1 2.3 +U+25f2 uni25F2 2.3 +U+25f3 uni25F3 2.3 +U+25f4 uni25F4 2.3 +U+25f5 uni25F5 2.3 +U+25f6 uni25F6 2.3 +U+25f7 uni25F7 2.3 +U+25f8 uni25F8 2.3 +U+25f9 uni25F9 2.3 +U+25fa uni25FA 2.3 +U+25fb uni25FB 2.3 +U+25fc uni25FC 2.3 +U+25fd uni25FD 2.3 +U+25fe uni25FE 2.3 +U+25ff uni25FF 2.3 +U+2600 uni2600 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2601 uni2601 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2602 uni2602 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2603 uni2603 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2604 uni2604 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2605 uni2605 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2606 uni2606 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2607 uni2607 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2608 uni2608 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2609 uni2609 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260a uni260A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260b uni260B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260c uni260C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260d uni260D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260e uni260E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+260f uni260F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2610 uni2610 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2611 uni2611 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2612 uni2612 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2613 uni2613 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2614 uni2614 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2615 uni2615 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2616 uni2616 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2617 uni2617 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2618 uni2618 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2619 uni2619 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261a uni261A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261b uni261B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261c uni261C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261d uni261D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261e uni261E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+261f uni261F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2620 uni2620 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2621 uni2621 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2622 uni2622 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2623 uni2623 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2624 uni2624 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2625 uni2625 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2626 uni2626 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2627 uni2627 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2628 uni2628 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2629 uni2629 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262a uni262A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262b uni262B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262c uni262C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262d uni262D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262e uni262E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+262f uni262F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2630 uni2630 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2631 uni2631 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2632 uni2632 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2633 uni2633 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2634 uni2634 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2635 uni2635 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2636 uni2636 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2637 uni2637 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2638 uni2638 1.15 +U+2639 uni2639 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263a smileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263b invsmileface 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263c sun 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+263d uni263D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263e uni263E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+263f uni263F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2640 female 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2641 uni2641 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2642 male 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2643 uni2643 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2644 uni2644 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2645 uni2645 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2646 uni2646 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2647 uni2647 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2648 uni2648 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2649 uni2649 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264a uni264A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264b uni264B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264c uni264C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264d uni264D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264e uni264E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+264f uni264F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2650 uni2650 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2651 uni2651 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2652 uni2652 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2653 uni2653 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2654 uni2654 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2655 uni2655 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2656 uni2656 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2657 uni2657 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2658 uni2658 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2659 uni2659 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265a uni265A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265b uni265B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265c uni265C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265d uni265D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265e uni265E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+265f uni265F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2660 spade 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2661 uni2661 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2662 uni2662 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2663 club 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2664 uni2664 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2665 heart 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2666 diamond 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2667 uni2667 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2668 uni2668 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2669 uni2669 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266a musicalnote 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266b musicalnotedbl 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266c uni266C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266d uni266D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266e uni266E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+266f uni266F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2670 uni2670 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2671 uni2671 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2672 uni2672 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2673 uni2673 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2674 uni2674 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2675 uni2675 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2676 uni2676 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2677 uni2677 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2678 uni2678 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2679 uni2679 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267a uni267A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267b uni267B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267c uni267C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267d uni267D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267e uni267E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+267f uni267F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2680 uni2680 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2681 uni2681 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2682 uni2682 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2683 uni2683 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2684 uni2684 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2685 uni2685 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.4 (Sans ExtraLight) 2.7 (Sans Mono, Sans Mono Bold) +U+2686 uni2686 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2687 uni2687 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2688 uni2688 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2689 uni2689 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268a uni268A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268b uni268B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+268c uni268C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268d uni268D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268e uni268E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+268f uni268F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+2690 uni2690 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2691 uni2691 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2692 uni2692 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2693 uni2693 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2694 uni2694 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2695 uni2695 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2696 uni2696 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2697 uni2697 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2698 uni2698 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2699 uni2699 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269a uni269A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269b uni269B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+269c uni269C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a0 uni26A0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a1 uni26A1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+26a2 uni26A2 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a3 uni26A3 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a4 uni26A4 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a5 uni26A5 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a6 uni26A6 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a7 uni26A7 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a8 uni26A8 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26a9 uni26A9 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26aa uni26AA 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ab uni26AB 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ac uni26AC 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ad uni26AD 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26ae uni26AE 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26af uni26AF 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+26b0 uni26B0 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b1 uni26B1 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+26b2 uni26B2 2.12 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b3 uni26B3 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b4 uni26B4 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b5 uni26B5 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b6 uni26B6 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b7 uni26B7 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26b8 uni26B8 2.29 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c0 uni26C0 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c1 uni26C1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c2 uni26C2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26c3 uni26C3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+26e2 uni26E2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2701 uni2701 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2702 uni2702 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2703 uni2703 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2704 uni2704 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2706 uni2706 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2707 uni2707 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2708 uni2708 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2709 uni2709 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270c uni270C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270d uni270D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270e uni270E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+270f uni270F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2710 uni2710 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2711 uni2711 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2712 uni2712 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2713 uni2713 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2714 uni2714 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2715 uni2715 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2716 uni2716 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2717 uni2717 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2718 uni2718 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2719 uni2719 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271a uni271A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271b uni271B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271c uni271C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271d uni271D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271e uni271E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+271f uni271F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2720 uni2720 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2721 uni2721 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2722 uni2722 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2723 uni2723 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2724 uni2724 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2725 uni2725 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2726 uni2726 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2727 uni2727 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2729 uni2729 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272a uni272A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272b uni272B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272c uni272C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272d uni272D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272e uni272E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+272f uni272F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2730 uni2730 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2731 uni2731 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2732 uni2732 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2733 uni2733 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2734 uni2734 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2735 uni2735 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2736 uni2736 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2737 uni2737 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2738 uni2738 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2739 uni2739 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273a uni273A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273b uni273B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273c uni273C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273d uni273D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273e uni273E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+273f uni273F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2740 uni2740 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2741 uni2741 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2742 uni2742 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2743 uni2743 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2744 uni2744 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2745 uni2745 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2746 uni2746 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2747 uni2747 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2748 uni2748 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2749 uni2749 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274a uni274A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274b uni274B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274d uni274D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+274f uni274F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2750 uni2750 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2751 uni2751 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2752 uni2752 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2756 uni2756 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2758 uni2758 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2759 uni2759 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275a uni275A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275b uni275B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275c uni275C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275d uni275D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+275e uni275E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2761 uni2761 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2762 uni2762 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2763 uni2763 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2764 uni2764 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2765 uni2765 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2766 uni2766 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2767 uni2767 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2768 uni2768 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2769 uni2769 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276a uni276A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276b uni276B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276c uni276C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276d uni276D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276e uni276E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+276f uni276F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2770 uni2770 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2771 uni2771 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2772 uni2772 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2773 uni2773 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2774 uni2774 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2775 uni2775 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Sans Mono, Sans Mono Bold) +U+2776 uni2776 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2777 uni2777 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2778 uni2778 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2779 uni2779 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277a uni277A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277b uni277B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277c uni277C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277d uni277D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277e uni277E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+277f uni277F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2780 uni2780 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2781 uni2781 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2782 uni2782 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2783 uni2783 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2784 uni2784 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2785 uni2785 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2786 uni2786 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2787 uni2787 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2788 uni2788 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2789 uni2789 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278a uni278A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278b uni278B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278c uni278C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278d uni278D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278e uni278E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+278f uni278F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2790 uni2790 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2791 uni2791 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2792 uni2792 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2793 uni2793 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2794 uni2794 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2798 uni2798 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+2799 uni2799 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279a uni279A 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279b uni279B 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279c uni279C 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279d uni279D 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279e uni279E 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+279f uni279F 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a0 uni27A0 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a1 uni27A1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27a2 uni27A2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a3 uni27A3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a4 uni27A4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a5 uni27A5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a6 uni27A6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a7 uni27A7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a8 uni27A8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27a9 uni27A9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27aa uni27AA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ab uni27AB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ac uni27AC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ad uni27AD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ae uni27AE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27af uni27AF 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b1 uni27B1 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b2 uni27B2 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b3 uni27B3 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b4 uni27B4 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b5 uni27B5 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b6 uni27B6 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b7 uni27B7 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b8 uni27B8 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27b9 uni27B9 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27ba uni27BA 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bb uni27BB 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bc uni27BC 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bd uni27BD 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27be uni27BE 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.7 (Sans Mono, Sans Mono Bold) +U+27bf uni27BF 2.7 (Sans Mono Bold) +U+27c2 uni27C2 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+27c5 uni27C5 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+27c6 uni27C6 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+27e0 uni27E0 2.3 +U+27e6 uni27E6 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+27e7 uni27E7 2.15 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+27e8 uni27E8 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27e9 uni27E9 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.13 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27ea uni27EA 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27eb uni27EB 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+27f0 uni27F0 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f1 uni27F1 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f2 uni27F2 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f3 uni27F3 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f4 uni27F4 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f5 uni27F5 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f6 uni27F6 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f7 uni27F7 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f8 uni27F8 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27f9 uni27F9 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fa uni27FA 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fb uni27FB 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fc uni27FC 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fd uni27FD 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27fe uni27FE 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+27ff uni27FF 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2800 uni2800 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2801 uni2801 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2802 uni2802 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2803 uni2803 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2804 uni2804 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2805 uni2805 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2806 uni2806 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2807 uni2807 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2808 uni2808 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2809 uni2809 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280a uni280A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280b uni280B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280c uni280C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280d uni280D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280e uni280E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+280f uni280F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2810 uni2810 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2811 uni2811 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2812 uni2812 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2813 uni2813 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2814 uni2814 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2815 uni2815 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2816 uni2816 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2817 uni2817 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2818 uni2818 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2819 uni2819 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281a uni281A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281b uni281B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281c uni281C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281d uni281D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281e uni281E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+281f uni281F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2820 uni2820 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2821 uni2821 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2822 uni2822 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2823 uni2823 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2824 uni2824 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2825 uni2825 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2826 uni2826 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2827 uni2827 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2828 uni2828 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2829 uni2829 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282a uni282A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282b uni282B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282c uni282C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282d uni282D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282e uni282E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+282f uni282F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2830 uni2830 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2831 uni2831 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2832 uni2832 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2833 uni2833 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2834 uni2834 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2835 uni2835 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2836 uni2836 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2837 uni2837 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2838 uni2838 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2839 uni2839 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283a uni283A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283b uni283B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283c uni283C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283d uni283D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283e uni283E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+283f uni283F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2840 uni2840 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2841 uni2841 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2842 uni2842 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2843 uni2843 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2844 uni2844 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2845 uni2845 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2846 uni2846 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2847 uni2847 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2848 uni2848 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2849 uni2849 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284a uni284A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284b uni284B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284c uni284C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284d uni284D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284e uni284E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+284f uni284F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2850 uni2850 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2851 uni2851 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2852 uni2852 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2853 uni2853 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2854 uni2854 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2855 uni2855 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2856 uni2856 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2857 uni2857 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2858 uni2858 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2859 uni2859 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285a uni285A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285b uni285B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285c uni285C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285d uni285D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285e uni285E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+285f uni285F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2860 uni2860 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2861 uni2861 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2862 uni2862 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2863 uni2863 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2864 uni2864 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2865 uni2865 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2866 uni2866 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2867 uni2867 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2868 uni2868 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2869 uni2869 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286a uni286A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286b uni286B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286c uni286C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286d uni286D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286e uni286E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+286f uni286F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2870 uni2870 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2871 uni2871 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2872 uni2872 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2873 uni2873 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2874 uni2874 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2875 uni2875 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2876 uni2876 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2877 uni2877 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2878 uni2878 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2879 uni2879 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287a uni287A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287b uni287B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287c uni287C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287d uni287D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287e uni287E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+287f uni287F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2880 uni2880 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2881 uni2881 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2882 uni2882 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2883 uni2883 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2884 uni2884 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2885 uni2885 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2886 uni2886 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2887 uni2887 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2888 uni2888 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2889 uni2889 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288a uni288A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288b uni288B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288c uni288C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288d uni288D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288e uni288E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+288f uni288F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2890 uni2890 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2891 uni2891 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2892 uni2892 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2893 uni2893 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2894 uni2894 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2895 uni2895 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2896 uni2896 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2897 uni2897 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2898 uni2898 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2899 uni2899 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289a uni289A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289b uni289B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289c uni289C 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289d uni289D 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289e uni289E 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+289f uni289F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a0 uni28A0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a1 uni28A1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a2 uni28A2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a3 uni28A3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a4 uni28A4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a5 uni28A5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a6 uni28A6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a7 uni28A7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a8 uni28A8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28a9 uni28A9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28aa uni28AA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ab uni28AB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ac uni28AC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ad uni28AD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ae uni28AE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28af uni28AF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b0 uni28B0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b1 uni28B1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b2 uni28B2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b3 uni28B3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b4 uni28B4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b5 uni28B5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b6 uni28B6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b7 uni28B7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b8 uni28B8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28b9 uni28B9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ba uni28BA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bb uni28BB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bc uni28BC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bd uni28BD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28be uni28BE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28bf uni28BF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c0 uni28C0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c1 uni28C1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c2 uni28C2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c3 uni28C3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c4 uni28C4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c5 uni28C5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c6 uni28C6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c7 uni28C7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c8 uni28C8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28c9 uni28C9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ca uni28CA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cb uni28CB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cc uni28CC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cd uni28CD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ce uni28CE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28cf uni28CF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d0 uni28D0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d1 uni28D1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d2 uni28D2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d3 uni28D3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d4 uni28D4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d5 uni28D5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d6 uni28D6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d7 uni28D7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d8 uni28D8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28d9 uni28D9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28da uni28DA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28db uni28DB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dc uni28DC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28dd uni28DD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28de uni28DE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28df uni28DF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e0 uni28E0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e1 uni28E1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e2 uni28E2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e3 uni28E3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e4 uni28E4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e5 uni28E5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e6 uni28E6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e7 uni28E7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e8 uni28E8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28e9 uni28E9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ea uni28EA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28eb uni28EB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ec uni28EC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ed uni28ED 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ee uni28EE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ef uni28EF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f0 uni28F0 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f1 uni28F1 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f2 uni28F2 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f3 uni28F3 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f4 uni28F4 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f5 uni28F5 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f6 uni28F6 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f7 uni28F7 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f8 uni28F8 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28f9 uni28F9 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fa uni28FA 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fb uni28FB 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fc uni28FC 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fd uni28FD 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28fe uni28FE 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+28ff uni28FF 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2900 uni2900 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2901 uni2901 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2902 uni2902 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2903 uni2903 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2904 uni2904 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2905 uni2905 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2906 uni2906 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2907 uni2907 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2908 uni2908 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2909 uni2909 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290a uni290A 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290b uni290B 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290c uni290C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290d uni290D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290e uni290E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+290f uni290F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2910 uni2910 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2911 uni2911 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2912 uni2912 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2913 uni2913 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2914 uni2914 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2915 uni2915 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2916 uni2916 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2917 uni2917 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2918 uni2918 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2919 uni2919 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291a uni291A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291b uni291B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291c uni291C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291d uni291D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291e uni291E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+291f uni291F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2920 uni2920 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2921 uni2921 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2922 uni2922 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2923 uni2923 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2924 uni2924 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2925 uni2925 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2926 uni2926 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2927 uni2927 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2928 uni2928 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2929 uni2929 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292a uni292A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292b uni292B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292c uni292C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292d uni292D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292e uni292E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+292f uni292F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2930 uni2930 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2931 uni2931 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2932 uni2932 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2933 uni2933 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2934 uni2934 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2935 uni2935 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2936 uni2936 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2937 uni2937 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2938 uni2938 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2939 uni2939 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293a uni293A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293b uni293B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293c uni293C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293d uni293D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293e uni293E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+293f uni293F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2940 uni2940 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2941 uni2941 2.13 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2942 uni2942 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2943 uni2943 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2944 uni2944 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2945 uni2945 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2946 uni2946 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2947 uni2947 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2948 uni2948 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2949 uni2949 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294a uni294A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294b uni294B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294c uni294C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294d uni294D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294e uni294E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+294f uni294F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2950 uni2950 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2951 uni2951 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2952 uni2952 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2953 uni2953 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2954 uni2954 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2955 uni2955 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2956 uni2956 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2957 uni2957 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2958 uni2958 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2959 uni2959 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295a uni295A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295b uni295B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295c uni295C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295d uni295D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295e uni295E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+295f uni295F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2960 uni2960 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2961 uni2961 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2962 uni2962 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2963 uni2963 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2964 uni2964 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2965 uni2965 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2966 uni2966 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2967 uni2967 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2968 uni2968 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2969 uni2969 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296a uni296A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296b uni296B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296c uni296C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296d uni296D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296e uni296E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+296f uni296F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2970 uni2970 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2971 uni2971 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2972 uni2972 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2973 uni2973 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2974 uni2974 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2975 uni2975 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2976 uni2976 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2977 uni2977 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2978 uni2978 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2979 uni2979 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297a uni297A 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297b uni297B 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297c uni297C 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297d uni297D 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297e uni297E 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+297f uni297F 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2983 uni2983 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2984 uni2984 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+29ce uni29CE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29cf uni29CF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d0 uni29D0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d1 uni29D1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d2 uni29D2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d3 uni29D3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d4 uni29D4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29d5 uni29D5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+29eb uni29EB 2.2 +U+29fa uni29FA 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+29fb uni29FB 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+2a00 uni2A00 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a01 uni2A01 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a02 uni2A02 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a0c uni2A0C 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0d uni2A0D 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0e uni2A0E 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.9 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2a0f uni2A0F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a10 uni2A10 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a11 uni2A11 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a12 uni2A12 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a13 uni2A13 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a14 uni2A14 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a15 uni2A15 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a16 uni2A16 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a17 uni2A17 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a18 uni2A18 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a19 uni2A19 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1a uni2A1A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1b uni2A1B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a1c uni2A1C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a2f uni2A2F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2a6a uni2A6A 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2a6b uni2A6B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2a7d uni2A7D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7e uni2A7E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a7f uni2A7F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a80 uni2A80 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a81 uni2A81 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a82 uni2A82 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a83 uni2A83 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a84 uni2A84 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a85 uni2A85 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a86 uni2A86 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a87 uni2A87 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a88 uni2A88 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a89 uni2A89 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8a uni2A8A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8b uni2A8B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8c uni2A8C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8d uni2A8D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8e uni2A8E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a8f uni2A8F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a90 uni2A90 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a91 uni2A91 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a92 uni2A92 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a93 uni2A93 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a94 uni2A94 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a95 uni2A95 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a96 uni2A96 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a97 uni2A97 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a98 uni2A98 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a99 uni2A99 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9a uni2A9A 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9b uni2A9B 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9c uni2A9C 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9d uni2A9D 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9e uni2A9E 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2a9f uni2A9F 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aa0 uni2AA0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aae uni2AAE 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aaf uni2AAF 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab0 uni2AB0 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab1 uni2AB1 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab2 uni2AB2 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab3 uni2AB3 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab4 uni2AB4 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab5 uni2AB5 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab6 uni2AB6 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab7 uni2AB7 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab8 uni2AB8 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2ab9 uni2AB9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2aba uni2ABA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2af9 uni2AF9 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2afa uni2AFA 2.7 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b00 uni2B00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b01 uni2B01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b02 uni2B02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b03 uni2B03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b04 uni2B04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b05 uni2B05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b06 uni2B06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b07 uni2B07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b08 uni2B08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b09 uni2B09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0a uni2B0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0b uni2B0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0c uni2B0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0d uni2B0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+2b0e uni2B0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b0f uni2B0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b10 uni2B10 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b11 uni2B11 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2b12 uni2B12 2.3 +U+2b13 uni2B13 2.3 +U+2b14 uni2B14 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b15 uni2B15 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b16 uni2B16 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b17 uni2B17 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b18 uni2B18 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b19 uni2B19 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b1a uni2B1A 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Italic) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+2b1f uni2B1F 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b20 uni2B20 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b21 uni2B21 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b22 uni2B22 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b23 uni2B23 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2b24 uni2B24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b53 uni2B53 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2b54 uni2B54 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+2c60 uni2C60 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c61 uni2C61 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c62 uni2C62 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c63 uni2C63 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c64 uni2C64 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2c65 uni2C65 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c66 uni2C66 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c67 uni2C67 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c68 uni2C68 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c69 uni2C69 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6a uni2C6A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6b uni2C6B 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6c uni2C6C 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) 2.18 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+2c6d uni2C6D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c6e uni2C6E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+2c6f uni2C6F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c70 uni2C70 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c71 uni2C71 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c72 uni2C72 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c73 uni2C73 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.31 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c74 uni2C74 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+2c75 uni2C75 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c76 uni2C76 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c77 uni2C77 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.20 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.23 (Serif Italic Condensed) +U+2c79 uni2C79 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7a uni2C7A 2.27 +U+2c7b uni2C7B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.34 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c7c uni2C7C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7d uni2C7D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.28 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.31 (Serif Condensed Italic) +U+2c7e uni2C7E 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2c7f uni2C7F 2.31 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2d00 uni2D00 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d01 uni2D01 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d02 uni2D02 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d03 uni2D03 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d04 uni2D04 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d05 uni2D05 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d06 uni2D06 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d07 uni2D07 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d08 uni2D08 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d09 uni2D09 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0a uni2D0A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0b uni2D0B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0c uni2D0C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0d uni2D0D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0e uni2D0E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d0f uni2D0F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d10 uni2D10 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d11 uni2D11 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d12 uni2D12 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d13 uni2D13 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d14 uni2D14 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d15 uni2D15 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d16 uni2D16 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d17 uni2D17 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d18 uni2D18 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d19 uni2D19 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1a uni2D1A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1b uni2D1B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1c uni2D1C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1d uni2D1D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1e uni2D1E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d1f uni2D1F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d20 uni2D20 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d21 uni2D21 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d22 uni2D22 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d23 uni2D23 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d24 uni2D24 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d25 uni2D25 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+2d30 uni2D30 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d31 uni2D31 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d32 uni2D32 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d33 uni2D33 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d34 uni2D34 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d35 uni2D35 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d36 uni2D36 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d37 uni2D37 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d38 uni2D38 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d39 uni2D39 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3a uni2D3A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3b uni2D3B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3c uni2D3C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3d uni2D3D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3e uni2D3E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d3f uni2D3F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d40 uni2D40 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d41 uni2D41 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d42 uni2D42 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d43 uni2D43 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d44 uni2D44 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d45 uni2D45 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d46 uni2D46 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d47 uni2D47 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d48 uni2D48 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d49 uni2D49 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4a uni2D4A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4b uni2D4B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4c uni2D4C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4d uni2D4D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4e uni2D4E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d4f uni2D4F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d50 uni2D50 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d51 uni2D51 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d52 uni2D52 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d53 uni2D53 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d54 uni2D54 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d55 uni2D55 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d56 uni2D56 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d57 uni2D57 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d58 uni2D58 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d59 uni2D59 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5a uni2D5A 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5b uni2D5B 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5c uni2D5C 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5d uni2D5D 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5e uni2D5E 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d5f uni2D5F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d60 uni2D60 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d61 uni2D61 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d62 uni2D62 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d63 uni2D63 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d64 uni2D64 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d65 uni2D65 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2d6f uni2D6F 2.18 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+2e18 uni2E18 2.26 +U+2e1e uni2E1E 2.34 (Sans, Sans Condensed) +U+2e1f uni2E1F 2.34 (Sans Bold, Sans Bold Oblique, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+2e22 uni2E22 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e23 uni2E23 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e24 uni2E24 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e25 uni2E25 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.30 (Sans Bold) 2.31 (Serif Condensed Italic) +U+2e2e uni2E2E 2.26 +U+4dc0 uni4DC0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc1 uni4DC1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc2 uni4DC2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc3 uni4DC3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc4 uni4DC4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc5 uni4DC5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc6 uni4DC6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc7 uni4DC7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc8 uni4DC8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dc9 uni4DC9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dca uni4DCA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcb uni4DCB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcc uni4DCC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcd uni4DCD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dce uni4DCE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dcf uni4DCF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd0 uni4DD0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd1 uni4DD1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd2 uni4DD2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd3 uni4DD3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd4 uni4DD4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd5 uni4DD5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd6 uni4DD6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd7 uni4DD7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd8 uni4DD8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dd9 uni4DD9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dda uni4DDA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddb uni4DDB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddc uni4DDC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddd uni4DDD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dde uni4DDE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ddf uni4DDF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de0 uni4DE0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de1 uni4DE1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de2 uni4DE2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de3 uni4DE3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de4 uni4DE4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de5 uni4DE5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de6 uni4DE6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de7 uni4DE7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de8 uni4DE8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4de9 uni4DE9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dea uni4DEA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4deb uni4DEB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dec uni4DEC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4ded uni4DED 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dee uni4DEE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4def uni4DEF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df0 uni4DF0 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df1 uni4DF1 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df2 uni4DF2 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df3 uni4DF3 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df4 uni4DF4 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df5 uni4DF5 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df6 uni4DF6 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df7 uni4DF7 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df8 uni4DF8 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4df9 uni4DF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfa uni4DFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfb uni4DFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfc uni4DFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfd uni4DFD 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dfe uni4DFE 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+4dff uni4DFF 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a4d0 uniA4D0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d1 uniA4D1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d2 uniA4D2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d3 uniA4D3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d4 uniA4D4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d5 uniA4D5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d6 uniA4D6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d7 uniA4D7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d8 uniA4D8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4d9 uniA4D9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4da uniA4DA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4db uniA4DB 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4dc uniA4DC 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4dd uniA4DD 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4de uniA4DE 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4df uniA4DF 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e0 uniA4E0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e1 uniA4E1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e2 uniA4E2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e3 uniA4E3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e4 uniA4E4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e5 uniA4E5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e6 uniA4E6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e7 uniA4E7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e8 uniA4E8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4e9 uniA4E9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ea uniA4EA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4eb uniA4EB 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ec uniA4EC 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ed uniA4ED 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ee uniA4EE 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ef uniA4EF 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f0 uniA4F0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f1 uniA4F1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f2 uniA4F2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f3 uniA4F3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f4 uniA4F4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f5 uniA4F5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f6 uniA4F6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f7 uniA4F7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f8 uniA4F8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4f9 uniA4F9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fa uniA4FA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fb uniA4FB 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fc uniA4FC 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fd uniA4FD 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4fe uniA4FE 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a4ff uniA4FF 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a644 uniA644 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a645 uniA645 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a646 uniA646 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a647 uniA647 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a64c uniA64C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a64d uniA64D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a650 uniA650 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a651 uniA651 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a654 uniA654 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a655 uniA655 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a656 uniA656 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a657 uniA657 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a662 uniA662 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a663 uniA663 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a664 uniA664 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a665 uniA665 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a666 uniA666 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a667 uniA667 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a668 uniA668 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a669 uniA669 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66a uniA66A 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66b uniA66B 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66c uniA66C 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66d uniA66D 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a66e uniA66E 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68a uniA68A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68b uniA68B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a68c uniA68C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a68d uniA68D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a694 uniA694 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a695 uniA695 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+a708 uniA708 2.27 +U+a709 uniA709 2.27 +U+a70a uniA70A 2.27 +U+a70b uniA70B 2.27 +U+a70c uniA70C 2.27 +U+a70d uniA70D 2.27 +U+a70e uniA70E 2.27 +U+a70f uniA70F 2.27 +U+a710 uniA710 2.27 +U+a711 uniA711 2.27 +U+a712 uniA712 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a713 uniA713 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a714 uniA714 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a715 uniA715 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a716 uniA716 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.27 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+a71b uniA71B 2.27 +U+a71c uniA71C 2.27 +U+a71d uniA71D 2.27 +U+a71e uniA71E 2.27 +U+a71f uniA71F 2.27 +U+a722 uniA722 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a723 uniA723 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a724 uniA724 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a725 uniA725 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a726 uniA726 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a727 uniA727 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.30 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a728 uniA728 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a729 uniA729 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72a uniA72A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72b uniA72B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72c uniA72C 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72d uniA72D 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72e uniA72E 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a72f uniA72F 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a730 uniA730 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a731 uniA731 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a732 uniA732 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a733 uniA733 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a734 uniA734 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a735 uniA735 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a736 uniA736 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a737 uniA737 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a738 uniA738 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a739 uniA739 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73a uniA73A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73b uniA73B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73c uniA73C 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73d uniA73D 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.32 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73e uniA73E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a73f uniA73F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a740 uniA740 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a741 uniA741 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a746 uniA746 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a747 uniA747 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a748 uniA748 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a749 uniA749 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a74a uniA74A 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a74b uniA74B 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a74e uniA74E 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a74f uniA74F 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a750 uniA750 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a751 uniA751 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a752 uniA752 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a753 uniA753 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a756 uniA756 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a757 uniA757 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a764 uniA764 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a765 uniA765 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a766 uniA766 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a767 uniA767 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a768 uniA768 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a769 uniA769 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a77b uniA77B 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a77c uniA77C 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a780 uniA780 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a781 uniA781 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a782 uniA782 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a783 uniA783 2.27 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a784 uniA784 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a785 uniA785 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a786 uniA786 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a787 uniA787 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a789 uniA789 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78a uniA78A 2.28 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a78b uniA78B 2.26 +U+a78c uniA78C 2.26 +U+a78d uniA78D 2.31 +U+a78e uniA78E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique) +U+a790 uniA790 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a791 uniA791 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7a0 uniA7A0 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a1 uniA7A1 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a2 uniA7A2 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a3 uniA7A3 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a4 uniA7A4 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a5 uniA7A5 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a6 uniA7A6 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a7 uniA7A7 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a8 uniA7A8 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7a9 uniA7A9 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+a7aa uniA7AA 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fa uniA7FA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fb uniA7FB 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fc uniA7FC 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fd uniA7FD 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7fe uniA7FE 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+a7ff uniA7FF 2.26 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) 2.33 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) +U+e000 uniE000 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e001 uniE001 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e002 uniE002 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e003 uniE003 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e004 uniE004 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e005 uniE005 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e006 uniE006 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e007 uniE007 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e008 uniE008 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+e009 uniE009 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00a uniE00A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00b uniE00B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00c uniE00C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00d uniE00D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00e uniE00E 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e00f uniE00F 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e010 uniE010 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e011 uniE011 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e012 uniE012 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e013 uniE013 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e014 uniE014 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) +U+e015 uniE015 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e016 uniE016 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e017 uniE017 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e018 uniE018 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e019 uniE019 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01a uniE01A 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01b uniE01B 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01c uniE01C 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+e01d uniE01D 2.4 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef00 uni02E5.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef01 uni02E6.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef02 uni02E7.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef03 uni02E8.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef04 uni02E9.5 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef05 uni02E5.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef06 uni02E6.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef07 uni02E7.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef08 uni02E8.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef09 uni02E9.4 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0a uni02E5.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0b uni02E6.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0c uni02E7.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0d uni02E8.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0e uni02E9.3 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef0f uni02E5.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef10 uni02E6.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef11 uni02E7.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef12 uni02E8.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef13 uni02E9.2 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef14 uni02E5.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef15 uni02E6.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef16 uni02E7.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef17 uni02E8.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef18 uni02E9.1 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+ef19 stem 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f000 uniF000 2.10 (Sans) 2.11 (Sans Condensed) +U+f001 uniF001 2.10 (Sans) 2.11 (Sans Condensed) +U+f002 uniF002 2.33 (Sans, Sans Condensed) +U+f003 uniF003 2.33 (Sans, Sans Condensed) +U+f208 uniF208 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f20a uniF20A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f215 uniF215 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f216 uniF216 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f217 uniF217 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21a uniF21A 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f21b uniF21B 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f25f uniF25F 2.6 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f400 uniF400 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f401 uniF401 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f402 uniF402 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f403 uniF403 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f404 uniF404 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f405 uniF405 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f406 uniF406 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f407 uniF407 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f408 uniF408 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f409 uniF409 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40a uniF40A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40b uniF40B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40c uniF40C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40d uniF40D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40e uniF40E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f40f uniF40F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f410 uniF410 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f411 uniF411 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f412 uniF412 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f413 uniF413 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f414 uniF414 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f415 uniF415 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f416 uniF416 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f417 uniF417 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f418 uniF418 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f419 uniF419 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41a uniF41A 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41b uniF41B 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41c uniF41C 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41d uniF41D 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41e uniF41E 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f41f uniF41F 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f420 uniF420 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f421 uniF421 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f422 uniF422 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f423 uniF423 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f424 uniF424 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f425 uniF425 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique) +U+f426 uniF426 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f428 uniF428 2.28 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f429 uniF429 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42a uniF42A 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42b uniF42B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42c uniF42C 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42d uniF42D 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42e uniF42E 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f42f uniF42F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f430 uniF430 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f431 uniF431 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f432 uniF432 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f433 uniF433 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f434 uniF434 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f435 uniF435 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f436 uniF436 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f437 uniF437 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f438 uniF438 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f439 uniF439 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43a uniF43A 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43b uniF43B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43c uniF43C 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43d uniF43D 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43e uniF43E 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f43f uniF43F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f440 uniF440 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f441 uniF441 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+f5c5 uniF5C5 2.9 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+f6c4 uniF6C4 2.10 (Serif Bold Italic, Serif Italic) 2.11 (Serif Condensed Bold Italic, Serif Condensed Italic) 2.23 (Serif Italic Condensed) +U+f6c5 uniF6C5 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.7 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) 2.9 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold, Sans Condensed Oblique, Sans Oblique) 2.18 (Sans ExtraLight) 2.23 (Serif Italic Condensed) +U+f6c6 uniF6C6 2.5 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c7 uniF6C7 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6c8 uniF6C8 2.11 (Serif Bold Italic, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d1 cyrBreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+f6d4 cyrbreve 2.5 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb00 uniFB00 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb01 fi original +U+fb02 fl original +U+fb03 uniFB03 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb04 uniFB04 2.2 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.5 (Sans ExtraLight) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb05 uniFB05 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb06 uniFB06 2.5 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.8 (Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fb13 uniFB13 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb14 uniFB14 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb15 uniFB15 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb16 uniFB16 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb17 uniFB17 2.3 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1d uniFB1D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb1e uniFB1E 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb1f uniFB1F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb20 uniFB20 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb21 uniFB21 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb22 uniFB22 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb23 uniFB23 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb24 uniFB24 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb25 uniFB25 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb26 uniFB26 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb27 uniFB27 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb28 uniFB28 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb29 uniFB29 2.10 (Sans, Sans Bold, Sans Bold Oblique, Sans ExtraLight, Sans Oblique) 2.11 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb2a uniFB2A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2b uniFB2B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2c uniFB2C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2d uniFB2D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2e uniFB2E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb2f uniFB2F 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb30 uniFB30 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb31 uniFB31 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb32 uniFB32 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb33 uniFB33 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb34 uniFB34 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb35 uniFB35 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb36 uniFB36 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb37 uniFB37 2.11 (Sans Condensed Oblique, Sans Oblique) 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+fb38 uniFB38 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb39 uniFB39 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3a uniFB3A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3b uniFB3B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3c uniFB3C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3d uniFB3D 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3e uniFB3E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb3f uniFB3F 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb40 uniFB40 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb41 uniFB41 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb42 uniFB42 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb43 uniFB43 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb44 uniFB44 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb45 uniFB45 2.33 (Sans Bold Oblique, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb46 uniFB46 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb47 uniFB47 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb48 uniFB48 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb49 uniFB49 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4a uniFB4A 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4b uniFB4B 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4c uniFB4C 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4d uniFB4D 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4e uniFB4E 2.9 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fb4f uniFB4F 2.16 (Sans, Sans Bold, Sans Bold Oblique, Sans Oblique) 2.17 (Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique) +U+fb52 uniFB52 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb53 uniFB53 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb54 uniFB54 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb55 uniFB55 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb56 uniFB56 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb57 uniFB57 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb58 uniFB58 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb59 uniFB59 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5a uniFB5A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5b uniFB5B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5c uniFB5C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5d uniFB5D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5e uniFB5E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb5f uniFB5F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb60 uniFB60 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb61 uniFB61 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb62 uniFB62 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb63 uniFB63 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb64 uniFB64 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb65 uniFB65 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb66 uniFB66 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb67 uniFB67 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb68 uniFB68 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb69 uniFB69 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6a uniFB6A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6b uniFB6B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6c uniFB6C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6d uniFB6D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6e uniFB6E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb6f uniFB6F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb70 uniFB70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb71 uniFB71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb72 uniFB72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb73 uniFB73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb74 uniFB74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb75 uniFB75 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb76 uniFB76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb77 uniFB77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb78 uniFB78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb79 uniFB79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7a uniFB7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7b uniFB7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7c uniFB7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7d uniFB7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7e uniFB7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb7f uniFB7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb80 uniFB80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb81 uniFB81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb82 uniFB82 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb83 uniFB83 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb84 uniFB84 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb85 uniFB85 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb86 uniFB86 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb87 uniFB87 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb88 uniFB88 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb89 uniFB89 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb8a uniFB8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8b uniFB8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8c uniFB8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8d uniFB8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8e uniFB8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb8f uniFB8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb90 uniFB90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb91 uniFB91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb92 uniFB92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb93 uniFB93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb94 uniFB94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb95 uniFB95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb96 uniFB96 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb97 uniFB97 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb98 uniFB98 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb99 uniFB99 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9a uniFB9A 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9b uniFB9B 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9c uniFB9C 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9d uniFB9D 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fb9e uniFB9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fb9f uniFB9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fba0 uniFBA0 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba1 uniFBA1 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba2 uniFBA2 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fba3 uniFBA3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbaa uniFBAA 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbab uniFBAB 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbac uniFBAC 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbad uniFBAD 2.16 (Sans Mono, Sans Mono Bold) 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd3 uniFBD3 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd4 uniFBD4 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd5 uniFBD5 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd6 uniFBD6 2.31 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbd9 uniFBD9 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbda uniFBDA 2.7 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) +U+fbe8 uniFBE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbe9 uniFBE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfc uniFBFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfd uniFBFD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbfe uniFBFE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fbff uniFBFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe00 uniFE00 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe01 uniFE01 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe02 uniFE02 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe03 uniFE03 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe04 uniFE04 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe05 uniFE05 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe06 uniFE06 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe07 uniFE07 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe08 uniFE08 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe09 uniFE09 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0a uniFE0A 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0b uniFE0B 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0c uniFE0C 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0d uniFE0D 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0e uniFE0E 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe0f uniFE0F 2.14 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans ExtraLight, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fe20 uniFE20 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe21 uniFE21 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe22 uniFE22 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe23 uniFE23 2.21 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+fe70 uniFE70 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe71 uniFE71 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe72 uniFE72 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe73 uniFE73 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe74 uniFE74 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe76 uniFE76 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe77 uniFE77 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe78 uniFE78 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe79 uniFE79 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7a uniFE7A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7b uniFE7B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7c uniFE7C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7d uniFE7D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7e uniFE7E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe7f uniFE7F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe80 uniFE80 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe81 uniFE81 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe82 uniFE82 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe83 uniFE83 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe84 uniFE84 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe85 uniFE85 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe86 uniFE86 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe87 uniFE87 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe88 uniFE88 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe89 uniFE89 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8a uniFE8A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8b uniFE8B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8c uniFE8C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8d uniFE8D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8e uniFE8E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe8f uniFE8F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe90 uniFE90 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe91 uniFE91 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe92 uniFE92 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe93 uniFE93 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe94 uniFE94 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe95 uniFE95 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe96 uniFE96 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe97 uniFE97 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe98 uniFE98 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe99 uniFE99 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9a uniFE9A 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9b uniFE9B 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9c uniFE9C 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9d uniFE9D 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9e uniFE9E 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fe9f uniFE9F 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea0 uniFEA0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea1 uniFEA1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea2 uniFEA2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea3 uniFEA3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea4 uniFEA4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea5 uniFEA5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea6 uniFEA6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea7 uniFEA7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea8 uniFEA8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fea9 uniFEA9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaa uniFEAA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feab uniFEAB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feac uniFEAC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fead uniFEAD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feae uniFEAE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feaf uniFEAF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb0 uniFEB0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb1 uniFEB1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb2 uniFEB2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb3 uniFEB3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb4 uniFEB4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb5 uniFEB5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb6 uniFEB6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb7 uniFEB7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb8 uniFEB8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feb9 uniFEB9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feba uniFEBA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febb uniFEBB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febc uniFEBC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febd uniFEBD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febe uniFEBE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+febf uniFEBF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec0 uniFEC0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec1 uniFEC1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec2 uniFEC2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec3 uniFEC3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec4 uniFEC4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec5 uniFEC5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec6 uniFEC6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec7 uniFEC7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec8 uniFEC8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fec9 uniFEC9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feca uniFECA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecb uniFECB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecc uniFECC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecd uniFECD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fece uniFECE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fecf uniFECF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed0 uniFED0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed1 uniFED1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed2 uniFED2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed3 uniFED3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed4 uniFED4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed5 uniFED5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed6 uniFED6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed7 uniFED7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed8 uniFED8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fed9 uniFED9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feda uniFEDA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedb uniFEDB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedc uniFEDC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedd uniFEDD 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fede uniFEDE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fedf uniFEDF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee0 uniFEE0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee1 uniFEE1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee2 uniFEE2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee3 uniFEE3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee4 uniFEE4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee5 uniFEE5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee6 uniFEE6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee7 uniFEE7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee8 uniFEE8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fee9 uniFEE9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feea uniFEEA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feeb uniFEEB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feec uniFEEC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feed uniFEED 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feee uniFEEE 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feef uniFEEF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef0 uniFEF0 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef1 uniFEF1 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef2 uniFEF2 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef3 uniFEF3 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef4 uniFEF4 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef5 uniFEF5 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef6 uniFEF6 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef7 uniFEF7 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef8 uniFEF8 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fef9 uniFEF9 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefa uniFEFA 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefb uniFEFB 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fefc uniFEFC 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+feff uniFEFF 2.4 (Sans, Sans Bold, Sans Condensed, Sans Condensed Bold) 2.16 (Sans Mono, Sans Mono Bold) +U+fff9 uniFFF9 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffa uniFFFA 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffb uniFFFB 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffc uniFFFC 2.22 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique, Sans Oblique, Serif, Serif Bold, Serif Bold Italic, Serif Condensed, Serif Condensed Bold, Serif Condensed Bold Italic, Serif Condensed Italic, Serif Italic) 2.23 (Serif Italic Condensed) +U+fffd uniFFFD 1.12 +U+10300 u10300 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10301 u10301 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10302 u10302 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10303 u10303 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10304 u10304 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10305 u10305 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10306 u10306 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10307 u10307 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10308 u10308 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10309 u10309 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030a u1030A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030b u1030B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030c u1030C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030d u1030D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030e u1030E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1030f u1030F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10310 u10310 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10311 u10311 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10312 u10312 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10313 u10313 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10314 u10314 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10315 u10315 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10316 u10316 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10317 u10317 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10318 u10318 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10319 u10319 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031a u1031A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031b u1031B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031c u1031C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031d u1031D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1031e u1031E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10320 u10320 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10321 u10321 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10322 u10322 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+10323 u10323 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d300 u1D300 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d301 u1D301 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d302 u1D302 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d303 u1D303 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d304 u1D304 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d305 u1D305 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d306 u1D306 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d307 u1D307 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d308 u1D308 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d309 u1D309 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30a u1D30A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30b u1D30B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30c u1D30C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30d u1D30D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30e u1D30E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d30f u1D30F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d310 u1D310 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d311 u1D311 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d312 u1D312 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d313 u1D313 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d314 u1D314 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d315 u1D315 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d316 u1D316 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d317 u1D317 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d318 u1D318 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d319 u1D319 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31a u1D31A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31b u1D31B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31c u1D31C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31d u1D31D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31e u1D31E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d31f u1D31F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d320 u1D320 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d321 u1D321 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d322 u1D322 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d323 u1D323 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d324 u1D324 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d325 u1D325 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d326 u1D326 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d327 u1D327 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d328 u1D328 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d329 u1D329 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32a u1D32A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32b u1D32B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32c u1D32C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32d u1D32D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32e u1D32E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d32f u1D32F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d330 u1D330 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d331 u1D331 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d332 u1D332 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d333 u1D333 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d334 u1D334 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d335 u1D335 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d336 u1D336 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d337 u1D337 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d338 u1D338 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d339 u1D339 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33a u1D33A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33b u1D33B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33c u1D33C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33d u1D33D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33e u1D33E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d33f u1D33F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d340 u1D340 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d341 u1D341 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d342 u1D342 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d343 u1D343 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d344 u1D344 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d345 u1D345 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d346 u1D346 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d347 u1D347 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d348 u1D348 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d349 u1D349 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34a u1D34A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34b u1D34B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34c u1D34C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34d u1D34D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34e u1D34E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d34f u1D34F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d350 u1D350 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d351 u1D351 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d352 u1D352 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d353 u1D353 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d354 u1D354 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d355 u1D355 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d356 u1D356 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1d400 u1D400 2.23 (Serif Bold, Serif Condensed Bold) +U+1d401 u1D401 2.23 (Serif Bold, Serif Condensed Bold) +U+1d402 u1D402 2.23 (Serif Bold, Serif Condensed Bold) +U+1d403 u1D403 2.23 (Serif Bold, Serif Condensed Bold) +U+1d404 u1D404 2.23 (Serif Bold, Serif Condensed Bold) +U+1d405 u1D405 2.23 (Serif Bold, Serif Condensed Bold) +U+1d406 u1D406 2.23 (Serif Bold, Serif Condensed Bold) +U+1d407 u1D407 2.23 (Serif Bold, Serif Condensed Bold) +U+1d408 u1D408 2.23 (Serif Bold, Serif Condensed Bold) +U+1d409 u1D409 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40a u1D40A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40b u1D40B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40c u1D40C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40d u1D40D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40e u1D40E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d40f u1D40F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d410 u1D410 2.23 (Serif Bold, Serif Condensed Bold) +U+1d411 u1D411 2.23 (Serif Bold, Serif Condensed Bold) +U+1d412 u1D412 2.23 (Serif Bold, Serif Condensed Bold) +U+1d413 u1D413 2.23 (Serif Bold, Serif Condensed Bold) +U+1d414 u1D414 2.23 (Serif Bold, Serif Condensed Bold) +U+1d415 u1D415 2.23 (Serif Bold, Serif Condensed Bold) +U+1d416 u1D416 2.23 (Serif Bold, Serif Condensed Bold) +U+1d417 u1D417 2.23 (Serif Bold, Serif Condensed Bold) +U+1d418 u1D418 2.23 (Serif Bold, Serif Condensed Bold) +U+1d419 u1D419 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41a u1D41A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41b u1D41B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41c u1D41C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41d u1D41D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41e u1D41E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d41f u1D41F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d420 u1D420 2.23 (Serif Bold, Serif Condensed Bold) +U+1d421 u1D421 2.23 (Serif Bold, Serif Condensed Bold) +U+1d422 u1D422 2.23 (Serif Bold, Serif Condensed Bold) +U+1d423 u1D423 2.23 (Serif Bold, Serif Condensed Bold) +U+1d424 u1D424 2.23 (Serif Bold, Serif Condensed Bold) +U+1d425 u1D425 2.23 (Serif Bold, Serif Condensed Bold) +U+1d426 u1D426 2.23 (Serif Bold, Serif Condensed Bold) +U+1d427 u1D427 2.23 (Serif Bold, Serif Condensed Bold) +U+1d428 u1D428 2.23 (Serif Bold, Serif Condensed Bold) +U+1d429 u1D429 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42a u1D42A 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42b u1D42B 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42c u1D42C 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42d u1D42D 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42e u1D42E 2.23 (Serif Bold, Serif Condensed Bold) +U+1d42f u1D42F 2.23 (Serif Bold, Serif Condensed Bold) +U+1d430 u1D430 2.23 (Serif Bold, Serif Condensed Bold) +U+1d431 u1D431 2.23 (Serif Bold, Serif Condensed Bold) +U+1d432 u1D432 2.23 (Serif Bold, Serif Condensed Bold) +U+1d433 u1D433 2.23 (Serif Bold, Serif Condensed Bold) +U+1d434 u1D434 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d435 u1D435 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d436 u1D436 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d437 u1D437 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d438 u1D438 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d439 u1D439 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43a u1D43A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43b u1D43B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43c u1D43C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43d u1D43D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43e u1D43E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d43f u1D43F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d440 u1D440 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d441 u1D441 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d442 u1D442 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d443 u1D443 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d444 u1D444 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d445 u1D445 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d446 u1D446 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d447 u1D447 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d448 u1D448 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d449 u1D449 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44a u1D44A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44b u1D44B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44c u1D44C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44d u1D44D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44e u1D44E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d44f u1D44F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d450 u1D450 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d451 u1D451 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d452 u1D452 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d453 u1D453 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d454 u1D454 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d456 u1D456 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d457 u1D457 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d458 u1D458 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d459 u1D459 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45a u1D45A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45b u1D45B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45c u1D45C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45d u1D45D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45e u1D45E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d45f u1D45F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d460 u1D460 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d461 u1D461 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d462 u1D462 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d463 u1D463 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d464 u1D464 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d465 u1D465 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d466 u1D466 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d467 u1D467 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d468 u1D468 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d469 u1D469 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46a u1D46A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46b u1D46B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46c u1D46C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46d u1D46D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46e u1D46E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d46f u1D46F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d470 u1D470 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d471 u1D471 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d472 u1D472 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d473 u1D473 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d474 u1D474 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d475 u1D475 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d476 u1D476 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d477 u1D477 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d478 u1D478 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d479 u1D479 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47a u1D47A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47b u1D47B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47c u1D47C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47d u1D47D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47e u1D47E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d47f u1D47F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d480 u1D480 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d481 u1D481 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d482 u1D482 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d483 u1D483 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d484 u1D484 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d485 u1D485 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d486 u1D486 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d487 u1D487 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d488 u1D488 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d489 u1D489 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48a u1D48A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48b u1D48B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48c u1D48C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48d u1D48D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48e u1D48E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d48f u1D48F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d490 u1D490 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d491 u1D491 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d492 u1D492 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d493 u1D493 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d494 u1D494 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d495 u1D495 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d496 u1D496 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d497 u1D497 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d498 u1D498 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d499 u1D499 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d49a u1D49A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d49b u1D49B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d538 u1D538 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d539 u1D539 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53b u1D53B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53c u1D53C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53d u1D53D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d53e u1D53E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d540 u1D540 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d541 u1D541 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d542 u1D542 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d543 u1D543 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d544 u1D544 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d546 u1D546 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54a u1D54A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54b u1D54B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54c u1D54C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54d u1D54D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54e u1D54E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d54f u1D54F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d550 u1D550 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d552 u1D552 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d553 u1D553 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d554 u1D554 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d555 u1D555 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d556 u1D556 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d557 u1D557 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d558 u1D558 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d559 u1D559 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55a u1D55A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) 2.34 (Sans Mono, Sans Mono Bold, Sans Mono Bold Oblique, Sans Mono Oblique) +U+1d55b u1D55B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55c u1D55C 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55d u1D55D 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55e u1D55E 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d55f u1D55F 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d560 u1D560 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d561 u1D561 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d562 u1D562 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d563 u1D563 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d564 u1D564 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d565 u1D565 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d566 u1D566 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d567 u1D567 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d568 u1D568 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d569 u1D569 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d56a u1D56A 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d56b u1D56B 2.18 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.22 (Serif, Serif Condensed) +U+1d5a0 u1D5A0 2.23 (Sans, Sans Condensed) +U+1d5a1 u1D5A1 2.23 (Sans, Sans Condensed) +U+1d5a2 u1D5A2 2.23 (Sans, Sans Condensed) +U+1d5a3 u1D5A3 2.23 (Sans, Sans Condensed) +U+1d5a4 u1D5A4 2.23 (Sans, Sans Condensed) +U+1d5a5 u1D5A5 2.23 (Sans, Sans Condensed) +U+1d5a6 u1D5A6 2.23 (Sans, Sans Condensed) +U+1d5a7 u1D5A7 2.23 (Sans, Sans Condensed) +U+1d5a8 u1D5A8 2.23 (Sans, Sans Condensed) +U+1d5a9 u1D5A9 2.23 (Sans, Sans Condensed) +U+1d5aa u1D5AA 2.23 (Sans, Sans Condensed) +U+1d5ab u1D5AB 2.23 (Sans, Sans Condensed) +U+1d5ac u1D5AC 2.23 (Sans, Sans Condensed) +U+1d5ad u1D5AD 2.23 (Sans, Sans Condensed) +U+1d5ae u1D5AE 2.23 (Sans, Sans Condensed) +U+1d5af u1D5AF 2.23 (Sans, Sans Condensed) +U+1d5b0 u1D5B0 2.23 (Sans, Sans Condensed) +U+1d5b1 u1D5B1 2.23 (Sans, Sans Condensed) +U+1d5b2 u1D5B2 2.23 (Sans, Sans Condensed) +U+1d5b3 u1D5B3 2.23 (Sans, Sans Condensed) +U+1d5b4 u1D5B4 2.23 (Sans, Sans Condensed) +U+1d5b5 u1D5B5 2.23 (Sans, Sans Condensed) +U+1d5b6 u1D5B6 2.23 (Sans, Sans Condensed) +U+1d5b7 u1D5B7 2.23 (Sans, Sans Condensed) +U+1d5b8 u1D5B8 2.23 (Sans, Sans Condensed) +U+1d5b9 u1D5B9 2.23 (Sans, Sans Condensed) +U+1d5ba u1D5BA 2.23 (Sans, Sans Condensed) +U+1d5bb u1D5BB 2.23 (Sans, Sans Condensed) +U+1d5bc u1D5BC 2.23 (Sans, Sans Condensed) +U+1d5bd u1D5BD 2.23 (Sans, Sans Condensed) +U+1d5be u1D5BE 2.23 (Sans, Sans Condensed) +U+1d5bf u1D5BF 2.23 (Sans, Sans Condensed) +U+1d5c0 u1D5C0 2.23 (Sans, Sans Condensed) +U+1d5c1 u1D5C1 2.23 (Sans, Sans Condensed) +U+1d5c2 u1D5C2 2.23 (Sans, Sans Condensed) +U+1d5c3 u1D5C3 2.23 (Sans, Sans Condensed) +U+1d5c4 u1D5C4 2.23 (Sans, Sans Condensed) +U+1d5c5 u1D5C5 2.23 (Sans, Sans Condensed) +U+1d5c6 u1D5C6 2.23 (Sans, Sans Condensed) +U+1d5c7 u1D5C7 2.23 (Sans, Sans Condensed) +U+1d5c8 u1D5C8 2.23 (Sans, Sans Condensed) +U+1d5c9 u1D5C9 2.23 (Sans, Sans Condensed) +U+1d5ca u1D5CA 2.23 (Sans, Sans Condensed) +U+1d5cb u1D5CB 2.23 (Sans, Sans Condensed) +U+1d5cc u1D5CC 2.23 (Sans, Sans Condensed) +U+1d5cd u1D5CD 2.23 (Sans, Sans Condensed) +U+1d5ce u1D5CE 2.23 (Sans, Sans Condensed) +U+1d5cf u1D5CF 2.23 (Sans, Sans Condensed) +U+1d5d0 u1D5D0 2.23 (Sans, Sans Condensed) +U+1d5d1 u1D5D1 2.23 (Sans, Sans Condensed) +U+1d5d2 u1D5D2 2.23 (Sans, Sans Condensed) +U+1d5d3 u1D5D3 2.23 (Sans, Sans Condensed) +U+1d5d4 u1D5D4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d5 u1D5D5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d6 u1D5D6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d7 u1D5D7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d8 u1D5D8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5d9 u1D5D9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5da u1D5DA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5db u1D5DB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5dc u1D5DC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5dd u1D5DD 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5de u1D5DE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5df u1D5DF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e0 u1D5E0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e1 u1D5E1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e2 u1D5E2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e3 u1D5E3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e4 u1D5E4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e5 u1D5E5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e6 u1D5E6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e7 u1D5E7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e8 u1D5E8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5e9 u1D5E9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ea u1D5EA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5eb u1D5EB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ec u1D5EC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ed u1D5ED 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ee u1D5EE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ef u1D5EF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f0 u1D5F0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f1 u1D5F1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f2 u1D5F2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f3 u1D5F3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f4 u1D5F4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f5 u1D5F5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f6 u1D5F6 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f7 u1D5F7 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f8 u1D5F8 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5f9 u1D5F9 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fa u1D5FA 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fb u1D5FB 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fc u1D5FC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fd u1D5FD 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5fe u1D5FE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d5ff u1D5FF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d600 u1D600 2.23 (Sans Bold, Sans Condensed Bold) +U+1d601 u1D601 2.23 (Sans Bold, Sans Condensed Bold) +U+1d602 u1D602 2.23 (Sans Bold, Sans Condensed Bold) +U+1d603 u1D603 2.23 (Sans Bold, Sans Condensed Bold) +U+1d604 u1D604 2.23 (Sans Bold, Sans Condensed Bold) +U+1d605 u1D605 2.23 (Sans Bold, Sans Condensed Bold) +U+1d606 u1D606 2.23 (Sans Bold, Sans Condensed Bold) +U+1d607 u1D607 2.23 (Sans Bold, Sans Condensed Bold) +U+1d608 u1D608 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d609 u1D609 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60a u1D60A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60b u1D60B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60c u1D60C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60d u1D60D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60e u1D60E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d60f u1D60F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d610 u1D610 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d611 u1D611 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d612 u1D612 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d613 u1D613 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d614 u1D614 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d615 u1D615 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d616 u1D616 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d617 u1D617 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d618 u1D618 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d619 u1D619 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61a u1D61A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61b u1D61B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61c u1D61C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61d u1D61D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61e u1D61E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d61f u1D61F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d620 u1D620 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d621 u1D621 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d622 u1D622 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d623 u1D623 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d624 u1D624 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d625 u1D625 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d626 u1D626 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d627 u1D627 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d628 u1D628 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d629 u1D629 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62a u1D62A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62b u1D62B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62c u1D62C 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62d u1D62D 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62e u1D62E 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d62f u1D62F 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d630 u1D630 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d631 u1D631 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d632 u1D632 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d633 u1D633 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d634 u1D634 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d635 u1D635 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d636 u1D636 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d637 u1D637 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d638 u1D638 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d639 u1D639 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63a u1D63A 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63b u1D63B 2.23 (Sans Condensed Oblique, Sans Oblique) +U+1d63c u1D63C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63d u1D63D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63e u1D63E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d63f u1D63F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d640 u1D640 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d641 u1D641 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d642 u1D642 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d643 u1D643 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d644 u1D644 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d645 u1D645 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d646 u1D646 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d647 u1D647 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d648 u1D648 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d649 u1D649 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64a u1D64A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64b u1D64B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64c u1D64C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64d u1D64D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64e u1D64E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d64f u1D64F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d650 u1D650 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d651 u1D651 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d652 u1D652 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d653 u1D653 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d654 u1D654 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d655 u1D655 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d656 u1D656 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d657 u1D657 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d658 u1D658 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d659 u1D659 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65a u1D65A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65b u1D65B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65c u1D65C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65d u1D65D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65e u1D65E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d65f u1D65F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d660 u1D660 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d661 u1D661 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d662 u1D662 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d663 u1D663 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d664 u1D664 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d665 u1D665 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d666 u1D666 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d667 u1D667 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d668 u1D668 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d669 u1D669 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66a u1D66A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66b u1D66B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66c u1D66C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66d u1D66D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66e u1D66E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d66f u1D66F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d670 u1D670 2.23 (Sans Mono) +U+1d671 u1D671 2.23 (Sans Mono) +U+1d672 u1D672 2.23 (Sans Mono) +U+1d673 u1D673 2.23 (Sans Mono) +U+1d674 u1D674 2.23 (Sans Mono) +U+1d675 u1D675 2.23 (Sans Mono) +U+1d676 u1D676 2.23 (Sans Mono) +U+1d677 u1D677 2.23 (Sans Mono) +U+1d678 u1D678 2.23 (Sans Mono) +U+1d679 u1D679 2.23 (Sans Mono) +U+1d67a u1D67A 2.23 (Sans Mono) +U+1d67b u1D67B 2.23 (Sans Mono) +U+1d67c u1D67C 2.23 (Sans Mono) +U+1d67d u1D67D 2.23 (Sans Mono) +U+1d67e u1D67E 2.23 (Sans Mono) +U+1d67f u1D67F 2.23 (Sans Mono) +U+1d680 u1D680 2.23 (Sans Mono) +U+1d681 u1D681 2.23 (Sans Mono) +U+1d682 u1D682 2.23 (Sans Mono) +U+1d683 u1D683 2.23 (Sans Mono) +U+1d684 u1D684 2.23 (Sans Mono) +U+1d685 u1D685 2.23 (Sans Mono) +U+1d686 u1D686 2.23 (Sans Mono) +U+1d687 u1D687 2.23 (Sans Mono) +U+1d688 u1D688 2.23 (Sans Mono) +U+1d689 u1D689 2.23 (Sans Mono) +U+1d68a u1D68A 2.23 (Sans Mono) +U+1d68b u1D68B 2.23 (Sans Mono) +U+1d68c u1D68C 2.23 (Sans Mono) +U+1d68d u1D68D 2.23 (Sans Mono) +U+1d68e u1D68E 2.23 (Sans Mono) +U+1d68f u1D68F 2.23 (Sans Mono) +U+1d690 u1D690 2.23 (Sans Mono) +U+1d691 u1D691 2.23 (Sans Mono) +U+1d692 u1D692 2.23 (Sans Mono) +U+1d693 u1D693 2.23 (Sans Mono) +U+1d694 u1D694 2.23 (Sans Mono) +U+1d695 u1D695 2.23 (Sans Mono) +U+1d696 u1D696 2.23 (Sans Mono) +U+1d697 u1D697 2.23 (Sans Mono) +U+1d698 u1D698 2.23 (Sans Mono) +U+1d699 u1D699 2.23 (Sans Mono) +U+1d69a u1D69A 2.23 (Sans Mono) +U+1d69b u1D69B 2.23 (Sans Mono) +U+1d69c u1D69C 2.23 (Sans Mono) +U+1d69d u1D69D 2.23 (Sans Mono) +U+1d69e u1D69E 2.23 (Sans Mono) +U+1d69f u1D69F 2.23 (Sans Mono) +U+1d6a0 u1D6A0 2.23 (Sans Mono) +U+1d6a1 u1D6A1 2.23 (Sans Mono) +U+1d6a2 u1D6A2 2.23 (Sans Mono) +U+1d6a3 u1D6A3 2.23 (Sans Mono) +U+1d6a4 u1D6A4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6a5 u1D6A5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6a8 u1D6A8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6a9 u1D6A9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6aa u1D6AA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ab u1D6AB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ac u1D6AC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ad u1D6AD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ae u1D6AE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6af u1D6AF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b0 u1D6B0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b1 u1D6B1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b2 u1D6B2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b3 u1D6B3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b4 u1D6B4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b5 u1D6B5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b6 u1D6B6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b7 u1D6B7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b8 u1D6B8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6b9 u1D6B9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ba u1D6BA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bb u1D6BB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bc u1D6BC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bd u1D6BD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6be u1D6BE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6bf u1D6BF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c0 u1D6C0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c1 u1D6C1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c2 u1D6C2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c3 u1D6C3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c4 u1D6C4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c5 u1D6C5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c6 u1D6C6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c7 u1D6C7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c8 u1D6C8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6c9 u1D6C9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ca u1D6CA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cb u1D6CB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cc u1D6CC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cd u1D6CD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6ce u1D6CE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6cf u1D6CF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d0 u1D6D0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d1 u1D6D1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d2 u1D6D2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d3 u1D6D3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d4 u1D6D4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d5 u1D6D5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d6 u1D6D6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d7 u1D6D7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d8 u1D6D8 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6d9 u1D6D9 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6da u1D6DA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6db u1D6DB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6dc u1D6DC 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6dd u1D6DD 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6de u1D6DE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6df u1D6DF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e0 u1D6E0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e1 u1D6E1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d6e2 u1D6E2 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e3 u1D6E3 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e4 u1D6E4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e5 u1D6E5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e6 u1D6E6 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e7 u1D6E7 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e8 u1D6E8 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6e9 u1D6E9 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ea u1D6EA 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6eb u1D6EB 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ec u1D6EC 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ed u1D6ED 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ee u1D6EE 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ef u1D6EF 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f0 u1D6F0 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f1 u1D6F1 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f2 u1D6F2 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f3 u1D6F3 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f4 u1D6F4 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f5 u1D6F5 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f6 u1D6F6 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f7 u1D6F7 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f8 u1D6F8 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6f9 u1D6F9 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fa u1D6FA 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fb u1D6FB 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fc u1D6FC 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fd u1D6FD 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6fe u1D6FE 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d6ff u1D6FF 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d700 u1D700 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d701 u1D701 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d702 u1D702 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d703 u1D703 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d704 u1D704 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d705 u1D705 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d706 u1D706 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d707 u1D707 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d708 u1D708 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d709 u1D709 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70a u1D70A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70b u1D70B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70c u1D70C 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70d u1D70D 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70e u1D70E 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d70f u1D70F 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d710 u1D710 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d711 u1D711 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d712 u1D712 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d713 u1D713 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d714 u1D714 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d715 u1D715 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d716 u1D716 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d717 u1D717 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d718 u1D718 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d719 u1D719 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d71a u1D71A 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d71b u1D71B 2.23 (Serif Italic, Serif Italic Condensed) 2.31 (Serif Condensed Italic) +U+1d71c u1D71C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71d u1D71D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71e u1D71E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d71f u1D71F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d720 u1D720 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d721 u1D721 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d722 u1D722 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d723 u1D723 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d724 u1D724 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d725 u1D725 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d726 u1D726 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d727 u1D727 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d728 u1D728 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d729 u1D729 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72a u1D72A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72b u1D72B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72c u1D72C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72d u1D72D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72e u1D72E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d72f u1D72F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d730 u1D730 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d731 u1D731 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d732 u1D732 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d733 u1D733 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d734 u1D734 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d735 u1D735 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d736 u1D736 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d737 u1D737 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d738 u1D738 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d739 u1D739 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73a u1D73A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73b u1D73B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73c u1D73C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73d u1D73D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73e u1D73E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d73f u1D73F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d740 u1D740 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d741 u1D741 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d742 u1D742 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d743 u1D743 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d744 u1D744 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d745 u1D745 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d746 u1D746 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d747 u1D747 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d748 u1D748 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d749 u1D749 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74a u1D74A 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74b u1D74B 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74c u1D74C 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74d u1D74D 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74e u1D74E 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d74f u1D74F 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d750 u1D750 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d751 u1D751 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d752 u1D752 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d753 u1D753 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d754 u1D754 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d755 u1D755 2.23 (Serif Bold Italic, Serif Condensed Bold Italic) +U+1d756 u1D756 2.23 (Sans Bold, Sans Condensed Bold) +U+1d757 u1D757 2.23 (Sans Bold, Sans Condensed Bold) +U+1d758 u1D758 2.23 (Sans Bold, Sans Condensed Bold) +U+1d759 u1D759 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75a u1D75A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75b u1D75B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75c u1D75C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75d u1D75D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75e u1D75E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d75f u1D75F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d760 u1D760 2.23 (Sans Bold, Sans Condensed Bold) +U+1d761 u1D761 2.23 (Sans Bold, Sans Condensed Bold) +U+1d762 u1D762 2.23 (Sans Bold, Sans Condensed Bold) +U+1d763 u1D763 2.23 (Sans Bold, Sans Condensed Bold) +U+1d764 u1D764 2.23 (Sans Bold, Sans Condensed Bold) +U+1d765 u1D765 2.23 (Sans Bold, Sans Condensed Bold) +U+1d766 u1D766 2.23 (Sans Bold, Sans Condensed Bold) +U+1d767 u1D767 2.23 (Sans Bold, Sans Condensed Bold) +U+1d768 u1D768 2.23 (Sans Bold, Sans Condensed Bold) +U+1d769 u1D769 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76a u1D76A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76b u1D76B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76c u1D76C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76d u1D76D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76e u1D76E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d76f u1D76F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d770 u1D770 2.23 (Sans Bold, Sans Condensed Bold) +U+1d771 u1D771 2.23 (Sans Bold, Sans Condensed Bold) +U+1d772 u1D772 2.23 (Sans Bold, Sans Condensed Bold) +U+1d773 u1D773 2.23 (Sans Bold, Sans Condensed Bold) +U+1d774 u1D774 2.23 (Sans Bold, Sans Condensed Bold) +U+1d775 u1D775 2.23 (Sans Bold, Sans Condensed Bold) +U+1d776 u1D776 2.23 (Sans Bold, Sans Condensed Bold) +U+1d777 u1D777 2.23 (Sans Bold, Sans Condensed Bold) +U+1d778 u1D778 2.23 (Sans Bold, Sans Condensed Bold) +U+1d779 u1D779 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77a u1D77A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77b u1D77B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77c u1D77C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77d u1D77D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77e u1D77E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d77f u1D77F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d780 u1D780 2.23 (Sans Bold, Sans Condensed Bold) +U+1d781 u1D781 2.23 (Sans Bold, Sans Condensed Bold) +U+1d782 u1D782 2.23 (Sans Bold, Sans Condensed Bold) +U+1d783 u1D783 2.23 (Sans Bold, Sans Condensed Bold) +U+1d784 u1D784 2.23 (Sans Bold, Sans Condensed Bold) +U+1d785 u1D785 2.23 (Sans Bold, Sans Condensed Bold) +U+1d786 u1D786 2.23 (Sans Bold, Sans Condensed Bold) +U+1d787 u1D787 2.23 (Sans Bold, Sans Condensed Bold) +U+1d788 u1D788 2.23 (Sans Bold, Sans Condensed Bold) +U+1d789 u1D789 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78a u1D78A 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78b u1D78B 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78c u1D78C 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78d u1D78D 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78e u1D78E 2.23 (Sans Bold, Sans Condensed Bold) +U+1d78f u1D78F 2.23 (Sans Bold, Sans Condensed Bold) +U+1d790 u1D790 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d791 u1D791 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d792 u1D792 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d793 u1D793 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d794 u1D794 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d795 u1D795 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d796 u1D796 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d797 u1D797 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d798 u1D798 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d799 u1D799 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79a u1D79A 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79b u1D79B 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79c u1D79C 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79d u1D79D 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79e u1D79E 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d79f u1D79F 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a0 u1D7A0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a1 u1D7A1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a2 u1D7A2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a3 u1D7A3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a4 u1D7A4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a5 u1D7A5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a6 u1D7A6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a7 u1D7A7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a8 u1D7A8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7a9 u1D7A9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7aa u1D7AA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ab u1D7AB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ac u1D7AC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ad u1D7AD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ae u1D7AE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7af u1D7AF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b0 u1D7B0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b1 u1D7B1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b2 u1D7B2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b3 u1D7B3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b4 u1D7B4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b5 u1D7B5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b6 u1D7B6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b7 u1D7B7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b8 u1D7B8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7b9 u1D7B9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ba u1D7BA 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bb u1D7BB 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bc u1D7BC 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bd u1D7BD 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7be u1D7BE 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7bf u1D7BF 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c0 u1D7C0 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c1 u1D7C1 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c2 u1D7C2 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c3 u1D7C3 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c4 u1D7C4 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c5 u1D7C5 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c6 u1D7C6 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c7 u1D7C7 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c8 u1D7C8 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7c9 u1D7C9 2.23 (Sans Bold Oblique, Sans Condensed Bold Oblique) +U+1d7ca u1D7CA 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7cb u1D7CB 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7ce u1D7CE 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7cf u1D7CF 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d0 u1D7D0 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d1 u1D7D1 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d2 u1D7D2 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d3 u1D7D3 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d4 u1D7D4 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d5 u1D7D5 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d6 u1D7D6 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d7 u1D7D7 2.23 (Serif Bold, Serif Condensed Bold) +U+1d7d8 u1D7D8 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7d9 u1D7D9 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7da u1D7DA 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7db u1D7DB 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7dc u1D7DC 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7dd u1D7DD 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7de u1D7DE 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7df u1D7DF 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e0 u1D7E0 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e1 u1D7E1 2.22 (Serif, Serif Condensed) 2.29 (Sans, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) 2.30 (Sans Bold) +U+1d7e2 u1D7E2 2.23 (Sans, Sans Condensed) +U+1d7e3 u1D7E3 2.23 (Sans, Sans Condensed) +U+1d7e4 u1D7E4 2.23 (Sans, Sans Condensed) +U+1d7e5 u1D7E5 2.23 (Sans, Sans Condensed) +U+1d7e6 u1D7E6 2.23 (Sans, Sans Condensed) +U+1d7e7 u1D7E7 2.23 (Sans, Sans Condensed) +U+1d7e8 u1D7E8 2.23 (Sans, Sans Condensed) +U+1d7e9 u1D7E9 2.23 (Sans, Sans Condensed) +U+1d7ea u1D7EA 2.23 (Sans, Sans Condensed) +U+1d7eb u1D7EB 2.23 (Sans, Sans Condensed) +U+1d7ec u1D7EC 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ed u1D7ED 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ee u1D7EE 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7ef u1D7EF 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f0 u1D7F0 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f1 u1D7F1 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f2 u1D7F2 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f3 u1D7F3 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f4 u1D7F4 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f5 u1D7F5 2.23 (Sans Bold, Sans Condensed Bold) +U+1d7f6 u1D7F6 2.23 (Sans Mono) +U+1d7f7 u1D7F7 2.23 (Sans Mono) +U+1d7f8 u1D7F8 2.23 (Sans Mono) +U+1d7f9 u1D7F9 2.23 (Sans Mono) +U+1d7fa u1D7FA 2.23 (Sans Mono) +U+1d7fb u1D7FB 2.23 (Sans Mono) +U+1d7fc u1D7FC 2.23 (Sans Mono) +U+1d7fd u1D7FD 2.23 (Sans Mono) +U+1d7fe u1D7FE 2.23 (Sans Mono) +U+1d7ff u1D7FF 2.23 (Sans Mono) +U+1f030 u1F030 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f031 u1F031 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f032 u1F032 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f033 u1F033 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f034 u1F034 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f035 u1F035 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f036 u1F036 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f037 u1F037 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f038 u1F038 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f039 u1F039 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03a u1F03A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03b u1F03B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03c u1F03C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03d u1F03D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03e u1F03E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f03f u1F03F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f040 u1F040 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f041 u1F041 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f042 u1F042 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f043 u1F043 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f044 u1F044 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f045 u1F045 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f046 u1F046 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f047 u1F047 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f048 u1F048 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f049 u1F049 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04a u1F04A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04b u1F04B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04c u1F04C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04d u1F04D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04e u1F04E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f04f u1F04F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f050 u1F050 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f051 u1F051 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f052 u1F052 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f053 u1F053 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f054 u1F054 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f055 u1F055 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f056 u1F056 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f057 u1F057 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f058 u1F058 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f059 u1F059 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05a u1F05A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05b u1F05B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05c u1F05C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05d u1F05D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05e u1F05E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f05f u1F05F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f060 u1F060 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f061 u1F061 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f062 u1F062 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f063 u1F063 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f064 u1F064 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f065 u1F065 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f066 u1F066 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f067 u1F067 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f068 u1F068 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f069 u1F069 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06a u1F06A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06b u1F06B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06c u1F06C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06d u1F06D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06e u1F06E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f06f u1F06F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f070 u1F070 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f071 u1F071 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f072 u1F072 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f073 u1F073 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f074 u1F074 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f075 u1F075 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f076 u1F076 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f077 u1F077 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f078 u1F078 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f079 u1F079 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07a u1F07A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07b u1F07B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07c u1F07C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07d u1F07D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07e u1F07E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f07f u1F07F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f080 u1F080 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f081 u1F081 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f082 u1F082 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f083 u1F083 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f084 u1F084 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f085 u1F085 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f086 u1F086 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f087 u1F087 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f088 u1F088 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f089 u1F089 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08a u1F08A 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08b u1F08B 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08c u1F08C 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08d u1F08D 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08e u1F08E 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f08f u1F08F 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f090 u1F090 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f091 u1F091 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f092 u1F092 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f093 u1F093 2.32 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a0 u1F0A0 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a1 u1F0A1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a2 u1F0A2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a3 u1F0A3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a4 u1F0A4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a5 u1F0A5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a6 u1F0A6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a7 u1F0A7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a8 u1F0A8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0a9 u1F0A9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0aa u1F0AA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ab u1F0AB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ac u1F0AC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ad u1F0AD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ae u1F0AE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b1 u1F0B1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b2 u1F0B2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b3 u1F0B3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b4 u1F0B4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b5 u1F0B5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b6 u1F0B6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b7 u1F0B7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b8 u1F0B8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0b9 u1F0B9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ba u1F0BA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0bb u1F0BB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0bc u1F0BC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0bd u1F0BD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0be u1F0BE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c1 u1F0C1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c2 u1F0C2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c3 u1F0C3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c4 u1F0C4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c5 u1F0C5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c6 u1F0C6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c7 u1F0C7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c8 u1F0C8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0c9 u1F0C9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ca u1F0CA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cb u1F0CB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cc u1F0CC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cd u1F0CD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0ce u1F0CE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0cf u1F0CF 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d1 u1F0D1 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d2 u1F0D2 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d3 u1F0D3 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d4 u1F0D4 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d5 u1F0D5 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d6 u1F0D6 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d7 u1F0D7 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d8 u1F0D8 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0d9 u1F0D9 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0da u1F0DA 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0db u1F0DB 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0dc u1F0DC 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0dd u1F0DD 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0de u1F0DE 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f0df u1F0DF 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f42d u1F42D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f42e u1F42E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f431 u1F431 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f435 u1F435 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f600 u1F600 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f601 u1F601 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f602 u1F602 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f603 u1F603 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f604 u1F604 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f605 u1F605 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f606 u1F606 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f607 u1F607 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f608 u1F608 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f609 u1F609 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60a u1F60A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60b u1F60B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60c u1F60C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60d u1F60D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60e u1F60E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f60f u1F60F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f610 u1F610 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f611 u1F611 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f612 u1F612 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f613 u1F613 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f614 u1F614 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f615 u1F615 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f616 u1F616 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f617 u1F617 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f618 u1F618 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f619 u1F619 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61a u1F61A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61b u1F61B 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61c u1F61C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61d u1F61D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61e u1F61E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f61f u1F61F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f620 u1F620 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f621 u1F621 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f622 u1F622 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f623 u1F623 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f625 u1F625 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f626 u1F626 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f627 u1F627 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f628 u1F628 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f629 u1F629 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62a u1F62A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62b u1F62B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62d u1F62D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62e u1F62E 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f62f u1F62F 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f630 u1F630 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f631 u1F631 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f632 u1F632 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f633 u1F633 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f634 u1F634 2.34 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f635 u1F635 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f636 u1F636 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f637 u1F637 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f638 u1F638 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f639 u1F639 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63a u1F63A 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63b u1F63B 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63c u1F63C 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63d u1F63D 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63e u1F63E 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f63f u1F63F 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) +U+1f640 u1F640 2.33 (Sans, Sans Bold, Sans Bold Oblique, Sans Condensed, Sans Condensed Bold, Sans Condensed Bold Oblique, Sans Condensed Oblique, Sans Oblique) diff --git a/tcpdf/fonts/dejavu-fonts-ttf-2.34/unicover.txt b/tcpdf/fonts/dejavu-fonts-ttf-2.34/unicover.txt new file mode 100644 index 0000000..c86c056 --- /dev/null +++ b/tcpdf/fonts/dejavu-fonts-ttf-2.34/unicover.txt @@ -0,0 +1,226 @@ +This is the Unicode coverage file for DejaVu fonts +($Id: unicover.txt 2538 2013-08-25 16:02:56Z moyogo $) + +Control and similar characters are discounted from totals. + + Sans Serif Sans Mono +U+0000 Basic Latin 100% (95/95) 100% (95/95) 100% (95/95) +U+0080 Latin-1 Supplement 100% (96/96) 100% (96/96) 100% (96/96) +U+0100 Latin Extended-A 100% (128/128) 100% (128/128) 100% (128/128) +U+0180 Latin Extended-B 100% (208/208) 100% (208/208) 86% (180/208) +U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96) +U+02b0 Spacing Modifier Letters 78% (63/80) 73% (59/80) 62% (50/80) +U+0300 Combining Diacritical Marks 83% (93/112) 61% (69/112) 59% (67/112) +U+0370 Greek and Coptic 100% (134/134) 89% (120/134) 82% (110/134) +U+0400 Cyrillic 100% (256/256) 79% (204/256) 70% (180/256) +U+0500 Cyrillic Supplement 95% (38/40) 25% (10/40) 15% (6/40) +U+0530 Armenian 98% (86/87) 98% (86/87) 98% (86/87) +U+0590 Hebrew 62% (54/87) (0/87) (0/87) +U+0600 Arabic 63% (161/253) (0/253) 39% (99/253) +U+0700 Syriac (0/77) (0/77) (0/77) +U+0750 Arabic Supplement (0/48) (0/48) (0/48) +U+0780 Thaana (0/50) (0/50) (0/50) +U+07c0 NKo 91% (54/59) (0/59) (0/59) +U+0800 Samaritan (0/61) (0/61) (0/61) +U+0840 Mandaic (0/29) (0/29) (0/29) +U+08a0 Arabic Extended-A (0/39) (0/39) (0/39) +U+0900 Devanagari (0/127) (0/127) (0/127) +U+0980 Bengali (0/92) (0/92) (0/92) +U+0a00 Gurmukhi (0/79) (0/79) (0/79) +U+0a80 Gujarati (0/84) (0/84) (0/84) +U+0b00 Oriya (0/90) (0/90) (0/90) +U+0b80 Tamil (0/72) (0/72) (0/72) +U+0c00 Telugu (0/93) (0/93) (0/93) +U+0c80 Kannada (0/86) (0/86) (0/86) +U+0d00 Malayalam (0/98) (0/98) (0/98) +U+0d80 Sinhala (0/80) (0/80) (0/80) +U+0e00 Thai 1% (1/87) (0/87) (0/87) +U+0e80 Lao 97% (65/67) (0/67) 68% (46/67) +U+0f00 Tibetan (0/211) (0/211) (0/211) +U+1000 Myanmar (0/160) (0/160) (0/160) +U+10a0 Georgian 94% (83/88) 94% (83/88) 51% (45/88) +U+1100 Hangul Jamo (0/256) (0/256) (0/256) +U+1200 Ethiopic (0/358) (0/358) (0/358) +U+1380 Ethiopic Supplement (0/26) (0/26) (0/26) +U+13a0 Cherokee (0/85) (0/85) (0/85) +U+1400 Unified Canadian Aboriginal Syllabics 63% (404/640) (0/640) (0/640) +U+1680 Ogham 100% (29/29) (0/29) (0/29) +U+16a0 Runic (0/81) (0/81) (0/81) +U+1700 Tagalog (0/20) (0/20) (0/20) +U+1720 Hanunoo (0/23) (0/23) (0/23) +U+1740 Buhid (0/20) (0/20) (0/20) +U+1760 Tagbanwa (0/18) (0/18) (0/18) +U+1780 Khmer (0/114) (0/114) (0/114) +U+1800 Mongolian (0/156) (0/156) (0/156) +U+18b0 Unified Canadian Aboriginal Syllabics Extended (0/70) (0/70) (0/70) +U+1900 Limbu (0/66) (0/66) (0/66) +U+1950 Tai Le (0/35) (0/35) (0/35) +U+1980 New Tai Lue (0/83) (0/83) (0/83) +U+19e0 Khmer Symbols (0/32) (0/32) (0/32) +U+1a00 Buginese (0/30) (0/30) (0/30) +U+1a20 Tai Tham (0/127) (0/127) (0/127) +U+1b00 Balinese (0/121) (0/121) (0/121) +U+1b80 Sundanese (0/64) (0/64) (0/64) +U+1bc0 Batak (0/56) (0/56) (0/56) +U+1c00 Lepcha (0/74) (0/74) (0/74) +U+1c50 Ol Chiki (0/48) (0/48) (0/48) +U+1cc0 Sundanese Supplement (0/8) (0/8) (0/8) +U+1cd0 Vedic Extensions (0/39) (0/39) (0/39) +U+1d00 Phonetic Extensions 82% (106/128) 89% (115/128) 48% (62/128) +U+1d80 Phonetic Extensions Supplement 59% (38/64) 59% (38/64) 57% (37/64) +U+1dc0 Combining Diacritical Marks Supplement 13% (6/43) 13% (6/43) (0/43) +U+1e00 Latin Extended Additional 98% (252/256) 98% (252/256) 71% (182/256) +U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233) +U+2000 General Punctuation 100% (107/107) 81% (87/107) 49% (53/107) +U+2070 Superscripts and Subscripts 100% (42/42) 100% (42/42) 100% (42/42) +U+20a0 Currency Symbols 92% (25/27) 29% (8/27) 88% (24/27) +U+20d0 Combining Diacritical Marks for Symbols 21% (7/33) (0/33) (0/33) +U+2100 Letterlike Symbols 93% (75/80) 42% (34/80) 22% (18/80) +U+2150 Number Forms 94% (55/58) 94% (55/58) 22% (13/58) +U+2190 Arrows 100% (112/112) 100% (112/112) 100% (112/112) +U+2200 Mathematical Operators 100% (256/256) 39% (100/256) 62% (159/256) +U+2300 Miscellaneous Technical 26% (65/244) 14% (35/244) 47% (117/244) +U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39) +U+2440 Optical Character Recognition (0/11) (0/11) (0/11) +U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160) +U+2500 Box Drawing 100% (128/128) 100% (128/128) 100% (128/128) +U+2580 Block Elements 100% (32/32) 100% (32/32) 100% (32/32) +U+25a0 Geometric Shapes 100% (96/96) 100% (96/96) 100% (96/96) +U+2600 Miscellaneous Symbols 73% (187/256) 11% (30/256) 58% (149/256) +U+2700 Dingbats 91% (174/191) 0% (1/191) 75% (144/191) +U+27c0 Miscellaneous Mathematical Symbols-A 18% (9/48) 10% (5/48) 16% (8/48) +U+27f0 Supplemental Arrows-A 100% (16/16) 100% (16/16) (0/16) +U+2800 Braille Patterns 100% (256/256) 100% (256/256) (0/256) +U+2900 Supplemental Arrows-B 4% (6/128) 100% (128/128) (0/128) +U+2980 Miscellaneous Mathematical Symbols-B 10% (13/128) 0% (1/128) 2% (3/128) +U+2a00 Supplemental Mathematical Operators 28% (74/256) 2% (6/256) 1% (3/256) +U+2b00 Miscellaneous Symbols and Arrows 40% (35/87) 31% (27/87) 20% (18/87) +U+2c00 Glagolitic (0/94) (0/94) (0/94) +U+2c60 Latin Extended-C 96% (31/32) 84% (27/32) 43% (14/32) +U+2c80 Coptic (0/123) (0/123) (0/123) +U+2d00 Georgian Supplement 95% (38/40) 95% (38/40) (0/40) +U+2d30 Tifinagh 93% (55/59) (0/59) (0/59) +U+2d80 Ethiopic Extended (0/79) (0/79) (0/79) +U+2de0 Cyrillic Extended-A (0/32) (0/32) (0/32) +U+2e00 Supplemental Punctuation 11% (7/60) 11% (7/60) 11% (7/60) +U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115) +U+2f00 Kangxi Radicals (0/214) (0/214) (0/214) +U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12) +U+3000 CJK Symbols and Punctuation (0/64) (0/64) (0/64) +U+3040 Hiragana (0/93) (0/93) (0/93) +U+30a0 Katakana (0/96) (0/96) (0/96) +U+3100 Bopomofo (0/41) (0/41) (0/41) +U+3130 Hangul Compatibility Jamo (0/94) (0/94) (0/94) +U+3190 Kanbun (0/16) (0/16) (0/16) +U+31a0 Bopomofo Extended (0/27) (0/27) (0/27) +U+31c0 CJK Strokes (0/36) (0/36) (0/36) +U+31f0 Katakana Phonetic Extensions (0/16) (0/16) (0/16) +U+3200 Enclosed CJK Letters and Months (0/254) (0/254) (0/254) +U+3300 CJK Compatibility (0/256) (0/256) (0/256) +U+3400 CJK Unified Ideographs Extension A (0/0) (0/0) (0/0) +U+4dc0 Yijing Hexagram Symbols 100% (64/64) (0/64) (0/64) +U+4e00 CJK Unified Ideographs (0/0) (0/0) (0/0) +U+a000 Yi Syllables (0/1165) (0/1165) (0/1165) +U+a490 Yi Radicals (0/55) (0/55) (0/55) +U+a4d0 Lisu 100% (48/48) (0/48) (0/48) +U+a500 Vai (0/300) (0/300) (0/300) +U+a640 Cyrillic Extended-B 34% (31/89) 11% (10/89) (0/89) +U+a6a0 Bamum (0/88) (0/88) (0/88) +U+a700 Modifier Tone Letters 62% (20/32) 62% (20/32) 62% (20/32) +U+a720 Latin Extended-D 55% (75/134) 43% (58/134) 11% (15/134) +U+a800 Syloti Nagri (0/44) (0/44) (0/44) +U+a830 Common Indic Number Forms (0/10) (0/10) (0/10) +U+a840 Phags-pa (0/56) (0/56) (0/56) +U+a880 Saurashtra (0/81) (0/81) (0/81) +U+a8e0 Devanagari Extended (0/28) (0/28) (0/28) +U+a900 Kayah Li (0/48) (0/48) (0/48) +U+a930 Rejang (0/37) (0/37) (0/37) +U+a960 Hangul Jamo Extended-A (0/29) (0/29) (0/29) +U+a980 Javanese (0/91) (0/91) (0/91) +U+aa00 Cham (0/83) (0/83) (0/83) +U+aa60 Myanmar Extended-A (0/28) (0/28) (0/28) +U+aa80 Tai Viet (0/72) (0/72) (0/72) +U+aae0 Meetei Mayek Extensions (0/23) (0/23) (0/23) +U+ab00 Ethiopic Extended-A (0/32) (0/32) (0/32) +U+abc0 Meetei Mayek (0/56) (0/56) (0/56) +U+ac00 Hangul Syllables (0/0) (0/0) (0/0) +U+d7b0 Hangul Jamo Extended-B (0/72) (0/72) (0/72) +U+d800 High Surrogates (0/0) (0/0) (0/0) +U+db80 High Private Use Surrogates (0/0) (0/0) (0/0) +U+dc00 Low Surrogates (0/0) (0/0) (0/0) +U+e000 Private Use Area (0/0) (0/0) (0/0) +U+f900 CJK Compatibility Ideographs (0/472) (0/472) (0/472) +U+fb00 Alphabetic Presentation Forms 100% (58/58) 12% (7/58) 3% (2/58) +U+fb50 Arabic Presentation Forms-A 16% (98/611) (0/611) 11% (72/611) +U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16) +U+fe10 Vertical Forms (0/10) (0/10) (0/10) +U+fe20 Combining Half Marks 57% (4/7) (0/7) (0/7) +U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32) +U+fe50 Small Form Variants (0/26) (0/26) (0/26) +U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) 100% (141/141) +U+ff00 Halfwidth and Fullwidth Forms (0/225) (0/225) (0/225) +U+fff0 Specials 100% (5/5) 100% (5/5) 100% (5/5) +U+10000 Linear B Syllabary (0/88) (0/88) (0/88) +U+10080 Linear B Ideograms (0/123) (0/123) (0/123) +U+10100 Aegean Numbers (0/57) (0/57) (0/57) +U+10140 Ancient Greek Numbers (0/75) (0/75) (0/75) +U+10190 Ancient Symbols (0/12) (0/12) (0/12) +U+101d0 Phaistos Disc (0/46) (0/46) (0/46) +U+10280 Lycian (0/29) (0/29) (0/29) +U+102a0 Carian (0/49) (0/49) (0/49) +U+10300 Old Italic 100% (35/35) (0/35) (0/35) +U+10330 Gothic (0/27) (0/27) (0/27) +U+10380 Ugaritic (0/31) (0/31) (0/31) +U+103a0 Old Persian (0/50) (0/50) (0/50) +U+10400 Deseret (0/80) (0/80) (0/80) +U+10450 Shavian (0/48) (0/48) (0/48) +U+10480 Osmanya (0/40) (0/40) (0/40) +U+10800 Cypriot Syllabary (0/55) (0/55) (0/55) +U+10840 Imperial Aramaic (0/31) (0/31) (0/31) +U+10900 Phoenician (0/29) (0/29) (0/29) +U+10920 Lydian (0/27) (0/27) (0/27) +U+10980 Meroitic Hieroglyphs (0/32) (0/32) (0/32) +U+109a0 Meroitic Cursive (0/26) (0/26) (0/26) +U+10a00 Kharoshthi (0/65) (0/65) (0/65) +U+10a60 Old South Arabian (0/32) (0/32) (0/32) +U+10b00 Avestan (0/61) (0/61) (0/61) +U+10b40 Inscriptional Parthian (0/30) (0/30) (0/30) +U+10b60 Inscriptional Pahlavi (0/27) (0/27) (0/27) +U+10c00 Old Turkic (0/73) (0/73) (0/73) +U+10e60 Rumi Numeral Symbols (0/31) (0/31) (0/31) +U+11000 Brahmi (0/108) (0/108) (0/108) +U+11080 Kaithi (0/66) (0/66) (0/66) +U+110d0 Sora Sompeng (0/35) (0/35) (0/35) +U+11100 Chakma (0/67) (0/67) (0/67) +U+11180 Sharada (0/83) (0/83) (0/83) +U+11680 Takri (0/66) (0/66) (0/66) +U+12000 Cuneiform (0/879) (0/879) (0/879) +U+12400 Cuneiform Numbers and Punctuation (0/103) (0/103) (0/103) +U+13000 Egyptian Hieroglyphs (0/1071) (0/1071) (0/1071) +U+16800 Bamum Supplement (0/569) (0/569) (0/569) +U+16f00 Miao (0/133) (0/133) (0/133) +U+1b000 Kana Supplement (0/2) (0/2) (0/2) +U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246) +U+1d100 Musical Symbols (0/220) (0/220) (0/220) +U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70) +U+1d300 Tai Xuan Jing Symbols 100% (87/87) (0/87) (0/87) +U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18) +U+1d400 Mathematical Alphanumeric Symbols 11% (117/996) 5% (55/996) 6% (63/996) +U+1ee00 Arabic Mathematical Alphabetic Symbols (0/143) (0/143) (0/143) +U+1f000 Mahjong Tiles (0/44) (0/44) (0/44) +U+1f030 Domino Tiles 100% (100/100) (0/100) (0/100) +U+1f0a0 Playing Cards 100% (59/59) (0/59) (0/59) +U+1f100 Enclosed Alphanumeric Supplement (0/171) (0/171) (0/171) +U+1f200 Enclosed Ideographic Supplement (0/57) (0/57) (0/57) +U+1f300 Miscellaneous Symbols And Pictographs 0% (4/533) (0/533) (0/533) +U+1f600 Emoticons 82% (63/76) (0/76) (0/76) +U+1f680 Transport And Map Symbols (0/70) (0/70) (0/70) +U+1f700 Alchemical Symbols (0/116) (0/116) (0/116) +U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0) +U+2a700 CJK Unified Ideographs Extension C (0/0) (0/0) (0/0) +U+2b740 CJK Unified Ideographs Extension D (0/0) (0/0) (0/0) +U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542) +U+e0000 Tags (0/98) (0/98) (0/98) +U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240) +U+f0000 Supplementary Private Use Area-A (0/0) (0/0) (0/0) +U+100000 Supplementary Private Use Area-B (0/0) (0/0) (0/0) diff --git a/tcpdf/fonts/dejavusans.ctg.z b/tcpdf/fonts/dejavusans.ctg.z new file mode 100644 index 0000000..df25b64 Binary files /dev/null and b/tcpdf/fonts/dejavusans.ctg.z differ diff --git a/tcpdf/fonts/dejavusans.php b/tcpdf/fonts/dejavusans.php new file mode 100644 index 0000000..72147be --- /dev/null +++ b/tcpdf/fonts/dejavusans.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSans'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=741536; +$enc=''; +$file='dejavusans.z'; +$ctg='dejavusans.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-1021 -415 1681 1167]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>507,'MaxWidth'=>1735,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(151,0,250,729),34=>array(96,458,364,729),35=>array(77,0,761,718),36=>array(83,-147,553,760),37=>array(55,-14,895,742),38=>array(63,-14,749,742),39=>array(96,458,179,729),40=>array(86,-132,310,759),41=>array(80,-132,304,759),42=>array(30,286,470,742),43=>array(106,0,732,627),44=>array(77,-116,220,124),45=>array(49,234,312,314),46=>array(107,0,210,124),47=>array(0,-93,337,729),48=>array(66,-14,570,742),49=>array(110,0,544,729),50=>array(73,0,536,742),51=>array(76,-14,556,742),52=>array(49,0,580,729),53=>array(77,-14,549,729),54=>array(70,-14,573,742),55=>array(82,0,551,729),56=>array(68,-14,568,742),57=>array(63,-14,566,742),58=>array(117,0,220,517),59=>array(77,-116,220,517),60=>array(106,46,732,581),61=>array(106,172,732,454),62=>array(106,46,732,581),63=>array(72,0,461,742),64=>array(66,-174,930,704),65=>array(8,0,676,729),66=>array(98,0,615,729),67=>array(56,-14,644,742),68=>array(98,0,711,729),69=>array(98,0,568,729),70=>array(98,0,517,729),71=>array(56,-14,693,742),72=>array(98,0,654,729),73=>array(98,0,197,729),74=>array(-52,-200,197,729),75=>array(98,0,677,729),76=>array(98,0,552,729),77=>array(98,0,765,729),78=>array(98,0,650,729),79=>array(56,-14,731,742),80=>array(98,0,569,729),81=>array(56,-129,731,742),82=>array(98,0,666,729),83=>array(66,-14,579,742),84=>array(-3,0,614,729),85=>array(87,-14,645,729),86=>array(8,0,676,729),87=>array(33,0,956,729),88=>array(30,0,654,729),89=>array(-2,0,613,729),90=>array(45,0,640,729),91=>array(86,-132,293,760),92=>array(0,-93,337,729),93=>array(97,-132,304,760),94=>array(106,457,732,729),95=>array(-10,-236,510,-166),96=>array(83,617,317,800),97=>array(60,-14,522,560),98=>array(91,-14,580,760),99=>array(55,-14,488,560),100=>array(55,-14,544,760),101=>array(55,-14,562,560),102=>array(23,0,371,760),103=>array(55,-208,544,560),104=>array(91,0,549,760),105=>array(94,0,184,760),106=>array(-18,-208,184,760),107=>array(91,0,576,760),108=>array(94,0,184,760),109=>array(91,0,889,560),110=>array(91,0,549,560),111=>array(55,-14,557,560),112=>array(91,-208,580,560),113=>array(55,-208,544,560),114=>array(91,0,411,560),115=>array(54,-14,472,560),116=>array(27,0,368,702),117=>array(85,-14,543,560),118=>array(30,0,562,547),119=>array(42,0,776,547),120=>array(29,0,559,547),121=>array(30,-208,562,547),122=>array(43,0,482,547),123=>array(125,-163,511,760),124=>array(127,-236,210,764),125=>array(125,-163,511,760),126=>array(106,228,732,399),161=>array(151,0,250,729),162=>array(84,-153,517,699),163=>array(63,0,548,742),164=>array(46,40,592,587),165=>array(40,0,595,729),166=>array(127,-171,210,699),167=>array(45,-95,454,742),168=>array(105,659,395,758),169=>array(138,0,862,725),170=>array(56,229,404,742),171=>array(77,69,518,517),172=>array(106,140,732,421),173=>array(49,234,312,314),174=>array(138,0,862,725),175=>array(104,673,396,745),176=>array(95,432,405,742),177=>array(106,0,732,627),178=>array(46,326,338,742),179=>array(48,319,350,742),180=>array(181,616,415,800),181=>array(85,-208,612,547),182=>array(77,-96,528,729),183=>array(107,285,210,409),184=>array(142,-193,344,0),185=>array(67,326,346,734),186=>array(47,229,424,742),187=>array(94,69,535,517),188=>array(67,-14,937,742),189=>array(67,-14,906,742),190=>array(48,-14,937,742),191=>array(70,-14,459,729),192=>array(8,0,676,927),193=>array(8,0,676,927),194=>array(8,0,676,928),195=>array(8,0,676,921),196=>array(8,0,676,913),197=>array(8,0,676,928),198=>array(4,0,910,729),199=>array(56,-193,644,742),200=>array(98,0,568,927),201=>array(98,0,568,927),202=>array(98,0,568,928),203=>array(98,0,568,913),204=>array(29,0,216,927),205=>array(79,0,265,927),206=>array(-1,0,297,928),207=>array(3,0,293,913),208=>array(5,0,716,729),209=>array(98,0,650,921),210=>array(56,-14,731,927),211=>array(56,-14,731,927),212=>array(56,-14,731,928),213=>array(56,-14,731,921),214=>array(56,-14,731,913),215=>array(137,31,701,596),216=>array(50,-34,737,761),217=>array(87,-14,645,927),218=>array(87,-14,645,927),219=>array(87,-14,645,928),220=>array(87,-14,645,913),221=>array(-2,0,613,927),222=>array(98,0,569,729),223=>array(91,-14,584,760),224=>array(60,-14,522,800),225=>array(60,-14,522,800),226=>array(60,-14,522,800),227=>array(60,-14,522,777),228=>array(60,-14,522,758),229=>array(60,-14,522,878),230=>array(60,-14,929,560),231=>array(55,-193,488,560),232=>array(55,-14,562,800),233=>array(55,-14,562,800),234=>array(55,-14,562,800),235=>array(55,-14,562,758),236=>array(-28,0,206,800),237=>array(70,0,304,800),238=>array(-17,0,295,800),239=>array(-6,0,284,758),240=>array(55,-14,557,760),241=>array(91,0,549,777),242=>array(55,-14,557,800),243=>array(55,-14,557,800),244=>array(55,-14,557,800),245=>array(55,-14,557,777),246=>array(55,-14,557,758),247=>array(106,73,732,554),248=>array(35,-46,576,592),249=>array(85,-14,543,800),250=>array(85,-14,543,800),251=>array(85,-14,543,800),252=>array(85,-14,543,758),253=>array(30,-208,562,800),254=>array(91,-208,580,760),255=>array(30,-208,562,758),256=>array(8,0,676,899),257=>array(60,-14,522,745),258=>array(8,0,676,946),259=>array(60,-14,522,765),260=>array(8,-193,706,729),261=>array(60,-193,563,560),262=>array(56,-14,644,927),263=>array(55,-14,488,800),264=>array(56,-14,644,928),265=>array(55,-14,488,800),266=>array(56,-14,644,914),267=>array(55,-14,488,760),268=>array(56,-14,644,928),269=>array(55,-14,488,800),270=>array(98,0,711,928),271=>array(55,-14,732,760),272=>array(5,0,716,729),273=>array(55,-14,619,760),274=>array(98,0,568,900),275=>array(55,-14,562,745),276=>array(98,0,568,928),277=>array(55,-14,562,785),278=>array(98,0,568,914),279=>array(55,-14,562,760),280=>array(98,-193,569,729),281=>array(55,-193,562,560),282=>array(98,0,568,925),283=>array(55,-14,562,797),284=>array(56,-14,693,928),285=>array(55,-208,544,800),286=>array(56,-14,693,928),287=>array(55,-208,544,785),288=>array(56,-14,693,914),289=>array(55,-208,544,760),290=>array(56,-250,693,742),291=>array(55,-208,544,775),292=>array(98,0,654,928),293=>array(-13,0,549,928),294=>array(98,0,818,729),295=>array(59,0,578,760),296=>array(-14,0,309,921),297=>array(-22,0,300,777),298=>array(1,0,293,899),299=>array(-7,0,285,745),300=>array(-5,0,300,928),301=>array(-14,0,292,785),302=>array(86,-193,268,729),303=>array(73,-193,255,760),304=>array(98,0,198,914),305=>array(94,0,184,560),306=>array(98,-200,492,729),307=>array(94,-208,461,760),308=>array(-52,-200,296,928),309=>array(-18,-208,295,800),310=>array(98,-235,677,729),311=>array(91,-235,576,760),312=>array(91,0,576,547),313=>array(98,0,552,928),314=>array(94,0,286,928),315=>array(98,-235,552,729),316=>array(66,-235,209,760),317=>array(98,0,552,729),318=>array(94,0,375,760),319=>array(98,0,552,729),320=>array(94,0,314,760),321=>array(-7,0,557,729),322=>array(1,0,285,760),323=>array(98,0,650,928),324=>array(91,0,549,803),325=>array(98,-235,650,729),326=>array(91,-235,549,560),327=>array(98,0,650,921),328=>array(91,0,549,800),329=>array(100,0,715,729),330=>array(98,-208,637,742),331=>array(91,-208,549,560),332=>array(56,-14,731,899),333=>array(55,-14,557,745),334=>array(56,-14,731,928),335=>array(55,-14,557,785),336=>array(56,-14,731,927),337=>array(55,-14,557,800),338=>array(56,0,1006,729),339=>array(55,-14,970,560),340=>array(98,0,666,928),341=>array(91,0,447,803),342=>array(98,-235,666,729),343=>array(63,-235,411,560),344=>array(98,0,666,921),345=>array(91,0,419,800),346=>array(66,-14,579,928),347=>array(54,-14,472,803),348=>array(66,-14,579,928),349=>array(54,-14,472,800),350=>array(66,-193,579,742),351=>array(54,-193,472,560),352=>array(66,-14,579,928),353=>array(54,-14,472,800),354=>array(-3,-193,614,729),355=>array(27,-193,368,702),356=>array(-3,0,614,921),357=>array(27,0,374,813),358=>array(-3,0,614,729),359=>array(27,0,368,702),360=>array(87,-14,645,921),361=>array(85,-14,543,777),362=>array(87,-14,645,899),363=>array(85,-14,543,745),364=>array(87,-14,645,928),365=>array(85,-14,543,785),366=>array(87,-14,645,929),367=>array(85,-14,543,849),368=>array(87,-14,645,927),369=>array(85,-14,546,800),370=>array(87,-193,645,729),371=>array(85,-193,613,560),372=>array(33,0,956,932),373=>array(42,0,776,803),374=>array(-2,0,613,932),375=>array(30,-208,562,803),376=>array(-2,0,613,913),377=>array(45,0,640,928),378=>array(43,0,482,803),379=>array(45,0,640,914),380=>array(43,0,482,760),381=>array(45,0,640,928),382=>array(43,0,482,800),383=>array(23,0,371,760),384=>array(16,-14,580,760),385=>array(-51,0,664,729),386=>array(98,0,615,729),387=>array(91,-14,580,760),388=>array(0,0,615,729),389=>array(0,-14,580,760),390=>array(56,-14,644,742),391=>array(56,-14,794,924),392=>array(55,-14,600,760),393=>array(5,0,716,729),394=>array(-51,0,760,729),395=>array(98,0,615,729),396=>array(55,-14,544,760),397=>array(55,-208,557,548),398=>array(64,0,534,729),399=>array(57,-14,731,742),400=>array(80,-14,560,742),401=>array(-52,-200,517,729),402=>array(-63,-208,371,760),403=>array(56,-14,824,924),404=>array(4,-210,683,729),405=>array(91,0,910,760),406=>array(98,0,347,729),407=>array(5,0,290,729),408=>array(98,0,746,742),409=>array(90,0,576,760),410=>array(5,0,271,760),411=>array(30,0,562,760),412=>array(87,-14,894,729),413=>array(-52,-200,650,729),414=>array(91,-208,549,560),415=>array(56,-14,731,742),416=>array(50,-14,764,760),417=>array(58,-14,603,615),418=>array(56,-14,851,742),419=>array(55,-208,668,560),420=>array(-51,0,618,729),421=>array(90,-208,580,760),422=>array(98,-129,666,729),423=>array(56,-14,569,742),424=>array(49,-14,467,560),425=>array(98,0,568,729),426=>array(-132,-208,355,760),427=>array(27,-208,368,702),428=>array(12,0,614,729),429=>array(27,0,368,760),430=>array(-3,-200,614,729),431=>array(84,-4,796,760),432=>array(86,-14,676,615),433=>array(38,-14,726,724),434=>array(98,-15,683,729),435=>array(-2,0,742,742),436=>array(30,-208,730,560),437=>array(45,0,640,729),438=>array(43,0,482,547),439=>array(78,-31,621,729),440=>array(45,-31,588,729),441=>array(51,-213,531,547),442=>array(55,-208,488,547),443=>array(73,0,536,742),444=>array(45,-31,622,729),445=>array(51,-213,531,547),446=>array(43,-14,456,702),447=>array(91,-208,580,560),448=>array(98,-208,197,729),449=>array(98,-208,394,729),450=>array(10,-208,451,729),451=>array(98,0,197,729),452=>array(98,0,1352,928),453=>array(98,0,1211,800),454=>array(55,-14,1071,800),455=>array(98,-200,768,729),456=>array(98,-208,733,760),457=>array(94,-208,367,760),458=>array(98,-200,868,729),459=>array(98,-208,839,760),460=>array(91,-208,733,760),461=>array(8,0,676,928),462=>array(60,-14,522,800),463=>array(-1,0,297,928),464=>array(-16,0,296,800),465=>array(56,-14,731,928),466=>array(55,-14,557,800),467=>array(87,-14,645,928),468=>array(85,-14,543,800),469=>array(87,-14,645,1025),470=>array(85,-14,543,899),471=>array(87,-14,645,1044),472=>array(85,-14,543,892),473=>array(87,-14,645,1044),474=>array(85,-14,543,892),475=>array(87,-14,645,1047),476=>array(85,-14,543,892),477=>array(55,-14,562,560),478=>array(8,0,676,1025),479=>array(60,-14,522,899),480=>array(8,0,676,1025),481=>array(60,-14,522,869),482=>array(4,0,910,900),483=>array(60,-14,929,743),484=>array(56,-14,752,742),485=>array(55,-208,622,560),486=>array(56,-14,693,928),487=>array(55,-208,544,798),488=>array(98,0,677,928),489=>array(-11,0,576,928),490=>array(56,-193,731,742),491=>array(55,-193,557,560),492=>array(56,-193,731,899),493=>array(55,-193,557,745),494=>array(78,-31,621,928),495=>array(43,-213,523,800),496=>array(-18,-208,299,800),497=>array(98,0,1352,729),498=>array(98,0,1211,729),499=>array(55,-14,1071,760),500=>array(56,-14,693,928),501=>array(55,-208,544,798),502=>array(98,-14,1022,729),503=>array(98,-208,626,742),504=>array(98,0,650,927),505=>array(91,0,549,799),506=>array(8,0,676,931),507=>array(60,-14,607,931),508=>array(4,0,910,928),509=>array(60,-14,929,798),510=>array(50,-34,737,928),511=>array(35,-46,576,798),512=>array(8,0,676,930),513=>array(60,-14,522,799),514=>array(8,0,676,901),515=>array(60,-14,522,785),516=>array(98,0,568,930),517=>array(55,-14,562,798),518=>array(98,0,568,901),519=>array(55,-14,562,785),520=>array(-43,0,306,930),521=>array(-30,0,313,798),522=>array(2,0,308,901),523=>array(-14,0,292,785),524=>array(56,-14,731,930),525=>array(55,-14,557,799),526=>array(56,-14,731,901),527=>array(55,-14,557,785),528=>array(97,0,666,930),529=>array(63,0,411,798),530=>array(98,0,666,901),531=>array(91,0,421,785),532=>array(87,-14,645,930),533=>array(85,-14,543,799),534=>array(87,-14,645,901),535=>array(85,-14,543,785),536=>array(66,-240,579,742),537=>array(54,-240,472,560),538=>array(-3,-240,614,729),539=>array(27,-240,368,702),540=>array(76,-210,556,742),541=>array(35,-211,467,560),542=>array(98,0,654,928),543=>array(-8,0,549,928),544=>array(98,-208,637,742),545=>array(55,-70,783,760),546=>array(55,-14,643,742),547=>array(55,-14,555,632),548=>array(45,-208,640,729),549=>array(43,-208,482,547),550=>array(8,0,676,914),551=>array(60,-14,522,760),552=>array(98,-193,568,729),553=>array(55,-193,562,560),554=>array(56,-14,731,1025),555=>array(55,-14,557,899),556=>array(56,-14,731,1025),557=>array(55,-14,557,864),558=>array(56,-14,731,914),559=>array(55,-14,557,760),560=>array(56,-14,731,1025),561=>array(55,-14,557,899),562=>array(-2,0,613,899),563=>array(30,-208,562,745),564=>array(67,-70,420,757),565=>array(91,-70,788,560),566=>array(27,-70,422,702),567=>array(-18,-208,184,547),568=>array(55,-14,943,760),569=>array(55,-208,943,560),570=>array(-1,-34,686,761),571=>array(6,-34,692,761),572=>array(4,-46,545,592),573=>array(5,0,552,729),574=>array(-38,-34,649,761),575=>array(54,-242,512,560),576=>array(43,-242,525,547),577=>array(39,0,569,729),578=>array(39,0,445,560),579=>array(5,0,615,729),580=>array(6,-14,726,729),581=>array(8,0,676,729),582=>array(98,-93,568,822),583=>array(55,-93,562,640),584=>array(-52,-200,290,729),585=>array(-18,-208,264,760),586=>array(56,-200,836,743),587=>array(55,-208,656,560),588=>array(5,0,666,729),589=>array(7,0,411,560),590=>array(-5,0,615,729),591=>array(5,-208,588,547),592=>array(85,-14,547,560),593=>array(55,-14,544,560),594=>array(91,-14,580,560),595=>array(91,-14,580,760),596=>array(62,-14,495,560),597=>array(55,-69,488,560),598=>array(55,-208,656,760),599=>array(55,-14,715,760),600=>array(55,-14,562,560),601=>array(55,-14,562,560),602=>array(61,-14,814,560),603=>array(65,-14,473,561),604=>array(65,-14,473,561),605=>array(65,-14,771,561),606=>array(55,-14,596,561),607=>array(-18,-208,264,547),608=>array(55,-208,715,760),609=>array(55,-208,544,547),610=>array(55,-14,539,560),611=>array(47,-210,549,547),612=>array(47,-14,549,547),613=>array(85,-208,543,547),614=>array(91,0,549,760),615=>array(91,-208,549,760),616=>array(7,0,265,760),617=>array(81,0,304,547),618=>array(57,0,314,547),619=>array(37,0,359,760),620=>array(38,0,416,760),621=>array(94,-208,296,760),622=>array(94,-213,651,760),623=>array(91,-13,889,548),624=>array(91,-208,889,548),625=>array(91,-208,889,560),626=>array(-18,-208,552,560),627=>array(91,-208,661,560),628=>array(87,0,549,547),629=>array(55,-14,557,560),630=>array(55,0,768,547),631=>array(72,-18,655,561),632=>array(55,-208,602,760),633=>array(0,-13,320,547),634=>array(0,-13,320,755),635=>array(0,-208,433,547),636=>array(91,-207,411,560),637=>array(91,-208,411,560),638=>array(64,0,437,560),639=>array(57,0,437,560),640=>array(91,0,574,547),641=>array(91,0,574,547),642=>array(54,-208,472,560),643=>array(-19,-208,355,760),644=>array(-19,-208,355,760),645=>array(27,-208,401,549),646=>array(-132,-208,355,760),647=>array(27,-156,368,546),648=>array(27,-208,370,702),649=>array(0,-14,634,547),650=>array(55,-15,564,547),651=>array(94,0,545,548),652=>array(30,0,562,547),653=>array(42,0,776,547),654=>array(30,0,562,760),655=>array(50,0,552,547),656=>array(43,-208,593,547),657=>array(43,-54,482,547),658=>array(43,-213,523,547),659=>array(53,-213,553,547),660=>array(43,0,456,759),661=>array(43,0,456,759),662=>array(43,0,456,759),663=>array(43,-213,456,760),664=>array(56,-14,731,742),665=>array(91,0,530,547),666=>array(55,-14,596,561),667=>array(55,-14,724,760),668=>array(91,0,563,547),669=>array(-132,-208,272,760),670=>array(91,-213,576,547),671=>array(91,0,493,547),672=>array(55,-208,746,759),673=>array(43,0,456,759),674=>array(43,0,456,759),675=>array(55,-14,970,760),676=>array(55,-213,1014,760),677=>array(55,-54,970,760),678=>array(27,0,781,702),679=>array(27,-208,629,760),680=>array(27,-70,723,702),681=>array(23,-208,804,760),682=>array(94,0,657,760),683=>array(94,0,610,760),684=>array(26,-15,489,640),685=>array(26,84,489,640),686=>array(0,-214,570,760),687=>array(0,-208,683,760),688=>array(57,326,346,751),689=>array(57,326,346,751),690=>array(-11,209,116,751),691=>array(57,326,259,640),692=>array(35,319,236,632),693=>array(35,209,307,632),694=>array(16,326,320,632),695=>array(26,326,489,632),696=>array(19,209,354,632),697=>array(78,557,203,800),698=>array(78,557,384,800),699=>array(85,489,228,729),700=>array(87,499,230,729),701=>array(96,616,239,856),702=>array(57,492,191,760),703=>array(57,492,191,760),704=>array(57,326,317,751),705=>array(57,326,317,751),706=>array(130,524,370,836),707=>array(130,524,370,836),708=>array(94,561,406,800),709=>array(94,561,406,800),710=>array(94,616,406,800),711=>array(94,616,406,800),712=>array(104,488,171,759),713=>array(104,673,396,745),714=>array(181,616,415,800),715=>array(83,617,317,800),716=>array(104,-148,171,123),717=>array(104,-156,396,-84),718=>array(83,-236,317,-54),719=>array(181,-236,415,-53),720=>array(54,0,229,517),721=>array(54,356,229,517),722=>array(57,249,191,517),723=>array(57,249,191,517),724=>array(140,229,360,448),725=>array(140,229,360,448),726=>array(49,125,341,417),727=>array(49,234,269,307),728=>array(97,645,403,785),729=>array(200,658,300,758),730=>array(116,610,384,878),731=>array(162,-193,344,0),732=>array(89,639,411,777),733=>array(117,616,460,800),734=>array(-0,233,334,504),735=>array(117,616,383,800),736=>array(57,208,374,632),737=>array(60,326,116,751),738=>array(57,326,320,648),739=>array(57,326,391,632),740=>array(57,326,317,751),741=>array(104,0,389,668),742=>array(104,0,389,668),743=>array(104,0,389,668),744=>array(104,0,389,668),745=>array(104,0,389,668),748=>array(94,-260,406,-21),749=>array(104,610,396,808),750=>array(85,489,428,729),755=>array(116,-240,384,28),759=>array(89,-192,411,-55),768=>array(-418,560,-184,800),769=>array(-320,560,-86,800),770=>array(-406,560,-94,800),771=>array(-412,639,-90,777),772=>array(-394,673,-102,745),773=>array(-510,686,10,755),774=>array(-407,645,-101,785),775=>array(-296,560,-206,760),776=>array(-395,560,-105,758),777=>array(-348,618,-129,810),778=>array(-385,610,-117,878),779=>array(-381,616,-38,800),780=>array(-404,560,-92,800),781=>array(-283,615,-217,832),782=>array(-383,615,-117,832),783=>array(-455,616,-112,800),784=>array(-407,645,-101,917),785=>array(-407,645,-101,785),786=>array(-235,489,-92,645),787=>array(-305,595,-187,844),788=>array(-305,595,-187,844),789=>array(-66,575,66,759),790=>array(-418,-266,-184,-83),791=>array(-320,-267,-86,-83),792=>array(-357,-240,-221,-24),793=>array(-279,-240,-143,-24),794=>array(-208,690,31,930),795=>array(-133,427,60,609),796=>array(-313,-241,-208,-32),797=>array(-370,-240,-130,-87),798=>array(-370,-240,-130,-87),799=>array(-357,-240,-143,-24),800=>array(-370,-184,-130,-117),801=>array(-315,-208,-23,63),802=>array(-317,-208,-25,63),803=>array(-296,-183,-206,-69),804=>array(-396,-183,-106,-84),805=>array(-355,-241,-146,-32),806=>array(-323,-240,-180,-84),807=>array(-358,-193,-156,0),808=>array(-338,-193,-156,0),809=>array(-283,-240,-217,-47),810=>array(-383,-211,-114,-50),811=>array(-452,-222,-51,-82),812=>array(-404,-240,-92,-57),813=>array(-407,-240,-95,-57),814=>array(-407,-222,-101,-82),815=>array(-407,-224,-101,-83),816=>array(-412,-222,-90,-84),817=>array(-394,-156,-102,-84),818=>array(-510,-236,10,-166),819=>array(-510,-236,10,-9),820=>array(-557,240,-41,381),821=>array(-316,221,-59,301),822=>array(-634,221,-0,301),823=>array(-574,-46,-33,592),824=>array(-741,-34,-54,761),825=>array(-291,-241,-187,-32),826=>array(-382,-206,-113,-44),827=>array(-359,-240,-139,-21),828=>array(-452,-222,-51,-82),829=>array(-354,619,-138,834),830=>array(-247,595,-109,853),831=>array(-510,528,10,755),832=>array(-418,617,-184,800),833=>array(-320,616,-86,800),834=>array(-412,639,-90,777),835=>array(-305,595,-187,844),836=>array(-387,659,-77,978),837=>array(-278,-208,-171,-45),838=>array(-396,639,-104,786),839=>array(-360,-226,-140,-35),840=>array(-365,-240,-135,-47),841=>array(-360,-240,-140,-21),842=>array(-411,616,-89,800),843=>array(-411,567,-89,850),844=>array(-411,596,-89,820),845=>array(-452,-230,-48,-30),846=>array(-350,-240,-150,-45),849=>array(-316,610,-184,878),850=>array(-407,547,-101,855),851=>array(-354,-240,-138,-24),855=>array(-316,610,-184,878),856=>array(-103,658,-3,758),858=>array(-430,-241,-71,-32),860=>array(-445,-237,445,-60),861=>array(-445,802,445,979),862=>array(-445,855,445,927),863=>array(-445,-156,445,-84),864=>array(-354,756,354,894),865=>array(-445,752,445,929),866=>array(-442,-230,447,-30),880=>array(98,0,555,729),881=>array(94,0,477,547),882=>array(98,0,764,729),883=>array(98,0,549,729),884=>array(78,557,203,800),885=>array(78,-208,203,35),886=>array(98,0,650,729),887=>array(91,0,559,547),890=>array(214,-208,321,-45),891=>array(62,-14,495,560),892=>array(55,-14,488,560),893=>array(62,-14,495,560),894=>array(77,-116,220,517),900=>array(181,616,415,800),901=>array(105,659,415,978),902=>array(8,0,676,800),903=>array(107,285,210,409),904=>array(-12,0,682,800),905=>array(-6,0,765,800),906=>array(-9,0,311,800),908=>array(-7,-14,750,800),910=>array(-15,0,821,800),911=>array(-18,0,752,800),912=>array(2,0,313,978),913=>array(8,0,676,729),914=>array(98,0,615,729),915=>array(98,0,552,729),916=>array(8,0,676,729),917=>array(98,0,568,729),918=>array(45,0,640,729),919=>array(98,0,654,729),920=>array(56,-14,731,742),921=>array(98,0,197,729),922=>array(98,0,677,729),923=>array(8,0,676,729),924=>array(98,0,765,729),925=>array(98,0,650,729),926=>array(98,0,548,729),927=>array(56,-14,731,742),928=>array(98,0,654,729),929=>array(98,0,569,729),931=>array(98,0,568,729),932=>array(-3,0,614,729),933=>array(-2,0,613,729),934=>array(56,0,731,729),935=>array(30,0,654,729),936=>array(56,0,732,729),937=>array(38,0,726,738),938=>array(3,0,293,913),939=>array(-2,0,613,913),940=>array(55,-12,611,800),941=>array(65,-14,473,800),942=>array(91,-208,549,800),943=>array(81,0,324,800),944=>array(73,-14,521,978),945=>array(55,-12,611,559),946=>array(94,-208,566,766),947=>array(16,-208,562,547),948=>array(55,-14,557,742),949=>array(65,-14,473,561),950=>array(52,-210,496,760),951=>array(91,-208,549,560),952=>array(55,-11,557,768),953=>array(81,0,304,547),954=>array(93,0,565,547),955=>array(30,0,562,760),956=>array(85,-208,612,547),957=>array(36,0,512,547),958=>array(52,-210,500,760),959=>array(55,-14,557,560),960=>array(36,-19,574,547),961=>array(91,-208,580,560),962=>array(55,-210,488,560),963=>array(55,-14,604,547),964=>array(49,0,553,547),965=>array(73,-14,521,547),966=>array(55,-208,602,551),967=>array(29,-208,549,547),968=>array(55,-208,602,547),969=>array(66,-14,769,547),970=>array(2,0,311,758),971=>array(73,-14,521,758),972=>array(55,-14,557,800),973=>array(73,-14,521,800),974=>array(66,-14,769,800),975=>array(98,-208,677,729),976=>array(82,-11,538,768),977=>array(55,-11,557,768),978=>array(42,0,665,734),979=>array(-15,0,829,800),980=>array(42,0,665,913),981=>array(55,-208,602,760),982=>array(32,-14,803,547),983=>array(55,-206,600,550),984=>array(56,-207,731,742),985=>array(55,-208,557,560),986=>array(68,-210,583,729),987=>array(55,-210,540,547),988=>array(98,0,517,729),989=>array(-94,-208,409,760),990=>array(87,-2,604,729),991=>array(93,0,566,759),992=>array(56,-208,797,742),993=>array(58,-180,573,559),994=>array(56,-213,877,729),995=>array(66,-208,769,547),996=>array(56,-208,660,742),997=>array(55,-208,568,560),998=>array(98,-213,735,729),999=>array(22,-14,571,575),1000=>array(39,-208,630,745),1001=>array(49,-208,552,560),1002=>array(56,0,714,742),1003=>array(26,0,599,560),1004=>array(56,-14,643,758),1005=>array(55,-14,544,758),1006=>array(21,-208,589,729),1007=>array(27,-208,510,726),1008=>array(55,-7,600,550),1009=>array(91,-208,580,560),1010=>array(55,-14,488,560),1011=>array(-18,-208,184,760),1012=>array(56,-14,731,742),1013=>array(55,-14,480,560),1014=>array(96,-14,521,560),1015=>array(98,0,569,729),1016=>array(91,-208,580,760),1017=>array(56,-14,644,742),1018=>array(98,0,765,729),1019=>array(62,-208,587,547),1020=>array(42,-208,580,560),1021=>array(56,-14,644,742),1022=>array(56,-14,644,742),1023=>array(56,-14,644,742),1024=>array(98,0,568,927),1025=>array(98,0,568,913),1026=>array(-3,-200,709,729),1027=>array(98,0,552,927),1028=>array(56,-14,644,742),1029=>array(66,-14,579,742),1030=>array(98,0,197,729),1031=>array(3,0,293,913),1032=>array(-52,-200,197,729),1033=>array(41,0,1023,729),1034=>array(98,0,975,729),1035=>array(-3,0,709,729),1036=>array(98,0,690,927),1037=>array(98,0,650,927),1038=>array(17,0,592,928),1039=>array(98,-157,654,729),1040=>array(8,0,676,729),1041=>array(98,0,615,729),1042=>array(98,0,615,729),1043=>array(98,0,552,729),1044=>array(49,-157,732,729),1045=>array(98,0,568,729),1046=>array(20,0,1058,729),1047=>array(66,-14,575,742),1048=>array(98,0,650,729),1049=>array(98,0,650,928),1050=>array(98,0,690,729),1051=>array(41,0,653,729),1052=>array(98,0,765,729),1053=>array(98,0,654,729),1054=>array(56,-14,731,742),1055=>array(98,0,654,729),1056=>array(98,0,569,729),1057=>array(56,-14,644,742),1058=>array(-3,0,614,729),1059=>array(17,0,592,729),1060=>array(59,0,802,729),1061=>array(30,0,654,729),1062=>array(98,-157,737,729),1063=>array(85,0,587,729),1064=>array(98,0,971,729),1065=>array(98,-157,1054,729),1066=>array(29,0,762,729),1067=>array(98,0,784,729),1068=>array(98,0,615,729),1069=>array(54,-14,642,742),1070=>array(103,-14,1023,742),1071=>array(66,0,597,729),1072=>array(60,-14,522,560),1073=>array(55,-14,562,777),1074=>array(91,0,530,547),1075=>array(91,0,477,547),1076=>array(52,-138,639,547),1077=>array(55,-14,562,560),1078=>array(34,0,867,547),1079=>array(65,-14,473,561),1080=>array(91,0,559,547),1081=>array(91,0,559,760),1082=>array(91,0,571,547),1083=>array(37,0,556,547),1084=>array(91,0,664,547),1085=>array(91,0,563,547),1086=>array(55,-14,557,560),1087=>array(91,0,563,547),1088=>array(91,-208,580,560),1089=>array(55,-14,488,560),1090=>array(29,0,553,547),1091=>array(30,-208,562,547),1092=>array(55,-208,800,729),1093=>array(29,0,559,547),1094=>array(91,-138,635,547),1095=>array(73,0,500,547),1096=>array(91,0,824,547),1097=>array(91,-138,896,547),1098=>array(30,0,647,547),1099=>array(91,0,701,560),1100=>array(91,0,530,547),1101=>array(55,-14,488,560),1102=>array(94,-14,787,560),1103=>array(57,0,517,547),1104=>array(55,-14,562,802),1105=>array(55,-14,562,758),1106=>array(23,-208,570,760),1107=>array(91,0,480,803),1108=>array(55,-14,488,560),1109=>array(54,-14,472,560),1110=>array(94,0,184,760),1111=>array(-6,0,284,758),1112=>array(-18,-208,184,760),1113=>array(37,0,843,547),1114=>array(91,0,839,547),1115=>array(23,0,567,760),1116=>array(91,0,571,803),1117=>array(91,0,559,802),1118=>array(30,-208,562,760),1119=>array(91,-138,563,547),1120=>array(56,-14,877,729),1121=>array(66,-14,769,547),1122=>array(15,0,711,729),1123=>array(15,0,613,760),1124=>array(103,-14,888,742),1125=>array(94,-14,688,560),1126=>array(8,0,871,729),1127=>array(25,0,758,547),1128=>array(98,0,1135,729),1129=>array(94,0,977,547),1130=>array(56,0,731,729),1131=>array(52,0,560,547),1132=>array(98,0,971,729),1133=>array(94,0,772,547),1134=>array(56,-208,556,935),1135=>array(44,-193,473,753),1136=>array(8,0,844,729),1137=>array(24,-208,852,765),1138=>array(56,-14,731,742),1139=>array(55,-14,557,560),1140=>array(8,0,769,742),1141=>array(24,0,640,560),1142=>array(8,0,769,930),1143=>array(24,0,640,800),1144=>array(56,-208,962,742),1145=>array(55,-208,875,560),1146=>array(56,-14,897,742),1147=>array(55,-14,704,560),1148=>array(58,-14,1122,932),1149=>array(74,-14,954,758),1150=>array(56,-14,877,900),1151=>array(66,-14,769,734),1152=>array(56,-208,644,742),1153=>array(55,-208,488,560),1154=>array(29,-44,474,457),1155=>array(-519,608,-93,810),1156=>array(-372,645,4,788),1157=>array(-288,595,-169,797),1158=>array(-288,595,-169,797),1159=>array(-776,606,4,788),1160=>array(-1021,-180,409,922),1161=>array(-957,-280,345,1022),1162=>array(98,-208,748,928),1163=>array(94,-208,652,760),1164=>array(16,0,615,729),1165=>array(19,0,534,702),1166=>array(98,0,610,729),1167=>array(91,-208,580,560),1168=>array(98,0,552,878),1169=>array(91,0,477,700),1170=>array(35,0,617,729),1171=>array(27,0,542,547),1172=>array(98,-200,600,729),1173=>array(91,-208,505,547),1174=>array(20,-157,1071,729),1175=>array(34,-138,876,547),1176=>array(66,-193,575,742),1177=>array(65,-193,473,561),1178=>array(98,-157,713,729),1179=>array(91,-138,587,547),1180=>array(98,0,690,729),1181=>array(91,0,571,547),1182=>array(16,0,690,729),1183=>array(30,0,571,760),1184=>array(24,0,837,729),1185=>array(21,0,688,547),1186=>array(98,-157,752,729),1187=>array(94,-138,656,547),1188=>array(98,0,1009,729),1189=>array(94,0,862,547),1190=>array(98,-200,1057,729),1191=>array(94,-208,891,547),1192=>array(56,-14,871,743),1193=>array(55,-14,684,560),1194=>array(56,-193,644,742),1195=>array(55,-193,488,560),1196=>array(-3,-157,614,729),1197=>array(29,-138,553,547),1198=>array(-2,0,613,729),1199=>array(30,-208,562,547),1200=>array(-2,0,613,729),1201=>array(30,-208,562,547),1202=>array(30,-157,654,729),1203=>array(29,-138,559,547),1204=>array(-3,-157,910,729),1205=>array(2,-138,782,547),1206=>array(85,-157,686,729),1207=>array(73,-138,590,547),1208=>array(85,0,587,729),1209=>array(73,0,500,547),1210=>array(85,0,587,729),1211=>array(91,0,549,760),1212=>array(10,-14,885,742),1213=>array(7,-14,675,560),1214=>array(10,-184,885,742),1215=>array(7,-161,675,560),1216=>array(98,0,197,729),1217=>array(20,0,1058,928),1218=>array(34,0,867,785),1219=>array(98,-200,651,729),1220=>array(93,-208,566,547),1221=>array(26,-208,751,729),1222=>array(22,-208,646,547),1223=>array(98,-200,654,729),1224=>array(94,-208,566,547),1225=>array(98,-208,752,729),1226=>array(94,-208,656,547),1227=>array(85,-157,587,729),1228=>array(73,-138,500,547),1229=>array(98,-208,863,729),1230=>array(94,-208,750,547),1231=>array(94,0,184,760),1232=>array(8,0,676,946),1233=>array(60,-14,522,765),1234=>array(8,0,676,913),1235=>array(60,-14,522,758),1236=>array(4,0,910,729),1237=>array(60,-14,929,560),1238=>array(98,0,568,928),1239=>array(55,-14,562,785),1240=>array(57,-14,731,742),1241=>array(55,-14,562,560),1242=>array(57,-14,731,913),1243=>array(55,-14,562,758),1244=>array(20,0,1058,913),1245=>array(34,0,867,758),1246=>array(66,-14,575,913),1247=>array(65,-14,473,758),1248=>array(78,-31,621,729),1249=>array(43,-213,523,547),1250=>array(98,0,650,899),1251=>array(91,0,559,745),1252=>array(98,0,650,913),1253=>array(91,0,559,758),1254=>array(56,-14,731,913),1255=>array(55,-14,557,758),1256=>array(56,-14,731,742),1257=>array(55,-14,557,560),1258=>array(56,-14,731,913),1259=>array(55,-14,557,758),1260=>array(54,-14,642,913),1261=>array(55,-14,488,758),1262=>array(17,0,592,899),1263=>array(30,-208,562,745),1264=>array(17,0,592,913),1265=>array(30,-208,562,758),1266=>array(17,0,592,927),1267=>array(30,-208,562,800),1268=>array(85,0,587,913),1269=>array(73,0,500,758),1270=>array(98,-157,552,729),1271=>array(91,-138,477,547),1272=>array(98,0,784,913),1273=>array(91,0,701,758),1274=>array(35,-208,617,729),1275=>array(27,-208,542,547),1276=>array(30,-200,646,729),1277=>array(29,-208,549,547),1278=>array(30,0,654,729),1279=>array(29,0,559,547),1280=>array(71,0,588,729),1281=>array(55,0,495,547),1282=>array(71,-14,908,729),1283=>array(55,-14,806,547),1284=>array(98,-14,876,742),1285=>array(83,-14,784,561),1286=>array(98,-208,654,742),1287=>array(83,-208,564,561),1288=>array(26,-14,974,729),1289=>array(22,-14,866,547),1290=>array(98,-14,1022,729),1291=>array(94,-14,876,547),1292=>array(56,-14,692,742),1293=>array(55,-14,534,560),1294=>array(-3,-14,675,729),1295=>array(2,-14,620,547),1296=>array(80,-14,560,742),1297=>array(65,-14,473,561),1298=>array(41,-200,653,729),1299=>array(37,-208,556,547),1300=>array(41,0,1139,729),1301=>array(37,0,962,547),1302=>array(98,0,863,729),1303=>array(91,-208,832,560),1304=>array(66,0,967,729),1305=>array(57,-14,933,560),1306=>array(56,-129,731,742),1307=>array(55,-208,544,560),1308=>array(33,0,956,729),1309=>array(42,0,776,547),1310=>array(98,0,690,729),1311=>array(91,0,571,547),1312=>array(41,-200,1056,729),1313=>array(37,-208,881,547),1314=>array(98,-200,1057,729),1315=>array(91,-208,888,547),1316=>array(98,-157,752,729),1317=>array(91,-138,653,547),1329=>array(87,-29,680,729),1330=>array(87,0,650,743),1331=>array(45,0,729,743),1332=>array(44,0,724,743),1333=>array(87,-14,650,729),1334=>array(87,0,692,744),1335=>array(92,0,616,729),1336=>array(87,0,650,743),1337=>array(87,-14,835,743),1338=>array(45,-14,729,729),1339=>array(92,0,650,729),1340=>array(92,0,533,729),1341=>array(92,-14,849,729),1342=>array(129,-13,763,742),1343=>array(87,0,645,729),1344=>array(34,-26,638,729),1345=>array(82,-23,688,744),1346=>array(49,0,729,743),1347=>array(51,0,715,735),1348=>array(87,-14,767,729),1349=>array(71,-14,668,743),1350=>array(0,-14,680,729),1351=>array(78,-15,684,729),1352=>array(87,0,645,743),1353=>array(59,-28,664,744),1354=>array(44,0,713,743),1355=>array(82,0,686,744),1356=>array(87,0,767,743),1357=>array(87,-14,645,729),1358=>array(49,0,729,729),1359=>array(73,-14,632,741),1360=>array(87,0,645,743),1361=>array(78,-14,675,743),1362=>array(92,0,538,729),1363=>array(59,0,752,729),1364=>array(24,0,679,743),1365=>array(56,-14,731,742),1366=>array(54,-13,746,729),1369=>array(57,492,191,760),1370=>array(87,499,230,729),1371=>array(0,620,234,803),1372=>array(2,618,356,893),1373=>array(-0,617,233,800),1374=>array(4,613,401,866),1375=>array(44,618,462,760),1377=>array(85,-14,883,547),1378=>array(91,-208,549,560),1379=>array(55,-208,648,560),1380=>array(91,-208,653,560),1381=>array(85,-14,548,760),1382=>array(55,-208,648,560),1383=>array(91,0,490,760),1384=>array(91,-208,549,560),1385=>array(91,-208,738,560),1386=>array(55,-14,648,760),1387=>array(91,-208,549,760),1388=>array(91,-208,303,547),1389=>array(91,-208,889,760),1390=>array(55,-14,557,760),1391=>array(85,-208,543,760),1392=>array(91,0,549,760),1393=>array(52,-15,523,760),1394=>array(91,-208,653,560),1395=>array(68,-14,544,768),1396=>array(85,-14,647,760),1397=>array(-21,-208,181,547),1398=>array(-19,-14,543,760),1399=>array(0,-208,435,560),1400=>array(91,0,549,560),1401=>array(5,-208,370,547),1402=>array(85,-208,883,547),1403=>array(54,-208,494,561),1404=>array(91,0,609,560),1405=>array(85,-14,543,560),1406=>array(85,-208,647,760),1407=>array(85,-14,889,560),1408=>array(91,-208,549,560),1409=>array(54,-208,543,560),1410=>array(91,0,449,547),1411=>array(85,-208,889,760),1412=>array(20,-208,580,560),1413=>array(54,-14,556,560),1414=>array(34,-208,766,760),1415=>array(85,-14,812,760),1417=>array(117,0,220,415),1418=>array(49,212,312,314),1456=>array(283,-217,356,-22),1457=>array(83,-217,438,-22),1458=>array(125,-217,454,-22),1459=>array(125,-217,454,-22),1460=>array(283,-159,356,-85),1461=>array(222,-159,417,-85),1462=>array(222,-217,417,-22),1463=>array(173,-159,466,-85),1464=>array(173,-193,466,-46),1465=>array(0,625,73,698),1466=>array(0,625,73,698),1467=>array(148,-237,465,-17),1468=>array(288,237,361,310),1469=>array(283,-217,356,-22),1470=>array(49,472,312,552),1471=>array(173,625,466,698),1472=>array(102,-98,193,645),1473=>array(637,625,710,698),1474=>array(96,625,169,698),1475=>array(102,0,193,547),1478=>array(50,0,357,547),1479=>array(173,-217,466,-22),1488=>array(91,0,578,547),1489=>array(43,0,535,547),1490=>array(43,-5,383,547),1491=>array(43,0,511,547),1492=>array(91,0,563,547),1493=>array(91,0,182,547),1494=>array(43,0,303,547),1495=>array(91,0,563,547),1496=>array(90,-14,593,552),1497=>array(66,204,157,547),1498=>array(43,-208,446,547),1499=>array(43,0,474,547),1500=>array(43,0,492,729),1501=>array(91,0,573,547),1502=>array(43,0,588,555),1503=>array(91,-208,182,547),1504=>array(43,0,309,547),1505=>array(90,-14,593,547),1506=>array(43,-93,535,547),1507=>array(91,-208,549,547),1508=>array(91,0,569,547),1509=>array(43,-208,497,548),1510=>array(43,0,502,547),1511=>array(91,-208,633,546),1512=>array(43,0,474,547),1513=>array(43,0,666,547),1514=>array(10,-4,566,547),1520=>array(91,0,380,547),1521=>array(66,0,332,547),1522=>array(66,204,312,547),1523=>array(91,361,325,547),1524=>array(91,361,554,547),1542=>array(0,-20,607,892),1543=>array(0,-20,607,895),1545=>array(65,0,685,635),1546=>array(65,0,904,635),1548=>array(107,0,250,240),1557=>array(123,624,377,868),1563=>array(107,0,250,633),1567=>array(72,0,461,742),1569=>array(80,42,390,483),1570=>array(-37,0,315,939),1571=>array(53,0,220,999),1572=>array(-42,-244,406,588),1573=>array(53,-244,220,760),1574=>array(63,-131,719,588),1575=>array(94,0,184,760),1576=>array(63,-171,865,327),1577=>array(68,-28,453,513),1578=>array(63,-10,865,391),1579=>array(63,-10,865,513),1580=>array(77,-244,645,425),1581=>array(77,-244,645,425),1582=>array(77,-244,645,586),1583=>array(61,-19,388,415),1584=>array(61,-19,388,586),1585=>array(-42,-244,423,269),1586=>array(-42,-244,423,464),1587=>array(63,-244,1138,366),1588=>array(63,-244,1138,586),1589=>array(63,-244,1134,362),1590=>array(63,-244,1134,464),1591=>array(70,0,857,760),1592=>array(70,0,857,760),1593=>array(57,-244,587,521),1594=>array(57,-244,587,659),1600=>array(-10,0,303,90),1601=>array(63,-45,952,635),1602=>array(52,-215,701,635),1603=>array(70,-27,722,760),1604=>array(70,-152,637,760),1605=>array(68,-240,546,369),1606=>array(72,-162,660,464),1607=>array(68,-28,453,358),1608=>array(-42,-244,406,315),1609=>array(63,-131,719,411),1610=>array(63,-244,719,411),1611=>array(107,591,393,825),1612=>array(107,591,393,874),1613=>array(107,-239,393,-5),1614=>array(107,591,393,708),1615=>array(107,590,393,874),1616=>array(107,-137,393,-20),1617=>array(98,599,402,869),1618=>array(115,610,383,878),1619=>array(74,590,426,719),1620=>array(164,593,331,808),1621=>array(164,-244,331,-29),1623=>array(107,615,393,898),1626=>array(119,616,381,775),1632=>array(215,220,322,342),1633=>array(136,0,342,635),1634=>array(40,0,492,635),1635=>array(37,0,509,635),1636=>array(85,-10,457,641),1637=>array(66,-10,471,643),1638=>array(42,0,493,635),1639=>array(29,0,508,635),1640=>array(29,0,508,635),1641=>array(49,0,493,640),1642=>array(65,0,472,635),1643=>array(0,-110,300,318),1644=>array(87,499,230,729),1645=>array(42,101,502,537),1646=>array(63,-10,865,327),1647=>array(52,-215,701,481),1648=>array(223,602,277,887),1652=>array(60,649,227,864),1657=>array(63,-10,865,575),1658=>array(63,-10,865,513),1659=>array(63,-244,865,327),1660=>array(63,-180,865,391),1661=>array(63,-10,865,464),1662=>array(63,-244,865,327),1663=>array(63,-10,865,513),1664=>array(63,-244,865,327),1665=>array(77,-244,645,710),1666=>array(77,-244,645,708),1667=>array(77,-244,645,425),1668=>array(77,-244,645,425),1669=>array(77,-244,645,708),1670=>array(77,-244,645,425),1671=>array(77,-244,645,425),1672=>array(61,-19,388,746),1673=>array(61,-180,388,415),1674=>array(61,-171,388,415),1675=>array(61,-171,388,746),1676=>array(61,-19,388,586),1677=>array(61,-146,388,415),1678=>array(61,-19,388,708),1679=>array(61,-19,388,684),1680=>array(61,-19,388,708),1681=>array(-42,-244,469,648),1682=>array(-42,-244,473,556),1683=>array(-42,-244,507,269),1684=>array(-42,-244,474,269),1685=>array(-42,-244,634,269),1686=>array(-42,-244,474,269),1687=>array(-42,-244,439,464),1688=>array(-42,-244,439,586),1689=>array(-42,-244,439,586),1690=>array(63,-244,1138,464),1691=>array(63,-244,1138,366),1692=>array(63,-244,1138,586),1693=>array(63,-244,1134,362),1694=>array(63,-244,1134,586),1695=>array(70,0,857,760),1696=>array(57,-244,587,781),1697=>array(63,-45,952,481),1698=>array(63,-171,952,481),1699=>array(63,-171,952,635),1700=>array(63,-45,952,757),1701=>array(63,-293,952,481),1702=>array(63,-45,952,757),1703=>array(52,-215,701,635),1704=>array(52,-215,701,757),1705=>array(63,-43,895,760),1706=>array(63,-43,1000,760),1707=>array(63,-43,895,760),1708=>array(70,-27,722,760),1709=>array(70,-27,722,854),1710=>array(70,-293,722,760),1711=>array(63,-43,895,896),1712=>array(63,-43,895,896),1713=>array(63,-43,895,903),1714=>array(63,-171,895,896),1715=>array(63,-293,895,896),1716=>array(63,-43,895,1025),1717=>array(70,-152,723,971),1718=>array(70,-152,637,952),1719=>array(70,-152,684,1025),1720=>array(70,-391,637,760),1721=>array(72,-317,660,464),1722=>array(72,-162,660,366),1723=>array(72,-162,660,636),1724=>array(72,-330,660,464),1725=>array(72,-162,660,586),1726=>array(70,-33,638,487),1727=>array(77,-244,645,586),1734=>array(-42,-244,406,556),1740=>array(63,-131,719,411),1742=>array(63,-131,719,556),1749=>array(68,-28,453,358),1776=>array(215,220,322,342),1777=>array(136,0,342,635),1778=>array(40,0,492,635),1779=>array(37,0,509,635),1780=>array(40,0,471,643),1781=>array(52,-5,485,643),1782=>array(102,0,445,640),1783=>array(29,0,508,635),1784=>array(29,0,508,635),1785=>array(49,0,493,640),1984=>array(66,-14,570,742),1985=>array(110,0,544,729),1986=>array(110,0,530,729),1987=>array(110,0,530,729),1988=>array(110,0,530,729),1989=>array(110,0,530,729),1990=>array(110,0,530,729),1991=>array(104,0,532,729),1992=>array(104,0,532,729),1993=>array(77,0,560,741),1994=>array(94,0,184,729),1995=>array(55,-14,516,447),1996=>array(30,0,394,731),1997=>array(30,0,562,430),1998=>array(91,0,563,430),1999=>array(91,0,563,430),2000=>array(55,0,539,735),2001=>array(91,0,563,581),2002=>array(55,0,738,741),2003=>array(94,0,408,729),2004=>array(30,0,344,729),2005=>array(91,0,504,729),2006=>array(94,0,518,729),2007=>array(30,0,256,729),2008=>array(94,0,865,513),2009=>array(30,0,443,729),2010=>array(30,0,754,729),2011=>array(91,0,563,430),2012=>array(30,0,595,729),2013=>array(94,0,679,729),2014=>array(94,0,436,729),2015=>array(55,0,630,729),2016=>array(30,0,443,729),2017=>array(30,0,595,729),2018=>array(55,0,539,729),2019=>array(94,0,436,729),2020=>array(94,0,436,612),2021=>array(94,0,428,729),2022=>array(55,0,539,729),2023=>array(55,0,539,729),2027=>array(106,673,398,745),2028=>array(32,609,468,800),2029=>array(205,658,305,758),2030=>array(93,616,405,800),2031=>array(44,616,456,800),2032=>array(32,609,468,800),2033=>array(44,616,456,800),2034=>array(200,-184,300,-84),2035=>array(104,659,394,758),2036=>array(98,557,216,760),2037=>array(98,557,216,760),2040=>array(49,0,511,498),2041=>array(49,0,511,483),2042=>array(-10,0,371,72),3647=>array(86,-138,571,769),3713=>array(63,-10,607,560),3714=>array(68,-17,691,568),3716=>array(67,-10,619,568),3719=>array(53,-238,415,568),3720=>array(62,-0,574,575),3722=>array(68,-234,690,568),3725=>array(56,-8,619,573),3732=>array(91,-14,592,560),3733=>array(63,-15,564,579),3734=>array(0,-240,587,560),3735=>array(42,-8,599,571),3737=>array(46,-14,593,568),3738=>array(36,-8,556,561),3739=>array(36,-8,556,760),3740=>array(43,-8,725,614),3741=>array(91,-14,676,760),3742=>array(51,-8,636,561),3743=>array(51,-8,636,760),3745=>array(31,-14,636,547),3746=>array(56,-8,619,760),3747=>array(68,-8,634,568),3749=>array(39,-8,583,568),3751=>array(56,-13,558,560),3754=>array(39,-8,688,679),3755=>array(62,-12,762,575),3757=>array(56,-14,558,560),3758=>array(68,-8,684,605),3759=>array(99,-166,742,579),3760=>array(54,-13,589,563),3761=>array(-578,639,-43,880),3762=>array(60,0,473,560),3763=>array(-425,0,473,806),3764=>array(-594,615,-73,926),3765=>array(-594,615,0,926),3766=>array(-594,615,-73,926),3767=>array(-594,615,0,926),3768=>array(-376,-350,-161,-38),3769=>array(-418,-306,-152,-40),3771=>array(-578,639,-43,880),3772=>array(-611,-278,6,-39),3773=>array(63,-240,619,715),3776=>array(60,-14,324,560),3777=>array(60,-14,598,560),3778=>array(-22,-5,398,896),3779=>array(45,-14,490,892),3780=>array(92,-11,445,886),3782=>array(72,-232,574,557),3784=>array(-366,618,-278,792),3785=>array(-563,609,-45,891),3786=>array(-595,598,22,869),3787=>array(-462,609,-182,890),3788=>array(-611,636,6,875),3789=>array(-425,620,-220,806),3792=>array(66,-14,570,547),3793=>array(48,-75,582,576),3794=>array(48,-66,545,711),3795=>array(11,-9,692,830),3796=>array(48,-83,601,711),3797=>array(48,-83,601,711),3798=>array(43,-8,744,812),3799=>array(63,-240,607,560),3800=>array(73,-210,680,557),3801=>array(51,-4,621,571),3804=>array(62,-12,947,575),3805=>array(62,-12,973,575),4256=>array(59,-15,815,828),4257=>array(54,-0,704,828),4258=>array(54,-148,649,837),4259=>array(54,-15,781,828),4260=>array(49,0,552,837),4261=>array(39,0,714,837),4262=>array(29,-15,695,828),4263=>array(59,-15,885,837),4264=>array(29,0,390,874),4265=>array(59,0,561,828),4266=>array(29,-15,784,828),4267=>array(59,-15,824,828),4268=>array(63,0,566,828),4269=>array(49,-167,806,837),4270=>array(24,-15,717,837),4271=>array(39,0,566,828),4272=>array(54,-15,853,828),4273=>array(63,-15,567,828),4274=>array(63,-0,566,837),4275=>array(49,-182,806,837),4276=>array(49,0,817,834),4277=>array(44,0,680,828),4278=>array(64,-15,566,837),4279=>array(54,0,557,828),4280=>array(59,-15,562,828),4281=>array(63,0,566,828),4282=>array(59,-15,764,837),4283=>array(59,-15,810,828),4284=>array(63,-0,566,828),4285=>array(49,-15,574,837),4286=>array(63,-0,566,828),4287=>array(29,0,695,828),4288=>array(29,-15,785,828),4289=>array(63,0,566,828),4290=>array(54,-15,635,837),4291=>array(29,0,532,828),4292=>array(54,0,540,828),4293=>array(39,-15,699,837),4304=>array(49,-15,459,592),4305=>array(49,-14,469,837),4306=>array(44,-235,537,551),4307=>array(49,-230,759,547),4308=>array(49,-236,449,547),4309=>array(49,-236,459,547),4310=>array(20,-14,452,838),4311=>array(49,-14,752,547),4312=>array(49,0,469,547),4313=>array(44,-236,456,542),4314=>array(49,-230,1016,552),4315=>array(49,-15,459,837),4316=>array(63,-15,474,833),4317=>array(49,-0,737,547),4318=>array(49,-15,459,833),4319=>array(49,-236,458,551),4320=>array(49,0,747,833),4321=>array(63,-15,474,827),4322=>array(44,-236,610,680),4323=>array(5,-236,464,571),4324=>array(49,-236,766,547),4325=>array(49,-236,449,828),4326=>array(49,-230,737,546),4327=>array(49,-236,459,538),4328=>array(29,-15,454,837),4329=>array(63,0,474,837),4330=>array(44,-236,527,532),4331=>array(49,-14,458,828),4332=>array(64,-15,488,837),4333=>array(49,-236,471,827),4334=>array(63,-15,474,827),4335=>array(10,-235,444,572),4336=>array(49,-15,459,837),4337=>array(59,-15,469,837),4338=>array(49,-141,458,547),4339=>array(49,-236,459,546),4340=>array(49,-236,458,837),4341=>array(49,-15,515,837),4342=>array(49,-236,778,547),4343=>array(44,-236,508,547),4344=>array(49,-236,459,538),4345=>array(39,-236,532,551),4346=>array(49,-77,459,547),4347=>array(54,-10,394,484),4348=>array(49,420,270,837),5121=>array(8,1,676,730),5122=>array(8,0,676,1037),5123=>array(8,0,676,729),5124=>array(8,0,676,914),5125=>array(98,0,711,729),5126=>array(98,0,711,914),5127=>array(98,0,711,913),5129=>array(98,0,711,729),5130=>array(58,0,671,729),5131=>array(58,0,671,914),5132=>array(98,1,827,730),5133=>array(8,1,776,730),5134=>array(98,0,827,729),5135=>array(8,0,776,729),5136=>array(98,0,827,914),5137=>array(8,0,776,914),5138=>array(98,0,909,729),5139=>array(98,0,909,729),5140=>array(98,0,909,914),5141=>array(98,0,909,914),5142=>array(98,0,711,914),5143=>array(98,0,869,729),5144=>array(58,0,909,729),5145=>array(98,0,869,914),5146=>array(58,0,909,914),5147=>array(58,0,671,914),5149=>array(98,629,198,729),5150=>array(67,326,488,734),5151=>array(46,356,362,714),5152=>array(46,356,362,714),5153=>array(67,398,334,674),5154=>array(67,391,334,667),5155=>array(67,398,338,667),5156=>array(67,398,334,667),5157=>array(35,327,405,733),5158=>array(67,326,331,734),5159=>array(98,312,198,412),5160=>array(67,503,334,563),5161=>array(67,399,334,667),5162=>array(67,399,334,691),5163=>array(8,1,1028,730),5164=>array(8,0,847,729),5165=>array(98,0,892,729),5166=>array(58,0,1055,729),5167=>array(8,0,676,729),5168=>array(8,0,676,1037),5169=>array(8,0,676,729),5170=>array(8,0,676,914),5171=>array(58,0,671,729),5172=>array(58,0,671,914),5173=>array(58,0,671,913),5175=>array(58,0,671,729),5176=>array(58,0,671,729),5177=>array(58,0,671,914),5178=>array(98,0,827,729),5179=>array(8,0,776,729),5180=>array(98,0,827,729),5181=>array(8,0,776,729),5182=>array(98,0,827,914),5183=>array(8,0,776,914),5184=>array(98,0,869,729),5185=>array(58,0,909,729),5186=>array(98,0,869,914),5187=>array(58,0,909,914),5188=>array(98,0,869,729),5189=>array(58,0,909,729),5190=>array(98,0,869,914),5191=>array(58,0,909,914),5192=>array(58,0,671,913),5193=>array(67,326,453,734),5194=>array(67,326,137,734),5196=>array(87,-14,645,729),5197=>array(87,0,645,1037),5198=>array(87,0,645,743),5199=>array(87,0,645,914),5200=>array(58,0,671,729),5201=>array(58,0,671,914),5202=>array(58,0,671,913),5204=>array(58,0,671,729),5205=>array(59,0,672,729),5206=>array(59,0,672,914),5207=>array(98,-14,834,729),5208=>array(87,-14,831,729),5209=>array(98,0,834,743),5210=>array(87,0,831,743),5211=>array(98,0,834,914),5212=>array(87,0,831,914),5213=>array(98,0,869,729),5214=>array(58,0,842,729),5215=>array(98,0,869,914),5216=>array(58,0,842,914),5217=>array(98,0,889,729),5218=>array(59,0,842,729),5219=>array(98,0,889,914),5220=>array(59,0,842,914),5221=>array(117,0,889,729),5222=>array(67,326,379,734),5223=>array(87,-14,823,734),5224=>array(87,0,823,743),5225=>array(58,0,811,734),5226=>array(59,0,835,734),5227=>array(34,0,530,743),5228=>array(98,0,594,1037),5229=>array(98,0,594,743),5230=>array(98,0,594,914),5231=>array(34,-14,530,729),5232=>array(34,-14,530,914),5233=>array(34,-14,623,913),5234=>array(98,-14,594,729),5235=>array(98,-14,594,914),5236=>array(98,0,762,743),5237=>array(34,0,712,743),5238=>array(98,0,781,743),5239=>array(98,0,758,743),5240=>array(98,0,781,914),5241=>array(98,0,758,914),5242=>array(98,-14,762,729),5243=>array(34,-14,712,729),5244=>array(98,-14,762,914),5245=>array(34,-14,712,914),5246=>array(98,-14,781,729),5247=>array(98,-14,758,729),5248=>array(98,-14,781,914),5249=>array(98,-14,758,914),5250=>array(117,-14,781,729),5251=>array(67,318,379,734),5252=>array(27,318,340,734),5253=>array(34,0,696,743),5254=>array(98,0,720,743),5255=>array(34,-14,696,734),5256=>array(98,-14,720,734),5257=>array(34,0,530,743),5258=>array(98,0,594,1037),5259=>array(98,0,594,743),5260=>array(98,0,594,914),5261=>array(34,-14,530,729),5262=>array(34,-14,530,914),5263=>array(34,-14,623,913),5264=>array(98,-14,594,729),5265=>array(98,-14,594,914),5266=>array(98,0,762,743),5267=>array(34,0,712,743),5268=>array(98,0,781,743),5269=>array(98,0,758,743),5270=>array(98,0,781,914),5271=>array(98,0,758,914),5272=>array(98,-14,762,729),5273=>array(34,-14,712,729),5274=>array(98,-14,762,914),5275=>array(34,-14,712,914),5276=>array(98,-14,781,729),5277=>array(98,-14,758,729),5278=>array(98,-14,781,914),5279=>array(98,-14,758,914),5280=>array(117,-14,781,729),5281=>array(67,318,379,734),5282=>array(67,318,379,734),5283=>array(58,0,512,729),5284=>array(98,0,552,1037),5285=>array(98,0,552,729),5286=>array(98,0,552,914),5287=>array(58,0,512,729),5288=>array(58,0,512,914),5289=>array(58,0,607,913),5290=>array(98,0,552,729),5291=>array(98,0,552,914),5292=>array(98,0,651,729),5293=>array(58,0,710,729),5294=>array(98,0,741,729),5295=>array(98,0,706,729),5296=>array(98,0,741,914),5297=>array(98,0,706,914),5298=>array(98,0,651,729),5299=>array(58,0,710,729),5300=>array(98,0,651,914),5301=>array(58,0,710,914),5302=>array(98,0,741,729),5303=>array(98,0,706,729),5304=>array(98,0,741,914),5305=>array(98,0,706,914),5306=>array(117,0,741,729),5307=>array(67,326,331,734),5308=>array(67,326,453,734),5309=>array(67,326,331,734),5312=>array(58,-14,817,436),5313=>array(34,-14,793,755),5314=>array(34,-14,793,436),5315=>array(5,-14,765,636),5316=>array(58,0,817,450),5317=>array(58,0,817,636),5318=>array(58,0,817,635),5319=>array(34,0,793,450),5320=>array(34,0,793,636),5321=>array(98,-14,1035,436),5322=>array(58,-14,977,436),5323=>array(98,0,1025,450),5324=>array(34,0,793,450),5325=>array(98,0,1025,636),5326=>array(34,0,793,636),5327=>array(34,0,793,635),5328=>array(67,484,545,736),5329=>array(67,318,397,734),5330=>array(67,484,545,736),5331=>array(58,0,817,450),5332=>array(34,0,793,755),5333=>array(34,0,793,450),5334=>array(34,0,793,636),5335=>array(58,0,817,450),5336=>array(58,0,817,636),5337=>array(58,0,817,635),5338=>array(34,0,793,450),5339=>array(34,0,793,636),5340=>array(98,0,1035,450),5341=>array(58,0,977,450),5342=>array(98,0,1025,450),5343=>array(34,0,972,450),5344=>array(98,0,1025,636),5345=>array(34,0,972,636),5346=>array(98,0,1035,450),5347=>array(58,0,977,450),5348=>array(98,0,1035,636),5349=>array(58,0,977,636),5350=>array(98,0,1025,450),5351=>array(34,0,972,450),5352=>array(98,0,1025,636),5353=>array(34,0,972,636),5354=>array(67,484,545,736),5356=>array(58,0,671,729),5357=>array(34,0,505,729),5358=>array(98,0,649,1037),5359=>array(98,0,569,729),5360=>array(98,0,569,914),5361=>array(34,0,505,729),5362=>array(34,0,505,914),5363=>array(34,0,600,913),5364=>array(98,0,569,729),5365=>array(98,0,569,914),5366=>array(98,0,736,729),5367=>array(34,0,696,729),5368=>array(98,0,758,729),5369=>array(98,0,713,729),5370=>array(98,0,758,914),5371=>array(98,0,713,914),5372=>array(98,0,736,729),5373=>array(34,0,696,729),5374=>array(98,0,736,914),5375=>array(34,0,696,914),5376=>array(98,0,758,729),5377=>array(98,0,713,729),5378=>array(98,0,758,914),5379=>array(98,0,713,914),5380=>array(117,0,758,729),5381=>array(67,326,363,734),5382=>array(67,318,365,741),5383=>array(67,326,363,734),5392=>array(34,-14,678,743),5393=>array(34,-14,678,743),5394=>array(34,-14,678,914),5395=>array(34,-14,857,464),5396=>array(34,-14,857,636),5397=>array(34,-14,857,464),5398=>array(34,-14,857,636),5399=>array(98,-14,875,743),5400=>array(34,-14,814,743),5401=>array(98,-14,875,743),5402=>array(34,-14,814,743),5403=>array(98,-14,875,914),5404=>array(34,-14,814,914),5405=>array(98,-14,1106,464),5406=>array(34,-14,1042,464),5407=>array(98,-14,1106,636),5408=>array(34,-14,1042,636),5409=>array(98,-14,1106,464),5410=>array(34,-14,1042,464),5411=>array(98,-14,1106,636),5412=>array(34,-14,1042,636),5413=>array(67,476,585,737),5414=>array(58,0,529,729),5415=>array(98,0,569,1037),5416=>array(98,0,569,729),5417=>array(98,0,569,914),5418=>array(58,0,529,729),5419=>array(58,0,531,914),5420=>array(58,0,626,913),5421=>array(98,0,569,729),5422=>array(98,0,569,914),5423=>array(98,0,746,729),5424=>array(58,0,723,729),5425=>array(98,0,758,729),5426=>array(98,0,760,729),5427=>array(98,0,758,914),5428=>array(98,0,760,914),5429=>array(98,0,746,729),5430=>array(58,0,723,729),5431=>array(98,0,749,914),5432=>array(58,0,723,914),5433=>array(98,0,758,729),5434=>array(98,0,760,729),5435=>array(98,0,758,914),5436=>array(98,0,760,914),5437=>array(117,0,758,729),5438=>array(67,326,363,734),5440=>array(67,399,334,667),5441=>array(67,326,429,734),5442=>array(98,-14,857,436),5443=>array(58,-14,817,436),5444=>array(58,0,817,450),5445=>array(98,0,857,755),5446=>array(98,0,857,450),5447=>array(98,0,857,636),5448=>array(98,0,569,729),5449=>array(98,0,569,914),5450=>array(98,0,569,729),5451=>array(34,0,505,729),5452=>array(34,0,505,914),5453=>array(34,0,505,729),5454=>array(98,0,736,914),5455=>array(34,0,696,914),5456=>array(67,326,363,734),5458=>array(58,0,671,729),5459=>array(73,0,676,744),5460=>array(73,-15,676,1037),5461=>array(73,-15,676,729),5462=>array(73,-15,676,914),5463=>array(38,0,668,662),5464=>array(38,0,668,914),5465=>array(58,0,688,662),5466=>array(58,0,688,914),5467=>array(98,0,886,914),5468=>array(58,0,909,914),5469=>array(67,326,462,695),5470=>array(87,-14,645,743),5471=>array(87,-14,645,743),5472=>array(87,-14,645,743),5473=>array(87,-14,645,743),5474=>array(87,-14,645,914),5475=>array(87,-14,645,914),5476=>array(41,0,671,729),5477=>array(41,0,671,914),5478=>array(59,0,689,729),5479=>array(59,0,689,914),5480=>array(98,0,907,914),5481=>array(59,0,842,914),5482=>array(67,326,467,734),5492=>array(34,0,772,743),5493=>array(58,0,796,743),5494=>array(58,0,796,914),5495=>array(34,-14,772,729),5496=>array(34,-14,772,914),5497=>array(58,-14,796,729),5498=>array(58,-14,796,914),5499=>array(67,318,508,734),5500=>array(98,0,654,729),5501=>array(67,326,429,734),5502=>array(67,0,1013,1037),5503=>array(67,0,1013,743),5504=>array(67,0,1013,914),5505=>array(67,-14,949,734),5506=>array(67,-14,949,914),5507=>array(67,-14,1013,734),5508=>array(67,-14,1013,914),5509=>array(67,318,798,734),5514=>array(34,0,772,743),5515=>array(58,0,796,743),5516=>array(34,-14,772,729),5517=>array(58,-14,796,729),5518=>array(67,0,1225,1037),5519=>array(67,0,1225,743),5520=>array(67,0,1225,914),5521=>array(67,-14,904,736),5522=>array(67,-14,904,914),5523=>array(67,-14,1225,736),5524=>array(67,-14,1225,914),5525=>array(67,332,645,736),5526=>array(67,332,1018,736),5536=>array(34,0,793,692),5537=>array(34,0,793,692),5538=>array(58,-242,817,450),5539=>array(58,-242,817,636),5540=>array(34,-242,793,450),5541=>array(34,-242,793,636),5542=>array(67,338,545,736),5543=>array(58,0,627,729),5544=>array(16,0,585,729),5545=>array(16,0,585,914),5546=>array(58,0,627,729),5547=>array(58,0,627,914),5548=>array(16,0,585,729),5549=>array(16,0,585,914),5550=>array(5,326,363,734),5551=>array(98,-14,594,729),5598=>array(98,0,711,729),5601=>array(56,0,669,729),5702=>array(67,326,413,734),5703=>array(67,240,413,820),5742=>array(57,0,391,306),5743=>array(67,0,949,743),5744=>array(67,0,1211,743),5745=>array(67,0,1598,743),5746=>array(67,0,1598,914),5747=>array(67,-14,1277,736),5748=>array(67,-14,1277,914),5749=>array(67,-14,1598,736),5750=>array(67,-14,1598,914),5760=>array(-10,246,487,328),5761=>array(-10,-125,502,328),5762=>array(-10,-125,722,328),5763=>array(-10,-125,941,328),5764=>array(-10,-125,1160,328),5765=>array(-10,-125,1379,328),5766=>array(-10,246,502,697),5767=>array(-10,246,722,697),5768=>array(-10,246,941,697),5769=>array(-10,246,1160,697),5770=>array(-10,246,1379,697),5771=>array(-10,-125,508,697),5772=>array(-10,-125,728,697),5773=>array(-10,-125,948,697),5774=>array(-10,-125,1168,697),5775=>array(-10,-125,1389,697),5776=>array(-10,41,502,533),5777=>array(-10,41,722,533),5778=>array(-10,41,939,533),5779=>array(-10,41,1159,533),5780=>array(-10,41,1379,533),5781=>array(-10,-125,508,697),5782=>array(-10,-125,762,697),5783=>array(-10,-83,798,328),5784=>array(-10,-240,1214,328),5785=>array(-10,246,1160,902),5786=>array(-10,82,693,328),5787=>array(55,28,517,544),5788=>array(-10,28,452,544),7424=>array(30,0,562,547),7425=>array(5,0,669,547),7426=>array(60,-14,929,560),7427=>array(30,0,530,547),7428=>array(55,-14,488,560),7429=>array(91,0,550,547),7430=>array(18,0,550,547),7431=>array(91,0,443,547),7432=>array(63,-14,471,561),7433=>array(94,-213,184,547),7434=>array(0,-14,310,547),7435=>array(91,0,576,547),7436=>array(1,0,498,560),7437=>array(91,0,664,547),7438=>array(91,0,559,547),7439=>array(55,-14,557,560),7440=>array(62,-14,495,560),7441=>array(55,22,629,524),7442=>array(55,57,629,489),7443=>array(25,2,663,543),7444=>array(55,-14,970,560),7446=>array(55,273,557,560),7447=>array(55,-14,557,273),7448=>array(74,0,475,547),7449=>array(24,0,507,547),7450=>array(24,0,507,547),7451=>array(29,0,553,547),7452=>array(91,-16,510,547),7453=>array(85,37,646,495),7454=>array(85,38,857,496),7455=>array(23,-238,583,560),7456=>array(30,0,562,547),7457=>array(42,0,776,547),7458=>array(43,0,482,547),7459=>array(59,-14,466,547),7462=>array(87,0,498,560),7463=>array(30,0,562,547),7464=>array(74,0,490,547),7465=>array(74,0,475,547),7466=>array(44,0,546,547),7467=>array(37,0,556,547),7468=>array(5,326,426,734),7469=>array(2,326,573,734),7470=>array(62,326,388,734),7472=>array(62,326,448,734),7473=>array(62,326,358,734),7474=>array(41,326,336,734),7475=>array(35,318,437,742),7476=>array(62,326,412,734),7477=>array(62,326,124,734),7478=>array(-33,214,124,734),7479=>array(62,326,426,734),7480=>array(62,326,348,734),7481=>array(62,326,482,734),7482=>array(62,326,410,734),7483=>array(62,326,410,734),7484=>array(35,318,460,742),7485=>array(35,318,405,742),7486=>array(62,326,358,734),7487=>array(62,326,419,734),7488=>array(-2,326,387,734),7489=>array(55,318,406,734),7490=>array(21,326,603,734),7491=>array(38,318,329,640),7492=>array(38,318,329,640),7493=>array(35,318,343,640),7494=>array(38,318,585,640),7495=>array(57,318,365,751),7496=>array(35,318,343,751),7497=>array(35,318,354,640),7498=>array(35,318,354,640),7499=>array(41,318,298,640),7500=>array(40,318,297,640),7501=>array(35,209,343,640),7502=>array(60,207,116,632),7503=>array(57,326,363,751),7504=>array(57,326,560,640),7505=>array(57,209,346,640),7506=>array(35,318,351,640),7507=>array(35,318,307,640),7508=>array(35,479,351,640),7509=>array(35,318,351,479),7510=>array(57,209,365,640),7511=>array(17,326,232,719),7512=>array(54,318,342,632),7513=>array(54,347,407,604),7514=>array(57,319,560,633),7515=>array(19,326,354,632),7517=>array(59,209,357,755),7518=>array(10,209,354,632),7519=>array(35,318,351,742),7520=>array(35,209,379,635),7521=>array(18,209,346,633),7522=>array(60,0,116,425),7523=>array(57,0,259,313),7524=>array(54,-8,342,306),7525=>array(19,0,354,306),7526=>array(59,-117,357,429),7527=>array(10,-117,354,306),7528=>array(59,-117,367,313),7529=>array(35,-117,379,309),7530=>array(18,-117,346,307),7543=>array(91,-208,580,560),7544=>array(62,326,412,734),7547=>array(57,0,314,547),7549=>array(24,-208,643,560),7557=>array(71,-208,273,760),7579=>array(35,318,343,640),7580=>array(35,318,307,640),7581=>array(35,287,307,640),7582=>array(35,318,351,751),7583=>array(41,318,298,640),7584=>array(15,326,234,751),7585=>array(-11,209,170,632),7586=>array(35,209,343,632),7587=>array(54,209,342,632),7588=>array(36,326,198,751),7589=>array(60,326,187,632),7590=>array(36,326,198,632),7591=>array(36,326,198,632),7592=>array(-83,209,172,751),7593=>array(60,209,187,751),7594=>array(44,209,172,751),7595=>array(55,326,314,640),7596=>array(57,209,560,640),7597=>array(57,209,560,633),7598=>array(-11,209,348,640),7599=>array(57,209,417,640),7600=>array(55,326,346,640),7601=>array(35,318,351,640),7602=>array(35,210,351,751),7603=>array(34,209,297,640),7604=>array(-11,209,224,751),7605=>array(17,209,232,719),7606=>array(46,318,445,632),7607=>array(35,318,355,632),7608=>array(57,317,321,632),7609=>array(60,326,343,632),7610=>array(19,326,354,632),7611=>array(27,326,304,632),7612=>array(27,209,374,632),7613=>array(27,296,304,632),7614=>array(27,207,330,632),7615=>array(35,320,351,756),7620=>array(-456,616,-44,800),7621=>array(-456,616,-44,800),7622=>array(-456,616,-44,800),7623=>array(-456,616,-44,800),7624=>array(-468,616,-32,800),7625=>array(-468,616,-32,800),7680=>array(8,-241,676,729),7681=>array(60,-241,522,560),7682=>array(98,0,615,914),7683=>array(90,-14,580,915),7684=>array(98,-183,615,729),7685=>array(91,-183,580,760),7686=>array(98,-156,615,729),7687=>array(91,-156,580,760),7688=>array(56,-193,644,928),7689=>array(55,-193,488,800),7690=>array(98,0,711,914),7691=>array(55,-14,544,942),7692=>array(98,-183,711,729),7693=>array(55,-183,544,760),7694=>array(98,-156,711,729),7695=>array(55,-156,544,760),7696=>array(98,-192,711,729),7697=>array(55,-193,544,760),7698=>array(98,-240,711,729),7699=>array(55,-240,544,760),7700=>array(98,0,568,1044),7701=>array(55,-14,562,921),7702=>array(98,0,568,1044),7703=>array(55,-14,562,921),7704=>array(98,-213,568,729),7705=>array(55,-213,562,560),7706=>array(98,-192,568,729),7707=>array(55,-192,562,560),7708=>array(98,-193,568,928),7709=>array(55,-193,562,785),7710=>array(98,0,517,914),7711=>array(23,0,371,942),7712=>array(56,-14,693,887),7713=>array(55,-208,544,745),7714=>array(98,0,654,913),7715=>array(90,0,549,915),7716=>array(98,-183,654,729),7717=>array(91,-183,549,760),7718=>array(98,0,654,914),7719=>array(-9,0,549,913),7720=>array(8,-193,654,729),7721=>array(1,-193,549,760),7722=>array(98,-222,654,729),7723=>array(91,-222,549,760),7724=>array(0,-192,322,729),7725=>array(-22,-192,300,760),7726=>array(3,0,293,1044),7727=>array(-6,0,284,886),7728=>array(98,0,677,928),7729=>array(91,0,576,928),7730=>array(98,-183,677,729),7731=>array(91,-183,576,760),7732=>array(98,-156,677,729),7733=>array(91,-156,576,760),7734=>array(98,-183,552,729),7735=>array(98,-183,189,760),7736=>array(1,-183,552,927),7737=>array(-1,-183,291,899),7738=>array(98,-156,552,729),7739=>array(-6,-156,286,760),7740=>array(98,-240,552,729),7741=>array(-17,-240,295,760),7742=>array(98,0,765,928),7743=>array(91,0,889,800),7744=>array(98,0,765,914),7745=>array(91,0,889,760),7746=>array(98,-183,765,729),7747=>array(91,-183,889,560),7748=>array(98,0,650,914),7749=>array(91,0,549,760),7750=>array(98,-183,650,729),7751=>array(91,-183,549,560),7752=>array(98,-156,650,729),7753=>array(91,-156,549,560),7754=>array(98,-240,650,729),7755=>array(91,-240,549,560),7756=>array(56,-14,731,1044),7757=>array(55,-14,557,881),7758=>array(56,-14,731,1042),7759=>array(55,-14,557,882),7760=>array(56,-14,731,1044),7761=>array(55,-14,557,921),7762=>array(56,-14,731,1044),7763=>array(55,-14,557,921),7764=>array(98,0,569,928),7765=>array(91,-208,580,800),7766=>array(98,0,569,914),7767=>array(91,-208,580,760),7768=>array(98,0,666,913),7769=>array(91,0,411,760),7770=>array(98,-183,666,729),7771=>array(91,-183,411,560),7772=>array(98,-183,666,899),7773=>array(91,-183,411,745),7774=>array(98,-156,666,729),7775=>array(41,-156,411,560),7776=>array(66,-14,579,914),7777=>array(54,-14,472,760),7778=>array(66,-183,579,742),7779=>array(54,-183,472,560),7780=>array(66,-14,579,928),7781=>array(54,-14,485,800),7782=>array(66,-14,579,1042),7783=>array(54,-14,472,973),7784=>array(66,-183,579,914),7785=>array(54,-183,472,733),7786=>array(-3,0,614,914),7787=>array(27,0,368,942),7788=>array(-3,-183,614,729),7789=>array(27,-183,368,702),7790=>array(-3,-156,614,729),7791=>array(27,-156,390,702),7792=>array(-3,-240,614,729),7793=>array(27,-240,394,702),7794=>array(87,-183,645,729),7795=>array(85,-183,543,560),7796=>array(87,-192,645,729),7797=>array(85,-192,543,560),7798=>array(87,-213,645,729),7799=>array(85,-213,543,560),7800=>array(87,-14,645,1044),7801=>array(85,-14,543,990),7802=>array(87,-14,645,1025),7803=>array(85,-14,543,869),7804=>array(8,0,676,936),7805=>array(30,0,562,777),7806=>array(8,-183,676,729),7807=>array(30,-183,562,547),7808=>array(33,0,956,931),7809=>array(42,0,776,802),7810=>array(33,0,956,931),7811=>array(42,0,776,803),7812=>array(33,0,956,913),7813=>array(42,0,776,758),7814=>array(33,0,956,913),7815=>array(42,0,776,760),7816=>array(33,-183,956,729),7817=>array(42,-183,776,547),7818=>array(30,0,654,914),7819=>array(29,0,559,760),7820=>array(30,0,654,913),7821=>array(29,0,559,758),7822=>array(-2,0,613,914),7823=>array(30,-208,562,760),7824=>array(45,0,640,928),7825=>array(43,0,482,800),7826=>array(45,-183,640,729),7827=>array(43,-183,482,547),7828=>array(45,-156,640,729),7829=>array(43,-156,482,547),7830=>array(91,-156,549,760),7831=>array(2,0,368,913),7832=>array(42,0,776,878),7833=>array(30,-208,562,878),7834=>array(60,-14,672,760),7835=>array(23,0,371,942),7836=>array(1,0,371,760),7837=>array(23,0,371,760),7838=>array(87,-14,713,743),7839=>array(55,-14,557,742),7840=>array(8,-183,676,729),7841=>array(60,-183,522,560),7842=>array(8,0,676,992),7843=>array(60,-14,522,810),7844=>array(8,0,676,1028),7845=>array(60,-14,585,846),7846=>array(8,0,676,1028),7847=>array(60,-14,522,847),7848=>array(8,0,676,1044),7849=>array(60,-14,577,862),7850=>array(8,0,676,1057),7851=>array(60,-14,522,875),7852=>array(8,-183,676,928),7853=>array(60,-183,522,800),7854=>array(8,0,676,1044),7855=>array(60,-14,522,877),7856=>array(8,0,676,1044),7857=>array(60,-14,522,877),7858=>array(8,0,676,1068),7859=>array(60,-14,522,901),7860=>array(8,0,676,1043),7861=>array(60,-14,522,876),7862=>array(8,-183,676,946),7863=>array(60,-183,522,765),7864=>array(98,-183,568,729),7865=>array(55,-183,562,560),7866=>array(98,0,568,992),7867=>array(55,-14,562,810),7868=>array(98,0,568,921),7869=>array(55,-14,562,777),7870=>array(98,0,637,1028),7871=>array(55,-14,613,846),7872=>array(98,0,568,1028),7873=>array(55,-14,562,847),7874=>array(98,0,620,1044),7875=>array(55,-14,605,862),7876=>array(98,0,568,1057),7877=>array(55,-14,562,875),7878=>array(98,-183,568,928),7879=>array(55,-183,562,800),7880=>array(44,0,263,992),7881=>array(33,0,252,811),7882=>array(98,-183,197,729),7883=>array(93,-183,184,760),7884=>array(56,-183,731,742),7885=>array(55,-183,557,560),7886=>array(56,-14,731,992),7887=>array(55,-14,557,810),7888=>array(56,-14,731,1028),7889=>array(55,-14,601,846),7890=>array(56,-14,731,1028),7891=>array(55,-14,557,847),7892=>array(56,-14,731,1044),7893=>array(55,-14,592,862),7894=>array(56,-14,731,1057),7895=>array(55,-14,557,875),7896=>array(56,-183,731,928),7897=>array(55,-183,557,800),7898=>array(50,-14,764,927),7899=>array(58,-14,603,800),7900=>array(50,-14,764,927),7901=>array(58,-14,603,800),7902=>array(50,-14,764,992),7903=>array(58,-14,603,810),7904=>array(50,-14,764,921),7905=>array(58,-14,603,777),7906=>array(50,-183,764,760),7907=>array(58,-183,603,615),7908=>array(87,-183,645,729),7909=>array(85,-183,543,560),7910=>array(87,-14,645,992),7911=>array(85,-14,543,810),7912=>array(84,-4,796,927),7913=>array(86,-14,676,800),7914=>array(84,-4,796,927),7915=>array(86,-14,676,800),7916=>array(84,-4,796,992),7917=>array(86,-14,676,810),7918=>array(84,-4,796,921),7919=>array(86,-14,676,777),7920=>array(84,-183,796,760),7921=>array(86,-183,676,615),7922=>array(-2,0,613,931),7923=>array(30,-208,562,802),7924=>array(-2,-183,613,729),7925=>array(30,-208,562,547),7926=>array(-2,0,613,996),7927=>array(30,-208,562,813),7928=>array(-2,0,613,921),7929=>array(30,-208,562,777),7930=>array(98,0,764,729),7931=>array(16,0,462,760),7936=>array(55,-12,611,797),7937=>array(55,-12,611,797),7938=>array(55,-12,611,800),7939=>array(55,-12,611,800),7940=>array(55,-12,611,800),7941=>array(55,-12,611,800),7942=>array(55,-12,611,928),7943=>array(55,-12,611,928),7944=>array(8,0,676,797),7945=>array(8,0,676,797),7946=>array(2,0,869,800),7947=>array(3,0,869,800),7948=>array(3,0,761,800),7949=>array(2,0,793,800),7950=>array(3,0,700,928),7951=>array(2,0,734,928),7952=>array(65,-14,473,797),7953=>array(65,-14,473,797),7954=>array(65,-14,473,800),7955=>array(65,-14,473,800),7956=>array(65,-14,486,800),7957=>array(65,-14,501,800),7960=>array(3,0,647,797),7961=>array(3,0,647,797),7962=>array(2,0,902,800),7963=>array(3,0,911,800),7964=>array(3,0,834,800),7965=>array(2,0,864,800),7968=>array(91,-208,549,797),7969=>array(91,-208,549,797),7970=>array(91,-208,549,800),7971=>array(91,-208,549,800),7972=>array(91,-208,549,800),7973=>array(91,-208,549,800),7974=>array(91,-208,549,928),7975=>array(91,-208,549,928),7976=>array(3,0,739,797),7977=>array(3,0,737,797),7978=>array(2,0,988,800),7979=>array(3,0,991,800),7980=>array(3,0,929,800),7981=>array(2,0,953,800),7982=>array(3,0,835,928),7983=>array(2,0,849,928),7984=>array(76,0,304,797),7985=>array(71,0,304,797),7986=>array(-39,0,340,800),7987=>array(-34,0,347,800),7988=>array(2,0,362,800),7989=>array(-22,0,366,800),7990=>array(-26,0,304,928),7991=>array(-28,0,304,928),7992=>array(3,0,282,797),7993=>array(3,0,276,797),7994=>array(2,0,537,800),7995=>array(3,0,537,800),7996=>array(3,0,472,800),7997=>array(2,0,501,800),7998=>array(3,0,392,928),7999=>array(2,0,395,928),8000=>array(55,-14,557,797),8001=>array(55,-14,557,797),8002=>array(55,-14,557,800),8003=>array(55,-14,557,800),8004=>array(55,-14,557,800),8005=>array(55,-14,557,800),8008=>array(3,-14,748,797),8009=>array(3,-14,792,797),8010=>array(2,-14,1039,800),8011=>array(3,-14,1043,800),8012=>array(3,-14,882,800),8013=>array(2,-14,914,800),8016=>array(73,-14,521,797),8017=>array(73,-14,521,797),8018=>array(73,-14,521,800),8019=>array(73,-14,521,800),8020=>array(73,-14,521,800),8021=>array(73,-14,521,800),8022=>array(73,-14,521,928),8023=>array(73,-14,521,928),8025=>array(3,0,786,797),8027=>array(3,0,1000,800),8029=>array(2,0,1014,800),8031=>array(2,0,900,928),8032=>array(66,-14,769,797),8033=>array(66,-14,769,797),8034=>array(66,-14,769,800),8035=>array(66,-14,769,800),8036=>array(66,-14,769,800),8037=>array(66,-14,769,800),8038=>array(66,-14,769,928),8039=>array(66,-14,769,928),8040=>array(3,0,764,797),8041=>array(3,0,805,797),8042=>array(2,0,1051,800),8043=>array(3,0,1057,800),8044=>array(3,0,908,800),8045=>array(2,0,934,800),8046=>array(3,0,883,928),8047=>array(2,0,914,928),8048=>array(55,-12,611,800),8049=>array(55,-12,611,800),8050=>array(65,-14,473,800),8051=>array(65,-14,473,800),8052=>array(91,-208,549,800),8053=>array(91,-208,549,800),8054=>array(-56,0,304,800),8055=>array(81,0,324,800),8056=>array(55,-14,557,800),8057=>array(55,-14,557,800),8058=>array(73,-14,521,800),8059=>array(73,-14,521,800),8060=>array(66,-14,769,800),8061=>array(66,-14,769,800),8064=>array(55,-208,611,797),8065=>array(55,-208,611,797),8066=>array(55,-208,611,800),8067=>array(55,-208,611,800),8068=>array(55,-208,611,800),8069=>array(55,-208,611,800),8070=>array(55,-208,611,928),8071=>array(55,-208,611,928),8072=>array(8,-208,676,797),8073=>array(8,-208,676,797),8074=>array(2,-208,869,800),8075=>array(3,-208,869,800),8076=>array(3,-208,761,800),8077=>array(2,-208,793,800),8078=>array(3,-208,700,928),8079=>array(2,-208,734,928),8080=>array(91,-208,549,797),8081=>array(91,-208,549,797),8082=>array(91,-208,549,800),8083=>array(91,-208,549,800),8084=>array(91,-208,549,800),8085=>array(91,-208,549,800),8086=>array(91,-208,549,928),8087=>array(91,-208,549,928),8088=>array(3,-208,739,797),8089=>array(3,-208,737,797),8090=>array(2,-208,988,800),8091=>array(3,-208,991,800),8092=>array(3,-208,929,800),8093=>array(2,-208,953,800),8094=>array(3,-208,835,928),8095=>array(2,-208,849,928),8096=>array(66,-208,769,797),8097=>array(66,-208,769,797),8098=>array(66,-208,769,800),8099=>array(66,-208,769,800),8100=>array(66,-208,769,800),8101=>array(66,-208,769,800),8102=>array(66,-208,769,928),8103=>array(66,-208,769,928),8104=>array(3,-208,764,797),8105=>array(3,-208,805,797),8106=>array(2,-208,1051,800),8107=>array(3,-208,1057,800),8108=>array(3,-208,908,800),8109=>array(2,-208,934,800),8110=>array(3,-208,883,928),8111=>array(2,-208,914,928),8112=>array(55,-12,611,785),8113=>array(55,-12,611,745),8114=>array(55,-208,611,800),8115=>array(55,-208,611,559),8116=>array(55,-208,611,800),8118=>array(55,-12,611,777),8119=>array(55,-208,611,777),8120=>array(8,0,676,928),8121=>array(8,0,676,899),8122=>array(-2,0,708,800),8123=>array(8,0,676,800),8124=>array(8,-208,676,729),8125=>array(190,595,309,797),8126=>array(214,-208,321,-45),8127=>array(190,595,309,797),8128=>array(89,639,411,777),8129=>array(89,659,411,928),8130=>array(91,-208,549,800),8131=>array(91,-208,549,560),8132=>array(91,-208,549,800),8134=>array(91,-208,549,777),8135=>array(91,-208,549,777),8136=>array(-2,0,741,800),8137=>array(-12,0,682,800),8138=>array(-2,0,833,800),8139=>array(-6,0,765,800),8140=>array(98,-208,654,729),8141=>array(67,595,446,800),8142=>array(88,595,447,800),8143=>array(89,595,411,928),8144=>array(-10,0,304,785),8145=>array(-14,0,304,745),8146=>array(-20,0,304,978),8147=>array(2,0,313,978),8150=>array(-14,0,309,777),8151=>array(-13,0,310,928),8152=>array(-5,0,300,928),8153=>array(1,0,293,899),8154=>array(-2,0,377,800),8155=>array(-9,0,311,800),8157=>array(62,595,443,800),8158=>array(73,595,461,800),8159=>array(89,595,411,928),8160=>array(73,-14,521,785),8161=>array(73,-14,521,745),8162=>array(73,-14,521,978),8163=>array(73,-14,521,978),8164=>array(91,-208,580,797),8165=>array(91,-208,580,797),8166=>array(73,-14,521,777),8167=>array(73,-14,521,928),8168=>array(-2,0,613,928),8169=>array(-2,0,613,899),8170=>array(-2,0,847,800),8171=>array(-15,0,821,800),8172=>array(3,0,651,797),8173=>array(83,659,395,978),8174=>array(105,659,415,978),8175=>array(83,617,317,800),8178=>array(66,-208,769,800),8179=>array(66,-208,769,547),8180=>array(66,-208,769,800),8182=>array(66,-14,769,777),8183=>array(66,-208,769,777),8184=>array(-2,-14,885,800),8185=>array(-7,-14,750,800),8186=>array(-2,0,884,800),8187=>array(-18,0,752,800),8188=>array(38,-208,726,738),8189=>array(181,616,415,800),8190=>array(190,595,309,797),8208=>array(49,234,312,314),8209=>array(49,234,312,314),8210=>array(49,239,587,309),8211=>array(49,239,451,309),8212=>array(49,239,951,309),8213=>array(0,239,1000,309),8214=>array(127,-236,371,764),8215=>array(-10,-236,510,-9),8216=>array(85,489,228,729),8217=>array(87,499,230,729),8218=>array(85,-116,228,124),8219=>array(87,499,230,729),8220=>array(85,489,428,729),8221=>array(85,489,428,729),8222=>array(85,-116,428,124),8223=>array(85,489,428,729),8224=>array(28,-96,472,729),8225=>array(28,-96,472,729),8226=>array(150,227,440,516),8227=>array(150,188,479,555),8228=>array(115,0,219,124),8229=>array(115,0,552,124),8230=>array(115,0,885,124),8231=>array(107,302,210,426),8240=>array(55,-14,1287,742),8241=>array(55,-14,1681,742),8242=>array(20,547,203,729),8243=>array(20,547,350,729),8244=>array(20,547,496,729),8245=>array(20,547,203,729),8246=>array(20,547,350,729),8247=>array(20,547,496,729),8248=>array(5,-236,333,-30),8249=>array(77,69,306,517),8250=>array(94,69,323,517),8251=>array(95,2,740,725),8252=>array(72,0,414,729),8253=>array(72,0,461,742),8254=>array(-10,686,510,755),8255=>array(-43,-237,847,-60),8256=>array(-43,752,847,929),8257=>array(-42,-236,286,229),8258=>array(30,-29,970,814),8259=>array(108,313,400,421),8260=>array(-183,-14,350,742),8261=>array(86,-132,293,760),8262=>array(86,-132,293,760),8263=>array(36,0,886,742),8264=>array(72,0,661,742),8265=>array(72,0,661,742),8266=>array(49,-123,448,545),8267=>array(115,-96,566,729),8268=>array(105,220,395,509),8269=>array(105,220,395,509),8270=>array(30,-29,470,427),8271=>array(139,-116,282,517),8272=>array(-43,-237,847,929),8273=>array(30,-7,470,929),8274=>array(71,-93,408,729),8275=>array(49,228,951,399),8276=>array(-43,-240,847,-63),8277=>array(152,98,686,631),8278=>array(122,149,464,589),8279=>array(20,547,643,729),8280=>array(175,125,663,613),8281=>array(175,120,663,608),8282=>array(107,0,210,729),8283=>array(49,-138,749,867),8284=>array(55,0,783,729),8285=>array(107,39,210,655),8286=>array(107,8,210,683),8304=>array(42,319,366,742),8305=>array(60,326,116,751),8308=>array(31,326,369,734),8309=>array(50,319,353,734),8310=>array(45,319,369,742),8311=>array(53,326,354,734),8312=>array(43,319,365,742),8313=>array(41,319,364,742),8314=>array(67,326,461,677),8315=>array(67,479,461,525),8316=>array(67,422,461,581),8317=>array(54,252,195,751),8318=>array(50,252,191,751),8319=>array(57,326,346,640),8320=>array(42,-7,366,416),8321=>array(67,0,346,408),8322=>array(46,0,338,416),8323=>array(48,-7,350,416),8324=>array(31,0,369,408),8325=>array(50,-7,353,408),8326=>array(45,-7,369,416),8327=>array(53,0,354,408),8328=>array(43,-7,365,416),8329=>array(41,-7,364,416),8330=>array(67,0,461,351),8331=>array(67,152,461,199),8332=>array(67,96,461,254),8333=>array(54,-74,195,425),8334=>array(50,-74,191,425),8336=>array(38,-8,329,313),8337=>array(35,-8,354,313),8338=>array(35,-8,351,313),8339=>array(57,0,391,306),8340=>array(35,-8,354,313),8341=>array(57,0,346,425),8342=>array(57,0,363,425),8343=>array(60,0,116,425),8344=>array(57,0,560,313),8345=>array(57,0,346,313),8346=>array(57,-117,365,313),8347=>array(57,0,320,322),8348=>array(17,0,232,393),8352=>array(42,0,835,729),8353=>array(56,-44,593,778),8354=>array(47,-14,587,742),8355=>array(65,0,599,729),8356=>array(63,0,548,742),8357=>array(91,-93,889,640),8358=>array(57,0,691,729),8359=>array(98,-14,1226,729),8360=>array(98,-14,1025,729),8361=>array(29,0,960,729),8362=>array(46,-14,743,729),8363=>array(55,-156,619,760),8364=>array(0,-14,570,742),8365=>array(20,0,636,729),8366=>array(10,0,626,729),8367=>array(102,-222,1205,742),8368=>array(22,-14,569,742),8369=>array(33,0,579,729),8370=>array(45,-81,586,809),8371=>array(8,0,627,729),8372=>array(57,-14,717,742),8373=>array(81,-147,556,760),8376=>array(10,0,626,729),8377=>array(52,0,585,729),8378=>array(5,2,649,731),8400=>array(-491,635,-26,760),8401=>array(-470,635,-5,760),8406=>array(-470,560,-26,760),8407=>array(-470,560,-26,760),8411=>array(-491,560,-10,758),8412=>array(-586,560,86,758),8417=>array(-470,560,-26,760),8448=>array(33,-24,980,752),8449=>array(33,-24,999,752),8450=>array(56,-14,644,742),8451=>array(95,-14,1053,742),8452=>array(-21,0,637,729),8453=>array(29,-24,987,752),8454=>array(29,-24,1038,752),8455=>array(80,-14,560,742),8456=>array(54,-146,642,611),8457=>array(95,0,894,742),8459=>array(36,-14,943,748),8460=>array(1,-128,693,731),8461=>array(98,0,751,729),8462=>array(35,0,566,760),8463=>array(44,0,566,760),8464=>array(29,-15,432,742),8465=>array(52,-14,659,742),8466=>array(33,-14,679,743),8467=>array(-14,-14,353,742),8468=>array(16,-14,763,760),8469=>array(97,0,704,729),8470=>array(26,0,969,729),8471=>array(138,0,862,724),8472=>array(54,-221,658,495),8473=>array(98,0,666,729),8474=>array(56,-129,731,742),8475=>array(32,-9,764,774),8476=>array(41,-14,803,743),8477=>array(98,0,774,729),8478=>array(83,0,814,729),8479=>array(98,-107,666,847),8480=>array(126,443,770,730),8481=>array(-2,0,1023,547),8482=>array(144,447,784,729),8483=>array(8,-108,676,846),8484=>array(45,0,700,729),8485=>array(43,-213,523,760),8486=>array(38,0,726,738),8487=>array(38,-14,726,724),8488=>array(12,-149,573,783),8489=>array(33,0,255,547),8490=>array(98,0,677,729),8491=>array(8,0,676,928),8492=>array(45,0,734,772),8493=>array(63,-12,652,742),8494=>array(61,-12,793,647),8495=>array(42,-14,547,533),8496=>array(79,-14,565,742),8497=>array(41,-16,758,755),8498=>array(98,0,517,729),8499=>array(28,-28,1032,751),8500=>array(51,-12,411,395),8501=>array(50,-14,712,742),8502=>array(-2,-14,653,743),8503=>array(13,-35,407,742),8504=>array(42,-35,591,742),8505=>array(34,0,355,760),8506=>array(44,-21,915,654),8507=>array(74,0,1162,547),8508=>array(18,-8,685,547),8509=>array(0,-194,669,560),8510=>array(98,0,648,729),8511=>array(98,0,750,729),8512=>array(12,-192,791,719),8513=>array(80,-14,716,742),8514=>array(4,0,458,729),8515=>array(3,0,457,729),8516=>array(-2,0,613,729),8517=>array(42,0,786,729),8518=>array(44,-14,709,760),8519=>array(44,-14,572,560),8520=>array(39,0,313,760),8521=>array(-114,-208,313,760),8523=>array(29,-14,715,742),8526=>array(40,0,441,547),8528=>array(67,-14,922,742),8529=>array(67,-14,932,742),8530=>array(67,-14,1335,742),8531=>array(67,-14,918,742),8532=>array(46,-14,918,742),8533=>array(67,-14,921,742),8534=>array(46,-14,921,742),8535=>array(48,-14,921,742),8536=>array(31,-14,921,742),8537=>array(67,-14,937,742),8538=>array(50,-14,937,742),8539=>array(67,-14,933,742),8540=>array(48,-14,933,742),8541=>array(50,-14,933,742),8542=>array(53,-14,933,742),8543=>array(67,-14,751,742),8544=>array(98,0,197,729),8545=>array(98,0,394,729),8546=>array(98,0,591,729),8547=>array(98,0,915,729),8548=>array(8,0,676,729),8549=>array(8,0,824,729),8550=>array(8,0,1021,729),8551=>array(8,0,1219,729),8552=>array(98,0,886,729),8553=>array(30,0,654,729),8554=>array(30,0,835,729),8555=>array(30,0,1032,729),8556=>array(98,0,552,729),8557=>array(56,-14,644,742),8558=>array(98,0,711,729),8559=>array(98,0,765,729),8560=>array(94,0,184,760),8561=>array(94,0,364,760),8562=>array(94,0,543,760),8563=>array(94,0,782,760),8564=>array(30,0,562,547),8565=>array(30,0,717,760),8566=>array(30,0,897,760),8567=>array(30,0,1077,760),8568=>array(94,0,786,760),8569=>array(29,0,559,547),8570=>array(29,0,729,760),8571=>array(29,0,908,760),8572=>array(94,0,184,760),8573=>array(55,-14,488,560),8574=>array(55,-14,544,760),8575=>array(91,0,889,560),8576=>array(59,0,1186,729),8577=>array(98,0,711,729),8578=>array(59,0,1186,729),8579=>array(56,-14,644,742),8580=>array(62,-14,495,560),8581=>array(56,-208,644,742),8585=>array(42,-14,918,742),8592=>array(49,100,781,527),8593=>array(205,0,632,732),8594=>array(57,100,789,527),8595=>array(205,-3,632,729),8596=>array(49,100,789,527),8597=>array(205,-8,632,732),8598=>array(141,25,703,587),8599=>array(141,25,703,587),8600=>array(141,25,703,587),8601=>array(141,25,703,587),8602=>array(49,100,781,527),8603=>array(57,100,789,527),8604=>array(21,103,827,414),8605=>array(11,103,816,414),8606=>array(49,100,781,527),8607=>array(206,0,633,732),8608=>array(57,100,789,527),8609=>array(206,-3,633,729),8610=>array(49,100,781,527),8611=>array(57,100,789,527),8612=>array(49,100,781,527),8613=>array(206,0,632,732),8614=>array(57,100,789,527),8615=>array(206,-3,632,729),8616=>array(206,0,632,732),8617=>array(49,100,780,565),8618=>array(58,100,789,565),8619=>array(49,100,780,565),8620=>array(58,100,789,565),8621=>array(49,100,789,527),8622=>array(49,93,789,534),8623=>array(146,-2,702,730),8624=>array(169,0,629,743),8625=>array(209,0,669,743),8626=>array(169,-14,629,729),8627=>array(209,-14,669,729),8628=>array(233,-3,760,604),8629=>array(49,100,656,626),8630=>array(22,203,799,668),8631=>array(39,203,816,668),8632=>array(108,25,788,729),8633=>array(55,-46,783,673),8634=>array(103,62,762,680),8635=>array(77,62,736,680),8636=>array(49,272,781,527),8637=>array(49,100,781,355),8638=>array(377,0,632,732),8639=>array(205,0,460,732),8640=>array(57,272,789,527),8641=>array(57,100,789,355),8642=>array(377,0,632,732),8643=>array(205,0,460,732),8644=>array(49,-47,789,674),8645=>array(58,-3,779,732),8646=>array(49,-47,789,674),8647=>array(49,-47,781,674),8648=>array(59,0,779,732),8649=>array(58,-47,790,674),8650=>array(59,-3,779,729),8651=>array(49,7,789,620),8652=>array(49,7,789,620),8653=>array(49,100,781,527),8654=>array(49,94,789,533),8655=>array(57,100,789,527),8656=>array(49,100,781,527),8657=>array(206,0,633,732),8658=>array(57,100,789,527),8659=>array(206,-3,633,729),8660=>array(49,100,789,527),8661=>array(205,-8,633,732),8662=>array(141,-23,751,587),8663=>array(92,-23,703,587),8664=>array(92,25,703,636),8665=>array(141,25,751,636),8666=>array(49,100,781,527),8667=>array(57,100,789,527),8668=>array(49,100,781,527),8669=>array(57,100,789,527),8670=>array(205,0,632,732),8671=>array(205,-3,632,729),8672=>array(49,100,781,527),8673=>array(205,0,633,732),8674=>array(57,100,789,527),8675=>array(205,-3,633,729),8676=>array(52,99,781,528),8677=>array(57,99,786,528),8678=>array(27,65,781,562),8679=>array(171,0,667,754),8680=>array(35,65,789,562),8681=>array(171,-25,667,729),8682=>array(171,0,667,754),8683=>array(171,0,667,754),8684=>array(156,0,682,754),8685=>array(171,0,667,754),8686=>array(171,0,667,754),8687=>array(171,0,667,754),8688=>array(57,65,811,562),8689=>array(60,0,788,729),8690=>array(60,0,788,729),8691=>array(171,-25,667,754),8692=>array(57,100,789,527),8693=>array(58,-3,779,732),8694=>array(57,-193,789,820),8695=>array(49,94,781,533),8696=>array(57,94,789,533),8697=>array(49,94,789,533),8698=>array(49,94,781,533),8699=>array(57,94,789,533),8700=>array(49,94,789,533),8701=>array(27,96,781,531),8702=>array(57,96,811,531),8703=>array(27,96,811,531),8704=>array(8,0,676,729),8705=>array(66,-14,554,742),8706=>array(46,-14,471,662),8707=>array(98,0,568,729),8708=>array(98,-46,568,776),8709=>array(76,-10,795,710),8710=>array(-3,0,672,719),8711=>array(-3,0,672,719),8712=>array(85,-10,786,710),8713=>array(85,-138,786,835),8714=>array(106,76,612,550),8715=>array(85,-10,786,710),8716=>array(85,-138,786,835),8717=>array(106,76,612,550),8718=>array(146,0,490,485),8719=>array(76,-192,680,719),8720=>array(76,-192,680,719),8721=>array(12,-192,654,719),8722=>array(106,272,732,355),8723=>array(106,0,732,627),8724=>array(106,0,732,729),8725=>array(0,-93,337,729),8726=>array(192,-54,529,768),8727=>array(127,0,710,627),8728=>array(158,160,468,470),8729=>array(168,168,458,458),8730=>array(30,-20,637,811),8731=>array(30,-20,637,933),8732=>array(30,-20,637,924),8733=>array(107,112,607,487),8734=>array(107,112,726,487),8735=>array(138,99,700,661),8736=>array(85,0,786,729),8737=>array(85,-53,786,729),8738=>array(116,-3,732,727),8739=>array(211,-214,289,771),8740=>array(50,-214,451,771),8741=>array(133,-214,367,771),8742=>array(50,-214,451,771),8743=>array(129,0,603,579),8744=>array(129,0,603,579),8745=>array(129,0,603,579),8746=>array(129,0,603,579),8747=>array(57,-212,464,757),8748=>array(57,-212,732,757),8749=>array(57,-212,1000,757),8750=>array(57,-212,464,757),8751=>array(57,-212,732,757),8752=>array(57,-212,1000,757),8753=>array(57,-213,522,757),8754=>array(57,-212,514,757),8755=>array(57,-212,515,757),8756=>array(59,100,577,604),8757=>array(59,100,577,604),8758=>array(79,100,182,604),8759=>array(59,100,577,604),8760=>array(106,272,732,552),8761=>array(106,78,732,552),8762=>array(105,78,732,552),8763=>array(106,78,732,552),8764=>array(106,228,732,399),8765=>array(106,228,732,399),8766=>array(79,149,759,479),8767=>array(106,42,732,584),8768=>array(102,0,273,626),8769=>array(106,77,732,553),8770=>array(106,133,732,454),8771=>array(106,172,732,494),8772=>array(106,48,732,603),8773=>array(106,90,732,594),8774=>array(106,12,732,594),8775=>array(106,-5,732,657),8776=>array(106,133,732,494),8777=>array(106,2,732,625),8778=>array(106,90,732,598),8779=>array(106,59,732,602),8780=>array(106,90,732,594),8781=>array(105,105,732,521),8782=>array(106,26,732,601),8783=>array(106,172,732,601),8784=>array(106,172,732,625),8785=>array(106,1,732,625),8786=>array(106,2,733,625),8787=>array(106,2,733,625),8788=>array(101,151,899,476),8789=>array(100,151,900,475),8790=>array(106,172,732,454),8791=>array(106,172,732,760),8792=>array(106,172,732,662),8793=>array(106,172,732,812),8794=>array(106,172,732,812),8795=>array(106,172,732,849),8796=>array(106,172,732,854),8797=>array(106,172,732,764),8798=>array(106,172,732,760),8799=>array(106,172,732,856),8800=>array(106,19,732,608),8801=>array(106,90,732,537),8802=>array(106,-24,732,650),8803=>array(106,0,732,629),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8806=>array(106,-83,732,638),8807=>array(106,-83,732,638),8808=>array(106,-164,732,638),8809=>array(106,-164,732,638),8810=>array(72,22,975,609),8811=>array(72,22,975,609),8812=>array(86,-132,378,759),8813=>array(105,13,732,613),8814=>array(106,2,732,674),8815=>array(106,-47,732,625),8816=>array(106,-102,732,667),8817=>array(106,-102,732,667),8818=>array(106,-55,732,582),8819=>array(106,-39,732,582),8820=>array(106,-105,732,664),8821=>array(106,-102,732,667),8822=>array(102,-87,732,686),8823=>array(102,-87,732,686),8824=>array(102,-197,732,797),8825=>array(102,-197,732,797),8826=>array(106,-38,732,664),8827=>array(106,-38,732,664),8828=>array(106,-105,732,667),8829=>array(106,-105,732,667),8830=>array(106,-85,732,667),8831=>array(106,-85,732,667),8832=>array(106,-61,732,764),8833=>array(106,-138,732,687),8834=>array(100,80,738,546),8835=>array(100,80,738,546),8836=>array(100,-96,738,726),8837=>array(100,-100,738,722),8838=>array(93,0,732,613),8839=>array(106,0,745,613),8840=>array(93,-116,732,730),8841=>array(106,-116,745,730),8842=>array(93,-73,732,614),8843=>array(93,-73,732,614),8844=>array(129,0,603,579),8845=>array(129,0,603,579),8846=>array(129,2,603,582),8847=>array(106,0,732,568),8848=>array(106,0,732,568),8849=>array(106,-83,732,630),8850=>array(106,-83,732,630),8851=>array(106,0,674,626),8852=>array(106,0,674,626),8853=>array(91,-14,747,643),8854=>array(91,-14,747,643),8855=>array(91,-14,747,643),8856=>array(91,-14,747,643),8857=>array(91,-14,747,643),8858=>array(91,-14,747,643),8859=>array(91,-14,747,643),8860=>array(91,-14,747,643),8861=>array(91,-14,747,643),8862=>array(91,-14,747,643),8863=>array(91,-14,747,643),8864=>array(91,-14,747,643),8865=>array(91,-14,747,643),8866=>array(85,0,786,700),8867=>array(85,0,786,700),8868=>array(85,0,786,700),8869=>array(85,0,786,700),8870=>array(85,0,436,700),8871=>array(85,0,436,700),8872=>array(85,0,786,700),8873=>array(85,0,786,700),8874=>array(85,0,786,700),8875=>array(85,0,786,700),8876=>array(85,-40,786,740),8877=>array(85,-40,786,740),8878=>array(85,-40,786,740),8879=>array(85,-40,786,740),8880=>array(106,-43,724,670),8881=>array(106,-43,724,670),8882=>array(106,15,732,612),8883=>array(106,15,732,612),8884=>array(106,-48,732,674),8885=>array(106,-48,732,674),8886=>array(59,175,941,454),8887=>array(59,175,941,454),8888=>array(48,175,790,454),8889=>array(59,-47,779,674),8890=>array(116,0,404,701),8891=>array(98,0,634,740),8892=>array(98,0,634,740),8893=>array(98,0,634,740),8894=>array(138,0,700,562),8895=>array(138,0,700,562),8896=>array(-3,-192,823,719),8897=>array(-3,-192,823,719),8898=>array(68,-192,752,719),8899=>array(68,-192,752,719),8900=>array(3,-233,491,807),8901=>array(107,285,210,409),8902=>array(122,149,504,512),8903=>array(106,15,732,613),8904=>array(106,-30,894,657),8905=>array(106,-30,894,657),8906=>array(106,-30,894,657),8907=>array(106,-30,894,657),8908=>array(106,-30,894,657),8909=>array(106,172,732,494),8910=>array(48,0,684,579),8911=>array(48,0,684,579),8912=>array(93,-3,732,630),8913=>array(106,-3,745,630),8914=>array(103,0,735,663),8915=>array(103,-14,735,649),8916=>array(186,0,652,729),8917=>array(106,-100,732,729),8918=>array(106,46,732,581),8919=>array(106,46,732,581),8920=>array(72,22,1350,609),8921=>array(72,22,1350,609),8922=>array(106,-228,732,854),8923=>array(106,-228,732,854),8924=>array(106,0,732,582),8925=>array(106,0,732,582),8926=>array(106,-105,732,667),8927=>array(106,-105,732,667),8928=>array(106,-178,732,764),8929=>array(106,-178,732,764),8930=>array(106,-141,732,767),8931=>array(106,-141,732,767),8932=>array(106,-94,732,619),8933=>array(106,-94,732,619),8934=>array(106,-138,732,582),8935=>array(106,-138,732,582),8936=>array(106,-169,732,667),8937=>array(110,-171,736,667),8938=>array(106,-130,732,756),8939=>array(106,-130,732,756),8940=>array(106,-189,732,815),8941=>array(104,-189,730,815),8942=>array(448,-93,551,715),8943=>array(115,249,884,373),8944=>array(115,-93,884,715),8945=>array(115,-93,884,715),8946=>array(43,-10,957,710),8947=>array(85,-10,786,710),8948=>array(106,76,612,550),8949=>array(85,-10,786,910),8950=>array(85,-10,786,853),8951=>array(106,76,612,686),8952=>array(85,-144,786,710),8953=>array(85,-10,786,710),8954=>array(43,-10,957,710),8955=>array(85,-10,786,710),8956=>array(106,76,612,550),8957=>array(85,-10,786,853),8958=>array(106,76,612,686),8959=>array(106,0,765,720),8960=>array(36,-18,567,514),8961=>array(56,162,540,443),8962=>array(71,0,563,596),8963=>array(205,481,632,732),8964=>array(205,0,632,251),8965=>array(205,0,632,406),8966=>array(205,0,632,513),8967=>array(154,-29,334,788),8968=>array(86,-132,293,760),8969=>array(97,-132,304,760),8970=>array(86,-132,293,760),8971=>array(97,-132,304,760),8972=>array(369,-77,759,313),8973=>array(49,-77,439,313),8974=>array(369,243,759,634),8975=>array(49,243,439,634),8976=>array(106,140,732,421),8977=>array(3,126,510,634),8984=>array(121,0,879,759),8985=>array(106,140,732,421),8988=>array(86,425,403,760),8989=>array(65,425,383,760),8990=>array(86,-70,403,264),8991=>array(65,-70,383,264),8992=>array(210,-250,497,928),8993=>array(21,-237,307,942),8996=>array(76,227,1076,575),8997=>array(76,0,1076,575),8998=>array(76,0,1414,760),8999=>array(76,0,1076,760),9000=>array(59,0,1385,729),9003=>array(0,0,1338,760),9004=>array(73,-91,800,748),9075=>array(81,0,304,547),9076=>array(91,-208,580,560),9077=>array(66,-14,769,547),9082=>array(55,-12,611,559),9085=>array(13,-228,745,102),9095=>array(76,0,1096,748),9108=>array(17,0,856,727),9115=>array(86,-252,414,946),9116=>array(86,-252,181,942),9117=>array(86,-240,414,942),9118=>array(86,-252,414,946),9119=>array(319,-252,414,942),9120=>array(86,-240,414,942),9121=>array(86,-252,414,928),9122=>array(86,-252,181,942),9123=>array(86,-240,414,942),9124=>array(86,-252,414,928),9125=>array(319,-252,414,935),9126=>array(86,-240,414,935),9127=>array(330,-261,668,928),9128=>array(82,-252,420,940),9129=>array(330,-240,668,940),9130=>array(330,-256,420,943),9131=>array(82,-261,420,928),9132=>array(330,-252,668,940),9133=>array(82,-240,420,940),9134=>array(210,-250,307,942),9166=>array(27,65,781,729),9167=>array(91,0,854,596),9187=>array(73,-91,800,748),9189=>array(3,75,766,444),9192=>array(43,-129,601,294),9250=>array(-62,-14,580,760),9251=>array(71,-228,563,102),9312=>array(74,-10,822,738),9313=>array(74,-10,822,738),9314=>array(74,-10,822,738),9315=>array(74,-10,822,738),9316=>array(74,-10,822,738),9317=>array(74,-10,822,738),9318=>array(74,-10,822,738),9319=>array(74,-10,822,738),9320=>array(74,-10,822,738),9321=>array(74,-10,822,738),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,775,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-123,854,643),9633=>array(91,-123,854,643),9634=>array(91,-123,854,643),9635=>array(91,-123,854,643),9636=>array(91,-123,854,643),9637=>array(91,-123,854,643),9638=>array(91,-123,854,643),9639=>array(91,-123,854,643),9640=>array(91,-123,854,643),9641=>array(91,-123,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-123,766,643),9651=>array(3,-123,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-123,766,643),9655=>array(3,-123,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-123,766,643),9661=>array(3,-123,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-123,766,643),9665=>array(3,-123,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-123,766,643),9671=>array(3,-123,766,643),9672=>array(3,-123,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,384,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,384,260),9696=>array(55,260,818,645),9697=>array(55,-125,818,260),9698=>array(3,-123,766,643),9699=>array(3,-123,766,643),9700=>array(3,-123,766,643),9701=>array(3,-123,766,643),9702=>array(150,227,440,516),9703=>array(91,-123,854,643),9704=>array(91,-123,854,643),9705=>array(91,-123,854,643),9706=>array(91,-123,854,643),9707=>array(91,-123,854,643),9708=>array(3,-123,766,643),9709=>array(3,-123,766,643),9710=>array(3,-123,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-123,854,643),9713=>array(91,-123,854,643),9714=>array(91,-123,854,643),9715=>array(91,-123,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-123,766,643),9721=>array(3,-123,766,643),9722=>array(3,-123,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-123,766,643),9728=>array(83,0,813,729),9729=>array(51,-2,949,360),9730=>array(49,0,848,729),9731=>array(83,-0,813,927),9732=>array(64,0,833,880),9733=>array(65,-4,832,723),9734=>array(65,-4,832,723),9735=>array(83,2,490,729),9736=>array(83,0,813,731),9737=>array(83,0,813,730),9738=>array(61,0,828,727),9739=>array(61,0,828,723),9740=>array(61,-1,610,722),9741=>array(61,0,952,723),9742=>array(68,0,1177,729),9743=>array(71,0,1180,729),9744=>array(90,0,807,729),9745=>array(89,0,808,729),9746=>array(89,0,808,729),9747=>array(75,78,457,656),9748=>array(49,0,870,933),9749=>array(74,0,822,731),9750=>array(84,0,813,731),9751=>array(84,0,813,727),9752=>array(78,0,819,729),9753=>array(83,140,813,574),9754=>array(84,113,813,569),9755=>array(84,113,813,569),9756=>array(87,104,810,569),9757=>array(72,0,537,724),9758=>array(86,103,810,569),9759=>array(72,-3,537,720),9760=>array(61,0,835,730),9761=>array(84,0,813,730),9762=>array(83,0,813,730),9763=>array(49,0,848,730),9764=>array(49,-2,620,727),9765=>array(83,0,663,731),9766=>array(83,-1,566,731),9767=>array(83,0,701,911),9768=>array(83,0,462,730),9769=>array(83,-1,813,729),9770=>array(87,0,810,730),9771=>array(83,0,814,731),9772=>array(83,0,627,731),9773=>array(83,0,813,730),9774=>array(83,0,813,730),9775=>array(83,0,813,730),9776=>array(83,0,813,729),9777=>array(83,0,814,729),9778=>array(83,0,813,729),9779=>array(83,0,813,729),9780=>array(83,0,813,729),9781=>array(83,0,813,729),9782=>array(83,0,813,729),9783=>array(83,0,813,729),9784=>array(66,-11,831,735),9785=>array(83,-73,959,804),9786=>array(83,-73,959,804),9787=>array(83,-73,959,804),9788=>array(83,0,813,730),9789=>array(358,0,814,730),9790=>array(83,0,539,730),9791=>array(85,-102,528,732),9792=>array(85,-125,647,731),9793=>array(85,-14,647,843),9794=>array(79,-14,831,720),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9800=>array(45,0,851,731),9801=>array(89,0,807,730),9802=>array(94,0,802,731),9803=>array(113,31,784,679),9804=>array(140,0,756,730),9805=>array(53,-180,843,730),9806=>array(83,52,813,653),9807=>array(34,-96,863,730),9808=>array(83,-0,813,730),9809=>array(94,0,802,730),9810=>array(86,153,810,579),9811=>array(157,0,739,730),9812=>array(98,0,798,730),9813=>array(110,0,786,730),9814=>array(167,-1,729,729),9815=>array(214,0,683,730),9816=>array(165,0,732,730),9817=>array(148,-0,748,730),9818=>array(98,0,798,730),9819=>array(110,0,786,730),9820=>array(167,-1,729,729),9821=>array(214,0,683,730),9822=>array(162,0,734,730),9823=>array(148,-0,748,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9832=>array(105,-1,791,729),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),9840=>array(84,0,664,731),9841=>array(64,0,701,731),9842=>array(84,0,813,709),9843=>array(76,16,820,731),9844=>array(76,16,820,731),9845=>array(76,16,820,731),9846=>array(76,16,820,731),9847=>array(76,16,820,731),9848=>array(76,16,820,731),9849=>array(76,16,820,731),9850=>array(76,16,820,731),9851=>array(84,0,812,704),9852=>array(83,0,814,731),9853=>array(83,0,814,731),9854=>array(83,0,814,731),9855=>array(149,1,747,731),9856=>array(73,0,797,725),9857=>array(73,0,797,725),9858=>array(73,0,797,725),9859=>array(73,0,797,725),9860=>array(73,0,797,725),9861=>array(73,0,797,725),9862=>array(83,0,813,731),9863=>array(83,0,813,731),9864=>array(83,0,813,731),9865=>array(83,0,813,731),9866=>array(83,0,813,98),9867=>array(83,0,813,98),9868=>array(83,0,813,413),9869=>array(83,0,813,413),9870=>array(83,0,813,413),9871=>array(83,0,813,413),9872=>array(168,3,728,731),9873=>array(168,3,728,731),9874=>array(52,0,844,731),9875=>array(97,-10,799,732),9876=>array(131,0,765,729),9877=>array(61,-10,479,732),9878=>array(59,-10,837,732),9879=>array(61,0,835,732),9880=>array(145,0,750,732),9881=>array(95,-17,802,727),9882=>array(128,-9,768,733),9883=>array(127,0,769,728),9884=>array(127,0,769,729),9888=>array(49,0,848,729),9889=>array(83,2,619,730),9890=>array(85,-125,919,731),9891=>array(79,-206,1023,720),9892=>array(85,-186,1109,856),9893=>array(85,-125,837,917),9894=>array(131,-14,727,869),9895=>array(101,-170,741,884),9896=>array(188,-14,650,869),9897=>array(4,133,829,596),9898=>array(187,133,651,596),9899=>array(187,133,651,596),9900=>array(247,194,591,537),9901=>array(174,194,664,537),9902=>array(41,169,797,560),9903=>array(5,194,833,536),9904=>array(103,237,757,540),9905=>array(211,42,626,698),9906=>array(85,-125,647,731),9907=>array(168,-125,646,731),9908=>array(86,-125,646,731),9909=>array(86,-125,646,731),9910=>array(59,-118,791,643),9911=>array(194,-104,595,710),9912=>array(158,-125,543,731),9920=>array(42,4,796,553),9921=>array(42,4,796,724),9922=>array(42,4,796,553),9923=>array(42,4,796,724),9954=>array(85,-14,647,843),9985=>array(11,190,803,635),9986=>array(42,141,784,588),9987=>array(11,94,803,539),9988=>array(36,119,824,613),9990=>array(42,-14,796,742),9991=>array(42,-14,796,742),9992=>array(59,21,782,708),9993=>array(64,107,773,622),9996=>array(212,0,561,742),9997=>array(21,83,802,678),9998=>array(89,75,724,710),9999=>array(26,198,819,530),10000=>array(89,75,724,710),10001=>array(43,185,757,544),10002=>array(67,209,757,520),10003=>array(150,97,667,630),10004=>array(116,87,721,631),10005=>array(126,72,711,657),10006=>array(85,31,752,698),10007=>array(118,-9,701,732),10008=>array(123,0,754,739),10009=>array(55,0,783,729),10010=>array(55,0,783,729),10011=>array(55,0,783,729),10012=>array(55,0,783,729),10013=>array(165,0,673,729),10014=>array(131,0,678,729),10015=>array(155,0,683,729),10016=>array(55,0,783,729),10017=>array(91,-13,747,744),10018=>array(41,-14,797,742),10019=>array(42,-12,796,742),10020=>array(41,-14,797,742),10021=>array(41,-13,797,743),10022=>array(42,-14,796,745),10023=>array(42,-14,796,745),10025=>array(23,-10,815,744),10026=>array(42,-14,796,742),10027=>array(23,-9,814,743),10028=>array(23,-10,815,744),10029=>array(23,-9,814,743),10030=>array(23,-9,814,743),10031=>array(23,-9,814,743),10032=>array(24,12,815,714),10033=>array(64,0,773,729),10034=>array(74,0,764,729),10035=>array(55,0,783,729),10036=>array(31,-14,787,742),10037=>array(41,-14,797,742),10038=>array(91,-14,747,742),10039=>array(41,-14,797,742),10040=>array(41,-14,797,742),10041=>array(41,-14,797,742),10042=>array(55,0,783,729),10043=>array(82,-14,756,742),10044=>array(82,-14,756,742),10045=>array(79,-14,759,742),10046=>array(79,-14,759,742),10047=>array(54,0,784,709),10048=>array(54,0,784,709),10049=>array(41,-14,797,742),10050=>array(42,-14,796,742),10051=>array(79,-14,759,742),10052=>array(89,0,749,729),10053=>array(76,0,762,729),10054=>array(63,2,773,729),10055=>array(79,-13,759,742),10056=>array(47,-13,791,730),10057=>array(47,-13,791,730),10058=>array(41,-13,797,743),10059=>array(41,-13,797,743),10061=>array(50,-10,847,738),10063=>array(60,-49,837,729),10064=>array(60,0,837,777),10065=>array(60,-49,837,729),10066=>array(60,0,837,777),10070=>array(83,-2,813,728),10072=>array(377,-240,460,760),10073=>array(336,-240,502,760),10074=>array(253,-240,585,760),10075=>array(85,395,264,729),10076=>array(59,395,237,729),10077=>array(85,395,479,729),10078=>array(59,395,453,729),10081=>array(155,-93,772,851),10082=>array(202,-17,636,742),10083=>array(163,-17,675,742),10084=>array(54,83,784,645),10085=>array(168,-1,729,729),10086=>array(62,21,724,702),10087=>array(78,169,759,564),10088=>array(196,-139,648,769),10089=>array(196,-139,648,769),10090=>array(264,-132,574,758),10091=>array(264,-132,574,758),10092=>array(215,-240,607,760),10093=>array(232,-240,623,760),10094=>array(142,-240,685,760),10095=>array(153,-240,696,760),10096=>array(167,-240,656,760),10097=>array(183,-240,672,760),10098=>array(346,-241,535,760),10099=>array(303,-241,492,760),10100=>array(175,-163,634,760),10101=>array(204,-163,663,760),10102=>array(74,-10,822,738),10103=>array(74,-10,822,738),10104=>array(74,-10,822,738),10105=>array(74,-10,822,738),10106=>array(74,-10,822,738),10107=>array(74,-10,822,738),10108=>array(74,-10,822,738),10109=>array(74,-10,822,738),10110=>array(74,-10,822,738),10111=>array(74,-10,822,738),10112=>array(4,-52,833,780),10113=>array(4,-52,833,780),10114=>array(4,-52,833,780),10115=>array(4,-52,833,780),10116=>array(4,-52,833,780),10117=>array(4,-52,833,780),10118=>array(4,-52,833,780),10119=>array(4,-52,833,780),10120=>array(4,-52,833,780),10121=>array(4,-52,833,780),10122=>array(4,-52,833,780),10123=>array(4,-52,833,780),10124=>array(4,-52,833,780),10125=>array(4,-52,833,780),10126=>array(4,-52,833,780),10127=>array(4,-52,833,780),10128=>array(4,-52,833,780),10129=>array(4,-52,833,780),10130=>array(4,-52,833,780),10131=>array(4,-52,833,780),10132=>array(57,75,789,552),10136=>array(123,55,682,614),10137=>array(57,100,789,527),10138=>array(123,13,682,572),10139=>array(57,129,789,498),10140=>array(57,57,764,570),10141=>array(57,100,789,527),10142=>array(57,100,789,527),10143=>array(57,100,789,527),10144=>array(57,100,789,527),10145=>array(57,65,811,562),10146=>array(111,94,789,533),10147=>array(111,94,789,533),10148=>array(111,-4,789,631),10149=>array(57,100,789,548),10150=>array(57,79,789,527),10151=>array(240,-7,606,634),10152=>array(57,100,789,527),10153=>array(57,75,765,552),10154=>array(57,75,765,552),10155=>array(21,12,794,586),10156=>array(21,12,794,586),10157=>array(135,0,774,574),10158=>array(135,0,774,574),10159=>array(62,49,799,574),10161=>array(62,49,799,574),10162=>array(154,-20,721,585),10163=>array(63,157,789,470),10164=>array(81,55,682,655),10165=>array(57,173,789,454),10166=>array(82,-29,682,572),10167=>array(82,55,682,655),10168=>array(57,172,789,455),10169=>array(82,-28,682,572),10170=>array(56,84,789,543),10171=>array(73,140,779,487),10172=>array(79,167,774,460),10173=>array(79,118,774,509),10174=>array(57,81,789,546),10181=>array(54,-163,352,769),10182=>array(39,-163,336,769),10208=>array(3,-233,491,807),10214=>array(86,-132,398,760),10215=>array(85,-132,398,760),10216=>array(89,-132,310,759),10217=>array(80,-132,301,759),10218=>array(89,-132,476,759),10219=>array(80,-132,467,759),10224=>array(44,0,794,732),10225=>array(43,-3,793,729),10226=>array(39,53,814,658),10227=>array(39,61,814,666),10228=>array(57,-14,1108,643),10229=>array(49,100,1376,527),10230=>array(57,100,1385,527),10231=>array(49,100,1385,527),10232=>array(49,100,1376,527),10233=>array(57,100,1385,527),10234=>array(49,100,1385,527),10235=>array(49,100,1376,527),10236=>array(57,100,1385,527),10237=>array(49,100,1376,527),10238=>array(57,100,1385,527),10239=>array(57,100,1385,527),10241=>array(146,635,293,781),10242=>array(146,358,293,504),10243=>array(146,358,293,781),10244=>array(146,82,293,228),10245=>array(146,82,293,781),10246=>array(146,82,293,504),10247=>array(146,82,293,781),10248=>array(439,635,586,781),10249=>array(146,635,586,781),10250=>array(146,358,586,781),10251=>array(146,358,586,781),10252=>array(146,82,586,781),10253=>array(146,82,586,781),10254=>array(146,82,586,781),10255=>array(146,82,586,781),10256=>array(439,358,586,504),10257=>array(146,358,586,781),10258=>array(146,358,586,504),10259=>array(146,358,586,781),10260=>array(146,82,586,504),10261=>array(146,82,586,781),10262=>array(146,82,586,504),10263=>array(146,82,586,781),10264=>array(439,358,586,781),10265=>array(146,358,586,781),10266=>array(146,358,586,781),10267=>array(146,358,586,781),10268=>array(146,82,586,781),10269=>array(146,82,586,781),10270=>array(146,82,586,781),10271=>array(146,82,586,781),10272=>array(439,82,586,228),10273=>array(146,82,586,781),10274=>array(146,82,586,504),10275=>array(146,82,586,781),10276=>array(146,82,586,228),10277=>array(146,82,586,781),10278=>array(146,82,586,504),10279=>array(146,82,586,781),10280=>array(439,82,586,781),10281=>array(146,82,586,781),10282=>array(146,82,586,781),10283=>array(146,82,586,781),10284=>array(146,82,586,781),10285=>array(146,82,586,781),10286=>array(146,82,586,781),10287=>array(146,82,586,781),10288=>array(439,82,586,504),10289=>array(146,82,586,781),10290=>array(146,82,586,504),10291=>array(146,82,586,781),10292=>array(146,82,586,504),10293=>array(146,82,586,781),10294=>array(146,82,586,504),10295=>array(146,82,586,781),10296=>array(439,82,586,781),10297=>array(146,82,586,781),10298=>array(146,82,586,781),10299=>array(146,82,586,781),10300=>array(146,82,586,781),10301=>array(146,82,586,781),10302=>array(146,82,586,781),10303=>array(146,82,586,781),10304=>array(146,-195,293,-49),10305=>array(146,-195,293,781),10306=>array(146,-195,293,504),10307=>array(146,-195,293,781),10308=>array(146,-195,293,228),10309=>array(146,-195,293,781),10310=>array(146,-195,293,504),10311=>array(146,-195,293,781),10312=>array(146,-195,586,781),10313=>array(146,-195,586,781),10314=>array(146,-195,586,781),10315=>array(146,-195,586,781),10316=>array(146,-195,586,781),10317=>array(146,-195,586,781),10318=>array(146,-195,586,781),10319=>array(146,-195,586,781),10320=>array(146,-195,586,504),10321=>array(146,-195,586,781),10322=>array(146,-195,586,504),10323=>array(146,-195,586,781),10324=>array(146,-195,586,504),10325=>array(146,-195,586,781),10326=>array(146,-195,586,504),10327=>array(146,-195,586,781),10328=>array(146,-195,586,781),10329=>array(146,-195,586,781),10330=>array(146,-195,586,781),10331=>array(146,-195,586,781),10332=>array(146,-195,586,781),10333=>array(146,-195,586,781),10334=>array(146,-195,586,781),10335=>array(146,-195,586,781),10336=>array(146,-195,586,228),10337=>array(146,-195,586,781),10338=>array(146,-195,586,504),10339=>array(146,-195,586,781),10340=>array(146,-195,586,228),10341=>array(146,-195,586,781),10342=>array(146,-195,586,504),10343=>array(146,-195,586,781),10344=>array(146,-195,586,781),10345=>array(146,-195,586,781),10346=>array(146,-195,586,781),10347=>array(146,-195,586,781),10348=>array(146,-195,586,781),10349=>array(146,-195,586,781),10350=>array(146,-195,586,781),10351=>array(146,-195,586,781),10352=>array(146,-195,586,504),10353=>array(146,-195,586,781),10354=>array(146,-195,586,504),10355=>array(146,-195,586,781),10356=>array(146,-195,586,504),10357=>array(146,-195,586,781),10358=>array(146,-195,586,504),10359=>array(146,-195,586,781),10360=>array(146,-195,586,781),10361=>array(146,-195,586,781),10362=>array(146,-195,586,781),10363=>array(146,-195,586,781),10364=>array(146,-195,586,781),10365=>array(146,-195,586,781),10366=>array(146,-195,586,781),10367=>array(146,-195,586,781),10368=>array(439,-195,586,-49),10369=>array(146,-195,586,781),10370=>array(146,-195,586,504),10371=>array(146,-195,586,781),10372=>array(146,-195,586,228),10373=>array(146,-195,586,781),10374=>array(146,-195,586,504),10375=>array(146,-195,586,781),10376=>array(439,-195,586,781),10377=>array(146,-195,586,781),10378=>array(146,-195,586,781),10379=>array(146,-195,586,781),10380=>array(146,-195,586,781),10381=>array(146,-195,586,781),10382=>array(146,-195,586,781),10383=>array(146,-195,586,781),10384=>array(439,-195,586,504),10385=>array(146,-195,586,781),10386=>array(146,-195,586,504),10387=>array(146,-195,586,781),10388=>array(146,-195,586,504),10389=>array(146,-195,586,781),10390=>array(146,-195,586,504),10391=>array(146,-195,586,781),10392=>array(439,-195,586,781),10393=>array(146,-195,586,781),10394=>array(146,-195,586,781),10395=>array(146,-195,586,781),10396=>array(146,-195,586,781),10397=>array(146,-195,586,781),10398=>array(146,-195,586,781),10399=>array(146,-195,586,781),10400=>array(439,-195,586,228),10401=>array(146,-195,586,781),10402=>array(146,-195,586,504),10403=>array(146,-195,586,781),10404=>array(146,-195,586,228),10405=>array(146,-195,586,781),10406=>array(146,-195,586,504),10407=>array(146,-195,586,781),10408=>array(439,-195,586,781),10409=>array(146,-195,586,781),10410=>array(146,-195,586,781),10411=>array(146,-195,586,781),10412=>array(146,-195,586,781),10413=>array(146,-195,586,781),10414=>array(146,-195,586,781),10415=>array(146,-195,586,781),10416=>array(439,-195,586,504),10417=>array(146,-195,586,781),10418=>array(146,-195,586,504),10419=>array(146,-195,586,781),10420=>array(146,-195,586,504),10421=>array(146,-195,586,781),10422=>array(146,-195,586,504),10423=>array(146,-195,586,781),10424=>array(439,-195,586,781),10425=>array(146,-195,586,781),10426=>array(146,-195,586,781),10427=>array(146,-195,586,781),10428=>array(146,-195,586,781),10429=>array(146,-195,586,781),10430=>array(146,-195,586,781),10431=>array(146,-195,586,781),10432=>array(146,-195,586,-49),10433=>array(146,-195,586,781),10434=>array(146,-195,586,504),10435=>array(146,-195,586,781),10436=>array(146,-195,586,228),10437=>array(146,-195,586,781),10438=>array(146,-195,586,504),10439=>array(146,-195,586,781),10440=>array(146,-195,586,781),10441=>array(146,-195,586,781),10442=>array(146,-195,586,781),10443=>array(146,-195,586,781),10444=>array(146,-195,586,781),10445=>array(146,-195,586,781),10446=>array(146,-195,586,781),10447=>array(146,-195,586,781),10448=>array(146,-195,586,504),10449=>array(146,-195,586,781),10450=>array(146,-195,586,504),10451=>array(146,-195,586,781),10452=>array(146,-195,586,504),10453=>array(146,-195,586,781),10454=>array(146,-195,586,504),10455=>array(146,-195,586,781),10456=>array(146,-195,586,781),10457=>array(146,-195,586,781),10458=>array(146,-195,586,781),10459=>array(146,-195,586,781),10460=>array(146,-195,586,781),10461=>array(146,-195,586,781),10462=>array(146,-195,586,781),10463=>array(146,-195,586,781),10464=>array(146,-195,586,228),10465=>array(146,-195,586,781),10466=>array(146,-195,586,504),10467=>array(146,-195,586,781),10468=>array(146,-195,586,228),10469=>array(146,-195,586,781),10470=>array(146,-195,586,504),10471=>array(146,-195,586,781),10472=>array(146,-195,586,781),10473=>array(146,-195,586,781),10474=>array(146,-195,586,781),10475=>array(146,-195,586,781),10476=>array(146,-195,586,781),10477=>array(146,-195,586,781),10478=>array(146,-195,586,781),10479=>array(146,-195,586,781),10480=>array(146,-195,586,504),10481=>array(146,-195,586,781),10482=>array(146,-195,586,504),10483=>array(146,-195,586,781),10484=>array(146,-195,586,504),10485=>array(146,-195,586,781),10486=>array(146,-195,586,504),10487=>array(146,-195,586,781),10488=>array(146,-195,586,781),10489=>array(146,-195,586,781),10490=>array(146,-195,586,781),10491=>array(146,-195,586,781),10492=>array(146,-195,586,781),10493=>array(146,-195,586,781),10494=>array(146,-195,586,781),10495=>array(146,-195,586,781),10502=>array(49,100,781,527),10503=>array(57,100,789,527),10506=>array(125,0,713,732),10507=>array(125,-3,713,729),10560=>array(39,63,644,838),10561=>array(39,63,644,838),10627=>array(125,-163,609,760),10628=>array(125,-163,609,760),10702=>array(106,-226,732,747),10703=>array(106,15,894,612),10704=>array(106,15,894,612),10705=>array(106,-30,894,657),10706=>array(106,-30,894,657),10707=>array(106,-30,894,657),10708=>array(106,-30,894,657),10709=>array(106,-30,894,657),10731=>array(3,-233,491,807),10746=>array(106,0,732,627),10747=>array(106,0,732,627),10752=>array(28,-198,972,748),10753=>array(28,-198,972,748),10754=>array(28,-198,972,748),10764=>array(57,-212,1268,757),10765=>array(57,-212,464,757),10766=>array(57,-212,464,757),10767=>array(57,-212,464,757),10768=>array(57,-212,464,757),10769=>array(57,-212,522,757),10770=>array(57,-212,464,757),10771=>array(57,-212,464,757),10772=>array(57,-212,555,757),10773=>array(57,-212,464,757),10774=>array(57,-212,464,757),10775=>array(-32,-212,553,757),10776=>array(57,-212,464,757),10777=>array(57,-212,464,757),10778=>array(57,-212,464,757),10779=>array(57,-212,469,872),10780=>array(52,-327,464,757),10799=>array(137,31,701,596),10858=>array(106,228,732,552),10859=>array(106,78,732,552),10877=>array(106,-123,732,581),10878=>array(106,-123,732,581),10879=>array(106,-123,733,581),10880=>array(106,-123,732,581),10881=>array(106,-123,732,644),10882=>array(106,-123,732,644),10883=>array(106,-123,733,759),10884=>array(106,-123,732,756),10885=>array(106,-132,732,663),10886=>array(106,-132,732,663),10887=>array(106,-121,732,582),10888=>array(106,-121,732,582),10889=>array(106,-204,732,663),10890=>array(106,-204,732,663),10891=>array(106,-311,732,791),10892=>array(106,-311,732,791),10893=>array(106,-124,732,663),10894=>array(106,-124,732,663),10895=>array(106,-241,732,756),10896=>array(106,-241,732,756),10897=>array(106,-229,732,730),10898=>array(106,-229,732,730),10899=>array(106,-224,732,741),10900=>array(106,-224,732,741),10901=>array(106,-61,732,644),10902=>array(106,-61,732,644),10903=>array(106,-61,733,644),10904=>array(106,-61,732,644),10905=>array(106,-36,732,685),10906=>array(106,-36,732,685),10907=>array(106,-31,732,725),10908=>array(106,-31,732,725),10909=>array(106,8,732,645),10910=>array(106,23,732,645),10911=>array(106,-176,732,729),10912=>array(106,-176,732,729),10926=>array(106,50,732,601),10927=>array(106,-24,732,667),10928=>array(106,-24,732,667),10929=>array(106,-145,732,667),10930=>array(106,-145,732,667),10931=>array(106,-121,732,662),10932=>array(106,-121,732,662),10933=>array(106,-195,732,662),10934=>array(106,-195,732,662),10935=>array(106,-191,732,693),10936=>array(106,-191,732,693),10937=>array(106,-259,732,693),10938=>array(106,-259,732,693),11001=>array(106,-171,732,585),11002=>array(106,-171,732,585),11008=>array(88,-27,703,587),11009=>array(141,-27,755,587),11010=>array(88,25,703,640),11011=>array(141,25,755,640),11012=>array(27,65,789,562),11013=>array(27,65,781,562),11014=>array(171,0,667,754),11015=>array(171,-25,667,729),11016=>array(88,-27,703,587),11017=>array(141,-27,755,587),11018=>array(88,25,703,640),11019=>array(141,25,755,640),11020=>array(27,65,789,562),11021=>array(171,-25,667,754),11022=>array(57,-3,790,355),11023=>array(57,272,790,630),11024=>array(35,-3,768,355),11025=>array(35,272,768,630),11026=>array(91,-123,854,643),11027=>array(91,-123,854,643),11028=>array(91,-123,854,643),11029=>array(91,-123,854,643),11030=>array(3,-123,766,643),11031=>array(3,-123,766,643),11032=>array(3,-123,766,643),11033=>array(3,-123,766,643),11034=>array(91,-123,854,643),11039=>array(18,-26,852,767),11040=>array(18,-26,852,767),11041=>array(73,-91,800,748),11042=>array(73,-91,800,748),11043=>array(17,-35,856,692),11044=>array(55,-250,1064,770),11091=>array(38,-47,832,788),11092=>array(38,-47,832,788),11360=>array(5,0,552,729),11361=>array(5,0,271,760),11362=>array(-20,0,552,729),11363=>array(5,0,569,729),11364=>array(98,-200,666,729),11365=>array(35,-46,576,592),11366=>array(-12,-93,384,822),11367=>array(98,-157,752,729),11368=>array(91,-138,639,760),11369=>array(98,-157,677,729),11370=>array(91,-138,576,760),11371=>array(45,-157,738,729),11372=>array(43,-138,572,547),11373=>array(56,-14,683,743),11374=>array(98,-200,765,729),11375=>array(8,0,676,729),11376=>array(56,-14,683,743),11377=>array(30,0,734,560),11378=>array(33,0,1128,742),11379=>array(42,0,961,560),11380=>array(51,0,562,587),11381=>array(98,0,555,729),11382=>array(94,0,477,547),11383=>array(55,-12,602,551),11385=>array(0,-13,320,760),11386=>array(55,-14,557,560),11387=>array(48,0,400,547),11388=>array(-11,-117,116,425),11389=>array(5,326,426,734),11390=>array(66,-242,598,742),11391=>array(45,-242,640,729),11520=>array(60,-63,544,547),11521=>array(24,-235,556,546),11522=>array(39,-235,535,546),11523=>array(62,-10,572,807),11524=>array(51,-235,537,546),11525=>array(39,-236,862,546),11526=>array(0,-8,575,816),11527=>array(53,0,900,546),11528=>array(69,0,542,546),11529=>array(51,-235,556,816),11530=>array(39,0,903,546),11531=>array(53,-8,595,816),11532=>array(39,0,544,816),11533=>array(51,0,887,546),11534=>array(51,0,556,546),11535=>array(69,-235,767,816),11536=>array(51,0,880,816),11537=>array(51,0,545,816),11538=>array(50,-235,536,546),11539=>array(51,-235,884,661),11540=>array(60,-235,892,546),11541=>array(49,-235,784,816),11542=>array(39,0,545,546),11543=>array(51,-235,556,547),11544=>array(51,-235,551,546),11545=>array(39,-235,541,816),11546=>array(42,-235,532,547),11547=>array(60,-9,596,816),11548=>array(39,-235,870,547),11549=>array(29,-235,545,546),11550=>array(47,-235,547,546),11551=>array(34,-235,547,567),11552=>array(39,0,875,546),11553=>array(49,-235,544,816),11554=>array(60,0,538,626),11555=>array(61,-235,553,816),11556=>array(51,-235,603,546),11557=>array(60,-8,841,816),11568=>array(55,-14,591,380),11569=>array(56,-14,832,742),11570=>array(56,-14,832,742),11571=>array(31,0,651,729),11572=>array(33,0,652,729),11573=>array(31,0,604,729),11574=>array(73,0,488,729),11575=>array(8,0,676,729),11576=>array(8,0,676,729),11577=>array(98,0,568,729),11578=>array(64,0,534,729),11579=>array(73,-14,609,742),11580=>array(107,0,811,729),11581=>array(45,0,665,729),11582=>array(73,0,437,729),11583=>array(45,0,665,729),11584=>array(56,-14,832,742),11585=>array(56,-52,832,781),11586=>array(73,0,197,729),11587=>array(20,0,610,729),11588=>array(98,0,654,729),11589=>array(30,0,654,729),11590=>array(73,0,454,729),11591=>array(45,0,629,729),11592=>array(73,301,571,426),11593=>array(98,0,568,729),11594=>array(54,0,448,729),11595=>array(54,-15,899,742),11596=>array(54,0,725,729),11597=>array(98,0,650,729),11598=>array(100,0,566,729),11599=>array(98,0,197,729),11600=>array(54,0,725,729),11601=>array(98,0,198,729),11602=>array(78,-14,705,729),11603=>array(48,-14,584,742),11604=>array(56,-14,832,742),11605=>array(56,-54,832,742),11606=>array(98,0,654,729),11607=>array(98,0,222,729),11608=>array(73,0,676,729),11609=>array(56,-14,832,742),11610=>array(56,-14,832,780),11611=>array(56,-14,681,742),11612=>array(49,0,719,729),11613=>array(30,0,654,729),11614=>array(56,-14,681,742),11615=>array(98,0,568,729),11616=>array(8,0,676,729),11617=>array(98,0,654,729),11618=>array(98,0,559,729),11619=>array(56,0,732,729),11620=>array(98,0,495,729),11621=>array(56,0,732,729),11631=>array(26,522,489,729),11800=>array(70,-14,459,728),11806=>array(106,78,732,399),11810=>array(86,403,293,760),11811=>array(97,403,304,760),11812=>array(86,-132,293,225),11813=>array(97,-132,304,225),11822=>array(72,0,461,742),19904=>array(83,-158,813,729),19905=>array(83,-158,813,729),19906=>array(83,-158,813,729),19907=>array(83,-158,813,729),19908=>array(83,-158,813,729),19909=>array(83,-158,813,729),19910=>array(83,-158,813,729),19911=>array(83,-158,813,729),19912=>array(83,-158,813,729),19913=>array(83,-158,814,729),19914=>array(83,-158,813,729),19915=>array(83,-158,813,729),19916=>array(83,-158,813,729),19917=>array(83,-158,813,729),19918=>array(83,-158,813,729),19919=>array(83,-158,813,729),19920=>array(83,-158,814,729),19921=>array(83,-158,813,729),19922=>array(83,-158,814,729),19923=>array(83,-158,813,729),19924=>array(83,-158,813,729),19925=>array(83,-158,813,729),19926=>array(83,-158,813,729),19927=>array(83,-158,813,729),19928=>array(83,-158,813,729),19929=>array(83,-158,813,729),19930=>array(83,-158,813,729),19931=>array(83,-158,814,729),19932=>array(83,-158,813,729),19933=>array(83,-158,813,729),19934=>array(83,-158,814,729),19935=>array(83,-158,813,729),19936=>array(83,-158,813,729),19937=>array(83,-158,813,729),19938=>array(83,-158,813,729),19939=>array(83,-158,813,729),19940=>array(83,-158,813,729),19941=>array(83,-158,814,729),19942=>array(83,-158,813,729),19943=>array(83,-158,813,729),19944=>array(83,-158,814,729),19945=>array(83,-158,813,729),19946=>array(83,-158,814,729),19947=>array(83,-158,813,729),19948=>array(83,-158,814,729),19949=>array(83,-158,813,729),19950=>array(83,-158,814,729),19951=>array(83,-158,813,729),19952=>array(83,-158,814,729),19953=>array(83,-158,813,729),19954=>array(83,-158,813,729),19955=>array(83,-158,813,729),19956=>array(83,-158,813,729),19957=>array(83,-158,814,729),19958=>array(83,-158,813,729),19959=>array(83,-158,813,729),19960=>array(83,-158,813,729),19961=>array(83,-158,814,729),19962=>array(83,-158,813,729),19963=>array(83,-158,814,729),19964=>array(83,-158,814,729),19965=>array(83,-158,813,729),19966=>array(83,-158,813,729),19967=>array(83,-158,813,729),42192=>array(98,0,615,729),42193=>array(98,0,569,729),42194=>array(34,0,505,729),42195=>array(98,0,711,729),42196=>array(-3,0,614,729),42197=>array(-3,0,614,729),42198=>array(56,-14,693,742),42199=>array(98,0,677,729),42200=>array(-21,0,558,729),42201=>array(0,-14,414,729),42202=>array(56,-14,644,742),42203=>array(56,-14,644,742),42204=>array(45,0,640,729),42205=>array(98,0,517,729),42206=>array(98,0,517,729),42207=>array(98,0,765,729),42208=>array(98,0,650,729),42209=>array(98,0,552,729),42210=>array(66,-14,579,742),42211=>array(98,0,666,729),42212=>array(29,0,597,729),42213=>array(8,0,676,729),42214=>array(8,0,676,729),42215=>array(98,0,654,729),42216=>array(80,-14,716,742),42217=>array(98,0,512,743),42218=>array(33,0,956,729),42219=>array(30,0,654,729),42220=>array(-2,0,613,729),42221=>array(71,0,588,729),42222=>array(8,0,676,729),42223=>array(8,0,676,729),42224=>array(98,0,568,729),42225=>array(64,0,534,729),42226=>array(98,0,197,729),42227=>array(56,-14,731,742),42228=>array(87,-14,645,729),42229=>array(87,0,645,743),42230=>array(4,0,458,729),42231=>array(56,0,669,729),42232=>array(85,0,214,155),42233=>array(71,-156,214,155),42234=>array(85,0,511,155),42235=>array(85,-156,511,155),42236=>array(71,-156,214,517),42237=>array(85,0,214,517),42238=>array(85,0,502,354),42239=>array(85,172,502,454),42564=>array(56,-14,569,742),42565=>array(49,-14,467,560),42566=>array(98,0,347,729),42567=>array(81,0,304,547),42572=>array(58,-14,1122,645),42573=>array(74,-14,954,471),42576=>array(29,0,931,729),42577=>array(30,0,817,560),42580=>array(56,-14,977,742),42581=>array(55,-14,748,560),42582=>array(103,0,968,729),42583=>array(94,-14,752,560),42594=>array(49,-157,1004,729),42595=>array(52,-138,863,547),42596=>array(41,0,1008,729),42597=>array(37,0,852,547),42598=>array(98,0,1120,729),42599=>array(91,0,959,547),42600=>array(56,-14,731,742),42601=>array(55,-14,557,560),42602=>array(56,-14,799,742),42603=>array(55,-14,658,560),42604=>array(56,-14,1302,742),42605=>array(55,-14,964,560),42606=>array(28,-208,851,743),42634=>array(-3,-200,758,729),42635=>array(29,-208,660,547),42636=>array(-3,0,614,729),42637=>array(29,0,553,547),42644=>array(85,0,587,729),42645=>array(91,0,549,760),42760=>array(104,0,389,668),42761=>array(104,0,389,668),42762=>array(104,0,389,668),42763=>array(104,0,389,668),42764=>array(104,0,389,668),42765=>array(104,0,389,668),42766=>array(104,0,389,668),42767=>array(104,0,389,668),42768=>array(104,0,389,668),42769=>array(104,0,389,668),42770=>array(104,0,389,668),42771=>array(104,0,389,668),42772=>array(104,0,389,668),42773=>array(104,0,389,668),42774=>array(104,0,389,668),42779=>array(50,326,319,736),42780=>array(50,324,319,734),42781=>array(95,326,158,734),42782=>array(95,326,158,734),42783=>array(95,0,158,408),42786=>array(67,0,350,729),42787=>array(67,0,321,547),42788=>array(56,224,411,742),42789=>array(56,42,411,560),42790=>array(98,-200,654,729),42791=>array(91,-208,549,760),42792=>array(-3,-213,819,729),42793=>array(27,-213,650,702),42794=>array(80,-14,560,742),42795=>array(65,-200,473,561),42800=>array(91,0,437,547),42801=>array(54,-14,472,560),42802=>array(8,0,1241,729),42803=>array(60,-14,894,560),42804=>array(8,-14,1147,742),42805=>array(60,-14,935,560),42806=>array(8,-14,1055,729),42807=>array(60,-14,890,560),42808=>array(8,0,963,729),42809=>array(60,-14,788,560),42810=>array(8,0,963,729),42811=>array(60,-14,788,560),42812=>array(8,-208,951,729),42813=>array(60,-208,788,560),42814=>array(56,-14,644,742),42815=>array(62,-14,495,560),42816=>array(5,0,677,729),42817=>array(7,0,580,760),42822=>array(98,0,675,729),42823=>array(94,0,298,760),42824=>array(41,0,576,729),42825=>array(59,0,368,760),42826=>array(5,-14,802,742),42827=>array(5,-14,694,560),42830=>array(56,-14,1302,742),42831=>array(55,-14,964,560),42832=>array(5,0,569,729),42833=>array(-2,-208,580,560),42834=>array(24,0,700,729),42835=>array(24,-208,720,560),42838=>array(56,-178,731,742),42839=>array(55,-208,637,560),42852=>array(5,0,569,729),42853=>array(-2,-208,580,760),42854=>array(5,0,569,729),42855=>array(-2,-208,580,760),42880=>array(5,0,459,729),42881=>array(94,-208,184,560),42882=>array(98,-208,637,742),42883=>array(91,-208,549,560),42889=>array(117,0,220,517),42890=>array(78,161,298,380),42891=>array(151,235,250,729),42892=>array(96,458,179,729),42893=>array(85,0,587,729),42894=>array(38,-208,416,760),42896=>array(98,-157,733,729),42897=>array(91,-138,621,560),42912=>array(2,-14,778,742),42913=>array(2,-208,633,560),42914=>array(2,0,677,729),42915=>array(2,0,577,760),42916=>array(2,0,746,729),42917=>array(2,0,633,560),42918=>array(2,0,693,729),42919=>array(2,0,411,560),42920=>array(2,-14,633,742),42921=>array(2,-14,519,560),42922=>array(-51,0,703,729),43002=>array(91,0,824,547),43003=>array(58,0,477,729),43004=>array(34,0,505,729),43005=>array(98,0,765,729),43006=>array(98,0,197,928),43007=>array(33,0,1167,729),61184=>array(95,602,323,668),61185=>array(69,451,342,668),61186=>array(54,301,361,668),61187=>array(47,150,368,668),61188=>array(44,0,372,668),61189=>array(69,451,342,668),61190=>array(95,451,323,518),61191=>array(69,301,342,518),61192=>array(54,150,361,518),61193=>array(47,0,368,518),61194=>array(54,301,361,668),61195=>array(69,301,342,518),61196=>array(95,301,323,367),61197=>array(69,150,342,367),61198=>array(54,0,361,367),61199=>array(47,150,368,668),61200=>array(54,150,361,518),61201=>array(69,150,342,367),61202=>array(95,150,323,217),61203=>array(69,0,342,217),61204=>array(44,0,372,668),61205=>array(47,0,368,518),61206=>array(54,0,361,367),61207=>array(69,0,342,217),61208=>array(95,0,323,66),61209=>array(104,0,171,668),61440=>array(73,0,903,732),61441=>array(73,0,903,732),61442=>array(73,0,903,732),61443=>array(73,0,903,732),62464=>array(54,-15,526,828),62465=>array(54,-15,526,828),62466=>array(54,-15,570,837),62467=>array(54,0,835,837),62468=>array(54,-15,526,837),62469=>array(54,-15,526,837),62470=>array(54,-15,599,837),62471=>array(54,-15,828,837),62472=>array(54,0,501,837),62473=>array(54,-15,526,828),62474=>array(54,0,1115,837),62475=>array(54,-15,525,837),62476=>array(63,-15,536,828),62477=>array(54,0,815,837),62478=>array(54,-15,526,828),62479=>array(54,-15,526,844),62480=>array(54,0,860,837),62481=>array(63,-15,536,828),62482=>array(54,-15,677,837),62483=>array(24,-15,519,837),62484=>array(54,-15,818,837),62485=>array(54,-15,526,828),62486=>array(54,-15,841,837),62487=>array(54,-15,525,829),62488=>array(54,-15,525,837),62489=>array(64,0,536,837),62490=>array(55,-15,595,828),62491=>array(54,-15,525,828),62492=>array(64,-15,536,837),62493=>array(54,-15,545,828),62494=>array(63,-15,536,828),62495=>array(24,-15,492,837),62496=>array(54,-15,526,837),62497=>array(59,-15,530,837),62498=>array(54,-79,526,837),62499=>array(54,-15,525,838),62500=>array(54,-15,532,838),62501=>array(54,-15,594,837),62502=>array(54,-15,901,838),62504=>array(60,-235,872,816),62505=>array(49,-230,759,853),62506=>array(49,-15,459,765),62507=>array(49,-15,459,777),62508=>array(49,-15,459,875),62509=>array(49,-15,459,818),62510=>array(49,-15,459,887),62511=>array(49,-15,459,809),62512=>array(49,-236,449,765),62513=>array(49,-236,449,799),62514=>array(49,-236,449,901),62515=>array(49,-236,449,809),62516=>array(49,0,469,765),62517=>array(49,0,469,799),62518=>array(49,0,469,809),62519=>array(49,-0,737,765),62520=>array(49,-0,737,777),62521=>array(49,-0,737,895),62522=>array(49,-0,737,799),62523=>array(49,-0,737,809),62524=>array(29,-236,488,765),62525=>array(29,-236,488,777),62526=>array(29,-236,488,904),62527=>array(29,-236,488,799),62528=>array(29,-236,488,809),62529=>array(29,-236,488,852),63173=>array(55,-14,557,760),64256=>array(23,0,708,760),64257=>array(23,0,536,760),64258=>array(23,0,536,760),64259=>array(23,0,873,760),64260=>array(23,0,873,760),64261=>array(23,0,662,760),64262=>array(54,-14,837,742),64275=>array(83,-14,1111,760),64276=>array(85,-14,1111,760),64277=>array(85,-208,1111,760),64278=>array(85,-208,1111,760),64279=>array(85,-208,1451,760),64285=>array(66,44,157,547),64286=>array(167,625,473,765),64287=>array(36,44,329,547),64288=>array(38,0,562,547),64289=>array(85,0,772,547),64290=>array(43,0,717,547),64291=>array(91,0,764,547),64292=>array(43,0,716,547),64293=>array(43,0,716,760),64294=>array(91,0,764,547),64295=>array(43,0,716,547),64296=>array(47,-4,716,547),64297=>array(106,272,732,627),64298=>array(43,0,666,698),64299=>array(38,0,666,698),64300=>array(43,0,666,698),64301=>array(43,0,666,698),64302=>array(91,-159,578,547),64303=>array(91,-193,578,547),64304=>array(91,-159,578,547),64305=>array(43,0,535,547),64306=>array(43,-5,383,547),64307=>array(43,0,511,547),64308=>array(91,0,563,547),64309=>array(43,0,265,547),64310=>array(43,0,363,547),64312=>array(90,-14,593,552),64313=>array(43,204,264,547),64314=>array(43,-208,446,547),64315=>array(43,0,474,547),64316=>array(43,0,492,729),64318=>array(43,0,588,555),64320=>array(43,0,309,547),64321=>array(90,-14,593,547),64323=>array(91,-208,549,547),64324=>array(91,0,569,547),64326=>array(43,0,502,547),64327=>array(91,-208,633,546),64328=>array(43,0,474,547),64329=>array(43,0,666,547),64330=>array(10,-4,566,547),64331=>array(91,0,182,698),64332=>array(43,0,535,698),64333=>array(43,0,474,698),64334=>array(91,0,569,698),64335=>array(43,0,571,760),64338=>array(63,-244,865,327),64339=>array(63,-244,992,327),64340=>array(-10,-244,191,293),64341=>array(-10,-244,312,293),64342=>array(63,-244,865,327),64343=>array(63,-244,992,327),64344=>array(-10,-244,244,293),64345=>array(-10,-244,312,293),64346=>array(63,-244,865,327),64347=>array(63,-244,992,327),64348=>array(-10,-244,244,293),64349=>array(-10,-244,312,293),64350=>array(63,-10,865,513),64351=>array(63,-10,992,513),64352=>array(-10,0,191,610),64353=>array(-10,0,312,610),64354=>array(63,-10,865,513),64355=>array(63,-10,992,513),64356=>array(-10,0,244,610),64357=>array(-10,0,312,610),64358=>array(63,-10,865,575),64359=>array(63,-10,992,575),64360=>array(-10,0,273,672),64361=>array(-10,0,312,672),64362=>array(63,-45,952,757),64363=>array(63,-44,1045,659),64364=>array(-10,0,406,757),64365=>array(-10,0,516,684),64366=>array(63,-45,952,757),64367=>array(63,-44,1045,659),64368=>array(-10,0,406,757),64369=>array(-10,0,516,684),64370=>array(77,-244,645,425),64371=>array(77,-244,655,425),64372=>array(-10,-220,545,398),64373=>array(-10,-220,655,398),64374=>array(77,-244,645,425),64375=>array(77,-244,655,425),64376=>array(-10,-98,545,398),64377=>array(-10,-98,655,398),64378=>array(77,-244,645,425),64379=>array(77,-244,655,425),64380=>array(-10,-220,545,398),64381=>array(-10,-220,655,398),64382=>array(77,-244,645,425),64383=>array(77,-244,655,425),64384=>array(-10,-220,545,398),64385=>array(-10,-220,655,398),64386=>array(61,-146,388,415),64387=>array(61,-146,535,415),64388=>array(61,-19,388,586),64389=>array(61,-19,535,586),64390=>array(61,-19,388,708),64391=>array(61,-19,535,708),64392=>array(61,-19,388,746),64393=>array(61,-19,535,746),64394=>array(-42,-244,439,586),64395=>array(-42,-244,562,586),64396=>array(-42,-244,469,648),64397=>array(-42,-244,562,648),64398=>array(63,-43,895,760),64399=>array(63,-43,981,760),64400=>array(-10,0,476,760),64401=>array(-10,0,562,760),64402=>array(63,-43,895,896),64403=>array(63,-43,981,896),64404=>array(-10,0,476,896),64405=>array(-10,0,562,896),64406=>array(63,-293,895,896),64407=>array(63,-293,981,896),64408=>array(-10,-269,476,896),64409=>array(-10,-269,562,896),64410=>array(63,-43,895,903),64411=>array(63,-43,981,903),64412=>array(-10,0,476,903),64413=>array(-10,0,562,903),64414=>array(72,-162,660,366),64415=>array(72,-244,771,284),64416=>array(72,-162,660,636),64417=>array(72,-244,771,514),64418=>array(-10,0,273,672),64419=>array(-10,0,312,672),64426=>array(70,-33,638,487),64427=>array(70,-244,642,333),64428=>array(-10,-33,467,487),64429=>array(-10,-244,471,333),64467=>array(70,-27,722,854),64468=>array(70,-27,853,854),64469=>array(-10,0,476,928),64470=>array(-10,0,562,928),64473=>array(-42,-244,406,556),64474=>array(-42,-244,526,556),64488=>array(-10,0,191,293),64489=>array(-10,0,312,293),64508=>array(63,-131,719,411),64509=>array(63,-133,843,251),64510=>array(-10,-146,244,293),64511=>array(-10,-146,312,293),65056=>array(-445,752,0,929),65057=>array(0,752,445,929),65058=>array(-354,756,0,894),65059=>array(0,756,354,894),65136=>array(4,591,289,825),65137=>array(-10,0,303,825),65138=>array(4,591,289,874),65139=>array(51,0,271,177),65140=>array(4,-239,289,-5),65142=>array(4,591,289,708),65143=>array(-10,0,303,708),65144=>array(4,590,289,874),65145=>array(-10,0,303,874),65146=>array(4,-137,289,-20),65147=>array(-10,-137,303,90),65148=>array(-6,599,299,869),65149=>array(-10,0,303,869),65150=>array(12,610,279,878),65151=>array(-10,0,303,878),65152=>array(80,42,390,483),65153=>array(-37,0,315,939),65154=>array(-37,0,315,939),65155=>array(53,0,220,1028),65156=>array(53,0,314,1028),65157=>array(-42,-244,406,588),65158=>array(-42,-244,526,588),65159=>array(53,-244,220,760),65160=>array(53,-244,314,760),65161=>array(63,-131,719,588),65162=>array(63,-133,843,466),65163=>array(-10,0,227,613),65164=>array(-10,0,312,613),65165=>array(94,0,184,760),65166=>array(94,0,314,760),65167=>array(63,-171,865,327),65168=>array(63,-171,992,327),65169=>array(-10,-146,191,293),65170=>array(-10,-146,312,293),65171=>array(68,-28,453,513),65172=>array(71,0,546,513),65173=>array(63,-10,865,391),65174=>array(63,-10,992,391),65175=>array(-10,0,244,488),65176=>array(-10,0,312,488),65177=>array(63,-10,865,513),65178=>array(63,-10,992,513),65179=>array(-10,0,244,610),65180=>array(-10,0,312,610),65181=>array(77,-244,645,425),65182=>array(77,-244,655,425),65183=>array(-10,-146,545,398),65184=>array(-10,-146,655,398),65185=>array(77,-244,645,425),65186=>array(77,-244,655,425),65187=>array(-10,0,545,398),65188=>array(-10,0,655,398),65189=>array(77,-244,645,586),65190=>array(77,-244,655,586),65191=>array(-10,0,545,537),65192=>array(-10,0,655,537),65193=>array(61,-19,388,415),65194=>array(61,-19,535,415),65195=>array(61,-19,388,586),65196=>array(61,-19,535,586),65197=>array(-42,-244,423,269),65198=>array(-42,-244,562,269),65199=>array(-42,-244,423,464),65200=>array(-42,-244,562,464),65201=>array(63,-244,1138,366),65202=>array(63,-244,1285,366),65203=>array(-10,-14,755,366),65204=>array(-10,-14,902,366),65205=>array(63,-244,1138,586),65206=>array(63,-244,1285,586),65207=>array(-10,-14,755,586),65208=>array(-10,-14,902,586),65209=>array(63,-244,1134,362),65210=>array(63,-244,1235,362),65211=>array(-10,0,774,362),65212=>array(-10,0,877,362),65213=>array(63,-244,1134,464),65214=>array(63,-244,1235,464),65215=>array(-10,0,774,464),65216=>array(-10,0,877,464),65217=>array(70,0,857,760),65218=>array(70,0,959,760),65219=>array(-10,0,729,760),65220=>array(-10,0,830,760),65221=>array(70,0,857,760),65222=>array(70,0,959,760),65223=>array(-10,0,729,760),65224=>array(-10,0,830,760),65225=>array(57,-244,587,521),65226=>array(57,-244,587,382),65227=>array(-10,0,496,521),65228=>array(-10,0,492,382),65229=>array(57,-244,587,659),65230=>array(57,-244,587,537),65231=>array(-10,0,496,659),65232=>array(-10,0,492,537),65233=>array(63,-45,952,635),65234=>array(63,-44,1045,537),65235=>array(-10,0,406,635),65236=>array(-10,0,516,562),65237=>array(52,-215,701,635),65238=>array(52,-244,844,500),65239=>array(-10,0,406,635),65240=>array(-10,0,516,562),65241=>array(70,-27,722,760),65242=>array(70,-27,853,760),65243=>array(-10,0,476,760),65244=>array(-10,0,562,760),65245=>array(70,-152,637,760),65246=>array(70,-152,767,760),65247=>array(-10,0,210,760),65248=>array(-10,0,341,760),65249=>array(68,-240,546,369),65250=>array(68,-240,675,307),65251=>array(-10,-25,456,303),65252=>array(-10,-24,588,303),65253=>array(72,-162,660,464),65254=>array(72,-244,771,342),65255=>array(-10,0,191,488),65256=>array(-10,0,312,488),65257=>array(68,-28,453,358),65258=>array(71,0,546,366),65259=>array(-10,-33,467,487),65260=>array(-10,-244,471,333),65261=>array(-42,-244,406,315),65262=>array(-42,-244,526,315),65263=>array(63,-131,719,411),65264=>array(63,-133,843,251),65265=>array(63,-244,719,411),65266=>array(63,-244,843,251),65267=>array(-10,-146,244,293),65268=>array(-10,-146,312,293),65269=>array(-103,-10,468,866),65270=>array(-103,-10,606,866),65271=>array(-13,-10,468,955),65272=>array(-13,-10,606,955),65273=>array(11,-244,468,760),65274=>array(11,-244,606,760),65275=>array(41,-10,468,760),65276=>array(41,-10,606,760),65533=>array(15,-84,1011,912),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390,41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636,51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838,61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575,71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603,81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685,91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635,101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634,111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592,121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500,169=>1000,170=>471,171=>612,172=>838,173=>361,174=>1000,175=>500,176=>500,177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471,187=>612,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684,197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295,207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787,217=>732,218=>732,219=>732,220=>732,221=>611,222=>605,223=>630,224=>613,225=>613,226=>613,227=>613,228=>613,229=>613,230=>982,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278,237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612,247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684,257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698,267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632,277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775,287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295,297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590,307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278,317=>557,318=>375,319=>557,320=>342,321=>562,322=>284,323=>748,324=>634,325=>748,326=>634,327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787,337=>612,338=>1070,339=>1023,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635,349=>521,350=>635,351=>521,352=>635,353=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732,361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732,371=>634,372=>989,373=>818,374=>611,375=>592,376=>611,377=>685,378=>525,379=>685,380=>525,381=>685,382=>525,383=>352,384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775,394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,402=>352,403=>775,404=>687,405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634,415=>787,416=>913,417=>612,418=>949,419=>759,420=>652,421=>635,422=>695,423=>635,424=>521,425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>858,432=>634,433=>764,434=>721,435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666,445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1422,453=>1299,454=>1154,455=>835,456=>787,457=>457,458=>931,459=>924,460=>797,461=>684,462=>613,463=>295,464=>278,465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634,475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>982,484=>775,485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666,495=>578,496=>278,497=>1422,498=>1299,499=>1154,500=>775,501=>635,502=>1113,503=>682,504=>748,505=>634,506=>684,507=>613,508=>974,509=>982,510=>787,511=>612,512=>684,513=>613,514=>684,515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787,525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732,535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735,545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787,555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475,565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611,575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295,585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>600,593=>635,594=>635,595=>635,596=>549,597=>550,598=>635,599=>696,600=>615,601=>615,602=>819,603=>541,604=>532,605=>775,606=>664,607=>278,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634,615=>634,616=>278,617=>338,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974,625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>414,634=>414,635=>414,636=>411,637=>411,638=>530,639=>530,640=>604,641=>604,642=>521,643=>336,644=>336,645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592,655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787,665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510,675=>1014,676=>1058,677=>1013,678=>830,679=>610,680=>778,681=>848,682=>706,683=>654,684=>515,685=>515,686=>661,687=>664,688=>404,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379,695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370,705=>370,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>275,713=>500,714=>500,715=>500,716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500,726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>315,735=>500,736=>426,737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500,749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862,883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337,900=>500,901=>500,902=>692,903=>318,904=>746,905=>871,906=>408,908=>813,910=>825,911=>826,912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295,922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611,933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634,943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612,953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587,963=>634,964=>602,965=>579,966=>660,967=>578,968=>660,969=>837,970=>338,971=>579,972=>612,973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837,983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865,993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768,1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787,1013=>615,1014=>615,1015=>605,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698,1023=>703,1024=>632,1025=>632,1026=>786,1027=>610,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295,1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686,1043=>610,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863,1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776,1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>882,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613,1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604,1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855,1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842,1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278,1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771,1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027,1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781,1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698,1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>772,1163=>677,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>590,1172=>624,1173=>530,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710,1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1081,1191=>916,1192=>878,1193=>693,1194=>698,1195=>550,1196=>611,1197=>583,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685,1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>941,1213=>728,1214=>941,1215=>728,1216=>295,1217=>1077,1218=>901,1219=>656,1220=>604,1221=>776,1222=>670,1223=>752,1224=>661,1225=>776,1226=>681,1227=>686,1228=>591,1229=>888,1230=>774,1231=>278,1232=>684,1233=>613,1234=>684,1235=>613,1236=>974,1237=>982,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787,1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748,1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609,1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>610,1271=>525,1272=>882,1273=>790,1274=>675,1275=>590,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006,1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775,1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1169,1301=>994,1302=>894,1303=>864,1304=>1032,1305=>986,1306=>787,1307=>635,1308=>989,1309=>818,1310=>710,1311=>604,1312=>1081,1313=>905,1314=>1081,1315=>912,1316=>793,1317=>683,1329=>766,1330=>732,1331=>753,1332=>753,1333=>732,1334=>772,1335=>640,1336=>732,1337=>859,1338=>753,1339=>691,1340=>533,1341=>922,1342=>863,1343=>732,1344=>716,1345=>766,1346=>753,1347=>767,1348=>792,1349=>728,1350=>729,1351=>757,1352=>732,1353=>713,1354=>800,1355=>768,1356=>792,1357=>732,1358=>753,1359=>705,1360=>694,1361=>744,1362=>538,1363=>811,1364=>757,1365=>787,1366=>790,1369=>307,1370=>318,1371=>234,1372=>361,1373=>238,1374=>405,1375=>500,1377=>974,1378=>634,1379=>658,1380=>663,1381=>634,1382=>635,1383=>515,1384=>634,1385=>738,1386=>658,1387=>634,1388=>271,1389=>980,1390=>623,1391=>634,1392=>634,1393=>608,1394=>634,1395=>629,1396=>634,1397=>271,1398=>634,1399=>499,1400=>634,1401=>404,1402=>974,1403=>560,1404=>648,1405=>634,1406=>634,1407=>974,1408=>634,1409=>633,1410=>435,1411=>974,1412=>636,1413=>609,1414=>805,1415=>812,1417=>337,1418=>361,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>441,1479=>0,1488=>668,1489=>578,1490=>412,1491=>546,1492=>653,1493=>272,1494=>346,1495=>653,1496=>648,1497=>224,1498=>537,1499=>529,1500=>568,1501=>664,1502=>679,1503=>272,1504=>400,1505=>649,1506=>626,1507=>640,1508=>625,1509=>540,1510=>593,1511=>709,1512=>564,1513=>708,1514=>657,1520=>471,1521=>423,1522=>331,1523=>416,1524=>645,1542=>637,1543=>637,1545=>757,1546=>977,1548=>323,1557=>0,1563=>318,1567=>531,1569=>470,1570=>278,1571=>278,1572=>483,1573=>278,1574=>783,1575=>278,1576=>941,1577=>524,1578=>941,1579=>941,1580=>646,1581=>646,1582=>646,1583=>445,1584=>445,1585=>483,1586=>483,1587=>1221,1588=>1221,1589=>1209,1590=>1209,1591=>925,1592=>925,1593=>597,1594=>597,1600=>293,1601=>1037,1602=>776,1603=>824,1604=>727,1605=>619,1606=>734,1607=>524,1608=>483,1609=>783,1610=>783,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0,1626=>500,1632=>537,1633=>537,1634=>537,1635=>537,1636=>537,1637=>537,1638=>537,1639=>537,1640=>537,1641=>537,1642=>537,1643=>325,1644=>318,1645=>545,1646=>941,1647=>776,1648=>0,1652=>292,1657=>941,1658=>941,1659=>941,1660=>941,1661=>941,1662=>941,1663=>941,1664=>941,1665=>646,1666=>646,1667=>646,1668=>646,1669=>646,1670=>646,1671=>646,1672=>445,1673=>445,1674=>445,1675=>445,1676=>445,1677=>445,1678=>445,1679=>445,1680=>445,1681=>483,1682=>483,1683=>498,1684=>530,1685=>610,1686=>530,1687=>483,1688=>483,1689=>483,1690=>1221,1691=>1221,1692=>1221,1693=>1209,1694=>1209,1695=>925,1696=>597,1697=>1037,1698=>1037,1699=>1037,1700=>1037,1701=>1037,1702=>1037,1703=>776,1704=>776,1705=>895,1706=>1054,1707=>895,1708=>824,1709=>824,1710=>824,1711=>895,1712=>895,1713=>895,1714=>895,1715=>895,1716=>895,1717=>727,1718=>727,1719=>727,1720=>727,1721=>734,1722=>734,1723=>734,1724=>734,1725=>734,1726=>698,1727=>646,1734=>483,1740=>783,1742=>783,1749=>524,1776=>537,1777=>537,1778=>537,1779=>537,1780=>537,1781=>537,1782=>537,1783=>537,1784=>537,1785=>537,1984=>636,1985=>636,1986=>636,1987=>636,1988=>636,1989=>636,1990=>636,1991=>636,1992=>636,1993=>636,1994=>278,1995=>571,1996=>424,1997=>592,1998=>654,1999=>654,2000=>594,2001=>654,2002=>829,2003=>438,2004=>438,2005=>559,2006=>612,2007=>350,2008=>959,2009=>473,2010=>783,2011=>654,2012=>625,2013=>734,2014=>530,2015=>724,2016=>473,2017=>625,2018=>594,2019=>530,2020=>530,2021=>522,2022=>594,2023=>594,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>313,2037=>313,2040=>560,2041=>560,2042=>361,3647=>636,3713=>670,3714=>684,3716=>688,3719=>482,3720=>628,3722=>684,3725=>688,3732=>669,3733=>642,3734=>645,3735=>655,3737=>659,3738=>625,3739=>625,3740=>745,3741=>767,3742=>687,3743=>687,3745=>702,3746=>688,3747=>684,3749=>649,3751=>632,3754=>703,3755=>819,3757=>633,3758=>684,3759=>788,3760=>632,3761=>0,3762=>539,3763=>539,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>663,3776=>375,3777=>657,3778=>460,3779=>547,3780=>491,3782=>674,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>636,3793=>641,3794=>641,3795=>670,3796=>625,3797=>625,3798=>703,3799=>670,3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>874,4257=>733,4258=>679,4259=>834,4260=>615,4261=>768,4262=>753,4263=>914,4264=>453,4265=>620,4266=>843,4267=>882,4268=>625,4269=>854,4270=>781,4271=>629,4272=>912,4273=>621,4274=>620,4275=>854,4276=>866,4277=>724,4278=>630,4279=>621,4280=>625,4281=>620,4282=>818,4283=>874,4284=>615,4285=>623,4286=>625,4287=>725,4288=>844,4289=>596,4290=>688,4291=>596,4292=>594,4293=>738,4304=>508,4305=>518,4306=>581,4307=>818,4308=>508,4309=>513,4310=>500,4311=>801,4312=>518,4313=>510,4314=>1064,4315=>522,4316=>522,4317=>786,4318=>508,4319=>518,4320=>796,4321=>522,4322=>654,4323=>522,4324=>825,4325=>513,4326=>786,4327=>518,4328=>518,4329=>522,4330=>571,4331=>522,4332=>518,4333=>520,4334=>522,4335=>454,4336=>508,4337=>518,4338=>508,4339=>508,4340=>518,4341=>554,4342=>828,4343=>552,4344=>508,4345=>571,4346=>508,4347=>448,4348=>324,5121=>684,5122=>684,5123=>684,5124=>684,5125=>769,5126=>769,5127=>769,5129=>769,5130=>769,5131=>769,5132=>835,5133=>834,5134=>835,5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007,5140=>967,5141=>1007,5142=>769,5143=>967,5144=>1007,5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543,5151=>423,5152=>423,5153=>389,5154=>389,5155=>393,5156=>389,5157=>466,5158=>385,5159=>256,5160=>389,5161=>389,5162=>389,5163=>1090,5164=>909,5165=>953,5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684,5171=>729,5172=>729,5173=>729,5175=>729,5176=>729,5177=>729,5178=>835,5179=>684,5180=>835,5181=>834,5182=>835,5183=>834,5184=>967,5185=>1007,5186=>967,5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007,5192=>729,5193=>508,5194=>192,5196=>732,5197=>732,5198=>732,5199=>732,5200=>730,5201=>730,5202=>730,5204=>730,5205=>730,5206=>730,5207=>921,5208=>889,5209=>921,5210=>889,5211=>921,5212=>889,5213=>928,5214=>900,5215=>928,5216=>900,5217=>947,5218=>900,5219=>947,5220=>900,5221=>947,5222=>434,5223=>877,5224=>877,5225=>866,5226=>890,5227=>628,5228=>628,5229=>628,5230=>628,5231=>628,5232=>628,5233=>628,5234=>628,5235=>628,5236=>860,5237=>771,5238=>815,5239=>816,5240=>815,5241=>816,5242=>860,5243=>771,5244=>860,5245=>771,5246=>815,5247=>816,5248=>815,5249=>816,5250=>815,5251=>407,5252=>407,5253=>750,5254=>775,5255=>750,5256=>775,5257=>628,5258=>628,5259=>628,5260=>628,5261=>628,5262=>628,5263=>628,5264=>628,5265=>628,5266=>860,5267=>771,5268=>815,5269=>816,5270=>815,5271=>816,5272=>860,5273=>771,5274=>860,5275=>771,5276=>815,5277=>816,5278=>815,5279=>816,5280=>815,5281=>435,5282=>435,5283=>610,5284=>557,5285=>557,5286=>557,5287=>610,5288=>610,5289=>610,5290=>557,5291=>557,5292=>749,5293=>769,5294=>746,5295=>764,5296=>746,5297=>764,5298=>749,5299=>769,5300=>749,5301=>769,5302=>746,5303=>764,5304=>746,5305=>764,5306=>746,5307=>386,5308=>508,5309=>386,5312=>852,5313=>852,5314=>852,5315=>852,5316=>852,5317=>852,5318=>852,5319=>852,5320=>852,5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059,5326=>852,5327=>852,5328=>600,5329=>453,5330=>600,5331=>852,5332=>852,5333=>852,5334=>852,5335=>852,5336=>852,5337=>852,5338=>852,5339=>852,5340=>1069,5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030,5346=>1069,5347=>1035,5348=>1069,5349=>1035,5350=>1083,5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729,5357=>603,5358=>603,5359=>603,5360=>603,5361=>603,5362=>603,5363=>603,5364=>603,5365=>603,5366=>834,5367=>754,5368=>792,5369=>771,5370=>792,5371=>771,5372=>834,5373=>754,5374=>834,5375=>754,5376=>792,5377=>771,5378=>792,5379=>771,5380=>792,5381=>418,5382=>420,5383=>418,5392=>712,5393=>712,5394=>712,5395=>892,5396=>892,5397=>892,5398=>892,5399=>910,5400=>872,5401=>910,5402=>872,5403=>910,5404=>872,5405=>1140,5406=>1100,5407=>1140,5408=>1100,5409=>1140,5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627,5415=>627,5416=>627,5417=>627,5418=>627,5419=>627,5420=>627,5421=>627,5422=>627,5423=>844,5424=>781,5425=>816,5426=>818,5427=>816,5428=>818,5429=>844,5430=>781,5431=>844,5432=>781,5433=>816,5434=>818,5435=>816,5436=>818,5437=>816,5438=>418,5440=>389,5441=>484,5442=>916,5443=>916,5444=>916,5445=>916,5446=>916,5447=>916,5448=>603,5449=>603,5450=>603,5451=>603,5452=>603,5453=>603,5454=>834,5455=>754,5456=>418,5458=>729,5459=>684,5460=>684,5461=>684,5462=>684,5463=>726,5464=>726,5465=>726,5466=>726,5467=>924,5468=>1007,5469=>508,5470=>732,5471=>732,5472=>732,5473=>732,5474=>732,5475=>732,5476=>730,5477=>730,5478=>730,5479=>730,5480=>947,5481=>900,5482=>508,5492=>831,5493=>831,5494=>831,5495=>831,5496=>831,5497=>831,5498=>831,5499=>563,5500=>752,5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047,5506=>1047,5507=>1047,5508=>1047,5509=>825,5514=>831,5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259,5520=>1259,5521=>1002,5522=>1002,5523=>1259,5524=>1259,5525=>700,5526=>1073,5536=>852,5537=>852,5538=>852,5539=>852,5540=>852,5541=>852,5542=>600,5543=>643,5544=>643,5545=>643,5546=>643,5547=>643,5548=>643,5549=>643,5550=>418,5551=>628,5598=>770,5601=>767,5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310,5745=>1632,5746=>1632,5747=>1375,5748=>1375,5749=>1632,5750=>1632,5760=>477,5761=>493,5762=>712,5763=>931,5764=>1150,5765=>1370,5766=>493,5767=>712,5768=>931,5769=>1150,5770=>1370,5771=>498,5772=>718,5773=>938,5774=>1159,5775=>1379,5776=>493,5777=>712,5778=>930,5779=>1149,5780=>1370,5781=>498,5782=>752,5783=>789,5784=>1205,5785=>1150,5786=>683,5787=>507,5788=>507,7424=>592,7425=>717,7426=>982,7427=>586,7428=>550,7429=>605,7430=>605,7431=>491,7432=>541,7433=>278,7434=>395,7435=>579,7436=>583,7437=>754,7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7448=>524,7449=>602,7450=>602,7451=>583,7452=>574,7453=>737,7454=>948,7455=>638,7456=>592,7457=>818,7458=>525,7459=>526,7462=>583,7463=>592,7464=>564,7465=>524,7466=>590,7467=>639,7468=>431,7469=>613,7470=>432,7472=>485,7473=>398,7474=>398,7475=>488,7476=>474,7477=>186,7478=>186,7479=>413,7480=>351,7481=>543,7482=>471,7483=>471,7484=>496,7485=>439,7486=>380,7487=>438,7488=>385,7489=>461,7490=>623,7491=>392,7492=>392,7493=>405,7494=>648,7495=>428,7496=>405,7497=>417,7498=>417,7499=>360,7500=>359,7501=>405,7502=>179,7503=>426,7504=>623,7505=>409,7506=>414,7507=>370,7508=>414,7509=>414,7510=>428,7511=>295,7512=>405,7513=>470,7514=>623,7515=>417,7517=>402,7518=>373,7519=>385,7520=>416,7521=>364,7522=>179,7523=>259,7524=>405,7525=>417,7526=>402,7527=>373,7528=>412,7529=>416,7530=>364,7543=>635,7544=>474,7547=>372,7549=>667,7557=>278,7579=>405,7580=>370,7581=>370,7582=>414,7583=>360,7584=>296,7585=>233,7586=>405,7587=>405,7588=>261,7589=>250,7590=>261,7591=>261,7592=>234,7593=>250,7594=>235,7595=>376,7596=>623,7597=>623,7598=>411,7599=>479,7600=>409,7601=>414,7602=>414,7603=>360,7604=>287,7605=>295,7606=>508,7607=>418,7608=>361,7609=>406,7610=>417,7611=>366,7612=>437,7613=>366,7614=>392,7615=>414,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>684,7681=>613,7682=>686,7683=>635,7684=>686,7685=>635,7686=>686,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635,7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615,7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>635,7714=>752,7715=>634,7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278,7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>288,7736=>557,7737=>288,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974,7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634,7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635,7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411,7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521,7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634,7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592,7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818,7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525,7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352,7836=>352,7837=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684,7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684,7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632,7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632,7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787,7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787,7897=>612,7898=>913,7899=>612,7900=>913,7901=>612,7902=>913,7903=>612,7904=>913,7905=>612,7906=>913,7907=>612,7908=>732,7909=>634,7910=>732,7911=>634,7912=>858,7913=>634,7914=>858,7915=>634,7916=>858,7917=>634,7918=>858,7919=>634,7920=>858,7921=>634,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611,7927=>592,7928=>611,7929=>592,7930=>769,7931=>477,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659,7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928,7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338,7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600,7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579,8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837,8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338,8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659,8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801,8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837,8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659,8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871,8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338,8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579,8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685,8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813,8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>361,8209=>361,8210=>636,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>318,8217=>318,8218=>318,8219=>318,8220=>518,8221=>518,8222=>518,8223=>518,8224=>500,8225=>500,8226=>590,8227=>590,8228=>334,8229=>667,8230=>1000,8231=>318,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1342,8241=>1735,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8249=>400,8250=>400,8251=>838,8252=>485,8253=>531,8254=>500,8255=>804,8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733,8265=>733,8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450,8275=>1000,8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838,8282=>318,8283=>797,8284=>838,8285=>318,8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>398,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444,8340=>417,8341=>404,8342=>426,8343=>166,8344=>623,8345=>398,8346=>428,8347=>373,8348=>295,8352=>877,8353=>636,8354=>636,8355=>636,8356=>636,8357=>974,8358=>748,8359=>1272,8360=>1074,8361=>989,8362=>784,8363=>636,8364=>636,8365=>636,8366=>636,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636,8372=>774,8373=>636,8376=>636,8377=>636,8378=>679,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1019,8449=>1019,8450=>698,8451=>1123,8452=>642,8453=>1019,8454=>1067,8455=>614,8456=>698,8457=>952,8459=>988,8460=>754,8461=>850,8462=>634,8463=>634,8464=>470,8465=>697,8466=>720,8467=>413,8468=>818,8469=>801,8470=>1040,8471=>1000,8472=>697,8473=>701,8474=>787,8475=>798,8476=>814,8477=>792,8478=>896,8479=>684,8480=>1020,8481=>1074,8482=>1000,8483=>684,8484=>745,8485=>578,8486=>764,8487=>764,8488=>616,8489=>338,8490=>656,8491=>684,8492=>786,8493=>703,8494=>854,8495=>592,8496=>605,8497=>786,8498=>575,8499=>1069,8500=>462,8501=>745,8502=>674,8503=>466,8504=>645,8505=>380,8506=>926,8507=>1194,8508=>702,8509=>728,8510=>654,8511=>849,8512=>811,8513=>775,8514=>557,8515=>557,8516=>611,8517=>819,8518=>708,8519=>615,8520=>351,8521=>351,8523=>780,8526=>526,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1245,8577=>770,8578=>1245,8579=>703,8580=>549,8581=>698,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>684,8705=>636,8706=>517,8707=>632,8708=>632,8709=>871,8710=>669,8711=>669,8712=>871,8713=>871,8714=>718,8715=>871,8716=>871,8717=>718,8718=>636,8719=>757,8720=>757,8721=>674,8722=>838,8723=>838,8724=>838,8725=>337,8726=>637,8727=>838,8728=>626,8729=>626,8730=>637,8731=>637,8732=>637,8733=>714,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>732,8744=>732,8745=>732,8746=>732,8747=>521,8748=>789,8749=>1057,8750=>521,8751=>789,8752=>1057,8753=>521,8754=>521,8755=>521,8756=>636,8757=>636,8758=>260,8759=>636,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>839,8787=>839,8788=>1000,8789=>1000,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>838,8809=>838,8810=>1047,8811=>1047,8812=>464,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>732,8845=>732,8846=>732,8847=>838,8848=>838,8849=>838,8850=>838,8851=>780,8852=>780,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>871,8867=>871,8868=>871,8869=>871,8870=>521,8871=>521,8872=>871,8873=>871,8874=>871,8875=>871,8876=>871,8877=>871,8878=>871,8879=>871,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>521,8891=>732,8892=>732,8893=>732,8894=>838,8895=>838,8896=>820,8897=>820,8898=>820,8899=>820,8900=>494,8901=>318,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>732,8911=>732,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1000,8947=>871,8948=>718,8949=>871,8950=>871,8951=>718,8952=>871,8953=>871,8954=>1000,8955=>871,8956=>718,8957=>871,8958=>718,8959=>871,8960=>602,8961=>602,8962=>635,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>390,8969=>390,8970=>390,8971=>390,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>513,8984=>1000,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>521,8993=>521,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>338,9076=>635,9077=>837,9082=>659,9085=>757,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9166=>838,9167=>945,9187=>873,9189=>769,9192=>636,9250=>635,9251=>635,9312=>896,9313=>896,9314=>896,9315=>896,9316=>896,9317=>896,9318=>896,9319=>896,9320=>896,9321=>896,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>1042,9786=>1042,9787=>1042,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9954=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>896,10103=>896,10104=>896,10105=>896,10106=>896,10107=>896,10108=>896,10109=>896,10110=>896,10111=>896,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>390,10182=>390,10208=>494,10214=>495,10215=>495,10216=>390,10217=>390,10218=>556,10219=>556,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10502=>838,10503=>838,10506=>838,10507=>838,10560=>683,10561=>683,10627=>734,10628=>734,10702=>838,10703=>1000,10704=>1000,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1325,10765=>521,10766=>521,10767=>521,10768=>521,10769=>521,10770=>521,10771=>521,10772=>521,10773=>521,10774=>521,10775=>521,10776=>521,10777=>521,10778=>521,10779=>521,10780=>521,10799=>838,10858=>838,10859=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>836,11023=>836,11024=>836,11025=>836,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278,11362=>557,11363=>603,11364=>695,11365=>613,11366=>392,11367=>752,11368=>634,11369=>656,11370=>579,11371=>685,11372=>525,11373=>781,11374=>863,11375=>684,11376=>781,11377=>734,11378=>1128,11379=>961,11380=>592,11381=>654,11382=>568,11383=>660,11385=>414,11386=>612,11387=>491,11388=>175,11389=>431,11390=>635,11391=>685,11520=>591,11521=>595,11522=>564,11523=>602,11524=>587,11525=>911,11526=>626,11527=>952,11528=>595,11529=>607,11530=>954,11531=>620,11532=>595,11533=>926,11534=>595,11535=>806,11536=>931,11537=>584,11538=>592,11539=>923,11540=>953,11541=>828,11542=>596,11543=>595,11544=>590,11545=>592,11546=>592,11547=>621,11548=>920,11549=>589,11550=>586,11551=>581,11552=>914,11553=>596,11554=>595,11555=>592,11556=>642,11557=>901,11568=>646,11569=>888,11570=>888,11571=>682,11572=>684,11573=>635,11574=>562,11575=>684,11576=>684,11577=>632,11578=>632,11579=>683,11580=>875,11581=>685,11582=>491,11583=>685,11584=>888,11585=>888,11586=>300,11587=>627,11588=>752,11589=>656,11590=>527,11591=>685,11592=>645,11593=>632,11594=>502,11595=>953,11596=>778,11597=>748,11598=>621,11599=>295,11600=>778,11601=>295,11602=>752,11603=>633,11604=>888,11605=>888,11606=>752,11607=>320,11608=>749,11609=>888,11610=>888,11611=>698,11612=>768,11613=>685,11614=>698,11615=>622,11616=>684,11617=>752,11618=>632,11619=>788,11620=>567,11621=>788,11631=>515,11800=>531,11806=>838,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42192=>686,42193=>603,42194=>603,42195=>770,42196=>611,42197=>611,42198=>775,42199=>656,42200=>656,42201=>512,42202=>698,42203=>703,42204=>685,42205=>575,42206=>575,42207=>863,42208=>748,42209=>557,42210=>635,42211=>695,42212=>695,42213=>684,42214=>684,42215=>752,42216=>775,42217=>512,42218=>989,42219=>685,42220=>611,42221=>686,42222=>684,42223=>684,42224=>632,42225=>632,42226=>295,42227=>787,42228=>732,42229=>732,42230=>557,42231=>767,42232=>300,42233=>300,42234=>596,42235=>596,42236=>300,42237=>300,42238=>588,42239=>588,42564=>635,42565=>521,42566=>354,42567=>338,42572=>1180,42573=>1028,42576=>1029,42577=>906,42580=>1080,42581=>842,42582=>977,42583=>843,42594=>1062,42595=>912,42596=>1066,42597=>901,42598=>1178,42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42634=>782,42635=>685,42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472,42790=>752,42791=>634,42792=>878,42793=>709,42794=>614,42795=>541,42800=>491,42801=>521,42802=>1250,42803=>985,42804=>1203,42805=>990,42806=>1142,42807=>981,42808=>971,42809=>818,42810=>971,42811=>818,42812=>959,42813=>818,42814=>703,42815=>549,42816=>656,42817=>583,42822=>680,42823=>392,42824=>582,42825=>427,42826=>807,42827=>704,42830=>1358,42831=>1019,42832=>603,42833=>635,42834=>734,42835=>774,42838=>787,42839=>635,42852=>605,42853=>635,42854=>605,42855=>635,42880=>557,42881=>278,42882=>735,42883=>634,42889=>337,42890=>376,42891=>401,42892=>275,42893=>686,42894=>487,42896=>772,42897=>667,42912=>775,42913=>635,42914=>656,42915=>579,42916=>748,42917=>634,42918=>695,42919=>411,42920=>635,42921=>521,42922=>801,43002=>915,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199,61184=>213,61185=>238,61186=>257,61187=>264,61188=>267,61189=>238,61190=>213,61191=>238,61192=>257,61193=>264,61194=>257,61195=>238,61196=>213,61197=>238,61198=>257,61199=>264,61200=>257,61201=>238,61202=>213,61203=>238,61204=>267,61205=>264,61206=>257,61207=>238,61208=>213,61209=>275,61440=>977,61441=>977,61442=>977,61443=>977,62464=>580,62465=>580,62466=>624,62467=>889,62468=>585,62469=>580,62470=>653,62471=>882,62472=>555,62473=>580,62474=>1168,62475=>589,62476=>590,62477=>869,62478=>580,62479=>589,62480=>914,62481=>590,62482=>731,62483=>583,62484=>872,62485=>589,62486=>895,62487=>589,62488=>589,62489=>590,62490=>649,62491=>589,62492=>589,62493=>599,62494=>590,62495=>516,62496=>580,62497=>584,62498=>580,62499=>580,62500=>581,62501=>638,62502=>955,62504=>931,62505=>808,62506=>508,62507=>508,62508=>508,62509=>508,62510=>508,62511=>508,62512=>508,62513=>508,62514=>508,62515=>508,62516=>518,62517=>518,62518=>518,62519=>787,62520=>787,62521=>787,62522=>787,62523=>787,62524=>546,62525=>546,62526=>546,62527=>546,62528=>546,62529=>546,63173=>612,64256=>689,64257=>630,64258=>630,64259=>967,64260=>967,64261=>686,64262=>861,64275=>1202,64276=>1202,64277=>1196,64278=>1186,64279=>1529,64285=>224,64286=>0,64287=>331,64288=>636,64289=>856,64290=>774,64291=>906,64292=>771,64293=>843,64294=>855,64295=>807,64296=>875,64297=>838,64298=>708,64299=>708,64300=>708,64301=>708,64302=>668,64303=>668,64304=>668,64305=>578,64306=>412,64307=>546,64308=>653,64309=>355,64310=>406,64312=>648,64313=>330,64314=>537,64315=>529,64316=>568,64318=>679,64320=>399,64321=>649,64323=>640,64324=>625,64326=>593,64327=>709,64328=>564,64329=>708,64330=>657,64331=>272,64332=>578,64333=>529,64334=>625,64335=>629,64338=>941,64339=>982,64340=>278,64341=>302,64342=>941,64343=>982,64344=>278,64345=>302,64346=>941,64347=>982,64348=>278,64349=>302,64350=>941,64351=>982,64352=>278,64353=>302,64354=>941,64355=>982,64356=>278,64357=>302,64358=>941,64359=>982,64360=>278,64361=>302,64362=>1037,64363=>1035,64364=>478,64365=>506,64366=>1037,64367=>1035,64368=>478,64369=>506,64370=>646,64371=>646,64372=>618,64373=>646,64374=>646,64375=>646,64376=>618,64377=>646,64378=>646,64379=>646,64380=>618,64381=>646,64382=>646,64383=>646,64384=>618,64385=>646,64386=>445,64387=>525,64388=>445,64389=>525,64390=>445,64391=>525,64392=>445,64393=>525,64394=>483,64395=>552,64396=>483,64397=>552,64398=>895,64399=>895,64400=>476,64401=>552,64402=>895,64403=>895,64404=>476,64405=>552,64406=>895,64407=>895,64408=>476,64409=>552,64410=>895,64411=>895,64412=>476,64413=>552,64414=>734,64415=>761,64416=>734,64417=>761,64418=>278,64419=>302,64426=>698,64427=>632,64428=>527,64429=>461,64467=>824,64468=>843,64469=>476,64470=>552,64473=>483,64474=>517,64488=>278,64489=>302,64508=>783,64509=>833,64510=>278,64511=>302,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>293,65137=>293,65138=>293,65139=>262,65140=>293,65142=>293,65143=>293,65144=>293,65145=>293,65146=>293,65147=>293,65148=>293,65149=>293,65150=>293,65151=>293,65152=>470,65153=>278,65154=>305,65155=>278,65156=>305,65157=>483,65158=>517,65159=>278,65160=>305,65161=>783,65162=>833,65163=>278,65164=>302,65165=>278,65166=>305,65167=>941,65168=>982,65169=>278,65170=>302,65171=>524,65172=>536,65173=>941,65174=>982,65175=>278,65176=>302,65177=>941,65178=>982,65179=>278,65180=>302,65181=>646,65182=>646,65183=>618,65184=>646,65185=>646,65186=>646,65187=>618,65188=>646,65189=>646,65190=>646,65191=>618,65192=>646,65193=>445,65194=>525,65195=>445,65196=>525,65197=>483,65198=>552,65199=>483,65200=>552,65201=>1221,65202=>1275,65203=>838,65204=>892,65205=>1221,65206=>1275,65207=>838,65208=>892,65209=>1209,65210=>1225,65211=>849,65212=>867,65213=>1209,65214=>1225,65215=>849,65216=>867,65217=>925,65218=>949,65219=>796,65220=>820,65221=>925,65222=>949,65223=>796,65224=>820,65225=>597,65226=>532,65227=>597,65228=>482,65229=>597,65230=>532,65231=>523,65232=>482,65233=>1037,65234=>1035,65235=>478,65236=>506,65237=>776,65238=>834,65239=>478,65240=>506,65241=>824,65242=>843,65243=>476,65244=>552,65245=>727,65246=>757,65247=>305,65248=>331,65249=>619,65250=>666,65251=>536,65252=>578,65253=>734,65254=>761,65255=>278,65256=>302,65257=>524,65258=>536,65259=>527,65260=>461,65261=>483,65262=>517,65263=>783,65264=>833,65265=>783,65266=>833,65267=>278,65268=>302,65269=>570,65270=>597,65271=>570,65272=>597,65273=>570,65274=>597,65275=>570,65276=>597,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusans.z b/tcpdf/fonts/dejavusans.z new file mode 100644 index 0000000..d0c4d3d Binary files /dev/null and b/tcpdf/fonts/dejavusans.z differ diff --git a/tcpdf/fonts/dejavusansb.ctg.z b/tcpdf/fonts/dejavusansb.ctg.z new file mode 100644 index 0000000..71cef63 Binary files /dev/null and b/tcpdf/fonts/dejavusansb.ctg.z differ diff --git a/tcpdf/fonts/dejavusansb.php b/tcpdf/fonts/dejavusansb.php new file mode 100644 index 0000000..5214aef --- /dev/null +++ b/tcpdf/fonts/dejavusansb.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSans-Bold'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=693876; +$enc=''; +$file='dejavusansb.z'; +$ctg='dejavusansb.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-1069 -415 1975 1174]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>60,'StemH'=>26,'AvgWidth'=>573,'MaxWidth'=>2016,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(140,0,316,729),34=>array(95,458,426,729),35=>array(68,0,770,718),36=>array(78,-147,628,760),37=>array(32,-14,970,742),38=>array(60,-14,830,742),39=>array(95,458,211,729),40=>array(86,-132,377,759),41=>array(80,-132,371,759),42=>array(20,278,503,742),43=>array(106,0,732,627),44=>array(53,-142,278,189),45=>array(54,217,361,359),46=>array(102,0,278,189),47=>array(0,-93,365,729),48=>array(48,-14,648,742),49=>array(113,0,627,729),50=>array(79,0,609,742),51=>array(67,-14,616,742),52=>array(45,0,650,729),53=>array(77,-14,626,729),54=>array(62,-14,642,741),55=>array(67,0,616,729),56=>array(61,-14,634,742),57=>array(52,-14,632,741),58=>array(112,0,288,547),59=>array(63,-142,288,547),60=>array(106,30,732,597),61=>array(106,144,732,482),62=>array(106,30,732,597),63=>array(69,0,515,742),64=>array(66,-174,929,703),65=>array(5,0,769,729),66=>array(92,0,692,729),67=>array(50,-14,670,742),68=>array(92,0,778,729),69=>array(92,0,610,729),70=>array(92,0,599,729),71=>array(50,-14,747,742),72=>array(92,0,745,729),73=>array(92,0,280,729),74=>array(-56,-200,280,729),75=>array(92,0,805,729),76=>array(92,0,610,729),77=>array(92,0,903,729),78=>array(92,0,745,729),79=>array(50,-14,800,742),80=>array(92,0,692,729),81=>array(50,-146,800,742),82=>array(92,0,750,729),83=>array(72,-14,647,742),84=>array(5,0,677,729),85=>array(92,-14,720,729),86=>array(5,0,769,729),87=>array(30,0,1072,729),88=>array(19,0,751,729),89=>array(-10,0,734,729),90=>array(45,0,680,729),91=>array(86,-132,389,760),92=>array(0,-93,365,729),93=>array(68,-132,371,760),94=>array(101,457,737,729),95=>array(0,-236,500,-143),96=>array(46,616,322,800),97=>array(43,-14,596,560),98=>array(84,-14,671,760),99=>array(43,-14,526,560),100=>array(45,-14,632,760),101=>array(43,-14,630,560),102=>array(19,0,444,760),103=>array(45,-216,632,559),104=>array(84,0,634,760),105=>array(84,0,259,760),106=>array(-33,-216,259,760),107=>array(84,0,684,760),108=>array(84,0,259,760),109=>array(83,0,963,560),110=>array(84,0,634,560),111=>array(43,-14,644,560),112=>array(84,-208,671,560),113=>array(45,-208,632,559),114=>array(84,0,490,560),115=>array(52,-14,548,560),116=>array(13,0,455,702),117=>array(78,-14,628,547),118=>array(15,0,637,547),119=>array(35,0,889,547),120=>array(15,0,630,547),121=>array(12,-216,634,547),122=>array(45,0,534,547),123=>array(125,-163,587,760),124=>array(127,-236,238,764),125=>array(125,-163,587,760),126=>array(106,212,732,415),161=>array(140,0,316,729),162=>array(85,-153,567,699),163=>array(61,0,613,742),164=>array(36,30,601,596),165=>array(12,0,684,729),166=>array(127,-171,238,699),167=>array(7,-95,496,742),168=>array(96,654,404,774),169=>array(138,0,862,725),170=>array(77,182,489,742),171=>array(77,67,552,519),172=>array(106,140,732,444),173=>array(54,217,361,359),174=>array(138,0,862,725),175=>array(96,668,404,760),176=>array(87,424,412,749),177=>array(106,0,732,627),178=>array(53,326,382,742),179=>array(44,319,384,742),180=>array(178,616,454,800),181=>array(85,-209,704,547),182=>array(63,-96,549,729),183=>array(102,253,278,442),184=>array(128,-196,349,0),185=>array(60,326,382,734),186=>array(57,182,507,742),187=>array(94,67,569,519),188=>array(49,-14,957,742),189=>array(49,-14,987,742),190=>array(51,-14,957,742),191=>array(69,-14,515,729),192=>array(5,0,769,927),193=>array(5,0,769,927),194=>array(5,0,769,927),195=>array(5,0,769,931),196=>array(5,0,769,927),197=>array(5,0,769,928),198=>array(0,0,1012,729),199=>array(50,-196,670,742),200=>array(92,0,610,927),201=>array(92,0,610,927),202=>array(92,0,610,927),203=>array(92,0,610,927),204=>array(11,0,280,927),205=>array(92,0,337,927),206=>array(1,0,370,927),207=>array(32,0,339,927),208=>array(16,0,787,729),209=>array(92,0,745,928),210=>array(50,-14,800,927),211=>array(50,-14,800,927),212=>array(50,-14,800,927),213=>array(50,-14,800,928),214=>array(50,-14,800,927),215=>array(125,20,713,607),216=>array(22,-36,823,765),217=>array(92,-14,720,927),218=>array(92,-14,720,927),219=>array(92,-14,720,927),220=>array(92,-14,720,927),221=>array(-10,0,734,927),222=>array(92,0,692,729),223=>array(84,-14,676,760),224=>array(43,-14,596,800),225=>array(43,-14,596,800),226=>array(43,-14,596,800),227=>array(43,-14,596,778),228=>array(43,-14,596,774),229=>array(43,-14,596,888),230=>array(43,-14,1000,560),231=>array(43,-196,526,560),232=>array(43,-14,630,800),233=>array(43,-14,630,800),234=>array(43,-14,630,800),235=>array(43,-14,630,774),236=>array(-21,0,259,800),237=>array(84,0,387,800),238=>array(-13,0,355,800),239=>array(17,0,325,774),240=>array(43,-14,644,760),241=>array(84,0,634,778),242=>array(43,-14,644,800),243=>array(43,-14,644,800),244=>array(43,-14,644,800),245=>array(43,-14,644,778),246=>array(43,-14,644,774),247=>array(106,42,732,585),248=>array(38,-46,645,594),249=>array(78,-14,628,800),250=>array(78,-14,628,800),251=>array(78,-14,628,800),252=>array(78,-14,628,774),253=>array(12,-216,634,800),254=>array(84,-208,671,760),255=>array(12,-216,634,774),256=>array(5,0,769,914),257=>array(43,-14,596,763),258=>array(5,0,769,935),259=>array(43,-14,596,780),260=>array(5,-196,769,729),261=>array(43,-196,596,560),262=>array(50,-14,670,927),263=>array(43,-14,557,800),264=>array(50,-14,670,927),265=>array(43,-14,542,800),266=>array(50,-14,670,927),267=>array(43,-14,526,760),268=>array(50,-14,670,927),269=>array(43,-14,537,800),270=>array(92,0,778,927),271=>array(45,-14,871,760),272=>array(16,0,787,729),273=>array(45,-14,707,760),274=>array(92,0,610,914),275=>array(43,-14,630,763),276=>array(92,0,610,927),277=>array(43,-14,630,784),278=>array(92,0,610,927),279=>array(43,-14,630,760),280=>array(92,-196,610,729),281=>array(43,-196,630,560),282=>array(92,0,610,927),283=>array(43,-14,630,800),284=>array(50,-14,747,927),285=>array(45,-216,632,800),286=>array(50,-14,747,927),287=>array(45,-216,632,784),288=>array(50,-14,747,927),289=>array(45,-216,632,760),290=>array(50,-224,747,742),291=>array(45,-216,632,765),292=>array(92,0,745,927),293=>array(-9,0,634,927),294=>array(92,0,882,729),295=>array(81,0,709,760),296=>array(16,0,355,928),297=>array(1,0,341,778),298=>array(32,0,339,914),299=>array(18,0,325,763),300=>array(21,0,350,927),301=>array(7,0,335,784),302=>array(92,-196,366,729),303=>array(84,-196,345,760),304=>array(92,0,280,927),305=>array(84,0,259,547),306=>array(92,-200,651,729),307=>array(84,-216,602,760),308=>array(-56,-200,370,927),309=>array(-33,-216,355,800),310=>array(92,-209,805,729),311=>array(84,-209,684,760),312=>array(84,0,684,547),313=>array(92,0,610,928),314=>array(84,0,357,928),315=>array(92,-209,610,729),316=>array(71,-209,273,760),317=>array(92,0,610,729),318=>array(84,0,479,760),319=>array(92,0,610,729),320=>array(84,0,484,760),321=>array(-45,0,615,729),322=>array(-18,0,390,760),323=>array(92,0,745,928),324=>array(84,0,634,803),325=>array(92,-209,745,729),326=>array(84,-209,634,560),327=>array(92,0,745,927),328=>array(84,0,634,800),329=>array(51,0,891,729),330=>array(84,-200,730,742),331=>array(84,-216,634,560),332=>array(50,-14,800,914),333=>array(43,-14,644,763),334=>array(50,-14,800,927),335=>array(43,-14,644,787),336=>array(50,-14,800,927),337=>array(43,-14,644,800),338=>array(50,-1,1094,730),339=>array(43,-14,1046,560),340=>array(92,0,750,928),341=>array(84,0,515,803),342=>array(92,-209,750,729),343=>array(71,-209,490,560),344=>array(92,0,750,927),345=>array(84,0,490,800),346=>array(72,-14,647,928),347=>array(52,-14,548,803),348=>array(72,-14,647,927),349=>array(52,-14,548,800),350=>array(72,-196,647,742),351=>array(52,-196,548,560),352=>array(72,-14,647,927),353=>array(52,-14,548,800),354=>array(5,-196,677,729),355=>array(13,-196,455,702),356=>array(5,0,677,930),357=>array(13,0,507,814),358=>array(5,0,677,729),359=>array(13,0,455,702),360=>array(92,-14,720,928),361=>array(78,-14,628,778),362=>array(92,-14,720,914),363=>array(78,-14,628,763),364=>array(92,-14,720,927),365=>array(78,-14,628,784),366=>array(92,-14,720,929),367=>array(78,-14,628,881),368=>array(92,-14,720,927),369=>array(78,-14,628,800),370=>array(92,-196,720,729),371=>array(78,-196,716,547),372=>array(30,0,1072,931),373=>array(35,0,889,800),374=>array(-10,0,734,931),375=>array(12,-216,634,800),376=>array(-10,0,734,927),377=>array(45,0,680,928),378=>array(45,0,534,803),379=>array(45,0,680,929),380=>array(45,0,534,760),381=>array(45,0,680,927),382=>array(45,0,534,800),383=>array(19,0,444,760),384=>array(9,-14,671,760),385=>array(-68,0,741,729),386=>array(92,0,692,729),387=>array(84,-14,671,760),388=>array(40,0,731,729),389=>array(25,-14,696,760),390=>array(50,-14,670,742),391=>array(50,-14,818,924),392=>array(43,-14,643,724),393=>array(16,0,787,729),394=>array(-68,0,827,729),395=>array(70,0,669,729),396=>array(45,-14,632,760),397=>array(43,-222,645,560),398=>array(92,0,610,729),399=>array(51,-14,800,742),400=>array(67,-14,616,742),401=>array(-56,-200,599,729),402=>array(-57,-208,444,760),403=>array(50,-14,868,924),404=>array(2,-211,793,730),405=>array(84,0,1000,760),406=>array(92,0,428,729),407=>array(5,0,384,729),408=>array(92,0,805,742),409=>array(84,0,684,760),410=>array(5,0,355,760),411=>array(-11,0,562,760),412=>array(83,-13,963,729),413=>array(-56,-200,745,729),414=>array(84,-208,634,560),415=>array(50,-14,800,742),416=>array(53,-14,854,761),417=>array(46,-14,708,609),418=>array(50,-14,1007,742),419=>array(43,-216,826,560),420=>array(-68,0,741,729),421=>array(84,-208,671,760),422=>array(92,-146,760,729),423=>array(26,-14,601,742),424=>array(15,-14,511,560),425=>array(92,0,610,729),426=>array(-31,-217,561,760),427=>array(13,-216,455,702),428=>array(15,0,701,729),429=>array(13,0,455,760),430=>array(5,-200,677,729),431=>array(91,-14,833,761),432=>array(75,-14,733,609),433=>array(27,-14,823,728),434=>array(92,0,772,729),435=>array(-10,0,796,742),436=>array(12,-216,778,560),437=>array(45,0,680,729),438=>array(45,0,534,547),439=>array(72,-33,728,729),440=>array(41,-33,696,729),441=>array(37,-215,586,547),442=>array(57,-208,534,547),443=>array(79,0,609,742),444=>array(41,-33,728,729),445=>array(37,-215,586,547),446=>array(36,-15,525,702),447=>array(84,-208,671,560),448=>array(92,-208,280,729),449=>array(92,-208,566,729),450=>array(5,-208,536,729),451=>array(99,0,274,729),452=>array(92,0,1510,927),453=>array(92,0,1364,800),454=>array(45,-14,1250,800),455=>array(92,-200,917,729),456=>array(92,-216,896,760),457=>array(84,-216,602,760),458=>array(92,-200,1117,729),459=>array(92,-216,1096,760),460=>array(84,-216,971,760),461=>array(5,0,769,927),462=>array(43,-14,596,800),463=>array(3,0,371,927),464=>array(2,0,370,800),465=>array(50,-14,800,927),466=>array(43,-14,644,800),467=>array(92,-14,720,927),468=>array(78,-14,628,800),469=>array(92,-14,720,1040),470=>array(78,-14,628,914),471=>array(92,-14,720,1114),472=>array(78,-14,628,917),473=>array(92,-14,720,1114),474=>array(78,-14,628,917),475=>array(92,-14,720,1114),476=>array(78,-14,628,917),477=>array(43,-14,630,560),478=>array(5,0,769,1040),479=>array(43,-14,596,914),480=>array(5,0,769,1042),481=>array(43,-14,596,914),482=>array(0,0,1012,914),483=>array(43,-14,1000,758),484=>array(50,-14,792,742),485=>array(45,-216,674,559),486=>array(50,-14,747,927),487=>array(45,-216,632,800),488=>array(92,0,805,927),489=>array(-5,0,684,927),490=>array(50,-196,800,742),491=>array(43,-196,644,560),492=>array(50,-196,800,914),493=>array(43,-196,644,763),494=>array(72,-33,728,927),495=>array(43,-215,593,793),496=>array(-33,-216,359,800),497=>array(92,0,1510,729),498=>array(92,0,1364,729),499=>array(45,-14,1250,760),500=>array(50,-14,747,928),501=>array(45,-216,632,800),502=>array(92,-14,1186,729),503=>array(92,-208,737,742),504=>array(92,0,745,927),505=>array(84,0,634,800),506=>array(5,0,769,931),507=>array(43,-14,708,931),508=>array(0,0,1012,927),509=>array(43,-14,1000,800),510=>array(22,-36,823,927),511=>array(38,-46,645,800),512=>array(5,0,769,928),513=>array(43,-14,596,800),514=>array(5,0,769,923),515=>array(43,-14,596,784),516=>array(92,0,610,928),517=>array(43,-14,630,800),518=>array(92,0,610,923),519=>array(43,-14,630,784),520=>array(-41,0,377,928),521=>array(-3,0,381,800),522=>array(23,0,351,923),523=>array(7,0,335,784),524=>array(50,-14,800,928),525=>array(43,-14,644,800),526=>array(50,-14,800,923),527=>array(43,-14,644,784),528=>array(92,0,750,928),529=>array(58,0,490,800),530=>array(92,0,750,923),531=>array(84,0,490,784),532=>array(92,-14,720,928),533=>array(78,-14,628,800),534=>array(92,-14,720,923),535=>array(78,-14,628,784),536=>array(72,-239,647,742),537=>array(52,-239,548,560),538=>array(5,-239,677,729),539=>array(13,-239,455,702),540=>array(67,-210,616,742),541=>array(49,-211,544,560),542=>array(92,0,745,927),543=>array(-12,0,634,927),544=>array(84,-208,730,742),545=>array(45,-75,822,760),546=>array(61,-14,748,742),547=>array(43,-14,616,646),548=>array(45,-216,680,729),549=>array(45,-216,534,547),550=>array(5,0,769,927),551=>array(43,-14,596,760),552=>array(92,-192,610,729),553=>array(43,-196,630,560),554=>array(50,-14,800,1040),555=>array(43,-14,644,914),556=>array(50,-14,800,1040),557=>array(43,-14,644,898),558=>array(50,-14,800,927),559=>array(43,-14,644,760),560=>array(50,-14,800,1042),561=>array(43,-14,644,914),562=>array(-10,0,734,914),563=>array(12,-216,634,763),564=>array(84,-75,449,760),565=>array(84,-75,824,560),566=>array(13,-76,469,702),567=>array(-33,-216,259,547),568=>array(45,-14,1043,760),569=>array(45,-208,1043,560),570=>array(-14,-36,788,765),571=>array(-34,-36,768,765),572=>array(-7,-46,600,594),573=>array(-1,0,610,729),574=>array(-60,-36,742,765),575=>array(52,-240,595,560),576=>array(45,-240,595,547),577=>array(40,0,741,729),578=>array(42,0,573,560),579=>array(6,0,692,729),580=>array(23,-14,789,729),581=>array(5,0,769,729),582=>array(92,-93,610,822),583=>array(43,-93,630,640),584=>array(-56,-200,360,729),585=>array(-33,-216,360,760),586=>array(48,-200,927,741),587=>array(45,-216,800,560),588=>array(6,0,750,729),589=>array(-21,0,490,560),590=>array(-10,0,734,729),591=>array(-4,-216,656,547),592=>array(78,-14,631,560),593=>array(45,-14,632,560),594=>array(84,-14,671,560),595=>array(84,-14,671,760),596=>array(43,-14,526,560),597=>array(43,-69,526,560),598=>array(45,-216,750,760),599=>array(45,-14,801,760),600=>array(43,-14,630,560),601=>array(43,-14,630,560),602=>array(59,-14,885,560),603=>array(54,-14,493,560),604=>array(54,-14,493,560),605=>array(54,-14,769,560),606=>array(54,-14,665,560),607=>array(-33,-216,360,547),608=>array(45,-216,801,760),609=>array(45,-216,632,547),610=>array(43,-14,545,546),611=>array(25,-211,619,547),612=>array(25,-21,619,547),613=>array(78,-214,628,547),614=>array(84,0,634,760),615=>array(84,-216,634,760),616=>array(84,0,461,760),617=>array(83,0,356,547),618=>array(84,0,461,547),619=>array(84,0,475,760),620=>array(84,0,609,760),621=>array(85,-216,429,760),622=>array(84,-215,793,760),623=>array(79,-14,959,546),624=>array(79,-209,959,546),625=>array(83,-216,964,560),626=>array(-33,-216,634,560),627=>array(84,-216,802,560),628=>array(84,0,623,547),629=>array(43,-14,644,560),630=>array(43,-1,826,547),631=>array(51,0,630,574),632=>array(60,-208,729,760),633=>array(84,-13,490,547),634=>array(84,-13,490,760),635=>array(84,-216,659,547),636=>array(84,-208,490,560),637=>array(83,-216,490,560),638=>array(84,0,530,547),639=>array(84,0,530,547),640=>array(52,0,590,547),641=>array(52,0,590,547),642=>array(52,-216,548,560),643=>array(-33,-216,431,760),644=>array(-11,-216,444,760),645=>array(84,-216,539,560),646=>array(-31,-217,561,760),647=>array(13,-155,455,547),648=>array(13,-216,455,702),649=>array(84,-14,836,547),650=>array(79,-14,693,547),651=>array(83,0,625,547),652=>array(15,0,637,547),653=>array(35,0,889,547),654=>array(12,0,634,763),655=>array(64,0,660,547),656=>array(45,-216,703,547),657=>array(45,-69,617,547),658=>array(43,-215,593,547),659=>array(57,-215,593,547),660=>array(36,0,525,759),661=>array(36,0,525,759),662=>array(36,0,525,759),663=>array(36,-208,525,759),664=>array(50,-14,800,742),665=>array(84,0,589,547),666=>array(54,-14,665,560),667=>array(43,0,693,760),668=>array(84,0,607,547),669=>array(-170,-216,341,760),670=>array(84,-213,684,547),671=>array(84,0,499,547),672=>array(45,-208,801,760),673=>array(36,0,525,759),674=>array(36,0,525,759),675=>array(45,-14,1108,760),676=>array(45,-215,1167,760),677=>array(45,-55,1107,760),678=>array(13,0,928,702),679=>array(13,-216,777,760),680=>array(13,-69,881,702),681=>array(19,-216,979,760),682=>array(84,0,815,760),683=>array(84,0,732,760),684=>array(22,0,569,641),685=>array(22,86,345,641),686=>array(-89,-214,629,760),687=>array(-89,-216,797,760),688=>array(54,326,406,751),689=>array(54,326,406,751),690=>array(-21,205,166,751),691=>array(54,326,314,640),692=>array(54,319,314,632),693=>array(54,205,421,632),694=>array(14,326,358,632),695=>array(22,326,569,632),696=>array(8,205,406,632),697=>array(78,557,218,800),698=>array(78,557,437,800),699=>array(103,418,318,729),700=>array(63,418,278,729),701=>array(124,616,296,856),702=>array(116,481,255,760),703=>array(116,481,255,760),704=>array(23,326,336,751),705=>array(23,326,336,751),706=>array(130,517,370,843),707=>array(130,517,370,843),708=>array(87,561,413,800),709=>array(87,561,413,800),710=>array(66,616,434,800),711=>array(66,616,434,800),712=>array(107,488,199,759),713=>array(96,668,404,760),714=>array(178,616,454,800),715=>array(46,616,322,800),716=>array(107,-81,199,190),717=>array(96,-184,404,-92),718=>array(46,-236,322,-52),719=>array(178,-236,454,-52),720=>array(45,0,246,547),721=>array(45,361,246,547),722=>array(116,269,255,547),723=>array(116,269,255,547),724=>array(138,238,357,458),725=>array(141,238,360,458),726=>array(54,119,362,427),727=>array(54,229,274,317),728=>array(86,639,414,784),729=>array(183,654,317,774),730=>array(111,610,389,888),731=>array(167,-196,376,0),732=>array(80,638,420,778),733=>array(94,616,479,800),734=>array(0,213,360,524),735=>array(111,616,387,800),736=>array(16,208,390,633),737=>array(54,326,166,751),738=>array(33,318,351,640),739=>array(10,326,403,632),740=>array(23,326,336,751),741=>array(96,0,404,693),742=>array(96,0,404,693),743=>array(96,0,404,693),744=>array(96,0,404,693),745=>array(96,0,404,693),748=>array(88,-260,414,-21),749=>array(96,605,404,822),750=>array(92,418,554,729),755=>array(111,-240,389,38),759=>array(80,-196,420,-84),768=>array(-455,616,-179,800),769=>array(-326,616,-50,800),770=>array(-435,616,-67,800),771=>array(-424,638,-84,778),772=>array(-405,668,-97,760),773=>array(-500,663,0,755),774=>array(-409,639,-81,784),775=>array(-338,617,-164,760),776=>array(-402,654,-94,774),777=>array(-370,616,-122,843),778=>array(-390,610,-112,888),779=>array(-404,616,-19,800),780=>array(-435,616,-67,800),781=>array(-297,615,-205,832),782=>array(-390,615,-113,832),783=>array(-484,616,-100,800),784=>array(-409,639,-81,882),785=>array(-409,639,-81,784),786=>array(-271,418,-69,563),787=>array(-266,595,-132,844),788=>array(-266,595,-132,844),789=>array(-89,616,89,800),790=>array(-455,-276,-179,-93),791=>array(-326,-276,-50,-93),792=>array(-380,-240,-211,-6),793=>array(-295,-240,-126,-6),794=>array(-224,658,47,929),795=>array(-175,400,21,609),796=>array(-331,-240,-216,-11),797=>array(-386,-240,-115,-59),798=>array(-389,-240,-118,-59),799=>array(-370,-240,-136,-6),800=>array(-389,-202,-118,-110),801=>array(-423,-216,-79,117),802=>array(-419,-216,-75,117),803=>array(-338,-212,-164,-70),804=>array(-402,-212,-94,-92),805=>array(-365,-240,-135,-11),806=>array(-327,-239,-125,-93),807=>array(-372,-196,-151,0),808=>array(-333,-196,-124,0),809=>array(-297,-240,-205,-47),810=>array(-405,-237,-97,-54),811=>array(-450,-239,-51,-94),812=>array(-435,-240,-67,-57),813=>array(-435,-240,-67,-57),814=>array(-409,-239,-81,-94),815=>array(-409,-240,-81,-95),816=>array(-424,-234,-84,-94),817=>array(-405,-184,-97,-92),818=>array(-500,-236,0,-143),819=>array(-500,-236,0,-9),820=>array(-625,212,1,415),821=>array(-471,214,-94,309),822=>array(-837,214,-86,309),823=>array(-655,-46,-48,594),824=>array(-825,-36,-24,765),825=>array(-285,-240,-170,-11),826=>array(-405,-238,-97,-55),827=>array(-332,-241,-98,-6),828=>array(-450,-239,-51,-94),829=>array(-379,585,-123,842),830=>array(-267,595,-127,867),831=>array(-500,528,0,755),832=>array(-455,616,-179,800),833=>array(-323,616,-47,800),834=>array(-421,638,-81,778),835=>array(-266,595,-132,844),836=>array(-404,654,-55,978),837=>array(-286,-208,-179,-45),838=>array(-403,639,-97,786),839=>array(-360,-226,-140,-35),840=>array(-379,-240,-121,-47),841=>array(-367,-240,-133,-21),842=>array(-420,616,-80,800),843=>array(-420,567,-80,850),844=>array(-420,573,-80,835),845=>array(-459,-230,-41,-30),846=>array(-357,-240,-143,-45),849=>array(-320,610,-179,888),850=>array(-409,640,-81,882),851=>array(-367,-240,-135,-9),855=>array(-320,610,-179,888),856=>array(-120,654,14,774),858=>array(-445,-240,-58,-11),860=>array(-433,-237,458,-79),861=>array(-433,802,458,960),862=>array(-445,797,445,889),863=>array(-445,-185,445,-93),864=>array(-362,756,362,894),865=>array(-445,769,445,927),866=>array(-449,-230,454,-30),880=>array(92,0,606,729),881=>array(84,0,481,547),882=>array(92,0,930,729),883=>array(92,0,744,729),884=>array(78,557,218,800),885=>array(78,-208,218,35),886=>array(92,0,745,729),887=>array(84,0,617,547),890=>array(202,-208,333,-45),891=>array(43,-14,526,560),892=>array(43,-14,526,560),893=>array(43,-14,526,560),894=>array(63,-142,288,547),900=>array(169,616,445,800),901=>array(96,654,445,978),902=>array(26,0,792,800),903=>array(102,253,278,442),904=>array(-24,0,771,800),905=>array(-18,0,915,800),906=>array(-21,0,450,800),908=>array(-19,-14,836,800),910=>array(-27,0,992,800),911=>array(-30,0,867,800),912=>array(23,-19,372,978),913=>array(5,0,769,729),914=>array(92,0,692,729),915=>array(92,0,610,729),916=>array(5,0,769,729),917=>array(92,0,610,729),918=>array(45,0,680,729),919=>array(92,0,745,729),920=>array(50,-14,800,742),921=>array(92,0,280,729),922=>array(92,0,805,729),923=>array(5,0,769,729),924=>array(92,0,903,729),925=>array(92,0,745,729),926=>array(98,0,548,729),927=>array(50,-14,800,742),928=>array(92,0,745,729),929=>array(92,0,692,729),931=>array(92,0,610,729),932=>array(5,0,677,729),933=>array(-10,0,734,729),934=>array(50,0,800,729),935=>array(19,0,751,729),936=>array(56,0,795,729),937=>array(27,0,823,742),938=>array(34,0,342,927),939=>array(-10,0,734,927),940=>array(48,-13,645,800),941=>array(54,-14,493,800),942=>array(84,-208,634,800),943=>array(77,-19,353,800),944=>array(78,-10,629,978),945=>array(48,-13,645,559),946=>array(84,-208,671,773),947=>array(15,-208,667,547),948=>array(43,-14,645,768),949=>array(54,-14,493,560),950=>array(43,-208,542,760),951=>array(84,-208,634,560),952=>array(43,-11,645,768),953=>array(78,-19,348,547),954=>array(84,0,655,547),955=>array(30,0,603,760),956=>array(85,-209,704,547),957=>array(15,0,635,547),958=>array(43,-208,542,760),959=>array(43,-14,644,560),960=>array(42,-19,732,547),961=>array(84,-208,671,562),962=>array(43,-208,526,560),963=>array(43,-14,727,547),964=>array(21,-19,612,547),965=>array(78,-10,629,547),966=>array(64,-208,725,552),967=>array(25,-208,620,547),968=>array(65,-208,724,547),969=>array(43,-13,826,547),970=>array(19,-19,355,774),971=>array(78,-10,629,774),972=>array(43,-14,644,800),973=>array(78,-10,629,800),974=>array(43,-13,826,800),975=>array(92,-208,805,729),976=>array(55,-11,575,768),977=>array(51,-11,612,768),978=>array(21,0,717,729),979=>array(-24,0,954,800),980=>array(21,0,717,927),981=>array(60,-208,729,760),982=>array(22,-13,843,547),983=>array(54,-205,688,548),984=>array(50,-208,800,742),985=>array(43,-208,644,560),986=>array(50,-208,678,729),987=>array(43,-208,541,547),988=>array(92,0,599,729),989=>array(-56,-208,437,760),990=>array(61,2,646,729),991=>array(82,0,571,759),992=>array(56,-208,843,742),993=>array(22,-180,537,559),994=>array(50,-213,1043,729),995=>array(59,-208,775,547),996=>array(50,-208,740,742),997=>array(45,-208,632,560),998=>array(92,-213,878,729),999=>array(21,-14,689,575),1000=>array(42,-208,692,745),1001=>array(46,-208,608,560),1002=>array(53,0,736,742),1003=>array(49,0,622,560),1004=>array(50,-14,715,758),1005=>array(83,-14,670,758),1006=>array(28,-208,654,729),1007=>array(27,-208,563,729),1008=>array(54,-7,688,548),1009=>array(84,-216,671,562),1010=>array(43,-14,526,560),1011=>array(-33,-216,259,760),1012=>array(50,-14,800,742),1013=>array(67,-14,550,560),1014=>array(81,-14,563,560),1015=>array(92,0,692,729),1016=>array(84,-208,671,760),1017=>array(50,-14,670,742),1018=>array(92,0,903,729),1019=>array(73,-208,649,547),1020=>array(33,-208,671,562),1021=>array(33,-14,653,742),1022=>array(50,-14,670,742),1023=>array(33,-14,653,742),1024=>array(92,0,610,927),1025=>array(92,0,610,927),1026=>array(5,-200,798,729),1027=>array(92,0,610,928),1028=>array(50,-14,670,742),1029=>array(72,-14,647,742),1030=>array(92,0,280,729),1031=>array(32,0,339,927),1032=>array(-56,-200,280,729),1033=>array(46,0,1102,729),1034=>array(92,0,1060,729),1035=>array(5,0,798,729),1036=>array(92,0,803,928),1037=>array(92,0,745,927),1038=>array(29,0,741,927),1039=>array(92,-157,745,729),1040=>array(5,0,769,729),1041=>array(92,0,692,729),1042=>array(92,0,692,729),1043=>array(92,0,610,729),1044=>array(60,-157,831,729),1045=>array(92,0,610,729),1046=>array(15,0,1209,729),1047=>array(66,-14,645,742),1048=>array(92,0,745,729),1049=>array(92,0,745,927),1050=>array(92,0,803,729),1051=>array(46,0,739,729),1052=>array(92,0,903,729),1053=>array(92,0,745,729),1054=>array(50,-14,800,742),1055=>array(92,0,745,729),1056=>array(92,0,692,729),1057=>array(50,-14,670,742),1058=>array(5,0,677,729),1059=>array(29,0,741,729),1060=>array(50,0,941,729),1061=>array(19,0,751,729),1062=>array(92,-157,868,729),1063=>array(81,0,716,729),1064=>array(92,0,1143,729),1065=>array(92,-157,1266,729),1066=>array(49,0,890,729),1067=>array(92,0,944,729),1068=>array(92,0,692,729),1069=>array(64,-14,684,742),1070=>array(92,-14,1119,742),1071=>array(64,0,678,729),1072=>array(43,-14,596,560),1073=>array(43,-14,655,792),1074=>array(84,0,589,547),1075=>array(84,0,499,547),1076=>array(56,-138,751,547),1077=>array(43,-14,630,560),1078=>array(15,0,980,547),1079=>array(49,-14,518,560),1080=>array(84,0,617,547),1081=>array(84,0,617,765),1082=>array(84,0,664,547),1083=>array(55,0,648,547),1084=>array(84,0,733,547),1085=>array(84,0,607,547),1086=>array(43,-14,644,560),1087=>array(84,0,607,547),1088=>array(84,-208,671,560),1089=>array(43,-14,526,560),1090=>array(4,0,575,547),1091=>array(12,-216,634,547),1092=>array(55,-208,937,760),1093=>array(15,0,630,547),1094=>array(84,-138,698,547),1095=>array(64,0,573,547),1096=>array(84,0,972,547),1097=>array(84,-138,1063,547),1098=>array(20,0,711,547),1099=>array(84,0,823,547),1100=>array(84,0,588,547),1101=>array(67,-14,550,560),1102=>array(84,-14,928,560),1103=>array(31,0,560,547),1104=>array(43,-14,630,803),1105=>array(43,-14,630,774),1106=>array(20,-216,669,760),1107=>array(84,0,520,803),1108=>array(43,-14,526,560),1109=>array(52,-14,548,560),1110=>array(84,0,259,760),1111=>array(17,0,325,774),1112=>array(-33,-216,259,760),1113=>array(44,0,942,547),1114=>array(84,0,912,547),1115=>array(20,0,656,760),1116=>array(84,0,664,803),1117=>array(84,0,617,803),1118=>array(12,-216,634,765),1119=>array(84,-138,607,547),1120=>array(50,-14,1043,729),1121=>array(43,-13,826,547),1122=>array(49,0,791,729),1123=>array(20,0,692,731),1124=>array(92,-14,948,742),1125=>array(84,-14,760,560),1126=>array(8,0,984,729),1127=>array(25,0,807,547),1128=>array(92,0,1351,729),1129=>array(84,0,1097,547),1130=>array(50,0,800,729),1131=>array(43,0,644,547),1132=>array(92,0,1137,729),1133=>array(84,0,964,547),1134=>array(54,-208,616,938),1135=>array(40,-193,493,756),1136=>array(9,0,1060,729),1137=>array(9,-208,1046,759),1138=>array(50,-14,800,742),1139=>array(43,-14,644,560),1140=>array(5,0,826,742),1141=>array(9,0,681,560),1142=>array(5,0,826,928),1143=>array(9,0,681,800),1144=>array(47,-216,1130,742),1145=>array(43,-216,1025,560),1146=>array(50,-14,1024,742),1147=>array(43,-14,820,560),1148=>array(57,-14,1348,928),1149=>array(47,-13,1126,828),1150=>array(50,-14,1043,910),1151=>array(43,-13,826,746),1152=>array(50,-208,670,742),1153=>array(43,-208,526,560),1154=>array(27,-33,521,488),1155=>array(-601,606,-85,822),1156=>array(-413,638,0,784),1157=>array(-365,595,-231,785),1158=>array(-365,595,-231,785),1159=>array(-796,592,4,788),1160=>array(-1069,-179,383,928),1161=>array(-996,-280,306,1022),1162=>array(92,-208,933,927),1163=>array(84,-208,782,765),1164=>array(23,0,692,729),1165=>array(0,0,567,702),1166=>array(92,0,702,729),1167=>array(84,-208,671,560),1168=>array(92,0,610,878),1169=>array(84,0,499,700),1170=>array(28,0,638,729),1171=>array(21,0,519,547),1172=>array(92,-200,728,729),1173=>array(84,-216,591,547),1174=>array(15,-157,1209,729),1175=>array(15,-138,980,547),1176=>array(66,-196,645,742),1177=>array(49,-196,518,560),1178=>array(92,-157,803,729),1179=>array(84,-138,664,547),1180=>array(92,0,803,729),1181=>array(84,0,664,547),1182=>array(23,0,803,729),1183=>array(7,0,664,760),1184=>array(24,0,1000,729),1185=>array(20,0,812,547),1186=>array(92,-157,932,729),1187=>array(84,-138,783,547),1188=>array(92,0,1075,729),1189=>array(84,0,847,547),1190=>array(92,-200,1193,729),1191=>array(84,-216,939,547),1192=>array(56,-14,924,743),1193=>array(55,-14,836,560),1194=>array(50,-196,670,742),1195=>array(43,-196,526,560),1196=>array(5,-157,677,729),1197=>array(4,-138,575,547),1198=>array(-10,0,734,729),1199=>array(12,-216,634,547),1200=>array(-10,0,734,729),1201=>array(12,-216,634,547),1202=>array(19,-157,751,729),1203=>array(15,-138,630,547),1204=>array(5,-157,1088,729),1205=>array(4,-138,976,547),1206=>array(81,-157,904,729),1207=>array(64,-138,749,547),1208=>array(81,0,716,729),1209=>array(64,0,573,547),1210=>array(81,0,716,729),1211=>array(84,0,634,760),1212=>array(7,-14,976,742),1213=>array(5,-14,761,560),1214=>array(7,-184,976,742),1215=>array(5,-161,761,560),1216=>array(92,0,280,729),1217=>array(15,0,1209,927),1218=>array(15,0,980,784),1219=>array(92,-200,769,729),1220=>array(84,-216,626,547),1221=>array(26,-208,926,729),1222=>array(21,-208,781,547),1223=>array(92,-200,745,729),1224=>array(84,-216,608,547),1225=>array(92,-208,933,729),1226=>array(84,-208,782,547),1227=>array(81,-157,716,729),1228=>array(64,-138,573,547),1229=>array(92,-208,1090,729),1230=>array(84,-208,908,547),1231=>array(84,0,259,760),1232=>array(5,0,769,935),1233=>array(43,-14,596,780),1234=>array(5,0,769,927),1235=>array(43,-14,596,774),1236=>array(0,0,1012,729),1237=>array(43,-14,1000,560),1238=>array(92,0,610,927),1239=>array(43,-14,630,784),1240=>array(51,-14,800,742),1241=>array(43,-14,630,560),1242=>array(51,-14,800,927),1243=>array(43,-14,630,774),1244=>array(15,0,1209,927),1245=>array(15,0,980,774),1246=>array(66,-14,645,927),1247=>array(49,-14,518,773),1248=>array(72,-33,728,729),1249=>array(43,-215,593,547),1250=>array(92,0,745,914),1251=>array(84,0,617,763),1252=>array(92,0,745,927),1253=>array(84,0,617,774),1254=>array(50,-14,800,927),1255=>array(43,-14,644,774),1256=>array(50,-14,800,742),1257=>array(43,-14,644,560),1258=>array(50,-14,800,927),1259=>array(43,-14,644,774),1260=>array(64,-14,684,927),1261=>array(67,-14,550,774),1262=>array(29,0,741,914),1263=>array(12,-216,634,763),1264=>array(29,0,741,927),1265=>array(12,-216,634,774),1266=>array(29,0,741,927),1267=>array(12,-216,634,800),1268=>array(81,0,716,927),1269=>array(64,0,573,774),1270=>array(92,-157,610,729),1271=>array(84,-138,499,547),1272=>array(92,0,944,927),1273=>array(84,0,823,774),1274=>array(28,-216,638,729),1275=>array(21,-217,519,547),1276=>array(19,-200,750,729),1277=>array(15,-216,620,547),1278=>array(19,0,751,729),1279=>array(15,0,630,547),1280=>array(70,0,670,729),1281=>array(44,0,524,547),1282=>array(70,-14,1081,729),1283=>array(44,-14,850,547),1284=>array(98,-14,1027,742),1285=>array(79,-14,836,560),1286=>array(98,-208,804,742),1287=>array(79,-208,668,560),1288=>array(26,-14,1150,729),1289=>array(21,-14,933,547),1290=>array(92,-14,1186,729),1291=>array(84,-14,939,547),1292=>array(50,-14,748,742),1293=>array(43,-14,544,546),1294=>array(5,-14,846,729),1295=>array(4,-14,709,547),1296=>array(67,-14,616,742),1297=>array(54,-14,493,560),1298=>array(46,-200,739,729),1299=>array(55,-216,648,547),1300=>array(46,0,1266,729),1301=>array(55,0,1053,547),1302=>array(92,0,1045,729),1303=>array(84,-208,964,560),1304=>array(64,0,1008,729),1305=>array(31,-14,965,560),1306=>array(50,-146,800,742),1307=>array(45,-208,632,559),1308=>array(30,0,1072,729),1309=>array(35,0,889,547),1310=>array(92,0,803,729),1311=>array(84,0,664,547),1312=>array(46,-200,1187,729),1313=>array(55,-216,980,547),1314=>array(92,-200,1193,729),1315=>array(84,-216,939,547),1316=>array(92,-157,933,729),1317=>array(84,-138,782,547),1329=>array(83,-38,731,729),1330=>array(83,0,655,743),1331=>array(26,0,728,743),1332=>array(22,0,731,743),1333=>array(83,-14,655,729),1334=>array(66,0,664,743),1335=>array(83,0,625,729),1336=>array(83,0,655,743),1337=>array(83,-13,903,742),1338=>array(26,-14,728,729),1339=>array(83,0,648,729),1340=>array(83,0,549,729),1341=>array(83,-14,888,729),1342=>array(62,-12,722,741),1343=>array(74,0,639,729),1344=>array(4,-46,598,729),1345=>array(66,-48,664,743),1346=>array(18,0,715,743),1347=>array(22,0,660,735),1348=>array(83,-14,780,729),1349=>array(57,-14,645,743),1350=>array(0,-14,697,729),1351=>array(57,-14,655,729),1352=>array(83,0,648,743),1353=>array(40,-48,638,743),1354=>array(18,0,789,743),1355=>array(57,0,654,743),1356=>array(83,0,780,743),1357=>array(92,-14,720,729),1358=>array(18,0,715,729),1359=>array(53,-14,641,743),1360=>array(83,0,648,743),1361=>array(57,-14,645,743),1362=>array(83,0,567,729),1363=>array(22,0,811,729),1364=>array(9,0,645,743),1365=>array(49,-14,799,742),1366=>array(44,-14,833,729),1369=>array(104,481,230,760),1370=>array(57,418,250,729),1371=>array(0,616,310,800),1372=>array(0,595,375,893),1373=>array(-7,614,290,847),1374=>array(0,586,460,878),1375=>array(40,618,434,893),1377=>array(71,-13,863,547),1378=>array(76,-208,571,560),1379=>array(40,-208,700,559),1380=>array(76,-208,703,560),1381=>array(71,-14,567,760),1382=>array(40,-208,700,559),1383=>array(76,0,532,760),1384=>array(76,-208,579,560),1385=>array(76,-208,756,560),1386=>array(40,-14,700,760),1387=>array(76,-208,571,760),1388=>array(76,-208,410,547),1389=>array(76,-208,909,760),1390=>array(40,-14,600,760),1391=>array(71,-208,567,760),1392=>array(76,0,571,760),1393=>array(26,-13,536,760),1394=>array(76,-208,703,560),1395=>array(62,-13,570,768),1396=>array(71,-13,699,760),1397=>array(-30,-216,233,547),1398=>array(-61,-13,567,760),1399=>array(13,-208,456,560),1400=>array(76,0,571,560),1401=>array(5,-208,375,547),1402=>array(71,-208,863,546),1403=>array(44,-208,533,560),1404=>array(76,0,622,560),1405=>array(71,-13,567,547),1406=>array(71,-208,699,760),1407=>array(71,-13,863,560),1408=>array(76,-208,571,560),1409=>array(44,-216,631,559),1410=>array(76,0,475,547),1411=>array(71,-208,863,760),1412=>array(-56,-208,604,560),1413=>array(44,-14,645,560),1414=>array(31,-190,774,760),1415=>array(71,-14,808,760),1417=>array(101,0,259,547),1418=>array(49,180,325,359),1456=>array(296,-229,394,-10),1457=>array(147,-229,501,-10),1458=>array(138,-229,492,-10),1459=>array(125,-229,492,-10),1460=>array(296,-171,394,-73),1461=>array(223,-171,467,-73),1462=>array(235,-229,455,-10),1463=>array(174,-171,516,0),1464=>array(187,-217,504,0),1465=>array(-24,547,73,723),1466=>array(-24,547,73,723),1467=>array(187,-239,528,-5),1468=>array(301,225,399,322),1469=>array(296,-217,394,-22),1470=>array(54,413,361,555),1471=>array(187,547,504,710),1472=>array(98,-98,273,645),1473=>array(753,613,851,710),1474=>array(137,613,235,710),1475=>array(98,0,273,547),1478=>array(78,0,462,547),1479=>array(187,-229,504,-10),1488=>array(84,0,644,547),1489=>array(43,0,567,547),1490=>array(43,-9,418,547),1491=>array(43,0,545,547),1492=>array(91,0,596,547),1493=>array(91,0,252,547),1494=>array(43,0,357,547),1495=>array(91,0,596,547),1496=>array(90,-13,624,553),1497=>array(66,164,228,547),1498=>array(43,-240,487,547),1499=>array(43,0,511,547),1500=>array(43,0,527,711),1501=>array(91,0,605,547),1502=>array(43,0,633,554),1503=>array(91,-240,252,547),1504=>array(43,0,362,547),1505=>array(90,-13,624,547),1506=>array(43,-101,575,547),1507=>array(91,-240,584,547),1508=>array(91,0,603,547),1509=>array(11,-240,543,548),1510=>array(33,0,564,547),1511=>array(91,-240,660,546),1512=>array(43,0,511,547),1513=>array(20,0,750,547),1514=>array(10,-4,592,547),1520=>array(91,0,574,547),1521=>array(66,0,524,547),1522=>array(66,164,500,547),1523=>array(84,361,360,547),1524=>array(84,361,626,547),1542=>array(-2,-20,630,892),1543=>array(-2,-20,630,897),1545=>array(65,0,811,635),1546=>array(65,0,1084,635),1548=>array(98,0,322,331),1557=>array(121,612,379,868),1563=>array(98,0,323,689),1567=>array(69,0,515,742),1569=>array(73,20,437,493),1570=>array(-20,0,362,955),1571=>array(75,0,259,993),1572=>array(-42,-244,547,603),1573=>array(76,-245,259,760),1574=>array(63,-107,863,603),1575=>array(84,0,259,760),1576=>array(63,-149,921,327),1577=>array(48,-30,540,513),1578=>array(63,-5,921,415),1579=>array(63,-5,921,537),1580=>array(77,-244,720,425),1581=>array(77,-244,720,425),1582=>array(77,-244,720,579),1583=>array(61,-15,442,415),1584=>array(61,-15,442,579),1585=>array(-42,-244,508,269),1586=>array(-42,-244,508,457),1587=>array(63,-244,1297,366),1588=>array(63,-244,1297,586),1589=>array(63,-244,1265,362),1590=>array(63,-244,1265,457),1591=>array(70,0,971,760),1592=>array(70,0,971,760),1593=>array(87,-244,720,521),1594=>array(87,-244,720,652),1600=>array(-10,0,352,125),1601=>array(63,-24,1082,627),1602=>array(52,-215,825,635),1603=>array(70,-27,814,760),1604=>array(70,-142,778,760),1605=>array(68,-244,660,369),1606=>array(62,-165,779,457),1607=>array(48,-30,540,358),1608=>array(-42,-244,547,322),1609=>array(63,-107,863,462),1610=>array(63,-244,863,462),1611=>array(107,591,393,825),1612=>array(107,591,393,881),1613=>array(107,-239,393,-5),1614=>array(107,591,393,723),1615=>array(107,590,393,881),1616=>array(107,-137,393,-5),1617=>array(88,599,412,869),1618=>array(115,610,383,878),1619=>array(59,584,441,735),1620=>array(154,601,335,822),1621=>array(155,-245,336,-23),1623=>array(107,615,393,906),1626=>array(99,616,401,775),1632=>array(218,195,392,366),1633=>array(140,0,431,635),1634=>array(12,0,598,635),1635=>array(12,0,597,635),1636=>array(74,-10,530,646),1637=>array(63,-10,547,643),1638=>array(37,0,574,635),1639=>array(15,0,596,635),1640=>array(15,0,596,635),1641=>array(32,0,590,640),1642=>array(65,0,545,635),1643=>array(0,-118,349,318),1644=>array(63,418,278,729),1645=>array(42,101,502,537),1646=>array(63,-5,921,327),1647=>array(52,-215,825,484),1648=>array(216,600,284,885),1652=>array(51,641,232,863),1657=>array(63,-5,921,599),1658=>array(63,-5,921,566),1659=>array(63,-244,921,327),1660=>array(63,-171,921,415),1661=>array(63,-5,921,566),1662=>array(63,-244,921,327),1663=>array(63,-5,921,566),1664=>array(63,-244,921,327),1665=>array(77,-244,720,725),1666=>array(77,-244,720,737),1667=>array(77,-244,720,425),1668=>array(77,-244,720,425),1669=>array(77,-244,720,737),1670=>array(77,-244,720,425),1671=>array(77,-244,720,425),1672=>array(61,-15,442,746),1673=>array(61,-180,442,415),1674=>array(61,-171,442,415),1675=>array(61,-171,442,746),1676=>array(61,-15,442,586),1677=>array(61,-146,442,415),1678=>array(61,-15,442,708),1679=>array(61,-15,442,684),1680=>array(61,-15,442,708),1681=>array(-42,-244,520,648),1682=>array(-42,-244,542,556),1683=>array(-42,-244,587,269),1684=>array(-42,-244,522,269),1685=>array(-42,-244,753,269),1686=>array(-42,-244,522,269),1687=>array(-42,-244,508,464),1688=>array(-42,-244,508,586),1689=>array(-42,-244,508,586),1690=>array(63,-244,1297,464),1691=>array(63,-244,1297,366),1692=>array(63,-244,1297,586),1693=>array(63,-244,1265,362),1694=>array(63,-244,1265,586),1695=>array(70,0,971,760),1696=>array(87,-244,720,781),1697=>array(63,-24,1082,484),1698=>array(63,-171,1082,484),1699=>array(63,-171,1082,635),1700=>array(63,-24,1082,786),1701=>array(63,-293,1082,484),1702=>array(63,-24,1082,786),1703=>array(52,-215,825,635),1704=>array(52,-215,825,757),1705=>array(63,-39,1024,760),1706=>array(63,-39,1194,760),1707=>array(63,-39,1024,760),1708=>array(70,-27,814,760),1709=>array(70,-27,814,854),1710=>array(70,-293,814,760),1711=>array(63,-39,1024,910),1712=>array(63,-39,1024,910),1713=>array(63,-39,1024,910),1714=>array(63,-171,1024,910),1715=>array(63,-293,1024,910),1716=>array(63,-39,1024,1025),1717=>array(70,-142,841,971),1718=>array(70,-142,778,952),1719=>array(70,-142,781,1025),1720=>array(70,-391,778,760),1721=>array(62,-317,779,464),1722=>array(62,-165,779,366),1723=>array(62,-165,779,636),1724=>array(62,-330,779,464),1725=>array(62,-165,779,586),1726=>array(70,-33,877,506),1727=>array(77,-244,720,579),1734=>array(-42,-244,547,556),1740=>array(63,-107,863,462),1742=>array(63,-107,863,556),1749=>array(48,-30,540,358),1776=>array(218,195,392,366),1777=>array(140,0,431,635),1778=>array(12,0,598,635),1779=>array(12,0,597,635),1780=>array(12,0,573,650),1781=>array(30,-8,580,643),1782=>array(85,0,514,645),1783=>array(15,0,596,635),1784=>array(15,0,596,635),1785=>array(32,0,590,640),1984=>array(48,-14,648,742),1985=>array(69,0,583,729),1986=>array(80,0,616,729),1987=>array(80,0,616,729),1988=>array(80,0,616,729),1989=>array(80,0,616,729),1990=>array(80,0,616,729),1991=>array(98,0,599,729),1992=>array(98,0,599,729),1993=>array(70,0,625,742),1994=>array(84,0,259,729),1995=>array(43,-14,504,465),1996=>array(15,0,529,729),1997=>array(15,0,637,451),1998=>array(84,0,607,451),1999=>array(84,0,607,451),2000=>array(46,0,548,742),2001=>array(84,0,607,667),2002=>array(43,0,820,742),2003=>array(84,0,467,729),2004=>array(84,0,467,729),2005=>array(84,0,584,729),2006=>array(84,0,604,729),2007=>array(15,0,360,729),2008=>array(84,0,938,532),2009=>array(15,0,491,729),2010=>array(15,0,811,729),2011=>array(84,0,607,451),2012=>array(15,0,637,729),2013=>array(84,0,869,729),2014=>array(84,0,543,729),2015=>array(43,0,692,729),2016=>array(15,0,491,729),2017=>array(15,0,637,729),2018=>array(43,0,531,729),2019=>array(84,0,543,729),2020=>array(84,0,543,581),2021=>array(84,0,543,729),2022=>array(43,0,531,729),2023=>array(43,0,531,729),2027=>array(95,668,403,760),2028=>array(63,638,438,777),2029=>array(185,654,319,774),2030=>array(65,616,433,800),2031=>array(33,616,438,803),2032=>array(63,638,438,777),2033=>array(33,616,438,803),2034=>array(183,-212,317,-92),2035=>array(96,654,404,774),2036=>array(63,418,278,729),2037=>array(103,418,318,729),2040=>array(84,0,607,562),2041=>array(84,0,607,564),2042=>array(-10,0,425,125),3647=>array(62,-147,638,760),3713=>array(43,-14,706,560),3714=>array(43,-14,723,560),3716=>array(43,-14,704,560),3719=>array(21,-241,521,561),3720=>array(42,0,705,560),3722=>array(40,-269,768,560),3725=>array(40,-24,713,610),3732=>array(42,-14,647,560),3733=>array(42,-19,647,561),3734=>array(-22,-240,684,560),3735=>array(20,-14,768,560),3737=>array(37,-15,681,560),3738=>array(38,-15,664,561),3739=>array(38,-15,664,760),3740=>array(60,-12,910,626),3741=>array(64,-14,762,760),3742=>array(76,-14,773,560),3743=>array(76,-14,773,760),3745=>array(24,-14,771,547),3746=>array(40,-23,713,760),3747=>array(48,-10,733,615),3749=>array(41,-33,693,560),3751=>array(33,-33,640,561),3754=>array(51,-21,819,724),3755=>array(44,-21,935,620),3757=>array(53,-20,662,606),3758=>array(48,-14,825,698),3759=>array(43,-259,897,648),3760=>array(36,-16,658,567),3761=>array(-653,610,-31,896),3762=>array(39,0,563,593),3763=>array(-479,0,563,875),3764=>array(-654,622,-62,950),3765=>array(-654,633,13,962),3766=>array(-654,622,-62,950),3767=>array(-654,633,13,962),3768=>array(-426,-385,-165,-55),3769=>array(-473,-316,-174,-28),3771=>array(-653,610,-31,896),3772=>array(-682,-311,15,-48),3773=>array(39,-220,691,776),3776=>array(83,-13,444,561),3777=>array(83,-13,818,561),3778=>array(-37,-14,458,936),3779=>array(23,-14,595,879),3780=>array(-15,-35,585,809),3782=>array(70,-240,688,582),3784=>array(-413,659,-297,844),3785=>array(-627,622,-22,918),3786=>array(-667,621,39,965),3787=>array(-521,612,-187,917),3788=>array(-682,603,15,866),3789=>array(-479,668,-229,875),3792=>array(66,-29,723,563),3793=>array(25,-139,721,586),3794=>array(31,-80,603,711),3795=>array(24,-14,882,981),3796=>array(48,-156,696,711),3797=>array(48,-156,696,711),3798=>array(64,-14,894,950),3799=>array(43,-240,706,560),3800=>array(72,-269,774,582),3801=>array(58,-14,858,564),3804=>array(44,-21,1301,620),3805=>array(44,-21,1305,620),4256=>array(47,-14,827,819),4257=>array(39,-0,719,819),4258=>array(37,-138,667,828),4259=>array(41,-15,793,819),4260=>array(29,0,572,828),4261=>array(24,0,729,828),4262=>array(15,-14,709,819),4263=>array(49,-14,890,828),4264=>array(4,0,415,862),4265=>array(39,0,581,819),4266=>array(18,-14,796,820),4267=>array(48,-14,837,819),4268=>array(43,0,586,819),4269=>array(37,-157,817,829),4270=>array(11,-14,731,822),4271=>array(20,0,585,823),4272=>array(43,-15,863,820),4273=>array(43,-15,587,820),4274=>array(43,-0,586,828),4275=>array(37,-170,817,828),4276=>array(37,0,828,825),4277=>array(28,0,695,820),4278=>array(44,0,586,828),4279=>array(34,0,577,820),4280=>array(39,-14,582,820),4281=>array(43,0,586,819),4282=>array(45,-14,778,827),4283=>array(46,-15,822,820),4284=>array(43,-0,586,819),4285=>array(29,-15,594,828),4286=>array(43,-0,586,819),4287=>array(15,0,726,819),4288=>array(18,-14,796,820),4289=>array(43,0,586,820),4290=>array(37,-15,652,828),4291=>array(9,0,552,820),4292=>array(33,0,561,820),4293=>array(24,-14,714,828),4304=>array(49,-14,505,599),4305=>array(49,-14,515,823),4306=>array(44,-232,578,561),4307=>array(49,-225,786,557),4308=>array(49,-232,496,557),4309=>array(49,-232,505,557),4310=>array(25,-14,502,828),4311=>array(49,-14,779,557),4312=>array(49,0,515,557),4313=>array(49,-232,506,542),4314=>array(49,-225,1025,562),4315=>array(49,-14,505,828),4316=>array(63,-14,520,819),4317=>array(49,-0,765,557),4318=>array(49,-14,505,818),4319=>array(49,-232,504,560),4320=>array(49,0,774,830),4321=>array(63,-14,520,818),4322=>array(49,-232,651,670),4323=>array(29,-232,533,604),4324=>array(49,-232,792,558),4325=>array(49,-232,496,818),4326=>array(49,-225,766,557),4327=>array(49,-232,505,549),4328=>array(20,-14,489,828),4329=>array(63,0,520,828),4330=>array(49,-232,573,548),4331=>array(49,-14,504,818),4332=>array(64,-15,534,828),4333=>array(49,-232,517,818),4334=>array(63,-14,520,818),4335=>array(24,-232,516,580),4336=>array(49,-15,505,823),4337=>array(49,-14,505,823),4338=>array(49,-146,504,557),4339=>array(49,-232,505,558),4340=>array(49,-232,504,828),4341=>array(49,-14,558,828),4342=>array(49,-232,803,557),4343=>array(49,-232,556,557),4344=>array(49,-232,505,549),4345=>array(44,-232,578,561),4346=>array(49,-111,505,557),4347=>array(49,0,399,500),4348=>array(24,400,294,828),5121=>array(5,0,769,729),5122=>array(5,0,769,1056),5123=>array(5,0,769,729),5124=>array(5,0,769,928),5125=>array(92,0,821,729),5126=>array(92,0,821,928),5127=>array(92,0,821,927),5129=>array(92,0,821,729),5130=>array(84,0,813,729),5131=>array(84,0,813,928),5132=>array(92,0,1013,729),5133=>array(5,0,925,729),5134=>array(92,0,1013,729),5135=>array(5,0,925,729),5136=>array(92,0,1013,928),5137=>array(5,0,925,928),5138=>array(92,0,1065,729),5139=>array(92,0,1056,729),5140=>array(92,0,1065,928),5141=>array(92,0,1056,928),5142=>array(92,0,821,928),5143=>array(92,0,1057,729),5144=>array(84,0,1058,729),5145=>array(92,0,1057,928),5146=>array(84,0,1058,928),5147=>array(84,0,813,928),5149=>array(92,607,226,728),5150=>array(60,326,473,734),5151=>array(31,338,379,722),5152=>array(31,338,379,722),5153=>array(60,392,338,711),5154=>array(60,352,338,670),5155=>array(60,392,338,670),5156=>array(60,392,338,670),5157=>array(31,327,518,749),5158=>array(60,326,414,734),5159=>array(92,304,226,424),5160=>array(60,494,338,569),5161=>array(60,392,338,670),5162=>array(60,392,338,693),5163=>array(5,0,1167,729),5164=>array(5,0,940,729),5165=>array(92,0,1170,729),5166=>array(84,0,1251,729),5167=>array(5,0,769,729),5168=>array(5,0,769,1056),5169=>array(5,0,769,729),5170=>array(5,0,769,928),5171=>array(73,0,802,729),5172=>array(73,0,802,928),5173=>array(73,0,802,927),5175=>array(73,0,802,729),5176=>array(73,0,802,729),5177=>array(73,0,802,928),5178=>array(92,0,1013,729),5179=>array(5,0,925,729),5180=>array(92,0,1013,729),5181=>array(5,0,925,729),5182=>array(92,0,1013,928),5183=>array(5,0,925,928),5184=>array(92,0,1046,729),5185=>array(73,0,1056,729),5186=>array(92,0,1046,928),5187=>array(73,0,1056,928),5188=>array(92,0,1046,729),5189=>array(73,0,1058,729),5190=>array(92,0,1046,928),5191=>array(73,0,1058,928),5192=>array(73,0,802,927),5193=>array(60,326,520,727),5194=>array(60,326,172,734),5196=>array(92,-14,720,729),5197=>array(92,0,720,1056),5198=>array(92,0,720,743),5199=>array(92,0,720,928),5200=>array(73,0,759,729),5201=>array(73,0,759,928),5202=>array(73,0,759,927),5204=>array(73,0,759,729),5205=>array(56,0,742,729),5206=>array(56,0,742,928),5207=>array(92,-14,964,729),5208=>array(92,-14,964,729),5209=>array(92,0,964,743),5210=>array(92,0,964,743),5211=>array(92,0,964,928),5212=>array(92,0,964,928),5213=>array(92,0,1003,729),5214=>array(73,0,970,729),5215=>array(92,0,1003,928),5216=>array(73,0,970,928),5217=>array(92,0,986,729),5218=>array(56,0,968,729),5219=>array(92,0,986,928),5220=>array(56,0,968,928),5221=>array(92,0,986,729),5222=>array(60,326,427,733),5223=>array(92,-14,949,734),5224=>array(92,0,949,743),5225=>array(73,0,967,734),5226=>array(56,0,960,734),5227=>array(41,0,651,743),5228=>array(92,0,702,1056),5229=>array(92,0,702,743),5230=>array(92,0,702,928),5231=>array(41,-14,651,729),5232=>array(41,-14,651,928),5233=>array(41,-14,708,927),5234=>array(92,-14,702,729),5235=>array(92,-14,702,928),5236=>array(92,0,937,743),5237=>array(41,0,891,743),5238=>array(92,0,939,743),5239=>array(92,0,891,743),5240=>array(92,0,939,928),5241=>array(92,0,891,928),5242=>array(92,-14,937,729),5243=>array(41,-14,891,729),5244=>array(92,-14,937,928),5245=>array(41,-14,891,928),5246=>array(92,-14,939,729),5247=>array(92,-14,891,729),5248=>array(92,-14,939,928),5249=>array(92,-14,891,928),5250=>array(92,-14,939,729),5251=>array(60,319,445,734),5252=>array(60,319,445,734),5253=>array(41,0,881,743),5254=>array(92,0,881,743),5255=>array(41,-14,881,734),5256=>array(92,-14,881,734),5257=>array(41,0,651,743),5258=>array(92,0,702,1056),5259=>array(92,0,702,743),5260=>array(92,0,702,928),5261=>array(41,-14,651,729),5262=>array(41,-14,651,928),5263=>array(41,-14,714,927),5264=>array(92,-14,702,729),5265=>array(92,-14,702,928),5266=>array(92,0,937,743),5267=>array(41,0,891,743),5268=>array(92,0,988,743),5269=>array(92,0,891,743),5270=>array(92,0,988,928),5271=>array(92,0,891,928),5272=>array(92,-14,937,729),5273=>array(41,-14,891,729),5274=>array(92,-14,937,928),5275=>array(41,-14,891,928),5276=>array(92,-14,988,729),5277=>array(92,-14,891,729),5278=>array(92,-14,988,928),5279=>array(92,-14,891,928),5280=>array(92,-14,988,729),5281=>array(60,319,445,734),5282=>array(60,319,445,734),5283=>array(27,0,535,729),5284=>array(92,0,599,1056),5285=>array(92,0,599,729),5286=>array(92,0,599,928),5287=>array(27,0,535,729),5288=>array(27,0,535,928),5289=>array(27,0,598,927),5290=>array(92,0,599,729),5291=>array(92,0,599,928),5292=>array(92,0,790,729),5293=>array(27,0,771,729),5294=>array(92,0,836,729),5295=>array(92,0,790,729),5296=>array(92,0,836,928),5297=>array(92,0,790,928),5298=>array(92,0,790,729),5299=>array(27,0,790,729),5300=>array(92,0,790,928),5301=>array(27,0,790,928),5302=>array(92,0,836,729),5303=>array(92,0,790,729),5304=>array(92,0,836,928),5305=>array(92,0,790,928),5306=>array(92,0,836,729),5307=>array(60,326,380,734),5308=>array(60,326,492,733),5309=>array(60,326,380,734),5312=>array(84,-14,947,468),5313=>array(41,-14,904,786),5314=>array(41,-14,904,468),5315=>array(41,-14,904,667),5316=>array(27,0,890,482),5317=>array(27,0,890,667),5318=>array(27,0,890,667),5319=>array(41,0,904,482),5320=>array(41,0,904,667),5321=>array(92,-14,1197,468),5322=>array(84,-14,1163,468),5323=>array(92,0,1172,482),5324=>array(41,0,1144,482),5325=>array(92,0,1172,667),5326=>array(41,0,1144,667),5327=>array(41,0,904,667),5328=>array(60,477,604,742),5329=>array(60,319,440,734),5330=>array(60,477,604,742),5331=>array(84,0,947,468),5332=>array(41,0,904,786),5333=>array(41,0,904,468),5334=>array(41,0,904,667),5335=>array(27,0,890,468),5336=>array(27,0,890,667),5337=>array(27,0,890,667),5338=>array(41,0,904,468),5339=>array(41,0,904,667),5340=>array(92,0,1190,468),5341=>array(84,0,1163,468),5342=>array(92,0,1199,468),5343=>array(41,0,1144,468),5344=>array(92,0,1199,667),5345=>array(41,0,1144,667),5346=>array(92,0,1187,468),5347=>array(27,0,1130,468),5348=>array(92,0,1187,667),5349=>array(27,0,1130,667),5350=>array(92,0,1199,468),5351=>array(41,0,1144,468),5352=>array(92,0,1199,667),5353=>array(41,0,1144,667),5354=>array(60,477,604,734),5356=>array(73,0,802,729),5357=>array(41,0,638,729),5358=>array(92,0,736,1056),5359=>array(92,0,689,729),5360=>array(92,0,689,928),5361=>array(41,0,638,729),5362=>array(41,0,638,928),5363=>array(41,0,694,927),5364=>array(92,0,689,729),5365=>array(92,0,689,928),5366=>array(92,0,906,729),5367=>array(41,0,875,729),5368=>array(92,0,926,729),5369=>array(92,0,905,729),5370=>array(92,0,926,928),5371=>array(92,0,905,928),5372=>array(92,0,906,729),5373=>array(41,0,875,729),5374=>array(92,0,906,928),5375=>array(41,0,875,928),5376=>array(92,0,926,729),5377=>array(92,0,905,729),5378=>array(92,0,926,928),5379=>array(92,0,905,928),5380=>array(92,0,926,729),5381=>array(60,326,437,734),5382=>array(60,319,404,742),5383=>array(60,326,437,734),5392=>array(41,-14,882,743),5393=>array(41,-14,882,743),5394=>array(41,-14,882,928),5395=>array(41,-14,1095,482),5396=>array(41,-14,1095,667),5397=>array(41,-14,1095,482),5398=>array(41,-14,1095,667),5399=>array(92,-14,1168,743),5400=>array(41,-14,1118,743),5401=>array(92,-14,1168,743),5402=>array(41,-14,1118,743),5403=>array(92,-14,1168,928),5404=>array(41,-14,1118,928),5405=>array(92,-14,1390,482),5406=>array(41,-14,1336,482),5407=>array(92,-14,1390,667),5408=>array(41,-14,1336,667),5409=>array(92,-14,1390,482),5410=>array(41,-14,1336,482),5411=>array(92,-14,1390,667),5412=>array(41,-14,1336,667),5413=>array(60,469,690,747),5414=>array(84,0,684,729),5415=>array(92,0,692,1056),5416=>array(92,0,692,729),5417=>array(92,0,692,928),5418=>array(84,0,684,729),5419=>array(84,0,684,928),5420=>array(84,0,750,927),5421=>array(92,0,692,729),5422=>array(92,0,692,928),5423=>array(92,0,911,729),5424=>array(84,0,919,729),5425=>array(92,0,929,729),5426=>array(92,0,912,729),5427=>array(92,0,929,928),5428=>array(92,0,912,928),5429=>array(92,0,911,729),5430=>array(84,0,919,729),5431=>array(92,0,911,928),5432=>array(84,0,919,928),5433=>array(92,0,929,729),5434=>array(92,0,912,729),5435=>array(92,0,929,928),5436=>array(92,0,912,928),5437=>array(92,0,929,928),5438=>array(60,326,438,734),5440=>array(60,392,338,670),5441=>array(60,326,454,734),5442=>array(92,-14,949,468),5443=>array(84,-14,941,468),5444=>array(27,0,884,482),5445=>array(92,0,949,786),5446=>array(92,0,949,482),5447=>array(92,0,949,667),5448=>array(92,0,692,729),5449=>array(92,0,692,928),5450=>array(92,0,692,729),5451=>array(41,0,641,729),5452=>array(41,0,641,928),5453=>array(41,0,641,729),5454=>array(92,0,911,928),5455=>array(41,0,875,928),5456=>array(60,326,438,727),5458=>array(73,0,802,729),5459=>array(51,0,769,743),5460=>array(51,-14,769,1056),5461=>array(51,-14,769,729),5462=>array(51,-14,769,928),5463=>array(73,0,844,663),5464=>array(73,0,844,928),5465=>array(84,0,855,663),5466=>array(84,0,855,928),5467=>array(92,0,1099,928),5468=>array(84,0,1058,928),5469=>array(60,311,546,675),5470=>array(92,-14,720,743),5471=>array(92,-14,720,743),5472=>array(92,-14,720,743),5473=>array(92,-14,720,743),5474=>array(92,-14,720,928),5475=>array(92,-14,720,928),5476=>array(54,0,759,729),5477=>array(54,0,759,928),5478=>array(56,0,762,729),5479=>array(56,0,762,928),5480=>array(92,0,1006,928),5481=>array(56,0,968,928),5482=>array(60,326,512,733),5492=>array(41,0,893,743),5493=>array(84,0,936,743),5494=>array(84,0,936,928),5495=>array(41,-14,893,729),5496=>array(41,-14,893,928),5497=>array(84,-14,936,729),5498=>array(84,-14,936,928),5499=>array(60,319,562,734),5500=>array(92,0,745,729),5501=>array(60,326,454,734),5502=>array(60,0,1197,1056),5503=>array(60,0,1197,743),5504=>array(60,0,1197,928),5505=>array(60,-14,1146,729),5506=>array(60,-14,1146,928),5507=>array(60,-14,1197,729),5508=>array(60,-14,1197,928),5509=>array(60,319,939,734),5514=>array(41,0,893,743),5515=>array(84,0,936,743),5516=>array(41,-14,893,729),5517=>array(84,-14,936,729),5518=>array(60,0,1550,1056),5519=>array(60,0,1550,743),5520=>array(60,0,1550,928),5521=>array(60,-14,1203,741),5522=>array(60,-14,1203,928),5523=>array(60,-14,1550,741),5524=>array(60,-14,1550,928),5525=>array(60,335,792,741),5526=>array(60,335,1217,741),5536=>array(41,0,904,709),5537=>array(41,0,904,709),5538=>array(27,-242,890,468),5539=>array(27,-242,890,667),5540=>array(41,-242,904,468),5541=>array(41,-242,904,667),5542=>array(60,344,604,734),5543=>array(84,0,771,729),5544=>array(5,0,692,729),5545=>array(5,0,692,928),5546=>array(84,0,771,729),5547=>array(84,0,771,928),5548=>array(5,0,692,729),5549=>array(5,0,692,928),5550=>array(15,326,438,734),5551=>array(92,-14,702,729),5598=>array(92,0,778,729),5601=>array(52,0,738,729),5702=>array(60,326,439,734),5703=>array(60,240,439,820),5742=>array(10,0,403,306),5743=>array(60,0,1146,743),5744=>array(60,0,1499,743),5745=>array(60,0,1975,743),5746=>array(60,0,1975,928),5747=>array(60,-14,1628,741),5748=>array(60,-14,1586,928),5749=>array(60,-14,1975,741),5750=>array(60,-14,1975,928),5760=>array(-10,219,553,354),5761=>array(-10,-125,646,354),5762=>array(-10,-125,955,354),5763=>array(-10,-125,1264,354),5764=>array(-10,-125,1572,354),5765=>array(-10,-125,1881,354),5766=>array(-10,219,637,697),5767=>array(-10,219,945,697),5768=>array(-10,219,1264,697),5769=>array(-10,219,1569,697),5770=>array(-10,219,1881,697),5771=>array(-10,-125,579,697),5772=>array(-10,-125,888,697),5773=>array(-10,-125,1198,697),5774=>array(-10,-125,1507,697),5775=>array(-10,-125,1817,697),5776=>array(-10,41,646,532),5777=>array(-10,41,955,532),5778=>array(-10,41,1264,532),5779=>array(-10,41,1572,532),5780=>array(-10,41,1881,532),5781=>array(-10,-125,579,697),5782=>array(-10,-125,948,697),5783=>array(-10,-109,798,354),5784=>array(-10,-254,1244,354),5785=>array(-10,219,1569,928),5786=>array(-10,14,750,354),5787=>array(55,-49,648,622),5788=>array(-10,-49,583,622),7424=>array(15,0,637,547),7425=>array(0,0,755,547),7426=>array(43,-14,1000,560),7427=>array(20,0,564,547),7428=>array(43,-14,526,560),7429=>array(84,-1,611,547),7430=>array(20,-1,611,547),7431=>array(92,0,480,547),7432=>array(54,-14,493,560),7433=>array(84,-213,259,547),7434=>array(44,-14,416,547),7435=>array(84,0,684,547),7436=>array(-18,0,499,547),7437=>array(84,0,733,547),7438=>array(84,0,617,547),7439=>array(43,-14,644,560),7440=>array(43,-14,526,560),7441=>array(43,-27,617,573),7442=>array(43,31,617,515),7443=>array(13,-28,653,579),7444=>array(43,-14,1046,560),7446=>array(43,273,644,560),7447=>array(44,-14,646,273),7448=>array(51,0,515,547),7449=>array(21,0,560,547),7450=>array(21,0,560,547),7451=>array(4,0,575,547),7452=>array(84,-14,607,547),7453=>array(85,10,646,560),7454=>array(69,10,857,561),7455=>array(19,-238,651,560),7456=>array(15,0,637,547),7457=>array(35,0,889,547),7458=>array(45,0,534,547),7459=>array(57,-14,581,547),7462=>array(84,0,499,547),7463=>array(15,0,637,547),7464=>array(84,0,607,547),7465=>array(51,0,515,547),7466=>array(84,0,698,547),7467=>array(55,0,648,547),7468=>array(3,326,484,734),7469=>array(0,326,638,734),7470=>array(58,326,436,734),7472=>array(58,326,490,734),7473=>array(58,326,384,734),7474=>array(58,326,384,734),7475=>array(31,318,471,742),7476=>array(58,326,469,734),7477=>array(58,326,176,734),7478=>array(-35,214,176,734),7479=>array(58,326,507,734),7480=>array(58,326,384,734),7481=>array(58,326,569,734),7482=>array(58,326,469,734),7483=>array(58,326,469,734),7484=>array(31,318,504,742),7485=>array(39,318,471,742),7486=>array(58,326,436,734),7487=>array(58,326,473,734),7488=>array(3,326,426,734),7489=>array(58,318,454,734),7490=>array(19,326,675,734),7491=>array(53,318,402,640),7492=>array(53,318,402,640),7493=>array(53,318,423,640),7494=>array(53,318,656,640),7495=>array(53,318,423,751),7496=>array(53,318,423,751),7497=>array(53,318,423,640),7498=>array(53,318,423,640),7499=>array(53,318,330,640),7500=>array(53,318,330,640),7501=>array(53,205,423,639),7502=>array(53,207,164,632),7503=>array(53,326,431,751),7504=>array(53,326,607,640),7505=>array(53,205,399,640),7506=>array(53,318,432,640),7507=>array(53,318,357,640),7508=>array(53,479,432,640),7509=>array(53,318,432,479),7510=>array(53,209,423,640),7511=>array(53,326,332,719),7512=>array(53,318,399,632),7513=>array(53,332,407,640),7514=>array(53,318,607,632),7515=>array(53,326,445,632),7517=>array(53,209,423,759),7518=>array(10,209,420,632),7519=>array(27,318,406,756),7520=>array(41,209,457,635),7521=>array(16,209,391,632),7522=>array(53,0,164,425),7523=>array(54,0,314,313),7524=>array(53,-8,399,306),7525=>array(53,0,445,306),7526=>array(53,-117,423,433),7527=>array(10,-117,420,306),7528=>array(53,-117,423,314),7529=>array(41,-117,457,309),7530=>array(16,-117,391,306),7543=>array(84,-216,671,559),7544=>array(58,326,469,734),7547=>array(84,0,461,547),7549=>array(5,-208,742,560),7557=>array(84,-216,434,760),7579=>array(53,318,423,640),7580=>array(53,318,357,640),7581=>array(53,288,357,640),7582=>array(53,318,432,751),7583=>array(53,318,330,640),7584=>array(53,326,321,751),7585=>array(53,205,292,632),7586=>array(53,205,423,632),7587=>array(53,207,399,632),7588=>array(53,326,291,751),7589=>array(53,326,226,632),7590=>array(53,326,291,632),7591=>array(53,326,291,632),7592=>array(53,205,375,751),7593=>array(53,205,270,751),7594=>array(53,205,274,751),7595=>array(53,326,314,632),7596=>array(53,205,608,640),7597=>array(53,209,607,632),7598=>array(53,205,506,640),7599=>array(53,205,505,640),7600=>array(53,326,393,632),7601=>array(53,318,432,640),7602=>array(53,209,486,751),7603=>array(53,205,366,640),7604=>array(53,205,340,751),7605=>array(53,205,332,719),7606=>array(53,318,527,632),7607=>array(53,298,438,632),7608=>array(53,318,383,632),7609=>array(53,326,395,632),7610=>array(53,326,445,632),7611=>array(53,326,361,632),7612=>array(53,205,468,632),7613=>array(53,288,414,632),7614=>array(53,206,399,632),7615=>array(53,320,370,756),7620=>array(-467,616,-35,800),7621=>array(-467,616,-35,800),7622=>array(-467,616,-35,800),7623=>array(-467,616,-35,800),7624=>array(-513,616,11,800),7625=>array(-513,616,11,800),7680=>array(5,-240,769,729),7681=>array(43,-240,596,560),7682=>array(92,0,692,928),7683=>array(84,-14,671,913),7684=>array(92,-212,692,729),7685=>array(84,-212,671,760),7686=>array(92,-184,692,729),7687=>array(84,-184,671,760),7688=>array(50,-196,670,927),7689=>array(43,-196,526,800),7690=>array(92,0,778,927),7691=>array(45,-14,632,942),7692=>array(92,-212,778,729),7693=>array(45,-212,632,760),7694=>array(92,-184,778,729),7695=>array(45,-184,632,760),7696=>array(92,-192,778,729),7697=>array(45,-196,632,760),7698=>array(92,-240,778,729),7699=>array(45,-240,632,760),7700=>array(92,0,610,1057),7701=>array(43,-14,630,927),7702=>array(92,0,610,1057),7703=>array(43,-14,630,927),7704=>array(92,-203,610,729),7705=>array(43,-203,630,560),7706=>array(92,-195,610,729),7707=>array(43,-195,630,560),7708=>array(92,-196,610,927),7709=>array(43,-196,630,784),7710=>array(92,0,599,928),7711=>array(19,0,444,942),7712=>array(50,-14,747,901),7713=>array(45,-216,632,760),7714=>array(92,0,745,928),7715=>array(84,0,634,913),7716=>array(92,-212,745,729),7717=>array(84,-212,634,760),7718=>array(92,0,745,927),7719=>array(23,0,634,927),7720=>array(45,-196,745,729),7721=>array(38,-196,634,760),7722=>array(92,-236,745,729),7723=>array(84,-236,634,760),7724=>array(16,-195,355,729),7725=>array(1,-195,341,760),7726=>array(40,0,378,1057),7727=>array(16,0,354,917),7728=>array(92,0,805,927),7729=>array(84,0,684,982),7730=>array(92,-212,805,729),7731=>array(84,-212,684,760),7732=>array(92,-184,805,729),7733=>array(84,-184,684,760),7734=>array(92,-212,610,729),7735=>array(83,-212,259,760),7736=>array(32,-212,610,942),7737=>array(18,-212,325,914),7738=>array(92,-184,610,729),7739=>array(20,-184,328,760),7740=>array(92,-240,610,729),7741=>array(-13,-240,355,760),7742=>array(92,0,903,927),7743=>array(83,0,963,800),7744=>array(92,0,903,928),7745=>array(83,0,963,760),7746=>array(92,-212,903,729),7747=>array(83,-212,963,560),7748=>array(92,0,745,928),7749=>array(84,0,634,760),7750=>array(92,-212,745,729),7751=>array(84,-212,634,560),7752=>array(92,-184,745,729),7753=>array(84,-184,634,560),7754=>array(92,-240,745,729),7755=>array(84,-240,634,560),7756=>array(50,-14,800,1057),7757=>array(43,-14,644,916),7758=>array(50,-14,800,1043),7759=>array(43,-14,644,900),7760=>array(50,-14,800,1057),7761=>array(43,-14,644,927),7762=>array(50,-14,800,1057),7763=>array(43,-14,644,927),7764=>array(92,0,692,927),7765=>array(84,-208,671,800),7766=>array(92,0,692,928),7767=>array(84,-208,671,760),7768=>array(92,0,750,928),7769=>array(84,0,490,760),7770=>array(92,-212,750,729),7771=>array(83,-212,490,560),7772=>array(92,-212,750,914),7773=>array(83,-212,490,759),7774=>array(92,-184,750,729),7775=>array(33,-184,490,560),7776=>array(72,-14,647,928),7777=>array(52,-14,548,760),7778=>array(72,-212,647,742),7779=>array(52,-212,548,560),7780=>array(72,-14,647,928),7781=>array(52,-14,548,816),7782=>array(72,-14,647,1053),7783=>array(52,-14,548,1002),7784=>array(72,-212,647,928),7785=>array(52,-212,548,762),7786=>array(5,0,677,927),7787=>array(13,0,455,942),7788=>array(5,-212,677,729),7789=>array(13,-212,455,702),7790=>array(5,-184,677,729),7791=>array(13,-184,455,702),7792=>array(5,-240,677,729),7793=>array(13,-240,455,702),7794=>array(92,-212,720,729),7795=>array(78,-212,628,547),7796=>array(92,-196,720,729),7797=>array(78,-195,628,547),7798=>array(92,-203,720,729),7799=>array(78,-203,628,547),7800=>array(92,-14,720,1057),7801=>array(78,-14,628,916),7802=>array(92,-14,720,1043),7803=>array(78,-14,628,887),7804=>array(5,0,769,928),7805=>array(15,0,637,778),7806=>array(5,-212,769,729),7807=>array(15,-212,637,547),7808=>array(30,0,1072,931),7809=>array(35,0,889,803),7810=>array(30,0,1072,931),7811=>array(35,0,889,803),7812=>array(30,0,1072,927),7813=>array(35,0,889,774),7814=>array(30,0,1072,927),7815=>array(35,0,889,760),7816=>array(30,-212,1072,729),7817=>array(35,-212,889,547),7818=>array(19,0,751,928),7819=>array(15,0,630,760),7820=>array(19,0,751,927),7821=>array(15,0,630,774),7822=>array(-10,0,734,928),7823=>array(12,-216,634,760),7824=>array(45,0,680,927),7825=>array(45,0,534,798),7826=>array(45,-212,680,729),7827=>array(45,-212,534,547),7828=>array(45,-184,680,729),7829=>array(45,-184,534,547),7830=>array(84,-184,634,760),7831=>array(13,0,455,927),7832=>array(35,0,889,888),7833=>array(12,-216,634,888),7834=>array(43,-14,758,760),7835=>array(19,0,444,942),7836=>array(-18,0,444,760),7837=>array(19,0,444,760),7838=>array(92,-14,823,743),7839=>array(43,-14,645,768),7840=>array(5,-212,769,729),7841=>array(43,-212,596,560),7842=>array(5,0,769,1025),7843=>array(43,-14,596,843),7844=>array(5,0,769,1054),7845=>array(43,-14,652,873),7846=>array(5,0,769,1054),7847=>array(43,-14,597,874),7848=>array(5,0,769,1093),7849=>array(43,-14,672,912),7850=>array(5,0,769,1068),7851=>array(43,-14,596,887),7852=>array(5,-212,769,927),7853=>array(43,-212,596,800),7854=>array(5,0,769,1057),7855=>array(43,-14,596,891),7856=>array(5,0,769,1057),7857=>array(43,-14,596,894),7858=>array(5,0,769,1123),7859=>array(43,-14,596,959),7860=>array(5,0,769,1068),7861=>array(43,-14,596,905),7862=>array(5,-212,769,935),7863=>array(43,-212,596,780),7864=>array(92,-212,610,729),7865=>array(43,-212,630,560),7866=>array(92,0,610,1025),7867=>array(43,-14,630,843),7868=>array(92,0,610,928),7869=>array(43,-14,630,778),7870=>array(92,0,684,1054),7871=>array(43,-14,688,873),7872=>array(92,0,621,1054),7873=>array(43,-14,630,874),7874=>array(92,0,686,1093),7875=>array(43,-14,681,912),7876=>array(92,0,610,1068),7877=>array(43,-14,630,887),7878=>array(92,-212,610,927),7879=>array(43,-212,630,800),7880=>array(66,0,313,1025),7881=>array(52,0,300,842),7882=>array(92,-212,280,729),7883=>array(83,-212,259,760),7884=>array(50,-212,800,742),7885=>array(43,-212,644,560),7886=>array(50,-14,800,1025),7887=>array(43,-14,644,843),7888=>array(50,-14,800,1054),7889=>array(43,-14,679,873),7890=>array(50,-14,800,1054),7891=>array(43,-14,644,874),7892=>array(50,-14,800,1093),7893=>array(43,-14,685,912),7894=>array(50,-14,800,1068),7895=>array(43,-14,644,887),7896=>array(50,-212,800,927),7897=>array(43,-212,644,800),7898=>array(53,-14,854,927),7899=>array(46,-14,708,800),7900=>array(53,-14,854,927),7901=>array(46,-14,708,800),7902=>array(53,-14,854,1025),7903=>array(46,-14,708,843),7904=>array(53,-14,854,928),7905=>array(46,-14,708,778),7906=>array(53,-212,854,761),7907=>array(46,-212,708,609),7908=>array(92,-212,720,729),7909=>array(78,-212,628,547),7910=>array(92,-14,720,1025),7911=>array(78,-14,628,843),7912=>array(91,-14,833,927),7913=>array(75,-14,733,800),7914=>array(91,-14,833,927),7915=>array(75,-14,733,800),7916=>array(91,-14,833,1025),7917=>array(75,-14,733,843),7918=>array(91,-14,833,928),7919=>array(75,-14,733,778),7920=>array(91,-212,833,761),7921=>array(75,-212,733,609),7922=>array(-10,0,734,931),7923=>array(12,-216,634,803),7924=>array(-10,-212,734,729),7925=>array(12,-216,634,547),7926=>array(-10,0,734,1029),7927=>array(12,-216,634,843),7928=>array(-10,0,734,928),7929=>array(12,-216,634,778),7930=>array(92,0,925,729),7931=>array(9,0,635,760),7936=>array(48,-13,645,785),7937=>array(48,-13,645,785),7938=>array(48,-13,645,800),7939=>array(48,-13,645,800),7940=>array(48,-13,645,800),7941=>array(48,-13,645,800),7942=>array(48,-13,645,928),7943=>array(48,-13,645,928),7944=>array(5,0,769,785),7945=>array(5,0,769,785),7946=>array(2,0,1036,800),7947=>array(3,0,1039,800),7948=>array(1,0,930,800),7949=>array(2,0,958,800),7950=>array(4,0,831,928),7951=>array(3,0,854,928),7952=>array(54,-14,493,785),7953=>array(54,-14,493,785),7954=>array(54,-14,498,800),7955=>array(54,-14,493,800),7956=>array(54,-14,531,800),7957=>array(54,-14,516,800),7960=>array(3,0,718,785),7961=>array(4,0,721,785),7962=>array(2,0,1026,800),7963=>array(3,0,1023,800),7964=>array(1,0,950,800),7965=>array(2,0,979,800),7968=>array(84,-208,634,785),7969=>array(84,-208,634,785),7970=>array(84,-208,634,800),7971=>array(84,-208,634,800),7972=>array(84,-208,634,800),7973=>array(84,-208,634,800),7974=>array(84,-208,634,928),7975=>array(84,-208,634,928),7976=>array(3,0,854,785),7977=>array(4,0,859,785),7978=>array(2,0,1159,800),7979=>array(3,0,1158,800),7980=>array(1,0,1088,800),7981=>array(2,0,1114,800),7982=>array(4,0,962,928),7983=>array(3,0,971,928),7984=>array(78,-19,348,785),7985=>array(78,-19,348,785),7986=>array(-27,-19,407,800),7987=>array(-58,-19,376,800),7988=>array(31,-19,446,800),7989=>array(-6,-19,438,800),7990=>array(-2,-19,348,928),7991=>array(-5,-19,348,928),7992=>array(3,0,391,785),7993=>array(4,0,397,785),7994=>array(2,0,685,800),7995=>array(3,0,693,800),7996=>array(1,0,620,800),7997=>array(2,0,646,800),7998=>array(4,0,512,928),7999=>array(3,0,512,928),8000=>array(43,-14,644,785),8001=>array(43,-14,644,785),8002=>array(43,-14,644,800),8003=>array(43,-14,644,800),8004=>array(43,-14,644,800),8005=>array(43,-14,644,800),8008=>array(3,-14,841,785),8009=>array(4,-14,883,785),8010=>array(2,-14,1171,800),8011=>array(3,-14,1173,800),8012=>array(1,-14,1002,800),8013=>array(2,-14,1032,800),8016=>array(78,-10,629,785),8017=>array(78,-10,629,785),8018=>array(78,-10,629,800),8019=>array(78,-10,629,800),8020=>array(78,-10,629,800),8021=>array(78,-10,629,800),8022=>array(78,-10,629,928),8023=>array(78,-10,629,928),8025=>array(4,0,940,785),8027=>array(3,0,1194,800),8029=>array(2,0,1208,800),8031=>array(3,0,1059,928),8032=>array(43,-13,826,785),8033=>array(43,-13,826,785),8034=>array(43,-13,826,800),8035=>array(43,-13,826,800),8036=>array(43,-13,826,800),8037=>array(43,-13,826,800),8038=>array(43,-13,826,928),8039=>array(43,-13,826,928),8040=>array(3,0,881,785),8041=>array(4,0,931,785),8042=>array(2,0,1219,800),8043=>array(3,-3,1224,800),8044=>array(1,0,1048,800),8045=>array(2,0,1078,800),8046=>array(4,0,1000,928),8047=>array(3,0,1048,928),8048=>array(48,-13,645,800),8049=>array(48,-13,645,800),8050=>array(54,-14,493,800),8051=>array(54,-14,493,800),8052=>array(84,-208,634,800),8053=>array(84,-208,634,800),8054=>array(-26,-19,348,800),8055=>array(77,-19,353,800),8056=>array(43,-14,644,800),8057=>array(43,-14,644,800),8058=>array(78,-10,629,800),8059=>array(78,-10,629,800),8060=>array(43,-13,826,800),8061=>array(43,-13,826,800),8064=>array(48,-208,645,785),8065=>array(48,-208,645,785),8066=>array(48,-208,645,800),8067=>array(48,-208,645,800),8068=>array(48,-208,645,800),8069=>array(48,-208,645,800),8070=>array(48,-208,645,928),8071=>array(48,-208,645,928),8072=>array(5,-208,769,785),8073=>array(5,-208,769,785),8074=>array(2,-208,1036,800),8075=>array(3,-208,1039,800),8076=>array(1,-208,930,800),8077=>array(2,-208,958,800),8078=>array(4,-208,831,928),8079=>array(3,-208,854,928),8080=>array(84,-208,634,785),8081=>array(84,-208,634,785),8082=>array(84,-208,634,800),8083=>array(84,-208,634,800),8084=>array(84,-208,634,800),8085=>array(84,-208,634,800),8086=>array(84,-208,634,928),8087=>array(84,-208,634,928),8088=>array(3,-208,854,785),8089=>array(4,-208,859,785),8090=>array(2,-208,1159,800),8091=>array(3,-208,1158,800),8092=>array(1,-208,1088,800),8093=>array(2,-208,1114,800),8094=>array(4,-208,962,928),8095=>array(3,-208,971,928),8096=>array(43,-208,826,785),8097=>array(43,-208,826,785),8098=>array(43,-208,826,800),8099=>array(43,-208,826,800),8100=>array(43,-208,826,800),8101=>array(43,-208,826,800),8102=>array(43,-208,826,928),8103=>array(43,-208,826,928),8104=>array(3,-208,881,785),8105=>array(4,-208,931,785),8106=>array(2,-208,1219,800),8107=>array(3,-208,1224,800),8108=>array(1,-208,1048,800),8109=>array(2,-208,1078,800),8110=>array(4,-208,1000,928),8111=>array(3,-208,1048,928),8112=>array(48,-13,645,784),8113=>array(48,-13,645,760),8114=>array(48,-208,645,800),8115=>array(48,-208,645,559),8116=>array(48,-208,645,800),8118=>array(48,-13,645,778),8119=>array(48,-208,645,778),8120=>array(5,0,769,927),8121=>array(5,0,769,914),8122=>array(-1,0,872,800),8123=>array(26,0,792,800),8124=>array(5,-208,769,729),8125=>array(183,595,317,785),8126=>array(202,-208,333,-45),8127=>array(183,595,317,785),8128=>array(80,638,420,778),8129=>array(80,654,420,928),8130=>array(84,-208,634,800),8131=>array(84,-208,634,560),8132=>array(84,-208,634,800),8134=>array(84,-208,634,778),8135=>array(84,-208,634,778),8136=>array(-1,0,856,800),8137=>array(-24,0,771,800),8138=>array(-1,0,988,800),8139=>array(-18,0,915,800),8140=>array(92,-208,745,729),8141=>array(34,595,468,800),8142=>array(63,595,478,800),8143=>array(80,595,420,928),8144=>array(3,-19,348,784),8145=>array(20,-19,348,760),8146=>array(-36,-19,348,978),8147=>array(23,-19,372,978),8150=>array(4,-19,348,778),8151=>array(-6,-19,348,928),8152=>array(21,0,350,927),8153=>array(32,0,339,914),8154=>array(-1,0,529,800),8155=>array(-21,0,450,800),8157=>array(40,595,474,800),8158=>array(45,595,489,800),8159=>array(80,595,420,928),8160=>array(78,-10,629,784),8161=>array(78,-10,629,760),8162=>array(78,-10,629,978),8163=>array(78,-10,629,978),8164=>array(84,-208,671,785),8165=>array(84,-208,671,785),8166=>array(78,-10,629,778),8167=>array(78,-10,629,928),8168=>array(-10,0,734,927),8169=>array(-10,0,734,914),8170=>array(-1,0,1030,800),8171=>array(-27,0,992,800),8172=>array(4,0,797,785),8173=>array(46,654,404,978),8174=>array(96,654,445,978),8175=>array(46,616,322,800),8178=>array(43,-208,826,800),8179=>array(43,-208,826,547),8180=>array(43,-208,826,800),8182=>array(43,-13,826,778),8183=>array(43,-208,826,778),8184=>array(-1,-14,1015,800),8185=>array(-19,-14,836,800),8186=>array(-1,0,1057,800),8187=>array(-30,0,867,800),8188=>array(27,-208,823,742),8189=>array(178,616,454,800),8190=>array(183,595,317,785),8208=>array(54,217,361,359),8209=>array(54,217,361,359),8210=>array(54,211,642,337),8211=>array(54,211,446,337),8212=>array(54,211,946,337),8213=>array(0,211,1000,337),8214=>array(127,-236,399,764),8215=>array(0,-236,500,-9),8216=>array(103,418,318,729),8217=>array(63,418,278,729),8218=>array(72,-122,287,189),8219=>array(63,418,278,729),8220=>array(103,418,565,729),8221=>array(92,418,554,729),8222=>array(72,-122,534,189),8223=>array(92,418,554,729),8224=>array(26,-96,470,729),8225=>array(25,-96,470,729),8226=>array(144,196,495,547),8227=>array(144,157,534,586),8228=>array(79,0,255,189),8229=>array(79,0,588,189),8230=>array(79,0,921,189),8231=>array(86,253,262,442),8240=>array(32,-14,1417,742),8241=>array(32,-14,1864,742),8242=>array(20,547,240,729),8243=>array(20,547,423,729),8244=>array(20,547,606,729),8245=>array(20,547,240,729),8246=>array(20,547,425,729),8247=>array(20,547,606,729),8248=>array(101,-238,632,29),8249=>array(77,67,318,519),8250=>array(94,67,335,519),8251=>array(72,0,900,829),8252=>array(69,0,558,729),8253=>array(69,0,515,742),8254=>array(0,663,500,755),8255=>array(-31,-237,859,-79),8256=>array(-31,769,859,927),8257=>array(-52,-235,296,231),8258=>array(20,-37,1003,832),8259=>array(96,220,404,358),8260=>array(-199,-14,366,742),8261=>array(86,-132,389,760),8262=>array(68,-132,371,760),8263=>array(34,0,996,742),8264=>array(69,0,760,742),8265=>array(69,0,760,742),8266=>array(49,-125,464,546),8267=>array(93,-96,579,729),8268=>array(75,189,425,541),8269=>array(75,189,425,541),8270=>array(20,0,503,464),8271=>array(104,-142,329,547),8272=>array(-31,-237,859,927),8273=>array(53,-14,439,797),8274=>array(30,-93,529,729),8275=>array(49,212,951,415),8276=>array(-31,-240,859,-82),8277=>array(152,98,686,631),8278=>array(110,93,574,645),8279=>array(20,547,789,729),8280=>array(76,21,762,708),8281=>array(126,71,712,657),8282=>array(102,0,280,729),8283=>array(49,-170,822,898),8284=>array(55,0,783,729),8285=>array(102,0,278,683),8286=>array(102,0,278,683),8304=>array(29,319,398,742),8305=>array(53,326,164,751),8308=>array(27,326,397,734),8309=>array(47,319,384,734),8310=>array(38,319,394,742),8311=>array(41,326,378,734),8312=>array(38,319,389,742),8313=>array(32,319,388,742),8314=>array(67,326,461,677),8315=>array(67,469,461,534),8316=>array(67,407,461,596),8317=>array(54,252,237,751),8318=>array(50,252,234,751),8319=>array(54,326,406,640),8320=>array(29,-7,398,416),8321=>array(60,0,382,408),8322=>array(53,0,382,416),8323=>array(44,-7,384,416),8324=>array(27,0,397,408),8325=>array(47,-7,384,408),8326=>array(38,-7,394,416),8327=>array(41,0,378,408),8328=>array(38,-7,389,416),8329=>array(32,-7,388,416),8330=>array(67,0,461,351),8331=>array(67,143,461,208),8332=>array(67,81,461,270),8333=>array(54,-74,237,425),8334=>array(50,-74,234,425),8336=>array(53,-8,402,313),8337=>array(53,-8,423,313),8338=>array(53,-8,432,313),8339=>array(10,0,403,306),8340=>array(53,-8,423,313),8341=>array(54,0,406,425),8342=>array(53,0,431,425),8343=>array(54,0,166,425),8344=>array(53,0,607,313),8345=>array(54,0,406,313),8346=>array(53,-117,423,313),8347=>array(33,-8,351,313),8348=>array(53,0,332,393),8352=>array(38,0,892,729),8353=>array(50,-44,634,778),8354=>array(29,-14,667,742),8355=>array(75,0,663,729),8356=>array(61,0,613,742),8357=>array(83,-93,963,640),8358=>array(43,0,794,729),8359=>array(92,-14,1470,729),8360=>array(92,-14,1157,729),8361=>array(13,0,1088,729),8362=>array(39,-14,859,729),8363=>array(30,-182,692,760),8364=>array(-19,-14,629,742),8365=>array(29,0,695,729),8366=>array(12,0,684,729),8367=>array(92,-223,1247,742),8368=>array(14,-14,648,742),8369=>array(34,0,696,729),8370=>array(50,-81,643,809),8371=>array(5,0,691,729),8372=>array(43,-14,816,742),8373=>array(72,-147,629,760),8376=>array(12,0,684,729),8377=>array(50,0,647,729),8378=>array(5,0,745,729),8400=>array(-498,628,-26,760),8401=>array(-470,628,1,760),8406=>array(-470,560,-26,760),8407=>array(-470,560,-26,760),8411=>array(-501,654,-1,774),8412=>array(-595,654,99,774),8417=>array(-470,560,-26,760),8448=>array(20,-24,1083,752),8449=>array(20,-24,1137,752),8450=>array(50,-14,670,742),8451=>array(87,-14,1147,749),8452=>array(64,0,832,729),8453=>array(20,-24,1064,752),8454=>array(20,-24,1117,752),8455=>array(67,-14,616,742),8456=>array(64,-146,684,611),8457=>array(87,0,1002,749),8459=>array(36,-14,1063,746),8460=>array(6,-125,809,747),8461=>array(100,0,788,729),8462=>array(31,0,654,760),8463=>array(10,0,625,760),8464=>array(36,-14,533,742),8465=>array(52,-14,659,743),8466=>array(37,-14,787,742),8467=>array(-14,-14,401,742),8468=>array(9,-14,936,760),8469=>array(92,0,745,729),8470=>array(34,0,1154,729),8471=>array(138,0,862,725),8472=>array(54,-221,658,495),8473=>array(92,0,709,729),8474=>array(50,-146,800,742),8475=>array(31,-14,904,768),8476=>array(41,-14,803,743),8477=>array(98,0,793,729),8478=>array(37,0,859,729),8479=>array(81,-112,694,887),8480=>array(127,444,792,731),8481=>array(3,0,1249,547),8482=>array(144,447,790,729),8483=>array(11,-113,729,885),8484=>array(45,0,709,729),8485=>array(26,-230,540,777),8486=>array(27,0,823,742),8487=>array(27,-14,823,728),8488=>array(-5,-159,670,729),8489=>array(1,0,271,566),8490=>array(92,0,805,729),8491=>array(5,0,769,928),8492=>array(41,-1,853,772),8493=>array(63,-19,767,742),8494=>array(61,-12,793,647),8495=>array(41,-14,591,533),8496=>array(72,-14,668,742),8497=>array(37,-14,860,773),8498=>array(92,0,599,729),8499=>array(38,-18,1156,751),8500=>array(29,-12,436,420),8501=>array(50,-14,761,742),8502=>array(19,-14,687,742),8503=>array(31,-35,439,742),8504=>array(63,-41,633,742),8505=>array(34,0,355,760),8506=>array(44,-27,932,723),8507=>array(69,0,1352,547),8508=>array(34,-14,765,547),8509=>array(-40,-208,700,561),8510=>array(92,0,627,729),8511=>array(92,0,771,729),8512=>array(12,-192,820,719),8513=>array(25,-14,723,742),8514=>array(9,0,527,729),8515=>array(43,0,561,729),8516=>array(0,0,744,729),8517=>array(21,0,786,729),8518=>array(34,-14,752,760),8519=>array(33,-14,635,560),8520=>array(15,0,353,760),8521=>array(-143,-216,354,760),8523=>array(41,-14,811,742),8526=>array(55,0,470,547),8528=>array(49,-14,983,742),8529=>array(49,-14,993,742),8530=>array(49,-14,1441,742),8531=>array(49,-14,989,742),8532=>array(53,-14,989,742),8533=>array(49,-14,989,742),8534=>array(53,-14,989,742),8535=>array(44,-14,989,742),8536=>array(27,-14,989,742),8537=>array(49,-14,999,742),8538=>array(47,-14,999,742),8539=>array(49,-14,994,742),8540=>array(44,-14,994,742),8541=>array(47,-14,994,742),8542=>array(41,-14,994,742),8543=>array(49,-14,814,742),8544=>array(92,0,280,729),8545=>array(92,0,566,729),8546=>array(92,0,853,729),8547=>array(92,0,1094,729),8548=>array(5,0,769,729),8549=>array(5,0,1007,729),8550=>array(5,0,1293,729),8551=>array(5,0,1580,729),8552=>array(92,0,1101,729),8553=>array(19,0,751,729),8554=>array(19,0,1028,729),8555=>array(19,0,1314,729),8556=>array(92,0,610,729),8557=>array(50,-14,670,742),8558=>array(92,0,778,729),8559=>array(92,0,903,729),8560=>array(84,0,259,760),8561=>array(84,0,523,760),8562=>array(84,0,788,760),8563=>array(84,0,946,760),8564=>array(15,0,637,547),8565=>array(15,0,878,760),8566=>array(15,0,1143,760),8567=>array(15,0,1407,760),8568=>array(84,0,954,760),8569=>array(15,0,630,547),8570=>array(15,0,885,760),8571=>array(15,0,1149,760),8572=>array(84,0,259,760),8573=>array(43,-14,526,560),8574=>array(45,-14,632,760),8575=>array(83,0,963,560),8576=>array(52,0,1236,729),8577=>array(92,0,778,729),8578=>array(52,0,1236,729),8579=>array(50,-14,670,742),8580=>array(43,-14,526,560),8581=>array(50,-208,670,742),8585=>array(29,-14,989,742),8592=>array(49,87,781,540),8593=>array(193,0,646,732),8594=>array(57,87,789,540),8595=>array(193,-3,646,729),8596=>array(49,87,789,540),8597=>array(193,-3,646,732),8598=>array(136,66,720,650),8599=>array(136,66,720,650),8600=>array(136,66,720,650),8601=>array(136,66,720,650),8602=>array(49,87,781,540),8603=>array(57,87,789,540),8604=>array(13,84,833,431),8605=>array(5,84,825,431),8606=>array(49,87,781,540),8607=>array(189,0,641,732),8608=>array(57,87,789,540),8609=>array(194,-3,646,729),8610=>array(49,87,793,540),8611=>array(45,87,789,540),8612=>array(49,87,781,540),8613=>array(193,0,646,732),8614=>array(57,87,789,540),8615=>array(193,0,646,732),8616=>array(193,0,646,732),8617=>array(49,87,781,565),8618=>array(57,87,789,565),8619=>array(49,87,781,565),8620=>array(57,87,789,565),8621=>array(49,87,789,540),8622=>array(49,86,789,541),8623=>array(123,-4,714,733),8624=>array(169,0,646,755),8625=>array(192,0,669,755),8626=>array(169,-26,646,729),8627=>array(192,-26,669,729),8628=>array(233,-3,772,621),8629=>array(49,87,673,626),8630=>array(11,198,816,685),8631=>array(22,198,828,685),8632=>array(118,13,788,729),8633=>array(49,-108,789,735),8634=>array(86,45,767,691),8635=>array(71,45,751,691),8636=>array(49,255,781,540),8637=>array(49,87,781,372),8638=>array(361,0,646,732),8639=>array(193,0,478,732),8640=>array(57,255,789,540),8641=>array(57,87,789,372),8642=>array(361,0,646,732),8643=>array(193,0,478,732),8644=>array(49,-59,789,686),8645=>array(47,-3,792,732),8646=>array(49,-59,789,686),8647=>array(49,-59,781,686),8648=>array(46,0,792,732),8649=>array(57,-59,789,686),8650=>array(46,-3,792,729),8651=>array(49,-5,789,632),8652=>array(49,-5,789,632),8653=>array(49,87,781,540),8654=>array(49,87,789,540),8655=>array(57,87,789,540),8656=>array(49,87,781,540),8657=>array(193,0,645,732),8658=>array(57,87,789,540),8659=>array(193,-3,645,729),8660=>array(49,87,789,540),8661=>array(193,-8,645,732),8662=>array(132,-26,755,596),8663=>array(88,-26,711,597),8664=>array(88,16,711,639),8665=>array(132,16,755,639),8666=>array(49,87,781,540),8667=>array(57,87,789,540),8668=>array(44,87,776,540),8669=>array(57,87,789,540),8670=>array(193,0,646,732),8671=>array(193,-3,646,729),8672=>array(49,87,781,540),8673=>array(193,0,646,732),8674=>array(57,87,789,540),8675=>array(193,-3,646,729),8676=>array(49,87,781,540),8677=>array(57,87,789,540),8678=>array(27,46,781,581),8679=>array(151,0,687,754),8680=>array(35,46,789,581),8681=>array(151,-25,687,729),8682=>array(151,0,687,754),8683=>array(151,0,687,754),8684=>array(151,0,687,754),8685=>array(151,0,687,754),8686=>array(151,0,687,754),8687=>array(151,0,687,754),8688=>array(35,46,789,581),8689=>array(60,0,788,729),8690=>array(60,0,788,729),8691=>array(151,-25,687,754),8692=>array(57,87,789,540),8693=>array(47,-3,792,732),8694=>array(57,-223,789,850),8695=>array(49,87,781,540),8696=>array(57,87,789,540),8697=>array(49,87,789,540),8698=>array(49,87,781,540),8699=>array(57,87,789,540),8700=>array(49,87,789,540),8701=>array(27,96,781,531),8702=>array(57,96,811,531),8703=>array(27,96,811,531),8704=>array(5,0,769,729),8705=>array(48,-14,629,742),8706=>array(29,-14,515,674),8707=>array(92,0,610,729),8708=>array(92,-46,610,775),8709=>array(47,-15,810,715),8710=>array(0,0,697,719),8711=>array(0,0,697,719),8712=>array(73,-2,824,730),8713=>array(73,-46,824,775),8714=>array(106,58,644,568),8715=>array(73,-2,824,730),8716=>array(73,-46,824,775),8717=>array(106,58,644,568),8718=>array(98,0,539,553),8719=>array(73,-192,712,719),8720=>array(73,-193,712,718),8721=>array(20,-192,697,719),8722=>array(106,256,732,371),8723=>array(106,0,732,627),8724=>array(49,0,647,729),8725=>array(0,-93,365,729),8726=>array(165,-49,530,772),8727=>array(118,0,720,626),8728=>array(150,151,475,477),8729=>array(102,253,278,442),8730=>array(37,-20,669,837),8731=>array(37,-20,669,933),8732=>array(36,-20,669,924),8733=>array(92,89,617,505),8734=>array(92,89,741,505),8735=>array(106,67,732,693),8736=>array(77,0,820,729),8737=>array(77,-44,820,729),8738=>array(116,-0,732,726),8739=>array(207,-207,322,773),8740=>array(48,-207,482,773),8741=>array(112,-207,417,773),8742=>array(48,-207,482,773),8743=>array(151,0,661,579),8744=>array(151,0,661,579),8745=>array(151,0,661,579),8746=>array(151,0,661,579),8747=>array(15,-227,548,754),8748=>array(15,-227,914,754),8749=>array(15,-227,1280,754),8750=>array(14,-227,548,754),8751=>array(38,-227,938,754),8752=>array(23,-227,1290,754),8753=>array(15,-227,616,754),8754=>array(14,-227,600,754),8755=>array(14,-227,588,754),8756=>array(60,78,637,647),8757=>array(60,78,637,647),8758=>array(59,79,235,647),8759=>array(60,78,637,647),8760=>array(106,256,732,631),8761=>array(106,45,800,584),8762=>array(106,-4,732,631),8763=>array(106,-34,732,660),8764=>array(106,212,732,415),8765=>array(106,212,732,415),8766=>array(65,131,772,497),8767=>array(106,42,732,584),8768=>array(85,0,289,626),8769=>array(106,76,732,551),8770=>array(106,110,732,482),8771=>array(106,144,732,517),8772=>array(106,0,732,637),8773=>array(106,37,732,628),8774=>array(106,-31,732,628),8775=>array(106,-86,732,726),8776=>array(106,110,732,517),8777=>array(106,8,732,614),8778=>array(106,37,732,628),8779=>array(106,-13,732,628),8780=>array(106,37,732,628),8781=>array(105,105,732,585),8782=>array(106,26,732,656),8783=>array(106,172,732,656),8784=>array(106,144,732,744),8785=>array(106,-117,732,743),8786=>array(105,-92,732,719),8787=>array(104,-92,731,719),8788=>array(98,102,965,520),8789=>array(96,102,966,520),8790=>array(106,144,732,482),8791=>array(106,144,732,839),8792=>array(106,144,732,704),8793=>array(106,144,732,840),8794=>array(106,144,732,840),8795=>array(106,144,732,959),8796=>array(106,144,732,952),8797=>array(106,144,732,762),8798=>array(106,144,732,786),8799=>array(106,144,732,903),8800=>array(106,-5,732,631),8801=>array(106,38,732,588),8802=>array(106,-69,732,695),8803=>array(106,-74,732,700),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8806=>array(106,-106,732,617),8807=>array(106,-106,732,617),8808=>array(106,-185,732,617),8809=>array(106,-185,732,617),8810=>array(72,-34,974,660),8811=>array(72,-34,974,660),8812=>array(86,-132,414,759),8813=>array(105,-10,732,700),8814=>array(106,-4,732,690),8815=>array(106,-63,732,631),8816=>array(106,-112,732,645),8817=>array(106,-112,732,645),8818=>array(106,-84,732,582),8819=>array(106,-84,732,582),8820=>array(106,-112,732,645),8821=>array(106,-112,732,645),8822=>array(102,-119,732,678),8823=>array(102,-119,732,678),8824=>array(102,-221,732,779),8825=>array(102,-221,732,779),8826=>array(106,-55,732,681),8827=>array(106,-55,732,681),8828=>array(106,-177,732,684),8829=>array(106,-177,732,684),8830=>array(106,-132,732,684),8831=>array(106,-132,732,684),8832=>array(106,-89,732,781),8833=>array(106,-89,732,781),8834=>array(99,67,739,559),8835=>array(99,65,739,559),8836=>array(99,-96,739,726),8837=>array(99,-100,739,722),8838=>array(99,0,739,636),8839=>array(99,0,739,635),8840=>array(99,-124,739,759),8841=>array(99,-124,739,759),8842=>array(99,-97,739,636),8843=>array(99,-97,739,635),8844=>array(151,0,661,579),8845=>array(151,0,661,579),8846=>array(151,0,661,579),8847=>array(106,0,732,584),8848=>array(106,0,732,584),8849=>array(106,-115,732,667),8850=>array(106,-115,732,667),8851=>array(106,0,690,626),8852=>array(106,0,690,626),8853=>array(91,-14,747,643),8854=>array(91,-14,747,643),8855=>array(91,-14,747,643),8856=>array(91,-13,747,642),8857=>array(91,-14,747,643),8858=>array(91,-14,747,643),8859=>array(91,-14,747,643),8860=>array(91,-14,747,643),8861=>array(91,-14,747,643),8862=>array(77,-29,761,657),8863=>array(77,-29,761,657),8864=>array(77,-29,761,657),8865=>array(77,-29,761,657),8866=>array(85,0,829,705),8867=>array(85,0,829,705),8868=>array(85,0,829,705),8869=>array(85,0,829,705),8870=>array(85,0,457,705),8871=>array(85,0,457,705),8872=>array(85,0,829,705),8873=>array(85,0,829,705),8874=>array(85,0,829,705),8875=>array(85,0,829,705),8876=>array(85,-100,829,805),8877=>array(85,-100,829,805),8878=>array(85,-100,829,805),8879=>array(85,-100,829,805),8880=>array(106,-54,724,681),8881=>array(114,-54,732,681),8882=>array(106,-1,732,628),8883=>array(106,-1,732,628),8884=>array(106,-80,732,706),8885=>array(106,-80,732,706),8886=>array(60,151,940,477),8887=>array(60,151,940,477),8888=>array(60,151,778,477),8889=>array(43,-63,794,689),8890=>array(63,0,480,705),8891=>array(103,0,709,759),8892=>array(103,0,709,759),8893=>array(103,0,709,759),8894=>array(106,0,732,626),8895=>array(106,0,732,626),8896=>array(0,-192,843,719),8897=>array(0,-192,843,719),8898=>array(48,-192,794,719),8899=>array(48,-192,794,719),8900=>array(3,-233,491,807),8901=>array(102,253,278,442),8902=>array(83,112,543,549),8903=>array(106,-56,732,683),8904=>array(106,-48,894,674),8905=>array(106,-48,894,675),8906=>array(106,-48,894,675),8907=>array(106,-48,894,675),8908=>array(106,-48,894,675),8909=>array(106,144,732,517),8910=>array(49,0,763,579),8911=>array(49,0,763,579),8912=>array(93,-22,732,649),8913=>array(106,-22,745,649),8914=>array(83,0,755,639),8915=>array(83,-14,755,625),8916=>array(186,0,652,729),8917=>array(106,-100,732,729),8918=>array(106,30,732,597),8919=>array(106,30,732,597),8920=>array(72,-34,1350,660),8921=>array(72,-34,1350,660),8922=>array(106,-211,732,837),8923=>array(106,-211,732,837),8924=>array(106,0,732,582),8925=>array(106,0,732,582),8926=>array(106,-177,732,684),8927=>array(106,-177,732,684),8928=>array(106,-197,732,808),8929=>array(106,-263,732,742),8930=>array(106,-191,732,817),8931=>array(106,-191,732,817),8932=>array(106,-146,732,636),8933=>array(106,-146,732,636),8934=>array(106,-168,732,582),8935=>array(106,-168,732,582),8936=>array(106,-216,732,684),8937=>array(106,-216,732,684),8938=>array(106,-138,732,808),8939=>array(106,-138,732,808),8940=>array(106,-224,732,894),8941=>array(106,-224,732,894),8942=>array(412,-40,588,735),8943=>array(79,253,921,442),8944=>array(79,-40,921,735),8945=>array(79,-40,921,735),8946=>array(72,-2,1085,730),8947=>array(73,-2,824,730),8948=>array(106,58,644,568),8949=>array(73,-2,824,984),8950=>array(73,-2,824,919),8951=>array(106,58,644,741),8952=>array(73,-207,824,730),8953=>array(73,-2,824,730),8954=>array(72,-2,1085,730),8955=>array(73,-2,824,730),8956=>array(106,58,644,568),8957=>array(72,-2,824,919),8958=>array(106,58,644,741),8959=>array(106,0,791,732),8960=>array(31,-22,572,519),8961=>array(56,152,540,453),8962=>array(64,0,651,596),8963=>array(193,470,646,732),8964=>array(193,0,646,263),8965=>array(193,-12,646,423),8966=>array(193,-12,646,552),8967=>array(139,-39,349,798),8968=>array(86,-132,389,760),8969=>array(68,-132,371,760),8970=>array(86,-132,389,760),8971=>array(68,-132,371,760),8972=>array(352,-77,759,331),8973=>array(49,-77,457,331),8974=>array(352,226,759,634),8975=>array(49,226,457,634),8976=>array(106,140,732,444),8977=>array(3,113,536,646),8984=>array(84,0,843,759),8985=>array(106,140,732,444),8988=>array(86,425,403,760),8989=>array(65,425,383,760),8990=>array(86,-126,403,208),8991=>array(65,-126,383,208),8992=>array(235,-250,586,926),8993=>array(22,-240,373,940),8996=>array(76,215,1076,575),8997=>array(76,0,1076,575),8998=>array(76,0,1414,760),8999=>array(76,0,1076,760),9000=>array(59,0,1385,729),9003=>array(0,0,1338,760),9004=>array(73,-91,800,748),9075=>array(78,-19,348,547),9076=>array(84,-208,671,562),9077=>array(43,-13,826,547),9082=>array(48,-13,645,559),9085=>array(13,-228,850,99),9095=>array(76,0,1100,743),9108=>array(17,0,856,727),9115=>array(63,-252,438,928),9116=>array(63,-252,205,940),9117=>array(63,-240,438,940),9118=>array(63,-252,438,928),9119=>array(295,-252,438,940),9120=>array(63,-240,438,940),9121=>array(63,-252,438,928),9122=>array(63,-252,205,940),9123=>array(63,-240,438,940),9124=>array(63,-252,438,928),9125=>array(295,-252,438,940),9126=>array(63,-240,438,940),9127=>array(306,-261,668,928),9128=>array(82,-247,444,934),9129=>array(306,-240,668,934),9130=>array(306,-256,444,934),9131=>array(82,-261,444,928),9132=>array(306,-247,668,934),9133=>array(82,-240,444,934),9134=>array(235,-250,373,940),9166=>array(27,46,781,729),9167=>array(91,0,854,596),9187=>array(73,-91,800,748),9189=>array(3,75,766,444),9192=>array(39,-129,665,294),9250=>array(-81,-14,671,760),9251=>array(64,-228,651,99),9312=>array(59,-15,788,715),9313=>array(59,-15,788,715),9314=>array(59,-15,788,715),9315=>array(59,-15,788,715),9316=>array(59,-15,788,715),9317=>array(59,-15,788,715),9318=>array(59,-15,788,715),9319=>array(59,-15,788,715),9320=>array(59,-15,788,715),9321=>array(59,-15,788,715),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,779,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-124,854,643),9633=>array(91,-124,854,643),9634=>array(91,-124,854,643),9635=>array(91,-124,854,643),9636=>array(91,-124,854,643),9637=>array(91,-124,854,643),9638=>array(91,-124,854,643),9639=>array(91,-124,854,643),9640=>array(91,-124,854,643),9641=>array(91,-124,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-124,766,643),9651=>array(3,-124,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-124,766,643),9655=>array(3,-124,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-124,766,643),9661=>array(3,-124,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-124,766,643),9665=>array(3,-124,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-124,766,643),9671=>array(3,-124,766,643),9672=>array(3,-124,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,750,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,385,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,385,260),9696=>array(3,260,766,645),9697=>array(3,-125,766,260),9698=>array(3,-124,766,643),9699=>array(3,-124,766,643),9700=>array(3,-124,766,643),9701=>array(3,-124,766,643),9702=>array(144,196,495,547),9703=>array(91,-124,854,643),9704=>array(91,-124,854,643),9705=>array(91,-124,854,643),9706=>array(91,-124,854,643),9707=>array(91,-124,854,643),9708=>array(3,-124,766,643),9709=>array(3,-124,766,643),9710=>array(3,-124,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-124,854,643),9713=>array(91,-124,854,643),9714=>array(91,-124,854,643),9715=>array(91,-124,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-124,766,643),9721=>array(3,-124,766,643),9722=>array(3,-124,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-124,766,643),9728=>array(83,0,813,729),9729=>array(51,-2,949,360),9730=>array(49,0,848,729),9731=>array(83,-0,813,927),9732=>array(64,0,833,880),9733=>array(65,-4,832,723),9734=>array(65,-4,832,723),9735=>array(83,2,490,729),9736=>array(83,0,813,731),9737=>array(83,0,813,730),9738=>array(61,0,828,727),9739=>array(61,0,828,723),9740=>array(61,-1,610,722),9741=>array(61,0,952,723),9742=>array(68,0,1177,729),9743=>array(71,0,1180,729),9744=>array(90,0,807,729),9745=>array(89,0,808,729),9746=>array(89,0,808,729),9747=>array(75,78,457,656),9748=>array(49,0,870,933),9749=>array(74,0,822,731),9750=>array(84,0,813,731),9751=>array(84,0,813,727),9752=>array(78,0,819,729),9753=>array(83,140,813,574),9754=>array(84,113,813,569),9755=>array(84,113,813,569),9756=>array(87,104,810,569),9757=>array(72,0,537,724),9758=>array(86,103,810,569),9759=>array(72,-3,537,720),9760=>array(61,0,835,730),9761=>array(84,0,813,730),9762=>array(83,0,813,730),9763=>array(49,0,848,730),9764=>array(49,-2,620,727),9765=>array(83,0,663,731),9766=>array(83,-1,566,731),9767=>array(83,0,701,911),9768=>array(83,0,462,730),9769=>array(83,-1,813,729),9770=>array(87,0,810,730),9771=>array(83,0,814,731),9772=>array(83,0,627,731),9773=>array(83,0,813,730),9774=>array(83,0,813,730),9775=>array(83,0,813,730),9776=>array(83,0,813,729),9777=>array(83,0,814,729),9778=>array(83,0,813,729),9779=>array(83,0,813,729),9780=>array(83,0,813,729),9781=>array(83,0,813,729),9782=>array(83,0,813,729),9783=>array(83,0,813,729),9784=>array(80,3,817,721),9785=>array(83,-73,959,804),9786=>array(83,-73,959,804),9787=>array(83,-73,959,804),9788=>array(83,0,813,730),9789=>array(358,0,814,730),9790=>array(83,0,539,730),9791=>array(85,-102,528,732),9792=>array(85,-125,647,731),9793=>array(85,-14,647,843),9794=>array(79,-14,831,720),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9800=>array(45,0,851,731),9801=>array(89,0,807,730),9802=>array(94,0,802,731),9803=>array(113,31,784,679),9804=>array(140,0,756,730),9805=>array(53,-180,843,730),9806=>array(83,52,813,653),9807=>array(34,-96,863,730),9808=>array(83,-0,813,730),9809=>array(94,0,802,730),9810=>array(86,153,810,579),9811=>array(157,0,739,730),9812=>array(98,0,798,730),9813=>array(110,0,786,730),9814=>array(167,-1,729,729),9815=>array(214,0,683,730),9816=>array(165,0,732,730),9817=>array(148,-0,748,730),9818=>array(98,0,798,730),9819=>array(110,0,786,730),9820=>array(167,-1,729,729),9821=>array(214,0,683,730),9822=>array(162,0,734,730),9823=>array(148,-0,748,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9832=>array(105,-1,791,729),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),9840=>array(84,0,664,731),9841=>array(64,0,701,731),9842=>array(84,0,813,709),9843=>array(76,16,820,731),9844=>array(76,16,820,731),9845=>array(76,16,820,731),9846=>array(76,16,820,731),9847=>array(76,16,820,731),9848=>array(76,16,820,731),9849=>array(76,16,820,731),9850=>array(76,16,820,731),9851=>array(84,0,812,704),9852=>array(83,0,814,731),9853=>array(83,0,814,731),9854=>array(83,0,814,731),9855=>array(149,1,747,731),9856=>array(73,0,797,725),9857=>array(73,0,797,725),9858=>array(73,0,797,725),9859=>array(73,0,797,725),9860=>array(73,0,797,725),9861=>array(73,0,797,725),9862=>array(83,0,813,731),9863=>array(83,0,813,731),9864=>array(83,0,813,731),9865=>array(83,0,813,731),9866=>array(83,0,813,98),9867=>array(83,0,813,98),9868=>array(83,0,813,413),9869=>array(83,0,813,413),9870=>array(83,0,813,413),9871=>array(83,0,813,413),9872=>array(168,3,728,731),9873=>array(168,3,728,731),9874=>array(52,0,844,731),9875=>array(97,-10,799,732),9876=>array(131,0,765,729),9877=>array(61,-10,479,732),9878=>array(59,-10,837,732),9879=>array(61,0,835,732),9880=>array(145,0,750,732),9881=>array(95,-17,802,727),9882=>array(128,-9,768,733),9883=>array(127,0,769,728),9884=>array(127,0,769,729),9888=>array(49,0,848,729),9889=>array(83,2,619,730),9890=>array(85,-125,919,731),9891=>array(79,-206,1023,720),9892=>array(85,-186,1109,856),9893=>array(85,-125,837,917),9894=>array(131,-14,727,869),9895=>array(101,-170,741,884),9896=>array(188,-14,650,869),9897=>array(4,133,829,596),9898=>array(188,133,650,597),9899=>array(188,133,650,597),9900=>array(249,194,589,536),9901=>array(175,194,663,536),9902=>array(41,169,797,560),9903=>array(5,194,833,536),9904=>array(103,237,757,540),9905=>array(211,42,626,698),9906=>array(85,-125,647,731),9907=>array(168,-125,646,731),9908=>array(86,-125,646,731),9909=>array(86,-125,646,731),9910=>array(59,-118,791,643),9911=>array(194,-104,595,710),9912=>array(158,-125,543,731),9920=>array(42,4,796,553),9921=>array(42,4,796,724),9922=>array(42,4,796,553),9923=>array(42,4,796,724),9954=>array(85,-14,647,843),9985=>array(11,190,803,635),9986=>array(42,141,784,588),9987=>array(11,94,803,539),9988=>array(36,119,824,613),9990=>array(42,-14,796,742),9991=>array(42,-14,796,742),9992=>array(59,21,782,708),9993=>array(64,107,773,622),9996=>array(212,0,561,742),9997=>array(21,83,802,678),9998=>array(89,75,724,710),9999=>array(26,198,819,530),10000=>array(89,75,724,710),10001=>array(43,185,757,544),10002=>array(67,209,757,520),10003=>array(150,97,667,630),10004=>array(116,87,721,631),10005=>array(126,72,711,657),10006=>array(85,31,752,698),10007=>array(118,-9,701,732),10008=>array(123,0,754,739),10009=>array(55,0,783,729),10010=>array(55,0,783,729),10011=>array(55,0,783,729),10012=>array(55,0,783,729),10013=>array(165,0,673,729),10014=>array(131,0,678,729),10015=>array(155,0,683,729),10016=>array(55,0,783,729),10017=>array(91,-13,747,744),10018=>array(41,-14,797,742),10019=>array(42,-12,796,742),10020=>array(41,-14,797,742),10021=>array(41,-13,797,743),10022=>array(42,-14,796,745),10023=>array(42,-14,796,745),10025=>array(23,-9,814,743),10026=>array(42,-14,796,742),10027=>array(23,-9,814,743),10028=>array(23,-9,814,743),10029=>array(23,-9,814,743),10030=>array(23,-9,814,743),10031=>array(23,-9,814,743),10032=>array(24,12,815,714),10033=>array(64,0,773,729),10034=>array(74,0,764,729),10035=>array(55,0,783,729),10036=>array(31,-14,787,742),10037=>array(41,-14,797,742),10038=>array(91,-14,747,742),10039=>array(41,-14,797,742),10040=>array(41,-14,797,742),10041=>array(41,-14,797,742),10042=>array(55,0,783,729),10043=>array(82,-14,756,742),10044=>array(82,-14,756,742),10045=>array(84,-14,753,742),10046=>array(79,-14,759,742),10047=>array(54,0,784,709),10048=>array(54,0,784,709),10049=>array(41,-14,797,742),10050=>array(42,-14,796,742),10051=>array(79,-14,759,742),10052=>array(89,0,749,729),10053=>array(76,0,762,729),10054=>array(63,2,773,729),10055=>array(79,-13,759,742),10056=>array(47,-13,791,730),10057=>array(47,-13,791,730),10058=>array(41,-13,797,743),10059=>array(41,-13,797,743),10061=>array(50,-10,847,738),10063=>array(60,-49,837,729),10064=>array(60,0,837,777),10065=>array(60,-49,837,729),10066=>array(60,0,837,777),10070=>array(83,-2,813,728),10072=>array(377,-240,460,760),10073=>array(336,-240,502,760),10074=>array(253,-240,585,760),10075=>array(85,395,288,729),10076=>array(59,395,262,729),10077=>array(85,395,528,729),10078=>array(59,395,502,729),10081=>array(155,-93,772,851),10082=>array(202,-17,636,742),10083=>array(163,-17,675,742),10084=>array(54,83,784,645),10085=>array(168,-1,729,729),10086=>array(62,21,724,702),10087=>array(78,169,759,564),10088=>array(196,-139,648,769),10089=>array(196,-139,648,769),10090=>array(264,-132,574,758),10091=>array(264,-132,574,758),10092=>array(215,-240,607,760),10093=>array(232,-240,623,760),10094=>array(142,-240,685,760),10095=>array(153,-240,696,760),10096=>array(167,-240,656,760),10097=>array(183,-240,672,760),10098=>array(346,-241,535,760),10099=>array(303,-241,492,760),10100=>array(175,-163,634,760),10101=>array(204,-163,663,760),10102=>array(59,-15,788,715),10103=>array(59,-15,788,715),10104=>array(59,-15,788,715),10105=>array(59,-15,788,715),10106=>array(59,-15,788,715),10107=>array(59,-15,788,715),10108=>array(59,-15,788,715),10109=>array(59,-15,788,715),10110=>array(59,-15,788,715),10111=>array(59,-15,788,715),10112=>array(4,-52,833,780),10113=>array(4,-52,833,780),10114=>array(4,-52,833,780),10115=>array(4,-52,833,780),10116=>array(4,-52,833,780),10117=>array(4,-52,833,780),10118=>array(4,-52,833,780),10119=>array(4,-52,833,780),10120=>array(4,-52,833,780),10121=>array(4,-52,833,780),10122=>array(4,-52,833,780),10123=>array(4,-52,833,780),10124=>array(4,-52,833,780),10125=>array(4,-52,833,780),10126=>array(4,-52,833,780),10127=>array(4,-52,833,780),10128=>array(4,-52,833,780),10129=>array(4,-52,833,780),10130=>array(4,-52,833,780),10131=>array(4,-52,833,780),10132=>array(57,75,789,552),10136=>array(123,55,682,614),10137=>array(57,100,789,527),10138=>array(123,13,682,572),10139=>array(57,129,789,498),10140=>array(57,57,764,570),10141=>array(57,100,789,527),10142=>array(57,100,789,527),10143=>array(57,100,789,527),10144=>array(57,100,789,527),10145=>array(57,46,811,581),10146=>array(111,94,789,533),10147=>array(111,94,789,533),10148=>array(111,-4,789,631),10149=>array(57,100,789,548),10150=>array(57,79,789,527),10151=>array(240,-7,606,634),10152=>array(57,100,789,527),10153=>array(57,75,765,552),10154=>array(57,75,765,552),10155=>array(21,12,794,586),10156=>array(21,12,794,586),10157=>array(135,0,774,574),10158=>array(135,0,774,574),10159=>array(62,49,799,574),10161=>array(62,49,799,574),10162=>array(154,-20,721,585),10163=>array(63,157,789,470),10164=>array(81,55,682,655),10165=>array(57,173,789,454),10166=>array(82,-29,682,572),10167=>array(82,55,682,655),10168=>array(57,172,789,455),10169=>array(82,-28,682,572),10170=>array(56,84,789,543),10171=>array(73,140,779,487),10172=>array(79,167,774,460),10173=>array(79,118,774,509),10174=>array(57,81,789,546),10181=>array(54,-163,405,769),10182=>array(52,-163,403,769),10208=>array(3,-233,491,807),10214=>array(86,-132,419,760),10215=>array(86,-132,419,760),10216=>array(104,-132,377,759),10217=>array(80,-132,353,759),10218=>array(104,-132,641,759),10219=>array(80,-132,616,759),10224=>array(41,0,797,732),10225=>array(42,-3,798,729),10226=>array(9,45,816,685),10227=>array(22,45,830,685),10228=>array(57,-14,1108,643),10229=>array(49,87,1376,540),10230=>array(57,87,1385,540),10231=>array(49,87,1385,540),10232=>array(49,87,1376,540),10233=>array(57,87,1385,540),10234=>array(49,87,1385,540),10235=>array(49,87,1376,540),10236=>array(57,87,1385,540),10237=>array(49,87,1376,540),10238=>array(57,87,1385,540),10239=>array(57,87,1385,540),10241=>array(146,586,342,781),10242=>array(146,325,342,521),10243=>array(146,325,342,781),10244=>array(146,65,342,261),10245=>array(146,65,342,781),10246=>array(146,65,342,521),10247=>array(146,65,342,781),10248=>array(439,586,635,781),10249=>array(146,586,635,781),10250=>array(146,325,635,781),10251=>array(146,325,635,781),10252=>array(146,65,635,781),10253=>array(146,65,635,781),10254=>array(146,65,635,781),10255=>array(146,65,635,781),10256=>array(439,325,635,521),10257=>array(146,325,635,781),10258=>array(146,325,635,521),10259=>array(146,325,635,781),10260=>array(146,65,635,521),10261=>array(146,65,635,781),10262=>array(146,65,635,521),10263=>array(146,65,635,781),10264=>array(439,325,635,781),10265=>array(146,325,635,781),10266=>array(146,325,635,781),10267=>array(146,325,635,781),10268=>array(146,65,635,781),10269=>array(146,65,635,781),10270=>array(146,65,635,781),10271=>array(146,65,635,781),10272=>array(439,65,635,261),10273=>array(146,65,635,781),10274=>array(146,65,635,521),10275=>array(146,65,635,781),10276=>array(146,65,635,261),10277=>array(146,65,635,781),10278=>array(146,65,635,521),10279=>array(146,65,635,781),10280=>array(439,65,635,781),10281=>array(146,65,635,781),10282=>array(146,65,635,781),10283=>array(146,65,635,781),10284=>array(146,65,635,781),10285=>array(146,65,635,781),10286=>array(146,65,635,781),10287=>array(146,65,635,781),10288=>array(439,65,635,521),10289=>array(146,65,635,781),10290=>array(146,65,635,521),10291=>array(146,65,635,781),10292=>array(146,65,635,521),10293=>array(146,65,635,781),10294=>array(146,65,635,521),10295=>array(146,65,635,781),10296=>array(439,65,635,781),10297=>array(146,65,635,781),10298=>array(146,65,635,781),10299=>array(146,65,635,781),10300=>array(146,65,635,781),10301=>array(146,65,635,781),10302=>array(146,65,635,781),10303=>array(146,65,635,781),10304=>array(146,-195,342,0),10305=>array(146,-195,342,781),10306=>array(146,-195,342,521),10307=>array(146,-195,342,781),10308=>array(146,-195,342,261),10309=>array(146,-195,342,781),10310=>array(146,-195,342,521),10311=>array(146,-195,342,781),10312=>array(146,-195,635,781),10313=>array(146,-195,635,781),10314=>array(146,-195,635,781),10315=>array(146,-195,635,781),10316=>array(146,-195,635,781),10317=>array(146,-195,635,781),10318=>array(146,-195,635,781),10319=>array(146,-195,635,781),10320=>array(146,-195,635,521),10321=>array(146,-195,635,781),10322=>array(146,-195,635,521),10323=>array(146,-195,635,781),10324=>array(146,-195,635,521),10325=>array(146,-195,635,781),10326=>array(146,-195,635,521),10327=>array(146,-195,635,781),10328=>array(146,-195,635,781),10329=>array(146,-195,635,781),10330=>array(146,-195,635,781),10331=>array(146,-195,635,781),10332=>array(146,-195,635,781),10333=>array(146,-195,635,781),10334=>array(146,-195,635,781),10335=>array(146,-195,635,781),10336=>array(146,-195,635,261),10337=>array(146,-195,635,781),10338=>array(146,-195,635,521),10339=>array(146,-195,635,781),10340=>array(146,-195,635,261),10341=>array(146,-195,635,781),10342=>array(146,-195,635,521),10343=>array(146,-195,635,781),10344=>array(146,-195,635,781),10345=>array(146,-195,635,781),10346=>array(146,-195,635,781),10347=>array(146,-195,635,781),10348=>array(146,-195,635,781),10349=>array(146,-195,635,781),10350=>array(146,-195,635,781),10351=>array(146,-195,635,781),10352=>array(146,-195,635,521),10353=>array(146,-195,635,781),10354=>array(146,-195,635,521),10355=>array(146,-195,635,781),10356=>array(146,-195,635,521),10357=>array(146,-195,635,781),10358=>array(146,-195,635,521),10359=>array(146,-195,635,781),10360=>array(146,-195,635,781),10361=>array(146,-195,635,781),10362=>array(146,-195,635,781),10363=>array(146,-195,635,781),10364=>array(146,-195,635,781),10365=>array(146,-195,635,781),10366=>array(146,-195,635,781),10367=>array(146,-195,635,781),10368=>array(439,-195,635,0),10369=>array(146,-195,635,781),10370=>array(146,-195,635,521),10371=>array(146,-195,635,781),10372=>array(146,-195,635,261),10373=>array(146,-195,635,781),10374=>array(146,-195,635,521),10375=>array(146,-195,635,781),10376=>array(439,-195,635,781),10377=>array(146,-195,635,781),10378=>array(146,-195,635,781),10379=>array(146,-195,635,781),10380=>array(146,-195,635,781),10381=>array(146,-195,635,781),10382=>array(146,-195,635,781),10383=>array(146,-195,635,781),10384=>array(439,-195,635,521),10385=>array(146,-195,635,781),10386=>array(146,-195,635,521),10387=>array(146,-195,635,781),10388=>array(146,-195,635,521),10389=>array(146,-195,635,781),10390=>array(146,-195,635,521),10391=>array(146,-195,635,781),10392=>array(439,-195,635,781),10393=>array(146,-195,635,781),10394=>array(146,-195,635,781),10395=>array(146,-195,635,781),10396=>array(146,-195,635,781),10397=>array(146,-195,635,781),10398=>array(146,-195,635,781),10399=>array(146,-195,635,781),10400=>array(439,-195,635,261),10401=>array(146,-195,635,781),10402=>array(146,-195,635,521),10403=>array(146,-195,635,781),10404=>array(146,-195,635,261),10405=>array(146,-195,635,781),10406=>array(146,-195,635,521),10407=>array(146,-195,635,781),10408=>array(439,-195,635,781),10409=>array(146,-195,635,781),10410=>array(146,-195,635,781),10411=>array(146,-195,635,781),10412=>array(146,-195,635,781),10413=>array(146,-195,635,781),10414=>array(146,-195,635,781),10415=>array(146,-195,635,781),10416=>array(439,-195,635,521),10417=>array(146,-195,635,781),10418=>array(146,-195,635,521),10419=>array(146,-195,635,781),10420=>array(146,-195,635,521),10421=>array(146,-195,635,781),10422=>array(146,-195,635,521),10423=>array(146,-195,635,781),10424=>array(439,-195,635,781),10425=>array(146,-195,635,781),10426=>array(146,-195,635,781),10427=>array(146,-195,635,781),10428=>array(146,-195,635,781),10429=>array(146,-195,635,781),10430=>array(146,-195,635,781),10431=>array(146,-195,635,781),10432=>array(146,-195,635,0),10433=>array(146,-195,635,781),10434=>array(146,-195,635,521),10435=>array(146,-195,635,781),10436=>array(146,-195,635,261),10437=>array(146,-195,635,781),10438=>array(146,-195,635,521),10439=>array(146,-195,635,781),10440=>array(146,-195,635,781),10441=>array(146,-195,635,781),10442=>array(146,-195,635,781),10443=>array(146,-195,635,781),10444=>array(146,-195,635,781),10445=>array(146,-195,635,781),10446=>array(146,-195,635,781),10447=>array(146,-195,635,781),10448=>array(146,-195,635,521),10449=>array(146,-195,635,781),10450=>array(146,-195,635,521),10451=>array(146,-195,635,781),10452=>array(146,-195,635,521),10453=>array(146,-195,635,781),10454=>array(146,-195,635,521),10455=>array(146,-195,635,781),10456=>array(146,-195,635,781),10457=>array(146,-195,635,781),10458=>array(146,-195,635,781),10459=>array(146,-195,635,781),10460=>array(146,-195,635,781),10461=>array(146,-195,635,781),10462=>array(146,-195,635,781),10463=>array(146,-195,635,781),10464=>array(146,-195,635,261),10465=>array(146,-195,635,781),10466=>array(146,-195,635,521),10467=>array(146,-195,635,781),10468=>array(146,-195,635,261),10469=>array(146,-195,635,781),10470=>array(146,-195,635,521),10471=>array(146,-195,635,781),10472=>array(146,-195,635,781),10473=>array(146,-195,635,781),10474=>array(146,-195,635,781),10475=>array(146,-195,635,781),10476=>array(146,-195,635,781),10477=>array(146,-195,635,781),10478=>array(146,-195,635,781),10479=>array(146,-195,635,781),10480=>array(146,-195,635,521),10481=>array(146,-195,635,781),10482=>array(146,-195,635,521),10483=>array(146,-195,635,781),10484=>array(146,-195,635,521),10485=>array(146,-195,635,781),10486=>array(146,-195,635,521),10487=>array(146,-195,635,781),10488=>array(146,-195,635,781),10489=>array(146,-195,635,781),10490=>array(146,-195,635,781),10491=>array(146,-195,635,781),10492=>array(146,-195,635,781),10493=>array(146,-195,635,781),10494=>array(146,-195,635,781),10495=>array(146,-195,635,781),10502=>array(49,87,781,540),10503=>array(57,87,789,540),10506=>array(132,0,707,732),10507=>array(132,0,707,732),10560=>array(86,45,726,853),10561=>array(86,45,726,853),10627=>array(125,-163,628,760),10628=>array(125,-163,628,760),10702=>array(106,-258,732,800),10703=>array(106,-1,940,628),10704=>array(106,-1,940,628),10705=>array(106,-48,894,674),10706=>array(106,-48,894,674),10707=>array(106,-48,894,674),10708=>array(106,-48,894,675),10709=>array(106,-48,894,675),10731=>array(3,-233,491,807),10746=>array(106,0,732,627),10747=>array(106,0,732,627),10752=>array(28,-211,972,734),10753=>array(28,-211,972,734),10754=>array(28,-211,972,734),10764=>array(15,-227,1646,754),10765=>array(14,-227,548,754),10766=>array(14,-227,548,754),10767=>array(14,-227,548,754),10768=>array(14,-227,548,754),10769=>array(14,-227,576,754),10770=>array(14,-227,548,754),10771=>array(14,-227,548,754),10772=>array(14,-228,651,754),10773=>array(14,-227,548,754),10774=>array(14,-227,548,754),10775=>array(-30,-227,556,754),10776=>array(14,-227,548,754),10777=>array(14,-227,548,754),10778=>array(14,-227,548,754),10779=>array(15,-227,548,898),10780=>array(15,-372,548,754),10799=>array(125,20,713,607),10858=>array(106,212,732,660),10859=>array(106,-34,732,660),10877=>array(106,-150,732,632),10878=>array(106,-150,732,632),10879=>array(106,-150,732,632),10880=>array(106,-150,732,632),10881=>array(106,-150,732,688),10882=>array(106,-150,732,688),10883=>array(106,-150,732,827),10884=>array(106,-150,732,827),10885=>array(106,-217,732,630),10886=>array(106,-217,732,630),10887=>array(106,-124,732,582),10888=>array(106,-124,732,582),10889=>array(106,-281,732,630),10890=>array(106,-281,732,630),10891=>array(106,-303,732,814),10892=>array(106,-303,732,814),10893=>array(106,-183,732,653),10894=>array(106,-183,732,653),10895=>array(106,-245,732,765),10896=>array(106,-245,732,765),10897=>array(106,-278,732,782),10898=>array(106,-278,732,782),10899=>array(106,-263,732,771),10900=>array(106,-263,732,771),10901=>array(106,-50,732,733),10902=>array(106,-50,732,733),10903=>array(106,-50,732,733),10904=>array(106,-50,732,733),10905=>array(106,-45,732,678),10906=>array(106,-45,732,678),10907=>array(106,-81,732,724),10908=>array(106,-81,732,724),10909=>array(106,13,732,680),10910=>array(106,13,732,680),10911=>array(106,-239,732,746),10912=>array(106,-239,732,746),10926=>array(106,22,732,656),10927=>array(106,-83,732,684),10928=>array(106,-83,732,684),10929=>array(106,-246,732,684),10930=>array(106,-246,732,684),10931=>array(106,-205,732,672),10932=>array(106,-205,732,672),10933=>array(106,-304,732,672),10934=>array(106,-304,732,672),10935=>array(106,-252,732,713),10936=>array(106,-252,732,713),10937=>array(106,-316,732,713),10938=>array(106,-316,732,713),11001=>array(106,-195,732,609),11002=>array(106,-195,732,609),11008=>array(123,-23,744,598),11009=>array(94,-23,715,598),11010=>array(123,-23,744,598),11011=>array(94,-23,715,598),11012=>array(27,46,789,581),11013=>array(27,46,781,581),11014=>array(151,0,687,754),11015=>array(151,-25,687,729),11016=>array(123,-23,744,598),11017=>array(94,-23,715,598),11018=>array(123,-23,744,598),11019=>array(94,-23,715,598),11020=>array(27,46,789,581),11021=>array(151,-25,687,754),11022=>array(57,-25,800,372),11023=>array(57,255,800,652),11024=>array(38,-25,781,372),11025=>array(38,255,781,652),11026=>array(91,-124,854,643),11027=>array(91,-124,854,643),11028=>array(91,-124,854,643),11029=>array(91,-124,854,643),11030=>array(3,-124,766,643),11031=>array(3,-124,766,643),11032=>array(3,-124,766,643),11033=>array(3,-124,766,643),11034=>array(91,-124,854,643),11039=>array(18,-26,852,767),11040=>array(18,-26,852,767),11041=>array(73,-91,800,748),11042=>array(73,-91,800,748),11043=>array(17,-35,856,692),11044=>array(55,-250,1064,770),11091=>array(38,-47,832,788),11092=>array(38,-47,832,788),11360=>array(5,0,610,729),11361=>array(5,0,355,760),11362=>array(-17,0,610,729),11363=>array(6,0,692,729),11364=>array(92,-200,750,729),11365=>array(32,-46,639,594),11366=>array(13,-93,455,822),11367=>array(92,-157,932,729),11368=>array(84,-138,809,760),11369=>array(92,-157,805,729),11370=>array(84,-138,684,760),11371=>array(45,-157,768,729),11372=>array(45,-138,622,547),11373=>array(48,-14,769,741),11374=>array(92,-200,903,729),11375=>array(5,0,769,729),11376=>array(48,-14,769,741),11377=>array(15,0,778,560),11378=>array(30,0,1221,742),11379=>array(35,0,1056,560),11380=>array(38,0,637,586),11381=>array(92,0,606,729),11382=>array(84,0,481,547),11383=>array(64,0,725,552),11385=>array(84,-13,490,760),11386=>array(43,-14,644,560),11387=>array(78,0,467,547),11388=>array(-21,-121,166,425),11389=>array(3,326,484,734),11390=>array(72,-240,670,742),11391=>array(45,-240,680,729),11520=>array(45,-64,609,547),11521=>array(16,-232,625,546),11522=>array(41,-232,629,547),11523=>array(42,-10,585,807),11524=>array(40,-228,613,546),11525=>array(41,-228,988,546),11526=>array(20,-8,668,816),11527=>array(42,-9,974,547),11528=>array(39,0,589,547),11529=>array(41,-227,614,816),11530=>array(39,-9,985,546),11531=>array(42,-8,649,816),11532=>array(39,0,627,816),11533=>array(41,-8,988,546),11534=>array(41,-8,629,546),11535=>array(41,-228,846,816),11536=>array(42,-9,976,816),11537=>array(41,-9,630,816),11538=>array(46,-232,610,546),11539=>array(41,-228,984,661),11540=>array(45,-228,958,546),11541=>array(39,-228,978,816),11542=>array(44,0,628,546),11543=>array(41,-228,630,547),11544=>array(41,-232,627,546),11545=>array(44,-228,628,816),11546=>array(42,-232,610,547),11547=>array(43,-9,658,816),11548=>array(44,-228,989,547),11549=>array(44,-232,619,546),11550=>array(46,-232,639,546),11551=>array(44,-228,615,567),11552=>array(44,-9,1004,546),11553=>array(44,-228,619,816),11554=>array(42,-9,601,626),11555=>array(44,-228,622,816),11556=>array(42,-228,684,546),11557=>array(45,-8,959,816),11568=>array(55,-14,636,380),11569=>array(50,-14,892,742),11570=>array(50,-14,892,742),11571=>array(51,0,674,729),11572=>array(51,0,674,729),11573=>array(56,0,669,729),11574=>array(48,0,627,729),11575=>array(5,0,769,729),11576=>array(5,0,769,729),11577=>array(92,0,610,729),11578=>array(92,0,610,729),11579=>array(73,-14,729,742),11580=>array(73,0,916,729),11581=>array(92,0,754,729),11582=>array(92,0,549,729),11583=>array(92,0,754,729),11584=>array(50,-14,892,742),11585=>array(50,-84,892,815),11586=>array(92,0,281,729),11587=>array(21,0,720,729),11588=>array(92,0,745,729),11589=>array(-30,0,944,729),11590=>array(92,0,598,729),11591=>array(92,0,709,729),11592=>array(73,256,607,445),11593=>array(92,0,610,729),11594=>array(73,0,529,729),11595=>array(64,-14,892,742),11596=>array(82,0,695,729),11597=>array(92,0,745,729),11598=>array(92,0,610,729),11599=>array(92,0,280,729),11600=>array(82,0,695,729),11601=>array(92,0,281,729),11602=>array(42,-14,684,729),11603=>array(55,-14,636,742),11604=>array(50,-14,892,742),11605=>array(50,-95,892,742),11606=>array(92,0,745,729),11607=>array(92,0,281,729),11608=>array(92,0,744,729),11609=>array(50,-14,892,742),11610=>array(50,-14,892,823),11611=>array(50,-14,718,742),11612=>array(79,0,797,729),11613=>array(19,0,751,729),11614=>array(50,-14,718,742),11615=>array(92,0,610,729),11616=>array(5,0,769,729),11617=>array(92,0,745,729),11618=>array(92,0,599,729),11619=>array(50,0,800,729),11620=>array(92,0,654,729),11621=>array(50,0,800,729),11631=>array(64,490,651,729),11800=>array(69,-14,515,728),11807=>array(106,-34,732,415),11810=>array(86,403,389,760),11811=>array(68,403,371,760),11812=>array(86,-132,389,225),11813=>array(68,-132,371,225),11822=>array(69,0,515,742),19904=>array(83,-158,813,729),19905=>array(83,-158,813,729),19906=>array(83,-158,813,729),19907=>array(83,-158,813,729),19908=>array(83,-158,813,729),19909=>array(83,-158,813,729),19910=>array(83,-158,813,729),19911=>array(83,-158,813,729),19912=>array(83,-158,813,729),19913=>array(83,-158,814,729),19914=>array(83,-158,813,729),19915=>array(83,-158,813,729),19916=>array(83,-158,813,729),19917=>array(83,-158,813,729),19918=>array(83,-158,813,729),19919=>array(83,-158,813,729),19920=>array(83,-158,814,729),19921=>array(83,-158,813,729),19922=>array(83,-158,814,729),19923=>array(83,-158,813,729),19924=>array(83,-158,813,729),19925=>array(83,-158,813,729),19926=>array(83,-158,813,729),19927=>array(83,-158,813,729),19928=>array(83,-158,813,729),19929=>array(83,-158,813,729),19930=>array(83,-158,813,729),19931=>array(83,-158,814,729),19932=>array(83,-158,813,729),19933=>array(83,-158,813,729),19934=>array(83,-158,814,729),19935=>array(83,-158,813,729),19936=>array(83,-158,813,729),19937=>array(83,-158,813,729),19938=>array(83,-158,813,729),19939=>array(83,-158,813,729),19940=>array(83,-158,813,729),19941=>array(83,-158,814,729),19942=>array(83,-158,813,729),19943=>array(83,-158,813,729),19944=>array(83,-158,814,729),19945=>array(83,-158,813,729),19946=>array(83,-158,814,729),19947=>array(83,-158,813,729),19948=>array(83,-158,814,729),19949=>array(83,-158,813,729),19950=>array(83,-158,814,729),19951=>array(83,-158,813,729),19952=>array(83,-158,814,729),19953=>array(83,-158,813,729),19954=>array(83,-158,813,729),19955=>array(83,-158,813,729),19956=>array(83,-158,813,729),19957=>array(83,-158,814,729),19958=>array(83,-158,813,729),19959=>array(83,-158,813,729),19960=>array(83,-158,813,729),19961=>array(83,-158,814,729),19962=>array(83,-158,813,729),19963=>array(83,-158,814,729),19964=>array(83,-158,814,729),19965=>array(83,-158,813,729),19966=>array(83,-158,813,729),19967=>array(83,-158,813,729),42192=>array(92,0,692,729),42193=>array(92,0,692,729),42194=>array(41,0,641,729),42195=>array(92,0,778,729),42196=>array(5,0,677,729),42197=>array(5,0,677,729),42198=>array(50,-14,747,742),42199=>array(92,0,805,729),42200=>array(-30,0,683,729),42201=>array(0,-14,439,729),42202=>array(50,-14,670,742),42203=>array(50,-14,670,742),42204=>array(45,0,680,729),42205=>array(92,0,599,729),42206=>array(92,0,599,729),42207=>array(92,0,903,729),42208=>array(92,0,745,729),42209=>array(92,0,610,729),42210=>array(72,-14,647,742),42211=>array(92,0,750,729),42212=>array(20,0,678,729),42213=>array(5,0,769,729),42214=>array(5,0,769,729),42215=>array(92,0,745,729),42216=>array(25,-14,723,742),42217=>array(91,0,530,743),42218=>array(30,0,1072,729),42219=>array(19,0,751,729),42220=>array(-10,0,734,729),42221=>array(70,0,670,729),42222=>array(5,0,769,729),42223=>array(5,0,769,729),42224=>array(92,0,610,729),42225=>array(73,0,591,729),42226=>array(92,0,280,729),42227=>array(50,-14,800,742),42228=>array(92,-14,720,729),42229=>array(92,0,720,743),42230=>array(9,0,527,729),42231=>array(52,0,738,729),42232=>array(73,0,249,189),42233=>array(24,-142,249,189),42234=>array(73,0,601,189),42235=>array(73,-142,601,189),42236=>array(24,-142,249,547),42237=>array(73,0,249,547),42238=>array(73,0,515,405),42239=>array(73,134,515,492),42564=>array(26,-14,601,742),42565=>array(15,-14,511,560),42566=>array(92,0,428,729),42567=>array(83,0,356,547),42572=>array(57,-14,1348,654),42573=>array(47,-13,1126,547),42576=>array(49,0,1142,729),42577=>array(20,0,946,547),42580=>array(55,-14,1082,742),42581=>array(44,-14,888,560),42582=>array(92,0,1088,729),42583=>array(84,-14,880,560),42594=>array(60,-157,1058,729),42595=>array(56,-138,900,547),42596=>array(46,0,1069,729),42597=>array(55,0,888,547),42598=>array(92,0,1233,729),42599=>array(84,0,973,547),42600=>array(50,-14,800,742),42601=>array(43,-14,644,560),42602=>array(50,-14,987,742),42603=>array(43,-14,825,560),42604=>array(50,-14,1356,742),42605=>array(43,-14,1063,560),42606=>array(28,-208,933,743),42634=>array(5,-200,883,729),42635=>array(4,-216,709,547),42636=>array(5,0,677,729),42637=>array(4,0,575,547),42644=>array(81,0,716,729),42645=>array(84,0,634,760),42760=>array(96,0,404,693),42761=>array(96,0,404,693),42762=>array(96,0,404,693),42763=>array(96,0,404,693),42764=>array(96,0,404,693),42765=>array(96,0,404,693),42766=>array(96,0,404,693),42767=>array(96,0,404,693),42768=>array(96,0,404,693),42769=>array(96,0,404,693),42770=>array(96,0,404,693),42771=>array(96,0,404,693),42772=>array(96,0,404,693),42773=>array(96,0,404,693),42774=>array(96,0,404,693),42779=>array(58,326,342,736),42780=>array(58,324,342,734),42781=>array(88,326,199,734),42782=>array(88,326,199,734),42783=>array(88,0,199,408),42786=>array(67,0,409,729),42787=>array(67,0,355,547),42788=>array(56,224,479,742),42789=>array(56,42,479,560),42790=>array(92,-200,745,729),42791=>array(84,-216,634,760),42792=>array(5,-216,986,729),42793=>array(13,-215,810,702),42794=>array(67,-14,616,742),42795=>array(54,-202,493,560),42800=>array(92,0,473,547),42801=>array(52,-14,548,560),42802=>array(5,0,1344,729),42803=>array(43,-14,973,560),42804=>array(5,-14,1234,742),42805=>array(43,-14,1021,560),42806=>array(5,-14,1124,729),42807=>array(43,-14,970,560),42808=>array(5,0,1074,729),42809=>array(43,-14,907,560),42810=>array(5,0,1074,729),42811=>array(43,-14,907,560),42812=>array(5,-216,1030,729),42813=>array(43,-216,907,560),42814=>array(33,-14,653,742),42815=>array(43,-14,526,560),42816=>array(5,0,812,729),42817=>array(6,0,708,760),42822=>array(92,0,822,729),42823=>array(84,0,458,760),42824=>array(41,0,655,729),42825=>array(59,0,473,760),42826=>array(16,-14,902,742),42827=>array(5,-14,809,560),42830=>array(50,-14,1356,742),42831=>array(43,-14,1063,560),42832=>array(16,0,692,729),42833=>array(5,-208,671,560),42834=>array(34,0,907,729),42835=>array(34,-208,892,560),42838=>array(50,-188,800,742),42839=>array(45,-208,711,559),42852=>array(16,0,692,729),42853=>array(5,-208,671,760),42854=>array(16,0,692,729),42855=>array(5,-208,671,760),42880=>array(27,0,545,729),42881=>array(84,-208,259,547),42882=>array(84,-208,730,742),42883=>array(84,-208,634,560),42889=>array(112,0,288,547),42890=>array(83,141,303,405),42891=>array(140,245,316,729),42892=>array(95,458,211,729),42893=>array(81,0,716,729),42894=>array(84,-216,680,760),42896=>array(92,-157,868,729),42897=>array(84,-138,725,560),42912=>array(-11,-14,832,742),42913=>array(-11,-216,727,559),42914=>array(-11,0,805,729),42915=>array(-11,0,684,760),42916=>array(-11,0,848,729),42917=>array(-11,0,723,560),42918=>array(-11,0,781,729),42919=>array(-11,0,504,560),42920=>array(-11,-14,731,742),42921=>array(-11,-14,606,560),42922=>array(-68,0,794,729),43002=>array(84,0,972,547),43003=>array(84,0,591,729),43004=>array(41,0,641,729),43005=>array(92,0,903,729),43006=>array(92,0,280,928),43007=>array(31,0,1294,729),61184=>array(91,602,317,693),61185=>array(48,451,338,693),61186=>array(26,301,363,693),61187=>array(17,150,373,693),61188=>array(13,0,378,693),61189=>array(48,451,338,693),61190=>array(91,451,317,543),61191=>array(48,301,338,543),61192=>array(26,150,363,543),61193=>array(17,0,373,543),61194=>array(26,301,363,693),61195=>array(48,301,338,543),61196=>array(91,301,317,393),61197=>array(48,150,338,393),61198=>array(26,0,363,393),61199=>array(17,150,373,693),61200=>array(26,149,363,542),61201=>array(48,150,338,393),61202=>array(91,150,317,242),61203=>array(48,0,338,242),61204=>array(13,0,378,693),61205=>array(17,0,373,543),61206=>array(26,0,363,393),61207=>array(48,0,338,242),61208=>array(91,0,317,92),61209=>array(96,0,188,693),62464=>array(49,-14,563,819),62465=>array(49,-15,563,823),62466=>array(49,-14,604,828),62467=>array(49,0,853,828),62468=>array(49,-15,563,828),62469=>array(49,-15,563,828),62470=>array(29,-15,612,828),62471=>array(49,-14,846,828),62472=>array(49,0,541,828),62473=>array(49,-14,563,820),62474=>array(49,-6,1114,828),62475=>array(49,-14,563,828),62476=>array(63,-15,578,820),62477=>array(54,0,839,828),62478=>array(49,-15,563,819),62479=>array(49,-15,563,840),62480=>array(49,0,875,828),62481=>array(63,-14,578,819),62482=>array(44,-14,699,828),62483=>array(34,-14,570,828),62484=>array(49,-14,837,828),62485=>array(49,-14,563,819),62486=>array(49,0,858,828),62487=>array(49,-14,563,820),62488=>array(44,-14,558,828),62489=>array(64,0,579,828),62490=>array(50,-15,628,820),62491=>array(49,-14,563,819),62492=>array(63,-14,577,828),62493=>array(49,-14,581,820),62494=>array(63,-14,578,819),62495=>array(24,-14,546,828),62496=>array(49,-15,563,828),62497=>array(63,-15,577,828),62498=>array(49,-73,563,828),62499=>array(49,-15,563,830),62500=>array(49,-15,569,828),62501=>array(49,-14,627,828),62502=>array(49,-14,914,828),62504=>array(45,-228,960,816),62505=>array(54,-223,791,843),62506=>array(54,-14,510,761),62507=>array(54,-14,510,773),62508=>array(54,-14,510,866),62509=>array(54,-14,510,812),62510=>array(54,-14,510,877),62511=>array(54,-14,510,803),62512=>array(54,-232,501,761),62513=>array(54,-232,501,793),62514=>array(54,-232,501,891),62515=>array(54,-232,501,803),62516=>array(54,0,520,761),62517=>array(54,0,520,793),62518=>array(54,0,520,803),62519=>array(54,-0,770,761),62520=>array(54,-0,770,773),62521=>array(54,-0,770,884),62522=>array(54,-0,770,793),62523=>array(54,-0,770,803),62524=>array(54,-232,557,761),62525=>array(54,-232,557,773),62526=>array(54,-232,557,894),62527=>array(54,-232,557,793),62528=>array(54,-232,557,803),62529=>array(54,-232,557,844),63173=>array(43,-14,644,760),64256=>array(19,0,819,760),64257=>array(21,0,657,760),64258=>array(19,0,657,760),64259=>array(19,0,1031,760),64260=>array(19,0,1032,760),64261=>array(19,0,785,760),64262=>array(52,-14,997,742),64275=>array(74,-14,1300,760),64276=>array(78,-14,1301,760),64277=>array(78,-208,1300,760),64278=>array(78,-208,1300,760),64279=>array(78,-208,1629,760),64285=>array(66,32,228,547),64286=>array(182,635,510,780),64287=>array(66,32,500,547),64288=>array(38,0,590,547),64289=>array(85,0,855,547),64290=>array(43,0,731,547),64291=>array(91,0,778,547),64292=>array(43,0,730,547),64293=>array(43,0,730,739),64294=>array(91,0,778,547),64295=>array(43,0,730,547),64296=>array(47,-4,730,547),64297=>array(106,256,732,627),64298=>array(20,0,750,710),64299=>array(20,0,750,723),64300=>array(20,0,750,710),64301=>array(20,0,750,710),64302=>array(84,-171,644,547),64303=>array(84,-217,644,547),64304=>array(84,-171,644,547),64305=>array(43,0,567,547),64306=>array(43,-9,418,547),64307=>array(43,0,545,547),64308=>array(91,0,596,547),64309=>array(43,0,346,547),64310=>array(43,0,442,547),64312=>array(90,-13,624,553),64313=>array(43,164,369,547),64314=>array(43,-240,487,547),64315=>array(43,0,511,547),64316=>array(43,0,527,711),64318=>array(43,0,633,554),64320=>array(43,0,362,547),64321=>array(90,-13,624,547),64323=>array(91,-240,584,547),64324=>array(91,0,603,547),64326=>array(33,0,564,547),64327=>array(91,-240,660,546),64328=>array(43,0,511,547),64329=>array(20,0,750,547),64330=>array(10,-4,592,547),64331=>array(91,0,252,710),64332=>array(43,0,567,710),64333=>array(43,0,511,710),64334=>array(91,0,603,710),64335=>array(43,0,652,729),64338=>array(63,-244,921,327),64339=>array(63,-244,1068,327),64340=>array(-10,-244,292,293),64341=>array(-10,-244,418,293),64342=>array(63,-244,921,327),64343=>array(63,-244,1068,327),64344=>array(-10,-244,302,293),64345=>array(-10,-244,418,293),64346=>array(63,-244,921,327),64347=>array(63,-244,1068,327),64348=>array(-10,-244,302,293),64349=>array(-10,-244,418,293),64350=>array(63,-5,921,566),64351=>array(63,-5,1068,566),64352=>array(-10,0,292,640),64353=>array(-10,0,418,640),64354=>array(63,-5,921,566),64355=>array(63,-5,1068,566),64356=>array(-10,0,302,640),64357=>array(-10,0,418,640),64358=>array(63,-5,921,599),64359=>array(63,-5,1068,599),64360=>array(-10,0,333,672),64361=>array(-10,0,418,672),64362=>array(63,-24,1082,786),64363=>array(63,-29,1201,786),64364=>array(-10,0,575,786),64365=>array(-10,0,729,786),64366=>array(63,-24,1082,786),64367=>array(63,-29,1201,786),64368=>array(-10,0,575,786),64369=>array(-10,0,729,786),64370=>array(77,-244,720,425),64371=>array(77,-244,730,425),64372=>array(-10,-244,628,405),64373=>array(-10,-244,730,405),64374=>array(77,-244,720,425),64375=>array(77,-244,730,425),64376=>array(-10,-117,628,405),64377=>array(-10,-117,730,405),64378=>array(77,-244,720,425),64379=>array(77,-244,730,425),64380=>array(-10,-244,628,405),64381=>array(-10,-244,730,405),64382=>array(77,-244,720,425),64383=>array(77,-244,730,425),64384=>array(-10,-244,628,405),64385=>array(-10,-244,730,405),64386=>array(61,-146,442,415),64387=>array(61,-146,587,415),64388=>array(61,-15,442,586),64389=>array(61,-15,587,586),64390=>array(61,-15,442,708),64391=>array(61,-15,587,708),64392=>array(61,-15,442,746),64393=>array(61,-15,587,746),64394=>array(-42,-244,508,615),64395=>array(-42,-244,632,615),64396=>array(-42,-244,520,648),64397=>array(-42,-244,632,648),64398=>array(63,-39,1024,760),64399=>array(63,-39,1034,760),64400=>array(-10,0,582,760),64401=>array(-10,0,591,760),64402=>array(63,-39,1024,910),64403=>array(63,-39,1034,910),64404=>array(-10,0,582,910),64405=>array(-10,0,591,910),64406=>array(63,-293,1024,910),64407=>array(63,-293,1034,910),64408=>array(-10,-269,582,910),64409=>array(-10,-269,591,910),64410=>array(63,-39,1024,910),64411=>array(63,-39,1034,910),64412=>array(-10,0,582,910),64413=>array(-10,0,591,910),64414=>array(62,-165,779,366),64415=>array(62,-244,910,287),64416=>array(62,-165,779,636),64417=>array(62,-244,910,514),64418=>array(-10,0,333,672),64419=>array(-10,0,418,672),64426=>array(70,-33,877,506),64427=>array(70,-244,890,369),64428=>array(-10,-33,633,506),64429=>array(-10,-244,670,369),64467=>array(70,-27,814,854),64468=>array(70,-27,941,854),64469=>array(-10,0,582,928),64470=>array(-10,0,591,928),64473=>array(-42,-244,547,556),64474=>array(-42,-244,637,556),64488=>array(-10,0,292,293),64489=>array(-10,0,418,293),64508=>array(63,-107,863,462),64509=>array(63,-126,1021,291),64510=>array(-10,-166,302,293),64511=>array(-10,-166,418,293),65056=>array(-419,735,0,880),65057=>array(0,735,419,880),65058=>array(-362,756,0,894),65059=>array(0,756,362,894),65136=>array(28,591,313,825),65137=>array(-10,0,352,825),65138=>array(28,591,313,881),65139=>array(51,0,356,177),65140=>array(28,-239,313,-5),65142=>array(28,591,313,723),65143=>array(-10,0,352,723),65144=>array(28,590,313,881),65145=>array(-10,0,352,881),65146=>array(28,-137,313,-5),65147=>array(-10,-137,352,125),65148=>array(9,599,333,869),65149=>array(-10,0,352,869),65150=>array(36,610,304,878),65151=>array(-10,0,352,878),65152=>array(73,20,437,493),65153=>array(-20,0,362,955),65154=>array(-20,0,385,955),65155=>array(75,0,259,993),65156=>array(75,0,385,993),65157=>array(-42,-244,547,603),65158=>array(-42,-244,637,603),65159=>array(76,-245,259,760),65160=>array(76,-245,385,760),65161=>array(63,-107,863,603),65162=>array(63,-126,1021,480),65163=>array(-10,0,292,627),65164=>array(-10,0,418,627),65165=>array(84,0,259,760),65166=>array(84,0,385,760),65167=>array(63,-149,921,327),65168=>array(63,-149,1068,327),65169=>array(-10,-173,292,293),65170=>array(-10,-173,418,293),65171=>array(48,-30,540,513),65172=>array(65,0,616,513),65173=>array(63,-5,921,415),65174=>array(63,-5,1068,415),65175=>array(-10,0,302,488),65176=>array(-10,0,418,488),65177=>array(63,-5,921,537),65178=>array(63,-5,1068,537),65179=>array(-10,0,302,610),65180=>array(-10,0,418,610),65181=>array(77,-244,720,425),65182=>array(77,-244,730,425),65183=>array(-10,-173,628,405),65184=>array(-10,-173,730,405),65185=>array(77,-244,720,425),65186=>array(77,-244,730,425),65187=>array(-10,0,628,405),65188=>array(-10,0,730,405),65189=>array(77,-244,720,579),65190=>array(77,-244,730,579),65191=>array(-10,0,628,530),65192=>array(-10,0,730,530),65193=>array(61,-15,442,415),65194=>array(61,-15,587,415),65195=>array(61,-15,442,579),65196=>array(61,-15,587,579),65197=>array(-42,-244,508,269),65198=>array(-42,-244,632,269),65199=>array(-42,-244,508,457),65200=>array(-42,-244,632,457),65201=>array(63,-244,1297,366),65202=>array(63,-244,1423,366),65203=>array(-10,-14,901,366),65204=>array(-10,-14,1027,366),65205=>array(63,-244,1297,586),65206=>array(63,-244,1423,586),65207=>array(-10,-14,901,586),65208=>array(-10,-14,1027,586),65209=>array(63,-244,1265,362),65210=>array(63,-244,1374,362),65211=>array(-10,0,886,362),65212=>array(-10,0,995,362),65213=>array(63,-244,1265,457),65214=>array(63,-244,1374,457),65215=>array(-10,0,886,481),65216=>array(-10,0,995,481),65217=>array(70,0,971,760),65218=>array(70,0,1081,760),65219=>array(-10,0,875,760),65220=>array(-10,0,984,760),65221=>array(70,0,971,760),65222=>array(70,0,1081,760),65223=>array(-10,0,875,760),65224=>array(-10,0,984,760),65225=>array(87,-244,720,521),65226=>array(57,-244,693,382),65227=>array(-10,0,583,521),65228=>array(-10,0,574,382),65229=>array(87,-244,720,652),65230=>array(57,-244,693,530),65231=>array(-10,0,583,652),65232=>array(-10,0,574,530),65233=>array(63,-24,1082,627),65234=>array(63,-29,1201,627),65235=>array(-10,0,575,627),65236=>array(-10,0,729,627),65237=>array(52,-215,825,635),65238=>array(52,-244,911,476),65239=>array(-10,0,575,635),65240=>array(-10,0,729,635),65241=>array(70,-27,814,760),65242=>array(70,-27,941,760),65243=>array(-10,0,582,760),65244=>array(-10,0,591,760),65245=>array(70,-142,778,760),65246=>array(70,-142,902,760),65247=>array(-10,0,292,760),65248=>array(-10,0,418,760),65249=>array(68,-244,660,369),65250=>array(68,-244,794,311),65251=>array(-10,-23,546,311),65252=>array(-10,-23,680,311),65253=>array(62,-165,779,457),65254=>array(62,-244,910,383),65255=>array(-10,0,292,481),65256=>array(-10,0,418,481),65257=>array(48,-30,540,358),65258=>array(65,0,616,366),65259=>array(-10,-33,633,506),65260=>array(-10,-244,670,369),65261=>array(-42,-244,547,322),65262=>array(-42,-244,637,322),65263=>array(63,-107,863,462),65264=>array(63,-126,1021,291),65265=>array(63,-244,863,462),65266=>array(63,-244,1021,291),65267=>array(-10,-166,302,293),65268=>array(-10,-166,418,293),65269=>array(-62,-15,643,882),65270=>array(-62,-15,769,882),65271=>array(33,-15,643,944),65272=>array(33,-15,769,944),65273=>array(41,-245,643,760),65274=>array(41,-245,769,760),65275=>array(41,-15,643,760),65276=>array(41,-15,769,760),65533=>array(24,-139,1089,926),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>348,33=>456,34=>521,35=>838,36=>696,37=>1002,38=>872,39=>306,40=>457,41=>457,42=>523,43=>838,44=>380,45=>415,46=>380,47=>365,48=>696,49=>696,50=>696,51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>400,59=>400,60=>838,61=>838,62=>838,63=>580,64=>1000,65=>774,66=>762,67=>734,68=>830,69=>683,70=>683,71=>821,72=>837,73=>372,74=>372,75=>775,76=>637,77=>995,78=>837,79=>850,80=>733,81=>850,82=>770,83=>720,84=>682,85=>812,86=>774,87=>1103,88=>771,89=>724,90=>725,91=>457,92=>365,93=>457,94=>838,95=>500,96=>500,97=>675,98=>716,99=>593,100=>716,101=>678,102=>435,103=>716,104=>712,105=>343,106=>343,107=>665,108=>343,109=>1042,110=>712,111=>687,112=>716,113=>716,114=>493,115=>595,116=>478,117=>712,118=>652,119=>924,120=>645,121=>652,122=>582,123=>712,124=>365,125=>712,126=>838,160=>348,161=>456,162=>696,163=>696,164=>636,165=>696,166=>365,167=>500,168=>500,169=>1000,170=>564,171=>646,172=>838,173=>415,174=>1000,175=>500,176=>500,177=>838,178=>438,179=>438,180=>500,181=>736,182=>636,183=>380,184=>500,185=>438,186=>564,187=>646,188=>1035,189=>1035,190=>1035,191=>580,192=>774,193=>774,194=>774,195=>774,196=>774,197=>774,198=>1085,199=>734,200=>683,201=>683,202=>683,203=>683,204=>372,205=>372,206=>372,207=>372,208=>838,209=>837,210=>850,211=>850,212=>850,213=>850,214=>850,215=>838,216=>850,217=>812,218=>812,219=>812,220=>812,221=>724,222=>738,223=>719,224=>675,225=>675,226=>675,227=>675,228=>675,229=>675,230=>1048,231=>593,232=>678,233=>678,234=>678,235=>678,236=>343,237=>343,238=>343,239=>343,240=>687,241=>712,242=>687,243=>687,244=>687,245=>687,246=>687,247=>838,248=>687,249=>712,250=>712,251=>712,252=>712,253=>652,254=>716,255=>652,256=>774,257=>675,258=>774,259=>675,260=>774,261=>675,262=>734,263=>593,264=>734,265=>593,266=>734,267=>593,268=>734,269=>593,270=>830,271=>716,272=>838,273=>716,274=>683,275=>678,276=>683,277=>678,278=>683,279=>678,280=>683,281=>678,282=>683,283=>678,284=>821,285=>716,286=>821,287=>716,288=>821,289=>716,290=>821,291=>716,292=>837,293=>712,294=>974,295=>790,296=>372,297=>343,298=>372,299=>343,300=>372,301=>343,302=>372,303=>343,304=>372,305=>343,306=>744,307=>686,308=>372,309=>343,310=>775,311=>665,312=>665,313=>637,314=>343,315=>637,316=>343,317=>637,318=>479,319=>637,320=>557,321=>642,322=>371,323=>837,324=>712,325=>837,326=>712,327=>837,328=>712,329=>983,330=>837,331=>712,332=>850,333=>687,334=>850,335=>687,336=>850,337=>687,338=>1167,339=>1094,340=>770,341=>493,342=>770,343=>493,344=>770,345=>493,346=>720,347=>595,348=>720,349=>595,350=>720,351=>595,352=>720,353=>595,354=>682,355=>478,356=>682,357=>478,358=>682,359=>478,360=>812,361=>712,362=>812,363=>712,364=>812,365=>712,366=>812,367=>712,368=>812,369=>712,370=>812,371=>712,372=>1103,373=>924,374=>724,375=>652,376=>724,377=>725,378=>582,379=>725,380=>582,381=>725,382=>582,383=>435,384=>716,385=>811,386=>762,387=>716,388=>762,389=>716,390=>734,391=>734,392=>593,393=>838,394=>879,395=>757,396=>716,397=>688,398=>683,399=>849,400=>696,401=>683,402=>435,403=>821,404=>793,405=>1045,406=>436,407=>389,408=>775,409=>665,410=>360,411=>592,412=>1042,413=>837,414=>712,415=>850,416=>874,417=>687,418=>1083,419=>912,420=>782,421=>716,422=>770,423=>720,424=>595,425=>683,426=>552,427=>478,428=>707,429=>478,430=>682,431=>835,432=>712,433=>850,434=>813,435=>797,436=>778,437=>725,438=>582,439=>772,440=>772,441=>641,442=>582,443=>696,444=>772,445=>641,446=>573,447=>716,448=>372,449=>659,450=>544,451=>372,452=>1555,453=>1412,454=>1298,455=>1009,456=>980,457=>686,458=>1209,459=>1180,460=>1055,461=>774,462=>675,463=>372,464=>343,465=>850,466=>687,467=>812,468=>712,469=>812,470=>712,471=>812,472=>712,473=>812,474=>712,475=>812,476=>712,477=>678,478=>774,479=>675,480=>774,481=>675,482=>1085,483=>1048,484=>821,485=>716,486=>821,487=>716,488=>775,489=>665,490=>850,491=>687,492=>850,493=>687,494=>772,495=>582,496=>343,497=>1555,498=>1412,499=>1298,500=>821,501=>716,502=>1289,503=>787,504=>837,505=>712,506=>774,507=>675,508=>1085,509=>1048,510=>850,511=>687,512=>774,513=>675,514=>774,515=>675,516=>683,517=>678,518=>683,519=>678,520=>372,521=>343,522=>372,523=>343,524=>850,525=>687,526=>850,527=>687,528=>770,529=>493,530=>770,531=>493,532=>812,533=>712,534=>812,535=>712,536=>720,537=>595,538=>682,539=>478,540=>690,541=>607,542=>837,543=>712,544=>837,545=>865,546=>809,547=>659,548=>725,549=>582,550=>774,551=>675,552=>683,553=>678,554=>850,555=>687,556=>850,557=>687,558=>850,559=>687,560=>850,561=>687,562=>724,563=>652,564=>492,565=>867,566=>512,567=>343,568=>1088,569=>1088,570=>774,571=>734,572=>593,573=>637,574=>682,575=>595,576=>582,577=>782,578=>614,579=>762,580=>812,581=>774,582=>683,583=>678,584=>372,585=>343,586=>860,587=>791,588=>770,589=>493,590=>724,591=>652,592=>675,593=>716,594=>716,595=>716,596=>593,597=>593,598=>717,599=>792,600=>678,601=>678,602=>876,603=>557,604=>545,605=>815,606=>731,607=>343,608=>792,609=>716,610=>627,611=>644,612=>635,613=>712,614=>712,615=>712,616=>545,617=>440,618=>545,619=>559,620=>693,621=>343,622=>841,623=>1042,624=>1042,625=>1042,626=>712,627=>793,628=>707,629=>687,630=>909,631=>681,632=>796,633=>538,634=>538,635=>650,636=>493,637=>493,638=>596,639=>596,640=>642,641=>642,642=>595,643=>415,644=>435,645=>605,646=>552,647=>478,648=>478,649=>920,650=>772,651=>670,652=>652,653=>924,654=>652,655=>724,656=>694,657=>684,658=>641,659=>641,660=>573,661=>573,662=>573,663=>573,664=>850,665=>633,666=>731,667=>685,668=>691,669=>343,670=>732,671=>539,672=>792,673=>573,674=>573,675=>1156,676=>1214,677=>1155,678=>975,679=>769,680=>929,681=>1026,682=>862,683=>780,684=>591,685=>415,686=>677,687=>789,688=>456,689=>456,690=>219,691=>315,692=>315,693=>315,694=>411,695=>591,696=>417,697=>302,698=>521,699=>380,700=>380,701=>380,702=>366,703=>366,704=>326,705=>326,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>306,713=>500,714=>500,715=>500,716=>306,717=>500,718=>500,719=>500,720=>337,721=>337,722=>366,723=>366,724=>500,725=>500,726=>416,727=>328,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>351,735=>500,736=>412,737=>219,738=>381,739=>413,740=>326,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500,749=>500,750=>657,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>698,881=>565,882=>1022,883=>836,884=>302,885=>302,886=>837,887=>701,890=>500,891=>593,892=>550,893=>549,894=>400,900=>441,901=>500,902=>797,903=>380,904=>846,905=>1009,906=>563,908=>891,910=>980,911=>894,912=>390,913=>774,914=>762,915=>637,916=>774,917=>683,918=>725,919=>837,920=>850,921=>372,922=>775,923=>774,924=>995,925=>837,926=>632,927=>850,928=>837,929=>733,931=>683,932=>682,933=>724,934=>850,935=>771,936=>850,937=>850,938=>372,939=>724,940=>687,941=>557,942=>712,943=>390,944=>675,945=>687,946=>716,947=>681,948=>687,949=>557,950=>591,951=>712,952=>687,953=>390,954=>710,955=>633,956=>736,957=>681,958=>591,959=>687,960=>791,961=>716,962=>593,963=>779,964=>638,965=>675,966=>782,967=>645,968=>794,969=>869,970=>390,971=>675,972=>687,973=>675,974=>869,975=>775,976=>651,977=>661,978=>746,979=>981,980=>746,981=>796,982=>869,983=>744,984=>850,985=>687,986=>734,987=>593,988=>683,989=>494,990=>702,991=>660,992=>919,993=>627,994=>1093,995=>837,996=>832,997=>716,998=>928,999=>744,1000=>733,1001=>650,1002=>789,1003=>671,1004=>752,1005=>716,1006=>682,1007=>590,1008=>744,1009=>716,1010=>593,1011=>343,1012=>850,1013=>645,1014=>644,1015=>738,1016=>716,1017=>734,1018=>995,1019=>732,1020=>716,1021=>698,1022=>734,1023=>698,1024=>683,1025=>683,1026=>878,1027=>637,1028=>734,1029=>720,1030=>372,1031=>372,1032=>372,1033=>1154,1034=>1130,1035=>878,1036=>817,1037=>837,1038=>771,1039=>837,1040=>774,1041=>762,1042=>762,1043=>637,1044=>891,1045=>683,1046=>1224,1047=>710,1048=>837,1049=>837,1050=>817,1051=>831,1052=>995,1053=>837,1054=>850,1055=>837,1056=>733,1057=>734,1058=>682,1059=>771,1060=>992,1061=>771,1062=>928,1063=>808,1064=>1235,1065=>1326,1066=>939,1067=>1036,1068=>762,1069=>734,1070=>1174,1071=>770,1072=>675,1073=>698,1074=>633,1075=>522,1076=>808,1077=>678,1078=>995,1079=>581,1080=>701,1081=>701,1082=>679,1083=>732,1084=>817,1085=>691,1086=>687,1087=>691,1088=>716,1089=>593,1090=>580,1091=>652,1092=>992,1093=>645,1094=>741,1095=>687,1096=>1062,1097=>1105,1098=>751,1099=>904,1100=>632,1101=>593,1102=>972,1103=>642,1104=>678,1105=>678,1106=>714,1107=>522,1108=>593,1109=>595,1110=>343,1111=>343,1112=>343,1113=>991,1114=>956,1115=>734,1116=>679,1117=>701,1118=>652,1119=>691,1120=>1093,1121=>869,1122=>840,1123=>736,1124=>1012,1125=>839,1126=>992,1127=>832,1128=>1358,1129=>1121,1130=>850,1131=>687,1132=>1236,1133=>1007,1134=>696,1135=>557,1136=>1075,1137=>1061,1138=>850,1139=>687,1140=>850,1141=>695,1142=>850,1143=>695,1144=>1148,1145=>1043,1146=>1074,1147=>863,1148=>1405,1149=>1173,1150=>1093,1151=>869,1152=>734,1153=>593,1154=>652,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>957,1163=>807,1164=>762,1165=>611,1166=>733,1167=>716,1168=>637,1169=>522,1170=>666,1171=>543,1172=>808,1173=>669,1174=>1224,1175=>995,1176=>710,1177=>581,1178=>775,1179=>679,1180=>817,1181=>679,1182=>817,1183=>679,1184=>1015,1185=>826,1186=>956,1187=>808,1188=>1103,1189=>874,1190=>1273,1191=>1017,1192=>952,1193=>858,1194=>734,1195=>593,1196=>682,1197=>580,1198=>724,1199=>652,1200=>724,1201=>652,1202=>771,1203=>645,1204=>1112,1205=>1000,1206=>808,1207=>687,1208=>808,1209=>687,1210=>808,1211=>712,1212=>1026,1213=>810,1214=>1026,1215=>810,1216=>372,1217=>1224,1218=>995,1219=>775,1220=>630,1221=>951,1222=>805,1223=>837,1224=>691,1225=>957,1226=>807,1227=>808,1228=>687,1229=>1115,1230=>933,1231=>343,1232=>774,1233=>675,1234=>774,1235=>675,1236=>1085,1237=>1048,1238=>683,1239=>678,1240=>849,1241=>678,1242=>849,1243=>678,1244=>1224,1245=>995,1246=>710,1247=>581,1248=>772,1249=>641,1250=>837,1251=>701,1252=>837,1253=>701,1254=>850,1255=>687,1256=>850,1257=>687,1258=>850,1259=>687,1260=>734,1261=>593,1262=>771,1263=>652,1264=>771,1265=>652,1266=>771,1267=>652,1268=>808,1269=>687,1270=>637,1271=>522,1272=>1036,1273=>904,1274=>666,1275=>543,1276=>771,1277=>645,1278=>771,1279=>645,1280=>762,1281=>608,1282=>1159,1283=>893,1284=>1119,1285=>920,1286=>828,1287=>693,1288=>1242,1289=>1017,1290=>1289,1291=>1013,1292=>839,1293=>638,1294=>938,1295=>803,1296=>696,1297=>557,1298=>831,1299=>732,1300=>1286,1301=>1068,1302=>1065,1303=>979,1304=>1082,1305=>1013,1306=>850,1307=>716,1308=>1103,1309=>924,1310=>817,1311=>679,1312=>1267,1313=>1059,1314=>1273,1315=>1017,1316=>957,1317=>807,1329=>813,1330=>729,1331=>728,1332=>731,1333=>729,1334=>733,1335=>652,1336=>720,1337=>903,1338=>728,1339=>666,1340=>558,1341=>961,1342=>788,1343=>713,1344=>651,1345=>730,1346=>715,1347=>704,1348=>780,1349=>689,1350=>715,1351=>708,1352=>731,1353=>677,1354=>867,1355=>711,1356=>780,1357=>731,1358=>715,1359=>693,1360=>666,1361=>698,1362=>576,1363=>833,1364=>698,1365=>763,1366=>855,1369=>330,1370=>342,1371=>308,1372=>374,1373=>313,1374=>461,1375=>468,1377=>938,1378=>642,1379=>704,1380=>708,1381=>642,1382=>644,1383=>565,1384=>642,1385=>756,1386=>704,1387=>643,1388=>310,1389=>984,1390=>638,1391=>643,1392=>643,1393=>603,1394=>643,1395=>642,1396=>643,1397=>309,1398=>643,1399=>486,1400=>643,1401=>366,1402=>938,1403=>573,1404=>666,1405=>643,1406=>643,1407=>934,1408=>643,1409=>643,1410=>479,1411=>934,1412=>648,1413=>620,1414=>813,1415=>812,1417=>360,1418=>374,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>415,1471=>0,1472=>372,1473=>0,1474=>0,1475=>372,1478=>497,1479=>0,1488=>728,1489=>610,1490=>447,1491=>588,1492=>687,1493=>343,1494=>400,1495=>687,1496=>679,1497=>294,1498=>578,1499=>566,1500=>605,1501=>696,1502=>724,1503=>343,1504=>453,1505=>680,1506=>666,1507=>675,1508=>658,1509=>661,1510=>653,1511=>736,1512=>602,1513=>758,1514=>683,1520=>664,1521=>567,1522=>519,1523=>444,1524=>710,1542=>667,1543=>667,1545=>884,1546=>1157,1548=>380,1557=>0,1563=>400,1567=>580,1569=>511,1570=>343,1571=>343,1572=>622,1573=>343,1574=>917,1575=>343,1576=>1005,1577=>590,1578=>1005,1579=>1005,1580=>721,1581=>721,1582=>721,1583=>513,1584=>513,1585=>576,1586=>576,1587=>1380,1588=>1380,1589=>1345,1590=>1345,1591=>1039,1592=>1039,1593=>683,1594=>683,1600=>342,1601=>1162,1602=>894,1603=>917,1604=>868,1605=>733,1606=>854,1607=>590,1608=>622,1609=>917,1610=>917,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0,1626=>500,1632=>610,1633=>610,1634=>610,1635=>610,1636=>610,1637=>610,1638=>610,1639=>610,1640=>610,1641=>610,1642=>610,1643=>374,1644=>380,1645=>545,1646=>1005,1647=>894,1648=>0,1652=>292,1657=>1005,1658=>1005,1659=>1005,1660=>1005,1661=>1005,1662=>1005,1663=>1005,1664=>1005,1665=>721,1666=>721,1667=>721,1668=>721,1669=>721,1670=>721,1671=>721,1672=>445,1673=>445,1674=>445,1675=>445,1676=>445,1677=>445,1678=>445,1679=>445,1680=>445,1681=>576,1682=>576,1683=>576,1684=>576,1685=>681,1686=>576,1687=>576,1688=>576,1689=>576,1690=>1380,1691=>1380,1692=>1380,1693=>1345,1694=>1345,1695=>1039,1696=>683,1697=>1162,1698=>1162,1699=>1162,1700=>1162,1701=>1162,1702=>1162,1703=>894,1704=>894,1705=>1024,1706=>1271,1707=>1024,1708=>917,1709=>917,1710=>917,1711=>1024,1712=>1024,1713=>1024,1714=>1024,1715=>1024,1716=>1024,1717=>868,1718=>868,1719=>868,1720=>868,1721=>854,1722=>854,1723=>854,1724=>854,1725=>854,1726=>938,1727=>721,1734=>622,1740=>917,1742=>917,1749=>590,1776=>610,1777=>610,1778=>610,1779=>610,1780=>610,1781=>610,1782=>610,1783=>610,1784=>610,1785=>610,1984=>696,1985=>696,1986=>696,1987=>696,1988=>696,1989=>696,1990=>696,1991=>696,1992=>696,1993=>696,1994=>343,1995=>547,1996=>543,1997=>652,1998=>691,1999=>691,2000=>594,2001=>691,2002=>904,2003=>551,2004=>551,2005=>627,2006=>688,2007=>444,2008=>1022,2009=>506,2010=>826,2011=>691,2012=>652,2013=>912,2014=>627,2015=>707,2016=>506,2017=>652,2018=>574,2019=>627,2020=>627,2021=>627,2022=>574,2023=>574,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>380,2037=>380,2040=>691,2041=>691,2042=>415,3647=>696,3713=>790,3714=>748,3716=>749,3719=>569,3720=>742,3722=>744,3725=>761,3732=>706,3733=>704,3734=>747,3735=>819,3737=>730,3738=>727,3739=>727,3740=>922,3741=>827,3742=>866,3743=>866,3745=>836,3746=>761,3747=>770,3749=>769,3751=>713,3754=>827,3755=>1031,3757=>724,3758=>784,3759=>934,3760=>688,3761=>0,3762=>610,3763=>610,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>670,3776=>516,3777=>860,3778=>516,3779=>650,3780=>632,3782=>759,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>771,3793=>771,3794=>693,3795=>836,3796=>729,3797=>729,3798=>849,3799=>790,3800=>759,3801=>910,3804=>1363,3805=>1363,4256=>874,4257=>733,4258=>679,4259=>834,4260=>615,4261=>768,4262=>753,4263=>914,4264=>453,4265=>620,4266=>843,4267=>882,4268=>625,4269=>854,4270=>781,4271=>629,4272=>912,4273=>621,4274=>620,4275=>854,4276=>866,4277=>724,4278=>630,4279=>621,4280=>625,4281=>620,4282=>818,4283=>874,4284=>615,4285=>623,4286=>625,4287=>725,4288=>844,4289=>596,4290=>688,4291=>596,4292=>594,4293=>738,4304=>554,4305=>563,4306=>622,4307=>834,4308=>555,4309=>564,4310=>551,4311=>828,4312=>563,4313=>556,4314=>1074,4315=>568,4316=>568,4317=>814,4318=>554,4319=>563,4320=>823,4321=>568,4322=>700,4323=>591,4324=>852,4325=>560,4326=>814,4327=>563,4328=>553,4329=>568,4330=>622,4331=>568,4332=>553,4333=>566,4334=>568,4335=>540,4336=>554,4337=>559,4338=>553,4339=>554,4340=>553,4341=>587,4342=>853,4343=>604,4344=>563,4345=>622,4346=>554,4347=>448,4348=>324,5121=>774,5122=>774,5123=>774,5124=>774,5125=>905,5126=>905,5127=>905,5129=>905,5130=>905,5131=>905,5132=>1018,5133=>1009,5134=>1018,5135=>1009,5136=>1018,5137=>1009,5138=>1149,5139=>1140,5140=>1149,5141=>1140,5142=>905,5143=>1149,5144=>1142,5145=>1149,5146=>1142,5147=>905,5149=>310,5150=>529,5151=>425,5152=>425,5153=>395,5154=>395,5155=>395,5156=>395,5157=>564,5158=>470,5159=>310,5160=>395,5161=>395,5162=>395,5163=>1213,5164=>986,5165=>1216,5166=>1297,5167=>774,5168=>774,5169=>774,5170=>774,5171=>886,5172=>886,5173=>886,5175=>886,5176=>886,5177=>886,5178=>1018,5179=>1009,5180=>1018,5181=>1009,5182=>1018,5183=>1009,5184=>1149,5185=>1140,5186=>1149,5187=>1140,5188=>1149,5189=>1142,5190=>1149,5191=>1142,5192=>886,5193=>576,5194=>229,5196=>812,5197=>812,5198=>812,5199=>812,5200=>815,5201=>815,5202=>815,5204=>815,5205=>815,5206=>815,5207=>1056,5208=>1048,5209=>1056,5210=>1048,5211=>1056,5212=>1048,5213=>1060,5214=>1054,5215=>1060,5216=>1054,5217=>1060,5218=>1052,5219=>1060,5220=>1052,5221=>1060,5222=>483,5223=>1005,5224=>1005,5225=>1023,5226=>1017,5227=>743,5228=>743,5229=>743,5230=>743,5231=>743,5232=>743,5233=>743,5234=>743,5235=>743,5236=>1029,5237=>975,5238=>980,5239=>975,5240=>980,5241=>975,5242=>1029,5243=>975,5244=>1029,5245=>975,5246=>980,5247=>975,5248=>980,5249=>975,5250=>980,5251=>501,5252=>501,5253=>938,5254=>938,5255=>938,5256=>938,5257=>743,5258=>743,5259=>743,5260=>743,5261=>743,5262=>743,5263=>743,5264=>743,5265=>743,5266=>1029,5267=>975,5268=>1029,5269=>975,5270=>1029,5271=>975,5272=>1029,5273=>975,5274=>1029,5275=>975,5276=>1029,5277=>975,5278=>1029,5279=>975,5280=>1029,5281=>501,5282=>501,5283=>626,5284=>626,5285=>626,5286=>626,5287=>626,5288=>626,5289=>626,5290=>626,5291=>626,5292=>881,5293=>854,5294=>863,5295=>874,5296=>863,5297=>874,5298=>881,5299=>874,5300=>881,5301=>874,5302=>863,5303=>874,5304=>863,5305=>874,5306=>863,5307=>436,5308=>548,5309=>436,5312=>988,5313=>988,5314=>988,5315=>988,5316=>931,5317=>931,5318=>931,5319=>931,5320=>931,5321=>1238,5322=>1247,5323=>1200,5324=>1228,5325=>1200,5326=>1228,5327=>931,5328=>660,5329=>497,5330=>660,5331=>988,5332=>988,5333=>988,5334=>988,5335=>931,5336=>931,5337=>931,5338=>931,5339=>931,5340=>1231,5341=>1247,5342=>1283,5343=>1228,5344=>1283,5345=>1228,5346=>1228,5347=>1214,5348=>1228,5349=>1214,5350=>1283,5351=>1228,5352=>1283,5353=>1228,5354=>660,5356=>886,5357=>730,5358=>730,5359=>730,5360=>730,5361=>730,5362=>730,5363=>730,5364=>730,5365=>730,5366=>998,5367=>958,5368=>967,5369=>989,5370=>967,5371=>989,5372=>998,5373=>958,5374=>998,5375=>958,5376=>967,5377=>989,5378=>967,5379=>989,5380=>967,5381=>493,5382=>460,5383=>493,5392=>923,5393=>923,5394=>923,5395=>1136,5396=>1136,5397=>1136,5398=>1136,5399=>1209,5400=>1202,5401=>1209,5402=>1202,5403=>1209,5404=>1202,5405=>1431,5406=>1420,5407=>1431,5408=>1420,5409=>1431,5410=>1420,5411=>1431,5412=>1420,5413=>746,5414=>776,5415=>776,5416=>776,5417=>776,5418=>776,5419=>776,5420=>776,5421=>776,5422=>776,5423=>1003,5424=>1003,5425=>1013,5426=>996,5427=>1013,5428=>996,5429=>1003,5430=>1003,5431=>1003,5432=>1003,5433=>1013,5434=>996,5435=>1013,5436=>996,5437=>1013,5438=>495,5440=>395,5441=>510,5442=>1033,5443=>1033,5444=>976,5445=>976,5446=>976,5447=>976,5448=>733,5449=>733,5450=>733,5451=>733,5452=>733,5453=>733,5454=>1003,5455=>959,5456=>495,5458=>886,5459=>774,5460=>774,5461=>774,5462=>774,5463=>928,5464=>928,5465=>928,5466=>928,5467=>1172,5468=>1142,5469=>602,5470=>812,5471=>812,5472=>812,5473=>812,5474=>812,5475=>812,5476=>815,5477=>815,5478=>815,5479=>815,5480=>1060,5481=>1052,5482=>548,5492=>977,5493=>977,5494=>977,5495=>977,5496=>977,5497=>977,5498=>977,5499=>618,5500=>837,5501=>510,5502=>1238,5503=>1238,5504=>1238,5505=>1238,5506=>1238,5507=>1238,5508=>1238,5509=>989,5514=>977,5515=>977,5516=>977,5517=>977,5518=>1591,5519=>1591,5520=>1591,5521=>1295,5522=>1295,5523=>1591,5524=>1591,5525=>848,5526=>1273,5536=>988,5537=>988,5538=>931,5539=>931,5540=>931,5541=>931,5542=>660,5543=>776,5544=>776,5545=>776,5546=>776,5547=>776,5548=>776,5549=>776,5550=>495,5551=>743,5598=>830,5601=>830,5702=>496,5703=>496,5742=>413,5743=>1238,5744=>1591,5745=>2016,5746=>2016,5747=>1720,5748=>1678,5749=>2016,5750=>2016,5760=>543,5761=>637,5762=>945,5763=>1254,5764=>1563,5765=>1871,5766=>627,5767=>936,5768=>1254,5769=>1559,5770=>1871,5771=>569,5772=>877,5773=>1187,5774=>1497,5775=>1807,5776=>637,5777=>945,5778=>1240,5779=>1555,5780=>1871,5781=>569,5782=>569,5783=>789,5784=>1234,5785=>1559,5786=>740,5787=>638,5788=>638,7424=>652,7425=>833,7426=>1048,7427=>608,7428=>593,7429=>676,7430=>676,7431=>559,7432=>557,7433=>343,7434=>494,7435=>665,7436=>539,7437=>817,7438=>701,7439=>687,7440=>593,7441=>660,7442=>660,7443=>660,7444=>1094,7446=>687,7447=>687,7448=>556,7449=>642,7450=>642,7451=>580,7452=>634,7453=>737,7454=>948,7455=>695,7456=>652,7457=>924,7458=>582,7459=>646,7462=>539,7463=>652,7464=>691,7465=>556,7466=>781,7467=>732,7468=>487,7469=>683,7470=>480,7472=>523,7473=>430,7474=>430,7475=>517,7476=>527,7477=>234,7478=>234,7479=>488,7480=>401,7481=>626,7482=>527,7483=>527,7484=>535,7485=>509,7486=>461,7487=>485,7488=>430,7489=>511,7490=>695,7491=>458,7492=>458,7493=>479,7494=>712,7495=>479,7496=>479,7497=>479,7498=>479,7499=>386,7500=>386,7501=>479,7502=>219,7503=>487,7504=>664,7505=>456,7506=>488,7507=>414,7508=>488,7509=>488,7510=>479,7511=>388,7512=>456,7513=>462,7514=>664,7515=>501,7517=>451,7518=>429,7519=>433,7520=>493,7521=>406,7522=>219,7523=>315,7524=>456,7525=>501,7526=>451,7527=>429,7528=>451,7529=>493,7530=>406,7543=>716,7544=>527,7547=>545,7549=>747,7557=>514,7579=>479,7580=>414,7581=>414,7582=>488,7583=>386,7584=>377,7585=>348,7586=>479,7587=>456,7588=>347,7589=>281,7590=>347,7591=>347,7592=>431,7593=>326,7594=>330,7595=>370,7596=>664,7597=>664,7598=>562,7599=>562,7600=>448,7601=>488,7602=>542,7603=>422,7604=>396,7605=>388,7606=>583,7607=>494,7608=>399,7609=>451,7610=>501,7611=>417,7612=>523,7613=>470,7614=>455,7615=>425,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>774,7681=>675,7682=>762,7683=>716,7684=>762,7685=>716,7686=>762,7687=>716,7688=>734,7689=>593,7690=>830,7691=>716,7692=>830,7693=>716,7694=>830,7695=>716,7696=>830,7697=>716,7698=>830,7699=>716,7700=>683,7701=>678,7702=>683,7703=>678,7704=>683,7705=>678,7706=>683,7707=>678,7708=>683,7709=>678,7710=>683,7711=>435,7712=>821,7713=>716,7714=>837,7715=>712,7716=>837,7717=>712,7718=>837,7719=>712,7720=>837,7721=>712,7722=>837,7723=>712,7724=>372,7725=>343,7726=>372,7727=>343,7728=>775,7729=>665,7730=>775,7731=>665,7732=>775,7733=>665,7734=>637,7735=>343,7736=>637,7737=>343,7738=>637,7739=>343,7740=>637,7741=>343,7742=>995,7743=>1042,7744=>995,7745=>1042,7746=>995,7747=>1042,7748=>837,7749=>712,7750=>837,7751=>712,7752=>837,7753=>712,7754=>837,7755=>712,7756=>850,7757=>687,7758=>850,7759=>687,7760=>850,7761=>687,7762=>850,7763=>687,7764=>733,7765=>716,7766=>733,7767=>716,7768=>770,7769=>493,7770=>770,7771=>493,7772=>770,7773=>493,7774=>770,7775=>493,7776=>720,7777=>595,7778=>720,7779=>595,7780=>720,7781=>595,7782=>720,7783=>595,7784=>720,7785=>595,7786=>682,7787=>478,7788=>682,7789=>478,7790=>682,7791=>478,7792=>682,7793=>478,7794=>812,7795=>712,7796=>812,7797=>712,7798=>812,7799=>712,7800=>812,7801=>712,7802=>812,7803=>712,7804=>774,7805=>652,7806=>774,7807=>652,7808=>1103,7809=>924,7810=>1103,7811=>924,7812=>1103,7813=>924,7814=>1103,7815=>924,7816=>1103,7817=>924,7818=>771,7819=>645,7820=>771,7821=>645,7822=>724,7823=>652,7824=>725,7825=>582,7826=>725,7827=>582,7828=>725,7829=>582,7830=>712,7831=>478,7832=>924,7833=>652,7834=>675,7835=>435,7836=>435,7837=>435,7838=>896,7839=>687,7840=>774,7841=>675,7842=>774,7843=>675,7844=>774,7845=>675,7846=>774,7847=>675,7848=>774,7849=>675,7850=>774,7851=>675,7852=>774,7853=>675,7854=>774,7855=>675,7856=>774,7857=>675,7858=>774,7859=>675,7860=>774,7861=>675,7862=>774,7863=>675,7864=>683,7865=>678,7866=>683,7867=>678,7868=>683,7869=>678,7870=>683,7871=>678,7872=>683,7873=>678,7874=>683,7875=>678,7876=>683,7877=>678,7878=>683,7879=>678,7880=>372,7881=>343,7882=>372,7883=>343,7884=>850,7885=>687,7886=>850,7887=>687,7888=>850,7889=>687,7890=>850,7891=>687,7892=>850,7893=>687,7894=>850,7895=>687,7896=>850,7897=>687,7898=>874,7899=>687,7900=>874,7901=>687,7902=>874,7903=>687,7904=>874,7905=>687,7906=>874,7907=>687,7908=>812,7909=>712,7910=>812,7911=>712,7912=>835,7913=>712,7914=>835,7915=>712,7916=>835,7917=>712,7918=>835,7919=>712,7920=>835,7921=>712,7922=>724,7923=>652,7924=>724,7925=>652,7926=>724,7927=>652,7928=>724,7929=>652,7930=>953,7931=>644,7936=>687,7937=>687,7938=>687,7939=>687,7940=>687,7941=>687,7942=>687,7943=>687,7944=>774,7945=>774,7946=>1041,7947=>1043,7948=>935,7949=>963,7950=>835,7951=>859,7952=>557,7953=>557,7954=>557,7955=>557,7956=>557,7957=>557,7960=>792,7961=>794,7962=>1100,7963=>1096,7964=>1023,7965=>1052,7968=>712,7969=>712,7970=>712,7971=>712,7972=>712,7973=>712,7974=>712,7975=>712,7976=>945,7977=>951,7978=>1250,7979=>1250,7980=>1180,7981=>1206,7982=>1054,7983=>1063,7984=>390,7985=>390,7986=>390,7987=>390,7988=>390,7989=>390,7990=>390,7991=>390,7992=>483,7993=>489,7994=>777,7995=>785,7996=>712,7997=>738,7998=>604,7999=>604,8000=>687,8001=>687,8002=>687,8003=>687,8004=>687,8005=>687,8008=>892,8009=>933,8010=>1221,8011=>1224,8012=>1053,8013=>1082,8016=>675,8017=>675,8018=>675,8019=>675,8020=>675,8021=>675,8022=>675,8023=>675,8025=>930,8027=>1184,8029=>1199,8031=>1049,8032=>869,8033=>869,8034=>869,8035=>869,8036=>869,8037=>869,8038=>869,8039=>869,8040=>909,8041=>958,8042=>1246,8043=>1251,8044=>1076,8045=>1105,8046=>1028,8047=>1076,8048=>687,8049=>687,8050=>557,8051=>557,8052=>712,8053=>712,8054=>390,8055=>390,8056=>687,8057=>687,8058=>675,8059=>675,8060=>869,8061=>869,8064=>687,8065=>687,8066=>687,8067=>687,8068=>687,8069=>687,8070=>687,8071=>687,8072=>774,8073=>774,8074=>1041,8075=>1043,8076=>935,8077=>963,8078=>835,8079=>859,8080=>712,8081=>712,8082=>712,8083=>712,8084=>712,8085=>712,8086=>712,8087=>712,8088=>945,8089=>951,8090=>1250,8091=>1250,8092=>1180,8093=>1206,8094=>1054,8095=>1063,8096=>869,8097=>869,8098=>869,8099=>869,8100=>869,8101=>869,8102=>869,8103=>869,8104=>909,8105=>958,8106=>1246,8107=>1251,8108=>1076,8109=>1105,8110=>1028,8111=>1076,8112=>687,8113=>687,8114=>687,8115=>687,8116=>687,8118=>687,8119=>687,8120=>774,8121=>774,8122=>876,8123=>797,8124=>774,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>712,8131=>712,8132=>712,8134=>712,8135=>712,8136=>929,8137=>846,8138=>1080,8139=>1009,8140=>837,8141=>500,8142=>500,8143=>500,8144=>390,8145=>390,8146=>390,8147=>390,8150=>390,8151=>390,8152=>372,8153=>372,8154=>621,8155=>563,8157=>500,8158=>500,8159=>500,8160=>675,8161=>675,8162=>675,8163=>675,8164=>716,8165=>716,8166=>675,8167=>675,8168=>724,8169=>724,8170=>1020,8171=>980,8172=>838,8173=>500,8174=>500,8175=>500,8178=>869,8179=>869,8180=>869,8182=>869,8183=>869,8184=>1065,8185=>891,8186=>1084,8187=>894,8188=>850,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>380,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>380,8217=>380,8218=>380,8219=>380,8220=>657,8221=>657,8222=>657,8223=>657,8224=>500,8225=>500,8226=>639,8227=>639,8228=>333,8229=>667,8230=>1000,8231=>348,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1440,8241=>1887,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8249=>412,8250=>412,8251=>972,8252=>627,8253=>580,8254=>500,8255=>828,8256=>828,8257=>329,8258=>1023,8259=>500,8260=>167,8261=>457,8262=>457,8263=>1030,8264=>829,8265=>829,8266=>513,8267=>636,8268=>500,8269=>500,8270=>523,8271=>400,8272=>828,8273=>523,8274=>556,8275=>1000,8276=>828,8277=>838,8278=>684,8279=>813,8280=>838,8281=>838,8282=>380,8283=>872,8284=>838,8285=>380,8286=>380,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>438,8305=>219,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528,8316=>528,8317=>288,8318=>288,8319=>456,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>288,8334=>288,8336=>458,8337=>479,8338=>488,8339=>413,8340=>479,8341=>456,8342=>487,8343=>219,8344=>664,8345=>456,8346=>479,8347=>381,8348=>388,8352=>929,8353=>696,8354=>696,8355=>696,8356=>696,8357=>1042,8358=>837,8359=>1518,8360=>1205,8361=>1103,8362=>904,8363=>696,8364=>696,8365=>696,8366=>696,8367=>1392,8368=>696,8369=>696,8370=>696,8371=>696,8372=>859,8373=>696,8376=>696,8377=>696,8378=>769,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1120,8449=>1170,8450=>734,8451=>1211,8452=>896,8453=>1091,8454=>1144,8455=>614,8456=>698,8457=>1086,8459=>1073,8460=>913,8461=>888,8462=>712,8463=>712,8464=>597,8465=>697,8466=>856,8467=>472,8468=>974,8469=>837,8470=>1203,8471=>1000,8472=>697,8473=>750,8474=>850,8475=>938,8476=>814,8477=>801,8478=>896,8479=>710,8480=>1020,8481=>1281,8482=>1000,8483=>755,8484=>754,8485=>578,8486=>850,8487=>850,8488=>763,8489=>338,8490=>775,8491=>774,8492=>928,8493=>818,8494=>854,8495=>636,8496=>729,8497=>808,8498=>683,8499=>1184,8500=>465,8501=>794,8502=>731,8503=>494,8504=>684,8505=>380,8506=>945,8507=>1348,8508=>790,8509=>737,8510=>654,8511=>863,8512=>840,8513=>775,8514=>557,8515=>637,8516=>760,8517=>830,8518=>716,8519=>678,8520=>343,8521=>343,8523=>872,8526=>547,8528=>1035,8529=>1035,8530=>1483,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>372,8545=>659,8546=>945,8547=>1099,8548=>774,8549=>1099,8550=>1386,8551=>1672,8552=>1121,8553=>771,8554=>1120,8555=>1407,8556=>637,8557=>734,8558=>830,8559=>995,8560=>343,8561=>607,8562=>872,8563=>984,8564=>652,8565=>962,8566=>1227,8567=>1491,8568=>969,8569=>645,8570=>969,8571=>1233,8572=>343,8573=>593,8574=>716,8575=>1042,8576=>1289,8577=>830,8578=>1289,8579=>734,8580=>593,8581=>734,8585=>1035,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>774,8705=>696,8706=>544,8707=>683,8708=>683,8709=>856,8710=>697,8711=>697,8712=>896,8713=>896,8714=>750,8715=>896,8716=>896,8717=>750,8718=>636,8719=>787,8720=>787,8721=>718,8722=>838,8723=>838,8724=>696,8725=>365,8726=>696,8727=>838,8728=>626,8729=>380,8730=>667,8731=>667,8732=>667,8733=>712,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>812,8744=>812,8745=>812,8746=>812,8747=>610,8748=>929,8749=>1295,8750=>563,8751=>977,8752=>1313,8753=>563,8754=>563,8755=>563,8756=>696,8757=>696,8758=>294,8759=>696,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1063,8789=>1063,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>841,8809=>841,8810=>1047,8811=>1047,8812=>500,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>812,8845=>812,8846=>812,8847=>838,8848=>838,8849=>838,8850=>838,8851=>796,8852=>796,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>914,8867=>914,8868=>914,8869=>914,8870=>542,8871=>542,8872=>914,8873=>914,8874=>914,8875=>914,8876=>914,8877=>914,8878=>914,8879=>914,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>542,8891=>812,8892=>812,8893=>812,8894=>838,8895=>838,8896=>843,8897=>843,8898=>843,8899=>843,8900=>494,8901=>380,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>812,8911=>812,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1158,8947=>896,8948=>750,8949=>896,8950=>896,8951=>750,8952=>896,8953=>896,8954=>1158,8955=>896,8956=>750,8957=>896,8958=>750,8959=>896,8960=>602,8961=>602,8962=>716,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>457,8969=>457,8970=>457,8971=>457,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>539,8984=>928,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>610,8993=>610,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>390,9076=>716,9077=>869,9082=>687,9085=>863,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>610,9166=>838,9167=>945,9187=>873,9189=>769,9192=>696,9250=>716,9251=>716,9312=>847,9313=>847,9314=>847,9315=>847,9316=>847,9317=>847,9318=>847,9319=>847,9320=>847,9321=>847,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>840,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>769,9697=>769,9698=>769,9699=>769,9700=>769,9701=>769,9702=>639,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>1042,9786=>1042,9787=>1042,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9954=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>347,10076=>347,10077=>587,10078=>587,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>847,10103=>847,10104=>847,10105=>847,10106=>847,10107=>847,10108=>847,10109=>847,10110=>847,10111=>847,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>457,10182=>457,10208=>494,10214=>487,10215=>487,10216=>457,10217=>457,10218=>721,10219=>721,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781,10502=>838,10503=>838,10506=>838,10507=>838,10560=>838,10561=>838,10627=>753,10628=>753,10702=>838,10703=>1046,10704=>1046,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1661,10765=>563,10766=>563,10767=>563,10768=>563,10769=>563,10770=>563,10771=>563,10772=>563,10773=>563,10774=>563,10775=>563,10776=>563,10777=>563,10778=>563,10779=>563,10780=>563,10799=>838,10858=>838,10859=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>637,11361=>360,11362=>637,11363=>733,11364=>770,11365=>675,11366=>478,11367=>956,11368=>712,11369=>775,11370=>665,11371=>725,11372=>582,11373=>860,11374=>995,11375=>774,11376=>860,11377=>778,11378=>1221,11379=>1056,11380=>652,11381=>698,11382=>565,11383=>782,11385=>538,11386=>687,11387=>559,11388=>219,11389=>487,11390=>720,11391=>725,11520=>663,11521=>676,11522=>661,11523=>629,11524=>661,11525=>1032,11526=>718,11527=>1032,11528=>648,11529=>667,11530=>1032,11531=>673,11532=>677,11533=>1036,11534=>680,11535=>886,11536=>1032,11537=>683,11538=>674,11539=>1035,11540=>1033,11541=>1027,11542=>676,11543=>673,11544=>667,11545=>667,11546=>660,11547=>671,11548=>1039,11549=>673,11550=>692,11551=>659,11552=>1048,11553=>660,11554=>654,11555=>670,11556=>733,11557=>1017,11568=>691,11569=>941,11570=>941,11571=>725,11572=>725,11573=>725,11574=>676,11575=>774,11576=>774,11577=>683,11578=>683,11579=>802,11580=>989,11581=>761,11582=>623,11583=>761,11584=>941,11585=>941,11586=>373,11587=>740,11588=>837,11589=>914,11590=>672,11591=>737,11592=>680,11593=>683,11594=>602,11595=>1039,11596=>778,11597=>837,11598=>683,11599=>372,11600=>778,11601=>373,11602=>725,11603=>691,11604=>941,11605=>941,11606=>837,11607=>373,11608=>836,11609=>941,11610=>941,11611=>734,11612=>876,11613=>771,11614=>734,11615=>683,11616=>774,11617=>837,11618=>683,11619=>850,11620=>697,11621=>850,11631=>716,11800=>580,11807=>838,11810=>457,11811=>457,11812=>457,11813=>457,11822=>580,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42192=>762,42193=>733,42194=>733,42195=>830,42196=>682,42197=>682,42198=>821,42199=>775,42200=>775,42201=>530,42202=>734,42203=>734,42204=>725,42205=>683,42206=>683,42207=>995,42208=>837,42209=>637,42210=>720,42211=>770,42212=>770,42213=>774,42214=>774,42215=>837,42216=>775,42217=>530,42218=>1103,42219=>771,42220=>724,42221=>762,42222=>774,42223=>774,42224=>683,42225=>683,42226=>372,42227=>850,42228=>812,42229=>812,42230=>557,42231=>830,42232=>322,42233=>322,42234=>674,42235=>674,42236=>322,42237=>322,42238=>588,42239=>588,42564=>720,42565=>595,42566=>436,42567=>440,42572=>1405,42573=>1173,42576=>1234,42577=>1027,42580=>1174,42581=>972,42582=>1093,42583=>958,42594=>1085,42595=>924,42596=>1096,42597=>912,42598=>1260,42599=>997,42600=>850,42601=>687,42602=>1037,42603=>868,42604=>1406,42605=>1106,42606=>961,42634=>963,42635=>787,42636=>682,42637=>580,42644=>808,42645=>712,42760=>500,42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500,42771=>500,42772=>500,42773=>500,42774=>500,42779=>400,42780=>400,42781=>287,42782=>287,42783=>287,42786=>444,42787=>390,42788=>540,42789=>540,42790=>837,42791=>712,42792=>1031,42793=>857,42794=>696,42795=>557,42800=>559,42801=>595,42802=>1349,42803=>1052,42804=>1284,42805=>1064,42806=>1216,42807=>1054,42808=>1079,42809=>922,42810=>1079,42811=>922,42812=>1035,42813=>922,42814=>698,42815=>549,42816=>656,42817=>688,42822=>850,42823=>542,42824=>683,42825=>531,42826=>918,42827=>814,42830=>1406,42831=>1106,42832=>733,42833=>716,42834=>948,42835=>937,42838=>850,42839=>716,42852=>738,42853=>716,42854=>738,42855=>716,42880=>637,42881=>343,42882=>837,42883=>712,42889=>400,42890=>386,42891=>456,42892=>306,42893=>808,42894=>693,42896=>928,42897=>768,42912=>821,42913=>716,42914=>775,42915=>665,42916=>837,42917=>712,42918=>770,42919=>493,42920=>720,42921=>595,42922=>886,43002=>1062,43003=>683,43004=>733,43005=>995,43006=>372,43007=>1325,61184=>216,61185=>242,61186=>267,61187=>277,61188=>282,61189=>242,61190=>216,61191=>242,61192=>267,61193=>277,61194=>267,61195=>242,61196=>216,61197=>242,61198=>267,61199=>277,61200=>267,61201=>242,61202=>216,61203=>242,61204=>282,61205=>277,61206=>267,61207=>242,61208=>216,61209=>282,62464=>612,62465=>612,62466=>653,62467=>902,62468=>622,62469=>622,62470=>661,62471=>895,62472=>589,62473=>622,62474=>1163,62475=>626,62476=>627,62477=>893,62478=>612,62479=>626,62480=>924,62481=>627,62482=>744,62483=>634,62484=>886,62485=>626,62486=>907,62487=>626,62488=>621,62489=>628,62490=>677,62491=>626,62492=>621,62493=>630,62494=>627,62495=>571,62496=>622,62497=>631,62498=>612,62499=>611,62500=>618,62501=>671,62502=>963,62504=>1023,62505=>844,62506=>563,62507=>563,62508=>563,62509=>563,62510=>563,62511=>563,62512=>555,62513=>555,62514=>555,62515=>555,62516=>573,62517=>573,62518=>573,62519=>824,62520=>824,62521=>824,62522=>824,62523=>824,62524=>611,62525=>611,62526=>611,62527=>611,62528=>611,62529=>611,63173=>687,64256=>810,64257=>741,64258=>741,64259=>1115,64260=>1116,64261=>808,64262=>1020,64275=>1388,64276=>1384,64277=>1378,64278=>1384,64279=>1713,64285=>294,64286=>0,64287=>519,64288=>665,64289=>939,64290=>788,64291=>920,64292=>786,64293=>857,64294=>869,64295=>821,64296=>890,64297=>838,64298=>758,64299=>758,64300=>758,64301=>758,64302=>728,64303=>728,64304=>728,64305=>610,64306=>447,64307=>588,64308=>687,64309=>437,64310=>485,64312=>679,64313=>435,64314=>578,64315=>566,64316=>605,64318=>724,64320=>453,64321=>680,64323=>675,64324=>658,64326=>653,64327=>736,64328=>602,64329=>758,64330=>683,64331=>343,64332=>610,64333=>566,64334=>658,64335=>710,64338=>1005,64339=>1059,64340=>375,64341=>408,64342=>1005,64343=>1059,64344=>375,64345=>408,64346=>1005,64347=>1059,64348=>375,64349=>408,64350=>1005,64351=>1059,64352=>375,64353=>408,64354=>1005,64355=>1059,64356=>375,64357=>408,64358=>1005,64359=>1059,64360=>375,64361=>408,64362=>1162,64363=>1191,64364=>655,64365=>720,64366=>1162,64367=>1191,64368=>655,64369=>720,64370=>721,64371=>721,64372=>721,64373=>721,64374=>721,64375=>721,64376=>721,64377=>721,64378=>721,64379=>721,64380=>721,64381=>721,64382=>721,64383=>721,64384=>721,64385=>721,64386=>513,64387=>578,64388=>513,64389=>578,64390=>513,64391=>578,64392=>513,64393=>578,64394=>576,64395=>622,64396=>576,64397=>622,64398=>1024,64399=>1024,64400=>582,64401=>582,64402=>1024,64403=>1024,64404=>582,64405=>582,64406=>1024,64407=>1024,64408=>582,64409=>582,64410=>1024,64411=>1024,64412=>582,64413=>582,64414=>854,64415=>900,64416=>854,64417=>900,64418=>375,64419=>408,64426=>938,64427=>880,64428=>693,64429=>660,64467=>824,64468=>843,64469=>476,64470=>552,64473=>622,64474=>627,64488=>375,64489=>408,64508=>917,64509=>1012,64510=>375,64511=>408,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>342,65137=>342,65138=>342,65139=>346,65140=>342,65142=>342,65143=>342,65144=>342,65145=>342,65146=>342,65147=>342,65148=>342,65149=>342,65150=>342,65151=>342,65152=>511,65153=>343,65154=>375,65155=>343,65156=>375,65157=>622,65158=>627,65159=>343,65160=>375,65161=>917,65162=>917,65163=>375,65164=>408,65165=>343,65166=>375,65167=>1005,65168=>1059,65169=>375,65170=>408,65171=>590,65172=>606,65173=>1005,65174=>1059,65175=>375,65176=>408,65177=>1005,65178=>1059,65179=>375,65180=>408,65181=>721,65182=>721,65183=>721,65184=>721,65185=>721,65186=>721,65187=>721,65188=>721,65189=>721,65190=>721,65191=>721,65192=>721,65193=>513,65194=>578,65195=>513,65196=>578,65197=>576,65198=>622,65199=>576,65200=>622,65201=>1380,65202=>1414,65203=>983,65204=>1018,65205=>1380,65206=>1414,65207=>983,65208=>1018,65209=>1345,65210=>1364,65211=>966,65212=>985,65213=>1345,65214=>1364,65215=>966,65216=>985,65217=>1039,65218=>1071,65219=>942,65220=>974,65221=>1039,65222=>1071,65223=>942,65224=>974,65225=>683,65226=>683,65227=>683,65228=>564,65229=>683,65230=>683,65231=>683,65232=>564,65233=>1162,65234=>1191,65235=>655,65236=>720,65237=>894,65238=>901,65239=>655,65240=>720,65241=>917,65242=>931,65243=>582,65244=>582,65245=>868,65246=>893,65247=>375,65248=>408,65249=>733,65250=>784,65251=>619,65252=>670,65253=>854,65254=>900,65255=>375,65256=>408,65257=>590,65258=>606,65259=>693,65260=>660,65261=>622,65262=>627,65263=>917,65264=>1012,65265=>917,65266=>1012,65267=>375,65268=>408,65269=>745,65270=>759,65271=>745,65272=>759,65273=>745,65274=>759,65275=>745,65276=>759,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansb.z b/tcpdf/fonts/dejavusansb.z new file mode 100644 index 0000000..07031ce Binary files /dev/null and b/tcpdf/fonts/dejavusansb.z differ diff --git a/tcpdf/fonts/dejavusansbi.ctg.z b/tcpdf/fonts/dejavusansbi.ctg.z new file mode 100644 index 0000000..23445ef Binary files /dev/null and b/tcpdf/fonts/dejavusansbi.ctg.z differ diff --git a/tcpdf/fonts/dejavusansbi.php b/tcpdf/fonts/dejavusansbi.php new file mode 100644 index 0000000..e4a6670 --- /dev/null +++ b/tcpdf/fonts/dejavusansbi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSans-BoldOblique'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=632168; +$enc=''; +$file='dejavusansbi.z'; +$ctg='dejavusansbi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-1067 -385 1999 1121]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>60,'StemH'=>26,'AvgWidth'=>573,'MaxWidth'=>2016,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(69,0,387,729),34=>array(95,458,426,729),35=>array(65,0,780,718),36=>array(27,-147,630,760),37=>array(55,-14,947,742),38=>array(28,-14,813,742),39=>array(95,458,211,729),40=>array(77,-132,468,759),41=>array(-27,-132,364,759),42=>array(20,278,503,742),43=>array(106,0,732,627),44=>array(-34,-142,256,189),45=>array(25,217,360,359),46=>array(46,0,259,189),47=>array(-96,-93,434,729),48=>array(36,-14,660,742),49=>array(43,0,578,729),50=>array(8,0,640,742),51=>array(0,-14,637,742),52=>array(-1,0,635,729),53=>array(13,-14,644,729),54=>array(50,-15,660,741),55=>array(78,0,694,729),56=>array(22,-14,659,742),57=>array(41,-15,652,741),58=>array(41,0,323,547),59=>array(-35,-142,323,547),60=>array(106,30,732,597),61=>array(106,144,732,482),62=>array(106,30,732,597),63=>array(104,0,554,742),64=>array(45,-172,927,703),65=>array(-65,0,691,729),66=>array(21,0,699,729),67=>array(36,-14,724,742),68=>array(21,0,786,729),69=>array(21,0,670,729),70=>array(21,0,670,729),71=>array(36,-14,778,742),72=>array(21,0,816,729),73=>array(21,0,351,729),74=>array(-166,-200,351,729),75=>array(21,0,837,729),76=>array(21,0,566,729),77=>array(21,0,974,729),78=>array(21,0,816,729),79=>array(36,-14,814,742),80=>array(21,0,719,729),81=>array(36,-146,814,742),82=>array(21,0,685,729),83=>array(15,-14,665,742),84=>array(48,0,748,729),85=>array(68,-14,791,729),86=>array(76,0,840,729),87=>array(107,0,1143,729),88=>array(-51,0,812,729),89=>array(63,0,809,729),90=>array(-26,0,740,729),91=>array(-10,-132,466,760),92=>array(71,-93,276,729),93=>array(-28,-132,448,760),94=>array(101,457,737,729),95=>array(-10,-236,510,-143),96=>array(131,616,371,800),97=>array(17,-14,611,560),98=>array(31,-14,677,760),99=>array(37,-14,581,560),100=>array(36,-14,724,760),101=>array(36,-14,640,560),102=>array(50,0,540,760),103=>array(20,-216,682,559),104=>array(31,0,654,760),105=>array(31,0,354,760),106=>array(-128,-216,354,760),107=>array(31,0,716,760),108=>array(31,0,354,760),109=>array(31,0,984,560),110=>array(31,0,654,560),111=>array(36,-14,651,560),112=>array(-10,-208,677,560),113=>array(36,-208,682,560),114=>array(31,0,545,560),115=>array(10,-14,560,560),116=>array(43,0,509,702),117=>array(60,-14,681,547),118=>array(63,0,678,547),119=>array(87,0,927,547),120=>array(-41,0,671,547),121=>array(0,-216,687,547),122=>array(-9,0,586,547),123=>array(106,-163,669,760),124=>array(127,-236,238,764),125=>array(44,-163,606,760),126=>array(106,212,732,415),161=>array(69,0,387,729),162=>array(67,-153,610,699),163=>array(7,0,691,742),164=>array(36,30,601,596),165=>array(6,0,755,729),166=>array(127,-171,238,699),167=>array(-33,-95,494,742),168=>array(152,654,484,774),169=>array(138,0,862,725),170=>array(43,182,527,742),171=>array(61,67,594,519),172=>array(106,140,732,444),173=>array(25,217,360,359),174=>array(138,0,862,725),175=>array(155,668,481,760),176=>array(87,424,412,749),177=>array(106,0,732,627),178=>array(45,326,431,742),179=>array(40,319,427,742),180=>array(227,616,539,800),181=>array(-27,-209,670,547),182=>array(74,-96,603,729),183=>array(84,253,297,442),184=>array(22,-196,259,0),185=>array(67,326,395,734),186=>array(46,182,545,742),187=>array(57,66,589,519),188=>array(56,-14,948,742),189=>array(56,-14,1036,742),190=>array(47,-14,948,742),191=>array(37,-13,488,729),192=>array(-65,0,691,927),193=>array(-65,0,691,927),194=>array(-65,0,691,927),195=>array(-65,0,691,928),196=>array(-65,0,691,927),197=>array(-65,0,691,928),198=>array(-78,0,1072,729),199=>array(36,-196,724,742),200=>array(21,0,670,927),201=>array(21,0,670,927),202=>array(21,0,670,927),203=>array(21,0,670,927),204=>array(21,0,351,927),205=>array(21,0,448,927),206=>array(21,0,440,927),207=>array(21,0,442,927),208=>array(-2,0,803,729),209=>array(21,0,816,928),210=>array(36,-14,814,927),211=>array(36,-14,814,927),212=>array(36,-14,814,927),213=>array(36,-14,814,928),214=>array(36,-14,814,927),215=>array(125,20,713,607),216=>array(-47,-38,896,771),217=>array(68,-14,791,927),218=>array(68,-14,791,927),219=>array(68,-14,791,927),220=>array(68,-14,791,927),221=>array(63,0,809,927),222=>array(21,0,695,729),223=>array(31,-14,666,760),224=>array(17,-14,611,800),225=>array(17,-14,627,800),226=>array(17,-14,611,800),227=>array(17,-14,611,778),228=>array(17,-14,611,774),229=>array(17,-14,611,883),230=>array(17,-14,1008,560),231=>array(37,-196,581,560),232=>array(36,-14,640,800),233=>array(36,-14,650,800),234=>array(36,-14,640,800),235=>array(36,-14,640,774),236=>array(31,0,313,800),237=>array(31,0,470,800),238=>array(31,0,414,800),239=>array(31,0,415,774),240=>array(36,-14,678,760),241=>array(31,0,654,778),242=>array(36,-14,651,800),243=>array(36,-14,651,800),244=>array(36,-14,651,800),245=>array(36,-14,651,778),246=>array(36,-14,651,774),247=>array(106,42,732,585),248=>array(-17,-50,700,597),249=>array(60,-14,681,800),250=>array(60,-14,681,800),251=>array(60,-14,681,800),252=>array(60,-14,681,774),253=>array(0,-216,687,800),254=>array(-10,-208,677,760),255=>array(0,-216,687,774),256=>array(-65,0,691,914),257=>array(17,-14,611,763),258=>array(-65,0,691,936),259=>array(17,-14,611,772),260=>array(-65,-196,691,729),261=>array(17,-196,611,560),262=>array(36,-14,724,927),263=>array(37,-14,645,800),264=>array(36,-14,724,927),265=>array(37,-14,589,800),266=>array(36,-14,724,927),267=>array(37,-14,581,759),268=>array(36,-14,732,927),269=>array(37,-14,634,800),270=>array(21,0,786,927),271=>array(36,-14,947,760),272=>array(-2,0,803,729),273=>array(36,-14,817,760),274=>array(21,0,670,914),275=>array(36,-14,640,763),276=>array(21,0,670,927),277=>array(36,-14,640,784),278=>array(21,0,670,927),279=>array(36,-14,640,759),280=>array(21,-196,670,729),281=>array(36,-196,640,560),282=>array(21,0,670,927),283=>array(36,-14,640,800),284=>array(36,-14,778,927),285=>array(20,-216,682,800),286=>array(36,-14,778,927),287=>array(20,-216,682,784),288=>array(36,-14,778,927),289=>array(20,-216,682,759),290=>array(36,-224,778,742),291=>array(20,-216,682,765),292=>array(21,0,816,927),293=>array(31,0,654,927),294=>array(89,0,935,729),295=>array(85,0,708,760),296=>array(21,0,456,928),297=>array(31,0,431,778),298=>array(21,0,417,914),299=>array(31,0,402,763),300=>array(21,0,453,927),301=>array(31,0,427,784),302=>array(21,-196,351,729),303=>array(31,-196,354,760),304=>array(21,0,355,927),305=>array(31,0,313,547),306=>array(21,-200,723,729),307=>array(31,-216,697,760),308=>array(-166,-200,453,927),309=>array(-128,-216,428,800),310=>array(21,-209,837,729),311=>array(31,-209,716,760),312=>array(31,0,716,547),313=>array(21,0,566,928),314=>array(31,0,478,928),315=>array(21,-209,566,729),316=>array(-23,-209,354,760),317=>array(21,0,623,729),318=>array(31,0,582,760),319=>array(21,0,624,729),320=>array(31,0,555,760),321=>array(-23,0,603,729),322=>array(-7,0,456,760),323=>array(21,0,816,928),324=>array(31,0,654,803),325=>array(21,-209,816,729),326=>array(31,-209,654,560),327=>array(21,0,816,927),328=>array(31,0,654,800),329=>array(61,0,911,729),330=>array(31,-200,775,742),331=>array(50,-216,673,560),332=>array(36,-14,814,914),333=>array(36,-14,651,763),334=>array(36,-14,814,927),335=>array(36,-14,651,784),336=>array(36,-14,814,927),337=>array(36,-14,657,800),338=>array(42,0,1154,729),339=>array(36,-14,1054,560),340=>array(21,0,685,928),341=>array(31,0,618,803),342=>array(21,-209,685,729),343=>array(-23,-209,545,560),344=>array(21,0,685,927),345=>array(31,0,602,800),346=>array(15,-14,665,928),347=>array(10,-14,618,803),348=>array(15,-14,665,927),349=>array(10,-14,560,800),350=>array(15,-196,665,742),351=>array(10,-196,560,560),352=>array(15,-14,665,927),353=>array(10,-14,576,800),354=>array(48,-196,748,729),355=>array(43,-196,509,702),356=>array(48,0,748,927),357=>array(43,0,615,800),358=>array(48,0,748,729),359=>array(-11,0,493,702),360=>array(68,-14,791,928),361=>array(60,-14,681,778),362=>array(68,-14,791,914),363=>array(60,-14,681,763),364=>array(68,-14,791,927),365=>array(60,-14,681,784),366=>array(68,-14,791,923),367=>array(60,-14,681,873),368=>array(68,-14,791,927),369=>array(60,-14,681,800),370=>array(68,-196,791,729),371=>array(60,-196,681,547),372=>array(107,0,1143,931),373=>array(87,0,927,800),374=>array(63,0,809,931),375=>array(0,-216,687,800),376=>array(63,0,809,927),377=>array(-26,0,740,928),378=>array(-9,0,618,803),379=>array(-26,0,740,918),380=>array(-9,0,586,759),381=>array(-26,0,740,927),382=>array(-9,0,586,800),383=>array(50,0,540,760),384=>array(12,-14,651,760),385=>array(-37,0,744,729),386=>array(21,0,714,729),387=>array(12,-14,662,760),388=>array(61,0,704,729),389=>array(37,-14,677,760),390=>array(-13,-14,675,742),391=>array(32,-14,909,924),392=>array(27,-14,715,724),393=>array(-2,0,803,729),394=>array(-37,0,830,729),395=>array(65,0,763,729),396=>array(25,-14,707,760),397=>array(57,-208,662,548),398=>array(21,0,681,729),399=>array(36,-14,819,742),400=>array(37,-14,652,742),401=>array(-146,-200,689,729),402=>array(-151,-208,538,760),403=>array(32,-14,959,924),404=>array(94,-210,882,729),405=>array(10,-1,980,760),406=>array(74,0,384,729),407=>array(-7,0,397,729),408=>array(20,0,827,742),409=>array(10,0,695,760),410=>array(-10,0,365,760),411=>array(-44,0,536,760),412=>array(55,-13,1035,729),413=>array(-146,-200,835,729),414=>array(50,-208,664,560),415=>array(36,-14,814,742),416=>array(39,-14,907,760),417=>array(40,-14,771,570),418=>array(50,-14,1056,742),419=>array(63,-216,891,560),420=>array(-37,0,765,729),421=>array(-10,-208,670,760),422=>array(35,-146,684,729),423=>array(-1,-14,631,742),424=>array(-7,-14,534,560),425=>array(21,0,670,729),426=>array(34,-217,539,759),427=>array(48,-216,514,702),428=>array(36,0,772,729),429=>array(21,0,512,760),430=>array(67,-200,767,729),431=>array(67,-14,938,761),432=>array(57,-14,795,570),433=>array(42,-14,813,723),434=>array(74,0,764,729),435=>array(60,0,841,742),436=>array(24,-216,822,560),437=>array(-26,0,740,729),438=>array(-8,0,587,547),439=>array(21,-33,743,729),440=>array(10,-33,771,729),441=>array(6,-215,647,547),442=>array(-11,-208,585,547),443=>array(7,0,634,742),444=>array(11,-33,696,729),445=>array(-30,-215,573,547),446=>array(-27,-15,508,702),447=>array(-12,-208,693,560),448=>array(0,-208,371,729),449=>array(0,-208,658,729),450=>array(-23,-208,574,729),451=>array(27,0,346,729),452=>array(21,0,1570,927),453=>array(21,0,1416,800),454=>array(36,-14,1302,800),455=>array(21,-200,988,729),456=>array(21,-216,991,760),457=>array(31,-216,697,760),458=>array(21,-200,1188,729),459=>array(21,-216,1191,760),460=>array(31,-216,1066,760),461=>array(-65,0,691,927),462=>array(17,-14,615,800),463=>array(21,0,473,927),464=>array(31,0,457,800),465=>array(36,-14,814,927),466=>array(36,-14,651,800),467=>array(68,-14,791,927),468=>array(60,-14,681,800),469=>array(68,-14,791,1040),470=>array(60,-14,681,914),471=>array(68,-14,791,1057),472=>array(60,-14,681,917),473=>array(68,-14,791,1058),474=>array(60,-14,681,917),475=>array(68,-14,791,1057),476=>array(60,-14,681,917),477=>array(42,-14,630,560),478=>array(-65,0,691,1040),479=>array(17,-14,611,914),480=>array(-65,0,691,1040),481=>array(17,-14,620,881),482=>array(-78,0,1072,914),483=>array(17,-14,1008,758),484=>array(36,-14,778,742),485=>array(20,-216,682,559),486=>array(36,-14,778,927),487=>array(20,-216,682,799),488=>array(21,0,837,926),489=>array(31,0,716,926),490=>array(36,-196,814,742),491=>array(36,-196,651,560),492=>array(36,-196,814,914),493=>array(36,-196,651,763),494=>array(21,-33,743,927),495=>array(-44,-215,588,793),496=>array(-128,-216,466,800),497=>array(21,0,1570,729),498=>array(21,0,1416,729),499=>array(36,-14,1302,760),500=>array(36,-14,778,928),501=>array(20,-216,682,798),502=>array(22,-14,1222,729),503=>array(-20,-208,775,742),504=>array(21,0,816,927),505=>array(31,0,654,798),506=>array(-65,0,867,986),507=>array(17,-14,814,931),508=>array(-78,0,1072,928),509=>array(17,-14,1008,799),510=>array(-47,-38,896,928),511=>array(-17,-50,700,800),512=>array(-65,0,691,930),513=>array(17,-14,611,800),514=>array(-65,0,691,947),515=>array(17,-14,611,784),516=>array(21,0,670,930),517=>array(36,-14,640,800),518=>array(21,0,670,947),519=>array(36,-14,640,784),520=>array(21,0,437,930),521=>array(31,0,409,799),522=>array(21,0,447,947),523=>array(31,0,417,784),524=>array(36,-14,814,930),525=>array(36,-14,651,800),526=>array(36,-14,814,947),527=>array(36,-14,651,784),528=>array(21,0,685,930),529=>array(31,0,545,800),530=>array(21,0,685,947),531=>array(31,0,545,784),532=>array(68,-14,791,930),533=>array(60,-14,681,800),534=>array(68,-14,791,947),535=>array(60,-14,681,784),536=>array(15,-236,665,742),537=>array(10,-236,560,560),538=>array(48,-236,748,729),539=>array(43,-236,509,702),540=>array(-45,-210,649,742),541=>array(-47,-211,564,560),542=>array(21,0,816,926),543=>array(31,0,654,926),544=>array(32,-208,764,742),545=>array(31,-75,786,760),546=>array(25,-14,769,742),547=>array(22,-14,656,646),548=>array(-5,-216,761,729),549=>array(13,-216,608,547),550=>array(-65,0,691,927),551=>array(17,-14,611,759),552=>array(21,-192,670,729),553=>array(36,-196,640,560),554=>array(36,-14,814,1040),555=>array(36,-14,651,914),556=>array(36,-14,814,1040),557=>array(36,-14,651,914),558=>array(36,-14,814,928),559=>array(36,-14,651,759),560=>array(36,-14,814,1040),561=>array(36,-14,651,914),562=>array(63,0,809,914),563=>array(0,-216,687,763),564=>array(32,-75,413,760),565=>array(37,-75,808,560),566=>array(34,-76,500,702),567=>array(-128,-216,313,547),568=>array(25,-14,1023,760),569=>array(64,-208,1062,560),570=>array(-81,-36,854,765),571=>array(-101,-36,834,765),572=>array(-61,-46,652,594),573=>array(-13,0,566,729),574=>array(-127,-36,809,765),575=>array(33,-240,583,560),576=>array(15,-240,611,547),577=>array(69,0,765,729),578=>array(56,0,582,560),579=>array(-35,0,695,729),580=>array(20,-14,804,729),581=>array(-66,0,698,729),582=>array(21,-93,681,822),583=>array(36,-93,638,640),584=>array(-166,-200,368,729),585=>array(-128,-216,368,760),586=>array(66,-200,863,741),587=>array(64,-216,747,560),588=>array(-12,0,685,729),589=>array(-33,0,543,560),590=>array(30,0,805,729),591=>array(10,-216,708,547),592=>array(66,-14,660,560),593=>array(45,-14,685,560),594=>array(-8,-14,632,560),595=>array(12,-14,651,760),596=>array(-7,-14,537,560),597=>array(48,-69,581,560),598=>array(45,-216,727,760),599=>array(25,-14,876,760),600=>array(22,-14,630,560),601=>array(42,-14,630,560),602=>array(38,-14,890,560),603=>array(27,-14,520,560),604=>array(-50,-11,509,560),605=>array(-50,-11,788,560),606=>array(54,-14,679,560),607=>array(-107,-216,388,547),608=>array(23,-216,896,760),609=>array(44,-216,706,547),610=>array(43,-14,573,546),611=>array(87,-211,692,547),612=>array(80,-21,674,547),613=>array(88,-214,703,546),614=>array(10,0,625,760),615=>array(31,-216,646,760),616=>array(52,0,448,760),617=>array(74,-1,326,547),618=>array(31,0,515,547),619=>array(70,0,488,760),620=>array(93,0,613,760),621=>array(32,-216,356,760),622=>array(31,-215,788,760),623=>array(69,-14,1013,546),624=>array(88,-209,1032,546),625=>array(49,-216,994,560),626=>array(-160,-216,665,560),627=>array(50,-216,749,560),628=>array(-32,0,613,547),629=>array(36,-14,651,560),630=>array(43,-1,871,547),631=>array(-9,0,580,574),632=>array(60,-208,729,760),633=>array(31,-13,544,547),634=>array(10,-13,565,760),635=>array(50,-216,607,547),636=>array(9,-208,563,560),637=>array(51,-216,564,560),638=>array(31,0,583,547),639=>array(99,0,499,547),640=>array(-32,0,509,547),641=>array(-32,0,613,547),642=>array(28,-216,581,560),643=>array(-126,-216,519,760),644=>array(-106,-216,539,760),645=>array(137,-216,486,560),646=>array(-97,-217,655,760),647=>array(-25,-155,441,547),648=>array(48,-216,514,702),649=>array(74,-14,845,547),650=>array(22,-51,690,547),651=>array(74,-1,626,547),652=>array(-38,0,584,547),653=>array(-18,0,836,547),654=>array(-62,0,620,763),655=>array(53,0,648,547),656=>array(13,-216,651,547),657=>array(-1,-69,599,547),658=>array(-23,-215,608,547),659=>array(25,-215,608,547),660=>array(59,0,546,759),661=>array(57,0,592,759),662=>array(-31,0,504,759),663=>array(-5,-208,612,759),664=>array(50,-14,800,742),665=>array(31,0,593,547),666=>array(31,-14,665,560),667=>array(22,0,768,760),668=>array(28,0,658,547),669=>array(-235,-217,354,760),670=>array(73,-213,758,547),671=>array(31,0,473,547),672=>array(44,-208,895,760),673=>array(-3,0,546,759),674=>array(57,0,592,759),675=>array(25,-14,1142,760),676=>array(45,-215,1161,760),677=>array(29,-55,1145,760),678=>array(27,0,926,702),679=>array(42,-216,872,760),680=>array(34,-69,923,702),681=>array(48,-216,990,760),682=>array(10,0,808,760),683=>array(10,0,764,760),684=>array(20,0,631,641),685=>array(-31,86,399,641),686=>array(-18,-214,682,760),687=>array(-16,-216,724,760),688=>array(12,326,401,751),689=>array(12,326,400,751),690=>array(-75,205,219,751),691=>array(23,326,344,640),692=>array(24,319,344,632),693=>array(35,205,392,632),694=>array(-16,326,388,632),695=>array(52,326,599,632),696=>array(22,205,447,632),697=>array(78,557,218,800),698=>array(78,557,437,800),699=>array(113,418,389,729),700=>array(73,418,348,729),701=>array(198,616,347,856),702=>array(168,481,334,760),703=>array(159,481,325,760),704=>array(43,326,348,751),705=>array(35,326,374,751),706=>array(184,517,463,843),707=>array(161,517,440,843),708=>array(125,561,452,800),709=>array(172,561,499,800),710=>array(106,616,483,800),711=>array(151,616,528,800),712=>array(81,488,226,759),713=>array(155,668,481,760),714=>array(227,616,539,800),715=>array(131,616,371,800),716=>array(81,-81,226,190),717=>array(-11,-185,315,-93),718=>array(131,-238,371,-54),719=>array(227,-238,539,-54),720=>array(-8,0,299,547),721=>array(63,361,264,547),722=>array(126,269,292,547),723=>array(118,269,284,547),724=>array(116,238,353,458),725=>array(145,238,382,458),726=>array(46,119,370,427),727=>array(46,229,282,317),728=>array(166,639,496,784),729=>array(239,654,397,774),730=>array(184,605,462,883),731=>array(73,-196,284,0),732=>array(133,638,500,778),733=>array(143,616,563,800),734=>array(-12,213,347,524),735=>array(163,616,474,800),736=>array(36,213,458,637),737=>array(12,326,207,751),738=>array(11,318,355,640),739=>array(-20,326,427,632),740=>array(35,326,374,751),741=>array(146,0,471,693),742=>array(117,0,471,693),743=>array(87,0,471,693),744=>array(58,0,471,693),745=>array(29,0,471,693),748=>array(14,-260,340,-21),749=>array(143,605,492,822),750=>array(73,418,612,729),755=>array(91,-240,369,38),759=>array(88,-221,455,-109),768=>array(-259,616,-19,800),769=>array(-160,616,152,800),770=>array(-287,616,90,800),771=>array(-257,638,110,778),772=>array(-235,668,91,760),773=>array(-346,663,174,755),774=>array(-221,639,109,784),775=>array(-184,617,18,760),776=>array(-238,654,94,774),777=>array(-363,616,-117,843),778=>array(-200,605,78,883),779=>array(-244,616,176,800),780=>array(-236,616,141,800),781=>array(-130,615,4,832),782=>array(-223,615,97,832),783=>array(-279,616,70,800),784=>array(-221,642,109,882),785=>array(-250,639,80,784),786=>array(-264,418,-34,563),787=>array(-313,595,-130,844),788=>array(-288,595,-130,844),789=>array(-102,616,102,800),790=>array(-474,-276,-233,-93),791=>array(-406,-276,-94,-93),792=>array(-388,-240,-188,-6),793=>array(-318,-240,-118,-6),794=>array(-216,658,73,929),795=>array(-132,361,83,570),796=>array(-331,-240,-193,-11),797=>array(-403,-240,-114,-59),798=>array(-389,-240,-100,-59),799=>array(-378,-240,-128,-6),800=>array(-296,-202,-7,-110),801=>array(-514,-216,-105,117),802=>array(-310,-216,13,117),803=>array(-412,-212,-253,-92),804=>array(-442,-212,-110,-92),805=>array(-366,-240,-136,-11),806=>array(-392,-236,-162,-91),807=>array(-478,-196,-241,0),808=>array(-427,-196,-216,0),809=>array(-363,-310,-228,-93),810=>array(-422,-237,-80,-54),811=>array(-477,-239,-75,-94),812=>array(-414,-240,-37,-57),813=>array(-458,-240,-82,-57),814=>array(-424,-239,-94,-94),815=>array(-491,-240,-161,-95),816=>array(-480,-234,-113,-94),817=>array(-440,-185,-114,-93),818=>array(-565,-236,-28,-143),819=>array(-568,-236,-4,-9),820=>array(-625,212,1,415),821=>array(-480,214,-84,309),822=>array(-847,214,-77,309),823=>array(-709,-46,4,594),824=>array(-893,-36,43,765),825=>array(-308,-240,-170,-11),826=>array(-422,-238,-80,-55),827=>array(-355,-241,-75,-6),828=>array(-501,-239,-100,-94),829=>array(-392,562,-110,819),830=>array(-292,595,-101,867),831=>array(-510,528,10,755),832=>array(-259,616,-19,800),833=>array(-160,616,152,800),834=>array(-257,638,110,778),835=>array(-313,595,-130,844),836=>array(-344,654,94,978),837=>array(-365,-208,-244,-45),838=>array(-418,639,-82,786),839=>array(-378,-226,-122,-35),840=>array(-398,-240,-102,-47),841=>array(-363,-240,-111,-21),842=>array(-434,616,-68,800),843=>array(-434,567,-66,850),844=>array(-438,573,-31,835),845=>array(-459,-230,-41,-30),846=>array(-371,-240,-141,-45),849=>array(-321,610,-152,888),850=>array(-250,604,80,882),851=>array(-378,-240,-124,-9),855=>array(-348,610,-179,888),856=>array(0,654,159,774),858=>array(-445,-240,-58,-11),860=>array(-471,-237,419,-79),861=>array(-278,802,613,960),862=>array(-291,797,618,889),863=>array(-481,-185,427,-93),864=>array(-291,756,459,894),865=>array(-278,769,613,927),866=>array(-533,-230,376,-30),880=>array(21,0,623,729),881=>array(31,0,494,547),882=>array(88,0,1001,729),883=>array(88,0,815,729),884=>array(78,557,218,800),885=>array(54,-208,242,35),886=>array(21,0,816,729),887=>array(31,0,670,547),890=>array(132,-208,253,-45),891=>array(-7,-14,537,560),892=>array(37,-14,581,560),893=>array(-7,-14,537,560),894=>array(-35,-142,323,547),900=>array(216,616,528,800),901=>array(152,654,589,978),902=>array(-42,0,714,800),903=>array(84,253,297,442),904=>array(22,0,831,800),905=>array(28,0,986,800),906=>array(25,0,521,800),908=>array(28,-14,851,800),910=>array(20,0,1067,800),911=>array(-1,0,855,800),912=>array(50,-19,516,978),913=>array(-65,0,691,729),914=>array(21,0,699,729),915=>array(21,0,681,729),916=>array(-66,0,698,729),917=>array(21,0,670,729),918=>array(-26,0,740,729),919=>array(21,0,816,729),920=>array(40,-14,810,742),921=>array(21,0,351,729),922=>array(21,0,837,729),923=>array(-66,0,698,729),924=>array(21,0,974,729),925=>array(21,0,816,729),926=>array(27,0,619,729),927=>array(36,-14,814,742),928=>array(21,0,816,729),929=>array(21,0,719,729),931=>array(21,0,670,729),932=>array(48,0,748,729),933=>array(63,0,809,729),934=>array(43,0,806,729),935=>array(-51,0,812,729),936=>array(78,0,866,729),937=>array(-45,0,812,742),938=>array(21,0,450,927),939=>array(63,0,809,927),940=>array(38,-12,692,800),941=>array(27,-14,567,800),942=>array(50,-208,664,800),943=>array(42,-19,436,800),944=>array(54,-10,660,978),945=>array(38,-12,692,559),946=>array(-11,-208,660,773),947=>array(66,-208,740,547),948=>array(16,-14,634,768),949=>array(27,-14,520,560),950=>array(32,-208,627,760),951=>array(50,-208,664,560),952=>array(28,-11,659,768),953=>array(42,-19,313,547),954=>array(31,0,679,547),955=>array(-44,0,529,760),956=>array(-27,-209,670,547),957=>array(68,0,653,547),958=>array(26,-208,627,760),959=>array(36,-14,651,560),960=>array(73,-19,787,547),961=>array(9,-208,699,562),962=>array(55,-208,595,560),963=>array(37,-14,781,547),964=>array(52,-19,667,547),965=>array(54,-10,645,547),966=>array(76,-208,752,552),967=>array(-48,-208,693,547),968=>array(79,-208,797,547),969=>array(33,-13,834,547),970=>array(50,-19,407,774),971=>array(54,-10,645,774),972=>array(36,-14,651,800),973=>array(54,-10,645,800),974=>array(33,-13,834,800),975=>array(41,-208,860,729),976=>array(55,-11,601,768),977=>array(46,-11,612,768),978=>array(63,0,751,729),979=>array(22,0,989,800),980=>array(63,0,751,927),981=>array(60,-208,729,760),982=>array(33,-13,897,547),983=>array(38,-188,743,547),984=>array(68,-208,818,742),985=>array(62,-208,663,560),986=>array(70,-208,769,729),987=>array(63,-208,614,547),988=>array(21,0,670,729),989=>array(-146,-208,525,760),990=>array(21,2,682,729),991=>array(68,0,585,759),992=>array(102,-208,825,742),993=>array(-15,-180,500,559),994=>array(33,-213,1048,729),995=>array(81,-208,797,547),996=>array(37,-208,811,742),997=>array(34,-208,683,560),998=>array(21,-213,861,729),999=>array(-17,-14,736,575),1000=>array(-29,-208,721,745),1001=>array(-16,-208,626,560),1002=>array(-14,0,807,742),1003=>array(-7,0,674,560),1004=>array(26,-14,791,758),1005=>array(75,-14,739,758),1006=>array(23,-208,689,729),1007=>array(42,-208,614,726),1008=>array(19,-6,723,547),1009=>array(50,-216,690,560),1010=>array(37,-14,581,560),1011=>array(-128,-216,354,760),1012=>array(36,-14,814,742),1013=>array(67,-14,602,560),1014=>array(-26,-14,509,560),1015=>array(21,0,695,729),1016=>array(-10,-208,677,760),1017=>array(36,-14,724,742),1018=>array(21,0,974,729),1019=>array(0,-208,723,547),1020=>array(-31,-208,689,560),1021=>array(-13,-14,670,742),1022=>array(36,-14,724,742),1023=>array(-13,-14,670,742),1024=>array(21,0,670,927),1025=>array(21,0,670,927),1026=>array(67,-200,798,729),1027=>array(21,0,681,927),1028=>array(41,-14,733,742),1029=>array(15,-14,665,742),1030=>array(21,0,351,729),1031=>array(21,0,468,927),1032=>array(-166,-200,351,729),1033=>array(-25,0,1081,729),1034=>array(21,0,1039,729),1035=>array(48,0,778,729),1036=>array(21,0,857,927),1037=>array(21,0,816,927),1038=>array(77,0,812,927),1039=>array(36,-157,831,729),1040=>array(-65,0,691,729),1041=>array(21,0,714,729),1042=>array(21,0,699,729),1043=>array(21,0,681,729),1044=>array(-26,-157,813,729),1045=>array(21,0,670,729),1046=>array(-56,0,1249,729),1047=>array(-0,-14,668,742),1048=>array(21,0,816,729),1049=>array(21,0,816,927),1050=>array(21,0,857,729),1051=>array(-25,0,810,729),1052=>array(21,0,974,729),1053=>array(21,0,816,729),1054=>array(36,-14,814,742),1055=>array(21,0,816,729),1056=>array(21,0,719,729),1057=>array(36,-14,724,742),1058=>array(48,0,748,729),1059=>array(77,0,812,729),1060=>array(44,0,950,729),1061=>array(-51,0,812,729),1062=>array(36,-157,840,729),1063=>array(100,0,787,729),1064=>array(21,0,1214,729),1065=>array(36,-157,1238,729),1066=>array(92,0,869,729),1067=>array(21,0,1016,729),1068=>array(21,0,671,729),1069=>array(1,-14,693,742),1070=>array(21,-14,1129,742),1071=>array(-7,0,749,729),1072=>array(17,-14,611,560),1073=>array(24,-14,640,792),1074=>array(31,0,593,547),1075=>array(28,0,549,547),1076=>array(-10,-138,736,547),1077=>array(36,-14,640,560),1078=>array(-39,0,1015,547),1079=>array(-1,-14,535,560),1080=>array(31,0,670,547),1081=>array(31,0,670,765),1082=>array(31,0,698,547),1083=>array(2,0,702,547),1084=>array(28,0,784,547),1085=>array(28,0,658,547),1086=>array(36,-14,651,560),1087=>array(28,0,658,547),1088=>array(-10,-208,677,560),1089=>array(37,-14,581,560),1090=>array(34,0,626,547),1091=>array(0,-216,687,547),1092=>array(46,-208,945,760),1093=>array(-41,0,671,547),1094=>array(44,-138,682,547),1095=>array(80,0,626,547),1096=>array(31,0,1025,547),1097=>array(44,-138,1047,547),1098=>array(52,0,695,547),1099=>array(31,0,877,547),1100=>array(31,0,572,547),1101=>array(17,-14,557,560),1102=>array(31,-14,936,560),1103=>array(-22,0,613,547),1104=>array(36,-14,640,803),1105=>array(36,-14,640,774),1106=>array(52,-216,648,760),1107=>array(28,0,604,803),1108=>array(36,-14,576,560),1109=>array(10,-14,560,560),1110=>array(31,0,354,760),1111=>array(31,0,405,774),1112=>array(-128,-216,354,760),1113=>array(-9,0,926,547),1114=>array(31,0,896,547),1115=>array(31,0,622,760),1116=>array(31,0,698,803),1117=>array(31,0,670,803),1118=>array(0,-216,687,765),1119=>array(44,-138,673,547),1120=>array(33,-14,1048,729),1121=>array(33,-13,834,547),1122=>array(77,0,770,729),1123=>array(36,0,658,731),1124=>array(21,-14,1011,742),1125=>array(31,-14,810,560),1126=>array(-63,0,914,729),1127=>array(-28,0,754,547),1128=>array(21,0,1280,729),1129=>array(31,0,1044,547),1130=>array(-21,0,851,729),1131=>array(-13,0,683,547),1132=>array(21,0,1188,729),1133=>array(28,0,1003,547),1134=>array(-25,-208,640,938),1135=>array(-24,-193,525,756),1136=>array(74,0,1126,729),1137=>array(62,-208,1100,759),1138=>array(36,-14,814,742),1139=>array(36,-14,651,560),1140=>array(75,0,896,742),1141=>array(60,0,732,560),1142=>array(75,0,896,930),1143=>array(60,0,732,800),1144=>array(57,-216,1186,742),1145=>array(63,-216,1098,565),1146=>array(40,-14,1033,742),1147=>array(35,-14,823,560),1148=>array(37,-14,1348,928),1149=>array(31,-13,1129,828),1150=>array(33,-14,1048,910),1151=>array(33,-13,834,746),1152=>array(40,-208,732,742),1153=>array(33,-208,573,560),1154=>array(19,-33,530,488),1155=>array(-608,606,-79,822),1156=>array(-427,638,-12,784),1157=>array(-356,595,-213,785),1158=>array(-384,595,-213,785),1159=>array(-811,592,1,788),1160=>array(-1067,-179,388,928),1161=>array(-973,-280,323,1022),1162=>array(21,-208,890,927),1163=>array(28,-208,748,765),1164=>array(21,0,671,729),1165=>array(27,0,549,702),1166=>array(21,0,717,729),1167=>array(-10,-208,670,560),1168=>array(21,0,710,878),1169=>array(28,0,579,700),1170=>array(17,0,709,729),1171=>array(10,0,572,547),1172=>array(21,-200,708,729),1173=>array(28,-216,554,547),1174=>array(-41,-157,1264,729),1175=>array(-25,-138,1028,547),1176=>array(-0,-196,668,742),1177=>array(-1,-196,535,560),1178=>array(36,-157,873,729),1179=>array(44,-138,711,547),1180=>array(21,0,857,729),1181=>array(31,0,698,547),1182=>array(21,0,857,729),1183=>array(10,0,677,760),1184=>array(68,0,1055,729),1185=>array(52,0,846,547),1186=>array(36,-157,904,729),1187=>array(44,-138,765,547),1188=>array(21,0,1146,729),1189=>array(28,0,897,547),1190=>array(21,-200,1174,729),1191=>array(28,-216,902,547),1192=>array(40,-14,875,743),1193=>array(40,-14,798,560),1194=>array(36,-196,724,742),1195=>array(37,-196,581,560),1196=>array(63,-157,763,729),1197=>array(49,-138,642,547),1198=>array(63,0,809,729),1199=>array(66,-216,688,547),1200=>array(61,0,805,729),1201=>array(63,-216,708,547),1202=>array(-37,-157,827,729),1203=>array(-25,-138,687,547),1204=>array(63,-157,1060,729),1205=>array(49,-138,957,547),1206=>array(129,-157,876,729),1207=>array(103,-138,730,547),1208=>array(114,0,787,729),1209=>array(87,0,624,547),1210=>array(106,0,793,729),1211=>array(31,0,654,760),1212=>array(42,-14,984,742),1213=>array(30,-14,769,560),1214=>array(42,-184,984,742),1215=>array(30,-161,769,560),1216=>array(21,0,351,729),1217=>array(-56,0,1249,927),1218=>array(-39,0,1015,784),1219=>array(21,-200,840,729),1220=>array(31,-216,679,547),1221=>array(-46,-208,885,729),1222=>array(-38,-208,746,547),1223=>array(21,-200,816,729),1224=>array(28,-216,658,547),1225=>array(21,-208,889,729),1226=>array(28,-208,748,547),1227=>array(129,-157,803,729),1228=>array(103,-138,640,547),1229=>array(21,-208,1047,729),1230=>array(28,-208,874,547),1231=>array(31,0,354,760),1232=>array(-65,0,691,936),1233=>array(17,-14,611,772),1234=>array(-65,0,691,927),1235=>array(17,-14,611,774),1236=>array(-78,0,1072,729),1237=>array(17,-14,1008,560),1238=>array(21,0,670,927),1239=>array(36,-14,640,784),1240=>array(36,-14,819,742),1241=>array(42,-14,630,560),1242=>array(36,-14,819,927),1243=>array(42,-14,630,774),1244=>array(-56,0,1249,927),1245=>array(-39,0,1015,774),1246=>array(-0,-14,668,927),1247=>array(-1,-14,540,774),1248=>array(21,-33,743,729),1249=>array(-23,-215,608,547),1250=>array(21,0,816,914),1251=>array(31,0,670,763),1252=>array(21,0,816,927),1253=>array(31,0,670,774),1254=>array(36,-14,814,927),1255=>array(36,-14,651,774),1256=>array(36,-14,814,742),1257=>array(36,-14,651,560),1258=>array(36,-14,814,927),1259=>array(36,-14,651,774),1260=>array(1,-14,693,927),1261=>array(17,-14,557,774),1262=>array(77,0,812,914),1263=>array(0,-216,687,763),1264=>array(77,0,812,927),1265=>array(0,-216,687,774),1266=>array(77,0,812,927),1267=>array(0,-216,687,800),1268=>array(100,0,787,927),1269=>array(80,0,626,774),1270=>array(36,-157,696,729),1271=>array(44,-138,565,547),1272=>array(21,0,1016,927),1273=>array(31,0,877,774),1274=>array(38,-216,730,729),1275=>array(31,-217,593,547),1276=>array(-32,-200,832,729),1277=>array(-17,-216,694,547),1278=>array(-52,0,812,729),1279=>array(-38,0,673,547),1280=>array(37,0,741,729),1281=>array(17,0,575,547),1282=>array(35,-14,1116,729),1283=>array(16,-14,868,547),1284=>array(138,-14,1063,742),1285=>array(104,-14,854,560),1286=>array(138,-208,760,742),1287=>array(104,-208,634,560),1288=>array(-48,-14,1185,729),1289=>array(-38,-14,950,547),1290=>array(22,-14,1222,729),1291=>array(28,-14,957,547),1292=>array(41,-14,783,742),1293=>array(35,-14,573,546),1294=>array(47,-14,881,729),1295=>array(34,-14,727,547),1296=>array(37,-14,652,742),1297=>array(27,-14,520,560),1298=>array(-5,-200,829,729),1299=>array(23,-216,723,547),1300=>array(-25,0,1327,729),1301=>array(2,0,1096,547),1302=>array(21,0,1106,729),1303=>array(-10,-208,1008,560),1304=>array(-7,0,1068,729),1305=>array(-22,-14,965,560),1306=>array(36,-146,814,742),1307=>array(36,-208,682,560),1308=>array(107,0,1143,729),1309=>array(87,0,927,547),1310=>array(21,0,857,729),1311=>array(31,0,698,547),1312=>array(-25,-200,1167,729),1313=>array(2,-216,946,547),1314=>array(21,-200,1173,729),1315=>array(28,-216,902,547),1316=>array(36,-157,905,729),1317=>array(44,-138,764,547),1329=>array(75,-38,849,729),1330=>array(21,0,741,743),1331=>array(50,0,805,743),1332=>array(37,0,809,743),1333=>array(78,-14,763,729),1334=>array(18,0,753,743),1335=>array(21,0,730,729),1336=>array(21,0,741,743),1337=>array(21,-13,1020,742),1338=>array(11,-14,844,729),1339=>array(21,0,705,729),1340=>array(21,0,566,729),1341=>array(21,-14,1021,729),1342=>array(93,-12,864,741),1343=>array(97,0,746,729),1344=>array(-16,-46,694,729),1345=>array(33,-48,753,743),1346=>array(32,0,748,743),1347=>array(-22,0,733,735),1348=>array(78,-14,938,729),1349=>array(42,-14,709,743),1350=>array(46,-14,763,729),1351=>array(49,-14,762,729),1352=>array(21,0,734,743),1353=>array(51,-48,724,743),1354=>array(32,0,890,743),1355=>array(7,0,742,743),1356=>array(21,0,863,743),1357=>array(68,-14,791,729),1358=>array(35,0,748,729),1359=>array(37,-14,703,743),1360=>array(21,0,741,743),1361=>array(42,-14,709,743),1362=>array(21,0,666,729),1363=>array(24,0,901,729),1364=>array(-49,0,741,743),1365=>array(36,-14,813,742),1366=>array(30,-14,909,729),1369=>array(159,481,325,760),1370=>array(73,418,349,729),1371=>array(120,616,500,800),1372=>array(115,595,590,893),1373=>array(-1,616,315,849),1374=>array(117,586,652,878),1375=>array(164,618,622,893),1377=>array(74,-13,1018,547),1378=>array(-10,-208,654,560),1379=>array(43,-208,748,559),1380=>array(31,-208,752,560),1381=>array(59,-14,683,760),1382=>array(38,-208,708,559),1383=>array(31,0,644,760),1384=>array(-10,-208,653,560),1385=>array(-10,-208,843,560),1386=>array(43,-14,830,760),1387=>array(-10,-208,646,760),1388=>array(-10,-208,385,547),1389=>array(-10,-208,1063,760),1390=>array(40,-14,719,760),1391=>array(67,-208,683,760),1392=>array(31,0,646,760),1393=>array(10,-13,593,760),1394=>array(31,-208,711,560),1395=>array(52,-13,729,768),1396=>array(67,-13,871,760),1397=>array(-128,-216,313,547),1398=>array(2,-13,683,760),1399=>array(-60,-208,520,560),1400=>array(31,0,646,560),1401=>array(-67,-208,366,547),1402=>array(59,-208,1012,547),1403=>array(-26,-208,605,560),1404=>array(31,0,665,560),1405=>array(67,-13,683,547),1406=>array(67,-208,724,760),1407=>array(63,-13,975,560),1408=>array(-10,-208,646,560),1409=>array(19,-216,681,559),1410=>array(31,0,498,547),1411=>array(63,-208,975,760),1412=>array(-151,-208,671,560),1413=>array(37,-14,652,560),1414=>array(31,-190,865,760),1415=>array(67,-14,868,760),1417=>array(41,0,323,547),1418=>array(96,179,430,359),1456=>array(275,-229,416,-10),1457=>array(149,-229,523,-10),1458=>array(140,-229,513,-10),1459=>array(127,-229,513,-10),1460=>array(287,-171,404,-73),1461=>array(213,-171,477,-73),1462=>array(237,-229,477,-10),1463=>array(89,-171,451,0),1464=>array(109,-217,446,0),1465=>array(-34,625,83,723),1466=>array(-34,625,83,723),1467=>array(190,-239,525,-5),1468=>array(293,225,411,322),1469=>array(277,-217,413,-22),1470=>array(40,413,375,555),1471=>array(132,547,469,710),1472=>array(26,-98,345,645),1473=>array(816,613,934,710),1474=>array(204,613,321,710),1475=>array(45,0,326,547),1478=>array(25,0,490,547),1479=>array(188,-229,525,-10),1488=>array(104,0,730,547),1489=>array(43,0,590,547),1490=>array(44,-9,428,547),1491=>array(126,0,651,547),1492=>array(100,0,661,547),1493=>array(91,0,359,547),1494=>array(94,0,464,547),1495=>array(91,0,654,547),1496=>array(142,-13,676,553),1497=>array(98,164,334,547),1498=>array(126,-240,549,547),1499=>array(43,0,570,547),1500=>array(126,0,633,711),1501=>array(91,0,663,547),1502=>array(84,0,690,554),1503=>array(44,-240,359,547),1504=>array(43,0,430,547),1505=>array(144,-13,678,547),1506=>array(35,-101,682,547),1507=>array(158,-240,642,547),1508=>array(91,0,656,547),1509=>array(118,-240,649,548),1510=>array(54,0,670,547),1511=>array(51,-240,767,546),1512=>array(126,0,575,547),1513=>array(89,0,856,547),1514=>array(11,-4,650,547),1520=>array(91,0,680,547),1521=>array(98,0,680,547),1522=>array(98,164,655,547),1523=>array(66,361,378,547),1524=>array(66,361,644,547),3647=>array(2,-147,642,760),3713=>array(14,-14,752,560),3714=>array(12,-14,727,560),3716=>array(13,-14,699,558),3719=>array(2,-241,548,593),3720=>array(44,0,711,561),3722=>array(45,-269,747,584),3725=>array(14,-24,767,610),3732=>array(18,-14,671,593),3733=>array(17,-19,670,603),3734=>array(35,-240,729,593),3735=>array(-1,-14,784,560),3737=>array(-9,-33,735,593),3738=>array(13,-15,716,613),3739=>array(-1,-15,739,760),3740=>array(29,-12,952,665),3741=>array(24,-14,837,760),3742=>array(50,-14,825,604),3743=>array(35,-14,848,760),3745=>array(-7,-14,826,547),3746=>array(-0,-23,789,760),3747=>array(18,-10,768,615),3749=>array(9,-33,717,593),3751=>array(5,-33,668,593),3754=>array(8,-21,860,724),3755=>array(32,-21,961,620),3757=>array(27,-20,689,606),3758=>array(15,-14,880,698),3759=>array(79,-259,932,648),3760=>array(5,27,682,606),3761=>array(-649,610,-29,896),3762=>array(51,0,578,593),3763=>array(-479,0,578,875),3764=>array(-656,622,-63,950),3765=>array(-656,633,-1,962),3766=>array(-656,622,-63,950),3767=>array(-656,633,-1,962),3768=>array(-413,-385,-165,-55),3769=>array(-479,-316,-150,-28),3771=>array(-657,610,-33,896),3772=>array(-689,-311,17,-48),3773=>array(-25,-220,758,776),3776=>array(53,-13,469,561),3777=>array(53,-13,843,561),3778=>array(25,-14,486,936),3779=>array(67,-14,640,879),3780=>array(47,-35,552,809),3782=>array(33,-240,731,582),3784=>array(-431,659,-279,844),3785=>array(-636,622,-19,918),3786=>array(-672,621,37,965),3787=>array(-530,612,-178,917),3788=>array(-511,603,194,866),3789=>array(-479,668,-229,875),3792=>array(66,-29,723,563),3793=>array(55,-139,731,586),3794=>array(1,-80,612,711),3795=>array(-49,-14,953,981),3796=>array(31,-156,647,711),3797=>array(31,-156,647,711),3798=>array(5,-14,962,950),3799=>array(36,-240,748,560),3800=>array(86,-269,766,582),3801=>array(38,-14,875,564),3804=>array(32,-21,1356,620),3805=>array(32,-21,1361,620),4256=>array(111,-14,929,819),4257=>array(139,-0,736,819),4258=>array(150,-138,672,828),4259=>array(97,-15,902,819),4260=>array(133,0,665,828),4261=>array(136,0,832,828),4262=>array(144,-14,752,819),4263=>array(117,-14,993,828),4264=>array(127,0,562,862),4265=>array(108,0,653,819),4266=>array(95,-14,834,820),4267=>array(89,-14,942,819),4268=>array(24,0,689,819),4269=>array(106,-157,886,829),4270=>array(141,-14,886,822),4271=>array(141,0,741,823),4272=>array(76,-15,969,820),4273=>array(83,-15,626,820),4274=>array(23,-0,685,828),4275=>array(106,-170,886,828),4276=>array(127,0,918,825),4277=>array(101,0,794,820),4278=>array(24,0,685,828),4279=>array(127,0,731,820),4280=>array(66,-14,736,820),4281=>array(24,0,632,819),4282=>array(113,-14,880,827),4283=>array(89,-15,926,820),4284=>array(23,-0,698,819),4285=>array(75,-15,648,828),4286=>array(23,-0,741,819),4287=>array(27,0,880,819),4288=>array(110,-14,901,820),4289=>array(24,0,647,820),4290=>array(78,-15,692,828),4291=>array(95,0,707,820),4292=>array(131,0,715,820),4293=>array(43,-14,833,828),4304=>array(76,-14,531,599),4305=>array(86,-14,552,823),4306=>array(31,-232,565,561),4307=>array(41,-225,826,557),4308=>array(26,-232,551,557),4309=>array(25,-232,562,557),4310=>array(75,-14,537,828),4311=>array(84,-14,821,557),4312=>array(75,0,556,557),4313=>array(24,-232,554,542),4314=>array(96,-225,1077,562),4315=>array(87,-14,622,828),4316=>array(89,-14,629,819),4317=>array(92,-0,808,557),4318=>array(78,-14,589,818),4319=>array(25,-232,604,560),4320=>array(91,0,816,830),4321=>array(92,-14,560,818),4322=>array(62,-232,664,670),4323=>array(47,-232,591,604),4324=>array(94,-232,844,558),4325=>array(25,-232,650,818),4326=>array(88,-225,815,557),4327=>array(25,-232,602,549),4328=>array(63,-14,609,828),4329=>array(39,0,561,828),4330=>array(65,-232,612,548),4331=>array(86,-14,659,818),4332=>array(91,-15,685,828),4333=>array(35,-232,616,818),4334=>array(95,-14,553,818),4335=>array(-7,-232,542,580),4336=>array(73,-15,602,823),4337=>array(79,-14,609,823),4338=>array(17,-146,543,557),4339=>array(25,-232,604,558),4340=>array(26,-232,618,828),4341=>array(65,-14,656,828),4342=>array(87,-232,842,557),4343=>array(29,-232,551,557),4344=>array(25,-232,548,549),4345=>array(93,-232,627,561),4346=>array(68,-111,558,557),4347=>array(29,0,446,500),4348=>array(124,400,424,828),5121=>array(76,0,840,729),5122=>array(-66,0,698,1050),5123=>array(-66,0,698,729),5124=>array(-66,0,698,928),5125=>array(21,0,843,729),5126=>array(21,0,843,928),5127=>array(21,0,843,927),5129=>array(21,0,843,729),5130=>array(62,0,884,729),5131=>array(62,0,884,928),5132=>array(80,0,1084,729),5133=>array(76,0,937,729),5134=>array(80,0,942,729),5135=>array(-66,0,937,729),5136=>array(80,0,942,928),5137=>array(-66,0,937,928),5138=>array(80,0,1087,729),5139=>array(21,0,1067,729),5140=>array(80,0,1087,928),5141=>array(21,0,1067,928),5142=>array(21,0,843,928),5143=>array(80,0,1128,729),5144=>array(62,0,1070,729),5145=>array(80,0,1128,928),5146=>array(62,0,1070,928),5147=>array(62,0,884,928),5149=>array(80,607,237,728),5150=>array(20,326,434,734),5151=>array(8,338,402,722),5152=>array(54,338,356,722),5153=>array(53,392,370,711),5154=>array(29,352,345,670),5155=>array(33,392,341,670),5156=>array(57,392,341,670),5157=>array(-2,327,552,749),5158=>array(21,326,454,734),5159=>array(80,304,237,424),5160=>array(53,494,346,569),5161=>array(53,392,346,670),5162=>array(75,392,368,693),5163=>array(76,0,1145,729),5164=>array(-66,0,917,729),5165=>array(21,0,1147,729),5166=>array(62,0,1229,729),5167=>array(76,0,840,729),5168=>array(-66,0,698,1050),5169=>array(-66,0,698,729),5170=>array(-66,0,698,928),5171=>array(2,0,824,729),5172=>array(2,0,824,928),5173=>array(2,0,824,927),5175=>array(2,0,824,729),5176=>array(51,0,873,729),5177=>array(51,0,873,928),5178=>array(80,0,1084,729),5179=>array(76,0,937,729),5180=>array(80,0,942,729),5181=>array(-66,0,937,729),5182=>array(80,0,942,928),5183=>array(-66,0,937,928),5184=>array(80,0,1068,729),5185=>array(2,0,1067,729),5186=>array(80,0,1068,928),5187=>array(2,0,1067,928),5188=>array(80,0,1117,729),5189=>array(51,0,1070,729),5190=>array(80,0,1117,928),5191=>array(51,0,1070,928),5192=>array(51,0,873,927),5193=>array(48,326,559,727),5194=>array(20,326,212,734),5196=>array(79,-14,792,729),5197=>array(20,0,733,1050),5198=>array(20,0,733,743),5199=>array(20,0,733,928),5200=>array(2,0,763,729),5201=>array(2,0,763,928),5202=>array(2,0,763,927),5204=>array(2,0,763,729),5205=>array(52,0,813,729),5206=>array(52,0,813,928),5207=>array(80,-14,1037,729),5208=>array(79,-14,976,729),5209=>array(80,0,977,743),5210=>array(20,0,976,743),5211=>array(80,0,977,928),5212=>array(20,0,976,928),5213=>array(80,0,1007,729),5214=>array(2,0,982,729),5215=>array(80,0,1007,928),5216=>array(2,0,982,928),5217=>array(80,0,1057,729),5218=>array(52,0,979,729),5219=>array(80,0,1057,928),5220=>array(52,0,979,928),5221=>array(52,0,1057,729),5222=>array(59,326,466,733),5223=>array(79,-14,989,734),5224=>array(20,0,989,743),5225=>array(2,0,1007,734),5226=>array(52,0,1000,734),5227=>array(64,0,675,743),5228=>array(20,0,726,1050),5229=>array(20,0,726,743),5230=>array(20,0,726,928),5231=>array(18,-14,724,729),5232=>array(18,-14,731,928),5233=>array(18,-14,818,927),5234=>array(68,-14,679,729),5235=>array(68,-14,679,928),5236=>array(80,0,960,743),5237=>array(64,0,902,743),5238=>array(80,0,962,743),5239=>array(20,0,902,743),5240=>array(80,0,962,928),5241=>array(20,0,902,928),5242=>array(80,-14,1009,729),5243=>array(18,-14,902,729),5244=>array(80,-14,1017,928),5245=>array(18,-14,902,928),5246=>array(80,-14,916,729),5247=>array(68,-14,902,729),5248=>array(80,-14,916,928),5249=>array(68,-14,902,928),5250=>array(52,-14,916,729),5251=>array(47,319,432,734),5252=>array(43,319,485,734),5253=>array(64,0,921,743),5254=>array(20,0,921,743),5255=>array(18,-14,921,734),5256=>array(68,-14,921,734),5257=>array(64,0,675,743),5258=>array(20,0,726,1050),5259=>array(20,0,726,743),5260=>array(20,0,726,928),5261=>array(18,-14,724,729),5262=>array(18,-14,737,928),5263=>array(18,-14,824,927),5264=>array(68,-14,679,729),5265=>array(68,-14,679,928),5266=>array(80,0,960,743),5267=>array(64,0,902,743),5268=>array(80,0,1011,743),5269=>array(20,0,902,743),5270=>array(80,0,1011,928),5271=>array(20,0,902,928),5272=>array(80,-14,1009,729),5273=>array(18,-14,902,729),5274=>array(80,-14,1023,928),5275=>array(18,-14,902,928),5276=>array(80,-14,964,729),5277=>array(68,-14,902,729),5278=>array(80,-14,964,928),5279=>array(68,-14,902,928),5280=>array(52,-14,964,729),5281=>array(47,319,432,734),5282=>array(46,319,485,734),5283=>array(71,0,605,729),5284=>array(21,0,670,1050),5285=>array(21,0,670,729),5286=>array(21,0,670,928),5287=>array(-43,0,605,729),5288=>array(-43,0,621,928),5289=>array(-43,0,708,927),5290=>array(21,0,556,729),5291=>array(21,0,556,928),5292=>array(80,0,860,729),5293=>array(71,0,782,729),5294=>array(80,0,907,729),5295=>array(21,0,801,729),5296=>array(80,0,907,928),5297=>array(21,0,801,928),5298=>array(80,0,860,729),5299=>array(-43,0,801,729),5300=>array(80,0,875,928),5301=>array(-43,0,801,928),5302=>array(80,0,792,729),5303=>array(21,0,801,729),5304=>array(80,0,792,928),5305=>array(21,0,801,928),5306=>array(52,0,792,729),5307=>array(21,326,355,734),5308=>array(55,326,532,733),5309=>array(20,326,420,734),5312=>array(103,-14,946,468),5313=>array(41,-14,951,781),5314=>array(41,-14,951,468),5315=>array(41,-14,951,667),5316=>array(-20,0,891,482),5317=>array(-20,0,891,667),5318=>array(-20,0,891,667),5319=>array(42,0,885,482),5320=>array(42,0,885,667),5321=>array(80,-14,1196,468),5322=>array(103,-14,1175,468),5323=>array(80,0,1153,482),5324=>array(42,0,1156,482),5325=>array(80,0,1153,667),5326=>array(42,0,1156,667),5327=>array(42,0,885,667),5328=>array(61,477,593,742),5329=>array(43,319,481,734),5330=>array(34,477,607,742),5331=>array(102,0,945,468),5332=>array(39,0,949,781),5333=>array(39,0,949,468),5334=>array(39,0,949,667),5335=>array(-18,0,892,468),5336=>array(-18,0,892,667),5337=>array(-18,0,892,667),5338=>array(43,0,886,468),5339=>array(43,0,886,667),5340=>array(80,0,1188,468),5341=>array(102,0,1175,468),5342=>array(80,0,1245,468),5343=>array(39,0,1156,468),5344=>array(80,0,1245,667),5345=>array(39,0,1156,667),5346=>array(80,0,1189,468),5347=>array(-18,0,1142,468),5348=>array(80,0,1189,667),5349=>array(-18,0,1142,667),5350=>array(80,0,1181,468),5351=>array(43,0,1156,468),5352=>array(80,0,1181,667),5353=>array(43,0,1156,667),5354=>array(61,477,593,734),5356=>array(26,0,874,729),5357=>array(92,0,643,729),5358=>array(21,0,841,1050),5359=>array(21,0,760,729),5360=>array(21,0,773,928),5361=>array(-30,0,709,729),5362=>array(-30,0,717,928),5363=>array(-30,0,804,927),5364=>array(87,0,638,729),5365=>array(87,0,638,928),5366=>array(80,0,911,729),5367=>array(92,0,886,729),5368=>array(80,0,997,729),5369=>array(21,0,917,729),5370=>array(80,0,1010,928),5371=>array(21,0,917,928),5372=>array(80,0,977,729),5373=>array(-30,0,886,729),5374=>array(80,0,985,928),5375=>array(-30,0,886,928),5376=>array(80,0,875,729),5377=>array(87,0,917,729),5378=>array(80,0,875,928),5379=>array(87,0,917,928),5380=>array(52,0,875,729),5381=>array(57,326,406,734),5382=>array(28,319,413,742),5383=>array(20,326,477,734),5392=>array(65,-14,858,743),5393=>array(7,-14,917,743),5394=>array(7,-14,917,928),5395=>array(33,-14,1103,482),5396=>array(33,-14,1103,667),5397=>array(36,-14,1100,482),5398=>array(36,-14,1100,667),5399=>array(80,-14,1144,743),5400=>array(65,-14,1129,743),5401=>array(80,-14,1202,743),5402=>array(7,-14,1129,743),5403=>array(80,-14,1202,928),5404=>array(7,-14,1129,928),5405=>array(80,-14,1398,482),5406=>array(33,-14,1348,482),5407=>array(80,-14,1398,667),5408=>array(33,-14,1348,667),5409=>array(80,-14,1395,482),5410=>array(36,-14,1348,482),5411=>array(80,-14,1395,667),5412=>array(36,-14,1348,667),5413=>array(58,469,693,747),5414=>array(63,0,689,729),5415=>array(21,0,697,1050),5416=>array(21,0,697,729),5417=>array(21,0,697,928),5418=>array(79,0,755,729),5419=>array(79,0,772,928),5420=>array(79,0,859,927),5421=>array(87,0,713,729),5422=>array(87,0,713,928),5423=>array(80,0,916,729),5424=>array(63,0,931,729),5425=>array(80,0,934,729),5426=>array(21,0,923,729),5427=>array(80,0,934,928),5428=>array(21,0,923,928),5429=>array(80,0,982,729),5430=>array(79,0,931,729),5431=>array(80,0,1000,928),5432=>array(79,0,931,928),5433=>array(80,0,950,729),5434=>array(87,0,923,729),5435=>array(80,0,950,928),5436=>array(87,0,923,928),5437=>array(52,0,950,928),5438=>array(57,326,450,734),5440=>array(53,392,346,670),5441=>array(20,326,487,734),5442=>array(91,-14,996,468),5443=>array(103,-14,988,468),5444=>array(-20,0,885,482),5445=>array(45,0,930,781),5446=>array(45,0,930,482),5447=>array(45,0,930,667),5448=>array(21,0,716,729),5449=>array(21,0,716,928),5450=>array(21,0,667,729),5451=>array(65,0,712,729),5452=>array(65,0,712,928),5453=>array(17,0,712,729),5454=>array(80,0,982,928),5455=>array(65,0,887,928),5456=>array(74,326,478,727),5458=>array(2,0,849,729),5459=>array(99,0,838,743),5460=>array(2,-14,700,1050),5461=>array(2,-14,700,729),5462=>array(2,-14,700,928),5463=>array(51,0,873,663),5464=>array(51,0,873,928),5465=>array(69,0,896,663),5466=>array(69,0,896,928),5467=>array(80,0,1140,928),5468=>array(69,0,1070,928),5469=>array(52,311,568,675),5470=>array(68,-14,791,743),5471=>array(68,-14,772,743),5472=>array(40,-14,744,743),5473=>array(21,-14,744,743),5474=>array(40,-14,744,928),5475=>array(21,-14,744,928),5476=>array(2,0,769,729),5477=>array(2,0,769,928),5478=>array(47,0,811,729),5479=>array(47,0,811,928),5480=>array(80,0,1055,928),5481=>array(47,0,979,928),5482=>array(55,326,540,733),5492=>array(58,0,871,743),5493=>array(62,0,966,743),5494=>array(62,0,966,928),5495=>array(11,-14,915,729),5496=>array(11,-14,915,928),5497=>array(106,-14,919,729),5498=>array(106,-14,919,928),5499=>array(69,319,551,734),5500=>array(21,0,816,729),5501=>array(20,326,487,734),5502=>array(74,0,1220,1050),5503=>array(74,0,1220,743),5504=>array(74,0,1220,928),5505=>array(74,-14,1218,729),5506=>array(74,-14,1226,928),5507=>array(74,-14,1173,729),5508=>array(74,-14,1173,928),5509=>array(74,319,926,734),5514=>array(64,0,871,743),5515=>array(62,0,966,743),5516=>array(11,-14,916,729),5517=>array(106,-14,913,729),5518=>array(77,0,1573,1050),5519=>array(77,0,1573,743),5520=>array(77,0,1573,928),5521=>array(77,-14,1275,741),5522=>array(77,-14,1289,928),5523=>array(77,-14,1526,741),5524=>array(77,-14,1526,928),5525=>array(77,335,795,741),5526=>array(77,335,1220,741),5536=>array(16,0,939,709),5537=>array(16,0,939,709),5538=>array(-8,-242,916,468),5539=>array(-8,-242,916,667),5540=>array(66,-242,910,468),5541=>array(66,-242,910,667),5542=>array(74,344,606,734),5543=>array(62,0,739,729),5544=>array(-49,0,697,729),5545=>array(-49,0,697,928),5546=>array(79,0,825,729),5547=>array(79,0,825,928),5548=>array(37,0,714,729),5549=>array(37,0,714,928),5550=>array(36,326,450,734),5551=>array(22,-14,686,729),5598=>array(21,0,782,729),5601=>array(48,0,809,729),5702=>array(20,326,473,734),5703=>array(20,240,473,820),5742=>array(-20,0,427,306),5743=>array(74,0,1169,743),5744=>array(77,0,1522,743),5745=>array(77,0,1999,743),5746=>array(77,0,1999,928),5747=>array(77,-14,1701,741),5748=>array(77,-14,1672,928),5749=>array(77,-14,1952,741),5750=>array(77,-14,1952,928),7424=>array(-38,0,584,547),7425=>array(-53,0,800,547),7426=>array(42,-14,1021,560),7427=>array(-9,0,565,547),7428=>array(37,-14,581,560),7429=>array(31,-1,614,547),7430=>array(11,-1,611,547),7431=>array(39,0,526,547),7432=>array(27,-14,516,560),7433=>array(10,-213,333,547),7434=>array(-4,-14,471,547),7435=>array(31,0,716,547),7436=>array(-26,0,473,547),7437=>array(28,0,784,547),7438=>array(31,0,670,547),7439=>array(36,-14,651,560),7440=>array(-7,-14,537,560),7441=>array(42,-27,617,573),7442=>array(20,31,603,515),7443=>array(44,-28,619,579),7444=>array(42,-14,1046,560),7446=>array(15,273,616,560),7447=>array(72,-14,673,273),7448=>array(-2,0,533,547),7449=>array(-32,0,613,547),7450=>array(71,0,613,547),7451=>array(34,0,626,547),7452=>array(75,-14,662,547),7453=>array(32,10,685,560),7454=>array(39,11,896,561),7455=>array(-59,-238,715,560),7456=>array(63,0,678,547),7457=>array(87,0,927,547),7458=>array(-9,0,586,547),7459=>array(19,-14,588,547),7462=>array(31,0,552,547),7463=>array(-38,0,584,547),7464=>array(31,0,660,547),7465=>array(-2,0,533,547),7466=>array(98,0,751,547),7467=>array(2,0,702,547),7468=>array(-37,326,445,734),7469=>array(-40,326,670,734),7470=>array(18,326,436,734),7472=>array(18,326,490,734),7473=>array(18,326,417,734),7474=>array(18,326,424,734),7475=>array(31,318,489,742),7476=>array(18,326,509,734),7477=>array(18,326,216,734),7478=>array(-86,214,227,734),7479=>array(18,326,524,734),7480=>array(18,326,360,734),7481=>array(18,326,608,734),7482=>array(18,326,509,734),7483=>array(18,326,509,734),7484=>array(31,318,504,742),7485=>array(21,318,480,742),7486=>array(18,326,450,734),7487=>array(18,326,433,734),7488=>array(27,326,466,734),7489=>array(50,318,494,734),7490=>array(58,326,715,734),7491=>array(37,318,411,640),7492=>array(48,318,415,640),7493=>array(53,318,457,640),7494=>array(53,318,669,640),7495=>array(20,318,427,751),7496=>array(48,318,481,751),7497=>array(49,318,429,640),7498=>array(53,318,423,640),7499=>array(39,318,347,640),7500=>array(37,318,345,640),7501=>array(38,205,455,639),7502=>array(7,207,210,632),7503=>array(20,326,451,751),7504=>array(21,326,621,640),7505=>array(32,205,424,640),7506=>array(49,318,436,640),7507=>array(22,318,357,640),7508=>array(108,479,487,640),7509=>array(108,318,487,479),7510=>array(-6,209,427,640),7511=>array(72,326,365,719),7512=>array(42,318,433,632),7513=>array(55,332,466,640),7514=>array(47,318,642,632),7515=>array(83,326,471,632),7517=>array(-0,209,414,759),7518=>array(39,209,461,632),7519=>array(16,318,395,756),7520=>array(52,209,468,635),7521=>array(-25,209,432,632),7522=>array(12,0,205,425),7523=>array(23,0,344,313),7524=>array(42,-8,433,306),7525=>array(83,0,471,306),7526=>array(-0,-117,414,433),7527=>array(39,-117,461,306),7528=>array(-0,-117,427,314),7529=>array(52,-117,468,309),7530=>array(-25,-117,432,306),7543=>array(11,-216,673,559),7544=>array(18,326,509,734),7547=>array(31,0,515,547),7549=>array(-10,-208,753,560),7557=>array(84,-216,458,760),7579=>array(23,318,423,640),7580=>array(53,318,385,640),7581=>array(56,288,388,640),7582=>array(42,318,432,751),7583=>array(25,318,337,640),7584=>array(58,326,362,751),7585=>array(12,205,288,632),7586=>array(57,205,464,632),7587=>array(58,207,441,632),7588=>array(35,326,283,751),7589=>array(48,326,208,632),7590=>array(23,326,321,632),7591=>array(23,326,321,632),7592=>array(17,205,376,751),7593=>array(23,205,229,751),7594=>array(23,205,258,751),7595=>array(23,326,300,632),7596=>array(35,205,625,640),7597=>array(58,209,648,632),7598=>array(11,205,523,640),7599=>array(35,205,476,640),7600=>array(23,326,422,632),7601=>array(53,318,432,640),7602=>array(53,209,485,751),7603=>array(41,205,382,640),7604=>array(0,205,393,751),7605=>array(73,205,365,719),7606=>array(47,318,532,632),7607=>array(54,298,471,632),7608=>array(47,318,413,632),7609=>array(48,326,395,632),7610=>array(23,326,416,632),7611=>array(23,326,391,632),7612=>array(35,205,439,632),7613=>array(27,288,403,632),7614=>array(16,206,404,632),7615=>array(53,320,370,756),7620=>array(-483,616,-19,800),7621=>array(-451,616,-35,800),7622=>array(-467,616,-51,800),7623=>array(-483,616,-19,800),7624=>array(-495,616,-7,800),7625=>array(-531,616,29,800),7680=>array(-65,-240,691,729),7681=>array(17,-240,611,560),7682=>array(21,0,699,927),7683=>array(31,-14,677,941),7684=>array(21,-212,699,729),7685=>array(31,-212,677,760),7686=>array(21,-185,699,729),7687=>array(31,-185,677,760),7688=>array(36,-196,724,927),7689=>array(37,-196,581,800),7690=>array(21,0,786,927),7691=>array(36,-14,757,941),7692=>array(21,-212,786,729),7693=>array(36,-212,724,760),7694=>array(21,-185,786,729),7695=>array(36,-185,724,760),7696=>array(21,-194,786,729),7697=>array(34,-196,724,760),7698=>array(21,-240,786,729),7699=>array(36,-240,724,760),7700=>array(21,0,670,1057),7701=>array(36,-14,640,898),7702=>array(21,0,670,1057),7703=>array(36,-14,640,900),7704=>array(44,-203,693,729),7705=>array(36,-203,640,560),7706=>array(21,-221,670,729),7707=>array(36,-221,640,560),7708=>array(21,-196,670,927),7709=>array(36,-196,640,783),7710=>array(21,0,670,928),7711=>array(50,0,540,941),7712=>array(36,-14,778,899),7713=>array(20,-216,682,760),7714=>array(21,0,816,928),7715=>array(31,0,654,941),7716=>array(21,-212,816,729),7717=>array(31,-212,654,760),7718=>array(21,0,816,927),7719=>array(31,0,654,927),7720=>array(-61,-196,816,729),7721=>array(-43,-196,654,760),7722=>array(21,-239,816,729),7723=>array(31,-239,654,760),7724=>array(-108,-221,351,729),7725=>array(-108,-221,354,760),7726=>array(21,0,511,1057),7727=>array(31,0,477,903),7728=>array(21,0,837,927),7729=>array(31,0,716,982),7730=>array(21,-212,837,729),7731=>array(31,-212,716,760),7732=>array(21,-185,837,729),7733=>array(31,-185,716,760),7734=>array(21,-212,566,729),7735=>array(10,-212,354,760),7736=>array(21,-212,566,942),7737=>array(10,-212,450,914),7738=>array(21,-185,566,729),7739=>array(-68,-185,354,760),7740=>array(21,-240,566,729),7741=>array(-113,-240,354,760),7742=>array(21,0,974,927),7743=>array(31,0,984,800),7744=>array(21,0,974,928),7745=>array(31,0,984,759),7746=>array(21,-212,974,729),7747=>array(31,-212,984,560),7748=>array(21,0,816,927),7749=>array(31,0,654,759),7750=>array(21,-212,816,729),7751=>array(31,-212,654,560),7752=>array(21,-185,816,729),7753=>array(31,-185,654,560),7754=>array(21,-240,816,729),7755=>array(31,-240,654,560),7756=>array(36,-14,814,1057),7757=>array(36,-14,651,917),7758=>array(36,-14,814,1061),7759=>array(36,-14,651,900),7760=>array(36,-14,814,1057),7761=>array(36,-14,651,898),7762=>array(36,-14,814,1057),7763=>array(36,-14,651,900),7764=>array(21,0,719,927),7765=>array(-10,-208,677,800),7766=>array(21,0,719,928),7767=>array(-10,-208,677,759),7768=>array(21,0,685,928),7769=>array(31,0,545,759),7770=>array(21,-212,685,729),7771=>array(10,-212,545,560),7772=>array(21,-212,685,914),7773=>array(10,-212,545,759),7774=>array(21,-185,685,729),7775=>array(-69,-185,545,560),7776=>array(15,-14,665,928),7777=>array(10,-14,560,759),7778=>array(15,-212,665,742),7779=>array(10,-212,560,560),7780=>array(15,-14,719,928),7781=>array(10,-14,682,816),7782=>array(15,-14,690,1053),7783=>array(10,-14,605,875),7784=>array(15,-212,665,928),7785=>array(10,-212,560,762),7786=>array(48,0,748,928),7787=>array(43,0,509,941),7788=>array(48,-212,748,729),7789=>array(43,-212,509,702),7790=>array(48,-185,748,729),7791=>array(27,-185,509,702),7792=>array(38,-240,748,729),7793=>array(-20,-240,509,702),7794=>array(68,-212,791,729),7795=>array(60,-212,681,547),7796=>array(68,-221,791,729),7797=>array(60,-221,681,547),7798=>array(68,-203,791,729),7799=>array(60,-203,681,547),7800=>array(68,-14,791,1057),7801=>array(60,-14,681,917),7802=>array(68,-14,791,1043),7803=>array(60,-14,681,885),7804=>array(76,0,840,928),7805=>array(63,0,678,778),7806=>array(76,-212,840,729),7807=>array(63,-212,678,547),7808=>array(107,0,1143,931),7809=>array(87,0,927,803),7810=>array(107,0,1143,931),7811=>array(87,0,927,803),7812=>array(107,0,1143,927),7813=>array(87,0,927,774),7814=>array(107,0,1143,927),7815=>array(87,0,927,759),7816=>array(107,-212,1143,729),7817=>array(87,-212,927,547),7818=>array(-51,0,812,927),7819=>array(-41,0,671,759),7820=>array(-51,0,812,927),7821=>array(-41,0,671,774),7822=>array(63,0,809,928),7823=>array(0,-216,687,759),7824=>array(-26,0,740,927),7825=>array(-9,0,586,800),7826=>array(-26,-212,740,729),7827=>array(-9,-212,586,547),7828=>array(-26,-185,740,729),7829=>array(-9,-185,586,547),7830=>array(31,-185,654,760),7831=>array(43,0,509,927),7832=>array(87,0,927,883),7833=>array(0,-216,687,883),7834=>array(17,-14,825,760),7835=>array(50,0,540,941),7836=>array(-39,0,518,760),7837=>array(17,0,518,760),7838=>array(38,-14,808,743),7839=>array(16,-14,634,768),7840=>array(-65,-212,691,729),7841=>array(17,-212,611,560),7842=>array(-65,0,691,1025),7843=>array(17,-14,611,844),7844=>array(-65,0,853,1057),7845=>array(17,-14,795,876),7846=>array(-65,0,759,1057),7847=>array(17,-14,704,876),7848=>array(-65,0,840,1093),7849=>array(17,-14,773,913),7850=>array(-65,0,691,1068),7851=>array(17,-14,631,888),7852=>array(-65,-212,691,927),7853=>array(17,-212,611,800),7854=>array(-65,0,702,1057),7855=>array(17,-14,646,889),7856=>array(-65,0,691,1057),7857=>array(17,-14,611,889),7858=>array(-65,0,691,1121),7859=>array(17,-14,611,953),7860=>array(-65,0,693,1068),7861=>array(17,-14,630,900),7862=>array(-65,-212,691,936),7863=>array(17,-212,611,772),7864=>array(21,-212,670,729),7865=>array(36,-212,640,560),7866=>array(21,0,670,1025),7867=>array(36,-14,640,844),7868=>array(21,0,670,928),7869=>array(36,-14,640,778),7870=>array(21,0,805,1057),7871=>array(36,-14,814,876),7872=>array(21,0,772,1057),7873=>array(36,-14,721,876),7874=>array(21,0,799,1093),7875=>array(36,-14,797,913),7876=>array(21,0,670,1068),7877=>array(36,-14,648,888),7878=>array(21,-212,670,927),7879=>array(36,-212,640,800),7880=>array(21,0,417,1025),7881=>array(31,0,395,844),7882=>array(6,-212,351,729),7883=>array(10,-212,354,760),7884=>array(36,-212,814,742),7885=>array(36,-212,651,560),7886=>array(36,-14,814,1025),7887=>array(36,-14,651,844),7888=>array(36,-14,884,1057),7889=>array(36,-14,815,876),7890=>array(36,-14,814,1057),7891=>array(36,-14,724,876),7892=>array(36,-14,890,1093),7893=>array(36,-14,802,913),7894=>array(36,-14,814,1068),7895=>array(36,-14,655,888),7896=>array(36,-212,814,927),7897=>array(36,-212,651,800),7898=>array(39,-14,907,927),7899=>array(40,-14,771,800),7900=>array(39,-14,907,927),7901=>array(40,-14,771,798),7902=>array(39,-14,907,1025),7903=>array(40,-14,771,844),7904=>array(39,-14,907,928),7905=>array(40,-14,771,778),7906=>array(39,-212,907,760),7907=>array(40,-212,771,570),7908=>array(68,-212,791,729),7909=>array(60,-212,681,547),7910=>array(68,-14,791,1025),7911=>array(60,-14,681,844),7912=>array(67,-14,938,927),7913=>array(57,-14,795,799),7914=>array(67,-14,938,927),7915=>array(57,-14,795,800),7916=>array(67,-14,938,1025),7917=>array(57,-14,795,844),7918=>array(67,-14,938,928),7919=>array(57,-14,795,778),7920=>array(67,-212,938,761),7921=>array(57,-212,795,570),7922=>array(63,0,809,931),7923=>array(0,-216,687,803),7924=>array(63,-212,809,729),7925=>array(0,-216,687,547),7926=>array(63,0,809,1025),7927=>array(0,-216,687,844),7928=>array(63,0,809,928),7929=>array(0,-216,687,778),7930=>array(21,0,882,729),7931=>array(10,0,698,760),7936=>array(38,-12,692,785),7937=>array(38,-12,692,785),7938=>array(38,-12,692,800),7939=>array(38,-12,692,800),7940=>array(38,-12,692,800),7941=>array(38,-12,692,800),7942=>array(38,-12,692,928),7943=>array(38,-12,692,928),7944=>array(-65,0,691,785),7945=>array(-65,0,691,785),7946=>array(29,0,958,800),7947=>array(69,0,960,800),7948=>array(29,0,852,800),7949=>array(67,0,880,800),7950=>array(-3,0,752,928),7951=>array(20,0,776,928),7952=>array(27,-14,520,785),7953=>array(27,-14,520,785),7954=>array(27,-14,547,800),7955=>array(27,-14,541,800),7956=>array(27,-14,616,800),7957=>array(27,-14,601,800),7960=>array(31,0,778,785),7961=>array(69,0,781,785),7962=>array(29,0,1086,800),7963=>array(69,0,1083,800),7964=>array(29,0,1010,800),7965=>array(67,0,1039,800),7968=>array(50,-208,664,785),7969=>array(50,-208,664,785),7970=>array(50,-208,664,800),7971=>array(50,-208,664,800),7972=>array(50,-208,664,800),7973=>array(50,-208,684,800),7974=>array(50,-208,664,928),7975=>array(50,-208,664,928),7976=>array(31,0,924,785),7977=>array(69,0,930,785),7978=>array(29,0,1229,800),7979=>array(69,0,1229,800),7980=>array(29,0,1159,800),7981=>array(67,0,1185,800),7982=>array(98,0,1033,928),7983=>array(97,0,1042,928),7984=>array(42,-19,313,785),7985=>array(42,-19,313,785),7986=>array(0,-19,457,800),7987=>array(7,-19,426,800),7988=>array(42,-19,531,800),7989=>array(42,-19,523,800),7990=>array(42,-19,458,928),7991=>array(42,-19,455,928),7992=>array(31,0,462,785),7993=>array(69,0,468,785),7994=>array(29,0,756,800),7995=>array(69,0,764,800),7996=>array(29,0,691,800),7997=>array(67,0,717,800),7998=>array(98,0,583,928),7999=>array(97,0,583,928),8000=>array(36,-14,651,785),8001=>array(36,-14,651,785),8002=>array(36,-14,651,800),8003=>array(36,-14,651,800),8004=>array(36,-14,667,800),8005=>array(36,-14,680,800),8008=>array(31,-14,855,785),8009=>array(69,-14,897,785),8010=>array(29,-14,1185,800),8011=>array(69,-14,1188,800),8012=>array(29,-14,1017,800),8013=>array(67,-14,1046,800),8016=>array(54,-10,645,785),8017=>array(54,-10,645,785),8018=>array(54,-10,645,800),8019=>array(54,-10,645,800),8020=>array(54,-10,677,800),8021=>array(54,-10,683,800),8022=>array(54,-10,645,928),8023=>array(54,-10,645,928),8025=>array(69,0,1015,785),8027=>array(69,0,1269,800),8029=>array(67,0,1284,800),8031=>array(97,0,1134,928),8032=>array(33,-13,834,785),8033=>array(33,-13,834,785),8034=>array(33,-13,834,800),8035=>array(33,-13,834,800),8036=>array(33,-13,834,800),8037=>array(33,-13,834,800),8038=>array(33,-13,834,928),8039=>array(33,-13,834,928),8040=>array(13,0,870,785),8041=>array(63,0,920,785),8042=>array(29,0,1208,800),8043=>array(69,-3,1213,800),8044=>array(29,0,1037,800),8045=>array(67,0,1066,800),8046=>array(98,0,989,928),8047=>array(97,0,1037,928),8048=>array(38,-12,692,800),8049=>array(38,-12,692,800),8050=>array(27,-14,520,800),8051=>array(27,-14,567,800),8052=>array(50,-208,664,800),8053=>array(50,-208,664,800),8054=>array(42,-19,313,800),8055=>array(42,-19,436,800),8056=>array(36,-14,651,800),8057=>array(36,-14,651,800),8058=>array(54,-10,645,800),8059=>array(54,-10,645,800),8060=>array(33,-13,834,800),8061=>array(33,-13,834,800),8064=>array(38,-208,692,785),8065=>array(38,-208,692,785),8066=>array(38,-208,692,800),8067=>array(38,-208,692,800),8068=>array(38,-208,692,800),8069=>array(38,-208,692,800),8070=>array(38,-208,692,928),8071=>array(38,-208,692,928),8072=>array(-65,-208,691,785),8073=>array(-65,-208,691,785),8074=>array(29,-208,958,800),8075=>array(69,-208,960,800),8076=>array(29,-208,852,800),8077=>array(67,-208,880,800),8078=>array(-3,-208,752,928),8079=>array(20,-208,776,928),8080=>array(50,-208,664,785),8081=>array(50,-208,664,785),8082=>array(50,-208,664,800),8083=>array(50,-208,664,800),8084=>array(50,-208,664,800),8085=>array(50,-208,684,800),8086=>array(50,-208,664,928),8087=>array(50,-208,664,928),8088=>array(31,-208,924,785),8089=>array(69,-208,930,785),8090=>array(29,-208,1229,800),8091=>array(69,-208,1229,800),8092=>array(29,-208,1159,800),8093=>array(67,-208,1185,800),8094=>array(98,-208,1033,928),8095=>array(97,-208,1042,928),8096=>array(33,-208,834,785),8097=>array(33,-208,834,785),8098=>array(33,-208,834,800),8099=>array(33,-208,834,800),8100=>array(33,-208,834,800),8101=>array(33,-208,834,800),8102=>array(33,-208,834,928),8103=>array(33,-208,834,928),8104=>array(13,-208,870,785),8105=>array(63,-208,920,785),8106=>array(29,-208,1208,800),8107=>array(69,-208,1213,800),8108=>array(29,-208,1037,800),8109=>array(67,-208,1066,800),8110=>array(98,-208,989,928),8111=>array(97,-208,1037,928),8112=>array(38,-12,692,784),8113=>array(38,-12,692,760),8114=>array(38,-208,692,800),8115=>array(38,-208,692,559),8116=>array(38,-208,692,800),8118=>array(38,-12,692,778),8119=>array(38,-208,692,778),8120=>array(-65,0,691,927),8121=>array(-65,0,691,914),8122=>array(38,0,793,800),8123=>array(-42,0,714,800),8124=>array(-65,-208,691,729),8125=>array(210,595,381,785),8126=>array(132,-208,253,-45),8127=>array(210,595,381,785),8128=>array(133,638,500,778),8129=>array(152,654,540,928),8130=>array(50,-208,664,800),8131=>array(50,-208,664,560),8132=>array(50,-208,664,800),8134=>array(50,-208,664,778),8135=>array(50,-208,664,778),8136=>array(84,0,916,800),8137=>array(22,0,831,800),8138=>array(84,0,1059,800),8139=>array(28,0,986,800),8140=>array(21,-208,816,729),8141=>array(61,595,518,800),8142=>array(90,595,563,800),8143=>array(174,595,540,928),8144=>array(42,-19,413,784),8145=>array(42,-19,405,760),8146=>array(42,-19,402,978),8147=>array(50,-19,516,978),8150=>array(42,-19,424,778),8151=>array(42,-19,454,928),8152=>array(21,0,424,927),8153=>array(21,0,417,914),8154=>array(84,0,600,800),8155=>array(25,0,521,800),8157=>array(105,595,523,800),8158=>array(111,595,574,800),8159=>array(174,595,540,928),8160=>array(54,-10,645,784),8161=>array(54,-10,645,760),8162=>array(54,-10,645,978),8163=>array(54,-10,660,978),8164=>array(9,-208,699,785),8165=>array(9,-208,699,785),8166=>array(54,-10,645,778),8167=>array(54,-10,645,928),8168=>array(63,0,809,927),8169=>array(63,0,809,914),8170=>array(84,0,1105,800),8171=>array(20,0,1067,800),8172=>array(69,0,825,785),8173=>array(152,654,484,978),8174=>array(152,654,589,978),8175=>array(131,616,371,800),8178=>array(33,-208,834,800),8179=>array(33,-208,834,547),8180=>array(33,-208,834,800),8182=>array(33,-13,834,778),8183=>array(33,-208,834,778),8184=>array(84,-14,1029,800),8185=>array(28,-14,851,800),8186=>array(84,0,1046,800),8187=>array(-1,0,855,800),8188=>array(-45,-208,812,742),8189=>array(227,616,539,800),8190=>array(249,595,392,785),8208=>array(25,217,360,359),8209=>array(25,217,360,359),8210=>array(24,211,637,337),8211=>array(24,211,441,337),8212=>array(24,211,941,337),8213=>array(-30,211,995,337),8214=>array(127,-236,399,764),8215=>array(-10,-236,510,-9),8216=>array(113,418,389,729),8217=>array(73,418,349,729),8218=>array(-34,-122,242,189),8219=>array(107,418,302,729),8220=>array(113,418,652,729),8221=>array(73,418,612,729),8222=>array(-34,-122,505,189),8223=>array(95,418,535,729),8224=>array(38,-96,504,729),8225=>array(-28,-96,504,729),8226=>array(144,196,495,547),8227=>array(144,157,534,586),8228=>array(46,0,259,189),8229=>array(46,0,569,189),8230=>array(46,0,879,189),8231=>array(124,304,282,424),8240=>array(55,-14,1401,742),8241=>array(55,-14,1855,742),8242=>array(2,547,257,729),8243=>array(2,547,440,729),8244=>array(2,547,624,729),8245=>array(161,547,346,729),8246=>array(161,547,532,729),8247=>array(161,547,712,729),8248=>array(101,-238,632,29),8249=>array(61,67,355,519),8250=>array(38,66,331,519),8251=>array(72,0,900,829),8252=>array(-2,0,629,729),8253=>array(98,0,550,742),8254=>array(-10,663,510,755),8255=>array(-31,-237,859,-79),8256=>array(-31,769,859,927),8257=>array(-52,-235,296,231),8258=>array(20,-37,1003,832),8259=>array(102,188,428,325),8260=>array(-278,-14,445,742),8261=>array(-10,-132,466,760),8262=>array(-28,-132,448,760),8263=>array(69,0,1035,742),8264=>array(104,0,831,742),8265=>array(-2,0,799,742),8266=>array(87,-125,530,546),8267=>array(57,-96,666,729),8268=>array(75,189,425,541),8269=>array(75,189,425,541),8270=>array(20,-37,503,427),8271=>array(56,-142,327,547),8272=>array(-31,-237,859,927),8273=>array(68,-3,455,830),8274=>array(3,-93,548,729),8275=>array(49,212,951,415),8276=>array(-31,-351,859,-192),8277=>array(142,98,694,631),8278=>array(95,93,628,645),8279=>array(2,547,807,729),8280=>array(61,21,776,708),8281=>array(80,71,768,657),8282=>array(31,0,350,729),8283=>array(30,-170,839,898),8284=>array(43,0,794,729),8285=>array(31,0,339,683),8286=>array(31,0,339,683),8304=>array(29,319,398,742),8305=>array(12,326,205,751),8308=>array(3,326,388,734),8309=>array(12,319,393,734),8310=>array(37,319,403,742),8311=>array(51,326,418,734),8312=>array(20,319,400,742),8313=>array(23,319,389,742),8314=>array(67,326,461,677),8315=>array(67,469,461,534),8316=>array(67,407,461,596),8317=>array(48,252,282,751),8318=>array(-1,252,232,751),8319=>array(23,326,412,640),8320=>array(29,-7,398,416),8321=>array(67,0,395,408),8322=>array(45,0,431,416),8323=>array(40,-7,427,416),8324=>array(3,0,388,408),8325=>array(12,-7,393,408),8326=>array(37,-7,403,416),8327=>array(51,0,418,408),8328=>array(20,-7,400,416),8329=>array(23,-7,389,416),8330=>array(67,0,461,351),8331=>array(67,143,461,208),8332=>array(67,81,461,270),8333=>array(48,-74,282,425),8334=>array(-1,-74,232,425),8336=>array(37,-8,411,313),8337=>array(49,-8,429,313),8338=>array(49,-8,436,313),8339=>array(-20,0,427,306),8340=>array(53,-8,423,313),8341=>array(12,0,401,425),8342=>array(20,0,451,425),8343=>array(12,0,207,425),8344=>array(21,0,621,313),8345=>array(23,0,412,313),8346=>array(-6,-117,427,313),8347=>array(11,-8,355,313),8348=>array(72,0,365,393),8352=>array(53,0,919,729),8353=>array(36,-44,693,778),8354=>array(36,-14,697,742),8355=>array(3,0,690,729),8356=>array(7,0,691,742),8357=>array(30,-93,975,640),8358=>array(14,0,823,729),8359=>array(21,-14,1453,729),8360=>array(22,-14,1154,729),8361=>array(23,0,1143,729),8362=>array(-32,-14,870,729),8363=>array(36,-185,817,760),8364=>array(-41,-14,687,742),8365=>array(12,0,735,729),8366=>array(55,0,754,729),8367=>array(37,-223,1220,742),8368=>array(1,-14,660,742),8369=>array(21,0,697,729),8370=>array(38,-81,682,809),8371=>array(-66,0,685,729),8372=>array(16,-14,844,742),8373=>array(76,-147,688,760),8376=>array(18,0,754,729),8377=>array(61,0,718,729),8378=>array(-10,0,745,729),8400=>array(-510,628,-26,760),8401=>array(-483,628,-11,760),8406=>array(-470,560,-20,760),8407=>array(-477,560,-26,760),8411=>array(-335,654,190,774),8412=>array(-432,654,287,774),8417=>array(-470,560,-26,760),8448=>array(15,-23,1106,752),8449=>array(15,-23,1106,752),8450=>array(50,-14,670,742),8451=>array(87,-14,1201,749),8452=>array(64,0,832,729),8453=>array(25,-24,1097,752),8454=>array(25,-24,1169,752),8455=>array(37,-14,652,742),8456=>array(1,-146,693,611),8457=>array(87,0,999,749),8459=>array(36,-14,1063,746),8460=>array(6,-125,809,747),8461=>array(100,0,788,729),8462=>array(31,0,654,760),8463=>array(10,0,625,760),8464=>array(36,-14,533,742),8465=>array(52,-14,659,743),8466=>array(37,-14,787,742),8467=>array(-14,-14,401,742),8468=>array(12,-14,935,760),8469=>array(92,0,745,729),8470=>array(-37,0,1156,729),8471=>array(138,0,862,725),8472=>array(54,-221,658,495),8473=>array(92,0,709,729),8474=>array(50,-146,800,742),8475=>array(31,-14,904,768),8476=>array(41,-14,803,743),8477=>array(98,0,793,729),8478=>array(53,0,844,729),8479=>array(53,-112,666,887),8480=>array(126,443,770,730),8481=>array(40,0,1223,547),8482=>array(144,447,790,729),8483=>array(22,-113,877,885),8484=>array(45,0,709,729),8485=>array(-11,-230,648,777),8486=>array(-45,0,812,742),8487=>array(42,-14,813,723),8488=>array(-5,-159,670,729),8489=>array(36,0,306,566),8490=>array(21,0,837,729),8491=>array(-65,0,691,928),8492=>array(41,-1,853,772),8493=>array(63,-19,767,742),8494=>array(61,-12,793,647),8495=>array(41,-14,591,533),8496=>array(72,-14,668,742),8497=>array(37,-14,860,773),8498=>array(21,0,670,729),8499=>array(38,-18,1156,751),8500=>array(29,-12,436,420),8501=>array(50,-14,761,742),8502=>array(19,-14,687,742),8503=>array(31,-35,439,742),8504=>array(63,-41,633,742),8505=>array(34,0,355,760),8506=>array(44,-27,994,723),8507=>array(0,0,1384,547),8508=>array(34,-14,765,547),8509=>array(-40,-208,700,561),8510=>array(92,0,627,729),8511=>array(92,0,771,729),8512=>array(12,-192,820,719),8513=>array(5,-14,747,742),8514=>array(9,0,554,729),8515=>array(11,0,671,729),8516=>array(2,0,749,729),8517=>array(21,0,786,729),8518=>array(34,-14,752,760),8519=>array(33,-14,635,560),8520=>array(15,0,353,760),8521=>array(-143,-216,354,760),8523=>array(60,-14,838,742),8526=>array(1,0,523,547),8528=>array(56,-14,1023,742),8529=>array(56,-14,994,742),8530=>array(56,-14,1441,742),8531=>array(56,-14,1032,742),8532=>array(45,-14,1032,742),8533=>array(56,-14,998,742),8534=>array(45,-14,998,742),8535=>array(40,-14,998,742),8536=>array(3,-14,998,742),8537=>array(56,-14,1008,742),8538=>array(12,-14,1008,742),8539=>array(56,-14,1005,742),8540=>array(40,-14,1005,742),8541=>array(12,-14,1005,742),8542=>array(51,-14,1005,742),8543=>array(56,-14,893,742),8544=>array(21,0,351,729),8545=>array(21,0,638,729),8546=>array(21,0,924,729),8547=>array(21,0,1165,729),8548=>array(76,0,840,729),8549=>array(76,0,1078,729),8550=>array(76,0,1365,729),8551=>array(76,0,1651,729),8552=>array(21,0,1162,729),8553=>array(-51,0,812,729),8554=>array(-51,0,1099,729),8555=>array(-51,0,1386,729),8556=>array(21,0,566,729),8557=>array(36,-14,724,742),8558=>array(21,0,786,729),8559=>array(21,0,974,729),8560=>array(31,0,354,760),8561=>array(31,0,619,760),8562=>array(31,0,883,760),8563=>array(31,0,987,760),8564=>array(63,0,678,547),8565=>array(63,0,973,760),8566=>array(63,0,1238,760),8567=>array(63,0,1502,760),8568=>array(31,0,995,760),8569=>array(-41,0,671,547),8570=>array(-41,0,980,760),8571=>array(-41,0,1245,760),8572=>array(31,0,354,760),8573=>array(37,-14,581,560),8574=>array(36,-14,724,760),8575=>array(31,0,984,560),8576=>array(48,0,1240,729),8577=>array(21,0,782,729),8578=>array(48,0,1240,729),8579=>array(-13,-14,675,742),8580=>array(-7,-14,537,560),8581=>array(68,-208,752,742),8585=>array(29,-14,1032,742),8592=>array(49,87,781,540),8593=>array(193,0,646,732),8594=>array(57,87,789,540),8595=>array(193,-3,646,729),8596=>array(49,87,789,540),8597=>array(193,-3,646,732),8598=>array(136,66,720,650),8599=>array(136,66,720,650),8600=>array(136,66,720,650),8601=>array(136,66,720,650),8602=>array(49,87,781,540),8603=>array(57,87,789,540),8604=>array(13,84,833,431),8605=>array(5,84,825,431),8606=>array(49,87,781,540),8607=>array(189,0,641,732),8608=>array(57,87,789,540),8609=>array(194,-3,646,729),8610=>array(49,87,793,540),8611=>array(45,87,789,540),8612=>array(49,87,781,540),8613=>array(193,0,646,732),8614=>array(57,87,789,540),8615=>array(193,0,646,732),8616=>array(193,0,646,732),8617=>array(49,87,781,565),8618=>array(57,87,789,565),8619=>array(49,87,781,565),8620=>array(57,87,789,565),8621=>array(49,87,789,540),8622=>array(49,86,789,541),8623=>array(123,-4,714,733),8624=>array(169,0,646,755),8625=>array(192,0,669,755),8626=>array(169,-26,646,729),8627=>array(192,-26,669,729),8628=>array(233,-3,772,621),8629=>array(49,87,673,626),8630=>array(11,198,816,685),8631=>array(22,198,828,685),8632=>array(118,13,788,729),8633=>array(49,-108,789,735),8634=>array(86,45,767,691),8635=>array(71,45,751,691),8636=>array(49,255,781,540),8637=>array(49,87,781,372),8638=>array(361,0,646,732),8639=>array(193,0,478,732),8640=>array(57,255,789,540),8641=>array(57,87,789,372),8642=>array(361,0,646,732),8643=>array(193,0,478,732),8644=>array(49,-59,789,686),8645=>array(47,-3,792,732),8646=>array(49,-59,789,686),8647=>array(49,-59,781,686),8648=>array(46,0,792,732),8649=>array(57,-59,789,686),8650=>array(46,-3,792,729),8651=>array(49,-5,789,632),8652=>array(49,-5,789,632),8653=>array(49,87,781,540),8654=>array(49,87,789,540),8655=>array(57,87,789,540),8656=>array(49,87,781,540),8657=>array(193,0,645,732),8658=>array(57,87,789,540),8659=>array(193,-3,645,729),8660=>array(49,87,789,540),8661=>array(193,-8,645,732),8662=>array(132,-26,755,596),8663=>array(88,-26,711,597),8664=>array(88,16,711,639),8665=>array(132,16,755,639),8666=>array(49,87,781,540),8667=>array(57,87,789,540),8668=>array(44,87,776,540),8669=>array(57,87,789,540),8670=>array(193,0,646,732),8671=>array(193,-3,646,729),8672=>array(49,87,781,540),8673=>array(193,0,646,732),8674=>array(57,87,789,540),8675=>array(193,-3,646,729),8676=>array(49,87,781,540),8677=>array(57,87,789,540),8678=>array(27,46,781,581),8679=>array(151,0,687,754),8680=>array(35,46,789,581),8681=>array(151,-25,687,729),8682=>array(151,0,687,754),8683=>array(151,0,687,754),8684=>array(151,0,687,754),8685=>array(151,0,687,754),8686=>array(151,0,687,754),8687=>array(151,0,687,754),8688=>array(35,46,789,581),8689=>array(60,0,788,729),8690=>array(60,0,788,729),8691=>array(151,-25,687,754),8692=>array(57,87,789,540),8693=>array(47,-3,792,732),8694=>array(57,-223,789,850),8695=>array(49,87,781,540),8696=>array(57,87,789,540),8697=>array(49,87,789,540),8698=>array(49,87,781,540),8699=>array(57,87,789,540),8700=>array(49,87,789,540),8701=>array(27,96,781,531),8702=>array(57,96,811,531),8703=>array(27,96,811,531),8704=>array(5,0,769,729),8705=>array(48,-14,629,742),8706=>array(29,-14,515,674),8707=>array(92,0,610,729),8708=>array(92,-46,610,775),8709=>array(47,-15,810,715),8710=>array(0,0,697,719),8711=>array(0,0,697,719),8712=>array(73,-2,824,730),8713=>array(73,-46,824,775),8714=>array(106,58,644,568),8715=>array(73,-2,824,730),8716=>array(73,-46,824,775),8717=>array(106,58,644,568),8718=>array(98,0,539,553),8719=>array(73,-192,712,719),8720=>array(73,-193,712,718),8721=>array(20,-192,697,719),8722=>array(106,256,732,371),8723=>array(106,0,732,627),8724=>array(49,0,647,729),8725=>array(-96,-93,434,729),8726=>array(165,-49,530,772),8727=>array(118,0,720,626),8728=>array(150,151,475,477),8729=>array(102,253,278,442),8730=>array(37,-20,669,837),8731=>array(37,-20,669,933),8732=>array(36,-20,669,924),8733=>array(92,89,617,505),8734=>array(92,89,741,505),8735=>array(106,67,732,693),8736=>array(77,0,820,729),8737=>array(77,-44,820,729),8738=>array(116,-0,732,726),8739=>array(207,-207,322,773),8740=>array(48,-207,482,773),8741=>array(112,-207,417,773),8742=>array(48,-207,482,773),8743=>array(151,0,661,579),8744=>array(151,0,661,579),8745=>array(151,0,661,579),8746=>array(151,0,661,579),8747=>array(15,-227,548,754),8748=>array(15,-227,914,754),8749=>array(15,-227,1280,754),8750=>array(14,-227,548,754),8751=>array(38,-227,938,754),8752=>array(23,-227,1290,754),8753=>array(15,-227,616,754),8754=>array(14,-227,600,754),8755=>array(14,-227,588,754),8756=>array(60,78,637,647),8757=>array(60,78,637,647),8758=>array(59,79,235,647),8759=>array(60,78,637,647),8760=>array(106,256,732,631),8761=>array(106,45,800,584),8762=>array(106,-4,732,631),8763=>array(106,-34,732,660),8764=>array(106,212,732,415),8765=>array(106,212,732,415),8766=>array(65,131,772,497),8767=>array(106,42,732,584),8768=>array(85,0,289,626),8769=>array(106,76,732,551),8770=>array(106,110,732,482),8771=>array(106,144,732,517),8772=>array(106,0,732,637),8773=>array(106,37,732,628),8774=>array(106,-31,732,628),8775=>array(106,-86,732,726),8776=>array(106,110,732,517),8777=>array(106,8,732,614),8778=>array(106,37,732,628),8779=>array(106,-13,732,628),8780=>array(106,37,732,628),8781=>array(105,105,732,585),8782=>array(106,26,732,656),8783=>array(106,172,732,656),8784=>array(106,144,732,744),8785=>array(106,-117,732,743),8786=>array(105,-92,732,719),8787=>array(104,-92,731,719),8788=>array(98,102,965,520),8789=>array(96,102,966,520),8790=>array(106,144,732,482),8791=>array(106,144,732,839),8792=>array(106,144,732,704),8793=>array(106,144,732,840),8794=>array(106,144,732,840),8795=>array(106,144,732,959),8796=>array(106,144,732,952),8797=>array(106,144,732,762),8798=>array(106,144,732,786),8799=>array(106,144,732,903),8800=>array(106,-5,732,631),8801=>array(106,38,732,588),8802=>array(106,-69,732,695),8803=>array(106,-74,732,700),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8806=>array(106,-106,732,617),8807=>array(106,-106,732,617),8808=>array(106,-185,732,617),8809=>array(106,-185,732,617),8810=>array(72,-34,974,660),8811=>array(72,-34,974,660),8812=>array(86,-132,414,759),8813=>array(105,-10,732,700),8814=>array(106,-4,732,690),8815=>array(106,-63,732,631),8816=>array(106,-112,732,645),8817=>array(106,-112,732,645),8818=>array(106,-84,732,582),8819=>array(106,-84,732,582),8820=>array(106,-112,732,645),8821=>array(106,-112,732,645),8822=>array(102,-119,732,678),8823=>array(102,-119,732,678),8824=>array(102,-221,732,779),8825=>array(102,-221,732,779),8826=>array(106,-55,732,681),8827=>array(106,-55,732,681),8828=>array(106,-177,732,684),8829=>array(106,-177,732,684),8830=>array(106,-132,732,684),8831=>array(106,-132,732,684),8832=>array(106,-89,732,781),8833=>array(106,-89,732,781),8834=>array(99,67,739,559),8835=>array(99,65,739,559),8836=>array(99,-96,739,726),8837=>array(99,-100,739,722),8838=>array(99,0,739,636),8839=>array(99,0,739,635),8840=>array(99,-124,739,759),8841=>array(99,-124,739,759),8842=>array(99,-97,739,636),8843=>array(99,-97,739,635),8844=>array(151,0,661,579),8845=>array(151,0,661,579),8846=>array(151,0,661,579),8847=>array(106,0,732,584),8848=>array(106,0,732,584),8849=>array(106,-115,732,667),8850=>array(106,-115,732,667),8851=>array(106,0,690,626),8852=>array(106,0,690,626),8853=>array(91,-14,747,643),8854=>array(91,-14,747,643),8855=>array(91,-14,747,643),8856=>array(91,-13,747,642),8857=>array(91,-14,747,643),8858=>array(91,-14,747,643),8859=>array(91,-14,747,643),8860=>array(91,-14,747,643),8861=>array(91,-14,747,643),8862=>array(77,-29,761,657),8863=>array(77,-29,761,657),8864=>array(77,-29,761,657),8865=>array(77,-29,761,657),8866=>array(85,0,829,705),8867=>array(85,0,829,705),8868=>array(85,0,829,705),8869=>array(85,0,829,705),8870=>array(85,0,457,705),8871=>array(85,0,457,705),8872=>array(85,0,829,705),8873=>array(85,0,829,705),8874=>array(85,0,829,705),8875=>array(85,0,829,705),8876=>array(85,-100,829,805),8877=>array(85,-100,829,805),8878=>array(85,-100,829,805),8879=>array(85,-100,829,805),8880=>array(106,-54,724,681),8881=>array(114,-54,732,681),8882=>array(106,-1,732,628),8883=>array(106,-1,732,628),8884=>array(106,-80,732,706),8885=>array(106,-80,732,706),8886=>array(60,151,940,477),8887=>array(60,151,940,477),8888=>array(60,151,778,477),8889=>array(43,-63,794,689),8890=>array(63,0,480,705),8891=>array(103,0,709,759),8892=>array(103,0,709,759),8893=>array(103,0,709,759),8894=>array(106,0,732,626),8895=>array(106,0,732,626),8896=>array(0,-192,843,719),8897=>array(0,-192,843,719),8898=>array(48,-192,794,719),8899=>array(48,-192,794,719),8900=>array(3,-233,491,807),8901=>array(102,253,278,442),8902=>array(83,112,543,549),8903=>array(106,-56,732,683),8904=>array(106,-48,894,674),8905=>array(106,-48,894,675),8906=>array(106,-48,894,675),8907=>array(106,-48,894,675),8908=>array(106,-48,894,675),8909=>array(106,144,732,517),8910=>array(49,0,763,579),8911=>array(49,0,763,579),8912=>array(93,-22,732,649),8913=>array(106,-22,745,649),8914=>array(83,0,755,639),8915=>array(83,-14,755,625),8916=>array(186,0,652,729),8917=>array(106,-100,732,729),8918=>array(106,30,732,597),8919=>array(106,30,732,597),8920=>array(72,-34,1350,660),8921=>array(72,-34,1350,660),8922=>array(106,-211,732,837),8923=>array(106,-211,732,837),8924=>array(106,0,732,582),8925=>array(106,0,732,582),8926=>array(106,-177,732,684),8927=>array(106,-177,732,684),8928=>array(106,-197,732,808),8929=>array(106,-263,732,742),8930=>array(106,-191,732,817),8931=>array(106,-191,732,817),8932=>array(106,-146,732,636),8933=>array(106,-146,732,636),8934=>array(106,-168,732,582),8935=>array(106,-168,732,582),8936=>array(106,-216,732,684),8937=>array(106,-216,732,684),8938=>array(106,-138,732,808),8939=>array(106,-138,732,808),8940=>array(106,-224,732,894),8941=>array(106,-224,732,894),8942=>array(412,-40,588,735),8943=>array(79,253,921,442),8944=>array(79,-40,921,735),8945=>array(79,-40,921,735),8946=>array(72,-2,1085,730),8947=>array(73,-2,824,730),8948=>array(106,58,644,568),8949=>array(73,-2,824,984),8950=>array(73,-2,824,919),8951=>array(106,58,644,741),8952=>array(73,-207,824,730),8953=>array(73,-2,824,730),8954=>array(72,-2,1085,730),8955=>array(73,-2,824,730),8956=>array(106,58,644,568),8957=>array(72,-2,824,919),8958=>array(106,58,644,741),8959=>array(106,0,791,732),8960=>array(31,-22,572,519),8961=>array(56,152,540,453),8962=>array(64,0,651,596),8963=>array(193,470,646,732),8964=>array(193,0,646,263),8965=>array(193,-12,646,423),8966=>array(193,-12,646,552),8967=>array(194,-42,443,802),8968=>array(-1,-132,476,760),8969=>array(118,-132,458,760),8970=>array(-1,-132,339,760),8971=>array(-19,-132,458,760),8972=>array(352,-77,759,331),8973=>array(49,-77,457,331),8974=>array(352,226,759,634),8975=>array(49,226,457,634),8976=>array(106,140,732,444),8977=>array(3,113,536,646),8984=>array(84,0,843,759),8985=>array(106,140,732,444),8988=>array(86,425,469,760),8989=>array(127,425,469,760),8990=>array(62,-126,403,208),8991=>array(41,-126,423,208),8992=>array(235,-250,586,926),8993=>array(22,-240,373,940),8996=>array(76,215,1076,575),8997=>array(76,0,1076,575),8998=>array(76,0,1414,760),8999=>array(76,0,1076,760),9000=>array(59,0,1385,729),9003=>array(0,0,1338,760),9004=>array(73,-91,800,748),9075=>array(78,-19,348,547),9076=>array(84,-208,671,562),9077=>array(43,-13,826,547),9082=>array(48,-13,645,559),9085=>array(1,-228,862,99),9095=>array(76,0,1100,743),9108=>array(17,0,856,727),9115=>array(63,-252,438,928),9116=>array(63,-252,205,940),9117=>array(63,-240,438,940),9118=>array(63,-252,438,928),9119=>array(295,-252,438,940),9120=>array(63,-240,438,940),9121=>array(63,-252,438,928),9122=>array(63,-252,205,940),9123=>array(63,-240,438,940),9124=>array(63,-252,438,928),9125=>array(295,-252,438,940),9126=>array(63,-240,438,940),9127=>array(306,-261,668,928),9128=>array(82,-247,444,934),9129=>array(306,-240,668,934),9130=>array(306,-256,444,934),9131=>array(82,-261,444,928),9132=>array(306,-247,668,934),9133=>array(82,-240,444,934),9134=>array(235,-250,373,940),9166=>array(27,46,781,729),9167=>array(91,0,854,596),9187=>array(73,-91,800,748),9189=>array(3,75,766,444),9192=>array(-5,-129,623,294),9250=>array(-34,-14,652,760),9251=>array(21,-228,672,99),9312=>array(59,-15,788,715),9313=>array(59,-15,788,715),9314=>array(59,-15,788,715),9315=>array(59,-15,788,715),9316=>array(59,-15,788,715),9317=>array(59,-15,788,715),9318=>array(59,-15,788,715),9319=>array(59,-15,788,715),9320=>array(59,-15,788,715),9321=>array(59,-15,788,715),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,779,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-124,854,643),9633=>array(91,-124,854,643),9634=>array(91,-124,854,643),9635=>array(91,-124,854,643),9636=>array(91,-124,854,643),9637=>array(91,-124,854,643),9638=>array(91,-124,854,643),9639=>array(91,-124,854,643),9640=>array(91,-124,854,643),9641=>array(91,-124,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-124,766,643),9651=>array(3,-124,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-124,766,643),9655=>array(3,-124,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-124,766,643),9661=>array(3,-124,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-124,766,643),9665=>array(3,-124,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-124,766,643),9671=>array(3,-124,766,643),9672=>array(3,-124,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,750,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,385,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,385,260),9696=>array(3,260,766,645),9697=>array(3,-125,766,260),9698=>array(3,-124,766,643),9699=>array(3,-124,766,643),9700=>array(3,-124,766,643),9701=>array(3,-124,766,643),9702=>array(144,196,495,547),9703=>array(91,-124,854,643),9704=>array(91,-124,854,643),9705=>array(91,-124,854,643),9706=>array(91,-124,854,643),9707=>array(91,-124,854,643),9708=>array(3,-124,766,643),9709=>array(3,-124,766,643),9710=>array(3,-124,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-124,854,643),9713=>array(91,-124,854,643),9714=>array(91,-124,854,643),9715=>array(91,-124,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-124,766,643),9721=>array(3,-124,766,643),9722=>array(3,-124,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-124,766,643),9728=>array(83,0,813,729),9729=>array(51,-2,949,360),9730=>array(49,0,848,729),9731=>array(83,-0,813,927),9732=>array(64,0,833,880),9733=>array(65,-4,832,723),9734=>array(65,-4,832,723),9735=>array(83,2,490,729),9736=>array(83,0,813,731),9737=>array(83,0,813,730),9738=>array(61,0,828,727),9739=>array(61,0,828,723),9740=>array(61,-1,610,722),9741=>array(61,0,952,723),9742=>array(68,0,1177,729),9743=>array(71,0,1180,729),9744=>array(90,0,807,729),9745=>array(89,0,808,729),9746=>array(89,0,808,729),9747=>array(75,78,457,656),9748=>array(49,0,870,933),9749=>array(74,0,822,731),9750=>array(84,0,813,731),9751=>array(84,0,813,727),9752=>array(78,0,819,729),9753=>array(83,140,813,574),9754=>array(84,113,813,569),9755=>array(84,113,813,569),9756=>array(87,104,810,569),9757=>array(72,0,537,724),9758=>array(86,103,810,569),9759=>array(72,-3,537,720),9760=>array(61,0,835,730),9761=>array(84,0,813,730),9762=>array(83,0,813,730),9763=>array(49,0,848,730),9764=>array(49,-2,620,727),9765=>array(83,0,663,731),9766=>array(83,-1,566,731),9767=>array(83,0,701,911),9768=>array(83,0,462,730),9769=>array(83,-1,813,729),9770=>array(87,0,810,730),9771=>array(83,0,814,731),9772=>array(83,0,627,731),9773=>array(83,0,813,730),9774=>array(83,0,813,730),9775=>array(83,0,813,730),9776=>array(83,0,813,729),9777=>array(83,0,814,729),9778=>array(83,0,813,729),9779=>array(83,0,813,729),9780=>array(83,0,813,729),9781=>array(83,0,813,729),9782=>array(83,0,813,729),9783=>array(83,0,813,729),9784=>array(80,3,817,721),9785=>array(83,-73,959,804),9786=>array(83,-73,959,804),9787=>array(83,-73,959,804),9788=>array(83,0,813,730),9789=>array(358,0,814,730),9790=>array(83,0,539,730),9791=>array(85,-102,528,732),9792=>array(85,-125,647,731),9793=>array(85,-14,647,843),9794=>array(79,-14,831,720),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9800=>array(45,0,851,731),9801=>array(89,0,807,730),9802=>array(94,0,802,731),9803=>array(113,31,784,679),9804=>array(140,0,756,730),9805=>array(53,-180,843,730),9806=>array(83,52,813,653),9807=>array(34,-96,863,730),9808=>array(83,-0,813,730),9809=>array(94,0,802,730),9810=>array(86,153,810,579),9811=>array(157,0,739,730),9812=>array(98,0,798,730),9813=>array(110,0,786,730),9814=>array(167,-1,729,729),9815=>array(214,0,683,730),9816=>array(165,0,732,730),9817=>array(148,-0,748,730),9818=>array(98,0,798,730),9819=>array(110,0,786,730),9820=>array(167,-1,729,729),9821=>array(214,0,683,730),9822=>array(162,0,734,730),9823=>array(148,-0,748,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9832=>array(105,-1,791,729),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),9840=>array(84,0,664,731),9841=>array(64,0,701,731),9842=>array(84,0,813,709),9843=>array(76,16,820,731),9844=>array(76,16,820,731),9845=>array(76,16,820,731),9846=>array(76,16,820,731),9847=>array(76,16,820,731),9848=>array(76,16,820,731),9849=>array(76,16,820,731),9850=>array(76,16,820,731),9851=>array(84,0,812,704),9852=>array(83,0,814,731),9853=>array(83,0,814,731),9854=>array(83,0,814,731),9855=>array(149,1,747,731),9856=>array(73,0,797,725),9857=>array(73,0,797,725),9858=>array(73,0,797,725),9859=>array(73,0,797,725),9860=>array(73,0,797,725),9861=>array(73,0,797,725),9862=>array(83,0,813,731),9863=>array(83,0,813,731),9864=>array(83,0,813,731),9865=>array(83,0,813,731),9866=>array(83,0,813,98),9867=>array(83,0,813,98),9868=>array(83,0,813,413),9869=>array(83,0,813,413),9870=>array(83,0,813,413),9871=>array(83,0,813,413),9872=>array(168,3,728,731),9873=>array(168,3,728,731),9874=>array(52,0,844,731),9875=>array(97,-10,799,732),9876=>array(131,0,765,729),9877=>array(61,-10,479,732),9878=>array(59,-10,837,732),9879=>array(61,0,835,732),9880=>array(145,0,750,732),9881=>array(95,-17,802,727),9882=>array(128,-9,768,733),9883=>array(127,0,769,728),9884=>array(127,0,769,729),9888=>array(49,0,848,729),9889=>array(83,2,619,730),9890=>array(85,-125,919,731),9891=>array(79,-206,1023,720),9892=>array(85,-186,1109,856),9893=>array(85,-125,837,917),9894=>array(131,-14,727,869),9895=>array(101,-170,741,884),9896=>array(188,-14,650,869),9897=>array(4,133,829,596),9898=>array(188,133,650,597),9899=>array(188,133,650,597),9900=>array(249,194,589,536),9901=>array(175,194,663,536),9902=>array(41,169,797,560),9903=>array(5,194,833,536),9904=>array(103,237,757,540),9905=>array(211,42,626,698),9906=>array(85,-125,647,731),9907=>array(168,-125,646,731),9908=>array(86,-125,646,731),9909=>array(86,-125,646,731),9910=>array(59,-118,791,643),9911=>array(194,-104,595,710),9912=>array(158,-125,543,731),9920=>array(42,4,796,553),9921=>array(42,4,796,724),9922=>array(42,4,796,553),9923=>array(42,4,796,724),9954=>array(85,-14,647,843),9985=>array(11,190,803,635),9986=>array(42,141,784,588),9987=>array(11,94,803,539),9988=>array(36,119,824,613),9990=>array(42,-14,796,742),9991=>array(42,-14,796,742),9992=>array(59,21,782,708),9993=>array(64,107,773,622),9996=>array(212,0,561,742),9997=>array(21,83,802,678),9998=>array(89,75,724,710),9999=>array(26,198,819,530),10000=>array(89,75,724,710),10001=>array(43,185,757,544),10002=>array(67,209,757,520),10003=>array(150,97,667,630),10004=>array(116,87,721,631),10005=>array(126,72,711,657),10006=>array(85,31,752,698),10007=>array(118,-9,701,732),10008=>array(123,0,754,739),10009=>array(55,0,783,729),10010=>array(55,0,783,729),10011=>array(55,0,783,729),10012=>array(55,0,783,729),10013=>array(165,0,673,729),10014=>array(131,0,678,729),10015=>array(155,0,683,729),10016=>array(55,0,783,729),10017=>array(91,-13,747,744),10018=>array(41,-14,797,742),10019=>array(42,-12,796,742),10020=>array(41,-14,797,742),10021=>array(41,-13,797,743),10022=>array(42,-14,796,745),10023=>array(42,-14,796,745),10025=>array(23,-9,814,743),10026=>array(42,-14,796,742),10027=>array(23,-9,814,743),10028=>array(23,-9,814,743),10029=>array(23,-9,814,743),10030=>array(23,-9,814,743),10031=>array(23,-9,814,743),10032=>array(24,12,815,714),10033=>array(64,0,773,729),10034=>array(74,0,764,729),10035=>array(55,0,783,729),10036=>array(31,-14,787,742),10037=>array(41,-14,797,742),10038=>array(91,-14,747,742),10039=>array(41,-14,797,742),10040=>array(41,-14,797,742),10041=>array(41,-14,797,742),10042=>array(55,0,783,729),10043=>array(82,-14,756,742),10044=>array(82,-14,756,742),10045=>array(84,-14,753,742),10046=>array(79,-14,759,742),10047=>array(54,0,784,709),10048=>array(54,0,784,709),10049=>array(41,-14,797,742),10050=>array(42,-14,796,742),10051=>array(79,-14,759,742),10052=>array(89,0,749,729),10053=>array(76,0,762,729),10054=>array(63,2,773,729),10055=>array(79,-13,759,742),10056=>array(47,-13,791,730),10057=>array(47,-13,791,730),10058=>array(41,-13,797,743),10059=>array(41,-13,797,743),10061=>array(50,-10,847,738),10063=>array(60,-49,837,729),10064=>array(60,0,837,777),10065=>array(60,-49,837,729),10066=>array(60,0,837,777),10070=>array(83,-2,813,728),10072=>array(377,-240,460,760),10073=>array(336,-240,502,760),10074=>array(253,-240,585,760),10075=>array(85,395,264,729),10076=>array(59,395,237,729),10077=>array(85,395,479,729),10078=>array(59,395,453,729),10081=>array(155,-93,772,851),10082=>array(202,-17,636,742),10083=>array(163,-17,675,742),10084=>array(54,83,784,645),10085=>array(168,-1,729,729),10086=>array(62,21,724,702),10087=>array(78,169,759,564),10088=>array(196,-139,648,769),10089=>array(196,-139,648,769),10090=>array(264,-132,574,758),10091=>array(264,-132,574,758),10092=>array(215,-240,607,760),10093=>array(232,-240,623,760),10094=>array(142,-240,685,760),10095=>array(153,-240,696,760),10096=>array(167,-240,656,760),10097=>array(183,-240,672,760),10098=>array(346,-241,535,760),10099=>array(303,-241,492,760),10100=>array(175,-163,634,760),10101=>array(204,-163,663,760),10102=>array(59,-15,788,715),10103=>array(59,-15,788,715),10104=>array(59,-15,788,715),10105=>array(59,-15,788,715),10106=>array(59,-15,788,715),10107=>array(59,-15,788,715),10108=>array(59,-15,788,715),10109=>array(59,-15,788,715),10110=>array(59,-15,788,715),10111=>array(59,-15,788,715),10112=>array(4,-52,833,780),10113=>array(4,-52,833,780),10114=>array(4,-52,833,780),10115=>array(4,-52,833,780),10116=>array(4,-52,833,780),10117=>array(4,-52,833,780),10118=>array(4,-52,833,780),10119=>array(4,-52,833,780),10120=>array(4,-52,833,780),10121=>array(4,-52,833,780),10122=>array(4,-52,833,780),10123=>array(4,-52,833,780),10124=>array(4,-52,833,780),10125=>array(4,-52,833,780),10126=>array(4,-52,833,780),10127=>array(4,-52,833,780),10128=>array(4,-52,833,780),10129=>array(4,-52,833,780),10130=>array(4,-52,833,780),10131=>array(4,-52,833,780),10132=>array(57,75,789,552),10136=>array(123,55,682,614),10137=>array(57,100,789,527),10138=>array(123,13,682,572),10139=>array(57,129,789,498),10140=>array(57,57,764,570),10141=>array(57,100,789,527),10142=>array(57,100,789,527),10143=>array(57,100,789,527),10144=>array(57,100,789,527),10145=>array(57,46,811,581),10146=>array(111,94,789,533),10147=>array(111,94,789,533),10148=>array(111,-4,789,631),10149=>array(57,100,789,548),10150=>array(57,79,789,527),10151=>array(240,-7,606,634),10152=>array(57,100,789,527),10153=>array(57,75,765,552),10154=>array(57,75,765,552),10155=>array(21,12,794,586),10156=>array(21,12,794,586),10157=>array(135,0,774,574),10158=>array(135,0,774,574),10159=>array(62,49,799,574),10161=>array(62,49,799,574),10162=>array(154,-20,721,585),10163=>array(63,157,789,470),10164=>array(81,55,682,655),10165=>array(57,173,789,454),10166=>array(82,-29,682,572),10167=>array(82,55,682,655),10168=>array(57,172,789,455),10169=>array(82,-28,682,572),10170=>array(56,84,789,543),10171=>array(73,140,779,487),10172=>array(79,167,774,460),10173=>array(79,118,774,509),10174=>array(57,81,789,546),10181=>array(0,-163,438,769),10182=>array(-39,-163,474,769),10208=>array(3,-233,491,807),10214=>array(7,-132,498,760),10215=>array(7,-132,498,760),10216=>array(104,-132,464,759),10217=>array(-7,-132,353,759),10218=>array(104,-132,728,759),10219=>array(-7,-132,616,759),10224=>array(41,0,797,732),10225=>array(42,-3,798,729),10226=>array(9,45,816,685),10227=>array(22,45,830,685),10228=>array(57,-14,1108,643),10229=>array(49,87,1376,540),10230=>array(57,87,1385,540),10231=>array(49,87,1385,540),10232=>array(49,87,1376,540),10233=>array(57,87,1385,540),10234=>array(49,87,1385,540),10235=>array(49,87,1376,540),10236=>array(57,87,1385,540),10237=>array(49,87,1376,540),10238=>array(57,87,1385,540),10239=>array(57,87,1385,540),10241=>array(146,586,342,781),10242=>array(146,325,342,521),10243=>array(146,325,342,781),10244=>array(146,65,342,261),10245=>array(146,65,342,781),10246=>array(146,65,342,521),10247=>array(146,65,342,781),10248=>array(439,586,635,781),10249=>array(146,586,635,781),10250=>array(146,325,635,781),10251=>array(146,325,635,781),10252=>array(146,65,635,781),10253=>array(146,65,635,781),10254=>array(146,65,635,781),10255=>array(146,65,635,781),10256=>array(439,325,635,521),10257=>array(146,325,635,781),10258=>array(146,325,635,521),10259=>array(146,325,635,781),10260=>array(146,65,635,521),10261=>array(146,65,635,781),10262=>array(146,65,635,521),10263=>array(146,65,635,781),10264=>array(439,325,635,781),10265=>array(146,325,635,781),10266=>array(146,325,635,781),10267=>array(146,325,635,781),10268=>array(146,65,635,781),10269=>array(146,65,635,781),10270=>array(146,65,635,781),10271=>array(146,65,635,781),10272=>array(439,65,635,261),10273=>array(146,65,635,781),10274=>array(146,65,635,521),10275=>array(146,65,635,781),10276=>array(146,65,635,261),10277=>array(146,65,635,781),10278=>array(146,65,635,521),10279=>array(146,65,635,781),10280=>array(439,65,635,781),10281=>array(146,65,635,781),10282=>array(146,65,635,781),10283=>array(146,65,635,781),10284=>array(146,65,635,781),10285=>array(146,65,635,781),10286=>array(146,65,635,781),10287=>array(146,65,635,781),10288=>array(439,65,635,521),10289=>array(146,65,635,781),10290=>array(146,65,635,521),10291=>array(146,65,635,781),10292=>array(146,65,635,521),10293=>array(146,65,635,781),10294=>array(146,65,635,521),10295=>array(146,65,635,781),10296=>array(439,65,635,781),10297=>array(146,65,635,781),10298=>array(146,65,635,781),10299=>array(146,65,635,781),10300=>array(146,65,635,781),10301=>array(146,65,635,781),10302=>array(146,65,635,781),10303=>array(146,65,635,781),10304=>array(146,-195,342,0),10305=>array(146,-195,342,781),10306=>array(146,-195,342,521),10307=>array(146,-195,342,781),10308=>array(146,-195,342,261),10309=>array(146,-195,342,781),10310=>array(146,-195,342,521),10311=>array(146,-195,342,781),10312=>array(146,-195,635,781),10313=>array(146,-195,635,781),10314=>array(146,-195,635,781),10315=>array(146,-195,635,781),10316=>array(146,-195,635,781),10317=>array(146,-195,635,781),10318=>array(146,-195,635,781),10319=>array(146,-195,635,781),10320=>array(146,-195,635,521),10321=>array(146,-195,635,781),10322=>array(146,-195,635,521),10323=>array(146,-195,635,781),10324=>array(146,-195,635,521),10325=>array(146,-195,635,781),10326=>array(146,-195,635,521),10327=>array(146,-195,635,781),10328=>array(146,-195,635,781),10329=>array(146,-195,635,781),10330=>array(146,-195,635,781),10331=>array(146,-195,635,781),10332=>array(146,-195,635,781),10333=>array(146,-195,635,781),10334=>array(146,-195,635,781),10335=>array(146,-195,635,781),10336=>array(146,-195,635,261),10337=>array(146,-195,635,781),10338=>array(146,-195,635,521),10339=>array(146,-195,635,781),10340=>array(146,-195,635,261),10341=>array(146,-195,635,781),10342=>array(146,-195,635,521),10343=>array(146,-195,635,781),10344=>array(146,-195,635,781),10345=>array(146,-195,635,781),10346=>array(146,-195,635,781),10347=>array(146,-195,635,781),10348=>array(146,-195,635,781),10349=>array(146,-195,635,781),10350=>array(146,-195,635,781),10351=>array(146,-195,635,781),10352=>array(146,-195,635,521),10353=>array(146,-195,635,781),10354=>array(146,-195,635,521),10355=>array(146,-195,635,781),10356=>array(146,-195,635,521),10357=>array(146,-195,635,781),10358=>array(146,-195,635,521),10359=>array(146,-195,635,781),10360=>array(146,-195,635,781),10361=>array(146,-195,635,781),10362=>array(146,-195,635,781),10363=>array(146,-195,635,781),10364=>array(146,-195,635,781),10365=>array(146,-195,635,781),10366=>array(146,-195,635,781),10367=>array(146,-195,635,781),10368=>array(439,-195,635,0),10369=>array(146,-195,635,781),10370=>array(146,-195,635,521),10371=>array(146,-195,635,781),10372=>array(146,-195,635,261),10373=>array(146,-195,635,781),10374=>array(146,-195,635,521),10375=>array(146,-195,635,781),10376=>array(439,-195,635,781),10377=>array(146,-195,635,781),10378=>array(146,-195,635,781),10379=>array(146,-195,635,781),10380=>array(146,-195,635,781),10381=>array(146,-195,635,781),10382=>array(146,-195,635,781),10383=>array(146,-195,635,781),10384=>array(439,-195,635,521),10385=>array(146,-195,635,781),10386=>array(146,-195,635,521),10387=>array(146,-195,635,781),10388=>array(146,-195,635,521),10389=>array(146,-195,635,781),10390=>array(146,-195,635,521),10391=>array(146,-195,635,781),10392=>array(439,-195,635,781),10393=>array(146,-195,635,781),10394=>array(146,-195,635,781),10395=>array(146,-195,635,781),10396=>array(146,-195,635,781),10397=>array(146,-195,635,781),10398=>array(146,-195,635,781),10399=>array(146,-195,635,781),10400=>array(439,-195,635,261),10401=>array(146,-195,635,781),10402=>array(146,-195,635,521),10403=>array(146,-195,635,781),10404=>array(146,-195,635,261),10405=>array(146,-195,635,781),10406=>array(146,-195,635,521),10407=>array(146,-195,635,781),10408=>array(439,-195,635,781),10409=>array(146,-195,635,781),10410=>array(146,-195,635,781),10411=>array(146,-195,635,781),10412=>array(146,-195,635,781),10413=>array(146,-195,635,781),10414=>array(146,-195,635,781),10415=>array(146,-195,635,781),10416=>array(439,-195,635,521),10417=>array(146,-195,635,781),10418=>array(146,-195,635,521),10419=>array(146,-195,635,781),10420=>array(146,-195,635,521),10421=>array(146,-195,635,781),10422=>array(146,-195,635,521),10423=>array(146,-195,635,781),10424=>array(439,-195,635,781),10425=>array(146,-195,635,781),10426=>array(146,-195,635,781),10427=>array(146,-195,635,781),10428=>array(146,-195,635,781),10429=>array(146,-195,635,781),10430=>array(146,-195,635,781),10431=>array(146,-195,635,781),10432=>array(146,-195,635,0),10433=>array(146,-195,635,781),10434=>array(146,-195,635,521),10435=>array(146,-195,635,781),10436=>array(146,-195,635,261),10437=>array(146,-195,635,781),10438=>array(146,-195,635,521),10439=>array(146,-195,635,781),10440=>array(146,-195,635,781),10441=>array(146,-195,635,781),10442=>array(146,-195,635,781),10443=>array(146,-195,635,781),10444=>array(146,-195,635,781),10445=>array(146,-195,635,781),10446=>array(146,-195,635,781),10447=>array(146,-195,635,781),10448=>array(146,-195,635,521),10449=>array(146,-195,635,781),10450=>array(146,-195,635,521),10451=>array(146,-195,635,781),10452=>array(146,-195,635,521),10453=>array(146,-195,635,781),10454=>array(146,-195,635,521),10455=>array(146,-195,635,781),10456=>array(146,-195,635,781),10457=>array(146,-195,635,781),10458=>array(146,-195,635,781),10459=>array(146,-195,635,781),10460=>array(146,-195,635,781),10461=>array(146,-195,635,781),10462=>array(146,-195,635,781),10463=>array(146,-195,635,781),10464=>array(146,-195,635,261),10465=>array(146,-195,635,781),10466=>array(146,-195,635,521),10467=>array(146,-195,635,781),10468=>array(146,-195,635,261),10469=>array(146,-195,635,781),10470=>array(146,-195,635,521),10471=>array(146,-195,635,781),10472=>array(146,-195,635,781),10473=>array(146,-195,635,781),10474=>array(146,-195,635,781),10475=>array(146,-195,635,781),10476=>array(146,-195,635,781),10477=>array(146,-195,635,781),10478=>array(146,-195,635,781),10479=>array(146,-195,635,781),10480=>array(146,-195,635,521),10481=>array(146,-195,635,781),10482=>array(146,-195,635,521),10483=>array(146,-195,635,781),10484=>array(146,-195,635,521),10485=>array(146,-195,635,781),10486=>array(146,-195,635,521),10487=>array(146,-195,635,781),10488=>array(146,-195,635,781),10489=>array(146,-195,635,781),10490=>array(146,-195,635,781),10491=>array(146,-195,635,781),10492=>array(146,-195,635,781),10493=>array(146,-195,635,781),10494=>array(146,-195,635,781),10495=>array(146,-195,635,781),10502=>array(49,87,781,540),10503=>array(57,87,789,540),10506=>array(132,0,707,732),10507=>array(132,0,707,732),10560=>array(86,45,726,853),10561=>array(86,45,726,853),10627=>array(117,-163,718,760),10628=>array(35,-163,636,760),10702=>array(106,-258,732,800),10703=>array(106,-1,940,628),10704=>array(106,-1,940,628),10705=>array(106,-48,894,674),10706=>array(106,-48,894,674),10707=>array(106,-48,894,674),10708=>array(106,-48,894,675),10709=>array(106,-48,894,675),10731=>array(3,-233,491,807),10746=>array(106,0,732,627),10747=>array(106,0,732,627),10752=>array(28,-211,972,734),10753=>array(28,-211,972,734),10754=>array(28,-211,972,734),10764=>array(15,-227,1646,754),10765=>array(14,-227,548,754),10766=>array(14,-227,548,754),10767=>array(14,-227,548,754),10768=>array(14,-227,548,754),10769=>array(14,-227,576,754),10770=>array(14,-227,548,754),10771=>array(14,-227,548,754),10772=>array(14,-228,651,754),10773=>array(14,-227,548,754),10774=>array(14,-227,548,754),10775=>array(-30,-227,556,754),10776=>array(14,-227,548,754),10777=>array(14,-227,548,754),10778=>array(14,-227,548,754),10779=>array(15,-227,548,898),10780=>array(15,-372,548,754),10799=>array(125,20,713,607),10858=>array(106,212,732,660),10859=>array(106,-34,732,660),10877=>array(106,-150,732,632),10878=>array(106,-150,732,632),10879=>array(106,-150,732,632),10880=>array(106,-150,732,632),10881=>array(106,-150,732,688),10882=>array(106,-150,732,688),10883=>array(106,-150,732,827),10884=>array(106,-150,732,827),10885=>array(106,-217,732,630),10886=>array(106,-217,732,630),10887=>array(106,-124,732,582),10888=>array(106,-124,732,582),10889=>array(106,-281,732,630),10890=>array(106,-281,732,630),10891=>array(106,-303,732,814),10892=>array(106,-303,732,814),10893=>array(106,-183,732,653),10894=>array(106,-183,732,653),10895=>array(106,-245,732,765),10896=>array(106,-245,732,765),10897=>array(106,-278,732,782),10898=>array(106,-278,732,782),10899=>array(106,-263,732,771),10900=>array(106,-263,732,771),10901=>array(106,-50,732,733),10902=>array(106,-50,732,733),10903=>array(106,-50,732,733),10904=>array(106,-50,732,733),10905=>array(106,-45,732,678),10906=>array(106,-45,732,678),10907=>array(106,-81,732,724),10908=>array(106,-81,732,724),10909=>array(106,13,732,680),10910=>array(106,13,732,680),10911=>array(106,-239,732,746),10912=>array(106,-239,732,746),10926=>array(106,22,732,656),10927=>array(106,-83,732,684),10928=>array(106,-83,732,684),10929=>array(106,-246,732,684),10930=>array(106,-246,732,684),10931=>array(106,-205,732,672),10932=>array(106,-205,732,672),10933=>array(106,-304,732,672),10934=>array(106,-304,732,672),10935=>array(106,-252,732,713),10936=>array(106,-252,732,713),10937=>array(106,-316,732,713),10938=>array(106,-316,732,713),11001=>array(106,-195,732,609),11002=>array(106,-195,732,609),11008=>array(123,-23,744,598),11009=>array(94,-23,715,598),11010=>array(123,-23,744,598),11011=>array(94,-23,715,598),11012=>array(27,46,789,581),11013=>array(27,46,781,581),11014=>array(151,0,687,754),11015=>array(151,-25,687,729),11016=>array(123,-23,744,598),11017=>array(94,-23,715,598),11018=>array(123,-23,744,598),11019=>array(94,-23,715,598),11020=>array(27,46,789,581),11021=>array(151,-25,687,754),11022=>array(57,-25,800,372),11023=>array(57,255,800,652),11024=>array(38,-25,781,372),11025=>array(38,255,781,652),11026=>array(91,-124,854,643),11027=>array(91,-124,854,643),11028=>array(91,-124,854,643),11029=>array(91,-124,854,643),11030=>array(3,-124,766,643),11031=>array(3,-124,766,643),11032=>array(3,-124,766,643),11033=>array(3,-124,766,643),11034=>array(91,-124,854,643),11039=>array(18,-26,852,767),11040=>array(18,-26,852,767),11041=>array(73,-91,800,748),11042=>array(73,-91,800,748),11043=>array(17,-35,856,692),11044=>array(55,-250,1064,770),11091=>array(38,-47,832,788),11092=>array(38,-47,832,788),11360=>array(-24,0,566,729),11361=>array(-35,0,390,760),11362=>array(-28,0,566,729),11363=>array(18,0,716,729),11364=>array(54,-200,708,729),11365=>array(-21,-46,692,594),11366=>array(-6,-93,531,822),11367=>array(36,-157,904,729),11368=>array(23,-138,770,760),11369=>array(36,-157,855,729),11370=>array(23,-138,709,760),11371=>array(-11,-157,755,729),11372=>array(5,-138,606,547),11373=>array(48,-14,840,741),11374=>array(41,-200,993,729),11375=>array(76,0,840,729),11376=>array(-23,-14,780,741),11377=>array(67,0,797,560),11378=>array(99,0,1263,742),11379=>array(87,0,1075,560),11380=>array(44,0,687,586),11381=>array(21,0,623,729),11382=>array(31,0,494,547),11383=>array(64,0,724,552),11385=>array(10,-13,529,760),11386=>array(43,-14,644,560),11387=>array(25,0,520,547),11388=>array(-75,-121,219,425),11389=>array(42,326,524,734),11390=>array(37,-240,688,742),11391=>array(-2,-240,763,729),11520=>array(41,-64,638,547),11521=>array(-12,-232,663,546),11522=>array(28,-232,635,547),11523=>array(42,-10,646,807),11524=>array(29,-228,642,546),11525=>array(21,-228,1017,546),11526=>array(74,-8,697,816),11527=>array(31,-9,1003,547),11528=>array(42,0,617,547),11529=>array(29,-227,643,816),11530=>array(20,-9,1014,546),11531=>array(35,-8,687,816),11532=>array(20,0,656,816),11533=>array(30,-8,1025,546),11534=>array(29,-8,667,546),11535=>array(55,-228,875,816),11536=>array(30,-9,1005,816),11537=>array(29,-9,668,816),11538=>array(26,-232,632,546),11539=>array(29,-228,1024,661),11540=>array(40,-228,980,546),11541=>array(26,-228,1009,816),11542=>array(24,0,657,546),11543=>array(29,-228,668,547),11544=>array(29,-232,665,546),11545=>array(27,-228,657,816),11546=>array(26,-232,632,547),11547=>array(41,-9,695,816),11548=>array(24,-228,1018,547),11549=>array(23,-232,641,546),11550=>array(31,-232,677,546),11551=>array(16,-228,653,567),11552=>array(24,-9,1042,546),11553=>array(31,-228,648,816),11554=>array(38,-9,625,626),11555=>array(40,-228,659,816),11556=>array(30,-228,721,546),11557=>array(40,-8,982,816),11800=>array(37,-13,494,729),11807=>array(106,-34,732,415),11810=>array(77,314,466,760),11811=>array(124,314,448,760),11812=>array(-10,-132,314,314),11813=>array(-28,-132,362,314),11822=>array(104,0,580,742),19904=>array(83,-158,813,729),19905=>array(83,-158,813,729),19906=>array(83,-158,813,729),19907=>array(83,-158,813,729),19908=>array(83,-158,813,729),19909=>array(83,-158,813,729),19910=>array(83,-158,813,729),19911=>array(83,-158,813,729),19912=>array(83,-158,813,729),19913=>array(83,-158,814,729),19914=>array(83,-158,813,729),19915=>array(83,-158,813,729),19916=>array(83,-158,813,729),19917=>array(83,-158,813,729),19918=>array(83,-158,813,729),19919=>array(83,-158,813,729),19920=>array(83,-158,814,729),19921=>array(83,-158,813,729),19922=>array(83,-158,814,729),19923=>array(83,-158,813,729),19924=>array(83,-158,813,729),19925=>array(83,-158,813,729),19926=>array(83,-158,813,729),19927=>array(83,-158,813,729),19928=>array(83,-158,813,729),19929=>array(83,-158,813,729),19930=>array(83,-158,813,729),19931=>array(83,-158,814,729),19932=>array(83,-158,813,729),19933=>array(83,-158,813,729),19934=>array(83,-158,814,729),19935=>array(83,-158,813,729),19936=>array(83,-158,813,729),19937=>array(83,-158,813,729),19938=>array(83,-158,813,729),19939=>array(83,-158,813,729),19940=>array(83,-158,813,729),19941=>array(83,-158,814,729),19942=>array(83,-158,813,729),19943=>array(83,-158,813,729),19944=>array(83,-158,814,729),19945=>array(83,-158,813,729),19946=>array(83,-158,814,729),19947=>array(83,-158,813,729),19948=>array(83,-158,814,729),19949=>array(83,-158,813,729),19950=>array(83,-158,814,729),19951=>array(83,-158,813,729),19952=>array(83,-158,814,729),19953=>array(83,-158,813,729),19954=>array(83,-158,813,729),19955=>array(83,-158,813,729),19956=>array(83,-158,813,729),19957=>array(83,-158,814,729),19958=>array(83,-158,813,729),19959=>array(83,-158,813,729),19960=>array(83,-158,813,729),19961=>array(83,-158,814,729),19962=>array(83,-158,813,729),19963=>array(83,-158,814,729),19964=>array(83,-158,814,729),19965=>array(83,-158,813,729),19966=>array(83,-158,813,729),19967=>array(83,-158,813,729),42192=>array(21,0,699,729),42193=>array(21,0,719,729),42194=>array(17,0,712,729),42195=>array(21,0,786,729),42196=>array(48,0,748,729),42197=>array(-65,0,634,729),42198=>array(36,-14,778,742),42199=>array(21,0,837,729),42200=>array(-65,0,754,729),42201=>array(7,-14,581,729),42202=>array(36,-14,724,742),42203=>array(-13,-14,675,742),42204=>array(-26,0,740,729),42205=>array(21,0,670,729),42206=>array(21,0,670,729),42207=>array(21,0,974,729),42208=>array(21,0,816,729),42209=>array(21,0,566,729),42210=>array(15,-14,665,742),42211=>array(21,0,685,729),42212=>array(81,0,749,729),42213=>array(-66,0,698,729),42214=>array(76,0,840,729),42215=>array(21,0,816,729),42216=>array(5,-14,747,742),42217=>array(19,0,592,743),42218=>array(107,0,1143,729),42219=>array(-51,0,812,729),42220=>array(63,0,809,729),42221=>array(67,0,741,729),42222=>array(-65,0,691,729),42223=>array(76,0,840,729),42224=>array(21,0,670,729),42225=>array(13,0,662,729),42226=>array(21,0,351,729),42227=>array(36,-14,814,742),42228=>array(68,-14,791,729),42229=>array(20,0,733,743),42230=>array(9,0,554,729),42231=>array(48,0,809,729),42232=>array(17,0,230,189),42233=>array(-63,-142,227,189),42234=>array(17,0,582,189),42235=>array(17,-142,579,189),42236=>array(-74,-142,284,547),42237=>array(2,0,284,547),42238=>array(88,0,554,405),42239=>array(39,134,549,492),42564=>array(-1,-14,631,742),42565=>array(-7,-14,534,560),42566=>array(74,0,384,729),42567=>array(74,-1,326,547),42572=>array(37,-14,1348,654),42573=>array(31,-13,1129,547),42576=>array(92,0,1213,729),42577=>array(52,0,1000,547),42580=>array(45,-14,1153,742),42581=>array(37,-14,941,560),42582=>array(21,0,1017,729),42583=>array(31,-14,905,560),42594=>array(-26,-157,1144,729),42595=>array(-10,-138,967,547),42596=>array(-25,0,1140,729),42597=>array(2,0,941,547),42598=>array(21,0,1304,729),42599=>array(28,0,1023,547),42600=>array(36,-14,814,742),42601=>array(36,-14,651,560),42602=>array(50,-14,987,742),42603=>array(43,-14,825,560),42604=>array(50,-14,1356,742),42605=>array(43,-14,1063,560),42606=>array(28,-208,933,743),42634=>array(48,-200,863,729),42635=>array(34,-216,672,547),42636=>array(48,0,748,729),42637=>array(34,0,626,547),42644=>array(106,0,793,729),42645=>array(10,0,625,760),42760=>array(146,0,471,693),42761=>array(117,0,471,693),42762=>array(87,0,471,693),42763=>array(58,0,471,693),42764=>array(29,0,471,693),42765=>array(29,0,471,693),42766=>array(29,0,442,693),42767=>array(29,0,413,693),42768=>array(29,0,383,693),42769=>array(29,0,354,693),42770=>array(29,0,471,693),42771=>array(29,0,442,693),42772=>array(29,0,413,693),42773=>array(29,0,383,693),42774=>array(29,0,354,693),42779=>array(180,326,464,736),42780=>array(142,324,426,734),42781=>array(152,326,342,734),42782=>array(152,326,342,734),42783=>array(88,0,278,408),42786=>array(30,0,432,729),42787=>array(38,0,369,547),42788=>array(55,224,530,742),42789=>array(55,42,530,560),42790=>array(41,-200,835,729),42791=>array(31,-216,646,760),42792=>array(69,-216,984,729),42793=>array(48,-215,810,702),42794=>array(37,-14,652,742),42795=>array(-2,-202,517,560),42800=>array(39,0,526,547),42801=>array(10,-14,560,560),42802=>array(-66,0,1273,729),42803=>array(22,-14,981,560),42804=>array(-65,-14,1249,742),42805=>array(17,-14,1029,560),42806=>array(-65,-14,1224,729),42807=>array(17,-14,1021,560),42808=>array(-66,0,1145,729),42809=>array(22,-14,960,560),42810=>array(-66,0,1145,729),42811=>array(22,-14,960,560),42812=>array(-45,-216,1122,729),42813=>array(42,-216,979,560),42814=>array(-13,-14,670,742),42815=>array(-7,-14,537,560),42816=>array(21,0,837,729),42817=>array(31,0,716,760),42822=>array(81,0,779,729),42823=>array(68,0,472,760),42824=>array(65,0,612,729),42825=>array(81,0,520,760),42826=>array(4,-14,915,742),42827=>array(-4,-14,821,560),42830=>array(50,-14,1356,742),42831=>array(43,-14,1063,560),42832=>array(-42,0,723,729),42833=>array(-81,-208,679,560),42834=>array(-1,0,938,729),42835=>array(0,-208,900,560),42838=>array(40,-188,811,742),42839=>array(34,-208,682,559),42852=>array(21,0,698,729),42853=>array(-11,-208,678,760),42854=>array(-50,0,698,729),42855=>array(-82,-208,678,760),42880=>array(71,0,616,729),42881=>array(11,-208,332,547),42882=>array(-8,-208,776,742),42883=>array(-10,-208,654,560),42889=>array(41,0,323,547),42890=>array(63,141,333,405),42891=>array(142,245,387,729),42892=>array(69,458,237,729),42893=>array(100,0,787,729),42894=>array(93,-216,613,760),42896=>array(21,-157,824,729),42897=>array(31,-138,695,560),42912=>array(-17,-14,837,742),42913=>array(-19,-216,735,559),42914=>array(-16,0,837,729),42915=>array(-18,0,716,760),42916=>array(-17,0,854,729),42917=>array(-19,0,731,560),42918=>array(-15,0,785,729),42919=>array(-15,0,545,560),42920=>array(-14,-14,734,742),42921=>array(-17,-14,612,560),42922=>array(-37,0,865,729),43002=>array(31,0,1025,547),43003=>array(92,0,662,729),43004=>array(65,0,712,729),43005=>array(21,0,974,729),43006=>array(1,0,370,928),43007=>array(-40,0,1365,729),61184=>array(141,602,384,693),61185=>array(83,451,406,693),61186=>array(29,301,430,693),61187=>array(-12,150,440,693),61188=>array(-47,0,446,693),61189=>array(100,451,376,693),61190=>array(112,451,355,543),61191=>array(54,301,376,543),61192=>array(0,150,401,543),61193=>array(-41,0,411,543),61194=>array(82,301,372,693),61195=>array(71,301,347,543),61196=>array(83,301,326,393),61197=>array(25,150,347,393),61198=>array(-29,0,372,393),61199=>array(75,150,353,693),61200=>array(53,149,342,542),61201=>array(42,150,318,393),61202=>array(53,150,296,242),61203=>array(-4,0,318,242),61204=>array(73,0,329,693),61205=>array(46,0,323,543),61206=>array(23,0,313,393),61207=>array(12,0,289,242),61208=>array(24,0,268,92),61209=>array(29,0,255,693),62464=>array(84,-14,614,819),62465=>array(90,-15,610,823),62466=>array(86,-14,652,828),62467=>array(124,0,954,828),62468=>array(80,-15,679,828),62469=>array(81,-15,657,828),62470=>array(129,-15,677,828),62471=>array(92,-14,949,828),62472=>array(98,0,644,828),62473=>array(80,-14,684,820),62474=>array(139,-6,1218,828),62475=>array(81,-14,674,828),62476=>array(88,-15,675,820),62477=>array(107,0,938,828),62478=>array(78,-15,654,819),62479=>array(87,-15,722,840),62480=>array(99,0,938,828),62481=>array(99,-14,618,819),62482=>array(97,-14,785,828),62483=>array(80,-14,680,828),62484=>array(136,-14,947,828),62485=>array(79,-14,717,819),62486=>array(113,0,963,828),62487=>array(74,-14,717,820),62488=>array(72,-14,672,828),62489=>array(40,0,626,828),62490=>array(100,-15,715,820),62491=>array(86,-14,717,819),62492=>array(90,-14,729,828),62493=>array(79,-14,719,820),62494=>array(94,-14,619,819),62495=>array(29,-14,623,828),62496=>array(81,-15,658,828),62497=>array(88,-15,677,828),62498=>array(14,-73,658,828),62499=>array(77,-15,719,830),62500=>array(78,-15,726,828),62501=>array(76,-14,732,828),62502=>array(126,-14,1016,828),62504=>array(40,-228,982,816),62505=>array(48,-223,821,843),62506=>array(81,-14,565,761),62507=>array(81,-14,567,773),62508=>array(81,-14,586,866),62509=>array(81,-14,623,812),62510=>array(81,-14,604,877),62511=>array(81,-14,577,803),62512=>array(31,-232,574,761),62513=>array(31,-232,631,793),62514=>array(31,-232,649,891),62515=>array(31,-232,601,803),62516=>array(80,0,589,761),62517=>array(80,0,637,793),62518=>array(80,0,601,803),62519=>array(97,-0,813,761),62520=>array(97,-0,813,773),62521=>array(97,-0,813,884),62522=>array(97,-0,813,793),62523=>array(97,-0,813,803),62524=>array(76,-232,621,761),62525=>array(76,-232,621,773),62526=>array(76,-232,630,894),62527=>array(76,-232,636,793),62528=>array(76,-232,621,803),62529=>array(76,-232,621,844),62917=>array(16,-14,648,760),64256=>array(50,0,916,760),64257=>array(50,0,798,760),64258=>array(50,0,798,760),64259=>array(50,0,1128,760),64260=>array(50,0,1129,760),64261=>array(45,0,836,760),64262=>array(8,-14,1047,742),64275=>array(47,-14,1334,760),64276=>array(47,-14,1335,760),64277=>array(65,-208,1311,760),64278=>array(65,-208,1353,760),64279=>array(65,-208,1682,760),64285=>array(98,38,334,547),64286=>array(194,635,524,780),64287=>array(98,36,655,547),64288=>array(38,0,697,547),64289=>array(120,0,926,547),64290=>array(126,0,838,547),64291=>array(100,0,840,547),64292=>array(43,0,791,547),64293=>array(126,0,837,739),64294=>array(91,0,842,547),64295=>array(126,0,794,547),64296=>array(48,-4,798,547),64297=>array(155,256,804,627),64298=>array(89,0,857,710),64299=>array(89,0,856,723),64300=>array(89,0,856,710),64301=>array(89,0,856,710),64302=>array(104,-171,730,547),64303=>array(104,-217,730,547),64304=>array(104,-171,730,547),64305=>array(43,0,590,547),64306=>array(44,-9,428,547),64307=>array(126,0,651,547),64308=>array(100,0,661,547),64309=>array(73,0,452,547),64310=>array(73,0,548,547),64312=>array(142,-13,676,553),64313=>array(101,164,476,547),64314=>array(126,-240,549,547),64315=>array(43,0,570,547),64316=>array(126,0,633,711),64318=>array(84,0,690,554),64320=>array(43,0,430,547),64321=>array(144,-13,678,547),64323=>array(158,-240,642,547),64324=>array(91,0,656,547),64326=>array(54,0,670,547),64327=>array(51,-240,767,546),64328=>array(126,0,575,547),64329=>array(89,0,856,547),64330=>array(11,-4,650,547),64331=>array(91,0,359,710),64332=>array(43,0,590,710),64333=>array(43,0,570,710),64334=>array(91,0,656,710),64335=>array(47,0,732,729),65056=>array(-276,735,171,880),65057=>array(157,735,564,880),65058=>array(-215,756,169,894),65059=>array(152,756,536,894),65533=>array(100,-139,1164,926),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>348,33=>456,34=>521,35=>696,36=>696,37=>1002,38=>872,39=>306,40=>457,41=>457,42=>523,43=>838,44=>380,45=>415,46=>380,47=>365,48=>696,49=>696,50=>696,51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>400,59=>400,60=>838,61=>838,62=>838,63=>580,64=>1000,65=>774,66=>762,67=>734,68=>830,69=>683,70=>683,71=>821,72=>837,73=>372,74=>372,75=>775,76=>637,77=>995,78=>837,79=>850,80=>733,81=>850,82=>770,83=>720,84=>682,85=>812,86=>774,87=>1103,88=>771,89=>724,90=>725,91=>457,92=>365,93=>457,94=>838,95=>500,96=>500,97=>675,98=>716,99=>593,100=>716,101=>678,102=>435,103=>716,104=>712,105=>343,106=>343,107=>665,108=>343,109=>1042,110=>712,111=>687,112=>716,113=>716,114=>493,115=>595,116=>478,117=>712,118=>652,119=>924,120=>645,121=>652,122=>582,123=>712,124=>365,125=>712,126=>838,160=>348,161=>456,162=>696,163=>696,164=>636,165=>696,166=>365,167=>500,168=>500,169=>1000,170=>564,171=>650,172=>838,173=>415,174=>1000,175=>500,176=>500,177=>838,178=>438,179=>438,180=>500,181=>736,182=>636,183=>380,184=>500,185=>438,186=>564,187=>650,188=>1035,189=>1035,190=>1035,191=>580,192=>774,193=>774,194=>774,195=>774,196=>774,197=>774,198=>1085,199=>734,200=>683,201=>683,202=>683,203=>683,204=>372,205=>372,206=>372,207=>372,208=>845,209=>837,210=>850,211=>850,212=>850,213=>850,214=>850,215=>838,216=>850,217=>812,218=>812,219=>812,220=>812,221=>724,222=>742,223=>719,224=>675,225=>675,226=>675,227=>675,228=>675,229=>675,230=>1048,231=>593,232=>678,233=>678,234=>678,235=>678,236=>343,237=>343,238=>343,239=>343,240=>687,241=>712,242=>687,243=>687,244=>687,245=>687,246=>687,247=>838,248=>687,249=>712,250=>712,251=>712,252=>712,253=>652,254=>716,255=>652,256=>774,257=>675,258=>774,259=>675,260=>774,261=>675,262=>734,263=>593,264=>734,265=>593,266=>734,267=>593,268=>734,269=>593,270=>830,271=>716,272=>845,273=>716,274=>683,275=>678,276=>683,277=>678,278=>683,279=>678,280=>683,281=>678,282=>683,283=>678,284=>821,285=>716,286=>821,287=>716,288=>821,289=>716,290=>821,291=>716,292=>837,293=>712,294=>974,295=>790,296=>372,297=>343,298=>372,299=>343,300=>372,301=>343,302=>372,303=>343,304=>372,305=>343,306=>744,307=>686,308=>372,309=>343,310=>775,311=>665,312=>665,313=>637,314=>343,315=>637,316=>343,317=>637,318=>343,319=>637,320=>343,321=>660,322=>375,323=>837,324=>712,325=>837,326=>712,327=>837,328=>712,329=>983,330=>837,331=>712,332=>850,333=>687,334=>850,335=>687,336=>850,337=>687,338=>1167,339=>1094,340=>770,341=>493,342=>770,343=>493,344=>770,345=>493,346=>720,347=>595,348=>720,349=>595,350=>720,351=>595,352=>720,353=>595,354=>682,355=>478,356=>682,357=>478,358=>682,359=>478,360=>812,361=>712,362=>812,363=>712,364=>812,365=>712,366=>812,367=>712,368=>812,369=>712,370=>812,371=>712,372=>1103,373=>924,374=>724,375=>652,376=>724,377=>725,378=>582,379=>725,380=>582,381=>725,382=>582,383=>435,384=>716,385=>811,386=>762,387=>716,388=>762,389=>716,390=>734,391=>734,392=>593,393=>845,394=>879,395=>762,396=>716,397=>687,398=>683,399=>850,400=>696,401=>683,402=>435,403=>821,404=>793,405=>1045,406=>436,407=>389,408=>775,409=>665,410=>360,411=>592,412=>1042,413=>837,414=>712,415=>850,416=>850,417=>687,418=>1114,419=>962,420=>782,421=>716,422=>770,423=>720,424=>595,425=>683,426=>552,427=>478,428=>707,429=>478,430=>682,431=>812,432=>712,433=>769,434=>813,435=>797,436=>778,437=>725,438=>582,439=>772,440=>772,441=>641,442=>582,443=>696,444=>772,445=>641,446=>573,447=>716,448=>372,449=>659,450=>544,451=>372,452=>1548,453=>1450,454=>1307,455=>977,456=>979,457=>670,458=>1193,459=>1213,460=>1063,461=>774,462=>675,463=>372,464=>343,465=>850,466=>687,467=>812,468=>712,469=>812,470=>712,471=>812,472=>712,473=>812,474=>712,475=>812,476=>712,477=>678,478=>774,479=>675,480=>774,481=>675,482=>1085,483=>1048,484=>821,485=>716,486=>821,487=>716,488=>775,489=>665,490=>850,491=>687,492=>850,493=>687,494=>772,495=>582,496=>343,497=>1548,498=>1450,499=>1307,500=>821,501=>716,502=>1289,503=>787,504=>837,505=>712,506=>774,507=>675,508=>1085,509=>1048,510=>850,511=>687,512=>774,513=>675,514=>774,515=>675,516=>683,517=>678,518=>683,519=>678,520=>372,521=>343,522=>372,523=>343,524=>850,525=>687,526=>850,527=>687,528=>770,529=>493,530=>770,531=>493,532=>812,533=>712,534=>812,535=>712,536=>720,537=>595,538=>682,539=>478,540=>690,541=>607,542=>837,543=>712,544=>837,545=>865,546=>809,547=>659,548=>725,549=>582,550=>774,551=>675,552=>683,553=>678,554=>850,555=>687,556=>850,557=>687,558=>850,559=>687,560=>850,561=>687,562=>724,563=>652,564=>492,565=>867,566=>512,567=>343,568=>1088,569=>1088,570=>774,571=>734,572=>593,573=>637,574=>682,575=>595,576=>582,577=>782,578=>614,579=>762,580=>812,581=>774,582=>683,583=>678,584=>372,585=>343,586=>860,587=>791,588=>770,589=>493,590=>724,591=>652,592=>675,593=>716,594=>716,595=>716,596=>593,597=>593,598=>791,599=>792,600=>678,601=>678,602=>876,603=>557,604=>545,605=>774,606=>731,607=>343,608=>792,609=>716,610=>627,611=>735,612=>635,613=>712,614=>712,615=>712,616=>545,617=>440,618=>545,619=>559,620=>693,621=>343,622=>841,623=>1042,624=>1042,625=>1042,626=>712,627=>793,628=>642,629=>687,630=>909,631=>682,632=>796,633=>538,634=>538,635=>650,636=>493,637=>493,638=>596,639=>596,640=>642,641=>642,642=>595,643=>415,644=>435,645=>605,646=>552,647=>478,648=>478,649=>920,650=>769,651=>670,652=>652,653=>924,654=>652,655=>724,656=>694,657=>684,658=>641,659=>641,660=>573,661=>573,662=>573,663=>573,664=>850,665=>633,666=>731,667=>685,668=>691,669=>343,670=>732,671=>539,672=>792,673=>573,674=>573,675=>1156,676=>1214,677=>1155,678=>975,679=>769,680=>929,681=>1026,682=>862,683=>780,684=>591,685=>415,686=>677,687=>789,688=>456,689=>456,690=>219,691=>315,692=>315,693=>315,694=>411,695=>591,696=>417,697=>302,698=>521,699=>380,700=>380,701=>380,702=>366,703=>366,704=>326,705=>326,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>306,713=>500,714=>500,715=>500,716=>306,717=>500,718=>500,719=>500,720=>337,721=>337,722=>366,723=>366,724=>500,725=>500,726=>416,727=>328,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>351,735=>500,736=>412,737=>219,738=>381,739=>413,740=>326,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500,749=>500,750=>644,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>698,881=>565,882=>1022,883=>836,884=>302,885=>302,886=>837,887=>701,890=>500,891=>593,892=>550,893=>549,894=>400,900=>441,901=>500,902=>797,903=>380,904=>846,905=>1009,906=>563,908=>891,910=>980,911=>894,912=>390,913=>774,914=>762,915=>637,916=>774,917=>683,918=>725,919=>837,920=>850,921=>372,922=>775,923=>774,924=>995,925=>837,926=>632,927=>850,928=>837,929=>733,931=>683,932=>682,933=>724,934=>850,935=>771,936=>850,937=>850,938=>372,939=>724,940=>687,941=>557,942=>712,943=>390,944=>675,945=>687,946=>716,947=>681,948=>687,949=>557,950=>591,951=>712,952=>687,953=>390,954=>710,955=>633,956=>736,957=>681,958=>591,959=>687,960=>791,961=>716,962=>593,963=>779,964=>638,965=>675,966=>782,967=>645,968=>794,969=>869,970=>390,971=>675,972=>687,973=>675,974=>869,975=>775,976=>651,977=>661,978=>746,979=>981,980=>746,981=>796,982=>869,983=>744,984=>850,985=>687,986=>734,987=>593,988=>683,989=>494,990=>702,991=>660,992=>919,993=>627,994=>1093,995=>837,996=>832,997=>716,998=>928,999=>744,1000=>733,1001=>650,1002=>789,1003=>671,1004=>752,1005=>716,1006=>682,1007=>590,1008=>744,1009=>716,1010=>593,1011=>343,1012=>850,1013=>645,1014=>645,1015=>742,1016=>716,1017=>734,1018=>995,1019=>732,1020=>716,1021=>734,1022=>734,1023=>698,1024=>683,1025=>683,1026=>878,1027=>637,1028=>734,1029=>720,1030=>372,1031=>372,1032=>372,1033=>1154,1034=>1130,1035=>878,1036=>817,1037=>837,1038=>771,1039=>837,1040=>774,1041=>762,1042=>762,1043=>637,1044=>891,1045=>683,1046=>1224,1047=>710,1048=>837,1049=>837,1050=>817,1051=>831,1052=>995,1053=>837,1054=>850,1055=>837,1056=>733,1057=>734,1058=>682,1059=>771,1060=>992,1061=>771,1062=>928,1063=>808,1064=>1235,1065=>1326,1066=>939,1067=>1036,1068=>762,1069=>734,1070=>1174,1071=>770,1072=>675,1073=>698,1074=>633,1075=>522,1076=>808,1077=>678,1078=>995,1079=>581,1080=>701,1081=>701,1082=>679,1083=>732,1084=>817,1085=>691,1086=>687,1087=>691,1088=>716,1089=>593,1090=>580,1091=>652,1092=>992,1093=>645,1094=>741,1095=>687,1096=>1062,1097=>1105,1098=>751,1099=>904,1100=>632,1101=>593,1102=>972,1103=>642,1104=>678,1105=>678,1106=>714,1107=>522,1108=>593,1109=>595,1110=>343,1111=>343,1112=>343,1113=>991,1114=>956,1115=>734,1116=>679,1117=>701,1118=>652,1119=>691,1120=>1093,1121=>869,1122=>840,1123=>736,1124=>1012,1125=>839,1126=>992,1127=>832,1128=>1358,1129=>1121,1130=>850,1131=>687,1132=>1236,1133=>1007,1134=>696,1135=>557,1136=>1075,1137=>1061,1138=>850,1139=>687,1140=>850,1141=>695,1142=>850,1143=>695,1144=>1148,1145=>1043,1146=>1074,1147=>863,1148=>1405,1149=>1173,1150=>1093,1151=>869,1152=>734,1153=>593,1154=>652,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>938,1163=>806,1164=>762,1165=>611,1166=>736,1167=>718,1168=>637,1169=>522,1170=>666,1171=>543,1172=>789,1173=>522,1174=>1224,1175=>995,1176=>710,1177=>581,1178=>775,1179=>679,1180=>817,1181=>679,1182=>817,1183=>679,1184=>1015,1185=>826,1186=>837,1187=>691,1188=>1103,1189=>871,1190=>1254,1191=>979,1192=>946,1193=>859,1194=>734,1195=>593,1196=>682,1197=>580,1198=>724,1199=>652,1200=>724,1201=>652,1202=>771,1203=>645,1204=>1104,1205=>1001,1206=>808,1207=>687,1208=>808,1209=>687,1210=>808,1211=>712,1212=>1026,1213=>810,1214=>1026,1215=>810,1216=>372,1217=>1224,1218=>995,1219=>778,1220=>629,1221=>933,1222=>804,1223=>837,1224=>691,1225=>938,1226=>806,1227=>808,1228=>687,1229=>1096,1230=>932,1231=>343,1232=>774,1233=>675,1234=>774,1235=>675,1236=>1085,1237=>1048,1238=>683,1239=>678,1240=>850,1241=>678,1242=>850,1243=>678,1244=>1224,1245=>995,1246=>710,1247=>581,1248=>772,1249=>641,1250=>837,1251=>701,1252=>837,1253=>701,1254=>850,1255=>687,1256=>850,1257=>687,1258=>850,1259=>687,1260=>734,1261=>593,1262=>771,1263=>652,1264=>771,1265=>652,1266=>771,1267=>652,1268=>808,1269=>687,1270=>637,1271=>522,1272=>1036,1273=>904,1274=>666,1275=>543,1276=>771,1277=>645,1278=>771,1279=>645,1280=>762,1281=>608,1282=>1159,1283=>893,1284=>1119,1285=>920,1286=>828,1287=>693,1288=>1242,1289=>1017,1290=>1289,1291=>1013,1292=>839,1293=>638,1294=>938,1295=>803,1296=>696,1297=>557,1298=>831,1299=>732,1300=>1286,1301=>1070,1302=>1065,1303=>982,1304=>1082,1305=>960,1306=>850,1307=>716,1308=>1103,1309=>924,1310=>817,1311=>679,1312=>1248,1313=>1022,1314=>1254,1315=>979,1316=>957,1317=>807,1329=>904,1330=>810,1331=>809,1332=>813,1333=>810,1334=>815,1335=>724,1336=>800,1337=>1004,1338=>809,1339=>740,1340=>620,1341=>1068,1342=>875,1343=>792,1344=>723,1345=>811,1346=>794,1347=>782,1348=>867,1349=>766,1350=>794,1351=>787,1352=>812,1353=>752,1354=>963,1355=>790,1356=>867,1357=>812,1358=>794,1359=>771,1360=>740,1361=>775,1362=>640,1363=>926,1364=>775,1365=>848,1366=>951,1369=>366,1370=>380,1371=>342,1372=>415,1373=>348,1374=>513,1375=>521,1377=>1043,1378=>713,1379=>782,1380=>786,1381=>713,1382=>715,1383=>628,1384=>713,1385=>840,1386=>782,1387=>714,1388=>344,1389=>1094,1390=>708,1391=>714,1392=>714,1393=>670,1394=>714,1395=>713,1396=>714,1397=>343,1398=>714,1399=>541,1400=>714,1401=>407,1402=>1043,1403=>636,1404=>740,1405=>714,1406=>714,1407=>1038,1408=>714,1409=>714,1410=>532,1411=>1038,1412=>720,1413=>689,1414=>904,1415=>902,1417=>400,1418=>415,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>415,1471=>0,1472=>372,1473=>0,1474=>0,1475=>372,1478=>497,1479=>0,1488=>728,1489=>610,1490=>447,1491=>588,1492=>687,1493=>343,1494=>400,1495=>687,1496=>679,1497=>294,1498=>578,1499=>566,1500=>605,1501=>696,1502=>724,1503=>343,1504=>453,1505=>680,1506=>666,1507=>675,1508=>658,1509=>661,1510=>653,1511=>736,1512=>602,1513=>749,1514=>683,1520=>664,1521=>664,1522=>663,1523=>444,1524=>710,3647=>696,3713=>815,3714=>748,3716=>749,3719=>569,3720=>742,3722=>744,3725=>761,3732=>706,3733=>704,3734=>747,3735=>819,3737=>730,3738=>727,3739=>727,3740=>922,3741=>827,3742=>866,3743=>866,3745=>836,3746=>761,3747=>770,3749=>769,3751=>713,3754=>827,3755=>1031,3757=>724,3758=>784,3759=>934,3760=>688,3761=>0,3762=>610,3763=>610,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>670,3776=>516,3777=>860,3778=>516,3779=>650,3780=>632,3782=>759,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>771,3793=>771,3794=>693,3795=>836,3796=>729,3797=>729,3798=>849,3799=>790,3800=>759,3801=>910,3804=>1363,3805=>1363,4256=>874,4257=>733,4258=>679,4259=>834,4260=>615,4261=>768,4262=>753,4263=>914,4264=>453,4265=>620,4266=>843,4267=>882,4268=>625,4269=>854,4270=>781,4271=>629,4272=>912,4273=>621,4274=>620,4275=>854,4276=>866,4277=>724,4278=>630,4279=>621,4280=>625,4281=>620,4282=>818,4283=>874,4284=>615,4285=>623,4286=>625,4287=>725,4288=>844,4289=>596,4290=>688,4291=>596,4292=>594,4293=>738,4304=>554,4305=>563,4306=>622,4307=>834,4308=>550,4309=>559,4310=>546,4311=>828,4312=>563,4313=>556,4314=>1074,4315=>563,4316=>563,4317=>814,4318=>554,4319=>559,4320=>823,4321=>563,4322=>700,4323=>582,4324=>847,4325=>555,4326=>814,4327=>559,4328=>543,4329=>563,4330=>622,4331=>563,4332=>543,4333=>566,4334=>563,4335=>530,4336=>554,4337=>554,4338=>553,4339=>554,4340=>553,4341=>583,4342=>853,4343=>604,4344=>559,4345=>632,4346=>554,4347=>448,4348=>324,5121=>774,5122=>774,5123=>774,5124=>774,5125=>905,5126=>905,5127=>905,5129=>905,5130=>905,5131=>905,5132=>1018,5133=>1009,5134=>1018,5135=>1009,5136=>1018,5137=>1009,5138=>1149,5139=>1140,5140=>1149,5141=>1140,5142=>905,5143=>1149,5144=>1142,5145=>1149,5146=>1142,5147=>905,5149=>310,5150=>529,5151=>425,5152=>425,5153=>395,5154=>395,5155=>395,5156=>395,5157=>564,5158=>470,5159=>310,5160=>395,5161=>395,5162=>395,5163=>1213,5164=>986,5165=>1216,5166=>1297,5167=>774,5168=>774,5169=>774,5170=>774,5171=>886,5172=>886,5173=>886,5175=>886,5176=>886,5177=>886,5178=>1018,5179=>1009,5180=>1018,5181=>1009,5182=>1018,5183=>1009,5184=>1149,5185=>1140,5186=>1149,5187=>1140,5188=>1149,5189=>1142,5190=>1149,5191=>1142,5192=>886,5193=>576,5194=>229,5196=>812,5197=>812,5198=>812,5199=>812,5200=>815,5201=>815,5202=>815,5204=>815,5205=>815,5206=>815,5207=>1056,5208=>1048,5209=>1056,5210=>1048,5211=>1056,5212=>1048,5213=>1060,5214=>1054,5215=>1060,5216=>1054,5217=>1060,5218=>1052,5219=>1060,5220=>1052,5221=>1060,5222=>483,5223=>1005,5224=>1005,5225=>1023,5226=>1017,5227=>743,5228=>743,5229=>743,5230=>743,5231=>743,5232=>743,5233=>743,5234=>743,5235=>743,5236=>1029,5237=>975,5238=>980,5239=>975,5240=>980,5241=>975,5242=>1029,5243=>975,5244=>1029,5245=>975,5246=>980,5247=>975,5248=>980,5249=>975,5250=>980,5251=>501,5252=>501,5253=>938,5254=>938,5255=>938,5256=>938,5257=>743,5258=>743,5259=>743,5260=>743,5261=>743,5262=>743,5263=>743,5264=>743,5265=>743,5266=>1029,5267=>975,5268=>1029,5269=>975,5270=>1029,5271=>975,5272=>1029,5273=>975,5274=>1029,5275=>975,5276=>1029,5277=>975,5278=>1029,5279=>975,5280=>1029,5281=>501,5282=>501,5283=>626,5284=>626,5285=>626,5286=>626,5287=>626,5288=>626,5289=>626,5290=>626,5291=>626,5292=>881,5293=>854,5294=>863,5295=>874,5296=>863,5297=>874,5298=>881,5299=>874,5300=>881,5301=>874,5302=>863,5303=>874,5304=>863,5305=>874,5306=>863,5307=>436,5308=>548,5309=>436,5312=>988,5313=>988,5314=>988,5315=>988,5316=>931,5317=>931,5318=>931,5319=>931,5320=>931,5321=>1238,5322=>1247,5323=>1200,5324=>1228,5325=>1200,5326=>1228,5327=>931,5328=>660,5329=>497,5330=>660,5331=>988,5332=>988,5333=>988,5334=>988,5335=>931,5336=>931,5337=>931,5338=>931,5339=>931,5340=>1231,5341=>1247,5342=>1283,5343=>1228,5344=>1283,5345=>1228,5346=>1228,5347=>1214,5348=>1228,5349=>1214,5350=>1283,5351=>1228,5352=>1283,5353=>1228,5354=>660,5356=>886,5357=>730,5358=>730,5359=>730,5360=>730,5361=>730,5362=>730,5363=>730,5364=>730,5365=>730,5366=>998,5367=>958,5368=>967,5369=>989,5370=>967,5371=>989,5372=>998,5373=>958,5374=>998,5375=>958,5376=>967,5377=>989,5378=>967,5379=>989,5380=>967,5381=>493,5382=>460,5383=>493,5392=>923,5393=>923,5394=>923,5395=>1136,5396=>1136,5397=>1136,5398=>1136,5399=>1209,5400=>1202,5401=>1209,5402=>1202,5403=>1209,5404=>1202,5405=>1431,5406=>1420,5407=>1431,5408=>1420,5409=>1431,5410=>1420,5411=>1431,5412=>1420,5413=>746,5414=>776,5415=>776,5416=>776,5417=>776,5418=>776,5419=>776,5420=>776,5421=>776,5422=>776,5423=>1003,5424=>1003,5425=>1013,5426=>996,5427=>1013,5428=>996,5429=>1003,5430=>1003,5431=>1003,5432=>1003,5433=>1013,5434=>996,5435=>1013,5436=>996,5437=>1013,5438=>495,5440=>395,5441=>510,5442=>1033,5443=>1033,5444=>976,5445=>976,5446=>976,5447=>976,5448=>733,5449=>733,5450=>733,5451=>733,5452=>733,5453=>733,5454=>1003,5455=>959,5456=>495,5458=>886,5459=>774,5460=>774,5461=>774,5462=>774,5463=>928,5464=>928,5465=>928,5466=>928,5467=>1172,5468=>1142,5469=>602,5470=>812,5471=>812,5472=>812,5473=>812,5474=>812,5475=>812,5476=>815,5477=>815,5478=>815,5479=>815,5480=>1060,5481=>1052,5482=>548,5492=>977,5493=>977,5494=>977,5495=>977,5496=>977,5497=>977,5498=>977,5499=>618,5500=>837,5501=>510,5502=>1238,5503=>1238,5504=>1238,5505=>1238,5506=>1238,5507=>1238,5508=>1238,5509=>989,5514=>977,5515=>977,5516=>977,5517=>977,5518=>1591,5519=>1591,5520=>1591,5521=>1295,5522=>1295,5523=>1591,5524=>1591,5525=>848,5526=>1273,5536=>988,5537=>988,5538=>931,5539=>931,5540=>931,5541=>931,5542=>660,5543=>776,5544=>776,5545=>776,5546=>776,5547=>776,5548=>776,5549=>776,5550=>495,5551=>743,5598=>830,5601=>830,5702=>496,5703=>496,5742=>413,5743=>1238,5744=>1591,5745=>2016,5746=>2016,5747=>1720,5748=>1678,5749=>2016,5750=>2016,7424=>652,7425=>833,7426=>1048,7427=>608,7428=>593,7429=>676,7430=>676,7431=>559,7432=>557,7433=>343,7434=>494,7435=>665,7436=>539,7437=>817,7438=>701,7439=>687,7440=>593,7441=>660,7442=>660,7443=>660,7444=>1094,7446=>687,7447=>687,7448=>556,7449=>642,7450=>642,7451=>580,7452=>634,7453=>737,7454=>948,7455=>695,7456=>652,7457=>924,7458=>582,7459=>646,7462=>539,7463=>652,7464=>691,7465=>556,7466=>781,7467=>732,7468=>487,7469=>683,7470=>480,7472=>523,7473=>430,7474=>430,7475=>517,7476=>527,7477=>234,7478=>234,7479=>488,7480=>401,7481=>626,7482=>527,7483=>527,7484=>535,7485=>509,7486=>461,7487=>485,7488=>430,7489=>511,7490=>695,7491=>458,7492=>458,7493=>479,7494=>712,7495=>479,7496=>479,7497=>479,7498=>479,7499=>386,7500=>386,7501=>479,7502=>219,7503=>487,7504=>664,7505=>456,7506=>488,7507=>414,7508=>488,7509=>488,7510=>479,7511=>388,7512=>456,7513=>462,7514=>664,7515=>501,7517=>451,7518=>429,7519=>433,7520=>493,7521=>406,7522=>219,7523=>315,7524=>456,7525=>501,7526=>451,7527=>429,7528=>451,7529=>493,7530=>406,7543=>716,7544=>527,7547=>545,7549=>747,7557=>514,7579=>479,7580=>414,7581=>414,7582=>488,7583=>386,7584=>377,7585=>348,7586=>479,7587=>456,7588=>347,7589=>281,7590=>347,7591=>347,7592=>431,7593=>326,7594=>330,7595=>370,7596=>664,7597=>664,7598=>562,7599=>562,7600=>448,7601=>488,7602=>542,7603=>422,7604=>396,7605=>388,7606=>583,7607=>494,7608=>399,7609=>451,7610=>501,7611=>417,7612=>523,7613=>470,7614=>455,7615=>425,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>774,7681=>675,7682=>762,7683=>716,7684=>762,7685=>716,7686=>762,7687=>716,7688=>734,7689=>593,7690=>830,7691=>716,7692=>830,7693=>716,7694=>830,7695=>716,7696=>830,7697=>716,7698=>830,7699=>716,7700=>683,7701=>678,7702=>683,7703=>678,7704=>683,7705=>678,7706=>683,7707=>678,7708=>683,7709=>678,7710=>683,7711=>435,7712=>821,7713=>716,7714=>837,7715=>712,7716=>837,7717=>712,7718=>837,7719=>712,7720=>837,7721=>712,7722=>837,7723=>712,7724=>372,7725=>343,7726=>372,7727=>343,7728=>775,7729=>665,7730=>775,7731=>665,7732=>775,7733=>665,7734=>637,7735=>343,7736=>637,7737=>343,7738=>637,7739=>343,7740=>637,7741=>343,7742=>995,7743=>1042,7744=>995,7745=>1042,7746=>995,7747=>1042,7748=>837,7749=>712,7750=>837,7751=>712,7752=>837,7753=>712,7754=>837,7755=>712,7756=>850,7757=>687,7758=>850,7759=>687,7760=>850,7761=>687,7762=>850,7763=>687,7764=>733,7765=>716,7766=>733,7767=>716,7768=>770,7769=>493,7770=>770,7771=>493,7772=>770,7773=>493,7774=>770,7775=>493,7776=>720,7777=>595,7778=>720,7779=>595,7780=>720,7781=>595,7782=>720,7783=>595,7784=>720,7785=>595,7786=>682,7787=>478,7788=>682,7789=>478,7790=>682,7791=>478,7792=>682,7793=>478,7794=>812,7795=>712,7796=>812,7797=>712,7798=>812,7799=>712,7800=>812,7801=>712,7802=>812,7803=>712,7804=>774,7805=>652,7806=>774,7807=>652,7808=>1103,7809=>924,7810=>1103,7811=>924,7812=>1103,7813=>924,7814=>1103,7815=>924,7816=>1103,7817=>924,7818=>771,7819=>645,7820=>771,7821=>645,7822=>724,7823=>652,7824=>725,7825=>582,7826=>725,7827=>582,7828=>725,7829=>582,7830=>712,7831=>478,7832=>924,7833=>652,7834=>675,7835=>435,7836=>435,7837=>435,7838=>896,7839=>687,7840=>774,7841=>675,7842=>774,7843=>675,7844=>774,7845=>675,7846=>774,7847=>675,7848=>774,7849=>675,7850=>774,7851=>675,7852=>774,7853=>675,7854=>774,7855=>675,7856=>774,7857=>675,7858=>774,7859=>675,7860=>774,7861=>675,7862=>774,7863=>675,7864=>683,7865=>678,7866=>683,7867=>678,7868=>683,7869=>678,7870=>683,7871=>678,7872=>683,7873=>678,7874=>683,7875=>678,7876=>683,7877=>678,7878=>683,7879=>678,7880=>372,7881=>343,7882=>372,7883=>343,7884=>850,7885=>687,7886=>850,7887=>687,7888=>850,7889=>687,7890=>850,7891=>687,7892=>850,7893=>687,7894=>850,7895=>687,7896=>850,7897=>687,7898=>850,7899=>687,7900=>850,7901=>687,7902=>850,7903=>687,7904=>850,7905=>687,7906=>850,7907=>687,7908=>812,7909=>712,7910=>812,7911=>712,7912=>812,7913=>712,7914=>812,7915=>712,7916=>812,7917=>712,7918=>812,7919=>712,7920=>812,7921=>712,7922=>724,7923=>652,7924=>724,7925=>652,7926=>724,7927=>652,7928=>724,7929=>652,7930=>953,7931=>644,7936=>687,7937=>687,7938=>687,7939=>687,7940=>687,7941=>687,7942=>687,7943=>687,7944=>774,7945=>774,7946=>1041,7947=>1043,7948=>935,7949=>963,7950=>835,7951=>859,7952=>557,7953=>557,7954=>557,7955=>557,7956=>557,7957=>557,7960=>792,7961=>794,7962=>1100,7963=>1096,7964=>1023,7965=>1052,7968=>712,7969=>712,7970=>712,7971=>712,7972=>712,7973=>712,7974=>712,7975=>712,7976=>945,7977=>951,7978=>1250,7979=>1250,7980=>1180,7981=>1206,7982=>1054,7983=>1063,7984=>390,7985=>390,7986=>390,7987=>390,7988=>390,7989=>390,7990=>390,7991=>390,7992=>483,7993=>489,7994=>777,7995=>785,7996=>712,7997=>738,7998=>604,7999=>604,8000=>687,8001=>687,8002=>687,8003=>687,8004=>687,8005=>687,8008=>892,8009=>933,8010=>1221,8011=>1224,8012=>1053,8013=>1082,8016=>675,8017=>675,8018=>675,8019=>675,8020=>675,8021=>675,8022=>675,8023=>675,8025=>930,8027=>1184,8029=>1199,8031=>1049,8032=>869,8033=>869,8034=>869,8035=>869,8036=>869,8037=>869,8038=>869,8039=>869,8040=>909,8041=>958,8042=>1246,8043=>1251,8044=>1076,8045=>1105,8046=>1028,8047=>1076,8048=>687,8049=>687,8050=>557,8051=>557,8052=>712,8053=>712,8054=>390,8055=>390,8056=>687,8057=>687,8058=>675,8059=>675,8060=>869,8061=>869,8064=>687,8065=>687,8066=>687,8067=>687,8068=>687,8069=>687,8070=>687,8071=>687,8072=>774,8073=>774,8074=>1041,8075=>1043,8076=>935,8077=>963,8078=>835,8079=>859,8080=>712,8081=>712,8082=>712,8083=>712,8084=>712,8085=>712,8086=>712,8087=>712,8088=>945,8089=>951,8090=>1250,8091=>1250,8092=>1180,8093=>1206,8094=>1054,8095=>1063,8096=>869,8097=>869,8098=>869,8099=>869,8100=>869,8101=>869,8102=>869,8103=>869,8104=>909,8105=>958,8106=>1246,8107=>1251,8108=>1076,8109=>1105,8110=>1028,8111=>1076,8112=>687,8113=>687,8114=>687,8115=>687,8116=>687,8118=>687,8119=>687,8120=>774,8121=>774,8122=>876,8123=>797,8124=>774,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>712,8131=>712,8132=>712,8134=>712,8135=>712,8136=>929,8137=>846,8138=>1080,8139=>1009,8140=>837,8141=>500,8142=>500,8143=>500,8144=>390,8145=>390,8146=>390,8147=>390,8150=>390,8151=>390,8152=>372,8153=>372,8154=>621,8155=>563,8157=>500,8158=>500,8159=>500,8160=>675,8161=>675,8162=>675,8163=>675,8164=>716,8165=>716,8166=>675,8167=>675,8168=>724,8169=>724,8170=>1020,8171=>980,8172=>838,8173=>500,8174=>500,8175=>500,8178=>869,8179=>869,8180=>869,8182=>869,8183=>869,8184=>1065,8185=>891,8186=>1084,8187=>894,8188=>850,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>380,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>380,8217=>380,8218=>380,8219=>380,8220=>644,8221=>644,8222=>644,8223=>657,8224=>500,8225=>500,8226=>639,8227=>639,8228=>380,8229=>685,8230=>1000,8231=>348,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1454,8241=>1908,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8249=>412,8250=>412,8251=>972,8252=>627,8253=>580,8254=>500,8255=>828,8256=>828,8257=>329,8258=>1023,8259=>500,8260=>167,8261=>457,8262=>457,8263=>1030,8264=>829,8265=>829,8266=>513,8267=>687,8268=>500,8269=>500,8270=>523,8271=>400,8272=>828,8273=>523,8274=>556,8275=>838,8276=>828,8277=>838,8278=>684,8279=>813,8280=>838,8281=>838,8282=>380,8283=>872,8284=>838,8285=>380,8286=>380,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>438,8305=>219,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528,8316=>528,8317=>288,8318=>288,8319=>456,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>288,8334=>288,8336=>458,8337=>479,8338=>488,8339=>413,8340=>479,8341=>456,8342=>487,8343=>219,8344=>664,8345=>456,8346=>479,8347=>381,8348=>388,8352=>929,8353=>696,8354=>696,8355=>696,8356=>696,8357=>1042,8358=>837,8359=>1488,8360=>1205,8361=>1103,8362=>854,8363=>696,8364=>696,8365=>696,8366=>696,8367=>1392,8368=>696,8369=>696,8370=>696,8371=>696,8372=>859,8373=>696,8376=>696,8377=>696,8378=>769,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1106,8449=>1106,8450=>734,8451=>1211,8452=>896,8453=>1114,8454=>1148,8455=>696,8456=>698,8457=>952,8459=>1073,8460=>913,8461=>888,8462=>712,8463=>712,8464=>597,8465=>697,8466=>856,8467=>472,8468=>974,8469=>837,8470=>1203,8471=>1000,8472=>697,8473=>750,8474=>850,8475=>938,8476=>814,8477=>801,8478=>896,8479=>710,8480=>1020,8481=>1239,8482=>1000,8483=>834,8484=>754,8485=>622,8486=>850,8487=>769,8488=>763,8489=>303,8490=>775,8491=>774,8492=>928,8493=>818,8494=>854,8495=>636,8496=>729,8497=>808,8498=>683,8499=>1184,8500=>465,8501=>794,8502=>731,8503=>494,8504=>684,8505=>380,8506=>945,8507=>1370,8508=>790,8509=>737,8510=>654,8511=>863,8512=>840,8513=>786,8514=>576,8515=>637,8516=>760,8517=>830,8518=>716,8519=>678,8520=>343,8521=>343,8523=>872,8526=>547,8528=>1035,8529=>1035,8530=>1483,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>372,8545=>659,8546=>945,8547=>1099,8548=>774,8549=>1099,8550=>1386,8551=>1672,8552=>1121,8553=>771,8554=>1120,8555=>1407,8556=>637,8557=>734,8558=>830,8559=>995,8560=>343,8561=>607,8562=>872,8563=>984,8564=>652,8565=>962,8566=>1227,8567=>1491,8568=>969,8569=>645,8570=>969,8571=>1233,8572=>343,8573=>593,8574=>716,8575=>1042,8576=>1289,8577=>830,8578=>1289,8579=>734,8580=>593,8581=>734,8585=>1035,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>774,8705=>696,8706=>544,8707=>683,8708=>683,8709=>856,8710=>697,8711=>697,8712=>896,8713=>896,8714=>750,8715=>896,8716=>896,8717=>750,8718=>636,8719=>787,8720=>787,8721=>718,8722=>838,8723=>838,8724=>696,8725=>365,8726=>696,8727=>838,8728=>626,8729=>380,8730=>667,8731=>667,8732=>667,8733=>712,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>812,8744=>812,8745=>812,8746=>812,8747=>610,8748=>929,8749=>1295,8750=>563,8751=>977,8752=>1313,8753=>563,8754=>563,8755=>563,8756=>696,8757=>696,8758=>294,8759=>696,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1063,8789=>1063,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>841,8809=>841,8810=>1047,8811=>1047,8812=>500,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>812,8845=>812,8846=>812,8847=>838,8848=>838,8849=>838,8850=>838,8851=>796,8852=>796,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>914,8867=>914,8868=>914,8869=>914,8870=>542,8871=>542,8872=>914,8873=>914,8874=>914,8875=>914,8876=>914,8877=>914,8878=>914,8879=>914,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>542,8891=>812,8892=>812,8893=>812,8894=>838,8895=>838,8896=>843,8897=>843,8898=>843,8899=>843,8900=>494,8901=>380,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>812,8911=>812,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1158,8947=>896,8948=>750,8949=>896,8950=>896,8951=>750,8952=>896,8953=>896,8954=>1158,8955=>896,8956=>750,8957=>896,8958=>750,8959=>896,8960=>602,8961=>602,8962=>716,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>457,8969=>457,8970=>457,8971=>457,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>539,8984=>928,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>610,8993=>610,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>390,9076=>716,9077=>869,9082=>687,9085=>863,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>610,9166=>838,9167=>945,9187=>873,9189=>769,9192=>696,9250=>716,9251=>716,9312=>847,9313=>847,9314=>847,9315=>847,9316=>847,9317=>847,9318=>847,9319=>847,9320=>847,9321=>847,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>840,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>769,9697=>769,9698=>769,9699=>769,9700=>769,9701=>769,9702=>639,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>1042,9786=>1042,9787=>1042,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9954=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>847,10103=>847,10104=>847,10105=>847,10106=>847,10107=>847,10108=>847,10109=>847,10110=>847,10111=>847,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>457,10182=>457,10208=>494,10214=>487,10215=>487,10216=>457,10217=>457,10218=>721,10219=>721,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781,10502=>838,10503=>838,10506=>838,10507=>838,10560=>838,10561=>838,10627=>753,10628=>753,10702=>838,10703=>1046,10704=>1046,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1661,10765=>563,10766=>563,10767=>563,10768=>563,10769=>563,10770=>563,10771=>563,10772=>563,10773=>563,10774=>563,10775=>563,10776=>563,10777=>563,10778=>563,10779=>563,10780=>563,10799=>838,10858=>838,10859=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>637,11361=>360,11362=>637,11363=>733,11364=>770,11365=>675,11366=>478,11367=>956,11368=>712,11369=>775,11370=>665,11371=>725,11372=>582,11373=>860,11374=>995,11375=>774,11376=>860,11377=>778,11378=>1221,11379=>1056,11380=>652,11381=>698,11382=>565,11383=>782,11385=>538,11386=>687,11387=>559,11388=>219,11389=>487,11390=>720,11391=>725,11520=>663,11521=>676,11522=>661,11523=>629,11524=>661,11525=>1032,11526=>718,11527=>1032,11528=>648,11529=>667,11530=>1032,11531=>673,11532=>677,11533=>1036,11534=>680,11535=>886,11536=>1032,11537=>683,11538=>674,11539=>1035,11540=>1033,11541=>1027,11542=>676,11543=>673,11544=>667,11545=>667,11546=>660,11547=>671,11548=>1039,11549=>673,11550=>692,11551=>659,11552=>1048,11553=>660,11554=>654,11555=>670,11556=>733,11557=>1017,11800=>586,11807=>838,11810=>457,11811=>457,11812=>457,11813=>457,11822=>580,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42192=>762,42193=>733,42194=>733,42195=>830,42196=>682,42197=>682,42198=>821,42199=>775,42200=>775,42201=>530,42202=>734,42203=>734,42204=>725,42205=>683,42206=>683,42207=>995,42208=>837,42209=>637,42210=>720,42211=>770,42212=>770,42213=>774,42214=>774,42215=>837,42216=>786,42217=>530,42218=>1103,42219=>771,42220=>724,42221=>762,42222=>774,42223=>774,42224=>683,42225=>683,42226=>372,42227=>850,42228=>812,42229=>812,42230=>576,42231=>830,42232=>322,42233=>322,42234=>674,42235=>674,42236=>322,42237=>322,42238=>588,42239=>588,42564=>720,42565=>595,42566=>436,42567=>440,42572=>1405,42573=>1173,42576=>1234,42577=>1027,42580=>1174,42581=>972,42582=>1100,42583=>969,42594=>1100,42595=>940,42596=>1096,42597=>915,42598=>1260,42599=>997,42600=>850,42601=>687,42602=>1037,42603=>868,42604=>1406,42605=>1106,42606=>961,42634=>944,42635=>749,42636=>682,42637=>580,42644=>808,42645=>712,42760=>500,42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500,42771=>500,42772=>500,42773=>500,42774=>500,42779=>400,42780=>400,42781=>287,42782=>287,42783=>287,42786=>444,42787=>390,42788=>540,42789=>540,42790=>837,42791=>712,42792=>1031,42793=>857,42794=>696,42795=>557,42800=>559,42801=>595,42802=>1349,42803=>1052,42804=>1285,42805=>1065,42806=>1245,42807=>1052,42808=>1079,42809=>922,42810=>1079,42811=>922,42812=>1035,42813=>922,42814=>698,42815=>549,42816=>656,42817=>579,42822=>850,42823=>542,42824=>683,42825=>531,42826=>918,42827=>814,42830=>1406,42831=>1106,42832=>733,42833=>716,42834=>948,42835=>937,42838=>850,42839=>716,42852=>738,42853=>716,42854=>738,42855=>716,42880=>637,42881=>343,42882=>837,42883=>712,42889=>400,42890=>396,42891=>456,42892=>306,42893=>808,42894=>693,42896=>928,42897=>768,42912=>821,42913=>716,42914=>775,42915=>665,42916=>837,42917=>712,42918=>770,42919=>493,42920=>720,42921=>595,42922=>886,43002=>1062,43003=>683,43004=>733,43005=>995,43006=>372,43007=>1325,61184=>216,61185=>242,61186=>267,61187=>277,61188=>282,61189=>242,61190=>216,61191=>242,61192=>267,61193=>277,61194=>267,61195=>242,61196=>216,61197=>242,61198=>267,61199=>277,61200=>267,61201=>242,61202=>216,61203=>242,61204=>282,61205=>277,61206=>267,61207=>242,61208=>216,61209=>282,62464=>612,62465=>612,62466=>653,62467=>902,62468=>617,62469=>617,62470=>680,62471=>904,62472=>599,62473=>617,62474=>1163,62475=>621,62476=>622,62477=>893,62478=>612,62479=>622,62480=>924,62481=>622,62482=>754,62483=>624,62484=>886,62485=>622,62486=>907,62487=>621,62488=>611,62489=>624,62490=>677,62491=>621,62492=>611,62493=>630,62494=>622,62495=>561,62496=>612,62497=>626,62498=>612,62499=>611,62500=>618,62501=>667,62502=>963,62504=>1023,62505=>844,62506=>563,62507=>563,62508=>563,62509=>563,62510=>563,62511=>563,62512=>555,62513=>555,62514=>555,62515=>555,62516=>573,62517=>573,62518=>573,62519=>824,62520=>824,62521=>824,62522=>824,62523=>824,62524=>611,62525=>611,62526=>611,62527=>611,62528=>611,62529=>611,62917=>687,64256=>833,64257=>787,64258=>787,64259=>1138,64260=>1139,64261=>808,64262=>1020,64275=>1388,64276=>1384,64277=>1378,64278=>1384,64279=>1713,64285=>294,64286=>0,64287=>663,64288=>665,64289=>939,64290=>788,64291=>920,64292=>786,64293=>857,64294=>869,64295=>821,64296=>890,64297=>838,64298=>749,64299=>749,64300=>749,64301=>749,64302=>728,64303=>728,64304=>728,64305=>610,64306=>447,64307=>588,64308=>687,64309=>343,64310=>400,64311=>1000,64312=>679,64313=>436,64314=>578,64315=>566,64316=>605,64317=>1000,64318=>724,64319=>1000,64320=>453,64321=>680,64322=>1000,64323=>675,64324=>658,64325=>1000,64326=>653,64327=>736,64328=>602,64329=>749,64330=>683,64331=>343,64332=>610,64333=>566,64334=>658,64335=>710,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansbi.z b/tcpdf/fonts/dejavusansbi.z new file mode 100644 index 0000000..ff50412 Binary files /dev/null and b/tcpdf/fonts/dejavusansbi.z differ diff --git a/tcpdf/fonts/dejavusanscondensed.ctg.z b/tcpdf/fonts/dejavusanscondensed.ctg.z new file mode 100644 index 0000000..df25b64 Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensed.ctg.z differ diff --git a/tcpdf/fonts/dejavusanscondensed.php b/tcpdf/fonts/dejavusanscondensed.php new file mode 100644 index 0000000..e257e55 --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensed.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansCondensed'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=664972; +$enc=''; +$file='dejavusanscondensed.z'; +$ctg='dejavusanscondensed.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-918 -415 1513 1167]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>456,'MaxWidth'=>1562,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(136,0,225,729),34=>array(86,458,328,729),35=>array(69,0,686,718),36=>array(75,-147,498,760),37=>array(49,-14,806,742),38=>array(57,-14,674,742),39=>array(86,458,162,729),40=>array(77,-132,279,759),41=>array(72,-132,274,759),42=>array(26,286,423,742),43=>array(95,0,659,627),44=>array(69,-116,198,124),45=>array(44,234,281,314),46=>array(96,0,189,124),47=>array(0,-93,303,729),48=>array(59,-14,513,742),49=>array(99,0,490,729),50=>array(66,0,483,742),51=>array(68,-14,501,742),52=>array(44,0,522,729),53=>array(69,-14,494,729),54=>array(63,-14,516,742),55=>array(74,0,496,729),56=>array(61,-14,511,742),57=>array(57,-14,510,742),58=>array(105,0,198,517),59=>array(69,-116,198,517),60=>array(95,46,659,581),61=>array(95,172,659,454),62=>array(95,46,659,581),63=>array(64,0,415,742),64=>array(59,-174,837,704),65=>array(7,0,608,729),66=>array(88,0,554,729),67=>array(50,-14,580,742),68=>array(88,0,640,729),69=>array(88,0,511,729),70=>array(88,0,466,729),71=>array(50,-14,624,742),72=>array(88,0,589,729),73=>array(88,0,177,729),74=>array(-47,-200,177,729),75=>array(88,0,609,729),76=>array(88,0,497,729),77=>array(88,0,689,729),78=>array(88,0,585,729),79=>array(50,-14,658,742),80=>array(88,0,512,729),81=>array(50,-129,658,742),82=>array(88,0,600,729),83=>array(59,-14,521,742),84=>array(-3,0,553,729),85=>array(78,-14,581,729),86=>array(7,0,608,729),87=>array(30,0,861,729),88=>array(26,0,589,729),89=>array(-2,0,552,729),90=>array(40,0,576,729),91=>array(77,-132,264,760),92=>array(0,-93,303,729),93=>array(87,-132,274,760),94=>array(95,457,659,729),95=>array(-9,-236,459,-166),96=>array(75,617,286,800),97=>array(54,-14,470,560),98=>array(82,-14,522,760),99=>array(49,-14,439,560),100=>array(49,-14,490,760),101=>array(49,-14,506,560),102=>array(21,0,334,760),103=>array(49,-208,490,560),104=>array(82,0,494,760),105=>array(84,0,166,760),106=>array(-17,-208,166,760),107=>array(82,0,519,760),108=>array(84,0,166,760),109=>array(82,0,800,560),110=>array(82,0,494,560),111=>array(49,-14,501,560),112=>array(82,-208,522,560),113=>array(49,-208,490,560),114=>array(82,0,370,560),115=>array(48,-14,425,560),116=>array(24,0,332,702),117=>array(76,-14,489,560),118=>array(26,0,506,547),119=>array(38,0,699,547),120=>array(26,0,503,547),121=>array(26,-208,506,547),122=>array(39,0,434,547),123=>array(112,-163,460,760),124=>array(114,-236,189,764),125=>array(112,-163,460,760),126=>array(95,228,659,399),161=>array(136,0,225,729),162=>array(75,-153,466,699),163=>array(57,0,493,742),164=>array(41,40,533,587),165=>array(36,0,536,729),166=>array(114,-171,189,699),167=>array(40,-95,409,742),168=>array(94,659,356,758),169=>array(124,0,776,725),170=>array(50,229,364,742),171=>array(69,69,466,517),172=>array(95,140,659,421),173=>array(44,234,281,314),174=>array(124,0,776,725),175=>array(93,673,356,745),176=>array(85,432,365,742),177=>array(95,0,659,627),178=>array(41,326,304,742),179=>array(43,319,315,742),180=>array(163,616,374,800),181=>array(76,-208,551,547),182=>array(69,-96,475,729),183=>array(96,285,189,409),184=>array(127,-193,310,0),185=>array(60,326,312,734),186=>array(42,229,382,742),187=>array(84,69,482,517),188=>array(60,-14,844,742),189=>array(60,-14,815,742),190=>array(43,-14,844,742),191=>array(63,-14,413,729),192=>array(7,0,608,927),193=>array(7,0,608,927),194=>array(7,0,608,928),195=>array(7,0,608,921),196=>array(7,0,608,913),197=>array(7,0,608,928),198=>array(3,0,819,729),199=>array(50,-193,580,742),200=>array(88,0,511,927),201=>array(88,0,511,927),202=>array(88,0,511,928),203=>array(88,0,511,913),204=>array(26,0,194,927),205=>array(71,0,239,927),206=>array(-1,0,268,928),207=>array(2,0,264,913),208=>array(4,0,645,729),209=>array(88,0,585,921),210=>array(50,-14,658,927),211=>array(50,-14,658,927),212=>array(50,-14,658,928),213=>array(50,-14,658,921),214=>array(50,-14,658,913),215=>array(123,31,631,596),216=>array(44,-34,664,761),217=>array(78,-14,581,927),218=>array(78,-14,581,927),219=>array(78,-14,581,928),220=>array(78,-14,581,913),221=>array(-2,0,552,927),222=>array(88,0,512,729),223=>array(82,-14,526,760),224=>array(54,-14,470,800),225=>array(54,-14,470,800),226=>array(54,-14,470,800),227=>array(54,-14,470,777),228=>array(54,-14,470,758),229=>array(54,-14,470,878),230=>array(54,-14,836,560),231=>array(49,-193,439,560),232=>array(49,-14,506,800),233=>array(49,-14,506,800),234=>array(49,-14,506,800),235=>array(49,-14,506,758),236=>array(-25,0,186,800),237=>array(63,0,274,800),238=>array(-15,0,266,800),239=>array(-5,0,256,758),240=>array(49,-14,501,760),241=>array(82,0,494,777),242=>array(49,-14,501,800),243=>array(49,-14,501,800),244=>array(49,-14,501,800),245=>array(49,-14,501,777),246=>array(49,-14,501,758),247=>array(95,73,659,554),248=>array(31,-46,519,592),249=>array(76,-14,489,800),250=>array(76,-14,489,800),251=>array(76,-14,489,800),252=>array(76,-14,489,758),253=>array(26,-208,506,800),254=>array(82,-208,522,760),255=>array(26,-208,506,758),256=>array(7,0,608,899),257=>array(54,-14,470,745),258=>array(7,0,608,946),259=>array(54,-14,470,765),260=>array(7,-193,635,729),261=>array(54,-193,506,560),262=>array(50,-14,580,927),263=>array(49,-14,439,800),264=>array(50,-14,580,928),265=>array(49,-14,439,800),266=>array(50,-14,580,914),267=>array(49,-14,439,760),268=>array(50,-14,580,928),269=>array(49,-14,439,800),270=>array(88,0,640,928),271=>array(49,-14,659,760),272=>array(4,0,645,729),273=>array(49,-14,558,760),274=>array(88,0,511,900),275=>array(49,-14,506,745),276=>array(88,0,511,928),277=>array(49,-14,506,785),278=>array(88,0,511,914),279=>array(49,-14,506,760),280=>array(88,-193,512,729),281=>array(49,-193,506,560),282=>array(88,0,511,925),283=>array(49,-14,506,797),284=>array(50,-14,624,928),285=>array(49,-208,490,800),286=>array(50,-14,624,928),287=>array(49,-208,490,785),288=>array(50,-14,624,914),289=>array(49,-208,490,760),290=>array(50,-250,624,742),291=>array(49,-208,490,775),292=>array(88,0,589,928),293=>array(-12,0,494,928),294=>array(88,0,736,729),295=>array(53,0,520,760),296=>array(-13,0,278,921),297=>array(-20,0,271,777),298=>array(1,0,264,899),299=>array(-6,0,257,745),300=>array(-5,0,271,928),301=>array(-13,0,263,785),302=>array(77,-193,242,729),303=>array(66,-193,230,760),304=>array(88,0,178,914),305=>array(84,0,166,560),306=>array(88,-200,443,729),307=>array(84,-208,416,760),308=>array(-47,-200,267,928),309=>array(-17,-208,266,800),310=>array(88,-235,609,729),311=>array(82,-235,519,760),312=>array(82,0,519,547),313=>array(88,0,497,928),314=>array(84,0,258,928),315=>array(88,-235,497,729),316=>array(60,-235,189,760),317=>array(88,0,497,729),318=>array(84,0,338,760),319=>array(88,0,497,729),320=>array(84,0,283,760),321=>array(-6,0,501,729),322=>array(0,0,257,760),323=>array(88,0,585,928),324=>array(82,0,494,803),325=>array(88,-235,585,729),326=>array(82,-235,494,560),327=>array(88,0,585,921),328=>array(82,0,494,800),329=>array(90,0,644,729),330=>array(88,-208,574,742),331=>array(82,-208,494,560),332=>array(50,-14,658,899),333=>array(49,-14,501,745),334=>array(50,-14,658,928),335=>array(49,-14,501,785),336=>array(50,-14,658,927),337=>array(49,-14,501,800),338=>array(50,0,905,729),339=>array(49,-14,874,560),340=>array(88,0,600,928),341=>array(82,0,403,803),342=>array(88,-235,600,729),343=>array(57,-235,370,560),344=>array(88,0,600,921),345=>array(82,0,377,800),346=>array(59,-14,521,928),347=>array(48,-14,425,803),348=>array(59,-14,521,928),349=>array(48,-14,425,800),350=>array(59,-193,521,742),351=>array(48,-193,425,560),352=>array(59,-14,521,928),353=>array(48,-14,425,800),354=>array(-3,-193,553,729),355=>array(24,-193,332,702),356=>array(-3,0,553,921),357=>array(24,0,337,813),358=>array(-3,0,553,729),359=>array(24,0,332,702),360=>array(78,-14,581,921),361=>array(76,-14,489,777),362=>array(78,-14,581,899),363=>array(76,-14,489,745),364=>array(78,-14,581,928),365=>array(76,-14,489,785),366=>array(78,-14,581,929),367=>array(76,-14,489,849),368=>array(78,-14,581,927),369=>array(76,-14,492,800),370=>array(78,-193,581,729),371=>array(76,-193,552,560),372=>array(30,0,861,932),373=>array(38,0,699,803),374=>array(-2,0,552,932),375=>array(26,-208,506,803),376=>array(-2,0,552,913),377=>array(40,0,576,928),378=>array(39,0,434,803),379=>array(40,0,576,914),380=>array(39,0,434,760),381=>array(40,0,576,928),382=>array(39,0,434,800),383=>array(21,0,334,760),384=>array(14,-14,522,760),385=>array(-46,0,598,729),386=>array(88,0,554,729),387=>array(82,-14,522,760),388=>array(0,0,554,729),389=>array(0,-14,522,760),390=>array(50,-14,580,742),391=>array(50,-14,715,924),392=>array(49,-14,540,760),393=>array(4,0,645,729),394=>array(-46,0,684,729),395=>array(88,0,554,729),396=>array(49,-14,490,760),397=>array(49,-208,501,548),398=>array(57,0,480,729),399=>array(51,-14,658,742),400=>array(72,-14,504,742),401=>array(-47,-200,466,729),402=>array(-57,-208,334,760),403=>array(50,-14,742,924),404=>array(3,-210,615,729),405=>array(82,0,819,760),406=>array(88,0,312,729),407=>array(4,0,261,729),408=>array(88,0,671,742),409=>array(81,0,519,760),410=>array(4,0,244,760),411=>array(26,0,506,760),412=>array(78,-14,805,729),413=>array(-47,-200,585,729),414=>array(82,-208,494,560),415=>array(50,-14,658,742),416=>array(45,-14,688,760),417=>array(52,-14,543,615),418=>array(50,-14,766,742),419=>array(49,-208,602,560),420=>array(-46,0,556,729),421=>array(81,-208,522,760),422=>array(88,-129,600,729),423=>array(50,-14,512,742),424=>array(44,-14,420,560),425=>array(88,0,511,729),426=>array(-119,-208,320,760),427=>array(24,-208,332,702),428=>array(10,0,553,729),429=>array(24,0,332,760),430=>array(-3,-200,553,729),431=>array(76,-4,717,760),432=>array(77,-14,609,615),433=>array(34,-14,654,724),434=>array(88,-15,615,729),435=>array(-2,0,668,742),436=>array(26,-208,658,560),437=>array(40,0,576,729),438=>array(39,0,434,547),439=>array(70,-31,559,729),440=>array(40,-31,529,729),441=>array(45,-213,478,547),442=>array(49,-208,439,547),443=>array(66,0,483,742),444=>array(41,-31,560,729),445=>array(45,-213,478,547),446=>array(39,-14,410,702),447=>array(82,-208,522,560),448=>array(88,-208,177,729),449=>array(88,-208,355,729),450=>array(9,-208,406,729),451=>array(88,0,178,729),452=>array(88,0,1217,928),453=>array(88,0,1090,800),454=>array(49,-14,964,800),455=>array(88,-200,691,729),456=>array(88,-208,660,760),457=>array(84,-208,330,760),458=>array(88,-200,782,729),459=>array(88,-208,756,760),460=>array(82,-208,660,760),461=>array(7,0,608,928),462=>array(54,-14,470,800),463=>array(-1,0,268,928),464=>array(-14,0,267,800),465=>array(50,-14,658,928),466=>array(49,-14,501,800),467=>array(78,-14,581,928),468=>array(76,-14,489,800),469=>array(78,-14,581,1025),470=>array(76,-14,489,899),471=>array(78,-14,581,1044),472=>array(76,-14,489,892),473=>array(78,-14,581,1044),474=>array(76,-14,489,892),475=>array(78,-14,581,1047),476=>array(76,-14,489,892),477=>array(49,-14,506,560),478=>array(7,0,608,1025),479=>array(54,-14,470,899),480=>array(7,0,608,1025),481=>array(54,-14,470,869),482=>array(3,0,819,900),483=>array(54,-14,836,743),484=>array(50,-14,677,742),485=>array(49,-208,560,560),486=>array(50,-14,624,928),487=>array(49,-208,490,798),488=>array(88,0,609,928),489=>array(-10,0,519,928),490=>array(50,-193,658,742),491=>array(49,-193,501,560),492=>array(50,-193,658,899),493=>array(49,-193,501,745),494=>array(70,-31,559,928),495=>array(39,-213,471,800),496=>array(-17,-208,269,800),497=>array(88,0,1217,729),498=>array(88,0,1090,729),499=>array(49,-14,964,760),500=>array(50,-14,624,928),501=>array(49,-208,490,798),502=>array(88,-14,920,729),503=>array(88,-208,563,742),504=>array(88,0,585,927),505=>array(82,0,494,799),506=>array(7,0,608,931),507=>array(54,-14,547,931),508=>array(3,0,819,928),509=>array(54,-14,836,798),510=>array(44,-34,664,928),511=>array(31,-46,519,798),512=>array(7,0,608,930),513=>array(54,-14,470,799),514=>array(7,0,608,901),515=>array(54,-14,470,785),516=>array(88,0,511,930),517=>array(49,-14,506,798),518=>array(88,0,511,901),519=>array(49,-14,506,785),520=>array(-40,0,276,930),521=>array(-27,0,282,798),522=>array(2,0,277,901),523=>array(-13,0,263,785),524=>array(50,-14,658,930),525=>array(49,-14,501,799),526=>array(50,-14,658,901),527=>array(49,-14,501,785),528=>array(87,0,600,930),529=>array(57,0,370,798),530=>array(88,0,600,901),531=>array(82,0,379,785),532=>array(78,-14,581,930),533=>array(76,-14,489,799),534=>array(78,-14,581,901),535=>array(76,-14,489,785),536=>array(59,-240,521,742),537=>array(48,-240,425,560),538=>array(-3,-240,553,729),539=>array(24,-240,332,702),540=>array(68,-210,501,742),541=>array(31,-211,420,560),542=>array(88,0,589,928),543=>array(-7,0,494,928),544=>array(88,-208,574,742),545=>array(49,-70,705,760),546=>array(49,-14,579,742),547=>array(49,-14,500,632),548=>array(40,-208,576,729),549=>array(39,-208,434,547),550=>array(7,0,608,914),551=>array(54,-14,470,760),552=>array(88,-193,511,729),553=>array(49,-193,506,560),554=>array(50,-14,658,1025),555=>array(49,-14,501,899),556=>array(50,-14,658,1025),557=>array(49,-14,501,864),558=>array(50,-14,658,914),559=>array(49,-14,501,760),560=>array(50,-14,658,1025),561=>array(49,-14,501,899),562=>array(-2,0,552,899),563=>array(26,-208,506,745),564=>array(61,-70,378,757),565=>array(82,-70,709,560),566=>array(24,-70,380,702),567=>array(-17,-208,166,547),568=>array(49,-14,849,760),569=>array(49,-208,849,560),570=>array(-1,-34,617,761),571=>array(5,-34,624,761),572=>array(4,-46,491,592),573=>array(4,0,497,729),574=>array(-35,-34,584,761),575=>array(48,-242,461,560),576=>array(39,-242,473,547),577=>array(35,0,512,729),578=>array(35,0,400,560),579=>array(4,0,554,729),580=>array(5,-14,653,729),581=>array(7,0,608,729),582=>array(88,-93,511,822),583=>array(49,-93,506,640),584=>array(-47,-200,261,729),585=>array(-17,-208,237,760),586=>array(50,-200,752,743),587=>array(49,-208,591,560),588=>array(4,0,600,729),589=>array(6,0,370,560),590=>array(-4,0,554,729),591=>array(4,-208,530,547),592=>array(76,-14,492,560),593=>array(49,-14,490,560),594=>array(82,-14,522,560),595=>array(82,-14,522,760),596=>array(56,-14,445,560),597=>array(49,-69,439,560),598=>array(49,-208,591,760),599=>array(49,-14,644,760),600=>array(49,-14,506,560),601=>array(49,-14,506,560),602=>array(54,-14,733,560),603=>array(58,-14,426,561),604=>array(58,-14,426,561),605=>array(58,-14,694,561),606=>array(49,-14,537,561),607=>array(-17,-208,237,547),608=>array(49,-208,644,760),609=>array(49,-208,490,547),610=>array(49,-14,485,560),611=>array(42,-210,494,547),612=>array(42,-14,494,547),613=>array(76,-208,489,547),614=>array(82,0,494,760),615=>array(82,-208,494,760),616=>array(6,0,238,760),617=>array(73,0,273,547),618=>array(51,0,283,547),619=>array(33,0,323,760),620=>array(34,0,375,760),621=>array(84,-208,267,760),622=>array(84,-213,586,760),623=>array(82,-13,800,548),624=>array(82,-208,800,548),625=>array(82,-208,800,560),626=>array(-17,-208,497,560),627=>array(82,-208,595,560),628=>array(79,0,494,547),629=>array(49,-14,501,560),630=>array(49,0,691,547),631=>array(65,-18,590,561),632=>array(49,-208,542,760),633=>array(0,-13,289,547),634=>array(0,-13,289,755),635=>array(0,-208,390,547),636=>array(82,-207,370,560),637=>array(82,-208,370,560),638=>array(58,0,393,560),639=>array(51,0,393,560),640=>array(82,0,517,547),641=>array(82,0,517,547),642=>array(48,-208,425,560),643=>array(-18,-208,320,760),644=>array(-18,-208,320,760),645=>array(24,-208,361,549),646=>array(-119,-208,320,760),647=>array(24,-156,332,546),648=>array(24,-208,333,702),649=>array(0,-14,571,547),650=>array(49,-15,508,547),651=>array(84,0,491,548),652=>array(26,0,506,547),653=>array(38,0,699,547),654=>array(26,0,506,760),655=>array(44,0,497,547),656=>array(39,-208,534,547),657=>array(39,-54,434,547),658=>array(39,-213,471,547),659=>array(48,-213,498,547),660=>array(39,0,410,759),661=>array(39,0,410,759),662=>array(39,0,410,759),663=>array(39,-213,410,760),664=>array(50,-14,658,742),665=>array(82,0,478,547),666=>array(49,-14,537,561),667=>array(49,-14,652,760),668=>array(82,0,507,547),669=>array(-119,-208,246,760),670=>array(82,-213,519,547),671=>array(82,0,444,547),672=>array(49,-208,672,759),673=>array(39,0,410,759),674=>array(39,0,410,759),675=>array(49,-14,874,760),676=>array(49,-213,913,760),677=>array(49,-54,873,760),678=>array(24,0,703,702),679=>array(24,-208,566,760),680=>array(24,-70,651,702),681=>array(21,-208,724,760),682=>array(84,0,591,760),683=>array(84,0,549,760),684=>array(23,-15,440,640),685=>array(23,84,440,640),686=>array(0,-214,514,760),687=>array(0,-208,615,760),688=>array(51,326,312,751),689=>array(51,326,312,751),690=>array(-10,209,105,751),691=>array(51,326,233,640),692=>array(31,319,213,632),693=>array(31,209,277,632),694=>array(14,326,288,632),695=>array(23,326,440,632),696=>array(17,209,319,632),697=>array(70,557,183,800),698=>array(70,557,346,800),699=>array(76,489,206,729),700=>array(78,499,207,729),701=>array(86,616,215,856),702=>array(51,492,172,760),703=>array(51,492,172,760),704=>array(51,326,286,751),705=>array(51,326,286,751),706=>array(117,524,333,836),707=>array(117,524,333,836),708=>array(84,561,365,800),709=>array(84,561,365,800),710=>array(84,616,365,800),711=>array(84,616,365,800),712=>array(94,488,154,759),713=>array(93,673,356,745),714=>array(163,616,374,800),715=>array(75,617,286,800),716=>array(94,-148,154,123),717=>array(93,-156,356,-84),718=>array(75,-236,286,-54),719=>array(163,-236,374,-53),720=>array(48,0,206,517),721=>array(48,356,206,517),722=>array(51,249,172,517),723=>array(51,249,172,517),724=>array(126,229,324,448),725=>array(126,229,324,448),726=>array(44,125,307,417),727=>array(44,234,242,307),728=>array(87,645,363,785),729=>array(180,658,270,758),730=>array(104,610,346,878),731=>array(146,-193,310,0),732=>array(80,639,370,777),733=>array(105,616,414,800),734=>array(-0,233,301,504),735=>array(105,616,345,800),736=>array(51,208,336,632),737=>array(53,326,105,751),738=>array(51,326,289,648),739=>array(51,326,352,632),740=>array(51,326,286,751),741=>array(94,0,351,668),742=>array(94,0,351,668),743=>array(94,0,351,668),744=>array(94,0,351,668),745=>array(94,0,351,668),748=>array(84,-260,365,-21),749=>array(93,610,356,808),750=>array(76,489,386,729),755=>array(104,-240,346,28),759=>array(80,-192,370,-55),768=>array(-376,560,-166,800),769=>array(-288,560,-77,800),770=>array(-365,560,-84,800),771=>array(-371,639,-81,777),772=>array(-355,673,-92,745),773=>array(-459,686,9,755),774=>array(-366,645,-91,785),775=>array(-267,560,-185,760),776=>array(-356,560,-94,758),777=>array(-313,618,-116,810),778=>array(-347,610,-105,878),779=>array(-343,616,-34,800),780=>array(-364,560,-83,800),781=>array(-255,615,-195,832),782=>array(-345,615,-105,832),783=>array(-409,616,-101,800),784=>array(-366,645,-91,917),785=>array(-366,645,-91,785),786=>array(-211,489,-83,645),787=>array(-274,595,-168,844),788=>array(-274,595,-168,844),789=>array(-60,575,60,759),790=>array(-376,-266,-166,-83),791=>array(-288,-267,-77,-83),792=>array(-322,-240,-198,-24),793=>array(-251,-240,-128,-24),794=>array(-188,690,28,930),795=>array(-120,427,54,609),796=>array(-281,-241,-187,-32),797=>array(-333,-240,-117,-87),798=>array(-333,-240,-117,-87),799=>array(-322,-240,-128,-24),800=>array(-333,-184,-117,-117),801=>array(-284,-208,-21,63),802=>array(-286,-208,-22,63),803=>array(-267,-183,-185,-69),804=>array(-356,-183,-95,-84),805=>array(-320,-241,-132,-32),806=>array(-291,-240,-162,-84),807=>array(-322,-193,-140,0),808=>array(-304,-193,-140,0),809=>array(-255,-240,-195,-47),810=>array(-345,-211,-102,-50),811=>array(-407,-222,-45,-82),812=>array(-364,-240,-83,-57),813=>array(-366,-240,-85,-57),814=>array(-366,-222,-91,-82),815=>array(-366,-224,-91,-83),816=>array(-371,-222,-81,-84),817=>array(-355,-156,-92,-84),818=>array(-459,-236,9,-166),819=>array(-459,-236,9,-9),820=>array(-501,240,-36,381),821=>array(-285,221,-53,301),822=>array(-571,221,0,301),823=>array(-517,-46,-30,592),824=>array(-667,-34,-48,761),825=>array(-262,-241,-167,-32),826=>array(-344,-206,-102,-44),827=>array(-323,-240,-125,-21),828=>array(-407,-222,-45,-82),829=>array(-319,619,-124,834),830=>array(-223,595,-98,853),831=>array(-459,528,9,755),832=>array(-376,617,-166,800),833=>array(-288,616,-77,800),834=>array(-371,639,-81,777),835=>array(-274,595,-168,844),836=>array(-349,659,-69,978),837=>array(-250,-208,-154,-45),838=>array(-356,639,-93,786),839=>array(-324,-226,-126,-35),840=>array(-329,-240,-122,-47),841=>array(-324,-240,-126,-21),842=>array(-370,616,-80,800),843=>array(-370,567,-80,850),844=>array(-370,596,-80,820),845=>array(-407,-230,-43,-30),846=>array(-315,-240,-135,-45),849=>array(-285,610,-165,878),850=>array(-366,547,-91,855),851=>array(-319,-240,-124,-24),855=>array(-285,610,-165,878),856=>array(-92,658,-2,758),858=>array(-387,-241,-63,-32),860=>array(-401,-237,401,-60),861=>array(-401,802,401,979),862=>array(-401,855,401,927),863=>array(-401,-156,401,-84),864=>array(-319,756,319,894),865=>array(-401,752,401,929),866=>array(-398,-230,402,-30),880=>array(88,0,500,729),881=>array(84,0,429,547),882=>array(88,0,688,729),883=>array(88,0,495,729),884=>array(70,557,183,800),885=>array(70,-208,183,35),886=>array(88,0,585,729),887=>array(82,0,503,547),890=>array(192,-208,290,-45),891=>array(56,-14,445,560),892=>array(49,-14,439,560),893=>array(56,-14,445,560),894=>array(69,-116,198,517),900=>array(163,616,374,800),901=>array(94,659,374,978),902=>array(7,0,608,800),903=>array(96,285,189,409),904=>array(-11,0,614,800),905=>array(-6,0,689,800),906=>array(-9,0,280,800),908=>array(-6,-14,676,800),910=>array(-14,0,739,800),911=>array(-17,0,677,800),912=>array(2,0,281,978),913=>array(7,0,608,729),914=>array(88,0,554,729),915=>array(88,0,497,729),916=>array(7,0,608,729),917=>array(88,0,511,729),918=>array(40,0,576,729),919=>array(88,0,589,729),920=>array(50,-14,658,742),921=>array(88,0,177,729),922=>array(88,0,609,729),923=>array(7,0,608,729),924=>array(88,0,689,729),925=>array(88,0,585,729),926=>array(88,0,493,729),927=>array(50,-14,658,742),928=>array(88,0,589,729),929=>array(88,0,512,729),931=>array(88,0,511,729),932=>array(-3,0,553,729),933=>array(-2,0,552,729),934=>array(50,0,658,729),935=>array(26,0,589,729),936=>array(50,0,659,729),937=>array(34,0,654,738),938=>array(2,0,264,913),939=>array(-2,0,552,913),940=>array(49,-12,550,800),941=>array(58,-14,426,800),942=>array(82,-208,494,800),943=>array(73,0,292,800),944=>array(65,-14,469,978),945=>array(49,-12,550,559),946=>array(84,-208,510,766),947=>array(14,-208,506,547),948=>array(49,-14,501,742),949=>array(58,-14,426,561),950=>array(47,-210,447,760),951=>array(82,-208,494,560),952=>array(49,-11,501,768),953=>array(73,0,273,547),954=>array(83,0,509,547),955=>array(26,0,506,760),956=>array(76,-208,551,547),957=>array(32,0,461,547),958=>array(47,-210,451,760),959=>array(49,-14,501,560),960=>array(32,-19,517,547),961=>array(82,-208,522,560),962=>array(49,-210,439,560),963=>array(49,-14,544,547),964=>array(44,0,498,547),965=>array(65,-14,469,547),966=>array(49,-208,542,551),967=>array(26,-208,494,547),968=>array(49,-208,542,547),969=>array(59,-14,692,547),970=>array(2,0,280,758),971=>array(65,-14,469,758),972=>array(49,-14,501,800),973=>array(65,-14,469,800),974=>array(59,-14,692,800),975=>array(88,-208,609,729),976=>array(73,-11,484,768),977=>array(49,-11,501,768),978=>array(38,0,598,734),979=>array(-14,0,746,800),980=>array(38,0,598,913),981=>array(49,-208,542,760),982=>array(28,-14,723,547),983=>array(49,-206,541,550),984=>array(50,-207,658,742),985=>array(49,-208,501,560),986=>array(61,-210,525,729),987=>array(49,-210,486,547),988=>array(88,0,466,729),989=>array(-84,-208,369,760),990=>array(79,-2,543,729),991=>array(83,0,510,759),992=>array(50,-208,717,742),993=>array(52,-180,516,559),994=>array(50,-213,790,729),995=>array(59,-208,692,547),996=>array(50,-208,594,742),997=>array(49,-208,512,560),998=>array(88,-213,662,729),999=>array(20,-14,514,575),1000=>array(35,-208,567,745),1001=>array(44,-208,497,560),1002=>array(50,0,643,742),1003=>array(23,0,540,560),1004=>array(50,-14,579,758),1005=>array(49,-14,490,758),1006=>array(19,-208,531,729),1007=>array(24,-208,459,726),1008=>array(49,-7,541,550),1009=>array(82,-208,522,560),1010=>array(49,-14,439,560),1011=>array(-17,-208,166,760),1012=>array(50,-14,658,742),1013=>array(49,-14,433,560),1014=>array(86,-14,469,560),1015=>array(88,0,512,729),1016=>array(82,-208,522,760),1017=>array(50,-14,580,742),1018=>array(88,0,689,729),1019=>array(56,-208,529,547),1020=>array(37,-208,522,560),1021=>array(50,-14,580,742),1022=>array(50,-14,580,742),1023=>array(50,-14,580,742),1024=>array(88,0,511,927),1025=>array(88,0,511,913),1026=>array(-3,-200,638,729),1027=>array(88,0,497,927),1028=>array(50,-14,580,742),1029=>array(59,-14,521,742),1030=>array(88,0,177,729),1031=>array(2,0,264,913),1032=>array(-47,-200,177,729),1033=>array(37,0,921,729),1034=>array(88,0,877,729),1035=>array(-3,0,638,729),1036=>array(88,0,622,927),1037=>array(88,0,585,927),1038=>array(15,0,533,928),1039=>array(88,-157,589,729),1040=>array(7,0,608,729),1041=>array(88,0,554,729),1042=>array(88,0,554,729),1043=>array(88,0,497,729),1044=>array(44,-157,659,729),1045=>array(88,0,511,729),1046=>array(18,0,952,729),1047=>array(59,-14,518,742),1048=>array(88,0,585,729),1049=>array(88,0,585,928),1050=>array(88,0,622,729),1051=>array(37,0,588,729),1052=>array(88,0,689,729),1053=>array(88,0,589,729),1054=>array(50,-14,658,742),1055=>array(88,0,589,729),1056=>array(88,0,512,729),1057=>array(50,-14,580,742),1058=>array(-3,0,553,729),1059=>array(15,0,533,729),1060=>array(53,0,722,729),1061=>array(26,0,589,729),1062=>array(88,-157,664,729),1063=>array(77,0,529,729),1064=>array(88,0,875,729),1065=>array(88,-157,949,729),1066=>array(26,0,686,729),1067=>array(88,0,706,729),1068=>array(88,0,554,729),1069=>array(48,-14,578,742),1070=>array(92,-14,921,742),1071=>array(60,0,537,729),1072=>array(54,-14,470,560),1073=>array(49,-14,506,777),1074=>array(82,0,478,547),1075=>array(82,0,429,547),1076=>array(47,-138,576,547),1077=>array(49,-14,506,560),1078=>array(31,0,780,547),1079=>array(58,-14,426,561),1080=>array(82,0,503,547),1081=>array(82,0,503,760),1082=>array(82,0,514,547),1083=>array(33,0,501,547),1084=>array(82,0,598,547),1085=>array(82,0,507,547),1086=>array(49,-14,501,560),1087=>array(82,0,507,547),1088=>array(82,-208,522,560),1089=>array(49,-14,439,560),1090=>array(26,0,498,547),1091=>array(26,-208,506,547),1092=>array(49,-208,721,729),1093=>array(26,0,503,547),1094=>array(82,-138,571,547),1095=>array(66,0,450,547),1096=>array(82,0,742,547),1097=>array(82,-138,807,547),1098=>array(27,0,583,547),1099=>array(82,0,631,560),1100=>array(82,0,478,547),1101=>array(49,-14,439,560),1102=>array(84,-14,708,560),1103=>array(51,0,465,547),1104=>array(49,-14,506,802),1105=>array(49,-14,506,758),1106=>array(21,-208,514,760),1107=>array(82,0,433,803),1108=>array(49,-14,439,560),1109=>array(48,-14,425,560),1110=>array(84,0,166,760),1111=>array(-5,0,256,758),1112=>array(-17,-208,166,760),1113=>array(33,0,759,547),1114=>array(82,0,756,547),1115=>array(21,0,510,760),1116=>array(82,0,514,803),1117=>array(82,0,503,802),1118=>array(26,-208,506,760),1119=>array(82,-138,507,547),1120=>array(50,-14,790,729),1121=>array(59,-14,692,547),1122=>array(13,0,641,729),1123=>array(13,0,552,760),1124=>array(92,-14,800,742),1125=>array(84,-14,620,560),1126=>array(7,0,784,729),1127=>array(22,0,683,547),1128=>array(88,0,1021,729),1129=>array(84,0,879,547),1130=>array(50,0,658,729),1131=>array(47,0,504,547),1132=>array(88,0,874,729),1133=>array(84,0,695,547),1134=>array(50,-208,501,935),1135=>array(40,-193,426,753),1136=>array(7,0,760,729),1137=>array(22,-208,767,765),1138=>array(50,-14,658,742),1139=>array(49,-14,501,560),1140=>array(7,0,692,742),1141=>array(22,0,576,560),1142=>array(7,0,692,930),1143=>array(22,0,576,800),1144=>array(50,-208,866,742),1145=>array(49,-208,787,560),1146=>array(50,-14,808,742),1147=>array(49,-14,633,560),1148=>array(52,-14,1010,932),1149=>array(66,-14,858,758),1150=>array(50,-14,790,900),1151=>array(59,-14,692,734),1152=>array(50,-208,580,742),1153=>array(49,-208,439,560),1154=>array(26,-44,426,457),1155=>array(-467,608,-83,810),1156=>array(-334,645,4,788),1157=>array(-259,595,-152,797),1158=>array(-259,595,-152,797),1159=>array(-699,606,4,788),1160=>array(-918,-180,369,922),1161=>array(-861,-280,311,1022),1162=>array(88,-208,673,928),1163=>array(84,-208,587,760),1164=>array(14,0,554,729),1165=>array(17,0,480,702),1166=>array(88,0,549,729),1167=>array(82,-208,522,560),1168=>array(88,0,497,878),1169=>array(82,0,429,700),1170=>array(31,0,555,729),1171=>array(24,0,488,547),1172=>array(88,-200,540,729),1173=>array(82,-208,455,547),1174=>array(18,-157,964,729),1175=>array(31,-138,789,547),1176=>array(59,-193,518,742),1177=>array(58,-193,426,561),1178=>array(88,-157,642,729),1179=>array(82,-138,529,547),1180=>array(88,0,622,729),1181=>array(82,0,514,547),1182=>array(14,0,622,729),1183=>array(26,0,514,760),1184=>array(22,0,753,729),1185=>array(18,0,620,547),1186=>array(88,-157,677,729),1187=>array(84,-138,591,547),1188=>array(88,0,908,729),1189=>array(84,0,776,547),1190=>array(88,-200,951,729),1191=>array(84,-208,802,547),1192=>array(50,-14,784,743),1193=>array(49,-14,615,560),1194=>array(50,-193,580,742),1195=>array(49,-193,439,560),1196=>array(-3,-157,553,729),1197=>array(26,-138,498,547),1198=>array(-2,0,552,729),1199=>array(26,-208,506,547),1200=>array(-2,0,552,729),1201=>array(26,-208,506,547),1202=>array(26,-157,589,729),1203=>array(26,-138,503,547),1204=>array(-3,-157,819,729),1205=>array(2,-138,704,547),1206=>array(77,-157,617,729),1207=>array(66,-138,531,547),1208=>array(77,0,529,729),1209=>array(66,0,450,547),1210=>array(77,0,529,729),1211=>array(82,0,494,760),1212=>array(9,-14,796,742),1213=>array(6,-14,607,560),1214=>array(9,-184,796,742),1215=>array(6,-161,607,560),1216=>array(88,0,177,729),1217=>array(18,0,952,928),1218=>array(31,0,780,785),1219=>array(88,-200,586,729),1220=>array(83,-208,510,547),1221=>array(23,-208,677,729),1222=>array(20,-208,582,547),1223=>array(88,-200,589,729),1224=>array(84,-208,510,547),1225=>array(88,-208,677,729),1226=>array(84,-208,591,547),1227=>array(77,-157,529,729),1228=>array(66,-138,450,547),1229=>array(88,-208,777,729),1230=>array(84,-208,675,547),1231=>array(84,0,166,760),1232=>array(7,0,608,946),1233=>array(54,-14,470,765),1234=>array(7,0,608,913),1235=>array(54,-14,470,758),1236=>array(3,0,819,729),1237=>array(54,-14,836,560),1238=>array(88,0,511,928),1239=>array(49,-14,506,785),1240=>array(51,-14,658,742),1241=>array(49,-14,506,560),1242=>array(51,-14,658,913),1243=>array(49,-14,506,758),1244=>array(18,0,952,913),1245=>array(31,0,780,758),1246=>array(59,-14,518,913),1247=>array(58,-14,426,758),1248=>array(70,-31,559,729),1249=>array(39,-213,471,547),1250=>array(88,0,585,899),1251=>array(82,0,503,745),1252=>array(88,0,585,913),1253=>array(82,0,503,758),1254=>array(50,-14,658,913),1255=>array(49,-14,501,758),1256=>array(50,-14,658,742),1257=>array(49,-14,501,560),1258=>array(50,-14,658,913),1259=>array(49,-14,501,758),1260=>array(48,-14,578,913),1261=>array(49,-14,439,758),1262=>array(15,0,533,899),1263=>array(26,-208,506,745),1264=>array(15,0,533,913),1265=>array(26,-208,506,758),1266=>array(15,0,533,927),1267=>array(26,-208,506,800),1268=>array(77,0,529,913),1269=>array(66,0,450,758),1270=>array(88,-157,497,729),1271=>array(82,-138,429,547),1272=>array(88,0,706,913),1273=>array(82,0,631,758),1274=>array(31,-208,555,729),1275=>array(24,-208,488,547),1276=>array(26,-200,581,729),1277=>array(26,-208,494,547),1278=>array(26,0,589,729),1279=>array(26,0,503,547),1280=>array(63,0,529,729),1281=>array(49,0,445,547),1282=>array(63,-14,817,729),1283=>array(49,-14,726,547),1284=>array(88,-14,789,742),1285=>array(75,-14,706,561),1286=>array(88,-208,589,742),1287=>array(75,-208,508,561),1288=>array(23,-14,876,729),1289=>array(20,-14,780,547),1290=>array(88,-14,920,729),1291=>array(84,-14,789,547),1292=>array(50,-14,623,742),1293=>array(49,-14,481,560),1294=>array(-3,-14,607,729),1295=>array(2,-14,558,547),1296=>array(72,-14,504,742),1297=>array(58,-14,426,561),1298=>array(37,-200,588,729),1299=>array(33,-208,501,547),1300=>array(37,0,1025,729),1301=>array(33,0,866,547),1302=>array(88,0,777,729),1303=>array(82,-208,749,560),1304=>array(60,0,870,729),1305=>array(51,-14,840,560),1306=>array(50,-129,658,742),1307=>array(49,-208,490,560),1308=>array(30,0,861,729),1309=>array(38,0,699,547),1310=>array(88,0,622,729),1311=>array(82,0,514,547),1312=>array(37,-200,951,729),1313=>array(33,-208,793,547),1314=>array(88,-200,951,729),1315=>array(82,-208,799,547),1316=>array(88,-157,677,729),1317=>array(82,-138,588,547),1329=>array(78,-29,612,729),1330=>array(78,0,585,743),1331=>array(41,0,656,743),1332=>array(40,0,652,743),1333=>array(78,-14,585,729),1334=>array(78,0,624,744),1335=>array(83,0,554,729),1336=>array(78,0,585,743),1337=>array(78,-14,751,743),1338=>array(41,-14,656,729),1339=>array(83,0,585,729),1340=>array(83,0,480,729),1341=>array(83,-14,765,729),1342=>array(116,-13,687,742),1343=>array(78,0,581,729),1344=>array(31,-26,574,729),1345=>array(74,-23,619,744),1346=>array(44,0,656,743),1347=>array(46,0,644,735),1348=>array(78,-14,690,729),1349=>array(64,-14,602,743),1350=>array(0,-14,612,729),1351=>array(70,-15,616,729),1352=>array(78,0,581,743),1353=>array(53,-28,598,744),1354=>array(40,0,642,743),1355=>array(74,0,618,744),1356=>array(78,0,690,743),1357=>array(78,-14,581,729),1358=>array(44,0,656,729),1359=>array(66,-14,569,741),1360=>array(78,0,581,743),1361=>array(70,-14,608,743),1362=>array(83,0,484,729),1363=>array(53,0,677,729),1364=>array(22,0,611,743),1365=>array(50,-14,658,742),1366=>array(48,-13,672,729),1369=>array(51,492,172,760),1370=>array(78,499,207,729),1371=>array(0,620,211,803),1372=>array(2,618,321,893),1373=>array(-0,617,210,800),1374=>array(3,613,361,866),1375=>array(40,618,416,760),1377=>array(76,-14,795,547),1378=>array(82,-208,494,560),1379=>array(49,-208,583,560),1380=>array(82,-208,588,560),1381=>array(76,-14,493,760),1382=>array(49,-208,583,560),1383=>array(82,0,441,760),1384=>array(82,-208,494,560),1385=>array(82,-208,665,560),1386=>array(49,-14,583,760),1387=>array(82,-208,494,760),1388=>array(82,-208,272,547),1389=>array(82,-208,800,760),1390=>array(49,-14,501,760),1391=>array(76,-208,489,760),1392=>array(82,0,494,760),1393=>array(46,-15,471,760),1394=>array(82,-208,588,560),1395=>array(62,-14,490,768),1396=>array(76,-14,583,760),1397=>array(-20,-208,163,547),1398=>array(-18,-14,489,760),1399=>array(0,-208,392,560),1400=>array(82,0,494,560),1401=>array(4,-208,333,547),1402=>array(76,-208,795,547),1403=>array(48,-208,445,561),1404=>array(82,0,549,560),1405=>array(76,-14,489,560),1406=>array(76,-208,583,760),1407=>array(76,-14,800,560),1408=>array(82,-208,494,560),1409=>array(48,-208,489,560),1410=>array(82,0,404,547),1411=>array(76,-208,800,760),1412=>array(18,-208,522,560),1413=>array(48,-14,501,560),1414=>array(31,-208,690,760),1415=>array(76,-14,730,760),1417=>array(105,0,198,415),1418=>array(44,212,281,314),1456=>array(255,-217,321,-22),1457=>array(75,-217,395,-22),1458=>array(112,-217,409,-22),1459=>array(112,-217,409,-22),1460=>array(255,-159,321,-85),1461=>array(200,-159,376,-85),1462=>array(200,-217,376,-22),1463=>array(156,-159,420,-85),1464=>array(156,-193,420,-46),1465=>array(0,625,66,698),1466=>array(0,625,66,698),1467=>array(133,-237,419,-17),1468=>array(259,237,325,310),1469=>array(255,-217,321,-22),1470=>array(44,472,281,552),1471=>array(156,625,420,698),1472=>array(92,-98,174,645),1473=>array(573,625,640,698),1474=>array(86,625,153,698),1475=>array(92,0,174,547),1478=>array(44,0,322,547),1479=>array(156,-217,420,-22),1488=>array(82,0,520,547),1489=>array(39,0,482,547),1490=>array(39,-5,345,547),1491=>array(39,0,460,547),1492=>array(82,0,506,547),1493=>array(82,0,164,547),1494=>array(39,0,273,547),1495=>array(82,0,506,547),1496=>array(81,-14,534,552),1497=>array(60,204,142,547),1498=>array(39,-208,402,547),1499=>array(39,0,426,547),1500=>array(39,0,443,729),1501=>array(82,0,516,547),1502=>array(39,0,530,555),1503=>array(82,-208,164,547),1504=>array(39,0,278,547),1505=>array(81,-14,534,547),1506=>array(39,-93,482,547),1507=>array(82,-208,494,547),1508=>array(82,0,513,547),1509=>array(39,-208,447,548),1510=>array(39,0,453,547),1511=>array(82,-208,570,546),1512=>array(39,0,426,547),1513=>array(39,0,599,547),1514=>array(9,-4,510,547),1520=>array(82,0,342,547),1521=>array(60,0,299,547),1522=>array(60,204,281,547),1523=>array(82,361,292,547),1524=>array(82,361,499,547),1542=>array(0,-20,547,892),1543=>array(0,-20,547,895),1545=>array(58,0,616,635),1546=>array(58,0,814,635),1548=>array(96,0,225,240),1557=>array(110,624,340,868),1563=>array(96,0,225,633),1567=>array(64,0,415,742),1569=>array(71,42,351,483),1570=>array(-33,0,284,939),1571=>array(47,0,198,999),1572=>array(-38,-244,366,588),1573=>array(47,-244,198,760),1574=>array(57,-131,647,588),1575=>array(84,0,166,760),1576=>array(57,-171,778,327),1577=>array(61,-28,408,513),1578=>array(57,-10,778,391),1579=>array(57,-10,778,513),1580=>array(69,-244,580,425),1581=>array(69,-244,580,425),1582=>array(69,-244,580,586),1583=>array(55,-19,350,415),1584=>array(55,-19,350,586),1585=>array(-38,-244,381,269),1586=>array(-38,-244,381,464),1587=>array(57,-244,1024,366),1588=>array(57,-244,1024,586),1589=>array(57,-244,1021,362),1590=>array(57,-244,1021,464),1591=>array(63,0,772,760),1592=>array(63,0,772,760),1593=>array(51,-244,528,521),1594=>array(51,-244,528,659),1600=>array(-9,0,272,90),1601=>array(57,-45,857,635),1602=>array(47,-215,631,635),1603=>array(63,-27,650,760),1604=>array(63,-152,573,760),1605=>array(62,-240,492,369),1606=>array(64,-162,594,464),1607=>array(61,-28,408,358),1608=>array(-38,-244,366,315),1609=>array(57,-131,647,411),1610=>array(57,-244,647,411),1611=>array(97,591,354,825),1612=>array(97,591,354,874),1613=>array(97,-239,354,-5),1614=>array(97,591,354,708),1615=>array(97,590,354,874),1616=>array(97,-137,354,-20),1617=>array(88,599,362,869),1618=>array(104,610,345,878),1619=>array(66,590,383,719),1620=>array(147,593,298,808),1621=>array(147,-244,298,-29),1623=>array(97,615,354,898),1626=>array(106,616,343,775),1632=>array(193,220,290,342),1633=>array(122,0,308,635),1634=>array(36,0,443,635),1635=>array(33,0,458,635),1636=>array(77,-10,411,641),1637=>array(59,-10,424,643),1638=>array(37,0,444,635),1639=>array(26,0,457,635),1640=>array(26,0,457,635),1641=>array(44,0,444,640),1642=>array(58,0,425,635),1643=>array(0,-110,270,318),1644=>array(78,499,207,729),1645=>array(38,101,453,537),1646=>array(57,-10,778,327),1647=>array(47,-215,631,481),1648=>array(201,602,250,887),1652=>array(53,649,205,864),1657=>array(57,-10,778,575),1658=>array(57,-10,778,513),1659=>array(57,-244,778,327),1660=>array(57,-180,778,391),1661=>array(57,-10,778,464),1662=>array(57,-244,778,327),1663=>array(57,-10,778,513),1664=>array(57,-244,778,327),1665=>array(69,-244,580,710),1666=>array(69,-244,580,708),1667=>array(69,-244,580,425),1668=>array(69,-244,580,425),1669=>array(69,-244,580,708),1670=>array(69,-244,580,425),1671=>array(69,-244,580,425),1672=>array(55,-19,350,746),1673=>array(55,-180,350,415),1674=>array(55,-171,350,415),1675=>array(55,-171,350,746),1676=>array(55,-19,350,586),1677=>array(55,-146,350,415),1678=>array(55,-19,350,708),1679=>array(55,-19,350,684),1680=>array(55,-19,350,708),1681=>array(-38,-244,422,648),1682=>array(-38,-244,426,556),1683=>array(-38,-244,457,269),1684=>array(-38,-244,426,269),1685=>array(-38,-244,571,269),1686=>array(-38,-244,426,269),1687=>array(-38,-244,396,464),1688=>array(-38,-244,396,586),1689=>array(-38,-244,396,586),1690=>array(57,-244,1024,464),1691=>array(57,-244,1024,366),1692=>array(57,-244,1024,586),1693=>array(57,-244,1021,362),1694=>array(57,-244,1021,586),1695=>array(63,0,772,760),1696=>array(51,-244,528,781),1697=>array(57,-45,857,481),1698=>array(57,-171,857,481),1699=>array(57,-171,857,635),1700=>array(57,-45,857,757),1701=>array(57,-293,857,481),1702=>array(57,-45,857,757),1703=>array(47,-215,631,635),1704=>array(47,-215,631,757),1705=>array(57,-43,806,760),1706=>array(57,-43,900,760),1707=>array(57,-43,806,760),1708=>array(63,-27,650,760),1709=>array(63,-27,650,854),1710=>array(63,-293,650,760),1711=>array(57,-43,806,896),1712=>array(57,-43,806,896),1713=>array(57,-43,806,903),1714=>array(57,-171,806,896),1715=>array(57,-293,806,896),1716=>array(57,-43,806,1025),1717=>array(63,-152,651,971),1718=>array(63,-152,573,952),1719=>array(63,-152,615,1025),1720=>array(63,-391,573,760),1721=>array(64,-317,594,464),1722=>array(64,-162,594,366),1723=>array(64,-162,594,636),1724=>array(64,-330,594,464),1725=>array(64,-162,594,586),1726=>array(63,-33,575,487),1727=>array(69,-244,580,586),1734=>array(-38,-244,366,556),1740=>array(57,-131,647,411),1742=>array(57,-131,647,556),1749=>array(61,-28,408,358),1776=>array(193,220,290,342),1777=>array(122,0,308,635),1778=>array(36,0,443,635),1779=>array(33,0,458,635),1780=>array(36,0,424,643),1781=>array(46,-5,437,643),1782=>array(91,0,401,640),1783=>array(26,0,457,635),1784=>array(26,0,457,635),1785=>array(44,0,444,640),1984=>array(59,-14,513,742),1985=>array(99,0,490,729),1986=>array(99,0,477,729),1987=>array(99,0,477,729),1988=>array(99,0,477,729),1989=>array(99,0,477,729),1990=>array(99,0,477,729),1991=>array(94,0,479,729),1992=>array(94,0,479,729),1993=>array(69,0,504,741),1994=>array(84,0,166,729),1995=>array(49,-14,465,447),1996=>array(26,0,355,731),1997=>array(26,0,506,430),1998=>array(82,0,507,430),1999=>array(82,0,507,430),2000=>array(49,0,485,735),2001=>array(82,0,507,581),2002=>array(49,0,664,741),2003=>array(84,0,368,729),2004=>array(26,0,310,729),2005=>array(82,0,454,729),2006=>array(84,0,466,729),2007=>array(26,0,230,729),2008=>array(84,0,778,513),2009=>array(26,0,399,729),2010=>array(26,0,679,729),2011=>array(82,0,507,430),2012=>array(26,0,536,729),2013=>array(84,0,611,729),2014=>array(84,0,393,729),2015=>array(49,0,567,729),2016=>array(26,0,399,729),2017=>array(26,0,536,729),2018=>array(49,0,485,729),2019=>array(84,0,393,729),2020=>array(84,0,393,612),2021=>array(84,0,386,729),2022=>array(49,0,485,729),2023=>array(49,0,485,729),2027=>array(95,673,358,745),2028=>array(29,609,421,800),2029=>array(185,658,274,758),2030=>array(83,616,365,800),2031=>array(40,616,410,800),2032=>array(29,609,421,800),2033=>array(40,616,410,800),2034=>array(180,-184,270,-84),2035=>array(93,659,355,758),2036=>array(88,557,194,760),2037=>array(88,557,194,760),2040=>array(44,0,460,498),2041=>array(44,0,460,483),2042=>array(-9,0,334,72),3647=>array(77,-138,514,769),3713=>array(57,-10,546,560),3714=>array(61,-17,622,568),3716=>array(60,-10,558,568),3719=>array(48,-238,374,568),3720=>array(56,-0,517,575),3722=>array(61,-234,622,568),3725=>array(50,-8,558,573),3732=>array(82,-14,533,560),3733=>array(57,-15,508,579),3734=>array(0,-240,528,560),3735=>array(38,-8,540,571),3737=>array(42,-14,534,568),3738=>array(32,-8,501,561),3739=>array(32,-8,501,760),3740=>array(39,-8,652,614),3741=>array(82,-14,608,760),3742=>array(45,-8,572,561),3743=>array(45,-8,572,760),3745=>array(28,-14,572,547),3746=>array(50,-8,558,760),3747=>array(61,-8,571,568),3749=>array(35,-8,525,568),3751=>array(50,-13,502,560),3754=>array(35,-8,620,679),3755=>array(56,-12,686,575),3757=>array(50,-14,502,560),3758=>array(61,-8,615,605),3759=>array(89,-166,668,579),3760=>array(48,-13,530,563),3761=>array(-521,639,-39,880),3762=>array(54,0,426,560),3763=>array(-382,0,426,806),3764=>array(-535,615,-66,926),3765=>array(-535,615,0,926),3766=>array(-535,615,-66,926),3767=>array(-535,615,0,926),3768=>array(-338,-350,-145,-38),3769=>array(-377,-306,-137,-40),3771=>array(-521,639,-39,880),3772=>array(-550,-278,6,-39),3773=>array(57,-240,558,715),3776=>array(53,-14,292,560),3777=>array(53,-14,538,560),3778=>array(-20,-5,359,896),3779=>array(40,-14,441,892),3780=>array(83,-11,401,886),3782=>array(64,-232,517,557),3784=>array(-330,618,-250,792),3785=>array(-507,609,-41,891),3786=>array(-536,598,21,869),3787=>array(-416,609,-163,890),3788=>array(-550,636,6,875),3789=>array(-382,620,-198,806),3792=>array(59,-14,513,547),3793=>array(43,-75,524,576),3794=>array(43,-66,491,711),3795=>array(9,-9,624,830),3796=>array(43,-83,541,711),3797=>array(43,-83,541,711),3798=>array(39,-8,670,812),3799=>array(57,-240,546,560),3800=>array(66,-210,612,557),3801=>array(46,-4,559,571),3804=>array(56,-12,853,575),3805=>array(56,-12,876,575),4256=>array(53,-15,734,828),4257=>array(48,-0,634,828),4258=>array(48,-148,584,837),4259=>array(48,-15,703,828),4260=>array(44,0,497,837),4261=>array(35,0,643,837),4262=>array(26,-15,625,828),4263=>array(53,-15,796,837),4264=>array(26,0,351,874),4265=>array(53,0,505,828),4266=>array(26,-15,706,828),4267=>array(53,-15,742,828),4268=>array(57,0,510,828),4269=>array(44,-167,725,837),4270=>array(22,-15,646,837),4271=>array(35,0,510,828),4272=>array(48,-15,768,828),4273=>array(57,-15,510,828),4274=>array(57,-0,510,837),4275=>array(44,-182,725,837),4276=>array(44,0,735,834),4277=>array(40,0,612,828),4278=>array(57,-15,510,837),4279=>array(48,0,501,828),4280=>array(53,-15,505,828),4281=>array(57,0,510,828),4282=>array(53,-15,688,837),4283=>array(53,-15,729,828),4284=>array(57,-0,510,828),4285=>array(44,-15,517,837),4286=>array(57,-0,510,828),4287=>array(26,0,626,828),4288=>array(26,-15,707,828),4289=>array(57,0,510,828),4290=>array(48,-15,571,837),4291=>array(26,0,479,828),4292=>array(48,0,486,828),4293=>array(35,-15,629,837),4304=>array(44,-15,413,592),4305=>array(44,-14,422,837),4306=>array(40,-235,483,551),4307=>array(44,-230,684,547),4308=>array(44,-236,404,547),4309=>array(44,-236,413,547),4310=>array(18,-14,407,838),4311=>array(44,-14,677,547),4312=>array(44,0,422,547),4313=>array(40,-236,410,542),4314=>array(44,-230,914,552),4315=>array(44,-15,413,837),4316=>array(57,-15,426,833),4317=>array(44,-0,664,547),4318=>array(44,-15,413,833),4319=>array(44,-236,413,551),4320=>array(44,0,672,833),4321=>array(57,-15,426,827),4322=>array(40,-236,549,680),4323=>array(4,-236,417,571),4324=>array(44,-236,690,547),4325=>array(44,-236,404,828),4326=>array(44,-230,664,546),4327=>array(44,-236,413,538),4328=>array(26,-15,409,837),4329=>array(57,0,426,837),4330=>array(40,-236,475,532),4331=>array(44,-14,413,828),4332=>array(57,-15,439,837),4333=>array(44,-236,424,827),4334=>array(57,-15,426,827),4335=>array(9,-235,400,572),4336=>array(44,-15,413,837),4337=>array(53,-15,422,837),4338=>array(44,-141,413,547),4339=>array(44,-236,413,546),4340=>array(44,-236,413,837),4341=>array(44,-15,464,837),4342=>array(44,-236,700,547),4343=>array(40,-236,457,547),4344=>array(44,-236,413,538),4345=>array(35,-236,479,551),4346=>array(44,-77,413,547),4347=>array(48,-10,355,484),4348=>array(44,420,243,837),5121=>array(7,1,608,730),5122=>array(7,0,608,1037),5123=>array(7,0,608,729),5124=>array(7,0,608,914),5125=>array(88,0,640,729),5126=>array(88,0,640,914),5127=>array(88,0,640,913),5129=>array(88,0,640,729),5130=>array(52,0,604,729),5131=>array(52,0,604,914),5132=>array(88,1,744,730),5133=>array(7,1,699,730),5134=>array(88,0,744,729),5135=>array(7,0,699,729),5136=>array(88,0,744,914),5137=>array(7,0,699,914),5138=>array(88,0,818,729),5139=>array(88,0,818,729),5140=>array(88,0,818,914),5141=>array(88,0,818,914),5142=>array(88,0,640,914),5143=>array(88,0,782,729),5144=>array(52,0,818,729),5145=>array(88,0,782,914),5146=>array(52,0,818,914),5147=>array(52,0,604,914),5149=>array(88,629,178,729),5150=>array(60,326,439,734),5151=>array(41,356,326,714),5152=>array(41,356,326,714),5153=>array(60,398,301,674),5154=>array(60,391,301,667),5155=>array(60,398,305,667),5156=>array(60,398,301,667),5157=>array(31,327,365,733),5158=>array(60,326,298,734),5159=>array(88,312,178,412),5160=>array(60,503,301,563),5161=>array(60,399,301,667),5162=>array(60,399,301,691),5163=>array(7,1,926,730),5164=>array(7,0,763,729),5165=>array(88,0,803,729),5166=>array(52,0,950,729),5167=>array(7,0,608,729),5168=>array(7,0,608,1037),5169=>array(7,0,608,729),5170=>array(7,0,608,914),5171=>array(52,0,604,729),5172=>array(52,0,604,914),5173=>array(52,0,604,913),5175=>array(52,0,604,729),5176=>array(52,0,604,729),5177=>array(52,0,604,914),5178=>array(88,0,744,729),5179=>array(7,0,699,729),5180=>array(88,0,744,729),5181=>array(7,0,699,729),5182=>array(88,0,744,914),5183=>array(7,0,699,914),5184=>array(88,0,782,729),5185=>array(52,0,818,729),5186=>array(88,0,782,914),5187=>array(52,0,818,914),5188=>array(88,0,782,729),5189=>array(52,0,818,729),5190=>array(88,0,782,914),5191=>array(52,0,818,914),5192=>array(52,0,604,913),5193=>array(60,326,408,734),5194=>array(60,326,124,734),5196=>array(78,-14,581,729),5197=>array(78,0,581,1037),5198=>array(78,0,581,743),5199=>array(78,0,581,914),5200=>array(52,0,604,729),5201=>array(52,0,604,914),5202=>array(52,0,604,913),5204=>array(52,0,604,729),5205=>array(53,0,605,729),5206=>array(53,0,605,914),5207=>array(88,-14,751,729),5208=>array(78,-14,748,729),5209=>array(88,0,751,743),5210=>array(78,0,748,743),5211=>array(88,0,751,914),5212=>array(78,0,748,914),5213=>array(88,0,782,729),5214=>array(52,0,758,729),5215=>array(88,0,782,914),5216=>array(52,0,758,914),5217=>array(88,0,800,729),5218=>array(53,0,758,729),5219=>array(88,0,800,914),5220=>array(53,0,758,914),5221=>array(105,0,800,729),5222=>array(60,326,341,734),5223=>array(78,-14,741,734),5224=>array(78,0,741,743),5225=>array(52,0,730,734),5226=>array(53,0,752,734),5227=>array(31,0,478,743),5228=>array(88,0,535,1037),5229=>array(88,0,535,743),5230=>array(88,0,535,914),5231=>array(31,-14,478,729),5232=>array(31,-14,478,914),5233=>array(31,-14,561,913),5234=>array(88,-14,535,729),5235=>array(88,-14,535,914),5236=>array(88,0,686,743),5237=>array(31,0,642,743),5238=>array(88,0,703,743),5239=>array(88,0,683,743),5240=>array(88,0,703,914),5241=>array(88,0,683,914),5242=>array(88,-14,686,729),5243=>array(31,-14,642,729),5244=>array(88,-14,686,914),5245=>array(31,-14,642,914),5246=>array(88,-14,703,729),5247=>array(88,-14,683,729),5248=>array(88,-14,703,914),5249=>array(88,-14,683,914),5250=>array(105,-14,703,729),5251=>array(60,318,342,734),5252=>array(24,318,306,734),5253=>array(31,0,626,743),5254=>array(88,0,648,743),5255=>array(31,-14,626,734),5256=>array(88,-14,648,734),5257=>array(31,0,478,743),5258=>array(88,0,535,1037),5259=>array(88,0,535,743),5260=>array(88,0,535,914),5261=>array(31,-14,478,729),5262=>array(31,-14,478,914),5263=>array(31,-14,561,913),5264=>array(88,-14,535,729),5265=>array(88,-14,535,914),5266=>array(88,0,686,743),5267=>array(31,0,642,743),5268=>array(88,0,703,743),5269=>array(88,0,683,743),5270=>array(88,0,703,914),5271=>array(88,0,683,914),5272=>array(88,-14,686,729),5273=>array(31,-14,642,729),5274=>array(88,-14,686,914),5275=>array(31,-14,642,914),5276=>array(88,-14,703,729),5277=>array(88,-14,683,729),5278=>array(88,-14,703,914),5279=>array(88,-14,683,914),5280=>array(105,-14,703,729),5281=>array(60,318,342,734),5282=>array(60,318,342,734),5283=>array(52,0,461,729),5284=>array(88,0,497,1037),5285=>array(88,0,497,729),5286=>array(88,0,497,914),5287=>array(52,0,461,729),5288=>array(52,0,461,914),5289=>array(52,0,547,913),5290=>array(88,0,497,729),5291=>array(88,0,497,914),5292=>array(88,0,586,729),5293=>array(52,0,640,729),5294=>array(88,0,667,729),5295=>array(88,0,635,729),5296=>array(88,0,667,914),5297=>array(88,0,635,914),5298=>array(88,0,586,729),5299=>array(52,0,640,729),5300=>array(88,0,586,914),5301=>array(52,0,640,914),5302=>array(88,0,667,729),5303=>array(88,0,635,729),5304=>array(88,0,667,914),5305=>array(88,0,635,914),5306=>array(105,0,667,729),5307=>array(60,326,298,734),5308=>array(60,326,408,734),5309=>array(60,326,298,734),5312=>array(52,-14,736,436),5313=>array(31,-14,714,755),5314=>array(31,-14,714,436),5315=>array(4,-14,688,636),5316=>array(52,0,736,450),5317=>array(52,0,736,636),5318=>array(52,0,736,635),5319=>array(31,0,714,450),5320=>array(31,0,714,636),5321=>array(88,-14,932,436),5322=>array(52,-14,879,436),5323=>array(88,0,923,450),5324=>array(31,0,714,450),5325=>array(88,0,923,636),5326=>array(31,0,714,636),5327=>array(31,0,714,635),5328=>array(60,484,491,736),5329=>array(60,318,358,734),5330=>array(60,484,491,736),5331=>array(52,0,736,450),5332=>array(31,0,714,755),5333=>array(31,0,714,450),5334=>array(31,0,714,636),5335=>array(52,0,736,450),5336=>array(52,0,736,636),5337=>array(52,0,736,635),5338=>array(31,0,714,450),5339=>array(31,0,714,636),5340=>array(88,0,932,450),5341=>array(52,0,879,450),5342=>array(88,0,923,450),5343=>array(31,0,875,450),5344=>array(88,0,923,636),5345=>array(31,0,875,636),5346=>array(88,0,932,450),5347=>array(52,0,879,450),5348=>array(88,0,932,636),5349=>array(52,0,879,636),5350=>array(88,0,923,450),5351=>array(31,0,875,450),5352=>array(88,0,923,636),5353=>array(31,0,875,636),5354=>array(60,484,491,736),5356=>array(52,0,604,729),5357=>array(31,0,455,729),5358=>array(88,0,584,1037),5359=>array(88,0,512,729),5360=>array(88,0,512,914),5361=>array(31,0,455,729),5362=>array(31,0,455,914),5363=>array(31,0,540,913),5364=>array(88,0,512,729),5365=>array(88,0,512,914),5366=>array(88,0,663,729),5367=>array(31,0,626,729),5368=>array(88,0,682,729),5369=>array(88,0,642,729),5370=>array(88,0,682,914),5371=>array(88,0,642,914),5372=>array(88,0,663,729),5373=>array(31,0,626,729),5374=>array(88,0,663,914),5375=>array(31,0,626,914),5376=>array(88,0,682,729),5377=>array(88,0,642,729),5378=>array(88,0,682,914),5379=>array(88,0,642,914),5380=>array(105,0,682,729),5381=>array(60,326,327,734),5382=>array(60,318,329,741),5383=>array(60,326,327,734),5392=>array(31,-14,610,743),5393=>array(31,-14,610,743),5394=>array(31,-14,610,914),5395=>array(31,-14,772,464),5396=>array(31,-14,772,636),5397=>array(31,-14,772,464),5398=>array(31,-14,772,636),5399=>array(88,-14,788,743),5400=>array(31,-14,733,743),5401=>array(88,-14,788,743),5402=>array(31,-14,733,743),5403=>array(88,-14,788,914),5404=>array(31,-14,733,914),5405=>array(88,-14,996,464),5406=>array(31,-14,938,464),5407=>array(88,-14,996,636),5408=>array(31,-14,938,636),5409=>array(88,-14,996,464),5410=>array(31,-14,938,464),5411=>array(88,-14,996,636),5412=>array(31,-14,938,636),5413=>array(60,476,527,737),5414=>array(52,0,476,729),5415=>array(88,0,512,1037),5416=>array(88,0,512,729),5417=>array(88,0,512,914),5418=>array(52,0,476,729),5419=>array(52,0,479,914),5420=>array(52,0,564,913),5421=>array(88,0,512,729),5422=>array(88,0,512,914),5423=>array(88,0,672,729),5424=>array(52,0,650,729),5425=>array(88,0,682,729),5426=>array(88,0,685,729),5427=>array(88,0,682,914),5428=>array(88,0,685,914),5429=>array(88,0,672,729),5430=>array(52,0,650,729),5431=>array(88,0,674,914),5432=>array(52,0,650,914),5433=>array(88,0,682,729),5434=>array(88,0,685,729),5435=>array(88,0,682,914),5436=>array(88,0,685,914),5437=>array(105,0,682,729),5438=>array(60,326,327,734),5440=>array(60,399,301,667),5441=>array(60,326,387,734),5442=>array(88,-14,772,436),5443=>array(52,-14,736,436),5444=>array(52,0,736,450),5445=>array(88,0,772,755),5446=>array(88,0,772,450),5447=>array(88,0,772,636),5448=>array(88,0,512,729),5449=>array(88,0,512,914),5450=>array(88,0,512,729),5451=>array(31,0,455,729),5452=>array(31,0,455,914),5453=>array(31,0,455,729),5454=>array(88,0,663,914),5455=>array(31,0,626,914),5456=>array(60,326,327,734),5458=>array(52,0,604,729),5459=>array(66,0,608,744),5460=>array(66,-15,608,1037),5461=>array(66,-15,608,729),5462=>array(66,-15,608,914),5463=>array(34,0,602,662),5464=>array(34,0,602,914),5465=>array(52,0,620,662),5466=>array(52,0,620,914),5467=>array(88,0,798,914),5468=>array(52,0,818,914),5469=>array(60,326,416,695),5470=>array(78,-14,581,743),5471=>array(78,-14,581,743),5472=>array(78,-14,581,743),5473=>array(78,-14,581,743),5474=>array(78,-14,581,914),5475=>array(78,-14,581,914),5476=>array(36,0,604,729),5477=>array(36,0,604,914),5478=>array(53,0,621,729),5479=>array(53,0,621,914),5480=>array(88,0,816,914),5481=>array(53,0,758,914),5482=>array(60,326,421,734),5492=>array(31,0,695,743),5493=>array(52,0,717,743),5494=>array(52,0,717,914),5495=>array(31,-14,695,729),5496=>array(31,-14,695,914),5497=>array(52,-14,717,729),5498=>array(52,-14,717,914),5499=>array(60,318,458,734),5500=>array(88,0,589,729),5501=>array(60,326,387,734),5502=>array(60,0,912,1037),5503=>array(60,0,912,743),5504=>array(60,0,912,914),5505=>array(60,-14,854,734),5506=>array(60,-14,854,914),5507=>array(60,-14,912,734),5508=>array(60,-14,912,914),5509=>array(60,318,718,734),5514=>array(31,0,695,743),5515=>array(52,0,717,743),5516=>array(31,-14,695,729),5517=>array(52,-14,717,729),5518=>array(60,0,1103,1037),5519=>array(60,0,1103,743),5520=>array(60,0,1103,914),5521=>array(60,-14,813,736),5522=>array(60,-14,813,914),5523=>array(60,-14,1103,736),5524=>array(60,-14,1103,914),5525=>array(60,332,580,736),5526=>array(60,332,916,736),5536=>array(31,0,714,692),5537=>array(31,0,714,692),5538=>array(52,-242,736,450),5539=>array(52,-242,736,636),5540=>array(31,-242,714,450),5541=>array(31,-242,714,636),5542=>array(60,338,491,736),5543=>array(52,0,564,729),5544=>array(14,0,527,729),5545=>array(14,0,527,914),5546=>array(52,0,564,729),5547=>array(52,0,564,914),5548=>array(14,0,527,729),5549=>array(14,0,527,914),5550=>array(4,326,327,734),5551=>array(88,-14,535,729),5598=>array(88,0,640,729),5601=>array(50,0,602,729),5702=>array(60,326,372,734),5703=>array(60,240,372,820),5742=>array(51,0,352,306),5743=>array(60,0,854,743),5744=>array(60,0,1090,743),5745=>array(60,0,1438,743),5746=>array(60,0,1438,914),5747=>array(60,-14,1149,736),5748=>array(60,-14,1149,914),5749=>array(60,-14,1438,736),5750=>array(60,-14,1438,914),5760=>array(-9,246,438,328),5761=>array(-9,-125,453,328),5762=>array(-9,-125,650,328),5763=>array(-9,-125,847,328),5764=>array(-9,-125,1044,328),5765=>array(-9,-125,1242,328),5766=>array(-9,246,453,697),5767=>array(-9,246,650,697),5768=>array(-9,246,847,697),5769=>array(-9,246,1044,697),5770=>array(-9,246,1242,697),5771=>array(-9,-125,457,697),5772=>array(-9,-125,655,697),5773=>array(-9,-125,854,697),5774=>array(-9,-125,1052,697),5775=>array(-9,-125,1250,697),5776=>array(-9,41,453,533),5777=>array(-9,41,650,533),5778=>array(-9,41,846,533),5779=>array(-9,41,1043,533),5780=>array(-9,41,1242,533),5781=>array(-9,-125,457,697),5782=>array(-9,-125,686,697),5783=>array(-9,-83,719,328),5784=>array(-9,-240,1093,328),5785=>array(-9,246,1044,902),5786=>array(-9,82,624,328),5787=>array(49,28,466,544),5788=>array(-9,28,407,544),7424=>array(26,0,506,547),7425=>array(4,0,603,547),7426=>array(54,-14,836,560),7427=>array(27,0,478,547),7428=>array(49,-14,439,560),7429=>array(82,0,496,547),7430=>array(16,0,496,547),7431=>array(82,0,399,547),7432=>array(57,-14,424,561),7433=>array(84,-213,166,547),7434=>array(0,-14,279,547),7435=>array(82,0,519,547),7436=>array(0,0,448,560),7437=>array(82,0,598,547),7438=>array(82,0,503,547),7439=>array(49,-14,501,560),7440=>array(56,-14,445,560),7441=>array(49,22,567,524),7442=>array(49,57,567,489),7443=>array(22,2,597,543),7444=>array(49,-14,874,560),7446=>array(49,273,501,560),7447=>array(49,-14,501,273),7448=>array(66,0,427,547),7449=>array(22,0,457,547),7450=>array(22,0,457,547),7451=>array(26,0,498,547),7452=>array(82,-16,459,547),7453=>array(76,37,582,495),7454=>array(76,38,771,496),7455=>array(21,-238,525,560),7456=>array(26,0,506,547),7457=>array(38,0,699,547),7458=>array(39,0,434,547),7459=>array(53,-14,419,547),7462=>array(79,0,448,560),7463=>array(26,0,506,547),7464=>array(66,0,441,547),7465=>array(66,0,427,547),7466=>array(40,0,492,547),7467=>array(33,0,501,547),7468=>array(4,326,383,734),7469=>array(2,326,516,734),7470=>array(56,326,349,734),7472=>array(56,326,403,734),7473=>array(56,326,322,734),7474=>array(36,326,303,734),7475=>array(31,318,393,742),7476=>array(56,326,371,734),7477=>array(56,326,112,734),7478=>array(-30,214,112,734),7479=>array(56,326,384,734),7480=>array(56,326,313,734),7481=>array(56,326,434,734),7482=>array(56,326,369,734),7483=>array(56,326,369,734),7484=>array(31,318,415,742),7485=>array(31,318,365,742),7486=>array(56,326,323,734),7487=>array(56,326,378,734),7488=>array(-2,326,348,734),7489=>array(49,318,366,734),7490=>array(19,326,542,734),7491=>array(34,318,296,640),7492=>array(34,318,296,640),7493=>array(31,318,309,640),7494=>array(34,318,527,640),7495=>array(51,318,329,751),7496=>array(31,318,309,751),7497=>array(31,318,319,640),7498=>array(31,318,319,640),7499=>array(37,318,268,640),7500=>array(36,318,268,640),7501=>array(31,209,309,640),7502=>array(53,207,105,632),7503=>array(51,326,327,751),7504=>array(51,326,504,640),7505=>array(51,209,312,640),7506=>array(31,318,316,640),7507=>array(31,318,277,640),7508=>array(31,479,316,640),7509=>array(31,318,316,479),7510=>array(51,209,329,640),7511=>array(15,326,209,719),7512=>array(48,318,308,632),7513=>array(48,347,366,604),7514=>array(51,319,504,633),7515=>array(17,326,319,632),7517=>array(53,209,321,755),7518=>array(9,209,319,632),7519=>array(31,318,316,742),7520=>array(31,209,342,635),7521=>array(16,209,312,633),7522=>array(53,0,105,425),7523=>array(51,0,233,313),7524=>array(48,-8,308,306),7525=>array(17,0,319,306),7526=>array(53,-117,321,429),7527=>array(9,-117,319,306),7528=>array(53,-117,330,313),7529=>array(31,-117,342,309),7530=>array(16,-117,312,307),7543=>array(82,-208,522,560),7544=>array(56,326,371,734),7547=>array(51,0,283,547),7549=>array(22,-208,579,560),7557=>array(63,-208,246,760),7579=>array(31,318,309,640),7580=>array(31,318,277,640),7581=>array(31,287,277,640),7582=>array(31,318,316,751),7583=>array(37,318,268,640),7584=>array(13,326,211,751),7585=>array(-10,209,153,632),7586=>array(31,209,309,632),7587=>array(48,209,308,632),7588=>array(32,326,179,751),7589=>array(53,326,168,632),7590=>array(32,326,179,632),7591=>array(32,326,179,632),7592=>array(-75,209,155,751),7593=>array(53,209,168,751),7594=>array(40,209,155,751),7595=>array(49,326,283,640),7596=>array(51,209,504,640),7597=>array(51,209,504,633),7598=>array(-10,209,313,640),7599=>array(51,209,375,640),7600=>array(49,326,312,640),7601=>array(31,318,316,640),7602=>array(31,210,316,751),7603=>array(31,209,268,640),7604=>array(-10,209,202,751),7605=>array(15,209,209,719),7606=>array(41,318,401,632),7607=>array(31,318,320,632),7608=>array(51,317,290,632),7609=>array(53,326,309,632),7610=>array(17,326,319,632),7611=>array(24,326,273,632),7612=>array(24,209,336,632),7613=>array(24,296,273,632),7614=>array(24,207,297,632),7615=>array(31,320,316,756),7620=>array(-410,616,-40,800),7621=>array(-410,616,-40,800),7622=>array(-410,616,-40,800),7623=>array(-410,616,-40,800),7624=>array(-421,616,-29,800),7625=>array(-421,616,-29,800),7680=>array(7,-241,608,729),7681=>array(54,-241,470,560),7682=>array(88,0,554,914),7683=>array(81,-14,522,915),7684=>array(88,-183,554,729),7685=>array(82,-183,522,760),7686=>array(88,-156,554,729),7687=>array(82,-156,522,760),7688=>array(50,-193,580,928),7689=>array(49,-193,439,800),7690=>array(88,0,640,914),7691=>array(49,-14,490,942),7692=>array(88,-183,640,729),7693=>array(49,-183,490,760),7694=>array(88,-156,640,729),7695=>array(49,-156,490,760),7696=>array(88,-192,640,729),7697=>array(49,-193,490,760),7698=>array(88,-240,640,729),7699=>array(49,-240,490,760),7700=>array(88,0,511,1044),7701=>array(49,-14,506,921),7702=>array(88,0,511,1044),7703=>array(49,-14,506,921),7704=>array(88,-213,511,729),7705=>array(49,-213,506,560),7706=>array(88,-192,511,729),7707=>array(49,-192,506,560),7708=>array(88,-193,511,928),7709=>array(49,-193,506,785),7710=>array(88,0,466,914),7711=>array(21,0,334,942),7712=>array(50,-14,624,887),7713=>array(49,-208,490,745),7714=>array(88,0,589,913),7715=>array(81,0,494,915),7716=>array(88,-183,589,729),7717=>array(82,-183,494,760),7718=>array(88,0,589,914),7719=>array(-9,0,494,913),7720=>array(7,-193,589,729),7721=>array(0,-193,494,760),7722=>array(88,-222,589,729),7723=>array(82,-222,494,760),7724=>array(0,-192,290,729),7725=>array(-20,-192,271,760),7726=>array(3,0,264,1044),7727=>array(-5,0,256,886),7728=>array(88,0,609,928),7729=>array(82,0,519,928),7730=>array(88,-183,609,729),7731=>array(82,-183,519,760),7732=>array(88,-156,609,729),7733=>array(82,-156,519,760),7734=>array(88,-183,497,729),7735=>array(88,-183,171,760),7736=>array(1,-183,497,927),7737=>array(-1,-183,262,899),7738=>array(88,-156,497,729),7739=>array(-5,-156,258,760),7740=>array(88,-240,497,729),7741=>array(-15,-240,266,760),7742=>array(88,0,689,928),7743=>array(82,0,800,800),7744=>array(88,0,689,914),7745=>array(82,0,800,760),7746=>array(88,-183,689,729),7747=>array(82,-183,800,560),7748=>array(88,0,585,914),7749=>array(82,0,494,760),7750=>array(88,-183,585,729),7751=>array(82,-183,494,560),7752=>array(88,-156,585,729),7753=>array(82,-156,494,560),7754=>array(88,-240,585,729),7755=>array(82,-240,494,560),7756=>array(50,-14,658,1044),7757=>array(49,-14,501,881),7758=>array(50,-14,658,1042),7759=>array(49,-14,501,882),7760=>array(50,-14,658,1044),7761=>array(49,-14,501,921),7762=>array(50,-14,658,1044),7763=>array(49,-14,501,921),7764=>array(88,0,512,928),7765=>array(82,-208,522,800),7766=>array(88,0,512,914),7767=>array(82,-208,522,760),7768=>array(88,0,600,913),7769=>array(82,0,370,760),7770=>array(88,-183,600,729),7771=>array(82,-183,370,560),7772=>array(88,-183,600,899),7773=>array(82,-183,370,745),7774=>array(88,-156,600,729),7775=>array(37,-156,370,560),7776=>array(59,-14,521,914),7777=>array(48,-14,425,760),7778=>array(59,-183,521,742),7779=>array(48,-183,425,560),7780=>array(59,-14,521,928),7781=>array(48,-14,437,800),7782=>array(59,-14,521,1042),7783=>array(48,-14,425,973),7784=>array(59,-183,521,914),7785=>array(48,-183,425,733),7786=>array(-3,0,553,914),7787=>array(24,0,332,942),7788=>array(-3,-183,553,729),7789=>array(24,-183,332,702),7790=>array(-3,-156,553,729),7791=>array(24,-156,352,702),7792=>array(-3,-240,553,729),7793=>array(24,-240,354,702),7794=>array(78,-183,581,729),7795=>array(76,-183,489,560),7796=>array(78,-192,581,729),7797=>array(76,-192,489,560),7798=>array(78,-213,581,729),7799=>array(76,-213,489,560),7800=>array(78,-14,581,1044),7801=>array(76,-14,489,990),7802=>array(78,-14,581,1025),7803=>array(76,-14,489,869),7804=>array(7,0,608,936),7805=>array(26,0,506,777),7806=>array(7,-183,608,729),7807=>array(26,-183,506,547),7808=>array(30,0,861,931),7809=>array(38,0,699,802),7810=>array(30,0,861,931),7811=>array(38,0,699,803),7812=>array(30,0,861,913),7813=>array(38,0,699,758),7814=>array(30,0,861,913),7815=>array(38,0,699,760),7816=>array(30,-183,861,729),7817=>array(38,-183,699,547),7818=>array(26,0,589,914),7819=>array(26,0,503,760),7820=>array(26,0,589,913),7821=>array(26,0,503,758),7822=>array(-2,0,552,914),7823=>array(26,-208,506,760),7824=>array(40,0,576,928),7825=>array(39,0,434,800),7826=>array(40,-183,576,729),7827=>array(39,-183,434,547),7828=>array(40,-156,576,729),7829=>array(39,-156,434,547),7830=>array(82,-156,494,760),7831=>array(1,0,332,913),7832=>array(38,0,699,878),7833=>array(26,-208,506,878),7834=>array(54,-14,605,760),7835=>array(21,0,334,942),7836=>array(0,0,334,760),7837=>array(21,0,334,760),7838=>array(78,-14,642,743),7839=>array(49,-14,501,742),7840=>array(7,-183,608,729),7841=>array(54,-183,470,560),7842=>array(7,0,608,992),7843=>array(54,-14,470,810),7844=>array(7,0,608,1028),7845=>array(54,-14,527,846),7846=>array(7,0,608,1028),7847=>array(54,-14,470,847),7848=>array(7,0,608,1044),7849=>array(54,-14,519,862),7850=>array(7,0,608,1057),7851=>array(54,-14,470,875),7852=>array(7,-183,608,928),7853=>array(54,-183,470,800),7854=>array(7,0,608,1044),7855=>array(54,-14,470,877),7856=>array(7,0,608,1044),7857=>array(54,-14,470,877),7858=>array(7,0,608,1068),7859=>array(54,-14,470,901),7860=>array(7,0,608,1043),7861=>array(54,-14,470,876),7862=>array(7,-183,608,946),7863=>array(54,-183,470,765),7864=>array(88,-183,511,729),7865=>array(49,-183,506,560),7866=>array(88,0,511,992),7867=>array(49,-14,506,810),7868=>array(88,0,511,921),7869=>array(49,-14,506,777),7870=>array(88,0,573,1028),7871=>array(49,-14,552,846),7872=>array(88,0,511,1028),7873=>array(49,-14,506,847),7874=>array(88,0,558,1044),7875=>array(49,-14,545,862),7876=>array(88,0,511,1057),7877=>array(49,-14,506,875),7878=>array(88,-183,511,928),7879=>array(49,-183,506,800),7880=>array(40,0,237,992),7881=>array(30,0,227,811),7882=>array(88,-183,177,729),7883=>array(83,-183,166,760),7884=>array(50,-183,658,742),7885=>array(49,-183,501,560),7886=>array(50,-14,658,992),7887=>array(49,-14,501,810),7888=>array(50,-14,658,1028),7889=>array(49,-14,541,846),7890=>array(50,-14,658,1028),7891=>array(49,-14,501,847),7892=>array(50,-14,658,1044),7893=>array(49,-14,533,862),7894=>array(50,-14,658,1057),7895=>array(49,-14,501,875),7896=>array(50,-183,658,928),7897=>array(49,-183,501,800),7898=>array(45,-14,688,927),7899=>array(52,-14,543,800),7900=>array(45,-14,688,927),7901=>array(52,-14,543,800),7902=>array(45,-14,688,992),7903=>array(52,-14,543,810),7904=>array(45,-14,688,921),7905=>array(52,-14,543,777),7906=>array(45,-183,688,760),7907=>array(52,-183,543,615),7908=>array(78,-183,581,729),7909=>array(76,-183,489,560),7910=>array(78,-14,581,992),7911=>array(76,-14,489,810),7912=>array(76,-4,717,927),7913=>array(77,-14,609,800),7914=>array(76,-4,717,927),7915=>array(77,-14,609,800),7916=>array(76,-4,717,992),7917=>array(77,-14,609,810),7918=>array(76,-4,717,921),7919=>array(77,-14,609,777),7920=>array(76,-183,717,760),7921=>array(77,-183,609,615),7922=>array(-2,0,552,931),7923=>array(26,-208,506,802),7924=>array(-2,-183,552,729),7925=>array(26,-208,506,547),7926=>array(-2,0,552,996),7927=>array(26,-208,506,813),7928=>array(-2,0,552,921),7929=>array(26,-208,506,777),7930=>array(88,0,688,729),7931=>array(14,0,416,760),7936=>array(49,-12,550,797),7937=>array(49,-12,550,797),7938=>array(49,-12,550,800),7939=>array(49,-12,550,800),7940=>array(49,-12,550,800),7941=>array(49,-12,550,800),7942=>array(49,-12,550,928),7943=>array(49,-12,550,928),7944=>array(7,0,608,797),7945=>array(7,0,608,797),7946=>array(2,0,782,800),7947=>array(2,0,782,800),7948=>array(3,0,685,800),7949=>array(2,0,714,800),7950=>array(3,0,630,928),7951=>array(1,0,661,928),7952=>array(58,-14,426,797),7953=>array(58,-14,426,797),7954=>array(58,-14,426,800),7955=>array(58,-14,426,800),7956=>array(58,-14,438,800),7957=>array(58,-14,452,800),7960=>array(3,0,583,797),7961=>array(3,0,583,797),7962=>array(2,0,812,800),7963=>array(2,0,820,800),7964=>array(3,0,751,800),7965=>array(2,0,778,800),7968=>array(82,-208,494,797),7969=>array(82,-208,494,797),7970=>array(82,-208,494,800),7971=>array(82,-208,494,800),7972=>array(82,-208,494,800),7973=>array(82,-208,494,800),7974=>array(82,-208,494,928),7975=>array(82,-208,494,928),7976=>array(3,0,665,797),7977=>array(3,0,664,797),7978=>array(2,0,889,800),7979=>array(2,0,892,800),7980=>array(3,0,836,800),7981=>array(2,0,857,800),7982=>array(3,0,752,928),7983=>array(1,0,764,928),7984=>array(68,0,273,797),7985=>array(63,0,273,797),7986=>array(-35,0,307,800),7987=>array(-31,0,313,800),7988=>array(2,0,326,800),7989=>array(-20,0,330,800),7990=>array(-23,0,273,928),7991=>array(-26,0,273,928),7992=>array(3,0,254,797),7993=>array(3,0,249,797),7994=>array(2,0,483,800),7995=>array(2,0,483,800),7996=>array(3,0,425,800),7997=>array(2,0,452,800),7998=>array(3,0,353,928),7999=>array(1,0,356,928),8000=>array(49,-14,501,797),8001=>array(49,-14,501,797),8002=>array(49,-14,501,800),8003=>array(49,-14,501,800),8004=>array(49,-14,501,800),8005=>array(49,-14,501,800),8008=>array(3,-14,673,797),8009=>array(3,-14,713,797),8010=>array(2,-14,935,800),8011=>array(2,-14,939,800),8012=>array(3,-14,794,800),8013=>array(2,-14,823,800),8016=>array(65,-14,469,797),8017=>array(65,-14,469,797),8018=>array(65,-14,469,800),8019=>array(65,-14,469,800),8020=>array(65,-14,469,800),8021=>array(65,-14,469,800),8022=>array(65,-14,469,928),8023=>array(65,-14,469,928),8025=>array(3,0,708,797),8027=>array(2,0,900,800),8029=>array(2,0,913,800),8031=>array(1,0,810,928),8032=>array(59,-14,692,797),8033=>array(59,-14,692,797),8034=>array(59,-14,692,800),8035=>array(59,-14,692,800),8036=>array(59,-14,692,800),8037=>array(59,-14,692,800),8038=>array(59,-14,692,928),8039=>array(59,-14,692,928),8040=>array(3,0,688,797),8041=>array(3,0,725,797),8042=>array(2,0,946,800),8043=>array(2,0,952,800),8044=>array(3,0,817,800),8045=>array(2,0,841,800),8046=>array(3,0,795,928),8047=>array(1,0,823,928),8048=>array(49,-12,550,800),8049=>array(49,-12,550,800),8050=>array(58,-14,426,800),8051=>array(58,-14,426,800),8052=>array(82,-208,494,800),8053=>array(82,-208,494,800),8054=>array(-51,0,273,800),8055=>array(73,0,292,800),8056=>array(49,-14,501,800),8057=>array(49,-14,501,800),8058=>array(65,-14,469,800),8059=>array(65,-14,469,800),8060=>array(59,-14,692,800),8061=>array(59,-14,692,800),8064=>array(49,-208,550,797),8065=>array(49,-208,550,797),8066=>array(49,-208,550,800),8067=>array(49,-208,550,800),8068=>array(49,-208,550,800),8069=>array(49,-208,550,800),8070=>array(49,-208,550,928),8071=>array(49,-208,550,928),8072=>array(7,-208,608,797),8073=>array(7,-208,608,797),8074=>array(2,-208,782,800),8075=>array(2,-208,782,800),8076=>array(3,-208,685,800),8077=>array(2,-208,714,800),8078=>array(3,-208,630,928),8079=>array(1,-208,661,928),8080=>array(82,-208,494,797),8081=>array(82,-208,494,797),8082=>array(82,-208,494,800),8083=>array(82,-208,494,800),8084=>array(82,-208,494,800),8085=>array(82,-208,494,800),8086=>array(82,-208,494,928),8087=>array(82,-208,494,928),8088=>array(3,-208,665,797),8089=>array(3,-208,664,797),8090=>array(2,-208,889,800),8091=>array(2,-208,892,800),8092=>array(3,-208,836,800),8093=>array(2,-208,857,800),8094=>array(3,-208,752,928),8095=>array(1,-208,764,928),8096=>array(59,-208,692,797),8097=>array(59,-208,692,797),8098=>array(59,-208,692,800),8099=>array(59,-208,692,800),8100=>array(59,-208,692,800),8101=>array(59,-208,692,800),8102=>array(59,-208,692,928),8103=>array(59,-208,692,928),8104=>array(3,-208,688,797),8105=>array(3,-208,725,797),8106=>array(2,-208,946,800),8107=>array(2,-208,952,800),8108=>array(3,-208,817,800),8109=>array(2,-208,841,800),8110=>array(3,-208,795,928),8111=>array(1,-208,823,928),8112=>array(49,-12,550,785),8113=>array(49,-12,550,745),8114=>array(49,-208,550,800),8115=>array(49,-208,550,559),8116=>array(49,-208,550,800),8118=>array(49,-12,550,777),8119=>array(49,-208,550,777),8120=>array(7,0,608,928),8121=>array(7,0,608,899),8122=>array(-2,0,637,800),8123=>array(7,0,608,800),8124=>array(7,-208,608,729),8125=>array(171,595,278,797),8126=>array(192,-208,290,-45),8127=>array(171,595,278,797),8128=>array(80,639,370,777),8129=>array(80,659,370,928),8130=>array(82,-208,494,800),8131=>array(82,-208,494,560),8132=>array(82,-208,494,800),8134=>array(82,-208,494,777),8135=>array(82,-208,494,777),8136=>array(-2,0,667,800),8137=>array(-11,0,614,800),8138=>array(-2,0,750,800),8139=>array(-6,0,689,800),8140=>array(88,-208,589,729),8141=>array(60,595,402,800),8142=>array(79,595,403,800),8143=>array(80,595,370,928),8144=>array(-9,0,273,785),8145=>array(-13,0,273,745),8146=>array(-18,0,273,978),8147=>array(2,0,281,978),8150=>array(-13,0,278,777),8151=>array(-12,0,279,928),8152=>array(-5,0,271,928),8153=>array(1,0,264,899),8154=>array(-2,0,339,800),8155=>array(-9,0,280,800),8157=>array(55,595,399,800),8158=>array(65,595,416,800),8159=>array(80,595,370,928),8160=>array(65,-14,469,785),8161=>array(65,-14,469,745),8162=>array(65,-14,469,978),8163=>array(65,-14,469,978),8164=>array(82,-208,522,797),8165=>array(82,-208,522,797),8166=>array(65,-14,469,777),8167=>array(65,-14,469,928),8168=>array(-2,0,552,928),8169=>array(-2,0,552,899),8170=>array(-2,0,763,800),8171=>array(-14,0,739,800),8172=>array(3,0,586,797),8173=>array(75,659,356,978),8174=>array(94,659,374,978),8175=>array(75,617,286,800),8178=>array(59,-208,692,800),8179=>array(59,-208,692,547),8180=>array(59,-208,692,800),8182=>array(59,-14,692,777),8183=>array(59,-208,692,777),8184=>array(-2,-14,796,800),8185=>array(-6,-14,676,800),8186=>array(-2,0,796,800),8187=>array(-17,0,677,800),8188=>array(34,-208,654,738),8189=>array(163,616,374,800),8190=>array(171,595,278,797),8208=>array(44,234,281,314),8209=>array(44,234,281,314),8210=>array(44,239,529,309),8211=>array(44,239,406,309),8212=>array(44,239,856,309),8213=>array(0,239,900,309),8214=>array(114,-236,334,764),8215=>array(-9,-236,459,-9),8216=>array(76,489,206,729),8217=>array(78,499,207,729),8218=>array(76,-116,206,124),8219=>array(78,499,207,729),8220=>array(76,489,386,729),8221=>array(76,489,386,729),8222=>array(76,-116,386,124),8223=>array(76,489,386,729),8224=>array(25,-96,425,729),8225=>array(25,-96,425,729),8226=>array(135,227,396,516),8227=>array(135,188,431,555),8228=>array(104,0,198,124),8229=>array(104,0,497,124),8230=>array(104,0,796,124),8231=>array(97,302,189,426),8240=>array(49,-14,1159,742),8241=>array(49,-14,1513,742),8242=>array(18,547,183,729),8243=>array(18,547,315,729),8244=>array(18,547,447,729),8245=>array(18,547,183,729),8246=>array(18,547,315,729),8247=>array(18,547,447,729),8248=>array(4,-236,300,-30),8249=>array(69,69,276,517),8250=>array(84,69,291,517),8251=>array(85,2,666,725),8252=>array(64,0,373,729),8253=>array(64,0,415,742),8254=>array(-9,686,459,755),8255=>array(-40,-237,763,-60),8256=>array(-40,752,763,929),8257=>array(-38,-236,257,229),8258=>array(26,-29,874,814),8259=>array(97,313,360,421),8260=>array(-165,-14,315,742),8261=>array(77,-132,264,760),8262=>array(77,-132,264,760),8263=>array(32,0,798,742),8264=>array(64,0,595,742),8265=>array(64,0,595,742),8266=>array(44,-123,404,545),8267=>array(104,-96,510,729),8268=>array(95,220,355,509),8269=>array(95,220,355,509),8270=>array(26,-29,423,427),8271=>array(125,-116,254,517),8272=>array(-40,-237,763,929),8273=>array(26,-7,423,929),8274=>array(63,-93,367,729),8275=>array(44,228,856,399),8276=>array(-40,-240,763,-63),8277=>array(137,98,617,631),8278=>array(110,149,417,589),8279=>array(18,547,579,729),8280=>array(157,125,597,613),8281=>array(157,120,597,608),8282=>array(96,0,189,729),8283=>array(44,-138,674,867),8284=>array(49,0,705,729),8285=>array(96,39,189,655),8286=>array(96,8,189,683),8304=>array(38,319,330,742),8305=>array(53,326,105,751),8308=>array(27,326,333,734),8309=>array(44,319,318,734),8310=>array(40,319,332,742),8311=>array(47,326,319,734),8312=>array(39,319,329,742),8313=>array(36,319,328,742),8314=>array(60,326,415,677),8315=>array(60,479,415,525),8316=>array(60,422,415,581),8317=>array(48,252,176,751),8318=>array(45,252,172,751),8319=>array(51,326,312,640),8320=>array(38,-7,330,416),8321=>array(60,0,312,408),8322=>array(41,0,304,416),8323=>array(43,-7,315,416),8324=>array(27,0,333,408),8325=>array(44,-7,318,408),8326=>array(40,-7,332,416),8327=>array(47,0,319,408),8328=>array(39,-7,329,416),8329=>array(36,-7,328,416),8330=>array(60,0,415,351),8331=>array(60,152,415,199),8332=>array(60,96,415,254),8333=>array(48,-74,176,425),8334=>array(45,-74,172,425),8336=>array(34,-8,296,313),8337=>array(31,-8,319,313),8338=>array(31,-8,316,313),8339=>array(51,0,352,306),8340=>array(31,-8,319,313),8341=>array(51,0,312,425),8342=>array(51,0,327,425),8343=>array(53,0,105,425),8344=>array(51,0,504,313),8345=>array(51,0,312,313),8346=>array(51,-117,329,313),8347=>array(51,0,289,322),8348=>array(15,0,209,393),8352=>array(38,0,751,729),8353=>array(50,-44,534,778),8354=>array(42,-14,529,742),8355=>array(58,0,540,729),8356=>array(57,0,493,742),8357=>array(82,-93,800,640),8358=>array(51,0,622,729),8359=>array(88,-14,1103,729),8360=>array(88,-14,923,729),8361=>array(26,0,864,729),8362=>array(42,-14,668,729),8363=>array(49,-156,558,760),8364=>array(0,-14,513,742),8365=>array(18,0,572,729),8366=>array(9,0,564,729),8367=>array(91,-222,1085,742),8368=>array(20,-14,513,742),8369=>array(30,0,521,729),8370=>array(41,-81,528,809),8371=>array(7,0,565,729),8372=>array(51,-14,646,742),8373=>array(72,-147,500,760),8376=>array(9,0,564,729),8377=>array(46,0,527,729),8378=>array(4,2,584,731),8400=>array(-442,635,-23,760),8401=>array(-423,635,-4,760),8406=>array(-423,560,-23,760),8407=>array(-423,560,-23,760),8411=>array(-442,560,-9,758),8412=>array(-527,560,78,758),8417=>array(-423,560,-23,760),8448=>array(29,-24,883,752),8449=>array(29,-24,899,752),8450=>array(50,-14,580,742),8451=>array(85,-14,948,742),8452=>array(-19,0,573,729),8453=>array(26,-24,888,752),8454=>array(26,-24,934,752),8455=>array(72,-14,504,742),8456=>array(48,-146,578,611),8457=>array(85,0,804,742),8459=>array(32,-14,849,748),8460=>array(0,-128,624,731),8461=>array(88,0,677,729),8462=>array(31,0,510,760),8463=>array(40,0,510,760),8464=>array(26,-15,389,742),8465=>array(46,-14,593,742),8466=>array(30,-14,611,743),8467=>array(-13,-14,317,742),8468=>array(14,-14,687,760),8469=>array(87,0,634,729),8470=>array(23,0,873,729),8471=>array(124,0,776,724),8472=>array(48,-221,592,495),8473=>array(88,0,600,729),8474=>array(50,-129,658,742),8475=>array(29,-9,688,774),8476=>array(36,-14,723,743),8477=>array(88,0,697,729),8478=>array(74,0,733,729),8479=>array(88,-107,600,847),8480=>array(114,443,693,730),8481=>array(-2,0,921,547),8482=>array(129,447,706,729),8483=>array(7,-108,608,846),8484=>array(40,0,630,729),8485=>array(39,-213,471,760),8486=>array(34,0,654,738),8487=>array(34,-14,654,724),8488=>array(10,-149,516,783),8489=>array(30,0,229,547),8490=>array(88,0,609,729),8491=>array(7,0,608,928),8492=>array(40,0,661,772),8493=>array(57,-12,587,742),8494=>array(55,-12,714,647),8495=>array(38,-14,492,533),8496=>array(71,-14,509,742),8497=>array(37,-16,683,755),8498=>array(88,0,466,729),8499=>array(25,-28,929,751),8500=>array(45,-12,370,395),8501=>array(45,-14,641,742),8502=>array(-2,-14,588,743),8503=>array(12,-35,366,742),8504=>array(38,-35,532,742),8505=>array(31,0,320,760),8506=>array(40,-21,824,654),8507=>array(66,0,1046,547),8508=>array(16,-8,616,547),8509=>array(0,-194,602,560),8510=>array(88,0,584,729),8511=>array(88,0,676,729),8512=>array(11,-192,712,719),8513=>array(71,-14,645,742),8514=>array(3,0,412,729),8515=>array(3,0,412,729),8516=>array(-2,0,552,729),8517=>array(38,0,708,729),8518=>array(40,-14,639,760),8519=>array(40,-14,515,560),8520=>array(35,0,282,760),8521=>array(-103,-208,282,760),8523=>array(26,-14,644,742),8526=>array(35,0,397,547),8528=>array(60,-14,830,742),8529=>array(60,-14,839,742),8530=>array(60,-14,1202,742),8531=>array(60,-14,826,742),8532=>array(41,-14,826,742),8533=>array(60,-14,829,742),8534=>array(41,-14,829,742),8535=>array(43,-14,829,742),8536=>array(27,-14,829,742),8537=>array(60,-14,843,742),8538=>array(44,-14,843,742),8539=>array(60,-14,840,742),8540=>array(43,-14,840,742),8541=>array(44,-14,840,742),8542=>array(47,-14,840,742),8543=>array(60,-14,676,742),8544=>array(88,0,177,729),8545=>array(88,0,355,729),8546=>array(88,0,532,729),8547=>array(88,0,823,729),8548=>array(7,0,608,729),8549=>array(7,0,742,729),8550=>array(7,0,919,729),8551=>array(7,0,1097,729),8552=>array(88,0,798,729),8553=>array(26,0,589,729),8554=>array(26,0,751,729),8555=>array(26,0,929,729),8556=>array(88,0,497,729),8557=>array(50,-14,580,742),8558=>array(88,0,640,729),8559=>array(88,0,689,729),8560=>array(84,0,166,760),8561=>array(84,0,328,760),8562=>array(84,0,489,760),8563=>array(84,0,704,760),8564=>array(26,0,506,547),8565=>array(26,0,646,760),8566=>array(26,0,808,760),8567=>array(26,0,969,760),8568=>array(84,0,708,760),8569=>array(26,0,503,547),8570=>array(26,0,656,760),8571=>array(26,0,817,760),8572=>array(84,0,166,760),8573=>array(49,-14,439,560),8574=>array(49,-14,490,760),8575=>array(82,0,800,560),8576=>array(53,0,1068,729),8577=>array(88,0,640,729),8578=>array(53,0,1068,729),8579=>array(50,-14,580,742),8580=>array(56,-14,445,560),8581=>array(50,-208,580,742),8585=>array(38,-14,826,742),8592=>array(44,100,703,527),8593=>array(184,0,569,732),8594=>array(51,100,710,527),8595=>array(184,-3,569,729),8596=>array(44,100,710,527),8597=>array(184,-8,569,732),8598=>array(126,25,633,587),8599=>array(126,25,633,587),8600=>array(126,25,633,587),8601=>array(126,25,633,587),8602=>array(44,100,703,527),8603=>array(51,100,710,527),8604=>array(19,103,745,414),8605=>array(9,103,735,414),8606=>array(44,100,703,527),8607=>array(185,0,570,732),8608=>array(51,100,710,527),8609=>array(185,-3,570,729),8610=>array(44,100,703,527),8611=>array(51,100,710,527),8612=>array(44,100,703,527),8613=>array(185,0,569,732),8614=>array(51,100,710,527),8615=>array(185,-3,569,729),8616=>array(185,0,569,732),8617=>array(44,100,703,565),8618=>array(52,100,710,565),8619=>array(44,100,703,565),8620=>array(52,100,710,565),8621=>array(44,100,710,527),8622=>array(44,93,710,534),8623=>array(131,-2,632,730),8624=>array(152,0,567,743),8625=>array(188,0,603,743),8626=>array(152,-14,567,729),8627=>array(188,-14,603,729),8628=>array(209,-3,684,604),8629=>array(44,100,590,626),8630=>array(20,203,720,668),8631=>array(35,203,734,668),8632=>array(97,25,709,729),8633=>array(49,-46,705,673),8634=>array(92,62,686,680),8635=>array(69,62,663,680),8636=>array(44,272,703,527),8637=>array(44,100,703,355),8638=>array(339,0,569,732),8639=>array(184,0,415,732),8640=>array(51,272,710,527),8641=>array(51,100,710,355),8642=>array(339,0,569,732),8643=>array(184,0,415,732),8644=>array(44,-47,710,674),8645=>array(52,-3,701,732),8646=>array(44,-47,710,674),8647=>array(44,-47,703,674),8648=>array(53,0,702,732),8649=>array(52,-47,711,674),8650=>array(53,-3,702,729),8651=>array(44,7,710,620),8652=>array(44,7,710,620),8653=>array(44,100,703,527),8654=>array(44,94,710,533),8655=>array(51,100,710,527),8656=>array(44,100,703,527),8657=>array(185,0,570,732),8658=>array(51,100,710,527),8659=>array(185,-3,570,729),8660=>array(44,100,710,527),8661=>array(185,-8,570,732),8662=>array(126,-23,677,587),8663=>array(83,-23,633,587),8664=>array(83,25,633,636),8665=>array(126,25,677,636),8666=>array(44,100,703,527),8667=>array(51,100,710,527),8668=>array(44,100,703,527),8669=>array(51,100,710,527),8670=>array(184,0,569,732),8671=>array(184,-3,569,729),8672=>array(44,100,703,527),8673=>array(184,0,570,732),8674=>array(51,100,710,527),8675=>array(184,-3,570,729),8676=>array(47,99,703,528),8677=>array(51,99,708,528),8678=>array(24,65,703,562),8679=>array(154,0,601,754),8680=>array(31,65,710,562),8681=>array(154,-25,601,729),8682=>array(154,0,601,754),8683=>array(154,0,601,754),8684=>array(141,0,614,754),8685=>array(154,0,601,754),8686=>array(154,0,601,754),8687=>array(154,0,601,754),8688=>array(51,65,730,562),8689=>array(53,0,709,729),8690=>array(53,0,709,729),8691=>array(154,-25,601,754),8692=>array(51,100,710,527),8693=>array(52,-3,701,732),8694=>array(51,-193,710,820),8695=>array(44,94,703,533),8696=>array(51,94,710,533),8697=>array(44,94,710,533),8698=>array(44,94,703,533),8699=>array(51,94,710,533),8700=>array(44,94,710,533),8701=>array(24,96,703,531),8702=>array(51,96,730,531),8703=>array(24,96,730,531),8704=>array(7,0,608,729),8705=>array(59,-14,499,742),8706=>array(42,-14,424,662),8707=>array(88,0,511,729),8708=>array(88,-46,511,776),8709=>array(68,-10,716,710),8710=>array(-3,0,605,719),8711=>array(-3,0,605,719),8712=>array(77,-10,708,710),8713=>array(77,-138,708,835),8714=>array(95,76,551,550),8715=>array(77,-10,708,710),8716=>array(77,-138,708,835),8717=>array(95,76,551,550),8718=>array(132,0,441,485),8719=>array(68,-192,612,719),8720=>array(68,-192,612,719),8721=>array(11,-192,589,719),8722=>array(95,272,659,355),8723=>array(95,0,659,627),8724=>array(95,0,659,729),8725=>array(0,-93,303,729),8726=>array(173,-54,477,768),8727=>array(115,0,640,627),8728=>array(142,160,421,470),8729=>array(151,168,413,458),8730=>array(26,-20,574,811),8731=>array(26,-20,574,933),8732=>array(26,-20,574,924),8733=>array(97,112,546,487),8734=>array(97,112,653,487),8735=>array(124,99,630,661),8736=>array(77,0,708,729),8737=>array(77,-53,708,729),8738=>array(104,-3,659,727),8739=>array(189,-214,260,771),8740=>array(44,-214,406,771),8741=>array(119,-214,331,771),8742=>array(44,-214,406,771),8743=>array(116,0,543,579),8744=>array(116,0,543,579),8745=>array(116,0,543,579),8746=>array(116,0,543,579),8747=>array(51,-212,417,757),8748=>array(51,-212,659,757),8749=>array(51,-212,900,757),8750=>array(51,-212,417,757),8751=>array(51,-212,659,757),8752=>array(51,-212,900,757),8753=>array(51,-213,470,757),8754=>array(51,-212,463,757),8755=>array(51,-212,464,757),8756=>array(53,100,520,604),8757=>array(53,100,520,604),8758=>array(70,100,164,604),8759=>array(53,100,520,604),8760=>array(95,272,659,552),8761=>array(95,78,659,552),8762=>array(95,78,659,552),8763=>array(95,78,659,552),8764=>array(95,228,659,399),8765=>array(95,228,659,399),8766=>array(71,149,683,479),8767=>array(95,42,659,584),8768=>array(91,0,246,626),8769=>array(95,77,659,553),8770=>array(95,133,659,454),8771=>array(95,172,659,494),8772=>array(95,48,659,603),8773=>array(95,90,659,594),8774=>array(95,12,659,594),8775=>array(95,-5,659,657),8776=>array(95,133,659,494),8777=>array(95,2,659,625),8778=>array(95,90,659,598),8779=>array(95,59,659,602),8780=>array(95,90,659,594),8781=>array(95,105,659,521),8782=>array(95,26,659,601),8783=>array(95,172,659,601),8784=>array(95,172,659,625),8785=>array(95,1,659,625),8786=>array(95,2,660,625),8787=>array(95,2,660,625),8788=>array(91,151,810,476),8789=>array(90,151,810,475),8790=>array(95,172,659,454),8791=>array(95,172,659,760),8792=>array(95,172,659,662),8793=>array(95,172,659,812),8794=>array(95,172,659,812),8795=>array(95,172,659,849),8796=>array(95,172,659,854),8797=>array(95,172,659,764),8798=>array(95,172,659,760),8799=>array(95,172,659,856),8800=>array(95,19,659,608),8801=>array(95,90,659,537),8802=>array(95,-24,659,650),8803=>array(95,0,659,629),8804=>array(95,0,659,582),8805=>array(95,0,659,582),8806=>array(96,-83,659,638),8807=>array(96,-83,659,638),8808=>array(96,-164,659,638),8809=>array(96,-164,659,638),8810=>array(65,22,877,609),8811=>array(65,22,877,609),8812=>array(77,-132,340,759),8813=>array(95,13,659,613),8814=>array(95,2,659,674),8815=>array(95,-47,659,625),8816=>array(95,-102,659,667),8817=>array(95,-102,659,667),8818=>array(95,-55,659,582),8819=>array(96,-39,659,582),8820=>array(95,-105,659,664),8821=>array(95,-102,659,667),8822=>array(91,-87,659,686),8823=>array(91,-87,659,686),8824=>array(91,-197,659,797),8825=>array(91,-197,659,797),8826=>array(95,-38,659,664),8827=>array(95,-38,659,664),8828=>array(95,-105,659,667),8829=>array(95,-105,659,667),8830=>array(95,-85,659,667),8831=>array(95,-85,659,667),8832=>array(95,-61,659,764),8833=>array(95,-138,659,687),8834=>array(89,80,665,546),8835=>array(89,80,665,546),8836=>array(89,-96,665,726),8837=>array(89,-100,665,722),8838=>array(83,0,659,613),8839=>array(95,0,671,613),8840=>array(83,-116,659,730),8841=>array(95,-116,671,730),8842=>array(83,-73,659,614),8843=>array(83,-73,659,614),8844=>array(116,0,543,579),8845=>array(116,0,543,579),8846=>array(116,2,543,582),8847=>array(95,0,659,568),8848=>array(95,0,659,568),8849=>array(95,-83,659,630),8850=>array(95,-83,659,630),8851=>array(95,0,607,626),8852=>array(95,0,607,626),8853=>array(82,-14,672,643),8854=>array(82,-14,672,643),8855=>array(82,-14,672,643),8856=>array(82,-14,672,643),8857=>array(82,-14,672,643),8858=>array(82,-14,672,643),8859=>array(82,-14,672,643),8860=>array(82,-14,672,643),8861=>array(82,-14,672,643),8862=>array(82,-14,672,643),8863=>array(82,-14,672,643),8864=>array(82,-14,672,643),8865=>array(82,-14,672,643),8866=>array(77,0,708,700),8867=>array(77,0,708,700),8868=>array(77,0,708,700),8869=>array(77,0,708,700),8870=>array(77,0,392,700),8871=>array(77,0,392,700),8872=>array(77,0,708,700),8873=>array(77,0,708,700),8874=>array(77,0,708,700),8875=>array(77,0,708,700),8876=>array(77,-40,708,740),8877=>array(77,-40,708,740),8878=>array(77,-40,708,740),8879=>array(77,-40,708,740),8880=>array(95,-43,652,670),8881=>array(95,-43,652,670),8882=>array(95,15,659,612),8883=>array(95,15,659,612),8884=>array(95,-48,659,674),8885=>array(95,-48,659,674),8886=>array(53,175,847,454),8887=>array(53,175,847,454),8888=>array(43,175,711,454),8889=>array(53,-47,701,674),8890=>array(104,0,364,701),8891=>array(88,0,571,740),8892=>array(88,0,571,740),8893=>array(88,0,571,740),8894=>array(124,0,630,562),8895=>array(124,0,630,562),8896=>array(-3,-192,741,719),8897=>array(-3,-192,741,719),8898=>array(62,-192,677,719),8899=>array(62,-192,677,719),8900=>array(2,-233,442,807),8901=>array(96,285,189,409),8902=>array(109,149,454,512),8903=>array(95,15,659,613),8904=>array(95,-30,805,657),8905=>array(95,-30,805,657),8906=>array(95,-30,805,657),8907=>array(95,-30,805,657),8908=>array(95,-30,805,657),8909=>array(95,172,659,494),8910=>array(43,0,616,579),8911=>array(43,0,616,579),8912=>array(83,-3,659,630),8913=>array(95,-3,671,630),8914=>array(92,0,662,663),8915=>array(92,-14,662,649),8916=>array(167,0,587,729),8917=>array(95,-100,659,729),8918=>array(95,46,659,581),8919=>array(95,46,659,581),8920=>array(65,22,1215,609),8921=>array(65,22,1215,609),8922=>array(95,-228,659,854),8923=>array(95,-228,659,854),8924=>array(95,0,659,582),8925=>array(95,0,659,582),8926=>array(95,-105,659,667),8927=>array(95,-105,659,667),8928=>array(95,-178,659,764),8929=>array(95,-178,659,764),8930=>array(95,-141,659,767),8931=>array(95,-141,659,767),8932=>array(95,-94,659,619),8933=>array(95,-94,659,619),8934=>array(95,-138,659,582),8935=>array(95,-138,659,582),8936=>array(95,-169,659,667),8937=>array(99,-171,663,667),8938=>array(95,-130,659,756),8939=>array(95,-130,659,756),8940=>array(95,-189,659,815),8941=>array(93,-189,657,815),8942=>array(403,-93,497,715),8943=>array(104,249,796,373),8944=>array(104,-93,796,715),8945=>array(104,-93,796,715),8946=>array(39,-10,861,710),8947=>array(77,-10,708,710),8948=>array(95,76,551,550),8949=>array(77,-10,708,910),8950=>array(77,-10,708,853),8951=>array(95,76,551,686),8952=>array(77,-144,708,710),8953=>array(77,-10,708,710),8954=>array(39,-10,861,710),8955=>array(77,-10,708,710),8956=>array(95,76,551,550),8957=>array(77,-10,708,853),8958=>array(95,76,551,686),8959=>array(95,0,689,720),8960=>array(32,-18,510,514),8961=>array(50,162,486,443),8962=>array(64,0,507,596),8963=>array(184,481,569,732),8964=>array(184,0,569,251),8965=>array(184,0,569,406),8966=>array(184,0,569,513),8967=>array(138,-29,301,788),8968=>array(77,-132,264,760),8969=>array(87,-132,274,760),8970=>array(77,-132,264,760),8971=>array(87,-132,274,760),8972=>array(332,-77,684,313),8973=>array(44,-77,396,313),8974=>array(332,243,684,634),8975=>array(44,243,396,634),8976=>array(95,140,659,421),8977=>array(2,126,459,634),8984=>array(108,0,792,759),8985=>array(95,140,659,421),8988=>array(77,425,363,760),8989=>array(59,425,345,760),8990=>array(77,-70,363,264),8991=>array(59,-70,345,264),8992=>array(189,-250,448,928),8993=>array(18,-237,277,942),8996=>array(68,227,969,575),8997=>array(68,0,969,575),8998=>array(68,0,1272,760),8999=>array(68,0,969,760),9000=>array(53,0,1247,729),9003=>array(0,0,1204,760),9004=>array(66,-91,720,748),9075=>array(73,0,273,547),9076=>array(82,-208,522,560),9077=>array(59,-14,692,547),9082=>array(49,-12,550,559),9085=>array(11,-228,670,102),9095=>array(68,0,987,748),9108=>array(15,0,771,727),9115=>array(77,-252,373,946),9116=>array(77,-252,163,942),9117=>array(77,-240,373,942),9118=>array(77,-252,373,946),9119=>array(287,-252,373,942),9120=>array(77,-240,373,942),9121=>array(77,-252,373,928),9122=>array(77,-252,163,942),9123=>array(77,-240,373,942),9124=>array(77,-252,373,928),9125=>array(287,-252,373,935),9126=>array(77,-240,373,935),9127=>array(296,-261,602,928),9128=>array(74,-252,378,940),9129=>array(296,-240,602,940),9130=>array(296,-256,378,943),9131=>array(74,-261,378,928),9132=>array(296,-252,602,940),9133=>array(74,-240,378,940),9134=>array(189,-250,277,942),9166=>array(24,65,703,729),9167=>array(82,0,769,596),9187=>array(66,-91,720,748),9189=>array(2,75,690,444),9192=>array(39,-129,541,294),9250=>array(-56,-14,522,760),9251=>array(64,-228,507,102),9312=>array(66,-10,740,738),9313=>array(66,-10,740,738),9314=>array(66,-10,740,738),9315=>array(66,-10,740,738),9316=>array(66,-10,740,738),9317=>array(66,-10,740,738),9318=>array(66,-10,740,738),9319=>array(66,-10,740,738),9320=>array(66,-10,740,738),9321=>array(66,-10,740,738),9472=>array(-9,242,551,326),9473=>array(-9,200,551,368),9474=>array(235,-302,306,973),9475=>array(200,-302,341,973),9476=>array(-9,242,551,326),9477=>array(-9,200,551,368),9478=>array(235,-302,306,973),9479=>array(200,-302,341,973),9480=>array(-9,242,551,326),9481=>array(-9,200,551,368),9482=>array(235,-302,306,973),9483=>array(200,-302,341,973),9484=>array(235,-302,551,326),9485=>array(235,-302,551,368),9486=>array(200,-302,551,326),9487=>array(200,-302,551,368),9488=>array(-9,-302,306,326),9489=>array(-9,-302,306,368),9490=>array(-9,-302,341,326),9491=>array(-9,-302,341,368),9492=>array(235,242,551,973),9493=>array(235,200,551,973),9494=>array(200,242,551,973),9495=>array(200,200,551,973),9496=>array(-9,242,306,973),9497=>array(-9,200,306,973),9498=>array(-9,242,341,973),9499=>array(-9,200,341,973),9500=>array(235,-302,551,973),9501=>array(235,-302,551,973),9502=>array(200,-302,551,973),9503=>array(200,-302,551,973),9504=>array(200,-302,551,973),9505=>array(200,-302,551,973),9506=>array(200,-302,551,973),9507=>array(200,-302,551,973),9508=>array(-9,-302,306,973),9509=>array(-9,-302,306,973),9510=>array(-9,-302,341,973),9511=>array(-9,-302,341,973),9512=>array(-9,-302,341,973),9513=>array(-9,-302,341,973),9514=>array(-9,-302,341,973),9515=>array(-9,-302,341,973),9516=>array(-9,-302,551,326),9517=>array(-9,-302,551,368),9518=>array(-9,-302,551,368),9519=>array(-9,-302,551,368),9520=>array(-9,-302,551,326),9521=>array(-9,-302,551,368),9522=>array(-9,-302,551,368),9523=>array(-9,-302,551,368),9524=>array(-9,242,551,973),9525=>array(-9,200,551,973),9526=>array(-9,200,551,973),9527=>array(-9,200,551,973),9528=>array(-9,242,551,973),9529=>array(-9,200,551,973),9530=>array(-9,200,551,973),9531=>array(-9,200,551,973),9532=>array(-9,-302,551,973),9533=>array(-9,-302,551,973),9534=>array(-9,-302,551,973),9535=>array(-9,-302,551,973),9536=>array(-9,-302,551,973),9537=>array(-9,-302,551,973),9538=>array(-9,-302,551,973),9539=>array(-9,-302,551,973),9540=>array(-9,-302,551,973),9541=>array(-9,-302,551,973),9542=>array(-9,-302,551,973),9543=>array(-9,-302,551,973),9544=>array(-9,-302,551,973),9545=>array(-9,-302,551,973),9546=>array(-9,-302,551,973),9547=>array(-9,-302,551,973),9548=>array(-9,242,551,326),9549=>array(-9,200,551,368),9550=>array(235,-302,306,973),9551=>array(200,-302,341,973),9552=>array(-9,158,551,410),9553=>array(165,-302,376,973),9554=>array(235,-302,551,410),9555=>array(165,-302,551,326),9556=>array(165,-302,551,410),9557=>array(-9,-302,306,410),9558=>array(-9,-302,376,326),9559=>array(-9,-302,376,410),9560=>array(235,158,551,973),9561=>array(165,242,551,973),9562=>array(165,158,551,973),9563=>array(-9,158,306,973),9564=>array(-9,242,376,973),9565=>array(-9,158,376,973),9566=>array(235,-302,551,973),9567=>array(165,-302,551,973),9568=>array(165,-302,551,973),9569=>array(-9,-302,306,973),9570=>array(-9,-302,376,973),9571=>array(-9,-302,376,973),9572=>array(-9,-302,551,410),9573=>array(-9,-302,551,326),9574=>array(-9,-302,551,410),9575=>array(-9,158,551,973),9576=>array(-9,242,551,973),9577=>array(-9,158,551,973),9578=>array(-9,-302,551,973),9579=>array(-9,-302,551,973),9580=>array(-9,-302,551,973),9581=>array(235,-302,551,326),9582=>array(-9,-302,306,326),9583=>array(-9,242,306,973),9584=>array(235,242,551,973),9585=>array(-48,-302,590,973),9586=>array(-48,-302,590,973),9587=>array(-48,-302,590,973),9588=>array(-9,242,280,326),9589=>array(235,284,306,973),9590=>array(279,242,551,326),9591=>array(235,-302,306,284),9592=>array(-9,200,280,368),9593=>array(200,284,341,973),9594=>array(279,200,551,368),9595=>array(200,-302,341,284),9596=>array(-9,200,551,368),9597=>array(200,-302,341,973),9598=>array(-9,200,551,368),9599=>array(200,-302,341,973),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,698,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-123,769,643),9633=>array(82,-123,769,643),9634=>array(82,-123,769,643),9635=>array(82,-123,769,643),9636=>array(82,-123,769,643),9637=>array(82,-123,769,643),9638=>array(82,-123,769,643),9639=>array(82,-123,769,643),9640=>array(82,-123,769,643),9641=>array(82,-123,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-123,690,643),9651=>array(2,-123,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-123,690,643),9655=>array(2,-123,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-123,690,643),9661=>array(2,-123,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-123,690,643),9665=>array(2,-123,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-123,690,643),9671=>array(2,-123,690,643),9672=>array(2,-123,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,630,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(49,260,736,645),9697=>array(49,-125,736,260),9698=>array(2,-123,690,643),9699=>array(2,-123,690,643),9700=>array(2,-123,690,643),9701=>array(2,-123,690,643),9702=>array(135,227,396,516),9703=>array(82,-123,769,643),9704=>array(82,-123,769,643),9705=>array(82,-123,769,643),9706=>array(82,-123,769,643),9707=>array(82,-123,769,643),9708=>array(2,-123,690,643),9709=>array(2,-123,690,643),9710=>array(2,-123,690,643),9711=>array(49,-250,958,770),9712=>array(82,-123,769,643),9713=>array(82,-123,769,643),9714=>array(82,-123,769,643),9715=>array(82,-123,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-123,690,643),9721=>array(2,-123,690,643),9722=>array(2,-123,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-123,690,643),9728=>array(75,0,731,729),9729=>array(45,-2,854,360),9730=>array(44,0,763,729),9731=>array(75,-0,732,927),9732=>array(57,0,750,880),9733=>array(58,-4,749,723),9734=>array(58,-4,749,723),9735=>array(75,2,441,729),9736=>array(75,0,732,731),9737=>array(75,0,732,730),9738=>array(55,0,745,727),9739=>array(55,0,745,723),9740=>array(55,-1,549,722),9741=>array(55,0,857,723),9742=>array(62,0,1060,729),9743=>array(63,0,1062,729),9744=>array(81,0,727,729),9745=>array(80,0,727,729),9746=>array(80,0,727,729),9747=>array(67,78,411,656),9748=>array(44,0,783,933),9749=>array(66,0,740,731),9750=>array(75,0,732,731),9751=>array(75,0,732,727),9752=>array(70,0,737,729),9753=>array(75,140,732,574),9754=>array(75,113,732,569),9755=>array(75,113,732,569),9756=>array(78,104,729,569),9757=>array(64,0,483,724),9758=>array(78,103,729,569),9759=>array(64,-3,483,720),9760=>array(55,0,752,730),9761=>array(75,0,732,730),9762=>array(75,0,732,730),9763=>array(44,0,763,730),9764=>array(44,-2,558,727),9765=>array(75,0,597,731),9766=>array(75,-1,510,731),9767=>array(75,0,631,911),9768=>array(75,0,416,730),9769=>array(75,-1,732,729),9770=>array(78,0,729,730),9771=>array(75,0,733,731),9772=>array(75,0,565,731),9773=>array(75,0,732,730),9774=>array(75,0,732,730),9775=>array(75,0,732,730),9776=>array(75,0,732,729),9777=>array(75,0,733,729),9778=>array(75,0,732,729),9779=>array(75,0,732,729),9780=>array(75,0,732,729),9781=>array(75,0,732,729),9782=>array(75,0,732,729),9783=>array(75,0,732,729),9784=>array(59,-11,748,735),9785=>array(75,-73,864,804),9786=>array(75,-73,864,804),9787=>array(75,-73,864,804),9788=>array(75,0,732,730),9789=>array(322,0,733,730),9790=>array(75,0,485,730),9791=>array(77,-102,476,732),9792=>array(77,-125,583,731),9793=>array(77,-14,583,843),9794=>array(71,-14,748,720),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9800=>array(41,0,766,731),9801=>array(80,0,727,730),9802=>array(84,0,722,731),9803=>array(101,31,706,679),9804=>array(125,0,681,730),9805=>array(48,-180,759,730),9806=>array(75,52,732,653),9807=>array(30,-96,777,730),9808=>array(74,-0,732,730),9809=>array(84,0,722,730),9810=>array(77,153,729,579),9811=>array(141,0,666,730),9812=>array(88,0,719,730),9813=>array(99,0,708,730),9814=>array(149,-1,657,729),9815=>array(192,0,615,730),9816=>array(148,0,659,730),9817=>array(133,-0,673,730),9818=>array(88,0,719,730),9819=>array(99,0,708,730),9820=>array(149,-1,657,729),9821=>array(192,0,615,730),9822=>array(146,0,661,730),9823=>array(133,-0,673,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9832=>array(95,-1,712,729),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),9840=>array(75,0,598,731),9841=>array(58,0,631,731),9842=>array(75,0,732,709),9843=>array(68,16,738,731),9844=>array(68,16,738,731),9845=>array(68,16,738,731),9846=>array(68,16,738,731),9847=>array(68,16,738,731),9848=>array(68,16,738,731),9849=>array(68,16,738,731),9850=>array(68,16,738,731),9851=>array(75,0,731,704),9852=>array(75,0,733,731),9853=>array(75,0,733,731),9854=>array(75,0,733,731),9855=>array(134,1,672,731),9856=>array(66,0,717,725),9857=>array(66,0,717,725),9858=>array(66,0,717,725),9859=>array(66,0,717,725),9860=>array(66,0,717,725),9861=>array(66,0,717,725),9862=>array(75,0,732,731),9863=>array(75,0,732,731),9864=>array(75,0,732,731),9865=>array(75,0,732,731),9866=>array(75,0,732,98),9867=>array(75,0,732,98),9868=>array(75,0,732,413),9869=>array(75,0,732,413),9870=>array(75,0,732,413),9871=>array(75,0,732,413),9872=>array(151,3,655,731),9873=>array(151,3,655,731),9874=>array(46,0,760,731),9875=>array(87,-10,720,732),9876=>array(118,0,689,729),9877=>array(55,-10,431,732),9878=>array(53,-10,753,732),9879=>array(55,0,751,732),9880=>array(130,0,676,732),9881=>array(85,-17,722,727),9882=>array(115,-9,691,733),9883=>array(114,0,692,728),9884=>array(114,0,692,729),9888=>array(44,0,763,729),9889=>array(75,2,558,730),9890=>array(77,-125,827,731),9891=>array(71,-206,921,720),9892=>array(77,-186,998,856),9893=>array(77,-125,753,917),9894=>array(118,-14,654,869),9895=>array(91,-170,667,884),9896=>array(168,-14,585,869),9897=>array(4,133,746,596),9898=>array(168,133,586,596),9899=>array(168,133,586,596),9900=>array(222,194,532,537),9901=>array(156,194,598,537),9902=>array(37,169,717,560),9903=>array(4,194,750,536),9904=>array(92,237,681,540),9905=>array(190,42,564,698),9906=>array(77,-125,583,731),9907=>array(151,-125,582,731),9908=>array(77,-125,582,731),9909=>array(77,-125,582,731),9910=>array(53,-118,712,643),9911=>array(175,-104,536,710),9912=>array(142,-125,489,731),9920=>array(38,4,716,553),9921=>array(38,4,716,724),9922=>array(38,4,716,553),9923=>array(38,4,716,724),9954=>array(77,-14,583,843),9985=>array(9,190,723,635),9986=>array(38,141,706,588),9987=>array(9,94,723,539),9988=>array(32,119,742,613),9990=>array(38,-14,716,742),9991=>array(38,-14,716,742),9992=>array(53,21,704,708),9993=>array(58,107,696,622),9996=>array(191,0,505,742),9997=>array(19,83,722,678),9998=>array(80,75,652,710),9999=>array(23,198,738,530),10000=>array(80,75,652,710),10001=>array(39,185,681,544),10002=>array(61,209,681,520),10003=>array(135,97,601,630),10004=>array(104,87,649,631),10005=>array(114,72,641,657),10006=>array(77,31,677,698),10007=>array(105,-9,631,732),10008=>array(110,0,679,739),10009=>array(49,0,705,729),10010=>array(49,0,705,729),10011=>array(49,0,705,729),10012=>array(49,0,705,729),10013=>array(148,0,606,729),10014=>array(118,0,610,729),10015=>array(140,0,615,729),10016=>array(49,0,705,729),10017=>array(82,-13,672,744),10018=>array(37,-14,717,742),10019=>array(38,-12,716,742),10020=>array(36,-14,718,742),10021=>array(37,-13,717,743),10022=>array(38,-14,717,745),10023=>array(38,-14,717,745),10025=>array(21,-10,734,744),10026=>array(38,-14,716,742),10027=>array(21,-9,733,743),10028=>array(21,-10,734,744),10029=>array(21,-9,733,743),10030=>array(21,-9,733,743),10031=>array(21,-9,733,743),10032=>array(22,12,734,714),10033=>array(58,0,696,729),10034=>array(66,0,688,729),10035=>array(49,0,705,729),10036=>array(28,-14,708,742),10037=>array(37,-14,717,742),10038=>array(82,-14,672,742),10039=>array(37,-14,717,742),10040=>array(37,-14,717,742),10041=>array(37,-14,717,742),10042=>array(49,0,705,729),10043=>array(73,-14,681,742),10044=>array(73,-14,681,742),10045=>array(70,-14,683,742),10046=>array(70,-14,683,742),10047=>array(48,0,706,709),10048=>array(48,0,706,709),10049=>array(37,-14,717,742),10050=>array(38,-14,716,742),10051=>array(70,-14,683,742),10052=>array(80,0,674,729),10053=>array(68,0,686,729),10054=>array(57,2,696,729),10055=>array(70,-13,684,742),10056=>array(42,-13,712,730),10057=>array(42,-13,712,730),10058=>array(37,-13,717,743),10059=>array(37,-13,717,743),10061=>array(44,-10,762,738),10063=>array(53,-49,753,729),10064=>array(53,0,753,777),10065=>array(53,-49,753,729),10066=>array(53,0,753,777),10070=>array(75,-2,732,728),10072=>array(339,-240,415,760),10073=>array(302,-240,452,760),10074=>array(228,-240,527,760),10075=>array(76,395,237,729),10076=>array(53,395,214,729),10077=>array(76,395,432,729),10078=>array(53,395,408,729),10081=>array(140,-93,695,851),10082=>array(182,-17,572,742),10083=>array(146,-17,607,742),10084=>array(48,83,706,645),10085=>array(151,-1,656,729),10086=>array(55,21,652,702),10087=>array(70,169,684,564),10088=>array(176,-139,583,769),10089=>array(176,-139,583,769),10090=>array(237,-132,517,758),10091=>array(237,-132,517,758),10092=>array(193,-240,546,760),10093=>array(208,-240,561,760),10094=>array(127,-240,617,760),10095=>array(137,-240,626,760),10096=>array(149,-240,590,760),10097=>array(165,-240,605,760),10098=>array(311,-241,482,760),10099=>array(272,-241,443,760),10100=>array(157,-163,571,760),10101=>array(183,-163,597,760),10102=>array(66,-10,740,738),10103=>array(66,-10,740,738),10104=>array(66,-10,740,738),10105=>array(66,-10,740,738),10106=>array(66,-10,740,738),10107=>array(66,-10,740,738),10108=>array(66,-10,740,738),10109=>array(66,-10,740,738),10110=>array(66,-10,740,738),10111=>array(66,-10,740,738),10112=>array(4,-52,750,780),10113=>array(4,-52,750,780),10114=>array(4,-52,750,780),10115=>array(4,-52,750,780),10116=>array(4,-52,750,780),10117=>array(4,-52,750,780),10118=>array(4,-52,750,780),10119=>array(4,-52,750,780),10120=>array(4,-52,750,780),10121=>array(4,-52,750,780),10122=>array(4,-52,750,780),10123=>array(4,-52,750,780),10124=>array(4,-52,750,780),10125=>array(4,-52,750,780),10126=>array(4,-52,750,780),10127=>array(4,-52,750,780),10128=>array(4,-52,750,780),10129=>array(4,-52,750,780),10130=>array(4,-52,750,780),10131=>array(4,-52,750,780),10132=>array(51,75,710,552),10136=>array(110,55,614,614),10137=>array(51,100,710,527),10138=>array(110,13,614,572),10139=>array(51,129,710,498),10140=>array(51,57,688,570),10141=>array(51,100,710,527),10142=>array(51,100,710,527),10143=>array(51,100,710,527),10144=>array(51,100,710,527),10145=>array(51,65,730,562),10146=>array(100,94,710,533),10147=>array(100,94,710,533),10148=>array(100,-4,710,631),10149=>array(51,100,710,548),10150=>array(51,79,710,527),10151=>array(216,-7,545,634),10152=>array(51,100,710,527),10153=>array(51,75,688,552),10154=>array(51,75,688,552),10155=>array(19,12,715,586),10156=>array(19,12,715,586),10157=>array(122,0,697,574),10158=>array(122,0,697,574),10159=>array(56,49,719,574),10161=>array(56,49,719,574),10162=>array(139,-20,649,585),10163=>array(57,157,710,470),10164=>array(72,55,614,655),10165=>array(51,173,710,454),10166=>array(73,-29,614,572),10167=>array(73,55,614,655),10168=>array(51,172,710,455),10169=>array(73,-28,614,572),10170=>array(50,84,710,543),10171=>array(66,140,702,487),10172=>array(71,167,697,460),10173=>array(71,118,697,509),10174=>array(51,81,710,546),10181=>array(48,-163,316,769),10182=>array(35,-163,303,769),10208=>array(2,-233,442,807),10214=>array(77,-132,359,760),10215=>array(77,-132,358,760),10216=>array(80,-132,279,759),10217=>array(72,-132,271,759),10218=>array(80,-132,429,759),10219=>array(72,-132,420,759),10224=>array(40,0,715,732),10225=>array(39,-3,714,729),10226=>array(35,53,733,658),10227=>array(35,61,733,666),10228=>array(51,-14,998,643),10229=>array(44,100,1239,527),10230=>array(51,100,1247,527),10231=>array(44,100,1247,527),10232=>array(44,100,1239,527),10233=>array(51,100,1247,527),10234=>array(44,100,1247,527),10235=>array(44,100,1239,527),10236=>array(51,100,1247,527),10237=>array(44,100,1239,527),10238=>array(51,100,1247,527),10239=>array(51,100,1247,527),10241=>array(132,635,264,781),10242=>array(132,358,264,504),10243=>array(132,358,264,781),10244=>array(132,82,264,228),10245=>array(132,82,264,781),10246=>array(132,82,264,504),10247=>array(132,82,264,781),10248=>array(396,635,527,781),10249=>array(132,635,527,781),10250=>array(132,358,527,781),10251=>array(132,358,527,781),10252=>array(132,82,527,781),10253=>array(132,82,527,781),10254=>array(132,82,527,781),10255=>array(132,82,527,781),10256=>array(396,358,527,504),10257=>array(132,358,527,781),10258=>array(132,358,527,504),10259=>array(132,358,527,781),10260=>array(132,82,527,504),10261=>array(132,82,527,781),10262=>array(132,82,527,504),10263=>array(132,82,527,781),10264=>array(396,358,527,781),10265=>array(132,358,527,781),10266=>array(132,358,527,781),10267=>array(132,358,527,781),10268=>array(132,82,527,781),10269=>array(132,82,527,781),10270=>array(132,82,527,781),10271=>array(132,82,527,781),10272=>array(396,82,527,228),10273=>array(132,82,527,781),10274=>array(132,82,527,504),10275=>array(132,82,527,781),10276=>array(132,82,527,228),10277=>array(132,82,527,781),10278=>array(132,82,527,504),10279=>array(132,82,527,781),10280=>array(396,82,527,781),10281=>array(132,82,527,781),10282=>array(132,82,527,781),10283=>array(132,82,527,781),10284=>array(132,82,527,781),10285=>array(132,82,527,781),10286=>array(132,82,527,781),10287=>array(132,82,527,781),10288=>array(396,82,527,504),10289=>array(132,82,527,781),10290=>array(132,82,527,504),10291=>array(132,82,527,781),10292=>array(132,82,527,504),10293=>array(132,82,527,781),10294=>array(132,82,527,504),10295=>array(132,82,527,781),10296=>array(396,82,527,781),10297=>array(132,82,527,781),10298=>array(132,82,527,781),10299=>array(132,82,527,781),10300=>array(132,82,527,781),10301=>array(132,82,527,781),10302=>array(132,82,527,781),10303=>array(132,82,527,781),10304=>array(132,-195,264,-49),10305=>array(132,-195,264,781),10306=>array(132,-195,264,504),10307=>array(132,-195,264,781),10308=>array(132,-195,264,228),10309=>array(132,-195,264,781),10310=>array(132,-195,264,504),10311=>array(132,-195,264,781),10312=>array(132,-195,527,781),10313=>array(132,-195,527,781),10314=>array(132,-195,527,781),10315=>array(132,-195,527,781),10316=>array(132,-195,527,781),10317=>array(132,-195,527,781),10318=>array(132,-195,527,781),10319=>array(132,-195,527,781),10320=>array(132,-195,527,504),10321=>array(132,-195,527,781),10322=>array(132,-195,527,504),10323=>array(132,-195,527,781),10324=>array(132,-195,527,504),10325=>array(132,-195,527,781),10326=>array(132,-195,527,504),10327=>array(132,-195,527,781),10328=>array(132,-195,527,781),10329=>array(132,-195,527,781),10330=>array(132,-195,527,781),10331=>array(132,-195,527,781),10332=>array(132,-195,527,781),10333=>array(132,-195,527,781),10334=>array(132,-195,527,781),10335=>array(132,-195,527,781),10336=>array(132,-195,527,228),10337=>array(132,-195,527,781),10338=>array(132,-195,527,504),10339=>array(132,-195,527,781),10340=>array(132,-195,527,228),10341=>array(132,-195,527,781),10342=>array(132,-195,527,504),10343=>array(132,-195,527,781),10344=>array(132,-195,527,781),10345=>array(132,-195,527,781),10346=>array(132,-195,527,781),10347=>array(132,-195,527,781),10348=>array(132,-195,527,781),10349=>array(132,-195,527,781),10350=>array(132,-195,527,781),10351=>array(132,-195,527,781),10352=>array(132,-195,527,504),10353=>array(132,-195,527,781),10354=>array(132,-195,527,504),10355=>array(132,-195,527,781),10356=>array(132,-195,527,504),10357=>array(132,-195,527,781),10358=>array(132,-195,527,504),10359=>array(132,-195,527,781),10360=>array(132,-195,527,781),10361=>array(132,-195,527,781),10362=>array(132,-195,527,781),10363=>array(132,-195,527,781),10364=>array(132,-195,527,781),10365=>array(132,-195,527,781),10366=>array(132,-195,527,781),10367=>array(132,-195,527,781),10368=>array(396,-195,527,-49),10369=>array(132,-195,527,781),10370=>array(132,-195,527,504),10371=>array(132,-195,527,781),10372=>array(132,-195,527,228),10373=>array(132,-195,527,781),10374=>array(132,-195,527,504),10375=>array(132,-195,527,781),10376=>array(396,-195,527,781),10377=>array(132,-195,527,781),10378=>array(132,-195,527,781),10379=>array(132,-195,527,781),10380=>array(132,-195,527,781),10381=>array(132,-195,527,781),10382=>array(132,-195,527,781),10383=>array(132,-195,527,781),10384=>array(396,-195,527,504),10385=>array(132,-195,527,781),10386=>array(132,-195,527,504),10387=>array(132,-195,527,781),10388=>array(132,-195,527,504),10389=>array(132,-195,527,781),10390=>array(132,-195,527,504),10391=>array(132,-195,527,781),10392=>array(396,-195,527,781),10393=>array(132,-195,527,781),10394=>array(132,-195,527,781),10395=>array(132,-195,527,781),10396=>array(132,-195,527,781),10397=>array(132,-195,527,781),10398=>array(132,-195,527,781),10399=>array(132,-195,527,781),10400=>array(396,-195,527,228),10401=>array(132,-195,527,781),10402=>array(132,-195,527,504),10403=>array(132,-195,527,781),10404=>array(132,-195,527,228),10405=>array(132,-195,527,781),10406=>array(132,-195,527,504),10407=>array(132,-195,527,781),10408=>array(396,-195,527,781),10409=>array(132,-195,527,781),10410=>array(132,-195,527,781),10411=>array(132,-195,527,781),10412=>array(132,-195,527,781),10413=>array(132,-195,527,781),10414=>array(132,-195,527,781),10415=>array(132,-195,527,781),10416=>array(396,-195,527,504),10417=>array(132,-195,527,781),10418=>array(132,-195,527,504),10419=>array(132,-195,527,781),10420=>array(132,-195,527,504),10421=>array(132,-195,527,781),10422=>array(132,-195,527,504),10423=>array(132,-195,527,781),10424=>array(396,-195,527,781),10425=>array(132,-195,527,781),10426=>array(132,-195,527,781),10427=>array(132,-195,527,781),10428=>array(132,-195,527,781),10429=>array(132,-195,527,781),10430=>array(132,-195,527,781),10431=>array(132,-195,527,781),10432=>array(132,-195,527,-49),10433=>array(132,-195,527,781),10434=>array(132,-195,527,504),10435=>array(132,-195,527,781),10436=>array(132,-195,527,228),10437=>array(132,-195,527,781),10438=>array(132,-195,527,504),10439=>array(132,-195,527,781),10440=>array(132,-195,527,781),10441=>array(132,-195,527,781),10442=>array(132,-195,527,781),10443=>array(132,-195,527,781),10444=>array(132,-195,527,781),10445=>array(132,-195,527,781),10446=>array(132,-195,527,781),10447=>array(132,-195,527,781),10448=>array(132,-195,527,504),10449=>array(132,-195,527,781),10450=>array(132,-195,527,504),10451=>array(132,-195,527,781),10452=>array(132,-195,527,504),10453=>array(132,-195,527,781),10454=>array(132,-195,527,504),10455=>array(132,-195,527,781),10456=>array(132,-195,527,781),10457=>array(132,-195,527,781),10458=>array(132,-195,527,781),10459=>array(132,-195,527,781),10460=>array(132,-195,527,781),10461=>array(132,-195,527,781),10462=>array(132,-195,527,781),10463=>array(132,-195,527,781),10464=>array(132,-195,527,228),10465=>array(132,-195,527,781),10466=>array(132,-195,527,504),10467=>array(132,-195,527,781),10468=>array(132,-195,527,228),10469=>array(132,-195,527,781),10470=>array(132,-195,527,504),10471=>array(132,-195,527,781),10472=>array(132,-195,527,781),10473=>array(132,-195,527,781),10474=>array(132,-195,527,781),10475=>array(132,-195,527,781),10476=>array(132,-195,527,781),10477=>array(132,-195,527,781),10478=>array(132,-195,527,781),10479=>array(132,-195,527,781),10480=>array(132,-195,527,504),10481=>array(132,-195,527,781),10482=>array(132,-195,527,504),10483=>array(132,-195,527,781),10484=>array(132,-195,527,504),10485=>array(132,-195,527,781),10486=>array(132,-195,527,504),10487=>array(132,-195,527,781),10488=>array(132,-195,527,781),10489=>array(132,-195,527,781),10490=>array(132,-195,527,781),10491=>array(132,-195,527,781),10492=>array(132,-195,527,781),10493=>array(132,-195,527,781),10494=>array(132,-195,527,781),10495=>array(132,-195,527,781),10502=>array(44,100,703,527),10503=>array(51,100,710,527),10506=>array(112,0,642,732),10507=>array(112,-3,642,729),10560=>array(35,63,580,838),10561=>array(35,63,580,838),10627=>array(112,-163,548,760),10628=>array(112,-163,548,760),10702=>array(95,-226,659,747),10703=>array(95,15,805,612),10704=>array(95,15,805,612),10705=>array(95,-30,805,657),10706=>array(95,-30,805,657),10707=>array(95,-30,805,657),10708=>array(95,-30,805,657),10709=>array(95,-30,805,657),10731=>array(2,-233,442,807),10746=>array(95,0,659,627),10747=>array(95,0,659,627),10752=>array(25,-198,875,748),10753=>array(25,-198,875,748),10754=>array(25,-198,875,748),10764=>array(51,-212,1142,757),10765=>array(51,-212,417,757),10766=>array(51,-212,417,757),10767=>array(51,-212,417,757),10768=>array(51,-212,417,757),10769=>array(51,-212,470,757),10770=>array(51,-212,417,757),10771=>array(51,-212,417,757),10772=>array(51,-212,500,757),10773=>array(51,-212,417,757),10774=>array(51,-212,417,757),10775=>array(-29,-212,498,757),10776=>array(51,-212,417,757),10777=>array(51,-212,417,757),10778=>array(51,-212,417,757),10779=>array(51,-212,422,872),10780=>array(47,-327,417,757),10799=>array(123,31,631,596),10858=>array(95,228,659,552),10859=>array(95,78,659,552),10877=>array(95,-123,659,581),10878=>array(95,-123,659,581),10879=>array(95,-123,660,581),10880=>array(95,-123,659,581),10881=>array(95,-123,659,644),10882=>array(95,-123,659,644),10883=>array(95,-123,660,759),10884=>array(95,-123,659,756),10885=>array(95,-132,659,663),10886=>array(95,-132,659,663),10887=>array(95,-121,659,582),10888=>array(95,-121,659,582),10889=>array(95,-204,659,663),10890=>array(95,-204,659,663),10891=>array(95,-311,659,791),10892=>array(95,-311,659,791),10893=>array(95,-124,659,663),10894=>array(95,-124,659,663),10895=>array(95,-241,659,756),10896=>array(95,-241,659,756),10897=>array(95,-229,659,730),10898=>array(95,-229,659,730),10899=>array(95,-224,659,741),10900=>array(95,-224,659,741),10901=>array(95,-61,659,644),10902=>array(95,-61,659,644),10903=>array(95,-61,660,644),10904=>array(95,-61,659,644),10905=>array(96,-36,659,685),10906=>array(96,-36,659,685),10907=>array(95,-31,659,725),10908=>array(95,-31,659,725),10909=>array(95,8,659,645),10910=>array(95,23,659,645),10911=>array(95,-176,659,729),10912=>array(95,-176,659,729),10926=>array(95,50,659,601),10927=>array(95,-24,659,667),10928=>array(95,-24,659,667),10929=>array(95,-145,659,667),10930=>array(95,-145,659,667),10931=>array(95,-121,659,662),10932=>array(95,-121,659,662),10933=>array(95,-195,659,662),10934=>array(95,-195,659,662),10935=>array(95,-191,659,693),10936=>array(95,-191,659,693),10937=>array(95,-259,659,693),10938=>array(95,-259,659,693),11001=>array(95,-171,659,585),11002=>array(95,-171,659,585),11008=>array(79,-27,633,587),11009=>array(126,-27,680,587),11010=>array(79,25,633,640),11011=>array(126,25,680,640),11012=>array(24,65,710,562),11013=>array(24,65,703,562),11014=>array(154,0,601,754),11015=>array(154,-25,601,729),11016=>array(79,-27,633,587),11017=>array(126,-27,680,587),11018=>array(79,25,633,640),11019=>array(126,25,680,640),11020=>array(24,65,710,562),11021=>array(154,-25,601,754),11022=>array(51,-3,711,355),11023=>array(51,272,711,630),11024=>array(31,-3,691,355),11025=>array(31,272,691,630),11026=>array(82,-123,769,643),11027=>array(82,-123,769,643),11028=>array(82,-123,769,643),11029=>array(82,-123,769,643),11030=>array(2,-123,690,643),11031=>array(2,-123,690,643),11032=>array(2,-123,690,643),11033=>array(2,-123,690,643),11034=>array(82,-123,769,643),11039=>array(16,-26,767,767),11040=>array(16,-26,767,767),11041=>array(66,-91,720,748),11042=>array(66,-91,720,748),11043=>array(15,-35,771,692),11044=>array(49,-250,958,770),11091=>array(34,-47,749,788),11092=>array(34,-47,749,788),11360=>array(4,0,497,729),11361=>array(4,0,244,760),11362=>array(-18,0,497,729),11363=>array(4,0,512,729),11364=>array(88,-200,600,729),11365=>array(31,-46,519,592),11366=>array(-11,-93,346,822),11367=>array(88,-157,677,729),11368=>array(82,-138,575,760),11369=>array(88,-157,609,729),11370=>array(82,-138,519,760),11371=>array(40,-157,665,729),11372=>array(39,-138,515,547),11373=>array(50,-14,615,743),11374=>array(88,-200,689,729),11375=>array(7,0,608,729),11376=>array(50,-14,615,743),11377=>array(26,0,661,560),11378=>array(30,0,1015,742),11379=>array(38,0,866,560),11380=>array(45,0,506,587),11381=>array(88,0,500,729),11382=>array(84,0,429,547),11383=>array(49,-12,542,551),11385=>array(0,-13,289,760),11386=>array(49,-14,501,560),11387=>array(43,0,360,547),11388=>array(-10,-117,105,425),11389=>array(4,326,383,734),11390=>array(59,-242,538,742),11391=>array(40,-242,576,729),11520=>array(54,-63,490,547),11521=>array(22,-235,500,546),11522=>array(35,-235,482,546),11523=>array(56,-10,515,807),11524=>array(46,-235,483,546),11525=>array(35,-236,776,546),11526=>array(0,-8,518,816),11527=>array(47,0,811,546),11528=>array(62,0,488,546),11529=>array(45,-235,501,816),11530=>array(35,0,813,546),11531=>array(48,-8,536,816),11532=>array(35,0,490,816),11533=>array(45,0,799,546),11534=>array(45,0,500,546),11535=>array(62,-235,690,816),11536=>array(45,0,792,816),11537=>array(45,0,491,816),11538=>array(44,-235,483,546),11539=>array(45,-235,796,661),11540=>array(54,-235,803,546),11541=>array(44,-235,706,816),11542=>array(35,0,491,546),11543=>array(45,-235,500,547),11544=>array(45,-235,496,546),11545=>array(35,-235,487,816),11546=>array(38,-235,479,547),11547=>array(53,-9,537,816),11548=>array(35,-235,783,547),11549=>array(26,-235,491,546),11550=>array(42,-235,493,546),11551=>array(31,-235,492,567),11552=>array(35,0,788,546),11553=>array(44,-235,490,816),11554=>array(53,0,484,626),11555=>array(54,-235,498,816),11556=>array(45,-235,542,546),11557=>array(53,-8,757,816),11568=>array(49,-14,532,380),11569=>array(50,-14,749,742),11570=>array(50,-14,749,742),11571=>array(28,0,586,729),11572=>array(29,0,587,729),11573=>array(28,0,544,729),11574=>array(66,0,439,729),11575=>array(7,0,608,729),11576=>array(7,0,608,729),11577=>array(88,0,511,729),11578=>array(57,0,480,729),11579=>array(66,-14,549,742),11580=>array(96,0,730,729),11581=>array(40,0,599,729),11582=>array(66,0,393,729),11583=>array(40,0,599,729),11584=>array(50,-14,749,742),11585=>array(50,-52,749,781),11586=>array(66,0,178,729),11587=>array(18,0,549,729),11588=>array(88,0,589,729),11589=>array(27,0,589,729),11590=>array(66,0,409,729),11591=>array(40,0,566,729),11592=>array(66,301,514,426),11593=>array(88,0,511,729),11594=>array(48,0,404,729),11595=>array(48,-15,809,742),11596=>array(48,0,652,729),11597=>array(88,0,585,729),11598=>array(89,0,510,729),11599=>array(88,0,177,729),11600=>array(48,0,652,729),11601=>array(88,0,178,729),11602=>array(70,-14,635,729),11603=>array(43,-14,526,742),11604=>array(50,-14,749,742),11605=>array(50,-54,749,742),11606=>array(88,0,589,729),11607=>array(88,0,200,729),11608=>array(66,0,608,729),11609=>array(50,-14,749,742),11610=>array(50,-14,749,780),11611=>array(50,-14,613,742),11612=>array(44,0,647,729),11613=>array(26,0,589,729),11614=>array(50,-14,613,742),11615=>array(88,0,511,729),11616=>array(7,0,608,729),11617=>array(88,0,589,729),11618=>array(88,0,503,729),11619=>array(50,0,659,729),11620=>array(88,0,446,729),11621=>array(50,0,659,729),11631=>array(23,522,440,729),11800=>array(63,-14,413,728),11806=>array(95,78,659,399),11810=>array(77,403,264,760),11811=>array(87,403,274,760),11812=>array(77,-132,264,225),11813=>array(87,-132,274,225),11822=>array(64,0,415,742),19904=>array(75,-158,732,729),19905=>array(75,-158,732,729),19906=>array(75,-158,732,729),19907=>array(75,-158,732,729),19908=>array(75,-158,732,729),19909=>array(75,-158,732,729),19910=>array(75,-158,732,729),19911=>array(75,-158,732,729),19912=>array(75,-158,732,729),19913=>array(75,-158,733,729),19914=>array(75,-158,732,729),19915=>array(75,-158,732,729),19916=>array(75,-158,732,729),19917=>array(75,-158,732,729),19918=>array(75,-158,732,729),19919=>array(75,-158,732,729),19920=>array(75,-158,733,729),19921=>array(75,-158,732,729),19922=>array(75,-158,733,729),19923=>array(75,-158,732,729),19924=>array(75,-158,732,729),19925=>array(75,-158,732,729),19926=>array(75,-158,732,729),19927=>array(75,-158,732,729),19928=>array(75,-158,732,729),19929=>array(75,-158,732,729),19930=>array(75,-158,732,729),19931=>array(75,-158,733,729),19932=>array(75,-158,732,729),19933=>array(75,-158,732,729),19934=>array(75,-158,733,729),19935=>array(75,-158,732,729),19936=>array(75,-158,732,729),19937=>array(75,-158,732,729),19938=>array(75,-158,732,729),19939=>array(75,-158,732,729),19940=>array(75,-158,732,729),19941=>array(75,-158,733,729),19942=>array(75,-158,732,729),19943=>array(75,-158,732,729),19944=>array(75,-158,733,729),19945=>array(75,-158,732,729),19946=>array(75,-158,733,729),19947=>array(75,-158,732,729),19948=>array(75,-158,733,729),19949=>array(75,-158,732,729),19950=>array(75,-158,733,729),19951=>array(75,-158,732,729),19952=>array(75,-158,733,729),19953=>array(75,-158,732,729),19954=>array(75,-158,732,729),19955=>array(75,-158,732,729),19956=>array(75,-158,732,729),19957=>array(75,-158,733,729),19958=>array(75,-158,732,729),19959=>array(75,-158,732,729),19960=>array(75,-158,732,729),19961=>array(75,-158,733,729),19962=>array(75,-158,732,729),19963=>array(75,-158,733,729),19964=>array(75,-158,733,729),19965=>array(75,-158,732,729),19966=>array(75,-158,732,729),19967=>array(75,-158,732,729),42192=>array(88,0,554,729),42193=>array(88,0,512,729),42194=>array(31,0,455,729),42195=>array(88,0,640,729),42196=>array(-3,0,553,729),42197=>array(-3,0,553,729),42198=>array(50,-14,624,742),42199=>array(88,0,609,729),42200=>array(-19,0,502,729),42201=>array(0,-14,373,729),42202=>array(50,-14,580,742),42203=>array(50,-14,580,742),42204=>array(40,0,576,729),42205=>array(88,0,466,729),42206=>array(88,0,466,729),42207=>array(88,0,689,729),42208=>array(88,0,585,729),42209=>array(88,0,497,729),42210=>array(59,-14,521,742),42211=>array(88,0,600,729),42212=>array(26,0,537,729),42213=>array(7,0,608,729),42214=>array(7,0,608,729),42215=>array(88,0,589,729),42216=>array(71,-14,645,742),42217=>array(88,0,461,743),42218=>array(30,0,861,729),42219=>array(26,0,589,729),42220=>array(-2,0,552,729),42221=>array(63,0,529,729),42222=>array(7,0,608,729),42223=>array(7,0,608,729),42224=>array(88,0,511,729),42225=>array(57,0,480,729),42226=>array(88,0,177,729),42227=>array(50,-14,658,742),42228=>array(78,-14,581,729),42229=>array(78,0,581,743),42230=>array(3,0,412,729),42231=>array(50,0,602,729),42232=>array(77,0,193,155),42233=>array(64,-156,193,155),42234=>array(77,0,460,155),42235=>array(77,-156,460,155),42236=>array(64,-156,193,517),42237=>array(77,0,193,517),42238=>array(77,0,453,354),42239=>array(77,172,453,454),42564=>array(50,-14,512,742),42565=>array(44,-14,420,560),42566=>array(88,0,312,729),42567=>array(73,0,273,547),42572=>array(52,-14,1010,645),42573=>array(66,-14,858,471),42576=>array(26,0,838,729),42577=>array(27,0,736,560),42580=>array(50,-14,879,742),42581=>array(49,-14,673,560),42582=>array(92,0,872,729),42583=>array(84,-14,677,560),42594=>array(44,-157,904,729),42595=>array(47,-138,777,547),42596=>array(37,0,908,729),42597=>array(33,0,767,547),42598=>array(88,0,1008,729),42599=>array(82,0,863,547),42600=>array(50,-14,658,742),42601=>array(49,-14,501,560),42602=>array(50,-14,720,742),42603=>array(49,-14,592,560),42604=>array(50,-14,1172,742),42605=>array(49,-14,868,560),42606=>array(25,-208,766,743),42634=>array(-3,-200,682,729),42635=>array(26,-208,594,547),42636=>array(-3,0,553,729),42637=>array(26,0,498,547),42644=>array(77,0,529,729),42645=>array(82,0,494,760),42760=>array(94,0,351,668),42761=>array(94,0,351,668),42762=>array(94,0,351,668),42763=>array(94,0,351,668),42764=>array(94,0,351,668),42765=>array(94,0,351,668),42766=>array(94,0,351,668),42767=>array(94,0,351,668),42768=>array(94,0,351,668),42769=>array(94,0,351,668),42770=>array(94,0,351,668),42771=>array(94,0,351,668),42772=>array(94,0,351,668),42773=>array(94,0,351,668),42774=>array(94,0,351,668),42779=>array(44,326,288,736),42780=>array(44,324,288,734),42781=>array(85,326,142,734),42782=>array(85,326,142,734),42783=>array(85,0,142,408),42786=>array(60,0,315,729),42787=>array(60,0,289,547),42788=>array(50,224,370,742),42789=>array(50,42,370,560),42790=>array(88,-200,589,729),42791=>array(82,-208,494,760),42792=>array(-3,-213,737,729),42793=>array(24,-213,585,702),42794=>array(72,-14,504,742),42795=>array(58,-200,426,561),42800=>array(82,0,393,547),42801=>array(48,-14,425,560),42802=>array(7,0,1117,729),42803=>array(54,-14,805,560),42804=>array(7,-14,1033,742),42805=>array(54,-14,842,560),42806=>array(7,-14,950,729),42807=>array(54,-14,801,560),42808=>array(7,0,867,729),42809=>array(54,-14,709,560),42810=>array(7,0,867,729),42811=>array(54,-14,709,560),42812=>array(7,-208,856,729),42813=>array(54,-208,709,560),42814=>array(50,-14,580,742),42815=>array(56,-14,445,560),42816=>array(4,0,609,729),42817=>array(6,0,522,760),42822=>array(88,0,607,729),42823=>array(84,0,269,760),42824=>array(36,0,519,729),42825=>array(53,0,332,760),42826=>array(4,-14,722,742),42827=>array(4,-14,625,560),42830=>array(50,-14,1172,742),42831=>array(49,-14,868,560),42832=>array(4,0,512,729),42833=>array(-2,-208,522,560),42834=>array(22,0,630,729),42835=>array(22,-208,648,560),42838=>array(50,-178,658,742),42839=>array(49,-208,574,560),42852=>array(4,0,512,729),42853=>array(-2,-208,522,760),42854=>array(4,0,512,729),42855=>array(-2,-208,522,760),42880=>array(4,0,413,729),42881=>array(84,-208,166,560),42882=>array(88,-208,574,742),42883=>array(82,-208,494,560),42889=>array(105,0,198,517),42890=>array(70,161,268,380),42891=>array(136,235,225,729),42892=>array(86,458,162,729),42893=>array(77,0,529,729),42894=>array(34,-208,375,760),42896=>array(88,-157,660,729),42897=>array(82,-138,559,560),42912=>array(1,-14,700,742),42913=>array(1,-208,570,560),42914=>array(1,0,609,729),42915=>array(1,0,520,760),42916=>array(1,0,672,729),42917=>array(1,0,570,560),42918=>array(1,0,624,729),42919=>array(1,0,370,560),42920=>array(1,-14,570,742),42921=>array(1,-14,467,560),42922=>array(-46,0,633,729),43002=>array(82,0,742,547),43003=>array(52,0,430,729),43004=>array(31,0,455,729),43005=>array(88,0,689,729),43006=>array(88,0,177,928),43007=>array(30,0,1050,729),61184=>array(85,602,291,668),61185=>array(62,451,308,668),61186=>array(48,301,325,668),61187=>array(42,150,332,668),61188=>array(40,0,334,668),61189=>array(62,451,308,668),61190=>array(85,451,291,518),61191=>array(62,301,308,518),61192=>array(48,150,325,518),61193=>array(42,0,332,518),61194=>array(48,301,325,668),61195=>array(62,301,308,518),61196=>array(85,301,291,367),61197=>array(62,150,308,367),61198=>array(48,0,325,367),61199=>array(42,150,332,668),61200=>array(48,150,325,518),61201=>array(62,150,308,367),61202=>array(85,150,291,217),61203=>array(62,0,308,217),61204=>array(40,0,334,668),61205=>array(42,0,332,518),61206=>array(48,0,325,367),61207=>array(62,0,308,217),61208=>array(85,0,291,66),61209=>array(94,0,154,668),61440=>array(66,0,813,732),61441=>array(66,0,813,732),61442=>array(66,0,813,732),61443=>array(66,0,813,732),62464=>array(48,-15,474,828),62465=>array(48,-15,474,828),62466=>array(48,-15,513,837),62467=>array(48,0,752,837),62468=>array(48,-15,474,837),62469=>array(48,-15,474,837),62470=>array(48,-15,540,837),62471=>array(48,-15,746,837),62472=>array(48,0,452,837),62473=>array(48,-15,474,828),62474=>array(48,0,1003,837),62475=>array(48,-15,473,837),62476=>array(57,-15,483,828),62477=>array(48,0,734,837),62478=>array(48,-15,474,828),62479=>array(48,-15,474,844),62480=>array(48,0,774,837),62481=>array(57,-15,483,828),62482=>array(48,-15,609,837),62483=>array(22,-15,467,837),62484=>array(48,-15,737,837),62485=>array(48,-15,474,828),62486=>array(48,-15,757,837),62487=>array(48,-15,473,829),62488=>array(48,-15,473,837),62489=>array(57,0,483,837),62490=>array(49,-15,536,828),62491=>array(48,-15,473,828),62492=>array(57,-15,482,837),62493=>array(48,-15,491,828),62494=>array(57,-15,483,828),62495=>array(22,-15,443,837),62496=>array(48,-15,474,837),62497=>array(53,-15,478,837),62498=>array(48,-79,474,837),62499=>array(48,-15,473,838),62500=>array(48,-15,479,838),62501=>array(48,-15,535,837),62502=>array(48,-15,812,838),62504=>array(53,-235,785,816),62505=>array(44,-230,684,853),62506=>array(44,-15,413,765),62507=>array(44,-15,413,777),62508=>array(44,-15,413,875),62509=>array(44,-15,413,818),62510=>array(44,-15,413,887),62511=>array(44,-15,413,809),62512=>array(44,-236,404,765),62513=>array(44,-236,404,799),62514=>array(44,-236,404,901),62515=>array(44,-236,404,809),62516=>array(44,0,422,765),62517=>array(44,0,422,799),62518=>array(44,0,422,809),62519=>array(44,-0,664,765),62520=>array(44,-0,664,777),62521=>array(44,-0,664,895),62522=>array(44,-0,664,799),62523=>array(44,-0,664,809),62524=>array(26,-236,439,765),62525=>array(26,-236,439,777),62526=>array(26,-236,439,904),62527=>array(26,-236,439,799),62528=>array(26,-236,439,809),62529=>array(26,-236,439,852),63173=>array(49,-14,501,760),64256=>array(21,0,637,760),64257=>array(21,0,483,760),64258=>array(21,0,483,760),64259=>array(21,0,786,760),64260=>array(21,0,786,760),64261=>array(21,0,596,760),64262=>array(48,-14,753,742),64275=>array(75,-14,1000,760),64276=>array(76,-14,1000,760),64277=>array(76,-208,1000,760),64278=>array(76,-208,1000,760),64279=>array(76,-208,1306,760),64285=>array(60,44,142,547),64286=>array(150,625,426,765),64287=>array(32,44,296,547),64288=>array(34,0,505,547),64289=>array(76,0,695,547),64290=>array(39,0,646,547),64291=>array(82,0,688,547),64292=>array(39,0,645,547),64293=>array(39,0,645,760),64294=>array(82,0,688,547),64295=>array(39,0,645,547),64296=>array(42,-4,645,547),64297=>array(95,272,659,627),64298=>array(39,0,599,698),64299=>array(34,0,599,698),64300=>array(39,0,599,698),64301=>array(39,0,599,698),64302=>array(82,-159,520,547),64303=>array(82,-193,520,547),64304=>array(82,-159,520,547),64305=>array(39,0,482,547),64306=>array(39,-5,345,547),64307=>array(39,0,460,547),64308=>array(82,0,506,547),64309=>array(39,0,238,547),64310=>array(39,0,327,547),64312=>array(81,-14,534,552),64313=>array(39,204,237,547),64314=>array(39,-208,402,547),64315=>array(39,0,426,547),64316=>array(39,0,443,729),64318=>array(39,0,530,555),64320=>array(39,0,278,547),64321=>array(81,-14,534,547),64323=>array(82,-208,494,547),64324=>array(82,0,513,547),64326=>array(39,0,453,547),64327=>array(82,-208,570,546),64328=>array(39,0,426,547),64329=>array(39,0,599,547),64330=>array(9,-4,510,547),64331=>array(82,0,164,698),64332=>array(39,0,482,698),64333=>array(39,0,426,698),64334=>array(82,0,513,698),64335=>array(39,0,514,760),64338=>array(57,-244,778,327),64339=>array(57,-244,893,327),64340=>array(-9,-244,172,293),64341=>array(-9,-244,281,293),64342=>array(57,-244,778,327),64343=>array(57,-244,893,327),64344=>array(-9,-244,220,293),64345=>array(-9,-244,281,293),64346=>array(57,-244,778,327),64347=>array(57,-244,893,327),64348=>array(-9,-244,220,293),64349=>array(-9,-244,281,293),64350=>array(57,-10,778,513),64351=>array(57,-10,893,513),64352=>array(-9,0,172,610),64353=>array(-9,0,281,610),64354=>array(57,-10,778,513),64355=>array(57,-10,893,513),64356=>array(-9,0,220,610),64357=>array(-9,0,281,610),64358=>array(57,-10,778,575),64359=>array(57,-10,893,575),64360=>array(-9,0,246,672),64361=>array(-9,0,281,672),64362=>array(57,-45,857,757),64363=>array(57,-44,940,659),64364=>array(-9,0,365,757),64365=>array(-9,0,464,684),64366=>array(57,-45,857,757),64367=>array(57,-44,940,659),64368=>array(-9,0,365,757),64369=>array(-9,0,464,684),64370=>array(69,-244,580,425),64371=>array(69,-244,590,425),64372=>array(-9,-220,491,398),64373=>array(-9,-220,590,398),64374=>array(69,-244,580,425),64375=>array(69,-244,590,425),64376=>array(-9,-98,491,398),64377=>array(-9,-98,590,398),64378=>array(69,-244,580,425),64379=>array(69,-244,590,425),64380=>array(-9,-220,491,398),64381=>array(-9,-220,590,398),64382=>array(69,-244,580,425),64383=>array(69,-244,590,425),64384=>array(-9,-220,491,398),64385=>array(-9,-220,590,398),64386=>array(55,-146,350,415),64387=>array(55,-146,481,415),64388=>array(55,-19,350,586),64389=>array(55,-19,481,586),64390=>array(55,-19,350,708),64391=>array(55,-19,481,708),64392=>array(55,-19,350,746),64393=>array(55,-19,481,746),64394=>array(-38,-244,396,586),64395=>array(-38,-244,505,586),64396=>array(-38,-244,422,648),64397=>array(-38,-244,505,648),64398=>array(57,-43,806,760),64399=>array(57,-43,883,760),64400=>array(-9,0,429,760),64401=>array(-9,0,506,760),64402=>array(57,-43,806,896),64403=>array(57,-43,883,896),64404=>array(-9,0,429,896),64405=>array(-9,0,506,896),64406=>array(57,-293,806,896),64407=>array(57,-293,883,896),64408=>array(-9,-269,429,896),64409=>array(-9,-269,506,896),64410=>array(57,-43,806,903),64411=>array(57,-43,883,903),64412=>array(-9,0,429,903),64413=>array(-9,0,506,903),64414=>array(64,-162,594,366),64415=>array(64,-244,694,284),64416=>array(64,-162,594,636),64417=>array(64,-244,694,514),64418=>array(-9,0,246,672),64419=>array(-9,0,281,672),64426=>array(63,-33,575,487),64427=>array(63,-244,578,333),64428=>array(-9,-33,421,487),64429=>array(-9,-244,424,333),64467=>array(63,-27,650,854),64468=>array(63,-27,768,854),64469=>array(-9,0,429,928),64470=>array(-9,0,506,928),64473=>array(-38,-244,366,556),64474=>array(-38,-244,474,556),64488=>array(-9,0,172,293),64489=>array(-9,0,281,293),64508=>array(57,-131,647,411),64509=>array(57,-133,759,251),64510=>array(-9,-146,220,293),64511=>array(-9,-146,281,293),65056=>array(-401,752,0,929),65057=>array(0,752,401,929),65058=>array(-319,756,0,894),65059=>array(0,756,319,894),65136=>array(3,591,260,825),65137=>array(-9,0,272,825),65138=>array(3,591,260,874),65139=>array(46,0,245,177),65140=>array(3,-239,260,-5),65142=>array(3,591,260,708),65143=>array(-9,0,272,708),65144=>array(3,590,260,874),65145=>array(-9,0,272,874),65146=>array(3,-137,260,-20),65147=>array(-9,-137,272,90),65148=>array(-5,599,269,869),65149=>array(-9,0,272,869),65150=>array(10,610,251,878),65151=>array(-9,0,272,878),65152=>array(71,42,351,483),65153=>array(-33,0,284,939),65154=>array(-33,0,284,939),65155=>array(47,0,198,1028),65156=>array(47,0,283,1028),65157=>array(-38,-244,366,588),65158=>array(-38,-244,474,588),65159=>array(47,-244,198,760),65160=>array(47,-244,283,760),65161=>array(57,-131,647,588),65162=>array(57,-133,759,466),65163=>array(-9,0,205,613),65164=>array(-9,0,281,613),65165=>array(84,0,166,760),65166=>array(84,0,283,760),65167=>array(57,-171,778,327),65168=>array(57,-171,893,327),65169=>array(-9,-146,172,293),65170=>array(-9,-146,281,293),65171=>array(61,-28,408,513),65172=>array(63,0,492,513),65173=>array(57,-10,778,391),65174=>array(57,-10,893,391),65175=>array(-9,0,220,488),65176=>array(-9,0,281,488),65177=>array(57,-10,778,513),65178=>array(57,-10,893,513),65179=>array(-9,0,220,610),65180=>array(-9,0,281,610),65181=>array(69,-244,580,425),65182=>array(69,-244,590,425),65183=>array(-9,-146,491,398),65184=>array(-9,-146,590,398),65185=>array(69,-244,580,425),65186=>array(69,-244,590,425),65187=>array(-9,0,491,398),65188=>array(-9,0,590,398),65189=>array(69,-244,580,586),65190=>array(69,-244,590,586),65191=>array(-9,0,491,537),65192=>array(-9,0,590,537),65193=>array(55,-19,350,415),65194=>array(55,-19,481,415),65195=>array(55,-19,350,586),65196=>array(55,-19,481,586),65197=>array(-38,-244,381,269),65198=>array(-38,-244,505,269),65199=>array(-38,-244,381,464),65200=>array(-38,-244,505,464),65201=>array(57,-244,1024,366),65202=>array(57,-244,1156,366),65203=>array(-9,-14,680,366),65204=>array(-9,-14,812,366),65205=>array(57,-244,1024,586),65206=>array(57,-244,1156,586),65207=>array(-9,-14,680,586),65208=>array(-9,-14,812,586),65209=>array(57,-244,1021,362),65210=>array(57,-244,1112,362),65211=>array(-9,0,697,362),65212=>array(-9,0,790,362),65213=>array(57,-244,1021,464),65214=>array(57,-244,1112,464),65215=>array(-9,0,697,464),65216=>array(-9,0,790,464),65217=>array(63,0,772,760),65218=>array(63,0,863,760),65219=>array(-9,0,656,760),65220=>array(-9,0,747,760),65221=>array(63,0,772,760),65222=>array(63,0,863,760),65223=>array(-9,0,656,760),65224=>array(-9,0,747,760),65225=>array(51,-244,528,521),65226=>array(51,-244,528,382),65227=>array(-9,0,447,521),65228=>array(-9,0,443,382),65229=>array(51,-244,528,659),65230=>array(51,-244,528,537),65231=>array(-9,0,447,659),65232=>array(-9,0,443,537),65233=>array(57,-45,857,635),65234=>array(57,-44,940,537),65235=>array(-9,0,365,635),65236=>array(-9,0,464,562),65237=>array(47,-215,631,635),65238=>array(47,-244,760,500),65239=>array(-9,0,365,635),65240=>array(-9,0,464,562),65241=>array(63,-27,650,760),65242=>array(63,-27,768,760),65243=>array(-9,0,429,760),65244=>array(-9,0,506,760),65245=>array(63,-152,573,760),65246=>array(63,-152,690,760),65247=>array(-9,0,189,760),65248=>array(-9,0,307,760),65249=>array(62,-240,492,369),65250=>array(62,-240,608,307),65251=>array(-9,-25,411,303),65252=>array(-9,-24,529,303),65253=>array(64,-162,594,464),65254=>array(64,-244,694,342),65255=>array(-9,0,172,488),65256=>array(-9,0,281,488),65257=>array(61,-28,408,358),65258=>array(63,0,492,366),65259=>array(-9,-33,421,487),65260=>array(-9,-244,424,333),65261=>array(-38,-244,366,315),65262=>array(-38,-244,474,315),65263=>array(57,-131,647,411),65264=>array(57,-133,759,251),65265=>array(57,-244,647,411),65266=>array(57,-244,759,251),65267=>array(-9,-146,220,293),65268=>array(-9,-146,281,293),65269=>array(-92,-10,422,866),65270=>array(-92,-10,546,866),65271=>array(-12,-10,422,955),65272=>array(-12,-10,546,955),65273=>array(10,-244,422,760),65274=>array(10,-244,546,760),65275=>array(37,-10,422,760),65276=>array(37,-10,546,760),65533=>array(13,-84,910,912),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>286,33=>360,34=>414,35=>754,36=>572,37=>855,38=>702,39=>247,40=>351,41=>351,42=>450,43=>754,44=>286,45=>325,46=>286,47=>303,48=>572,49=>572,50=>572,51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754,61=>754,62=>754,63=>478,64=>900,65=>615,66=>617,67=>628,68=>693,69=>568,70=>518,71=>697,72=>677,73=>265,74=>265,75=>590,76=>501,77=>776,78=>673,79=>708,80=>542,81=>708,82=>625,83=>571,84=>549,85=>659,86=>615,87=>890,88=>616,89=>549,90=>616,91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>551,98=>571,99=>495,100=>571,101=>554,102=>316,103=>571,104=>570,105=>250,106=>250,107=>521,108=>250,109=>876,110=>570,111=>550,112=>571,113=>571,114=>370,115=>469,116=>353,117=>570,118=>532,119=>736,120=>532,121=>532,122=>472,123=>572,124=>303,125=>572,126=>754,160=>286,161=>360,162=>572,163=>572,164=>572,165=>572,166=>303,167=>450,168=>450,169=>900,170=>424,171=>550,172=>754,173=>325,174=>900,175=>450,176=>450,177=>754,178=>360,179=>360,180=>450,181=>572,182=>572,183=>286,184=>450,185=>360,186=>424,187=>550,188=>872,189=>872,190=>872,191=>478,192=>615,193=>615,194=>615,195=>615,196=>615,197=>615,198=>876,199=>628,200=>568,201=>568,202=>568,203=>568,204=>265,205=>265,206=>265,207=>265,208=>697,209=>673,210=>708,211=>708,212=>708,213=>708,214=>708,215=>754,216=>708,217=>659,218=>659,219=>659,220=>659,221=>549,222=>544,223=>567,224=>551,225=>551,226=>551,227=>551,228=>551,229=>551,230=>883,231=>495,232=>554,233=>554,234=>554,235=>554,236=>250,237=>250,238=>250,239=>250,240=>550,241=>570,242=>550,243=>550,244=>550,245=>550,246=>550,247=>754,248=>550,249=>570,250=>570,251=>570,252=>570,253=>532,254=>571,255=>532,256=>615,257=>551,258=>615,259=>551,260=>615,261=>551,262=>628,263=>495,264=>628,265=>495,266=>628,267=>495,268=>628,269=>495,270=>693,271=>571,272=>697,273=>571,274=>568,275=>554,276=>568,277=>554,278=>568,279=>554,280=>568,281=>554,282=>568,283=>554,284=>697,285=>571,286=>697,287=>571,288=>697,289=>571,290=>697,291=>571,292=>677,293=>570,294=>824,295=>625,296=>265,297=>250,298=>265,299=>250,300=>265,301=>250,302=>265,303=>250,304=>265,305=>250,306=>531,307=>500,308=>265,309=>250,310=>590,311=>521,312=>521,313=>501,314=>250,315=>501,316=>250,317=>501,318=>337,319=>501,320=>308,321=>505,322=>255,323=>673,324=>570,325=>673,326=>570,327=>673,328=>570,329=>732,330=>673,331=>570,332=>708,333=>550,334=>708,335=>550,336=>708,337=>550,338=>962,339=>920,340=>625,341=>370,342=>625,343=>370,344=>625,345=>370,346=>571,347=>469,348=>571,349=>469,350=>571,351=>469,352=>571,353=>469,354=>549,355=>353,356=>549,357=>353,358=>549,359=>353,360=>659,361=>570,362=>659,363=>570,364=>659,365=>570,366=>659,367=>570,368=>659,369=>570,370=>659,371=>570,372=>890,373=>736,374=>549,375=>532,376=>549,377=>616,378=>472,379=>616,380=>472,381=>616,382=>472,383=>316,384=>571,385=>661,386=>617,387=>571,388=>617,389=>571,390=>633,391=>628,392=>495,393=>697,394=>737,395=>617,396=>571,397=>550,398=>568,399=>708,400=>553,401=>518,402=>316,403=>697,404=>618,405=>885,406=>318,407=>265,408=>671,409=>521,410=>250,411=>532,412=>876,413=>673,414=>570,415=>708,416=>822,417=>550,418=>854,419=>683,420=>586,421=>571,422=>625,423=>571,424=>469,425=>568,426=>302,427=>353,428=>549,429=>353,430=>549,431=>772,432=>570,433=>688,434=>648,435=>669,436=>657,437=>616,438=>472,439=>599,440=>599,441=>520,442=>472,443=>572,444=>599,445=>520,446=>459,447=>571,448=>265,449=>443,450=>413,451=>266,452=>1279,453=>1169,454=>1039,455=>751,456=>708,457=>411,458=>838,459=>831,460=>717,461=>615,462=>551,463=>265,464=>250,465=>708,466=>550,467=>659,468=>570,469=>659,470=>570,471=>659,472=>570,473=>659,474=>570,475=>659,476=>570,477=>554,478=>615,479=>551,480=>615,481=>551,482=>876,483=>883,484=>697,485=>571,486=>697,487=>571,488=>590,489=>521,490=>708,491=>550,492=>708,493=>550,494=>599,495=>520,496=>250,497=>1279,498=>1169,499=>1039,500=>697,501=>571,502=>1001,503=>614,504=>673,505=>570,506=>615,507=>551,508=>876,509=>883,510=>708,511=>550,512=>615,513=>551,514=>615,515=>551,516=>568,517=>554,518=>568,519=>554,520=>265,521=>250,522=>265,523=>250,524=>708,525=>550,526=>708,527=>550,528=>625,529=>370,530=>625,531=>370,532=>659,533=>570,534=>659,535=>570,536=>571,537=>469,538=>549,539=>353,540=>564,541=>469,542=>677,543=>570,544=>662,545=>754,546=>628,547=>549,548=>616,549=>472,550=>615,551=>551,552=>568,553=>554,554=>708,555=>550,556=>708,557=>550,558=>708,559=>550,560=>708,561=>550,562=>549,563=>532,564=>427,565=>758,566=>429,567=>250,568=>898,569=>898,570=>615,571=>628,572=>495,573=>501,574=>549,575=>469,576=>472,577=>542,578=>431,579=>617,580=>659,581=>615,582=>568,583=>554,584=>265,585=>250,586=>703,587=>571,588=>625,589=>370,590=>549,591=>532,592=>540,593=>571,594=>571,595=>571,596=>494,597=>495,598=>571,599=>626,600=>554,601=>554,602=>737,603=>486,604=>479,605=>698,606=>598,607=>250,608=>626,609=>571,610=>566,611=>536,612=>536,613=>570,614=>570,615=>570,616=>250,617=>304,618=>334,619=>356,620=>438,621=>250,622=>635,623=>876,624=>876,625=>876,626=>581,627=>578,628=>570,629=>550,630=>772,631=>655,632=>593,633=>373,634=>373,635=>372,636=>370,637=>369,638=>477,639=>477,640=>543,641=>543,642=>469,643=>302,644=>302,645=>415,646=>302,647=>353,648=>353,649=>570,650=>556,651=>538,652=>532,653=>736,654=>532,655=>549,656=>472,657=>472,658=>520,659=>520,660=>459,661=>459,662=>459,663=>459,664=>708,665=>521,666=>598,667=>637,668=>588,669=>263,670=>600,671=>456,672=>654,673=>459,674=>459,675=>913,676=>952,677=>911,678=>747,679=>549,680=>700,681=>763,682=>635,683=>589,684=>463,685=>463,686=>595,687=>597,688=>364,689=>359,690=>157,691=>233,692=>266,693=>266,694=>341,695=>463,696=>335,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>333,705=>333,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>247,713=>450,714=>450,715=>450,716=>247,717=>450,718=>450,719=>450,720=>303,721=>303,722=>276,723=>276,724=>450,725=>450,726=>351,727=>286,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>284,735=>450,736=>383,737=>149,738=>335,739=>399,740=>333,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450,749=>450,750=>466,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>589,881=>511,882=>775,883=>583,884=>250,885=>250,886=>673,887=>584,890=>450,891=>494,892=>495,893=>494,894=>303,900=>450,901=>450,902=>623,903=>286,904=>671,905=>784,906=>367,908=>731,910=>742,911=>743,912=>304,913=>615,914=>617,915=>501,916=>615,917=>568,918=>616,919=>677,920=>708,921=>265,922=>590,923=>615,924=>776,925=>673,926=>568,927=>708,928=>677,929=>542,931=>568,932=>549,933=>549,934=>708,935=>616,936=>708,937=>688,938=>265,939=>549,940=>593,941=>486,942=>570,943=>304,944=>521,945=>593,946=>574,947=>532,948=>550,949=>486,950=>489,951=>570,952=>550,953=>304,954=>530,955=>532,956=>572,957=>502,958=>501,959=>550,960=>542,961=>571,962=>528,963=>570,964=>542,965=>521,966=>593,967=>520,968=>593,969=>753,970=>304,971=>521,972=>550,973=>521,974=>753,975=>590,976=>553,977=>557,978=>628,979=>758,980=>628,981=>593,982=>753,983=>597,984=>708,985=>550,986=>583,987=>528,988=>518,989=>413,990=>593,991=>593,992=>778,993=>564,994=>840,995=>753,996=>682,997=>593,998=>712,999=>553,1000=>618,1001=>546,1002=>690,1003=>563,1004=>629,1005=>550,1006=>549,1007=>482,1008=>597,1009=>571,1010=>495,1011=>250,1012=>708,1013=>554,1014=>554,1015=>544,1016=>571,1017=>628,1018=>776,1019=>585,1020=>571,1021=>633,1022=>628,1023=>633,1024=>568,1025=>568,1026=>708,1027=>549,1028=>628,1029=>571,1030=>265,1031=>265,1032=>265,1033=>984,1034=>940,1035=>708,1036=>639,1037=>673,1038=>548,1039=>677,1040=>615,1041=>617,1042=>617,1043=>549,1044=>703,1045=>568,1046=>969,1047=>577,1048=>673,1049=>673,1050=>639,1051=>677,1052=>776,1053=>677,1054=>708,1055=>677,1056=>542,1057=>628,1058=>549,1059=>548,1060=>774,1061=>616,1062=>699,1063=>617,1064=>962,1065=>984,1066=>749,1067=>794,1068=>617,1069=>628,1070=>971,1071=>625,1072=>551,1073=>555,1074=>530,1075=>473,1076=>622,1077=>554,1078=>811,1079=>479,1080=>584,1081=>584,1082=>543,1083=>575,1084=>679,1085=>588,1086=>550,1087=>588,1088=>571,1089=>495,1090=>524,1091=>532,1092=>769,1093=>532,1094=>612,1095=>532,1096=>823,1097=>848,1098=>636,1099=>710,1100=>530,1101=>494,1102=>757,1103=>541,1104=>554,1105=>554,1106=>563,1107=>473,1108=>494,1109=>469,1110=>250,1111=>250,1112=>250,1113=>812,1114=>809,1115=>586,1116=>543,1117=>584,1118=>532,1119=>588,1120=>840,1121=>753,1122=>693,1123=>604,1124=>848,1125=>674,1126=>791,1127=>705,1128=>1043,1129=>901,1130=>708,1131=>550,1132=>924,1133=>742,1134=>572,1135=>486,1136=>771,1137=>789,1138=>708,1139=>550,1140=>703,1141=>598,1142=>703,1143=>598,1144=>893,1145=>813,1146=>857,1147=>682,1148=>1062,1149=>925,1150=>840,1151=>753,1152=>628,1153=>495,1154=>452,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>695,1163=>609,1164=>617,1165=>530,1166=>542,1167=>571,1168=>549,1169=>473,1170=>607,1171=>531,1172=>562,1173=>477,1174=>969,1175=>811,1176=>577,1177=>479,1178=>639,1179=>543,1180=>639,1181=>543,1182=>639,1183=>543,1184=>771,1185=>748,1186=>677,1187=>594,1188=>913,1189=>789,1190=>973,1191=>824,1192=>790,1193=>624,1194=>628,1195=>495,1196=>549,1197=>524,1198=>549,1199=>532,1200=>549,1201=>532,1202=>616,1203=>532,1204=>840,1205=>726,1206=>617,1207=>532,1208=>617,1209=>532,1210=>617,1211=>570,1212=>847,1213=>655,1214=>847,1215=>655,1216=>265,1217=>969,1218=>811,1219=>590,1220=>543,1221=>698,1222=>603,1223=>677,1224=>594,1225=>699,1226=>612,1227=>617,1228=>532,1229=>799,1230=>697,1231=>250,1232=>615,1233=>551,1234=>615,1235=>551,1236=>876,1237=>883,1238=>568,1239=>554,1240=>708,1241=>554,1242=>708,1243=>554,1244=>969,1245=>811,1246=>577,1247=>479,1248=>599,1249=>520,1250=>673,1251=>584,1252=>673,1253=>584,1254=>708,1255=>550,1256=>708,1257=>550,1258=>708,1259=>550,1260=>628,1261=>494,1262=>548,1263=>532,1264=>548,1265=>532,1266=>548,1267=>532,1268=>617,1269=>532,1270=>549,1271=>473,1272=>794,1273=>710,1274=>607,1275=>531,1276=>616,1277=>532,1278=>616,1279=>532,1280=>617,1281=>530,1282=>905,1283=>807,1284=>877,1285=>782,1286=>611,1287=>529,1288=>964,1289=>861,1290=>1001,1291=>870,1292=>697,1293=>593,1294=>695,1295=>640,1296=>553,1297=>486,1298=>677,1299=>575,1300=>1052,1301=>894,1302=>804,1303=>778,1304=>928,1305=>887,1306=>708,1307=>571,1308=>890,1309=>736,1310=>639,1311=>543,1312=>972,1313=>814,1314=>973,1315=>821,1316=>713,1317=>614,1329=>689,1330=>659,1331=>678,1332=>678,1333=>659,1334=>694,1335=>576,1336=>659,1337=>773,1338=>678,1339=>622,1340=>479,1341=>830,1342=>777,1343=>659,1344=>644,1345=>689,1346=>678,1347=>690,1348=>712,1349=>655,1350=>656,1351=>681,1352=>659,1353=>642,1354=>720,1355=>691,1356=>712,1357=>659,1358=>678,1359=>634,1360=>624,1361=>669,1362=>483,1363=>729,1364=>681,1365=>708,1366=>711,1369=>276,1370=>286,1371=>211,1372=>325,1373=>214,1374=>365,1375=>450,1377=>876,1378=>570,1379=>592,1380=>597,1381=>570,1382=>571,1383=>463,1384=>570,1385=>664,1386=>592,1387=>570,1388=>244,1389=>882,1390=>560,1391=>570,1392=>570,1393=>547,1394=>571,1395=>566,1396=>570,1397=>244,1398=>570,1399=>448,1400=>570,1401=>364,1402=>876,1403=>504,1404=>583,1405=>570,1406=>570,1407=>876,1408=>570,1409=>570,1410=>391,1411=>876,1412=>572,1413=>548,1414=>725,1415=>730,1417=>303,1418=>325,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>325,1471=>0,1472=>265,1473=>0,1474=>0,1475=>265,1478=>397,1479=>0,1488=>602,1489=>520,1490=>371,1491=>491,1492=>588,1493=>245,1494=>312,1495=>588,1496=>583,1497=>201,1498=>483,1499=>476,1500=>511,1501=>597,1502=>611,1503=>245,1504=>360,1505=>584,1506=>563,1507=>576,1508=>562,1509=>485,1510=>534,1511=>638,1512=>508,1513=>637,1514=>591,1520=>423,1521=>380,1522=>297,1523=>374,1524=>580,1542=>573,1543=>573,1545=>681,1546=>879,1548=>290,1557=>0,1563=>286,1567=>478,1569=>423,1570=>250,1571=>250,1572=>435,1573=>250,1574=>704,1575=>250,1576=>847,1577=>471,1578=>847,1579=>847,1580=>581,1581=>581,1582=>581,1583=>400,1584=>400,1585=>435,1586=>435,1587=>1099,1588=>1099,1589=>1088,1590=>1088,1591=>832,1592=>832,1593=>537,1594=>537,1600=>264,1601=>933,1602=>698,1603=>742,1604=>654,1605=>557,1606=>661,1607=>471,1608=>435,1609=>704,1610=>704,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0,1626=>450,1632=>483,1633=>483,1634=>483,1635=>483,1636=>483,1637=>483,1638=>483,1639=>483,1640=>483,1641=>483,1642=>483,1643=>292,1644=>286,1645=>490,1646=>847,1647=>698,1648=>0,1652=>263,1657=>847,1658=>847,1659=>847,1660=>847,1661=>847,1662=>847,1663=>847,1664=>847,1665=>581,1666=>581,1667=>581,1668=>581,1669=>581,1670=>581,1671=>581,1672=>400,1673=>400,1674=>400,1675=>400,1676=>400,1677=>400,1678=>400,1679=>400,1680=>400,1681=>435,1682=>435,1683=>448,1684=>477,1685=>549,1686=>477,1687=>435,1688=>435,1689=>435,1690=>1099,1691=>1099,1692=>1099,1693=>1088,1694=>1088,1695=>832,1696=>537,1697=>933,1698=>933,1699=>933,1700=>933,1701=>933,1702=>933,1703=>698,1704=>698,1705=>805,1706=>948,1707=>805,1708=>742,1709=>742,1710=>742,1711=>805,1712=>805,1713=>805,1714=>805,1715=>805,1716=>805,1717=>654,1718=>654,1719=>654,1720=>654,1721=>661,1722=>661,1723=>661,1724=>661,1725=>661,1726=>628,1727=>581,1734=>435,1740=>704,1742=>704,1749=>471,1776=>483,1777=>483,1778=>483,1779=>483,1780=>483,1781=>483,1782=>483,1783=>483,1784=>483,1785=>483,1984=>572,1985=>572,1986=>572,1987=>572,1988=>572,1989=>572,1990=>572,1991=>572,1992=>572,1993=>572,1994=>250,1995=>514,1996=>381,1997=>532,1998=>588,1999=>588,2000=>534,2001=>588,2002=>746,2003=>394,2004=>394,2005=>502,2006=>550,2007=>315,2008=>863,2009=>425,2010=>705,2011=>588,2012=>563,2013=>660,2014=>477,2015=>651,2016=>425,2017=>563,2018=>534,2019=>477,2020=>477,2021=>470,2022=>534,2023=>534,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>282,2037=>282,2040=>504,2041=>504,2042=>325,3647=>572,3713=>603,3714=>615,3716=>619,3719=>434,3720=>565,3722=>615,3725=>619,3732=>602,3733=>577,3734=>580,3735=>589,3737=>593,3738=>563,3739=>563,3740=>670,3741=>690,3742=>618,3743=>618,3745=>631,3746=>619,3747=>615,3749=>584,3751=>569,3754=>633,3755=>737,3757=>569,3758=>615,3759=>708,3760=>569,3761=>0,3762=>485,3763=>485,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>597,3776=>337,3777=>591,3778=>414,3779=>492,3780=>442,3782=>606,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>572,3793=>576,3794=>576,3795=>603,3796=>563,3797=>563,3798=>633,3799=>603,3800=>606,3801=>609,3804=>925,3805=>925,4256=>787,4257=>660,4258=>611,4259=>751,4260=>554,4261=>690,4262=>678,4263=>822,4264=>408,4265=>558,4266=>758,4267=>794,4268=>562,4269=>769,4270=>703,4271=>566,4272=>820,4273=>558,4274=>558,4275=>769,4276=>779,4277=>651,4278=>567,4279=>558,4280=>563,4281=>558,4282=>736,4283=>786,4284=>554,4285=>561,4286=>563,4287=>652,4288=>760,4289=>536,4290=>620,4291=>536,4292=>534,4293=>664,4304=>457,4305=>466,4306=>523,4307=>736,4308=>457,4309=>461,4310=>450,4311=>721,4312=>466,4313=>459,4314=>958,4315=>470,4316=>470,4317=>708,4318=>457,4319=>466,4320=>716,4321=>470,4322=>589,4323=>470,4324=>743,4325=>461,4326=>708,4327=>466,4328=>466,4329=>470,4330=>514,4331=>470,4332=>466,4333=>468,4334=>470,4335=>409,4336=>457,4337=>466,4338=>457,4339=>457,4340=>466,4341=>499,4342=>745,4343=>497,4344=>457,4345=>514,4346=>457,4347=>403,4348=>291,5121=>615,5122=>615,5123=>615,5124=>615,5125=>692,5126=>692,5127=>692,5129=>692,5130=>692,5131=>692,5132=>751,5133=>751,5134=>751,5135=>751,5136=>751,5137=>751,5138=>870,5139=>906,5140=>870,5141=>906,5142=>692,5143=>870,5144=>906,5145=>870,5146=>906,5147=>692,5149=>230,5150=>488,5151=>381,5152=>381,5153=>350,5154=>350,5155=>354,5156=>350,5157=>419,5158=>347,5159=>230,5160=>350,5161=>350,5162=>350,5163=>980,5164=>817,5165=>857,5166=>1005,5167=>615,5168=>615,5169=>615,5170=>615,5171=>656,5172=>656,5173=>656,5175=>656,5176=>656,5177=>656,5178=>751,5179=>615,5180=>751,5181=>751,5182=>751,5183=>751,5184=>870,5185=>906,5186=>870,5187=>906,5188=>870,5189=>906,5190=>870,5191=>906,5192=>656,5193=>457,5194=>172,5196=>659,5197=>659,5198=>659,5199=>659,5200=>657,5201=>657,5202=>657,5204=>657,5205=>657,5206=>657,5207=>829,5208=>800,5209=>829,5210=>800,5211=>829,5212=>800,5213=>835,5214=>810,5215=>835,5216=>810,5217=>853,5218=>810,5219=>853,5220=>810,5221=>853,5222=>391,5223=>790,5224=>790,5225=>779,5226=>801,5227=>565,5228=>565,5229=>565,5230=>565,5231=>565,5232=>565,5233=>565,5234=>565,5235=>565,5236=>773,5237=>693,5238=>733,5239=>734,5240=>733,5241=>734,5242=>773,5243=>693,5244=>773,5245=>693,5246=>733,5247=>734,5248=>733,5249=>734,5250=>733,5251=>366,5252=>366,5253=>675,5254=>697,5255=>675,5256=>697,5257=>565,5258=>565,5259=>565,5260=>565,5261=>565,5262=>565,5263=>565,5264=>565,5265=>565,5266=>773,5267=>693,5268=>733,5269=>734,5270=>733,5271=>734,5272=>773,5273=>693,5274=>773,5275=>693,5276=>733,5277=>734,5278=>733,5279=>734,5280=>733,5281=>391,5282=>391,5283=>549,5284=>501,5285=>501,5286=>501,5287=>549,5288=>549,5289=>549,5290=>501,5291=>501,5292=>674,5293=>691,5294=>671,5295=>687,5296=>671,5297=>687,5298=>674,5299=>691,5300=>674,5301=>691,5302=>671,5303=>687,5304=>671,5305=>687,5306=>671,5307=>347,5308=>457,5309=>347,5312=>766,5313=>766,5314=>766,5315=>766,5316=>766,5317=>766,5318=>766,5319=>766,5320=>766,5321=>962,5322=>931,5323=>953,5324=>766,5325=>953,5326=>766,5327=>766,5328=>540,5329=>407,5330=>540,5331=>766,5332=>766,5333=>766,5334=>766,5335=>766,5336=>766,5337=>766,5338=>766,5339=>766,5340=>962,5341=>931,5342=>953,5343=>927,5344=>953,5345=>927,5346=>962,5347=>931,5348=>962,5349=>931,5350=>975,5351=>927,5352=>975,5353=>927,5354=>540,5356=>656,5357=>542,5358=>542,5359=>542,5360=>542,5361=>542,5362=>542,5363=>542,5364=>542,5365=>542,5366=>751,5367=>678,5368=>712,5369=>694,5370=>712,5371=>694,5372=>751,5373=>678,5374=>751,5375=>678,5376=>712,5377=>694,5378=>712,5379=>694,5380=>712,5381=>376,5382=>378,5383=>376,5392=>641,5393=>641,5394=>641,5395=>802,5396=>802,5397=>802,5398=>802,5399=>818,5400=>785,5401=>818,5402=>785,5403=>818,5404=>785,5405=>1026,5406=>989,5407=>1026,5408=>989,5409=>1026,5410=>989,5411=>1026,5412=>989,5413=>576,5414=>564,5415=>564,5416=>564,5417=>564,5418=>564,5419=>564,5420=>564,5421=>564,5422=>564,5423=>760,5424=>703,5425=>734,5426=>736,5427=>734,5428=>736,5429=>760,5430=>703,5431=>760,5432=>703,5433=>734,5434=>736,5435=>734,5436=>736,5437=>734,5438=>376,5440=>350,5441=>436,5442=>824,5443=>824,5444=>824,5445=>824,5446=>824,5447=>824,5448=>542,5449=>542,5450=>542,5451=>542,5452=>542,5453=>542,5454=>751,5455=>678,5456=>376,5458=>656,5459=>615,5460=>615,5461=>615,5462=>615,5463=>653,5464=>653,5465=>653,5466=>653,5467=>831,5468=>906,5469=>457,5470=>659,5471=>659,5472=>659,5473=>659,5474=>659,5475=>659,5476=>657,5477=>657,5478=>657,5479=>657,5480=>853,5481=>810,5482=>457,5492=>747,5493=>747,5494=>747,5495=>747,5496=>747,5497=>747,5498=>747,5499=>507,5500=>677,5501=>436,5502=>942,5503=>942,5504=>942,5505=>942,5506=>942,5507=>942,5508=>942,5509=>743,5514=>747,5515=>747,5516=>747,5517=>747,5518=>1133,5519=>1133,5520=>1133,5521=>901,5522=>901,5523=>1133,5524=>1133,5525=>629,5526=>965,5536=>766,5537=>766,5538=>766,5539=>766,5540=>766,5541=>766,5542=>540,5543=>579,5544=>579,5545=>579,5546=>579,5547=>579,5548=>579,5549=>579,5550=>376,5551=>565,5598=>693,5601=>690,5702=>421,5703=>421,5742=>399,5743=>942,5744=>1178,5745=>1469,5746=>1469,5747=>1237,5748=>1237,5749=>1469,5750=>1469,5760=>429,5761=>443,5762=>641,5763=>838,5764=>1035,5765=>1232,5766=>443,5767=>641,5768=>838,5769=>1035,5770=>1232,5771=>448,5772=>646,5773=>844,5774=>1042,5775=>1241,5776=>443,5777=>641,5778=>836,5779=>1034,5780=>1232,5781=>448,5782=>677,5783=>709,5784=>1084,5785=>1035,5786=>615,5787=>457,5788=>456,7424=>532,7425=>646,7426=>883,7427=>527,7428=>495,7429=>544,7430=>544,7431=>441,7432=>486,7433=>250,7434=>355,7435=>521,7436=>524,7437=>679,7438=>584,7439=>550,7440=>495,7441=>615,7442=>615,7443=>615,7444=>920,7446=>550,7447=>550,7448=>472,7449=>541,7450=>541,7451=>524,7452=>517,7453=>663,7454=>853,7455=>574,7456=>532,7457=>736,7458=>472,7459=>473,7462=>524,7463=>532,7464=>507,7465=>472,7466=>531,7467=>575,7468=>387,7469=>552,7470=>389,7472=>436,7473=>358,7474=>358,7475=>439,7476=>426,7477=>167,7478=>167,7479=>372,7480=>315,7481=>489,7482=>424,7483=>424,7484=>446,7485=>396,7486=>342,7487=>394,7488=>346,7489=>415,7490=>560,7491=>352,7492=>352,7493=>365,7494=>583,7495=>385,7496=>365,7497=>375,7498=>375,7499=>324,7500=>323,7501=>365,7502=>161,7503=>383,7504=>561,7505=>368,7506=>372,7507=>333,7508=>372,7509=>372,7510=>385,7511=>265,7512=>364,7513=>422,7514=>561,7515=>375,7517=>361,7518=>335,7519=>347,7520=>374,7521=>327,7522=>161,7523=>233,7524=>364,7525=>375,7526=>361,7527=>335,7528=>370,7529=>374,7530=>327,7543=>571,7544=>426,7547=>334,7549=>600,7557=>250,7579=>365,7580=>333,7581=>333,7582=>372,7583=>324,7584=>267,7585=>209,7586=>365,7587=>364,7588=>235,7589=>224,7590=>234,7591=>235,7592=>211,7593=>224,7594=>211,7595=>338,7596=>561,7597=>561,7598=>369,7599=>431,7600=>368,7601=>372,7602=>372,7603=>324,7604=>258,7605=>265,7606=>457,7607=>376,7608=>325,7609=>365,7610=>375,7611=>330,7612=>393,7613=>330,7614=>353,7615=>372,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>615,7681=>551,7682=>617,7683=>571,7684=>617,7685=>571,7686=>617,7687=>571,7688=>628,7689=>495,7690=>693,7691=>571,7692=>693,7693=>571,7694=>693,7695=>571,7696=>693,7697=>571,7698=>693,7699=>571,7700=>568,7701=>554,7702=>568,7703=>554,7704=>568,7705=>554,7706=>568,7707=>554,7708=>568,7709=>554,7710=>518,7711=>316,7712=>697,7713=>571,7714=>677,7715=>570,7716=>677,7717=>570,7718=>677,7719=>570,7720=>677,7721=>570,7722=>677,7723=>570,7724=>265,7725=>250,7726=>265,7727=>250,7728=>590,7729=>521,7730=>590,7731=>521,7732=>590,7733=>521,7734=>501,7735=>259,7736=>501,7737=>259,7738=>501,7739=>250,7740=>501,7741=>250,7742=>776,7743=>876,7744=>776,7745=>876,7746=>776,7747=>876,7748=>673,7749=>570,7750=>673,7751=>570,7752=>673,7753=>570,7754=>673,7755=>570,7756=>708,7757=>550,7758=>708,7759=>550,7760=>708,7761=>550,7762=>708,7763=>550,7764=>542,7765=>571,7766=>542,7767=>571,7768=>625,7769=>370,7770=>625,7771=>370,7772=>625,7773=>370,7774=>625,7775=>370,7776=>571,7777=>469,7778=>571,7779=>469,7780=>571,7781=>469,7782=>571,7783=>469,7784=>571,7785=>469,7786=>549,7787=>353,7788=>549,7789=>353,7790=>549,7791=>353,7792=>549,7793=>353,7794=>659,7795=>570,7796=>659,7797=>570,7798=>659,7799=>570,7800=>659,7801=>570,7802=>659,7803=>570,7804=>615,7805=>532,7806=>615,7807=>532,7808=>890,7809=>736,7810=>890,7811=>736,7812=>890,7813=>736,7814=>890,7815=>736,7816=>890,7817=>736,7818=>616,7819=>532,7820=>616,7821=>532,7822=>549,7823=>532,7824=>616,7825=>472,7826=>616,7827=>472,7828=>616,7829=>472,7830=>570,7831=>353,7832=>736,7833=>532,7834=>551,7835=>316,7836=>316,7837=>316,7838=>691,7839=>550,7840=>615,7841=>551,7842=>615,7843=>551,7844=>615,7845=>551,7846=>615,7847=>551,7848=>615,7849=>551,7850=>615,7851=>551,7852=>615,7853=>551,7854=>615,7855=>551,7856=>615,7857=>551,7858=>615,7859=>551,7860=>615,7861=>551,7862=>615,7863=>551,7864=>568,7865=>554,7866=>568,7867=>554,7868=>568,7869=>554,7870=>568,7871=>554,7872=>568,7873=>554,7874=>568,7875=>554,7876=>568,7877=>554,7878=>568,7879=>554,7880=>265,7881=>250,7882=>265,7883=>250,7884=>708,7885=>550,7886=>708,7887=>550,7888=>708,7889=>550,7890=>708,7891=>550,7892=>708,7893=>550,7894=>708,7895=>550,7896=>708,7897=>550,7898=>822,7899=>550,7900=>822,7901=>550,7902=>822,7903=>550,7904=>822,7905=>550,7906=>822,7907=>550,7908=>659,7909=>570,7910=>659,7911=>570,7912=>772,7913=>570,7914=>772,7915=>570,7916=>772,7917=>570,7918=>772,7919=>570,7920=>772,7921=>570,7922=>549,7923=>532,7924=>549,7925=>532,7926=>549,7927=>532,7928=>549,7929=>532,7930=>692,7931=>429,7936=>593,7937=>593,7938=>593,7939=>593,7940=>593,7941=>593,7942=>593,7943=>593,7944=>615,7945=>615,7946=>790,7947=>790,7948=>692,7949=>721,7950=>637,7951=>668,7952=>486,7953=>486,7954=>486,7955=>486,7956=>486,7957=>486,7960=>640,7961=>640,7962=>869,7963=>877,7964=>809,7965=>835,7968=>570,7969=>570,7970=>570,7971=>570,7972=>570,7973=>570,7974=>570,7975=>570,7976=>753,7977=>751,7978=>977,7979=>980,7980=>924,7981=>945,7982=>840,7983=>852,7984=>304,7985=>304,7986=>304,7987=>304,7988=>304,7989=>304,7990=>304,7991=>304,7992=>342,7993=>336,7994=>571,7995=>571,7996=>513,7997=>540,7998=>440,7999=>443,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>724,8009=>763,8010=>985,8011=>989,8012=>844,8013=>873,8016=>521,8017=>521,8018=>521,8019=>521,8020=>521,8021=>521,8022=>521,8023=>521,8025=>705,8027=>897,8029=>911,8031=>808,8032=>753,8033=>753,8034=>753,8035=>753,8036=>753,8037=>753,8038=>753,8039=>753,8040=>722,8041=>759,8042=>980,8043=>985,8044=>851,8045=>875,8046=>829,8047=>857,8048=>593,8049=>593,8050=>486,8051=>493,8052=>570,8053=>589,8054=>304,8055=>304,8056=>550,8057=>550,8058=>521,8059=>521,8060=>753,8061=>753,8064=>593,8065=>593,8066=>593,8067=>593,8068=>593,8069=>593,8070=>593,8071=>593,8072=>615,8073=>615,8074=>790,8075=>790,8076=>692,8077=>721,8078=>637,8079=>668,8080=>570,8081=>570,8082=>570,8083=>570,8084=>570,8085=>570,8086=>570,8087=>570,8088=>753,8089=>751,8090=>977,8091=>980,8092=>924,8093=>945,8094=>840,8095=>852,8096=>753,8097=>753,8098=>753,8099=>753,8100=>753,8101=>753,8102=>753,8103=>753,8104=>722,8105=>759,8106=>980,8107=>985,8108=>851,8109=>875,8110=>829,8111=>857,8112=>593,8113=>593,8114=>593,8115=>593,8116=>593,8118=>593,8119=>593,8120=>615,8121=>615,8122=>645,8123=>623,8124=>615,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>570,8131=>570,8132=>589,8134=>570,8135=>570,8136=>724,8137=>671,8138=>837,8139=>784,8140=>677,8141=>450,8142=>450,8143=>450,8144=>304,8145=>304,8146=>304,8147=>304,8150=>304,8151=>304,8152=>265,8153=>265,8154=>427,8155=>367,8157=>450,8158=>450,8159=>450,8160=>521,8161=>521,8162=>521,8163=>521,8164=>571,8165=>571,8166=>521,8167=>521,8168=>549,8169=>549,8170=>760,8171=>742,8172=>616,8173=>450,8174=>450,8175=>450,8178=>753,8179=>753,8180=>753,8182=>753,8183=>753,8184=>847,8185=>731,8186=>830,8187=>743,8188=>688,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>325,8209=>325,8210=>572,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>286,8217=>286,8218=>286,8219=>286,8220=>466,8221=>466,8222=>466,8223=>466,8224=>450,8225=>450,8226=>531,8227=>531,8228=>301,8229=>601,8230=>900,8231=>286,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1208,8241=>1562,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8249=>360,8250=>360,8251=>754,8252=>437,8253=>478,8254=>450,8255=>723,8256=>723,8257=>225,8258=>900,8259=>450,8260=>150,8261=>351,8262=>351,8263=>830,8264=>659,8265=>659,8266=>447,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8272=>723,8273=>450,8274=>404,8275=>900,8276=>723,8277=>754,8278=>527,8279=>597,8280=>754,8281=>754,8282=>286,8283=>717,8284=>754,8285=>286,8286=>286,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>360,8305=>161,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221,8319=>358,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>352,8337=>375,8338=>372,8339=>399,8340=>375,8341=>364,8342=>383,8343=>149,8344=>561,8345=>358,8346=>385,8347=>335,8348=>265,8352=>789,8353=>572,8354=>572,8355=>572,8356=>572,8357=>876,8358=>673,8359=>1145,8360=>966,8361=>890,8362=>706,8363=>572,8364=>572,8365=>572,8366=>572,8367=>1145,8368=>572,8369=>572,8370=>572,8371=>572,8372=>696,8373=>572,8376=>572,8377=>572,8378=>611,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>917,8449=>917,8450=>628,8451=>1011,8452=>578,8453=>917,8454=>960,8455=>553,8456=>628,8457=>856,8459=>889,8460=>679,8461=>765,8462=>570,8463=>570,8464=>422,8465=>627,8466=>648,8467=>372,8468=>736,8469=>721,8470=>936,8471=>900,8472=>627,8473=>631,8474=>708,8475=>718,8476=>732,8477=>712,8478=>807,8479=>615,8480=>917,8481=>967,8482=>900,8483=>615,8484=>670,8485=>520,8486=>688,8487=>688,8488=>554,8489=>304,8490=>590,8491=>615,8492=>708,8493=>633,8494=>769,8495=>532,8496=>545,8497=>708,8498=>518,8499=>962,8500=>416,8501=>670,8502=>606,8503=>419,8504=>580,8505=>342,8506=>833,8507=>1074,8508=>632,8509=>655,8510=>589,8511=>764,8512=>729,8513=>697,8514=>501,8515=>501,8516=>549,8517=>737,8518=>637,8519=>554,8520=>316,8521=>316,8523=>702,8526=>474,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>265,8545=>443,8546=>620,8547=>831,8548=>615,8549=>830,8550=>1007,8551=>1185,8552=>826,8553=>616,8554=>839,8555=>1018,8556=>501,8557=>628,8558=>693,8559=>776,8560=>250,8561=>412,8562=>573,8563=>730,8564=>532,8565=>729,8566=>892,8567=>1053,8568=>737,8569=>532,8570=>740,8571=>901,8572=>250,8573=>495,8574=>571,8575=>876,8576=>1121,8577=>693,8578=>1121,8579=>633,8580=>494,8581=>628,8585=>872,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>615,8705=>572,8706=>465,8707=>568,8708=>568,8709=>784,8710=>602,8711=>602,8712=>784,8713=>784,8714=>646,8715=>784,8716=>784,8717=>646,8718=>572,8719=>681,8720=>681,8721=>606,8722=>754,8723=>754,8724=>754,8725=>303,8726=>573,8727=>754,8728=>563,8729=>563,8730=>573,8731=>573,8732=>573,8733=>643,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450,8742=>450,8743=>659,8744=>659,8745=>659,8746=>659,8747=>469,8748=>710,8749=>951,8750=>469,8751=>710,8752=>951,8753=>469,8754=>469,8755=>469,8756=>572,8757=>572,8758=>234,8759=>572,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754,8786=>755,8787=>755,8788=>900,8789=>900,8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>754,8809=>754,8810=>942,8811=>942,8812=>417,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754,8842=>754,8843=>754,8844=>659,8845=>659,8846=>659,8847=>754,8848=>754,8849=>754,8850=>754,8851=>702,8852=>702,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>784,8867=>784,8868=>784,8869=>784,8870=>468,8871=>468,8872=>784,8873=>784,8874=>784,8875=>784,8876=>784,8877=>784,8878=>784,8879=>784,8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>468,8891=>659,8892=>659,8893=>659,8894=>754,8895=>754,8896=>738,8897=>738,8898=>738,8899=>738,8900=>444,8901=>286,8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>659,8911=>659,8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900,8946=>900,8947=>784,8948=>646,8949=>784,8950=>784,8951=>646,8952=>784,8953=>784,8954=>900,8955=>784,8956=>646,8957=>784,8958=>646,8959=>784,8960=>542,8961=>542,8962=>571,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>351,8969=>351,8970=>351,8971=>351,8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>461,8984=>900,8985=>754,8988=>422,8989=>422,8990=>422,8991=>422,8992=>469,8993=>469,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272,9004=>786,9075=>304,9076=>571,9077=>753,9082=>593,9085=>681,9095=>1037,9108=>786,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>469,9166=>754,9167=>850,9187=>786,9189=>692,9192=>572,9250=>571,9251=>571,9312=>807,9313=>807,9314=>807,9315=>807,9316=>807,9317=>807,9318=>807,9319=>807,9320=>807,9321=>807,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542,9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542,9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542,9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542,9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542,9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542,9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542,9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542,9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542,9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542,9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542,9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542,9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542,9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>807,9777=>807,9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807,9785=>938,9786=>938,9787=>938,9788=>807,9789=>807,9790=>807,9791=>552,9792=>659,9793=>659,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807,9865=>807,9866=>807,9867=>807,9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807,9875=>807,9876=>807,9877=>487,9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807,9888=>807,9889=>632,9890=>904,9891=>980,9892=>1057,9893=>813,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>659,9907=>659,9908=>659,9909=>659,9910=>765,9911=>659,9912=>659,9920=>754,9921=>754,9922=>754,9923=>754,9954=>659,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484,10081=>754,10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>807,10103=>807,10104=>807,10105=>807,10106=>807,10107=>807,10108=>807,10109=>807,10110=>807,10111=>807,10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>351,10182=>351,10208=>444,10214=>445,10215=>445,10216=>351,10217=>351,10218=>500,10219=>500,10224=>754,10225=>754,10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659,10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659,10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659,10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659,10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659,10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659,10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659,10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659,10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659,10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659,10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659,10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659,10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659,10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659,10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659,10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659,10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659,10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659,10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659,10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659,10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659,10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659,10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659,10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659,10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659,10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10502=>754,10503=>754,10506=>754,10507=>754,10560=>615,10561=>615,10627=>660,10628=>660,10702=>754,10703=>900,10704=>900,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900,10754=>900,10764=>1192,10765=>469,10766=>469,10767=>469,10768=>469,10769=>469,10770=>469,10771=>469,10772=>469,10773=>469,10774=>469,10775=>469,10776=>469,10777=>469,10778=>469,10779=>469,10780=>469,10799=>754,10858=>754,10859=>754,10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>752,11023=>752,11024=>752,11025=>752,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>501,11361=>250,11362=>501,11363=>542,11364=>625,11365=>551,11366=>353,11367=>677,11368=>570,11369=>590,11370=>521,11371=>616,11372=>472,11373=>703,11374=>776,11375=>615,11376=>703,11377=>661,11378=>1015,11379=>865,11380=>532,11381=>589,11382=>511,11383=>593,11385=>373,11386=>550,11387=>441,11388=>157,11389=>387,11390=>571,11391=>616,11520=>532,11521=>535,11522=>508,11523=>541,11524=>528,11525=>819,11526=>563,11527=>856,11528=>536,11529=>546,11530=>858,11531=>558,11532=>536,11533=>833,11534=>535,11535=>725,11536=>838,11537=>526,11538=>533,11539=>831,11540=>857,11541=>745,11542=>536,11543=>535,11544=>531,11545=>532,11546=>532,11547=>558,11548=>828,11549=>530,11550=>527,11551=>523,11552=>822,11553=>536,11554=>535,11555=>533,11556=>577,11557=>811,11568=>582,11569=>799,11570=>799,11571=>614,11572=>615,11573=>571,11574=>505,11575=>615,11576=>615,11577=>568,11578=>568,11579=>614,11580=>787,11581=>616,11582=>441,11583=>616,11584=>799,11585=>799,11586=>270,11587=>564,11588=>677,11589=>590,11590=>475,11591=>616,11592=>580,11593=>568,11594=>452,11595=>857,11596=>700,11597=>673,11598=>558,11599=>265,11600=>700,11601=>265,11602=>677,11603=>569,11604=>799,11605=>799,11606=>677,11607=>288,11608=>674,11609=>799,11610=>799,11611=>628,11612=>690,11613=>616,11614=>628,11615=>560,11616=>615,11617=>677,11618=>568,11619=>709,11620=>510,11621=>709,11631=>463,11800=>478,11806=>754,11810=>351,11811=>351,11812=>351,11813=>351,11822=>478,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42192=>617,42193=>542,42194=>542,42195=>693,42196=>549,42197=>549,42198=>697,42199=>590,42200=>590,42201=>460,42202=>628,42203=>633,42204=>616,42205=>518,42206=>518,42207=>776,42208=>673,42209=>501,42210=>571,42211=>625,42212=>625,42213=>615,42214=>615,42215=>677,42216=>697,42217=>460,42218=>890,42219=>616,42220=>549,42221=>617,42222=>615,42223=>615,42224=>568,42225=>568,42226=>265,42227=>708,42228=>659,42229=>659,42230=>501,42231=>690,42232=>270,42233=>270,42234=>536,42235=>536,42236=>270,42237=>270,42238=>529,42239=>529,42564=>571,42565=>469,42566=>318,42567=>304,42572=>1062,42573=>925,42576=>926,42577=>815,42580=>971,42581=>757,42582=>879,42583=>758,42594=>956,42595=>820,42596=>959,42597=>811,42598=>1060,42599=>907,42600=>708,42601=>550,42602=>770,42603=>641,42604=>1222,42605=>917,42606=>791,42634=>704,42635=>616,42636=>549,42637=>524,42644=>617,42645=>570,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444,42779=>332,42780=>332,42781=>227,42782=>227,42783=>227,42786=>347,42787=>320,42788=>424,42789=>424,42790=>677,42791=>570,42792=>790,42793=>638,42794=>553,42795=>486,42800=>441,42801=>469,42802=>1125,42803=>886,42804=>1083,42805=>891,42806=>1028,42807=>883,42808=>874,42809=>736,42810=>874,42811=>736,42812=>863,42813=>736,42814=>633,42815=>494,42816=>590,42817=>524,42822=>612,42823=>353,42824=>523,42825=>384,42826=>726,42827=>633,42830=>1222,42831=>917,42832=>542,42833=>571,42834=>660,42835=>697,42838=>708,42839=>571,42852=>544,42853=>571,42854=>544,42855=>571,42880=>501,42881=>250,42882=>662,42883=>570,42889=>303,42890=>338,42891=>360,42892=>247,42893=>617,42894=>438,42896=>695,42897=>600,42912=>697,42913=>571,42914=>590,42915=>521,42916=>673,42917=>570,42918=>625,42919=>370,42920=>571,42921=>469,42922=>721,43002=>823,43003=>518,43004=>542,43005=>776,43006=>265,43007=>1079,61184=>192,61185=>214,61186=>231,61187=>237,61188=>240,61189=>214,61190=>192,61191=>214,61192=>231,61193=>237,61194=>231,61195=>214,61196=>192,61197=>214,61198=>231,61199=>237,61200=>231,61201=>214,61202=>192,61203=>214,61204=>240,61205=>237,61206=>231,61207=>214,61208=>192,61209=>247,61440=>879,61441=>879,61442=>879,61443=>879,62464=>522,62465=>522,62466=>561,62467=>800,62468=>526,62469=>522,62470=>587,62471=>793,62472=>500,62473=>522,62474=>1051,62475=>530,62476=>531,62477=>782,62478=>522,62479=>530,62480=>822,62481=>531,62482=>658,62483=>524,62484=>785,62485=>530,62486=>805,62487=>530,62488=>530,62489=>531,62490=>584,62491=>530,62492=>530,62493=>539,62494=>531,62495=>464,62496=>521,62497=>525,62498=>522,62499=>522,62500=>522,62501=>574,62502=>859,62504=>838,62505=>727,62506=>457,62507=>457,62508=>457,62509=>457,62510=>457,62511=>457,62512=>457,62513=>457,62514=>457,62515=>457,62516=>466,62517=>466,62518=>466,62519=>708,62520=>708,62521=>708,62522=>708,62523=>708,62524=>492,62525=>492,62526=>492,62527=>492,62528=>492,62529=>492,63173=>550,64256=>620,64257=>567,64258=>567,64259=>870,64260=>870,64261=>617,64262=>774,64275=>1081,64276=>1081,64277=>1076,64278=>1067,64279=>1376,64285=>201,64286=>0,64287=>297,64288=>572,64289=>770,64290=>696,64291=>815,64292=>694,64293=>759,64294=>769,64295=>726,64296=>788,64297=>754,64298=>637,64299=>637,64300=>637,64301=>637,64302=>602,64303=>602,64304=>602,64305=>520,64306=>371,64307=>491,64308=>588,64309=>320,64310=>365,64312=>583,64313=>297,64314=>483,64315=>476,64316=>511,64318=>611,64320=>359,64321=>584,64323=>576,64324=>562,64326=>534,64327=>638,64328=>508,64329=>637,64330=>591,64331=>245,64332=>520,64333=>476,64334=>562,64335=>566,64338=>847,64339=>883,64340=>250,64341=>271,64342=>847,64343=>883,64344=>250,64345=>271,64346=>847,64347=>883,64348=>250,64349=>271,64350=>847,64351=>883,64352=>250,64353=>271,64354=>847,64355=>883,64356=>250,64357=>271,64358=>847,64359=>883,64360=>250,64361=>271,64362=>933,64363=>932,64364=>430,64365=>455,64366=>933,64367=>932,64368=>430,64369=>455,64370=>581,64371=>581,64372=>556,64373=>581,64374=>581,64375=>581,64376=>556,64377=>581,64378=>581,64379=>581,64380=>556,64381=>581,64382=>581,64383=>581,64384=>556,64385=>581,64386=>400,64387=>472,64388=>400,64389=>472,64390=>400,64391=>472,64392=>400,64393=>472,64394=>435,64395=>497,64396=>435,64397=>497,64398=>805,64399=>805,64400=>428,64401=>497,64402=>805,64403=>805,64404=>428,64405=>497,64406=>805,64407=>805,64408=>428,64409=>497,64410=>805,64411=>805,64412=>428,64413=>497,64414=>661,64415=>685,64416=>661,64417=>685,64418=>250,64419=>271,64426=>628,64427=>568,64428=>475,64429=>415,64467=>742,64468=>758,64469=>428,64470=>497,64473=>435,64474=>465,64488=>250,64489=>271,64508=>704,64509=>750,64510=>250,64511=>271,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>264,65137=>264,65138=>264,65139=>235,65140=>264,65142=>264,65143=>264,65144=>264,65145=>264,65146=>264,65147=>264,65148=>264,65149=>264,65150=>264,65151=>264,65152=>423,65153=>250,65154=>274,65155=>250,65156=>274,65157=>435,65158=>465,65159=>250,65160=>274,65161=>704,65162=>750,65163=>250,65164=>271,65165=>250,65166=>274,65167=>847,65168=>883,65169=>250,65170=>271,65171=>471,65172=>482,65173=>847,65174=>883,65175=>250,65176=>271,65177=>847,65178=>883,65179=>250,65180=>271,65181=>581,65182=>581,65183=>556,65184=>581,65185=>581,65186=>581,65187=>556,65188=>581,65189=>581,65190=>581,65191=>556,65192=>581,65193=>400,65194=>472,65195=>400,65196=>472,65197=>435,65198=>497,65199=>435,65200=>497,65201=>1099,65202=>1147,65203=>754,65204=>803,65205=>1099,65206=>1147,65207=>754,65208=>803,65209=>1088,65210=>1103,65211=>764,65212=>780,65213=>1088,65214=>1103,65215=>764,65216=>780,65217=>832,65218=>854,65219=>716,65220=>738,65221=>832,65222=>854,65223=>716,65224=>738,65225=>537,65226=>479,65227=>537,65228=>434,65229=>537,65230=>479,65231=>470,65232=>434,65233=>933,65234=>932,65235=>430,65236=>455,65237=>698,65238=>750,65239=>430,65240=>455,65241=>742,65242=>758,65243=>428,65244=>497,65245=>654,65246=>681,65247=>274,65248=>298,65249=>557,65250=>599,65251=>482,65252=>520,65253=>661,65254=>685,65255=>250,65256=>271,65257=>471,65258=>482,65259=>475,65260=>415,65261=>435,65262=>465,65263=>704,65264=>750,65265=>704,65266=>750,65267=>250,65268=>271,65269=>513,65270=>537,65271=>513,65272=>537,65273=>513,65274=>537,65275=>513,65276=>537,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusanscondensed.z b/tcpdf/fonts/dejavusanscondensed.z new file mode 100644 index 0000000..2053dd1 Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensed.z differ diff --git a/tcpdf/fonts/dejavusanscondensedb.ctg.z b/tcpdf/fonts/dejavusanscondensedb.ctg.z new file mode 100644 index 0000000..71cef63 Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensedb.ctg.z differ diff --git a/tcpdf/fonts/dejavusanscondensedb.php b/tcpdf/fonts/dejavusanscondensedb.php new file mode 100644 index 0000000..372bbdf --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensedb.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansCondensed-Bold'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=653336; +$enc=''; +$file='dejavusanscondensedb.z'; +$ctg='dejavusanscondensedb.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-962 -415 1778 1174]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>60,'StemH'=>26,'AvgWidth'=>515,'MaxWidth'=>1814,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(126,0,285,729),34=>array(85,458,383,729),35=>array(61,0,693,718),36=>array(70,-147,565,760),37=>array(29,-14,874,742),38=>array(54,-14,747,742),39=>array(85,458,190,729),40=>array(77,-132,339,759),41=>array(72,-132,334,759),42=>array(18,278,453,742),43=>array(95,0,659,627),44=>array(48,-142,250,189),45=>array(48,217,325,359),46=>array(92,0,250,189),47=>array(0,-93,329,729),48=>array(43,-14,583,742),49=>array(101,0,564,729),50=>array(71,0,548,742),51=>array(60,-14,555,742),52=>array(40,0,585,729),53=>array(69,-14,563,729),54=>array(56,-14,578,741),55=>array(60,0,555,729),56=>array(55,-14,571,742),57=>array(46,-14,569,741),58=>array(101,0,259,547),59=>array(57,-142,259,547),60=>array(95,30,659,597),61=>array(95,144,659,482),62=>array(95,30,659,597),63=>array(62,0,464,742),64=>array(59,-174,836,703),65=>array(4,0,692,729),66=>array(83,0,623,729),67=>array(44,-14,603,742),68=>array(83,0,700,729),69=>array(83,0,549,729),70=>array(83,0,540,729),71=>array(44,-14,672,742),72=>array(83,0,671,729),73=>array(83,0,252,729),74=>array(-51,-200,252,729),75=>array(83,0,725,729),76=>array(83,0,549,729),77=>array(83,0,813,729),78=>array(83,0,671,729),79=>array(44,-14,720,742),80=>array(83,0,623,729),81=>array(44,-146,720,742),82=>array(83,0,675,729),83=>array(64,-14,583,742),84=>array(4,0,609,729),85=>array(83,-14,648,729),86=>array(4,0,692,729),87=>array(26,0,965,729),88=>array(17,0,676,729),89=>array(-9,0,661,729),90=>array(40,0,612,729),91=>array(77,-132,351,760),92=>array(0,-93,329,729),93=>array(61,-132,334,760),94=>array(91,457,664,729),95=>array(0,-236,450,-143),96=>array(41,616,290,800),97=>array(39,-14,537,560),98=>array(75,-14,604,760),99=>array(39,-14,474,560),100=>array(40,-14,569,760),101=>array(39,-14,567,560),102=>array(17,0,400,760),103=>array(40,-216,569,559),104=>array(75,0,571,760),105=>array(75,0,233,760),106=>array(-30,-216,233,760),107=>array(75,0,616,760),108=>array(75,0,233,760),109=>array(75,0,867,560),110=>array(75,0,571,560),111=>array(39,-14,580,560),112=>array(75,-208,604,560),113=>array(40,-208,569,559),114=>array(75,0,441,560),115=>array(46,-14,493,560),116=>array(12,0,410,702),117=>array(70,-14,565,547),118=>array(13,0,574,547),119=>array(31,0,800,547),120=>array(13,0,567,547),121=>array(11,-216,571,547),122=>array(40,0,481,547),123=>array(112,-163,528,760),124=>array(114,-236,214,764),125=>array(112,-163,528,760),126=>array(95,212,659,415),161=>array(126,0,285,729),162=>array(76,-153,510,699),163=>array(55,0,552,742),164=>array(32,30,541,596),165=>array(11,0,616,729),166=>array(114,-171,214,699),167=>array(6,-95,447,742),168=>array(86,654,364,774),169=>array(124,0,776,725),170=>array(69,182,440,742),171=>array(69,67,497,519),172=>array(95,140,659,444),173=>array(48,217,325,359),174=>array(124,0,776,725),175=>array(86,668,364,760),176=>array(78,424,371,749),177=>array(95,0,659,627),178=>array(48,326,344,742),179=>array(40,319,346,742),180=>array(160,616,409,800),181=>array(76,-209,634,547),182=>array(57,-96,494,729),183=>array(92,253,250,442),184=>array(115,-196,314,0),185=>array(54,326,344,734),186=>array(51,182,457,742),187=>array(84,67,512,519),188=>array(44,-14,861,742),189=>array(44,-14,888,742),190=>array(45,-14,861,742),191=>array(62,-14,464,729),192=>array(4,0,692,927),193=>array(4,0,692,927),194=>array(4,0,692,927),195=>array(4,0,692,931),196=>array(4,0,692,927),197=>array(4,0,692,928),198=>array(0,0,911,729),199=>array(44,-196,603,742),200=>array(83,0,549,927),201=>array(83,0,549,927),202=>array(83,0,549,927),203=>array(83,0,549,927),204=>array(9,0,252,927),205=>array(83,0,303,927),206=>array(1,0,333,927),207=>array(28,0,306,927),208=>array(14,0,708,729),209=>array(83,0,671,928),210=>array(44,-14,720,927),211=>array(44,-14,720,927),212=>array(44,-14,720,927),213=>array(44,-14,720,928),214=>array(44,-14,720,927),215=>array(112,20,642,607),216=>array(20,-36,741,765),217=>array(83,-14,648,927),218=>array(83,-14,648,927),219=>array(83,-14,648,927),220=>array(83,-14,648,927),221=>array(-9,0,661,927),222=>array(83,0,623,729),223=>array(75,-14,608,760),224=>array(39,-14,537,800),225=>array(39,-14,537,800),226=>array(39,-14,537,800),227=>array(39,-14,537,778),228=>array(39,-14,537,774),229=>array(39,-14,537,888),230=>array(39,-14,900,560),231=>array(39,-196,474,560),232=>array(39,-14,567,800),233=>array(39,-14,567,800),234=>array(39,-14,567,800),235=>array(39,-14,567,774),236=>array(-19,0,233,800),237=>array(75,0,349,800),238=>array(-12,0,320,800),239=>array(15,0,292,774),240=>array(39,-14,580,760),241=>array(75,0,571,778),242=>array(39,-14,580,800),243=>array(39,-14,580,800),244=>array(39,-14,580,800),245=>array(39,-14,580,778),246=>array(39,-14,580,774),247=>array(95,42,659,585),248=>array(34,-46,581,594),249=>array(70,-14,565,800),250=>array(70,-14,565,800),251=>array(70,-14,565,800),252=>array(70,-14,565,774),253=>array(11,-216,571,800),254=>array(75,-208,604,760),255=>array(11,-216,571,774),256=>array(4,0,692,914),257=>array(39,-14,537,763),258=>array(4,0,692,935),259=>array(39,-14,537,780),260=>array(4,-196,692,729),261=>array(39,-196,537,560),262=>array(44,-14,603,927),263=>array(39,-14,501,800),264=>array(44,-14,603,927),265=>array(39,-14,488,800),266=>array(44,-14,603,927),267=>array(39,-14,474,760),268=>array(44,-14,603,927),269=>array(39,-14,483,800),270=>array(83,0,700,927),271=>array(40,-14,784,760),272=>array(14,0,708,729),273=>array(40,-14,637,760),274=>array(83,0,549,914),275=>array(39,-14,567,763),276=>array(83,0,549,927),277=>array(39,-14,567,784),278=>array(83,0,549,927),279=>array(39,-14,567,760),280=>array(83,-196,549,729),281=>array(39,-196,567,560),282=>array(83,0,549,927),283=>array(39,-14,567,800),284=>array(44,-14,672,927),285=>array(40,-216,569,800),286=>array(44,-14,672,927),287=>array(40,-216,569,784),288=>array(44,-14,672,927),289=>array(40,-216,569,760),290=>array(44,-224,672,742),291=>array(40,-216,569,765),292=>array(83,0,671,927),293=>array(-9,0,571,927),294=>array(83,0,794,729),295=>array(73,0,638,760),296=>array(14,0,320,928),297=>array(1,0,308,778),298=>array(28,0,306,914),299=>array(16,0,293,763),300=>array(19,0,315,927),301=>array(6,0,302,784),302=>array(83,-196,330,729),303=>array(75,-196,311,760),304=>array(83,0,252,927),305=>array(75,0,233,547),306=>array(83,-200,586,729),307=>array(75,-216,542,760),308=>array(-51,-200,333,927),309=>array(-30,-216,320,800),310=>array(83,-209,725,729),311=>array(75,-209,616,760),312=>array(75,0,616,547),313=>array(83,0,549,928),314=>array(75,0,321,928),315=>array(83,-209,549,729),316=>array(63,-209,246,760),317=>array(83,0,549,729),318=>array(75,0,432,760),319=>array(83,0,549,729),320=>array(75,0,436,760),321=>array(-41,0,554,729),322=>array(-17,0,352,760),323=>array(83,0,671,928),324=>array(75,0,571,803),325=>array(83,-209,671,729),326=>array(75,-209,571,560),327=>array(83,0,671,927),328=>array(75,0,571,800),329=>array(46,0,802,729),330=>array(75,-200,658,742),331=>array(75,-216,571,560),332=>array(44,-14,720,914),333=>array(39,-14,580,763),334=>array(44,-14,720,927),335=>array(39,-14,580,787),336=>array(44,-14,720,927),337=>array(39,-14,580,800),338=>array(44,-1,985,730),339=>array(39,-14,941,560),340=>array(83,0,675,928),341=>array(75,0,464,803),342=>array(83,-209,675,729),343=>array(63,-209,441,560),344=>array(83,0,675,927),345=>array(75,0,441,800),346=>array(64,-14,583,928),347=>array(46,-14,493,803),348=>array(64,-14,583,927),349=>array(46,-14,493,800),350=>array(64,-196,583,742),351=>array(46,-196,493,560),352=>array(64,-14,583,927),353=>array(46,-14,493,800),354=>array(4,-196,609,729),355=>array(12,-196,410,702),356=>array(4,0,609,930),357=>array(12,0,457,814),358=>array(4,0,609,729),359=>array(12,0,410,702),360=>array(83,-14,648,928),361=>array(70,-14,565,778),362=>array(83,-14,648,914),363=>array(70,-14,565,763),364=>array(83,-14,648,927),365=>array(70,-14,565,784),366=>array(83,-14,648,929),367=>array(70,-14,565,881),368=>array(83,-14,648,927),369=>array(70,-14,565,800),370=>array(83,-196,648,729),371=>array(70,-196,645,547),372=>array(26,0,965,931),373=>array(31,0,800,800),374=>array(-9,0,661,931),375=>array(11,-216,571,800),376=>array(-9,0,661,927),377=>array(40,0,612,928),378=>array(40,0,481,803),379=>array(40,0,612,929),380=>array(40,0,481,760),381=>array(40,0,612,927),382=>array(40,0,481,800),383=>array(17,0,400,760),384=>array(8,-14,604,760),385=>array(-62,0,667,729),386=>array(83,0,623,729),387=>array(75,-14,604,760),388=>array(35,0,659,729),389=>array(22,-14,627,760),390=>array(44,-14,603,742),391=>array(44,-14,736,924),392=>array(39,-14,579,724),393=>array(14,0,708,729),394=>array(-62,0,744,729),395=>array(63,0,603,729),396=>array(40,-14,569,760),397=>array(39,-222,580,560),398=>array(83,0,549,729),399=>array(45,-14,720,742),400=>array(60,-14,555,742),401=>array(-51,-200,540,729),402=>array(-52,-208,400,760),403=>array(44,-14,782,924),404=>array(2,-211,714,730),405=>array(75,0,900,760),406=>array(83,0,385,729),407=>array(4,0,346,729),408=>array(83,0,725,742),409=>array(75,0,616,760),410=>array(4,0,320,760),411=>array(-10,0,506,760),412=>array(75,-13,867,729),413=>array(-51,-200,671,729),414=>array(75,-208,571,560),415=>array(44,-14,720,742),416=>array(47,-14,769,761),417=>array(42,-14,637,609),418=>array(44,-14,906,742),419=>array(39,-216,744,560),420=>array(-62,0,667,729),421=>array(75,-208,604,760),422=>array(83,-146,684,729),423=>array(23,-14,541,742),424=>array(13,-14,460,560),425=>array(83,0,549,729),426=>array(-28,-217,505,760),427=>array(12,-216,410,702),428=>array(13,0,631,729),429=>array(12,0,410,760),430=>array(4,-200,609,729),431=>array(82,-14,750,761),432=>array(67,-14,660,609),433=>array(24,-14,741,728),434=>array(83,0,695,729),435=>array(-9,0,716,742),436=>array(11,-216,701,560),437=>array(40,0,612,729),438=>array(40,0,481,547),439=>array(65,-33,655,729),440=>array(37,-33,627,729),441=>array(33,-215,528,547),442=>array(51,-208,481,547),443=>array(71,0,548,742),444=>array(37,-33,655,729),445=>array(33,-215,528,547),446=>array(32,-15,473,702),447=>array(75,-208,604,560),448=>array(83,-208,252,729),449=>array(83,-208,510,729),450=>array(4,-208,482,729),451=>array(88,0,247,729),452=>array(83,0,1359,927),453=>array(83,0,1228,800),454=>array(40,-14,1125,800),455=>array(83,-200,826,729),456=>array(83,-216,807,760),457=>array(75,-216,542,760),458=>array(83,-200,1005,729),459=>array(83,-216,986,760),460=>array(75,-216,874,760),461=>array(4,0,692,927),462=>array(39,-14,537,800),463=>array(2,0,334,927),464=>array(1,0,333,800),465=>array(44,-14,720,927),466=>array(39,-14,580,800),467=>array(83,-14,648,927),468=>array(70,-14,565,800),469=>array(83,-14,648,1040),470=>array(70,-14,565,914),471=>array(83,-14,648,1114),472=>array(70,-14,565,917),473=>array(83,-14,648,1114),474=>array(70,-14,565,917),475=>array(83,-14,648,1114),476=>array(70,-14,565,917),477=>array(39,-14,567,560),478=>array(4,0,692,1040),479=>array(39,-14,537,914),480=>array(4,0,692,1042),481=>array(39,-14,537,914),482=>array(0,0,911,914),483=>array(39,-14,900,758),484=>array(44,-14,712,742),485=>array(40,-216,607,559),486=>array(44,-14,672,927),487=>array(40,-216,569,800),488=>array(83,0,725,927),489=>array(-5,0,616,927),490=>array(44,-196,720,742),491=>array(39,-196,580,560),492=>array(44,-196,720,914),493=>array(39,-196,580,763),494=>array(65,-33,655,927),495=>array(39,-215,534,793),496=>array(-30,-216,324,800),497=>array(83,0,1359,729),498=>array(83,0,1228,729),499=>array(40,-14,1125,760),500=>array(44,-14,672,928),501=>array(40,-216,569,800),502=>array(83,-14,1067,729),503=>array(83,-208,664,742),504=>array(83,0,671,927),505=>array(75,0,571,800),506=>array(4,0,692,931),507=>array(39,-14,637,931),508=>array(0,0,911,927),509=>array(39,-14,900,800),510=>array(20,-36,741,927),511=>array(34,-46,581,800),512=>array(4,0,692,928),513=>array(39,-14,537,800),514=>array(4,0,692,923),515=>array(39,-14,537,784),516=>array(83,0,549,928),517=>array(39,-14,567,800),518=>array(83,0,549,923),519=>array(39,-14,567,784),520=>array(-37,0,340,928),521=>array(-3,0,343,800),522=>array(21,0,316,923),523=>array(6,0,302,784),524=>array(44,-14,720,928),525=>array(39,-14,580,800),526=>array(44,-14,720,923),527=>array(39,-14,580,784),528=>array(83,0,675,928),529=>array(52,0,441,800),530=>array(83,0,675,923),531=>array(75,0,441,784),532=>array(83,-14,648,928),533=>array(70,-14,565,800),534=>array(83,-14,648,923),535=>array(70,-14,565,784),536=>array(64,-239,583,742),537=>array(46,-239,493,560),538=>array(4,-239,609,729),539=>array(12,-239,410,702),540=>array(60,-210,555,742),541=>array(44,-211,490,560),542=>array(83,0,671,927),543=>array(-11,0,571,927),544=>array(75,-208,658,742),545=>array(40,-75,740,760),546=>array(55,-14,673,742),547=>array(39,-14,554,646),548=>array(40,-216,612,729),549=>array(40,-216,481,547),550=>array(4,0,692,927),551=>array(39,-14,537,760),552=>array(83,-192,549,729),553=>array(39,-196,567,560),554=>array(44,-14,720,1040),555=>array(39,-14,580,914),556=>array(44,-14,720,1040),557=>array(39,-14,580,898),558=>array(44,-14,720,927),559=>array(39,-14,580,760),560=>array(44,-14,720,1042),561=>array(39,-14,580,914),562=>array(-9,0,661,914),563=>array(11,-216,571,763),564=>array(75,-75,404,760),565=>array(75,-75,742,560),566=>array(12,-76,422,702),567=>array(-30,-216,233,547),568=>array(40,-14,939,760),569=>array(40,-208,939,560),570=>array(-13,-36,709,765),571=>array(-31,-36,691,765),572=>array(-6,-46,540,594),573=>array(-1,0,549,729),574=>array(-54,-36,668,765),575=>array(46,-240,536,560),576=>array(40,-240,536,547),577=>array(35,0,667,729),578=>array(38,0,516,560),579=>array(5,0,623,729),580=>array(21,-14,710,729),581=>array(4,0,692,729),582=>array(83,-93,549,822),583=>array(39,-93,567,640),584=>array(-51,-200,324,729),585=>array(-30,-216,325,760),586=>array(43,-200,834,741),587=>array(40,-216,720,560),588=>array(5,0,675,729),589=>array(-19,0,441,560),590=>array(-9,0,661,729),591=>array(-4,-216,590,547),592=>array(70,-14,568,560),593=>array(40,-14,569,560),594=>array(75,-14,604,560),595=>array(75,-14,604,760),596=>array(39,-14,474,560),597=>array(39,-69,474,560),598=>array(40,-216,675,760),599=>array(40,-14,721,760),600=>array(39,-14,567,560),601=>array(39,-14,567,560),602=>array(53,-14,796,560),603=>array(48,-14,444,560),604=>array(48,-14,444,560),605=>array(48,-14,692,560),606=>array(48,-14,598,560),607=>array(-30,-216,325,547),608=>array(40,-216,721,760),609=>array(40,-216,569,547),610=>array(39,-14,491,546),611=>array(22,-211,557,547),612=>array(22,-21,557,547),613=>array(70,-214,565,547),614=>array(75,0,571,760),615=>array(75,-216,571,760),616=>array(75,0,416,760),617=>array(75,0,321,547),618=>array(75,0,416,547),619=>array(75,0,427,760),620=>array(75,0,549,760),621=>array(76,-216,386,760),622=>array(75,-215,714,760),623=>array(71,-14,863,546),624=>array(71,-209,863,546),625=>array(75,-216,868,560),626=>array(-30,-216,571,560),627=>array(75,-216,722,560),628=>array(75,0,561,547),629=>array(39,-14,580,560),630=>array(39,-1,744,547),631=>array(45,0,567,574),632=>array(54,-208,656,760),633=>array(75,-13,441,547),634=>array(75,-13,441,760),635=>array(75,-216,593,547),636=>array(75,-208,441,560),637=>array(75,-216,441,560),638=>array(75,0,477,547),639=>array(75,0,477,547),640=>array(46,0,532,547),641=>array(46,0,532,547),642=>array(46,-216,493,560),643=>array(-30,-216,388,760),644=>array(-10,-216,400,760),645=>array(75,-216,485,560),646=>array(-28,-217,505,760),647=>array(12,-155,410,547),648=>array(12,-216,410,702),649=>array(75,-14,753,547),650=>array(71,-14,624,547),651=>array(75,0,563,547),652=>array(13,0,574,547),653=>array(31,0,800,547),654=>array(11,0,571,763),655=>array(58,0,594,547),656=>array(40,-216,633,547),657=>array(40,-69,556,547),658=>array(39,-215,534,547),659=>array(51,-215,534,547),660=>array(32,0,473,759),661=>array(32,0,473,759),662=>array(32,0,473,759),663=>array(32,-208,473,759),664=>array(44,-14,720,742),665=>array(75,0,530,547),666=>array(48,-14,598,560),667=>array(39,0,624,760),668=>array(75,0,546,547),669=>array(-153,-216,307,760),670=>array(75,-213,616,547),671=>array(75,0,449,547),672=>array(40,-208,721,760),673=>array(32,0,473,759),674=>array(32,0,473,759),675=>array(40,-14,998,760),676=>array(40,-215,1050,760),677=>array(40,-55,997,760),678=>array(12,0,835,702),679=>array(12,-216,700,760),680=>array(12,-69,793,702),681=>array(17,-216,881,760),682=>array(75,0,734,760),683=>array(75,0,659,760),684=>array(20,0,512,641),685=>array(20,86,311,641),686=>array(-80,-214,566,760),687=>array(-80,-216,717,760),688=>array(48,326,365,751),689=>array(48,326,365,751),690=>array(-20,205,149,751),691=>array(48,326,283,640),692=>array(48,319,283,632),693=>array(48,205,379,632),694=>array(12,326,322,632),695=>array(20,326,512,632),696=>array(7,205,365,632),697=>array(70,557,196,800),698=>array(70,557,394,800),699=>array(92,418,286,729),700=>array(57,418,250,729),701=>array(111,616,267,856),702=>array(104,481,230,760),703=>array(104,481,230,760),704=>array(21,326,303,751),705=>array(21,326,303,751),706=>array(117,517,333,843),707=>array(117,517,333,843),708=>array(78,561,372,800),709=>array(78,561,372,800),710=>array(59,616,391,800),711=>array(59,616,391,800),712=>array(96,488,180,759),713=>array(86,668,364,760),714=>array(160,616,409,800),715=>array(41,616,290,800),716=>array(96,-81,180,190),717=>array(86,-184,364,-92),718=>array(41,-236,290,-52),719=>array(160,-236,409,-52),720=>array(41,0,221,547),721=>array(41,361,221,547),722=>array(104,269,230,547),723=>array(104,269,230,547),724=>array(124,238,322,458),725=>array(126,238,325,458),726=>array(48,119,326,427),727=>array(48,229,247,317),728=>array(77,639,373,784),729=>array(165,654,286,774),730=>array(100,610,351,888),731=>array(150,-196,338,0),732=>array(72,638,378,778),733=>array(84,616,431,800),734=>array(0,213,324,524),735=>array(100,616,349,800),736=>array(14,208,351,633),737=>array(48,326,149,751),738=>array(30,318,316,640),739=>array(9,326,363,632),740=>array(21,326,303,751),741=>array(86,0,364,693),742=>array(86,0,364,693),743=>array(86,0,364,693),744=>array(86,0,364,693),745=>array(86,0,364,693),748=>array(79,-260,373,-21),749=>array(86,605,364,822),750=>array(83,418,499,729),755=>array(100,-240,351,38),759=>array(72,-196,378,-84),768=>array(-410,616,-161,800),769=>array(-293,616,-44,800),770=>array(-392,616,-60,800),771=>array(-382,638,-75,778),772=>array(-365,668,-87,760),773=>array(-450,663,0,755),774=>array(-369,639,-73,784),775=>array(-305,617,-147,760),776=>array(-362,654,-84,774),777=>array(-333,616,-110,843),778=>array(-352,610,-101,888),779=>array(-364,616,-17,800),780=>array(-392,616,-60,800),781=>array(-268,615,-185,832),782=>array(-351,615,-101,832),783=>array(-436,616,-89,800),784=>array(-369,639,-73,882),785=>array(-369,639,-73,784),786=>array(-245,418,-62,563),787=>array(-239,595,-119,844),788=>array(-239,595,-119,844),789=>array(-80,616,80,800),790=>array(-410,-276,-161,-93),791=>array(-293,-276,-44,-93),792=>array(-342,-240,-190,-6),793=>array(-266,-240,-114,-6),794=>array(-202,658,42,929),795=>array(-158,400,19,609),796=>array(-298,-240,-194,-11),797=>array(-347,-240,-103,-59),798=>array(-350,-240,-105,-59),799=>array(-333,-240,-123,-6),800=>array(-350,-202,-105,-110),801=>array(-381,-216,-71,117),802=>array(-377,-216,-67,117),803=>array(-305,-212,-147,-70),804=>array(-362,-212,-84,-92),805=>array(-329,-240,-122,-11),806=>array(-294,-239,-112,-93),807=>array(-335,-196,-136,0),808=>array(-300,-196,-111,0),809=>array(-268,-240,-185,-47),810=>array(-365,-237,-87,-54),811=>array(-405,-239,-46,-94),812=>array(-392,-240,-60,-57),813=>array(-392,-240,-60,-57),814=>array(-369,-239,-73,-94),815=>array(-369,-240,-73,-95),816=>array(-382,-234,-75,-94),817=>array(-365,-184,-87,-92),818=>array(-450,-236,0,-143),819=>array(-450,-236,0,-9),820=>array(-563,212,1,415),821=>array(-424,214,-84,309),822=>array(-754,214,-78,309),823=>array(-590,-46,-43,594),824=>array(-743,-36,-21,765),825=>array(-257,-240,-153,-11),826=>array(-365,-238,-87,-55),827=>array(-299,-241,-88,-6),828=>array(-405,-239,-46,-94),829=>array(-342,585,-110,842),830=>array(-240,595,-114,867),831=>array(-450,528,0,755),832=>array(-410,616,-161,800),833=>array(-291,616,-42,800),834=>array(-379,638,-73,778),835=>array(-239,595,-119,844),836=>array(-364,654,-49,978),837=>array(-258,-208,-161,-45),838=>array(-363,639,-87,786),839=>array(-324,-226,-126,-35),840=>array(-342,-240,-108,-47),841=>array(-331,-240,-119,-21),842=>array(-378,616,-72,800),843=>array(-378,567,-72,850),844=>array(-378,573,-72,835),845=>array(-413,-230,-37,-30),846=>array(-322,-240,-128,-45),849=>array(-289,610,-161,888),850=>array(-369,640,-73,882),851=>array(-330,-240,-122,-9),855=>array(-289,610,-161,888),856=>array(-108,654,13,774),858=>array(-400,-240,-52,-11),860=>array(-390,-237,412,-79),861=>array(-390,802,412,960),862=>array(-401,797,401,889),863=>array(-401,-185,401,-93),864=>array(-326,756,326,894),865=>array(-401,769,401,927),866=>array(-404,-230,409,-30),880=>array(83,0,545,729),881=>array(75,0,433,547),882=>array(83,0,837,729),883=>array(83,0,670,729),884=>array(70,557,196,800),885=>array(70,-208,196,35),886=>array(83,0,671,729),887=>array(75,0,555,547),890=>array(182,-208,299,-45),891=>array(39,-14,474,560),892=>array(39,-14,474,560),893=>array(39,-14,474,560),894=>array(57,-142,259,547),900=>array(152,616,401,800),901=>array(86,654,401,978),902=>array(23,0,713,800),903=>array(92,253,250,442),904=>array(-22,0,694,800),905=>array(-17,0,824,800),906=>array(-19,0,405,800),908=>array(-17,-14,753,800),910=>array(-24,0,893,800),911=>array(-27,0,780,800),912=>array(21,-19,335,978),913=>array(4,0,692,729),914=>array(83,0,623,729),915=>array(83,0,549,729),916=>array(4,0,692,729),917=>array(83,0,549,729),918=>array(40,0,612,729),919=>array(83,0,671,729),920=>array(44,-14,720,742),921=>array(83,0,252,729),922=>array(83,0,725,729),923=>array(4,0,692,729),924=>array(83,0,813,729),925=>array(83,0,671,729),926=>array(88,0,493,729),927=>array(44,-14,720,742),928=>array(83,0,671,729),929=>array(83,0,623,729),931=>array(83,0,549,729),932=>array(4,0,609,729),933=>array(-9,0,661,729),934=>array(44,0,720,729),935=>array(17,0,676,729),936=>array(50,0,716,729),937=>array(24,0,741,742),938=>array(31,0,308,927),939=>array(-9,0,661,927),940=>array(43,-13,581,800),941=>array(48,-14,444,800),942=>array(75,-208,571,800),943=>array(69,-19,318,800),944=>array(70,-10,567,978),945=>array(43,-13,581,559),946=>array(75,-208,604,773),947=>array(13,-208,600,547),948=>array(39,-14,580,768),949=>array(48,-14,444,560),950=>array(39,-208,488,760),951=>array(75,-208,571,560),952=>array(39,-11,580,768),953=>array(70,-19,313,547),954=>array(75,0,589,547),955=>array(26,0,543,760),956=>array(76,-209,634,547),957=>array(13,0,571,547),958=>array(39,-208,488,760),959=>array(39,-14,580,560),960=>array(38,-19,659,547),961=>array(75,-208,604,562),962=>array(39,-208,474,560),963=>array(39,-14,654,547),964=>array(19,-19,551,547),965=>array(70,-10,567,547),966=>array(58,-208,652,552),967=>array(22,-208,558,547),968=>array(58,-208,652,547),969=>array(39,-13,744,547),970=>array(17,-19,320,774),971=>array(70,-10,567,774),972=>array(39,-14,580,800),973=>array(70,-10,567,800),974=>array(39,-13,744,800),975=>array(83,-208,725,729),976=>array(49,-11,518,768),977=>array(46,-11,551,768),978=>array(18,0,646,729),979=>array(-22,0,859,800),980=>array(18,0,646,927),981=>array(54,-208,656,760),982=>array(20,-13,759,547),983=>array(49,-205,619,548),984=>array(44,-208,720,742),985=>array(39,-208,580,560),986=>array(44,-208,610,729),987=>array(39,-208,487,547),988=>array(83,0,540,729),989=>array(-51,-208,393,760),990=>array(54,2,582,729),991=>array(73,0,514,759),992=>array(50,-208,759,742),993=>array(20,-180,483,559),994=>array(44,-213,939,729),995=>array(53,-208,698,547),996=>array(44,-208,667,742),997=>array(40,-208,569,560),998=>array(83,-213,791,729),999=>array(18,-14,621,575),1000=>array(38,-208,624,745),1001=>array(41,-208,547,560),1002=>array(47,0,663,742),1003=>array(44,0,560,560),1004=>array(44,-14,644,758),1005=>array(75,-14,604,758),1006=>array(25,-208,589,729),1007=>array(24,-208,507,729),1008=>array(49,-7,619,548),1009=>array(75,-216,604,562),1010=>array(39,-14,474,560),1011=>array(-30,-216,233,760),1012=>array(44,-14,720,742),1013=>array(61,-14,496,560),1014=>array(72,-14,507,560),1015=>array(83,0,623,729),1016=>array(75,-208,604,760),1017=>array(44,-14,603,742),1018=>array(83,0,813,729),1019=>array(66,-208,584,547),1020=>array(30,-208,604,562),1021=>array(30,-14,588,742),1022=>array(44,-14,603,742),1023=>array(30,-14,588,742),1024=>array(83,0,549,927),1025=>array(83,0,549,927),1026=>array(4,-200,718,729),1027=>array(83,0,549,928),1028=>array(44,-14,603,742),1029=>array(64,-14,583,742),1030=>array(83,0,252,729),1031=>array(28,0,306,927),1032=>array(-51,-200,252,729),1033=>array(41,0,992,729),1034=>array(83,0,954,729),1035=>array(4,0,718,729),1036=>array(83,0,723,928),1037=>array(83,0,671,927),1038=>array(26,0,667,927),1039=>array(83,-157,671,729),1040=>array(4,0,692,729),1041=>array(83,0,623,729),1042=>array(83,0,623,729),1043=>array(83,0,549,729),1044=>array(54,-157,748,729),1045=>array(83,0,549,729),1046=>array(13,0,1089,729),1047=>array(59,-14,580,742),1048=>array(83,0,671,729),1049=>array(83,0,671,927),1050=>array(83,0,723,729),1051=>array(41,0,665,729),1052=>array(83,0,813,729),1053=>array(83,0,671,729),1054=>array(44,-14,720,742),1055=>array(83,0,671,729),1056=>array(83,0,623,729),1057=>array(44,-14,603,742),1058=>array(4,0,609,729),1059=>array(26,0,667,729),1060=>array(44,0,848,729),1061=>array(17,0,676,729),1062=>array(83,-157,781,729),1063=>array(72,0,645,729),1064=>array(83,0,1029,729),1065=>array(83,-157,1139,729),1066=>array(44,0,801,729),1067=>array(83,0,850,729),1068=>array(83,0,623,729),1069=>array(57,-14,616,742),1070=>array(83,-14,1007,742),1071=>array(57,0,611,729),1072=>array(39,-14,537,560),1073=>array(39,-14,590,792),1074=>array(75,0,530,547),1075=>array(75,0,449,547),1076=>array(50,-138,677,547),1077=>array(39,-14,567,560),1078=>array(13,0,883,547),1079=>array(44,-14,466,560),1080=>array(75,0,555,547),1081=>array(75,0,555,765),1082=>array(75,0,598,547),1083=>array(49,0,584,547),1084=>array(75,0,660,547),1085=>array(75,0,546,547),1086=>array(39,-14,580,560),1087=>array(75,0,546,547),1088=>array(75,-208,604,560),1089=>array(39,-14,474,560),1090=>array(3,0,518,547),1091=>array(11,-216,571,547),1092=>array(49,-208,844,760),1093=>array(13,0,567,547),1094=>array(75,-138,628,547),1095=>array(58,0,516,547),1096=>array(75,0,875,547),1097=>array(75,-138,957,547),1098=>array(18,0,641,547),1099=>array(75,0,741,547),1100=>array(75,0,530,547),1101=>array(60,-14,495,560),1102=>array(75,-14,835,560),1103=>array(27,0,504,547),1104=>array(39,-14,567,803),1105=>array(39,-14,567,774),1106=>array(18,-216,602,760),1107=>array(75,0,468,803),1108=>array(39,-14,474,560),1109=>array(46,-14,493,560),1110=>array(75,0,233,760),1111=>array(15,0,292,774),1112=>array(-30,-216,233,760),1113=>array(40,0,848,547),1114=>array(75,0,821,547),1115=>array(18,0,591,760),1116=>array(75,0,598,803),1117=>array(75,0,555,803),1118=>array(11,-216,571,765),1119=>array(75,-138,546,547),1120=>array(44,-14,939,729),1121=>array(39,-13,744,547),1122=>array(44,0,712,729),1123=>array(18,0,623,731),1124=>array(83,-14,854,742),1125=>array(75,-14,685,560),1126=>array(7,0,886,729),1127=>array(22,0,727,547),1128=>array(83,0,1216,729),1129=>array(75,0,988,547),1130=>array(44,0,720,729),1131=>array(39,0,580,547),1132=>array(83,0,1023,729),1133=>array(75,0,868,547),1134=>array(48,-208,555,938),1135=>array(35,-193,444,756),1136=>array(8,0,954,729),1137=>array(8,-208,942,759),1138=>array(44,-14,720,742),1139=>array(39,-14,580,560),1140=>array(4,0,743,742),1141=>array(8,0,613,560),1142=>array(4,0,743,928),1143=>array(8,0,613,800),1144=>array(42,-216,1018,742),1145=>array(39,-216,923,560),1146=>array(44,-14,922,742),1147=>array(39,-14,738,560),1148=>array(51,-14,1213,928),1149=>array(42,-13,1014,828),1150=>array(44,-14,939,910),1151=>array(39,-13,744,746),1152=>array(44,-208,603,742),1153=>array(39,-208,474,560),1154=>array(24,-33,469,488),1155=>array(-541,606,-77,822),1156=>array(-372,638,0,784),1157=>array(-329,595,-208,785),1158=>array(-329,595,-208,785),1159=>array(-716,592,4,788),1160=>array(-962,-179,345,928),1161=>array(-896,-280,275,1022),1162=>array(83,-208,839,927),1163=>array(75,-208,704,765),1164=>array(21,0,623,729),1165=>array(0,0,511,702),1166=>array(83,0,632,729),1167=>array(75,-208,604,560),1168=>array(83,0,549,878),1169=>array(75,0,449,700),1170=>array(25,0,575,729),1171=>array(18,0,467,547),1172=>array(83,-200,655,729),1173=>array(75,-216,532,547),1174=>array(13,-157,1089,729),1175=>array(13,-138,883,547),1176=>array(59,-196,580,742),1177=>array(44,-196,466,560),1178=>array(83,-157,723,729),1179=>array(75,-138,598,547),1180=>array(83,0,723,729),1181=>array(75,0,598,547),1182=>array(21,0,723,729),1183=>array(6,0,598,760),1184=>array(22,0,901,729),1185=>array(18,0,730,547),1186=>array(83,-157,839,729),1187=>array(75,-138,705,547),1188=>array(83,0,968,729),1189=>array(75,0,762,547),1190=>array(83,-200,1074,729),1191=>array(75,-216,845,547),1192=>array(50,-14,832,743),1193=>array(49,-14,752,560),1194=>array(44,-196,603,742),1195=>array(39,-196,474,560),1196=>array(4,-157,609,729),1197=>array(3,-138,518,547),1198=>array(-9,0,661,729),1199=>array(11,-216,571,547),1200=>array(-9,0,661,729),1201=>array(11,-216,571,547),1202=>array(17,-157,676,729),1203=>array(13,-138,567,547),1204=>array(4,-157,979,729),1205=>array(3,-138,878,547),1206=>array(72,-157,813,729),1207=>array(58,-138,674,547),1208=>array(72,0,645,729),1209=>array(58,0,516,547),1210=>array(72,0,645,729),1211=>array(75,0,571,760),1212=>array(6,-14,879,742),1213=>array(4,-14,686,560),1214=>array(6,-184,879,742),1215=>array(4,-161,686,560),1216=>array(83,0,252,729),1217=>array(13,0,1089,927),1218=>array(13,0,883,784),1219=>array(83,-200,692,729),1220=>array(75,-216,563,547),1221=>array(23,-208,834,729),1222=>array(19,-208,703,547),1223=>array(83,-200,671,729),1224=>array(75,-216,547,547),1225=>array(83,-208,839,729),1226=>array(75,-208,704,547),1227=>array(72,-157,645,729),1228=>array(58,-138,516,547),1229=>array(83,-208,981,729),1230=>array(75,-208,817,547),1231=>array(75,0,233,760),1232=>array(4,0,692,935),1233=>array(39,-14,537,780),1234=>array(4,0,692,927),1235=>array(39,-14,537,774),1236=>array(0,0,911,729),1237=>array(39,-14,900,560),1238=>array(83,0,549,927),1239=>array(39,-14,567,784),1240=>array(45,-14,720,742),1241=>array(39,-14,567,560),1242=>array(45,-14,720,927),1243=>array(39,-14,567,774),1244=>array(13,0,1089,927),1245=>array(13,0,883,774),1246=>array(59,-14,580,927),1247=>array(44,-14,466,773),1248=>array(65,-33,655,729),1249=>array(39,-215,534,547),1250=>array(83,0,671,914),1251=>array(75,0,555,763),1252=>array(83,0,671,927),1253=>array(75,0,555,774),1254=>array(44,-14,720,927),1255=>array(39,-14,580,774),1256=>array(44,-14,720,742),1257=>array(39,-14,580,560),1258=>array(44,-14,720,927),1259=>array(39,-14,580,774),1260=>array(57,-14,616,927),1261=>array(60,-14,495,774),1262=>array(26,0,667,914),1263=>array(11,-216,571,763),1264=>array(26,0,667,927),1265=>array(11,-216,571,774),1266=>array(26,0,667,927),1267=>array(11,-216,571,800),1268=>array(72,0,645,927),1269=>array(58,0,516,774),1270=>array(83,-157,549,729),1271=>array(75,-138,449,547),1272=>array(83,0,850,927),1273=>array(75,0,741,774),1274=>array(25,-216,575,729),1275=>array(18,-217,467,547),1276=>array(17,-200,676,729),1277=>array(13,-216,558,547),1278=>array(17,0,676,729),1279=>array(13,0,567,547),1280=>array(63,0,604,729),1281=>array(40,0,472,547),1282=>array(63,-14,973,729),1283=>array(40,-14,765,547),1284=>array(88,-14,925,742),1285=>array(70,-14,752,560),1286=>array(88,-208,724,742),1287=>array(70,-208,602,560),1288=>array(23,-14,1035,729),1289=>array(19,-14,839,547),1290=>array(83,-14,1067,729),1291=>array(75,-14,845,547),1292=>array(44,-14,673,742),1293=>array(39,-14,490,546),1294=>array(4,-14,762,729),1295=>array(3,-14,638,547),1296=>array(60,-14,555,742),1297=>array(48,-14,444,560),1298=>array(41,-200,665,729),1299=>array(49,-216,584,547),1300=>array(41,0,1139,729),1301=>array(49,0,948,547),1302=>array(83,0,941,729),1303=>array(75,-208,868,560),1304=>array(57,0,908,729),1305=>array(27,-14,869,560),1306=>array(44,-146,720,742),1307=>array(40,-208,569,559),1308=>array(26,0,965,729),1309=>array(31,0,800,547),1310=>array(83,0,723,729),1311=>array(75,0,598,547),1312=>array(41,-200,1068,729),1313=>array(49,-216,883,547),1314=>array(83,-200,1074,729),1315=>array(75,-216,845,547),1316=>array(83,-157,839,729),1317=>array(75,-138,704,547),1329=>array(74,-38,658,729),1330=>array(74,0,590,743),1331=>array(23,0,655,743),1332=>array(20,0,659,743),1333=>array(74,-14,590,729),1334=>array(59,0,598,743),1335=>array(74,0,563,729),1336=>array(74,0,590,743),1337=>array(74,-13,813,742),1338=>array(23,-14,655,729),1339=>array(74,0,583,729),1340=>array(74,0,494,729),1341=>array(74,-14,799,729),1342=>array(55,-12,650,741),1343=>array(66,0,576,729),1344=>array(4,-46,539,729),1345=>array(59,-48,598,743),1346=>array(16,0,644,743),1347=>array(20,0,594,735),1348=>array(74,-14,702,729),1349=>array(51,-14,581,743),1350=>array(0,-14,628,729),1351=>array(51,-14,590,729),1352=>array(74,0,583,743),1353=>array(35,-48,574,743),1354=>array(16,0,710,743),1355=>array(51,0,589,743),1356=>array(74,0,702,743),1357=>array(83,-14,648,729),1358=>array(16,0,644,729),1359=>array(47,-14,577,743),1360=>array(74,0,583,743),1361=>array(51,-14,581,743),1362=>array(74,0,511,729),1363=>array(20,0,730,729),1364=>array(8,0,581,743),1365=>array(44,-14,720,742),1366=>array(40,-14,750,729),1369=>array(94,481,207,760),1370=>array(51,418,225,729),1371=>array(0,616,279,800),1372=>array(0,595,338,893),1373=>array(-6,614,261,847),1374=>array(0,586,414,878),1375=>array(35,618,391,893),1377=>array(64,-13,777,547),1378=>array(68,-208,514,560),1379=>array(35,-208,630,559),1380=>array(68,-208,633,560),1381=>array(64,-14,510,760),1382=>array(35,-208,630,559),1383=>array(68,0,479,760),1384=>array(68,-208,521,560),1385=>array(68,-208,681,560),1386=>array(35,-14,630,760),1387=>array(68,-208,514,760),1388=>array(68,-208,369,547),1389=>array(68,-208,818,760),1390=>array(35,-14,540,760),1391=>array(64,-208,510,760),1392=>array(68,0,514,760),1393=>array(23,-13,483,760),1394=>array(68,-208,633,560),1395=>array(55,-13,514,768),1396=>array(64,-13,629,760),1397=>array(-27,-216,210,547),1398=>array(-55,-13,510,760),1399=>array(12,-208,410,560),1400=>array(68,0,514,560),1401=>array(4,-208,338,547),1402=>array(64,-208,777,546),1403=>array(40,-208,480,560),1404=>array(68,0,560,560),1405=>array(64,-13,510,547),1406=>array(64,-208,629,760),1407=>array(64,-13,777,560),1408=>array(68,-208,514,560),1409=>array(40,-216,568,559),1410=>array(68,0,427,547),1411=>array(64,-208,777,760),1412=>array(-51,-208,544,560),1413=>array(40,-14,581,560),1414=>array(27,-190,697,760),1415=>array(64,-14,727,760),1417=>array(90,0,233,547),1418=>array(44,180,292,359),1456=>array(267,-229,355,-10),1457=>array(132,-229,452,-10),1458=>array(124,-229,443,-10),1459=>array(113,-229,443,-10),1460=>array(267,-171,355,-73),1461=>array(201,-171,421,-73),1462=>array(211,-229,410,-10),1463=>array(157,-171,465,0),1464=>array(167,-217,454,0),1465=>array(-22,547,66,723),1466=>array(-22,547,66,723),1467=>array(167,-239,476,-5),1468=>array(271,225,359,322),1469=>array(267,-217,355,-22),1470=>array(48,413,325,555),1471=>array(167,547,454,710),1472=>array(88,-98,246,645),1473=>array(677,613,766,710),1474=>array(123,613,211,710),1475=>array(88,0,246,547),1478=>array(70,0,416,547),1479=>array(167,-229,454,-10),1488=>array(75,0,580,547),1489=>array(39,0,510,547),1490=>array(39,-9,376,547),1491=>array(39,0,491,547),1492=>array(82,0,537,547),1493=>array(82,0,228,547),1494=>array(39,0,322,547),1495=>array(82,0,537,547),1496=>array(81,-13,562,553),1497=>array(60,164,206,547),1498=>array(39,-240,438,547),1499=>array(39,0,460,547),1500=>array(39,0,475,711),1501=>array(82,0,545,547),1502=>array(39,0,570,554),1503=>array(82,-240,228,547),1504=>array(39,0,326,547),1505=>array(81,-13,562,547),1506=>array(39,-101,518,547),1507=>array(82,-240,526,547),1508=>array(82,0,542,547),1509=>array(10,-240,489,548),1510=>array(29,0,508,547),1511=>array(82,-240,594,546),1512=>array(39,0,460,547),1513=>array(18,0,675,547),1514=>array(9,-4,533,547),1520=>array(82,0,517,547),1521=>array(60,0,472,547),1522=>array(60,164,450,547),1523=>array(75,361,324,547),1524=>array(75,361,563,547),1542=>array(-2,-20,567,892),1543=>array(-2,-20,567,897),1545=>array(58,0,729,635),1546=>array(58,0,976,635),1548=>array(88,0,290,331),1557=>array(108,612,341,868),1563=>array(88,0,291,689),1567=>array(62,0,464,742),1569=>array(65,20,394,493),1570=>array(-18,0,326,955),1571=>array(68,0,233,993),1572=>array(-38,-244,492,603),1573=>array(68,-245,233,760),1574=>array(57,-107,777,603),1575=>array(75,0,233,760),1576=>array(57,-149,829,327),1577=>array(43,-30,486,513),1578=>array(57,-5,829,415),1579=>array(57,-5,829,537),1580=>array(69,-244,648,425),1581=>array(69,-244,648,425),1582=>array(69,-244,648,579),1583=>array(55,-15,398,415),1584=>array(55,-15,398,579),1585=>array(-38,-244,458,269),1586=>array(-38,-244,458,457),1587=>array(57,-244,1167,366),1588=>array(57,-244,1167,586),1589=>array(57,-244,1138,362),1590=>array(57,-244,1138,457),1591=>array(63,0,875,760),1592=>array(63,0,875,760),1593=>array(79,-244,648,521),1594=>array(79,-244,648,652),1600=>array(-9,0,316,125),1601=>array(57,-24,974,627),1602=>array(47,-215,743,635),1603=>array(63,-27,733,760),1604=>array(63,-142,700,760),1605=>array(62,-244,594,369),1606=>array(55,-165,702,457),1607=>array(43,-30,486,358),1608=>array(-38,-244,492,322),1609=>array(57,-107,777,462),1610=>array(57,-244,777,462),1611=>array(97,591,354,825),1612=>array(97,591,354,881),1613=>array(97,-239,354,-5),1614=>array(97,591,354,723),1615=>array(97,590,354,881),1616=>array(97,-137,354,-5),1617=>array(79,599,371,869),1618=>array(104,610,345,878),1619=>array(53,584,397,735),1620=>array(138,601,302,822),1621=>array(139,-245,303,-23),1623=>array(97,615,354,906),1626=>array(89,616,361,775),1632=>array(196,195,353,366),1633=>array(125,0,388,635),1634=>array(11,0,539,635),1635=>array(11,0,538,635),1636=>array(66,-10,478,646),1637=>array(57,-10,492,643),1638=>array(33,0,517,635),1639=>array(13,0,536,635),1640=>array(13,0,536,635),1641=>array(28,0,532,640),1642=>array(58,0,491,635),1643=>array(0,-118,314,318),1644=>array(57,418,250,729),1645=>array(38,101,453,537),1646=>array(57,-5,829,327),1647=>array(47,-215,743,484),1648=>array(194,600,256,885),1652=>array(46,641,209,863),1657=>array(57,-5,829,599),1658=>array(57,-5,829,566),1659=>array(57,-244,829,327),1660=>array(57,-171,829,415),1661=>array(57,-5,829,566),1662=>array(57,-244,829,327),1663=>array(57,-5,829,566),1664=>array(57,-244,829,327),1665=>array(69,-244,648,725),1666=>array(69,-244,648,737),1667=>array(69,-244,648,425),1668=>array(69,-244,648,425),1669=>array(69,-244,648,737),1670=>array(69,-244,648,425),1671=>array(69,-244,648,425),1672=>array(55,-15,398,746),1673=>array(55,-180,398,415),1674=>array(55,-171,398,415),1675=>array(55,-171,398,746),1676=>array(55,-15,398,586),1677=>array(55,-146,398,415),1678=>array(55,-15,398,708),1679=>array(55,-15,398,684),1680=>array(55,-15,398,708),1681=>array(-38,-244,468,648),1682=>array(-38,-244,488,556),1683=>array(-38,-244,529,269),1684=>array(-38,-244,470,269),1685=>array(-38,-244,678,269),1686=>array(-38,-244,470,269),1687=>array(-38,-244,458,464),1688=>array(-38,-244,458,586),1689=>array(-38,-244,458,586),1690=>array(57,-244,1167,464),1691=>array(57,-244,1167,366),1692=>array(57,-244,1167,586),1693=>array(57,-244,1138,362),1694=>array(57,-244,1138,586),1695=>array(63,0,875,760),1696=>array(79,-244,648,781),1697=>array(57,-24,974,484),1698=>array(57,-171,974,484),1699=>array(57,-171,974,635),1700=>array(57,-24,974,786),1701=>array(57,-293,974,484),1702=>array(57,-24,974,786),1703=>array(47,-215,743,635),1704=>array(47,-215,743,757),1705=>array(57,-39,922,760),1706=>array(57,-39,1075,760),1707=>array(57,-39,922,760),1708=>array(63,-27,733,760),1709=>array(63,-27,733,854),1710=>array(63,-293,733,760),1711=>array(57,-39,922,910),1712=>array(57,-39,922,910),1713=>array(57,-39,922,910),1714=>array(57,-171,922,910),1715=>array(57,-293,922,910),1716=>array(57,-39,922,1025),1717=>array(63,-142,757,971),1718=>array(63,-142,700,952),1719=>array(63,-142,703,1025),1720=>array(63,-391,700,760),1721=>array(55,-317,702,464),1722=>array(55,-165,702,366),1723=>array(55,-165,702,636),1724=>array(55,-330,702,464),1725=>array(55,-165,702,586),1726=>array(63,-33,790,506),1727=>array(69,-244,648,579),1734=>array(-38,-244,492,556),1740=>array(57,-107,777,462),1742=>array(57,-107,777,556),1749=>array(43,-30,486,358),1776=>array(196,195,353,366),1777=>array(125,0,388,635),1778=>array(11,0,539,635),1779=>array(11,0,538,635),1780=>array(11,0,516,650),1781=>array(27,-8,522,643),1782=>array(77,0,463,645),1783=>array(13,0,536,635),1784=>array(13,0,536,635),1785=>array(28,0,532,640),1984=>array(43,-14,583,742),1985=>array(62,0,525,729),1986=>array(71,0,555,729),1987=>array(71,0,555,729),1988=>array(71,0,555,729),1989=>array(71,0,555,729),1990=>array(71,0,555,729),1991=>array(88,0,539,729),1992=>array(88,0,539,729),1993=>array(63,0,563,742),1994=>array(75,0,233,729),1995=>array(39,-14,454,465),1996=>array(13,0,476,729),1997=>array(13,0,574,451),1998=>array(75,0,546,451),1999=>array(75,0,546,451),2000=>array(41,0,493,742),2001=>array(75,0,546,667),2002=>array(39,0,738,742),2003=>array(75,0,421,729),2004=>array(75,0,421,729),2005=>array(75,0,526,729),2006=>array(75,0,543,729),2007=>array(13,0,324,729),2008=>array(75,0,845,532),2009=>array(13,0,442,729),2010=>array(13,0,730,729),2011=>array(75,0,546,451),2012=>array(13,0,574,729),2013=>array(75,0,782,729),2014=>array(75,0,489,729),2015=>array(39,0,623,729),2016=>array(13,0,442,729),2017=>array(13,0,574,729),2018=>array(39,0,479,729),2019=>array(75,0,489,729),2020=>array(75,0,489,581),2021=>array(75,0,489,729),2022=>array(39,0,479,729),2023=>array(39,0,479,729),2027=>array(85,668,363,760),2028=>array(56,638,394,777),2029=>array(167,654,287,774),2030=>array(58,616,390,800),2031=>array(29,616,395,803),2032=>array(56,638,394,777),2033=>array(29,616,395,803),2034=>array(165,-212,286,-92),2035=>array(86,654,364,774),2036=>array(57,418,250,729),2037=>array(92,418,286,729),2040=>array(75,0,546,562),2041=>array(75,0,546,564),2042=>array(-9,0,382,125),3647=>array(56,-147,575,760),3713=>array(39,-14,635,560),3714=>array(39,-14,650,560),3716=>array(39,-14,634,560),3719=>array(18,-241,470,561),3720=>array(38,0,635,560),3722=>array(35,-269,691,560),3725=>array(35,-24,642,610),3732=>array(38,-14,583,560),3733=>array(38,-19,583,561),3734=>array(-20,-240,615,560),3735=>array(18,-14,691,560),3737=>array(33,-15,613,560),3738=>array(34,-15,598,561),3739=>array(34,-15,598,760),3740=>array(54,-12,819,626),3741=>array(58,-14,686,760),3742=>array(68,-14,696,560),3743=>array(68,-14,696,760),3745=>array(22,-14,694,547),3746=>array(35,-23,642,760),3747=>array(43,-10,660,615),3749=>array(37,-33,624,560),3751=>array(29,-33,576,561),3754=>array(46,-21,738,724),3755=>array(40,-21,841,620),3757=>array(47,-20,596,606),3758=>array(43,-14,743,698),3759=>array(39,-259,808,648),3760=>array(32,-16,592,567),3761=>array(-588,610,-27,896),3762=>array(35,0,507,593),3763=>array(-432,0,507,875),3764=>array(-589,622,-55,950),3765=>array(-589,633,12,962),3766=>array(-589,622,-55,950),3767=>array(-589,633,12,962),3768=>array(-383,-385,-148,-55),3769=>array(-426,-316,-156,-28),3771=>array(-588,610,-27,896),3772=>array(-614,-311,13,-48),3773=>array(35,-220,623,776),3776=>array(75,-13,400,561),3777=>array(75,-13,737,561),3778=>array(-34,-14,413,936),3779=>array(21,-14,536,879),3780=>array(-13,-35,527,809),3782=>array(63,-240,620,582),3784=>array(-372,659,-267,844),3785=>array(-565,622,-20,918),3786=>array(-601,621,35,965),3787=>array(-470,612,-167,917),3788=>array(-614,603,13,866),3789=>array(-432,668,-207,875),3792=>array(59,-29,650,563),3793=>array(22,-139,649,586),3794=>array(28,-80,543,711),3795=>array(22,-14,794,981),3796=>array(43,-156,627,711),3797=>array(43,-156,627,711),3798=>array(58,-14,805,950),3799=>array(39,-240,635,560),3800=>array(64,-269,697,582),3801=>array(52,-14,773,564),3804=>array(40,-21,1171,620),3805=>array(40,-21,1174,620),4256=>array(42,-14,745,819),4257=>array(35,-0,647,819),4258=>array(33,-138,600,828),4259=>array(37,-15,714,819),4260=>array(26,0,515,828),4261=>array(22,0,656,828),4262=>array(13,-14,639,819),4263=>array(44,-14,801,828),4264=>array(4,0,374,862),4265=>array(35,0,523,819),4266=>array(16,-14,716,820),4267=>array(43,-14,753,819),4268=>array(39,0,527,819),4269=>array(33,-157,736,829),4270=>array(9,-14,659,822),4271=>array(18,0,527,823),4272=>array(39,-15,777,820),4273=>array(39,-15,528,820),4274=>array(39,-0,528,828),4275=>array(33,-170,736,828),4276=>array(33,0,746,825),4277=>array(25,0,626,820),4278=>array(40,0,528,828),4279=>array(30,0,520,820),4280=>array(35,-14,523,820),4281=>array(39,0,527,819),4282=>array(41,-14,700,827),4283=>array(42,-15,740,820),4284=>array(39,-0,528,819),4285=>array(26,-15,535,828),4286=>array(39,-0,528,819),4287=>array(13,0,654,819),4288=>array(16,-14,717,820),4289=>array(39,0,528,820),4290=>array(33,-15,587,828),4291=>array(8,0,497,820),4292=>array(30,0,505,820),4293=>array(21,-14,643,828),4304=>array(44,-14,455,599),4305=>array(44,-14,463,823),4306=>array(40,-232,521,561),4307=>array(44,-225,708,557),4308=>array(44,-232,447,557),4309=>array(44,-232,455,557),4310=>array(22,-14,452,828),4311=>array(44,-14,702,557),4312=>array(44,0,463,557),4313=>array(44,-232,456,542),4314=>array(44,-225,923,562),4315=>array(44,-14,455,828),4316=>array(57,-14,468,819),4317=>array(44,-0,689,557),4318=>array(44,-14,455,818),4319=>array(44,-232,454,560),4320=>array(44,0,697,830),4321=>array(57,-14,468,818),4322=>array(44,-232,586,670),4323=>array(26,-232,479,604),4324=>array(44,-232,713,558),4325=>array(44,-232,447,818),4326=>array(44,-225,689,557),4327=>array(44,-232,455,549),4328=>array(18,-14,440,828),4329=>array(57,0,468,828),4330=>array(44,-232,516,548),4331=>array(44,-14,454,818),4332=>array(58,-15,480,828),4333=>array(44,-232,466,818),4334=>array(57,-14,468,818),4335=>array(22,-232,464,580),4336=>array(44,-15,455,823),4337=>array(44,-14,455,823),4338=>array(44,-146,454,557),4339=>array(44,-232,455,558),4340=>array(44,-232,454,828),4341=>array(44,-14,502,828),4342=>array(44,-232,723,557),4343=>array(44,-232,500,557),4344=>array(44,-232,455,549),4345=>array(40,-232,521,561),4346=>array(44,-111,455,557),4347=>array(44,0,359,500),4348=>array(22,400,265,828),5121=>array(4,0,692,729),5122=>array(4,0,692,1056),5123=>array(4,0,692,729),5124=>array(4,0,692,928),5125=>array(83,0,739,729),5126=>array(83,0,739,928),5127=>array(83,0,739,927),5129=>array(83,0,739,729),5130=>array(75,0,732,729),5131=>array(75,0,732,928),5132=>array(83,0,912,729),5133=>array(4,0,833,729),5134=>array(83,0,912,729),5135=>array(4,0,833,729),5136=>array(83,0,912,928),5137=>array(4,0,833,928),5138=>array(83,0,958,729),5139=>array(83,0,950,729),5140=>array(83,0,958,928),5141=>array(83,0,950,928),5142=>array(83,0,739,928),5143=>array(83,0,952,729),5144=>array(75,0,953,729),5145=>array(83,0,952,928),5146=>array(75,0,953,928),5147=>array(75,0,732,928),5149=>array(83,607,203,728),5150=>array(54,326,426,734),5151=>array(28,338,341,722),5152=>array(28,338,341,722),5153=>array(54,392,305,711),5154=>array(54,352,305,670),5155=>array(54,392,305,670),5156=>array(54,392,305,670),5157=>array(28,327,466,749),5158=>array(54,326,373,734),5159=>array(83,304,203,424),5160=>array(54,494,305,569),5161=>array(54,392,305,670),5162=>array(54,392,305,693),5163=>array(4,0,1051,729),5164=>array(4,0,847,729),5165=>array(83,0,1054,729),5166=>array(75,0,1126,729),5167=>array(4,0,692,729),5168=>array(4,0,692,1056),5169=>array(4,0,692,729),5170=>array(4,0,692,928),5171=>array(66,0,722,729),5172=>array(66,0,722,928),5173=>array(66,0,722,927),5175=>array(66,0,722,729),5176=>array(66,0,722,729),5177=>array(66,0,722,928),5178=>array(83,0,912,729),5179=>array(4,0,833,729),5180=>array(83,0,912,729),5181=>array(4,0,833,729),5182=>array(83,0,912,928),5183=>array(4,0,833,928),5184=>array(83,0,942,729),5185=>array(66,0,950,729),5186=>array(83,0,942,928),5187=>array(66,0,950,928),5188=>array(83,0,942,729),5189=>array(66,0,953,729),5190=>array(83,0,942,928),5191=>array(66,0,953,928),5192=>array(66,0,722,927),5193=>array(54,326,468,727),5194=>array(54,326,155,734),5196=>array(83,-14,648,729),5197=>array(83,0,648,1056),5198=>array(83,0,648,743),5199=>array(83,0,648,928),5200=>array(66,0,684,729),5201=>array(66,0,684,928),5202=>array(66,0,684,927),5204=>array(66,0,684,729),5205=>array(50,0,668,729),5206=>array(50,0,668,928),5207=>array(83,-14,868,729),5208=>array(83,-14,868,729),5209=>array(83,0,868,743),5210=>array(83,0,868,743),5211=>array(83,0,868,928),5212=>array(83,0,868,928),5213=>array(83,0,903,729),5214=>array(66,0,874,729),5215=>array(83,0,903,928),5216=>array(66,0,874,928),5217=>array(83,0,888,729),5218=>array(50,0,871,729),5219=>array(83,0,888,928),5220=>array(50,0,871,928),5221=>array(83,0,888,729),5222=>array(54,326,384,733),5223=>array(83,-14,854,734),5224=>array(83,0,854,743),5225=>array(66,0,871,734),5226=>array(50,0,865,734),5227=>array(37,0,586,743),5228=>array(83,0,632,1056),5229=>array(83,0,632,743),5230=>array(83,0,632,928),5231=>array(37,-14,586,729),5232=>array(37,-14,586,928),5233=>array(37,-14,637,927),5234=>array(83,-14,632,729),5235=>array(83,-14,632,928),5236=>array(83,0,844,743),5237=>array(37,0,802,743),5238=>array(83,0,845,743),5239=>array(83,0,802,743),5240=>array(83,0,845,928),5241=>array(83,0,802,928),5242=>array(83,-14,844,729),5243=>array(37,-14,802,729),5244=>array(83,-14,844,928),5245=>array(37,-14,802,928),5246=>array(83,-14,845,729),5247=>array(83,-14,802,729),5248=>array(83,-14,845,928),5249=>array(83,-14,802,928),5250=>array(83,-14,845,729),5251=>array(54,319,400,734),5252=>array(54,319,400,734),5253=>array(37,0,793,743),5254=>array(83,0,793,743),5255=>array(37,-14,793,734),5256=>array(83,-14,793,734),5257=>array(37,0,586,743),5258=>array(83,0,632,1056),5259=>array(83,0,632,743),5260=>array(83,0,632,928),5261=>array(37,-14,586,729),5262=>array(37,-14,586,928),5263=>array(37,-14,643,927),5264=>array(83,-14,632,729),5265=>array(83,-14,632,928),5266=>array(83,0,844,743),5267=>array(37,0,802,743),5268=>array(83,0,889,743),5269=>array(83,0,802,743),5270=>array(83,0,889,928),5271=>array(83,0,802,928),5272=>array(83,-14,844,729),5273=>array(37,-14,802,729),5274=>array(83,-14,844,928),5275=>array(37,-14,802,928),5276=>array(83,-14,889,729),5277=>array(83,-14,802,729),5278=>array(83,-14,889,928),5279=>array(83,-14,802,928),5280=>array(83,-14,889,729),5281=>array(54,319,400,734),5282=>array(54,319,400,734),5283=>array(24,0,481,729),5284=>array(83,0,540,1056),5285=>array(83,0,540,729),5286=>array(83,0,540,928),5287=>array(24,0,481,729),5288=>array(24,0,481,928),5289=>array(24,0,539,927),5290=>array(83,0,540,729),5291=>array(83,0,540,928),5292=>array(83,0,711,729),5293=>array(24,0,694,729),5294=>array(83,0,752,729),5295=>array(83,0,711,729),5296=>array(83,0,752,928),5297=>array(83,0,711,928),5298=>array(83,0,711,729),5299=>array(24,0,711,729),5300=>array(83,0,711,928),5301=>array(24,0,711,928),5302=>array(83,0,752,729),5303=>array(83,0,711,729),5304=>array(83,0,752,928),5305=>array(83,0,711,928),5306=>array(83,0,752,729),5307=>array(54,326,342,734),5308=>array(54,326,443,733),5309=>array(54,326,342,734),5312=>array(75,-14,853,468),5313=>array(37,-14,813,786),5314=>array(37,-14,813,468),5315=>array(37,-14,813,667),5316=>array(24,0,801,482),5317=>array(24,0,801,667),5318=>array(24,0,801,667),5319=>array(37,0,813,482),5320=>array(37,0,813,667),5321=>array(83,-14,1077,468),5322=>array(75,-14,1047,468),5323=>array(83,0,1055,482),5324=>array(37,0,1030,482),5325=>array(83,0,1055,667),5326=>array(37,0,1030,667),5327=>array(37,0,813,667),5328=>array(54,477,543,742),5329=>array(54,319,396,734),5330=>array(54,477,543,742),5331=>array(75,0,853,468),5332=>array(37,0,813,786),5333=>array(37,0,813,468),5334=>array(37,0,813,667),5335=>array(24,0,801,468),5336=>array(24,0,801,667),5337=>array(24,0,801,667),5338=>array(37,0,813,468),5339=>array(37,0,813,667),5340=>array(83,0,1071,468),5341=>array(75,0,1047,468),5342=>array(83,0,1080,468),5343=>array(37,0,1030,468),5344=>array(83,0,1080,667),5345=>array(37,0,1030,667),5346=>array(83,0,1068,468),5347=>array(24,0,1018,468),5348=>array(83,0,1068,667),5349=>array(24,0,1018,667),5350=>array(83,0,1080,468),5351=>array(37,0,1030,468),5352=>array(83,0,1080,667),5353=>array(37,0,1030,667),5354=>array(54,477,543,734),5356=>array(66,0,722,729),5357=>array(37,0,575,729),5358=>array(83,0,663,1056),5359=>array(83,0,620,729),5360=>array(83,0,620,928),5361=>array(37,0,575,729),5362=>array(37,0,575,928),5363=>array(37,0,625,927),5364=>array(83,0,620,729),5365=>array(83,0,620,928),5366=>array(83,0,815,729),5367=>array(37,0,787,729),5368=>array(83,0,833,729),5369=>array(83,0,815,729),5370=>array(83,0,833,928),5371=>array(83,0,815,928),5372=>array(83,0,815,729),5373=>array(37,0,787,729),5374=>array(83,0,815,928),5375=>array(37,0,787,928),5376=>array(83,0,833,729),5377=>array(83,0,815,729),5378=>array(83,0,833,928),5379=>array(83,0,815,928),5380=>array(83,0,833,729),5381=>array(54,326,393,734),5382=>array(54,319,364,742),5383=>array(54,326,393,734),5392=>array(37,-14,794,743),5393=>array(37,-14,794,743),5394=>array(37,-14,794,928),5395=>array(37,-14,985,482),5396=>array(37,-14,985,667),5397=>array(37,-14,985,482),5398=>array(37,-14,985,667),5399=>array(83,-14,1051,743),5400=>array(37,-14,1006,743),5401=>array(83,-14,1051,743),5402=>array(37,-14,1006,743),5403=>array(83,-14,1051,928),5404=>array(37,-14,1006,928),5405=>array(83,-14,1251,482),5406=>array(37,-14,1203,482),5407=>array(83,-14,1251,667),5408=>array(37,-14,1203,667),5409=>array(83,-14,1251,482),5410=>array(37,-14,1203,482),5411=>array(83,-14,1251,667),5412=>array(37,-14,1203,667),5413=>array(54,469,621,747),5414=>array(75,0,616,729),5415=>array(83,0,623,1056),5416=>array(83,0,623,729),5417=>array(83,0,623,928),5418=>array(75,0,616,729),5419=>array(75,0,616,928),5420=>array(75,0,675,927),5421=>array(83,0,623,729),5422=>array(83,0,623,928),5423=>array(83,0,820,729),5424=>array(75,0,828,729),5425=>array(83,0,836,729),5426=>array(83,0,821,729),5427=>array(83,0,836,928),5428=>array(83,0,821,928),5429=>array(83,0,820,729),5430=>array(75,0,828,729),5431=>array(83,0,820,928),5432=>array(75,0,828,928),5433=>array(83,0,836,729),5434=>array(83,0,821,729),5435=>array(83,0,836,928),5436=>array(83,0,821,928),5437=>array(83,0,836,928),5438=>array(54,326,395,734),5440=>array(54,392,305,670),5441=>array(54,326,409,734),5442=>array(83,-14,854,468),5443=>array(75,-14,847,468),5444=>array(24,0,796,482),5445=>array(83,0,854,786),5446=>array(83,0,854,482),5447=>array(83,0,854,667),5448=>array(83,0,623,729),5449=>array(83,0,623,928),5450=>array(83,0,623,729),5451=>array(37,0,577,729),5452=>array(37,0,577,928),5453=>array(37,0,577,729),5454=>array(83,0,820,928),5455=>array(37,0,788,928),5456=>array(54,326,395,727),5458=>array(66,0,722,729),5459=>array(45,0,692,743),5460=>array(45,-14,692,1056),5461=>array(45,-14,692,729),5462=>array(45,-14,692,928),5463=>array(66,0,760,663),5464=>array(66,0,760,928),5465=>array(75,0,770,663),5466=>array(75,0,770,928),5467=>array(83,0,989,928),5468=>array(75,0,953,928),5469=>array(54,311,492,675),5470=>array(83,-14,648,743),5471=>array(83,-14,648,743),5472=>array(83,-14,648,743),5473=>array(83,-14,648,743),5474=>array(83,-14,648,928),5475=>array(83,-14,648,928),5476=>array(48,0,684,729),5477=>array(48,0,684,928),5478=>array(50,0,686,729),5479=>array(50,0,686,928),5480=>array(83,0,905,928),5481=>array(50,0,871,928),5482=>array(54,326,461,733),5492=>array(37,0,804,743),5493=>array(75,0,843,743),5494=>array(75,0,843,928),5495=>array(37,-14,804,729),5496=>array(37,-14,804,928),5497=>array(75,-14,843,729),5498=>array(75,-14,843,928),5499=>array(54,319,505,734),5500=>array(83,0,671,729),5501=>array(54,326,409,734),5502=>array(54,0,1077,1056),5503=>array(54,0,1077,743),5504=>array(54,0,1077,928),5505=>array(54,-14,1032,729),5506=>array(54,-14,1032,928),5507=>array(54,-14,1077,729),5508=>array(54,-14,1077,928),5509=>array(54,319,846,734),5514=>array(37,0,804,743),5515=>array(75,0,843,743),5516=>array(37,-14,804,729),5517=>array(75,-14,843,729),5518=>array(54,0,1395,1056),5519=>array(54,0,1395,743),5520=>array(54,0,1395,928),5521=>array(54,-14,1083,741),5522=>array(54,-14,1083,928),5523=>array(54,-14,1395,741),5524=>array(54,-14,1395,928),5525=>array(54,335,712,741),5526=>array(54,335,1095,741),5536=>array(37,0,813,709),5537=>array(37,0,813,709),5538=>array(24,-242,801,468),5539=>array(24,-242,801,667),5540=>array(37,-242,813,468),5541=>array(37,-242,813,667),5542=>array(54,344,543,734),5543=>array(75,0,694,729),5544=>array(4,0,623,729),5545=>array(4,0,623,928),5546=>array(75,0,694,729),5547=>array(75,0,694,928),5548=>array(4,0,623,729),5549=>array(4,0,623,928),5550=>array(13,326,395,734),5551=>array(83,-14,632,729),5598=>array(83,0,700,729),5601=>array(47,0,665,729),5702=>array(54,326,396,734),5703=>array(54,240,396,820),5742=>array(9,0,363,306),5743=>array(54,0,1032,743),5744=>array(54,0,1349,743),5745=>array(54,0,1778,743),5746=>array(54,0,1778,928),5747=>array(54,-14,1466,741),5748=>array(54,-14,1428,928),5749=>array(54,-14,1778,741),5750=>array(54,-14,1778,928),5760=>array(-9,219,498,354),5761=>array(-9,-125,582,354),5762=>array(-9,-125,860,354),5763=>array(-9,-125,1138,354),5764=>array(-9,-125,1415,354),5765=>array(-9,-125,1693,354),5766=>array(-9,219,573,697),5767=>array(-9,219,851,697),5768=>array(-9,219,1138,697),5769=>array(-9,219,1412,697),5770=>array(-9,219,1693,697),5771=>array(-9,-125,521,697),5772=>array(-9,-125,800,697),5773=>array(-9,-125,1078,697),5774=>array(-9,-125,1357,697),5775=>array(-9,-125,1635,697),5776=>array(-9,41,582,532),5777=>array(-9,41,860,532),5778=>array(-9,41,1138,532),5779=>array(-9,41,1415,532),5780=>array(-9,41,1693,532),5781=>array(-9,-125,521,697),5782=>array(-9,-125,854,697),5783=>array(-9,-109,719,354),5784=>array(-9,-254,1120,354),5785=>array(-9,219,1412,928),5786=>array(-9,14,675,354),5787=>array(49,-49,583,622),5788=>array(-9,-49,525,622),7424=>array(13,0,574,547),7425=>array(0,0,680,547),7426=>array(39,-14,900,560),7427=>array(18,0,508,547),7428=>array(39,-14,474,560),7429=>array(75,-1,550,547),7430=>array(18,-1,550,547),7431=>array(83,0,433,547),7432=>array(48,-14,444,560),7433=>array(75,-213,233,547),7434=>array(40,-14,375,547),7435=>array(75,0,616,547),7436=>array(-17,0,449,547),7437=>array(75,0,660,547),7438=>array(75,0,555,547),7439=>array(39,-14,580,560),7440=>array(39,-14,474,560),7441=>array(39,-27,556,573),7442=>array(39,31,556,515),7443=>array(12,-28,588,579),7444=>array(39,-14,941,560),7446=>array(39,273,580,560),7447=>array(40,-14,581,273),7448=>array(45,0,463,547),7449=>array(19,0,504,547),7450=>array(19,0,504,547),7451=>array(3,0,518,547),7452=>array(75,-14,547,547),7453=>array(76,10,582,560),7454=>array(62,10,771,561),7455=>array(17,-238,586,560),7456=>array(13,0,574,547),7457=>array(31,0,800,547),7458=>array(40,0,481,547),7459=>array(51,-14,523,547),7462=>array(75,0,449,547),7463=>array(13,0,574,547),7464=>array(75,0,546,547),7465=>array(45,0,463,547),7466=>array(75,0,628,547),7467=>array(49,0,584,547),7468=>array(2,326,436,734),7469=>array(0,326,574,734),7470=>array(52,326,393,734),7472=>array(52,326,441,734),7473=>array(52,326,346,734),7474=>array(52,326,346,734),7475=>array(28,318,424,742),7476=>array(52,326,422,734),7477=>array(52,326,159,734),7478=>array(-32,214,159,734),7479=>array(52,326,457,734),7480=>array(52,326,346,734),7481=>array(52,326,512,734),7482=>array(52,326,422,734),7483=>array(52,326,422,734),7484=>array(28,318,454,742),7485=>array(35,318,424,742),7486=>array(52,326,393,734),7487=>array(52,326,426,734),7488=>array(2,326,384,734),7489=>array(52,318,409,734),7490=>array(17,326,608,734),7491=>array(48,318,362,640),7492=>array(48,318,362,640),7493=>array(48,318,381,640),7494=>array(48,318,591,640),7495=>array(48,318,381,751),7496=>array(48,318,381,751),7497=>array(48,318,381,640),7498=>array(48,318,381,640),7499=>array(48,318,297,640),7500=>array(48,318,297,640),7501=>array(48,205,381,639),7502=>array(48,207,147,632),7503=>array(48,326,388,751),7504=>array(48,326,547,640),7505=>array(48,205,360,640),7506=>array(48,318,389,640),7507=>array(48,318,322,640),7508=>array(48,479,389,640),7509=>array(48,318,389,479),7510=>array(48,209,381,640),7511=>array(48,326,299,719),7512=>array(48,318,360,632),7513=>array(48,332,366,640),7514=>array(48,318,547,632),7515=>array(48,326,401,632),7517=>array(47,209,381,759),7518=>array(9,209,378,632),7519=>array(24,318,366,756),7520=>array(36,209,411,635),7521=>array(14,209,352,632),7522=>array(48,0,147,425),7523=>array(48,0,283,313),7524=>array(48,-8,360,306),7525=>array(48,0,401,306),7526=>array(47,-117,381,433),7527=>array(9,-117,378,306),7528=>array(47,-117,381,314),7529=>array(36,-117,411,309),7530=>array(14,-117,352,306),7543=>array(75,-216,604,559),7544=>array(52,326,422,734),7547=>array(75,0,416,547),7549=>array(4,-208,668,560),7557=>array(75,-216,391,760),7579=>array(48,318,381,640),7580=>array(48,318,322,640),7581=>array(48,288,322,640),7582=>array(48,318,389,751),7583=>array(48,318,297,640),7584=>array(48,326,289,751),7585=>array(48,205,263,632),7586=>array(48,205,381,632),7587=>array(48,207,360,632),7588=>array(48,326,262,751),7589=>array(48,326,203,632),7590=>array(48,326,262,632),7591=>array(48,326,262,632),7592=>array(48,205,338,751),7593=>array(48,205,243,751),7594=>array(48,205,247,751),7595=>array(48,326,283,632),7596=>array(48,205,548,640),7597=>array(48,209,547,632),7598=>array(48,205,456,640),7599=>array(48,205,455,640),7600=>array(48,326,354,632),7601=>array(48,318,389,640),7602=>array(48,209,438,751),7603=>array(48,205,330,640),7604=>array(48,205,306,751),7605=>array(48,205,299,719),7606=>array(48,318,475,632),7607=>array(48,298,395,632),7608=>array(47,318,345,632),7609=>array(48,326,355,632),7610=>array(48,326,401,632),7611=>array(48,326,325,632),7612=>array(48,205,421,632),7613=>array(48,288,373,632),7614=>array(48,206,360,632),7615=>array(48,320,333,756),7620=>array(-421,616,-31,800),7621=>array(-421,616,-31,800),7622=>array(-421,616,-31,800),7623=>array(-421,616,-31,800),7624=>array(-462,616,10,800),7625=>array(-462,616,10,800),7680=>array(4,-240,692,729),7681=>array(39,-240,537,560),7682=>array(83,0,623,928),7683=>array(75,-14,604,913),7684=>array(83,-212,623,729),7685=>array(75,-212,604,760),7686=>array(83,-184,623,729),7687=>array(75,-184,604,760),7688=>array(44,-196,603,927),7689=>array(39,-196,474,800),7690=>array(83,0,700,927),7691=>array(40,-14,569,942),7692=>array(83,-212,700,729),7693=>array(40,-212,569,760),7694=>array(83,-184,700,729),7695=>array(40,-184,569,760),7696=>array(83,-192,700,729),7697=>array(40,-196,569,760),7698=>array(83,-240,700,729),7699=>array(40,-240,569,760),7700=>array(83,0,549,1057),7701=>array(39,-14,567,927),7702=>array(83,0,549,1057),7703=>array(39,-14,567,927),7704=>array(83,-203,549,729),7705=>array(39,-203,567,560),7706=>array(83,-195,549,729),7707=>array(39,-195,567,560),7708=>array(83,-196,549,927),7709=>array(39,-196,567,784),7710=>array(83,0,540,928),7711=>array(17,0,400,942),7712=>array(44,-14,672,901),7713=>array(40,-216,569,760),7714=>array(83,0,671,928),7715=>array(75,0,571,913),7716=>array(83,-212,671,729),7717=>array(75,-212,571,760),7718=>array(83,0,671,927),7719=>array(21,0,571,927),7720=>array(40,-196,671,729),7721=>array(34,-196,571,760),7722=>array(83,-236,671,729),7723=>array(75,-236,571,760),7724=>array(14,-195,320,729),7725=>array(0,-195,307,760),7726=>array(36,0,341,1057),7727=>array(14,0,319,917),7728=>array(83,0,725,927),7729=>array(75,0,616,982),7730=>array(83,-212,725,729),7731=>array(75,-212,616,760),7732=>array(83,-184,725,729),7733=>array(75,-184,616,760),7734=>array(83,-212,549,729),7735=>array(75,-212,233,760),7736=>array(29,-212,549,942),7737=>array(16,-212,293,914),7738=>array(83,-184,549,729),7739=>array(18,-184,295,760),7740=>array(83,-240,549,729),7741=>array(-12,-240,320,760),7742=>array(83,0,813,927),7743=>array(75,0,867,800),7744=>array(83,0,813,928),7745=>array(75,0,867,760),7746=>array(83,-212,813,729),7747=>array(75,-212,867,560),7748=>array(83,0,671,928),7749=>array(75,0,571,760),7750=>array(83,-212,671,729),7751=>array(75,-212,571,560),7752=>array(83,-184,671,729),7753=>array(75,-184,571,560),7754=>array(83,-240,671,729),7755=>array(75,-240,571,560),7756=>array(44,-14,720,1057),7757=>array(39,-14,580,916),7758=>array(44,-14,720,1043),7759=>array(39,-14,580,900),7760=>array(44,-14,720,1057),7761=>array(39,-14,580,927),7762=>array(44,-14,720,1057),7763=>array(39,-14,580,927),7764=>array(83,0,623,927),7765=>array(75,-208,604,800),7766=>array(83,0,623,928),7767=>array(75,-208,604,760),7768=>array(83,0,675,928),7769=>array(75,0,441,760),7770=>array(83,-212,675,729),7771=>array(75,-212,441,560),7772=>array(83,-212,675,914),7773=>array(75,-212,441,759),7774=>array(83,-184,675,729),7775=>array(30,-184,441,560),7776=>array(64,-14,583,928),7777=>array(46,-14,493,760),7778=>array(64,-212,583,742),7779=>array(46,-212,493,560),7780=>array(64,-14,583,928),7781=>array(46,-14,493,816),7782=>array(64,-14,583,1053),7783=>array(46,-14,493,1002),7784=>array(64,-212,583,928),7785=>array(46,-212,493,762),7786=>array(4,0,609,927),7787=>array(12,0,410,942),7788=>array(4,-212,609,729),7789=>array(12,-212,410,702),7790=>array(4,-184,609,729),7791=>array(12,-184,410,702),7792=>array(4,-240,609,729),7793=>array(12,-240,410,702),7794=>array(83,-212,648,729),7795=>array(70,-212,565,547),7796=>array(83,-196,648,729),7797=>array(70,-195,565,547),7798=>array(83,-203,648,729),7799=>array(70,-203,565,547),7800=>array(83,-14,648,1057),7801=>array(70,-14,565,916),7802=>array(83,-14,648,1043),7803=>array(70,-14,565,887),7804=>array(4,0,692,928),7805=>array(13,0,574,778),7806=>array(4,-212,692,729),7807=>array(13,-212,574,547),7808=>array(26,0,965,931),7809=>array(31,0,800,803),7810=>array(26,0,965,931),7811=>array(31,0,800,803),7812=>array(26,0,965,927),7813=>array(31,0,800,774),7814=>array(26,0,965,927),7815=>array(31,0,800,760),7816=>array(26,-212,965,729),7817=>array(31,-212,800,547),7818=>array(17,0,676,928),7819=>array(13,0,567,760),7820=>array(17,0,676,927),7821=>array(13,0,567,774),7822=>array(-9,0,661,928),7823=>array(11,-216,571,760),7824=>array(40,0,612,927),7825=>array(40,0,481,798),7826=>array(40,-212,612,729),7827=>array(40,-212,481,547),7828=>array(40,-184,612,729),7829=>array(40,-184,481,547),7830=>array(75,-184,571,760),7831=>array(12,0,410,927),7832=>array(31,0,800,888),7833=>array(11,-216,571,888),7834=>array(39,-14,682,760),7835=>array(17,0,400,942),7836=>array(-17,0,400,760),7837=>array(17,0,400,760),7838=>array(83,-14,741,743),7839=>array(39,-14,580,768),7840=>array(4,-212,692,729),7841=>array(39,-212,537,560),7842=>array(4,0,692,1025),7843=>array(39,-14,537,843),7844=>array(4,0,692,1054),7845=>array(39,-14,587,873),7846=>array(4,0,692,1054),7847=>array(39,-14,538,874),7848=>array(4,0,692,1093),7849=>array(39,-14,605,912),7850=>array(4,0,692,1068),7851=>array(39,-14,537,887),7852=>array(4,-212,692,927),7853=>array(39,-212,537,800),7854=>array(4,0,692,1057),7855=>array(39,-14,537,891),7856=>array(4,0,692,1057),7857=>array(39,-14,537,894),7858=>array(4,0,692,1123),7859=>array(39,-14,537,959),7860=>array(4,0,692,1068),7861=>array(39,-14,537,905),7862=>array(4,-212,692,935),7863=>array(39,-212,537,780),7864=>array(83,-212,549,729),7865=>array(39,-212,567,560),7866=>array(83,0,549,1025),7867=>array(39,-14,567,843),7868=>array(83,0,549,928),7869=>array(39,-14,567,778),7870=>array(83,0,616,1054),7871=>array(39,-14,620,873),7872=>array(83,0,559,1054),7873=>array(39,-14,567,874),7874=>array(83,0,618,1093),7875=>array(39,-14,613,912),7876=>array(83,0,549,1068),7877=>array(39,-14,567,887),7878=>array(83,-212,549,927),7879=>array(39,-212,567,800),7880=>array(59,0,282,1025),7881=>array(47,0,270,842),7882=>array(83,-212,252,729),7883=>array(75,-212,233,760),7884=>array(44,-212,720,742),7885=>array(39,-212,580,560),7886=>array(44,-14,720,1025),7887=>array(39,-14,580,843),7888=>array(44,-14,720,1054),7889=>array(39,-14,611,873),7890=>array(44,-14,720,1054),7891=>array(39,-14,580,874),7892=>array(44,-14,720,1093),7893=>array(39,-14,617,912),7894=>array(44,-14,720,1068),7895=>array(39,-14,580,887),7896=>array(44,-212,720,927),7897=>array(39,-212,580,800),7898=>array(47,-14,769,927),7899=>array(42,-14,637,800),7900=>array(47,-14,769,927),7901=>array(42,-14,637,800),7902=>array(47,-14,769,1025),7903=>array(42,-14,637,843),7904=>array(47,-14,769,928),7905=>array(42,-14,637,778),7906=>array(47,-212,769,761),7907=>array(42,-212,637,609),7908=>array(83,-212,648,729),7909=>array(70,-212,565,547),7910=>array(83,-14,648,1025),7911=>array(70,-14,565,843),7912=>array(82,-14,750,927),7913=>array(67,-14,660,800),7914=>array(82,-14,750,927),7915=>array(67,-14,660,800),7916=>array(82,-14,750,1025),7917=>array(67,-14,660,843),7918=>array(82,-14,750,928),7919=>array(67,-14,660,778),7920=>array(82,-212,750,761),7921=>array(67,-212,660,609),7922=>array(-9,0,661,931),7923=>array(11,-216,571,803),7924=>array(-9,-212,661,729),7925=>array(11,-216,571,547),7926=>array(-9,0,661,1029),7927=>array(11,-216,571,843),7928=>array(-9,0,661,928),7929=>array(11,-216,571,778),7930=>array(83,0,833,729),7931=>array(8,0,571,760),7936=>array(43,-13,581,785),7937=>array(43,-13,581,785),7938=>array(43,-13,581,800),7939=>array(43,-13,581,800),7940=>array(43,-13,581,800),7941=>array(43,-13,581,800),7942=>array(43,-13,581,928),7943=>array(43,-13,581,928),7944=>array(4,0,692,785),7945=>array(4,0,692,785),7946=>array(1,0,933,800),7947=>array(3,0,935,800),7948=>array(1,0,837,800),7949=>array(1,0,862,800),7950=>array(3,0,748,928),7951=>array(3,0,769,928),7952=>array(48,-14,444,785),7953=>array(48,-14,444,785),7954=>array(48,-14,448,800),7955=>array(48,-14,444,800),7956=>array(48,-14,479,800),7957=>array(48,-14,465,800),7960=>array(3,0,646,785),7961=>array(3,0,649,785),7962=>array(1,0,924,800),7963=>array(3,0,921,800),7964=>array(1,0,855,800),7965=>array(1,0,881,800),7968=>array(75,-208,571,785),7969=>array(75,-208,571,785),7970=>array(75,-208,571,800),7971=>array(75,-208,571,800),7972=>array(75,-208,571,800),7973=>array(75,-208,571,800),7974=>array(75,-208,571,928),7975=>array(75,-208,571,928),7976=>array(3,0,769,785),7977=>array(3,0,773,785),7978=>array(1,0,1043,800),7979=>array(3,0,1042,800),7980=>array(1,0,979,800),7981=>array(1,0,1003,800),7982=>array(3,0,866,928),7983=>array(3,0,874,928),7984=>array(70,-19,313,785),7985=>array(70,-19,313,785),7986=>array(-25,-19,367,800),7987=>array(-53,-19,339,800),7988=>array(28,-19,401,800),7989=>array(-5,-19,395,800),7990=>array(-2,-19,313,928),7991=>array(-4,-19,313,928),7992=>array(3,0,352,785),7993=>array(3,0,357,785),7994=>array(1,0,616,800),7995=>array(3,0,624,800),7996=>array(1,0,558,800),7997=>array(1,0,582,800),7998=>array(3,0,461,928),7999=>array(3,0,461,928),8000=>array(39,-14,580,785),8001=>array(39,-14,580,785),8002=>array(39,-14,580,800),8003=>array(39,-14,580,800),8004=>array(39,-14,580,800),8005=>array(39,-14,580,800),8008=>array(3,-14,757,785),8009=>array(3,-14,795,785),8010=>array(1,-14,1054,800),8011=>array(3,-14,1056,800),8012=>array(1,-14,902,800),8013=>array(1,-14,929,800),8016=>array(70,-10,567,785),8017=>array(70,-10,567,785),8018=>array(70,-10,567,800),8019=>array(70,-10,567,800),8020=>array(70,-10,567,800),8021=>array(70,-10,567,800),8022=>array(70,-10,567,928),8023=>array(70,-10,567,928),8025=>array(3,0,846,785),8027=>array(3,0,1075,800),8029=>array(1,0,1088,800),8031=>array(3,0,953,928),8032=>array(39,-13,744,785),8033=>array(39,-13,744,785),8034=>array(39,-13,744,800),8035=>array(39,-13,744,800),8036=>array(39,-13,744,800),8037=>array(39,-13,744,800),8038=>array(39,-13,744,928),8039=>array(39,-13,744,928),8040=>array(3,0,793,785),8041=>array(3,0,838,785),8042=>array(1,0,1097,800),8043=>array(3,-3,1102,800),8044=>array(1,0,944,800),8045=>array(1,0,970,800),8046=>array(3,0,901,928),8047=>array(3,0,944,928),8048=>array(43,-13,581,800),8049=>array(43,-13,581,800),8050=>array(48,-14,444,800),8051=>array(48,-14,444,800),8052=>array(75,-208,571,800),8053=>array(75,-208,571,800),8054=>array(-24,-19,313,800),8055=>array(69,-19,318,800),8056=>array(39,-14,580,800),8057=>array(39,-14,580,800),8058=>array(70,-10,567,800),8059=>array(70,-10,567,800),8060=>array(39,-13,744,800),8061=>array(39,-13,744,800),8064=>array(43,-208,581,785),8065=>array(43,-208,581,785),8066=>array(43,-208,581,800),8067=>array(43,-208,581,800),8068=>array(43,-208,581,800),8069=>array(43,-208,581,800),8070=>array(43,-208,581,928),8071=>array(43,-208,581,928),8072=>array(4,-208,692,785),8073=>array(4,-208,692,785),8074=>array(1,-208,933,800),8075=>array(3,-208,935,800),8076=>array(1,-208,837,800),8077=>array(1,-208,862,800),8078=>array(3,-208,748,928),8079=>array(3,-208,769,928),8080=>array(75,-208,571,785),8081=>array(75,-208,571,785),8082=>array(75,-208,571,800),8083=>array(75,-208,571,800),8084=>array(75,-208,571,800),8085=>array(75,-208,571,800),8086=>array(75,-208,571,928),8087=>array(75,-208,571,928),8088=>array(3,-208,769,785),8089=>array(3,-208,773,785),8090=>array(1,-208,1043,800),8091=>array(3,-208,1042,800),8092=>array(1,-208,979,800),8093=>array(1,-208,1003,800),8094=>array(3,-208,866,928),8095=>array(3,-208,874,928),8096=>array(39,-208,744,785),8097=>array(39,-208,744,785),8098=>array(39,-208,744,800),8099=>array(39,-208,744,800),8100=>array(39,-208,744,800),8101=>array(39,-208,744,800),8102=>array(39,-208,744,928),8103=>array(39,-208,744,928),8104=>array(3,-208,793,785),8105=>array(3,-208,838,785),8106=>array(1,-208,1097,800),8107=>array(3,-208,1102,800),8108=>array(1,-208,944,800),8109=>array(1,-208,970,800),8110=>array(3,-208,901,928),8111=>array(3,-208,944,928),8112=>array(43,-13,581,784),8113=>array(43,-13,581,760),8114=>array(43,-208,581,800),8115=>array(43,-208,581,559),8116=>array(43,-208,581,800),8118=>array(43,-13,581,778),8119=>array(43,-208,581,778),8120=>array(4,0,692,927),8121=>array(4,0,692,914),8122=>array(-1,0,785,800),8123=>array(23,0,713,800),8124=>array(4,-208,692,729),8125=>array(165,595,286,785),8126=>array(182,-208,299,-45),8127=>array(165,595,286,785),8128=>array(72,638,378,778),8129=>array(72,654,378,928),8130=>array(75,-208,571,800),8131=>array(75,-208,571,560),8132=>array(75,-208,571,800),8134=>array(75,-208,571,778),8135=>array(75,-208,571,778),8136=>array(-1,0,771,800),8137=>array(-22,0,694,800),8138=>array(-1,0,890,800),8139=>array(-17,0,824,800),8140=>array(83,-208,671,729),8141=>array(30,595,422,800),8142=>array(57,595,430,800),8143=>array(72,595,378,928),8144=>array(2,-19,313,784),8145=>array(18,-19,313,760),8146=>array(-33,-19,313,978),8147=>array(21,-19,335,978),8150=>array(3,-19,313,778),8151=>array(-5,-19,313,928),8152=>array(19,0,315,927),8153=>array(28,0,306,914),8154=>array(-1,0,476,800),8155=>array(-19,0,405,800),8157=>array(35,595,427,800),8158=>array(41,595,440,800),8159=>array(72,595,378,928),8160=>array(70,-10,567,784),8161=>array(70,-10,567,760),8162=>array(70,-10,567,978),8163=>array(70,-10,567,978),8164=>array(75,-208,604,785),8165=>array(75,-208,604,785),8166=>array(70,-10,567,778),8167=>array(70,-10,567,928),8168=>array(-9,0,661,927),8169=>array(-9,0,661,914),8170=>array(-1,0,927,800),8171=>array(-24,0,893,800),8172=>array(3,0,718,785),8173=>array(41,654,364,978),8174=>array(86,654,401,978),8175=>array(41,616,290,800),8178=>array(39,-208,744,800),8179=>array(39,-208,744,547),8180=>array(39,-208,744,800),8182=>array(39,-13,744,778),8183=>array(39,-208,744,778),8184=>array(-1,-14,914,800),8185=>array(-17,-14,753,800),8186=>array(-1,0,952,800),8187=>array(-27,0,780,800),8188=>array(24,-208,741,742),8189=>array(160,616,409,800),8190=>array(165,595,286,785),8208=>array(48,217,325,359),8209=>array(48,217,325,359),8210=>array(48,211,578,337),8211=>array(48,211,402,337),8212=>array(48,211,852,337),8213=>array(0,211,900,337),8214=>array(114,-236,359,764),8215=>array(0,-236,450,-9),8216=>array(92,418,286,729),8217=>array(57,418,250,729),8218=>array(64,-122,259,189),8219=>array(57,418,250,729),8220=>array(92,418,509,729),8221=>array(83,418,499,729),8222=>array(64,-122,481,189),8223=>array(83,418,499,729),8224=>array(23,-96,423,729),8225=>array(22,-96,423,729),8226=>array(129,196,446,547),8227=>array(129,157,481,586),8228=>array(71,0,229,189),8229=>array(71,0,529,189),8230=>array(71,0,829,189),8231=>array(77,253,236,442),8240=>array(29,-14,1275,742),8241=>array(29,-14,1678,742),8242=>array(18,547,216,729),8243=>array(18,547,381,729),8244=>array(18,547,545,729),8245=>array(18,547,216,729),8246=>array(18,547,383,729),8247=>array(18,547,545,729),8248=>array(91,-238,569,29),8249=>array(69,67,286,519),8250=>array(84,67,302,519),8251=>array(65,0,810,829),8252=>array(62,0,502,729),8253=>array(62,0,464,742),8254=>array(0,663,450,755),8255=>array(-28,-237,773,-79),8256=>array(-28,769,773,927),8257=>array(-47,-235,267,231),8258=>array(18,-37,903,832),8259=>array(86,220,364,358),8260=>array(-180,-14,330,742),8261=>array(77,-132,351,760),8262=>array(61,-132,334,760),8263=>array(31,0,896,742),8264=>array(62,0,684,742),8265=>array(62,0,684,742),8266=>array(44,-125,418,546),8267=>array(83,-96,521,729),8268=>array(67,189,382,541),8269=>array(67,189,382,541),8270=>array(18,0,453,464),8271=>array(93,-142,296,547),8272=>array(-28,-237,773,927),8273=>array(47,-14,396,797),8274=>array(26,-93,477,729),8275=>array(44,212,856,415),8276=>array(-28,-240,773,-82),8277=>array(137,98,617,631),8278=>array(99,93,517,645),8279=>array(18,547,710,729),8280=>array(68,21,686,708),8281=>array(113,71,641,657),8282=>array(92,0,252,729),8283=>array(44,-170,740,898),8284=>array(49,0,705,729),8285=>array(92,0,250,683),8286=>array(92,0,250,683),8304=>array(26,319,358,742),8305=>array(48,326,147,751),8308=>array(24,326,358,734),8309=>array(42,319,346,734),8310=>array(34,319,355,742),8311=>array(37,326,341,734),8312=>array(34,319,351,742),8313=>array(28,319,349,742),8314=>array(60,326,415,677),8315=>array(60,469,415,534),8316=>array(60,407,415,596),8317=>array(48,252,214,751),8318=>array(45,252,211,751),8319=>array(48,326,365,640),8320=>array(26,-7,358,416),8321=>array(54,0,344,408),8322=>array(48,0,344,416),8323=>array(40,-7,346,416),8324=>array(24,0,358,408),8325=>array(42,-7,346,408),8326=>array(34,-7,355,416),8327=>array(37,0,341,408),8328=>array(34,-7,351,416),8329=>array(28,-7,349,416),8330=>array(60,0,415,351),8331=>array(60,143,415,208),8332=>array(60,81,415,270),8333=>array(48,-74,214,425),8334=>array(45,-74,211,425),8336=>array(48,-8,362,313),8337=>array(48,-8,381,313),8338=>array(48,-8,389,313),8339=>array(9,0,363,306),8340=>array(48,-8,381,313),8341=>array(48,0,365,425),8342=>array(48,0,388,425),8343=>array(48,0,149,425),8344=>array(48,0,547,313),8345=>array(48,0,365,313),8346=>array(48,-117,381,313),8347=>array(30,-8,316,313),8348=>array(48,0,299,393),8352=>array(34,0,803,729),8353=>array(44,-44,571,778),8354=>array(26,-14,601,742),8355=>array(67,0,597,729),8356=>array(55,0,552,742),8357=>array(75,-93,867,640),8358=>array(39,0,715,729),8359=>array(83,-14,1323,729),8360=>array(83,-14,1042,729),8361=>array(12,0,980,729),8362=>array(35,-14,773,729),8363=>array(27,-182,624,760),8364=>array(-18,-14,566,742),8365=>array(26,0,626,729),8366=>array(10,0,615,729),8367=>array(83,-223,1122,742),8368=>array(12,-14,584,742),8369=>array(31,0,626,729),8370=>array(44,-81,579,809),8371=>array(4,0,622,729),8372=>array(39,-14,735,742),8373=>array(64,-147,566,760),8376=>array(10,0,615,729),8377=>array(45,0,583,729),8378=>array(4,0,670,729),8400=>array(-448,628,-23,760),8401=>array(-423,628,1,760),8406=>array(-423,560,-23,760),8407=>array(-423,560,-23,760),8411=>array(-452,654,-0,774),8412=>array(-536,654,89,774),8417=>array(-423,560,-23,760),8448=>array(18,-24,976,752),8449=>array(18,-24,1024,752),8450=>array(44,-14,603,742),8451=>array(78,-14,1033,749),8452=>array(57,0,749,729),8453=>array(18,-24,958,752),8454=>array(18,-24,1005,752),8455=>array(60,-14,555,742),8456=>array(57,-146,616,611),8457=>array(78,0,902,749),8459=>array(32,-14,957,746),8460=>array(5,-125,729,747),8461=>array(90,0,709,729),8462=>array(27,0,589,760),8463=>array(9,0,563,760),8464=>array(32,-14,480,742),8465=>array(46,-14,593,743),8466=>array(33,-14,708,742),8467=>array(-13,-14,361,742),8468=>array(8,-14,842,760),8469=>array(83,0,671,729),8470=>array(30,0,1039,729),8471=>array(124,0,776,725),8472=>array(48,-221,592,495),8473=>array(83,0,638,729),8474=>array(44,-146,720,742),8475=>array(28,-14,814,768),8476=>array(36,-14,723,743),8477=>array(88,0,714,729),8478=>array(33,0,773,729),8479=>array(73,-112,625,887),8480=>array(114,444,713,731),8481=>array(3,0,1124,547),8482=>array(129,447,711,729),8483=>array(10,-113,656,885),8484=>array(40,0,639,729),8485=>array(23,-230,486,777),8486=>array(24,0,741,742),8487=>array(24,-14,741,728),8488=>array(-5,-159,604,729),8489=>array(0,0,244,566),8490=>array(83,0,725,729),8491=>array(4,0,692,928),8492=>array(37,-1,768,772),8493=>array(57,-19,690,742),8494=>array(55,-12,714,647),8495=>array(37,-14,532,533),8496=>array(65,-14,602,742),8497=>array(33,-14,774,773),8498=>array(83,0,540,729),8499=>array(34,-18,1041,751),8500=>array(26,-12,393,420),8501=>array(45,-14,685,742),8502=>array(17,-14,619,742),8503=>array(27,-35,396,742),8504=>array(57,-41,570,742),8505=>array(31,0,320,760),8506=>array(40,-27,839,723),8507=>array(62,0,1217,547),8508=>array(31,-14,689,547),8509=>array(-36,-208,630,561),8510=>array(83,0,564,729),8511=>array(83,0,694,729),8512=>array(11,-192,738,719),8513=>array(22,-14,650,742),8514=>array(8,0,475,729),8515=>array(39,0,505,729),8516=>array(0,0,670,729),8517=>array(18,0,708,729),8518=>array(31,-14,677,760),8519=>array(29,-14,571,560),8520=>array(13,0,317,760),8521=>array(-129,-216,319,760),8523=>array(37,-14,730,742),8526=>array(49,0,423,547),8528=>array(44,-14,885,742),8529=>array(44,-14,894,742),8530=>array(44,-14,1297,742),8531=>array(44,-14,890,742),8532=>array(48,-14,890,742),8533=>array(44,-14,891,742),8534=>array(48,-14,891,742),8535=>array(40,-14,891,742),8536=>array(24,-14,891,742),8537=>array(44,-14,899,742),8538=>array(42,-14,899,742),8539=>array(44,-14,895,742),8540=>array(40,-14,895,742),8541=>array(42,-14,895,742),8542=>array(37,-14,895,742),8543=>array(44,-14,733,742),8544=>array(83,0,252,729),8545=>array(83,0,510,729),8546=>array(83,0,768,729),8547=>array(83,0,984,729),8548=>array(4,0,692,729),8549=>array(4,0,906,729),8550=>array(4,0,1165,729),8551=>array(4,0,1422,729),8552=>array(83,0,991,729),8553=>array(17,0,676,729),8554=>array(17,0,925,729),8555=>array(17,0,1183,729),8556=>array(83,0,549,729),8557=>array(44,-14,603,742),8558=>array(83,0,700,729),8559=>array(83,0,813,729),8560=>array(75,0,233,760),8561=>array(75,0,471,760),8562=>array(75,0,709,760),8563=>array(75,0,852,760),8564=>array(13,0,574,547),8565=>array(13,0,791,760),8566=>array(13,0,1028,760),8567=>array(13,0,1267,760),8568=>array(75,0,858,760),8569=>array(13,0,567,547),8570=>array(13,0,796,760),8571=>array(13,0,1035,760),8572=>array(75,0,233,760),8573=>array(39,-14,474,560),8574=>array(40,-14,569,760),8575=>array(75,0,867,560),8576=>array(47,0,1113,729),8577=>array(83,0,700,729),8578=>array(47,0,1113,729),8579=>array(44,-14,603,742),8580=>array(39,-14,474,560),8581=>array(44,-208,603,742),8585=>array(26,-14,890,742),8592=>array(44,87,703,540),8593=>array(174,0,581,732),8594=>array(51,87,710,540),8595=>array(174,-3,581,729),8596=>array(44,87,710,540),8597=>array(173,-3,581,732),8598=>array(123,66,648,650),8599=>array(123,66,648,650),8600=>array(123,66,648,650),8601=>array(123,66,648,650),8602=>array(44,87,703,540),8603=>array(51,87,710,540),8604=>array(11,84,750,431),8605=>array(4,84,743,431),8606=>array(44,87,703,540),8607=>array(170,0,577,732),8608=>array(51,87,710,540),8609=>array(174,-3,582,729),8610=>array(44,87,714,540),8611=>array(40,87,710,540),8612=>array(44,87,703,540),8613=>array(174,0,581,732),8614=>array(51,87,710,540),8615=>array(174,0,581,732),8616=>array(174,0,581,732),8617=>array(44,87,703,565),8618=>array(51,87,710,565),8619=>array(44,87,703,565),8620=>array(51,87,710,565),8621=>array(44,87,710,540),8622=>array(44,86,710,541),8623=>array(110,-4,643,733),8624=>array(152,0,582,755),8625=>array(172,0,603,755),8626=>array(152,-26,582,729),8627=>array(172,-26,603,729),8628=>array(209,-3,695,621),8629=>array(44,87,606,626),8630=>array(9,198,734,685),8631=>array(20,198,745,685),8632=>array(105,13,709,729),8633=>array(44,-108,710,735),8634=>array(78,45,690,691),8635=>array(64,45,677,691),8636=>array(44,255,703,540),8637=>array(44,87,703,372),8638=>array(325,0,581,732),8639=>array(174,0,431,732),8640=>array(51,255,710,540),8641=>array(51,87,710,372),8642=>array(325,0,581,732),8643=>array(174,0,431,732),8644=>array(44,-59,710,686),8645=>array(42,-3,713,732),8646=>array(44,-59,710,686),8647=>array(44,-59,703,686),8648=>array(42,0,712,732),8649=>array(51,-59,710,686),8650=>array(42,-3,712,729),8651=>array(44,-5,710,632),8652=>array(44,-5,710,632),8653=>array(44,87,703,540),8654=>array(44,87,710,540),8655=>array(51,87,710,540),8656=>array(44,87,703,540),8657=>array(173,0,581,732),8658=>array(51,87,710,540),8659=>array(173,-3,581,729),8660=>array(44,87,710,540),8661=>array(173,-8,581,732),8662=>array(119,-26,680,596),8663=>array(79,-26,641,597),8664=>array(79,16,641,639),8665=>array(119,16,680,639),8666=>array(44,87,703,540),8667=>array(51,87,710,540),8668=>array(40,87,699,540),8669=>array(51,87,710,540),8670=>array(174,0,581,732),8671=>array(174,-3,581,729),8672=>array(44,87,703,540),8673=>array(174,0,581,732),8674=>array(51,87,710,540),8675=>array(174,-3,581,729),8676=>array(44,87,703,540),8677=>array(51,87,710,540),8678=>array(24,46,703,581),8679=>array(136,0,618,754),8680=>array(31,46,710,581),8681=>array(136,-25,618,729),8682=>array(136,0,618,754),8683=>array(136,0,618,754),8684=>array(136,0,618,754),8685=>array(136,0,618,754),8686=>array(136,0,618,754),8687=>array(136,0,618,754),8688=>array(31,46,710,581),8689=>array(53,0,709,729),8690=>array(53,0,709,729),8691=>array(136,-25,618,754),8692=>array(51,87,710,540),8693=>array(42,-3,713,732),8694=>array(51,-223,710,850),8695=>array(44,87,703,540),8696=>array(51,87,710,540),8697=>array(44,87,710,540),8698=>array(44,87,703,540),8699=>array(51,87,710,540),8700=>array(44,87,710,540),8701=>array(24,96,703,531),8702=>array(51,96,730,531),8703=>array(24,96,730,531),8704=>array(4,0,692,729),8705=>array(43,-14,566,742),8706=>array(26,-14,463,674),8707=>array(83,0,549,729),8708=>array(83,-46,549,775),8709=>array(42,-15,729,715),8710=>array(0,0,627,719),8711=>array(0,0,627,719),8712=>array(65,-2,742,730),8713=>array(65,-46,742,775),8714=>array(95,58,580,568),8715=>array(65,-2,742,730),8716=>array(65,-46,742,775),8717=>array(95,58,580,568),8718=>array(88,0,485,553),8719=>array(66,-192,641,719),8720=>array(66,-193,641,718),8721=>array(18,-192,627,719),8722=>array(95,256,659,371),8723=>array(95,0,659,627),8724=>array(44,0,583,729),8725=>array(0,-93,329,729),8726=>array(148,-49,478,772),8727=>array(106,0,647,626),8728=>array(135,151,428,477),8729=>array(92,253,250,442),8730=>array(33,-20,602,837),8731=>array(33,-20,602,933),8732=>array(32,-20,602,924),8733=>array(83,89,555,505),8734=>array(83,89,667,505),8735=>array(95,67,659,693),8736=>array(69,0,738,729),8737=>array(69,-44,738,729),8738=>array(104,-0,659,726),8739=>array(186,-207,290,773),8740=>array(43,-207,434,773),8741=>array(101,-207,376,773),8742=>array(43,-207,434,773),8743=>array(136,0,595,579),8744=>array(136,0,595,579),8745=>array(136,0,595,579),8746=>array(136,0,595,579),8747=>array(13,-227,493,754),8748=>array(13,-227,823,754),8749=>array(13,-227,1152,754),8750=>array(13,-227,493,754),8751=>array(34,-227,845,754),8752=>array(21,-227,1161,754),8753=>array(13,-227,555,754),8754=>array(13,-227,540,754),8755=>array(13,-227,530,754),8756=>array(53,78,573,647),8757=>array(53,78,573,647),8758=>array(53,79,211,647),8759=>array(53,78,573,647),8760=>array(95,256,659,631),8761=>array(95,45,721,584),8762=>array(95,-4,659,631),8763=>array(95,-34,659,660),8764=>array(95,212,659,415),8765=>array(95,212,659,415),8766=>array(59,131,695,497),8767=>array(95,42,659,584),8768=>array(77,0,260,626),8769=>array(95,76,659,551),8770=>array(95,110,659,482),8771=>array(95,144,659,517),8772=>array(95,0,659,637),8773=>array(95,37,659,628),8774=>array(95,-31,659,628),8775=>array(95,-86,659,726),8776=>array(95,110,659,517),8777=>array(95,8,659,614),8778=>array(95,37,659,628),8779=>array(95,-13,659,628),8780=>array(95,37,659,628),8781=>array(95,105,659,585),8782=>array(95,26,659,656),8783=>array(95,172,659,656),8784=>array(95,144,659,744),8785=>array(95,-117,659,743),8786=>array(94,-92,659,719),8787=>array(94,-92,658,719),8788=>array(88,102,868,520),8789=>array(86,102,870,520),8790=>array(95,144,659,482),8791=>array(95,144,659,839),8792=>array(95,144,659,704),8793=>array(95,144,659,840),8794=>array(95,144,659,840),8795=>array(95,144,659,959),8796=>array(95,144,659,952),8797=>array(95,144,659,762),8798=>array(95,144,659,786),8799=>array(95,144,659,903),8800=>array(95,-5,659,631),8801=>array(95,38,659,588),8802=>array(95,-69,659,695),8803=>array(95,-74,659,700),8804=>array(95,0,659,582),8805=>array(95,0,659,582),8806=>array(96,-106,659,617),8807=>array(96,-106,659,617),8808=>array(96,-185,659,617),8809=>array(96,-185,659,617),8810=>array(65,-34,877,660),8811=>array(65,-34,877,660),8812=>array(77,-132,373,759),8813=>array(95,-10,659,700),8814=>array(95,-4,659,690),8815=>array(95,-63,659,631),8816=>array(95,-112,659,645),8817=>array(95,-112,659,645),8818=>array(95,-84,659,582),8819=>array(95,-84,659,582),8820=>array(95,-112,659,645),8821=>array(95,-112,659,645),8822=>array(91,-119,659,678),8823=>array(91,-119,659,678),8824=>array(91,-221,659,779),8825=>array(91,-221,659,779),8826=>array(95,-55,659,681),8827=>array(95,-55,659,681),8828=>array(95,-177,659,684),8829=>array(95,-177,659,684),8830=>array(95,-132,659,684),8831=>array(95,-132,659,684),8832=>array(95,-89,659,781),8833=>array(95,-89,659,781),8834=>array(89,67,665,559),8835=>array(89,65,665,559),8836=>array(89,-96,665,726),8837=>array(89,-100,665,722),8838=>array(89,0,665,636),8839=>array(89,0,665,635),8840=>array(89,-124,665,759),8841=>array(89,-124,665,759),8842=>array(89,-97,665,636),8843=>array(89,-97,665,635),8844=>array(136,0,595,579),8845=>array(136,0,595,579),8846=>array(136,0,595,579),8847=>array(95,0,659,584),8848=>array(95,0,659,584),8849=>array(95,-115,659,667),8850=>array(95,-115,659,667),8851=>array(95,0,621,626),8852=>array(95,0,621,626),8853=>array(82,-14,672,643),8854=>array(82,-14,672,643),8855=>array(82,-14,672,643),8856=>array(82,-13,672,642),8857=>array(82,-14,672,643),8858=>array(82,-14,672,643),8859=>array(82,-14,672,643),8860=>array(82,-14,672,643),8861=>array(82,-14,672,643),8862=>array(69,-29,686,657),8863=>array(69,-29,686,657),8864=>array(69,-29,686,657),8865=>array(69,-29,686,657),8866=>array(77,0,746,705),8867=>array(77,0,746,705),8868=>array(77,0,746,705),8869=>array(77,0,746,705),8870=>array(77,0,412,705),8871=>array(77,0,412,705),8872=>array(77,0,746,705),8873=>array(77,0,746,705),8874=>array(77,0,746,705),8875=>array(77,0,746,705),8876=>array(77,-100,746,805),8877=>array(77,-100,746,805),8878=>array(77,-100,746,805),8879=>array(77,-100,746,805),8880=>array(95,-54,652,681),8881=>array(102,-54,659,681),8882=>array(95,-1,659,628),8883=>array(95,-1,659,628),8884=>array(95,-80,659,706),8885=>array(95,-80,659,706),8886=>array(54,151,846,477),8887=>array(54,151,846,477),8888=>array(53,151,701,477),8889=>array(39,-63,715,689),8890=>array(56,0,432,705),8891=>array(92,0,639,759),8892=>array(92,0,639,759),8893=>array(92,0,639,759),8894=>array(95,0,659,626),8895=>array(95,0,659,626),8896=>array(0,-192,759,719),8897=>array(0,-192,759,719),8898=>array(43,-192,715,719),8899=>array(43,-192,715,719),8900=>array(2,-233,442,807),8901=>array(92,253,250,442),8902=>array(75,112,489,549),8903=>array(95,-56,659,683),8904=>array(95,-48,805,674),8905=>array(95,-48,805,675),8906=>array(95,-48,805,675),8907=>array(95,-48,805,675),8908=>array(95,-48,805,675),8909=>array(95,144,659,517),8910=>array(44,0,687,579),8911=>array(44,0,687,579),8912=>array(83,-22,659,649),8913=>array(95,-22,671,649),8914=>array(75,0,680,639),8915=>array(75,-14,680,625),8916=>array(167,0,587,729),8917=>array(95,-100,659,729),8918=>array(95,30,659,597),8919=>array(95,30,659,597),8920=>array(65,-34,1215,660),8921=>array(65,-34,1215,660),8922=>array(95,-211,659,837),8923=>array(95,-211,659,837),8924=>array(95,0,659,582),8925=>array(95,0,659,582),8926=>array(95,-177,659,684),8927=>array(95,-177,659,684),8928=>array(95,-197,659,808),8929=>array(95,-263,659,742),8930=>array(95,-191,659,817),8931=>array(95,-191,659,817),8932=>array(95,-146,659,636),8933=>array(95,-146,659,636),8934=>array(95,-168,659,582),8935=>array(95,-168,659,582),8936=>array(95,-216,659,684),8937=>array(95,-216,659,684),8938=>array(95,-138,659,808),8939=>array(95,-138,659,808),8940=>array(95,-224,659,894),8941=>array(95,-224,659,894),8942=>array(371,-40,529,735),8943=>array(71,253,829,442),8944=>array(71,-40,829,735),8945=>array(71,-40,829,735),8946=>array(65,-2,977,730),8947=>array(65,-2,742,730),8948=>array(95,58,580,568),8949=>array(65,-2,742,984),8950=>array(65,-2,742,919),8951=>array(95,58,580,741),8952=>array(65,-207,742,730),8953=>array(65,-2,742,730),8954=>array(65,-2,977,730),8955=>array(65,-2,742,730),8956=>array(95,58,580,568),8957=>array(65,-2,742,919),8958=>array(95,58,580,741),8959=>array(95,0,712,732),8960=>array(28,-22,515,519),8961=>array(50,152,486,453),8962=>array(58,0,586,596),8963=>array(174,470,581,732),8964=>array(174,0,581,263),8965=>array(174,-12,581,423),8966=>array(174,-12,581,552),8967=>array(125,-39,314,798),8968=>array(77,-132,351,760),8969=>array(61,-132,334,760),8970=>array(77,-132,351,760),8971=>array(61,-132,334,760),8972=>array(316,-77,684,331),8973=>array(44,-77,412,331),8974=>array(316,226,684,634),8975=>array(44,226,412,634),8976=>array(95,140,659,444),8977=>array(2,113,482,646),8984=>array(76,0,759,759),8985=>array(95,140,659,444),8988=>array(77,425,363,760),8989=>array(59,425,345,760),8990=>array(77,-126,363,208),8991=>array(59,-126,345,208),8992=>array(211,-250,527,926),8993=>array(20,-240,336,940),8996=>array(68,215,969,575),8997=>array(68,0,969,575),8998=>array(68,0,1272,760),8999=>array(68,0,969,760),9000=>array(53,0,1247,729),9003=>array(0,0,1204,760),9004=>array(66,-91,720,748),9075=>array(70,-19,313,547),9076=>array(75,-208,604,562),9077=>array(39,-13,744,547),9082=>array(43,-13,581,559),9085=>array(11,-228,765,99),9095=>array(68,0,990,743),9108=>array(15,0,771,727),9115=>array(56,-252,394,928),9116=>array(56,-252,185,940),9117=>array(56,-240,394,940),9118=>array(56,-252,394,928),9119=>array(266,-252,394,940),9120=>array(56,-240,394,940),9121=>array(56,-252,394,928),9122=>array(56,-252,185,940),9123=>array(56,-240,394,940),9124=>array(56,-252,394,928),9125=>array(266,-252,394,940),9126=>array(56,-240,394,940),9127=>array(275,-261,602,928),9128=>array(74,-247,400,934),9129=>array(275,-240,602,934),9130=>array(275,-256,400,934),9131=>array(74,-261,400,928),9132=>array(275,-247,602,934),9133=>array(74,-240,400,934),9134=>array(211,-250,336,940),9166=>array(24,46,703,729),9167=>array(82,0,769,596),9187=>array(66,-91,720,748),9189=>array(2,75,690,444),9192=>array(35,-129,599,294),9250=>array(-73,-14,604,760),9251=>array(58,-228,586,99),9312=>array(53,-15,709,715),9313=>array(53,-15,709,715),9314=>array(53,-15,709,715),9315=>array(53,-15,709,715),9316=>array(53,-15,709,715),9317=>array(53,-15,709,715),9318=>array(53,-15,709,715),9319=>array(53,-15,709,715),9320=>array(53,-15,709,715),9321=>array(53,-15,709,715),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,701,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-124,769,643),9633=>array(82,-124,769,643),9634=>array(82,-124,769,643),9635=>array(82,-124,769,643),9636=>array(82,-124,769,643),9637=>array(82,-124,769,643),9638=>array(82,-124,769,643),9639=>array(82,-124,769,643),9640=>array(82,-124,769,643),9641=>array(82,-124,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-124,690,643),9651=>array(2,-124,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-124,690,643),9655=>array(2,-124,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-124,690,643),9661=>array(2,-124,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-124,690,643),9665=>array(2,-124,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-124,690,643),9671=>array(2,-124,690,643),9672=>array(2,-124,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,675,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(2,260,690,645),9697=>array(2,-125,690,260),9698=>array(2,-124,690,643),9699=>array(2,-124,690,643),9700=>array(2,-124,690,643),9701=>array(2,-124,690,643),9702=>array(129,196,446,547),9703=>array(82,-124,769,643),9704=>array(82,-124,769,643),9705=>array(82,-124,769,643),9706=>array(82,-124,769,643),9707=>array(82,-124,769,643),9708=>array(2,-124,690,643),9709=>array(2,-124,690,643),9710=>array(2,-124,690,643),9711=>array(49,-250,958,770),9712=>array(82,-124,769,643),9713=>array(82,-124,769,643),9714=>array(82,-124,769,643),9715=>array(82,-124,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-124,690,643),9721=>array(2,-124,690,643),9722=>array(2,-124,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-124,690,643),9728=>array(75,0,731,729),9729=>array(45,-2,854,360),9730=>array(44,0,763,729),9731=>array(75,-0,732,927),9732=>array(57,0,750,880),9733=>array(58,-4,749,723),9734=>array(58,-4,749,723),9735=>array(75,2,441,729),9736=>array(75,0,732,731),9737=>array(75,0,732,730),9738=>array(55,0,745,727),9739=>array(55,0,745,723),9740=>array(55,-1,549,722),9741=>array(55,0,857,723),9742=>array(62,0,1060,729),9743=>array(63,0,1062,729),9744=>array(81,0,727,729),9745=>array(80,0,727,729),9746=>array(80,0,727,729),9747=>array(67,78,411,656),9748=>array(44,0,783,933),9749=>array(66,0,740,731),9750=>array(75,0,732,731),9751=>array(75,0,732,727),9752=>array(70,0,737,729),9753=>array(75,140,732,574),9754=>array(75,113,732,569),9755=>array(75,113,732,569),9756=>array(78,104,729,569),9757=>array(64,0,483,724),9758=>array(78,103,729,569),9759=>array(64,-3,483,720),9760=>array(55,0,752,730),9761=>array(75,0,732,730),9762=>array(75,0,732,730),9763=>array(44,0,763,730),9764=>array(44,-2,558,727),9765=>array(75,0,597,731),9766=>array(75,-1,510,731),9767=>array(75,0,631,911),9768=>array(75,0,416,730),9769=>array(75,-1,732,729),9770=>array(78,0,729,730),9771=>array(75,0,733,731),9772=>array(75,0,565,731),9773=>array(75,0,732,730),9774=>array(75,0,732,730),9775=>array(75,0,732,730),9776=>array(75,0,732,729),9777=>array(75,0,733,729),9778=>array(75,0,732,729),9779=>array(75,0,732,729),9780=>array(75,0,732,729),9781=>array(75,0,732,729),9782=>array(75,0,732,729),9783=>array(75,0,732,729),9784=>array(71,3,735,721),9785=>array(75,-73,864,804),9786=>array(75,-73,864,804),9787=>array(75,-73,864,804),9788=>array(75,0,732,730),9789=>array(322,0,733,730),9790=>array(75,0,485,730),9791=>array(77,-102,476,732),9792=>array(77,-125,583,731),9793=>array(77,-14,583,843),9794=>array(71,-14,748,720),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9800=>array(41,0,766,731),9801=>array(80,0,727,730),9802=>array(84,0,722,731),9803=>array(101,31,706,679),9804=>array(125,0,681,730),9805=>array(48,-180,759,730),9806=>array(75,52,732,653),9807=>array(30,-96,777,730),9808=>array(74,-0,732,730),9809=>array(84,0,722,730),9810=>array(77,153,729,579),9811=>array(141,0,666,730),9812=>array(88,0,719,730),9813=>array(99,0,708,730),9814=>array(149,-1,657,729),9815=>array(192,0,615,730),9816=>array(148,0,659,730),9817=>array(133,-0,673,730),9818=>array(88,0,719,730),9819=>array(99,0,708,730),9820=>array(149,-1,657,729),9821=>array(192,0,615,730),9822=>array(146,0,661,730),9823=>array(133,-0,673,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9832=>array(95,-1,712,729),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),9840=>array(75,0,598,731),9841=>array(58,0,631,731),9842=>array(75,0,732,709),9843=>array(68,16,738,731),9844=>array(68,16,738,731),9845=>array(68,16,738,731),9846=>array(68,16,738,731),9847=>array(68,16,738,731),9848=>array(68,16,738,731),9849=>array(68,16,738,731),9850=>array(68,16,738,731),9851=>array(75,0,731,704),9852=>array(75,0,733,731),9853=>array(75,0,733,731),9854=>array(75,0,733,731),9855=>array(134,1,672,731),9856=>array(66,0,717,725),9857=>array(66,0,717,725),9858=>array(66,0,717,725),9859=>array(66,0,717,725),9860=>array(66,0,717,725),9861=>array(66,0,717,725),9862=>array(75,0,732,731),9863=>array(75,0,732,731),9864=>array(75,0,732,731),9865=>array(75,0,732,731),9866=>array(75,0,732,98),9867=>array(75,0,732,98),9868=>array(75,0,732,413),9869=>array(75,0,732,413),9870=>array(75,0,732,413),9871=>array(75,0,732,413),9872=>array(151,3,655,731),9873=>array(151,3,655,731),9874=>array(46,0,760,731),9875=>array(87,-10,720,732),9876=>array(118,0,689,729),9877=>array(55,-10,431,732),9878=>array(53,-10,753,732),9879=>array(55,0,751,732),9880=>array(130,0,676,732),9881=>array(85,-17,722,727),9882=>array(115,-9,691,733),9883=>array(114,0,692,728),9884=>array(114,0,692,729),9888=>array(44,0,763,729),9889=>array(75,2,558,730),9890=>array(77,-125,827,731),9891=>array(71,-206,921,720),9892=>array(77,-186,998,856),9893=>array(77,-125,753,917),9894=>array(118,-14,654,869),9895=>array(91,-170,667,884),9896=>array(168,-14,585,869),9897=>array(4,133,746,596),9898=>array(168,133,585,597),9899=>array(168,133,585,597),9900=>array(224,194,531,536),9901=>array(158,194,597,536),9902=>array(37,169,717,560),9903=>array(4,194,750,536),9904=>array(92,237,681,540),9905=>array(190,42,564,698),9906=>array(77,-125,583,731),9907=>array(151,-125,582,731),9908=>array(77,-125,582,731),9909=>array(77,-125,582,731),9910=>array(53,-118,712,643),9911=>array(175,-104,536,710),9912=>array(142,-125,489,731),9920=>array(38,4,716,553),9921=>array(38,4,716,724),9922=>array(38,4,716,553),9923=>array(38,4,716,724),9954=>array(77,-14,583,843),9985=>array(9,190,723,635),9986=>array(38,141,706,588),9987=>array(9,94,723,539),9988=>array(32,119,742,613),9990=>array(38,-14,716,742),9991=>array(38,-14,716,742),9992=>array(53,21,704,708),9993=>array(58,107,696,622),9996=>array(191,0,505,742),9997=>array(19,83,722,678),9998=>array(80,75,652,710),9999=>array(23,198,738,530),10000=>array(80,75,652,710),10001=>array(39,185,681,544),10002=>array(61,209,681,520),10003=>array(135,97,601,630),10004=>array(104,87,649,631),10005=>array(114,72,641,657),10006=>array(77,31,677,698),10007=>array(105,-9,631,732),10008=>array(110,0,679,739),10009=>array(49,0,705,729),10010=>array(49,0,705,729),10011=>array(49,0,705,729),10012=>array(49,0,705,729),10013=>array(148,0,606,729),10014=>array(118,0,610,729),10015=>array(140,0,615,729),10016=>array(49,0,705,729),10017=>array(82,-13,672,744),10018=>array(37,-14,717,742),10019=>array(38,-12,716,742),10020=>array(36,-14,718,742),10021=>array(37,-13,717,743),10022=>array(38,-14,717,745),10023=>array(38,-14,717,745),10025=>array(21,-9,733,743),10026=>array(38,-14,716,742),10027=>array(21,-9,733,743),10028=>array(21,-9,733,743),10029=>array(21,-9,733,743),10030=>array(21,-9,733,743),10031=>array(21,-9,733,743),10032=>array(22,12,734,714),10033=>array(58,0,696,729),10034=>array(66,0,688,729),10035=>array(49,0,705,729),10036=>array(28,-14,708,742),10037=>array(37,-14,717,742),10038=>array(82,-14,672,742),10039=>array(37,-14,717,742),10040=>array(37,-14,717,742),10041=>array(37,-14,717,742),10042=>array(49,0,705,729),10043=>array(73,-14,681,742),10044=>array(73,-14,681,742),10045=>array(76,-14,678,742),10046=>array(71,-14,683,742),10047=>array(48,0,706,709),10048=>array(48,0,706,709),10049=>array(37,-14,717,742),10050=>array(38,-14,716,742),10051=>array(71,-14,683,742),10052=>array(80,0,674,729),10053=>array(68,0,686,729),10054=>array(57,2,696,729),10055=>array(70,-13,684,742),10056=>array(42,-13,712,730),10057=>array(42,-13,712,730),10058=>array(37,-13,717,743),10059=>array(37,-13,717,743),10061=>array(44,-10,762,738),10063=>array(53,-49,753,729),10064=>array(53,0,753,777),10065=>array(53,-49,753,729),10066=>array(53,0,753,777),10070=>array(75,-2,732,728),10072=>array(339,-240,415,760),10073=>array(302,-240,452,760),10074=>array(228,-240,527,760),10075=>array(76,395,259,729),10076=>array(53,395,236,729),10077=>array(76,395,476,729),10078=>array(53,395,452,729),10081=>array(140,-93,695,851),10082=>array(182,-17,572,742),10083=>array(146,-17,607,742),10084=>array(48,83,706,645),10085=>array(151,-1,656,729),10086=>array(55,21,652,702),10087=>array(70,169,684,564),10088=>array(176,-139,583,769),10089=>array(176,-139,583,769),10090=>array(237,-132,517,758),10091=>array(237,-132,517,758),10092=>array(193,-240,546,760),10093=>array(208,-240,561,760),10094=>array(127,-240,617,760),10095=>array(137,-240,626,760),10096=>array(149,-240,590,760),10097=>array(165,-240,605,760),10098=>array(311,-241,482,760),10099=>array(272,-241,443,760),10100=>array(157,-163,571,760),10101=>array(183,-163,597,760),10102=>array(53,-15,709,715),10103=>array(53,-15,709,715),10104=>array(53,-15,709,715),10105=>array(53,-15,709,715),10106=>array(53,-15,709,715),10107=>array(53,-15,709,715),10108=>array(53,-15,709,715),10109=>array(53,-15,709,715),10110=>array(53,-15,709,715),10111=>array(53,-15,709,715),10112=>array(4,-52,750,780),10113=>array(4,-52,750,780),10114=>array(4,-52,750,780),10115=>array(4,-52,750,780),10116=>array(4,-52,750,780),10117=>array(4,-52,750,780),10118=>array(4,-52,750,780),10119=>array(4,-52,750,780),10120=>array(4,-52,750,780),10121=>array(4,-52,750,780),10122=>array(4,-52,750,780),10123=>array(4,-52,750,780),10124=>array(4,-52,750,780),10125=>array(4,-52,750,780),10126=>array(4,-52,750,780),10127=>array(4,-52,750,780),10128=>array(4,-52,750,780),10129=>array(4,-52,750,780),10130=>array(4,-52,750,780),10131=>array(4,-52,750,780),10132=>array(51,75,710,552),10136=>array(110,55,614,614),10137=>array(51,100,710,527),10138=>array(110,13,614,572),10139=>array(51,129,710,498),10140=>array(51,57,688,570),10141=>array(51,100,710,527),10142=>array(51,100,710,527),10143=>array(51,100,710,527),10144=>array(51,100,710,527),10145=>array(51,46,730,581),10146=>array(100,94,710,533),10147=>array(100,94,710,533),10148=>array(100,-4,710,631),10149=>array(51,100,710,548),10150=>array(51,79,710,527),10151=>array(216,-7,545,634),10152=>array(51,100,710,527),10153=>array(51,75,688,552),10154=>array(51,75,688,552),10155=>array(19,12,715,586),10156=>array(19,12,715,586),10157=>array(122,0,697,574),10158=>array(122,0,697,574),10159=>array(56,49,719,574),10161=>array(56,49,719,574),10162=>array(139,-20,649,585),10163=>array(57,157,710,470),10164=>array(72,55,614,655),10165=>array(51,173,710,454),10166=>array(73,-29,614,572),10167=>array(73,55,614,655),10168=>array(51,172,710,455),10169=>array(73,-28,614,572),10170=>array(50,84,710,543),10171=>array(66,140,702,487),10172=>array(71,167,697,460),10173=>array(71,118,697,509),10174=>array(51,81,710,546),10181=>array(48,-163,365,769),10182=>array(46,-163,363,769),10208=>array(2,-233,442,807),10214=>array(77,-132,378,760),10215=>array(77,-132,378,760),10216=>array(94,-132,339,759),10217=>array(72,-132,317,759),10218=>array(94,-132,577,759),10219=>array(72,-132,554,759),10224=>array(37,0,717,732),10225=>array(38,-3,718,729),10226=>array(8,45,734,685),10227=>array(20,45,747,685),10228=>array(51,-14,998,643),10229=>array(44,87,1239,540),10230=>array(51,87,1247,540),10231=>array(44,87,1247,540),10232=>array(44,87,1239,540),10233=>array(51,87,1247,540),10234=>array(44,87,1247,540),10235=>array(44,87,1239,540),10236=>array(51,87,1247,540),10237=>array(44,87,1239,540),10238=>array(51,87,1247,540),10239=>array(51,87,1247,540),10241=>array(132,586,308,781),10242=>array(132,325,308,521),10243=>array(132,325,308,781),10244=>array(132,65,308,261),10245=>array(132,65,308,781),10246=>array(132,65,308,521),10247=>array(132,65,308,781),10248=>array(396,586,571,781),10249=>array(132,586,571,781),10250=>array(132,325,571,781),10251=>array(132,325,571,781),10252=>array(132,65,571,781),10253=>array(132,65,571,781),10254=>array(132,65,571,781),10255=>array(132,65,571,781),10256=>array(396,325,571,521),10257=>array(132,325,571,781),10258=>array(132,325,571,521),10259=>array(132,325,571,781),10260=>array(132,65,571,521),10261=>array(132,65,571,781),10262=>array(132,65,571,521),10263=>array(132,65,571,781),10264=>array(396,325,571,781),10265=>array(132,325,571,781),10266=>array(132,325,571,781),10267=>array(132,325,571,781),10268=>array(132,65,571,781),10269=>array(132,65,571,781),10270=>array(132,65,571,781),10271=>array(132,65,571,781),10272=>array(396,65,571,261),10273=>array(132,65,571,781),10274=>array(132,65,571,521),10275=>array(132,65,571,781),10276=>array(132,65,571,261),10277=>array(132,65,571,781),10278=>array(132,65,571,521),10279=>array(132,65,571,781),10280=>array(396,65,571,781),10281=>array(132,65,571,781),10282=>array(132,65,571,781),10283=>array(132,65,571,781),10284=>array(132,65,571,781),10285=>array(132,65,571,781),10286=>array(132,65,571,781),10287=>array(132,65,571,781),10288=>array(396,65,571,521),10289=>array(132,65,571,781),10290=>array(132,65,571,521),10291=>array(132,65,571,781),10292=>array(132,65,571,521),10293=>array(132,65,571,781),10294=>array(132,65,571,521),10295=>array(132,65,571,781),10296=>array(396,65,571,781),10297=>array(132,65,571,781),10298=>array(132,65,571,781),10299=>array(132,65,571,781),10300=>array(132,65,571,781),10301=>array(132,65,571,781),10302=>array(132,65,571,781),10303=>array(132,65,571,781),10304=>array(132,-195,308,0),10305=>array(132,-195,308,781),10306=>array(132,-195,308,521),10307=>array(132,-195,308,781),10308=>array(132,-195,308,261),10309=>array(132,-195,308,781),10310=>array(132,-195,308,521),10311=>array(132,-195,308,781),10312=>array(132,-195,571,781),10313=>array(132,-195,571,781),10314=>array(132,-195,571,781),10315=>array(132,-195,571,781),10316=>array(132,-195,571,781),10317=>array(132,-195,571,781),10318=>array(132,-195,571,781),10319=>array(132,-195,571,781),10320=>array(132,-195,571,521),10321=>array(132,-195,571,781),10322=>array(132,-195,571,521),10323=>array(132,-195,571,781),10324=>array(132,-195,571,521),10325=>array(132,-195,571,781),10326=>array(132,-195,571,521),10327=>array(132,-195,571,781),10328=>array(132,-195,571,781),10329=>array(132,-195,571,781),10330=>array(132,-195,571,781),10331=>array(132,-195,571,781),10332=>array(132,-195,571,781),10333=>array(132,-195,571,781),10334=>array(132,-195,571,781),10335=>array(132,-195,571,781),10336=>array(132,-195,571,261),10337=>array(132,-195,571,781),10338=>array(132,-195,571,521),10339=>array(132,-195,571,781),10340=>array(132,-195,571,261),10341=>array(132,-195,571,781),10342=>array(132,-195,571,521),10343=>array(132,-195,571,781),10344=>array(132,-195,571,781),10345=>array(132,-195,571,781),10346=>array(132,-195,571,781),10347=>array(132,-195,571,781),10348=>array(132,-195,571,781),10349=>array(132,-195,571,781),10350=>array(132,-195,571,781),10351=>array(132,-195,571,781),10352=>array(132,-195,571,521),10353=>array(132,-195,571,781),10354=>array(132,-195,571,521),10355=>array(132,-195,571,781),10356=>array(132,-195,571,521),10357=>array(132,-195,571,781),10358=>array(132,-195,571,521),10359=>array(132,-195,571,781),10360=>array(132,-195,571,781),10361=>array(132,-195,571,781),10362=>array(132,-195,571,781),10363=>array(132,-195,571,781),10364=>array(132,-195,571,781),10365=>array(132,-195,571,781),10366=>array(132,-195,571,781),10367=>array(132,-195,571,781),10368=>array(396,-195,571,0),10369=>array(132,-195,571,781),10370=>array(132,-195,571,521),10371=>array(132,-195,571,781),10372=>array(132,-195,571,261),10373=>array(132,-195,571,781),10374=>array(132,-195,571,521),10375=>array(132,-195,571,781),10376=>array(396,-195,571,781),10377=>array(132,-195,571,781),10378=>array(132,-195,571,781),10379=>array(132,-195,571,781),10380=>array(132,-195,571,781),10381=>array(132,-195,571,781),10382=>array(132,-195,571,781),10383=>array(132,-195,571,781),10384=>array(396,-195,571,521),10385=>array(132,-195,571,781),10386=>array(132,-195,571,521),10387=>array(132,-195,571,781),10388=>array(132,-195,571,521),10389=>array(132,-195,571,781),10390=>array(132,-195,571,521),10391=>array(132,-195,571,781),10392=>array(396,-195,571,781),10393=>array(132,-195,571,781),10394=>array(132,-195,571,781),10395=>array(132,-195,571,781),10396=>array(132,-195,571,781),10397=>array(132,-195,571,781),10398=>array(132,-195,571,781),10399=>array(132,-195,571,781),10400=>array(396,-195,571,261),10401=>array(132,-195,571,781),10402=>array(132,-195,571,521),10403=>array(132,-195,571,781),10404=>array(132,-195,571,261),10405=>array(132,-195,571,781),10406=>array(132,-195,571,521),10407=>array(132,-195,571,781),10408=>array(396,-195,571,781),10409=>array(132,-195,571,781),10410=>array(132,-195,571,781),10411=>array(132,-195,571,781),10412=>array(132,-195,571,781),10413=>array(132,-195,571,781),10414=>array(132,-195,571,781),10415=>array(132,-195,571,781),10416=>array(396,-195,571,521),10417=>array(132,-195,571,781),10418=>array(132,-195,571,521),10419=>array(132,-195,571,781),10420=>array(132,-195,571,521),10421=>array(132,-195,571,781),10422=>array(132,-195,571,521),10423=>array(132,-195,571,781),10424=>array(396,-195,571,781),10425=>array(132,-195,571,781),10426=>array(132,-195,571,781),10427=>array(132,-195,571,781),10428=>array(132,-195,571,781),10429=>array(132,-195,571,781),10430=>array(132,-195,571,781),10431=>array(132,-195,571,781),10432=>array(132,-195,571,0),10433=>array(132,-195,571,781),10434=>array(132,-195,571,521),10435=>array(132,-195,571,781),10436=>array(132,-195,571,261),10437=>array(132,-195,571,781),10438=>array(132,-195,571,521),10439=>array(132,-195,571,781),10440=>array(132,-195,571,781),10441=>array(132,-195,571,781),10442=>array(132,-195,571,781),10443=>array(132,-195,571,781),10444=>array(132,-195,571,781),10445=>array(132,-195,571,781),10446=>array(132,-195,571,781),10447=>array(132,-195,571,781),10448=>array(132,-195,571,521),10449=>array(132,-195,571,781),10450=>array(132,-195,571,521),10451=>array(132,-195,571,781),10452=>array(132,-195,571,521),10453=>array(132,-195,571,781),10454=>array(132,-195,571,521),10455=>array(132,-195,571,781),10456=>array(132,-195,571,781),10457=>array(132,-195,571,781),10458=>array(132,-195,571,781),10459=>array(132,-195,571,781),10460=>array(132,-195,571,781),10461=>array(132,-195,571,781),10462=>array(132,-195,571,781),10463=>array(132,-195,571,781),10464=>array(132,-195,571,261),10465=>array(132,-195,571,781),10466=>array(132,-195,571,521),10467=>array(132,-195,571,781),10468=>array(132,-195,571,261),10469=>array(132,-195,571,781),10470=>array(132,-195,571,521),10471=>array(132,-195,571,781),10472=>array(132,-195,571,781),10473=>array(132,-195,571,781),10474=>array(132,-195,571,781),10475=>array(132,-195,571,781),10476=>array(132,-195,571,781),10477=>array(132,-195,571,781),10478=>array(132,-195,571,781),10479=>array(132,-195,571,781),10480=>array(132,-195,571,521),10481=>array(132,-195,571,781),10482=>array(132,-195,571,521),10483=>array(132,-195,571,781),10484=>array(132,-195,571,521),10485=>array(132,-195,571,781),10486=>array(132,-195,571,521),10487=>array(132,-195,571,781),10488=>array(132,-195,571,781),10489=>array(132,-195,571,781),10490=>array(132,-195,571,781),10491=>array(132,-195,571,781),10492=>array(132,-195,571,781),10493=>array(132,-195,571,781),10494=>array(132,-195,571,781),10495=>array(132,-195,571,781),10502=>array(44,87,703,540),10503=>array(51,87,710,540),10506=>array(119,0,637,732),10507=>array(119,0,637,732),10560=>array(78,45,653,853),10561=>array(78,45,653,853),10627=>array(112,-163,566,760),10628=>array(112,-163,566,760),10702=>array(95,-258,659,800),10703=>array(95,-1,847,628),10704=>array(95,-1,847,628),10705=>array(95,-48,805,674),10706=>array(95,-48,805,674),10707=>array(95,-48,805,674),10708=>array(95,-48,805,675),10709=>array(95,-48,805,675),10731=>array(2,-233,442,807),10746=>array(95,0,659,627),10747=>array(95,0,659,627),10752=>array(25,-211,875,734),10753=>array(25,-211,875,734),10754=>array(25,-211,875,734),10764=>array(13,-227,1482,754),10765=>array(13,-227,493,754),10766=>array(13,-227,493,754),10767=>array(13,-227,493,754),10768=>array(13,-227,493,754),10769=>array(13,-227,519,754),10770=>array(13,-227,493,754),10771=>array(13,-227,493,754),10772=>array(13,-228,586,754),10773=>array(13,-227,493,754),10774=>array(13,-227,493,754),10775=>array(-27,-227,500,754),10776=>array(13,-227,493,754),10777=>array(13,-227,493,754),10778=>array(13,-227,493,754),10779=>array(13,-227,493,898),10780=>array(13,-372,493,754),10799=>array(112,20,642,607),10858=>array(95,212,659,660),10859=>array(95,-34,659,660),10877=>array(95,-150,659,632),10878=>array(95,-150,659,632),10879=>array(95,-150,659,632),10880=>array(95,-150,659,632),10881=>array(95,-150,659,688),10882=>array(95,-150,659,688),10883=>array(95,-150,659,827),10884=>array(95,-150,659,827),10885=>array(95,-217,659,630),10886=>array(95,-217,659,630),10887=>array(95,-124,659,582),10888=>array(95,-124,659,582),10889=>array(95,-281,659,630),10890=>array(95,-281,659,630),10891=>array(95,-303,659,814),10892=>array(95,-303,659,814),10893=>array(95,-183,659,653),10894=>array(95,-183,659,653),10895=>array(95,-245,659,765),10896=>array(95,-245,659,765),10897=>array(96,-278,659,782),10898=>array(96,-278,659,782),10899=>array(95,-263,659,771),10900=>array(95,-263,659,771),10901=>array(95,-50,659,733),10902=>array(95,-50,659,733),10903=>array(95,-50,659,733),10904=>array(95,-50,659,733),10905=>array(96,-45,659,678),10906=>array(96,-45,659,678),10907=>array(95,-81,659,724),10908=>array(95,-81,659,724),10909=>array(95,13,659,680),10910=>array(95,13,659,680),10911=>array(95,-239,659,746),10912=>array(95,-239,659,746),10926=>array(95,22,659,656),10927=>array(95,-83,659,684),10928=>array(95,-83,659,684),10929=>array(95,-246,659,684),10930=>array(95,-246,659,684),10931=>array(95,-205,659,672),10932=>array(95,-205,659,672),10933=>array(95,-304,659,672),10934=>array(95,-304,659,672),10935=>array(95,-252,659,713),10936=>array(95,-252,659,713),10937=>array(95,-316,659,713),10938=>array(95,-316,659,713),11001=>array(95,-195,659,609),11002=>array(95,-195,659,609),11008=>array(110,-23,670,598),11009=>array(84,-23,644,598),11010=>array(110,-23,670,598),11011=>array(84,-23,644,598),11012=>array(24,46,710,581),11013=>array(24,46,703,581),11014=>array(136,0,618,754),11015=>array(136,-25,618,729),11016=>array(110,-23,670,598),11017=>array(84,-23,644,598),11018=>array(110,-23,670,598),11019=>array(84,-23,644,598),11020=>array(24,46,710,581),11021=>array(136,-25,618,754),11022=>array(51,-25,721,372),11023=>array(51,255,721,652),11024=>array(34,-25,703,372),11025=>array(34,255,703,652),11026=>array(82,-124,769,643),11027=>array(82,-124,769,643),11028=>array(82,-124,769,643),11029=>array(82,-124,769,643),11030=>array(2,-124,690,643),11031=>array(2,-124,690,643),11032=>array(2,-124,690,643),11033=>array(2,-124,690,643),11034=>array(82,-124,769,643),11039=>array(16,-26,767,767),11040=>array(16,-26,767,767),11041=>array(66,-91,720,748),11042=>array(66,-91,720,748),11043=>array(15,-35,771,692),11044=>array(49,-250,958,770),11091=>array(34,-47,749,788),11092=>array(34,-47,749,788),11360=>array(4,0,549,729),11361=>array(4,0,320,760),11362=>array(-16,0,549,729),11363=>array(5,0,623,729),11364=>array(83,-200,675,729),11365=>array(29,-46,576,594),11366=>array(12,-93,410,822),11367=>array(83,-157,839,729),11368=>array(75,-138,729,760),11369=>array(83,-157,725,729),11370=>array(75,-138,616,760),11371=>array(40,-157,691,729),11372=>array(40,-138,560,547),11373=>array(43,-14,692,741),11374=>array(83,-200,813,729),11375=>array(4,0,692,729),11376=>array(43,-14,692,741),11377=>array(13,0,701,560),11378=>array(26,0,1099,742),11379=>array(31,0,951,560),11380=>array(34,0,574,586),11381=>array(83,0,545,729),11382=>array(75,0,433,547),11383=>array(58,0,652,552),11385=>array(75,-13,441,760),11386=>array(39,-14,580,560),11387=>array(70,0,420,547),11388=>array(-20,-121,149,425),11389=>array(2,326,436,734),11390=>array(64,-240,603,742),11391=>array(40,-240,612,729),11520=>array(40,-64,548,547),11521=>array(14,-232,563,546),11522=>array(36,-232,567,547),11523=>array(38,-10,527,807),11524=>array(35,-228,552,546),11525=>array(37,-228,889,546),11526=>array(18,-8,602,816),11527=>array(37,-9,877,547),11528=>array(35,0,531,547),11529=>array(37,-227,553,816),11530=>array(35,-9,887,546),11531=>array(38,-8,584,816),11532=>array(35,0,564,816),11533=>array(37,-8,889,546),11534=>array(37,-8,566,546),11535=>array(37,-228,761,816),11536=>array(38,-9,879,816),11537=>array(37,-9,567,816),11538=>array(41,-232,549,546),11539=>array(37,-228,886,661),11540=>array(40,-228,862,546),11541=>array(35,-228,880,816),11542=>array(40,0,565,546),11543=>array(37,-228,567,547),11544=>array(37,-232,564,546),11545=>array(40,-228,565,816),11546=>array(38,-232,549,547),11547=>array(39,-9,593,816),11548=>array(40,-228,891,547),11549=>array(40,-232,557,546),11550=>array(41,-232,576,546),11551=>array(40,-228,554,567),11552=>array(40,-9,904,546),11553=>array(40,-228,558,816),11554=>array(38,-9,541,626),11555=>array(40,-228,560,816),11556=>array(37,-228,615,546),11557=>array(40,-8,863,816),11568=>array(49,-14,573,380),11569=>array(44,-14,803,742),11570=>array(44,-14,803,742),11571=>array(46,0,606,729),11572=>array(46,0,606,729),11573=>array(50,0,602,729),11574=>array(43,0,565,729),11575=>array(4,0,692,729),11576=>array(4,0,692,729),11577=>array(83,0,549,729),11578=>array(83,0,549,729),11579=>array(66,-14,656,742),11580=>array(66,0,824,729),11581=>array(83,0,679,729),11582=>array(83,0,495,729),11583=>array(83,0,679,729),11584=>array(44,-14,803,742),11585=>array(44,-84,803,815),11586=>array(83,0,253,729),11587=>array(19,0,648,729),11588=>array(83,0,671,729),11589=>array(-27,0,850,729),11590=>array(83,0,539,729),11591=>array(83,0,639,729),11592=>array(66,256,546,445),11593=>array(83,0,549,729),11594=>array(66,0,476,729),11595=>array(57,-14,803,742),11596=>array(74,0,626,729),11597=>array(83,0,671,729),11598=>array(83,0,549,729),11599=>array(83,0,252,729),11600=>array(74,0,626,729),11601=>array(83,0,253,729),11602=>array(38,-14,615,729),11603=>array(49,-14,573,742),11604=>array(44,-14,803,742),11605=>array(44,-95,803,742),11606=>array(83,0,671,729),11607=>array(83,0,253,729),11608=>array(83,0,670,729),11609=>array(44,-14,803,742),11610=>array(44,-14,803,823),11611=>array(44,-14,646,742),11612=>array(71,0,718,729),11613=>array(17,0,676,729),11614=>array(44,-14,646,742),11615=>array(83,0,549,729),11616=>array(4,0,692,729),11617=>array(83,0,671,729),11618=>array(83,0,540,729),11619=>array(44,0,721,729),11620=>array(83,0,589,729),11621=>array(44,0,721,729),11631=>array(58,490,586,729),11800=>array(62,-14,464,728),11807=>array(95,-34,659,415),11810=>array(77,403,351,760),11811=>array(61,403,334,760),11812=>array(77,-132,351,225),11813=>array(61,-132,334,225),11822=>array(62,0,464,742),19904=>array(75,-158,732,729),19905=>array(75,-158,732,729),19906=>array(75,-158,732,729),19907=>array(75,-158,732,729),19908=>array(75,-158,732,729),19909=>array(75,-158,732,729),19910=>array(75,-158,732,729),19911=>array(75,-158,732,729),19912=>array(75,-158,732,729),19913=>array(75,-158,733,729),19914=>array(75,-158,732,729),19915=>array(75,-158,732,729),19916=>array(75,-158,732,729),19917=>array(75,-158,732,729),19918=>array(75,-158,732,729),19919=>array(75,-158,732,729),19920=>array(75,-158,733,729),19921=>array(75,-158,732,729),19922=>array(75,-158,733,729),19923=>array(75,-158,732,729),19924=>array(75,-158,732,729),19925=>array(75,-158,732,729),19926=>array(75,-158,732,729),19927=>array(75,-158,732,729),19928=>array(75,-158,732,729),19929=>array(75,-158,732,729),19930=>array(75,-158,732,729),19931=>array(75,-158,733,729),19932=>array(75,-158,732,729),19933=>array(75,-158,732,729),19934=>array(75,-158,733,729),19935=>array(75,-158,732,729),19936=>array(75,-158,732,729),19937=>array(75,-158,732,729),19938=>array(75,-158,732,729),19939=>array(75,-158,732,729),19940=>array(75,-158,732,729),19941=>array(75,-158,733,729),19942=>array(75,-158,732,729),19943=>array(75,-158,732,729),19944=>array(75,-158,733,729),19945=>array(75,-158,732,729),19946=>array(75,-158,733,729),19947=>array(75,-158,732,729),19948=>array(75,-158,733,729),19949=>array(75,-158,732,729),19950=>array(75,-158,733,729),19951=>array(75,-158,732,729),19952=>array(75,-158,733,729),19953=>array(75,-158,732,729),19954=>array(75,-158,732,729),19955=>array(75,-158,732,729),19956=>array(75,-158,732,729),19957=>array(75,-158,733,729),19958=>array(75,-158,732,729),19959=>array(75,-158,732,729),19960=>array(75,-158,732,729),19961=>array(75,-158,733,729),19962=>array(75,-158,732,729),19963=>array(75,-158,733,729),19964=>array(75,-158,733,729),19965=>array(75,-158,732,729),19966=>array(75,-158,732,729),19967=>array(75,-158,732,729),42192=>array(83,0,623,729),42193=>array(83,0,623,729),42194=>array(37,0,577,729),42195=>array(83,0,700,729),42196=>array(4,0,609,729),42197=>array(4,0,610,729),42198=>array(44,-14,672,742),42199=>array(83,0,725,729),42200=>array(-27,0,615,729),42201=>array(0,-14,396,729),42202=>array(44,-14,603,742),42203=>array(44,-14,603,742),42204=>array(40,0,612,729),42205=>array(83,0,540,729),42206=>array(83,0,540,729),42207=>array(83,0,813,729),42208=>array(83,0,671,729),42209=>array(83,0,549,729),42210=>array(64,-14,583,742),42211=>array(83,0,675,729),42212=>array(18,0,611,729),42213=>array(4,0,692,729),42214=>array(4,0,692,729),42215=>array(83,0,671,729),42216=>array(22,-14,650,742),42217=>array(82,0,477,743),42218=>array(26,0,965,729),42219=>array(17,0,676,729),42220=>array(-9,0,661,729),42221=>array(63,0,604,729),42222=>array(4,0,692,729),42223=>array(4,0,692,729),42224=>array(83,0,549,729),42225=>array(66,0,532,729),42226=>array(83,0,252,729),42227=>array(44,-14,720,742),42228=>array(83,-14,648,729),42229=>array(83,0,648,743),42230=>array(8,0,475,729),42231=>array(47,0,665,729),42232=>array(66,0,224,189),42233=>array(22,-142,224,189),42234=>array(66,0,541,189),42235=>array(66,-142,541,189),42236=>array(21,-142,224,547),42237=>array(65,0,224,547),42238=>array(66,0,463,405),42239=>array(66,134,463,492),42564=>array(23,-14,541,742),42565=>array(13,-14,460,560),42566=>array(83,0,385,729),42567=>array(75,0,321,547),42572=>array(51,-14,1213,654),42573=>array(42,-13,1014,547),42576=>array(44,0,1028,729),42577=>array(18,0,852,547),42580=>array(49,-14,974,742),42581=>array(40,-14,800,560),42582=>array(83,0,979,729),42583=>array(75,-14,792,560),42594=>array(54,-157,952,729),42595=>array(50,-138,811,547),42596=>array(41,0,962,729),42597=>array(49,0,800,547),42598=>array(83,0,1110,729),42599=>array(75,0,876,547),42600=>array(44,-14,720,742),42601=>array(39,-14,580,560),42602=>array(44,-14,889,742),42603=>array(39,-14,743,560),42604=>array(44,-14,1221,742),42605=>array(39,-14,957,560),42606=>array(25,-208,839,743),42634=>array(4,-200,795,729),42635=>array(3,-216,638,547),42636=>array(4,0,609,729),42637=>array(3,0,518,547),42644=>array(72,0,645,729),42645=>array(75,0,571,760),42760=>array(86,0,364,693),42761=>array(86,0,364,693),42762=>array(86,0,364,693),42763=>array(86,0,364,693),42764=>array(86,0,364,693),42765=>array(86,0,364,693),42766=>array(86,0,364,693),42767=>array(86,0,364,693),42768=>array(86,0,364,693),42769=>array(86,0,364,693),42770=>array(86,0,364,693),42771=>array(86,0,364,693),42772=>array(86,0,364,693),42773=>array(86,0,364,693),42774=>array(86,0,364,693),42779=>array(52,326,308,736),42780=>array(52,324,308,734),42781=>array(79,326,180,734),42782=>array(79,326,180,734),42783=>array(79,0,180,408),42786=>array(60,0,368,729),42787=>array(60,0,320,547),42788=>array(50,224,432,742),42789=>array(50,42,432,560),42790=>array(83,-200,671,729),42791=>array(75,-216,571,760),42792=>array(4,-216,888,729),42793=>array(12,-215,729,702),42794=>array(60,-14,555,742),42795=>array(48,-202,444,560),42800=>array(83,0,426,547),42801=>array(46,-14,493,560),42802=>array(4,0,1210,729),42803=>array(39,-14,876,560),42804=>array(4,-14,1111,742),42805=>array(39,-14,919,560),42806=>array(4,-14,1012,729),42807=>array(39,-14,874,560),42808=>array(4,0,967,729),42809=>array(39,-14,817,560),42810=>array(4,0,967,729),42811=>array(39,-14,817,560),42812=>array(4,-216,927,729),42813=>array(39,-216,816,560),42814=>array(30,-14,588,742),42815=>array(39,-14,474,560),42816=>array(4,0,730,729),42817=>array(5,0,637,760),42822=>array(83,0,740,729),42823=>array(75,0,413,760),42824=>array(36,0,590,729),42825=>array(53,0,426,760),42826=>array(14,-14,812,742),42827=>array(4,-14,729,560),42830=>array(44,-14,1221,742),42831=>array(39,-14,957,560),42832=>array(14,0,623,729),42833=>array(4,-208,604,560),42834=>array(31,0,817,729),42835=>array(31,-208,803,560),42838=>array(44,-188,720,742),42839=>array(40,-208,640,559),42852=>array(14,0,623,729),42853=>array(4,-208,604,760),42854=>array(14,0,623,729),42855=>array(4,-208,604,760),42880=>array(24,0,491,729),42881=>array(75,-208,233,547),42882=>array(75,-208,658,742),42883=>array(75,-208,571,560),42889=>array(101,0,259,547),42890=>array(75,141,272,405),42891=>array(126,245,285,729),42892=>array(85,458,190,729),42893=>array(72,0,645,729),42894=>array(75,-216,612,760),42896=>array(83,-157,781,729),42897=>array(75,-138,652,560),42912=>array(-10,-14,749,742),42913=>array(-10,-216,654,559),42914=>array(-10,0,725,729),42915=>array(-10,0,616,760),42916=>array(-10,0,763,729),42917=>array(-10,0,651,560),42918=>array(-10,0,703,729),42919=>array(-10,0,454,560),42920=>array(-10,-14,658,742),42921=>array(-10,-14,545,560),42922=>array(-62,0,715,729),43002=>array(75,0,875,547),43003=>array(75,0,532,729),43004=>array(37,0,577,729),43005=>array(83,0,813,729),43006=>array(83,0,252,928),43007=>array(28,0,1165,729),61184=>array(82,602,286,693),61185=>array(43,451,305,693),61186=>array(23,301,327,693),61187=>array(15,150,336,693),61188=>array(11,0,341,693),61189=>array(43,451,305,693),61190=>array(82,451,286,543),61191=>array(43,301,305,543),61192=>array(23,150,327,543),61193=>array(15,0,336,543),61194=>array(23,301,327,693),61195=>array(43,301,305,543),61196=>array(82,301,286,393),61197=>array(43,150,305,393),61198=>array(23,0,327,393),61199=>array(15,150,336,693),61200=>array(23,149,327,542),61201=>array(43,150,305,393),61202=>array(82,150,286,242),61203=>array(43,0,305,242),61204=>array(11,0,341,693),61205=>array(15,0,336,543),61206=>array(23,0,327,393),61207=>array(43,0,305,242),61208=>array(82,0,286,92),61209=>array(86,0,169,693),62464=>array(44,-14,507,819),62465=>array(44,-15,507,823),62466=>array(44,-14,544,828),62467=>array(44,0,768,828),62468=>array(44,-15,507,828),62469=>array(44,-15,507,828),62470=>array(26,-15,551,828),62471=>array(44,-14,761,828),62472=>array(44,0,487,828),62473=>array(44,-14,507,820),62474=>array(44,-6,1002,828),62475=>array(44,-14,506,828),62476=>array(57,-15,521,820),62477=>array(48,0,755,828),62478=>array(44,-15,507,819),62479=>array(44,-15,507,840),62480=>array(44,0,788,828),62481=>array(57,-14,521,819),62482=>array(40,-14,629,828),62483=>array(31,-14,513,828),62484=>array(44,-14,753,828),62485=>array(44,-14,507,819),62486=>array(44,0,772,828),62487=>array(44,-14,506,820),62488=>array(40,-14,502,828),62489=>array(58,0,521,828),62490=>array(44,-15,566,820),62491=>array(44,-14,506,819),62492=>array(57,-14,520,828),62493=>array(44,-14,523,820),62494=>array(57,-14,521,819),62495=>array(22,-14,492,828),62496=>array(44,-15,507,828),62497=>array(57,-15,520,828),62498=>array(44,-73,507,828),62499=>array(44,-15,506,830),62500=>array(44,-15,513,828),62501=>array(44,-14,565,828),62502=>array(44,-14,823,828),62504=>array(40,-228,864,816),62505=>array(48,-223,712,843),62506=>array(48,-14,459,761),62507=>array(48,-14,459,773),62508=>array(48,-14,459,866),62509=>array(48,-14,459,812),62510=>array(48,-14,459,877),62511=>array(48,-14,459,803),62512=>array(48,-232,451,761),62513=>array(48,-232,451,793),62514=>array(48,-232,451,891),62515=>array(48,-232,451,803),62516=>array(48,0,468,761),62517=>array(48,0,468,793),62518=>array(48,0,468,803),62519=>array(48,-0,693,761),62520=>array(48,-0,693,773),62521=>array(48,-0,693,884),62522=>array(48,-0,693,793),62523=>array(48,-0,693,803),62524=>array(48,-232,501,761),62525=>array(48,-232,501,773),62526=>array(48,-232,501,894),62527=>array(48,-232,501,793),62528=>array(48,-232,501,803),62529=>array(48,-232,501,844),63173=>array(39,-14,580,760),64256=>array(17,0,737,760),64257=>array(19,0,592,760),64258=>array(17,0,592,760),64259=>array(17,0,928,760),64260=>array(17,0,929,760),64261=>array(17,0,707,760),64262=>array(46,-14,897,742),64275=>array(66,-14,1170,760),64276=>array(70,-14,1171,760),64277=>array(70,-208,1170,760),64278=>array(70,-208,1170,760),64279=>array(70,-208,1466,760),64285=>array(60,32,206,547),64286=>array(164,635,459,780),64287=>array(60,32,450,547),64288=>array(34,0,532,547),64289=>array(76,0,770,547),64290=>array(39,0,659,547),64291=>array(82,0,701,547),64292=>array(39,0,658,547),64293=>array(39,0,658,739),64294=>array(82,0,701,547),64295=>array(39,0,658,547),64296=>array(42,-4,658,547),64297=>array(95,256,659,627),64298=>array(18,0,675,710),64299=>array(18,0,675,723),64300=>array(18,0,675,710),64301=>array(18,0,675,710),64302=>array(75,-171,580,547),64303=>array(75,-217,580,547),64304=>array(75,-171,580,547),64305=>array(39,0,510,547),64306=>array(39,-9,376,547),64307=>array(39,0,491,547),64308=>array(82,0,537,547),64309=>array(39,0,312,547),64310=>array(39,0,398,547),64312=>array(81,-13,562,553),64313=>array(39,164,332,547),64314=>array(39,-240,438,547),64315=>array(39,0,460,547),64316=>array(39,0,475,711),64318=>array(39,0,570,554),64320=>array(39,0,326,547),64321=>array(81,-13,562,547),64323=>array(82,-240,526,547),64324=>array(82,0,542,547),64326=>array(29,0,508,547),64327=>array(82,-240,594,546),64328=>array(39,0,460,547),64329=>array(18,0,675,547),64330=>array(9,-4,533,547),64331=>array(82,0,228,710),64332=>array(39,0,510,710),64333=>array(39,0,460,710),64334=>array(82,0,542,710),64335=>array(39,0,587,729),64338=>array(57,-244,829,327),64339=>array(57,-244,962,327),64340=>array(-9,-244,263,293),64341=>array(-9,-244,376,293),64342=>array(57,-244,829,327),64343=>array(57,-244,962,327),64344=>array(-9,-244,272,293),64345=>array(-9,-244,376,293),64346=>array(57,-244,829,327),64347=>array(57,-244,962,327),64348=>array(-9,-244,272,293),64349=>array(-9,-244,376,293),64350=>array(57,-5,829,566),64351=>array(57,-5,962,566),64352=>array(-9,0,263,640),64353=>array(-9,0,376,640),64354=>array(57,-5,829,566),64355=>array(57,-5,962,566),64356=>array(-9,0,272,640),64357=>array(-9,0,376,640),64358=>array(57,-5,829,599),64359=>array(57,-5,962,599),64360=>array(-9,0,300,672),64361=>array(-9,0,376,672),64362=>array(57,-24,974,786),64363=>array(57,-29,1081,786),64364=>array(-9,0,518,786),64365=>array(-9,0,657,786),64366=>array(57,-24,974,786),64367=>array(57,-29,1081,786),64368=>array(-9,0,518,786),64369=>array(-9,0,657,786),64370=>array(69,-244,648,425),64371=>array(69,-244,658,425),64372=>array(-9,-244,566,405),64373=>array(-9,-244,658,405),64374=>array(69,-244,648,425),64375=>array(69,-244,658,425),64376=>array(-9,-117,566,405),64377=>array(-9,-117,658,405),64378=>array(69,-244,648,425),64379=>array(69,-244,658,425),64380=>array(-9,-244,566,405),64381=>array(-9,-244,658,405),64382=>array(69,-244,648,425),64383=>array(69,-244,658,425),64384=>array(-9,-244,566,405),64385=>array(-9,-244,658,405),64386=>array(55,-146,398,415),64387=>array(55,-146,529,415),64388=>array(55,-15,398,586),64389=>array(55,-15,529,586),64390=>array(55,-15,398,708),64391=>array(55,-15,529,708),64392=>array(55,-15,398,746),64393=>array(55,-15,529,746),64394=>array(-38,-244,458,615),64395=>array(-38,-244,569,615),64396=>array(-38,-244,468,648),64397=>array(-38,-244,569,648),64398=>array(57,-39,922,760),64399=>array(57,-39,931,760),64400=>array(-9,0,523,760),64401=>array(-9,0,532,760),64402=>array(57,-39,922,910),64403=>array(57,-39,931,910),64404=>array(-9,0,523,910),64405=>array(-9,0,532,910),64406=>array(57,-293,922,910),64407=>array(57,-293,931,910),64408=>array(-9,-269,523,910),64409=>array(-9,-269,532,910),64410=>array(57,-39,922,910),64411=>array(57,-39,931,910),64412=>array(-9,0,523,910),64413=>array(-9,0,532,910),64414=>array(55,-165,702,366),64415=>array(55,-244,819,287),64416=>array(55,-165,702,636),64417=>array(55,-244,819,514),64418=>array(-9,0,300,672),64419=>array(-9,0,376,672),64426=>array(63,-33,790,506),64427=>array(63,-244,801,369),64428=>array(-9,-33,570,506),64429=>array(-9,-244,603,369),64467=>array(63,-27,733,854),64468=>array(63,-27,847,854),64469=>array(-9,0,523,928),64470=>array(-9,0,532,928),64473=>array(-38,-244,492,556),64474=>array(-38,-244,573,556),64488=>array(-9,0,263,293),64489=>array(-9,0,376,293),64508=>array(57,-107,777,462),64509=>array(57,-126,919,291),64510=>array(-9,-166,272,293),64511=>array(-9,-166,376,293),65056=>array(-377,735,0,880),65057=>array(0,735,377,880),65058=>array(-326,756,0,894),65059=>array(0,756,326,894),65136=>array(25,591,282,825),65137=>array(-9,0,316,825),65138=>array(25,591,282,881),65139=>array(46,0,321,177),65140=>array(25,-239,282,-5),65142=>array(25,591,282,723),65143=>array(-9,0,316,723),65144=>array(25,590,282,881),65145=>array(-9,0,316,881),65146=>array(25,-137,282,-5),65147=>array(-9,-137,316,125),65148=>array(8,599,299,869),65149=>array(-9,0,316,869),65150=>array(32,610,273,878),65151=>array(-9,0,316,878),65152=>array(65,20,394,493),65153=>array(-18,0,326,955),65154=>array(-18,0,347,955),65155=>array(68,0,233,993),65156=>array(68,0,347,993),65157=>array(-38,-244,492,603),65158=>array(-38,-244,573,603),65159=>array(68,-245,233,760),65160=>array(68,-245,347,760),65161=>array(57,-107,777,603),65162=>array(57,-126,919,480),65163=>array(-9,0,263,627),65164=>array(-9,0,376,627),65165=>array(75,0,233,760),65166=>array(75,0,347,760),65167=>array(57,-149,829,327),65168=>array(57,-149,962,327),65169=>array(-9,-173,263,293),65170=>array(-9,-173,376,293),65171=>array(43,-30,486,513),65172=>array(58,0,555,513),65173=>array(57,-5,829,415),65174=>array(57,-5,962,415),65175=>array(-9,0,272,488),65176=>array(-9,0,376,488),65177=>array(57,-5,829,537),65178=>array(57,-5,962,537),65179=>array(-9,0,272,610),65180=>array(-9,0,376,610),65181=>array(69,-244,648,425),65182=>array(69,-244,658,425),65183=>array(-9,-173,566,405),65184=>array(-9,-173,658,405),65185=>array(69,-244,648,425),65186=>array(69,-244,658,425),65187=>array(-9,0,566,405),65188=>array(-9,0,658,405),65189=>array(69,-244,648,579),65190=>array(69,-244,658,579),65191=>array(-9,0,566,530),65192=>array(-9,0,658,530),65193=>array(55,-15,398,415),65194=>array(55,-15,529,415),65195=>array(55,-15,398,579),65196=>array(55,-15,529,579),65197=>array(-38,-244,458,269),65198=>array(-38,-244,569,269),65199=>array(-38,-244,458,457),65200=>array(-38,-244,569,457),65201=>array(57,-244,1167,366),65202=>array(57,-244,1281,366),65203=>array(-9,-14,811,366),65204=>array(-9,-14,925,366),65205=>array(57,-244,1167,586),65206=>array(57,-244,1281,586),65207=>array(-9,-14,811,586),65208=>array(-9,-14,925,586),65209=>array(57,-244,1138,362),65210=>array(57,-244,1237,362),65211=>array(-9,0,797,362),65212=>array(-9,0,896,362),65213=>array(57,-244,1138,457),65214=>array(57,-244,1237,457),65215=>array(-9,0,797,481),65216=>array(-9,0,896,481),65217=>array(63,0,875,760),65218=>array(63,0,973,760),65219=>array(-9,0,787,760),65220=>array(-9,0,886,760),65221=>array(63,0,875,760),65222=>array(63,0,973,760),65223=>array(-9,0,787,760),65224=>array(-9,0,886,760),65225=>array(79,-244,648,521),65226=>array(51,-244,624,382),65227=>array(-9,0,524,521),65228=>array(-9,0,517,382),65229=>array(79,-244,648,652),65230=>array(51,-244,624,530),65231=>array(-9,0,524,652),65232=>array(-9,0,517,530),65233=>array(57,-24,974,627),65234=>array(57,-29,1081,627),65235=>array(-9,0,518,627),65236=>array(-9,0,657,627),65237=>array(47,-215,743,635),65238=>array(47,-244,820,476),65239=>array(-9,0,518,635),65240=>array(-9,0,657,635),65241=>array(63,-27,733,760),65242=>array(63,-27,847,760),65243=>array(-9,0,523,760),65244=>array(-9,0,532,760),65245=>array(63,-142,700,760),65246=>array(63,-142,813,760),65247=>array(-9,0,263,760),65248=>array(-9,0,376,760),65249=>array(62,-244,594,369),65250=>array(62,-244,715,311),65251=>array(-9,-23,491,311),65252=>array(-9,-23,612,311),65253=>array(55,-165,702,457),65254=>array(55,-244,819,383),65255=>array(-9,0,263,481),65256=>array(-9,0,376,481),65257=>array(43,-30,486,358),65258=>array(58,0,555,366),65259=>array(-9,-33,570,506),65260=>array(-9,-244,603,369),65261=>array(-38,-244,492,322),65262=>array(-38,-244,573,322),65263=>array(57,-107,777,462),65264=>array(57,-126,919,291),65265=>array(57,-244,777,462),65266=>array(57,-244,919,291),65267=>array(-9,-166,272,293),65268=>array(-9,-166,376,293),65269=>array(-56,-15,579,882),65270=>array(-56,-15,692,882),65271=>array(30,-15,579,944),65272=>array(30,-15,692,944),65273=>array(37,-245,579,760),65274=>array(37,-245,692,760),65275=>array(37,-15,579,760),65276=>array(37,-15,692,760),65533=>array(22,-139,980,926),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>313,33=>410,34=>469,35=>754,36=>626,37=>901,38=>785,39=>275,40=>411,41=>411,42=>470,43=>754,44=>342,45=>374,46=>342,47=>329,48=>626,49=>626,50=>626,51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>360,59=>360,60=>754,61=>754,62=>754,63=>522,64=>900,65=>696,66=>686,67=>660,68=>747,69=>615,70=>615,71=>738,72=>753,73=>334,74=>334,75=>697,76=>573,77=>896,78=>753,79=>765,80=>659,81=>765,82=>693,83=>648,84=>614,85=>730,86=>696,87=>993,88=>694,89=>651,90=>652,91=>411,92=>329,93=>411,94=>754,95=>450,96=>450,97=>607,98=>644,99=>533,100=>644,101=>610,102=>391,103=>644,104=>641,105=>308,106=>308,107=>598,108=>308,109=>938,110=>641,111=>618,112=>644,113=>644,114=>444,115=>536,116=>430,117=>641,118=>586,119=>831,120=>580,121=>586,122=>523,123=>641,124=>329,125=>641,126=>754,160=>313,161=>410,162=>626,163=>626,164=>572,165=>626,166=>329,167=>450,168=>450,169=>900,170=>507,171=>581,172=>754,173=>374,174=>900,175=>450,176=>450,177=>754,178=>394,179=>394,180=>450,181=>662,182=>572,183=>342,184=>450,185=>394,186=>507,187=>581,188=>932,189=>932,190=>932,191=>522,192=>696,193=>696,194=>696,195=>696,196=>696,197=>696,198=>976,199=>660,200=>615,201=>615,202=>615,203=>615,204=>334,205=>334,206=>334,207=>334,208=>754,209=>753,210=>765,211=>765,212=>765,213=>765,214=>765,215=>754,216=>765,217=>730,218=>730,219=>730,220=>730,221=>651,222=>664,223=>647,224=>607,225=>607,226=>607,227=>607,228=>607,229=>607,230=>943,231=>533,232=>610,233=>610,234=>610,235=>610,236=>308,237=>308,238=>308,239=>308,240=>618,241=>641,242=>618,243=>618,244=>618,245=>618,246=>618,247=>754,248=>618,249=>641,250=>641,251=>641,252=>641,253=>586,254=>644,255=>586,256=>696,257=>607,258=>696,259=>607,260=>696,261=>607,262=>660,263=>533,264=>660,265=>533,266=>660,267=>533,268=>660,269=>533,270=>747,271=>644,272=>754,273=>644,274=>615,275=>610,276=>615,277=>610,278=>615,279=>610,280=>615,281=>610,282=>615,283=>610,284=>738,285=>644,286=>738,287=>644,288=>738,289=>644,290=>738,291=>644,292=>753,293=>641,294=>876,295=>711,296=>334,297=>308,298=>334,299=>308,300=>334,301=>308,302=>334,303=>308,304=>334,305=>308,306=>669,307=>617,308=>334,309=>308,310=>697,311=>598,312=>598,313=>573,314=>308,315=>573,316=>308,317=>573,318=>431,319=>573,320=>501,321=>578,322=>334,323=>753,324=>641,325=>753,326=>641,327=>753,328=>641,329=>884,330=>753,331=>641,332=>765,333=>618,334=>765,335=>618,336=>765,337=>618,338=>1050,339=>984,340=>693,341=>444,342=>693,343=>444,344=>693,345=>444,346=>648,347=>536,348=>648,349=>536,350=>648,351=>536,352=>648,353=>536,354=>614,355=>430,356=>614,357=>430,358=>614,359=>430,360=>730,361=>641,362=>730,363=>641,364=>730,365=>641,366=>730,367=>641,368=>730,369=>641,370=>730,371=>641,372=>993,373=>831,374=>651,375=>586,376=>651,377=>652,378=>523,379=>652,380=>523,381=>652,382=>523,383=>391,384=>644,385=>729,386=>686,387=>644,388=>686,389=>644,390=>660,391=>660,392=>533,393=>754,394=>791,395=>681,396=>644,397=>619,398=>615,399=>764,400=>626,401=>615,402=>391,403=>738,404=>713,405=>940,406=>392,407=>350,408=>697,409=>598,410=>324,411=>532,412=>938,413=>753,414=>641,415=>765,416=>786,417=>618,418=>974,419=>821,420=>703,421=>644,422=>693,423=>648,424=>536,425=>615,426=>497,427=>430,428=>636,429=>430,430=>614,431=>751,432=>641,433=>765,434=>732,435=>717,436=>700,437=>652,438=>523,439=>695,440=>695,441=>576,442=>523,443=>626,444=>695,445=>576,446=>515,447=>644,448=>334,449=>593,450=>489,451=>334,452=>1399,453=>1271,454=>1168,455=>908,456=>882,457=>617,458=>1088,459=>1062,460=>949,461=>696,462=>607,463=>334,464=>308,465=>765,466=>618,467=>730,468=>641,469=>730,470=>641,471=>730,472=>641,473=>730,474=>641,475=>730,476=>641,477=>610,478=>696,479=>607,480=>696,481=>607,482=>976,483=>943,484=>738,485=>644,486=>738,487=>644,488=>697,489=>598,490=>765,491=>618,492=>765,493=>618,494=>695,495=>523,496=>308,497=>1399,498=>1271,499=>1168,500=>738,501=>644,502=>1160,503=>708,504=>753,505=>641,506=>696,507=>607,508=>976,509=>943,510=>765,511=>618,512=>696,513=>607,514=>696,515=>607,516=>615,517=>610,518=>615,519=>610,520=>334,521=>308,522=>334,523=>308,524=>765,525=>618,526=>765,527=>618,528=>693,529=>444,530=>693,531=>444,532=>730,533=>641,534=>730,535=>641,536=>648,537=>536,538=>614,539=>430,540=>621,541=>546,542=>753,543=>641,544=>753,545=>778,546=>728,547=>593,548=>652,549=>523,550=>696,551=>607,552=>615,553=>610,554=>765,555=>618,556=>765,557=>618,558=>765,559=>618,560=>765,561=>618,562=>651,563=>586,564=>442,565=>780,566=>460,567=>308,568=>979,569=>979,570=>696,571=>660,572=>533,573=>573,574=>614,575=>536,576=>523,577=>703,578=>553,579=>686,580=>730,581=>696,582=>615,583=>610,584=>334,585=>308,586=>774,587=>712,588=>693,589=>444,590=>651,591=>586,592=>607,593=>644,594=>644,595=>644,596=>533,597=>533,598=>645,599=>712,600=>610,601=>610,602=>788,603=>501,604=>490,605=>733,606=>658,607=>308,608=>712,609=>644,610=>564,611=>579,612=>571,613=>641,614=>641,615=>641,616=>491,617=>396,618=>491,619=>502,620=>624,621=>308,622=>757,623=>938,624=>938,625=>938,626=>641,627=>713,628=>636,629=>618,630=>817,631=>613,632=>716,633=>484,634=>484,635=>584,636=>444,637=>444,638=>536,639=>536,640=>578,641=>578,642=>536,643=>374,644=>391,645=>544,646=>497,647=>430,648=>430,649=>828,650=>695,651=>603,652=>586,653=>831,654=>586,655=>651,656=>624,657=>615,658=>576,659=>576,660=>515,661=>515,662=>515,663=>515,664=>765,665=>569,666=>658,667=>616,668=>622,669=>308,670=>659,671=>485,672=>712,673=>515,674=>515,675=>1040,676=>1093,677=>1039,678=>877,679=>691,680=>836,681=>923,682=>776,683=>702,684=>532,685=>374,686=>609,687=>710,688=>410,689=>410,690=>197,691=>284,692=>284,693=>284,694=>369,695=>532,696=>375,697=>271,698=>469,699=>342,700=>342,701=>342,702=>330,703=>330,704=>293,705=>293,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>275,713=>450,714=>450,715=>450,716=>275,717=>450,718=>450,719=>450,720=>303,721=>303,722=>330,723=>330,724=>450,725=>450,726=>374,727=>295,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>315,735=>450,736=>370,737=>197,738=>343,739=>371,740=>293,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450,749=>450,750=>591,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>628,881=>508,882=>919,883=>752,884=>271,885=>271,886=>753,887=>630,890=>450,891=>533,892=>495,893=>494,894=>360,900=>397,901=>450,902=>717,903=>342,904=>761,905=>908,906=>507,908=>801,910=>882,911=>804,912=>351,913=>696,914=>686,915=>573,916=>696,917=>615,918=>652,919=>753,920=>765,921=>334,922=>697,923=>696,924=>896,925=>753,926=>568,927=>765,928=>753,929=>659,931=>615,932=>614,933=>651,934=>765,935=>694,936=>765,937=>765,938=>334,939=>651,940=>618,941=>501,942=>641,943=>351,944=>607,945=>618,946=>644,947=>613,948=>618,949=>501,950=>532,951=>641,952=>618,953=>351,954=>639,955=>569,956=>662,957=>613,958=>532,959=>618,960=>712,961=>644,962=>533,963=>701,964=>574,965=>607,966=>704,967=>580,968=>714,969=>782,970=>351,971=>607,972=>618,973=>607,974=>782,975=>697,976=>585,977=>594,978=>671,979=>883,980=>671,981=>716,982=>782,983=>669,984=>765,985=>618,986=>660,987=>533,988=>615,989=>444,990=>632,991=>593,992=>827,993=>564,994=>983,995=>753,996=>749,997=>644,998=>835,999=>669,1000=>660,1001=>585,1002=>709,1003=>604,1004=>677,1005=>644,1006=>614,1007=>531,1008=>669,1009=>644,1010=>533,1011=>308,1012=>765,1013=>580,1014=>580,1015=>664,1016=>644,1017=>660,1018=>896,1019=>659,1020=>644,1021=>628,1022=>660,1023=>628,1024=>615,1025=>615,1026=>791,1027=>573,1028=>660,1029=>648,1030=>334,1031=>334,1032=>334,1033=>1039,1034=>1017,1035=>791,1036=>735,1037=>753,1038=>694,1039=>753,1040=>696,1041=>686,1042=>686,1043=>573,1044=>801,1045=>615,1046=>1102,1047=>639,1048=>753,1049=>753,1050=>735,1051=>747,1052=>896,1053=>753,1054=>765,1055=>753,1056=>659,1057=>660,1058=>614,1059=>694,1060=>892,1061=>694,1062=>835,1063=>727,1064=>1112,1065=>1193,1066=>845,1067=>932,1068=>686,1069=>660,1070=>1056,1071=>693,1072=>607,1073=>628,1074=>569,1075=>470,1076=>727,1077=>610,1078=>896,1079=>523,1080=>630,1081=>630,1082=>611,1083=>659,1084=>735,1085=>622,1086=>618,1087=>622,1088=>644,1089=>533,1090=>521,1091=>586,1092=>893,1093=>580,1094=>667,1095=>618,1096=>956,1097=>995,1098=>676,1099=>813,1100=>569,1101=>533,1102=>875,1103=>578,1104=>610,1105=>610,1106=>642,1107=>470,1108=>533,1109=>536,1110=>308,1111=>308,1112=>308,1113=>892,1114=>860,1115=>661,1116=>611,1117=>630,1118=>586,1119=>622,1120=>983,1121=>782,1122=>756,1123=>662,1124=>911,1125=>755,1126=>893,1127=>749,1128=>1222,1129=>1009,1130=>765,1131=>618,1132=>1112,1133=>906,1134=>626,1135=>501,1136=>967,1137=>955,1138=>765,1139=>618,1140=>765,1141=>625,1142=>765,1143=>625,1144=>1033,1145=>939,1146=>967,1147=>776,1148=>1265,1149=>1055,1150=>983,1151=>782,1152=>660,1153=>533,1154=>587,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>861,1163=>726,1164=>686,1165=>550,1166=>659,1167=>644,1168=>573,1169=>470,1170=>599,1171=>488,1172=>727,1173=>602,1174=>1102,1175=>896,1176=>639,1177=>523,1178=>697,1179=>611,1180=>735,1181=>611,1182=>735,1183=>611,1184=>914,1185=>743,1186=>860,1187=>727,1188=>992,1189=>787,1190=>1146,1191=>915,1192=>856,1193=>772,1194=>660,1195=>533,1196=>614,1197=>521,1198=>651,1199=>586,1200=>651,1201=>586,1202=>694,1203=>580,1204=>1001,1205=>900,1206=>727,1207=>618,1208=>727,1209=>618,1210=>727,1211=>641,1212=>923,1213=>729,1214=>923,1215=>729,1216=>334,1217=>1102,1218=>896,1219=>697,1220=>567,1221=>855,1222=>725,1223=>753,1224=>622,1225=>861,1226=>726,1227=>727,1228=>618,1229=>1003,1230=>839,1231=>308,1232=>696,1233=>607,1234=>696,1235=>607,1236=>976,1237=>943,1238=>615,1239=>610,1240=>764,1241=>610,1242=>764,1243=>610,1244=>1102,1245=>896,1246=>639,1247=>523,1248=>695,1249=>576,1250=>753,1251=>630,1252=>753,1253=>630,1254=>765,1255=>618,1256=>765,1257=>618,1258=>765,1259=>618,1260=>660,1261=>533,1262=>694,1263=>586,1264=>694,1265=>586,1266=>694,1267=>586,1268=>727,1269=>618,1270=>573,1271=>470,1272=>932,1273=>813,1274=>599,1275=>488,1276=>694,1277=>580,1278=>694,1279=>580,1280=>686,1281=>547,1282=>1043,1283=>804,1284=>1007,1285=>828,1286=>745,1287=>624,1288=>1117,1289=>915,1290=>1160,1291=>912,1292=>755,1293=>574,1294=>844,1295=>722,1296=>626,1297=>501,1298=>747,1299=>659,1300=>1157,1301=>961,1302=>958,1303=>881,1304=>973,1305=>912,1306=>765,1307=>644,1308=>993,1309=>831,1310=>735,1311=>611,1312=>1140,1313=>953,1314=>1146,1315=>915,1316=>861,1317=>726,1329=>732,1330=>656,1331=>655,1332=>658,1333=>656,1334=>660,1335=>586,1336=>648,1337=>813,1338=>655,1339=>599,1340=>501,1341=>865,1342=>708,1343=>642,1344=>585,1345=>657,1346=>643,1347=>633,1348=>702,1349=>620,1350=>643,1351=>637,1352=>658,1353=>609,1354=>780,1355=>640,1356=>702,1357=>658,1358=>643,1359=>624,1360=>599,1361=>628,1362=>519,1363=>750,1364=>628,1365=>686,1366=>770,1369=>296,1370=>308,1371=>277,1372=>336,1373=>282,1374=>415,1375=>421,1377=>844,1378=>577,1379=>633,1380=>637,1381=>577,1382=>579,1383=>508,1384=>577,1385=>680,1386=>633,1387=>578,1388=>278,1389=>886,1390=>574,1391=>578,1392=>578,1393=>542,1394=>578,1395=>577,1396=>578,1397=>277,1398=>578,1399=>438,1400=>578,1401=>330,1402=>844,1403=>515,1404=>599,1405=>578,1406=>578,1407=>840,1408=>578,1409=>579,1410=>431,1411=>840,1412=>583,1413=>558,1414=>732,1415=>730,1417=>324,1418=>336,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>374,1471=>0,1472=>334,1473=>0,1474=>0,1475=>334,1478=>447,1479=>0,1488=>655,1489=>549,1490=>402,1491=>529,1492=>618,1493=>309,1494=>360,1495=>618,1496=>611,1497=>265,1498=>520,1499=>510,1500=>544,1501=>626,1502=>651,1503=>309,1504=>408,1505=>611,1506=>599,1507=>607,1508=>592,1509=>595,1510=>587,1511=>663,1512=>542,1513=>682,1514=>615,1520=>598,1521=>510,1522=>467,1523=>399,1524=>639,1542=>600,1543=>600,1545=>795,1546=>1042,1548=>342,1557=>0,1563=>360,1567=>522,1569=>460,1570=>308,1571=>308,1572=>559,1573=>308,1574=>825,1575=>308,1576=>904,1577=>531,1578=>904,1579=>904,1580=>648,1581=>648,1582=>648,1583=>461,1584=>461,1585=>518,1586=>518,1587=>1242,1588=>1242,1589=>1210,1590=>1210,1591=>935,1592=>935,1593=>615,1594=>615,1600=>308,1601=>1045,1602=>804,1603=>825,1604=>781,1605=>659,1606=>768,1607=>531,1608=>559,1609=>825,1610=>825,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0,1626=>450,1632=>549,1633=>549,1634=>549,1635=>549,1636=>549,1637=>549,1638=>549,1639=>549,1640=>549,1641=>549,1642=>549,1643=>336,1644=>342,1645=>490,1646=>904,1647=>804,1648=>0,1652=>263,1657=>904,1658=>904,1659=>904,1660=>904,1661=>904,1662=>904,1663=>904,1664=>904,1665=>648,1666=>648,1667=>648,1668=>648,1669=>648,1670=>648,1671=>648,1672=>400,1673=>400,1674=>400,1675=>400,1676=>400,1677=>400,1678=>400,1679=>400,1680=>400,1681=>518,1682=>518,1683=>518,1684=>518,1685=>613,1686=>518,1687=>518,1688=>518,1689=>518,1690=>1242,1691=>1242,1692=>1242,1693=>1210,1694=>1210,1695=>935,1696=>615,1697=>1045,1698=>1045,1699=>1045,1700=>1045,1701=>1045,1702=>1045,1703=>804,1704=>804,1705=>921,1706=>1144,1707=>921,1708=>825,1709=>825,1710=>825,1711=>921,1712=>921,1713=>921,1714=>921,1715=>921,1716=>921,1717=>781,1718=>781,1719=>781,1720=>781,1721=>768,1722=>768,1723=>768,1724=>768,1725=>768,1726=>844,1727=>648,1734=>559,1740=>825,1742=>825,1749=>531,1776=>549,1777=>549,1778=>549,1779=>549,1780=>549,1781=>549,1782=>549,1783=>549,1784=>549,1785=>549,1984=>626,1985=>626,1986=>626,1987=>626,1988=>626,1989=>626,1990=>626,1991=>626,1992=>626,1993=>626,1994=>308,1995=>492,1996=>489,1997=>586,1998=>622,1999=>622,2000=>534,2001=>622,2002=>813,2003=>496,2004=>496,2005=>564,2006=>619,2007=>399,2008=>920,2009=>456,2010=>743,2011=>622,2012=>586,2013=>821,2014=>564,2015=>636,2016=>456,2017=>586,2018=>517,2019=>564,2020=>564,2021=>564,2022=>517,2023=>517,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>342,2037=>342,2040=>622,2041=>622,2042=>374,3647=>626,3713=>710,3714=>673,3716=>674,3719=>512,3720=>668,3722=>669,3725=>685,3732=>635,3733=>633,3734=>672,3735=>737,3737=>657,3738=>654,3739=>654,3740=>830,3741=>744,3742=>779,3743=>779,3745=>752,3746=>685,3747=>692,3749=>691,3751=>642,3754=>744,3755=>928,3757=>651,3758=>705,3759=>840,3760=>620,3761=>0,3762=>549,3763=>549,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>603,3776=>464,3777=>774,3778=>464,3779=>584,3780=>569,3782=>683,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>694,3793=>694,3794=>624,3795=>752,3796=>655,3797=>655,3798=>764,3799=>710,3800=>683,3801=>818,3804=>1227,3805=>1227,4256=>787,4257=>660,4258=>611,4259=>751,4260=>554,4261=>690,4262=>678,4263=>822,4264=>408,4265=>558,4266=>758,4267=>794,4268=>562,4269=>769,4270=>703,4271=>566,4272=>820,4273=>558,4274=>558,4275=>769,4276=>779,4277=>651,4278=>567,4279=>558,4280=>563,4281=>558,4282=>736,4283=>786,4284=>554,4285=>561,4286=>563,4287=>652,4288=>760,4289=>536,4290=>620,4291=>536,4292=>534,4293=>664,4304=>498,4305=>507,4306=>560,4307=>751,4308=>499,4309=>507,4310=>496,4311=>745,4312=>507,4313=>500,4314=>967,4315=>511,4316=>511,4317=>733,4318=>498,4319=>507,4320=>741,4321=>511,4322=>630,4323=>532,4324=>767,4325=>503,4326=>733,4327=>507,4328=>497,4329=>511,4330=>560,4331=>511,4332=>498,4333=>509,4334=>511,4335=>486,4336=>498,4337=>502,4338=>498,4339=>499,4340=>498,4341=>528,4342=>768,4343=>544,4344=>507,4345=>560,4346=>499,4347=>403,4348=>291,5121=>696,5122=>696,5123=>696,5124=>696,5125=>814,5126=>814,5127=>814,5129=>814,5130=>814,5131=>814,5132=>916,5133=>908,5134=>916,5135=>908,5136=>916,5137=>908,5138=>1034,5139=>1025,5140=>1034,5141=>1025,5142=>814,5143=>1034,5144=>1028,5145=>1034,5146=>1028,5147=>814,5149=>278,5150=>476,5151=>382,5152=>382,5153=>355,5154=>355,5155=>355,5156=>355,5157=>507,5158=>423,5159=>278,5160=>355,5161=>355,5162=>355,5163=>1092,5164=>888,5165=>1094,5166=>1167,5167=>696,5168=>696,5169=>696,5170=>696,5171=>797,5172=>797,5173=>797,5175=>797,5176=>797,5177=>797,5178=>916,5179=>908,5180=>916,5181=>908,5182=>916,5183=>908,5184=>1034,5185=>1025,5186=>1034,5187=>1025,5188=>1034,5189=>1028,5190=>1034,5191=>1028,5192=>797,5193=>518,5194=>206,5196=>730,5197=>730,5198=>730,5199=>730,5200=>734,5201=>734,5202=>734,5204=>734,5205=>734,5206=>734,5207=>950,5208=>943,5209=>950,5210=>943,5211=>950,5212=>943,5213=>954,5214=>949,5215=>954,5216=>949,5217=>954,5218=>946,5219=>954,5220=>946,5221=>954,5222=>435,5223=>904,5224=>904,5225=>921,5226=>915,5227=>668,5228=>668,5229=>668,5230=>668,5231=>668,5232=>668,5233=>668,5234=>668,5235=>668,5236=>926,5237=>877,5238=>882,5239=>877,5240=>882,5241=>877,5242=>926,5243=>877,5244=>926,5245=>877,5246=>882,5247=>877,5248=>882,5249=>877,5250=>882,5251=>451,5252=>451,5253=>844,5254=>844,5255=>844,5256=>844,5257=>668,5258=>668,5259=>668,5260=>668,5261=>668,5262=>668,5263=>668,5264=>668,5265=>668,5266=>926,5267=>877,5268=>926,5269=>877,5270=>926,5271=>877,5272=>926,5273=>877,5274=>926,5275=>877,5276=>926,5277=>877,5278=>926,5279=>877,5280=>926,5281=>451,5282=>451,5283=>563,5284=>563,5285=>563,5286=>563,5287=>563,5288=>563,5289=>563,5290=>563,5291=>563,5292=>793,5293=>769,5294=>777,5295=>786,5296=>777,5297=>786,5298=>793,5299=>786,5300=>793,5301=>786,5302=>777,5303=>786,5304=>777,5305=>786,5306=>777,5307=>392,5308=>493,5309=>392,5312=>889,5313=>889,5314=>889,5315=>889,5316=>838,5317=>838,5318=>838,5319=>838,5320=>838,5321=>1114,5322=>1122,5323=>1080,5324=>1105,5325=>1080,5326=>1105,5327=>838,5328=>593,5329=>447,5330=>593,5331=>889,5332=>889,5333=>889,5334=>889,5335=>838,5336=>838,5337=>838,5338=>838,5339=>838,5340=>1107,5341=>1122,5342=>1155,5343=>1105,5344=>1155,5345=>1105,5346=>1105,5347=>1093,5348=>1105,5349=>1093,5350=>1155,5351=>1105,5352=>1155,5353=>1105,5354=>593,5356=>797,5357=>657,5358=>657,5359=>657,5360=>657,5361=>657,5362=>657,5363=>657,5364=>657,5365=>657,5366=>897,5367=>862,5368=>870,5369=>890,5370=>870,5371=>890,5372=>897,5373=>862,5374=>897,5375=>862,5376=>870,5377=>890,5378=>870,5379=>890,5380=>870,5381=>443,5382=>414,5383=>443,5392=>831,5393=>831,5394=>831,5395=>1022,5396=>1022,5397=>1022,5398=>1022,5399=>1088,5400=>1081,5401=>1088,5402=>1081,5403=>1088,5404=>1081,5405=>1288,5406=>1278,5407=>1288,5408=>1278,5409=>1288,5410=>1278,5411=>1288,5412=>1278,5413=>671,5414=>698,5415=>698,5416=>698,5417=>698,5418=>698,5419=>698,5420=>698,5421=>698,5422=>698,5423=>902,5424=>903,5425=>911,5426=>896,5427=>911,5428=>896,5429=>902,5430=>903,5431=>902,5432=>903,5433=>911,5434=>896,5435=>911,5436=>896,5437=>911,5438=>445,5440=>355,5441=>458,5442=>929,5443=>929,5444=>878,5445=>878,5446=>878,5447=>878,5448=>659,5449=>659,5450=>659,5451=>659,5452=>659,5453=>659,5454=>902,5455=>863,5456=>445,5458=>797,5459=>696,5460=>696,5461=>696,5462=>696,5463=>835,5464=>835,5465=>835,5466=>835,5467=>1055,5468=>1028,5469=>542,5470=>730,5471=>730,5472=>730,5473=>730,5474=>730,5475=>730,5476=>734,5477=>734,5478=>734,5479=>734,5480=>954,5481=>946,5482=>493,5492=>879,5493=>879,5494=>879,5495=>879,5496=>879,5497=>879,5498=>879,5499=>556,5500=>753,5501=>458,5502=>1114,5503=>1114,5504=>1114,5505=>1114,5506=>1114,5507=>1114,5508=>1114,5509=>890,5514=>879,5515=>879,5516=>879,5517=>879,5518=>1432,5519=>1432,5520=>1432,5521=>1165,5522=>1165,5523=>1432,5524=>1432,5525=>763,5526=>1146,5536=>889,5537=>889,5538=>838,5539=>838,5540=>838,5541=>838,5542=>593,5543=>698,5544=>698,5545=>698,5546=>698,5547=>698,5548=>698,5549=>698,5550=>445,5551=>668,5598=>747,5601=>747,5702=>446,5703=>446,5742=>371,5743=>1114,5744=>1432,5745=>1814,5746=>1814,5747=>1548,5748=>1510,5749=>1814,5750=>1814,5760=>489,5761=>573,5762=>851,5763=>1128,5764=>1406,5765=>1684,5766=>564,5767=>842,5768=>1128,5769=>1403,5770=>1684,5771=>512,5772=>789,5773=>1068,5774=>1347,5775=>1626,5776=>573,5777=>851,5778=>1116,5779=>1399,5780=>1684,5781=>512,5782=>512,5783=>709,5784=>1110,5785=>1403,5786=>666,5787=>574,5788=>574,7424=>586,7425=>750,7426=>943,7427=>547,7428=>533,7429=>608,7430=>608,7431=>502,7432=>501,7433=>308,7434=>444,7435=>598,7436=>485,7437=>735,7438=>630,7439=>618,7440=>533,7441=>594,7442=>594,7443=>594,7444=>984,7446=>618,7447=>618,7448=>500,7449=>578,7450=>578,7451=>521,7452=>571,7453=>663,7454=>853,7455=>625,7456=>586,7457=>831,7458=>523,7459=>581,7462=>485,7463=>586,7464=>622,7465=>500,7466=>703,7467=>659,7468=>438,7469=>615,7470=>432,7472=>470,7473=>387,7474=>387,7475=>465,7476=>474,7477=>211,7478=>211,7479=>439,7480=>361,7481=>563,7482=>474,7483=>474,7484=>481,7485=>458,7486=>415,7487=>436,7488=>387,7489=>460,7490=>625,7491=>412,7492=>412,7493=>431,7494=>641,7495=>431,7496=>431,7497=>431,7498=>431,7499=>347,7500=>347,7501=>431,7502=>197,7503=>438,7504=>597,7505=>410,7506=>439,7507=>372,7508=>439,7509=>439,7510=>431,7511=>349,7512=>410,7513=>416,7514=>597,7515=>451,7517=>405,7518=>386,7519=>389,7520=>443,7521=>365,7522=>197,7523=>284,7524=>410,7525=>451,7526=>405,7527=>386,7528=>405,7529=>443,7530=>365,7543=>644,7544=>474,7547=>491,7549=>672,7557=>462,7579=>431,7580=>372,7581=>372,7582=>439,7583=>347,7584=>339,7585=>313,7586=>431,7587=>410,7588=>312,7589=>253,7590=>312,7591=>312,7592=>388,7593=>293,7594=>296,7595=>333,7596=>598,7597=>597,7598=>505,7599=>505,7600=>403,7601=>439,7602=>488,7603=>379,7604=>356,7605=>349,7606=>524,7607=>444,7608=>359,7609=>405,7610=>451,7611=>375,7612=>471,7613=>422,7614=>409,7615=>382,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>696,7681=>607,7682=>686,7683=>644,7684=>686,7685=>644,7686=>686,7687=>644,7688=>660,7689=>533,7690=>747,7691=>644,7692=>747,7693=>644,7694=>747,7695=>644,7696=>747,7697=>644,7698=>747,7699=>644,7700=>615,7701=>610,7702=>615,7703=>610,7704=>615,7705=>610,7706=>615,7707=>610,7708=>615,7709=>610,7710=>615,7711=>391,7712=>738,7713=>644,7714=>753,7715=>641,7716=>753,7717=>641,7718=>753,7719=>641,7720=>753,7721=>641,7722=>753,7723=>641,7724=>334,7725=>308,7726=>334,7727=>308,7728=>697,7729=>598,7730=>697,7731=>598,7732=>697,7733=>598,7734=>573,7735=>308,7736=>573,7737=>308,7738=>573,7739=>308,7740=>573,7741=>308,7742=>896,7743=>938,7744=>896,7745=>938,7746=>896,7747=>938,7748=>753,7749=>641,7750=>753,7751=>641,7752=>753,7753=>641,7754=>753,7755=>641,7756=>765,7757=>618,7758=>765,7759=>618,7760=>765,7761=>618,7762=>765,7763=>618,7764=>659,7765=>644,7766=>659,7767=>644,7768=>693,7769=>444,7770=>693,7771=>444,7772=>693,7773=>444,7774=>693,7775=>444,7776=>648,7777=>536,7778=>648,7779=>536,7780=>648,7781=>536,7782=>648,7783=>536,7784=>648,7785=>536,7786=>614,7787=>430,7788=>614,7789=>430,7790=>614,7791=>430,7792=>614,7793=>430,7794=>730,7795=>641,7796=>730,7797=>641,7798=>730,7799=>641,7800=>730,7801=>641,7802=>730,7803=>641,7804=>696,7805=>586,7806=>696,7807=>586,7808=>993,7809=>831,7810=>993,7811=>831,7812=>993,7813=>831,7814=>993,7815=>831,7816=>993,7817=>831,7818=>694,7819=>580,7820=>694,7821=>580,7822=>651,7823=>586,7824=>652,7825=>523,7826=>652,7827=>523,7828=>652,7829=>523,7830=>641,7831=>430,7832=>831,7833=>586,7834=>607,7835=>391,7836=>391,7837=>391,7838=>806,7839=>618,7840=>696,7841=>607,7842=>696,7843=>607,7844=>696,7845=>607,7846=>696,7847=>607,7848=>696,7849=>607,7850=>696,7851=>607,7852=>696,7853=>607,7854=>696,7855=>607,7856=>696,7857=>607,7858=>696,7859=>607,7860=>696,7861=>607,7862=>696,7863=>607,7864=>615,7865=>610,7866=>615,7867=>610,7868=>615,7869=>610,7870=>615,7871=>610,7872=>615,7873=>610,7874=>615,7875=>610,7876=>615,7877=>610,7878=>615,7879=>610,7880=>334,7881=>308,7882=>334,7883=>308,7884=>765,7885=>618,7886=>765,7887=>618,7888=>765,7889=>618,7890=>765,7891=>618,7892=>765,7893=>618,7894=>765,7895=>618,7896=>765,7897=>618,7898=>786,7899=>618,7900=>786,7901=>618,7902=>786,7903=>618,7904=>786,7905=>618,7906=>786,7907=>618,7908=>730,7909=>641,7910=>730,7911=>641,7912=>751,7913=>641,7914=>751,7915=>641,7916=>751,7917=>641,7918=>751,7919=>641,7920=>751,7921=>641,7922=>651,7923=>586,7924=>651,7925=>586,7926=>651,7927=>586,7928=>651,7929=>586,7930=>857,7931=>579,7936=>618,7937=>618,7938=>618,7939=>618,7940=>618,7941=>618,7942=>618,7943=>618,7944=>696,7945=>696,7946=>937,7947=>939,7948=>841,7949=>866,7950=>751,7951=>773,7952=>501,7953=>501,7954=>501,7955=>501,7956=>501,7957=>501,7960=>712,7961=>715,7962=>989,7963=>986,7964=>920,7965=>947,7968=>641,7969=>641,7970=>641,7971=>641,7972=>641,7973=>641,7974=>641,7975=>641,7976=>851,7977=>856,7978=>1125,7979=>1125,7980=>1062,7981=>1085,7982=>948,7983=>956,7984=>351,7985=>351,7986=>351,7987=>351,7988=>351,7989=>351,7990=>351,7991=>351,7992=>435,7993=>440,7994=>699,7995=>707,7996=>641,7997=>664,7998=>544,7999=>544,8000=>618,8001=>618,8002=>618,8003=>618,8004=>618,8005=>618,8008=>802,8009=>839,8010=>1099,8011=>1101,8012=>947,8013=>974,8016=>607,8017=>607,8018=>607,8019=>607,8020=>607,8021=>607,8022=>607,8023=>607,8025=>837,8027=>1065,8029=>1079,8031=>944,8032=>782,8033=>782,8034=>782,8035=>782,8036=>782,8037=>782,8038=>782,8039=>782,8040=>817,8041=>862,8042=>1121,8043=>1126,8044=>968,8045=>994,8046=>925,8047=>968,8048=>618,8049=>618,8050=>501,8051=>501,8052=>641,8053=>641,8054=>351,8055=>351,8056=>618,8057=>618,8058=>607,8059=>607,8060=>782,8061=>782,8064=>618,8065=>618,8066=>618,8067=>618,8068=>618,8069=>618,8070=>618,8071=>618,8072=>696,8073=>696,8074=>937,8075=>939,8076=>841,8077=>866,8078=>751,8079=>773,8080=>641,8081=>641,8082=>641,8083=>641,8084=>641,8085=>641,8086=>641,8087=>641,8088=>851,8089=>856,8090=>1125,8091=>1125,8092=>1062,8093=>1085,8094=>948,8095=>956,8096=>782,8097=>782,8098=>782,8099=>782,8100=>782,8101=>782,8102=>782,8103=>782,8104=>817,8105=>862,8106=>1121,8107=>1126,8108=>968,8109=>994,8110=>925,8111=>968,8112=>618,8113=>618,8114=>618,8115=>618,8116=>618,8118=>618,8119=>618,8120=>696,8121=>696,8122=>789,8123=>717,8124=>696,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>641,8131=>641,8132=>641,8134=>641,8135=>641,8136=>836,8137=>761,8138=>972,8139=>908,8140=>753,8141=>450,8142=>450,8143=>450,8144=>351,8145=>351,8146=>351,8147=>351,8150=>351,8151=>351,8152=>334,8153=>334,8154=>559,8155=>507,8157=>450,8158=>450,8159=>450,8160=>607,8161=>607,8162=>607,8163=>607,8164=>644,8165=>644,8166=>607,8167=>607,8168=>651,8169=>651,8170=>918,8171=>882,8172=>754,8173=>450,8174=>450,8175=>450,8178=>782,8179=>782,8180=>782,8182=>782,8183=>782,8184=>958,8185=>801,8186=>976,8187=>804,8188=>765,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>342,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>342,8217=>342,8218=>342,8219=>342,8220=>591,8221=>591,8222=>591,8223=>591,8224=>450,8225=>450,8226=>575,8227=>575,8228=>299,8229=>600,8230=>900,8231=>313,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1296,8241=>1698,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8249=>371,8250=>371,8251=>875,8252=>564,8253=>522,8254=>450,8255=>745,8256=>745,8257=>296,8258=>920,8259=>450,8260=>150,8261=>411,8262=>411,8263=>927,8264=>746,8265=>746,8266=>461,8267=>572,8268=>450,8269=>450,8270=>470,8271=>360,8272=>745,8273=>470,8274=>500,8275=>900,8276=>745,8277=>754,8278=>615,8279=>731,8280=>754,8281=>754,8282=>342,8283=>784,8284=>754,8285=>342,8286=>342,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>394,8305=>197,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475,8316=>475,8317=>259,8318=>259,8319=>410,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>259,8334=>259,8336=>412,8337=>431,8338=>439,8339=>371,8340=>431,8341=>410,8342=>438,8343=>197,8344=>597,8345=>410,8346=>431,8347=>343,8348=>349,8352=>836,8353=>626,8354=>626,8355=>626,8356=>626,8357=>938,8358=>753,8359=>1366,8360=>1084,8361=>993,8362=>813,8363=>626,8364=>626,8365=>626,8366=>626,8367=>1252,8368=>626,8369=>626,8370=>626,8371=>626,8372=>773,8373=>626,8376=>626,8377=>626,8378=>692,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1007,8449=>1053,8450=>660,8451=>1090,8452=>806,8453=>982,8454=>1029,8455=>553,8456=>628,8457=>978,8459=>965,8460=>822,8461=>799,8462=>641,8463=>641,8464=>537,8465=>627,8466=>771,8467=>424,8468=>876,8469=>753,8470=>1083,8471=>900,8472=>627,8473=>675,8474=>765,8475=>844,8476=>732,8477=>721,8478=>807,8479=>639,8480=>917,8481=>1152,8482=>900,8483=>679,8484=>679,8485=>520,8486=>765,8487=>765,8488=>686,8489=>304,8490=>697,8491=>696,8492=>835,8493=>736,8494=>769,8495=>572,8496=>656,8497=>727,8498=>615,8499=>1065,8500=>418,8501=>714,8502=>658,8503=>444,8504=>615,8505=>342,8506=>851,8507=>1213,8508=>710,8509=>663,8510=>589,8511=>776,8512=>756,8513=>697,8514=>501,8515=>573,8516=>684,8517=>747,8518=>644,8519=>610,8520=>308,8521=>308,8523=>785,8526=>492,8528=>932,8529=>932,8530=>1334,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>334,8545=>593,8546=>851,8547=>989,8548=>696,8549=>989,8550=>1247,8551=>1505,8552=>1008,8553=>694,8554=>1008,8555=>1266,8556=>573,8557=>660,8558=>747,8559=>896,8560=>308,8561=>546,8562=>785,8563=>885,8564=>586,8565=>866,8566=>1104,8567=>1342,8568=>872,8569=>580,8570=>872,8571=>1110,8572=>308,8573=>533,8574=>644,8575=>938,8576=>1160,8577=>747,8578=>1160,8579=>660,8580=>533,8581=>660,8585=>932,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>696,8705=>626,8706=>489,8707=>615,8708=>615,8709=>771,8710=>627,8711=>627,8712=>807,8713=>807,8714=>675,8715=>807,8716=>807,8717=>675,8718=>572,8719=>708,8720=>708,8721=>646,8722=>754,8723=>754,8724=>626,8725=>329,8726=>626,8727=>754,8728=>563,8729=>342,8730=>600,8731=>600,8732=>600,8733=>641,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450,8742=>450,8743=>730,8744=>730,8745=>730,8746=>730,8747=>549,8748=>835,8749=>1165,8750=>506,8751=>879,8752=>1181,8753=>506,8754=>506,8755=>506,8756=>626,8757=>626,8758=>264,8759=>626,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>956,8789=>956,8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>756,8809=>756,8810=>942,8811=>942,8812=>450,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754,8842=>754,8843=>754,8844=>730,8845=>730,8846=>730,8847=>754,8848=>754,8849=>754,8850=>754,8851=>716,8852=>716,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>822,8867=>822,8868=>822,8869=>822,8870=>488,8871=>488,8872=>822,8873=>822,8874=>822,8875=>822,8876=>822,8877=>822,8878=>822,8879=>822,8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>488,8891=>730,8892=>730,8893=>730,8894=>754,8895=>754,8896=>758,8897=>758,8898=>758,8899=>758,8900=>444,8901=>342,8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>730,8911=>730,8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900,8946=>1042,8947=>807,8948=>675,8949=>807,8950=>807,8951=>675,8952=>807,8953=>807,8954=>1042,8955=>807,8956=>675,8957=>807,8958=>675,8959=>807,8960=>542,8961=>542,8962=>644,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>411,8969=>411,8970=>411,8971=>411,8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>484,8984=>835,8985=>754,8988=>422,8989=>422,8990=>422,8991=>422,8992=>549,8993=>549,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272,9004=>786,9075=>351,9076=>644,9077=>782,9082=>618,9085=>776,9095=>1037,9108=>786,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>549,9166=>754,9167=>850,9187=>786,9189=>692,9192=>626,9250=>644,9251=>644,9312=>762,9313=>762,9314=>762,9315=>762,9316=>762,9317=>762,9318=>762,9319=>762,9320=>762,9321=>762,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>756,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>692,9697=>692,9698=>692,9699=>692,9700=>692,9701=>692,9702=>575,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>807,9777=>807,9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807,9785=>938,9786=>938,9787=>938,9788=>807,9789=>807,9790=>807,9791=>552,9792=>659,9793=>659,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807,9865=>807,9866=>807,9867=>807,9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807,9875=>807,9876=>807,9877=>487,9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807,9888=>807,9889=>632,9890=>904,9891=>980,9892=>1057,9893=>813,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>659,9907=>659,9908=>659,9909=>659,9910=>765,9911=>659,9912=>659,9920=>754,9921=>754,9922=>754,9923=>754,9954=>659,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>312,10076=>312,10077=>528,10078=>528,10081=>754,10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>762,10103=>762,10104=>762,10105=>762,10106=>762,10107=>762,10108=>762,10109=>762,10110=>762,10111=>762,10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>411,10182=>411,10208=>444,10214=>438,10215=>438,10216=>411,10217=>411,10218=>648,10219=>648,10224=>754,10225=>754,10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703,10502=>754,10503=>754,10506=>754,10507=>754,10560=>754,10561=>754,10627=>678,10628=>678,10702=>754,10703=>941,10704=>941,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900,10754=>900,10764=>1495,10765=>506,10766=>506,10767=>506,10768=>506,10769=>506,10770=>506,10771=>506,10772=>506,10773=>506,10774=>506,10775=>506,10776=>506,10777=>506,10778=>506,10779=>506,10780=>506,10799=>754,10858=>754,10859=>754,10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>573,11361=>324,11362=>573,11363=>659,11364=>693,11365=>607,11366=>430,11367=>860,11368=>641,11369=>697,11370=>598,11371=>652,11372=>523,11373=>774,11374=>896,11375=>696,11376=>774,11377=>700,11378=>1099,11379=>950,11380=>586,11381=>628,11382=>508,11383=>704,11385=>484,11386=>618,11387=>502,11388=>197,11389=>438,11390=>648,11391=>652,11520=>596,11521=>608,11522=>595,11523=>566,11524=>595,11525=>928,11526=>646,11527=>928,11528=>583,11529=>600,11530=>928,11531=>605,11532=>609,11533=>932,11534=>612,11535=>797,11536=>928,11537=>615,11538=>606,11539=>931,11540=>930,11541=>924,11542=>608,11543=>605,11544=>600,11545=>600,11546=>593,11547=>604,11548=>935,11549=>605,11550=>623,11551=>593,11552=>943,11553=>593,11554=>588,11555=>603,11556=>659,11557=>915,11568=>622,11569=>847,11570=>847,11571=>652,11572=>652,11573=>652,11574=>608,11575=>696,11576=>696,11577=>615,11578=>615,11579=>721,11580=>890,11581=>685,11582=>561,11583=>685,11584=>847,11585=>847,11586=>335,11587=>666,11588=>753,11589=>822,11590=>604,11591=>663,11592=>612,11593=>615,11594=>542,11595=>935,11596=>700,11597=>753,11598=>615,11599=>334,11600=>700,11601=>335,11602=>652,11603=>622,11604=>847,11605=>847,11606=>753,11607=>335,11608=>752,11609=>847,11610=>847,11611=>660,11612=>789,11613=>694,11614=>660,11615=>615,11616=>696,11617=>753,11618=>615,11619=>765,11620=>627,11621=>765,11631=>644,11800=>522,11807=>754,11810=>411,11811=>411,11812=>411,11813=>411,11822=>522,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42192=>686,42193=>659,42194=>659,42195=>747,42196=>614,42197=>614,42198=>738,42199=>697,42200=>697,42201=>477,42202=>660,42203=>660,42204=>652,42205=>615,42206=>615,42207=>896,42208=>753,42209=>573,42210=>648,42211=>693,42212=>693,42213=>696,42214=>696,42215=>753,42216=>697,42217=>477,42218=>993,42219=>694,42220=>651,42221=>686,42222=>696,42223=>696,42224=>615,42225=>615,42226=>334,42227=>765,42228=>730,42229=>730,42230=>501,42231=>747,42232=>290,42233=>290,42234=>606,42235=>606,42236=>290,42237=>290,42238=>529,42239=>529,42564=>648,42565=>536,42566=>392,42567=>396,42572=>1265,42573=>1055,42576=>1110,42577=>924,42580=>1056,42581=>875,42582=>983,42583=>862,42594=>976,42595=>832,42596=>986,42597=>821,42598=>1134,42599=>897,42600=>765,42601=>618,42602=>933,42603=>781,42604=>1266,42605=>995,42606=>865,42634=>867,42635=>708,42636=>614,42637=>521,42644=>727,42645=>641,42760=>450,42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450,42771=>450,42772=>450,42773=>450,42774=>450,42779=>360,42780=>360,42781=>258,42782=>258,42783=>258,42786=>399,42787=>351,42788=>486,42789=>486,42790=>753,42791=>641,42792=>928,42793=>771,42794=>626,42795=>501,42800=>502,42801=>536,42802=>1214,42803=>946,42804=>1156,42805=>958,42806=>1094,42807=>949,42808=>971,42809=>830,42810=>971,42811=>830,42812=>932,42813=>830,42814=>628,42815=>494,42816=>590,42817=>620,42822=>765,42823=>488,42824=>614,42825=>478,42826=>826,42827=>732,42830=>1266,42831=>995,42832=>659,42833=>644,42834=>853,42835=>843,42838=>765,42839=>644,42852=>664,42853=>644,42854=>664,42855=>644,42880=>573,42881=>308,42882=>753,42883=>641,42889=>360,42890=>347,42891=>410,42892=>275,42893=>727,42894=>624,42896=>835,42897=>691,42912=>738,42913=>644,42914=>697,42915=>598,42916=>753,42917=>641,42918=>693,42919=>444,42920=>648,42921=>536,42922=>797,43002=>956,43003=>615,43004=>659,43005=>896,43006=>334,43007=>1192,61184=>194,61185=>218,61186=>240,61187=>249,61188=>254,61189=>218,61190=>194,61191=>218,61192=>240,61193=>249,61194=>240,61195=>218,61196=>194,61197=>218,61198=>240,61199=>249,61200=>240,61201=>218,61202=>194,61203=>218,61204=>254,61205=>249,61206=>240,61207=>218,61208=>194,61209=>254,62464=>551,62465=>551,62466=>587,62467=>812,62468=>560,62469=>560,62470=>594,62471=>805,62472=>530,62473=>560,62474=>1046,62475=>563,62476=>564,62477=>803,62478=>551,62479=>563,62480=>832,62481=>564,62482=>669,62483=>570,62484=>797,62485=>563,62486=>816,62487=>563,62488=>559,62489=>565,62490=>609,62491=>563,62492=>559,62493=>567,62494=>564,62495=>514,62496=>559,62497=>567,62498=>551,62499=>550,62500=>556,62501=>604,62502=>866,62504=>920,62505=>760,62506=>507,62507=>507,62508=>507,62509=>507,62510=>507,62511=>507,62512=>499,62513=>499,62514=>499,62515=>499,62516=>516,62517=>516,62518=>516,62519=>742,62520=>742,62521=>742,62522=>742,62523=>742,62524=>549,62525=>549,62526=>549,62527=>549,62528=>549,62529=>549,63173=>618,64256=>729,64257=>667,64258=>667,64259=>1003,64260=>1004,64261=>727,64262=>917,64275=>1249,64276=>1245,64277=>1240,64278=>1245,64279=>1542,64285=>265,64286=>0,64287=>467,64288=>598,64289=>845,64290=>709,64291=>828,64292=>707,64293=>771,64294=>782,64295=>739,64296=>801,64297=>754,64298=>682,64299=>682,64300=>682,64301=>682,64302=>655,64303=>655,64304=>655,64305=>549,64306=>402,64307=>529,64308=>618,64309=>393,64310=>436,64312=>611,64313=>391,64314=>520,64315=>510,64316=>544,64318=>651,64320=>408,64321=>611,64323=>607,64324=>592,64326=>587,64327=>663,64328=>542,64329=>682,64330=>615,64331=>309,64332=>549,64333=>510,64334=>592,64335=>639,64338=>904,64339=>953,64340=>338,64341=>367,64342=>904,64343=>953,64344=>338,64345=>367,64346=>904,64347=>953,64348=>338,64349=>367,64350=>904,64351=>953,64352=>338,64353=>367,64354=>904,64355=>953,64356=>338,64357=>367,64358=>904,64359=>953,64360=>338,64361=>367,64362=>1045,64363=>1072,64364=>589,64365=>647,64366=>1045,64367=>1072,64368=>589,64369=>647,64370=>648,64371=>648,64372=>648,64373=>648,64374=>648,64375=>648,64376=>648,64377=>648,64378=>648,64379=>648,64380=>648,64381=>648,64382=>648,64383=>648,64384=>648,64385=>648,64386=>461,64387=>520,64388=>461,64389=>520,64390=>461,64391=>520,64392=>461,64393=>520,64394=>518,64395=>560,64396=>518,64397=>560,64398=>921,64399=>921,64400=>523,64401=>523,64402=>921,64403=>921,64404=>523,64405=>523,64406=>921,64407=>921,64408=>523,64409=>523,64410=>921,64411=>921,64412=>523,64413=>523,64414=>768,64415=>810,64416=>768,64417=>810,64418=>338,64419=>367,64426=>844,64427=>792,64428=>624,64429=>594,64467=>742,64468=>758,64469=>428,64470=>497,64473=>559,64474=>564,64488=>338,64489=>367,64508=>825,64509=>910,64510=>338,64511=>367,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>308,65137=>308,65138=>308,65139=>311,65140=>308,65142=>308,65143=>308,65144=>308,65145=>308,65146=>308,65147=>308,65148=>308,65149=>308,65150=>308,65151=>308,65152=>460,65153=>308,65154=>338,65155=>308,65156=>338,65157=>559,65158=>564,65159=>308,65160=>338,65161=>825,65162=>825,65163=>338,65164=>367,65165=>308,65166=>338,65167=>904,65168=>953,65169=>338,65170=>367,65171=>531,65172=>545,65173=>904,65174=>953,65175=>338,65176=>367,65177=>904,65178=>953,65179=>338,65180=>367,65181=>648,65182=>648,65183=>648,65184=>648,65185=>648,65186=>648,65187=>648,65188=>648,65189=>648,65190=>648,65191=>648,65192=>648,65193=>461,65194=>520,65195=>461,65196=>520,65197=>518,65198=>560,65199=>518,65200=>560,65201=>1242,65202=>1272,65203=>885,65204=>916,65205=>1242,65206=>1272,65207=>885,65208=>916,65209=>1210,65210=>1228,65211=>870,65212=>887,65213=>1210,65214=>1228,65215=>870,65216=>887,65217=>935,65218=>963,65219=>848,65220=>876,65221=>935,65222=>963,65223=>848,65224=>876,65225=>615,65226=>615,65227=>615,65228=>508,65229=>615,65230=>615,65231=>615,65232=>508,65233=>1045,65234=>1072,65235=>589,65236=>647,65237=>804,65238=>811,65239=>589,65240=>647,65241=>825,65242=>838,65243=>523,65244=>523,65245=>781,65246=>803,65247=>338,65248=>367,65249=>659,65250=>706,65251=>557,65252=>603,65253=>768,65254=>810,65255=>338,65256=>367,65257=>531,65258=>545,65259=>624,65260=>594,65261=>559,65262=>564,65263=>825,65264=>910,65265=>825,65266=>910,65267=>338,65268=>367,65269=>670,65270=>683,65271=>670,65272=>683,65273=>670,65274=>683,65275=>670,65276=>683,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusanscondensedb.z b/tcpdf/fonts/dejavusanscondensedb.z new file mode 100644 index 0000000..af54a16 Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensedb.z differ diff --git a/tcpdf/fonts/dejavusanscondensedbi.ctg.z b/tcpdf/fonts/dejavusanscondensedbi.ctg.z new file mode 100644 index 0000000..23445ef Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensedbi.ctg.z differ diff --git a/tcpdf/fonts/dejavusanscondensedbi.php b/tcpdf/fonts/dejavusanscondensedbi.php new file mode 100644 index 0000000..d0d573d --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensedbi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansCondensed-BoldOblique'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=600936; +$enc=''; +$file='dejavusanscondensedbi.z'; +$ctg='dejavusanscondensedbi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-960 -385 1799 1121]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>60,'StemH'=>26,'AvgWidth'=>515,'MaxWidth'=>1814,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(62,0,349,729),34=>array(85,458,383,729),35=>array(58,0,702,718),36=>array(24,-147,567,760),37=>array(49,-14,853,742),38=>array(25,-14,732,742),39=>array(85,458,190,729),40=>array(69,-132,421,759),41=>array(-24,-132,328,759),42=>array(18,278,453,742),43=>array(95,0,659,627),44=>array(-31,-142,230,189),45=>array(22,217,324,359),46=>array(41,0,233,189),47=>array(-87,-93,391,729),48=>array(32,-14,594,742),49=>array(39,0,521,729),50=>array(7,0,576,742),51=>array(0,-14,574,742),52=>array(-1,0,571,729),53=>array(12,-14,580,729),54=>array(44,-15,594,741),55=>array(70,0,625,729),56=>array(20,-14,593,742),57=>array(37,-15,587,741),58=>array(37,0,291,547),59=>array(-32,-142,291,547),60=>array(95,30,659,597),61=>array(95,144,659,482),62=>array(95,30,659,597),63=>array(93,0,499,742),64=>array(40,-172,834,703),65=>array(-59,0,622,729),66=>array(19,0,629,729),67=>array(32,-14,652,742),68=>array(19,0,708,729),69=>array(19,0,603,729),70=>array(19,0,603,729),71=>array(32,-14,700,742),72=>array(19,0,734,729),73=>array(19,0,316,729),74=>array(-149,-200,316,729),75=>array(19,0,753,729),76=>array(19,0,510,729),77=>array(19,0,877,729),78=>array(19,0,734,729),79=>array(32,-14,733,742),80=>array(19,0,647,729),81=>array(32,-146,733,742),82=>array(19,0,617,729),83=>array(13,-14,599,742),84=>array(43,0,673,729),85=>array(61,-14,712,729),86=>array(68,0,756,729),87=>array(96,0,1029,729),88=>array(-46,0,731,729),89=>array(57,0,729,729),90=>array(-23,0,667,729),91=>array(-9,-132,419,760),92=>array(63,-93,249,729),93=>array(-25,-132,404,760),94=>array(91,457,664,729),95=>array(-9,-236,459,-143),96=>array(118,616,334,800),97=>array(15,-14,550,560),98=>array(27,-14,609,760),99=>array(33,-14,523,560),100=>array(32,-14,652,760),101=>array(32,-14,576,560),102=>array(44,0,486,760),103=>array(18,-216,614,559),104=>array(27,0,589,760),105=>array(27,0,319,760),106=>array(-115,-216,319,760),107=>array(27,0,645,760),108=>array(27,0,319,760),109=>array(27,0,886,560),110=>array(27,0,589,560),111=>array(32,-14,586,560),112=>array(-9,-208,609,560),113=>array(32,-208,614,560),114=>array(27,0,491,560),115=>array(9,-14,504,560),116=>array(39,0,458,702),117=>array(54,-14,613,547),118=>array(57,0,611,547),119=>array(78,0,834,547),120=>array(-37,0,604,547),121=>array(0,-216,619,547),122=>array(-8,0,527,547),123=>array(95,-163,602,760),124=>array(114,-236,214,764),125=>array(40,-163,545,760),126=>array(95,212,659,415),161=>array(62,0,349,729),162=>array(60,-153,549,699),163=>array(6,0,622,742),164=>array(32,30,541,596),165=>array(5,0,680,729),166=>array(114,-171,214,699),167=>array(-30,-95,445,742),168=>array(136,654,436,774),169=>array(124,0,776,725),170=>array(39,182,475,742),171=>array(55,67,535,519),172=>array(95,140,659,444),173=>array(22,217,324,359),174=>array(124,0,776,725),175=>array(139,668,433,760),176=>array(78,424,371,749),177=>array(95,0,659,627),178=>array(40,326,388,742),179=>array(36,319,384,742),180=>array(204,616,485,800),181=>array(-24,-209,603,547),182=>array(66,-96,543,729),183=>array(75,253,268,442),184=>array(20,-196,233,0),185=>array(60,326,356,734),186=>array(41,182,491,742),187=>array(51,66,530,519),188=>array(50,-14,853,742),189=>array(50,-14,933,742),190=>array(42,-14,853,742),191=>array(33,-13,439,729),192=>array(-59,0,622,927),193=>array(-59,0,622,927),194=>array(-59,0,622,927),195=>array(-59,0,622,928),196=>array(-59,0,622,927),197=>array(-59,0,622,928),198=>array(-70,0,965,729),199=>array(32,-196,652,742),200=>array(19,0,603,927),201=>array(19,0,603,927),202=>array(19,0,603,927),203=>array(19,0,603,927),204=>array(19,0,316,927),205=>array(19,0,403,927),206=>array(19,0,396,927),207=>array(19,0,398,927),208=>array(-2,0,723,729),209=>array(19,0,734,928),210=>array(32,-14,733,927),211=>array(32,-14,733,927),212=>array(32,-14,733,927),213=>array(32,-14,733,928),214=>array(32,-14,733,927),215=>array(112,20,642,607),216=>array(-42,-38,807,771),217=>array(61,-14,712,927),218=>array(61,-14,712,927),219=>array(61,-14,712,927),220=>array(61,-14,712,927),221=>array(57,0,729,927),222=>array(19,0,625,729),223=>array(27,-14,600,760),224=>array(15,-14,550,800),225=>array(15,-14,564,800),226=>array(15,-14,550,800),227=>array(15,-14,550,778),228=>array(15,-14,550,774),229=>array(15,-14,550,883),230=>array(15,-14,907,560),231=>array(33,-196,523,560),232=>array(32,-14,576,800),233=>array(32,-14,585,800),234=>array(32,-14,576,800),235=>array(32,-14,576,774),236=>array(27,0,282,800),237=>array(27,0,423,800),238=>array(27,0,373,800),239=>array(27,0,374,774),240=>array(32,-14,611,760),241=>array(27,0,589,778),242=>array(32,-14,586,800),243=>array(32,-14,586,800),244=>array(32,-14,586,800),245=>array(32,-14,586,778),246=>array(32,-14,586,774),247=>array(95,42,659,585),248=>array(-16,-50,630,597),249=>array(54,-14,613,800),250=>array(54,-14,613,800),251=>array(54,-14,613,800),252=>array(54,-14,613,774),253=>array(0,-216,619,800),254=>array(-9,-208,609,760),255=>array(0,-216,619,774),256=>array(-59,0,622,914),257=>array(15,-14,550,763),258=>array(-59,0,622,936),259=>array(15,-14,550,772),260=>array(-59,-196,622,729),261=>array(15,-196,550,560),262=>array(32,-14,652,927),263=>array(33,-14,581,800),264=>array(32,-14,652,927),265=>array(33,-14,530,800),266=>array(32,-14,652,927),267=>array(33,-14,523,759),268=>array(32,-14,659,927),269=>array(33,-14,571,800),270=>array(19,0,708,927),271=>array(32,-14,853,760),272=>array(-2,0,723,729),273=>array(32,-14,735,760),274=>array(19,0,603,914),275=>array(32,-14,576,763),276=>array(19,0,603,927),277=>array(32,-14,576,784),278=>array(19,0,603,927),279=>array(32,-14,576,759),280=>array(19,-196,603,729),281=>array(32,-196,576,560),282=>array(19,0,603,927),283=>array(32,-14,576,800),284=>array(32,-14,700,927),285=>array(18,-216,614,800),286=>array(32,-14,700,927),287=>array(18,-216,614,784),288=>array(32,-14,700,927),289=>array(18,-216,614,759),290=>array(32,-224,700,742),291=>array(18,-216,614,765),292=>array(19,0,734,927),293=>array(27,0,589,927),294=>array(80,0,842,729),295=>array(77,0,637,760),296=>array(19,0,411,928),297=>array(27,0,388,778),298=>array(19,0,375,914),299=>array(27,0,362,763),300=>array(19,0,408,927),301=>array(27,0,385,784),302=>array(19,-196,316,729),303=>array(27,-196,319,760),304=>array(19,0,320,927),305=>array(27,0,282,547),306=>array(19,-200,650,729),307=>array(27,-216,627,760),308=>array(-149,-200,408,927),309=>array(-115,-216,385,800),310=>array(19,-209,753,729),311=>array(27,-209,645,760),312=>array(27,0,645,547),313=>array(19,0,510,928),314=>array(27,0,431,928),315=>array(19,-209,510,729),316=>array(-21,-209,319,760),317=>array(19,0,561,729),318=>array(27,0,523,760),319=>array(19,0,562,729),320=>array(27,0,500,760),321=>array(-21,0,543,729),322=>array(-6,0,411,760),323=>array(19,0,734,928),324=>array(27,0,589,803),325=>array(19,-209,734,729),326=>array(27,-209,589,560),327=>array(19,0,734,927),328=>array(27,0,589,800),329=>array(55,0,820,729),330=>array(28,-200,698,742),331=>array(45,-216,606,560),332=>array(32,-14,733,914),333=>array(32,-14,586,763),334=>array(32,-14,733,927),335=>array(32,-14,586,784),336=>array(32,-14,733,927),337=>array(32,-14,592,800),338=>array(38,0,1039,729),339=>array(32,-14,949,560),340=>array(19,0,617,928),341=>array(27,0,556,803),342=>array(19,-209,617,729),343=>array(-21,-209,491,560),344=>array(19,0,617,927),345=>array(27,0,542,800),346=>array(13,-14,599,928),347=>array(9,-14,556,803),348=>array(13,-14,599,927),349=>array(9,-14,504,800),350=>array(13,-196,599,742),351=>array(9,-196,504,560),352=>array(13,-14,599,927),353=>array(9,-14,519,800),354=>array(43,-196,673,729),355=>array(39,-196,458,702),356=>array(43,0,673,927),357=>array(39,0,554,800),358=>array(43,0,673,729),359=>array(-10,0,444,702),360=>array(61,-14,712,928),361=>array(54,-14,613,778),362=>array(61,-14,712,914),363=>array(54,-14,613,763),364=>array(61,-14,712,927),365=>array(54,-14,613,784),366=>array(61,-14,712,923),367=>array(54,-14,613,873),368=>array(61,-14,712,927),369=>array(54,-14,613,800),370=>array(61,-196,712,729),371=>array(54,-196,613,547),372=>array(96,0,1029,931),373=>array(78,0,834,800),374=>array(57,0,729,931),375=>array(0,-216,619,800),376=>array(57,0,729,927),377=>array(-23,0,667,928),378=>array(-8,0,556,803),379=>array(-23,0,667,918),380=>array(-8,0,527,759),381=>array(-23,0,667,927),382=>array(-8,0,527,800),383=>array(44,0,486,760),384=>array(10,-14,586,760),385=>array(-33,0,670,729),386=>array(19,0,643,729),387=>array(10,-14,596,760),388=>array(54,0,634,729),389=>array(33,-14,609,760),390=>array(-12,-14,607,742),391=>array(29,-14,818,924),392=>array(24,-14,644,724),393=>array(-2,0,723,729),394=>array(-33,0,747,729),395=>array(58,0,687,729),396=>array(22,-14,637,760),397=>array(51,-208,596,548),398=>array(19,0,613,729),399=>array(32,-14,737,742),400=>array(33,-14,587,742),401=>array(-132,-200,621,729),402=>array(-136,-208,484,760),403=>array(29,-14,864,924),404=>array(84,-210,794,729),405=>array(9,-1,883,760),406=>array(66,0,346,729),407=>array(-6,0,357,729),408=>array(18,0,744,742),409=>array(9,0,626,760),410=>array(-9,0,329,760),411=>array(-40,0,482,760),412=>array(49,-13,932,729),413=>array(-132,-200,752,729),414=>array(44,-208,598,560),415=>array(32,-14,733,742),416=>array(35,-14,816,760),417=>array(35,-14,693,570),418=>array(44,-14,951,742),419=>array(56,-216,802,560),420=>array(-33,0,689,729),421=>array(-9,-208,604,760),422=>array(31,-146,616,729),423=>array(-1,-14,568,742),424=>array(-6,-14,480,560),425=>array(19,0,603,729),426=>array(31,-217,485,759),427=>array(43,-216,463,702),428=>array(32,0,695,729),429=>array(19,0,461,760),430=>array(61,-200,690,729),431=>array(61,-14,844,761),432=>array(51,-14,716,570),433=>array(37,-14,732,723),434=>array(66,0,688,729),435=>array(54,0,757,742),436=>array(22,-216,740,560),437=>array(-23,0,666,729),438=>array(-8,0,529,547),439=>array(18,-33,669,729),440=>array(9,-33,694,729),441=>array(5,-215,583,547),442=>array(-10,-208,527,547),443=>array(6,0,571,742),444=>array(10,-33,627,729),445=>array(-27,-215,516,547),446=>array(-24,-15,458,702),447=>array(-11,-208,624,560),448=>array(0,-208,334,729),449=>array(0,-208,592,729),450=>array(-21,-208,517,729),451=>array(24,0,312,729),452=>array(19,0,1414,927),453=>array(19,0,1274,800),454=>array(32,-14,1172,800),455=>array(19,-200,890,729),456=>array(19,-216,892,760),457=>array(27,-216,627,760),458=>array(19,-200,1069,729),459=>array(19,-216,1072,760),460=>array(27,-216,959,760),461=>array(-59,0,622,927),462=>array(15,-14,554,800),463=>array(19,0,426,927),464=>array(27,0,411,800),465=>array(32,-14,733,927),466=>array(32,-14,586,800),467=>array(61,-14,712,927),468=>array(54,-14,613,800),469=>array(61,-14,712,1040),470=>array(54,-14,613,914),471=>array(61,-14,712,1057),472=>array(54,-14,613,917),473=>array(61,-14,712,1058),474=>array(54,-14,613,917),475=>array(61,-14,712,1057),476=>array(54,-14,613,917),477=>array(38,-14,567,560),478=>array(-59,0,622,1040),479=>array(15,-14,550,914),480=>array(-59,0,622,1040),481=>array(15,-14,558,881),482=>array(-70,0,965,914),483=>array(15,-14,907,758),484=>array(32,-14,700,742),485=>array(18,-216,614,559),486=>array(32,-14,700,927),487=>array(18,-216,614,799),488=>array(19,0,753,926),489=>array(27,0,645,926),490=>array(32,-196,733,742),491=>array(32,-196,586,560),492=>array(32,-196,733,914),493=>array(32,-196,586,763),494=>array(18,-33,669,927),495=>array(-40,-215,529,793),496=>array(-115,-216,419,800),497=>array(19,0,1414,729),498=>array(19,0,1274,729),499=>array(32,-14,1172,760),500=>array(32,-14,700,928),501=>array(18,-216,614,798),502=>array(20,-14,1100,729),503=>array(-18,-208,698,742),504=>array(19,0,734,927),505=>array(27,0,589,798),506=>array(-59,0,780,986),507=>array(15,-14,733,931),508=>array(-70,0,965,928),509=>array(15,-14,907,799),510=>array(-42,-38,807,928),511=>array(-16,-50,630,800),512=>array(-59,0,622,930),513=>array(15,-14,550,800),514=>array(-59,0,622,947),515=>array(15,-14,550,784),516=>array(19,0,603,930),517=>array(32,-14,576,800),518=>array(19,0,603,947),519=>array(32,-14,576,784),520=>array(19,0,393,930),521=>array(27,0,369,799),522=>array(19,0,402,947),523=>array(27,0,376,784),524=>array(32,-14,733,930),525=>array(32,-14,586,800),526=>array(32,-14,733,947),527=>array(32,-14,586,784),528=>array(19,0,617,930),529=>array(27,0,491,800),530=>array(19,0,617,947),531=>array(27,0,491,784),532=>array(61,-14,712,930),533=>array(54,-14,613,800),534=>array(61,-14,712,947),535=>array(54,-14,613,784),536=>array(13,-236,599,742),537=>array(9,-236,504,560),538=>array(43,-236,673,729),539=>array(39,-236,458,702),540=>array(-41,-210,584,742),541=>array(-43,-211,508,560),542=>array(19,0,734,926),543=>array(27,0,589,926),544=>array(29,-208,688,742),545=>array(28,-75,708,760),546=>array(22,-14,692,742),547=>array(20,-14,591,646),548=>array(-4,-216,685,729),549=>array(11,-216,548,547),550=>array(-59,0,622,927),551=>array(15,-14,550,759),552=>array(19,-192,603,729),553=>array(32,-196,576,560),554=>array(32,-14,733,1040),555=>array(32,-14,586,914),556=>array(32,-14,733,1040),557=>array(32,-14,586,914),558=>array(32,-14,733,928),559=>array(32,-14,586,759),560=>array(32,-14,733,1040),561=>array(32,-14,586,914),562=>array(57,0,729,914),563=>array(0,-216,619,763),564=>array(29,-75,372,760),565=>array(33,-75,727,560),566=>array(31,-76,451,702),567=>array(-115,-216,282,547),568=>array(22,-14,921,760),569=>array(57,-208,956,560),570=>array(-73,-36,769,765),571=>array(-91,-36,751,765),572=>array(-55,-46,587,594),573=>array(-12,0,510,729),574=>array(-114,-36,728,765),575=>array(29,-240,525,560),576=>array(13,-240,550,547),577=>array(62,0,689,729),578=>array(50,0,523,560),579=>array(-31,0,626,729),580=>array(18,-14,724,729),581=>array(-60,0,628,729),582=>array(19,-93,613,822),583=>array(32,-93,574,640),584=>array(-149,-200,332,729),585=>array(-115,-216,331,760),586=>array(60,-200,777,741),587=>array(58,-216,672,560),588=>array(-10,0,617,729),589=>array(-30,0,489,560),590=>array(26,0,725,729),591=>array(9,-216,637,547),592=>array(60,-14,594,560),593=>array(40,-14,617,560),594=>array(-8,-14,569,560),595=>array(10,-14,586,760),596=>array(-7,-14,483,560),597=>array(43,-69,523,560),598=>array(40,-216,655,760),599=>array(22,-14,789,760),600=>array(20,-14,567,560),601=>array(38,-14,567,560),602=>array(34,-14,801,560),603=>array(24,-14,468,560),604=>array(-45,-11,458,560),605=>array(-45,-11,709,560),606=>array(48,-14,611,560),607=>array(-97,-216,349,547),608=>array(21,-216,806,760),609=>array(40,-216,636,547),610=>array(39,-14,516,546),611=>array(78,-211,624,547),612=>array(72,-21,606,547),613=>array(79,-214,633,546),614=>array(9,0,563,760),615=>array(28,-216,581,760),616=>array(46,0,403,760),617=>array(66,-1,293,547),618=>array(27,0,463,547),619=>array(63,0,439,760),620=>array(83,0,552,760),621=>array(29,-216,321,760),622=>array(28,-215,709,760),623=>array(62,-14,912,546),624=>array(79,-209,929,546),625=>array(44,-216,895,560),626=>array(-145,-216,599,560),627=>array(45,-216,674,560),628=>array(-29,0,552,547),629=>array(32,-14,586,560),630=>array(39,-1,784,547),631=>array(-8,0,522,574),632=>array(53,-208,656,760),633=>array(27,-13,490,547),634=>array(9,-13,509,760),635=>array(45,-216,546,547),636=>array(8,-208,507,560),637=>array(46,-216,508,560),638=>array(27,0,525,547),639=>array(89,0,449,547),640=>array(-29,0,458,547),641=>array(-29,0,552,547),642=>array(25,-216,523,560),643=>array(-114,-216,467,760),644=>array(-96,-216,485,760),645=>array(123,-216,438,560),646=>array(-87,-217,590,760),647=>array(-22,-155,397,547),648=>array(43,-216,463,702),649=>array(66,-14,760,547),650=>array(20,-51,621,547),651=>array(66,-1,563,547),652=>array(-35,0,526,547),653=>array(-17,0,752,547),654=>array(-56,0,558,763),655=>array(48,0,583,547),656=>array(11,-216,586,547),657=>array(-1,-69,539,547),658=>array(-21,-215,548,547),659=>array(22,-215,548,547),660=>array(53,0,492,759),661=>array(51,0,533,759),662=>array(-28,0,454,759),663=>array(-4,-208,551,759),664=>array(44,-14,720,742),665=>array(27,0,534,547),666=>array(27,-14,598,560),667=>array(20,0,691,760),668=>array(25,0,592,547),669=>array(-212,-217,318,760),670=>array(65,-213,682,547),671=>array(27,0,426,547),672=>array(40,-208,806,760),673=>array(-3,0,492,759),674=>array(51,0,533,759),675=>array(22,-14,1028,760),676=>array(40,-215,1045,760),677=>array(26,-55,1030,760),678=>array(24,0,833,702),679=>array(38,-216,785,760),680=>array(30,-69,831,702),681=>array(43,-216,892,760),682=>array(9,0,727,760),683=>array(9,0,688,760),684=>array(18,0,568,641),685=>array(-28,86,359,641),686=>array(-16,-214,614,760),687=>array(-15,-216,652,760),688=>array(11,326,361,751),689=>array(11,326,360,751),690=>array(-67,205,197,751),691=>array(21,326,310,640),692=>array(21,319,310,632),693=>array(31,205,353,632),694=>array(-15,326,349,632),695=>array(47,326,539,632),696=>array(20,205,403,632),697=>array(70,557,196,800),698=>array(70,557,394,800),699=>array(101,418,351,729),700=>array(65,418,313,729),701=>array(178,616,312,856),702=>array(151,481,301,760),703=>array(143,481,293,760),704=>array(39,326,313,751),705=>array(31,326,336,751),706=>array(166,517,417,843),707=>array(145,517,396,843),708=>array(113,561,407,800),709=>array(155,561,449,800),710=>array(95,616,435,800),711=>array(136,616,475,800),712=>array(72,488,203,759),713=>array(139,668,433,760),714=>array(204,616,485,800),715=>array(118,616,334,800),716=>array(72,-81,203,190),717=>array(-10,-185,284,-93),718=>array(118,-238,334,-54),719=>array(204,-238,485,-54),720=>array(-7,0,269,547),721=>array(57,361,237,547),722=>array(114,269,264,547),723=>array(106,269,256,547),724=>array(104,238,318,458),725=>array(130,238,344,458),726=>array(41,119,333,427),727=>array(41,229,254,317),728=>array(149,639,447,784),729=>array(215,654,357,774),730=>array(166,605,416,883),731=>array(66,-196,256,0),732=>array(119,638,450,778),733=>array(128,616,507,800),734=>array(-11,213,312,524),735=>array(146,616,427,800),736=>array(32,213,412,637),737=>array(11,326,187,751),738=>array(10,318,320,640),739=>array(-18,326,384,632),740=>array(31,326,336,751),741=>array(131,0,424,693),742=>array(105,0,424,693),743=>array(79,0,424,693),744=>array(52,0,424,693),745=>array(26,0,424,693),748=>array(13,-260,307,-21),749=>array(128,605,443,822),750=>array(66,418,551,729),755=>array(82,-240,333,38),759=>array(79,-221,410,-109),768=>array(-233,616,-17,800),769=>array(-145,616,137,800),770=>array(-259,616,81,800),771=>array(-232,638,99,778),772=>array(-212,668,82,760),773=>array(-312,663,157,755),774=>array(-199,639,98,784),775=>array(-166,617,17,760),776=>array(-215,654,84,774),777=>array(-326,616,-105,843),778=>array(-180,605,70,883),779=>array(-220,616,158,800),780=>array(-213,616,127,800),781=>array(-118,615,4,832),782=>array(-201,615,87,832),783=>array(-251,616,63,800),784=>array(-199,642,98,882),785=>array(-226,639,72,784),786=>array(-238,418,-30,563),787=>array(-282,595,-117,844),788=>array(-259,595,-117,844),789=>array(-92,616,92,800),790=>array(-426,-276,-210,-93),791=>array(-365,-276,-84,-93),792=>array(-350,-240,-169,-6),793=>array(-286,-240,-106,-6),794=>array(-194,658,66,929),795=>array(-119,361,75,570),796=>array(-298,-240,-174,-11),797=>array(-363,-240,-103,-59),798=>array(-351,-240,-90,-59),799=>array(-341,-240,-115,-6),800=>array(-267,-202,-6,-110),801=>array(-463,-216,-95,117),802=>array(-279,-216,11,117),803=>array(-371,-212,-228,-92),804=>array(-398,-212,-99,-92),805=>array(-330,-240,-123,-11),806=>array(-353,-236,-145,-91),807=>array(-431,-196,-217,0),808=>array(-384,-196,-194,0),809=>array(-327,-310,-206,-93),810=>array(-380,-237,-71,-54),811=>array(-429,-239,-67,-94),812=>array(-373,-240,-33,-57),813=>array(-413,-240,-73,-57),814=>array(-382,-239,-84,-94),815=>array(-442,-240,-145,-95),816=>array(-433,-234,-102,-94),817=>array(-396,-185,-102,-93),818=>array(-509,-236,-25,-143),819=>array(-512,-236,-4,-9),820=>array(-563,212,1,415),821=>array(-433,214,-76,309),822=>array(-762,214,-69,309),823=>array(-638,-46,4,594),824=>array(-803,-36,39,765),825=>array(-277,-240,-153,-11),826=>array(-380,-238,-71,-55),827=>array(-320,-241,-67,-6),828=>array(-452,-239,-89,-94),829=>array(-353,562,-99,819),830=>array(-263,595,-91,867),831=>array(-459,528,9,755),832=>array(-233,616,-17,800),833=>array(-145,616,137,800),834=>array(-232,638,99,778),835=>array(-282,595,-117,844),836=>array(-310,654,84,978),837=>array(-328,-208,-219,-45),838=>array(-376,639,-74,786),839=>array(-341,-226,-109,-35),840=>array(-358,-240,-92,-47),841=>array(-327,-240,-100,-21),842=>array(-390,616,-61,800),843=>array(-391,567,-60,850),844=>array(-394,573,-28,835),845=>array(-413,-230,-37,-30),846=>array(-334,-240,-127,-45),849=>array(-289,610,-137,888),850=>array(-226,604,72,882),851=>array(-340,-240,-111,-9),855=>array(-313,610,-161,888),856=>array(0,654,143,774),858=>array(-400,-240,-52,-11),860=>array(-424,-237,378,-79),861=>array(-250,802,552,960),862=>array(-262,797,557,889),863=>array(-434,-185,385,-93),864=>array(-262,756,414,894),865=>array(-250,769,552,927),866=>array(-480,-230,338,-30),880=>array(19,0,561,729),881=>array(27,0,444,547),882=>array(79,0,901,729),883=>array(79,0,734,729),884=>array(70,557,196,800),885=>array(49,-208,217,35),886=>array(19,0,734,729),887=>array(27,0,603,547),890=>array(119,-208,228,-45),891=>array(-7,-14,483,560),892=>array(33,-14,523,560),893=>array(-7,-14,483,560),894=>array(-32,-142,291,547),900=>array(194,616,475,800),901=>array(136,654,531,978),902=>array(-38,0,643,800),903=>array(75,253,268,442),904=>array(21,0,748,800),905=>array(26,0,888,800),906=>array(23,0,469,800),908=>array(25,-14,766,800),910=>array(18,0,960,800),911=>array(-1,0,770,800),912=>array(44,-19,465,978),913=>array(-59,0,622,729),914=>array(19,0,629,729),915=>array(19,0,613,729),916=>array(-60,0,628,729),917=>array(19,0,603,729),918=>array(-23,0,667,729),919=>array(19,0,734,729),920=>array(35,-14,729,742),921=>array(19,0,316,729),922=>array(19,0,753,729),923=>array(-60,0,628,729),924=>array(19,0,877,729),925=>array(19,0,734,729),926=>array(24,0,557,729),927=>array(32,-14,733,742),928=>array(19,0,734,729),929=>array(19,0,647,729),931=>array(19,0,603,729),932=>array(43,0,673,729),933=>array(57,0,729,729),934=>array(39,0,726,729),935=>array(-46,0,731,729),936=>array(70,0,779,729),937=>array(-41,0,730,742),938=>array(19,0,405,927),939=>array(57,0,729,927),940=>array(34,-12,623,800),941=>array(24,-14,510,800),942=>array(44,-208,598,800),943=>array(38,-19,392,800),944=>array(48,-10,594,978),945=>array(34,-12,623,559),946=>array(-10,-208,594,773),947=>array(60,-208,666,547),948=>array(14,-14,571,768),949=>array(24,-14,468,560),950=>array(28,-208,565,760),951=>array(44,-208,598,560),952=>array(25,-11,593,768),953=>array(38,-19,282,547),954=>array(27,0,611,547),955=>array(-40,0,477,760),956=>array(-24,-209,603,547),957=>array(62,0,588,547),958=>array(23,-208,565,760),959=>array(32,-14,586,560),960=>array(65,-19,708,547),961=>array(8,-208,629,562),962=>array(49,-208,536,560),963=>array(33,-14,703,547),964=>array(46,-19,601,547),965=>array(48,-10,580,547),966=>array(68,-208,677,552),967=>array(-43,-208,624,547),968=>array(71,-208,718,547),969=>array(30,-13,751,547),970=>array(44,-19,366,774),971=>array(48,-10,580,774),972=>array(32,-14,586,800),973=>array(48,-10,580,800),974=>array(30,-13,751,800),975=>array(37,-208,774,729),976=>array(49,-11,541,768),977=>array(41,-11,551,768),978=>array(57,0,677,729),979=>array(21,0,890,800),980=>array(57,0,677,927),981=>array(53,-208,656,760),982=>array(30,-13,808,547),983=>array(34,-188,668,547),984=>array(62,-208,737,742),985=>array(56,-208,597,560),986=>array(63,-208,692,729),987=>array(57,-208,553,547),988=>array(19,0,603,729),989=>array(-132,-208,473,760),990=>array(19,2,614,729),991=>array(61,0,527,759),992=>array(92,-208,743,742),993=>array(-13,-180,451,559),994=>array(29,-213,944,729),995=>array(72,-208,718,547),996=>array(33,-208,729,742),997=>array(31,-208,615,560),998=>array(18,-213,775,729),999=>array(-15,-14,663,575),1000=>array(-26,-208,649,745),1001=>array(-14,-208,564,560),1002=>array(-13,0,726,742),1003=>array(-6,0,606,560),1004=>array(23,-14,712,758),1005=>array(67,-14,665,758),1006=>array(21,-208,621,729),1007=>array(38,-208,553,726),1008=>array(17,-6,651,547),1009=>array(44,-216,622,560),1010=>array(33,-14,523,560),1011=>array(-115,-216,319,760),1012=>array(32,-14,733,742),1013=>array(61,-14,542,560),1014=>array(-23,-14,458,560),1015=>array(19,0,625,729),1016=>array(-9,-208,609,760),1017=>array(32,-14,652,742),1018=>array(19,0,876,729),1019=>array(0,-208,650,547),1020=>array(-28,-208,621,560),1021=>array(-12,-14,603,742),1022=>array(32,-14,652,742),1023=>array(-12,-14,603,742),1024=>array(19,0,603,927),1025=>array(19,0,603,927),1026=>array(61,-200,718,729),1027=>array(19,0,613,927),1028=>array(36,-14,660,742),1029=>array(13,-14,599,742),1030=>array(19,0,316,729),1031=>array(19,0,422,927),1032=>array(-149,-200,316,729),1033=>array(-22,0,973,729),1034=>array(19,0,935,729),1035=>array(43,0,701,729),1036=>array(19,0,772,927),1037=>array(19,0,734,927),1038=>array(69,0,731,927),1039=>array(32,-157,748,729),1040=>array(-59,0,622,729),1041=>array(19,0,643,729),1042=>array(19,0,629,729),1043=>array(19,0,613,729),1044=>array(-23,-157,732,729),1045=>array(19,0,603,729),1046=>array(-51,0,1124,729),1047=>array(-0,-14,602,742),1048=>array(19,0,734,729),1049=>array(19,0,734,927),1050=>array(19,0,772,729),1051=>array(-22,0,729,729),1052=>array(19,0,877,729),1053=>array(19,0,734,729),1054=>array(32,-14,733,742),1055=>array(19,0,734,729),1056=>array(19,0,647,729),1057=>array(32,-14,652,742),1058=>array(43,0,673,729),1059=>array(69,0,731,729),1060=>array(40,0,855,729),1061=>array(-46,0,731,729),1062=>array(32,-157,756,729),1063=>array(90,0,708,729),1064=>array(19,0,1093,729),1065=>array(32,-157,1114,729),1066=>array(83,0,782,729),1067=>array(19,0,914,729),1068=>array(19,0,604,729),1069=>array(0,-14,624,742),1070=>array(19,-14,1016,742),1071=>array(-6,0,674,729),1072=>array(15,-14,550,560),1073=>array(21,-14,576,792),1074=>array(27,0,534,547),1075=>array(25,0,495,547),1076=>array(-9,-138,663,547),1077=>array(32,-14,576,560),1078=>array(-35,0,914,547),1079=>array(-1,-14,481,560),1080=>array(27,0,603,547),1081=>array(27,0,603,765),1082=>array(27,0,628,547),1083=>array(1,0,632,547),1084=>array(25,0,706,547),1085=>array(25,0,592,547),1086=>array(32,-14,586,560),1087=>array(25,0,592,547),1088=>array(-9,-208,609,560),1089=>array(33,-14,523,560),1090=>array(30,0,563,547),1091=>array(0,-216,619,547),1092=>array(42,-208,851,760),1093=>array(-37,0,604,547),1094=>array(40,-138,614,547),1095=>array(72,0,564,547),1096=>array(27,0,923,547),1097=>array(40,-138,942,547),1098=>array(46,0,626,547),1099=>array(27,0,790,547),1100=>array(27,0,515,547),1101=>array(15,-14,501,560),1102=>array(27,-14,842,560),1103=>array(-21,0,552,547),1104=>array(32,-14,576,803),1105=>array(32,-14,576,774),1106=>array(46,-216,584,760),1107=>array(25,0,544,803),1108=>array(32,-14,519,560),1109=>array(9,-14,504,560),1110=>array(27,0,319,760),1111=>array(27,0,365,774),1112=>array(-115,-216,319,760),1113=>array(-9,0,834,547),1114=>array(27,0,807,547),1115=>array(28,0,560,760),1116=>array(27,0,628,803),1117=>array(27,0,603,803),1118=>array(0,-216,619,765),1119=>array(40,-138,606,547),1120=>array(29,-14,943,729),1121=>array(30,-13,751,547),1122=>array(69,0,693,729),1123=>array(32,0,593,731),1124=>array(19,-14,910,742),1125=>array(27,-14,729,560),1126=>array(-57,0,822,729),1127=>array(-26,0,679,547),1128=>array(19,0,1152,729),1129=>array(27,0,940,547),1130=>array(-20,0,766,729),1131=>array(-12,0,615,547),1132=>array(18,0,1069,729),1133=>array(25,0,903,547),1134=>array(-22,-208,576,938),1135=>array(-22,-193,473,756),1136=>array(66,0,1014,729),1137=>array(55,-208,990,759),1138=>array(32,-14,733,742),1139=>array(32,-14,586,560),1140=>array(67,0,807,742),1141=>array(53,0,659,560),1142=>array(67,0,807,930),1143=>array(53,0,659,800),1144=>array(51,-216,1067,742),1145=>array(56,-216,989,565),1146=>array(36,-14,930,742),1147=>array(31,-14,741,560),1148=>array(33,-14,1213,928),1149=>array(28,-13,1016,828),1150=>array(29,-14,943,910),1151=>array(30,-13,751,746),1152=>array(36,-208,659,742),1153=>array(30,-208,516,560),1154=>array(17,-33,478,488),1155=>array(-547,606,-70,822),1156=>array(-385,638,-10,784),1157=>array(-321,595,-191,785),1158=>array(-346,595,-191,785),1159=>array(-730,592,1,788),1160=>array(-960,-179,349,928),1161=>array(-876,-280,291,1022),1162=>array(19,-208,801,927),1163=>array(25,-208,673,765),1164=>array(19,0,604,729),1165=>array(24,0,494,702),1166=>array(19,0,646,729),1167=>array(-9,-208,604,560),1168=>array(19,0,639,878),1169=>array(25,0,521,700),1170=>array(15,0,638,729),1171=>array(9,0,515,547),1172=>array(19,-200,638,729),1173=>array(25,-216,499,547),1174=>array(-37,-157,1138,729),1175=>array(-22,-138,925,547),1176=>array(-0,-196,602,742),1177=>array(-1,-196,481,560),1178=>array(32,-157,786,729),1179=>array(40,-138,641,547),1180=>array(19,0,772,729),1181=>array(27,0,628,547),1182=>array(19,0,772,729),1183=>array(9,0,610,760),1184=>array(61,0,950,729),1185=>array(46,0,761,547),1186=>array(32,-157,813,729),1187=>array(40,-138,688,547),1188=>array(19,0,1032,729),1189=>array(25,0,808,547),1190=>array(19,-200,1057,729),1191=>array(25,-216,813,547),1192=>array(35,-14,788,743),1193=>array(35,-14,719,560),1194=>array(32,-196,652,742),1195=>array(33,-196,523,560),1196=>array(57,-157,687,729),1197=>array(44,-138,578,547),1198=>array(57,0,729,729),1199=>array(59,-216,619,547),1200=>array(55,0,725,729),1201=>array(57,-216,637,547),1202=>array(-33,-157,745,729),1203=>array(-22,-138,618,547),1204=>array(57,-157,954,729),1205=>array(44,-138,861,547),1206=>array(116,-157,789,729),1207=>array(92,-138,657,547),1208=>array(102,0,708,729),1209=>array(79,0,562,547),1210=>array(95,0,714,729),1211=>array(27,0,589,760),1212=>array(38,-14,886,742),1213=>array(26,-14,692,560),1214=>array(38,-184,886,742),1215=>array(26,-161,692,560),1216=>array(19,0,316,729),1217=>array(-51,0,1124,927),1218=>array(-35,0,914,784),1219=>array(19,-200,756,729),1220=>array(27,-216,611,547),1221=>array(-42,-208,796,729),1222=>array(-34,-208,672,547),1223=>array(19,-200,734,729),1224=>array(25,-216,592,547),1225=>array(19,-208,800,729),1226=>array(25,-208,673,547),1227=>array(116,-157,722,729),1228=>array(92,-138,576,547),1229=>array(19,-208,943,729),1230=>array(25,-208,787,547),1231=>array(27,0,319,760),1232=>array(-59,0,622,936),1233=>array(15,-14,550,772),1234=>array(-59,0,622,927),1235=>array(15,-14,550,774),1236=>array(-70,0,965,729),1237=>array(15,-14,907,560),1238=>array(19,0,603,927),1239=>array(32,-14,576,784),1240=>array(32,-14,737,742),1241=>array(38,-14,567,560),1242=>array(32,-14,737,927),1243=>array(38,-14,567,774),1244=>array(-51,0,1124,927),1245=>array(-35,0,914,774),1246=>array(-0,-14,602,927),1247=>array(-1,-14,486,774),1248=>array(18,-33,669,729),1249=>array(-21,-215,548,547),1250=>array(19,0,734,914),1251=>array(27,0,603,763),1252=>array(19,0,734,927),1253=>array(27,0,603,774),1254=>array(32,-14,733,927),1255=>array(32,-14,586,774),1256=>array(32,-14,733,742),1257=>array(32,-14,586,560),1258=>array(32,-14,733,927),1259=>array(32,-14,586,774),1260=>array(0,-14,624,927),1261=>array(15,-14,501,774),1262=>array(69,0,731,914),1263=>array(0,-216,619,763),1264=>array(69,0,731,927),1265=>array(0,-216,619,774),1266=>array(69,0,731,927),1267=>array(0,-216,619,800),1268=>array(90,0,708,927),1269=>array(72,0,564,774),1270=>array(32,-157,626,729),1271=>array(40,-138,509,547),1272=>array(19,0,914,927),1273=>array(27,0,790,774),1274=>array(34,-216,657,729),1275=>array(28,-217,534,547),1276=>array(-29,-200,749,729),1277=>array(-16,-216,625,547),1278=>array(-47,0,731,729),1279=>array(-35,0,606,547),1280=>array(33,0,667,729),1281=>array(15,0,518,547),1282=>array(31,-14,1005,729),1283=>array(14,-14,781,547),1284=>array(124,-14,957,742),1285=>array(94,-14,769,560),1286=>array(124,-208,684,742),1287=>array(94,-208,571,560),1288=>array(-43,-14,1067,729),1289=>array(-34,-14,855,547),1290=>array(20,-14,1100,729),1291=>array(25,-14,861,547),1292=>array(36,-14,705,742),1293=>array(31,-14,516,546),1294=>array(42,-14,793,729),1295=>array(30,-14,654,547),1296=>array(33,-14,587,742),1297=>array(24,-14,468,560),1298=>array(-5,-200,747,729),1299=>array(21,-216,650,547),1300=>array(-22,0,1194,729),1301=>array(1,0,987,547),1302=>array(19,0,996,729),1303=>array(-9,-208,907,560),1304=>array(-6,0,962,729),1305=>array(-21,-14,869,560),1306=>array(32,-146,733,742),1307=>array(32,-208,614,560),1308=>array(96,0,1029,729),1309=>array(78,0,834,547),1310=>array(19,0,772,729),1311=>array(27,0,628,547),1312=>array(-22,-200,1051,729),1313=>array(1,-216,852,547),1314=>array(19,-200,1056,729),1315=>array(25,-216,813,547),1316=>array(32,-157,814,729),1317=>array(40,-138,688,547),1329=>array(67,-38,765,729),1330=>array(19,0,667,743),1331=>array(45,0,725,743),1332=>array(33,0,729,743),1333=>array(70,-14,687,729),1334=>array(16,0,678,743),1335=>array(19,0,657,729),1336=>array(19,0,667,743),1337=>array(19,-13,918,742),1338=>array(10,-14,760,729),1339=>array(19,0,634,729),1340=>array(19,0,510,729),1341=>array(19,-14,919,729),1342=>array(83,-12,778,741),1343=>array(87,0,671,729),1344=>array(-15,-46,625,729),1345=>array(29,-48,678,743),1346=>array(28,0,673,743),1347=>array(-20,0,660,735),1348=>array(70,-14,844,729),1349=>array(37,-14,638,743),1350=>array(42,-14,687,729),1351=>array(44,-14,686,729),1352=>array(19,0,661,743),1353=>array(45,-48,652,743),1354=>array(28,0,801,743),1355=>array(6,0,668,743),1356=>array(19,0,777,743),1357=>array(61,-14,712,729),1358=>array(31,0,673,729),1359=>array(33,-14,632,743),1360=>array(19,0,667,743),1361=>array(37,-14,638,743),1362=>array(19,0,599,729),1363=>array(21,0,811,729),1364=>array(-44,0,667,743),1365=>array(32,-14,732,742),1366=>array(27,-14,818,729),1369=>array(143,481,293,760),1370=>array(66,418,314,729),1371=>array(108,616,450,800),1372=>array(104,595,531,893),1373=>array(-1,616,284,849),1374=>array(105,586,587,878),1375=>array(147,618,560,893),1377=>array(66,-13,917,547),1378=>array(-9,-208,589,560),1379=>array(39,-208,673,559),1380=>array(27,-208,677,560),1381=>array(53,-14,615,760),1382=>array(34,-208,637,559),1383=>array(27,0,580,760),1384=>array(-9,-208,588,560),1385=>array(-9,-208,759,560),1386=>array(39,-14,747,760),1387=>array(-9,-208,582,760),1388=>array(-9,-208,347,547),1389=>array(-9,-208,957,760),1390=>array(35,-14,647,760),1391=>array(61,-208,615,760),1392=>array(27,0,582,760),1393=>array(9,-13,534,760),1394=>array(27,-208,641,560),1395=>array(47,-13,656,768),1396=>array(61,-13,784,760),1397=>array(-115,-216,282,547),1398=>array(2,-13,615,760),1399=>array(-54,-208,468,560),1400=>array(27,0,582,560),1401=>array(-61,-208,330,547),1402=>array(53,-208,911,547),1403=>array(-23,-208,545,560),1404=>array(27,0,598,560),1405=>array(61,-13,615,547),1406=>array(61,-208,652,760),1407=>array(56,-13,877,560),1408=>array(-9,-208,582,560),1409=>array(17,-216,613,559),1410=>array(27,0,448,547),1411=>array(56,-208,877,760),1412=>array(-136,-208,604,560),1413=>array(33,-14,587,560),1414=>array(27,-190,779,760),1415=>array(60,-14,782,760),1417=>array(37,0,291,547),1418=>array(86,179,387,359),1456=>array(247,-229,374,-10),1457=>array(135,-229,471,-10),1458=>array(126,-229,462,-10),1459=>array(115,-229,462,-10),1460=>array(258,-171,363,-73),1461=>array(192,-171,429,-73),1462=>array(214,-229,429,-10),1463=>array(81,-171,406,0),1464=>array(99,-217,402,0),1465=>array(-31,625,75,723),1466=>array(-31,625,75,723),1467=>array(171,-239,472,-5),1468=>array(264,225,370,322),1469=>array(250,-217,372,-22),1470=>array(36,413,337,555),1471=>array(119,547,422,710),1472=>array(23,-98,311,645),1473=>array(735,613,840,710),1474=>array(183,613,289,710),1475=>array(40,0,294,547),1478=>array(22,0,441,547),1479=>array(170,-229,473,-10),1488=>array(94,0,657,547),1489=>array(39,0,531,547),1490=>array(40,-9,385,547),1491=>array(114,0,586,547),1492=>array(90,0,595,547),1493=>array(82,0,323,547),1494=>array(84,0,417,547),1495=>array(82,0,588,547),1496=>array(127,-13,608,553),1497=>array(88,164,301,547),1498=>array(114,-240,494,547),1499=>array(39,0,513,547),1500=>array(114,0,570,711),1501=>array(82,0,597,547),1502=>array(76,0,621,554),1503=>array(40,-240,323,547),1504=>array(39,0,387,547),1505=>array(130,-13,610,547),1506=>array(32,-101,614,547),1507=>array(142,-240,577,547),1508=>array(82,0,590,547),1509=>array(106,-240,584,548),1510=>array(48,0,604,547),1511=>array(46,-240,690,546),1512=>array(114,0,517,547),1513=>array(80,0,771,547),1514=>array(10,-4,585,547),1520=>array(82,0,612,547),1521=>array(88,0,612,547),1522=>array(88,164,589,547),1523=>array(59,361,340,547),1524=>array(59,361,580,547),3647=>array(2,-147,578,760),3713=>array(13,-14,677,560),3714=>array(10,-14,654,560),3716=>array(12,-14,629,558),3719=>array(2,-241,493,593),3720=>array(40,0,641,561),3722=>array(40,-269,672,584),3725=>array(13,-24,690,610),3732=>array(16,-14,604,593),3733=>array(15,-19,604,603),3734=>array(31,-240,656,593),3735=>array(-1,-14,706,560),3737=>array(-8,-33,662,593),3738=>array(12,-15,645,613),3739=>array(-1,-15,666,760),3740=>array(26,-12,857,665),3741=>array(21,-14,753,760),3742=>array(45,-14,743,604),3743=>array(31,-14,764,760),3745=>array(-6,-14,744,547),3746=>array(-0,-23,710,760),3747=>array(16,-10,691,615),3749=>array(8,-33,646,593),3751=>array(4,-33,602,593),3754=>array(7,-21,774,724),3755=>array(29,-21,866,620),3757=>array(24,-20,620,606),3758=>array(13,-14,792,698),3759=>array(70,-259,839,648),3760=>array(4,27,614,606),3761=>array(-584,610,-26,896),3762=>array(45,0,520,593),3763=>array(-431,0,520,875),3764=>array(-590,622,-57,950),3765=>array(-590,633,-1,962),3766=>array(-590,622,-57,950),3767=>array(-590,633,-1,962),3768=>array(-372,-385,-148,-55),3769=>array(-431,-316,-135,-28),3771=>array(-591,610,-29,896),3772=>array(-620,-311,15,-48),3773=>array(-23,-220,682,776),3776=>array(47,-13,422,561),3777=>array(47,-13,759,561),3778=>array(22,-14,438,936),3779=>array(61,-14,576,879),3780=>array(42,-35,497,809),3782=>array(29,-240,658,582),3784=>array(-388,659,-251,844),3785=>array(-572,622,-17,918),3786=>array(-605,621,33,965),3787=>array(-478,612,-160,917),3788=>array(-460,603,175,866),3789=>array(-431,668,-206,875),3792=>array(59,-29,650,563),3793=>array(49,-139,659,586),3794=>array(1,-80,551,711),3795=>array(-44,-14,857,981),3796=>array(28,-156,583,711),3797=>array(28,-156,583,711),3798=>array(4,-14,866,950),3799=>array(32,-240,673,560),3800=>array(77,-269,690,582),3801=>array(34,-14,788,564),3804=>array(29,-21,1221,620),3805=>array(29,-21,1226,620),4256=>array(100,-14,836,819),4257=>array(125,-0,663,819),4258=>array(135,-138,605,828),4259=>array(87,-15,813,819),4260=>array(120,0,599,828),4261=>array(122,0,749,828),4262=>array(129,-14,677,819),4263=>array(105,-14,894,828),4264=>array(114,0,506,862),4265=>array(97,0,588,819),4266=>array(85,-14,751,820),4267=>array(80,-14,848,819),4268=>array(21,0,620,819),4269=>array(95,-157,798,829),4270=>array(126,-14,798,822),4271=>array(126,0,667,823),4272=>array(68,-15,872,820),4273=>array(75,-15,563,820),4274=>array(21,-0,616,828),4275=>array(96,-170,798,828),4276=>array(114,0,826,825),4277=>array(90,0,715,820),4278=>array(22,0,617,828),4279=>array(114,0,659,820),4280=>array(59,-14,663,820),4281=>array(21,0,569,819),4282=>array(102,-14,792,827),4283=>array(80,-15,833,820),4284=>array(21,-0,628,819),4285=>array(67,-15,584,828),4286=>array(21,-0,667,819),4287=>array(24,0,792,819),4288=>array(99,-14,811,820),4289=>array(21,0,583,820),4290=>array(70,-15,624,828),4291=>array(85,0,636,820),4292=>array(118,0,644,820),4293=>array(39,-14,750,828),4304=>array(68,-14,479,599),4305=>array(78,-14,497,823),4306=>array(28,-232,509,561),4307=>array(37,-225,744,557),4308=>array(23,-232,496,557),4309=>array(22,-232,506,557),4310=>array(67,-14,483,828),4311=>array(76,-14,739,557),4312=>array(67,0,501,557),4313=>array(22,-232,499,542),4314=>array(86,-225,969,562),4315=>array(78,-14,560,828),4316=>array(80,-14,566,819),4317=>array(83,-0,728,557),4318=>array(70,-14,531,818),4319=>array(22,-232,543,560),4320=>array(82,0,735,830),4321=>array(83,-14,504,818),4322=>array(56,-232,598,670),4323=>array(42,-232,532,604),4324=>array(84,-232,760,558),4325=>array(22,-232,585,818),4326=>array(79,-225,734,557),4327=>array(22,-232,542,549),4328=>array(57,-14,549,828),4329=>array(35,0,505,828),4330=>array(59,-232,551,548),4331=>array(77,-14,593,818),4332=>array(82,-15,617,828),4333=>array(31,-232,554,818),4334=>array(85,-14,498,818),4335=>array(-6,-232,488,580),4336=>array(66,-15,542,823),4337=>array(71,-14,549,823),4338=>array(15,-146,489,557),4339=>array(22,-232,543,558),4340=>array(23,-232,557,828),4341=>array(59,-14,591,828),4342=>array(79,-232,758,557),4343=>array(26,-232,496,557),4344=>array(22,-232,493,549),4345=>array(83,-232,564,561),4346=>array(62,-111,502,557),4347=>array(26,0,401,500),4348=>array(111,400,382,828),5121=>array(68,0,756,729),5122=>array(-60,0,628,1050),5123=>array(-60,0,628,729),5124=>array(-60,0,628,928),5125=>array(19,0,759,729),5126=>array(19,0,759,928),5127=>array(19,0,759,927),5129=>array(19,0,759,729),5130=>array(56,0,795,729),5131=>array(56,0,795,928),5132=>array(72,0,976,729),5133=>array(68,0,843,729),5134=>array(72,0,848,729),5135=>array(-60,0,843,729),5136=>array(72,0,848,928),5137=>array(-60,0,843,928),5138=>array(72,0,979,729),5139=>array(19,0,961,729),5140=>array(72,0,979,928),5141=>array(19,0,961,928),5142=>array(19,0,759,928),5143=>array(72,0,1015,729),5144=>array(56,0,963,729),5145=>array(72,0,1015,928),5146=>array(56,0,963,928),5147=>array(56,0,795,928),5149=>array(72,607,214,728),5150=>array(18,326,391,734),5151=>array(7,338,362,722),5152=>array(49,338,320,722),5153=>array(48,392,333,711),5154=>array(26,352,311,670),5155=>array(29,392,307,670),5156=>array(51,392,307,670),5157=>array(-2,327,497,749),5158=>array(18,326,409,734),5159=>array(72,304,214,424),5160=>array(47,494,312,569),5161=>array(47,392,312,670),5162=>array(67,392,331,693),5163=>array(68,0,1030,729),5164=>array(-60,0,826,729),5165=>array(19,0,1033,729),5166=>array(56,0,1105,729),5167=>array(68,0,756,729),5168=>array(-60,0,628,1050),5169=>array(-60,0,628,729),5170=>array(-60,0,628,928),5171=>array(2,0,742,729),5172=>array(2,0,742,928),5173=>array(2,0,742,927),5175=>array(2,0,742,729),5176=>array(46,0,786,729),5177=>array(46,0,786,928),5178=>array(72,0,976,729),5179=>array(68,0,843,729),5180=>array(72,0,848,729),5181=>array(-60,0,843,729),5182=>array(72,0,848,928),5183=>array(-60,0,843,928),5184=>array(72,0,962,729),5185=>array(2,0,961,729),5186=>array(72,0,962,928),5187=>array(2,0,961,928),5188=>array(72,0,1006,729),5189=>array(46,0,963,729),5190=>array(72,0,1006,928),5191=>array(46,0,963,928),5192=>array(46,0,786,927),5193=>array(43,326,503,727),5194=>array(18,326,191,734),5196=>array(71,-14,713,729),5197=>array(18,0,660,1050),5198=>array(18,0,660,743),5199=>array(18,0,660,928),5200=>array(2,0,687,729),5201=>array(2,0,687,928),5202=>array(2,0,687,927),5204=>array(2,0,687,729),5205=>array(47,0,732,729),5206=>array(47,0,732,928),5207=>array(72,-14,933,729),5208=>array(71,-14,878,729),5209=>array(72,0,879,743),5210=>array(18,0,878,743),5211=>array(72,0,879,928),5212=>array(18,0,878,928),5213=>array(72,0,907,729),5214=>array(2,0,884,729),5215=>array(72,0,907,928),5216=>array(2,0,884,928),5217=>array(72,0,952,729),5218=>array(47,0,882,729),5219=>array(72,0,952,928),5220=>array(47,0,882,928),5221=>array(46,0,952,729),5222=>array(53,326,420,733),5223=>array(71,-14,890,734),5224=>array(18,0,890,743),5225=>array(2,0,906,734),5226=>array(47,0,900,734),5227=>array(58,0,607,743),5228=>array(18,0,653,1050),5229=>array(18,0,653,743),5230=>array(18,0,653,928),5231=>array(16,-14,651,729),5232=>array(16,-14,658,928),5233=>array(16,-14,736,927),5234=>array(62,-14,611,729),5235=>array(62,-14,611,928),5236=>array(72,0,865,743),5237=>array(58,0,813,743),5238=>array(72,0,866,743),5239=>array(18,0,813,743),5240=>array(72,0,866,928),5241=>array(18,0,813,928),5242=>array(72,-14,909,729),5243=>array(16,-14,813,729),5244=>array(72,-14,915,928),5245=>array(16,-14,813,928),5246=>array(72,-14,824,729),5247=>array(62,-14,813,729),5248=>array(72,-14,824,928),5249=>array(62,-14,813,928),5250=>array(46,-14,824,729),5251=>array(42,319,389,734),5252=>array(39,319,437,734),5253=>array(58,0,829,743),5254=>array(18,0,829,743),5255=>array(16,-14,829,734),5256=>array(62,-14,829,734),5257=>array(58,0,607,743),5258=>array(18,0,653,1050),5259=>array(18,0,653,743),5260=>array(18,0,653,928),5261=>array(16,-14,651,729),5262=>array(16,-14,664,928),5263=>array(16,-14,742,927),5264=>array(62,-14,611,729),5265=>array(62,-14,611,928),5266=>array(72,0,865,743),5267=>array(58,0,813,743),5268=>array(72,0,910,743),5269=>array(18,0,813,743),5270=>array(72,0,910,928),5271=>array(18,0,813,928),5272=>array(72,-14,909,729),5273=>array(16,-14,813,729),5274=>array(72,-14,921,928),5275=>array(16,-14,813,928),5276=>array(72,-14,868,729),5277=>array(62,-14,813,729),5278=>array(72,-14,868,928),5279=>array(62,-14,813,928),5280=>array(46,-14,868,729),5281=>array(42,319,389,734),5282=>array(42,319,437,734),5283=>array(63,0,545,729),5284=>array(19,0,603,1050),5285=>array(19,0,603,729),5286=>array(19,0,603,928),5287=>array(-40,0,545,729),5288=>array(-40,0,559,928),5289=>array(-40,0,637,927),5290=>array(19,0,500,729),5291=>array(19,0,500,928),5292=>array(72,0,774,729),5293=>array(63,0,704,729),5294=>array(72,0,816,729),5295=>array(19,0,721,729),5296=>array(72,0,816,928),5297=>array(19,0,721,928),5298=>array(72,0,774,729),5299=>array(-40,0,721,729),5300=>array(72,0,788,928),5301=>array(-40,0,721,928),5302=>array(72,0,713,729),5303=>array(19,0,721,729),5304=>array(72,0,713,928),5305=>array(19,0,721,928),5306=>array(46,0,713,729),5307=>array(18,326,320,734),5308=>array(49,326,479,733),5309=>array(18,326,378,734),5312=>array(92,-14,852,468),5313=>array(36,-14,856,781),5314=>array(36,-14,856,468),5315=>array(36,-14,856,667),5316=>array(-18,0,802,482),5317=>array(-18,0,802,667),5318=>array(-18,0,802,667),5319=>array(37,0,796,482),5320=>array(37,0,796,667),5321=>array(72,-14,1077,468),5322=>array(92,-14,1058,468),5323=>array(72,0,1038,482),5324=>array(37,0,1041,482),5325=>array(72,0,1038,667),5326=>array(37,0,1041,667),5327=>array(37,0,796,667),5328=>array(54,477,534,742),5329=>array(39,319,433,734),5330=>array(31,477,546,742),5331=>array(92,0,851,468),5332=>array(35,0,854,781),5333=>array(35,0,854,468),5334=>array(35,0,854,667),5335=>array(-17,0,803,468),5336=>array(-17,0,803,667),5337=>array(-17,0,803,667),5338=>array(39,0,797,468),5339=>array(39,0,797,667),5340=>array(72,0,1069,468),5341=>array(92,0,1058,468),5342=>array(72,0,1121,468),5343=>array(35,0,1041,468),5344=>array(72,0,1121,667),5345=>array(35,0,1041,667),5346=>array(72,0,1070,468),5347=>array(-17,0,1028,468),5348=>array(72,0,1070,667),5349=>array(-17,0,1028,667),5350=>array(72,0,1063,468),5351=>array(39,0,1041,468),5352=>array(72,0,1063,667),5353=>array(39,0,1041,667),5354=>array(55,477,534,734),5356=>array(23,0,786,729),5357=>array(83,0,579,729),5358=>array(19,0,757,1050),5359=>array(19,0,684,729),5360=>array(19,0,696,928),5361=>array(-27,0,638,729),5362=>array(-27,0,646,928),5363=>array(-27,0,724,927),5364=>array(78,0,574,729),5365=>array(78,0,574,928),5366=>array(72,0,820,729),5367=>array(83,0,798,729),5368=>array(72,0,897,729),5369=>array(19,0,826,729),5370=>array(72,0,910,928),5371=>array(19,0,826,928),5372=>array(72,0,879,729),5373=>array(-27,0,798,729),5374=>array(72,0,887,928),5375=>array(-27,0,798,928),5376=>array(72,0,787,729),5377=>array(78,0,826,729),5378=>array(72,0,787,928),5379=>array(78,0,826,928),5380=>array(46,0,787,729),5381=>array(51,326,366,734),5382=>array(25,319,371,742),5383=>array(18,326,429,734),5392=>array(59,-14,772,743),5393=>array(6,-14,825,743),5394=>array(6,-14,825,928),5395=>array(30,-14,992,482),5396=>array(30,-14,992,667),5397=>array(32,-14,990,482),5398=>array(32,-14,990,667),5399=>array(72,-14,1029,743),5400=>array(59,-14,1017,743),5401=>array(72,-14,1082,743),5402=>array(6,-14,1017,743),5403=>array(72,-14,1082,928),5404=>array(6,-14,1017,928),5405=>array(72,-14,1258,482),5406=>array(30,-14,1213,482),5407=>array(72,-14,1258,667),5408=>array(30,-14,1213,667),5409=>array(72,-14,1256,482),5410=>array(32,-14,1213,482),5411=>array(72,-14,1256,667),5412=>array(32,-14,1213,667),5413=>array(52,469,624,747),5414=>array(56,0,620,729),5415=>array(19,0,627,1050),5416=>array(19,0,627,729),5417=>array(19,0,627,928),5418=>array(71,0,680,729),5419=>array(71,0,695,928),5420=>array(71,0,773,927),5421=>array(78,0,642,729),5422=>array(78,0,642,928),5423=>array(72,0,825,729),5424=>array(56,0,838,729),5425=>array(72,0,840,729),5426=>array(19,0,831,729),5427=>array(72,0,840,928),5428=>array(19,0,831,928),5429=>array(72,0,884,729),5430=>array(71,0,838,729),5431=>array(72,0,900,928),5432=>array(71,0,838,928),5433=>array(72,0,855,729),5434=>array(78,0,831,729),5435=>array(72,0,855,928),5436=>array(78,0,831,928),5437=>array(46,0,855,928),5438=>array(51,326,405,734),5440=>array(47,392,312,670),5441=>array(18,326,438,734),5442=>array(82,-14,896,468),5443=>array(92,-14,889,468),5444=>array(-18,0,796,482),5445=>array(40,0,837,781),5446=>array(40,0,837,482),5447=>array(40,0,837,667),5448=>array(19,0,645,729),5449=>array(19,0,645,928),5450=>array(19,0,601,729),5451=>array(59,0,641,729),5452=>array(59,0,641,928),5453=>array(15,0,641,729),5454=>array(72,0,884,928),5455=>array(59,0,798,928),5456=>array(66,326,430,727),5458=>array(2,0,764,729),5459=>array(88,0,755,743),5460=>array(2,-14,630,1050),5461=>array(2,-14,630,729),5462=>array(2,-14,630,928),5463=>array(45,0,786,663),5464=>array(45,0,786,928),5465=>array(62,0,807,663),5466=>array(62,0,807,928),5467=>array(72,0,1026,928),5468=>array(62,0,963,928),5469=>array(46,311,512,675),5470=>array(61,-14,712,743),5471=>array(61,-14,695,743),5472=>array(36,-14,670,743),5473=>array(19,-14,670,743),5474=>array(36,-14,670,928),5475=>array(19,-14,670,928),5476=>array(2,0,692,729),5477=>array(2,0,692,928),5478=>array(42,0,730,729),5479=>array(42,0,730,928),5480=>array(72,0,950,928),5481=>array(42,0,882,928),5482=>array(49,326,486,733),5492=>array(52,0,784,743),5493=>array(56,0,870,743),5494=>array(56,0,870,928),5495=>array(10,-14,824,729),5496=>array(10,-14,824,928),5497=>array(95,-14,828,729),5498=>array(95,-14,828,928),5499=>array(62,319,497,734),5500=>array(19,0,734,729),5501=>array(18,326,438,734),5502=>array(66,0,1099,1050),5503=>array(66,0,1099,743),5504=>array(66,0,1099,928),5505=>array(66,-14,1097,729),5506=>array(66,-14,1103,928),5507=>array(66,-14,1056,729),5508=>array(66,-14,1056,928),5509=>array(66,319,834,734),5514=>array(58,0,784,743),5515=>array(55,0,869,743),5516=>array(10,-14,824,729),5517=>array(95,-14,822,729),5518=>array(69,0,1416,1050),5519=>array(69,0,1416,743),5520=>array(69,0,1416,928),5521=>array(69,-14,1148,741),5522=>array(69,-14,1160,928),5523=>array(69,-14,1374,741),5524=>array(69,-14,1374,928),5525=>array(69,335,716,741),5526=>array(69,335,1099,741),5536=>array(14,0,846,709),5537=>array(14,0,846,709),5538=>array(-8,-242,824,468),5539=>array(-8,-242,824,667),5540=>array(60,-242,819,468),5541=>array(60,-242,819,667),5542=>array(66,344,546,734),5543=>array(56,0,665,729),5544=>array(-44,0,627,729),5545=>array(-44,0,627,928),5546=>array(71,0,742,729),5547=>array(71,0,742,928),5548=>array(33,0,643,729),5549=>array(33,0,643,928),5550=>array(32,326,405,734),5551=>array(20,-14,617,729),5598=>array(19,0,704,729),5601=>array(43,0,729,729),5702=>array(18,326,425,734),5703=>array(18,240,425,820),5742=>array(-18,0,384,306),5743=>array(66,0,1053,743),5744=>array(69,0,1371,743),5745=>array(69,0,1799,743),5746=>array(69,0,1799,928),5747=>array(69,-14,1531,741),5748=>array(69,-14,1505,928),5749=>array(69,-14,1757,741),5750=>array(69,-14,1757,928),7424=>array(-35,0,526,547),7425=>array(-48,0,721,547),7426=>array(38,-14,919,560),7427=>array(-8,0,509,547),7428=>array(33,-14,523,560),7429=>array(27,-1,553,547),7430=>array(10,-1,550,547),7431=>array(35,0,474,547),7432=>array(24,-14,465,560),7433=>array(9,-213,299,547),7434=>array(-4,-14,424,547),7435=>array(27,0,645,547),7436=>array(-23,0,426,547),7437=>array(25,0,706,547),7438=>array(27,0,603,547),7439=>array(32,-14,586,560),7440=>array(-7,-14,483,560),7441=>array(38,-27,556,573),7442=>array(18,31,543,515),7443=>array(40,-28,557,579),7444=>array(38,-14,941,560),7446=>array(13,273,555,560),7447=>array(65,-14,606,273),7448=>array(-2,0,480,547),7449=>array(-29,0,552,547),7450=>array(64,0,552,547),7451=>array(30,0,563,547),7452=>array(67,-14,596,547),7453=>array(28,10,617,560),7454=>array(35,11,807,561),7455=>array(-53,-238,644,560),7456=>array(57,0,611,547),7457=>array(78,0,834,547),7458=>array(-8,0,527,547),7459=>array(17,-14,530,547),7462=>array(27,0,497,547),7463=>array(-35,0,526,547),7464=>array(27,0,594,547),7465=>array(-2,0,480,547),7466=>array(88,0,676,547),7467=>array(1,0,632,547),7468=>array(-33,326,400,734),7469=>array(-36,326,604,734),7470=>array(16,326,392,734),7472=>array(16,326,441,734),7473=>array(16,326,375,734),7474=>array(16,326,382,734),7475=>array(28,318,440,742),7476=>array(16,326,458,734),7477=>array(16,326,194,734),7478=>array(-78,214,205,734),7479=>array(16,326,472,734),7480=>array(16,326,324,734),7481=>array(16,326,548,734),7482=>array(16,326,458,734),7483=>array(16,326,458,734),7484=>array(28,318,454,742),7485=>array(19,318,432,742),7486=>array(16,326,405,734),7487=>array(16,326,390,734),7488=>array(24,326,419,734),7489=>array(45,318,445,734),7490=>array(52,326,644,734),7491=>array(33,318,370,640),7492=>array(43,318,374,640),7493=>array(48,318,411,640),7494=>array(48,318,603,640),7495=>array(18,318,384,751),7496=>array(43,318,433,751),7497=>array(44,318,387,640),7498=>array(48,318,381,640),7499=>array(35,318,312,640),7500=>array(33,318,311,640),7501=>array(34,205,409,639),7502=>array(6,207,189,632),7503=>array(18,326,406,751),7504=>array(18,326,559,640),7505=>array(29,205,382,640),7506=>array(44,318,393,640),7507=>array(20,318,322,640),7508=>array(97,479,439,640),7509=>array(97,318,439,479),7510=>array(-5,209,384,640),7511=>array(64,326,329,719),7512=>array(38,318,390,632),7513=>array(49,332,420,640),7514=>array(42,318,578,632),7515=>array(75,326,424,632),7517=>array(-0,209,373,759),7518=>array(35,209,415,632),7519=>array(14,318,355,756),7520=>array(46,209,421,635),7521=>array(-22,209,389,632),7522=>array(10,0,185,425),7523=>array(21,0,310,313),7524=>array(38,-8,390,306),7525=>array(75,0,424,306),7526=>array(-0,-117,373,433),7527=>array(35,-117,415,306),7528=>array(-0,-117,384,314),7529=>array(46,-117,421,309),7530=>array(-22,-117,389,306),7543=>array(10,-216,606,559),7544=>array(16,326,458,734),7547=>array(27,0,463,547),7549=>array(-9,-208,678,560),7557=>array(75,-216,413,760),7579=>array(21,318,381,640),7580=>array(48,318,347,640),7581=>array(50,288,350,640),7582=>array(38,318,389,751),7583=>array(22,318,303,640),7584=>array(52,326,326,751),7585=>array(10,205,259,632),7586=>array(51,205,418,632),7587=>array(52,207,397,632),7588=>array(31,326,255,751),7589=>array(43,326,188,632),7590=>array(21,326,289,632),7591=>array(21,326,289,632),7592=>array(15,205,339,751),7593=>array(21,205,207,751),7594=>array(21,205,232,751),7595=>array(21,326,271,632),7596=>array(31,205,563,640),7597=>array(52,209,584,632),7598=>array(10,205,471,640),7599=>array(31,205,428,640),7600=>array(21,326,380,632),7601=>array(48,318,389,640),7602=>array(47,209,437,751),7603=>array(37,205,344,640),7604=>array(0,205,354,751),7605=>array(65,205,329,719),7606=>array(42,318,479,632),7607=>array(48,298,424,632),7608=>array(42,318,372,632),7609=>array(43,326,356,632),7610=>array(21,326,374,632),7611=>array(21,326,352,632),7612=>array(31,205,396,632),7613=>array(24,288,363,632),7614=>array(14,206,364,632),7615=>array(48,320,333,756),7620=>array(-435,616,-17,800),7621=>array(-406,616,-31,800),7622=>array(-421,616,-45,800),7623=>array(-435,616,-17,800),7624=>array(-446,616,-6,800),7625=>array(-479,616,26,800),7680=>array(-59,-240,622,729),7681=>array(15,-240,550,560),7682=>array(19,0,629,927),7683=>array(27,-14,609,941),7684=>array(19,-212,629,729),7685=>array(27,-212,609,760),7686=>array(19,-185,629,729),7687=>array(27,-185,609,760),7688=>array(32,-196,652,927),7689=>array(33,-196,523,800),7690=>array(19,0,708,927),7691=>array(32,-14,682,941),7692=>array(19,-212,708,729),7693=>array(32,-212,652,760),7694=>array(19,-185,708,729),7695=>array(32,-185,652,760),7696=>array(19,-194,708,729),7697=>array(30,-196,652,760),7698=>array(19,-240,708,729),7699=>array(32,-240,652,760),7700=>array(19,0,603,1057),7701=>array(32,-14,576,898),7702=>array(19,0,603,1057),7703=>array(32,-14,576,900),7704=>array(40,-203,624,729),7705=>array(32,-203,576,560),7706=>array(19,-221,603,729),7707=>array(32,-221,576,560),7708=>array(19,-196,603,927),7709=>array(32,-196,576,783),7710=>array(19,0,603,928),7711=>array(44,0,486,941),7712=>array(32,-14,700,899),7713=>array(18,-216,614,760),7714=>array(19,0,734,928),7715=>array(27,0,589,941),7716=>array(19,-212,734,729),7717=>array(27,-212,589,760),7718=>array(19,0,734,927),7719=>array(27,0,589,927),7720=>array(-55,-196,734,729),7721=>array(-40,-196,589,760),7722=>array(19,-239,734,729),7723=>array(27,-239,589,760),7724=>array(-97,-221,316,729),7725=>array(-97,-221,319,760),7726=>array(19,0,460,1057),7727=>array(27,0,430,903),7728=>array(19,0,753,927),7729=>array(27,0,645,982),7730=>array(19,-212,753,729),7731=>array(27,-212,645,760),7732=>array(19,-185,753,729),7733=>array(27,-185,645,760),7734=>array(19,-212,510,729),7735=>array(9,-212,319,760),7736=>array(19,-212,510,942),7737=>array(9,-212,405,914),7738=>array(19,-185,510,729),7739=>array(-62,-185,319,760),7740=>array(19,-240,510,729),7741=>array(-102,-240,319,760),7742=>array(19,0,877,927),7743=>array(27,0,886,800),7744=>array(19,0,877,928),7745=>array(27,0,886,759),7746=>array(19,-212,877,729),7747=>array(27,-212,886,560),7748=>array(19,0,734,927),7749=>array(27,0,589,759),7750=>array(19,-212,734,729),7751=>array(27,-212,589,560),7752=>array(19,-185,734,729),7753=>array(27,-185,589,560),7754=>array(19,-240,734,729),7755=>array(27,-240,589,560),7756=>array(32,-14,733,1057),7757=>array(32,-14,586,917),7758=>array(32,-14,733,1061),7759=>array(32,-14,586,900),7760=>array(32,-14,733,1057),7761=>array(32,-14,586,898),7762=>array(32,-14,733,1057),7763=>array(32,-14,586,900),7764=>array(19,0,647,927),7765=>array(-9,-208,609,800),7766=>array(19,0,647,928),7767=>array(-9,-208,609,759),7768=>array(19,0,617,928),7769=>array(27,0,491,759),7770=>array(19,-212,617,729),7771=>array(9,-212,491,560),7772=>array(19,-212,617,914),7773=>array(9,-212,491,759),7774=>array(19,-185,617,729),7775=>array(-62,-185,491,560),7776=>array(13,-14,599,928),7777=>array(9,-14,504,759),7778=>array(13,-212,599,742),7779=>array(9,-212,504,560),7780=>array(13,-14,647,928),7781=>array(9,-14,614,816),7782=>array(13,-14,621,1053),7783=>array(9,-14,544,875),7784=>array(13,-212,599,928),7785=>array(9,-212,504,762),7786=>array(43,0,673,928),7787=>array(39,0,458,941),7788=>array(43,-212,673,729),7789=>array(39,-212,458,702),7790=>array(43,-185,673,729),7791=>array(24,-185,458,702),7792=>array(35,-240,673,729),7793=>array(-18,-240,458,702),7794=>array(61,-212,712,729),7795=>array(54,-212,613,547),7796=>array(61,-221,712,729),7797=>array(54,-221,613,547),7798=>array(61,-203,712,729),7799=>array(54,-203,613,547),7800=>array(61,-14,712,1057),7801=>array(54,-14,613,917),7802=>array(61,-14,712,1043),7803=>array(54,-14,613,885),7804=>array(68,0,756,928),7805=>array(57,0,611,778),7806=>array(68,-212,756,729),7807=>array(57,-212,611,547),7808=>array(96,0,1029,931),7809=>array(78,0,834,803),7810=>array(96,0,1029,931),7811=>array(78,0,834,803),7812=>array(96,0,1029,927),7813=>array(78,0,834,774),7814=>array(96,0,1029,927),7815=>array(78,0,834,759),7816=>array(96,-212,1029,729),7817=>array(78,-212,834,547),7818=>array(-46,0,731,927),7819=>array(-37,0,604,759),7820=>array(-46,0,731,927),7821=>array(-37,0,604,774),7822=>array(57,0,729,928),7823=>array(0,-216,619,759),7824=>array(-23,0,667,927),7825=>array(-8,0,527,800),7826=>array(-23,-212,667,729),7827=>array(-8,-212,527,547),7828=>array(-23,-185,667,729),7829=>array(-8,-185,527,547),7830=>array(27,-185,589,760),7831=>array(39,0,458,927),7832=>array(78,0,834,883),7833=>array(0,-216,619,883),7834=>array(15,-14,743,760),7835=>array(44,0,486,941),7836=>array(-35,0,466,760),7837=>array(15,0,466,760),7838=>array(34,-14,727,743),7839=>array(14,-14,571,768),7840=>array(-59,-212,622,729),7841=>array(15,-212,550,560),7842=>array(-59,0,622,1025),7843=>array(15,-14,550,844),7844=>array(-59,0,768,1057),7845=>array(15,-14,716,876),7846=>array(-59,0,683,1057),7847=>array(15,-14,634,876),7848=>array(-59,0,756,1093),7849=>array(15,-14,696,913),7850=>array(-59,0,622,1068),7851=>array(15,-14,568,888),7852=>array(-59,-212,622,927),7853=>array(15,-212,550,800),7854=>array(-59,0,632,1057),7855=>array(15,-14,582,889),7856=>array(-59,0,622,1057),7857=>array(15,-14,550,889),7858=>array(-59,0,622,1121),7859=>array(15,-14,550,953),7860=>array(-59,0,624,1068),7861=>array(15,-14,567,900),7862=>array(-59,-212,622,936),7863=>array(15,-212,550,772),7864=>array(19,-212,603,729),7865=>array(32,-212,576,560),7866=>array(19,0,603,1025),7867=>array(32,-14,576,844),7868=>array(19,0,603,928),7869=>array(32,-14,576,778),7870=>array(19,0,725,1057),7871=>array(32,-14,733,876),7872=>array(19,0,695,1057),7873=>array(32,-14,649,876),7874=>array(19,0,720,1093),7875=>array(32,-14,718,913),7876=>array(19,0,603,1068),7877=>array(32,-14,583,888),7878=>array(19,-212,603,927),7879=>array(32,-212,576,800),7880=>array(19,0,375,1025),7881=>array(27,0,355,844),7882=>array(5,-212,316,729),7883=>array(9,-212,319,760),7884=>array(32,-212,733,742),7885=>array(32,-212,586,560),7886=>array(32,-14,733,1025),7887=>array(32,-14,586,844),7888=>array(32,-14,795,1057),7889=>array(32,-14,734,876),7890=>array(32,-14,733,1057),7891=>array(32,-14,651,876),7892=>array(32,-14,801,1093),7893=>array(32,-14,722,913),7894=>array(32,-14,733,1068),7895=>array(32,-14,590,888),7896=>array(32,-212,733,927),7897=>array(32,-212,586,800),7898=>array(35,-14,816,927),7899=>array(35,-14,693,800),7900=>array(35,-14,816,927),7901=>array(35,-14,693,798),7902=>array(35,-14,816,1025),7903=>array(35,-14,693,844),7904=>array(35,-14,816,928),7905=>array(35,-14,693,778),7906=>array(35,-212,816,760),7907=>array(35,-212,693,570),7908=>array(61,-212,712,729),7909=>array(54,-212,613,547),7910=>array(61,-14,712,1025),7911=>array(54,-14,613,844),7912=>array(61,-14,844,927),7913=>array(51,-14,716,799),7914=>array(61,-14,844,927),7915=>array(51,-14,716,800),7916=>array(61,-14,844,1025),7917=>array(51,-14,716,844),7918=>array(61,-14,844,928),7919=>array(51,-14,716,778),7920=>array(61,-212,844,761),7921=>array(51,-212,716,570),7922=>array(57,0,729,931),7923=>array(0,-216,619,803),7924=>array(57,-212,729,729),7925=>array(0,-216,619,547),7926=>array(57,0,729,1025),7927=>array(0,-216,619,844),7928=>array(57,0,729,928),7929=>array(0,-216,619,778),7930=>array(19,0,794,729),7931=>array(9,0,628,760),7936=>array(34,-12,623,785),7937=>array(34,-12,623,785),7938=>array(34,-12,623,800),7939=>array(34,-12,623,800),7940=>array(34,-12,623,800),7941=>array(34,-12,623,800),7942=>array(34,-12,623,928),7943=>array(34,-12,623,928),7944=>array(-59,0,622,785),7945=>array(-59,0,622,785),7946=>array(26,0,862,800),7947=>array(62,0,865,800),7948=>array(26,0,767,800),7949=>array(61,0,792,800),7950=>array(-3,0,677,928),7951=>array(18,0,699,928),7952=>array(24,-14,468,785),7953=>array(24,-14,468,785),7954=>array(24,-14,492,800),7955=>array(24,-14,487,800),7956=>array(24,-14,555,800),7957=>array(24,-14,541,800),7960=>array(27,0,701,785),7961=>array(62,0,703,785),7962=>array(26,0,978,800),7963=>array(62,0,975,800),7964=>array(26,0,909,800),7965=>array(61,0,936,800),7968=>array(44,-208,598,785),7969=>array(44,-208,598,785),7970=>array(44,-208,598,800),7971=>array(44,-208,598,800),7972=>array(44,-208,598,800),7973=>array(44,-208,615,800),7974=>array(44,-208,598,928),7975=>array(44,-208,598,928),7976=>array(27,0,832,785),7977=>array(62,0,837,785),7978=>array(26,0,1107,800),7979=>array(62,0,1106,800),7980=>array(26,0,1043,800),7981=>array(61,0,1067,800),7982=>array(88,0,930,928),7983=>array(87,0,938,928),7984=>array(38,-19,282,785),7985=>array(38,-19,282,785),7986=>array(0,-19,411,800),7987=>array(6,-19,383,800),7988=>array(38,-19,478,800),7989=>array(38,-19,471,800),7990=>array(38,-19,413,928),7991=>array(38,-19,410,928),7992=>array(27,0,417,785),7993=>array(62,0,422,785),7994=>array(26,0,681,800),7995=>array(62,0,688,800),7996=>array(26,0,622,800),7997=>array(61,0,646,800),7998=>array(88,0,525,928),7999=>array(87,0,525,928),8000=>array(32,-14,586,785),8001=>array(32,-14,586,785),8002=>array(32,-14,586,800),8003=>array(32,-14,586,800),8004=>array(32,-14,601,800),8005=>array(32,-14,612,800),8008=>array(27,-14,770,785),8009=>array(62,-14,808,785),8010=>array(26,-14,1067,800),8011=>array(62,-14,1069,800),8012=>array(26,-14,915,800),8013=>array(61,-14,941,800),8016=>array(48,-10,580,785),8017=>array(48,-10,580,785),8018=>array(48,-10,580,800),8019=>array(48,-10,580,800),8020=>array(48,-10,609,800),8021=>array(48,-10,615,800),8022=>array(48,-10,580,928),8023=>array(48,-10,580,928),8025=>array(62,0,914,785),8027=>array(62,0,1143,800),8029=>array(61,0,1156,800),8031=>array(87,0,1021,928),8032=>array(30,-13,751,785),8033=>array(30,-13,751,785),8034=>array(30,-13,751,800),8035=>array(30,-13,751,800),8036=>array(30,-13,751,800),8037=>array(30,-13,751,800),8038=>array(30,-13,751,928),8039=>array(30,-13,751,928),8040=>array(12,0,783,785),8041=>array(57,0,828,785),8042=>array(26,0,1087,800),8043=>array(62,-3,1092,800),8044=>array(26,0,934,800),8045=>array(61,0,960,800),8046=>array(88,0,891,928),8047=>array(87,0,934,928),8048=>array(34,-12,623,800),8049=>array(34,-12,623,800),8050=>array(24,-14,468,800),8051=>array(24,-14,510,800),8052=>array(44,-208,598,800),8053=>array(44,-208,598,800),8054=>array(38,-19,282,800),8055=>array(38,-19,392,800),8056=>array(32,-14,586,800),8057=>array(32,-14,586,800),8058=>array(48,-10,580,800),8059=>array(48,-10,580,800),8060=>array(30,-13,751,800),8061=>array(30,-13,751,800),8064=>array(34,-208,623,785),8065=>array(34,-208,623,785),8066=>array(34,-208,623,800),8067=>array(34,-208,623,800),8068=>array(34,-208,623,800),8069=>array(34,-208,623,800),8070=>array(34,-208,623,928),8071=>array(34,-208,623,928),8072=>array(-59,-208,622,785),8073=>array(-59,-208,622,785),8074=>array(26,-208,862,800),8075=>array(62,-208,865,800),8076=>array(26,-208,767,800),8077=>array(61,-208,792,800),8078=>array(-3,-208,677,928),8079=>array(18,-208,699,928),8080=>array(44,-208,598,785),8081=>array(44,-208,598,785),8082=>array(44,-208,598,800),8083=>array(44,-208,598,800),8084=>array(44,-208,598,800),8085=>array(44,-208,615,800),8086=>array(44,-208,598,928),8087=>array(44,-208,598,928),8088=>array(27,-208,832,785),8089=>array(62,-208,837,785),8090=>array(26,-208,1107,800),8091=>array(62,-208,1106,800),8092=>array(26,-208,1043,800),8093=>array(61,-208,1067,800),8094=>array(88,-208,930,928),8095=>array(87,-208,938,928),8096=>array(30,-208,751,785),8097=>array(30,-208,751,785),8098=>array(30,-208,751,800),8099=>array(30,-208,751,800),8100=>array(30,-208,751,800),8101=>array(30,-208,751,800),8102=>array(30,-208,751,928),8103=>array(30,-208,751,928),8104=>array(12,-208,783,785),8105=>array(57,-208,828,785),8106=>array(26,-208,1087,800),8107=>array(62,-208,1092,800),8108=>array(26,-208,934,800),8109=>array(61,-208,960,800),8110=>array(88,-208,891,928),8111=>array(87,-208,934,928),8112=>array(34,-12,623,784),8113=>array(34,-12,623,760),8114=>array(34,-208,623,800),8115=>array(34,-208,623,559),8116=>array(34,-208,623,800),8118=>array(34,-12,623,778),8119=>array(34,-208,623,778),8120=>array(-59,0,622,927),8121=>array(-59,0,622,914),8122=>array(34,0,714,800),8123=>array(-38,0,643,800),8124=>array(-59,-208,622,729),8125=>array(189,595,343,785),8126=>array(119,-208,228,-45),8127=>array(189,595,343,785),8128=>array(119,638,450,778),8129=>array(136,654,486,928),8130=>array(44,-208,598,800),8131=>array(44,-208,598,560),8132=>array(44,-208,598,800),8134=>array(44,-208,598,778),8135=>array(44,-208,598,778),8136=>array(75,0,825,800),8137=>array(21,0,748,800),8138=>array(75,0,954,800),8139=>array(26,0,888,800),8140=>array(19,-208,734,729),8141=>array(55,595,466,800),8142=>array(81,595,506,800),8143=>array(156,595,486,928),8144=>array(38,-19,372,784),8145=>array(38,-19,365,760),8146=>array(38,-19,362,978),8147=>array(44,-19,465,978),8150=>array(38,-19,382,778),8151=>array(38,-19,409,928),8152=>array(19,0,382,927),8153=>array(19,0,375,914),8154=>array(75,0,541,800),8155=>array(23,0,469,800),8157=>array(94,595,471,800),8158=>array(100,595,517,800),8159=>array(156,595,486,928),8160=>array(48,-10,580,784),8161=>array(48,-10,580,760),8162=>array(48,-10,580,978),8163=>array(48,-10,594,978),8164=>array(8,-208,629,785),8165=>array(8,-208,629,785),8166=>array(48,-10,580,778),8167=>array(48,-10,580,928),8168=>array(57,0,729,927),8169=>array(57,0,729,914),8170=>array(75,0,995,800),8171=>array(18,0,960,800),8172=>array(62,0,743,785),8173=>array(136,654,436,978),8174=>array(136,654,531,978),8175=>array(118,616,334,800),8178=>array(30,-208,751,800),8179=>array(30,-208,751,547),8180=>array(30,-208,751,800),8182=>array(30,-13,751,778),8183=>array(30,-208,751,778),8184=>array(75,-14,926,800),8185=>array(25,-14,766,800),8186=>array(75,0,941,800),8187=>array(-1,0,770,800),8188=>array(-41,-208,730,742),8189=>array(204,616,485,800),8190=>array(224,595,353,785),8208=>array(22,217,324,359),8209=>array(22,217,324,359),8210=>array(21,211,574,337),8211=>array(21,211,397,337),8212=>array(21,211,848,337),8213=>array(-27,211,896,337),8214=>array(114,-236,359,764),8215=>array(-9,-236,459,-9),8216=>array(101,418,351,729),8217=>array(66,418,314,729),8218=>array(-31,-122,218,189),8219=>array(96,418,272,729),8220=>array(101,418,587,729),8221=>array(66,418,551,729),8222=>array(-31,-122,455,189),8223=>array(85,418,482,729),8224=>array(34,-96,454,729),8225=>array(-25,-96,454,729),8226=>array(129,196,446,547),8227=>array(129,157,481,586),8228=>array(41,0,233,189),8229=>array(41,0,512,189),8230=>array(41,0,791,189),8231=>array(111,304,254,424),8240=>array(49,-14,1261,742),8241=>array(49,-14,1670,742),8242=>array(1,547,232,729),8243=>array(1,547,396,729),8244=>array(1,547,562,729),8245=>array(145,547,312,729),8246=>array(145,547,479,729),8247=>array(145,547,642,729),8248=>array(91,-238,569,29),8249=>array(55,67,320,519),8250=>array(34,66,298,519),8251=>array(65,0,810,829),8252=>array(-2,0,567,729),8253=>array(88,0,496,742),8254=>array(-9,663,459,755),8255=>array(-28,-237,773,-79),8256=>array(-28,769,773,927),8257=>array(-47,-235,267,231),8258=>array(18,-37,903,832),8259=>array(92,188,386,325),8260=>array(-250,-14,400,742),8261=>array(-9,-132,419,760),8262=>array(-25,-132,404,760),8263=>array(63,0,932,742),8264=>array(93,0,748,742),8265=>array(-2,0,719,742),8266=>array(79,-125,477,546),8267=>array(51,-96,599,729),8268=>array(67,189,382,541),8269=>array(67,189,382,541),8270=>array(18,-37,453,427),8271=>array(50,-142,294,547),8272=>array(-28,-237,773,927),8273=>array(61,-3,409,830),8274=>array(2,-93,493,729),8275=>array(44,212,856,415),8276=>array(-28,-351,773,-192),8277=>array(127,98,625,631),8278=>array(85,93,565,645),8279=>array(1,547,726,729),8280=>array(55,21,699,708),8281=>array(72,71,691,657),8282=>array(27,0,315,729),8283=>array(27,-170,756,898),8284=>array(39,0,715,729),8285=>array(27,0,306,683),8286=>array(27,0,306,683),8304=>array(26,319,358,742),8305=>array(10,326,185,751),8308=>array(2,326,350,734),8309=>array(11,319,354,734),8310=>array(33,319,362,742),8311=>array(46,326,376,734),8312=>array(18,319,360,742),8313=>array(21,319,350,742),8314=>array(60,326,415,677),8315=>array(60,469,415,534),8316=>array(60,407,415,596),8317=>array(43,252,253,751),8318=>array(-1,252,209,751),8319=>array(21,326,371,640),8320=>array(26,-7,358,416),8321=>array(60,0,356,408),8322=>array(40,0,388,416),8323=>array(36,-7,384,416),8324=>array(2,0,350,408),8325=>array(11,-7,354,408),8326=>array(33,-7,362,416),8327=>array(46,0,376,408),8328=>array(18,-7,360,416),8329=>array(21,-7,350,416),8330=>array(60,0,415,351),8331=>array(60,143,415,208),8332=>array(60,81,415,270),8333=>array(43,-74,253,425),8334=>array(-1,-74,209,425),8336=>array(33,-8,370,313),8337=>array(44,-8,387,313),8338=>array(44,-8,393,313),8339=>array(-18,0,384,306),8340=>array(48,-8,381,313),8341=>array(11,0,361,425),8342=>array(18,0,406,425),8343=>array(11,0,187,425),8344=>array(18,0,559,313),8345=>array(21,0,371,313),8346=>array(-5,-117,384,313),8347=>array(10,-8,320,313),8348=>array(64,0,329,393),8352=>array(48,0,827,729),8353=>array(32,-44,624,778),8354=>array(32,-14,628,742),8355=>array(3,0,621,729),8356=>array(6,0,622,742),8357=>array(26,-93,877,640),8358=>array(12,0,741,729),8359=>array(19,-14,1308,729),8360=>array(20,-14,1039,729),8361=>array(21,0,1029,729),8362=>array(-29,-14,783,729),8363=>array(32,-185,735,760),8364=>array(-37,-14,619,742),8365=>array(11,0,662,729),8366=>array(49,0,679,729),8367=>array(33,-223,1098,742),8368=>array(1,-14,594,742),8369=>array(19,0,628,729),8370=>array(34,-81,614,809),8371=>array(-60,0,616,729),8372=>array(14,-14,760,742),8373=>array(68,-147,620,760),8376=>array(16,0,679,729),8377=>array(54,0,646,729),8378=>array(-9,0,670,729),8400=>array(-459,628,-23,760),8401=>array(-435,628,-10,760),8406=>array(-423,560,-18,760),8407=>array(-429,560,-23,760),8411=>array(-302,654,171,774),8412=>array(-389,654,258,774),8417=>array(-423,560,-23,760),8448=>array(13,-23,996,752),8449=>array(13,-23,996,752),8450=>array(44,-14,603,742),8451=>array(78,-14,1081,749),8452=>array(57,0,749,729),8453=>array(22,-24,988,752),8454=>array(22,-24,1053,752),8455=>array(33,-14,587,742),8456=>array(0,-146,624,611),8457=>array(78,0,899,749),8459=>array(32,-14,957,746),8460=>array(5,-125,729,747),8461=>array(90,0,709,729),8462=>array(27,0,589,760),8463=>array(9,0,563,760),8464=>array(32,-14,480,742),8465=>array(46,-14,593,743),8466=>array(33,-14,708,742),8467=>array(-13,-14,361,742),8468=>array(10,-14,842,760),8469=>array(83,0,671,729),8470=>array(-34,0,1041,729),8471=>array(124,0,776,725),8472=>array(48,-221,592,495),8473=>array(83,0,638,729),8474=>array(44,-146,720,742),8475=>array(28,-14,814,768),8476=>array(36,-14,723,743),8477=>array(88,0,714,729),8478=>array(47,0,760,729),8479=>array(48,-112,600,887),8480=>array(114,443,693,730),8481=>array(36,0,1101,547),8482=>array(129,447,711,729),8483=>array(20,-113,790,885),8484=>array(40,0,639,729),8485=>array(-10,-230,583,777),8486=>array(-41,0,730,742),8487=>array(37,-14,732,723),8488=>array(-5,-159,604,729),8489=>array(32,0,276,566),8490=>array(19,0,753,729),8491=>array(-59,0,622,928),8492=>array(37,-1,768,772),8493=>array(57,-19,690,742),8494=>array(55,-12,714,647),8495=>array(37,-14,532,533),8496=>array(65,-14,602,742),8497=>array(33,-14,774,773),8498=>array(19,0,603,729),8499=>array(34,-18,1041,751),8500=>array(26,-12,393,420),8501=>array(45,-14,685,742),8502=>array(17,-14,619,742),8503=>array(27,-35,396,742),8504=>array(57,-41,570,742),8505=>array(31,0,320,760),8506=>array(40,-27,895,723),8507=>array(0,0,1246,547),8508=>array(31,-14,689,547),8509=>array(-36,-208,630,561),8510=>array(83,0,564,729),8511=>array(83,0,694,729),8512=>array(11,-192,738,719),8513=>array(4,-14,672,742),8514=>array(8,0,499,729),8515=>array(10,0,604,729),8516=>array(2,0,674,729),8517=>array(18,0,708,729),8518=>array(31,-14,677,760),8519=>array(29,-14,571,560),8520=>array(13,0,317,760),8521=>array(-129,-216,319,760),8523=>array(54,-14,754,742),8526=>array(1,0,471,547),8528=>array(50,-14,921,742),8529=>array(50,-14,895,742),8530=>array(50,-14,1297,742),8531=>array(50,-14,929,742),8532=>array(40,-14,929,742),8533=>array(50,-14,898,742),8534=>array(40,-14,898,742),8535=>array(36,-14,898,742),8536=>array(2,-14,898,742),8537=>array(50,-14,907,742),8538=>array(11,-14,907,742),8539=>array(50,-14,905,742),8540=>array(36,-14,905,742),8541=>array(11,-14,905,742),8542=>array(46,-14,905,742),8543=>array(50,-14,804,742),8544=>array(19,0,316,729),8545=>array(19,0,574,729),8546=>array(19,0,832,729),8547=>array(19,0,1048,729),8548=>array(68,0,756,729),8549=>array(68,0,971,729),8550=>array(68,0,1229,729),8551=>array(68,0,1486,729),8552=>array(19,0,1046,729),8553=>array(-46,0,731,729),8554=>array(-46,0,989,729),8555=>array(-46,0,1248,729),8556=>array(19,0,510,729),8557=>array(32,-14,652,742),8558=>array(19,0,708,729),8559=>array(19,0,877,729),8560=>array(27,0,319,760),8561=>array(27,0,557,760),8562=>array(27,0,795,760),8563=>array(27,0,889,760),8564=>array(57,0,611,547),8565=>array(57,0,876,760),8566=>array(57,0,1114,760),8567=>array(57,0,1353,760),8568=>array(27,0,896,760),8569=>array(-37,0,604,547),8570=>array(-37,0,882,760),8571=>array(-37,0,1121,760),8572=>array(27,0,319,760),8573=>array(33,-14,523,560),8574=>array(32,-14,652,760),8575=>array(27,0,886,560),8576=>array(43,0,1116,729),8577=>array(19,0,704,729),8578=>array(43,0,1116,729),8579=>array(-12,-14,607,742),8580=>array(-7,-14,483,560),8581=>array(62,-208,677,742),8585=>array(26,-14,929,742),8592=>array(44,87,703,540),8593=>array(174,0,581,732),8594=>array(51,87,710,540),8595=>array(174,-3,581,729),8596=>array(44,87,710,540),8597=>array(173,-3,581,732),8598=>array(123,66,648,650),8599=>array(123,66,648,650),8600=>array(123,66,648,650),8601=>array(123,66,648,650),8602=>array(44,87,703,540),8603=>array(51,87,710,540),8604=>array(11,84,750,431),8605=>array(4,84,743,431),8606=>array(44,87,703,540),8607=>array(170,0,577,732),8608=>array(51,87,710,540),8609=>array(174,-3,582,729),8610=>array(44,87,714,540),8611=>array(40,87,710,540),8612=>array(44,87,703,540),8613=>array(174,0,581,732),8614=>array(51,87,710,540),8615=>array(174,0,581,732),8616=>array(174,0,581,732),8617=>array(44,87,703,565),8618=>array(51,87,710,565),8619=>array(44,87,703,565),8620=>array(51,87,710,565),8621=>array(44,87,710,540),8622=>array(44,86,710,541),8623=>array(110,-4,643,733),8624=>array(152,0,582,755),8625=>array(172,0,603,755),8626=>array(152,-26,582,729),8627=>array(172,-26,603,729),8628=>array(209,-3,695,621),8629=>array(44,87,606,626),8630=>array(9,198,734,685),8631=>array(20,198,745,685),8632=>array(105,13,709,729),8633=>array(44,-108,710,735),8634=>array(78,45,690,691),8635=>array(64,45,677,691),8636=>array(44,255,703,540),8637=>array(44,87,703,372),8638=>array(325,0,581,732),8639=>array(174,0,431,732),8640=>array(51,255,710,540),8641=>array(51,87,710,372),8642=>array(325,0,581,732),8643=>array(174,0,431,732),8644=>array(44,-59,710,686),8645=>array(42,-3,713,732),8646=>array(44,-59,710,686),8647=>array(44,-59,703,686),8648=>array(42,0,712,732),8649=>array(51,-59,710,686),8650=>array(42,-3,712,729),8651=>array(44,-5,710,632),8652=>array(44,-5,710,632),8653=>array(44,87,703,540),8654=>array(44,87,710,540),8655=>array(51,87,710,540),8656=>array(44,87,703,540),8657=>array(173,0,581,732),8658=>array(51,87,710,540),8659=>array(173,-3,581,729),8660=>array(44,87,710,540),8661=>array(173,-8,581,732),8662=>array(119,-26,680,596),8663=>array(79,-26,641,597),8664=>array(79,16,641,639),8665=>array(119,16,680,639),8666=>array(44,87,703,540),8667=>array(51,87,710,540),8668=>array(40,87,699,540),8669=>array(51,87,710,540),8670=>array(174,0,581,732),8671=>array(174,-3,581,729),8672=>array(44,87,703,540),8673=>array(174,0,581,732),8674=>array(51,87,710,540),8675=>array(174,-3,581,729),8676=>array(44,87,703,540),8677=>array(51,87,710,540),8678=>array(24,46,703,581),8679=>array(136,0,618,754),8680=>array(31,46,710,581),8681=>array(136,-25,618,729),8682=>array(136,0,618,754),8683=>array(136,0,618,754),8684=>array(136,0,618,754),8685=>array(136,0,618,754),8686=>array(136,0,618,754),8687=>array(136,0,618,754),8688=>array(31,46,710,581),8689=>array(53,0,709,729),8690=>array(53,0,709,729),8691=>array(136,-25,618,754),8692=>array(51,87,710,540),8693=>array(42,-3,713,732),8694=>array(51,-223,710,850),8695=>array(44,87,703,540),8696=>array(51,87,710,540),8697=>array(44,87,710,540),8698=>array(44,87,703,540),8699=>array(51,87,710,540),8700=>array(44,87,710,540),8701=>array(24,96,703,531),8702=>array(51,96,730,531),8703=>array(24,96,730,531),8704=>array(4,0,692,729),8705=>array(43,-14,566,742),8706=>array(26,-14,463,674),8707=>array(83,0,549,729),8708=>array(83,-46,549,775),8709=>array(42,-15,729,715),8710=>array(0,0,627,719),8711=>array(0,0,627,719),8712=>array(65,-2,742,730),8713=>array(65,-46,742,775),8714=>array(95,58,580,568),8715=>array(65,-2,742,730),8716=>array(65,-46,742,775),8717=>array(95,58,580,568),8718=>array(88,0,485,553),8719=>array(66,-192,641,719),8720=>array(66,-193,641,718),8721=>array(18,-192,627,719),8722=>array(95,256,659,371),8723=>array(95,0,659,627),8724=>array(44,0,583,729),8725=>array(-87,-93,391,729),8726=>array(148,-49,478,772),8727=>array(106,0,647,626),8728=>array(135,151,428,477),8729=>array(92,253,250,442),8730=>array(33,-20,602,837),8731=>array(33,-20,602,933),8732=>array(32,-20,602,924),8733=>array(83,89,555,505),8734=>array(83,89,667,505),8735=>array(95,67,659,693),8736=>array(69,0,738,729),8737=>array(69,-44,738,729),8738=>array(104,-0,659,726),8739=>array(186,-207,290,773),8740=>array(43,-207,434,773),8741=>array(101,-207,376,773),8742=>array(43,-207,434,773),8743=>array(136,0,595,579),8744=>array(136,0,595,579),8745=>array(136,0,595,579),8746=>array(136,0,595,579),8747=>array(13,-227,493,754),8748=>array(13,-227,823,754),8749=>array(13,-227,1152,754),8750=>array(13,-227,493,754),8751=>array(34,-227,845,754),8752=>array(21,-227,1161,754),8753=>array(13,-227,555,754),8754=>array(13,-227,540,754),8755=>array(13,-227,530,754),8756=>array(53,78,573,647),8757=>array(53,78,573,647),8758=>array(53,79,211,647),8759=>array(53,78,573,647),8760=>array(95,256,659,631),8761=>array(95,45,721,584),8762=>array(95,-4,659,631),8763=>array(95,-34,659,660),8764=>array(95,212,659,415),8765=>array(95,212,659,415),8766=>array(59,131,695,497),8767=>array(95,42,659,584),8768=>array(77,0,260,626),8769=>array(95,76,659,551),8770=>array(95,110,659,482),8771=>array(95,144,659,517),8772=>array(95,0,659,637),8773=>array(95,37,659,628),8774=>array(95,-31,659,628),8775=>array(95,-86,659,726),8776=>array(95,110,659,517),8777=>array(95,8,659,614),8778=>array(95,37,659,628),8779=>array(95,-13,659,628),8780=>array(95,37,659,628),8781=>array(95,105,659,585),8782=>array(95,26,659,656),8783=>array(95,172,659,656),8784=>array(95,144,659,744),8785=>array(95,-117,659,743),8786=>array(94,-92,659,719),8787=>array(94,-92,658,719),8788=>array(88,102,868,520),8789=>array(86,102,870,520),8790=>array(95,144,659,482),8791=>array(95,144,659,839),8792=>array(95,144,659,704),8793=>array(95,144,659,840),8794=>array(95,144,659,840),8795=>array(95,144,659,959),8796=>array(95,144,659,952),8797=>array(95,144,659,762),8798=>array(95,144,659,786),8799=>array(95,144,659,903),8800=>array(95,-5,659,631),8801=>array(95,38,659,588),8802=>array(95,-69,659,695),8803=>array(95,-74,659,700),8804=>array(95,0,659,582),8805=>array(95,0,659,582),8806=>array(96,-106,659,617),8807=>array(96,-106,659,617),8808=>array(96,-185,659,617),8809=>array(96,-185,659,617),8810=>array(65,-34,877,660),8811=>array(65,-34,877,660),8812=>array(77,-132,373,759),8813=>array(95,-10,659,700),8814=>array(95,-4,659,690),8815=>array(95,-63,659,631),8816=>array(95,-112,659,645),8817=>array(95,-112,659,645),8818=>array(95,-84,659,582),8819=>array(95,-84,659,582),8820=>array(95,-112,659,645),8821=>array(95,-112,659,645),8822=>array(91,-119,659,678),8823=>array(91,-119,659,678),8824=>array(91,-221,659,779),8825=>array(91,-221,659,779),8826=>array(95,-55,659,681),8827=>array(95,-55,659,681),8828=>array(95,-177,659,684),8829=>array(95,-177,659,684),8830=>array(95,-132,659,684),8831=>array(95,-132,659,684),8832=>array(95,-89,659,781),8833=>array(95,-89,659,781),8834=>array(89,67,665,559),8835=>array(89,65,665,559),8836=>array(89,-96,665,726),8837=>array(89,-100,665,722),8838=>array(89,0,665,636),8839=>array(89,0,665,635),8840=>array(89,-124,665,759),8841=>array(89,-124,665,759),8842=>array(89,-97,665,636),8843=>array(89,-97,665,635),8844=>array(136,0,595,579),8845=>array(136,0,595,579),8846=>array(136,0,595,579),8847=>array(95,0,659,584),8848=>array(95,0,659,584),8849=>array(95,-115,659,667),8850=>array(95,-115,659,667),8851=>array(95,0,621,626),8852=>array(95,0,621,626),8853=>array(82,-14,672,643),8854=>array(82,-14,672,643),8855=>array(82,-14,672,643),8856=>array(82,-13,672,642),8857=>array(82,-14,672,643),8858=>array(82,-14,672,643),8859=>array(82,-14,672,643),8860=>array(82,-14,672,643),8861=>array(82,-14,672,643),8862=>array(69,-29,686,657),8863=>array(69,-29,686,657),8864=>array(69,-29,686,657),8865=>array(69,-29,686,657),8866=>array(77,0,746,705),8867=>array(77,0,746,705),8868=>array(77,0,746,705),8869=>array(77,0,746,705),8870=>array(77,0,412,705),8871=>array(77,0,412,705),8872=>array(77,0,746,705),8873=>array(77,0,746,705),8874=>array(77,0,746,705),8875=>array(77,0,746,705),8876=>array(77,-100,746,805),8877=>array(77,-100,746,805),8878=>array(77,-100,746,805),8879=>array(77,-100,746,805),8880=>array(95,-54,652,681),8881=>array(102,-54,659,681),8882=>array(95,-1,659,628),8883=>array(95,-1,659,628),8884=>array(95,-80,659,706),8885=>array(95,-80,659,706),8886=>array(54,151,846,477),8887=>array(54,151,846,477),8888=>array(53,151,701,477),8889=>array(39,-63,715,689),8890=>array(56,0,432,705),8891=>array(92,0,639,759),8892=>array(92,0,639,759),8893=>array(92,0,639,759),8894=>array(95,0,659,626),8895=>array(95,0,659,626),8896=>array(0,-192,759,719),8897=>array(0,-192,759,719),8898=>array(43,-192,715,719),8899=>array(43,-192,715,719),8900=>array(2,-233,442,807),8901=>array(92,253,250,442),8902=>array(75,112,489,549),8903=>array(95,-56,659,683),8904=>array(95,-48,805,674),8905=>array(95,-48,805,675),8906=>array(95,-48,805,675),8907=>array(95,-48,805,675),8908=>array(95,-48,805,675),8909=>array(95,144,659,517),8910=>array(44,0,687,579),8911=>array(44,0,687,579),8912=>array(83,-22,659,649),8913=>array(95,-22,671,649),8914=>array(75,0,680,639),8915=>array(75,-14,680,625),8916=>array(167,0,587,729),8917=>array(95,-100,659,729),8918=>array(95,30,659,597),8919=>array(95,30,659,597),8920=>array(65,-34,1215,660),8921=>array(65,-34,1215,660),8922=>array(95,-211,659,837),8923=>array(95,-211,659,837),8924=>array(95,0,659,582),8925=>array(95,0,659,582),8926=>array(95,-177,659,684),8927=>array(95,-177,659,684),8928=>array(95,-197,659,808),8929=>array(95,-263,659,742),8930=>array(95,-191,659,817),8931=>array(95,-191,659,817),8932=>array(95,-146,659,636),8933=>array(95,-146,659,636),8934=>array(95,-168,659,582),8935=>array(95,-168,659,582),8936=>array(95,-216,659,684),8937=>array(95,-216,659,684),8938=>array(95,-138,659,808),8939=>array(95,-138,659,808),8940=>array(95,-224,659,894),8941=>array(95,-224,659,894),8942=>array(371,-40,529,735),8943=>array(71,253,829,442),8944=>array(71,-40,829,735),8945=>array(71,-40,829,735),8946=>array(65,-2,977,730),8947=>array(65,-2,742,730),8948=>array(95,58,580,568),8949=>array(65,-2,742,984),8950=>array(65,-2,742,919),8951=>array(95,58,580,741),8952=>array(65,-207,742,730),8953=>array(65,-2,742,730),8954=>array(65,-2,977,730),8955=>array(65,-2,742,730),8956=>array(95,58,580,568),8957=>array(65,-2,742,919),8958=>array(95,58,580,741),8959=>array(95,0,712,732),8960=>array(28,-22,515,519),8961=>array(50,152,486,453),8962=>array(58,0,586,596),8963=>array(174,470,581,732),8964=>array(174,0,581,263),8965=>array(174,-12,581,423),8966=>array(174,-12,581,552),8967=>array(175,-42,399,802),8968=>array(-1,-132,429,760),8969=>array(106,-132,412,760),8970=>array(-1,-132,305,760),8971=>array(-17,-132,412,760),8972=>array(316,-77,684,331),8973=>array(44,-77,412,331),8974=>array(316,226,684,634),8975=>array(44,226,412,634),8976=>array(95,140,659,444),8977=>array(2,113,482,646),8984=>array(76,0,759,759),8985=>array(95,140,659,444),8988=>array(78,425,422,760),8989=>array(114,425,422,760),8990=>array(55,-126,363,208),8991=>array(37,-126,381,208),8992=>array(211,-250,527,926),8993=>array(20,-240,336,940),8996=>array(68,215,969,575),8997=>array(68,0,969,575),8998=>array(68,0,1272,760),8999=>array(68,0,969,760),9000=>array(53,0,1247,729),9003=>array(0,0,1204,760),9004=>array(66,-91,720,748),9075=>array(70,-19,313,547),9076=>array(75,-208,604,562),9077=>array(39,-13,744,547),9082=>array(43,-13,581,559),9085=>array(1,-228,775,99),9095=>array(68,0,990,743),9108=>array(15,0,771,727),9115=>array(56,-252,394,928),9116=>array(56,-252,185,940),9117=>array(56,-240,394,940),9118=>array(56,-252,394,928),9119=>array(266,-252,394,940),9120=>array(56,-240,394,940),9121=>array(56,-252,394,928),9122=>array(56,-252,185,940),9123=>array(56,-240,394,940),9124=>array(56,-252,394,928),9125=>array(266,-252,394,940),9126=>array(56,-240,394,940),9127=>array(275,-261,602,928),9128=>array(74,-247,400,934),9129=>array(275,-240,602,934),9130=>array(275,-256,400,934),9131=>array(74,-261,400,928),9132=>array(275,-247,602,934),9133=>array(74,-240,400,934),9134=>array(211,-250,336,940),9166=>array(24,46,703,729),9167=>array(82,0,769,596),9187=>array(66,-91,720,748),9189=>array(2,75,690,444),9192=>array(-5,-129,561,294),9250=>array(-31,-14,586,760),9251=>array(20,-228,605,99),9312=>array(53,-15,709,715),9313=>array(53,-15,709,715),9314=>array(53,-15,709,715),9315=>array(53,-15,709,715),9316=>array(53,-15,709,715),9317=>array(53,-15,709,715),9318=>array(53,-15,709,715),9319=>array(53,-15,709,715),9320=>array(53,-15,709,715),9321=>array(53,-15,709,715),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,701,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-124,769,643),9633=>array(82,-124,769,643),9634=>array(82,-124,769,643),9635=>array(82,-124,769,643),9636=>array(82,-124,769,643),9637=>array(82,-124,769,643),9638=>array(82,-124,769,643),9639=>array(82,-124,769,643),9640=>array(82,-124,769,643),9641=>array(82,-124,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-124,690,643),9651=>array(2,-124,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-124,690,643),9655=>array(2,-124,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-124,690,643),9661=>array(2,-124,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-124,690,643),9665=>array(2,-124,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-124,690,643),9671=>array(2,-124,690,643),9672=>array(2,-124,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,675,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(2,260,690,645),9697=>array(2,-125,690,260),9698=>array(2,-124,690,643),9699=>array(2,-124,690,643),9700=>array(2,-124,690,643),9701=>array(2,-124,690,643),9702=>array(129,196,446,547),9703=>array(82,-124,769,643),9704=>array(82,-124,769,643),9705=>array(82,-124,769,643),9706=>array(82,-124,769,643),9707=>array(82,-124,769,643),9708=>array(2,-124,690,643),9709=>array(2,-124,690,643),9710=>array(2,-124,690,643),9711=>array(49,-250,958,770),9712=>array(82,-124,769,643),9713=>array(82,-124,769,643),9714=>array(82,-124,769,643),9715=>array(82,-124,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-124,690,643),9721=>array(2,-124,690,643),9722=>array(2,-124,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-124,690,643),9728=>array(75,0,731,729),9729=>array(45,-2,854,360),9730=>array(44,0,763,729),9731=>array(75,-0,732,927),9732=>array(57,0,750,880),9733=>array(58,-4,749,723),9734=>array(58,-4,749,723),9735=>array(75,2,441,729),9736=>array(75,0,732,731),9737=>array(75,0,732,730),9738=>array(55,0,745,727),9739=>array(55,0,745,723),9740=>array(55,-1,549,722),9741=>array(55,0,857,723),9742=>array(62,0,1060,729),9743=>array(63,0,1062,729),9744=>array(81,0,727,729),9745=>array(80,0,727,729),9746=>array(80,0,727,729),9747=>array(67,78,411,656),9748=>array(44,0,783,933),9749=>array(66,0,740,731),9750=>array(75,0,732,731),9751=>array(75,0,732,727),9752=>array(70,0,737,729),9753=>array(75,140,732,574),9754=>array(75,113,732,569),9755=>array(75,113,732,569),9756=>array(78,104,729,569),9757=>array(64,0,483,724),9758=>array(78,103,729,569),9759=>array(64,-3,483,720),9760=>array(55,0,752,730),9761=>array(75,0,732,730),9762=>array(75,0,732,730),9763=>array(44,0,763,730),9764=>array(44,-2,558,727),9765=>array(75,0,597,731),9766=>array(75,-1,510,731),9767=>array(75,0,631,911),9768=>array(75,0,416,730),9769=>array(75,-1,732,729),9770=>array(78,0,729,730),9771=>array(75,0,733,731),9772=>array(75,0,565,731),9773=>array(75,0,732,730),9774=>array(75,0,732,730),9775=>array(75,0,732,730),9776=>array(75,0,732,729),9777=>array(75,0,733,729),9778=>array(75,0,732,729),9779=>array(75,0,732,729),9780=>array(75,0,732,729),9781=>array(75,0,732,729),9782=>array(75,0,732,729),9783=>array(75,0,732,729),9784=>array(71,3,735,721),9785=>array(75,-73,864,804),9786=>array(75,-73,864,804),9787=>array(75,-73,864,804),9788=>array(75,0,732,730),9789=>array(322,0,733,730),9790=>array(75,0,485,730),9791=>array(77,-102,476,732),9792=>array(77,-125,583,731),9793=>array(77,-14,583,843),9794=>array(71,-14,748,720),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9800=>array(41,0,766,731),9801=>array(80,0,727,730),9802=>array(84,0,722,731),9803=>array(101,31,706,679),9804=>array(125,0,681,730),9805=>array(48,-180,759,730),9806=>array(75,52,732,653),9807=>array(30,-96,777,730),9808=>array(74,-0,732,730),9809=>array(84,0,722,730),9810=>array(77,153,729,579),9811=>array(141,0,666,730),9812=>array(88,0,719,730),9813=>array(99,0,708,730),9814=>array(149,-1,657,729),9815=>array(192,0,615,730),9816=>array(148,0,659,730),9817=>array(133,-0,673,730),9818=>array(88,0,719,730),9819=>array(99,0,708,730),9820=>array(149,-1,657,729),9821=>array(192,0,615,730),9822=>array(146,0,661,730),9823=>array(133,-0,673,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9832=>array(95,-1,712,729),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),9840=>array(75,0,598,731),9841=>array(58,0,631,731),9842=>array(75,0,732,709),9843=>array(68,16,738,731),9844=>array(68,16,738,731),9845=>array(68,16,738,731),9846=>array(68,16,738,731),9847=>array(68,16,738,731),9848=>array(68,16,738,731),9849=>array(68,16,738,731),9850=>array(68,16,738,731),9851=>array(75,0,731,704),9852=>array(75,0,733,731),9853=>array(75,0,733,731),9854=>array(75,0,733,731),9855=>array(134,1,672,731),9856=>array(66,0,717,725),9857=>array(66,0,717,725),9858=>array(66,0,717,725),9859=>array(66,0,717,725),9860=>array(66,0,717,725),9861=>array(66,0,717,725),9862=>array(75,0,732,731),9863=>array(75,0,732,731),9864=>array(75,0,732,731),9865=>array(75,0,732,731),9866=>array(75,0,732,98),9867=>array(75,0,732,98),9868=>array(75,0,732,413),9869=>array(75,0,732,413),9870=>array(75,0,732,413),9871=>array(75,0,732,413),9872=>array(151,3,655,731),9873=>array(151,3,655,731),9874=>array(46,0,760,731),9875=>array(87,-10,720,732),9876=>array(118,0,689,729),9877=>array(55,-10,431,732),9878=>array(53,-10,753,732),9879=>array(55,0,751,732),9880=>array(130,0,676,732),9881=>array(85,-17,722,727),9882=>array(115,-9,691,733),9883=>array(114,0,692,728),9884=>array(114,0,692,729),9888=>array(44,0,763,729),9889=>array(75,2,558,730),9890=>array(77,-125,827,731),9891=>array(71,-206,921,720),9892=>array(77,-186,998,856),9893=>array(77,-125,753,917),9894=>array(118,-14,654,869),9895=>array(91,-170,667,884),9896=>array(168,-14,585,869),9897=>array(4,133,746,596),9898=>array(168,133,585,597),9899=>array(168,133,585,597),9900=>array(224,194,531,536),9901=>array(158,194,597,536),9902=>array(37,169,717,560),9903=>array(4,194,750,536),9904=>array(92,237,681,540),9905=>array(190,42,564,698),9906=>array(77,-125,583,731),9907=>array(151,-125,582,731),9908=>array(77,-125,582,731),9909=>array(77,-125,582,731),9910=>array(53,-118,712,643),9911=>array(175,-104,536,710),9912=>array(142,-125,489,731),9920=>array(38,4,716,553),9921=>array(38,4,716,724),9922=>array(38,4,716,553),9923=>array(38,4,716,724),9954=>array(77,-14,583,843),9985=>array(9,190,723,635),9986=>array(38,141,706,588),9987=>array(9,94,723,539),9988=>array(32,119,742,613),9990=>array(38,-14,716,742),9991=>array(38,-14,716,742),9992=>array(53,21,704,708),9993=>array(58,107,696,622),9996=>array(191,0,505,742),9997=>array(19,83,722,678),9998=>array(80,75,652,710),9999=>array(23,198,738,530),10000=>array(80,75,652,710),10001=>array(39,185,681,544),10002=>array(61,209,681,520),10003=>array(135,97,601,630),10004=>array(104,87,649,631),10005=>array(114,72,641,657),10006=>array(77,31,677,698),10007=>array(105,-9,631,732),10008=>array(110,0,679,739),10009=>array(49,0,705,729),10010=>array(49,0,705,729),10011=>array(49,0,705,729),10012=>array(49,0,705,729),10013=>array(148,0,606,729),10014=>array(118,0,610,729),10015=>array(140,0,615,729),10016=>array(49,0,705,729),10017=>array(82,-13,672,744),10018=>array(37,-14,717,742),10019=>array(38,-12,716,742),10020=>array(36,-14,718,742),10021=>array(37,-13,717,743),10022=>array(38,-14,717,745),10023=>array(38,-14,717,745),10025=>array(21,-9,733,743),10026=>array(38,-14,716,742),10027=>array(21,-9,733,743),10028=>array(21,-9,733,743),10029=>array(21,-9,733,743),10030=>array(21,-9,733,743),10031=>array(21,-9,733,743),10032=>array(22,12,734,714),10033=>array(58,0,696,729),10034=>array(66,0,688,729),10035=>array(49,0,705,729),10036=>array(28,-14,708,742),10037=>array(37,-14,717,742),10038=>array(82,-14,672,742),10039=>array(37,-14,717,742),10040=>array(37,-14,717,742),10041=>array(37,-14,717,742),10042=>array(49,0,705,729),10043=>array(73,-14,681,742),10044=>array(73,-14,681,742),10045=>array(76,-14,678,742),10046=>array(71,-14,683,742),10047=>array(48,0,706,709),10048=>array(48,0,706,709),10049=>array(37,-14,717,742),10050=>array(38,-14,716,742),10051=>array(71,-14,683,742),10052=>array(80,0,674,729),10053=>array(68,0,686,729),10054=>array(57,2,696,729),10055=>array(70,-13,684,742),10056=>array(42,-13,712,730),10057=>array(42,-13,712,730),10058=>array(37,-13,717,743),10059=>array(37,-13,717,743),10061=>array(44,-10,762,738),10063=>array(53,-49,753,729),10064=>array(53,0,753,777),10065=>array(53,-49,753,729),10066=>array(53,0,753,777),10070=>array(75,-2,732,728),10072=>array(339,-240,415,760),10073=>array(302,-240,452,760),10074=>array(228,-240,527,760),10075=>array(76,395,237,729),10076=>array(53,395,214,729),10077=>array(76,395,432,729),10078=>array(53,395,408,729),10081=>array(140,-93,695,851),10082=>array(182,-17,572,742),10083=>array(146,-17,607,742),10084=>array(48,83,706,645),10085=>array(151,-1,656,729),10086=>array(55,21,652,702),10087=>array(70,169,684,564),10088=>array(176,-139,583,769),10089=>array(176,-139,583,769),10090=>array(237,-132,517,758),10091=>array(237,-132,517,758),10092=>array(193,-240,546,760),10093=>array(208,-240,561,760),10094=>array(127,-240,617,760),10095=>array(137,-240,626,760),10096=>array(149,-240,590,760),10097=>array(165,-240,605,760),10098=>array(311,-241,482,760),10099=>array(272,-241,443,760),10100=>array(157,-163,571,760),10101=>array(183,-163,597,760),10102=>array(53,-15,709,715),10103=>array(53,-15,709,715),10104=>array(53,-15,709,715),10105=>array(53,-15,709,715),10106=>array(53,-15,709,715),10107=>array(53,-15,709,715),10108=>array(53,-15,709,715),10109=>array(53,-15,709,715),10110=>array(53,-15,709,715),10111=>array(53,-15,709,715),10112=>array(4,-52,750,780),10113=>array(4,-52,750,780),10114=>array(4,-52,750,780),10115=>array(4,-52,750,780),10116=>array(4,-52,750,780),10117=>array(4,-52,750,780),10118=>array(4,-52,750,780),10119=>array(4,-52,750,780),10120=>array(4,-52,750,780),10121=>array(4,-52,750,780),10122=>array(4,-52,750,780),10123=>array(4,-52,750,780),10124=>array(4,-52,750,780),10125=>array(4,-52,750,780),10126=>array(4,-52,750,780),10127=>array(4,-52,750,780),10128=>array(4,-52,750,780),10129=>array(4,-52,750,780),10130=>array(4,-52,750,780),10131=>array(4,-52,750,780),10132=>array(51,75,710,552),10136=>array(110,55,614,614),10137=>array(51,100,710,527),10138=>array(110,13,614,572),10139=>array(51,129,710,498),10140=>array(51,57,688,570),10141=>array(51,100,710,527),10142=>array(51,100,710,527),10143=>array(51,100,710,527),10144=>array(51,100,710,527),10145=>array(51,46,730,581),10146=>array(100,94,710,533),10147=>array(100,94,710,533),10148=>array(100,-4,710,631),10149=>array(51,100,710,548),10150=>array(51,79,710,527),10151=>array(216,-7,545,634),10152=>array(51,100,710,527),10153=>array(51,75,688,552),10154=>array(51,75,688,552),10155=>array(19,12,715,586),10156=>array(19,12,715,586),10157=>array(122,0,697,574),10158=>array(122,0,697,574),10159=>array(56,49,719,574),10161=>array(56,49,719,574),10162=>array(139,-20,649,585),10163=>array(57,157,710,470),10164=>array(72,55,614,655),10165=>array(51,173,710,454),10166=>array(73,-29,614,572),10167=>array(73,55,614,655),10168=>array(51,172,710,455),10169=>array(73,-28,614,572),10170=>array(50,84,710,543),10171=>array(66,140,702,487),10172=>array(71,167,697,460),10173=>array(71,118,697,509),10174=>array(51,81,710,546),10181=>array(0,-163,394,769),10182=>array(-35,-163,427,769),10208=>array(2,-233,442,807),10214=>array(6,-132,448,760),10215=>array(6,-132,448,760),10216=>array(94,-132,417,759),10217=>array(-6,-132,317,759),10218=>array(94,-132,655,759),10219=>array(-6,-132,554,759),10224=>array(37,0,717,732),10225=>array(38,-3,718,729),10226=>array(8,45,734,685),10227=>array(20,45,747,685),10228=>array(51,-14,998,643),10229=>array(44,87,1239,540),10230=>array(51,87,1247,540),10231=>array(44,87,1247,540),10232=>array(44,87,1239,540),10233=>array(51,87,1247,540),10234=>array(44,87,1247,540),10235=>array(44,87,1239,540),10236=>array(51,87,1247,540),10237=>array(44,87,1239,540),10238=>array(51,87,1247,540),10239=>array(51,87,1247,540),10241=>array(132,586,308,781),10242=>array(132,325,308,521),10243=>array(132,325,308,781),10244=>array(132,65,308,261),10245=>array(132,65,308,781),10246=>array(132,65,308,521),10247=>array(132,65,308,781),10248=>array(396,586,571,781),10249=>array(132,586,571,781),10250=>array(132,325,571,781),10251=>array(132,325,571,781),10252=>array(132,65,571,781),10253=>array(132,65,571,781),10254=>array(132,65,571,781),10255=>array(132,65,571,781),10256=>array(396,325,571,521),10257=>array(132,325,571,781),10258=>array(132,325,571,521),10259=>array(132,325,571,781),10260=>array(132,65,571,521),10261=>array(132,65,571,781),10262=>array(132,65,571,521),10263=>array(132,65,571,781),10264=>array(396,325,571,781),10265=>array(132,325,571,781),10266=>array(132,325,571,781),10267=>array(132,325,571,781),10268=>array(132,65,571,781),10269=>array(132,65,571,781),10270=>array(132,65,571,781),10271=>array(132,65,571,781),10272=>array(396,65,571,261),10273=>array(132,65,571,781),10274=>array(132,65,571,521),10275=>array(132,65,571,781),10276=>array(132,65,571,261),10277=>array(132,65,571,781),10278=>array(132,65,571,521),10279=>array(132,65,571,781),10280=>array(396,65,571,781),10281=>array(132,65,571,781),10282=>array(132,65,571,781),10283=>array(132,65,571,781),10284=>array(132,65,571,781),10285=>array(132,65,571,781),10286=>array(132,65,571,781),10287=>array(132,65,571,781),10288=>array(396,65,571,521),10289=>array(132,65,571,781),10290=>array(132,65,571,521),10291=>array(132,65,571,781),10292=>array(132,65,571,521),10293=>array(132,65,571,781),10294=>array(132,65,571,521),10295=>array(132,65,571,781),10296=>array(396,65,571,781),10297=>array(132,65,571,781),10298=>array(132,65,571,781),10299=>array(132,65,571,781),10300=>array(132,65,571,781),10301=>array(132,65,571,781),10302=>array(132,65,571,781),10303=>array(132,65,571,781),10304=>array(132,-195,308,0),10305=>array(132,-195,308,781),10306=>array(132,-195,308,521),10307=>array(132,-195,308,781),10308=>array(132,-195,308,261),10309=>array(132,-195,308,781),10310=>array(132,-195,308,521),10311=>array(132,-195,308,781),10312=>array(132,-195,571,781),10313=>array(132,-195,571,781),10314=>array(132,-195,571,781),10315=>array(132,-195,571,781),10316=>array(132,-195,571,781),10317=>array(132,-195,571,781),10318=>array(132,-195,571,781),10319=>array(132,-195,571,781),10320=>array(132,-195,571,521),10321=>array(132,-195,571,781),10322=>array(132,-195,571,521),10323=>array(132,-195,571,781),10324=>array(132,-195,571,521),10325=>array(132,-195,571,781),10326=>array(132,-195,571,521),10327=>array(132,-195,571,781),10328=>array(132,-195,571,781),10329=>array(132,-195,571,781),10330=>array(132,-195,571,781),10331=>array(132,-195,571,781),10332=>array(132,-195,571,781),10333=>array(132,-195,571,781),10334=>array(132,-195,571,781),10335=>array(132,-195,571,781),10336=>array(132,-195,571,261),10337=>array(132,-195,571,781),10338=>array(132,-195,571,521),10339=>array(132,-195,571,781),10340=>array(132,-195,571,261),10341=>array(132,-195,571,781),10342=>array(132,-195,571,521),10343=>array(132,-195,571,781),10344=>array(132,-195,571,781),10345=>array(132,-195,571,781),10346=>array(132,-195,571,781),10347=>array(132,-195,571,781),10348=>array(132,-195,571,781),10349=>array(132,-195,571,781),10350=>array(132,-195,571,781),10351=>array(132,-195,571,781),10352=>array(132,-195,571,521),10353=>array(132,-195,571,781),10354=>array(132,-195,571,521),10355=>array(132,-195,571,781),10356=>array(132,-195,571,521),10357=>array(132,-195,571,781),10358=>array(132,-195,571,521),10359=>array(132,-195,571,781),10360=>array(132,-195,571,781),10361=>array(132,-195,571,781),10362=>array(132,-195,571,781),10363=>array(132,-195,571,781),10364=>array(132,-195,571,781),10365=>array(132,-195,571,781),10366=>array(132,-195,571,781),10367=>array(132,-195,571,781),10368=>array(396,-195,571,0),10369=>array(132,-195,571,781),10370=>array(132,-195,571,521),10371=>array(132,-195,571,781),10372=>array(132,-195,571,261),10373=>array(132,-195,571,781),10374=>array(132,-195,571,521),10375=>array(132,-195,571,781),10376=>array(396,-195,571,781),10377=>array(132,-195,571,781),10378=>array(132,-195,571,781),10379=>array(132,-195,571,781),10380=>array(132,-195,571,781),10381=>array(132,-195,571,781),10382=>array(132,-195,571,781),10383=>array(132,-195,571,781),10384=>array(396,-195,571,521),10385=>array(132,-195,571,781),10386=>array(132,-195,571,521),10387=>array(132,-195,571,781),10388=>array(132,-195,571,521),10389=>array(132,-195,571,781),10390=>array(132,-195,571,521),10391=>array(132,-195,571,781),10392=>array(396,-195,571,781),10393=>array(132,-195,571,781),10394=>array(132,-195,571,781),10395=>array(132,-195,571,781),10396=>array(132,-195,571,781),10397=>array(132,-195,571,781),10398=>array(132,-195,571,781),10399=>array(132,-195,571,781),10400=>array(396,-195,571,261),10401=>array(132,-195,571,781),10402=>array(132,-195,571,521),10403=>array(132,-195,571,781),10404=>array(132,-195,571,261),10405=>array(132,-195,571,781),10406=>array(132,-195,571,521),10407=>array(132,-195,571,781),10408=>array(396,-195,571,781),10409=>array(132,-195,571,781),10410=>array(132,-195,571,781),10411=>array(132,-195,571,781),10412=>array(132,-195,571,781),10413=>array(132,-195,571,781),10414=>array(132,-195,571,781),10415=>array(132,-195,571,781),10416=>array(396,-195,571,521),10417=>array(132,-195,571,781),10418=>array(132,-195,571,521),10419=>array(132,-195,571,781),10420=>array(132,-195,571,521),10421=>array(132,-195,571,781),10422=>array(132,-195,571,521),10423=>array(132,-195,571,781),10424=>array(396,-195,571,781),10425=>array(132,-195,571,781),10426=>array(132,-195,571,781),10427=>array(132,-195,571,781),10428=>array(132,-195,571,781),10429=>array(132,-195,571,781),10430=>array(132,-195,571,781),10431=>array(132,-195,571,781),10432=>array(132,-195,571,0),10433=>array(132,-195,571,781),10434=>array(132,-195,571,521),10435=>array(132,-195,571,781),10436=>array(132,-195,571,261),10437=>array(132,-195,571,781),10438=>array(132,-195,571,521),10439=>array(132,-195,571,781),10440=>array(132,-195,571,781),10441=>array(132,-195,571,781),10442=>array(132,-195,571,781),10443=>array(132,-195,571,781),10444=>array(132,-195,571,781),10445=>array(132,-195,571,781),10446=>array(132,-195,571,781),10447=>array(132,-195,571,781),10448=>array(132,-195,571,521),10449=>array(132,-195,571,781),10450=>array(132,-195,571,521),10451=>array(132,-195,571,781),10452=>array(132,-195,571,521),10453=>array(132,-195,571,781),10454=>array(132,-195,571,521),10455=>array(132,-195,571,781),10456=>array(132,-195,571,781),10457=>array(132,-195,571,781),10458=>array(132,-195,571,781),10459=>array(132,-195,571,781),10460=>array(132,-195,571,781),10461=>array(132,-195,571,781),10462=>array(132,-195,571,781),10463=>array(132,-195,571,781),10464=>array(132,-195,571,261),10465=>array(132,-195,571,781),10466=>array(132,-195,571,521),10467=>array(132,-195,571,781),10468=>array(132,-195,571,261),10469=>array(132,-195,571,781),10470=>array(132,-195,571,521),10471=>array(132,-195,571,781),10472=>array(132,-195,571,781),10473=>array(132,-195,571,781),10474=>array(132,-195,571,781),10475=>array(132,-195,571,781),10476=>array(132,-195,571,781),10477=>array(132,-195,571,781),10478=>array(132,-195,571,781),10479=>array(132,-195,571,781),10480=>array(132,-195,571,521),10481=>array(132,-195,571,781),10482=>array(132,-195,571,521),10483=>array(132,-195,571,781),10484=>array(132,-195,571,521),10485=>array(132,-195,571,781),10486=>array(132,-195,571,521),10487=>array(132,-195,571,781),10488=>array(132,-195,571,781),10489=>array(132,-195,571,781),10490=>array(132,-195,571,781),10491=>array(132,-195,571,781),10492=>array(132,-195,571,781),10493=>array(132,-195,571,781),10494=>array(132,-195,571,781),10495=>array(132,-195,571,781),10502=>array(44,87,703,540),10503=>array(51,87,710,540),10506=>array(119,0,637,732),10507=>array(119,0,637,732),10560=>array(78,45,653,853),10561=>array(78,45,653,853),10627=>array(105,-163,646,760),10628=>array(31,-163,573,760),10702=>array(95,-258,659,800),10703=>array(95,-1,847,628),10704=>array(95,-1,847,628),10705=>array(95,-48,805,674),10706=>array(95,-48,805,674),10707=>array(95,-48,805,674),10708=>array(95,-48,805,675),10709=>array(95,-48,805,675),10731=>array(2,-233,442,807),10746=>array(95,0,659,627),10747=>array(95,0,659,627),10752=>array(25,-211,875,734),10753=>array(25,-211,875,734),10754=>array(25,-211,875,734),10764=>array(13,-227,1482,754),10765=>array(13,-227,493,754),10766=>array(13,-227,493,754),10767=>array(13,-227,493,754),10768=>array(13,-227,493,754),10769=>array(13,-227,519,754),10770=>array(13,-227,493,754),10771=>array(13,-227,493,754),10772=>array(13,-228,586,754),10773=>array(13,-227,493,754),10774=>array(13,-227,493,754),10775=>array(-27,-227,500,754),10776=>array(13,-227,493,754),10777=>array(13,-227,493,754),10778=>array(13,-227,493,754),10779=>array(13,-227,493,898),10780=>array(13,-372,493,754),10799=>array(112,20,642,607),10858=>array(95,212,659,660),10859=>array(95,-34,659,660),10877=>array(95,-150,659,632),10878=>array(95,-150,659,632),10879=>array(95,-150,659,632),10880=>array(95,-150,659,632),10881=>array(95,-150,659,688),10882=>array(95,-150,659,688),10883=>array(95,-150,659,827),10884=>array(95,-150,659,827),10885=>array(95,-217,659,630),10886=>array(95,-217,659,630),10887=>array(95,-124,659,582),10888=>array(95,-124,659,582),10889=>array(95,-281,659,630),10890=>array(95,-281,659,630),10891=>array(95,-303,659,814),10892=>array(95,-303,659,814),10893=>array(95,-183,659,653),10894=>array(95,-183,659,653),10895=>array(95,-245,659,765),10896=>array(95,-245,659,765),10897=>array(96,-278,659,782),10898=>array(96,-278,659,782),10899=>array(95,-263,659,771),10900=>array(95,-263,659,771),10901=>array(95,-50,659,733),10902=>array(95,-50,659,733),10903=>array(95,-50,659,733),10904=>array(95,-50,659,733),10905=>array(96,-45,659,678),10906=>array(96,-45,659,678),10907=>array(95,-81,659,724),10908=>array(95,-81,659,724),10909=>array(95,13,659,680),10910=>array(95,13,659,680),10911=>array(95,-239,659,746),10912=>array(95,-239,659,746),10926=>array(95,22,659,656),10927=>array(95,-83,659,684),10928=>array(95,-83,659,684),10929=>array(95,-246,659,684),10930=>array(95,-246,659,684),10931=>array(95,-205,659,672),10932=>array(95,-205,659,672),10933=>array(95,-304,659,672),10934=>array(95,-304,659,672),10935=>array(95,-252,659,713),10936=>array(95,-252,659,713),10937=>array(95,-316,659,713),10938=>array(95,-316,659,713),11001=>array(95,-195,659,609),11002=>array(95,-195,659,609),11008=>array(110,-23,670,598),11009=>array(84,-23,644,598),11010=>array(110,-23,670,598),11011=>array(84,-23,644,598),11012=>array(24,46,710,581),11013=>array(24,46,703,581),11014=>array(136,0,618,754),11015=>array(136,-25,618,729),11016=>array(110,-23,670,598),11017=>array(84,-23,644,598),11018=>array(110,-23,670,598),11019=>array(84,-23,644,598),11020=>array(24,46,710,581),11021=>array(136,-25,618,754),11022=>array(51,-25,721,372),11023=>array(51,255,721,652),11024=>array(34,-25,703,372),11025=>array(34,255,703,652),11026=>array(82,-124,769,643),11027=>array(82,-124,769,643),11028=>array(82,-124,769,643),11029=>array(82,-124,769,643),11030=>array(2,-124,690,643),11031=>array(2,-124,690,643),11032=>array(2,-124,690,643),11033=>array(2,-124,690,643),11034=>array(82,-124,769,643),11039=>array(16,-26,767,767),11040=>array(16,-26,767,767),11041=>array(66,-91,720,748),11042=>array(66,-91,720,748),11043=>array(15,-35,771,692),11044=>array(49,-250,958,770),11091=>array(34,-47,749,788),11092=>array(34,-47,749,788),11360=>array(-22,0,510,729),11361=>array(-31,0,352,760),11362=>array(-25,0,510,729),11363=>array(16,0,645,729),11364=>array(48,-200,638,729),11365=>array(-19,-46,623,594),11366=>array(-5,-93,478,822),11367=>array(32,-157,813,729),11368=>array(21,-138,693,760),11369=>array(32,-157,770,729),11370=>array(21,-138,638,760),11371=>array(-10,-157,680,729),11372=>array(4,-138,545,547),11373=>array(43,-14,756,741),11374=>array(36,-200,894,729),11375=>array(68,0,756,729),11376=>array(-21,-14,702,741),11377=>array(60,0,718,560),11378=>array(89,0,1137,742),11379=>array(78,0,968,560),11380=>array(40,0,618,586),11381=>array(19,0,561,729),11382=>array(27,0,444,547),11383=>array(57,0,652,552),11385=>array(9,-13,476,760),11386=>array(39,-14,580,560),11387=>array(22,0,468,547),11388=>array(-67,-121,197,425),11389=>array(38,326,472,734),11390=>array(33,-240,619,742),11391=>array(-2,-240,687,729),11520=>array(37,-64,574,547),11521=>array(-11,-232,597,546),11522=>array(25,-232,572,547),11523=>array(38,-10,581,807),11524=>array(26,-228,578,546),11525=>array(19,-228,915,546),11526=>array(66,-8,627,816),11527=>array(27,-9,903,547),11528=>array(38,0,556,547),11529=>array(26,-227,579,816),11530=>array(18,-9,913,546),11531=>array(31,-8,619,816),11532=>array(18,0,590,816),11533=>array(27,-8,923,546),11534=>array(26,-8,600,546),11535=>array(49,-228,787,816),11536=>array(27,-9,905,816),11537=>array(26,-9,602,816),11538=>array(23,-232,569,546),11539=>array(26,-228,922,661),11540=>array(36,-228,882,546),11541=>array(23,-228,909,816),11542=>array(22,0,591,546),11543=>array(26,-228,602,547),11544=>array(26,-232,598,546),11545=>array(24,-228,591,816),11546=>array(23,-232,569,547),11547=>array(36,-9,626,816),11548=>array(22,-228,917,547),11549=>array(21,-232,577,546),11550=>array(28,-232,609,546),11551=>array(14,-228,588,567),11552=>array(22,-9,938,546),11553=>array(27,-228,583,816),11554=>array(34,-9,563,626),11555=>array(35,-228,593,816),11556=>array(26,-228,649,546),11557=>array(36,-8,884,816),11800=>array(33,-13,445,729),11807=>array(95,-34,659,415),11810=>array(69,314,419,760),11811=>array(111,314,404,760),11812=>array(-9,-132,283,314),11813=>array(-25,-132,326,314),11822=>array(93,0,522,742),19904=>array(75,-158,732,729),19905=>array(75,-158,732,729),19906=>array(75,-158,732,729),19907=>array(75,-158,732,729),19908=>array(75,-158,732,729),19909=>array(75,-158,732,729),19910=>array(75,-158,732,729),19911=>array(75,-158,732,729),19912=>array(75,-158,732,729),19913=>array(75,-158,733,729),19914=>array(75,-158,732,729),19915=>array(75,-158,732,729),19916=>array(75,-158,732,729),19917=>array(75,-158,732,729),19918=>array(75,-158,732,729),19919=>array(75,-158,732,729),19920=>array(75,-158,733,729),19921=>array(75,-158,732,729),19922=>array(75,-158,733,729),19923=>array(75,-158,732,729),19924=>array(75,-158,732,729),19925=>array(75,-158,732,729),19926=>array(75,-158,732,729),19927=>array(75,-158,732,729),19928=>array(75,-158,732,729),19929=>array(75,-158,732,729),19930=>array(75,-158,732,729),19931=>array(75,-158,733,729),19932=>array(75,-158,732,729),19933=>array(75,-158,732,729),19934=>array(75,-158,733,729),19935=>array(75,-158,732,729),19936=>array(75,-158,732,729),19937=>array(75,-158,732,729),19938=>array(75,-158,732,729),19939=>array(75,-158,732,729),19940=>array(75,-158,732,729),19941=>array(75,-158,733,729),19942=>array(75,-158,732,729),19943=>array(75,-158,732,729),19944=>array(75,-158,733,729),19945=>array(75,-158,732,729),19946=>array(75,-158,733,729),19947=>array(75,-158,732,729),19948=>array(75,-158,733,729),19949=>array(75,-158,732,729),19950=>array(75,-158,733,729),19951=>array(75,-158,732,729),19952=>array(75,-158,733,729),19953=>array(75,-158,732,729),19954=>array(75,-158,732,729),19955=>array(75,-158,732,729),19956=>array(75,-158,732,729),19957=>array(75,-158,733,729),19958=>array(75,-158,732,729),19959=>array(75,-158,732,729),19960=>array(75,-158,732,729),19961=>array(75,-158,733,729),19962=>array(75,-158,732,729),19963=>array(75,-158,733,729),19964=>array(75,-158,733,729),19965=>array(75,-158,732,729),19966=>array(75,-158,732,729),19967=>array(75,-158,732,729),42192=>array(19,0,629,729),42193=>array(19,0,647,729),42194=>array(15,0,641,729),42195=>array(19,0,708,729),42196=>array(43,0,673,729),42197=>array(-59,0,571,729),42198=>array(32,-14,700,742),42199=>array(19,0,753,729),42200=>array(-59,0,679,729),42201=>array(6,-14,523,729),42202=>array(32,-14,652,742),42203=>array(-12,-14,607,742),42204=>array(-23,0,667,729),42205=>array(19,0,603,729),42206=>array(19,0,603,729),42207=>array(19,0,877,729),42208=>array(19,0,734,729),42209=>array(19,0,510,729),42210=>array(13,-14,599,742),42211=>array(19,0,617,729),42212=>array(73,0,674,729),42213=>array(-60,0,628,729),42214=>array(68,0,756,729),42215=>array(19,0,734,729),42216=>array(4,-14,672,742),42217=>array(17,0,533,743),42218=>array(96,0,1029,729),42219=>array(-46,0,731,729),42220=>array(57,0,729,729),42221=>array(60,0,667,729),42222=>array(-59,0,622,729),42223=>array(68,0,756,729),42224=>array(19,0,603,729),42225=>array(12,0,596,729),42226=>array(19,0,316,729),42227=>array(32,-14,733,742),42228=>array(61,-14,712,729),42229=>array(18,0,660,743),42230=>array(8,0,499,729),42231=>array(43,0,729,729),42232=>array(15,0,207,189),42233=>array(-57,-142,205,189),42234=>array(15,0,523,189),42235=>array(15,-142,521,189),42236=>array(-67,-142,256,547),42237=>array(1,0,256,547),42238=>array(79,0,499,405),42239=>array(35,134,495,492),42564=>array(-1,-14,568,742),42565=>array(-6,-14,480,560),42566=>array(66,0,346,729),42567=>array(66,-1,293,547),42572=>array(33,-14,1213,654),42573=>array(28,-13,1016,547),42576=>array(83,0,1092,729),42577=>array(46,0,901,547),42580=>array(40,-14,1038,742),42581=>array(33,-14,848,560),42582=>array(19,0,916,729),42583=>array(27,-14,815,560),42594=>array(-23,-157,1029,729),42595=>array(-9,-138,870,547),42596=>array(-22,0,1026,729),42597=>array(1,0,848,547),42598=>array(19,0,1173,729),42599=>array(25,0,921,547),42600=>array(32,-14,733,742),42601=>array(32,-14,586,560),42602=>array(44,-14,889,742),42603=>array(39,-14,743,560),42604=>array(44,-14,1221,742),42605=>array(39,-14,957,560),42606=>array(25,-208,839,743),42634=>array(43,-200,777,729),42635=>array(30,-216,605,547),42636=>array(43,0,673,729),42637=>array(30,0,563,547),42644=>array(95,0,714,729),42645=>array(9,0,563,760),42760=>array(131,0,424,693),42761=>array(105,0,424,693),42762=>array(79,0,424,693),42763=>array(52,0,424,693),42764=>array(26,0,424,693),42765=>array(26,0,424,693),42766=>array(26,0,398,693),42767=>array(26,0,372,693),42768=>array(26,0,345,693),42769=>array(26,0,319,693),42770=>array(26,0,424,693),42771=>array(26,0,398,693),42772=>array(26,0,372,693),42773=>array(26,0,345,693),42774=>array(26,0,319,693),42779=>array(162,326,418,736),42780=>array(127,324,384,734),42781=>array(136,326,308,734),42782=>array(136,326,308,734),42783=>array(79,0,250,408),42786=>array(27,0,389,729),42787=>array(34,0,333,547),42788=>array(49,224,477,742),42789=>array(49,42,477,560),42790=>array(36,-200,752,729),42791=>array(28,-216,581,760),42792=>array(62,-216,886,729),42793=>array(43,-215,729,702),42794=>array(33,-14,587,742),42795=>array(-2,-202,465,560),42800=>array(35,0,474,547),42801=>array(9,-14,504,560),42802=>array(-60,0,1146,729),42803=>array(20,-14,883,560),42804=>array(-59,-14,1124,742),42805=>array(15,-14,926,560),42806=>array(-59,-14,1102,729),42807=>array(15,-14,919,560),42808=>array(-60,0,1031,729),42809=>array(20,-14,865,560),42810=>array(-60,0,1031,729),42811=>array(20,-14,865,560),42812=>array(-41,-216,1010,729),42813=>array(37,-216,882,560),42814=>array(-12,-14,603,742),42815=>array(-7,-14,483,560),42816=>array(19,0,753,729),42817=>array(27,0,645,760),42822=>array(72,0,701,729),42823=>array(62,0,425,760),42824=>array(59,0,551,729),42825=>array(72,0,468,760),42826=>array(4,-14,823,742),42827=>array(-4,-14,739,560),42830=>array(44,-14,1221,742),42831=>array(39,-14,957,560),42832=>array(-38,0,650,729),42833=>array(-73,-208,611,560),42834=>array(-1,0,844,729),42835=>array(0,-208,810,560),42838=>array(35,-188,729,742),42839=>array(30,-208,614,559),42852=>array(19,0,628,729),42853=>array(-10,-208,611,760),42854=>array(-45,0,628,729),42855=>array(-74,-208,611,760),42880=>array(63,0,555,729),42881=>array(9,-208,299,547),42882=>array(-8,-208,698,742),42883=>array(-9,-208,589,560),42889=>array(37,0,291,547),42890=>array(57,141,300,405),42891=>array(127,245,349,729),42892=>array(62,458,214,729),42893=>array(90,0,708,729),42894=>array(83,-216,552,760),42896=>array(19,-157,742,729),42897=>array(27,-138,626,560),42912=>array(-15,-14,754,742),42913=>array(-18,-216,662,559),42914=>array(-14,0,753,729),42915=>array(-17,0,645,760),42916=>array(-15,0,769,729),42917=>array(-18,0,659,560),42918=>array(-14,0,707,729),42919=>array(-13,0,491,560),42920=>array(-13,-14,661,742),42921=>array(-15,-14,551,560),42922=>array(-33,0,778,729),43002=>array(27,0,923,547),43003=>array(83,0,596,729),43004=>array(59,0,641,729),43005=>array(19,0,876,729),43006=>array(1,0,333,928),43007=>array(-36,0,1229,729),61184=>array(127,602,346,693),61185=>array(75,451,365,693),61186=>array(26,301,387,693),61187=>array(-11,150,396,693),61188=>array(-43,0,401,693),61189=>array(90,451,339,693),61190=>array(101,451,320,543),61191=>array(48,301,339,543),61192=>array(0,150,361,543),61193=>array(-37,0,370,543),61194=>array(74,301,334,693),61195=>array(63,301,313,543),61196=>array(74,301,293,393),61197=>array(22,150,313,393),61198=>array(-26,0,334,393),61199=>array(67,150,317,693),61200=>array(47,149,308,542),61201=>array(37,150,286,393),61202=>array(48,150,267,242),61203=>array(-4,0,286,242),61204=>array(65,0,296,693),61205=>array(41,0,291,543),61206=>array(21,0,282,393),61207=>array(11,0,260,242),61208=>array(22,0,241,92),61209=>array(26,0,230,693),62464=>array(76,-14,553,819),62465=>array(81,-15,549,823),62466=>array(78,-14,587,828),62467=>array(111,0,858,828),62468=>array(71,-15,611,828),62469=>array(73,-15,592,828),62470=>array(116,-15,610,828),62471=>array(83,-14,854,828),62472=>array(88,0,580,828),62473=>array(71,-14,616,820),62474=>array(125,-6,1096,828),62475=>array(73,-14,606,828),62476=>array(79,-15,607,820),62477=>array(97,0,844,828),62478=>array(70,-15,589,819),62479=>array(79,-15,650,840),62480=>array(89,0,844,828),62481=>array(88,-14,556,819),62482=>array(87,-14,707,828),62483=>array(72,-14,612,828),62484=>array(122,-14,853,828),62485=>array(70,-14,646,819),62486=>array(101,0,867,828),62487=>array(66,-14,646,820),62488=>array(65,-14,605,828),62489=>array(36,0,564,828),62490=>array(89,-15,644,820),62491=>array(78,-14,646,819),62492=>array(81,-14,656,828),62493=>array(70,-14,647,820),62494=>array(84,-14,557,819),62495=>array(26,-14,561,828),62496=>array(73,-15,593,828),62497=>array(79,-15,609,828),62498=>array(12,-73,593,828),62499=>array(69,-15,647,830),62500=>array(70,-15,653,828),62501=>array(68,-14,659,828),62502=>array(114,-14,915,828),62504=>array(36,-228,884,816),62505=>array(43,-223,739,843),62506=>array(73,-14,509,761),62507=>array(73,-14,510,773),62508=>array(73,-14,528,866),62509=>array(73,-14,561,812),62510=>array(73,-14,544,877),62511=>array(73,-14,520,803),62512=>array(27,-232,517,761),62513=>array(27,-232,568,793),62514=>array(27,-232,584,891),62515=>array(27,-232,541,803),62516=>array(72,0,531,761),62517=>array(72,0,573,793),62518=>array(72,0,541,803),62519=>array(87,-0,732,761),62520=>array(87,-0,732,773),62521=>array(87,-0,732,884),62522=>array(87,-0,732,793),62523=>array(87,-0,732,803),62524=>array(68,-232,559,761),62525=>array(68,-232,559,773),62526=>array(68,-232,567,894),62527=>array(68,-232,572,793),62528=>array(68,-232,559,803),62529=>array(68,-232,559,844),62917=>array(14,-14,583,760),64256=>array(44,0,824,760),64257=>array(44,0,718,760),64258=>array(44,0,718,760),64259=>array(44,0,1015,760),64260=>array(44,0,1016,760),64261=>array(41,0,752,760),64262=>array(7,-14,943,742),64275=>array(42,-14,1201,760),64276=>array(42,-14,1201,760),64277=>array(59,-208,1180,760),64278=>array(59,-208,1217,760),64279=>array(59,-208,1514,760),64285=>array(88,38,301,547),64286=>array(174,635,472,780),64287=>array(88,36,589,547),64288=>array(34,0,627,547),64289=>array(107,0,834,547),64290=>array(114,0,754,547),64291=>array(90,0,756,547),64292=>array(39,0,711,547),64293=>array(114,0,753,739),64294=>array(82,0,757,547),64295=>array(114,0,714,547),64296=>array(43,-4,718,547),64297=>array(140,256,724,627),64298=>array(80,0,771,710),64299=>array(80,0,771,723),64300=>array(80,0,771,710),64301=>array(80,0,771,710),64302=>array(94,-171,657,547),64303=>array(94,-217,657,547),64304=>array(94,-171,657,547),64305=>array(39,0,531,547),64306=>array(40,-9,385,547),64307=>array(114,0,586,547),64308=>array(90,0,595,547),64309=>array(66,0,407,547),64310=>array(66,0,494,547),64312=>array(127,-13,608,553),64313=>array(90,164,428,547),64314=>array(114,-240,494,547),64315=>array(39,0,513,547),64316=>array(114,0,570,711),64318=>array(76,0,621,554),64320=>array(39,0,387,547),64321=>array(130,-13,610,547),64323=>array(142,-240,577,547),64324=>array(82,0,590,547),64326=>array(48,0,604,547),64327=>array(46,-240,690,546),64328=>array(114,0,517,547),64329=>array(80,0,771,547),64330=>array(10,-4,585,547),64331=>array(82,0,323,710),64332=>array(39,0,531,710),64333=>array(39,0,513,710),64334=>array(82,0,590,710),64335=>array(42,0,659,729),65056=>array(-249,735,154,880),65057=>array(141,735,507,880),65058=>array(-193,756,152,894),65059=>array(136,756,482,894),65533=>array(89,-139,1048,926),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>313,33=>410,34=>469,35=>626,36=>626,37=>901,38=>785,39=>275,40=>411,41=>411,42=>470,43=>754,44=>342,45=>374,46=>342,47=>329,48=>626,49=>626,50=>626,51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>360,59=>360,60=>754,61=>754,62=>754,63=>522,64=>900,65=>696,66=>686,67=>660,68=>747,69=>615,70=>615,71=>738,72=>753,73=>334,74=>334,75=>697,76=>573,77=>896,78=>753,79=>765,80=>659,81=>765,82=>693,83=>648,84=>614,85=>730,86=>696,87=>993,88=>694,89=>651,90=>652,91=>411,92=>329,93=>411,94=>754,95=>450,96=>450,97=>607,98=>644,99=>533,100=>644,101=>610,102=>391,103=>644,104=>641,105=>308,106=>308,107=>598,108=>308,109=>938,110=>641,111=>618,112=>644,113=>644,114=>444,115=>536,116=>430,117=>641,118=>586,119=>831,120=>580,121=>586,122=>523,123=>641,124=>329,125=>641,126=>754,160=>313,161=>410,162=>626,163=>626,164=>572,165=>626,166=>329,167=>450,168=>450,169=>900,170=>507,171=>584,172=>754,173=>374,174=>900,175=>450,176=>450,177=>754,178=>394,179=>394,180=>450,181=>662,182=>572,183=>342,184=>450,185=>394,186=>507,187=>584,188=>932,189=>932,190=>932,191=>522,192=>696,193=>696,194=>696,195=>696,196=>696,197=>696,198=>976,199=>660,200=>615,201=>615,202=>615,203=>615,204=>334,205=>334,206=>334,207=>334,208=>760,209=>753,210=>765,211=>765,212=>765,213=>765,214=>765,215=>754,216=>765,217=>730,218=>730,219=>730,220=>730,221=>651,222=>668,223=>647,224=>607,225=>607,226=>607,227=>607,228=>607,229=>607,230=>943,231=>533,232=>610,233=>610,234=>610,235=>610,236=>308,237=>308,238=>308,239=>308,240=>618,241=>641,242=>618,243=>618,244=>618,245=>618,246=>618,247=>754,248=>618,249=>641,250=>641,251=>641,252=>641,253=>586,254=>644,255=>586,256=>696,257=>607,258=>696,259=>607,260=>696,261=>607,262=>660,263=>533,264=>660,265=>533,266=>660,267=>533,268=>660,269=>533,270=>747,271=>644,272=>760,273=>644,274=>615,275=>610,276=>615,277=>610,278=>615,279=>610,280=>615,281=>610,282=>615,283=>610,284=>738,285=>644,286=>738,287=>644,288=>738,289=>644,290=>738,291=>644,292=>753,293=>641,294=>876,295=>711,296=>334,297=>308,298=>334,299=>308,300=>334,301=>308,302=>334,303=>308,304=>334,305=>308,306=>669,307=>617,308=>334,309=>308,310=>697,311=>598,312=>598,313=>573,314=>308,315=>573,316=>308,317=>573,318=>308,319=>573,320=>308,321=>594,322=>337,323=>753,324=>641,325=>753,326=>641,327=>753,328=>641,329=>884,330=>753,331=>641,332=>765,333=>618,334=>765,335=>618,336=>765,337=>618,338=>1050,339=>984,340=>693,341=>444,342=>693,343=>444,344=>693,345=>444,346=>648,347=>536,348=>648,349=>536,350=>648,351=>536,352=>648,353=>536,354=>614,355=>430,356=>614,357=>430,358=>614,359=>430,360=>730,361=>641,362=>730,363=>641,364=>730,365=>641,366=>730,367=>641,368=>730,369=>641,370=>730,371=>641,372=>993,373=>831,374=>651,375=>586,376=>651,377=>652,378=>523,379=>652,380=>523,381=>652,382=>523,383=>391,384=>644,385=>729,386=>686,387=>644,388=>686,389=>644,390=>660,391=>660,392=>533,393=>760,394=>791,395=>686,396=>644,397=>618,398=>615,399=>765,400=>626,401=>615,402=>391,403=>738,404=>713,405=>940,406=>392,407=>350,408=>697,409=>598,410=>324,411=>532,412=>938,413=>753,414=>641,415=>765,416=>765,417=>618,418=>1002,419=>866,420=>703,421=>644,422=>693,423=>648,424=>536,425=>615,426=>497,427=>430,428=>636,429=>430,430=>614,431=>730,432=>641,433=>692,434=>732,435=>717,436=>700,437=>652,438=>523,439=>695,440=>695,441=>576,442=>523,443=>626,444=>695,445=>576,446=>515,447=>644,448=>334,449=>593,450=>489,451=>334,452=>1393,453=>1305,454=>1176,455=>879,456=>881,457=>603,458=>1074,459=>1091,460=>957,461=>696,462=>607,463=>334,464=>308,465=>765,466=>618,467=>730,468=>641,469=>730,470=>641,471=>730,472=>641,473=>730,474=>641,475=>730,476=>641,477=>610,478=>696,479=>607,480=>696,481=>607,482=>976,483=>943,484=>738,485=>644,486=>738,487=>644,488=>697,489=>598,490=>765,491=>618,492=>765,493=>618,494=>695,495=>523,496=>308,497=>1393,498=>1305,499=>1176,500=>738,501=>644,502=>1160,503=>708,504=>753,505=>641,506=>696,507=>607,508=>976,509=>943,510=>765,511=>618,512=>696,513=>607,514=>696,515=>607,516=>615,517=>610,518=>615,519=>610,520=>334,521=>308,522=>334,523=>308,524=>765,525=>618,526=>765,527=>618,528=>693,529=>444,530=>693,531=>444,532=>730,533=>641,534=>730,535=>641,536=>648,537=>536,538=>614,539=>430,540=>621,541=>546,542=>753,543=>641,544=>753,545=>778,546=>728,547=>593,548=>652,549=>523,550=>696,551=>607,552=>615,553=>610,554=>765,555=>618,556=>765,557=>618,558=>765,559=>618,560=>765,561=>618,562=>651,563=>586,564=>442,565=>780,566=>460,567=>308,568=>979,569=>979,570=>696,571=>660,572=>533,573=>573,574=>614,575=>536,576=>523,577=>703,578=>553,579=>686,580=>730,581=>696,582=>615,583=>610,584=>334,585=>308,586=>774,587=>712,588=>693,589=>444,590=>651,591=>586,592=>607,593=>644,594=>644,595=>644,596=>533,597=>533,598=>712,599=>712,600=>610,601=>610,602=>788,603=>501,604=>490,605=>696,606=>658,607=>308,608=>712,609=>644,610=>564,611=>661,612=>571,613=>641,614=>641,615=>641,616=>491,617=>396,618=>491,619=>502,620=>624,621=>308,622=>757,623=>938,624=>938,625=>938,626=>641,627=>713,628=>578,629=>618,630=>817,631=>613,632=>716,633=>484,634=>484,635=>584,636=>444,637=>444,638=>536,639=>536,640=>578,641=>578,642=>536,643=>374,644=>391,645=>544,646=>497,647=>430,648=>430,649=>828,650=>692,651=>603,652=>586,653=>831,654=>586,655=>651,656=>624,657=>615,658=>576,659=>576,660=>515,661=>515,662=>515,663=>515,664=>765,665=>569,666=>658,667=>616,668=>622,669=>308,670=>659,671=>485,672=>712,673=>515,674=>515,675=>1040,676=>1093,677=>1039,678=>877,679=>691,680=>836,681=>923,682=>776,683=>702,684=>532,685=>374,686=>609,687=>710,688=>410,689=>410,690=>197,691=>284,692=>284,693=>284,694=>369,695=>532,696=>375,697=>271,698=>469,699=>342,700=>342,701=>342,702=>330,703=>330,704=>293,705=>293,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>275,713=>450,714=>450,715=>450,716=>275,717=>450,718=>450,719=>450,720=>303,721=>303,722=>330,723=>330,724=>450,725=>450,726=>374,727=>295,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>315,735=>450,736=>370,737=>197,738=>343,739=>371,740=>293,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450,749=>450,750=>580,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>628,881=>508,882=>919,883=>752,884=>271,885=>271,886=>753,887=>630,890=>450,891=>533,892=>495,893=>494,894=>360,900=>397,901=>450,902=>717,903=>342,904=>761,905=>908,906=>507,908=>801,910=>882,911=>804,912=>351,913=>696,914=>686,915=>573,916=>696,917=>615,918=>652,919=>753,920=>765,921=>334,922=>697,923=>696,924=>896,925=>753,926=>568,927=>765,928=>753,929=>659,931=>615,932=>614,933=>651,934=>765,935=>694,936=>765,937=>765,938=>334,939=>651,940=>618,941=>501,942=>641,943=>351,944=>607,945=>618,946=>644,947=>613,948=>618,949=>501,950=>532,951=>641,952=>618,953=>351,954=>639,955=>569,956=>662,957=>613,958=>532,959=>618,960=>712,961=>644,962=>533,963=>701,964=>574,965=>607,966=>704,967=>580,968=>714,969=>782,970=>351,971=>607,972=>618,973=>607,974=>782,975=>697,976=>585,977=>594,978=>671,979=>883,980=>671,981=>716,982=>782,983=>669,984=>765,985=>618,986=>660,987=>533,988=>615,989=>444,990=>632,991=>593,992=>827,993=>564,994=>983,995=>753,996=>749,997=>644,998=>835,999=>669,1000=>660,1001=>585,1002=>709,1003=>604,1004=>677,1005=>644,1006=>614,1007=>531,1008=>669,1009=>644,1010=>533,1011=>308,1012=>765,1013=>580,1014=>580,1015=>668,1016=>644,1017=>660,1018=>896,1019=>659,1020=>644,1021=>660,1022=>660,1023=>628,1024=>615,1025=>615,1026=>791,1027=>573,1028=>660,1029=>648,1030=>334,1031=>334,1032=>334,1033=>1039,1034=>1017,1035=>791,1036=>735,1037=>753,1038=>694,1039=>753,1040=>696,1041=>686,1042=>686,1043=>573,1044=>801,1045=>615,1046=>1102,1047=>639,1048=>753,1049=>753,1050=>735,1051=>747,1052=>896,1053=>753,1054=>765,1055=>753,1056=>659,1057=>660,1058=>614,1059=>694,1060=>892,1061=>694,1062=>835,1063=>727,1064=>1112,1065=>1193,1066=>845,1067=>932,1068=>686,1069=>660,1070=>1056,1071=>693,1072=>607,1073=>628,1074=>569,1075=>470,1076=>727,1077=>610,1078=>896,1079=>523,1080=>630,1081=>630,1082=>611,1083=>659,1084=>735,1085=>622,1086=>618,1087=>622,1088=>644,1089=>533,1090=>521,1091=>586,1092=>893,1093=>580,1094=>667,1095=>618,1096=>956,1097=>995,1098=>676,1099=>813,1100=>569,1101=>533,1102=>875,1103=>578,1104=>610,1105=>610,1106=>642,1107=>470,1108=>533,1109=>536,1110=>308,1111=>308,1112=>308,1113=>892,1114=>860,1115=>661,1116=>611,1117=>630,1118=>586,1119=>622,1120=>983,1121=>782,1122=>756,1123=>662,1124=>911,1125=>755,1126=>893,1127=>749,1128=>1222,1129=>1009,1130=>765,1131=>618,1132=>1112,1133=>906,1134=>626,1135=>501,1136=>967,1137=>955,1138=>765,1139=>618,1140=>765,1141=>625,1142=>765,1143=>625,1144=>1033,1145=>939,1146=>967,1147=>776,1148=>1265,1149=>1055,1150=>983,1151=>782,1152=>660,1153=>533,1154=>587,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>844,1163=>725,1164=>686,1165=>550,1166=>662,1167=>646,1168=>573,1169=>470,1170=>599,1171=>488,1172=>709,1173=>470,1174=>1102,1175=>896,1176=>639,1177=>523,1178=>697,1179=>611,1180=>735,1181=>611,1182=>735,1183=>611,1184=>914,1185=>743,1186=>753,1187=>622,1188=>992,1189=>783,1190=>1129,1191=>880,1192=>851,1193=>773,1194=>660,1195=>533,1196=>614,1197=>521,1198=>651,1199=>586,1200=>651,1201=>586,1202=>694,1203=>580,1204=>993,1205=>901,1206=>727,1207=>618,1208=>727,1209=>618,1210=>727,1211=>641,1212=>923,1213=>729,1214=>923,1215=>729,1216=>334,1217=>1102,1218=>896,1219=>700,1220=>566,1221=>839,1222=>724,1223=>753,1224=>622,1225=>844,1226=>725,1227=>727,1228=>618,1229=>986,1230=>838,1231=>308,1232=>696,1233=>607,1234=>696,1235=>607,1236=>976,1237=>943,1238=>615,1239=>610,1240=>765,1241=>610,1242=>765,1243=>610,1244=>1102,1245=>896,1246=>639,1247=>523,1248=>695,1249=>576,1250=>753,1251=>630,1252=>753,1253=>630,1254=>765,1255=>618,1256=>765,1257=>618,1258=>765,1259=>618,1260=>660,1261=>533,1262=>694,1263=>586,1264=>694,1265=>586,1266=>694,1267=>586,1268=>727,1269=>618,1270=>573,1271=>470,1272=>932,1273=>813,1274=>599,1275=>488,1276=>694,1277=>580,1278=>694,1279=>580,1280=>686,1281=>547,1282=>1043,1283=>804,1284=>1007,1285=>828,1286=>745,1287=>624,1288=>1117,1289=>915,1290=>1160,1291=>912,1292=>755,1293=>574,1294=>844,1295=>722,1296=>626,1297=>501,1298=>747,1299=>659,1300=>1157,1301=>963,1302=>958,1303=>883,1304=>973,1305=>864,1306=>765,1307=>644,1308=>993,1309=>831,1310=>735,1311=>611,1312=>1123,1313=>920,1314=>1128,1315=>880,1316=>861,1317=>726,1329=>813,1330=>729,1331=>728,1332=>731,1333=>729,1334=>733,1335=>651,1336=>720,1337=>903,1338=>728,1339=>666,1340=>558,1341=>961,1342=>787,1343=>713,1344=>650,1345=>729,1346=>715,1347=>704,1348=>780,1349=>689,1350=>715,1351=>708,1352=>730,1353=>677,1354=>867,1355=>711,1356=>780,1357=>730,1358=>715,1359=>693,1360=>666,1361=>698,1362=>576,1363=>833,1364=>698,1365=>763,1366=>855,1369=>330,1370=>342,1371=>308,1372=>374,1373=>313,1374=>461,1375=>468,1377=>938,1378=>642,1379=>704,1380=>708,1381=>642,1382=>643,1383=>565,1384=>642,1385=>756,1386=>704,1387=>642,1388=>309,1389=>984,1390=>637,1391=>642,1392=>642,1393=>603,1394=>642,1395=>642,1396=>642,1397=>308,1398=>642,1399=>486,1400=>642,1401=>366,1402=>938,1403=>572,1404=>666,1405=>642,1406=>642,1407=>934,1408=>642,1409=>643,1410=>479,1411=>934,1412=>647,1413=>620,1414=>813,1415=>812,1417=>360,1418=>374,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>374,1471=>0,1472=>334,1473=>0,1474=>0,1475=>334,1478=>447,1479=>0,1488=>655,1489=>549,1490=>402,1491=>529,1492=>618,1493=>309,1494=>360,1495=>618,1496=>611,1497=>265,1498=>520,1499=>510,1500=>544,1501=>626,1502=>651,1503=>309,1504=>408,1505=>611,1506=>599,1507=>607,1508=>592,1509=>595,1510=>587,1511=>663,1512=>542,1513=>673,1514=>615,1520=>598,1521=>598,1522=>597,1523=>399,1524=>639,3647=>626,3713=>734,3714=>673,3716=>674,3719=>512,3720=>668,3722=>669,3725=>685,3732=>635,3733=>633,3734=>672,3735=>737,3737=>657,3738=>654,3739=>654,3740=>830,3741=>744,3742=>779,3743=>779,3745=>752,3746=>685,3747=>692,3749=>691,3751=>642,3754=>744,3755=>928,3757=>651,3758=>705,3759=>840,3760=>620,3761=>0,3762=>549,3763=>549,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>603,3776=>464,3777=>774,3778=>464,3779=>584,3780=>569,3782=>683,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>694,3793=>694,3794=>624,3795=>752,3796=>655,3797=>655,3798=>764,3799=>710,3800=>683,3801=>818,3804=>1227,3805=>1227,4256=>787,4257=>660,4258=>611,4259=>751,4260=>554,4261=>690,4262=>678,4263=>822,4264=>408,4265=>558,4266=>758,4267=>794,4268=>562,4269=>769,4270=>703,4271=>566,4272=>820,4273=>558,4274=>558,4275=>769,4276=>779,4277=>651,4278=>567,4279=>558,4280=>563,4281=>558,4282=>736,4283=>786,4284=>554,4285=>561,4286=>563,4287=>652,4288=>760,4289=>536,4290=>620,4291=>536,4292=>534,4293=>664,4304=>498,4305=>507,4306=>560,4307=>751,4308=>495,4309=>502,4310=>491,4311=>745,4312=>507,4313=>500,4314=>967,4315=>507,4316=>507,4317=>733,4318=>498,4319=>502,4320=>741,4321=>507,4322=>630,4323=>523,4324=>762,4325=>499,4326=>733,4327=>502,4328=>488,4329=>507,4330=>560,4331=>507,4332=>489,4333=>509,4334=>507,4335=>477,4336=>498,4337=>498,4338=>498,4339=>499,4340=>498,4341=>524,4342=>768,4343=>544,4344=>502,4345=>568,4346=>499,4347=>403,4348=>291,5121=>696,5122=>696,5123=>696,5124=>696,5125=>814,5126=>814,5127=>814,5129=>814,5130=>814,5131=>814,5132=>916,5133=>908,5134=>916,5135=>908,5136=>916,5137=>908,5138=>1034,5139=>1025,5140=>1034,5141=>1025,5142=>814,5143=>1034,5144=>1028,5145=>1034,5146=>1028,5147=>814,5149=>278,5150=>476,5151=>382,5152=>382,5153=>355,5154=>355,5155=>355,5156=>355,5157=>507,5158=>423,5159=>278,5160=>355,5161=>355,5162=>355,5163=>1092,5164=>888,5165=>1094,5166=>1167,5167=>696,5168=>696,5169=>696,5170=>696,5171=>797,5172=>797,5173=>797,5175=>797,5176=>797,5177=>797,5178=>916,5179=>908,5180=>916,5181=>908,5182=>916,5183=>908,5184=>1034,5185=>1025,5186=>1034,5187=>1025,5188=>1034,5189=>1028,5190=>1034,5191=>1028,5192=>797,5193=>518,5194=>206,5196=>730,5197=>730,5198=>730,5199=>730,5200=>734,5201=>734,5202=>734,5204=>734,5205=>734,5206=>734,5207=>950,5208=>943,5209=>950,5210=>943,5211=>950,5212=>943,5213=>954,5214=>949,5215=>954,5216=>949,5217=>954,5218=>946,5219=>954,5220=>946,5221=>954,5222=>435,5223=>904,5224=>904,5225=>921,5226=>915,5227=>668,5228=>668,5229=>668,5230=>668,5231=>668,5232=>668,5233=>668,5234=>668,5235=>668,5236=>926,5237=>877,5238=>882,5239=>877,5240=>882,5241=>877,5242=>926,5243=>877,5244=>926,5245=>877,5246=>882,5247=>877,5248=>882,5249=>877,5250=>882,5251=>451,5252=>451,5253=>844,5254=>844,5255=>844,5256=>844,5257=>668,5258=>668,5259=>668,5260=>668,5261=>668,5262=>668,5263=>668,5264=>668,5265=>668,5266=>926,5267=>877,5268=>926,5269=>877,5270=>926,5271=>877,5272=>926,5273=>877,5274=>926,5275=>877,5276=>926,5277=>877,5278=>926,5279=>877,5280=>926,5281=>451,5282=>451,5283=>563,5284=>563,5285=>563,5286=>563,5287=>563,5288=>563,5289=>563,5290=>563,5291=>563,5292=>793,5293=>769,5294=>777,5295=>786,5296=>777,5297=>786,5298=>793,5299=>786,5300=>793,5301=>786,5302=>777,5303=>786,5304=>777,5305=>786,5306=>777,5307=>392,5308=>493,5309=>392,5312=>889,5313=>889,5314=>889,5315=>889,5316=>838,5317=>838,5318=>838,5319=>838,5320=>838,5321=>1114,5322=>1122,5323=>1080,5324=>1105,5325=>1080,5326=>1105,5327=>838,5328=>593,5329=>447,5330=>593,5331=>889,5332=>889,5333=>889,5334=>889,5335=>838,5336=>838,5337=>838,5338=>838,5339=>838,5340=>1107,5341=>1122,5342=>1155,5343=>1105,5344=>1155,5345=>1105,5346=>1105,5347=>1093,5348=>1105,5349=>1093,5350=>1155,5351=>1105,5352=>1155,5353=>1105,5354=>593,5356=>797,5357=>657,5358=>657,5359=>657,5360=>657,5361=>657,5362=>657,5363=>657,5364=>657,5365=>657,5366=>897,5367=>862,5368=>870,5369=>890,5370=>870,5371=>890,5372=>897,5373=>862,5374=>897,5375=>862,5376=>870,5377=>890,5378=>870,5379=>890,5380=>870,5381=>443,5382=>414,5383=>443,5392=>831,5393=>831,5394=>831,5395=>1022,5396=>1022,5397=>1022,5398=>1022,5399=>1088,5400=>1081,5401=>1088,5402=>1081,5403=>1088,5404=>1081,5405=>1288,5406=>1278,5407=>1288,5408=>1278,5409=>1288,5410=>1278,5411=>1288,5412=>1278,5413=>671,5414=>698,5415=>698,5416=>698,5417=>698,5418=>698,5419=>698,5420=>698,5421=>698,5422=>698,5423=>902,5424=>903,5425=>911,5426=>896,5427=>911,5428=>896,5429=>902,5430=>903,5431=>902,5432=>903,5433=>911,5434=>896,5435=>911,5436=>896,5437=>911,5438=>445,5440=>355,5441=>458,5442=>929,5443=>929,5444=>878,5445=>878,5446=>878,5447=>878,5448=>659,5449=>659,5450=>659,5451=>659,5452=>659,5453=>659,5454=>902,5455=>863,5456=>445,5458=>797,5459=>696,5460=>696,5461=>696,5462=>696,5463=>835,5464=>835,5465=>835,5466=>835,5467=>1055,5468=>1028,5469=>542,5470=>730,5471=>730,5472=>730,5473=>730,5474=>730,5475=>730,5476=>734,5477=>734,5478=>734,5479=>734,5480=>954,5481=>946,5482=>493,5492=>879,5493=>879,5494=>879,5495=>879,5496=>879,5497=>879,5498=>879,5499=>556,5500=>753,5501=>458,5502=>1114,5503=>1114,5504=>1114,5505=>1114,5506=>1114,5507=>1114,5508=>1114,5509=>890,5514=>879,5515=>879,5516=>879,5517=>879,5518=>1432,5519=>1432,5520=>1432,5521=>1165,5522=>1165,5523=>1432,5524=>1432,5525=>763,5526=>1146,5536=>889,5537=>889,5538=>838,5539=>838,5540=>838,5541=>838,5542=>593,5543=>698,5544=>698,5545=>698,5546=>698,5547=>698,5548=>698,5549=>698,5550=>445,5551=>668,5598=>747,5601=>747,5702=>446,5703=>446,5742=>371,5743=>1114,5744=>1432,5745=>1814,5746=>1814,5747=>1548,5748=>1510,5749=>1814,5750=>1814,7424=>586,7425=>750,7426=>943,7427=>547,7428=>533,7429=>608,7430=>608,7431=>502,7432=>501,7433=>308,7434=>444,7435=>598,7436=>485,7437=>735,7438=>630,7439=>618,7440=>533,7441=>594,7442=>594,7443=>594,7444=>984,7446=>618,7447=>618,7448=>500,7449=>578,7450=>578,7451=>521,7452=>571,7453=>663,7454=>853,7455=>625,7456=>586,7457=>831,7458=>523,7459=>581,7462=>485,7463=>586,7464=>622,7465=>500,7466=>703,7467=>659,7468=>438,7469=>615,7470=>432,7472=>470,7473=>387,7474=>387,7475=>465,7476=>474,7477=>211,7478=>211,7479=>439,7480=>361,7481=>563,7482=>474,7483=>474,7484=>481,7485=>458,7486=>415,7487=>436,7488=>387,7489=>460,7490=>625,7491=>412,7492=>412,7493=>431,7494=>641,7495=>431,7496=>431,7497=>431,7498=>431,7499=>347,7500=>347,7501=>431,7502=>197,7503=>438,7504=>597,7505=>410,7506=>439,7507=>372,7508=>439,7509=>439,7510=>431,7511=>349,7512=>410,7513=>416,7514=>597,7515=>451,7517=>405,7518=>386,7519=>389,7520=>443,7521=>365,7522=>197,7523=>284,7524=>410,7525=>451,7526=>405,7527=>386,7528=>405,7529=>443,7530=>365,7543=>644,7544=>474,7547=>491,7549=>672,7557=>462,7579=>431,7580=>372,7581=>372,7582=>439,7583=>347,7584=>339,7585=>313,7586=>431,7587=>410,7588=>312,7589=>253,7590=>312,7591=>312,7592=>388,7593=>293,7594=>296,7595=>333,7596=>598,7597=>597,7598=>505,7599=>505,7600=>403,7601=>439,7602=>488,7603=>379,7604=>356,7605=>349,7606=>524,7607=>444,7608=>359,7609=>405,7610=>451,7611=>375,7612=>471,7613=>422,7614=>409,7615=>382,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>696,7681=>607,7682=>686,7683=>644,7684=>686,7685=>644,7686=>686,7687=>644,7688=>660,7689=>533,7690=>747,7691=>644,7692=>747,7693=>644,7694=>747,7695=>644,7696=>747,7697=>644,7698=>747,7699=>644,7700=>615,7701=>610,7702=>615,7703=>610,7704=>615,7705=>610,7706=>615,7707=>610,7708=>615,7709=>610,7710=>615,7711=>391,7712=>738,7713=>644,7714=>753,7715=>641,7716=>753,7717=>641,7718=>753,7719=>641,7720=>753,7721=>641,7722=>753,7723=>641,7724=>334,7725=>308,7726=>334,7727=>308,7728=>697,7729=>598,7730=>697,7731=>598,7732=>697,7733=>598,7734=>573,7735=>308,7736=>573,7737=>308,7738=>573,7739=>308,7740=>573,7741=>308,7742=>896,7743=>938,7744=>896,7745=>938,7746=>896,7747=>938,7748=>753,7749=>641,7750=>753,7751=>641,7752=>753,7753=>641,7754=>753,7755=>641,7756=>765,7757=>618,7758=>765,7759=>618,7760=>765,7761=>618,7762=>765,7763=>618,7764=>659,7765=>644,7766=>659,7767=>644,7768=>693,7769=>444,7770=>693,7771=>444,7772=>693,7773=>444,7774=>693,7775=>444,7776=>648,7777=>536,7778=>648,7779=>536,7780=>648,7781=>536,7782=>648,7783=>536,7784=>648,7785=>536,7786=>614,7787=>430,7788=>614,7789=>430,7790=>614,7791=>430,7792=>614,7793=>430,7794=>730,7795=>641,7796=>730,7797=>641,7798=>730,7799=>641,7800=>730,7801=>641,7802=>730,7803=>641,7804=>696,7805=>586,7806=>696,7807=>586,7808=>993,7809=>831,7810=>993,7811=>831,7812=>993,7813=>831,7814=>993,7815=>831,7816=>993,7817=>831,7818=>694,7819=>580,7820=>694,7821=>580,7822=>651,7823=>586,7824=>652,7825=>523,7826=>652,7827=>523,7828=>652,7829=>523,7830=>641,7831=>430,7832=>831,7833=>586,7834=>607,7835=>391,7836=>391,7837=>391,7838=>806,7839=>618,7840=>696,7841=>607,7842=>696,7843=>607,7844=>696,7845=>607,7846=>696,7847=>607,7848=>696,7849=>607,7850=>696,7851=>607,7852=>696,7853=>607,7854=>696,7855=>607,7856=>696,7857=>607,7858=>696,7859=>607,7860=>696,7861=>607,7862=>696,7863=>607,7864=>615,7865=>610,7866=>615,7867=>610,7868=>615,7869=>610,7870=>615,7871=>610,7872=>615,7873=>610,7874=>615,7875=>610,7876=>615,7877=>610,7878=>615,7879=>610,7880=>334,7881=>308,7882=>334,7883=>308,7884=>765,7885=>618,7886=>765,7887=>618,7888=>765,7889=>618,7890=>765,7891=>618,7892=>765,7893=>618,7894=>765,7895=>618,7896=>765,7897=>618,7898=>765,7899=>618,7900=>765,7901=>618,7902=>765,7903=>618,7904=>765,7905=>618,7906=>765,7907=>618,7908=>730,7909=>641,7910=>730,7911=>641,7912=>730,7913=>641,7914=>730,7915=>641,7916=>730,7917=>641,7918=>730,7919=>641,7920=>730,7921=>641,7922=>651,7923=>586,7924=>651,7925=>586,7926=>651,7927=>586,7928=>651,7929=>586,7930=>857,7931=>579,7936=>618,7937=>618,7938=>618,7939=>618,7940=>618,7941=>618,7942=>618,7943=>618,7944=>696,7945=>696,7946=>937,7947=>939,7948=>841,7949=>866,7950=>751,7951=>773,7952=>501,7953=>501,7954=>501,7955=>501,7956=>501,7957=>501,7960=>712,7961=>715,7962=>989,7963=>986,7964=>920,7965=>947,7968=>641,7969=>641,7970=>641,7971=>641,7972=>641,7973=>641,7974=>641,7975=>641,7976=>851,7977=>856,7978=>1125,7979=>1125,7980=>1062,7981=>1085,7982=>948,7983=>956,7984=>351,7985=>351,7986=>351,7987=>351,7988=>351,7989=>351,7990=>351,7991=>351,7992=>435,7993=>440,7994=>699,7995=>707,7996=>641,7997=>664,7998=>544,7999=>544,8000=>618,8001=>618,8002=>618,8003=>618,8004=>618,8005=>618,8008=>802,8009=>839,8010=>1099,8011=>1101,8012=>947,8013=>974,8016=>607,8017=>607,8018=>607,8019=>607,8020=>607,8021=>607,8022=>607,8023=>607,8025=>837,8027=>1065,8029=>1079,8031=>944,8032=>782,8033=>782,8034=>782,8035=>782,8036=>782,8037=>782,8038=>782,8039=>782,8040=>817,8041=>862,8042=>1121,8043=>1126,8044=>968,8045=>994,8046=>925,8047=>968,8048=>618,8049=>618,8050=>501,8051=>501,8052=>641,8053=>641,8054=>351,8055=>351,8056=>618,8057=>618,8058=>607,8059=>607,8060=>782,8061=>782,8064=>618,8065=>618,8066=>618,8067=>618,8068=>618,8069=>618,8070=>618,8071=>618,8072=>696,8073=>696,8074=>937,8075=>939,8076=>841,8077=>866,8078=>751,8079=>773,8080=>641,8081=>641,8082=>641,8083=>641,8084=>641,8085=>641,8086=>641,8087=>641,8088=>851,8089=>856,8090=>1125,8091=>1125,8092=>1062,8093=>1085,8094=>948,8095=>956,8096=>782,8097=>782,8098=>782,8099=>782,8100=>782,8101=>782,8102=>782,8103=>782,8104=>817,8105=>862,8106=>1121,8107=>1126,8108=>968,8109=>994,8110=>925,8111=>968,8112=>618,8113=>618,8114=>618,8115=>618,8116=>618,8118=>618,8119=>618,8120=>696,8121=>696,8122=>789,8123=>717,8124=>696,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>641,8131=>641,8132=>641,8134=>641,8135=>641,8136=>836,8137=>761,8138=>972,8139=>908,8140=>753,8141=>450,8142=>450,8143=>450,8144=>351,8145=>351,8146=>351,8147=>351,8150=>351,8151=>351,8152=>334,8153=>334,8154=>559,8155=>507,8157=>450,8158=>450,8159=>450,8160=>607,8161=>607,8162=>607,8163=>607,8164=>644,8165=>644,8166=>607,8167=>607,8168=>651,8169=>651,8170=>918,8171=>882,8172=>754,8173=>450,8174=>450,8175=>450,8178=>782,8179=>782,8180=>782,8182=>782,8183=>782,8184=>958,8185=>801,8186=>976,8187=>804,8188=>765,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>342,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>342,8217=>342,8218=>342,8219=>342,8220=>580,8221=>580,8222=>580,8223=>591,8224=>450,8225=>450,8226=>575,8227=>575,8228=>342,8229=>616,8230=>900,8231=>313,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1309,8241=>1717,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8249=>371,8250=>371,8251=>875,8252=>564,8253=>522,8254=>450,8255=>745,8256=>745,8257=>296,8258=>920,8259=>450,8260=>150,8261=>411,8262=>411,8263=>927,8264=>746,8265=>746,8266=>461,8267=>618,8268=>450,8269=>450,8270=>470,8271=>360,8272=>745,8273=>470,8274=>500,8275=>754,8276=>745,8277=>754,8278=>615,8279=>731,8280=>754,8281=>754,8282=>342,8283=>784,8284=>754,8285=>342,8286=>342,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>394,8305=>197,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475,8316=>475,8317=>259,8318=>259,8319=>410,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>259,8334=>259,8336=>412,8337=>431,8338=>439,8339=>371,8340=>431,8341=>410,8342=>438,8343=>197,8344=>597,8345=>410,8346=>431,8347=>343,8348=>349,8352=>836,8353=>626,8354=>626,8355=>626,8356=>626,8357=>938,8358=>753,8359=>1339,8360=>1084,8361=>993,8362=>768,8363=>626,8364=>626,8365=>626,8366=>626,8367=>1252,8368=>626,8369=>626,8370=>626,8371=>626,8372=>773,8373=>626,8376=>626,8377=>626,8378=>692,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>995,8449=>995,8450=>660,8451=>1090,8452=>807,8453=>1002,8454=>1033,8455=>626,8456=>628,8457=>856,8459=>965,8460=>822,8461=>799,8462=>641,8463=>641,8464=>537,8465=>627,8466=>771,8467=>424,8468=>876,8469=>753,8470=>1083,8471=>900,8472=>627,8473=>675,8474=>765,8475=>844,8476=>732,8477=>721,8478=>807,8479=>639,8480=>917,8481=>1115,8482=>900,8483=>751,8484=>679,8485=>560,8486=>765,8487=>692,8488=>686,8489=>272,8490=>697,8491=>696,8492=>835,8493=>736,8494=>769,8495=>572,8496=>656,8497=>727,8498=>615,8499=>1065,8500=>418,8501=>714,8502=>658,8503=>444,8504=>615,8505=>342,8506=>851,8507=>1232,8508=>710,8509=>663,8510=>589,8511=>776,8512=>756,8513=>707,8514=>518,8515=>573,8516=>684,8517=>747,8518=>644,8519=>610,8520=>308,8521=>308,8523=>785,8526=>492,8528=>932,8529=>932,8530=>1334,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>334,8545=>593,8546=>851,8547=>989,8548=>696,8549=>989,8550=>1247,8551=>1505,8552=>1008,8553=>694,8554=>1008,8555=>1266,8556=>573,8557=>660,8558=>747,8559=>896,8560=>308,8561=>546,8562=>785,8563=>885,8564=>586,8565=>866,8566=>1104,8567=>1342,8568=>872,8569=>580,8570=>872,8571=>1110,8572=>308,8573=>533,8574=>644,8575=>938,8576=>1160,8577=>747,8578=>1160,8579=>660,8580=>533,8581=>660,8585=>932,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>696,8705=>626,8706=>489,8707=>615,8708=>615,8709=>771,8710=>627,8711=>627,8712=>807,8713=>807,8714=>675,8715=>807,8716=>807,8717=>675,8718=>572,8719=>708,8720=>708,8721=>646,8722=>754,8723=>754,8724=>626,8725=>329,8726=>626,8727=>754,8728=>563,8729=>342,8730=>600,8731=>600,8732=>600,8733=>641,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450,8742=>450,8743=>730,8744=>730,8745=>730,8746=>730,8747=>549,8748=>835,8749=>1165,8750=>506,8751=>879,8752=>1181,8753=>506,8754=>506,8755=>506,8756=>626,8757=>626,8758=>264,8759=>626,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>956,8789=>956,8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>756,8809=>756,8810=>942,8811=>942,8812=>450,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754,8842=>754,8843=>754,8844=>730,8845=>730,8846=>730,8847=>754,8848=>754,8849=>754,8850=>754,8851=>716,8852=>716,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>822,8867=>822,8868=>822,8869=>822,8870=>488,8871=>488,8872=>822,8873=>822,8874=>822,8875=>822,8876=>822,8877=>822,8878=>822,8879=>822,8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>488,8891=>730,8892=>730,8893=>730,8894=>754,8895=>754,8896=>758,8897=>758,8898=>758,8899=>758,8900=>444,8901=>342,8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>730,8911=>730,8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900,8946=>1042,8947=>807,8948=>675,8949=>807,8950=>807,8951=>675,8952=>807,8953=>807,8954=>1042,8955=>807,8956=>675,8957=>807,8958=>675,8959=>807,8960=>542,8961=>542,8962=>644,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>411,8969=>411,8970=>411,8971=>411,8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>484,8984=>835,8985=>754,8988=>422,8989=>422,8990=>422,8991=>422,8992=>549,8993=>549,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272,9004=>786,9075=>351,9076=>644,9077=>782,9082=>618,9085=>776,9095=>1037,9108=>786,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>549,9166=>754,9167=>850,9187=>786,9189=>692,9192=>626,9250=>644,9251=>644,9312=>762,9313=>762,9314=>762,9315=>762,9316=>762,9317=>762,9318=>762,9319=>762,9320=>762,9321=>762,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>756,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>692,9697=>692,9698=>692,9699=>692,9700=>692,9701=>692,9702=>575,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>807,9777=>807,9778=>807,9779=>807,9780=>807,9781=>807,9782=>807,9783=>807,9784=>807,9785=>938,9786=>938,9787=>938,9788=>807,9789=>807,9790=>807,9791=>552,9792=>659,9793=>659,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>807,9863=>807,9864=>807,9865=>807,9866=>807,9867=>807,9868=>807,9869=>807,9870=>807,9871=>807,9872=>807,9873=>807,9874=>807,9875=>807,9876=>807,9877=>487,9878=>807,9879=>807,9880=>807,9881=>807,9882=>807,9883=>807,9884=>807,9888=>807,9889=>632,9890=>904,9891=>980,9892=>1057,9893=>813,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>659,9907=>659,9908=>659,9909=>659,9910=>765,9911=>659,9912=>659,9920=>754,9921=>754,9922=>754,9923=>754,9954=>659,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484,10081=>754,10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>762,10103=>762,10104=>762,10105=>762,10106=>762,10107=>762,10108=>762,10109=>762,10110=>762,10111=>762,10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>411,10182=>411,10208=>444,10214=>438,10215=>438,10216=>411,10217=>411,10218=>648,10219=>648,10224=>754,10225=>754,10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703,10502=>754,10503=>754,10506=>754,10507=>754,10560=>754,10561=>754,10627=>678,10628=>678,10702=>754,10703=>941,10704=>941,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900,10754=>900,10764=>1495,10765=>506,10766=>506,10767=>506,10768=>506,10769=>506,10770=>506,10771=>506,10772=>506,10773=>506,10774=>506,10775=>506,10776=>506,10777=>506,10778=>506,10779=>506,10780=>506,10799=>754,10858=>754,10859=>754,10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>573,11361=>324,11362=>573,11363=>659,11364=>693,11365=>607,11366=>430,11367=>860,11368=>641,11369=>697,11370=>598,11371=>652,11372=>523,11373=>774,11374=>896,11375=>696,11376=>774,11377=>700,11378=>1099,11379=>950,11380=>586,11381=>628,11382=>508,11383=>704,11385=>484,11386=>618,11387=>502,11388=>197,11389=>438,11390=>648,11391=>652,11520=>596,11521=>608,11522=>595,11523=>566,11524=>595,11525=>928,11526=>646,11527=>928,11528=>583,11529=>600,11530=>928,11531=>605,11532=>609,11533=>932,11534=>612,11535=>797,11536=>928,11537=>615,11538=>606,11539=>931,11540=>930,11541=>924,11542=>608,11543=>605,11544=>600,11545=>600,11546=>593,11547=>604,11548=>935,11549=>605,11550=>623,11551=>593,11552=>943,11553=>593,11554=>588,11555=>603,11556=>659,11557=>915,11800=>527,11807=>754,11810=>411,11811=>411,11812=>411,11813=>411,11822=>522,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42192=>686,42193=>659,42194=>659,42195=>747,42196=>614,42197=>614,42198=>738,42199=>697,42200=>697,42201=>477,42202=>660,42203=>660,42204=>652,42205=>615,42206=>615,42207=>896,42208=>753,42209=>573,42210=>648,42211=>693,42212=>693,42213=>696,42214=>696,42215=>753,42216=>707,42217=>477,42218=>993,42219=>694,42220=>651,42221=>686,42222=>696,42223=>696,42224=>615,42225=>615,42226=>334,42227=>765,42228=>730,42229=>730,42230=>518,42231=>747,42232=>290,42233=>290,42234=>606,42235=>606,42236=>290,42237=>290,42238=>529,42239=>529,42564=>648,42565=>536,42566=>392,42567=>396,42572=>1265,42573=>1055,42576=>1110,42577=>924,42580=>1056,42581=>875,42582=>990,42583=>872,42594=>990,42595=>846,42596=>986,42597=>823,42598=>1134,42599=>896,42600=>765,42601=>618,42602=>933,42603=>781,42604=>1266,42605=>995,42606=>865,42634=>849,42635=>673,42636=>614,42637=>521,42644=>727,42645=>641,42760=>450,42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450,42771=>450,42772=>450,42773=>450,42774=>450,42779=>360,42780=>360,42781=>258,42782=>258,42783=>258,42786=>399,42787=>351,42788=>486,42789=>486,42790=>753,42791=>641,42792=>928,42793=>771,42794=>626,42795=>501,42800=>502,42801=>536,42802=>1214,42803=>946,42804=>1156,42805=>958,42806=>1120,42807=>947,42808=>971,42809=>830,42810=>971,42811=>830,42812=>932,42813=>830,42814=>628,42815=>494,42816=>590,42817=>521,42822=>765,42823=>488,42824=>614,42825=>478,42826=>826,42827=>732,42830=>1266,42831=>995,42832=>659,42833=>644,42834=>853,42835=>843,42838=>765,42839=>644,42852=>664,42853=>644,42854=>664,42855=>644,42880=>573,42881=>308,42882=>753,42883=>641,42889=>360,42890=>356,42891=>410,42892=>275,42893=>727,42894=>624,42896=>835,42897=>691,42912=>738,42913=>644,42914=>697,42915=>598,42916=>753,42917=>641,42918=>693,42919=>444,42920=>648,42921=>536,42922=>797,43002=>956,43003=>615,43004=>659,43005=>896,43006=>334,43007=>1192,61184=>194,61185=>218,61186=>240,61187=>249,61188=>254,61189=>218,61190=>194,61191=>218,61192=>240,61193=>249,61194=>240,61195=>218,61196=>194,61197=>218,61198=>240,61199=>249,61200=>240,61201=>218,61202=>194,61203=>218,61204=>254,61205=>249,61206=>240,61207=>218,61208=>194,61209=>254,62464=>551,62465=>551,62466=>587,62467=>812,62468=>555,62469=>555,62470=>612,62471=>813,62472=>539,62473=>555,62474=>1046,62475=>559,62476=>560,62477=>803,62478=>551,62479=>559,62480=>832,62481=>560,62482=>678,62483=>562,62484=>797,62485=>559,62486=>816,62487=>559,62488=>550,62489=>561,62490=>609,62491=>559,62492=>550,62493=>567,62494=>560,62495=>505,62496=>550,62497=>563,62498=>551,62499=>550,62500=>556,62501=>600,62502=>866,62504=>920,62505=>760,62506=>507,62507=>507,62508=>507,62509=>507,62510=>507,62511=>507,62512=>499,62513=>499,62514=>499,62515=>499,62516=>516,62517=>516,62518=>516,62519=>742,62520=>742,62521=>742,62522=>742,62523=>742,62524=>549,62525=>549,62526=>549,62527=>549,62528=>549,62529=>549,62917=>618,64256=>749,64257=>708,64258=>708,64259=>1024,64260=>1024,64261=>727,64262=>917,64275=>1249,64276=>1245,64277=>1240,64278=>1245,64279=>1542,64285=>265,64286=>0,64287=>597,64288=>598,64289=>845,64290=>709,64291=>828,64292=>707,64293=>771,64294=>782,64295=>739,64296=>801,64297=>754,64298=>673,64299=>673,64300=>673,64301=>673,64302=>655,64303=>655,64304=>655,64305=>549,64306=>402,64307=>529,64308=>618,64309=>309,64310=>360,64311=>900,64312=>611,64313=>392,64314=>520,64315=>510,64316=>544,64317=>900,64318=>651,64319=>900,64320=>408,64321=>611,64322=>900,64323=>607,64324=>592,64325=>900,64326=>587,64327=>663,64328=>542,64329=>673,64330=>615,64331=>309,64332=>549,64333=>510,64334=>592,64335=>639,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusanscondensedbi.z b/tcpdf/fonts/dejavusanscondensedbi.z new file mode 100644 index 0000000..37da24a Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensedbi.z differ diff --git a/tcpdf/fonts/dejavusanscondensedi.ctg.z b/tcpdf/fonts/dejavusanscondensedi.ctg.z new file mode 100644 index 0000000..1b98d13 Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensedi.ctg.z differ diff --git a/tcpdf/fonts/dejavusanscondensedi.php b/tcpdf/fonts/dejavusanscondensedi.php new file mode 100644 index 0000000..44b9730 --- /dev/null +++ b/tcpdf/fonts/dejavusanscondensedi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansCondensed-Oblique'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=596596; +$enc=''; +$file='dejavusanscondensedi.z'; +$ctg='dejavusanscondensedi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-914 -350 1493 1068]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>456,'MaxWidth'=>1521,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(71,0,288,729),34=>array(86,458,328,729),35=>array(63,0,696,718),36=>array(30,-147,513,760),37=>array(82,-14,773,742),38=>array(42,-14,663,742),39=>array(86,458,162,729),40=>array(69,-132,384,759),41=>array(-56,-132,259,759),42=>array(26,286,423,742),43=>array(95,0,659,627),44=>array(2,-116,174,124),45=>array(40,234,292,314),46=>array(52,0,167,124),47=>array(-66,-93,384,729),48=>array(44,-14,527,742),49=>array(44,0,437,729),50=>array(3,0,517,742),51=>array(1,-14,515,742),52=>array(16,0,509,729),53=>array(18,-14,523,729),54=>array(57,-14,533,742),55=>array(83,0,564,729),56=>array(30,-14,534,742),57=>array(40,-14,517,742),58=>array(46,0,230,517),59=>array(0,-116,241,517),60=>array(95,46,659,581),61=>array(95,172,659,454),62=>array(95,46,659,581),63=>array(110,0,460,742),64=>array(52,-173,855,703),65=>array(-48,0,554,729),66=>array(24,0,563,729),67=>array(38,-14,625,742),68=>array(24,0,650,729),69=>array(24,0,567,729),70=>array(24,0,528,729),71=>array(40,-14,653,742),72=>array(24,0,653,729),73=>array(24,0,242,729),74=>array(-148,-200,240,729),75=>array(24,0,650,729),76=>array(24,0,448,729),77=>array(24,0,752,729),78=>array(24,0,649,729),79=>array(36,-14,672,742),80=>array(24,0,541,729),81=>array(37,-129,672,742),82=>array(24,0,541,729),83=>array(5,-14,543,742),84=>array(39,0,608,729),85=>array(52,-14,642,729),86=>array(70,0,668,729),87=>array(86,0,918,729),88=>array(-39,0,633,729),89=>array(57,0,608,729),90=>array(-20,0,633,729),91=>array(36,-132,378,760),92=>array(76,-93,236,729),93=>array(-35,-132,308,760),94=>array(95,457,659,729),95=>array(-9,-236,459,-166),96=>array(171,617,350,800),97=>array(37,-14,492,560),98=>array(32,-14,528,760),99=>array(41,-14,483,560),100=>array(41,-14,576,760),101=>array(41,-14,514,560),102=>array(61,0,431,760),103=>array(29,-208,537,560),104=>array(31,0,510,760),105=>array(31,0,246,760),106=>array(-102,-208,250,760),107=>array(31,0,551,760),108=>array(31,0,246,760),109=>array(31,0,815,560),110=>array(31,0,510,560),111=>array(41,-14,510,560),112=>array(-3,-208,530,560),113=>array(41,-206,538,560),114=>array(31,0,417,560),115=>array(10,-14,450,560),116=>array(57,0,381,702),117=>array(51,-14,530,547),118=>array(64,0,544,547),119=>array(76,0,737,547),120=>array(-23,0,541,547),121=>array(-22,-208,543,547),122=>array(-3,0,489,547),123=>array(109,-163,545,760),124=>array(114,-236,189,764),125=>array(6,-163,442,760),126=>array(95,228,659,399),161=>array(76,0,294,729),162=>array(66,-153,507,698),163=>array(21,0,574,742),164=>array(41,40,533,587),165=>array(40,0,606,729),166=>array(114,-171,189,699),167=>array(11,-95,437,742),168=>array(166,659,444,758),169=>array(124,0,776,725),170=>array(36,229,401,742),171=>array(56,69,500,517),172=>array(95,140,659,421),173=>array(40,234,292,314),174=>array(124,0,776,725),175=>array(167,673,443,745),176=>array(85,432,365,742),177=>array(95,0,659,627),178=>array(32,326,347,742),179=>array(14,319,332,742),180=>array(227,616,470,800),181=>array(-12,-208,533,547),182=>array(70,-96,516,729),183=>array(102,285,217,409),184=>array(44,-193,241,0),185=>array(59,326,313,734),186=>array(36,229,416,742),187=>array(56,69,499,517),188=>array(59,-14,862,742),189=>array(59,-14,857,742),190=>array(14,-14,862,742),191=>array(33,-13,382,729),192=>array(-48,0,554,927),193=>array(-48,0,554,927),194=>array(-48,0,554,928),195=>array(-48,0,556,921),196=>array(-48,0,554,913),197=>array(-48,0,554,928),198=>array(-41,0,895,729),199=>array(38,-193,625,742),200=>array(24,0,567,927),201=>array(24,0,567,927),202=>array(24,0,567,928),203=>array(24,0,567,913),204=>array(24,0,263,927),205=>array(24,0,345,927),206=>array(24,0,341,928),207=>array(24,0,353,913),208=>array(0,0,655,729),209=>array(24,0,649,921),210=>array(36,-14,672,927),211=>array(36,-14,672,927),212=>array(36,-14,672,928),213=>array(36,-14,672,921),214=>array(36,-14,672,913),215=>array(123,31,631,596),216=>array(-31,-32,729,761),217=>array(52,-14,642,927),218=>array(52,-14,642,927),219=>array(52,-14,642,928),220=>array(52,-14,642,913),221=>array(57,0,608,927),222=>array(24,0,520,729),223=>array(42,-14,531,760),224=>array(37,-14,492,800),225=>array(37,-14,514,800),226=>array(37,-14,492,800),227=>array(37,-14,506,777),228=>array(37,-14,492,758),229=>array(37,-14,492,878),230=>array(37,-14,856,560),231=>array(41,-193,483,560),232=>array(41,-14,514,800),233=>array(41,-14,519,800),234=>array(41,-14,514,800),235=>array(41,-14,514,758),236=>array(31,0,236,800),237=>array(31,0,356,800),238=>array(31,0,316,800),239=>array(31,0,331,758),240=>array(40,-14,528,760),241=>array(31,0,522,777),242=>array(41,-14,510,800),243=>array(41,-14,521,800),244=>array(41,-14,510,800),245=>array(41,-14,513,777),246=>array(41,-14,510,758),247=>array(95,73,659,554),248=>array(-13,-46,560,590),249=>array(51,-14,530,800),250=>array(51,-14,530,800),251=>array(51,-14,530,800),252=>array(51,-14,530,758),253=>array(-22,-208,543,800),254=>array(-3,-208,530,760),255=>array(-22,-208,543,758),256=>array(-48,0,554,899),257=>array(37,-14,492,745),258=>array(-48,0,562,926),259=>array(37,-14,506,761),260=>array(-48,-194,557,729),261=>array(37,-194,492,560),262=>array(38,-14,625,927),263=>array(41,-14,522,800),264=>array(38,-14,625,928),265=>array(41,-14,497,800),266=>array(38,-14,625,914),267=>array(41,-14,483,760),268=>array(38,-14,625,928),269=>array(41,-14,514,800),270=>array(24,0,650,928),271=>array(41,-14,738,760),272=>array(0,0,655,729),273=>array(41,-14,631,760),274=>array(24,0,567,900),275=>array(41,-14,514,745),276=>array(24,0,567,928),277=>array(41,-14,514,785),278=>array(24,0,567,914),279=>array(41,-14,514,760),280=>array(24,-194,567,729),281=>array(41,-194,514,560),282=>array(24,0,567,928),283=>array(41,-14,514,800),284=>array(40,-14,653,928),285=>array(29,-208,537,800),286=>array(40,-14,653,928),287=>array(29,-208,537,785),288=>array(40,-14,653,914),289=>array(29,-208,537,760),290=>array(40,-250,653,742),291=>array(29,-208,537,775),292=>array(24,0,653,928),293=>array(31,0,510,928),294=>array(98,0,781,729),295=>array(41,0,519,760),296=>array(24,0,374,921),297=>array(31,0,349,777),298=>array(24,0,351,899),299=>array(31,0,343,745),300=>array(24,0,360,928),301=>array(31,0,343,785),302=>array(-6,-194,242,729),303=>array(-7,-194,246,760),304=>array(24,0,274,914),305=>array(31,0,209,547),306=>array(24,-200,505,729),307=>array(31,-208,499,760),308=>array(-148,-200,347,928),309=>array(-102,-208,325,800),310=>array(24,-235,650,729),311=>array(31,-235,551,760),312=>array(34,0,556,547),313=>array(24,0,448,928),314=>array(31,0,380,928),315=>array(24,-235,448,729),316=>array(18,-235,246,760),317=>array(24,0,448,729),318=>array(31,0,426,760),319=>array(24,0,448,729),320=>array(31,0,399,760),321=>array(-18,0,452,729),322=>array(15,0,286,760),323=>array(24,0,649,928),324=>array(31,0,510,803),325=>array(24,-235,649,729),326=>array(31,-235,510,560),327=>array(24,0,649,928),328=>array(31,0,514,800),329=>array(67,0,659,729),330=>array(42,-208,614,742),331=>array(31,-208,510,560),332=>array(36,-14,672,899),333=>array(41,-14,510,745),334=>array(36,-14,672,928),335=>array(41,-14,510,785),336=>array(36,-14,696,927),337=>array(41,-14,561,800),338=>array(41,0,960,729),339=>array(41,-14,886,560),340=>array(24,0,541,928),341=>array(31,0,494,803),342=>array(24,-235,541,729),343=>array(18,-235,417,560),344=>array(24,0,541,925),345=>array(31,0,443,800),346=>array(5,-14,543,928),347=>array(10,-14,494,803),348=>array(5,-14,543,928),349=>array(10,-14,450,800),350=>array(5,-193,543,742),351=>array(10,-193,450,560),352=>array(5,-14,543,928),353=>array(10,-14,471,800),354=>array(39,-193,608,729),355=>array(56,-193,381,702),356=>array(39,0,608,928),357=>array(57,0,430,803),358=>array(46,0,616,729),359=>array(14,0,366,702),360=>array(52,-14,642,921),361=>array(51,-14,530,777),362=>array(52,-14,642,899),363=>array(51,-14,530,745),364=>array(52,-14,642,928),365=>array(51,-14,530,785),366=>array(52,-14,642,929),367=>array(51,-14,530,861),368=>array(52,-14,657,927),369=>array(51,-14,557,800),370=>array(52,-194,642,729),371=>array(51,-194,530,547),372=>array(86,0,918,932),373=>array(76,0,737,800),374=>array(57,0,608,932),375=>array(-22,-208,543,800),376=>array(57,0,608,913),377=>array(-20,0,633,928),378=>array(-3,0,494,803),379=>array(-20,0,633,912),380=>array(-3,0,489,760),381=>array(-20,0,633,928),382=>array(-3,0,489,800),383=>array(61,0,431,760),384=>array(17,-14,505,760),385=>array(46,0,667,729),386=>array(24,0,571,729),387=>array(17,-14,521,760),388=>array(38,0,541,729),389=>array(31,-14,520,760),390=>array(56,-14,644,742),391=>array(35,-14,797,924),392=>array(35,-14,605,724),393=>array(0,0,655,729),394=>array(46,0,748,729),395=>array(62,0,618,729),396=>array(32,-14,558,760),397=>array(49,-208,518,548),398=>array(57,0,608,729),399=>array(46,-14,675,742),400=>array(109,-14,609,742),401=>array(-128,-200,547,729),402=>array(-142,-208,419,760),403=>array(35,-14,824,924),404=>array(85,-210,697,729),405=>array(15,0,807,760),406=>array(68,0,263,729),407=>array(0,0,270,729),408=>array(23,0,713,742),409=>array(15,0,537,760),410=>array(-2,0,250,760),411=>array(-40,0,481,760),412=>array(53,-14,870,729),413=>array(-128,-200,667,729),414=>array(51,-208,521,560),415=>array(36,-14,672,742),416=>array(31,-14,741,761),417=>array(43,-14,591,609),418=>array(50,-14,786,742),419=>array(66,-208,632,560),420=>array(46,0,646,729),421=>array(-3,-208,522,760),422=>array(36,-129,533,729),423=>array(1,-14,522,742),424=>array(9,-14,426,560),425=>array(24,0,567,729),426=>array(-53,-208,307,760),427=>array(64,-208,384,702),428=>array(39,0,616,729),429=>array(41,0,386,760),430=>array(64,-200,634,729),431=>array(50,-4,769,761),432=>array(52,-14,648,615),433=>array(38,-14,718,724),434=>array(68,-1,611,729),435=>array(61,0,710,742),436=>array(4,-208,700,560),437=>array(-23,0,630,729),438=>array(-9,0,482,547),439=>array(21,-31,587,729),440=>array(13,-31,596,729),441=>array(19,-213,535,547),442=>array(-8,-208,479,547),443=>array(0,0,508,742),444=>array(14,-31,563,729),445=>array(-15,-213,496,547),446=>array(-18,-14,387,702),447=>array(-5,-208,542,560),448=>array(6,-208,259,729),449=>array(6,-208,437,729),450=>array(-12,-208,436,729),451=>array(23,0,241,729),452=>array(24,0,1326,928),453=>array(24,0,1182,800),454=>array(41,-14,1060,800),455=>array(24,-200,741,729),456=>array(24,-208,751,760),457=>array(31,-208,500,760),458=>array(24,-200,913,729),459=>array(24,-208,923,760),460=>array(31,-208,820,760),461=>array(-48,0,554,928),462=>array(37,-14,501,800),463=>array(24,0,373,928),464=>array(31,0,360,800),465=>array(36,-14,672,928),466=>array(41,-14,538,800),467=>array(52,-14,642,928),468=>array(51,-14,530,800),469=>array(52,-14,642,1025),470=>array(51,-14,530,899),471=>array(52,-14,642,1047),472=>array(51,-14,530,903),473=>array(52,-14,642,1044),474=>array(51,-14,530,906),475=>array(52,-14,642,1044),476=>array(51,-14,530,903),477=>array(45,-14,507,560),478=>array(-48,0,564,1025),479=>array(37,-14,494,899),480=>array(-48,0,565,1025),481=>array(37,-14,516,868),482=>array(-41,0,895,900),483=>array(37,-14,856,743),484=>array(40,-14,669,742),485=>array(29,-208,537,560),486=>array(40,-14,653,928),487=>array(29,-208,537,800),488=>array(24,0,650,928),489=>array(31,0,551,928),490=>array(36,-194,672,742),491=>array(41,-194,510,560),492=>array(36,-194,672,899),493=>array(41,-194,510,745),494=>array(21,-31,587,928),495=>array(-43,-213,478,793),496=>array(-102,-208,353,793),497=>array(24,0,1326,729),498=>array(24,0,1182,729),499=>array(41,-14,1060,760),500=>array(40,-14,653,928),501=>array(29,-208,537,800),502=>array(26,-14,953,729),503=>array(-13,-208,599,742),504=>array(24,0,649,927),505=>array(31,0,510,800),506=>array(-48,0,708,928),507=>array(37,-14,695,928),508=>array(-41,0,895,928),509=>array(37,-14,856,800),510=>array(-31,-32,729,928),511=>array(-13,-46,560,800),512=>array(-48,0,554,930),513=>array(37,-14,492,800),514=>array(-48,0,554,917),515=>array(37,-14,495,785),516=>array(24,0,567,930),517=>array(41,-14,514,800),518=>array(24,0,567,917),519=>array(41,-14,514,785),520=>array(24,0,327,930),521=>array(20,0,329,800),522=>array(24,0,354,917),523=>array(31,0,333,785),524=>array(36,-14,672,930),525=>array(41,-14,510,800),526=>array(36,-14,672,917),527=>array(41,-14,510,785),528=>array(24,0,541,930),529=>array(31,0,417,800),530=>array(24,0,541,917),531=>array(31,0,438,785),532=>array(52,-14,642,930),533=>array(51,-14,530,800),534=>array(52,-14,642,917),535=>array(51,-14,530,785),536=>array(5,-240,543,742),537=>array(10,-240,450,560),538=>array(39,-240,608,729),539=>array(57,-240,381,702),540=>array(-33,-210,534,742),541=>array(-56,-211,440,560),542=>array(24,0,653,928),543=>array(31,0,510,928),544=>array(24,-208,597,742),545=>array(37,-70,670,760),546=>array(17,-14,597,742),547=>array(30,-14,526,648),548=>array(-5,-208,648,729),549=>array(9,-208,500,547),550=>array(-48,0,554,914),551=>array(37,-14,492,760),552=>array(24,-189,567,729),553=>array(41,-193,514,560),554=>array(36,-14,672,1025),555=>array(41,-14,524,899),556=>array(36,-14,672,1025),557=>array(41,-14,521,861),558=>array(36,-14,672,914),559=>array(41,-14,510,760),560=>array(36,-14,672,1029),561=>array(41,-14,510,899),562=>array(57,0,608,899),563=>array(-22,-208,543,745),564=>array(-12,-70,343,757),565=>array(39,-70,691,560),566=>array(-5,-70,372,702),567=>array(-102,-208,211,547),568=>array(32,-14,832,760),569=>array(66,-208,866,560),570=>array(-63,-34,679,761),571=>array(-57,-34,686,761),572=>array(-45,-46,541,592),573=>array(0,0,448,729),574=>array(-97,-34,646,761),575=>array(24,-242,464,560),576=>array(12,-242,503,547),577=>array(141,0,602,729),578=>array(62,0,412,560),579=>array(-28,0,559,729),580=>array(3,-14,666,729),581=>array(-57,0,545,729),582=>array(24,-93,573,822),583=>array(32,-93,516,640),584=>array(-147,-200,264,729),585=>array(-103,-208,249,760),586=>array(66,-200,695,743),587=>array(66,-208,555,560),588=>array(-6,0,541,729),589=>array(-4,0,418,560),590=>array(26,0,615,729),591=>array(5,-208,572,547),592=>array(62,-14,518,560),593=>array(49,-14,538,560),594=>array(1,-14,490,560),595=>array(17,-14,505,760),596=>array(2,-14,444,560),597=>array(54,-70,488,560),598=>array(49,-208,575,760),599=>array(32,-14,739,760),600=>array(25,-14,505,560),601=>array(45,-14,507,560),602=>array(36,-14,737,560),603=>array(35,-14,455,561),604=>array(4,-11,454,560),605=>array(13,-14,700,561),606=>array(49,-14,548,561),607=>array(-83,-208,260,547),608=>array(29,-208,729,760),609=>array(48,-208,556,547),610=>array(49,0,513,574),611=>array(92,-210,561,547),612=>array(91,-14,543,547),613=>array(84,-208,555,547),614=>array(15,0,485,760),615=>array(33,-208,504,760),616=>array(23,0,278,760),617=>array(71,0,232,547),618=>array(3,0,331,547),619=>array(20,0,334,760),620=>array(37,0,375,760),621=>array(35,-208,250,760),622=>array(37,-213,596,760),623=>array(73,-13,850,548),624=>array(90,-208,866,547),625=>array(51,-208,827,560),626=>array(-83,-208,524,560),627=>array(51,-208,541,560),628=>array(31,0,542,547),629=>array(49,-14,501,560),630=>array(49,0,733,547),631=>array(60,-15,592,560),632=>array(48,-208,542,760),633=>array(1,-13,387,547),634=>array(-17,-13,405,755),635=>array(19,-208,404,547),636=>array(-18,-208,404,560),637=>array(17,-208,404,560),638=>array(2,0,442,560),639=>array(86,0,358,560),640=>array(-26,0,409,547),641=>array(-26,0,505,547),642=>array(16,-208,461,560),643=>array(-101,-208,404,760),644=>array(-102,-208,404,760),645=>array(77,-208,308,549),646=>array(-185,-208,404,760),647=>array(-10,-155,310,547),648=>array(35,-208,384,702),649=>array(-8,-14,577,547),650=>array(50,-15,558,547),651=>array(71,0,497,548),652=>array(-21,0,458,547),653=>array(-10,0,650,547),654=>array(-40,0,527,755),655=>array(92,0,545,547),656=>array(9,-208,500,547),657=>array(-4,-54,487,547),658=>array(-22,-213,499,547),659=>array(18,-213,499,547),660=>array(83,0,437,759),661=>array(65,0,470,759),662=>array(-22,0,384,759),663=>array(-7,-213,489,760),664=>array(50,-14,658,742),665=>array(34,0,481,547),666=>array(30,-14,537,561),667=>array(33,0,721,759),668=>array(34,0,555,547),669=>array(-185,-208,250,760),670=>array(63,-213,585,547),671=>array(34,0,408,547),672=>array(49,-208,756,759),673=>array(6,0,437,759),674=>array(65,0,470,759),675=>array(32,-14,904,760),676=>array(49,-213,922,760),677=>array(35,-54,907,760),678=>array(46,0,708,702),679=>array(59,-208,651,760),680=>array(52,-70,688,702),681=>array(49,-208,734,760),682=>array(18,0,591,760),683=>array(18,0,579,760),684=>array(20,-15,497,640),685=>array(-25,84,489,640),686=>array(71,-214,562,760),687=>array(71,-208,561,760),688=>array(14,326,307,751),689=>array(14,326,307,751),690=>array(-58,209,152,751),691=>array(24,326,260,640),692=>array(4,319,241,632),693=>array(14,209,250,632),694=>array(-13,326,315,632),695=>array(50,326,467,632),696=>array(8,209,356,632),697=>array(147,557,303,800),698=>array(147,557,466,800),699=>array(118,489,289,729),700=>array(55,489,227,729),701=>array(161,616,268,856),702=>array(123,492,267,760),703=>array(124,492,268,760),704=>array(77,326,300,751),705=>array(66,326,319,751),706=>array(229,524,479,836),707=>array(209,524,458,836),708=>array(183,561,463,800),709=>array(224,561,505,800),710=>array(148,616,430,800),711=>array(180,616,461,800),712=>array(94,488,154,759),713=>array(167,673,443,745),714=>array(227,616,470,800),715=>array(171,617,350,800),716=>array(94,-148,154,123),717=>array(22,-156,298,-84),718=>array(171,-236,350,-54),719=>array(227,-237,470,-54),720=>array(3,0,251,517),721=>array(63,356,220,517),722=>array(80,249,224,517),723=>array(81,249,225,517),724=>array(106,229,317,448),725=>array(132,229,343,448),726=>array(42,125,318,417),727=>array(42,234,253,307),728=>array(180,645,457,785),729=>array(250,658,358,758),730=>array(188,610,430,878),731=>array(88,-194,251,0),732=>array(147,639,462,777),733=>array(169,616,510,800),734=>array(-4,233,291,504),735=>array(94,616,366,800),736=>array(56,208,374,632),737=>array(14,326,140,751),738=>array(26,326,297,648),739=>array(24,326,374,632),740=>array(66,326,319,751),741=>array(141,0,409,668),742=>array(114,0,409,668),743=>array(88,0,409,668),744=>array(62,0,409,668),745=>array(35,0,409,668),748=>array(86,-260,367,-21),749=>array(156,610,454,808),750=>array(121,489,473,729),755=>array(85,-240,327,28),759=>array(74,-193,389,-83),768=>array(-233,617,-55,800),769=>array(-183,616,61,800),770=>array(-256,616,25,800),771=>array(-259,639,55,777),772=>array(-240,673,36,745),773=>array(-459,686,9,755),774=>array(-224,645,52,785),775=>array(-153,646,-52,760),776=>array(-239,659,40,758),777=>array(-184,618,13,810),778=>array(-216,610,25,878),779=>array(-238,616,104,800),780=>array(-229,616,52,800),781=>array(-274,615,-176,832),782=>array(-364,615,-86,832),783=>array(-298,616,11,800),784=>array(-273,645,3,854),785=>array(-223,645,54,785),786=>array(-170,489,-14,645),787=>array(-296,595,-146,844),788=>array(-274,595,-146,844),789=>array(-72,616,72,800),790=>array(-280,-266,-101,-83),791=>array(-224,-267,19,-83),792=>array(-327,-240,-180,-24),793=>array(-271,-240,-123,-24),794=>array(-179,690,49,930),795=>array(-126,427,62,609),796=>array(-283,-241,-168,-32),797=>array(-346,-240,-119,-87),798=>array(-331,-240,-104,-87),799=>array(-327,-240,-123,-24),800=>array(-238,-184,-11,-117),801=>array(-305,-208,5,63),802=>array(-305,-208,-63,63),803=>array(-299,-184,-198,-70),804=>array(-392,-183,-113,-84),805=>array(-320,-241,-132,-32),806=>array(-305,-240,-148,-84),807=>array(-406,-193,-209,0),808=>array(-362,-194,-199,0),809=>array(-272,-240,-178,-47),810=>array(-359,-211,-88,-50),811=>array(-421,-222,-60,-82),812=>array(-347,-240,-66,-57),813=>array(-386,-240,-105,-57),814=>array(-390,-222,-113,-82),815=>array(-414,-224,-137,-83),816=>array(-419,-222,-105,-84),817=>array(-397,-156,-121,-84),818=>array(-510,-236,-30,-166),819=>array(-500,-236,7,-9),820=>array(-514,240,-24,381),821=>array(-292,221,-46,301),822=>array(-578,221,7,301),823=>array(-566,-46,20,592),824=>array(-729,-34,14,761),825=>array(-280,-241,-166,-32),826=>array(-358,-206,-88,-44),827=>array(-343,-240,-105,-21),828=>array(-446,-222,-84,-82),829=>array(-333,608,-117,825),830=>array(-245,595,-76,853),831=>array(-459,528,9,755),832=>array(-233,617,-55,800),833=>array(-183,616,61,800),834=>array(-259,639,55,777),835=>array(-296,595,-146,844),836=>array(-277,659,55,978),837=>array(-320,-208,-227,-45),838=>array(-370,639,-81,786),839=>array(-341,-226,-109,-35),840=>array(-345,-240,-105,-47),841=>array(-318,-240,-106,-21),842=>array(-382,616,-68,800),843=>array(-382,567,-68,850),844=>array(-382,596,-67,820),845=>array(-407,-230,-43,-30),846=>array(-324,-240,-132,-45),849=>array(-285,610,-142,878),850=>array(-374,633,-97,855),851=>array(-333,-241,-117,-24),855=>array(-309,610,-165,878),856=>array(21,658,128,758),858=>array(-387,-241,-63,-32),860=>array(-435,-237,367,-60),861=>array(-261,802,541,979),862=>array(-268,855,541,927),863=>array(-442,-156,374,-84),864=>array(-187,756,476,894),865=>array(-261,752,541,929),866=>array(-475,-230,330,-30),880=>array(24,0,511,729),881=>array(37,0,438,547),882=>array(85,0,751,729),883=>array(85,0,558,729),884=>array(147,557,303,800),885=>array(24,-208,179,35),886=>array(24,0,649,729),887=>array(34,0,551,547),890=>array(123,-208,216,-45),891=>array(2,-14,444,560),892=>array(41,-14,483,560),893=>array(2,-14,444,560),894=>array(0,-116,241,517),900=>array(227,616,470,800),901=>array(166,659,498,978),902=>array(-48,0,554,800),903=>array(102,285,217,409),904=>array(53,0,688,800),905=>array(58,0,782,800),906=>array(55,0,368,800),908=>array(57,-14,714,800),910=>array(50,0,827,800),911=>array(47,0,746,800),912=>array(66,0,405,978),913=>array(-48,0,554,729),914=>array(24,0,563,729),915=>array(24,0,561,729),916=>array(-57,0,545,729),917=>array(24,0,567,729),918=>array(-20,0,633,729),919=>array(24,0,653,729),920=>array(50,-14,658,742),921=>array(24,0,242,729),922=>array(24,0,650,729),923=>array(-57,0,545,729),924=>array(24,0,752,729),925=>array(24,0,649,729),926=>array(24,0,557,729),927=>array(36,-14,672,742),928=>array(24,0,652,729),929=>array(24,0,541,729),931=>array(24,0,567,729),932=>array(39,0,608,729),933=>array(57,0,608,729),934=>array(44,0,664,729),935=>array(-39,0,633,729),936=>array(79,0,723,729),937=>array(-31,0,650,738),938=>array(24,0,360,913),939=>array(57,0,608,913),940=>array(49,-12,581,800),941=>array(35,-14,505,800),942=>array(51,-208,557,800),943=>array(60,0,388,800),944=>array(53,0,510,978),945=>array(49,-12,581,559),946=>array(-1,-208,515,766),947=>array(66,-208,572,547),948=>array(34,-14,501,742),949=>array(35,-14,455,561),950=>array(44,-210,532,760),951=>array(51,-208,521,560),952=>array(49,-11,501,768),953=>array(60,0,239,547),954=>array(36,0,526,547),955=>array(-40,0,439,760),956=>array(-12,-208,533,547),957=>array(80,0,474,547),958=>array(34,-210,507,760),959=>array(41,-14,510,560),960=>array(49,-19,554,547),961=>array(14,-208,540,560),962=>array(66,-210,501,560),963=>array(51,-14,593,547),964=>array(76,0,546,547),965=>array(53,0,479,547),966=>array(66,-208,560,551),967=>array(-40,-208,560,547),968=>array(60,-208,608,547),969=>array(61,-14,694,547),970=>array(66,0,352,758),971=>array(53,0,479,758),972=>array(41,-14,525,800),973=>array(53,0,485,800),974=>array(61,-14,694,800),975=>array(42,-208,668,729),976=>array(72,-11,481,768),977=>array(59,-11,501,768),978=>array(87,0,631,729),979=>array(50,0,779,800),980=>array(87,0,631,913),981=>array(48,-208,542,760),982=>array(61,-14,772,547),983=>array(25,-188,599,547),984=>array(67,-207,675,742),985=>array(66,-208,519,560),986=>array(79,-210,607,729),987=>array(68,-210,552,547),988=>array(24,0,528,729),989=>array(-166,-208,450,760),990=>array(58,-2,576,729),991=>array(78,0,519,759),992=>array(98,-208,702,742),993=>array(19,-180,457,559),994=>array(32,-213,796,729),995=>array(78,-208,711,547),996=>array(39,-208,658,742),997=>array(40,-208,558,560),998=>array(24,-213,647,729),999=>array(-19,-14,558,575),1000=>array(-31,-208,594,745),1001=>array(-10,-208,513,560),1002=>array(-14,0,707,742),1003=>array(-26,0,584,560),1004=>array(29,-14,644,758),1005=>array(41,-14,526,758),1006=>array(27,-208,563,729),1007=>array(48,-208,505,726),1008=>array(8,-3,581,547),1009=>array(76,-208,540,560),1010=>array(41,-14,483,560),1011=>array(-102,-208,250,760),1012=>array(36,-14,672,742),1013=>array(49,-14,479,560),1014=>array(39,-14,469,560),1015=>array(24,0,520,729),1016=>array(-3,-208,530,760),1017=>array(38,-14,625,742),1018=>array(24,0,752,729),1019=>array(-10,-208,595,547),1020=>array(-21,-208,540,560),1021=>array(56,-14,644,742),1022=>array(38,-14,625,742),1023=>array(56,-14,644,742),1024=>array(24,0,567,927),1025=>array(24,0,567,913),1026=>array(64,-200,634,729),1027=>array(24,0,561,927),1028=>array(41,-14,634,742),1029=>array(5,-14,543,742),1030=>array(24,0,242,729),1031=>array(24,0,347,913),1032=>array(-148,-200,240,729),1033=>array(-27,0,900,729),1034=>array(24,0,856,729),1035=>array(46,0,617,729),1036=>array(24,0,672,927),1037=>array(24,0,649,927),1038=>array(22,0,597,928),1039=>array(38,-157,666,729),1040=>array(-48,0,554,729),1041=>array(24,0,571,729),1042=>array(24,0,563,729),1043=>array(24,0,561,729),1044=>array(-33,-157,662,729),1045=>array(24,0,567,729),1046=>array(-46,0,1000,729),1047=>array(1,-14,536,742),1048=>array(24,0,649,729),1049=>array(24,0,649,928),1050=>array(24,0,672,729),1051=>array(-27,0,652,729),1052=>array(24,0,752,729),1053=>array(24,0,653,729),1054=>array(36,-14,672,742),1055=>array(24,0,652,729),1056=>array(24,0,541,729),1057=>array(38,-14,625,742),1058=>array(39,0,608,729),1059=>array(22,0,597,729),1060=>array(48,0,729,729),1061=>array(-39,0,633,729),1062=>array(38,-157,666,729),1063=>array(98,0,593,729),1064=>array(24,0,938,729),1065=>array(38,-157,952,729),1066=>array(75,0,665,729),1067=>array(24,0,770,729),1068=>array(24,0,533,729),1069=>array(-5,-14,578,742),1070=>array(29,-14,931,742),1071=>array(-4,0,601,729),1072=>array(37,-14,492,560),1073=>array(28,-14,526,777),1074=>array(34,0,481,547),1075=>array(34,0,477,547),1076=>array(-13,-138,571,547),1077=>array(41,-14,514,560),1078=>array(-18,0,803,547),1079=>array(13,-14,439,561),1080=>array(34,0,551,547),1081=>array(34,0,551,760),1082=>array(34,0,538,547),1083=>array(-15,0,549,547),1084=>array(34,0,646,547),1085=>array(34,0,555,547),1086=>array(41,-14,510,560),1087=>array(34,0,555,547),1088=>array(-3,-208,530,560),1089=>array(41,-14,483,560),1090=>array(62,0,546,547),1091=>array(-22,-208,543,547),1092=>array(42,-208,731,729),1093=>array(-23,0,541,547),1094=>array(46,-138,567,547),1095=>array(84,0,498,547),1096=>array(34,0,790,547),1097=>array(46,-138,802,547),1098=>array(62,0,567,547),1099=>array(34,0,674,547),1100=>array(34,0,461,547),1101=>array(5,-14,446,560),1102=>array(37,-14,716,560),1103=>array(3,0,513,547),1104=>array(41,-14,514,802),1105=>array(41,-14,514,758),1106=>array(49,-208,497,760),1107=>array(34,0,529,803),1108=>array(42,-14,483,560),1109=>array(10,-14,450,560),1110=>array(31,0,246,760),1111=>array(31,0,344,758),1112=>array(-102,-208,250,760),1113=>array(-15,0,743,547),1114=>array(34,0,739,547),1115=>array(31,0,478,760),1116=>array(34,0,538,803),1117=>array(34,0,551,802),1118=>array(-22,-208,543,760),1119=>array(46,-138,567,547),1120=>array(32,-14,795,729),1121=>array(61,-14,694,547),1122=>array(44,0,619,729),1123=>array(32,0,520,729),1124=>array(29,-14,854,742),1125=>array(37,-14,664,560),1126=>array(-57,0,721,729),1127=>array(-26,0,635,547),1128=>array(24,0,958,729),1129=>array(37,0,831,547),1130=>array(-14,0,706,729),1131=>array(-0,0,550,547),1132=>array(24,0,921,729),1133=>array(35,0,741,547),1134=>array(-26,-208,523,935),1135=>array(-21,-193,466,753),1136=>array(65,0,819,729),1137=>array(69,-208,814,765),1138=>array(36,-14,672,742),1139=>array(49,-14,501,560),1140=>array(70,0,756,742),1141=>array(67,0,623,560),1142=>array(70,0,756,930),1143=>array(67,0,623,800),1144=>array(55,-208,915,742),1145=>array(60,-208,852,560),1146=>array(42,-14,815,742),1147=>array(41,-14,637,560),1148=>array(32,-14,1009,932),1149=>array(55,-14,862,758),1150=>array(32,-14,795,900),1151=>array(61,-14,694,734),1152=>array(41,-208,633,742),1153=>array(41,-208,481,560),1154=>array(20,-44,436,457),1155=>array(-473,608,-77,810),1156=>array(-347,645,-7,788),1157=>array(-284,595,-161,797),1158=>array(-295,595,-153,797),1159=>array(-711,606,0,788),1160=>array(-914,-180,374,922),1161=>array(-843,-280,319,1022),1162=>array(24,-208,649,928),1163=>array(35,-208,552,760),1164=>array(24,0,533,729),1165=>array(35,0,462,702),1166=>array(24,0,543,729),1167=>array(-3,-208,522,560),1168=>array(11,0,574,878),1169=>array(21,0,490,700),1170=>array(23,0,620,729),1171=>array(19,0,536,547),1172=>array(24,-200,561,729),1173=>array(31,-208,475,547),1174=>array(-33,-157,1014,729),1175=>array(-5,-138,814,547),1176=>array(1,-193,536,742),1177=>array(13,-193,439,561),1178=>array(38,-157,686,729),1179=>array(46,-138,549,547),1180=>array(24,0,672,729),1181=>array(34,0,538,547),1182=>array(24,0,672,729),1183=>array(15,0,519,760),1184=>array(71,0,804,729),1185=>array(53,0,644,547),1186=>array(38,-157,666,729),1187=>array(49,-138,570,547),1188=>array(24,0,972,729),1189=>array(35,0,822,547),1190=>array(24,-200,928,729),1191=>array(35,-208,774,547),1192=>array(40,-14,734,743),1193=>array(40,-14,580,560),1194=>array(38,-193,625,742),1195=>array(41,-193,483,560),1196=>array(60,-157,630,729),1197=>array(47,-138,534,547),1198=>array(57,0,608,729),1199=>array(64,-208,543,547),1200=>array(62,0,615,729),1201=>array(56,-208,572,547),1202=>array(-23,-157,652,729),1203=>array(-10,-138,554,547),1204=>array(60,-157,808,729),1205=>array(47,-138,683,547),1206=>array(127,-157,606,729),1207=>array(105,-138,510,547),1208=>array(114,0,593,729),1209=>array(92,0,496,547),1210=>array(107,0,601,729),1211=>array(31,0,510,760),1212=>array(37,-14,804,742),1213=>array(27,-14,619,560),1214=>array(37,-184,804,742),1215=>array(27,-161,619,560),1216=>array(24,0,242,729),1217=>array(-46,0,1000,928),1218=>array(-18,0,803,785),1219=>array(24,-200,649,729),1220=>array(34,-208,556,547),1221=>array(-42,-208,653,729),1222=>array(-33,-208,546,547),1223=>array(24,-200,653,729),1224=>array(35,-208,556,547),1225=>array(24,-208,653,729),1226=>array(35,-208,556,547),1227=>array(127,-157,606,729),1228=>array(105,-138,510,547),1229=>array(24,-208,752,729),1230=>array(35,-208,640,547),1231=>array(31,0,246,760),1232=>array(-48,0,562,926),1233=>array(37,-14,506,761),1234=>array(-48,0,554,913),1235=>array(37,-14,492,758),1236=>array(-41,0,895,729),1237=>array(37,-14,856,560),1238=>array(24,0,567,928),1239=>array(41,-14,514,785),1240=>array(46,-14,675,742),1241=>array(45,-14,507,560),1242=>array(46,-14,675,913),1243=>array(45,-14,507,758),1244=>array(-46,0,1000,913),1245=>array(-18,0,803,758),1246=>array(1,-14,536,913),1247=>array(13,-14,439,758),1248=>array(21,-31,587,729),1249=>array(-22,-213,499,547),1250=>array(24,0,649,899),1251=>array(34,0,551,745),1252=>array(24,0,649,913),1253=>array(34,0,551,758),1254=>array(36,-14,672,913),1255=>array(41,-14,510,758),1256=>array(36,-14,672,742),1257=>array(49,-14,501,560),1258=>array(36,-14,672,913),1259=>array(49,-14,501,758),1260=>array(-5,-14,578,913),1261=>array(5,-14,446,758),1262=>array(22,0,597,899),1263=>array(-22,-208,543,745),1264=>array(22,0,597,913),1265=>array(-22,-208,543,758),1266=>array(22,0,631,927),1267=>array(-22,-208,543,800),1268=>array(98,0,593,913),1269=>array(84,0,498,758),1270=>array(38,-157,574,729),1271=>array(46,-138,489,547),1272=>array(24,0,770,913),1273=>array(34,0,674,758),1274=>array(42,-208,637,729),1275=>array(38,-208,554,547),1276=>array(-20,-200,656,729),1277=>array(-4,-208,560,547),1278=>array(-37,0,638,729),1279=>array(-22,0,542,547),1280=>array(31,0,593,729),1281=>array(24,0,491,547),1282=>array(32,-14,849,729),1283=>array(23,-14,742,547),1284=>array(133,-14,821,742),1285=>array(104,-14,722,561),1286=>array(133,-208,540,742),1287=>array(104,-208,471,561),1288=>array(-43,-14,908,729),1289=>array(-33,-14,795,547),1290=>array(26,-14,953,729),1291=>array(35,-14,805,547),1292=>array(41,-14,661,742),1293=>array(42,-14,511,560),1294=>array(46,-14,639,729),1295=>array(33,-14,574,547),1296=>array(109,-14,609,742),1297=>array(35,-14,455,561),1298=>array(-9,-200,669,729),1299=>array(4,-208,567,547),1300=>array(-9,0,1092,729),1301=>array(-15,0,905,547),1302=>array(24,0,826,729),1303=>array(-3,-208,788,560),1304=>array(-4,0,926,729),1305=>array(3,-14,851,560),1306=>array(37,-129,672,742),1307=>array(41,-206,538,560),1308=>array(86,0,918,729),1309=>array(76,0,737,547),1310=>array(24,0,672,729),1311=>array(34,0,538,547),1312=>array(-27,-200,928,729),1313=>array(-15,-208,767,547),1314=>array(24,-200,928,729),1315=>array(34,-208,773,547),1316=>array(38,-157,666,729),1317=>array(46,-138,567,547),1329=>array(62,-29,644,729),1330=>array(14,0,596,743),1331=>array(59,0,646,743),1332=>array(50,0,641,743),1333=>array(62,-14,616,729),1334=>array(28,0,640,744),1335=>array(18,0,585,729),1336=>array(14,0,596,743),1337=>array(14,-14,763,743),1338=>array(21,-14,688,729),1339=>array(18,0,573,729),1340=>array(18,0,431,729),1341=>array(18,-14,795,729),1342=>array(100,-13,744,742),1343=>array(88,0,612,729),1344=>array(6,-26,604,729),1345=>array(39,-23,635,744),1346=>array(54,0,607,743),1347=>array(-2,0,644,735),1348=>array(62,-14,754,729),1349=>array(38,-14,593,743),1350=>array(48,-14,601,729),1351=>array(54,-15,638,729),1352=>array(14,0,596,743),1353=>array(63,-28,614,744),1354=>array(50,0,658,743),1355=>array(22,0,634,744),1356=>array(14,0,680,743),1357=>array(52,-14,642,729),1358=>array(54,0,610,729),1359=>array(40,-14,581,741),1360=>array(14,0,596,743),1361=>array(44,-14,600,743),1362=>array(18,0,515,729),1363=>array(50,0,677,729),1364=>array(-30,0,633,743),1365=>array(36,-14,672,742),1366=>array(28,-13,651,729),1369=>array(124,492,268,760),1370=>array(101,499,271,729),1371=>array(64,620,308,803),1372=>array(45,618,413,893),1373=>array(96,617,274,800),1374=>array(47,613,423,866),1375=>array(83,618,470,760),1377=>array(57,-14,840,547),1378=>array(-5,-208,501,560),1379=>array(47,-208,547,560),1380=>array(31,-208,552,560),1381=>array(63,-14,539,760),1382=>array(41,-208,535,560),1383=>array(31,0,487,760),1384=>array(-5,-208,501,560),1385=>array(-5,-208,662,560),1386=>array(41,-14,628,760),1387=>array(-5,-208,501,760),1388=>array(-5,-208,208,547),1389=>array(-5,-208,846,760),1390=>array(41,-14,545,760),1391=>array(63,-208,534,760),1392=>array(31,0,510,760),1393=>array(27,-15,465,760),1394=>array(31,-208,515,560),1395=>array(47,-14,563,768),1396=>array(63,-14,665,760),1397=>array(-104,-208,209,547),1398=>array(52,-14,534,760),1399=>array(-72,-208,403,560),1400=>array(31,0,510,560),1401=>array(-66,-208,305,547),1402=>array(57,-208,840,547),1403=>array(-20,-208,457,561),1404=>array(31,0,530,560),1405=>array(51,-14,530,547),1406=>array(63,-208,571,760),1407=>array(63,-14,808,560),1408=>array(-5,-208,501,560),1409=>array(28,-208,536,560),1410=>array(31,0,368,547),1411=>array(63,-208,808,760),1412=>array(-61,-208,525,560),1413=>array(40,-14,509,560),1414=>array(29,-208,689,760),1415=>array(63,-14,694,760),1417=>array(41,0,207,415),1418=>array(21,212,271,314),1456=>array(238,-217,338,-22),1457=>array(79,-217,412,-22),1458=>array(116,-217,426,-22),1459=>array(116,-217,426,-22),1460=>array(248,-159,328,-85),1461=>array(193,-159,382,-85),1462=>array(204,-217,393,-22),1463=>array(149,-159,426,-85),1464=>array(156,-193,433,-46),1465=>array(-7,625,73,698),1466=>array(-7,625,73,698),1467=>array(139,-237,412,-17),1468=>array(252,237,332,310),1469=>array(238,-217,338,-22),1470=>array(37,472,288,552),1471=>array(149,625,426,698),1472=>array(27,-98,239,645),1473=>array(627,625,707,698),1474=>array(146,625,225,698),1475=>array(44,0,222,547),1478=>array(-3,0,347,547),1479=>array(160,-217,437,-22),1488=>array(82,0,616,547),1489=>array(39,0,494,547),1490=>array(39,-5,345,547),1491=>array(122,0,556,547),1492=>array(91,0,555,547),1493=>array(82,0,259,547),1494=>array(89,0,369,547),1495=>array(82,0,558,547),1496=>array(127,-14,593,552),1497=>array(95,204,237,547),1498=>array(122,-208,458,547),1499=>array(39,0,481,547),1500=>array(122,0,539,729),1501=>array(82,0,576,547),1502=>array(67,0,582,555),1503=>array(45,-208,259,547),1504=>array(39,0,340,547),1505=>array(130,-14,583,547),1506=>array(26,-93,578,547),1507=>array(147,-208,546,547),1508=>array(82,0,561,547),1509=>array(134,-208,543,548),1510=>array(39,0,546,547),1511=>array(56,-208,666,546),1512=>array(122,0,484,547),1513=>array(106,0,695,547),1514=>array(9,-4,571,547),1520=>array(82,0,438,547),1521=>array(95,0,438,547),1522=>array(95,204,416,547),1523=>array(65,361,309,547),1524=>array(65,361,515,547),3647=>array(22,-138,518,769),3713=>array(24,-10,569,560),3714=>array(35,-17,584,568),3716=>array(41,-10,558,568),3719=>array(23,-238,399,568),3720=>array(61,-0,521,575),3722=>array(54,-234,608,568),3725=>array(26,-8,606,573),3732=>array(30,0,530,568),3733=>array(22,-15,530,579),3734=>array(76,-240,594,560),3735=>array(18,-8,568,571),3737=>array(-25,-8,566,568),3738=>array(10,-8,549,571),3739=>array(-6,-8,568,760),3740=>array(12,-8,691,614),3741=>array(41,-14,676,760),3742=>array(22,-8,620,561),3743=>array(5,-8,640,760),3745=>array(-8,-14,622,547),3746=>array(10,-8,625,760),3747=>array(36,-8,602,568),3749=>array(4,-8,543,568),3751=>array(23,-8,527,569),3754=>array(-5,-8,656,679),3755=>array(43,-12,710,575),3757=>array(24,-8,527,568),3758=>array(36,-8,665,605),3759=>array(120,-166,691,579),3760=>array(25,53,557,587),3761=>array(-519,639,-38,880),3762=>array(66,0,440,560),3763=>array(-321,0,440,820),3764=>array(-535,615,-66,926),3765=>array(-534,612,-16,926),3766=>array(-535,615,-66,926),3767=>array(-534,612,-16,926),3768=>array(-327,-350,-144,-38),3769=>array(-382,-306,-116,-40),3771=>array(-523,639,-40,880),3772=>array(-557,-284,9,-39),3773=>array(-4,-240,629,715),3776=>array(31,-14,336,560),3777=>array(31,-14,582,560),3778=>array(44,-5,375,896),3779=>array(91,-14,492,892),3780=>array(145,-11,395,886),3782=>array(25,-232,564,557),3784=>array(-343,632,-237,807),3785=>array(-515,609,-21,891),3786=>array(-536,598,21,869),3787=>array(-422,624,-157,904),3788=>array(-567,630,-2,875),3789=>array(-382,635,-197,820),3792=>array(59,-14,513,547),3793=>array(66,-75,541,576),3794=>array(15,-66,502,711),3795=>array(-51,-9,690,830),3796=>array(17,-83,504,711),3797=>array(17,-83,504,711),3798=>array(-6,-8,729,812),3799=>array(44,-240,589,560),3800=>array(73,-210,611,557),3801=>array(15,-4,607,571),3804=>array(43,-12,901,575),3805=>array(43,-12,925,575),4256=>array(115,-15,828,828),4257=>array(145,-0,646,828),4258=>array(158,-148,586,837),4259=>array(104,-15,804,828),4260=>array(145,0,587,837),4261=>array(143,0,739,837),4262=>array(156,-15,668,828),4263=>array(119,-15,893,837),4264=>array(149,0,489,874),4265=>array(120,0,576,828),4266=>array(106,-15,744,828),4267=>array(92,-15,839,828),4268=>array(44,0,605,828),4269=>array(111,-167,792,837),4270=>array(154,-15,792,837),4271=>array(152,0,655,828),4272=>array(80,-15,865,828),4273=>array(97,-15,549,828),4274=>array(43,-0,605,837),4275=>array(111,-182,792,837),4276=>array(131,0,823,834),4277=>array(114,0,703,828),4278=>array(41,-15,606,837),4279=>array(140,0,646,828),4280=>array(80,-15,650,828),4281=>array(44,0,555,828),4282=>array(119,-15,782,837),4283=>array(95,-15,826,828),4284=>array(43,-0,618,828),4285=>array(84,-15,576,837),4286=>array(43,-0,655,828),4287=>array(60,0,771,828),4288=>array(121,-15,803,828),4289=>array(44,0,564,828),4290=>array(89,-15,611,837),4291=>array(114,0,624,828),4292=>array(143,0,631,828),4293=>array(54,-15,744,837),4304=>array(71,-15,439,592),4305=>array(81,-14,459,837),4306=>array(30,-235,474,551),4307=>array(45,-230,725,547),4308=>array(25,-236,458,547),4309=>array(24,-236,469,547),4310=>array(72,-14,442,836),4311=>array(79,-14,718,547),4312=>array(84,0,463,547),4313=>array(19,-236,459,542),4314=>array(90,-230,964,552),4315=>array(81,-15,527,837),4316=>array(87,-15,534,833),4317=>array(86,-0,706,547),4318=>array(72,-15,496,833),4319=>array(24,-236,505,551),4320=>array(85,0,714,833),4321=>array(90,-15,458,827),4322=>array(55,-236,565,680),4323=>array(27,-236,479,571),4324=>array(88,-236,740,547),4325=>array(24,-236,549,828),4326=>array(89,-230,712,546),4327=>array(24,-236,503,538),4328=>array(74,-15,530,837),4329=>array(44,0,472,837),4330=>array(55,-236,512,532),4331=>array(80,-14,558,828),4332=>array(88,-15,586,837),4333=>array(33,-236,513,827),4334=>array(93,-15,465,827),4335=>array(-14,-235,431,572),4336=>array(68,-15,508,837),4337=>array(83,-15,523,837),4338=>array(21,-141,452,547),4339=>array(24,-236,504,546),4340=>array(25,-236,518,837),4341=>array(61,-15,555,837),4342=>array(82,-236,738,547),4343=>array(23,-236,454,547),4344=>array(25,-236,450,538),4345=>array(76,-236,521,551),4346=>array(69,-77,465,547),4347=>array(33,-10,397,484),4348=>array(139,420,388,837),5121=>array(70,1,672,730),5122=>array(-57,0,545,1037),5123=>array(-57,0,545,729),5124=>array(-57,0,545,914),5125=>array(24,0,650,729),5126=>array(24,0,650,914),5127=>array(24,0,650,913),5129=>array(24,0,650,729),5130=>array(42,0,668,729),5131=>array(42,0,668,914),5132=>array(79,1,808,730),5133=>array(70,1,708,730),5134=>array(79,0,681,729),5135=>array(-57,0,708,729),5136=>array(79,0,681,914),5137=>array(-57,0,708,914),5138=>array(79,0,828,729),5139=>array(24,0,827,729),5140=>array(79,0,828,914),5141=>array(24,0,827,914),5142=>array(24,0,671,914),5143=>array(79,0,846,729),5144=>array(42,0,827,729),5145=>array(79,0,846,914),5146=>array(42,0,827,914),5147=>array(42,0,668,914),5149=>array(80,629,187,729),5150=>array(24,326,404,734),5151=>array(18,356,349,714),5152=>array(64,356,303,714),5153=>array(60,398,325,674),5154=>array(36,391,302,667),5155=>array(37,398,305,667),5156=>array(60,398,301,667),5157=>array(0,327,396,733),5158=>array(24,326,333,734),5159=>array(79,312,187,412),5160=>array(55,503,307,563),5161=>array(55,399,307,667),5162=>array(75,399,327,691),5163=>array(70,1,902,730),5164=>array(-57,0,739,729),5165=>array(24,0,779,729),5166=>array(42,0,927,729),5167=>array(70,0,668,729),5168=>array(-57,0,545,1037),5169=>array(-57,0,545,729),5170=>array(-57,0,545,914),5171=>array(-12,0,614,729),5172=>array(-12,0,614,914),5173=>array(-12,0,614,913),5175=>array(-12,0,614,729),5176=>array(42,0,668,729),5177=>array(42,0,668,914),5178=>array(79,0,804,729),5179=>array(70,0,708,729),5180=>array(79,0,681,729),5181=>array(-57,0,708,729),5182=>array(79,0,681,914),5183=>array(-57,0,708,914),5184=>array(79,0,792,729),5185=>array(-12,0,827,729),5186=>array(79,0,792,914),5187=>array(-12,0,827,914),5188=>array(79,0,846,729),5189=>array(42,0,827,729),5190=>array(79,0,846,914),5191=>array(42,0,827,914),5192=>array(42,0,668,913),5193=>array(55,326,444,734),5194=>array(24,326,159,734),5196=>array(63,-14,646,729),5197=>array(13,0,595,1037),5198=>array(13,0,595,743),5199=>array(13,0,595,914),5200=>array(-12,0,604,729),5201=>array(-12,0,604,914),5202=>array(-12,0,604,913),5204=>array(-12,0,604,729),5205=>array(53,0,668,729),5206=>array(53,0,668,914),5207=>array(79,-14,816,729),5208=>array(63,-14,756,729),5209=>array(79,0,765,743),5210=>array(13,0,756,743),5211=>array(79,0,765,914),5212=>array(13,0,756,914),5213=>array(79,0,782,729),5214=>array(-12,0,767,729),5215=>array(79,0,782,914),5216=>array(-12,0,767,914),5217=>array(79,0,864,729),5218=>array(53,0,767,729),5219=>array(79,0,864,914),5220=>array(53,0,767,914),5221=>array(51,0,864,729),5222=>array(60,326,377,734),5223=>array(63,-14,776,734),5224=>array(13,0,776,743),5225=>array(-12,0,766,734),5226=>array(53,0,788,734),5227=>array(55,0,501,743),5228=>array(23,0,560,1037),5229=>array(23,0,560,743),5230=>array(23,0,560,914),5231=>array(6,-14,542,729),5232=>array(6,-14,591,914),5233=>array(6,-14,676,913),5234=>array(64,-14,510,729),5235=>array(64,-14,510,914),5236=>array(79,0,710,743),5237=>array(55,0,650,743),5238=>array(79,0,728,743),5239=>array(23,0,691,743),5240=>array(79,0,728,914),5241=>array(23,0,691,914),5242=>array(79,-14,751,729),5243=>array(6,-14,650,729),5244=>array(79,-14,799,914),5245=>array(6,-14,650,914),5246=>array(79,-14,678,729),5247=>array(64,-14,691,729),5248=>array(79,-14,678,914),5249=>array(64,-14,691,914),5250=>array(51,-14,678,729),5251=>array(46,318,328,734),5252=>array(8,318,342,734),5253=>array(55,0,662,743),5254=>array(23,0,684,743),5255=>array(6,-14,662,734),5256=>array(64,-14,684,734),5257=>array(55,0,501,743),5258=>array(23,0,560,1037),5259=>array(23,0,560,743),5260=>array(23,0,560,914),5261=>array(6,-14,542,729),5262=>array(6,-14,591,914),5263=>array(6,-14,676,913),5264=>array(64,-14,510,729),5265=>array(64,-14,510,914),5266=>array(79,0,710,743),5267=>array(55,0,650,743),5268=>array(79,0,728,743),5269=>array(23,0,691,743),5270=>array(79,0,728,914),5271=>array(23,0,691,914),5272=>array(79,-14,751,729),5273=>array(6,-14,650,729),5274=>array(79,-14,799,914),5275=>array(6,-14,650,914),5276=>array(79,-14,678,729),5277=>array(64,-14,691,729),5278=>array(79,-14,678,914),5279=>array(64,-14,691,914),5280=>array(51,-14,678,729),5281=>array(46,318,328,734),5282=>array(43,318,378,734),5283=>array(101,0,524,729),5284=>array(24,0,561,1037),5285=>array(24,0,561,729),5286=>array(24,0,561,914),5287=>array(-12,0,524,729),5288=>array(-12,0,577,914),5289=>array(-12,0,662,913),5290=>array(24,0,448,729),5291=>array(24,0,448,914),5292=>array(79,0,650,729),5293=>array(101,0,648,729),5294=>array(79,0,730,729),5295=>array(24,0,644,729),5296=>array(79,0,730,914),5297=>array(24,0,644,914),5298=>array(79,0,650,729),5299=>array(-12,0,648,729),5300=>array(79,0,702,914),5301=>array(-12,0,648,914),5302=>array(79,0,618,729),5303=>array(24,0,644,729),5304=>array(79,0,618,914),5305=>array(24,0,644,914),5306=>array(51,0,618,729),5307=>array(24,326,271,734),5308=>array(55,326,444,734),5309=>array(24,326,333,734),5312=>array(77,-14,743,436),5313=>array(26,-14,754,755),5314=>array(26,-14,754,436),5315=>array(0,-14,728,636),5316=>array(13,0,740,450),5317=>array(13,0,740,636),5318=>array(13,0,740,635),5319=>array(24,0,689,450),5320=>array(24,0,689,636),5321=>array(79,-14,938,436),5322=>array(77,-14,888,436),5323=>array(79,0,898,450),5324=>array(24,0,690,450),5325=>array(79,0,898,636),5326=>array(24,0,690,636),5327=>array(24,0,689,635),5328=>array(59,484,478,736),5329=>array(43,318,395,734),5330=>array(38,484,493,736),5331=>array(77,0,743,450),5332=>array(26,0,754,755),5333=>array(26,0,754,450),5334=>array(26,0,754,636),5335=>array(13,0,740,450),5336=>array(13,0,740,636),5337=>array(13,0,740,635),5338=>array(24,0,689,450),5339=>array(24,0,689,636),5340=>array(79,0,938,450),5341=>array(77,0,888,450),5342=>array(79,0,962,450),5343=>array(26,0,883,450),5344=>array(79,0,962,636),5345=>array(26,0,883,636),5346=>array(79,0,937,450),5347=>array(13,0,888,450),5348=>array(79,0,937,636),5349=>array(13,0,888,636),5350=>array(79,0,898,450),5351=>array(24,0,883,450),5352=>array(79,0,898,636),5353=>array(24,0,883,636),5354=>array(60,484,478,736),5356=>array(15,0,668,729),5357=>array(85,0,457,729),5358=>array(24,0,696,1037),5359=>array(24,0,576,729),5360=>array(24,0,625,914),5361=>array(-33,0,519,729),5362=>array(-33,0,570,914),5363=>array(-33,0,655,913),5364=>array(86,0,458,729),5365=>array(86,0,458,914),5366=>array(79,0,665,729),5367=>array(85,0,635,729),5368=>array(79,0,746,729),5369=>array(24,0,650,729),5370=>array(79,0,795,914),5371=>array(24,0,650,914),5372=>array(79,0,727,729),5373=>array(-33,0,635,729),5374=>array(79,0,778,914),5375=>array(-33,0,635,914),5376=>array(79,0,628,729),5377=>array(86,0,650,729),5378=>array(79,0,628,914),5379=>array(86,0,650,914),5380=>array(51,0,628,729),5381=>array(58,326,299,734),5382=>array(29,318,339,741),5383=>array(24,326,363,734),5392=>array(56,-14,584,743),5393=>array(-5,-14,646,743),5394=>array(-5,-14,646,914),5395=>array(29,-14,774,464),5396=>array(29,-14,774,636),5397=>array(24,-14,779,464),5398=>array(24,-14,779,636),5399=>array(79,-14,763,743),5400=>array(56,-14,742,743),5401=>array(79,-14,824,743),5402=>array(-5,-14,742,743),5403=>array(79,-14,824,914),5404=>array(-5,-14,742,914),5405=>array(79,-14,998,464),5406=>array(29,-14,946,464),5407=>array(79,-14,998,636),5408=>array(29,-14,946,636),5409=>array(79,-14,1002,464),5410=>array(24,-14,946,464),5411=>array(79,-14,1002,636),5412=>array(24,-14,946,636),5413=>array(57,476,531,737),5414=>array(40,0,479,729),5415=>array(24,0,514,1037),5416=>array(24,0,514,729),5417=>array(24,0,514,914),5418=>array(50,0,540,729),5419=>array(50,0,594,914),5420=>array(50,0,679,913),5421=>array(86,0,524,729),5422=>array(86,0,524,914),5423=>array(79,0,674,729),5424=>array(40,0,659,729),5425=>array(79,0,685,729),5426=>array(24,0,693,729),5427=>array(79,0,685,914),5428=>array(24,0,693,914),5429=>array(79,0,735,729),5430=>array(50,0,659,729),5431=>array(79,0,790,914),5432=>array(50,0,659,914),5433=>array(79,0,694,729),5434=>array(86,0,693,729),5435=>array(79,0,694,914),5436=>array(86,0,693,914),5437=>array(51,0,694,729),5438=>array(58,326,334,734),5440=>array(55,399,307,667),5441=>array(24,326,414,734),5442=>array(89,-14,812,436),5443=>array(77,-14,775,436),5444=>array(-35,0,687,450),5445=>array(48,0,747,755),5446=>array(48,0,747,450),5447=>array(48,0,747,636),5448=>array(24,0,538,729),5449=>array(24,0,538,914),5450=>array(24,0,487,729),5451=>array(56,0,519,729),5452=>array(56,0,519,914),5453=>array(5,0,519,729),5454=>array(79,0,727,914),5455=>array(56,0,635,914),5456=>array(75,326,363,734),5458=>array(-12,0,642,729),5459=>array(103,0,671,744),5460=>array(21,-15,546,1037),5461=>array(21,-15,546,729),5462=>array(21,-15,546,914),5463=>array(-8,0,617,662),5464=>array(-8,0,617,914),5465=>array(48,0,658,662),5466=>array(48,0,658,914),5467=>array(79,0,836,914),5468=>array(48,0,827,914),5469=>array(58,326,435,685),5470=>array(54,-14,645,743),5471=>array(54,-14,626,743),5472=>array(33,-14,605,743),5473=>array(14,-14,605,743),5474=>array(33,-14,605,914),5475=>array(14,-14,605,914),5476=>array(-12,0,614,729),5477=>array(-12,0,614,914),5478=>array(43,0,664,729),5479=>array(43,0,664,914),5480=>array(79,0,860,914),5481=>array(43,0,767,914),5482=>array(55,326,444,734),5492=>array(49,0,683,743),5493=>array(40,0,747,743),5494=>array(40,0,747,914),5495=>array(0,-14,708,729),5496=>array(0,-14,708,914),5497=>array(65,-14,699,729),5498=>array(65,-14,699,914),5499=>array(68,318,447,734),5500=>array(24,0,653,729),5501=>array(24,326,414,734),5502=>array(75,0,936,1037),5503=>array(75,0,936,743),5504=>array(75,0,936,914),5505=>array(75,-14,919,734),5506=>array(75,-14,967,914),5507=>array(75,-14,887,734),5508=>array(75,-14,887,914),5509=>array(75,318,705,734),5514=>array(55,0,683,743),5515=>array(40,0,748,743),5516=>array(0,-14,708,729),5517=>array(65,-14,692,729),5518=>array(74,0,1127,1037),5519=>array(74,0,1127,743),5520=>array(74,0,1127,914),5521=>array(74,-14,879,736),5522=>array(74,-14,927,914),5523=>array(74,-14,1078,736),5524=>array(74,-14,1078,914),5525=>array(74,332,582,736),5526=>array(74,332,918,736),5536=>array(11,0,740,692),5537=>array(11,0,740,692),5538=>array(-21,-242,708,450),5539=>array(-21,-242,708,636),5540=>array(50,-242,711,450),5541=>array(50,-242,711,636),5542=>array(73,338,491,736),5543=>array(40,0,534,729),5544=>array(-30,0,529,729),5545=>array(-30,0,529,914),5546=>array(50,0,609,729),5547=>array(50,0,609,914),5548=>array(45,0,539,729),5549=>array(45,0,539,914),5550=>array(21,326,335,734),5551=>array(26,-14,517,729),5598=>array(24,0,640,729),5601=>array(88,0,704,729),5702=>array(24,326,401,734),5703=>array(24,240,401,820),5742=>array(24,0,374,306),5743=>array(75,0,878,743),5744=>array(74,0,1115,743),5745=>array(74,0,1463,743),5746=>array(74,0,1463,914),5747=>array(74,-14,1214,736),5748=>array(74,-14,1263,914),5749=>array(74,-14,1414,736),5750=>array(74,-14,1414,914),7424=>array(-21,0,458,547),7425=>array(-43,0,645,547),7426=>array(50,-14,856,560),7427=>array(0,0,479,547),7428=>array(41,-14,483,560),7429=>array(34,0,496,547),7430=>array(11,0,496,547),7431=>array(34,0,441,547),7432=>array(27,-14,444,561),7433=>array(18,-213,232,547),7434=>array(-42,-14,329,547),7435=>array(34,0,556,547),7436=>array(-8,0,414,560),7437=>array(34,0,646,547),7438=>array(34,0,551,547),7439=>array(41,-14,510,560),7440=>array(2,-14,444,560),7441=>array(49,22,567,524),7442=>array(33,57,557,489),7443=>array(51,2,568,543),7444=>array(45,-14,874,560),7446=>array(24,273,477,560),7447=>array(75,-14,527,273),7448=>array(18,0,447,547),7449=>array(-26,0,505,547),7450=>array(70,0,505,547),7451=>array(62,0,546,547),7452=>array(70,-16,508,547),7453=>array(36,37,609,495),7454=>array(50,38,799,496),7455=>array(-49,-238,583,560),7456=>array(64,0,544,547),7457=>array(76,0,737,547),7458=>array(-3,0,489,547),7459=>array(16,-14,439,547),7462=>array(30,0,497,560),7463=>array(-21,0,458,547),7464=>array(18,0,489,547),7465=>array(18,0,447,547),7466=>array(62,0,540,547),7467=>array(-15,0,549,547),7468=>array(-31,326,348,734),7469=>array(-34,326,546,734),7470=>array(20,326,350,734),7472=>array(20,326,403,734),7473=>array(20,326,353,734),7474=>array(0,326,338,734),7475=>array(31,318,413,742),7476=>array(20,326,407,734),7477=>array(20,326,147,734),7478=>array(-75,214,158,734),7479=>array(20,326,405,734),7480=>array(20,326,286,734),7481=>array(20,326,470,734),7482=>array(20,326,404,734),7483=>array(20,326,404,734),7484=>array(31,318,415,742),7485=>array(16,318,372,742),7486=>array(20,326,337,734),7487=>array(20,326,342,734),7488=>array(26,326,384,734),7489=>array(41,318,402,734),7490=>array(54,326,578,734),7491=>array(22,318,300,640),7492=>array(30,318,307,640),7493=>array(31,318,335,640),7494=>array(31,318,538,640),7495=>array(15,318,319,751),7496=>array(21,318,347,751),7497=>array(31,318,321,640),7498=>array(29,318,319,640),7499=>array(26,318,284,640),7500=>array(21,318,278,640),7501=>array(34,209,345,640),7502=>array(16,207,142,632),7503=>array(14,326,336,751),7504=>array(24,326,509,640),7505=>array(34,209,327,640),7506=>array(31,318,316,640),7507=>array(6,318,277,640),7508=>array(17,479,302,640),7509=>array(45,318,330,479),7510=>array(13,209,338,640),7511=>array(27,326,229,719),7512=>array(43,318,335,632),7513=>array(26,347,381,604),7514=>array(46,319,532,633),7515=>array(43,326,346,632),7517=>array(5,209,321,755),7518=>array(38,209,356,632),7519=>array(22,318,312,742),7520=>array(41,209,352,635),7521=>array(-21,209,348,633),7522=>array(16,0,142,425),7523=>array(24,0,260,313),7524=>array(43,-8,335,306),7525=>array(43,0,346,306),7526=>array(5,-117,321,429),7527=>array(38,-117,356,306),7528=>array(5,-117,334,313),7529=>array(41,-117,352,309),7530=>array(-21,-117,348,307),7543=>array(17,-208,525,560),7544=>array(20,326,407,734),7547=>array(3,0,331,547),7549=>array(-3,-208,587,560),7557=>array(27,-208,299,760),7579=>array(4,318,309,640),7580=>array(31,318,301,640),7581=>array(34,287,304,640),7582=>array(20,318,317,751),7583=>array(11,318,274,640),7584=>array(22,326,248,751),7585=>array(-47,209,144,632),7586=>array(34,209,346,632),7587=>array(53,209,345,632),7588=>array(17,326,171,751),7589=>array(46,326,149,632),7590=>array(5,326,206,632),7591=>array(5,326,206,632),7592=>array(-112,209,152,751),7593=>array(25,209,152,751),7594=>array(-8,209,152,751),7595=>array(22,326,264,640),7596=>array(34,209,520,640),7597=>array(56,209,541,633),7598=>array(-48,209,329,640),7599=>array(34,209,345,640),7600=>array(22,326,338,640),7601=>array(31,318,316,640),7602=>array(31,210,316,751),7603=>array(13,209,286,640),7604=>array(-58,209,249,751),7605=>array(38,209,238,719),7606=>array(37,318,404,632),7607=>array(32,318,348,632),7608=>array(45,317,317,632),7609=>array(46,326,308,632),7610=>array(-10,326,292,632),7611=>array(-3,326,300,632),7612=>array(7,209,311,632),7613=>array(0,296,303,632),7614=>array(-10,207,310,632),7615=>array(31,320,316,756),7620=>array(-407,616,-54,800),7621=>array(-425,616,-25,800),7622=>array(-425,616,-25,800),7623=>array(-396,616,-43,800),7624=>array(-281,616,79,800),7625=>array(-313,616,111,800),7680=>array(-48,-241,554,729),7681=>array(37,-241,492,560),7682=>array(24,0,563,913),7683=>array(32,-14,528,915),7684=>array(24,-184,563,729),7685=>array(32,-184,528,760),7686=>array(24,-157,563,729),7687=>array(32,-157,528,760),7688=>array(38,-193,625,928),7689=>array(41,-193,483,800),7690=>array(24,0,650,914),7691=>array(41,-14,606,942),7692=>array(24,-184,650,729),7693=>array(41,-184,576,760),7694=>array(24,-156,650,729),7695=>array(41,-157,576,760),7696=>array(24,-193,650,729),7697=>array(40,-193,576,760),7698=>array(24,-240,650,729),7699=>array(30,-240,576,760),7700=>array(24,0,567,1044),7701=>array(41,-14,514,887),7702=>array(24,0,567,1044),7703=>array(41,-14,547,887),7704=>array(24,-213,567,729),7705=>array(41,-213,514,560),7706=>array(24,-193,567,729),7707=>array(41,-193,514,560),7708=>array(24,-193,567,928),7709=>array(41,-193,528,780),7710=>array(24,0,528,914),7711=>array(61,0,431,942),7712=>array(40,-14,653,899),7713=>array(29,-208,537,745),7714=>array(24,0,653,914),7715=>array(31,0,510,942),7716=>array(24,-184,653,729),7717=>array(31,-184,510,760),7718=>array(24,0,653,913),7719=>array(31,0,528,913),7720=>array(-71,-193,653,729),7721=>array(-70,-193,510,760),7722=>array(24,-222,653,729),7723=>array(31,-222,510,760),7724=>array(-100,-193,242,729),7725=>array(-115,-193,246,760),7726=>array(24,0,403,1044),7727=>array(31,0,394,883),7728=>array(24,0,650,928),7729=>array(31,0,551,928),7730=>array(24,-184,650,729),7731=>array(31,-184,551,760),7732=>array(24,-157,650,729),7733=>array(31,-157,551,760),7734=>array(24,-184,448,729),7735=>array(-2,-184,246,760),7736=>array(24,-184,448,927),7737=>array(-2,-184,370,899),7738=>array(24,-157,448,729),7739=>array(-83,-157,246,760),7740=>array(24,-240,448,729),7741=>array(-110,-240,246,760),7742=>array(24,0,752,928),7743=>array(31,0,815,800),7744=>array(24,0,752,914),7745=>array(31,0,815,760),7746=>array(24,-184,752,729),7747=>array(31,-184,815,560),7748=>array(24,0,649,913),7749=>array(31,0,510,760),7750=>array(24,-184,649,729),7751=>array(31,-184,510,560),7752=>array(24,-157,649,729),7753=>array(31,-157,510,560),7754=>array(24,-240,649,729),7755=>array(31,-240,510,560),7756=>array(36,-14,672,1044),7757=>array(41,-14,566,883),7758=>array(36,-14,672,1043),7759=>array(41,-14,524,885),7760=>array(36,-14,672,1044),7761=>array(41,-14,510,887),7762=>array(36,-14,672,1045),7763=>array(41,-14,540,886),7764=>array(24,0,541,928),7765=>array(-3,-208,530,800),7766=>array(24,0,541,914),7767=>array(-3,-208,530,760),7768=>array(24,0,541,914),7769=>array(31,0,417,760),7770=>array(24,-184,541,729),7771=>array(-2,-184,417,560),7772=>array(24,-184,541,899),7773=>array(-2,-184,454,745),7774=>array(24,-157,541,729),7775=>array(-83,-157,417,560),7776=>array(5,-14,543,914),7777=>array(10,-14,450,760),7778=>array(5,-184,543,742),7779=>array(10,-184,450,560),7780=>array(5,-14,583,928),7781=>array(10,-14,578,800),7782=>array(5,-14,593,1042),7783=>array(10,-14,514,858),7784=>array(5,-184,543,914),7785=>array(10,-184,450,760),7786=>array(39,0,608,914),7787=>array(57,0,381,942),7788=>array(39,-184,608,729),7789=>array(57,-184,381,702),7790=>array(39,-157,608,729),7791=>array(17,-156,381,702),7792=>array(21,-241,608,729),7793=>array(-9,-240,381,702),7794=>array(52,-183,642,729),7795=>array(51,-183,530,547),7796=>array(52,-193,642,729),7797=>array(25,-193,530,547),7798=>array(52,-213,642,729),7799=>array(51,-213,530,547),7800=>array(52,-14,642,1044),7801=>array(51,-14,558,883),7802=>array(52,-14,642,1025),7803=>array(51,-14,530,867),7804=>array(70,0,668,936),7805=>array(64,0,544,777),7806=>array(70,-182,668,729),7807=>array(64,-184,544,547),7808=>array(86,0,918,931),7809=>array(76,0,737,802),7810=>array(86,0,918,931),7811=>array(76,0,737,803),7812=>array(86,0,918,913),7813=>array(76,0,737,758),7814=>array(86,0,918,913),7815=>array(76,0,737,760),7816=>array(86,-184,918,729),7817=>array(76,-184,737,547),7818=>array(-39,0,633,914),7819=>array(-23,0,541,760),7820=>array(-39,0,633,913),7821=>array(-23,0,541,758),7822=>array(57,0,608,914),7823=>array(-22,-208,543,760),7824=>array(-20,0,633,928),7825=>array(-3,0,489,800),7826=>array(-20,-184,633,729),7827=>array(-3,-184,489,547),7828=>array(-20,-157,633,729),7829=>array(-3,-157,489,547),7830=>array(31,-157,510,760),7831=>array(57,0,381,913),7832=>array(76,0,737,878),7833=>array(-22,-208,543,878),7834=>array(37,-14,700,760),7835=>array(61,0,431,942),7836=>array(-20,0,400,760),7837=>array(25,0,400,760),7838=>array(14,-14,614,743),7839=>array(34,-14,501,742),7840=>array(-48,-184,554,729),7841=>array(37,-184,492,560),7842=>array(-48,0,554,992),7843=>array(37,-14,500,810),7844=>array(-48,0,693,1028),7845=>array(37,-14,641,847),7846=>array(-48,0,554,1028),7847=>array(37,-14,492,847),7848=>array(-48,0,696,1044),7849=>array(37,-14,641,863),7850=>array(-48,0,577,1043),7851=>array(37,-14,521,862),7852=>array(-48,-184,554,928),7853=>array(37,-184,492,800),7854=>array(-48,0,584,1044),7855=>array(37,-14,535,868),7856=>array(-48,0,554,1044),7857=>array(37,-14,502,868),7858=>array(-48,0,554,1068),7859=>array(37,-14,497,895),7860=>array(-48,0,586,1043),7861=>array(37,-14,537,870),7862=>array(-48,-184,562,926),7863=>array(37,-184,506,761),7864=>array(24,-184,567,729),7865=>array(41,-184,514,560),7866=>array(24,0,567,992),7867=>array(41,-14,524,810),7868=>array(24,0,567,921),7869=>array(41,-14,514,777),7870=>array(24,0,684,1028),7871=>array(41,-14,667,847),7872=>array(24,0,567,1028),7873=>array(41,-14,514,847),7874=>array(24,0,688,1044),7875=>array(41,-14,671,863),7876=>array(24,0,568,1043),7877=>array(41,-14,552,862),7878=>array(24,-184,567,928),7879=>array(41,-184,514,800),7880=>array(24,0,331,992),7881=>array(31,0,303,810),7882=>array(-5,-184,242,729),7883=>array(-2,-184,246,760),7884=>array(36,-184,672,742),7885=>array(41,-184,510,560),7886=>array(36,-14,672,992),7887=>array(41,-14,518,810),7888=>array(36,-14,739,1028),7889=>array(41,-14,663,847),7890=>array(36,-14,672,1028),7891=>array(41,-14,510,847),7892=>array(36,-14,742,1044),7893=>array(41,-14,663,863),7894=>array(36,-14,672,1043),7895=>array(41,-14,543,862),7896=>array(36,-184,672,928),7897=>array(41,-184,510,800),7898=>array(31,-14,741,927),7899=>array(43,-14,591,800),7900=>array(31,-14,741,927),7901=>array(43,-14,591,800),7902=>array(31,-14,741,991),7903=>array(43,-14,591,810),7904=>array(31,-14,741,921),7905=>array(43,-14,591,777),7906=>array(31,-184,741,761),7907=>array(43,-184,591,609),7908=>array(52,-184,642,729),7909=>array(51,-184,530,547),7910=>array(52,-14,642,992),7911=>array(51,-14,530,810),7912=>array(50,-4,769,927),7913=>array(52,-14,648,800),7914=>array(50,-4,769,927),7915=>array(52,-14,648,800),7916=>array(50,-4,769,992),7917=>array(52,-14,648,810),7918=>array(50,-4,769,921),7919=>array(52,-14,648,777),7920=>array(50,-184,769,761),7921=>array(52,-184,648,615),7922=>array(57,0,608,931),7923=>array(-22,-208,543,802),7924=>array(57,-184,608,729),7925=>array(-22,-208,543,547),7926=>array(57,0,608,996),7927=>array(-22,-208,543,813),7928=>array(57,0,608,921),7929=>array(-22,-208,543,777),7930=>array(24,0,638,729),7931=>array(18,0,470,760),7936=>array(49,-12,581,797),7937=>array(49,-12,581,797),7938=>array(49,-12,581,800),7939=>array(49,-12,581,800),7940=>array(49,-12,581,800),7941=>array(49,-12,582,800),7942=>array(49,-12,581,928),7943=>array(49,-12,581,928),7944=>array(-48,0,554,797),7945=>array(-48,0,554,797),7946=>array(46,0,728,800),7947=>array(71,0,728,800),7948=>array(28,0,630,800),7949=>array(57,0,659,800),7950=>array(-26,0,576,928),7951=>array(4,0,606,928),7952=>array(35,-14,455,797),7953=>array(35,-14,455,797),7954=>array(35,-14,480,800),7955=>array(35,-14,479,800),7956=>array(35,-14,534,800),7957=>array(35,-14,548,800),7960=>array(47,0,638,797),7961=>array(71,0,638,797),7962=>array(46,0,868,800),7963=>array(71,0,875,800),7964=>array(47,0,807,800),7965=>array(70,0,833,800),7968=>array(51,-208,521,797),7969=>array(51,-208,521,797),7970=>array(51,-208,522,800),7971=>array(51,-208,521,800),7972=>array(51,-208,557,800),7973=>array(51,-208,588,800),7974=>array(51,-208,560,928),7975=>array(51,-208,550,928),7976=>array(47,0,729,797),7977=>array(71,0,728,797),7978=>array(46,0,954,800),7979=>array(71,0,956,800),7980=>array(47,0,900,800),7981=>array(70,0,922,800),7982=>array(100,0,816,928),7983=>array(98,0,828,928),7984=>array(60,0,254,797),7985=>array(60,0,251,797),7986=>array(9,0,371,800),7987=>array(38,0,377,800),7988=>array(46,0,422,800),7989=>array(48,0,426,800),7990=>array(60,0,388,928),7991=>array(60,0,386,928),7992=>array(47,0,318,797),7993=>array(71,0,313,797),7994=>array(46,0,547,800),7995=>array(71,0,547,800),7996=>array(47,0,489,800),7997=>array(70,0,516,800),7998=>array(100,0,417,928),7999=>array(98,0,420,928),8000=>array(41,-14,510,797),8001=>array(41,-14,510,797),8002=>array(41,-14,510,800),8003=>array(41,-14,510,800),8004=>array(41,-14,559,800),8005=>array(41,-14,576,800),8008=>array(47,-14,688,797),8009=>array(71,-14,728,797),8010=>array(46,-14,949,800),8011=>array(71,-14,954,800),8012=>array(47,-14,809,800),8013=>array(70,-14,837,800),8016=>array(53,0,479,797),8017=>array(53,0,479,797),8018=>array(53,0,483,800),8019=>array(53,0,479,800),8020=>array(53,0,541,800),8021=>array(53,0,550,800),8022=>array(53,0,516,928),8023=>array(53,0,501,928),8025=>array(71,0,764,797),8027=>array(71,0,957,800),8029=>array(70,0,970,800),8031=>array(98,0,867,928),8032=>array(61,-14,694,797),8033=>array(61,-14,694,797),8034=>array(61,-14,694,800),8035=>array(61,-14,694,800),8036=>array(61,-14,694,800),8037=>array(61,-14,694,800),8038=>array(61,-14,694,928),8039=>array(61,-14,694,928),8040=>array(4,0,685,797),8041=>array(41,0,722,797),8042=>array(46,0,943,800),8043=>array(71,0,949,800),8044=>array(47,0,814,800),8045=>array(70,0,838,800),8046=>array(100,0,792,928),8047=>array(98,0,820,928),8048=>array(49,-12,581,800),8049=>array(49,-12,581,800),8050=>array(35,-14,455,800),8051=>array(35,-14,505,800),8052=>array(51,-208,521,800),8053=>array(51,-208,557,800),8054=>array(45,0,239,800),8055=>array(60,0,388,800),8056=>array(41,-14,510,800),8057=>array(41,-14,525,800),8058=>array(53,0,479,800),8059=>array(53,0,485,800),8060=>array(61,-14,694,800),8061=>array(61,-14,694,800),8064=>array(49,-208,581,797),8065=>array(49,-208,581,797),8066=>array(49,-208,581,800),8067=>array(49,-208,581,800),8068=>array(49,-208,581,800),8069=>array(49,-208,582,800),8070=>array(49,-208,581,928),8071=>array(49,-208,581,928),8072=>array(-48,-208,554,797),8073=>array(-48,-208,554,797),8074=>array(46,-208,728,800),8075=>array(71,-208,728,800),8076=>array(28,-208,630,800),8077=>array(57,-208,659,800),8078=>array(-26,-208,576,928),8079=>array(4,-208,606,928),8080=>array(35,-208,521,797),8081=>array(35,-208,521,797),8082=>array(35,-208,522,800),8083=>array(35,-208,521,800),8084=>array(35,-208,557,800),8085=>array(35,-208,588,800),8086=>array(35,-208,560,928),8087=>array(35,-208,550,928),8088=>array(47,-208,729,797),8089=>array(71,-208,728,797),8090=>array(46,-208,954,800),8091=>array(71,-208,956,800),8092=>array(47,-208,900,800),8093=>array(70,-208,922,800),8094=>array(100,-208,816,928),8095=>array(98,-208,828,928),8096=>array(61,-208,694,797),8097=>array(61,-208,694,797),8098=>array(61,-208,694,800),8099=>array(61,-208,694,800),8100=>array(61,-208,694,800),8101=>array(61,-208,694,800),8102=>array(61,-208,694,928),8103=>array(61,-208,694,928),8104=>array(4,-208,685,797),8105=>array(41,-208,722,797),8106=>array(46,-208,943,800),8107=>array(71,-208,949,800),8108=>array(47,-208,814,800),8109=>array(70,-208,838,800),8110=>array(100,-208,792,928),8111=>array(98,-208,820,928),8112=>array(49,-12,581,785),8113=>array(49,-12,581,745),8114=>array(49,-208,581,800),8115=>array(49,-208,581,559),8116=>array(49,-208,581,800),8118=>array(49,-12,581,777),8119=>array(49,-208,581,777),8120=>array(-48,0,554,928),8121=>array(-48,0,554,899),8122=>array(-19,0,583,800),8123=>array(-48,0,554,800),8124=>array(-48,-208,554,729),8125=>array(215,595,357,797),8126=>array(123,-208,216,-45),8127=>array(215,595,357,797),8128=>array(147,639,462,777),8129=>array(166,659,491,928),8130=>array(35,-208,521,800),8131=>array(35,-208,521,560),8132=>array(35,-208,557,800),8134=>array(51,-208,525,777),8135=>array(35,-208,525,777),8136=>array(94,0,723,800),8137=>array(53,0,688,800),8138=>array(94,0,813,800),8139=>array(58,0,782,800),8140=>array(24,-208,653,729),8141=>array(104,595,466,800),8142=>array(123,595,499,800),8143=>array(176,595,491,928),8144=>array(60,0,360,785),8145=>array(60,0,337,745),8146=>array(60,0,352,978),8147=>array(66,0,405,978),8150=>array(55,0,370,777),8151=>array(60,0,400,928),8152=>array(24,0,354,928),8153=>array(24,0,352,899),8154=>array(94,0,404,800),8155=>array(55,0,368,800),8157=>array(124,595,463,800),8158=>array(134,595,512,800),8159=>array(176,595,491,928),8160=>array(53,0,479,785),8161=>array(53,0,479,745),8162=>array(53,0,479,978),8163=>array(53,0,510,978),8164=>array(14,-208,540,797),8165=>array(14,-208,540,797),8166=>array(53,0,479,777),8167=>array(53,0,502,928),8168=>array(57,0,608,928),8169=>array(57,0,608,899),8170=>array(94,0,819,800),8171=>array(50,0,827,800),8172=>array(71,0,615,797),8173=>array(166,659,444,978),8174=>array(166,659,498,978),8175=>array(171,617,350,800),8178=>array(61,-208,694,800),8179=>array(61,-208,694,547),8180=>array(61,-208,694,800),8182=>array(61,-14,694,777),8183=>array(61,-208,694,777),8184=>array(94,-14,811,800),8185=>array(57,-14,714,800),8186=>array(94,0,793,800),8187=>array(47,0,746,800),8188=>array(-31,-208,650,738),8189=>array(227,616,470,800),8190=>array(240,595,359,797),8208=>array(40,234,292,314),8209=>array(40,234,292,314),8210=>array(38,239,535,309),8211=>array(38,239,413,309),8212=>array(38,239,862,309),8213=>array(-6,239,906,309),8214=>array(114,-236,334,764),8215=>array(-9,-236,459,-9),8216=>array(118,489,289,729),8217=>array(121,489,293,729),8218=>array(2,-116,174,124),8219=>array(149,489,258,729),8220=>array(118,489,469,729),8221=>array(121,489,473,729),8222=>array(2,-116,354,124),8223=>array(83,489,371,729),8224=>array(38,-96,451,729),8225=>array(-16,-96,457,729),8226=>array(135,227,396,516),8227=>array(135,188,431,555),8228=>array(58,0,173,124),8229=>array(58,0,473,124),8230=>array(58,0,773,124),8231=>array(89,302,204,426),8240=>array(82,-14,1133,742),8241=>array(82,-14,1493,742),8242=>array(1,547,199,729),8243=>array(1,547,331,729),8244=>array(1,547,462,729),8245=>array(81,547,215,729),8246=>array(81,547,347,729),8247=>array(81,547,479,729),8248=>array(4,-236,300,-30),8249=>array(56,69,304,517),8250=>array(56,69,304,517),8251=>array(103,0,646,596),8252=>array(0,0,435,729),8253=>array(104,0,450,742),8254=>array(-9,686,459,755),8255=>array(-40,-237,763,-60),8256=>array(-40,752,763,929),8257=>array(-38,-236,257,229),8258=>array(26,-29,874,814),8259=>array(87,313,370,421),8260=>array(-236,-14,386,742),8261=>array(36,-132,378,760),8262=>array(-35,-132,308,760),8263=>array(78,0,843,742),8264=>array(110,0,658,742),8265=>array(0,0,641,742),8266=>array(88,-123,462,545),8267=>array(48,-96,570,729),8268=>array(101,227,349,516),8269=>array(101,227,349,516),8270=>array(26,-29,423,427),8271=>array(86,-116,259,517),8272=>array(-40,-237,763,929),8273=>array(26,-7,423,876),8274=>array(-8,-93,442,729),8275=>array(44,228,856,399),8276=>array(-40,-237,763,-60),8277=>array(144,98,638,631),8278=>array(116,149,471,589),8279=>array(1,547,594,729),8280=>array(163,125,620,613),8281=>array(139,120,653,608),8282=>array(46,0,267,729),8283=>array(46,-138,699,867),8284=>array(56,0,726,729),8285=>array(53,39,254,655),8286=>array(47,8,259,683),8304=>array(38,319,330,742),8305=>array(16,326,142,751),8308=>array(37,326,352,734),8309=>array(11,319,323,734),8310=>array(40,319,339,742),8311=>array(70,326,354,734),8312=>array(23,319,337,742),8313=>array(29,319,328,742),8314=>array(60,326,415,677),8315=>array(60,479,415,525),8316=>array(60,422,415,581),8317=>array(49,252,221,751),8318=>array(6,252,179,751),8319=>array(24,326,316,640),8320=>array(38,-7,330,416),8321=>array(59,0,313,408),8322=>array(32,0,347,416),8323=>array(14,-7,332,416),8324=>array(37,0,352,408),8325=>array(11,-7,323,408),8326=>array(40,-7,339,416),8327=>array(70,0,354,408),8328=>array(23,-7,337,416),8329=>array(29,-7,328,416),8330=>array(60,0,415,351),8331=>array(60,152,415,199),8332=>array(60,96,415,254),8333=>array(49,-74,221,425),8334=>array(6,-74,179,425),8336=>array(22,-8,300,313),8337=>array(31,-8,321,313),8338=>array(31,-8,316,313),8339=>array(24,0,374,306),8340=>array(29,-8,319,313),8341=>array(14,0,307,425),8342=>array(14,0,336,425),8343=>array(14,0,140,425),8344=>array(24,0,509,313),8345=>array(24,0,316,314),8346=>array(13,-117,338,313),8347=>array(26,0,297,322),8348=>array(27,0,229,393),8352=>array(52,0,778,729),8353=>array(38,-44,572,778),8354=>array(38,-14,572,742),8355=>array(28,0,591,729),8356=>array(21,0,574,742),8357=>array(34,-93,811,640),8358=>array(34,0,639,729),8359=>array(24,-14,1125,729),8360=>array(25,-14,927,729),8361=>array(39,0,924,729),8362=>array(-22,-14,743,729),8363=>array(41,-157,631,760),8364=>array(-18,-14,546,742),8365=>array(17,0,614,729),8366=>array(58,0,628,729),8367=>array(42,-222,1060,742),8368=>array(8,-14,521,742),8369=>array(24,0,589,729),8370=>array(29,-81,567,809),8371=>array(-57,0,569,729),8372=>array(35,-14,662,742),8373=>array(76,-147,550,760),8376=>array(33,0,628,729),8377=>array(50,0,591,729),8378=>array(-18,2,584,731),8400=>array(-453,635,-25,760),8401=>array(-435,635,-15,760),8406=>array(-423,560,-19,760),8407=>array(-428,560,-23,760),8411=>array(-325,659,126,758),8412=>array(-411,659,211,758),8417=>array(-423,560,-23,760),8448=>array(15,-24,846,752),8449=>array(15,-24,846,752),8450=>array(50,-14,580,742),8451=>array(85,-14,994,742),8452=>array(103,0,694,729),8453=>array(20,-24,832,752),8454=>array(20,-24,891,752),8455=>array(109,-14,609,742),8456=>array(-5,-146,578,611),8457=>array(85,0,825,742),8459=>array(32,-14,849,748),8460=>array(0,-128,624,731),8461=>array(88,0,677,729),8462=>array(31,0,510,760),8463=>array(40,0,510,760),8464=>array(26,-15,389,742),8465=>array(46,-14,593,742),8466=>array(30,-14,611,743),8467=>array(-13,-14,317,742),8468=>array(20,-14,686,760),8469=>array(87,0,634,729),8470=>array(-40,0,866,729),8471=>array(124,0,776,724),8472=>array(48,-221,592,495),8473=>array(88,0,600,729),8474=>array(50,-129,658,742),8475=>array(29,-9,688,774),8476=>array(36,-14,723,743),8477=>array(88,0,697,729),8478=>array(74,0,733,729),8479=>array(83,-107,603,847),8480=>array(114,443,693,730),8481=>array(29,0,889,547),8482=>array(129,447,706,729),8483=>array(13,-108,736,846),8484=>array(40,0,630,729),8485=>array(8,-213,565,760),8486=>array(-31,0,650,738),8487=>array(38,-14,718,724),8488=>array(10,-149,516,783),8489=>array(64,0,243,547),8490=>array(24,0,650,729),8491=>array(-48,0,554,928),8492=>array(40,0,661,772),8493=>array(57,-12,587,742),8494=>array(55,-12,714,647),8495=>array(38,-15,493,533),8496=>array(71,-14,509,742),8497=>array(37,-16,683,755),8498=>array(24,0,528,729),8499=>array(25,-28,929,751),8500=>array(45,-12,370,395),8501=>array(45,-14,641,742),8502=>array(-2,-14,588,743),8503=>array(12,-35,366,742),8504=>array(38,-35,532,742),8505=>array(31,0,320,760),8506=>array(40,-21,871,654),8507=>array(18,0,1078,547),8508=>array(16,-8,616,547),8509=>array(0,-194,602,560),8510=>array(88,0,584,729),8511=>array(88,0,676,729),8512=>array(11,-192,712,719),8513=>array(42,-14,655,742),8514=>array(53,0,476,729),8515=>array(3,0,539,729),8516=>array(-59,0,493,729),8517=>array(38,0,708,729),8518=>array(40,-14,639,760),8519=>array(40,-14,515,560),8520=>array(35,0,282,760),8521=>array(-103,-208,282,760),8523=>array(52,-14,668,742),8526=>array(-13,0,445,547),8528=>array(59,-14,866,742),8529=>array(59,-14,839,742),8530=>array(59,-14,1202,742),8531=>array(59,-14,843,742),8532=>array(32,-14,843,742),8533=>array(59,-14,834,742),8534=>array(32,-14,834,742),8535=>array(14,-14,834,742),8536=>array(37,-14,834,742),8537=>array(59,-14,850,742),8538=>array(11,-14,850,742),8539=>array(59,-14,849,742),8540=>array(14,-14,849,742),8541=>array(11,-14,849,742),8542=>array(70,-14,849,742),8543=>array(59,-14,747,742),8544=>array(24,0,242,729),8545=>array(24,0,419,729),8546=>array(24,0,597,729),8547=>array(24,0,883,729),8548=>array(70,0,668,729),8549=>array(70,0,806,729),8550=>array(70,0,984,729),8551=>array(70,0,1161,729),8552=>array(24,0,842,729),8553=>array(-39,0,633,729),8554=>array(-39,0,816,729),8555=>array(-39,0,993,729),8556=>array(24,0,448,729),8557=>array(38,-14,625,742),8558=>array(24,0,650,729),8559=>array(24,0,752,729),8560=>array(31,0,246,760),8561=>array(31,0,408,760),8562=>array(31,0,569,760),8563=>array(31,0,742,760),8564=>array(64,0,544,547),8565=>array(64,0,726,760),8566=>array(64,0,888,760),8567=>array(64,0,1049,760),8568=>array(31,0,745,760),8569=>array(-23,0,541,547),8570=>array(-23,0,736,760),8571=>array(-23,0,897,760),8572=>array(31,0,246,760),8573=>array(41,-14,483,560),8574=>array(41,-14,576,760),8575=>array(31,0,815,560),8576=>array(53,0,1068,729),8577=>array(24,0,640,729),8578=>array(53,0,1068,729),8579=>array(56,-14,644,742),8580=>array(2,-14,444,560),8581=>array(67,-208,651,742),8585=>array(38,-14,843,742),8592=>array(44,100,703,527),8593=>array(184,0,569,732),8594=>array(51,100,710,527),8595=>array(184,-3,569,729),8596=>array(44,100,710,527),8597=>array(184,-8,569,732),8598=>array(126,25,633,587),8599=>array(126,25,633,587),8600=>array(126,25,633,587),8601=>array(126,25,633,587),8602=>array(44,100,703,527),8603=>array(51,100,710,527),8604=>array(19,103,745,414),8605=>array(9,103,735,414),8606=>array(44,100,703,527),8607=>array(185,0,570,732),8608=>array(51,100,710,527),8609=>array(185,-3,570,729),8610=>array(44,100,703,527),8611=>array(51,100,710,527),8612=>array(44,100,703,527),8613=>array(185,0,569,732),8614=>array(51,100,710,527),8615=>array(185,-3,569,729),8616=>array(185,0,569,732),8617=>array(44,100,703,565),8618=>array(52,100,710,565),8619=>array(44,100,703,565),8620=>array(52,100,710,565),8621=>array(44,100,710,527),8622=>array(44,93,710,534),8623=>array(131,-2,632,730),8624=>array(152,0,567,743),8625=>array(188,0,603,743),8626=>array(152,-14,567,729),8627=>array(188,-14,603,729),8628=>array(209,-3,684,604),8629=>array(44,100,590,626),8630=>array(20,203,720,668),8631=>array(35,203,734,668),8632=>array(97,25,709,729),8633=>array(49,-46,705,673),8634=>array(92,62,686,680),8635=>array(69,62,663,680),8636=>array(44,272,703,527),8637=>array(44,100,703,355),8638=>array(339,0,569,732),8639=>array(184,0,415,732),8640=>array(51,272,710,527),8641=>array(51,100,710,355),8642=>array(339,0,569,732),8643=>array(184,0,415,732),8644=>array(44,-47,710,674),8645=>array(52,-3,701,732),8646=>array(44,-47,710,674),8647=>array(44,-47,703,674),8648=>array(53,0,702,732),8649=>array(52,-47,711,674),8650=>array(53,-3,702,729),8651=>array(44,7,710,620),8652=>array(44,7,710,620),8653=>array(44,100,703,527),8654=>array(44,94,710,533),8655=>array(51,100,710,527),8656=>array(44,100,703,527),8657=>array(185,0,570,732),8658=>array(51,100,710,527),8659=>array(185,-3,570,729),8660=>array(44,100,710,527),8661=>array(185,-8,570,732),8662=>array(126,-23,677,587),8663=>array(83,-23,633,587),8664=>array(83,25,633,636),8665=>array(126,25,677,636),8666=>array(44,100,703,527),8667=>array(51,100,710,527),8668=>array(44,100,703,527),8669=>array(51,100,710,527),8670=>array(184,0,569,732),8671=>array(184,-3,569,729),8672=>array(44,100,703,527),8673=>array(184,0,570,732),8674=>array(51,100,710,527),8675=>array(184,-3,570,729),8676=>array(47,99,703,528),8677=>array(51,99,708,528),8678=>array(24,65,703,562),8679=>array(154,0,601,754),8680=>array(31,65,710,562),8681=>array(154,-25,601,729),8682=>array(154,0,601,754),8683=>array(154,0,601,754),8684=>array(141,0,614,754),8685=>array(154,0,601,754),8686=>array(154,0,601,754),8687=>array(154,0,601,754),8688=>array(51,65,730,562),8689=>array(53,0,709,729),8690=>array(53,0,709,729),8691=>array(154,-25,601,754),8692=>array(51,100,710,527),8693=>array(52,-3,701,732),8694=>array(51,-193,710,820),8695=>array(44,94,703,533),8696=>array(51,94,710,533),8697=>array(44,94,710,533),8698=>array(44,94,703,533),8699=>array(51,94,710,533),8700=>array(44,94,710,533),8701=>array(24,96,703,531),8702=>array(51,96,730,531),8703=>array(24,96,730,531),8704=>array(7,0,608,729),8705=>array(59,-14,499,742),8706=>array(42,-14,424,662),8707=>array(88,0,511,729),8708=>array(88,-46,511,776),8709=>array(68,-10,716,710),8710=>array(-3,0,605,719),8711=>array(-3,0,605,719),8712=>array(77,-10,708,710),8713=>array(77,-139,708,836),8714=>array(95,76,551,550),8715=>array(77,-10,708,710),8716=>array(77,-139,708,836),8717=>array(95,76,551,550),8718=>array(132,0,441,485),8719=>array(68,-192,612,719),8720=>array(68,-192,612,719),8721=>array(11,-192,589,719),8722=>array(95,272,659,355),8723=>array(95,0,659,627),8724=>array(95,0,659,729),8725=>array(-66,-93,384,729),8726=>array(173,-54,477,768),8727=>array(115,0,640,627),8728=>array(142,160,421,470),8729=>array(151,168,413,458),8730=>array(26,-20,574,811),8731=>array(26,-20,574,933),8732=>array(26,-20,574,924),8733=>array(97,112,546,487),8734=>array(97,112,653,487),8735=>array(124,99,630,661),8736=>array(77,0,708,729),8737=>array(77,-53,708,729),8738=>array(104,-3,659,727),8739=>array(189,-214,260,771),8740=>array(44,-214,406,771),8741=>array(119,-214,331,771),8742=>array(44,-214,406,771),8743=>array(116,0,543,579),8744=>array(116,0,543,579),8745=>array(116,0,543,579),8746=>array(116,0,543,579),8747=>array(51,-212,417,757),8748=>array(51,-212,659,757),8749=>array(51,-212,900,757),8750=>array(51,-212,418,757),8751=>array(51,-212,659,757),8752=>array(51,-212,900,757),8753=>array(51,-212,470,757),8754=>array(51,-212,463,757),8755=>array(51,-212,464,757),8756=>array(53,100,520,604),8757=>array(53,100,520,604),8758=>array(70,100,164,604),8759=>array(53,100,520,604),8760=>array(95,272,659,552),8761=>array(95,78,659,552),8762=>array(95,78,659,552),8763=>array(95,78,659,552),8764=>array(95,228,659,399),8765=>array(95,228,659,399),8766=>array(71,149,683,479),8767=>array(95,42,659,584),8768=>array(91,0,246,627),8769=>array(95,77,659,553),8770=>array(95,133,659,454),8771=>array(95,172,659,494),8772=>array(95,47,659,603),8773=>array(95,90,659,594),8774=>array(95,11,659,594),8775=>array(95,-5,659,658),8776=>array(95,133,659,494),8777=>array(95,2,659,625),8778=>array(95,90,659,598),8779=>array(95,59,659,602),8780=>array(95,90,659,594),8781=>array(95,105,659,521),8782=>array(95,26,659,601),8783=>array(95,172,659,601),8784=>array(95,172,659,625),8785=>array(95,1,659,625),8786=>array(94,2,659,625),8787=>array(94,2,658,625),8788=>array(90,151,810,476),8789=>array(90,151,810,475),8790=>array(95,172,659,454),8791=>array(95,172,659,760),8792=>array(95,172,659,662),8793=>array(95,172,659,812),8794=>array(95,172,659,812),8795=>array(95,172,659,849),8796=>array(95,172,659,854),8797=>array(95,172,659,764),8798=>array(95,172,659,760),8799=>array(95,172,659,856),8800=>array(95,19,659,608),8801=>array(95,90,659,537),8802=>array(95,-24,659,650),8803=>array(95,0,659,629),8804=>array(95,0,659,582),8805=>array(95,0,659,582),8806=>array(96,-83,659,638),8807=>array(96,-83,659,638),8808=>array(96,-164,659,638),8809=>array(96,-164,659,638),8810=>array(65,22,877,609),8811=>array(65,22,877,609),8812=>array(77,-132,340,759),8813=>array(95,13,659,613),8814=>array(95,2,659,674),8815=>array(95,-47,659,625),8816=>array(95,-102,659,667),8817=>array(95,-102,659,667),8818=>array(95,-55,659,582),8819=>array(95,-40,659,582),8820=>array(95,-105,659,664),8821=>array(95,-102,659,667),8822=>array(91,-87,659,686),8823=>array(91,-87,659,686),8824=>array(91,-197,659,797),8825=>array(91,-197,659,797),8826=>array(95,-38,659,664),8827=>array(95,-38,659,664),8828=>array(95,-105,659,667),8829=>array(95,-105,659,667),8830=>array(95,-85,659,667),8831=>array(95,-85,659,667),8832=>array(95,-61,659,764),8833=>array(95,-138,659,687),8834=>array(89,80,665,546),8835=>array(89,80,665,546),8836=>array(89,-96,665,726),8837=>array(89,-100,665,722),8838=>array(83,0,659,613),8839=>array(95,0,671,613),8840=>array(83,-116,659,730),8841=>array(95,-116,671,730),8842=>array(83,-73,659,613),8843=>array(83,-73,659,613),8844=>array(116,0,543,579),8845=>array(116,0,543,579),8846=>array(116,2,543,582),8847=>array(95,0,659,568),8848=>array(95,0,659,568),8849=>array(95,-83,659,630),8850=>array(95,-83,659,630),8851=>array(95,0,607,626),8852=>array(95,0,607,626),8853=>array(82,-14,672,643),8854=>array(82,-14,672,643),8855=>array(82,-14,672,643),8856=>array(82,-14,672,643),8857=>array(82,-14,672,643),8858=>array(82,-14,672,643),8859=>array(82,-14,672,643),8860=>array(82,-14,672,643),8861=>array(82,-14,672,643),8862=>array(82,-14,672,643),8863=>array(82,-14,672,643),8864=>array(82,-14,672,643),8865=>array(82,-14,672,643),8866=>array(77,0,708,700),8867=>array(77,0,708,700),8868=>array(77,0,708,700),8869=>array(77,0,708,700),8870=>array(77,0,392,700),8871=>array(77,0,392,700),8872=>array(77,0,708,700),8873=>array(77,0,708,700),8874=>array(77,0,708,700),8875=>array(77,0,708,700),8876=>array(77,-40,708,740),8877=>array(77,-40,708,740),8878=>array(77,-40,708,740),8879=>array(77,-40,708,740),8880=>array(95,-43,652,670),8881=>array(95,-43,652,670),8882=>array(95,15,659,612),8883=>array(95,15,659,612),8884=>array(95,-48,659,674),8885=>array(95,-48,659,674),8886=>array(53,175,847,455),8887=>array(53,175,847,455),8888=>array(42,175,711,455),8889=>array(53,-47,701,674),8890=>array(104,0,364,701),8891=>array(88,0,571,740),8892=>array(88,0,571,740),8893=>array(88,0,571,740),8894=>array(124,0,630,562),8895=>array(124,0,630,562),8896=>array(-3,-192,741,719),8897=>array(-3,-192,741,719),8898=>array(62,-192,677,719),8899=>array(62,-192,677,719),8900=>array(2,-233,442,807),8901=>array(96,285,189,409),8902=>array(109,149,454,512),8903=>array(95,15,659,613),8904=>array(95,-30,805,657),8905=>array(95,-30,805,657),8906=>array(95,-30,805,657),8907=>array(95,-30,805,657),8908=>array(95,-30,805,657),8909=>array(95,172,659,494),8910=>array(43,0,616,579),8911=>array(43,0,616,579),8912=>array(83,-3,659,630),8913=>array(95,-3,671,630),8914=>array(92,0,662,663),8915=>array(92,-14,662,649),8916=>array(167,0,587,729),8917=>array(95,-100,659,729),8918=>array(95,46,659,581),8919=>array(95,46,659,581),8920=>array(65,22,1215,609),8921=>array(65,22,1215,609),8922=>array(95,-228,659,854),8923=>array(95,-228,659,854),8924=>array(95,0,659,582),8925=>array(95,0,659,582),8926=>array(95,-105,659,667),8927=>array(95,-105,659,667),8928=>array(95,-178,659,764),8929=>array(95,-178,659,764),8930=>array(95,-141,659,767),8931=>array(95,-141,659,767),8932=>array(95,-94,659,619),8933=>array(95,-94,659,619),8934=>array(95,-138,659,582),8935=>array(95,-138,659,582),8936=>array(95,-169,659,667),8937=>array(95,-171,663,667),8938=>array(95,-130,659,756),8939=>array(95,-130,659,756),8940=>array(95,-189,659,815),8941=>array(93,-189,657,815),8942=>array(403,-93,497,715),8943=>array(104,249,796,373),8944=>array(104,-93,796,715),8945=>array(104,-93,796,715),8946=>array(38,-10,862,710),8947=>array(77,-10,708,710),8948=>array(95,76,551,550),8949=>array(77,-10,708,910),8950=>array(77,-10,708,853),8951=>array(95,76,551,686),8952=>array(77,-144,708,710),8953=>array(77,-10,708,710),8954=>array(38,-10,862,710),8955=>array(77,-10,708,710),8956=>array(95,76,551,550),8957=>array(77,-10,708,853),8958=>array(95,76,551,686),8959=>array(95,0,689,720),8960=>array(56,-18,534,514),8961=>array(50,162,486,443),8962=>array(64,0,507,596),8963=>array(184,481,569,732),8964=>array(184,0,569,251),8965=>array(184,0,569,406),8966=>array(184,0,569,513),8967=>array(187,-31,386,791),8968=>array(-1,-132,342,760),8969=>array(115,-132,352,760),8970=>array(-1,-132,236,760),8971=>array(9,-132,352,760),8972=>array(332,-77,684,313),8973=>array(44,-77,396,313),8974=>array(332,243,684,634),8975=>array(44,243,396,634),8976=>array(95,140,659,421),8977=>array(2,126,459,634),8984=>array(108,0,792,759),8985=>array(95,140,659,421),8988=>array(78,425,422,760),8989=>array(124,425,422,760),8990=>array(65,-70,363,264),8991=>array(46,-70,391,264),8992=>array(189,-250,448,928),8993=>array(18,-237,277,942),8996=>array(68,227,969,575),8997=>array(68,0,969,575),8998=>array(68,0,1272,760),8999=>array(68,0,969,760),9000=>array(53,0,1247,729),9003=>array(0,0,1204,760),9004=>array(66,-91,720,748),9075=>array(73,0,273,547),9076=>array(82,-208,522,560),9077=>array(59,-14,692,547),9082=>array(49,-12,550,559),9085=>array(4,-228,678,102),9095=>array(68,0,987,748),9108=>array(15,0,771,727),9115=>array(77,-252,373,946),9116=>array(77,-252,163,942),9117=>array(77,-240,373,942),9118=>array(77,-252,373,946),9119=>array(287,-252,373,942),9120=>array(77,-240,373,942),9121=>array(77,-252,373,928),9122=>array(77,-252,163,942),9123=>array(77,-240,373,942),9124=>array(77,-252,373,928),9125=>array(287,-252,373,935),9126=>array(77,-240,373,935),9127=>array(296,-261,602,928),9128=>array(74,-252,378,940),9129=>array(296,-240,602,940),9130=>array(296,-256,378,943),9131=>array(74,-261,378,928),9132=>array(296,-252,602,940),9133=>array(74,-240,378,940),9134=>array(189,-250,277,942),9166=>array(24,65,703,729),9167=>array(82,0,769,596),9187=>array(66,-91,720,748),9189=>array(2,75,690,444),9192=>array(14,-129,498,294),9250=>array(-13,-14,505,760),9251=>array(23,-228,524,102),9312=>array(66,-10,740,738),9313=>array(66,-10,740,738),9314=>array(66,-10,740,738),9315=>array(66,-10,740,738),9316=>array(66,-10,740,738),9317=>array(66,-10,740,738),9318=>array(66,-10,740,738),9319=>array(66,-10,740,738),9320=>array(66,-10,740,738),9321=>array(66,-10,740,738),9472=>array(-9,242,551,326),9473=>array(-9,200,551,368),9474=>array(235,-302,306,973),9475=>array(200,-302,341,973),9476=>array(-9,242,551,326),9477=>array(-9,200,551,368),9478=>array(235,-302,306,973),9479=>array(200,-302,341,973),9480=>array(-9,242,551,326),9481=>array(-9,200,551,368),9482=>array(235,-302,306,973),9483=>array(200,-302,341,973),9484=>array(235,-302,551,326),9485=>array(235,-302,551,368),9486=>array(200,-302,551,326),9487=>array(200,-302,551,368),9488=>array(-9,-302,306,326),9489=>array(-9,-302,306,368),9490=>array(-9,-302,341,326),9491=>array(-9,-302,341,368),9492=>array(235,242,551,973),9493=>array(235,200,551,973),9494=>array(200,242,551,973),9495=>array(200,200,551,973),9496=>array(-9,242,306,973),9497=>array(-9,200,306,973),9498=>array(-9,242,341,973),9499=>array(-9,200,341,973),9500=>array(235,-302,551,973),9501=>array(235,-302,551,973),9502=>array(200,-302,551,973),9503=>array(200,-302,551,973),9504=>array(200,-302,551,973),9505=>array(200,-302,551,973),9506=>array(200,-302,551,973),9507=>array(200,-302,551,973),9508=>array(-9,-302,306,973),9509=>array(-9,-302,306,973),9510=>array(-9,-302,341,973),9511=>array(-9,-302,341,973),9512=>array(-9,-302,341,973),9513=>array(-9,-302,341,973),9514=>array(-9,-302,341,973),9515=>array(-9,-302,341,973),9516=>array(-9,-302,551,326),9517=>array(-9,-302,551,368),9518=>array(-9,-302,551,368),9519=>array(-9,-302,551,368),9520=>array(-9,-302,551,326),9521=>array(-9,-302,551,368),9522=>array(-9,-302,551,368),9523=>array(-9,-302,551,368),9524=>array(-9,242,551,973),9525=>array(-9,200,551,973),9526=>array(-9,200,551,973),9527=>array(-9,200,551,973),9528=>array(-9,242,551,973),9529=>array(-9,200,551,973),9530=>array(-9,200,551,973),9531=>array(-9,200,551,973),9532=>array(-9,-302,551,973),9533=>array(-9,-302,551,973),9534=>array(-9,-302,551,973),9535=>array(-9,-302,551,973),9536=>array(-9,-302,551,973),9537=>array(-9,-302,551,973),9538=>array(-9,-302,551,973),9539=>array(-9,-302,551,973),9540=>array(-9,-302,551,973),9541=>array(-9,-302,551,973),9542=>array(-9,-302,551,973),9543=>array(-9,-302,551,973),9544=>array(-9,-302,551,973),9545=>array(-9,-302,551,973),9546=>array(-9,-302,551,973),9547=>array(-9,-302,551,973),9548=>array(-9,242,551,326),9549=>array(-9,200,551,368),9550=>array(235,-302,306,973),9551=>array(200,-302,341,973),9552=>array(-9,158,551,410),9553=>array(165,-302,376,973),9554=>array(235,-302,551,410),9555=>array(165,-302,551,326),9556=>array(165,-302,551,410),9557=>array(-9,-302,306,410),9558=>array(-9,-302,376,326),9559=>array(-9,-302,376,410),9560=>array(235,158,551,973),9561=>array(165,242,551,973),9562=>array(165,158,551,973),9563=>array(-9,158,306,973),9564=>array(-9,242,376,973),9565=>array(-9,158,376,973),9566=>array(235,-302,551,973),9567=>array(165,-302,551,973),9568=>array(165,-302,551,973),9569=>array(-9,-302,306,973),9570=>array(-9,-302,376,973),9571=>array(-9,-302,376,973),9572=>array(-9,-302,551,410),9573=>array(-9,-302,551,326),9574=>array(-9,-302,551,410),9575=>array(-9,158,551,973),9576=>array(-9,242,551,973),9577=>array(-9,158,551,973),9578=>array(-9,-302,551,973),9579=>array(-9,-302,551,973),9580=>array(-9,-302,551,973),9581=>array(235,-302,551,326),9582=>array(-9,-302,306,326),9583=>array(-9,242,306,973),9584=>array(235,242,551,973),9585=>array(-48,-302,590,973),9586=>array(-48,-302,590,973),9587=>array(-48,-302,590,973),9588=>array(-9,242,280,326),9589=>array(235,284,306,973),9590=>array(279,242,551,326),9591=>array(235,-302,306,284),9592=>array(-9,200,280,368),9593=>array(200,284,341,973),9594=>array(279,200,551,368),9595=>array(200,-302,341,284),9596=>array(-9,200,551,368),9597=>array(200,-302,341,973),9598=>array(-9,200,551,368),9599=>array(200,-302,341,973),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,701,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-124,769,643),9633=>array(82,-124,769,643),9634=>array(82,-124,769,643),9635=>array(82,-124,769,643),9636=>array(82,-124,769,643),9637=>array(82,-124,769,643),9638=>array(82,-124,769,643),9639=>array(82,-124,769,643),9640=>array(82,-124,769,643),9641=>array(82,-124,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-124,690,643),9651=>array(2,-124,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-124,690,643),9655=>array(2,-124,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-124,690,643),9661=>array(2,-124,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-124,690,643),9665=>array(2,-124,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-124,690,643),9671=>array(2,-124,690,643),9672=>array(2,-124,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,630,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(2,260,690,645),9697=>array(2,-125,690,260),9698=>array(2,-124,690,643),9699=>array(2,-124,690,643),9700=>array(2,-124,690,643),9701=>array(2,-124,690,643),9702=>array(135,227,396,516),9703=>array(82,-124,769,643),9704=>array(82,-124,769,643),9705=>array(82,-124,769,643),9706=>array(82,-124,769,643),9707=>array(82,-124,769,643),9708=>array(2,-124,690,643),9709=>array(2,-124,690,643),9710=>array(2,-124,690,643),9711=>array(49,-250,958,770),9712=>array(82,-124,769,643),9713=>array(82,-124,769,643),9714=>array(82,-124,769,643),9715=>array(82,-124,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-124,690,643),9721=>array(2,-124,690,643),9722=>array(2,-124,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-124,690,643),9728=>array(75,0,731,729),9729=>array(45,-2,854,360),9730=>array(44,0,763,729),9731=>array(75,-0,732,927),9732=>array(57,0,750,880),9733=>array(58,-4,749,723),9734=>array(58,-4,749,723),9735=>array(75,2,441,729),9736=>array(75,0,732,731),9737=>array(75,0,732,730),9738=>array(55,0,745,727),9739=>array(55,0,745,723),9740=>array(55,-1,549,722),9741=>array(55,0,857,723),9742=>array(62,0,1060,729),9743=>array(63,0,1062,729),9744=>array(81,0,727,729),9745=>array(80,0,727,729),9746=>array(80,0,727,729),9747=>array(67,78,411,656),9748=>array(44,0,783,933),9749=>array(66,0,740,731),9750=>array(75,0,732,731),9751=>array(75,0,732,727),9752=>array(70,0,737,729),9753=>array(75,140,732,574),9754=>array(75,113,732,569),9755=>array(75,113,732,569),9756=>array(78,104,729,569),9757=>array(64,0,483,724),9758=>array(78,103,729,569),9759=>array(64,-3,483,720),9760=>array(55,0,752,730),9761=>array(75,0,732,730),9762=>array(75,0,732,730),9763=>array(44,0,763,730),9764=>array(44,-2,558,727),9765=>array(75,0,597,731),9766=>array(75,-1,510,731),9767=>array(75,0,631,911),9768=>array(75,0,416,730),9769=>array(75,-1,732,729),9770=>array(78,0,729,730),9771=>array(75,0,733,731),9772=>array(75,0,565,731),9773=>array(75,0,732,730),9774=>array(75,0,732,730),9775=>array(75,0,732,730),9776=>array(75,0,726,729),9777=>array(75,0,727,729),9778=>array(75,0,726,729),9779=>array(75,0,726,729),9780=>array(75,0,726,729),9781=>array(75,0,726,729),9782=>array(75,0,726,729),9783=>array(75,0,726,729),9784=>array(71,3,735,721),9785=>array(75,-73,864,804),9786=>array(75,-73,864,804),9787=>array(75,-73,864,804),9788=>array(75,0,732,730),9789=>array(322,0,733,730),9790=>array(75,0,485,730),9791=>array(77,-102,476,732),9792=>array(77,-125,583,731),9793=>array(77,-14,583,843),9794=>array(71,-14,748,720),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9800=>array(41,0,766,731),9801=>array(80,0,727,730),9802=>array(84,0,722,731),9803=>array(101,31,706,679),9804=>array(125,0,681,730),9805=>array(48,-180,759,730),9806=>array(75,52,732,653),9807=>array(30,-96,777,730),9808=>array(74,-0,732,730),9809=>array(84,0,722,730),9810=>array(77,153,729,579),9811=>array(141,0,666,730),9812=>array(88,0,719,730),9813=>array(99,0,708,730),9814=>array(149,-1,657,729),9815=>array(192,0,615,730),9816=>array(148,0,659,730),9817=>array(133,-0,673,730),9818=>array(88,0,719,730),9819=>array(99,0,708,730),9820=>array(149,-1,657,729),9821=>array(192,0,615,730),9822=>array(146,0,661,730),9823=>array(133,-0,673,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9832=>array(95,-1,712,729),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),9840=>array(75,0,598,731),9841=>array(58,0,631,731),9842=>array(75,0,732,709),9843=>array(68,16,738,731),9844=>array(68,16,738,731),9845=>array(68,16,738,731),9846=>array(68,16,738,731),9847=>array(68,16,738,731),9848=>array(68,16,738,731),9849=>array(68,16,738,731),9850=>array(68,16,738,731),9851=>array(75,0,731,704),9852=>array(75,0,733,731),9853=>array(75,0,733,731),9854=>array(75,0,733,731),9855=>array(134,1,672,731),9856=>array(66,0,717,725),9857=>array(66,0,717,725),9858=>array(66,0,717,725),9859=>array(66,0,717,725),9860=>array(66,0,717,725),9861=>array(66,0,717,725),9862=>array(75,0,726,724),9863=>array(75,0,727,724),9864=>array(75,0,727,724),9865=>array(75,0,727,724),9866=>array(75,0,726,98),9867=>array(75,0,726,98),9868=>array(75,0,726,411),9869=>array(75,0,726,411),9870=>array(75,0,726,411),9871=>array(75,0,726,411),9872=>array(71,3,571,724),9873=>array(71,3,571,724),9874=>array(47,0,753,724),9875=>array(54,-10,681,725),9876=>array(40,0,605,722),9877=>array(55,-10,428,725),9878=>array(37,-10,730,725),9879=>array(44,0,734,725),9880=>array(38,0,578,725),9881=>array(85,-17,722,727),9882=>array(33,-9,604,726),9883=>array(114,0,687,721),9884=>array(114,0,686,722),9888=>array(44,0,756,721),9889=>array(75,2,558,730),9890=>array(77,-125,827,731),9891=>array(71,-206,921,720),9892=>array(77,-186,998,856),9893=>array(77,-125,753,917),9894=>array(118,-14,654,869),9895=>array(91,-170,667,884),9896=>array(168,-14,585,869),9897=>array(4,133,746,596),9898=>array(168,133,585,597),9899=>array(168,133,585,597),9900=>array(224,194,531,536),9901=>array(158,194,597,536),9902=>array(37,169,717,560),9903=>array(4,194,750,536),9904=>array(92,237,681,540),9905=>array(190,42,564,698),9906=>array(77,-125,583,731),9907=>array(151,-125,582,731),9908=>array(77,-125,582,731),9909=>array(77,-125,582,731),9910=>array(53,-118,712,643),9911=>array(175,-104,536,710),9912=>array(142,-125,489,731),9920=>array(38,4,716,553),9921=>array(38,4,716,724),9922=>array(38,4,716,553),9923=>array(38,4,716,724),9954=>array(77,-14,583,843),9985=>array(9,190,723,635),9986=>array(38,141,706,588),9987=>array(9,94,723,539),9988=>array(32,119,742,613),9990=>array(38,-14,716,742),9991=>array(38,-14,716,742),9992=>array(53,21,704,708),9993=>array(58,107,696,622),9996=>array(191,0,505,742),9997=>array(19,83,722,678),9998=>array(80,75,652,710),9999=>array(23,198,738,530),10000=>array(80,75,652,710),10001=>array(39,185,681,544),10002=>array(61,209,681,520),10003=>array(135,97,601,630),10004=>array(104,87,649,631),10005=>array(114,72,641,657),10006=>array(77,31,677,698),10007=>array(105,-9,631,732),10008=>array(110,0,679,739),10009=>array(49,0,705,729),10010=>array(49,0,705,729),10011=>array(49,0,705,729),10012=>array(49,0,705,729),10013=>array(148,0,606,729),10014=>array(118,0,610,729),10015=>array(140,0,615,729),10016=>array(49,0,705,729),10017=>array(82,-13,672,744),10018=>array(37,-14,717,742),10019=>array(38,-12,716,742),10020=>array(36,-14,718,742),10021=>array(37,-13,717,743),10022=>array(38,-14,717,745),10023=>array(38,-14,717,745),10025=>array(21,-9,733,743),10026=>array(38,-14,716,742),10027=>array(21,-9,733,743),10028=>array(21,-9,733,743),10029=>array(21,-9,733,743),10030=>array(21,-9,733,743),10031=>array(21,-9,733,743),10032=>array(22,12,734,714),10033=>array(58,0,696,729),10034=>array(66,0,688,729),10035=>array(49,0,705,729),10036=>array(28,-14,708,742),10037=>array(37,-14,717,742),10038=>array(82,-14,672,742),10039=>array(37,-14,717,742),10040=>array(37,-14,717,742),10041=>array(37,-14,717,742),10042=>array(49,0,705,729),10043=>array(73,-14,681,742),10044=>array(73,-14,681,742),10045=>array(76,-14,678,742),10046=>array(71,-14,683,742),10047=>array(48,0,706,709),10048=>array(48,0,706,709),10049=>array(37,-14,717,742),10050=>array(38,-14,716,742),10051=>array(71,-14,683,742),10052=>array(80,0,674,729),10053=>array(68,0,686,729),10054=>array(57,2,696,729),10055=>array(70,-13,684,742),10056=>array(42,-13,712,730),10057=>array(42,-13,712,730),10058=>array(37,-13,717,743),10059=>array(37,-13,717,743),10061=>array(44,-10,762,738),10063=>array(53,-49,753,729),10064=>array(53,0,753,777),10065=>array(53,-49,753,729),10066=>array(53,0,753,777),10070=>array(75,-2,732,728),10072=>array(339,-240,415,760),10073=>array(302,-240,452,760),10074=>array(228,-240,527,760),10075=>array(76,395,237,729),10076=>array(53,395,214,729),10077=>array(76,395,432,729),10078=>array(53,395,408,729),10081=>array(140,-93,695,851),10082=>array(182,-17,572,742),10083=>array(146,-17,607,742),10084=>array(48,83,706,645),10085=>array(151,-1,656,729),10086=>array(55,21,652,702),10087=>array(70,169,684,564),10088=>array(176,-139,583,769),10089=>array(176,-139,583,769),10090=>array(237,-132,517,758),10091=>array(237,-132,517,758),10092=>array(193,-240,546,760),10093=>array(208,-240,561,760),10094=>array(127,-240,617,760),10095=>array(137,-240,626,760),10096=>array(149,-240,590,760),10097=>array(165,-240,605,760),10098=>array(311,-241,482,760),10099=>array(272,-241,443,760),10100=>array(157,-163,571,760),10101=>array(183,-163,597,760),10102=>array(66,-10,740,738),10103=>array(66,-10,740,738),10104=>array(66,-10,740,738),10105=>array(66,-10,740,738),10106=>array(66,-10,740,738),10107=>array(66,-10,740,738),10108=>array(66,-10,740,738),10109=>array(66,-10,740,738),10110=>array(66,-10,740,738),10111=>array(66,-10,740,738),10112=>array(4,-52,750,780),10113=>array(4,-52,750,780),10114=>array(4,-52,750,780),10115=>array(4,-52,750,780),10116=>array(4,-52,750,780),10117=>array(4,-52,750,780),10118=>array(4,-52,750,780),10119=>array(4,-52,750,780),10120=>array(4,-52,750,780),10121=>array(4,-52,750,780),10122=>array(4,-52,750,780),10123=>array(4,-52,750,780),10124=>array(4,-52,750,780),10125=>array(4,-52,750,780),10126=>array(4,-52,750,780),10127=>array(4,-52,750,780),10128=>array(4,-52,750,780),10129=>array(4,-52,750,780),10130=>array(4,-52,750,780),10131=>array(4,-52,750,780),10132=>array(51,75,710,552),10136=>array(110,55,614,614),10137=>array(51,100,710,527),10138=>array(110,13,614,572),10139=>array(51,129,710,498),10140=>array(51,57,688,570),10141=>array(51,100,710,527),10142=>array(51,100,710,527),10143=>array(51,100,710,527),10144=>array(51,100,710,527),10145=>array(51,65,730,562),10146=>array(100,94,710,533),10147=>array(100,94,710,533),10148=>array(100,-4,710,631),10149=>array(51,100,710,548),10150=>array(51,79,710,527),10151=>array(216,-7,545,634),10152=>array(51,100,710,527),10153=>array(51,75,688,552),10154=>array(51,75,688,552),10155=>array(19,12,715,586),10156=>array(19,12,715,586),10157=>array(122,0,697,574),10158=>array(122,0,697,574),10159=>array(56,49,719,574),10161=>array(56,49,719,574),10162=>array(139,-20,649,585),10163=>array(57,157,710,470),10164=>array(72,55,614,655),10165=>array(51,173,710,454),10166=>array(73,-29,614,572),10167=>array(73,55,614,655),10168=>array(51,172,710,455),10169=>array(73,-28,614,572),10170=>array(50,84,710,543),10171=>array(66,140,702,487),10172=>array(71,167,697,460),10173=>array(71,118,697,509),10174=>array(51,81,710,546),10181=>array(0,-163,339,769),10182=>array(-47,-163,355,769),10208=>array(2,-233,442,807),10214=>array(-0,-132,437,760),10215=>array(-1,-132,436,760),10216=>array(80,-132,357,759),10217=>array(-6,-132,271,759),10218=>array(80,-132,507,759),10219=>array(-6,-132,420,759),10224=>array(40,0,715,732),10225=>array(39,-3,714,729),10226=>array(-16,53,683,659),10227=>array(35,61,733,666),10228=>array(51,-14,998,643),10229=>array(44,100,1239,527),10230=>array(51,100,1247,527),10231=>array(44,100,1247,527),10232=>array(44,100,1239,527),10233=>array(51,100,1247,527),10234=>array(44,100,1247,527),10235=>array(44,100,1239,527),10236=>array(51,100,1247,527),10237=>array(44,100,1239,527),10238=>array(51,100,1247,527),10239=>array(51,100,1247,527),10241=>array(132,635,264,781),10242=>array(132,358,264,505),10243=>array(132,358,264,781),10244=>array(132,81,264,228),10245=>array(132,81,264,781),10246=>array(132,81,264,505),10247=>array(132,81,264,781),10248=>array(396,635,527,781),10249=>array(132,635,527,781),10250=>array(132,358,527,781),10251=>array(132,358,527,781),10252=>array(132,81,527,781),10253=>array(132,81,527,781),10254=>array(132,81,527,781),10255=>array(132,81,527,781),10256=>array(396,358,527,505),10257=>array(132,358,527,781),10258=>array(132,358,527,505),10259=>array(132,358,527,781),10260=>array(132,81,527,505),10261=>array(132,81,527,781),10262=>array(132,81,527,505),10263=>array(132,81,527,781),10264=>array(396,358,527,781),10265=>array(132,358,527,781),10266=>array(132,358,527,781),10267=>array(132,358,527,781),10268=>array(132,81,527,781),10269=>array(132,81,527,781),10270=>array(132,81,527,781),10271=>array(132,81,527,781),10272=>array(396,81,527,228),10273=>array(132,81,527,781),10274=>array(132,81,527,505),10275=>array(132,81,527,781),10276=>array(132,81,527,228),10277=>array(132,81,527,781),10278=>array(132,81,527,505),10279=>array(132,81,527,781),10280=>array(396,81,527,781),10281=>array(132,81,527,781),10282=>array(132,81,527,781),10283=>array(132,81,527,781),10284=>array(132,81,527,781),10285=>array(132,81,527,781),10286=>array(132,81,527,781),10287=>array(132,81,527,781),10288=>array(396,81,527,505),10289=>array(132,81,527,781),10290=>array(132,81,527,505),10291=>array(132,81,527,781),10292=>array(132,81,527,505),10293=>array(132,81,527,781),10294=>array(132,81,527,505),10295=>array(132,81,527,781),10296=>array(396,81,527,781),10297=>array(132,81,527,781),10298=>array(132,81,527,781),10299=>array(132,81,527,781),10300=>array(132,81,527,781),10301=>array(132,81,527,781),10302=>array(132,81,527,781),10303=>array(132,81,527,781),10304=>array(132,-195,264,-49),10305=>array(132,-195,264,781),10306=>array(132,-195,264,505),10307=>array(132,-195,264,781),10308=>array(132,-195,264,228),10309=>array(132,-195,264,781),10310=>array(132,-195,264,505),10311=>array(132,-195,264,781),10312=>array(132,-195,527,781),10313=>array(132,-195,527,781),10314=>array(132,-195,527,781),10315=>array(132,-195,527,781),10316=>array(132,-195,527,781),10317=>array(132,-195,527,781),10318=>array(132,-195,527,781),10319=>array(132,-195,527,781),10320=>array(132,-195,527,505),10321=>array(132,-195,527,781),10322=>array(132,-195,527,505),10323=>array(132,-195,527,781),10324=>array(132,-195,527,505),10325=>array(132,-195,527,781),10326=>array(132,-195,527,505),10327=>array(132,-195,527,781),10328=>array(132,-195,527,781),10329=>array(132,-195,527,781),10330=>array(132,-195,527,781),10331=>array(132,-195,527,781),10332=>array(132,-195,527,781),10333=>array(132,-195,527,781),10334=>array(132,-195,527,781),10335=>array(132,-195,527,781),10336=>array(132,-195,527,228),10337=>array(132,-195,527,781),10338=>array(132,-195,527,505),10339=>array(132,-195,527,781),10340=>array(132,-195,527,228),10341=>array(132,-195,527,781),10342=>array(132,-195,527,505),10343=>array(132,-195,527,781),10344=>array(132,-195,527,781),10345=>array(132,-195,527,781),10346=>array(132,-195,527,781),10347=>array(132,-195,527,781),10348=>array(132,-195,527,781),10349=>array(132,-195,527,781),10350=>array(132,-195,527,781),10351=>array(132,-195,527,781),10352=>array(132,-195,527,505),10353=>array(132,-195,527,781),10354=>array(132,-195,527,505),10355=>array(132,-195,527,781),10356=>array(132,-195,527,505),10357=>array(132,-195,527,781),10358=>array(132,-195,527,505),10359=>array(132,-195,527,781),10360=>array(132,-195,527,781),10361=>array(132,-195,527,781),10362=>array(132,-195,527,781),10363=>array(132,-195,527,781),10364=>array(132,-195,527,781),10365=>array(132,-195,527,781),10366=>array(132,-195,527,781),10367=>array(132,-195,527,781),10368=>array(396,-195,527,-49),10369=>array(132,-195,527,781),10370=>array(132,-195,527,505),10371=>array(132,-195,527,781),10372=>array(132,-195,527,228),10373=>array(132,-195,527,781),10374=>array(132,-195,527,505),10375=>array(132,-195,527,781),10376=>array(396,-195,527,781),10377=>array(132,-195,527,781),10378=>array(132,-195,527,781),10379=>array(132,-195,527,781),10380=>array(132,-195,527,781),10381=>array(132,-195,527,781),10382=>array(132,-195,527,781),10383=>array(132,-195,527,781),10384=>array(396,-195,527,505),10385=>array(132,-195,527,781),10386=>array(132,-195,527,505),10387=>array(132,-195,527,781),10388=>array(132,-195,527,505),10389=>array(132,-195,527,781),10390=>array(132,-195,527,505),10391=>array(132,-195,527,781),10392=>array(396,-195,527,781),10393=>array(132,-195,527,781),10394=>array(132,-195,527,781),10395=>array(132,-195,527,781),10396=>array(132,-195,527,781),10397=>array(132,-195,527,781),10398=>array(132,-195,527,781),10399=>array(132,-195,527,781),10400=>array(396,-195,527,228),10401=>array(132,-195,527,781),10402=>array(132,-195,527,505),10403=>array(132,-195,527,781),10404=>array(132,-195,527,228),10405=>array(132,-195,527,781),10406=>array(132,-195,527,505),10407=>array(132,-195,527,781),10408=>array(396,-195,527,781),10409=>array(132,-195,527,781),10410=>array(132,-195,527,781),10411=>array(132,-195,527,781),10412=>array(132,-195,527,781),10413=>array(132,-195,527,781),10414=>array(132,-195,527,781),10415=>array(132,-195,527,781),10416=>array(396,-195,527,505),10417=>array(132,-195,527,781),10418=>array(132,-195,527,505),10419=>array(132,-195,527,781),10420=>array(132,-195,527,505),10421=>array(132,-195,527,781),10422=>array(132,-195,527,505),10423=>array(132,-195,527,781),10424=>array(396,-195,527,781),10425=>array(132,-195,527,781),10426=>array(132,-195,527,781),10427=>array(132,-195,527,781),10428=>array(132,-195,527,781),10429=>array(132,-195,527,781),10430=>array(132,-195,527,781),10431=>array(132,-195,527,781),10432=>array(132,-195,527,-49),10433=>array(132,-195,527,781),10434=>array(132,-195,527,505),10435=>array(132,-195,527,781),10436=>array(132,-195,527,228),10437=>array(132,-195,527,781),10438=>array(132,-195,527,505),10439=>array(132,-195,527,781),10440=>array(132,-195,527,781),10441=>array(132,-195,527,781),10442=>array(132,-195,527,781),10443=>array(132,-195,527,781),10444=>array(132,-195,527,781),10445=>array(132,-195,527,781),10446=>array(132,-195,527,781),10447=>array(132,-195,527,781),10448=>array(132,-195,527,505),10449=>array(132,-195,527,781),10450=>array(132,-195,527,505),10451=>array(132,-195,527,781),10452=>array(132,-195,527,505),10453=>array(132,-195,527,781),10454=>array(132,-195,527,505),10455=>array(132,-195,527,781),10456=>array(132,-195,527,781),10457=>array(132,-195,527,781),10458=>array(132,-195,527,781),10459=>array(132,-195,527,781),10460=>array(132,-195,527,781),10461=>array(132,-195,527,781),10462=>array(132,-195,527,781),10463=>array(132,-195,527,781),10464=>array(132,-195,527,228),10465=>array(132,-195,527,781),10466=>array(132,-195,527,505),10467=>array(132,-195,527,781),10468=>array(132,-195,527,228),10469=>array(132,-195,527,781),10470=>array(132,-195,527,505),10471=>array(132,-195,527,781),10472=>array(132,-195,527,781),10473=>array(132,-195,527,781),10474=>array(132,-195,527,781),10475=>array(132,-195,527,781),10476=>array(132,-195,527,781),10477=>array(132,-195,527,781),10478=>array(132,-195,527,781),10479=>array(132,-195,527,781),10480=>array(132,-195,527,505),10481=>array(132,-195,527,781),10482=>array(132,-195,527,505),10483=>array(132,-195,527,781),10484=>array(132,-195,527,505),10485=>array(132,-195,527,781),10486=>array(132,-195,527,505),10487=>array(132,-195,527,781),10488=>array(132,-195,527,781),10489=>array(132,-195,527,781),10490=>array(132,-195,527,781),10491=>array(132,-195,527,781),10492=>array(132,-195,527,781),10493=>array(132,-195,527,781),10494=>array(132,-195,527,781),10495=>array(132,-195,527,781),10502=>array(44,100,703,527),10503=>array(51,100,710,527),10506=>array(112,0,642,732),10507=>array(112,-3,642,729),10560=>array(35,63,580,838),10561=>array(35,63,580,838),10627=>array(106,-163,629,760),10628=>array(31,-163,554,760),10702=>array(95,-226,659,747),10703=>array(95,15,805,612),10704=>array(95,15,805,612),10705=>array(95,-30,805,657),10706=>array(95,-30,805,657),10707=>array(95,-30,805,657),10708=>array(95,-30,805,657),10709=>array(95,-30,805,657),10731=>array(2,-233,442,807),10746=>array(95,0,659,627),10747=>array(95,0,659,627),10752=>array(25,-198,875,748),10753=>array(25,-198,875,748),10754=>array(25,-198,875,748),10764=>array(51,-212,1142,757),10765=>array(51,-212,418,757),10766=>array(51,-212,418,757),10767=>array(51,-212,418,757),10768=>array(51,-212,418,757),10769=>array(51,-212,470,757),10770=>array(51,-212,418,757),10771=>array(51,-212,418,757),10772=>array(51,-212,500,757),10773=>array(51,-212,418,757),10774=>array(51,-212,418,757),10775=>array(-29,-212,498,757),10776=>array(51,-212,418,757),10777=>array(51,-212,418,757),10778=>array(51,-212,418,757),10779=>array(51,-212,422,872),10780=>array(47,-327,417,757),10799=>array(123,31,631,596),10858=>array(95,228,659,552),10859=>array(95,78,659,552),10877=>array(95,-123,659,581),10878=>array(95,-123,659,581),10879=>array(95,-123,660,581),10880=>array(95,-123,659,581),10881=>array(95,-123,659,644),10882=>array(95,-123,659,644),10883=>array(95,-123,660,759),10884=>array(95,-123,659,756),10885=>array(95,-132,659,663),10886=>array(95,-132,659,663),10887=>array(95,-121,659,582),10888=>array(95,-121,659,582),10889=>array(95,-204,659,663),10890=>array(95,-204,659,663),10891=>array(95,-311,659,791),10892=>array(95,-311,659,791),10893=>array(95,-125,659,663),10894=>array(95,-125,659,663),10895=>array(95,-241,659,756),10896=>array(95,-241,659,756),10897=>array(95,-229,659,730),10898=>array(95,-229,659,730),10899=>array(95,-224,659,741),10900=>array(95,-224,659,741),10901=>array(95,-61,659,644),10902=>array(95,-61,659,644),10903=>array(95,-61,660,644),10904=>array(95,-61,659,644),10905=>array(96,-36,659,685),10906=>array(96,-36,659,685),10907=>array(95,-31,659,725),10908=>array(95,-31,659,725),10909=>array(95,8,659,645),10910=>array(95,23,659,645),10911=>array(95,-176,659,729),10912=>array(95,-176,659,729),10926=>array(95,50,659,601),10927=>array(95,-24,659,667),10928=>array(95,-24,659,667),10929=>array(95,-145,659,667),10930=>array(95,-145,659,667),10931=>array(95,-121,659,662),10932=>array(95,-121,659,662),10933=>array(95,-195,659,662),10934=>array(95,-195,659,662),10935=>array(95,-191,659,693),10936=>array(95,-191,659,693),10937=>array(95,-259,659,693),10938=>array(95,-259,659,693),11001=>array(95,-171,659,585),11002=>array(95,-171,659,585),11008=>array(79,-27,633,587),11009=>array(126,-27,680,587),11010=>array(79,25,633,640),11011=>array(126,25,680,640),11012=>array(24,65,710,562),11013=>array(24,65,703,562),11014=>array(154,0,601,754),11015=>array(154,-25,601,729),11016=>array(79,-27,633,587),11017=>array(126,-27,680,587),11018=>array(79,25,633,640),11019=>array(126,25,680,640),11020=>array(24,65,710,562),11021=>array(154,-25,601,754),11022=>array(51,-3,711,355),11023=>array(51,272,711,630),11024=>array(31,-3,691,355),11025=>array(31,272,691,630),11026=>array(82,-124,769,643),11027=>array(82,-124,769,643),11028=>array(82,-124,769,643),11029=>array(82,-124,769,643),11030=>array(2,-124,690,643),11031=>array(2,-124,690,643),11032=>array(2,-124,690,643),11033=>array(2,-124,690,643),11034=>array(82,-124,769,643),11039=>array(16,-26,767,767),11040=>array(16,-26,767,767),11041=>array(66,-91,720,748),11042=>array(66,-91,720,748),11043=>array(15,-35,771,692),11044=>array(49,-250,958,770),11091=>array(34,-47,749,788),11092=>array(34,-47,749,788),11360=>array(-12,0,448,729),11361=>array(-15,0,262,760),11362=>array(-28,0,448,729),11363=>array(23,0,538,729),11364=>array(51,-200,557,729),11365=>array(-18,-46,568,592),11366=>array(-91,-93,426,822),11367=>array(38,-157,666,729),11368=>array(27,-138,534,760),11369=>array(38,-157,664,729),11370=>array(27,-138,549,760),11371=>array(-10,-157,644,729),11372=>array(3,-138,494,547),11373=>array(50,-14,679,743),11374=>array(42,-200,770,729),11375=>array(134,0,736,729),11376=>array(-13,-14,625,743),11377=>array(123,0,731,560),11378=>array(157,0,1121,742),11379=>array(133,0,936,560),11380=>array(35,0,550,586),11381=>array(24,0,511,729),11382=>array(37,0,438,547),11383=>array(49,-12,543,551),11385=>array(-66,-13,321,760),11386=>array(50,-14,502,560),11387=>array(43,0,456,547),11388=>array(-58,-117,152,425),11389=>array(40,326,419,734),11390=>array(23,-242,562,742),11391=>array(-2,-242,651,729),11520=>array(55,-63,521,547),11521=>array(1,-235,539,546),11522=>array(15,-235,493,546),11523=>array(60,-10,573,807),11524=>array(41,-235,514,546),11525=>array(22,-236,806,546),11526=>array(53,-8,548,816),11527=>array(42,0,841,546),11528=>array(69,0,518,546),11529=>array(40,-235,531,816),11530=>array(22,0,843,546),11531=>array(45,-8,574,816),11532=>array(22,0,521,816),11533=>array(40,0,837,546),11534=>array(40,0,539,546),11535=>array(79,-235,721,816),11536=>array(40,0,823,816),11537=>array(40,0,529,816),11538=>array(31,-235,507,546),11539=>array(40,-235,836,661),11540=>array(55,-235,827,546),11541=>array(37,-235,738,816),11542=>array(22,0,521,546),11543=>array(40,-235,539,547),11544=>array(13,-235,534,546),11545=>array(24,-235,518,816),11546=>array(27,-235,503,547),11547=>array(55,-9,575,816),11548=>array(22,-235,813,547),11549=>array(-6,-235,505,546),11550=>array(33,-235,531,546),11551=>array(9,-235,531,567),11552=>array(22,0,826,546),11553=>array(36,-235,521,816),11554=>array(54,0,511,626),11555=>array(55,-235,536,816),11556=>array(40,-235,581,546),11557=>array(53,-8,789,816),11800=>array(33,-13,383,729),11807=>array(95,78,659,399),11810=>array(114,314,378,760),11811=>array(110,314,308,760),11812=>array(36,-132,234,314),11813=>array(-35,-132,230,314),11822=>array(99,0,470,742),19904=>array(75,-158,726,729),19905=>array(75,-158,726,729),19906=>array(75,-158,726,729),19907=>array(75,-158,726,729),19908=>array(75,-158,726,729),19909=>array(75,-158,726,729),19910=>array(75,-158,726,729),19911=>array(75,-158,726,729),19912=>array(75,-158,726,729),19913=>array(75,-158,727,729),19914=>array(75,-158,726,729),19915=>array(75,-158,726,729),19916=>array(75,-158,726,729),19917=>array(75,-158,726,729),19918=>array(75,-158,726,729),19919=>array(75,-158,726,729),19920=>array(75,-158,727,729),19921=>array(75,-158,726,729),19922=>array(75,-158,727,729),19923=>array(75,-158,726,729),19924=>array(75,-158,726,729),19925=>array(75,-158,726,729),19926=>array(75,-158,726,729),19927=>array(75,-158,726,729),19928=>array(75,-158,726,729),19929=>array(75,-158,726,729),19930=>array(75,-158,726,729),19931=>array(75,-158,727,729),19932=>array(75,-158,726,729),19933=>array(75,-158,726,729),19934=>array(75,-158,727,729),19935=>array(75,-158,726,729),19936=>array(75,-158,726,729),19937=>array(75,-158,726,729),19938=>array(75,-158,726,729),19939=>array(75,-158,726,729),19940=>array(75,-158,726,729),19941=>array(75,-158,727,729),19942=>array(75,-158,726,729),19943=>array(75,-158,726,729),19944=>array(75,-158,727,729),19945=>array(75,-158,726,729),19946=>array(75,-158,727,729),19947=>array(75,-158,726,729),19948=>array(75,-158,727,729),19949=>array(75,-158,726,729),19950=>array(75,-158,727,729),19951=>array(75,-158,726,729),19952=>array(75,-158,727,729),19953=>array(75,-158,726,729),19954=>array(75,-158,726,729),19955=>array(75,-158,726,729),19956=>array(75,-158,726,729),19957=>array(75,-158,727,729),19958=>array(75,-158,726,729),19959=>array(75,-158,726,729),19960=>array(75,-158,726,729),19961=>array(75,-158,727,729),19962=>array(75,-158,726,729),19963=>array(75,-158,727,729),19964=>array(75,-158,727,729),19965=>array(75,-158,726,729),19966=>array(75,-158,726,729),19967=>array(75,-158,726,729),42192=>array(24,0,563,729),42193=>array(24,0,541,729),42194=>array(5,0,519,729),42195=>array(24,0,650,729),42196=>array(39,0,608,729),42197=>array(-66,0,503,729),42198=>array(40,-14,653,742),42199=>array(24,0,650,729),42200=>array(-60,0,566,729),42201=>array(5,-14,500,729),42202=>array(38,-14,625,742),42203=>array(56,-14,644,742),42204=>array(-20,0,633,729),42205=>array(24,0,528,729),42206=>array(24,0,528,729),42207=>array(24,0,752,729),42208=>array(24,0,649,729),42209=>array(24,0,448,729),42210=>array(5,-14,543,742),42211=>array(24,0,541,729),42212=>array(86,0,601,729),42213=>array(-57,0,545,729),42214=>array(70,0,668,729),42215=>array(24,0,653,729),42216=>array(42,-14,655,742),42217=>array(23,0,518,743),42218=>array(86,0,918,729),42219=>array(-39,0,633,729),42220=>array(57,0,608,729),42221=>array(59,0,593,729),42222=>array(-48,0,554,729),42223=>array(134,0,736,729),42224=>array(24,0,567,729),42225=>array(1,0,544,729),42226=>array(24,0,242,729),42227=>array(36,-14,672,742),42228=>array(52,-14,642,729),42229=>array(13,0,595,743),42230=>array(53,0,476,729),42231=>array(50,0,666,729),42232=>array(63,0,207,155),42233=>array(37,-156,220,155),42234=>array(63,0,474,155),42235=>array(63,-156,487,155),42236=>array(5,-156,252,517),42237=>array(31,0,238,517),42238=>array(93,0,483,354),42239=>array(52,172,477,454),42564=>array(1,-14,522,742),42565=>array(9,-14,426,560),42566=>array(68,0,263,729),42567=>array(71,0,232,547),42572=>array(32,-14,1009,645),42573=>array(55,-14,862,471),42576=>array(75,0,902,729),42577=>array(62,0,779,547),42580=>array(41,-14,943,742),42581=>array(41,-14,721,560),42582=>array(29,0,825,729),42583=>array(37,-14,703,560),42594=>array(-33,-157,981,729),42595=>array(-13,-138,837,547),42596=>array(-27,0,971,729),42597=>array(-15,0,814,547),42598=>array(24,0,1072,729),42599=>array(34,0,911,547),42600=>array(36,-14,672,742),42601=>array(41,-14,510,560),42602=>array(50,-14,720,742),42603=>array(49,-14,592,560),42604=>array(50,-14,1172,742),42605=>array(49,-14,868,560),42606=>array(25,-208,766,743),42634=>array(39,-200,651,729),42635=>array(62,-208,568,547),42636=>array(39,0,608,729),42637=>array(62,0,546,547),42644=>array(107,0,601,729),42645=>array(15,0,485,760),42760=>array(141,0,409,668),42761=>array(114,0,409,668),42762=>array(88,0,409,668),42763=>array(62,0,409,668),42764=>array(35,0,409,668),42765=>array(35,0,409,668),42766=>array(35,0,382,668),42767=>array(35,0,356,668),42768=>array(35,0,330,668),42769=>array(35,0,303,668),42770=>array(35,0,409,668),42771=>array(35,0,382,668),42772=>array(35,0,356,668),42773=>array(35,0,330,668),42774=>array(35,0,303,668),42779=>array(62,326,305,736),42780=>array(27,324,271,734),42781=>array(50,326,178,734),42782=>array(50,326,178,734),42783=>array(50,0,178,408),42786=>array(27,0,336,729),42787=>array(34,0,302,547),42788=>array(49,224,416,742),42789=>array(49,42,416,560),42790=>array(42,-200,670,729),42791=>array(33,-208,504,760),42792=>array(65,-213,749,729),42793=>array(65,-213,600,702),42794=>array(109,-14,609,742),42795=>array(8,-199,452,561),42800=>array(34,0,441,547),42801=>array(10,-14,450,560),42802=>array(-57,0,1054,729),42803=>array(34,-14,812,560),42804=>array(-48,-14,1061,742),42805=>array(37,-14,859,560),42806=>array(-48,-14,1022,729),42807=>array(37,-14,856,560),42808=>array(-57,0,931,729),42809=>array(34,-14,757,560),42810=>array(-57,0,931,729),42811=>array(34,-14,757,560),42812=>array(-39,-208,938,729),42813=>array(51,-208,774,560),42814=>array(56,-14,644,742),42815=>array(2,-14,444,560),42816=>array(24,0,650,729),42817=>array(31,0,551,760),42822=>array(83,0,558,729),42823=>array(75,0,276,760),42824=>array(46,0,470,729),42825=>array(81,0,374,760),42826=>array(0,-14,730,742),42827=>array(0,-14,634,560),42830=>array(50,-14,1172,742),42831=>array(49,-14,868,560),42832=>array(-38,0,542,729),42833=>array(-75,-208,530,560),42834=>array(-4,0,660,729),42835=>array(-13,-208,656,560),42838=>array(40,-178,666,742),42839=>array(42,-208,538,560),42852=>array(24,0,521,729),42853=>array(-5,-208,528,760),42854=>array(-51,0,521,729),42855=>array(-77,-208,528,760),42880=>array(54,0,477,729),42881=>array(19,-208,232,560),42882=>array(-13,-208,597,742),42883=>array(-5,-208,510,560),42889=>array(46,0,230,517),42890=>array(55,161,293,380),42891=>array(121,235,288,729),42892=>array(63,458,185,729),42893=>array(98,0,593,729),42894=>array(37,-208,375,760),42896=>array(24,-157,649,729),42897=>array(31,-138,521,560),42912=>array(-8,-14,710,742),42913=>array(-7,-208,578,560),42914=>array(-6,0,650,729),42915=>array(-5,0,551,760),42916=>array(-8,0,681,729),42917=>array(-7,0,578,560),42918=>array(-6,0,632,729),42919=>array(-2,0,417,560),42920=>array(-5,-14,577,742),42921=>array(-4,-14,473,560),42922=>array(46,0,760,729),43002=>array(34,0,790,547),43003=>array(77,0,493,729),43004=>array(56,0,519,729),43005=>array(24,0,752,729),43006=>array(7,0,259,928),43007=>array(-34,0,1114,729),61184=>array(132,602,349,668),61185=>array(92,451,367,668),61186=>array(50,301,384,668),61187=>array(16,150,390,668),61188=>array(-19,0,389,668),61189=>array(110,451,340,668),61190=>array(105,451,323,518),61191=>array(66,301,340,518),61192=>array(23,150,357,518),61193=>array(-11,0,364,518),61194=>array(99,301,331,668),61195=>array(84,301,314,518),61196=>array(79,301,296,367),61197=>array(40,150,314,367),61198=>array(-3,0,331,367),61199=>array(95,150,311,668),61200=>array(73,150,305,518),61201=>array(58,150,288,367),61202=>array(53,150,270,217),61203=>array(13,0,288,217),61204=>array(93,0,288,668),61205=>array(68,0,285,518),61206=>array(46,0,278,367),61207=>array(31,0,261,217),61208=>array(27,0,244,66),61209=>array(35,0,212,668),62464=>array(83,-15,523,828),62465=>array(89,-15,520,828),62466=>array(85,-15,560,837),62467=>array(123,0,850,837),62468=>array(78,-15,586,837),62469=>array(80,-15,565,837),62470=>array(126,-15,584,837),62471=>array(86,-15,841,837),62472=>array(106,0,548,837),62473=>array(79,-15,591,828),62474=>array(137,0,1104,837),62475=>array(80,-15,581,837),62476=>array(86,-15,577,828),62477=>array(101,0,830,837),62478=>array(77,-15,563,828),62479=>array(87,-15,622,844),62480=>array(98,0,835,837),62481=>array(96,-15,518,828),62482=>array(96,-15,688,837),62483=>array(71,-15,579,837),62484=>array(132,-15,844,837),62485=>array(78,-15,619,828),62486=>array(114,-15,859,837),62487=>array(73,-15,618,829),62488=>array(81,-15,589,837),62489=>array(44,0,535,837),62490=>array(86,-15,621,828),62491=>array(85,-15,618,828),62492=>array(92,-15,629,837),62493=>array(78,-15,620,828),62494=>array(92,-15,527,828),62495=>array(30,-15,520,837),62496=>array(80,-15,571,837),62497=>array(82,-15,579,837),62498=>array(20,-79,566,836),62499=>array(77,-15,620,838),62500=>array(77,-15,626,837),62501=>array(75,-15,632,837),62502=>array(124,-15,911,837),62504=>array(54,-235,809,816),62505=>array(46,-230,714,853),62506=>array(69,-15,491,765),62507=>array(69,-15,483,777),62508=>array(69,-15,497,875),62509=>array(69,-15,489,818),62510=>array(69,-15,480,887),62511=>array(69,-15,497,809),62512=>array(25,-236,513,765),62513=>array(25,-236,516,799),62514=>array(25,-236,518,901),62515=>array(25,-236,514,809),62516=>array(84,0,504,765),62517=>array(84,0,516,799),62518=>array(84,0,514,809),62519=>array(86,-0,707,765),62520=>array(86,-0,707,777),62521=>array(86,-0,707,895),62522=>array(86,-0,707,799),62523=>array(86,-0,707,809),62524=>array(49,-236,501,765),62525=>array(49,-236,501,777),62526=>array(49,-236,525,904),62527=>array(49,-236,501,799),62528=>array(49,-236,510,809),62529=>array(49,-236,501,852),63173=>array(24,-14,518,760),64256=>array(61,0,733,760),64257=>array(61,0,577,760),64258=>array(61,0,577,760),64259=>array(61,0,882,760),64260=>array(61,0,882,760),64261=>array(48,0,642,760),64262=>array(2,-14,799,742),64275=>array(49,-14,1030,760),64276=>array(49,-14,1030,760),64277=>array(66,-208,1009,760),64278=>array(66,-208,1047,760),64279=>array(66,-208,1353,760),64285=>array(76,44,237,547),64286=>array(161,625,438,765),64287=>array(71,44,416,547),64288=>array(34,0,601,547),64289=>array(76,0,791,547),64290=>array(122,0,742,547),64291=>array(91,0,743,547),64292=>array(39,0,699,547),64293=>array(122,0,741,760),64294=>array(82,0,745,547),64295=>array(122,0,702,547),64296=>array(42,-4,705,547),64297=>array(143,272,721,627),64298=>array(106,0,714,698),64299=>array(106,0,695,698),64300=>array(106,0,717,698),64301=>array(106,0,695,698),64302=>array(82,-159,616,547),64303=>array(82,-193,616,547),64304=>array(82,-159,616,547),64305=>array(39,0,494,547),64306=>array(39,-5,345,547),64307=>array(122,0,556,547),64308=>array(91,0,555,547),64309=>array(88,0,334,547),64310=>array(75,0,422,547),64312=>array(127,-14,593,552),64313=>array(82,204,333,547),64314=>array(122,-208,458,547),64315=>array(39,0,481,547),64316=>array(122,0,539,729),64318=>array(67,0,582,555),64320=>array(39,0,340,547),64321=>array(130,-14,583,547),64323=>array(97,-208,496,547),64324=>array(82,0,561,547),64326=>array(39,0,546,547),64327=>array(56,-208,666,546),64328=>array(122,0,484,547),64329=>array(106,0,695,547),64330=>array(9,-4,571,547),64331=>array(82,0,277,698),64332=>array(39,0,494,698),64333=>array(39,0,481,698),64334=>array(82,0,561,698),64335=>array(75,0,610,760),65056=>array(-270,752,163,929),65057=>array(149,752,543,929),65058=>array(-187,756,151,894),65059=>array(137,756,476,894),65533=>array(86,-84,983,912),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>286,33=>360,34=>414,35=>754,36=>572,37=>855,38=>702,39=>247,40=>351,41=>351,42=>450,43=>754,44=>286,45=>325,46=>286,47=>303,48=>572,49=>572,50=>572,51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754,61=>754,62=>754,63=>478,64=>900,65=>615,66=>617,67=>628,68=>693,69=>568,70=>518,71=>697,72=>677,73=>265,74=>265,75=>590,76=>501,77=>776,78=>673,79=>708,80=>542,81=>708,82=>625,83=>571,84=>549,85=>659,86=>615,87=>890,88=>616,89=>549,90=>616,91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>551,98=>571,99=>495,100=>571,101=>554,102=>316,103=>571,104=>570,105=>250,106=>250,107=>521,108=>250,109=>876,110=>570,111=>550,112=>571,113=>571,114=>370,115=>469,116=>353,117=>570,118=>532,119=>736,120=>532,121=>532,122=>472,123=>572,124=>303,125=>572,126=>754,160=>286,161=>360,162=>572,163=>572,164=>572,165=>572,166=>303,167=>450,168=>450,169=>900,170=>424,171=>555,172=>754,173=>325,174=>900,175=>450,176=>450,177=>754,178=>360,179=>360,180=>450,181=>572,182=>572,183=>286,184=>450,185=>360,186=>424,187=>555,188=>872,189=>872,190=>872,191=>478,192=>615,193=>615,194=>615,195=>615,196=>615,197=>615,198=>876,199=>628,200=>568,201=>568,202=>568,203=>568,204=>265,205=>265,206=>265,207=>265,208=>697,209=>673,210=>708,211=>708,212=>708,213=>708,214=>708,215=>754,216=>708,217=>659,218=>659,219=>659,220=>659,221=>549,222=>547,223=>567,224=>551,225=>551,226=>551,227=>551,228=>551,229=>551,230=>896,231=>495,232=>554,233=>554,234=>554,235=>554,236=>250,237=>250,238=>250,239=>250,240=>550,241=>570,242=>550,243=>550,244=>550,245=>550,246=>550,247=>754,248=>550,249=>570,250=>570,251=>570,252=>570,253=>532,254=>571,255=>532,256=>615,257=>551,258=>615,259=>551,260=>615,261=>551,262=>628,263=>495,264=>628,265=>495,266=>628,267=>495,268=>628,269=>495,270=>693,271=>571,272=>697,273=>571,274=>568,275=>554,276=>568,277=>554,278=>568,279=>554,280=>568,281=>554,282=>568,283=>554,284=>697,285=>571,286=>697,287=>571,288=>697,289=>571,290=>697,291=>571,292=>677,293=>570,294=>824,295=>625,296=>265,297=>250,298=>265,299=>250,300=>265,301=>250,302=>265,303=>250,304=>265,305=>250,306=>531,307=>500,308=>265,309=>250,310=>590,311=>521,312=>521,313=>501,314=>250,315=>501,316=>250,317=>501,318=>250,319=>501,320=>250,321=>505,322=>258,323=>673,324=>570,325=>673,326=>570,327=>673,328=>570,329=>732,330=>673,331=>570,332=>708,333=>550,334=>708,335=>550,336=>708,337=>550,338=>962,339=>925,340=>625,341=>370,342=>625,343=>370,344=>625,345=>370,346=>571,347=>469,348=>571,349=>469,350=>571,351=>469,352=>571,353=>469,354=>549,355=>353,356=>549,357=>353,358=>549,359=>353,360=>659,361=>570,362=>659,363=>570,364=>659,365=>570,366=>659,367=>570,368=>659,369=>570,370=>659,371=>570,372=>890,373=>736,374=>549,375=>532,376=>549,377=>616,378=>472,379=>616,380=>472,381=>616,382=>472,383=>316,384=>571,385=>661,386=>617,387=>571,388=>617,389=>571,390=>633,391=>628,392=>495,393=>697,394=>737,395=>617,396=>571,397=>550,398=>568,399=>708,400=>553,401=>518,402=>316,403=>697,404=>618,405=>885,406=>318,407=>265,408=>671,409=>521,410=>250,411=>532,412=>876,413=>673,414=>570,415=>708,416=>822,417=>550,418=>844,419=>663,420=>586,421=>571,422=>625,423=>571,424=>469,425=>568,426=>302,427=>353,428=>549,429=>353,430=>549,431=>754,432=>570,433=>688,434=>648,435=>669,436=>657,437=>616,438=>472,439=>599,440=>599,441=>520,442=>472,443=>572,444=>599,445=>520,446=>459,447=>571,448=>265,449=>443,450=>413,451=>266,452=>1310,453=>1165,454=>1043,455=>767,456=>751,457=>500,458=>938,459=>923,460=>820,461=>615,462=>551,463=>265,464=>250,465=>708,466=>550,467=>659,468=>570,469=>659,470=>570,471=>659,472=>570,473=>659,474=>570,475=>659,476=>570,477=>554,478=>615,479=>551,480=>615,481=>551,482=>876,483=>896,484=>697,485=>571,486=>697,487=>571,488=>590,489=>521,490=>708,491=>550,492=>708,493=>550,494=>599,495=>472,496=>250,497=>1310,498=>1165,499=>1043,500=>697,501=>571,502=>1001,503=>614,504=>673,505=>570,506=>615,507=>551,508=>876,509=>896,510=>708,511=>550,512=>615,513=>551,514=>615,515=>551,516=>568,517=>554,518=>568,519=>554,520=>265,521=>250,522=>265,523=>250,524=>708,525=>550,526=>708,527=>550,528=>625,529=>370,530=>625,531=>370,532=>659,533=>570,534=>659,535=>570,536=>571,537=>469,538=>549,539=>353,540=>564,541=>469,542=>677,543=>570,544=>662,545=>754,546=>628,547=>549,548=>616,549=>472,550=>615,551=>551,552=>568,553=>554,554=>708,555=>550,556=>708,557=>550,558=>708,559=>550,560=>708,561=>550,562=>549,563=>532,564=>427,565=>758,566=>429,567=>250,568=>898,569=>898,570=>615,571=>628,572=>495,573=>501,574=>549,575=>469,576=>472,577=>542,578=>431,579=>617,580=>659,581=>615,582=>568,583=>554,584=>265,585=>250,586=>703,587=>571,588=>625,589=>370,590=>549,591=>532,592=>551,593=>571,594=>571,595=>571,596=>495,597=>495,598=>571,599=>654,600=>554,601=>554,602=>759,603=>490,604=>490,605=>698,606=>598,607=>293,608=>626,609=>571,610=>566,611=>536,612=>536,613=>570,614=>570,615=>570,616=>334,617=>348,618=>334,619=>356,620=>438,621=>250,622=>635,623=>876,624=>876,625=>876,626=>581,627=>578,628=>570,629=>550,630=>772,631=>655,632=>593,633=>422,634=>422,635=>422,636=>422,637=>422,638=>477,639=>477,640=>541,641=>541,642=>469,643=>302,644=>302,645=>415,646=>302,647=>353,648=>353,649=>570,650=>556,651=>538,652=>532,653=>736,654=>532,655=>549,656=>472,657=>472,658=>520,659=>520,660=>459,661=>459,662=>459,663=>459,664=>708,665=>521,666=>598,667=>637,668=>588,669=>263,670=>600,671=>456,672=>654,673=>459,674=>459,675=>913,676=>952,677=>911,678=>747,679=>549,680=>700,681=>763,682=>635,683=>589,684=>463,685=>463,686=>513,687=>597,688=>359,689=>359,690=>157,691=>233,692=>266,693=>266,694=>341,695=>463,696=>335,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>333,705=>333,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>247,713=>450,714=>450,715=>450,716=>247,717=>450,718=>450,719=>450,720=>303,721=>303,722=>276,723=>276,724=>450,725=>450,726=>351,727=>286,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>284,735=>450,736=>383,737=>149,738=>335,739=>399,740=>333,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450,749=>450,750=>466,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>589,881=>511,882=>775,883=>583,884=>250,885=>250,886=>673,887=>584,890=>450,891=>494,892=>495,893=>494,894=>303,900=>450,901=>450,902=>615,903=>286,904=>690,905=>813,906=>391,908=>755,910=>773,911=>814,912=>304,913=>615,914=>617,915=>501,916=>615,917=>568,918=>616,919=>677,920=>708,921=>265,922=>590,923=>615,924=>776,925=>673,926=>568,927=>708,928=>677,929=>542,931=>568,932=>549,933=>549,934=>708,935=>616,936=>708,937=>688,938=>265,939=>549,940=>593,941=>486,942=>570,943=>304,944=>521,945=>593,946=>574,947=>532,948=>550,949=>486,950=>489,951=>570,952=>550,953=>304,954=>530,955=>532,956=>572,957=>502,958=>501,959=>550,960=>542,961=>571,962=>528,963=>570,964=>542,965=>521,966=>593,967=>532,968=>593,969=>753,970=>304,971=>521,972=>550,973=>521,974=>753,975=>590,976=>553,977=>557,978=>628,979=>758,980=>628,981=>593,982=>753,983=>597,984=>708,985=>550,986=>583,987=>528,988=>518,989=>413,990=>593,991=>593,992=>778,993=>564,994=>840,995=>753,996=>682,997=>593,998=>712,999=>553,1000=>618,1001=>546,1002=>690,1003=>563,1004=>629,1005=>550,1006=>549,1007=>482,1008=>597,1009=>571,1010=>495,1011=>250,1012=>708,1013=>554,1014=>554,1015=>547,1016=>571,1017=>628,1018=>776,1019=>585,1020=>571,1021=>633,1022=>628,1023=>633,1024=>568,1025=>568,1026=>708,1027=>501,1028=>628,1029=>571,1030=>265,1031=>265,1032=>265,1033=>984,1034=>940,1035=>708,1036=>639,1037=>673,1038=>548,1039=>677,1040=>615,1041=>617,1042=>617,1043=>501,1044=>703,1045=>568,1046=>969,1047=>577,1048=>673,1049=>673,1050=>639,1051=>677,1052=>776,1053=>677,1054=>708,1055=>677,1056=>542,1057=>628,1058=>549,1059=>548,1060=>774,1061=>616,1062=>699,1063=>617,1064=>962,1065=>984,1066=>749,1067=>736,1068=>617,1069=>628,1070=>971,1071=>625,1072=>551,1073=>555,1074=>530,1075=>473,1076=>622,1077=>554,1078=>811,1079=>479,1080=>584,1081=>584,1082=>543,1083=>575,1084=>679,1085=>588,1086=>550,1087=>588,1088=>571,1089=>495,1090=>524,1091=>532,1092=>769,1093=>532,1094=>612,1095=>532,1096=>823,1097=>848,1098=>636,1099=>710,1100=>530,1101=>494,1102=>757,1103=>541,1104=>554,1105=>554,1106=>563,1107=>473,1108=>494,1109=>469,1110=>250,1111=>250,1112=>250,1113=>812,1114=>809,1115=>586,1116=>543,1117=>584,1118=>532,1119=>588,1120=>840,1121=>753,1122=>693,1123=>604,1124=>848,1125=>674,1126=>791,1127=>705,1128=>1043,1129=>901,1130=>708,1131=>550,1132=>924,1133=>742,1134=>572,1135=>486,1136=>771,1137=>789,1138=>708,1139=>550,1140=>703,1141=>598,1142=>703,1143=>598,1144=>893,1145=>813,1146=>857,1147=>682,1148=>1062,1149=>925,1150=>840,1151=>753,1152=>628,1153=>495,1154=>452,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>376,1161=>376,1162=>673,1163=>591,1164=>617,1165=>530,1166=>542,1167=>571,1168=>549,1169=>473,1170=>607,1171=>500,1172=>501,1173=>441,1174=>969,1175=>811,1176=>577,1177=>479,1178=>639,1179=>543,1180=>639,1181=>543,1182=>639,1183=>543,1184=>771,1185=>748,1186=>677,1187=>594,1188=>913,1189=>789,1190=>1002,1191=>855,1192=>801,1193=>636,1194=>628,1195=>495,1196=>549,1197=>476,1198=>549,1199=>532,1200=>549,1201=>532,1202=>616,1203=>532,1204=>840,1205=>726,1206=>617,1207=>532,1208=>617,1209=>532,1210=>617,1211=>570,1212=>836,1213=>658,1214=>836,1215=>658,1216=>265,1217=>969,1218=>811,1219=>589,1220=>543,1221=>677,1222=>575,1223=>677,1224=>594,1225=>677,1226=>594,1227=>617,1228=>532,1229=>776,1230=>679,1231=>250,1232=>615,1233=>551,1234=>615,1235=>551,1236=>876,1237=>896,1238=>568,1239=>554,1240=>708,1241=>554,1242=>708,1243=>554,1244=>969,1245=>811,1246=>577,1247=>479,1248=>599,1249=>520,1250=>673,1251=>584,1252=>673,1253=>584,1254=>708,1255=>550,1256=>708,1257=>550,1258=>708,1259=>550,1260=>628,1261=>494,1262=>548,1263=>532,1264=>548,1265=>532,1266=>548,1267=>532,1268=>617,1269=>532,1270=>501,1271=>442,1272=>736,1273=>710,1274=>607,1275=>500,1276=>616,1277=>532,1278=>616,1279=>532,1280=>617,1281=>530,1282=>905,1283=>807,1284=>877,1285=>782,1286=>611,1287=>529,1288=>964,1289=>861,1290=>1001,1291=>870,1292=>697,1293=>593,1294=>695,1295=>640,1296=>553,1297=>486,1298=>677,1299=>575,1300=>1076,1301=>896,1302=>810,1303=>780,1304=>927,1305=>890,1306=>708,1307=>571,1308=>890,1309=>736,1310=>639,1311=>543,1312=>1002,1313=>848,1314=>1002,1315=>854,1316=>713,1317=>614,1329=>689,1330=>659,1331=>678,1332=>678,1333=>659,1334=>694,1335=>576,1336=>659,1337=>773,1338=>678,1339=>622,1340=>479,1341=>830,1342=>777,1343=>659,1344=>644,1345=>689,1346=>678,1347=>690,1348=>712,1349=>655,1350=>656,1351=>681,1352=>659,1353=>642,1354=>720,1355=>691,1356=>712,1357=>659,1358=>678,1359=>634,1360=>624,1361=>669,1362=>483,1363=>729,1364=>681,1365=>708,1366=>711,1369=>276,1370=>286,1371=>211,1372=>325,1373=>214,1374=>365,1375=>450,1377=>876,1378=>570,1379=>592,1380=>597,1381=>570,1382=>571,1383=>463,1384=>570,1385=>664,1386=>592,1387=>570,1388=>244,1389=>882,1390=>560,1391=>570,1392=>570,1393=>547,1394=>571,1395=>566,1396=>570,1397=>250,1398=>570,1399=>448,1400=>570,1401=>364,1402=>876,1403=>504,1404=>583,1405=>570,1406=>570,1407=>876,1408=>570,1409=>571,1410=>391,1411=>876,1412=>572,1413=>550,1414=>725,1415=>730,1417=>303,1418=>325,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>325,1471=>0,1472=>265,1473=>0,1474=>0,1475=>265,1478=>410,1479=>0,1488=>602,1489=>520,1490=>371,1491=>491,1492=>588,1493=>245,1494=>312,1495=>588,1496=>583,1497=>201,1498=>483,1499=>476,1500=>511,1501=>597,1502=>611,1503=>245,1504=>360,1505=>584,1506=>563,1507=>576,1508=>562,1509=>485,1510=>534,1511=>638,1512=>508,1513=>637,1514=>591,1520=>423,1521=>409,1522=>423,1523=>374,1524=>580,3647=>572,3713=>603,3714=>615,3716=>619,3719=>434,3720=>565,3722=>615,3725=>619,3732=>577,3733=>577,3734=>605,3735=>589,3737=>576,3738=>533,3739=>533,3740=>670,3741=>690,3742=>618,3743=>618,3745=>631,3746=>619,3747=>615,3749=>584,3751=>569,3754=>633,3755=>737,3757=>569,3758=>615,3759=>708,3760=>569,3761=>0,3762=>485,3763=>485,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>597,3776=>324,3777=>611,3778=>414,3779=>492,3780=>442,3782=>606,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>572,3793=>576,3794=>576,3795=>603,3796=>563,3797=>563,3798=>633,3799=>603,3800=>606,3801=>609,3804=>925,3805=>925,4256=>787,4257=>660,4258=>611,4259=>751,4260=>554,4261=>690,4262=>678,4263=>822,4264=>408,4265=>558,4266=>758,4267=>794,4268=>562,4269=>769,4270=>703,4271=>566,4272=>820,4273=>558,4274=>558,4275=>769,4276=>779,4277=>651,4278=>567,4279=>558,4280=>563,4281=>558,4282=>736,4283=>786,4284=>554,4285=>561,4286=>563,4287=>652,4288=>760,4289=>536,4290=>620,4291=>536,4292=>534,4293=>664,4304=>457,4305=>466,4306=>523,4307=>736,4308=>457,4309=>461,4310=>450,4311=>721,4312=>466,4313=>459,4314=>958,4315=>470,4316=>470,4317=>708,4318=>457,4319=>466,4320=>716,4321=>470,4322=>589,4323=>470,4324=>743,4325=>461,4326=>708,4327=>466,4328=>466,4329=>470,4330=>514,4331=>470,4332=>466,4333=>468,4334=>470,4335=>409,4336=>457,4337=>466,4338=>457,4339=>457,4340=>466,4341=>499,4342=>745,4343=>497,4344=>457,4345=>514,4346=>457,4347=>403,4348=>291,5121=>615,5122=>615,5123=>615,5124=>615,5125=>692,5126=>692,5127=>692,5129=>692,5130=>692,5131=>692,5132=>751,5133=>751,5134=>751,5135=>751,5136=>751,5137=>751,5138=>870,5139=>906,5140=>870,5141=>906,5142=>692,5143=>870,5144=>906,5145=>870,5146=>906,5147=>692,5149=>230,5150=>488,5151=>381,5152=>381,5153=>350,5154=>350,5155=>354,5156=>350,5157=>419,5158=>347,5159=>230,5160=>350,5161=>350,5162=>350,5163=>980,5164=>817,5165=>857,5166=>1005,5167=>615,5168=>615,5169=>615,5170=>615,5171=>656,5172=>656,5173=>656,5175=>656,5176=>656,5177=>656,5178=>751,5179=>615,5180=>751,5181=>751,5182=>751,5183=>751,5184=>870,5185=>906,5186=>870,5187=>906,5188=>870,5189=>906,5190=>870,5191=>906,5192=>656,5193=>457,5194=>172,5196=>659,5197=>659,5198=>659,5199=>659,5200=>657,5201=>657,5202=>657,5204=>657,5205=>657,5206=>657,5207=>829,5208=>800,5209=>829,5210=>800,5211=>829,5212=>800,5213=>835,5214=>810,5215=>835,5216=>810,5217=>853,5218=>810,5219=>853,5220=>810,5221=>853,5222=>391,5223=>790,5224=>790,5225=>779,5226=>801,5227=>565,5228=>565,5229=>565,5230=>565,5231=>565,5232=>565,5233=>565,5234=>565,5235=>565,5236=>773,5237=>693,5238=>733,5239=>734,5240=>733,5241=>734,5242=>773,5243=>693,5244=>773,5245=>693,5246=>733,5247=>734,5248=>733,5249=>734,5250=>733,5251=>366,5252=>366,5253=>675,5254=>697,5255=>675,5256=>697,5257=>565,5258=>565,5259=>565,5260=>565,5261=>565,5262=>565,5263=>565,5264=>565,5265=>565,5266=>773,5267=>693,5268=>733,5269=>734,5270=>733,5271=>734,5272=>773,5273=>693,5274=>773,5275=>693,5276=>733,5277=>734,5278=>733,5279=>734,5280=>733,5281=>391,5282=>391,5283=>549,5284=>501,5285=>501,5286=>501,5287=>549,5288=>549,5289=>549,5290=>501,5291=>501,5292=>674,5293=>691,5294=>671,5295=>687,5296=>671,5297=>687,5298=>674,5299=>691,5300=>674,5301=>691,5302=>671,5303=>687,5304=>671,5305=>687,5306=>671,5307=>347,5308=>457,5309=>347,5312=>766,5313=>766,5314=>766,5315=>766,5316=>766,5317=>766,5318=>766,5319=>766,5320=>766,5321=>962,5322=>931,5323=>953,5324=>766,5325=>953,5326=>766,5327=>766,5328=>540,5329=>407,5330=>540,5331=>766,5332=>766,5333=>766,5334=>766,5335=>766,5336=>766,5337=>766,5338=>766,5339=>766,5340=>962,5341=>931,5342=>953,5343=>927,5344=>953,5345=>927,5346=>962,5347=>931,5348=>962,5349=>931,5350=>975,5351=>927,5352=>975,5353=>927,5354=>540,5356=>656,5357=>542,5358=>542,5359=>542,5360=>542,5361=>542,5362=>542,5363=>542,5364=>542,5365=>542,5366=>751,5367=>678,5368=>712,5369=>694,5370=>712,5371=>694,5372=>751,5373=>678,5374=>751,5375=>678,5376=>712,5377=>694,5378=>712,5379=>694,5380=>712,5381=>376,5382=>378,5383=>376,5392=>641,5393=>641,5394=>641,5395=>802,5396=>802,5397=>802,5398=>802,5399=>818,5400=>785,5401=>818,5402=>785,5403=>818,5404=>785,5405=>1026,5406=>989,5407=>1026,5408=>989,5409=>1026,5410=>989,5411=>1026,5412=>989,5413=>576,5414=>564,5415=>564,5416=>564,5417=>564,5418=>564,5419=>564,5420=>564,5421=>564,5422=>564,5423=>760,5424=>703,5425=>734,5426=>736,5427=>734,5428=>736,5429=>760,5430=>703,5431=>760,5432=>703,5433=>734,5434=>736,5435=>734,5436=>736,5437=>734,5438=>376,5440=>350,5441=>436,5442=>824,5443=>824,5444=>776,5445=>824,5446=>776,5447=>776,5448=>542,5449=>542,5450=>542,5451=>542,5452=>542,5453=>542,5454=>751,5455=>678,5456=>376,5458=>656,5459=>615,5460=>615,5461=>615,5462=>615,5463=>653,5464=>653,5465=>653,5466=>653,5467=>831,5468=>906,5469=>457,5470=>659,5471=>659,5472=>659,5473=>659,5474=>659,5475=>659,5476=>657,5477=>657,5478=>657,5479=>657,5480=>853,5481=>810,5482=>457,5492=>747,5493=>747,5494=>747,5495=>747,5496=>747,5497=>747,5498=>747,5499=>507,5500=>677,5501=>436,5502=>942,5503=>942,5504=>942,5505=>942,5506=>942,5507=>942,5508=>942,5509=>743,5514=>747,5515=>747,5516=>747,5517=>747,5518=>1133,5519=>1133,5520=>1133,5521=>901,5522=>901,5523=>1133,5524=>1133,5525=>629,5526=>965,5536=>766,5537=>766,5538=>719,5539=>719,5540=>719,5541=>719,5542=>540,5543=>579,5544=>579,5545=>579,5546=>579,5547=>579,5548=>579,5549=>579,5550=>376,5551=>565,5598=>693,5601=>693,5702=>421,5703=>421,5742=>399,5743=>942,5744=>1178,5745=>1469,5746=>1469,5747=>1237,5748=>1237,5749=>1469,5750=>1469,7424=>532,7425=>646,7426=>883,7427=>527,7428=>495,7429=>544,7430=>544,7431=>441,7432=>486,7433=>250,7434=>355,7435=>521,7436=>524,7437=>679,7438=>584,7439=>550,7440=>495,7441=>615,7442=>615,7443=>615,7444=>920,7446=>550,7447=>550,7448=>472,7449=>541,7450=>541,7451=>524,7452=>517,7453=>663,7454=>853,7455=>574,7456=>532,7457=>736,7458=>472,7459=>473,7462=>524,7463=>532,7464=>507,7465=>472,7466=>531,7467=>575,7468=>387,7469=>552,7470=>389,7472=>436,7473=>358,7474=>358,7475=>439,7476=>426,7477=>167,7478=>167,7479=>372,7480=>315,7481=>489,7482=>424,7483=>424,7484=>446,7485=>396,7486=>342,7487=>394,7488=>346,7489=>415,7490=>560,7491=>352,7492=>352,7493=>365,7494=>583,7495=>385,7496=>365,7497=>375,7498=>375,7499=>324,7500=>323,7501=>365,7502=>161,7503=>383,7504=>561,7505=>368,7506=>372,7507=>333,7508=>372,7509=>372,7510=>385,7511=>265,7512=>364,7513=>422,7514=>561,7515=>375,7517=>361,7518=>335,7519=>347,7520=>374,7521=>327,7522=>161,7523=>233,7524=>364,7525=>375,7526=>361,7527=>335,7528=>370,7529=>374,7530=>327,7543=>571,7544=>426,7547=>334,7549=>600,7557=>250,7579=>365,7580=>333,7581=>333,7582=>372,7583=>324,7584=>267,7585=>209,7586=>365,7587=>364,7588=>235,7589=>224,7590=>234,7591=>235,7592=>211,7593=>224,7594=>211,7595=>338,7596=>561,7597=>561,7598=>369,7599=>431,7600=>368,7601=>372,7602=>372,7603=>324,7604=>258,7605=>265,7606=>457,7607=>376,7608=>325,7609=>365,7610=>375,7611=>330,7612=>393,7613=>330,7614=>353,7615=>372,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>615,7681=>551,7682=>617,7683=>571,7684=>617,7685=>571,7686=>617,7687=>571,7688=>628,7689=>495,7690=>693,7691=>571,7692=>693,7693=>571,7694=>693,7695=>571,7696=>693,7697=>571,7698=>693,7699=>571,7700=>568,7701=>554,7702=>568,7703=>554,7704=>568,7705=>554,7706=>568,7707=>554,7708=>568,7709=>554,7710=>518,7711=>316,7712=>697,7713=>571,7714=>677,7715=>570,7716=>677,7717=>570,7718=>677,7719=>570,7720=>677,7721=>570,7722=>677,7723=>570,7724=>265,7725=>250,7726=>265,7727=>250,7728=>590,7729=>521,7730=>590,7731=>521,7732=>590,7733=>521,7734=>501,7735=>250,7736=>501,7737=>250,7738=>501,7739=>250,7740=>501,7741=>250,7742=>776,7743=>876,7744=>776,7745=>876,7746=>776,7747=>876,7748=>673,7749=>570,7750=>673,7751=>570,7752=>673,7753=>570,7754=>673,7755=>570,7756=>708,7757=>550,7758=>708,7759=>550,7760=>708,7761=>550,7762=>708,7763=>550,7764=>542,7765=>571,7766=>542,7767=>571,7768=>625,7769=>370,7770=>625,7771=>370,7772=>625,7773=>370,7774=>625,7775=>370,7776=>571,7777=>469,7778=>571,7779=>469,7780=>571,7781=>469,7782=>571,7783=>469,7784=>571,7785=>469,7786=>549,7787=>353,7788=>549,7789=>353,7790=>549,7791=>353,7792=>549,7793=>353,7794=>659,7795=>570,7796=>659,7797=>570,7798=>659,7799=>570,7800=>659,7801=>570,7802=>659,7803=>570,7804=>615,7805=>532,7806=>615,7807=>532,7808=>890,7809=>736,7810=>890,7811=>736,7812=>890,7813=>736,7814=>890,7815=>736,7816=>890,7817=>736,7818=>616,7819=>532,7820=>616,7821=>532,7822=>549,7823=>532,7824=>616,7825=>472,7826=>616,7827=>472,7828=>616,7829=>472,7830=>570,7831=>353,7832=>736,7833=>532,7834=>551,7835=>316,7836=>316,7837=>316,7838=>691,7839=>550,7840=>615,7841=>551,7842=>615,7843=>551,7844=>615,7845=>551,7846=>615,7847=>551,7848=>615,7849=>551,7850=>615,7851=>551,7852=>615,7853=>551,7854=>615,7855=>551,7856=>615,7857=>551,7858=>615,7859=>551,7860=>615,7861=>551,7862=>615,7863=>551,7864=>568,7865=>554,7866=>568,7867=>554,7868=>568,7869=>554,7870=>568,7871=>554,7872=>568,7873=>554,7874=>568,7875=>554,7876=>568,7877=>554,7878=>568,7879=>554,7880=>265,7881=>250,7882=>265,7883=>250,7884=>708,7885=>550,7886=>708,7887=>550,7888=>708,7889=>550,7890=>708,7891=>550,7892=>708,7893=>550,7894=>708,7895=>550,7896=>708,7897=>550,7898=>822,7899=>550,7900=>822,7901=>550,7902=>822,7903=>550,7904=>822,7905=>550,7906=>822,7907=>550,7908=>659,7909=>570,7910=>659,7911=>570,7912=>754,7913=>570,7914=>754,7915=>570,7916=>754,7917=>570,7918=>754,7919=>570,7920=>754,7921=>570,7922=>549,7923=>532,7924=>549,7925=>532,7926=>549,7927=>532,7928=>549,7929=>532,7930=>692,7931=>429,7936=>593,7937=>593,7938=>593,7939=>593,7940=>593,7941=>593,7942=>593,7943=>593,7944=>615,7945=>615,7946=>790,7947=>790,7948=>692,7949=>721,7950=>637,7951=>668,7952=>486,7953=>486,7954=>486,7955=>486,7956=>486,7957=>486,7960=>640,7961=>640,7962=>869,7963=>877,7964=>809,7965=>835,7968=>570,7969=>570,7970=>570,7971=>570,7972=>570,7973=>570,7974=>570,7975=>570,7976=>753,7977=>751,7978=>977,7979=>980,7980=>924,7981=>945,7982=>840,7983=>852,7984=>304,7985=>304,7986=>304,7987=>304,7988=>304,7989=>304,7990=>304,7991=>304,7992=>342,7993=>336,7994=>571,7995=>571,7996=>513,7997=>540,7998=>440,7999=>443,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>724,8009=>763,8010=>985,8011=>989,8012=>844,8013=>873,8016=>521,8017=>521,8018=>521,8019=>521,8020=>521,8021=>521,8022=>521,8023=>521,8025=>705,8027=>897,8029=>911,8031=>808,8032=>753,8033=>753,8034=>753,8035=>753,8036=>753,8037=>753,8038=>753,8039=>753,8040=>722,8041=>759,8042=>980,8043=>985,8044=>851,8045=>875,8046=>829,8047=>857,8048=>593,8049=>593,8050=>486,8051=>493,8052=>570,8053=>589,8054=>304,8055=>304,8056=>550,8057=>550,8058=>521,8059=>521,8060=>753,8061=>753,8064=>593,8065=>593,8066=>593,8067=>593,8068=>593,8069=>593,8070=>593,8071=>593,8072=>615,8073=>615,8074=>790,8075=>790,8076=>692,8077=>721,8078=>637,8079=>668,8080=>570,8081=>570,8082=>570,8083=>570,8084=>570,8085=>570,8086=>570,8087=>570,8088=>753,8089=>751,8090=>977,8091=>980,8092=>924,8093=>945,8094=>840,8095=>852,8096=>753,8097=>753,8098=>753,8099=>753,8100=>753,8101=>753,8102=>753,8103=>753,8104=>722,8105=>759,8106=>980,8107=>985,8108=>851,8109=>875,8110=>829,8111=>857,8112=>593,8113=>593,8114=>593,8115=>593,8116=>593,8118=>593,8119=>593,8120=>615,8121=>615,8122=>645,8123=>623,8124=>615,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>570,8131=>570,8132=>589,8134=>570,8135=>570,8136=>724,8137=>671,8138=>837,8139=>784,8140=>677,8141=>450,8142=>450,8143=>450,8144=>304,8145=>304,8146=>304,8147=>304,8150=>304,8151=>304,8152=>265,8153=>265,8154=>427,8155=>367,8157=>450,8158=>450,8159=>450,8160=>521,8161=>521,8162=>521,8163=>521,8164=>571,8165=>571,8166=>521,8167=>521,8168=>549,8169=>549,8170=>760,8171=>742,8172=>616,8173=>450,8174=>450,8175=>450,8178=>753,8179=>753,8180=>753,8182=>753,8183=>753,8184=>847,8185=>731,8186=>830,8187=>743,8188=>688,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>325,8209=>325,8210=>572,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>286,8217=>286,8218=>286,8219=>286,8220=>466,8221=>466,8222=>466,8223=>466,8224=>450,8225=>450,8226=>531,8227=>531,8228=>299,8229=>600,8230=>900,8231=>286,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1215,8241=>1521,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8249=>360,8250=>360,8251=>754,8252=>437,8253=>478,8254=>450,8255=>723,8256=>723,8257=>225,8258=>900,8259=>450,8260=>150,8261=>351,8262=>351,8263=>830,8264=>659,8265=>659,8266=>447,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8272=>723,8273=>450,8274=>404,8275=>900,8276=>723,8277=>754,8278=>527,8279=>597,8280=>754,8281=>754,8282=>286,8283=>717,8284=>754,8285=>286,8286=>286,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>360,8305=>161,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221,8319=>359,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>352,8337=>375,8338=>372,8339=>399,8340=>375,8341=>359,8342=>383,8343=>149,8344=>561,8345=>359,8346=>385,8347=>335,8348=>265,8352=>789,8353=>572,8354=>572,8355=>572,8356=>572,8357=>876,8358=>673,8359=>1143,8360=>966,8361=>890,8362=>754,8363=>572,8364=>572,8365=>572,8366=>572,8367=>1145,8368=>572,8369=>572,8370=>572,8371=>572,8372=>696,8373=>572,8376=>572,8377=>572,8378=>611,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>873,8449=>873,8450=>628,8451=>1011,8452=>807,8453=>872,8454=>929,8455=>553,8456=>628,8457=>856,8459=>889,8460=>679,8461=>765,8462=>570,8463=>570,8464=>422,8465=>627,8466=>648,8467=>372,8468=>736,8469=>721,8470=>936,8471=>900,8472=>627,8473=>631,8474=>708,8475=>718,8476=>732,8477=>712,8478=>807,8479=>615,8480=>917,8481=>912,8482=>900,8483=>615,8484=>670,8485=>520,8486=>688,8487=>688,8488=>554,8489=>304,8490=>590,8491=>615,8492=>708,8493=>633,8494=>769,8495=>532,8496=>545,8497=>708,8498=>518,8499=>962,8500=>416,8501=>670,8502=>606,8503=>419,8504=>580,8505=>342,8506=>833,8507=>1041,8508=>632,8509=>655,8510=>589,8511=>764,8512=>729,8513=>697,8514=>501,8515=>501,8516=>549,8517=>737,8518=>637,8519=>554,8520=>316,8521=>316,8523=>702,8526=>474,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>265,8545=>443,8546=>620,8547=>831,8548=>615,8549=>830,8550=>1007,8551=>1185,8552=>826,8553=>616,8554=>839,8555=>1018,8556=>501,8557=>628,8558=>693,8559=>776,8560=>250,8561=>412,8562=>573,8563=>730,8564=>532,8565=>729,8566=>892,8567=>1053,8568=>737,8569=>532,8570=>740,8571=>901,8572=>250,8573=>495,8574=>571,8575=>876,8576=>1121,8577=>693,8578=>1121,8579=>633,8580=>494,8581=>628,8585=>872,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>615,8705=>572,8706=>465,8707=>568,8708=>568,8709=>784,8710=>602,8711=>602,8712=>784,8713=>784,8714=>646,8715=>784,8716=>784,8717=>646,8718=>572,8719=>681,8720=>681,8721=>606,8722=>754,8723=>754,8724=>754,8725=>303,8726=>573,8727=>754,8728=>563,8729=>563,8730=>573,8731=>573,8732=>573,8733=>643,8734=>750,8735=>754,8736=>807,8737=>807,8738=>754,8739=>450,8740=>450,8741=>450,8742=>450,8743=>659,8744=>659,8745=>659,8746=>659,8747=>469,8748=>710,8749=>951,8750=>469,8751=>710,8752=>951,8753=>469,8754=>469,8755=>469,8756=>572,8757=>572,8758=>234,8759=>572,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8766=>754,8767=>754,8768=>337,8769=>754,8770=>754,8771=>754,8772=>754,8773=>754,8774=>754,8775=>754,8776=>754,8777=>754,8778=>754,8779=>754,8780=>754,8781=>754,8782=>754,8783=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>900,8789=>900,8790=>754,8791=>754,8792=>754,8793=>754,8794=>754,8795=>754,8796=>754,8797=>754,8798=>754,8799=>754,8800=>754,8801=>754,8802=>754,8803=>754,8804=>754,8805=>754,8806=>754,8807=>754,8808=>754,8809=>754,8810=>942,8811=>942,8812=>417,8813=>754,8814=>754,8815=>754,8816=>754,8817=>754,8818=>754,8819=>754,8820=>754,8821=>754,8822=>754,8823=>754,8824=>754,8825=>754,8826=>754,8827=>754,8828=>754,8829=>754,8830=>754,8831=>754,8832=>754,8833=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8840=>754,8841=>754,8842=>754,8843=>754,8844=>659,8845=>659,8846=>659,8847=>754,8848=>754,8849=>754,8850=>754,8851=>702,8852=>702,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>784,8867=>784,8868=>784,8869=>784,8870=>468,8871=>468,8872=>784,8873=>784,8874=>784,8875=>784,8876=>784,8877=>784,8878=>784,8879=>784,8880=>754,8881=>754,8882=>754,8883=>754,8884=>754,8885=>754,8886=>900,8887=>900,8888=>754,8889=>754,8890=>468,8891=>659,8892=>659,8893=>659,8894=>754,8895=>754,8896=>738,8897=>738,8898=>738,8899=>738,8900=>444,8901=>286,8902=>563,8903=>754,8904=>900,8905=>900,8906=>900,8907=>900,8908=>900,8909=>754,8910=>659,8911=>659,8912=>754,8913=>754,8914=>754,8915=>754,8916=>754,8917=>754,8918=>754,8919=>754,8920=>1280,8921=>1280,8922=>754,8923=>754,8924=>754,8925=>754,8926=>754,8927=>754,8928=>754,8929=>754,8930=>754,8931=>754,8932=>754,8933=>754,8934=>754,8935=>754,8936=>754,8937=>754,8938=>754,8939=>754,8940=>754,8941=>754,8942=>900,8943=>900,8944=>900,8945=>900,8946=>900,8947=>784,8948=>646,8949=>784,8950=>784,8951=>646,8952=>784,8953=>784,8954=>900,8955=>784,8956=>646,8957=>784,8958=>646,8959=>784,8960=>542,8961=>542,8962=>571,8963=>754,8964=>754,8965=>754,8966=>754,8967=>439,8968=>351,8969=>351,8970=>351,8971=>351,8972=>728,8973=>728,8974=>728,8975=>728,8976=>754,8977=>461,8984=>900,8985=>754,8988=>422,8989=>422,8990=>422,8991=>422,8992=>469,8993=>469,8996=>1037,8997=>1037,8998=>1272,8999=>1037,9000=>1299,9003=>1272,9004=>786,9075=>304,9076=>571,9077=>753,9082=>593,9085=>681,9095=>1037,9108=>786,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>469,9166=>754,9167=>850,9187=>786,9189=>692,9192=>572,9250=>571,9251=>571,9312=>807,9313=>807,9314=>807,9315=>807,9316=>807,9317=>807,9318=>807,9319=>807,9320=>807,9321=>807,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542,9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542,9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542,9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542,9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542,9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542,9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542,9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542,9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542,9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542,9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542,9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542,9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542,9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>692,9697=>692,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9729=>900,9730=>807,9731=>807,9732=>807,9733=>807,9734=>807,9735=>515,9736=>806,9737=>807,9738=>799,9739=>799,9740=>604,9741=>911,9742=>1121,9743=>1125,9744=>807,9745=>807,9746=>807,9747=>479,9748=>807,9749=>807,9750=>807,9751=>807,9752=>807,9753=>807,9754=>807,9755=>807,9756=>807,9757=>548,9758=>807,9759=>548,9760=>807,9761=>807,9762=>807,9763=>807,9764=>602,9765=>671,9766=>584,9767=>705,9768=>490,9769=>807,9770=>807,9771=>807,9772=>639,9773=>807,9774=>807,9775=>807,9776=>800,9777=>800,9778=>800,9779=>800,9780=>800,9781=>800,9782=>800,9783=>800,9784=>807,9785=>938,9786=>938,9787=>938,9788=>807,9789=>807,9790=>807,9791=>552,9792=>659,9793=>659,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9800=>807,9801=>807,9802=>807,9803=>807,9804=>807,9805=>807,9806=>807,9807=>807,9808=>807,9809=>807,9810=>807,9811=>807,9812=>807,9813=>807,9814=>807,9815=>807,9816=>807,9817=>807,9818=>807,9819=>807,9820=>807,9821=>807,9822=>807,9823=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9832=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,9840=>673,9841=>689,9842=>807,9843=>807,9844=>807,9845=>807,9846=>807,9847=>807,9848=>807,9849=>807,9850=>807,9851=>807,9852=>807,9853=>807,9854=>807,9855=>807,9856=>782,9857=>782,9858=>782,9859=>782,9860=>782,9861=>782,9862=>800,9863=>800,9864=>800,9865=>800,9866=>800,9867=>800,9868=>800,9869=>800,9870=>800,9871=>800,9872=>675,9873=>675,9874=>800,9875=>734,9876=>644,9877=>483,9878=>766,9879=>800,9880=>615,9881=>807,9882=>637,9883=>800,9884=>800,9888=>800,9889=>632,9890=>904,9891=>980,9892=>1057,9893=>813,9894=>754,9895=>754,9896=>754,9897=>754,9898=>754,9899=>754,9900=>754,9901=>754,9902=>754,9903=>754,9904=>759,9905=>754,9906=>659,9907=>659,9908=>659,9909=>659,9910=>765,9911=>659,9912=>659,9920=>754,9921=>754,9922=>754,9923=>754,9954=>659,9985=>754,9986=>754,9987=>754,9988=>754,9990=>754,9991=>754,9992=>754,9993=>754,9996=>754,9997=>754,9998=>754,9999=>754,10000=>754,10001=>754,10002=>754,10003=>754,10004=>754,10005=>754,10006=>754,10007=>754,10008=>754,10009=>754,10010=>754,10011=>754,10012=>754,10013=>754,10014=>754,10015=>754,10016=>754,10017=>754,10018=>754,10019=>754,10020=>754,10021=>754,10022=>754,10023=>754,10025=>754,10026=>754,10027=>754,10028=>754,10029=>754,10030=>754,10031=>754,10032=>754,10033=>754,10034=>754,10035=>754,10036=>754,10037=>754,10038=>754,10039=>754,10040=>754,10041=>754,10042=>754,10043=>754,10044=>754,10045=>754,10046=>754,10047=>754,10048=>754,10049=>754,10050=>754,10051=>754,10052=>754,10053=>754,10054=>754,10055=>754,10056=>754,10057=>754,10058=>754,10059=>754,10061=>807,10063=>807,10064=>807,10065=>807,10066=>807,10070=>807,10072=>754,10073=>754,10074=>754,10075=>290,10076=>290,10077=>484,10078=>484,10081=>754,10082=>754,10083=>754,10084=>754,10085=>754,10086=>754,10087=>754,10088=>754,10089=>754,10090=>754,10091=>754,10092=>754,10093=>754,10094=>754,10095=>754,10096=>754,10097=>754,10098=>754,10099=>754,10100=>754,10101=>754,10102=>807,10103=>807,10104=>807,10105=>807,10106=>807,10107=>807,10108=>807,10109=>807,10110=>807,10111=>807,10112=>754,10113=>754,10114=>754,10115=>754,10116=>754,10117=>754,10118=>754,10119=>754,10120=>754,10121=>754,10122=>754,10123=>754,10124=>754,10125=>754,10126=>754,10127=>754,10128=>754,10129=>754,10130=>754,10131=>754,10132=>754,10136=>754,10137=>754,10138=>754,10139=>754,10140=>754,10141=>754,10142=>754,10143=>754,10144=>754,10145=>754,10146=>754,10147=>754,10148=>754,10149=>754,10150=>754,10151=>754,10152=>754,10153=>754,10154=>754,10155=>754,10156=>754,10157=>754,10158=>754,10159=>754,10161=>754,10162=>754,10163=>754,10164=>754,10165=>754,10166=>754,10167=>754,10168=>754,10169=>754,10170=>754,10171=>754,10172=>754,10173=>754,10174=>754,10181=>351,10182=>351,10208=>444,10214=>445,10215=>445,10216=>351,10217=>351,10218=>500,10219=>500,10224=>754,10225=>754,10226=>754,10227=>754,10228=>1042,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659,10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659,10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659,10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659,10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659,10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659,10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659,10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659,10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659,10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659,10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659,10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659,10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659,10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659,10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659,10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659,10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659,10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659,10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659,10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659,10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659,10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659,10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659,10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659,10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659,10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10502=>754,10503=>754,10506=>754,10507=>754,10560=>615,10561=>615,10627=>660,10628=>660,10702=>754,10703=>900,10704=>900,10705=>900,10706=>900,10707=>900,10708=>900,10709=>900,10731=>444,10746=>754,10747=>754,10752=>900,10753=>900,10754=>900,10764=>1192,10765=>469,10766=>469,10767=>469,10768=>469,10769=>469,10770=>469,10771=>469,10772=>469,10773=>469,10774=>469,10775=>469,10776=>469,10777=>469,10778=>469,10779=>469,10780=>469,10799=>754,10858=>754,10859=>754,10877=>754,10878=>754,10879=>754,10880=>754,10881=>754,10882=>754,10883=>754,10884=>754,10885=>754,10886=>754,10887=>754,10888=>754,10889=>754,10890=>754,10891=>754,10892=>754,10893=>754,10894=>754,10895=>754,10896=>754,10897=>754,10898=>754,10899=>754,10900=>754,10901=>754,10902=>754,10903=>754,10904=>754,10905=>754,10906=>754,10907=>754,10908=>754,10909=>754,10910=>754,10911=>754,10912=>754,10926=>754,10927=>754,10928=>754,10929=>754,10930=>754,10931=>754,10932=>754,10933=>754,10934=>754,10935=>754,10936=>754,10937=>754,10938=>754,11001=>754,11002=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>752,11023=>752,11024=>752,11025=>752,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11039=>782,11040=>782,11041=>786,11042=>786,11043=>786,11044=>1007,11091=>782,11092=>782,11360=>501,11361=>250,11362=>501,11363=>542,11364=>625,11365=>551,11366=>353,11367=>677,11368=>570,11369=>590,11370=>521,11371=>616,11372=>472,11373=>703,11374=>776,11375=>615,11376=>703,11377=>661,11378=>1015,11379=>865,11380=>532,11381=>589,11382=>511,11383=>593,11385=>373,11386=>550,11387=>441,11388=>157,11389=>387,11390=>571,11391=>616,11520=>532,11521=>535,11522=>508,11523=>541,11524=>528,11525=>819,11526=>563,11527=>856,11528=>536,11529=>546,11530=>858,11531=>558,11532=>536,11533=>833,11534=>535,11535=>725,11536=>838,11537=>526,11538=>533,11539=>831,11540=>857,11541=>745,11542=>536,11543=>535,11544=>531,11545=>532,11546=>532,11547=>558,11548=>828,11549=>530,11550=>527,11551=>523,11552=>822,11553=>536,11554=>535,11555=>533,11556=>577,11557=>811,11800=>478,11807=>754,11810=>351,11811=>351,11812=>351,11813=>351,11822=>478,19904=>807,19905=>807,19906=>807,19907=>807,19908=>807,19909=>807,19910=>807,19911=>807,19912=>807,19913=>807,19914=>807,19915=>807,19916=>807,19917=>807,19918=>807,19919=>807,19920=>807,19921=>807,19922=>807,19923=>807,19924=>807,19925=>807,19926=>807,19927=>807,19928=>807,19929=>807,19930=>807,19931=>807,19932=>807,19933=>807,19934=>807,19935=>807,19936=>807,19937=>807,19938=>807,19939=>807,19940=>807,19941=>807,19942=>807,19943=>807,19944=>807,19945=>807,19946=>807,19947=>807,19948=>807,19949=>807,19950=>807,19951=>807,19952=>807,19953=>807,19954=>807,19955=>807,19956=>807,19957=>807,19958=>807,19959=>807,19960=>807,19961=>807,19962=>807,19963=>807,19964=>807,19965=>807,19966=>807,19967=>807,42192=>617,42193=>542,42194=>542,42195=>693,42196=>549,42197=>549,42198=>697,42199=>590,42200=>590,42201=>460,42202=>628,42203=>633,42204=>616,42205=>518,42206=>518,42207=>776,42208=>673,42209=>501,42210=>571,42211=>625,42212=>625,42213=>615,42214=>615,42215=>677,42216=>697,42217=>460,42218=>890,42219=>616,42220=>549,42221=>617,42222=>615,42223=>615,42224=>568,42225=>568,42226=>265,42227=>708,42228=>659,42229=>659,42230=>501,42231=>690,42232=>270,42233=>270,42234=>536,42235=>536,42236=>270,42237=>270,42238=>529,42239=>529,42564=>571,42565=>469,42566=>318,42567=>304,42572=>1062,42573=>925,42576=>926,42577=>815,42580=>971,42581=>757,42582=>886,42583=>762,42594=>922,42595=>833,42596=>912,42597=>810,42598=>776,42599=>907,42600=>708,42601=>550,42602=>770,42603=>641,42604=>1222,42605=>917,42606=>791,42634=>725,42635=>649,42636=>549,42637=>524,42644=>617,42645=>570,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444,42779=>332,42780=>332,42781=>227,42782=>227,42783=>227,42786=>347,42787=>320,42788=>424,42789=>424,42790=>677,42791=>570,42792=>790,42793=>638,42794=>553,42795=>486,42800=>441,42801=>469,42802=>1125,42803=>886,42804=>1097,42805=>900,42806=>1039,42807=>896,42808=>874,42809=>736,42810=>874,42811=>736,42812=>863,42813=>736,42814=>628,42815=>494,42816=>590,42817=>521,42822=>612,42823=>353,42824=>523,42825=>384,42826=>726,42827=>633,42830=>1222,42831=>917,42832=>542,42833=>571,42834=>660,42835=>697,42838=>708,42839=>571,42852=>544,42853=>571,42854=>544,42855=>571,42880=>501,42881=>250,42882=>662,42883=>570,42889=>303,42890=>338,42891=>360,42892=>247,42893=>617,42894=>438,42896=>695,42897=>600,42912=>697,42913=>571,42914=>590,42915=>521,42916=>673,42917=>570,42918=>625,42919=>370,42920=>571,42921=>469,42922=>784,43002=>823,43003=>518,43004=>542,43005=>776,43006=>265,43007=>1079,61184=>192,61185=>214,61186=>231,61187=>237,61188=>240,61189=>214,61190=>192,61191=>214,61192=>231,61193=>237,61194=>231,61195=>214,61196=>192,61197=>214,61198=>231,61199=>237,61200=>231,61201=>214,61202=>192,61203=>214,61204=>240,61205=>237,61206=>231,61207=>214,61208=>192,61209=>247,62464=>522,62465=>522,62466=>561,62467=>800,62468=>526,62469=>522,62470=>587,62471=>793,62472=>500,62473=>522,62474=>1051,62475=>530,62476=>531,62477=>782,62478=>522,62479=>530,62480=>822,62481=>531,62482=>658,62483=>524,62484=>785,62485=>530,62486=>805,62487=>530,62488=>530,62489=>531,62490=>584,62491=>530,62492=>530,62493=>539,62494=>531,62495=>464,62496=>521,62497=>525,62498=>522,62499=>522,62500=>522,62501=>574,62502=>859,62504=>838,62505=>727,62506=>457,62507=>457,62508=>457,62509=>457,62510=>457,62511=>457,62512=>457,62513=>457,62514=>457,62515=>457,62516=>466,62517=>466,62518=>466,62519=>708,62520=>708,62521=>708,62522=>708,62523=>708,62524=>492,62525=>492,62526=>492,62527=>492,62528=>492,62529=>492,63173=>550,64256=>649,64257=>581,64258=>581,64259=>899,64260=>899,64261=>617,64262=>774,64275=>1081,64276=>1081,64277=>1076,64278=>1067,64279=>1376,64285=>201,64286=>0,64287=>423,64288=>572,64289=>770,64290=>696,64291=>815,64292=>694,64293=>759,64294=>769,64295=>726,64296=>788,64297=>754,64298=>637,64299=>637,64300=>637,64301=>637,64302=>602,64303=>602,64304=>602,64305=>520,64306=>371,64307=>491,64308=>588,64309=>245,64310=>312,64311=>900,64312=>583,64313=>276,64314=>483,64315=>476,64316=>511,64317=>900,64318=>611,64319=>900,64320=>360,64321=>584,64322=>900,64323=>576,64324=>562,64325=>900,64326=>534,64327=>638,64328=>508,64329=>637,64330=>591,64331=>245,64332=>520,64333=>476,64334=>562,64335=>566,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusanscondensedi.z b/tcpdf/fonts/dejavusanscondensedi.z new file mode 100644 index 0000000..aa35d09 Binary files /dev/null and b/tcpdf/fonts/dejavusanscondensedi.z differ diff --git a/tcpdf/fonts/dejavusansextralight.ctg.z b/tcpdf/fonts/dejavusansextralight.ctg.z new file mode 100644 index 0000000..d5fff04 Binary files /dev/null and b/tcpdf/fonts/dejavusansextralight.ctg.z differ diff --git a/tcpdf/fonts/dejavusansextralight.php b/tcpdf/fonts/dejavusansextralight.php new file mode 100644 index 0000000..f916c33 --- /dev/null +++ b/tcpdf/fonts/dejavusansextralight.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSans-ExtraLight'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=352492; +$enc=''; +$file='dejavusansextralight.z'; +$ctg='dejavusansextralight.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-733 -269 1659 1104]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>17,'StemH'=>7,'AvgWidth'=>506,'MaxWidth'=>1735,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(177,0,224,729),34=>array(113,458,345,729),35=>array(77,0,761,718),36=>array(83,-147,556,760),37=>array(74,-14,875,742),38=>array(86,-14,718,742),39=>array(113,458,160,729),40=>array(109,-132,287,760),41=>array(109,-132,287,760),42=>array(37,286,461,742),43=>array(106,0,732,627),44=>array(114,-116,183,62),45=>array(49,254,312,294),46=>array(134,0,184,62),47=>array(16,-93,321,729),48=>array(89,-15,543,742),49=>array(110,0,520,729),50=>array(69,0,536,742),51=>array(76,-14,531,742),52=>array(49,0,556,729),53=>array(99,-14,525,729),54=>array(97,-14,549,742),55=>array(82,0,525,729),56=>array(94,-14,542,742),57=>array(97,-14,549,742),58=>array(144,0,193,480),59=>array(125,-116,193,480),60=>array(106,64,732,560),61=>array(106,215,732,412),62=>array(106,64,732,560),63=>array(76,0,439,742),64=>array(108,-186,917,708),65=>array(30,0,651,729),66=>array(123,0,587,729),67=>array(83,-14,644,742),68=>array(122,0,687,729),69=>array(122,0,542,729),70=>array(122,0,492,729),71=>array(83,-14,668,742),72=>array(122,0,628,729),73=>array(121,0,172,729),74=>array(5,-178,171,729),75=>array(173,0,644,729),76=>array(122,0,526,729),77=>array(161,0,702,729),78=>array(121,0,596,729),79=>array(82,-14,706,742),80=>array(122,0,542,729),81=>array(82,-129,706,742),82=>array(123,0,641,729),83=>array(89,-14,553,742),84=>array(22,0,589,729),85=>array(112,-14,620,729),86=>array(30,0,651,729),87=>array(69,0,895,729),88=>array(59,0,629,729),89=>array(22,0,587,729),90=>array(45,0,640,729),91=>array(113,-132,280,760),92=>array(16,-93,321,729),93=>array(113,-132,280,760),94=>array(125,457,713,729),95=>array(-10,-236,510,-198),96=>array(100,617,299,800),97=>array(82,-14,500,560),98=>array(114,-14,555,760),99=>array(68,-14,488,560),100=>array(114,-14,555,760),101=>array(79,-14,540,560),102=>array(45,0,349,760),103=>array(81,-208,521,560),104=>array(113,0,526,760),105=>array(112,0,157,760),106=>array(-18,-208,162,760),107=>array(159,0,547,760),108=>array(113,0,158,760),109=>array(113,0,868,560),110=>array(113,0,526,560),111=>array(79,-17,532,560),112=>array(114,-208,555,560),113=>array(114,-208,555,560),114=>array(114,0,410,560),115=>array(75,-14,449,560),116=>array(50,0,346,702),117=>array(113,-13,526,547),118=>array(63,0,528,547),119=>array(63,0,726,547),120=>array(56,0,536,547),121=>array(54,-189,538,547),122=>array(43,0,482,547),123=>array(169,-163,431,760),124=>array(146,-236,193,764),125=>array(169,-163,431,760),126=>array(106,250,732,382),161=>array(177,0,224,729),162=>array(109,-153,527,699),163=>array(63,0,548,742),164=>array(60,54,577,573),165=>array(62,0,574,729),166=>array(142,-171,190,699),167=>array(46,-85,446,742),168=>array(159,699,342,758),169=>array(138,0,862,725),170=>array(68,249,404,742),171=>array(94,86,535,500),172=>array(105,141,716,399),173=>array(49,254,312,294),174=>array(138,0,862,725),175=>array(104,702,396,745),176=>array(116,451,384,720),177=>array(105,0,732,627),178=>array(46,358,338,742),179=>array(48,345,340,742),180=>array(181,616,380,800),181=>array(107,-208,618,547),182=>array(84,-96,516,729),183=>array(133,306,184,367),184=>array(142,-188,333,0),185=>array(67,359,346,729),186=>array(63,249,408,742),187=>array(94,86,535,500),188=>array(67,-14,923,742),189=>array(67,-14,906,742),190=>array(48,-14,923,742),191=>array(76,-14,439,728),192=>array(30,0,651,927),193=>array(30,0,651,927),194=>array(30,0,651,928),195=>array(30,0,651,914),196=>array(30,0,651,913),197=>array(30,0,651,920),198=>array(27,0,910,729),199=>array(83,-188,644,742),200=>array(122,0,542,927),201=>array(122,0,542,927),202=>array(122,0,542,928),203=>array(122,0,542,913),204=>array(47,0,199,927),205=>array(95,0,246,927),206=>array(7,0,288,928),207=>array(56,0,239,913),208=>array(5,0,687,729),209=>array(121,0,596,914),210=>array(82,-14,706,927),211=>array(82,-14,706,927),212=>array(82,-14,706,928),213=>array(82,-14,706,914),214=>array(82,-14,706,913),215=>array(161,54,677,573),216=>array(59,-29,730,754),217=>array(112,-14,620,927),218=>array(112,-14,620,927),219=>array(112,-14,620,928),220=>array(112,-14,620,913),221=>array(22,0,587,927),222=>array(122,0,543,729),223=>array(133,-14,576,760),224=>array(82,-14,500,800),225=>array(82,-14,500,800),226=>array(82,-14,500,800),227=>array(82,-14,500,767),228=>array(82,-14,500,758),229=>array(82,-14,500,864),230=>array(82,-14,914,561),231=>array(68,-188,488,560),232=>array(79,-14,540,800),233=>array(79,-14,540,800),234=>array(79,-14,540,800),235=>array(79,-14,540,758),236=>array(-11,0,188,800),237=>array(70,0,270,800),238=>array(-0,0,280,800),239=>array(48,0,231,758),240=>array(79,-14,531,760),241=>array(113,0,526,767),242=>array(79,-17,532,800),243=>array(79,-17,532,800),244=>array(79,-17,532,800),245=>array(79,-17,532,767),246=>array(79,-17,532,758),247=>array(105,73,732,554),248=>array(39,-42,569,589),249=>array(113,-13,526,800),250=>array(113,-13,526,800),251=>array(113,-13,526,800),252=>array(113,-13,526,758),253=>array(54,-189,538,800),254=>array(114,-208,555,760),255=>array(54,-189,538,758),256=>array(30,0,651,899),257=>array(82,-14,500,745),258=>array(30,0,651,946),259=>array(82,-14,500,765),260=>array(30,-188,726,729),261=>array(82,-188,604,560),262=>array(83,-14,644,927),263=>array(68,-14,488,800),264=>array(83,-14,644,928),265=>array(68,-14,488,800),266=>array(83,-14,644,876),267=>array(68,-14,488,722),268=>array(83,-14,644,928),269=>array(68,-14,488,800),270=>array(122,0,687,938),271=>array(114,-14,707,760),272=>array(5,0,687,729),273=>array(79,-14,596,760),274=>array(122,0,542,900),275=>array(79,-14,540,745),276=>array(122,0,542,928),277=>array(79,-14,540,785),278=>array(122,0,542,876),279=>array(79,-14,540,722),280=>array(122,-188,589,729),281=>array(79,-188,548,560),282=>array(122,0,542,925),283=>array(79,-14,540,797),284=>array(83,-14,668,928),285=>array(81,-208,521,800),286=>array(83,-14,668,928),287=>array(81,-208,521,785),288=>array(83,-14,668,876),289=>array(81,-208,521,722),290=>array(83,-250,668,742),291=>array(81,-208,521,775),292=>array(122,0,628,928),293=>array(-5,0,526,928),294=>array(121,0,791,729),295=>array(70,0,556,760),296=>array(2,0,291,914),297=>array(-7,0,284,767),298=>array(1,0,293,899),299=>array(-7,0,285,745),300=>array(-5,0,300,928),301=>array(-14,0,292,785),302=>array(97,-188,288,729),303=>array(84,-188,275,760),304=>array(121,0,172,876),305=>array(112,0,157,547),306=>array(121,-178,466,729),307=>array(112,-208,439,760),308=>array(5,-178,287,928),309=>array(-18,-208,280,800),310=>array(173,-235,644,729),311=>array(159,-235,547,760),312=>array(111,0,576,547),313=>array(122,0,526,928),314=>array(113,0,267,928),315=>array(122,-235,526,729),316=>array(82,-235,181,760),317=>array(122,0,526,730),318=>array(113,0,350,761),319=>array(122,0,526,729),320=>array(113,0,288,760),321=>array(-2,0,526,729),322=>array(6,0,279,760),323=>array(121,0,596,928),324=>array(113,0,526,803),325=>array(121,-235,596,729),326=>array(113,-235,526,560),327=>array(121,0,596,921),328=>array(113,0,526,800),329=>array(127,0,693,729),330=>array(131,-178,606,729),331=>array(113,-198,526,560),332=>array(82,-14,706,899),333=>array(79,-17,532,745),334=>array(82,-14,706,928),335=>array(79,-17,532,785),336=>array(82,-14,706,927),337=>array(79,-17,532,800),338=>array(82,0,977,729),339=>array(79,-17,948,561),340=>array(123,0,641,928),341=>array(114,0,413,803),342=>array(123,-235,641,729),343=>array(79,-235,410,560),344=>array(123,0,641,921),345=>array(114,0,410,800),346=>array(89,-14,553,928),347=>array(75,-14,449,803),348=>array(89,-14,553,928),349=>array(75,-14,449,800),350=>array(89,-188,553,742),351=>array(75,-188,449,560),352=>array(89,-14,553,928),353=>array(75,-14,449,800),354=>array(22,-188,589,729),355=>array(50,-188,346,702),356=>array(22,0,589,921),357=>array(50,0,349,814),358=>array(22,0,589,729),359=>array(50,0,346,702),360=>array(112,-14,620,914),361=>array(113,-13,526,767),362=>array(112,-14,620,899),363=>array(113,-13,526,745),364=>array(112,-14,620,928),365=>array(113,-13,526,785),366=>array(112,-14,620,920),367=>array(113,-13,526,835),368=>array(112,-14,620,927),369=>array(113,-13,527,800),370=>array(112,-196,620,729),371=>array(113,-188,633,547),372=>array(69,0,895,932),373=>array(63,0,726,803),374=>array(22,0,587,932),375=>array(54,-189,538,803),376=>array(22,0,587,913),377=>array(45,0,640,928),378=>array(43,0,482,803),379=>array(45,0,640,867),380=>array(43,0,482,722),381=>array(45,0,640,928),382=>array(43,0,482,800),383=>array(45,0,349,760),384=>array(70,-14,555,760),385=>array(-48,0,587,729),386=>array(123,0,587,729),387=>array(114,-14,555,760),390=>array(83,-14,644,742),391=>array(83,-14,779,882),392=>array(68,-14,623,719),393=>array(5,0,687,729),394=>array(-49,0,687,729),395=>array(123,0,587,729),396=>array(114,-14,555,760),397=>array(76,-209,534,547),398=>array(122,0,542,729),399=>array(82,-14,706,742),400=>array(76,-14,531,742),401=>array(5,-178,492,729),402=>array(-3,-208,349,760),403=>array(83,-14,786,882),404=>array(91,-210,612,661),405=>array(113,0,863,760),406=>array(121,0,347,729),407=>array(24,0,271,729),408=>array(173,0,736,729),409=>array(112,0,500,760),410=>array(4,0,271,760),412=>array(113,-13,868,729),413=>array(5,-178,596,729),414=>array(113,-208,526,560),415=>array(82,-14,706,742),416=>array(76,-14,772,758),417=>array(82,-17,677,573),418=>array(82,-14,827,742),419=>array(79,-208,668,560),420=>array(-49,0,542,729),421=>array(114,-208,555,760),422=>array(123,-129,641,729),423=>array(89,-14,553,742),424=>array(75,-14,449,560),425=>array(98,0,568,729),427=>array(50,-208,346,702),428=>array(24,0,589,729),429=>array(50,0,346,760),430=>array(22,-178,589,729),431=>array(109,-4,797,760),432=>array(114,-13,699,573),433=>array(57,-15,707,729),434=>array(121,0,657,729),435=>array(22,0,716,729),436=>array(54,-189,674,560),437=>array(45,0,640,729),438=>array(43,0,482,547),448=>array(123,-208,172,729),449=>array(123,-208,370,729),450=>array(27,-208,434,729),451=>array(124,0,171,729),452=>array(122,0,1352,928),453=>array(122,0,1211,800),454=>array(114,-14,1071,800),455=>array(122,-178,742,729),456=>array(122,-208,711,760),457=>array(113,-208,344,760),458=>array(121,-178,842,729),459=>array(121,-208,817,760),460=>array(113,-208,711,760),461=>array(30,0,651,928),462=>array(82,-14,500,800),463=>array(7,0,288,928),464=>array(0,0,281,800),465=>array(82,-14,706,928),466=>array(79,-17,532,800),467=>array(112,-14,620,928),468=>array(113,-13,526,800),469=>array(112,-14,620,1025),470=>array(113,-13,526,899),471=>array(112,-14,620,1044),472=>array(113,-13,526,892),473=>array(112,-14,620,1044),474=>array(113,-13,526,892),475=>array(112,-14,620,1047),476=>array(113,-13,526,892),477=>array(79,-14,540,560),478=>array(30,0,651,1025),479=>array(82,-14,500,899),480=>array(30,0,651,1025),481=>array(82,-14,500,869),482=>array(27,0,910,900),483=>array(82,-14,914,743),484=>array(83,-14,752,742),485=>array(81,-208,598,560),486=>array(83,-14,668,928),487=>array(81,-208,521,798),488=>array(63,0,644,928),489=>array(42,0,547,928),490=>array(82,-196,706,742),491=>array(79,-196,532,560),492=>array(82,-196,706,899),493=>array(79,-196,532,745),496=>array(-18,-208,281,800),497=>array(122,0,1352,729),498=>array(122,0,1211,729),499=>array(114,-14,1071,760),500=>array(83,-14,668,928),501=>array(81,-208,521,798),504=>array(121,0,596,927),505=>array(113,0,526,799),506=>array(30,0,651,1000),507=>array(82,-14,611,1026),508=>array(27,0,910,928),509=>array(82,-14,914,798),510=>array(59,-29,730,928),511=>array(39,-42,569,798),512=>array(30,0,651,930),513=>array(82,-14,500,799),514=>array(30,0,651,901),515=>array(82,-14,500,785),516=>array(122,0,542,930),517=>array(79,-14,540,798),518=>array(122,0,542,901),519=>array(79,-14,540,785),520=>array(-29,0,287,930),521=>array(-13,0,299,798),522=>array(2,0,308,901),523=>array(-14,0,292,785),524=>array(82,-14,706,930),525=>array(79,-17,532,799),526=>array(82,-14,706,901),527=>array(79,-17,532,785),528=>array(112,0,641,930),529=>array(81,0,410,798),530=>array(123,0,641,901),531=>array(114,0,421,785),532=>array(112,-14,620,930),533=>array(113,-13,526,799),534=>array(112,-14,620,901),535=>array(113,-13,526,785),536=>array(89,-240,553,742),537=>array(75,-240,449,560),538=>array(22,-240,589,729),539=>array(50,-240,346,702),542=>array(122,0,628,928),543=>array(0,0,526,928),548=>array(45,-206,640,729),549=>array(43,-208,482,547),550=>array(30,0,651,878),551=>array(82,-14,500,723),552=>array(122,-188,542,729),553=>array(79,-188,540,560),554=>array(82,-14,706,1025),555=>array(79,-17,532,899),556=>array(82,-14,706,1025),557=>array(79,-17,532,864),558=>array(82,-14,706,876),559=>array(79,-17,532,722),560=>array(82,-14,706,1025),561=>array(79,-17,532,899),562=>array(22,0,587,899),563=>array(54,-189,538,745),567=>array(-18,-208,162,547),568=>array(114,-14,952,760),569=>array(114,-208,952,560),581=>array(30,0,651,729),584=>array(5,-178,290,729),585=>array(-18,-208,264,760),587=>array(114,-208,690,560),588=>array(5,0,641,729),589=>array(8,0,410,560),592=>array(87,-14,505,560),593=>array(114,-14,555,560),594=>array(114,-14,555,560),595=>array(114,-14,555,760),596=>array(68,-14,488,560),598=>array(114,-208,690,760),599=>array(114,-14,690,760),600=>array(79,-14,540,560),601=>array(79,-14,540,560),603=>array(89,-14,473,561),604=>array(89,-14,473,561),607=>array(-18,-208,264,547),608=>array(81,-208,656,719),609=>array(81,-208,521,547),611=>array(126,-210,576,547),613=>array(113,-208,526,547),614=>array(113,0,526,760),615=>array(113,-208,526,760),616=>array(10,0,268,760),617=>array(114,0,271,547),618=>array(57,0,314,547),621=>array(114,-208,271,760),623=>array(113,-13,868,547),624=>array(113,-208,868,547),625=>array(113,-208,868,560),626=>array(-21,-208,526,560),627=>array(113,-208,661,560),628=>array(114,0,523,547),629=>array(79,-17,532,560),632=>array(81,-208,579,754),633=>array(0,-13,296,547),634=>array(0,-13,296,755),635=>array(0,-208,432,547),636=>array(114,-207,410,560),637=>array(114,-208,410,560),638=>array(64,0,437,560),639=>array(94,0,466,560),640=>array(48,0,482,547),641=>array(48,0,482,547),642=>array(75,-208,449,560),643=>array(-3,-208,349,760),645=>array(38,-208,390,547),647=>array(50,-155,346,547),648=>array(50,-208,346,702),649=>array(57,-13,586,547),650=>array(55,-15,564,547),651=>array(114,0,496,547),652=>array(63,0,528,547),653=>array(63,0,726,547),654=>array(54,0,538,736),656=>array(43,-208,593,547),665=>array(113,0,506,547),668=>array(113,0,541,547),670=>array(132,-212,520,548),671=>array(125,0,481,560),672=>array(114,-208,718,760),675=>array(78,-14,946,760),678=>array(69,0,752,702),679=>array(50,-208,623,760),681=>array(45,-198,782,760),682=>array(113,0,634,760),683=>array(113,0,585,760),686=>array(0,-208,548,760),687=>array(0,-208,683,760),699=>array(114,499,183,729),700=>array(114,499,183,729),702=>array(57,492,191,760),710=>array(110,616,391,800),711=>array(110,616,391,800),713=>array(104,702,396,745),714=>array(181,616,380,800),715=>array(100,617,299,800),717=>array(104,-127,396,-84),718=>array(100,-235,299,-53),719=>array(181,-236,380,-53),728=>array(97,645,403,785),729=>array(228,658,272,722),730=>array(130,624,370,864),731=>array(173,-188,364,0),732=>array(104,650,395,767),733=>array(130,615,441,800),741=>array(104,0,372,668),742=>array(104,0,372,668),743=>array(104,0,372,668),744=>array(104,0,372,668),745=>array(104,0,372,668),755=>array(130,-238,370,3),759=>array(104,-170,395,-54),768=>array(-401,617,-202,800),769=>array(-320,616,-121,800),770=>array(-391,616,-110,800),771=>array(-397,650,-106,767),772=>array(-394,702,-102,745),773=>array(-510,686,10,724),774=>array(-407,645,-101,785),775=>array(-268,658,-223,722),776=>array(-342,699,-159,758),777=>array(-340,618,-161,847),778=>array(-371,624,-131,864),779=>array(-368,615,-57,800),780=>array(-388,616,-107,800),781=>array(-271,615,-229,832),782=>array(-383,615,-117,832),783=>array(-438,615,-126,800),784=>array(-407,645,-101,819),785=>array(-407,645,-101,785),786=>array(-210,489,-110,645),787=>array(-278,635,-187,844),788=>array(-305,635,-213,844),789=>array(-48,575,42,760),790=>array(-401,-266,-202,-83),791=>array(-320,-267,-121,-83),795=>array(-123,382,65,573),803=>array(-272,-184,-228,-120),804=>array(-342,-143,-159,-84),805=>array(-355,-241,-146,-32),806=>array(-308,-240,-209,-84),807=>array(-358,-188,-167,0),808=>array(-327,-188,-136,0),812=>array(-388,-269,-107,-85),813=>array(-391,-267,-110,-83),814=>array(-407,-222,-101,-82),815=>array(-407,-224,-101,-83),816=>array(-397,-211,-106,-95),817=>array(-394,-127,-102,-84),818=>array(-510,-236,10,-198),819=>array(-510,-236,10,-41),820=>array(-557,240,-41,343),821=>array(-317,266,-60,306),822=>array(-635,266,0,306),823=>array(-568,-42,-38,589),824=>array(-733,-29,-63,754),831=>array(-510,528,10,724),856=>array(-272,658,-228,722),860=>array(-446,-237,445,-59),861=>array(-446,802,445,980),865=>array(-446,751,446,929),880=>array(122,0,579,729),881=>array(114,0,497,547),882=>array(123,0,739,729),883=>array(121,0,527,729),884=>array(78,557,203,800),885=>array(78,-208,203,35),886=>array(123,0,632,729),887=>array(113,0,545,547),890=>array(210,-208,300,-45),891=>array(68,-14,488,560),892=>array(68,-14,488,560),893=>array(68,-14,488,560),894=>array(125,-116,193,480),900=>array(181,616,380,800),901=>array(159,699,380,978),902=>array(30,0,651,800),903=>array(133,306,184,367),904=>array(-12,0,657,800),905=>array(-6,0,739,800),906=>array(-9,0,286,800),908=>array(-7,-14,725,800),910=>array(-15,0,795,800),911=>array(-18,0,733,800),912=>array(57,0,279,978),913=>array(30,0,651,729),914=>array(123,0,587,729),915=>array(122,0,552,729),916=>array(30,0,651,729),917=>array(122,0,542,729),918=>array(45,0,640,729),919=>array(122,0,628,729),920=>array(82,-14,706,742),921=>array(121,0,172,729),922=>array(173,0,644,729),923=>array(30,0,651,729),924=>array(161,0,702,729),925=>array(121,0,596,729),926=>array(98,0,548,729),927=>array(82,-14,706,742),928=>array(123,0,629,729),929=>array(122,0,542,729),931=>array(98,0,568,729),932=>array(22,0,589,729),933=>array(22,0,587,729),934=>array(83,0,711,729),935=>array(59,0,629,729),936=>array(82,0,706,729),937=>array(57,0,707,744),938=>array(56,0,239,913),939=>array(22,0,587,913),940=>array(80,-12,596,800),941=>array(89,-14,473,800),942=>array(113,-208,526,800),943=>array(90,0,290,800),944=>array(96,0,498,978),945=>array(80,-12,596,559),946=>array(116,-208,542,760),947=>array(16,-208,539,547),948=>array(76,-14,534,742),949=>array(89,-14,473,561),950=>array(67,-210,496,760),951=>array(113,-208,526,560),952=>array(79,-11,534,768),953=>array(114,0,271,547),954=>array(113,0,530,547),955=>array(54,0,538,736),956=>array(107,-208,618,547),957=>array(67,0,491,547),958=>array(68,-210,479,760),959=>array(79,-17,532,560),960=>array(36,-14,574,547),961=>array(113,-208,555,560),962=>array(68,-210,488,560),963=>array(81,-14,581,547),964=>array(59,0,542,547),965=>array(96,0,498,547),966=>array(81,-208,579,556),967=>array(29,-208,549,547),968=>array(74,-208,583,547),969=>array(90,-14,735,547),970=>array(57,0,279,758),971=>array(96,0,498,758),972=>array(79,-17,532,800),973=>array(96,0,498,800),974=>array(90,-14,735,800),975=>array(173,-208,644,729),981=>array(81,-208,579,754),982=>array(56,-14,769,547),984=>array(82,-207,706,742),985=>array(79,-207,532,560),988=>array(122,0,492,729),1009=>array(113,-208,555,560),1010=>array(68,-14,488,560),1011=>array(-18,-208,162,760),1012=>array(82,-14,706,742),1013=>array(68,-14,480,560),1014=>array(95,-14,507,560),1015=>array(122,0,543,729),1016=>array(114,-208,555,760),1017=>array(83,-14,644,742),1020=>array(42,-208,555,560),1021=>array(83,-14,644,742),1022=>array(83,-14,644,742),1023=>array(83,-14,644,742),1024=>array(122,0,542,927),1025=>array(122,0,542,898),1026=>array(21,-178,684,729),1027=>array(122,0,552,927),1028=>array(83,-14,644,742),1029=>array(89,-14,553,742),1030=>array(121,0,172,729),1031=>array(56,0,239,913),1032=>array(5,-178,171,729),1033=>array(51,-14,996,729),1034=>array(122,0,947,729),1035=>array(21,0,684,729),1036=>array(123,0,616,927),1037=>array(123,0,632,927),1038=>array(44,-14,565,928),1039=>array(123,-157,629,729),1040=>array(30,0,651,729),1041=>array(123,0,587,729),1042=>array(123,0,587,729),1043=>array(122,0,552,729),1044=>array(80,-157,696,729),1045=>array(122,0,542,729),1046=>array(58,0,982,729),1047=>array(76,-14,565,742),1048=>array(123,0,632,729),1049=>array(123,0,632,928),1050=>array(123,0,616,729),1051=>array(51,-14,628,729),1052=>array(161,0,702,729),1053=>array(122,0,628,729),1054=>array(82,-14,706,742),1055=>array(123,0,629,729),1056=>array(122,0,542,729),1057=>array(83,-14,644,742),1058=>array(22,0,589,729),1059=>array(44,-14,565,729),1060=>array(93,0,767,729),1061=>array(59,0,629,729),1062=>array(122,-157,696,729),1063=>array(116,0,568,729),1064=>array(122,0,946,729),1065=>array(122,-157,1014,729),1066=>array(25,0,737,729),1067=>array(123,0,759,729),1068=>array(123,0,587,729),1069=>array(83,-14,644,742),1070=>array(121,-14,949,742),1071=>array(84,0,571,729),1072=>array(82,-14,500,560),1073=>array(79,-17,532,777),1074=>array(113,0,506,547),1075=>array(120,0,452,547),1076=>array(73,-138,607,547),1077=>array(79,-14,540,560),1078=>array(63,0,845,547),1079=>array(89,-14,473,561),1080=>array(113,0,545,547),1081=>array(113,0,545,760),1082=>array(113,0,530,547),1083=>array(47,-14,538,547),1084=>array(137,0,617,547),1085=>array(113,0,541,547),1086=>array(79,-17,532,560),1087=>array(113,0,541,547),1088=>array(114,-208,555,560),1089=>array(68,-14,488,560),1090=>array(34,0,515,547),1091=>array(54,-189,538,547),1092=>array(74,-208,781,760),1093=>array(56,0,536,547),1094=>array(112,-138,610,547),1095=>array(97,0,477,547),1096=>array(112,0,800,547),1097=>array(112,-138,868,547),1098=>array(41,0,643,547),1099=>array(113,0,649,547),1100=>array(113,0,506,547),1101=>array(68,-14,479,560),1102=>array(112,-14,734,563),1103=>array(66,0,479,547),1104=>array(79,-14,540,802),1105=>array(79,-14,540,722),1106=>array(41,-208,536,760),1107=>array(120,0,452,803),1108=>array(68,-14,479,560),1109=>array(75,-14,449,560),1110=>array(112,0,157,760),1111=>array(48,0,231,758),1112=>array(-18,-208,162,760),1113=>array(47,-14,818,547),1114=>array(114,0,818,547),1115=>array(41,0,544,760),1116=>array(113,0,530,803),1117=>array(113,0,545,802),1118=>array(54,-189,538,760),1119=>array(116,-138,546,547),1121=>array(90,-14,735,547),1122=>array(20,0,669,729),1123=>array(15,0,583,760),1124=>array(121,-14,890,742),1125=>array(112,-14,688,560),1136=>array(82,0,706,729),1137=>array(74,-208,583,547),1138=>array(82,-14,706,742),1168=>array(122,0,526,879),1169=>array(120,0,452,701),1176=>array(76,-188,565,742),1177=>array(89,-188,473,561),1184=>array(11,0,763,729),1185=>array(22,0,648,547),1188=>array(122,0,1008,729),1189=>array(114,0,829,547),1194=>array(83,-188,644,742),1195=>array(68,-188,488,560),1198=>array(22,0,587,729),1199=>array(54,-211,538,547),1204=>array(22,-157,885,729),1205=>array(22,-138,761,547),1210=>array(116,0,568,729),1211=>array(113,0,526,760),1216=>array(113,0,158,760),1217=>array(58,0,982,928),1218=>array(63,0,845,785),1223=>array(122,-208,628,729),1224=>array(113,-208,541,547),1232=>array(30,0,651,946),1233=>array(82,-14,500,765),1234=>array(30,0,651,913),1235=>array(82,-14,500,758),1236=>array(27,0,910,729),1237=>array(82,-14,914,561),1238=>array(122,0,542,928),1239=>array(79,-14,540,785),1240=>array(82,-14,706,742),1241=>array(79,-14,540,560),1242=>array(82,-14,706,913),1243=>array(79,-14,540,758),1244=>array(58,0,982,913),1245=>array(63,0,845,758),1246=>array(76,-14,565,913),1247=>array(89,-14,473,758),1250=>array(123,0,632,899),1251=>array(113,0,545,745),1252=>array(123,0,632,913),1253=>array(113,0,545,758),1254=>array(82,-14,706,913),1255=>array(79,-17,532,758),1256=>array(82,-14,706,742),1257=>array(79,-17,532,560),1258=>array(82,-14,706,913),1259=>array(79,-17,532,758),1260=>array(83,-14,644,913),1261=>array(68,-14,479,758),1262=>array(44,-14,565,899),1263=>array(54,-189,538,745),1264=>array(44,-14,565,913),1265=>array(54,-189,538,758),1266=>array(44,-14,565,927),1267=>array(54,-189,538,800),1268=>array(116,0,568,913),1269=>array(97,0,477,758),1272=>array(123,0,759,913),1273=>array(113,0,649,758),1278=>array(59,0,629,729),1279=>array(56,0,536,547),1280=>array(99,0,563,729),1281=>array(83,0,477,547),1296=>array(76,-14,531,742),1297=>array(89,-14,473,561),1298=>array(51,-208,628,729),1299=>array(47,-208,538,547),1300=>array(51,-14,1113,729),1301=>array(47,-14,938,547),1306=>array(82,-129,706,742),1307=>array(114,-208,555,560),1308=>array(69,0,895,729),1309=>array(63,0,726,547),1329=>array(112,-29,719,729),1330=>array(112,0,634,743),1331=>array(73,0,716,743),1332=>array(78,0,731,743),1333=>array(112,-14,634,729),1334=>array(103,0,676,743),1335=>array(112,0,596,729),1336=>array(112,0,634,743),1337=>array(112,-15,853,743),1338=>array(78,-14,721,729),1339=>array(112,0,620,729),1340=>array(122,0,526,729),1341=>array(112,-14,929,729),1342=>array(119,-14,781,743),1343=>array(111,0,620,729),1344=>array(44,-12,591,729),1345=>array(93,-21,666,743),1346=>array(78,0,731,743),1347=>array(59,0,746,740),1348=>array(112,-14,765,729),1349=>array(79,-15,649,744),1350=>array(24,-14,677,729),1351=>array(103,-15,677,729),1352=>array(112,0,620,743),1353=>array(88,-15,660,743),1354=>array(73,0,777,743),1355=>array(107,0,685,743),1356=>array(112,0,783,743),1357=>array(112,-14,620,729),1358=>array(78,0,731,729),1359=>array(87,-15,649,744),1360=>array(112,0,620,743),1361=>array(79,-15,649,744),1362=>array(112,0,563,729),1363=>array(78,0,706,729),1364=>array(73,0,669,743),1365=>array(82,-14,706,742),1366=>array(83,-11,711,729),1370=>array(114,499,183,729),1371=>array(17,670,216,853),1372=>array(2,669,346,925),1373=>array(5,670,205,853),1374=>array(16,666,358,872),1375=>array(0,702,366,745),1377=>array(113,-13,868,547),1378=>array(113,-208,526,560),1379=>array(78,-208,678,560),1380=>array(113,-208,718,560),1381=>array(113,-13,526,760),1382=>array(78,-208,677,560),1383=>array(113,0,526,760),1384=>array(113,-208,526,560),1385=>array(113,-208,796,560),1386=>array(78,-13,678,760),1387=>array(113,-208,526,760),1388=>array(113,-208,355,547),1389=>array(113,-208,799,760),1390=>array(79,-17,532,774),1391=>array(113,-208,526,760),1392=>array(113,0,526,760),1393=>array(74,-13,509,760),1394=>array(113,-208,687,560),1395=>array(68,-13,537,789),1396=>array(113,-13,695,760),1397=>array(-18,-208,162,547),1398=>array(0,-13,556,760),1399=>array(62,-208,483,562),1400=>array(113,0,526,560),1401=>array(30,-208,359,563),1402=>array(113,-208,868,547),1403=>array(56,-208,502,562),1404=>array(113,0,602,560),1405=>array(113,-13,526,547),1406=>array(113,-208,676,760),1407=>array(113,-13,895,560),1408=>array(113,-208,526,560),1409=>array(81,-208,521,560),1410=>array(113,0,453,547),1411=>array(113,-208,895,760),1412=>array(59,-208,571,560),1413=>array(79,-17,532,560),1414=>array(69,-208,826,760),1415=>array(113,-13,812,760),1417=>array(144,0,193,480),1418=>array(49,208,312,294),1652=>array(67,810,234,1048),4304=>array(49,0,420,550),4305=>array(49,0,420,770),4306=>array(49,-222,469,511),4307=>array(49,-222,677,511),4308=>array(49,-222,420,511),4309=>array(49,-222,419,511),4310=>array(39,0,419,770),4311=>array(49,0,661,511),4312=>array(49,5,419,511),4313=>array(49,-222,420,510),4314=>array(49,-222,921,513),4315=>array(49,0,420,770),4316=>array(59,0,430,764),4317=>array(49,5,694,511),4318=>array(49,0,420,770),4319=>array(49,-222,420,524),4320=>array(49,5,705,771),4321=>array(59,0,430,770),4322=>array(49,-222,529,604),4323=>array(17,-222,418,511),4324=>array(68,-222,671,511),4325=>array(49,-222,419,770),4326=>array(49,-222,694,511),4327=>array(49,-222,420,506),4328=>array(49,0,420,770),4329=>array(59,5,430,770),4330=>array(49,-222,464,511),4331=>array(49,0,420,770),4332=>array(59,0,430,770),4333=>array(49,-222,419,770),4334=>array(59,0,430,770),4335=>array(49,-222,420,551),4336=>array(49,0,419,770),4337=>array(49,0,419,770),4338=>array(49,-78,420,511),4339=>array(49,-222,420,510),4340=>array(49,-222,420,769),4341=>array(49,0,476,770),4342=>array(49,-222,706,511),4343=>array(49,-222,468,511),4344=>array(49,-222,420,506),4345=>array(49,-222,470,511),4346=>array(49,-37,403,511),4347=>array(49,24,367,486),4348=>array(49,370,255,760),5760=>array(-10,267,487,307),5761=>array(-10,-125,502,307),5762=>array(-10,-125,722,307),5763=>array(-10,-125,941,307),5764=>array(-10,-125,1160,307),5765=>array(-10,-125,1379,307),5766=>array(-10,267,502,697),5767=>array(-10,267,722,697),5768=>array(-10,267,941,697),5769=>array(-10,267,1160,697),5770=>array(-10,267,1379,697),5771=>array(-10,-125,508,697),5772=>array(-10,-125,728,697),5773=>array(-10,-125,948,697),5774=>array(-10,-125,1168,697),5775=>array(-10,-125,1389,697),5776=>array(-10,41,502,533),5777=>array(-10,41,722,533),5778=>array(-10,41,939,533),5779=>array(-10,41,1159,533),5780=>array(-10,41,1379,533),5781=>array(-10,-125,508,697),5782=>array(-10,-125,762,697),5783=>array(-10,-83,798,307),5784=>array(-10,-240,1214,307),5785=>array(-10,267,1160,902),5786=>array(-10,103,693,307),5787=>array(55,49,517,523),5788=>array(-10,49,452,523),7426=>array(82,-14,914,561),7428=>array(68,-14,488,560),7433=>array(112,-213,157,547),7435=>array(111,0,576,547),7437=>array(137,0,617,547),7438=>array(113,0,545,547),7439=>array(79,-18,532,559),7440=>array(68,-14,488,560),7441=>array(55,47,632,500),7442=>array(55,57,629,476),7443=>array(31,9,662,540),7444=>array(79,-17,948,561),7446=>array(79,273,532,559),7447=>array(79,-18,533,269),7449=>array(66,0,479,547),7450=>array(66,0,479,547),7456=>array(63,0,528,547),7457=>array(63,0,726,547),7458=>array(43,0,482,547),7462=>array(120,0,452,547),7463=>array(63,0,528,547),7464=>array(113,0,541,547),7467=>array(47,-14,538,547),7543=>array(81,-208,521,560),7680=>array(30,-241,651,729),7681=>array(82,-241,500,560),7682=>array(123,0,587,875),7683=>array(114,-14,555,877),7684=>array(123,-184,587,729),7685=>array(114,-184,555,760),7686=>array(123,-127,587,729),7687=>array(114,-127,555,760),7688=>array(83,-188,644,928),7689=>array(68,-188,488,800),7690=>array(122,0,687,876),7691=>array(114,-14,555,877),7692=>array(122,-184,687,729),7693=>array(114,-184,555,760),7694=>array(122,-127,687,729),7695=>array(114,-127,555,760),7696=>array(122,-188,687,729),7697=>array(114,-188,555,760),7698=>array(122,-240,687,729),7699=>array(114,-240,555,760),7700=>array(122,0,542,1044),7701=>array(79,-14,540,921),7702=>array(122,0,542,1044),7703=>array(79,-14,540,921),7704=>array(122,-240,542,729),7705=>array(79,-240,540,560),7706=>array(122,-170,542,729),7707=>array(79,-170,540,560),7708=>array(122,-188,542,928),7709=>array(79,-188,540,785),7710=>array(122,0,492,876),7711=>array(45,0,349,878),7712=>array(83,-14,668,887),7713=>array(81,-208,521,745),7714=>array(122,0,628,875),7715=>array(113,0,526,877),7716=>array(122,-184,628,729),7717=>array(113,-184,526,760),7718=>array(122,0,628,914),7719=>array(44,0,526,913),7720=>array(8,-189,628,729),7721=>array(0,-189,526,760),7722=>array(122,-222,628,729),7723=>array(113,-222,526,760),7724=>array(15,-170,306,729),7725=>array(-7,-170,284,760),7726=>array(57,0,272,1044),7727=>array(47,0,263,886),7728=>array(173,0,644,928),7729=>array(116,0,547,928),7730=>array(173,-184,644,729),7731=>array(159,-184,547,760),7732=>array(173,-127,644,729),7733=>array(159,-127,547,760),7734=>array(122,-184,526,729),7735=>array(119,-184,167,760),7736=>array(1,-184,526,927),7737=>array(-1,-184,291,899),7738=>array(122,-127,526,729),7739=>array(-6,-127,286,760),7740=>array(122,-240,526,729),7741=>array(-0,-240,280,760),7742=>array(161,0,702,928),7743=>array(113,0,868,800),7744=>array(161,0,702,876),7745=>array(113,0,868,722),7746=>array(161,-184,702,729),7747=>array(113,-184,868,560),7748=>array(121,0,596,875),7749=>array(113,0,526,722),7750=>array(121,-184,596,729),7751=>array(113,-184,526,560),7752=>array(121,-127,596,729),7753=>array(113,-127,526,560),7754=>array(121,-240,596,729),7755=>array(113,-240,526,560),7756=>array(82,-14,706,1044),7757=>array(79,-17,532,881),7758=>array(82,-14,706,1042),7759=>array(79,-17,532,882),7760=>array(82,-14,706,1044),7761=>array(79,-17,532,921),7762=>array(82,-14,706,1044),7763=>array(79,-17,532,921),7764=>array(122,0,542,928),7765=>array(114,-208,555,800),7766=>array(122,0,542,876),7767=>array(114,-208,555,722),7768=>array(123,0,641,875),7769=>array(114,0,410,722),7770=>array(123,-184,641,729),7771=>array(114,-184,410,560),7772=>array(123,-184,641,899),7773=>array(114,-184,410,745),7774=>array(123,-127,641,729),7775=>array(41,-127,410,560),7776=>array(89,-14,553,876),7777=>array(75,-14,449,722),7778=>array(89,-184,553,742),7779=>array(75,-184,449,560),7780=>array(89,-14,553,928),7781=>array(75,-14,451,800),7782=>array(89,-14,553,1005),7783=>array(75,-14,449,925),7784=>array(89,-184,553,876),7785=>array(75,-184,449,723),7786=>array(22,0,589,876),7787=>array(50,0,346,877),7788=>array(22,-184,589,729),7789=>array(50,-184,346,702),7790=>array(22,-127,589,729),7791=>array(50,-127,390,702),7792=>array(22,-240,589,729),7793=>array(50,-240,379,702),7794=>array(112,-143,620,729),7795=>array(113,-143,526,547),7796=>array(112,-170,620,729),7797=>array(113,-170,526,547),7798=>array(112,-240,620,729),7799=>array(113,-240,526,547),7800=>array(112,-14,620,1044),7801=>array(113,-13,526,990),7802=>array(112,-14,620,1025),7803=>array(113,-13,526,869),7804=>array(30,0,651,926),7805=>array(63,0,528,767),7806=>array(30,-184,651,729),7807=>array(63,-184,528,547),7808=>array(69,0,895,931),7809=>array(63,0,726,802),7810=>array(69,0,895,931),7811=>array(63,0,726,803),7812=>array(69,0,895,913),7813=>array(63,0,726,758),7814=>array(69,0,895,875),7815=>array(63,0,726,722),7816=>array(69,-184,895,729),7817=>array(63,-184,726,547),7818=>array(59,0,629,876),7819=>array(56,0,536,722),7820=>array(59,0,629,913),7821=>array(56,0,536,758),7822=>array(22,0,587,876),7823=>array(54,-189,538,722),7824=>array(45,0,640,928),7825=>array(43,0,482,800),7826=>array(45,-184,640,729),7827=>array(43,-184,482,547),7828=>array(45,-127,640,729),7829=>array(43,-127,482,547),7830=>array(113,-127,526,760),7831=>array(50,0,346,913),7832=>array(63,0,726,864),7833=>array(54,-189,538,864),7834=>array(82,-14,672,760),7835=>array(45,0,349,878),7836=>array(1,0,349,760),7837=>array(45,0,349,760),7838=>array(135,-14,713,743),7839=>array(76,-14,534,742),7840=>array(30,-184,651,729),7841=>array(82,-184,500,560),7842=>array(30,0,651,1029),7843=>array(82,-14,500,847),7844=>array(30,0,651,1028),7845=>array(82,-14,566,846),7846=>array(30,0,651,1028),7847=>array(82,-14,500,847),7848=>array(30,0,651,1081),7849=>array(82,-14,545,899),7850=>array(30,0,651,1050),7851=>array(82,-14,500,868),7852=>array(30,-184,651,928),7853=>array(82,-184,500,800),7854=>array(30,0,651,1044),7855=>array(82,-14,500,877),7856=>array(30,0,651,1044),7857=>array(82,-14,500,877),7858=>array(30,0,651,1104),7859=>array(82,-14,500,938),7860=>array(30,0,651,1037),7861=>array(82,-14,500,870),7862=>array(30,-184,651,946),7863=>array(82,-184,500,765),7864=>array(122,-184,542,729),7865=>array(79,-184,540,560),7866=>array(122,0,542,1029),7867=>array(79,-14,540,847),7868=>array(122,0,542,914),7869=>array(79,-14,540,767),7870=>array(122,0,618,1028),7871=>array(79,-14,594,846),7872=>array(122,0,542,1028),7873=>array(79,-14,540,847),7874=>array(122,0,588,1081),7875=>array(79,-14,574,899),7876=>array(122,0,542,1050),7877=>array(79,-14,540,868),7878=>array(122,-184,542,928),7879=>array(79,-184,540,800),7880=>array(52,0,231,1029),7881=>array(41,0,221,847),7882=>array(121,-184,172,729),7883=>array(112,-184,162,760),7884=>array(82,-184,706,742),7885=>array(79,-184,532,560),7886=>array(82,-14,706,1029),7887=>array(79,-17,532,847),7888=>array(82,-14,706,1028),7889=>array(79,-17,582,846),7890=>array(82,-14,706,1028),7891=>array(79,-17,532,847),7892=>array(82,-14,706,1081),7893=>array(79,-17,561,899),7894=>array(82,-14,706,1050),7895=>array(79,-17,532,868),7896=>array(82,-184,706,928),7897=>array(79,-184,532,800),7898=>array(76,-14,772,927),7899=>array(82,-17,677,800),7900=>array(76,-14,772,927),7901=>array(82,-17,677,800),7902=>array(76,-14,772,1029),7903=>array(82,-17,677,847),7904=>array(76,-14,772,914),7905=>array(82,-17,677,767),7906=>array(76,-184,772,758),7907=>array(82,-184,677,573),7908=>array(112,-184,620,729),7909=>array(113,-184,526,547),7910=>array(112,-14,620,1029),7911=>array(113,-13,526,847),7912=>array(109,-4,797,927),7913=>array(114,-13,699,800),7914=>array(109,-4,797,927),7915=>array(114,-13,699,800),7916=>array(109,-4,797,1029),7917=>array(114,-13,699,847),7918=>array(109,-4,797,914),7919=>array(114,-13,699,767),7920=>array(109,-184,797,760),7921=>array(114,-184,699,573),7922=>array(22,0,587,931),7923=>array(54,-189,538,802),7924=>array(22,-184,587,729),7925=>array(54,-189,538,547),7926=>array(22,0,587,1032),7927=>array(54,-189,538,850),7928=>array(22,0,587,914),7929=>array(54,-189,538,767),7930=>array(122,0,738,729),7931=>array(16,0,462,760),7936=>array(80,-12,596,806),7937=>array(80,-12,596,806),7938=>array(80,-12,596,806),7939=>array(80,-12,596,806),7940=>array(80,-12,596,806),7941=>array(80,-12,596,806),7942=>array(80,-12,596,966),7943=>array(80,-12,596,966),7944=>array(30,0,651,806),7945=>array(30,0,651,806),7946=>array(12,0,844,806),7947=>array(18,0,844,806),7948=>array(13,0,736,806),7949=>array(17,0,768,806),7950=>array(18,0,675,966),7951=>array(17,0,709,966),7952=>array(89,-14,473,806),7953=>array(89,-14,473,806),7954=>array(89,-14,473,806),7955=>array(89,-14,473,806),7956=>array(89,-14,473,806),7957=>array(89,-14,473,806),7960=>array(13,0,622,806),7961=>array(18,0,622,806),7962=>array(12,0,876,806),7963=>array(18,0,885,806),7964=>array(13,0,809,806),7965=>array(17,0,838,806),7968=>array(113,-208,526,806),7969=>array(113,-208,526,806),7970=>array(113,-208,526,806),7971=>array(113,-208,526,806),7972=>array(113,-208,526,806),7973=>array(113,-208,526,806),7974=>array(113,-208,526,966),7975=>array(113,-208,526,966),7976=>array(13,0,713,806),7977=>array(18,0,711,806),7978=>array(12,0,962,806),7979=>array(18,0,965,806),7980=>array(13,0,903,806),7981=>array(17,0,927,806),7982=>array(18,0,810,966),7983=>array(17,0,823,966),7984=>array(85,0,271,806),7985=>array(85,0,271,806),7986=>array(-30,0,322,806),7987=>array(-20,0,329,806),7988=>array(12,0,327,806),7989=>array(-8,0,332,806),7990=>array(-11,0,280,966),7991=>array(-14,0,278,966),7992=>array(13,0,257,806),7993=>array(18,0,251,806),7994=>array(12,0,512,806),7995=>array(18,0,512,806),7996=>array(13,0,447,806),7997=>array(17,0,477,806),7998=>array(18,0,367,966),7999=>array(17,0,370,966),8000=>array(79,-17,532,806),8001=>array(79,-17,532,806),8002=>array(79,-17,532,806),8003=>array(79,-17,532,806),8004=>array(79,-17,532,806),8005=>array(79,-17,532,806),8008=>array(13,-14,723,806),8009=>array(18,-14,767,806),8010=>array(12,-14,1013,806),8011=>array(18,-14,1018,806),8012=>array(13,-14,857,806),8013=>array(17,-14,889,806),8016=>array(96,0,498,806),8017=>array(96,0,498,806),8018=>array(95,0,498,806),8019=>array(92,0,498,806),8020=>array(96,0,498,806),8021=>array(96,0,498,806),8022=>array(96,0,498,966),8023=>array(96,0,498,966),8025=>array(18,0,760,806),8027=>array(18,0,974,806),8029=>array(17,0,989,806),8031=>array(17,0,875,966),8032=>array(90,-14,735,806),8033=>array(90,-14,735,806),8034=>array(90,-14,735,806),8035=>array(90,-14,735,806),8036=>array(90,-14,735,806),8037=>array(90,-14,735,806),8038=>array(90,-14,735,966),8039=>array(90,-14,735,966),8040=>array(13,0,745,806),8041=>array(18,0,786,806),8042=>array(12,0,1032,806),8043=>array(18,0,1038,806),8044=>array(13,0,889,806),8045=>array(17,0,915,806),8046=>array(18,0,864,966),8047=>array(17,0,895,966),8048=>array(80,-12,596,800),8049=>array(80,-12,596,800),8050=>array(89,-14,473,800),8051=>array(89,-14,473,800),8052=>array(113,-208,526,800),8053=>array(113,-208,526,800),8054=>array(-40,0,271,800),8055=>array(90,0,290,800),8056=>array(79,-17,532,800),8057=>array(79,-17,532,800),8058=>array(96,0,498,800),8059=>array(96,0,498,800),8060=>array(90,-14,735,800),8061=>array(90,-14,735,800),8064=>array(80,-208,596,806),8065=>array(80,-208,596,806),8066=>array(80,-208,596,806),8067=>array(80,-208,596,806),8068=>array(80,-208,596,806),8069=>array(80,-208,596,806),8070=>array(80,-208,596,966),8071=>array(80,-208,596,966),8072=>array(30,-208,651,806),8073=>array(30,-208,651,806),8074=>array(12,-208,844,806),8075=>array(18,-208,844,806),8076=>array(13,-208,736,806),8077=>array(17,-208,768,806),8078=>array(18,-208,675,966),8079=>array(17,-208,709,966),8080=>array(113,-208,526,806),8081=>array(113,-208,526,806),8082=>array(113,-208,526,806),8083=>array(113,-208,526,806),8084=>array(113,-208,526,806),8085=>array(113,-208,526,806),8086=>array(113,-208,526,966),8087=>array(113,-208,526,966),8088=>array(13,-208,713,806),8089=>array(18,-208,711,806),8090=>array(12,-208,962,806),8091=>array(18,-208,965,806),8092=>array(13,-208,903,806),8093=>array(17,-208,927,806),8094=>array(18,-208,810,966),8095=>array(17,-208,823,966),8096=>array(90,-208,735,806),8097=>array(90,-208,735,806),8098=>array(90,-208,735,806),8099=>array(90,-208,735,806),8100=>array(90,-208,735,806),8101=>array(90,-208,735,806),8102=>array(90,-208,735,966),8103=>array(90,-208,735,966),8104=>array(13,-208,745,806),8105=>array(18,-208,786,806),8106=>array(12,-208,1032,806),8107=>array(18,-208,1038,806),8108=>array(13,-208,889,806),8109=>array(17,-208,915,806),8110=>array(18,-208,864,966),8111=>array(17,-208,895,966),8112=>array(80,-12,596,785),8113=>array(80,-12,596,745),8114=>array(80,-208,596,800),8115=>array(80,-208,596,559),8116=>array(80,-208,596,800),8118=>array(80,-12,596,767),8119=>array(80,-208,596,767),8120=>array(30,0,651,928),8121=>array(30,0,651,899),8122=>array(15,0,683,800),8123=>array(30,0,651,800),8124=>array(30,-208,651,729),8125=>array(200,597,291,806),8126=>array(210,-208,300,-45),8127=>array(200,597,291,806),8128=>array(104,650,395,767),8129=>array(104,699,395,938),8130=>array(113,-208,526,800),8131=>array(113,-208,526,560),8132=>array(113,-208,526,800),8134=>array(113,-208,526,767),8135=>array(113,-208,526,767),8136=>array(15,0,715,800),8137=>array(-12,0,657,800),8138=>array(15,0,807,800),8139=>array(-6,0,739,800),8140=>array(122,-208,628,729),8141=>array(76,597,428,806),8142=>array(97,597,413,806),8143=>array(104,597,395,966),8144=>array(-10,0,295,785),8145=>array(-14,0,278,745),8146=>array(-3,0,271,978),8147=>array(57,0,279,978),8150=>array(1,0,292,767),8151=>array(2,0,293,938),8152=>array(-5,0,300,928),8153=>array(2,0,294,899),8154=>array(15,0,352,800),8155=>array(-9,0,286,800),8157=>array(76,597,425,806),8158=>array(87,597,427,806),8159=>array(104,597,395,966),8160=>array(96,0,498,785),8161=>array(96,0,498,745),8162=>array(96,0,498,978),8163=>array(96,0,498,978),8164=>array(113,-208,555,806),8165=>array(113,-208,555,806),8166=>array(96,0,498,767),8167=>array(96,0,498,938),8168=>array(22,0,587,928),8169=>array(22,0,587,899),8170=>array(15,0,822,800),8171=>array(-15,0,795,800),8172=>array(18,0,624,806),8173=>array(100,699,342,978),8174=>array(159,699,380,978),8175=>array(100,617,299,800),8178=>array(90,-208,735,800),8179=>array(90,-208,735,547),8180=>array(90,-208,735,800),8182=>array(90,-14,735,767),8183=>array(90,-208,735,767),8184=>array(15,-14,859,800),8185=>array(-7,-14,725,800),8186=>array(15,0,865,800),8187=>array(-18,0,733,800),8188=>array(57,-208,707,744),8189=>array(181,616,380,800),8190=>array(205,597,296,806),8208=>array(49,254,312,294),8209=>array(49,254,312,294),8210=>array(49,254,587,294),8211=>array(49,254,451,294),8212=>array(49,254,951,294),8213=>array(0,254,1000,294),8214=>array(146,-236,354,764),8215=>array(-10,-236,510,-41),8216=>array(114,499,183,729),8217=>array(114,499,183,729),8218=>array(114,-117,183,116),8219=>array(-183,499,-114,729),8220=>array(114,499,385,729),8221=>array(114,499,382,729),8222=>array(114,-118,384,116),8223=>array(-382,499,-114,729),8224=>array(28,-96,472,729),8225=>array(28,-96,472,729),8228=>array(142,0,191,62),8229=>array(142,0,524,63),8230=>array(142,0,857,63),8240=>array(74,-14,1267,742),8241=>array(74,-14,1659,742),8249=>array(77,86,306,500),8250=>array(77,86,306,500),8251=>array(122,2,713,662),8252=>array(98,0,388,729),8253=>array(76,0,439,742),8254=>array(-10,686,510,724),8255=>array(-44,-237,847,-59),8256=>array(-44,751,847,929),8258=>array(37,-29,961,814),8259=>array(108,340,400,395),8260=>array(-169,-14,336,742),8261=>array(113,-132,280,760),8262=>array(113,-132,280,760),8263=>array(40,0,864,742),8264=>array(76,0,635,742),8265=>array(98,0,639,742),8267=>array(121,-96,552,729),8268=>array(105,220,352,509),8269=>array(148,220,395,509),8270=>array(37,-29,461,427),8271=>array(125,-116,193,517),8272=>array(-44,-237,847,929),8273=>array(37,-7,461,929),8274=>array(86,-93,392,729),8275=>array(49,250,951,382),8276=>array(-44,-241,847,-63),8304=>array(53,345,351,742),8305=>array(60,326,116,751),8308=>array(48,359,358,734),8320=>array(53,-14,351,383),8321=>array(67,0,346,370),8322=>array(46,-1,338,383),8323=>array(48,-14,340,383),8324=>array(48,0,358,375),8363=>array(79,-127,596,760),8364=>array(27,-14,573,742),8369=>array(81,0,576,729),8376=>array(35,0,602,729),8377=>array(51,0,583,729),8451=>array(116,-14,1053,742),8457=>array(116,0,868,729),8462=>array(39,0,525,760),8463=>array(40,0,525,760),8470=>array(121,0,1102,742),8471=>array(138,0,862,725),8486=>array(57,0,707,744),8487=>array(57,-15,707,729),8490=>array(173,0,644,729),8491=>array(30,0,651,920),8494=>array(61,-12,793,647),8498=>array(122,0,492,729),8500=>array(52,-13,413,395),8513=>array(106,-14,691,742),8514=>array(31,0,435,729),8515=>array(31,0,435,729),8516=>array(23,0,588,729),8523=>array(86,-14,718,742),8530=>array(67,-14,1319,742),8531=>array(67,-14,908,742),8532=>array(46,-14,908,742),8543=>array(67,-14,737,742),8544=>array(121,0,172,729),8545=>array(121,0,369,729),8546=>array(121,0,566,729),8547=>array(121,0,890,729),8548=>array(30,0,651,729),8549=>array(30,0,799,729),8550=>array(30,0,997,729),8551=>array(30,0,1194,729),8552=>array(121,0,861,729),8553=>array(59,0,629,729),8554=>array(59,0,810,729),8555=>array(59,0,1007,729),8556=>array(122,0,526,729),8557=>array(83,-14,644,742),8558=>array(122,0,687,729),8559=>array(161,0,702,729),8560=>array(112,0,157,760),8561=>array(112,0,337,760),8562=>array(112,0,517,760),8563=>array(112,0,748,760),8564=>array(63,0,528,547),8565=>array(63,0,690,760),8566=>array(63,0,870,760),8567=>array(63,0,1050,760),8568=>array(112,0,763,760),8569=>array(56,0,536,547),8570=>array(56,0,702,760),8571=>array(56,0,881,760),8572=>array(113,0,158,760),8573=>array(68,-14,488,560),8574=>array(114,-14,555,760),8575=>array(113,0,868,560),8576=>array(122,0,1202,729),8577=>array(122,0,687,729),8578=>array(122,0,1202,729),8579=>array(83,-14,644,742),8580=>array(68,-14,488,560),8581=>array(83,-208,644,742),8585=>array(53,-14,908,742),8592=>array(49,112,781,515),8593=>array(217,0,621,732),8594=>array(57,112,789,515),8595=>array(217,-3,621,729),8596=>array(49,112,789,515),8597=>array(217,-8,621,732),8598=>array(149,37,691,580),8599=>array(149,37,691,580),8600=>array(149,37,691,580),8601=>array(149,37,691,580),8644=>array(49,-35,789,662),8645=>array(71,-57,767,684),8646=>array(49,-35,789,662),8647=>array(49,-35,781,661),8648=>array(71,0,767,732),8649=>array(58,-35,790,661),8650=>array(71,0,767,732),8704=>array(30,0,651,729),8707=>array(122,0,542,729),8710=>array(30,0,651,729),8711=>array(30,0,651,729),8722=>array(106,293,732,334),8725=>array(16,-93,321,729),8726=>array(208,-54,514,768),8727=>array(100,85,524,542),8728=>array(179,178,447,447),8756=>array(13,121,440,562),8757=>array(13,121,440,562),8758=>array(13,121,64,563),8759=>array(13,121,441,562),8764=>array(80,283,556,415),9134=>array(234,-236,281,764),9167=>array(91,0,854,596),10731=>array(3,-233,491,807),10799=>array(161,54,677,573),11374=>array(161,-178,702,729),11375=>array(30,0,651,729),11381=>array(122,0,579,729),11382=>array(114,0,497,547),11383=>array(81,-12,579,556),11386=>array(79,-17,532,560),11800=>array(76,-14,439,728),11810=>array(113,403,280,760),11811=>array(113,403,280,760),11812=>array(113,-132,280,225),11813=>array(113,-132,280,225),11822=>array(76,0,439,742),42192=>array(123,0,587,729),42193=>array(122,0,542,729),42194=>array(62,0,481,729),42195=>array(122,0,687,729),42196=>array(22,0,589,729),42197=>array(22,0,589,729),42198=>array(83,-14,668,742),42199=>array(173,0,644,729),42200=>array(12,0,483,729),42201=>array(0,-14,389,729),42202=>array(83,-14,644,742),42203=>array(83,-14,644,742),42204=>array(45,0,640,729),42205=>array(122,0,492,729),42206=>array(122,0,492,729),42207=>array(161,0,702,729),42208=>array(121,0,596,729),42209=>array(122,0,526,729),42210=>array(89,-14,553,742),42211=>array(123,0,641,729),42212=>array(54,0,572,729),42213=>array(30,0,651,729),42214=>array(30,0,651,729),42215=>array(122,0,628,729),42216=>array(106,-14,691,742),42217=>array(123,0,512,743),42218=>array(69,0,895,729),42219=>array(59,0,629,729),42220=>array(22,0,587,729),42221=>array(68,0,532,729),42222=>array(30,0,651,729),42223=>array(30,0,651,729),42224=>array(122,0,542,729),42225=>array(89,0,510,729),42226=>array(121,0,172,729),42227=>array(82,-14,706,742),42228=>array(112,-14,620,729),42229=>array(112,0,620,743),42230=>array(31,0,435,729),42231=>array(83,0,648,729),42232=>array(98,0,202,124),42233=>array(71,-156,202,124),42234=>array(98,0,499,124),42235=>array(98,-156,499,124),42236=>array(71,-156,202,501),42237=>array(98,0,202,501),42238=>array(85,0,502,340),42239=>array(85,187,502,439),42564=>array(89,-14,553,742),42565=>array(75,-14,449,560),42566=>array(121,0,347,729),42567=>array(114,0,271,547),42576=>array(25,0,906,729),42577=>array(41,0,791,547),42580=>array(82,-14,910,742),42581=>array(79,-14,700,563),42582=>array(121,0,894,729),42583=>array(112,-14,701,560),42594=>array(80,-157,1009,729),42595=>array(73,-138,827,547),42596=>array(51,-14,1009,729),42597=>array(47,-14,825,547),42598=>array(161,0,1083,729),42599=>array(137,0,905,547),42600=>array(82,-14,706,742),42601=>array(79,-17,532,560),42602=>array(56,-14,799,742),42603=>array(55,-14,658,560),42604=>array(82,-14,1278,742),42605=>array(79,-17,940,560),42606=>array(28,-208,851,743),42636=>array(22,0,589,729),42637=>array(34,0,515,547),42644=>array(116,0,568,729),42645=>array(113,0,526,760),42760=>array(104,0,372,668),42761=>array(104,0,372,668),42762=>array(104,0,372,668),42763=>array(104,0,372,668),42764=>array(104,0,372,668),42765=>array(104,0,372,668),42766=>array(104,0,372,668),42767=>array(104,0,372,668),42768=>array(104,0,372,668),42769=>array(104,0,372,668),42770=>array(104,0,372,668),42771=>array(104,0,372,668),42772=>array(104,0,372,668),42773=>array(104,0,372,668),42774=>array(104,0,372,668),42779=>array(58,326,312,736),42780=>array(58,324,312,734),42781=>array(111,326,141,734),42782=>array(111,326,141,734),42783=>array(111,0,141,408),42786=>array(77,0,340,729),42787=>array(77,0,311,547),42788=>array(56,224,411,742),42789=>array(56,42,411,560),42790=>array(122,-178,628,729),42791=>array(113,-198,526,760),42800=>array(137,0,437,547),42801=>array(75,-14,449,560),42802=>array(30,0,1220,729),42803=>array(82,-14,873,560),42814=>array(83,-14,644,742),42815=>array(68,-14,488,560),42822=>array(148,0,625,729),42823=>array(139,0,253,760),42830=>array(82,-14,1278,742),42831=>array(79,-17,940,560),42880=>array(31,0,435,729),42881=>array(113,-208,158,560),42891=>array(177,235,224,729),42892=>array(113,458,160,729),42893=>array(116,0,568,729),43002=>array(112,0,800,547),43003=>array(83,0,453,729),43004=>array(62,0,481,729),43005=>array(161,0,702,729),43006=>array(121,0,172,928),43007=>array(80,0,1096,729),62464=>array(49,-7,477,770),62465=>array(49,-7,477,770),62466=>array(49,-7,516,770),62467=>array(49,-2,759,770),62468=>array(49,-7,477,770),62469=>array(49,-7,476,770),62470=>array(49,-7,487,770),62471=>array(49,-7,772,769),62472=>array(49,-7,476,769),62473=>array(49,-7,477,770),62474=>array(49,-2,988,770),62475=>array(49,-8,477,770),62476=>array(59,-7,486,764),62477=>array(49,-2,788,769),62478=>array(49,-7,477,770),62479=>array(49,-7,477,770),62480=>array(49,0,781,770),62481=>array(59,-7,486,770),62482=>array(49,-8,623,780),62483=>array(49,-7,506,770),62484=>array(49,-7,774,770),62485=>array(49,-7,477,770),62486=>array(49,-2,741,770),62487=>array(49,-7,477,770),62488=>array(49,-7,477,770),62489=>array(59,0,486,770),62490=>array(49,-7,554,770),62491=>array(49,-7,476,770),62492=>array(59,-7,486,770),62493=>array(49,-8,476,769),62494=>array(60,-7,486,770),62495=>array(49,-7,477,770),62496=>array(49,-7,476,770),62497=>array(49,-7,476,770),62498=>array(49,-69,477,770),62499=>array(49,-7,477,770),62500=>array(49,-7,476,769),62501=>array(49,-7,538,770),63173=>array(76,-14,534,742),64256=>array(45,0,685,760),64257=>array(45,0,513,760),64258=>array(45,0,513,760),64259=>array(45,0,849,760),64260=>array(45,0,849,760),64297=>array(106,293,732,627),65533=>array(15,-84,1011,912),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390,41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636,51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838,61=>838,62=>838,63=>531,64=>1000,65=>684,66=>655,67=>698,68=>770,69=>632,70=>575,71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603,81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685,91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635,101=>615,102=>352,103=>600,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634,111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592,121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500,169=>1000,170=>471,171=>612,172=>838,173=>361,174=>1000,175=>500,176=>500,177=>838,178=>401,179=>401,180=>483,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471,187=>612,188=>969,189=>969,190=>969,191=>536,192=>684,193=>684,194=>684,195=>684,196=>684,197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295,207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787,217=>732,218=>732,219=>732,220=>732,221=>611,222=>605,223=>676,224=>613,225=>613,226=>613,227=>613,228=>613,229=>613,230=>982,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278,237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612,247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684,257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698,267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632,277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>600,286=>775,287=>600,288=>775,289=>600,290=>775,291=>600,292=>752,293=>634,294=>916,295=>695,296=>295,297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590,307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278,317=>557,318=>375,319=>557,320=>342,321=>562,322=>284,323=>748,324=>634,325=>748,326=>634,327=>748,328=>634,329=>813,330=>757,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787,337=>612,338=>1070,339=>1023,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635,349=>521,350=>635,351=>521,352=>635,353=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732,361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732,371=>634,372=>989,373=>818,374=>611,375=>592,376=>611,377=>685,378=>525,379=>685,380=>525,381=>685,382=>525,383=>352,384=>635,385=>735,386=>686,387=>635,390=>698,391=>698,392=>550,393=>775,394=>824,395=>686,396=>635,397=>612,398=>632,399=>787,400=>585,401=>575,402=>352,403=>775,404=>685,405=>965,406=>354,407=>295,408=>690,409=>526,410=>278,412=>974,413=>748,414=>634,415=>787,416=>934,417=>757,418=>949,419=>759,420=>652,421=>635,422=>695,423=>635,424=>521,425=>632,427=>392,428=>611,429=>392,430=>611,431=>879,432=>779,433=>764,434=>721,435=>696,436=>805,437=>685,438=>525,448=>295,449=>492,450=>459,451=>295,452=>1422,453=>1299,454=>1154,455=>835,456=>787,457=>457,458=>931,459=>924,460=>797,461=>684,462=>613,463=>295,464=>278,465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634,475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>982,484=>775,485=>600,486=>775,487=>600,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,496=>278,497=>1422,498=>1299,499=>1154,500=>775,501=>600,504=>748,505=>634,506=>684,507=>613,508=>974,509=>982,510=>787,511=>612,512=>684,513=>613,514=>684,515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787,525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732,535=>634,536=>635,537=>521,538=>611,539=>392,542=>752,543=>634,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787,555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,567=>278,568=>1032,569=>1032,581=>684,584=>295,585=>278,587=>635,588=>695,589=>411,592=>614,593=>635,594=>635,595=>635,596=>550,598=>635,599=>727,600=>615,601=>615,603=>541,604=>541,607=>326,608=>637,609=>635,611=>685,613=>634,614=>634,615=>634,616=>278,617=>387,618=>372,621=>387,623=>974,624=>974,625=>974,626=>634,627=>634,628=>634,629=>612,632=>660,633=>411,634=>411,635=>411,636=>411,637=>411,638=>530,639=>530,640=>602,641=>602,642=>521,643=>336,645=>461,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592,656=>525,665=>580,668=>654,670=>667,671=>583,672=>712,675=>1014,678=>824,679=>610,681=>848,682=>706,683=>654,686=>661,687=>664,699=>318,700=>318,702=>307,710=>500,711=>500,713=>500,714=>483,715=>500,717=>500,718=>500,719=>483,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,741=>493,742=>493,743=>493,744=>493,745=>493,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,795=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,831=>0,847=>0,856=>0,860=>0,861=>0,865=>0,880=>654,881=>568,882=>862,883=>647,884=>278,885=>278,886=>748,887=>650,890=>361,891=>549,892=>550,893=>549,894=>337,900=>483,901=>500,902=>692,903=>318,904=>746,905=>871,906=>408,908=>813,910=>825,911=>826,912=>387,913=>684,914=>655,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295,922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611,933=>611,934=>860,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634,943=>387,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612,953=>387,954=>594,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587,963=>634,964=>602,965=>579,966=>660,967=>592,968=>660,969=>837,970=>387,971=>579,972=>612,973=>579,974=>837,975=>656,981=>660,982=>837,984=>787,985=>612,988=>575,1009=>635,1010=>550,1011=>278,1012=>787,1013=>615,1014=>615,1015=>605,1016=>635,1017=>698,1020=>635,1021=>698,1022=>698,1023=>698,1024=>632,1025=>632,1026=>786,1027=>557,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295,1033=>1094,1034=>1045,1035=>786,1036=>674,1037=>755,1038=>609,1039=>752,1040=>684,1041=>686,1042=>655,1043=>557,1044=>776,1045=>632,1046=>1040,1047=>636,1048=>755,1049=>755,1050=>674,1051=>752,1052=>863,1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>860,1061=>685,1062=>776,1063=>686,1064=>1068,1065=>1094,1066=>833,1067=>882,1068=>686,1069=>698,1070=>1031,1071=>695,1072=>613,1073=>612,1074=>586,1075=>491,1076=>677,1077=>615,1078=>908,1079=>541,1080=>659,1081=>659,1082=>594,1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>549,1091=>592,1092=>854,1093=>592,1094=>681,1095=>591,1096=>917,1097=>938,1098=>727,1099=>765,1100=>589,1101=>549,1102=>813,1103=>592,1104=>615,1105=>615,1106=>625,1107=>491,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278,1113=>898,1114=>892,1115=>652,1116=>594,1117=>659,1118=>592,1119=>662,1121=>837,1122=>769,1123=>667,1124=>942,1125=>749,1136=>787,1137=>660,1138=>787,1168=>557,1169=>491,1176=>636,1177=>541,1184=>856,1185=>832,1188=>1014,1189=>868,1194=>698,1195=>550,1198=>611,1199=>592,1204=>934,1205=>809,1210=>686,1211=>634,1216=>278,1217=>1040,1218=>908,1223=>752,1224=>654,1232=>684,1233=>613,1234=>684,1235=>613,1236=>974,1237=>982,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787,1243=>615,1244=>1040,1245=>908,1246=>636,1247=>541,1250=>755,1251=>659,1252=>755,1253=>659,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609,1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1272=>882,1273=>765,1278=>685,1279=>592,1280=>686,1281=>589,1296=>585,1297=>541,1298=>752,1299=>639,1300=>1169,1301=>994,1306=>787,1307=>635,1308=>989,1309=>818,1329=>792,1330=>746,1331=>790,1332=>800,1333=>746,1334=>779,1335=>665,1336=>746,1337=>877,1338=>780,1339=>689,1340=>540,1341=>1040,1342=>858,1343=>744,1344=>684,1345=>774,1346=>800,1347=>794,1348=>789,1349=>728,1350=>755,1351=>755,1352=>732,1353=>739,1354=>889,1355=>792,1356=>833,1357=>732,1358=>790,1359=>737,1360=>732,1361=>728,1362=>557,1363=>784,1364=>767,1365=>787,1366=>833,1370=>318,1371=>224,1372=>359,1373=>213,1374=>370,1375=>366,1377=>974,1378=>634,1379=>702,1380=>742,1381=>634,1382=>702,1383=>567,1384=>634,1385=>832,1386=>702,1387=>634,1388=>280,1389=>894,1390=>645,1391=>634,1392=>634,1393=>606,1394=>702,1395=>649,1396=>709,1397=>278,1398=>669,1399=>581,1400=>634,1401=>419,1402=>974,1403=>581,1404=>671,1405=>634,1406=>701,1407=>1002,1408=>634,1409=>600,1410=>477,1411=>1002,1412=>645,1413=>612,1414=>899,1415=>836,1417=>337,1418=>313,1652=>292,4304=>469,4305=>469,4306=>519,4307=>726,4308=>479,4309=>478,4310=>468,4311=>709,4312=>468,4313=>479,4314=>970,4315=>479,4316=>479,4317=>744,4318=>469,4319=>479,4320=>754,4321=>479,4322=>578,4323=>468,4324=>729,4325=>468,4326=>743,4327=>479,4328=>479,4329=>479,4330=>513,4331=>479,4332=>479,4333=>468,4334=>479,4335=>469,4336=>468,4337=>468,4338=>469,4339=>469,4340=>469,4341=>524,4342=>755,4343=>517,4344=>479,4345=>519,4346=>524,4347=>416,4348=>304,5760=>477,5761=>493,5762=>712,5763=>931,5764=>1150,5765=>1370,5766=>493,5767=>712,5768=>931,5769=>1150,5770=>1370,5771=>498,5772=>718,5773=>938,5774=>1159,5775=>1379,5776=>493,5777=>712,5778=>930,5779=>1149,5780=>1370,5781=>498,5782=>752,5783=>789,5784=>1205,5785=>1150,5786=>683,5787=>507,5788=>507,7426=>982,7428=>550,7433=>278,7435=>604,7437=>754,7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7449=>592,7450=>592,7456=>592,7457=>818,7458=>525,7462=>525,7463=>592,7464=>654,7467=>639,7543=>635,7680=>684,7681=>613,7682=>655,7683=>635,7684=>655,7685=>635,7686=>655,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635,7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615,7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>600,7714=>752,7715=>634,7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278,7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>288,7736=>557,7737=>288,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974,7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634,7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635,7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411,7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521,7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634,7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592,7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818,7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525,7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352,7836=>352,7837=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684,7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684,7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632,7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632,7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787,7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787,7897=>612,7898=>934,7899=>757,7900=>934,7901=>757,7902=>934,7903=>757,7904=>934,7905=>757,7906=>934,7907=>757,7908=>732,7909=>634,7910=>732,7911=>634,7912=>879,7913=>779,7914=>879,7915=>779,7916=>879,7917=>779,7918=>879,7919=>779,7920=>879,7921=>779,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611,7927=>592,7928=>611,7929=>592,7930=>769,7931=>477,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659,7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928,7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338,7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600,7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579,8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837,8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338,8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659,8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801,8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837,8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659,8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871,8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338,8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579,8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685,8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813,8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>361,8209=>361,8210=>636,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>318,8217=>318,8218=>318,8219=>318,8220=>518,8221=>518,8222=>518,8223=>518,8224=>500,8225=>500,8228=>334,8229=>667,8230=>1000,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1342,8241=>1735,8249=>400,8250=>400,8251=>838,8252=>485,8253=>531,8254=>500,8255=>804,8256=>804,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733,8265=>733,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450,8275=>1000,8276=>804,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8363=>636,8364=>636,8369=>636,8376=>636,8377=>636,8451=>1123,8457=>952,8462=>634,8463=>634,8470=>1165,8471=>1000,8486=>764,8487=>764,8490=>656,8491=>684,8494=>854,8498=>575,8500=>462,8513=>775,8514=>557,8515=>557,8516=>611,8523=>780,8530=>1370,8531=>969,8532=>969,8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1285,8577=>770,8578=>1285,8579=>698,8580=>549,8581=>698,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8704=>684,8707=>632,8710=>684,8711=>684,8722=>838,8725=>337,8726=>637,8727=>626,8728=>626,8756=>636,8757=>636,8758=>260,8759=>636,8764=>636,9134=>521,9167=>945,10731=>494,10799=>838,11374=>863,11375=>684,11381=>654,11382=>568,11383=>660,11386=>612,11800=>536,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531,42192=>655,42193=>603,42194=>603,42195=>770,42196=>611,42197=>611,42198=>775,42199=>656,42200=>656,42201=>512,42202=>698,42203=>698,42204=>685,42205=>575,42206=>575,42207=>863,42208=>748,42209=>557,42210=>635,42211=>695,42212=>695,42213=>684,42214=>684,42215=>752,42216=>775,42217=>512,42218=>989,42219=>685,42220=>611,42221=>655,42222=>684,42223=>684,42224=>632,42225=>632,42226=>295,42227=>787,42228=>732,42229=>732,42230=>557,42231=>770,42232=>300,42233=>300,42234=>596,42235=>596,42236=>300,42237=>300,42238=>588,42239=>588,42564=>635,42565=>521,42566=>354,42567=>387,42576=>1029,42577=>906,42580=>1031,42581=>813,42582=>927,42583=>814,42594=>1014,42595=>866,42596=>1015,42597=>864,42598=>1088,42599=>944,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42636=>611,42637=>549,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472,42790=>752,42791=>634,42800=>491,42801=>521,42802=>1250,42803=>985,42814=>703,42815=>549,42822=>680,42823=>392,42830=>1358,42831=>1019,42880=>557,42881=>278,42891=>401,42892=>275,42893=>686,43002=>917,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199,62464=>525,62465=>525,62466=>565,62467=>808,62468=>535,62469=>525,62470=>536,62471=>821,62472=>525,62473=>525,62474=>1037,62475=>535,62476=>535,62477=>837,62478=>525,62479=>536,62480=>830,62481=>535,62482=>672,62483=>565,62484=>823,62485=>535,62486=>790,62487=>535,62488=>535,62489=>535,62490=>603,62491=>535,62492=>535,62493=>525,62494=>535,62495=>525,62496=>525,62497=>525,62498=>525,62499=>525,62500=>524,62501=>567,63173=>612,64256=>689,64257=>630,64258=>630,64259=>967,64260=>967,64297=>838,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65533=>1025,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansextralight.z b/tcpdf/fonts/dejavusansextralight.z new file mode 100644 index 0000000..a966f6d Binary files /dev/null and b/tcpdf/fonts/dejavusansextralight.z differ diff --git a/tcpdf/fonts/dejavusansi.ctg.z b/tcpdf/fonts/dejavusansi.ctg.z new file mode 100644 index 0000000..1b98d13 Binary files /dev/null and b/tcpdf/fonts/dejavusansi.ctg.z differ diff --git a/tcpdf/fonts/dejavusansi.php b/tcpdf/fonts/dejavusansi.php new file mode 100644 index 0000000..07c6fd1 --- /dev/null +++ b/tcpdf/fonts/dejavusansi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSans-Oblique'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=632416; +$enc=''; +$file='dejavusansi.z'; +$ctg='dejavusansi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-1016 -350 1659 1068]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>507,'MaxWidth'=>1690,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(79,0,320,729),34=>array(96,458,364,729),35=>array(70,0,773,718),36=>array(33,-147,570,760),37=>array(91,-14,859,742),38=>array(47,-14,736,742),39=>array(96,458,179,729),40=>array(77,-132,427,759),41=>array(-62,-132,288,759),42=>array(30,286,470,742),43=>array(106,0,732,627),44=>array(3,-116,193,124),45=>array(45,234,324,314),46=>array(58,0,185,124),47=>array(-73,-93,427,729),48=>array(50,-14,586,742),49=>array(49,0,485,729),50=>array(4,0,574,742),51=>array(2,-14,572,742),52=>array(18,0,565,729),53=>array(20,-14,581,729),54=>array(63,-14,592,742),55=>array(93,0,627,729),56=>array(33,-14,593,742),57=>array(44,-14,574,742),58=>array(52,0,256,517),59=>array(1,-116,267,517),60=>array(106,46,732,581),61=>array(106,172,732,454),62=>array(106,46,732,581),63=>array(123,0,511,742),64=>array(58,-173,950,703),65=>array(-53,0,615,729),66=>array(27,0,625,729),67=>array(42,-14,695,742),68=>array(27,0,722,729),69=>array(27,0,630,729),70=>array(27,0,587,729),71=>array(45,-14,725,742),72=>array(27,0,725,729),73=>array(27,0,268,729),74=>array(-164,-200,266,729),75=>array(27,0,722,729),76=>array(27,0,497,729),77=>array(27,0,836,729),78=>array(27,0,721,729),79=>array(40,-14,747,742),80=>array(27,0,601,729),81=>array(41,-129,747,742),82=>array(27,0,600,729),83=>array(6,-14,603,742),84=>array(43,0,676,729),85=>array(58,-14,713,729),86=>array(78,0,742,729),87=>array(96,0,1020,729),88=>array(-43,0,703,729),89=>array(63,0,676,729),90=>array(-22,0,703,729),91=>array(40,-132,420,760),92=>array(85,-93,262,729),93=>array(-38,-132,342,760),94=>array(106,457,732,729),95=>array(-10,-236,510,-166),96=>array(190,617,388,800),97=>array(41,-14,547,560),98=>array(36,-14,587,760),99=>array(46,-14,536,560),100=>array(46,-14,639,760),101=>array(46,-14,571,560),102=>array(68,0,478,760),103=>array(32,-208,596,560),104=>array(35,0,566,760),105=>array(35,0,273,760),106=>array(-113,-208,277,760),107=>array(35,0,612,760),108=>array(35,0,273,760),109=>array(35,0,906,560),110=>array(35,0,566,560),111=>array(46,-14,566,560),112=>array(-3,-208,589,560),113=>array(46,-206,597,560),114=>array(35,0,463,560),115=>array(11,-14,500,560),116=>array(64,0,423,702),117=>array(57,-14,589,547),118=>array(72,0,604,547),119=>array(85,0,819,547),120=>array(-26,0,600,547),121=>array(-25,-208,603,547),122=>array(-3,0,543,547),123=>array(121,-163,605,760),124=>array(127,-236,210,764),125=>array(7,-163,491,760),126=>array(106,228,732,399),161=>array(85,0,326,729),162=>array(74,-153,563,698),163=>array(24,0,637,742),164=>array(46,40,592,587),165=>array(45,0,673,729),166=>array(127,-171,210,699),167=>array(12,-95,485,742),168=>array(184,659,493,758),169=>array(138,0,862,725),170=>array(40,229,446,742),171=>array(62,69,555,517),172=>array(106,140,732,421),173=>array(45,234,324,314),174=>array(138,0,862,725),175=>array(186,673,492,745),176=>array(95,432,405,742),177=>array(106,0,732,627),178=>array(36,326,385,742),179=>array(16,319,368,742),180=>array(252,616,522,800),181=>array(-13,-208,592,547),182=>array(78,-96,573,729),183=>array(114,285,241,409),184=>array(49,-193,267,0),185=>array(66,326,347,734),186=>array(40,229,462,742),187=>array(62,69,554,517),188=>array(66,-14,958,742),189=>array(66,-14,953,742),190=>array(16,-14,958,742),191=>array(37,-13,425,729),192=>array(-53,0,615,927),193=>array(-53,0,615,927),194=>array(-53,0,615,928),195=>array(-53,0,617,921),196=>array(-53,0,615,913),197=>array(-53,0,615,928),198=>array(-45,0,994,729),199=>array(42,-193,695,742),200=>array(27,0,630,927),201=>array(27,0,630,927),202=>array(27,0,630,928),203=>array(27,0,630,913),204=>array(27,0,292,927),205=>array(27,0,383,927),206=>array(27,0,379,928),207=>array(27,0,392,913),208=>array(0,0,727,729),209=>array(27,0,721,921),210=>array(40,-14,747,927),211=>array(40,-14,747,927),212=>array(40,-14,747,928),213=>array(40,-14,747,921),214=>array(40,-14,747,913),215=>array(137,31,701,596),216=>array(-34,-32,809,761),217=>array(58,-14,713,927),218=>array(58,-14,713,927),219=>array(58,-14,713,928),220=>array(58,-14,713,913),221=>array(63,0,676,927),222=>array(27,0,577,729),223=>array(47,-14,590,760),224=>array(41,-14,547,800),225=>array(41,-14,571,800),226=>array(41,-14,547,800),227=>array(41,-14,562,777),228=>array(41,-14,547,758),229=>array(41,-14,547,878),230=>array(41,-14,951,560),231=>array(46,-193,536,560),232=>array(46,-14,571,800),233=>array(46,-14,576,800),234=>array(46,-14,571,800),235=>array(46,-14,571,758),236=>array(35,0,262,800),237=>array(35,0,396,800),238=>array(35,0,351,800),239=>array(35,0,367,758),240=>array(45,-14,587,760),241=>array(35,0,580,777),242=>array(46,-14,566,800),243=>array(46,-14,578,800),244=>array(46,-14,566,800),245=>array(46,-14,569,777),246=>array(46,-14,566,758),247=>array(106,73,732,554),248=>array(-14,-46,622,590),249=>array(57,-14,589,800),250=>array(57,-14,589,800),251=>array(57,-14,589,800),252=>array(57,-14,589,758),253=>array(-25,-208,603,800),254=>array(-3,-208,589,760),255=>array(-25,-208,603,758),256=>array(-53,0,615,899),257=>array(41,-14,547,745),258=>array(-53,0,624,926),259=>array(41,-14,562,761),260=>array(-53,-194,618,729),261=>array(41,-194,547,560),262=>array(42,-14,695,927),263=>array(46,-14,580,800),264=>array(42,-14,695,928),265=>array(46,-14,551,800),266=>array(42,-14,695,914),267=>array(46,-14,536,760),268=>array(42,-14,695,928),269=>array(46,-14,570,800),270=>array(27,0,722,928),271=>array(46,-14,819,760),272=>array(0,0,727,729),273=>array(46,-14,701,760),274=>array(27,0,630,900),275=>array(46,-14,571,745),276=>array(27,0,630,928),277=>array(46,-14,571,785),278=>array(27,0,630,914),279=>array(46,-14,571,760),280=>array(27,-194,630,729),281=>array(46,-194,571,560),282=>array(27,0,630,928),283=>array(46,-14,571,800),284=>array(45,-14,725,928),285=>array(32,-208,596,800),286=>array(45,-14,725,928),287=>array(32,-208,596,785),288=>array(45,-14,725,914),289=>array(32,-208,596,760),290=>array(45,-250,725,742),291=>array(32,-208,596,775),292=>array(27,0,725,928),293=>array(35,0,566,928),294=>array(109,0,868,729),295=>array(46,0,576,760),296=>array(27,0,415,921),297=>array(35,0,387,777),298=>array(27,0,390,899),299=>array(35,0,381,745),300=>array(27,0,400,928),301=>array(35,0,381,785),302=>array(-7,-194,268,729),303=>array(-8,-194,273,760),304=>array(27,0,304,914),305=>array(35,0,232,547),306=>array(27,-200,561,729),307=>array(35,-208,554,760),308=>array(-164,-200,386,928),309=>array(-113,-208,360,800),310=>array(27,-235,722,729),311=>array(35,-235,612,760),312=>array(38,0,617,547),313=>array(27,0,497,928),314=>array(35,0,422,928),315=>array(27,-235,497,729),316=>array(20,-235,273,760),317=>array(27,0,497,729),318=>array(35,0,474,760),319=>array(27,0,497,729),320=>array(35,0,443,760),321=>array(-20,0,502,729),322=>array(17,0,318,760),323=>array(27,0,721,928),324=>array(35,0,566,803),325=>array(27,-235,721,729),326=>array(35,-235,566,560),327=>array(27,0,721,928),328=>array(35,0,570,800),329=>array(75,0,732,729),330=>array(46,-208,682,742),331=>array(35,-208,566,560),332=>array(40,-14,747,899),333=>array(46,-14,566,745),334=>array(40,-14,747,928),335=>array(46,-14,566,785),336=>array(40,-14,773,927),337=>array(46,-14,623,800),338=>array(46,0,1067,729),339=>array(46,-14,984,560),340=>array(27,0,600,928),341=>array(35,0,549,803),342=>array(27,-235,600,729),343=>array(20,-235,463,560),344=>array(27,0,600,925),345=>array(35,0,492,800),346=>array(6,-14,603,928),347=>array(11,-14,549,803),348=>array(6,-14,603,928),349=>array(11,-14,500,800),350=>array(6,-193,603,742),351=>array(11,-193,500,560),352=>array(6,-14,603,928),353=>array(11,-14,523,800),354=>array(43,-193,676,729),355=>array(62,-193,423,702),356=>array(43,0,676,928),357=>array(64,0,477,803),358=>array(52,0,685,729),359=>array(16,0,406,702),360=>array(58,-14,713,921),361=>array(57,-14,589,777),362=>array(58,-14,713,899),363=>array(57,-14,589,745),364=>array(58,-14,713,928),365=>array(57,-14,589,785),366=>array(58,-14,713,929),367=>array(57,-14,589,861),368=>array(58,-14,729,927),369=>array(57,-14,619,800),370=>array(58,-194,713,729),371=>array(57,-194,589,547),372=>array(96,0,1020,932),373=>array(85,0,819,800),374=>array(63,0,676,932),375=>array(-25,-208,603,800),376=>array(63,0,676,913),377=>array(-22,0,703,928),378=>array(-3,0,549,803),379=>array(-22,0,703,912),380=>array(-3,0,543,760),381=>array(-22,0,703,928),382=>array(-3,0,543,800),383=>array(68,0,478,760),384=>array(19,-14,561,760),385=>array(51,0,740,729),386=>array(27,0,635,729),387=>array(19,-14,579,760),388=>array(42,0,601,729),389=>array(35,-14,578,760),390=>array(63,-14,715,742),391=>array(39,-14,885,924),392=>array(39,-14,672,724),393=>array(0,0,727,729),394=>array(51,0,831,729),395=>array(69,0,686,729),396=>array(36,-14,619,760),397=>array(55,-208,575,548),398=>array(64,0,675,729),399=>array(51,-14,750,742),400=>array(121,-14,676,742),401=>array(-142,-200,607,729),402=>array(-157,-208,465,760),403=>array(39,-14,915,924),404=>array(95,-210,774,729),405=>array(17,0,897,760),406=>array(76,0,292,729),407=>array(0,0,299,729),408=>array(26,0,792,742),409=>array(17,0,596,760),410=>array(-2,0,277,760),411=>array(-44,0,535,760),412=>array(60,-14,966,729),413=>array(-142,-200,740,729),414=>array(57,-208,579,560),415=>array(40,-14,747,742),416=>array(34,-14,823,761),417=>array(48,-14,657,609),418=>array(56,-14,873,742),419=>array(74,-208,702,560),420=>array(51,0,717,729),421=>array(-3,-208,580,760),422=>array(40,-129,592,729),423=>array(2,-14,580,742),424=>array(11,-14,473,560),425=>array(27,0,630,729),426=>array(-58,-208,341,760),427=>array(72,-208,426,702),428=>array(43,0,685,729),429=>array(46,0,429,760),430=>array(71,-200,704,729),431=>array(56,-4,854,761),432=>array(58,-14,720,615),433=>array(42,-14,798,724),434=>array(76,-1,678,729),435=>array(67,0,789,742),436=>array(4,-208,777,560),437=>array(-26,0,700,729),438=>array(-10,0,535,547),439=>array(23,-31,652,729),440=>array(15,-31,662,729),441=>array(21,-213,594,547),442=>array(-9,-208,533,547),443=>array(1,0,564,742),444=>array(16,-31,625,729),445=>array(-16,-213,550,547),446=>array(-20,-14,430,702),447=>array(-5,-208,603,560),448=>array(7,-208,288,729),449=>array(7,-208,485,729),450=>array(-13,-208,484,729),451=>array(26,0,267,729),452=>array(27,0,1473,928),453=>array(27,0,1313,800),454=>array(46,-14,1178,800),455=>array(27,-200,823,729),456=>array(27,-208,834,760),457=>array(35,-208,555,760),458=>array(27,-200,1014,729),459=>array(27,-208,1025,760),460=>array(35,-208,911,760),461=>array(-53,0,615,928),462=>array(41,-14,556,800),463=>array(27,0,414,928),464=>array(35,0,400,800),465=>array(40,-14,747,928),466=>array(46,-14,598,800),467=>array(58,-14,713,928),468=>array(57,-14,589,800),469=>array(58,-14,713,1025),470=>array(57,-14,589,899),471=>array(58,-14,713,1047),472=>array(57,-14,589,903),473=>array(58,-14,713,1044),474=>array(57,-14,589,906),475=>array(58,-14,713,1044),476=>array(57,-14,589,903),477=>array(51,-14,563,560),478=>array(-53,0,626,1025),479=>array(41,-14,548,899),480=>array(-53,0,627,1025),481=>array(41,-14,573,868),482=>array(-45,0,994,900),483=>array(41,-14,951,743),484=>array(45,-14,743,742),485=>array(32,-208,596,560),486=>array(45,-14,725,928),487=>array(32,-208,596,800),488=>array(27,0,722,928),489=>array(35,0,612,928),490=>array(40,-194,747,742),491=>array(46,-194,566,560),492=>array(40,-194,747,899),493=>array(46,-194,566,745),494=>array(23,-31,652,928),495=>array(-47,-213,530,793),496=>array(-113,-208,392,793),497=>array(27,0,1473,729),498=>array(27,0,1313,729),499=>array(46,-14,1178,760),500=>array(45,-14,725,928),501=>array(32,-208,596,800),502=>array(29,-14,1059,729),503=>array(-14,-208,666,742),504=>array(27,0,721,927),505=>array(35,0,566,800),506=>array(-53,0,786,928),507=>array(41,-14,772,928),508=>array(-45,0,994,928),509=>array(41,-14,951,800),510=>array(-34,-32,809,928),511=>array(-14,-46,622,800),512=>array(-53,0,615,930),513=>array(41,-14,547,800),514=>array(-53,0,615,917),515=>array(41,-14,549,785),516=>array(27,0,630,930),517=>array(46,-14,571,800),518=>array(27,0,630,917),519=>array(46,-14,571,785),520=>array(27,0,363,930),521=>array(22,0,365,800),522=>array(27,0,393,917),523=>array(35,0,370,785),524=>array(40,-14,747,930),525=>array(46,-14,566,800),526=>array(40,-14,747,917),527=>array(46,-14,566,785),528=>array(27,0,600,930),529=>array(35,0,463,800),530=>array(27,0,600,917),531=>array(35,0,486,785),532=>array(58,-14,713,930),533=>array(57,-14,589,800),534=>array(58,-14,713,917),535=>array(57,-14,589,785),536=>array(6,-240,603,742),537=>array(11,-240,500,560),538=>array(43,-240,676,729),539=>array(64,-240,423,702),540=>array(-36,-210,593,742),541=>array(-62,-211,489,560),542=>array(27,0,725,928),543=>array(35,0,566,928),544=>array(27,-208,663,742),545=>array(41,-70,744,760),546=>array(19,-14,663,742),547=>array(34,-14,584,648),548=>array(-6,-208,720,729),549=>array(10,-208,555,547),550=>array(-53,0,615,914),551=>array(41,-14,547,760),552=>array(27,-189,630,729),553=>array(46,-193,571,560),554=>array(40,-14,747,1025),555=>array(46,-14,582,899),556=>array(40,-14,747,1025),557=>array(46,-14,579,861),558=>array(40,-14,747,914),559=>array(46,-14,566,760),560=>array(40,-14,747,1029),561=>array(46,-14,566,899),562=>array(63,0,676,899),563=>array(-25,-208,603,745),564=>array(-13,-70,381,757),565=>array(43,-70,768,560),566=>array(-5,-70,413,702),567=>array(-113,-208,235,547),568=>array(36,-14,924,760),569=>array(74,-208,962,560),570=>array(-70,-34,754,761),571=>array(-63,-34,762,761),572=>array(-50,-46,600,592),573=>array(0,0,497,729),574=>array(-107,-34,718,761),575=>array(27,-242,515,560),576=>array(13,-242,559,547),577=>array(157,0,668,729),578=>array(69,0,457,560),579=>array(-31,0,621,729),580=>array(4,-14,739,729),581=>array(-63,0,605,729),582=>array(27,-93,636,822),583=>array(36,-93,573,640),584=>array(-163,-200,293,729),585=>array(-114,-208,276,760),586=>array(74,-200,772,743),587=>array(74,-208,616,560),588=>array(-6,0,600,729),589=>array(-5,0,464,560),590=>array(29,0,684,729),591=>array(6,-208,635,547),592=>array(69,-14,575,560),593=>array(55,-14,597,560),594=>array(2,-14,544,560),595=>array(19,-14,561,760),596=>array(2,-14,493,560),597=>array(61,-70,542,560),598=>array(55,-208,638,760),599=>array(36,-14,821,760),600=>array(28,-14,561,560),601=>array(51,-14,563,560),602=>array(41,-14,819,560),603=>array(39,-14,506,561),604=>array(5,-11,504,560),605=>array(14,-14,777,561),606=>array(55,-14,609,561),607=>array(-91,-208,289,547),608=>array(33,-208,809,760),609=>array(53,-208,617,547),610=>array(55,0,569,574),611=>array(103,-210,623,547),612=>array(102,-14,604,547),613=>array(94,-208,616,547),614=>array(17,0,539,760),615=>array(37,-208,560,760),616=>array(26,0,309,760),617=>array(80,0,258,547),618=>array(4,0,368,547),619=>array(22,0,372,760),620=>array(41,0,417,760),621=>array(39,-208,278,760),622=>array(41,-213,662,760),623=>array(81,-13,944,548),624=>array(100,-208,962,547),625=>array(57,-208,919,560),626=>array(-93,-208,582,560),627=>array(57,-208,601,560),628=>array(34,0,602,547),629=>array(55,-14,557,560),630=>array(55,0,814,547),631=>array(66,-15,658,560),632=>array(54,-208,602,760),633=>array(2,-13,430,547),634=>array(-18,-13,450,755),635=>array(21,-208,449,547),636=>array(-20,-208,449,560),637=>array(19,-208,449,560),638=>array(2,0,491,560),639=>array(96,0,397,560),640=>array(-29,0,454,547),641=>array(-29,0,561,547),642=>array(18,-208,512,560),643=>array(-112,-208,449,760),644=>array(-113,-208,449,760),645=>array(86,-208,341,549),646=>array(-206,-208,449,760),647=>array(-11,-155,344,547),648=>array(40,-208,426,702),649=>array(-9,-14,641,547),650=>array(56,-15,619,547),651=>array(80,0,551,548),652=>array(-23,0,509,547),653=>array(-11,0,723,547),654=>array(-43,0,586,755),655=>array(103,0,605,547),656=>array(10,-208,555,547),657=>array(-5,-54,541,547),658=>array(-24,-213,554,547),659=>array(20,-213,554,547),660=>array(93,0,485,759),661=>array(72,0,522,759),662=>array(-24,0,426,759),663=>array(-7,-213,543,760),664=>array(56,-14,731,742),665=>array(38,0,534,547),666=>array(33,-14,596,561),667=>array(37,0,801,759),668=>array(38,0,616,547),669=>array(-205,-208,278,760),670=>array(71,-213,650,547),671=>array(38,0,454,547),672=>array(55,-208,840,759),673=>array(7,0,485,759),674=>array(72,0,522,759),675=>array(36,-14,1004,760),676=>array(55,-213,1024,760),677=>array(40,-54,1007,760),678=>array(51,0,787,702),679=>array(66,-208,723,760),680=>array(58,-70,764,702),681=>array(55,-208,815,760),682=>array(21,0,657,760),683=>array(21,0,643,760),684=>array(22,-15,552,640),685=>array(-28,84,543,640),686=>array(80,-214,624,760),687=>array(79,-208,623,760),688=>array(16,326,340,751),689=>array(16,326,340,751),690=>array(-64,209,168,751),691=>array(27,326,289,640),692=>array(5,319,267,632),693=>array(16,209,277,632),694=>array(-14,326,350,632),695=>array(56,326,519,632),696=>array(9,209,395,632),697=>array(164,557,336,800),698=>array(164,557,518,800),699=>array(131,489,321,729),700=>array(62,489,251,729),701=>array(179,616,298,856),702=>array(136,492,296,760),703=>array(138,492,297,760),704=>array(85,326,333,751),705=>array(74,326,354,751),706=>array(255,524,532,836),707=>array(232,524,509,836),708=>array(203,561,515,800),709=>array(250,561,561,800),710=>array(165,616,477,800),711=>array(200,616,512,800),712=>array(104,488,171,759),713=>array(186,673,492,745),714=>array(252,616,522,800),715=>array(190,617,388,800),716=>array(104,-148,171,123),717=>array(24,-156,331,-84),718=>array(190,-236,388,-54),719=>array(252,-237,522,-54),720=>array(4,0,279,517),721=>array(70,356,244,517),722=>array(89,249,249,517),723=>array(90,249,250,517),724=>array(119,229,353,448),725=>array(147,229,381,448),726=>array(47,125,353,417),727=>array(47,234,281,307),728=>array(200,645,507,785),729=>array(279,658,398,758),730=>array(209,610,477,878),731=>array(98,-194,279,0),732=>array(164,639,513,777),733=>array(188,616,567,800),734=>array(-5,233,323,504),735=>array(104,616,406,800),736=>array(63,208,415,632),737=>array(16,326,155,751),738=>array(30,326,330,648),739=>array(27,326,415,632),740=>array(74,326,354,751),741=>array(157,0,454,668),742=>array(127,0,454,668),743=>array(98,0,454,668),744=>array(69,0,454,668),745=>array(40,0,454,668),748=>array(96,-260,408,-21),749=>array(174,610,504,808),750=>array(135,489,525,729),755=>array(95,-240,363,28),759=>array(83,-193,432,-83),768=>array(-259,617,-61,800),769=>array(-203,616,67,800),770=>array(-284,616,28,800),771=>array(-288,639,61,777),772=>array(-266,673,40,745),773=>array(-510,686,10,755),774=>array(-249,645,58,785),775=>array(-169,646,-58,760),776=>array(-265,659,44,758),777=>array(-204,618,14,810),778=>array(-240,610,28,878),779=>array(-264,616,115,800),780=>array(-255,616,57,800),781=>array(-305,615,-195,832),782=>array(-404,615,-96,832),783=>array(-331,616,12,800),784=>array(-304,645,3,854),785=>array(-247,645,60,785),786=>array(-189,489,-16,645),787=>array(-329,595,-162,844),788=>array(-305,595,-163,844),789=>array(-80,616,80,800),790=>array(-311,-266,-113,-83),791=>array(-249,-267,21,-83),792=>array(-363,-240,-200,-24),793=>array(-300,-240,-137,-24),794=>array(-198,690,54,930),795=>array(-141,427,69,609),796=>array(-315,-241,-188,-32),797=>array(-384,-240,-132,-87),798=>array(-368,-240,-116,-87),799=>array(-363,-240,-137,-24),800=>array(-265,-184,-12,-117),801=>array(-339,-208,6,63),802=>array(-339,-208,-70,63),803=>array(-332,-184,-220,-70),804=>array(-435,-183,-126,-84),805=>array(-355,-241,-146,-32),806=>array(-339,-240,-165,-84),807=>array(-451,-193,-233,0),808=>array(-402,-194,-221,0),809=>array(-302,-240,-198,-47),810=>array(-398,-211,-98,-50),811=>array(-468,-222,-67,-82),812=>array(-386,-240,-74,-57),813=>array(-429,-240,-117,-57),814=>array(-433,-222,-126,-82),815=>array(-459,-224,-153,-83),816=>array(-466,-222,-117,-84),817=>array(-441,-156,-135,-84),818=>array(-566,-236,-33,-166),819=>array(-556,-236,8,-9),820=>array(-570,240,-27,381),821=>array(-325,221,-51,301),822=>array(-642,221,7,301),823=>array(-629,-46,21,592),824=>array(-811,-34,15,761),825=>array(-312,-241,-184,-32),826=>array(-398,-206,-98,-44),827=>array(-380,-240,-118,-21),828=>array(-495,-222,-94,-82),829=>array(-370,608,-130,825),830=>array(-272,595,-84,853),831=>array(-510,528,10,755),832=>array(-259,617,-61,800),833=>array(-203,616,67,800),834=>array(-288,639,61,777),835=>array(-329,595,-162,844),836=>array(-308,659,61,978),837=>array(-356,-208,-252,-45),838=>array(-411,639,-89,786),839=>array(-378,-226,-122,-35),840=>array(-383,-240,-117,-47),841=>array(-353,-240,-119,-21),842=>array(-425,616,-75,800),843=>array(-425,567,-75,850),844=>array(-424,596,-75,820),845=>array(-452,-230,-48,-30),846=>array(-360,-240,-147,-45),849=>array(-316,610,-157,878),850=>array(-415,633,-108,855),851=>array(-370,-241,-130,-24),855=>array(-343,610,-183,878),856=>array(23,658,142,758),858=>array(-430,-241,-71,-32),860=>array(-483,-237,407,-60),861=>array(-290,802,601,979),862=>array(-297,855,600,927),863=>array(-491,-156,415,-84),864=>array(-208,756,528,894),865=>array(-290,752,601,929),866=>array(-528,-230,366,-30),880=>array(27,0,568,729),881=>array(41,0,486,547),882=>array(95,0,834,729),883=>array(95,0,620,729),884=>array(164,557,336,800),885=>array(27,-208,199,35),886=>array(27,0,721,729),887=>array(38,0,612,547),890=>array(136,-208,240,-45),891=>array(2,-14,493,560),892=>array(46,-14,536,560),893=>array(2,-14,493,560),894=>array(1,-116,267,517),900=>array(252,616,522,800),901=>array(184,659,553,978),902=>array(-53,0,615,800),903=>array(114,285,241,409),904=>array(59,0,765,800),905=>array(64,0,869,800),906=>array(62,0,409,800),908=>array(64,-14,793,800),910=>array(56,0,919,800),911=>array(53,0,828,800),912=>array(74,0,450,978),913=>array(-53,0,615,729),914=>array(27,0,625,729),915=>array(27,0,623,729),916=>array(-63,0,605,729),917=>array(27,0,630,729),918=>array(-22,0,703,729),919=>array(27,0,725,729),920=>array(56,-14,731,742),921=>array(27,0,268,729),922=>array(27,0,722,729),923=>array(-63,0,605,729),924=>array(27,0,836,729),925=>array(27,0,721,729),926=>array(27,0,619,729),927=>array(40,-14,747,742),928=>array(27,0,725,729),929=>array(27,0,601,729),931=>array(27,0,630,729),932=>array(43,0,676,729),933=>array(63,0,676,729),934=>array(50,0,737,729),935=>array(-43,0,703,729),936=>array(88,0,803,729),937=>array(-34,0,723,738),938=>array(27,0,399,913),939=>array(63,0,676,913),940=>array(55,-12,645,800),941=>array(39,-14,561,800),942=>array(57,-208,619,800),943=>array(67,0,431,800),944=>array(59,0,566,978),945=>array(55,-12,645,559),946=>array(-1,-208,572,766),947=>array(74,-208,635,547),948=>array(38,-14,557,742),949=>array(39,-14,506,561),950=>array(49,-210,590,760),951=>array(57,-208,579,560),952=>array(55,-11,557,768),953=>array(67,0,265,547),954=>array(40,0,584,547),955=>array(-44,0,488,760),956=>array(-13,-208,592,547),957=>array(89,0,526,547),958=>array(38,-210,563,760),959=>array(46,-14,566,560),960=>array(55,-19,615,547),961=>array(16,-208,599,560),962=>array(74,-210,556,560),963=>array(57,-14,659,547),964=>array(84,0,606,547),965=>array(59,0,533,547),966=>array(74,-208,622,551),967=>array(-44,-208,622,547),968=>array(66,-208,675,547),969=>array(68,-14,771,547),970=>array(74,0,391,758),971=>array(59,0,533,758),972=>array(46,-14,583,800),973=>array(59,0,539,800),974=>array(68,-14,771,800),975=>array(47,-208,742,729),976=>array(81,-11,534,768),977=>array(65,-11,557,768),978=>array(97,0,701,729),979=>array(56,0,865,800),980=>array(97,0,701,913),981=>array(54,-208,602,760),982=>array(68,-14,858,547),983=>array(28,-188,665,547),984=>array(75,-207,750,742),985=>array(74,-208,576,560),986=>array(88,-210,675,729),987=>array(76,-210,613,547),988=>array(27,0,587,729),989=>array(-184,-208,500,760),990=>array(64,-2,639,729),991=>array(87,0,576,759),992=>array(109,-208,779,742),993=>array(21,-180,508,559),994=>array(36,-213,884,729),995=>array(86,-208,790,547),996=>array(43,-208,730,742),997=>array(44,-208,619,560),998=>array(27,-213,719,729),999=>array(-21,-14,620,575),1000=>array(-34,-208,660,745),1001=>array(-11,-208,569,560),1002=>array(-15,0,785,742),1003=>array(-29,0,649,560),1004=>array(33,-14,715,758),1005=>array(46,-14,584,758),1006=>array(31,-208,625,729),1007=>array(53,-208,561,726),1008=>array(9,-3,646,547),1009=>array(84,-208,599,560),1010=>array(46,-14,536,560),1011=>array(-113,-208,277,760),1012=>array(40,-14,747,742),1013=>array(55,-14,532,560),1014=>array(43,-14,521,560),1015=>array(27,0,577,729),1016=>array(-3,-208,589,760),1017=>array(42,-14,695,742),1018=>array(27,0,836,729),1019=>array(-11,-208,661,547),1020=>array(-22,-208,599,560),1021=>array(63,-14,715,742),1022=>array(42,-14,695,742),1023=>array(63,-14,715,742),1024=>array(27,0,630,927),1025=>array(27,0,630,913),1026=>array(71,-200,704,729),1027=>array(27,0,623,927),1028=>array(45,-14,704,742),1029=>array(6,-14,603,742),1030=>array(27,0,268,729),1031=>array(27,0,386,913),1032=>array(-164,-200,266,729),1033=>array(-30,0,1000,729),1034=>array(27,0,951,729),1035=>array(52,0,685,729),1036=>array(27,0,747,927),1037=>array(27,0,721,927),1038=>array(24,0,663,928),1039=>array(42,-157,740,729),1040=>array(-53,0,615,729),1041=>array(27,0,635,729),1042=>array(27,0,625,729),1043=>array(27,0,623,729),1044=>array(-37,-157,735,729),1045=>array(27,0,630,729),1046=>array(-51,0,1111,729),1047=>array(1,-14,595,742),1048=>array(27,0,721,729),1049=>array(27,0,721,928),1050=>array(27,0,747,729),1051=>array(-30,0,724,729),1052=>array(27,0,836,729),1053=>array(27,0,725,729),1054=>array(40,-14,747,742),1055=>array(27,0,725,729),1056=>array(27,0,601,729),1057=>array(42,-14,695,742),1058=>array(43,0,676,729),1059=>array(24,0,663,729),1060=>array(54,0,811,729),1061=>array(-43,0,703,729),1062=>array(42,-157,740,729),1063=>array(109,0,658,729),1064=>array(27,0,1042,729),1065=>array(42,-157,1057,729),1066=>array(84,0,738,729),1067=>array(27,0,855,729),1068=>array(27,0,592,729),1069=>array(-6,-14,642,742),1070=>array(32,-14,1034,742),1071=>array(-4,0,667,729),1072=>array(41,-14,547,560),1073=>array(31,-14,584,777),1074=>array(38,0,534,547),1075=>array(38,0,530,547),1076=>array(-14,-138,634,547),1077=>array(46,-14,571,560),1078=>array(-19,0,892,547),1079=>array(14,-14,488,561),1080=>array(38,0,612,547),1081=>array(38,0,612,760),1082=>array(38,0,597,547),1083=>array(-16,0,609,547),1084=>array(38,0,717,547),1085=>array(38,0,616,547),1086=>array(46,-14,566,560),1087=>array(38,0,616,547),1088=>array(-3,-208,589,560),1089=>array(46,-14,536,560),1090=>array(68,0,606,547),1091=>array(-25,-208,603,547),1092=>array(46,-208,813,729),1093=>array(-26,0,600,547),1094=>array(51,-138,629,547),1095=>array(94,0,553,547),1096=>array(38,0,877,547),1097=>array(51,-138,891,547),1098=>array(69,0,630,547),1099=>array(38,0,749,547),1100=>array(38,0,513,547),1101=>array(6,-14,496,560),1102=>array(41,-14,796,560),1103=>array(3,0,570,547),1104=>array(46,-14,571,802),1105=>array(46,-14,571,758),1106=>array(55,-208,552,760),1107=>array(38,0,587,803),1108=>array(47,-14,537,560),1109=>array(11,-14,500,560),1110=>array(35,0,273,760),1111=>array(35,0,382,758),1112=>array(-113,-208,277,760),1113=>array(-16,0,826,547),1114=>array(38,0,821,547),1115=>array(35,0,530,760),1116=>array(38,0,597,803),1117=>array(38,0,612,802),1118=>array(-25,-208,603,760),1119=>array(51,-138,629,547),1120=>array(36,-14,884,729),1121=>array(68,-14,771,547),1122=>array(49,0,688,729),1123=>array(36,0,578,729),1124=>array(32,-14,948,742),1125=>array(41,-14,737,560),1126=>array(-63,0,800,729),1127=>array(-28,0,705,547),1128=>array(27,0,1064,729),1129=>array(41,0,923,547),1130=>array(-15,0,784,729),1131=>array(-0,0,611,547),1132=>array(27,0,1023,729),1133=>array(39,0,823,547),1134=>array(-29,-208,582,935),1135=>array(-23,-193,518,753),1136=>array(73,0,910,729),1137=>array(77,-208,905,765),1138=>array(40,-14,747,742),1139=>array(55,-14,557,560),1140=>array(78,0,840,742),1141=>array(75,0,692,560),1142=>array(78,0,840,930),1143=>array(75,0,692,800),1144=>array(62,-208,1017,742),1145=>array(66,-208,946,560),1146=>array(47,-14,905,742),1147=>array(46,-14,708,560),1148=>array(35,-14,1121,932),1149=>array(61,-14,958,758),1150=>array(36,-14,884,900),1151=>array(68,-14,771,734),1152=>array(46,-208,704,742),1153=>array(46,-208,534,560),1154=>array(22,-44,484,457),1155=>array(-525,608,-86,810),1156=>array(-385,645,-8,788),1157=>array(-315,595,-179,797),1158=>array(-328,595,-170,797),1159=>array(-790,606,-0,788),1160=>array(-1016,-180,415,922),1161=>array(-936,-280,354,1022),1162=>array(27,-208,721,928),1163=>array(39,-208,613,760),1164=>array(27,0,592,729),1165=>array(39,0,514,702),1166=>array(27,0,604,729),1167=>array(-3,-208,580,560),1168=>array(13,0,637,878),1169=>array(23,0,544,700),1170=>array(26,0,688,729),1171=>array(21,0,595,547),1172=>array(27,-200,623,729),1173=>array(35,-208,527,547),1174=>array(-36,-157,1126,729),1175=>array(-5,-138,905,547),1176=>array(1,-193,595,742),1177=>array(14,-193,488,561),1178=>array(42,-157,762,729),1179=>array(51,-138,610,547),1180=>array(27,0,747,729),1181=>array(38,0,597,547),1182=>array(27,0,747,729),1183=>array(17,0,576,760),1184=>array(79,0,893,729),1185=>array(59,0,715,547),1186=>array(42,-157,740,729),1187=>array(54,-138,633,547),1188=>array(27,0,1080,729),1189=>array(39,0,913,547),1190=>array(27,-200,1031,729),1191=>array(39,-208,860,547),1192=>array(45,-14,815,743),1193=>array(44,-14,644,560),1194=>array(42,-193,695,742),1195=>array(46,-193,536,560),1196=>array(67,-157,700,729),1197=>array(53,-138,593,547),1198=>array(63,0,676,729),1199=>array(72,-208,603,547),1200=>array(69,0,684,729),1201=>array(62,-208,635,547),1202=>array(-26,-157,725,729),1203=>array(-11,-138,616,547),1204=>array(67,-157,898,729),1205=>array(53,-138,759,547),1206=>array(142,-157,674,729),1207=>array(117,-138,567,547),1208=>array(127,0,659,729),1209=>array(102,0,551,547),1210=>array(119,0,667,729),1211=>array(35,0,566,760),1212=>array(41,-14,894,742),1213=>array(31,-14,687,560),1214=>array(41,-184,894,742),1215=>array(31,-161,687,560),1216=>array(27,0,268,729),1217=>array(-51,0,1111,928),1218=>array(-19,0,892,785),1219=>array(27,-200,721,729),1220=>array(38,-208,617,547),1221=>array(-46,-208,726,729),1222=>array(-36,-208,607,547),1223=>array(27,-200,725,729),1224=>array(39,-208,617,547),1225=>array(27,-208,725,729),1226=>array(39,-208,617,547),1227=>array(142,-157,674,729),1228=>array(117,-138,567,547),1229=>array(27,-208,836,729),1230=>array(39,-208,711,547),1231=>array(35,0,273,760),1232=>array(-53,0,624,926),1233=>array(41,-14,562,761),1234=>array(-53,0,615,913),1235=>array(41,-14,547,758),1236=>array(-45,0,994,729),1237=>array(41,-14,951,560),1238=>array(27,0,630,928),1239=>array(46,-14,571,785),1240=>array(51,-14,750,742),1241=>array(51,-14,563,560),1242=>array(51,-14,750,913),1243=>array(51,-14,563,758),1244=>array(-51,0,1111,913),1245=>array(-19,0,892,758),1246=>array(1,-14,595,913),1247=>array(14,-14,488,758),1248=>array(23,-31,652,729),1249=>array(-24,-213,554,547),1250=>array(27,0,721,899),1251=>array(38,0,612,745),1252=>array(27,0,721,913),1253=>array(38,0,612,758),1254=>array(40,-14,747,913),1255=>array(46,-14,566,758),1256=>array(40,-14,747,742),1257=>array(55,-14,557,560),1258=>array(40,-14,747,913),1259=>array(55,-14,557,758),1260=>array(-6,-14,642,913),1261=>array(6,-14,496,758),1262=>array(24,0,663,899),1263=>array(-25,-208,603,745),1264=>array(24,0,663,913),1265=>array(-25,-208,603,758),1266=>array(24,0,701,927),1267=>array(-25,-208,603,800),1268=>array(109,0,658,913),1269=>array(94,0,553,758),1270=>array(42,-157,638,729),1271=>array(51,-138,543,547),1272=>array(27,0,855,913),1273=>array(38,0,749,758),1274=>array(47,-208,708,729),1275=>array(42,-208,615,547),1276=>array(-21,-200,729,729),1277=>array(-4,-208,622,547),1278=>array(-41,0,709,729),1279=>array(-24,0,602,547),1280=>array(35,0,658,729),1281=>array(27,0,545,547),1282=>array(36,-14,943,729),1283=>array(26,-14,824,547),1284=>array(148,-14,912,742),1285=>array(116,-14,802,561),1286=>array(148,-208,599,742),1287=>array(116,-208,523,561),1288=>array(-48,-14,1009,729),1289=>array(-36,-14,884,547),1290=>array(29,-14,1059,729),1291=>array(39,-14,894,547),1292=>array(45,-14,734,742),1293=>array(47,-14,568,560),1294=>array(51,-14,710,729),1295=>array(37,-14,638,547),1296=>array(121,-14,676,742),1297=>array(39,-14,506,561),1298=>array(-10,-200,744,729),1299=>array(4,-208,629,547),1300=>array(-10,0,1213,729),1301=>array(-16,0,1005,547),1302=>array(27,0,918,729),1303=>array(-3,-208,875,560),1304=>array(-4,0,1029,729),1305=>array(3,-14,945,560),1306=>array(41,-129,747,742),1307=>array(46,-206,597,560),1308=>array(96,0,1020,729),1309=>array(85,0,819,547),1310=>array(27,0,747,729),1311=>array(38,0,597,547),1312=>array(-30,-200,1031,729),1313=>array(-16,-208,852,547),1314=>array(27,-200,1031,729),1315=>array(38,-208,859,547),1316=>array(42,-157,740,729),1317=>array(51,-138,629,547),1329=>array(69,-29,715,729),1330=>array(16,0,662,743),1331=>array(66,0,717,743),1332=>array(56,0,712,743),1333=>array(69,-14,685,729),1334=>array(32,0,710,744),1335=>array(21,0,650,729),1336=>array(16,0,662,743),1337=>array(16,-14,847,743),1338=>array(23,-14,764,729),1339=>array(21,0,637,729),1340=>array(21,0,479,729),1341=>array(21,-14,884,729),1342=>array(111,-13,827,742),1343=>array(99,0,680,729),1344=>array(7,-26,671,729),1345=>array(43,-23,706,744),1346=>array(61,0,674,743),1347=>array(-2,0,715,735),1348=>array(69,-14,837,729),1349=>array(42,-14,659,743),1350=>array(53,-14,667,729),1351=>array(61,-15,709,729),1352=>array(16,0,662,743),1353=>array(70,-28,682,744),1354=>array(56,0,730,743),1355=>array(25,0,705,744),1356=>array(16,0,755,743),1357=>array(58,-14,713,729),1358=>array(61,0,677,729),1359=>array(44,-14,645,741),1360=>array(16,0,662,743),1361=>array(49,-14,666,743),1362=>array(21,0,572,729),1363=>array(56,0,752,729),1364=>array(-33,0,703,743),1365=>array(40,-14,747,742),1366=>array(31,-13,724,729),1369=>array(138,492,297,760),1370=>array(112,499,300,729),1371=>array(71,620,341,803),1372=>array(51,618,458,893),1373=>array(106,617,305,800),1374=>array(52,613,470,866),1375=>array(92,618,522,760),1377=>array(64,-14,934,547),1378=>array(-5,-208,557,560),1379=>array(52,-208,607,560),1380=>array(35,-208,613,560),1381=>array(71,-14,598,760),1382=>array(45,-208,594,560),1383=>array(35,0,541,760),1384=>array(-5,-208,557,560),1385=>array(-5,-208,735,560),1386=>array(46,-14,698,760),1387=>array(-5,-208,557,760),1388=>array(-5,-208,231,547),1389=>array(-5,-208,939,760),1390=>array(45,-14,605,760),1391=>array(71,-208,593,760),1392=>array(35,0,566,760),1393=>array(31,-15,516,760),1394=>array(35,-208,572,560),1395=>array(52,-14,625,768),1396=>array(71,-14,739,760),1397=>array(-116,-208,232,547),1398=>array(58,-14,593,760),1399=>array(-80,-208,448,560),1400=>array(35,0,566,560),1401=>array(-73,-208,339,547),1402=>array(64,-208,934,547),1403=>array(-22,-208,508,561),1404=>array(35,0,589,560),1405=>array(57,-14,589,547),1406=>array(71,-208,635,760),1407=>array(71,-14,897,560),1408=>array(-5,-208,557,560),1409=>array(31,-208,595,560),1410=>array(35,0,409,547),1411=>array(71,-208,897,760),1412=>array(-67,-208,583,560),1413=>array(45,-14,565,560),1414=>array(33,-208,765,760),1415=>array(71,-14,771,760),1417=>array(46,0,229,415),1418=>array(23,212,301,314),1456=>array(264,-217,375,-22),1457=>array(88,-217,458,-22),1458=>array(129,-217,473,-22),1459=>array(129,-217,473,-22),1460=>array(276,-159,364,-85),1461=>array(215,-159,425,-85),1462=>array(227,-217,437,-22),1463=>array(166,-159,474,-85),1464=>array(173,-193,481,-46),1465=>array(-7,625,81,698),1466=>array(-7,625,81,698),1467=>array(154,-237,458,-17),1468=>array(281,237,369,310),1469=>array(264,-217,375,-22),1470=>array(41,472,320,552),1471=>array(166,625,474,698),1472=>array(30,-98,265,645),1473=>array(697,625,785,698),1474=>array(162,625,250,698),1475=>array(49,0,246,547),1478=>array(-3,0,385,547),1479=>array(178,-217,485,-22),1488=>array(91,0,684,547),1489=>array(43,0,549,547),1490=>array(43,-5,383,547),1491=>array(135,0,618,547),1492=>array(101,0,617,547),1493=>array(91,0,288,547),1494=>array(99,0,410,547),1495=>array(91,0,620,547),1496=>array(141,-14,659,552),1497=>array(106,204,264,547),1498=>array(135,-208,509,547),1499=>array(43,0,534,547),1500=>array(135,0,599,729),1501=>array(91,0,640,547),1502=>array(75,0,646,555),1503=>array(50,-208,288,547),1504=>array(43,0,377,547),1505=>array(144,-14,647,547),1506=>array(29,-93,642,547),1507=>array(163,-208,606,547),1508=>array(91,0,623,547),1509=>array(149,-208,603,548),1510=>array(43,0,607,547),1511=>array(62,-208,740,546),1512=>array(135,0,538,547),1513=>array(118,0,772,547),1514=>array(10,-4,634,547),1520=>array(91,0,486,547),1521=>array(106,0,486,547),1522=>array(106,204,462,547),1523=>array(73,361,343,547),1524=>array(73,361,572,547),3647=>array(24,-138,575,769),3713=>array(27,-10,632,560),3714=>array(39,-17,648,568),3716=>array(46,-10,620,568),3719=>array(26,-238,443,568),3720=>array(68,-0,579,575),3722=>array(61,-234,676,568),3725=>array(30,-8,673,573),3732=>array(34,0,589,568),3733=>array(25,-15,589,579),3734=>array(85,-240,660,560),3735=>array(20,-8,631,571),3737=>array(-28,-8,629,568),3738=>array(11,-8,610,571),3739=>array(-7,-8,631,760),3740=>array(13,-8,768,614),3741=>array(46,-14,751,760),3742=>array(25,-8,688,561),3743=>array(6,-8,710,760),3745=>array(-8,-14,690,547),3746=>array(12,-8,694,760),3747=>array(41,-8,669,568),3749=>array(5,-8,604,568),3751=>array(26,-8,585,569),3754=>array(-6,-8,729,679),3755=>array(48,-12,789,575),3757=>array(27,-8,585,568),3758=>array(40,-8,739,605),3759=>array(133,-166,768,579),3760=>array(28,53,618,587),3761=>array(-576,639,-42,880),3762=>array(74,0,489,560),3763=>array(-357,0,489,820),3764=>array(-594,615,-73,926),3765=>array(-593,612,-18,926),3766=>array(-594,615,-73,926),3767=>array(-593,612,-18,926),3768=>array(-363,-350,-160,-38),3769=>array(-425,-306,-129,-40),3771=>array(-581,639,-44,880),3772=>array(-618,-284,9,-39),3773=>array(-4,-240,699,715),3776=>array(35,-14,373,560),3777=>array(35,-14,646,560),3778=>array(50,-5,417,896),3779=>array(101,-14,546,892),3780=>array(161,-11,438,886),3782=>array(28,-232,626,557),3784=>array(-380,632,-264,807),3785=>array(-572,609,-23,891),3786=>array(-595,598,23,869),3787=>array(-469,624,-175,904),3788=>array(-630,630,-2,875),3789=>array(-424,635,-219,820),3792=>array(66,-14,570,547),3793=>array(73,-75,601,576),3794=>array(17,-66,558,711),3795=>array(-56,-9,766,830),3796=>array(19,-83,560,711),3797=>array(19,-83,560,711),3798=>array(-6,-8,811,812),3799=>array(49,-240,654,560),3800=>array(82,-210,679,557),3801=>array(17,-4,675,571),3804=>array(48,-12,1001,575),3805=>array(48,-12,1027,575),4256=>array(128,-15,920,828),4257=>array(162,-0,718,828),4258=>array(176,-148,651,837),4259=>array(115,-15,893,828),4260=>array(162,0,652,837),4261=>array(159,0,821,837),4262=>array(174,-15,742,828),4263=>array(132,-15,992,837),4264=>array(167,0,543,874),4265=>array(134,0,639,828),4266=>array(119,-15,827,828),4267=>array(103,-15,932,828),4268=>array(49,0,672,828),4269=>array(124,-167,880,837),4270=>array(171,-15,880,837),4271=>array(169,0,727,828),4272=>array(89,-15,960,828),4273=>array(107,-15,609,828),4274=>array(48,-0,672,837),4275=>array(124,-182,880,837),4276=>array(146,0,914,834),4277=>array(127,0,781,828),4278=>array(46,-15,673,837),4279=>array(155,0,718,828),4280=>array(89,-15,723,828),4281=>array(49,0,616,828),4282=>array(133,-15,869,837),4283=>array(105,-15,917,828),4284=>array(48,-0,687,828),4285=>array(94,-15,639,837),4286=>array(48,-0,728,828),4287=>array(66,0,856,828),4288=>array(135,-15,892,828),4289=>array(49,0,627,828),4290=>array(99,-15,679,837),4291=>array(127,0,693,828),4292=>array(159,0,701,828),4293=>array(60,-15,827,837),4304=>array(79,-15,488,592),4305=>array(90,-14,510,837),4306=>array(33,-235,526,551),4307=>array(50,-230,806,547),4308=>array(28,-236,509,547),4309=>array(27,-236,521,547),4310=>array(80,-14,491,836),4311=>array(88,-14,797,547),4312=>array(94,0,514,547),4313=>array(21,-236,510,542),4314=>array(100,-230,1071,552),4315=>array(90,-15,585,837),4316=>array(97,-15,593,833),4317=>array(96,-0,784,547),4318=>array(80,-15,550,833),4319=>array(27,-236,561,551),4320=>array(95,0,793,833),4321=>array(100,-15,509,827),4322=>array(62,-236,627,680),4323=>array(31,-236,533,571),4324=>array(98,-236,822,547),4325=>array(27,-236,610,828),4326=>array(99,-230,791,546),4327=>array(27,-236,559,538),4328=>array(83,-15,589,837),4329=>array(49,0,524,837),4330=>array(62,-236,569,532),4331=>array(89,-14,620,828),4332=>array(98,-15,651,837),4333=>array(37,-236,569,827),4334=>array(104,-15,516,827),4335=>array(-16,-235,478,572),4336=>array(76,-15,564,837),4337=>array(92,-15,582,837),4338=>array(24,-141,501,547),4339=>array(27,-236,560,546),4340=>array(28,-236,575,837),4341=>array(68,-15,616,837),4342=>array(91,-236,820,547),4343=>array(26,-236,504,547),4344=>array(28,-236,500,538),4345=>array(85,-236,578,551),4346=>array(77,-77,516,547),4347=>array(37,-10,441,484),4348=>array(155,420,431,837),5121=>array(79,1,747,730),5122=>array(-63,0,605,1037),5123=>array(-63,0,605,729),5124=>array(-63,0,605,914),5125=>array(27,0,722,729),5126=>array(27,0,722,914),5127=>array(27,0,722,913),5129=>array(27,0,722,729),5130=>array(47,0,742,729),5131=>array(47,0,742,914),5132=>array(88,1,898,730),5133=>array(79,1,786,730),5134=>array(88,0,756,729),5135=>array(-63,0,786,729),5136=>array(88,0,756,914),5137=>array(-63,0,786,914),5138=>array(88,0,920,729),5139=>array(27,0,918,729),5140=>array(88,0,920,914),5141=>array(27,0,918,914),5142=>array(27,0,746,914),5143=>array(88,0,940,729),5144=>array(47,0,918,729),5145=>array(88,0,940,914),5146=>array(47,0,918,914),5147=>array(47,0,742,914),5149=>array(88,629,208,729),5150=>array(27,326,448,734),5151=>array(20,356,388,714),5152=>array(72,356,336,714),5153=>array(66,398,361,674),5154=>array(40,391,335,667),5155=>array(41,398,339,667),5156=>array(67,398,335,667),5157=>array(0,327,440,733),5158=>array(27,326,370,734),5159=>array(88,312,208,412),5160=>array(61,503,340,563),5161=>array(61,399,340,667),5162=>array(83,399,363,691),5163=>array(79,1,1002,730),5164=>array(-63,0,821,729),5165=>array(27,0,866,729),5166=>array(47,0,1029,729),5167=>array(78,0,742,729),5168=>array(-63,0,605,1037),5169=>array(-63,0,605,729),5170=>array(-63,0,605,914),5171=>array(-13,0,682,729),5172=>array(-13,0,682,914),5173=>array(-13,0,682,913),5175=>array(-13,0,682,729),5176=>array(47,0,742,729),5177=>array(47,0,742,914),5178=>array(88,0,893,729),5179=>array(78,0,786,729),5180=>array(88,0,756,729),5181=>array(-63,0,786,729),5182=>array(88,0,756,914),5183=>array(-63,0,786,914),5184=>array(88,0,880,729),5185=>array(-13,0,918,729),5186=>array(88,0,880,914),5187=>array(-13,0,918,914),5188=>array(88,0,940,729),5189=>array(47,0,918,729),5190=>array(88,0,940,914),5191=>array(47,0,918,914),5192=>array(47,0,742,913),5193=>array(61,326,493,734),5194=>array(27,326,177,734),5196=>array(71,-14,717,729),5197=>array(15,0,661,1037),5198=>array(15,0,661,743),5199=>array(15,0,661,914),5200=>array(-13,0,671,729),5201=>array(-13,0,671,914),5202=>array(-13,0,671,913),5204=>array(-13,0,671,729),5205=>array(59,0,743,729),5206=>array(59,0,743,914),5207=>array(88,-14,906,729),5208=>array(71,-14,840,729),5209=>array(88,0,850,743),5210=>array(15,0,840,743),5211=>array(88,0,850,914),5212=>array(15,0,840,914),5213=>array(88,0,869,729),5214=>array(-13,0,852,729),5215=>array(88,0,869,914),5216=>array(-13,0,852,914),5217=>array(88,0,960,729),5218=>array(59,0,852,729),5219=>array(88,0,960,914),5220=>array(59,0,852,914),5221=>array(57,0,960,729),5222=>array(67,326,419,734),5223=>array(71,-14,863,734),5224=>array(15,0,863,743),5225=>array(-13,0,851,734),5226=>array(59,0,875,734),5227=>array(62,0,557,743),5228=>array(26,0,622,1037),5229=>array(26,0,622,743),5230=>array(26,0,622,914),5231=>array(7,-14,603,729),5232=>array(7,-14,656,914),5233=>array(7,-14,751,913),5234=>array(71,-14,567,729),5235=>array(71,-14,567,914),5236=>array(88,0,789,743),5237=>array(62,0,722,743),5238=>array(88,0,808,743),5239=>array(26,0,768,743),5240=>array(88,0,808,914),5241=>array(26,0,768,914),5242=>array(88,-14,834,729),5243=>array(7,-14,722,729),5244=>array(88,-14,888,914),5245=>array(7,-14,722,914),5246=>array(88,-14,753,729),5247=>array(71,-14,768,729),5248=>array(88,-14,753,914),5249=>array(71,-14,768,914),5250=>array(57,-14,753,729),5251=>array(52,318,364,734),5252=>array(8,318,380,734),5253=>array(62,0,736,743),5254=>array(26,0,760,743),5255=>array(7,-14,736,734),5256=>array(71,-14,760,734),5257=>array(62,0,557,743),5258=>array(26,0,622,1037),5259=>array(26,0,622,743),5260=>array(26,0,622,914),5261=>array(7,-14,603,729),5262=>array(7,-14,656,914),5263=>array(7,-14,751,913),5264=>array(71,-14,567,729),5265=>array(71,-14,567,914),5266=>array(88,0,789,743),5267=>array(62,0,722,743),5268=>array(88,0,808,743),5269=>array(26,0,768,743),5270=>array(88,0,808,914),5271=>array(26,0,768,914),5272=>array(88,-14,834,729),5273=>array(7,-14,722,729),5274=>array(88,-14,888,914),5275=>array(7,-14,722,914),5276=>array(88,-14,753,729),5277=>array(71,-14,768,729),5278=>array(88,-14,753,914),5279=>array(71,-14,768,914),5280=>array(57,-14,753,729),5281=>array(52,318,364,734),5282=>array(48,318,420,734),5283=>array(113,0,583,729),5284=>array(27,0,623,1037),5285=>array(27,0,623,729),5286=>array(27,0,623,914),5287=>array(-13,0,583,729),5288=>array(-13,0,641,914),5289=>array(-13,0,736,913),5290=>array(27,0,497,729),5291=>array(27,0,497,914),5292=>array(88,0,722,729),5293=>array(113,0,720,729),5294=>array(88,0,812,729),5295=>array(27,0,715,729),5296=>array(88,0,812,914),5297=>array(27,0,715,914),5298=>array(88,0,722,729),5299=>array(-13,0,720,729),5300=>array(88,0,780,914),5301=>array(-13,0,720,914),5302=>array(88,0,686,729),5303=>array(27,0,715,729),5304=>array(88,0,686,914),5305=>array(27,0,715,914),5306=>array(57,0,686,729),5307=>array(27,326,301,734),5308=>array(61,326,493,734),5309=>array(27,326,371,734),5312=>array(85,-14,825,436),5313=>array(29,-14,837,755),5314=>array(29,-14,837,436),5315=>array(0,-14,809,636),5316=>array(14,0,823,450),5317=>array(14,0,823,636),5318=>array(14,0,823,635),5319=>array(26,0,766,450),5320=>array(26,0,766,636),5321=>array(88,-14,1043,436),5322=>array(85,-14,986,436),5323=>array(88,0,998,450),5324=>array(26,0,767,450),5325=>array(88,0,998,636),5326=>array(26,0,767,636),5327=>array(26,0,766,635),5328=>array(66,484,531,736),5329=>array(48,318,438,734),5330=>array(42,484,548,736),5331=>array(85,0,825,450),5332=>array(29,0,837,755),5333=>array(29,0,837,450),5334=>array(29,0,837,636),5335=>array(14,0,823,450),5336=>array(14,0,823,636),5337=>array(14,0,823,635),5338=>array(26,0,766,450),5339=>array(26,0,766,636),5340=>array(88,0,1043,450),5341=>array(85,0,986,450),5342=>array(88,0,1069,450),5343=>array(29,0,981,450),5344=>array(88,0,1069,636),5345=>array(29,0,981,636),5346=>array(88,0,1041,450),5347=>array(14,0,986,450),5348=>array(88,0,1041,636),5349=>array(14,0,986,636),5350=>array(88,0,998,450),5351=>array(26,0,981,450),5352=>array(88,0,998,636),5353=>array(26,0,981,636),5354=>array(67,484,531,736),5356=>array(16,0,742,729),5357=>array(95,0,507,729),5358=>array(27,0,774,1037),5359=>array(27,0,640,729),5360=>array(27,0,694,914),5361=>array(-37,0,576,729),5362=>array(-37,0,633,914),5363=>array(-37,0,728,913),5364=>array(96,0,508,729),5365=>array(96,0,508,914),5366=>array(88,0,738,729),5367=>array(95,0,706,729),5368=>array(88,0,829,729),5369=>array(27,0,723,729),5370=>array(88,0,883,914),5371=>array(27,0,723,914),5372=>array(88,0,807,729),5373=>array(-37,0,706,729),5374=>array(88,0,864,914),5375=>array(-37,0,706,914),5376=>array(88,0,697,729),5377=>array(96,0,723,729),5378=>array(88,0,697,914),5379=>array(96,0,723,914),5380=>array(57,0,697,729),5381=>array(65,326,332,734),5382=>array(33,318,377,741),5383=>array(27,326,403,734),5392=>array(63,-14,649,743),5393=>array(-6,-14,718,743),5394=>array(-6,-14,718,914),5395=>array(32,-14,860,464),5396=>array(32,-14,860,636),5397=>array(26,-14,865,464),5398=>array(26,-14,865,636),5399=>array(88,-14,847,743),5400=>array(63,-14,824,743),5401=>array(88,-14,916,743),5402=>array(-6,-14,824,743),5403=>array(88,-14,916,914),5404=>array(-6,-14,824,914),5405=>array(88,-14,1109,464),5406=>array(32,-14,1051,464),5407=>array(88,-14,1109,636),5408=>array(32,-14,1051,636),5409=>array(88,-14,1114,464),5410=>array(26,-14,1051,464),5411=>array(88,-14,1114,636),5412=>array(26,-14,1051,636),5413=>array(63,476,590,737),5414=>array(44,0,531,729),5415=>array(27,0,571,1037),5416=>array(27,0,571,729),5417=>array(27,0,571,914),5418=>array(56,0,600,729),5419=>array(56,0,660,914),5420=>array(56,0,755,913),5421=>array(96,0,583,729),5422=>array(96,0,583,914),5423=>array(88,0,749,729),5424=>array(44,0,732,729),5425=>array(88,0,760,729),5426=>array(27,0,770,729),5427=>array(88,0,760,914),5428=>array(27,0,770,914),5429=>array(88,0,817,729),5430=>array(56,0,732,729),5431=>array(88,0,877,914),5432=>array(56,0,732,914),5433=>array(88,0,771,729),5434=>array(96,0,770,729),5435=>array(88,0,771,914),5436=>array(96,0,770,914),5437=>array(57,0,771,729),5438=>array(65,326,372,734),5440=>array(61,399,340,667),5441=>array(27,326,460,734),5442=>array(100,-14,901,436),5443=>array(86,-14,861,436),5444=>array(-39,0,763,450),5445=>array(54,0,830,755),5446=>array(54,0,830,450),5447=>array(54,0,830,636),5448=>array(27,0,597,729),5449=>array(27,0,597,914),5450=>array(27,0,541,729),5451=>array(63,0,576,729),5452=>array(63,0,576,914),5453=>array(6,0,576,729),5454=>array(88,0,807,914),5455=>array(63,0,706,914),5456=>array(83,326,403,734),5458=>array(-13,0,713,729),5459=>array(114,0,746,744),5460=>array(23,-15,606,1037),5461=>array(23,-15,606,729),5462=>array(23,-15,606,914),5463=>array(-9,0,686,662),5464=>array(-9,0,686,914),5465=>array(54,0,731,662),5466=>array(54,0,731,914),5467=>array(88,0,929,914),5468=>array(54,0,918,914),5469=>array(64,326,483,685),5470=>array(60,-14,716,743),5471=>array(60,-14,695,743),5472=>array(37,-14,672,743),5473=>array(16,-14,672,743),5474=>array(37,-14,672,914),5475=>array(16,-14,672,914),5476=>array(-13,0,682,729),5477=>array(-13,0,682,914),5478=>array(48,0,738,729),5479=>array(48,0,738,914),5480=>array(88,0,955,914),5481=>array(48,0,852,914),5482=>array(61,326,493,734),5492=>array(55,0,758,743),5493=>array(44,0,830,743),5494=>array(44,0,830,914),5495=>array(0,-14,787,729),5496=>array(0,-14,787,914),5497=>array(72,-14,776,729),5498=>array(72,-14,776,914),5499=>array(76,318,497,734),5500=>array(27,0,725,729),5501=>array(27,326,460,734),5502=>array(83,0,1040,1037),5503=>array(83,0,1040,743),5504=>array(83,0,1040,914),5505=>array(83,-14,1021,734),5506=>array(83,-14,1075,914),5507=>array(83,-14,985,734),5508=>array(83,-14,985,914),5509=>array(83,318,783,734),5514=>array(61,0,759,743),5515=>array(44,0,831,743),5516=>array(0,-14,787,729),5517=>array(72,-14,770,729),5518=>array(83,0,1252,1037),5519=>array(83,0,1252,743),5520=>array(83,0,1252,914),5521=>array(83,-14,976,736),5522=>array(83,-14,1030,914),5523=>array(83,-14,1198,736),5524=>array(83,-14,1198,914),5525=>array(83,332,646,736),5526=>array(83,332,1020,736),5536=>array(12,0,822,692),5537=>array(12,0,822,692),5538=>array(-23,-242,787,450),5539=>array(-23,-242,787,636),5540=>array(56,-242,790,450),5541=>array(56,-242,790,636),5542=>array(81,338,545,736),5543=>array(44,0,593,729),5544=>array(-34,0,588,729),5545=>array(-34,0,588,914),5546=>array(55,0,677,729),5547=>array(55,0,677,914),5548=>array(50,0,599,729),5549=>array(50,0,599,914),5550=>array(23,326,372,734),5551=>array(29,-14,574,729),5598=>array(27,0,711,729),5601=>array(98,0,782,729),5702=>array(27,326,446,734),5703=>array(27,240,446,820),5742=>array(27,0,415,306),5743=>array(83,0,976,743),5744=>array(83,0,1238,743),5745=>array(83,0,1625,743),5746=>array(83,0,1625,914),5747=>array(83,-14,1349,736),5748=>array(83,-14,1403,914),5749=>array(83,-14,1571,736),5750=>array(83,-14,1571,914),7424=>array(-23,0,509,547),7425=>array(-48,0,716,547),7426=>array(56,-14,951,560),7427=>array(0,0,531,547),7428=>array(46,-14,536,560),7429=>array(38,0,550,547),7430=>array(12,0,550,547),7431=>array(38,0,490,547),7432=>array(31,-14,493,561),7433=>array(21,-213,258,547),7434=>array(-46,-14,365,547),7435=>array(38,0,617,547),7436=>array(-9,0,460,560),7437=>array(38,0,717,547),7438=>array(38,0,612,547),7439=>array(46,-14,566,560),7440=>array(2,-14,493,560),7441=>array(55,22,629,524),7442=>array(37,57,618,489),7443=>array(57,2,631,543),7444=>array(51,-14,970,560),7446=>array(27,273,529,560),7447=>array(83,-14,585,273),7448=>array(21,0,496,547),7449=>array(-29,0,561,547),7450=>array(78,0,561,547),7451=>array(68,0,606,547),7452=>array(78,-16,564,547),7453=>array(41,37,676,495),7454=>array(56,38,887,496),7455=>array(-55,-238,647,560),7456=>array(72,0,604,547),7457=>array(85,0,819,547),7458=>array(-3,0,543,547),7459=>array(18,-14,488,547),7462=>array(33,0,552,560),7463=>array(-23,0,509,547),7464=>array(21,0,543,547),7465=>array(21,0,496,547),7466=>array(69,0,599,547),7467=>array(-16,0,609,547),7468=>array(-35,326,386,734),7469=>array(-37,326,607,734),7470=>array(22,326,389,734),7472=>array(22,326,448,734),7473=>array(22,326,392,734),7474=>array(1,326,376,734),7475=>array(35,318,458,742),7476=>array(22,326,452,734),7477=>array(22,326,164,734),7478=>array(-83,214,175,734),7479=>array(22,326,450,734),7480=>array(22,326,317,734),7481=>array(22,326,521,734),7482=>array(22,326,449,734),7483=>array(22,326,449,734),7484=>array(35,318,460,742),7485=>array(18,318,413,742),7486=>array(22,326,375,734),7487=>array(22,326,380,734),7488=>array(29,326,426,734),7489=>array(45,318,447,734),7490=>array(61,326,642,734),7491=>array(25,318,333,640),7492=>array(33,318,341,640),7493=>array(35,318,373,640),7494=>array(35,318,598,640),7495=>array(17,318,354,751),7496=>array(24,318,385,751),7497=>array(34,318,356,640),7498=>array(32,318,354,640),7499=>array(29,318,315,640),7500=>array(23,318,309,640),7501=>array(38,209,383,640),7502=>array(18,207,158,632),7503=>array(16,326,374,751),7504=>array(27,326,565,640),7505=>array(38,209,363,640),7506=>array(35,318,351,640),7507=>array(7,318,307,640),7508=>array(19,479,335,640),7509=>array(50,318,367,479),7510=>array(15,209,376,640),7511=>array(31,326,253,719),7512=>array(48,318,373,632),7513=>array(29,347,423,604),7514=>array(52,319,590,633),7515=>array(48,326,384,632),7517=>array(6,209,356,755),7518=>array(42,209,395,632),7519=>array(25,318,347,742),7520=>array(46,209,391,635),7521=>array(-23,209,387,633),7522=>array(18,0,158,425),7523=>array(27,0,289,313),7524=>array(48,-8,373,306),7525=>array(48,0,384,306),7526=>array(6,-117,356,429),7527=>array(42,-117,395,306),7528=>array(6,-117,371,313),7529=>array(46,-117,391,309),7530=>array(-23,-117,387,307),7543=>array(19,-208,583,560),7544=>array(22,326,452,734),7547=>array(3,0,368,547),7549=>array(-3,-208,652,560),7557=>array(30,-208,332,760),7579=>array(5,318,343,640),7580=>array(35,318,334,640),7581=>array(38,287,338,640),7582=>array(22,318,353,751),7583=>array(13,318,304,640),7584=>array(25,326,275,751),7585=>array(-52,209,159,632),7586=>array(38,209,384,632),7587=>array(59,209,383,632),7588=>array(19,326,189,751),7589=>array(51,326,165,632),7590=>array(6,326,228,632),7591=>array(6,326,228,632),7592=>array(-124,209,169,751),7593=>array(28,209,169,751),7594=>array(-8,209,169,751),7595=>array(25,326,292,640),7596=>array(38,209,577,640),7597=>array(63,209,601,633),7598=>array(-53,209,365,640),7599=>array(38,209,383,640),7600=>array(25,326,376,640),7601=>array(35,318,351,640),7602=>array(34,210,351,751),7603=>array(14,209,317,640),7604=>array(-64,209,276,751),7605=>array(42,209,265,719),7606=>array(41,318,449,632),7607=>array(36,318,386,632),7608=>array(50,317,352,632),7609=>array(51,326,341,632),7610=>array(-11,326,324,632),7611=>array(-3,326,333,632),7612=>array(8,209,345,632),7613=>array(0,296,336,632),7614=>array(-11,207,344,632),7615=>array(35,320,351,756),7620=>array(-452,616,-61,800),7621=>array(-472,616,-28,800),7622=>array(-472,616,-28,800),7623=>array(-439,616,-48,800),7624=>array(-313,616,87,800),7625=>array(-348,616,123,800),7680=>array(-53,-241,615,729),7681=>array(41,-241,547,560),7682=>array(27,0,625,913),7683=>array(36,-14,587,915),7684=>array(27,-184,625,729),7685=>array(36,-184,587,760),7686=>array(27,-157,625,729),7687=>array(36,-157,587,760),7688=>array(42,-193,695,928),7689=>array(46,-193,536,800),7690=>array(27,0,722,914),7691=>array(46,-14,674,942),7692=>array(27,-184,722,729),7693=>array(46,-184,639,760),7694=>array(27,-156,722,729),7695=>array(46,-157,639,760),7696=>array(27,-193,722,729),7697=>array(44,-193,639,760),7698=>array(27,-240,722,729),7699=>array(34,-240,639,760),7700=>array(27,0,630,1044),7701=>array(46,-14,571,887),7702=>array(27,0,630,1044),7703=>array(46,-14,608,887),7704=>array(27,-213,630,729),7705=>array(46,-213,571,560),7706=>array(27,-193,630,729),7707=>array(46,-193,571,560),7708=>array(27,-193,630,928),7709=>array(46,-193,586,780),7710=>array(27,0,587,914),7711=>array(68,0,478,942),7712=>array(45,-14,725,899),7713=>array(32,-208,596,745),7714=>array(27,0,725,914),7715=>array(35,0,566,942),7716=>array(27,-184,725,729),7717=>array(35,-184,566,760),7718=>array(27,0,725,913),7719=>array(35,0,587,913),7720=>array(-79,-193,725,729),7721=>array(-77,-193,566,760),7722=>array(27,-222,725,729),7723=>array(35,-222,566,760),7724=>array(-110,-193,268,729),7725=>array(-127,-193,273,760),7726=>array(27,0,447,1044),7727=>array(35,0,437,883),7728=>array(27,0,722,928),7729=>array(35,0,612,928),7730=>array(27,-184,722,729),7731=>array(35,-184,612,760),7732=>array(27,-157,722,729),7733=>array(35,-157,612,760),7734=>array(27,-184,497,729),7735=>array(-2,-184,273,760),7736=>array(27,-184,497,927),7737=>array(-2,-184,411,899),7738=>array(27,-157,497,729),7739=>array(-92,-157,273,760),7740=>array(27,-240,497,729),7741=>array(-123,-240,273,760),7742=>array(27,0,836,928),7743=>array(35,0,906,800),7744=>array(27,0,836,914),7745=>array(35,0,906,760),7746=>array(27,-184,836,729),7747=>array(35,-184,906,560),7748=>array(27,0,721,913),7749=>array(35,0,566,760),7750=>array(27,-184,721,729),7751=>array(35,-184,566,560),7752=>array(27,-157,721,729),7753=>array(35,-157,566,560),7754=>array(27,-240,721,729),7755=>array(35,-240,566,560),7756=>array(40,-14,747,1044),7757=>array(46,-14,629,883),7758=>array(40,-14,747,1043),7759=>array(46,-14,583,885),7760=>array(40,-14,747,1044),7761=>array(46,-14,566,887),7762=>array(40,-14,747,1045),7763=>array(46,-14,600,886),7764=>array(27,0,601,928),7765=>array(-3,-208,589,800),7766=>array(27,0,601,914),7767=>array(-3,-208,589,760),7768=>array(27,0,600,914),7769=>array(35,0,463,760),7770=>array(27,-184,600,729),7771=>array(-2,-184,463,560),7772=>array(27,-184,600,899),7773=>array(-2,-184,504,745),7774=>array(27,-157,600,729),7775=>array(-93,-157,463,560),7776=>array(6,-14,603,914),7777=>array(11,-14,500,760),7778=>array(6,-184,603,742),7779=>array(11,-184,500,560),7780=>array(6,-14,648,928),7781=>array(11,-14,642,800),7782=>array(6,-14,659,1042),7783=>array(11,-14,571,858),7784=>array(6,-184,603,914),7785=>array(11,-184,500,760),7786=>array(43,0,676,914),7787=>array(64,0,423,942),7788=>array(43,-184,676,729),7789=>array(64,-184,423,702),7790=>array(43,-157,676,729),7791=>array(19,-156,423,702),7792=>array(23,-241,676,729),7793=>array(-10,-240,423,702),7794=>array(58,-183,713,729),7795=>array(57,-183,589,547),7796=>array(58,-193,713,729),7797=>array(28,-193,589,547),7798=>array(58,-213,713,729),7799=>array(57,-213,589,547),7800=>array(58,-14,713,1044),7801=>array(57,-14,619,883),7802=>array(58,-14,713,1025),7803=>array(57,-14,589,867),7804=>array(78,0,742,936),7805=>array(72,0,604,777),7806=>array(78,-182,742,729),7807=>array(72,-184,604,547),7808=>array(96,0,1020,931),7809=>array(85,0,819,802),7810=>array(96,0,1020,931),7811=>array(85,0,819,803),7812=>array(96,0,1020,913),7813=>array(85,0,819,758),7814=>array(96,0,1020,913),7815=>array(85,0,819,760),7816=>array(96,-184,1020,729),7817=>array(85,-184,819,547),7818=>array(-43,0,703,914),7819=>array(-26,0,600,760),7820=>array(-43,0,703,913),7821=>array(-26,0,600,758),7822=>array(63,0,676,914),7823=>array(-25,-208,603,760),7824=>array(-22,0,703,928),7825=>array(-3,0,543,800),7826=>array(-22,-184,703,729),7827=>array(-3,-184,543,547),7828=>array(-22,-157,703,729),7829=>array(-3,-157,543,547),7830=>array(35,-157,566,760),7831=>array(64,0,423,913),7832=>array(85,0,819,878),7833=>array(-25,-208,603,878),7834=>array(41,-14,777,760),7835=>array(68,0,478,942),7836=>array(-22,0,445,760),7837=>array(28,0,445,760),7838=>array(16,-14,682,743),7839=>array(38,-14,557,742),7840=>array(-53,-184,615,729),7841=>array(41,-184,547,560),7842=>array(-53,0,615,992),7843=>array(41,-14,555,810),7844=>array(-53,0,770,1028),7845=>array(41,-14,712,847),7846=>array(-53,0,615,1028),7847=>array(41,-14,547,847),7848=>array(-53,0,773,1044),7849=>array(41,-14,711,863),7850=>array(-53,0,641,1043),7851=>array(41,-14,580,862),7852=>array(-53,-184,615,928),7853=>array(41,-184,547,800),7854=>array(-53,0,649,1044),7855=>array(41,-14,594,868),7856=>array(-53,0,615,1044),7857=>array(41,-14,558,868),7858=>array(-53,0,615,1068),7859=>array(41,-14,552,895),7860=>array(-53,0,651,1043),7861=>array(41,-14,596,870),7862=>array(-53,-184,624,926),7863=>array(41,-184,562,761),7864=>array(27,-184,630,729),7865=>array(46,-184,571,560),7866=>array(27,0,630,992),7867=>array(46,-14,583,810),7868=>array(27,0,630,921),7869=>array(46,-14,571,777),7870=>array(27,0,760,1028),7871=>array(46,-14,741,847),7872=>array(27,0,630,1028),7873=>array(46,-14,571,847),7874=>array(27,0,764,1044),7875=>array(46,-14,746,863),7876=>array(27,0,631,1043),7877=>array(46,-14,614,862),7878=>array(27,-184,630,928),7879=>array(46,-184,571,800),7880=>array(27,0,368,992),7881=>array(35,0,336,810),7882=>array(-6,-184,268,729),7883=>array(-2,-184,273,760),7884=>array(40,-184,747,742),7885=>array(46,-184,566,560),7886=>array(40,-14,747,992),7887=>array(46,-14,575,810),7888=>array(40,-14,821,1028),7889=>array(46,-14,736,847),7890=>array(40,-14,747,1028),7891=>array(46,-14,566,847),7892=>array(40,-14,824,1044),7893=>array(46,-14,736,863),7894=>array(40,-14,747,1043),7895=>array(46,-14,604,862),7896=>array(40,-184,747,928),7897=>array(46,-184,566,800),7898=>array(34,-14,823,927),7899=>array(48,-14,657,800),7900=>array(34,-14,823,927),7901=>array(48,-14,657,800),7902=>array(34,-14,823,991),7903=>array(48,-14,657,810),7904=>array(34,-14,823,921),7905=>array(48,-14,657,777),7906=>array(34,-184,823,761),7907=>array(48,-184,657,609),7908=>array(58,-184,713,729),7909=>array(57,-184,589,547),7910=>array(58,-14,713,992),7911=>array(57,-14,589,810),7912=>array(56,-4,854,927),7913=>array(58,-14,720,800),7914=>array(56,-4,854,927),7915=>array(58,-14,720,800),7916=>array(56,-4,854,992),7917=>array(58,-14,720,810),7918=>array(56,-4,854,921),7919=>array(58,-14,720,777),7920=>array(56,-184,854,761),7921=>array(58,-184,720,615),7922=>array(63,0,676,931),7923=>array(-25,-208,603,802),7924=>array(63,-184,676,729),7925=>array(-25,-208,603,547),7926=>array(63,0,676,996),7927=>array(-25,-208,603,813),7928=>array(63,0,676,921),7929=>array(-25,-208,603,777),7930=>array(27,0,709,729),7931=>array(21,0,522,760),7936=>array(55,-12,645,797),7937=>array(55,-12,645,797),7938=>array(55,-12,645,800),7939=>array(55,-12,645,800),7940=>array(55,-12,645,800),7941=>array(55,-12,646,800),7942=>array(55,-12,645,928),7943=>array(55,-12,645,928),7944=>array(-53,0,615,797),7945=>array(-53,0,615,797),7946=>array(51,0,809,800),7947=>array(79,0,809,800),7948=>array(32,0,700,800),7949=>array(64,0,732,800),7950=>array(-29,0,639,928),7951=>array(5,0,674,928),7952=>array(39,-14,506,797),7953=>array(39,-14,506,797),7954=>array(39,-14,533,800),7955=>array(39,-14,532,800),7956=>array(39,-14,593,800),7957=>array(39,-14,608,800),7960=>array(52,0,709,797),7961=>array(79,0,709,797),7962=>array(51,0,964,800),7963=>array(79,0,973,800),7964=>array(52,0,896,800),7965=>array(78,0,926,800),7968=>array(57,-208,579,797),7969=>array(57,-208,579,797),7970=>array(57,-208,580,800),7971=>array(57,-208,579,800),7972=>array(57,-208,619,800),7973=>array(57,-208,653,800),7974=>array(57,-208,622,928),7975=>array(57,-208,611,928),7976=>array(52,0,810,797),7977=>array(79,0,809,797),7978=>array(51,0,1059,800),7979=>array(79,0,1062,800),7980=>array(52,0,1000,800),7981=>array(78,0,1024,800),7982=>array(111,0,907,928),7983=>array(109,0,920,928),7984=>array(67,0,282,797),7985=>array(67,0,279,797),7986=>array(10,0,412,800),7987=>array(42,0,418,800),7988=>array(51,0,469,800),7989=>array(53,0,473,800),7990=>array(67,0,431,928),7991=>array(67,0,428,928),7992=>array(52,0,353,797),7993=>array(79,0,347,797),7994=>array(51,0,608,800),7995=>array(79,0,608,800),7996=>array(52,0,543,800),7997=>array(78,0,573,800),7998=>array(111,0,463,928),7999=>array(109,0,466,928),8000=>array(46,-14,566,797),8001=>array(46,-14,566,797),8002=>array(46,-14,567,800),8003=>array(46,-14,566,800),8004=>array(46,-14,621,800),8005=>array(46,-14,639,800),8008=>array(52,-14,764,797),8009=>array(79,-14,808,797),8010=>array(51,-14,1055,800),8011=>array(79,-14,1060,800),8012=>array(52,-14,898,800),8013=>array(78,-14,930,800),8016=>array(59,0,533,797),8017=>array(59,0,533,797),8018=>array(59,0,537,800),8019=>array(59,0,533,800),8020=>array(59,0,601,800),8021=>array(59,0,611,800),8022=>array(59,0,573,928),8023=>array(59,0,557,928),8025=>array(79,0,849,797),8027=>array(79,0,1063,800),8029=>array(78,0,1077,800),8031=>array(109,0,963,928),8032=>array(68,-14,771,797),8033=>array(68,-14,771,797),8034=>array(68,-14,771,800),8035=>array(68,-14,771,800),8036=>array(68,-14,771,800),8037=>array(68,-14,771,800),8038=>array(68,-14,771,928),8039=>array(68,-14,771,928),8040=>array(4,0,761,797),8041=>array(45,0,802,797),8042=>array(51,0,1048,800),8043=>array(79,0,1054,800),8044=>array(52,0,904,800),8045=>array(78,0,931,800),8046=>array(111,0,880,928),8047=>array(109,0,911,928),8048=>array(55,-12,645,800),8049=>array(55,-12,645,800),8050=>array(39,-14,506,800),8051=>array(39,-14,561,800),8052=>array(57,-208,579,800),8053=>array(57,-208,619,800),8054=>array(51,0,265,800),8055=>array(67,0,431,800),8056=>array(46,-14,566,800),8057=>array(46,-14,583,800),8058=>array(59,0,533,800),8059=>array(59,0,539,800),8060=>array(68,-14,771,800),8061=>array(68,-14,771,800),8064=>array(55,-208,645,797),8065=>array(55,-208,645,797),8066=>array(55,-208,645,800),8067=>array(55,-208,645,800),8068=>array(55,-208,645,800),8069=>array(55,-208,646,800),8070=>array(55,-208,645,928),8071=>array(55,-208,645,928),8072=>array(-53,-208,615,797),8073=>array(-53,-208,615,797),8074=>array(51,-208,809,800),8075=>array(79,-208,809,800),8076=>array(32,-208,700,800),8077=>array(64,-208,732,800),8078=>array(-29,-208,639,928),8079=>array(5,-208,674,928),8080=>array(39,-208,579,797),8081=>array(39,-208,579,797),8082=>array(39,-208,580,800),8083=>array(39,-208,579,800),8084=>array(39,-208,619,800),8085=>array(39,-208,653,800),8086=>array(39,-208,622,928),8087=>array(39,-208,611,928),8088=>array(52,-208,810,797),8089=>array(79,-208,809,797),8090=>array(51,-208,1059,800),8091=>array(79,-208,1062,800),8092=>array(52,-208,1000,800),8093=>array(78,-208,1024,800),8094=>array(111,-208,907,928),8095=>array(109,-208,920,928),8096=>array(68,-208,771,797),8097=>array(68,-208,771,797),8098=>array(68,-208,771,800),8099=>array(68,-208,771,800),8100=>array(68,-208,771,800),8101=>array(68,-208,771,800),8102=>array(68,-208,771,928),8103=>array(68,-208,771,928),8104=>array(4,-208,761,797),8105=>array(45,-208,802,797),8106=>array(51,-208,1048,800),8107=>array(79,-208,1054,800),8108=>array(52,-208,904,800),8109=>array(78,-208,931,800),8110=>array(111,-208,880,928),8111=>array(109,-208,911,928),8112=>array(55,-12,645,785),8113=>array(55,-12,645,745),8114=>array(55,-208,645,800),8115=>array(55,-208,645,559),8116=>array(55,-208,645,800),8118=>array(55,-12,645,777),8119=>array(55,-208,645,777),8120=>array(-53,0,615,928),8121=>array(-53,0,615,899),8122=>array(-21,0,647,800),8123=>array(-53,0,615,800),8124=>array(-53,-208,615,729),8125=>array(239,595,397,797),8126=>array(136,-208,240,-45),8127=>array(239,595,397,797),8128=>array(164,639,513,777),8129=>array(184,659,545,928),8130=>array(39,-208,579,800),8131=>array(39,-208,579,560),8132=>array(39,-208,619,800),8134=>array(57,-208,583,777),8135=>array(39,-208,583,777),8136=>array(105,0,803,800),8137=>array(59,0,765,800),8138=>array(105,0,904,800),8139=>array(64,0,869,800),8140=>array(27,-208,725,729),8141=>array(116,595,518,800),8142=>array(137,595,554,800),8143=>array(196,595,545,928),8144=>array(67,0,399,785),8145=>array(67,0,374,745),8146=>array(67,0,391,978),8147=>array(74,0,450,978),8150=>array(62,0,411,777),8151=>array(67,0,444,928),8152=>array(27,0,394,928),8153=>array(27,0,391,899),8154=>array(105,0,448,800),8155=>array(62,0,409,800),8157=>array(137,595,514,800),8158=>array(148,595,568,800),8159=>array(196,595,545,928),8160=>array(59,0,533,785),8161=>array(59,0,533,745),8162=>array(59,0,533,978),8163=>array(59,0,566,978),8164=>array(16,-208,599,797),8165=>array(16,-208,599,797),8166=>array(59,0,533,777),8167=>array(59,0,558,928),8168=>array(63,0,676,928),8169=>array(63,0,676,899),8170=>array(105,0,910,800),8171=>array(56,0,919,800),8172=>array(79,0,683,797),8173=>array(184,659,493,978),8174=>array(184,659,553,978),8175=>array(190,617,388,800),8178=>array(68,-208,771,800),8179=>array(68,-208,771,547),8180=>array(68,-208,771,800),8182=>array(68,-14,771,777),8183=>array(68,-208,771,777),8184=>array(105,-14,901,800),8185=>array(64,-14,793,800),8186=>array(105,0,881,800),8187=>array(53,0,828,800),8188=>array(-34,-208,723,738),8189=>array(252,616,522,800),8190=>array(266,595,398,797),8208=>array(45,234,324,314),8209=>array(45,234,324,314),8210=>array(42,239,594,309),8211=>array(42,239,458,309),8212=>array(42,239,958,309),8213=>array(-7,239,1007,309),8214=>array(127,-236,371,764),8215=>array(-10,-236,510,-9),8216=>array(131,489,321,729),8217=>array(135,489,325,729),8218=>array(3,-116,193,124),8219=>array(165,489,287,729),8220=>array(131,489,521,729),8221=>array(135,489,525,729),8222=>array(3,-116,393,124),8223=>array(92,489,412,729),8224=>array(42,-96,501,729),8225=>array(-17,-96,508,729),8226=>array(150,227,440,516),8227=>array(150,188,479,555),8228=>array(65,0,192,124),8229=>array(65,0,525,124),8230=>array(65,0,859,124),8231=>array(99,302,226,426),8240=>array(91,-14,1259,742),8241=>array(91,-14,1659,742),8242=>array(2,547,221,729),8243=>array(2,547,367,729),8244=>array(2,547,514,729),8245=>array(90,547,238,729),8246=>array(90,547,385,729),8247=>array(90,547,531,729),8248=>array(5,-236,333,-30),8249=>array(62,69,338,517),8250=>array(62,69,338,517),8251=>array(114,0,717,596),8252=>array(0,0,483,729),8253=>array(115,0,500,742),8254=>array(-10,686,510,755),8255=>array(-43,-237,847,-60),8256=>array(-43,752,847,929),8257=>array(-42,-236,286,229),8258=>array(30,-29,970,814),8259=>array(97,313,411,421),8260=>array(-262,-14,428,742),8261=>array(40,-132,420,760),8262=>array(-39,-132,342,760),8263=>array(87,0,937,742),8264=>array(123,0,731,742),8265=>array(0,0,711,742),8266=>array(98,-123,513,545),8267=>array(54,-96,633,729),8268=>array(112,227,387,516),8269=>array(112,227,387,516),8270=>array(30,-29,470,427),8271=>array(96,-116,287,517),8272=>array(-43,-237,847,929),8273=>array(30,-7,470,876),8274=>array(-9,-93,491,729),8275=>array(49,228,951,399),8276=>array(-43,-237,847,-60),8277=>array(160,98,708,631),8278=>array(129,149,523,589),8279=>array(2,547,660,729),8280=>array(182,125,688,613),8281=>array(154,120,726,608),8282=>array(51,0,296,729),8283=>array(52,-138,776,867),8284=>array(63,0,806,729),8285=>array(59,39,282,655),8286=>array(53,8,287,683),8304=>array(42,319,367,742),8305=>array(18,326,158,751),8308=>array(41,326,390,734),8309=>array(13,319,359,734),8310=>array(45,319,376,742),8311=>array(78,326,394,734),8312=>array(26,319,375,742),8313=>array(33,319,364,742),8314=>array(67,326,461,677),8315=>array(67,479,461,525),8316=>array(67,422,461,581),8317=>array(55,252,246,751),8318=>array(7,252,198,751),8319=>array(26,326,352,640),8320=>array(42,-7,367,416),8321=>array(66,0,347,408),8322=>array(36,0,385,416),8323=>array(16,-7,368,416),8324=>array(41,0,390,408),8325=>array(13,-7,359,408),8326=>array(45,-7,376,416),8327=>array(78,0,394,408),8328=>array(26,-7,375,416),8329=>array(33,-7,364,416),8330=>array(67,0,461,351),8331=>array(67,152,461,199),8332=>array(67,96,461,254),8333=>array(55,-74,246,425),8334=>array(7,-74,198,425),8336=>array(25,-8,333,313),8337=>array(34,-8,356,313),8338=>array(35,-8,351,313),8339=>array(27,0,415,306),8340=>array(32,-8,354,313),8341=>array(16,0,340,425),8342=>array(16,0,374,425),8343=>array(16,0,155,425),8344=>array(27,0,565,313),8345=>array(26,0,352,314),8346=>array(15,-117,376,313),8347=>array(30,0,330,322),8348=>array(31,0,253,393),8352=>array(58,0,864,729),8353=>array(42,-44,636,778),8354=>array(42,-14,636,742),8355=>array(32,0,657,729),8356=>array(24,0,637,742),8357=>array(38,-93,900,640),8358=>array(38,0,710,729),8359=>array(27,-14,1250,729),8360=>array(28,-14,1029,729),8361=>array(43,0,1027,729),8362=>array(-24,-14,826,729),8363=>array(46,-157,701,760),8364=>array(-19,-14,607,742),8365=>array(19,0,682,729),8366=>array(64,0,698,729),8367=>array(47,-222,1178,742),8368=>array(9,-14,578,742),8369=>array(27,0,655,729),8370=>array(32,-81,630,809),8371=>array(-63,0,632,729),8372=>array(38,-14,736,742),8373=>array(84,-147,611,760),8376=>array(37,0,697,729),8377=>array(56,0,656,729),8378=>array(-20,2,649,731),8400=>array(-503,635,-28,760),8401=>array(-482,635,-17,760),8406=>array(-470,560,-21,760),8407=>array(-475,560,-26,760),8411=>array(-360,659,140,758),8412=>array(-456,659,235,758),8417=>array(-470,560,-26,760),8448=>array(17,-24,939,752),8449=>array(17,-24,939,752),8450=>array(56,-14,644,742),8451=>array(95,-14,1104,742),8452=>array(114,0,771,729),8453=>array(22,-24,924,752),8454=>array(22,-24,989,752),8455=>array(121,-14,676,742),8456=>array(-6,-146,642,611),8457=>array(95,0,916,742),8459=>array(36,-14,943,748),8460=>array(1,-128,693,731),8461=>array(98,0,751,729),8462=>array(35,0,566,760),8463=>array(44,0,566,760),8464=>array(29,-15,432,742),8465=>array(52,-14,659,742),8466=>array(33,-14,679,743),8467=>array(-14,-14,353,742),8468=>array(22,-14,762,760),8469=>array(97,0,704,729),8470=>array(-44,0,962,729),8471=>array(138,0,862,724),8472=>array(54,-221,658,495),8473=>array(98,0,666,729),8474=>array(56,-129,731,742),8475=>array(32,-9,764,774),8476=>array(41,-14,803,743),8477=>array(98,0,774,729),8478=>array(83,0,814,729),8479=>array(93,-107,670,847),8480=>array(126,443,770,730),8481=>array(32,0,987,547),8482=>array(144,447,784,729),8483=>array(14,-108,817,846),8484=>array(45,0,700,729),8485=>array(9,-213,627,760),8486=>array(-34,0,723,738),8487=>array(42,-14,798,724),8488=>array(12,-149,573,783),8489=>array(71,0,270,547),8490=>array(27,0,722,729),8491=>array(-53,0,615,928),8492=>array(45,0,734,772),8493=>array(63,-12,652,742),8494=>array(61,-12,793,647),8495=>array(42,-15,547,533),8496=>array(79,-14,565,742),8497=>array(41,-16,758,755),8498=>array(27,0,587,729),8499=>array(28,-28,1032,751),8500=>array(51,-12,411,395),8501=>array(50,-14,712,742),8502=>array(-2,-14,653,743),8503=>array(13,-35,407,742),8504=>array(42,-35,591,742),8505=>array(34,0,355,760),8506=>array(44,-21,967,654),8507=>array(20,0,1198,547),8508=>array(18,-8,685,547),8509=>array(0,-194,669,560),8510=>array(98,0,648,729),8511=>array(98,0,750,729),8512=>array(12,-192,791,719),8513=>array(47,-14,728,742),8514=>array(59,0,529,729),8515=>array(3,0,599,729),8516=>array(-65,0,548,729),8517=>array(42,0,786,729),8518=>array(44,-14,709,760),8519=>array(44,-14,572,560),8520=>array(39,0,313,760),8521=>array(-114,-208,313,760),8523=>array(58,-14,742,742),8526=>array(-14,0,495,547),8528=>array(66,-14,962,742),8529=>array(66,-14,932,742),8530=>array(66,-14,1335,742),8531=>array(66,-14,936,742),8532=>array(36,-14,936,742),8533=>array(66,-14,927,742),8534=>array(36,-14,927,742),8535=>array(16,-14,927,742),8536=>array(41,-14,927,742),8537=>array(66,-14,944,742),8538=>array(13,-14,944,742),8539=>array(66,-14,943,742),8540=>array(16,-14,943,742),8541=>array(13,-14,943,742),8542=>array(78,-14,943,742),8543=>array(66,-14,829,742),8544=>array(27,0,268,729),8545=>array(27,0,465,729),8546=>array(27,0,663,729),8547=>array(27,0,981,729),8548=>array(78,0,742,729),8549=>array(78,0,896,729),8550=>array(78,0,1093,729),8551=>array(78,0,1290,729),8552=>array(27,0,936,729),8553=>array(-43,0,703,729),8554=>array(-43,0,906,729),8555=>array(-43,0,1104,729),8556=>array(27,0,497,729),8557=>array(42,-14,695,742),8558=>array(27,0,722,729),8559=>array(27,0,836,729),8560=>array(35,0,273,760),8561=>array(35,0,453,760),8562=>array(35,0,632,760),8563=>array(35,0,824,760),8564=>array(72,0,604,547),8565=>array(72,0,806,760),8566=>array(72,0,986,760),8567=>array(72,0,1166,760),8568=>array(35,0,827,760),8569=>array(-26,0,600,547),8570=>array(-26,0,817,760),8571=>array(-26,0,997,760),8572=>array(35,0,273,760),8573=>array(46,-14,536,560),8574=>array(46,-14,639,760),8575=>array(35,0,906,560),8576=>array(59,0,1187,729),8577=>array(27,0,711,729),8578=>array(59,0,1187,729),8579=>array(63,-14,715,742),8580=>array(2,-14,493,560),8581=>array(75,-208,723,742),8585=>array(42,-14,936,742),8592=>array(49,100,781,527),8593=>array(205,0,632,732),8594=>array(57,100,789,527),8595=>array(205,-3,632,729),8596=>array(49,100,789,527),8597=>array(205,-8,632,732),8598=>array(141,25,703,587),8599=>array(141,25,703,587),8600=>array(141,25,703,587),8601=>array(141,25,703,587),8602=>array(49,100,781,527),8603=>array(57,100,789,527),8604=>array(21,103,827,414),8605=>array(11,103,816,414),8606=>array(49,100,781,527),8607=>array(206,0,633,732),8608=>array(57,100,789,527),8609=>array(206,-3,633,729),8610=>array(49,100,781,527),8611=>array(57,100,789,527),8612=>array(49,100,781,527),8613=>array(206,0,632,732),8614=>array(57,100,789,527),8615=>array(206,-3,632,729),8616=>array(206,0,632,732),8617=>array(49,100,780,565),8618=>array(58,100,789,565),8619=>array(49,100,780,565),8620=>array(58,100,789,565),8621=>array(49,100,789,527),8622=>array(49,93,789,534),8623=>array(146,-2,702,730),8624=>array(169,0,629,743),8625=>array(209,0,669,743),8626=>array(169,-14,629,729),8627=>array(209,-14,669,729),8628=>array(233,-3,760,604),8629=>array(49,100,656,626),8630=>array(22,203,799,668),8631=>array(39,203,816,668),8632=>array(108,25,788,729),8633=>array(55,-46,783,673),8634=>array(103,62,762,680),8635=>array(77,62,736,680),8636=>array(49,272,781,527),8637=>array(49,100,781,355),8638=>array(377,0,632,732),8639=>array(205,0,460,732),8640=>array(57,272,789,527),8641=>array(57,100,789,355),8642=>array(377,0,632,732),8643=>array(205,0,460,732),8644=>array(49,-47,789,674),8645=>array(58,-3,779,732),8646=>array(49,-47,789,674),8647=>array(49,-47,781,674),8648=>array(59,0,779,732),8649=>array(58,-47,790,674),8650=>array(59,-3,779,729),8651=>array(49,7,789,620),8652=>array(49,7,789,620),8653=>array(49,100,781,527),8654=>array(49,94,789,533),8655=>array(57,100,789,527),8656=>array(49,100,781,527),8657=>array(206,0,633,732),8658=>array(57,100,789,527),8659=>array(206,-3,633,729),8660=>array(49,100,789,527),8661=>array(205,-8,633,732),8662=>array(141,-23,751,587),8663=>array(92,-23,703,587),8664=>array(92,25,703,636),8665=>array(141,25,751,636),8666=>array(49,100,781,527),8667=>array(57,100,789,527),8668=>array(49,100,781,527),8669=>array(57,100,789,527),8670=>array(205,0,632,732),8671=>array(205,-3,632,729),8672=>array(49,100,781,527),8673=>array(205,0,633,732),8674=>array(57,100,789,527),8675=>array(205,-3,633,729),8676=>array(52,99,781,528),8677=>array(57,99,786,528),8678=>array(27,65,781,562),8679=>array(171,0,667,754),8680=>array(35,65,789,562),8681=>array(171,-25,667,729),8682=>array(171,0,667,754),8683=>array(171,0,667,754),8684=>array(156,0,682,754),8685=>array(171,0,667,754),8686=>array(171,0,667,754),8687=>array(171,0,667,754),8688=>array(57,65,811,562),8689=>array(60,0,788,729),8690=>array(60,0,788,729),8691=>array(171,-25,667,754),8692=>array(57,100,789,527),8693=>array(58,-3,779,732),8694=>array(57,-193,789,820),8695=>array(49,94,781,533),8696=>array(57,94,789,533),8697=>array(49,94,789,533),8698=>array(49,94,781,533),8699=>array(57,94,789,533),8700=>array(49,94,789,533),8701=>array(27,96,781,531),8702=>array(57,96,811,531),8703=>array(27,96,811,531),8704=>array(8,0,676,729),8705=>array(66,-14,554,742),8706=>array(46,-14,471,662),8707=>array(98,0,568,729),8708=>array(98,-46,568,776),8709=>array(76,-10,795,710),8710=>array(-3,0,672,719),8711=>array(-3,0,672,719),8712=>array(85,-10,786,710),8713=>array(85,-139,786,836),8714=>array(106,76,612,550),8715=>array(85,-10,786,710),8716=>array(85,-139,786,836),8717=>array(106,76,612,550),8718=>array(146,0,490,485),8719=>array(76,-192,680,719),8720=>array(76,-192,680,719),8721=>array(12,-192,654,719),8722=>array(106,272,732,355),8723=>array(106,0,732,627),8724=>array(106,0,732,729),8725=>array(-73,-93,427,729),8726=>array(192,-54,529,768),8727=>array(127,0,710,627),8728=>array(158,160,468,470),8729=>array(168,168,458,458),8730=>array(30,-20,637,811),8731=>array(30,-20,637,933),8732=>array(30,-20,637,924),8733=>array(107,112,607,487),8734=>array(107,112,726,487),8735=>array(138,99,700,661),8736=>array(85,0,786,729),8737=>array(85,-53,786,729),8738=>array(116,-3,732,727),8739=>array(211,-214,289,771),8740=>array(50,-214,451,771),8741=>array(133,-214,367,771),8742=>array(50,-214,451,771),8743=>array(128,0,604,579),8744=>array(128,0,604,579),8745=>array(128,0,604,579),8746=>array(128,0,604,579),8747=>array(57,-212,464,757),8748=>array(57,-212,732,757),8749=>array(57,-212,1000,757),8750=>array(57,-212,464,757),8751=>array(57,-212,732,757),8752=>array(57,-212,1000,757),8753=>array(57,-212,522,757),8754=>array(57,-212,514,757),8755=>array(57,-212,515,757),8756=>array(59,100,577,604),8757=>array(59,100,577,604),8758=>array(79,100,182,604),8759=>array(59,100,577,604),8760=>array(106,272,732,552),8761=>array(106,78,732,552),8762=>array(105,78,732,552),8763=>array(106,78,732,552),8764=>array(106,228,732,399),8765=>array(106,228,732,399),8766=>array(79,149,759,479),8767=>array(106,42,732,584),8768=>array(102,0,273,627),8769=>array(106,77,732,553),8770=>array(106,133,732,454),8771=>array(106,172,732,494),8772=>array(106,47,732,603),8773=>array(106,90,732,594),8774=>array(106,11,732,594),8775=>array(106,-5,732,658),8776=>array(106,133,732,494),8777=>array(106,2,732,625),8778=>array(106,90,732,598),8779=>array(106,59,732,602),8780=>array(106,90,732,594),8781=>array(105,105,732,521),8782=>array(106,26,732,601),8783=>array(106,172,732,601),8784=>array(106,172,732,625),8785=>array(106,1,732,625),8786=>array(104,2,732,625),8787=>array(104,2,731,625),8788=>array(101,151,899,476),8789=>array(100,151,900,475),8790=>array(106,172,732,454),8791=>array(106,172,732,760),8792=>array(106,172,732,662),8793=>array(106,172,732,812),8794=>array(106,172,732,812),8795=>array(106,172,732,849),8796=>array(106,172,732,854),8797=>array(106,172,732,764),8798=>array(106,172,732,760),8799=>array(106,172,732,856),8800=>array(106,19,732,608),8801=>array(106,90,732,537),8802=>array(106,-24,732,650),8803=>array(106,0,732,629),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8806=>array(106,-83,732,638),8807=>array(106,-83,732,638),8808=>array(106,-164,732,638),8809=>array(106,-164,732,638),8810=>array(72,22,975,609),8811=>array(72,22,975,609),8812=>array(86,-132,378,759),8813=>array(105,13,732,613),8814=>array(106,2,732,674),8815=>array(106,-47,732,625),8816=>array(106,-102,732,667),8817=>array(106,-102,732,667),8818=>array(106,-55,732,582),8819=>array(106,-40,732,582),8820=>array(106,-105,732,664),8821=>array(106,-102,732,667),8822=>array(102,-87,732,686),8823=>array(102,-87,732,686),8824=>array(102,-197,732,797),8825=>array(102,-197,732,797),8826=>array(106,-38,732,664),8827=>array(106,-38,732,664),8828=>array(106,-105,732,667),8829=>array(106,-105,732,667),8830=>array(106,-85,732,667),8831=>array(106,-85,732,667),8832=>array(106,-61,732,764),8833=>array(106,-138,732,687),8834=>array(99,80,739,546),8835=>array(99,80,739,546),8836=>array(99,-96,739,726),8837=>array(99,-100,739,722),8838=>array(93,0,732,613),8839=>array(106,0,745,613),8840=>array(93,-116,732,730),8841=>array(106,-116,745,730),8842=>array(93,-73,732,613),8843=>array(93,-73,732,613),8844=>array(128,0,604,579),8845=>array(128,0,604,579),8846=>array(128,2,604,582),8847=>array(106,0,732,568),8848=>array(106,0,732,568),8849=>array(106,-83,732,630),8850=>array(106,-83,732,630),8851=>array(106,0,674,626),8852=>array(106,0,674,626),8853=>array(91,-14,747,643),8854=>array(91,-14,747,643),8855=>array(91,-14,747,643),8856=>array(91,-14,747,643),8857=>array(91,-14,747,643),8858=>array(91,-14,747,643),8859=>array(91,-14,747,643),8860=>array(91,-14,747,643),8861=>array(91,-14,747,643),8862=>array(91,-14,747,643),8863=>array(91,-14,747,643),8864=>array(91,-14,747,643),8865=>array(91,-14,747,643),8866=>array(85,0,786,700),8867=>array(85,0,786,700),8868=>array(85,0,786,700),8869=>array(85,0,786,700),8870=>array(85,0,436,700),8871=>array(85,0,436,700),8872=>array(85,0,786,700),8873=>array(85,0,786,700),8874=>array(85,0,786,700),8875=>array(85,0,786,700),8876=>array(85,-40,786,740),8877=>array(85,-40,786,740),8878=>array(85,-40,786,740),8879=>array(85,-40,786,740),8880=>array(106,-43,724,670),8881=>array(106,-43,724,670),8882=>array(106,15,732,612),8883=>array(106,15,732,612),8884=>array(106,-48,732,674),8885=>array(106,-48,732,674),8886=>array(59,175,941,455),8887=>array(59,175,941,455),8888=>array(47,175,791,455),8889=>array(59,-47,779,674),8890=>array(116,0,404,701),8891=>array(98,0,634,740),8892=>array(98,0,634,740),8893=>array(98,0,634,740),8894=>array(138,0,700,562),8895=>array(138,0,700,562),8896=>array(-3,-192,823,719),8897=>array(-3,-192,823,719),8898=>array(68,-192,752,719),8899=>array(68,-192,752,719),8900=>array(3,-233,491,807),8901=>array(107,285,210,409),8902=>array(122,149,504,512),8903=>array(106,15,732,613),8904=>array(106,-30,894,657),8905=>array(106,-30,894,657),8906=>array(106,-30,894,657),8907=>array(106,-30,894,657),8908=>array(106,-30,894,657),8909=>array(106,172,732,494),8910=>array(48,0,684,579),8911=>array(48,0,684,579),8912=>array(93,-3,732,630),8913=>array(106,-3,745,630),8914=>array(103,0,735,663),8915=>array(103,-14,735,649),8916=>array(186,0,652,729),8917=>array(106,-100,732,729),8918=>array(106,46,732,581),8919=>array(106,46,732,581),8920=>array(72,22,1350,609),8921=>array(72,22,1350,609),8922=>array(106,-228,732,854),8923=>array(106,-228,732,854),8924=>array(106,0,732,582),8925=>array(106,0,732,582),8926=>array(106,-105,732,667),8927=>array(106,-105,732,667),8928=>array(106,-178,732,764),8929=>array(106,-178,732,764),8930=>array(106,-141,732,767),8931=>array(106,-141,732,767),8932=>array(106,-94,732,619),8933=>array(106,-94,732,619),8934=>array(106,-138,732,582),8935=>array(106,-138,732,582),8936=>array(106,-169,732,667),8937=>array(106,-171,736,667),8938=>array(106,-130,732,756),8939=>array(106,-130,732,756),8940=>array(106,-189,732,815),8941=>array(104,-189,730,815),8942=>array(448,-93,551,715),8943=>array(115,249,884,373),8944=>array(115,-93,884,715),8945=>array(115,-93,884,715),8946=>array(42,-10,958,710),8947=>array(85,-10,786,710),8948=>array(106,76,612,550),8949=>array(85,-10,786,910),8950=>array(85,-10,786,853),8951=>array(106,76,612,686),8952=>array(85,-144,786,710),8953=>array(85,-10,786,710),8954=>array(42,-10,958,710),8955=>array(85,-10,786,710),8956=>array(106,76,612,550),8957=>array(85,-10,786,853),8958=>array(106,76,612,686),8959=>array(106,0,765,720),8960=>array(62,-18,593,514),8961=>array(56,162,540,443),8962=>array(71,0,563,596),8963=>array(205,481,632,732),8964=>array(205,0,632,251),8965=>array(205,0,632,406),8966=>array(205,0,632,513),8967=>array(208,-31,428,791),8968=>array(-1,-132,380,760),8969=>array(127,-132,391,760),8970=>array(-1,-132,263,760),8971=>array(10,-132,391,760),8972=>array(369,-77,759,313),8973=>array(49,-77,439,313),8974=>array(369,243,759,634),8975=>array(49,243,439,634),8976=>array(106,140,732,421),8977=>array(3,126,510,634),8984=>array(121,0,879,759),8985=>array(106,140,732,421),8988=>array(86,425,469,760),8989=>array(138,425,469,760),8990=>array(72,-70,403,264),8991=>array(52,-70,434,264),8992=>array(210,-250,497,928),8993=>array(21,-237,307,942),8996=>array(76,227,1076,575),8997=>array(76,0,1076,575),8998=>array(76,0,1414,760),8999=>array(76,0,1076,760),9000=>array(59,0,1385,729),9003=>array(0,0,1338,760),9004=>array(73,-91,800,748),9075=>array(81,0,304,547),9076=>array(91,-208,580,560),9077=>array(66,-14,769,547),9082=>array(55,-12,611,559),9085=>array(4,-228,753,102),9095=>array(76,0,1096,748),9108=>array(17,0,856,727),9115=>array(86,-252,414,946),9116=>array(86,-252,181,942),9117=>array(86,-240,414,942),9118=>array(86,-252,414,946),9119=>array(319,-252,414,942),9120=>array(86,-240,414,942),9121=>array(86,-252,414,928),9122=>array(86,-252,181,942),9123=>array(86,-240,414,942),9124=>array(86,-252,414,928),9125=>array(319,-252,414,935),9126=>array(86,-240,414,935),9127=>array(330,-261,668,928),9128=>array(82,-252,420,940),9129=>array(330,-240,668,940),9130=>array(330,-256,420,943),9131=>array(82,-261,420,928),9132=>array(330,-252,668,940),9133=>array(82,-240,420,940),9134=>array(210,-250,307,942),9166=>array(27,65,781,729),9167=>array(91,0,854,596),9187=>array(73,-91,800,748),9189=>array(3,75,766,444),9192=>array(16,-129,553,294),9250=>array(-15,-14,561,760),9251=>array(26,-228,583,102),9312=>array(74,-10,822,738),9313=>array(74,-10,822,738),9314=>array(74,-10,822,738),9315=>array(74,-10,822,738),9316=>array(74,-10,822,738),9317=>array(74,-10,822,738),9318=>array(74,-10,822,738),9319=>array(74,-10,822,738),9320=>array(74,-10,822,738),9321=>array(74,-10,822,738),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,779,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-124,854,643),9633=>array(91,-124,854,643),9634=>array(91,-124,854,643),9635=>array(91,-124,854,643),9636=>array(91,-124,854,643),9637=>array(91,-124,854,643),9638=>array(91,-124,854,643),9639=>array(91,-124,854,643),9640=>array(91,-124,854,643),9641=>array(91,-124,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-124,766,643),9651=>array(3,-124,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-124,766,643),9655=>array(3,-124,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-124,766,643),9661=>array(3,-124,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-124,766,643),9665=>array(3,-124,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-124,766,643),9671=>array(3,-124,766,643),9672=>array(3,-124,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,385,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,385,260),9696=>array(3,260,766,645),9697=>array(3,-125,766,260),9698=>array(3,-124,766,643),9699=>array(3,-124,766,643),9700=>array(3,-124,766,643),9701=>array(3,-124,766,643),9702=>array(150,227,440,516),9703=>array(91,-124,854,643),9704=>array(91,-124,854,643),9705=>array(91,-124,854,643),9706=>array(91,-124,854,643),9707=>array(91,-124,854,643),9708=>array(3,-124,766,643),9709=>array(3,-124,766,643),9710=>array(3,-124,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-124,854,643),9713=>array(91,-124,854,643),9714=>array(91,-124,854,643),9715=>array(91,-124,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-124,766,643),9721=>array(3,-124,766,643),9722=>array(3,-124,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-124,766,643),9728=>array(83,0,813,729),9729=>array(51,-2,949,360),9730=>array(49,0,848,729),9731=>array(83,-0,813,927),9732=>array(64,0,833,880),9733=>array(65,-4,832,723),9734=>array(65,-4,832,723),9735=>array(83,2,490,729),9736=>array(83,0,813,731),9737=>array(83,0,813,730),9738=>array(61,0,828,727),9739=>array(61,0,828,723),9740=>array(61,-1,610,722),9741=>array(61,0,952,723),9742=>array(68,0,1177,729),9743=>array(71,0,1180,729),9744=>array(90,0,807,729),9745=>array(89,0,808,729),9746=>array(89,0,808,729),9747=>array(75,78,457,656),9748=>array(49,0,870,933),9749=>array(74,0,822,731),9750=>array(84,0,813,731),9751=>array(84,0,813,727),9752=>array(78,0,819,729),9753=>array(83,140,813,574),9754=>array(84,113,813,569),9755=>array(84,113,813,569),9756=>array(87,104,810,569),9757=>array(72,0,537,724),9758=>array(86,103,810,569),9759=>array(72,-3,537,720),9760=>array(61,0,835,730),9761=>array(84,0,813,730),9762=>array(83,0,813,730),9763=>array(49,0,848,730),9764=>array(49,-2,620,727),9765=>array(83,0,663,731),9766=>array(83,-1,566,731),9767=>array(83,0,701,911),9768=>array(83,0,462,730),9769=>array(83,-1,813,729),9770=>array(87,0,810,730),9771=>array(83,0,814,731),9772=>array(83,0,627,731),9773=>array(83,0,813,730),9774=>array(83,0,813,730),9775=>array(83,0,813,730),9776=>array(83,0,807,729),9777=>array(83,0,807,729),9778=>array(83,0,807,729),9779=>array(83,0,807,729),9780=>array(83,0,807,729),9781=>array(83,0,807,729),9782=>array(83,0,807,729),9783=>array(83,0,807,729),9784=>array(80,3,817,721),9785=>array(83,-73,959,804),9786=>array(83,-73,959,804),9787=>array(83,-73,959,804),9788=>array(83,0,813,730),9789=>array(358,0,814,730),9790=>array(83,0,539,730),9791=>array(85,-102,528,732),9792=>array(85,-125,647,731),9793=>array(85,-14,647,843),9794=>array(79,-14,831,720),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9800=>array(45,0,851,731),9801=>array(89,0,807,730),9802=>array(94,0,802,731),9803=>array(113,31,784,679),9804=>array(140,0,756,730),9805=>array(53,-180,843,730),9806=>array(83,52,813,653),9807=>array(34,-96,863,730),9808=>array(83,-0,813,730),9809=>array(94,0,802,730),9810=>array(86,153,810,579),9811=>array(157,0,739,730),9812=>array(98,0,798,730),9813=>array(110,0,786,730),9814=>array(167,-1,729,729),9815=>array(214,0,683,730),9816=>array(165,0,732,730),9817=>array(148,-0,748,730),9818=>array(98,0,798,730),9819=>array(110,0,786,730),9820=>array(167,-1,729,729),9821=>array(214,0,683,730),9822=>array(162,0,734,730),9823=>array(148,-0,748,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9832=>array(105,-1,791,729),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),9840=>array(84,0,664,731),9841=>array(64,0,701,731),9842=>array(84,0,813,709),9843=>array(76,16,820,731),9844=>array(76,16,820,731),9845=>array(76,16,820,731),9846=>array(76,16,820,731),9847=>array(76,16,820,731),9848=>array(76,16,820,731),9849=>array(76,16,820,731),9850=>array(76,16,820,731),9851=>array(84,0,812,704),9852=>array(83,0,814,731),9853=>array(83,0,814,731),9854=>array(83,0,814,731),9855=>array(149,1,747,731),9856=>array(73,0,797,725),9857=>array(73,0,797,725),9858=>array(73,0,797,725),9859=>array(73,0,797,725),9860=>array(73,0,797,725),9861=>array(73,0,797,725),9862=>array(83,0,807,724),9863=>array(84,0,808,724),9864=>array(84,0,808,724),9865=>array(84,0,808,724),9866=>array(83,0,807,98),9867=>array(83,0,807,98),9868=>array(83,0,807,411),9869=>array(83,0,807,411),9870=>array(83,0,807,411),9871=>array(83,0,807,411),9872=>array(80,3,634,724),9873=>array(80,3,634,724),9874=>array(52,0,837,724),9875=>array(61,-10,756,725),9876=>array(44,0,672,722),9877=>array(62,-10,476,725),9878=>array(41,-10,811,725),9879=>array(49,0,815,725),9880=>array(42,0,642,725),9881=>array(95,-17,802,727),9882=>array(37,-9,671,726),9883=>array(127,0,763,721),9884=>array(127,0,762,722),9888=>array(49,0,840,721),9889=>array(83,2,619,730),9890=>array(85,-125,919,731),9891=>array(79,-206,1023,720),9892=>array(85,-186,1109,856),9893=>array(85,-125,837,917),9894=>array(131,-14,727,869),9895=>array(101,-170,741,884),9896=>array(188,-14,650,869),9897=>array(4,133,829,596),9898=>array(188,133,650,597),9899=>array(188,133,650,597),9900=>array(249,194,589,536),9901=>array(175,194,663,536),9902=>array(41,169,797,560),9903=>array(5,194,833,536),9904=>array(103,237,757,540),9905=>array(211,42,626,698),9906=>array(85,-125,647,731),9907=>array(168,-125,646,731),9908=>array(86,-125,646,731),9909=>array(86,-125,646,731),9910=>array(59,-118,791,643),9911=>array(194,-104,595,710),9912=>array(158,-125,543,731),9920=>array(42,4,796,553),9921=>array(42,4,796,724),9922=>array(42,4,796,553),9923=>array(42,4,796,724),9954=>array(85,-14,647,843),9985=>array(11,190,803,635),9986=>array(42,141,784,588),9987=>array(11,94,803,539),9988=>array(36,119,824,613),9990=>array(42,-14,796,742),9991=>array(42,-14,796,742),9992=>array(59,21,782,708),9993=>array(64,107,773,622),9996=>array(212,0,561,742),9997=>array(21,83,802,678),9998=>array(89,75,724,710),9999=>array(26,198,819,530),10000=>array(89,75,724,710),10001=>array(43,185,757,544),10002=>array(67,209,757,520),10003=>array(150,97,667,630),10004=>array(116,87,721,631),10005=>array(126,72,711,657),10006=>array(85,31,752,698),10007=>array(118,-9,701,732),10008=>array(123,0,754,739),10009=>array(55,0,783,729),10010=>array(55,0,783,729),10011=>array(55,0,783,729),10012=>array(55,0,783,729),10013=>array(165,0,673,729),10014=>array(131,0,678,729),10015=>array(155,0,683,729),10016=>array(55,0,783,729),10017=>array(91,-13,747,744),10018=>array(41,-14,797,742),10019=>array(42,-12,796,742),10020=>array(41,-14,797,742),10021=>array(41,-13,797,743),10022=>array(42,-14,796,745),10023=>array(42,-14,796,745),10025=>array(23,-9,814,743),10026=>array(42,-14,796,742),10027=>array(23,-9,814,743),10028=>array(23,-9,814,743),10029=>array(23,-9,814,743),10030=>array(23,-9,814,743),10031=>array(23,-9,814,743),10032=>array(24,12,815,714),10033=>array(64,0,773,729),10034=>array(74,0,764,729),10035=>array(55,0,783,729),10036=>array(31,-14,787,742),10037=>array(41,-14,797,742),10038=>array(91,-14,747,742),10039=>array(41,-14,797,742),10040=>array(41,-14,797,742),10041=>array(41,-14,797,742),10042=>array(55,0,783,729),10043=>array(82,-14,756,742),10044=>array(82,-14,756,742),10045=>array(84,-14,753,742),10046=>array(79,-14,759,742),10047=>array(54,0,784,709),10048=>array(54,0,784,709),10049=>array(41,-14,797,742),10050=>array(42,-14,796,742),10051=>array(79,-14,759,742),10052=>array(89,0,749,729),10053=>array(76,0,762,729),10054=>array(63,2,773,729),10055=>array(79,-13,759,742),10056=>array(47,-13,791,730),10057=>array(47,-13,791,730),10058=>array(41,-13,797,743),10059=>array(41,-13,797,743),10061=>array(50,-10,847,738),10063=>array(60,-49,837,729),10064=>array(60,0,837,777),10065=>array(60,-49,837,729),10066=>array(60,0,837,777),10070=>array(83,-2,813,728),10072=>array(377,-240,460,760),10073=>array(336,-240,502,760),10074=>array(253,-240,585,760),10075=>array(85,395,264,729),10076=>array(59,395,237,729),10077=>array(85,395,479,729),10078=>array(59,395,453,729),10081=>array(155,-93,772,851),10082=>array(202,-17,636,742),10083=>array(163,-17,675,742),10084=>array(54,83,784,645),10085=>array(168,-1,729,729),10086=>array(62,21,724,702),10087=>array(78,169,759,564),10088=>array(196,-139,648,769),10089=>array(196,-139,648,769),10090=>array(264,-132,574,758),10091=>array(264,-132,574,758),10092=>array(215,-240,607,760),10093=>array(232,-240,623,760),10094=>array(142,-240,685,760),10095=>array(153,-240,696,760),10096=>array(167,-240,656,760),10097=>array(183,-240,672,760),10098=>array(346,-241,535,760),10099=>array(303,-241,492,760),10100=>array(175,-163,634,760),10101=>array(204,-163,663,760),10102=>array(74,-10,822,738),10103=>array(74,-10,822,738),10104=>array(74,-10,822,738),10105=>array(74,-10,822,738),10106=>array(74,-10,822,738),10107=>array(74,-10,822,738),10108=>array(74,-10,822,738),10109=>array(74,-10,822,738),10110=>array(74,-10,822,738),10111=>array(74,-10,822,738),10112=>array(4,-52,833,780),10113=>array(4,-52,833,780),10114=>array(4,-52,833,780),10115=>array(4,-52,833,780),10116=>array(4,-52,833,780),10117=>array(4,-52,833,780),10118=>array(4,-52,833,780),10119=>array(4,-52,833,780),10120=>array(4,-52,833,780),10121=>array(4,-52,833,780),10122=>array(4,-52,833,780),10123=>array(4,-52,833,780),10124=>array(4,-52,833,780),10125=>array(4,-52,833,780),10126=>array(4,-52,833,780),10127=>array(4,-52,833,780),10128=>array(4,-52,833,780),10129=>array(4,-52,833,780),10130=>array(4,-52,833,780),10131=>array(4,-52,833,780),10132=>array(57,75,789,552),10136=>array(123,55,682,614),10137=>array(57,100,789,527),10138=>array(123,13,682,572),10139=>array(57,129,789,498),10140=>array(57,57,764,570),10141=>array(57,100,789,527),10142=>array(57,100,789,527),10143=>array(57,100,789,527),10144=>array(57,100,789,527),10145=>array(57,65,811,562),10146=>array(111,94,789,533),10147=>array(111,94,789,533),10148=>array(111,-4,789,631),10149=>array(57,100,789,548),10150=>array(57,79,789,527),10151=>array(240,-7,606,634),10152=>array(57,100,789,527),10153=>array(57,75,765,552),10154=>array(57,75,765,552),10155=>array(21,12,794,586),10156=>array(21,12,794,586),10157=>array(135,0,774,574),10158=>array(135,0,774,574),10159=>array(62,49,799,574),10161=>array(62,49,799,574),10162=>array(154,-20,721,585),10163=>array(63,157,789,470),10164=>array(81,55,682,655),10165=>array(57,173,789,454),10166=>array(82,-29,682,572),10167=>array(82,55,682,655),10168=>array(57,172,789,455),10169=>array(82,-28,682,572),10170=>array(56,84,789,543),10171=>array(73,140,779,487),10172=>array(79,167,774,460),10173=>array(79,118,774,509),10174=>array(57,81,789,546),10181=>array(0,-163,377,769),10182=>array(-52,-163,395,769),10208=>array(3,-233,491,807),10214=>array(-0,-132,485,760),10215=>array(-1,-132,484,760),10216=>array(89,-132,397,759),10217=>array(-7,-132,301,759),10218=>array(89,-132,563,759),10219=>array(-7,-132,467,759),10224=>array(44,0,794,732),10225=>array(43,-3,793,729),10226=>array(-17,53,759,659),10227=>array(39,61,814,666),10228=>array(57,-14,1108,643),10229=>array(49,100,1376,527),10230=>array(57,100,1385,527),10231=>array(49,100,1385,527),10232=>array(49,100,1376,527),10233=>array(57,100,1385,527),10234=>array(49,100,1385,527),10235=>array(49,100,1376,527),10236=>array(57,100,1385,527),10237=>array(49,100,1376,527),10238=>array(57,100,1385,527),10239=>array(57,100,1385,527),10241=>array(146,635,293,781),10242=>array(146,358,293,505),10243=>array(146,358,293,781),10244=>array(146,81,293,228),10245=>array(146,81,293,781),10246=>array(146,81,293,505),10247=>array(146,81,293,781),10248=>array(439,635,586,781),10249=>array(146,635,586,781),10250=>array(146,358,586,781),10251=>array(146,358,586,781),10252=>array(146,81,586,781),10253=>array(146,81,586,781),10254=>array(146,81,586,781),10255=>array(146,81,586,781),10256=>array(439,358,586,505),10257=>array(146,358,586,781),10258=>array(146,358,586,505),10259=>array(146,358,586,781),10260=>array(146,81,586,505),10261=>array(146,81,586,781),10262=>array(146,81,586,505),10263=>array(146,81,586,781),10264=>array(439,358,586,781),10265=>array(146,358,586,781),10266=>array(146,358,586,781),10267=>array(146,358,586,781),10268=>array(146,81,586,781),10269=>array(146,81,586,781),10270=>array(146,81,586,781),10271=>array(146,81,586,781),10272=>array(439,81,586,228),10273=>array(146,81,586,781),10274=>array(146,81,586,505),10275=>array(146,81,586,781),10276=>array(146,81,586,228),10277=>array(146,81,586,781),10278=>array(146,81,586,505),10279=>array(146,81,586,781),10280=>array(439,81,586,781),10281=>array(146,81,586,781),10282=>array(146,81,586,781),10283=>array(146,81,586,781),10284=>array(146,81,586,781),10285=>array(146,81,586,781),10286=>array(146,81,586,781),10287=>array(146,81,586,781),10288=>array(439,81,586,505),10289=>array(146,81,586,781),10290=>array(146,81,586,505),10291=>array(146,81,586,781),10292=>array(146,81,586,505),10293=>array(146,81,586,781),10294=>array(146,81,586,505),10295=>array(146,81,586,781),10296=>array(439,81,586,781),10297=>array(146,81,586,781),10298=>array(146,81,586,781),10299=>array(146,81,586,781),10300=>array(146,81,586,781),10301=>array(146,81,586,781),10302=>array(146,81,586,781),10303=>array(146,81,586,781),10304=>array(146,-195,293,-49),10305=>array(146,-195,293,781),10306=>array(146,-195,293,505),10307=>array(146,-195,293,781),10308=>array(146,-195,293,228),10309=>array(146,-195,293,781),10310=>array(146,-195,293,505),10311=>array(146,-195,293,781),10312=>array(146,-195,586,781),10313=>array(146,-195,586,781),10314=>array(146,-195,586,781),10315=>array(146,-195,586,781),10316=>array(146,-195,586,781),10317=>array(146,-195,586,781),10318=>array(146,-195,586,781),10319=>array(146,-195,586,781),10320=>array(146,-195,586,505),10321=>array(146,-195,586,781),10322=>array(146,-195,586,505),10323=>array(146,-195,586,781),10324=>array(146,-195,586,505),10325=>array(146,-195,586,781),10326=>array(146,-195,586,505),10327=>array(146,-195,586,781),10328=>array(146,-195,586,781),10329=>array(146,-195,586,781),10330=>array(146,-195,586,781),10331=>array(146,-195,586,781),10332=>array(146,-195,586,781),10333=>array(146,-195,586,781),10334=>array(146,-195,586,781),10335=>array(146,-195,586,781),10336=>array(146,-195,586,228),10337=>array(146,-195,586,781),10338=>array(146,-195,586,505),10339=>array(146,-195,586,781),10340=>array(146,-195,586,228),10341=>array(146,-195,586,781),10342=>array(146,-195,586,505),10343=>array(146,-195,586,781),10344=>array(146,-195,586,781),10345=>array(146,-195,586,781),10346=>array(146,-195,586,781),10347=>array(146,-195,586,781),10348=>array(146,-195,586,781),10349=>array(146,-195,586,781),10350=>array(146,-195,586,781),10351=>array(146,-195,586,781),10352=>array(146,-195,586,505),10353=>array(146,-195,586,781),10354=>array(146,-195,586,505),10355=>array(146,-195,586,781),10356=>array(146,-195,586,505),10357=>array(146,-195,586,781),10358=>array(146,-195,586,505),10359=>array(146,-195,586,781),10360=>array(146,-195,586,781),10361=>array(146,-195,586,781),10362=>array(146,-195,586,781),10363=>array(146,-195,586,781),10364=>array(146,-195,586,781),10365=>array(146,-195,586,781),10366=>array(146,-195,586,781),10367=>array(146,-195,586,781),10368=>array(439,-195,586,-49),10369=>array(146,-195,586,781),10370=>array(146,-195,586,505),10371=>array(146,-195,586,781),10372=>array(146,-195,586,228),10373=>array(146,-195,586,781),10374=>array(146,-195,586,505),10375=>array(146,-195,586,781),10376=>array(439,-195,586,781),10377=>array(146,-195,586,781),10378=>array(146,-195,586,781),10379=>array(146,-195,586,781),10380=>array(146,-195,586,781),10381=>array(146,-195,586,781),10382=>array(146,-195,586,781),10383=>array(146,-195,586,781),10384=>array(439,-195,586,505),10385=>array(146,-195,586,781),10386=>array(146,-195,586,505),10387=>array(146,-195,586,781),10388=>array(146,-195,586,505),10389=>array(146,-195,586,781),10390=>array(146,-195,586,505),10391=>array(146,-195,586,781),10392=>array(439,-195,586,781),10393=>array(146,-195,586,781),10394=>array(146,-195,586,781),10395=>array(146,-195,586,781),10396=>array(146,-195,586,781),10397=>array(146,-195,586,781),10398=>array(146,-195,586,781),10399=>array(146,-195,586,781),10400=>array(439,-195,586,228),10401=>array(146,-195,586,781),10402=>array(146,-195,586,505),10403=>array(146,-195,586,781),10404=>array(146,-195,586,228),10405=>array(146,-195,586,781),10406=>array(146,-195,586,505),10407=>array(146,-195,586,781),10408=>array(439,-195,586,781),10409=>array(146,-195,586,781),10410=>array(146,-195,586,781),10411=>array(146,-195,586,781),10412=>array(146,-195,586,781),10413=>array(146,-195,586,781),10414=>array(146,-195,586,781),10415=>array(146,-195,586,781),10416=>array(439,-195,586,505),10417=>array(146,-195,586,781),10418=>array(146,-195,586,505),10419=>array(146,-195,586,781),10420=>array(146,-195,586,505),10421=>array(146,-195,586,781),10422=>array(146,-195,586,505),10423=>array(146,-195,586,781),10424=>array(439,-195,586,781),10425=>array(146,-195,586,781),10426=>array(146,-195,586,781),10427=>array(146,-195,586,781),10428=>array(146,-195,586,781),10429=>array(146,-195,586,781),10430=>array(146,-195,586,781),10431=>array(146,-195,586,781),10432=>array(146,-195,586,-49),10433=>array(146,-195,586,781),10434=>array(146,-195,586,505),10435=>array(146,-195,586,781),10436=>array(146,-195,586,228),10437=>array(146,-195,586,781),10438=>array(146,-195,586,505),10439=>array(146,-195,586,781),10440=>array(146,-195,586,781),10441=>array(146,-195,586,781),10442=>array(146,-195,586,781),10443=>array(146,-195,586,781),10444=>array(146,-195,586,781),10445=>array(146,-195,586,781),10446=>array(146,-195,586,781),10447=>array(146,-195,586,781),10448=>array(146,-195,586,505),10449=>array(146,-195,586,781),10450=>array(146,-195,586,505),10451=>array(146,-195,586,781),10452=>array(146,-195,586,505),10453=>array(146,-195,586,781),10454=>array(146,-195,586,505),10455=>array(146,-195,586,781),10456=>array(146,-195,586,781),10457=>array(146,-195,586,781),10458=>array(146,-195,586,781),10459=>array(146,-195,586,781),10460=>array(146,-195,586,781),10461=>array(146,-195,586,781),10462=>array(146,-195,586,781),10463=>array(146,-195,586,781),10464=>array(146,-195,586,228),10465=>array(146,-195,586,781),10466=>array(146,-195,586,505),10467=>array(146,-195,586,781),10468=>array(146,-195,586,228),10469=>array(146,-195,586,781),10470=>array(146,-195,586,505),10471=>array(146,-195,586,781),10472=>array(146,-195,586,781),10473=>array(146,-195,586,781),10474=>array(146,-195,586,781),10475=>array(146,-195,586,781),10476=>array(146,-195,586,781),10477=>array(146,-195,586,781),10478=>array(146,-195,586,781),10479=>array(146,-195,586,781),10480=>array(146,-195,586,505),10481=>array(146,-195,586,781),10482=>array(146,-195,586,505),10483=>array(146,-195,586,781),10484=>array(146,-195,586,505),10485=>array(146,-195,586,781),10486=>array(146,-195,586,505),10487=>array(146,-195,586,781),10488=>array(146,-195,586,781),10489=>array(146,-195,586,781),10490=>array(146,-195,586,781),10491=>array(146,-195,586,781),10492=>array(146,-195,586,781),10493=>array(146,-195,586,781),10494=>array(146,-195,586,781),10495=>array(146,-195,586,781),10502=>array(49,100,781,527),10503=>array(57,100,789,527),10506=>array(125,0,713,732),10507=>array(125,-3,713,729),10560=>array(39,63,644,838),10561=>array(39,63,644,838),10627=>array(118,-163,699,760),10628=>array(35,-163,616,760),10702=>array(106,-226,732,747),10703=>array(106,15,894,612),10704=>array(106,15,894,612),10705=>array(106,-30,894,657),10706=>array(106,-30,894,657),10707=>array(106,-30,894,657),10708=>array(106,-30,894,657),10709=>array(106,-30,894,657),10731=>array(3,-233,491,807),10746=>array(106,0,732,627),10747=>array(106,0,732,627),10752=>array(28,-198,972,748),10753=>array(28,-198,972,748),10754=>array(28,-198,972,748),10764=>array(57,-212,1268,757),10765=>array(57,-212,464,757),10766=>array(57,-212,464,757),10767=>array(57,-212,464,757),10768=>array(57,-212,464,757),10769=>array(57,-212,522,757),10770=>array(57,-212,464,757),10771=>array(57,-212,464,757),10772=>array(57,-212,555,757),10773=>array(57,-212,464,757),10774=>array(57,-212,464,757),10775=>array(-33,-212,553,757),10776=>array(57,-212,464,757),10777=>array(57,-212,464,757),10778=>array(57,-212,464,757),10779=>array(57,-212,469,872),10780=>array(52,-327,464,757),10799=>array(137,31,701,596),10858=>array(106,228,732,552),10859=>array(106,78,732,552),10877=>array(106,-123,732,581),10878=>array(106,-123,732,581),10879=>array(106,-123,733,581),10880=>array(106,-123,732,581),10881=>array(106,-123,732,644),10882=>array(106,-123,732,644),10883=>array(106,-123,733,759),10884=>array(106,-123,732,756),10885=>array(106,-132,732,663),10886=>array(106,-132,732,663),10887=>array(106,-121,732,582),10888=>array(106,-121,732,582),10889=>array(106,-204,732,663),10890=>array(106,-204,732,663),10891=>array(106,-311,732,791),10892=>array(106,-311,732,791),10893=>array(106,-125,732,663),10894=>array(106,-125,732,663),10895=>array(106,-241,732,756),10896=>array(106,-241,732,756),10897=>array(106,-229,732,730),10898=>array(106,-229,732,730),10899=>array(106,-224,732,741),10900=>array(106,-224,732,741),10901=>array(106,-61,732,644),10902=>array(106,-61,732,644),10903=>array(106,-61,733,644),10904=>array(106,-61,732,644),10905=>array(106,-36,732,685),10906=>array(106,-36,732,685),10907=>array(106,-31,732,725),10908=>array(106,-31,732,725),10909=>array(106,8,732,645),10910=>array(106,23,732,645),10911=>array(106,-176,732,729),10912=>array(106,-176,732,729),10926=>array(106,50,732,601),10927=>array(106,-24,732,667),10928=>array(106,-24,732,667),10929=>array(106,-145,732,667),10930=>array(106,-145,732,667),10931=>array(106,-121,732,662),10932=>array(106,-121,732,662),10933=>array(106,-195,732,662),10934=>array(106,-195,732,662),10935=>array(106,-191,732,693),10936=>array(106,-191,732,693),10937=>array(106,-259,732,693),10938=>array(106,-259,732,693),11001=>array(106,-171,732,585),11002=>array(106,-171,732,585),11008=>array(88,-27,703,587),11009=>array(141,-27,755,587),11010=>array(88,25,703,640),11011=>array(141,25,755,640),11012=>array(27,65,789,562),11013=>array(27,65,781,562),11014=>array(171,0,667,754),11015=>array(171,-25,667,729),11016=>array(88,-27,703,587),11017=>array(141,-27,755,587),11018=>array(88,25,703,640),11019=>array(141,25,755,640),11020=>array(27,65,789,562),11021=>array(171,-25,667,754),11022=>array(57,-3,790,355),11023=>array(57,272,790,630),11024=>array(35,-3,768,355),11025=>array(35,272,768,630),11026=>array(91,-124,854,643),11027=>array(91,-124,854,643),11028=>array(91,-124,854,643),11029=>array(91,-124,854,643),11030=>array(3,-124,766,643),11031=>array(3,-124,766,643),11032=>array(3,-124,766,643),11033=>array(3,-124,766,643),11034=>array(91,-124,854,643),11039=>array(18,-26,852,767),11040=>array(18,-26,852,767),11041=>array(73,-91,800,748),11042=>array(73,-91,800,748),11043=>array(17,-35,856,692),11044=>array(55,-250,1064,770),11091=>array(38,-47,832,788),11092=>array(38,-47,832,788),11360=>array(-13,0,497,729),11361=>array(-16,0,291,760),11362=>array(-31,0,497,729),11363=>array(26,0,597,729),11364=>array(57,-200,618,729),11365=>array(-20,-46,631,592),11366=>array(-101,-93,473,822),11367=>array(42,-157,740,729),11368=>array(30,-138,593,760),11369=>array(42,-157,737,729),11370=>array(30,-138,610,760),11371=>array(-11,-157,715,729),11372=>array(3,-138,548,547),11373=>array(56,-14,754,743),11374=>array(47,-200,855,729),11375=>array(149,0,817,729),11376=>array(-15,-14,694,743),11377=>array(136,0,813,560),11378=>array(175,0,1245,742),11379=>array(148,0,1040,560),11380=>array(39,0,611,586),11381=>array(27,0,568,729),11382=>array(41,0,486,547),11383=>array(55,-12,603,551),11385=>array(-74,-13,357,760),11386=>array(55,-14,558,560),11387=>array(48,0,506,547),11388=>array(-64,-117,168,425),11389=>array(44,326,465,734),11390=>array(26,-242,624,742),11391=>array(-2,-242,723,729),11520=>array(61,-63,578,547),11521=>array(1,-235,598,546),11522=>array(17,-235,547,546),11523=>array(66,-10,637,807),11524=>array(45,-235,570,546),11525=>array(24,-236,896,546),11526=>array(59,-8,609,816),11527=>array(47,0,934,546),11528=>array(77,0,575,546),11529=>array(44,-235,590,816),11530=>array(24,0,937,546),11531=>array(51,-8,638,816),11532=>array(24,0,578,816),11533=>array(45,0,930,546),11534=>array(45,0,598,546),11535=>array(88,-235,801,816),11536=>array(45,0,914,816),11537=>array(45,0,588,816),11538=>array(34,-235,563,546),11539=>array(45,-235,929,661),11540=>array(61,-235,918,546),11541=>array(41,-235,820,816),11542=>array(24,0,579,546),11543=>array(45,-235,598,547),11544=>array(15,-235,593,546),11545=>array(27,-235,575,816),11546=>array(31,-235,559,547),11547=>array(62,-9,638,816),11548=>array(24,-235,904,547),11549=>array(-6,-235,562,546),11550=>array(37,-235,590,546),11551=>array(10,-235,589,567),11552=>array(24,0,917,546),11553=>array(41,-235,578,816),11554=>array(61,0,568,626),11555=>array(62,-235,595,816),11556=>array(45,-235,645,546),11557=>array(60,-8,876,816),11800=>array(37,-13,425,729),11807=>array(106,78,732,399),11810=>array(126,314,420,760),11811=>array(122,314,342,760),11812=>array(40,-132,260,314),11813=>array(-38,-132,255,314),11822=>array(110,0,522,742),19904=>array(83,-158,807,729),19905=>array(83,-158,807,729),19906=>array(83,-158,807,729),19907=>array(83,-158,807,729),19908=>array(83,-158,807,729),19909=>array(83,-158,807,729),19910=>array(83,-158,807,729),19911=>array(83,-158,807,729),19912=>array(83,-158,807,729),19913=>array(83,-158,807,729),19914=>array(83,-158,807,729),19915=>array(83,-158,807,729),19916=>array(83,-158,807,729),19917=>array(83,-158,807,729),19918=>array(83,-158,807,729),19919=>array(83,-158,807,729),19920=>array(83,-158,807,729),19921=>array(83,-158,807,729),19922=>array(83,-158,807,729),19923=>array(83,-158,807,729),19924=>array(83,-158,807,729),19925=>array(83,-158,807,729),19926=>array(83,-158,807,729),19927=>array(83,-158,807,729),19928=>array(83,-158,807,729),19929=>array(83,-158,807,729),19930=>array(83,-158,807,729),19931=>array(83,-158,807,729),19932=>array(83,-158,807,729),19933=>array(83,-158,807,729),19934=>array(83,-158,807,729),19935=>array(83,-158,807,729),19936=>array(83,-158,807,729),19937=>array(83,-158,807,729),19938=>array(83,-158,807,729),19939=>array(83,-158,807,729),19940=>array(83,-158,807,729),19941=>array(83,-158,807,729),19942=>array(83,-158,807,729),19943=>array(83,-158,807,729),19944=>array(83,-158,807,729),19945=>array(83,-158,807,729),19946=>array(83,-158,807,729),19947=>array(83,-158,807,729),19948=>array(83,-158,807,729),19949=>array(83,-158,807,729),19950=>array(83,-158,807,729),19951=>array(83,-158,807,729),19952=>array(83,-158,807,729),19953=>array(83,-158,807,729),19954=>array(83,-158,807,729),19955=>array(83,-158,807,729),19956=>array(83,-158,807,729),19957=>array(83,-158,807,729),19958=>array(83,-158,807,729),19959=>array(83,-158,807,729),19960=>array(83,-158,807,729),19961=>array(83,-158,807,729),19962=>array(83,-158,807,729),19963=>array(83,-158,807,729),19964=>array(83,-158,807,729),19965=>array(83,-158,807,729),19966=>array(83,-158,807,729),19967=>array(83,-158,807,729),42192=>array(27,0,625,729),42193=>array(27,0,601,729),42194=>array(6,0,576,729),42195=>array(27,0,722,729),42196=>array(43,0,676,729),42197=>array(-74,0,559,729),42198=>array(45,-14,725,742),42199=>array(27,0,722,729),42200=>array(-66,0,628,729),42201=>array(5,-14,556,729),42202=>array(42,-14,695,742),42203=>array(63,-14,715,742),42204=>array(-22,0,703,729),42205=>array(27,0,587,729),42206=>array(27,0,587,729),42207=>array(27,0,836,729),42208=>array(27,0,721,729),42209=>array(27,0,497,729),42210=>array(6,-14,603,742),42211=>array(27,0,600,729),42212=>array(96,0,667,729),42213=>array(-63,0,605,729),42214=>array(78,0,742,729),42215=>array(27,0,725,729),42216=>array(47,-14,728,742),42217=>array(26,0,575,743),42218=>array(96,0,1020,729),42219=>array(-43,0,703,729),42220=>array(63,0,676,729),42221=>array(65,0,659,729),42222=>array(-53,0,615,729),42223=>array(149,0,817,729),42224=>array(27,0,630,729),42225=>array(2,0,604,729),42226=>array(27,0,268,729),42227=>array(40,-14,747,742),42228=>array(58,-14,713,729),42229=>array(15,0,661,743),42230=>array(59,0,529,729),42231=>array(56,0,740,729),42232=>array(70,0,229,155),42233=>array(41,-156,245,155),42234=>array(70,0,526,155),42235=>array(70,-156,541,155),42236=>array(6,-156,280,517),42237=>array(35,0,265,517),42238=>array(104,0,537,354),42239=>array(58,172,530,454),42564=>array(2,-14,580,742),42565=>array(11,-14,473,560),42566=>array(76,0,292,729),42567=>array(80,0,258,547),42572=>array(35,-14,1121,645),42573=>array(61,-14,958,471),42576=>array(84,0,1002,729),42577=>array(69,0,865,547),42580=>array(45,-14,1047,742),42581=>array(46,-14,801,560),42582=>array(32,0,916,729),42583=>array(41,-14,781,560),42594=>array(-37,-157,1090,729),42595=>array(-14,-138,930,547),42596=>array(-30,0,1079,729),42597=>array(-16,0,905,547),42598=>array(27,0,1190,729),42599=>array(38,0,1012,547),42600=>array(40,-14,747,742),42601=>array(46,-14,566,560),42602=>array(56,-14,799,742),42603=>array(55,-14,658,560),42604=>array(56,-14,1302,742),42605=>array(55,-14,964,560),42606=>array(28,-208,851,743),42634=>array(43,-200,723,729),42635=>array(68,-208,631,547),42636=>array(43,0,676,729),42637=>array(68,0,606,547),42644=>array(119,0,667,729),42645=>array(17,0,539,760),42760=>array(157,0,454,668),42761=>array(127,0,454,668),42762=>array(98,0,454,668),42763=>array(69,0,454,668),42764=>array(40,0,454,668),42765=>array(40,0,454,668),42766=>array(40,0,425,668),42767=>array(40,0,396,668),42768=>array(40,0,366,668),42769=>array(40,0,337,668),42770=>array(40,0,454,668),42771=>array(40,0,425,668),42772=>array(40,0,396,668),42773=>array(40,0,366,668),42774=>array(40,0,337,668),42779=>array(69,326,338,736),42780=>array(31,324,300,734),42781=>array(56,326,197,734),42782=>array(56,326,197,734),42783=>array(56,0,197,408),42786=>array(30,0,374,729),42787=>array(38,0,335,547),42788=>array(55,224,461,742),42789=>array(55,42,461,560),42790=>array(47,-200,744,729),42791=>array(37,-208,560,760),42792=>array(72,-213,832,729),42793=>array(72,-213,666,702),42794=>array(121,-14,676,742),42795=>array(9,-199,502,561),42800=>array(38,0,490,547),42801=>array(11,-14,500,560),42802=>array(-63,0,1170,729),42803=>array(38,-14,902,560),42804=>array(-53,-14,1179,742),42805=>array(41,-14,954,560),42806=>array(-53,-14,1136,729),42807=>array(41,-14,951,560),42808=>array(-63,0,1034,729),42809=>array(38,-14,841,560),42810=>array(-63,0,1034,729),42811=>array(38,-14,841,560),42812=>array(-43,-208,1042,729),42813=>array(57,-208,860,560),42814=>array(63,-14,715,742),42815=>array(2,-14,493,560),42816=>array(27,0,722,729),42817=>array(35,0,612,760),42822=>array(92,0,620,729),42823=>array(84,0,307,760),42824=>array(52,0,521,729),42825=>array(90,0,415,760),42826=>array(0,-14,811,742),42827=>array(1,-14,704,560),42830=>array(56,-14,1302,742),42831=>array(55,-14,964,560),42832=>array(-42,0,603,729),42833=>array(-83,-208,589,560),42834=>array(-5,0,733,729),42835=>array(-15,-208,729,560),42838=>array(44,-178,740,742),42839=>array(46,-208,597,560),42852=>array(27,0,579,729),42853=>array(-5,-208,586,760),42854=>array(-57,0,579,729),42855=>array(-85,-208,586,760),42880=>array(60,0,530,729),42881=>array(21,-208,257,560),42882=>array(-14,-208,663,742),42883=>array(-5,-208,566,560),42889=>array(52,0,256,517),42890=>array(62,161,325,380),42891=>array(135,235,320,729),42892=>array(70,458,206,729),42893=>array(109,0,658,729),42894=>array(41,-208,417,760),42896=>array(27,-157,721,729),42897=>array(35,-138,579,560),42912=>array(-9,-14,789,742),42913=>array(-7,-208,642,560),42914=>array(-6,0,722,729),42915=>array(-6,0,612,760),42916=>array(-8,0,756,729),42917=>array(-7,0,642,560),42918=>array(-7,0,702,729),42919=>array(-2,0,463,560),42920=>array(-6,-14,641,742),42921=>array(-4,-14,525,560),42922=>array(51,0,845,729),43002=>array(38,0,877,547),43003=>array(86,0,548,729),43004=>array(63,0,576,729),43005=>array(27,0,836,729),43006=>array(8,0,287,928),43007=>array(-38,0,1237,729),61184=>array(147,602,388,668),61185=>array(103,451,407,668),61186=>array(56,301,426,668),61187=>array(18,150,433,668),61188=>array(-21,0,432,668),61189=>array(123,451,378,668),61190=>array(118,451,358,518),61191=>array(73,301,378,518),61192=>array(26,150,397,518),61193=>array(-12,0,404,518),61194=>array(110,301,368,668),61195=>array(94,301,349,518),61196=>array(88,301,329,367),61197=>array(44,150,349,367),61198=>array(-3,0,368,367),61199=>array(105,150,345,668),61200=>array(81,150,338,518),61201=>array(64,150,319,367),61202=>array(59,150,300,217),61203=>array(15,0,319,217),61204=>array(104,0,319,668),61205=>array(76,0,316,518),61206=>array(52,0,309,367),61207=>array(35,0,290,217),61208=>array(30,0,271,66),61209=>array(40,0,236,668),62464=>array(93,-15,582,828),62465=>array(99,-15,577,828),62466=>array(95,-15,622,837),62467=>array(137,0,944,837),62468=>array(87,-15,651,837),62469=>array(89,-15,627,837),62470=>array(141,-15,649,837),62471=>array(96,-15,935,837),62472=>array(118,0,608,837),62473=>array(87,-15,656,828),62474=>array(152,0,1227,837),62475=>array(89,-15,646,837),62476=>array(96,-15,641,828),62477=>array(112,0,922,837),62478=>array(85,-15,625,828),62479=>array(97,-15,690,844),62480=>array(109,0,928,837),62481=>array(107,-15,575,828),62482=>array(106,-15,764,837),62483=>array(80,-15,643,837),62484=>array(147,-15,937,837),62485=>array(86,-15,687,828),62486=>array(126,-15,955,837),62487=>array(82,-15,687,829),62488=>array(90,-15,654,837),62489=>array(49,0,594,837),62490=>array(96,-15,689,828),62491=>array(95,-15,687,828),62492=>array(103,-15,699,837),62493=>array(86,-15,688,828),62494=>array(103,-15,586,828),62495=>array(34,-15,578,837),62496=>array(89,-15,634,837),62497=>array(91,-15,643,837),62498=>array(22,-79,629,836),62499=>array(85,-15,688,838),62500=>array(86,-15,695,837),62501=>array(83,-15,702,837),62502=>array(138,-15,1012,837),62504=>array(61,-235,898,816),62505=>array(51,-230,793,853),62506=>array(77,-15,545,765),62507=>array(77,-15,537,777),62508=>array(77,-15,552,875),62509=>array(77,-15,543,818),62510=>array(77,-15,533,887),62511=>array(77,-15,552,809),62512=>array(28,-236,570,765),62513=>array(28,-236,573,799),62514=>array(28,-236,575,901),62515=>array(28,-236,571,809),62516=>array(94,0,560,765),62517=>array(94,0,573,799),62518=>array(94,0,571,809),62519=>array(96,-0,785,765),62520=>array(96,-0,785,777),62521=>array(96,-0,785,895),62522=>array(96,-0,785,799),62523=>array(96,-0,785,809),62524=>array(55,-236,557,765),62525=>array(55,-236,557,777),62526=>array(55,-236,583,904),62527=>array(55,-236,557,799),62528=>array(55,-236,566,809),62529=>array(55,-236,557,852),63173=>array(27,-14,575,760),64256=>array(68,0,814,760),64257=>array(68,0,641,760),64258=>array(68,0,641,760),64259=>array(68,0,979,760),64260=>array(68,0,979,760),64261=>array(53,0,713,760),64262=>array(2,-14,888,742),64275=>array(54,-14,1145,760),64276=>array(54,-14,1145,760),64277=>array(73,-208,1122,760),64278=>array(73,-208,1164,760),64279=>array(73,-208,1503,760),64285=>array(84,44,264,547),64286=>array(179,625,486,765),64287=>array(80,44,462,547),64288=>array(38,0,668,547),64289=>array(85,0,878,547),64290=>array(135,0,824,547),64291=>array(101,0,825,547),64292=>array(43,0,777,547),64293=>array(135,0,823,760),64294=>array(91,0,828,547),64295=>array(135,0,780,547),64296=>array(47,-4,784,547),64297=>array(159,272,801,627),64298=>array(118,0,793,698),64299=>array(118,0,772,698),64300=>array(118,0,797,698),64301=>array(118,0,772,698),64302=>array(91,-159,684,547),64303=>array(91,-193,684,547),64304=>array(91,-159,684,547),64305=>array(43,0,549,547),64306=>array(43,-5,383,547),64307=>array(135,0,618,547),64308=>array(101,0,617,547),64309=>array(98,0,371,547),64310=>array(83,0,469,547),64312=>array(141,-14,659,552),64313=>array(91,204,370,547),64314=>array(135,-208,509,547),64315=>array(43,0,534,547),64316=>array(135,0,599,729),64318=>array(75,0,646,555),64320=>array(43,0,377,547),64321=>array(144,-14,647,547),64323=>array(108,-208,551,547),64324=>array(91,0,623,547),64326=>array(43,0,607,547),64327=>array(62,-208,740,546),64328=>array(135,0,538,547),64329=>array(118,0,772,547),64330=>array(10,-4,634,547),64331=>array(91,0,308,698),64332=>array(43,0,549,698),64333=>array(43,0,534,698),64334=>array(91,0,623,698),64335=>array(84,0,677,760),65056=>array(-299,752,181,929),65057=>array(166,752,604,929),65058=>array(-208,756,168,894),65059=>array(153,756,528,894),65533=>array(96,-84,1092,912),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390,41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636,51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838,61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575,71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603,81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685,91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635,101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634,111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592,121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500,169=>1000,170=>471,171=>617,172=>838,173=>361,174=>1000,175=>500,176=>500,177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471,187=>617,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684,197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295,207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787,217=>732,218=>732,219=>732,220=>732,221=>611,222=>608,223=>630,224=>613,225=>613,226=>613,227=>613,228=>613,229=>613,230=>995,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278,237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612,247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684,257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698,267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632,277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775,287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295,297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590,307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278,317=>557,318=>278,319=>557,320=>278,321=>562,322=>287,323=>748,324=>634,325=>748,326=>634,327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787,337=>612,338=>1070,339=>1028,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635,349=>521,350=>635,351=>521,352=>635,353=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732,361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732,371=>634,372=>989,373=>818,374=>611,375=>592,376=>611,377=>685,378=>525,379=>685,380=>525,381=>685,382=>525,383=>352,384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775,394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,402=>352,403=>775,404=>687,405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634,415=>787,416=>913,417=>612,418=>938,419=>737,420=>652,421=>635,422=>695,423=>635,424=>521,425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>838,432=>634,433=>764,434=>721,435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666,445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1455,453=>1295,454=>1160,455=>852,456=>835,457=>556,458=>1043,459=>1026,460=>912,461=>684,462=>613,463=>295,464=>278,465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634,475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>995,484=>775,485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666,495=>525,496=>278,497=>1455,498=>1295,499=>1160,500=>775,501=>635,502=>1113,503=>682,504=>748,505=>634,506=>684,507=>613,508=>974,509=>995,510=>787,511=>612,512=>684,513=>613,514=>684,515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787,525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732,535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735,545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787,555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475,565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611,575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295,585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>613,593=>635,594=>635,595=>635,596=>550,597=>550,598=>635,599=>727,600=>615,601=>615,602=>844,603=>545,604=>545,605=>775,606=>664,607=>326,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634,615=>634,616=>372,617=>387,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974,625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>469,634=>469,635=>469,636=>469,637=>469,638=>530,639=>530,640=>602,641=>602,642=>521,643=>336,644=>336,645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592,655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787,665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510,675=>1014,676=>1058,677=>1013,678=>830,679=>610,680=>778,681=>848,682=>706,683=>654,684=>515,685=>515,686=>570,687=>664,688=>399,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379,695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370,705=>370,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>275,713=>500,714=>500,715=>500,716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500,726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>315,735=>500,736=>426,737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500,749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862,883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337,900=>500,901=>500,902=>684,903=>318,904=>767,905=>903,906=>435,908=>839,910=>860,911=>905,912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295,922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611,933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634,943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612,953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587,963=>634,964=>602,965=>579,966=>660,967=>592,968=>660,969=>837,970=>338,971=>579,972=>612,973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837,983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865,993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768,1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787,1013=>615,1014=>615,1015=>608,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698,1023=>703,1024=>632,1025=>632,1026=>786,1027=>557,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295,1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686,1043=>557,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863,1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776,1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>818,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613,1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604,1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855,1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842,1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278,1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771,1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027,1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781,1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698,1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>748,1163=>657,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>556,1172=>557,1173=>491,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710,1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1113,1191=>950,1192=>890,1193=>707,1194=>698,1195=>550,1196=>611,1197=>529,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685,1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>929,1213=>731,1214=>929,1215=>731,1216=>295,1217=>1077,1218=>901,1219=>655,1220=>604,1221=>752,1222=>639,1223=>752,1224=>661,1225=>752,1226=>661,1227=>686,1228=>591,1229=>863,1230=>754,1231=>278,1232=>684,1233=>613,1234=>684,1235=>613,1236=>974,1237=>995,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787,1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748,1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609,1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>557,1271=>491,1272=>818,1273=>790,1274=>675,1275=>556,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006,1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775,1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1195,1301=>997,1302=>900,1303=>867,1304=>1031,1305=>989,1306=>787,1307=>635,1308=>989,1309=>818,1310=>710,1311=>604,1312=>1113,1313=>942,1314=>1113,1315=>949,1316=>793,1317=>683,1329=>766,1330=>732,1331=>753,1332=>753,1333=>732,1334=>772,1335=>640,1336=>732,1337=>859,1338=>753,1339=>691,1340=>533,1341=>922,1342=>863,1343=>732,1344=>716,1345=>766,1346=>753,1347=>767,1348=>792,1349=>728,1350=>729,1351=>757,1352=>732,1353=>713,1354=>800,1355=>768,1356=>792,1357=>732,1358=>753,1359=>705,1360=>694,1361=>744,1362=>538,1363=>811,1364=>757,1365=>787,1366=>790,1369=>307,1370=>318,1371=>234,1372=>361,1373=>238,1374=>405,1375=>500,1377=>974,1378=>634,1379=>658,1380=>663,1381=>634,1382=>635,1383=>515,1384=>634,1385=>738,1386=>658,1387=>634,1388=>271,1389=>980,1390=>623,1391=>634,1392=>634,1393=>608,1394=>634,1395=>629,1396=>634,1397=>278,1398=>634,1399=>499,1400=>634,1401=>404,1402=>974,1403=>560,1404=>648,1405=>634,1406=>634,1407=>974,1408=>634,1409=>635,1410=>435,1411=>974,1412=>636,1413=>612,1414=>805,1415=>812,1417=>337,1418=>361,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>456,1479=>0,1488=>668,1489=>578,1490=>412,1491=>546,1492=>653,1493=>272,1494=>346,1495=>653,1496=>648,1497=>224,1498=>537,1499=>529,1500=>568,1501=>664,1502=>679,1503=>272,1504=>400,1505=>649,1506=>626,1507=>640,1508=>625,1509=>540,1510=>593,1511=>709,1512=>564,1513=>708,1514=>657,1520=>471,1521=>454,1522=>471,1523=>416,1524=>645,3647=>636,3713=>670,3714=>684,3716=>688,3719=>482,3720=>628,3722=>684,3725=>688,3732=>642,3733=>642,3734=>672,3735=>655,3737=>641,3738=>592,3739=>592,3740=>745,3741=>767,3742=>687,3743=>687,3745=>702,3746=>688,3747=>684,3749=>649,3751=>632,3754=>703,3755=>819,3757=>633,3758=>684,3759=>788,3760=>632,3761=>0,3762=>539,3763=>539,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>663,3776=>360,3777=>679,3778=>460,3779=>547,3780=>491,3782=>674,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>636,3793=>641,3794=>641,3795=>670,3796=>625,3797=>625,3798=>703,3799=>670,3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>874,4257=>733,4258=>679,4259=>834,4260=>615,4261=>768,4262=>753,4263=>914,4264=>453,4265=>620,4266=>843,4267=>882,4268=>625,4269=>854,4270=>781,4271=>629,4272=>912,4273=>621,4274=>620,4275=>854,4276=>866,4277=>724,4278=>630,4279=>621,4280=>625,4281=>620,4282=>818,4283=>874,4284=>615,4285=>623,4286=>625,4287=>725,4288=>844,4289=>596,4290=>688,4291=>596,4292=>594,4293=>738,4304=>508,4305=>518,4306=>581,4307=>818,4308=>508,4309=>513,4310=>500,4311=>801,4312=>518,4313=>510,4314=>1064,4315=>522,4316=>522,4317=>786,4318=>508,4319=>518,4320=>796,4321=>522,4322=>654,4323=>522,4324=>825,4325=>513,4326=>786,4327=>518,4328=>518,4329=>522,4330=>571,4331=>522,4332=>518,4333=>520,4334=>522,4335=>454,4336=>508,4337=>518,4338=>508,4339=>508,4340=>518,4341=>554,4342=>828,4343=>552,4344=>508,4345=>571,4346=>508,4347=>448,4348=>324,5121=>684,5122=>684,5123=>684,5124=>684,5125=>769,5126=>769,5127=>769,5129=>769,5130=>769,5131=>769,5132=>835,5133=>834,5134=>835,5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007,5140=>967,5141=>1007,5142=>769,5143=>967,5144=>1007,5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543,5151=>423,5152=>423,5153=>389,5154=>389,5155=>393,5156=>389,5157=>466,5158=>385,5159=>256,5160=>389,5161=>389,5162=>389,5163=>1090,5164=>909,5165=>953,5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684,5171=>729,5172=>729,5173=>729,5175=>729,5176=>729,5177=>729,5178=>835,5179=>684,5180=>835,5181=>834,5182=>835,5183=>834,5184=>967,5185=>1007,5186=>967,5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007,5192=>729,5193=>508,5194=>192,5196=>732,5197=>732,5198=>732,5199=>732,5200=>730,5201=>730,5202=>730,5204=>730,5205=>730,5206=>730,5207=>921,5208=>889,5209=>921,5210=>889,5211=>921,5212=>889,5213=>928,5214=>900,5215=>928,5216=>900,5217=>947,5218=>900,5219=>947,5220=>900,5221=>947,5222=>434,5223=>877,5224=>877,5225=>866,5226=>890,5227=>628,5228=>628,5229=>628,5230=>628,5231=>628,5232=>628,5233=>628,5234=>628,5235=>628,5236=>860,5237=>771,5238=>815,5239=>816,5240=>815,5241=>816,5242=>860,5243=>771,5244=>860,5245=>771,5246=>815,5247=>816,5248=>815,5249=>816,5250=>815,5251=>407,5252=>407,5253=>750,5254=>775,5255=>750,5256=>775,5257=>628,5258=>628,5259=>628,5260=>628,5261=>628,5262=>628,5263=>628,5264=>628,5265=>628,5266=>860,5267=>771,5268=>815,5269=>816,5270=>815,5271=>816,5272=>860,5273=>771,5274=>860,5275=>771,5276=>815,5277=>816,5278=>815,5279=>816,5280=>815,5281=>435,5282=>435,5283=>610,5284=>557,5285=>557,5286=>557,5287=>610,5288=>610,5289=>610,5290=>557,5291=>557,5292=>749,5293=>769,5294=>746,5295=>764,5296=>746,5297=>764,5298=>749,5299=>769,5300=>749,5301=>769,5302=>746,5303=>764,5304=>746,5305=>764,5306=>746,5307=>386,5308=>508,5309=>386,5312=>852,5313=>852,5314=>852,5315=>852,5316=>852,5317=>852,5318=>852,5319=>852,5320=>852,5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059,5326=>852,5327=>852,5328=>600,5329=>453,5330=>600,5331=>852,5332=>852,5333=>852,5334=>852,5335=>852,5336=>852,5337=>852,5338=>852,5339=>852,5340=>1069,5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030,5346=>1069,5347=>1035,5348=>1069,5349=>1035,5350=>1083,5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729,5357=>603,5358=>603,5359=>603,5360=>603,5361=>603,5362=>603,5363=>603,5364=>603,5365=>603,5366=>834,5367=>754,5368=>792,5369=>771,5370=>792,5371=>771,5372=>834,5373=>754,5374=>834,5375=>754,5376=>792,5377=>771,5378=>792,5379=>771,5380=>792,5381=>418,5382=>420,5383=>418,5392=>712,5393=>712,5394=>712,5395=>892,5396=>892,5397=>892,5398=>892,5399=>910,5400=>872,5401=>910,5402=>872,5403=>910,5404=>872,5405=>1140,5406=>1100,5407=>1140,5408=>1100,5409=>1140,5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627,5415=>627,5416=>627,5417=>627,5418=>627,5419=>627,5420=>627,5421=>627,5422=>627,5423=>844,5424=>781,5425=>816,5426=>818,5427=>816,5428=>818,5429=>844,5430=>781,5431=>844,5432=>781,5433=>816,5434=>818,5435=>816,5436=>818,5437=>816,5438=>418,5440=>389,5441=>484,5442=>916,5443=>916,5444=>863,5445=>916,5446=>863,5447=>863,5448=>603,5449=>603,5450=>603,5451=>603,5452=>603,5453=>603,5454=>834,5455=>754,5456=>418,5458=>729,5459=>684,5460=>684,5461=>684,5462=>684,5463=>726,5464=>726,5465=>726,5466=>726,5467=>924,5468=>1007,5469=>508,5470=>732,5471=>732,5472=>732,5473=>732,5474=>732,5475=>732,5476=>730,5477=>730,5478=>730,5479=>730,5480=>947,5481=>900,5482=>508,5492=>831,5493=>831,5494=>831,5495=>831,5496=>831,5497=>831,5498=>831,5499=>563,5500=>752,5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047,5506=>1047,5507=>1047,5508=>1047,5509=>825,5514=>831,5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259,5520=>1259,5521=>1002,5522=>1002,5523=>1259,5524=>1259,5525=>700,5526=>1073,5536=>852,5537=>852,5538=>799,5539=>799,5540=>799,5541=>799,5542=>600,5543=>643,5544=>643,5545=>643,5546=>643,5547=>643,5548=>643,5549=>643,5550=>418,5551=>628,5598=>770,5601=>770,5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310,5745=>1632,5746=>1632,5747=>1375,5748=>1375,5749=>1632,5750=>1632,7424=>592,7425=>717,7426=>982,7427=>586,7428=>550,7429=>605,7430=>605,7431=>491,7432=>541,7433=>278,7434=>395,7435=>579,7436=>583,7437=>754,7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7448=>524,7449=>602,7450=>602,7451=>583,7452=>574,7453=>737,7454=>948,7455=>638,7456=>592,7457=>818,7458=>525,7459=>526,7462=>583,7463=>592,7464=>564,7465=>524,7466=>590,7467=>639,7468=>431,7469=>613,7470=>432,7472=>485,7473=>398,7474=>398,7475=>488,7476=>474,7477=>186,7478=>186,7479=>413,7480=>351,7481=>543,7482=>471,7483=>471,7484=>496,7485=>439,7486=>380,7487=>438,7488=>385,7489=>461,7490=>623,7491=>392,7492=>392,7493=>405,7494=>648,7495=>428,7496=>405,7497=>417,7498=>417,7499=>360,7500=>359,7501=>405,7502=>179,7503=>426,7504=>623,7505=>409,7506=>414,7507=>370,7508=>414,7509=>414,7510=>428,7511=>295,7512=>405,7513=>470,7514=>623,7515=>417,7517=>402,7518=>373,7519=>385,7520=>416,7521=>364,7522=>179,7523=>259,7524=>405,7525=>417,7526=>402,7527=>373,7528=>412,7529=>416,7530=>364,7543=>635,7544=>474,7547=>372,7549=>667,7557=>278,7579=>405,7580=>370,7581=>370,7582=>414,7583=>360,7584=>296,7585=>233,7586=>405,7587=>405,7588=>261,7589=>250,7590=>261,7591=>261,7592=>234,7593=>250,7594=>235,7595=>376,7596=>623,7597=>623,7598=>411,7599=>479,7600=>409,7601=>414,7602=>414,7603=>360,7604=>287,7605=>295,7606=>508,7607=>418,7608=>361,7609=>406,7610=>417,7611=>366,7612=>437,7613=>366,7614=>392,7615=>414,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>684,7681=>613,7682=>686,7683=>635,7684=>686,7685=>635,7686=>686,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635,7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615,7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>635,7714=>752,7715=>634,7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278,7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>278,7736=>557,7737=>278,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974,7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634,7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635,7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411,7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521,7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634,7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592,7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818,7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525,7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352,7836=>352,7837=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684,7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684,7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632,7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632,7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787,7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787,7897=>612,7898=>913,7899=>612,7900=>913,7901=>612,7902=>913,7903=>612,7904=>913,7905=>612,7906=>913,7907=>612,7908=>732,7909=>634,7910=>732,7911=>634,7912=>838,7913=>634,7914=>838,7915=>634,7916=>838,7917=>634,7918=>838,7919=>634,7920=>838,7921=>634,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611,7927=>592,7928=>611,7929=>592,7930=>769,7931=>477,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659,7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928,7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338,7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600,7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579,8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837,8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338,8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659,8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801,8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837,8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659,8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871,8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338,8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579,8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685,8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813,8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>361,8209=>361,8210=>636,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>318,8217=>318,8218=>318,8219=>318,8220=>518,8221=>518,8222=>518,8223=>518,8224=>500,8225=>500,8226=>590,8227=>590,8228=>333,8229=>667,8230=>1000,8231=>318,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1350,8241=>1690,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8249=>400,8250=>400,8251=>838,8252=>485,8253=>531,8254=>500,8255=>804,8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733,8265=>733,8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450,8275=>1000,8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838,8282=>318,8283=>797,8284=>838,8285=>318,8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>399,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444,8340=>417,8341=>399,8342=>426,8343=>166,8344=>623,8345=>399,8346=>428,8347=>373,8348=>295,8352=>877,8353=>636,8354=>636,8355=>636,8356=>636,8357=>974,8358=>748,8359=>1271,8360=>1074,8361=>989,8362=>838,8363=>636,8364=>636,8365=>636,8366=>636,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636,8372=>774,8373=>636,8376=>636,8377=>636,8378=>679,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>970,8449=>970,8450=>698,8451=>1123,8452=>896,8453=>969,8454=>1032,8455=>614,8456=>698,8457=>952,8459=>988,8460=>754,8461=>850,8462=>634,8463=>634,8464=>470,8465=>697,8466=>720,8467=>413,8468=>818,8469=>801,8470=>1040,8471=>1000,8472=>697,8473=>701,8474=>787,8475=>798,8476=>814,8477=>792,8478=>896,8479=>684,8480=>1020,8481=>1014,8482=>1000,8483=>684,8484=>745,8485=>578,8486=>764,8487=>764,8488=>616,8489=>338,8490=>656,8491=>684,8492=>786,8493=>703,8494=>854,8495=>592,8496=>605,8497=>786,8498=>575,8499=>1069,8500=>462,8501=>745,8502=>674,8503=>466,8504=>645,8505=>380,8506=>926,8507=>1157,8508=>702,8509=>728,8510=>654,8511=>849,8512=>811,8513=>775,8514=>557,8515=>557,8516=>611,8517=>819,8518=>708,8519=>615,8520=>351,8521=>351,8523=>780,8526=>526,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1245,8577=>770,8578=>1245,8579=>703,8580=>549,8581=>698,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>684,8705=>636,8706=>517,8707=>632,8708=>632,8709=>871,8710=>669,8711=>669,8712=>871,8713=>871,8714=>718,8715=>871,8716=>871,8717=>718,8718=>636,8719=>757,8720=>757,8721=>674,8722=>838,8723=>838,8724=>838,8725=>337,8726=>637,8727=>838,8728=>626,8729=>626,8730=>637,8731=>637,8732=>637,8733=>714,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>732,8744=>732,8745=>732,8746=>732,8747=>521,8748=>789,8749=>1057,8750=>521,8751=>789,8752=>1057,8753=>521,8754=>521,8755=>521,8756=>636,8757=>636,8758=>260,8759=>636,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1000,8789=>1000,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>838,8809=>838,8810=>1047,8811=>1047,8812=>464,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>732,8845=>732,8846=>732,8847=>838,8848=>838,8849=>838,8850=>838,8851=>780,8852=>780,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>871,8867=>871,8868=>871,8869=>871,8870=>521,8871=>521,8872=>871,8873=>871,8874=>871,8875=>871,8876=>871,8877=>871,8878=>871,8879=>871,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>521,8891=>732,8892=>732,8893=>732,8894=>838,8895=>838,8896=>820,8897=>820,8898=>820,8899=>820,8900=>494,8901=>318,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>732,8911=>732,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1000,8947=>871,8948=>718,8949=>871,8950=>871,8951=>718,8952=>871,8953=>871,8954=>1000,8955=>871,8956=>718,8957=>871,8958=>718,8959=>871,8960=>602,8961=>602,8962=>635,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>390,8969=>390,8970=>390,8971=>390,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>513,8984=>1000,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>521,8993=>521,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>338,9076=>635,9077=>837,9082=>659,9085=>757,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9166=>838,9167=>945,9187=>873,9189=>769,9192=>636,9250=>635,9251=>635,9312=>896,9313=>896,9314=>896,9315=>896,9316=>896,9317=>896,9318=>896,9319=>896,9320=>896,9321=>896,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>769,9697=>769,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>890,9777=>890,9778=>890,9779=>890,9780=>890,9781=>890,9782=>890,9783=>890,9784=>896,9785=>1042,9786=>1042,9787=>1042,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>890,9863=>890,9864=>890,9865=>890,9866=>890,9867=>890,9868=>890,9869=>890,9870=>890,9871=>890,9872=>750,9873=>750,9874=>890,9875=>816,9876=>716,9877=>537,9878=>852,9879=>890,9880=>684,9881=>896,9882=>708,9883=>890,9884=>890,9888=>890,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9954=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>896,10103=>896,10104=>896,10105=>896,10106=>896,10107=>896,10108=>896,10109=>896,10110=>896,10111=>896,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>390,10182=>390,10208=>494,10214=>495,10215=>495,10216=>390,10217=>390,10218=>556,10219=>556,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10502=>838,10503=>838,10506=>838,10507=>838,10560=>683,10561=>683,10627=>734,10628=>734,10702=>838,10703=>1000,10704=>1000,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1325,10765=>521,10766=>521,10767=>521,10768=>521,10769=>521,10770=>521,10771=>521,10772=>521,10773=>521,10774=>521,10775=>521,10776=>521,10777=>521,10778=>521,10779=>521,10780=>521,10799=>838,10858=>838,10859=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>836,11023=>836,11024=>836,11025=>836,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278,11362=>557,11363=>603,11364=>695,11365=>613,11366=>392,11367=>752,11368=>634,11369=>656,11370=>579,11371=>685,11372=>525,11373=>781,11374=>863,11375=>684,11376=>781,11377=>734,11378=>1128,11379=>961,11380=>592,11381=>654,11382=>568,11383=>660,11385=>414,11386=>612,11387=>491,11388=>175,11389=>431,11390=>635,11391=>685,11520=>591,11521=>595,11522=>564,11523=>602,11524=>587,11525=>911,11526=>626,11527=>952,11528=>595,11529=>607,11530=>954,11531=>620,11532=>595,11533=>926,11534=>595,11535=>806,11536=>931,11537=>584,11538=>592,11539=>923,11540=>953,11541=>828,11542=>596,11543=>595,11544=>590,11545=>592,11546=>592,11547=>621,11548=>920,11549=>589,11550=>586,11551=>581,11552=>914,11553=>596,11554=>595,11555=>592,11556=>642,11557=>901,11800=>531,11807=>838,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42192=>686,42193=>603,42194=>603,42195=>770,42196=>611,42197=>611,42198=>775,42199=>656,42200=>656,42201=>512,42202=>698,42203=>703,42204=>685,42205=>575,42206=>575,42207=>863,42208=>748,42209=>557,42210=>635,42211=>695,42212=>695,42213=>684,42214=>684,42215=>752,42216=>775,42217=>512,42218=>989,42219=>685,42220=>611,42221=>686,42222=>684,42223=>684,42224=>632,42225=>632,42226=>295,42227=>787,42228=>732,42229=>732,42230=>557,42231=>767,42232=>300,42233=>300,42234=>596,42235=>596,42236=>300,42237=>300,42238=>588,42239=>588,42564=>635,42565=>521,42566=>354,42567=>338,42572=>1180,42573=>1028,42576=>1029,42577=>906,42580=>1080,42581=>842,42582=>985,42583=>847,42594=>1024,42595=>925,42596=>1014,42597=>900,42598=>863,42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42634=>805,42635=>722,42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472,42790=>752,42791=>634,42792=>878,42793=>709,42794=>614,42795=>541,42800=>491,42801=>521,42802=>1250,42803=>985,42804=>1219,42805=>1000,42806=>1155,42807=>996,42808=>971,42809=>818,42810=>971,42811=>818,42812=>959,42813=>818,42814=>698,42815=>549,42816=>656,42817=>579,42822=>680,42823=>392,42824=>582,42825=>427,42826=>807,42827=>704,42830=>1358,42831=>1019,42832=>603,42833=>635,42834=>734,42835=>774,42838=>787,42839=>635,42852=>605,42853=>635,42854=>605,42855=>635,42880=>557,42881=>278,42882=>735,42883=>634,42889=>337,42890=>376,42891=>401,42892=>275,42893=>686,42894=>487,42896=>772,42897=>667,42912=>775,42913=>635,42914=>656,42915=>579,42916=>748,42917=>634,42918=>695,42919=>411,42920=>635,42921=>521,42922=>872,43002=>915,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199,61184=>213,61185=>238,61186=>257,61187=>264,61188=>267,61189=>238,61190=>213,61191=>238,61192=>257,61193=>264,61194=>257,61195=>238,61196=>213,61197=>238,61198=>257,61199=>264,61200=>257,61201=>238,61202=>213,61203=>238,61204=>267,61205=>264,61206=>257,61207=>238,61208=>213,61209=>275,62464=>580,62465=>580,62466=>624,62467=>889,62468=>585,62469=>580,62470=>653,62471=>882,62472=>555,62473=>580,62474=>1168,62475=>589,62476=>590,62477=>869,62478=>580,62479=>589,62480=>914,62481=>590,62482=>731,62483=>583,62484=>872,62485=>589,62486=>895,62487=>589,62488=>589,62489=>590,62490=>649,62491=>589,62492=>589,62493=>599,62494=>590,62495=>516,62496=>580,62497=>584,62498=>580,62499=>580,62500=>581,62501=>638,62502=>955,62504=>931,62505=>808,62506=>508,62507=>508,62508=>508,62509=>508,62510=>508,62511=>508,62512=>508,62513=>508,62514=>508,62515=>508,62516=>518,62517=>518,62518=>518,62519=>787,62520=>787,62521=>787,62522=>787,62523=>787,62524=>546,62525=>546,62526=>546,62527=>546,62528=>546,62529=>546,63173=>612,64256=>722,64257=>646,64258=>646,64259=>1000,64260=>1000,64261=>686,64262=>861,64275=>1202,64276=>1202,64277=>1196,64278=>1186,64279=>1529,64285=>224,64286=>0,64287=>471,64288=>636,64289=>856,64290=>774,64291=>906,64292=>771,64293=>843,64294=>855,64295=>807,64296=>875,64297=>838,64298=>708,64299=>708,64300=>708,64301=>708,64302=>668,64303=>668,64304=>668,64305=>578,64306=>412,64307=>546,64308=>653,64309=>272,64310=>346,64311=>1000,64312=>648,64313=>307,64314=>537,64315=>529,64316=>568,64317=>1000,64318=>679,64319=>1000,64320=>400,64321=>649,64322=>1000,64323=>640,64324=>625,64325=>1000,64326=>593,64327=>709,64328=>564,64329=>708,64330=>657,64331=>272,64332=>578,64333=>529,64334=>625,64335=>629,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansi.z b/tcpdf/fonts/dejavusansi.z new file mode 100644 index 0000000..6a1b2b8 Binary files /dev/null and b/tcpdf/fonts/dejavusansi.z differ diff --git a/tcpdf/fonts/dejavusansmono.ctg.z b/tcpdf/fonts/dejavusansmono.ctg.z new file mode 100644 index 0000000..209e2d5 Binary files /dev/null and b/tcpdf/fonts/dejavusansmono.ctg.z differ diff --git a/tcpdf/fonts/dejavusansmono.php b/tcpdf/fonts/dejavusansmono.php new file mode 100644 index 0000000..5e0c537 --- /dev/null +++ b/tcpdf/fonts/dejavusansmono.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansMono'; +$up=-63; +$ut=44; +$dw=602; +$diff=''; +$originalsize=335068; +$enc=''; +$file='dejavusansmono.z'; +$ctg='dejavusansmono.ctg.z'; +$desc=array('Flags'=>33,'FontBBox'=>'[-558 -375 718 1042]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>602,'MaxWidth'=>602,'MissingWidth'=>602); +$cbbox=array(0=>array(51,-177,551,705),33=>array(252,0,351,729),34=>array(165,458,437,729),35=>array(1,0,600,718),36=>array(93,-147,544,760),37=>array(16,0,586,699),38=>array(28,-14,596,742),39=>array(258,458,343,729),40=>array(208,-132,432,759),41=>array(170,-132,394,759),42=>array(81,286,521,742),43=>array(43,55,559,572),44=>array(197,-140,368,148),45=>array(174,234,428,314),46=>array(239,0,362,149),47=>array(50,-93,527,729),48=>array(65,-14,537,742),49=>array(120,0,534,729),50=>array(74,0,517,742),51=>array(67,-14,527,742),52=>array(50,0,554,729),53=>array(70,-14,522,729),54=>array(65,-14,537,742),55=>array(68,0,527,729),56=>array(64,-14,538,742),57=>array(62,-14,534,742),58=>array(239,0,362,519),59=>array(197,-140,368,519),60=>array(43,69,559,558),61=>array(43,172,559,454),62=>array(43,69,559,558),63=>array(119,0,508,742),64=>array(13,-156,575,681),65=>array(18,0,584,729),66=>array(81,0,555,729),67=>array(68,-14,524,742),68=>array(67,0,540,729),69=>array(96,0,538,729),70=>array(114,0,543,729),71=>array(50,-14,539,742),72=>array(67,0,535,729),73=>array(98,0,503,729),74=>array(53,-14,467,729),75=>array(67,0,598,729),76=>array(105,0,556,729),77=>array(42,0,559,729),78=>array(68,0,534,729),79=>array(57,-14,545,742),80=>array(96,0,557,729),81=>array(57,-132,545,742),82=>array(70,0,602,729),83=>array(68,-14,536,742),84=>array(23,0,579,729),85=>array(72,-14,530,729),86=>array(28,0,574,729),87=>array(0,0,602,729),88=>array(9,0,593,729),89=>array(18,0,584,729),90=>array(76,0,571,729),91=>array(226,-132,433,760),92=>array(50,-93,527,729),93=>array(169,-132,376,760),94=>array(35,457,567,729),95=>array(0,-236,602,-197),96=>array(136,616,370,800),97=>array(65,-14,517,560),98=>array(94,-14,543,760),99=>array(95,-14,518,560),100=>array(60,-14,509,760),101=>array(60,-14,543,560),102=>array(95,0,519,760),103=>array(60,-215,509,560),104=>array(95,0,513,760),105=>array(87,0,533,760),106=>array(91,-208,383,760),107=>array(115,0,587,760),108=>array(78,0,505,765),109=>array(53,0,554,560),110=>array(95,0,513,560),111=>array(67,-14,535,560),112=>array(93,-208,541,560),113=>array(67,-210,515,558),114=>array(177,0,564,560),115=>array(104,-14,503,560),116=>array(64,0,504,702),117=>array(95,-14,513,546),118=>array(49,0,553,547),119=>array(0,0,602,547),120=>array(37,0,565,547),121=>array(51,-208,563,547),122=>array(99,0,508,548),123=>array(108,-163,494,760),124=>array(259,-236,343,764),125=>array(108,-163,494,760),126=>array(43,240,559,381),161=>array(252,0,351,729),162=>array(104,-153,518,699),163=>array(68,0,543,742),164=>array(100,95,537,532),165=>array(18,0,584,729),166=>array(259,-171,343,699),167=>array(97,-95,506,742),168=>array(156,659,446,758),169=>array(0,61,602,663),170=>array(132,229,469,742),171=>array(58,69,509,517),172=>array(43,181,559,421),173=>array(174,234,428,314),174=>array(0,61,602,663),175=>array(155,673,447,745),176=>array(146,432,456,742),177=>array(43,0,559,572),178=>array(157,326,436,742),179=>array(159,319,451,742),180=>array(232,616,466,800),181=>array(95,-209,577,547),182=>array(52,-96,503,729),183=>array(239,273,362,422),184=>array(193,-193,395,0),185=>array(168,326,447,734),186=>array(119,229,483,742),187=>array(94,69,545,517),188=>array(13,-132,544,810),189=>array(13,-132,544,810),190=>array(13,-132,544,818),191=>array(94,-13,483,729),192=>array(18,0,584,927),193=>array(18,0,584,927),194=>array(18,0,584,928),195=>array(18,0,584,921),196=>array(18,0,584,913),197=>array(18,0,584,928),198=>array(0,0,576,729),199=>array(68,-193,524,742),200=>array(96,0,538,927),201=>array(96,0,538,927),202=>array(96,0,538,928),203=>array(96,0,538,913),204=>array(98,0,503,927),205=>array(98,0,503,927),206=>array(98,0,503,928),207=>array(98,0,503,913),208=>array(4,0,538,729),209=>array(68,0,534,923),210=>array(57,-14,545,927),211=>array(57,-14,545,927),212=>array(57,-14,545,928),213=>array(57,-14,545,921),214=>array(57,-14,545,913),215=>array(73,85,529,541),216=>array(4,-34,586,761),217=>array(72,-14,530,927),218=>array(72,-14,530,927),219=>array(72,-14,530,928),220=>array(72,-14,530,913),221=>array(18,0,584,927),222=>array(98,0,569,729),223=>array(92,-14,561,760),224=>array(65,-14,517,800),225=>array(65,-14,517,800),226=>array(65,-14,517,800),227=>array(65,-14,517,777),228=>array(65,-14,517,758),229=>array(65,-14,517,878),230=>array(20,-14,586,560),231=>array(95,-193,518,560),232=>array(60,-14,543,800),233=>array(60,-14,543,800),234=>array(60,-14,543,800),235=>array(60,-14,543,758),236=>array(87,0,533,800),237=>array(87,0,533,800),238=>array(87,0,533,800),239=>array(87,0,533,758),240=>array(67,-14,535,760),241=>array(95,0,513,777),242=>array(67,-14,535,800),243=>array(67,-14,535,800),244=>array(67,-14,535,800),245=>array(67,-14,535,777),246=>array(67,-14,535,758),247=>array(43,73,559,554),248=>array(23,-47,573,592),249=>array(95,-14,513,800),250=>array(95,-14,513,800),251=>array(95,-14,513,800),252=>array(95,-14,513,758),253=>array(51,-208,563,800),254=>array(93,-208,541,765),255=>array(51,-208,563,758),256=>array(18,0,584,898),257=>array(65,-14,517,745),258=>array(18,0,584,928),259=>array(65,-14,517,785),260=>array(18,-193,609,729),261=>array(65,-193,556,560),262=>array(68,-14,524,927),263=>array(95,-14,518,800),264=>array(68,-14,524,932),265=>array(95,-14,518,800),266=>array(68,-14,524,914),267=>array(95,-14,518,758),268=>array(68,-14,524,928),269=>array(95,-14,518,800),270=>array(67,0,540,925),271=>array(60,-14,641,760),272=>array(4,0,538,729),273=>array(60,-14,602,760),274=>array(96,0,538,898),275=>array(60,-14,543,745),276=>array(96,0,538,928),277=>array(60,-14,543,785),278=>array(96,0,538,914),279=>array(60,-14,543,758),280=>array(96,-193,538,729),281=>array(60,-193,543,560),282=>array(96,0,538,925),283=>array(60,-14,543,797),284=>array(50,-14,539,928),285=>array(60,-215,509,800),286=>array(50,-14,539,928),287=>array(60,-215,509,785),288=>array(50,-14,539,914),289=>array(60,-215,509,758),290=>array(50,-280,539,742),291=>array(60,-215,509,788),292=>array(67,0,535,928),293=>array(95,0,513,928),294=>array(1,0,601,729),295=>array(34,0,513,760),296=>array(98,0,503,921),297=>array(87,0,533,777),298=>array(98,0,503,898),299=>array(87,0,533,745),300=>array(98,0,503,928),301=>array(87,0,533,785),302=>array(98,-193,503,729),303=>array(87,-193,533,760),304=>array(98,0,503,914),305=>array(87,0,533,547),306=>array(-0,-13,600,730),307=>array(-2,-213,567,760),308=>array(53,-14,474,928),309=>array(91,-208,457,800),310=>array(67,-266,598,729),311=>array(115,-266,587,760),312=>array(115,0,587,547),313=>array(98,0,556,928),314=>array(78,0,505,928),315=>array(105,-266,556,729),316=>array(78,-266,505,765),317=>array(105,0,556,729),318=>array(78,0,565,765),319=>array(105,0,556,729),320=>array(78,0,592,765),321=>array(-5,0,556,729),322=>array(37,0,505,765),323=>array(68,0,534,927),324=>array(95,0,513,803),325=>array(68,-266,534,729),326=>array(95,-266,513,560),327=>array(68,0,534,928),328=>array(95,0,513,800),329=>array(12,0,573,760),330=>array(72,-208,530,743),331=>array(95,-208,513,560),332=>array(57,-14,545,898),333=>array(67,-14,535,745),334=>array(57,-14,545,928),335=>array(67,-14,535,785),336=>array(57,-14,545,927),337=>array(67,-14,535,800),338=>array(35,0,594,729),339=>array(7,-14,591,560),340=>array(70,0,602,927),341=>array(177,0,566,803),342=>array(70,-266,602,729),343=>array(141,-266,564,560),344=>array(70,0,602,925),345=>array(177,0,564,800),346=>array(68,-14,536,927),347=>array(104,-14,503,803),348=>array(68,-14,536,928),349=>array(104,-14,503,800),350=>array(68,-193,536,742),351=>array(104,-193,503,560),352=>array(68,-14,536,928),353=>array(104,-14,503,800),354=>array(23,-193,579,729),355=>array(64,-193,504,702),356=>array(23,0,579,928),357=>array(64,0,504,812),358=>array(23,0,579,729),359=>array(64,0,504,702),360=>array(72,-14,530,921),361=>array(95,-14,513,777),362=>array(72,-14,530,898),363=>array(95,-14,513,745),364=>array(72,-14,530,928),365=>array(95,-14,513,785),366=>array(72,-14,530,1042),367=>array(95,-14,513,856),368=>array(72,-14,530,927),369=>array(95,-14,513,800),370=>array(72,-201,530,729),371=>array(95,-193,586,546),372=>array(0,0,602,932),373=>array(0,0,602,803),374=>array(18,0,584,932),375=>array(51,-208,563,803),376=>array(18,0,584,913),377=>array(76,0,571,927),378=>array(99,0,508,803),379=>array(76,0,571,914),380=>array(99,0,508,758),381=>array(76,0,571,928),382=>array(99,0,508,800),383=>array(95,0,519,760),384=>array(34,-14,543,760),385=>array(10,0,581,729),386=>array(81,0,555,729),387=>array(94,-14,543,760),388=>array(23,0,579,729),389=>array(29,-14,572,760),390=>array(68,-14,524,742),391=>array(29,-14,573,800),392=>array(46,-14,556,694),393=>array(4,0,538,729),394=>array(4,0,598,729),395=>array(64,0,538,729),396=>array(77,-14,525,760),397=>array(66,-220,535,560),398=>array(96,0,538,729),399=>array(57,-14,545,742),400=>array(67,-14,527,742),401=>array(31,-208,571,729),402=>array(95,-208,519,760),403=>array(25,-14,577,800),404=>array(14,-210,589,661),405=>array(32,0,570,760),406=>array(98,0,528,729),407=>array(98,0,503,729),408=>array(54,0,595,729),409=>array(115,0,587,760),410=>array(78,0,505,765),411=>array(24,0,553,729),412=>array(53,-13,554,729),413=>array(14,-208,512,729),414=>array(95,-210,513,560),415=>array(57,-14,545,742),416=>array(3,-14,582,760),417=>array(16,-14,587,560),418=>array(22,-14,580,742),419=>array(42,-210,583,560),420=>array(27,0,575,729),421=>array(93,-208,541,699),422=>array(70,-129,602,729),423=>array(68,-14,536,742),424=>array(104,-14,503,560),425=>array(59,0,553,729),426=>array(58,-208,544,760),427=>array(64,-208,504,702),428=>array(23,0,579,729),429=>array(64,0,504,760),430=>array(23,-208,579,729),431=>array(4,-14,598,762),432=>array(19,-14,583,555),433=>array(36,0,566,713),434=>array(75,0,521,729),435=>array(8,0,594,730),436=>array(12,-208,598,553),437=>array(76,0,571,729),438=>array(76,0,526,548),439=>array(13,-14,589,729),440=>array(13,-14,589,729),441=>array(61,-213,541,547),442=>array(84,-208,518,547),443=>array(74,0,517,742),444=>array(13,-14,589,729),445=>array(61,-213,541,547),446=>array(95,-14,507,702),447=>array(61,-208,550,560),448=>array(251,0,351,729),449=>array(153,0,449,729),450=>array(80,0,522,729),451=>array(251,0,351,729),461=>array(18,0,584,928),462=>array(65,-14,517,800),463=>array(98,0,503,928),464=>array(87,0,533,800),465=>array(57,-14,545,928),466=>array(67,-14,535,800),467=>array(72,-14,530,928),468=>array(95,-14,513,800),469=>array(72,-14,530,953),470=>array(95,-14,513,899),471=>array(72,-14,530,997),472=>array(95,-14,513,954),473=>array(72,-14,530,998),474=>array(95,-14,513,954),475=>array(72,-14,530,997),476=>array(95,-14,513,954),477=>array(60,-14,542,560),478=>array(18,0,584,953),479=>array(65,-14,517,899),480=>array(18,0,584,953),481=>array(65,-14,517,899),482=>array(0,0,576,898),483=>array(20,-14,586,745),486=>array(50,-14,539,928),487=>array(60,-215,509,800),488=>array(67,0,598,928),489=>array(115,0,587,928),490=>array(57,-201,545,742),491=>array(67,-201,535,560),492=>array(57,-201,545,898),493=>array(67,-201,535,745),494=>array(13,-14,589,928),495=>array(61,-213,541,800),496=>array(91,-208,474,797),500=>array(50,-14,539,927),501=>array(60,-215,509,800),502=>array(30,-14,572,729),504=>array(68,0,534,927),505=>array(95,0,513,800),508=>array(0,0,576,927),509=>array(20,-14,586,800),510=>array(4,-34,586,927),511=>array(23,-47,573,800),512=>array(18,0,584,927),513=>array(65,-14,517,800),514=>array(18,0,584,928),515=>array(65,-14,517,785),516=>array(91,0,538,927),517=>array(60,-14,543,800),518=>array(96,0,538,928),519=>array(60,-14,543,785),520=>array(91,0,503,927),521=>array(87,0,533,800),522=>array(98,0,503,928),523=>array(87,0,533,785),524=>array(57,-14,545,927),525=>array(67,-14,535,800),526=>array(57,-14,545,928),527=>array(67,-14,535,785),528=>array(67,0,602,927),529=>array(176,0,564,800),530=>array(70,0,602,928),531=>array(177,0,564,785),532=>array(72,-14,530,927),533=>array(95,-14,513,800),534=>array(72,-14,530,928),535=>array(95,-14,513,785),536=>array(68,-265,536,742),537=>array(104,-265,503,560),538=>array(23,-265,579,729),539=>array(64,-265,504,702),540=>array(61,-210,541,742),541=>array(85,-211,517,560),542=>array(67,0,535,928),543=>array(95,0,513,928),544=>array(72,-210,530,743),545=>array(9,-72,578,760),548=>array(76,-208,571,729),549=>array(99,-208,508,548),550=>array(18,0,584,914),551=>array(65,-14,517,758),552=>array(96,-193,538,729),553=>array(60,-193,543,560),554=>array(57,-14,545,953),555=>array(67,-14,535,899),556=>array(57,-14,545,953),557=>array(67,-14,535,899),558=>array(57,-14,545,914),559=>array(67,-14,535,758),560=>array(57,-14,545,953),561=>array(67,-14,535,899),562=>array(18,0,584,898),563=>array(51,-208,563,745),564=>array(78,-72,505,765),565=>array(52,-72,550,560),566=>array(64,-72,504,702),567=>array(91,-208,383,547),568=>array(59,-14,543,760),569=>array(59,-214,543,560),570=>array(4,-34,586,761),571=>array(4,-34,586,761),572=>array(23,-47,573,592),573=>array(10,0,592,729),574=>array(16,-34,598,761),575=>array(104,-242,512,560),576=>array(99,-242,508,548),577=>array(27,0,575,729),579=>array(4,0,555,729),580=>array(10,-14,592,729),581=>array(28,0,574,729),588=>array(10,0,602,729),589=>array(69,0,564,560),592=>array(75,-14,527,560),593=>array(60,-14,509,560),594=>array(94,-15,542,559),595=>array(94,-14,543,760),596=>array(90,-14,513,560),597=>array(95,-69,528,560),598=>array(60,-208,527,760),599=>array(60,-14,527,760),600=>array(60,-14,542,560),601=>array(60,-14,542,560),602=>array(15,-14,587,560),603=>array(83,-11,520,560),604=>array(83,-11,520,560),605=>array(27,-11,575,560),606=>array(86,-21,517,559),607=>array(91,-208,555,546),608=>array(60,-215,525,760),609=>array(77,-215,525,546),610=>array(60,0,543,574),611=>array(50,-210,552,546),612=>array(50,0,552,546),613=>array(92,-210,510,546),614=>array(95,0,513,760),615=>array(95,-208,513,760),616=>array(69,0,524,760),617=>array(97,0,505,546),618=>array(78,0,524,546),619=>array(43,0,559,765),620=>array(77,0,525,765),621=>array(78,-208,505,765),622=>array(20,-213,582,765),623=>array(51,0,552,560),624=>array(51,-210,552,560),625=>array(50,-208,551,560),626=>array(87,-208,538,560),627=>array(66,-208,515,560),628=>array(70,0,532,560),629=>array(67,-14,535,560),630=>array(34,0,568,547),631=>array(83,-15,519,560),632=>array(67,-208,535,759),633=>array(74,-13,461,546),634=>array(74,-13,461,765),635=>array(50,-208,563,546),636=>array(177,-208,564,560),637=>array(177,-208,564,560),638=>array(78,0,524,560),639=>array(78,0,524,560),640=>array(60,0,542,546),641=>array(60,0,542,546),642=>array(92,-208,510,560),643=>array(61,-208,541,760),644=>array(61,-208,541,760),645=>array(61,-208,541,546),646=>array(58,-208,544,760),647=>array(81,-155,521,547),648=>array(64,-208,504,702),649=>array(0,-14,602,547),650=>array(46,-15,556,547),651=>array(32,0,558,547),652=>array(35,0,567,547),653=>array(7,0,595,547),654=>array(35,0,567,755),655=>array(50,0,552,561),656=>array(95,-208,507,547),657=>array(82,-54,521,547),658=>array(61,-213,541,547),659=>array(51,-213,551,547),660=>array(95,0,507,759),661=>array(95,0,507,759),662=>array(95,0,507,759),663=>array(95,-214,507,759),664=>array(46,22,556,532),665=>array(102,0,500,561),666=>array(86,-21,517,559),667=>array(26,0,553,759),668=>array(70,0,532,560),669=>array(99,-208,503,760),670=>array(58,-213,544,547),671=>array(120,0,482,560),672=>array(17,-208,561,759),673=>array(95,0,507,759),674=>array(95,0,507,759),675=>array(14,-14,575,760),676=>array(13,-213,588,760),677=>array(26,-54,575,760),678=>array(75,-14,527,702),679=>array(75,-208,525,760),680=>array(88,-70,509,702),681=>array(66,-208,535,760),682=>array(112,-14,490,760),683=>array(107,0,494,760),684=>array(70,-15,532,641),685=>array(70,84,532,640),686=>array(87,-214,515,760),687=>array(96,-208,506,760),688=>array(157,326,445,752),689=>array(157,325,445,751),690=>array(237,209,365,752),691=>array(200,326,402,640),692=>array(200,318,402,633),693=>array(165,209,438,633),694=>array(148,326,454,633),695=>array(70,326,532,633),696=>array(133,209,469,633),697=>array(240,557,365,800),699=>array(226,472,397,760),700=>array(226,472,397,760),701=>array(242,595,360,844),702=>array(234,492,368,760),703=>array(234,492,368,760),704=>array(171,444,431,870),705=>array(171,444,431,870),710=>array(145,616,457,800),711=>array(145,616,457,800),712=>array(268,488,334,759),713=>array(155,673,447,745),716=>array(268,-148,334,123),717=>array(155,-174,447,-102),718=>array(184,-285,418,-102),719=>array(184,-285,418,-102),720=>array(214,0,388,517),721=>array(214,355,388,517),722=>array(234,249,368,517),723=>array(234,249,368,517),726=>array(155,125,447,417),727=>array(191,234,411,307),728=>array(148,645,454,785),729=>array(250,658,351,758),730=>array(167,610,435,878),731=>array(205,-193,387,0),732=>array(140,639,462,777),733=>array(168,616,511,800),734=>array(-171,233,431,504),736=>array(143,208,459,632),737=>array(167,326,436,755),738=>array(169,326,433,648),739=>array(134,326,468,632),740=>array(171,326,431,751),741=>array(146,0,456,668),742=>array(146,0,456,668),743=>array(146,0,456,668),744=>array(146,0,456,668),745=>array(146,0,456,668),750=>array(103,472,498,760),755=>array(194,-245,408,-31),768=>array(136,616,370,800),769=>array(232,616,466,800),770=>array(145,616,457,800),771=>array(140,639,462,777),772=>array(155,673,447,745),773=>array(0,716,602,755),774=>array(148,645,454,785),775=>array(250,658,351,758),776=>array(156,659,446,758),777=>array(200,618,402,847),778=>array(167,610,435,878),779=>array(168,616,511,800),780=>array(145,616,457,800),781=>array(267,616,333,833),782=>array(167,616,433,833),783=>array(103,616,445,800),784=>array(148,645,454,857),785=>array(148,645,454,785),786=>array(229,472,392,641),787=>array(242,595,360,844),788=>array(242,595,360,844),789=>array(232,616,362,800),790=>array(184,-285,418,-102),791=>array(184,-285,418,-102),792=>array(201,-375,354,-135),793=>array(225,-375,377,-135),794=>array(181,690,421,930),795=>array(205,373,397,555),796=>array(247,-245,354,-31),797=>array(173,-288,412,-135),798=>array(171,-288,410,-135),799=>array(171,-375,411,-135),800=>array(181,-202,421,-135),801=>array(245,-208,513,63),802=>array(89,-208,357,63),803=>array(250,-202,351,-102),804=>array(156,-201,446,-103),805=>array(194,-245,408,-31),806=>array(199,-265,362,-96),807=>array(193,-193,395,0),808=>array(210,-193,392,0),809=>array(268,-319,334,-102),810=>array(167,-263,436,-102),811=>array(101,-222,501,-82),812=>array(145,-237,457,-53),813=>array(145,-237,457,-53),814=>array(148,-238,454,-98),815=>array(148,-237,454,-97),816=>array(140,-237,462,-99),817=>array(155,-174,447,-102),818=>array(0,-236,602,-197),819=>array(0,-236,602,-80),820=>array(43,240,559,381),821=>array(69,221,519,301),822=>array(0,221,602,301),823=>array(23,-47,573,592),824=>array(4,-34,586,761),825=>array(247,-245,354,-31),826=>array(167,-188,436,-26),827=>array(167,-371,436,-102),828=>array(101,-222,501,-82),829=>array(193,599,409,816),830=>array(232,595,370,853),831=>array(0,599,602,755),835=>array(242,595,360,844),856=>array(501,658,601,758),865=>array(-116,742,718,902),884=>array(240,557,365,800),885=>array(237,-208,362,35),890=>array(265,-208,372,-45),894=>array(197,-140,368,519),900=>array(232,616,466,800),901=>array(156,659,466,980),902=>array(12,0,584,800),903=>array(239,273,362,422),904=>array(-110,0,538,800),905=>array(-134,0,535,800),906=>array(-110,0,503,800),908=>array(-37,-14,545,800),910=>array(-195,0,584,800),911=>array(-24,0,566,800),912=>array(151,0,476,980),913=>array(18,0,584,729),914=>array(81,0,555,729),915=>array(105,0,556,729),916=>array(18,0,584,729),917=>array(96,0,538,729),918=>array(76,0,571,729),919=>array(67,0,535,729),920=>array(57,-14,545,742),921=>array(98,0,503,729),922=>array(67,0,598,729),923=>array(18,0,584,729),924=>array(42,0,559,729),925=>array(68,0,534,729),926=>array(67,0,535,729),927=>array(57,-14,545,742),928=>array(67,0,535,729),929=>array(96,0,557,729),931=>array(59,0,553,729),932=>array(23,0,579,729),933=>array(18,0,584,729),934=>array(57,0,544,729),935=>array(9,0,593,729),936=>array(57,0,544,729),937=>array(36,0,566,713),938=>array(98,0,503,913),939=>array(18,0,584,913),940=>array(34,-12,573,800),941=>array(83,-11,520,800),942=>array(95,-208,513,800),943=>array(151,0,476,800),944=>array(25,0,551,980),945=>array(34,-12,573,559),946=>array(74,-208,547,766),947=>array(16,-208,553,547),948=>array(67,-14,535,767),949=>array(83,-11,520,560),950=>array(75,-210,519,760),951=>array(95,-208,513,560),952=>array(67,-14,535,732),953=>array(151,0,476,547),954=>array(115,0,587,547),955=>array(33,0,565,760),956=>array(95,-209,577,547),957=>array(57,0,532,547),958=>array(79,-210,527,760),959=>array(67,-14,535,560),960=>array(39,-19,577,547),961=>array(93,-208,541,560),962=>array(95,-210,518,560),963=>array(67,-14,552,547),964=>array(78,0,524,546),965=>array(25,0,551,547),966=>array(37,-208,565,551),967=>array(43,-208,559,547),968=>array(64,-208,538,547),969=>array(34,-14,568,547),970=>array(151,0,476,758),971=>array(25,0,551,758),972=>array(67,-14,535,800),973=>array(25,0,551,800),974=>array(34,-14,568,800),976=>array(73,-11,501,768),977=>array(57,-11,540,768),978=>array(17,0,582,729),979=>array(-195,0,582,800),980=>array(17,0,582,913),981=>array(53,-208,549,729),982=>array(28,0,574,547),983=>array(25,-188,571,547),984=>array(57,-208,545,742),985=>array(67,-208,535,560),986=>array(68,-210,537,729),987=>array(76,-210,520,547),988=>array(114,0,543,729),989=>array(0,-208,503,760),990=>array(47,-2,563,729),991=>array(64,0,538,759),992=>array(16,-208,575,742),993=>array(43,-180,559,559),1008=>array(25,-7,571,550),1009=>array(93,-208,541,560),1010=>array(95,-14,518,560),1011=>array(91,-208,383,760),1012=>array(57,-14,545,742),1013=>array(79,-14,504,560),1014=>array(79,-14,504,560),1015=>array(98,0,569,729),1016=>array(93,-208,541,765),1017=>array(68,-14,524,742),1018=>array(42,0,559,729),1019=>array(62,-208,539,547),1020=>array(42,-208,541,560),1021=>array(68,-14,524,742),1022=>array(68,-14,524,742),1023=>array(68,-14,524,742),1024=>array(96,0,538,927),1025=>array(96,0,538,913),1026=>array(-32,-229,554,730),1027=>array(105,0,556,927),1028=>array(68,-14,524,742),1029=>array(68,-14,536,742),1030=>array(98,0,503,729),1031=>array(98,0,503,913),1032=>array(53,-14,467,729),1033=>array(-9,0,597,729),1034=>array(17,0,597,729),1035=>array(-32,0,554,730),1036=>array(67,0,598,927),1037=>array(68,0,534,927),1038=>array(51,0,563,928),1039=>array(67,-157,535,729),1040=>array(18,0,584,729),1041=>array(81,0,555,729),1042=>array(81,0,555,729),1043=>array(105,0,556,729),1044=>array(16,-157,586,729),1045=>array(96,0,538,729),1046=>array(7,0,595,729),1047=>array(67,-14,527,742),1048=>array(68,0,534,729),1049=>array(68,0,534,928),1050=>array(67,0,598,729),1051=>array(2,0,534,729),1052=>array(42,0,559,729),1053=>array(67,0,535,729),1054=>array(57,-14,545,742),1055=>array(67,0,535,729),1056=>array(96,0,557,729),1057=>array(68,-14,524,742),1058=>array(23,0,579,729),1059=>array(51,0,563,729),1060=>array(32,0,570,729),1061=>array(9,0,593,729),1062=>array(39,-157,573,729),1063=>array(67,0,533,729),1064=>array(56,0,547,729),1065=>array(29,-157,586,729),1066=>array(16,0,557,729),1067=>array(32,0,554,729),1068=>array(96,0,557,729),1069=>array(68,-14,524,742),1070=>array(29,-14,573,742),1071=>array(37,0,553,729),1072=>array(65,-14,517,560),1073=>array(61,-14,535,777),1074=>array(102,0,500,547),1075=>array(125,0,493,547),1076=>array(51,-140,551,547),1077=>array(60,-14,543,560),1078=>array(29,0,574,547),1079=>array(83,-11,520,560),1080=>array(95,0,513,547),1081=>array(95,0,513,785),1082=>array(115,0,587,547),1083=>array(15,0,513,547),1084=>array(30,0,576,547),1085=>array(95,0,513,547),1086=>array(67,-14,535,560),1087=>array(95,0,513,547),1088=>array(93,-208,541,560),1089=>array(95,-14,518,560),1090=>array(110,0,503,547),1091=>array(51,-208,563,547),1092=>array(48,-208,549,760),1093=>array(37,0,565,547),1094=>array(61,-140,546,547),1095=>array(95,0,513,548),1096=>array(61,0,542,547),1097=>array(39,-140,590,547),1098=>array(15,0,568,547),1099=>array(51,0,551,547),1100=>array(95,0,527,547),1101=>array(95,-14,518,560),1102=>array(38,-14,570,560),1103=>array(82,0,480,547),1104=>array(60,-14,543,803),1105=>array(60,-14,543,718),1106=>array(17,-208,541,760),1107=>array(125,0,505,803),1108=>array(95,-14,518,560),1109=>array(104,-14,503,560),1110=>array(87,0,533,760),1111=>array(87,0,533,758),1112=>array(91,-208,383,760),1113=>array(5,0,599,547),1114=>array(32,0,577,547),1115=>array(17,0,528,760),1116=>array(115,0,587,803),1117=>array(95,0,513,803),1118=>array(51,-208,563,785),1119=>array(95,-140,513,547),1122=>array(16,0,557,729),1123=>array(15,0,568,760),1138=>array(57,-14,545,742),1139=>array(67,-14,535,560),1168=>array(105,0,556,878),1169=>array(125,0,493,700),1170=>array(42,0,556,729),1171=>array(62,0,493,547),1172=>array(105,-200,556,729),1173=>array(125,-208,540,547),1174=>array(7,-157,595,729),1175=>array(29,-140,585,547),1176=>array(67,-193,527,742),1177=>array(83,-193,520,560),1178=>array(67,-157,598,729),1179=>array(115,-140,587,547),1186=>array(15,-157,587,729),1187=>array(48,-140,561,547),1188=>array(55,0,590,729),1189=>array(61,0,585,547),1194=>array(68,-193,524,742),1195=>array(95,-193,518,560),1196=>array(23,-157,579,729),1197=>array(110,-140,503,547),1198=>array(18,0,584,729),1199=>array(45,-208,557,547),1200=>array(18,0,584,729),1201=>array(45,-208,557,547),1202=>array(9,-157,593,729),1203=>array(37,-140,565,547),1210=>array(68,0,535,730),1211=>array(95,0,513,760),1216=>array(98,0,503,729),1217=>array(7,0,595,928),1218=>array(29,0,574,785),1219=>array(67,-200,590,729),1220=>array(115,-208,553,547),1223=>array(67,-200,535,729),1224=>array(95,-208,513,547),1227=>array(68,-157,535,730),1228=>array(95,-140,513,548),1231=>array(222,0,312,765),1232=>array(18,0,584,928),1233=>array(65,-14,517,785),1234=>array(18,0,584,913),1235=>array(65,-14,517,758),1236=>array(0,0,576,729),1237=>array(20,-14,586,560),1238=>array(96,0,538,928),1239=>array(60,-14,543,785),1240=>array(57,-14,545,742),1241=>array(60,-14,542,560),1242=>array(57,-14,545,913),1243=>array(60,-14,542,758),1244=>array(7,0,595,913),1245=>array(29,0,574,758),1246=>array(67,-14,527,913),1247=>array(83,-11,520,758),1248=>array(13,-14,589,729),1249=>array(61,-213,541,547),1250=>array(68,0,534,898),1251=>array(95,0,513,745),1252=>array(68,0,534,913),1253=>array(95,0,513,758),1254=>array(57,-14,545,913),1255=>array(67,-14,535,758),1256=>array(57,-14,545,742),1257=>array(67,-14,535,560),1258=>array(57,-14,545,913),1259=>array(67,-14,535,758),1260=>array(68,-14,524,913),1261=>array(95,-14,518,758),1262=>array(51,0,563,898),1263=>array(51,-208,563,745),1264=>array(51,0,563,913),1265=>array(51,-208,563,758),1266=>array(51,0,563,927),1267=>array(51,-208,563,800),1268=>array(67,0,533,913),1269=>array(95,0,513,758),1270=>array(105,-157,556,729),1271=>array(125,-140,493,547),1272=>array(32,0,554,913),1273=>array(51,0,551,758),1296=>array(67,-14,527,742),1297=>array(83,-11,520,560),1306=>array(57,-132,545,742),1307=>array(67,-210,515,558),1308=>array(0,0,602,729),1309=>array(0,0,602,547),1329=>array(58,-29,544,729),1330=>array(63,0,539,742),1331=>array(42,0,561,742),1332=>array(26,0,576,742),1333=>array(63,-14,539,729),1334=>array(47,0,555,742),1335=>array(59,0,543,729),1336=>array(63,0,539,743),1337=>array(21,-14,581,742),1338=>array(42,-14,561,729),1339=>array(72,0,530,729),1340=>array(75,0,526,729),1341=>array(45,-14,557,729),1342=>array(26,-14,575,742),1343=>array(72,0,530,729),1344=>array(44,-26,558,729),1345=>array(46,-23,556,742),1346=>array(26,0,576,742),1347=>array(42,0,560,742),1348=>array(26,-14,576,729),1349=>array(31,-14,571,742),1350=>array(26,-14,576,729),1351=>array(47,-14,555,729),1352=>array(72,0,530,743),1353=>array(47,-28,555,742),1354=>array(32,0,570,742),1355=>array(47,0,555,742),1356=>array(26,0,576,742),1357=>array(72,-14,530,729),1358=>array(16,0,585,729),1359=>array(51,-14,550,742),1360=>array(72,0,530,743),1361=>array(31,-14,571,742),1362=>array(66,0,536,729),1363=>array(34,0,567,729),1364=>array(25,0,577,742),1365=>array(57,-14,545,742),1366=>array(35,-14,567,729),1369=>array(234,492,368,760),1370=>array(229,499,373,729),1371=>array(185,620,418,803),1372=>array(110,618,492,893),1373=>array(184,616,418,800),1374=>array(87,613,515,885),1375=>array(92,618,510,760),1377=>array(50,-13,551,547),1378=>array(89,-208,512,560),1379=>array(36,-208,566,558),1380=>array(56,-208,546,560),1381=>array(80,-14,522,760),1382=>array(36,-208,566,558),1383=>array(101,0,500,760),1384=>array(89,-208,512,560),1385=>array(32,-208,569,560),1386=>array(36,-14,566,760),1387=>array(92,-208,510,760),1388=>array(160,-208,442,547),1389=>array(51,-208,551,760),1390=>array(67,-14,535,771),1391=>array(92,-208,510,760),1392=>array(92,0,510,760),1393=>array(83,-15,518,760),1394=>array(56,-208,546,560),1395=>array(78,-14,524,760),1396=>array(51,-14,551,760),1397=>array(155,-208,447,547),1398=>array(51,-14,551,760),1399=>array(84,-208,517,561),1400=>array(92,0,510,560),1401=>array(118,-208,483,571),1402=>array(50,-208,551,547),1403=>array(82,-208,520,561),1404=>array(64,0,538,560),1405=>array(92,-14,510,546),1406=>array(50,-208,552,760),1407=>array(51,-13,551,560),1408=>array(92,-208,510,560),1409=>array(77,-215,525,560),1410=>array(122,0,480,547),1411=>array(51,-208,551,760),1412=>array(42,-208,560,560),1413=>array(67,-14,535,560),1414=>array(20,-208,582,760),1415=>array(35,-14,566,760),1417=>array(250,0,353,415),1418=>array(174,205,428,314),1542=>array(24,-19,573,892),1543=>array(24,-19,573,895),1545=>array(44,0,558,635),1546=>array(0,0,602,635),1548=>array(229,0,373,240),1557=>array(174,624,428,868),1563=>array(229,0,373,633),1567=>array(106,0,496,742),1569=>array(212,42,522,483),1570=>array(125,0,477,939),1571=>array(217,0,385,999),1572=>array(37,-244,525,588),1573=>array(217,-244,385,760),1574=>array(12,-131,602,544),1575=>array(256,0,346,760),1576=>array(34,-152,586,263),1577=>array(108,-28,494,513),1578=>array(34,-10,586,391),1579=>array(34,-10,586,513),1580=>array(43,-244,584,425),1581=>array(43,-244,584,425),1582=>array(43,-244,584,586),1583=>array(113,-19,488,427),1584=>array(113,-19,488,598),1585=>array(-25,-246,533,267),1586=>array(-25,-246,533,464),1587=>array(-107,-240,574,366),1588=>array(-107,-240,574,586),1589=>array(-117,-240,594,320),1590=>array(-117,-240,594,413),1591=>array(5,0,580,760),1592=>array(5,0,580,760),1593=>array(60,-244,589,521),1594=>array(60,-244,589,659),1600=>array(-10,0,612,90),1601=>array(-36,-45,568,600),1602=>array(15,-189,557,635),1603=>array(4,-27,578,760),1604=>array(33,-152,537,760),1605=>array(63,-240,541,369),1606=>array(26,-162,569,422),1607=>array(108,-28,494,358),1608=>array(37,-244,525,315),1609=>array(12,-131,602,389),1610=>array(12,-244,602,389),1611=>array(158,591,443,825),1612=>array(158,591,443,874),1613=>array(158,-239,443,-5),1614=>array(158,591,443,708),1615=>array(158,590,443,874),1616=>array(158,-137,443,-20),1617=>array(148,599,453,869),1618=>array(167,610,435,878),1619=>array(125,590,477,719),1620=>array(217,593,385,808),1621=>array(217,-244,385,-29),1626=>array(170,616,433,775),1632=>array(247,220,354,342),1633=>array(198,0,404,635),1634=>array(75,0,527,635),1635=>array(65,0,537,635),1636=>array(115,-10,486,641),1637=>array(99,-10,504,643),1638=>array(75,0,527,635),1639=>array(62,0,540,635),1640=>array(62,0,540,635),1641=>array(79,0,523,640),1642=>array(98,0,505,635),1643=>array(151,-110,451,318),1644=>array(229,499,373,729),1645=>array(71,101,531,537),1652=>array(217,649,385,864),1657=>array(34,-10,586,575),1658=>array(34,-10,586,513),1659=>array(34,-244,586,263),1662=>array(34,-244,586,263),1663=>array(34,-10,586,513),1664=>array(34,-244,586,263),1667=>array(43,-244,584,425),1668=>array(43,-244,584,425),1670=>array(43,-244,584,425),1671=>array(43,-244,584,425),1681=>array(-25,-246,602,582),1688=>array(-25,-246,549,555),1700=>array(-36,-45,568,700),1705=>array(5,-43,670,760),1711=>array(5,-43,672,902),1726=>array(0,-33,572,487),1740=>array(12,-131,602,389),1776=>array(247,220,354,342),1777=>array(198,0,404,635),1778=>array(75,0,527,635),1779=>array(65,0,537,635),1780=>array(85,0,517,643),1781=>array(84,-5,518,643),1782=>array(129,0,473,640),1783=>array(62,0,540,635),1784=>array(62,0,540,635),1785=>array(79,0,523,640),3713=>array(30,-10,549,560),3714=>array(53,-17,585,568),3716=>array(59,-10,539,568),3719=>array(120,-238,482,568),3720=>array(61,-0,542,575),3722=>array(47,-238,598,563),3725=>array(56,-8,545,573),3732=>array(60,-14,542,560),3733=>array(73,-15,554,579),3734=>array(13,-240,530,560),3735=>array(52,-14,551,560),3737=>array(37,-14,541,568),3738=>array(61,-8,541,561),3739=>array(61,-8,541,760),3740=>array(48,-8,620,638),3741=>array(48,-8,548,760),3742=>array(49,-8,553,561),3743=>array(49,-8,553,760),3745=>array(8,-14,547,547),3746=>array(56,-8,545,760),3747=>array(49,-8,553,568),3749=>array(47,-8,555,568),3751=>array(54,-13,548,560),3754=>array(48,-8,642,701),3755=>array(10,-12,592,575),3757=>array(58,-8,552,568),3758=>array(42,-8,606,605),3759=>array(23,-106,583,579),3760=>array(44,-13,549,563),3761=>array(-558,639,-53,880),3762=>array(77,0,516,560),3763=>array(-404,0,516,806),3764=>array(41,615,562,926),3765=>array(41,612,634,926),3766=>array(41,615,562,926),3767=>array(41,612,634,926),3768=>array(226,-350,441,-38),3769=>array(184,-306,450,-40),3771=>array(34,639,568,880),3772=>array(-8,-278,610,-39),3784=>array(257,618,345,792),3785=>array(42,609,560,891),3786=>array(46,598,664,869),3787=>array(161,609,441,890),3788=>array(-8,636,610,875),3789=>array(198,620,404,806),4304=>array(78,0,525,560),4305=>array(77,0,525,761),4306=>array(54,-208,547,510),4307=>array(27,-208,575,505),4308=>array(78,-208,525,510),4309=>array(77,-208,524,510),4310=>array(77,0,524,760),4311=>array(27,0,575,505),4312=>array(78,0,524,510),4313=>array(77,-207,525,501),4314=>array(78,-208,524,510),4315=>array(77,0,525,760),4316=>array(78,0,524,748),4317=>array(27,0,575,505),4318=>array(78,0,525,757),4319=>array(78,-207,525,524),4320=>array(27,0,575,760),4321=>array(78,0,525,743),4322=>array(22,-207,580,614),4323=>array(27,-207,536,506),4324=>array(27,-208,577,505),4325=>array(78,-208,524,743),4326=>array(27,-208,575,506),4327=>array(77,-207,524,496),4328=>array(27,0,525,760),4329=>array(77,0,525,760),4330=>array(42,-207,560,518),4331=>array(77,0,525,743),4332=>array(79,0,576,760),4333=>array(78,-207,525,743),4334=>array(78,0,525,743),4335=>array(78,-207,525,605),4336=>array(77,0,525,760),4337=>array(58,-207,525,760),4338=>array(78,-131,525,511),4339=>array(78,-208,525,510),4340=>array(78,-208,525,760),4341=>array(68,0,561,760),4342=>array(27,-207,575,511),4343=>array(52,-207,550,511),4344=>array(79,-207,525,520),4345=>array(54,-208,548,518),4346=>array(78,-66,455,511),4347=>array(142,24,460,486),4348=>array(198,370,404,760),7426=>array(20,-14,586,560),7432=>array(83,-11,520,560),7433=>array(87,-211,533,549),7444=>array(7,-14,591,560),7446=>array(67,273,535,560),7447=>array(66,-14,535,273),7453=>array(21,1,581,419),7454=>array(31,-1,571,417),7455=>array(21,0,581,501),7468=>array(123,326,479,734),7469=>array(120,326,482,734),7470=>array(152,326,450,734),7472=>array(152,326,450,734),7473=>array(162,326,440,734),7474=>array(162,326,440,734),7475=>array(146,318,455,742),7476=>array(153,326,448,734),7477=>array(174,326,429,734),7478=>array(171,318,431,734),7479=>array(134,326,469,734),7480=>array(159,326,443,734),7481=>array(138,326,464,734),7482=>array(154,326,448,734),7483=>array(154,326,448,734),7484=>array(147,318,455,742),7486=>array(156,326,446,734),7487=>array(133,326,469,734),7488=>array(126,326,476,734),7489=>array(157,318,445,734),7490=>array(111,326,491,734),7491=>array(159,318,443,640),7492=>array(159,318,443,640),7493=>array(160,318,442,640),7494=>array(123,318,479,640),7495=>array(160,318,442,751),7496=>array(160,318,442,751),7497=>array(149,318,453,640),7498=>array(149,318,453,640),7499=>array(164,320,438,640),7500=>array(164,320,438,640),7501=>array(160,206,442,640),7502=>array(161,208,441,633),7503=>array(152,326,450,751),7504=>array(143,326,459,640),7505=>array(169,209,433,640),7506=>array(153,318,449,640),7507=>array(168,318,434,640),7508=>array(153,479,449,640),7509=>array(153,318,449,479),7510=>array(160,209,442,640),7511=>array(163,326,439,719),7512=>array(169,318,433,632),7513=>array(125,327,478,561),7514=>array(143,326,459,640),7515=>array(142,326,460,632),7522=>array(160,0,441,425),7523=>array(200,0,402,314),7524=>array(169,-8,433,306),7525=>array(142,0,460,306),7543=>array(60,-215,509,560),7544=>array(153,326,448,734),7547=>array(76,0,526,547),7557=>array(78,-208,505,765),7579=>array(160,318,442,640),7580=>array(168,318,434,640),7581=>array(165,286,438,639),7582=>array(153,318,449,751),7583=>array(164,320,438,640),7584=>array(167,326,435,751),7585=>array(173,209,429,632),7586=>array(160,206,442,631),7587=>array(169,208,433,632),7588=>array(158,326,444,751),7589=>array(172,326,430,632),7590=>array(161,326,441,632),7591=>array(160,326,442,632),7592=>array(174,209,428,751),7593=>array(167,209,436,755),7594=>array(167,209,436,755),7595=>array(187,326,416,640),7596=>array(143,209,458,640),7597=>array(143,208,459,640),7598=>array(167,209,436,640),7599=>array(167,209,436,640),7600=>array(156,326,446,640),7601=>array(153,318,449,640),7602=>array(153,210,449,751),7603=>array(169,209,433,640),7604=>array(184,209,418,751),7605=>array(163,209,439,719),7606=>array(102,318,500,632),7607=>array(141,318,461,632),7609=>array(159,326,443,632),7610=>array(133,326,469,632),7611=>array(172,326,430,633),7612=>array(171,209,431,632),7613=>array(163,296,439,632),7614=>array(150,207,452,632),7615=>array(153,318,449,736),7680=>array(18,-245,584,729),7681=>array(65,-245,517,560),7682=>array(81,0,555,914),7683=>array(94,-14,543,760),7684=>array(81,-202,555,729),7685=>array(94,-202,543,760),7686=>array(81,-174,555,729),7687=>array(94,-174,543,760),7688=>array(68,-193,524,927),7689=>array(95,-193,518,800),7690=>array(67,0,540,914),7691=>array(60,-14,509,760),7692=>array(67,-202,540,729),7693=>array(60,-202,509,760),7694=>array(67,-174,540,729),7695=>array(60,-174,509,760),7696=>array(61,-193,540,729),7697=>array(60,-193,509,760),7698=>array(67,-237,540,729),7699=>array(60,-237,509,760),7704=>array(96,-237,538,729),7705=>array(60,-237,543,560),7706=>array(96,-237,538,729),7707=>array(60,-237,543,560),7708=>array(96,-193,538,928),7709=>array(60,-193,543,785),7710=>array(114,0,543,914),7711=>array(95,0,519,914),7712=>array(50,-14,539,898),7713=>array(60,-215,509,745),7714=>array(67,0,535,914),7715=>array(95,0,513,914),7716=>array(67,-202,535,729),7717=>array(95,-202,513,760),7718=>array(67,0,535,901),7719=>array(95,0,513,918),7720=>array(10,-193,535,729),7721=>array(27,-193,513,760),7722=>array(67,-238,535,729),7723=>array(95,-238,513,760),7724=>array(98,-237,503,729),7725=>array(87,-237,533,760),7728=>array(67,0,598,927),7729=>array(115,0,587,927),7730=>array(67,-202,598,729),7731=>array(115,-202,587,760),7732=>array(67,-174,598,729),7733=>array(115,-174,587,760),7734=>array(105,-202,556,729),7735=>array(78,-202,505,765),7736=>array(105,-202,556,898),7737=>array(78,-202,505,898),7738=>array(105,-174,556,729),7739=>array(78,-174,505,765),7740=>array(105,-237,556,729),7741=>array(78,-237,505,765),7742=>array(42,0,559,927),7743=>array(53,0,554,800),7744=>array(42,0,559,914),7745=>array(53,0,554,758),7746=>array(42,-202,559,729),7747=>array(53,-202,554,560),7748=>array(68,0,534,914),7749=>array(95,0,513,758),7750=>array(68,-202,534,729),7751=>array(95,-202,513,560),7752=>array(68,-174,534,729),7753=>array(95,-174,513,560),7754=>array(68,-237,534,729),7755=>array(95,-237,513,560),7756=>array(57,-14,545,997),7757=>array(67,-14,535,997),7764=>array(96,0,557,931),7765=>array(93,-208,541,800),7766=>array(96,0,557,914),7767=>array(93,-208,541,758),7768=>array(70,0,602,914),7769=>array(177,0,564,758),7770=>array(70,-202,602,729),7771=>array(177,-202,564,560),7772=>array(70,-202,602,898),7773=>array(155,-202,564,745),7774=>array(70,-174,602,729),7775=>array(155,-174,564,560),7776=>array(68,-14,536,914),7777=>array(104,-14,503,758),7778=>array(68,-202,536,742),7779=>array(104,-202,503,560),7784=>array(68,-202,536,914),7785=>array(104,-202,503,758),7786=>array(23,0,579,914),7787=>array(64,0,504,914),7788=>array(23,-202,579,729),7789=>array(64,-202,504,702),7790=>array(23,-174,579,729),7791=>array(64,-174,504,702),7792=>array(23,-237,579,729),7793=>array(64,-237,504,702),7794=>array(72,-201,530,729),7795=>array(95,-201,513,546),7796=>array(72,-237,530,729),7797=>array(95,-237,513,546),7798=>array(72,-237,530,729),7799=>array(95,-237,513,546),7800=>array(72,-14,530,997),7801=>array(95,-14,513,997),7804=>array(28,0,574,909),7805=>array(49,0,553,757),7806=>array(28,-202,574,729),7807=>array(49,-202,553,547),7808=>array(0,0,602,931),7809=>array(0,0,602,803),7810=>array(0,0,602,931),7811=>array(0,0,602,803),7812=>array(0,0,602,900),7813=>array(0,0,602,718),7814=>array(0,0,602,914),7815=>array(0,0,602,758),7816=>array(0,-202,602,729),7817=>array(0,-202,602,547),7818=>array(9,0,593,914),7819=>array(37,0,565,758),7820=>array(9,0,593,901),7821=>array(37,0,565,718),7822=>array(18,0,584,914),7823=>array(51,-208,563,758),7824=>array(76,0,571,932),7825=>array(99,0,508,803),7826=>array(76,-202,571,729),7827=>array(99,-202,508,548),7828=>array(76,-174,571,729),7829=>array(99,-174,508,548),7830=>array(95,-174,513,760),7831=>array(64,0,504,860),7832=>array(0,0,602,888),7833=>array(51,-208,563,888),7835=>array(95,0,519,914),7839=>array(67,-14,535,767),7840=>array(18,-202,584,729),7841=>array(65,-202,517,560),7852=>array(18,-202,584,932),7853=>array(65,-202,517,803),7856=>array(18,0,584,997),7857=>array(65,-14,517,954),7862=>array(18,-202,584,928),7863=>array(65,-202,517,760),7864=>array(96,-202,538,729),7865=>array(60,-202,543,560),7868=>array(96,0,538,921),7869=>array(60,-14,543,777),7878=>array(96,-202,538,932),7879=>array(60,-202,543,803),7882=>array(98,-202,503,729),7883=>array(87,-202,533,760),7884=>array(57,-202,545,742),7885=>array(67,-202,535,560),7896=>array(57,-202,545,932),7897=>array(67,-202,535,803),7898=>array(3,-14,582,927),7899=>array(16,-14,587,800),7900=>array(3,-14,582,927),7901=>array(16,-14,587,800),7904=>array(3,-14,582,921),7905=>array(16,-14,587,777),7906=>array(3,-202,582,760),7907=>array(16,-202,587,560),7908=>array(72,-202,530,729),7909=>array(95,-202,513,546),7912=>array(4,-14,598,927),7913=>array(19,-14,583,800),7914=>array(4,-14,598,927),7915=>array(19,-14,583,800),7918=>array(4,-14,598,921),7919=>array(19,-14,583,777),7920=>array(4,-202,598,762),7921=>array(19,-202,583,555),7922=>array(18,0,584,931),7923=>array(51,-208,563,803),7924=>array(18,-202,584,729),7925=>array(51,-208,563,547),7928=>array(18,0,584,921),7929=>array(51,-208,563,777),7936=>array(34,-12,573,806),7937=>array(34,-12,573,806),7938=>array(34,-12,573,806),7939=>array(34,-12,573,806),7940=>array(34,-12,573,806),7941=>array(34,-12,573,806),7942=>array(34,-12,573,977),7943=>array(34,-12,573,977),7944=>array(18,0,584,806),7945=>array(18,0,584,806),7946=>array(-198,0,584,806),7947=>array(-198,0,584,806),7948=>array(-112,0,584,806),7949=>array(-122,0,584,806),7950=>array(-31,0,584,977),7951=>array(-55,0,584,977),7952=>array(83,-11,520,806),7953=>array(83,-11,520,806),7954=>array(83,-11,520,806),7955=>array(83,-11,520,806),7956=>array(83,-11,520,806),7957=>array(83,-11,520,806),7960=>array(-63,0,538,806),7961=>array(-63,0,538,806),7962=>array(-308,0,538,806),7963=>array(-308,0,538,806),7964=>array(-247,0,538,806),7965=>array(-256,0,538,806),7968=>array(95,-208,513,806),7969=>array(95,-208,513,806),7970=>array(95,-208,513,806),7971=>array(95,-208,513,806),7972=>array(95,-208,515,806),7973=>array(95,-208,515,806),7974=>array(95,-208,513,977),7975=>array(95,-208,513,977),7976=>array(-88,0,535,806),7977=>array(-88,0,535,806),7978=>array(-344,0,535,806),7979=>array(-344,0,535,806),7980=>array(-295,0,535,806),7981=>array(-305,0,535,806),7982=>array(-202,0,535,977),7983=>array(-202,0,535,977),7984=>array(151,0,476,806),7985=>array(151,0,476,806),7986=>array(120,0,492,806),7987=>array(120,0,492,806),7988=>array(144,0,515,806),7989=>array(134,0,515,806),7990=>array(140,0,476,977),7991=>array(140,0,476,977),7992=>array(-63,0,503,806),7993=>array(-63,0,503,806),7994=>array(-295,0,503,806),7995=>array(-295,0,503,806),7996=>array(-247,0,503,806),7997=>array(-256,0,503,806),7998=>array(-165,0,503,977),7999=>array(-165,0,503,977),8000=>array(67,-14,535,806),8001=>array(67,-14,535,806),8002=>array(67,-14,535,806),8003=>array(67,-14,535,806),8004=>array(67,-14,535,806),8005=>array(67,-14,535,806),8008=>array(-27,-14,545,806),8009=>array(-63,-14,545,806),8010=>array(-308,-14,545,806),8011=>array(-308,-14,545,806),8012=>array(-173,-14,545,806),8013=>array(-183,-14,545,806),8016=>array(25,0,551,806),8017=>array(25,0,551,806),8018=>array(25,0,551,806),8019=>array(25,0,551,806),8020=>array(25,0,551,806),8021=>array(25,0,551,806),8022=>array(25,0,551,977),8023=>array(25,0,551,977),8025=>array(-137,0,584,806),8027=>array(-344,0,584,806),8029=>array(-342,0,584,806),8031=>array(-238,0,584,977),8032=>array(34,-14,568,806),8033=>array(34,-14,568,806),8034=>array(34,-14,568,806),8035=>array(34,-14,568,806),8036=>array(34,-14,568,806),8037=>array(34,-14,568,806),8038=>array(34,-14,568,977),8039=>array(34,-14,568,977),8040=>array(-27,0,566,806),8041=>array(-76,0,566,806),8042=>array(-308,0,566,806),8043=>array(-308,0,566,806),8044=>array(-161,0,566,806),8045=>array(-171,0,566,806),8046=>array(-128,0,566,977),8047=>array(-165,0,566,977),8048=>array(34,-12,573,800),8049=>array(34,-12,573,800),8050=>array(83,-11,520,800),8051=>array(83,-11,520,800),8052=>array(95,-208,513,800),8053=>array(95,-208,513,800),8054=>array(136,0,476,800),8055=>array(151,0,476,800),8056=>array(67,-14,535,800),8057=>array(67,-14,535,800),8058=>array(25,0,551,800),8059=>array(25,0,551,800),8060=>array(34,-14,568,800),8061=>array(34,-14,568,800),8064=>array(34,-208,573,806),8065=>array(34,-208,573,806),8066=>array(34,-208,573,806),8067=>array(34,-208,573,806),8068=>array(34,-208,573,806),8069=>array(34,-208,573,806),8070=>array(34,-208,573,977),8071=>array(34,-208,573,977),8072=>array(18,-208,584,806),8073=>array(18,-208,584,806),8074=>array(-198,-208,584,806),8075=>array(-198,-208,584,806),8076=>array(-112,-208,584,806),8077=>array(-122,-208,584,806),8078=>array(-31,-208,584,977),8079=>array(-55,-208,584,977),8080=>array(95,-208,513,806),8081=>array(95,-208,513,806),8082=>array(95,-208,513,806),8083=>array(95,-208,513,806),8084=>array(95,-208,515,806),8085=>array(95,-208,515,806),8086=>array(95,-208,513,977),8087=>array(95,-208,513,977),8088=>array(-88,-208,535,806),8089=>array(-88,-208,535,806),8090=>array(-344,-208,535,806),8091=>array(-344,-208,535,806),8092=>array(-295,-208,535,806),8093=>array(-305,-208,535,806),8094=>array(-202,-208,535,977),8095=>array(-202,-208,535,977),8096=>array(34,-208,568,806),8097=>array(34,-208,568,806),8098=>array(34,-208,568,806),8099=>array(34,-208,568,806),8100=>array(34,-208,568,806),8101=>array(34,-208,568,806),8102=>array(34,-208,568,977),8103=>array(34,-208,568,977),8104=>array(-27,-208,566,806),8105=>array(-76,-208,566,806),8106=>array(-308,-208,566,806),8107=>array(-308,-208,566,806),8108=>array(-161,-208,566,806),8109=>array(-171,-208,566,806),8110=>array(-128,-208,566,977),8111=>array(-165,-208,566,977),8112=>array(34,-12,573,785),8113=>array(34,-12,573,745),8114=>array(34,-208,573,800),8115=>array(34,-208,573,559),8116=>array(34,-208,573,800),8118=>array(34,-12,573,777),8119=>array(34,-208,573,777),8120=>array(18,0,584,928),8121=>array(18,0,584,898),8122=>array(-59,0,584,800),8123=>array(12,0,584,800),8124=>array(18,-208,584,729),8125=>array(242,595,360,806),8126=>array(265,-208,372,-45),8127=>array(242,595,360,806),8128=>array(140,639,462,777),8129=>array(140,659,462,943),8130=>array(95,-208,513,800),8131=>array(95,-208,513,560),8132=>array(95,-208,513,800),8134=>array(95,-208,513,777),8135=>array(95,-208,513,777),8136=>array(-181,0,538,800),8137=>array(-110,0,538,800),8138=>array(-206,0,535,800),8139=>array(-134,0,535,800),8140=>array(67,-208,535,729),8141=>array(120,595,492,806),8142=>array(144,595,515,806),8143=>array(140,595,462,977),8144=>array(148,0,476,785),8145=>array(151,0,476,745),8146=>array(136,0,476,980),8147=>array(151,0,476,980),8150=>array(140,0,476,777),8151=>array(140,0,476,943),8152=>array(98,0,503,928),8153=>array(98,0,503,898),8154=>array(-157,0,503,800),8155=>array(-110,0,503,800),8157=>array(120,595,492,806),8158=>array(134,595,515,806),8159=>array(140,595,462,977),8160=>array(25,0,551,785),8161=>array(25,0,551,745),8162=>array(25,0,551,980),8163=>array(25,0,551,980),8164=>array(93,-208,541,806),8165=>array(93,-208,541,806),8166=>array(25,0,551,777),8167=>array(25,0,551,943),8168=>array(18,0,584,928),8169=>array(18,0,584,898),8170=>array(-206,0,584,800),8171=>array(-195,0,584,800),8172=>array(-63,0,557,806),8173=>array(136,659,446,980),8174=>array(156,659,466,980),8175=>array(136,616,370,800),8178=>array(34,-208,568,800),8179=>array(34,-208,568,547),8180=>array(34,-208,568,800),8182=>array(34,-14,568,777),8183=>array(34,-208,568,777),8184=>array(-169,-14,545,800),8185=>array(-37,-14,545,800),8186=>array(-169,0,566,800),8187=>array(-24,0,566,800),8188=>array(36,-208,566,713),8189=>array(232,616,466,800),8190=>array(242,595,360,806),8208=>array(174,234,428,314),8209=>array(174,234,428,314),8210=>array(0,240,602,309),8211=>array(0,240,602,309),8212=>array(0,240,602,309),8213=>array(0,240,602,309),8214=>array(139,-236,462,764),8215=>array(0,-236,602,-80),8216=>array(226,472,397,760),8217=>array(226,472,397,760),8218=>array(197,-140,368,148),8219=>array(226,472,397,760),8220=>array(103,472,499,760),8221=>array(103,472,498,760),8222=>array(103,-140,498,148),8223=>array(103,472,498,760),8224=>array(79,-96,523,729),8225=>array(79,-96,523,729),8226=>array(156,227,446,516),8227=>array(156,188,485,555),8230=>array(39,0,562,149),8240=>array(0,0,602,699),8241=>array(0,0,602,699),8242=>array(209,547,393,729),8243=>array(136,547,466,729),8244=>array(63,547,539,729),8245=>array(209,547,393,729),8246=>array(136,547,466,729),8247=>array(63,547,539,729),8249=>array(169,69,398,517),8250=>array(205,69,434,517),8252=>array(102,0,501,729),8253=>array(119,0,508,742),8254=>array(0,716,602,755),8261=>array(226,-132,433,760),8262=>array(169,-132,376,760),8263=>array(16,0,586,742),8264=>array(16,0,501,742),8265=>array(102,0,586,742),8267=>array(99,-96,550,729),8304=>array(155,319,448,742),8305=>array(160,326,441,751),8308=>array(131,326,444,734),8309=>array(156,319,436,734),8310=>array(161,319,454,742),8311=>array(155,326,440,734),8312=>array(154,318,448,741),8313=>array(148,319,441,742),8314=>array(139,357,464,646),8315=>array(139,479,464,525),8316=>array(139,422,464,581),8317=>array(230,252,372,751),8318=>array(230,252,372,751),8319=>array(157,326,445,640),8320=>array(155,-7,448,416),8321=>array(168,0,447,408),8322=>array(157,0,436,416),8323=>array(159,-7,451,416),8324=>array(131,0,444,408),8325=>array(156,-7,436,408),8326=>array(161,-7,454,416),8327=>array(155,0,440,408),8328=>array(154,-8,448,415),8329=>array(148,-7,441,416),8330=>array(139,31,464,320),8331=>array(139,152,464,199),8332=>array(139,96,464,254),8333=>array(230,-74,372,425),8334=>array(230,-74,372,425),8336=>array(159,-8,443,313),8337=>array(149,-8,453,313),8338=>array(153,-8,449,313),8339=>array(134,0,468,306),8340=>array(149,-8,453,313),8341=>array(157,0,445,426),8342=>array(152,0,450,425),8343=>array(167,0,436,429),8344=>array(143,0,459,313),8345=>array(157,0,445,314),8346=>array(160,-117,442,313),8347=>array(169,0,433,322),8348=>array(163,0,439,393),8352=>array(5,-11,600,737),8353=>array(60,-44,548,778),8354=>array(46,-14,543,742),8355=>array(0,0,533,729),8356=>array(68,0,553,742),8357=>array(53,-93,554,640),8358=>array(0,0,602,729),8359=>array(5,-14,600,729),8360=>array(5,-14,598,729),8361=>array(0,0,602,729),8362=>array(21,-14,582,729),8363=>array(60,-174,602,760),8364=>array(18,-14,518,742),8365=>array(21,0,582,729),8366=>array(23,0,579,729),8367=>array(15,-222,597,742),8368=>array(22,-14,569,742),8369=>array(52,0,602,729),8370=>array(26,-81,567,809),8371=>array(19,0,583,729),8372=>array(0,-14,602,742),8373=>array(63,-147,539,760),8376=>array(23,0,579,729),8377=>array(51,0,555,729),8450=>array(68,-14,524,742),8453=>array(3,-24,602,752),8461=>array(28,0,577,729),8462=>array(41,0,535,760),8463=>array(41,0,535,760),8469=>array(36,0,565,729),8470=>array(5,0,597,729),8471=>array(0,61,602,663),8473=>array(32,0,575,729),8474=>array(8,-129,592,742),8477=>array(18,0,592,729),8482=>array(0,447,550,729),8484=>array(23,0,575,729),8486=>array(36,0,566,713),8490=>array(67,0,598,729),8491=>array(18,0,584,928),8494=>array(5,-12,597,647),8520=>array(13,0,469,760),8531=>array(13,-139,549,810),8532=>array(13,-139,549,818),8533=>array(13,-139,544,810),8534=>array(13,-139,544,818),8535=>array(13,-139,544,818),8536=>array(5,-139,544,810),8537=>array(13,-139,552,810),8538=>array(13,-139,552,810),8539=>array(13,-140,546,810),8540=>array(13,-140,546,818),8541=>array(13,-140,546,810),8542=>array(13,-140,546,810),8543=>array(13,246,544,810),8592=>array(32,112,570,436),8593=>array(139,0,463,538),8594=>array(32,112,570,436),8595=>array(139,0,463,538),8596=>array(32,112,570,436),8597=>array(139,0,463,538),8598=>array(90,0,512,422),8599=>array(90,0,512,422),8600=>array(90,0,512,422),8601=>array(90,0,512,422),8602=>array(32,112,570,436),8603=>array(32,112,570,436),8604=>array(43,193,559,422),8605=>array(43,193,559,422),8606=>array(32,112,570,436),8607=>array(139,0,463,538),8608=>array(32,112,570,436),8609=>array(139,0,463,538),8610=>array(32,112,570,436),8611=>array(32,112,570,436),8612=>array(32,112,570,436),8613=>array(139,0,463,538),8614=>array(32,112,570,436),8615=>array(139,0,463,538),8616=>array(139,0,463,538),8617=>array(32,112,570,517),8618=>array(32,112,570,517),8619=>array(32,112,570,517),8620=>array(32,112,570,517),8621=>array(32,112,570,436),8622=>array(32,102,570,446),8623=>array(55,0,547,698),8624=>array(89,0,513,674),8625=>array(89,0,513,674),8626=>array(89,0,513,674),8627=>array(89,0,513,674),8628=>array(91,0,511,540),8629=>array(31,0,571,420),8630=>array(40,168,563,487),8631=>array(40,168,563,487),8632=>array(24,0,578,513),8633=>array(32,0,570,604),8634=>array(43,0,559,497),8635=>array(43,0,559,497),8636=>array(32,234,570,436),8637=>array(32,112,570,314),8638=>array(261,0,463,538),8639=>array(139,0,341,538),8640=>array(32,234,570,436),8641=>array(32,112,570,314),8642=>array(261,0,463,538),8643=>array(160,0,362,538),8644=>array(32,0,570,561),8645=>array(21,0,582,538),8646=>array(32,0,570,561),8647=>array(32,0,570,561),8648=>array(21,0,582,538),8649=>array(32,0,570,561),8650=>array(21,0,582,538),8651=>array(32,32,570,516),8652=>array(32,32,570,516),8653=>array(32,112,570,436),8654=>array(32,112,570,460),8655=>array(32,112,570,436),8656=>array(32,112,570,436),8657=>array(139,0,463,538),8658=>array(32,112,570,436),8659=>array(139,0,463,538),8660=>array(32,112,570,436),8661=>array(139,0,463,538),8662=>array(76,-28,526,422),8663=>array(76,-28,526,422),8664=>array(76,0,526,451),8665=>array(76,0,526,451),8666=>array(32,112,570,436),8667=>array(32,112,570,436),8668=>array(32,112,570,436),8669=>array(32,112,570,436),8670=>array(139,0,463,538),8671=>array(139,0,463,538),8672=>array(32,112,570,436),8673=>array(139,0,463,538),8674=>array(32,112,570,436),8675=>array(139,0,463,538),8676=>array(32,112,570,436),8677=>array(32,112,570,436),8678=>array(12,92,570,456),8679=>array(119,0,483,558),8680=>array(32,92,590,456),8681=>array(119,0,483,558),8682=>array(119,0,483,558),8683=>array(119,0,483,558),8684=>array(119,0,483,558),8685=>array(119,0,483,558),8686=>array(119,0,483,558),8687=>array(119,0,483,558),8688=>array(32,92,590,456),8689=>array(34,0,568,534),8690=>array(34,0,568,534),8691=>array(119,0,483,558),8692=>array(32,112,570,436),8693=>array(21,0,582,538),8694=>array(32,-125,570,672),8695=>array(32,112,570,436),8696=>array(32,112,570,436),8697=>array(32,112,570,436),8698=>array(32,112,570,436),8699=>array(32,112,570,436),8700=>array(32,112,570,436),8701=>array(12,92,570,456),8702=>array(32,92,590,456),8703=>array(12,92,590,456),8704=>array(18,0,584,729),8705=>array(57,-14,545,742),8706=>array(89,-14,513,662),8707=>array(87,0,514,729),8708=>array(87,-46,514,776),8709=>array(36,48,567,580),8710=>array(-3,0,606,695),8711=>array(-3,0,606,695),8712=>array(63,0,539,715),8713=>array(63,-86,539,801),8714=>array(63,81,539,545),8715=>array(63,0,539,715),8716=>array(63,-86,539,801),8717=>array(63,81,539,545),8719=>array(74,-213,528,741),8721=>array(70,-213,530,741),8722=>array(43,272,559,355),8723=>array(43,0,559,572),8725=>array(50,-93,527,729),8727=>array(81,85,521,542),8728=>array(146,160,456,470),8729=>array(156,200,446,489),8730=>array(29,-19,578,828),8731=>array(29,-19,578,933),8732=>array(29,-19,578,924),8733=>array(91,122,511,492),8734=>array(20,122,582,492),8735=>array(61,140,541,620),8736=>array(61,140,541,620),8743=>array(80,0,521,579),8744=>array(80,0,521,579),8745=>array(80,0,521,579),8746=>array(80,0,521,579),8747=>array(63,-183,539,871),8748=>array(31,-189,571,877),8749=>array(26,-176,577,864),8756=>array(91,65,512,564),8757=>array(92,65,510,564),8758=>array(238,65,363,564),8759=>array(91,65,512,564),8760=>array(43,272,559,564),8761=>array(36,65,566,564),8762=>array(42,65,561,564),8763=>array(43,65,559,564),8764=>array(43,243,559,384),8765=>array(43,243,559,384),8769=>array(43,85,559,535),8770=>array(43,149,559,454),8771=>array(43,172,559,470),8772=>array(43,48,560,604),8773=>array(43,94,559,570),8774=>array(43,24,559,570),8775=>array(43,0,559,647),8776=>array(43,149,559,470),8777=>array(43,23,559,595),8778=>array(43,94,559,572),8779=>array(43,73,559,572),8780=>array(43,94,559,570),8781=>array(42,108,559,519),8782=>array(43,33,560,593),8783=>array(43,172,560,593),8784=>array(43,172,559,637),8785=>array(43,-11,559,637),8786=>array(43,-10,559,637),8787=>array(42,-10,560,637),8788=>array(36,147,566,479),8789=>array(36,147,566,479),8790=>array(43,172,559,454),8791=>array(43,172,559,760),8792=>array(43,172,559,662),8793=>array(43,172,559,783),8794=>array(43,172,559,783),8795=>array(43,172,559,831),8796=>array(43,172,559,836),8797=>array(34,172,568,764),8798=>array(43,172,559,760),8799=>array(43,172,559,856),8800=>array(43,18,559,608),8801=>array(43,94,559,532),8802=>array(43,5,559,622),8803=>array(43,0,559,616),8804=>array(43,0,559,531),8805=>array(43,0,559,531),8806=>array(42,-84,558,578),8807=>array(42,-84,558,578),8808=>array(42,-162,558,578),8809=>array(42,-162,558,578),8813=>array(42,0,559,627),8814=>array(43,-14,559,641),8815=>array(43,-14,559,641),8816=>array(43,-119,559,629),8817=>array(43,-119,559,629),8818=>array(42,-21,558,531),8819=>array(42,-21,558,531),8820=>array(42,-119,558,629),8821=>array(42,-119,558,629),8822=>array(42,-89,558,603),8823=>array(42,-89,558,603),8824=>array(42,-195,558,711),8825=>array(42,-195,558,711),8826=>array(42,-22,558,648),8827=>array(43,-22,559,648),8828=>array(42,-123,558,711),8829=>array(42,-123,558,711),8830=>array(42,-56,558,711),8831=>array(42,-56,558,711),8832=>array(42,-81,558,707),8833=>array(42,-81,558,707),8834=>array(43,80,559,546),8835=>array(43,80,559,546),8836=>array(43,-29,559,655),8837=>array(43,-29,559,655),8838=>array(43,0,559,625),8839=>array(43,0,559,625),8840=>array(43,-104,559,729),8841=>array(43,-104,559,729),8842=>array(43,-102,559,625),8843=>array(43,-102,559,625),8847=>array(43,58,559,568),8848=>array(43,58,559,568),8849=>array(43,7,559,619),8850=>array(43,7,559,619),8853=>array(39,51,563,577),8854=>array(39,51,563,577),8855=>array(39,51,563,577),8856=>array(39,51,563,577),8857=>array(39,51,563,577),8858=>array(39,51,563,577),8859=>array(39,51,563,577),8860=>array(39,51,563,577),8861=>array(39,51,563,577),8862=>array(39,51,564,576),8863=>array(39,51,564,576),8864=>array(39,51,564,576),8865=>array(39,51,564,576),8866=>array(43,0,559,627),8867=>array(43,0,559,627),8868=>array(43,0,559,627),8869=>array(43,0,559,627),8901=>array(239,273,362,422),8902=>array(129,201,473,527),8909=>array(43,172,559,470),8922=>array(43,-218,559,760),8923=>array(43,-218,559,760),8924=>array(42,0,558,531),8925=>array(43,0,559,531),8926=>array(42,-123,558,711),8927=>array(42,-123,558,711),8928=>array(42,-182,558,770),8929=>array(42,-182,558,770),8930=>array(43,-81,559,707),8931=>array(43,-81,559,707),8932=>array(43,-95,559,619),8933=>array(43,-95,559,619),8934=>array(42,-134,558,531),8935=>array(42,-134,558,531),8936=>array(42,-213,558,711),8937=>array(42,-213,558,711),8943=>array(39,239,562,388),8960=>array(36,48,567,580),8961=>array(56,162,540,443),8962=>array(71,0,531,596),8963=>array(71,406,530,746),8964=>array(71,-132,530,209),8965=>array(71,0,530,444),8966=>array(71,0,530,566),8968=>array(226,-132,433,760),8969=>array(169,-132,376,760),8970=>array(226,-132,433,760),8971=>array(169,-132,376,760),8972=>array(268,73,585,408),8973=>array(6,73,324,408),8974=>array(268,352,585,687),8975=>array(6,352,324,687),8976=>array(43,181,559,421),8977=>array(47,126,555,634),8978=>array(3,211,599,512),8979=>array(3,211,599,512),8980=>array(90,168,512,512),8981=>array(81,112,510,539),8984=>array(35,114,567,646),8985=>array(43,181,559,421),8988=>array(146,352,463,687),8989=>array(139,352,456,687),8990=>array(146,-56,463,279),8991=>array(139,-56,456,279),8992=>array(250,-250,537,928),8993=>array(61,-237,347,942),8997=>array(51,114,551,598),8998=>array(3,145,599,536),8999=>array(61,145,541,536),9000=>array(24,212,578,517),9003=>array(3,145,599,536),9013=>array(35,-22,566,286),9015=>array(125,-100,477,829),9016=>array(3,-100,599,829),9017=>array(3,-100,599,829),9018=>array(3,-100,599,829),9019=>array(3,-100,599,829),9020=>array(3,-100,599,829),9021=>array(3,-171,599,900),9022=>array(3,57,599,658),9025=>array(3,-100,599,829),9026=>array(3,-100,599,829),9027=>array(3,-100,599,829),9028=>array(3,-100,599,829),9031=>array(3,-100,599,829),9032=>array(3,-100,599,829),9033=>array(3,-29,599,729),9035=>array(18,-171,584,900),9036=>array(3,-100,599,829),9037=>array(3,-100,599,829),9040=>array(3,-100,599,829),9042=>array(18,-171,584,900),9043=>array(3,-100,599,829),9044=>array(3,-100,599,829),9047=>array(3,-100,599,829),9048=>array(125,-100,477,729),9049=>array(3,-100,599,729),9050=>array(3,-100,599,656),9051=>array(125,-100,477,489),9052=>array(3,-100,599,658),9054=>array(3,-100,599,829),9055=>array(-10,44,612,671),9056=>array(3,-100,599,829),9059=>array(129,201,473,636),9060=>array(156,229,446,660),9061=>array(3,57,599,831),9064=>array(43,240,559,660),9065=>array(43,69,559,660),9067=>array(18,0,584,729),9068=>array(43,-14,559,742),9069=>array(43,-171,559,900),9070=>array(125,-140,477,519),9071=>array(3,-100,599,829),9072=>array(3,-100,599,829),9075=>array(151,0,476,547),9076=>array(93,-208,541,560),9077=>array(34,-14,568,547),9078=>array(3,-100,599,559),9079=>array(76,-100,526,560),9080=>array(125,-100,477,547),9081=>array(3,-100,599,547),9082=>array(34,-12,573,559),9085=>array(13,-228,589,88),9088=>array(35,-22,566,528),9089=>array(3,106,599,528),9090=>array(3,106,599,528),9091=>array(3,177,599,567),9096=>array(40,27,562,601),9097=>array(34,46,567,579),9098=>array(34,46,567,579),9099=>array(34,46,567,579),9109=>array(3,-100,599,829),9115=>array(137,-258,465,940),9116=>array(137,-252,232,942),9117=>array(137,-240,465,942),9118=>array(137,-258,465,940),9119=>array(370,-252,465,942),9120=>array(137,-240,465,942),9121=>array(137,-252,465,928),9122=>array(137,-252,232,942),9123=>array(137,-240,465,942),9124=>array(137,-252,465,928),9125=>array(370,-252,465,935),9126=>array(137,-240,465,935),9127=>array(256,-261,594,928),9128=>array(8,-252,347,940),9129=>array(256,-240,594,940),9130=>array(256,-256,347,943),9131=>array(8,-261,346,928),9132=>array(255,-252,594,940),9133=>array(8,-240,346,940),9134=>array(250,-250,347,942),9166=>array(12,92,570,558),9167=>array(3,0,599,596),9251=>array(73,-228,528,88),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,612,770),9601=>array(-10,-250,612,-123),9602=>array(-10,-250,612,5),9603=>array(-10,-250,612,132),9604=>array(-10,-250,612,260),9605=>array(-10,-250,612,387),9606=>array(-10,-250,612,515),9607=>array(-10,-250,612,642),9608=>array(-10,-250,612,770),9609=>array(-10,-250,534,770),9610=>array(-10,-250,457,770),9611=>array(-10,-250,379,770),9612=>array(-10,-250,301,770),9613=>array(-10,-250,223,770),9614=>array(-10,-250,146,770),9615=>array(-10,-250,68,770),9616=>array(301,-250,612,770),9617=>array(-10,-250,534,770),9618=>array(-10,-250,612,770),9619=>array(-10,-250,612,770),9620=>array(-10,642,612,770),9621=>array(534,-250,611,770),9622=>array(-10,-250,301,260),9623=>array(301,-250,612,260),9624=>array(-10,260,301,770),9625=>array(-10,-250,612,770),9626=>array(-10,-250,612,770),9627=>array(-10,-250,612,770),9628=>array(-10,-250,612,770),9629=>array(301,260,612,770),9630=>array(-10,-250,612,770),9631=>array(-10,-250,612,770),9632=>array(3,-39,599,558),9633=>array(3,-39,599,558),9634=>array(3,-39,599,558),9635=>array(3,-39,599,558),9636=>array(3,-39,599,558),9637=>array(3,-39,599,558),9638=>array(3,-39,599,558),9639=>array(3,-39,599,558),9640=>array(3,-39,599,558),9641=>array(3,-39,599,558),9642=>array(107,66,495,454),9643=>array(107,66,495,454),9644=>array(3,117,599,402),9645=>array(3,117,599,402),9646=>array(158,-39,444,558),9647=>array(158,-39,444,558),9648=>array(3,117,599,402),9649=>array(3,117,599,402),9650=>array(3,-39,599,558),9651=>array(3,-39,599,558),9652=>array(107,66,495,454),9653=>array(107,66,495,454),9654=>array(3,-39,599,558),9655=>array(3,-39,599,558),9656=>array(107,66,495,454),9657=>array(107,66,495,454),9658=>array(3,66,599,454),9659=>array(3,66,599,454),9660=>array(3,-39,599,558),9661=>array(3,-39,599,558),9662=>array(107,66,495,454),9663=>array(107,66,495,454),9664=>array(3,-39,599,558),9665=>array(3,-39,599,558),9666=>array(107,66,495,454),9667=>array(107,66,495,454),9668=>array(3,66,599,454),9669=>array(3,66,599,454),9670=>array(3,-39,599,558),9671=>array(3,-39,599,558),9672=>array(3,-39,599,558),9673=>array(3,-41,599,561),9674=>array(57,-233,545,807),9675=>array(3,-41,599,561),9676=>array(3,-41,599,561),9677=>array(3,-41,599,561),9678=>array(3,-41,599,561),9679=>array(3,-41,599,561),9680=>array(3,-41,599,561),9681=>array(3,-41,599,561),9682=>array(3,-41,599,561),9683=>array(3,-41,599,561),9684=>array(3,-41,599,561),9685=>array(3,-41,599,561),9686=>array(152,-41,450,561),9687=>array(152,-41,450,561),9688=>array(-10,-10,612,770),9689=>array(-10,-250,612,770),9690=>array(-10,260,612,770),9691=>array(-10,-250,612,260),9692=>array(152,260,450,561),9693=>array(152,260,450,561),9694=>array(152,-41,450,260),9695=>array(152,-41,450,260),9696=>array(3,260,599,561),9697=>array(3,-41,599,260),9698=>array(3,-39,599,558),9699=>array(3,-39,599,558),9700=>array(3,-39,599,558),9701=>array(3,-39,599,558),9702=>array(156,227,446,516),9703=>array(3,-39,599,558),9704=>array(3,-39,599,558),9705=>array(3,-39,599,558),9706=>array(3,-39,599,558),9707=>array(3,-39,599,558),9708=>array(3,-39,599,558),9709=>array(3,-39,599,558),9710=>array(3,-39,599,558),9711=>array(-10,-54,612,573),9712=>array(3,-39,599,558),9713=>array(3,-39,599,558),9714=>array(3,-39,599,558),9715=>array(3,-39,599,558),9716=>array(3,-41,599,561),9717=>array(3,-41,599,561),9718=>array(3,-41,599,561),9719=>array(3,-41,599,561),9720=>array(3,-39,599,558),9721=>array(3,-39,599,558),9722=>array(3,-39,599,558),9723=>array(47,6,554,513),9724=>array(47,6,554,513),9725=>array(85,44,516,475),9726=>array(85,44,516,475),9727=>array(3,-39,599,558),9728=>array(17,80,585,649),9729=>array(24,4,578,227),9730=>array(17,3,585,522),9731=>array(43,-3,559,708),9732=>array(14,23,588,681),9733=>array(28,7,574,525),9734=>array(28,10,574,528),9735=>array(98,2,504,729),9736=>array(29,0,573,731),9737=>array(21,3,581,563),9738=>array(7,2,595,639),9739=>array(9,-1,593,677),9740=>array(26,0,576,724),9741=>array(22,1,580,724),9742=>array(10,-0,592,598),9743=>array(4,5,598,598),9744=>array(54,2,548,504),9745=>array(48,-1,554,512),9746=>array(65,2,537,481),9747=>array(98,43,504,658),9748=>array(14,-2,588,651),9749=>array(38,3,564,688),9750=>array(27,3,575,734),9751=>array(23,1,579,728),9752=>array(19,3,583,596),9753=>array(23,203,579,557),9754=>array(23,132,579,560),9755=>array(23,132,579,560),9756=>array(7,138,595,516),9757=>array(68,0,534,724),9758=>array(7,138,595,516),9759=>array(68,-3,534,720),9760=>array(6,-1,596,593),9761=>array(4,-2,598,728),9762=>array(4,1,598,595),9763=>array(17,3,585,523),9764=>array(38,-0,564,671),9765=>array(47,-0,555,730),9766=>array(59,-1,543,731),9767=>array(47,3,555,751),9768=>array(100,-2,502,725),9769=>array(27,0,575,549),9770=>array(15,1,587,644),9771=>array(4,0,598,594),9772=>array(50,-3,552,669),9773=>array(7,2,595,642),9774=>array(13,2,589,578),9775=>array(7,2,595,591),9784=>array(13,82,589,642),9785=>array(16,80,586,650),9786=>array(16,80,586,650),9787=>array(16,80,586,650),9788=>array(16,80,586,650),9789=>array(76,2,526,722),9790=>array(73,3,529,734),9791=>array(92,-78,510,708),9792=>array(71,-49,531,655),9793=>array(71,-49,531,655),9794=>array(10,75,592,648),9795=>array(35,21,567,710),9796=>array(85,21,517,710),9797=>array(33,65,569,666),9798=>array(37,65,565,666),9799=>array(105,21,497,710),9800=>array(12,0,590,641),9801=>array(26,-4,576,596),9802=>array(13,6,589,601),9803=>array(25,24,577,632),9804=>array(30,-1,572,641),9805=>array(23,-136,579,562),9806=>array(42,88,561,614),9807=>array(24,-75,578,597),9808=>array(27,3,575,597),9809=>array(10,1,592,601),9810=>array(43,156,559,460),9811=>array(46,2,556,642),9812=>array(33,2,569,563),9813=>array(42,0,560,560),9814=>array(55,0,547,639),9815=>array(108,-4,494,596),9816=>array(70,3,532,597),9817=>array(76,3,526,551),9818=>array(52,-2,550,518),9819=>array(26,2,576,596),9820=>array(72,2,530,596),9821=>array(110,3,492,597),9822=>array(50,1,552,641),9823=>array(58,2,544,597),9824=>array(63,65,540,664),9825=>array(7,65,595,663),9826=>array(71,65,531,664),9827=>array(24,65,578,664),9828=>array(62,65,540,664),9829=>array(5,65,597,664),9830=>array(71,65,531,664),9831=>array(24,65,578,667),9832=>array(22,3,580,597),9833=>array(181,16,421,708),9834=>array(79,16,523,708),9835=>array(52,-79,550,706),9836=>array(8,61,594,664),9837=>array(158,18,444,710),9838=>array(211,21,391,710),9839=>array(152,21,450,710),9840=>array(47,-1,555,639),9841=>array(22,-8,580,632),9842=>array(23,-2,579,538),9843=>array(29,5,573,527),9844=>array(37,4,565,514),9845=>array(33,5,569,521),9846=>array(18,3,584,549),9847=>array(30,4,572,525),9848=>array(37,0,565,509),9849=>array(22,6,580,543),9850=>array(22,0,580,537),9851=>array(28,-0,574,528),9852=>array(22,3,580,561),9853=>array(27,2,575,550),9854=>array(22,3,580,561),9855=>array(39,4,563,643),9856=>array(29,2,573,546),9857=>array(29,2,573,546),9858=>array(29,2,573,546),9859=>array(29,0,573,544),9860=>array(29,2,573,546),9861=>array(29,-2,573,542),9862=>array(22,0,580,557),9863=>array(22,2,580,559),9864=>array(22,0,580,557),9865=>array(22,-5,580,552),9866=>array(40,3,562,73),9867=>array(40,3,562,73),9872=>array(73,-1,529,591),9873=>array(56,2,546,640),9874=>array(19,-0,583,520),9875=>array(15,0,587,603),9876=>array(63,6,539,553),9877=>array(92,-1,510,740),9878=>array(9,1,593,558),9879=>array(11,3,591,552),9880=>array(36,-1,566,640),9881=>array(15,0,587,603),9882=>array(21,6,582,656),9883=>array(40,5,562,597),9884=>array(21,-1,582,638),9888=>array(17,1,585,520),9889=>array(66,4,536,642),9904=>array(119,0,484,730),9905=>array(108,0,494,594),9985=>array(22,181,580,494),9986=>array(22,170,580,505),9987=>array(28,156,574,462),9988=>array(30,161,572,501),9990=>array(25,35,577,588),9991=>array(18,31,584,598),9992=>array(30,29,572,544),9993=>array(31,56,571,448),9996=>array(158,5,444,614),9997=>array(22,73,580,498),9998=>array(42,64,560,581),9999=>array(19,109,583,346),10000=>array(42,91,560,608),10001=>array(29,146,573,420),10002=>array(18,133,584,388),10003=>array(74,94,528,561),10004=>array(36,56,566,532),10005=>array(63,55,539,531),10006=>array(31,92,540,601),10007=>array(64,-10,538,593),10008=>array(25,-1,577,646),10009=>array(31,2,571,542),10010=>array(42,3,560,503),10011=>array(28,3,574,550),10012=>array(23,0,579,556),10013=>array(76,1,520,640),10014=>array(62,0,541,639),10015=>array(70,2,532,595),10016=>array(23,1,579,558),10017=>array(35,1,567,616),10018=>array(15,-10,587,562),10019=>array(14,-8,588,567),10020=>array(13,-9,589,567),10021=>array(11,-13,591,566),10022=>array(21,-12,581,552),10023=>array(18,-13,584,557),10025=>array(20,-8,583,527),10026=>array(33,-13,569,526),10027=>array(20,-13,583,522),10028=>array(17,-11,585,529),10029=>array(20,-8,583,527),10030=>array(30,-2,572,514),10031=>array(20,-5,583,531),10032=>array(22,8,580,502),10033=>array(26,-1,576,563),10034=>array(42,-0,560,547),10035=>array(23,-1,579,554),10036=>array(18,-8,584,560),10037=>array(13,-11,589,565),10038=>array(24,-14,578,625),10039=>array(15,-16,587,556),10040=>array(13,-11,589,565),10041=>array(18,-17,584,551),10042=>array(23,1,579,557),10043=>array(24,-8,578,613),10044=>array(27,-9,575,606),10045=>array(25,-10,573,609),10046=>array(16,-13,586,592),10047=>array(18,0,584,551),10048=>array(11,1,591,565),10049=>array(11,-9,591,572),10050=>array(18,-16,584,552),10051=>array(24,-9,578,653),10052=>array(16,1,586,667),10053=>array(23,-3,579,587),10054=>array(12,2,590,594),10055=>array(24,-9,578,605),10056=>array(20,-10,582,552),10057=>array(16,-14,586,556),10058=>array(11,-11,591,569),10059=>array(17,-11,585,513),10061=>array(18,-5,584,527),10063=>array(34,-31,568,504),10064=>array(30,0,572,542),10065=>array(27,-35,575,512),10066=>array(23,0,579,555),10070=>array(21,-3,581,557),10072=>array(263,-119,339,701),10073=>array(225,-120,377,700),10074=>array(165,-151,438,677),10075=>array(233,476,369,731),10076=>array(228,471,374,722),10077=>array(125,476,477,731),10078=>array(120,471,482,722),10081=>array(50,-80,552,688),10082=>array(125,-19,478,598),10083=>array(93,-14,509,603),10084=>array(22,51,580,507),10085=>array(56,-2,546,637),10086=>array(32,12,570,567),10087=>array(24,150,578,472),10088=>array(117,-49,485,688),10089=>array(117,-49,485,688),10090=>array(175,-59,427,665),10091=>array(179,-59,423,643),10092=>array(158,-64,444,667),10093=>array(158,-64,444,667),10094=>array(103,-83,500,647),10095=>array(103,-83,500,647),10096=>array(100,-93,502,727),10097=>array(101,-93,501,728),10098=>array(223,-138,379,683),10099=>array(223,-135,379,686),10100=>array(137,-160,465,671),10101=>array(122,-164,480,676),10132=>array(41,148,562,487),10136=>array(57,71,545,561),10137=>array(41,204,562,509),10138=>array(57,94,545,583),10139=>array(22,204,580,485),10140=>array(36,145,566,530),10141=>array(41,214,562,519),10142=>array(22,184,580,510),10143=>array(26,182,576,503),10144=>array(41,201,562,505),10145=>array(41,189,562,494),10146=>array(47,182,555,512),10147=>array(60,205,542,518),10148=>array(60,140,542,592),10149=>array(26,193,576,530),10150=>array(26,193,576,529),10151=>array(164,128,438,609),10152=>array(26,179,576,500),10153=>array(49,177,553,516),10154=>array(49,148,553,487),10155=>array(26,89,576,498),10156=>array(47,104,555,458),10157=>array(61,107,541,538),10158=>array(41,63,561,530),10159=>array(24,163,578,557),10161=>array(20,124,582,524),10162=>array(71,92,531,584),10163=>array(43,163,559,386),10164=>array(57,90,545,579),10165=>array(41,227,562,427),10166=>array(57,63,545,552),10167=>array(38,90,564,616),10168=>array(21,192,582,409),10169=>array(57,85,545,574),10170=>array(26,146,576,490),10171=>array(14,179,588,461),10172=>array(19,218,583,456),10173=>array(18,174,583,493),10174=>array(24,131,578,462),10178=>array(43,0,559,627),10181=>array(152,-163,450,769),10182=>array(152,-163,450,769),10208=>array(57,-233,545,807),10214=>array(145,-132,458,760),10215=>array(145,-132,457,760),10216=>array(190,-132,412,759),10217=>array(190,-132,412,759),10731=>array(57,-233,545,807),10746=>array(43,55,559,572),10747=>array(43,55,559,572),10799=>array(73,85,529,541),10858=>array(43,243,559,564),10859=>array(43,65,559,564),11013=>array(41,190,561,494),11014=>array(149,82,453,602),11015=>array(149,82,453,602),11016=>array(68,109,485,526),11017=>array(117,109,534,526),11018=>array(117,109,534,526),11019=>array(68,109,485,526),11020=>array(41,190,561,494),11021=>array(149,82,453,602),11026=>array(3,-39,599,558),11027=>array(3,-39,599,558),11028=>array(3,-39,599,558),11029=>array(3,-39,599,558),11030=>array(3,-39,599,558),11031=>array(3,-39,599,558),11032=>array(3,-39,599,558),11033=>array(3,-39,599,558),11034=>array(3,-39,599,558),11364=>array(70,-213,602,729),11373=>array(52,-14,540,742),11374=>array(42,-208,559,729),11375=>array(18,0,584,729),11376=>array(52,-14,540,742),11381=>array(67,0,535,729),11382=>array(95,0,513,547),11383=>array(37,-12,565,551),11385=>array(74,-13,461,760),11386=>array(67,-14,535,560),11388=>array(237,-117,365,426),11389=>array(129,326,473,734),11390=>array(68,-242,570,742),11391=>array(76,-242,571,729),11800=>array(94,-13,483,729),11807=>array(43,65,559,384),11810=>array(226,403,433,760),11811=>array(169,403,376,760),11812=>array(226,-132,433,225),11813=>array(169,-132,376,225),11822=>array(106,0,496,742),42760=>array(146,0,456,668),42761=>array(146,0,456,668),42762=>array(146,0,456,668),42763=>array(146,0,456,668),42764=>array(146,0,456,668),42765=>array(146,0,456,668),42766=>array(146,0,456,668),42767=>array(146,0,456,668),42768=>array(146,0,456,668),42769=>array(146,0,456,668),42770=>array(146,0,456,668),42771=>array(146,0,456,668),42772=>array(146,0,456,668),42773=>array(146,0,456,668),42774=>array(146,0,456,668),42779=>array(166,326,436,736),42780=>array(166,324,436,734),42781=>array(270,326,332,734),42782=>array(270,326,332,734),42783=>array(270,0,332,408),42786=>array(157,0,464,729),42787=>array(179,0,452,547),42788=>array(115,224,494,742),42789=>array(115,42,494,560),42790=>array(67,-208,535,729),42791=>array(95,-208,513,760),42889=>array(239,0,362,519),42890=>array(191,161,411,380),42891=>array(252,235,351,729),42892=>array(258,458,343,729),42893=>array(67,0,533,729),42894=>array(77,-208,525,765),42896=>array(41,-157,573,729),42897=>array(60,-140,546,560),42922=>array(10,0,585,729),63173=>array(67,-14,535,760),64257=>array(17,0,527,760),64258=>array(17,0,527,760),64338=>array(34,-244,586,263),64339=>array(34,-244,612,264),64340=>array(-10,-244,342,293),64341=>array(-10,-244,612,293),64342=>array(34,-244,586,263),64343=>array(34,-244,612,264),64344=>array(-10,-244,389,293),64345=>array(-10,-244,612,293),64346=>array(34,-244,586,263),64347=>array(34,-244,612,264),64348=>array(-10,-244,380,293),64349=>array(-10,-244,612,293),64350=>array(34,-10,586,467),64351=>array(34,-10,612,470),64352=>array(-10,0,342,559),64353=>array(-10,0,612,553),64354=>array(34,-10,586,513),64355=>array(34,-10,612,513),64356=>array(-10,0,390,559),64357=>array(-10,0,612,561),64358=>array(34,-10,586,542),64359=>array(34,-10,612,535),64360=>array(-10,0,465,620),64361=>array(-10,0,612,627),64362=>array(-36,-45,568,681),64363=>array(-73,-44,612,628),64364=>array(-10,0,406,757),64365=>array(-10,0,612,633),64366=>array(-36,-45,568,687),64367=>array(-73,-44,612,630),64368=>array(-10,0,406,757),64369=>array(-10,0,612,641),64370=>array(43,-244,584,425),64371=>array(43,-244,622,425),64372=>array(-10,-220,545,398),64373=>array(-10,-220,623,398),64374=>array(43,-244,584,425),64375=>array(43,-244,622,425),64376=>array(-10,-98,545,398),64377=>array(-10,-98,623,398),64378=>array(43,-244,584,425),64379=>array(43,-244,622,425),64380=>array(-10,-239,545,398),64381=>array(-10,-220,623,398),64382=>array(43,-244,584,425),64383=>array(43,-244,622,425),64384=>array(-10,-239,545,398),64385=>array(-10,-220,623,398),64394=>array(-25,-246,547,527),64395=>array(-78,-244,612,533),64396=>array(-25,-246,595,576),64397=>array(-78,-244,612,564),64398=>array(5,-43,670,760),64399=>array(-61,-43,638,760),64400=>array(-10,0,521,760),64401=>array(-10,0,612,760),64402=>array(5,-43,673,910),64403=>array(-61,-43,638,911),64404=>array(-10,0,521,903),64405=>array(-10,0,612,903),64414=>array(26,-162,569,336),64415=>array(-21,-244,612,256),64426=>array(0,-33,572,487),64427=>array(0,0,618,487),64428=>array(-10,-33,486,487),64429=>array(-10,0,618,487),64488=>array(-10,0,342,293),64489=>array(-10,0,612,293),64508=>array(12,-131,602,389),64509=>array(-64,-133,612,251),64510=>array(-10,-146,386,293),64511=>array(-10,-146,612,293),65136=>array(158,591,443,825),65137=>array(-10,0,612,825),65138=>array(158,591,443,874),65139=>array(392,0,612,177),65140=>array(158,-239,443,-5),65142=>array(158,591,443,708),65143=>array(-10,0,612,708),65144=>array(158,590,443,874),65145=>array(-10,0,612,874),65146=>array(158,-137,443,-20),65147=>array(-10,-137,612,90),65148=>array(148,599,453,869),65149=>array(-10,0,612,869),65150=>array(167,610,435,878),65151=>array(-10,0,612,878),65152=>array(212,42,522,483),65153=>array(125,0,477,939),65154=>array(125,0,612,939),65155=>array(212,0,380,1028),65156=>array(236,0,612,1028),65157=>array(37,-244,525,588),65158=>array(44,-244,612,588),65159=>array(214,-244,381,760),65160=>array(259,-244,612,760),65161=>array(12,-131,602,542),65162=>array(-64,-133,612,421),65163=>array(-10,0,374,613),65164=>array(-10,0,612,613),65165=>array(256,0,346,760),65166=>array(287,0,612,760),65167=>array(34,-171,586,263),65168=>array(34,-171,612,264),65169=>array(-10,-146,342,293),65170=>array(-10,-146,612,293),65171=>array(108,-28,494,513),65172=>array(118,0,612,513),65173=>array(34,-10,586,391),65174=>array(34,-10,612,391),65175=>array(-10,0,392,488),65176=>array(-10,0,612,488),65177=>array(34,-10,586,513),65178=>array(34,-10,612,513),65179=>array(-10,0,396,610),65180=>array(-10,0,612,592),65181=>array(43,-244,584,425),65182=>array(43,-244,622,425),65183=>array(-10,-146,545,398),65184=>array(-10,-146,623,398),65185=>array(43,-244,584,425),65186=>array(43,-244,622,425),65187=>array(-10,0,545,398),65188=>array(-10,0,623,398),65189=>array(43,-244,584,586),65190=>array(43,-244,622,586),65191=>array(-10,0,545,537),65192=>array(-10,0,623,537),65193=>array(113,-19,488,427),65194=>array(113,-19,612,427),65195=>array(113,-19,488,586),65196=>array(113,-19,612,586),65197=>array(-25,-246,533,267),65198=>array(-78,-244,612,269),65199=>array(-25,-246,533,464),65200=>array(-78,-244,612,464),65201=>array(-107,-240,574,366),65202=>array(-145,-240,612,366),65203=>array(-10,-17,572,363),65204=>array(-10,-17,612,363),65205=>array(-107,-240,574,586),65206=>array(-145,-240,612,586),65207=>array(-10,-17,572,586),65208=>array(-10,-17,612,586),65209=>array(-117,-240,594,320),65210=>array(-154,-240,612,320),65211=>array(-10,0,594,320),65212=>array(-10,0,612,320),65213=>array(-117,-240,594,400),65214=>array(-154,-240,612,400),65215=>array(-10,0,594,433),65216=>array(-10,0,612,426),65217=>array(5,0,580,760),65218=>array(10,0,612,760),65219=>array(-10,0,580,760),65220=>array(-10,0,612,760),65221=>array(5,0,580,760),65222=>array(10,0,612,760),65223=>array(-10,0,580,760),65224=>array(-10,0,612,760),65225=>array(60,-244,589,521),65226=>array(72,-244,619,382),65227=>array(-10,0,497,521),65228=>array(-10,0,612,382),65229=>array(60,-244,589,659),65230=>array(72,-244,619,537),65231=>array(-10,0,497,659),65232=>array(-10,0,612,537),65233=>array(-36,-45,568,594),65234=>array(-73,-44,612,537),65235=>array(-10,0,406,635),65236=>array(-10,0,612,562),65237=>array(15,-189,557,635),65238=>array(-9,-240,612,500),65239=>array(-10,0,406,635),65240=>array(-10,0,612,562),65241=>array(4,-27,578,760),65242=>array(-46,-27,612,760),65243=>array(-10,0,521,760),65244=>array(-10,0,612,760),65245=>array(33,-152,537,760),65246=>array(5,-152,612,760),65247=>array(-10,0,489,760),65248=>array(-10,0,612,760),65249=>array(63,-240,541,369),65250=>array(35,-240,612,307),65251=>array(-10,-24,456,303),65252=>array(-10,-24,612,303),65253=>array(26,-162,569,439),65254=>array(-21,-244,612,335),65255=>array(-10,0,342,488),65256=>array(-10,0,612,488),65257=>array(108,-28,494,358),65258=>array(118,0,612,366),65259=>array(-10,-33,486,487),65260=>array(-10,-244,612,333),65261=>array(37,-244,525,315),65262=>array(44,-244,612,315),65263=>array(12,-131,602,389),65264=>array(-64,-133,612,251),65265=>array(12,-244,602,389),65266=>array(-64,-244,612,251),65267=>array(-10,-146,384,293),65268=>array(-10,-146,612,293),65269=>array(-52,-10,515,866),65270=>array(-94,-10,612,866),65271=>array(41,-10,515,955),65272=>array(-16,-10,612,955),65273=>array(65,-244,515,760),65274=>array(46,-244,612,760),65275=>array(87,-10,515,760),65276=>array(46,-10,612,760),65533=>array(40,-84,562,887),65535=>array(51,-177,551,705)); +$cw=array(0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602,41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602,51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602,61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602,71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602,81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602,91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602,101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602,111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602,121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602,167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602,177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602,187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602,197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602,207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602,217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602,227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602,237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602,247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602,257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602,267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602,277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602,287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602,297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602,307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602,317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602,327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602,337=>602,338=>602,339=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602,349=>602,350=>602,351=>602,352=>602,353=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602,361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602,371=>602,372=>602,373=>602,374=>602,375=>602,376=>602,377=>602,378=>602,379=>602,380=>602,381=>602,382=>602,383=>602,384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602,394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,402=>602,403=>602,404=>602,405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602,415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602,425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602,435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602,445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602,464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602,474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602,486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602,496=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602,543=>602,544=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602,576=>602,577=>602,579=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,710=>602,711=>602,712=>602,713=>602,716=>602,717=>602,718=>602,719=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,732=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1188=>602,1189=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602,1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602,1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602,1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602,1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602,1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602,1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602,1309=>602,1329=>602,1330=>602,1331=>602,1332=>602,1333=>602,1334=>602,1335=>602,1336=>602,1337=>602,1338=>602,1339=>602,1340=>602,1341=>602,1342=>602,1343=>602,1344=>602,1345=>602,1346=>602,1347=>602,1348=>602,1349=>602,1350=>602,1351=>602,1352=>602,1353=>602,1354=>602,1355=>602,1356=>602,1357=>602,1358=>602,1359=>602,1360=>602,1361=>602,1362=>602,1363=>602,1364=>602,1365=>602,1366=>602,1369=>602,1370=>602,1371=>602,1372=>602,1373=>602,1374=>602,1375=>602,1377=>602,1378=>602,1379=>602,1380=>602,1381=>602,1382=>602,1383=>602,1384=>602,1385=>602,1386=>602,1387=>602,1388=>602,1389=>602,1390=>602,1391=>602,1392=>602,1393=>602,1394=>602,1395=>602,1396=>602,1397=>602,1398=>602,1399=>602,1400=>602,1401=>602,1402=>602,1403=>602,1404=>602,1405=>602,1406=>602,1407=>602,1408=>602,1409=>602,1410=>602,1411=>602,1412=>602,1413=>602,1414=>602,1415=>602,1417=>602,1418=>602,1542=>602,1543=>602,1545=>602,1546=>602,1548=>602,1557=>602,1563=>602,1567=>602,1569=>602,1570=>602,1571=>602,1572=>602,1573=>602,1574=>602,1575=>602,1576=>602,1577=>602,1578=>602,1579=>602,1580=>602,1581=>602,1582=>602,1583=>602,1584=>602,1585=>602,1586=>602,1587=>602,1588=>602,1589=>602,1590=>602,1591=>602,1592=>602,1593=>602,1594=>602,1600=>602,1601=>602,1602=>602,1603=>602,1604=>602,1605=>602,1606=>602,1607=>602,1608=>602,1609=>602,1610=>602,1611=>602,1612=>602,1613=>602,1614=>602,1615=>602,1616=>602,1617=>602,1618=>602,1619=>602,1620=>602,1621=>602,1626=>602,1632=>602,1633=>602,1634=>602,1635=>602,1636=>602,1637=>602,1638=>602,1639=>602,1640=>602,1641=>602,1642=>602,1643=>602,1644=>602,1645=>602,1652=>602,1657=>602,1658=>602,1659=>602,1662=>602,1663=>602,1664=>602,1667=>602,1668=>602,1670=>602,1671=>602,1681=>602,1688=>602,1700=>602,1705=>602,1711=>602,1726=>602,1740=>602,1776=>602,1777=>602,1778=>602,1779=>602,1780=>602,1781=>602,1782=>602,1783=>602,1784=>602,1785=>602,3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602,3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602,3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602,3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602,3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602,4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602,4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602,4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602,4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602,4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602,7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602,7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602,7488=>602,7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8211=>602,8212=>602,8213=>602,8214=>602,8215=>602,8216=>602,8217=>602,8218=>602,8219=>602,8220=>602,8221=>602,8222=>602,8223=>602,8224=>602,8225=>602,8226=>602,8227=>602,8230=>602,8239=>602,8240=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602,8246=>602,8247=>602,8249=>602,8250=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602,8267=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8341=>602,8342=>602,8343=>602,8344=>602,8345=>602,8346=>602,8347=>602,8348=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8364=>602,8365=>602,8366=>602,8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602,8450=>602,8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8482=>602,8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8520=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602,8759=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602,8901=>602,8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9729=>602,9730=>602,9731=>602,9732=>602,9733=>602,9734=>602,9735=>602,9736=>602,9737=>602,9738=>602,9739=>602,9740=>602,9741=>602,9742=>602,9743=>602,9744=>602,9745=>602,9746=>602,9747=>602,9748=>602,9749=>602,9750=>602,9751=>602,9752=>602,9753=>602,9754=>602,9755=>602,9756=>602,9757=>602,9758=>602,9759=>602,9760=>602,9761=>602,9762=>602,9763=>602,9764=>602,9765=>602,9766=>602,9767=>602,9768=>602,9769=>602,9770=>602,9771=>602,9772=>602,9773=>602,9774=>602,9775=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9789=>602,9790=>602,9791=>602,9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9800=>602,9801=>602,9802=>602,9803=>602,9804=>602,9805=>602,9806=>602,9807=>602,9808=>602,9809=>602,9810=>602,9811=>602,9812=>602,9813=>602,9814=>602,9815=>602,9816=>602,9817=>602,9818=>602,9819=>602,9820=>602,9821=>602,9822=>602,9823=>602,9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9832=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,9840=>602,9841=>602,9842=>602,9843=>602,9844=>602,9845=>602,9846=>602,9847=>602,9848=>602,9849=>602,9850=>602,9851=>602,9852=>602,9853=>602,9854=>602,9855=>602,9856=>602,9857=>602,9858=>602,9859=>602,9860=>602,9861=>602,9862=>602,9863=>602,9864=>602,9865=>602,9866=>602,9867=>602,9872=>602,9873=>602,9874=>602,9875=>602,9876=>602,9877=>602,9878=>602,9879=>602,9880=>602,9881=>602,9882=>602,9883=>602,9884=>602,9888=>602,9889=>602,9904=>602,9905=>602,9985=>602,9986=>602,9987=>602,9988=>602,9990=>602,9991=>602,9992=>602,9993=>602,9996=>602,9997=>602,9998=>602,9999=>602,10000=>602,10001=>602,10002=>602,10003=>602,10004=>602,10005=>602,10006=>602,10007=>602,10008=>602,10009=>602,10010=>602,10011=>602,10012=>602,10013=>602,10014=>602,10015=>602,10016=>602,10017=>602,10018=>602,10019=>602,10020=>602,10021=>602,10022=>602,10023=>602,10025=>602,10026=>602,10027=>602,10028=>602,10029=>602,10030=>602,10031=>602,10032=>602,10033=>602,10034=>602,10035=>602,10036=>602,10037=>602,10038=>602,10039=>602,10040=>602,10041=>602,10042=>602,10043=>602,10044=>602,10045=>602,10046=>602,10047=>602,10048=>602,10049=>602,10050=>602,10051=>602,10052=>602,10053=>602,10054=>602,10055=>602,10056=>602,10057=>602,10058=>602,10059=>602,10061=>602,10063=>602,10064=>602,10065=>602,10066=>602,10070=>602,10072=>602,10073=>602,10074=>602,10075=>602,10076=>602,10077=>602,10078=>602,10081=>602,10082=>602,10083=>602,10084=>602,10085=>602,10086=>602,10087=>602,10088=>602,10089=>602,10090=>602,10091=>602,10092=>602,10093=>602,10094=>602,10095=>602,10096=>602,10097=>602,10098=>602,10099=>602,10100=>602,10101=>602,10132=>602,10136=>602,10137=>602,10138=>602,10139=>602,10140=>602,10141=>602,10142=>602,10143=>602,10144=>602,10145=>602,10146=>602,10147=>602,10148=>602,10149=>602,10150=>602,10151=>602,10152=>602,10153=>602,10154=>602,10155=>602,10156=>602,10157=>602,10158=>602,10159=>602,10161=>602,10162=>602,10163=>602,10164=>602,10165=>602,10166=>602,10167=>602,10168=>602,10169=>602,10170=>602,10171=>602,10172=>602,10173=>602,10174=>602,10178=>602,10181=>602,10182=>602,10208=>602,10214=>602,10215=>602,10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602,10858=>602,10859=>602,11013=>602,11014=>602,11015=>602,11016=>602,11017=>602,11018=>602,11019=>602,11020=>602,11021=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602,11373=>602,11374=>602,11375=>602,11376=>602,11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11390=>602,11391=>602,11800=>602,11807=>602,11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42786=>602,42787=>602,42788=>602,42789=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,42893=>602,42894=>602,42896=>602,42897=>602,42922=>602,63173=>602,64257=>602,64258=>602,64338=>602,64339=>602,64340=>602,64341=>602,64342=>602,64343=>602,64344=>602,64345=>602,64346=>602,64347=>602,64348=>602,64349=>602,64350=>602,64351=>602,64352=>602,64353=>602,64354=>602,64355=>602,64356=>602,64357=>602,64358=>602,64359=>602,64360=>602,64361=>602,64362=>602,64363=>602,64364=>602,64365=>602,64366=>602,64367=>602,64368=>602,64369=>602,64370=>602,64371=>602,64372=>602,64373=>602,64374=>602,64375=>602,64376=>602,64377=>602,64378=>602,64379=>602,64380=>602,64381=>602,64382=>602,64383=>602,64384=>602,64385=>602,64394=>602,64395=>602,64396=>602,64397=>602,64398=>602,64399=>602,64400=>602,64401=>602,64402=>602,64403=>602,64404=>602,64405=>602,64414=>602,64415=>602,64426=>602,64427=>602,64428=>602,64429=>602,64488=>602,64489=>602,64508=>602,64509=>602,64510=>602,64511=>602,65136=>602,65137=>602,65138=>602,65139=>602,65140=>602,65142=>602,65143=>602,65144=>602,65145=>602,65146=>602,65147=>602,65148=>602,65149=>602,65150=>602,65151=>602,65152=>602,65153=>602,65154=>602,65155=>602,65156=>602,65157=>602,65158=>602,65159=>602,65160=>602,65161=>602,65162=>602,65163=>602,65164=>602,65165=>602,65166=>602,65167=>602,65168=>602,65169=>602,65170=>602,65171=>602,65172=>602,65173=>602,65174=>602,65175=>602,65176=>602,65177=>602,65178=>602,65179=>602,65180=>602,65181=>602,65182=>602,65183=>602,65184=>602,65185=>602,65186=>602,65187=>602,65188=>602,65189=>602,65190=>602,65191=>602,65192=>602,65193=>602,65194=>602,65195=>602,65196=>602,65197=>602,65198=>602,65199=>602,65200=>602,65201=>602,65202=>602,65203=>602,65204=>602,65205=>602,65206=>602,65207=>602,65208=>602,65209=>602,65210=>602,65211=>602,65212=>602,65213=>602,65214=>602,65215=>602,65216=>602,65217=>602,65218=>602,65219=>602,65220=>602,65221=>602,65222=>602,65223=>602,65224=>602,65225=>602,65226=>602,65227=>602,65228=>602,65229=>602,65230=>602,65231=>602,65232=>602,65233=>602,65234=>602,65235=>602,65236=>602,65237=>602,65238=>602,65239=>602,65240=>602,65241=>602,65242=>602,65243=>602,65244=>602,65245=>602,65246=>602,65247=>602,65248=>602,65249=>602,65250=>602,65251=>602,65252=>602,65253=>602,65254=>602,65255=>602,65256=>602,65257=>602,65258=>602,65259=>602,65260=>602,65261=>602,65262=>602,65263=>602,65264=>602,65265=>602,65266=>602,65267=>602,65268=>602,65269=>602,65270=>602,65271=>602,65272=>602,65273=>602,65274=>602,65275=>602,65276=>602,65279=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602,65535=>602); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansmono.z b/tcpdf/fonts/dejavusansmono.z new file mode 100644 index 0000000..126cc92 Binary files /dev/null and b/tcpdf/fonts/dejavusansmono.z differ diff --git a/tcpdf/fonts/dejavusansmonob.ctg.z b/tcpdf/fonts/dejavusansmonob.ctg.z new file mode 100644 index 0000000..76b78bc Binary files /dev/null and b/tcpdf/fonts/dejavusansmonob.ctg.z differ diff --git a/tcpdf/fonts/dejavusansmonob.php b/tcpdf/fonts/dejavusansmonob.php new file mode 100644 index 0000000..9028c6e --- /dev/null +++ b/tcpdf/fonts/dejavusansmonob.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansMono-Bold'; +$up=-63; +$ut=44; +$dw=602; +$diff=''; +$originalsize=318392; +$enc=''; +$file='dejavusansmonob.z'; +$ctg='dejavusansmonob.ctg.z'; +$desc=array('Flags'=>33,'FontBBox'=>'[-447 -394 731 1052]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>60,'StemH'=>26,'AvgWidth'=>602,'MaxWidth'=>602,'MissingWidth'=>602); +$cbbox=array(0=>array(51,-177,551,705),33=>array(236,0,366,729),34=>array(113,458,488,729),35=>array(1,0,600,718),36=>array(80,-147,533,760),37=>array(16,0,595,699),38=>array(18,-14,603,742),39=>array(238,458,363,729),40=>array(187,-132,451,759),41=>array(151,-132,415,759),42=>array(59,278,541,742),43=>array(32,45,569,582),44=>array(177,-140,378,179),45=>array(147,217,455,359),46=>array(219,0,382,179),47=>array(55,-93,547,729),48=>array(60,-14,542,742),49=>array(92,0,554,729),50=>array(56,0,519,742),51=>array(61,-14,537,742),52=>array(50,0,557,729),53=>array(70,-14,534,729),54=>array(64,-15,548,741),55=>array(66,0,527,729),56=>array(63,-14,539,742),57=>array(54,-19,538,736),58=>array(219,0,382,519),59=>array(181,-140,382,519),60=>array(43,53,559,574),61=>array(43,144,559,482),62=>array(43,53,559,574),63=>array(114,0,520,742),64=>array(3,-156,566,681),65=>array(16,0,586,729),66=>array(61,0,566,730),67=>array(74,-14,528,742),68=>array(67,0,557,729),69=>array(82,0,536,729),70=>array(89,0,543,729),71=>array(57,-14,552,742),72=>array(67,0,535,729),73=>array(84,0,518,729),74=>array(53,-14,492,729),75=>array(57,0,598,729),76=>array(110,0,562,729),77=>array(42,0,560,729),78=>array(58,0,543,729),79=>array(45,-14,557,742),80=>array(79,0,560,729),81=>array(45,-137,557,742),82=>array(65,0,602,729),83=>array(63,-14,542,742),84=>array(44,0,558,729),85=>array(52,-14,550,729),86=>array(28,0,574,729),87=>array(0,0,602,729),88=>array(13,0,589,729),89=>array(4,0,598,729),90=>array(56,0,567,729),91=>array(206,-132,454,760),92=>array(54,-93,547,729),93=>array(148,-132,396,760),94=>array(28,457,574,729),95=>array(0,-236,602,-143),96=>array(97,616,373,800),97=>array(46,-14,541,560),98=>array(73,-14,558,760),99=>array(82,-14,518,561),100=>array(44,-14,529,760),101=>array(45,-14,561,560),102=>array(85,0,529,760),103=>array(48,-207,535,561),104=>array(84,0,523,760),105=>array(70,0,569,813),106=>array(70,-207,415,813),107=>array(85,0,585,760),108=>array(44,0,534,760),109=>array(40,0,564,560),110=>array(84,0,523,560),111=>array(48,-14,554,560),112=>array(73,-208,558,560),113=>array(44,-208,529,560),114=>array(142,0,562,560),115=>array(84,-14,521,560),116=>array(54,0,524,702),117=>array(78,-14,518,547),118=>array(39,0,563,547),119=>array(0,0,602,547),120=>array(27,0,575,547),121=>array(29,-207,574,547),122=>array(79,0,528,547),123=>array(86,-163,514,760),124=>array(245,-236,356,764),125=>array(88,-163,516,760),126=>array(43,226,559,396),161=>array(236,0,366,729),162=>array(72,-153,506,699),163=>array(58,0,548,742),164=>array(91,86,546,541),165=>array(4,0,598,729),166=>array(245,-171,356,699),167=>array(83,-95,518,742),168=>array(147,654,455,774),169=>array(0,61,602,663),170=>array(125,209,479,742),171=>array(58,69,509,517),172=>array(43,177,559,439),173=>array(147,217,455,359),174=>array(0,61,602,663),175=>array(147,668,455,760),176=>array(138,417,463,742),177=>array(43,0,559,627),178=>array(134,326,459,742),179=>array(140,319,470,742),180=>array(229,616,505,800),181=>array(85,-209,580,547),182=>array(34,-96,520,729),183=>array(219,259,382,437),184=>array(179,-196,400,0),185=>array(153,326,469,734),186=>array(134,209,488,742),187=>array(94,69,545,517),188=>array(23,-132,558,810),189=>array(23,-132,558,810),190=>array(23,-132,558,818),191=>array(86,-13,491,729),192=>array(16,0,586,927),193=>array(16,0,586,927),194=>array(16,0,586,927),195=>array(16,0,586,928),196=>array(16,0,586,927),197=>array(16,0,586,928),198=>array(0,0,576,729),199=>array(74,-196,528,742),200=>array(82,0,536,927),201=>array(82,0,536,927),202=>array(82,0,536,927),203=>array(82,0,536,927),204=>array(84,0,518,927),205=>array(84,0,518,927),206=>array(84,0,518,927),207=>array(84,0,518,927),208=>array(0,0,557,729),209=>array(58,0,543,928),210=>array(45,-14,557,927),211=>array(45,-14,557,927),212=>array(45,-14,557,927),213=>array(45,-14,557,928),214=>array(45,-14,557,927),215=>array(58,72,543,556),216=>array(-3,-31,596,761),217=>array(52,-14,550,927),218=>array(52,-14,550,927),219=>array(52,-14,550,927),220=>array(52,-14,550,927),221=>array(4,0,598,927),222=>array(79,0,560,729),223=>array(62,-14,573,760),224=>array(46,-14,541,800),225=>array(46,-14,541,800),226=>array(46,-14,541,800),227=>array(46,-14,541,778),228=>array(46,-14,541,774),229=>array(46,-14,541,888),230=>array(7,-14,580,560),231=>array(82,-196,518,561),232=>array(45,-14,561,800),233=>array(45,-14,561,800),234=>array(45,-14,561,800),235=>array(45,-14,561,774),236=>array(70,0,569,800),237=>array(70,0,569,800),238=>array(70,0,569,800),239=>array(70,0,569,774),240=>array(48,-14,550,765),241=>array(84,0,523,778),242=>array(48,-14,554,801),243=>array(48,-14,554,800),244=>array(48,-14,554,800),245=>array(48,-14,554,762),246=>array(48,-14,554,762),247=>array(32,42,569,585),248=>array(12,-57,587,603),249=>array(78,-14,518,800),250=>array(78,-14,518,800),251=>array(78,-14,518,800),252=>array(78,-14,518,774),253=>array(29,-207,574,800),254=>array(73,-208,558,760),255=>array(29,-207,574,774),256=>array(16,0,586,913),257=>array(46,-14,541,760),258=>array(16,0,586,927),259=>array(46,-14,541,784),260=>array(16,-196,600,729),261=>array(46,-196,553,560),262=>array(74,-14,532,927),263=>array(82,-14,555,800),264=>array(74,-14,561,927),265=>array(82,-14,536,800),266=>array(74,-14,528,927),267=>array(82,-14,518,774),268=>array(74,-14,552,927),269=>array(82,-14,535,800),270=>array(67,0,557,936),271=>array(44,-14,711,760),272=>array(0,0,557,729),273=>array(44,-14,600,760),274=>array(82,0,536,913),275=>array(45,-14,561,760),276=>array(82,0,536,927),277=>array(45,-14,561,784),278=>array(82,0,536,927),279=>array(45,-14,561,774),280=>array(82,-196,537,729),281=>array(45,-196,561,560),282=>array(82,0,536,927),283=>array(45,-14,561,802),284=>array(57,-14,552,927),285=>array(48,-207,535,800),286=>array(57,-14,552,927),287=>array(48,-207,535,784),288=>array(57,-14,552,927),289=>array(48,-207,535,774),290=>array(57,-241,552,742),291=>array(48,-207,535,764),292=>array(67,0,535,927),293=>array(-30,0,523,927),294=>array(1,0,601,729),295=>array(6,0,523,760),296=>array(84,0,518,928),297=>array(70,0,569,778),298=>array(84,0,518,913),299=>array(70,0,569,760),300=>array(84,0,518,927),301=>array(70,0,569,784),302=>array(84,-196,518,729),303=>array(70,-196,569,813),304=>array(84,0,518,927),305=>array(70,0,569,547),306=>array(-4,-13,601,730),307=>array(4,-212,602,813),308=>array(53,-14,516,927),309=>array(70,-207,485,800),310=>array(57,-227,598,729),311=>array(85,-227,585,760),312=>array(85,0,585,547),313=>array(110,0,562,928),314=>array(44,0,534,928),315=>array(110,-227,562,729),316=>array(44,-227,534,760),317=>array(110,0,562,729),318=>array(44,0,581,760),319=>array(110,0,571,729),320=>array(44,0,597,760),321=>array(-19,0,562,729),322=>array(18,0,545,760),323=>array(58,0,543,928),324=>array(84,0,523,803),325=>array(58,-227,543,729),326=>array(84,-227,523,560),327=>array(58,0,543,927),328=>array(84,0,523,800),329=>array(-54,0,601,760),330=>array(52,-208,549,743),331=>array(84,-207,523,560),332=>array(45,-14,557,913),333=>array(48,-14,554,760),334=>array(45,-14,557,927),335=>array(48,-14,554,784),336=>array(45,-14,557,927),337=>array(48,-14,554,800),338=>array(33,0,594,729),339=>array(7,-14,591,560),340=>array(65,0,602,928),341=>array(142,0,580,803),342=>array(65,-227,602,729),343=>array(123,-227,562,560),344=>array(65,0,602,927),345=>array(142,0,562,800),346=>array(63,-14,542,928),347=>array(84,-14,521,803),348=>array(63,-14,542,927),349=>array(84,-14,521,800),350=>array(63,-196,542,742),351=>array(84,-196,521,560),352=>array(63,-14,542,927),353=>array(84,-14,521,800),354=>array(44,-196,558,729),355=>array(54,-196,524,702),356=>array(44,0,558,933),357=>array(54,0,582,824),358=>array(44,0,558,729),359=>array(54,0,524,702),360=>array(52,-14,550,928),361=>array(78,-14,518,778),362=>array(52,-14,550,913),363=>array(78,-14,518,760),364=>array(52,-14,550,927),365=>array(78,-14,518,784),366=>array(52,-14,550,1052),367=>array(78,-14,518,888),368=>array(52,-14,550,927),369=>array(78,-14,530,800),370=>array(52,-204,550,729),371=>array(78,-196,600,547),372=>array(0,0,602,931),373=>array(0,0,602,803),374=>array(4,0,598,931),375=>array(29,-207,574,803),376=>array(4,0,598,927),377=>array(56,0,567,928),378=>array(79,0,528,803),379=>array(56,0,567,927),380=>array(79,0,528,774),381=>array(56,0,567,927),382=>array(79,0,528,800),383=>array(85,0,529,760),384=>array(6,-14,558,760),385=>array(0,0,598,730),386=>array(79,0,560,729),387=>array(73,-14,558,760),388=>array(21,0,581,729),389=>array(22,-14,580,760),390=>array(74,-14,528,742),391=>array(74,-14,624,802),392=>array(82,-14,626,760),393=>array(0,0,557,729),394=>array(-14,0,589,729),395=>array(61,0,566,729),396=>array(73,-14,558,760),397=>array(47,-220,554,560),398=>array(82,0,536,729),399=>array(45,-14,557,742),400=>array(61,-14,537,742),401=>array(53,-207,549,729),402=>array(44,-207,558,760),403=>array(19,-14,583,802),404=>array(16,-142,586,729),405=>array(6,-1,596,760),406=>array(84,0,551,729),407=>array(84,0,518,729),408=>array(9,0,593,729),409=>array(85,0,585,760),410=>array(44,0,534,760),411=>array(39,0,563,760),412=>array(40,-13,564,729),413=>array(15,-208,587,729),414=>array(84,-208,523,560),415=>array(45,-14,557,742),416=>array(2,-14,600,759),417=>array(4,-14,598,570),418=>array(14,-14,588,742),419=>array(9,-208,602,560),420=>array(10,0,592,729),421=>array(73,-208,558,760),422=>array(65,-116,602,729),423=>array(63,-14,542,742),424=>array(84,-14,521,560),425=>array(48,0,559,729),426=>array(29,-207,558,760),427=>array(54,-207,524,702),428=>array(10,0,558,730),429=>array(54,0,524,760),430=>array(44,-208,558,729),431=>array(2,-14,600,759),432=>array(3,-14,599,570),433=>array(44,0,558,713),434=>array(57,0,540,729),435=>array(1,0,601,729),436=>array(14,-207,588,547),437=>array(56,0,567,729),438=>array(77,0,525,547),439=>array(5,-14,597,729),440=>array(5,-14,597,729),441=>array(54,-215,548,547),442=>array(64,-208,536,547),443=>array(56,0,519,742),444=>array(5,-14,597,729),445=>array(54,-215,548,547),446=>array(71,-15,531,702),447=>array(40,-208,556,560),448=>array(236,0,366,729),449=>array(124,0,478,729),450=>array(36,0,566,729),451=>array(236,0,366,729),461=>array(16,0,586,927),462=>array(46,-14,541,800),463=>array(84,0,518,927),464=>array(70,0,569,800),465=>array(45,-14,557,927),466=>array(48,-14,554,800),467=>array(52,-14,550,927),468=>array(78,-14,518,800),469=>array(52,-14,550,985),470=>array(78,-14,518,914),471=>array(52,-14,550,1008),472=>array(78,-14,518,1002),473=>array(52,-14,550,1008),474=>array(78,-14,518,1002),475=>array(52,-14,550,1008),476=>array(78,-14,518,1002),477=>array(45,-14,561,560),478=>array(16,0,586,985),479=>array(46,-14,541,914),480=>array(16,0,586,985),481=>array(46,-14,541,914),482=>array(0,0,576,913),483=>array(7,-14,580,760),486=>array(57,-14,552,927),487=>array(48,-207,535,800),488=>array(57,0,598,927),489=>array(85,0,585,927),490=>array(45,-204,557,742),491=>array(48,-204,554,560),492=>array(45,-204,557,913),493=>array(48,-204,554,760),494=>array(5,-14,597,927),495=>array(54,-215,548,800),496=>array(70,-207,493,802),500=>array(57,-14,552,927),501=>array(48,-207,535,800),502=>array(12,-14,590,729),504=>array(58,0,543,927),505=>array(84,0,523,801),508=>array(0,0,576,927),509=>array(7,-14,580,800),510=>array(-3,-31,596,927),511=>array(12,-57,587,800),512=>array(16,0,586,927),513=>array(46,-14,541,800),514=>array(16,0,586,927),515=>array(46,-14,541,784),516=>array(54,0,536,927),517=>array(45,-14,561,800),518=>array(82,0,536,927),519=>array(45,-14,561,784),520=>array(54,0,518,927),521=>array(69,0,569,800),522=>array(84,0,518,927),523=>array(70,0,569,784),524=>array(45,-14,557,927),525=>array(48,-14,554,800),526=>array(45,-14,557,927),527=>array(48,-14,554,784),528=>array(30,0,602,927),529=>array(118,0,562,800),530=>array(65,0,602,927),531=>array(142,0,562,784),532=>array(52,-14,550,927),533=>array(69,-14,518,800),534=>array(52,-14,550,927),535=>array(78,-14,518,784),536=>array(63,-246,542,742),537=>array(84,-246,521,560),538=>array(44,-246,558,729),539=>array(54,-246,524,702),540=>array(26,-210,576,742),541=>array(54,-211,548,560),542=>array(67,0,535,927),543=>array(84,0,523,927),544=>array(52,-208,549,743),545=>array(4,-68,598,760),548=>array(56,-207,567,729),549=>array(79,-207,528,547),550=>array(16,0,586,927),551=>array(46,-14,541,774),552=>array(82,-196,536,729),553=>array(45,-196,561,560),554=>array(45,-14,557,985),555=>array(48,-14,554,914),556=>array(45,-14,557,985),557=>array(48,-14,554,914),558=>array(45,-14,557,927),559=>array(48,-14,554,774),560=>array(45,-14,557,985),561=>array(48,-14,554,914),562=>array(4,0,598,913),563=>array(29,-207,574,760),564=>array(24,-68,578,760),565=>array(18,-68,584,560),566=>array(54,-68,524,702),567=>array(70,-207,415,547),568=>array(11,-14,591,760),569=>array(11,-214,591,560),570=>array(-3,-31,596,761),571=>array(-3,-31,596,761),572=>array(12,-57,587,603),573=>array(14,0,588,729),574=>array(6,-31,605,761),575=>array(84,-240,521,560),576=>array(79,-240,528,547),577=>array(14,0,588,729),579=>array(0,0,566,730),580=>array(10,-14,592,729),581=>array(28,0,574,729),588=>array(10,0,602,729),589=>array(94,0,562,560),592=>array(54,-14,549,560),593=>array(59,-14,543,560),594=>array(59,-14,543,560),595=>array(73,-14,558,759),596=>array(84,-14,520,561),597=>array(79,-69,523,561),598=>array(38,-162,538,760),599=>array(34,-14,539,759),600=>array(43,-14,559,560),601=>array(45,-14,561,560),602=>array(3,-14,599,560),603=>array(73,-11,510,557),604=>array(50,-11,552,560),605=>array(23,-11,579,560),606=>array(53,-21,549,559),607=>array(70,-207,514,547),608=>array(8,-208,594,760),609=>array(61,-208,542,547),610=>array(75,0,527,546),611=>array(48,-203,554,554),612=>array(48,-59,554,547),613=>array(82,-214,521,546),614=>array(82,0,521,759),615=>array(82,-208,521,759),616=>array(52,0,551,760),617=>array(70,-1,531,547),618=>array(52,0,551,547),619=>array(43,-1,560,759),620=>array(53,0,549,760),621=>array(56,-217,546,760),622=>array(13,-215,589,760),623=>array(39,-13,563,547),624=>array(39,-208,563,547),625=>array(39,-208,563,560),626=>array(31,-216,571,560),627=>array(33,-216,569,560),628=>array(59,0,543,547),629=>array(48,-14,554,560),630=>array(37,-1,565,547),631=>array(40,0,562,574),632=>array(10,-208,592,762),633=>array(91,-13,511,547),634=>array(91,-13,511,759),635=>array(38,-208,564,547),636=>array(91,-208,511,560),637=>array(91,-208,511,560),638=>array(66,0,536,547),639=>array(66,0,536,547),640=>array(51,0,551,547),641=>array(32,0,570,547),642=>array(83,-208,520,560),643=>array(44,-207,558,760),644=>array(44,-207,558,760),645=>array(44,-207,558,760),646=>array(29,-207,558,760),647=>array(66,-155,536,547),648=>array(66,-208,536,702),649=>array(43,-14,559,547),650=>array(42,-51,561,547),651=>array(41,-1,561,547),652=>array(39,0,563,547),653=>array(0,0,602,547),654=>array(28,0,574,754),655=>array(33,0,569,547),656=>array(22,-208,579,547),657=>array(58,-55,544,547),658=>array(54,-215,548,547),659=>array(49,-215,553,547),660=>array(81,0,521,759),661=>array(81,0,521,759),662=>array(81,0,521,759),663=>array(81,-208,521,759),664=>array(27,-28,575,582),665=>array(58,0,544,547),666=>array(53,-21,549,559),667=>array(30,0,572,759),668=>array(59,0,543,547),669=>array(46,-208,557,813),670=>array(51,-208,551,547),671=>array(115,0,487,547),672=>array(34,-208,538,759),673=>array(71,0,531,759),674=>array(71,0,531,759),675=>array(25,-14,577,760),676=>array(11,-219,591,756),677=>array(14,-55,588,760),678=>array(32,-14,570,702),679=>array(67,-207,535,760),680=>array(40,-69,563,702),681=>array(36,-207,566,760),682=>array(25,-14,577,760),683=>array(22,-2,580,760),684=>array(28,0,574,641),685=>array(140,86,462,641),686=>array(27,-214,575,759),687=>array(40,-208,563,759),688=>array(161,326,441,752),689=>array(161,326,441,751),690=>array(190,177,412,748),691=>array(167,326,436,640),692=>array(167,319,436,633),693=>array(132,209,470,632),694=>array(129,326,473,633),695=>array(108,326,494,633),696=>array(126,211,476,633),697=>array(244,557,384,800),699=>array(211,441,412,760),700=>array(211,441,412,760),701=>array(234,595,368,844),702=>array(231,481,371,760),703=>array(231,481,371,760),704=>array(160,326,442,751),705=>array(160,326,442,751),710=>array(117,616,485,800),711=>array(117,616,485,800),712=>array(254,488,348,759),713=>array(147,668,455,760),716=>array(254,-81,348,190),717=>array(147,-198,455,-106),718=>array(145,-285,421,-102),719=>array(181,-285,457,-102),720=>array(201,0,401,547),721=>array(201,361,401,547),722=>array(231,269,371,547),723=>array(231,269,371,547),726=>array(147,119,455,427),727=>array(191,229,411,317),728=>array(137,639,465,784),729=>array(234,654,368,774),730=>array(162,610,440,888),731=>array(218,-196,427,0),732=>array(131,638,471,778),733=>array(145,616,530,800),734=>array(-152,213,453,524),736=>array(139,216,463,640),737=>array(144,326,458,752),738=>array(161,319,441,640),739=>array(125,326,477,633),740=>array(160,326,442,751),741=>array(134,0,468,693),742=>array(134,0,468,693),743=>array(134,0,468,693),744=>array(134,0,468,693),745=>array(134,0,468,693),750=>array(73,441,528,760),755=>array(194,-245,408,-31),768=>array(97,616,373,800),769=>array(229,616,505,800),770=>array(117,616,485,800),771=>array(131,638,471,778),772=>array(147,668,455,760),773=>array(0,663,602,755),774=>array(137,639,465,784),775=>array(234,654,368,774),776=>array(147,654,455,774),777=>array(190,616,412,849),778=>array(162,610,440,888),779=>array(145,616,530,800),780=>array(117,616,485,800),781=>array(255,616,348,833),782=>array(116,616,487,833),783=>array(69,616,454,800),784=>array(137,639,465,879),785=>array(137,639,465,784),786=>array(218,441,399,590),787=>array(234,595,368,844),788=>array(234,595,368,844),789=>array(229,616,404,800),790=>array(163,-290,439,-106),791=>array(163,-290,439,-106),792=>array(179,-394,361,-123),793=>array(230,-394,413,-123),794=>array(166,658,437,929),795=>array(203,361,399,570),796=>array(248,-245,354,-31),797=>array(167,-305,438,-123),798=>array(154,-394,425,-212),799=>array(172,-394,443,-123),800=>array(166,-215,437,-123),801=>array(273,-207,523,82),802=>array(82,-208,332,81),803=>array(234,-226,368,-105),804=>array(147,-226,455,-105),805=>array(194,-245,408,-31),806=>array(182,-246,363,-97),807=>array(179,-196,400,0),808=>array(196,-196,406,0),809=>array(255,-323,347,-106),810=>array(147,-289,455,-106),811=>array(102,-239,500,-94),812=>array(117,-237,485,-53),813=>array(117,-237,485,-53),814=>array(137,-240,465,-95),815=>array(137,-239,465,-94),816=>array(131,-238,471,-98),817=>array(147,-198,455,-106),818=>array(0,-236,602,-143),819=>array(0,-236,602,-9),820=>array(43,226,559,396),821=>array(94,214,472,309),822=>array(0,214,602,309),823=>array(12,-57,587,603),824=>array(-3,-31,596,761),825=>array(248,-245,354,-31),826=>array(147,-254,455,-71),827=>array(161,-386,441,-106),828=>array(102,-239,500,-94),829=>array(172,582,430,839),830=>array(231,595,371,867),831=>array(0,528,602,755),835=>array(234,595,368,844),856=>array(465,654,600,774),865=>array(-118,735,720,880),884=>array(244,557,384,800),885=>array(218,-208,358,35),890=>array(253,-208,383,-45),894=>array(181,-140,382,519),900=>array(229,616,505,800),901=>array(147,654,505,999),902=>array(-40,0,586,800),903=>array(219,259,382,437),904=>array(-171,0,536,800),905=>array(-191,0,535,800),906=>array(-162,0,518,800),908=>array(-83,-14,557,800),910=>array(-242,0,598,800),911=>array(-62,0,558,800),912=>array(132,0,505,999),913=>array(16,0,586,729),914=>array(61,0,566,730),915=>array(89,0,543,729),916=>array(16,0,586,729),917=>array(82,0,536,729),918=>array(56,0,567,729),919=>array(67,0,535,729),920=>array(45,-14,557,742),921=>array(84,0,518,729),922=>array(57,0,598,729),923=>array(16,0,586,729),924=>array(42,0,560,729),925=>array(58,0,543,729),926=>array(67,0,535,729),927=>array(45,-14,557,742),928=>array(67,0,535,729),929=>array(79,0,560,729),931=>array(48,0,559,729),932=>array(44,0,558,729),933=>array(4,0,598,729),934=>array(45,0,557,729),935=>array(13,0,589,729),936=>array(39,0,563,729),937=>array(44,0,558,713),938=>array(84,0,518,927),939=>array(4,0,598,927),940=>array(26,-12,568,800),941=>array(73,-11,510,800),942=>array(84,-208,523,800),943=>array(132,0,505,800),944=>array(37,0,565,999),945=>array(26,-12,568,559),946=>array(64,-208,554,766),947=>array(27,-208,563,547),948=>array(48,-14,554,766),949=>array(73,-11,510,557),950=>array(70,-208,517,760),951=>array(84,-208,523,560),952=>array(47,-12,554,770),953=>array(132,0,478,547),954=>array(85,0,585,547),955=>array(39,0,563,760),956=>array(85,-209,580,547),957=>array(23,0,559,547),958=>array(70,-208,517,760),959=>array(48,-14,554,560),960=>array(7,-19,593,547),961=>array(73,-208,558,560),962=>array(82,-208,521,561),963=>array(48,-14,570,547),964=>array(66,0,536,547),965=>array(37,0,565,547),966=>array(32,-208,570,552),967=>array(35,-208,567,547),968=>array(34,-208,569,547),969=>array(31,-14,571,547),970=>array(132,0,478,774),971=>array(37,0,565,774),972=>array(48,-14,554,800),973=>array(37,0,565,800),974=>array(31,-14,571,800),976=>array(55,-11,508,768),977=>array(51,-11,553,768),978=>array(17,0,582,729),979=>array(-232,0,582,800),980=>array(17,0,582,927),981=>array(28,-208,573,760),982=>array(15,0,587,547),983=>array(25,-188,571,547),984=>array(45,-208,557,742),985=>array(48,-208,554,560),986=>array(47,-222,570,729),987=>array(44,-208,557,547),988=>array(89,0,543,729),989=>array(6,-208,491,760),990=>array(48,-2,566,729),991=>array(56,0,545,759),992=>array(0,-208,581,742),993=>array(22,-180,537,559),1008=>array(25,-3,571,547),1009=>array(73,-213,558,560),1010=>array(82,-14,518,561),1011=>array(70,-207,415,813),1012=>array(45,-14,557,742),1013=>array(78,-14,514,561),1014=>array(82,-14,518,561),1015=>array(79,0,560,729),1016=>array(73,-208,558,760),1017=>array(74,-14,528,742),1018=>array(42,0,560,729),1019=>array(42,-208,560,498),1020=>array(22,-208,558,560),1021=>array(74,-14,528,742),1022=>array(74,-14,528,742),1023=>array(74,-14,528,742),1024=>array(82,0,536,927),1025=>array(82,0,536,927),1026=>array(-17,-207,577,760),1027=>array(89,0,543,927),1028=>array(74,-14,528,742),1029=>array(63,-14,542,742),1030=>array(84,0,518,729),1031=>array(84,0,518,927),1032=>array(53,-14,492,729),1033=>array(-7,0,597,729),1034=>array(10,0,597,729),1035=>array(-17,0,577,760),1036=>array(57,0,598,927),1037=>array(58,0,543,927),1038=>array(14,0,588,927),1039=>array(67,-157,535,729),1040=>array(16,0,586,729),1041=>array(79,0,560,729),1042=>array(61,0,566,730),1043=>array(89,0,543,729),1044=>array(20,-157,582,729),1045=>array(82,0,536,729),1046=>array(6,0,596,729),1047=>array(61,-14,537,742),1048=>array(58,0,543,729),1049=>array(58,0,543,927),1050=>array(57,0,598,729),1051=>array(3,0,535,729),1052=>array(42,0,560,729),1053=>array(67,0,535,729),1054=>array(45,-14,557,742),1055=>array(67,0,535,729),1056=>array(79,0,560,729),1057=>array(74,-14,528,742),1058=>array(44,0,558,729),1059=>array(14,0,588,729),1060=>array(17,0,590,729),1061=>array(13,0,589,729),1062=>array(39,-157,574,729),1063=>array(49,0,550,760),1064=>array(38,0,563,729),1065=>array(38,-157,596,729),1066=>array(10,0,574,729),1067=>array(20,0,583,729),1068=>array(61,0,542,729),1069=>array(74,-14,528,742),1070=>array(0,-14,598,742),1071=>array(41,0,566,729),1072=>array(46,-14,541,560),1073=>array(32,-14,554,787),1074=>array(58,0,544,547),1075=>array(108,0,499,547),1076=>array(31,-140,577,547),1077=>array(45,-14,561,560),1078=>array(7,0,596,547),1079=>array(75,-11,527,560),1080=>array(74,0,533,547),1081=>array(74,0,533,784),1082=>array(85,0,585,547),1083=>array(34,0,551,547),1084=>array(42,0,560,547),1085=>array(84,0,523,547),1086=>array(48,-14,554,560),1087=>array(84,0,523,547),1088=>array(73,-208,558,560),1089=>array(82,-14,518,561),1090=>array(80,0,523,547),1091=>array(29,-207,574,547),1092=>array(39,-208,563,760),1093=>array(27,0,575,547),1094=>array(47,-140,563,547),1095=>array(67,0,518,547),1096=>array(38,0,563,547),1097=>array(28,-140,596,547),1098=>array(20,0,568,547),1099=>array(15,0,586,547),1100=>array(67,0,518,547),1101=>array(82,-14,518,560),1102=>array(27,-14,568,560),1103=>array(47,0,541,547),1104=>array(45,-14,561,800),1105=>array(45,-14,561,774),1106=>array(10,-207,558,760),1107=>array(108,0,505,800),1108=>array(82,-14,518,561),1109=>array(84,-14,521,560),1110=>array(70,0,569,813),1111=>array(70,0,569,774),1112=>array(70,-207,415,813),1113=>array(2,0,599,547),1114=>array(17,0,599,547),1115=>array(10,0,532,760),1116=>array(85,0,585,800),1117=>array(74,0,533,800),1118=>array(29,-207,574,784),1119=>array(83,-140,523,547),1122=>array(10,0,574,729),1123=>array(20,0,568,760),1138=>array(45,-14,557,742),1139=>array(48,-14,554,560),1168=>array(89,0,543,878),1169=>array(108,0,499,700),1170=>array(23,0,543,729),1171=>array(45,0,499,547),1172=>array(89,-207,566,729),1173=>array(108,-207,523,547),1174=>array(6,-157,596,729),1175=>array(7,-140,597,547),1176=>array(61,-196,537,742),1177=>array(75,-196,527,560),1178=>array(57,-157,598,729),1179=>array(85,-140,585,547),1186=>array(18,-157,602,729),1187=>array(14,-140,594,547),1188=>array(38,0,592,729),1189=>array(38,0,590,547),1194=>array(74,-196,528,742),1195=>array(82,-196,518,561),1196=>array(44,-157,558,729),1197=>array(80,-140,523,547),1198=>array(4,0,598,729),1199=>array(28,-208,574,547),1200=>array(4,0,598,729),1201=>array(28,-208,574,547),1202=>array(13,-157,589,729),1203=>array(27,-140,575,547),1210=>array(49,0,550,760),1211=>array(84,0,523,760),1216=>array(84,0,518,729),1217=>array(6,0,596,927),1218=>array(7,0,596,784),1219=>array(57,-207,590,729),1220=>array(85,-207,573,547),1223=>array(67,-207,535,729),1224=>array(84,-207,523,547),1227=>array(49,-157,550,760),1228=>array(67,-140,518,547),1231=>array(189,0,332,760),1232=>array(16,0,586,927),1233=>array(46,-14,541,784),1234=>array(16,0,586,927),1235=>array(46,-14,541,774),1236=>array(0,0,576,729),1237=>array(7,-14,580,560),1238=>array(82,0,536,927),1239=>array(45,-14,561,784),1240=>array(45,-14,557,742),1241=>array(45,-14,561,560),1242=>array(45,-14,557,927),1243=>array(45,-14,561,762),1244=>array(6,0,596,927),1245=>array(7,0,596,762),1246=>array(61,-14,537,927),1247=>array(75,-11,527,762),1248=>array(5,-14,597,729),1249=>array(54,-215,548,547),1250=>array(58,0,543,913),1251=>array(74,0,533,760),1252=>array(58,0,543,927),1253=>array(74,0,533,762),1254=>array(45,-14,557,927),1255=>array(48,-14,554,762),1256=>array(45,-14,557,742),1257=>array(48,-14,554,560),1258=>array(45,-14,557,927),1259=>array(48,-14,554,762),1260=>array(74,-14,528,927),1261=>array(82,-14,518,762),1262=>array(14,0,588,913),1263=>array(29,-207,574,760),1264=>array(14,0,588,927),1265=>array(29,-207,574,762),1266=>array(14,0,588,927),1267=>array(29,-207,574,800),1268=>array(49,0,550,927),1269=>array(67,0,518,762),1270=>array(89,-157,543,729),1271=>array(108,-140,499,547),1272=>array(20,0,583,927),1273=>array(15,0,586,762),1296=>array(61,-14,537,742),1297=>array(73,-11,510,557),1306=>array(45,-137,557,742),1307=>array(44,-208,529,560),1308=>array(0,0,602,729),1309=>array(0,0,602,547),1329=>array(35,-31,567,729),1330=>array(48,0,554,743),1331=>array(16,0,585,743),1332=>array(16,0,585,743),1333=>array(48,-14,561,729),1334=>array(38,0,564,743),1335=>array(55,0,547,729),1336=>array(48,0,554,743),1337=>array(21,-14,581,743),1338=>array(16,-14,585,729),1339=>array(52,0,550,729),1340=>array(75,0,527,729),1341=>array(38,-13,564,729),1342=>array(17,-14,584,742),1343=>array(52,0,550,729),1344=>array(31,-37,571,729),1345=>array(35,-31,567,743),1346=>array(16,0,585,743),1347=>array(35,0,567,741),1348=>array(16,-14,585,729),1349=>array(24,-14,577,741),1350=>array(16,-14,585,729),1351=>array(37,-13,565,729),1352=>array(52,0,550,743),1353=>array(38,-39,564,743),1354=>array(25,0,577,741),1355=>array(35,0,566,741),1356=>array(16,0,585,743),1357=>array(52,-14,550,729),1358=>array(16,0,585,729),1359=>array(51,-14,550,742),1360=>array(52,0,550,743),1361=>array(24,-13,577,741),1362=>array(55,0,547,729),1363=>array(15,0,586,729),1364=>array(25,0,577,741),1365=>array(45,-14,557,742),1366=>array(15,-14,586,729),1369=>array(231,481,371,760),1370=>array(200,411,401,730),1371=>array(133,616,468,800),1372=>array(66,618,535,893),1373=>array(133,616,468,800),1374=>array(33,590,569,906),1375=>array(92,618,510,760),1377=>array(39,-13,563,547),1378=>array(73,-208,529,560),1379=>array(32,-208,570,560),1380=>array(50,-208,552,560),1381=>array(70,-14,532,760),1382=>array(32,-208,570,560),1383=>array(88,0,514,760),1384=>array(73,-208,529,560),1385=>array(26,-208,575,560),1386=>array(32,-14,570,760),1387=>array(82,-208,521,760),1388=>array(160,-208,442,547),1389=>array(39,-208,563,760),1390=>array(48,-14,554,760),1391=>array(81,-208,521,760),1392=>array(82,0,521,760),1393=>array(75,-14,527,760),1394=>array(50,-208,552,560),1395=>array(67,-14,534,741),1396=>array(81,-14,583,760),1397=>array(128,-207,474,547),1398=>array(50,-13,552,760),1399=>array(77,-208,525,559),1400=>array(82,0,521,560),1401=>array(110,-208,492,579),1402=>array(39,-208,563,547),1403=>array(67,-208,535,559),1404=>array(57,0,545,560),1405=>array(81,-14,521,547),1406=>array(47,-208,555,760),1407=>array(40,-13,562,560),1408=>array(82,-208,521,560),1409=>array(57,-207,544,561),1410=>array(92,0,510,547),1411=>array(40,-208,562,760),1412=>array(32,-208,570,560),1413=>array(48,-14,554,560),1414=>array(21,-208,581,760),1415=>array(22,-14,580,760),1417=>array(220,0,382,519),1418=>array(147,188,455,359),1542=>array(29,-19,578,928),1543=>array(29,-19,578,928),1545=>array(0,0,602,635),1546=>array(0,0,602,635),1548=>array(215,0,388,274),1557=>array(168,623,425,896),1563=>array(195,0,368,637),1567=>array(82,0,488,742),1569=>array(203,13,522,483),1570=>array(109,0,492,973),1571=>array(211,0,388,1041),1572=>array(37,-244,572,633),1573=>array(211,-329,388,760),1574=>array(0,-171,602,609),1575=>array(229,0,372,760),1576=>array(13,-172,597,263),1577=>array(86,-28,518,549),1578=>array(13,-18,597,427),1579=>array(13,-18,597,598),1580=>array(43,-244,584,444),1581=>array(43,-244,584,444),1582=>array(43,-244,584,623),1583=>array(113,-19,537,456),1584=>array(113,-19,537,658),1585=>array(-25,-246,565,267),1586=>array(-25,-246,565,481),1587=>array(-96,-240,602,366),1588=>array(-96,-240,602,671),1589=>array(-139,-240,594,319),1590=>array(-139,-240,594,449),1591=>array(5,0,588,760),1592=>array(5,0,588,760),1593=>array(35,-244,589,549),1594=>array(35,-244,589,701),1600=>array(-16,0,618,110),1601=>array(-52,-64,602,619),1602=>array(0,-230,602,696),1603=>array(4,-46,593,760),1604=>array(0,-181,568,760),1605=>array(29,-240,563,357),1606=>array(9,-162,586,464),1607=>array(86,-28,518,358),1608=>array(37,-244,572,330),1609=>array(0,-171,602,432),1610=>array(0,-323,602,432),1611=>array(148,563,453,854),1612=>array(111,552,456,884),1613=>array(148,-295,453,-4),1614=>array(148,563,453,729),1615=>array(146,580,456,884),1616=>array(148,-171,453,-4),1617=>array(124,591,478,869),1618=>array(154,597,448,891),1619=>array(109,580,492,743),1620=>array(211,573,388,820),1621=>array(211,-293,388,-47),1626=>array(152,616,449,775),1632=>array(221,189,382,373),1633=>array(178,0,424,684),1634=>array(61,0,563,684),1635=>array(30,0,583,684),1636=>array(84,-10,486,684),1637=>array(50,-22,553,684),1638=>array(32,0,570,684),1639=>array(44,0,560,684),1640=>array(44,0,560,684),1641=>array(60,0,561,684),1642=>array(66,0,536,635),1643=>array(132,-129,470,318),1644=>array(215,485,388,760),1645=>array(71,101,531,537),1652=>array(211,629,388,876),1657=>array(13,-18,597,604),1658=>array(13,-18,597,549),1659=>array(13,-357,597,263),1662=>array(13,-355,597,263),1663=>array(13,-18,597,600),1664=>array(13,-340,597,263),1667=>array(43,-244,584,444),1668=>array(43,-244,584,444),1670=>array(43,-244,586,444),1671=>array(43,-244,586,444),1681=>array(-25,-246,598,611),1688=>array(-25,-246,598,655),1700=>array(-52,-64,602,785),1705=>array(5,-60,670,803),1711=>array(5,-60,671,991),1726=>array(-46,-42,602,498),1740=>array(0,-171,602,432),1776=>array(221,189,382,373),1777=>array(178,0,424,684),1778=>array(61,0,563,684),1779=>array(30,0,583,684),1780=>array(30,0,550,684),1781=>array(37,-13,564,684),1782=>array(104,0,497,684),1783=>array(44,0,560,684),1784=>array(44,0,560,684),1785=>array(60,0,561,684),3713=>array(30,-10,556,560),3714=>array(53,-39,609,568),3716=>array(59,-10,561,568),3719=>array(70,-238,535,568),3720=>array(37,-0,565,575),3722=>array(35,-238,598,563),3725=>array(50,-14,552,560),3732=>array(60,-14,542,560),3733=>array(26,-15,576,579),3734=>array(13,-240,554,560),3735=>array(41,-8,562,571),3737=>array(37,-14,564,568),3738=>array(61,-8,541,561),3739=>array(61,-8,541,760),3740=>array(41,-8,623,648),3741=>array(41,-8,561,760),3742=>array(35,-8,566,561),3743=>array(35,-8,566,760),3745=>array(8,-14,564,547),3746=>array(50,-14,552,760),3747=>array(49,-8,566,568),3749=>array(30,-8,572,568),3751=>array(39,-13,559,560),3754=>array(30,-8,634,648),3755=>array(15,-12,582,575),3757=>array(43,-8,567,568),3758=>array(26,-8,606,617),3759=>array(0,-126,602,579),3760=>array(40,-6,571,567),3761=>array(40,620,571,896),3762=>array(52,0,550,588),3763=>array(-426,0,550,846),3764=>array(5,622,597,950),3765=>array(-52,633,615,962),3766=>array(4,622,597,950),3767=>array(4,633,671,962),3768=>array(176,-385,437,-55),3769=>array(129,-316,428,-28),3771=>array(-10,610,612,896),3772=>array(-4,-311,606,-48),3784=>array(243,659,359,844),3785=>array(-2,622,604,918),3786=>array(25,619,731,963),3787=>array(133,612,469,917),3788=>array(-4,603,606,866),3789=>array(176,639,426,846),4304=>array(48,0,555,567),4305=>array(49,0,554,758),4306=>array(39,-196,562,521),4307=>array(13,-197,589,516),4308=>array(47,-196,555,521),4309=>array(48,-196,555,521),4310=>array(48,0,555,757),4311=>array(13,0,589,516),4312=>array(48,0,555,521),4313=>array(48,-196,555,512),4314=>array(48,-196,555,521),4315=>array(49,0,555,757),4316=>array(48,0,555,745),4317=>array(13,0,589,516),4318=>array(48,0,555,754),4319=>array(47,-196,555,539),4320=>array(13,0,589,765),4321=>array(47,0,555,741),4322=>array(9,-197,593,656),4323=>array(11,-197,555,531),4324=>array(13,-196,589,521),4325=>array(48,-196,554,741),4326=>array(13,-197,589,521),4327=>array(49,-196,555,506),4328=>array(1,0,558,757),4329=>array(48,0,555,757),4330=>array(28,-196,574,539),4331=>array(48,0,555,741),4332=>array(46,0,602,757),4333=>array(48,-196,554,741),4334=>array(47,0,554,741),4335=>array(47,-196,555,610),4336=>array(48,0,555,757),4337=>array(48,-196,555,757),4338=>array(48,-134,555,521),4339=>array(47,-196,555,521),4340=>array(47,-196,555,757),4341=>array(53,0,575,757),4342=>array(13,-196,589,521),4343=>array(38,-197,564,521),4344=>array(48,-197,555,534),4345=>array(39,-196,563,527),4346=>array(62,-95,541,521),4347=>array(132,24,470,492),4348=>array(187,359,415,758),7426=>array(26,-14,599,560),7432=>array(50,-11,552,560),7433=>array(51,-264,550,549),7444=>array(7,-14,591,560),7446=>array(48,273,554,560),7447=>array(47,-14,554,273),7453=>array(20,0,581,440),7454=>array(20,-2,571,438),7455=>array(21,-0,581,523),7468=>array(121,326,480,734),7469=>array(119,326,482,734),7470=>array(142,326,460,735),7472=>array(146,326,455,734),7473=>array(158,326,444,734),7474=>array(158,326,444,734),7475=>array(146,318,457,742),7476=>array(153,326,448,734),7477=>array(164,326,438,734),7478=>array(163,318,439,734),7479=>array(131,326,472,734),7480=>array(158,326,443,734),7481=>array(138,326,464,734),7482=>array(148,326,454,734),7483=>array(148,326,454,734),7484=>array(140,318,462,742),7486=>array(149,326,452,734),7487=>array(132,326,470,734),7488=>array(139,326,463,734),7489=>array(145,318,458,734),7490=>array(111,326,490,734),7491=>array(145,318,457,640),7492=>array(145,318,457,640),7493=>array(148,318,454,640),7494=>array(121,318,481,640),7495=>array(148,318,454,751),7496=>array(148,318,454,751),7497=>array(139,318,463,640),7498=>array(139,318,463,640),7499=>array(143,320,459,640),7500=>array(143,320,459,640),7501=>array(147,210,455,640),7502=>array(144,178,458,633),7503=>array(144,326,458,751),7504=>array(136,326,466,640),7505=>array(163,210,439,640),7506=>array(142,318,460,640),7507=>array(164,318,438,640),7508=>array(142,479,460,640),7509=>array(142,318,460,479),7510=>array(148,209,454,640),7511=>array(153,326,449,719),7512=>array(163,318,439,632),7513=>array(125,326,478,573),7514=>array(136,319,466,632),7515=>array(136,326,466,632),7522=>array(144,0,458,455),7523=>array(167,0,436,314),7524=>array(163,-8,439,306),7525=>array(136,0,466,306),7543=>array(48,-207,535,561),7544=>array(153,326,448,734),7547=>array(52,0,551,547),7557=>array(44,-207,534,760),7579=>array(148,318,454,640),7580=>array(164,318,438,640),7581=>array(161,288,441,640),7582=>array(143,318,459,755),7583=>array(143,320,459,640),7584=>array(161,326,441,751),7585=>array(182,205,420,632),7586=>array(149,209,453,632),7587=>array(163,207,439,632),7588=>array(144,326,458,751),7589=>array(156,325,446,632),7590=>array(144,326,458,632),7591=>array(144,326,458,632),7592=>array(140,210,462,781),7593=>array(146,205,456,751),7594=>array(146,210,456,751),7595=>array(184,326,418,632),7596=>array(136,209,466,640),7597=>array(136,209,466,632),7598=>array(131,205,471,640),7599=>array(132,205,470,640),7600=>array(148,326,454,632),7601=>array(142,318,460,640),7602=>array(118,209,484,753),7603=>array(164,209,438,640),7604=>array(139,210,463,751),7605=>array(153,210,449,719),7606=>array(139,318,463,632),7607=>array(138,298,464,632),7609=>array(137,326,465,632),7610=>array(136,326,466,632),7611=>array(160,326,442,632),7612=>array(125,209,477,632),7613=>array(147,295,455,632),7614=>array(145,206,457,632),7615=>array(142,319,460,757),7680=>array(16,-245,586,729),7681=>array(46,-245,541,560),7682=>array(61,0,566,927),7683=>array(73,-14,558,774),7684=>array(61,-226,566,730),7685=>array(73,-226,558,760),7686=>array(61,-198,566,730),7687=>array(73,-198,558,760),7688=>array(74,-196,532,927),7689=>array(82,-196,555,800),7690=>array(67,0,557,927),7691=>array(44,-14,529,774),7692=>array(67,-226,557,729),7693=>array(44,-226,529,760),7694=>array(67,-198,557,729),7695=>array(44,-198,529,760),7696=>array(67,-196,557,729),7697=>array(44,-196,529,760),7698=>array(67,-237,557,729),7699=>array(44,-237,529,760),7704=>array(82,-237,536,729),7705=>array(45,-237,561,560),7706=>array(82,-238,536,729),7707=>array(45,-238,561,560),7708=>array(82,-196,536,927),7709=>array(45,-196,561,784),7710=>array(89,0,543,927),7711=>array(85,0,529,927),7712=>array(57,-14,552,913),7713=>array(48,-207,535,760),7714=>array(67,0,535,927),7715=>array(84,0,523,927),7716=>array(67,-226,535,729),7717=>array(84,-226,523,760),7718=>array(67,0,535,927),7719=>array(84,0,523,934),7720=>array(16,-196,535,729),7721=>array(33,-196,523,760),7722=>array(67,-240,535,729),7723=>array(84,-240,523,760),7724=>array(84,-238,518,729),7725=>array(70,-238,569,813),7728=>array(57,0,598,927),7729=>array(85,0,585,927),7730=>array(57,-226,598,729),7731=>array(85,-226,585,760),7732=>array(57,-198,598,729),7733=>array(85,-198,585,760),7734=>array(110,-226,562,729),7735=>array(44,-226,534,760),7736=>array(110,-226,562,913),7737=>array(44,-226,534,913),7738=>array(110,-198,562,729),7739=>array(44,-198,534,760),7740=>array(110,-237,562,729),7741=>array(44,-237,534,760),7742=>array(42,0,560,927),7743=>array(40,0,564,800),7744=>array(42,0,560,927),7745=>array(40,0,564,774),7746=>array(42,-226,560,729),7747=>array(40,-226,564,560),7748=>array(58,0,543,927),7749=>array(84,0,523,774),7750=>array(58,-226,543,729),7751=>array(84,-226,523,560),7752=>array(58,-198,543,729),7753=>array(84,-198,523,560),7754=>array(58,-237,543,729),7755=>array(84,-237,523,560),7756=>array(45,-14,557,997),7757=>array(48,-14,554,997),7764=>array(79,0,560,931),7765=>array(73,-208,558,800),7766=>array(79,0,560,927),7767=>array(73,-208,558,774),7768=>array(65,0,602,927),7769=>array(142,0,562,774),7770=>array(65,-226,602,729),7771=>array(142,-226,562,560),7772=>array(65,-226,602,913),7773=>array(142,-226,562,760),7774=>array(65,-198,602,729),7775=>array(142,-198,562,560),7776=>array(63,-14,542,927),7777=>array(84,-14,521,774),7778=>array(63,-226,542,742),7779=>array(84,-226,521,560),7784=>array(63,-226,542,927),7785=>array(84,-226,521,774),7786=>array(44,0,558,927),7787=>array(54,0,524,927),7788=>array(44,-226,558,729),7789=>array(54,-226,524,702),7790=>array(44,-198,558,729),7791=>array(54,-198,524,702),7792=>array(44,-237,558,729),7793=>array(54,-237,524,702),7794=>array(52,-226,550,729),7795=>array(78,-226,518,547),7796=>array(52,-238,550,729),7797=>array(78,-238,518,547),7798=>array(52,-237,550,729),7799=>array(78,-237,518,547),7800=>array(52,-14,550,997),7801=>array(78,-14,518,997),7804=>array(28,0,574,916),7805=>array(39,0,563,758),7806=>array(28,-226,574,729),7807=>array(39,-226,563,547),7808=>array(0,0,602,931),7809=>array(0,0,602,803),7810=>array(0,0,602,931),7811=>array(0,0,602,803),7812=>array(0,0,602,922),7813=>array(0,0,602,740),7814=>array(0,0,602,927),7815=>array(0,0,602,774),7816=>array(0,-226,602,729),7817=>array(0,-226,602,547),7818=>array(13,0,589,927),7819=>array(27,0,575,774),7820=>array(13,0,589,927),7821=>array(27,0,575,734),7822=>array(4,0,598,927),7823=>array(29,-207,574,774),7824=>array(56,0,567,931),7825=>array(79,0,528,803),7826=>array(56,-226,567,729),7827=>array(79,-226,528,547),7828=>array(56,-198,567,729),7829=>array(79,-198,528,547),7830=>array(84,-198,523,760),7831=>array(54,0,524,876),7832=>array(0,0,602,898),7833=>array(29,-207,574,898),7835=>array(85,0,529,927),7839=>array(48,-14,554,766),7840=>array(16,-226,586,729),7841=>array(46,-226,541,560),7852=>array(16,-226,586,931),7853=>array(46,-226,541,803),7856=>array(16,0,586,997),7857=>array(46,-14,541,954),7862=>array(16,-226,586,927),7863=>array(46,-226,541,759),7864=>array(82,-226,536,729),7865=>array(45,-226,561,560),7868=>array(82,0,536,928),7869=>array(45,-14,561,762),7878=>array(82,-226,536,931),7879=>array(45,-226,561,803),7882=>array(84,-226,518,729),7883=>array(70,-226,569,813),7884=>array(45,-226,557,742),7885=>array(48,-226,554,560),7896=>array(45,-226,557,931),7897=>array(48,-226,554,803),7898=>array(2,-14,600,927),7899=>array(4,-14,598,800),7900=>array(2,-14,600,927),7901=>array(4,-14,598,800),7904=>array(2,-14,600,928),7905=>array(4,-14,598,778),7906=>array(2,-226,600,759),7907=>array(4,-226,598,570),7908=>array(52,-226,550,729),7909=>array(78,-226,518,547),7912=>array(2,-14,600,927),7913=>array(3,-14,599,800),7914=>array(2,-14,600,927),7915=>array(3,-14,599,800),7918=>array(2,-14,600,928),7919=>array(3,-14,599,778),7920=>array(2,-226,600,759),7921=>array(3,-226,599,570),7922=>array(4,0,598,931),7923=>array(29,-207,574,803),7924=>array(4,-226,598,729),7925=>array(29,-226,574,547),7928=>array(4,0,598,928),7929=>array(29,-207,574,762),7936=>array(26,-12,568,806),7937=>array(26,-12,568,806),7938=>array(26,-12,568,806),7939=>array(26,-12,568,806),7940=>array(26,-12,568,806),7941=>array(26,-12,568,806),7942=>array(26,-12,568,978),7943=>array(26,-12,568,978),7944=>array(7,0,586,806),7945=>array(-17,0,586,806),7946=>array(-300,0,586,806),7947=>array(-305,0,586,806),7948=>array(-195,0,586,806),7949=>array(-225,0,586,806),7950=>array(-84,0,586,978),7951=>array(-108,0,586,978),7952=>array(73,-11,510,806),7953=>array(73,-11,510,806),7954=>array(71,-11,524,806),7955=>array(66,-11,529,806),7956=>array(73,-11,559,806),7957=>array(73,-11,568,806),7960=>array(-117,0,536,806),7961=>array(-117,0,536,806),7962=>array(-400,0,536,806),7963=>array(-405,0,536,806),7964=>array(-325,0,536,806),7965=>array(-349,0,536,806),7968=>array(84,-208,523,806),7969=>array(84,-208,523,806),7970=>array(71,-208,524,806),7971=>array(66,-208,529,806),7972=>array(84,-208,559,806),7973=>array(84,-208,568,806),7974=>array(84,-208,523,978),7975=>array(84,-208,523,978),7976=>array(-142,0,535,806),7977=>array(-142,0,535,806),7978=>array(-427,0,535,806),7979=>array(-432,0,535,806),7980=>array(-354,0,535,806),7981=>array(-374,0,535,806),7982=>array(-230,0,535,978),7983=>array(-230,0,535,978),7984=>array(132,0,478,806),7985=>array(132,0,478,806),7986=>array(71,0,524,806),7987=>array(66,0,529,806),7988=>array(120,0,559,806),7989=>array(100,0,568,806),7990=>array(131,0,478,978),7991=>array(131,0,478,978),7992=>array(-117,0,518,806),7993=>array(-117,0,518,806),7994=>array(-388,0,518,806),7995=>array(-403,0,518,806),7996=>array(-320,0,518,806),7997=>array(-344,0,518,806),7998=>array(-208,0,518,978),7999=>array(-208,0,518,978),8000=>array(48,-14,554,806),8001=>array(48,-14,554,806),8002=>array(48,-14,554,806),8003=>array(48,-14,554,806),8004=>array(48,-14,559,806),8005=>array(48,-14,568,806),8008=>array(-81,-14,557,806),8009=>array(-117,-14,557,806),8010=>array(-391,-14,557,806),8011=>array(-396,-14,557,806),8012=>array(-232,-14,557,806),8013=>array(-256,-14,557,806),8016=>array(37,0,565,806),8017=>array(37,0,565,806),8018=>array(37,0,565,806),8019=>array(37,0,565,806),8020=>array(37,0,565,806),8021=>array(37,0,568,806),8022=>array(37,0,565,978),8023=>array(37,0,565,978),8025=>array(-190,0,598,806),8027=>array(-447,0,598,806),8029=>array(-425,0,598,806),8031=>array(-287,0,598,978),8032=>array(31,-14,571,806),8033=>array(31,-14,571,806),8034=>array(31,-14,571,806),8035=>array(31,-14,571,806),8036=>array(31,-14,571,806),8037=>array(31,-14,571,806),8038=>array(31,-14,571,978),8039=>array(31,-14,571,978),8040=>array(-71,0,558,806),8041=>array(-105,0,558,806),8042=>array(-391,0,558,806),8043=>array(-396,0,558,806),8044=>array(-220,0,558,806),8045=>array(-239,0,558,806),8046=>array(-152,0,558,978),8047=>array(-189,0,558,978),8048=>array(26,-12,568,800),8049=>array(26,-12,568,800),8050=>array(73,-11,510,800),8051=>array(73,-11,510,800),8052=>array(84,-208,523,800),8053=>array(84,-208,523,800),8054=>array(97,0,478,800),8055=>array(132,0,505,800),8056=>array(48,-14,554,800),8057=>array(48,-14,554,800),8058=>array(37,0,565,800),8059=>array(37,0,565,800),8060=>array(31,-14,571,800),8061=>array(31,-14,571,800),8064=>array(26,-208,568,806),8065=>array(26,-208,568,806),8066=>array(26,-208,568,806),8067=>array(26,-208,568,806),8068=>array(26,-208,568,806),8069=>array(26,-208,568,806),8070=>array(26,-208,568,978),8071=>array(26,-208,568,978),8072=>array(7,-208,586,806),8073=>array(-17,-208,586,806),8074=>array(-300,-208,586,806),8075=>array(-305,-208,586,806),8076=>array(-195,-208,586,806),8077=>array(-225,-208,586,806),8078=>array(-84,-208,586,978),8079=>array(-108,-208,586,978),8080=>array(84,-208,523,806),8081=>array(84,-208,523,806),8082=>array(71,-208,524,806),8083=>array(66,-208,529,806),8084=>array(84,-208,559,806),8085=>array(84,-208,568,806),8086=>array(84,-208,523,978),8087=>array(84,-208,523,978),8088=>array(-142,-208,535,806),8089=>array(-142,-208,535,806),8090=>array(-427,-208,535,806),8091=>array(-432,-208,535,806),8092=>array(-354,-208,535,806),8093=>array(-374,-208,535,806),8094=>array(-230,-208,535,978),8095=>array(-230,-208,535,978),8096=>array(31,-208,571,806),8097=>array(31,-208,571,806),8098=>array(31,-208,571,806),8099=>array(31,-208,571,806),8100=>array(31,-208,571,806),8101=>array(31,-208,571,806),8102=>array(31,-208,571,978),8103=>array(31,-208,571,978),8104=>array(-71,-208,558,806),8105=>array(-105,-208,558,806),8106=>array(-391,-208,558,806),8107=>array(-396,-208,558,806),8108=>array(-220,-208,558,806),8109=>array(-239,-208,558,806),8110=>array(-152,-208,558,978),8111=>array(-189,-208,558,978),8112=>array(26,-12,568,784),8113=>array(26,-12,568,760),8114=>array(26,-208,568,800),8115=>array(26,-208,568,559),8116=>array(26,-208,568,800),8118=>array(26,-12,568,778),8119=>array(26,-208,568,778),8120=>array(16,0,586,927),8121=>array(16,0,586,913),8122=>array(-132,0,586,800),8123=>array(-40,0,586,800),8124=>array(16,-208,586,729),8125=>array(222,595,379,806),8126=>array(253,-208,383,-45),8127=>array(222,595,379,806),8128=>array(131,638,471,778),8129=>array(131,654,471,944),8130=>array(84,-208,523,800),8131=>array(84,-208,523,560),8132=>array(84,-208,523,800),8134=>array(84,-208,523,778),8135=>array(84,-208,523,778),8136=>array(-245,0,536,800),8137=>array(-171,0,536,800),8138=>array(-259,0,535,800),8139=>array(-191,0,535,800),8140=>array(67,-208,535,729),8141=>array(71,595,524,806),8142=>array(120,595,559,806),8143=>array(131,595,471,978),8144=>array(132,0,478,784),8145=>array(132,0,478,760),8146=>array(97,0,478,980),8147=>array(132,0,505,999),8150=>array(131,0,478,778),8151=>array(131,0,478,944),8152=>array(84,0,518,927),8153=>array(84,0,518,913),8154=>array(-230,0,518,800),8155=>array(-162,0,518,800),8157=>array(66,595,529,806),8158=>array(100,595,568,806),8159=>array(131,595,471,978),8160=>array(37,0,565,784),8161=>array(37,0,565,760),8162=>array(37,0,565,980),8163=>array(37,0,565,999),8164=>array(73,-208,558,806),8165=>array(73,-208,558,806),8166=>array(37,0,565,778),8167=>array(37,0,565,944),8168=>array(4,0,598,927),8169=>array(4,0,598,913),8170=>array(-269,0,598,800),8171=>array(-242,0,598,800),8172=>array(-127,0,560,806),8173=>array(97,654,455,980),8174=>array(147,654,505,999),8175=>array(97,616,373,800),8178=>array(31,-208,571,800),8179=>array(31,-208,571,547),8180=>array(31,-208,571,800),8182=>array(31,-14,571,778),8183=>array(31,-208,571,778),8184=>array(-223,-14,557,800),8185=>array(-83,-14,557,800),8186=>array(-218,0,558,800),8187=>array(-62,0,558,800),8188=>array(44,-208,558,713),8189=>array(229,616,505,800),8190=>array(222,595,379,806),8208=>array(147,217,455,359),8209=>array(147,217,455,359),8210=>array(0,217,602,337),8211=>array(0,217,602,337),8212=>array(0,217,602,337),8213=>array(0,217,602,337),8214=>array(125,-236,476,764),8215=>array(0,-236,602,-9),8216=>array(211,441,412,760),8217=>array(211,441,412,760),8218=>array(177,-140,378,179),8219=>array(211,441,412,760),8220=>array(74,441,528,760),8221=>array(73,441,528,760),8222=>array(73,-140,528,179),8223=>array(73,441,528,760),8224=>array(76,-96,525,729),8225=>array(76,-96,525,729),8226=>array(125,195,477,547),8227=>array(125,156,516,586),8230=>array(28,0,574,179),8240=>array(0,0,602,699),8241=>array(0,0,602,699),8242=>array(191,547,411,729),8243=>array(99,547,503,729),8244=>array(8,547,594,729),8245=>array(191,547,411,729),8246=>array(98,547,504,729),8247=>array(8,547,594,729),8249=>array(169,69,398,517),8250=>array(205,69,434,517),8252=>array(85,0,517,729),8253=>array(114,0,520,742),8254=>array(0,663,602,755),8261=>array(206,-132,454,760),8262=>array(148,-132,396,760),8263=>array(19,0,583,742),8264=>array(19,0,525,742),8265=>array(77,0,583,742),8267=>array(82,-96,568,729),8304=>array(136,319,466,742),8305=>array(144,326,458,781),8308=>array(120,326,456,734),8309=>array(143,319,461,734),8310=>array(140,318,471,742),8311=>array(139,326,454,734),8312=>array(138,319,463,742),8313=>array(130,319,461,742),8314=>array(132,352,470,652),8315=>array(132,469,470,535),8316=>array(139,407,464,596),8317=>array(218,252,384,751),8318=>array(218,252,384,751),8319=>array(161,326,441,640),8320=>array(136,-7,466,416),8321=>array(153,0,469,408),8322=>array(134,0,459,416),8323=>array(140,-7,470,416),8324=>array(120,0,456,408),8325=>array(143,-7,461,408),8326=>array(140,-8,471,416),8327=>array(139,0,454,408),8328=>array(138,-7,463,416),8329=>array(130,-7,461,416),8330=>array(132,25,470,326),8331=>array(132,143,470,208),8332=>array(139,81,464,270),8333=>array(218,-74,384,425),8334=>array(218,-74,384,425),8336=>array(145,-8,457,313),8337=>array(139,-8,463,313),8338=>array(142,-8,460,313),8339=>array(125,0,477,307),8340=>array(139,-8,463,313),8341=>array(161,0,441,426),8342=>array(144,0,458,425),8343=>array(144,0,458,426),8344=>array(136,0,466,313),8345=>array(161,0,441,313),8346=>array(148,-117,454,313),8347=>array(161,-7,441,314),8348=>array(153,0,449,393),8352=>array(0,0,595,729),8353=>array(43,-44,554,778),8354=>array(34,-14,551,742),8355=>array(0,0,544,729),8356=>array(54,0,541,742),8357=>array(19,-93,582,640),8358=>array(0,0,602,729),8359=>array(2,-14,601,729),8360=>array(4,-14,598,729),8361=>array(0,0,602,729),8362=>array(2,-14,601,729),8363=>array(29,-196,585,760),8364=>array(3,-14,526,742),8365=>array(24,0,584,729),8366=>array(2,0,601,729),8367=>array(4,-223,593,742),8368=>array(12,-14,590,742),8369=>array(29,0,602,729),8370=>array(21,-81,573,809),8371=>array(12,0,590,729),8372=>array(0,-14,602,742),8373=>array(22,-147,580,760),8376=>array(44,0,558,729),8377=>array(50,0,560,729),8450=>array(68,-14,524,742),8453=>array(3,-24,598,752),8461=>array(11,0,588,729),8462=>array(29,0,547,760),8463=>array(29,0,547,760),8469=>array(24,0,580,729),8470=>array(0,0,597,729),8471=>array(0,61,602,663),8473=>array(36,0,573,729),8474=>array(0,-146,598,742),8477=>array(4,0,597,729),8482=>array(0,447,550,729),8484=>array(6,0,584,729),8486=>array(44,0,558,713),8490=>array(57,0,598,729),8491=>array(16,0,586,928),8494=>array(0,-12,602,647),8520=>array(-9,0,501,813),8531=>array(23,-139,568,810),8532=>array(8,-139,568,818),8533=>array(23,-139,559,810),8534=>array(8,-139,559,818),8535=>array(14,-139,559,818),8536=>array(-6,-139,559,810),8537=>array(23,-140,569,810),8538=>array(17,-140,569,810),8539=>array(23,-139,562,810),8540=>array(14,-139,562,818),8541=>array(17,-139,562,810),8542=>array(13,-139,562,810),8543=>array(23,244,558,810),8592=>array(32,97,570,451),8593=>array(124,0,478,538),8594=>array(32,97,570,451),8595=>array(124,0,478,538),8596=>array(32,97,570,451),8597=>array(124,0,478,538),8598=>array(75,-10,522,437),8599=>array(80,-10,527,437),8600=>array(80,-15,526,432),8601=>array(75,-15,522,432),8602=>array(32,97,570,451),8603=>array(32,97,570,451),8604=>array(29,178,566,437),8605=>array(36,178,573,437),8606=>array(32,97,570,451),8607=>array(124,0,478,538),8608=>array(32,97,570,451),8609=>array(124,0,478,538),8610=>array(32,97,570,451),8611=>array(32,97,570,451),8612=>array(32,97,570,451),8613=>array(124,0,478,538),8614=>array(32,97,570,451),8615=>array(124,0,478,538),8616=>array(124,0,478,538),8617=>array(32,97,570,509),8618=>array(32,97,570,509),8619=>array(32,97,570,509),8620=>array(32,97,570,509),8621=>array(32,97,570,451),8622=>array(32,87,570,460),8623=>array(28,-2,562,700),8624=>array(89,0,527,689),8625=>array(75,0,513,689),8626=>array(89,-15,527,674),8627=>array(75,-15,513,674),8628=>array(91,0,526,555),8629=>array(31,-15,586,421),8630=>array(24,168,578,506),8631=>array(24,168,578,506),8632=>array(24,-10,578,542),8633=>array(32,-15,570,634),8634=>array(27,-19,575,511),8635=>array(27,-19,575,511),8636=>array(32,219,570,451),8637=>array(32,97,570,329),8638=>array(246,0,478,538),8639=>array(124,0,356,538),8640=>array(32,219,570,451),8641=>array(32,97,570,329),8642=>array(246,0,478,538),8643=>array(124,0,356,538),8644=>array(32,-15,570,575),8645=>array(6,0,596,538),8646=>array(32,-15,570,575),8647=>array(32,-15,570,575),8648=>array(6,0,596,538),8649=>array(32,-15,570,575),8650=>array(6,0,596,538),8651=>array(32,-15,570,575),8652=>array(32,-15,570,575),8653=>array(32,97,570,451),8654=>array(32,97,570,451),8655=>array(32,97,570,451),8656=>array(32,97,570,451),8657=>array(124,0,478,538),8658=>array(32,97,570,451),8659=>array(124,0,478,538),8660=>array(32,97,570,451),8661=>array(124,0,478,538),8662=>array(61,-28,526,437),8663=>array(76,-28,541,437),8664=>array(76,-15,541,451),8665=>array(61,-15,526,451),8666=>array(32,97,570,451),8667=>array(32,97,570,451),8668=>array(32,97,570,451),8669=>array(32,97,570,451),8670=>array(124,0,478,538),8671=>array(124,0,478,538),8672=>array(32,97,570,451),8673=>array(124,0,478,538),8674=>array(32,97,570,451),8675=>array(124,0,478,538),8676=>array(32,97,570,451),8677=>array(32,97,570,451),8678=>array(2,67,570,480),8679=>array(94,0,508,567),8680=>array(32,67,600,480),8681=>array(94,0,508,567),8682=>array(94,0,508,567),8683=>array(94,0,508,567),8684=>array(94,0,508,567),8685=>array(94,0,508,567),8686=>array(94,0,508,567),8687=>array(94,0,508,567),8688=>array(32,70,600,483),8689=>array(19,-10,578,549),8690=>array(21,0,581,559),8691=>array(94,0,508,567),8692=>array(32,97,570,451),8693=>array(6,0,596,538),8694=>array(32,-139,570,687),8695=>array(32,97,570,451),8696=>array(32,97,570,451),8697=>array(32,92,570,451),8698=>array(32,97,570,451),8699=>array(32,97,570,451),8700=>array(32,97,570,457),8701=>array(2,67,570,480),8702=>array(32,67,600,480),8703=>array(2,67,600,480),8704=>array(16,0,586,729),8705=>array(11,-14,592,742),8706=>array(58,-14,544,674),8707=>array(80,0,533,729),8708=>array(80,-46,533,775),8709=>array(31,43,572,584),8710=>array(-3,0,606,695),8711=>array(-3,0,606,695),8712=>array(49,0,553,744),8713=>array(49,-96,558,840),8714=>array(48,63,554,564),8715=>array(49,0,553,744),8716=>array(49,-96,558,840),8717=>array(48,63,554,564),8719=>array(74,-213,528,741),8721=>array(62,-213,539,741),8722=>array(32,256,569,372),8723=>array(43,0,559,627),8725=>array(55,-93,547,729),8727=>array(59,77,541,542),8728=>array(138,182,463,507),8729=>array(125,168,477,520),8730=>array(24,-19,573,843),8731=>array(24,-19,573,933),8732=>array(24,-19,573,924),8733=>array(86,109,516,508),8734=>array(6,109,596,508),8735=>array(43,122,559,638),8736=>array(43,122,559,638),8743=>array(89,0,513,579),8744=>array(89,0,513,579),8745=>array(89,0,513,579),8746=>array(89,0,513,579),8747=>array(71,-204,530,892),8748=>array(0,-204,602,892),8749=>array(-21,-204,623,892),8756=>array(72,51,532,580),8757=>array(72,51,530,580),8758=>array(219,51,383,580),8759=>array(72,51,532,580),8760=>array(32,256,569,619),8761=>array(36,51,578,580),8762=>array(23,26,581,603),8763=>array(43,0,559,624),8764=>array(43,229,559,398),8765=>array(43,229,559,398),8769=>array(43,48,559,577),8770=>array(43,124,559,482),8771=>array(43,144,559,498),8772=>array(43,16,560,637),8773=>array(43,29,559,614),8774=>array(43,-42,559,614),8775=>array(43,-70,559,695),8776=>array(43,124,559,498),8777=>array(43,30,559,596),8778=>array(43,29,559,587),8779=>array(43,12,559,587),8780=>array(43,29,559,614),8781=>array(42,83,559,543),8782=>array(43,10,559,617),8783=>array(43,144,559,617),8784=>array(43,144,559,707),8785=>array(43,-81,559,707),8786=>array(43,-81,559,707),8787=>array(43,-81,560,707),8788=>array(40,124,563,503),8789=>array(40,124,563,503),8790=>array(43,144,559,482),8791=>array(43,144,559,814),8792=>array(43,144,559,715),8793=>array(43,144,559,824),8794=>array(43,144,559,824),8795=>array(43,144,559,935),8796=>array(43,144,559,889),8797=>array(43,144,559,750),8798=>array(42,144,559,801),8799=>array(42,144,559,903),8800=>array(38,-5,564,631),8801=>array(43,29,559,597),8802=>array(43,-55,559,685),8803=>array(43,-47,559,688),8804=>array(43,0,559,582),8805=>array(43,0,559,582),8806=>array(43,-116,559,633),8807=>array(43,-116,559,633),8808=>array(43,-189,559,633),8809=>array(43,-189,559,633),8813=>array(42,-54,559,680),8814=>array(43,-3,559,629),8815=>array(43,-3,559,629),8816=>array(43,-96,559,658),8817=>array(43,-96,559,656),8818=>array(43,-38,559,582),8819=>array(43,-38,559,582),8820=>array(43,-96,559,658),8821=>array(43,-98,559,656),8822=>array(43,-119,559,684),8823=>array(43,-119,559,684),8824=>array(43,-209,559,774),8825=>array(43,-209,559,774),8826=>array(42,-46,558,672),8827=>array(42,-46,558,672),8828=>array(43,-206,559,744),8829=>array(43,-206,559,744),8830=>array(43,-101,559,744),8831=>array(43,-101,559,744),8832=>array(42,-118,558,744),8833=>array(42,-118,558,744),8834=>array(43,67,559,559),8835=>array(43,67,559,559),8836=>array(43,-58,559,684),8837=>array(43,-58,559,684),8838=>array(43,-20,559,645),8839=>array(43,-20,559,645),8840=>array(43,-115,559,729),8841=>array(43,-115,559,729),8842=>array(43,-125,559,645),8843=>array(43,-125,559,645),8847=>array(43,42,559,584),8848=>array(43,42,559,584),8849=>array(43,-10,559,636),8850=>array(43,-10,559,636),8853=>array(13,25,589,604),8854=>array(13,25,589,604),8855=>array(13,25,589,604),8856=>array(13,25,589,604),8857=>array(13,25,589,604),8858=>array(13,25,589,604),8859=>array(13,25,589,604),8860=>array(13,25,589,604),8861=>array(13,25,589,604),8862=>array(24,37,579,591),8863=>array(24,37,579,591),8864=>array(24,37,579,591),8865=>array(24,37,579,591),8866=>array(32,0,569,627),8867=>array(32,0,569,627),8868=>array(32,0,569,627),8869=>array(32,0,569,627),8901=>array(219,259,382,437),8902=>array(110,183,492,545),8909=>array(43,144,559,498),8922=>array(43,-272,559,776),8923=>array(43,-272,559,776),8924=>array(43,0,559,582),8925=>array(43,0,559,582),8926=>array(43,-206,559,744),8927=>array(43,-206,559,744),8928=>array(43,-244,559,803),8929=>array(43,-244,559,803),8930=>array(43,-143,559,769),8931=>array(43,-143,559,769),8932=>array(43,-123,559,636),8933=>array(43,-123,559,636),8934=>array(43,-158,559,582),8935=>array(43,-158,559,582),8936=>array(43,-220,559,744),8937=>array(43,-220,559,744),8943=>array(28,225,574,404),8960=>array(31,43,572,584),8961=>array(56,152,540,453),8962=>array(54,0,548,596),8963=>array(71,406,530,746),8964=>array(71,-132,530,209),8965=>array(71,0,530,459),8966=>array(71,0,530,581),8968=>array(206,-132,454,760),8969=>array(148,-132,396,760),8970=>array(206,-132,454,760),8971=>array(148,-132,396,760),8972=>array(261,73,585,415),8973=>array(6,73,331,415),8974=>array(261,345,585,687),8975=>array(6,345,331,687),8976=>array(43,177,559,439),8977=>array(35,113,567,646),8978=>array(3,211,599,512),8979=>array(3,211,599,512),8980=>array(90,168,512,512),8981=>array(76,107,510,539),8984=>array(17,95,585,664),8985=>array(43,177,559,439),8988=>array(131,352,463,701),8989=>array(139,352,471,701),8990=>array(131,-70,463,279),8991=>array(139,-70,471,279),8992=>array(237,-250,566,925),8993=>array(33,-239,362,940),8997=>array(31,95,571,613),8998=>array(3,145,599,536),8999=>array(46,145,556,536),9000=>array(24,212,578,517),9003=>array(3,145,599,536),9013=>array(25,-33,576,296),9015=>array(125,-114,477,843),9016=>array(3,-114,599,843),9017=>array(3,-114,599,843),9018=>array(3,-114,599,843),9019=>array(3,-114,599,843),9020=>array(3,-114,599,843),9021=>array(3,-171,599,900),9022=>array(3,57,599,658),9025=>array(3,-100,599,829),9026=>array(3,-100,599,829),9027=>array(3,-114,599,843),9028=>array(3,-114,599,843),9031=>array(3,-114,599,843),9032=>array(3,-114,599,843),9033=>array(3,-29,599,729),9035=>array(16,-171,586,900),9036=>array(3,-100,599,829),9037=>array(3,-100,599,829),9040=>array(3,-114,599,843),9042=>array(16,-171,586,900),9043=>array(3,-100,599,829),9044=>array(3,-100,599,829),9047=>array(3,-114,599,843),9048=>array(113,-114,489,729),9049=>array(3,-114,599,729),9050=>array(3,-114,599,655),9051=>array(113,-114,489,496),9052=>array(3,-114,599,658),9054=>array(3,-114,599,843),9055=>array(-10,44,612,671),9056=>array(3,-114,599,843),9059=>array(110,183,492,652),9060=>array(147,222,455,676),9061=>array(3,57,599,847),9064=>array(43,226,559,676),9065=>array(43,53,559,676),9067=>array(16,0,586,729),9068=>array(43,-14,559,742),9069=>array(43,-171,559,900),9070=>array(113,-140,489,519),9071=>array(3,-114,599,843),9072=>array(3,-114,599,843),9075=>array(132,0,478,547),9076=>array(73,-208,558,560),9077=>array(31,-14,571,547),9078=>array(3,-114,599,559),9079=>array(64,-114,538,561),9080=>array(113,-114,489,547),9081=>array(3,-114,599,547),9082=>array(26,-12,568,559),9085=>array(8,-232,594,101),9088=>array(25,-33,576,528),9089=>array(3,92,599,528),9090=>array(3,92,599,528),9091=>array(3,172,599,572),9096=>array(35,27,566,601),9097=>array(34,46,567,579),9098=>array(34,46,567,579),9099=>array(34,46,567,579),9109=>array(3,-114,599,843),9115=>array(113,-252,488,928),9116=>array(113,-252,255,940),9117=>array(113,-240,488,940),9118=>array(114,-252,489,928),9119=>array(347,-252,489,940),9120=>array(114,-240,489,940),9121=>array(113,-252,488,928),9122=>array(113,-252,255,940),9123=>array(113,-240,488,940),9124=>array(113,-252,488,928),9125=>array(346,-252,488,940),9126=>array(113,-240,488,940),9127=>array(232,-261,594,928),9128=>array(8,-247,370,934),9129=>array(232,-240,594,934),9130=>array(232,-256,370,934),9131=>array(8,-261,370,928),9132=>array(232,-247,594,934),9133=>array(8,-240,370,934),9134=>array(237,-250,362,940),9166=>array(2,67,570,567),9167=>array(3,0,599,596),9251=>array(54,-232,548,101),9600=>array(-10,260,612,770),9601=>array(-10,-250,612,-123),9602=>array(-10,-250,612,5),9603=>array(-10,-250,612,132),9604=>array(-10,-250,612,260),9605=>array(-10,-250,612,387),9606=>array(-10,-250,612,515),9607=>array(-10,-250,612,642),9608=>array(-10,-250,612,770),9609=>array(-10,-250,534,770),9610=>array(-10,-250,457,770),9611=>array(-10,-250,379,770),9612=>array(-10,-250,301,770),9613=>array(-10,-250,223,770),9614=>array(-10,-250,146,770),9615=>array(-10,-250,68,770),9616=>array(301,-250,612,770),9617=>array(-10,-250,534,770),9618=>array(-10,-250,612,770),9619=>array(-10,-250,612,770),9620=>array(-10,642,612,770),9621=>array(534,-250,611,770),9622=>array(-10,-250,301,260),9623=>array(301,-250,612,260),9624=>array(-10,260,301,770),9625=>array(-10,-250,612,770),9626=>array(-10,-250,612,770),9627=>array(-10,-250,612,770),9628=>array(-10,-250,612,770),9629=>array(301,260,612,770),9630=>array(-10,-250,612,770),9631=>array(-10,-250,612,770),9632=>array(3,-39,599,558),9633=>array(3,-39,599,558),9634=>array(3,-39,599,558),9635=>array(3,-39,599,558),9636=>array(3,-39,599,558),9637=>array(3,-39,599,558),9638=>array(3,-39,599,558),9639=>array(3,-39,599,558),9640=>array(3,-39,599,558),9641=>array(3,-39,599,558),9642=>array(107,66,495,454),9643=>array(107,66,495,454),9644=>array(3,117,599,402),9645=>array(3,117,599,402),9646=>array(158,-39,444,558),9647=>array(158,-39,444,558),9648=>array(3,117,599,402),9649=>array(3,117,599,402),9650=>array(3,-39,599,558),9651=>array(3,-39,599,558),9652=>array(107,66,495,454),9653=>array(107,66,495,454),9654=>array(3,-39,599,558),9655=>array(3,-39,599,558),9656=>array(107,66,495,454),9657=>array(107,66,495,454),9658=>array(3,66,599,454),9659=>array(3,66,599,454),9660=>array(3,-39,599,558),9661=>array(3,-39,599,558),9662=>array(107,66,495,454),9663=>array(107,66,495,454),9664=>array(3,-39,599,558),9665=>array(3,-39,599,558),9666=>array(107,66,495,454),9667=>array(107,66,495,454),9668=>array(3,66,599,454),9669=>array(3,66,599,454),9670=>array(3,-39,599,558),9671=>array(3,-38,599,558),9672=>array(3,-38,599,558),9673=>array(3,-41,599,561),9674=>array(57,-233,545,807),9675=>array(3,-41,599,561),9676=>array(3,-41,599,561),9677=>array(3,-41,599,561),9678=>array(3,-41,599,561),9679=>array(3,-41,599,561),9680=>array(3,-41,599,561),9681=>array(3,-41,599,561),9682=>array(3,-41,599,561),9683=>array(3,-41,599,561),9684=>array(3,-41,599,561),9685=>array(3,-41,599,561),9686=>array(152,-41,450,561),9687=>array(152,-41,450,561),9688=>array(-10,-10,612,770),9689=>array(-10,-250,612,770),9690=>array(-10,260,612,770),9691=>array(-10,-250,612,260),9692=>array(152,260,450,561),9693=>array(152,260,450,561),9694=>array(152,-41,450,260),9695=>array(152,-41,450,260),9696=>array(3,260,599,561),9697=>array(3,-41,599,260),9698=>array(3,-39,599,558),9699=>array(3,-39,599,558),9700=>array(3,-39,599,558),9701=>array(3,-39,599,558),9702=>array(125,195,477,547),9703=>array(3,-39,599,558),9704=>array(3,-39,599,558),9705=>array(3,-39,599,558),9706=>array(3,-39,599,558),9707=>array(3,-39,599,558),9708=>array(3,-39,599,558),9709=>array(3,-39,599,558),9710=>array(3,-39,599,558),9711=>array(-10,-54,612,573),9712=>array(3,-39,599,558),9713=>array(3,-39,599,558),9714=>array(3,-39,599,558),9715=>array(3,-39,599,558),9716=>array(3,-41,599,561),9717=>array(3,-41,599,561),9718=>array(3,-41,599,561),9719=>array(3,-41,599,561),9720=>array(3,-39,599,558),9721=>array(3,-39,599,558),9722=>array(3,-39,599,558),9723=>array(47,6,554,513),9724=>array(47,6,554,513),9725=>array(85,44,516,475),9726=>array(85,44,516,475),9727=>array(3,-39,599,558),9728=>array(17,80,585,649),9729=>array(26,3,576,225),9730=>array(17,3,585,522),9731=>array(43,-3,559,708),9732=>array(14,23,588,681),9733=>array(28,7,574,525),9734=>array(28,10,574,528),9735=>array(98,2,504,729),9736=>array(29,0,573,731),9737=>array(21,3,581,563),9738=>array(7,2,595,639),9739=>array(9,-1,593,677),9740=>array(26,0,576,724),9741=>array(22,1,580,724),9742=>array(10,-0,592,598),9743=>array(4,5,598,598),9744=>array(54,2,548,504),9745=>array(48,-1,554,512),9746=>array(65,2,537,481),9747=>array(98,43,504,658),9748=>array(14,-2,588,651),9749=>array(38,3,564,688),9750=>array(27,3,575,734),9751=>array(23,1,579,728),9752=>array(19,3,583,596),9753=>array(23,203,579,557),9754=>array(23,132,579,560),9755=>array(23,132,579,560),9756=>array(7,138,595,516),9757=>array(68,0,534,724),9758=>array(7,138,595,516),9759=>array(68,-3,534,720),9760=>array(6,-1,596,593),9761=>array(4,-2,598,728),9762=>array(4,1,598,595),9763=>array(17,3,585,523),9764=>array(38,-0,564,671),9765=>array(47,-0,555,730),9766=>array(59,-1,543,731),9767=>array(47,3,555,751),9768=>array(100,-2,502,725),9769=>array(27,0,575,549),9770=>array(15,1,587,644),9771=>array(4,0,598,594),9772=>array(50,-3,552,669),9773=>array(7,2,595,642),9774=>array(13,2,589,578),9775=>array(7,2,595,591),9784=>array(13,82,589,642),9785=>array(16,80,586,650),9786=>array(16,80,586,650),9787=>array(16,80,586,650),9788=>array(16,80,586,650),9789=>array(76,2,526,722),9790=>array(73,3,529,734),9791=>array(92,-78,510,708),9792=>array(71,-49,531,655),9793=>array(71,-49,531,655),9794=>array(10,75,592,648),9795=>array(35,21,567,710),9796=>array(85,21,517,710),9797=>array(33,65,569,666),9798=>array(37,65,565,666),9799=>array(105,21,497,710),9800=>array(12,0,590,641),9801=>array(26,-4,576,596),9802=>array(13,6,589,601),9803=>array(25,24,577,632),9804=>array(30,-1,572,641),9805=>array(23,-136,579,562),9806=>array(42,88,561,614),9807=>array(24,-75,578,597),9808=>array(27,3,575,597),9809=>array(10,1,592,601),9810=>array(43,156,559,460),9811=>array(46,2,556,642),9812=>array(33,2,569,563),9813=>array(42,0,560,560),9814=>array(55,0,547,639),9815=>array(108,-4,494,596),9816=>array(70,3,532,597),9817=>array(76,3,526,551),9818=>array(52,-2,550,518),9819=>array(26,2,576,596),9820=>array(72,2,530,596),9821=>array(110,3,492,597),9822=>array(50,1,552,641),9823=>array(58,2,544,597),9824=>array(63,65,540,664),9825=>array(7,65,595,663),9826=>array(71,65,531,664),9827=>array(24,65,578,664),9828=>array(62,65,540,664),9829=>array(5,65,597,664),9830=>array(71,65,531,664),9831=>array(24,65,578,667),9832=>array(22,3,580,597),9833=>array(181,16,421,708),9834=>array(79,16,523,708),9835=>array(52,-79,550,706),9836=>array(8,61,594,664),9837=>array(158,18,444,710),9838=>array(211,21,391,710),9839=>array(152,21,450,710),9840=>array(47,-1,555,639),9841=>array(22,-8,580,632),9842=>array(23,-2,579,538),9843=>array(29,5,573,527),9844=>array(37,4,565,514),9845=>array(33,5,569,521),9846=>array(18,3,584,549),9847=>array(30,4,572,525),9848=>array(37,0,565,509),9849=>array(22,6,580,543),9850=>array(22,0,580,537),9851=>array(28,-0,574,528),9852=>array(22,3,580,561),9853=>array(27,2,575,550),9854=>array(22,3,580,561),9855=>array(39,4,563,643),9856=>array(29,2,573,546),9857=>array(29,2,573,546),9858=>array(29,2,573,546),9859=>array(29,0,573,544),9860=>array(29,2,573,546),9861=>array(29,-2,573,542),9862=>array(22,0,580,557),9863=>array(22,2,580,559),9864=>array(22,0,580,557),9865=>array(22,-5,580,552),9866=>array(40,3,562,73),9867=>array(40,3,562,73),9872=>array(73,-1,529,591),9873=>array(56,2,546,640),9874=>array(19,-0,583,520),9875=>array(15,0,587,603),9876=>array(63,6,539,553),9877=>array(92,-1,510,740),9878=>array(9,1,593,558),9879=>array(11,3,591,552),9880=>array(36,-1,566,640),9881=>array(15,0,587,603),9882=>array(21,6,582,656),9883=>array(40,5,562,597),9884=>array(21,-1,582,638),9888=>array(17,1,585,520),9889=>array(66,4,536,642),9904=>array(119,0,484,730),9905=>array(108,0,494,594),9985=>array(22,181,580,494),9986=>array(22,170,580,505),9987=>array(28,156,574,462),9988=>array(30,161,572,501),9990=>array(25,35,577,588),9991=>array(18,31,584,598),9992=>array(30,29,572,544),9993=>array(31,56,571,448),9996=>array(158,5,444,614),9997=>array(22,73,580,498),9998=>array(42,64,560,581),9999=>array(19,109,583,346),10000=>array(42,91,560,608),10001=>array(29,146,573,420),10002=>array(18,133,584,388),10003=>array(74,94,528,561),10004=>array(36,56,566,532),10005=>array(63,55,539,531),10006=>array(31,92,540,601),10007=>array(64,-10,538,593),10008=>array(25,-1,577,646),10009=>array(31,2,571,542),10010=>array(42,3,560,503),10011=>array(28,3,574,550),10012=>array(23,0,579,556),10013=>array(76,1,520,640),10014=>array(62,0,541,639),10015=>array(70,2,532,595),10016=>array(23,1,579,558),10017=>array(35,1,567,616),10018=>array(15,-10,587,562),10019=>array(14,-8,588,567),10020=>array(13,-9,589,567),10021=>array(11,-13,591,566),10022=>array(21,-12,581,552),10023=>array(18,-13,584,557),10025=>array(20,-8,583,527),10026=>array(33,-13,569,526),10027=>array(20,-13,583,522),10028=>array(17,-11,585,529),10029=>array(20,-8,583,527),10030=>array(30,-2,572,514),10031=>array(20,-5,583,531),10032=>array(22,8,580,502),10033=>array(26,-1,576,563),10034=>array(42,-0,560,547),10035=>array(23,-1,579,554),10036=>array(18,-8,584,560),10037=>array(13,-11,589,565),10038=>array(24,-14,578,625),10039=>array(15,-16,587,556),10040=>array(13,-11,589,565),10041=>array(18,-17,584,551),10042=>array(23,1,579,557),10043=>array(24,-8,578,613),10044=>array(27,-9,575,606),10045=>array(25,-10,573,609),10046=>array(16,-13,586,592),10047=>array(18,0,584,551),10048=>array(11,1,591,565),10049=>array(11,-9,591,572),10050=>array(18,-16,584,552),10051=>array(24,-9,578,653),10052=>array(16,1,586,667),10053=>array(23,-3,579,587),10054=>array(12,2,590,594),10055=>array(24,-9,578,605),10056=>array(20,-10,582,552),10057=>array(16,-14,586,556),10058=>array(11,-11,591,569),10059=>array(17,-11,585,513),10061=>array(18,-5,584,527),10063=>array(34,-31,568,504),10064=>array(30,0,572,542),10065=>array(27,-35,575,512),10066=>array(23,0,579,555),10070=>array(21,-3,581,557),10072=>array(263,-119,339,701),10073=>array(225,-120,377,700),10074=>array(165,-151,438,677),10075=>array(233,476,369,731),10076=>array(228,471,374,722),10077=>array(125,476,477,731),10078=>array(120,471,482,722),10081=>array(50,-80,552,688),10082=>array(125,-19,478,598),10083=>array(93,-14,509,603),10084=>array(22,51,580,507),10085=>array(56,-2,546,637),10086=>array(32,12,570,567),10087=>array(24,150,578,472),10088=>array(117,-49,485,688),10089=>array(117,-49,485,688),10090=>array(175,-59,427,665),10091=>array(179,-59,423,643),10092=>array(158,-64,444,667),10093=>array(158,-64,444,667),10094=>array(103,-83,500,647),10095=>array(103,-83,500,647),10096=>array(100,-93,502,727),10097=>array(101,-93,501,728),10098=>array(223,-138,379,683),10099=>array(223,-135,379,686),10100=>array(137,-160,465,671),10101=>array(122,-164,480,676),10132=>array(41,148,562,487),10136=>array(57,71,545,561),10137=>array(41,204,562,509),10138=>array(57,94,545,583),10139=>array(22,204,580,485),10140=>array(36,145,566,530),10141=>array(41,214,562,519),10142=>array(22,184,580,510),10143=>array(26,182,576,503),10144=>array(41,201,562,505),10145=>array(41,189,562,494),10146=>array(47,182,555,512),10147=>array(60,205,542,518),10148=>array(60,140,542,592),10149=>array(26,193,576,530),10150=>array(26,193,576,529),10151=>array(164,128,438,609),10152=>array(26,179,576,500),10153=>array(49,177,553,516),10154=>array(49,148,553,487),10155=>array(26,89,576,498),10156=>array(47,104,555,458),10157=>array(61,107,541,538),10158=>array(41,63,561,530),10159=>array(24,163,578,557),10161=>array(20,124,582,524),10162=>array(71,92,531,584),10163=>array(43,163,559,386),10164=>array(57,90,545,579),10165=>array(41,227,562,427),10166=>array(57,63,545,552),10167=>array(38,90,564,616),10168=>array(21,192,582,409),10169=>array(57,85,545,574),10170=>array(26,146,576,490),10171=>array(14,179,588,461),10172=>array(19,218,583,456),10173=>array(18,174,583,493),10174=>array(24,131,578,462),10175=>array(41,148,562,487),10178=>array(32,0,569,627),10181=>array(125,-163,477,769),10182=>array(125,-163,477,769),10208=>array(57,-233,545,807),10214=>array(145,-132,479,760),10215=>array(124,-132,457,760),10216=>array(165,-132,438,759),10217=>array(165,-132,438,759),10731=>array(57,-233,545,807),10746=>array(32,45,569,582),10747=>array(32,45,569,582),10799=>array(58,72,543,556),10858=>array(43,229,559,624),10859=>array(43,0,559,624),11013=>array(41,190,561,494),11014=>array(149,82,453,602),11015=>array(149,82,453,602),11016=>array(68,109,485,526),11017=>array(117,109,534,526),11018=>array(117,109,534,526),11019=>array(68,109,485,526),11020=>array(41,190,561,494),11021=>array(149,82,453,602),11026=>array(3,-39,599,558),11027=>array(3,-39,599,558),11028=>array(3,-39,599,558),11029=>array(3,-39,599,558),11030=>array(3,-39,599,558),11031=>array(3,-39,599,558),11032=>array(3,-39,599,558),11033=>array(3,-39,599,558),11034=>array(3,-39,599,558),11364=>array(65,-208,602,729),11373=>array(47,-14,562,742),11374=>array(42,-208,560,729),11375=>array(16,0,586,729),11376=>array(47,-14,562,742),11381=>array(67,0,535,729),11382=>array(84,0,523,547),11383=>array(32,0,570,552),11385=>array(91,-13,511,759),11386=>array(48,-14,554,560),11388=>array(190,-149,412,421),11389=>array(129,326,473,734),11390=>array(63,-239,575,742),11391=>array(56,-240,567,729),11800=>array(85,-13,491,729),11807=>array(43,0,559,398),11810=>array(206,403,454,760),11811=>array(148,403,396,760),11812=>array(206,-132,454,225),11813=>array(148,-132,396,225),11822=>array(82,0,488,742),42760=>array(134,0,468,693),42761=>array(134,0,468,693),42762=>array(134,0,468,693),42763=>array(134,0,468,693),42764=>array(134,0,468,693),42765=>array(134,0,468,693),42766=>array(134,0,468,693),42767=>array(134,0,468,693),42768=>array(134,0,468,693),42769=>array(134,0,468,693),42770=>array(134,0,468,693),42771=>array(134,0,468,693),42772=>array(134,0,468,693),42773=>array(134,0,468,693),42774=>array(134,0,468,693),42779=>array(159,326,443,736),42780=>array(159,324,443,734),42781=>array(245,326,356,734),42782=>array(245,326,356,734),42783=>array(245,0,356,408),42786=>array(125,0,492,729),42787=>array(160,0,467,547),42788=>array(90,224,514,742),42789=>array(90,42,514,560),42790=>array(67,-208,535,729),42791=>array(84,-207,523,760),42889=>array(219,0,382,519),42890=>array(191,141,411,405),42891=>array(236,235,366,729),42892=>array(238,458,363,729),42893=>array(49,0,550,760),42894=>array(53,-217,549,760),42896=>array(39,-157,574,729),42897=>array(47,-140,563,560),42922=>array(0,0,601,730),63173=>array(48,-14,554,760),64257=>array(6,0,536,760),64258=>array(6,0,536,760),64338=>array(13,-338,597,263),64339=>array(34,-338,612,264),64340=>array(-18,-324,366,293),64341=>array(-16,-311,618,313),64342=>array(13,-338,597,263),64343=>array(34,-338,612,264),64344=>array(-18,-322,437,293),64345=>array(-16,-322,618,313),64346=>array(13,-352,597,263),64347=>array(34,-328,612,264),64348=>array(-18,-326,420,293),64349=>array(-16,-328,618,313),64350=>array(13,-18,597,574),64351=>array(34,-10,612,565),64352=>array(-18,0,366,634),64353=>array(-16,0,618,650),64354=>array(13,-18,597,600),64355=>array(34,-10,612,604),64356=>array(-18,0,435,654),64357=>array(-16,0,618,671),64358=>array(13,-18,597,608),64359=>array(34,-10,612,628),64360=>array(-18,0,428,658),64361=>array(-16,0,618,656),64362=>array(-52,-64,602,766),64363=>array(-87,-47,612,750),64364=>array(-10,0,430,833),64365=>array(-10,0,612,761),64366=>array(-52,-64,602,774),64367=>array(-87,-47,612,754),64368=>array(-10,0,430,823),64369=>array(-10,0,612,751),64370=>array(43,-244,584,444),64371=>array(0,-350,622,339),64372=>array(-10,-313,545,423),64373=>array(-10,-269,623,423),64374=>array(43,-244,584,444),64375=>array(0,-350,622,339),64376=>array(-10,-152,545,423),64377=>array(-10,-133,623,423),64378=>array(43,-244,584,444),64379=>array(0,-350,622,339),64380=>array(-10,-321,545,423),64381=>array(-10,-312,623,423),64382=>array(43,-244,584,444),64383=>array(0,-350,622,339),64384=>array(-10,-308,545,423),64385=>array(-10,-312,623,423),64394=>array(-25,-246,603,627),64395=>array(-78,-244,612,627),64396=>array(-25,-246,591,612),64397=>array(-78,-244,612,626),64398=>array(5,-60,670,803),64399=>array(-71,-60,626,803),64400=>array(-10,0,521,760),64401=>array(-15,0,620,760),64402=>array(5,-60,673,998),64403=>array(-71,-60,631,1000),64404=>array(-10,0,521,962),64405=>array(-15,0,620,962),64414=>array(9,-162,586,336),64415=>array(-42,-242,612,256),64426=>array(-46,-42,602,498),64427=>array(-46,0,654,498),64428=>array(-10,-42,525,498),64429=>array(-19,0,654,498),64488=>array(-18,0,366,293),64489=>array(-16,0,618,313),64508=>array(0,-171,602,432),64509=>array(-39,-172,612,271),64510=>array(-18,-146,431,293),64511=>array(-16,-146,618,313),65136=>array(148,563,453,854),65137=>array(-16,0,618,854),65138=>array(111,552,456,884),65139=>array(339,0,612,197),65140=>array(148,-295,453,-4),65142=>array(148,563,453,729),65143=>array(-16,0,618,729),65144=>array(146,580,456,884),65145=>array(-16,0,618,884),65146=>array(148,-171,453,-4),65147=>array(-16,-171,618,110),65148=>array(124,591,478,869),65149=>array(-16,0,618,869),65150=>array(154,597,448,891),65151=>array(-16,0,618,891),65152=>array(203,13,522,483),65153=>array(109,0,492,963),65154=>array(109,0,612,963),65155=>array(207,0,383,1040),65156=>array(230,0,612,1040),65157=>array(37,-244,572,620),65158=>array(0,-244,612,618),65159=>array(208,-293,384,760),65160=>array(253,-293,612,760),65161=>array(0,-171,602,599),65162=>array(-39,-172,612,433),65163=>array(-18,0,377,625),65164=>array(-16,0,618,625),65165=>array(229,0,372,760),65166=>array(263,0,612,760),65167=>array(13,-171,597,263),65168=>array(34,-171,612,264),65169=>array(-18,-186,366,293),65170=>array(-16,-195,618,313),65171=>array(86,-28,518,551),65172=>array(42,0,612,622),65173=>array(13,-18,597,427),65174=>array(34,-10,612,427),65175=>array(-18,0,431,525),65176=>array(-16,0,618,525),65177=>array(13,-18,597,598),65178=>array(34,-10,612,598),65179=>array(-18,0,430,696),65180=>array(-16,0,618,677),65181=>array(43,-244,584,444),65182=>array(43,-244,622,444),65183=>array(-10,-146,545,423),65184=>array(-10,-146,623,423),65185=>array(43,-244,584,444),65186=>array(43,-244,622,444),65187=>array(-10,0,545,423),65188=>array(-10,0,623,423),65189=>array(43,-244,584,623),65190=>array(43,-244,622,623),65191=>array(-10,0,545,609),65192=>array(-10,0,623,574),65193=>array(113,-19,537,456),65194=>array(113,-19,612,456),65195=>array(113,-19,537,648),65196=>array(113,-19,612,660),65197=>array(-25,-246,565,267),65198=>array(-78,-244,612,269),65199=>array(-25,-246,565,491),65200=>array(-78,-244,612,499),65201=>array(-96,-240,602,366),65202=>array(-129,-240,614,366),65203=>array(-10,-14,602,366),65204=>array(-10,-14,613,366),65205=>array(-96,-240,602,671),65206=>array(-129,-240,614,671),65207=>array(-10,-14,602,671),65208=>array(-10,-14,613,671),65209=>array(-139,-240,594,319),65210=>array(-166,-240,615,319),65211=>array(-16,0,594,319),65212=>array(-16,0,618,319),65213=>array(-139,-240,594,437),65214=>array(-166,-240,615,437),65215=>array(-16,0,594,469),65216=>array(-16,0,618,462),65217=>array(5,0,588,760),65218=>array(0,0,612,760),65219=>array(-23,0,588,760),65220=>array(-18,0,612,760),65221=>array(5,0,588,760),65222=>array(0,0,612,760),65223=>array(-23,0,588,760),65224=>array(-18,0,612,760),65225=>array(35,-244,589,549),65226=>array(41,-244,619,396),65227=>array(-10,0,497,545),65228=>array(-10,0,612,396),65229=>array(35,-244,589,710),65230=>array(41,-244,619,574),65231=>array(-10,0,497,696),65232=>array(-10,0,612,574),65233=>array(-52,-64,602,630),65234=>array(-87,-47,612,578),65235=>array(-10,0,430,681),65236=>array(-10,0,612,598),65237=>array(0,-230,602,696),65238=>array(-9,-240,612,552),65239=>array(-10,0,430,671),65240=>array(-10,0,612,598),65241=>array(4,-46,593,760),65242=>array(-49,-46,621,760),65243=>array(-10,0,521,760),65244=>array(-15,0,620,760),65245=>array(0,-181,568,760),65246=>array(-37,-181,622,760),65247=>array(-10,0,513,760),65248=>array(-10,0,612,760),65249=>array(29,-240,563,357),65250=>array(0,-240,612,330),65251=>array(-15,-23,519,326),65252=>array(-15,-23,612,326),65253=>array(9,-162,586,480),65254=>array(-42,-242,612,382),65255=>array(-18,0,366,525),65256=>array(-16,0,618,525),65257=>array(86,-28,518,358),65258=>array(42,0,612,436),65259=>array(-10,-42,525,498),65260=>array(-10,-263,612,373),65261=>array(37,-244,572,330),65262=>array(0,-244,612,330),65263=>array(0,-171,602,432),65264=>array(-39,-172,612,271),65265=>array(0,-323,602,432),65266=>array(-39,-326,612,271),65267=>array(-18,-176,430,293),65268=>array(-16,-178,618,313),65269=>array(-67,-10,541,890),65270=>array(-72,-10,612,890),65271=>array(-8,-10,541,966),65272=>array(-21,-10,612,966),65273=>array(53,-320,541,760),65274=>array(53,-333,612,760),65275=>array(53,-10,541,760),65276=>array(53,-10,612,760),65533=>array(22,-138,579,927),65535=>array(51,-177,551,705)); +$cw=array(0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602,41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602,51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602,61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602,71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602,81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602,91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602,101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602,111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602,121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602,167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602,177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602,187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602,197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602,207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602,217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602,227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602,237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602,247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602,257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602,267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602,277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602,287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602,297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602,307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602,317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602,327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602,337=>602,338=>602,339=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602,349=>602,350=>602,351=>602,352=>602,353=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602,361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602,371=>602,372=>602,373=>602,374=>602,375=>602,376=>602,377=>602,378=>602,379=>602,380=>602,381=>602,382=>602,383=>602,384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602,394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,402=>602,403=>602,404=>602,405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602,415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602,425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602,435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602,445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602,464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602,474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602,486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602,496=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602,543=>602,544=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602,576=>602,577=>602,579=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,710=>602,711=>602,712=>602,713=>602,716=>602,717=>602,718=>602,719=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,732=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1188=>602,1189=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602,1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602,1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602,1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602,1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602,1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602,1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602,1309=>602,1329=>602,1330=>602,1331=>602,1332=>602,1333=>602,1334=>602,1335=>602,1336=>602,1337=>602,1338=>602,1339=>602,1340=>602,1341=>602,1342=>602,1343=>602,1344=>602,1345=>602,1346=>602,1347=>602,1348=>602,1349=>602,1350=>602,1351=>602,1352=>602,1353=>602,1354=>602,1355=>602,1356=>602,1357=>602,1358=>602,1359=>602,1360=>602,1361=>602,1362=>602,1363=>602,1364=>602,1365=>602,1366=>602,1369=>602,1370=>602,1371=>602,1372=>602,1373=>602,1374=>602,1375=>602,1377=>602,1378=>602,1379=>602,1380=>602,1381=>602,1382=>602,1383=>602,1384=>602,1385=>602,1386=>602,1387=>602,1388=>602,1389=>602,1390=>602,1391=>602,1392=>602,1393=>602,1394=>602,1395=>602,1396=>602,1397=>602,1398=>602,1399=>602,1400=>602,1401=>602,1402=>602,1403=>602,1404=>602,1405=>602,1406=>602,1407=>602,1408=>602,1409=>602,1410=>602,1411=>602,1412=>602,1413=>602,1414=>602,1415=>602,1417=>602,1418=>602,1542=>602,1543=>602,1545=>602,1546=>602,1548=>602,1557=>602,1563=>602,1567=>602,1569=>602,1570=>602,1571=>602,1572=>602,1573=>602,1574=>602,1575=>602,1576=>602,1577=>602,1578=>602,1579=>602,1580=>602,1581=>602,1582=>602,1583=>602,1584=>602,1585=>602,1586=>602,1587=>602,1588=>602,1589=>602,1590=>602,1591=>602,1592=>602,1593=>602,1594=>602,1600=>602,1601=>602,1602=>602,1603=>602,1604=>602,1605=>602,1606=>602,1607=>602,1608=>602,1609=>602,1610=>602,1611=>602,1612=>602,1613=>602,1614=>602,1615=>602,1616=>602,1617=>602,1618=>602,1619=>602,1620=>602,1621=>602,1626=>602,1632=>602,1633=>602,1634=>602,1635=>602,1636=>602,1637=>602,1638=>602,1639=>602,1640=>602,1641=>602,1642=>602,1643=>602,1644=>602,1645=>602,1652=>602,1657=>602,1658=>602,1659=>602,1662=>602,1663=>602,1664=>602,1667=>602,1668=>602,1670=>602,1671=>602,1681=>602,1688=>602,1700=>602,1705=>602,1711=>602,1726=>602,1740=>602,1776=>602,1777=>602,1778=>602,1779=>602,1780=>602,1781=>602,1782=>602,1783=>602,1784=>602,1785=>602,3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602,3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602,3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602,3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602,3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602,4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602,4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602,4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602,4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602,4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602,7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602,7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602,7488=>602,7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8211=>602,8212=>602,8213=>602,8214=>602,8215=>602,8216=>602,8217=>602,8218=>602,8219=>602,8220=>602,8221=>602,8222=>602,8223=>602,8224=>602,8225=>602,8226=>602,8227=>602,8230=>602,8239=>602,8240=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602,8246=>602,8247=>602,8249=>602,8250=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602,8267=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8341=>602,8342=>602,8343=>602,8344=>602,8345=>602,8346=>602,8347=>602,8348=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8364=>602,8365=>602,8366=>602,8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602,8450=>602,8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8482=>602,8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8520=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602,8759=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602,8901=>602,8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9729=>602,9730=>602,9731=>602,9732=>602,9733=>602,9734=>602,9735=>602,9736=>602,9737=>602,9738=>602,9739=>602,9740=>602,9741=>602,9742=>602,9743=>602,9744=>602,9745=>602,9746=>602,9747=>602,9748=>602,9749=>602,9750=>602,9751=>602,9752=>602,9753=>602,9754=>602,9755=>602,9756=>602,9757=>602,9758=>602,9759=>602,9760=>602,9761=>602,9762=>602,9763=>602,9764=>602,9765=>602,9766=>602,9767=>602,9768=>602,9769=>602,9770=>602,9771=>602,9772=>602,9773=>602,9774=>602,9775=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9789=>602,9790=>602,9791=>602,9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9800=>602,9801=>602,9802=>602,9803=>602,9804=>602,9805=>602,9806=>602,9807=>602,9808=>602,9809=>602,9810=>602,9811=>602,9812=>602,9813=>602,9814=>602,9815=>602,9816=>602,9817=>602,9818=>602,9819=>602,9820=>602,9821=>602,9822=>602,9823=>602,9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9832=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,9840=>602,9841=>602,9842=>602,9843=>602,9844=>602,9845=>602,9846=>602,9847=>602,9848=>602,9849=>602,9850=>602,9851=>602,9852=>602,9853=>602,9854=>602,9855=>602,9856=>602,9857=>602,9858=>602,9859=>602,9860=>602,9861=>602,9862=>602,9863=>602,9864=>602,9865=>602,9866=>602,9867=>602,9872=>602,9873=>602,9874=>602,9875=>602,9876=>602,9877=>602,9878=>602,9879=>602,9880=>602,9881=>602,9882=>602,9883=>602,9884=>602,9888=>602,9889=>602,9904=>602,9905=>602,9985=>602,9986=>602,9987=>602,9988=>602,9990=>602,9991=>602,9992=>602,9993=>602,9996=>602,9997=>602,9998=>602,9999=>602,10000=>602,10001=>602,10002=>602,10003=>602,10004=>602,10005=>602,10006=>602,10007=>602,10008=>602,10009=>602,10010=>602,10011=>602,10012=>602,10013=>602,10014=>602,10015=>602,10016=>602,10017=>602,10018=>602,10019=>602,10020=>602,10021=>602,10022=>602,10023=>602,10025=>602,10026=>602,10027=>602,10028=>602,10029=>602,10030=>602,10031=>602,10032=>602,10033=>602,10034=>602,10035=>602,10036=>602,10037=>602,10038=>602,10039=>602,10040=>602,10041=>602,10042=>602,10043=>602,10044=>602,10045=>602,10046=>602,10047=>602,10048=>602,10049=>602,10050=>602,10051=>602,10052=>602,10053=>602,10054=>602,10055=>602,10056=>602,10057=>602,10058=>602,10059=>602,10061=>602,10063=>602,10064=>602,10065=>602,10066=>602,10070=>602,10072=>602,10073=>602,10074=>602,10075=>602,10076=>602,10077=>602,10078=>602,10081=>602,10082=>602,10083=>602,10084=>602,10085=>602,10086=>602,10087=>602,10088=>602,10089=>602,10090=>602,10091=>602,10092=>602,10093=>602,10094=>602,10095=>602,10096=>602,10097=>602,10098=>602,10099=>602,10100=>602,10101=>602,10132=>602,10136=>602,10137=>602,10138=>602,10139=>602,10140=>602,10141=>602,10142=>602,10143=>602,10144=>602,10145=>602,10146=>602,10147=>602,10148=>602,10149=>602,10150=>602,10151=>602,10152=>602,10153=>602,10154=>602,10155=>602,10156=>602,10157=>602,10158=>602,10159=>602,10161=>602,10162=>602,10163=>602,10164=>602,10165=>602,10166=>602,10167=>602,10168=>602,10169=>602,10170=>602,10171=>602,10172=>602,10173=>602,10174=>602,10175=>602,10178=>602,10181=>602,10182=>602,10208=>602,10214=>602,10215=>602,10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602,10858=>602,10859=>602,11013=>602,11014=>602,11015=>602,11016=>602,11017=>602,11018=>602,11019=>602,11020=>602,11021=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602,11373=>602,11374=>602,11375=>602,11376=>602,11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11390=>602,11391=>602,11800=>602,11807=>602,11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42786=>602,42787=>602,42788=>602,42789=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,42893=>602,42894=>602,42896=>602,42897=>602,42922=>602,63173=>602,64257=>602,64258=>602,64338=>602,64339=>602,64340=>602,64341=>602,64342=>602,64343=>602,64344=>602,64345=>602,64346=>602,64347=>602,64348=>602,64349=>602,64350=>602,64351=>602,64352=>602,64353=>602,64354=>602,64355=>602,64356=>602,64357=>602,64358=>602,64359=>602,64360=>602,64361=>602,64362=>602,64363=>602,64364=>602,64365=>602,64366=>602,64367=>602,64368=>602,64369=>602,64370=>602,64371=>602,64372=>602,64373=>602,64374=>602,64375=>602,64376=>602,64377=>602,64378=>602,64379=>602,64380=>602,64381=>602,64382=>602,64383=>602,64384=>602,64385=>602,64394=>602,64395=>602,64396=>602,64397=>602,64398=>602,64399=>602,64400=>602,64401=>602,64402=>602,64403=>602,64404=>602,64405=>602,64414=>602,64415=>602,64426=>602,64427=>602,64428=>602,64429=>602,64488=>602,64489=>602,64508=>602,64509=>602,64510=>602,64511=>602,65136=>602,65137=>602,65138=>602,65139=>602,65140=>602,65142=>602,65143=>602,65144=>602,65145=>602,65146=>602,65147=>602,65148=>602,65149=>602,65150=>602,65151=>602,65152=>602,65153=>602,65154=>602,65155=>602,65156=>602,65157=>602,65158=>602,65159=>602,65160=>602,65161=>602,65162=>602,65163=>602,65164=>602,65165=>602,65166=>602,65167=>602,65168=>602,65169=>602,65170=>602,65171=>602,65172=>602,65173=>602,65174=>602,65175=>602,65176=>602,65177=>602,65178=>602,65179=>602,65180=>602,65181=>602,65182=>602,65183=>602,65184=>602,65185=>602,65186=>602,65187=>602,65188=>602,65189=>602,65190=>602,65191=>602,65192=>602,65193=>602,65194=>602,65195=>602,65196=>602,65197=>602,65198=>602,65199=>602,65200=>602,65201=>602,65202=>602,65203=>602,65204=>602,65205=>602,65206=>602,65207=>602,65208=>602,65209=>602,65210=>602,65211=>602,65212=>602,65213=>602,65214=>602,65215=>602,65216=>602,65217=>602,65218=>602,65219=>602,65220=>602,65221=>602,65222=>602,65223=>602,65224=>602,65225=>602,65226=>602,65227=>602,65228=>602,65229=>602,65230=>602,65231=>602,65232=>602,65233=>602,65234=>602,65235=>602,65236=>602,65237=>602,65238=>602,65239=>602,65240=>602,65241=>602,65242=>602,65243=>602,65244=>602,65245=>602,65246=>602,65247=>602,65248=>602,65249=>602,65250=>602,65251=>602,65252=>602,65253=>602,65254=>602,65255=>602,65256=>602,65257=>602,65258=>602,65259=>602,65260=>602,65261=>602,65262=>602,65263=>602,65264=>602,65265=>602,65266=>602,65267=>602,65268=>602,65269=>602,65270=>602,65271=>602,65272=>602,65273=>602,65274=>602,65275=>602,65276=>602,65279=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602,65535=>602); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansmonob.z b/tcpdf/fonts/dejavusansmonob.z new file mode 100644 index 0000000..ef5638e Binary files /dev/null and b/tcpdf/fonts/dejavusansmonob.z differ diff --git a/tcpdf/fonts/dejavusansmonobi.ctg.z b/tcpdf/fonts/dejavusansmonobi.ctg.z new file mode 100644 index 0000000..aa6da41 Binary files /dev/null and b/tcpdf/fonts/dejavusansmonobi.ctg.z differ diff --git a/tcpdf/fonts/dejavusansmonobi.php b/tcpdf/fonts/dejavusansmonobi.php new file mode 100644 index 0000000..3fb89bd --- /dev/null +++ b/tcpdf/fonts/dejavusansmonobi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansMono-BoldOblique'; +$up=-63; +$ut=44; +$dw=602; +$diff=''; +$originalsize=239876; +$enc=''; +$file='dejavusansmonobi.z'; +$ctg='dejavusansmonobi.ctg.z'; +$desc=array('Flags'=>97,'FontBBox'=>'[-425 -394 808 1053]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>60,'StemH'=>26,'AvgWidth'=>602,'MaxWidth'=>602,'MissingWidth'=>602); +$cbbox=array(0=>array(51,-177,551,705),33=>array(165,0,437,729),34=>array(113,458,488,729),35=>array(-20,0,619,718),36=>array(19,-147,533,760),37=>array(16,0,595,699),38=>array(-16,-14,593,742),39=>array(238,458,363,729),40=>array(165,-132,527,759),41=>array(55,-132,417,759),42=>array(59,278,541,742),43=>array(32,45,569,582),44=>array(102,-140,365,179),45=>array(119,217,453,359),46=>array(170,0,367,179),47=>array(0,-93,525,729),48=>array(44,-14,558,742),49=>array(21,0,498,729),50=>array(-14,0,554,742),51=>array(-15,-14,547,742),52=>array(9,0,547,729),53=>array(3,-14,562,729),54=>array(47,-16,571,741),55=>array(53,0,598,729),56=>array(31,-14,555,742),57=>array(27,-15,551,742),58=>array(149,0,412,519),59=>array(83,-140,412,519),60=>array(43,53,559,574),61=>array(43,144,559,482),62=>array(43,53,559,574),63=>array(142,0,557,742),64=>array(-7,-156,600,681),65=>array(-55,0,515,729),66=>array(-10,0,575,730),67=>array(64,-14,595,742),68=>array(-4,0,569,729),69=>array(14,0,610,729),70=>array(23,0,619,729),71=>array(50,-14,582,742),72=>array(-4,0,606,729),73=>array(13,0,589,729),74=>array(-10,-14,563,729),75=>array(-9,0,668,729),76=>array(39,0,516,729),77=>array(-28,0,630,729),78=>array(-12,0,613,729),79=>array(30,-14,572,742),80=>array(8,0,591,729),81=>array(30,-137,572,742),82=>array(4,0,569,729),83=>array(2,-14,566,742),84=>array(88,0,629,729),85=>array(22,-14,621,729),86=>array(99,0,647,729),87=>array(20,0,669,729),88=>array(-70,0,656,729),89=>array(71,0,663,729),90=>array(-16,0,630,729),91=>array(109,-132,531,760),92=>array(166,-93,362,729),93=>array(52,-132,473,760),94=>array(28,457,574,729),95=>array(0,-236,602,-143),96=>array(181,616,422,800),97=>array(23,-14,557,560),98=>array(23,-14,569,760),99=>array(73,-14,565,560),100=>array(32,-14,621,760),101=>array(37,-14,564,561),102=>array(113,0,619,760),103=>array(9,-207,581,562),104=>array(29,0,547,760),105=>array(7,0,527,813),106=>array(-31,-207,512,813),107=>array(40,0,634,760),108=>array(114,0,505,760),109=>array(-16,0,589,560),110=>array(29,0,547,560),111=>array(43,-14,559,561),112=>array(-18,-208,571,560),113=>array(33,-208,579,561),114=>array(75,0,599,560),115=>array(44,-14,534,560),116=>array(80,0,571,702),117=>array(52,-14,569,547),118=>array(84,0,601,547),119=>array(44,0,647,547),120=>array(-37,0,599,547),121=>array(-44,-207,614,547),122=>array(24,0,580,547),123=>array(64,-163,591,760),124=>array(245,-236,356,764),125=>array(-15,-163,512,760),126=>array(43,226,559,396),161=>array(165,0,437,729),162=>array(51,-153,538,699),163=>array(-11,0,608,742),164=>array(91,86,546,541),165=>array(-14,0,656,729),166=>array(245,-171,356,699),167=>array(51,-95,517,742),168=>array(203,654,535,774),169=>array(0,61,602,663),170=>array(103,209,513,742),171=>array(38,69,538,517),172=>array(43,177,559,439),173=>array(119,217,453,359),174=>array(0,61,602,663),175=>array(206,668,532,760),176=>array(138,417,463,742),177=>array(43,0,559,627),178=>array(127,326,502,742),179=>array(135,319,508,742),180=>array(278,616,590,800),181=>array(-27,-209,560,547),182=>array(50,-96,581,729),183=>array(199,259,397,437),184=>array(74,-196,311,0),185=>array(141,326,476,734),186=>array(108,209,521,742),187=>array(40,69,541,517),188=>array(15,-132,558,810),189=>array(15,-132,577,810),190=>array(23,-132,558,818),191=>array(44,-13,459,729),192=>array(-55,0,515,927),193=>array(-55,0,558,927),194=>array(-55,0,556,927),195=>array(-55,0,572,928),196=>array(-55,0,554,927),197=>array(-55,0,515,928),198=>array(-73,0,640,729),199=>array(64,-196,595,742),200=>array(14,0,610,927),201=>array(14,0,610,927),202=>array(14,0,610,927),203=>array(14,0,610,927),204=>array(13,0,589,927),205=>array(13,0,589,927),206=>array(13,0,589,927),207=>array(13,0,589,927),208=>array(-8,0,569,729),209=>array(-12,0,613,928),210=>array(30,-14,572,927),211=>array(30,-14,572,927),212=>array(30,-14,572,927),213=>array(30,-14,572,928),214=>array(30,-14,572,927),215=>array(58,72,543,556),216=>array(-69,-31,662,761),217=>array(22,-14,621,927),218=>array(22,-14,621,927),219=>array(22,-14,621,927),220=>array(22,-14,621,927),221=>array(71,0,663,927),222=>array(8,0,569,729),223=>array(14,-14,565,761),224=>array(23,-14,557,800),225=>array(23,-14,605,800),226=>array(23,-14,557,800),227=>array(23,-14,566,778),228=>array(23,-14,557,774),229=>array(23,-14,557,888),230=>array(-15,-14,601,560),231=>array(73,-196,565,560),232=>array(37,-14,564,800),233=>array(37,-14,590,800),234=>array(37,-14,564,800),235=>array(37,-14,564,774),236=>array(7,0,527,800),237=>array(7,0,568,800),238=>array(7,0,527,800),239=>array(7,0,527,774),240=>array(40,-14,589,760),241=>array(29,0,551,778),242=>array(43,-14,559,800),243=>array(43,-14,590,800),244=>array(43,-14,559,800),245=>array(43,-14,559,778),246=>array(43,-14,559,774),247=>array(32,42,569,585),248=>array(-40,-57,640,603),249=>array(52,-14,569,800),250=>array(52,-14,590,800),251=>array(52,-14,569,800),252=>array(52,-14,569,774),253=>array(-44,-207,614,800),254=>array(-18,-208,571,760),255=>array(-44,-207,614,774),256=>array(-55,0,562,913),257=>array(23,-14,557,760),258=>array(-55,0,575,927),259=>array(23,-14,557,784),260=>array(-55,-196,515,729),261=>array(23,-196,557,560),262=>array(64,-14,627,927),263=>array(73,-14,632,800),264=>array(64,-14,625,927),265=>array(73,-14,576,800),266=>array(64,-14,595,927),267=>array(73,-14,565,774),268=>array(64,-14,650,927),269=>array(73,-14,613,800),270=>array(-4,0,592,927),271=>array(32,-14,808,760),272=>array(-8,0,569,729),273=>array(32,-14,681,760),274=>array(14,0,610,913),275=>array(37,-14,564,760),276=>array(14,0,610,927),277=>array(37,-14,566,784),278=>array(14,0,610,927),279=>array(37,-14,564,774),280=>array(14,-196,610,729),281=>array(37,-196,564,561),282=>array(14,0,610,927),283=>array(37,-14,603,800),284=>array(50,-14,621,927),285=>array(9,-207,581,800),286=>array(50,-14,599,927),287=>array(9,-207,581,784),288=>array(50,-14,582,927),289=>array(9,-207,581,774),290=>array(50,-241,582,742),291=>array(9,-207,581,771),292=>array(-4,0,606,927),293=>array(29,0,547,927),294=>array(-4,0,650,729),295=>array(10,0,527,760),296=>array(13,0,589,928),297=>array(7,0,529,778),298=>array(13,0,589,913),299=>array(7,0,532,760),300=>array(13,0,589,927),301=>array(7,0,547,784),302=>array(32,-196,608,729),303=>array(10,-196,530,813),304=>array(13,0,589,927),305=>array(7,0,527,547),306=>array(8,-16,718,729),307=>array(5,-193,710,827),308=>array(-10,-14,599,927),309=>array(-31,-207,516,800),310=>array(-9,-227,668,729),311=>array(40,-227,634,760),312=>array(32,0,626,547),313=>array(39,0,556,928),314=>array(114,0,556,928),315=>array(39,-227,516,729),316=>array(104,-224,505,760),317=>array(39,0,600,729),318=>array(114,0,641,760),319=>array(39,0,604,729),320=>array(114,0,678,760),321=>array(-34,0,516,729),322=>array(18,0,580,760),323=>array(-12,0,613,928),324=>array(29,0,587,804),325=>array(-12,-227,613,729),326=>array(29,-227,547,560),327=>array(-12,0,618,927),328=>array(29,0,581,800),329=>array(-84,0,625,760),330=>array(-0,-208,587,743),331=>array(50,-207,565,560),332=>array(30,-14,572,913),333=>array(43,-14,559,760),334=>array(30,-14,575,927),335=>array(43,-14,559,784),336=>array(30,-14,658,927),337=>array(43,-14,619,800),338=>array(15,0,660,729),339=>array(-10,-14,616,560),340=>array(4,0,569,928),341=>array(75,0,670,804),342=>array(4,-227,569,729),343=>array(16,-227,599,560),344=>array(4,0,583,927),345=>array(75,0,613,800),346=>array(2,-14,566,928),347=>array(44,-14,587,804),348=>array(2,-14,569,927),349=>array(44,-14,534,800),350=>array(2,-196,566,742),351=>array(44,-196,534,560),352=>array(2,-14,579,927),353=>array(44,-14,571,800),354=>array(74,-196,629,729),355=>array(80,-196,571,702),356=>array(88,0,629,927),357=>array(80,0,681,813),358=>array(88,0,629,729),359=>array(71,0,562,702),360=>array(22,-14,621,928),361=>array(52,-14,569,778),362=>array(22,-14,621,913),363=>array(52,-14,569,760),364=>array(22,-14,621,927),365=>array(52,-14,569,784),366=>array(22,-14,621,1053),367=>array(52,-14,569,891),368=>array(22,-14,658,927),369=>array(52,-14,619,800),370=>array(22,-204,621,729),371=>array(52,-196,569,547),372=>array(20,0,669,931),373=>array(44,0,647,804),374=>array(71,0,663,931),375=>array(-44,-207,614,804),376=>array(71,0,663,927),377=>array(-16,0,630,928),378=>array(24,0,587,804),379=>array(-16,0,630,927),380=>array(24,0,580,774),381=>array(-16,0,630,927),382=>array(24,0,580,800),383=>array(113,0,619,760),384=>array(23,-14,569,760),385=>array(17,0,607,730),386=>array(8,0,604,729),387=>array(0,-14,539,760),388=>array(29,0,555,729),389=>array(22,-14,561,760),390=>array(7,-14,528,742),391=>array(68,-14,704,802),392=>array(63,-14,702,760),393=>array(-8,0,569,729),394=>array(16,0,589,729),395=>array(29,0,637,729),396=>array(54,-14,634,760),397=>array(41,-220,574,560),398=>array(11,0,607,729),399=>array(44,-14,557,742),400=>array(29,-14,583,742),401=>array(-39,-207,641,729),402=>array(-50,-207,652,760),403=>array(12,-14,663,802),404=>array(41,-142,671,729),405=>array(-68,-1,611,760),406=>array(130,0,589,729),407=>array(13,0,589,729),408=>array(-62,0,649,729),409=>array(11,0,606,760),410=>array(86,0,482,760),411=>array(-35,0,489,760),412=>array(4,-13,636,729),413=>array(-77,-208,679,729),414=>array(49,-208,558,560),415=>array(30,-14,557,742),416=>array(-13,-14,661,759),417=>array(-0,-14,607,570),418=>array(-2,-14,659,742),419=>array(27,-208,675,560),420=>array(40,0,619,729),421=>array(-21,-208,558,760),422=>array(5,-116,561,729),423=>array(32,-14,574,742),424=>array(61,-14,544,560),425=>array(-23,0,629,729),426=>array(95,-207,600,760),427=>array(139,-207,630,702),428=>array(40,0,629,730),429=>array(65,0,557,760),430=>array(88,-208,627,729),431=>array(-27,-14,688,759),432=>array(-23,-14,608,570),433=>array(43,0,627,713),434=>array(30,0,538,729),435=>array(72,0,666,729),436=>array(-41,-207,659,547),437=>array(-15,0,631,729),438=>array(23,0,579,547),439=>array(-23,-14,629,729),440=>array(-26,-14,611,729),441=>array(22,-215,610,547),442=>array(-11,-208,585,547),443=>array(-16,0,551,742),444=>array(-23,-14,615,729),445=>array(-14,-215,573,547),446=>array(27,-15,514,702),447=>array(-18,-208,594,560),448=>array(165,0,438,729),449=>array(53,0,549,729),450=>array(8,0,604,729),451=>array(165,0,437,729),461=>array(-55,0,579,927),462=>array(23,-14,571,800),463=>array(13,0,589,927),464=>array(7,0,571,800),465=>array(30,-14,579,927),466=>array(43,-14,571,800),467=>array(22,-14,621,927),468=>array(52,-14,578,800),469=>array(22,-14,621,985),470=>array(52,-14,569,914),471=>array(22,-14,621,1007),472=>array(52,-14,648,1002),473=>array(22,-14,621,1008),474=>array(52,-14,626,1002),475=>array(22,-14,621,1008),476=>array(52,-14,569,1002),477=>array(41,-14,560,560),478=>array(-55,0,578,985),479=>array(23,-14,557,914),480=>array(-55,0,578,985),481=>array(23,-14,557,914),482=>array(-73,0,640,913),483=>array(-15,-14,601,760),486=>array(50,-14,646,927),487=>array(9,-207,581,800),488=>array(-9,0,668,927),489=>array(40,0,634,927),490=>array(30,-204,572,742),491=>array(43,-204,559,561),492=>array(30,-204,572,913),493=>array(43,-204,559,760),494=>array(-23,-14,629,927),495=>array(-14,-215,577,800),500=>array(50,-14,624,927),501=>array(9,-207,590,800),502=>array(-58,-14,608,729),504=>array(-12,0,613,927),505=>array(29,0,547,801),508=>array(-73,0,660,927),509=>array(-15,-14,601,800),510=>array(-69,-31,662,927),511=>array(-40,-57,640,800),512=>array(-55,0,558,927),513=>array(23,-14,557,800),514=>array(-55,0,550,927),515=>array(23,-14,557,784),516=>array(14,0,610,927),517=>array(37,-14,564,800),518=>array(14,0,610,927),519=>array(37,-14,564,784),520=>array(13,0,589,927),521=>array(7,0,527,800),522=>array(13,0,589,927),523=>array(7,0,527,784),524=>array(30,-14,572,927),525=>array(43,-14,559,800),526=>array(30,-14,572,927),527=>array(43,-14,559,784),528=>array(4,0,569,927),529=>array(75,0,599,800),530=>array(4,0,569,927),531=>array(75,0,599,784),532=>array(22,-14,621,927),533=>array(52,-14,569,800),534=>array(22,-14,621,927),535=>array(52,-14,569,784),536=>array(2,-246,566,742),537=>array(44,-246,534,560),538=>array(66,-246,629,729),539=>array(80,-246,571,702),540=>array(-18,-210,677,742),541=>array(9,-211,620,560),542=>array(-4,0,606,927),543=>array(29,0,556,927),545=>array(-10,-68,564,760),548=>array(5,-207,651,729),549=>array(46,-207,602,547),550=>array(-55,0,515,927),551=>array(23,-14,557,774),552=>array(14,-196,610,729),553=>array(37,-196,564,561),554=>array(30,-14,578,985),555=>array(43,-14,559,914),556=>array(30,-14,578,985),557=>array(43,-14,559,914),558=>array(30,-14,572,927),559=>array(43,-14,559,774),560=>array(30,-14,578,985),561=>array(43,-14,559,914),562=>array(71,0,663,913),563=>array(-44,-207,614,760),564=>array(83,-68,544,760),565=>array(-30,-68,569,560),566=>array(77,-68,569,702),567=>array(-31,-207,460,547),568=>array(-13,-14,576,760),569=>array(26,-214,615,560),570=>array(-69,-31,663,761),571=>array(-69,-31,663,761),572=>array(-41,-57,640,603),573=>array(-6,0,542,729),574=>array(-61,-31,671,761),575=>array(65,-240,556,560),576=>array(49,-240,604,547),577=>array(44,0,612,729),579=>array(-39,0,575,730),580=>array(-8,-14,621,729),581=>array(-45,0,503,729),588=>array(-4,0,569,729),589=>array(68,0,599,560),592=>array(46,-14,568,560),593=>array(59,-14,597,560),594=>array(5,-14,543,560),595=>array(-14,-14,524,759),596=>array(35,-14,519,561),597=>array(84,-69,568,561),598=>array(32,-162,569,760),599=>array(15,-14,614,759),600=>array(18,-14,559,560),601=>array(41,-14,560,560),602=>array(-18,-14,604,560),603=>array(22,-11,581,560),604=>array(-0,-11,559,560),605=>array(-27,-11,584,560),606=>array(53,-21,575,559),607=>array(-4,-207,541,547),608=>array(-26,-208,688,760),609=>array(48,-208,615,547),610=>array(75,0,556,546),611=>array(35,-203,628,554),612=>array(102,-59,613,547),613=>array(86,-214,595,546),614=>array(7,0,516,759),615=>array(28,-208,536,759),616=>array(-22,0,499,760),617=>array(102,-1,500,547),618=>array(-1,0,604,547),619=>array(13,-1,562,759),620=>array(53,0,497,760),621=>array(129,-217,472,760),622=>array(86,-215,609,760),623=>array(21,-13,618,547),624=>array(40,-208,637,547),625=>array(4,-208,602,560),626=>array(-44,-216,603,560),627=>array(-0,-216,519,560),628=>array(5,0,597,547),629=>array(48,-14,554,560),630=>array(37,-1,613,547),631=>array(31,0,564,574),632=>array(-10,-208,612,762),633=>array(42,-13,565,547),634=>array(21,-13,586,759),635=>array(7,-208,531,547),636=>array(16,-208,580,560),637=>array(60,-208,580,560),638=>array(13,0,589,547),639=>array(13,0,504,547),640=>array(-2,0,501,547),641=>array(-21,0,624,547),642=>array(61,-208,551,560),643=>array(-50,-207,652,760),644=>array(-50,-207,652,760),645=>array(117,-207,485,760),646=>array(-38,-207,652,760),647=>array(28,-155,520,547),648=>array(103,-208,595,702),649=>array(33,-14,578,547),650=>array(42,-51,619,547),651=>array(73,-1,564,547),652=>array(-14,0,510,547),653=>array(-53,0,554,547),654=>array(-45,0,614,754),655=>array(86,0,622,547),656=>array(-11,-208,545,547),657=>array(10,-55,565,547),658=>array(-14,-215,577,547),659=>array(6,-215,582,547),660=>array(94,0,542,759),661=>array(102,0,588,759),662=>array(14,0,500,759),663=>array(40,-208,608,759),664=>array(26,-28,575,582),665=>array(5,0,545,547),666=>array(27,-21,549,559),667=>array(9,0,646,759),668=>array(5,0,597,547),669=>array(-26,-208,574,813),670=>array(29,-208,625,547),671=>array(62,0,462,547),672=>array(34,-208,632,759),673=>array(15,0,552,759),674=>array(92,0,579,759),675=>array(-5,-14,611,760),676=>array(1,-219,617,756),677=>array(-13,-55,604,760),678=>array(50,-14,584,702),679=>array(98,-207,629,760),680=>array(63,-69,597,702),681=>array(62,-207,587,760),682=>array(77,-14,585,760),683=>array(73,-2,612,760),684=>array(25,0,637,641),685=>array(85,86,517,641),686=>array(100,-214,628,759),687=>array(110,-208,529,759),688=>array(119,326,439,752),689=>array(119,326,439,751),690=>array(135,177,467,748),691=>array(136,326,463,640),692=>array(139,319,466,633),693=>array(115,209,443,632),694=>array(99,326,503,633),695=>array(138,326,524,633),696=>array(107,211,517,633),697=>array(220,557,408,800),699=>array(205,441,468,760),700=>array(180,441,443,760),701=>array(235,595,393,844),702=>array(293,481,460,760),703=>array(264,481,431,760),704=>array(174,326,454,751),705=>array(171,326,480,751),710=>array(164,616,534,800),711=>array(202,616,571,800),712=>array(228,488,374,759),713=>array(206,668,532,760),716=>array(228,-81,374,190),717=>array(38,-198,364,-106),718=>array(229,-285,470,-102),719=>array(230,-285,542,-102),720=>array(147,0,455,547),721=>array(218,361,419,547),722=>array(252,269,418,547),723=>array(223,269,390,547),726=>array(139,119,463,427),727=>array(183,229,419,317),728=>array(218,639,547,784),729=>array(290,654,447,774),730=>array(226,610,504,888),731=>array(125,-196,335,0),732=>array(184,638,551,778),733=>array(182,616,619,800),734=>array(-165,213,440,524),736=>array(135,216,504,640),737=>array(173,326,429,752),738=>array(140,319,445,640),739=>array(96,326,496,633),740=>array(172,326,479,751),741=>array(183,0,536,693),742=>array(154,0,536,693),743=>array(125,0,536,693),744=>array(96,0,536,693),745=>array(66,0,536,693),750=>array(72,441,589,760),755=>array(94,-245,313,-31),768=>array(181,616,422,800),769=>array(278,616,590,800),770=>array(164,616,534,800),771=>array(184,638,551,778),772=>array(206,668,532,760),773=>array(0,663,602,755),774=>array(218,639,547,784),775=>array(290,654,447,774),776=>array(203,654,535,774),777=>array(196,616,419,849),778=>array(226,610,504,888),779=>array(182,616,619,800),780=>array(202,616,571,800),781=>array(233,616,369,833),782=>array(94,616,508,833),783=>array(154,616,503,800),784=>array(218,639,547,879),785=>array(190,639,521,784),786=>array(212,441,422,590),787=>array(209,595,393,844),788=>array(235,595,393,844),789=>array(278,616,500,800),790=>array(247,-290,488,-106),791=>array(212,-290,524,-106),792=>array(151,-394,369,-123),793=>array(179,-394,397,-123),794=>array(174,658,463,929),795=>array(193,361,409,570),796=>array(147,-245,278,-31),797=>array(122,-305,412,-123),798=>array(89,-394,378,-212),799=>array(110,-394,399,-123),800=>array(156,-215,446,-123),801=>array(245,-207,551,82),802=>array(98,-208,325,81),803=>array(119,-226,277,-105),804=>array(32,-226,364,-105),805=>array(94,-245,313,-31),806=>array(66,-246,276,-97),807=>array(74,-196,311,0),808=>array(104,-196,314,0),809=>array(233,-323,369,-106),810=>array(129,-289,473,-106),811=>array(112,-239,515,-94),812=>array(36,-237,404,-53),813=>array(0,-237,368,-53),814=>array(48,-240,377,-95),815=>array(20,-239,351,-94),816=>array(14,-238,381,-98),817=>array(38,-198,364,-106),818=>array(0,-236,602,-143),819=>array(0,-236,602,-9),820=>array(26,226,576,396),821=>array(84,214,481,309),822=>array(-9,214,611,309),823=>array(-41,-57,640,603),824=>array(-69,-31,663,761),825=>array(128,-245,259,-31),826=>array(129,-254,473,-71),827=>array(134,-386,468,-106),828=>array(87,-239,490,-94),829=>array(160,582,442,839),830=>array(206,595,396,867),831=>array(0,528,602,755),835=>array(209,595,393,844),856=>array(592,654,749,774),865=>array(-132,735,706,880),884=>array(220,557,408,800),885=>array(194,-208,382,35),890=>array(185,-208,306,-45),894=>array(83,-140,412,519),900=>array(278,616,590,800),901=>array(203,654,645,999),902=>array(-55,0,515,800),903=>array(199,259,397,437),904=>array(-123,0,610,800),905=>array(-142,0,606,800),906=>array(-113,0,589,800),908=>array(-35,-14,572,800),910=>array(-193,0,663,800),911=>array(-25,0,559,800),912=>array(164,0,645,999),913=>array(-55,0,515,729),914=>array(-10,0,575,730),915=>array(89,0,685,729),916=>array(-55,0,515,729),917=>array(14,0,610,729),918=>array(-16,0,630,729),919=>array(-4,0,606,729),920=>array(44,-14,557,742),921=>array(13,0,589,729),922=>array(-9,0,668,729),923=>array(-55,0,515,729),924=>array(-28,0,630,729),925=>array(-12,0,613,729),926=>array(-4,0,606,729),927=>array(30,-14,572,742),928=>array(67,0,677,729),929=>array(8,0,591,729),931=>array(-23,0,629,729),932=>array(88,0,629,729),933=>array(71,0,663,729),934=>array(44,0,557,729),935=>array(-70,0,656,729),936=>array(77,0,634,729),937=>array(-25,0,559,713),938=>array(13,0,589,927),939=>array(71,0,663,927),940=>array(26,-12,615,800),941=>array(49,-11,590,800),942=>array(49,-208,590,800),943=>array(164,0,590,800),944=>array(69,0,645,999),945=>array(26,-12,615,559),946=>array(-31,-208,563,766),947=>array(32,-208,590,547),948=>array(27,-14,561,766),949=>array(49,-11,540,557),950=>array(66,-208,604,760),951=>array(49,-208,558,560),952=>array(47,-12,554,770),953=>array(164,0,446,547),954=>array(32,0,626,547),955=>array(36,0,560,760),956=>array(-27,-209,560,547),957=>array(76,0,573,547),958=>array(55,-208,604,760),959=>array(43,-14,559,561),960=>array(4,-19,602,547),961=>array(-1,-208,577,560),962=>array(101,-208,585,561),963=>array(21,-14,598,547),964=>array(98,0,589,547),965=>array(69,0,580,547),966=>array(35,-208,574,552),967=>array(-30,-208,632,547),968=>array(56,-208,643,547),969=>array(31,-14,577,547),970=>array(164,0,535,774),971=>array(69,0,580,774),972=>array(43,-14,590,800),973=>array(69,0,590,800),974=>array(31,-14,590,800),976=>array(54,-11,542,768),977=>array(46,-11,553,768),978=>array(12,0,568,729),979=>array(-228,0,568,800),980=>array(12,0,568,927),981=>array(27,-208,573,760),982=>array(9,0,627,547),983=>array(3,-188,632,547),984=>array(63,-208,576,742),985=>array(66,-208,573,560),986=>array(44,-222,639,729),987=>array(36,-208,602,547),988=>array(23,0,619,729),989=>array(-83,-208,581,760),990=>array(9,-2,602,729),991=>array(42,0,560,759),992=>array(52,-208,563,742),993=>array(-15,-180,501,559),1008=>array(-17,-3,613,547),1009=>array(39,-213,578,560),1010=>array(73,-14,565,560),1011=>array(-31,-207,512,813),1012=>array(44,-14,557,742),1013=>array(78,-14,562,561),1014=>array(34,-14,518,561),1015=>array(8,0,569,729),1016=>array(-18,-208,571,760),1017=>array(64,-14,595,742),1018=>array(-29,0,631,729),1019=>array(-27,-208,629,498),1020=>array(-42,-208,577,560),1021=>array(7,-14,528,742),1022=>array(64,-14,595,742),1023=>array(7,-14,528,742),1024=>array(14,0,610,927),1025=>array(14,0,610,927),1026=>array(76,-207,631,760),1027=>array(89,0,685,927),1028=>array(61,-14,595,742),1029=>array(2,-14,566,742),1030=>array(13,0,589,729),1031=>array(13,0,589,927),1032=>array(-10,-14,563,729),1033=>array(-78,0,576,729),1034=>array(-61,0,576,729),1035=>array(76,0,631,760),1036=>array(-9,0,668,927),1037=>array(-13,0,614,927),1038=>array(20,0,659,927),1039=>array(11,-157,621,729),1040=>array(-55,0,515,729),1041=>array(8,0,604,729),1042=>array(-10,0,575,730),1043=>array(89,0,685,729),1044=>array(-66,-157,601,729),1045=>array(14,0,610,729),1046=>array(-64,0,667,729),1047=>array(-15,-14,547,742),1048=>array(-13,0,614,729),1049=>array(-13,0,614,927),1050=>array(-9,0,668,729),1051=>array(-68,0,606,729),1052=>array(-28,0,630,729),1053=>array(-4,0,606,729),1054=>array(30,-14,572,742),1055=>array(67,0,677,729),1056=>array(8,0,591,729),1057=>array(64,-14,595,742),1058=>array(88,0,629,729),1059=>array(20,0,659,729),1060=>array(11,0,599,729),1061=>array(-70,0,656,729),1062=>array(-17,-157,593,729),1063=>array(73,0,624,760),1064=>array(-33,0,634,729),1065=>array(-18,-157,649,729),1066=>array(61,0,553,729),1067=>array(-51,0,653,729),1068=>array(-10,0,521,729),1069=>array(7,-14,542,742),1070=>array(-51,-14,599,742),1071=>array(-30,0,637,729),1072=>array(23,-14,557,560),1073=>array(18,-14,565,787),1074=>array(5,0,548,547),1075=>array(55,0,552,547),1076=>array(-36,-140,583,547),1077=>array(37,-14,564,561),1078=>array(-46,0,647,547),1079=>array(25,-11,538,560),1080=>array(21,0,586,547),1081=>array(21,0,586,784),1082=>array(32,0,626,547),1083=>array(-20,0,604,547),1084=>array(-11,0,613,547),1085=>array(31,0,576,547),1086=>array(43,-14,559,561),1087=>array(31,0,576,547),1088=>array(-18,-208,571,560),1089=>array(73,-14,565,560),1090=>array(112,0,576,547),1091=>array(-44,-207,614,547),1092=>array(30,-208,571,760),1093=>array(-37,0,599,547),1094=>array(8,-140,553,547),1095=>array(145,0,624,547),1096=>array(-15,0,617,547),1097=>array(-11,-140,621,547),1098=>array(51,0,552,547),1099=>array(-38,0,640,547),1100=>array(14,0,501,547),1101=>array(34,-14,526,560),1102=>array(0,-14,655,560),1103=>array(-6,0,594,547),1104=>array(37,-14,564,800),1105=>array(37,-14,564,774),1106=>array(40,-207,543,760),1107=>array(55,0,590,800),1108=>array(135,-14,619,561),1109=>array(44,-14,534,560),1110=>array(7,0,527,813),1111=>array(7,0,554,774),1112=>array(-31,-207,512,813),1113=>array(-51,0,583,547),1114=>array(-36,0,583,547),1115=>array(20,0,502,760),1116=>array(32,0,626,800),1117=>array(21,0,586,800),1118=>array(-44,-207,614,784),1119=>array(44,-140,590,547),1122=>array(45,0,546,729),1123=>array(57,0,548,760),1138=>array(30,-14,557,742),1139=>array(48,-14,554,560),1168=>array(89,0,714,878),1169=>array(41,0,566,700),1170=>array(86,0,685,729),1171=>array(35,0,552,547),1172=>array(89,-207,685,729),1173=>array(108,-207,605,547),1174=>array(-64,-157,667,729),1175=>array(-46,-140,647,547),1176=>array(-15,-196,547,742),1177=>array(25,-196,538,560),1178=>array(-9,-193,668,729),1179=>array(85,-158,680,547),1186=>array(18,-193,628,729),1187=>array(14,-158,614,547),1188=>array(-33,0,663,729),1189=>array(-15,0,644,547),1194=>array(64,-196,595,742),1195=>array(73,-196,565,560),1196=>array(161,-193,700,729),1197=>array(167,-158,629,547),1198=>array(71,0,663,729),1199=>array(69,-208,615,547),1200=>array(62,0,665,729),1201=>array(44,-208,615,547),1202=>array(13,-193,725,729),1203=>array(27,-158,666,547),1210=>array(49,0,610,760),1211=>array(29,0,547,760),1216=>array(13,0,589,729),1217=>array(-64,0,667,927),1218=>array(-46,0,647,784),1219=>array(-9,-207,666,729),1220=>array(85,-207,680,547),1223=>array(-4,-207,606,729),1224=>array(84,-207,629,547),1227=>array(146,-193,698,760),1228=>array(145,-158,624,547),1231=>array(136,0,427,760),1232=>array(-55,0,575,927),1233=>array(23,-14,557,784),1234=>array(-55,0,554,927),1235=>array(23,-14,557,774),1236=>array(-73,0,640,729),1237=>array(-15,-14,601,560),1238=>array(14,0,610,927),1239=>array(37,-14,564,784),1240=>array(44,-14,557,742),1241=>array(41,-14,560,560),1242=>array(44,-14,557,927),1243=>array(41,-14,560,774),1244=>array(-64,0,667,927),1245=>array(-46,0,647,774),1246=>array(-15,-14,547,927),1247=>array(25,-11,582,774),1248=>array(-23,-14,629,729),1249=>array(-14,-215,577,547),1250=>array(-13,0,614,913),1251=>array(21,0,586,760),1252=>array(-13,0,614,927),1253=>array(21,0,586,762),1254=>array(30,-14,572,927),1255=>array(43,-14,559,774),1256=>array(44,-14,557,742),1257=>array(48,-14,554,560),1258=>array(44,-14,557,927),1259=>array(48,-14,554,774),1260=>array(7,-14,596,927),1261=>array(34,-14,563,774),1262=>array(20,0,659,913),1263=>array(-44,-207,614,760),1264=>array(20,0,659,927),1265=>array(-44,-207,614,774),1266=>array(20,0,659,927),1267=>array(-44,-207,619,800),1268=>array(73,0,640,927),1269=>array(145,0,624,774),1270=>array(89,-193,685,729),1271=>array(108,-158,605,547),1272=>array(-51,0,653,927),1273=>array(-38,0,640,774),1296=>array(29,-14,583,742),1297=>array(49,-11,540,557),1306=>array(30,-137,572,742),1307=>array(33,-208,579,561),1308=>array(20,0,669,729),1309=>array(44,0,647,547),1329=>array(9,-31,606,729),1330=>array(-24,0,574,743),1331=>array(27,0,577,743),1332=>array(27,0,577,743),1333=>array(20,-14,583,729),1334=>array(-20,0,584,743),1335=>array(-16,0,583,729),1336=>array(-24,0,574,743),1337=>array(-50,-14,593,743),1338=>array(-13,-14,618,729),1339=>array(-19,0,542,729),1340=>array(3,0,480,729),1341=>array(-31,-13,601,729),1342=>array(18,-14,646,742),1343=>array(59,0,585,729),1344=>array(12,-37,605,729),1345=>array(0,-31,583,743),1346=>array(27,0,542,743),1347=>array(-12,0,639,741),1348=>array(-12,-14,657,729),1349=>array(16,-14,584,741),1350=>array(59,-14,574,729),1351=>array(17,-13,568,729),1352=>array(-20,0,578,743),1353=>array(38,-39,589,743),1354=>array(30,0,601,741),1355=>array(-17,0,589,741),1356=>array(-56,0,577,743),1357=>array(24,-14,622,729),1358=>array(23,0,585,729),1359=>array(22,-14,577,742),1360=>array(-20,0,578,743),1361=>array(16,-13,584,741),1362=>array(-16,0,583,729),1363=>array(2,0,602,729),1364=>array(-32,0,608,741),1365=>array(30,-14,572,742),1366=>array(-13,-14,582,729),1369=>array(264,481,431,760),1370=>array(169,411,432,730),1371=>array(115,616,486,800),1372=>array(40,618,562,893),1373=>array(151,616,450,800),1374=>array(7,590,565,906),1375=>array(78,618,507,760),1377=>array(21,-13,617,547),1378=>array(-1,-208,546,560),1379=>array(40,-208,588,560),1380=>array(16,-208,539,560),1381=>array(34,-14,566,760),1382=>array(40,-208,588,560),1383=>array(14,0,546,760),1384=>array(-1,-208,546,560),1385=>array(-48,-208,594,560),1386=>array(3,-14,604,760),1387=>array(-12,-208,536,760),1388=>array(86,-208,390,547),1389=>array(-55,-208,615,760),1390=>array(22,-14,583,760),1391=>array(64,-208,573,760),1392=>array(27,0,545,760),1393=>array(33,-14,513,760),1394=>array(16,-208,524,560),1395=>array(45,-14,583,741),1396=>array(63,-14,677,760),1397=>array(55,-207,547,547),1398=>array(77,-13,585,760),1399=>array(26,-208,559,559),1400=>array(27,0,545,560),1401=>array(54,-208,502,579),1402=>array(40,-208,636,547),1403=>array(36,-208,570,559),1404=>array(2,0,532,560),1405=>array(55,-14,572,547),1406=>array(31,-208,581,760),1407=>array(21,-13,581,560),1408=>array(7,-208,555,560),1409=>array(18,-207,590,562),1410=>array(39,0,478,547),1411=>array(20,-208,580,760),1412=>array(-36,-208,599,560),1413=>array(43,-14,559,561),1414=>array(-10,-208,592,760),1415=>array(-13,-14,528,760),1417=>array(169,0,433,519),1418=>array(137,217,472,359),3713=>array(-6,-10,581,560),3714=>array(26,-39,574,568),3716=>array(38,-10,562,568),3719=>array(48,-238,563,568),3720=>array(42,-0,570,575),3722=>array(39,-238,601,563),3725=>array(35,-14,605,560),3732=>array(23,-14,567,560),3733=>array(-12,-15,601,579),3734=>array(74,-240,601,560),3735=>array(18,-8,593,571),3737=>array(-20,-14,617,568),3738=>array(38,-8,594,561),3739=>array(19,-8,616,760),3740=>array(7,-8,687,648),3741=>array(-3,-8,636,760),3742=>array(10,-8,619,561),3743=>array(-9,-8,641,760),3745=>array(-32,-14,619,547),3746=>array(16,-14,627,760),3747=>array(22,-8,599,568),3749=>array(-3,-8,592,568),3751=>array(11,-13,586,560),3754=>array(-11,-8,698,648),3755=>array(-7,-12,608,575),3757=>array(18,-8,595,568),3758=>array(-3,-8,661,617),3759=>array(31,-126,636,579),3760=>array(69,-6,656,567),3761=>array(190,620,720,896),3762=>array(126,0,622,588),3763=>array(-425,0,622,846),3764=>array(3,622,595,950),3765=>array(-54,633,601,962),3766=>array(2,622,595,950),3767=>array(3,633,657,962),3768=>array(147,-385,395,-55),3769=>array(90,-316,418,-28),3771=>array(-14,610,610,896),3772=>array(-11,-311,609,-48),3784=>array(225,659,376,844),3785=>array(-10,622,627,918),3786=>array(20,619,729,963),3787=>array(125,612,478,917),3788=>array(167,603,787,866),3789=>array(177,639,427,846),4304=>array(30,0,552,567),4305=>array(18,0,538,758),4306=>array(8,-196,544,521),4307=>array(7,-197,624,516),4308=>array(12,-196,589,521),4309=>array(13,-196,587,521),4310=>array(16,0,538,757),4311=>array(3,0,605,516),4312=>array(37,0,563,521),4313=>array(15,-196,580,512),4314=>array(28,-196,585,521),4315=>array(18,0,596,757),4316=>array(16,0,568,745),4317=>array(0,0,601,516),4318=>array(11,0,567,754),4319=>array(11,-196,626,539),4320=>array(-21,0,580,765),4321=>array(17,0,538,741),4322=>array(-18,-197,590,656),4323=>array(35,-197,589,531),4324=>array(28,-196,625,521),4325=>array(-7,-196,646,741),4326=>array(22,-197,621,521),4327=>array(18,-196,622,506),4328=>array(21,0,604,757),4329=>array(-26,0,538,757),4330=>array(10,-196,590,539),4331=>array(17,0,626,741),4332=>array(16,0,645,757),4333=>array(-9,-196,563,741),4334=>array(21,0,542,741),4335=>array(5,-196,572,610),4336=>array(10,0,584,757),4337=>array(-0,-196,616,757),4338=>array(3,-134,576,521),4339=>array(12,-196,625,521),4340=>array(-8,-196,614,757),4341=>array(9,0,599,757),4342=>array(16,-196,626,521),4343=>array(4,-197,540,521),4344=>array(12,-197,583,534),4345=>array(62,-196,596,527),4346=>array(38,-95,569,521),4347=>array(87,24,481,492),4348=>array(170,359,453,758),7426=>array(5,-14,621,560),7432=>array(21,-11,580,560),7433=>array(93,-264,613,549),7444=>array(-19,-14,607,560),7446=>array(101,273,607,560),7447=>array(100,-14,607,273),7453=>array(20,0,653,440),7454=>array(32,-2,647,438),7455=>array(21,-0,670,523),7468=>array(82,326,441,734),7469=>array(80,326,516,734),7470=>array(102,326,465,735),7472=>array(107,326,462,734),7473=>array(119,326,484,734),7474=>array(119,326,484,734),7475=>array(139,318,477,742),7476=>array(114,326,488,734),7477=>array(125,326,477,734),7478=>array(128,318,480,734),7479=>array(91,326,505,734),7480=>array(119,326,417,734),7481=>array(98,326,503,734),7482=>array(109,326,494,734),7483=>array(109,326,494,734),7484=>array(131,318,470,742),7486=>array(110,326,471,734),7487=>array(92,326,449,734),7488=>array(165,326,502,734),7489=>array(129,318,499,734),7490=>array(128,326,530,734),7491=>array(132,318,467,640),7492=>array(135,318,470,640),7493=>array(143,318,483,640),7494=>array(110,318,497,640),7495=>array(108,318,449,751),7496=>array(132,318,496,751),7497=>array(134,318,469,640),7498=>array(133,318,468,640),7499=>array(126,320,473,640),7500=>array(129,320,476,640),7501=>array(145,210,495,640),7502=>array(176,178,502,633),7503=>array(102,326,469,751),7504=>array(106,326,479,640),7505=>array(144,210,463,640),7506=>array(137,318,465,640),7507=>array(137,318,442,640),7508=>array(126,479,449,640),7509=>array(153,318,476,479),7510=>array(106,209,470,640),7511=>array(162,326,471,719),7512=>array(150,318,470,632),7513=>array(101,326,493,573),7514=>array(123,319,496,632),7515=>array(166,326,496,632),7522=>array(137,0,465,455),7523=>array(136,0,463,314),7524=>array(150,-8,470,306),7525=>array(166,0,496,306),7543=>array(15,-208,587,561),7544=>array(114,326,488,734),7547=>array(52,0,657,547),7557=>array(170,-207,556,760),7579=>array(119,318,459,640),7580=>array(159,318,465,640),7581=>array(160,288,466,640),7582=>array(127,318,472,755),7583=>array(114,320,463,640),7584=>array(167,326,482,751),7585=>array(140,205,416,632),7586=>array(146,209,494,632),7587=>array(162,207,481,632),7588=>array(103,326,429,751),7589=>array(174,325,429,632),7590=>array(114,326,488,632),7591=>array(114,326,488,632),7592=>array(98,210,466,781),7593=>array(188,205,415,751),7594=>array(187,210,438,751),7595=>array(154,326,404,632),7596=>array(117,209,490,640),7597=>array(134,209,507,632),7598=>array(89,205,494,640),7599=>array(114,205,440,640),7600=>array(119,326,483,632),7601=>array(137,318,465,640),7602=>array(112,209,490,753),7603=>array(147,209,454,640),7604=>array(86,210,516,751),7605=>array(173,210,482,719),7606=>array(133,318,472,632),7607=>array(135,298,497,632),7609=>array(155,326,469,632),7610=>array(106,326,436,632),7611=>array(130,326,472,632),7612=>array(107,209,450,632),7613=>array(121,295,463,632),7614=>array(107,206,470,632),7615=>array(134,319,468,757),7680=>array(-55,-245,515,729),7681=>array(23,-245,557,560),7682=>array(-10,0,575,927),7683=>array(23,-14,569,774),7684=>array(-10,-226,575,730),7685=>array(23,-226,569,760),7686=>array(-10,-198,575,730),7687=>array(23,-198,569,760),7688=>array(64,-196,600,927),7689=>array(73,-196,632,800),7690=>array(-4,0,569,927),7691=>array(32,-14,621,774),7692=>array(-4,-226,569,729),7693=>array(32,-226,621,760),7694=>array(-4,-198,569,729),7695=>array(32,-198,621,760),7696=>array(-17,-196,569,729),7697=>array(14,-196,621,760),7698=>array(-24,-237,569,729),7699=>array(0,-237,621,760),7704=>array(14,-237,610,729),7705=>array(19,-237,564,561),7706=>array(14,-238,610,729),7707=>array(33,-238,564,561),7708=>array(14,-196,610,927),7709=>array(37,-196,566,784),7710=>array(23,0,619,927),7711=>array(113,0,619,927),7712=>array(50,-14,586,913),7713=>array(9,-207,581,760),7714=>array(-4,0,606,927),7715=>array(29,0,547,927),7716=>array(-4,-226,606,729),7717=>array(29,-226,547,760),7718=>array(-4,0,606,915),7719=>array(29,0,547,934),7720=>array(-90,-196,606,729),7721=>array(-73,-196,547,760),7722=>array(-4,-240,606,729),7723=>array(29,-240,547,760),7724=>array(13,-238,589,729),7725=>array(7,-238,527,813),7728=>array(-9,0,668,927),7729=>array(40,0,634,927),7730=>array(-9,-226,668,729),7731=>array(40,-226,634,760),7732=>array(-9,-198,668,729),7733=>array(40,-198,634,760),7734=>array(39,-226,516,729),7735=>array(114,-226,505,760),7736=>array(39,-226,562,913),7737=>array(114,-226,562,913),7738=>array(39,-198,516,729),7739=>array(38,-198,505,760),7740=>array(24,-237,516,729),7741=>array(0,-237,505,760),7742=>array(-28,0,630,927),7743=>array(-16,0,590,800),7744=>array(-28,0,630,927),7745=>array(-16,0,589,774),7746=>array(-28,-226,630,729),7747=>array(-16,-226,589,560),7748=>array(-12,0,613,927),7749=>array(29,0,547,774),7750=>array(-12,-226,613,729),7751=>array(29,-226,547,560),7752=>array(-12,-198,613,729),7753=>array(29,-198,547,560),7754=>array(-12,-237,613,729),7755=>array(0,-237,547,560),7756=>array(30,-14,572,997),7757=>array(43,-14,625,997),7764=>array(8,0,591,931),7765=>array(-18,-208,590,800),7766=>array(8,0,591,927),7767=>array(-18,-208,571,774),7768=>array(4,0,569,927),7769=>array(75,0,599,774),7770=>array(4,-226,569,729),7771=>array(75,-226,599,560),7772=>array(4,-226,569,913),7773=>array(75,-226,599,760),7774=>array(4,-198,569,729),7775=>array(38,-198,599,560),7776=>array(2,-14,566,927),7777=>array(44,-14,534,774),7778=>array(2,-226,566,742),7779=>array(44,-226,534,560),7784=>array(2,-226,566,927),7785=>array(44,-226,534,774),7786=>array(88,0,629,927),7787=>array(80,0,571,927),7788=>array(88,-226,629,729),7789=>array(80,-226,571,702),7790=>array(38,-198,629,729),7791=>array(38,-198,571,702),7792=>array(0,-237,629,729),7793=>array(0,-237,571,702),7794=>array(22,-226,621,729),7795=>array(32,-226,569,547),7796=>array(14,-238,621,729),7797=>array(14,-238,569,547),7798=>array(0,-237,621,729),7799=>array(0,-237,569,547),7800=>array(22,-14,621,997),7801=>array(52,-14,625,997),7804=>array(99,0,647,916),7805=>array(84,0,601,758),7806=>array(99,-226,647,729),7807=>array(84,-226,601,547),7808=>array(20,0,669,931),7809=>array(44,0,647,804),7810=>array(20,0,669,931),7811=>array(44,0,647,804),7812=>array(20,0,669,922),7813=>array(44,0,647,741),7814=>array(20,0,669,927),7815=>array(44,0,647,774),7816=>array(20,-226,669,729),7817=>array(44,-226,647,547),7818=>array(-70,0,656,927),7819=>array(-37,0,599,774),7820=>array(-70,0,656,927),7821=>array(-37,0,599,734),7822=>array(71,0,663,927),7823=>array(-44,-207,614,774),7824=>array(-16,0,630,931),7825=>array(24,0,580,803),7826=>array(-16,-226,630,729),7827=>array(24,-226,580,547),7828=>array(-16,-198,630,729),7829=>array(24,-198,580,547),7830=>array(29,-198,547,760),7831=>array(80,0,571,876),7832=>array(44,0,647,898),7833=>array(-44,-207,614,898),7835=>array(113,0,619,927),7839=>array(27,-14,561,766),7840=>array(-55,-226,515,729),7841=>array(23,-226,557,560),7852=>array(-55,-226,531,931),7853=>array(23,-226,557,803),7856=>array(-55,0,575,997),7857=>array(23,-14,557,954),7862=>array(-55,-226,575,927),7863=>array(23,-226,557,759),7864=>array(14,-226,610,729),7865=>array(37,-226,564,561),7868=>array(14,0,610,928),7869=>array(37,-14,564,762),7878=>array(14,-226,610,931),7879=>array(37,-226,564,803),7882=>array(13,-226,589,729),7883=>array(7,-226,527,813),7884=>array(30,-226,572,742),7885=>array(43,-226,559,561),7896=>array(30,-226,572,931),7897=>array(43,-226,559,803),7898=>array(-13,-14,661,927),7899=>array(-0,-14,607,800),7900=>array(-13,-14,661,927),7901=>array(-0,-14,607,800),7904=>array(-13,-14,661,928),7905=>array(-0,-14,607,778),7906=>array(-13,-226,661,759),7907=>array(-0,-226,607,570),7908=>array(22,-226,621,729),7909=>array(52,-226,569,547),7912=>array(-27,-14,688,927),7913=>array(-23,-14,608,800),7914=>array(-27,-14,688,927),7915=>array(-23,-14,608,800),7918=>array(-27,-14,688,928),7919=>array(-23,-14,608,778),7920=>array(-27,-226,688,759),7921=>array(-23,-226,608,570),7922=>array(71,0,663,931),7923=>array(-44,-207,614,804),7924=>array(71,-226,663,729),7925=>array(-44,-226,614,547),7928=>array(71,0,663,928),7929=>array(-44,-207,614,762),7936=>array(26,-12,615,806),7937=>array(26,-12,615,806),7938=>array(26,-12,615,806),7939=>array(26,-12,615,806),7940=>array(26,-12,644,806),7941=>array(26,-12,653,806),7942=>array(26,-12,615,978),7943=>array(26,-12,615,978),7944=>array(-55,0,515,806),7945=>array(-55,0,515,806),7946=>array(-260,0,515,806),7947=>array(-240,0,515,806),7948=>array(-155,0,515,806),7949=>array(-160,0,515,806),7950=>array(-55,0,515,978),7951=>array(-55,0,515,978),7952=>array(49,-11,540,806),7953=>array(49,-11,540,806),7954=>array(49,-11,573,806),7955=>array(49,-11,578,806),7956=>array(49,-11,644,806),7957=>array(49,-11,653,806),7960=>array(-77,0,610,806),7961=>array(-52,0,610,806),7962=>array(-360,0,610,806),7963=>array(-340,0,610,806),7964=>array(-284,0,610,806),7965=>array(-284,0,610,806),7968=>array(49,-208,558,806),7969=>array(49,-208,558,806),7970=>array(49,-208,573,806),7971=>array(49,-208,578,806),7972=>array(49,-208,644,806),7973=>array(49,-208,653,806),7974=>array(49,-208,588,978),7975=>array(49,-208,588,978),7976=>array(-101,0,606,806),7977=>array(-77,0,606,806),7978=>array(-387,0,606,806),7979=>array(-367,0,606,806),7980=>array(-313,0,606,806),7981=>array(-309,0,606,806),7982=>array(-140,0,606,978),7983=>array(-140,0,606,978),7984=>array(164,0,461,806),7985=>array(164,0,461,806),7986=>array(111,0,573,806),7987=>array(131,0,578,806),7988=>array(160,0,644,806),7989=>array(164,0,653,806),7990=>array(164,0,588,978),7991=>array(164,0,588,978),7992=>array(-77,0,589,806),7993=>array(-52,0,589,806),7994=>array(-348,0,589,806),7995=>array(-338,0,589,806),7996=>array(-279,0,589,806),7997=>array(-279,0,589,806),7998=>array(-118,0,589,978),7999=>array(-118,0,589,978),8000=>array(43,-14,559,806),8001=>array(43,-14,559,806),8002=>array(43,-14,573,806),8003=>array(43,-14,578,806),8004=>array(43,-14,644,806),8005=>array(43,-14,653,806),8008=>array(-40,-14,572,806),8009=>array(-52,-14,572,806),8010=>array(-350,-14,572,806),8011=>array(-331,-14,572,806),8012=>array(-191,-14,572,806),8013=>array(-191,-14,572,806),8016=>array(69,0,580,806),8017=>array(69,0,580,806),8018=>array(69,0,580,806),8019=>array(69,0,580,806),8020=>array(69,0,644,806),8021=>array(69,0,653,806),8022=>array(69,0,588,978),8023=>array(69,0,588,978),8025=>array(-125,0,663,806),8027=>array(-382,0,663,806),8029=>array(-360,0,663,806),8031=>array(-196,0,663,978),8032=>array(31,-14,577,806),8033=>array(31,-14,577,806),8034=>array(31,-14,577,806),8035=>array(31,-14,578,806),8036=>array(31,-14,644,806),8037=>array(31,-14,653,806),8038=>array(31,-14,588,978),8039=>array(31,-14,588,978),8040=>array(-30,0,559,806),8041=>array(-40,0,559,806),8042=>array(-350,0,559,806),8043=>array(-331,0,559,806),8044=>array(-179,0,559,806),8045=>array(-174,0,559,806),8046=>array(-62,0,559,978),8047=>array(-98,0,559,978),8048=>array(26,-12,615,800),8049=>array(26,-12,615,800),8050=>array(49,-11,540,800),8051=>array(49,-11,590,800),8052=>array(49,-208,558,800),8053=>array(49,-208,590,800),8054=>array(164,0,446,800),8055=>array(164,0,590,800),8056=>array(43,-14,559,800),8057=>array(43,-14,590,800),8058=>array(69,0,580,800),8059=>array(69,0,590,800),8060=>array(31,-14,577,800),8061=>array(31,-14,590,800),8064=>array(26,-208,615,806),8065=>array(26,-208,615,806),8066=>array(26,-208,615,806),8067=>array(26,-208,615,806),8068=>array(26,-208,644,806),8069=>array(26,-208,653,806),8070=>array(26,-208,615,978),8071=>array(26,-208,615,978),8072=>array(-55,-208,515,806),8073=>array(-55,-208,515,806),8074=>array(-260,-208,515,806),8075=>array(-240,-208,515,806),8076=>array(-155,-208,515,806),8077=>array(-160,-208,515,806),8078=>array(-55,-208,515,978),8079=>array(-55,-208,515,978),8080=>array(33,-208,558,806),8081=>array(33,-208,558,806),8082=>array(33,-208,573,806),8083=>array(33,-208,578,806),8084=>array(33,-208,644,806),8085=>array(33,-208,653,806),8086=>array(33,-208,588,978),8087=>array(33,-208,588,978),8088=>array(-101,-208,606,806),8089=>array(-77,-208,606,806),8090=>array(-387,-208,606,806),8091=>array(-367,-208,606,806),8092=>array(-313,-208,606,806),8093=>array(-309,-208,606,806),8094=>array(-140,-208,606,978),8095=>array(-140,-208,606,978),8096=>array(31,-208,577,806),8097=>array(31,-208,577,806),8098=>array(31,-208,577,806),8099=>array(31,-208,578,806),8100=>array(31,-208,644,806),8101=>array(31,-208,653,806),8102=>array(31,-208,588,978),8103=>array(31,-208,588,978),8104=>array(-30,-208,559,806),8105=>array(-40,-208,559,806),8106=>array(-350,-208,559,806),8107=>array(-331,-208,559,806),8108=>array(-179,-208,559,806),8109=>array(-174,-208,559,806),8110=>array(-62,-208,559,978),8111=>array(-98,-208,559,978),8112=>array(26,-12,615,784),8113=>array(26,-12,615,760),8114=>array(26,-208,615,800),8115=>array(26,-208,615,559),8116=>array(26,-208,615,800),8118=>array(26,-12,615,778),8119=>array(26,-208,615,778),8120=>array(-55,0,575,927),8121=>array(-55,0,562,913),8122=>array(-55,0,515,800),8123=>array(-55,0,515,800),8124=>array(-55,-208,515,729),8125=>array(263,595,461,806),8126=>array(185,-208,306,-45),8127=>array(263,595,461,806),8128=>array(184,638,551,778),8129=>array(203,654,592,944),8130=>array(33,-208,558,800),8131=>array(33,-208,558,560),8132=>array(33,-208,590,800),8134=>array(49,-208,558,778),8135=>array(33,-208,558,778),8136=>array(-161,0,610,800),8137=>array(-123,0,610,800),8138=>array(-175,0,606,800),8139=>array(-142,0,606,800),8140=>array(-4,-208,606,729),8141=>array(111,595,573,806),8142=>array(160,595,644,806),8143=>array(222,595,588,978),8144=>array(164,0,547,784),8145=>array(164,0,532,760),8146=>array(164,0,535,980),8147=>array(164,0,645,999),8150=>array(164,0,551,778),8151=>array(164,0,592,944),8152=>array(13,0,589,927),8153=>array(13,0,589,913),8154=>array(-146,0,589,800),8155=>array(-113,0,589,800),8157=>array(131,595,578,806),8158=>array(165,595,653,806),8159=>array(222,595,588,978),8160=>array(69,0,580,784),8161=>array(69,0,580,760),8162=>array(69,0,580,980),8163=>array(69,0,645,999),8164=>array(-1,-208,577,806),8165=>array(-1,-208,577,806),8166=>array(69,0,580,778),8167=>array(69,0,592,944),8168=>array(71,0,663,927),8169=>array(71,0,663,913),8170=>array(-185,0,663,800),8171=>array(-193,0,663,800),8172=>array(-62,0,591,806),8173=>array(181,654,535,980),8174=>array(203,654,645,999),8175=>array(181,616,422,800),8178=>array(31,-208,577,800),8179=>array(31,-208,577,547),8180=>array(31,-208,590,800),8182=>array(31,-14,577,778),8183=>array(31,-208,577,778),8184=>array(-139,-14,572,800),8185=>array(-35,-14,572,800),8186=>array(-134,0,559,800),8187=>array(-25,0,559,800),8188=>array(-25,-208,559,713),8189=>array(278,616,590,800),8190=>array(287,595,461,806),8208=>array(119,217,453,359),8209=>array(119,217,453,359),8210=>array(-29,217,597,337),8211=>array(-29,217,597,337),8212=>array(-29,217,597,337),8213=>array(-29,217,597,337),8214=>array(125,-236,476,764),8215=>array(0,-236,602,-9),8216=>array(205,441,468,760),8217=>array(205,441,468,760),8218=>array(84,-140,347,179),8219=>array(242,441,422,760),8220=>array(95,441,612,760),8221=>array(72,441,589,760),8222=>array(-38,-140,478,179),8223=>array(108,441,543,760),8224=>array(89,-96,559,729),8225=>array(24,-96,560,729),8226=>array(125,195,477,547),8227=>array(125,156,516,586),8230=>array(-42,0,537,179),8240=>array(0,0,602,699),8241=>array(0,0,602,699),8242=>array(297,547,553,729),8243=>array(206,547,645,729),8244=>array(114,547,736,729),8245=>array(332,547,518,729),8246=>array(239,547,610,729),8247=>array(149,547,701,729),8249=>array(149,69,428,517),8250=>array(155,69,433,517),8252=>array(15,0,587,729),8253=>array(143,0,559,742),8254=>array(0,663,602,755),8261=>array(109,-132,531,760),8262=>array(52,-132,473,760),8263=>array(-17,0,619,742),8264=>array(14,0,587,742),8265=>array(15,0,588,742),8267=>array(2,-96,608,729),8304=>array(148,319,513,742),8305=>array(137,326,465,781),8308=>array(132,326,479,734),8309=>array(116,319,513,734),8310=>array(141,319,513,742),8311=>array(126,326,513,734),8312=>array(141,319,513,742),8313=>array(141,319,513,742),8314=>array(132,352,470,652),8315=>array(132,469,470,535),8316=>array(139,407,464,596),8317=>array(187,252,415,751),8318=>array(187,252,415,751),8319=>array(130,326,450,640),8320=>array(148,-7,513,416),8321=>array(141,0,476,408),8322=>array(127,0,502,416),8323=>array(135,-7,508,416),8324=>array(132,0,479,408),8325=>array(116,-7,513,408),8326=>array(141,-7,513,416),8327=>array(126,0,513,408),8328=>array(141,-7,513,416),8329=>array(141,-7,513,416),8330=>array(132,25,470,326),8331=>array(132,143,470,208),8332=>array(139,81,464,270),8333=>array(187,-74,415,425),8334=>array(187,-74,415,425),8336=>array(132,-8,467,313),8337=>array(134,-8,469,313),8338=>array(137,-8,465,313),8339=>array(96,0,496,307),8340=>array(133,-8,468,313),8341=>array(119,0,439,426),8342=>array(102,0,469,425),8343=>array(173,0,429,426),8344=>array(106,0,479,313),8345=>array(130,0,450,313),8346=>array(106,-117,470,313),8347=>array(140,-7,445,314),8348=>array(162,0,471,393),8352=>array(37,0,641,729),8353=>array(33,-44,630,778),8354=>array(32,-14,619,742),8355=>array(3,0,628,729),8356=>array(-13,0,604,742),8357=>array(-11,-93,580,640),8358=>array(-39,0,641,729),8359=>array(0,-14,658,729),8360=>array(0,-14,597,729),8361=>array(0,0,666,729),8362=>array(-24,-14,655,729),8363=>array(32,-198,681,760),8364=>array(-16,-14,603,742),8365=>array(0,0,625,729),8366=>array(83,0,630,729),8367=>array(0,-223,638,742),8368=>array(1,-14,626,742),8369=>array(8,0,632,729),8370=>array(34,-81,605,809),8371=>array(-57,0,583,729),8372=>array(-29,-14,632,742),8373=>array(26,-147,639,760),8376=>array(54,0,629,729),8377=>array(56,0,630,729),8450=>array(57,-14,590,742),8453=>array(57,-24,602,752),8461=>array(11,0,588,729),8462=>array(29,0,547,760),8463=>array(29,0,547,760),8469=>array(24,0,580,729),8470=>array(-71,0,582,729),8471=>array(0,61,602,663),8473=>array(36,0,573,729),8474=>array(0,-146,598,742),8477=>array(4,0,597,729),8482=>array(0,447,550,729),8484=>array(6,0,584,729),8486=>array(-25,0,559,713),8490=>array(-9,0,668,729),8491=>array(-55,0,515,928),8494=>array(0,-12,602,647),8520=>array(-9,0,501,813),8531=>array(15,-139,575,810),8532=>array(1,-139,575,818),8533=>array(15,-139,580,810),8534=>array(1,-139,580,818),8535=>array(23,-139,580,818),8536=>array(21,-139,580,810),8537=>array(15,-139,580,810),8538=>array(4,-139,580,810),8539=>array(15,-139,580,810),8540=>array(23,-139,580,818),8541=>array(4,-139,580,810),8542=>array(0,-139,580,810),8543=>array(15,244,558,810),8592=>array(32,97,570,451),8593=>array(124,0,478,538),8594=>array(32,97,570,451),8595=>array(124,0,478,538),8596=>array(32,97,570,451),8597=>array(124,0,478,538),8598=>array(75,-10,522,437),8599=>array(80,-10,527,437),8600=>array(80,-15,526,432),8601=>array(75,-15,522,432),8602=>array(32,97,570,451),8603=>array(32,97,570,451),8604=>array(29,178,566,437),8605=>array(36,178,573,437),8606=>array(32,97,570,451),8607=>array(124,0,478,538),8608=>array(32,97,570,451),8609=>array(124,0,478,538),8610=>array(32,97,570,451),8611=>array(32,97,570,451),8612=>array(32,97,570,451),8613=>array(124,0,478,538),8614=>array(32,97,570,451),8615=>array(124,0,478,538),8616=>array(124,0,478,538),8617=>array(32,97,570,509),8618=>array(32,97,570,509),8619=>array(32,97,570,509),8620=>array(32,97,570,509),8621=>array(32,97,570,451),8622=>array(32,87,570,460),8623=>array(28,-2,562,700),8624=>array(89,0,527,689),8625=>array(75,0,513,689),8626=>array(89,-15,527,674),8627=>array(75,-15,513,674),8628=>array(91,0,526,555),8629=>array(31,-15,586,421),8630=>array(24,168,578,506),8631=>array(24,168,578,506),8632=>array(24,-10,578,542),8633=>array(32,-15,570,634),8634=>array(27,-19,575,511),8635=>array(27,-19,575,511),8636=>array(32,219,570,451),8637=>array(32,97,570,329),8638=>array(246,0,478,538),8639=>array(124,0,356,538),8640=>array(32,219,570,451),8641=>array(32,97,570,329),8642=>array(246,0,478,538),8643=>array(124,0,356,538),8644=>array(32,-15,570,575),8645=>array(6,0,596,538),8646=>array(32,-15,570,575),8647=>array(32,-15,570,575),8648=>array(6,0,596,538),8649=>array(32,-15,570,575),8650=>array(6,0,596,538),8651=>array(32,-15,570,575),8652=>array(32,-15,570,575),8653=>array(32,97,570,451),8654=>array(32,97,570,451),8655=>array(32,97,570,451),8656=>array(32,97,570,451),8657=>array(124,0,478,538),8658=>array(32,97,570,451),8659=>array(124,0,478,538),8660=>array(32,97,570,451),8661=>array(124,0,478,538),8662=>array(61,-28,526,437),8663=>array(76,-28,541,437),8664=>array(76,-15,541,451),8665=>array(61,-15,526,451),8666=>array(32,97,570,451),8667=>array(32,97,570,451),8668=>array(32,97,570,451),8669=>array(32,97,570,451),8670=>array(124,0,478,538),8671=>array(124,0,478,538),8672=>array(32,97,570,451),8673=>array(124,0,478,538),8674=>array(32,97,570,451),8675=>array(124,0,478,538),8676=>array(32,97,570,451),8677=>array(32,97,570,451),8678=>array(2,67,570,480),8679=>array(94,0,508,567),8680=>array(32,67,600,480),8681=>array(94,0,508,567),8682=>array(94,0,508,567),8683=>array(94,0,508,567),8684=>array(94,0,508,567),8685=>array(94,0,508,567),8686=>array(94,0,508,567),8687=>array(94,0,508,567),8688=>array(32,70,600,483),8689=>array(19,-10,578,549),8690=>array(21,0,581,559),8691=>array(94,0,508,567),8692=>array(32,97,570,451),8693=>array(6,0,596,538),8694=>array(32,-139,570,687),8695=>array(32,97,570,451),8696=>array(32,97,570,451),8697=>array(32,92,570,451),8698=>array(32,97,570,451),8699=>array(32,97,570,451),8700=>array(32,97,570,457),8701=>array(2,67,570,480),8702=>array(32,67,600,480),8703=>array(2,67,600,480),8704=>array(16,0,586,729),8705=>array(11,-14,592,742),8706=>array(58,-14,544,674),8707=>array(80,0,533,729),8708=>array(80,-46,533,775),8709=>array(31,43,572,584),8710=>array(-3,0,606,695),8711=>array(-3,0,606,695),8712=>array(49,0,553,744),8713=>array(49,-96,558,840),8714=>array(48,63,554,564),8715=>array(49,0,553,744),8716=>array(49,-96,558,840),8717=>array(48,63,554,564),8719=>array(74,-213,528,741),8721=>array(62,-213,539,741),8722=>array(32,256,569,372),8723=>array(43,0,559,627),8725=>array(0,-93,525,729),8727=>array(59,77,541,542),8728=>array(138,182,463,507),8729=>array(125,168,477,520),8730=>array(24,-19,573,843),8731=>array(24,-19,573,933),8732=>array(24,-19,573,924),8733=>array(86,109,516,508),8734=>array(6,109,596,508),8735=>array(43,122,559,638),8736=>array(43,122,559,638),8743=>array(89,0,513,579),8744=>array(89,0,513,579),8745=>array(89,0,513,579),8746=>array(89,0,513,579),8747=>array(71,-204,530,892),8748=>array(0,-204,602,892),8749=>array(-21,-204,623,892),8756=>array(72,51,532,580),8757=>array(72,51,530,580),8758=>array(219,51,383,580),8759=>array(72,51,532,580),8760=>array(32,256,569,619),8761=>array(36,51,578,580),8762=>array(23,26,581,603),8763=>array(43,0,559,624),8764=>array(43,229,559,398),8765=>array(43,229,559,398),8769=>array(43,48,559,577),8770=>array(43,124,559,482),8771=>array(43,144,559,498),8772=>array(43,16,560,637),8773=>array(43,29,559,614),8774=>array(43,-42,559,614),8775=>array(43,-70,559,695),8776=>array(43,124,559,498),8777=>array(43,30,559,596),8778=>array(43,29,559,587),8779=>array(43,12,559,587),8780=>array(43,29,559,614),8781=>array(42,83,559,543),8782=>array(43,10,559,617),8783=>array(43,144,559,617),8784=>array(43,144,559,707),8785=>array(43,-81,559,707),8786=>array(43,-81,559,707),8787=>array(43,-81,560,707),8788=>array(40,124,563,503),8789=>array(40,124,563,503),8790=>array(43,144,559,482),8791=>array(43,144,559,814),8792=>array(43,144,559,715),8793=>array(43,144,559,824),8794=>array(43,144,559,824),8795=>array(43,144,559,935),8796=>array(43,144,559,889),8797=>array(43,144,559,750),8798=>array(42,144,559,801),8799=>array(42,144,559,903),8800=>array(38,-5,564,631),8801=>array(43,29,559,597),8802=>array(43,-55,559,685),8803=>array(43,-47,559,688),8804=>array(43,0,559,582),8805=>array(43,0,559,582),8806=>array(43,-116,559,633),8807=>array(43,-116,559,633),8808=>array(43,-189,559,633),8809=>array(43,-189,559,633),8813=>array(42,-54,559,680),8814=>array(43,-3,559,629),8815=>array(43,53,559,574),8816=>array(43,-96,559,658),8817=>array(43,-96,559,656),8818=>array(43,-38,559,582),8819=>array(43,-38,559,582),8820=>array(43,-96,559,658),8821=>array(43,-98,559,656),8822=>array(43,-119,559,684),8823=>array(43,-119,559,684),8824=>array(43,-209,559,774),8825=>array(43,-209,559,774),8826=>array(42,-46,558,672),8827=>array(42,-46,558,672),8828=>array(43,-206,559,744),8829=>array(43,-206,559,744),8830=>array(43,-101,559,744),8831=>array(43,-101,559,744),8832=>array(42,-118,558,744),8833=>array(42,-118,558,744),8834=>array(43,67,559,559),8835=>array(43,67,559,559),8836=>array(43,-58,559,684),8837=>array(43,-58,559,684),8838=>array(43,-20,559,645),8839=>array(43,-20,559,645),8840=>array(43,-115,559,729),8841=>array(43,-115,559,729),8842=>array(43,-125,559,645),8843=>array(43,-125,559,645),8847=>array(43,42,559,584),8848=>array(43,42,559,584),8849=>array(43,-10,559,636),8850=>array(43,-10,559,636),8853=>array(13,25,589,604),8854=>array(13,25,589,604),8855=>array(13,25,589,604),8856=>array(13,25,589,604),8857=>array(13,25,589,604),8858=>array(13,25,589,604),8859=>array(13,25,589,604),8860=>array(13,25,589,604),8861=>array(13,25,589,604),8862=>array(24,37,579,591),8863=>array(24,37,579,591),8864=>array(24,37,579,591),8865=>array(24,37,579,591),8866=>array(32,0,569,627),8867=>array(32,0,569,627),8868=>array(32,0,569,627),8869=>array(32,0,569,627),8901=>array(219,259,382,437),8902=>array(110,183,492,545),8909=>array(43,144,559,498),8922=>array(43,-272,559,776),8923=>array(43,-272,559,776),8924=>array(43,0,559,582),8925=>array(43,0,559,582),8926=>array(43,-206,559,744),8927=>array(43,-206,559,744),8928=>array(43,-244,559,803),8929=>array(43,-244,559,803),8930=>array(43,-143,559,769),8931=>array(43,-143,559,769),8932=>array(43,-123,559,636),8933=>array(43,-123,559,636),8934=>array(43,-158,559,582),8935=>array(43,-158,559,582),8936=>array(43,-220,559,744),8937=>array(43,-220,559,744),8943=>array(28,225,574,404),8960=>array(31,43,572,584),8961=>array(56,152,540,453),8962=>array(54,0,548,596),8963=>array(71,406,530,746),8964=>array(71,-132,530,209),8965=>array(71,0,530,459),8966=>array(71,0,530,581),8968=>array(119,-132,541,760),8969=>array(179,-132,483,760),8970=>array(119,-132,423,760),8971=>array(61,-132,483,760),8972=>array(261,73,585,415),8973=>array(6,73,331,415),8974=>array(261,345,585,687),8975=>array(6,345,331,687),8976=>array(43,177,559,439),8977=>array(35,113,567,646),8978=>array(3,211,599,512),8979=>array(3,211,599,512),8980=>array(90,168,512,512),8981=>array(76,107,510,539),8984=>array(17,95,585,664),8985=>array(43,177,559,439),8988=>array(131,352,463,701),8989=>array(139,352,471,701),8990=>array(131,-70,463,279),8991=>array(139,-70,471,279),8992=>array(237,-250,566,925),8993=>array(33,-239,362,940),8997=>array(31,95,571,613),8998=>array(3,145,599,536),8999=>array(46,145,556,536),9000=>array(24,212,578,517),9003=>array(3,145,599,536),9013=>array(25,-33,576,296),9015=>array(125,-114,477,843),9016=>array(3,-114,599,843),9017=>array(3,-114,599,843),9018=>array(3,-114,599,843),9019=>array(3,-114,599,843),9020=>array(3,-114,599,843),9021=>array(3,-171,599,900),9022=>array(3,57,599,658),9025=>array(3,-100,599,829),9026=>array(3,-100,599,829),9027=>array(3,-114,599,843),9028=>array(3,-114,599,843),9031=>array(3,-114,599,843),9032=>array(3,-114,599,843),9033=>array(3,-29,599,729),9035=>array(16,-171,586,900),9036=>array(3,-100,599,829),9037=>array(3,-100,599,829),9040=>array(3,-114,599,843),9042=>array(16,-171,586,900),9043=>array(3,-100,599,829),9044=>array(3,-100,599,829),9047=>array(3,-114,599,843),9048=>array(113,-114,489,729),9049=>array(3,-114,599,729),9050=>array(3,-114,599,655),9051=>array(113,-114,489,496),9052=>array(3,-114,599,658),9054=>array(3,-114,599,843),9055=>array(-10,44,612,671),9056=>array(3,-114,599,843),9059=>array(110,183,492,652),9060=>array(147,222,455,676),9061=>array(3,57,599,847),9064=>array(43,226,559,676),9065=>array(43,53,559,676),9067=>array(16,0,586,729),9068=>array(43,-14,559,742),9069=>array(43,-171,559,900),9070=>array(113,-140,489,519),9071=>array(3,-114,599,843),9072=>array(3,-114,599,843),9075=>array(132,0,478,547),9076=>array(73,-208,558,560),9077=>array(31,-14,571,547),9078=>array(3,-114,599,559),9079=>array(64,-114,538,561),9080=>array(113,-114,489,547),9081=>array(3,-114,599,547),9082=>array(26,-12,568,559),9085=>array(8,-232,594,101),9088=>array(25,-33,576,528),9089=>array(3,92,599,528),9090=>array(3,92,599,528),9091=>array(3,172,599,572),9096=>array(35,27,566,601),9097=>array(34,46,567,579),9098=>array(34,46,567,579),9099=>array(34,46,567,579),9109=>array(3,-114,599,843),9115=>array(113,-252,488,928),9116=>array(113,-252,255,940),9117=>array(113,-240,488,940),9118=>array(114,-252,489,928),9119=>array(347,-252,489,940),9120=>array(114,-240,489,940),9121=>array(113,-252,488,928),9122=>array(113,-252,255,940),9123=>array(113,-240,488,940),9124=>array(113,-252,488,928),9125=>array(346,-252,488,940),9126=>array(113,-240,488,940),9127=>array(232,-261,594,928),9128=>array(8,-247,370,934),9129=>array(232,-240,594,934),9130=>array(232,-256,370,934),9131=>array(8,-261,370,928),9132=>array(232,-247,594,934),9133=>array(8,-240,370,934),9134=>array(237,-250,362,940),9166=>array(2,67,570,567),9167=>array(3,0,599,596),9251=>array(14,-232,574,101),9600=>array(-10,260,612,770),9601=>array(-10,-250,612,-123),9602=>array(-10,-250,612,5),9603=>array(-10,-250,612,132),9604=>array(-10,-250,612,260),9605=>array(-10,-250,612,387),9606=>array(-10,-250,612,515),9607=>array(-10,-250,612,642),9608=>array(-10,-250,612,770),9609=>array(-10,-250,534,770),9610=>array(-10,-250,457,770),9611=>array(-10,-250,379,770),9612=>array(-10,-250,301,770),9613=>array(-10,-250,223,770),9614=>array(-10,-250,146,770),9615=>array(-10,-250,68,770),9616=>array(301,-250,612,770),9617=>array(-10,-250,534,770),9618=>array(-10,-250,612,770),9619=>array(-10,-250,612,770),9620=>array(-10,642,612,770),9621=>array(534,-250,611,770),9622=>array(-10,-250,301,260),9623=>array(301,-250,612,260),9624=>array(-10,260,301,770),9625=>array(-10,-250,612,770),9626=>array(-10,-250,612,770),9627=>array(-10,-250,612,770),9628=>array(-10,-250,612,770),9629=>array(301,260,612,770),9630=>array(-10,-250,612,770),9631=>array(-10,-250,612,770),9632=>array(3,-39,599,558),9633=>array(3,-39,599,558),9634=>array(3,-39,599,558),9635=>array(3,-39,599,558),9636=>array(3,-39,599,558),9637=>array(3,-39,599,558),9638=>array(3,-39,599,558),9639=>array(3,-39,599,558),9640=>array(3,-39,599,558),9641=>array(3,-39,599,558),9642=>array(107,66,495,454),9643=>array(107,66,495,454),9644=>array(3,117,599,402),9645=>array(3,117,599,402),9646=>array(158,-39,444,558),9647=>array(158,-39,444,558),9648=>array(3,117,599,402),9649=>array(3,117,599,402),9650=>array(3,-39,599,558),9651=>array(3,-39,599,558),9652=>array(107,66,495,454),9653=>array(107,66,495,454),9654=>array(3,-39,599,558),9655=>array(3,-39,599,558),9656=>array(107,66,495,454),9657=>array(107,66,495,454),9658=>array(3,66,599,454),9659=>array(3,66,599,454),9660=>array(3,-39,599,558),9661=>array(3,-39,599,558),9662=>array(107,66,495,454),9663=>array(107,66,495,454),9664=>array(3,-39,599,558),9665=>array(3,-39,599,558),9666=>array(107,66,495,454),9667=>array(107,66,495,454),9668=>array(3,66,599,454),9669=>array(3,66,599,454),9670=>array(3,-39,599,558),9671=>array(3,-38,599,558),9672=>array(3,-39,599,558),9673=>array(3,-41,599,561),9674=>array(57,-233,545,807),9675=>array(3,-41,599,561),9676=>array(3,-41,599,561),9677=>array(3,-41,599,561),9678=>array(3,-41,599,561),9679=>array(3,-41,599,561),9680=>array(3,-41,599,561),9681=>array(3,-41,599,561),9682=>array(3,-41,599,561),9683=>array(3,-41,599,561),9684=>array(3,-41,599,561),9685=>array(3,-41,599,561),9686=>array(152,-41,450,561),9687=>array(152,-41,450,561),9688=>array(-10,-10,612,770),9689=>array(-10,-250,612,770),9690=>array(-10,260,612,770),9691=>array(-10,-250,612,260),9692=>array(152,260,450,561),9693=>array(152,260,450,561),9694=>array(152,-41,450,260),9695=>array(152,-41,450,260),9696=>array(3,260,599,561),9697=>array(3,-41,599,260),9698=>array(3,-39,599,558),9699=>array(3,-39,599,558),9700=>array(3,-39,599,558),9701=>array(3,-39,599,558),9702=>array(125,195,477,547),9703=>array(3,-39,599,558),9704=>array(3,-39,599,558),9705=>array(3,-39,599,558),9706=>array(3,-39,599,558),9707=>array(3,-39,599,558),9708=>array(3,-39,599,558),9709=>array(3,-39,599,558),9710=>array(3,-39,599,558),9711=>array(-10,-54,612,573),9712=>array(3,-39,599,558),9713=>array(3,-39,599,558),9714=>array(3,-39,599,558),9715=>array(3,-39,599,558),9716=>array(3,-41,599,561),9717=>array(3,-41,599,561),9718=>array(3,-41,599,561),9719=>array(3,-41,599,561),9720=>array(3,-39,599,558),9721=>array(3,-39,599,558),9722=>array(3,-39,599,558),9723=>array(47,6,554,513),9724=>array(47,6,554,513),9725=>array(85,44,516,475),9726=>array(85,44,516,475),9727=>array(3,-39,599,558),9728=>array(17,80,585,649),9784=>array(13,82,589,642),9785=>array(16,80,586,650),9786=>array(16,80,586,650),9787=>array(16,80,586,650),9788=>array(16,80,586,650),9791=>array(92,-78,510,708),9792=>array(71,-49,531,655),9793=>array(71,-49,531,655),9794=>array(10,75,592,648),9795=>array(35,21,567,710),9796=>array(85,21,517,710),9797=>array(33,65,569,666),9798=>array(37,65,565,666),9799=>array(105,21,497,710),9824=>array(63,65,540,664),9825=>array(7,65,595,663),9826=>array(71,65,531,664),9827=>array(24,65,578,664),9828=>array(62,65,540,664),9829=>array(5,65,597,664),9830=>array(71,65,531,664),9831=>array(24,65,578,667),9833=>array(181,16,421,708),9834=>array(79,16,523,708),9835=>array(52,-79,550,706),9836=>array(8,61,594,664),9837=>array(158,18,444,710),9838=>array(211,21,391,710),9839=>array(152,21,450,710),10178=>array(32,0,569,627),10181=>array(76,-163,509,769),10182=>array(35,-163,547,769),10208=>array(57,-233,545,807),10214=>array(59,-132,565,760),10215=>array(37,-132,543,760),10216=>array(165,-132,524,759),10217=>array(78,-132,438,759),10731=>array(57,-233,545,807),10746=>array(32,45,569,582),10747=>array(32,45,569,582),10799=>array(58,72,543,556),10858=>array(43,229,559,624),10859=>array(43,0,559,624),11013=>array(41,190,561,494),11014=>array(149,82,453,602),11015=>array(149,82,453,602),11016=>array(68,109,485,526),11017=>array(117,109,534,526),11018=>array(117,109,534,526),11019=>array(68,109,485,526),11020=>array(41,190,561,494),11021=>array(149,82,453,602),11026=>array(3,-39,599,558),11027=>array(3,-39,599,558),11028=>array(3,-39,599,558),11029=>array(3,-39,599,558),11030=>array(3,-39,599,558),11031=>array(3,-39,599,558),11032=>array(3,-39,599,558),11033=>array(3,-39,599,558),11034=>array(3,-39,599,558),11364=>array(-3,-208,583,729),11373=>array(30,-14,632,742),11374=>array(-28,-208,632,729),11375=>array(158,0,728,729),11376=>array(-24,-14,579,742),11381=>array(-4,0,552,729),11382=>array(31,0,540,547),11383=>array(31,0,570,552),11385=>array(94,-13,614,759),11386=>array(48,-14,554,560),11388=>array(135,-149,467,421),11389=>array(271,326,616,734),11390=>array(2,-239,566,742),11391=>array(9,-240,654,729),11800=>array(42,-13,458,729),11807=>array(43,0,559,398),11810=>array(196,314,531,760),11811=>array(207,314,473,760),11812=>array(109,-132,375,314),11813=>array(52,-132,386,314),11822=>array(121,0,550,742),42760=>array(183,0,536,693),42761=>array(154,0,536,693),42762=>array(125,0,536,693),42763=>array(96,0,536,693),42764=>array(66,0,536,693),42765=>array(66,0,536,693),42766=>array(66,0,506,693),42767=>array(66,0,477,693),42768=>array(66,0,448,693),42769=>array(66,0,419,693),42770=>array(66,0,536,693),42771=>array(66,0,506,693),42772=>array(66,0,477,693),42773=>array(66,0,448,693),42774=>array(66,0,419,693),42779=>array(178,326,462,736),42780=>array(140,324,424,734),42781=>array(206,326,396,734),42782=>array(206,326,396,734),42783=>array(142,0,333,408),42786=>array(89,0,515,729),42787=>array(131,0,481,547),42788=>array(89,224,564,742),42789=>array(89,42,564,560),42790=>array(-4,-208,606,729),42791=>array(29,-207,547,760),42889=>array(149,0,412,519),42890=>array(167,141,436,405),42891=>array(228,235,437,729),42892=>array(211,458,389,729),42893=>array(73,0,624,760),42894=>array(54,-217,475,760),42896=>array(-17,-157,608,729),42897=>array(8,-140,544,560),42922=>array(17,1,705,730),63173=>array(20,-14,604,760),64257=>array(32,0,625,760),64258=>array(32,0,625,760),65533=>array(-56,-138,599,927),65535=>array(51,-177,551,705)); +$cw=array(0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602,41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602,51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602,61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602,71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602,81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602,91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602,101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602,111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602,121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602,167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602,177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602,187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602,197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602,207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602,217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602,227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602,237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602,247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602,257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602,267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602,277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602,287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602,297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602,307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602,317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602,327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602,337=>602,338=>602,339=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602,349=>602,350=>602,351=>602,352=>602,353=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602,361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602,371=>602,372=>602,373=>602,374=>602,375=>602,376=>602,377=>602,378=>602,379=>602,380=>602,381=>602,382=>602,383=>602,384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602,394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,402=>602,403=>602,404=>602,405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602,415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602,425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602,435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602,445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602,464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602,474=>602,475=>602,476=>602,477=>602,478=>602,479=>602,480=>602,481=>602,482=>602,483=>602,486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602,543=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602,576=>602,577=>602,579=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,710=>602,711=>602,712=>602,713=>602,716=>602,717=>602,718=>602,719=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,732=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1188=>602,1189=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602,1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602,1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602,1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602,1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602,1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602,1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602,1309=>602,1329=>602,1330=>602,1331=>602,1332=>602,1333=>602,1334=>602,1335=>602,1336=>602,1337=>602,1338=>602,1339=>602,1340=>602,1341=>602,1342=>602,1343=>602,1344=>602,1345=>602,1346=>602,1347=>602,1348=>602,1349=>602,1350=>602,1351=>602,1352=>602,1353=>602,1354=>602,1355=>602,1356=>602,1357=>602,1358=>602,1359=>602,1360=>602,1361=>602,1362=>602,1363=>602,1364=>602,1365=>602,1366=>602,1369=>602,1370=>602,1371=>602,1372=>602,1373=>602,1374=>602,1375=>602,1377=>602,1378=>602,1379=>602,1380=>602,1381=>602,1382=>602,1383=>602,1384=>602,1385=>602,1386=>602,1387=>602,1388=>602,1389=>602,1390=>602,1391=>602,1392=>602,1393=>602,1394=>602,1395=>602,1396=>602,1397=>602,1398=>602,1399=>602,1400=>602,1401=>602,1402=>602,1403=>602,1404=>602,1405=>602,1406=>602,1407=>602,1408=>602,1409=>602,1410=>602,1411=>602,1412=>602,1413=>602,1414=>602,1415=>602,1417=>602,1418=>602,3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602,3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602,3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602,3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602,3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602,4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602,4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602,4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602,4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602,4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602,7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602,7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7486=>602,7487=>602,7488=>602,7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8211=>602,8212=>602,8213=>602,8214=>602,8215=>602,8216=>602,8217=>602,8218=>602,8219=>602,8220=>602,8221=>602,8222=>602,8223=>602,8224=>602,8225=>602,8226=>602,8227=>602,8230=>602,8239=>602,8240=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602,8246=>602,8247=>602,8249=>602,8250=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602,8267=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8341=>602,8342=>602,8343=>602,8344=>602,8345=>602,8346=>602,8347=>602,8348=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8364=>602,8365=>602,8366=>602,8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602,8450=>602,8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8482=>602,8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8520=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602,8759=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602,8901=>602,8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9791=>602,9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,10178=>602,10181=>602,10182=>602,10208=>602,10214=>602,10215=>602,10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602,10858=>602,10859=>602,11013=>602,11014=>602,11015=>602,11016=>602,11017=>602,11018=>602,11019=>602,11020=>602,11021=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602,11373=>602,11374=>602,11375=>602,11376=>602,11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11390=>602,11391=>602,11800=>602,11807=>602,11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42786=>602,42787=>602,42788=>602,42789=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,42893=>602,42894=>602,42896=>602,42897=>602,42922=>602,63173=>602,64257=>602,64258=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602,65535=>602); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansmonobi.z b/tcpdf/fonts/dejavusansmonobi.z new file mode 100644 index 0000000..a866f79 Binary files /dev/null and b/tcpdf/fonts/dejavusansmonobi.z differ diff --git a/tcpdf/fonts/dejavusansmonoi.ctg.z b/tcpdf/fonts/dejavusansmonoi.ctg.z new file mode 100644 index 0000000..0fa53ab Binary files /dev/null and b/tcpdf/fonts/dejavusansmonoi.ctg.z differ diff --git a/tcpdf/fonts/dejavusansmonoi.php b/tcpdf/fonts/dejavusansmonoi.php new file mode 100644 index 0000000..753fa9a --- /dev/null +++ b/tcpdf/fonts/dejavusansmonoi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSansMono-Oblique'; +$up=-63; +$ut=44; +$dw=602; +$diff=''; +$originalsize=245948; +$enc=''; +$file='dejavusansmonoi.z'; +$ctg='dejavusansmonoi.ctg.z'; +$desc=array('Flags'=>97,'FontBBox'=>'[-403 -375 746 1028]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>602,'MaxWidth'=>602,'MissingWidth'=>602); +$cbbox=array(0=>array(51,-177,551,705),33=>array(181,0,422,729),34=>array(165,458,437,729),35=>array(-3,0,602,718),36=>array(15,-147,529,760),37=>array(16,0,586,699),38=>array(-10,-14,581,742),39=>array(258,458,343,729),40=>array(182,-132,509,759),41=>array(73,-132,400,759),42=>array(81,286,521,742),43=>array(43,55,559,572),44=>array(99,-140,326,148),45=>array(148,234,419,314),46=>array(173,0,325,148),47=>array(8,-93,517,729),48=>array(48,-14,554,742),49=>array(60,0,478,729),50=>array(3,0,550,742),51=>array(-9,-14,538,742),52=>array(12,0,531,729),53=>array(2,-14,541,729),54=>array(45,-14,551,742),55=>array(85,0,592,729),56=>array(20,-14,550,742),57=>array(31,-14,537,742),58=>array(168,0,392,518),59=>array(99,-140,392,519),60=>array(43,69,559,558),61=>array(43,172,559,454),62=>array(43,69,559,558),63=>array(159,0,547,742),64=>array(-14,-155,593,682),65=>array(-52,0,513,729),66=>array(11,0,570,729),67=>array(56,-14,592,742),68=>array(-4,0,552,729),69=>array(26,0,600,729),70=>array(45,0,616,729),71=>array(38,-14,574,742),72=>array(-4,0,606,729),73=>array(28,0,574,729),74=>array(-12,-14,538,729),75=>array(-4,0,661,729),76=>array(38,0,505,729),77=>array(-29,0,631,729),78=>array(-3,0,605,729),79=>array(40,-14,562,742),80=>array(25,0,588,729),81=>array(40,-132,562,742),82=>array(6,0,562,729),83=>array(12,-14,560,742),84=>array(78,0,651,729),85=>array(39,-14,601,729),86=>array(97,0,646,729),87=>array(40,0,672,729),88=>array(-62,0,653,729),89=>array(95,0,658,729),90=>array(-3,0,622,729),91=>array(129,-132,510,760),92=>array(174,-93,354,729),93=>array(72,-132,453,760),94=>array(35,457,567,729),95=>array(0,-236,602,-197),96=>array(221,616,414,800),97=>array(35,-14,531,560),98=>array(29,-14,541,760),99=>array(76,-14,555,560),100=>array(58,-14,612,760),101=>array(48,-14,550,561),102=>array(129,0,608,760),103=>array(29,-215,559,560),104=>array(41,0,535,760),105=>array(30,0,490,760),106=>array(2,-208,482,760),107=>array(44,0,588,760),108=>array(152,0,477,765),109=>array(-7,0,575,560),110=>array(41,0,535,560),111=>array(57,-14,544,560),112=>array(-1,-208,551,560),113=>array(48,-208,560,560),114=>array(106,0,595,560),115=>array(56,-14,526,560),116=>array(95,0,549,702),117=>array(61,-13,553,547),118=>array(89,0,593,547),119=>array(45,0,642,547),120=>array(-34,0,590,547),121=>array(-19,-208,598,547),122=>array(38,0,553,547),123=>array(90,-163,574,760),124=>array(259,-236,343,764),125=>array(-7,-163,477,760),126=>array(43,240,559,381),161=>array(190,0,431,729),162=>array(60,-153,531,699),163=>array(-4,0,600,742),164=>array(100,95,537,532),165=>array(23,0,621,729),166=>array(259,-171,343,699),167=>array(49,-98,522,738),168=>array(213,659,522,758),169=>array(0,61,602,663),170=>array(109,229,506,742),171=>array(36,69,540,517),172=>array(43,181,559,421),173=>array(148,234,419,314),174=>array(0,61,602,663),175=>array(215,673,521,745),176=>array(146,432,456,742),177=>array(43,0,559,572),178=>array(150,326,484,742),179=>array(140,319,480,742),180=>array(281,616,550,800),181=>array(-19,-208,566,547),182=>array(61,-96,557,729),183=>array(222,273,374,422),184=>array(89,-193,306,0),185=>array(170,326,450,734),186=>array(109,229,520,742),187=>array(40,69,544,517),188=>array(23,-132,553,810),189=>array(23,-132,559,810),190=>array(23,-132,553,818),191=>array(70,-13,458,729),192=>array(-52,0,513,927),193=>array(-52,0,534,927),194=>array(-52,0,525,928),195=>array(-52,0,565,921),196=>array(-52,0,537,913),197=>array(-52,0,513,928),198=>array(-71,0,638,729),199=>array(56,-193,592,742),200=>array(26,0,600,927),201=>array(26,0,600,927),202=>array(26,0,600,928),203=>array(26,0,600,913),204=>array(28,0,574,927),205=>array(28,0,574,927),206=>array(28,0,574,928),207=>array(28,0,574,913),208=>array(-4,0,552,729),209=>array(-3,0,605,921),210=>array(40,-14,562,927),211=>array(40,-14,562,927),212=>array(40,-14,562,928),213=>array(40,-14,562,921),214=>array(40,-14,562,913),215=>array(73,85,529,541),216=>array(7,-34,586,761),217=>array(39,-14,601,927),218=>array(39,-14,601,927),219=>array(39,-14,601,928),220=>array(39,-14,601,913),221=>array(95,0,658,927),222=>array(25,0,566,729),223=>array(27,-14,550,760),224=>array(35,-14,531,800),225=>array(35,-14,552,800),226=>array(35,-14,531,800),227=>array(35,-14,544,777),228=>array(35,-14,531,758),229=>array(35,-14,531,913),230=>array(-23,-14,593,560),231=>array(76,-193,555,560),232=>array(48,-14,550,800),233=>array(48,-14,550,800),234=>array(48,-14,550,800),235=>array(48,-14,550,758),236=>array(30,0,490,800),237=>array(30,0,536,800),238=>array(30,0,490,800),239=>array(30,0,508,758),240=>array(58,-14,552,760),241=>array(41,0,542,777),242=>array(57,-14,544,800),243=>array(57,-14,550,800),244=>array(57,-14,544,800),245=>array(57,-14,544,777),246=>array(57,-14,544,758),247=>array(43,73,559,554),248=>array(23,-47,573,592),249=>array(61,-13,553,800),250=>array(61,-13,553,800),251=>array(61,-13,553,800),252=>array(61,-13,553,758),253=>array(-19,-208,598,800),254=>array(-1,-208,551,765),255=>array(-19,-208,598,758),256=>array(-52,0,551,898),257=>array(35,-14,531,745),258=>array(-52,0,564,928),259=>array(35,-14,536,785),260=>array(-52,-193,522,729),261=>array(35,-193,531,560),262=>array(56,-14,594,927),263=>array(76,-14,594,800),264=>array(56,-14,605,928),265=>array(76,-14,555,800),266=>array(56,-14,592,914),267=>array(76,-14,555,758),268=>array(56,-14,611,928),269=>array(76,-14,582,800),270=>array(-4,0,552,928),271=>array(58,-14,738,760),272=>array(-4,0,552,729),273=>array(58,-14,691,760),274=>array(26,0,600,898),275=>array(48,-14,550,745),276=>array(26,0,600,928),277=>array(48,-14,550,785),278=>array(26,0,600,914),279=>array(48,-14,550,758),280=>array(26,-193,600,729),281=>array(48,-193,550,561),282=>array(26,0,600,928),283=>array(48,-14,565,800),284=>array(38,-14,574,928),285=>array(29,-215,559,800),286=>array(38,-14,589,928),287=>array(29,-215,559,785),288=>array(38,-14,574,914),289=>array(29,-215,559,758),290=>array(38,-280,574,742),291=>array(29,-215,559,788),292=>array(-4,0,606,928),293=>array(41,0,535,928),294=>array(-4,0,650,729),295=>array(21,0,514,760),296=>array(28,0,574,921),297=>array(30,0,528,777),298=>array(28,0,574,898),299=>array(30,0,521,745),300=>array(28,0,574,928),301=>array(30,0,536,785),302=>array(45,-193,592,729),303=>array(32,-193,493,760),304=>array(28,0,574,914),305=>array(30,0,490,547),306=>array(1,-14,705,729),307=>array(2,-209,737,760),308=>array(-12,-14,566,928),309=>array(2,-208,488,800),310=>array(-4,-266,661,729),311=>array(44,-266,588,760),312=>array(62,0,606,547),313=>array(38,0,536,928),314=>array(152,0,536,928),315=>array(38,-266,505,729),316=>array(152,-266,477,765),317=>array(38,0,540,729),318=>array(152,0,604,766),319=>array(38,0,548,729),320=>array(152,0,653,765),321=>array(-14,0,507,728),322=>array(43,0,544,765),323=>array(-3,0,605,931),324=>array(41,0,546,803),325=>array(-3,-266,605,729),326=>array(41,-266,535,560),327=>array(-3,0,605,928),328=>array(41,0,562,800),329=>array(-17,0,595,760),330=>array(20,-208,573,743),331=>array(61,-208,554,560),332=>array(40,-14,562,898),333=>array(57,-14,544,745),334=>array(40,-14,564,928),335=>array(57,-14,544,785),336=>array(40,-14,621,927),337=>array(57,-14,598,800),338=>array(17,0,660,729),339=>array(-3,-14,621,560),340=>array(6,0,562,928),341=>array(106,0,651,803),342=>array(6,-266,562,729),343=>array(25,-266,595,560),344=>array(6,0,562,928),345=>array(106,0,595,800),346=>array(12,-14,560,931),347=>array(56,-14,546,803),348=>array(12,-14,560,928),349=>array(56,-14,536,813),350=>array(12,-193,560,742),351=>array(56,-193,526,560),352=>array(12,-14,560,928),353=>array(56,-14,538,800),354=>array(78,-193,651,729),355=>array(95,-193,549,702),356=>array(78,0,651,928),357=>array(95,0,626,820),358=>array(78,0,650,729),359=>array(87,0,542,702),360=>array(39,-14,601,921),361=>array(61,-13,553,777),362=>array(39,-14,601,898),363=>array(61,-13,553,745),364=>array(39,-14,601,928),365=>array(61,-13,553,785),366=>array(39,-14,601,1028),367=>array(61,-13,553,847),368=>array(39,-14,621,927),369=>array(61,-13,598,800),370=>array(39,-201,601,729),371=>array(61,-194,553,547),372=>array(40,0,672,932),373=>array(45,0,642,803),374=>array(95,0,658,932),375=>array(-19,-208,598,803),376=>array(95,0,658,913),377=>array(-3,0,622,931),378=>array(38,0,553,803),379=>array(-3,0,622,914),380=>array(38,0,553,758),381=>array(-3,0,622,928),382=>array(38,0,553,800),383=>array(129,0,608,760),384=>array(29,-14,541,760),385=>array(41,0,598,729),386=>array(10,0,593,729),387=>array(21,-14,537,760),388=>array(33,0,547,729),389=>array(51,-14,554,760),390=>array(2,-14,524,742),391=>array(23,-14,652,800),392=>array(33,-14,625,694),393=>array(-4,0,552,729),394=>array(35,0,598,729),395=>array(49,0,626,729),396=>array(32,0,609,729),397=>array(58,-14,601,760),398=>array(25,0,609,729),399=>array(57,-14,545,742),400=>array(35,-14,573,742),401=>array(-61,-208,663,729),402=>array(35,-208,613,760),403=>array(19,-14,656,800),404=>array(35,-210,673,661),405=>array(-42,0,579,760),406=>array(153,0,574,729),407=>array(27,0,574,729),408=>array(-17,0,640,729),409=>array(41,0,586,760),410=>array(93,0,446,765),411=>array(-22,0,549,729),412=>array(18,-13,626,729),413=>array(-77,-208,604,729),414=>array(61,-210,545,560),415=>array(57,-14,545,742),416=>array(-20,-14,634,760),417=>array(5,-14,595,560),418=>array(21,-14,651,742),419=>array(61,-210,650,560),420=>array(59,0,609,729),421=>array(4,-208,546,699),422=>array(11,-129,544,729),423=>array(36,-14,568,742),424=>array(82,-14,525,560),425=>array(-13,0,625,729),426=>array(131,-208,530,760),427=>array(108,-208,563,702),428=>array(54,0,650,729),429=>array(83,0,552,760),430=>array(78,-208,651,729),431=>array(-29,-14,652,760),432=>array(-15,-13,592,555),433=>array(38,0,635,713),434=>array(43,0,520,729),435=>array(79,0,658,730),436=>array(-13,-208,669,547),437=>array(5,0,631,729),438=>array(43,0,559,548),439=>array(-16,-14,602,729),440=>array(-16,-14,619,729),441=>array(1,-213,679,547),442=>array(-9,-208,533,547),443=>array(2,0,544,742),444=>array(-16,-14,628,729),445=>array(-6,-213,567,547),446=>array(32,-14,482,702),447=>array(-15,-208,593,560),448=>array(181,0,421,729),449=>array(82,0,520,729),450=>array(58,0,555,729),451=>array(181,0,422,729),461=>array(-52,0,554,928),462=>array(35,-14,553,800),463=>array(28,0,574,928),464=>array(30,0,538,800),465=>array(40,-14,571,928),466=>array(57,-14,563,800),467=>array(39,-14,601,928),468=>array(61,-13,553,800),469=>array(39,-14,601,953),470=>array(61,-13,553,899),471=>array(39,-14,601,997),472=>array(61,-13,585,954),473=>array(39,-14,601,998),474=>array(61,-13,579,954),475=>array(39,-14,601,997),476=>array(61,-13,553,954),477=>array(55,-14,542,560),479=>array(35,-14,559,899),480=>array(-52,0,556,953),481=>array(35,-14,559,899),482=>array(-71,0,638,898),483=>array(-23,-14,593,745),486=>array(38,-14,574,928),487=>array(29,-215,559,800),488=>array(-4,0,661,928),489=>array(44,0,588,928),490=>array(40,-201,562,742),491=>array(57,-201,544,560),492=>array(40,-201,562,898),493=>array(57,-201,544,745),494=>array(-16,-14,602,928),495=>array(-6,-213,572,800),500=>array(38,-14,574,927),501=>array(29,-215,559,800),502=>array(-40,-14,586,729),504=>array(-3,0,605,927),505=>array(41,0,535,800),508=>array(-71,0,654,927),509=>array(-23,-14,593,800),510=>array(7,-34,586,927),511=>array(23,-47,573,800),512=>array(-52,0,519,927),513=>array(35,-14,531,800),514=>array(-52,0,542,928),515=>array(35,-14,531,785),516=>array(26,0,600,927),517=>array(48,-14,550,800),518=>array(26,0,600,928),519=>array(48,-14,550,785),520=>array(28,0,574,927),521=>array(30,0,495,800),522=>array(28,0,574,928),523=>array(30,0,511,785),524=>array(40,-14,562,927),525=>array(57,-14,544,800),526=>array(40,-14,562,928),527=>array(57,-14,544,785),528=>array(6,0,562,927),529=>array(106,0,595,800),530=>array(6,0,562,928),531=>array(106,0,595,785),532=>array(39,-14,601,927),533=>array(61,-13,553,800),534=>array(39,-14,601,928),535=>array(61,-13,553,785),536=>array(12,-265,560,742),537=>array(56,-265,526,560),538=>array(78,-265,651,729),539=>array(95,-265,549,702),540=>array(17,-210,646,742),541=>array(40,-211,591,560),542=>array(-4,0,606,928),543=>array(41,0,535,928),545=>array(-5,-72,538,760),548=>array(25,-208,651,729),549=>array(66,-208,582,548),550=>array(-52,0,513,914),551=>array(35,-14,531,758),552=>array(26,-193,600,729),553=>array(48,-193,550,561),554=>array(40,-14,562,953),555=>array(57,-14,544,899),556=>array(40,-14,562,953),557=>array(57,-14,544,899),558=>array(40,-14,562,914),559=>array(57,-14,544,758),560=>array(40,-14,562,953),561=>array(57,-14,544,899),562=>array(95,0,658,898),563=>array(-19,-208,598,745),564=>array(146,-72,465,765),565=>array(4,-72,531,560),566=>array(95,-72,549,702),567=>array(2,-208,441,547),568=>array(32,-14,531,760),569=>array(71,-214,570,560),570=>array(-67,-34,656,761),571=>array(-67,-34,656,761),572=>array(-32,-47,628,592),573=>array(-6,0,537,729),574=>array(-55,-34,668,761),575=>array(77,-242,547,560),576=>array(69,-242,585,548),577=>array(59,0,604,729),579=>array(-32,0,570,729),580=>array(-4,-14,601,729),581=>array(-44,0,505,729),588=>array(-0,0,562,729),589=>array(58,0,595,560),592=>array(54,-14,549,560),593=>array(77,-14,579,560),594=>array(23,-14,525,560),595=>array(4,-14,507,760),596=>array(42,-14,513,560),597=>array(90,-72,572,558),598=>array(67,-208,556,760),599=>array(40,-14,601,760),600=>array(33,-14,542,560),601=>array(55,-14,542,560),602=>array(-3,-14,595,560),603=>array(60,-11,551,560),604=>array(32,-11,532,560),605=>array(-23,-11,582,560),606=>array(86,-21,542,559),607=>array(-5,-208,559,547),608=>array(36,-215,620,760),609=>array(69,-215,600,545),610=>array(59,0,574,574),611=>array(52,-210,626,547),612=>array(103,0,605,547),613=>array(100,-210,583,546),614=>array(18,0,502,760),615=>array(38,-208,522,760),616=>array(4,0,503,760),617=>array(136,0,466,547),618=>array(24,0,578,547),619=>array(15,0,559,765),620=>array(79,0,466,765),621=>array(168,-208,435,765),622=>array(101,-213,601,765),623=>array(33,0,606,560),624=>array(53,-210,626,560),625=>array(16,-208,589,560),626=>array(12,-208,568,560),627=>array(32,-208,484,560),628=>array(16,0,586,560),629=>array(67,-14,535,560),630=>array(34,0,616,547),631=>array(72,-15,523,560),632=>array(48,-208,561,759),633=>array(87,-13,516,547),634=>array(67,-13,536,755),635=>array(50,-208,479,547),636=>array(66,-208,535,560),637=>array(104,-208,535,560),638=>array(23,0,579,560),639=>array(23,0,483,560),640=>array(6,0,490,547),641=>array(6,0,596,547),642=>array(56,-208,550,560),643=>array(20,-208,582,760),644=>array(-33,-208,635,760),645=>array(173,-208,429,549),646=>array(-16,-208,639,760),647=>array(81,-155,535,547),648=>array(156,-208,610,702),649=>array(-25,-14,625,547),650=>array(47,-15,610,547),651=>array(71,0,555,547),652=>array(-19,0,514,547),653=>array(-46,0,542,547),654=>array(-39,0,591,755),655=>array(104,0,607,561),656=>array(62,-208,509,547),657=>array(33,-54,579,547),658=>array(-6,-213,572,547),659=>array(17,-213,552,547),660=>array(144,0,537,759),661=>array(124,0,575,759),662=>array(27,0,478,759),663=>array(44,-214,595,759),664=>array(46,22,556,532),665=>array(47,0,504,561),666=>array(60,-21,517,559),667=>array(8,0,627,759),668=>array(16,0,586,560),669=>array(25,-208,509,760),670=>array(38,-213,618,547),671=>array(65,0,444,560),672=>array(17,-208,654,759),673=>array(59,0,537,759),674=>array(124,0,575,759),675=>array(-7,-14,609,760),676=>array(10,-213,615,760),677=>array(8,-54,612,760),678=>array(79,-14,546,702),679=>array(105,-208,620,760),680=>array(98,-70,550,702),681=>array(64,-208,550,760),682=>array(40,-14,499,760),683=>array(33,0,527,760),684=>array(65,-15,596,641),685=>array(16,84,586,640),686=>array(160,-214,568,760),687=>array(147,-208,491,760),688=>array(115,318,440,744),689=>array(115,317,440,743),690=>array(185,202,417,744),691=>array(169,318,432,632),692=>array(170,311,433,625),693=>array(146,202,408,625),694=>array(119,318,483,625),695=>array(100,318,562,625),696=>array(123,202,510,625),697=>array(216,557,389,800),699=>array(226,472,453,760),700=>array(198,472,425,760),701=>array(242,595,384,844),702=>array(300,492,460,760),703=>array(292,492,452,760),704=>array(199,437,448,862),705=>array(187,437,469,862),710=>array(194,616,502,800),711=>array(230,616,538,800),712=>array(241,488,361,759),713=>array(215,673,521,745),716=>array(241,-148,361,123),717=>array(51,-174,357,-102),718=>array(269,-285,462,-102),719=>array(233,-285,502,-102),720=>array(164,0,438,517),721=>array(229,355,404,517),722=>array(252,249,413,517),723=>array(245,249,405,517),726=>array(148,125,455,417),727=>array(184,234,418,307),728=>array(229,645,536,785),729=>array(308,658,428,758),730=>array(246,645,514,913),731=>array(113,-193,293,0),732=>array(196,638,542,777),733=>array(215,616,598,800),734=>array(-176,233,420,504),736=>array(148,208,500,632),737=>array(201,326,402,755),738=>array(142,326,442,648),739=>array(104,326,491,632),740=>array(188,326,469,751),741=>array(199,0,521,668),742=>array(169,0,521,668),743=>array(140,0,521,668),744=>array(111,0,521,668),745=>array(82,0,521,668),750=>array(108,472,559,760),755=>array(94,-245,313,-31),768=>array(221,616,414,800),769=>array(281,616,550,800),770=>array(194,616,502,800),771=>array(196,638,542,777),772=>array(215,673,521,745),773=>array(0,716,602,755),774=>array(229,645,536,785),775=>array(308,658,428,758),776=>array(213,659,522,758),777=>array(207,618,408,847),778=>array(246,645,514,913),779=>array(215,616,598,800),780=>array(230,616,538,800),781=>array(245,616,354,833),782=>array(146,616,454,833),783=>array(188,616,495,800),784=>array(229,645,536,857),785=>array(203,645,511,785),786=>array(229,472,424,641),787=>array(218,595,384,844),788=>array(242,595,384,844),789=>array(281,616,458,800),790=>array(269,-285,462,-102),791=>array(233,-285,502,-102),792=>array(188,-375,370,-135),793=>array(229,-375,412,-135),794=>array(191,690,444,930),795=>array(197,373,406,555),796=>array(147,-245,278,-31),797=>array(178,-288,430,-135),798=>array(204,-288,456,-135),799=>array(183,-375,435,-135),800=>array(175,-202,427,-135),801=>array(151,-208,472,63),802=>array(39,-208,284,63),803=>array(141,-202,261,-102),804=>array(46,-201,356,-103),805=>array(94,-245,313,-31),806=>array(85,-265,280,-96),807=>array(89,-193,306,0),808=>array(118,-193,298,0),809=>array(247,-319,355,-102),810=>array(150,-263,452,-102),811=>array(114,-222,515,-82),812=>array(64,-237,376,-53),813=>array(28,-237,341,-53),814=>array(57,-238,365,-98),815=>array(31,-237,340,-97),816=>array(23,-238,370,-99),817=>array(51,-174,357,-102),818=>array(0,-236,602,-197),819=>array(0,-236,602,-80),820=>array(29,240,573,381),821=>array(69,221,519,301),822=>array(0,221,602,301),823=>array(-32,-47,628,592),824=>array(-67,-34,656,761),825=>array(129,-245,260,-31),826=>array(150,-188,452,-26),827=>array(140,-371,462,-102),828=>array(87,-222,488,-82),829=>array(181,599,421,816),830=>array(207,595,395,853),831=>array(0,599,602,755),835=>array(218,595,384,844),856=>array(626,658,746,758),865=>array(-131,742,702,902),884=>array(216,557,389,800),885=>array(213,-208,386,35),890=>array(197,-208,293,-45),894=>array(99,-140,392,519),900=>array(281,616,550,800),901=>array(213,659,601,980),902=>array(-52,0,513,800),903=>array(222,273,374,422),904=>array(-61,0,600,800),905=>array(-85,0,606,800),906=>array(-61,0,574,800),908=>array(12,-14,562,800),910=>array(-146,0,658,800),911=>array(-33,0,564,800),912=>array(191,0,601,980),913=>array(-52,0,513,729),914=>array(11,0,570,729),915=>array(34,0,627,729),916=>array(-53,0,513,729),917=>array(26,0,600,729),918=>array(-3,0,622,729),919=>array(-4,0,606,729),920=>array(57,-14,545,742),921=>array(28,0,574,729),922=>array(-4,0,661,729),923=>array(-53,0,513,729),924=>array(-29,0,631,729),925=>array(-3,0,605,729),926=>array(-4,0,606,729),927=>array(40,-14,562,742),928=>array(-4,0,606,729),929=>array(25,0,588,729),931=>array(-13,0,625,729),932=>array(78,0,651,729),933=>array(95,0,658,729),934=>array(57,0,544,729),935=>array(-62,0,653,729),936=>array(95,0,615,729),937=>array(-33,0,564,713),938=>array(28,0,574,913),939=>array(95,0,658,913),940=>array(34,-12,606,800),941=>array(64,-15,550,800),942=>array(61,-208,550,800),943=>array(191,0,550,800),944=>array(64,0,601,980),945=>array(34,-12,606,559),946=>array(-21,-208,553,766),947=>array(32,-208,584,547),948=>array(46,-14,535,767),949=>array(64,-15,536,553),950=>array(72,-210,613,760),951=>array(61,-208,545,560),952=>array(67,-14,535,732),953=>array(191,0,438,547),954=>array(62,0,606,547),955=>array(27,0,560,760),956=>array(-19,-208,566,547),957=>array(109,0,547,547),958=>array(68,-210,591,760),959=>array(57,-14,544,560),960=>array(35,-19,596,547),961=>array(18,-208,560,560),962=>array(114,-210,585,560),963=>array(60,-14,599,547),964=>array(113,0,578,547),965=>array(64,0,564,547),966=>array(57,-208,585,551),967=>array(0,-208,602,547),968=>array(76,-208,612,547),969=>array(24,-14,574,547),970=>array(191,0,522,758),971=>array(64,0,564,758),972=>array(57,-14,550,800),973=>array(64,0,564,800),974=>array(24,-14,574,800),976=>array(72,-11,526,768),977=>array(66,-11,540,768),978=>array(28,0,583,729),979=>array(-186,0,583,800),980=>array(28,0,583,913),981=>array(55,-208,551,729),982=>array(12,0,607,547),983=>array(-1,-188,636,547),984=>array(76,-208,564,742),985=>array(85,-208,554,560),986=>array(63,-210,604,729),987=>array(96,-210,594,547),988=>array(45,0,616,729),989=>array(-90,-208,594,760),990=>array(24,-2,599,729),991=>array(58,0,547,759),992=>array(80,-208,558,742),993=>array(6,-180,494,559),1008=>array(-21,-3,617,547),1009=>array(87,-208,560,560),1010=>array(76,-14,555,560),1011=>array(2,-208,482,760),1012=>array(57,-14,545,742),1013=>array(79,-14,557,560),1014=>array(27,-14,504,560),1015=>array(25,0,566,729),1016=>array(-1,-208,551,765),1017=>array(56,-14,592,742),1018=>array(-29,0,630,729),1019=>array(-12,-208,612,547),1020=>array(-23,-208,560,560),1021=>array(2,-14,524,742),1022=>array(56,-14,592,742),1023=>array(2,-14,524,742),1024=>array(26,0,600,985),1025=>array(26,0,600,900),1026=>array(39,-229,552,730),1027=>array(34,0,627,985),1028=>array(55,-14,590,742),1029=>array(12,-14,560,742),1030=>array(28,0,574,729),1031=>array(28,0,574,900),1032=>array(-12,-14,538,729),1033=>array(-80,0,575,729),1034=>array(-54,0,577,729),1035=>array(17,0,530,730),1036=>array(37,0,702,985),1037=>array(-3,0,605,985),1038=>array(19,0,634,928),1039=>array(11,-157,621,729),1040=>array(-52,0,513,729),1041=>array(10,0,593,729),1042=>array(11,0,570,729),1043=>array(34,0,627,729),1044=>array(-70,-157,613,729),1045=>array(26,0,600,729),1046=>array(-63,0,657,729),1047=>array(-9,-14,538,742),1048=>array(-3,0,605,729),1049=>array(-3,0,605,928),1050=>array(-4,0,661,729),1051=>array(-69,0,605,729),1052=>array(-29,0,631,729),1053=>array(-4,0,606,729),1054=>array(40,-14,562,742),1055=>array(-4,0,606,729),1056=>array(25,0,588,729),1057=>array(56,-14,592,742),1058=>array(78,0,651,729),1059=>array(19,0,634,729),1060=>array(23,0,583,729),1061=>array(-62,0,653,729),1062=>array(-17,-157,593,729),1063=>array(82,0,604,729),1064=>array(-15,0,618,729),1065=>array(-26,-157,606,729),1066=>array(70,0,529,729),1067=>array(-40,0,625,729),1068=>array(25,0,529,729),1069=>array(2,-14,537,742),1070=>array(-0,-14,621,742),1071=>array(-34,0,624,729),1072=>array(35,-14,531,560),1073=>array(35,-14,556,777),1074=>array(49,0,507,547),1075=>array(72,0,546,547),1076=>array(-16,-140,559,547),1077=>array(48,-14,550,561),1078=>array(-24,0,617,547),1079=>array(32,-11,532,560),1080=>array(42,0,566,547),1081=>array(42,0,566,785),1082=>array(62,0,606,547),1083=>array(-39,0,566,547),1084=>array(-23,0,629,547),1085=>array(42,0,566,547),1086=>array(57,-14,544,560),1087=>array(42,0,566,547),1088=>array(-1,-208,551,560),1089=>array(76,-14,555,560),1090=>array(149,0,557,547),1091=>array(-19,-208,598,547),1092=>array(36,-208,562,760),1093=>array(-34,0,590,547),1094=>array(21,-140,544,547),1095=>array(108,0,566,548),1096=>array(8,0,595,547),1097=>array(-0,-140,586,547),1098=>array(54,0,550,547),1099=>array(-2,0,604,547),1100=>array(43,0,507,547),1101=>array(47,-14,526,560),1102=>array(-15,-14,582,560),1103=>array(29,0,534,547),1104=>array(48,-14,550,803),1105=>array(48,-14,550,718),1106=>array(56,-208,526,760),1107=>array(72,0,589,803),1108=>array(95,-14,566,560),1109=>array(56,-14,526,560),1110=>array(30,0,490,760),1111=>array(30,0,500,718),1112=>array(2,-208,482,760),1113=>array(-48,0,582,547),1114=>array(-21,0,559,547),1115=>array(36,0,494,760),1116=>array(62,0,606,803),1117=>array(42,0,566,803),1118=>array(-19,-208,598,785),1119=>array(56,-140,580,547),1122=>array(50,0,529,729),1123=>array(54,0,547,760),1138=>array(57,-14,545,742),1139=>array(67,-14,535,560),1168=>array(34,0,656,878),1169=>array(72,0,576,700),1170=>array(34,0,627,729),1171=>array(56,0,546,547),1172=>array(34,-200,627,729),1173=>array(72,-208,546,547),1174=>array(-63,-157,657,729),1175=>array(-24,-140,617,547),1176=>array(-9,-193,538,742),1177=>array(32,-193,532,560),1178=>array(-4,-152,661,729),1179=>array(62,-135,606,547),1186=>array(-4,-152,606,729),1187=>array(42,-135,566,547),1188=>array(-15,0,662,729),1189=>array(8,0,639,547),1194=>array(56,-193,592,742),1195=>array(76,-193,555,560),1196=>array(78,-152,651,729),1197=>array(146,-135,557,547),1198=>array(95,0,658,729),1199=>array(86,-208,598,547),1200=>array(95,0,661,729),1201=>array(74,-208,598,547),1202=>array(-63,-152,648,729),1203=>array(-16,-135,599,547),1210=>array(-3,0,511,730),1211=>array(41,0,535,760),1216=>array(28,0,574,729),1217=>array(-63,0,657,928),1218=>array(-24,0,617,785),1219=>array(-4,-200,661,729),1220=>array(62,-208,606,547),1223=>array(-4,-200,606,729),1224=>array(42,-208,566,547),1227=>array(34,-152,627,729),1228=>array(72,-135,546,547),1231=>array(171,0,410,765),1232=>array(-52,0,564,928),1233=>array(35,-14,536,785),1234=>array(-52,0,537,913),1235=>array(35,-14,531,758),1236=>array(-71,0,638,729),1237=>array(-23,-14,593,560),1238=>array(26,0,600,928),1239=>array(48,-14,550,785),1240=>array(57,-14,545,742),1241=>array(55,-14,542,560),1242=>array(57,-14,545,913),1243=>array(55,-14,542,758),1244=>array(-63,0,657,913),1245=>array(-24,0,617,758),1246=>array(-9,-14,538,913),1247=>array(32,-11,532,758),1248=>array(-16,-14,602,729),1249=>array(-6,-213,572,547),1250=>array(-3,0,605,898),1251=>array(42,0,566,745),1252=>array(-3,0,605,913),1253=>array(42,0,566,758),1254=>array(40,-14,562,913),1255=>array(57,-14,544,758),1256=>array(57,-14,545,742),1257=>array(67,-14,535,560),1258=>array(57,-14,545,913),1259=>array(67,-14,535,758),1260=>array(2,-14,537,913),1261=>array(47,-14,526,758),1262=>array(19,0,634,898),1263=>array(-19,-208,598,745),1264=>array(19,0,634,913),1265=>array(-19,-208,598,758),1266=>array(19,0,634,927),1267=>array(-19,-208,598,800),1268=>array(82,0,604,913),1269=>array(108,0,566,758),1270=>array(95,-152,606,730),1271=>array(123,-135,567,548),1272=>array(-40,0,625,913),1273=>array(-2,0,604,758),1296=>array(35,-14,573,742),1297=>array(64,-15,536,553),1306=>array(40,-132,562,742),1307=>array(48,-208,560,560),1308=>array(40,0,672,729),1309=>array(45,0,642,547),1329=>array(28,-29,589,729),1330=>array(-9,0,551,742),1331=>array(56,0,547,742),1332=>array(37,0,562,742),1333=>array(31,-14,576,729),1334=>array(-3,0,575,742),1335=>array(-12,0,579,729),1336=>array(-9,0,551,743),1337=>array(-49,-14,593,742),1338=>array(15,-14,597,729),1339=>array(0,0,526,729),1340=>array(4,0,471,729),1341=>array(-24,-14,593,729),1342=>array(24,-14,640,742),1343=>array(75,0,565,729),1344=>array(23,-26,594,729),1345=>array(8,-23,577,742),1346=>array(37,0,520,742),1347=>array(-8,0,631,742),1348=>array(-5,-14,647,729),1349=>array(27,-14,578,742),1350=>array(82,-14,564,729),1351=>array(27,-14,551,729),1352=>array(0,0,561,743),1353=>array(53,-28,578,742),1354=>array(42,0,596,742),1355=>array(-4,0,577,742),1356=>array(-45,0,562,742),1357=>array(41,-14,602,729),1358=>array(20,0,545,729),1359=>array(22,-14,558,742),1360=>array(0,0,561,743),1361=>array(27,-14,578,742),1362=>array(-5,0,571,729),1363=>array(21,0,583,729),1364=>array(-24,0,610,742),1365=>array(40,-14,562,742),1366=>array(4,-14,563,729),1369=>array(292,492,452,760),1370=>array(207,499,395,729),1371=>array(233,620,502,803),1372=>array(83,618,518,893),1373=>array(269,616,462,800),1374=>array(61,613,511,885),1375=>array(78,618,507,760),1377=>array(26,-13,605,547),1378=>array(15,-208,539,560),1379=>array(45,-208,556,558),1380=>array(21,-208,525,560),1381=>array(48,-14,556,760),1382=>array(45,-208,556,558),1383=>array(27,0,533,760),1384=>array(15,-208,539,560),1385=>array(-42,-208,588,560),1386=>array(7,-14,600,760),1387=>array(-2,-208,522,760),1388=>array(86,-208,382,547),1389=>array(-43,-208,603,760),1390=>array(36,-14,566,771),1391=>array(78,-208,562,760),1392=>array(38,0,532,760),1393=>array(45,-15,503,760),1394=>array(21,-208,505,560),1395=>array(54,-14,586,760),1396=>array(19,-14,626,760),1397=>array(81,-208,520,547),1398=>array(101,-14,584,760),1399=>array(26,-208,553,561),1400=>array(38,0,532,560),1401=>array(58,-208,487,571),1402=>array(45,-208,625,547),1403=>array(28,-208,557,561),1404=>array(10,0,516,560),1405=>array(58,-13,550,547),1406=>array(36,-208,562,760),1407=>array(22,-13,579,560),1408=>array(17,-208,541,560),1409=>array(45,-215,576,560),1410=>array(68,0,440,547),1411=>array(21,-208,579,760),1412=>array(-22,-208,577,560),1413=>array(57,-14,544,560),1414=>array(-14,-208,591,760),1415=>array(3,-14,507,760),1417=>array(209,0,393,415),1418=>array(170,205,439,314),3713=>array(-6,-10,574,560),3714=>array(24,-17,572,568),3716=>array(38,-10,540,568),3719=>array(94,-238,510,568),3720=>array(66,-0,546,575),3722=>array(51,-238,588,563),3725=>array(30,-8,599,573),3732=>array(23,-14,567,560),3733=>array(35,-15,579,579),3734=>array(74,-240,578,560),3735=>array(30,-14,583,560),3737=>array(-20,-14,593,568),3738=>array(38,-8,594,561),3739=>array(19,-8,616,760),3740=>array(16,-8,664,638),3741=>array(4,-8,622,760),3742=>array(24,-8,604,561),3743=>array(5,-8,627,760),3745=>array(-32,-14,602,547),3746=>array(12,-8,620,760),3747=>array(22,-8,586,568),3749=>array(14,-8,575,568),3751=>array(27,-13,575,560),3754=>array(1,-8,679,701),3755=>array(-12,-12,619,575),3757=>array(33,-8,579,568),3758=>array(14,-8,662,605),3759=>array(52,-106,615,579),3760=>array(73,-13,640,563),3761=>array(199,639,702,880),3762=>array(145,0,586,560),3763=>array(-403,0,586,806),3764=>array(41,615,562,926),3765=>array(41,612,616,926),3766=>array(41,615,562,926),3767=>array(41,612,616,926),3768=>array(201,-350,404,-38),3769=>array(144,-306,440,-40),3771=>array(31,639,567,880),3772=>array(-15,-278,612,-39),3784=>array(240,618,362,792),3785=>array(34,609,582,891),3786=>array(46,598,664,869),3787=>array(154,609,448,890),3788=>array(-15,636,612,875),3789=>array(199,620,404,806),4304=>array(60,0,522,560),4305=>array(46,0,510,761),4306=>array(21,-208,528,510),4307=>array(42,-208,609,505),4308=>array(41,-208,562,510),4309=>array(41,-208,559,510),4310=>array(43,0,507,760),4311=>array(17,0,591,505),4312=>array(72,0,535,510),4313=>array(42,-207,553,501),4314=>array(62,-208,557,510),4315=>array(44,0,568,760),4316=>array(43,0,538,748),4317=>array(17,0,588,505),4318=>array(40,0,541,757),4319=>array(37,-207,596,524),4320=>array(-7,0,567,760),4321=>array(46,0,506,743),4322=>array(-3,-207,580,614),4323=>array(53,-207,579,506),4324=>array(38,-208,614,505),4325=>array(20,-208,616,743),4326=>array(37,-208,611,506),4327=>array(42,-207,592,496),4328=>array(45,0,573,760),4329=>array(3,0,509,760),4330=>array(25,-207,578,518),4331=>array(44,0,597,743),4332=>array(45,0,624,760),4333=>array(19,-207,532,743),4334=>array(46,0,512,743),4335=>array(35,-207,533,605),4336=>array(37,0,558,760),4337=>array(2,-207,590,760),4338=>array(36,-131,547,511),4339=>array(41,-208,595,510),4340=>array(17,-208,578,760),4341=>array(22,0,582,760),4342=>array(30,-207,615,511),4343=>array(17,-207,525,511),4344=>array(40,-207,554,520),4345=>array(78,-208,583,518),4346=>array(56,-66,551,511),4347=>array(97,24,470,486),4348=>array(181,370,441,760),7426=>array(13,-14,629,560),7432=>array(51,-11,542,560),7433=>array(130,-211,590,549),7444=>array(-23,-14,601,560),7446=>array(120,273,588,560),7447=>array(119,-14,588,273),7453=>array(21,1,648,419),7454=>array(42,-1,643,417),7455=>array(21,0,666,501),7468=>array(83,326,440,734),7469=>array(80,326,516,734),7470=>array(112,326,457,734),7472=>array(112,326,457,734),7473=>array(123,326,474,734),7474=>array(123,326,480,734),7475=>array(140,318,475,742),7476=>array(114,326,488,734),7477=>array(134,326,468,734),7478=>array(135,318,472,734),7479=>array(94,326,502,734),7480=>array(119,326,413,734),7481=>array(99,326,503,734),7482=>array(115,326,487,734),7483=>array(115,326,487,734),7484=>array(139,318,463,742),7486=>array(116,326,465,734),7487=>array(94,326,437,734),7488=>array(157,326,516,734),7489=>array(139,318,486,734),7490=>array(140,326,530,734),7491=>array(145,318,457,640),7492=>array(144,318,458,640),7493=>array(140,318,462,640),7494=>array(107,318,495,640),7495=>array(140,318,462,751),7496=>array(126,318,476,751),7497=>array(143,318,459,640),7498=>array(143,318,459,640),7499=>array(146,320,457,640),7500=>array(146,320,457,640),7501=>array(134,206,468,640),7502=>array(156,208,446,633),7503=>array(130,326,472,751),7504=>array(118,326,484,640),7505=>array(146,209,456,640),7506=>array(147,318,455,640),7507=>array(150,318,452,640),7508=>array(150,479,452,640),7509=>array(150,318,452,479),7510=>array(127,209,475,640),7511=>array(158,326,444,719),7512=>array(146,319,456,632),7513=>array(104,327,499,561),7514=>array(119,326,483,640),7515=>array(142,326,460,632),7522=>array(156,0,446,425),7523=>array(169,-8,432,306),7524=>array(146,-7,456,306),7525=>array(142,0,460,306),7543=>array(36,-215,566,560),7544=>array(114,326,488,734),7547=>array(78,0,630,547),7557=>array(196,-208,520,765),7579=>array(140,318,462,640),7580=>array(150,318,452,640),7581=>array(147,286,455,639),7582=>array(146,318,457,751),7583=>array(143,320,459,640),7584=>array(150,326,452,751),7585=>array(155,209,447,632),7586=>array(134,206,468,631),7587=>array(146,208,456,632),7588=>array(144,326,458,751),7589=>array(197,326,405,632),7590=>array(127,326,475,632),7591=>array(127,326,475,632),7592=>array(148,209,454,751),7593=>array(217,209,385,755),7594=>array(199,209,403,755),7595=>array(182,326,420,640),7596=>array(119,209,483,640),7597=>array(119,208,483,640),7598=>array(130,209,472,640),7599=>array(169,209,433,640),7600=>array(122,326,480,640),7601=>array(147,318,455,640),7602=>array(140,210,462,751),7603=>array(143,209,459,640),7604=>array(124,209,478,751),7605=>array(188,209,472,719),7606=>array(97,318,505,632),7607=>array(122,318,480,632),7609=>array(151,326,451,632),7610=>array(133,326,469,632),7611=>array(139,326,463,632),7612=>array(164,209,438,632),7613=>array(129,296,473,632),7614=>array(119,207,483,632),7615=>array(143,318,459,736),7680=>array(-52,-245,513,729),7681=>array(35,-245,531,560),7682=>array(11,0,570,914),7683=>array(29,-14,541,760),7684=>array(11,-202,570,729),7685=>array(29,-202,541,760),7686=>array(11,-174,570,729),7687=>array(29,-174,541,760),7688=>array(56,-193,594,927),7689=>array(76,-193,594,800),7690=>array(-4,0,552,914),7691=>array(58,-14,612,760),7692=>array(-4,-202,552,729),7693=>array(58,-202,612,760),7694=>array(-4,-174,552,729),7695=>array(51,-174,612,760),7696=>array(-43,-193,552,729),7697=>array(58,-193,612,760),7698=>array(-4,-237,552,729),7699=>array(28,-237,612,760),7704=>array(26,-237,600,729),7705=>array(35,-237,550,561),7706=>array(26,-238,600,729),7707=>array(30,-238,550,561),7708=>array(26,-193,600,928),7709=>array(48,-193,550,785),7710=>array(45,0,616,914),7711=>array(129,0,608,914),7712=>array(38,-14,576,898),7713=>array(29,-215,559,745),7714=>array(-4,0,606,914),7715=>array(41,0,535,914),7716=>array(-4,-202,606,729),7717=>array(41,-202,535,760),7718=>array(-4,0,606,913),7719=>array(41,0,535,918),7720=>array(-94,-193,606,729),7721=>array(-77,-193,535,760),7722=>array(-4,-238,606,729),7723=>array(41,-238,535,760),7724=>array(23,-238,574,729),7725=>array(23,-238,490,760),7728=>array(-4,0,661,927),7729=>array(44,0,588,927),7730=>array(-4,-202,661,729),7731=>array(44,-202,588,760),7732=>array(-4,-174,661,729),7733=>array(44,-174,588,760),7734=>array(38,-202,505,729),7735=>array(141,-202,477,765),7736=>array(38,-202,551,898),7737=>array(141,-202,551,898),7738=>array(38,-174,505,729),7739=>array(51,-174,477,765),7740=>array(38,-237,505,729),7741=>array(28,-237,477,765),7742=>array(-29,0,631,927),7743=>array(-7,0,575,800),7744=>array(-29,0,631,914),7745=>array(-7,0,575,758),7746=>array(-29,-202,631,729),7747=>array(-7,-202,575,560),7748=>array(-3,0,605,914),7749=>array(41,0,535,758),7750=>array(-3,-202,605,729),7751=>array(41,-202,535,560),7752=>array(-3,-174,605,729),7753=>array(41,-174,535,560),7754=>array(-3,-237,605,729),7755=>array(28,-237,535,560),7756=>array(40,-14,562,997),7757=>array(57,-14,585,997),7764=>array(25,0,588,931),7765=>array(-1,-208,551,800),7766=>array(25,0,588,914),7767=>array(-1,-208,551,758),7768=>array(6,0,562,914),7769=>array(106,0,595,758),7770=>array(6,-202,562,729),7771=>array(106,-202,595,560),7772=>array(6,-202,562,898),7773=>array(106,-202,595,745),7774=>array(6,-174,562,729),7775=>array(51,-174,595,560),7776=>array(12,-14,560,914),7777=>array(56,-14,526,758),7778=>array(12,-202,560,742),7779=>array(56,-202,526,560),7784=>array(12,-202,560,914),7785=>array(56,-202,526,758),7786=>array(78,0,651,914),7787=>array(95,0,549,914),7788=>array(78,-202,651,729),7789=>array(95,-202,549,702),7790=>array(51,-174,651,729),7791=>array(51,-174,549,702),7792=>array(28,-237,651,729),7793=>array(28,-237,549,702),7794=>array(39,-201,601,729),7795=>array(46,-201,553,547),7796=>array(23,-238,601,729),7797=>array(23,-238,553,547),7798=>array(28,-237,601,729),7799=>array(28,-237,553,547),7800=>array(39,-14,601,997),7801=>array(61,-13,585,997),7804=>array(97,0,646,909),7805=>array(89,0,593,757),7806=>array(97,-202,646,729),7807=>array(89,-202,593,547),7808=>array(40,0,672,931),7809=>array(45,0,642,803),7810=>array(40,0,672,931),7811=>array(45,0,642,803),7812=>array(40,0,672,900),7813=>array(45,0,642,718),7814=>array(40,0,672,914),7815=>array(45,0,642,758),7816=>array(40,-202,672,729),7817=>array(45,-202,642,547),7818=>array(-62,0,653,914),7819=>array(-34,0,590,758),7820=>array(-62,0,653,913),7821=>array(-34,0,590,718),7822=>array(95,0,658,914),7823=>array(-19,-208,598,758),7824=>array(-3,0,622,932),7825=>array(38,0,553,803),7826=>array(-3,-202,622,729),7827=>array(38,-202,553,547),7828=>array(-3,-174,622,729),7829=>array(38,-174,553,547),7830=>array(41,-174,535,760),7831=>array(95,0,549,860),7832=>array(45,0,642,923),7833=>array(-19,-208,598,923),7835=>array(129,0,608,914),7839=>array(46,-14,535,767),7840=>array(-52,-202,513,729),7841=>array(35,-202,531,560),7852=>array(-52,-202,513,932),7853=>array(35,-202,531,803),7856=>array(-52,0,564,997),7857=>array(35,-14,536,954),7862=>array(-52,-202,564,928),7863=>array(35,-202,531,760),7864=>array(26,-202,600,729),7865=>array(48,-202,550,561),7868=>array(26,0,600,921),7869=>array(48,-14,550,777),7878=>array(26,-202,600,932),7879=>array(48,-202,550,803),7882=>array(28,-202,574,729),7883=>array(30,-202,490,760),7884=>array(40,-202,562,742),7885=>array(57,-202,544,560),7896=>array(40,-202,562,932),7897=>array(57,-202,544,803),7898=>array(-20,-14,634,927),7899=>array(5,-14,595,800),7900=>array(-20,-14,634,927),7901=>array(5,-14,595,800),7904=>array(-20,-14,634,921),7905=>array(5,-14,595,777),7906=>array(-20,-202,634,760),7907=>array(5,-202,595,560),7908=>array(39,-202,601,729),7909=>array(61,-202,553,547),7912=>array(-29,-14,652,927),7913=>array(-15,-13,592,800),7914=>array(-29,-14,652,927),7915=>array(-15,-13,592,800),7918=>array(-29,-14,652,921),7919=>array(-15,-13,592,777),7920=>array(-29,-202,652,760),7921=>array(-15,-202,592,555),7922=>array(95,0,658,931),7923=>array(-19,-208,598,803),7924=>array(95,-202,658,729),7925=>array(-19,-208,598,547),7928=>array(95,0,658,921),7929=>array(-19,-208,598,777),7936=>array(34,-12,606,806),7937=>array(34,-12,606,806),7938=>array(34,-12,606,806),7939=>array(34,-12,606,806),7940=>array(34,-12,606,806),7941=>array(34,-12,606,806),7942=>array(34,-12,606,977),7943=>array(34,-12,606,977),7944=>array(-52,0,513,806),7945=>array(-52,0,513,806),7946=>array(-165,0,513,806),7947=>array(-141,0,513,806),7948=>array(-80,0,513,806),7949=>array(-65,0,513,806),7950=>array(-52,0,513,977),7951=>array(-52,0,513,977),7952=>array(64,-15,536,806),7953=>array(64,-15,536,806),7954=>array(64,-15,536,806),7955=>array(64,-15,536,806),7956=>array(64,-15,599,806),7957=>array(64,-15,599,806),7960=>array(-31,0,600,806),7961=>array(-6,0,600,806),7962=>array(-275,0,600,806),7963=>array(-250,0,600,806),7964=>array(-214,0,600,806),7965=>array(-199,0,600,806),7968=>array(61,-208,545,806),7969=>array(61,-208,545,806),7970=>array(61,-208,545,806),7971=>array(61,-208,545,806),7972=>array(61,-208,599,806),7973=>array(61,-208,599,806),7974=>array(61,-208,576,977),7975=>array(61,-208,572,977),7976=>array(-55,0,606,806),7977=>array(-31,0,606,806),7978=>array(-312,0,606,806),7979=>array(-287,0,606,806),7980=>array(-263,0,606,806),7981=>array(-248,0,606,806),7982=>array(-112,0,606,977),7983=>array(-116,0,606,977),7984=>array(191,0,438,806),7985=>array(191,0,438,806),7986=>array(152,0,536,806),7987=>array(177,0,536,806),7988=>array(177,0,599,806),7989=>array(191,0,599,806),7990=>array(191,0,576,977),7991=>array(191,0,572,977),7992=>array(-31,0,574,806),7993=>array(-6,0,574,806),7994=>array(-263,0,574,806),7995=>array(-238,0,574,806),7996=>array(-214,0,574,806),7997=>array(-199,0,574,806),7998=>array(-75,0,574,977),7999=>array(-79,0,574,977),8000=>array(57,-14,544,806),8001=>array(57,-14,544,806),8002=>array(57,-14,544,806),8003=>array(57,-14,544,806),8004=>array(57,-14,599,806),8005=>array(57,-14,599,806),8008=>array(6,-14,562,806),8009=>array(-6,-14,562,806),8010=>array(-275,-14,562,806),8011=>array(-250,-14,562,806),8012=>array(-141,-14,562,806),8013=>array(-126,-14,562,806),8016=>array(64,0,564,806),8017=>array(64,0,564,806),8018=>array(64,0,564,806),8019=>array(64,0,564,806),8020=>array(64,0,599,806),8021=>array(64,0,599,806),8022=>array(64,0,576,977),8023=>array(64,0,572,977),8025=>array(-80,0,658,806),8027=>array(-287,0,658,806),8029=>array(-285,0,658,806),8031=>array(-152,0,658,977),8032=>array(24,-14,574,806),8033=>array(24,-14,574,806),8034=>array(24,-14,574,806),8035=>array(24,-14,574,806),8036=>array(24,-14,599,806),8037=>array(24,-14,599,806),8038=>array(24,-14,576,977),8039=>array(24,-14,574,977),8040=>array(-33,0,564,806),8041=>array(-33,0,564,806),8042=>array(-275,0,564,806),8043=>array(-250,0,564,806),8044=>array(-128,0,564,806),8045=>array(-114,0,564,806),8046=>array(-39,0,564,977),8047=>array(-79,0,564,977),8048=>array(34,-12,606,800),8049=>array(34,-12,606,800),8050=>array(64,-15,536,800),8051=>array(64,-15,550,800),8052=>array(61,-208,545,800),8053=>array(61,-208,550,800),8054=>array(191,0,438,800),8055=>array(191,0,550,800),8056=>array(57,-14,544,800),8057=>array(57,-14,550,800),8058=>array(64,0,564,800),8059=>array(64,0,564,800),8060=>array(24,-14,574,800),8061=>array(24,-14,574,800),8064=>array(34,-208,606,806),8065=>array(34,-208,606,806),8066=>array(34,-208,606,806),8067=>array(34,-208,606,806),8068=>array(34,-208,606,806),8069=>array(34,-208,606,806),8070=>array(34,-208,606,977),8071=>array(34,-208,606,977),8072=>array(-52,-208,513,806),8073=>array(-52,-208,513,806),8074=>array(-165,-208,513,806),8075=>array(-141,-208,513,806),8076=>array(-80,-208,513,806),8077=>array(-65,-208,513,806),8078=>array(-52,-208,513,977),8079=>array(-52,-208,513,977),8080=>array(44,-208,545,806),8081=>array(44,-208,545,806),8082=>array(44,-208,545,806),8083=>array(44,-208,545,806),8084=>array(44,-208,599,806),8085=>array(44,-208,599,806),8086=>array(44,-208,576,977),8087=>array(44,-208,572,977),8088=>array(-55,-208,606,806),8089=>array(-31,-208,606,806),8090=>array(-312,-208,606,806),8091=>array(-287,-208,606,806),8092=>array(-263,-208,606,806),8093=>array(-248,-208,606,806),8094=>array(-112,-208,606,977),8095=>array(-116,-208,606,977),8096=>array(24,-208,574,806),8097=>array(24,-208,574,806),8098=>array(24,-208,574,806),8099=>array(24,-208,574,806),8100=>array(24,-208,599,806),8101=>array(24,-208,599,806),8102=>array(24,-208,576,977),8103=>array(24,-208,574,977),8104=>array(-33,-208,564,806),8105=>array(-33,-208,564,806),8106=>array(-275,-208,564,806),8107=>array(-250,-208,564,806),8108=>array(-128,-208,564,806),8109=>array(-114,-208,564,806),8110=>array(-39,-208,564,977),8111=>array(-79,-208,564,977),8112=>array(34,-12,606,785),8113=>array(34,-12,606,745),8114=>array(34,-208,606,800),8115=>array(34,-208,606,559),8116=>array(34,-208,606,800),8118=>array(34,-12,606,777),8119=>array(34,-208,606,777),8120=>array(-52,0,564,928),8121=>array(-52,0,551,898),8122=>array(-52,0,513,800),8123=>array(-52,0,513,800),8124=>array(-52,-208,513,729),8125=>array(274,595,434,806),8126=>array(197,-208,293,-45),8127=>array(274,595,434,806),8128=>array(196,638,542,777),8129=>array(213,659,580,943),8130=>array(44,-208,545,800),8131=>array(44,-208,545,560),8132=>array(44,-208,550,800),8134=>array(61,-208,545,777),8135=>array(44,-208,545,777),8136=>array(-96,0,600,800),8137=>array(-61,0,600,800),8138=>array(-121,0,606,800),8139=>array(-85,0,606,800),8140=>array(-4,-208,606,729),8141=>array(152,595,536,806),8142=>array(177,595,599,806),8143=>array(230,595,576,977),8144=>array(191,0,536,785),8145=>array(191,0,521,745),8146=>array(191,0,522,980),8147=>array(191,0,601,980),8150=>array(191,0,542,777),8151=>array(191,0,580,943),8152=>array(28,0,574,928),8153=>array(28,0,574,898),8154=>array(-72,0,574,800),8155=>array(-61,0,574,800),8157=>array(177,595,536,806),8158=>array(191,595,599,806),8159=>array(226,595,572,977),8160=>array(64,0,564,785),8161=>array(64,0,564,745),8162=>array(64,0,564,980),8163=>array(64,0,601,980),8164=>array(18,-208,560,806),8165=>array(18,-208,560,806),8166=>array(64,0,564,777),8167=>array(64,0,580,943),8168=>array(95,0,658,928),8169=>array(95,0,658,898),8170=>array(-121,0,658,800),8171=>array(-146,0,658,800),8172=>array(-6,0,588,806),8173=>array(213,659,522,980),8174=>array(213,659,601,980),8175=>array(221,616,414,800),8178=>array(24,-208,574,800),8179=>array(24,-208,574,547),8180=>array(24,-208,574,800),8182=>array(24,-14,574,777),8183=>array(24,-208,574,777),8184=>array(-84,-14,562,800),8185=>array(12,-14,562,800),8186=>array(-84,0,564,800),8187=>array(-33,0,564,800),8188=>array(-33,-208,564,713),8189=>array(281,616,550,800),8190=>array(299,595,434,806),8208=>array(148,234,419,314),8209=>array(148,234,419,314),8210=>array(-25,240,591,309),8211=>array(-25,240,591,309),8212=>array(-25,240,591,309),8213=>array(-25,240,591,309),8214=>array(139,-236,462,764),8215=>array(0,-236,602,-80),8216=>array(226,472,453,760),8217=>array(226,472,453,760),8218=>array(99,-140,326,148),8219=>array(263,472,407,760),8220=>array(120,472,571,760),8221=>array(108,472,559,760),8222=>array(-8,-140,443,148),8223=>array(145,472,513,760),8224=>array(95,-96,554,729),8225=>array(29,-96,554,729),8226=>array(156,227,446,516),8227=>array(156,188,485,555),8230=>array(-32,0,520,148),8240=>array(0,0,602,699),8241=>array(0,0,602,699),8242=>array(315,547,534,729),8243=>array(242,547,607,729),8244=>array(169,547,681,729),8245=>array(351,547,499,729),8246=>array(277,547,572,729),8247=>array(204,547,646,729),8249=>array(151,69,428,517),8250=>array(155,69,431,517),8252=>array(31,0,572,729),8253=>array(163,0,546,742),8254=>array(0,716,602,755),8261=>array(129,-132,510,760),8262=>array(72,-132,453,760),8263=>array(-13,0,615,743),8264=>array(59,0,587,743),8265=>array(31,0,603,743),8267=>array(19,-96,590,729),8304=>array(172,319,513,742),8305=>array(156,326,446,751),8308=>array(135,326,458,734),8309=>array(150,319,513,734),8310=>array(173,319,513,742),8311=>array(172,326,513,734),8312=>array(157,319,513,742),8313=>array(172,319,513,742),8314=>array(139,357,464,646),8315=>array(139,479,464,525),8316=>array(139,422,464,581),8317=>array(198,252,404,751),8318=>array(198,252,404,751),8319=>array(126,326,456,640),8320=>array(172,-7,513,416),8321=>array(170,0,450,408),8322=>array(150,0,484,416),8323=>array(140,-7,480,416),8324=>array(135,0,458,408),8325=>array(150,-7,513,408),8326=>array(173,-7,513,416),8327=>array(172,0,513,408),8328=>array(157,-7,513,416),8329=>array(172,-7,513,416),8330=>array(139,31,464,320),8331=>array(139,152,464,199),8332=>array(139,96,464,254),8333=>array(198,-74,404,425),8334=>array(198,-74,404,425),8336=>array(145,-8,457,313),8337=>array(143,-8,459,314),8338=>array(147,-8,455,313),8339=>array(104,0,491,306),8340=>array(143,-8,459,313),8341=>array(115,-8,440,418),8342=>array(130,0,472,425),8343=>array(201,0,402,429),8344=>array(118,0,484,313),8345=>array(126,0,456,313),8346=>array(127,-117,475,313),8347=>array(142,0,442,322),8348=>array(158,0,444,393),8352=>array(40,0,594,729),8353=>array(38,-44,579,778),8354=>array(38,-14,579,742),8355=>array(28,0,574,729),8356=>array(22,0,587,742),8357=>array(22,-93,536,640),8358=>array(-19,0,621,729),8359=>array(2,-14,595,729),8360=>array(4,-14,579,729),8361=>array(2,0,646,729),8362=>array(-19,-14,659,729),8363=>array(58,-175,691,760),8364=>array(-5,-14,582,742),8365=>array(16,0,650,729),8366=>array(78,0,648,729),8367=>array(5,-231,593,753),8368=>array(8,-14,526,742),8369=>array(25,0,641,729),8370=>array(29,-81,573,809),8371=>array(-28,0,604,729),8372=>array(-19,-14,621,742),8373=>array(65,-147,592,760),8376=>array(50,0,650,729),8377=>array(55,0,626,729),8450=>array(57,-14,590,742),8453=>array(0,-24,598,752),8461=>array(28,0,577,729),8462=>array(41,0,535,760),8463=>array(41,0,535,760),8469=>array(36,0,565,729),8470=>array(-66,0,581,729),8471=>array(0,61,602,663),8473=>array(32,0,575,729),8474=>array(8,-129,592,742),8477=>array(18,0,592,729),8482=>array(0,447,550,729),8484=>array(23,0,575,729),8486=>array(-33,0,564,713),8490=>array(-4,0,661,729),8491=>array(-52,0,513,928),8494=>array(5,-12,597,647),8520=>array(13,0,469,760),8531=>array(23,-139,553,810),8532=>array(23,-139,553,818),8533=>array(23,-139,580,810),8534=>array(23,-139,580,818),8535=>array(23,-139,580,818),8536=>array(23,-139,580,810),8537=>array(23,-139,580,810),8538=>array(23,-139,580,810),8539=>array(23,-139,580,810),8540=>array(23,-139,580,818),8541=>array(23,-139,580,810),8542=>array(23,-139,580,810),8543=>array(23,246,553,810),8592=>array(32,112,570,436),8593=>array(139,0,463,538),8594=>array(32,112,570,436),8595=>array(139,0,463,538),8596=>array(32,112,570,436),8597=>array(139,0,463,538),8598=>array(90,0,512,422),8599=>array(90,0,512,422),8600=>array(90,0,512,422),8601=>array(90,0,512,422),8602=>array(32,112,570,436),8603=>array(32,112,570,436),8604=>array(43,193,559,422),8605=>array(43,193,559,422),8606=>array(32,112,570,436),8607=>array(139,0,463,538),8608=>array(32,112,570,436),8609=>array(139,0,463,538),8610=>array(32,112,570,436),8611=>array(32,112,570,436),8612=>array(32,112,570,436),8613=>array(139,0,463,538),8614=>array(32,112,570,436),8615=>array(139,0,463,538),8616=>array(139,0,463,538),8617=>array(32,112,570,517),8618=>array(32,112,570,517),8619=>array(32,112,570,517),8620=>array(32,112,570,517),8621=>array(32,112,570,436),8622=>array(32,102,570,446),8623=>array(55,0,547,698),8624=>array(89,0,513,674),8625=>array(89,0,513,674),8626=>array(89,0,513,674),8627=>array(89,0,513,674),8628=>array(91,0,511,540),8629=>array(31,0,571,420),8630=>array(40,168,563,487),8631=>array(40,168,563,487),8632=>array(24,0,578,513),8633=>array(32,0,570,604),8634=>array(43,0,559,497),8635=>array(43,0,559,497),8636=>array(32,234,570,436),8637=>array(32,112,570,314),8638=>array(261,0,463,538),8639=>array(139,0,341,538),8640=>array(32,234,570,436),8641=>array(32,112,570,314),8642=>array(261,0,463,538),8643=>array(160,0,362,538),8644=>array(32,0,570,561),8645=>array(21,0,582,538),8646=>array(32,0,570,561),8647=>array(32,0,570,561),8648=>array(21,0,582,538),8649=>array(32,0,570,561),8650=>array(21,0,582,538),8651=>array(32,32,570,516),8652=>array(32,32,570,516),8653=>array(32,112,570,436),8654=>array(32,112,570,460),8655=>array(32,112,570,436),8656=>array(32,112,570,436),8657=>array(139,0,463,538),8658=>array(32,112,570,436),8659=>array(139,0,463,538),8660=>array(32,112,570,436),8661=>array(139,0,463,538),8662=>array(76,-28,526,422),8663=>array(76,-28,526,422),8664=>array(76,0,526,451),8665=>array(76,0,526,451),8666=>array(32,112,570,436),8667=>array(32,112,570,436),8668=>array(32,112,570,436),8669=>array(32,112,570,436),8670=>array(139,0,463,538),8671=>array(139,0,463,538),8672=>array(32,112,570,436),8673=>array(139,0,463,538),8674=>array(32,112,570,436),8675=>array(139,0,463,538),8676=>array(32,112,570,436),8677=>array(32,112,570,436),8678=>array(12,92,570,456),8679=>array(119,0,483,558),8680=>array(32,92,590,456),8681=>array(119,0,483,558),8682=>array(119,0,483,558),8683=>array(119,0,483,558),8684=>array(119,0,483,558),8685=>array(119,0,483,558),8686=>array(119,0,483,558),8687=>array(119,0,483,558),8688=>array(32,92,590,456),8689=>array(34,0,568,534),8690=>array(34,0,568,534),8691=>array(119,0,483,558),8692=>array(32,112,570,436),8693=>array(21,0,582,538),8694=>array(32,-125,570,672),8695=>array(32,112,570,436),8696=>array(32,112,570,436),8697=>array(32,112,570,436),8698=>array(32,112,570,436),8699=>array(32,112,570,436),8700=>array(32,112,570,436),8701=>array(12,92,570,456),8702=>array(32,92,590,456),8703=>array(12,92,590,456),8704=>array(18,0,584,729),8705=>array(57,-14,545,742),8706=>array(89,-14,513,662),8707=>array(87,0,514,729),8708=>array(87,-46,514,776),8709=>array(36,48,567,580),8710=>array(-3,0,606,695),8711=>array(-3,0,606,695),8712=>array(63,0,539,715),8713=>array(63,-86,539,801),8714=>array(63,81,539,545),8715=>array(63,0,539,715),8716=>array(63,-86,539,801),8717=>array(63,81,539,545),8719=>array(74,-213,528,741),8721=>array(70,-213,530,741),8722=>array(43,272,559,355),8723=>array(43,0,559,572),8725=>array(8,-93,517,729),8727=>array(81,85,521,542),8728=>array(146,160,456,470),8729=>array(156,200,446,489),8730=>array(29,-19,578,828),8731=>array(29,-19,578,933),8732=>array(29,-19,578,924),8733=>array(91,122,511,492),8734=>array(20,122,582,492),8735=>array(61,140,541,620),8736=>array(61,140,541,620),8743=>array(80,0,521,579),8744=>array(80,0,521,579),8745=>array(80,0,521,579),8746=>array(80,0,521,579),8747=>array(63,-183,539,871),8748=>array(31,-189,571,877),8749=>array(26,-176,577,864),8756=>array(91,65,512,564),8757=>array(92,65,510,564),8758=>array(238,65,363,564),8759=>array(91,65,512,564),8760=>array(43,272,559,564),8761=>array(36,65,566,564),8762=>array(42,65,561,564),8763=>array(43,65,559,564),8764=>array(43,243,559,384),8765=>array(43,243,559,384),8769=>array(43,85,559,535),8770=>array(43,149,559,454),8771=>array(43,172,559,470),8772=>array(43,48,560,604),8773=>array(43,94,559,570),8774=>array(43,24,559,570),8775=>array(43,0,559,647),8776=>array(43,149,559,470),8777=>array(43,23,559,595),8778=>array(43,94,559,572),8779=>array(43,73,559,572),8780=>array(43,94,559,570),8781=>array(42,108,559,519),8782=>array(43,33,560,593),8783=>array(43,172,560,593),8784=>array(43,172,559,637),8785=>array(43,-11,559,637),8786=>array(43,-10,559,637),8787=>array(42,-10,560,637),8788=>array(36,147,566,479),8789=>array(36,147,566,479),8790=>array(43,172,559,454),8791=>array(43,172,559,760),8792=>array(43,172,559,662),8793=>array(43,172,559,783),8794=>array(43,172,559,783),8795=>array(43,172,559,831),8796=>array(43,172,559,836),8797=>array(34,172,568,764),8798=>array(43,172,559,760),8799=>array(43,172,559,856),8800=>array(43,18,559,608),8801=>array(43,94,559,532),8802=>array(43,5,559,622),8803=>array(43,0,559,616),8804=>array(42,0,558,531),8805=>array(43,0,559,531),8806=>array(42,-84,558,578),8807=>array(42,-84,558,578),8808=>array(42,-162,558,578),8809=>array(42,-162,558,578),8813=>array(42,0,559,627),8814=>array(43,-14,559,641),8815=>array(43,-14,559,641),8816=>array(43,-119,559,629),8817=>array(43,-119,559,629),8818=>array(42,-21,558,531),8819=>array(42,-21,558,531),8820=>array(42,-119,558,629),8821=>array(42,-119,558,629),8822=>array(42,-89,558,603),8823=>array(42,-89,558,603),8824=>array(42,-195,558,711),8825=>array(42,-195,558,711),8826=>array(42,-22,558,648),8827=>array(43,-22,559,648),8828=>array(42,-123,558,711),8829=>array(42,-123,558,711),8830=>array(42,-56,558,711),8831=>array(42,-56,558,711),8832=>array(42,-81,558,707),8833=>array(42,-81,558,707),8834=>array(43,80,559,546),8835=>array(43,80,559,546),8836=>array(43,-29,559,655),8837=>array(43,-29,559,655),8838=>array(43,0,559,625),8839=>array(43,0,559,625),8840=>array(43,-104,559,729),8841=>array(43,-104,559,729),8842=>array(43,-102,559,625),8843=>array(43,-102,559,625),8847=>array(43,58,559,568),8848=>array(43,58,559,568),8849=>array(43,7,559,619),8850=>array(43,7,559,619),8853=>array(39,51,563,577),8854=>array(39,51,563,577),8855=>array(39,51,563,577),8856=>array(39,51,563,577),8857=>array(39,51,563,577),8858=>array(39,51,563,577),8859=>array(39,51,563,577),8860=>array(39,51,563,577),8861=>array(39,52,563,577),8862=>array(39,51,564,576),8863=>array(39,51,564,576),8864=>array(39,51,564,576),8865=>array(39,51,564,576),8866=>array(43,0,559,627),8867=>array(43,0,559,627),8868=>array(43,0,559,627),8869=>array(43,0,559,627),8901=>array(239,273,362,422),8902=>array(129,201,473,527),8909=>array(43,172,559,470),8922=>array(43,-218,559,760),8923=>array(43,-218,559,760),8924=>array(42,0,558,531),8925=>array(43,0,559,531),8926=>array(42,-123,558,711),8927=>array(42,-123,558,711),8928=>array(42,-182,558,770),8929=>array(42,-182,558,770),8930=>array(43,-81,559,707),8931=>array(43,-81,559,707),8932=>array(43,-95,559,619),8933=>array(43,-95,559,619),8934=>array(42,-134,558,531),8935=>array(42,-134,558,531),8936=>array(42,-213,558,711),8937=>array(42,-213,558,711),8943=>array(39,239,562,388),8960=>array(36,48,567,580),8961=>array(56,162,540,443),8962=>array(71,0,531,596),8963=>array(71,406,530,746),8964=>array(71,-132,530,209),8965=>array(71,0,530,444),8966=>array(71,0,530,566),8968=>array(139,-132,520,760),8969=>array(199,-132,463,760),8970=>array(139,-132,403,760),8971=>array(82,-132,463,760),8972=>array(268,73,585,408),8973=>array(6,73,324,408),8974=>array(268,352,585,687),8975=>array(6,352,324,687),8976=>array(43,181,559,421),8977=>array(47,126,555,634),8978=>array(3,211,599,512),8979=>array(3,211,599,512),8980=>array(90,168,512,512),8981=>array(81,112,510,539),8984=>array(35,114,567,646),8985=>array(43,181,559,421),8988=>array(146,352,463,687),8989=>array(139,352,456,687),8990=>array(146,-56,463,279),8991=>array(139,-56,456,279),8992=>array(250,-250,537,928),8993=>array(61,-237,347,942),8997=>array(51,114,551,598),8998=>array(3,145,599,536),8999=>array(61,145,541,536),9000=>array(24,212,578,517),9003=>array(3,145,599,536),9013=>array(35,-22,566,286),9015=>array(125,-100,477,829),9016=>array(3,-100,599,829),9017=>array(3,-100,599,829),9018=>array(3,-100,599,829),9019=>array(3,-100,599,829),9020=>array(3,-100,599,829),9021=>array(3,-171,599,900),9022=>array(3,57,599,658),9025=>array(3,-100,599,829),9026=>array(3,-100,599,829),9027=>array(3,-100,599,829),9028=>array(3,-100,599,829),9031=>array(3,-100,599,829),9032=>array(3,-100,599,829),9033=>array(3,-29,599,729),9035=>array(18,-171,584,900),9036=>array(3,-100,599,829),9037=>array(3,-100,599,829),9040=>array(3,-100,599,829),9042=>array(18,-171,584,900),9043=>array(3,-100,599,829),9044=>array(3,-100,599,829),9047=>array(3,-100,599,829),9048=>array(125,-100,477,729),9049=>array(3,-100,599,729),9050=>array(3,-100,599,656),9051=>array(125,-100,477,489),9052=>array(3,-100,599,658),9054=>array(3,-100,599,829),9055=>array(-10,44,612,671),9056=>array(3,-100,599,829),9059=>array(129,201,473,636),9060=>array(156,229,446,660),9061=>array(3,57,599,831),9064=>array(43,240,559,660),9065=>array(43,69,559,660),9067=>array(18,0,584,729),9068=>array(43,-14,559,742),9069=>array(43,-171,559,900),9070=>array(125,-140,477,519),9071=>array(3,-100,599,829),9072=>array(3,-100,599,829),9075=>array(151,0,476,547),9076=>array(93,-208,541,560),9077=>array(34,-14,568,547),9078=>array(3,-100,599,559),9079=>array(76,-100,526,560),9080=>array(125,-100,477,547),9081=>array(3,-100,599,547),9082=>array(34,-12,573,559),9085=>array(13,-228,589,88),9088=>array(35,-22,566,528),9089=>array(3,106,599,528),9090=>array(3,106,599,528),9091=>array(3,177,599,567),9096=>array(40,27,562,601),9097=>array(34,46,567,579),9098=>array(34,46,567,579),9099=>array(34,46,567,579),9109=>array(3,-100,599,829),9115=>array(137,-258,465,940),9116=>array(137,-252,232,942),9117=>array(137,-240,465,942),9118=>array(137,-258,465,940),9119=>array(370,-252,465,942),9120=>array(137,-240,465,942),9121=>array(137,-252,465,928),9122=>array(137,-252,232,942),9123=>array(137,-240,465,942),9124=>array(137,-252,465,928),9125=>array(370,-252,465,935),9126=>array(137,-240,465,935),9127=>array(256,-261,594,928),9128=>array(8,-252,347,940),9129=>array(256,-240,594,940),9130=>array(256,-256,347,943),9131=>array(8,-261,346,928),9132=>array(255,-252,594,940),9133=>array(8,-240,346,940),9134=>array(250,-250,347,942),9166=>array(12,92,570,558),9167=>array(3,0,599,596),9251=>array(28,-228,545,88),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,612,770),9601=>array(-10,-250,612,-123),9602=>array(-10,-250,612,5),9603=>array(-10,-250,612,132),9604=>array(-10,-250,612,260),9605=>array(-10,-250,612,387),9606=>array(-10,-250,612,515),9607=>array(-10,-250,612,642),9608=>array(-10,-250,612,770),9609=>array(-10,-250,534,770),9610=>array(-10,-250,457,770),9611=>array(-10,-250,379,770),9612=>array(-10,-250,301,770),9613=>array(-10,-250,223,770),9614=>array(-10,-250,146,770),9615=>array(-10,-250,68,770),9616=>array(301,-250,612,770),9617=>array(-10,-250,534,770),9618=>array(-10,-250,612,770),9619=>array(-10,-250,612,770),9620=>array(-10,642,612,770),9621=>array(534,-250,611,770),9622=>array(-10,-250,301,260),9623=>array(301,-250,612,260),9624=>array(-10,260,301,770),9625=>array(-10,-250,612,770),9626=>array(-10,-250,612,770),9627=>array(-10,-250,612,770),9628=>array(-10,-250,612,770),9629=>array(301,260,612,770),9630=>array(-10,-250,612,770),9631=>array(-10,-250,612,770),9632=>array(3,-39,599,558),9633=>array(3,-39,599,558),9634=>array(3,-39,599,558),9635=>array(3,-39,599,558),9636=>array(3,-39,599,558),9637=>array(3,-39,599,558),9638=>array(3,-39,599,558),9639=>array(3,-39,599,558),9640=>array(3,-39,599,558),9641=>array(3,-39,599,558),9642=>array(107,66,495,454),9643=>array(107,66,495,454),9644=>array(3,117,599,402),9645=>array(3,117,599,402),9646=>array(158,-39,444,558),9647=>array(158,-39,444,558),9648=>array(3,117,599,402),9649=>array(3,117,599,402),9650=>array(3,-39,599,558),9651=>array(3,-39,599,558),9652=>array(107,66,495,454),9653=>array(107,66,495,454),9654=>array(3,-39,599,558),9655=>array(3,-39,599,558),9656=>array(107,66,495,454),9657=>array(107,66,495,454),9658=>array(3,66,599,454),9659=>array(3,66,599,454),9660=>array(3,-39,599,558),9661=>array(3,-39,599,558),9662=>array(107,66,495,454),9663=>array(107,66,495,454),9664=>array(3,-39,599,558),9665=>array(3,-39,599,558),9666=>array(107,66,495,454),9667=>array(107,66,495,454),9668=>array(3,66,599,454),9669=>array(3,66,599,454),9670=>array(3,-39,599,558),9671=>array(3,-39,599,558),9672=>array(3,-38,599,558),9673=>array(3,-41,599,561),9674=>array(57,-233,545,807),9675=>array(3,-41,599,561),9676=>array(3,-41,599,561),9677=>array(3,-41,599,561),9678=>array(3,-41,599,561),9679=>array(3,-41,599,561),9680=>array(3,-41,599,561),9681=>array(3,-41,599,561),9682=>array(3,-41,599,561),9683=>array(3,-41,599,561),9684=>array(3,-41,599,561),9685=>array(3,-41,599,561),9686=>array(152,-41,450,561),9687=>array(152,-41,450,561),9688=>array(-10,-10,612,770),9689=>array(-10,-250,612,770),9690=>array(-10,260,612,770),9691=>array(-10,-250,612,260),9692=>array(152,260,450,561),9693=>array(152,260,450,561),9694=>array(152,-41,450,260),9695=>array(152,-41,450,260),9696=>array(3,260,599,561),9697=>array(3,-41,599,260),9698=>array(3,-39,599,558),9699=>array(3,-39,599,558),9700=>array(3,-39,599,558),9701=>array(3,-39,599,558),9702=>array(156,227,446,516),9703=>array(3,-39,599,558),9704=>array(3,-39,599,558),9705=>array(3,-39,599,558),9706=>array(3,-39,599,558),9707=>array(3,-39,599,558),9708=>array(3,-39,599,558),9709=>array(3,-39,599,558),9710=>array(3,-39,599,558),9711=>array(-10,-54,612,573),9712=>array(3,-39,599,558),9713=>array(3,-39,599,558),9714=>array(3,-39,599,558),9715=>array(3,-39,599,558),9716=>array(3,-41,599,561),9717=>array(3,-41,599,561),9718=>array(3,-41,599,561),9719=>array(3,-41,599,561),9720=>array(3,-39,599,558),9721=>array(3,-39,599,558),9722=>array(3,-39,599,558),9723=>array(47,6,554,513),9724=>array(47,6,554,513),9725=>array(85,44,516,475),9726=>array(85,44,516,475),9727=>array(3,-39,599,558),9728=>array(17,80,585,649),9784=>array(13,82,589,642),9785=>array(16,80,586,650),9786=>array(16,80,586,650),9787=>array(16,80,586,650),9788=>array(16,80,586,650),9791=>array(92,-78,510,708),9792=>array(71,-49,531,655),9793=>array(71,-49,531,655),9794=>array(10,75,592,648),9795=>array(35,21,567,710),9796=>array(85,21,517,710),9797=>array(33,65,569,666),9798=>array(37,65,565,666),9799=>array(105,21,497,710),9824=>array(63,65,540,664),9825=>array(7,65,595,663),9826=>array(71,65,531,664),9827=>array(24,65,578,664),9828=>array(62,65,540,664),9829=>array(5,65,597,664),9830=>array(71,65,531,664),9831=>array(24,65,578,667),9833=>array(181,16,421,708),9834=>array(79,16,523,708),9835=>array(52,-79,550,706),9836=>array(8,61,594,664),9837=>array(158,18,444,710),9838=>array(211,21,391,710),9839=>array(152,21,450,710),10178=>array(43,0,559,627),10181=>array(103,-163,472,769),10182=>array(62,-163,508,769),10208=>array(57,-233,545,807),10214=>array(59,-132,544,760),10215=>array(58,-132,543,760),10216=>array(190,-132,498,759),10217=>array(104,-132,412,759),10731=>array(57,-233,545,807),10746=>array(43,55,559,572),10747=>array(43,55,559,572),10799=>array(73,85,529,541),10858=>array(43,243,559,564),10859=>array(43,65,559,564),11013=>array(41,190,561,494),11014=>array(149,82,453,602),11015=>array(149,82,453,602),11016=>array(68,109,485,526),11017=>array(117,109,534,526),11018=>array(117,109,534,526),11019=>array(68,109,485,526),11020=>array(41,190,561,494),11021=>array(149,82,453,602),11026=>array(3,-39,599,558),11027=>array(3,-39,599,558),11028=>array(3,-39,599,558),11029=>array(3,-39,599,558),11030=>array(3,-39,599,558),11031=>array(3,-39,599,558),11032=>array(3,-39,599,558),11033=>array(3,-39,599,558),11034=>array(3,-39,599,558),11364=>array(-4,-213,563,729),11373=>array(37,-14,611,742),11374=>array(-29,-208,630,729),11375=>array(89,0,655,729),11376=>array(-19,-14,555,742),11381=>array(-4,0,548,729),11382=>array(42,0,522,547),11383=>array(38,-12,566,551),11385=>array(6,-13,502,760),11386=>array(67,-14,535,560),11388=>array(185,-125,417,418),11389=>array(168,326,513,734),11390=>array(12,-242,560,742),11391=>array(-3,-242,622,729),11800=>array(73,-13,457,729),11807=>array(43,65,559,384),11810=>array(216,314,510,760),11811=>array(232,314,453,760),11812=>array(129,-132,350,314),11813=>array(72,-132,366,314),11822=>array(145,0,557,742),42760=>array(199,0,521,668),42761=>array(169,0,521,668),42762=>array(140,0,521,668),42763=>array(111,0,521,668),42764=>array(82,0,521,668),42765=>array(82,0,521,668),42766=>array(82,0,491,668),42767=>array(82,0,462,668),42768=>array(82,0,433,668),42769=>array(82,0,403,668),42770=>array(82,0,521,668),42771=>array(82,0,491,668),42772=>array(82,0,462,668),42773=>array(82,0,433,668),42774=>array(82,0,403,668),42779=>array(185,326,455,736),42780=>array(147,324,417,734),42781=>array(230,326,372,734),42782=>array(230,326,372,734),42783=>array(167,0,308,408),42786=>array(120,0,488,729),42787=>array(150,0,466,547),42788=>array(113,224,544,742),42789=>array(113,42,544,560),42790=>array(-4,-208,606,729),42791=>array(41,-208,535,760),42889=>array(168,0,392,518),42890=>array(169,161,433,380),42891=>array(237,235,422,729),42892=>array(231,458,369,729),42893=>array(82,0,604,729),42894=>array(80,-208,455,765),42896=>array(-5,-157,603,729),42897=>array(20,-140,521,560),42922=>array(41,0,704,729),63173=>array(47,-14,576,760),64257=>array(48,0,613,760),64258=>array(48,0,613,760),65533=>array(-16,-84,601,887),65535=>array(51,-177,551,705)); +$cw=array(0=>602,32=>602,33=>602,34=>602,35=>602,36=>602,37=>602,38=>602,39=>602,40=>602,41=>602,42=>602,43=>602,44=>602,45=>602,46=>602,47=>602,48=>602,49=>602,50=>602,51=>602,52=>602,53=>602,54=>602,55=>602,56=>602,57=>602,58=>602,59=>602,60=>602,61=>602,62=>602,63=>602,64=>602,65=>602,66=>602,67=>602,68=>602,69=>602,70=>602,71=>602,72=>602,73=>602,74=>602,75=>602,76=>602,77=>602,78=>602,79=>602,80=>602,81=>602,82=>602,83=>602,84=>602,85=>602,86=>602,87=>602,88=>602,89=>602,90=>602,91=>602,92=>602,93=>602,94=>602,95=>602,96=>602,97=>602,98=>602,99=>602,100=>602,101=>602,102=>602,103=>602,104=>602,105=>602,106=>602,107=>602,108=>602,109=>602,110=>602,111=>602,112=>602,113=>602,114=>602,115=>602,116=>602,117=>602,118=>602,119=>602,120=>602,121=>602,122=>602,123=>602,124=>602,125=>602,126=>602,160=>602,161=>602,162=>602,163=>602,164=>602,165=>602,166=>602,167=>602,168=>602,169=>602,170=>602,171=>602,172=>602,173=>602,174=>602,175=>602,176=>602,177=>602,178=>602,179=>602,180=>602,181=>602,182=>602,183=>602,184=>602,185=>602,186=>602,187=>602,188=>602,189=>602,190=>602,191=>602,192=>602,193=>602,194=>602,195=>602,196=>602,197=>602,198=>602,199=>602,200=>602,201=>602,202=>602,203=>602,204=>602,205=>602,206=>602,207=>602,208=>602,209=>602,210=>602,211=>602,212=>602,213=>602,214=>602,215=>602,216=>602,217=>602,218=>602,219=>602,220=>602,221=>602,222=>602,223=>602,224=>602,225=>602,226=>602,227=>602,228=>602,229=>602,230=>602,231=>602,232=>602,233=>602,234=>602,235=>602,236=>602,237=>602,238=>602,239=>602,240=>602,241=>602,242=>602,243=>602,244=>602,245=>602,246=>602,247=>602,248=>602,249=>602,250=>602,251=>602,252=>602,253=>602,254=>602,255=>602,256=>602,257=>602,258=>602,259=>602,260=>602,261=>602,262=>602,263=>602,264=>602,265=>602,266=>602,267=>602,268=>602,269=>602,270=>602,271=>602,272=>602,273=>602,274=>602,275=>602,276=>602,277=>602,278=>602,279=>602,280=>602,281=>602,282=>602,283=>602,284=>602,285=>602,286=>602,287=>602,288=>602,289=>602,290=>602,291=>602,292=>602,293=>602,294=>602,295=>602,296=>602,297=>602,298=>602,299=>602,300=>602,301=>602,302=>602,303=>602,304=>602,305=>602,306=>602,307=>602,308=>602,309=>602,310=>602,311=>602,312=>602,313=>602,314=>602,315=>602,316=>602,317=>602,318=>602,319=>602,320=>602,321=>602,322=>602,323=>602,324=>602,325=>602,326=>602,327=>602,328=>602,329=>602,330=>602,331=>602,332=>602,333=>602,334=>602,335=>602,336=>602,337=>602,338=>602,339=>602,340=>602,341=>602,342=>602,343=>602,344=>602,345=>602,346=>602,347=>602,348=>602,349=>602,350=>602,351=>602,352=>602,353=>602,354=>602,355=>602,356=>602,357=>602,358=>602,359=>602,360=>602,361=>602,362=>602,363=>602,364=>602,365=>602,366=>602,367=>602,368=>602,369=>602,370=>602,371=>602,372=>602,373=>602,374=>602,375=>602,376=>602,377=>602,378=>602,379=>602,380=>602,381=>602,382=>602,383=>602,384=>602,385=>602,386=>602,387=>602,388=>602,389=>602,390=>602,391=>602,392=>602,393=>602,394=>602,395=>602,396=>602,397=>602,398=>602,399=>602,400=>602,401=>602,402=>602,403=>602,404=>602,405=>602,406=>602,407=>602,408=>602,409=>602,410=>602,411=>602,412=>602,413=>602,414=>602,415=>602,416=>602,417=>602,418=>602,419=>602,420=>602,421=>602,422=>602,423=>602,424=>602,425=>602,426=>602,427=>602,428=>602,429=>602,430=>602,431=>602,432=>602,433=>602,434=>602,435=>602,436=>602,437=>602,438=>602,439=>602,440=>602,441=>602,442=>602,443=>602,444=>602,445=>602,446=>602,447=>602,448=>602,449=>602,450=>602,451=>602,461=>602,462=>602,463=>602,464=>602,465=>602,466=>602,467=>602,468=>602,469=>602,470=>602,471=>602,472=>602,473=>602,474=>602,475=>602,476=>602,477=>602,479=>602,480=>602,481=>602,482=>602,483=>602,486=>602,487=>602,488=>602,489=>602,490=>602,491=>602,492=>602,493=>602,494=>602,495=>602,500=>602,501=>602,502=>602,504=>602,505=>602,508=>602,509=>602,510=>602,511=>602,512=>602,513=>602,514=>602,515=>602,516=>602,517=>602,518=>602,519=>602,520=>602,521=>602,522=>602,523=>602,524=>602,525=>602,526=>602,527=>602,528=>602,529=>602,530=>602,531=>602,532=>602,533=>602,534=>602,535=>602,536=>602,537=>602,538=>602,539=>602,540=>602,541=>602,542=>602,543=>602,545=>602,548=>602,549=>602,550=>602,551=>602,552=>602,553=>602,554=>602,555=>602,556=>602,557=>602,558=>602,559=>602,560=>602,561=>602,562=>602,563=>602,564=>602,565=>602,566=>602,567=>602,568=>602,569=>602,570=>602,571=>602,572=>602,573=>602,574=>602,575=>602,576=>602,577=>602,579=>602,580=>602,581=>602,588=>602,589=>602,592=>602,593=>602,594=>602,595=>602,596=>602,597=>602,598=>602,599=>602,600=>602,601=>602,602=>602,603=>602,604=>602,605=>602,606=>602,607=>602,608=>602,609=>602,610=>602,611=>602,612=>602,613=>602,614=>602,615=>602,616=>602,617=>602,618=>602,619=>602,620=>602,621=>602,622=>602,623=>602,624=>602,625=>602,626=>602,627=>602,628=>602,629=>602,630=>602,631=>602,632=>602,633=>602,634=>602,635=>602,636=>602,637=>602,638=>602,639=>602,640=>602,641=>602,642=>602,643=>602,644=>602,645=>602,646=>602,647=>602,648=>602,649=>602,650=>602,651=>602,652=>602,653=>602,654=>602,655=>602,656=>602,657=>602,658=>602,659=>602,660=>602,661=>602,662=>602,663=>602,664=>602,665=>602,666=>602,667=>602,668=>602,669=>602,670=>602,671=>602,672=>602,673=>602,674=>602,675=>602,676=>602,677=>602,678=>602,679=>602,680=>602,681=>602,682=>602,683=>602,684=>602,685=>602,686=>602,687=>602,688=>602,689=>602,690=>602,691=>602,692=>602,693=>602,694=>602,695=>602,696=>602,697=>602,699=>602,700=>602,701=>602,702=>602,703=>602,704=>602,705=>602,710=>602,711=>602,712=>602,713=>602,716=>602,717=>602,718=>602,719=>602,720=>602,721=>602,722=>602,723=>602,726=>602,727=>602,728=>602,729=>602,730=>602,731=>602,732=>602,733=>602,734=>602,736=>602,737=>602,738=>602,739=>602,740=>602,741=>602,742=>602,743=>602,744=>602,745=>602,750=>602,755=>602,768=>602,769=>602,770=>602,771=>602,772=>602,773=>602,774=>602,775=>602,776=>602,777=>602,778=>602,779=>602,780=>602,781=>602,782=>602,783=>602,784=>602,785=>602,786=>602,787=>602,788=>602,789=>602,790=>602,791=>602,792=>602,793=>602,794=>602,795=>602,796=>602,797=>602,798=>602,799=>602,800=>602,801=>602,802=>602,803=>602,804=>602,805=>602,806=>602,807=>602,808=>602,809=>602,810=>602,811=>602,812=>602,813=>602,814=>602,815=>602,816=>602,817=>602,818=>602,819=>602,820=>602,821=>602,822=>602,823=>602,824=>602,825=>602,826=>602,827=>602,828=>602,829=>602,830=>602,831=>602,835=>602,856=>602,865=>602,884=>602,885=>602,890=>602,894=>602,900=>602,901=>602,902=>602,903=>602,904=>602,905=>602,906=>602,908=>602,910=>602,911=>602,912=>602,913=>602,914=>602,915=>602,916=>602,917=>602,918=>602,919=>602,920=>602,921=>602,922=>602,923=>602,924=>602,925=>602,926=>602,927=>602,928=>602,929=>602,931=>602,932=>602,933=>602,934=>602,935=>602,936=>602,937=>602,938=>602,939=>602,940=>602,941=>602,942=>602,943=>602,944=>602,945=>602,946=>602,947=>602,948=>602,949=>602,950=>602,951=>602,952=>602,953=>602,954=>602,955=>602,956=>602,957=>602,958=>602,959=>602,960=>602,961=>602,962=>602,963=>602,964=>602,965=>602,966=>602,967=>602,968=>602,969=>602,970=>602,971=>602,972=>602,973=>602,974=>602,976=>602,977=>602,978=>602,979=>602,980=>602,981=>602,982=>602,983=>602,984=>602,985=>602,986=>602,987=>602,988=>602,989=>602,990=>602,991=>602,992=>602,993=>602,1008=>602,1009=>602,1010=>602,1011=>602,1012=>602,1013=>602,1014=>602,1015=>602,1016=>602,1017=>602,1018=>602,1019=>602,1020=>602,1021=>602,1022=>602,1023=>602,1024=>602,1025=>602,1026=>602,1027=>602,1028=>602,1029=>602,1030=>602,1031=>602,1032=>602,1033=>602,1034=>602,1035=>602,1036=>602,1037=>602,1038=>602,1039=>602,1040=>602,1041=>602,1042=>602,1043=>602,1044=>602,1045=>602,1046=>602,1047=>602,1048=>602,1049=>602,1050=>602,1051=>602,1052=>602,1053=>602,1054=>602,1055=>602,1056=>602,1057=>602,1058=>602,1059=>602,1060=>602,1061=>602,1062=>602,1063=>602,1064=>602,1065=>602,1066=>602,1067=>602,1068=>602,1069=>602,1070=>602,1071=>602,1072=>602,1073=>602,1074=>602,1075=>602,1076=>602,1077=>602,1078=>602,1079=>602,1080=>602,1081=>602,1082=>602,1083=>602,1084=>602,1085=>602,1086=>602,1087=>602,1088=>602,1089=>602,1090=>602,1091=>602,1092=>602,1093=>602,1094=>602,1095=>602,1096=>602,1097=>602,1098=>602,1099=>602,1100=>602,1101=>602,1102=>602,1103=>602,1104=>602,1105=>602,1106=>602,1107=>602,1108=>602,1109=>602,1110=>602,1111=>602,1112=>602,1113=>602,1114=>602,1115=>602,1116=>602,1117=>602,1118=>602,1119=>602,1122=>602,1123=>602,1138=>602,1139=>602,1168=>602,1169=>602,1170=>602,1171=>602,1172=>602,1173=>602,1174=>602,1175=>602,1176=>602,1177=>602,1178=>602,1179=>602,1186=>602,1187=>602,1188=>602,1189=>602,1194=>602,1195=>602,1196=>602,1197=>602,1198=>602,1199=>602,1200=>602,1201=>602,1202=>602,1203=>602,1210=>602,1211=>602,1216=>602,1217=>602,1218=>602,1219=>602,1220=>602,1223=>602,1224=>602,1227=>602,1228=>602,1231=>602,1232=>602,1233=>602,1234=>602,1235=>602,1236=>602,1237=>602,1238=>602,1239=>602,1240=>602,1241=>602,1242=>602,1243=>602,1244=>602,1245=>602,1246=>602,1247=>602,1248=>602,1249=>602,1250=>602,1251=>602,1252=>602,1253=>602,1254=>602,1255=>602,1256=>602,1257=>602,1258=>602,1259=>602,1260=>602,1261=>602,1262=>602,1263=>602,1264=>602,1265=>602,1266=>602,1267=>602,1268=>602,1269=>602,1270=>602,1271=>602,1272=>602,1273=>602,1296=>602,1297=>602,1306=>602,1307=>602,1308=>602,1309=>602,1329=>602,1330=>602,1331=>602,1332=>602,1333=>602,1334=>602,1335=>602,1336=>602,1337=>602,1338=>602,1339=>602,1340=>602,1341=>602,1342=>602,1343=>602,1344=>602,1345=>602,1346=>602,1347=>602,1348=>602,1349=>602,1350=>602,1351=>602,1352=>602,1353=>602,1354=>602,1355=>602,1356=>602,1357=>602,1358=>602,1359=>602,1360=>602,1361=>602,1362=>602,1363=>602,1364=>602,1365=>602,1366=>602,1369=>602,1370=>602,1371=>602,1372=>602,1373=>602,1374=>602,1375=>602,1377=>602,1378=>602,1379=>602,1380=>602,1381=>602,1382=>602,1383=>602,1384=>602,1385=>602,1386=>602,1387=>602,1388=>602,1389=>602,1390=>602,1391=>602,1392=>602,1393=>602,1394=>602,1395=>602,1396=>602,1397=>602,1398=>602,1399=>602,1400=>602,1401=>602,1402=>602,1403=>602,1404=>602,1405=>602,1406=>602,1407=>602,1408=>602,1409=>602,1410=>602,1411=>602,1412=>602,1413=>602,1414=>602,1415=>602,1417=>602,1418=>602,3713=>602,3714=>602,3716=>602,3719=>602,3720=>602,3722=>602,3725=>602,3732=>602,3733=>602,3734=>602,3735=>602,3737=>602,3738=>602,3739=>602,3740=>602,3741=>602,3742=>602,3743=>602,3745=>602,3746=>602,3747=>602,3749=>602,3751=>602,3754=>602,3755=>602,3757=>602,3758=>602,3759=>602,3760=>602,3761=>602,3762=>602,3763=>602,3764=>602,3765=>602,3766=>602,3767=>602,3768=>602,3769=>602,3771=>602,3772=>602,3784=>602,3785=>602,3786=>602,3787=>602,3788=>602,3789=>602,4304=>602,4305=>602,4306=>602,4307=>602,4308=>602,4309=>602,4310=>602,4311=>602,4312=>602,4313=>602,4314=>602,4315=>602,4316=>602,4317=>602,4318=>602,4319=>602,4320=>602,4321=>602,4322=>602,4323=>602,4324=>602,4325=>602,4326=>602,4327=>602,4328=>602,4329=>602,4330=>602,4331=>602,4332=>602,4333=>602,4334=>602,4335=>602,4336=>602,4337=>602,4338=>602,4339=>602,4340=>602,4341=>602,4342=>602,4343=>602,4344=>602,4345=>602,4346=>602,4347=>602,4348=>602,7426=>602,7432=>602,7433=>602,7444=>602,7446=>602,7447=>602,7453=>602,7454=>602,7455=>602,7468=>602,7469=>602,7470=>602,7472=>602,7473=>602,7474=>602,7475=>602,7476=>602,7477=>602,7478=>602,7479=>602,7480=>602,7481=>602,7482=>602,7483=>602,7484=>602,7485=>602,7486=>602,7487=>602,7488=>602,7489=>602,7490=>602,7491=>602,7492=>602,7493=>602,7494=>602,7495=>602,7496=>602,7497=>602,7498=>602,7499=>602,7500=>602,7501=>602,7502=>602,7503=>602,7504=>602,7505=>602,7506=>602,7507=>602,7508=>602,7509=>602,7510=>602,7511=>602,7512=>602,7513=>602,7514=>602,7515=>602,7522=>602,7523=>602,7524=>602,7525=>602,7543=>602,7544=>602,7547=>602,7557=>602,7579=>602,7580=>602,7581=>602,7582=>602,7583=>602,7584=>602,7585=>602,7586=>602,7587=>602,7588=>602,7589=>602,7590=>602,7591=>602,7592=>602,7593=>602,7594=>602,7595=>602,7596=>602,7597=>602,7598=>602,7599=>602,7600=>602,7601=>602,7602=>602,7603=>602,7604=>602,7605=>602,7606=>602,7607=>602,7609=>602,7610=>602,7611=>602,7612=>602,7613=>602,7614=>602,7615=>602,7680=>602,7681=>602,7682=>602,7683=>602,7684=>602,7685=>602,7686=>602,7687=>602,7688=>602,7689=>602,7690=>602,7691=>602,7692=>602,7693=>602,7694=>602,7695=>602,7696=>602,7697=>602,7698=>602,7699=>602,7704=>602,7705=>602,7706=>602,7707=>602,7708=>602,7709=>602,7710=>602,7711=>602,7712=>602,7713=>602,7714=>602,7715=>602,7716=>602,7717=>602,7718=>602,7719=>602,7720=>602,7721=>602,7722=>602,7723=>602,7724=>602,7725=>602,7728=>602,7729=>602,7730=>602,7731=>602,7732=>602,7733=>602,7734=>602,7735=>602,7736=>602,7737=>602,7738=>602,7739=>602,7740=>602,7741=>602,7742=>602,7743=>602,7744=>602,7745=>602,7746=>602,7747=>602,7748=>602,7749=>602,7750=>602,7751=>602,7752=>602,7753=>602,7754=>602,7755=>602,7756=>602,7757=>602,7764=>602,7765=>602,7766=>602,7767=>602,7768=>602,7769=>602,7770=>602,7771=>602,7772=>602,7773=>602,7774=>602,7775=>602,7776=>602,7777=>602,7778=>602,7779=>602,7784=>602,7785=>602,7786=>602,7787=>602,7788=>602,7789=>602,7790=>602,7791=>602,7792=>602,7793=>602,7794=>602,7795=>602,7796=>602,7797=>602,7798=>602,7799=>602,7800=>602,7801=>602,7804=>602,7805=>602,7806=>602,7807=>602,7808=>602,7809=>602,7810=>602,7811=>602,7812=>602,7813=>602,7814=>602,7815=>602,7816=>602,7817=>602,7818=>602,7819=>602,7820=>602,7821=>602,7822=>602,7823=>602,7824=>602,7825=>602,7826=>602,7827=>602,7828=>602,7829=>602,7830=>602,7831=>602,7832=>602,7833=>602,7835=>602,7839=>602,7840=>602,7841=>602,7852=>602,7853=>602,7856=>602,7857=>602,7862=>602,7863=>602,7864=>602,7865=>602,7868=>602,7869=>602,7878=>602,7879=>602,7882=>602,7883=>602,7884=>602,7885=>602,7896=>602,7897=>602,7898=>602,7899=>602,7900=>602,7901=>602,7904=>602,7905=>602,7906=>602,7907=>602,7908=>602,7909=>602,7912=>602,7913=>602,7914=>602,7915=>602,7918=>602,7919=>602,7920=>602,7921=>602,7922=>602,7923=>602,7924=>602,7925=>602,7928=>602,7929=>602,7936=>602,7937=>602,7938=>602,7939=>602,7940=>602,7941=>602,7942=>602,7943=>602,7944=>602,7945=>602,7946=>602,7947=>602,7948=>602,7949=>602,7950=>602,7951=>602,7952=>602,7953=>602,7954=>602,7955=>602,7956=>602,7957=>602,7960=>602,7961=>602,7962=>602,7963=>602,7964=>602,7965=>602,7968=>602,7969=>602,7970=>602,7971=>602,7972=>602,7973=>602,7974=>602,7975=>602,7976=>602,7977=>602,7978=>602,7979=>602,7980=>602,7981=>602,7982=>602,7983=>602,7984=>602,7985=>602,7986=>602,7987=>602,7988=>602,7989=>602,7990=>602,7991=>602,7992=>602,7993=>602,7994=>602,7995=>602,7996=>602,7997=>602,7998=>602,7999=>602,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>602,8009=>602,8010=>602,8011=>602,8012=>602,8013=>602,8016=>602,8017=>602,8018=>602,8019=>602,8020=>602,8021=>602,8022=>602,8023=>602,8025=>602,8027=>602,8029=>602,8031=>602,8032=>602,8033=>602,8034=>602,8035=>602,8036=>602,8037=>602,8038=>602,8039=>602,8040=>602,8041=>602,8042=>602,8043=>602,8044=>602,8045=>602,8046=>602,8047=>602,8048=>602,8049=>602,8050=>602,8051=>602,8052=>602,8053=>602,8054=>602,8055=>602,8056=>602,8057=>602,8058=>602,8059=>602,8060=>602,8061=>602,8064=>602,8065=>602,8066=>602,8067=>602,8068=>602,8069=>602,8070=>602,8071=>602,8072=>602,8073=>602,8074=>602,8075=>602,8076=>602,8077=>602,8078=>602,8079=>602,8080=>602,8081=>602,8082=>602,8083=>602,8084=>602,8085=>602,8086=>602,8087=>602,8088=>602,8089=>602,8090=>602,8091=>602,8092=>602,8093=>602,8094=>602,8095=>602,8096=>602,8097=>602,8098=>602,8099=>602,8100=>602,8101=>602,8102=>602,8103=>602,8104=>602,8105=>602,8106=>602,8107=>602,8108=>602,8109=>602,8110=>602,8111=>602,8112=>602,8113=>602,8114=>602,8115=>602,8116=>602,8118=>602,8119=>602,8120=>602,8121=>602,8122=>602,8123=>602,8124=>602,8125=>602,8126=>602,8127=>602,8128=>602,8129=>602,8130=>602,8131=>602,8132=>602,8134=>602,8135=>602,8136=>602,8137=>602,8138=>602,8139=>602,8140=>602,8141=>602,8142=>602,8143=>602,8144=>602,8145=>602,8146=>602,8147=>602,8150=>602,8151=>602,8152=>602,8153=>602,8154=>602,8155=>602,8157=>602,8158=>602,8159=>602,8160=>602,8161=>602,8162=>602,8163=>602,8164=>602,8165=>602,8166=>602,8167=>602,8168=>602,8169=>602,8170=>602,8171=>602,8172=>602,8173=>602,8174=>602,8175=>602,8178=>602,8179=>602,8180=>602,8182=>602,8183=>602,8184=>602,8185=>602,8186=>602,8187=>602,8188=>602,8189=>602,8190=>602,8192=>602,8193=>602,8194=>602,8195=>602,8196=>602,8197=>602,8198=>602,8199=>602,8200=>602,8201=>602,8202=>602,8208=>602,8209=>602,8210=>602,8211=>602,8212=>602,8213=>602,8214=>602,8215=>602,8216=>602,8217=>602,8218=>602,8219=>602,8220=>602,8221=>602,8222=>602,8223=>602,8224=>602,8225=>602,8226=>602,8227=>602,8230=>602,8239=>602,8240=>602,8241=>602,8242=>602,8243=>602,8244=>602,8245=>602,8246=>602,8247=>602,8249=>602,8250=>602,8252=>602,8253=>602,8254=>602,8261=>602,8262=>602,8263=>602,8264=>602,8265=>602,8267=>602,8287=>602,8304=>602,8305=>602,8308=>602,8309=>602,8310=>602,8311=>602,8312=>602,8313=>602,8314=>602,8315=>602,8316=>602,8317=>602,8318=>602,8319=>602,8320=>602,8321=>602,8322=>602,8323=>602,8324=>602,8325=>602,8326=>602,8327=>602,8328=>602,8329=>602,8330=>602,8331=>602,8332=>602,8333=>602,8334=>602,8336=>602,8337=>602,8338=>602,8339=>602,8340=>602,8341=>602,8342=>602,8343=>602,8344=>602,8345=>602,8346=>602,8347=>602,8348=>602,8352=>602,8353=>602,8354=>602,8355=>602,8356=>602,8357=>602,8358=>602,8359=>602,8360=>602,8361=>602,8362=>602,8363=>602,8364=>602,8365=>602,8366=>602,8367=>602,8368=>602,8369=>602,8370=>602,8371=>602,8372=>602,8373=>602,8376=>602,8377=>602,8450=>602,8453=>602,8461=>602,8462=>602,8463=>602,8469=>602,8470=>602,8471=>602,8473=>602,8474=>602,8477=>602,8482=>602,8484=>602,8486=>602,8490=>602,8491=>602,8494=>602,8520=>602,8531=>602,8532=>602,8533=>602,8534=>602,8535=>602,8536=>602,8537=>602,8538=>602,8539=>602,8540=>602,8541=>602,8542=>602,8543=>602,8592=>602,8593=>602,8594=>602,8595=>602,8596=>602,8597=>602,8598=>602,8599=>602,8600=>602,8601=>602,8602=>602,8603=>602,8604=>602,8605=>602,8606=>602,8607=>602,8608=>602,8609=>602,8610=>602,8611=>602,8612=>602,8613=>602,8614=>602,8615=>602,8616=>602,8617=>602,8618=>602,8619=>602,8620=>602,8621=>602,8622=>602,8623=>602,8624=>602,8625=>602,8626=>602,8627=>602,8628=>602,8629=>602,8630=>602,8631=>602,8632=>602,8633=>602,8634=>602,8635=>602,8636=>602,8637=>602,8638=>602,8639=>602,8640=>602,8641=>602,8642=>602,8643=>602,8644=>602,8645=>602,8646=>602,8647=>602,8648=>602,8649=>602,8650=>602,8651=>602,8652=>602,8653=>602,8654=>602,8655=>602,8656=>602,8657=>602,8658=>602,8659=>602,8660=>602,8661=>602,8662=>602,8663=>602,8664=>602,8665=>602,8666=>602,8667=>602,8668=>602,8669=>602,8670=>602,8671=>602,8672=>602,8673=>602,8674=>602,8675=>602,8676=>602,8677=>602,8678=>602,8679=>602,8680=>602,8681=>602,8682=>602,8683=>602,8684=>602,8685=>602,8686=>602,8687=>602,8688=>602,8689=>602,8690=>602,8691=>602,8692=>602,8693=>602,8694=>602,8695=>602,8696=>602,8697=>602,8698=>602,8699=>602,8700=>602,8701=>602,8702=>602,8703=>602,8704=>602,8705=>602,8706=>602,8707=>602,8708=>602,8709=>602,8710=>602,8711=>602,8712=>602,8713=>602,8714=>602,8715=>602,8716=>602,8717=>602,8719=>602,8721=>602,8722=>602,8723=>602,8725=>602,8727=>602,8728=>602,8729=>602,8730=>602,8731=>602,8732=>602,8733=>602,8734=>602,8735=>602,8736=>602,8743=>602,8744=>602,8745=>602,8746=>602,8747=>602,8748=>602,8749=>602,8756=>602,8757=>602,8758=>602,8759=>602,8760=>602,8761=>602,8762=>602,8763=>602,8764=>602,8765=>602,8769=>602,8770=>602,8771=>602,8772=>602,8773=>602,8774=>602,8775=>602,8776=>602,8777=>602,8778=>602,8779=>602,8780=>602,8781=>602,8782=>602,8783=>602,8784=>602,8785=>602,8786=>602,8787=>602,8788=>602,8789=>602,8790=>602,8791=>602,8792=>602,8793=>602,8794=>602,8795=>602,8796=>602,8797=>602,8798=>602,8799=>602,8800=>602,8801=>602,8802=>602,8803=>602,8804=>602,8805=>602,8806=>602,8807=>602,8808=>602,8809=>602,8813=>602,8814=>602,8815=>602,8816=>602,8817=>602,8818=>602,8819=>602,8820=>602,8821=>602,8822=>602,8823=>602,8824=>602,8825=>602,8826=>602,8827=>602,8828=>602,8829=>602,8830=>602,8831=>602,8832=>602,8833=>602,8834=>602,8835=>602,8836=>602,8837=>602,8838=>602,8839=>602,8840=>602,8841=>602,8842=>602,8843=>602,8847=>602,8848=>602,8849=>602,8850=>602,8853=>602,8854=>602,8855=>602,8856=>602,8857=>602,8858=>602,8859=>602,8860=>602,8861=>602,8862=>602,8863=>602,8864=>602,8865=>602,8866=>602,8867=>602,8868=>602,8869=>602,8901=>602,8902=>602,8909=>602,8922=>602,8923=>602,8924=>602,8925=>602,8926=>602,8927=>602,8928=>602,8929=>602,8930=>602,8931=>602,8932=>602,8933=>602,8934=>602,8935=>602,8936=>602,8937=>602,8943=>602,8960=>602,8961=>602,8962=>602,8963=>602,8964=>602,8965=>602,8966=>602,8968=>602,8969=>602,8970=>602,8971=>602,8972=>602,8973=>602,8974=>602,8975=>602,8976=>602,8977=>602,8978=>602,8979=>602,8980=>602,8981=>602,8984=>602,8985=>602,8988=>602,8989=>602,8990=>602,8991=>602,8992=>602,8993=>602,8997=>602,8998=>602,8999=>602,9000=>602,9003=>602,9013=>602,9015=>602,9016=>602,9017=>602,9018=>602,9019=>602,9020=>602,9021=>602,9022=>602,9025=>602,9026=>602,9027=>602,9028=>602,9031=>602,9032=>602,9033=>602,9035=>602,9036=>602,9037=>602,9040=>602,9042=>602,9043=>602,9044=>602,9047=>602,9048=>602,9049=>602,9050=>602,9051=>602,9052=>602,9054=>602,9055=>602,9056=>602,9059=>602,9060=>602,9061=>602,9064=>602,9065=>602,9067=>602,9068=>602,9069=>602,9070=>602,9071=>602,9072=>602,9075=>602,9076=>602,9077=>602,9078=>602,9079=>602,9080=>602,9081=>602,9082=>602,9085=>602,9088=>602,9089=>602,9090=>602,9091=>602,9096=>602,9097=>602,9098=>602,9099=>602,9109=>602,9115=>602,9116=>602,9117=>602,9118=>602,9119=>602,9120=>602,9121=>602,9122=>602,9123=>602,9124=>602,9125=>602,9126=>602,9127=>602,9128=>602,9129=>602,9130=>602,9131=>602,9132=>602,9133=>602,9134=>602,9166=>602,9167=>602,9251=>602,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>602,9601=>602,9602=>602,9603=>602,9604=>602,9605=>602,9606=>602,9607=>602,9608=>602,9609=>602,9610=>602,9611=>602,9612=>602,9613=>602,9614=>602,9615=>602,9616=>602,9617=>602,9618=>602,9619=>602,9620=>602,9621=>602,9622=>602,9623=>602,9624=>602,9625=>602,9626=>602,9627=>602,9628=>602,9629=>602,9630=>602,9631=>602,9632=>602,9633=>602,9634=>602,9635=>602,9636=>602,9637=>602,9638=>602,9639=>602,9640=>602,9641=>602,9642=>602,9643=>602,9644=>602,9645=>602,9646=>602,9647=>602,9648=>602,9649=>602,9650=>602,9651=>602,9652=>602,9653=>602,9654=>602,9655=>602,9656=>602,9657=>602,9658=>602,9659=>602,9660=>602,9661=>602,9662=>602,9663=>602,9664=>602,9665=>602,9666=>602,9667=>602,9668=>602,9669=>602,9670=>602,9671=>602,9672=>602,9673=>602,9674=>602,9675=>602,9676=>602,9677=>602,9678=>602,9679=>602,9680=>602,9681=>602,9682=>602,9683=>602,9684=>602,9685=>602,9686=>602,9687=>602,9688=>602,9689=>602,9690=>602,9691=>602,9692=>602,9693=>602,9694=>602,9695=>602,9696=>602,9697=>602,9698=>602,9699=>602,9700=>602,9701=>602,9702=>602,9703=>602,9704=>602,9705=>602,9706=>602,9707=>602,9708=>602,9709=>602,9710=>602,9711=>602,9712=>602,9713=>602,9714=>602,9715=>602,9716=>602,9717=>602,9718=>602,9719=>602,9720=>602,9721=>602,9722=>602,9723=>602,9724=>602,9725=>602,9726=>602,9727=>602,9728=>602,9784=>602,9785=>602,9786=>602,9787=>602,9788=>602,9791=>602,9792=>602,9793=>602,9794=>602,9795=>602,9796=>602,9797=>602,9798=>602,9799=>602,9824=>602,9825=>602,9826=>602,9827=>602,9828=>602,9829=>602,9830=>602,9831=>602,9833=>602,9834=>602,9835=>602,9836=>602,9837=>602,9838=>602,9839=>602,10178=>602,10181=>602,10182=>602,10208=>602,10214=>602,10215=>602,10216=>602,10217=>602,10731=>602,10746=>602,10747=>602,10799=>602,10858=>602,10859=>602,11013=>602,11014=>602,11015=>602,11016=>602,11017=>602,11018=>602,11019=>602,11020=>602,11021=>602,11026=>602,11027=>602,11028=>602,11029=>602,11030=>602,11031=>602,11032=>602,11033=>602,11034=>602,11364=>602,11373=>602,11374=>602,11375=>602,11376=>602,11381=>602,11382=>602,11383=>602,11385=>602,11386=>602,11388=>602,11389=>602,11390=>602,11391=>602,11800=>602,11807=>602,11810=>602,11811=>602,11812=>602,11813=>602,11822=>602,42760=>602,42761=>602,42762=>602,42763=>602,42764=>602,42765=>602,42766=>602,42767=>602,42768=>602,42769=>602,42770=>602,42771=>602,42772=>602,42773=>602,42774=>602,42779=>602,42780=>602,42781=>602,42782=>602,42783=>602,42786=>602,42787=>602,42788=>602,42789=>602,42790=>602,42791=>602,42889=>602,42890=>602,42891=>602,42892=>602,42893=>602,42894=>602,42896=>602,42897=>602,42922=>602,63173=>602,64257=>602,64258=>602,65529=>602,65530=>602,65531=>602,65532=>602,65533=>602,65535=>602); +// --- EOF --- diff --git a/tcpdf/fonts/dejavusansmonoi.z b/tcpdf/fonts/dejavusansmonoi.z new file mode 100644 index 0000000..14be5c1 Binary files /dev/null and b/tcpdf/fonts/dejavusansmonoi.z differ diff --git a/tcpdf/fonts/dejavuserif.ctg.z b/tcpdf/fonts/dejavuserif.ctg.z new file mode 100644 index 0000000..c502e3b Binary files /dev/null and b/tcpdf/fonts/dejavuserif.ctg.z differ diff --git a/tcpdf/fonts/dejavuserif.php b/tcpdf/fonts/dejavuserif.php new file mode 100644 index 0000000..2e98ff9 --- /dev/null +++ b/tcpdf/fonts/dejavuserif.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerif'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=367260; +$enc=''; +$file='dejavuserif.z'; +$ctg='dejavuserif.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-770 -347 1679 1109]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>34,'StemH'=>15,'AvgWidth'=>513,'MaxWidth'=>1734,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(136,-14,266,729),34=>array(98,458,362,729),35=>array(77,0,761,718),36=>array(85,-147,553,760),37=>array(55,-14,895,742),38=>array(72,-14,843,742),39=>array(98,458,176,729),40=>array(79,-156,319,760),41=>array(71,-156,311,760),42=>array(16,287,484,742),43=>array(106,0,732,627),44=>array(36,-136,221,111),45=>array(44,230,294,306),46=>array(94,-14,224,116),47=>array(0,-93,337,729),48=>array(66,-14,570,742),49=>array(122,0,494,742),50=>array(68,0,538,742),51=>array(76,-14,562,742),52=>array(31,0,586,742),53=>array(85,-14,559,729),54=>array(67,-14,573,742),55=>array(84,0,564,729),56=>array(67,-14,569,742),57=>array(63,-14,569,742),58=>array(104,-14,234,434),59=>array(36,-136,236,434),60=>array(106,46,732,581),61=>array(106,175,732,452),62=>array(106,46,732,581),63=>array(68,-14,488,742),64=>array(66,-174,929,704),65=>array(-6,0,732,729),66=>array(55,0,674,729),67=>array(56,-14,705,742),68=>array(55,0,744,729),69=>array(55,0,650,729),70=>array(55,0,652,729),71=>array(56,-14,720,742),72=>array(55,0,817,729),73=>array(55,0,340,729),74=>array(-84,-208,355,729),75=>array(55,0,762,729),76=>array(55,0,640,729),77=>array(50,0,973,729),78=>array(49,-14,831,729),79=>array(56,-14,764,742),80=>array(55,0,637,729),81=>array(56,-160,764,742),82=>array(55,0,777,729),83=>array(84,-14,612,742),84=>array(10,0,657,729),85=>array(47,-14,798,729),86=>array(-10,0,737,729),87=>array(5,0,1025,729),88=>array(6,0,707,729),89=>array(-11,0,669,729),90=>array(45,0,656,729),91=>array(86,-132,313,760),92=>array(0,-93,337,729),93=>array(77,-132,304,760),94=>array(106,457,732,729),95=>array(0,-236,500,-197),96=>array(83,615,306,799),97=>array(50,-14,568,533),98=>array(29,-14,590,760),99=>array(50,-14,514,533),100=>array(50,-14,611,760),101=>array(50,-14,542,533),102=>array(36,0,430,760),103=>array(50,-222,611,533),104=>array(36,0,616,760),105=>array(36,0,297,736),106=>array(-96,-222,212,736),107=>array(29,0,613,760),108=>array(29,0,290,760),109=>array(36,0,921,533),110=>array(36,0,616,533),111=>array(50,-14,552,533),112=>array(29,-208,590,533),113=>array(50,-208,611,533),114=>array(36,0,478,533),115=>array(56,-14,462,533),116=>array(29,-14,394,680),117=>array(27,-14,607,519),118=>array(-3,0,562,519),119=>array(16,0,843,519),120=>array(12,0,552,519),121=>array(-3,-222,562,519),122=>array(40,0,490,519),123=>array(125,-163,511,760),124=>array(129,-236,208,764),125=>array(125,-163,511,760),126=>array(106,233,732,394),161=>array(136,0,266,743),162=>array(75,-145,539,662),163=>array(67,0,549,742),164=>array(51,45,588,582),165=>array(-8,0,639,729),166=>array(129,-171,208,699),167=>array(45,-95,455,742),168=>array(98,652,402,766),169=>array(138,0,862,725),170=>array(61,261,448,742),171=>array(77,69,518,517),172=>array(106,140,732,421),173=>array(44,230,294,306),174=>array(138,0,862,725),175=>array(104,673,396,745),176=>array(95,432,405,742),177=>array(106,0,732,627),178=>array(44,326,338,742),179=>array(49,319,350,742),180=>array(192,616,415,800),181=>array(29,-208,614,519),182=>array(77,-96,572,729),183=>array(93,282,223,412),184=>array(142,-193,344,0),185=>array(72,326,323,734),186=>array(46,261,424,742),187=>array(94,69,535,517),188=>array(72,-14,938,742),189=>array(72,-14,906,742),190=>array(49,-14,938,742),191=>array(68,-13,488,743),192=>array(-6,0,732,927),193=>array(-6,0,732,927),194=>array(-6,0,732,927),195=>array(-6,0,732,921),196=>array(-6,0,732,920),197=>array(-6,0,732,928),198=>array(-17,0,949,729),199=>array(56,-193,705,742),200=>array(55,0,650,927),201=>array(55,0,650,927),202=>array(55,0,650,927),203=>array(55,0,650,920),204=>array(55,0,340,927),205=>array(55,0,340,927),206=>array(42,0,354,927),207=>array(46,0,350,920),208=>array(55,0,749,729),209=>array(49,-14,831,921),210=>array(56,-14,764,927),211=>array(56,-14,764,927),212=>array(56,-14,764,927),213=>array(56,-14,764,921),214=>array(56,-14,764,920),215=>array(138,33,700,594),216=>array(49,-28,769,757),217=>array(47,-14,798,927),218=>array(47,-14,798,927),219=>array(47,-14,798,927),220=>array(47,-14,798,920),221=>array(-11,0,669,927),222=>array(55,0,637,729),223=>array(29,-14,624,760),224=>array(50,-14,568,799),225=>array(50,-14,568,800),226=>array(50,-14,568,800),227=>array(50,-14,568,777),228=>array(50,-14,568,766),229=>array(50,-14,568,878),230=>array(50,-14,890,533),231=>array(50,-193,514,533),232=>array(50,-14,542,799),233=>array(50,-14,542,800),234=>array(50,-14,542,800),235=>array(50,-14,542,766),236=>array(-7,0,297,799),237=>array(36,0,325,800),238=>array(4,0,316,800),239=>array(8,0,312,766),240=>array(50,-14,552,760),241=>array(36,0,616,777),242=>array(50,-14,552,799),243=>array(50,-14,552,800),244=>array(50,-14,552,800),245=>array(50,-14,552,777),246=>array(50,-14,552,766),247=>array(106,68,732,559),248=>array(37,-46,561,565),249=>array(27,-14,607,799),250=>array(27,-14,607,800),251=>array(27,-14,607,800),252=>array(27,-14,607,766),253=>array(-3,-222,562,800),254=>array(29,-208,590,760),255=>array(-3,-222,562,766),256=>array(-6,0,732,899),257=>array(50,-14,568,745),258=>array(-6,0,732,926),259=>array(50,-14,568,772),260=>array(-6,-192,732,729),261=>array(50,-192,568,533),262=>array(56,-14,705,927),263=>array(50,-14,514,800),264=>array(56,-14,705,927),265=>array(50,-14,514,800),266=>array(56,-14,705,921),267=>array(50,-14,514,766),268=>array(56,-14,705,927),269=>array(50,-14,514,800),270=>array(55,0,744,927),271=>array(50,-14,738,760),272=>array(55,0,749,729),273=>array(50,-14,611,760),274=>array(55,0,650,899),275=>array(50,-14,542,746),276=>array(55,0,650,928),277=>array(50,-14,542,785),278=>array(55,0,650,921),279=>array(50,-14,542,766),280=>array(55,-192,650,729),281=>array(50,-192,542,533),282=>array(55,0,650,927),283=>array(50,-14,542,800),284=>array(56,-14,720,927),285=>array(50,-222,611,800),286=>array(56,-14,720,928),287=>array(50,-222,611,785),288=>array(56,-14,720,921),289=>array(50,-222,611,766),290=>array(56,-224,720,742),291=>array(50,-222,611,741),292=>array(55,0,817,927),293=>array(-30,0,616,927),294=>array(55,0,817,729),295=>array(36,0,616,760),296=>array(36,0,358,921),297=>array(-1,0,321,777),298=>array(51,0,344,899),299=>array(-22,0,297,745),300=>array(45,0,349,928),301=>array(7,0,313,785),302=>array(55,-192,340,729),303=>array(36,-192,297,736),304=>array(55,0,340,921),305=>array(36,0,297,519),306=>array(55,-208,755,729),307=>array(36,-222,497,736),308=>array(-84,-208,358,927),309=>array(-96,-222,284,800),310=>array(55,-209,762,729),311=>array(29,-209,613,760),312=>array(29,0,613,518),313=>array(55,0,640,928),314=>array(29,0,290,928),315=>array(55,-209,640,729),316=>array(29,-207,290,760),317=>array(55,0,640,729),318=>array(29,0,418,760),319=>array(55,0,640,729),320=>array(29,0,409,760),321=>array(42,0,645,729),322=>array(22,0,310,760),323=>array(49,-14,831,928),324=>array(36,0,616,776),325=>array(49,-216,831,729),326=>array(36,-209,616,533),327=>array(49,-14,831,932),328=>array(36,0,616,800),329=>array(55,0,811,742),330=>array(47,-208,705,743),331=>array(36,-222,536,533),332=>array(56,-14,764,899),333=>array(50,-14,552,745),334=>array(56,-14,764,928),335=>array(50,-14,552,785),336=>array(56,-14,764,927),337=>array(50,-14,552,800),338=>array(58,0,1057,729),339=>array(50,-14,939,533),340=>array(55,0,777,928),341=>array(36,0,478,776),342=>array(55,-209,777,729),343=>array(36,-209,478,533),344=>array(55,0,777,927),345=>array(36,0,478,800),346=>array(84,-14,612,928),347=>array(56,-14,462,776),348=>array(84,-14,612,927),349=>array(56,-14,462,800),350=>array(84,-193,612,742),351=>array(56,-193,462,533),352=>array(84,-14,612,927),353=>array(56,-14,462,800),354=>array(10,-193,657,729),355=>array(29,-193,394,680),356=>array(10,0,657,927),357=>array(29,-14,394,788),358=>array(10,0,657,729),359=>array(29,-14,394,680),360=>array(47,-14,798,921),361=>array(27,-14,607,777),362=>array(47,-14,798,899),363=>array(27,-14,607,745),364=>array(47,-14,798,928),365=>array(27,-14,607,785),366=>array(47,-14,798,1051),367=>array(27,-14,607,868),368=>array(47,-14,798,927),369=>array(27,-14,607,800),370=>array(47,-200,798,729),371=>array(27,-192,645,519),372=>array(5,0,1025,931),373=>array(16,0,843,800),374=>array(-11,0,669,931),375=>array(-3,-222,562,800),376=>array(-11,0,669,920),377=>array(45,0,656,928),378=>array(40,0,490,776),379=>array(45,0,656,930),380=>array(40,0,490,734),381=>array(45,0,656,927),382=>array(40,0,490,800),383=>array(36,0,430,760),384=>array(29,-14,590,760),385=>array(-94,0,674,729),386=>array(55,0,674,729),387=>array(29,-14,590,760),388=>array(55,0,674,729),389=>array(29,-14,590,760),390=>array(56,-14,705,742),391=>array(56,-14,903,796),392=>array(50,-14,715,639),393=>array(55,0,749,729),394=>array(-94,0,744,729),395=>array(55,0,674,729),396=>array(29,-14,590,760),397=>array(50,-246,552,533),398=>array(55,0,650,729),399=>array(56,-14,764,742),400=>array(61,-14,569,742),401=>array(-99,-208,652,729),402=>array(-96,-185,430,760),403=>array(56,-14,913,796),404=>array(9,-92,674,729),405=>array(36,-3,883,760),406=>array(55,0,340,729),407=>array(50,0,344,729),408=>array(55,0,821,741),409=>array(34,0,613,760),410=>array(29,0,290,760),411=>array(41,0,606,765),412=>array(36,-14,921,730),413=>array(-100,-208,831,729),414=>array(36,-208,616,533),415=>array(56,-14,764,742),416=>array(54,-14,789,760),417=>array(48,-14,646,533),418=>array(56,-157,1012,742),419=>array(50,-208,778,533),420=>array(-94,0,637,729),421=>array(29,-208,590,716),422=>array(55,-159,777,729),423=>array(84,-14,612,742),424=>array(56,-14,462,533),425=>array(41,0,640,729),426=>array(-96,-222,385,761),427=>array(29,-222,394,680),428=>array(42,0,657,729),429=>array(29,-14,416,760),430=>array(10,-208,657,729),431=>array(44,-14,987,802),432=>array(21,-14,688,532),433=>array(61,-14,769,729),434=>array(55,0,700,729),435=>array(-11,0,798,729),436=>array(-3,-222,663,530),437=>array(45,0,656,729),438=>array(40,0,490,519),439=>array(50,-14,536,729),440=>array(50,-14,536,729),441=>array(50,-224,536,519),442=>array(63,-224,522,519),443=>array(68,0,548,742),444=>array(55,-14,612,729),445=>array(19,-224,536,519),446=>array(108,-15,428,680),447=>array(29,-208,580,560),448=>array(108,0,187,729),449=>array(108,0,384,729),450=>array(9,0,450,729),451=>array(108,0,187,729),452=>array(55,0,1458,927),453=>array(55,0,1292,800),454=>array(50,-14,1130,800),455=>array(55,-208,1019,729),456=>array(55,-222,876,736),457=>array(29,-222,532,760),458=>array(49,-208,1230,729),459=>array(49,-222,1087,736),460=>array(36,-222,856,736),461=>array(-6,0,732,927),462=>array(50,-14,568,800),463=>array(42,0,354,927),464=>array(4,0,315,800),465=>array(56,-14,764,927),466=>array(50,-14,552,800),467=>array(47,-14,798,927),468=>array(27,-14,607,800),469=>array(47,-14,798,1025),470=>array(27,-14,607,886),471=>array(47,-14,798,1044),472=>array(27,-14,607,905),473=>array(47,-14,798,1043),474=>array(27,-14,607,904),475=>array(47,-14,798,1044),476=>array(27,-14,607,905),477=>array(50,-14,542,533),478=>array(-6,0,732,1025),479=>array(50,-14,568,886),480=>array(-6,0,732,1025),481=>array(50,-14,568,888),482=>array(-17,0,949,899),483=>array(50,-14,890,745),484=>array(56,-14,818,742),485=>array(50,-222,611,533),486=>array(56,-14,720,927),487=>array(50,-222,611,800),488=>array(55,0,762,927),489=>array(6,0,613,961),490=>array(56,-200,764,742),491=>array(50,-200,552,533),492=>array(56,-200,764,899),493=>array(50,-200,552,745),494=>array(50,-14,536,927),495=>array(50,-224,536,800),496=>array(-96,-222,315,800),497=>array(55,0,1458,729),498=>array(55,0,1292,729),499=>array(50,-14,1130,760),500=>array(56,-14,720,927),501=>array(50,-222,611,800),502=>array(55,-14,1109,729),503=>array(55,-208,652,742),504=>array(49,-14,831,927),505=>array(36,0,616,799),506=>array(-6,0,732,927),507=>array(50,-14,568,927),508=>array(-17,0,949,927),509=>array(50,-14,890,802),510=>array(49,-28,769,927),511=>array(37,-46,561,800),512=>array(-6,0,732,927),513=>array(50,-14,568,800),514=>array(-6,0,732,967),515=>array(50,-14,568,785),516=>array(55,0,650,927),517=>array(50,-14,542,800),518=>array(55,0,650,967),519=>array(50,-14,542,785),520=>array(-19,0,340,927),521=>array(-60,0,297,800),522=>array(45,0,351,967),523=>array(7,0,313,785),524=>array(56,-14,764,927),525=>array(50,-14,552,800),526=>array(56,-14,764,967),527=>array(50,-14,552,785),528=>array(55,0,777,927),529=>array(36,0,478,800),530=>array(55,0,777,967),531=>array(36,0,478,785),532=>array(47,-14,798,927),533=>array(27,-14,607,800),534=>array(47,-14,798,967),535=>array(27,-14,607,785),536=>array(84,-225,612,742),537=>array(56,-225,462,533),538=>array(10,-225,657,729),539=>array(29,-225,394,680),540=>array(76,-210,556,742),541=>array(35,-211,467,530),542=>array(55,0,817,927),543=>array(6,0,616,961),544=>array(47,-208,798,744),545=>array(50,-73,797,760),546=>array(40,-14,544,742),547=>array(50,-14,502,760),548=>array(45,-187,656,729),549=>array(40,-195,490,519),550=>array(-6,0,732,921),551=>array(50,-14,568,766),552=>array(55,-193,650,729),553=>array(50,-193,542,533),554=>array(56,-14,764,1025),555=>array(50,-14,552,886),556=>array(56,-14,764,1025),557=>array(50,-14,552,862),558=>array(56,-14,764,920),559=>array(50,-14,552,766),560=>array(56,-14,764,1025),561=>array(50,-14,552,887),562=>array(-11,0,669,899),563=>array(-3,-222,562,745),564=>array(29,-107,483,760),565=>array(36,-107,814,533),566=>array(29,-107,477,680),567=>array(-96,-222,212,519),568=>array(50,-14,910,760),569=>array(50,-208,910,533),570=>array(-6,-28,732,757),571=>array(22,-28,743,757),572=>array(18,-46,542,565),573=>array(50,0,640,729),574=>array(-27,-28,694,757),575=>array(56,-222,462,533),576=>array(40,-222,527,519),577=>array(37,0,548,729),578=>array(37,0,428,533),579=>array(50,0,674,729),580=>array(42,-14,803,729),581=>array(-6,0,732,729),582=>array(55,-54,650,783),583=>array(50,-54,542,579),584=>array(-84,-208,360,729),585=>array(-96,-222,297,736),586=>array(56,-208,892,742),587=>array(50,-222,743,533),588=>array(50,0,777,729),589=>array(36,0,478,533),590=>array(-11,0,669,729),591=>array(-3,-222,562,519),592=>array(50,-14,568,533),593=>array(50,-14,611,533),594=>array(50,-14,611,533),595=>array(29,-14,590,760),596=>array(50,-14,514,533),597=>array(50,-107,497,533),598=>array(50,-222,743,760),599=>array(50,-14,743,760),600=>array(50,-14,542,533),601=>array(50,-14,542,533),602=>array(59,-14,903,533),603=>array(49,-19,472,524),604=>array(51,-19,472,524),605=>array(49,-19,833,524),606=>array(50,-18,568,533),607=>array(-96,-222,297,519),608=>array(50,-222,743,760),609=>array(50,-222,611,519),610=>array(50,-18,515,529),611=>array(12,-223,587,519),612=>array(70,-17,504,532),613=>array(27,-208,607,519),614=>array(41,0,616,760),615=>array(41,-222,536,760),616=>array(36,0,297,736),617=>array(36,0,298,519),618=>array(36,0,297,519),619=>array(36,0,358,760),620=>array(36,0,431,760),621=>array(29,-222,423,760),622=>array(29,-224,675,760),623=>array(36,0,921,533),624=>array(36,-208,921,533),625=>array(36,-222,840,533),626=>array(-96,-222,616,533),627=>array(36,-222,754,533),628=>array(34,-14,624,519),629=>array(50,-14,552,533),630=>array(50,0,761,519),631=>array(50,-14,602,530),632=>array(50,-208,552,760),633=>array(36,-14,478,519),634=>array(36,-14,478,759),635=>array(36,-222,611,519),636=>array(36,-207,478,533),637=>array(36,-222,478,533),638=>array(41,0,430,530),639=>array(41,0,430,530),640=>array(35,0,582,519),641=>array(35,0,582,519),642=>array(56,-222,462,533),643=>array(-96,-222,332,761),644=>array(-96,-222,430,760),645=>array(36,-222,464,530),646=>array(-96,-222,385,761),647=>array(29,-161,394,533),648=>array(29,-208,394,680),649=>array(27,-14,607,519),650=>array(50,-14,570,519),651=>array(36,-3,559,519),652=>array(-3,0,562,519),653=>array(16,0,843,519),654=>array(-3,0,562,741),655=>array(41,0,620,519),656=>array(40,-222,708,519),657=>array(40,-93,493,519),658=>array(50,-224,536,519),659=>array(63,-224,536,519),660=>array(114,0,434,761),661=>array(114,0,434,761),662=>array(114,0,434,761),663=>array(56,-222,364,759),664=>array(56,-14,764,742),665=>array(36,0,521,519),666=>array(50,-18,568,533),667=>array(50,-18,714,760),668=>array(34,0,614,519),669=>array(-96,-222,275,736),670=>array(29,-209,614,519),671=>array(41,0,518,519),672=>array(50,-208,743,760),673=>array(114,0,434,761),674=>array(114,0,434,761),675=>array(50,-14,959,760),676=>array(50,-224,997,760),677=>array(50,-93,960,760),678=>array(29,0,772,680),679=>array(29,-222,658,761),680=>array(29,-14,783,680),681=>array(36,-222,856,760),682=>array(29,0,668,760),683=>array(29,0,639,760),684=>array(35,-15,547,625),685=>array(35,105,392,625),686=>array(29,-207,745,760),687=>array(29,-222,877,760),688=>array(22,326,382,751),689=>array(22,326,379,751),690=>array(22,202,213,739),691=>array(22,327,296,625),692=>array(22,318,296,617),693=>array(22,202,379,617),694=>array(22,327,341,617),695=>array(22,327,535,617),696=>array(22,202,373,617),697=>array(78,557,203,800),698=>array(78,557,384,800),699=>array(102,495,268,742),700=>array(102,495,268,742),701=>array(102,495,268,742),702=>array(57,492,191,760),703=>array(57,492,191,760),704=>array(22,347,230,772),705=>array(22,347,230,772),706=>array(130,524,370,836),707=>array(130,524,370,836),708=>array(94,561,406,800),709=>array(94,561,406,800),710=>array(94,616,406,800),711=>array(94,616,406,800),712=>array(104,526,176,759),713=>array(104,673,396,745),714=>array(192,616,415,800),715=>array(83,615,306,799),716=>array(104,-124,176,110),717=>array(104,-156,396,-84),720=>array(105,0,231,434),721=>array(105,303,231,434),722=>array(57,249,191,517),723=>array(57,249,191,517),726=>array(44,153,277,387),727=>array(44,234,277,306),728=>array(97,645,403,785),729=>array(193,652,307,766),730=>array(116,610,384,878),731=>array(162,-192,344,0),732=>array(89,639,411,777),733=>array(119,616,459,800),734=>array(1,307,419,508),736=>array(8,201,370,617),737=>array(22,326,192,751),738=>array(27,318,291,625),739=>array(22,326,373,617),740=>array(22,347,230,772),741=>array(104,0,389,668),742=>array(104,0,389,668),743=>array(104,0,389,668),744=>array(104,0,389,668),745=>array(104,0,389,668),748=>array(94,-281,406,-42),750=>array(102,495,434,742),751=>array(94,-241,406,-58),752=>array(94,-281,406,-42),755=>array(116,-240,384,28),759=>array(89,-192,411,-55),768=>array(-414,615,-191,799),769=>array(-308,616,-85,800),770=>array(-406,616,-94,800),771=>array(-414,639,-92,777),772=>array(-396,673,-104,745),773=>array(-500,716,0,755),774=>array(-403,645,-97,785),775=>array(-307,652,-193,766),776=>array(-405,652,-101,766),777=>array(-343,616,-141,852),778=>array(-390,610,-122,878),779=>array(-381,616,-41,800),780=>array(-406,616,-94,800),781=>array(-285,616,-213,803),782=>array(-394,616,-104,803),783=>array(-468,616,-128,800),784=>array(-403,645,-97,874),785=>array(-403,645,-97,785),786=>array(-283,495,-135,644),787=>array(-310,606,-179,829),788=>array(-323,606,-192,829),789=>array(-64,616,64,800),790=>array(-412,-260,-189,-76),791=>array(-308,-259,-84,-76),792=>array(-331,-340,-178,-107),793=>array(-322,-340,-169,-107),794=>array(-195,698,38,932),795=>array(-148,350,44,532),796=>array(-311,-347,-177,-79),797=>array(-366,-251,-132,-99),798=>array(-366,-260,-132,-107),799=>array(-365,-340,-131,-107),800=>array(-366,-179,-132,-107),801=>array(-418,-222,-110,63),802=>array(-392,-222,-84,63),803=>array(-307,-191,-193,-77),804=>array(-403,-191,-99,-77),805=>array(-355,-241,-146,-32),806=>array(-348,-225,-200,-76),807=>array(-358,-193,-156,0),808=>array(-338,-192,-156,0),809=>array(-286,-263,-214,-76),810=>array(-396,-259,-104,-75),811=>array(-405,-217,-95,-77),812=>array(-406,-241,-94,-58),813=>array(-406,-240,-94,-57),814=>array(-403,-217,-97,-77),815=>array(-403,-216,-97,-76),816=>array(-414,-213,-92,-76),817=>array(-396,-147,-104,-75),818=>array(-500,-236,0,-197),819=>array(-500,-236,0,-80),820=>array(-737,212,-95,415),821=>array(-291,227,-30,278),822=>array(-616,227,-36,278),823=>array(-559,-46,-35,565),824=>array(-770,-28,-49,757),825=>array(-313,-344,-179,-76),826=>array(-398,-256,-106,-72),827=>array(-385,-344,-116,-75),828=>array(-405,-217,-95,-77),829=>array(-359,575,-142,792),830=>array(-312,592,-174,850),831=>array(-500,599,0,755),835=>array(-310,606,-179,829),856=>array(-110,652,4,766),864=>array(-430,723,430,859),865=>array(-445,729,445,869),880=>array(55,0,685,729),881=>array(34,0,479,519),882=>array(10,0,657,729),883=>array(41,0,515,519),884=>array(78,557,203,800),885=>array(78,-208,203,35),886=>array(49,-14,831,743),887=>array(34,0,614,519),890=>array(213,-208,336,-60),891=>array(50,-14,514,533),892=>array(50,-14,514,533),893=>array(50,-14,514,533),894=>array(36,-136,236,434),900=>array(192,616,415,800),901=>array(98,652,415,996),902=>array(-6,0,732,800),903=>array(93,282,223,412),904=>array(7,0,820,800),905=>array(7,0,984,800),906=>array(7,0,507,800),908=>array(7,-14,780,800),910=>array(7,0,906,800),911=>array(7,0,792,800),912=>array(8,22,336,996),913=>array(-6,0,732,729),914=>array(55,0,674,729),915=>array(55,0,652,729),916=>array(38,0,680,729),917=>array(55,0,650,729),918=>array(45,0,656,729),919=>array(55,0,817,729),920=>array(56,-14,764,742),921=>array(55,0,340,729),922=>array(55,0,762,729),923=>array(-6,0,732,729),924=>array(50,0,973,729),925=>array(49,-14,831,729),926=>array(55,0,642,729),927=>array(56,-14,764,742),928=>array(55,0,817,729),929=>array(55,0,637,729),931=>array(41,0,640,729),932=>array(10,0,657,729),933=>array(-11,0,669,729),934=>array(56,0,765,729),935=>array(6,0,707,729),936=>array(47,0,838,729),937=>array(61,0,769,742),938=>array(48,0,352,920),939=>array(-11,0,669,920),940=>array(50,-12,648,800),941=>array(49,-19,472,800),942=>array(36,-208,536,800),943=>array(36,22,336,800),944=>array(36,-3,559,996),945=>array(50,-12,648,533),946=>array(63,-208,528,765),947=>array(36,-209,548,519),948=>array(50,-14,552,765),949=>array(49,-19,472,524),950=>array(41,-208,500,760),951=>array(36,-208,536,533),952=>array(50,-11,551,771),953=>array(36,22,336,519),954=>array(34,0,613,519),955=>array(41,0,606,765),956=>array(34,-208,614,519),957=>array(36,0,555,519),958=>array(41,-208,500,760),959=>array(50,-14,552,533),960=>array(36,0,621,519),961=>array(63,-208,538,533),962=>array(50,-208,500,533),963=>array(50,-14,653,519),964=>array(41,22,515,519),965=>array(36,-3,559,519),966=>array(44,-208,656,521),967=>array(12,-222,584,533),968=>array(63,-208,722,519),969=>array(44,-3,767,519),970=>array(10,22,336,766),971=>array(36,-3,559,766),972=>array(50,-14,552,800),973=>array(36,-3,559,800),974=>array(44,-3,767,800),975=>array(55,-240,724,729),976=>array(50,-11,532,771),977=>array(34,-11,678,771),978=>array(30,0,650,731),979=>array(7,0,838,800),980=>array(30,0,650,920),981=>array(38,-208,643,760),982=>array(21,-3,788,519),983=>array(47,-222,573,533),984=>array(56,-208,764,742),985=>array(50,-208,552,533),986=>array(56,-208,685,742),987=>array(50,-208,500,616),988=>array(55,0,652,729),989=>array(-90,-211,431,742),990=>array(52,0,528,729),991=>array(93,0,566,759),992=>array(76,-208,726,742),993=>array(45,-208,535,533),1008=>array(47,-4,573,533),1009=>array(63,-210,538,533),1010=>array(50,-14,514,533),1011=>array(-96,-222,212,736),1012=>array(56,-14,764,742),1013=>array(50,-14,514,533),1014=>array(50,-14,514,533),1015=>array(55,0,637,729),1016=>array(29,-208,590,760),1017=>array(56,-14,705,742),1018=>array(50,0,973,729),1019=>array(47,-208,671,519),1020=>array(42,-208,565,533),1021=>array(56,-14,705,742),1022=>array(56,-14,705,742),1023=>array(56,-14,705,742),1024=>array(55,0,650,927),1025=>array(55,0,650,920),1026=>array(-39,-216,724,729),1027=>array(55,0,620,927),1028=>array(56,-14,705,742),1029=>array(84,-14,612,742),1030=>array(55,0,340,729),1031=>array(46,0,350,920),1032=>array(-84,-208,355,729),1033=>array(25,-14,1033,729),1034=>array(55,0,1066,729),1035=>array(-39,0,817,729),1036=>array(55,0,762,927),1037=>array(55,0,817,927),1038=>array(12,-14,711,957),1039=>array(55,-157,817,729),1040=>array(12,0,750,729),1041=>array(55,0,674,729),1042=>array(55,0,674,729),1043=>array(55,0,620,729),1044=>array(50,-157,762,729),1045=>array(55,0,650,729),1046=>array(12,0,1112,729),1047=>array(54,-14,562,742),1048=>array(55,0,817,729),1049=>array(55,0,817,957),1050=>array(55,0,762,729),1051=>array(25,-14,784,729),1052=>array(50,0,973,729),1053=>array(55,0,817,729),1054=>array(56,-14,764,742),1055=>array(55,0,817,729),1056=>array(55,0,637,729),1057=>array(56,-14,705,742),1058=>array(10,0,657,729),1059=>array(12,-14,711,729),1060=>array(57,0,773,729),1061=>array(6,0,707,729),1062=>array(55,-157,837,729),1063=>array(10,0,722,729),1064=>array(55,0,1086,729),1065=>array(55,-157,1086,729),1066=>array(34,0,759,729),1067=>array(55,0,929,729),1068=>array(55,0,638,729),1069=>array(56,-14,705,742),1070=>array(55,-14,1128,742),1071=>array(34,0,752,729),1072=>array(50,-14,568,533),1073=>array(42,-14,551,776),1074=>array(36,0,521,519),1075=>array(29,0,480,519),1076=>array(36,-138,575,519),1077=>array(50,-14,542,533),1078=>array(12,0,908,519),1079=>array(44,-14,496,533),1080=>array(34,0,614,519),1081=>array(34,0,614,746),1082=>array(34,0,613,519),1083=>array(18,-14,599,519),1084=>array(36,0,742,519),1085=>array(34,0,614,519),1086=>array(50,-14,552,533),1087=>array(34,0,614,519),1088=>array(29,-208,590,533),1089=>array(50,-14,514,533),1090=>array(41,0,515,519),1091=>array(12,-222,577,519),1092=>array(39,-208,745,760),1093=>array(12,0,552,519),1094=>array(36,-138,616,519),1095=>array(34,0,608,519),1096=>array(36,0,902,519),1097=>array(36,-138,902,519),1098=>array(29,0,594,519),1099=>array(29,0,760,519),1100=>array(29,0,502,519),1101=>array(50,-14,514,533),1102=>array(29,-14,825,533),1103=>array(32,0,578,519),1104=>array(50,-14,542,799),1105=>array(50,-14,542,766),1106=>array(21,-222,573,760),1107=>array(29,0,480,800),1108=>array(50,-14,514,533),1109=>array(56,-14,462,533),1110=>array(36,0,297,736),1111=>array(8,0,312,766),1112=>array(-96,-222,212,736),1113=>array(18,-14,816,519),1114=>array(34,0,830,519),1115=>array(21,0,616,760),1116=>array(34,0,613,800),1117=>array(34,0,614,799),1118=>array(12,-222,577,746),1119=>array(29,-138,620,519),1122=>array(34,0,726,729),1123=>array(29,0,561,760),1124=>array(55,-14,1069,742),1125=>array(29,-14,788,533),1130=>array(12,0,1112,729),1131=>array(12,0,908,519),1132=>array(55,0,1347,729),1133=>array(29,0,1101,519),1136=>array(12,0,932,729),1137=>array(-21,-208,891,760),1138=>array(56,-14,764,742),1139=>array(50,-11,502,533),1140=>array(12,0,848,742),1141=>array(12,0,667,533),1142=>array(12,0,848,927),1143=>array(12,0,667,800),1164=>array(24,0,671,729),1165=>array(18,0,502,760),1168=>array(55,0,630,872),1169=>array(29,0,485,668),1170=>array(50,0,620,729),1171=>array(29,0,480,519),1172=>array(55,-216,673,729),1173=>array(29,-222,555,519),1174=>array(12,-157,1112,729),1175=>array(12,-138,908,519),1176=>array(54,-193,562,742),1177=>array(44,-193,496,533),1178=>array(55,-157,762,729),1179=>array(29,-138,619,519),1182=>array(49,0,762,729),1183=>array(24,0,613,760),1184=>array(34,0,883,729),1185=>array(29,0,705,519),1186=>array(55,-157,817,729),1187=>array(34,-138,614,519),1188=>array(55,0,1097,729),1189=>array(34,0,809,519),1190=>array(55,-216,1150,729),1191=>array(29,-222,882,519),1194=>array(56,-193,705,742),1195=>array(50,-193,514,533),1196=>array(10,-157,657,729),1197=>array(41,-138,515,519),1198=>array(-11,0,669,729),1199=>array(-3,-208,562,519),1200=>array(-11,0,669,729),1201=>array(-3,-208,562,519),1202=>array(6,-157,717,729),1203=>array(12,-138,555,519),1204=>array(10,-157,917,729),1205=>array(41,-138,680,519),1206=>array(-27,-157,683,729),1207=>array(34,-138,614,519),1210=>array(-27,0,697,729),1211=>array(36,0,616,760),1216=>array(55,0,340,729),1217=>array(12,0,1112,928),1218=>array(12,0,908,785),1219=>array(55,-216,724,729),1220=>array(29,-222,584,519),1223=>array(55,-216,817,729),1224=>array(34,-222,614,519),1227=>array(-27,-157,697,729),1228=>array(34,-138,614,519),1231=>array(29,0,293,760),1232=>array(12,0,750,926),1233=>array(50,-14,568,772),1234=>array(12,0,750,920),1235=>array(50,-14,568,766),1236=>array(-17,0,949,729),1237=>array(50,-14,890,533),1238=>array(55,0,650,928),1239=>array(50,-14,542,785),1240=>array(56,-14,764,742),1241=>array(50,-14,542,533),1242=>array(56,-14,764,920),1243=>array(50,-14,542,766),1244=>array(12,0,1112,920),1245=>array(12,0,908,766),1246=>array(54,-14,562,920),1247=>array(44,-14,496,766),1248=>array(50,-14,536,729),1249=>array(50,-224,536,519),1250=>array(55,0,817,899),1251=>array(34,0,614,745),1252=>array(55,0,817,920),1253=>array(34,0,614,766),1254=>array(56,-14,764,920),1255=>array(50,-14,552,766),1256=>array(56,-14,764,742),1257=>array(50,-14,552,533),1258=>array(56,-14,764,920),1259=>array(50,-14,552,766),1260=>array(56,-14,705,920),1261=>array(50,-14,514,766),1262=>array(12,-14,711,899),1263=>array(12,-222,577,745),1264=>array(12,-14,711,920),1265=>array(12,-222,577,766),1266=>array(12,-14,711,927),1267=>array(12,-222,577,800),1268=>array(10,0,722,920),1269=>array(34,0,608,766),1270=>array(55,-157,620,729),1271=>array(29,-138,480,519),1272=>array(55,0,929,920),1273=>array(29,0,760,766),1296=>array(61,-14,569,742),1297=>array(50,-14,501,533),1298=>array(25,-216,784,729),1299=>array(18,-222,599,519),1300=>array(25,-14,1193,729),1301=>array(18,-14,907,519),1306=>array(56,-160,764,742),1307=>array(50,-208,611,533),1308=>array(5,0,1025,729),1309=>array(16,0,843,519),1329=>array(34,-14,765,729),1330=>array(34,0,757,743),1331=>array(49,0,826,743),1332=>array(20,0,847,743),1333=>array(34,-14,757,729),1334=>array(115,-45,743,743),1335=>array(78,-45,761,729),1336=>array(34,-45,757,743),1337=>array(34,-14,987,743),1338=>array(49,-14,826,729),1339=>array(78,0,763,729),1340=>array(78,-45,702,729),1341=>array(78,-14,1087,729),1342=>array(93,-13,771,742),1343=>array(10,0,740,729),1344=>array(53,-66,650,729),1345=>array(99,-32,725,743),1346=>array(30,-45,833,743),1347=>array(77,0,779,764),1348=>array(47,-14,896,729),1349=>array(64,-14,696,742),1350=>array(-24,-14,779,774),1351=>array(83,-14,703,729),1352=>array(34,0,765,743),1353=>array(96,-45,712,743),1354=>array(10,0,840,743),1355=>array(111,-45,737,744),1356=>array(34,0,884,743),1357=>array(34,-14,765,729),1358=>array(10,-45,812,729),1359=>array(55,-14,669,742),1360=>array(34,0,765,743),1361=>array(53,-14,701,742),1362=>array(78,0,692,729),1363=>array(63,0,782,729),1364=>array(0,0,797,743),1365=>array(63,-14,771,742),1366=>array(60,-14,777,729),1369=>array(57,492,191,760),1370=>array(44,482,229,729),1371=>array(0,615,231,799),1372=>array(2,618,384,893),1373=>array(83,615,306,799),1374=>array(10,618,378,856),1375=>array(44,618,462,760),1377=>array(28,-14,913,519),1378=>array(36,-208,556,533),1379=>array(50,-208,705,533),1380=>array(36,-208,705,533),1381=>array(23,-14,603,760),1382=>array(50,-208,705,533),1383=>array(28,0,510,760),1384=>array(28,-208,608,533),1385=>array(28,-208,805,533),1386=>array(50,-14,705,760),1387=>array(28,-208,607,760),1388=>array(23,-208,393,519),1389=>array(28,-208,937,760),1390=>array(59,-14,561,770),1391=>array(28,-208,600,760),1392=>array(28,0,608,760),1393=>array(68,-14,607,773),1394=>array(28,-208,697,533),1395=>array(78,-14,618,767),1396=>array(28,-14,648,773),1397=>array(-27,-208,211,519),1398=>array(53,-14,608,773),1399=>array(-15,-208,436,534),1400=>array(41,0,621,533),1401=>array(18,-208,365,544),1402=>array(28,-208,905,519),1403=>array(54,-208,517,534),1404=>array(41,0,631,533),1405=>array(28,-14,608,519),1406=>array(28,-208,705,760),1407=>array(28,-14,902,533),1408=>array(36,-208,616,533),1409=>array(54,-222,615,533),1410=>array(41,0,503,519),1411=>array(28,-208,902,760),1412=>array(12,-208,627,533),1413=>array(54,-14,556,533),1414=>array(20,-208,760,760),1415=>array(28,-14,808,760),1417=>array(104,-14,234,434),1418=>array(44,203,294,306),4256=>array(54,0,679,847),4257=>array(54,0,807,847),4258=>array(54,-58,784,848),4259=>array(64,1,795,847),4260=>array(54,0,679,847),4261=>array(54,0,969,847),4262=>array(13,0,846,847),4263=>array(64,0,1088,847),4264=>array(13,0,512,847),4265=>array(54,0,696,847),4266=>array(43,0,893,847),4267=>array(69,0,923,847),4268=>array(54,0,689,847),4269=>array(59,-37,1057,847),4270=>array(13,0,842,847),4271=>array(13,0,775,847),4272=>array(54,0,996,847),4273=>array(54,0,679,847),4274=>array(54,0,615,847),4275=>array(59,-37,997,847),4276=>array(54,0,882,847),4277=>array(33,0,986,847),4278=>array(54,0,677,847),4279=>array(54,0,679,847),4280=>array(54,0,678,847),4281=>array(54,0,679,847),4282=>array(54,-25,846,847),4283=>array(54,0,903,847),4284=>array(54,1,660,847),4285=>array(54,1,701,847),4286=>array(54,0,679,847),4287=>array(54,0,914,847),4288=>array(43,0,947,847),4289=>array(54,0,679,847),4290=>array(54,1,794,847),4291=>array(54,0,680,847),4292=>array(54,0,783,847),4293=>array(69,0,897,848),4304=>array(54,0,487,571),4305=>array(54,0,518,829),4306=>array(39,-225,550,542),4307=>array(54,-220,780,531),4308=>array(34,-225,498,532),4309=>array(39,-225,503,532),4310=>array(20,0,564,831),4311=>array(54,0,807,531),4312=>array(54,0,506,532),4313=>array(24,-225,492,532),4314=>array(54,-220,1013,537),4315=>array(54,0,518,829),4316=>array(68,0,532,840),4317=>array(54,-98,771,532),4318=>array(54,1,516,829),4319=>array(54,-225,517,531),4320=>array(54,-0,770,822),4321=>array(-15,0,553,829),4322=>array(44,-225,704,681),4323=>array(20,-225,634,532),4324=>array(54,-225,761,532),4325=>array(54,-225,517,831),4326=>array(54,-220,804,532),4327=>array(39,-225,504,531),4328=>array(10,0,525,830),4329=>array(68,-5,532,831),4330=>array(54,-225,626,531),4331=>array(54,0,519,829),4332=>array(49,-229,547,830),4333=>array(44,-225,532,829),4334=>array(-15,0,558,830),4335=>array(24,-225,659,532),4336=>array(54,0,518,829),4337=>array(54,0,549,830),4338=>array(54,-91,518,532),4339=>array(54,-225,518,585),4340=>array(54,-225,517,831),4341=>array(54,0,595,829),4342=>array(54,-225,833,672),4343=>array(54,-225,573,542),4344=>array(63,-225,528,532),4345=>array(54,-225,565,537),4346=>array(54,-69,517,532),4347=>array(44,0,393,486),4348=>array(44,341,310,845),7424=>array(-3,0,562,519),7425=>array(-21,0,717,519),7426=>array(50,-14,890,533),7427=>array(36,0,550,519),7428=>array(50,-14,497,533),7429=>array(36,0,543,519),7430=>array(36,0,543,519),7431=>array(29,0,496,519),7432=>array(50,-18,463,533),7433=>array(36,-214,297,522),7434=>array(14,-14,453,519),7435=>array(34,0,613,519),7436=>array(23,0,518,519),7437=>array(36,0,742,519),7438=>array(34,-14,614,519),7439=>array(50,-14,552,533),7440=>array(63,-14,510,533),7441=>array(50,9,597,511),7442=>array(49,27,597,492),7443=>array(18,-0,628,523),7444=>array(50,-14,939,533),7445=>array(29,-14,476,533),7446=>array(50,260,552,533),7447=>array(50,-14,552,259),7448=>array(53,0,518,519),7449=>array(12,0,559,519),7450=>array(12,0,559,519),7451=>array(41,0,515,519),7452=>array(3,-14,582,519),7453=>array(64,-29,597,551),7454=>array(77,-29,857,551),7455=>array(65,-205,599,680),7456=>array(-3,0,562,519),7457=>array(16,0,843,519),7458=>array(40,0,490,519),7459=>array(51,-14,492,519),7460=>array(49,-14,482,742),7461=>array(29,-14,714,533),7462=>array(29,0,480,519),7463=>array(-3,0,562,519),7464=>array(36,0,621,519),7465=>array(53,0,518,519),7466=>array(37,0,678,520),7467=>array(18,-14,599,519),7468=>array(-4,326,461,734),7469=>array(-11,326,598,734),7470=>array(35,326,424,734),7471=>array(32,334,449,742),7472=>array(35,326,469,734),7473=>array(35,326,410,734),7474=>array(35,326,410,734),7475=>array(35,318,454,742),7476=>array(35,326,515,734),7477=>array(35,326,214,734),7478=>array(-53,209,224,734),7479=>array(35,326,480,734),7480=>array(35,326,403,734),7481=>array(31,326,613,734),7482=>array(31,318,523,734),7483=>array(31,318,523,734),7484=>array(35,318,481,742),7485=>array(25,326,343,750),7486=>array(35,326,401,734),7487=>array(35,326,489,734),7488=>array(6,326,414,734),7489=>array(29,318,502,734),7490=>array(3,326,646,734),7491=>array(31,318,358,625),7492=>array(31,318,358,625),7493=>array(31,318,385,625),7494=>array(31,318,561,625),7495=>array(18,318,372,751),7496=>array(31,318,385,751),7497=>array(31,318,341,625),7498=>array(31,318,341,625),7499=>array(31,316,292,625),7500=>array(31,316,292,625),7501=>array(31,202,385,625),7502=>array(23,207,187,619),7503=>array(18,326,386,751),7504=>array(23,326,580,625),7505=>array(23,202,338,625),7506=>array(31,318,348,625),7507=>array(31,318,324,625),7508=>array(31,472,348,625),7509=>array(31,318,348,471),7510=>array(18,209,372,625),7511=>array(18,318,248,707),7512=>array(17,318,382,617),7513=>array(41,310,376,635),7514=>array(23,326,580,625),7515=>array(-2,326,354,617),7516=>array(19,326,450,633),7517=>array(40,217,333,763),7518=>array(23,217,345,625),7519=>array(31,326,348,763),7520=>array(28,217,414,626),7521=>array(8,209,368,633),7522=>array(23,0,187,412),7523=>array(22,0,296,299),7524=>array(17,-8,382,291),7525=>array(-2,0,354,291),7526=>array(40,-109,333,437),7527=>array(23,-109,345,298),7528=>array(40,-117,339,299),7529=>array(28,-109,414,300),7530=>array(8,-117,368,307),7531=>array(27,-14,924,533),7543=>array(50,-222,611,533),7544=>array(35,326,515,734),7547=>array(36,0,297,519),7548=>array(36,0,298,519),7549=>array(29,-208,649,533),7550=>array(3,-14,582,519),7551=>array(-16,-14,636,519),7557=>array(-18,-222,290,760),7579=>array(31,318,385,625),7580=>array(31,318,324,625),7581=>array(31,266,313,625),7582=>array(31,318,348,751),7583=>array(31,316,292,625),7584=>array(23,326,271,751),7585=>array(-61,202,184,617),7586=>array(31,202,385,617),7587=>array(17,209,382,617),7588=>array(23,326,187,738),7589=>array(23,326,188,617),7590=>array(23,326,187,617),7591=>array(35,326,199,617),7592=>array(-61,202,173,738),7593=>array(18,202,267,751),7594=>array(-11,202,183,751),7595=>array(26,326,326,624),7596=>array(23,202,529,625),7597=>array(23,209,580,625),7598=>array(-61,202,388,625),7599=>array(23,202,475,625),7600=>array(26,318,388,624),7601=>array(31,318,348,625),7602=>array(31,209,348,751),7603=>array(35,202,291,625),7604=>array(-61,202,209,752),7605=>array(18,202,248,707),7606=>array(17,318,382,617),7607=>array(31,324,359,626),7608=>array(2,326,367,625),7609=>array(23,324,352,617),7610=>array(-2,326,354,617),7611=>array(25,326,309,617),7612=>array(25,202,446,617),7613=>array(25,274,311,617),7614=>array(31,201,337,617),7615=>array(31,320,347,758),7620=>array(-396,616,-13,800),7621=>array(-487,616,-104,800),7622=>array(-396,616,-13,800),7623=>array(-487,616,-104,800),7624=>array(-476,616,-24,800),7625=>array(-476,616,-24,800),7680=>array(-6,-241,732,729),7681=>array(50,-241,568,533),7682=>array(55,0,674,921),7683=>array(29,-14,590,920),7684=>array(55,-191,674,729),7685=>array(29,-191,590,760),7686=>array(55,-147,674,729),7687=>array(29,-147,590,760),7688=>array(56,-193,705,927),7689=>array(50,-193,514,800),7690=>array(55,0,744,921),7691=>array(50,-14,611,920),7692=>array(55,-191,744,729),7693=>array(50,-191,611,760),7694=>array(55,-147,744,729),7695=>array(50,-147,611,760),7696=>array(55,-187,744,729),7697=>array(50,-193,611,760),7698=>array(55,-240,744,729),7699=>array(50,-240,611,760),7700=>array(55,0,650,1044),7701=>array(50,-14,542,919),7702=>array(55,0,650,1044),7703=>array(50,-14,542,919),7704=>array(55,-240,650,729),7705=>array(50,-240,542,533),7706=>array(55,-213,650,729),7707=>array(50,-213,542,533),7708=>array(55,-193,650,928),7709=>array(50,-193,542,785),7710=>array(55,0,652,921),7711=>array(36,0,430,920),7712=>array(56,-14,720,927),7713=>array(50,-222,611,745),7714=>array(55,0,817,921),7715=>array(36,0,616,920),7716=>array(55,-191,817,729),7717=>array(36,-191,616,760),7718=>array(55,0,817,920),7719=>array(5,0,616,921),7720=>array(55,-193,817,729),7721=>array(36,-193,616,760),7722=>array(55,-217,817,729),7723=>array(36,-217,616,760),7724=>array(34,-213,356,729),7725=>array(-4,-213,318,736),7726=>array(45,0,350,1044),7727=>array(8,0,312,886),7728=>array(55,0,762,931),7729=>array(29,0,613,961),7730=>array(55,-191,762,729),7731=>array(29,-191,613,760),7732=>array(55,-147,762,729),7733=>array(29,-147,613,760),7734=>array(55,-191,640,729),7735=>array(29,-191,290,760),7736=>array(51,-191,640,899),7737=>array(13,-191,305,900),7738=>array(55,-147,640,729),7739=>array(14,-147,306,760),7740=>array(55,-240,640,729),7741=>array(4,-240,316,760),7742=>array(50,0,973,927),7743=>array(36,0,921,800),7744=>array(50,0,973,921),7745=>array(36,0,921,766),7746=>array(50,-191,973,729),7747=>array(36,-191,921,533),7748=>array(49,-14,831,921),7749=>array(36,0,616,766),7750=>array(49,-191,831,729),7751=>array(36,-191,616,533),7752=>array(49,-147,831,729),7753=>array(36,-147,616,533),7754=>array(49,-240,831,729),7755=>array(36,-240,616,533),7756=>array(56,-14,764,1044),7757=>array(50,-14,552,881),7758=>array(56,-14,764,1049),7759=>array(50,-14,552,891),7760=>array(56,-14,764,1044),7761=>array(50,-14,552,919),7762=>array(56,-14,764,1044),7763=>array(50,-14,552,919),7764=>array(55,0,637,927),7765=>array(29,-208,590,800),7766=>array(55,0,637,921),7767=>array(29,-208,590,766),7768=>array(55,0,777,921),7769=>array(36,0,478,766),7770=>array(55,-191,777,729),7771=>array(36,-191,478,533),7772=>array(55,-191,777,899),7773=>array(36,-191,478,745),7774=>array(55,-147,777,729),7775=>array(14,-147,478,533),7776=>array(84,-14,612,921),7777=>array(56,-14,462,766),7778=>array(84,-191,612,742),7779=>array(56,-191,462,533),7780=>array(84,-14,612,943),7781=>array(56,-14,462,760),7782=>array(84,-14,612,1049),7783=>array(56,-14,462,867),7784=>array(84,-191,612,921),7785=>array(56,-191,462,766),7786=>array(10,0,657,921),7787=>array(29,-14,394,920),7788=>array(10,-191,657,729),7789=>array(29,-191,394,680),7790=>array(10,-147,657,729),7791=>array(29,-147,397,680),7792=>array(10,-240,657,729),7793=>array(29,-240,407,680),7794=>array(47,-191,798,729),7795=>array(27,-191,607,519),7796=>array(47,-213,798,729),7797=>array(27,-213,607,519),7798=>array(47,-240,798,729),7799=>array(27,-240,607,519),7800=>array(47,-14,798,1044),7801=>array(27,-14,607,881),7802=>array(47,-14,798,1032),7803=>array(27,-14,607,908),7804=>array(-10,0,737,927),7805=>array(-3,0,562,777),7806=>array(-10,-191,737,729),7807=>array(-3,-191,562,519),7808=>array(5,0,1025,927),7809=>array(16,0,843,799),7810=>array(5,0,1025,927),7811=>array(16,0,843,800),7812=>array(5,0,1025,920),7813=>array(16,0,843,766),7814=>array(5,0,1025,921),7815=>array(16,0,843,766),7816=>array(5,-191,1025,729),7817=>array(16,-191,843,519),7818=>array(6,0,707,921),7819=>array(12,0,552,766),7820=>array(6,0,707,920),7821=>array(12,0,552,766),7822=>array(-11,0,669,921),7823=>array(-3,-222,562,766),7824=>array(45,0,656,927),7825=>array(40,0,490,800),7826=>array(45,-191,656,729),7827=>array(40,-191,490,519),7828=>array(45,-147,656,729),7829=>array(40,-147,490,519),7830=>array(36,-147,616,760),7831=>array(-2,-14,394,921),7832=>array(16,0,843,878),7833=>array(-3,-222,562,878),7834=>array(50,-14,787,760),7835=>array(36,0,430,920),7836=>array(25,0,430,760),7837=>array(36,0,430,760),7838=>array(47,-14,756,743),7839=>array(50,-14,552,765),7840=>array(-6,-191,732,729),7841=>array(50,-191,568,533),7842=>array(-6,0,732,1034),7843=>array(50,-14,568,852),7844=>array(-6,0,732,1028),7845=>array(50,-14,595,846),7846=>array(-6,0,732,1028),7847=>array(50,-14,568,847),7848=>array(-6,0,732,1086),7849=>array(50,-14,568,904),7850=>array(-6,0,732,1057),7851=>array(50,-14,568,875),7852=>array(-6,-191,732,982),7853=>array(50,-191,568,800),7854=>array(-6,0,732,1044),7855=>array(50,-14,568,877),7856=>array(-6,0,732,1044),7857=>array(50,-14,568,877),7858=>array(-6,0,732,1109),7859=>array(50,-14,568,942),7860=>array(-6,0,732,1043),7861=>array(50,-14,568,876),7862=>array(-6,-191,732,967),7863=>array(50,-191,568,785),7864=>array(55,-191,650,729),7865=>array(50,-191,542,533),7866=>array(55,0,650,1034),7867=>array(50,-14,542,852),7868=>array(55,0,650,927),7869=>array(50,-14,542,777),7870=>array(55,0,670,1028),7871=>array(50,-14,623,846),7872=>array(55,0,650,1028),7873=>array(50,-14,542,847),7874=>array(55,0,650,1086),7875=>array(50,-14,594,904),7876=>array(55,0,650,1057),7877=>array(50,-14,542,875),7878=>array(55,-191,650,927),7879=>array(50,-191,542,800),7880=>array(55,0,340,1034),7881=>array(36,0,297,852),7882=>array(55,-191,340,729),7883=>array(36,-191,297,736),7884=>array(56,-191,764,742),7885=>array(50,-191,552,533),7886=>array(56,-14,764,1034),7887=>array(50,-14,552,852),7888=>array(56,-14,764,1028),7889=>array(50,-14,610,846),7890=>array(56,-14,764,1028),7891=>array(50,-14,552,846),7892=>array(56,-14,764,1086),7893=>array(50,-14,581,904),7894=>array(56,-14,764,1057),7895=>array(50,-14,552,875),7896=>array(56,-191,764,927),7897=>array(50,-191,552,800),7898=>array(54,-14,789,927),7899=>array(48,-14,646,800),7900=>array(54,-14,789,927),7901=>array(48,-14,646,799),7902=>array(54,-14,789,1034),7903=>array(48,-14,646,852),7904=>array(54,-14,789,921),7905=>array(48,-14,646,777),7906=>array(54,-191,789,760),7907=>array(48,-191,646,533),7908=>array(47,-191,798,729),7909=>array(27,-191,607,519),7910=>array(47,-14,798,1034),7911=>array(27,-14,607,852),7912=>array(44,-14,987,927),7913=>array(21,-14,688,800),7914=>array(44,-14,987,927),7915=>array(21,-14,688,799),7916=>array(44,-14,987,1034),7917=>array(21,-14,688,852),7918=>array(44,-14,987,921),7919=>array(21,-14,688,777),7920=>array(44,-191,987,802),7921=>array(21,-191,688,532),7922=>array(-11,0,669,931),7923=>array(-3,-222,562,776),7924=>array(-11,-191,669,729),7925=>array(-3,-222,562,519),7926=>array(-11,0,669,1037),7927=>array(-3,-222,562,852),7928=>array(-11,0,669,927),7929=>array(-3,-222,562,777),7930=>array(55,0,925,729),7931=>array(29,0,551,760),7936=>array(50,-12,648,829),7937=>array(50,-12,648,829),7938=>array(50,-12,648,829),7939=>array(50,-12,648,829),7940=>array(50,-12,648,829),7941=>array(50,-12,648,829),7942=>array(50,-12,648,994),7943=>array(50,-12,648,994),7944=>array(-6,0,732,829),7945=>array(-6,0,732,829),7946=>array(4,0,878,829),7947=>array(5,0,878,829),7948=>array(6,0,744,829),7949=>array(6,0,773,829),7950=>array(-6,0,732,994),7951=>array(-6,0,732,994),7952=>array(49,-19,472,829),7953=>array(49,-19,472,829),7954=>array(49,-19,472,829),7955=>array(49,-19,472,829),7956=>array(49,-19,472,829),7957=>array(49,-19,485,829),7960=>array(6,0,773,829),7961=>array(6,0,761,829),7962=>array(4,0,987,829),7963=>array(5,0,997,829),7964=>array(6,0,928,829),7965=>array(6,0,955,829),7968=>array(36,-208,536,829),7969=>array(36,-208,536,829),7970=>array(36,-208,536,829),7971=>array(36,-208,536,829),7972=>array(36,-208,536,829),7973=>array(36,-208,536,829),7974=>array(36,-208,536,994),7975=>array(36,-208,536,994),7976=>array(6,0,943,829),7977=>array(6,0,937,829),7978=>array(4,0,1157,829),7979=>array(5,0,1168,829),7980=>array(6,0,1104,829),7981=>array(6,0,1127,829),7982=>array(7,0,1042,994),7983=>array(7,0,1040,994),7984=>array(36,22,336,829),7985=>array(36,22,336,829),7986=>array(-6,22,367,829),7987=>array(-10,22,366,829),7988=>array(31,22,373,829),7989=>array(12,22,380,829),7990=>array(1,22,336,994),7991=>array(2,22,336,994),7992=>array(6,0,466,829),7993=>array(6,0,457,829),7994=>array(4,0,680,829),7995=>array(5,0,683,829),7996=>array(6,0,624,829),7997=>array(6,0,650,829),7998=>array(7,0,568,994),7999=>array(7,0,560,994),8000=>array(50,-14,552,829),8001=>array(50,-14,552,829),8002=>array(50,-14,552,829),8003=>array(50,-14,552,829),8004=>array(50,-14,552,829),8005=>array(50,-14,552,829),8008=>array(6,-14,764,829),8009=>array(6,-14,804,829),8010=>array(4,-14,1064,829),8011=>array(5,-14,1072,829),8012=>array(6,-14,881,829),8013=>array(6,-14,908,829),8016=>array(36,-3,559,829),8017=>array(36,-3,559,829),8018=>array(36,-3,559,829),8019=>array(36,-3,559,829),8020=>array(36,-3,559,829),8021=>array(36,-3,559,829),8022=>array(36,-3,559,994),8023=>array(36,-3,559,994),8025=>array(6,0,859,829),8027=>array(5,0,1088,829),8029=>array(6,0,1053,829),8031=>array(7,0,962,994),8032=>array(44,-3,767,829),8033=>array(44,-3,767,829),8034=>array(44,-3,767,829),8035=>array(44,-3,767,829),8036=>array(44,-3,767,829),8037=>array(44,-3,767,829),8038=>array(44,-3,767,994),8039=>array(44,-3,767,994),8040=>array(6,0,769,829),8041=>array(6,0,810,829),8042=>array(4,0,1071,829),8043=>array(5,0,1077,829),8044=>array(6,0,886,829),8045=>array(6,0,916,829),8046=>array(7,0,877,994),8047=>array(7,0,910,994),8048=>array(50,-12,648,799),8049=>array(50,-12,648,800),8050=>array(49,-19,472,799),8051=>array(49,-19,472,800),8052=>array(36,-208,536,799),8053=>array(36,-208,536,800),8054=>array(1,22,336,799),8055=>array(36,22,336,800),8056=>array(50,-14,552,799),8057=>array(50,-14,552,800),8058=>array(36,-3,559,799),8059=>array(36,-3,559,800),8060=>array(44,-3,767,799),8061=>array(44,-3,767,800),8064=>array(50,-208,648,829),8065=>array(50,-208,648,829),8066=>array(50,-208,648,829),8067=>array(50,-208,648,829),8068=>array(50,-208,648,829),8069=>array(50,-208,648,829),8070=>array(50,-208,648,994),8071=>array(50,-208,648,994),8072=>array(-6,-208,732,829),8073=>array(-6,-208,732,829),8074=>array(4,-208,878,829),8075=>array(5,-208,878,829),8076=>array(6,-208,744,829),8077=>array(6,-208,773,829),8078=>array(-6,-208,732,994),8079=>array(-6,-208,732,994),8080=>array(36,-208,536,829),8081=>array(36,-208,536,829),8082=>array(36,-208,536,829),8083=>array(36,-208,536,829),8084=>array(36,-208,536,829),8085=>array(36,-208,536,829),8086=>array(36,-208,536,994),8087=>array(36,-208,536,994),8088=>array(6,-208,943,829),8089=>array(6,-208,937,829),8090=>array(4,-208,1157,829),8091=>array(5,-208,1168,829),8092=>array(6,-208,1104,829),8093=>array(6,-208,1127,829),8094=>array(7,-208,1042,994),8095=>array(7,-208,1040,994),8096=>array(44,-208,767,829),8097=>array(44,-208,767,829),8098=>array(44,-208,767,829),8099=>array(44,-208,767,829),8100=>array(44,-208,767,829),8101=>array(44,-208,767,829),8102=>array(44,-208,767,994),8103=>array(44,-208,767,994),8104=>array(6,-208,769,829),8105=>array(6,-208,810,829),8106=>array(4,-208,1071,829),8107=>array(5,-208,1077,829),8108=>array(6,-208,886,829),8109=>array(6,-208,916,829),8110=>array(7,-208,877,994),8111=>array(7,-208,910,994),8112=>array(50,-12,648,785),8113=>array(50,-12,648,745),8114=>array(50,-208,648,799),8115=>array(50,-208,648,533),8116=>array(50,-208,648,800),8118=>array(50,-12,648,777),8119=>array(50,-208,648,777),8120=>array(-6,0,732,926),8121=>array(-6,0,732,899),8122=>array(-6,0,732,799),8123=>array(-6,0,732,800),8124=>array(-6,-208,732,729),8125=>array(188,606,318,829),8126=>array(213,-208,336,-60),8127=>array(188,606,318,829),8128=>array(89,639,411,777),8129=>array(89,652,411,944),8130=>array(36,-208,536,799),8131=>array(36,-208,536,533),8132=>array(36,-208,536,800),8134=>array(36,-208,536,777),8135=>array(36,-208,536,777),8136=>array(4,0,832,799),8137=>array(7,0,820,800),8138=>array(4,0,1007,799),8139=>array(7,0,984,800),8140=>array(55,-208,817,729),8141=>array(69,606,442,829),8142=>array(83,606,424,829),8143=>array(89,606,411,994),8144=>array(14,22,336,785),8145=>array(16,22,336,745),8146=>array(-2,22,336,996),8147=>array(8,22,336,996),8150=>array(13,22,336,777),8151=>array(13,22,336,944),8152=>array(45,0,349,928),8153=>array(51,0,344,899),8154=>array(4,0,533,799),8155=>array(7,0,507,800),8157=>array(66,606,442,829),8158=>array(65,606,433,829),8159=>array(89,606,411,994),8160=>array(36,-3,559,785),8161=>array(36,-3,559,745),8162=>array(36,-3,559,996),8163=>array(36,-3,559,996),8164=>array(63,-208,538,829),8165=>array(63,-208,538,829),8166=>array(36,-3,559,777),8167=>array(36,-3,559,944),8168=>array(-11,0,669,926),8169=>array(-11,0,669,899),8170=>array(4,0,930,799),8171=>array(7,0,906,800),8172=>array(6,0,754,829),8173=>array(83,652,402,996),8174=>array(98,652,415,996),8175=>array(83,615,306,799),8178=>array(44,-208,767,799),8179=>array(44,-208,767,519),8180=>array(44,-208,767,800),8182=>array(44,-3,767,730),8183=>array(44,-208,767,730),8184=>array(4,-14,906,799),8185=>array(7,-14,780,800),8186=>array(4,0,924,799),8187=>array(7,0,792,800),8188=>array(61,-208,769,742),8189=>array(192,616,415,800),8190=>array(188,606,318,829),8208=>array(44,230,294,306),8209=>array(44,230,294,306),8210=>array(44,233,592,298),8211=>array(44,233,456,298),8212=>array(44,233,956,298),8213=>array(0,233,1000,298),8214=>array(129,-236,369,764),8215=>array(0,-236,500,-80),8216=>array(102,495,268,742),8217=>array(71,482,238,729),8218=>array(44,-136,229,111),8219=>array(71,482,238,729),8220=>array(102,495,461,742),8221=>array(71,482,431,729),8222=>array(44,-136,422,111),8223=>array(71,482,431,729),8224=>array(28,-96,472,729),8225=>array(28,-96,472,729),8226=>array(150,227,440,516),8227=>array(150,188,479,555),8228=>array(102,-14,232,116),8229=>array(102,-14,565,116),8230=>array(102,-14,898,116),8240=>array(55,-14,1287,742),8241=>array(55,-14,1679,742),8242=>array(20,547,203,729),8243=>array(20,547,350,729),8244=>array(20,547,496,729),8245=>array(20,547,203,729),8246=>array(20,547,350,729),8247=>array(20,547,496,729),8248=>array(5,-236,333,-30),8249=>array(77,69,306,517),8250=>array(94,69,323,517),8252=>array(68,-14,459,729),8253=>array(68,-14,488,742),8254=>array(0,716,500,755),8258=>array(16,-28,984,814),8260=>array(-183,-14,350,742),8261=>array(86,-132,313,760),8262=>array(77,-132,304,760),8263=>array(34,-14,942,742),8264=>array(68,-14,686,742),8265=>array(68,-14,686,742),8267=>array(64,-96,559,729),8268=>array(105,220,395,509),8269=>array(105,220,395,509),8270=>array(16,-28,484,427),8271=>array(101,-136,301,434),8273=>array(16,-6,484,929),8274=>array(71,-93,418,729),8275=>array(49,233,951,394),8279=>array(20,547,643,729),8304=>array(25,319,375,742),8305=>array(23,326,187,738),8308=>array(26,326,370,734),8309=>array(33,319,362,734),8310=>array(20,319,371,742),8311=>array(39,326,372,734),8312=>array(26,319,375,742),8313=>array(25,319,376,742),8314=>array(67,326,461,677),8315=>array(67,479,461,524),8316=>array(67,424,461,580),8317=>array(50,239,201,751),8318=>array(44,239,196,751),8319=>array(22,326,382,625),8320=>array(25,-7,375,416),8321=>array(72,0,323,408),8322=>array(44,0,338,416),8323=>array(49,-7,350,416),8324=>array(26,0,370,408),8325=>array(33,-7,362,408),8326=>array(20,-7,371,416),8327=>array(39,0,372,408),8328=>array(26,-7,375,416),8329=>array(25,-7,376,416),8330=>array(67,0,461,351),8331=>array(67,153,461,198),8332=>array(67,98,461,253),8333=>array(50,-87,201,425),8334=>array(44,-87,196,425),8336=>array(31,-8,358,299),8337=>array(31,-8,341,299),8338=>array(31,-8,348,299),8339=>array(22,0,373,291),8340=>array(31,-8,341,299),8341=>array(22,0,382,425),8342=>array(18,0,386,425),8343=>array(22,0,192,425),8344=>array(23,0,580,299),8345=>array(22,0,382,299),8346=>array(18,-117,372,299),8347=>array(27,-8,291,299),8348=>array(18,-8,248,381),8358=>array(40,-14,625,729),8364=>array(-4,-14,555,742),8367=>array(13,-193,1044,723),8369=>array(55,0,670,729),8372=>array(40,-14,745,742),8373=>array(84,-147,555,760),8376=>array(10,0,657,729),8377=>array(46,0,589,729),8450=>array(42,-14,745,742),8451=>array(46,-14,1059,742),8457=>array(46,0,1005,742),8461=>array(47,0,900,729),8462=>array(48,0,553,760),8463=>array(48,0,552,760),8469=>array(44,0,874,729),8470=>array(37,-14,896,729),8473=>array(47,0,727,729),8474=>array(42,-180,828,742),8477=>array(47,0,837,729),8482=>array(118,447,826,729),8484=>array(37,0,694,729),8486=>array(61,0,769,742),8487=>array(61,-13,769,729),8490=>array(55,0,762,729),8491=>array(-6,0,732,928),8498=>array(42,0,639,729),8508=>array(34,0,698,519),8509=>array(24,-209,615,519),8510=>array(47,0,697,729),8511=>array(47,0,899,729),8512=>array(26,-192,688,719),8513=>array(80,-14,716,742),8514=>array(4,0,458,729),8515=>array(3,0,457,729),8516=>array(-2,0,613,729),8517=>array(-24,0,835,729),8518=>array(11,-14,677,760),8519=>array(33,-14,593,533),8520=>array(-40,0,336,760),8521=>array(-166,-222,353,760),8523=>array(47,-14,818,742),8526=>array(24,0,485,519),8528=>array(72,-14,940,742),8529=>array(72,-14,944,742),8530=>array(72,-14,1344,742),8531=>array(72,-14,918,742),8532=>array(44,-14,918,742),8533=>array(72,-14,930,742),8534=>array(44,-14,930,742),8535=>array(49,-14,930,742),8536=>array(26,-14,930,742),8537=>array(72,-14,939,742),8538=>array(33,-14,939,742),8539=>array(72,-14,942,742),8540=>array(49,-14,942,742),8541=>array(33,-14,942,742),8542=>array(39,-14,942,742),8543=>array(72,-14,751,742),8544=>array(55,0,340,729),8545=>array(55,0,535,729),8546=>array(55,0,730,729),8547=>array(55,0,981,729),8548=>array(-10,0,737,729),8549=>array(-10,0,926,729),8550=>array(-10,0,1121,729),8551=>array(-10,0,1316,729),8552=>array(55,0,927,729),8553=>array(6,0,707,729),8554=>array(6,0,877,729),8555=>array(6,0,1072,729),8556=>array(55,0,640,729),8557=>array(56,-14,705,742),8558=>array(55,0,744,729),8559=>array(50,0,973,729),8560=>array(36,0,297,736),8561=>array(36,0,617,736),8562=>array(36,0,937,736),8563=>array(36,0,882,736),8564=>array(-3,0,562,519),8565=>array(-3,0,862,736),8566=>array(-3,0,1182,736),8567=>array(-3,0,1501,736),8568=>array(36,0,872,736),8569=>array(12,0,552,519),8570=>array(12,0,861,736),8571=>array(12,0,1181,736),8572=>array(29,0,290,760),8573=>array(50,-14,514,533),8574=>array(50,-14,611,760),8575=>array(36,0,921,533),8576=>array(55,0,1148,729),8577=>array(55,0,744,729),8578=>array(55,0,1148,729),8579=>array(56,-14,705,742),8580=>array(50,-14,514,533),8581=>array(56,-208,705,742),8585=>array(25,-14,918,742),8592=>array(37,119,781,527),8593=>array(215,0,623,744),8594=>array(57,119,801,527),8595=>array(215,-20,623,724),8596=>array(37,119,801,527),8597=>array(215,-20,623,744),8598=>array(147,40,703,595),8599=>array(135,39,690,595),8600=>array(135,52,690,607),8601=>array(147,52,703,607),8602=>array(37,116,781,531),8603=>array(57,116,801,531),8604=>array(56,159,800,453),8605=>array(38,159,782,453),8606=>array(37,119,781,527),8607=>array(215,0,623,744),8608=>array(57,119,801,527),8609=>array(215,-20,623,724),8610=>array(37,119,784,527),8611=>array(54,119,801,527),8612=>array(37,119,781,527),8613=>array(215,0,623,744),8614=>array(57,119,801,527),8615=>array(215,-20,623,724),8616=>array(215,0,623,744),8617=>array(37,119,781,548),8618=>array(57,119,801,548),8619=>array(37,119,781,548),8620=>array(57,119,801,548),8621=>array(37,119,801,527),8622=>array(37,116,801,531),8623=>array(172,-13,688,730),8624=>array(232,0,593,744),8625=>array(245,0,605,744),8626=>array(232,-20,593,724),8627=>array(245,-20,605,724),8628=>array(130,102,728,609),8629=>array(159,53,667,650),8630=>array(44,145,769,540),8631=>array(69,145,794,540),8632=>array(132,40,706,717),8633=>array(57,-52,781,698),8634=>array(93,71,754,604),8635=>array(83,71,745,604),8636=>array(34,284,781,527),8637=>array(34,119,781,363),8638=>array(379,0,623,747),8639=>array(215,0,458,747),8640=>array(57,284,804,527),8641=>array(57,119,804,363),8642=>array(379,-23,623,724),8643=>array(215,-23,458,724),8644=>array(37,-52,801,698),8645=>array(44,-20,794,744),8646=>array(37,-52,801,698),8647=>array(37,-101,781,747),8648=>array(-5,0,843,744),8649=>array(57,-101,801,747),8650=>array(-5,-20,843,724),8651=>array(34,21,804,625),8652=>array(34,21,804,625),8653=>array(37,83,781,563),8654=>array(37,83,801,563),8655=>array(57,83,801,563),8656=>array(37,119,781,527),8657=>array(215,0,623,744),8658=>array(57,119,801,527),8659=>array(215,-20,623,724),8660=>array(37,119,801,527),8661=>array(215,-20,623,744),8662=>array(147,-21,763,595),8663=>array(75,-21,690,595),8664=>array(75,52,690,667),8665=>array(147,52,763,667),8666=>array(37,70,781,576),8667=>array(57,70,801,576),8668=>array(37,119,781,527),8669=>array(57,119,801,527),8670=>array(215,0,623,744),8671=>array(215,-20,623,724),8672=>array(37,119,781,527),8673=>array(215,0,623,744),8674=>array(57,119,801,527),8675=>array(215,-20,623,724),8676=>array(57,119,781,527),8677=>array(57,119,781,527),8678=>array(37,119,781,527),8679=>array(215,0,623,744),8680=>array(57,119,801,527),8681=>array(215,-20,623,724),8682=>array(215,0,623,744),8683=>array(192,0,646,744),8684=>array(192,0,646,744),8685=>array(192,0,646,744),8686=>array(215,0,623,744),8687=>array(192,0,646,744),8688=>array(57,96,801,550),8689=>array(82,0,767,689),8690=>array(71,0,756,689),8691=>array(215,-20,623,744),8692=>array(57,119,801,527),8693=>array(44,-20,794,744),8694=>array(57,-140,801,786),8695=>array(37,119,781,527),8696=>array(57,119,801,527),8697=>array(37,119,801,527),8698=>array(37,119,781,527),8699=>array(57,119,801,527),8700=>array(37,119,801,527),8701=>array(37,119,781,527),8702=>array(57,119,801,527),8703=>array(37,119,801,527),8704=>array(4,0,599,729),8706=>array(51,-12,469,647),8707=>array(61,0,464,729),8708=>array(61,-116,464,845),8710=>array(25,0,667,729),8711=>array(25,0,667,729),8712=>array(106,0,634,627),8713=>array(106,-132,634,759),8715=>array(106,0,634,627),8716=>array(106,-132,634,759),8719=>array(26,-192,769,719),8720=>array(26,-192,769,719),8721=>array(8,-192,701,719),8722=>array(106,274,732,353),8723=>array(106,0,732,627),8724=>array(106,0,732,659),8725=>array(0,-93,337,729),8727=>array(106,85,574,541),8728=>array(106,175,384,454),8729=>array(106,175,384,454),8730=>array(30,-20,637,811),8731=>array(30,-20,637,938),8732=>array(30,-20,637,929),8733=>array(108,108,569,491),8734=>array(108,108,726,491),8735=>array(138,99,700,661),8736=>array(138,99,700,661),8739=>array(106,-98,185,827),8740=>array(86,-98,392,827),8741=>array(106,-98,356,827),8742=>array(86,-98,547,827),8743=>array(128,0,604,584),8744=>array(128,0,604,584),8745=>array(105,0,732,627),8746=>array(105,-12,732,615),8747=>array(23,-181,497,757),8748=>array(23,-181,828,757),8749=>array(23,-181,1158,757),8760=>array(106,274,732,559),8761=>array(106,68,732,559),8762=>array(106,68,732,559),8763=>array(106,68,732,559),8764=>array(106,233,732,394),8765=>array(106,233,732,394),8770=>array(106,138,732,452),8771=>array(106,175,732,489),8776=>array(106,138,732,489),8784=>array(106,175,732,658),8785=>array(106,-31,732,658),8786=>array(106,-31,732,658),8787=>array(106,-31,732,658),8788=>array(106,149,927,478),8789=>array(106,149,927,478),8800=>array(106,19,732,608),8801=>array(106,93,732,534),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8834=>array(106,0,732,627),8835=>array(106,0,732,627),8836=>array(106,-132,732,759),8837=>array(106,-132,732,759),8838=>array(106,-73,732,700),8839=>array(106,-73,732,700),8844=>array(105,-12,732,615),8845=>array(105,-12,732,615),8846=>array(105,-12,732,615),8847=>array(106,0,740,627),8848=>array(106,0,740,627),8849=>array(106,-73,740,700),8850=>array(106,-73,740,700),8851=>array(105,0,732,635),8852=>array(105,0,732,635),8853=>array(105,0,732,627),8854=>array(105,0,732,627),8855=>array(105,0,732,627),8856=>array(105,0,732,627),8857=>array(105,0,732,627),8858=>array(105,0,732,627),8859=>array(105,0,732,627),8860=>array(105,0,732,627),8861=>array(105,0,732,627),8862=>array(105,0,732,627),8863=>array(105,0,732,627),8864=>array(105,0,732,627),8865=>array(105,0,732,627),8866=>array(106,0,754,729),8867=>array(106,0,754,729),8868=>array(106,0,834,688),8869=>array(106,0,834,688),8870=>array(106,0,461,729),8871=>array(106,0,461,729),8872=>array(106,0,754,729),8873=>array(106,0,754,729),8874=>array(106,0,754,729),8875=>array(106,0,925,729),8876=>array(106,-115,754,844),8877=>array(106,-115,754,844),8878=>array(106,-115,754,844),8879=>array(106,-115,925,844),8901=>array(106,282,236,412),8962=>array(71,0,692,596),8968=>array(86,-132,313,760),8969=>array(77,-132,304,760),8970=>array(86,-132,313,760),8971=>array(77,-132,304,760),8976=>array(106,140,732,421),8977=>array(3,126,510,634),8984=>array(121,0,879,759),8985=>array(106,140,732,421),8992=>array(210,-250,497,928),8993=>array(21,-237,307,942),8997=>array(84,0,916,723),9000=>array(59,0,1385,729),9085=>array(13,-228,906,101),9115=>array(86,-252,414,946),9116=>array(86,-252,181,942),9117=>array(86,-240,414,942),9118=>array(86,-252,414,946),9119=>array(319,-252,414,942),9120=>array(86,-240,414,942),9121=>array(86,-252,414,928),9122=>array(86,-252,181,942),9123=>array(86,-240,414,942),9124=>array(86,-252,414,928),9125=>array(319,-252,414,935),9126=>array(86,-240,414,935),9127=>array(330,-261,668,928),9128=>array(82,-252,420,940),9129=>array(330,-240,668,940),9130=>array(330,-256,420,943),9131=>array(82,-261,420,928),9132=>array(330,-252,668,940),9133=>array(82,-240,420,940),9134=>array(210,-250,307,942),9167=>array(91,0,854,596),9251=>array(71,-228,692,101),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,779,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-124,854,643),9633=>array(91,-124,854,643),9634=>array(91,-124,854,643),9635=>array(91,-124,854,643),9636=>array(91,-124,854,643),9637=>array(91,-124,854,643),9638=>array(91,-124,854,643),9639=>array(91,-124,854,643),9640=>array(91,-124,854,643),9641=>array(91,-124,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-124,766,643),9651=>array(3,-124,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-124,766,643),9655=>array(3,-124,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-124,766,643),9661=>array(3,-124,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-124,766,643),9665=>array(3,-124,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-124,766,643),9671=>array(3,-124,766,643),9672=>array(3,-124,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,385,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,385,260),9696=>array(55,260,818,645),9697=>array(55,-125,818,260),9698=>array(3,-124,766,643),9699=>array(3,-124,766,643),9700=>array(3,-124,766,643),9701=>array(3,-124,766,643),9702=>array(150,227,440,516),9703=>array(91,-124,854,643),9704=>array(91,-124,854,643),9705=>array(91,-124,854,643),9706=>array(91,-124,854,643),9707=>array(91,-124,854,643),9708=>array(3,-124,766,643),9709=>array(3,-124,766,643),9710=>array(3,-124,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-124,854,643),9713=>array(91,-124,854,643),9714=>array(91,-124,854,643),9715=>array(91,-124,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-124,766,643),9721=>array(3,-124,766,643),9722=>array(3,-124,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-124,766,643),9728=>array(83,0,813,729),9784=>array(80,3,817,721),9785=>array(83,0,813,730),9786=>array(83,0,813,730),9787=>array(83,0,813,730),9788=>array(83,0,813,730),9791=>array(85,-102,528,732),9792=>array(85,-125,646,731),9793=>array(85,-125,646,731),9794=>array(85,-5,831,729),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),10145=>array(57,119,801,527),10181=>array(54,-163,352,769),10182=>array(54,-163,352,769),10208=>array(3,-233,491,807),10216=>array(89,-132,310,759),10217=>array(80,-132,301,759),10224=>array(68,0,770,744),10225=>array(68,-20,770,724),10226=>array(49,53,774,613),10227=>array(63,53,789,613),10228=>array(57,10,996,637),10229=>array(37,119,1376,527),10230=>array(57,119,1396,527),10231=>array(37,119,1396,527),10232=>array(37,119,1376,527),10233=>array(57,119,1396,527),10234=>array(37,119,1396,527),10235=>array(37,119,1376,527),10236=>array(57,119,1396,527),10237=>array(37,119,1376,527),10238=>array(57,119,1396,527),10239=>array(57,119,1396,527),10241=>array(139,627,300,789),10242=>array(139,351,300,512),10243=>array(139,351,300,789),10244=>array(139,74,300,236),10245=>array(139,74,300,789),10246=>array(139,74,300,512),10247=>array(139,74,300,789),10248=>array(432,627,593,789),10249=>array(139,627,593,789),10250=>array(139,351,593,789),10251=>array(139,351,593,789),10252=>array(139,74,593,789),10253=>array(139,74,593,789),10254=>array(139,74,593,789),10255=>array(139,74,593,789),10256=>array(432,351,593,512),10257=>array(139,351,593,789),10258=>array(139,351,593,512),10259=>array(139,351,593,789),10260=>array(139,74,593,512),10261=>array(139,74,593,789),10262=>array(139,74,593,512),10263=>array(139,74,593,789),10264=>array(432,351,593,789),10265=>array(139,351,593,789),10266=>array(139,351,593,789),10267=>array(139,351,593,789),10268=>array(139,74,593,789),10269=>array(139,74,593,789),10270=>array(139,74,593,789),10271=>array(139,74,593,789),10272=>array(432,74,593,236),10273=>array(139,74,593,789),10274=>array(139,74,593,512),10275=>array(139,74,593,789),10276=>array(139,74,593,236),10277=>array(139,74,593,789),10278=>array(139,74,593,512),10279=>array(139,74,593,789),10280=>array(432,74,593,789),10281=>array(139,74,593,789),10282=>array(139,74,593,789),10283=>array(139,74,593,789),10284=>array(139,74,593,789),10285=>array(139,74,593,789),10286=>array(139,74,593,789),10287=>array(139,74,593,789),10288=>array(432,74,593,512),10289=>array(139,74,593,789),10290=>array(139,74,593,512),10291=>array(139,74,593,789),10292=>array(139,74,593,512),10293=>array(139,74,593,789),10294=>array(139,74,593,512),10295=>array(139,74,593,789),10296=>array(432,74,593,789),10297=>array(139,74,593,789),10298=>array(139,74,593,789),10299=>array(139,74,593,789),10300=>array(139,74,593,789),10301=>array(139,74,593,789),10302=>array(139,74,593,789),10303=>array(139,74,593,789),10304=>array(139,-203,300,-41),10305=>array(139,-203,300,789),10306=>array(139,-203,300,512),10307=>array(139,-203,300,789),10308=>array(139,-203,300,236),10309=>array(139,-203,300,789),10310=>array(139,-203,300,512),10311=>array(139,-203,300,789),10312=>array(139,-203,593,789),10313=>array(139,-203,593,789),10314=>array(139,-203,593,789),10315=>array(139,-203,593,789),10316=>array(139,-203,593,789),10317=>array(139,-203,593,789),10318=>array(139,-203,593,789),10319=>array(139,-203,593,789),10320=>array(139,-203,593,512),10321=>array(139,-203,593,789),10322=>array(139,-203,593,512),10323=>array(139,-203,593,789),10324=>array(139,-203,593,512),10325=>array(139,-203,593,789),10326=>array(139,-203,593,512),10327=>array(139,-203,593,789),10328=>array(139,-203,593,789),10329=>array(139,-203,593,789),10330=>array(139,-203,593,789),10331=>array(139,-203,593,789),10332=>array(139,-203,593,789),10333=>array(139,-203,593,789),10334=>array(139,-203,593,789),10335=>array(139,-203,593,789),10336=>array(139,-203,593,236),10337=>array(139,-203,593,789),10338=>array(139,-203,593,512),10339=>array(139,-203,593,789),10340=>array(139,-203,593,236),10341=>array(139,-203,593,789),10342=>array(139,-203,593,512),10343=>array(139,-203,593,789),10344=>array(139,-203,593,789),10345=>array(139,-203,593,789),10346=>array(139,-203,593,789),10347=>array(139,-203,593,789),10348=>array(139,-203,593,789),10349=>array(139,-203,593,789),10350=>array(139,-203,593,789),10351=>array(139,-203,593,789),10352=>array(139,-203,593,512),10353=>array(139,-203,593,789),10354=>array(139,-203,593,512),10355=>array(139,-203,593,789),10356=>array(139,-203,593,512),10357=>array(139,-203,593,789),10358=>array(139,-203,593,512),10359=>array(139,-203,593,789),10360=>array(139,-203,593,789),10361=>array(139,-203,593,789),10362=>array(139,-203,593,789),10363=>array(139,-203,593,789),10364=>array(139,-203,593,789),10365=>array(139,-203,593,789),10366=>array(139,-203,593,789),10367=>array(139,-203,593,789),10368=>array(432,-203,593,-41),10369=>array(139,-203,593,789),10370=>array(139,-203,593,512),10371=>array(139,-203,593,789),10372=>array(139,-203,593,236),10373=>array(139,-203,593,789),10374=>array(139,-203,593,512),10375=>array(139,-203,593,789),10376=>array(432,-203,593,789),10377=>array(139,-203,593,789),10378=>array(139,-203,593,789),10379=>array(139,-203,593,789),10380=>array(139,-203,593,789),10381=>array(139,-203,593,789),10382=>array(139,-203,593,789),10383=>array(139,-203,593,789),10384=>array(432,-203,593,512),10385=>array(139,-203,593,789),10386=>array(139,-203,593,512),10387=>array(139,-203,593,789),10388=>array(139,-203,593,512),10389=>array(139,-203,593,789),10390=>array(139,-203,593,512),10391=>array(139,-203,593,789),10392=>array(432,-203,593,789),10393=>array(139,-203,593,789),10394=>array(139,-203,593,789),10395=>array(139,-203,593,789),10396=>array(139,-203,593,789),10397=>array(139,-203,593,789),10398=>array(139,-203,593,789),10399=>array(139,-203,593,789),10400=>array(432,-203,593,236),10401=>array(139,-203,593,789),10402=>array(139,-203,593,512),10403=>array(139,-203,593,789),10404=>array(139,-203,593,236),10405=>array(139,-203,593,789),10406=>array(139,-203,593,512),10407=>array(139,-203,593,789),10408=>array(432,-203,593,789),10409=>array(139,-203,593,789),10410=>array(139,-203,593,789),10411=>array(139,-203,593,789),10412=>array(139,-203,593,789),10413=>array(139,-203,593,789),10414=>array(139,-203,593,789),10415=>array(139,-203,593,789),10416=>array(432,-203,593,512),10417=>array(139,-203,593,789),10418=>array(139,-203,593,512),10419=>array(139,-203,593,789),10420=>array(139,-203,593,512),10421=>array(139,-203,593,789),10422=>array(139,-203,593,512),10423=>array(139,-203,593,789),10424=>array(432,-203,593,789),10425=>array(139,-203,593,789),10426=>array(139,-203,593,789),10427=>array(139,-203,593,789),10428=>array(139,-203,593,789),10429=>array(139,-203,593,789),10430=>array(139,-203,593,789),10431=>array(139,-203,593,789),10432=>array(139,-203,593,-41),10433=>array(139,-203,593,789),10434=>array(139,-203,593,512),10435=>array(139,-203,593,789),10436=>array(139,-203,593,236),10437=>array(139,-203,593,789),10438=>array(139,-203,593,512),10439=>array(139,-203,593,789),10440=>array(139,-203,593,789),10441=>array(139,-203,593,789),10442=>array(139,-203,593,789),10443=>array(139,-203,593,789),10444=>array(139,-203,593,789),10445=>array(139,-203,593,789),10446=>array(139,-203,593,789),10447=>array(139,-203,593,789),10448=>array(139,-203,593,512),10449=>array(139,-203,593,789),10450=>array(139,-203,593,512),10451=>array(139,-203,593,789),10452=>array(139,-203,593,512),10453=>array(139,-203,593,789),10454=>array(139,-203,593,512),10455=>array(139,-203,593,789),10456=>array(139,-203,593,789),10457=>array(139,-203,593,789),10458=>array(139,-203,593,789),10459=>array(139,-203,593,789),10460=>array(139,-203,593,789),10461=>array(139,-203,593,789),10462=>array(139,-203,593,789),10463=>array(139,-203,593,789),10464=>array(139,-203,593,236),10465=>array(139,-203,593,789),10466=>array(139,-203,593,512),10467=>array(139,-203,593,789),10468=>array(139,-203,593,236),10469=>array(139,-203,593,789),10470=>array(139,-203,593,512),10471=>array(139,-203,593,789),10472=>array(139,-203,593,789),10473=>array(139,-203,593,789),10474=>array(139,-203,593,789),10475=>array(139,-203,593,789),10476=>array(139,-203,593,789),10477=>array(139,-203,593,789),10478=>array(139,-203,593,789),10479=>array(139,-203,593,789),10480=>array(139,-203,593,512),10481=>array(139,-203,593,789),10482=>array(139,-203,593,512),10483=>array(139,-203,593,789),10484=>array(139,-203,593,512),10485=>array(139,-203,593,789),10486=>array(139,-203,593,512),10487=>array(139,-203,593,789),10488=>array(139,-203,593,789),10489=>array(139,-203,593,789),10490=>array(139,-203,593,789),10491=>array(139,-203,593,789),10492=>array(139,-203,593,789),10493=>array(139,-203,593,789),10494=>array(139,-203,593,789),10495=>array(139,-203,593,789),10496=>array(57,119,801,527),10497=>array(57,119,801,527),10498=>array(37,119,781,527),10499=>array(57,119,801,527),10500=>array(37,119,801,527),10501=>array(57,119,801,527),10502=>array(37,119,781,527),10503=>array(57,119,801,527),10504=>array(215,-20,623,724),10505=>array(215,0,623,744),10506=>array(166,0,672,744),10507=>array(166,-20,672,724),10508=>array(37,119,781,527),10509=>array(57,119,801,527),10510=>array(37,119,781,527),10511=>array(57,119,801,527),10512=>array(54,119,801,527),10513=>array(54,119,801,527),10514=>array(215,0,623,724),10515=>array(215,0,623,724),10516=>array(54,119,801,527),10517=>array(54,119,801,527),10518=>array(54,119,801,527),10519=>array(54,119,801,527),10520=>array(54,119,801,527),10521=>array(57,119,784,527),10522=>array(54,119,781,527),10523=>array(57,119,784,527),10524=>array(54,119,781,527),10525=>array(37,119,781,527),10526=>array(57,119,801,527),10527=>array(37,119,781,527),10528=>array(57,119,801,527),10529=>array(147,51,691,595),10530=>array(147,51,690,595),10531=>array(147,-37,648,595),10532=>array(189,-38,690,595),10533=>array(189,52,690,684),10534=>array(147,52,648,684),10535=>array(135,40,703,595),10536=>array(135,40,691,607),10537=>array(135,52,703,607),10538=>array(147,40,703,607),10539=>array(135,40,703,607),10540=>array(135,40,703,607),10541=>array(135,40,691,607),10542=>array(135,40,691,607),10543=>array(135,40,703,607),10544=>array(135,40,703,607),10545=>array(135,40,703,595),10546=>array(135,40,703,595),10547=>array(37,119,801,527),10548=>array(146,98,706,610),10549=>array(147,90,707,602),10550=>array(159,70,671,629),10551=>array(167,70,679,629),10552=>array(292,-0,586,732),10553=>array(251,-0,545,732),10554=>array(56,197,789,491),10555=>array(51,156,784,450),10556=>array(49,82,782,491),10557=>array(56,0,789,491),10558=>array(145,30,678,609),10559=>array(160,30,693,609),10560=>array(139,53,699,778),10561=>array(139,53,699,778),10562=>array(37,-52,801,698),10563=>array(37,-52,801,698),10564=>array(37,-52,801,698),10565=>array(57,0,801,527),10566=>array(37,0,781,527),10567=>array(57,119,801,527),10568=>array(37,119,801,527),10569=>array(215,-10,623,744),10570=>array(34,119,804,527),10571=>array(34,119,804,527),10572=>array(215,-23,623,747),10573=>array(215,-23,623,747),10574=>array(34,284,804,527),10575=>array(379,-23,623,747),10576=>array(34,119,804,363),10577=>array(215,-23,458,747),10578=>array(57,131,781,527),10579=>array(57,131,781,527),10580=>array(227,0,623,724),10581=>array(227,0,623,724),10582=>array(57,119,781,515),10583=>array(57,119,781,515),10584=>array(215,0,611,724),10585=>array(215,0,611,724),10586=>array(34,131,781,527),10587=>array(57,131,804,527),10588=>array(227,0,623,747),10589=>array(227,-23,623,724),10590=>array(34,119,781,515),10591=>array(57,119,804,515),10592=>array(215,0,611,747),10593=>array(215,-23,611,724),10594=>array(34,21,781,625),10595=>array(117,0,721,747),10596=>array(57,21,804,625),10597=>array(117,-23,721,724),10598=>array(34,186,804,625),10599=>array(34,21,804,460),10600=>array(34,186,804,625),10601=>array(34,21,804,460),10602=>array(34,203,781,608),10603=>array(34,38,781,444),10604=>array(57,203,804,608),10605=>array(57,38,804,444),10606=>array(117,-23,721,747),10607=>array(117,-23,721,747),10608=>array(57,191,781,456),10609=>array(57,119,801,680),10610=>array(57,119,801,572),10611=>array(37,74,781,527),10612=>array(57,74,801,527),10613=>array(57,-71,801,527),10614=>array(37,-76,781,776),10615=>array(37,56,924,591),10616=>array(57,-76,801,776),10617=>array(57,-76,801,723),10618=>array(37,10,927,637),10619=>array(37,-76,781,723),10620=>array(169,21,682,625),10621=>array(156,21,669,625),10622=>array(117,67,721,580),10623=>array(117,59,721,571),10731=>array(3,-233,491,807),10764=>array(23,-181,1489,757),10765=>array(23,-181,497,757),10766=>array(23,-181,497,757),10799=>array(138,33,700,594),10858=>array(106,233,732,559),10859=>array(106,68,732,559),11008=>array(71,-28,690,591),11009=>array(148,-28,767,591),11010=>array(71,52,690,671),11011=>array(148,52,767,671),11012=>array(37,119,801,527),11013=>array(37,119,781,527),11014=>array(215,0,623,744),11015=>array(215,-20,623,724),11016=>array(71,-28,690,591),11017=>array(148,-28,767,591),11018=>array(71,52,690,671),11019=>array(148,52,767,671),11020=>array(37,119,801,527),11021=>array(215,-20,623,744),11022=>array(57,137,801,498),11023=>array(57,149,801,510),11024=>array(37,137,781,498),11025=>array(37,149,781,510),11026=>array(91,-124,854,643),11027=>array(91,-124,854,643),11028=>array(91,-124,854,643),11029=>array(91,-124,854,643),11030=>array(3,-124,766,643),11031=>array(3,-124,766,643),11032=>array(3,-124,766,643),11033=>array(3,-124,766,643),11034=>array(91,-124,854,643),11360=>array(50,0,640,729),11361=>array(18,0,303,760),11363=>array(50,0,637,729),11364=>array(55,-208,777,729),11367=>array(55,-157,817,729),11368=>array(36,-138,616,760),11369=>array(55,-157,762,729),11370=>array(29,-138,613,760),11371=>array(45,-157,656,729),11372=>array(40,-138,490,519),11373=>array(56,-14,738,742),11374=>array(50,-208,973,729),11375=>array(-6,0,732,729),11376=>array(56,-14,738,742),11377=>array(-3,0,663,530),11378=>array(5,0,1130,729),11379=>array(16,0,939,530),11381=>array(55,0,685,729),11382=>array(34,0,503,519),11383=>array(44,-15,656,521),11385=>array(36,-14,478,760),11386=>array(50,-14,552,533),11387=>array(57,0,524,519),11388=>array(22,-124,213,413),11389=>array(-6,326,464,734),11390=>array(84,-208,612,742),11391=>array(45,-208,695,729),11520=>array(59,-54,714,512),11521=>array(59,-221,576,512),11522=>array(9,-221,574,512),11523=>array(92,-1,590,760),11524=>array(55,-221,583,512),11525=>array(59,-220,903,512),11526=>array(59,0,697,760),11527=>array(59,0,902,511),11528=>array(68,0,559,512),11529=>array(59,-220,587,729),11530=>array(52,0,897,512),11531=>array(96,-1,605,760),11532=>array(59,0,587,760),11533=>array(59,-1,904,512),11534=>array(59,0,586,512),11535=>array(56,-221,807,760),11536=>array(59,0,902,760),11537=>array(59,0,586,760),11538=>array(59,-220,569,511),11539=>array(59,-224,901,636),11540=>array(85,-220,851,553),11541=>array(59,-221,805,760),11542=>array(59,0,585,512),11543=>array(59,-220,587,512),11544=>array(59,-221,586,512),11545=>array(82,-220,591,760),11546=>array(100,-220,629,512),11547=>array(85,0,607,760),11548=>array(101,-220,923,512),11549=>array(59,-220,623,512),11550=>array(90,-220,618,512),11551=>array(59,-221,793,515),11552=>array(63,0,908,512),11553=>array(59,-220,576,760),11554=>array(76,-2,559,578),11555=>array(59,-220,588,760),11556=>array(59,-220,690,512),11557=>array(96,-2,822,760),11800=>array(68,-13,488,743),11807=>array(106,68,732,394),11810=>array(86,403,313,760),11811=>array(77,403,304,760),11812=>array(86,-132,313,225),11813=>array(77,-132,304,225),11822=>array(68,-14,488,742),42564=>array(84,-14,612,742),42565=>array(56,-14,462,533),42566=>array(55,0,340,729),42567=>array(36,0,298,519),42576=>array(34,0,1049,729),42577=>array(29,0,852,519),42580=>array(65,-14,1138,742),42581=>array(45,-14,842,533),42582=>array(55,0,1149,729),42583=>array(29,-14,871,533),42760=>array(104,0,389,668),42761=>array(104,0,389,668),42762=>array(104,0,389,668),42763=>array(104,0,389,668),42764=>array(104,0,389,668),42765=>array(104,0,389,668),42766=>array(104,0,389,668),42767=>array(104,0,389,668),42768=>array(104,0,389,668),42769=>array(104,0,389,668),42770=>array(104,0,389,668),42771=>array(104,0,389,668),42772=>array(104,0,389,668),42773=>array(104,0,389,668),42774=>array(104,0,389,668),42779=>array(56,326,313,743),42780=>array(56,315,313,731),42781=>array(86,318,167,734),42782=>array(86,326,167,742),42783=>array(86,0,167,416),42790=>array(55,-208,817,729),42791=>array(36,-222,536,760),42792=>array(10,-224,814,729),42793=>array(29,-224,726,680),42794=>array(43,-14,538,742),42795=>array(50,-14,504,742),42796=>array(31,-14,524,729),42797=>array(31,-222,507,519),42798=>array(31,-92,604,729),42799=>array(31,-242,585,519),42800=>array(29,0,490,519),42801=>array(56,-14,462,533),42802=>array(-6,0,1205,729),42803=>array(50,-14,916,533),42804=>array(-6,-14,1170,742),42805=>array(50,-14,900,533),42806=>array(-17,-14,1104,729),42807=>array(50,-14,897,533),42808=>array(-6,0,983,729),42809=>array(50,-14,781,533),42810=>array(-6,0,983,729),42811=>array(50,-14,781,533),42812=>array(-6,-208,977,729),42813=>array(50,-222,821,533),42814=>array(56,-14,705,742),42815=>array(50,-14,514,533),42816=>array(49,0,762,729),42817=>array(24,0,613,760),42822=>array(55,0,763,729),42823=>array(29,0,404,760),42826=>array(-5,-14,937,742),42827=>array(-5,-14,716,533),42830=>array(56,-14,1360,742),42831=>array(50,-14,949,533),42856=>array(55,-208,652,729),42857=>array(29,-208,555,519),42875=>array(54,-208,570,743),42876=>array(36,-208,478,533),42880=>array(24,0,609,729),42881=>array(29,-240,290,519),42882=>array(54,-208,792,743),42883=>array(36,-208,623,533),42884=>array(54,-208,570,743),42885=>array(36,-208,478,533),42886=>array(32,-14,715,729),42887=>array(25,-14,524,519),42891=>array(138,205,264,729),42892=>array(98,458,176,729),42893=>array(10,0,722,729),42896=>array(49,-157,831,729),42897=>array(36,-138,617,533),42922=>array(-94,0,817,729),43002=>array(36,0,921,519),43003=>array(42,0,639,729),43004=>array(36,0,618,729),43005=>array(50,0,973,729),43006=>array(55,0,340,928),43007=>array(-6,0,1198,729),62464=>array(53,-20,601,848),62465=>array(59,-20,606,847),62466=>array(54,-20,660,846),62467=>array(62,-19,885,847),62468=>array(53,-20,589,847),62469=>array(53,-20,601,848),62470=>array(26,-20,665,847),62471=>array(63,-19,923,846),62472=>array(59,-20,606,847),62473=>array(59,-20,606,847),62474=>array(66,-20,1190,847),62475=>array(59,-20,607,847),62476=>array(75,-20,624,848),62477=>array(63,-125,890,847),62478=>array(59,-20,606,847),62479=>array(59,-20,606,848),62480=>array(63,-20,936,837),62481=>array(4,-20,686,847),62482=>array(60,-20,738,847),62483=>array(32,-20,671,847),62484=>array(62,-20,882,847),62485=>array(59,-20,606,834),62486=>array(62,-20,874,846),62487=>array(59,-20,605,846),62488=>array(25,-20,612,847),62489=>array(75,-20,624,847),62490=>array(60,-20,669,841),62491=>array(59,-20,606,847),62492=>array(76,-20,663,847),62493=>array(59,-20,607,852),62494=>array(4,-20,669,847),62495=>array(57,-29,829,845),62496=>array(59,-20,606,851),62497=>array(59,-20,646,847),62498=>array(59,-60,606,847),62499=>array(59,-20,606,859),62500=>array(59,-20,606,847),62501=>array(59,-20,663,847),62502=>array(63,-19,898,847),62504=>array(82,-220,817,760),63173=>array(50,-14,552,747),63185=>array(61,625,439,775),63188=>array(97,670,403,800),64256=>array(36,-0,771,760),64257=>array(36,0,644,760),64258=>array(36,0,637,760),64259=>array(35,0,1005,760),64260=>array(34,0,996,760),64261=>array(39,-15,733,760),64262=>array(49,-14,884,737),65533=>array(15,-84,1011,912),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>318,33=>402,34=>460,35=>838,36=>636,37=>950,38=>890,39=>275,40=>390,41=>390,42=>500,43=>838,44=>318,45=>338,46=>318,47=>337,48=>636,49=>636,50=>636,51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838,61=>838,62=>838,63=>536,64=>1000,65=>722,66=>735,67=>765,68=>802,69=>730,70=>694,71=>799,72=>872,73=>395,74=>401,75=>747,76=>664,77=>1024,78=>875,79=>820,80=>673,81=>820,82=>753,83=>685,84=>667,85=>843,86=>722,87=>1028,88=>712,89=>660,90=>695,91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>596,98=>640,99=>560,100=>640,101=>592,102=>370,103=>640,104=>644,105=>320,106=>310,107=>606,108=>320,109=>948,110=>644,111=>602,112=>640,113=>640,114=>478,115=>513,116=>402,117=>644,118=>565,119=>856,120=>564,121=>565,122=>527,123=>636,124=>337,125=>636,126=>838,160=>318,161=>402,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500,169=>1000,170=>475,171=>612,172=>838,173=>338,174=>1000,175=>500,176=>500,177=>838,178=>401,179=>401,180=>500,181=>650,182=>636,183=>318,184=>500,185=>401,186=>470,187=>612,188=>969,189=>969,190=>969,191=>536,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1001,199=>765,200=>730,201=>730,202=>730,203=>730,204=>395,205=>395,206=>395,207=>395,208=>807,209=>875,210=>820,211=>820,212=>820,213=>820,214=>820,215=>838,216=>820,217=>843,218=>843,219=>843,220=>843,221=>660,222=>676,223=>668,224=>596,225=>596,226=>596,227=>596,228=>596,229=>596,230=>940,231=>560,232=>592,233=>592,234=>592,235=>592,236=>320,237=>320,238=>320,239=>320,240=>602,241=>644,242=>602,243=>602,244=>602,245=>602,246=>602,247=>838,248=>602,249=>644,250=>644,251=>644,252=>644,253=>565,254=>640,255=>565,256=>722,257=>596,258=>722,259=>596,260=>722,261=>596,262=>765,263=>560,264=>765,265=>560,266=>765,267=>560,268=>765,269=>560,270=>802,271=>640,272=>807,273=>640,274=>730,275=>592,276=>730,277=>592,278=>730,279=>592,280=>730,281=>592,282=>730,283=>592,284=>799,285=>640,286=>799,287=>640,288=>799,289=>640,290=>799,291=>640,292=>872,293=>644,294=>872,295=>644,296=>395,297=>320,298=>395,299=>320,300=>395,301=>320,302=>395,303=>320,304=>395,305=>320,306=>801,307=>533,308=>401,309=>310,310=>747,311=>606,312=>606,313=>664,314=>320,315=>664,316=>320,317=>664,318=>320,319=>664,320=>320,321=>669,322=>324,323=>875,324=>644,325=>875,326=>644,327=>875,328=>644,329=>866,330=>843,331=>644,332=>820,333=>602,334=>820,335=>602,336=>820,337=>602,338=>1137,339=>989,340=>753,341=>478,342=>753,343=>478,344=>753,345=>478,346=>685,347=>513,348=>685,349=>513,350=>685,351=>513,352=>685,353=>513,354=>667,355=>402,356=>667,357=>402,358=>667,359=>402,360=>843,361=>644,362=>843,363=>644,364=>843,365=>644,366=>843,367=>644,368=>843,369=>644,370=>843,371=>644,372=>1028,373=>856,374=>660,375=>565,376=>660,377=>695,378=>527,379=>695,380=>527,381=>695,382=>527,383=>370,384=>640,385=>735,386=>735,387=>640,388=>735,389=>640,390=>765,391=>765,392=>560,393=>807,394=>802,395=>735,396=>640,397=>602,398=>730,399=>820,400=>623,401=>694,402=>370,403=>799,404=>712,405=>932,406=>395,407=>395,408=>747,409=>606,410=>320,411=>634,412=>948,413=>875,414=>644,415=>820,416=>820,417=>602,418=>1040,419=>807,420=>673,421=>640,422=>753,423=>685,424=>513,425=>707,426=>324,427=>402,428=>667,429=>402,430=>667,431=>843,432=>644,433=>829,434=>760,435=>738,436=>663,437=>695,438=>527,439=>564,440=>564,441=>564,442=>564,443=>636,444=>687,445=>564,446=>536,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1497,453=>1329,454=>1167,455=>1065,456=>974,457=>630,458=>1276,459=>1185,460=>954,461=>722,462=>596,463=>395,464=>320,465=>820,466=>602,467=>843,468=>644,469=>843,470=>644,471=>843,472=>644,473=>843,474=>644,475=>843,476=>644,477=>592,478=>722,479=>596,480=>722,481=>596,482=>1001,483=>940,484=>848,485=>640,486=>799,487=>640,488=>747,489=>606,490=>820,491=>602,492=>820,493=>602,494=>564,495=>564,496=>320,497=>1497,498=>1329,499=>1167,500=>799,501=>640,502=>1154,503=>707,504=>875,505=>644,506=>722,507=>596,508=>1001,509=>940,510=>820,511=>602,512=>722,513=>596,514=>722,515=>596,516=>730,517=>592,518=>730,519=>592,520=>395,521=>320,522=>395,523=>320,524=>820,525=>602,526=>820,527=>602,528=>753,529=>478,530=>753,531=>478,532=>843,533=>644,534=>843,535=>644,536=>685,537=>513,538=>667,539=>402,540=>627,541=>521,542=>872,543=>644,544=>843,545=>814,546=>572,547=>552,548=>695,549=>527,550=>722,551=>596,552=>730,553=>592,554=>820,555=>602,556=>820,557=>602,558=>820,559=>602,560=>820,561=>602,562=>660,563=>565,564=>500,565=>832,566=>494,567=>310,568=>960,569=>960,570=>722,571=>765,572=>560,573=>664,574=>667,575=>513,576=>527,577=>583,578=>464,579=>735,580=>843,581=>722,582=>730,583=>592,584=>401,585=>315,586=>782,587=>640,588=>753,589=>478,590=>660,591=>565,592=>596,593=>640,594=>640,595=>640,596=>560,597=>560,598=>647,599=>683,600=>592,601=>592,602=>843,603=>518,604=>509,605=>773,606=>613,607=>315,608=>683,609=>640,610=>544,611=>599,612=>564,613=>644,614=>644,615=>644,616=>320,617=>392,618=>320,619=>380,620=>454,621=>363,622=>704,623=>948,624=>948,625=>948,626=>644,627=>694,628=>646,629=>602,630=>790,631=>647,632=>602,633=>501,634=>501,635=>551,636=>478,637=>478,638=>453,639=>453,640=>594,641=>594,642=>513,643=>271,644=>370,645=>487,646=>324,647=>402,648=>402,649=>644,650=>620,651=>608,652=>565,653=>856,654=>565,655=>655,656=>597,657=>560,658=>564,659=>560,660=>536,661=>536,662=>536,663=>513,664=>820,665=>563,666=>613,667=>654,668=>667,669=>366,670=>606,671=>543,672=>683,673=>536,674=>536,675=>996,676=>1033,677=>998,678=>823,679=>598,680=>825,681=>894,682=>725,683=>676,684=>598,685=>443,686=>781,687=>767,688=>433,689=>430,690=>264,691=>347,692=>347,693=>430,694=>392,695=>585,696=>423,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>280,705=>281,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>275,713=>500,714=>500,715=>500,716=>275,717=>500,720=>337,721=>337,722=>307,723=>307,726=>329,727=>329,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>417,736=>377,737=>243,738=>337,739=>424,740=>281,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500,750=>484,751=>500,752=>500,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>740,881=>531,882=>667,883=>553,884=>278,885=>278,886=>875,887=>667,890=>500,891=>560,892=>560,893=>560,894=>337,900=>500,901=>500,902=>722,903=>318,904=>900,905=>1039,906=>562,908=>835,910=>897,911=>853,912=>392,913=>722,914=>735,915=>694,916=>722,917=>730,918=>695,919=>872,920=>820,921=>395,922=>747,923=>722,924=>1024,925=>875,926=>704,927=>820,928=>872,929=>673,931=>707,932=>667,933=>660,934=>820,935=>712,936=>877,937=>829,938=>395,939=>660,940=>675,941=>518,942=>599,943=>392,944=>608,945=>675,946=>578,947=>598,948=>602,949=>518,950=>542,951=>599,952=>602,953=>392,954=>625,955=>634,956=>650,957=>608,958=>551,959=>602,960=>657,961=>588,962=>560,963=>683,964=>553,965=>608,966=>700,967=>606,968=>784,969=>815,970=>392,971=>608,972=>602,973=>608,974=>815,975=>747,976=>583,977=>715,978=>687,979=>874,980=>687,981=>682,982=>815,983=>624,984=>820,985=>602,986=>765,987=>560,988=>694,989=>463,990=>590,991=>660,992=>782,993=>577,1008=>624,1009=>588,1010=>560,1011=>310,1012=>820,1013=>560,1014=>560,1015=>676,1016=>640,1017=>765,1018=>1024,1019=>708,1020=>588,1021=>765,1022=>765,1023=>765,1024=>730,1025=>730,1026=>799,1027=>662,1028=>765,1029=>685,1030=>395,1031=>395,1032=>401,1033=>1084,1034=>1118,1035=>872,1036=>774,1037=>872,1038=>723,1039=>872,1040=>757,1041=>735,1042=>735,1043=>662,1044=>813,1045=>730,1046=>1124,1047=>623,1048=>872,1049=>872,1050=>774,1051=>834,1052=>1024,1053=>872,1054=>820,1055=>872,1056=>673,1057=>765,1058=>667,1059=>723,1060=>830,1061=>712,1062=>872,1063=>773,1064=>1141,1065=>1141,1066=>794,1067=>984,1068=>674,1069=>765,1070=>1193,1071=>808,1072=>596,1073=>602,1074=>563,1075=>524,1076=>616,1077=>592,1078=>920,1079=>545,1080=>667,1081=>667,1082=>625,1083=>635,1084=>778,1085=>667,1086=>602,1087=>667,1088=>640,1089=>560,1090=>553,1091=>588,1092=>783,1093=>564,1094=>643,1095=>661,1096=>930,1097=>930,1098=>636,1099=>796,1100=>544,1101=>560,1102=>871,1103=>631,1104=>592,1105=>592,1106=>624,1107=>524,1108=>560,1109=>513,1110=>320,1111=>320,1112=>310,1113=>843,1114=>860,1115=>644,1116=>625,1117=>667,1118=>588,1119=>656,1122=>762,1123=>603,1124=>1129,1125=>834,1130=>1124,1131=>920,1132=>1359,1133=>1113,1136=>944,1137=>902,1138=>820,1139=>552,1140=>859,1141=>678,1142=>859,1143=>678,1164=>707,1165=>544,1168=>672,1169=>529,1170=>662,1171=>523,1172=>728,1173=>614,1174=>1124,1175=>920,1176=>636,1177=>537,1178=>774,1179=>606,1182=>774,1183=>625,1184=>891,1185=>717,1186=>872,1187=>641,1188=>1139,1189=>852,1190=>1205,1191=>941,1194=>765,1195=>560,1196=>667,1197=>553,1198=>660,1199=>565,1200=>660,1201=>565,1202=>712,1203=>564,1204=>952,1205=>732,1206=>749,1207=>690,1210=>749,1211=>644,1216=>395,1217=>1124,1218=>920,1219=>747,1220=>606,1223=>872,1224=>667,1227=>749,1228=>667,1231=>320,1232=>757,1233=>596,1234=>757,1235=>596,1236=>1001,1237=>940,1238=>730,1239=>592,1240=>820,1241=>592,1242=>820,1243=>592,1244=>1124,1245=>920,1246=>623,1247=>545,1248=>564,1249=>564,1250=>872,1251=>667,1252=>872,1253=>667,1254=>820,1255=>602,1256=>820,1257=>602,1258=>820,1259=>602,1260=>765,1261=>560,1262=>723,1263=>588,1264=>723,1265=>588,1266=>723,1267=>588,1268=>773,1269=>661,1270=>662,1271=>524,1272=>984,1273=>796,1296=>623,1297=>545,1298=>834,1299=>635,1300=>1198,1301=>919,1306=>820,1307=>640,1308=>1028,1309=>856,1329=>810,1330=>811,1331=>826,1332=>847,1333=>806,1334=>826,1335=>761,1336=>811,1337=>968,1338=>816,1339=>772,1340=>682,1341=>1097,1342=>845,1343=>804,1344=>719,1345=>810,1346=>833,1347=>843,1348=>897,1349=>763,1350=>794,1351=>754,1352=>799,1353=>797,1354=>875,1355=>830,1356=>884,1357=>799,1358=>802,1359=>731,1360=>774,1361=>749,1362=>633,1363=>845,1364=>843,1365=>835,1366=>821,1369=>307,1370=>264,1371=>229,1372=>391,1373=>364,1374=>386,1375=>500,1377=>949,1378=>618,1379=>695,1380=>695,1381=>628,1382=>688,1383=>510,1384=>636,1385=>791,1386=>671,1387=>635,1388=>305,1389=>973,1390=>614,1391=>628,1392=>636,1393=>630,1394=>636,1395=>654,1396=>644,1397=>309,1398=>636,1399=>461,1400=>649,1401=>365,1402=>940,1403=>562,1404=>657,1405=>644,1406=>630,1407=>930,1408=>644,1409=>643,1410=>483,1411=>930,1412=>636,1413=>609,1414=>809,1415=>789,1417=>340,1418=>334,4256=>723,4257=>850,4258=>828,4259=>859,4260=>733,4261=>981,4262=>916,4263=>1101,4264=>566,4265=>750,4266=>962,4267=>941,4268=>743,4269=>1075,4270=>896,4271=>829,4272=>1040,4273=>733,4274=>669,4275=>1015,4276=>937,4277=>1020,4278=>731,4279=>733,4280=>732,4281=>733,4282=>879,4283=>937,4284=>714,4285=>755,4286=>733,4287=>958,4288=>1000,4289=>702,4290=>864,4291=>734,4292=>837,4293=>951,4304=>541,4305=>571,4306=>589,4307=>833,4308=>561,4309=>557,4310=>618,4311=>861,4312=>560,4313=>546,4314=>1066,4315=>586,4316=>586,4317=>825,4318=>570,4319=>581,4320=>824,4321=>607,4322=>748,4323=>698,4324=>815,4325=>585,4326=>858,4327=>568,4328=>594,4329=>586,4330=>675,4331=>587,4332=>582,4333=>576,4334=>612,4335=>683,4336=>572,4337=>603,4338=>571,4339=>572,4340=>570,4341=>649,4342=>886,4343=>626,4344=>582,4345=>619,4346=>571,4347=>437,4348=>354,7424=>565,7425=>774,7426=>940,7427=>563,7428=>560,7429=>585,7430=>585,7431=>553,7432=>509,7433=>320,7434=>499,7435=>625,7436=>543,7437=>778,7438=>667,7439=>602,7440=>560,7441=>647,7442=>647,7443=>647,7444=>989,7445=>512,7446=>602,7447=>602,7448=>553,7449=>594,7450=>594,7451=>553,7452=>585,7453=>664,7454=>923,7455=>655,7456=>565,7457=>856,7458=>527,7459=>527,7460=>531,7461=>743,7462=>524,7463=>565,7464=>657,7465=>553,7466=>703,7467=>635,7468=>455,7469=>630,7470=>463,7471=>463,7472=>505,7473=>459,7474=>459,7475=>503,7476=>549,7477=>249,7478=>252,7479=>470,7480=>418,7481=>645,7482=>551,7483=>551,7484=>516,7485=>369,7486=>424,7487=>474,7488=>420,7489=>531,7490=>647,7491=>386,7492=>386,7493=>400,7494=>618,7495=>400,7496=>400,7497=>387,7498=>387,7499=>340,7500=>340,7501=>400,7502=>175,7503=>365,7504=>613,7505=>399,7506=>385,7507=>346,7508=>385,7509=>385,7510=>400,7511=>247,7512=>399,7513=>418,7514=>613,7515=>373,7516=>468,7517=>364,7518=>376,7519=>379,7520=>441,7521=>381,7522=>201,7523=>347,7524=>399,7525=>373,7526=>364,7527=>376,7528=>370,7529=>441,7530=>381,7531=>974,7543=>640,7544=>549,7547=>320,7548=>392,7549=>640,7550=>585,7551=>620,7557=>320,7579=>400,7580=>346,7581=>346,7582=>385,7583=>340,7584=>222,7585=>229,7586=>400,7587=>399,7588=>234,7589=>244,7590=>234,7591=>234,7592=>230,7593=>175,7594=>175,7595=>367,7596=>613,7597=>613,7598=>407,7599=>404,7600=>399,7601=>385,7602=>385,7603=>328,7604=>211,7605=>247,7606=>399,7607=>389,7608=>368,7609=>376,7610=>373,7611=>331,7612=>331,7613=>331,7614=>364,7615=>385,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>722,7681=>596,7682=>735,7683=>640,7684=>735,7685=>640,7686=>735,7687=>640,7688=>765,7689=>560,7690=>802,7691=>640,7692=>802,7693=>640,7694=>802,7695=>640,7696=>802,7697=>640,7698=>802,7699=>640,7700=>730,7701=>592,7702=>730,7703=>592,7704=>730,7705=>592,7706=>730,7707=>592,7708=>730,7709=>592,7710=>694,7711=>370,7712=>799,7713=>640,7714=>872,7715=>644,7716=>872,7717=>644,7718=>872,7719=>644,7720=>872,7721=>644,7722=>872,7723=>644,7724=>395,7725=>320,7726=>395,7727=>320,7728=>747,7729=>606,7730=>747,7731=>606,7732=>747,7733=>606,7734=>664,7735=>320,7736=>664,7737=>320,7738=>664,7739=>320,7740=>664,7741=>320,7742=>1024,7743=>948,7744=>1024,7745=>948,7746=>1024,7747=>948,7748=>875,7749=>644,7750=>875,7751=>644,7752=>875,7753=>644,7754=>875,7755=>644,7756=>820,7757=>602,7758=>820,7759=>602,7760=>820,7761=>602,7762=>820,7763=>602,7764=>673,7765=>640,7766=>673,7767=>640,7768=>753,7769=>478,7770=>753,7771=>478,7772=>753,7773=>478,7774=>753,7775=>478,7776=>685,7777=>513,7778=>685,7779=>513,7780=>685,7781=>513,7782=>685,7783=>521,7784=>685,7785=>513,7786=>667,7787=>402,7788=>667,7789=>402,7790=>667,7791=>402,7792=>667,7793=>402,7794=>843,7795=>644,7796=>843,7797=>644,7798=>843,7799=>644,7800=>843,7801=>644,7802=>843,7803=>644,7804=>722,7805=>565,7806=>722,7807=>565,7808=>1028,7809=>856,7810=>1028,7811=>856,7812=>1028,7813=>856,7814=>1028,7815=>856,7816=>1028,7817=>856,7818=>712,7819=>564,7820=>712,7821=>564,7822=>660,7823=>565,7824=>695,7825=>527,7826=>695,7827=>527,7828=>695,7829=>527,7830=>644,7831=>402,7832=>856,7833=>565,7834=>903,7835=>370,7836=>370,7837=>370,7838=>829,7839=>602,7840=>722,7841=>596,7842=>722,7843=>596,7844=>722,7845=>613,7846=>722,7847=>613,7848=>722,7849=>613,7850=>722,7851=>613,7852=>722,7853=>596,7854=>722,7855=>596,7856=>722,7857=>596,7858=>722,7859=>596,7860=>722,7861=>596,7862=>722,7863=>596,7864=>730,7865=>592,7866=>730,7867=>592,7868=>730,7869=>592,7870=>730,7871=>615,7872=>730,7873=>615,7874=>730,7875=>615,7876=>730,7877=>615,7878=>730,7879=>592,7880=>395,7881=>320,7882=>395,7883=>320,7884=>820,7885=>602,7886=>820,7887=>602,7888=>820,7889=>612,7890=>820,7891=>612,7892=>820,7893=>612,7894=>820,7895=>612,7896=>820,7897=>602,7898=>820,7899=>602,7900=>820,7901=>602,7902=>820,7903=>602,7904=>820,7905=>602,7906=>820,7907=>602,7908=>843,7909=>644,7910=>843,7911=>644,7912=>843,7913=>644,7914=>843,7915=>644,7916=>843,7917=>644,7918=>843,7919=>644,7920=>843,7921=>644,7922=>660,7923=>565,7924=>660,7925=>565,7926=>660,7927=>565,7928=>660,7929=>565,7930=>949,7931=>581,7936=>675,7937=>675,7938=>675,7939=>675,7940=>675,7941=>675,7942=>675,7943=>675,7944=>722,7945=>722,7946=>869,7947=>869,7948=>734,7949=>763,7950=>722,7951=>722,7952=>537,7953=>537,7954=>537,7955=>537,7956=>537,7957=>537,7960=>853,7961=>841,7962=>1067,7963=>1077,7964=>1008,7965=>1035,7968=>599,7969=>599,7970=>599,7971=>599,7972=>599,7973=>599,7974=>599,7975=>599,7976=>998,7977=>992,7978=>1212,7979=>1224,7980=>1159,7981=>1183,7982=>1098,7983=>1095,7984=>392,7985=>392,7986=>392,7987=>392,7988=>392,7989=>392,7990=>392,7991=>392,7992=>521,7993=>512,7994=>735,7995=>738,7996=>679,7997=>706,7998=>624,7999=>615,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>820,8009=>859,8010=>1120,8011=>1127,8012=>937,8013=>964,8016=>608,8017=>608,8018=>608,8019=>608,8020=>608,8021=>608,8022=>608,8023=>608,8025=>851,8027=>1079,8029=>1044,8031=>953,8032=>815,8033=>815,8034=>815,8035=>815,8036=>815,8037=>815,8038=>815,8039=>815,8040=>829,8041=>870,8042=>1131,8043=>1137,8044=>946,8045=>976,8046=>938,8047=>970,8048=>675,8049=>675,8050=>537,8051=>537,8052=>599,8053=>599,8054=>392,8055=>392,8056=>602,8057=>602,8058=>608,8059=>608,8060=>815,8061=>815,8064=>675,8065=>675,8066=>675,8067=>675,8068=>675,8069=>675,8070=>675,8071=>675,8072=>722,8073=>722,8074=>869,8075=>869,8076=>734,8077=>763,8078=>722,8079=>722,8080=>599,8081=>599,8082=>599,8083=>599,8084=>599,8085=>599,8086=>599,8087=>599,8088=>998,8089=>992,8090=>1212,8091=>1224,8092=>1159,8093=>1183,8094=>1098,8095=>1095,8096=>815,8097=>815,8098=>815,8099=>815,8100=>815,8101=>815,8102=>815,8103=>815,8104=>829,8105=>870,8106=>1131,8107=>1137,8108=>946,8109=>976,8110=>938,8111=>970,8112=>675,8113=>675,8114=>675,8115=>675,8116=>675,8118=>675,8119=>675,8120=>722,8121=>722,8122=>722,8123=>722,8124=>722,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>599,8131=>599,8132=>599,8134=>599,8135=>599,8136=>912,8137=>900,8138=>1063,8139=>1039,8140=>872,8141=>500,8142=>500,8143=>500,8144=>392,8145=>392,8146=>392,8147=>392,8150=>392,8151=>392,8152=>395,8153=>395,8154=>588,8155=>562,8157=>500,8158=>500,8159=>500,8160=>608,8161=>608,8162=>608,8163=>608,8164=>588,8165=>588,8166=>608,8167=>608,8168=>660,8169=>660,8170=>921,8171=>897,8172=>790,8173=>500,8174=>500,8175=>500,8178=>815,8179=>815,8180=>815,8182=>815,8183=>815,8184=>961,8185=>835,8186=>984,8187=>853,8188=>829,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>338,8209=>338,8210=>636,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>318,8217=>318,8218=>318,8219=>318,8220=>511,8221=>511,8222=>518,8223=>511,8224=>500,8225=>500,8226=>590,8227=>590,8228=>334,8229=>667,8230=>1000,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1342,8241=>1734,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8249=>400,8250=>400,8252=>527,8253=>536,8254=>500,8258=>1000,8260=>167,8261=>390,8262=>390,8263=>976,8264=>753,8265=>753,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8273=>500,8274=>450,8275=>1000,8279=>663,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>201,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>433,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>386,8337=>387,8338=>385,8339=>424,8340=>387,8341=>433,8342=>365,8343=>243,8344=>613,8345=>433,8346=>400,8347=>337,8348=>247,8358=>660,8364=>636,8367=>1057,8369=>706,8372=>780,8373=>636,8376=>667,8377=>636,8450=>796,8451=>1119,8457=>1047,8461=>945,8462=>644,8463=>644,8469=>914,8470=>946,8473=>752,8474=>871,8477=>831,8482=>1000,8484=>730,8486=>829,8487=>829,8490=>747,8491=>722,8498=>694,8508=>732,8509=>660,8510=>710,8511=>944,8512=>714,8513=>775,8514=>557,8515=>557,8516=>611,8517=>867,8518=>699,8519=>636,8520=>380,8521=>362,8523=>890,8526=>514,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>395,8545=>590,8546=>786,8547=>966,8548=>722,8549=>981,8550=>1176,8551=>1372,8552=>932,8553=>712,8554=>932,8555=>1127,8556=>664,8557=>765,8558=>802,8559=>1024,8560=>320,8561=>640,8562=>959,8563=>885,8564=>565,8565=>885,8566=>1205,8567=>1524,8568=>884,8569=>564,8570=>884,8571=>1204,8572=>320,8573=>560,8574=>640,8575=>948,8576=>1206,8577=>802,8578=>1206,8579=>765,8580=>560,8581=>765,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>604,8706=>517,8707=>542,8708=>542,8710=>698,8711=>698,8712=>740,8713=>740,8715=>740,8716=>740,8719=>796,8720=>796,8721=>714,8722=>838,8723=>838,8724=>838,8725=>337,8727=>680,8728=>490,8729=>490,8730=>637,8731=>637,8732=>637,8733=>677,8734=>833,8735=>838,8736=>838,8739=>291,8740=>479,8741=>462,8742=>634,8743=>732,8744=>732,8745=>838,8746=>838,8747=>521,8748=>852,8749=>1182,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1033,8789=>1033,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>846,8848=>846,8849=>846,8850=>846,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>860,8867=>860,8868=>940,8869=>940,8870=>567,8871=>567,8872=>860,8873=>860,8874=>860,8875=>1031,8876=>860,8877=>860,8878=>860,8879=>1031,8901=>342,8962=>764,8968=>390,8969=>390,8970=>390,8971=>390,8976=>838,8977=>513,8984=>1000,8985=>838,8992=>521,8993=>521,8997=>1000,9000=>1443,9085=>919,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9167=>945,9251=>764,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838,10181=>390,10182=>390,10208=>494,10216=>390,10217=>390,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>981,10616=>838,10617=>838,10618=>984,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1513,10765=>521,10766=>521,10799=>838,10858=>838,10859=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11360=>664,11361=>320,11363=>673,11364=>753,11367=>872,11368=>644,11369=>747,11370=>606,11371=>695,11372=>527,11373=>782,11374=>1024,11375=>722,11376=>782,11377=>663,11378=>1130,11379=>939,11381=>740,11382=>556,11383=>700,11385=>501,11386=>602,11387=>553,11388=>264,11389=>455,11390=>685,11391=>695,11520=>773,11521=>635,11522=>633,11523=>658,11524=>631,11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>632,11532=>646,11533=>962,11534=>645,11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649,11546=>688,11547=>634,11548=>982,11549=>681,11550=>676,11551=>852,11552=>957,11553=>632,11554=>645,11555=>646,11556=>749,11557=>914,11800=>536,11807=>838,11810=>390,11811=>390,11812=>390,11813=>390,11822=>536,42564=>685,42565=>513,42566=>395,42567=>392,42576=>1104,42577=>888,42580=>1193,42581=>871,42582=>1140,42583=>899,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>253,42782=>253,42783=>253,42790=>872,42791=>634,42792=>843,42793=>754,42794=>612,42795=>560,42796=>548,42797=>531,42798=>629,42799=>610,42800=>514,42801=>513,42802=>1195,42803=>944,42804=>1226,42805=>950,42806=>1149,42807=>934,42808=>968,42809=>784,42810=>968,42811=>784,42812=>962,42813=>824,42814=>765,42815=>560,42816=>774,42817=>625,42822=>787,42823=>434,42826=>932,42827=>711,42830=>1416,42831=>999,42856=>707,42857=>610,42875=>612,42876=>478,42880=>664,42881=>320,42882=>843,42883=>644,42884=>612,42885=>478,42886=>765,42887=>560,42891=>402,42892=>275,42893=>773,42896=>875,42897=>644,42922=>872,43002=>957,43003=>694,43004=>673,43005=>1024,43006=>395,43007=>1201,62464=>654,62465=>665,62466=>714,62467=>947,62468=>665,62469=>659,62470=>725,62471=>986,62472=>665,62473=>665,62474=>1257,62475=>683,62476=>682,62477=>953,62478=>665,62479=>682,62480=>999,62481=>746,62482=>798,62483=>748,62484=>944,62485=>681,62486=>936,62487=>680,62488=>688,62489=>682,62490=>729,62491=>682,62492=>688,62493=>666,62494=>729,62495=>884,62496=>665,62497=>706,62498=>666,62499=>665,62500=>665,62501=>722,62502=>961,62504=>904,63173=>602,63185=>500,63188=>500,64256=>710,64257=>667,64258=>667,64259=>1028,64260=>1030,64261=>771,64262=>933,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserif.z b/tcpdf/fonts/dejavuserif.z new file mode 100644 index 0000000..cfdcb45 Binary files /dev/null and b/tcpdf/fonts/dejavuserif.z differ diff --git a/tcpdf/fonts/dejavuserifb.ctg.z b/tcpdf/fonts/dejavuserifb.ctg.z new file mode 100644 index 0000000..eff351b Binary files /dev/null and b/tcpdf/fonts/dejavuserifb.ctg.z differ diff --git a/tcpdf/fonts/dejavuserifb.php b/tcpdf/fonts/dejavuserifb.php new file mode 100644 index 0000000..7014607 --- /dev/null +++ b/tcpdf/fonts/dejavuserifb.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerif-Bold'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=345364; +$enc=''; +$file='dejavuserifb.z'; +$ctg='dejavuserifb.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-836 -389 1796 1145]','ItalicAngle'=>0,'Ascent'=>939,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>60,'StemH'=>26,'AvgWidth'=>566,'MaxWidth'=>1820,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(127,-14,312,729),34=>array(95,458,426,729),35=>array(68,0,770,718),36=>array(89,-146,613,761),37=>array(24,-14,926,742),38=>array(40,-14,885,742),39=>array(95,458,211,729),40=>array(94,-156,421,760),41=>array(51,-156,378,760),42=>array(22,278,501,742),43=>array(106,1,732,627),44=>array(13,-165,251,156),45=>array(54,202,361,334),46=>array(81,-14,267,172),47=>array(0,-93,365,729),48=>array(47,-14,649,742),49=>array(122,0,596,742),50=>array(67,0,606,742),51=>array(70,-14,632,742),52=>array(41,0,655,742),53=>array(82,-14,620,729),54=>array(63,-14,642,742),55=>array(79,0,613,729),56=>array(52,-14,642,742),57=>array(54,-14,633,742),58=>array(92,-14,277,490),59=>array(26,-161,277,490),60=>array(106,32,732,595),61=>array(106,147,732,480),62=>array(106,32,732,595),63=>array(65,-14,541,742),64=>array(66,-174,929,703),65=>array(-8,0,787,729),66=>array(47,0,790,729),67=>array(42,-14,745,742),68=>array(47,0,825,729),69=>array(47,0,711,729),70=>array(47,0,697,729),71=>array(42,-14,775,742),72=>array(47,0,900,729),73=>array(47,0,422,729),74=>array(-73,-208,435,729),75=>array(47,0,900,729),76=>array(47,0,681,729),77=>array(42,0,1060,729),78=>array(44,0,874,729),79=>array(42,-14,828,742),80=>array(47,0,727,729),81=>array(42,-180,828,742),82=>array(47,0,837,729),83=>array(66,-14,662,742),84=>array(11,0,734,729),85=>array(34,-14,850,729),86=>array(-6,0,790,729),87=>array(-9,0,1135,729),88=>array(5,0,775,729),89=>array(-9,0,723,729),90=>array(37,0,694,729),91=>array(125,-132,402,760),92=>array(0,-93,365,729),93=>array(71,-132,348,760),94=>array(101,457,737,729),95=>array(0,-236,500,-143),96=>array(69,616,331,800),97=>array(41,-14,625,533),98=>array(23,-14,659,760),99=>array(41,-14,564,533),100=>array(41,-14,676,760),101=>array(41,-14,591,533),102=>array(31,0,484,760),103=>array(41,-222,676,533),104=>array(31,0,704,760),105=>array(34,0,355,760),106=>array(-74,-222,280,760),107=>array(34,0,710,760),108=>array(34,0,355,760),109=>array(34,0,1035,533),110=>array(34,0,704,533),111=>array(41,-14,627,533),112=>array(23,-208,659,533),113=>array(41,-208,676,533),114=>array(29,0,537,533),115=>array(43,-14,522,533),116=>array(24,-14,457,680),117=>array(23,-14,693,519),118=>array(-18,0,606,519),119=>array(-9,0,881,519),120=>array(0,0,603,519),121=>array(-13,-222,605,519),122=>array(35,0,534,519),123=>array(84,-163,553,760),124=>array(129,-236,234,764),125=>array(91,-163,559,760),126=>array(106,221,732,406),161=>array(127,0,312,742),162=>array(78,-146,602,662),163=>array(72,0,623,742),164=>array(37,30,601,596),165=>array(19,0,665,729),166=>array(129,-171,234,699),167=>array(31,-95,492,742),168=>array(69,645,431,788),169=>array(138,0,862,725),170=>array(30,246,469,742),171=>array(77,64,531,522),172=>array(106,140,732,441),173=>array(54,202,361,334),174=>array(138,0,862,725),175=>array(96,664,404,756),176=>array(87,424,412,749),177=>array(106,0,732,627),178=>array(42,334,382,742),179=>array(44,326,398,742),180=>array(169,616,431,800),181=>array(28,-208,698,519),182=>array(72,-96,575,729),183=>array(81,255,267,440),184=>array(128,-196,349,0),185=>array(70,334,369,742),186=>array(30,246,470,742),187=>array(94,64,548,522),188=>array(70,-14,1009,742),189=>array(70,-14,987,742),190=>array(44,-14,1009,742),191=>array(45,-14,521,742),192=>array(-8,0,787,927),193=>array(-8,0,787,927),194=>array(-8,0,787,927),195=>array(-8,0,787,929),196=>array(-8,0,787,939),197=>array(-8,0,787,928),198=>array(-31,0,982,729),199=>array(42,-196,745,742),200=>array(47,0,711,927),201=>array(47,0,711,927),202=>array(47,0,711,927),203=>array(47,0,711,939),204=>array(47,0,422,927),205=>array(47,0,422,927),206=>array(47,0,422,927),207=>array(47,0,422,939),208=>array(43,0,831,729),209=>array(44,0,874,929),210=>array(42,-14,828,927),211=>array(42,-14,828,927),212=>array(42,-14,828,927),213=>array(42,-14,828,929),214=>array(42,-14,828,939),215=>array(129,23,709,604),216=>array(33,-38,837,766),217=>array(34,-14,850,927),218=>array(34,-14,850,927),219=>array(34,-14,850,927),220=>array(34,-14,850,939),221=>array(-9,0,723,927),222=>array(47,0,727,729),223=>array(34,-14,725,760),224=>array(41,-14,625,800),225=>array(41,-14,625,800),226=>array(41,-14,625,800),227=>array(41,-14,625,792),228=>array(41,-14,625,788),229=>array(41,-14,625,888),230=>array(41,-14,929,533),231=>array(41,-196,564,533),232=>array(41,-14,591,800),233=>array(41,-14,591,800),234=>array(41,-14,591,800),235=>array(41,-14,591,788),236=>array(9,0,355,800),237=>array(34,0,371,800),238=>array(6,0,374,800),239=>array(9,0,371,788),240=>array(41,-14,627,764),241=>array(34,0,704,792),242=>array(41,-14,627,800),243=>array(41,-14,627,800),244=>array(41,-14,627,800),245=>array(41,-14,627,792),246=>array(41,-14,627,788),247=>array(106,60,732,567),248=>array(25,-50,642,567),249=>array(23,-14,693,800),250=>array(23,-14,693,800),251=>array(23,-14,693,800),252=>array(23,-14,693,788),253=>array(-13,-222,605,800),254=>array(23,-208,659,760),255=>array(-13,-222,605,788),256=>array(-8,0,787,914),257=>array(41,-14,625,763),258=>array(-8,0,787,936),259=>array(41,-14,625,776),260=>array(-8,-196,787,729),261=>array(41,-196,625,533),262=>array(42,-14,745,927),263=>array(41,-14,564,800),264=>array(42,-14,745,927),265=>array(41,-14,564,800),266=>array(42,-14,745,939),267=>array(41,-14,564,788),268=>array(42,-14,745,927),269=>array(41,-14,564,800),270=>array(47,0,825,927),271=>array(41,-14,852,760),272=>array(43,0,831,729),273=>array(41,-14,686,760),274=>array(47,0,711,914),275=>array(41,-14,591,763),276=>array(47,0,711,927),277=>array(41,-14,591,776),278=>array(47,0,711,939),279=>array(41,-14,591,788),280=>array(47,-196,712,729),281=>array(41,-196,591,533),282=>array(47,0,711,930),283=>array(41,-14,591,800),284=>array(42,-14,775,927),285=>array(41,-222,676,800),286=>array(42,-14,775,927),287=>array(41,-222,676,776),288=>array(42,-14,775,939),289=>array(41,-222,676,788),290=>array(42,-240,775,742),291=>array(41,-222,676,753),292=>array(47,0,900,927),293=>array(-26,0,704,927),294=>array(47,0,900,729),295=>array(31,0,704,760),296=>array(47,0,422,929),297=>array(15,0,365,792),298=>array(47,0,422,914),299=>array(3,0,355,763),300=>array(47,0,422,927),301=>array(23,0,357,776),302=>array(47,-196,422,729),303=>array(34,-196,368,760),304=>array(47,0,422,939),305=>array(34,0,355,519),306=>array(47,-208,904,729),307=>array(34,-222,668,760),308=>array(-73,-208,435,927),309=>array(-74,-222,340,800),310=>array(47,-226,900,729),311=>array(34,-226,710,760),312=>array(34,0,710,518),313=>array(47,0,681,928),314=>array(34,0,362,928),315=>array(47,-226,681,729),316=>array(34,-226,355,760),317=>array(47,0,681,729),318=>array(34,0,516,760),319=>array(47,0,693,729),320=>array(34,0,515,760),321=>array(8,0,688,729),322=>array(4,0,390,760),323=>array(44,0,874,928),324=>array(34,0,704,776),325=>array(44,-226,874,729),326=>array(34,-226,704,533),327=>array(44,0,874,927),328=>array(34,0,704,800),329=>array(46,0,962,742),330=>array(34,-208,757,743),331=>array(34,-222,630,533),332=>array(42,-14,828,914),333=>array(41,-14,627,763),334=>array(42,-14,828,927),335=>array(41,-14,627,776),336=>array(42,-14,828,927),337=>array(41,-14,627,800),338=>array(42,0,1129,729),339=>array(41,-14,984,533),340=>array(47,0,837,928),341=>array(29,0,537,776),342=>array(47,-226,837,729),343=>array(29,-226,537,533),344=>array(47,0,837,927),345=>array(29,0,537,800),346=>array(66,-14,662,928),347=>array(43,-14,522,776),348=>array(66,-14,662,927),349=>array(43,-14,522,800),350=>array(66,-196,662,742),351=>array(43,-196,522,533),352=>array(66,-14,662,927),353=>array(43,-14,522,800),354=>array(11,-196,734,729),355=>array(24,-196,457,680),356=>array(11,0,734,927),357=>array(24,-14,496,780),358=>array(11,0,734,729),359=>array(24,-14,457,680),360=>array(34,-14,850,929),361=>array(23,-14,693,792),362=>array(34,-14,850,914),363=>array(23,-14,693,763),364=>array(34,-14,850,927),365=>array(23,-14,693,776),366=>array(34,-14,850,1057),367=>array(23,-14,693,854),368=>array(34,-14,850,927),369=>array(23,-14,693,800),370=>array(34,-204,850,729),371=>array(23,-196,727,519),372=>array(-9,0,1135,931),373=>array(-9,0,881,800),374=>array(-9,0,723,931),375=>array(-13,-222,605,800),376=>array(-9,0,723,939),377=>array(37,0,694,928),378=>array(35,0,534,776),379=>array(37,0,694,952),380=>array(35,0,534,759),381=>array(37,0,694,927),382=>array(35,0,534,800),383=>array(31,0,484,760),384=>array(20,-14,659,760),385=>array(-120,0,790,729),386=>array(47,0,799,729),387=>array(23,-14,659,760),388=>array(0,0,799,729),389=>array(0,-14,659,760),390=>array(42,-14,745,742),391=>array(42,-14,906,840),392=>array(41,-14,728,709),393=>array(43,0,831,729),394=>array(-120,0,825,729),395=>array(47,0,799,729),396=>array(23,-14,659,760),397=>array(41,-246,627,533),398=>array(47,0,711,729),399=>array(42,-14,828,742),400=>array(47,-14,667,742),401=>array(-86,-208,697,729),402=>array(-95,-190,484,760),403=>array(42,-14,931,840),404=>array(17,-92,749,729),405=>array(31,-1,1003,760),406=>array(47,0,422,729),407=>array(36,0,432,729),408=>array(47,0,905,729),409=>array(34,0,710,760),410=>array(34,0,355,760),411=>array(36,0,660,739),412=>array(34,-14,1035,729),413=>array(-89,-208,874,729),414=>array(34,-208,704,533),415=>array(42,-14,828,742),416=>array(42,-14,871,758),417=>array(42,-14,745,548),418=>array(42,-171,1153,742),419=>array(42,-208,920,533),420=>array(-120,0,727,729),421=>array(23,-208,659,709),422=>array(45,-142,837,729),423=>array(66,-14,662,742),424=>array(43,-14,522,533),425=>array(41,0,640,729),426=>array(-64,-223,385,760),427=>array(24,-222,457,680),428=>array(18,0,734,729),429=>array(24,-14,457,760),430=>array(11,-208,734,729),431=>array(37,-14,1049,816),432=>array(25,-14,805,548),433=>array(45,-14,845,729),434=>array(79,0,845,729),435=>array(-9,0,817,730),436=>array(-13,-222,709,533),437=>array(37,0,694,729),438=>array(35,0,534,519),439=>array(35,-14,597,729),440=>array(60,-14,622,729),441=>array(60,-203,622,519),442=>array(51,-220,597,519),443=>array(67,0,637,742),444=>array(47,-14,697,729),445=>array(34,-203,597,519),446=>array(22,-15,376,680),447=>array(23,-208,682,560),448=>array(95,0,200,729),449=>array(95,0,397,729),450=>array(9,0,450,729),451=>array(95,0,200,729),452=>array(47,0,1561,927),453=>array(47,0,1401,800),454=>array(41,-14,1233,800),455=>array(47,-208,1138,729),456=>array(47,-222,983,760),457=>array(34,-222,660,760),458=>array(44,-208,1349,729),459=>array(44,-222,1194,760),460=>array(34,-222,1007,760),461=>array(-8,0,787,927),462=>array(41,-14,625,800),463=>array(47,0,422,927),464=>array(6,0,375,800),465=>array(42,-14,828,927),466=>array(41,-14,627,800),467=>array(34,-14,850,927),468=>array(23,-14,693,800),469=>array(34,-14,850,1036),470=>array(23,-14,693,899),471=>array(34,-14,850,1057),472=>array(23,-14,693,920),473=>array(34,-14,850,1057),474=>array(23,-14,693,920),475=>array(34,-14,850,1057),476=>array(23,-14,693,920),477=>array(41,-14,591,533),478=>array(-8,0,787,1036),479=>array(41,-14,625,899),480=>array(-8,0,787,1036),481=>array(41,-14,625,899),482=>array(-31,0,982,914),483=>array(41,-14,929,763),484=>array(42,-14,872,742),485=>array(41,-222,676,533),486=>array(42,-14,775,927),487=>array(41,-222,676,800),488=>array(47,0,900,927),489=>array(-24,0,710,927),490=>array(42,-204,828,742),491=>array(41,-204,627,533),492=>array(42,-204,828,914),493=>array(41,-204,627,763),494=>array(35,-14,597,927),495=>array(35,-203,597,800),496=>array(-74,-222,375,800),497=>array(47,0,1561,729),498=>array(47,0,1401,729),499=>array(41,-14,1233,760),500=>array(42,-14,775,928),501=>array(41,-222,676,800),502=>array(47,-14,1187,729),503=>array(47,-208,781,742),504=>array(44,0,874,927),505=>array(34,0,704,800),506=>array(-8,0,787,928),507=>array(41,-14,625,928),508=>array(-31,0,982,928),509=>array(41,-14,929,800),510=>array(33,-38,837,928),511=>array(25,-50,642,800),512=>array(-8,0,787,930),513=>array(41,-14,625,800),514=>array(-8,0,787,958),515=>array(41,-14,625,776),516=>array(47,0,711,930),517=>array(41,-14,591,800),518=>array(47,0,711,958),519=>array(41,-14,591,776),520=>array(1,0,422,930),521=>array(-47,0,355,801),522=>array(47,0,422,958),523=>array(19,0,355,767),524=>array(42,-14,828,930),525=>array(41,-14,627,800),526=>array(42,-14,828,958),527=>array(41,-14,627,776),528=>array(47,0,837,930),529=>array(29,0,537,800),530=>array(47,0,837,958),531=>array(29,0,537,776),532=>array(34,-14,850,930),533=>array(23,-14,693,800),534=>array(34,-14,850,958),535=>array(23,-14,693,776),536=>array(66,-230,662,742),537=>array(43,-230,522,533),538=>array(11,-230,734,729),539=>array(24,-230,457,680),540=>array(67,-210,616,742),541=>array(49,-211,544,531),542=>array(47,0,900,927),543=>array(-23,0,704,927),544=>array(34,-208,850,743),545=>array(41,-48,773,760),546=>array(40,-14,650,742),547=>array(50,-14,565,760),548=>array(37,-263,694,729),549=>array(35,-263,534,519),550=>array(-8,0,787,939),551=>array(41,-14,625,788),552=>array(47,-196,711,729),553=>array(41,-196,591,533),554=>array(42,-14,828,1036),555=>array(41,-14,627,899),556=>array(42,-14,828,1036),557=>array(41,-14,627,894),558=>array(42,-14,828,939),559=>array(41,-14,627,788),560=>array(42,-14,828,1036),561=>array(41,-14,627,899),562=>array(-9,0,723,914),563=>array(-13,-222,605,763),564=>array(34,-113,556,760),565=>array(34,-113,905,533),566=>array(24,-113,547,680),567=>array(-74,-222,280,519),568=>array(41,-14,991,760),569=>array(40,-208,990,533),570=>array(-14,-38,790,766),571=>array(-4,-38,800,766),572=>array(-4,-50,613,567),573=>array(36,0,681,729),574=>array(-29,-38,775,766),575=>array(43,-217,522,533),576=>array(35,-222,568,519),577=>array(47,0,635,729),578=>array(47,0,522,533),579=>array(37,0,790,729),580=>array(29,-14,855,729),581=>array(-8,0,787,729),582=>array(47,-57,711,785),583=>array(41,-56,591,581),584=>array(-73,-208,445,729),585=>array(-74,-222,355,760),586=>array(42,-208,936,742),587=>array(41,-222,783,533),588=>array(36,0,837,729),589=>array(29,0,537,533),590=>array(-9,0,723,729),591=>array(-13,-222,605,519),592=>array(41,-14,625,533),593=>array(41,-14,676,533),594=>array(41,-14,676,533),595=>array(23,-14,659,760),596=>array(41,-14,564,533),597=>array(37,-113,559,527),598=>array(41,-222,783,760),599=>array(41,-14,784,760),600=>array(41,-14,591,533),601=>array(41,-14,591,533),602=>array(54,-14,907,533),603=>array(48,-12,554,533),604=>array(41,-12,547,526),605=>array(41,-12,907,526),606=>array(41,-18,675,533),607=>array(-74,-222,355,519),608=>array(41,-222,784,760),609=>array(41,-222,676,519),610=>array(63,-4,570,520),611=>array(12,-219,588,519),612=>array(41,-38,605,521),613=>array(23,-208,696,519),614=>array(34,0,704,760),615=>array(34,-222,630,760),616=>array(34,0,355,760),617=>array(36,0,367,519),618=>array(34,0,355,519),619=>array(32,0,382,760),620=>array(32,0,487,760),621=>array(34,-222,462,760),622=>array(34,-203,824,760),623=>array(23,-14,1024,519),624=>array(23,-208,1024,519),625=>array(34,-222,961,533),626=>array(-74,-222,704,533),627=>array(34,-222,810,533),628=>array(63,0,656,519),629=>array(41,-14,627,533),630=>array(63,0,1005,521),631=>array(41,-14,704,530),632=>array(-3,-213,671,760),633=>array(29,-14,537,519),634=>array(29,-14,537,760),635=>array(29,-222,640,519),636=>array(29,-207,537,533),637=>array(29,-222,537,533),638=>array(34,0,462,533),639=>array(34,0,462,533),640=>array(63,0,745,519),641=>array(63,0,745,519),642=>array(43,-222,522,533),643=>array(-74,-223,385,760),644=>array(-74,-222,484,760),645=>array(41,-222,500,527),646=>array(-64,-223,385,760),647=>array(34,-161,467,533),648=>array(24,-222,453,680),649=>array(23,-14,693,519),650=>array(41,-14,640,519),651=>array(34,-1,654,519),652=>array(34,0,658,519),653=>array(34,0,924,519),654=>array(34,0,652,741),655=>array(63,0,670,520),656=>array(35,-222,716,519),657=>array(35,-89,534,519),658=>array(35,-203,597,519),659=>array(51,-203,597,519),660=>array(124,0,478,761),661=>array(124,0,478,761),662=>array(124,0,478,761),663=>array(124,-223,478,761),664=>array(42,-14,828,742),665=>array(34,0,655,519),666=>array(41,-18,675,533),667=>array(63,-4,734,760),668=>array(34,0,698,519),669=>array(-42,-223,390,760),670=>array(41,-208,717,519),671=>array(63,0,589,519),672=>array(41,-208,783,760),673=>array(124,0,478,761),674=>array(124,0,478,761),675=>array(41,-14,1083,760),676=>array(41,-203,1146,760),677=>array(41,-89,1083,760),678=>array(24,0,896,680),679=>array(24,-223,769,760),680=>array(24,-20,899,680),681=>array(31,-222,1005,760),682=>array(34,0,829,760),683=>array(34,0,762,760),684=>array(44,0,623,625),685=>array(44,120,401,625),686=>array(-84,-208,696,760),687=>array(-84,-222,800,760),688=>array(44,334,481,759),689=>array(44,337,479,762),690=>array(44,210,274,760),691=>array(44,334,375,632),692=>array(44,329,375,627),693=>array(44,209,441,625),694=>array(44,334,487,625),695=>array(44,302,622,592),696=>array(44,177,446,592),697=>array(78,557,218,800),698=>array(78,557,437,800),699=>array(69,456,290,742),700=>array(69,456,290,742),701=>array(69,456,290,742),702=>array(116,481,255,760),703=>array(116,481,255,760),704=>array(44,334,274,760),705=>array(44,334,274,760),706=>array(130,517,370,843),707=>array(130,517,370,843),708=>array(87,561,413,800),709=>array(87,561,413,800),710=>array(66,616,434,800),711=>array(66,616,434,800),712=>array(95,513,187,759),713=>array(96,664,404,756),714=>array(169,616,431,800),715=>array(69,616,331,800),716=>array(95,-90,187,156),717=>array(96,-188,404,-96),720=>array(109,0,260,434),721=>array(109,303,260,434),722=>array(116,269,255,547),723=>array(116,269,255,547),726=>array(54,165,300,411),727=>array(54,242,300,334),728=>array(83,624,417,776),729=>array(178,645,322,788),730=>array(111,610,389,888),731=>array(155,-196,365,0),732=>array(75,638,425,792),733=>array(110,616,496,800),734=>array(0,299,418,500),736=>array(8,211,371,625),737=>array(44,334,252,759),738=>array(44,335,355,641),739=>array(44,334,436,625),740=>array(44,334,274,760),741=>array(96,0,404,693),742=>array(96,0,404,693),743=>array(96,0,404,693),744=>array(96,0,404,693),745=>array(96,0,404,693),748=>array(87,-281,413,-42),750=>array(69,456,495,742),751=>array(66,-241,434,-58),752=>array(87,-281,413,-42),755=>array(111,-240,389,38),759=>array(75,-193,425,-40),768=>array(-432,616,-169,800),769=>array(-332,616,-69,800),770=>array(-435,616,-66,800),771=>array(-425,638,-76,792),772=>array(-404,664,-97,756),773=>array(-500,663,0,755),774=>array(-417,624,-83,776),775=>array(-322,645,-179,788),776=>array(-432,645,-69,788),777=>array(-346,616,-125,866),778=>array(-390,610,-111,888),779=>array(-391,616,-4,800),780=>array(-435,616,-66,800),781=>array(-297,616,-205,813),782=>array(-389,616,-113,813),783=>array(-484,616,-98,800),784=>array(-417,624,-83,903),785=>array(-417,624,-83,776),786=>array(-308,456,-129,617),787=>array(-322,606,-171,847),788=>array(-322,606,-171,847),789=>array(-85,616,85,800),790=>array(-431,-253,-169,-69),791=>array(-331,-251,-69,-67),792=>array(-327,-357,-158,-111),793=>array(-342,-357,-173,-111),794=>array(-200,684,46,930),795=>array(-118,338,78,548),796=>array(-319,-389,-180,-111),797=>array(-371,-280,-125,-111),798=>array(-374,-280,-127,-111),799=>array(-371,-357,-125,-111),800=>array(-374,-203,-127,-111),801=>array(-451,-222,-97,139),802=>array(-434,-222,-80,139),803=>array(-322,-213,-178,-70),804=>array(-434,-213,-72,-70),805=>array(-366,-240,-136,-11),806=>array(-345,-230,-166,-69),807=>array(-372,-196,-151,0),808=>array(-345,-196,-135,0),809=>array(-292,-266,-200,-69),810=>array(-404,-253,-96,-69),811=>array(-426,-221,-73,-69),812=>array(-434,-251,-66,-67),813=>array(-434,-253,-66,-69),814=>array(-417,-221,-83,-69),815=>array(-417,-221,-83,-69),816=>array(-428,-222,-78,-68),817=>array(-404,-161,-96,-69),818=>array(-500,-236,0,-143),819=>array(-500,-236,0,-9),820=>array(-742,210,-98,417),821=>array(-344,234,-23,293),822=>array(-694,234,-41,293),823=>array(-647,-50,-30,567),824=>array(-836,-38,-32,766),825=>array(-303,-378,-164,-100),826=>array(-404,-242,-96,-59),827=>array(-391,-350,-110,-69),828=>array(-426,-221,-73,-69),829=>array(-369,581,-129,820),830=>array(-323,598,-169,877),831=>array(-500,528,0,755),835=>array(-322,606,-171,847),856=>array(-125,645,19,788),864=>array(-430,723,430,898),865=>array(-445,729,445,902),880=>array(47,0,734,729),881=>array(34,0,542,519),882=>array(11,0,775,729),883=>array(32,0,730,519),884=>array(78,557,218,800),885=>array(78,-208,218,35),886=>array(44,0,923,729),887=>array(34,0,704,519),890=>array(202,-208,348,-60),891=>array(41,-14,564,533),892=>array(41,-14,564,533),893=>array(41,-14,564,533),894=>array(26,-161,277,490),900=>array(169,616,431,800),901=>array(69,645,440,996),902=>array(-8,0,787,800),903=>array(81,255,267,440),904=>array(-16,0,893,800),905=>array(-16,0,1084,800),906=>array(-16,0,606,800),908=>array(-16,-14,844,800),910=>array(-16,0,960,800),911=>array(-16,0,869,800),912=>array(8,16,444,996),913=>array(-8,0,787,729),914=>array(47,0,790,729),915=>array(47,0,697,729),916=>array(29,0,741,729),917=>array(47,0,711,729),918=>array(37,0,694,729),919=>array(47,0,900,729),920=>array(42,-14,828,742),921=>array(47,0,422,729),922=>array(47,0,900,729),923=>array(-8,0,787,729),924=>array(42,0,1060,729),925=>array(44,0,874,729),926=>array(55,0,642,729),927=>array(42,-14,828,742),928=>array(47,0,899,729),929=>array(47,0,727,729),931=>array(41,0,640,729),932=>array(11,0,734,729),933=>array(-9,0,723,729),934=>array(42,0,828,729),935=>array(5,0,775,729),936=>array(7,0,907,729),937=>array(45,0,845,742),938=>array(47,0,422,939),939=>array(-9,0,723,939),940=>array(41,-14,746,800),941=>array(48,-12,554,800),942=>array(34,-208,630,800),943=>array(34,16,444,800),944=>array(34,-1,654,996),945=>array(41,-14,746,532),946=>array(63,-208,609,769),947=>array(24,-209,615,519),948=>array(41,-14,627,765),949=>array(48,-12,554,533),950=>array(34,-208,542,760),951=>array(34,-208,630,533),952=>array(41,-17,627,771),953=>array(34,16,444,519),954=>array(34,0,710,519),955=>array(36,0,660,739),956=>array(28,-208,698,519),957=>array(34,0,654,519),958=>array(34,-208,542,760),959=>array(41,-14,627,533),960=>array(34,0,698,519),961=>array(63,-208,625,533),962=>array(41,-208,547,533),963=>array(41,-14,686,519),964=>array(34,16,622,519),965=>array(34,-1,654,519),966=>array(47,-208,857,519),967=>array(12,-222,636,533),968=>array(42,-208,897,519),969=>array(40,-1,911,519),970=>array(13,16,444,788),971=>array(34,-1,654,788),972=>array(41,-14,627,800),973=>array(34,-1,654,800),974=>array(40,-1,911,800),975=>array(47,-240,831,729),976=>array(41,-17,626,771),977=>array(34,-17,809,771),978=>array(30,0,724,729),979=>array(-16,0,929,800),980=>array(30,0,724,939),981=>array(41,-208,898,760),982=>array(34,-1,923,519),983=>array(49,-222,605,521),984=>array(42,-207,828,742),985=>array(41,-207,627,533),986=>array(42,-208,725,742),987=>array(41,-208,547,616),988=>array(47,0,697,729),989=>array(-93,-211,477,742),990=>array(52,0,528,729),991=>array(93,0,566,759),992=>array(60,-209,745,742),993=>array(45,-208,619,533),1008=>array(49,-5,605,521),1009=>array(63,-210,625,533),1010=>array(41,-14,564,533),1011=>array(-74,-222,280,760),1012=>array(42,-14,828,742),1013=>array(41,-14,563,533),1014=>array(42,-14,564,533),1015=>array(47,0,727,729),1016=>array(23,-208,659,760),1017=>array(42,-14,745,742),1018=>array(42,0,1060,729),1019=>array(71,-208,815,519),1020=>array(42,-208,652,533),1021=>array(42,-14,745,742),1022=>array(42,-14,745,742),1023=>array(42,-14,745,742),1024=>array(47,0,711,927),1025=>array(47,0,711,939),1026=>array(-46,-214,816,729),1027=>array(47,0,677,927),1028=>array(42,-14,745,742),1029=>array(66,-14,662,742),1030=>array(47,0,422,729),1031=>array(47,0,422,939),1032=>array(-73,-208,435,729),1033=>array(22,-14,1154,729),1034=>array(47,0,1214,729),1035=>array(-46,0,909,729),1036=>array(47,0,900,927),1037=>array(47,0,900,927),1038=>array(24,-14,800,997),1039=>array(47,-157,900,729),1040=>array(10,0,805,729),1041=>array(47,0,799,729),1042=>array(47,0,790,729),1043=>array(47,0,677,729),1044=>array(47,-157,842,729),1045=>array(47,0,711,729),1046=>array(10,0,1302,729),1047=>array(47,-14,666,742),1048=>array(47,0,900,729),1049=>array(47,0,900,999),1050=>array(47,0,900,729),1051=>array(22,-14,839,729),1052=>array(42,0,1060,729),1053=>array(47,0,900,729),1054=>array(42,-14,828,742),1055=>array(47,0,899,729),1056=>array(47,0,727,729),1057=>array(42,-14,745,742),1058=>array(11,0,734,729),1059=>array(24,-14,800,729),1060=>array(42,0,906,729),1061=>array(5,0,775,729),1062=>array(47,-157,919,729),1063=>array(31,0,861,729),1064=>array(42,0,1226,729),1065=>array(42,-157,1246,729),1066=>array(6,0,910,729),1067=>array(47,0,1156,729),1068=>array(47,0,778,729),1069=>array(42,-14,745,742),1070=>array(47,-14,1228,742),1071=>array(22,0,837,729),1072=>array(41,-14,625,533),1073=>array(34,-14,627,776),1074=>array(34,0,655,519),1075=>array(34,0,549,519),1076=>array(34,-138,632,519),1077=>array(41,-14,591,533),1078=>array(12,0,998,519),1079=>array(34,-14,598,533),1080=>array(34,0,708,519),1081=>array(34,0,708,817),1082=>array(34,0,710,519),1083=>array(18,-14,671,519),1084=>array(34,0,834,519),1085=>array(34,0,698,519),1086=>array(41,-14,627,533),1087=>array(34,0,698,519),1088=>array(23,-208,659,533),1089=>array(41,-14,564,533),1090=>array(32,0,573,519),1091=>array(12,-222,630,519),1092=>array(41,-208,862,760),1093=>array(0,0,603,519),1094=>array(34,-138,705,519),1095=>array(34,0,698,519),1096=>array(34,0,1041,519),1097=>array(34,-138,1048,519),1098=>array(15,0,728,519),1099=>array(42,0,964,519),1100=>array(42,0,639,519),1101=>array(42,-14,564,533),1102=>array(53,-14,981,533),1103=>array(24,0,705,519),1104=>array(41,-14,591,800),1105=>array(41,-14,591,788),1106=>array(15,-222,679,760),1107=>array(34,0,549,800),1108=>array(41,-14,563,533),1109=>array(43,-14,522,533),1110=>array(34,0,355,760),1111=>array(9,0,371,788),1112=>array(-74,-222,280,760),1113=>array(18,-14,948,519),1114=>array(34,0,975,519),1115=>array(20,0,704,760),1116=>array(34,0,710,800),1117=>array(34,0,708,800),1118=>array(12,-222,630,823),1119=>array(34,-138,698,519),1122=>array(15,0,833,729),1123=>array(10,0,663,760),1124=>array(47,-14,1145,742),1125=>array(53,-14,917,533),1130=>array(10,0,1302,729),1131=>array(12,0,998,519),1132=>array(47,0,1621,729),1133=>array(53,0,1285,519),1136=>array(12,0,1109,729),1137=>array(12,-208,1094,760),1138=>array(42,-14,828,742),1139=>array(41,-14,612,533),1140=>array(10,0,906,742),1141=>array(12,0,736,533),1142=>array(10,0,906,927),1143=>array(12,0,736,800),1164=>array(15,0,799,729),1165=>array(12,0,633,760),1168=>array(47,0,687,872),1169=>array(34,0,554,668),1170=>array(42,0,677,729),1171=>array(29,0,549,519),1172=>array(47,-214,782,729),1173=>array(34,-222,631,519),1174=>array(10,-157,1302,729),1175=>array(12,-138,998,519),1176=>array(47,-196,666,742),1177=>array(34,-196,598,533),1178=>array(47,-157,900,729),1179=>array(34,-138,710,519),1182=>array(36,0,900,729),1183=>array(31,0,710,760),1184=>array(6,0,1031,729),1185=>array(15,0,807,520),1186=>array(47,-157,919,729),1187=>array(34,-138,705,519),1188=>array(47,0,1154,729),1189=>array(34,0,892,519),1190=>array(47,-214,1259,729),1191=>array(34,-222,973,519),1194=>array(42,-196,745,742),1195=>array(41,-196,564,533),1196=>array(11,-157,734,729),1197=>array(32,-138,573,519),1198=>array(-9,0,723,729),1199=>array(-13,-208,605,519),1200=>array(-9,0,723,729),1201=>array(-13,-208,605,519),1202=>array(5,-157,819,729),1203=>array(0,-138,615,519),1204=>array(11,-157,975,729),1205=>array(39,-138,773,519),1206=>array(31,-157,881,729),1207=>array(34,-138,705,519),1210=>array(31,0,858,729),1211=>array(31,0,704,760),1216=>array(47,0,422,729),1217=>array(10,0,1302,927),1218=>array(12,0,998,776),1219=>array(47,-214,831,729),1220=>array(34,-222,665,519),1223=>array(47,-214,900,729),1224=>array(34,-222,698,519),1227=>array(31,-157,861,729),1228=>array(34,-138,698,519),1231=>array(34,0,355,760),1232=>array(10,0,805,936),1233=>array(41,-14,625,776),1234=>array(10,0,805,939),1235=>array(41,-14,625,788),1236=>array(-31,0,982,729),1237=>array(41,-14,929,533),1238=>array(47,0,711,927),1239=>array(41,-14,591,776),1240=>array(42,-14,828,742),1241=>array(41,-14,591,533),1242=>array(42,-14,828,939),1243=>array(41,-14,591,788),1244=>array(10,0,1302,939),1245=>array(12,0,998,788),1246=>array(47,-14,666,939),1247=>array(34,-14,598,788),1248=>array(35,-14,597,729),1249=>array(35,-203,597,519),1250=>array(47,0,900,914),1251=>array(34,0,708,763),1252=>array(47,0,900,939),1253=>array(34,0,708,788),1254=>array(42,-14,828,939),1255=>array(41,-14,627,788),1256=>array(42,-14,828,742),1257=>array(41,-14,627,533),1258=>array(42,-14,828,939),1259=>array(41,-14,627,788),1260=>array(42,-14,745,939),1261=>array(42,-14,564,788),1262=>array(24,-14,800,914),1263=>array(12,-222,630,763),1264=>array(24,-14,800,939),1265=>array(12,-222,630,788),1266=>array(24,-14,800,927),1267=>array(12,-222,630,800),1268=>array(31,0,861,939),1269=>array(34,0,698,788),1270=>array(47,-157,677,729),1271=>array(34,-138,549,519),1272=>array(47,0,1156,939),1273=>array(42,0,964,788),1296=>array(47,-14,667,742),1297=>array(40,-14,604,533),1298=>array(22,-208,839,729),1299=>array(18,-222,671,519),1300=>array(22,-14,1247,729),1301=>array(18,-14,952,519),1306=>array(42,-180,828,742),1307=>array(41,-208,676,533),1308=>array(-9,0,1135,729),1309=>array(-9,0,881,519),1329=>array(34,-14,879,729),1330=>array(34,0,832,743),1331=>array(44,0,942,743),1332=>array(20,0,958,743),1333=>array(34,-14,832,729),1334=>array(73,-72,782,743),1335=>array(34,-72,766,729),1336=>array(34,-72,832,743),1337=>array(34,-10,1174,743),1338=>array(44,-14,942,729),1339=>array(49,0,803,729),1340=>array(49,-72,742,729),1341=>array(49,-14,1140,729),1342=>array(78,-13,858,743),1343=>array(20,0,822,729),1344=>array(-24,-66,659,729),1345=>array(73,-32,805,743),1346=>array(20,-72,943,743),1347=>array(25,0,836,739),1348=>array(34,-14,1006,729),1349=>array(49,-14,794,742),1350=>array(-29,-14,894,801),1351=>array(83,-14,770,729),1352=>array(34,0,837,743),1353=>array(73,-84,759,743),1354=>array(20,0,1000,743),1355=>array(83,-72,788,744),1356=>array(34,0,1013,743),1357=>array(34,-14,837,729),1358=>array(20,-72,943,729),1359=>array(49,-14,764,742),1360=>array(34,0,788,743),1361=>array(10,-14,778,742),1362=>array(34,0,783,729),1363=>array(44,0,911,729),1364=>array(-73,0,878,743),1365=>array(42,-14,828,742),1366=>array(39,-14,934,729),1369=>array(116,481,255,760),1370=>array(13,408,251,729),1371=>array(3,615,306,799),1372=>array(2,618,392,893),1373=>array(13,615,316,799),1374=>array(5,605,435,854),1375=>array(44,618,462,760),1377=>array(20,-14,1021,519),1378=>array(44,-208,651,533),1379=>array(59,-208,791,533),1380=>array(49,-208,816,533),1381=>array(24,-14,694,760),1382=>array(59,-208,791,533),1383=>array(44,0,613,760),1384=>array(44,-208,714,533),1385=>array(44,-208,909,532),1386=>array(59,-14,782,760),1387=>array(29,-208,699,760),1388=>array(44,-208,477,519),1389=>array(34,-208,1053,760),1390=>array(59,-14,668,789),1391=>array(24,-208,675,760),1392=>array(44,0,717,760),1393=>array(59,-14,664,783),1394=>array(49,-208,816,533),1395=>array(78,-14,684,771),1396=>array(20,-14,715,771),1397=>array(-83,-208,271,519),1398=>array(63,-14,684,771),1399=>array(-12,-208,463,538),1400=>array(49,0,719,533),1401=>array(18,-208,415,540),1402=>array(20,-208,1010,519),1403=>array(59,-208,629,537),1404=>array(49,0,724,533),1405=>array(20,-14,689,519),1406=>array(20,-208,787,760),1407=>array(20,-14,1021,533),1408=>array(34,-208,704,533),1409=>array(59,-222,693,533),1410=>array(49,0,518,519),1411=>array(20,-208,1021,760),1412=>array(44,-208,680,533),1413=>array(54,-14,640,533),1414=>array(30,-208,917,760),1415=>array(24,-14,858,760),1417=>array(104,-14,234,434),1418=>array(44,203,347,365),4256=>array(57,0,698,848),4257=>array(57,0,899,847),4258=>array(57,-81,825,848),4259=>array(57,-0,817,847),4260=>array(57,-0,724,848),4261=>array(57,-0,1021,848),4262=>array(42,-1,947,847),4263=>array(67,-1,1156,847),4264=>array(42,-0,586,847),4265=>array(57,-0,761,847),4266=>array(57,-0,979,847),4267=>array(72,-0,994,847),4268=>array(57,-0,740,847),4269=>array(67,-35,1093,847),4270=>array(42,-0,912,847),4271=>array(42,-0,845,846),4272=>array(57,-0,1052,846),4273=>array(57,-0,735,846),4274=>array(57,-0,699,847),4275=>array(67,-58,1034,846),4276=>array(57,-0,919,846),4277=>array(42,-0,1025,846),4278=>array(57,-0,753,846),4279=>array(57,-0,776,846),4280=>array(67,-0,765,847),4281=>array(57,-0,776,846),4282=>array(16,-1,852,848),4283=>array(72,-0,1020,847),4284=>array(57,-0,712,847),4285=>array(67,-0,754,847),4286=>array(57,-0,756,846),4287=>array(57,-0,1054,846),4288=>array(57,-0,1066,846),4289=>array(57,-0,745,846),4290=>array(57,-0,835,847),4291=>array(57,-1,745,846),4292=>array(57,-0,823,846),4293=>array(72,-0,1006,847),4304=>array(54,0,541,596),4305=>array(54,0,571,853),4306=>array(39,-225,604,566),4307=>array(54,-220,833,556),4308=>array(34,-225,551,556),4309=>array(39,-225,557,556),4310=>array(15,0,613,855),4311=>array(54,0,861,556),4312=>array(54,0,560,556),4313=>array(24,-225,546,556),4314=>array(54,-220,1066,562),4315=>array(54,0,571,854),4316=>array(68,0,586,877),4317=>array(54,-123,825,556),4318=>array(54,1,570,854),4319=>array(54,-225,571,555),4320=>array(54,-0,824,846),4321=>array(-10,0,612,854),4322=>array(17,-225,736,706),4323=>array(20,-225,688,556),4324=>array(54,-225,815,556),4325=>array(54,-225,570,855),4326=>array(54,-220,858,556),4327=>array(39,-225,558,556),4328=>array(10,0,579,854),4329=>array(68,-5,586,855),4330=>array(54,-225,680,556),4331=>array(54,0,573,854),4332=>array(44,-229,596,854),4333=>array(44,-225,587,854),4334=>array(-10,0,617,854),4335=>array(24,-225,722,556),4336=>array(54,0,572,854),4337=>array(54,0,603,863),4338=>array(54,-94,571,556),4339=>array(54,-225,572,615),4340=>array(54,-225,570,855),4341=>array(54,0,649,854),4342=>array(54,-225,886,699),4343=>array(54,-225,626,566),4344=>array(63,-225,582,556),4345=>array(54,-225,619,561),4346=>array(54,-69,571,556),4347=>array(77,-14,564,575),4348=>array(17,341,336,882),7424=>array(34,0,658,519),7425=>array(34,0,861,519),7426=>array(11,-14,898,533),7427=>array(34,0,678,519),7428=>array(41,-14,547,533),7429=>array(34,0,645,519),7430=>array(34,0,645,519),7431=>array(29,0,586,519),7432=>array(-26,-18,472,533),7433=>array(-22,-238,299,522),7434=>array(15,-14,523,519),7435=>array(34,0,710,519),7436=>array(17,0,589,519),7437=>array(34,0,834,519),7438=>array(34,0,704,519),7439=>array(41,-14,627,533),7440=>array(62,-14,568,533),7441=>array(41,-33,588,553),7442=>array(41,-2,588,521),7443=>array(25,-50,642,567),7444=>array(5,-14,948,533),7445=>array(29,-14,562,534),7446=>array(41,260,627,533),7447=>array(41,-14,627,259),7448=>array(34,0,569,519),7449=>array(56,0,738,519),7450=>array(56,0,738,519),7451=>array(32,0,573,519),7452=>array(23,-14,634,519),7453=>array(64,-74,597,596),7454=>array(55,-74,857,596),7455=>array(65,-240,599,761),7456=>array(-18,0,606,519),7457=>array(-9,0,881,519),7458=>array(35,0,534,519),7459=>array(41,-14,547,519),7460=>array(37,-14,552,742),7461=>array(29,-14,772,533),7462=>array(34,0,549,519),7463=>array(34,0,658,519),7464=>array(34,0,698,519),7465=>array(34,0,569,519),7466=>array(37,0,830,519),7467=>array(18,-14,671,519),7468=>array(-5,334,496,735),7469=>array(-20,334,619,735),7470=>array(29,334,498,735),7471=>array(23,334,518,742),7472=>array(29,334,520,735),7473=>array(29,334,448,735),7474=>array(29,334,448,735),7475=>array(26,326,488,742),7476=>array(29,334,567,735),7477=>array(29,334,266,735),7478=>array(-46,220,274,735),7479=>array(29,334,567,735),7480=>array(29,334,429,735),7481=>array(26,334,668,735),7482=>array(28,334,551,735),7483=>array(28,326,582,734),7484=>array(26,326,521,742),7485=>array(25,326,410,750),7486=>array(29,334,458,735),7487=>array(29,334,527,735),7488=>array(42,326,417,742),7489=>array(7,334,462,735),7490=>array(21,326,536,735),7491=>array(42,326,410,627),7492=>array(42,326,410,627),7493=>array(42,326,442,627),7494=>array(42,326,601,627),7495=>array(42,326,443,752),7496=>array(42,326,442,752),7497=>array(42,326,388,627),7498=>array(42,326,388,627),7499=>array(42,324,355,627),7500=>array(42,324,355,627),7501=>array(42,212,442,627),7502=>array(42,203,244,621),7503=>array(42,334,468,752),7504=>array(42,334,673,627),7505=>array(42,212,417,627),7506=>array(42,326,411,627),7507=>array(42,326,372,627),7508=>array(42,477,411,627),7509=>array(42,326,411,477),7510=>array(42,220,443,627),7511=>array(42,326,315,708),7512=>array(42,326,464,620),7513=>array(41,285,376,660),7514=>array(42,326,673,620),7515=>array(42,334,435,620),7516=>array(19,326,487,633),7517=>array(40,217,384,765),7518=>array(16,217,387,625),7519=>array(26,326,395,763),7520=>array(29,217,540,625),7521=>array(8,209,400,633),7522=>array(21,0,224,418),7523=>array(44,0,375,298),7524=>array(42,-8,464,286),7525=>array(42,0,435,286),7526=>array(40,-117,384,431),7527=>array(16,-117,387,291),7528=>array(40,-117,394,299),7529=>array(29,-117,540,291),7530=>array(8,-125,400,299),7531=>array(23,-14,996,533),7543=>array(-15,-222,620,533),7544=>array(29,334,567,735),7547=>array(34,0,355,519),7548=>array(36,0,367,519),7549=>array(23,-208,704,533),7550=>array(23,-14,634,519),7551=>array(-18,-14,697,519),7557=>array(1,-222,355,760),7579=>array(42,326,442,627),7580=>array(42,326,372,627),7581=>array(42,272,371,624),7582=>array(42,326,411,754),7583=>array(42,324,355,627),7584=>array(42,334,328,752),7585=>array(42,212,317,620),7586=>array(42,212,442,620),7587=>array(42,220,466,620),7588=>array(42,334,244,752),7589=>array(42,334,250,620),7590=>array(42,334,244,620),7591=>array(42,334,244,620),7592=>array(42,211,314,752),7593=>array(42,212,312,752),7594=>array(42,212,265,752),7595=>array(42,334,374,621),7596=>array(42,212,626,627),7597=>array(42,220,673,620),7598=>array(42,212,532,627),7599=>array(42,212,531,627),7600=>array(42,334,416,621),7601=>array(42,326,411,627),7602=>array(42,217,466,752),7603=>array(42,212,344,627),7604=>array(42,211,331,752),7605=>array(42,211,315,708),7606=>array(42,326,464,620),7607=>array(42,332,419,628),7608=>array(15,326,399,625),7609=>array(42,333,433,620),7610=>array(42,334,435,620),7611=>array(42,334,356,620),7612=>array(42,212,471,620),7613=>array(42,285,356,620),7614=>array(42,222,396,620),7615=>array(42,325,411,758),7620=>array(-403,616,-14,800),7621=>array(-486,616,-97,800),7622=>array(-403,616,-14,800),7623=>array(-486,616,-97,800),7624=>array(-516,616,16,800),7625=>array(-516,616,16,800),7680=>array(-8,-240,787,729),7681=>array(41,-240,625,533),7682=>array(47,0,790,939),7683=>array(23,-14,659,939),7684=>array(47,-213,790,729),7685=>array(23,-213,659,760),7686=>array(47,-161,790,729),7687=>array(23,-161,659,760),7688=>array(42,-196,745,927),7689=>array(41,-196,564,800),7690=>array(47,0,825,939),7691=>array(41,-14,676,939),7692=>array(47,-213,825,729),7693=>array(41,-213,676,760),7694=>array(47,-161,825,729),7695=>array(41,-161,676,760),7696=>array(47,-196,825,729),7697=>array(41,-196,676,760),7698=>array(47,-240,825,729),7699=>array(41,-240,676,760),7700=>array(47,0,711,1057),7701=>array(41,-14,591,926),7702=>array(47,0,711,1057),7703=>array(41,-14,591,926),7704=>array(47,-240,711,729),7705=>array(41,-240,591,533),7706=>array(47,-222,711,729),7707=>array(41,-222,591,533),7708=>array(47,-196,711,927),7709=>array(41,-196,591,776),7710=>array(47,0,697,939),7711=>array(31,0,484,939),7712=>array(42,-14,775,938),7713=>array(41,-222,676,756),7714=>array(47,0,900,939),7715=>array(31,0,704,939),7716=>array(47,-213,900,729),7717=>array(31,-213,704,760),7718=>array(47,0,900,939),7719=>array(-23,0,704,939),7720=>array(47,-196,900,729),7721=>array(31,-196,704,760),7722=>array(47,-221,900,729),7723=>array(31,-221,704,760),7724=>array(47,-222,422,729),7725=>array(8,-222,358,760),7726=>array(47,0,422,1057),7727=>array(9,0,371,917),7728=>array(47,0,900,931),7729=>array(34,0,710,931),7730=>array(47,-213,900,729),7731=>array(34,-213,710,760),7732=>array(47,-161,900,729),7733=>array(34,-161,710,760),7734=>array(47,-213,681,729),7735=>array(34,-213,355,760),7736=>array(47,-213,681,914),7737=>array(34,-213,355,914),7738=>array(47,-161,681,729),7739=>array(32,-161,355,760),7740=>array(47,-241,681,729),7741=>array(10,-240,379,760),7742=>array(42,0,1060,931),7743=>array(34,0,1035,800),7744=>array(42,0,1060,937),7745=>array(34,0,1035,788),7746=>array(42,-213,1060,729),7747=>array(34,-213,1035,533),7748=>array(44,0,874,939),7749=>array(34,0,704,788),7750=>array(44,-213,874,729),7751=>array(34,-213,704,533),7752=>array(44,-161,874,729),7753=>array(34,-161,704,533),7754=>array(44,-240,874,729),7755=>array(34,-240,704,533),7756=>array(42,-14,828,1057),7757=>array(41,-14,627,916),7758=>array(42,-14,828,1055),7759=>array(41,-14,627,912),7760=>array(42,-14,828,1057),7761=>array(41,-14,627,926),7762=>array(42,-14,828,1057),7763=>array(41,-14,627,926),7764=>array(47,0,727,927),7765=>array(23,-208,659,800),7766=>array(47,0,727,939),7767=>array(23,-208,659,788),7768=>array(47,0,837,939),7769=>array(29,0,537,788),7770=>array(47,-213,837,729),7771=>array(29,-213,537,533),7772=>array(47,-213,837,914),7773=>array(29,-213,537,756),7774=>array(47,-161,837,729),7775=>array(29,-161,537,533),7776=>array(66,-14,662,939),7777=>array(43,-14,522,788),7778=>array(66,-213,662,742),7779=>array(43,-213,522,533),7780=>array(66,-14,662,959),7781=>array(43,-14,522,777),7782=>array(66,-14,662,1065),7783=>array(43,-14,522,883),7784=>array(66,-213,662,939),7785=>array(43,-213,522,788),7786=>array(11,0,734,939),7787=>array(24,-14,457,939),7788=>array(11,-213,734,729),7789=>array(24,-213,457,680),7790=>array(11,-161,734,729),7791=>array(24,-161,457,680),7792=>array(11,-240,734,729),7793=>array(24,-240,460,680),7794=>array(34,-213,850,729),7795=>array(23,-213,693,519),7796=>array(34,-222,850,729),7797=>array(23,-222,693,519),7798=>array(34,-240,850,729),7799=>array(23,-240,693,519),7800=>array(34,-14,850,1057),7801=>array(23,-14,693,915),7802=>array(34,-14,850,1055),7803=>array(23,-14,693,930),7804=>array(-6,0,790,929),7805=>array(-18,0,606,792),7806=>array(-6,-213,790,729),7807=>array(-18,-213,606,519),7808=>array(-9,0,1135,927),7809=>array(-9,0,881,800),7810=>array(-9,0,1135,927),7811=>array(-9,0,881,800),7812=>array(-9,0,1135,939),7813=>array(-9,0,881,760),7814=>array(-9,0,1135,939),7815=>array(-9,0,881,788),7816=>array(-9,-211,1135,729),7817=>array(-9,-213,881,519),7818=>array(5,0,775,939),7819=>array(0,0,603,788),7820=>array(5,0,775,939),7821=>array(0,0,603,788),7822=>array(-9,0,723,939),7823=>array(-13,-222,605,788),7824=>array(37,0,694,927),7825=>array(35,0,534,800),7826=>array(37,-213,694,729),7827=>array(35,-213,534,519),7828=>array(37,-161,694,729),7829=>array(35,-161,534,519),7830=>array(31,-161,704,760),7831=>array(4,-14,457,939),7832=>array(-9,0,881,888),7833=>array(-13,-222,605,888),7834=>array(41,-14,903,760),7835=>array(31,0,484,939),7836=>array(2,0,484,760),7837=>array(31,0,484,760),7838=>array(34,-14,887,743),7839=>array(41,-14,627,765),7840=>array(-8,-213,787,729),7841=>array(41,-213,625,533),7842=>array(-8,0,787,1048),7843=>array(41,-14,625,866),7844=>array(-8,0,787,1054),7845=>array(41,-14,625,872),7846=>array(-8,0,787,1054),7847=>array(41,-14,625,872),7848=>array(-8,0,787,1116),7849=>array(41,-14,630,934),7850=>array(-8,0,787,1069),7851=>array(41,-14,625,887),7852=>array(-8,-213,787,927),7853=>array(41,-213,625,800),7854=>array(-8,0,787,1057),7855=>array(41,-14,625,901),7856=>array(-8,0,787,1057),7857=>array(41,-14,625,901),7858=>array(-8,0,787,1145),7859=>array(41,-14,625,989),7860=>array(-8,0,787,1069),7861=>array(41,-14,625,913),7862=>array(-8,-213,787,958),7863=>array(41,-213,625,776),7864=>array(47,-213,711,729),7865=>array(41,-213,591,533),7866=>array(47,0,711,1048),7867=>array(41,-14,591,866),7868=>array(47,0,711,950),7869=>array(41,-14,591,792),7870=>array(47,0,717,1054),7871=>array(41,-14,637,872),7872=>array(47,0,711,1054),7873=>array(41,-14,597,872),7874=>array(47,0,735,1116),7875=>array(41,-14,655,934),7876=>array(47,0,711,1069),7877=>array(41,-14,591,887),7878=>array(47,-213,711,927),7879=>array(41,-213,591,800),7880=>array(47,0,422,1048),7881=>array(34,0,355,864),7882=>array(47,-213,422,729),7883=>array(34,-213,355,760),7884=>array(42,-213,828,742),7885=>array(41,-213,627,533),7886=>array(42,-14,828,1048),7887=>array(41,-14,627,866),7888=>array(42,-14,828,1054),7889=>array(41,-14,653,872),7890=>array(42,-14,828,1054),7891=>array(41,-14,627,872),7892=>array(42,-14,828,1116),7893=>array(41,-14,671,934),7894=>array(42,-14,828,1069),7895=>array(41,-14,627,887),7896=>array(42,-213,828,982),7897=>array(41,-213,627,800),7898=>array(42,-14,871,927),7899=>array(42,-14,745,800),7900=>array(42,-14,871,927),7901=>array(42,-14,745,800),7902=>array(42,-14,871,1048),7903=>array(42,-14,745,866),7904=>array(42,-14,871,929),7905=>array(42,-14,745,792),7906=>array(42,-213,871,758),7907=>array(42,-213,745,548),7908=>array(34,-213,850,729),7909=>array(23,-213,693,519),7910=>array(34,-14,850,1048),7911=>array(23,-14,693,866),7912=>array(37,-14,1049,927),7913=>array(25,-14,805,800),7914=>array(37,-14,1049,927),7915=>array(25,-14,805,800),7916=>array(37,-14,1049,1048),7917=>array(25,-14,805,866),7918=>array(37,-14,1049,929),7919=>array(25,-14,805,792),7920=>array(37,-213,1049,816),7921=>array(25,-213,805,548),7922=>array(-9,0,723,931),7923=>array(-13,-222,605,776),7924=>array(-9,-213,723,729),7925=>array(-13,-222,605,519),7926=>array(-9,0,723,1051),7927=>array(-13,-222,605,866),7928=>array(-9,0,723,929),7929=>array(-13,-222,605,792),7930=>array(47,0,1056,729),7931=>array(34,0,676,760),7936=>array(41,-14,746,837),7937=>array(41,-14,746,837),7938=>array(41,-14,746,837),7939=>array(41,-14,746,837),7940=>array(41,-14,746,837),7941=>array(41,-14,746,837),7942=>array(41,-14,746,1009),7943=>array(41,-14,746,1009),7944=>array(-8,0,787,837),7945=>array(-8,0,787,837),7946=>array(2,0,989,837),7947=>array(1,0,989,837),7948=>array(1,0,843,837),7949=>array(3,0,860,837),7950=>array(-8,0,787,1009),7951=>array(-8,0,787,1009),7952=>array(48,-12,554,837),7953=>array(48,-12,554,837),7954=>array(48,-12,554,837),7955=>array(48,-12,554,837),7956=>array(48,-12,554,837),7957=>array(48,-12,554,837),7960=>array(3,0,866,837),7961=>array(2,0,857,837),7962=>array(2,0,1118,837),7963=>array(1,0,1118,837),7964=>array(1,0,1042,837),7965=>array(3,0,1068,837),7968=>array(34,-208,630,837),7969=>array(34,-208,630,837),7970=>array(34,-208,630,837),7971=>array(34,-208,630,837),7972=>array(34,-208,630,837),7973=>array(34,-208,630,837),7974=>array(34,-208,630,1009),7975=>array(34,-208,630,1009),7976=>array(3,0,1055,837),7977=>array(2,0,1049,837),7978=>array(2,0,1313,837),7979=>array(1,0,1316,837),7980=>array(1,0,1234,837),7981=>array(3,0,1263,837),7982=>array(3,0,1152,1009),7983=>array(3,0,1149,1009),7984=>array(34,16,444,837),7985=>array(34,16,444,837),7986=>array(-14,16,444,837),7987=>array(-14,16,444,837),7988=>array(13,16,444,837),7989=>array(-2,16,444,837),7990=>array(28,16,444,1009),7991=>array(24,16,444,1009),7992=>array(3,0,583,837),7993=>array(2,0,571,837),7994=>array(2,0,832,837),7995=>array(1,0,835,837),7996=>array(1,0,753,837),7997=>array(3,0,785,837),7998=>array(3,0,677,1009),7999=>array(3,0,668,1009),8000=>array(41,-14,627,837),8001=>array(41,-14,627,837),8002=>array(41,-14,627,837),8003=>array(41,-14,627,837),8004=>array(41,-14,627,837),8005=>array(41,-14,627,837),8008=>array(3,-14,857,837),8009=>array(2,-14,892,837),8010=>array(2,-14,1197,837),8011=>array(1,-14,1194,837),8012=>array(1,-14,992,837),8013=>array(3,-14,1023,837),8016=>array(34,-1,654,837),8017=>array(34,-1,654,837),8018=>array(34,-1,654,837),8019=>array(34,-1,654,837),8020=>array(34,-1,654,837),8021=>array(34,-1,654,837),8022=>array(34,-1,654,1009),8023=>array(34,-1,654,1009),8025=>array(2,0,931,837),8027=>array(1,0,1195,837),8029=>array(3,0,1142,837),8031=>array(3,0,1028,1009),8032=>array(40,-1,911,837),8033=>array(40,-1,911,837),8034=>array(40,-1,911,837),8035=>array(40,-1,911,837),8036=>array(40,-1,911,837),8037=>array(40,-1,911,837),8038=>array(40,-1,911,1009),8039=>array(40,-1,911,1009),8040=>array(3,0,886,837),8041=>array(2,0,918,837),8042=>array(2,0,1223,837),8043=>array(1,0,1229,837),8044=>array(1,0,1009,837),8045=>array(3,0,1043,837),8046=>array(3,0,978,1009),8047=>array(3,0,1015,1009),8048=>array(41,-14,746,800),8049=>array(41,-14,746,800),8050=>array(48,-12,554,800),8051=>array(48,-12,554,800),8052=>array(34,-208,630,800),8053=>array(34,-208,630,800),8054=>array(14,16,444,800),8055=>array(34,16,444,800),8056=>array(41,-14,627,800),8057=>array(41,-14,627,800),8058=>array(34,-1,654,800),8059=>array(34,-1,654,800),8060=>array(40,-1,911,800),8061=>array(40,-1,911,800),8064=>array(41,-208,746,837),8065=>array(41,-208,746,837),8066=>array(41,-208,746,837),8067=>array(41,-208,746,837),8068=>array(41,-208,746,837),8069=>array(41,-208,746,837),8070=>array(41,-208,746,1009),8071=>array(41,-208,746,1009),8072=>array(-8,-208,787,837),8073=>array(-8,-208,787,837),8074=>array(2,-208,989,837),8075=>array(1,-208,989,837),8076=>array(1,-208,843,837),8077=>array(3,-208,860,837),8078=>array(-8,-208,787,1009),8079=>array(-8,-208,787,1009),8080=>array(34,-208,630,837),8081=>array(34,-208,630,837),8082=>array(34,-208,630,837),8083=>array(34,-208,630,837),8084=>array(34,-208,630,837),8085=>array(34,-208,630,837),8086=>array(34,-208,630,1009),8087=>array(34,-208,630,1009),8088=>array(3,-208,1055,837),8089=>array(2,-208,1049,837),8090=>array(2,-208,1313,837),8091=>array(1,-208,1316,837),8092=>array(1,-208,1234,837),8093=>array(3,-208,1263,837),8094=>array(3,-208,1152,1009),8095=>array(3,-208,1149,1009),8096=>array(40,-208,911,837),8097=>array(40,-208,911,837),8098=>array(40,-208,911,837),8099=>array(40,-208,911,837),8100=>array(40,-208,911,837),8101=>array(40,-208,911,837),8102=>array(40,-208,911,1009),8103=>array(40,-208,911,1009),8104=>array(3,-208,886,837),8105=>array(2,-208,918,837),8106=>array(2,-208,1223,837),8107=>array(1,-208,1229,837),8108=>array(1,-208,1009,837),8109=>array(3,-208,1043,837),8110=>array(3,-208,978,1009),8111=>array(3,-208,1015,1009),8112=>array(41,-14,746,776),8113=>array(41,-14,746,756),8114=>array(41,-208,746,800),8115=>array(41,-208,746,532),8116=>array(41,-208,746,800),8118=>array(41,-14,746,792),8119=>array(41,-208,746,792),8120=>array(-8,0,787,936),8121=>array(-8,0,787,914),8122=>array(1,0,822,800),8123=>array(-8,0,787,800),8124=>array(-8,-208,787,729),8125=>array(167,596,318,837),8126=>array(202,-208,348,-60),8127=>array(167,596,318,837),8128=>array(75,638,425,792),8129=>array(69,645,431,959),8130=>array(34,-208,630,800),8131=>array(34,-208,630,533),8132=>array(34,-208,630,800),8134=>array(34,-208,630,792),8135=>array(34,-208,630,792),8136=>array(1,0,948,800),8137=>array(-16,0,893,800),8138=>array(1,0,1146,800),8139=>array(-16,0,1084,800),8140=>array(47,-208,900,729),8141=>array(43,596,472,837),8142=>array(57,596,445,837),8143=>array(75,596,425,1009),8144=>array(31,16,444,776),8145=>array(34,16,444,756),8146=>array(3,16,444,997),8147=>array(8,16,444,996),8150=>array(19,16,444,792),8151=>array(13,16,444,959),8152=>array(47,0,422,927),8153=>array(47,0,422,914),8154=>array(1,0,668,800),8155=>array(-16,0,606,800),8157=>array(42,596,472,837),8158=>array(41,596,454,837),8159=>array(75,596,425,1009),8160=>array(34,-1,654,776),8161=>array(34,-1,654,756),8162=>array(34,-1,654,997),8163=>array(34,-1,654,996),8164=>array(63,-208,625,837),8165=>array(63,-208,625,837),8166=>array(34,-1,654,792),8167=>array(34,-1,654,959),8168=>array(-9,0,723,927),8169=>array(-9,0,723,914),8170=>array(1,0,1028,800),8171=>array(-16,0,960,800),8172=>array(2,0,885,837),8173=>array(59,645,431,997),8174=>array(69,645,440,996),8175=>array(69,616,331,800),8178=>array(40,-208,911,800),8179=>array(40,-208,911,519),8180=>array(40,-208,911,800),8182=>array(40,-1,911,746),8183=>array(40,-208,911,746),8184=>array(1,-14,1026,800),8185=>array(-16,-14,844,800),8186=>array(1,0,1056,800),8187=>array(-16,0,869,800),8188=>array(45,-208,845,742),8189=>array(169,616,431,800),8190=>array(169,596,320,837),8208=>array(54,202,361,334),8209=>array(54,202,361,334),8210=>array(54,207,642,324),8211=>array(54,207,446,324),8212=>array(54,207,946,324),8213=>array(0,207,1000,324),8214=>array(129,-236,395,764),8215=>array(0,-236,500,-9),8216=>array(69,456,290,742),8217=>array(48,443,269,729),8218=>array(30,-130,251,156),8219=>array(48,443,269,729),8220=>array(69,456,517,742),8221=>array(48,443,496,729),8222=>array(30,-130,478,156),8223=>array(48,443,496,729),8224=>array(28,-96,495,729),8225=>array(28,-96,495,729),8226=>array(144,196,495,547),8227=>array(144,157,534,586),8228=>array(81,-14,267,172),8229=>array(81,-14,593,172),8230=>array(81,-14,919,172),8240=>array(24,-14,1361,742),8241=>array(24,-14,1796,742),8242=>array(20,547,240,729),8243=>array(20,547,423,729),8244=>array(20,547,606,729),8245=>array(20,547,240,729),8246=>array(20,547,425,729),8247=>array(20,547,606,729),8248=>array(101,-238,632,29),8249=>array(77,64,306,522),8250=>array(94,64,323,522),8252=>array(65,-14,562,729),8253=>array(65,-14,541,742),8254=>array(0,663,500,755),8258=>array(22,-37,1001,832),8260=>array(-186,-14,353,742),8261=>array(125,-132,402,760),8262=>array(71,-132,348,760),8263=>array(32,-14,1050,742),8264=>array(65,-14,791,742),8265=>array(65,-14,791,742),8267=>array(72,-96,575,729),8268=>array(75,189,425,541),8269=>array(75,189,425,541),8270=>array(22,0,501,464),8271=>array(26,-161,277,490),8273=>array(53,-14,439,797),8274=>array(9,-93,519,729),8275=>array(49,221,951,406),8279=>array(20,547,789,729),8304=>array(30,326,410,742),8305=>array(21,334,224,752),8308=>array(24,334,404,742),8309=>array(52,326,392,742),8310=>array(40,326,406,742),8311=>array(50,334,387,742),8312=>array(33,326,406,742),8313=>array(34,326,400,742),8314=>array(67,334,461,679),8315=>array(67,475,461,537),8316=>array(67,415,461,598),8317=>array(60,249,265,752),8318=>array(32,249,238,752),8319=>array(46,334,481,632),8320=>array(30,0,410,416),8321=>array(70,8,369,416),8322=>array(42,8,382,416),8323=>array(44,0,398,416),8324=>array(24,8,404,416),8325=>array(52,0,392,416),8326=>array(40,0,406,416),8327=>array(50,8,387,416),8328=>array(33,0,406,416),8329=>array(34,0,400,416),8330=>array(67,8,461,353),8331=>array(67,149,461,211),8332=>array(67,89,461,272),8333=>array(60,-78,265,426),8334=>array(32,-78,238,426),8336=>array(42,0,410,301),8337=>array(42,0,388,301),8338=>array(42,0,411,301),8339=>array(44,8,436,298),8340=>array(42,0,388,301),8341=>array(44,8,481,433),8342=>array(42,8,468,426),8343=>array(44,8,252,433),8344=>array(42,8,673,301),8345=>array(46,8,481,306),8346=>array(42,-106,443,301),8347=>array(44,9,355,315),8348=>array(42,0,315,382),8358=>array(21,0,675,729),8364=>array(-4,-14,649,742),8367=>array(20,-193,1135,723),8369=>array(47,0,760,729),8372=>array(21,-14,855,742),8373=>array(81,-146,649,761),8376=>array(11,0,734,729),8377=>array(45,0,656,729),8451=>array(38,-14,1147,749),8457=>array(38,0,1099,749),8462=>array(34,0,642,760),8463=>array(34,0,642,760),8470=>array(39,-14,1040,731),8482=>array(116,447,840,729),8486=>array(45,0,845,742),8487=>array(45,-13,845,729),8490=>array(47,0,900,729),8491=>array(-8,0,787,928),8498=>array(13,0,663,729),8513=>array(25,-14,723,742),8514=>array(9,0,527,729),8515=>array(43,0,561,729),8516=>array(0,0,744,729),8523=>array(16,-14,860,742),8526=>array(12,0,563,519),8528=>array(59,-14,992,742),8529=>array(59,-14,1005,742),8530=>array(59,-14,1453,742),8531=>array(59,-14,1003,742),8532=>array(42,-14,1003,742),8533=>array(59,-14,997,742),8534=>array(42,-14,997,742),8535=>array(44,-14,997,742),8536=>array(24,-14,997,742),8537=>array(59,-14,1011,742),8538=>array(52,-14,1011,742),8539=>array(59,-14,1011,742),8540=>array(44,-14,1011,742),8541=>array(52,-14,1011,742),8542=>array(50,-14,1011,742),8543=>array(59,-14,801,742),8544=>array(47,0,422,729),8545=>array(47,0,690,729),8546=>array(47,0,959,729),8547=>array(47,0,1107,729),8548=>array(-6,0,790,729),8549=>array(-6,0,1081,729),8550=>array(-6,0,1350,729),8551=>array(-6,0,1618,729),8552=>array(47,0,1068,729),8553=>array(5,0,775,729),8554=>array(5,0,1032,729),8555=>array(5,0,1301,729),8556=>array(47,0,681,729),8557=>array(42,-14,745,742),8558=>array(47,0,825,729),8559=>array(42,0,1060,729),8560=>array(34,0,355,760),8561=>array(34,0,735,760),8562=>array(34,0,1115,760),8563=>array(34,0,986,760),8564=>array(-18,0,606,519),8565=>array(-18,0,936,760),8566=>array(-18,0,1316,760),8567=>array(-18,0,1696,760),8568=>array(34,0,983,760),8569=>array(0,0,603,519),8570=>array(0,0,951,760),8571=>array(0,0,1331,760),8572=>array(34,0,355,760),8573=>array(41,-14,564,533),8574=>array(41,-14,676,760),8575=>array(34,0,1035,533),8576=>array(47,0,1229,729),8577=>array(47,0,825,729),8578=>array(47,0,1229,729),8579=>array(42,-14,745,742),8580=>array(41,-14,564,533),8581=>array(42,-208,745,742),8585=>array(30,-14,1003,742),8592=>array(37,119,781,527),8593=>array(215,0,623,744),8594=>array(57,119,801,527),8595=>array(215,-20,623,724),8596=>array(37,119,801,527),8597=>array(215,-20,623,744),8598=>array(147,29,713,595),8599=>array(125,29,690,595),8600=>array(125,52,690,617),8601=>array(147,52,713,617),8602=>array(37,88,781,558),8603=>array(57,88,801,558),8604=>array(54,191,795,499),8605=>array(42,191,784,499),8606=>array(37,119,781,527),8607=>array(215,0,623,744),8608=>array(57,119,801,527),8609=>array(215,-20,623,724),8610=>array(37,118,789,529),8611=>array(49,118,801,529),8612=>array(37,119,781,527),8613=>array(215,0,623,744),8614=>array(57,119,801,527),8615=>array(215,-20,623,724),8616=>array(215,0,623,744),8617=>array(37,119,781,571),8618=>array(57,119,801,571),8619=>array(37,119,781,571),8620=>array(57,119,801,571),8621=>array(37,119,801,527),8622=>array(37,88,801,558),8623=>array(171,-17,699,730),8624=>array(208,0,610,744),8625=>array(228,0,630,744),8626=>array(208,-20,610,724),8627=>array(228,-20,630,724),8628=>array(130,90,728,614),8629=>array(147,53,671,650),8630=>array(76,141,747,569),8631=>array(91,141,762,569),8632=>array(132,29,713,736),8633=>array(57,-52,781,698),8634=>array(115,48,733,600),8635=>array(104,48,723,600),8636=>array(34,270,781,527),8637=>array(34,119,781,377),8638=>array(365,0,623,747),8639=>array(215,0,473,747),8640=>array(57,270,804,527),8641=>array(57,119,804,377),8642=>array(365,-23,623,724),8643=>array(215,-23,473,724),8644=>array(37,-52,801,698),8645=>array(44,-20,794,744),8646=>array(37,-52,801,698),8647=>array(37,-101,781,747),8648=>array(-5,0,843,744),8649=>array(57,-101,801,747),8650=>array(-5,-20,843,724),8651=>array(34,21,804,625),8652=>array(34,21,804,625),8653=>array(37,88,781,558),8654=>array(37,88,801,558),8655=>array(57,88,801,558),8656=>array(37,119,781,527),8657=>array(215,0,623,744),8658=>array(57,119,801,527),8659=>array(215,-20,623,724),8660=>array(37,119,801,527),8661=>array(215,-20,623,744),8662=>array(147,-31,773,595),8663=>array(65,-31,690,595),8664=>array(65,52,690,677),8665=>array(147,52,773,677),8666=>array(37,70,781,576),8667=>array(57,70,801,576),8668=>array(37,119,781,527),8669=>array(57,119,801,527),8670=>array(215,0,623,744),8671=>array(215,-20,623,724),8672=>array(37,119,781,527),8673=>array(215,0,623,744),8674=>array(57,119,801,527),8675=>array(215,-20,623,724),8676=>array(57,119,781,527),8677=>array(57,119,781,527),8678=>array(37,119,781,527),8679=>array(215,0,623,744),8680=>array(57,119,801,527),8681=>array(215,-20,623,724),8682=>array(215,0,623,744),8683=>array(192,0,646,744),8684=>array(192,0,646,744),8685=>array(192,0,646,744),8686=>array(215,0,623,744),8687=>array(192,0,646,744),8688=>array(57,96,801,550),8689=>array(77,0,767,694),8690=>array(71,0,761,694),8691=>array(215,-20,623,744),8692=>array(57,119,801,527),8693=>array(44,-20,794,744),8694=>array(57,-140,801,786),8695=>array(37,119,781,527),8696=>array(57,119,801,527),8697=>array(37,119,801,527),8698=>array(37,119,781,527),8699=>array(57,119,801,527),8700=>array(37,119,801,527),8701=>array(37,119,781,527),8702=>array(57,119,801,527),8703=>array(37,119,801,527),8704=>array(4,0,637,729),8706=>array(37,-12,499,659),8707=>array(70,0,532,729),8708=>array(70,-120,532,849),8710=>array(20,0,734,729),8711=>array(20,0,734,729),8712=>array(106,0,634,627),8713=>array(106,-138,634,765),8715=>array(106,0,634,627),8716=>array(106,-138,634,765),8719=>array(23,-192,816,719),8720=>array(23,-192,816,719),8721=>array(10,-192,734,719),8722=>array(106,257,732,369),8723=>array(106,0,732,627),8724=>array(106,0,732,681),8725=>array(0,-93,365,729),8727=>array(106,82,585,546),8728=>array(106,161,413,468),8729=>array(106,161,413,468),8730=>array(35,-20,658,827),8731=>array(35,-20,658,940),8732=>array(32,-20,658,928),8733=>array(100,97,572,499),8734=>array(100,97,734,499),8735=>array(118,79,720,681),8736=>array(118,79,720,681),8739=>array(106,-98,218,827),8740=>array(86,-98,521,827),8741=>array(106,-98,423,827),8742=>array(86,-98,687,827),8743=>array(151,0,661,584),8744=>array(151,0,661,584),8745=>array(105,0,732,627),8746=>array(105,-12,732,615),8747=>array(24,-182,555,759),8748=>array(24,-182,946,759),8749=>array(24,-182,1336,759),8760=>array(106,258,732,567),8761=>array(106,60,732,567),8762=>array(106,60,732,567),8763=>array(106,60,732,567),8764=>array(106,222,732,406),8765=>array(106,222,732,406),8770=>array(106,119,732,480),8771=>array(106,147,732,508),8776=>array(106,119,732,508),8784=>array(106,147,732,717),8785=>array(106,-90,732,717),8786=>array(106,-90,732,717),8787=>array(106,-90,732,717),8788=>array(106,110,976,518),8789=>array(106,110,976,518),8800=>array(106,-5,732,631),8801=>array(106,91,732,536),8804=>array(106,0,732,580),8805=>array(106,0,732,580),8834=>array(106,0,732,627),8835=>array(106,0,732,627),8836=>array(106,-138,732,765),8837=>array(106,-138,732,765),8838=>array(106,-85,732,712),8839=>array(106,-85,732,712),8844=>array(105,-12,732,615),8845=>array(105,-12,732,615),8846=>array(105,-12,732,615),8847=>array(106,1,732,627),8848=>array(106,1,732,627),8849=>array(106,-85,732,712),8850=>array(106,-85,732,712),8851=>array(106,0,732,627),8852=>array(106,0,732,627),8853=>array(105,0,732,627),8854=>array(105,0,732,627),8855=>array(105,0,732,627),8856=>array(105,0,732,627),8857=>array(105,0,732,627),8858=>array(105,0,732,627),8859=>array(105,0,732,627),8860=>array(105,0,732,627),8861=>array(105,0,732,627),8862=>array(106,1,732,627),8863=>array(106,1,732,627),8864=>array(106,1,732,627),8865=>array(106,1,732,627),8866=>array(106,0,778,729),8867=>array(106,0,778,729),8868=>array(106,0,854,688),8869=>array(106,0,854,688),8870=>array(106,0,510,729),8871=>array(106,0,510,729),8872=>array(106,0,778,729),8873=>array(106,0,778,729),8874=>array(106,0,778,729),8875=>array(106,0,974,729),8876=>array(106,-123,778,852),8877=>array(106,-123,778,852),8878=>array(106,-123,778,852),8879=>array(106,-123,974,852),8901=>array(106,255,292,440),8962=>array(71,0,763,596),8968=>array(125,-132,402,760),8969=>array(71,-132,348,760),8970=>array(125,-132,402,760),8971=>array(71,-132,348,760),8976=>array(106,140,732,441),8977=>array(3,113,536,646),8984=>array(84,0,843,759),8985=>array(106,140,732,441),8992=>array(226,-250,555,925),8993=>array(22,-239,351,940),8997=>array(84,0,916,723),9000=>array(59,0,1385,729),9085=>array(13,-228,995,85),9115=>array(63,-252,438,928),9116=>array(63,-252,205,940),9117=>array(63,-240,438,940),9118=>array(63,-252,438,928),9119=>array(295,-252,438,940),9120=>array(63,-240,438,940),9121=>array(63,-252,438,928),9122=>array(63,-252,205,940),9123=>array(63,-240,438,940),9124=>array(63,-252,438,928),9125=>array(295,-252,438,940),9126=>array(63,-240,438,940),9127=>array(306,-261,668,928),9128=>array(82,-247,444,934),9129=>array(306,-240,668,934),9130=>array(306,-256,444,934),9131=>array(82,-261,444,928),9132=>array(306,-247,668,934),9133=>array(82,-240,444,934),9134=>array(226,-250,351,940),9167=>array(91,0,854,596),9251=>array(71,-228,763,85),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,779,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-124,854,643),9633=>array(91,-124,854,643),9634=>array(91,-124,854,643),9635=>array(91,-124,854,643),9636=>array(91,-124,854,643),9637=>array(91,-124,854,643),9638=>array(91,-124,854,643),9639=>array(91,-124,854,643),9640=>array(91,-124,854,643),9641=>array(91,-124,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-124,766,643),9651=>array(3,-124,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-124,766,643),9655=>array(3,-124,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-124,766,643),9661=>array(3,-124,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-124,766,643),9665=>array(3,-124,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-124,766,643),9671=>array(3,-124,766,643),9672=>array(3,-124,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,385,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,385,260),9696=>array(55,260,818,645),9697=>array(55,-125,818,260),9698=>array(3,-124,766,643),9699=>array(3,-124,766,643),9700=>array(3,-124,766,643),9701=>array(3,-124,766,643),9702=>array(150,227,440,516),9703=>array(91,-124,854,643),9704=>array(91,-124,854,643),9705=>array(91,-124,854,643),9706=>array(91,-124,854,643),9707=>array(91,-124,854,643),9708=>array(3,-124,766,643),9709=>array(3,-124,766,643),9710=>array(3,-124,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-124,854,643),9713=>array(91,-124,854,643),9714=>array(91,-124,854,643),9715=>array(91,-124,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-124,766,643),9721=>array(3,-124,766,643),9722=>array(3,-124,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-124,766,643),9728=>array(83,0,813,729),9784=>array(80,3,817,721),9785=>array(83,0,813,730),9786=>array(83,0,813,730),9787=>array(83,0,813,730),9788=>array(83,0,813,730),9791=>array(85,-102,528,732),9792=>array(85,-125,646,731),9793=>array(85,-125,646,731),9794=>array(85,-5,831,729),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),10145=>array(57,119,801,527),10181=>array(54,-163,405,769),10182=>array(54,-163,405,769),10208=>array(3,-233,491,807),10216=>array(104,-132,377,759),10217=>array(80,-132,353,759),10224=>array(68,0,770,744),10225=>array(68,-20,770,724),10226=>array(76,48,747,618),10227=>array(91,48,762,618),10228=>array(57,39,996,608),10229=>array(37,119,1376,527),10230=>array(57,119,1396,527),10231=>array(37,119,1396,527),10232=>array(37,119,1376,527),10233=>array(57,119,1396,527),10234=>array(37,119,1396,527),10235=>array(37,119,1376,527),10236=>array(57,119,1396,527),10237=>array(37,119,1376,527),10238=>array(57,119,1396,527),10239=>array(57,119,1396,527),10241=>array(146,586,342,781),10242=>array(146,325,342,521),10243=>array(146,325,342,781),10244=>array(146,65,342,260),10245=>array(146,65,342,781),10246=>array(146,65,342,521),10247=>array(146,65,342,781),10248=>array(439,586,635,781),10249=>array(146,586,635,781),10250=>array(146,325,635,781),10251=>array(146,325,635,781),10252=>array(146,65,635,781),10253=>array(146,65,635,781),10254=>array(146,65,635,781),10255=>array(146,65,635,781),10256=>array(439,325,635,521),10257=>array(146,325,635,781),10258=>array(146,325,635,521),10259=>array(146,325,635,781),10260=>array(146,65,635,521),10261=>array(146,65,635,781),10262=>array(146,65,635,521),10263=>array(146,65,635,781),10264=>array(439,325,635,781),10265=>array(146,325,635,781),10266=>array(146,325,635,781),10267=>array(146,325,635,781),10268=>array(146,65,635,781),10269=>array(146,65,635,781),10270=>array(146,65,635,781),10271=>array(146,65,635,781),10272=>array(439,65,635,260),10273=>array(146,65,635,781),10274=>array(146,65,635,521),10275=>array(146,65,635,781),10276=>array(146,65,635,260),10277=>array(146,65,635,781),10278=>array(146,65,635,521),10279=>array(146,65,635,781),10280=>array(439,65,635,781),10281=>array(146,65,635,781),10282=>array(146,65,635,781),10283=>array(146,65,635,781),10284=>array(146,65,635,781),10285=>array(146,65,635,781),10286=>array(146,65,635,781),10287=>array(146,65,635,781),10288=>array(439,65,635,521),10289=>array(146,65,635,781),10290=>array(146,65,635,521),10291=>array(146,65,635,781),10292=>array(146,65,635,521),10293=>array(146,65,635,781),10294=>array(146,65,635,521),10295=>array(146,65,635,781),10296=>array(439,65,635,781),10297=>array(146,65,635,781),10298=>array(146,65,635,781),10299=>array(146,65,635,781),10300=>array(146,65,635,781),10301=>array(146,65,635,781),10302=>array(146,65,635,781),10303=>array(146,65,635,781),10304=>array(146,-195,342,0),10305=>array(146,-195,342,781),10306=>array(146,-195,342,521),10307=>array(146,-195,342,781),10308=>array(146,-195,342,260),10309=>array(146,-195,342,781),10310=>array(146,-195,342,521),10311=>array(146,-195,342,781),10312=>array(146,-195,635,781),10313=>array(146,-195,635,781),10314=>array(146,-195,635,781),10315=>array(146,-195,635,781),10316=>array(146,-195,635,781),10317=>array(146,-195,635,781),10318=>array(146,-195,635,781),10319=>array(146,-195,635,781),10320=>array(146,-195,635,521),10321=>array(146,-195,635,781),10322=>array(146,-195,635,521),10323=>array(146,-195,635,781),10324=>array(146,-195,635,521),10325=>array(146,-195,635,781),10326=>array(146,-195,635,521),10327=>array(146,-195,635,781),10328=>array(146,-195,635,781),10329=>array(146,-195,635,781),10330=>array(146,-195,635,781),10331=>array(146,-195,635,781),10332=>array(146,-195,635,781),10333=>array(146,-195,635,781),10334=>array(146,-195,635,781),10335=>array(146,-195,635,781),10336=>array(146,-195,635,260),10337=>array(146,-195,635,781),10338=>array(146,-195,635,521),10339=>array(146,-195,635,781),10340=>array(146,-195,635,260),10341=>array(146,-195,635,781),10342=>array(146,-195,635,521),10343=>array(146,-195,635,781),10344=>array(146,-195,635,781),10345=>array(146,-195,635,781),10346=>array(146,-195,635,781),10347=>array(146,-195,635,781),10348=>array(146,-195,635,781),10349=>array(146,-195,635,781),10350=>array(146,-195,635,781),10351=>array(146,-195,635,781),10352=>array(146,-195,635,521),10353=>array(146,-195,635,781),10354=>array(146,-195,635,521),10355=>array(146,-195,635,781),10356=>array(146,-195,635,521),10357=>array(146,-195,635,781),10358=>array(146,-195,635,521),10359=>array(146,-195,635,781),10360=>array(146,-195,635,781),10361=>array(146,-195,635,781),10362=>array(146,-195,635,781),10363=>array(146,-195,635,781),10364=>array(146,-195,635,781),10365=>array(146,-195,635,781),10366=>array(146,-195,635,781),10367=>array(146,-195,635,781),10368=>array(439,-195,635,0),10369=>array(146,-195,635,781),10370=>array(146,-195,635,521),10371=>array(146,-195,635,781),10372=>array(146,-195,635,260),10373=>array(146,-195,635,781),10374=>array(146,-195,635,521),10375=>array(146,-195,635,781),10376=>array(439,-195,635,781),10377=>array(146,-195,635,781),10378=>array(146,-195,635,781),10379=>array(146,-195,635,781),10380=>array(146,-195,635,781),10381=>array(146,-195,635,781),10382=>array(146,-195,635,781),10383=>array(146,-195,635,781),10384=>array(439,-195,635,521),10385=>array(146,-195,635,781),10386=>array(146,-195,635,521),10387=>array(146,-195,635,781),10388=>array(146,-195,635,521),10389=>array(146,-195,635,781),10390=>array(146,-195,635,521),10391=>array(146,-195,635,781),10392=>array(439,-195,635,781),10393=>array(146,-195,635,781),10394=>array(146,-195,635,781),10395=>array(146,-195,635,781),10396=>array(146,-195,635,781),10397=>array(146,-195,635,781),10398=>array(146,-195,635,781),10399=>array(146,-195,635,781),10400=>array(439,-195,635,260),10401=>array(146,-195,635,781),10402=>array(146,-195,635,521),10403=>array(146,-195,635,781),10404=>array(146,-195,635,260),10405=>array(146,-195,635,781),10406=>array(146,-195,635,521),10407=>array(146,-195,635,781),10408=>array(439,-195,635,781),10409=>array(146,-195,635,781),10410=>array(146,-195,635,781),10411=>array(146,-195,635,781),10412=>array(146,-195,635,781),10413=>array(146,-195,635,781),10414=>array(146,-195,635,781),10415=>array(146,-195,635,781),10416=>array(439,-195,635,521),10417=>array(146,-195,635,781),10418=>array(146,-195,635,521),10419=>array(146,-195,635,781),10420=>array(146,-195,635,521),10421=>array(146,-195,635,781),10422=>array(146,-195,635,521),10423=>array(146,-195,635,781),10424=>array(439,-195,635,781),10425=>array(146,-195,635,781),10426=>array(146,-195,635,781),10427=>array(146,-195,635,781),10428=>array(146,-195,635,781),10429=>array(146,-195,635,781),10430=>array(146,-195,635,781),10431=>array(146,-195,635,781),10432=>array(146,-195,635,0),10433=>array(146,-195,635,781),10434=>array(146,-195,635,521),10435=>array(146,-195,635,781),10436=>array(146,-195,635,260),10437=>array(146,-195,635,781),10438=>array(146,-195,635,521),10439=>array(146,-195,635,781),10440=>array(146,-195,635,781),10441=>array(146,-195,635,781),10442=>array(146,-195,635,781),10443=>array(146,-195,635,781),10444=>array(146,-195,635,781),10445=>array(146,-195,635,781),10446=>array(146,-195,635,781),10447=>array(146,-195,635,781),10448=>array(146,-195,635,521),10449=>array(146,-195,635,781),10450=>array(146,-195,635,521),10451=>array(146,-195,635,781),10452=>array(146,-195,635,521),10453=>array(146,-195,635,781),10454=>array(146,-195,635,521),10455=>array(146,-195,635,781),10456=>array(146,-195,635,781),10457=>array(146,-195,635,781),10458=>array(146,-195,635,781),10459=>array(146,-195,635,781),10460=>array(146,-195,635,781),10461=>array(146,-195,635,781),10462=>array(146,-195,635,781),10463=>array(146,-195,635,781),10464=>array(146,-195,635,260),10465=>array(146,-195,635,781),10466=>array(146,-195,635,521),10467=>array(146,-195,635,781),10468=>array(146,-195,635,260),10469=>array(146,-195,635,781),10470=>array(146,-195,635,521),10471=>array(146,-195,635,781),10472=>array(146,-195,635,781),10473=>array(146,-195,635,781),10474=>array(146,-195,635,781),10475=>array(146,-195,635,781),10476=>array(146,-195,635,781),10477=>array(146,-195,635,781),10478=>array(146,-195,635,781),10479=>array(146,-195,635,781),10480=>array(146,-195,635,521),10481=>array(146,-195,635,781),10482=>array(146,-195,635,521),10483=>array(146,-195,635,781),10484=>array(146,-195,635,521),10485=>array(146,-195,635,781),10486=>array(146,-195,635,521),10487=>array(146,-195,635,781),10488=>array(146,-195,635,781),10489=>array(146,-195,635,781),10490=>array(146,-195,635,781),10491=>array(146,-195,635,781),10492=>array(146,-195,635,781),10493=>array(146,-195,635,781),10494=>array(146,-195,635,781),10495=>array(146,-195,635,781),10496=>array(57,119,801,527),10497=>array(57,119,801,527),10498=>array(37,119,781,527),10499=>array(57,119,801,527),10500=>array(37,119,801,527),10501=>array(57,119,801,527),10502=>array(37,119,781,527),10503=>array(57,119,801,527),10504=>array(215,-20,623,724),10505=>array(215,0,623,744),10506=>array(166,0,672,744),10507=>array(166,-20,672,724),10508=>array(37,119,781,527),10509=>array(57,119,801,527),10510=>array(37,119,781,527),10511=>array(57,119,801,527),10512=>array(49,118,801,529),10513=>array(54,119,801,527),10514=>array(215,0,623,724),10515=>array(215,0,623,724),10516=>array(49,118,801,529),10517=>array(49,118,801,529),10518=>array(49,118,801,529),10519=>array(49,118,801,529),10520=>array(49,118,801,529),10521=>array(57,118,789,529),10522=>array(49,118,781,529),10523=>array(57,118,789,529),10524=>array(49,118,781,529),10525=>array(37,119,781,527),10526=>array(57,119,801,527),10527=>array(37,119,781,527),10528=>array(57,119,801,527),10529=>array(147,52,690,595),10530=>array(147,52,690,595),10531=>array(147,-45,650,595),10532=>array(188,-45,690,595),10533=>array(188,52,690,692),10534=>array(147,52,650,692),10535=>array(125,29,713,595),10536=>array(125,29,690,617),10537=>array(125,52,713,617),10538=>array(147,29,713,617),10539=>array(125,29,713,617),10540=>array(125,29,713,617),10541=>array(125,29,690,617),10542=>array(125,29,690,617),10543=>array(125,29,713,617),10544=>array(125,29,713,617),10545=>array(125,29,713,595),10546=>array(125,29,713,595),10547=>array(42,119,801,527),10548=>array(146,94,708,623),10549=>array(146,80,708,608),10550=>array(147,70,675,632),10551=>array(163,70,691,632),10552=>array(284,-13,591,735),10553=>array(247,-13,554,735),10554=>array(51,188,799,495),10555=>array(39,151,787,459),10556=>array(39,78,787,495),10557=>array(51,0,799,495),10558=>array(140,58,691,593),10559=>array(146,58,698,593),10560=>array(134,48,704,719),10561=>array(134,48,704,719),10562=>array(37,-52,801,698),10563=>array(37,-52,801,698),10564=>array(37,-52,801,698),10565=>array(57,0,801,527),10566=>array(37,0,781,527),10567=>array(57,119,801,527),10568=>array(37,119,801,527),10569=>array(215,-12,623,744),10570=>array(34,119,804,527),10571=>array(34,119,804,527),10572=>array(215,-23,623,747),10573=>array(215,-23,623,747),10574=>array(34,270,804,527),10575=>array(365,-23,623,747),10576=>array(34,119,804,377),10577=>array(215,-23,473,747),10578=>array(57,131,781,527),10579=>array(57,131,781,527),10580=>array(227,0,623,724),10581=>array(227,0,623,724),10582=>array(57,119,781,515),10583=>array(57,119,781,515),10584=>array(215,0,611,724),10585=>array(215,0,611,724),10586=>array(34,131,781,527),10587=>array(57,131,804,527),10588=>array(227,0,623,747),10589=>array(227,-23,623,724),10590=>array(34,119,781,515),10591=>array(57,119,804,515),10592=>array(215,0,611,747),10593=>array(215,-23,611,724),10594=>array(34,21,781,625),10595=>array(117,0,721,747),10596=>array(57,21,804,625),10597=>array(117,-23,721,724),10598=>array(34,172,804,625),10599=>array(34,21,804,475),10600=>array(34,172,804,625),10601=>array(34,21,804,475),10602=>array(34,184,781,613),10603=>array(34,34,781,462),10604=>array(57,184,804,613),10605=>array(57,34,804,462),10606=>array(117,-23,721,747),10607=>array(117,-23,721,747),10608=>array(57,270,781,571),10609=>array(57,119,801,757),10610=>array(57,119,801,610),10611=>array(37,36,781,527),10612=>array(57,36,801,527),10613=>array(57,-138,801,527),10614=>array(37,-76,781,791),10615=>array(37,42,975,604),10616=>array(57,-76,801,791),10617=>array(57,-76,801,748),10618=>array(37,10,903,637),10619=>array(37,-76,781,748),10620=>array(164,11,687,636),10621=>array(151,11,674,636),10622=>array(106,62,731,584),10623=>array(106,54,731,576),10731=>array(3,-233,491,807),10764=>array(24,-182,1727,759),10765=>array(25,-182,586,760),10766=>array(25,-182,586,760),10799=>array(129,23,709,604),10858=>array(106,222,732,567),10859=>array(106,60,732,567),11008=>array(71,-28,690,591),11009=>array(148,-28,767,591),11010=>array(71,52,690,671),11011=>array(148,52,767,671),11012=>array(37,119,801,527),11013=>array(37,119,781,527),11014=>array(215,0,623,744),11015=>array(215,-20,623,724),11016=>array(71,-28,690,591),11017=>array(148,-28,767,591),11018=>array(71,52,690,671),11019=>array(148,52,767,671),11020=>array(37,119,801,527),11021=>array(215,-20,623,744),11022=>array(57,112,801,514),11023=>array(57,132,801,534),11024=>array(37,112,781,514),11025=>array(37,132,781,534),11026=>array(91,-124,854,643),11027=>array(91,-124,854,643),11028=>array(91,-124,854,643),11029=>array(91,-124,854,643),11030=>array(3,-124,766,643),11031=>array(3,-124,766,643),11032=>array(3,-124,766,643),11033=>array(3,-124,766,643),11034=>array(91,-124,854,643),11360=>array(36,0,681,729),11361=>array(4,0,385,760),11363=>array(36,0,727,729),11364=>array(47,-208,837,729),11367=>array(47,-157,900,729),11368=>array(31,-138,704,760),11369=>array(47,-157,900,729),11370=>array(34,-138,710,760),11371=>array(37,-157,694,729),11372=>array(35,-138,534,519),11373=>array(42,-14,808,742),11374=>array(42,-208,1060,729),11375=>array(-8,0,787,729),11376=>array(42,-14,808,742),11377=>array(-18,0,709,533),11378=>array(-9,0,1221,730),11379=>array(-9,0,984,533),11381=>array(47,0,734,729),11382=>array(34,0,567,519),11383=>array(47,-14,857,533),11385=>array(29,-14,537,760),11386=>array(41,-14,627,533),11387=>array(30,0,588,519),11388=>array(44,-124,274,426),11389=>array(-4,326,498,734),11390=>array(66,-208,662,742),11391=>array(37,-208,730,729),11520=>array(43,-53,730,514),11521=>array(42,-218,593,514),11522=>array(48,-218,761,514),11523=>array(67,-2,606,759),11524=>array(48,-217,745,514),11525=>array(44,-217,918,514),11526=>array(44,0,713,759),11527=>array(44,0,917,514),11528=>array(52,0,576,514),11529=>array(42,-217,604,729),11530=>array(38,0,912,514),11531=>array(68,-4,588,759),11532=>array(42,0,604,759),11533=>array(44,-2,918,514),11534=>array(44,0,802,514),11535=>array(44,-218,821,759),11536=>array(44,0,917,759),11537=>array(42,0,603,759),11538=>array(43,-217,588,515),11539=>array(44,-221,915,675),11540=>array(64,-217,875,555),11541=>array(43,-218,820,759),11542=>array(42,0,602,514),11543=>array(42,-217,604,514),11544=>array(42,-217,603,514),11545=>array(58,-217,607,759),11546=>array(80,-217,646,514),11547=>array(64,0,859,759),11548=>array(77,-217,938,514),11549=>array(43,-217,639,515),11550=>array(72,-217,634,514),11551=>array(44,-218,809,518),11552=>array(46,0,1068,514),11553=>array(43,-217,590,759),11554=>array(57,-3,577,579),11555=>array(42,-217,604,759),11556=>array(42,-217,707,514),11557=>array(73,-4,841,759),11800=>array(45,-14,521,742),11807=>array(106,60,732,406),11810=>array(125,403,402,760),11811=>array(71,403,348,760),11812=>array(125,-132,402,225),11813=>array(71,-132,348,225),11822=>array(65,-14,541,742),42564=>array(66,-14,662,742),42565=>array(43,-14,522,533),42566=>array(47,0,422,729),42567=>array(36,0,367,519),42576=>array(6,0,1287,729),42577=>array(15,0,1054,519),42580=>array(59,-14,1240,742),42581=>array(44,-14,973,533),42582=>array(47,0,1298,729),42583=>array(53,-14,1016,533),42760=>array(96,0,404,693),42761=>array(96,0,404,693),42762=>array(96,0,404,693),42763=>array(96,0,404,693),42764=>array(96,0,404,693),42765=>array(96,0,404,693),42766=>array(96,0,404,693),42767=>array(96,0,404,693),42768=>array(96,0,404,693),42769=>array(96,0,404,693),42770=>array(96,0,404,693),42771=>array(96,0,404,693),42772=>array(96,0,404,693),42773=>array(96,0,404,693),42774=>array(96,0,404,693),42779=>array(63,326,321,743),42780=>array(63,315,321,731),42781=>array(80,318,197,734),42782=>array(80,326,197,742),42783=>array(80,0,197,416),42790=>array(47,-208,900,729),42791=>array(31,-222,630,760),42792=>array(11,-203,970,729),42793=>array(24,-203,874,680),42794=>array(35,-14,656,742),42795=>array(45,-12,578,742),42796=>array(41,-14,609,729),42797=>array(41,-222,574,519),42798=>array(41,-104,717,729),42799=>array(41,-240,682,519),42800=>array(29,0,581,519),42801=>array(43,-14,522,533),42802=>array(-8,0,1312,729),42803=>array(41,-14,963,533),42804=>array(-8,-14,1218,742),42805=>array(41,-14,964,533),42806=>array(-31,-14,1146,729),42807=>array(41,-14,974,533),42808=>array(-8,0,1030,729),42809=>array(41,-14,838,533),42810=>array(-8,0,1030,729),42811=>array(41,-14,838,533),42812=>array(-8,-208,1008,729),42813=>array(41,-222,871,533),42814=>array(42,-14,745,742),42815=>array(41,-14,564,533),42816=>array(36,0,900,729),42817=>array(31,0,710,760),42822=>array(47,0,894,729),42823=>array(34,0,556,760),42826=>array(-5,-14,1015,742),42827=>array(-5,-14,774,533),42830=>array(42,-14,1405,742),42831=>array(41,-14,1020,533),42856=>array(47,-208,781,729),42857=>array(23,-208,682,519),42875=>array(53,-208,681,742),42876=>array(29,-208,537,533),42880=>array(22,0,656,729),42881=>array(25,-240,346,519),42882=>array(53,-208,843,743),42883=>array(34,-208,716,533),42884=>array(53,-208,681,742),42885=>array(29,-208,537,533),42886=>array(18,-14,755,729),42887=>array(17,-14,574,519),42891=>array(128,225,311,729),42892=>array(95,458,211,729),42893=>array(31,0,861,729),42896=>array(44,-157,894,729),42897=>array(34,-138,710,533),42922=>array(-120,0,900,729),43002=>array(34,0,1035,519),43003=>array(13,0,663,729),43004=>array(25,0,705,729),43005=>array(47,0,1065,729),43006=>array(47,0,422,928),43007=>array(-8,0,1297,729),62464=>array(50,-21,655,871),62465=>array(56,-21,660,870),62466=>array(50,-21,715,869),62467=>array(56,-21,943,870),62468=>array(50,-21,644,870),62469=>array(50,-21,655,871),62470=>array(22,-21,720,870),62471=>array(56,-20,981,870),62472=>array(56,-21,660,870),62473=>array(56,-21,660,870),62474=>array(56,-27,1252,870),62475=>array(56,-21,661,870),62476=>array(73,-21,677,882),62477=>array(56,-152,947,870),62478=>array(56,-21,660,870),62479=>array(56,-21,660,871),62480=>array(56,-21,994,854),62481=>array(0,-21,741,870),62482=>array(56,-21,793,870),62483=>array(28,-21,727,870),62484=>array(56,-21,940,870),62485=>array(56,-21,660,846),62486=>array(56,-21,932,870),62487=>array(56,-21,659,869),62488=>array(22,-21,667,870),62489=>array(73,-21,677,870),62490=>array(56,-21,724,864),62491=>array(56,-21,660,870),62492=>array(73,-21,717,870),62493=>array(56,-21,661,904),62494=>array(0,-21,725,870),62495=>array(51,-31,885,869),62496=>array(56,-21,660,876),62497=>array(73,-21,770,873),62498=>array(56,-63,660,870),62499=>array(56,-21,660,889),62500=>array(56,-21,660,870),62501=>array(56,-21,717,870),62502=>array(56,-20,956,870),62504=>array(63,-217,836,759),63173=>array(41,-14,627,756),63185=>array(57,616,443,816),63188=>array(75,624,425,840),64256=>array(31,0,875,760),64257=>array(31,0,704,760),64258=>array(31,0,702,760),64259=>array(31,0,1095,760),64260=>array(31,0,1092,760),64261=>array(32,-14,839,760),64262=>array(43,-14,967,748),65533=>array(24,-108,1089,956),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>348,33=>439,34=>521,35=>838,36=>696,37=>950,38=>903,39=>306,40=>473,41=>473,42=>523,43=>838,44=>348,45=>415,46=>348,47=>365,48=>696,49=>696,50=>696,51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>369,59=>369,60=>838,61=>838,62=>838,63=>586,64=>1000,65=>776,66=>845,67=>796,68=>867,69=>762,70=>710,71=>854,72=>945,73=>468,74=>473,75=>869,76=>703,77=>1107,78=>914,79=>871,80=>752,81=>871,82=>831,83=>722,84=>744,85=>872,86=>776,87=>1123,88=>776,89=>714,90=>730,91=>473,92=>365,93=>473,94=>838,95=>500,96=>500,97=>648,98=>699,99=>609,100=>699,101=>636,102=>430,103=>699,104=>727,105=>380,106=>362,107=>693,108=>380,109=>1058,110=>727,111=>667,112=>699,113=>699,114=>527,115=>563,116=>462,117=>727,118=>581,119=>861,120=>596,121=>581,122=>568,123=>643,124=>364,125=>643,126=>838,160=>348,161=>439,162=>696,163=>696,164=>636,165=>696,166=>364,167=>523,168=>500,169=>1000,170=>487,171=>625,172=>838,173=>415,174=>1000,175=>500,176=>500,177=>838,178=>438,179=>438,180=>500,181=>732,182=>636,183=>348,184=>500,185=>438,186=>500,187=>625,188=>1043,189=>1043,190=>1043,191=>586,192=>776,193=>776,194=>776,195=>776,196=>776,197=>776,198=>1034,199=>796,200=>762,201=>762,202=>762,203=>762,204=>468,205=>468,206=>468,207=>468,208=>874,209=>914,210=>871,211=>871,212=>871,213=>871,214=>871,215=>838,216=>871,217=>872,218=>872,219=>872,220=>872,221=>714,222=>757,223=>760,224=>648,225=>648,226=>648,227=>648,228=>648,229=>648,230=>975,231=>609,232=>636,233=>636,234=>636,235=>636,236=>380,237=>380,238=>380,239=>380,240=>667,241=>727,242=>667,243=>667,244=>667,245=>667,246=>667,247=>838,248=>667,249=>727,250=>727,251=>727,252=>727,253=>581,254=>699,255=>581,256=>776,257=>648,258=>776,259=>648,260=>776,261=>648,262=>796,263=>609,264=>796,265=>609,266=>796,267=>609,268=>796,269=>609,270=>867,271=>699,272=>874,273=>699,274=>762,275=>636,276=>762,277=>636,278=>762,279=>636,280=>762,281=>636,282=>762,283=>636,284=>854,285=>699,286=>854,287=>699,288=>854,289=>699,290=>854,291=>699,292=>945,293=>727,294=>945,295=>727,296=>468,297=>380,298=>468,299=>380,300=>468,301=>380,302=>468,303=>380,304=>468,305=>380,306=>942,307=>751,308=>473,309=>362,310=>869,311=>693,312=>693,313=>703,314=>380,315=>703,316=>380,317=>703,318=>380,319=>703,320=>380,321=>710,322=>385,323=>914,324=>727,325=>914,326=>727,327=>914,328=>727,329=>1008,330=>872,331=>727,332=>871,333=>667,334=>871,335=>667,336=>871,337=>667,338=>1180,339=>1028,340=>831,341=>527,342=>831,343=>527,344=>831,345=>527,346=>722,347=>563,348=>722,349=>563,350=>722,351=>563,352=>722,353=>563,354=>744,355=>462,356=>744,357=>462,358=>744,359=>462,360=>872,361=>727,362=>872,363=>727,364=>872,365=>727,366=>872,367=>727,368=>872,369=>727,370=>872,371=>727,372=>1123,373=>861,374=>714,375=>581,376=>714,377=>730,378=>568,379=>730,380=>568,381=>730,382=>568,383=>430,384=>699,385=>845,386=>854,387=>699,388=>854,389=>699,390=>796,391=>796,392=>609,393=>874,394=>867,395=>854,396=>699,397=>667,398=>762,399=>871,400=>721,401=>710,402=>430,403=>854,404=>771,405=>1043,406=>468,407=>468,408=>869,409=>693,410=>380,411=>701,412=>1058,413=>914,414=>727,415=>871,416=>871,417=>667,418=>1200,419=>943,420=>752,421=>699,422=>831,423=>722,424=>563,425=>707,426=>331,427=>462,428=>744,429=>462,430=>744,431=>872,432=>727,433=>890,434=>890,435=>714,436=>708,437=>730,438=>568,439=>657,440=>657,441=>657,442=>657,443=>696,444=>754,445=>568,446=>536,447=>716,448=>295,449=>492,450=>459,451=>295,452=>1597,453=>1435,454=>1267,455=>1176,456=>1065,457=>742,458=>1387,459=>1276,460=>1089,461=>776,462=>648,463=>468,464=>380,465=>871,466=>667,467=>872,468=>727,469=>872,470=>727,471=>872,472=>727,473=>872,474=>727,475=>872,476=>727,477=>636,478=>776,479=>648,480=>776,481=>648,482=>1034,483=>975,484=>896,485=>699,486=>854,487=>699,488=>869,489=>693,490=>871,491=>667,492=>871,493=>667,494=>657,495=>568,496=>380,497=>1597,498=>1435,499=>1267,500=>854,501=>699,502=>1221,503=>787,504=>914,505=>727,506=>776,507=>648,508=>1034,509=>975,510=>871,511=>667,512=>776,513=>648,514=>776,515=>648,516=>762,517=>636,518=>762,519=>636,520=>468,521=>380,522=>468,523=>380,524=>871,525=>667,526=>871,527=>667,528=>831,529=>527,530=>831,531=>527,532=>872,533=>727,534=>872,535=>727,536=>722,537=>563,538=>744,539=>462,540=>690,541=>607,542=>945,543=>727,544=>872,545=>791,546=>703,547=>616,548=>730,549=>568,550=>776,551=>648,552=>762,553=>636,554=>871,555=>667,556=>871,557=>667,558=>871,559=>667,560=>871,561=>667,562=>714,563=>581,564=>573,565=>922,566=>564,567=>362,568=>1031,569=>1031,570=>776,571=>796,572=>609,573=>703,574=>744,575=>563,576=>568,577=>660,578=>547,579=>845,580=>872,581=>776,582=>762,583=>636,584=>473,585=>387,586=>848,587=>699,588=>831,589=>527,590=>714,591=>581,592=>648,593=>699,594=>699,595=>699,596=>609,597=>609,598=>699,599=>730,600=>636,601=>636,602=>907,603=>608,604=>562,605=>907,606=>720,607=>387,608=>699,609=>699,610=>626,611=>601,612=>627,613=>727,614=>727,615=>727,616=>380,617=>380,618=>380,619=>409,620=>514,621=>380,622=>795,623=>1058,624=>1058,625=>1058,626=>727,627=>727,628=>712,629=>667,630=>1061,631=>749,632=>667,633=>571,634=>571,635=>571,636=>527,637=>527,638=>452,639=>487,640=>801,641=>801,642=>563,643=>331,644=>430,645=>540,646=>331,647=>492,648=>462,649=>727,650=>679,651=>694,652=>641,653=>907,654=>635,655=>727,656=>568,657=>568,658=>568,659=>568,660=>536,661=>536,662=>536,663=>545,664=>871,665=>695,666=>720,667=>626,668=>732,669=>384,670=>740,671=>646,672=>699,673=>536,674=>536,675=>1117,676=>1179,677=>1117,678=>938,679=>715,680=>946,681=>1039,682=>870,683=>795,684=>662,685=>443,686=>613,687=>717,688=>521,689=>519,690=>313,691=>414,692=>414,693=>480,694=>527,695=>662,696=>485,697=>302,698=>521,699=>348,700=>348,701=>348,702=>366,703=>366,704=>313,705=>313,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>282,713=>500,714=>500,715=>500,716=>282,717=>500,720=>369,721=>369,722=>366,723=>366,726=>392,727=>392,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>417,736=>378,737=>292,738=>395,739=>475,740=>313,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500,750=>553,751=>500,752=>500,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>779,881=>576,882=>803,883=>777,884=>302,885=>302,886=>963,887=>737,890=>500,891=>609,892=>609,893=>609,894=>369,900=>500,901=>500,902=>776,903=>348,904=>947,905=>1118,906=>662,908=>887,910=>953,911=>911,912=>484,913=>776,914=>845,915=>710,916=>776,917=>762,918=>730,919=>945,920=>871,921=>468,922=>869,923=>776,924=>1107,925=>914,926=>704,927=>871,928=>944,929=>752,931=>707,932=>744,933=>714,934=>871,935=>776,936=>913,937=>890,938=>468,939=>714,940=>770,941=>608,942=>727,943=>484,944=>694,945=>770,946=>664,947=>660,948=>667,949=>608,950=>592,951=>727,952=>667,953=>484,954=>750,955=>701,956=>732,957=>694,958=>592,959=>667,960=>732,961=>665,962=>609,963=>737,964=>673,965=>694,966=>905,967=>658,968=>941,969=>952,970=>484,971=>694,972=>667,973=>694,974=>952,975=>869,976=>667,977=>849,978=>764,979=>969,980=>764,981=>941,982=>952,983=>655,984=>871,985=>667,986=>796,987=>609,988=>710,989=>527,990=>590,991=>660,992=>796,993=>667,1008=>655,1009=>665,1010=>609,1011=>362,1012=>871,1013=>609,1014=>609,1015=>757,1016=>699,1017=>796,1018=>1107,1019=>860,1020=>692,1021=>796,1022=>796,1023=>796,1024=>762,1025=>762,1026=>901,1027=>690,1028=>795,1029=>722,1030=>468,1031=>468,1032=>473,1033=>1202,1034=>1262,1035=>963,1036=>910,1037=>945,1038=>812,1039=>945,1040=>814,1041=>854,1042=>845,1043=>690,1044=>889,1045=>762,1046=>1312,1047=>721,1048=>945,1049=>945,1050=>910,1051=>884,1052=>1107,1053=>945,1054=>871,1055=>944,1056=>752,1057=>796,1058=>744,1059=>812,1060=>949,1061=>776,1062=>966,1063=>913,1064=>1268,1065=>1293,1066=>957,1067=>1202,1068=>825,1069=>795,1070=>1287,1071=>882,1072=>648,1073=>667,1074=>695,1075=>613,1076=>667,1077=>636,1078=>1010,1079=>638,1080=>742,1081=>742,1082=>722,1083=>705,1084=>869,1085=>732,1086=>667,1087=>732,1088=>699,1089=>609,1090=>620,1091=>640,1092=>902,1093=>596,1094=>739,1095=>732,1096=>1075,1097=>1082,1098=>767,1099=>1002,1100=>679,1101=>609,1102=>1025,1103=>739,1104=>636,1105=>636,1106=>719,1107=>613,1108=>609,1109=>563,1110=>380,1111=>380,1112=>362,1113=>988,1114=>1015,1115=>727,1116=>722,1117=>742,1118=>640,1119=>732,1122=>880,1123=>703,1124=>1195,1125=>963,1130=>1312,1131=>1010,1132=>1630,1133=>1297,1136=>1096,1137=>1105,1138=>871,1139=>652,1140=>916,1141=>749,1142=>916,1143=>749,1164=>846,1165=>673,1168=>700,1169=>618,1170=>690,1171=>613,1172=>868,1173=>716,1174=>1312,1175=>1010,1176=>721,1177=>638,1178=>947,1179=>744,1182=>910,1183=>722,1184=>1041,1185=>827,1186=>966,1187=>739,1188=>1167,1189=>956,1190=>1345,1191=>1059,1194=>796,1195=>609,1196=>744,1197=>620,1198=>714,1199=>581,1200=>714,1201=>581,1202=>866,1203=>649,1204=>1022,1205=>807,1206=>928,1207=>739,1210=>910,1211=>727,1216=>468,1217=>1312,1218=>1010,1219=>869,1220=>693,1223=>945,1224=>732,1227=>913,1228=>732,1231=>380,1232=>814,1233=>648,1234=>814,1235=>648,1236=>1034,1237=>975,1238=>762,1239=>636,1240=>871,1241=>636,1242=>871,1243=>636,1244=>1312,1245=>1010,1246=>721,1247=>638,1248=>657,1249=>568,1250=>945,1251=>742,1252=>945,1253=>742,1254=>871,1255=>667,1256=>871,1257=>667,1258=>871,1259=>667,1260=>795,1261=>609,1262=>812,1263=>640,1264=>812,1265=>640,1266=>812,1267=>640,1268=>913,1269=>732,1270=>690,1271=>613,1272=>1202,1273=>1002,1296=>721,1297=>638,1298=>884,1299=>705,1300=>1248,1301=>945,1306=>820,1307=>640,1308=>1028,1309=>856,1329=>942,1330=>832,1331=>894,1332=>909,1333=>822,1334=>821,1335=>747,1336=>832,1337=>1125,1338=>894,1339=>803,1340=>722,1341=>1188,1342=>887,1343=>842,1344=>737,1345=>863,1346=>918,1347=>851,1348=>977,1349=>833,1350=>914,1351=>843,1352=>871,1353=>818,1354=>1034,1355=>846,1356=>964,1357=>871,1358=>914,1359=>808,1360=>808,1361=>836,1362=>710,1363=>955,1364=>891,1365=>871,1366=>963,1369=>307,1370=>264,1371=>293,1372=>391,1373=>323,1374=>439,1375=>500,1377=>1055,1378=>695,1379=>776,1380=>801,1381=>729,1382=>742,1383=>599,1384=>733,1385=>909,1386=>768,1387=>724,1388=>398,1389=>1087,1390=>695,1391=>719,1392=>737,1393=>684,1394=>738,1395=>703,1396=>724,1397=>359,1398=>719,1399=>496,1400=>738,1401=>428,1402=>1059,1403=>668,1404=>744,1405=>724,1406=>724,1407=>1040,1408=>724,1409=>713,1410=>493,1411=>1040,1412=>734,1413=>693,1414=>956,1415=>833,1417=>340,1418=>388,4256=>755,4257=>936,4258=>866,4259=>874,4260=>781,4261=>1078,4262=>1014,4263=>1213,4264=>643,4265=>818,4266=>1051,4267=>1051,4268=>796,4269=>1135,4270=>969,4271=>902,4272=>1109,4273=>792,4274=>756,4275=>1076,4276=>976,4277=>1066,4278=>811,4279=>833,4280=>821,4281=>833,4282=>908,4283=>1077,4284=>769,4285=>822,4286=>813,4287=>1111,4288=>1123,4289=>802,4290=>892,4291=>802,4292=>880,4293=>1063,4304=>594,4305=>625,4306=>643,4307=>887,4308=>615,4309=>611,4310=>667,4311=>915,4312=>613,4313=>600,4314=>1120,4315=>640,4316=>640,4317=>879,4318=>624,4319=>634,4320=>877,4321=>666,4322=>780,4323=>751,4324=>869,4325=>639,4326=>912,4327=>622,4328=>647,4329=>640,4330=>729,4331=>641,4332=>630,4333=>629,4334=>670,4335=>753,4336=>625,4337=>657,4338=>625,4339=>625,4340=>624,4341=>670,4342=>940,4343=>680,4344=>636,4345=>672,4346=>625,4347=>588,4348=>354,7424=>641,7425=>892,7426=>940,7427=>695,7428=>609,7429=>675,7430=>675,7431=>617,7432=>509,7433=>320,7434=>561,7435=>722,7436=>617,7437=>869,7438=>737,7439=>667,7440=>609,7441=>628,7442=>628,7443=>667,7444=>989,7445=>598,7446=>667,7447=>667,7448=>586,7449=>801,7450=>801,7451=>620,7452=>647,7453=>664,7454=>923,7455=>655,7456=>581,7457=>861,7458=>568,7459=>568,7460=>588,7461=>802,7462=>586,7463=>641,7464=>732,7465=>586,7466=>854,7467=>705,7468=>489,7469=>651,7470=>532,7471=>532,7472=>546,7473=>480,7474=>480,7475=>538,7476=>595,7477=>294,7478=>298,7479=>547,7480=>443,7481=>697,7482=>576,7483=>606,7484=>548,7485=>442,7486=>474,7487=>523,7488=>455,7489=>469,7490=>549,7491=>466,7492=>466,7493=>498,7494=>657,7495=>499,7496=>498,7497=>444,7498=>444,7499=>412,7500=>412,7501=>498,7502=>300,7503=>523,7504=>729,7505=>473,7506=>467,7507=>427,7508=>467,7509=>467,7510=>499,7511=>371,7512=>520,7513=>418,7514=>729,7515=>491,7516=>505,7517=>418,7518=>416,7519=>420,7520=>570,7521=>414,7522=>239,7523=>414,7524=>520,7525=>491,7526=>418,7527=>416,7528=>419,7529=>570,7530=>414,7531=>1041,7543=>640,7544=>595,7547=>380,7548=>380,7549=>699,7550=>647,7551=>679,7557=>380,7579=>498,7580=>427,7581=>427,7582=>467,7583=>412,7584=>383,7585=>373,7586=>498,7587=>522,7588=>300,7589=>307,7590=>300,7591=>300,7592=>370,7593=>368,7594=>321,7595=>430,7596=>682,7597=>729,7598=>588,7599=>587,7600=>472,7601=>467,7602=>522,7603=>400,7604=>387,7605=>371,7606=>520,7607=>475,7608=>408,7609=>489,7610=>491,7611=>412,7612=>527,7613=>412,7614=>452,7615=>467,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>776,7681=>648,7682=>845,7683=>699,7684=>845,7685=>699,7686=>845,7687=>699,7688=>796,7689=>609,7690=>867,7691=>699,7692=>867,7693=>699,7694=>867,7695=>699,7696=>867,7697=>699,7698=>867,7699=>699,7700=>762,7701=>636,7702=>762,7703=>636,7704=>762,7705=>636,7706=>762,7707=>636,7708=>762,7709=>636,7710=>710,7711=>430,7712=>854,7713=>699,7714=>945,7715=>727,7716=>945,7717=>727,7718=>945,7719=>727,7720=>945,7721=>727,7722=>945,7723=>727,7724=>468,7725=>380,7726=>468,7727=>380,7728=>869,7729=>693,7730=>869,7731=>693,7732=>869,7733=>693,7734=>703,7735=>380,7736=>703,7737=>380,7738=>703,7739=>380,7740=>703,7741=>380,7742=>1107,7743=>1058,7744=>1107,7745=>1058,7746=>1107,7747=>1058,7748=>914,7749=>727,7750=>914,7751=>727,7752=>914,7753=>727,7754=>914,7755=>727,7756=>871,7757=>667,7758=>871,7759=>667,7760=>871,7761=>667,7762=>871,7763=>667,7764=>752,7765=>699,7766=>752,7767=>699,7768=>831,7769=>527,7770=>831,7771=>527,7772=>831,7773=>527,7774=>831,7775=>527,7776=>722,7777=>563,7778=>722,7779=>563,7780=>722,7781=>563,7782=>722,7783=>563,7784=>722,7785=>563,7786=>744,7787=>462,7788=>744,7789=>462,7790=>744,7791=>462,7792=>744,7793=>462,7794=>872,7795=>727,7796=>872,7797=>727,7798=>872,7799=>727,7800=>872,7801=>727,7802=>872,7803=>727,7804=>776,7805=>581,7806=>776,7807=>581,7808=>1123,7809=>861,7810=>1123,7811=>861,7812=>1123,7813=>861,7814=>1123,7815=>861,7816=>1123,7817=>861,7818=>776,7819=>596,7820=>776,7821=>596,7822=>714,7823=>581,7824=>730,7825=>568,7826=>730,7827=>568,7828=>730,7829=>568,7830=>727,7831=>462,7832=>861,7833=>581,7834=>1014,7835=>430,7836=>430,7837=>430,7838=>947,7839=>667,7840=>776,7841=>648,7842=>776,7843=>648,7844=>776,7845=>648,7846=>776,7847=>648,7848=>776,7849=>648,7850=>776,7851=>648,7852=>776,7853=>648,7854=>776,7855=>648,7856=>776,7857=>648,7858=>776,7859=>648,7860=>776,7861=>648,7862=>776,7863=>648,7864=>762,7865=>636,7866=>762,7867=>636,7868=>762,7869=>636,7870=>762,7871=>636,7872=>762,7873=>636,7874=>762,7875=>636,7876=>762,7877=>636,7878=>762,7879=>636,7880=>468,7881=>380,7882=>468,7883=>380,7884=>871,7885=>667,7886=>871,7887=>667,7888=>871,7889=>667,7890=>871,7891=>667,7892=>871,7893=>667,7894=>871,7895=>667,7896=>871,7897=>667,7898=>871,7899=>667,7900=>871,7901=>667,7902=>871,7903=>667,7904=>871,7905=>667,7906=>871,7907=>667,7908=>872,7909=>727,7910=>872,7911=>727,7912=>872,7913=>727,7914=>872,7915=>727,7916=>872,7917=>727,7918=>872,7919=>727,7920=>872,7921=>727,7922=>714,7923=>581,7924=>714,7925=>581,7926=>714,7927=>581,7928=>714,7929=>581,7930=>1078,7931=>701,7936=>770,7937=>770,7938=>770,7939=>770,7940=>770,7941=>770,7942=>770,7943=>770,7944=>776,7945=>776,7946=>978,7947=>978,7948=>832,7949=>849,7950=>776,7951=>776,7952=>608,7953=>608,7954=>608,7955=>608,7956=>608,7957=>608,7960=>917,7961=>909,7962=>1169,7963=>1169,7964=>1093,7965=>1120,7968=>727,7969=>727,7970=>727,7971=>727,7972=>727,7973=>727,7974=>727,7975=>727,7976=>1100,7977=>1094,7978=>1358,7979=>1361,7980=>1279,7981=>1308,7982=>1197,7983=>1194,7984=>484,7985=>484,7986=>484,7987=>484,7988=>484,7989=>484,7990=>484,7991=>484,7992=>629,7993=>617,7994=>878,7995=>881,7996=>799,7997=>831,7998=>723,7999=>714,8000=>667,8001=>667,8002=>667,8003=>667,8004=>667,8005=>667,8008=>900,8009=>935,8010=>1240,8011=>1237,8012=>1035,8013=>1066,8016=>694,8017=>694,8018=>694,8019=>694,8020=>694,8021=>694,8022=>694,8023=>694,8025=>922,8027=>1186,8029=>1133,8031=>1019,8032=>952,8033=>952,8034=>952,8035=>952,8036=>952,8037=>952,8038=>952,8039=>952,8040=>931,8041=>963,8042=>1268,8043=>1274,8044=>1054,8045=>1088,8046=>1023,8047=>1060,8048=>770,8049=>770,8050=>608,8051=>608,8052=>727,8053=>727,8054=>484,8055=>484,8056=>667,8057=>667,8058=>694,8059=>694,8060=>952,8061=>952,8064=>770,8065=>770,8066=>770,8067=>770,8068=>770,8069=>770,8070=>770,8071=>770,8072=>776,8073=>776,8074=>978,8075=>978,8076=>832,8077=>849,8078=>776,8079=>776,8080=>727,8081=>727,8082=>727,8083=>727,8084=>727,8085=>727,8086=>727,8087=>727,8088=>1100,8089=>1094,8090=>1358,8091=>1361,8092=>1279,8093=>1308,8094=>1197,8095=>1194,8096=>952,8097=>952,8098=>952,8099=>952,8100=>952,8101=>952,8102=>952,8103=>952,8104=>931,8105=>963,8106=>1268,8107=>1274,8108=>1054,8109=>1088,8110=>1023,8111=>1060,8112=>770,8113=>770,8114=>770,8115=>770,8116=>770,8118=>770,8119=>770,8120=>776,8121=>776,8122=>811,8123=>776,8124=>776,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>727,8131=>727,8132=>727,8134=>727,8135=>727,8136=>1000,8137=>947,8138=>1191,8139=>1118,8140=>945,8141=>500,8142=>500,8143=>500,8144=>484,8145=>484,8146=>484,8147=>484,8150=>484,8151=>484,8152=>468,8153=>468,8154=>714,8155=>662,8157=>500,8158=>500,8159=>500,8160=>694,8161=>694,8162=>694,8163=>694,8164=>665,8165=>665,8166=>694,8167=>694,8168=>714,8169=>714,8170=>1019,8171=>953,8172=>910,8173=>500,8174=>500,8175=>500,8178=>952,8179=>952,8180=>952,8182=>952,8183=>952,8184=>1069,8185=>887,8186=>1101,8187=>911,8188=>890,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>348,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>348,8217=>348,8218=>348,8219=>348,8220=>575,8221=>575,8222=>575,8223=>575,8224=>523,8225=>523,8226=>639,8227=>639,8228=>348,8229=>674,8230=>1000,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1385,8241=>1820,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8249=>400,8250=>400,8252=>629,8253=>586,8254=>500,8258=>1023,8260=>167,8261=>473,8262=>473,8263=>1082,8264=>856,8265=>856,8267=>636,8268=>500,8269=>500,8270=>523,8271=>369,8273=>523,8274=>556,8275=>1000,8279=>813,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>438,8305=>239,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528,8316=>528,8317=>298,8318=>298,8319=>519,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>298,8334=>298,8336=>466,8337=>444,8338=>467,8339=>475,8340=>444,8341=>521,8342=>523,8343=>292,8344=>729,8345=>519,8346=>499,8347=>395,8348=>371,8358=>696,8364=>696,8367=>1155,8369=>790,8372=>876,8373=>696,8376=>744,8377=>696,8451=>1198,8457=>1112,8462=>727,8463=>727,8470=>1087,8482=>1000,8486=>890,8487=>890,8490=>869,8491=>776,8498=>710,8513=>775,8514=>557,8515=>637,8516=>760,8523=>903,8526=>592,8528=>1035,8529=>1035,8530=>1473,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>468,8545=>736,8546=>1005,8547=>1093,8548=>776,8549=>1127,8550=>1396,8551=>1664,8552=>1069,8553=>776,8554=>1078,8555=>1347,8556=>703,8557=>796,8558=>867,8559=>1107,8560=>380,8561=>760,8562=>1140,8563=>961,8564=>581,8565=>961,8566=>1341,8567=>1721,8568=>976,8569=>596,8570=>976,8571=>1356,8572=>380,8573=>609,8574=>699,8575=>1058,8576=>1255,8577=>867,8578=>1268,8579=>796,8580=>609,8581=>796,8585=>1035,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>850,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>641,8706=>534,8707=>620,8708=>620,8710=>753,8711=>753,8712=>740,8713=>740,8715=>740,8716=>740,8719=>842,8720=>842,8721=>753,8722=>838,8723=>838,8724=>838,8725=>365,8727=>691,8728=>519,8729=>519,8730=>657,8731=>657,8732=>657,8733=>672,8734=>833,8735=>838,8736=>838,8739=>324,8740=>607,8741=>529,8742=>773,8743=>812,8744=>812,8745=>838,8746=>838,8747=>579,8748=>1000,8749=>1391,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1082,8789=>1082,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>838,8848=>838,8849=>838,8850=>838,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>884,8867=>884,8868=>960,8869=>960,8870=>616,8871=>616,8872=>884,8873=>884,8874=>884,8875=>1080,8876=>884,8877=>884,8878=>884,8879=>1080,8901=>398,8962=>834,8968=>473,8969=>473,8970=>473,8971=>473,8976=>838,8977=>539,8984=>928,8985=>838,8992=>579,8993=>579,8997=>1000,9000=>1443,9085=>1008,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>579,9167=>945,9251=>834,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838,10181=>457,10182=>457,10208=>494,10216=>457,10217=>457,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>1032,10616=>838,10617=>838,10618=>960,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1782,10765=>610,10766=>610,10799=>838,10858=>838,10859=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11360=>703,11361=>380,11363=>752,11364=>831,11367=>945,11368=>727,11369=>869,11370=>693,11371=>730,11372=>568,11373=>848,11374=>1107,11375=>776,11376=>848,11377=>709,11378=>1221,11379=>984,11381=>779,11382=>601,11383=>905,11385=>571,11386=>667,11387=>617,11388=>313,11389=>489,11390=>722,11391=>730,11520=>773,11521=>635,11522=>804,11523=>658,11524=>788,11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>631,11532=>646,11533=>962,11534=>846,11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649,11546=>688,11547=>936,11548=>982,11549=>681,11550=>676,11551=>852,11552=>1113,11553=>632,11554=>645,11555=>646,11556=>749,11557=>914,11800=>586,11807=>838,11810=>473,11811=>473,11812=>473,11813=>473,11822=>586,42564=>722,42565=>563,42566=>468,42567=>380,42576=>1333,42577=>1092,42580=>1287,42581=>1025,42582=>1287,42583=>1039,42760=>500,42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500,42771=>500,42772=>500,42773=>500,42774=>500,42779=>384,42780=>384,42781=>276,42782=>276,42783=>276,42790=>945,42791=>712,42792=>1003,42793=>909,42794=>696,42795=>609,42796=>634,42797=>598,42798=>741,42799=>706,42800=>592,42801=>563,42802=>1301,42803=>986,42804=>1261,42805=>1004,42806=>1168,42807=>1008,42808=>1016,42809=>813,42810=>1016,42811=>813,42812=>994,42813=>847,42814=>796,42815=>609,42816=>910,42817=>722,42822=>916,42823=>581,42826=>1010,42827=>770,42830=>1448,42831=>1060,42856=>787,42857=>716,42875=>694,42876=>527,42880=>703,42881=>380,42882=>872,42883=>727,42884=>694,42885=>527,42886=>796,42887=>609,42891=>439,42892=>306,42893=>913,42896=>914,42897=>727,42922=>945,43002=>1069,43003=>710,43004=>752,43005=>1107,43006=>468,43007=>1286,62464=>705,62465=>716,62466=>765,62467=>999,62468=>716,62469=>710,62470=>776,62471=>1038,62472=>716,62473=>716,62474=>1309,62475=>734,62476=>733,62477=>1004,62478=>716,62479=>733,62480=>1050,62481=>797,62482=>850,62483=>799,62484=>996,62485=>732,62486=>987,62487=>731,62488=>739,62489=>733,62490=>780,62491=>733,62492=>739,62493=>717,62494=>780,62495=>936,62496=>716,62497=>826,62498=>717,62499=>716,62500=>716,62501=>773,62502=>1013,62504=>904,63173=>667,63185=>500,63188=>500,64256=>821,64257=>727,64258=>727,64259=>1120,64260=>1117,64261=>871,64262=>971,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserifb.z b/tcpdf/fonts/dejavuserifb.z new file mode 100644 index 0000000..0250fcd Binary files /dev/null and b/tcpdf/fonts/dejavuserifb.z differ diff --git a/tcpdf/fonts/dejavuserifbi.ctg.z b/tcpdf/fonts/dejavuserifbi.ctg.z new file mode 100644 index 0000000..c1b7143 Binary files /dev/null and b/tcpdf/fonts/dejavuserifbi.ctg.z differ diff --git a/tcpdf/fonts/dejavuserifbi.php b/tcpdf/fonts/dejavuserifbi.php new file mode 100644 index 0000000..510059e --- /dev/null +++ b/tcpdf/fonts/dejavuserifbi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerif-BoldItalic'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=336884; +$enc=''; +$file='dejavuserifbi.z'; +$ctg='dejavuserifbi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-906 -389 1754 1145]','ItalicAngle'=>-11,'Ascent'=>939,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>60,'StemH'=>26,'AvgWidth'=>566,'MaxWidth'=>1813,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(73,-14,383,729),34=>array(95,458,426,729),35=>array(68,0,770,718),36=>array(41,-146,632,761),37=>array(59,-14,891,742),38=>array(7,-14,892,742),39=>array(95,458,211,729),40=>array(94,-156,510,760),41=>array(-39,-156,378,760),42=>array(22,278,501,742),43=>array(106,1,732,627),44=>array(-5,-165,282,156),45=>array(41,202,374,334),46=>array(81,-14,268,172),47=>array(-80,-93,445,729),48=>array(46,-14,649,742),49=>array(65,0,536,742),50=>array(-5,0,635,742),51=>array(4,-14,641,742),52=>array(6,0,632,742),53=>array(18,-14,636,729),54=>array(58,-14,672,742),55=>array(104,0,684,729),56=>array(19,-14,655,742),57=>array(24,-14,638,742),58=>array(61,-14,308,490),59=>array(-24,-161,322,490),60=>array(106,32,732,595),61=>array(106,147,732,480),62=>array(106,32,732,595),63=>array(103,-14,574,742),64=>array(64,-174,942,703),65=>array(-79,0,728,729),66=>array(-24,0,782,729),67=>array(42,-14,787,742),68=>array(-24,0,826,729),69=>array(-24,0,773,729),70=>array(-24,0,768,729),71=>array(42,-14,812,742),72=>array(-24,0,971,729),73=>array(-24,0,493,729),74=>array(-158,-208,526,729),75=>array(-24,0,902,729),76=>array(-24,0,646,729),77=>array(-29,0,1131,729),78=>array(-27,0,945,729),79=>array(42,-14,828,742),80=>array(-24,0,757,729),81=>array(49,-196,856,742),82=>array(-24,0,778,729),83=>array(13,-14,682,742),84=>array(46,0,805,729),85=>array(95,-14,922,729),86=>array(53,0,861,729),87=>array(50,0,1206,729),88=>array(-53,0,808,729),89=>array(50,0,794,729),90=>array(-34,0,760,729),91=>array(38,-132,489,760),92=>array(80,-93,286,729),93=>array(-16,-132,435,760),94=>array(101,457,737,729),95=>array(0,-236,500,-143),96=>array(128,616,354,800),97=>array(34,-14,577,533),98=>array(24,-14,646,760),99=>array(34,-14,592,533),100=>array(10,-14,678,760),101=>array(33,-14,593,533),102=>array(-59,-190,573,760),103=>array(22,-222,667,533),104=>array(34,0,642,760),105=>array(34,0,337,760),106=>array(-166,-222,354,760),107=>array(34,0,648,760),108=>array(34,0,355,760),109=>array(56,0,995,533),110=>array(56,0,664,533),111=>array(34,-14,634,533),112=>array(25,-208,687,533),113=>array(52,-208,665,533),114=>array(56,0,587,533),115=>array(-0,-14,542,533),116=>array(48,-14,453,680),117=>array(63,-14,671,519),118=>array(21,0,589,521),119=>array(30,0,890,519),120=>array(-19,0,605,519),121=>array(-20,-222,638,519),122=>array(-16,-41,585,560),123=>array(78,-163,643,760),124=>array(129,-236,234,764),125=>array(1,-163,565,760),126=>array(106,221,732,406),161=>array(56,0,366,742),162=>array(78,-146,631,662),163=>array(-0,0,678,742),164=>array(37,30,601,596),165=>array(28,0,736,729),166=>array(129,-171,234,699),167=>array(-1,-95,515,742),168=>array(164,645,526,788),169=>array(138,0,862,725),170=>array(6,246,438,745),171=>array(69,64,576,522),172=>array(106,140,732,441),173=>array(41,202,374,334),174=>array(138,0,862,725),175=>array(156,664,481,756),176=>array(87,424,412,749),177=>array(106,0,732,627),178=>array(2,334,397,742),179=>array(7,326,401,742),180=>array(227,616,525,800),181=>array(31,-208,695,519),182=>array(112,-96,656,729),183=>array(81,255,267,440),184=>array(112,-196,347,0),185=>array(39,334,339,742),186=>array(7,246,481,742),187=>array(49,64,556,522),188=>array(39,-14,935,742),189=>array(39,-14,938,742),190=>array(7,-14,935,742),191=>array(12,-14,483,742),192=>array(-79,0,728,927),193=>array(-79,0,728,927),194=>array(-79,0,728,927),195=>array(-79,0,728,929),196=>array(-79,0,728,939),197=>array(-98,0,708,928),198=>array(-102,0,1044,729),199=>array(42,-196,787,742),200=>array(-24,0,773,927),201=>array(-24,0,773,927),202=>array(-24,0,773,927),203=>array(-24,0,773,939),204=>array(-24,0,493,927),205=>array(-24,0,495,927),206=>array(-24,0,498,927),207=>array(-24,0,502,939),208=>array(-18,0,832,729),209=>array(-27,0,945,929),210=>array(42,-14,828,927),211=>array(42,-14,828,927),212=>array(42,-14,828,927),213=>array(42,-14,828,929),214=>array(42,-14,828,939),215=>array(129,23,709,604),216=>array(-37,-38,907,766),217=>array(95,-14,922,927),218=>array(95,-14,922,927),219=>array(95,-14,922,927),220=>array(95,-14,922,939),221=>array(50,0,794,927),222=>array(-24,0,729,729),223=>array(-76,-190,683,760),224=>array(34,-14,577,800),225=>array(34,-14,577,800),226=>array(34,-14,577,800),227=>array(34,-14,577,792),228=>array(34,-14,577,788),229=>array(34,-14,577,888),230=>array(27,-14,889,533),231=>array(34,-196,592,533),232=>array(33,-14,593,800),233=>array(33,-14,593,800),234=>array(33,-14,593,800),235=>array(33,-14,594,788),236=>array(57,0,332,800),237=>array(57,0,465,800),238=>array(45,0,414,800),239=>array(57,0,466,788),240=>array(16,-14,633,764),241=>array(56,0,664,792),242=>array(34,-14,634,800),243=>array(34,-14,634,800),244=>array(34,-14,634,800),245=>array(34,-14,634,792),246=>array(34,-14,634,788),247=>array(106,60,732,567),248=>array(-27,-50,694,567),249=>array(63,-14,671,800),250=>array(63,-14,671,800),251=>array(63,-14,671,800),252=>array(63,-14,671,788),253=>array(-20,-222,638,800),254=>array(3,-208,665,760),255=>array(-20,-222,638,788),256=>array(-79,0,728,914),257=>array(34,-14,577,763),258=>array(-79,0,728,936),259=>array(34,-14,577,776),260=>array(-79,-196,728,729),261=>array(34,-196,577,533),262=>array(42,-14,787,927),263=>array(34,-14,600,800),264=>array(42,-14,787,927),265=>array(34,-14,592,800),266=>array(42,-14,787,939),267=>array(34,-14,592,788),268=>array(42,-14,787,927),269=>array(34,-14,594,800),270=>array(-24,0,826,927),271=>array(10,-14,928,760),272=>array(-18,0,832,729),273=>array(10,-14,741,760),274=>array(-24,0,773,914),275=>array(33,-14,593,763),276=>array(-24,0,773,927),277=>array(33,-14,593,776),278=>array(-24,0,773,939),279=>array(33,-14,593,788),280=>array(-24,-196,773,729),281=>array(33,-196,593,533),282=>array(-24,0,773,930),283=>array(33,-14,594,800),284=>array(42,-14,812,927),285=>array(22,-222,667,800),286=>array(42,-14,812,927),287=>array(22,-222,667,776),288=>array(42,-14,812,939),289=>array(22,-222,667,788),290=>array(42,-240,812,742),291=>array(22,-222,667,753),292=>array(-24,0,971,927),293=>array(34,0,642,927),294=>array(-24,0,971,729),295=>array(34,0,642,760),296=>array(-24,0,521,929),297=>array(57,0,453,792),298=>array(-24,0,496,914),299=>array(57,0,390,763),300=>array(-24,0,516,927),301=>array(57,0,444,776),302=>array(-5,-196,512,729),303=>array(53,-196,356,760),304=>array(-24,0,493,939),305=>array(57,0,332,519),306=>array(-24,-208,995,729),307=>array(34,-222,742,760),308=>array(-158,-208,526,927),309=>array(-143,-222,379,800),310=>array(-24,-226,902,729),311=>array(34,-226,648,760),312=>array(57,0,671,518),313=>array(-24,0,646,928),314=>array(34,0,479,928),315=>array(-24,-226,646,729),316=>array(34,-226,355,760),317=>array(-24,0,686,729),318=>array(34,0,590,760),319=>array(-24,0,710,729),320=>array(34,0,532,760),321=>array(-18,0,653,729),322=>array(-7,0,411,760),323=>array(-27,0,945,928),324=>array(56,0,664,776),325=>array(-27,-226,945,729),326=>array(56,-226,664,533),327=>array(-27,0,945,927),328=>array(56,0,664,800),329=>array(75,0,902,742),330=>array(34,-208,858,743),331=>array(78,-222,671,533),332=>array(42,-14,828,914),333=>array(34,-14,634,763),334=>array(42,-14,828,927),335=>array(34,-14,634,776),336=>array(42,-14,828,927),337=>array(34,-14,652,800),338=>array(42,0,1191,729),339=>array(34,-14,983,533),340=>array(-24,0,778,928),341=>array(56,0,595,776),342=>array(-24,-226,778,729),343=>array(56,-226,587,533),344=>array(-24,0,778,927),345=>array(56,0,594,800),346=>array(13,-14,693,928),347=>array(-0,-14,595,776),348=>array(13,-14,682,927),349=>array(-0,-14,542,800),350=>array(13,-196,682,742),351=>array(-0,-196,542,533),352=>array(13,-14,682,927),353=>array(-0,-14,552,800),354=>array(46,-196,805,729),355=>array(48,-196,453,680),356=>array(46,0,805,927),357=>array(48,-14,583,780),358=>array(47,0,805,729),359=>array(11,-14,452,680),360=>array(95,-14,922,929),361=>array(63,-14,671,792),362=>array(95,-14,922,914),363=>array(63,-14,671,763),364=>array(95,-14,922,927),365=>array(63,-14,671,776),366=>array(95,-14,922,1057),367=>array(63,-14,671,854),368=>array(95,-14,922,927),369=>array(63,-14,671,800),370=>array(95,-204,922,729),371=>array(63,-196,671,519),372=>array(50,0,1206,931),373=>array(30,0,890,800),374=>array(50,0,794,931),375=>array(-20,-222,638,800),376=>array(50,0,794,939),377=>array(-34,0,760,928),378=>array(-16,-41,595,776),379=>array(-34,0,760,952),380=>array(-16,-41,585,759),381=>array(-34,0,760,927),382=>array(-16,-41,585,800),383=>array(-59,-190,573,760),384=>array(24,-14,646,760),385=>array(-96,0,782,729),386=>array(-24,0,826,729),387=>array(-50,-14,638,760),388=>array(-24,0,770,729),389=>array(-50,-14,637,760),390=>array(0,-14,746,742),391=>array(32,-14,986,840),392=>array(24,-14,795,709),393=>array(-18,0,832,729),394=>array(-96,0,826,729),395=>array(17,0,871,729),396=>array(1,-14,734,760),397=>array(39,-246,650,533),398=>array(-24,0,782,729),399=>array(42,-14,828,742),400=>array(81,-14,774,742),401=>array(-171,-208,788,729),402=>array(-184,-190,573,760),403=>array(32,-14,1011,840),404=>array(83,-92,829,729),405=>array(34,-1,979,760),406=>array(101,0,493,729),407=>array(-24,0,493,729),408=>array(-24,0,972,729),409=>array(34,0,647,760),410=>array(6,0,354,760),411=>array(-37,0,600,739),412=>array(75,-14,1107,729),413=>array(-174,-208,965,729),414=>array(76,-208,663,533),415=>array(42,-14,828,742),416=>array(41,-14,937,760),417=>array(34,-14,755,548),418=>array(57,-171,1102,742),419=>array(60,-208,878,533),420=>array(-96,0,757,729),421=>array(8,-208,661,709),422=>array(-12,-142,764,729),423=>array(36,-14,691,742),424=>array(23,-14,543,533),425=>array(-31,0,711,729),426=>array(-53,-223,460,760),427=>array(63,-222,517,680),428=>array(42,0,805,729),429=>array(41,-14,525,760),430=>array(67,-208,825,729),431=>array(98,-14,1127,816),432=>array(65,-14,815,548),433=>array(40,-14,913,729),434=>array(133,0,841,729),435=>array(50,0,885,730),436=>array(-21,-222,779,533),437=>array(-34,0,760,729),438=>array(-15,-41,584,560),439=>array(-30,-14,606,729),440=>array(3,-14,647,729),441=>array(5,-203,651,519),442=>array(-2,-220,606,519),443=>array(-5,0,645,742),444=>array(63,-14,769,729),445=>array(-28,-203,643,519),446=>array(-38,-15,379,680),447=>array(22,-208,721,560),448=>array(24,0,271,729),449=>array(24,0,468,729),450=>array(-17,0,476,729),451=>array(24,0,271,729),452=>array(-24,0,1627,927),453=>array(-24,-41,1452,800),454=>array(10,-41,1284,800),455=>array(-24,-208,1229,729),456=>array(-24,-222,1057,760),457=>array(33,-222,734,760),458=>array(-27,-208,1440,729),459=>array(-27,-222,1268,760),460=>array(55,-222,1081,760),461=>array(-79,0,728,927),462=>array(34,-14,577,800),463=>array(-24,0,526,927),464=>array(57,0,451,800),465=>array(42,-14,828,927),466=>array(34,-14,634,800),467=>array(95,-14,922,927),468=>array(63,-14,671,800),469=>array(95,-14,922,1036),470=>array(63,-14,671,899),471=>array(95,-14,922,1057),472=>array(63,-14,671,920),473=>array(95,-14,922,1058),474=>array(63,-14,671,921),475=>array(95,-14,922,1057),476=>array(63,-14,671,920),477=>array(45,-14,591,533),478=>array(-79,0,728,1036),479=>array(34,-14,577,899),480=>array(-79,0,728,1036),481=>array(34,-14,577,899),482=>array(-102,0,1044,914),483=>array(27,-14,889,763),484=>array(42,-14,842,742),485=>array(22,-222,702,533),486=>array(21,-17,791,927),487=>array(-4,-222,640,800),488=>array(-42,0,885,927),489=>array(17,0,631,927),490=>array(42,-204,828,742),491=>array(34,-204,634,533),492=>array(42,-204,828,914),493=>array(34,-204,634,763),494=>array(-30,-14,606,927),495=>array(-28,-203,604,800),496=>array(-143,-222,472,800),497=>array(-24,0,1627,729),498=>array(-24,-41,1452,729),499=>array(10,-41,1284,760),500=>array(23,-14,793,928),501=>array(-4,-222,640,776),502=>array(-23,-14,1219,729),503=>array(-45,-208,834,742),504=>array(-44,0,928,927),505=>array(-44,0,638,800),506=>array(-98,0,708,928),507=>array(34,-14,597,928),508=>array(-102,0,1044,928),509=>array(27,-14,889,800),510=>array(-36,-38,907,928),511=>array(-27,-50,694,800),512=>array(-79,0,728,928),513=>array(34,-14,577,800),514=>array(-79,0,728,958),515=>array(34,-14,577,776),516=>array(-24,0,773,928),517=>array(33,-14,593,800),518=>array(-24,0,773,958),519=>array(33,-14,593,776),520=>array(-24,0,493,928),521=>array(16,0,366,801),522=>array(-24,0,501,958),523=>array(33,0,389,767),524=>array(42,-14,828,928),525=>array(33,-14,634,800),526=>array(42,-14,828,958),527=>array(33,-14,634,776),528=>array(-24,0,778,928),529=>array(55,0,587,800),530=>array(-24,0,778,958),531=>array(55,0,587,776),532=>array(95,-14,922,928),533=>array(63,-14,671,800),534=>array(95,-14,922,958),535=>array(63,-14,671,776),536=>array(13,-230,682,742),537=>array(-0,-230,542,533),538=>array(46,-230,805,729),539=>array(48,-230,453,680),540=>array(-26,-210,655,742),541=>array(-23,-211,571,531),542=>array(-24,0,971,927),543=>array(33,0,642,927),544=>array(34,-208,858,743),545=>array(22,-48,723,760),546=>array(4,-14,616,742),547=>array(13,-14,563,760),548=>array(-8,-263,786,729),549=>array(10,-263,610,519),550=>array(-79,0,728,939),551=>array(34,-14,577,788),552=>array(-24,-196,773,729),553=>array(33,-196,593,533),554=>array(42,-14,828,1036),555=>array(34,-14,634,899),556=>array(42,-14,828,1036),557=>array(34,-14,634,894),558=>array(42,-14,828,939),559=>array(34,-14,634,788),560=>array(42,-14,828,1036),561=>array(34,-14,634,899),562=>array(50,0,794,914),563=>array(-20,-222,638,763),564=>array(83,-113,509,760),565=>array(67,-113,880,533),566=>array(58,-113,508,680),567=>array(-143,-222,352,519),568=>array(19,-14,969,760),569=>array(59,-208,1009,533),570=>array(-84,-38,860,766),571=>array(-74,-38,870,766),572=>array(-56,-50,665,567),573=>array(-24,0,646,729),574=>array(-99,-38,845,766),575=>array(19,-217,562,533),576=>array(6,-222,606,519),577=>array(-1,0,665,729),578=>array(74,0,533,533),579=>array(-24,0,782,729),580=>array(27,-14,922,729),581=>array(-79,0,728,729),582=>array(-24,-57,773,785),583=>array(33,-56,593,581),584=>array(-158,-208,526,729),585=>array(-143,-222,383,760),586=>array(61,-208,897,742),587=>array(53,-222,733,533),588=>array(-24,0,777,729),589=>array(22,0,587,533),590=>array(21,0,794,729),591=>array(-19,-222,658,519),592=>array(71,-14,613,533),593=>array(41,-14,747,532),594=>array(23,-14,729,531),595=>array(25,-14,637,760),596=>array(13,-14,564,533),597=>array(46,-113,600,527),598=>array(39,-222,712,760),599=>array(19,-14,855,760),600=>array(34,-14,591,533),601=>array(45,-14,591,533),602=>array(40,-14,921,533),603=>array(25,-12,587,526),604=>array(-6,-12,547,526),605=>array(-6,-12,921,526),606=>array(41,-18,700,533),607=>array(-143,-222,383,519),608=>array(0,-222,875,760),609=>array(24,-222,748,519),610=>array(62,-4,595,520),611=>array(50,-219,599,519),612=>array(71,-37,650,520),613=>array(82,-208,690,519),614=>array(34,0,642,760),615=>array(56,-222,642,760),616=>array(6,0,338,760),617=>array(75,0,332,519),618=>array(-17,0,406,519),619=>array(24,0,403,760),620=>array(37,0,487,760),621=>array(44,-222,392,760),622=>array(54,-203,809,760),623=>array(63,-14,1002,519),624=>array(82,-208,1021,519),625=>array(78,-222,995,533),626=>array(-144,-222,686,533),627=>array(78,-222,762,533),628=>array(12,0,707,519),629=>array(41,-14,627,533),630=>array(63,0,1047,521),631=>array(29,-14,696,530),632=>array(-5,-213,668,760),633=>array(-21,-14,510,519),634=>array(-45,-14,533,760),635=>array(-1,-222,593,519),636=>array(36,-207,607,533),637=>array(65,-222,609,533),638=>array(56,0,510,533),639=>array(61,0,409,533),640=>array(12,0,706,519),641=>array(12,0,795,519),642=>array(5,-222,563,533),643=>array(-167,-223,477,760),644=>array(-166,-222,576,760),645=>array(88,-222,456,527),646=>array(-139,-223,477,760),647=>array(39,-161,443,533),648=>array(42,-222,473,680),649=>array(30,-14,696,519),650=>array(38,-14,691,519),651=>array(73,-1,653,519),652=>array(21,0,588,520),653=>array(30,0,890,519),654=>array(1,0,658,741),655=>array(101,0,721,520),656=>array(6,-222,669,519),657=>array(-7,-89,594,519),658=>array(-28,-203,604,519),659=>array(63,-203,604,519),660=>array(52,0,513,761),661=>array(80,0,544,761),662=>array(57,0,521,761),663=>array(66,-223,565,761),664=>array(42,-14,828,742),665=>array(-16,0,644,519),666=>array(15,-18,675,533),667=>array(39,-4,805,760),668=>array(-17,0,749,519),669=>array(-119,-223,375,760),670=>array(101,-208,714,519),671=>array(12,0,575,519),672=>array(38,-208,874,760),673=>array(52,0,513,761),674=>array(80,0,544,761),675=>array(19,-41,1130,760),676=>array(38,-203,1130,760),677=>array(26,-89,1119,760),678=>array(47,0,901,680),679=>array(61,-223,861,760),680=>array(49,-20,914,680),681=>array(-56,-222,1017,760),682=>array(34,0,825,760),683=>array(34,-41,807,760),684=>array(33,0,683,625),685=>array(-5,120,451,625),686=>array(-16,-208,667,760),687=>array(-14,-222,730,760),688=>array(53,326,446,751),689=>array(50,329,444,754),690=>array(-8,202,313,752),691=>array(65,334,403,632),692=>array(16,321,354,620),693=>array(27,202,415,617),694=>array(16,326,516,617),695=>array(19,334,561,620),696=>array(-12,212,401,620),697=>array(54,557,242,800),698=>array(54,557,461,800),699=>array(41,456,305,742),700=>array(41,456,305,742),701=>array(96,456,275,742),702=>array(153,481,319,760),703=>array(159,481,326,760),704=>array(4,327,293,752),705=>array(22,327,311,752),706=>array(122,517,401,843),707=>array(99,517,378,843),708=>array(63,561,390,800),709=>array(110,561,437,800),710=>array(105,616,474,800),711=>array(151,616,520,800),712=>array(71,513,211,759),713=>array(156,664,481,756),714=>array(227,616,525,800),715=>array(128,616,354,800),716=>array(71,-90,211,156),717=>array(-10,-189,315,-97),720=>array(66,0,303,434),721=>array(122,303,273,434),722=>array(111,269,278,547),723=>array(118,269,284,547),726=>array(45,165,310,411),727=>array(45,242,309,334),728=>array(170,624,504,776),729=>array(254,645,398,788),730=>array(189,610,467,888),731=>array(152,-196,363,0),732=>array(134,638,513,792),733=>array(146,616,568,800),734=>array(-19,299,405,500),736=>array(31,204,377,617),737=>array(50,326,246,751),738=>array(20,327,365,633),739=>array(-12,334,381,620),740=>array(22,327,311,752),741=>array(146,0,471,693),742=>array(117,0,471,693),743=>array(87,0,471,693),744=>array(58,0,471,693),745=>array(29,0,471,693),748=>array(79,-281,405,-42),750=>array(54,456,523,742),751=>array(55,-241,423,-58),752=>array(32,-281,359,-42),755=>array(111,-240,389,38),759=>array(61,-193,439,-40),768=>array(-405,616,-179,800),769=>array(-307,616,-8,800),770=>array(-428,616,-60,800),771=>array(-400,638,-21,792),772=>array(-378,664,-53,756),773=>array(-500,663,0,755),774=>array(-364,624,-30,776),775=>array(-279,645,-136,788),776=>array(-370,645,-8,788),777=>array(-441,616,-217,866),778=>array(-345,610,-66,888),779=>array(-388,616,34,800),780=>array(-382,616,-14,800),781=>array(-418,616,-287,813),782=>array(-510,616,-195,813),783=>array(-421,616,-70,800),784=>array(-432,624,-98,903),785=>array(-366,624,-32,776),786=>array(-297,456,-94,617),787=>array(-282,606,-126,847),788=>array(-277,606,-123,847),789=>array(-103,616,103,800),790=>array(-414,-253,-188,-69),791=>array(-350,-251,-52,-67),792=>array(-336,-357,-134,-111),793=>array(-366,-357,-164,-111),794=>array(-194,684,70,930),795=>array(-126,338,88,548),796=>array(-319,-389,-153,-111),797=>array(-388,-280,-124,-111),798=>array(-375,-280,-111,-111),799=>array(-380,-357,-116,-111),800=>array(-383,-203,-118,-111),801=>array(-548,-222,-127,139),802=>array(-407,-222,-59,139),803=>array(-397,-213,-254,-70),804=>array(-434,-213,-72,-70),805=>array(-366,-240,-136,-11),806=>array(-354,-230,-150,-69),807=>array(-388,-196,-153,0),808=>array(-348,-196,-137,0),809=>array(-312,-266,-181,-69),810=>array(-422,-253,-78,-69),811=>array(-411,-221,-59,-69),812=>array(-416,-251,-48,-67),813=>array(-452,-253,-84,-69),814=>array(-402,-221,-68,-69),815=>array(-432,-221,-98,-69),816=>array(-442,-222,-63,-68),817=>array(-413,-161,-87,-69),818=>array(-500,-236,0,-143),819=>array(-500,-236,0,-9),820=>array(-762,210,-78,417),821=>array(-350,234,-17,293),822=>array(-700,234,-35,293),823=>array(-699,-50,22,567),824=>array(-906,-38,38,766),825=>array(-331,-378,-164,-100),826=>array(-422,-242,-79,-59),827=>array(-418,-350,-83,-69),828=>array(-441,-221,-88,-69),829=>array(-481,581,-221,820),830=>array(-312,598,-105,877),831=>array(-500,528,0,755),835=>array(-282,606,-126,847),856=>array(13,645,157,788),864=>array(-293,723,567,898),865=>array(-310,729,582,902),880=>array(-24,0,764,729),881=>array(58,0,551,519),882=>array(18,0,846,729),883=>array(34,0,781,519),884=>array(54,557,242,800),885=>array(34,-208,221,35),886=>array(66,0,900,729),887=>array(51,0,680,519),890=>array(204,-208,343,-60),891=>array(22,-14,571,533),892=>array(34,-14,592,533),893=>array(22,-14,571,533),894=>array(-24,-161,322,490),900=>array(227,616,525,800),901=>array(164,645,606,996),902=>array(-79,0,728,800),903=>array(81,255,267,440),904=>array(42,0,955,800),905=>array(42,0,1156,800),906=>array(42,0,678,800),908=>array(42,-14,844,800),910=>array(42,0,1032,800),911=>array(1,0,875,800),912=>array(74,16,545,996),913=>array(-79,0,728,729),914=>array(-24,0,782,729),915=>array(-24,0,768,729),916=>array(-42,0,670,729),917=>array(-24,0,773,729),918=>array(-34,0,760,729),919=>array(-24,0,971,729),920=>array(42,-14,828,742),921=>array(-24,0,493,729),922=>array(-24,0,902,729),923=>array(-79,0,728,729),924=>array(-29,0,1131,729),925=>array(-27,0,945,729),926=>array(-16,0,713,729),927=>array(42,-14,828,742),928=>array(-24,0,971,729),929=>array(-24,0,757,729),931=>array(-31,0,711,729),932=>array(46,0,805,729),933=>array(50,0,794,729),934=>array(42,0,828,729),935=>array(-53,0,808,729),936=>array(66,0,978,729),937=>array(-22,0,851,742),938=>array(-24,0,508,939),939=>array(50,0,794,939),940=>array(41,-14,747,800),941=>array(25,-12,606,800),942=>array(76,-208,663,800),943=>array(74,16,477,800),944=>array(73,-1,701,996),945=>array(41,-14,747,532),946=>array(-32,-208,632,769),947=>array(85,-209,667,519),948=>array(18,-14,629,765),949=>array(25,-12,587,526),950=>array(38,-208,636,760),951=>array(76,-208,663,533),952=>array(41,-17,627,771),953=>array(74,16,413,519),954=>array(-17,0,716,519),955=>array(-37,0,600,739),956=>array(31,-208,695,519),957=>array(57,0,671,519),958=>array(27,-208,636,760),959=>array(34,-14,634,533),960=>array(-17,0,749,519),961=>array(-9,-208,644,533),962=>array(60,-208,611,533),963=>array(42,-14,738,519),964=>array(58,16,674,519),965=>array(73,-1,658,519),966=>array(68,-208,879,519),967=>array(-59,-222,707,533),968=>array(108,-208,968,519),969=>array(42,-1,914,519),970=>array(74,16,470,788),971=>array(73,-1,658,788),972=>array(34,-14,634,800),973=>array(73,-1,658,800),974=>array(42,-1,914,800),975=>array(-0,-240,925,729),976=>array(41,-17,606,771),977=>array(50,-17,814,771),978=>array(89,0,774,729),979=>array(42,0,979,800),980=>array(89,0,774,939),981=>array(38,-208,896,760),982=>array(42,-1,974,519),983=>array(29,-222,667,521),984=>array(61,-207,847,742),985=>array(60,-207,646,533),986=>array(61,-208,806,742),987=>array(52,-208,627,616),988=>array(-24,0,768,729),989=>array(-181,-211,565,742),990=>array(17,0,574,729),991=>array(80,0,587,759),992=>array(8,-209,750,742),993=>array(25,-208,637,533),1008=>array(9,-5,646,521),1009=>array(22,-210,645,533),1010=>array(34,-14,592,533),1011=>array(-166,-222,354,760),1012=>array(42,-14,828,742),1013=>array(34,-14,593,533),1014=>array(22,-14,564,533),1015=>array(-24,0,729,729),1016=>array(3,-208,665,760),1017=>array(42,-14,787,742),1018=>array(-29,0,1131,729),1019=>array(0,-208,886,519),1020=>array(-20,-208,671,533),1021=>array(12,-14,754,742),1022=>array(42,-14,787,742),1023=>array(12,-14,754,742),1024=>array(-24,0,773,927),1025=>array(-24,0,773,939),1026=>array(10,-214,808,729),1027=>array(-24,0,748,927),1028=>array(42,-14,786,742),1029=>array(13,-14,682,742),1030=>array(-24,0,493,729),1031=>array(-24,0,544,939),1032=>array(-158,-208,526,729),1033=>array(-43,-14,1129,729),1034=>array(-24,0,1188,729),1035=>array(-11,0,850,729),1036=>array(-24,0,921,927),1037=>array(-24,0,971,927),1038=>array(39,-14,873,997),1039=>array(-9,-157,986,729),1040=>array(-62,0,746,729),1041=>array(-24,0,826,729),1042=>array(-24,0,782,729),1043=>array(-24,0,748,729),1044=>array(-39,-157,908,729),1045=>array(-24,0,773,729),1046=>array(-61,0,1324,729),1047=>array(1,-14,678,742),1048=>array(-24,0,971,729),1049=>array(-24,0,971,999),1050=>array(-24,0,921,729),1051=>array(-43,-14,912,729),1052=>array(-29,0,1131,729),1053=>array(-24,0,971,729),1054=>array(42,-14,828,742),1055=>array(-24,0,971,729),1056=>array(-24,0,757,729),1057=>array(42,-14,787,742),1058=>array(46,0,805,729),1059=>array(39,-14,873,729),1060=>array(38,0,912,729),1061=>array(-53,0,808,729),1062=>array(-9,-157,985,729),1063=>array(90,0,932,729),1064=>array(-29,0,1297,729),1065=>array(-14,-157,1312,729),1066=>array(42,0,884,729),1067=>array(-24,0,1227,729),1068=>array(-24,0,753,729),1069=>array(12,-14,754,742),1070=>array(-24,-14,1238,742),1071=>array(-48,0,908,729),1072=>array(34,-14,577,533),1073=>array(39,-14,695,786),1074=>array(33,-14,611,533),1075=>array(56,-14,553,534),1076=>array(34,-14,663,760),1077=>array(33,-14,593,533),1078=>array(10,-14,1325,533),1079=>array(24,-14,593,533),1080=>array(63,-14,671,519),1081=>array(63,-14,671,817),1082=>array(56,-14,682,533),1083=>array(10,-14,676,519),1084=>array(10,-14,895,519),1085=>array(56,0,673,519),1086=>array(34,-14,634,533),1087=>array(56,0,664,533),1088=>array(25,-208,687,533),1089=>array(34,-14,592,533),1090=>array(56,0,995,533),1091=>array(-20,-222,638,519),1092=>array(30,-208,866,760),1093=>array(-19,0,605,519),1094=>array(63,-217,748,519),1095=>array(63,0,659,519),1096=>array(63,-14,1002,519),1097=>array(63,-217,1079,519),1098=>array(18,-14,690,534),1099=>array(63,-14,961,519),1100=>array(63,-14,623,519),1101=>array(34,-14,612,533),1102=>array(56,-14,969,533),1103=>array(10,-14,740,519),1104=>array(33,-14,593,800),1105=>array(33,-14,594,788),1106=>array(30,-222,642,760),1107=>array(56,-14,579,800),1108=>array(34,-14,593,533),1109=>array(-0,-14,542,533),1110=>array(34,0,337,760),1111=>array(57,0,466,788),1112=>array(-166,-222,354,760),1113=>array(10,-14,978,519),1114=>array(56,-14,975,519),1115=>array(34,0,642,760),1116=>array(56,-14,682,800),1117=>array(63,-14,671,800),1118=>array(-20,-222,638,823),1119=>array(63,-220,671,519),1122=>array(31,0,809,729),1123=>array(56,-14,1013,534),1124=>array(-24,-14,1186,742),1125=>array(76,-14,948,533),1130=>array(10,0,1314,729),1131=>array(28,-14,1021,519),1132=>array(-24,0,1561,729),1133=>array(76,-14,1259,519),1136=>array(61,0,1169,729),1137=>array(48,-208,1141,760),1138=>array(42,-14,828,742),1139=>array(34,-14,619,533),1140=>array(68,0,974,742),1141=>array(50,0,785,533),1142=>array(68,0,974,927),1143=>array(50,0,785,800),1164=>array(29,0,807,729),1165=>array(49,-14,633,760),1168=>array(-24,0,786,872),1169=>array(58,0,633,668),1170=>array(-24,0,748,729),1171=>array(56,-14,553,534),1172=>array(-24,-214,768,729),1173=>array(-17,-222,624,519),1174=>array(-61,-157,1324,729),1175=>array(10,-217,1325,533),1176=>array(1,-196,678,742),1177=>array(24,-196,593,533),1178=>array(-24,-157,921,729),1179=>array(56,-217,682,533),1182=>array(-24,0,921,729),1183=>array(56,-14,682,760),1184=>array(42,0,1053,729),1185=>array(21,-14,765,533),1186=>array(-24,-157,971,729),1187=>array(56,-217,745,519),1188=>array(-24,0,1225,729),1189=>array(56,0,941,519),1190=>array(-24,-214,1230,729),1191=>array(-17,-222,945,519),1194=>array(42,-196,787,742),1195=>array(34,-196,592,533),1196=>array(46,-157,804,729),1197=>array(56,-217,1081,533),1198=>array(50,0,794,729),1199=>array(47,-208,628,519),1200=>array(50,0,793,729),1201=>array(47,-208,628,519),1202=>array(-53,-157,808,729),1203=>array(-18,-217,636,519),1204=>array(22,-157,1029,729),1205=>array(35,-217,777,519),1206=>array(90,-157,932,729),1207=>array(63,-217,731,519),1210=>array(-41,0,799,729),1211=>array(34,0,642,760),1216=>array(-24,0,493,729),1217=>array(-61,0,1324,927),1218=>array(10,-14,1325,776),1219=>array(-24,-214,902,729),1220=>array(-17,-222,716,519),1223=>array(-24,-214,971,729),1224=>array(-17,-222,749,519),1227=>array(161,-157,1003,729),1228=>array(73,-162,749,519),1231=>array(-40,0,429,760),1232=>array(-62,0,746,936),1233=>array(34,-14,577,776),1234=>array(-62,0,746,939),1235=>array(34,-14,577,788),1236=>array(-102,0,1044,729),1237=>array(27,-14,889,533),1238=>array(-24,0,773,927),1239=>array(33,-14,593,776),1240=>array(42,-14,828,742),1241=>array(45,-14,591,533),1242=>array(42,-14,828,939),1243=>array(45,-14,596,788),1244=>array(-61,0,1324,939),1245=>array(10,-14,1325,788),1246=>array(1,-14,678,939),1247=>array(24,-14,593,788),1248=>array(-30,-14,606,729),1249=>array(-28,-203,604,519),1250=>array(-24,0,971,914),1251=>array(63,-14,671,763),1252=>array(-24,0,971,939),1253=>array(63,-14,671,788),1254=>array(42,-14,828,939),1255=>array(34,-14,634,788),1256=>array(42,-14,828,742),1257=>array(41,-14,627,533),1258=>array(42,-14,828,939),1259=>array(41,-14,627,788),1260=>array(12,-14,754,939),1261=>array(34,-14,615,788),1262=>array(39,-14,873,914),1263=>array(-20,-222,638,763),1264=>array(39,-14,873,939),1265=>array(-20,-222,638,788),1266=>array(39,-14,873,927),1267=>array(-20,-222,638,800),1268=>array(90,0,932,939),1269=>array(63,0,659,788),1270=>array(-24,-157,748,729),1271=>array(56,-217,553,534),1272=>array(-24,0,1227,939),1273=>array(63,-14,961,788),1296=>array(81,-14,774,742),1297=>array(17,-14,629,533),1298=>array(-24,-208,931,729),1299=>array(10,-222,676,519),1300=>array(-43,-14,1281,729),1301=>array(10,-14,1014,519),1306=>array(49,-196,856,742),1307=>array(52,-208,665,533),1308=>array(50,0,1206,729),1309=>array(30,0,890,519),1329=>array(95,-14,951,729),1330=>array(-38,0,802,743),1331=>array(56,0,913,743),1332=>array(20,0,928,743),1333=>array(95,-14,854,729),1334=>array(25,-72,788,743),1335=>array(-29,-72,795,729),1336=>array(-31,-72,807,743),1337=>array(-37,-10,1181,743),1338=>array(16,-14,965,729),1339=>array(-22,0,775,729),1340=>array(-15,-72,683,729),1341=>array(-21,-14,1171,729),1342=>array(82,-13,923,743),1343=>array(79,0,803,729),1344=>array(-43,-66,695,729),1345=>array(28,-32,799,743),1346=>array(27,-72,882,743),1347=>array(-37,0,815,739),1348=>array(95,-14,1070,729),1349=>array(20,-14,787,742),1350=>array(31,-14,886,801),1351=>array(63,-14,805,729),1352=>array(-38,0,776,743),1353=>array(92,-84,787,743),1354=>array(20,0,939,743),1355=>array(30,-72,803,744),1356=>array(-38,0,983,743),1357=>array(95,-14,909,729),1358=>array(45,-72,884,729),1359=>array(20,-14,752,742),1360=>array(-38,0,800,743),1361=>array(17,-14,771,742),1362=>array(-37,0,805,729),1363=>array(39,0,919,729),1364=>array(-111,0,839,743),1365=>array(32,-14,837,742),1366=>array(10,-14,919,729),1369=>array(159,481,326,760),1370=>array(-4,408,282,729),1371=>array(-15,615,324,799),1372=>array(-24,618,418,893),1373=>array(30,615,298,799),1374=>array(-17,605,436,854),1375=>array(30,618,458,760),1377=>array(60,-14,999,519),1378=>array(-28,-208,679,533),1379=>array(69,-208,771,533),1380=>array(17,-208,795,533),1381=>array(56,-14,686,760),1382=>array(69,-208,762,533),1383=>array(-30,0,640,760),1384=>array(-28,-208,693,533),1385=>array(-28,-208,931,532),1386=>array(28,-14,811,760),1387=>array(-64,-208,657,760),1388=>array(-26,-208,417,519),1389=>array(-60,-208,1026,760),1390=>array(26,-14,693,789),1391=>array(76,-208,658,760),1392=>array(-26,0,655,760),1393=>array(14,-14,601,783),1394=>array(17,-208,755,533),1395=>array(35,-14,694,771),1396=>array(35,-14,787,771),1397=>array(-153,-208,341,519),1398=>array(44,-14,637,771),1399=>array(-75,-208,505,538),1400=>array(-3,0,678,533),1401=>array(-42,-208,440,540),1402=>array(79,-208,1017,519),1403=>array(1,-208,665,537),1404=>array(-3,0,686,533),1405=>array(60,-14,667,519),1406=>array(55,-208,709,760),1407=>array(58,-14,981,533),1408=>array(-38,-208,684,533),1409=>array(40,-222,764,533),1410=>array(-1,0,479,519),1411=>array(55,-208,978,760),1412=>array(-17,-208,707,533),1413=>array(46,-14,646,533),1414=>array(21,-208,918,760),1415=>array(56,-14,797,760),1417=>array(71,-14,266,434),1418=>array(34,203,364,365),4256=>array(9,0,749,848),4257=>array(131,0,831,847),4258=>array(59,-81,811,848),4259=>array(21,-0,875,847),4260=>array(63,-0,811,848),4261=>array(59,-0,981,848),4262=>array(116,-1,934,847),4263=>array(46,-1,1121,847),4264=>array(116,-0,634,847),4265=>array(97,-0,709,847),4266=>array(63,-0,970,847),4267=>array(11,-0,926,847),4268=>array(-36,-0,758,847),4269=>array(43,-35,1057,847),4270=>array(116,-0,960,847),4271=>array(116,-0,932,846),4272=>array(62,-0,1018,846),4273=>array(60,-0,755,846),4274=>array(9,-0,747,847),4275=>array(45,-58,941,846),4276=>array(61,-0,949,846),4277=>array(80,-0,990,846),4278=>array(-36,-0,734,846),4279=>array(131,-0,863,846),4280=>array(49,-0,852,847),4281=>array(-36,-0,708,846),4282=>array(-11,-1,849,848),4283=>array(15,-0,952,847),4284=>array(-36,-0,766,847),4285=>array(10,-0,796,847),4286=>array(9,-0,843,846),4287=>array(-36,-0,1078,846),4288=>array(63,-0,1083,846),4289=>array(-36,-0,740,846),4290=>array(41,-0,812,847),4291=>array(99,-1,832,846),4292=>array(62,-0,910,846),4293=>array(13,-0,1066,847),4304=>array(20,0,528,596),4305=>array(36,0,583,853),4306=>array(-48,-225,563,566),4307=>array(27,-220,848,556),4308=>array(-57,-225,579,556),4309=>array(-57,-225,580,556),4310=>array(74,0,710,855),4311=>array(35,0,874,556),4312=>array(35,0,571,556),4313=>array(-73,-225,533,556),4314=>array(34,-220,1090,562),4315=>array(34,0,688,854),4316=>array(39,0,705,877),4317=>array(39,-123,837,556),4318=>array(19,1,644,854),4319=>array(-47,-225,644,555),4320=>array(43,-0,837,846),4321=>array(83,0,590,854),4322=>array(3,-225,724,706),4323=>array(59,-225,719,556),4324=>array(52,-225,836,556),4325=>array(-38,-225,729,855),4326=>array(21,-220,881,556),4327=>array(-68,-225,629,556),4328=>array(46,0,696,854),4329=>array(-16,-5,597,855),4330=>array(16,-225,687,556),4331=>array(32,0,683,854),4332=>array(20,-229,736,854),4333=>array(-45,-225,636,854),4334=>array(83,0,632,854),4335=>array(-93,-225,741,556),4336=>array(20,0,677,854),4337=>array(27,0,704,863),4338=>array(-56,-94,584,556),4339=>array(-39,-225,645,615),4340=>array(-38,-225,633,855),4341=>array(17,0,739,854),4342=>array(31,-225,900,699),4343=>array(-33,-225,569,566),4344=>array(-27,-225,583,556),4345=>array(27,-225,636,561),4346=>array(42,-69,594,556),4347=>array(-42,0,418,511),4348=>array(68,341,507,882),7424=>array(-16,0,619,519),7425=>array(-16,0,906,519),7426=>array(43,-14,904,533),7427=>array(-16,0,688,519),7428=>array(41,-14,592,533),7429=>array(-16,0,645,519),7430=>array(-16,0,645,519),7431=>array(-21,0,631,519),7432=>array(-42,-18,498,533),7433=>array(-4,-238,299,522),7434=>array(-31,-14,575,519),7435=>array(-16,0,715,519),7436=>array(-3,0,574,519),7437=>array(-16,0,885,519),7438=>array(51,0,754,519),7439=>array(34,-14,634,533),7440=>array(17,-14,568,533),7441=>array(41,-33,588,553),7442=>array(35,-2,584,521),7443=>array(61,-50,608,567),7444=>array(45,-14,994,533),7445=>array(3,-14,541,534),7446=>array(91,260,678,533),7447=>array(91,-14,678,259),7448=>array(-16,0,593,519),7449=>array(6,0,789,519),7450=>array(95,0,789,519),7451=>array(55,0,624,519),7452=>array(63,-14,686,519),7453=>array(-1,-74,648,596),7454=>array(31,-74,908,596),7455=>array(-32,-240,682,761),7456=>array(21,0,656,519),7457=>array(30,0,931,519),7458=>array(-15,0,584,519),7459=>array(-5,-14,586,519),7460=>array(-1,-14,590,742),7461=>array(-16,-14,755,533),7462=>array(-16,0,599,519),7463=>array(-16,0,619,519),7464=>array(-16,0,749,519),7465=>array(-16,0,593,519),7466=>array(76,0,880,519),7467=>array(-28,-14,723,519),7468=>array(-49,334,458,735),7469=>array(-64,334,658,735),7470=>array(-15,334,493,735),7471=>array(-10,334,525,742),7472=>array(-15,334,520,735),7473=>array(-15,334,487,735),7474=>array(29,334,537,735),7475=>array(26,326,511,742),7476=>array(-15,334,612,735),7477=>array(-15,334,311,735),7478=>array(-100,220,332,735),7479=>array(-15,334,568,735),7480=>array(-15,334,407,735),7481=>array(-18,334,712,735),7482=>array(-17,334,595,735),7483=>array(47,326,621,734),7484=>array(26,326,521,742),7485=>array(5,326,390,750),7486=>array(-15,334,477,735),7487=>array(-15,334,490,735),7488=>array(29,334,507,735),7489=>array(60,326,581,735),7490=>array(32,334,760,735),7491=>array(21,318,363,625),7492=>array(45,318,386,625),7493=>array(26,318,470,624),7494=>array(27,318,570,625),7495=>array(43,326,434,752),7496=>array(23,326,443,752),7497=>array(37,326,390,627),7498=>array(45,326,388,627),7499=>array(26,324,366,627),7500=>array(32,324,372,627),7501=>array(30,212,486,627),7502=>array(54,203,244,621),7503=>array(42,334,428,752),7504=>array(56,334,647,627),7505=>array(69,212,443,627),7506=>array(38,326,416,627),7507=>array(24,326,372,627),7508=>array(74,477,443,627),7509=>array(74,326,443,477),7510=>array(43,220,460,627),7511=>array(58,326,312,708),7512=>array(67,326,450,620),7513=>array(4,285,404,660),7514=>array(67,326,658,620),7515=>array(66,334,429,620),7516=>array(-7,326,477,633),7517=>array(-14,217,394,765),7518=>array(49,217,417,625),7519=>array(13,326,391,763),7520=>array(42,217,552,625),7521=>array(-32,209,440,633),7522=>array(21,0,212,418),7523=>array(65,0,403,298),7524=>array(67,-8,450,286),7525=>array(66,0,429,286),7526=>array(-14,-117,394,431),7527=>array(49,-117,417,291),7528=>array(-1,-117,404,299),7529=>array(42,-117,552,291),7530=>array(-32,-125,440,299),7531=>array(63,-14,1000,533),7543=>array(-12,-222,638,533),7544=>array(-15,334,612,735),7547=>array(-16,0,405,519),7548=>array(31,0,374,519),7549=>array(25,-208,729,533),7550=>array(20,-14,686,519),7551=>array(-21,-14,705,519),7557=>array(-39,-222,428,760),7579=>array(15,326,459,631),7580=>array(38,326,389,627),7581=>array(48,272,396,624),7582=>array(26,326,415,754),7583=>array(27,324,372,627),7584=>array(-37,229,361,752),7585=>array(-1,212,311,620),7586=>array(31,212,487,620),7587=>array(79,220,462,620),7588=>array(24,334,233,752),7589=>array(66,334,228,620),7590=>array(10,334,276,620),7591=>array(42,334,308,620),7592=>array(-5,211,304,752),7593=>array(48,212,268,752),7594=>array(17,212,312,752),7595=>array(10,334,364,621),7596=>array(69,212,647,627),7597=>array(79,220,671,620),7598=>array(-2,212,520,627),7599=>array(69,212,500,627),7600=>array(10,334,448,621),7601=>array(42,326,411,627),7602=>array(41,217,465,752),7603=>array(18,212,369,627),7604=>array(-16,211,389,752),7605=>array(67,212,353,708),7606=>array(47,326,466,620),7607=>array(40,332,421,628),7608=>array(37,326,428,625),7609=>array(66,333,432,620),7610=>array(13,334,371,620),7611=>array(-10,312,368,642),7612=>array(24,212,441,620),7613=>array(16,285,394,620),7614=>array(2,222,401,620),7615=>array(42,325,411,758),7620=>array(-423,616,6,800),7621=>array(-467,616,-97,800),7622=>array(-403,616,-33,800),7623=>array(-506,616,-77,800),7624=>array(-496,616,-4,800),7625=>array(-535,616,35,800),7680=>array(-79,-240,728,729),7681=>array(34,-240,577,533),7682=>array(-24,0,782,939),7683=>array(24,-14,645,939),7684=>array(-24,-213,782,729),7685=>array(24,-213,645,760),7686=>array(-24,-161,782,729),7687=>array(24,-161,645,760),7688=>array(42,-196,787,927),7689=>array(34,-196,600,800),7690=>array(-24,0,826,939),7691=>array(10,-14,677,939),7692=>array(-24,-213,826,729),7693=>array(10,-213,678,760),7694=>array(-24,-161,826,729),7695=>array(10,-161,677,760),7696=>array(-24,-196,826,729),7697=>array(10,-196,677,760),7698=>array(-24,-240,826,729),7699=>array(10,-240,678,760),7700=>array(-24,0,773,1057),7701=>array(33,-14,593,926),7702=>array(-24,0,773,1057),7703=>array(33,-14,642,926),7704=>array(-24,-240,773,729),7705=>array(33,-240,593,533),7706=>array(-24,-222,773,729),7707=>array(33,-222,593,533),7708=>array(-24,-196,773,927),7709=>array(33,-196,593,776),7710=>array(-24,0,768,939),7711=>array(-59,-190,573,939),7712=>array(42,-14,812,938),7713=>array(22,-222,667,756),7714=>array(-24,0,971,939),7715=>array(33,0,642,939),7716=>array(-24,-213,971,729),7717=>array(34,-213,642,760),7718=>array(-24,0,971,939),7719=>array(33,0,642,939),7720=>array(-24,-196,971,729),7721=>array(33,-196,642,760),7722=>array(-24,-221,971,729),7723=>array(33,-221,642,760),7724=>array(-58,-222,493,729),7725=>array(-108,-222,336,760),7726=>array(-24,0,534,1057),7727=>array(57,0,483,917),7728=>array(-24,0,902,927),7729=>array(33,0,647,927),7730=>array(-24,-213,902,729),7731=>array(33,-213,647,760),7732=>array(-24,-161,902,729),7733=>array(33,-161,647,760),7734=>array(-24,-213,646,729),7735=>array(22,-213,355,760),7736=>array(-24,-213,646,914),7737=>array(22,-213,457,914),7738=>array(-24,-161,646,729),7739=>array(-73,-161,354,760),7740=>array(-24,-240,646,729),7741=>array(-110,-240,355,760),7742=>array(-29,0,1131,927),7743=>array(55,0,995,800),7744=>array(-29,0,1131,937),7745=>array(56,0,995,788),7746=>array(-29,-213,1131,729),7747=>array(56,-213,995,533),7748=>array(-27,0,945,939),7749=>array(56,0,664,788),7750=>array(-27,-213,945,729),7751=>array(56,-213,664,533),7752=>array(-27,-161,945,729),7753=>array(55,-161,664,533),7754=>array(-27,-257,945,729),7755=>array(56,-243,664,533),7756=>array(42,-14,828,1057),7757=>array(34,-14,689,916),7758=>array(42,-14,828,1055),7759=>array(34,-14,651,912),7760=>array(42,-14,828,1057),7761=>array(34,-14,634,926),7762=>array(42,-14,828,1057),7763=>array(34,-14,658,926),7764=>array(-24,0,757,927),7765=>array(25,-208,687,800),7766=>array(-24,0,757,939),7767=>array(25,-208,687,788),7768=>array(-24,0,778,939),7769=>array(55,0,587,788),7770=>array(-24,-213,778,729),7771=>array(47,-213,587,533),7772=>array(-24,-213,778,914),7773=>array(47,-213,587,756),7774=>array(-24,-161,778,729),7775=>array(-51,-161,587,533),7776=>array(13,-14,682,939),7777=>array(-0,-14,542,788),7778=>array(13,-213,682,742),7779=>array(-0,-213,542,533),7780=>array(13,-14,697,959),7781=>array(-0,-14,592,777),7782=>array(13,-14,682,1065),7783=>array(-0,-14,561,883),7784=>array(13,-213,682,939),7785=>array(-0,-213,542,788),7786=>array(46,0,805,939),7787=>array(48,-14,452,939),7788=>array(46,-213,805,729),7789=>array(48,-213,453,680),7790=>array(46,-161,805,729),7791=>array(22,-161,452,680),7792=>array(46,-240,805,729),7793=>array(-20,-240,453,680),7794=>array(95,-213,922,729),7795=>array(63,-213,671,519),7796=>array(95,-222,922,729),7797=>array(63,-222,671,519),7798=>array(95,-240,922,729),7799=>array(63,-240,671,519),7800=>array(95,-14,922,1057),7801=>array(63,-14,702,915),7802=>array(95,-14,922,1055),7803=>array(63,-14,671,930),7804=>array(53,0,861,929),7805=>array(20,0,588,792),7806=>array(53,-213,861,729),7807=>array(21,-213,589,521),7808=>array(50,0,1206,931),7809=>array(30,0,890,800),7810=>array(50,0,1206,931),7811=>array(30,0,890,800),7812=>array(50,0,1206,945),7813=>array(30,0,890,736),7814=>array(50,0,1206,974),7815=>array(29,0,890,788),7816=>array(50,-211,1206,729),7817=>array(30,-213,890,519),7818=>array(-53,0,808,939),7819=>array(-19,0,605,788),7820=>array(-53,0,808,939),7821=>array(-19,0,605,788),7822=>array(50,0,794,942),7823=>array(-20,-222,638,788),7824=>array(-34,0,760,982),7825=>array(-16,-41,585,800),7826=>array(-34,-213,760,729),7827=>array(-16,-213,585,560),7828=>array(-34,-161,760,729),7829=>array(-16,-161,585,560),7830=>array(33,-161,642,760),7831=>array(48,-14,477,939),7832=>array(29,0,890,888),7833=>array(-20,-222,638,888),7834=>array(34,-14,967,760),7835=>array(-59,-190,573,939),7836=>array(-59,-190,573,760),7837=>array(-59,-190,573,760),7838=>array(-39,-14,896,743),7839=>array(18,-14,629,765),7840=>array(-79,-213,728,729),7841=>array(34,-213,577,533),7842=>array(-79,0,728,1048),7843=>array(34,-14,577,866),7844=>array(-79,0,831,1054),7845=>array(34,-14,731,872),7846=>array(-79,0,765,1054),7847=>array(34,-14,666,872),7848=>array(-79,0,845,1116),7849=>array(34,-14,746,934),7850=>array(-79,0,728,1069),7851=>array(34,-14,591,887),7852=>array(-79,-213,728,982),7853=>array(34,-213,577,800),7854=>array(-79,0,728,1057),7855=>array(34,-14,598,901),7856=>array(-79,0,728,1057),7857=>array(34,-14,577,901),7858=>array(-79,0,728,1145),7859=>array(34,-14,577,989),7860=>array(-79,0,728,1069),7861=>array(34,-14,611,913),7862=>array(-79,-213,728,958),7863=>array(34,-213,577,776),7864=>array(-24,-213,773,729),7865=>array(33,-213,593,533),7866=>array(-24,0,773,1048),7867=>array(33,-14,593,866),7868=>array(-24,0,773,929),7869=>array(33,-14,593,792),7870=>array(-24,0,851,1054),7871=>array(33,-14,756,872),7872=>array(-24,0,786,1054),7873=>array(33,-14,691,872),7874=>array(-24,0,866,1116),7875=>array(33,-14,771,934),7876=>array(-24,0,773,1069),7877=>array(33,-14,616,887),7878=>array(-24,-213,773,982),7879=>array(33,-213,593,800),7880=>array(-24,0,493,1048),7881=>array(33,0,465,1106),7882=>array(-24,-213,493,729),7883=>array(31,-213,337,760),7884=>array(42,-213,828,742),7885=>array(34,-213,634,533),7886=>array(42,-14,828,1048),7887=>array(33,-14,634,866),7888=>array(42,-14,889,1054),7889=>array(34,-14,772,872),7890=>array(42,-14,828,1054),7891=>array(34,-14,707,872),7892=>array(42,-14,904,1116),7893=>array(34,-14,787,934),7894=>array(42,-14,828,1069),7895=>array(34,-14,634,887),7896=>array(42,-213,828,982),7897=>array(33,-213,634,800),7898=>array(41,-14,937,927),7899=>array(34,-14,755,800),7900=>array(41,-14,937,927),7901=>array(34,-14,755,800),7902=>array(41,-14,937,1048),7903=>array(34,-14,755,866),7904=>array(41,-14,937,929),7905=>array(34,-14,755,792),7906=>array(41,-213,937,760),7907=>array(34,-213,755,548),7908=>array(95,-213,922,729),7909=>array(63,-213,671,519),7910=>array(95,-14,922,1048),7911=>array(63,-14,671,866),7912=>array(98,-14,1127,927),7913=>array(65,-14,815,800),7914=>array(98,-14,1127,927),7915=>array(65,-14,815,800),7916=>array(98,-14,1127,1048),7917=>array(65,-14,815,866),7918=>array(98,-14,1127,929),7919=>array(65,-14,815,792),7920=>array(98,-213,1127,816),7921=>array(65,-213,815,548),7922=>array(50,0,794,931),7923=>array(-20,-222,638,776),7924=>array(50,-213,794,729),7925=>array(-20,-222,638,519),7926=>array(50,0,794,1051),7927=>array(-20,-222,638,866),7928=>array(50,0,794,929),7929=>array(-20,-222,638,792),7930=>array(-24,0,1021,729),7931=>array(34,0,726,760),7936=>array(41,-14,747,837),7937=>array(41,-14,747,837),7938=>array(41,-14,747,837),7939=>array(41,-14,747,837),7940=>array(41,-14,747,837),7941=>array(41,-14,747,837),7942=>array(41,-14,747,1009),7943=>array(41,-14,747,1009),7944=>array(-79,0,728,837),7945=>array(-79,0,728,837),7946=>array(61,0,930,837),7947=>array(71,0,930,837),7948=>array(-23,0,784,837),7949=>array(-6,0,801,837),7950=>array(-79,0,728,1009),7951=>array(-79,0,728,1009),7952=>array(25,-12,587,837),7953=>array(25,-12,587,837),7954=>array(25,-12,587,837),7955=>array(25,-12,587,837),7956=>array(25,-12,629,837),7957=>array(25,-12,633,837),7960=>array(69,0,929,837),7961=>array(69,0,920,837),7962=>array(61,0,1181,837),7963=>array(71,0,1181,837),7964=>array(57,0,1104,837),7965=>array(63,0,1131,837),7968=>array(76,-208,663,837),7969=>array(76,-208,663,837),7970=>array(76,-208,663,837),7971=>array(76,-208,663,837),7972=>array(76,-208,678,837),7973=>array(76,-208,673,837),7974=>array(76,-208,681,1009),7975=>array(76,-208,670,1009),7976=>array(69,0,1126,837),7977=>array(69,0,1121,837),7978=>array(61,0,1384,837),7979=>array(71,0,1387,837),7980=>array(57,0,1305,837),7981=>array(63,0,1334,837),7982=>array(106,0,1223,1009),7983=>array(103,0,1220,1009),7984=>array(74,16,413,837),7985=>array(74,16,413,837),7986=>array(44,16,462,837),7987=>array(55,16,472,837),7988=>array(68,16,497,837),7989=>array(59,16,498,837),7990=>array(74,16,510,1009),7991=>array(74,16,502,1009),7992=>array(69,0,654,837),7993=>array(69,0,643,837),7994=>array(61,0,903,837),7995=>array(71,0,906,837),7996=>array(57,0,824,837),7997=>array(63,0,856,837),7998=>array(106,0,748,1009),7999=>array(103,0,739,1009),8000=>array(34,-14,634,837),8001=>array(34,-14,634,837),8002=>array(34,-14,634,837),8003=>array(34,-14,634,837),8004=>array(34,-14,667,837),8005=>array(34,-14,656,837),8008=>array(69,-14,857,837),8009=>array(69,-14,892,837),8010=>array(61,-14,1197,837),8011=>array(71,-14,1194,837),8012=>array(57,-14,992,837),8013=>array(63,-14,1023,837),8016=>array(73,-1,658,837),8017=>array(73,-1,658,837),8018=>array(73,-1,658,837),8019=>array(73,-1,658,837),8020=>array(73,-1,669,837),8021=>array(73,-1,667,837),8022=>array(73,-1,658,1009),8023=>array(73,-1,658,1009),8025=>array(69,0,1002,837),8027=>array(71,0,1266,837),8029=>array(63,0,1213,837),8031=>array(103,0,1099,1009),8032=>array(42,-1,914,837),8033=>array(42,-1,914,837),8034=>array(42,-1,914,837),8035=>array(42,-1,914,837),8036=>array(42,-1,914,837),8037=>array(42,-1,914,837),8038=>array(42,-1,914,1009),8039=>array(42,-1,914,1009),8040=>array(19,0,892,837),8041=>array(51,0,924,837),8042=>array(61,0,1229,837),8043=>array(71,0,1235,837),8044=>array(57,0,1015,837),8045=>array(63,0,1049,837),8046=>array(106,0,984,1009),8047=>array(103,0,1021,1009),8048=>array(41,-14,747,800),8049=>array(41,-14,747,800),8050=>array(25,-12,587,800),8051=>array(25,-12,606,800),8052=>array(76,-208,663,800),8053=>array(76,-208,663,800),8054=>array(73,16,413,800),8055=>array(74,16,477,800),8056=>array(34,-14,634,800),8057=>array(34,-14,634,800),8058=>array(73,-1,658,800),8059=>array(73,-1,658,800),8060=>array(42,-1,914,800),8061=>array(42,-1,914,800),8064=>array(41,-208,747,837),8065=>array(41,-208,747,837),8066=>array(41,-208,747,837),8067=>array(41,-208,747,837),8068=>array(41,-208,747,837),8069=>array(41,-208,747,837),8070=>array(41,-208,747,1009),8071=>array(41,-208,747,1009),8072=>array(-79,-208,728,837),8073=>array(-79,-208,728,837),8074=>array(61,-208,930,837),8075=>array(71,-208,930,837),8076=>array(-23,-208,784,837),8077=>array(-6,-208,801,837),8078=>array(-79,-208,728,1009),8079=>array(-79,-208,728,1009),8080=>array(76,-208,663,837),8081=>array(76,-208,663,837),8082=>array(76,-208,663,837),8083=>array(76,-208,663,837),8084=>array(76,-208,678,837),8085=>array(76,-208,673,837),8086=>array(76,-208,681,1009),8087=>array(76,-208,670,1009),8088=>array(69,-208,1126,837),8089=>array(69,-208,1121,837),8090=>array(61,-208,1384,837),8091=>array(71,-208,1387,837),8092=>array(57,-208,1305,837),8093=>array(63,-208,1334,837),8094=>array(106,-208,1223,1009),8095=>array(103,-208,1220,1009),8096=>array(42,-208,914,837),8097=>array(42,-208,914,837),8098=>array(42,-208,914,837),8099=>array(42,-208,914,837),8100=>array(42,-208,914,837),8101=>array(42,-208,914,837),8102=>array(42,-208,914,1009),8103=>array(42,-208,914,1009),8104=>array(19,-208,892,837),8105=>array(51,-208,924,837),8106=>array(61,-208,1229,837),8107=>array(71,-208,1235,837),8108=>array(57,-208,1015,837),8109=>array(63,-208,1049,837),8110=>array(106,-208,984,1009),8111=>array(103,-208,1021,1009),8112=>array(41,-14,747,776),8113=>array(41,-14,747,756),8114=>array(41,-208,747,800),8115=>array(41,-208,747,532),8116=>array(41,-208,747,800),8118=>array(41,-14,747,792),8119=>array(41,-208,747,792),8120=>array(-79,0,728,936),8121=>array(-79,0,728,914),8122=>array(-44,0,763,800),8123=>array(-79,0,728,800),8124=>array(-79,-208,728,729),8125=>array(233,596,389,837),8126=>array(204,-208,343,-60),8127=>array(233,596,389,837),8128=>array(134,638,513,792),8129=>array(164,645,578,959),8130=>array(76,-208,663,800),8131=>array(76,-208,663,533),8132=>array(76,-208,663,800),8134=>array(76,-208,663,792),8135=>array(76,-208,663,792),8136=>array(61,0,1011,800),8137=>array(42,0,955,800),8138=>array(61,0,1217,800),8139=>array(42,0,1156,800),8140=>array(-24,-208,971,729),8141=>array(102,596,520,837),8142=>array(112,596,541,837),8143=>array(178,596,557,1009),8144=>array(74,16,452,776),8145=>array(74,16,434,756),8146=>array(74,16,470,997),8147=>array(74,16,545,996),8150=>array(74,16,456,792),8151=>array(74,16,522,959),8152=>array(-24,0,493,927),8153=>array(-24,0,493,914),8154=>array(61,0,739,800),8155=>array(42,0,678,800),8157=>array(112,596,528,837),8158=>array(102,596,541,837),8159=>array(175,596,554,1009),8160=>array(73,-1,658,776),8161=>array(73,-1,658,756),8162=>array(73,-1,658,997),8163=>array(73,-1,701,996),8164=>array(-9,-208,644,837),8165=>array(-9,-208,644,837),8166=>array(73,-1,658,792),8167=>array(73,-1,671,959),8168=>array(50,0,794,927),8169=>array(50,0,794,914),8170=>array(61,0,1099,800),8171=>array(42,0,1032,800),8172=>array(69,0,915,837),8173=>array(164,645,526,997),8174=>array(164,645,606,996),8175=>array(128,616,354,800),8178=>array(42,-208,914,800),8179=>array(42,-208,914,519),8180=>array(42,-208,914,800),8182=>array(42,-1,914,746),8183=>array(42,-208,914,746),8184=>array(61,-14,1026,800),8185=>array(42,-14,844,800),8186=>array(61,0,1062,800),8187=>array(1,0,875,800),8188=>array(-22,-208,851,742),8189=>array(227,616,525,800),8190=>array(236,596,391,837),8208=>array(41,202,374,334),8209=>array(41,202,374,334),8210=>array(42,207,653,324),8211=>array(42,207,458,324),8212=>array(42,207,958,324),8213=>array(-12,207,1012,324),8214=>array(129,-236,395,764),8215=>array(0,-236,500,-9),8216=>array(41,456,305,742),8217=>array(33,443,297,729),8218=>array(15,-130,279,156),8219=>array(83,443,266,729),8220=>array(41,456,532,742),8221=>array(33,443,524,729),8222=>array(15,-130,506,156),8223=>array(83,443,493,729),8224=>array(49,-96,537,729),8225=>array(-14,-96,537,729),8226=>array(144,196,495,547),8227=>array(144,157,534,586),8228=>array(81,-14,268,172),8229=>array(81,-14,593,172),8230=>array(81,-14,919,172),8240=>array(59,-14,1326,742),8241=>array(59,-14,1754,742),8242=>array(2,547,257,729),8243=>array(2,547,440,729),8244=>array(2,547,624,729),8245=>array(161,547,346,729),8246=>array(161,547,532,729),8247=>array(161,547,712,729),8248=>array(101,-238,632,29),8249=>array(69,64,351,522),8250=>array(49,64,332,522),8252=>array(11,-14,633,729),8253=>array(103,-14,574,742),8254=>array(0,663,500,755),8258=>array(22,-37,1001,832),8260=>array(-260,-14,427,742),8261=>array(39,-132,488,760),8262=>array(-16,-132,435,760),8263=>array(70,-14,1083,742),8264=>array(103,-14,862,742),8265=>array(11,-14,824,742),8267=>array(47,-96,615,729),8268=>array(75,189,425,541),8269=>array(75,189,425,541),8270=>array(22,0,501,464),8271=>array(38,-161,256,490),8273=>array(53,-14,439,797),8274=>array(3,-93,528,729),8275=>array(49,221,951,406),8279=>array(2,547,807,729),8304=>array(24,326,404,742),8305=>array(21,334,212,752),8308=>array(4,334,394,742),8309=>array(11,326,402,742),8310=>array(21,326,409,742),8311=>array(35,334,402,742),8312=>array(12,326,414,742),8313=>array(15,326,403,742),8314=>array(67,334,461,679),8315=>array(67,475,461,537),8316=>array(67,415,461,598),8317=>array(60,249,321,752),8318=>array(-24,249,238,752),8319=>array(35,334,418,627),8320=>array(24,0,404,416),8321=>array(39,8,339,416),8322=>array(2,8,397,416),8323=>array(7,0,401,416),8324=>array(4,8,394,416),8325=>array(11,0,402,416),8326=>array(21,0,409,416),8327=>array(35,8,402,416),8328=>array(12,0,414,416),8329=>array(15,0,403,416),8330=>array(67,8,461,353),8331=>array(67,149,461,211),8332=>array(67,89,461,272),8333=>array(60,-78,321,426),8334=>array(-24,-78,238,426),8336=>array(21,-8,363,299),8337=>array(37,0,390,301),8338=>array(38,0,416,301),8339=>array(-12,8,381,293),8340=>array(45,0,388,301),8341=>array(53,0,446,425),8342=>array(42,8,428,426),8343=>array(50,0,246,425),8344=>array(56,8,647,301),8345=>array(35,8,418,301),8346=>array(43,-106,460,301),8347=>array(20,1,365,307),8348=>array(58,0,312,382),8358=>array(-18,0,713,729),8364=>array(-24,-14,696,742),8367=>array(-19,-193,1168,723),8369=>array(-24,0,806,729),8372=>array(3,-14,875,742),8373=>array(83,-146,689,761),8376=>array(42,0,805,729),8377=>array(54,0,727,729),8451=>array(87,-14,1189,749),8457=>array(87,0,1170,749),8462=>array(34,0,642,760),8463=>array(34,0,642,760),8470=>array(-34,-14,1042,731),8482=>array(116,447,840,729),8486=>array(-22,0,851,742),8487=>array(40,-13,913,729),8490=>array(-24,0,902,729),8491=>array(-98,0,708,928),8498=>array(-58,0,734,729),8513=>array(5,-14,747,742),8514=>array(9,0,554,729),8515=>array(11,0,671,729),8516=>array(2,0,749,729),8523=>array(46,-14,931,742),8526=>array(-39,0,614,519),8528=>array(28,-14,1007,742),8529=>array(28,-14,1008,742),8530=>array(28,-14,1447,742),8531=>array(28,-14,1006,742),8532=>array(2,-14,1006,742),8533=>array(28,-14,1007,742),8534=>array(2,-14,1007,742),8535=>array(7,-14,1007,742),8536=>array(4,-14,1007,742),8537=>array(28,-14,1014,742),8538=>array(11,-14,1014,742),8539=>array(28,-14,1019,742),8540=>array(7,-14,1019,742),8541=>array(11,-14,1019,742),8542=>array(35,-14,1019,742),8543=>array(28,-14,875,742),8544=>array(-24,0,493,729),8545=>array(-24,0,762,729),8546=>array(-24,0,1030,729),8547=>array(-24,0,1179,729),8548=>array(53,0,861,729),8549=>array(53,0,1152,729),8550=>array(53,0,1421,729),8551=>array(53,0,1689,729),8552=>array(-24,0,1101,729),8553=>array(-53,0,808,729),8554=>array(-53,0,1104,729),8555=>array(-53,0,1372,729),8556=>array(-24,0,646,729),8557=>array(42,-14,787,742),8558=>array(-24,0,826,729),8559=>array(-29,0,1131,729),8560=>array(34,0,337,760),8561=>array(34,0,717,760),8562=>array(34,0,1097,760),8563=>array(34,0,969,760),8564=>array(21,0,589,521),8565=>array(21,0,918,760),8566=>array(21,0,1298,760),8567=>array(21,0,1678,760),8568=>array(34,0,985,760),8569=>array(-19,0,605,519),8570=>array(-19,0,933,760),8571=>array(-19,0,1313,760),8572=>array(34,0,355,760),8573=>array(34,-14,592,533),8574=>array(10,-14,678,760),8575=>array(56,0,995,533),8576=>array(37,0,1239,729),8577=>array(-24,0,835,729),8578=>array(37,0,1239,729),8579=>array(12,-14,754,742),8580=>array(22,-14,571,533),8581=>array(61,-208,805,742),8585=>array(24,-14,1006,742),8592=>array(37,119,781,527),8593=>array(215,0,623,744),8594=>array(57,119,801,527),8595=>array(215,-20,623,724),8596=>array(37,119,801,527),8597=>array(215,-20,623,744),8598=>array(147,29,713,595),8599=>array(125,29,690,595),8600=>array(125,52,690,617),8601=>array(147,52,713,617),8602=>array(37,88,781,558),8603=>array(57,88,801,558),8604=>array(54,191,795,499),8605=>array(42,191,784,499),8606=>array(37,119,781,527),8607=>array(215,0,623,744),8608=>array(57,119,801,527),8609=>array(215,-20,623,724),8610=>array(37,118,789,529),8611=>array(49,118,801,529),8612=>array(37,119,781,527),8613=>array(215,0,623,744),8614=>array(57,119,801,527),8615=>array(215,-20,623,724),8616=>array(215,0,623,744),8617=>array(37,119,781,571),8618=>array(57,119,801,571),8619=>array(37,119,781,571),8620=>array(57,119,801,571),8621=>array(37,119,801,527),8622=>array(37,88,801,558),8623=>array(171,-17,699,730),8624=>array(208,0,610,744),8625=>array(228,0,630,744),8626=>array(208,-20,610,724),8627=>array(228,-20,630,724),8628=>array(130,90,728,614),8629=>array(147,53,671,650),8630=>array(76,141,747,569),8631=>array(91,141,762,569),8632=>array(132,29,713,736),8633=>array(57,-52,781,698),8634=>array(115,48,733,600),8635=>array(104,48,723,600),8636=>array(34,270,781,527),8637=>array(34,119,781,377),8638=>array(365,0,623,747),8639=>array(215,0,473,747),8640=>array(57,270,804,527),8641=>array(57,119,804,377),8642=>array(365,-23,623,724),8643=>array(215,-23,473,724),8644=>array(37,-52,801,698),8645=>array(44,-20,794,744),8646=>array(37,-52,801,698),8647=>array(37,-101,781,747),8648=>array(-5,0,843,744),8649=>array(57,-101,801,747),8650=>array(-5,-20,843,724),8651=>array(34,21,804,625),8652=>array(34,21,804,625),8653=>array(37,88,781,558),8654=>array(37,88,801,558),8655=>array(57,88,801,558),8656=>array(37,119,781,527),8657=>array(215,0,623,744),8658=>array(57,119,801,527),8659=>array(215,-20,623,724),8660=>array(37,119,801,527),8661=>array(215,-20,623,744),8662=>array(147,-31,773,595),8663=>array(65,-31,690,595),8664=>array(65,52,690,677),8665=>array(147,52,773,677),8666=>array(37,70,781,576),8667=>array(57,70,801,576),8668=>array(37,119,781,527),8669=>array(57,119,801,527),8670=>array(215,0,623,744),8671=>array(215,-20,623,724),8672=>array(37,119,781,527),8673=>array(215,0,623,744),8674=>array(57,119,801,527),8675=>array(215,-20,623,724),8676=>array(57,119,781,527),8677=>array(57,119,781,527),8678=>array(37,119,781,527),8679=>array(215,0,623,744),8680=>array(57,119,801,527),8681=>array(215,-20,623,724),8682=>array(215,0,623,744),8683=>array(192,0,646,744),8684=>array(192,0,646,744),8685=>array(192,0,646,744),8686=>array(215,0,623,744),8687=>array(192,0,646,744),8688=>array(57,96,801,550),8689=>array(77,0,767,694),8690=>array(71,0,761,694),8691=>array(215,-20,623,744),8692=>array(57,119,801,527),8693=>array(44,-20,794,744),8694=>array(57,-140,801,786),8695=>array(37,119,781,527),8696=>array(57,119,801,527),8697=>array(37,119,801,527),8698=>array(37,119,781,527),8699=>array(57,119,801,527),8700=>array(37,119,801,527),8701=>array(37,119,781,527),8702=>array(57,119,801,527),8703=>array(37,119,801,527),8704=>array(4,0,637,729),8706=>array(37,-12,499,659),8707=>array(70,0,532,729),8708=>array(70,-120,532,849),8710=>array(20,0,734,729),8711=>array(20,0,734,729),8712=>array(106,0,634,627),8713=>array(106,-138,634,765),8715=>array(106,0,634,627),8716=>array(106,-138,634,765),8719=>array(23,-192,816,719),8720=>array(23,-192,816,719),8721=>array(10,-192,734,719),8722=>array(106,257,732,369),8723=>array(106,0,732,627),8724=>array(106,0,732,681),8725=>array(-80,-93,445,729),8727=>array(106,82,585,546),8728=>array(106,161,413,468),8729=>array(106,161,413,468),8730=>array(35,-20,658,827),8731=>array(35,-20,658,940),8732=>array(32,-20,658,928),8733=>array(100,97,572,499),8734=>array(100,97,734,499),8735=>array(118,79,720,681),8736=>array(118,79,720,681),8739=>array(106,-98,218,827),8740=>array(86,-98,521,827),8741=>array(106,-98,423,827),8742=>array(86,-98,687,827),8743=>array(151,0,661,584),8744=>array(151,0,661,584),8745=>array(105,0,732,627),8746=>array(105,-12,732,615),8747=>array(24,-182,555,759),8748=>array(24,-182,946,759),8749=>array(24,-182,1336,759),8760=>array(106,258,732,567),8761=>array(106,60,732,567),8762=>array(106,60,732,567),8763=>array(106,60,732,567),8764=>array(106,222,732,406),8765=>array(106,222,732,406),8770=>array(106,119,732,480),8771=>array(106,147,732,508),8776=>array(106,119,732,508),8784=>array(106,147,732,717),8785=>array(106,-90,732,717),8786=>array(106,-90,732,717),8787=>array(106,-90,732,717),8788=>array(106,110,976,518),8789=>array(106,110,976,518),8800=>array(106,-5,732,631),8801=>array(106,91,732,536),8804=>array(106,0,732,580),8805=>array(106,0,732,580),8834=>array(106,0,732,627),8835=>array(106,0,732,627),8836=>array(106,-138,732,765),8837=>array(106,-138,732,765),8838=>array(106,-85,732,712),8839=>array(106,-85,732,712),8844=>array(105,-12,732,615),8845=>array(105,-12,732,615),8846=>array(105,-12,732,615),8847=>array(106,1,732,627),8848=>array(106,1,732,627),8849=>array(106,-85,732,712),8850=>array(106,-85,732,712),8851=>array(106,0,732,627),8852=>array(106,0,732,627),8853=>array(105,0,732,627),8854=>array(105,0,732,627),8855=>array(105,0,732,627),8856=>array(105,0,732,627),8857=>array(105,0,732,627),8858=>array(105,0,732,627),8859=>array(105,0,732,627),8860=>array(105,0,732,627),8861=>array(105,0,732,627),8862=>array(106,1,732,627),8863=>array(106,1,732,627),8864=>array(106,1,732,627),8865=>array(106,1,732,627),8866=>array(106,0,778,729),8867=>array(106,0,778,729),8868=>array(106,0,854,688),8869=>array(106,0,854,688),8870=>array(106,0,510,729),8871=>array(106,0,510,729),8872=>array(106,0,778,729),8873=>array(106,0,778,729),8874=>array(106,0,778,729),8875=>array(106,0,974,729),8876=>array(106,-123,778,852),8877=>array(106,-123,778,852),8878=>array(106,-123,778,852),8879=>array(106,-123,974,852),8901=>array(106,255,292,440),8962=>array(71,0,763,596),8968=>array(38,-132,489,760),8969=>array(88,-132,435,760),8970=>array(38,-132,385,760),8971=>array(-16,-132,435,760),8976=>array(106,140,732,441),8977=>array(3,113,536,646),8984=>array(84,0,843,759),8985=>array(106,140,732,441),8992=>array(226,-250,555,925),8993=>array(22,-239,351,940),8997=>array(84,0,916,723),9000=>array(59,0,1385,729),9085=>array(1,-228,1006,85),9115=>array(63,-252,438,928),9116=>array(63,-252,205,940),9117=>array(63,-240,438,940),9118=>array(63,-252,438,928),9119=>array(295,-252,438,940),9120=>array(63,-240,438,940),9121=>array(63,-252,438,928),9122=>array(63,-252,205,940),9123=>array(63,-240,438,940),9124=>array(63,-252,438,928),9125=>array(295,-252,438,940),9126=>array(63,-240,438,940),9127=>array(306,-261,668,928),9128=>array(82,-247,444,934),9129=>array(306,-240,668,934),9130=>array(306,-256,444,934),9131=>array(82,-261,444,928),9132=>array(306,-247,668,934),9133=>array(82,-240,444,934),9134=>array(226,-250,351,940),9167=>array(91,0,854,596),9251=>array(27,-228,780,85),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,779,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-124,854,643),9633=>array(91,-124,854,643),9634=>array(91,-124,854,643),9635=>array(91,-124,854,643),9636=>array(91,-124,854,643),9637=>array(91,-124,854,643),9638=>array(91,-124,854,643),9639=>array(91,-124,854,643),9640=>array(91,-124,854,643),9641=>array(91,-124,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-124,766,643),9651=>array(3,-124,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-124,766,643),9655=>array(3,-124,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-124,766,643),9661=>array(3,-124,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-124,766,643),9665=>array(3,-124,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-124,766,643),9671=>array(3,-124,766,643),9672=>array(3,-124,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,385,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,385,260),9696=>array(55,260,818,645),9697=>array(55,-125,818,260),9698=>array(3,-124,766,643),9699=>array(3,-124,766,643),9700=>array(3,-124,766,643),9701=>array(3,-124,766,643),9702=>array(150,227,440,516),9703=>array(91,-124,854,643),9704=>array(91,-124,854,643),9705=>array(91,-124,854,643),9706=>array(91,-124,854,643),9707=>array(91,-124,854,643),9708=>array(3,-124,766,643),9709=>array(3,-124,766,643),9710=>array(3,-124,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-124,854,643),9713=>array(91,-124,854,643),9714=>array(91,-124,854,643),9715=>array(91,-124,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-124,766,643),9721=>array(3,-124,766,643),9722=>array(3,-124,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-124,766,643),9728=>array(83,0,813,729),9784=>array(80,3,817,721),9785=>array(83,0,813,730),9786=>array(83,0,813,730),9787=>array(83,0,813,730),9788=>array(83,0,813,730),9791=>array(85,-102,528,732),9792=>array(85,-125,646,731),9793=>array(85,-125,646,731),9794=>array(85,-5,831,729),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),10145=>array(57,119,801,527),10181=>array(4,-163,438,769),10182=>array(-37,-163,476,769),10208=>array(3,-233,491,807),10216=>array(104,-132,464,759),10217=>array(-7,-132,353,759),10224=>array(68,0,770,744),10225=>array(68,-20,770,724),10226=>array(76,48,747,618),10227=>array(91,48,762,618),10228=>array(57,39,996,608),10229=>array(37,119,1376,527),10230=>array(57,119,1396,527),10231=>array(37,119,1396,527),10232=>array(37,119,1376,527),10233=>array(57,119,1396,527),10234=>array(37,119,1396,527),10235=>array(37,119,1376,527),10236=>array(57,119,1396,527),10237=>array(37,119,1376,527),10238=>array(57,119,1396,527),10239=>array(57,119,1396,527),10241=>array(146,586,342,781),10242=>array(146,325,342,521),10243=>array(146,325,342,781),10244=>array(146,65,342,260),10245=>array(146,65,342,781),10246=>array(146,65,342,521),10247=>array(146,65,342,781),10248=>array(439,586,635,781),10249=>array(146,586,635,781),10250=>array(146,325,635,781),10251=>array(146,325,635,781),10252=>array(146,65,635,781),10253=>array(146,65,635,781),10254=>array(146,65,635,781),10255=>array(146,65,635,781),10256=>array(439,325,635,521),10257=>array(146,325,635,781),10258=>array(146,325,635,521),10259=>array(146,325,635,781),10260=>array(146,65,635,521),10261=>array(146,65,635,781),10262=>array(146,65,635,521),10263=>array(146,65,635,781),10264=>array(439,325,635,781),10265=>array(146,325,635,781),10266=>array(146,325,635,781),10267=>array(146,325,635,781),10268=>array(146,65,635,781),10269=>array(146,65,635,781),10270=>array(146,65,635,781),10271=>array(146,65,635,781),10272=>array(439,65,635,260),10273=>array(146,65,635,781),10274=>array(146,65,635,521),10275=>array(146,65,635,781),10276=>array(146,65,635,260),10277=>array(146,65,635,781),10278=>array(146,65,635,521),10279=>array(146,65,635,781),10280=>array(439,65,635,781),10281=>array(146,65,635,781),10282=>array(146,65,635,781),10283=>array(146,65,635,781),10284=>array(146,65,635,781),10285=>array(146,65,635,781),10286=>array(146,65,635,781),10287=>array(146,65,635,781),10288=>array(439,65,635,521),10289=>array(146,65,635,781),10290=>array(146,65,635,521),10291=>array(146,65,635,781),10292=>array(146,65,635,521),10293=>array(146,65,635,781),10294=>array(146,65,635,521),10295=>array(146,65,635,781),10296=>array(439,65,635,781),10297=>array(146,65,635,781),10298=>array(146,65,635,781),10299=>array(146,65,635,781),10300=>array(146,65,635,781),10301=>array(146,65,635,781),10302=>array(146,65,635,781),10303=>array(146,65,635,781),10304=>array(146,-195,342,0),10305=>array(146,-195,342,781),10306=>array(146,-195,342,521),10307=>array(146,-195,342,781),10308=>array(146,-195,342,260),10309=>array(146,-195,342,781),10310=>array(146,-195,342,521),10311=>array(146,-195,342,781),10312=>array(146,-195,635,781),10313=>array(146,-195,635,781),10314=>array(146,-195,635,781),10315=>array(146,-195,635,781),10316=>array(146,-195,635,781),10317=>array(146,-195,635,781),10318=>array(146,-195,635,781),10319=>array(146,-195,635,781),10320=>array(146,-195,635,521),10321=>array(146,-195,635,781),10322=>array(146,-195,635,521),10323=>array(146,-195,635,781),10324=>array(146,-195,635,521),10325=>array(146,-195,635,781),10326=>array(146,-195,635,521),10327=>array(146,-195,635,781),10328=>array(146,-195,635,781),10329=>array(146,-195,635,781),10330=>array(146,-195,635,781),10331=>array(146,-195,635,781),10332=>array(146,-195,635,781),10333=>array(146,-195,635,781),10334=>array(146,-195,635,781),10335=>array(146,-195,635,781),10336=>array(146,-195,635,260),10337=>array(146,-195,635,781),10338=>array(146,-195,635,521),10339=>array(146,-195,635,781),10340=>array(146,-195,635,260),10341=>array(146,-195,635,781),10342=>array(146,-195,635,521),10343=>array(146,-195,635,781),10344=>array(146,-195,635,781),10345=>array(146,-195,635,781),10346=>array(146,-195,635,781),10347=>array(146,-195,635,781),10348=>array(146,-195,635,781),10349=>array(146,-195,635,781),10350=>array(146,-195,635,781),10351=>array(146,-195,635,781),10352=>array(146,-195,635,521),10353=>array(146,-195,635,781),10354=>array(146,-195,635,521),10355=>array(146,-195,635,781),10356=>array(146,-195,635,521),10357=>array(146,-195,635,781),10358=>array(146,-195,635,521),10359=>array(146,-195,635,781),10360=>array(146,-195,635,781),10361=>array(146,-195,635,781),10362=>array(146,-195,635,781),10363=>array(146,-195,635,781),10364=>array(146,-195,635,781),10365=>array(146,-195,635,781),10366=>array(146,-195,635,781),10367=>array(146,-195,635,781),10368=>array(439,-195,635,0),10369=>array(146,-195,635,781),10370=>array(146,-195,635,521),10371=>array(146,-195,635,781),10372=>array(146,-195,635,260),10373=>array(146,-195,635,781),10374=>array(146,-195,635,521),10375=>array(146,-195,635,781),10376=>array(439,-195,635,781),10377=>array(146,-195,635,781),10378=>array(146,-195,635,781),10379=>array(146,-195,635,781),10380=>array(146,-195,635,781),10381=>array(146,-195,635,781),10382=>array(146,-195,635,781),10383=>array(146,-195,635,781),10384=>array(439,-195,635,521),10385=>array(146,-195,635,781),10386=>array(146,-195,635,521),10387=>array(146,-195,635,781),10388=>array(146,-195,635,521),10389=>array(146,-195,635,781),10390=>array(146,-195,635,521),10391=>array(146,-195,635,781),10392=>array(439,-195,635,781),10393=>array(146,-195,635,781),10394=>array(146,-195,635,781),10395=>array(146,-195,635,781),10396=>array(146,-195,635,781),10397=>array(146,-195,635,781),10398=>array(146,-195,635,781),10399=>array(146,-195,635,781),10400=>array(439,-195,635,260),10401=>array(146,-195,635,781),10402=>array(146,-195,635,521),10403=>array(146,-195,635,781),10404=>array(146,-195,635,260),10405=>array(146,-195,635,781),10406=>array(146,-195,635,521),10407=>array(146,-195,635,781),10408=>array(439,-195,635,781),10409=>array(146,-195,635,781),10410=>array(146,-195,635,781),10411=>array(146,-195,635,781),10412=>array(146,-195,635,781),10413=>array(146,-195,635,781),10414=>array(146,-195,635,781),10415=>array(146,-195,635,781),10416=>array(439,-195,635,521),10417=>array(146,-195,635,781),10418=>array(146,-195,635,521),10419=>array(146,-195,635,781),10420=>array(146,-195,635,521),10421=>array(146,-195,635,781),10422=>array(146,-195,635,521),10423=>array(146,-195,635,781),10424=>array(439,-195,635,781),10425=>array(146,-195,635,781),10426=>array(146,-195,635,781),10427=>array(146,-195,635,781),10428=>array(146,-195,635,781),10429=>array(146,-195,635,781),10430=>array(146,-195,635,781),10431=>array(146,-195,635,781),10432=>array(146,-195,635,0),10433=>array(146,-195,635,781),10434=>array(146,-195,635,521),10435=>array(146,-195,635,781),10436=>array(146,-195,635,260),10437=>array(146,-195,635,781),10438=>array(146,-195,635,521),10439=>array(146,-195,635,781),10440=>array(146,-195,635,781),10441=>array(146,-195,635,781),10442=>array(146,-195,635,781),10443=>array(146,-195,635,781),10444=>array(146,-195,635,781),10445=>array(146,-195,635,781),10446=>array(146,-195,635,781),10447=>array(146,-195,635,781),10448=>array(146,-195,635,521),10449=>array(146,-195,635,781),10450=>array(146,-195,635,521),10451=>array(146,-195,635,781),10452=>array(146,-195,635,521),10453=>array(146,-195,635,781),10454=>array(146,-195,635,521),10455=>array(146,-195,635,781),10456=>array(146,-195,635,781),10457=>array(146,-195,635,781),10458=>array(146,-195,635,781),10459=>array(146,-195,635,781),10460=>array(146,-195,635,781),10461=>array(146,-195,635,781),10462=>array(146,-195,635,781),10463=>array(146,-195,635,781),10464=>array(146,-195,635,260),10465=>array(146,-195,635,781),10466=>array(146,-195,635,521),10467=>array(146,-195,635,781),10468=>array(146,-195,635,260),10469=>array(146,-195,635,781),10470=>array(146,-195,635,521),10471=>array(146,-195,635,781),10472=>array(146,-195,635,781),10473=>array(146,-195,635,781),10474=>array(146,-195,635,781),10475=>array(146,-195,635,781),10476=>array(146,-195,635,781),10477=>array(146,-195,635,781),10478=>array(146,-195,635,781),10479=>array(146,-195,635,781),10480=>array(146,-195,635,521),10481=>array(146,-195,635,781),10482=>array(146,-195,635,521),10483=>array(146,-195,635,781),10484=>array(146,-195,635,521),10485=>array(146,-195,635,781),10486=>array(146,-195,635,521),10487=>array(146,-195,635,781),10488=>array(146,-195,635,781),10489=>array(146,-195,635,781),10490=>array(146,-195,635,781),10491=>array(146,-195,635,781),10492=>array(146,-195,635,781),10493=>array(146,-195,635,781),10494=>array(146,-195,635,781),10495=>array(146,-195,635,781),10496=>array(57,119,801,527),10497=>array(57,119,801,527),10498=>array(37,119,781,527),10499=>array(57,119,801,527),10500=>array(37,119,801,527),10501=>array(57,119,801,527),10502=>array(37,119,781,527),10503=>array(57,119,801,527),10504=>array(215,-20,623,724),10505=>array(215,0,623,744),10506=>array(166,0,672,744),10507=>array(166,-20,672,724),10508=>array(37,119,781,527),10509=>array(57,119,801,527),10510=>array(37,119,781,527),10511=>array(57,119,801,527),10512=>array(49,118,801,529),10513=>array(54,119,801,527),10514=>array(215,0,623,724),10515=>array(215,0,623,724),10516=>array(49,118,801,529),10517=>array(49,118,801,529),10518=>array(49,118,801,529),10519=>array(49,118,801,529),10520=>array(49,118,801,529),10521=>array(57,118,789,529),10522=>array(49,118,781,529),10523=>array(57,118,789,529),10524=>array(49,118,781,529),10525=>array(37,119,781,527),10526=>array(57,119,801,527),10527=>array(37,119,781,527),10528=>array(57,119,801,527),10529=>array(147,52,690,595),10530=>array(147,52,690,595),10531=>array(147,-45,650,595),10532=>array(188,-45,690,595),10533=>array(188,52,690,692),10534=>array(147,52,650,692),10535=>array(125,29,713,595),10536=>array(125,29,690,617),10537=>array(125,52,713,617),10538=>array(147,29,713,617),10539=>array(125,29,713,617),10540=>array(125,29,713,617),10541=>array(125,29,690,617),10542=>array(125,29,690,617),10543=>array(125,29,713,617),10544=>array(125,29,713,617),10545=>array(125,29,713,595),10546=>array(125,29,713,595),10547=>array(42,119,801,527),10548=>array(146,94,708,623),10549=>array(146,80,708,608),10550=>array(147,70,675,632),10551=>array(163,70,691,632),10552=>array(284,-13,591,735),10553=>array(247,-13,554,735),10554=>array(51,188,799,495),10555=>array(39,151,787,459),10556=>array(39,78,787,495),10557=>array(51,0,799,495),10558=>array(140,58,691,593),10559=>array(146,58,698,593),10560=>array(134,48,704,719),10561=>array(134,48,704,719),10562=>array(37,-52,801,698),10563=>array(37,-52,801,698),10564=>array(37,-52,801,698),10565=>array(57,0,801,527),10566=>array(37,0,781,527),10567=>array(57,119,801,527),10568=>array(37,119,801,527),10569=>array(215,-12,623,744),10570=>array(34,119,804,527),10571=>array(34,119,804,527),10572=>array(215,-23,623,747),10573=>array(215,-23,623,747),10574=>array(34,270,804,527),10575=>array(365,-23,623,747),10576=>array(34,119,804,377),10577=>array(215,-23,473,747),10578=>array(57,131,781,527),10579=>array(57,131,781,527),10580=>array(227,0,623,724),10581=>array(227,0,623,724),10582=>array(57,119,781,515),10583=>array(57,119,781,515),10584=>array(215,0,611,724),10585=>array(215,0,611,724),10586=>array(34,131,781,527),10587=>array(57,131,804,527),10588=>array(227,0,623,747),10589=>array(227,-23,623,724),10590=>array(34,119,781,515),10591=>array(57,119,804,515),10592=>array(215,0,611,747),10593=>array(215,-23,611,724),10594=>array(34,21,781,625),10595=>array(117,0,721,747),10596=>array(57,21,804,625),10597=>array(117,-23,721,724),10598=>array(34,172,804,625),10599=>array(34,21,804,475),10600=>array(34,172,804,625),10601=>array(34,21,804,475),10602=>array(34,184,781,613),10603=>array(34,34,781,462),10604=>array(57,184,804,613),10605=>array(57,34,804,462),10606=>array(117,-23,721,747),10607=>array(117,-23,721,747),10608=>array(57,270,781,571),10609=>array(57,119,801,757),10610=>array(57,119,801,610),10611=>array(37,36,781,527),10612=>array(57,36,801,527),10613=>array(57,-138,801,527),10614=>array(37,-76,781,791),10615=>array(37,42,975,604),10616=>array(57,-76,801,791),10617=>array(57,-76,801,748),10618=>array(37,10,903,637),10619=>array(37,-76,781,748),10620=>array(164,11,687,636),10621=>array(151,11,674,636),10622=>array(106,62,731,584),10623=>array(106,54,731,576),10731=>array(3,-233,491,807),10764=>array(24,-182,1727,759),10765=>array(25,-182,586,760),10766=>array(25,-182,586,760),10799=>array(129,23,709,604),10858=>array(106,222,732,567),10859=>array(106,60,732,567),11008=>array(71,-28,690,591),11009=>array(148,-28,767,591),11010=>array(71,52,690,671),11011=>array(148,52,767,671),11012=>array(37,119,801,527),11013=>array(37,119,781,527),11014=>array(215,0,623,744),11015=>array(215,-20,623,724),11016=>array(71,-28,690,591),11017=>array(148,-28,767,591),11018=>array(71,52,690,671),11019=>array(148,52,767,671),11020=>array(37,119,801,527),11021=>array(215,-20,623,744),11022=>array(57,112,801,514),11023=>array(57,132,801,534),11024=>array(37,112,781,514),11025=>array(37,132,781,534),11026=>array(91,-124,854,643),11027=>array(91,-124,854,643),11028=>array(91,-124,854,643),11029=>array(91,-124,854,643),11030=>array(3,-124,766,643),11031=>array(3,-124,766,643),11032=>array(3,-124,766,643),11033=>array(3,-124,766,643),11034=>array(91,-124,854,643),11360=>array(-24,0,646,729),11361=>array(-18,0,407,760),11363=>array(-24,0,756,729),11364=>array(144,-208,849,729),11367=>array(-9,-157,986,729),11368=>array(34,-217,728,760),11369=>array(-9,-157,917,729),11370=>array(34,-217,660,760),11371=>array(-19,-157,775,729),11372=>array(-15,-214,584,560),11373=>array(29,-14,879,742),11374=>array(42,-208,1202,729),11375=>array(123,0,929,729),11376=>array(-29,-14,821,742),11377=>array(20,0,757,533),11378=>array(50,0,1288,730),11379=>array(29,0,1033,533),11381=>array(-24,0,764,729),11382=>array(58,0,551,519),11383=>array(50,-14,860,533),11385=>array(-45,-14,499,760),11386=>array(91,-14,678,533),11387=>array(-20,0,638,519),11388=>array(-8,-132,313,418),11389=>array(132,326,640,734),11390=>array(32,-208,700,742),11391=>array(-14,-208,780,729),11520=>array(96,-53,802,514),11521=>array(32,-218,665,514),11522=>array(93,-218,833,514),11523=>array(83,-2,712,759),11524=>array(102,-217,816,514),11525=>array(44,-217,990,514),11526=>array(121,0,785,759),11527=>array(44,0,988,514),11528=>array(99,0,647,514),11529=>array(42,-217,676,729),11530=>array(38,0,984,514),11531=>array(83,-4,691,759),11532=>array(42,0,676,759),11533=>array(43,-2,990,514),11534=>array(106,0,874,514),11535=>array(90,-218,928,759),11536=>array(44,0,989,759),11537=>array(42,0,675,759),11538=>array(32,-217,654,515),11539=>array(44,-221,1009,675),11540=>array(78,-217,929,555),11541=>array(64,-218,880,759),11542=>array(42,0,674,514),11543=>array(42,-217,676,514),11544=>array(42,-217,675,514),11545=>array(61,-217,679,759),11546=>array(74,-217,717,514),11547=>array(78,0,913,759),11548=>array(79,-217,1010,514),11549=>array(32,-217,711,515),11550=>array(67,-217,706,514),11551=>array(26,-218,881,518),11552=>array(98,0,1140,514),11553=>array(53,-217,662,759),11554=>array(66,-3,636,579),11555=>array(42,-217,710,759),11556=>array(42,-217,778,514),11557=>array(87,-4,909,759),11800=>array(11,-14,483,742),11807=>array(106,60,732,406),11810=>array(125,314,489,760),11811=>array(146,314,435,760),11812=>array(38,-132,327,314),11813=>array(-16,-132,348,314),11822=>array(98,-14,608,742),42564=>array(36,-14,691,742),42565=>array(23,-14,543,533),42566=>array(101,0,493,729),42567=>array(75,0,332,519),42576=>array(42,0,1358,729),42577=>array(18,-14,1029,534),42580=>array(59,-14,1311,742),42581=>array(44,-14,949,533),42582=>array(-24,0,1239,729),42583=>array(76,-14,958,533),42760=>array(146,0,471,693),42761=>array(117,0,471,693),42762=>array(87,0,471,693),42763=>array(58,0,471,693),42764=>array(29,0,471,693),42765=>array(29,0,471,693),42766=>array(29,0,442,693),42767=>array(29,0,413,693),42768=>array(29,0,383,693),42769=>array(29,0,354,693),42770=>array(29,0,471,693),42771=>array(29,0,442,693),42772=>array(29,0,413,693),42773=>array(29,0,383,693),42774=>array(29,0,354,693),42779=>array(79,326,339,743),42780=>array(45,315,305,731),42781=>array(50,318,236,734),42782=>array(40,326,227,742),42783=>array(-23,0,164,416),42790=>array(-4,-208,991,729),42791=>array(56,-222,642,760),42792=>array(66,-203,957,729),42793=>array(67,-203,866,680),42794=>array(2,-14,698,742),42795=>array(13,-12,609,742),42796=>array(12,-14,593,729),42797=>array(12,-222,572,519),42798=>array(21,-104,709,729),42799=>array(14,-240,667,519),42800=>array(-21,0,631,519),42801=>array(-0,-14,542,533),42802=>array(-79,0,1252,729),42803=>array(35,-14,912,533),42804=>array(-79,-14,1218,742),42805=>array(35,-14,971,533),42806=>array(-100,-14,1218,729),42807=>array(35,-14,951,533),42808=>array(-79,0,1101,729),42809=>array(35,-14,839,533),42810=>array(-79,0,1101,729),42811=>array(20,-14,851,533),42812=>array(-59,-208,1100,729),42813=>array(35,-222,803,533),42814=>array(12,-14,754,742),42815=>array(22,-14,571,533),42816=>array(-24,0,902,729),42817=>array(34,0,647,760),42822=>array(106,0,858,729),42823=>array(92,0,496,760),42826=>array(-12,-14,1022,742),42827=>array(-10,-14,781,533),42830=>array(42,-14,1405,742),42831=>array(41,-14,1020,533),42856=>array(-44,-208,835,729),42857=>array(26,-208,725,519),42875=>array(35,-208,771,742),42876=>array(36,-208,607,533),42880=>array(58,0,727,729),42881=>array(25,-240,345,519),42882=>array(35,-208,800,743),42883=>array(36,-208,694,533),42884=>array(35,-208,771,742),42885=>array(36,-208,607,533),42886=>array(43,-14,827,729),42887=>array(42,-14,625,519),42891=>array(159,225,383,729),42892=>array(69,458,237,729),42893=>array(90,0,932,729),42896=>array(-27,-157,945,729),42897=>array(56,-217,751,533),42922=>array(-96,0,971,729),43002=>array(-18,0,1084,519),43003=>array(51,0,734,729),43004=>array(54,0,776,729),43005=>array(-24,0,1136,729),43006=>array(-43,0,512,928),43007=>array(-79,0,1368,729),62464=>array(7,-15,633,876),62465=>array(21,-15,644,876),62466=>array(12,-15,695,875),62467=>array(81,-15,993,876),62468=>array(6,-15,712,876),62469=>array(-1,-15,701,876),62470=>array(83,-15,750,876),62471=>array(37,-14,1026,875),62472=>array(45,-15,697,876),62473=>array(7,-15,696,876),62474=>array(83,-21,1308,876),62475=>array(22,-15,732,876),62476=>array(33,-15,756,888),62477=>array(47,-146,989,876),62478=>array(13,-15,704,876),62479=>array(6,-15,780,877),62480=>array(25,-15,986,860),62481=>array(66,-15,716,876),62482=>array(33,-15,792,876),62483=>array(80,-15,803,876),62484=>array(91,-15,1006,876),62485=>array(-1,-15,776,864),62486=>array(90,-16,995,875),62487=>array(4,-15,775,875),62488=>array(26,-15,744,876),62489=>array(-26,-15,666,876),62490=>array(28,-15,752,870),62491=>array(21,-15,730,876),62492=>array(33,-15,793,876),62493=>array(1,-15,687,910),62494=>array(72,-15,712,876),62495=>array(-21,-25,961,875),62496=>array(1,-15,719,882),62497=>array(34,-15,824,879),62498=>array(-28,-57,701,876),62499=>array(4,-15,780,895),62500=>array(4,-15,718,876),62501=>array(-0,-15,766,876),62502=>array(74,-14,1009,876),62504=>array(72,-217,898,759),63172=>array(57,0,390,763),63173=>array(13,-14,663,756),63174=>array(22,-222,667,533),63175=>array(63,-14,715,731),63176=>array(63,-14,1042,731),63185=>array(60,616,448,816),63188=>array(80,624,451,840),64256=>array(-59,-190,972,760),64257=>array(-59,-190,679,760),64258=>array(-59,-190,720,760),64259=>array(-59,-190,1076,760),64260=>array(-59,-190,1115,760),64261=>array(-59,-190,878,760),64262=>array(-0,-14,976,748),65533=>array(104,-108,1169,956),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>348,33=>439,34=>521,35=>838,36=>696,37=>950,38=>903,39=>306,40=>473,41=>473,42=>523,43=>838,44=>348,45=>415,46=>348,47=>365,48=>696,49=>696,50=>696,51=>696,52=>696,53=>696,54=>696,55=>696,56=>696,57=>696,58=>369,59=>369,60=>838,61=>838,62=>838,63=>586,64=>1000,65=>776,66=>845,67=>796,68=>867,69=>762,70=>710,71=>854,72=>945,73=>468,74=>473,75=>869,76=>703,77=>1107,78=>914,79=>871,80=>752,81=>871,82=>831,83=>722,84=>744,85=>872,86=>776,87=>1123,88=>776,89=>714,90=>730,91=>473,92=>365,93=>473,94=>838,95=>500,96=>500,97=>648,98=>699,99=>609,100=>699,101=>636,102=>430,103=>699,104=>727,105=>380,106=>362,107=>693,108=>380,109=>1058,110=>727,111=>667,112=>699,113=>699,114=>527,115=>563,116=>462,117=>727,118=>581,119=>861,120=>596,121=>581,122=>568,123=>643,124=>364,125=>643,126=>838,160=>348,161=>439,162=>696,163=>696,164=>636,165=>696,166=>364,167=>523,168=>500,169=>1000,170=>487,171=>625,172=>838,173=>415,174=>1000,175=>500,176=>500,177=>838,178=>438,179=>438,180=>500,181=>732,182=>636,183=>348,184=>500,185=>438,186=>500,187=>625,188=>1043,189=>1043,190=>1043,191=>586,192=>776,193=>776,194=>776,195=>776,196=>776,197=>776,198=>1034,199=>796,200=>762,201=>762,202=>762,203=>762,204=>468,205=>468,206=>468,207=>468,208=>874,209=>914,210=>871,211=>871,212=>871,213=>871,214=>871,215=>838,216=>871,217=>872,218=>872,219=>872,220=>872,221=>714,222=>757,223=>760,224=>648,225=>648,226=>648,227=>648,228=>648,229=>648,230=>932,231=>609,232=>636,233=>636,234=>636,235=>636,236=>380,237=>380,238=>380,239=>380,240=>667,241=>727,242=>667,243=>667,244=>667,245=>667,246=>667,247=>838,248=>667,249=>727,250=>727,251=>727,252=>727,253=>581,254=>699,255=>581,256=>776,257=>648,258=>776,259=>648,260=>776,261=>648,262=>796,263=>609,264=>796,265=>609,266=>796,267=>609,268=>796,269=>609,270=>867,271=>699,272=>874,273=>699,274=>762,275=>636,276=>762,277=>636,278=>762,279=>636,280=>762,281=>636,282=>762,283=>636,284=>854,285=>699,286=>854,287=>699,288=>854,289=>699,290=>854,291=>699,292=>945,293=>727,294=>945,295=>727,296=>468,297=>380,298=>468,299=>380,300=>468,301=>380,302=>468,303=>380,304=>468,305=>380,306=>942,307=>751,308=>473,309=>362,310=>869,311=>693,312=>693,313=>703,314=>380,315=>703,316=>380,317=>703,318=>508,319=>703,320=>557,321=>710,322=>385,323=>914,324=>727,325=>914,326=>727,327=>914,328=>727,329=>1008,330=>872,331=>727,332=>871,333=>667,334=>871,335=>667,336=>871,337=>667,338=>1180,339=>1028,340=>831,341=>527,342=>831,343=>527,344=>831,345=>527,346=>722,347=>563,348=>722,349=>563,350=>722,351=>563,352=>722,353=>563,354=>744,355=>462,356=>744,357=>462,358=>744,359=>462,360=>872,361=>727,362=>872,363=>727,364=>872,365=>727,366=>872,367=>727,368=>872,369=>727,370=>872,371=>727,372=>1123,373=>861,374=>714,375=>581,376=>714,377=>730,378=>568,379=>730,380=>568,381=>730,382=>568,383=>430,384=>699,385=>845,386=>854,387=>699,388=>854,389=>699,390=>796,391=>796,392=>609,393=>874,394=>867,395=>854,396=>699,397=>667,398=>762,399=>871,400=>721,401=>710,402=>430,403=>854,404=>771,405=>1043,406=>468,407=>468,408=>869,409=>693,410=>380,411=>701,412=>1058,413=>914,414=>727,415=>871,416=>871,417=>667,418=>1200,419=>943,420=>752,421=>699,422=>831,423=>722,424=>563,425=>707,426=>331,427=>462,428=>744,429=>462,430=>744,431=>872,432=>727,433=>890,434=>890,435=>714,436=>699,437=>730,438=>568,439=>657,440=>657,441=>657,442=>657,443=>696,444=>754,445=>568,446=>536,447=>716,448=>295,449=>492,450=>459,451=>295,452=>1597,453=>1435,454=>1267,455=>1176,456=>1065,457=>742,458=>1387,459=>1276,460=>1089,461=>776,462=>648,463=>468,464=>380,465=>871,466=>667,467=>872,468=>727,469=>872,470=>727,471=>872,472=>727,473=>872,474=>727,475=>872,476=>727,477=>636,478=>776,479=>648,480=>776,481=>648,482=>1034,483=>975,484=>896,485=>699,486=>854,487=>699,488=>869,489=>693,490=>871,491=>667,492=>871,493=>667,494=>657,495=>568,496=>362,497=>1597,498=>1435,499=>1267,500=>854,501=>699,502=>1221,503=>787,504=>914,505=>727,506=>776,507=>648,508=>1034,509=>932,510=>871,511=>667,512=>776,513=>648,514=>776,515=>648,516=>762,517=>636,518=>762,519=>636,520=>468,521=>380,522=>468,523=>380,524=>871,525=>667,526=>871,527=>667,528=>831,529=>527,530=>831,531=>527,532=>872,533=>727,534=>872,535=>727,536=>722,537=>563,538=>744,539=>462,540=>690,541=>607,542=>945,543=>727,544=>872,545=>791,546=>703,547=>616,548=>730,549=>568,550=>776,551=>648,552=>762,553=>636,554=>871,555=>667,556=>871,557=>667,558=>871,559=>667,560=>871,561=>667,562=>714,563=>581,564=>573,565=>922,566=>564,567=>362,568=>1031,569=>1031,570=>776,571=>796,572=>609,573=>703,574=>744,575=>563,576=>568,577=>660,578=>547,579=>845,580=>872,581=>776,582=>762,583=>636,584=>473,585=>387,586=>848,587=>699,588=>831,589=>527,590=>714,591=>581,592=>648,593=>770,594=>770,595=>699,596=>609,597=>609,598=>699,599=>730,600=>636,601=>636,602=>907,603=>608,604=>562,605=>907,606=>720,607=>387,608=>699,609=>699,610=>626,611=>601,612=>627,613=>727,614=>727,615=>727,616=>380,617=>380,618=>380,619=>409,620=>514,621=>380,622=>795,623=>1058,624=>1058,625=>1058,626=>727,627=>727,628=>712,629=>667,630=>1061,631=>749,632=>667,633=>571,634=>571,635=>571,636=>527,637=>527,638=>452,639=>487,640=>801,641=>801,642=>563,643=>331,644=>430,645=>540,646=>331,647=>492,648=>462,649=>727,650=>679,651=>694,652=>581,653=>861,654=>635,655=>727,656=>568,657=>568,658=>568,659=>568,660=>536,661=>536,662=>536,663=>545,664=>871,665=>695,666=>720,667=>626,668=>732,669=>384,670=>740,671=>617,672=>699,673=>536,674=>536,675=>1117,676=>1179,677=>1117,678=>938,679=>715,680=>946,681=>1039,682=>870,683=>795,684=>662,685=>443,686=>613,687=>717,688=>521,689=>519,690=>313,691=>414,692=>414,693=>480,694=>527,695=>542,696=>366,697=>302,698=>521,699=>348,700=>348,701=>348,702=>366,703=>366,704=>313,705=>313,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>282,713=>500,714=>500,715=>500,716=>282,717=>500,720=>369,721=>369,722=>366,723=>366,726=>392,727=>392,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>417,736=>378,737=>292,738=>395,739=>375,740=>313,741=>500,742=>500,743=>500,744=>500,745=>500,748=>500,750=>553,751=>500,752=>500,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>779,881=>576,882=>803,883=>777,884=>302,885=>302,886=>963,887=>737,890=>500,891=>609,892=>609,893=>609,894=>369,900=>500,901=>500,902=>776,903=>348,904=>947,905=>1136,906=>662,908=>887,910=>953,911=>911,912=>484,913=>776,914=>845,915=>710,916=>776,917=>762,918=>730,919=>945,920=>871,921=>468,922=>869,923=>776,924=>1107,925=>914,926=>704,927=>871,928=>945,929=>752,931=>707,932=>744,933=>714,934=>871,935=>776,936=>913,937=>890,938=>468,939=>714,940=>770,941=>608,942=>727,943=>484,944=>694,945=>770,946=>664,947=>660,948=>667,949=>608,950=>592,951=>727,952=>667,953=>484,954=>750,955=>701,956=>732,957=>694,958=>592,959=>667,960=>732,961=>665,962=>609,963=>737,964=>673,965=>694,966=>905,967=>658,968=>941,969=>952,970=>484,971=>694,972=>667,973=>694,974=>952,975=>869,976=>667,977=>849,978=>764,979=>969,980=>764,981=>941,982=>952,983=>655,984=>871,985=>667,986=>796,987=>609,988=>710,989=>527,990=>590,991=>660,992=>796,993=>667,1008=>655,1009=>665,1010=>609,1011=>362,1012=>871,1013=>609,1014=>609,1015=>757,1016=>699,1017=>796,1018=>1107,1019=>860,1020=>692,1021=>796,1022=>796,1023=>796,1024=>762,1025=>762,1026=>901,1027=>690,1028=>795,1029=>722,1030=>468,1031=>468,1032=>473,1033=>1202,1034=>1262,1035=>963,1036=>910,1037=>945,1038=>812,1039=>945,1040=>814,1041=>854,1042=>845,1043=>690,1044=>889,1045=>762,1046=>1312,1047=>721,1048=>945,1049=>945,1050=>910,1051=>884,1052=>1107,1053=>945,1054=>871,1055=>945,1056=>752,1057=>796,1058=>744,1059=>812,1060=>949,1061=>776,1062=>966,1063=>913,1064=>1268,1065=>1293,1066=>957,1067=>1202,1068=>825,1069=>795,1070=>1287,1071=>882,1072=>648,1073=>722,1074=>657,1075=>563,1076=>695,1077=>636,1078=>1306,1079=>638,1080=>727,1081=>727,1082=>677,1083=>732,1084=>951,1085=>729,1086=>667,1087=>727,1088=>699,1089=>609,1090=>1058,1091=>598,1092=>902,1093=>596,1094=>803,1095=>715,1096=>1058,1097=>1134,1098=>727,1099=>1018,1100=>660,1101=>645,1102=>1001,1103=>796,1104=>636,1105=>636,1106=>719,1107=>563,1108=>609,1109=>563,1110=>380,1111=>380,1112=>362,1113=>1014,1114=>1011,1115=>727,1116=>677,1117=>727,1118=>598,1119=>727,1122=>880,1123=>1050,1124=>1195,1125=>963,1130=>1312,1131=>1010,1132=>1630,1133=>1247,1136=>1096,1137=>1105,1138=>871,1139=>652,1140=>916,1141=>749,1142=>916,1143=>749,1164=>846,1165=>673,1168=>700,1169=>618,1170=>690,1171=>563,1172=>854,1173=>705,1174=>1312,1175=>1306,1176=>721,1177=>638,1178=>902,1179=>703,1182=>910,1183=>677,1184=>1041,1185=>760,1186=>952,1187=>805,1188=>1167,1189=>955,1190=>1324,1191=>1013,1194=>796,1195=>609,1196=>744,1197=>1142,1198=>714,1199=>572,1200=>713,1201=>572,1202=>789,1203=>596,1204=>1010,1205=>833,1206=>913,1207=>792,1210=>910,1211=>727,1216=>468,1217=>1312,1218=>1306,1219=>869,1220=>693,1223=>945,1224=>732,1227=>984,1228=>732,1231=>380,1232=>814,1233=>648,1234=>814,1235=>648,1236=>1034,1237=>975,1238=>762,1239=>636,1240=>871,1241=>636,1242=>871,1243=>636,1244=>1312,1245=>1306,1246=>721,1247=>638,1248=>657,1249=>568,1250=>945,1251=>727,1252=>945,1253=>727,1254=>871,1255=>667,1256=>871,1257=>667,1258=>871,1259=>667,1260=>795,1261=>645,1262=>812,1263=>598,1264=>812,1265=>598,1266=>812,1267=>598,1268=>913,1269=>715,1270=>690,1271=>563,1272=>1202,1273=>1018,1296=>721,1297=>638,1298=>884,1299=>732,1300=>1248,1301=>1005,1306=>820,1307=>640,1308=>1028,1309=>856,1329=>942,1330=>832,1331=>894,1332=>909,1333=>822,1334=>821,1335=>747,1336=>832,1337=>1125,1338=>894,1339=>803,1340=>722,1341=>1188,1342=>887,1343=>842,1344=>737,1345=>863,1346=>918,1347=>851,1348=>977,1349=>833,1350=>914,1351=>843,1352=>871,1353=>818,1354=>1034,1355=>846,1356=>964,1357=>871,1358=>914,1359=>808,1360=>808,1361=>836,1362=>710,1363=>955,1364=>891,1365=>871,1366=>963,1369=>307,1370=>264,1371=>293,1372=>391,1373=>323,1374=>439,1375=>500,1377=>1055,1378=>695,1379=>776,1380=>801,1381=>729,1382=>742,1383=>599,1384=>733,1385=>909,1386=>768,1387=>724,1388=>398,1389=>1087,1390=>695,1391=>719,1392=>737,1393=>684,1394=>738,1395=>703,1396=>724,1397=>359,1398=>719,1399=>496,1400=>738,1401=>428,1402=>1059,1403=>668,1404=>744,1405=>724,1406=>724,1407=>1040,1408=>724,1409=>713,1410=>493,1411=>1040,1412=>734,1413=>693,1414=>956,1415=>833,1417=>340,1418=>388,4256=>765,4257=>945,4258=>876,4259=>884,4260=>791,4261=>1087,4262=>1024,4263=>1223,4264=>653,4265=>828,4266=>1061,4267=>1061,4268=>806,4269=>1145,4270=>979,4271=>912,4272=>1119,4273=>802,4274=>766,4275=>1085,4276=>986,4277=>1076,4278=>820,4279=>843,4280=>831,4281=>843,4282=>918,4283=>1086,4284=>779,4285=>832,4286=>822,4287=>1121,4288=>1132,4289=>812,4290=>902,4291=>812,4292=>890,4293=>1073,4304=>594,4305=>625,4306=>643,4307=>887,4308=>615,4309=>611,4310=>666,4311=>915,4312=>613,4313=>600,4314=>1120,4315=>654,4316=>640,4317=>879,4318=>624,4319=>634,4320=>877,4321=>657,4322=>802,4323=>751,4324=>869,4325=>639,4326=>912,4327=>622,4328=>647,4329=>640,4330=>729,4331=>641,4332=>639,4333=>629,4334=>674,4335=>737,4336=>625,4337=>657,4338=>625,4339=>625,4340=>624,4341=>670,4342=>940,4343=>680,4344=>636,4345=>672,4346=>625,4347=>446,4348=>363,7424=>641,7425=>892,7426=>932,7427=>695,7428=>609,7429=>675,7430=>675,7431=>617,7432=>509,7433=>320,7434=>561,7435=>722,7436=>617,7437=>869,7438=>737,7439=>667,7440=>609,7441=>628,7442=>628,7443=>667,7444=>1028,7445=>598,7446=>667,7447=>667,7448=>586,7449=>801,7450=>801,7451=>620,7452=>647,7453=>664,7454=>923,7455=>655,7456=>581,7457=>861,7458=>568,7459=>568,7460=>588,7461=>802,7462=>586,7463=>641,7464=>732,7465=>586,7466=>854,7467=>705,7468=>489,7469=>651,7470=>532,7471=>532,7472=>546,7473=>480,7474=>480,7475=>538,7476=>595,7477=>294,7478=>298,7479=>547,7480=>443,7481=>697,7482=>576,7483=>606,7484=>548,7485=>442,7486=>474,7487=>523,7488=>469,7489=>549,7490=>708,7491=>408,7492=>408,7493=>484,7494=>587,7495=>499,7496=>498,7497=>444,7498=>444,7499=>412,7500=>412,7501=>498,7502=>300,7503=>523,7504=>729,7505=>473,7506=>467,7507=>427,7508=>467,7509=>467,7510=>499,7511=>371,7512=>520,7513=>418,7514=>729,7515=>491,7516=>505,7517=>418,7518=>416,7519=>420,7520=>570,7521=>414,7522=>239,7523=>414,7524=>520,7525=>491,7526=>418,7527=>416,7528=>419,7529=>570,7530=>414,7531=>1042,7543=>640,7544=>595,7547=>380,7548=>380,7549=>699,7550=>647,7551=>679,7557=>380,7579=>484,7580=>427,7581=>427,7582=>467,7583=>412,7584=>271,7585=>373,7586=>498,7587=>522,7588=>300,7589=>307,7590=>300,7591=>300,7592=>370,7593=>368,7594=>321,7595=>430,7596=>682,7597=>729,7598=>588,7599=>587,7600=>472,7601=>467,7602=>522,7603=>400,7604=>387,7605=>371,7606=>520,7607=>475,7608=>408,7609=>489,7610=>366,7611=>357,7612=>527,7613=>412,7614=>452,7615=>467,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>776,7681=>648,7682=>845,7683=>699,7684=>845,7685=>699,7686=>845,7687=>699,7688=>796,7689=>609,7690=>867,7691=>699,7692=>867,7693=>699,7694=>867,7695=>699,7696=>867,7697=>699,7698=>867,7699=>699,7700=>762,7701=>636,7702=>762,7703=>636,7704=>762,7705=>636,7706=>762,7707=>636,7708=>762,7709=>636,7710=>710,7711=>430,7712=>854,7713=>699,7714=>945,7715=>727,7716=>945,7717=>727,7718=>945,7719=>727,7720=>945,7721=>727,7722=>945,7723=>727,7724=>468,7725=>380,7726=>468,7727=>380,7728=>869,7729=>693,7730=>869,7731=>693,7732=>869,7733=>693,7734=>703,7735=>380,7736=>703,7737=>380,7738=>703,7739=>380,7740=>703,7741=>380,7742=>1107,7743=>1058,7744=>1107,7745=>1058,7746=>1107,7747=>1058,7748=>914,7749=>727,7750=>914,7751=>727,7752=>914,7753=>727,7754=>914,7755=>727,7756=>871,7757=>667,7758=>871,7759=>667,7760=>871,7761=>667,7762=>871,7763=>667,7764=>752,7765=>699,7766=>752,7767=>699,7768=>831,7769=>527,7770=>831,7771=>527,7772=>831,7773=>527,7774=>831,7775=>527,7776=>722,7777=>563,7778=>722,7779=>563,7780=>722,7781=>563,7782=>722,7783=>563,7784=>722,7785=>563,7786=>744,7787=>462,7788=>744,7789=>462,7790=>744,7791=>462,7792=>744,7793=>462,7794=>872,7795=>727,7796=>872,7797=>727,7798=>872,7799=>727,7800=>872,7801=>727,7802=>872,7803=>727,7804=>776,7805=>581,7806=>776,7807=>581,7808=>1123,7809=>861,7810=>1123,7811=>861,7812=>1123,7813=>861,7814=>1123,7815=>861,7816=>1123,7817=>861,7818=>776,7819=>596,7820=>776,7821=>596,7822=>714,7823=>581,7824=>730,7825=>568,7826=>730,7827=>568,7828=>730,7829=>568,7830=>727,7831=>462,7832=>861,7833=>581,7834=>1014,7835=>430,7836=>430,7837=>430,7838=>947,7839=>667,7840=>776,7841=>648,7842=>776,7843=>648,7844=>776,7845=>648,7846=>776,7847=>648,7848=>776,7849=>648,7850=>776,7851=>648,7852=>776,7853=>648,7854=>776,7855=>648,7856=>776,7857=>648,7858=>776,7859=>648,7860=>776,7861=>648,7862=>776,7863=>648,7864=>762,7865=>636,7866=>762,7867=>636,7868=>762,7869=>636,7870=>762,7871=>636,7872=>762,7873=>636,7874=>762,7875=>636,7876=>762,7877=>636,7878=>762,7879=>636,7880=>468,7881=>380,7882=>468,7883=>380,7884=>871,7885=>667,7886=>871,7887=>667,7888=>871,7889=>667,7890=>871,7891=>667,7892=>871,7893=>667,7894=>871,7895=>667,7896=>871,7897=>667,7898=>871,7899=>667,7900=>871,7901=>667,7902=>871,7903=>667,7904=>871,7905=>667,7906=>871,7907=>667,7908=>872,7909=>727,7910=>872,7911=>727,7912=>872,7913=>727,7914=>872,7915=>727,7916=>872,7917=>727,7918=>872,7919=>727,7920=>872,7921=>727,7922=>714,7923=>581,7924=>714,7925=>581,7926=>714,7927=>581,7928=>714,7929=>581,7930=>1078,7931=>701,7936=>770,7937=>770,7938=>770,7939=>770,7940=>770,7941=>770,7942=>770,7943=>770,7944=>776,7945=>776,7946=>978,7947=>978,7948=>832,7949=>849,7950=>776,7951=>776,7952=>608,7953=>608,7954=>608,7955=>608,7956=>608,7957=>608,7960=>917,7961=>909,7962=>1169,7963=>1169,7964=>1093,7965=>1120,7968=>727,7969=>727,7970=>727,7971=>727,7972=>727,7973=>727,7974=>727,7975=>727,7976=>1100,7977=>1094,7978=>1358,7979=>1361,7980=>1279,7981=>1308,7982=>1197,7983=>1194,7984=>484,7985=>484,7986=>484,7987=>484,7988=>484,7989=>484,7990=>484,7991=>484,7992=>629,7993=>617,7994=>878,7995=>881,7996=>799,7997=>831,7998=>723,7999=>714,8000=>667,8001=>667,8002=>667,8003=>667,8004=>667,8005=>667,8008=>900,8009=>935,8010=>1240,8011=>1237,8012=>1035,8013=>1066,8016=>694,8017=>694,8018=>694,8019=>694,8020=>694,8021=>694,8022=>694,8023=>694,8025=>922,8027=>1186,8029=>1133,8031=>1019,8032=>952,8033=>952,8034=>952,8035=>952,8036=>952,8037=>952,8038=>952,8039=>952,8040=>931,8041=>963,8042=>1268,8043=>1274,8044=>1054,8045=>1088,8046=>1023,8047=>1060,8048=>770,8049=>770,8050=>608,8051=>608,8052=>727,8053=>727,8054=>484,8055=>484,8056=>667,8057=>667,8058=>694,8059=>694,8060=>952,8061=>952,8064=>770,8065=>770,8066=>770,8067=>770,8068=>770,8069=>770,8070=>770,8071=>770,8072=>776,8073=>776,8074=>978,8075=>978,8076=>832,8077=>849,8078=>776,8079=>776,8080=>727,8081=>727,8082=>727,8083=>727,8084=>727,8085=>727,8086=>727,8087=>727,8088=>1100,8089=>1094,8090=>1358,8091=>1361,8092=>1279,8093=>1308,8094=>1197,8095=>1194,8096=>952,8097=>952,8098=>952,8099=>952,8100=>952,8101=>952,8102=>952,8103=>952,8104=>931,8105=>963,8106=>1268,8107=>1274,8108=>1054,8109=>1088,8110=>1023,8111=>1060,8112=>770,8113=>770,8114=>770,8115=>770,8116=>770,8118=>770,8119=>770,8120=>776,8121=>776,8122=>811,8123=>776,8124=>776,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>727,8131=>727,8132=>727,8134=>727,8135=>727,8136=>1000,8137=>947,8138=>1191,8139=>1118,8140=>945,8141=>500,8142=>500,8143=>500,8144=>484,8145=>484,8146=>484,8147=>484,8150=>484,8151=>484,8152=>468,8153=>468,8154=>714,8155=>662,8157=>500,8158=>500,8159=>500,8160=>694,8161=>694,8162=>694,8163=>694,8164=>665,8165=>665,8166=>694,8167=>694,8168=>714,8169=>714,8170=>1019,8171=>953,8172=>910,8173=>500,8174=>500,8175=>500,8178=>952,8179=>952,8180=>952,8182=>952,8183=>952,8184=>1069,8185=>887,8186=>1101,8187=>911,8188=>890,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>696,8200=>348,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>415,8209=>415,8210=>696,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>348,8217=>348,8218=>348,8219=>348,8220=>575,8221=>575,8222=>575,8223=>575,8224=>523,8225=>523,8226=>639,8227=>639,8228=>348,8229=>674,8230=>1000,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1385,8241=>1813,8242=>264,8243=>447,8244=>630,8245=>264,8246=>447,8247=>630,8248=>733,8249=>400,8250=>400,8252=>629,8253=>586,8254=>500,8258=>1023,8260=>167,8261=>473,8262=>473,8263=>1082,8264=>856,8265=>856,8267=>636,8268=>500,8269=>500,8270=>523,8271=>369,8273=>523,8274=>556,8275=>1000,8279=>813,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>438,8305=>239,8308=>438,8309=>438,8310=>438,8311=>438,8312=>438,8313=>438,8314=>528,8315=>528,8316=>528,8317=>298,8318=>298,8319=>458,8320=>438,8321=>438,8322=>438,8323=>438,8324=>438,8325=>438,8326=>438,8327=>438,8328=>438,8329=>438,8330=>528,8331=>528,8332=>528,8333=>298,8334=>298,8336=>408,8337=>444,8338=>467,8339=>375,8340=>444,8341=>521,8342=>523,8343=>292,8344=>729,8345=>458,8346=>499,8347=>395,8348=>371,8358=>696,8364=>696,8367=>1155,8369=>790,8372=>876,8373=>696,8376=>744,8377=>696,8451=>1198,8457=>1112,8462=>727,8463=>727,8470=>1087,8482=>1000,8486=>890,8487=>890,8490=>869,8491=>776,8498=>710,8513=>786,8514=>576,8515=>637,8516=>760,8523=>903,8526=>592,8528=>1035,8529=>1035,8530=>1473,8531=>1035,8532=>1035,8533=>1035,8534=>1035,8535=>1035,8536=>1035,8537=>1035,8538=>1035,8539=>1035,8540=>1035,8541=>1035,8542=>1035,8543=>615,8544=>468,8545=>736,8546=>1005,8547=>1093,8548=>776,8549=>1127,8550=>1396,8551=>1664,8552=>1069,8553=>776,8554=>1078,8555=>1347,8556=>703,8557=>796,8558=>867,8559=>1107,8560=>380,8561=>760,8562=>1140,8563=>961,8564=>581,8565=>961,8566=>1341,8567=>1721,8568=>976,8569=>596,8570=>976,8571=>1356,8572=>380,8573=>609,8574=>699,8575=>1058,8576=>1255,8577=>867,8578=>1268,8579=>796,8580=>609,8581=>796,8585=>1035,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>850,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>641,8706=>534,8707=>620,8708=>620,8710=>753,8711=>753,8712=>740,8713=>740,8715=>740,8716=>740,8719=>842,8720=>842,8721=>753,8722=>838,8723=>838,8724=>838,8725=>365,8727=>691,8728=>519,8729=>519,8730=>657,8731=>657,8732=>657,8733=>672,8734=>833,8735=>838,8736=>838,8739=>324,8740=>607,8741=>529,8742=>773,8743=>812,8744=>812,8745=>838,8746=>838,8747=>579,8748=>1000,8749=>1391,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1082,8789=>1082,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>838,8848=>838,8849=>838,8850=>838,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>884,8867=>884,8868=>960,8869=>960,8870=>616,8871=>616,8872=>884,8873=>884,8874=>884,8875=>1080,8876=>884,8877=>884,8878=>884,8879=>1080,8901=>398,8962=>834,8968=>473,8969=>473,8970=>473,8971=>473,8976=>838,8977=>539,8984=>928,8985=>838,8992=>579,8993=>579,8997=>1000,9000=>1443,9085=>1008,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>579,9167=>945,9251=>834,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838,10181=>457,10182=>457,10208=>494,10216=>457,10217=>457,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>781,10241=>781,10242=>781,10243=>781,10244=>781,10245=>781,10246=>781,10247=>781,10248=>781,10249=>781,10250=>781,10251=>781,10252=>781,10253=>781,10254=>781,10255=>781,10256=>781,10257=>781,10258=>781,10259=>781,10260=>781,10261=>781,10262=>781,10263=>781,10264=>781,10265=>781,10266=>781,10267=>781,10268=>781,10269=>781,10270=>781,10271=>781,10272=>781,10273=>781,10274=>781,10275=>781,10276=>781,10277=>781,10278=>781,10279=>781,10280=>781,10281=>781,10282=>781,10283=>781,10284=>781,10285=>781,10286=>781,10287=>781,10288=>781,10289=>781,10290=>781,10291=>781,10292=>781,10293=>781,10294=>781,10295=>781,10296=>781,10297=>781,10298=>781,10299=>781,10300=>781,10301=>781,10302=>781,10303=>781,10304=>781,10305=>781,10306=>781,10307=>781,10308=>781,10309=>781,10310=>781,10311=>781,10312=>781,10313=>781,10314=>781,10315=>781,10316=>781,10317=>781,10318=>781,10319=>781,10320=>781,10321=>781,10322=>781,10323=>781,10324=>781,10325=>781,10326=>781,10327=>781,10328=>781,10329=>781,10330=>781,10331=>781,10332=>781,10333=>781,10334=>781,10335=>781,10336=>781,10337=>781,10338=>781,10339=>781,10340=>781,10341=>781,10342=>781,10343=>781,10344=>781,10345=>781,10346=>781,10347=>781,10348=>781,10349=>781,10350=>781,10351=>781,10352=>781,10353=>781,10354=>781,10355=>781,10356=>781,10357=>781,10358=>781,10359=>781,10360=>781,10361=>781,10362=>781,10363=>781,10364=>781,10365=>781,10366=>781,10367=>781,10368=>781,10369=>781,10370=>781,10371=>781,10372=>781,10373=>781,10374=>781,10375=>781,10376=>781,10377=>781,10378=>781,10379=>781,10380=>781,10381=>781,10382=>781,10383=>781,10384=>781,10385=>781,10386=>781,10387=>781,10388=>781,10389=>781,10390=>781,10391=>781,10392=>781,10393=>781,10394=>781,10395=>781,10396=>781,10397=>781,10398=>781,10399=>781,10400=>781,10401=>781,10402=>781,10403=>781,10404=>781,10405=>781,10406=>781,10407=>781,10408=>781,10409=>781,10410=>781,10411=>781,10412=>781,10413=>781,10414=>781,10415=>781,10416=>781,10417=>781,10418=>781,10419=>781,10420=>781,10421=>781,10422=>781,10423=>781,10424=>781,10425=>781,10426=>781,10427=>781,10428=>781,10429=>781,10430=>781,10431=>781,10432=>781,10433=>781,10434=>781,10435=>781,10436=>781,10437=>781,10438=>781,10439=>781,10440=>781,10441=>781,10442=>781,10443=>781,10444=>781,10445=>781,10446=>781,10447=>781,10448=>781,10449=>781,10450=>781,10451=>781,10452=>781,10453=>781,10454=>781,10455=>781,10456=>781,10457=>781,10458=>781,10459=>781,10460=>781,10461=>781,10462=>781,10463=>781,10464=>781,10465=>781,10466=>781,10467=>781,10468=>781,10469=>781,10470=>781,10471=>781,10472=>781,10473=>781,10474=>781,10475=>781,10476=>781,10477=>781,10478=>781,10479=>781,10480=>781,10481=>781,10482=>781,10483=>781,10484=>781,10485=>781,10486=>781,10487=>781,10488=>781,10489=>781,10490=>781,10491=>781,10492=>781,10493=>781,10494=>781,10495=>781,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>1032,10616=>838,10617=>838,10618=>960,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1782,10765=>610,10766=>610,10799=>838,10858=>838,10859=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11360=>703,11361=>380,11363=>752,11364=>831,11367=>945,11368=>727,11369=>869,11370=>693,11371=>730,11372=>568,11373=>848,11374=>1107,11375=>776,11376=>848,11377=>709,11378=>1221,11379=>984,11381=>779,11382=>576,11383=>905,11385=>571,11386=>667,11387=>617,11388=>313,11389=>489,11390=>722,11391=>730,11520=>773,11521=>635,11522=>804,11523=>658,11524=>788,11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>631,11532=>646,11533=>962,11534=>846,11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649,11546=>688,11547=>936,11548=>982,11549=>681,11550=>676,11551=>852,11552=>1113,11553=>632,11554=>645,11555=>646,11556=>749,11557=>914,11800=>586,11807=>838,11810=>473,11811=>473,11812=>473,11813=>473,11822=>586,42564=>722,42565=>563,42566=>468,42567=>380,42576=>1333,42577=>1085,42580=>1287,42581=>1025,42582=>1287,42583=>1029,42760=>500,42761=>500,42762=>500,42763=>500,42764=>500,42765=>500,42766=>500,42767=>500,42768=>500,42769=>500,42770=>500,42771=>500,42772=>500,42773=>500,42774=>500,42779=>384,42780=>384,42781=>276,42782=>276,42783=>276,42790=>945,42791=>712,42792=>1003,42793=>909,42794=>696,42795=>609,42796=>634,42797=>598,42798=>741,42799=>706,42800=>592,42801=>563,42802=>1301,42803=>983,42804=>1261,42805=>985,42806=>1168,42807=>1007,42808=>1016,42809=>832,42810=>1016,42811=>832,42812=>994,42813=>746,42814=>796,42815=>609,42816=>869,42817=>693,42822=>916,42823=>581,42826=>1010,42827=>770,42830=>1448,42831=>1060,42856=>787,42857=>716,42875=>694,42876=>527,42880=>703,42881=>380,42882=>872,42883=>727,42884=>694,42885=>527,42886=>796,42887=>609,42891=>439,42892=>306,42893=>913,42896=>914,42897=>812,42922=>945,43002=>1068,43003=>710,43004=>752,43005=>1107,43006=>468,43007=>1286,62464=>726,62465=>737,62466=>786,62467=>1019,62468=>737,62469=>731,62470=>796,62471=>1058,62472=>737,62473=>737,62474=>1329,62475=>754,62476=>753,62477=>1024,62478=>737,62479=>753,62480=>1070,62481=>818,62482=>870,62483=>819,62484=>1016,62485=>753,62486=>1008,62487=>752,62488=>760,62489=>753,62490=>800,62491=>753,62492=>760,62493=>738,62494=>801,62495=>956,62496=>736,62497=>847,62498=>737,62499=>737,62500=>737,62501=>793,62502=>1033,62504=>904,63172=>380,63173=>667,63174=>699,63175=>727,63176=>1058,63185=>500,63188=>500,64256=>827,64257=>727,64258=>727,64259=>1108,64260=>1146,64261=>879,64262=>971,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1113,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserifbi.z b/tcpdf/fonts/dejavuserifbi.z new file mode 100644 index 0000000..c27ff39 Binary files /dev/null and b/tcpdf/fonts/dejavuserifbi.z differ diff --git a/tcpdf/fonts/dejavuserifcondensed.ctg.z b/tcpdf/fonts/dejavuserifcondensed.ctg.z new file mode 100644 index 0000000..c502e3b Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensed.ctg.z differ diff --git a/tcpdf/fonts/dejavuserifcondensed.php b/tcpdf/fonts/dejavuserifcondensed.php new file mode 100644 index 0000000..fdbfb35 --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensed.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerifCondensed'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=334040; +$enc=''; +$file='dejavuserifcondensed.z'; +$ctg='dejavuserifcondensed.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-693 -347 1512 1109]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>34,'StemH'=>15,'AvgWidth'=>461,'MaxWidth'=>1560,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(123,-14,240,729),34=>array(88,458,326,729),35=>array(69,0,686,718),36=>array(76,-147,498,760),37=>array(49,-14,806,742),38=>array(64,-14,759,742),39=>array(88,458,158,729),40=>array(71,-156,287,760),41=>array(63,-156,280,760),42=>array(14,287,436,742),43=>array(95,0,659,627),44=>array(32,-136,199,111),45=>array(40,230,265,306),46=>array(84,-14,202,116),47=>array(0,-93,303,729),48=>array(59,-14,513,742),49=>array(110,0,445,742),50=>array(61,0,484,742),51=>array(68,-14,506,742),52=>array(27,0,527,742),53=>array(76,-14,503,729),54=>array(60,-14,516,742),55=>array(75,0,508,729),56=>array(60,-14,512,742),57=>array(57,-14,512,742),58=>array(93,-14,211,434),59=>array(32,-136,212,434),60=>array(95,46,659,581),61=>array(95,175,659,452),62=>array(95,46,659,581),63=>array(61,-14,439,742),64=>array(59,-174,836,704),65=>array(-5,0,659,729),66=>array(49,0,606,729),67=>array(50,-14,635,742),68=>array(49,0,670,729),69=>array(49,0,585,729),70=>array(49,0,587,729),71=>array(50,-14,648,742),72=>array(49,0,735,729),73=>array(49,0,306,729),74=>array(-76,-208,320,729),75=>array(49,0,686,729),76=>array(49,0,576,729),77=>array(44,0,876,729),78=>array(44,-14,748,729),79=>array(50,-14,688,742),80=>array(49,0,574,729),81=>array(50,-160,688,742),82=>array(49,0,699,729),83=>array(75,-14,551,742),84=>array(9,0,592,729),85=>array(42,-14,718,729),86=>array(-9,0,664,729),87=>array(4,0,923,729),88=>array(5,0,637,729),89=>array(-10,0,602,729),90=>array(40,0,590,729),91=>array(77,-132,282,760),92=>array(0,-93,303,729),93=>array(69,-132,274,760),94=>array(95,457,659,729),95=>array(0,-236,450,-197),96=>array(75,615,276,799),97=>array(44,-14,511,533),98=>array(26,-14,531,760),99=>array(44,-14,463,533),100=>array(44,-14,550,760),101=>array(44,-14,488,533),102=>array(32,0,387,760),103=>array(44,-222,550,533),104=>array(32,0,555,760),105=>array(32,0,268,736),106=>array(-87,-222,191,736),107=>array(26,0,552,760),108=>array(26,0,261,760),109=>array(32,0,829,533),110=>array(32,0,555,533),111=>array(44,-14,497,533),112=>array(26,-208,531,533),113=>array(44,-208,550,533),114=>array(32,0,431,533),115=>array(50,-14,416,533),116=>array(26,-14,355,680),117=>array(24,-14,546,519),118=>array(-3,0,506,519),119=>array(14,0,759,519),120=>array(11,0,497,519),121=>array(-3,-222,506,519),122=>array(36,0,441,519),123=>array(112,-163,460,760),124=>array(116,-236,188,764),125=>array(112,-163,460,760),126=>array(95,233,659,394),161=>array(123,0,240,743),162=>array(67,-145,485,662),163=>array(60,0,494,742),164=>array(45,45,529,582),165=>array(-7,0,576,729),166=>array(116,-171,188,699),167=>array(40,-95,410,742),168=>array(88,652,362,766),169=>array(124,0,776,725),170=>array(55,261,404,742),171=>array(69,69,466,517),172=>array(95,140,659,421),173=>array(40,230,265,306),174=>array(124,0,776,725),175=>array(93,673,356,745),176=>array(85,432,365,742),177=>array(95,0,659,627),178=>array(40,326,304,742),179=>array(44,319,315,742),180=>array(172,616,374,800),181=>array(26,-208,553,519),182=>array(69,-96,515,729),183=>array(83,282,201,412),184=>array(127,-193,310,0),185=>array(64,326,291,734),186=>array(41,261,382,742),187=>array(84,69,482,517),188=>array(64,-14,844,742),189=>array(64,-14,815,742),190=>array(44,-14,844,742),191=>array(61,-13,439,743),192=>array(-5,0,659,927),193=>array(-5,0,659,927),194=>array(-5,0,659,927),195=>array(-5,0,659,921),196=>array(-5,0,659,920),197=>array(-5,0,659,928),198=>array(-16,0,854,729),199=>array(50,-193,635,742),200=>array(49,0,585,927),201=>array(49,0,585,927),202=>array(49,0,585,927),203=>array(49,0,585,920),204=>array(49,0,306,927),205=>array(49,0,306,927),206=>array(38,0,319,927),207=>array(42,0,315,920),208=>array(49,0,674,729),209=>array(44,-14,748,921),210=>array(50,-14,688,927),211=>array(50,-14,688,927),212=>array(50,-14,688,927),213=>array(50,-14,688,921),214=>array(50,-14,688,920),215=>array(124,33,630,594),216=>array(44,-28,692,757),217=>array(42,-14,718,927),218=>array(42,-14,718,927),219=>array(42,-14,718,927),220=>array(42,-14,718,920),221=>array(-10,0,602,927),222=>array(49,0,574,729),223=>array(26,-14,562,760),224=>array(44,-14,511,799),225=>array(44,-14,511,800),226=>array(44,-14,511,800),227=>array(44,-14,511,777),228=>array(44,-14,511,766),229=>array(44,-14,511,878),230=>array(44,-14,801,533),231=>array(44,-193,463,533),232=>array(44,-14,488,799),233=>array(44,-14,488,800),234=>array(44,-14,488,800),235=>array(44,-14,488,766),236=>array(-6,0,268,799),237=>array(32,0,293,800),238=>array(4,0,285,800),239=>array(7,0,281,766),240=>array(44,-14,497,760),241=>array(32,0,555,777),242=>array(44,-14,497,799),243=>array(44,-14,497,800),244=>array(44,-14,497,800),245=>array(44,-14,497,777),246=>array(44,-14,497,766),247=>array(95,68,659,559),248=>array(33,-46,505,565),249=>array(24,-14,546,799),250=>array(24,-14,546,800),251=>array(24,-14,546,800),252=>array(24,-14,546,766),253=>array(-3,-222,506,800),254=>array(26,-208,531,760),255=>array(-3,-222,506,766),256=>array(-5,0,659,899),257=>array(44,-14,511,745),258=>array(-5,0,659,926),259=>array(44,-14,511,772),260=>array(-5,-192,659,729),261=>array(44,-192,511,533),262=>array(50,-14,635,927),263=>array(44,-14,463,800),264=>array(50,-14,635,927),265=>array(44,-14,463,800),266=>array(50,-14,635,921),267=>array(44,-14,463,766),268=>array(50,-14,635,927),269=>array(44,-14,463,800),270=>array(49,0,670,927),271=>array(44,-14,665,760),272=>array(49,0,674,729),273=>array(44,-14,550,760),274=>array(49,0,585,899),275=>array(44,-14,488,746),276=>array(49,0,585,928),277=>array(44,-14,488,785),278=>array(49,0,585,921),279=>array(44,-14,488,766),280=>array(49,-192,585,729),281=>array(44,-192,488,533),282=>array(49,0,585,927),283=>array(44,-14,488,800),284=>array(50,-14,648,927),285=>array(44,-222,550,800),286=>array(50,-14,648,928),287=>array(44,-222,550,785),288=>array(50,-14,648,921),289=>array(44,-222,550,766),290=>array(50,-224,648,742),291=>array(44,-222,550,741),292=>array(49,0,735,927),293=>array(-27,0,555,927),294=>array(49,0,735,729),295=>array(32,0,555,760),296=>array(32,0,323,921),297=>array(-1,0,289,777),298=>array(46,0,310,899),299=>array(-20,0,268,745),300=>array(41,0,314,928),301=>array(6,0,281,785),302=>array(49,-192,306,729),303=>array(32,-192,268,736),304=>array(49,0,306,921),305=>array(32,0,268,519),306=>array(49,-208,680,729),307=>array(32,-222,448,736),308=>array(-76,-208,322,927),309=>array(-87,-222,255,800),310=>array(49,-209,686,729),311=>array(26,-209,552,760),312=>array(26,0,552,518),313=>array(49,0,576,928),314=>array(26,0,261,928),315=>array(49,-209,576,729),316=>array(26,-207,261,760),317=>array(49,0,576,729),318=>array(26,0,376,760),319=>array(49,0,576,729),320=>array(26,0,368,760),321=>array(38,0,581,729),322=>array(20,0,279,760),323=>array(44,-14,748,928),324=>array(32,0,555,776),325=>array(44,-216,748,729),326=>array(32,-209,555,533),327=>array(44,-14,748,932),328=>array(32,0,555,800),329=>array(49,0,730,742),330=>array(42,-208,635,743),331=>array(32,-222,483,533),332=>array(50,-14,688,899),333=>array(44,-14,497,745),334=>array(50,-14,688,928),335=>array(44,-14,497,785),336=>array(50,-14,688,927),337=>array(44,-14,497,800),338=>array(52,0,952,729),339=>array(44,-14,845,533),340=>array(49,0,699,928),341=>array(32,0,431,776),342=>array(49,-209,699,729),343=>array(32,-209,431,533),344=>array(49,0,699,927),345=>array(32,0,431,800),346=>array(75,-14,551,928),347=>array(50,-14,416,776),348=>array(75,-14,551,927),349=>array(50,-14,416,800),350=>array(75,-193,551,742),351=>array(50,-193,416,533),352=>array(75,-14,551,927),353=>array(50,-14,416,800),354=>array(9,-193,592,729),355=>array(26,-193,355,680),356=>array(9,0,592,927),357=>array(26,-14,355,788),358=>array(9,0,592,729),359=>array(26,-14,355,680),360=>array(42,-14,718,921),361=>array(24,-14,546,777),362=>array(42,-14,718,899),363=>array(24,-14,546,745),364=>array(42,-14,718,928),365=>array(24,-14,546,785),366=>array(42,-14,718,1051),367=>array(24,-14,546,868),368=>array(42,-14,718,927),369=>array(24,-14,546,800),370=>array(42,-200,718,729),371=>array(24,-192,581,519),372=>array(4,0,923,931),373=>array(14,0,759,800),374=>array(-10,0,602,931),375=>array(-3,-222,506,800),376=>array(-10,0,602,920),377=>array(40,0,590,928),378=>array(36,0,441,776),379=>array(40,0,590,930),380=>array(36,0,441,734),381=>array(40,0,590,927),382=>array(36,0,441,800),383=>array(32,0,387,760),384=>array(26,-14,531,760),385=>array(-84,0,606,729),386=>array(49,0,606,729),387=>array(26,-14,531,760),388=>array(49,0,606,729),389=>array(26,-14,531,760),390=>array(50,-14,635,742),391=>array(50,-14,813,796),392=>array(44,-14,644,639),393=>array(49,0,674,729),394=>array(-84,0,670,729),395=>array(49,0,606,729),396=>array(26,-14,531,760),397=>array(44,-246,497,533),398=>array(49,0,585,729),399=>array(50,-14,688,742),400=>array(55,-14,512,742),401=>array(-89,-208,587,729),402=>array(-87,-185,387,760),403=>array(50,-14,822,796),404=>array(8,-92,606,729),405=>array(32,-3,795,760),406=>array(49,0,306,729),407=>array(45,0,310,729),408=>array(49,0,739,741),409=>array(31,0,552,760),410=>array(26,0,261,760),411=>array(37,0,545,765),412=>array(32,-14,829,730),413=>array(-90,-208,748,729),414=>array(32,-208,555,533),415=>array(50,-14,688,742),416=>array(48,-14,710,760),417=>array(43,-14,582,533),418=>array(50,-157,911,742),419=>array(44,-208,700,533),420=>array(-84,0,574,729),421=>array(26,-208,531,716),422=>array(49,-159,699,729),423=>array(75,-14,551,742),424=>array(50,-14,416,533),425=>array(36,0,576,729),426=>array(-87,-222,346,761),427=>array(26,-222,355,680),428=>array(38,0,592,729),429=>array(26,-14,375,760),430=>array(9,-208,592,729),431=>array(40,-14,889,802),432=>array(19,-14,620,532),433=>array(55,-14,692,729),434=>array(49,0,630,729),435=>array(-10,0,719,729),436=>array(-3,-222,597,530),437=>array(40,0,590,729),438=>array(36,0,441,519),439=>array(44,-14,482,729),440=>array(44,-14,482,729),441=>array(44,-224,482,519),442=>array(57,-224,470,519),443=>array(61,0,493,742),444=>array(49,-14,551,729),445=>array(17,-224,482,519),446=>array(97,-15,385,680),447=>array(26,-208,522,560),448=>array(97,0,168,729),449=>array(97,0,346,729),450=>array(8,0,405,729),451=>array(97,0,168,729),452=>array(49,0,1312,927),453=>array(49,0,1163,800),454=>array(44,-14,1018,800),455=>array(49,-208,917,729),456=>array(49,-222,789,736),457=>array(26,-222,479,760),458=>array(44,-208,1107,729),459=>array(44,-222,979,736),460=>array(32,-222,771,736),461=>array(-5,0,659,927),462=>array(44,-14,511,800),463=>array(38,0,318,927),464=>array(3,0,284,800),465=>array(50,-14,688,927),466=>array(44,-14,497,800),467=>array(42,-14,718,927),468=>array(24,-14,546,800),469=>array(42,-14,718,1025),470=>array(24,-14,546,886),471=>array(42,-14,718,1044),472=>array(24,-14,546,905),473=>array(42,-14,718,1043),474=>array(24,-14,546,904),475=>array(42,-14,718,1044),476=>array(24,-14,546,905),477=>array(44,-14,488,533),478=>array(-5,0,659,1025),479=>array(44,-14,511,886),480=>array(-5,0,659,1025),481=>array(44,-14,511,888),482=>array(-16,0,854,899),483=>array(44,-14,801,745),484=>array(50,-14,737,742),485=>array(44,-222,550,533),486=>array(50,-14,648,927),487=>array(44,-222,550,800),488=>array(49,0,686,927),489=>array(5,0,552,961),490=>array(50,-200,688,742),491=>array(44,-200,497,533),492=>array(50,-200,688,899),493=>array(44,-200,497,745),494=>array(44,-14,482,927),495=>array(44,-224,482,800),496=>array(-87,-222,284,800),497=>array(49,0,1312,729),498=>array(49,0,1163,729),499=>array(44,-14,1018,760),500=>array(50,-14,648,927),501=>array(44,-222,550,800),502=>array(49,-14,999,729),503=>array(49,-208,587,742),504=>array(44,-14,748,927),505=>array(32,0,555,799),506=>array(-5,0,659,927),507=>array(44,-14,511,927),508=>array(-16,0,854,927),509=>array(44,-14,801,802),510=>array(44,-28,692,927),511=>array(33,-46,505,800),512=>array(-5,0,659,927),513=>array(44,-14,511,800),514=>array(-5,0,659,967),515=>array(44,-14,511,785),516=>array(49,0,585,927),517=>array(44,-14,488,800),518=>array(49,0,585,967),519=>array(44,-14,488,785),520=>array(-17,0,306,927),521=>array(-54,0,268,800),522=>array(41,0,316,967),523=>array(6,0,282,785),524=>array(50,-14,688,927),525=>array(44,-14,497,800),526=>array(50,-14,688,967),527=>array(44,-14,497,785),528=>array(49,0,699,927),529=>array(32,0,431,800),530=>array(49,0,699,967),531=>array(32,0,431,785),532=>array(42,-14,718,927),533=>array(24,-14,546,800),534=>array(42,-14,718,967),535=>array(24,-14,546,785),536=>array(75,-225,551,742),537=>array(50,-225,416,533),538=>array(9,-225,592,729),539=>array(26,-225,355,680),540=>array(68,-210,501,742),541=>array(31,-211,420,530),542=>array(49,0,735,927),543=>array(5,0,555,961),544=>array(42,-208,718,744),545=>array(44,-73,717,760),546=>array(36,-14,490,742),547=>array(44,-14,452,760),548=>array(40,-187,590,729),549=>array(36,-195,441,519),550=>array(-5,0,659,921),551=>array(44,-14,511,766),552=>array(49,-193,585,729),553=>array(44,-193,488,533),554=>array(50,-14,688,1025),555=>array(44,-14,497,886),556=>array(50,-14,688,1025),557=>array(44,-14,497,862),558=>array(50,-14,688,920),559=>array(44,-14,497,766),560=>array(50,-14,688,1025),561=>array(44,-14,497,887),562=>array(-10,0,602,899),563=>array(-3,-222,506,745),564=>array(26,-107,435,760),565=>array(32,-107,733,533),566=>array(26,-107,429,680),567=>array(-87,-222,191,519),568=>array(44,-14,819,760),569=>array(44,-208,819,533),570=>array(-5,-28,659,757),571=>array(20,-28,668,757),572=>array(16,-46,488,565),573=>array(45,0,576,729),574=>array(-24,-28,625,757),575=>array(50,-222,416,533),576=>array(36,-222,475,519),577=>array(33,0,493,729),578=>array(33,0,386,533),579=>array(45,0,606,729),580=>array(38,-14,723,729),581=>array(-5,0,659,729),582=>array(49,-54,585,783),583=>array(44,-54,488,579),584=>array(-76,-208,324,729),585=>array(-87,-222,268,736),586=>array(50,-208,803,742),587=>array(44,-222,669,533),588=>array(45,0,699,729),589=>array(32,0,431,533),590=>array(-10,0,602,729),591=>array(-3,-222,506,519),592=>array(44,-14,511,533),593=>array(44,-14,550,533),594=>array(44,-14,550,533),595=>array(26,-14,531,760),596=>array(44,-14,463,533),597=>array(44,-107,448,533),598=>array(44,-222,669,760),599=>array(44,-14,668,760),600=>array(44,-14,488,533),601=>array(44,-14,488,533),602=>array(53,-14,813,533),603=>array(44,-19,425,524),604=>array(45,-19,425,524),605=>array(44,-19,750,524),606=>array(44,-18,511,533),607=>array(-87,-222,268,519),608=>array(44,-222,669,760),609=>array(44,-222,550,519),610=>array(44,-18,463,529),611=>array(11,-223,528,519),612=>array(63,-17,454,532),613=>array(24,-208,546,519),614=>array(37,0,555,760),615=>array(37,-222,483,760),616=>array(32,0,268,736),617=>array(32,0,269,519),618=>array(32,0,268,519),619=>array(32,0,322,760),620=>array(32,0,388,760),621=>array(26,-222,381,760),622=>array(26,-224,608,760),623=>array(32,0,829,533),624=>array(32,-208,829,533),625=>array(32,-222,756,533),626=>array(-87,-222,554,533),627=>array(32,-222,679,533),628=>array(30,-14,562,519),629=>array(44,-14,497,533),630=>array(44,0,686,519),631=>array(44,-14,542,530),632=>array(44,-208,497,760),633=>array(32,-14,431,519),634=>array(32,-14,431,759),635=>array(32,-222,550,519),636=>array(32,-207,431,533),637=>array(32,-222,431,533),638=>array(37,0,387,530),639=>array(37,0,387,530),640=>array(31,0,524,519),641=>array(31,0,524,519),642=>array(50,-222,416,533),643=>array(-87,-222,299,761),644=>array(-87,-222,387,760),645=>array(32,-222,417,530),646=>array(-87,-222,346,761),647=>array(26,-161,355,533),648=>array(26,-208,355,680),649=>array(24,-14,546,519),650=>array(44,-14,514,519),651=>array(32,-3,503,519),652=>array(-3,0,506,519),653=>array(14,0,759,519),654=>array(-3,0,506,741),655=>array(37,0,558,519),656=>array(36,-222,637,519),657=>array(36,-93,444,519),658=>array(44,-224,482,519),659=>array(57,-224,482,519),660=>array(103,0,391,761),661=>array(103,0,391,761),662=>array(103,0,391,761),663=>array(50,-222,328,759),664=>array(50,-14,688,742),665=>array(32,0,469,519),666=>array(44,-18,511,533),667=>array(44,-18,643,760),668=>array(31,0,553,519),669=>array(-87,-222,248,736),670=>array(26,-209,553,519),671=>array(37,0,466,519),672=>array(44,-208,669,760),673=>array(103,0,391,761),674=>array(103,0,391,761),675=>array(44,-14,863,760),676=>array(44,-224,897,760),677=>array(44,-93,865,760),678=>array(26,0,695,680),679=>array(26,-222,592,761),680=>array(26,-14,705,680),681=>array(32,-222,771,760),682=>array(26,0,602,760),683=>array(26,0,576,760),684=>array(31,-15,492,625),685=>array(31,105,353,625),686=>array(26,-207,670,760),687=>array(26,-222,790,760),688=>array(20,326,344,751),689=>array(20,326,341,751),690=>array(20,202,192,739),691=>array(20,327,267,625),692=>array(20,318,267,617),693=>array(20,202,342,617),694=>array(20,327,307,617),695=>array(20,327,481,617),696=>array(20,202,335,617),697=>array(70,557,183,800),698=>array(70,557,346,800),699=>array(92,495,242,742),700=>array(92,495,242,742),701=>array(92,495,242,742),702=>array(51,492,172,760),703=>array(51,492,172,760),704=>array(20,347,207,772),705=>array(20,347,207,772),706=>array(117,524,333,836),707=>array(117,524,333,836),708=>array(84,561,365,800),709=>array(84,561,365,800),710=>array(84,616,365,800),711=>array(84,616,365,800),712=>array(93,526,158,759),713=>array(93,673,356,745),714=>array(172,616,374,800),715=>array(75,615,276,799),716=>array(93,-124,158,110),717=>array(93,-156,356,-84),720=>array(95,0,208,434),721=>array(95,303,208,434),722=>array(51,249,172,517),723=>array(51,249,172,517),726=>array(40,153,250,387),727=>array(40,234,250,306),728=>array(87,645,363,785),729=>array(173,652,277,766),730=>array(104,610,346,878),731=>array(146,-192,310,0),732=>array(80,639,370,777),733=>array(107,616,413,800),734=>array(0,307,377,508),736=>array(7,201,333,617),737=>array(20,326,173,751),738=>array(24,318,262,625),739=>array(20,326,336,617),740=>array(20,347,207,772),741=>array(94,0,351,668),742=>array(94,0,351,668),743=>array(94,0,351,668),744=>array(94,0,351,668),745=>array(94,0,351,668),748=>array(84,-281,365,-42),750=>array(92,495,391,742),751=>array(84,-241,365,-58),752=>array(84,-281,365,-42),755=>array(104,-240,346,28),759=>array(80,-192,370,-55),768=>array(-373,615,-171,799),769=>array(-277,616,-76,800),770=>array(-365,616,-84,800),771=>array(-373,639,-83,777),772=>array(-356,673,-93,745),773=>array(-450,716,0,755),774=>array(-363,645,-87,785),775=>array(-277,652,-173,766),776=>array(-365,652,-91,766),777=>array(-309,616,-126,852),778=>array(-351,610,-110,878),779=>array(-343,616,-37,800),780=>array(-365,616,-84,800),781=>array(-257,616,-191,803),782=>array(-354,616,-94,803),783=>array(-422,616,-115,800),784=>array(-363,645,-87,874),785=>array(-363,645,-87,785),786=>array(-255,495,-121,644),787=>array(-278,606,-161,829),788=>array(-291,606,-173,829),789=>array(-58,616,58,800),790=>array(-371,-260,-170,-76),791=>array(-277,-259,-76,-76),792=>array(-298,-340,-160,-107),793=>array(-290,-340,-152,-107),794=>array(-176,698,35,932),795=>array(-134,350,40,532),796=>array(-280,-347,-159,-79),797=>array(-330,-251,-119,-99),798=>array(-330,-260,-119,-107),799=>array(-329,-340,-118,-107),800=>array(-330,-179,-119,-107),801=>array(-377,-222,-99,63),802=>array(-353,-222,-75,63),803=>array(-277,-191,-173,-77),804=>array(-363,-191,-89,-77),805=>array(-320,-241,-132,-32),806=>array(-313,-225,-180,-76),807=>array(-322,-193,-140,0),808=>array(-304,-192,-140,0),809=>array(-258,-263,-192,-76),810=>array(-356,-259,-93,-75),811=>array(-365,-217,-85,-77),812=>array(-365,-241,-84,-58),813=>array(-365,-240,-84,-57),814=>array(-363,-217,-87,-77),815=>array(-363,-216,-87,-76),816=>array(-373,-213,-83,-76),817=>array(-356,-147,-93,-75),818=>array(-450,-236,0,-197),819=>array(-450,-236,0,-80),820=>array(-663,212,-85,415),821=>array(-262,227,-26,278),822=>array(-554,227,-32,278),823=>array(-503,-46,-31,565),824=>array(-693,-28,-44,757),825=>array(-282,-344,-161,-76),826=>array(-359,-256,-96,-72),827=>array(-346,-344,-104,-75),828=>array(-365,-217,-85,-77),829=>array(-323,575,-128,792),830=>array(-281,592,-157,850),831=>array(-450,599,0,755),835=>array(-278,606,-161,829),856=>array(-99,652,4,766),864=>array(-387,723,387,859),865=>array(-401,729,401,869),880=>array(49,0,617,729),881=>array(31,0,431,519),882=>array(9,0,592,729),883=>array(36,0,464,519),884=>array(70,557,183,800),885=>array(70,-208,183,35),886=>array(44,-14,748,743),887=>array(31,0,553,519),890=>array(192,-208,303,-60),891=>array(44,-14,463,533),892=>array(44,-14,463,533),893=>array(44,-14,463,533),894=>array(32,-136,212,434),900=>array(172,616,374,800),901=>array(88,652,374,996),902=>array(-5,0,659,800),903=>array(83,282,201,412),904=>array(6,0,738,800),905=>array(6,0,886,800),906=>array(6,0,457,800),908=>array(6,-14,702,800),910=>array(6,0,816,800),911=>array(6,0,713,800),912=>array(7,22,303,996),913=>array(-5,0,659,729),914=>array(49,0,606,729),915=>array(49,0,587,729),916=>array(34,0,612,729),917=>array(49,0,585,729),918=>array(40,0,590,729),919=>array(49,0,735,729),920=>array(50,-14,688,742),921=>array(49,0,306,729),922=>array(49,0,686,729),923=>array(-5,0,659,729),924=>array(44,0,876,729),925=>array(44,-14,748,729),926=>array(49,0,578,729),927=>array(50,-14,688,742),928=>array(49,0,735,729),929=>array(49,0,574,729),931=>array(36,0,576,729),932=>array(9,0,592,729),933=>array(-10,0,602,729),934=>array(50,0,688,729),935=>array(5,0,637,729),936=>array(42,0,755,729),937=>array(55,0,692,742),938=>array(43,0,316,920),939=>array(-10,0,602,920),940=>array(44,-12,584,800),941=>array(44,-19,425,800),942=>array(32,-208,483,800),943=>array(32,22,303,800),944=>array(32,-3,503,996),945=>array(44,-12,584,533),946=>array(57,-208,475,765),947=>array(32,-209,494,519),948=>array(44,-14,497,765),949=>array(44,-19,425,524),950=>array(36,-208,450,760),951=>array(32,-208,483,533),952=>array(44,-11,497,771),953=>array(32,22,303,519),954=>array(31,0,552,519),955=>array(37,0,545,765),956=>array(31,-208,553,519),957=>array(32,0,500,519),958=>array(36,-208,450,760),959=>array(44,-14,497,533),960=>array(32,0,559,519),961=>array(57,-208,484,533),962=>array(44,-208,450,533),963=>array(44,-14,588,519),964=>array(36,22,464,519),965=>array(32,-3,503,519),966=>array(40,-208,591,521),967=>array(11,-222,526,533),968=>array(57,-208,649,519),969=>array(40,-3,690,519),970=>array(9,22,303,766),971=>array(32,-3,503,766),972=>array(44,-14,497,800),973=>array(32,-3,503,800),974=>array(40,-3,690,800),975=>array(49,-240,652,729),976=>array(44,-11,479,771),977=>array(31,-11,610,771),978=>array(26,0,585,731),979=>array(6,0,754,800),980=>array(26,0,585,920),981=>array(34,-208,579,760),982=>array(19,-3,709,519),983=>array(42,-222,516,533),984=>array(50,-208,688,742),985=>array(44,-208,497,533),986=>array(50,-208,617,742),987=>array(44,-208,450,616),988=>array(49,0,587,729),989=>array(-82,-211,388,742),990=>array(47,0,476,729),991=>array(83,0,510,759),992=>array(68,-208,653,742),993=>array(40,-208,482,533),1008=>array(42,-4,516,533),1009=>array(57,-210,484,533),1010=>array(44,-14,463,533),1011=>array(-87,-222,191,736),1012=>array(50,-14,688,742),1013=>array(44,-14,463,533),1014=>array(44,-14,463,533),1015=>array(49,0,574,729),1016=>array(26,-208,531,760),1017=>array(50,-14,635,742),1018=>array(44,0,876,729),1019=>array(42,-208,604,519),1020=>array(37,-208,509,533),1021=>array(50,-14,635,742),1022=>array(50,-14,635,742),1023=>array(50,-14,635,742),1024=>array(49,0,585,927),1025=>array(49,0,585,920),1026=>array(-35,-216,652,729),1027=>array(49,0,558,927),1028=>array(50,-14,635,742),1029=>array(75,-14,551,742),1030=>array(49,0,306,729),1031=>array(42,0,315,920),1032=>array(-76,-208,320,729),1033=>array(22,-14,930,729),1034=>array(49,0,960,729),1035=>array(-35,0,735,729),1036=>array(49,0,686,927),1037=>array(49,0,735,927),1038=>array(10,-14,640,957),1039=>array(49,-157,735,729),1040=>array(10,0,675,729),1041=>array(49,0,606,729),1042=>array(49,0,606,729),1043=>array(49,0,558,729),1044=>array(44,-157,686,729),1045=>array(49,0,585,729),1046=>array(10,0,1001,729),1047=>array(48,-14,506,742),1048=>array(49,0,735,729),1049=>array(49,0,735,957),1050=>array(49,0,686,729),1051=>array(22,-14,706,729),1052=>array(44,0,876,729),1053=>array(49,0,735,729),1054=>array(50,-14,688,742),1055=>array(49,0,735,729),1056=>array(49,0,574,729),1057=>array(50,-14,635,742),1058=>array(9,0,592,729),1059=>array(10,-14,640,729),1060=>array(51,0,696,729),1061=>array(5,0,637,729),1062=>array(49,-157,753,729),1063=>array(9,0,650,729),1064=>array(49,0,978,729),1065=>array(49,-157,978,729),1066=>array(31,0,683,729),1067=>array(49,0,836,729),1068=>array(49,0,575,729),1069=>array(50,-14,635,742),1070=>array(49,-14,1015,742),1071=>array(31,0,677,729),1072=>array(44,-14,511,533),1073=>array(38,-14,497,776),1074=>array(32,0,469,519),1075=>array(26,0,433,519),1076=>array(32,-138,518,519),1077=>array(44,-14,488,533),1078=>array(11,0,817,519),1079=>array(40,-14,446,533),1080=>array(31,0,553,519),1081=>array(31,0,553,746),1082=>array(31,0,552,519),1083=>array(16,-14,540,519),1084=>array(32,0,668,519),1085=>array(31,0,553,519),1086=>array(44,-14,497,533),1087=>array(31,0,553,519),1088=>array(26,-208,531,533),1089=>array(44,-14,463,533),1090=>array(36,0,464,519),1091=>array(10,-222,519,519),1092=>array(35,-208,670,760),1093=>array(11,0,497,519),1094=>array(32,-138,554,519),1095=>array(31,0,547,519),1096=>array(32,0,813,519),1097=>array(32,-138,813,519),1098=>array(26,0,535,519),1099=>array(26,0,685,519),1100=>array(26,0,453,519),1101=>array(44,-14,463,533),1102=>array(26,-14,743,533),1103=>array(28,0,521,519),1104=>array(44,-14,488,799),1105=>array(44,-14,488,766),1106=>array(19,-222,516,760),1107=>array(26,0,433,800),1108=>array(44,-14,463,533),1109=>array(50,-14,416,533),1110=>array(32,0,268,736),1111=>array(7,0,281,766),1112=>array(-87,-222,191,736),1113=>array(16,-14,734,519),1114=>array(31,0,747,519),1115=>array(19,0,555,760),1116=>array(31,0,552,800),1117=>array(31,0,553,799),1118=>array(10,-222,519,746),1119=>array(26,-138,558,519),1122=>array(31,0,654,729),1123=>array(26,0,505,760),1124=>array(49,-14,962,742),1125=>array(26,-14,709,533),1130=>array(10,0,1001,729),1131=>array(11,0,817,519),1132=>array(49,0,1213,729),1133=>array(26,0,991,519),1136=>array(10,0,839,729),1137=>array(-19,-208,802,760),1138=>array(50,-14,688,742),1139=>array(44,-11,452,533),1140=>array(10,0,763,742),1141=>array(10,0,600,533),1142=>array(10,0,763,927),1143=>array(10,0,600,800),1164=>array(22,0,604,729),1165=>array(16,0,453,760),1168=>array(49,0,567,872),1169=>array(26,0,437,668),1170=>array(45,0,558,729),1171=>array(26,0,432,519),1172=>array(49,-216,606,729),1173=>array(26,-222,500,519),1174=>array(10,-157,1001,729),1175=>array(11,-138,817,519),1176=>array(48,-193,506,742),1177=>array(40,-193,446,533),1178=>array(49,-157,686,729),1179=>array(26,-138,558,519),1182=>array(44,0,686,729),1183=>array(22,0,552,760),1184=>array(31,0,795,729),1185=>array(26,0,634,519),1186=>array(49,-157,735,729),1187=>array(31,-138,553,519),1188=>array(49,0,988,729),1189=>array(31,0,728,519),1190=>array(49,-216,1035,729),1191=>array(26,-222,794,519),1194=>array(50,-193,635,742),1195=>array(44,-193,463,533),1196=>array(9,-157,592,729),1197=>array(36,-138,464,519),1198=>array(-10,0,602,729),1199=>array(-3,-208,506,519),1200=>array(-10,0,602,729),1201=>array(-3,-208,506,519),1202=>array(5,-157,646,729),1203=>array(11,-138,500,519),1204=>array(9,-157,825,729),1205=>array(36,-138,612,519),1206=>array(-25,-157,615,729),1207=>array(31,-138,553,519),1210=>array(-25,0,628,729),1211=>array(32,0,555,760),1216=>array(49,0,306,729),1217=>array(10,0,1001,928),1218=>array(11,0,817,785),1219=>array(49,-216,652,729),1220=>array(26,-222,526,519),1223=>array(49,-216,735,729),1224=>array(31,-222,553,519),1227=>array(-25,-157,628,729),1228=>array(31,-138,553,519),1231=>array(26,0,264,760),1232=>array(10,0,675,926),1233=>array(44,-14,511,772),1234=>array(10,0,675,920),1235=>array(44,-14,511,766),1236=>array(-16,0,854,729),1237=>array(44,-14,801,533),1238=>array(49,0,585,928),1239=>array(44,-14,488,785),1240=>array(50,-14,688,742),1241=>array(44,-14,488,533),1242=>array(50,-14,688,920),1243=>array(44,-14,488,766),1244=>array(10,0,1001,920),1245=>array(11,0,817,766),1246=>array(48,-14,506,920),1247=>array(40,-14,446,766),1248=>array(44,-14,482,729),1249=>array(44,-224,482,519),1250=>array(49,0,735,899),1251=>array(31,0,553,745),1252=>array(49,0,735,920),1253=>array(31,0,553,766),1254=>array(50,-14,688,920),1255=>array(44,-14,497,766),1256=>array(50,-14,688,742),1257=>array(44,-14,497,533),1258=>array(50,-14,688,920),1259=>array(44,-14,497,766),1260=>array(50,-14,635,920),1261=>array(44,-14,463,766),1262=>array(10,-14,640,899),1263=>array(10,-222,519,745),1264=>array(10,-14,640,920),1265=>array(10,-222,519,766),1266=>array(10,-14,640,927),1267=>array(10,-222,519,800),1268=>array(9,0,650,920),1269=>array(31,0,547,766),1270=>array(49,-157,558,729),1271=>array(26,-138,433,519),1272=>array(49,0,836,920),1273=>array(26,0,685,766),1296=>array(55,-14,512,742),1297=>array(44,-14,452,533),1298=>array(22,-216,706,729),1299=>array(16,-222,540,519),1300=>array(22,-14,1074,729),1301=>array(16,-14,816,519),1306=>array(50,-160,688,742),1307=>array(44,-208,550,533),1308=>array(4,0,923,729),1309=>array(14,0,759,519),1329=>array(31,-14,688,729),1330=>array(31,0,682,743),1331=>array(44,0,743,743),1332=>array(18,0,763,743),1333=>array(31,-14,682,729),1334=>array(104,-45,669,743),1335=>array(70,-45,686,729),1336=>array(31,-45,682,743),1337=>array(31,-14,889,743),1338=>array(44,-14,743,729),1339=>array(70,0,687,729),1340=>array(70,-45,632,729),1341=>array(70,-14,979,729),1342=>array(83,-13,694,742),1343=>array(9,0,667,729),1344=>array(48,-66,585,729),1345=>array(89,-32,653,743),1346=>array(26,-45,750,743),1347=>array(69,0,702,764),1348=>array(42,-14,807,729),1349=>array(57,-14,627,742),1350=>array(-22,-14,702,774),1351=>array(75,-14,633,729),1352=>array(31,0,688,743),1353=>array(86,-45,641,743),1354=>array(9,0,756,743),1355=>array(100,-45,664,744),1356=>array(31,0,795,743),1357=>array(31,-14,688,729),1358=>array(9,-45,730,729),1359=>array(49,-14,603,742),1360=>array(31,0,688,743),1361=>array(47,-14,631,742),1362=>array(70,0,623,729),1363=>array(57,0,704,729),1364=>array(0,0,718,743),1365=>array(57,-14,694,742),1366=>array(54,-14,699,729),1369=>array(51,492,172,760),1370=>array(40,482,207,729),1371=>array(0,615,208,799),1372=>array(2,618,346,893),1373=>array(75,615,276,799),1374=>array(9,618,341,856),1375=>array(40,618,416,760),1377=>array(25,-14,822,519),1378=>array(32,-208,500,533),1379=>array(44,-208,635,533),1380=>array(32,-208,635,533),1381=>array(21,-14,543,760),1382=>array(44,-208,635,533),1383=>array(25,0,459,760),1384=>array(25,-208,547,533),1385=>array(25,-208,725,533),1386=>array(44,-14,635,760),1387=>array(25,-208,546,760),1388=>array(21,-208,354,519),1389=>array(25,-208,843,760),1390=>array(53,-14,505,770),1391=>array(25,-208,541,760),1392=>array(25,0,547,760),1393=>array(62,-14,547,773),1394=>array(25,-208,627,533),1395=>array(70,-14,556,767),1396=>array(25,-14,583,773),1397=>array(-25,-208,190,519),1398=>array(48,-14,547,773),1399=>array(-13,-208,393,534),1400=>array(37,0,559,533),1401=>array(16,-208,329,544),1402=>array(25,-208,814,519),1403=>array(48,-208,466,534),1404=>array(37,0,568,533),1405=>array(25,-14,547,519),1406=>array(25,-208,635,760),1407=>array(25,-14,812,533),1408=>array(32,-208,555,533),1409=>array(48,-222,554,533),1410=>array(37,0,453,519),1411=>array(25,-208,812,760),1412=>array(10,-208,565,533),1413=>array(48,-14,500,533),1414=>array(18,-208,685,760),1415=>array(25,-14,728,760),1417=>array(93,-14,211,434),1418=>array(40,203,265,306),4256=>array(48,0,611,847),4257=>array(48,0,726,847),4258=>array(48,-58,706,848),4259=>array(57,1,716,847),4260=>array(48,0,611,847),4261=>array(48,0,872,847),4262=>array(11,0,762,847),4263=>array(57,0,979,847),4264=>array(11,0,461,847),4265=>array(48,0,626,847),4266=>array(39,0,804,847),4267=>array(62,0,831,847),4268=>array(48,0,620,847),4269=>array(53,-37,951,847),4270=>array(11,0,758,847),4271=>array(11,0,698,847),4272=>array(48,0,896,847),4273=>array(48,0,611,847),4274=>array(48,0,554,847),4275=>array(53,-37,897,847),4276=>array(48,0,794,847),4277=>array(30,0,888,847),4278=>array(48,0,610,847),4279=>array(48,0,611,847),4280=>array(48,0,611,847),4281=>array(48,0,611,847),4282=>array(48,-25,762,847),4283=>array(48,0,813,847),4284=>array(48,1,594,847),4285=>array(48,1,631,847),4286=>array(48,0,611,847),4287=>array(48,0,823,847),4288=>array(39,0,853,847),4289=>array(48,0,611,847),4290=>array(48,1,715,847),4291=>array(48,0,612,847),4292=>array(48,0,705,847),4293=>array(62,0,808,848),4304=>array(48,0,438,571),4305=>array(48,0,466,829),4306=>array(35,-225,496,542),4307=>array(48,-220,702,531),4308=>array(31,-225,448,532),4309=>array(35,-225,453,532),4310=>array(18,0,508,831),4311=>array(48,0,727,531),4312=>array(48,0,456,532),4313=>array(22,-225,443,532),4314=>array(48,-220,912,537),4315=>array(48,0,466,829),4316=>array(62,0,479,840),4317=>array(48,-98,694,532),4318=>array(48,1,465,829),4319=>array(48,-225,466,531),4320=>array(48,-0,693,822),4321=>array(-13,0,498,829),4322=>array(40,-225,634,681),4323=>array(18,-225,571,532),4324=>array(48,-225,686,532),4325=>array(48,-225,465,831),4326=>array(48,-220,724,532),4327=>array(35,-225,454,531),4328=>array(9,0,473,830),4329=>array(62,-5,479,831),4330=>array(48,-225,564,531),4331=>array(48,0,467,829),4332=>array(44,-229,493,830),4333=>array(40,-225,479,829),4334=>array(-13,0,502,830),4335=>array(22,-225,593,532),4336=>array(48,0,466,829),4337=>array(48,0,495,830),4338=>array(48,-91,466,532),4339=>array(48,-225,466,585),4340=>array(48,-225,465,831),4341=>array(48,0,536,829),4342=>array(48,-225,750,672),4343=>array(48,-225,516,542),4344=>array(57,-225,476,532),4345=>array(48,-225,509,537),4346=>array(48,-69,466,532),4347=>array(40,0,354,486),4348=>array(40,341,279,845),7424=>array(-3,0,506,519),7425=>array(-19,0,646,519),7426=>array(44,-14,801,533),7427=>array(32,0,496,519),7428=>array(44,-14,448,533),7429=>array(32,0,489,519),7430=>array(32,0,489,519),7431=>array(26,0,447,519),7432=>array(44,-18,417,533),7433=>array(32,-214,268,522),7434=>array(12,-14,408,519),7435=>array(31,0,552,519),7436=>array(21,0,466,519),7437=>array(32,0,668,519),7438=>array(31,-14,553,519),7439=>array(44,-14,497,533),7440=>array(57,-14,459,533),7441=>array(44,9,537,511),7442=>array(44,27,537,492),7443=>array(16,-0,566,523),7444=>array(44,-14,845,533),7445=>array(26,-14,428,533),7446=>array(44,260,497,533),7447=>array(44,-14,497,259),7448=>array(47,0,466,519),7449=>array(10,0,503,519),7450=>array(10,0,503,519),7451=>array(36,0,464,519),7452=>array(2,-14,524,519),7453=>array(57,-29,538,551),7454=>array(69,-29,771,551),7455=>array(59,-205,539,680),7456=>array(-3,0,506,519),7457=>array(14,0,759,519),7458=>array(36,0,441,519),7459=>array(45,-14,443,519),7460=>array(44,-14,434,742),7461=>array(26,-14,643,533),7462=>array(26,0,433,519),7463=>array(-3,0,506,519),7464=>array(32,0,559,519),7465=>array(47,0,466,519),7466=>array(33,0,611,520),7467=>array(16,-14,540,519),7468=>array(-4,326,415,734),7469=>array(-10,326,539,734),7470=>array(31,326,382,734),7471=>array(28,334,404,742),7472=>array(31,326,422,734),7473=>array(31,326,369,734),7474=>array(31,326,369,734),7475=>array(31,318,409,742),7476=>array(31,326,463,734),7477=>array(31,326,193,734),7478=>array(-48,209,202,734),7479=>array(31,326,432,734),7480=>array(31,326,363,734),7481=>array(28,326,552,734),7482=>array(27,318,471,734),7483=>array(27,318,471,734),7484=>array(31,318,434,742),7485=>array(22,326,309,750),7486=>array(31,326,361,734),7487=>array(31,326,440,734),7488=>array(5,326,373,734),7489=>array(26,318,453,734),7490=>array(2,326,581,734),7491=>array(28,318,322,625),7492=>array(28,318,322,625),7493=>array(28,318,347,625),7494=>array(28,318,505,625),7495=>array(16,318,334,751),7496=>array(28,318,347,751),7497=>array(28,318,308,625),7498=>array(28,318,308,625),7499=>array(28,316,263,625),7500=>array(28,316,263,625),7501=>array(28,202,347,625),7502=>array(21,207,168,619),7503=>array(16,326,348,751),7504=>array(21,326,522,625),7505=>array(21,202,304,625),7506=>array(28,318,313,625),7507=>array(28,318,292,625),7508=>array(28,472,313,625),7509=>array(28,318,313,471),7510=>array(16,209,334,625),7511=>array(16,318,224,707),7512=>array(15,318,344,617),7513=>array(36,310,338,635),7514=>array(21,326,522,625),7515=>array(-2,326,319,617),7516=>array(17,326,405,633),7517=>array(35,217,299,763),7518=>array(21,217,311,625),7519=>array(28,326,313,763),7520=>array(25,217,373,626),7521=>array(7,209,331,633),7522=>array(21,0,168,412),7523=>array(20,0,267,299),7524=>array(15,-8,344,291),7525=>array(-2,0,319,291),7526=>array(35,-109,299,437),7527=>array(21,-109,311,298),7528=>array(35,-117,305,299),7529=>array(25,-109,373,300),7530=>array(7,-117,331,307),7531=>array(24,-14,832,533),7543=>array(44,-222,550,533),7544=>array(31,326,463,734),7547=>array(32,0,268,519),7548=>array(32,0,269,519),7549=>array(26,-208,584,533),7550=>array(2,-14,524,519),7551=>array(-14,-14,572,519),7557=>array(-17,-222,261,760),7579=>array(28,318,347,625),7580=>array(28,318,292,625),7581=>array(28,266,282,625),7582=>array(28,318,313,751),7583=>array(28,316,263,625),7584=>array(21,326,244,751),7585=>array(-55,202,166,617),7586=>array(28,202,347,617),7587=>array(15,209,344,617),7588=>array(21,326,168,738),7589=>array(21,326,169,617),7590=>array(21,326,168,617),7591=>array(31,326,180,617),7592=>array(-55,202,156,738),7593=>array(16,202,240,751),7594=>array(-10,202,165,751),7595=>array(23,326,294,624),7596=>array(21,202,477,625),7597=>array(21,209,522,625),7598=>array(-55,202,349,625),7599=>array(21,202,428,625),7600=>array(23,318,350,624),7601=>array(28,318,313,625),7602=>array(28,209,313,751),7603=>array(31,202,262,625),7604=>array(-55,202,188,752),7605=>array(16,202,224,707),7606=>array(15,318,344,617),7607=>array(28,324,324,626),7608=>array(1,326,330,625),7609=>array(21,324,317,617),7610=>array(-2,326,319,617),7611=>array(22,326,278,617),7612=>array(22,202,402,617),7613=>array(22,274,280,617),7614=>array(28,201,304,617),7615=>array(28,320,313,758),7620=>array(-356,616,-12,800),7621=>array(-438,616,-93,800),7622=>array(-356,616,-12,800),7623=>array(-438,616,-93,800),7624=>array(-428,616,-22,800),7625=>array(-428,616,-22,800),7680=>array(-5,-241,659,729),7681=>array(44,-241,511,533),7682=>array(49,0,606,921),7683=>array(26,-14,531,920),7684=>array(49,-191,606,729),7685=>array(26,-191,531,760),7686=>array(49,-147,606,729),7687=>array(26,-147,531,760),7688=>array(50,-193,635,927),7689=>array(44,-193,463,800),7690=>array(49,0,670,921),7691=>array(44,-14,550,920),7692=>array(49,-191,670,729),7693=>array(44,-191,550,760),7694=>array(49,-147,670,729),7695=>array(44,-147,550,760),7696=>array(49,-187,670,729),7697=>array(44,-193,550,760),7698=>array(49,-240,670,729),7699=>array(44,-240,550,760),7700=>array(49,0,585,1044),7701=>array(44,-14,488,919),7702=>array(49,0,585,1044),7703=>array(44,-14,488,919),7704=>array(49,-240,585,729),7705=>array(44,-240,488,533),7706=>array(49,-213,585,729),7707=>array(44,-213,488,533),7708=>array(49,-193,585,928),7709=>array(44,-193,488,785),7710=>array(49,0,587,921),7711=>array(32,0,387,920),7712=>array(50,-14,648,927),7713=>array(44,-222,550,745),7714=>array(49,0,735,921),7715=>array(32,0,555,920),7716=>array(49,-191,735,729),7717=>array(32,-191,555,760),7718=>array(49,0,735,920),7719=>array(4,0,555,921),7720=>array(49,-193,735,729),7721=>array(32,-193,555,760),7722=>array(49,-217,735,729),7723=>array(32,-217,555,760),7724=>array(31,-213,321,729),7725=>array(-4,-213,287,736),7726=>array(41,0,315,1044),7727=>array(7,0,281,886),7728=>array(49,0,686,931),7729=>array(26,0,552,961),7730=>array(49,-191,686,729),7731=>array(26,-191,552,760),7732=>array(49,-147,686,729),7733=>array(26,-147,552,760),7734=>array(49,-191,576,729),7735=>array(26,-191,261,760),7736=>array(46,-191,576,899),7737=>array(12,-191,275,900),7738=>array(49,-147,576,729),7739=>array(13,-147,276,760),7740=>array(49,-240,576,729),7741=>array(4,-240,285,760),7742=>array(44,0,876,927),7743=>array(32,0,829,800),7744=>array(44,0,876,921),7745=>array(32,0,829,766),7746=>array(44,-191,876,729),7747=>array(32,-191,829,533),7748=>array(44,-14,748,921),7749=>array(32,0,555,766),7750=>array(44,-191,748,729),7751=>array(32,-191,555,533),7752=>array(44,-147,748,729),7753=>array(32,-147,555,533),7754=>array(44,-240,748,729),7755=>array(32,-240,555,533),7756=>array(50,-14,688,1044),7757=>array(44,-14,497,881),7758=>array(50,-14,688,1049),7759=>array(44,-14,497,891),7760=>array(50,-14,688,1044),7761=>array(44,-14,497,919),7762=>array(50,-14,688,1044),7763=>array(44,-14,497,919),7764=>array(49,0,574,927),7765=>array(26,-208,531,800),7766=>array(49,0,574,921),7767=>array(26,-208,531,766),7768=>array(49,0,699,921),7769=>array(32,0,431,766),7770=>array(49,-191,699,729),7771=>array(32,-191,431,533),7772=>array(49,-191,699,899),7773=>array(32,-191,431,745),7774=>array(49,-147,699,729),7775=>array(13,-147,431,533),7776=>array(75,-14,551,921),7777=>array(50,-14,416,766),7778=>array(75,-191,551,742),7779=>array(50,-191,416,533),7780=>array(75,-14,551,943),7781=>array(50,-14,416,760),7782=>array(75,-14,551,1049),7783=>array(50,-14,416,867),7784=>array(75,-191,551,921),7785=>array(50,-191,416,766),7786=>array(9,0,592,921),7787=>array(26,-14,355,920),7788=>array(9,-191,592,729),7789=>array(26,-191,355,680),7790=>array(9,-147,592,729),7791=>array(26,-147,357,680),7792=>array(9,-240,592,729),7793=>array(26,-240,366,680),7794=>array(42,-191,718,729),7795=>array(24,-191,546,519),7796=>array(42,-213,718,729),7797=>array(24,-213,546,519),7798=>array(42,-240,718,729),7799=>array(24,-240,546,519),7800=>array(42,-14,718,1044),7801=>array(24,-14,546,881),7802=>array(42,-14,718,1032),7803=>array(24,-14,546,908),7804=>array(-9,0,664,927),7805=>array(-3,0,506,777),7806=>array(-9,-191,664,729),7807=>array(-3,-191,506,519),7808=>array(4,0,923,927),7809=>array(14,0,759,799),7810=>array(4,0,923,927),7811=>array(14,0,759,800),7812=>array(4,0,923,920),7813=>array(14,0,759,766),7814=>array(4,0,923,921),7815=>array(14,0,759,766),7816=>array(4,-191,923,729),7817=>array(14,-191,759,519),7818=>array(5,0,637,921),7819=>array(11,0,497,766),7820=>array(5,0,637,920),7821=>array(11,0,497,766),7822=>array(-10,0,602,921),7823=>array(-3,-222,506,766),7824=>array(40,0,590,927),7825=>array(36,0,441,800),7826=>array(40,-191,590,729),7827=>array(36,-191,441,519),7828=>array(40,-147,590,729),7829=>array(36,-147,441,519),7830=>array(32,-147,555,760),7831=>array(-2,-14,355,921),7832=>array(14,0,759,878),7833=>array(-3,-222,506,878),7834=>array(44,-14,708,760),7835=>array(32,0,387,920),7836=>array(22,0,387,760),7837=>array(32,0,387,760),7838=>array(42,-14,681,743),7839=>array(44,-14,497,765),7840=>array(-5,-191,659,729),7841=>array(44,-191,511,533),7842=>array(-5,0,659,1034),7843=>array(44,-14,511,852),7844=>array(-5,0,659,1028),7845=>array(44,-14,536,846),7846=>array(-5,0,659,1028),7847=>array(44,-14,511,847),7848=>array(-5,0,659,1086),7849=>array(44,-14,511,904),7850=>array(-5,0,659,1057),7851=>array(44,-14,511,875),7852=>array(-5,-191,659,982),7853=>array(44,-191,511,800),7854=>array(-5,0,659,1044),7855=>array(44,-14,511,877),7856=>array(-5,0,659,1044),7857=>array(44,-14,511,877),7858=>array(-5,0,659,1109),7859=>array(44,-14,511,942),7860=>array(-5,0,659,1043),7861=>array(44,-14,511,876),7862=>array(-5,-191,659,967),7863=>array(44,-191,511,785),7864=>array(49,-191,585,729),7865=>array(44,-191,488,533),7866=>array(49,0,585,1034),7867=>array(44,-14,488,852),7868=>array(49,0,585,927),7869=>array(44,-14,488,777),7870=>array(49,0,603,1028),7871=>array(44,-14,561,846),7872=>array(49,0,585,1028),7873=>array(44,-14,488,847),7874=>array(49,0,585,1086),7875=>array(44,-14,535,904),7876=>array(49,0,585,1057),7877=>array(44,-14,488,875),7878=>array(49,-191,585,927),7879=>array(44,-191,488,800),7880=>array(49,0,306,1034),7881=>array(32,0,268,852),7882=>array(49,-191,306,729),7883=>array(32,-191,268,736),7884=>array(50,-191,688,742),7885=>array(44,-191,497,533),7886=>array(50,-14,688,1034),7887=>array(44,-14,497,852),7888=>array(50,-14,688,1028),7889=>array(44,-14,549,846),7890=>array(50,-14,688,1028),7891=>array(44,-14,497,846),7892=>array(50,-14,688,1086),7893=>array(44,-14,523,904),7894=>array(50,-14,688,1057),7895=>array(44,-14,497,875),7896=>array(50,-191,688,927),7897=>array(44,-191,497,800),7898=>array(48,-14,710,927),7899=>array(43,-14,582,800),7900=>array(48,-14,710,927),7901=>array(43,-14,582,799),7902=>array(48,-14,710,1034),7903=>array(43,-14,582,852),7904=>array(48,-14,710,921),7905=>array(43,-14,582,777),7906=>array(48,-191,710,760),7907=>array(43,-191,582,533),7908=>array(42,-191,718,729),7909=>array(24,-191,546,519),7910=>array(42,-14,718,1034),7911=>array(24,-14,546,852),7912=>array(40,-14,889,927),7913=>array(19,-14,620,800),7914=>array(40,-14,889,927),7915=>array(19,-14,620,799),7916=>array(40,-14,889,1034),7917=>array(19,-14,620,852),7918=>array(40,-14,889,921),7919=>array(19,-14,620,777),7920=>array(40,-191,889,802),7921=>array(19,-191,620,532),7922=>array(-10,0,602,931),7923=>array(-3,-222,506,776),7924=>array(-10,-191,602,729),7925=>array(-3,-222,506,519),7926=>array(-10,0,602,1037),7927=>array(-3,-222,506,852),7928=>array(-10,0,602,927),7929=>array(-3,-222,506,777),7930=>array(49,0,833,729),7931=>array(26,0,497,760),7936=>array(44,-12,584,829),7937=>array(44,-12,584,829),7938=>array(44,-12,584,829),7939=>array(44,-12,584,829),7940=>array(44,-12,584,829),7941=>array(44,-12,584,829),7942=>array(44,-12,584,994),7943=>array(44,-12,584,994),7944=>array(-5,0,659,829),7945=>array(-5,0,659,829),7946=>array(4,0,791,829),7947=>array(4,0,791,829),7948=>array(5,0,669,829),7949=>array(6,0,696,829),7950=>array(-5,0,659,994),7951=>array(-5,0,659,994),7952=>array(44,-19,425,829),7953=>array(44,-19,425,829),7954=>array(44,-19,425,829),7955=>array(44,-19,425,829),7956=>array(44,-19,425,829),7957=>array(44,-19,437,829),7960=>array(6,0,696,829),7961=>array(6,0,686,829),7962=>array(4,0,888,829),7963=>array(4,0,897,829),7964=>array(6,0,835,829),7965=>array(6,0,859,829),7968=>array(32,-208,483,829),7969=>array(32,-208,483,829),7970=>array(32,-208,483,829),7971=>array(32,-208,483,829),7972=>array(32,-208,483,829),7973=>array(32,-208,483,829),7974=>array(32,-208,483,994),7975=>array(32,-208,483,994),7976=>array(6,0,849,829),7977=>array(6,0,844,829),7978=>array(4,0,1042,829),7979=>array(4,0,1052,829),7980=>array(6,0,994,829),7981=>array(6,0,1015,829),7982=>array(6,0,938,994),7983=>array(6,0,936,994),7984=>array(32,22,303,829),7985=>array(32,22,303,829),7986=>array(-5,22,331,829),7987=>array(-9,22,330,829),7988=>array(28,22,335,829),7989=>array(11,22,342,829),7990=>array(0,22,303,994),7991=>array(2,22,303,994),7992=>array(6,0,419,829),7993=>array(6,0,412,829),7994=>array(4,0,612,829),7995=>array(4,0,615,829),7996=>array(6,0,562,829),7997=>array(6,0,585,829),7998=>array(6,0,512,994),7999=>array(6,0,504,994),8000=>array(44,-14,497,829),8001=>array(44,-14,497,829),8002=>array(44,-14,497,829),8003=>array(44,-14,497,829),8004=>array(44,-14,497,829),8005=>array(44,-14,497,829),8008=>array(6,-14,688,829),8009=>array(6,-14,724,829),8010=>array(4,-14,958,829),8011=>array(4,-14,965,829),8012=>array(6,-14,793,829),8013=>array(6,-14,817,829),8016=>array(32,-3,503,829),8017=>array(32,-3,503,829),8018=>array(32,-3,503,829),8019=>array(32,-3,503,829),8020=>array(32,-3,503,829),8021=>array(32,-3,503,829),8022=>array(32,-3,503,994),8023=>array(32,-3,503,994),8025=>array(6,0,773,829),8027=>array(4,0,979,829),8029=>array(6,0,948,829),8031=>array(6,0,866,994),8032=>array(40,-3,690,829),8033=>array(40,-3,690,829),8034=>array(40,-3,690,829),8035=>array(40,-3,690,829),8036=>array(40,-3,690,829),8037=>array(40,-3,690,829),8038=>array(40,-3,690,994),8039=>array(40,-3,690,994),8040=>array(6,0,692,829),8041=>array(6,0,729,829),8042=>array(4,0,964,829),8043=>array(4,0,969,829),8044=>array(6,0,798,829),8045=>array(6,0,824,829),8046=>array(6,0,790,994),8047=>array(6,0,819,994),8048=>array(44,-12,584,799),8049=>array(44,-12,584,800),8050=>array(44,-19,425,799),8051=>array(44,-19,425,800),8052=>array(32,-208,483,799),8053=>array(32,-208,483,800),8054=>array(0,22,303,799),8055=>array(32,22,303,800),8056=>array(44,-14,497,799),8057=>array(44,-14,497,800),8058=>array(32,-3,503,799),8059=>array(32,-3,503,800),8060=>array(40,-3,690,799),8061=>array(40,-3,690,800),8064=>array(44,-208,584,829),8065=>array(44,-208,584,829),8066=>array(44,-208,584,829),8067=>array(44,-208,584,829),8068=>array(44,-208,584,829),8069=>array(44,-208,584,829),8070=>array(44,-208,584,994),8071=>array(44,-208,584,994),8072=>array(-5,-208,659,829),8073=>array(-5,-208,659,829),8074=>array(4,-208,791,829),8075=>array(4,-208,791,829),8076=>array(5,-208,669,829),8077=>array(6,-208,696,829),8078=>array(-5,-208,659,994),8079=>array(-5,-208,659,994),8080=>array(32,-208,483,829),8081=>array(32,-208,483,829),8082=>array(32,-208,483,829),8083=>array(32,-208,483,829),8084=>array(32,-208,483,829),8085=>array(32,-208,483,829),8086=>array(32,-208,483,994),8087=>array(32,-208,483,994),8088=>array(6,-208,849,829),8089=>array(6,-208,844,829),8090=>array(4,-208,1042,829),8091=>array(4,-208,1052,829),8092=>array(6,-208,994,829),8093=>array(6,-208,1015,829),8094=>array(6,-208,938,994),8095=>array(6,-208,936,994),8096=>array(40,-208,690,829),8097=>array(40,-208,690,829),8098=>array(40,-208,690,829),8099=>array(40,-208,690,829),8100=>array(40,-208,690,829),8101=>array(40,-208,690,829),8102=>array(40,-208,690,994),8103=>array(40,-208,690,994),8104=>array(6,-208,692,829),8105=>array(6,-208,729,829),8106=>array(4,-208,964,829),8107=>array(4,-208,969,829),8108=>array(6,-208,798,829),8109=>array(6,-208,824,829),8110=>array(6,-208,790,994),8111=>array(6,-208,819,994),8112=>array(44,-12,584,785),8113=>array(44,-12,584,745),8114=>array(44,-208,584,799),8115=>array(44,-208,584,533),8116=>array(44,-208,584,800),8118=>array(44,-12,584,777),8119=>array(44,-208,584,777),8120=>array(-5,0,659,926),8121=>array(-5,0,659,899),8122=>array(-5,0,659,799),8123=>array(-5,0,659,800),8124=>array(-5,-208,659,729),8125=>array(169,606,287,829),8126=>array(192,-208,303,-60),8127=>array(169,606,287,829),8128=>array(80,639,370,777),8129=>array(80,652,370,944),8130=>array(32,-208,483,799),8131=>array(32,-208,483,533),8132=>array(32,-208,483,800),8134=>array(32,-208,483,777),8135=>array(32,-208,483,777),8136=>array(3,0,749,799),8137=>array(6,0,738,800),8138=>array(3,0,907,799),8139=>array(6,0,886,800),8140=>array(49,-208,735,729),8141=>array(62,606,398,829),8142=>array(74,606,382,829),8143=>array(80,606,370,994),8144=>array(12,22,303,785),8145=>array(14,22,303,745),8146=>array(-2,22,303,996),8147=>array(7,22,303,996),8150=>array(11,22,303,777),8151=>array(11,22,303,944),8152=>array(41,0,314,928),8153=>array(46,0,310,899),8154=>array(3,0,480,799),8155=>array(6,0,457,800),8157=>array(60,606,398,829),8158=>array(59,606,390,829),8159=>array(80,606,370,994),8160=>array(32,-3,503,785),8161=>array(32,-3,503,745),8162=>array(32,-3,503,996),8163=>array(32,-3,503,996),8164=>array(57,-208,484,829),8165=>array(57,-208,484,829),8166=>array(32,-3,503,777),8167=>array(32,-3,503,944),8168=>array(-10,0,602,926),8169=>array(-10,0,602,899),8170=>array(3,0,837,799),8171=>array(6,0,816,800),8172=>array(6,0,679,829),8173=>array(75,652,362,996),8174=>array(88,652,374,996),8175=>array(75,615,276,799),8178=>array(40,-208,690,799),8179=>array(40,-208,690,519),8180=>array(40,-208,690,800),8182=>array(40,-3,690,730),8183=>array(40,-208,690,730),8184=>array(3,-14,815,799),8185=>array(6,-14,702,800),8186=>array(3,0,832,799),8187=>array(6,0,713,800),8188=>array(55,-208,692,742),8189=>array(172,616,374,800),8190=>array(169,606,287,829),8208=>array(40,230,265,306),8209=>array(40,230,265,306),8210=>array(40,233,533,298),8211=>array(40,233,411,298),8212=>array(40,233,861,298),8213=>array(0,233,900,298),8214=>array(116,-236,333,764),8215=>array(0,-236,450,-80),8216=>array(92,495,242,742),8217=>array(63,482,214,729),8218=>array(40,-136,207,111),8219=>array(63,482,214,729),8220=>array(92,495,415,742),8221=>array(63,482,388,729),8222=>array(40,-136,380,111),8223=>array(63,482,388,729),8224=>array(25,-96,425,729),8225=>array(25,-96,425,729),8226=>array(135,227,396,516),8227=>array(135,188,431,555),8228=>array(92,-14,209,116),8229=>array(92,-14,509,116),8230=>array(92,-14,809,116),8240=>array(49,-14,1159,742),8241=>array(49,-14,1512,742),8242=>array(18,547,183,729),8243=>array(18,547,315,729),8244=>array(18,547,447,729),8245=>array(18,547,183,729),8246=>array(18,547,315,729),8247=>array(18,547,447,729),8248=>array(4,-236,300,-30),8249=>array(69,69,276,517),8250=>array(84,69,291,517),8252=>array(61,-14,414,729),8253=>array(61,-14,439,742),8254=>array(0,716,450,755),8258=>array(14,-28,886,814),8260=>array(-165,-14,315,742),8261=>array(77,-132,282,760),8262=>array(69,-132,274,760),8263=>array(30,-14,848,742),8264=>array(61,-14,617,742),8265=>array(61,-14,617,742),8267=>array(58,-96,503,729),8268=>array(95,220,355,509),8269=>array(95,220,355,509),8270=>array(14,-28,436,427),8271=>array(91,-136,271,434),8273=>array(14,-6,436,929),8274=>array(63,-93,377,729),8275=>array(44,233,856,394),8279=>array(18,547,579,729),8304=>array(22,319,338,742),8305=>array(21,326,168,738),8308=>array(23,326,333,734),8309=>array(30,319,326,734),8310=>array(18,319,334,742),8311=>array(35,326,335,734),8312=>array(23,319,337,742),8313=>array(22,319,338,742),8314=>array(60,326,415,677),8315=>array(60,479,415,524),8316=>array(60,424,415,580),8317=>array(44,239,181,751),8318=>array(40,239,176,751),8319=>array(20,326,344,625),8320=>array(22,-7,338,416),8321=>array(64,0,291,408),8322=>array(40,0,304,416),8323=>array(44,-7,315,416),8324=>array(23,0,333,408),8325=>array(30,-7,326,408),8326=>array(18,-7,334,416),8327=>array(35,0,335,408),8328=>array(23,-7,337,416),8329=>array(22,-7,338,416),8330=>array(60,0,415,351),8331=>array(60,153,415,198),8332=>array(60,98,415,253),8333=>array(44,-87,181,425),8334=>array(40,-87,176,425),8336=>array(28,-8,322,299),8337=>array(28,-8,308,299),8338=>array(28,-8,313,299),8339=>array(20,0,336,291),8340=>array(28,-8,308,299),8341=>array(20,0,344,425),8342=>array(16,0,348,425),8343=>array(20,0,173,425),8344=>array(21,0,522,299),8345=>array(20,0,344,299),8346=>array(16,-117,334,299),8347=>array(24,-8,262,299),8348=>array(16,-8,224,381),8358=>array(36,-14,563,729),8364=>array(-4,-14,500,742),8367=>array(12,-193,939,723),8369=>array(49,0,604,729),8372=>array(36,-14,671,742),8373=>array(75,-147,500,760),8376=>array(9,0,592,729),8377=>array(41,0,531,729),8450=>array(38,-14,671,742),8451=>array(42,-14,953,742),8457=>array(42,0,905,742),8461=>array(42,0,810,729),8462=>array(43,0,498,760),8463=>array(43,0,497,760),8469=>array(40,0,787,729),8470=>array(33,-14,807,729),8473=>array(42,0,655,729),8474=>array(38,-180,746,742),8477=>array(42,0,753,729),8482=>array(106,447,744,729),8484=>array(33,0,625,729),8486=>array(55,0,692,742),8487=>array(55,-13,692,729),8490=>array(49,0,686,729),8491=>array(-5,0,659,928),8498=>array(38,0,575,729),8508=>array(31,0,628,519),8509=>array(22,-209,554,519),8510=>array(42,0,627,729),8511=>array(42,0,810,729),8512=>array(23,-192,620,719),8513=>array(71,-14,645,742),8514=>array(3,0,412,729),8515=>array(3,0,412,729),8516=>array(-2,0,552,729),8517=>array(-22,0,751,729),8518=>array(9,-14,610,760),8519=>array(30,-14,534,533),8520=>array(-36,0,303,760),8521=>array(-149,-222,318,760),8523=>array(42,-14,737,742),8526=>array(21,0,437,519),8528=>array(64,-14,846,742),8529=>array(64,-14,850,742),8530=>array(64,-14,1209,742),8531=>array(64,-14,826,742),8532=>array(40,-14,826,742),8533=>array(64,-14,837,742),8534=>array(40,-14,837,742),8535=>array(44,-14,837,742),8536=>array(23,-14,837,742),8537=>array(64,-14,845,742),8538=>array(30,-14,845,742),8539=>array(64,-14,848,742),8540=>array(44,-14,848,742),8541=>array(30,-14,848,742),8542=>array(35,-14,848,742),8543=>array(64,-14,676,742),8544=>array(49,0,306,729),8545=>array(49,0,482,729),8546=>array(49,0,658,729),8547=>array(49,0,883,729),8548=>array(-9,0,664,729),8549=>array(-9,0,833,729),8550=>array(-9,0,1009,729),8551=>array(-9,0,1185,729),8552=>array(49,0,834,729),8553=>array(5,0,637,729),8554=>array(5,0,790,729),8555=>array(5,0,965,729),8556=>array(49,0,576,729),8557=>array(50,-14,635,742),8558=>array(49,0,670,729),8559=>array(44,0,876,729),8560=>array(32,0,268,736),8561=>array(32,0,555,736),8562=>array(32,0,843,736),8563=>array(32,0,794,736),8564=>array(-3,0,506,519),8565=>array(-3,0,776,736),8566=>array(-3,0,1063,736),8567=>array(-3,0,1352,736),8568=>array(32,0,785,736),8569=>array(11,0,497,519),8570=>array(11,0,775,736),8571=>array(11,0,1063,736),8572=>array(26,0,261,760),8573=>array(44,-14,463,533),8574=>array(44,-14,550,760),8575=>array(32,0,829,533),8576=>array(49,0,1034,729),8577=>array(49,0,670,729),8578=>array(49,0,1034,729),8579=>array(50,-14,635,742),8580=>array(44,-14,463,533),8581=>array(50,-208,635,742),8585=>array(22,-14,826,742),8592=>array(33,119,703,527),8593=>array(193,0,561,744),8594=>array(51,119,721,527),8595=>array(193,-20,561,724),8596=>array(33,119,721,527),8597=>array(193,-20,561,744),8598=>array(132,40,633,595),8599=>array(121,39,622,595),8600=>array(121,52,622,607),8601=>array(132,52,633,607),8602=>array(33,116,703,531),8603=>array(51,116,721,531),8604=>array(50,159,720,453),8605=>array(34,159,704,453),8606=>array(33,119,703,527),8607=>array(193,0,561,744),8608=>array(51,119,721,527),8609=>array(193,-20,561,724),8610=>array(33,119,706,527),8611=>array(48,119,721,527),8612=>array(33,119,703,527),8613=>array(193,0,561,744),8614=>array(51,119,721,527),8615=>array(193,-20,561,724),8616=>array(193,0,561,744),8617=>array(33,119,703,548),8618=>array(51,119,721,548),8619=>array(33,119,703,548),8620=>array(51,119,721,548),8621=>array(33,119,721,527),8622=>array(33,116,721,531),8623=>array(154,-13,620,730),8624=>array(209,0,534,744),8625=>array(220,0,545,744),8626=>array(209,-20,534,724),8627=>array(220,-20,545,724),8628=>array(117,102,655,609),8629=>array(143,53,600,650),8630=>array(40,145,692,540),8631=>array(62,145,715,540),8632=>array(119,40,635,717),8633=>array(51,-52,703,698),8634=>array(83,71,679,604),8635=>array(75,71,671,604),8636=>array(31,284,703,527),8637=>array(31,119,703,363),8638=>array(341,0,561,747),8639=>array(193,0,413,747),8640=>array(51,284,724,527),8641=>array(51,119,724,363),8642=>array(341,-23,561,724),8643=>array(193,-23,413,724),8644=>array(33,-52,721,698),8645=>array(40,-20,715,744),8646=>array(33,-52,721,698),8647=>array(33,-101,703,747),8648=>array(-4,0,759,744),8649=>array(51,-101,721,747),8650=>array(-4,-20,759,724),8651=>array(31,21,724,625),8652=>array(31,21,724,625),8653=>array(33,83,703,563),8654=>array(33,83,721,563),8655=>array(51,83,721,563),8656=>array(33,119,703,527),8657=>array(193,0,561,744),8658=>array(51,119,721,527),8659=>array(193,-20,561,724),8660=>array(33,119,721,527),8661=>array(193,-20,561,744),8662=>array(132,-21,687,595),8663=>array(67,-21,622,595),8664=>array(67,52,622,667),8665=>array(132,52,687,667),8666=>array(33,70,703,576),8667=>array(51,70,721,576),8668=>array(33,119,703,527),8669=>array(51,119,721,527),8670=>array(193,0,561,744),8671=>array(193,-20,561,724),8672=>array(33,119,703,527),8673=>array(193,0,561,744),8674=>array(51,119,721,527),8675=>array(193,-20,561,724),8676=>array(51,119,703,527),8677=>array(51,119,703,527),8678=>array(33,119,703,527),8679=>array(193,0,561,744),8680=>array(51,119,721,527),8681=>array(193,-20,561,724),8682=>array(193,0,561,744),8683=>array(172,0,582,744),8684=>array(172,0,582,744),8685=>array(172,0,582,744),8686=>array(193,0,561,744),8687=>array(172,0,582,744),8688=>array(51,96,721,550),8689=>array(73,0,690,689),8690=>array(64,0,681,689),8691=>array(193,-20,561,744),8692=>array(51,119,721,527),8693=>array(40,-20,715,744),8694=>array(51,-140,721,786),8695=>array(33,119,703,527),8696=>array(51,119,721,527),8697=>array(33,119,721,527),8698=>array(33,119,703,527),8699=>array(51,119,721,527),8700=>array(33,119,721,527),8701=>array(33,119,703,527),8702=>array(51,119,721,527),8703=>array(33,119,721,527),8704=>array(4,0,540,729),8706=>array(45,-12,422,647),8707=>array(54,0,418,729),8708=>array(54,-116,418,845),8710=>array(22,0,601,729),8711=>array(22,0,601,729),8712=>array(95,0,571,627),8713=>array(95,-132,571,759),8715=>array(95,0,571,627),8716=>array(95,-132,571,759),8719=>array(23,-192,692,719),8720=>array(23,-192,692,719),8721=>array(7,-192,631,719),8722=>array(95,274,659,353),8723=>array(95,0,659,627),8724=>array(95,0,659,659),8725=>array(0,-93,303,729),8727=>array(95,85,517,541),8728=>array(95,175,346,454),8729=>array(95,175,346,454),8730=>array(26,-20,574,811),8731=>array(26,-20,574,938),8732=>array(26,-20,574,929),8733=>array(97,108,512,491),8734=>array(97,108,654,491),8735=>array(124,99,630,661),8736=>array(124,99,630,661),8739=>array(95,-98,167,827),8740=>array(78,-98,353,827),8741=>array(95,-98,321,827),8742=>array(78,-98,493,827),8743=>array(116,0,543,584),8744=>array(116,0,543,584),8745=>array(95,0,659,627),8746=>array(95,-12,659,615),8747=>array(21,-181,448,757),8748=>array(21,-181,745,757),8749=>array(21,-181,1042,757),8760=>array(95,274,659,559),8761=>array(95,68,659,559),8762=>array(95,68,659,559),8763=>array(95,68,659,559),8764=>array(95,233,659,394),8765=>array(95,233,659,394),8770=>array(95,138,659,452),8771=>array(95,175,659,489),8776=>array(95,138,659,489),8784=>array(95,175,659,658),8785=>array(95,-31,659,658),8786=>array(95,-31,659,658),8787=>array(95,-31,659,658),8788=>array(95,149,835,478),8789=>array(95,149,835,478),8800=>array(95,19,659,608),8801=>array(95,93,659,534),8804=>array(95,0,659,582),8805=>array(95,0,659,582),8834=>array(95,0,659,627),8835=>array(95,0,659,627),8836=>array(95,-132,659,759),8837=>array(95,-132,659,759),8838=>array(95,-73,659,700),8839=>array(95,-73,659,700),8844=>array(95,-12,659,615),8845=>array(95,-12,659,615),8846=>array(95,-12,659,615),8847=>array(95,0,667,627),8848=>array(95,0,667,627),8849=>array(95,-73,667,700),8850=>array(95,-73,667,700),8851=>array(95,0,659,635),8852=>array(95,0,659,635),8853=>array(95,0,659,627),8854=>array(95,0,659,627),8855=>array(95,0,659,627),8856=>array(95,0,659,627),8857=>array(95,0,659,627),8858=>array(95,0,659,627),8859=>array(95,0,659,627),8860=>array(95,0,659,627),8861=>array(95,0,659,627),8862=>array(95,0,659,627),8863=>array(95,0,659,627),8864=>array(95,0,659,627),8865=>array(95,0,659,627),8866=>array(95,0,679,729),8867=>array(95,0,679,729),8868=>array(95,0,751,688),8869=>array(95,0,751,688),8870=>array(95,0,415,729),8871=>array(95,0,415,729),8872=>array(95,0,679,729),8873=>array(95,0,679,729),8874=>array(95,0,679,729),8875=>array(95,0,833,729),8876=>array(95,-115,679,844),8877=>array(95,-115,679,844),8878=>array(95,-115,679,844),8879=>array(95,-115,833,844),8901=>array(95,282,213,412),8962=>array(64,0,624,596),8968=>array(77,-132,282,760),8969=>array(69,-132,274,760),8970=>array(77,-132,282,760),8971=>array(69,-132,274,760),8976=>array(95,140,659,421),8977=>array(2,126,459,634),8984=>array(108,0,792,759),8985=>array(95,140,659,421),8992=>array(189,-250,448,928),8993=>array(18,-237,277,942),8997=>array(76,0,824,723),9000=>array(53,0,1247,729),9085=>array(11,-228,816,101),9115=>array(77,-252,373,946),9116=>array(77,-252,163,942),9117=>array(77,-240,373,942),9118=>array(77,-252,373,946),9119=>array(287,-252,373,942),9120=>array(77,-240,373,942),9121=>array(77,-252,373,928),9122=>array(77,-252,163,942),9123=>array(77,-240,373,942),9124=>array(77,-252,373,928),9125=>array(287,-252,373,935),9126=>array(77,-240,373,935),9127=>array(296,-261,602,928),9128=>array(74,-252,378,940),9129=>array(296,-240,602,940),9130=>array(296,-256,378,943),9131=>array(74,-261,378,928),9132=>array(296,-252,602,940),9133=>array(74,-240,378,940),9134=>array(189,-250,277,942),9167=>array(82,0,769,596),9251=>array(64,-228,624,101),9472=>array(-9,242,551,326),9473=>array(-9,200,551,368),9474=>array(235,-302,306,973),9475=>array(200,-302,341,973),9476=>array(-9,242,551,326),9477=>array(-9,200,551,368),9478=>array(235,-302,306,973),9479=>array(200,-302,341,973),9480=>array(-9,242,551,326),9481=>array(-9,200,551,368),9482=>array(235,-302,306,973),9483=>array(200,-302,341,973),9484=>array(235,-302,551,326),9485=>array(235,-302,551,368),9486=>array(200,-302,551,326),9487=>array(200,-302,551,368),9488=>array(-9,-302,306,326),9489=>array(-9,-302,306,368),9490=>array(-9,-302,341,326),9491=>array(-9,-302,341,368),9492=>array(235,242,551,973),9493=>array(235,200,551,973),9494=>array(200,242,551,973),9495=>array(200,200,551,973),9496=>array(-9,242,306,973),9497=>array(-9,200,306,973),9498=>array(-9,242,341,973),9499=>array(-9,200,341,973),9500=>array(235,-302,551,973),9501=>array(235,-302,551,973),9502=>array(200,-302,551,973),9503=>array(200,-302,551,973),9504=>array(200,-302,551,973),9505=>array(200,-302,551,973),9506=>array(200,-302,551,973),9507=>array(200,-302,551,973),9508=>array(-9,-302,306,973),9509=>array(-9,-302,306,973),9510=>array(-9,-302,341,973),9511=>array(-9,-302,341,973),9512=>array(-9,-302,341,973),9513=>array(-9,-302,341,973),9514=>array(-9,-302,341,973),9515=>array(-9,-302,341,973),9516=>array(-9,-302,551,326),9517=>array(-9,-302,551,368),9518=>array(-9,-302,551,368),9519=>array(-9,-302,551,368),9520=>array(-9,-302,551,326),9521=>array(-9,-302,551,368),9522=>array(-9,-302,551,368),9523=>array(-9,-302,551,368),9524=>array(-9,242,551,973),9525=>array(-9,200,551,973),9526=>array(-9,200,551,973),9527=>array(-9,200,551,973),9528=>array(-9,242,551,973),9529=>array(-9,200,551,973),9530=>array(-9,200,551,973),9531=>array(-9,200,551,973),9532=>array(-9,-302,551,973),9533=>array(-9,-302,551,973),9534=>array(-9,-302,551,973),9535=>array(-9,-302,551,973),9536=>array(-9,-302,551,973),9537=>array(-9,-302,551,973),9538=>array(-9,-302,551,973),9539=>array(-9,-302,551,973),9540=>array(-9,-302,551,973),9541=>array(-9,-302,551,973),9542=>array(-9,-302,551,973),9543=>array(-9,-302,551,973),9544=>array(-9,-302,551,973),9545=>array(-9,-302,551,973),9546=>array(-9,-302,551,973),9547=>array(-9,-302,551,973),9548=>array(-9,242,551,326),9549=>array(-9,200,551,368),9550=>array(235,-302,306,973),9551=>array(200,-302,341,973),9552=>array(-9,158,551,410),9553=>array(165,-302,376,973),9554=>array(235,-302,551,410),9555=>array(165,-302,551,326),9556=>array(165,-302,551,410),9557=>array(-9,-302,306,410),9558=>array(-9,-302,376,326),9559=>array(-9,-302,376,410),9560=>array(235,158,551,973),9561=>array(165,242,551,973),9562=>array(165,158,551,973),9563=>array(-9,158,306,973),9564=>array(-9,242,376,973),9565=>array(-9,158,376,973),9566=>array(235,-302,551,973),9567=>array(165,-302,551,973),9568=>array(165,-302,551,973),9569=>array(-9,-302,306,973),9570=>array(-9,-302,376,973),9571=>array(-9,-302,376,973),9572=>array(-9,-302,551,410),9573=>array(-9,-302,551,326),9574=>array(-9,-302,551,410),9575=>array(-9,158,551,973),9576=>array(-9,242,551,973),9577=>array(-9,158,551,973),9578=>array(-9,-302,551,973),9579=>array(-9,-302,551,973),9580=>array(-9,-302,551,973),9581=>array(235,-302,551,326),9582=>array(-9,-302,306,326),9583=>array(-9,242,306,973),9584=>array(235,242,551,973),9585=>array(-48,-302,590,973),9586=>array(-48,-302,590,973),9587=>array(-48,-302,590,973),9588=>array(-9,242,280,326),9589=>array(235,284,306,973),9590=>array(279,242,551,326),9591=>array(235,-302,306,284),9592=>array(-9,200,280,368),9593=>array(200,284,341,973),9594=>array(279,200,551,368),9595=>array(200,-302,341,284),9596=>array(-9,200,551,368),9597=>array(200,-302,341,973),9598=>array(-9,200,551,368),9599=>array(200,-302,341,973),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,701,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-124,769,643),9633=>array(82,-124,769,643),9634=>array(82,-124,769,643),9635=>array(82,-124,769,643),9636=>array(82,-124,769,643),9637=>array(82,-124,769,643),9638=>array(82,-124,769,643),9639=>array(82,-124,769,643),9640=>array(82,-124,769,643),9641=>array(82,-124,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-124,690,643),9651=>array(2,-124,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-124,690,643),9655=>array(2,-124,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-124,690,643),9661=>array(2,-124,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-124,690,643),9665=>array(2,-124,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-124,690,643),9671=>array(2,-124,690,643),9672=>array(2,-124,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,630,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(49,260,736,645),9697=>array(49,-125,736,260),9698=>array(2,-124,690,643),9699=>array(2,-124,690,643),9700=>array(2,-124,690,643),9701=>array(2,-124,690,643),9702=>array(135,227,396,516),9703=>array(82,-124,769,643),9704=>array(82,-124,769,643),9705=>array(82,-124,769,643),9706=>array(82,-124,769,643),9707=>array(82,-124,769,643),9708=>array(2,-124,690,643),9709=>array(2,-124,690,643),9710=>array(2,-124,690,643),9711=>array(49,-250,958,770),9712=>array(82,-124,769,643),9713=>array(82,-124,769,643),9714=>array(82,-124,769,643),9715=>array(82,-124,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-124,690,643),9721=>array(2,-124,690,643),9722=>array(2,-124,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-124,690,643),9728=>array(75,0,731,729),9784=>array(71,3,735,721),9785=>array(75,0,732,730),9786=>array(75,0,732,730),9787=>array(75,0,732,730),9788=>array(75,0,732,730),9791=>array(77,-102,476,732),9792=>array(77,-125,581,731),9793=>array(77,-125,581,731),9794=>array(77,-5,748,729),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),10145=>array(51,119,721,527),10181=>array(48,-163,316,769),10182=>array(48,-163,316,769),10208=>array(2,-233,442,807),10216=>array(80,-132,279,759),10217=>array(72,-132,271,759),10224=>array(62,0,693,744),10225=>array(62,-20,693,724),10226=>array(44,53,697,613),10227=>array(57,53,710,613),10228=>array(51,10,896,637),10229=>array(33,119,1239,527),10230=>array(51,119,1257,527),10231=>array(33,119,1257,527),10232=>array(33,119,1239,527),10233=>array(51,119,1257,527),10234=>array(33,119,1257,527),10235=>array(33,119,1239,527),10236=>array(51,119,1257,527),10237=>array(33,119,1239,527),10238=>array(51,119,1257,527),10239=>array(51,119,1257,527),10241=>array(125,627,271,789),10242=>array(125,351,271,512),10243=>array(125,351,271,789),10244=>array(125,74,271,236),10245=>array(125,74,271,789),10246=>array(125,74,271,512),10247=>array(125,74,271,789),10248=>array(389,627,534,789),10249=>array(125,627,534,789),10250=>array(125,351,534,789),10251=>array(125,351,534,789),10252=>array(125,74,534,789),10253=>array(125,74,534,789),10254=>array(125,74,534,789),10255=>array(125,74,534,789),10256=>array(389,351,534,512),10257=>array(125,351,534,789),10258=>array(125,351,534,512),10259=>array(125,351,534,789),10260=>array(125,74,534,512),10261=>array(125,74,534,789),10262=>array(125,74,534,512),10263=>array(125,74,534,789),10264=>array(389,351,534,789),10265=>array(125,351,534,789),10266=>array(125,351,534,789),10267=>array(125,351,534,789),10268=>array(125,74,534,789),10269=>array(125,74,534,789),10270=>array(125,74,534,789),10271=>array(125,74,534,789),10272=>array(389,74,534,236),10273=>array(125,74,534,789),10274=>array(125,74,534,512),10275=>array(125,74,534,789),10276=>array(125,74,534,236),10277=>array(125,74,534,789),10278=>array(125,74,534,512),10279=>array(125,74,534,789),10280=>array(389,74,534,789),10281=>array(125,74,534,789),10282=>array(125,74,534,789),10283=>array(125,74,534,789),10284=>array(125,74,534,789),10285=>array(125,74,534,789),10286=>array(125,74,534,789),10287=>array(125,74,534,789),10288=>array(389,74,534,512),10289=>array(125,74,534,789),10290=>array(125,74,534,512),10291=>array(125,74,534,789),10292=>array(125,74,534,512),10293=>array(125,74,534,789),10294=>array(125,74,534,512),10295=>array(125,74,534,789),10296=>array(389,74,534,789),10297=>array(125,74,534,789),10298=>array(125,74,534,789),10299=>array(125,74,534,789),10300=>array(125,74,534,789),10301=>array(125,74,534,789),10302=>array(125,74,534,789),10303=>array(125,74,534,789),10304=>array(125,-203,271,-41),10305=>array(125,-203,271,789),10306=>array(125,-203,271,512),10307=>array(125,-203,271,789),10308=>array(125,-203,271,236),10309=>array(125,-203,271,789),10310=>array(125,-203,271,512),10311=>array(125,-203,271,789),10312=>array(125,-203,534,789),10313=>array(125,-203,534,789),10314=>array(125,-203,534,789),10315=>array(125,-203,534,789),10316=>array(125,-203,534,789),10317=>array(125,-203,534,789),10318=>array(125,-203,534,789),10319=>array(125,-203,534,789),10320=>array(125,-203,534,512),10321=>array(125,-203,534,789),10322=>array(125,-203,534,512),10323=>array(125,-203,534,789),10324=>array(125,-203,534,512),10325=>array(125,-203,534,789),10326=>array(125,-203,534,512),10327=>array(125,-203,534,789),10328=>array(125,-203,534,789),10329=>array(125,-203,534,789),10330=>array(125,-203,534,789),10331=>array(125,-203,534,789),10332=>array(125,-203,534,789),10333=>array(125,-203,534,789),10334=>array(125,-203,534,789),10335=>array(125,-203,534,789),10336=>array(125,-203,534,236),10337=>array(125,-203,534,789),10338=>array(125,-203,534,512),10339=>array(125,-203,534,789),10340=>array(125,-203,534,236),10341=>array(125,-203,534,789),10342=>array(125,-203,534,512),10343=>array(125,-203,534,789),10344=>array(125,-203,534,789),10345=>array(125,-203,534,789),10346=>array(125,-203,534,789),10347=>array(125,-203,534,789),10348=>array(125,-203,534,789),10349=>array(125,-203,534,789),10350=>array(125,-203,534,789),10351=>array(125,-203,534,789),10352=>array(125,-203,534,512),10353=>array(125,-203,534,789),10354=>array(125,-203,534,512),10355=>array(125,-203,534,789),10356=>array(125,-203,534,512),10357=>array(125,-203,534,789),10358=>array(125,-203,534,512),10359=>array(125,-203,534,789),10360=>array(125,-203,534,789),10361=>array(125,-203,534,789),10362=>array(125,-203,534,789),10363=>array(125,-203,534,789),10364=>array(125,-203,534,789),10365=>array(125,-203,534,789),10366=>array(125,-203,534,789),10367=>array(125,-203,534,789),10368=>array(389,-203,534,-41),10369=>array(125,-203,534,789),10370=>array(125,-203,534,512),10371=>array(125,-203,534,789),10372=>array(125,-203,534,236),10373=>array(125,-203,534,789),10374=>array(125,-203,534,512),10375=>array(125,-203,534,789),10376=>array(389,-203,534,789),10377=>array(125,-203,534,789),10378=>array(125,-203,534,789),10379=>array(125,-203,534,789),10380=>array(125,-203,534,789),10381=>array(125,-203,534,789),10382=>array(125,-203,534,789),10383=>array(125,-203,534,789),10384=>array(389,-203,534,512),10385=>array(125,-203,534,789),10386=>array(125,-203,534,512),10387=>array(125,-203,534,789),10388=>array(125,-203,534,512),10389=>array(125,-203,534,789),10390=>array(125,-203,534,512),10391=>array(125,-203,534,789),10392=>array(389,-203,534,789),10393=>array(125,-203,534,789),10394=>array(125,-203,534,789),10395=>array(125,-203,534,789),10396=>array(125,-203,534,789),10397=>array(125,-203,534,789),10398=>array(125,-203,534,789),10399=>array(125,-203,534,789),10400=>array(389,-203,534,236),10401=>array(125,-203,534,789),10402=>array(125,-203,534,512),10403=>array(125,-203,534,789),10404=>array(125,-203,534,236),10405=>array(125,-203,534,789),10406=>array(125,-203,534,512),10407=>array(125,-203,534,789),10408=>array(389,-203,534,789),10409=>array(125,-203,534,789),10410=>array(125,-203,534,789),10411=>array(125,-203,534,789),10412=>array(125,-203,534,789),10413=>array(125,-203,534,789),10414=>array(125,-203,534,789),10415=>array(125,-203,534,789),10416=>array(389,-203,534,512),10417=>array(125,-203,534,789),10418=>array(125,-203,534,512),10419=>array(125,-203,534,789),10420=>array(125,-203,534,512),10421=>array(125,-203,534,789),10422=>array(125,-203,534,512),10423=>array(125,-203,534,789),10424=>array(389,-203,534,789),10425=>array(125,-203,534,789),10426=>array(125,-203,534,789),10427=>array(125,-203,534,789),10428=>array(125,-203,534,789),10429=>array(125,-203,534,789),10430=>array(125,-203,534,789),10431=>array(125,-203,534,789),10432=>array(125,-203,534,-41),10433=>array(125,-203,534,789),10434=>array(125,-203,534,512),10435=>array(125,-203,534,789),10436=>array(125,-203,534,236),10437=>array(125,-203,534,789),10438=>array(125,-203,534,512),10439=>array(125,-203,534,789),10440=>array(125,-203,534,789),10441=>array(125,-203,534,789),10442=>array(125,-203,534,789),10443=>array(125,-203,534,789),10444=>array(125,-203,534,789),10445=>array(125,-203,534,789),10446=>array(125,-203,534,789),10447=>array(125,-203,534,789),10448=>array(125,-203,534,512),10449=>array(125,-203,534,789),10450=>array(125,-203,534,512),10451=>array(125,-203,534,789),10452=>array(125,-203,534,512),10453=>array(125,-203,534,789),10454=>array(125,-203,534,512),10455=>array(125,-203,534,789),10456=>array(125,-203,534,789),10457=>array(125,-203,534,789),10458=>array(125,-203,534,789),10459=>array(125,-203,534,789),10460=>array(125,-203,534,789),10461=>array(125,-203,534,789),10462=>array(125,-203,534,789),10463=>array(125,-203,534,789),10464=>array(125,-203,534,236),10465=>array(125,-203,534,789),10466=>array(125,-203,534,512),10467=>array(125,-203,534,789),10468=>array(125,-203,534,236),10469=>array(125,-203,534,789),10470=>array(125,-203,534,512),10471=>array(125,-203,534,789),10472=>array(125,-203,534,789),10473=>array(125,-203,534,789),10474=>array(125,-203,534,789),10475=>array(125,-203,534,789),10476=>array(125,-203,534,789),10477=>array(125,-203,534,789),10478=>array(125,-203,534,789),10479=>array(125,-203,534,789),10480=>array(125,-203,534,512),10481=>array(125,-203,534,789),10482=>array(125,-203,534,512),10483=>array(125,-203,534,789),10484=>array(125,-203,534,512),10485=>array(125,-203,534,789),10486=>array(125,-203,534,512),10487=>array(125,-203,534,789),10488=>array(125,-203,534,789),10489=>array(125,-203,534,789),10490=>array(125,-203,534,789),10491=>array(125,-203,534,789),10492=>array(125,-203,534,789),10493=>array(125,-203,534,789),10494=>array(125,-203,534,789),10495=>array(125,-203,534,789),10496=>array(51,119,721,527),10497=>array(51,119,721,527),10498=>array(33,119,703,527),10499=>array(51,119,721,527),10500=>array(33,119,721,527),10501=>array(51,119,721,527),10502=>array(33,119,703,527),10503=>array(51,119,721,527),10504=>array(193,-20,561,724),10505=>array(193,0,561,744),10506=>array(149,0,605,744),10507=>array(149,-20,605,724),10508=>array(33,119,703,527),10509=>array(51,119,721,527),10510=>array(33,119,703,527),10511=>array(51,119,721,527),10512=>array(48,119,721,527),10513=>array(48,119,721,527),10514=>array(193,0,561,724),10515=>array(193,0,561,724),10516=>array(48,119,721,527),10517=>array(48,119,721,527),10518=>array(48,119,721,527),10519=>array(48,119,721,527),10520=>array(48,119,721,527),10521=>array(51,119,706,527),10522=>array(48,119,703,527),10523=>array(51,119,706,527),10524=>array(48,119,703,527),10525=>array(33,119,703,527),10526=>array(51,119,721,527),10527=>array(33,119,703,527),10528=>array(51,119,721,527),10529=>array(132,51,623,595),10530=>array(132,51,622,595),10531=>array(132,-37,583,595),10532=>array(170,-38,622,595),10533=>array(170,52,622,684),10534=>array(132,52,584,684),10535=>array(122,40,633,595),10536=>array(122,40,622,607),10537=>array(122,52,633,607),10538=>array(132,40,633,607),10539=>array(122,40,633,607),10540=>array(122,40,633,607),10541=>array(122,40,622,607),10542=>array(122,40,622,607),10543=>array(122,40,633,607),10544=>array(122,40,633,607),10545=>array(122,40,633,595),10546=>array(122,40,633,595),10547=>array(33,119,721,527),10548=>array(132,98,636,610),10549=>array(132,90,637,602),10550=>array(143,70,604,629),10551=>array(150,70,611,629),10552=>array(263,-0,528,732),10553=>array(226,-0,491,732),10554=>array(50,197,710,491),10555=>array(45,156,706,450),10556=>array(44,82,704,491),10557=>array(50,0,710,491),10558=>array(130,30,611,609),10559=>array(144,30,624,609),10560=>array(125,53,629,778),10561=>array(125,53,629,778),10562=>array(33,-52,721,698),10563=>array(33,-52,721,698),10564=>array(33,-52,721,698),10565=>array(51,0,721,527),10566=>array(33,0,703,527),10567=>array(51,119,721,527),10568=>array(33,119,721,527),10569=>array(193,-10,561,744),10570=>array(31,119,724,527),10571=>array(31,119,724,527),10572=>array(193,-23,561,747),10573=>array(193,-23,561,747),10574=>array(31,284,724,527),10575=>array(341,-23,561,747),10576=>array(31,119,724,363),10577=>array(193,-23,413,747),10578=>array(51,131,703,527),10579=>array(51,131,703,527),10580=>array(204,0,561,724),10581=>array(204,0,561,724),10582=>array(51,119,703,515),10583=>array(51,119,703,515),10584=>array(193,0,550,724),10585=>array(193,0,550,724),10586=>array(31,131,703,527),10587=>array(51,131,724,527),10588=>array(204,0,561,747),10589=>array(204,-23,561,724),10590=>array(31,119,703,515),10591=>array(51,119,724,515),10592=>array(193,0,550,747),10593=>array(193,-23,550,724),10594=>array(31,21,703,625),10595=>array(105,0,649,747),10596=>array(51,21,724,625),10597=>array(105,-23,649,724),10598=>array(31,186,724,625),10599=>array(31,21,724,460),10600=>array(31,186,724,625),10601=>array(31,21,724,460),10602=>array(31,203,703,608),10603=>array(31,38,703,444),10604=>array(51,203,724,608),10605=>array(51,38,724,444),10606=>array(105,-23,649,747),10607=>array(105,-23,649,747),10608=>array(51,191,703,456),10609=>array(51,119,721,680),10610=>array(51,119,721,572),10611=>array(33,74,703,527),10612=>array(51,74,721,527),10613=>array(51,-71,721,527),10614=>array(33,-76,703,776),10615=>array(33,56,832,591),10616=>array(51,-76,721,776),10617=>array(51,-76,721,723),10618=>array(33,10,835,637),10619=>array(33,-76,703,723),10620=>array(152,21,614,625),10621=>array(141,21,602,625),10622=>array(105,67,649,580),10623=>array(105,59,649,571),10731=>array(2,-233,442,807),10764=>array(21,-181,1340,757),10765=>array(21,-181,448,757),10766=>array(21,-181,448,757),10799=>array(124,33,630,594),10858=>array(95,233,659,559),10859=>array(95,68,659,559),11008=>array(64,-28,621,591),11009=>array(133,-28,690,591),11010=>array(64,52,621,671),11011=>array(133,52,690,671),11012=>array(33,119,721,527),11013=>array(33,119,703,527),11014=>array(193,0,561,744),11015=>array(193,-20,561,724),11016=>array(64,-28,621,591),11017=>array(133,-28,690,591),11018=>array(64,52,621,671),11019=>array(133,52,690,671),11020=>array(33,119,721,527),11021=>array(193,-20,561,744),11022=>array(51,137,721,498),11023=>array(51,149,721,510),11024=>array(33,137,703,498),11025=>array(33,149,703,510),11026=>array(82,-124,769,643),11027=>array(82,-124,769,643),11028=>array(82,-124,769,643),11029=>array(82,-124,769,643),11030=>array(2,-124,690,643),11031=>array(2,-124,690,643),11032=>array(2,-124,690,643),11033=>array(2,-124,690,643),11034=>array(82,-124,769,643),11360=>array(45,0,576,729),11361=>array(16,0,272,760),11363=>array(45,0,574,729),11364=>array(49,-208,699,729),11367=>array(49,-157,735,729),11368=>array(32,-138,555,760),11369=>array(49,-157,686,729),11370=>array(26,-138,552,760),11371=>array(40,-157,590,729),11372=>array(36,-138,441,519),11373=>array(50,-14,665,742),11374=>array(44,-208,876,729),11375=>array(-5,0,659,729),11376=>array(50,-14,665,742),11377=>array(-3,0,597,530),11378=>array(4,0,1017,729),11379=>array(14,0,846,530),11381=>array(49,0,617,729),11382=>array(31,0,453,519),11383=>array(40,-15,591,521),11385=>array(32,-14,431,760),11386=>array(44,-14,497,533),11387=>array(51,0,472,519),11388=>array(20,-124,192,413),11389=>array(-6,326,418,734),11390=>array(75,-208,551,742),11391=>array(40,-208,625,729),11520=>array(53,-54,643,512),11521=>array(53,-221,519,512),11522=>array(8,-221,517,512),11523=>array(83,-1,532,760),11524=>array(49,-221,524,512),11525=>array(53,-220,813,512),11526=>array(53,0,628,760),11527=>array(53,0,812,511),11528=>array(62,0,503,512),11529=>array(53,-220,529,729),11530=>array(47,0,808,512),11531=>array(86,-1,545,760),11532=>array(53,0,529,760),11533=>array(53,-1,813,512),11534=>array(53,0,528,512),11535=>array(50,-221,727,760),11536=>array(53,0,813,760),11537=>array(53,0,528,760),11538=>array(53,-220,513,511),11539=>array(53,-224,811,636),11540=>array(76,-220,766,553),11541=>array(53,-221,725,760),11542=>array(53,0,527,512),11543=>array(53,-220,529,512),11544=>array(53,-221,528,512),11545=>array(74,-220,532,760),11546=>array(90,-220,566,512),11547=>array(77,0,547,760),11548=>array(91,-220,831,512),11549=>array(53,-220,561,512),11550=>array(81,-220,556,512),11551=>array(53,-221,714,515),11552=>array(57,0,817,512),11553=>array(53,-220,519,760),11554=>array(68,-2,503,578),11555=>array(53,-220,529,760),11556=>array(53,-220,622,512),11557=>array(86,-2,740,760),11800=>array(61,-13,439,743),11807=>array(95,68,659,394),11810=>array(77,403,282,760),11811=>array(69,403,274,760),11812=>array(77,-132,282,225),11813=>array(69,-132,274,225),11822=>array(61,-14,439,742),42564=>array(75,-14,551,742),42565=>array(50,-14,416,533),42566=>array(49,0,306,729),42567=>array(32,0,269,519),42576=>array(31,0,945,729),42577=>array(26,0,767,519),42580=>array(59,-14,1024,742),42581=>array(41,-14,758,533),42582=>array(49,0,1035,729),42583=>array(26,-14,784,533),42760=>array(94,0,351,668),42761=>array(94,0,351,668),42762=>array(94,0,351,668),42763=>array(94,0,351,668),42764=>array(94,0,351,668),42765=>array(94,0,351,668),42766=>array(94,0,351,668),42767=>array(94,0,351,668),42768=>array(94,0,351,668),42769=>array(94,0,351,668),42770=>array(94,0,351,668),42771=>array(94,0,351,668),42772=>array(94,0,351,668),42773=>array(94,0,351,668),42774=>array(94,0,351,668),42779=>array(50,326,282,743),42780=>array(50,315,282,731),42781=>array(77,318,151,734),42782=>array(77,326,151,742),42783=>array(77,0,151,416),42790=>array(49,-208,735,729),42791=>array(32,-222,483,760),42792=>array(9,-224,733,729),42793=>array(26,-224,653,680),42794=>array(39,-14,484,742),42795=>array(44,-14,454,742),42796=>array(27,-14,472,729),42797=>array(27,-222,457,519),42798=>array(27,-92,544,729),42799=>array(27,-242,527,519),42800=>array(26,0,441,519),42801=>array(50,-14,416,533),42802=>array(-5,0,1084,729),42803=>array(44,-14,825,533),42804=>array(-5,-14,1054,742),42805=>array(44,-14,810,533),42806=>array(-16,-14,994,729),42807=>array(44,-14,808,533),42808=>array(-5,0,885,729),42809=>array(44,-14,703,533),42810=>array(-5,0,885,729),42811=>array(44,-14,703,533),42812=>array(-5,-208,879,729),42813=>array(44,-222,739,533),42814=>array(50,-14,635,742),42815=>array(44,-14,463,533),42816=>array(44,0,686,729),42817=>array(22,0,552,760),42822=>array(49,0,687,729),42823=>array(26,0,364,760),42826=>array(-4,-14,843,742),42827=>array(-4,-14,645,533),42830=>array(50,-14,1225,742),42831=>array(44,-14,854,533),42856=>array(49,-208,587,729),42857=>array(26,-208,500,519),42875=>array(48,-208,513,743),42876=>array(32,-208,431,533),42880=>array(21,0,548,729),42881=>array(26,-240,261,519),42882=>array(48,-208,712,743),42883=>array(32,-208,561,533),42884=>array(48,-208,513,743),42885=>array(32,-208,431,533),42886=>array(28,-14,644,729),42887=>array(22,-14,472,519),42891=>array(124,205,238,729),42892=>array(88,458,158,729),42893=>array(9,0,650,729),42896=>array(44,-157,748,729),42897=>array(32,-138,556,533),42922=>array(-84,0,735,729),43002=>array(32,0,829,519),43003=>array(38,0,575,729),43004=>array(32,0,556,729),43005=>array(44,0,876,729),43006=>array(49,0,306,928),43007=>array(-5,0,1078,729),62464=>array(47,-20,541,848),62465=>array(53,-20,546,847),62466=>array(48,-20,594,846),62467=>array(56,-19,797,847),62468=>array(47,-20,531,847),62469=>array(47,-20,541,848),62470=>array(23,-20,599,847),62471=>array(56,-19,831,846),62472=>array(53,-20,546,847),62473=>array(53,-20,546,847),62474=>array(60,-20,1072,847),62475=>array(53,-20,546,847),62476=>array(67,-20,562,848),62477=>array(57,-125,801,847),62478=>array(53,-20,546,847),62479=>array(53,-20,546,848),62480=>array(57,-20,842,837),62481=>array(4,-20,617,847),62482=>array(54,-20,665,847),62483=>array(28,-20,604,847),62484=>array(56,-20,794,847),62485=>array(53,-20,545,834),62486=>array(56,-20,787,846),62487=>array(53,-20,545,846),62488=>array(22,-20,551,847),62489=>array(67,-20,562,847),62490=>array(54,-20,602,841),62491=>array(53,-20,546,847),62492=>array(68,-20,597,847),62493=>array(53,-20,546,852),62494=>array(3,-20,602,847),62495=>array(51,-29,746,845),62496=>array(53,-20,545,851),62497=>array(53,-20,582,847),62498=>array(53,-60,546,847),62499=>array(53,-20,546,859),62500=>array(53,-20,546,847),62501=>array(53,-20,597,847),62502=>array(56,-19,809,847),62504=>array(74,-220,736,760),63173=>array(44,-14,497,747),63185=>array(55,625,396,775),63188=>array(87,670,363,800),64256=>array(32,-0,694,760),64257=>array(32,0,580,760),64258=>array(32,0,574,760),64259=>array(31,0,905,760),64260=>array(31,0,896,760),64261=>array(35,-15,660,760),64262=>array(44,-14,795,737),65533=>array(13,-84,910,912),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>286,33=>361,34=>414,35=>754,36=>572,37=>855,38=>801,39=>247,40=>351,41=>351,42=>450,43=>754,44=>286,45=>304,46=>286,47=>303,48=>572,49=>572,50=>572,51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754,61=>754,62=>754,63=>482,64=>900,65=>650,66=>661,67=>688,68=>721,69=>657,70=>624,71=>719,72=>785,73=>355,74=>360,75=>672,76=>598,77=>921,78=>787,79=>738,80=>605,81=>738,82=>677,83=>616,84=>600,85=>758,86=>650,87=>925,88=>641,89=>594,90=>625,91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>536,98=>576,99=>504,100=>576,101=>532,102=>333,103=>576,104=>580,105=>288,106=>279,107=>545,108=>288,109=>853,110=>580,111=>542,112=>576,113=>576,114=>430,115=>461,116=>361,117=>580,118=>508,119=>770,120=>507,121=>508,122=>474,123=>572,124=>303,125=>572,126=>754,160=>286,161=>361,162=>572,163=>572,164=>572,165=>572,166=>303,167=>450,168=>450,169=>900,170=>427,171=>550,172=>754,173=>304,174=>900,175=>450,176=>450,177=>754,178=>360,179=>360,180=>450,181=>584,182=>572,183=>286,184=>450,185=>360,186=>423,187=>550,188=>872,189=>872,190=>872,191=>482,192=>650,193=>650,194=>650,195=>650,196=>650,197=>650,198=>901,199=>688,200=>657,201=>657,202=>657,203=>657,204=>355,205=>355,206=>355,207=>355,208=>726,209=>787,210=>738,211=>738,212=>738,213=>738,214=>738,215=>754,216=>738,217=>758,218=>758,219=>758,220=>758,221=>594,222=>608,223=>601,224=>536,225=>536,226=>536,227=>536,228=>536,229=>536,230=>846,231=>504,232=>532,233=>532,234=>532,235=>532,236=>288,237=>288,238=>288,239=>288,240=>542,241=>580,242=>542,243=>542,244=>542,245=>542,246=>542,247=>754,248=>542,249=>580,250=>580,251=>580,252=>580,253=>508,254=>576,255=>508,256=>650,257=>536,258=>650,259=>536,260=>650,261=>536,262=>688,263=>504,264=>688,265=>504,266=>688,267=>504,268=>688,269=>504,270=>721,271=>576,272=>726,273=>576,274=>657,275=>532,276=>657,277=>532,278=>657,279=>532,280=>657,281=>532,282=>657,283=>532,284=>719,285=>576,286=>719,287=>576,288=>719,289=>576,290=>719,291=>576,292=>785,293=>580,294=>785,295=>580,296=>355,297=>288,298=>355,299=>288,300=>355,301=>288,302=>355,303=>288,304=>355,305=>288,306=>721,307=>479,308=>360,309=>279,310=>672,311=>545,312=>545,313=>598,314=>288,315=>598,316=>288,317=>598,318=>288,319=>598,320=>288,321=>602,322=>292,323=>787,324=>580,325=>787,326=>580,327=>787,328=>580,329=>779,330=>758,331=>580,332=>738,333=>542,334=>738,335=>542,336=>738,337=>542,338=>1023,339=>890,340=>677,341=>430,342=>677,343=>430,344=>677,345=>430,346=>616,347=>461,348=>616,349=>461,350=>616,351=>461,352=>616,353=>461,354=>600,355=>361,356=>600,357=>361,358=>600,359=>361,360=>758,361=>580,362=>758,363=>580,364=>758,365=>580,366=>758,367=>580,368=>758,369=>580,370=>758,371=>580,372=>925,373=>770,374=>594,375=>508,376=>594,377=>625,378=>474,379=>625,380=>474,381=>625,382=>474,383=>333,384=>576,385=>661,386=>661,387=>576,388=>661,389=>576,390=>688,391=>688,392=>504,393=>726,394=>721,395=>661,396=>576,397=>542,398=>657,399=>738,400=>561,401=>624,402=>333,403=>719,404=>641,405=>839,406=>355,407=>355,408=>672,409=>545,410=>288,411=>570,412=>853,413=>787,414=>580,415=>738,416=>738,417=>542,418=>936,419=>726,420=>605,421=>576,422=>677,423=>616,424=>461,425=>636,426=>292,427=>361,428=>600,429=>361,430=>600,431=>758,432=>580,433=>746,434=>684,435=>664,436=>596,437=>625,438=>474,439=>508,440=>508,441=>508,442=>508,443=>572,444=>618,445=>508,446=>482,447=>571,448=>265,449=>443,450=>413,451=>265,452=>1347,453=>1195,454=>1050,455=>958,456=>876,457=>567,458=>1148,459=>1066,460=>858,461=>650,462=>536,463=>355,464=>288,465=>738,466=>542,467=>758,468=>580,469=>758,470=>580,471=>758,472=>580,473=>758,474=>580,475=>758,476=>580,477=>532,478=>650,479=>536,480=>650,481=>536,482=>901,483=>846,484=>763,485=>576,486=>719,487=>576,488=>672,489=>545,490=>738,491=>542,492=>738,493=>542,494=>508,495=>508,496=>288,497=>1347,498=>1195,499=>1050,500=>719,501=>576,502=>1038,503=>636,504=>787,505=>580,506=>650,507=>536,508=>901,509=>846,510=>738,511=>542,512=>650,513=>536,514=>650,515=>536,516=>657,517=>532,518=>657,519=>532,520=>355,521=>288,522=>355,523=>288,524=>738,525=>542,526=>738,527=>542,528=>677,529=>430,530=>677,531=>430,532=>758,533=>580,534=>758,535=>580,536=>616,537=>461,538=>600,539=>361,540=>564,541=>469,542=>785,543=>580,544=>758,545=>732,546=>514,547=>497,548=>625,549=>474,550=>650,551=>536,552=>657,553=>532,554=>738,555=>542,556=>738,557=>542,558=>738,559=>542,560=>738,561=>542,562=>594,563=>508,564=>450,565=>748,566=>444,567=>279,568=>864,569=>864,570=>650,571=>688,572=>504,573=>598,574=>600,575=>461,576=>474,577=>525,578=>417,579=>661,580=>758,581=>650,582=>657,583=>532,584=>360,585=>283,586=>704,587=>576,588=>677,589=>430,590=>594,591=>508,592=>536,593=>576,594=>576,595=>576,596=>504,597=>504,598=>582,599=>614,600=>532,601=>532,602=>759,603=>466,604=>458,605=>695,606=>552,607=>283,608=>615,609=>576,610=>489,611=>539,612=>507,613=>580,614=>580,615=>580,616=>288,617=>353,618=>288,619=>342,620=>409,621=>326,622=>633,623=>853,624=>853,625=>853,626=>579,627=>624,628=>581,629=>542,630=>711,631=>583,632=>542,633=>451,634=>451,635=>496,636=>430,637=>430,638=>407,639=>407,640=>534,641=>534,642=>461,643=>244,644=>333,645=>438,646=>292,647=>361,648=>361,649=>580,650=>558,651=>547,652=>508,653=>770,654=>508,655=>589,656=>537,657=>504,658=>508,659=>504,660=>482,661=>482,662=>482,663=>461,664=>738,665=>506,666=>552,667=>588,668=>600,669=>329,670=>545,671=>488,672=>615,673=>482,674=>482,675=>896,676=>930,677=>898,678=>741,679=>538,680=>743,681=>804,682=>652,683=>608,684=>538,685=>398,686=>703,687=>690,688=>389,689=>387,690=>237,691=>312,692=>312,693=>387,694=>352,695=>527,696=>381,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>252,705=>252,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>247,713=>450,714=>450,715=>450,716=>247,717=>450,720=>303,721=>303,722=>276,723=>276,726=>295,727=>295,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>375,736=>339,737=>218,738=>303,739=>381,740=>252,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450,750=>435,751=>450,752=>450,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>666,881=>478,882=>600,883=>498,884=>250,885=>250,886=>787,887=>600,890=>450,891=>504,892=>504,893=>504,894=>303,900=>450,901=>450,902=>650,903=>286,904=>810,905=>935,906=>505,908=>751,910=>808,911=>767,912=>353,913=>650,914=>661,915=>624,916=>650,917=>657,918=>625,919=>785,920=>738,921=>355,922=>672,923=>650,924=>921,925=>787,926=>633,927=>738,928=>785,929=>605,931=>636,932=>600,933=>594,934=>738,935=>641,936=>789,937=>746,938=>355,939=>594,940=>607,941=>466,942=>539,943=>353,944=>547,945=>607,946=>520,947=>538,948=>542,949=>466,950=>488,951=>539,952=>542,953=>353,954=>563,955=>570,956=>584,957=>547,958=>496,959=>542,960=>591,961=>529,962=>504,963=>614,964=>498,965=>547,966=>630,967=>545,968=>706,969=>734,970=>353,971=>547,972=>542,973=>547,974=>734,975=>672,976=>524,977=>643,978=>618,979=>787,980=>618,981=>613,982=>734,983=>561,984=>738,985=>542,986=>688,987=>504,988=>624,989=>417,990=>531,991=>593,992=>704,993=>519,1008=>561,1009=>529,1010=>504,1011=>279,1012=>738,1013=>504,1014=>504,1015=>608,1016=>576,1017=>688,1018=>921,1019=>637,1020=>529,1021=>688,1022=>688,1023=>688,1024=>657,1025=>657,1026=>719,1027=>596,1028=>688,1029=>616,1030=>355,1031=>355,1032=>360,1033=>976,1034=>1006,1035=>785,1036=>696,1037=>785,1038=>650,1039=>785,1040=>681,1041=>661,1042=>661,1043=>596,1044=>731,1045=>657,1046=>1011,1047=>561,1048=>785,1049=>785,1050=>696,1051=>751,1052=>921,1053=>785,1054=>738,1055=>785,1056=>605,1057=>688,1058=>600,1059=>650,1060=>747,1061=>641,1062=>785,1063=>695,1064=>1027,1065=>1027,1066=>715,1067=>885,1068=>606,1069=>688,1070=>1074,1071=>727,1072=>536,1073=>542,1074=>506,1075=>471,1076=>554,1077=>532,1078=>828,1079=>491,1080=>600,1081=>600,1082=>563,1083=>571,1084=>700,1085=>600,1086=>542,1087=>600,1088=>576,1089=>504,1090=>498,1091=>529,1092=>704,1093=>507,1094=>579,1095=>595,1096=>836,1097=>836,1098=>572,1099=>716,1100=>490,1101=>504,1102=>783,1103=>567,1104=>532,1105=>532,1106=>561,1107=>471,1108=>504,1109=>461,1110=>288,1111=>288,1112=>279,1113=>759,1114=>774,1115=>580,1116=>563,1117=>600,1118=>529,1119=>590,1122=>686,1123=>542,1124=>1016,1125=>750,1130=>1011,1131=>828,1132=>1223,1133=>1001,1136=>849,1137=>812,1138=>738,1139=>497,1140=>773,1141=>610,1142=>773,1143=>610,1164=>636,1165=>490,1168=>604,1169=>476,1170=>596,1171=>471,1172=>655,1173=>552,1174=>1011,1175=>828,1176=>572,1177=>483,1178=>696,1179=>545,1182=>696,1183=>563,1184=>801,1185=>645,1186=>785,1187=>577,1188=>1025,1189=>767,1190=>1084,1191=>847,1194=>688,1195=>504,1196=>600,1197=>498,1198=>594,1199=>508,1200=>594,1201=>508,1202=>641,1203=>507,1204=>856,1205=>659,1206=>674,1207=>621,1210=>674,1211=>580,1216=>355,1217=>1011,1218=>828,1219=>672,1220=>545,1223=>785,1224=>600,1227=>674,1228=>600,1231=>288,1232=>681,1233=>536,1234=>681,1235=>536,1236=>901,1237=>846,1238=>657,1239=>532,1240=>738,1241=>532,1242=>738,1243=>532,1244=>1011,1245=>828,1246=>561,1247=>491,1248=>508,1249=>508,1250=>785,1251=>600,1252=>785,1253=>600,1254=>738,1255=>542,1256=>738,1257=>542,1258=>738,1259=>542,1260=>688,1261=>504,1262=>650,1263=>529,1264=>650,1265=>529,1266=>650,1267=>529,1268=>695,1269=>595,1270=>596,1271=>471,1272=>885,1273=>716,1296=>561,1297=>491,1298=>751,1299=>571,1300=>1078,1301=>827,1306=>738,1307=>576,1308=>925,1309=>770,1329=>729,1330=>729,1331=>743,1332=>762,1333=>725,1334=>743,1335=>685,1336=>729,1337=>871,1338=>734,1339=>695,1340=>614,1341=>987,1342=>760,1343=>723,1344=>647,1345=>729,1346=>750,1347=>759,1348=>808,1349=>687,1350=>714,1351=>678,1352=>719,1353=>717,1354=>787,1355=>747,1356=>795,1357=>719,1358=>721,1359=>658,1360=>697,1361=>674,1362=>570,1363=>760,1364=>759,1365=>751,1366=>738,1369=>276,1370=>237,1371=>207,1372=>352,1373=>328,1374=>347,1375=>450,1377=>854,1378=>556,1379=>625,1380=>625,1381=>565,1382=>619,1383=>458,1384=>572,1385=>711,1386=>604,1387=>571,1388=>274,1389=>875,1390=>553,1391=>565,1392=>572,1393=>567,1394=>572,1395=>588,1396=>580,1397=>278,1398=>572,1399=>415,1400=>584,1401=>329,1402=>846,1403=>505,1404=>591,1405=>580,1406=>567,1407=>836,1408=>580,1409=>578,1410=>435,1411=>836,1412=>572,1413=>548,1414=>728,1415=>709,1417=>306,1418=>300,4256=>650,4257=>765,4258=>745,4259=>773,4260=>659,4261=>883,4262=>824,4263=>991,4264=>510,4265=>675,4266=>866,4267=>847,4268=>668,4269=>967,4270=>807,4271=>746,4272=>936,4273=>660,4274=>602,4275=>914,4276=>843,4277=>917,4278=>658,4279=>659,4280=>659,4281=>660,4282=>791,4283=>843,4284=>642,4285=>679,4286=>660,4287=>862,4288=>900,4289=>632,4290=>777,4291=>660,4292=>753,4293=>855,4304=>486,4305=>514,4306=>530,4307=>750,4308=>505,4309=>501,4310=>556,4311=>774,4312=>503,4313=>491,4314=>959,4315=>527,4316=>527,4317=>743,4318=>513,4319=>522,4320=>741,4321=>546,4322=>673,4323=>628,4324=>733,4325=>526,4326=>772,4327=>511,4328=>534,4329=>527,4330=>607,4331=>528,4332=>523,4333=>518,4334=>550,4335=>615,4336=>514,4337=>542,4338=>514,4339=>514,4340=>513,4341=>584,4342=>797,4343=>563,4344=>523,4345=>557,4346=>514,4347=>393,4348=>318,7424=>508,7425=>697,7426=>846,7427=>506,7428=>504,7429=>527,7430=>527,7431=>498,7432=>458,7433=>288,7434=>448,7435=>563,7436=>488,7437=>700,7438=>600,7439=>542,7440=>504,7441=>582,7442=>582,7443=>582,7444=>890,7445=>461,7446=>542,7447=>542,7448=>498,7449=>534,7450=>534,7451=>498,7452=>526,7453=>597,7454=>831,7455=>589,7456=>508,7457=>770,7458=>474,7459=>474,7460=>478,7461=>668,7462=>471,7463=>508,7464=>591,7465=>498,7466=>632,7467=>571,7468=>409,7469=>567,7470=>417,7471=>417,7472=>454,7473=>413,7474=>413,7475=>453,7476=>494,7477=>224,7478=>227,7479=>423,7480=>376,7481=>580,7482=>496,7483=>496,7484=>464,7485=>332,7486=>381,7487=>426,7488=>378,7489=>478,7490=>583,7491=>347,7492=>347,7493=>360,7494=>556,7495=>360,7496=>360,7497=>348,7498=>348,7499=>306,7500=>306,7501=>360,7502=>157,7503=>328,7504=>552,7505=>359,7506=>347,7507=>312,7508=>347,7509=>347,7510=>360,7511=>222,7512=>359,7513=>376,7514=>552,7515=>335,7516=>421,7517=>327,7518=>338,7519=>341,7520=>396,7521=>343,7522=>181,7523=>312,7524=>359,7525=>335,7526=>327,7527=>338,7528=>333,7529=>396,7530=>343,7531=>876,7543=>576,7544=>494,7547=>288,7548=>353,7549=>576,7550=>526,7551=>558,7557=>288,7579=>360,7580=>312,7581=>312,7582=>347,7583=>306,7584=>199,7585=>206,7586=>360,7587=>359,7588=>210,7589=>219,7590=>210,7591=>210,7592=>207,7593=>158,7594=>157,7595=>330,7596=>552,7597=>552,7598=>366,7599=>364,7600=>359,7601=>347,7602=>347,7603=>295,7604=>190,7605=>222,7606=>359,7607=>350,7608=>331,7609=>338,7610=>335,7611=>297,7612=>297,7613=>297,7614=>327,7615=>347,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>650,7681=>536,7682=>661,7683=>576,7684=>661,7685=>576,7686=>661,7687=>576,7688=>688,7689=>504,7690=>721,7691=>576,7692=>721,7693=>576,7694=>721,7695=>576,7696=>721,7697=>576,7698=>721,7699=>576,7700=>657,7701=>532,7702=>657,7703=>532,7704=>657,7705=>532,7706=>657,7707=>532,7708=>657,7709=>532,7710=>624,7711=>333,7712=>719,7713=>576,7714=>785,7715=>580,7716=>785,7717=>580,7718=>785,7719=>580,7720=>785,7721=>580,7722=>785,7723=>580,7724=>355,7725=>288,7726=>355,7727=>288,7728=>672,7729=>545,7730=>672,7731=>545,7732=>672,7733=>545,7734=>598,7735=>288,7736=>598,7737=>288,7738=>598,7739=>288,7740=>598,7741=>288,7742=>921,7743=>853,7744=>921,7745=>853,7746=>921,7747=>853,7748=>787,7749=>580,7750=>787,7751=>580,7752=>787,7753=>580,7754=>787,7755=>580,7756=>738,7757=>542,7758=>738,7759=>542,7760=>738,7761=>542,7762=>738,7763=>542,7764=>605,7765=>576,7766=>605,7767=>576,7768=>677,7769=>430,7770=>677,7771=>430,7772=>677,7773=>430,7774=>677,7775=>430,7776=>616,7777=>461,7778=>616,7779=>461,7780=>616,7781=>461,7782=>616,7783=>469,7784=>616,7785=>461,7786=>600,7787=>361,7788=>600,7789=>361,7790=>600,7791=>361,7792=>600,7793=>361,7794=>758,7795=>580,7796=>758,7797=>580,7798=>758,7799=>580,7800=>758,7801=>580,7802=>758,7803=>580,7804=>650,7805=>508,7806=>650,7807=>508,7808=>925,7809=>770,7810=>925,7811=>770,7812=>925,7813=>770,7814=>925,7815=>770,7816=>925,7817=>770,7818=>641,7819=>507,7820=>641,7821=>507,7822=>594,7823=>508,7824=>625,7825=>474,7826=>625,7827=>474,7828=>625,7829=>474,7830=>580,7831=>361,7832=>770,7833=>508,7834=>813,7835=>333,7836=>333,7837=>333,7838=>746,7839=>542,7840=>650,7841=>536,7842=>650,7843=>536,7844=>650,7845=>551,7846=>650,7847=>551,7848=>650,7849=>551,7850=>650,7851=>551,7852=>650,7853=>536,7854=>650,7855=>536,7856=>650,7857=>536,7858=>650,7859=>536,7860=>650,7861=>536,7862=>650,7863=>536,7864=>657,7865=>532,7866=>657,7867=>532,7868=>657,7869=>532,7870=>657,7871=>554,7872=>657,7873=>554,7874=>657,7875=>554,7876=>657,7877=>554,7878=>657,7879=>532,7880=>355,7881=>288,7882=>355,7883=>288,7884=>738,7885=>542,7886=>738,7887=>542,7888=>738,7889=>550,7890=>738,7891=>550,7892=>738,7893=>550,7894=>738,7895=>550,7896=>738,7897=>542,7898=>738,7899=>542,7900=>738,7901=>542,7902=>738,7903=>542,7904=>738,7905=>542,7906=>738,7907=>542,7908=>758,7909=>580,7910=>758,7911=>580,7912=>758,7913=>580,7914=>758,7915=>580,7916=>758,7917=>580,7918=>758,7919=>580,7920=>758,7921=>580,7922=>594,7923=>508,7924=>594,7925=>508,7926=>594,7927=>508,7928=>594,7929=>508,7930=>854,7931=>523,7936=>607,7937=>607,7938=>607,7939=>607,7940=>607,7941=>607,7942=>607,7943=>607,7944=>650,7945=>650,7946=>782,7947=>782,7948=>660,7949=>687,7950=>650,7951=>650,7952=>483,7953=>483,7954=>483,7955=>483,7956=>483,7957=>483,7960=>768,7961=>757,7962=>960,7963=>969,7964=>907,7965=>931,7968=>539,7969=>539,7970=>539,7971=>539,7972=>539,7973=>539,7974=>539,7975=>539,7976=>898,7977=>893,7978=>1090,7979=>1101,7980=>1043,7981=>1064,7982=>988,7983=>985,7984=>353,7985=>353,7986=>353,7987=>353,7988=>353,7989=>353,7990=>353,7991=>353,7992=>469,7993=>461,7994=>661,7995=>664,7996=>611,7997=>635,7998=>561,7999=>553,8000=>542,8001=>542,8002=>542,8003=>542,8004=>542,8005=>542,8008=>738,8009=>773,8010=>1008,8011=>1015,8012=>843,8013=>867,8016=>547,8017=>547,8018=>547,8019=>547,8020=>547,8021=>547,8022=>547,8023=>547,8025=>765,8027=>971,8029=>939,8031=>857,8032=>734,8033=>734,8034=>734,8035=>734,8036=>734,8037=>734,8038=>734,8039=>734,8040=>746,8041=>783,8042=>1018,8043=>1023,8044=>852,8045=>878,8046=>844,8047=>873,8048=>607,8049=>607,8050=>483,8051=>483,8052=>539,8053=>539,8054=>353,8055=>353,8056=>542,8057=>542,8058=>547,8059=>547,8060=>734,8061=>734,8064=>607,8065=>607,8066=>607,8067=>607,8068=>607,8069=>607,8070=>607,8071=>607,8072=>650,8073=>650,8074=>782,8075=>782,8076=>660,8077=>687,8078=>650,8079=>650,8080=>539,8081=>539,8082=>539,8083=>539,8084=>539,8085=>539,8086=>539,8087=>539,8088=>898,8089=>893,8090=>1090,8091=>1101,8092=>1043,8093=>1064,8094=>988,8095=>985,8096=>734,8097=>734,8098=>734,8099=>734,8100=>734,8101=>734,8102=>734,8103=>734,8104=>746,8105=>783,8106=>1018,8107=>1023,8108=>852,8109=>878,8110=>844,8111=>873,8112=>607,8113=>607,8114=>607,8115=>607,8116=>607,8118=>607,8119=>607,8120=>650,8121=>650,8122=>650,8123=>650,8124=>650,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>539,8131=>539,8132=>539,8134=>539,8135=>539,8136=>820,8137=>810,8138=>956,8139=>935,8140=>785,8141=>450,8142=>450,8143=>450,8144=>353,8145=>353,8146=>353,8147=>353,8150=>353,8151=>353,8152=>355,8153=>355,8154=>529,8155=>505,8157=>450,8158=>450,8159=>450,8160=>547,8161=>547,8162=>547,8163=>547,8164=>529,8165=>529,8166=>547,8167=>547,8168=>594,8169=>594,8170=>829,8171=>808,8172=>711,8173=>450,8174=>450,8175=>450,8178=>734,8179=>734,8180=>734,8182=>734,8183=>734,8184=>865,8185=>751,8186=>886,8187=>767,8188=>746,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>304,8209=>304,8210=>572,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>286,8217=>286,8218=>286,8219=>286,8220=>460,8221=>460,8222=>466,8223=>460,8224=>450,8225=>450,8226=>531,8227=>531,8228=>300,8229=>600,8230=>900,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1208,8241=>1560,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8249=>360,8250=>360,8252=>475,8253=>482,8254=>450,8258=>900,8260=>150,8261=>351,8262=>351,8263=>878,8264=>678,8265=>678,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8273=>450,8274=>404,8275=>900,8279=>597,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>360,8305=>181,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221,8319=>389,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>347,8337=>348,8338=>347,8339=>381,8340=>348,8341=>389,8342=>328,8343=>218,8344=>552,8345=>389,8346=>360,8347=>303,8348=>222,8358=>594,8364=>572,8367=>951,8369=>635,8372=>702,8373=>572,8376=>600,8377=>572,8450=>716,8451=>1006,8457=>942,8461=>850,8462=>580,8463=>580,8469=>822,8470=>852,8473=>677,8474=>784,8477=>748,8482=>900,8484=>657,8486=>746,8487=>746,8490=>672,8491=>650,8498=>624,8508=>659,8509=>594,8510=>639,8511=>850,8512=>642,8513=>697,8514=>501,8515=>501,8516=>549,8517=>780,8518=>629,8519=>572,8520=>342,8521=>325,8523=>801,8526=>462,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>355,8545=>531,8546=>707,8547=>870,8548=>650,8549=>883,8550=>1059,8551=>1234,8552=>838,8553=>641,8554=>839,8555=>1015,8556=>598,8557=>688,8558=>721,8559=>921,8560=>288,8561=>576,8562=>863,8563=>796,8564=>508,8565=>796,8566=>1084,8567=>1372,8568=>795,8569=>507,8570=>795,8571=>1083,8572=>288,8573=>504,8574=>576,8575=>853,8576=>1085,8577=>721,8578=>1085,8579=>688,8580=>504,8581=>688,8585=>872,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>543,8706=>465,8707=>488,8708=>488,8710=>628,8711=>628,8712=>666,8713=>666,8715=>666,8716=>666,8719=>716,8720=>716,8721=>642,8722=>754,8723=>754,8724=>754,8725=>303,8727=>611,8728=>441,8729=>441,8730=>573,8731=>573,8732=>573,8733=>609,8734=>750,8735=>754,8736=>754,8739=>262,8740=>431,8741=>416,8742=>570,8743=>659,8744=>659,8745=>754,8746=>754,8747=>469,8748=>766,8749=>1063,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>930,8789=>930,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>761,8848=>761,8849=>761,8850=>761,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>773,8867=>773,8868=>846,8869=>846,8870=>510,8871=>510,8872=>773,8873=>773,8874=>773,8875=>927,8876=>773,8877=>773,8878=>773,8879=>927,8901=>308,8962=>687,8968=>351,8969=>351,8970=>351,8971=>351,8976=>754,8977=>461,8984=>900,8985=>754,8992=>469,8993=>469,8997=>900,9000=>1299,9085=>827,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>469,9167=>850,9251=>687,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542,9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542,9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542,9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542,9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542,9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542,9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542,9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542,9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542,9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542,9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542,9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542,9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542,9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754,10181=>351,10182=>351,10208=>444,10216=>351,10217=>351,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659,10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659,10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659,10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659,10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659,10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659,10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659,10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659,10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659,10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659,10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659,10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659,10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659,10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659,10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659,10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659,10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659,10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659,10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659,10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659,10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659,10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659,10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659,10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659,10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659,10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>883,10616=>754,10617=>754,10618=>886,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1361,10765=>469,10766=>469,10799=>754,10858=>754,10859=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11360=>598,11361=>288,11363=>605,11364=>677,11367=>785,11368=>580,11369=>672,11370=>545,11371=>625,11372=>474,11373=>704,11374=>921,11375=>650,11376=>704,11377=>596,11378=>1017,11379=>845,11381=>666,11382=>500,11383=>630,11385=>451,11386=>542,11387=>498,11388=>237,11389=>409,11390=>616,11391=>625,11520=>695,11521=>571,11522=>569,11523=>592,11524=>568,11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>568,11532=>581,11533=>866,11534=>580,11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584,11546=>619,11547=>571,11548=>883,11549=>613,11550=>608,11551=>766,11552=>861,11553=>569,11554=>580,11555=>582,11556=>674,11557=>822,11800=>482,11807=>754,11810=>351,11811=>351,11812=>351,11813=>351,11822=>482,42564=>616,42565=>461,42566=>355,42567=>353,42576=>994,42577=>799,42580=>1074,42581=>783,42582=>1025,42583=>809,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444,42779=>332,42780=>332,42781=>228,42782=>228,42783=>228,42790=>785,42791=>571,42792=>758,42793=>679,42794=>550,42795=>504,42796=>493,42797=>478,42798=>566,42799=>549,42800=>462,42801=>461,42802=>1075,42803=>850,42804=>1103,42805=>855,42806=>1034,42807=>840,42808=>871,42809=>705,42810=>871,42811=>705,42812=>866,42813=>742,42814=>688,42815=>504,42816=>696,42817=>563,42822=>708,42823=>391,42826=>838,42827=>640,42830=>1274,42831=>899,42856=>636,42857=>549,42875=>550,42876=>430,42880=>598,42881=>288,42882=>758,42883=>580,42884=>550,42885=>430,42886=>688,42887=>504,42891=>361,42892=>247,42893=>695,42896=>787,42897=>580,42922=>785,43002=>861,43003=>624,43004=>605,43005=>921,43006=>355,43007=>1081,62464=>588,62465=>598,62466=>642,62467=>853,62468=>598,62469=>593,62470=>652,62471=>888,62472=>598,62473=>598,62474=>1131,62475=>614,62476=>613,62477=>857,62478=>598,62479=>613,62480=>898,62481=>671,62482=>718,62483=>672,62484=>850,62485=>613,62486=>842,62487=>612,62488=>619,62489=>613,62490=>655,62491=>613,62492=>619,62493=>599,62494=>656,62495=>795,62496=>598,62497=>635,62498=>599,62499=>598,62500=>598,62501=>649,62502=>865,62504=>813,63173=>542,63185=>450,63188=>450,64256=>639,64257=>600,64258=>600,64259=>925,64260=>927,64261=>694,64262=>839,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserifcondensed.z b/tcpdf/fonts/dejavuserifcondensed.z new file mode 100644 index 0000000..ca69dae Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensed.z differ diff --git a/tcpdf/fonts/dejavuserifcondensedb.ctg.z b/tcpdf/fonts/dejavuserifcondensedb.ctg.z new file mode 100644 index 0000000..eff351b Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensedb.ctg.z differ diff --git a/tcpdf/fonts/dejavuserifcondensedb.php b/tcpdf/fonts/dejavuserifcondensedb.php new file mode 100644 index 0000000..9f2bda3 --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensedb.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerifCondensed-Bold'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=320720; +$enc=''; +$file='dejavuserifcondensedb.z'; +$ctg='dejavuserifcondensedb.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-752 -389 1617 1145]','ItalicAngle'=>0,'Ascent'=>939,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>60,'StemH'=>26,'AvgWidth'=>509,'MaxWidth'=>1638,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(114,-14,281,729),34=>array(85,458,383,729),35=>array(61,0,693,718),36=>array(80,-146,552,761),37=>array(21,-14,833,742),38=>array(36,-14,796,742),39=>array(85,458,190,729),40=>array(84,-156,379,760),41=>array(45,-156,340,760),42=>array(20,278,451,742),43=>array(95,1,659,627),44=>array(12,-165,226,156),45=>array(48,202,325,334),46=>array(73,-14,241,172),47=>array(0,-93,329,729),48=>array(42,-14,584,742),49=>array(110,0,537,742),50=>array(60,0,545,742),51=>array(63,-14,569,742),52=>array(37,0,589,742),53=>array(74,-14,558,729),54=>array(57,-14,578,742),55=>array(71,0,552,729),56=>array(46,-14,578,742),57=>array(48,-14,570,742),58=>array(83,-14,250,490),59=>array(23,-161,250,490),60=>array(95,32,659,595),61=>array(95,147,659,480),62=>array(95,32,659,595),63=>array(58,-14,487,742),64=>array(59,-174,836,703),65=>array(-7,0,708,729),66=>array(42,0,711,729),67=>array(38,-14,671,742),68=>array(42,0,743,729),69=>array(42,0,640,729),70=>array(42,0,627,729),71=>array(38,-14,698,742),72=>array(42,0,810,729),73=>array(42,0,380,729),74=>array(-66,-208,392,729),75=>array(42,0,810,729),76=>array(42,0,613,729),77=>array(38,0,954,729),78=>array(40,0,787,729),79=>array(38,-14,746,742),80=>array(42,0,655,729),81=>array(38,-180,746,742),82=>array(42,0,753,729),83=>array(59,-14,596,742),84=>array(10,0,661,729),85=>array(31,-14,765,729),86=>array(-5,0,711,729),87=>array(-8,0,1021,729),88=>array(4,0,698,729),89=>array(-8,0,651,729),90=>array(33,0,625,729),91=>array(112,-132,362,760),92=>array(0,-93,329,729),93=>array(63,-132,313,760),94=>array(91,457,664,729),95=>array(0,-236,450,-143),96=>array(62,616,298,800),97=>array(37,-14,563,533),98=>array(21,-14,593,760),99=>array(37,-14,508,533),100=>array(37,-14,608,760),101=>array(37,-14,532,533),102=>array(27,0,436,760),103=>array(37,-222,608,533),104=>array(27,0,634,760),105=>array(31,0,320,760),106=>array(-67,-222,252,760),107=>array(31,0,639,760),108=>array(31,0,320,760),109=>array(31,0,932,533),110=>array(31,0,634,533),111=>array(37,-14,564,533),112=>array(21,-208,593,533),113=>array(37,-208,608,533),114=>array(26,0,483,533),115=>array(39,-14,470,533),116=>array(21,-14,412,680),117=>array(21,-14,624,519),118=>array(-17,0,545,519),119=>array(-8,0,793,519),120=>array(0,0,543,519),121=>array(-12,-222,545,519),122=>array(31,0,481,519),123=>array(75,-163,498,760),124=>array(116,-236,211,764),125=>array(82,-163,503,760),126=>array(95,221,659,406),161=>array(114,0,281,742),162=>array(70,-146,542,662),163=>array(64,0,561,742),164=>array(33,30,541,596),165=>array(17,0,599,729),166=>array(116,-171,211,699),167=>array(27,-95,443,742),168=>array(62,645,388,788),169=>array(124,0,776,725),170=>array(26,246,422,742),171=>array(69,64,478,522),172=>array(95,140,659,441),173=>array(48,202,325,334),174=>array(124,0,776,725),175=>array(86,664,364,756),176=>array(78,424,371,749),177=>array(95,0,659,627),178=>array(38,334,344,742),179=>array(40,326,358,742),180=>array(152,616,388,800),181=>array(25,-208,628,519),182=>array(64,-96,518,729),183=>array(73,255,241,440),184=>array(115,-196,314,0),185=>array(63,334,333,742),186=>array(26,246,423,742),187=>array(84,64,493,522),188=>array(63,-14,908,742),189=>array(63,-14,888,742),190=>array(40,-14,908,742),191=>array(40,-14,469,742),192=>array(-7,0,708,927),193=>array(-7,0,708,927),194=>array(-7,0,708,927),195=>array(-7,0,708,929),196=>array(-7,0,708,939),197=>array(-7,0,708,928),198=>array(-28,0,884,729),199=>array(38,-196,671,742),200=>array(42,0,640,927),201=>array(42,0,640,927),202=>array(42,0,640,927),203=>array(42,0,640,939),204=>array(42,0,380,927),205=>array(42,0,380,927),206=>array(42,0,380,927),207=>array(42,0,380,939),208=>array(39,0,748,729),209=>array(40,0,787,929),210=>array(38,-14,746,927),211=>array(38,-14,746,927),212=>array(38,-14,746,927),213=>array(38,-14,746,929),214=>array(38,-14,746,939),215=>array(116,23,638,604),216=>array(30,-38,753,766),217=>array(31,-14,765,927),218=>array(31,-14,765,927),219=>array(31,-14,765,927),220=>array(31,-14,765,939),221=>array(-8,0,651,927),222=>array(42,0,655,729),223=>array(31,-14,653,760),224=>array(37,-14,563,800),225=>array(37,-14,563,800),226=>array(37,-14,563,800),227=>array(37,-14,563,792),228=>array(37,-14,563,788),229=>array(37,-14,563,888),230=>array(37,-14,836,533),231=>array(37,-196,508,533),232=>array(37,-14,532,800),233=>array(37,-14,532,800),234=>array(37,-14,532,800),235=>array(37,-14,532,788),236=>array(8,0,320,800),237=>array(31,0,334,800),238=>array(5,0,337,800),239=>array(8,0,334,788),240=>array(37,-14,564,764),241=>array(31,0,634,792),242=>array(37,-14,564,800),243=>array(37,-14,564,800),244=>array(37,-14,564,800),245=>array(37,-14,564,792),246=>array(37,-14,564,788),247=>array(95,60,659,567),248=>array(22,-50,578,567),249=>array(21,-14,624,800),250=>array(21,-14,624,800),251=>array(21,-14,624,800),252=>array(21,-14,624,788),253=>array(-12,-222,545,800),254=>array(21,-208,593,760),255=>array(-12,-222,545,788),256=>array(-7,0,708,914),257=>array(37,-14,563,763),258=>array(-7,0,708,936),259=>array(37,-14,563,776),260=>array(-7,-196,708,729),261=>array(37,-196,563,533),262=>array(38,-14,671,927),263=>array(37,-14,508,800),264=>array(38,-14,671,927),265=>array(37,-14,508,800),266=>array(38,-14,671,939),267=>array(37,-14,508,788),268=>array(38,-14,671,927),269=>array(37,-14,508,800),270=>array(42,0,743,927),271=>array(37,-14,767,760),272=>array(39,0,748,729),273=>array(37,-14,618,760),274=>array(42,0,640,914),275=>array(37,-14,532,763),276=>array(42,0,640,927),277=>array(37,-14,532,776),278=>array(42,0,640,939),279=>array(37,-14,532,788),280=>array(42,-196,641,729),281=>array(37,-196,532,533),282=>array(42,0,640,930),283=>array(37,-14,532,800),284=>array(38,-14,698,927),285=>array(37,-222,608,800),286=>array(38,-14,698,927),287=>array(37,-222,608,776),288=>array(38,-14,698,939),289=>array(37,-222,608,788),290=>array(38,-240,698,742),291=>array(37,-222,608,753),292=>array(42,0,810,927),293=>array(-23,0,634,927),294=>array(42,0,810,729),295=>array(27,0,634,760),296=>array(42,0,380,929),297=>array(13,0,329,792),298=>array(42,0,380,914),299=>array(3,0,320,763),300=>array(42,0,380,927),301=>array(21,0,321,776),302=>array(42,-196,380,729),303=>array(31,-196,332,760),304=>array(42,0,380,939),305=>array(31,0,320,519),306=>array(42,-208,813,729),307=>array(31,-222,602,760),308=>array(-66,-208,392,927),309=>array(-67,-222,306,800),310=>array(42,-226,810,729),311=>array(31,-226,639,760),312=>array(31,0,639,518),313=>array(42,0,613,928),314=>array(31,0,326,928),315=>array(42,-226,613,729),316=>array(31,-226,320,760),317=>array(42,0,613,729),318=>array(31,0,465,760),319=>array(42,0,624,729),320=>array(31,0,464,760),321=>array(7,0,620,729),322=>array(3,0,352,760),323=>array(40,0,787,928),324=>array(31,0,634,776),325=>array(40,-226,787,729),326=>array(31,-226,634,533),327=>array(40,0,787,927),328=>array(31,0,634,800),329=>array(41,0,866,742),330=>array(31,-208,681,743),331=>array(31,-222,567,533),332=>array(38,-14,746,914),333=>array(37,-14,564,763),334=>array(38,-14,746,927),335=>array(37,-14,564,776),336=>array(38,-14,746,927),337=>array(37,-14,564,800),338=>array(38,0,1016,729),339=>array(37,-14,886,533),340=>array(42,0,753,928),341=>array(26,0,483,776),342=>array(42,-226,753,729),343=>array(26,-226,483,533),344=>array(42,0,753,927),345=>array(26,0,483,800),346=>array(59,-14,596,928),347=>array(39,-14,470,776),348=>array(59,-14,596,927),349=>array(39,-14,470,800),350=>array(59,-196,596,742),351=>array(39,-196,470,533),352=>array(59,-14,596,927),353=>array(39,-14,470,800),354=>array(10,-196,661,729),355=>array(21,-196,412,680),356=>array(10,0,661,927),357=>array(21,-14,446,780),358=>array(10,0,661,729),359=>array(21,-14,412,680),360=>array(31,-14,765,929),361=>array(21,-14,624,792),362=>array(31,-14,765,914),363=>array(21,-14,624,763),364=>array(31,-14,765,927),365=>array(21,-14,624,776),366=>array(31,-14,765,1057),367=>array(21,-14,624,854),368=>array(31,-14,765,927),369=>array(21,-14,624,800),370=>array(31,-204,765,729),371=>array(21,-196,655,519),372=>array(-8,0,1021,931),373=>array(-8,0,793,800),374=>array(-8,0,651,931),375=>array(-12,-222,545,800),376=>array(-8,0,651,939),377=>array(33,0,625,928),378=>array(31,0,481,776),379=>array(33,0,625,952),380=>array(31,0,481,759),381=>array(33,0,625,927),382=>array(31,0,481,800),383=>array(27,0,436,760),384=>array(18,-14,593,760),385=>array(-108,0,711,729),386=>array(42,0,720,729),387=>array(21,-14,593,760),388=>array(0,0,720,729),389=>array(0,-14,593,760),390=>array(38,-14,671,742),391=>array(38,-14,816,840),392=>array(37,-14,655,709),393=>array(39,0,748,729),394=>array(-108,0,743,729),395=>array(42,0,720,729),396=>array(21,-14,593,760),397=>array(37,-246,564,533),398=>array(42,0,640,729),399=>array(38,-14,746,742),400=>array(42,-14,601,742),401=>array(-78,-208,627,729),402=>array(-86,-190,436,760),403=>array(38,-14,838,840),404=>array(15,-92,674,729),405=>array(27,-1,903,760),406=>array(42,0,380,729),407=>array(32,0,389,729),408=>array(42,0,814,729),409=>array(31,0,639,760),410=>array(31,0,320,760),411=>array(32,0,594,739),412=>array(31,-14,932,729),413=>array(-80,-208,787,729),414=>array(31,-208,633,533),415=>array(38,-14,746,742),416=>array(37,-14,784,758),417=>array(37,-14,671,548),418=>array(37,-171,1038,742),419=>array(37,-208,828,533),420=>array(-108,0,655,729),421=>array(21,-208,593,709),422=>array(40,-142,753,729),423=>array(59,-14,596,742),424=>array(39,-14,470,533),425=>array(36,0,576,729),426=>array(-58,-223,347,760),427=>array(21,-222,412,680),428=>array(16,0,661,729),429=>array(21,-14,412,760),430=>array(10,-208,661,729),431=>array(33,-14,944,816),432=>array(22,-14,725,548),433=>array(40,-14,761,729),434=>array(71,0,761,729),435=>array(-8,0,736,730),436=>array(-12,-222,638,533),437=>array(33,0,625,729),438=>array(31,0,481,519),439=>array(31,-14,537,729),440=>array(54,-14,560,729),441=>array(54,-203,560,519),442=>array(45,-220,537,519),443=>array(60,0,573,742),444=>array(42,-14,627,729),445=>array(30,-203,537,519),446=>array(20,-15,339,680),447=>array(21,-208,614,560),448=>array(85,0,180,729),449=>array(85,0,358,729),450=>array(8,0,405,729),451=>array(85,0,180,729),452=>array(42,0,1405,927),453=>array(42,0,1261,800),454=>array(37,-14,1110,800),455=>array(42,-208,1024,729),456=>array(42,-222,885,760),457=>array(31,-222,594,760),458=>array(40,-208,1214,729),459=>array(40,-222,1075,760),460=>array(31,-222,906,760),461=>array(-7,0,708,927),462=>array(37,-14,563,800),463=>array(42,0,380,927),464=>array(5,0,337,800),465=>array(38,-14,746,927),466=>array(37,-14,564,800),467=>array(31,-14,765,927),468=>array(21,-14,624,800),469=>array(31,-14,765,1036),470=>array(21,-14,624,899),471=>array(31,-14,765,1057),472=>array(21,-14,624,920),473=>array(31,-14,765,1057),474=>array(21,-14,624,920),475=>array(31,-14,765,1057),476=>array(21,-14,624,920),477=>array(37,-14,532,533),478=>array(-7,0,708,1036),479=>array(37,-14,563,899),480=>array(-7,0,708,1036),481=>array(37,-14,563,899),482=>array(-28,0,884,914),483=>array(37,-14,836,763),484=>array(38,-14,785,742),485=>array(37,-222,608,533),486=>array(38,-14,698,927),487=>array(37,-222,608,800),488=>array(42,0,810,927),489=>array(-22,0,639,927),490=>array(38,-204,746,742),491=>array(37,-204,564,533),492=>array(38,-204,746,914),493=>array(37,-204,564,763),494=>array(31,-14,537,927),495=>array(31,-203,537,800),496=>array(-67,-222,337,800),497=>array(42,0,1405,729),498=>array(42,0,1261,729),499=>array(37,-14,1110,760),500=>array(38,-14,698,928),501=>array(37,-222,608,800),502=>array(42,-14,1068,729),503=>array(42,-208,703,742),504=>array(40,0,787,927),505=>array(31,0,634,800),506=>array(-7,0,708,928),507=>array(37,-14,563,928),508=>array(-28,0,884,928),509=>array(37,-14,836,800),510=>array(30,-38,753,928),511=>array(22,-50,578,800),512=>array(-7,0,708,930),513=>array(37,-14,563,800),514=>array(-7,0,708,958),515=>array(37,-14,563,776),516=>array(42,0,640,930),517=>array(37,-14,532,800),518=>array(42,0,640,958),519=>array(37,-14,532,776),520=>array(1,0,380,930),521=>array(-43,0,320,801),522=>array(42,0,380,958),523=>array(17,0,320,767),524=>array(38,-14,746,930),525=>array(37,-14,564,800),526=>array(38,-14,746,958),527=>array(37,-14,564,776),528=>array(42,0,753,930),529=>array(26,0,483,800),530=>array(42,0,753,958),531=>array(26,0,483,776),532=>array(31,-14,765,930),533=>array(21,-14,624,800),534=>array(31,-14,765,958),535=>array(21,-14,624,776),536=>array(59,-230,596,742),537=>array(39,-230,470,533),538=>array(10,-230,661,729),539=>array(21,-230,412,680),540=>array(60,-210,555,742),541=>array(44,-211,490,531),542=>array(42,0,810,927),543=>array(-21,0,634,927),544=>array(31,-208,765,743),545=>array(37,-48,696,760),546=>array(36,-14,585,742),547=>array(44,-14,509,760),548=>array(33,-263,625,729),549=>array(31,-263,481,519),550=>array(-7,0,708,939),551=>array(37,-14,563,788),552=>array(42,-196,640,729),553=>array(37,-196,532,533),554=>array(38,-14,746,1036),555=>array(37,-14,564,899),556=>array(38,-14,746,1036),557=>array(37,-14,564,894),558=>array(38,-14,746,939),559=>array(37,-14,564,788),560=>array(38,-14,746,1036),561=>array(37,-14,564,899),562=>array(-8,0,651,914),563=>array(-12,-222,545,763),564=>array(31,-113,500,760),565=>array(31,-113,814,533),566=>array(21,-113,492,680),567=>array(-67,-222,252,519),568=>array(37,-14,892,760),569=>array(36,-208,892,533),570=>array(-13,-38,711,766),571=>array(-4,-38,720,766),572=>array(-4,-50,552,567),573=>array(32,0,613,729),574=>array(-26,-38,698,766),575=>array(39,-217,470,533),576=>array(31,-222,511,519),577=>array(42,0,572,729),578=>array(42,0,470,533),579=>array(33,0,711,729),580=>array(26,-14,770,729),581=>array(-7,0,708,729),582=>array(42,-57,640,785),583=>array(37,-56,532,581),584=>array(-66,-208,401,729),585=>array(-67,-222,320,760),586=>array(38,-208,842,742),587=>array(37,-222,705,533),588=>array(32,0,753,729),589=>array(26,0,483,533),590=>array(-8,0,651,729),591=>array(-12,-222,545,519),592=>array(37,-14,563,533),593=>array(37,-14,608,533),594=>array(37,-14,608,533),595=>array(21,-14,593,760),596=>array(37,-14,508,533),597=>array(34,-113,503,527),598=>array(37,-222,705,760),599=>array(37,-14,706,760),600=>array(37,-14,532,533),601=>array(37,-14,532,533),602=>array(48,-14,817,533),603=>array(43,-12,499,533),604=>array(37,-12,492,526),605=>array(37,-12,816,526),606=>array(37,-18,607,533),607=>array(-67,-222,320,519),608=>array(37,-222,706,760),609=>array(37,-222,608,519),610=>array(56,-4,514,520),611=>array(11,-219,530,519),612=>array(37,-38,545,521),613=>array(21,-208,627,519),614=>array(31,0,634,760),615=>array(31,-222,567,760),616=>array(31,0,320,760),617=>array(32,0,331,519),618=>array(31,0,320,519),619=>array(29,0,344,760),620=>array(29,0,439,760),621=>array(31,-222,417,760),622=>array(31,-203,742,760),623=>array(21,-14,922,519),624=>array(21,-208,922,519),625=>array(31,-222,865,533),626=>array(-66,-222,634,533),627=>array(31,-222,729,533),628=>array(56,0,591,519),629=>array(37,-14,564,533),630=>array(56,0,905,521),631=>array(37,-14,634,530),632=>array(-3,-213,604,760),633=>array(26,-14,483,519),634=>array(26,-14,483,760),635=>array(26,-222,576,519),636=>array(26,-207,483,533),637=>array(26,-222,483,533),638=>array(31,0,416,533),639=>array(31,0,416,533),640=>array(56,0,670,519),641=>array(56,0,670,519),642=>array(39,-222,470,533),643=>array(-67,-223,347,760),644=>array(-67,-222,436,760),645=>array(37,-222,450,527),646=>array(-58,-223,347,760),647=>array(31,-161,421,533),648=>array(21,-222,408,680),649=>array(21,-14,624,519),650=>array(37,-14,576,519),651=>array(31,-1,589,519),652=>array(31,0,593,519),653=>array(31,0,832,519),654=>array(31,0,587,741),655=>array(56,0,604,520),656=>array(31,-222,645,519),657=>array(31,-89,481,519),658=>array(31,-203,537,519),659=>array(45,-203,537,519),660=>array(111,0,430,761),661=>array(111,0,430,761),662=>array(111,0,430,761),663=>array(111,-223,430,761),664=>array(38,-14,746,742),665=>array(31,0,589,519),666=>array(37,-18,607,533),667=>array(56,-4,661,760),668=>array(31,0,628,519),669=>array(-39,-223,351,760),670=>array(37,-208,646,519),671=>array(56,0,531,519),672=>array(37,-208,705,760),673=>array(111,0,430,761),674=>array(111,0,430,761),675=>array(37,-14,975,760),676=>array(37,-203,1031,760),677=>array(37,-89,975,760),678=>array(21,0,807,680),679=>array(21,-223,692,760),680=>array(21,-20,810,680),681=>array(27,-222,905,760),682=>array(31,0,746,760),683=>array(31,0,686,760),684=>array(40,0,560,625),685=>array(40,120,361,625),686=>array(-76,-208,627,760),687=>array(-76,-222,721,760),688=>array(40,334,434,759),689=>array(40,337,432,762),690=>array(40,210,247,760),691=>array(40,334,337,632),692=>array(40,329,337,627),693=>array(40,209,397,625),694=>array(40,334,439,625),695=>array(40,302,560,592),696=>array(40,177,401,592),697=>array(70,557,196,800),698=>array(70,557,394,800),699=>array(62,456,261,742),700=>array(62,456,261,742),701=>array(62,456,261,742),702=>array(104,481,230,760),703=>array(104,481,230,760),704=>array(40,334,247,760),705=>array(40,334,247,760),706=>array(117,517,333,843),707=>array(117,517,333,843),708=>array(78,561,372,800),709=>array(78,561,372,800),710=>array(59,616,391,800),711=>array(59,616,391,800),712=>array(85,513,168,759),713=>array(86,664,364,756),714=>array(152,616,388,800),715=>array(62,616,298,800),716=>array(85,-90,168,156),717=>array(86,-188,364,-96),720=>array(98,0,234,434),721=>array(98,303,234,434),722=>array(104,269,230,547),723=>array(104,269,230,547),726=>array(48,165,271,411),727=>array(48,242,271,334),728=>array(75,624,375,776),729=>array(160,645,290,788),730=>array(100,610,351,888),731=>array(139,-196,329,0),732=>array(67,638,382,792),733=>array(99,616,447,800),734=>array(0,299,376,500),736=>array(7,211,334,625),737=>array(40,334,228,759),738=>array(40,335,320,641),739=>array(40,334,393,625),740=>array(40,334,247,760),741=>array(86,0,364,693),742=>array(86,0,364,693),743=>array(86,0,364,693),744=>array(86,0,364,693),745=>array(86,0,364,693),748=>array(78,-281,372,-42),750=>array(62,456,446,742),751=>array(59,-241,391,-58),752=>array(78,-281,372,-42),755=>array(100,-240,351,38),759=>array(67,-193,382,-40),768=>array(-389,616,-152,800),769=>array(-299,616,-62,800),770=>array(-391,616,-60,800),771=>array(-383,638,-68,792),772=>array(-364,664,-87,756),773=>array(-450,663,0,755),774=>array(-376,624,-75,776),775=>array(-290,645,-161,788),776=>array(-389,645,-62,788),777=>array(-312,616,-112,866),778=>array(-351,610,-100,888),779=>array(-352,616,-4,800),780=>array(-391,616,-60,800),781=>array(-268,616,-185,813),782=>array(-350,616,-102,813),783=>array(-436,616,-88,800),784=>array(-376,624,-75,903),785=>array(-376,624,-75,776),786=>array(-277,456,-116,617),787=>array(-290,606,-154,847),788=>array(-290,606,-154,847),789=>array(-77,616,77,800),790=>array(-388,-253,-152,-69),791=>array(-298,-251,-62,-67),792=>array(-294,-357,-142,-111),793=>array(-308,-357,-155,-111),794=>array(-180,684,42,930),795=>array(-106,338,70,548),796=>array(-288,-389,-162,-111),797=>array(-334,-280,-112,-111),798=>array(-336,-280,-114,-111),799=>array(-334,-357,-112,-111),800=>array(-336,-203,-114,-111),801=>array(-406,-222,-87,139),802=>array(-391,-222,-72,139),803=>array(-290,-213,-160,-70),804=>array(-391,-213,-64,-70),805=>array(-330,-240,-123,-11),806=>array(-311,-230,-149,-69),807=>array(-335,-196,-136,0),808=>array(-311,-196,-121,0),809=>array(-263,-266,-180,-69),810=>array(-364,-253,-86,-69),811=>array(-383,-221,-66,-69),812=>array(-391,-251,-59,-67),813=>array(-391,-253,-59,-69),814=>array(-375,-221,-75,-69),815=>array(-375,-221,-75,-69),816=>array(-385,-222,-70,-68),817=>array(-364,-161,-86,-69),818=>array(-450,-236,0,-143),819=>array(-450,-236,0,-9),820=>array(-667,210,-88,417),821=>array(-310,234,-21,293),822=>array(-625,234,-37,293),823=>array(-583,-50,-26,567),824=>array(-752,-38,-29,766),825=>array(-273,-378,-147,-100),826=>array(-364,-242,-86,-59),827=>array(-352,-350,-99,-69),828=>array(-383,-221,-66,-69),829=>array(-332,581,-116,820),830=>array(-291,598,-152,877),831=>array(-450,528,0,755),835=>array(-290,606,-154,847),856=>array(-112,645,18,788),864=>array(-387,723,387,898),865=>array(-401,729,401,902),880=>array(42,0,661,729),881=>array(31,0,488,519),882=>array(10,0,698,729),883=>array(29,0,658,519),884=>array(70,557,196,800),885=>array(70,-208,196,35),886=>array(40,0,831,729),887=>array(31,0,633,519),890=>array(182,-208,313,-60),891=>array(37,-14,508,533),892=>array(37,-14,508,533),893=>array(37,-14,508,533),894=>array(23,-161,250,490),900=>array(152,616,388,800),901=>array(62,645,396,996),902=>array(-7,0,708,800),903=>array(73,255,241,440),904=>array(-14,0,804,800),905=>array(-14,0,976,800),906=>array(-14,0,546,800),908=>array(-14,-14,760,800),910=>array(-14,0,865,800),911=>array(-14,0,782,800),912=>array(7,16,400,996),913=>array(-7,0,708,729),914=>array(42,0,711,729),915=>array(42,0,627,729),916=>array(26,0,667,729),917=>array(42,0,640,729),918=>array(33,0,625,729),919=>array(42,0,810,729),920=>array(38,-14,746,742),921=>array(42,0,380,729),922=>array(42,0,810,729),923=>array(-7,0,708,729),924=>array(38,0,954,729),925=>array(40,0,787,729),926=>array(49,0,578,729),927=>array(38,-14,746,742),928=>array(42,0,810,729),929=>array(42,0,655,729),931=>array(36,0,576,729),932=>array(10,0,661,729),933=>array(-8,0,651,729),934=>array(38,0,745,729),935=>array(4,0,698,729),936=>array(6,0,816,729),937=>array(40,0,761,742),938=>array(42,0,380,939),939=>array(-8,0,651,939),940=>array(37,-14,671,800),941=>array(43,-12,499,800),942=>array(31,-208,567,800),943=>array(31,16,400,800),944=>array(31,-1,589,996),945=>array(37,-14,671,532),946=>array(57,-208,548,769),947=>array(22,-209,554,519),948=>array(37,-14,564,765),949=>array(43,-12,499,533),950=>array(31,-208,488,760),951=>array(31,-208,567,533),952=>array(37,-17,564,771),953=>array(31,16,400,519),954=>array(31,0,639,519),955=>array(32,0,594,739),956=>array(25,-208,628,519),957=>array(31,0,589,519),958=>array(31,-208,488,760),959=>array(37,-14,564,533),960=>array(31,0,628,519),961=>array(57,-208,563,533),962=>array(37,-208,492,533),963=>array(37,-14,617,519),964=>array(31,16,560,519),965=>array(31,-1,589,519),966=>array(42,-208,772,519),967=>array(11,-222,572,533),968=>array(38,-208,808,519),969=>array(35,-1,820,519),970=>array(11,16,400,788),971=>array(31,-1,589,788),972=>array(37,-14,564,800),973=>array(31,-1,589,800),974=>array(35,-1,820,800),975=>array(42,-240,748,729),976=>array(37,-17,563,771),977=>array(31,-17,728,771),978=>array(26,0,652,729),979=>array(-14,0,836,800),980=>array(26,0,652,939),981=>array(37,-208,809,760),982=>array(31,-1,831,519),983=>array(44,-222,545,521),984=>array(38,-207,746,742),985=>array(37,-207,564,533),986=>array(38,-208,653,742),987=>array(37,-208,492,616),988=>array(42,0,627,729),989=>array(-83,-211,429,742),990=>array(47,0,476,729),991=>array(83,0,510,759),992=>array(54,-209,671,742),993=>array(40,-208,558,533),1008=>array(44,-5,545,521),1009=>array(57,-210,563,533),1010=>array(37,-14,508,533),1011=>array(-67,-222,252,760),1012=>array(38,-14,746,742),1013=>array(37,-14,506,533),1014=>array(38,-14,508,533),1015=>array(42,0,655,729),1016=>array(21,-208,593,760),1017=>array(38,-14,671,742),1018=>array(38,0,954,729),1019=>array(63,-208,734,519),1020=>array(37,-208,587,533),1021=>array(38,-14,671,742),1022=>array(38,-14,671,742),1023=>array(38,-14,671,742),1024=>array(42,0,640,927),1025=>array(42,0,640,939),1026=>array(-42,-214,734,729),1027=>array(42,0,610,927),1028=>array(38,-14,671,742),1029=>array(59,-14,596,742),1030=>array(42,0,380,729),1031=>array(42,0,380,939),1032=>array(-66,-208,392,729),1033=>array(20,-14,1039,729),1034=>array(42,0,1093,729),1035=>array(-42,0,818,729),1036=>array(42,0,810,927),1037=>array(42,0,810,927),1038=>array(22,-14,721,997),1039=>array(42,-157,810,729),1040=>array(9,0,725,729),1041=>array(42,0,720,729),1042=>array(42,0,711,729),1043=>array(42,0,610,729),1044=>array(42,-157,758,729),1045=>array(42,0,640,729),1046=>array(9,0,1172,729),1047=>array(42,-14,600,742),1048=>array(42,0,810,729),1049=>array(42,0,810,999),1050=>array(42,0,810,729),1051=>array(20,-14,756,729),1052=>array(38,0,954,729),1053=>array(42,0,810,729),1054=>array(38,-14,746,742),1055=>array(42,0,810,729),1056=>array(42,0,655,729),1057=>array(38,-14,671,742),1058=>array(10,0,661,729),1059=>array(22,-14,721,729),1060=>array(38,0,815,729),1061=>array(4,0,698,729),1062=>array(42,-157,828,729),1063=>array(27,0,775,729),1064=>array(38,0,1104,729),1065=>array(38,-157,1122,729),1066=>array(5,0,819,729),1067=>array(42,0,1041,729),1068=>array(42,0,701,729),1069=>array(38,-14,671,742),1070=>array(42,-14,1105,742),1071=>array(20,0,753,729),1072=>array(37,-14,563,533),1073=>array(30,-14,564,776),1074=>array(31,0,589,519),1075=>array(31,0,494,519),1076=>array(31,-138,569,519),1077=>array(37,-14,532,533),1078=>array(11,0,898,519),1079=>array(31,-14,539,533),1080=>array(31,0,637,519),1081=>array(31,0,637,817),1082=>array(31,0,639,519),1083=>array(16,-14,604,519),1084=>array(31,0,751,519),1085=>array(31,0,628,519),1086=>array(37,-14,564,533),1087=>array(31,0,628,519),1088=>array(21,-208,593,533),1089=>array(37,-14,508,533),1090=>array(29,0,516,519),1091=>array(11,-222,567,519),1092=>array(36,-208,776,760),1093=>array(0,0,543,519),1094=>array(31,-138,634,519),1095=>array(31,0,628,519),1096=>array(31,0,937,519),1097=>array(31,-138,943,519),1098=>array(13,0,655,519),1099=>array(37,0,868,519),1100=>array(37,0,575,519),1101=>array(38,-14,508,533),1102=>array(47,-14,883,533),1103=>array(22,0,634,519),1104=>array(37,-14,532,800),1105=>array(37,-14,532,788),1106=>array(13,-222,611,760),1107=>array(31,0,494,800),1108=>array(37,-14,506,533),1109=>array(39,-14,470,533),1110=>array(31,0,320,760),1111=>array(8,0,334,788),1112=>array(-67,-222,252,760),1113=>array(16,-14,853,519),1114=>array(31,0,877,519),1115=>array(18,0,634,760),1116=>array(31,0,639,800),1117=>array(31,0,637,800),1118=>array(11,-222,567,823),1119=>array(31,-138,628,519),1122=>array(13,0,750,729),1123=>array(9,0,597,760),1124=>array(42,-14,1031,742),1125=>array(47,-14,826,533),1130=>array(9,0,1172,729),1131=>array(11,0,898,519),1132=>array(42,0,1459,729),1133=>array(47,0,1157,519),1136=>array(10,0,999,729),1137=>array(11,-208,985,760),1138=>array(38,-14,746,742),1139=>array(37,-14,551,533),1140=>array(9,0,815,742),1141=>array(11,0,663,533),1142=>array(9,0,815,927),1143=>array(11,0,663,800),1164=>array(13,0,719,729),1165=>array(11,0,570,760),1168=>array(42,0,619,872),1169=>array(31,0,499,668),1170=>array(38,0,610,729),1171=>array(26,0,494,519),1172=>array(42,-214,704,729),1173=>array(31,-222,568,519),1174=>array(9,-157,1172,729),1175=>array(11,-138,898,519),1176=>array(42,-196,600,742),1177=>array(31,-196,539,533),1178=>array(42,-157,810,729),1179=>array(31,-138,639,519),1182=>array(32,0,810,729),1183=>array(27,0,639,760),1184=>array(5,0,928,729),1185=>array(13,0,726,520),1186=>array(42,-157,828,729),1187=>array(31,-138,634,519),1188=>array(42,0,1039,729),1189=>array(31,0,803,519),1190=>array(42,-214,1134,729),1191=>array(31,-222,876,519),1194=>array(38,-196,671,742),1195=>array(37,-196,508,533),1196=>array(10,-157,661,729),1197=>array(29,-138,516,519),1198=>array(-8,0,651,729),1199=>array(-12,-208,545,519),1200=>array(-8,0,651,729),1201=>array(-12,-208,545,519),1202=>array(4,-157,738,729),1203=>array(0,-138,554,519),1204=>array(10,-157,878,729),1205=>array(35,-138,696,519),1206=>array(27,-157,793,729),1207=>array(31,-138,634,519),1210=>array(27,0,773,729),1211=>array(27,0,634,760),1216=>array(42,0,380,729),1217=>array(9,0,1172,927),1218=>array(11,0,898,776),1219=>array(42,-214,748,729),1220=>array(31,-222,599,519),1223=>array(42,-214,810,729),1224=>array(31,-222,628,519),1227=>array(27,-157,775,729),1228=>array(31,-138,628,519),1231=>array(31,0,320,760),1232=>array(9,0,725,936),1233=>array(37,-14,563,776),1234=>array(9,0,725,939),1235=>array(37,-14,563,788),1236=>array(-28,0,884,729),1237=>array(37,-14,836,533),1238=>array(42,0,640,927),1239=>array(37,-14,532,776),1240=>array(38,-14,746,742),1241=>array(37,-14,532,533),1242=>array(38,-14,746,939),1243=>array(37,-14,532,788),1244=>array(9,0,1172,939),1245=>array(11,0,898,788),1246=>array(42,-14,600,939),1247=>array(31,-14,539,788),1248=>array(31,-14,537,729),1249=>array(31,-203,537,519),1250=>array(42,0,810,914),1251=>array(31,0,637,763),1252=>array(42,0,810,939),1253=>array(31,0,637,788),1254=>array(38,-14,746,939),1255=>array(37,-14,564,788),1256=>array(38,-14,746,742),1257=>array(37,-14,564,533),1258=>array(38,-14,746,939),1259=>array(37,-14,564,788),1260=>array(38,-14,671,939),1261=>array(38,-14,508,788),1262=>array(22,-14,721,914),1263=>array(11,-222,567,763),1264=>array(22,-14,721,939),1265=>array(11,-222,567,788),1266=>array(22,-14,721,927),1267=>array(11,-222,567,800),1268=>array(27,0,775,939),1269=>array(31,0,628,788),1270=>array(42,-157,610,729),1271=>array(31,-138,494,519),1272=>array(42,0,1041,939),1273=>array(37,0,868,788),1296=>array(42,-14,601,742),1297=>array(36,-14,544,533),1298=>array(20,-208,756,729),1299=>array(16,-222,604,519),1300=>array(20,-14,1123,729),1301=>array(16,-14,857,519),1306=>array(38,-180,746,742),1307=>array(37,-208,608,533),1308=>array(-8,0,1021,729),1309=>array(-8,0,793,519),1329=>array(31,-14,791,729),1330=>array(31,0,749,743),1331=>array(40,0,848,743),1332=>array(18,0,862,743),1333=>array(31,-14,749,729),1334=>array(66,-72,704,743),1335=>array(31,-72,690,729),1336=>array(31,-72,749,743),1337=>array(31,-10,1057,743),1338=>array(40,-14,848,729),1339=>array(44,0,723,729),1340=>array(44,-72,668,729),1341=>array(44,-14,1026,729),1342=>array(70,-13,772,743),1343=>array(18,0,740,729),1344=>array(-22,-66,593,729),1345=>array(66,-32,725,743),1346=>array(18,-72,849,743),1347=>array(22,0,753,739),1348=>array(31,-14,906,729),1349=>array(44,-14,715,742),1350=>array(-26,-14,805,801),1351=>array(75,-14,693,729),1352=>array(31,0,753,743),1353=>array(66,-84,684,743),1354=>array(18,0,900,743),1355=>array(75,-72,709,744),1356=>array(31,0,912,743),1357=>array(31,-14,753,729),1358=>array(18,-72,849,729),1359=>array(44,-14,688,742),1360=>array(31,0,709,743),1361=>array(9,-14,700,742),1362=>array(31,0,705,729),1363=>array(40,0,820,729),1364=>array(-66,0,791,743),1365=>array(38,-14,746,742),1366=>array(35,-14,841,729),1369=>array(104,481,230,760),1370=>array(12,408,226,729),1371=>array(2,615,276,799),1372=>array(1,618,353,893),1373=>array(11,615,285,799),1374=>array(4,605,392,854),1375=>array(40,618,416,760),1377=>array(18,-14,918,519),1378=>array(40,-208,586,533),1379=>array(53,-208,712,533),1380=>array(44,-208,734,533),1381=>array(22,-14,625,760),1382=>array(53,-208,712,533),1383=>array(40,0,552,760),1384=>array(40,-208,643,533),1385=>array(40,-208,818,532),1386=>array(53,-14,704,760),1387=>array(26,-208,629,760),1388=>array(40,-208,429,519),1389=>array(31,-208,948,760),1390=>array(53,-14,602,789),1391=>array(22,-208,607,760),1392=>array(40,0,646,760),1393=>array(53,-14,598,783),1394=>array(44,-208,734,533),1395=>array(70,-14,615,771),1396=>array(18,-14,644,771),1397=>array(-75,-208,244,519),1398=>array(56,-14,615,771),1399=>array(-11,-208,417,538),1400=>array(44,0,647,533),1401=>array(16,-208,374,540),1402=>array(18,-208,910,519),1403=>array(53,-208,566,537),1404=>array(44,0,652,533),1405=>array(18,-14,621,519),1406=>array(18,-208,708,760),1407=>array(18,-14,918,533),1408=>array(31,-208,634,533),1409=>array(53,-222,624,533),1410=>array(44,0,466,519),1411=>array(18,-208,918,760),1412=>array(40,-208,612,533),1413=>array(48,-14,576,533),1414=>array(26,-208,825,760),1415=>array(22,-14,772,760),1417=>array(93,-14,211,434),1418=>array(40,203,313,365),4256=>array(51,0,628,848),4257=>array(51,0,810,847),4258=>array(51,-81,743,848),4259=>array(51,-0,736,847),4260=>array(51,-0,652,848),4261=>array(51,-0,918,848),4262=>array(37,-1,853,847),4263=>array(61,-1,1041,847),4264=>array(37,-0,527,847),4265=>array(51,-0,685,847),4266=>array(51,-0,881,847),4267=>array(65,-0,895,847),4268=>array(51,-0,666,847),4269=>array(61,-35,984,847),4270=>array(37,-0,821,847),4271=>array(37,-0,760,846),4272=>array(51,-0,947,846),4273=>array(51,-0,662,846),4274=>array(51,-0,629,847),4275=>array(61,-58,931,846),4276=>array(51,-0,828,846),4277=>array(37,-0,923,846),4278=>array(51,-0,678,846),4279=>array(51,-0,699,846),4280=>array(61,-0,688,847),4281=>array(51,-0,699,846),4282=>array(14,-1,767,848),4283=>array(65,-0,918,847),4284=>array(51,-0,642,847),4285=>array(61,-0,679,847),4286=>array(51,-0,681,846),4287=>array(51,-0,949,846),4288=>array(51,-0,959,846),4289=>array(51,-0,670,846),4290=>array(51,-0,752,847),4291=>array(51,-1,671,846),4292=>array(51,-0,741,846),4293=>array(65,-0,906,847),4304=>array(48,0,487,596),4305=>array(48,0,514,853),4306=>array(35,-225,544,566),4307=>array(48,-220,750,556),4308=>array(31,-225,497,556),4309=>array(35,-225,501,556),4310=>array(13,0,552,855),4311=>array(48,0,775,556),4312=>array(48,0,504,556),4313=>array(22,-225,492,556),4314=>array(48,-220,960,562),4315=>array(48,0,514,854),4316=>array(62,0,527,877),4317=>array(48,-123,743,556),4318=>array(48,1,513,854),4319=>array(48,-225,514,555),4320=>array(48,-0,742,846),4321=>array(-9,0,551,854),4322=>array(15,-225,663,706),4323=>array(18,-225,620,556),4324=>array(48,-225,734,556),4325=>array(48,-225,514,855),4326=>array(48,-220,772,556),4327=>array(35,-225,502,556),4328=>array(9,0,521,854),4329=>array(62,-5,527,855),4330=>array(48,-225,612,556),4331=>array(48,0,516,854),4332=>array(40,-229,537,854),4333=>array(40,-225,528,854),4334=>array(-9,0,555,854),4335=>array(22,-225,650,556),4336=>array(48,0,515,854),4337=>array(48,0,543,863),4338=>array(48,-94,514,556),4339=>array(48,-225,515,615),4340=>array(48,-225,514,855),4341=>array(48,0,584,854),4342=>array(48,-225,798,699),4343=>array(48,-225,564,566),4344=>array(57,-225,524,556),4345=>array(48,-225,557,561),4346=>array(48,-69,514,556),4347=>array(69,-14,508,575),4348=>array(15,341,303,882),7424=>array(31,0,593,519),7425=>array(31,0,775,519),7426=>array(9,-14,809,533),7427=>array(31,0,611,519),7428=>array(37,-14,492,533),7429=>array(31,0,580,519),7430=>array(31,0,580,519),7431=>array(26,0,528,519),7432=>array(-24,-18,425,533),7433=>array(-20,-238,269,522),7434=>array(13,-14,471,519),7435=>array(31,0,639,519),7436=>array(15,0,531,519),7437=>array(31,0,751,519),7438=>array(31,0,633,519),7439=>array(37,-14,564,533),7440=>array(56,-14,511,533),7441=>array(37,-33,529,553),7442=>array(37,-2,530,521),7443=>array(22,-50,578,567),7444=>array(4,-14,853,533),7445=>array(26,-14,505,534),7446=>array(37,260,564,533),7447=>array(37,-14,564,259),7448=>array(31,0,513,519),7449=>array(50,0,665,519),7450=>array(50,0,665,519),7451=>array(29,0,516,519),7452=>array(21,-14,571,519),7453=>array(57,-74,538,596),7454=>array(49,-74,771,596),7455=>array(59,-240,539,761),7456=>array(-17,0,545,519),7457=>array(-8,0,793,519),7458=>array(31,0,481,519),7459=>array(37,-14,492,519),7460=>array(33,-14,497,742),7461=>array(26,-14,695,533),7462=>array(31,0,494,519),7463=>array(31,0,593,519),7464=>array(31,0,628,519),7465=>array(31,0,513,519),7466=>array(33,0,747,519),7467=>array(16,-14,604,519),7468=>array(-4,334,447,735),7469=>array(-18,334,557,735),7470=>array(26,334,448,735),7471=>array(21,334,466,742),7472=>array(26,334,468,735),7473=>array(26,334,403,735),7474=>array(26,334,403,735),7475=>array(23,326,439,742),7476=>array(26,334,510,735),7477=>array(26,334,239,735),7478=>array(-42,220,247,735),7479=>array(26,334,510,735),7480=>array(26,334,387,735),7481=>array(23,334,602,735),7482=>array(25,334,496,735),7483=>array(25,326,523,734),7484=>array(23,326,470,742),7485=>array(22,326,369,750),7486=>array(26,334,413,735),7487=>array(26,334,475,735),7488=>array(37,326,375,742),7489=>array(6,334,417,735),7490=>array(19,326,482,735),7491=>array(38,326,369,627),7492=>array(38,326,369,627),7493=>array(38,326,398,627),7494=>array(38,326,541,627),7495=>array(38,326,399,752),7496=>array(38,326,398,752),7497=>array(38,326,350,627),7498=>array(38,326,350,627),7499=>array(38,324,320,627),7500=>array(38,324,320,627),7501=>array(38,212,398,627),7502=>array(38,203,220,621),7503=>array(38,334,421,752),7504=>array(38,334,606,627),7505=>array(38,212,376,627),7506=>array(38,326,370,627),7507=>array(38,326,334,627),7508=>array(38,477,370,627),7509=>array(38,326,370,477),7510=>array(38,220,399,627),7511=>array(38,326,284,708),7512=>array(38,326,417,620),7513=>array(36,285,338,660),7514=>array(38,326,606,620),7515=>array(38,334,392,620),7516=>array(17,326,438,633),7517=>array(35,217,346,765),7518=>array(14,217,349,625),7519=>array(23,326,356,763),7520=>array(26,217,486,625),7521=>array(7,209,360,633),7522=>array(19,0,202,418),7523=>array(40,0,337,298),7524=>array(38,-8,417,286),7525=>array(38,0,392,286),7526=>array(35,-117,346,431),7527=>array(14,-117,349,291),7528=>array(35,-117,354,299),7529=>array(26,-117,486,291),7530=>array(7,-125,360,299),7531=>array(21,-14,896,533),7543=>array(-14,-222,558,533),7544=>array(26,334,510,735),7547=>array(31,0,320,519),7548=>array(32,0,331,519),7549=>array(21,-208,634,533),7550=>array(21,-14,571,519),7551=>array(-16,-14,627,519),7557=>array(0,-222,320,760),7579=>array(38,326,398,627),7580=>array(38,326,334,627),7581=>array(38,272,334,624),7582=>array(38,326,370,754),7583=>array(38,324,320,627),7584=>array(38,334,295,752),7585=>array(38,212,286,620),7586=>array(38,212,398,620),7587=>array(38,220,420,620),7588=>array(38,334,220,752),7589=>array(38,334,226,620),7590=>array(38,334,220,620),7591=>array(38,334,220,620),7592=>array(38,211,283,752),7593=>array(38,212,281,752),7594=>array(38,212,239,752),7595=>array(38,334,337,621),7596=>array(38,212,563,627),7597=>array(38,220,606,620),7598=>array(38,212,479,627),7599=>array(38,212,478,627),7600=>array(38,334,375,621),7601=>array(38,326,370,627),7602=>array(38,217,420,752),7603=>array(38,212,310,627),7604=>array(38,211,298,752),7605=>array(38,211,284,708),7606=>array(38,326,417,620),7607=>array(38,332,377,628),7608=>array(13,326,360,625),7609=>array(38,333,390,620),7610=>array(38,334,392,620),7611=>array(38,334,321,620),7612=>array(38,212,424,620),7613=>array(38,285,321,620),7614=>array(38,222,356,620),7615=>array(38,325,370,758),7620=>array(-363,616,-12,800),7621=>array(-438,616,-87,800),7622=>array(-363,616,-12,800),7623=>array(-438,616,-87,800),7624=>array(-464,616,14,800),7625=>array(-464,616,14,800),7680=>array(-7,-240,708,729),7681=>array(37,-240,563,533),7682=>array(42,0,711,939),7683=>array(21,-14,593,939),7684=>array(42,-213,711,729),7685=>array(21,-213,593,760),7686=>array(42,-161,711,729),7687=>array(21,-161,593,760),7688=>array(38,-196,671,927),7689=>array(37,-196,508,800),7690=>array(42,0,743,939),7691=>array(37,-14,608,939),7692=>array(42,-213,743,729),7693=>array(37,-213,608,760),7694=>array(42,-161,743,729),7695=>array(37,-161,608,760),7696=>array(42,-196,743,729),7697=>array(37,-196,608,760),7698=>array(42,-240,743,729),7699=>array(37,-240,608,760),7700=>array(42,0,640,1057),7701=>array(37,-14,532,926),7702=>array(42,0,640,1057),7703=>array(37,-14,532,926),7704=>array(42,-240,640,729),7705=>array(37,-240,532,533),7706=>array(42,-222,640,729),7707=>array(37,-222,532,533),7708=>array(42,-196,640,927),7709=>array(37,-196,532,776),7710=>array(42,0,627,939),7711=>array(27,0,436,939),7712=>array(38,-14,698,938),7713=>array(37,-222,608,756),7714=>array(42,0,810,939),7715=>array(27,0,634,939),7716=>array(42,-213,810,729),7717=>array(27,-213,634,760),7718=>array(42,0,810,939),7719=>array(-21,0,634,939),7720=>array(42,-196,810,729),7721=>array(27,-196,634,760),7722=>array(42,-221,810,729),7723=>array(27,-221,634,760),7724=>array(42,-222,380,729),7725=>array(7,-222,322,760),7726=>array(42,0,380,1057),7727=>array(8,0,334,917),7728=>array(42,0,810,931),7729=>array(31,0,639,931),7730=>array(42,-213,810,729),7731=>array(31,-213,639,760),7732=>array(42,-161,810,729),7733=>array(31,-161,639,760),7734=>array(42,-213,613,729),7735=>array(31,-213,320,760),7736=>array(42,-213,613,914),7737=>array(31,-213,320,914),7738=>array(42,-161,613,729),7739=>array(29,-161,320,760),7740=>array(42,-241,613,729),7741=>array(9,-240,341,760),7742=>array(38,0,954,931),7743=>array(31,0,932,800),7744=>array(38,0,954,937),7745=>array(31,0,932,788),7746=>array(38,-213,954,729),7747=>array(31,-213,932,533),7748=>array(40,0,787,939),7749=>array(31,0,634,788),7750=>array(40,-213,787,729),7751=>array(31,-213,634,533),7752=>array(40,-161,787,729),7753=>array(31,-161,634,533),7754=>array(40,-240,787,729),7755=>array(31,-240,634,533),7756=>array(38,-14,746,1057),7757=>array(37,-14,564,916),7758=>array(38,-14,746,1055),7759=>array(37,-14,564,912),7760=>array(38,-14,746,1057),7761=>array(37,-14,564,926),7762=>array(38,-14,746,1057),7763=>array(37,-14,564,926),7764=>array(42,0,655,927),7765=>array(21,-208,593,800),7766=>array(42,0,655,939),7767=>array(21,-208,593,788),7768=>array(42,0,753,939),7769=>array(26,0,483,788),7770=>array(42,-213,753,729),7771=>array(26,-213,483,533),7772=>array(42,-213,753,914),7773=>array(26,-213,483,756),7774=>array(42,-161,753,729),7775=>array(26,-161,483,533),7776=>array(59,-14,596,939),7777=>array(39,-14,470,788),7778=>array(59,-213,596,742),7779=>array(39,-213,470,533),7780=>array(59,-14,596,959),7781=>array(39,-14,470,777),7782=>array(59,-14,596,1065),7783=>array(39,-14,470,883),7784=>array(59,-213,596,939),7785=>array(39,-213,470,788),7786=>array(10,0,661,939),7787=>array(21,-14,412,939),7788=>array(10,-213,661,729),7789=>array(21,-213,412,680),7790=>array(10,-161,661,729),7791=>array(21,-161,412,680),7792=>array(10,-240,661,729),7793=>array(21,-240,414,680),7794=>array(31,-213,765,729),7795=>array(21,-213,624,519),7796=>array(31,-222,765,729),7797=>array(21,-222,624,519),7798=>array(31,-240,765,729),7799=>array(21,-240,624,519),7800=>array(31,-14,765,1057),7801=>array(21,-14,624,915),7802=>array(31,-14,765,1055),7803=>array(21,-14,624,930),7804=>array(-5,0,711,929),7805=>array(-17,0,545,792),7806=>array(-5,-213,711,729),7807=>array(-17,-213,545,519),7808=>array(-8,0,1021,927),7809=>array(-8,0,793,800),7810=>array(-8,0,1021,927),7811=>array(-8,0,793,800),7812=>array(-8,0,1021,939),7813=>array(-8,0,793,760),7814=>array(-8,0,1021,939),7815=>array(-8,0,793,788),7816=>array(-8,-211,1021,729),7817=>array(-8,-213,793,519),7818=>array(4,0,698,939),7819=>array(0,0,543,788),7820=>array(4,0,698,939),7821=>array(0,0,543,788),7822=>array(-8,0,651,939),7823=>array(-12,-222,545,788),7824=>array(33,0,625,927),7825=>array(31,0,481,800),7826=>array(33,-213,625,729),7827=>array(31,-213,481,519),7828=>array(33,-161,625,729),7829=>array(31,-161,481,519),7830=>array(27,-161,634,760),7831=>array(4,-14,412,939),7832=>array(-8,0,793,888),7833=>array(-12,-222,545,888),7834=>array(37,-14,813,760),7835=>array(27,0,436,939),7836=>array(1,0,436,760),7837=>array(27,0,436,760),7838=>array(31,-14,798,743),7839=>array(37,-14,564,765),7840=>array(-7,-213,708,729),7841=>array(37,-213,563,533),7842=>array(-7,0,708,1048),7843=>array(37,-14,563,866),7844=>array(-7,0,708,1054),7845=>array(37,-14,563,872),7846=>array(-7,0,708,1054),7847=>array(37,-14,563,872),7848=>array(-7,0,708,1116),7849=>array(37,-14,567,934),7850=>array(-7,0,708,1069),7851=>array(37,-14,563,887),7852=>array(-7,-213,708,927),7853=>array(37,-213,563,800),7854=>array(-7,0,708,1057),7855=>array(37,-14,563,901),7856=>array(-7,0,708,1057),7857=>array(37,-14,563,901),7858=>array(-7,0,708,1145),7859=>array(37,-14,563,989),7860=>array(-7,0,708,1069),7861=>array(37,-14,563,913),7862=>array(-7,-213,708,958),7863=>array(37,-213,563,776),7864=>array(42,-213,640,729),7865=>array(37,-213,532,533),7866=>array(42,0,640,1048),7867=>array(37,-14,532,866),7868=>array(42,0,640,950),7869=>array(37,-14,532,792),7870=>array(42,0,646,1054),7871=>array(37,-14,573,872),7872=>array(42,0,640,1054),7873=>array(37,-14,537,872),7874=>array(42,0,662,1116),7875=>array(37,-14,589,934),7876=>array(42,0,640,1069),7877=>array(37,-14,532,887),7878=>array(42,-213,640,927),7879=>array(37,-213,532,800),7880=>array(42,0,380,1048),7881=>array(31,0,320,864),7882=>array(42,-213,380,729),7883=>array(31,-213,320,760),7884=>array(38,-213,746,742),7885=>array(37,-213,564,533),7886=>array(38,-14,746,1048),7887=>array(37,-14,564,866),7888=>array(38,-14,746,1054),7889=>array(37,-14,588,872),7890=>array(38,-14,746,1054),7891=>array(37,-14,564,872),7892=>array(38,-14,746,1116),7893=>array(37,-14,604,934),7894=>array(38,-14,746,1069),7895=>array(37,-14,564,887),7896=>array(38,-213,746,982),7897=>array(37,-213,564,800),7898=>array(37,-14,784,927),7899=>array(37,-14,671,800),7900=>array(37,-14,784,927),7901=>array(37,-14,671,800),7902=>array(37,-14,784,1048),7903=>array(37,-14,671,866),7904=>array(37,-14,784,929),7905=>array(37,-14,671,792),7906=>array(37,-213,784,758),7907=>array(37,-213,671,548),7908=>array(31,-213,765,729),7909=>array(21,-213,624,519),7910=>array(31,-14,765,1048),7911=>array(21,-14,624,866),7912=>array(33,-14,944,927),7913=>array(22,-14,725,800),7914=>array(33,-14,944,927),7915=>array(22,-14,725,800),7916=>array(33,-14,944,1048),7917=>array(22,-14,725,866),7918=>array(33,-14,944,929),7919=>array(22,-14,725,792),7920=>array(33,-213,944,816),7921=>array(22,-213,725,548),7922=>array(-8,0,651,931),7923=>array(-12,-222,545,776),7924=>array(-8,-213,651,729),7925=>array(-12,-222,545,519),7926=>array(-8,0,651,1051),7927=>array(-12,-222,545,866),7928=>array(-8,0,651,929),7929=>array(-12,-222,545,792),7930=>array(42,0,951,729),7931=>array(31,0,608,760),7936=>array(37,-14,671,837),7937=>array(37,-14,671,837),7938=>array(37,-14,671,837),7939=>array(37,-14,671,837),7940=>array(37,-14,671,837),7941=>array(37,-14,671,837),7942=>array(37,-14,671,1009),7943=>array(37,-14,671,1009),7944=>array(-7,0,708,837),7945=>array(-7,0,708,837),7946=>array(2,0,891,837),7947=>array(1,0,891,837),7948=>array(1,0,759,837),7949=>array(2,0,774,837),7950=>array(-7,0,708,1009),7951=>array(-7,0,708,1009),7952=>array(43,-12,499,837),7953=>array(43,-12,499,837),7954=>array(43,-12,499,837),7955=>array(43,-12,499,837),7956=>array(43,-12,499,837),7957=>array(43,-12,499,837),7960=>array(3,0,780,837),7961=>array(2,0,772,837),7962=>array(2,0,1006,837),7963=>array(1,0,1006,837),7964=>array(1,0,938,837),7965=>array(2,0,962,837),7968=>array(31,-208,567,837),7969=>array(31,-208,567,837),7970=>array(31,-208,567,837),7971=>array(31,-208,567,837),7972=>array(31,-208,567,837),7973=>array(31,-208,567,837),7974=>array(31,-208,567,1009),7975=>array(31,-208,567,1009),7976=>array(3,0,950,837),7977=>array(2,0,945,837),7978=>array(2,0,1182,837),7979=>array(1,0,1185,837),7980=>array(1,0,1111,837),7981=>array(2,0,1137,837),7982=>array(2,0,1037,1009),7983=>array(3,0,1034,1009),7984=>array(31,16,400,837),7985=>array(31,16,400,837),7986=>array(-13,16,400,837),7987=>array(-13,16,400,837),7988=>array(12,16,400,837),7989=>array(-2,16,400,837),7990=>array(25,16,400,1009),7991=>array(21,16,400,1009),7992=>array(3,0,525,837),7993=>array(2,0,514,837),7994=>array(2,0,749,837),7995=>array(1,0,751,837),7996=>array(1,0,678,837),7997=>array(2,0,707,837),7998=>array(2,0,609,1009),7999=>array(3,0,602,1009),8000=>array(37,-14,564,837),8001=>array(37,-14,564,837),8002=>array(37,-14,564,837),8003=>array(37,-14,564,837),8004=>array(37,-14,564,837),8005=>array(37,-14,564,837),8008=>array(3,-14,772,837),8009=>array(2,-14,803,837),8010=>array(2,-14,1077,837),8011=>array(1,-14,1075,837),8012=>array(1,-14,893,837),8013=>array(2,-14,921,837),8016=>array(31,-1,589,837),8017=>array(31,-1,589,837),8018=>array(31,-1,589,837),8019=>array(31,-1,589,837),8020=>array(31,-1,589,837),8021=>array(31,-1,589,837),8022=>array(31,-1,589,1009),8023=>array(31,-1,589,1009),8025=>array(2,0,838,837),8027=>array(1,0,1076,837),8029=>array(2,0,1028,837),8031=>array(3,0,925,1009),8032=>array(35,-1,820,837),8033=>array(35,-1,820,837),8034=>array(35,-1,820,837),8035=>array(35,-1,820,837),8036=>array(35,-1,820,837),8037=>array(35,-1,820,837),8038=>array(35,-1,820,1009),8039=>array(35,-1,820,1009),8040=>array(3,0,798,837),8041=>array(2,0,827,837),8042=>array(2,0,1101,837),8043=>array(1,0,1106,837),8044=>array(1,0,909,837),8045=>array(2,0,939,837),8046=>array(2,0,880,1009),8047=>array(3,0,914,1009),8048=>array(37,-14,671,800),8049=>array(37,-14,671,800),8050=>array(43,-12,499,800),8051=>array(43,-12,499,800),8052=>array(31,-208,567,800),8053=>array(31,-208,567,800),8054=>array(12,16,400,800),8055=>array(31,16,400,800),8056=>array(37,-14,564,800),8057=>array(37,-14,564,800),8058=>array(31,-1,589,800),8059=>array(31,-1,589,800),8060=>array(35,-1,820,800),8061=>array(35,-1,820,800),8064=>array(37,-208,671,837),8065=>array(37,-208,671,837),8066=>array(37,-208,671,837),8067=>array(37,-208,671,837),8068=>array(37,-208,671,837),8069=>array(37,-208,671,837),8070=>array(37,-208,671,1009),8071=>array(37,-208,671,1009),8072=>array(-7,-208,708,837),8073=>array(-7,-208,708,837),8074=>array(2,-208,891,837),8075=>array(1,-208,891,837),8076=>array(1,-208,759,837),8077=>array(2,-208,774,837),8078=>array(-7,-208,708,1009),8079=>array(-7,-208,708,1009),8080=>array(31,-208,567,837),8081=>array(31,-208,567,837),8082=>array(31,-208,567,837),8083=>array(31,-208,567,837),8084=>array(31,-208,567,837),8085=>array(31,-208,567,837),8086=>array(31,-208,567,1009),8087=>array(31,-208,567,1009),8088=>array(3,-208,950,837),8089=>array(2,-208,945,837),8090=>array(2,-208,1182,837),8091=>array(1,-208,1185,837),8092=>array(1,-208,1111,837),8093=>array(2,-208,1137,837),8094=>array(2,-208,1037,1009),8095=>array(3,-208,1034,1009),8096=>array(35,-208,820,837),8097=>array(35,-208,820,837),8098=>array(35,-208,820,837),8099=>array(35,-208,820,837),8100=>array(35,-208,820,837),8101=>array(35,-208,820,837),8102=>array(35,-208,820,1009),8103=>array(35,-208,820,1009),8104=>array(3,-208,798,837),8105=>array(2,-208,827,837),8106=>array(2,-208,1101,837),8107=>array(1,-208,1106,837),8108=>array(1,-208,909,837),8109=>array(2,-208,939,837),8110=>array(2,-208,880,1009),8111=>array(3,-208,914,1009),8112=>array(37,-14,671,776),8113=>array(37,-14,671,756),8114=>array(37,-208,671,800),8115=>array(37,-208,671,532),8116=>array(37,-208,671,800),8118=>array(37,-14,671,792),8119=>array(37,-208,671,792),8120=>array(-7,0,708,936),8121=>array(-7,0,708,914),8122=>array(1,0,740,800),8123=>array(-7,0,708,800),8124=>array(-7,-208,708,729),8125=>array(150,596,287,837),8126=>array(182,-208,313,-60),8127=>array(150,596,287,837),8128=>array(67,638,382,792),8129=>array(62,645,388,959),8130=>array(31,-208,567,800),8131=>array(31,-208,567,533),8132=>array(31,-208,567,800),8134=>array(31,-208,567,792),8135=>array(31,-208,567,792),8136=>array(1,0,854,800),8137=>array(-14,0,804,800),8138=>array(1,0,1032,800),8139=>array(-14,0,976,800),8140=>array(42,-208,810,729),8141=>array(39,596,425,837),8142=>array(51,596,400,837),8143=>array(67,596,382,1009),8144=>array(28,16,400,776),8145=>array(31,16,400,756),8146=>array(2,16,400,997),8147=>array(7,16,400,996),8150=>array(17,16,400,792),8151=>array(12,16,400,959),8152=>array(42,0,380,927),8153=>array(42,0,380,914),8154=>array(1,0,602,800),8155=>array(-14,0,546,800),8157=>array(38,596,425,837),8158=>array(37,596,409,837),8159=>array(67,596,382,1009),8160=>array(31,-1,589,776),8161=>array(31,-1,589,756),8162=>array(31,-1,589,997),8163=>array(31,-1,589,996),8164=>array(57,-208,563,837),8165=>array(57,-208,563,837),8166=>array(31,-1,589,792),8167=>array(31,-1,589,959),8168=>array(-8,0,651,927),8169=>array(-8,0,651,914),8170=>array(1,0,925,800),8171=>array(-14,0,865,800),8172=>array(2,0,797,837),8173=>array(53,645,388,997),8174=>array(62,645,396,996),8175=>array(62,616,298,800),8178=>array(35,-208,820,800),8179=>array(35,-208,820,519),8180=>array(35,-208,820,800),8182=>array(35,-1,820,746),8183=>array(35,-208,820,746),8184=>array(1,-14,923,800),8185=>array(-14,-14,760,800),8186=>array(1,0,951,800),8187=>array(-14,0,782,800),8188=>array(40,-208,761,742),8189=>array(152,616,388,800),8190=>array(152,596,289,837),8208=>array(48,202,325,334),8209=>array(48,202,325,334),8210=>array(48,207,578,324),8211=>array(48,207,402,324),8212=>array(48,207,852,324),8213=>array(0,207,900,324),8214=>array(116,-236,356,764),8215=>array(0,-236,450,-9),8216=>array(62,456,261,742),8217=>array(43,443,242,729),8218=>array(26,-130,226,156),8219=>array(43,443,242,729),8220=>array(62,456,466,742),8221=>array(43,443,447,729),8222=>array(26,-130,431,156),8223=>array(43,443,447,729),8224=>array(25,-96,446,729),8225=>array(25,-96,446,729),8226=>array(129,196,446,547),8227=>array(129,157,481,586),8228=>array(73,-14,241,172),8229=>array(73,-14,534,172),8230=>array(73,-14,827,172),8240=>array(21,-14,1225,742),8241=>array(21,-14,1617,742),8242=>array(18,547,216,729),8243=>array(18,547,381,729),8244=>array(18,547,545,729),8245=>array(18,547,216,729),8246=>array(18,547,383,729),8247=>array(18,547,545,729),8248=>array(91,-238,569,29),8249=>array(69,64,276,522),8250=>array(84,64,291,522),8252=>array(58,-14,506,729),8253=>array(58,-14,487,742),8254=>array(0,663,450,755),8258=>array(20,-37,901,832),8260=>array(-167,-14,318,742),8261=>array(112,-132,362,760),8262=>array(63,-132,313,760),8263=>array(29,-14,945,742),8264=>array(58,-14,712,742),8265=>array(58,-14,712,742),8267=>array(64,-96,518,729),8268=>array(67,189,382,541),8269=>array(67,189,382,541),8270=>array(20,0,451,464),8271=>array(23,-161,250,490),8273=>array(47,-14,396,797),8274=>array(8,-93,467,729),8275=>array(44,221,856,406),8279=>array(18,547,710,729),8304=>array(26,326,369,742),8305=>array(19,334,202,752),8308=>array(21,334,364,742),8309=>array(46,326,353,742),8310=>array(36,326,365,742),8311=>array(44,334,349,742),8312=>array(29,326,365,742),8313=>array(31,326,360,742),8314=>array(60,334,415,679),8315=>array(60,475,415,537),8316=>array(60,415,415,598),8317=>array(53,249,239,752),8318=>array(29,249,215,752),8319=>array(42,334,434,632),8320=>array(26,0,369,416),8321=>array(63,8,333,416),8322=>array(38,8,344,416),8323=>array(40,0,358,416),8324=>array(21,8,364,416),8325=>array(46,0,353,416),8326=>array(36,0,365,416),8327=>array(44,8,349,416),8328=>array(29,0,365,416),8329=>array(31,0,360,416),8330=>array(60,8,415,353),8331=>array(60,149,415,211),8332=>array(60,89,415,272),8333=>array(53,-78,239,426),8334=>array(29,-78,215,426),8336=>array(38,0,369,301),8337=>array(38,0,350,301),8338=>array(38,0,370,301),8339=>array(40,8,393,298),8340=>array(38,0,350,301),8341=>array(40,8,434,433),8342=>array(38,8,421,426),8343=>array(40,8,228,433),8344=>array(38,8,606,301),8345=>array(42,8,434,306),8346=>array(38,-106,399,301),8347=>array(40,9,320,315),8348=>array(38,0,284,382),8358=>array(19,0,607,729),8364=>array(-4,-14,584,742),8367=>array(18,-193,1022,723),8369=>array(42,0,685,729),8372=>array(19,-14,770,742),8373=>array(73,-146,584,761),8376=>array(10,0,661,729),8377=>array(41,0,590,729),8451=>array(34,-14,1033,749),8457=>array(34,0,989,749),8462=>array(30,0,578,760),8463=>array(31,0,578,760),8470=>array(35,-14,936,731),8482=>array(104,447,756,729),8486=>array(40,0,761,742),8487=>array(40,-13,761,729),8490=>array(42,0,810,729),8491=>array(-7,0,708,928),8498=>array(12,0,597,729),8513=>array(22,-14,650,742),8514=>array(8,0,475,729),8515=>array(39,0,505,729),8516=>array(0,0,670,729),8523=>array(14,-14,774,742),8526=>array(10,0,507,519),8528=>array(53,-14,893,742),8529=>array(53,-14,905,742),8530=>array(53,-14,1308,742),8531=>array(53,-14,903,742),8532=>array(38,-14,903,742),8533=>array(53,-14,897,742),8534=>array(38,-14,897,742),8535=>array(40,-14,897,742),8536=>array(21,-14,897,742),8537=>array(53,-14,910,742),8538=>array(46,-14,910,742),8539=>array(53,-14,910,742),8540=>array(40,-14,910,742),8541=>array(46,-14,910,742),8542=>array(44,-14,910,742),8543=>array(53,-14,721,742),8544=>array(42,0,380,729),8545=>array(42,0,622,729),8546=>array(42,0,863,729),8547=>array(42,0,997,729),8548=>array(-5,0,711,729),8549=>array(-5,0,973,729),8550=>array(-5,0,1215,729),8551=>array(-5,0,1457,729),8552=>array(42,0,961,729),8553=>array(4,0,698,729),8554=>array(4,0,929,729),8555=>array(4,0,1171,729),8556=>array(42,0,613,729),8557=>array(38,-14,671,742),8558=>array(42,0,743,729),8559=>array(38,0,954,729),8560=>array(31,0,320,760),8561=>array(31,0,662,760),8562=>array(31,0,1003,760),8563=>array(31,0,888,760),8564=>array(-17,0,545,519),8565=>array(-17,0,843,760),8566=>array(-17,0,1185,760),8567=>array(-17,0,1526,760),8568=>array(31,0,885,760),8569=>array(0,0,543,519),8570=>array(0,0,856,760),8571=>array(0,0,1198,760),8572=>array(31,0,320,760),8573=>array(37,-14,508,533),8574=>array(37,-14,608,760),8575=>array(31,0,932,533),8576=>array(42,0,1106,729),8577=>array(42,0,743,729),8578=>array(42,0,1106,729),8579=>array(38,-14,671,742),8580=>array(37,-14,508,533),8581=>array(38,-208,671,742),8585=>array(26,-14,903,742),8592=>array(33,119,703,527),8593=>array(193,0,561,744),8594=>array(51,119,721,527),8595=>array(193,-20,561,724),8596=>array(33,119,721,527),8597=>array(193,-20,561,744),8598=>array(132,29,642,595),8599=>array(112,29,622,595),8600=>array(112,52,622,617),8601=>array(132,52,642,617),8602=>array(33,88,703,558),8603=>array(51,88,721,558),8604=>array(48,191,716,499),8605=>array(38,191,706,499),8606=>array(33,119,703,527),8607=>array(193,0,561,744),8608=>array(51,119,721,527),8609=>array(193,-20,561,724),8610=>array(33,118,710,529),8611=>array(44,118,721,529),8612=>array(33,119,703,527),8613=>array(193,0,561,744),8614=>array(51,119,721,527),8615=>array(193,-20,561,724),8616=>array(193,0,561,744),8617=>array(33,119,703,571),8618=>array(51,119,721,571),8619=>array(33,119,703,571),8620=>array(51,119,721,571),8621=>array(33,119,721,527),8622=>array(33,88,721,558),8623=>array(154,-17,629,730),8624=>array(187,0,549,744),8625=>array(205,0,567,744),8626=>array(187,-20,549,724),8627=>array(205,-20,567,724),8628=>array(117,90,655,614),8629=>array(132,53,604,650),8630=>array(68,141,672,569),8631=>array(82,141,686,569),8632=>array(119,29,642,736),8633=>array(51,-52,703,698),8634=>array(103,48,660,600),8635=>array(94,48,651,600),8636=>array(31,270,703,527),8637=>array(31,119,703,377),8638=>array(329,0,561,747),8639=>array(193,0,426,747),8640=>array(51,270,724,527),8641=>array(51,119,724,377),8642=>array(329,-23,561,724),8643=>array(193,-23,426,724),8644=>array(33,-52,721,698),8645=>array(40,-20,715,744),8646=>array(33,-52,721,698),8647=>array(33,-101,703,747),8648=>array(-4,0,759,744),8649=>array(51,-101,721,747),8650=>array(-4,-20,759,724),8651=>array(31,21,724,625),8652=>array(31,21,724,625),8653=>array(33,88,703,558),8654=>array(33,88,721,558),8655=>array(51,88,721,558),8656=>array(33,119,703,527),8657=>array(193,0,561,744),8658=>array(51,119,721,527),8659=>array(193,-20,561,724),8660=>array(33,119,721,527),8661=>array(193,-20,561,744),8662=>array(132,-31,696,595),8663=>array(58,-31,622,595),8664=>array(58,52,622,677),8665=>array(132,52,696,677),8666=>array(33,70,703,576),8667=>array(51,70,721,576),8668=>array(33,119,703,527),8669=>array(51,119,721,527),8670=>array(193,0,561,744),8671=>array(193,-20,561,724),8672=>array(33,119,703,527),8673=>array(193,0,561,744),8674=>array(51,119,721,527),8675=>array(193,-20,561,724),8676=>array(51,119,703,527),8677=>array(51,119,703,527),8678=>array(33,119,703,527),8679=>array(193,0,561,744),8680=>array(51,119,721,527),8681=>array(193,-20,561,724),8682=>array(193,0,561,744),8683=>array(172,0,582,744),8684=>array(172,0,582,744),8685=>array(172,0,582,744),8686=>array(193,0,561,744),8687=>array(172,0,582,744),8688=>array(51,96,721,550),8689=>array(69,0,690,694),8690=>array(64,0,686,694),8691=>array(193,-20,561,744),8692=>array(51,119,721,527),8693=>array(40,-20,715,744),8694=>array(51,-140,721,786),8695=>array(33,119,703,527),8696=>array(51,119,721,527),8697=>array(33,119,721,527),8698=>array(33,119,703,527),8699=>array(51,119,721,527),8700=>array(33,119,721,527),8701=>array(33,119,703,527),8702=>array(51,119,721,527),8703=>array(33,119,721,527),8704=>array(4,0,573,729),8706=>array(33,-12,449,659),8707=>array(63,0,479,729),8708=>array(63,-120,479,849),8710=>array(18,0,661,729),8711=>array(18,0,661,729),8712=>array(95,0,571,627),8713=>array(95,-138,571,765),8715=>array(95,0,571,627),8716=>array(95,-138,571,765),8719=>array(21,-192,734,719),8720=>array(21,-192,734,719),8721=>array(9,-192,661,719),8722=>array(95,257,659,369),8723=>array(95,0,659,627),8724=>array(95,0,659,681),8725=>array(0,-93,329,729),8727=>array(95,82,527,546),8728=>array(95,161,372,468),8729=>array(95,161,372,468),8730=>array(31,-20,593,827),8731=>array(31,-20,593,940),8732=>array(29,-20,593,928),8733=>array(90,97,515,499),8734=>array(90,97,661,499),8735=>array(106,79,648,681),8736=>array(106,79,648,681),8739=>array(95,-98,197,827),8740=>array(78,-98,469,827),8741=>array(95,-98,381,827),8742=>array(78,-98,619,827),8743=>array(136,0,595,584),8744=>array(136,0,595,584),8745=>array(95,0,659,627),8746=>array(95,-12,659,615),8747=>array(21,-182,500,759),8748=>array(21,-182,852,759),8749=>array(21,-182,1203,759),8760=>array(95,258,659,567),8761=>array(95,60,659,567),8762=>array(95,60,659,567),8763=>array(95,60,659,567),8764=>array(95,222,659,406),8765=>array(95,222,659,406),8770=>array(95,119,659,480),8771=>array(95,147,659,508),8776=>array(95,119,659,508),8784=>array(95,147,659,717),8785=>array(95,-90,659,717),8786=>array(95,-90,659,717),8787=>array(95,-90,659,717),8788=>array(95,110,879,518),8789=>array(95,110,879,518),8800=>array(95,-5,659,631),8801=>array(95,91,659,536),8804=>array(95,0,659,580),8805=>array(95,0,659,580),8834=>array(95,0,659,627),8835=>array(95,0,659,627),8836=>array(95,-138,659,765),8837=>array(95,-138,659,765),8838=>array(95,-85,659,712),8839=>array(95,-85,659,712),8844=>array(95,-12,659,615),8845=>array(95,-12,659,615),8846=>array(95,-12,659,615),8847=>array(95,1,659,627),8848=>array(95,1,659,627),8849=>array(95,-85,659,712),8850=>array(95,-85,659,712),8851=>array(95,0,659,627),8852=>array(95,0,659,627),8853=>array(95,0,659,627),8854=>array(95,0,659,627),8855=>array(95,0,659,627),8856=>array(95,0,659,627),8857=>array(95,0,659,627),8858=>array(95,0,659,627),8859=>array(95,0,659,627),8860=>array(95,0,659,627),8861=>array(95,0,659,627),8862=>array(95,1,659,627),8863=>array(95,1,659,627),8864=>array(95,1,659,627),8865=>array(95,1,659,627),8866=>array(95,0,701,729),8867=>array(95,0,701,729),8868=>array(95,0,769,688),8869=>array(95,0,769,688),8870=>array(95,0,459,729),8871=>array(95,0,459,729),8872=>array(95,0,701,729),8873=>array(95,0,701,729),8874=>array(95,0,701,729),8875=>array(95,0,876,729),8876=>array(95,-123,701,852),8877=>array(95,-123,701,852),8878=>array(95,-123,701,852),8879=>array(95,-123,876,852),8901=>array(95,255,263,440),8962=>array(64,0,687,596),8968=>array(112,-132,362,760),8969=>array(63,-132,313,760),8970=>array(112,-132,362,760),8971=>array(63,-132,313,760),8976=>array(95,140,659,441),8977=>array(2,113,482,646),8984=>array(76,0,759,759),8985=>array(95,140,659,441),8992=>array(203,-250,500,925),8993=>array(20,-239,316,940),8997=>array(76,0,824,723),9000=>array(53,0,1247,729),9085=>array(11,-228,896,85),9115=>array(56,-252,394,928),9116=>array(56,-252,185,940),9117=>array(56,-240,394,940),9118=>array(56,-252,394,928),9119=>array(266,-252,394,940),9120=>array(56,-240,394,940),9121=>array(56,-252,394,928),9122=>array(56,-252,185,940),9123=>array(56,-240,394,940),9124=>array(56,-252,394,928),9125=>array(266,-252,394,940),9126=>array(56,-240,394,940),9127=>array(275,-261,602,928),9128=>array(74,-247,400,934),9129=>array(275,-240,602,934),9130=>array(275,-256,400,934),9131=>array(74,-261,400,928),9132=>array(275,-247,602,934),9133=>array(74,-240,400,934),9134=>array(203,-250,316,940),9167=>array(82,0,769,596),9251=>array(64,-228,687,85),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,701,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-124,769,643),9633=>array(82,-124,769,643),9634=>array(82,-124,769,643),9635=>array(82,-124,769,643),9636=>array(82,-124,769,643),9637=>array(82,-124,769,643),9638=>array(82,-124,769,643),9639=>array(82,-124,769,643),9640=>array(82,-124,769,643),9641=>array(82,-124,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-124,690,643),9651=>array(2,-124,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-124,690,643),9655=>array(2,-124,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-124,690,643),9661=>array(2,-124,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-124,690,643),9665=>array(2,-124,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-124,690,643),9671=>array(2,-124,690,643),9672=>array(2,-124,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,630,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(49,260,736,645),9697=>array(49,-125,736,260),9698=>array(2,-124,690,643),9699=>array(2,-124,690,643),9700=>array(2,-124,690,643),9701=>array(2,-124,690,643),9702=>array(135,227,396,516),9703=>array(82,-124,769,643),9704=>array(82,-124,769,643),9705=>array(82,-124,769,643),9706=>array(82,-124,769,643),9707=>array(82,-124,769,643),9708=>array(2,-124,690,643),9709=>array(2,-124,690,643),9710=>array(2,-124,690,643),9711=>array(49,-250,958,770),9712=>array(82,-124,769,643),9713=>array(82,-124,769,643),9714=>array(82,-124,769,643),9715=>array(82,-124,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-124,690,643),9721=>array(2,-124,690,643),9722=>array(2,-124,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-124,690,643),9728=>array(75,0,731,729),9784=>array(71,3,735,721),9785=>array(75,0,732,730),9786=>array(75,0,732,730),9787=>array(75,0,732,730),9788=>array(75,0,732,730),9791=>array(77,-102,476,732),9792=>array(77,-125,581,731),9793=>array(77,-125,581,731),9794=>array(77,-5,748,729),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),10145=>array(51,119,721,527),10181=>array(48,-163,365,769),10182=>array(48,-163,365,769),10208=>array(2,-233,442,807),10216=>array(94,-132,339,759),10217=>array(72,-132,317,759),10224=>array(62,0,693,744),10225=>array(62,-20,693,724),10226=>array(68,48,672,618),10227=>array(82,48,686,618),10228=>array(51,39,896,608),10229=>array(33,119,1239,527),10230=>array(51,119,1257,527),10231=>array(33,119,1257,527),10232=>array(33,119,1239,527),10233=>array(51,119,1257,527),10234=>array(33,119,1257,527),10235=>array(33,119,1239,527),10236=>array(51,119,1257,527),10237=>array(33,119,1239,527),10238=>array(51,119,1257,527),10239=>array(51,119,1257,527),10241=>array(132,586,308,781),10242=>array(132,325,308,521),10243=>array(132,325,308,781),10244=>array(132,65,308,260),10245=>array(132,65,308,781),10246=>array(132,65,308,521),10247=>array(132,65,308,781),10248=>array(396,586,571,781),10249=>array(132,586,571,781),10250=>array(132,325,571,781),10251=>array(132,325,571,781),10252=>array(132,65,571,781),10253=>array(132,65,571,781),10254=>array(132,65,571,781),10255=>array(132,65,571,781),10256=>array(396,325,571,521),10257=>array(132,325,571,781),10258=>array(132,325,571,521),10259=>array(132,325,571,781),10260=>array(132,65,571,521),10261=>array(132,65,571,781),10262=>array(132,65,571,521),10263=>array(132,65,571,781),10264=>array(396,325,571,781),10265=>array(132,325,571,781),10266=>array(132,325,571,781),10267=>array(132,325,571,781),10268=>array(132,65,571,781),10269=>array(132,65,571,781),10270=>array(132,65,571,781),10271=>array(132,65,571,781),10272=>array(396,65,571,260),10273=>array(132,65,571,781),10274=>array(132,65,571,521),10275=>array(132,65,571,781),10276=>array(132,65,571,260),10277=>array(132,65,571,781),10278=>array(132,65,571,521),10279=>array(132,65,571,781),10280=>array(396,65,571,781),10281=>array(132,65,571,781),10282=>array(132,65,571,781),10283=>array(132,65,571,781),10284=>array(132,65,571,781),10285=>array(132,65,571,781),10286=>array(132,65,571,781),10287=>array(132,65,571,781),10288=>array(396,65,571,521),10289=>array(132,65,571,781),10290=>array(132,65,571,521),10291=>array(132,65,571,781),10292=>array(132,65,571,521),10293=>array(132,65,571,781),10294=>array(132,65,571,521),10295=>array(132,65,571,781),10296=>array(396,65,571,781),10297=>array(132,65,571,781),10298=>array(132,65,571,781),10299=>array(132,65,571,781),10300=>array(132,65,571,781),10301=>array(132,65,571,781),10302=>array(132,65,571,781),10303=>array(132,65,571,781),10304=>array(132,-195,308,0),10305=>array(132,-195,308,781),10306=>array(132,-195,308,521),10307=>array(132,-195,308,781),10308=>array(132,-195,308,260),10309=>array(132,-195,308,781),10310=>array(132,-195,308,521),10311=>array(132,-195,308,781),10312=>array(132,-195,571,781),10313=>array(132,-195,571,781),10314=>array(132,-195,571,781),10315=>array(132,-195,571,781),10316=>array(132,-195,571,781),10317=>array(132,-195,571,781),10318=>array(132,-195,571,781),10319=>array(132,-195,571,781),10320=>array(132,-195,571,521),10321=>array(132,-195,571,781),10322=>array(132,-195,571,521),10323=>array(132,-195,571,781),10324=>array(132,-195,571,521),10325=>array(132,-195,571,781),10326=>array(132,-195,571,521),10327=>array(132,-195,571,781),10328=>array(132,-195,571,781),10329=>array(132,-195,571,781),10330=>array(132,-195,571,781),10331=>array(132,-195,571,781),10332=>array(132,-195,571,781),10333=>array(132,-195,571,781),10334=>array(132,-195,571,781),10335=>array(132,-195,571,781),10336=>array(132,-195,571,260),10337=>array(132,-195,571,781),10338=>array(132,-195,571,521),10339=>array(132,-195,571,781),10340=>array(132,-195,571,260),10341=>array(132,-195,571,781),10342=>array(132,-195,571,521),10343=>array(132,-195,571,781),10344=>array(132,-195,571,781),10345=>array(132,-195,571,781),10346=>array(132,-195,571,781),10347=>array(132,-195,571,781),10348=>array(132,-195,571,781),10349=>array(132,-195,571,781),10350=>array(132,-195,571,781),10351=>array(132,-195,571,781),10352=>array(132,-195,571,521),10353=>array(132,-195,571,781),10354=>array(132,-195,571,521),10355=>array(132,-195,571,781),10356=>array(132,-195,571,521),10357=>array(132,-195,571,781),10358=>array(132,-195,571,521),10359=>array(132,-195,571,781),10360=>array(132,-195,571,781),10361=>array(132,-195,571,781),10362=>array(132,-195,571,781),10363=>array(132,-195,571,781),10364=>array(132,-195,571,781),10365=>array(132,-195,571,781),10366=>array(132,-195,571,781),10367=>array(132,-195,571,781),10368=>array(396,-195,571,0),10369=>array(132,-195,571,781),10370=>array(132,-195,571,521),10371=>array(132,-195,571,781),10372=>array(132,-195,571,260),10373=>array(132,-195,571,781),10374=>array(132,-195,571,521),10375=>array(132,-195,571,781),10376=>array(396,-195,571,781),10377=>array(132,-195,571,781),10378=>array(132,-195,571,781),10379=>array(132,-195,571,781),10380=>array(132,-195,571,781),10381=>array(132,-195,571,781),10382=>array(132,-195,571,781),10383=>array(132,-195,571,781),10384=>array(396,-195,571,521),10385=>array(132,-195,571,781),10386=>array(132,-195,571,521),10387=>array(132,-195,571,781),10388=>array(132,-195,571,521),10389=>array(132,-195,571,781),10390=>array(132,-195,571,521),10391=>array(132,-195,571,781),10392=>array(396,-195,571,781),10393=>array(132,-195,571,781),10394=>array(132,-195,571,781),10395=>array(132,-195,571,781),10396=>array(132,-195,571,781),10397=>array(132,-195,571,781),10398=>array(132,-195,571,781),10399=>array(132,-195,571,781),10400=>array(396,-195,571,260),10401=>array(132,-195,571,781),10402=>array(132,-195,571,521),10403=>array(132,-195,571,781),10404=>array(132,-195,571,260),10405=>array(132,-195,571,781),10406=>array(132,-195,571,521),10407=>array(132,-195,571,781),10408=>array(396,-195,571,781),10409=>array(132,-195,571,781),10410=>array(132,-195,571,781),10411=>array(132,-195,571,781),10412=>array(132,-195,571,781),10413=>array(132,-195,571,781),10414=>array(132,-195,571,781),10415=>array(132,-195,571,781),10416=>array(396,-195,571,521),10417=>array(132,-195,571,781),10418=>array(132,-195,571,521),10419=>array(132,-195,571,781),10420=>array(132,-195,571,521),10421=>array(132,-195,571,781),10422=>array(132,-195,571,521),10423=>array(132,-195,571,781),10424=>array(396,-195,571,781),10425=>array(132,-195,571,781),10426=>array(132,-195,571,781),10427=>array(132,-195,571,781),10428=>array(132,-195,571,781),10429=>array(132,-195,571,781),10430=>array(132,-195,571,781),10431=>array(132,-195,571,781),10432=>array(132,-195,571,0),10433=>array(132,-195,571,781),10434=>array(132,-195,571,521),10435=>array(132,-195,571,781),10436=>array(132,-195,571,260),10437=>array(132,-195,571,781),10438=>array(132,-195,571,521),10439=>array(132,-195,571,781),10440=>array(132,-195,571,781),10441=>array(132,-195,571,781),10442=>array(132,-195,571,781),10443=>array(132,-195,571,781),10444=>array(132,-195,571,781),10445=>array(132,-195,571,781),10446=>array(132,-195,571,781),10447=>array(132,-195,571,781),10448=>array(132,-195,571,521),10449=>array(132,-195,571,781),10450=>array(132,-195,571,521),10451=>array(132,-195,571,781),10452=>array(132,-195,571,521),10453=>array(132,-195,571,781),10454=>array(132,-195,571,521),10455=>array(132,-195,571,781),10456=>array(132,-195,571,781),10457=>array(132,-195,571,781),10458=>array(132,-195,571,781),10459=>array(132,-195,571,781),10460=>array(132,-195,571,781),10461=>array(132,-195,571,781),10462=>array(132,-195,571,781),10463=>array(132,-195,571,781),10464=>array(132,-195,571,260),10465=>array(132,-195,571,781),10466=>array(132,-195,571,521),10467=>array(132,-195,571,781),10468=>array(132,-195,571,260),10469=>array(132,-195,571,781),10470=>array(132,-195,571,521),10471=>array(132,-195,571,781),10472=>array(132,-195,571,781),10473=>array(132,-195,571,781),10474=>array(132,-195,571,781),10475=>array(132,-195,571,781),10476=>array(132,-195,571,781),10477=>array(132,-195,571,781),10478=>array(132,-195,571,781),10479=>array(132,-195,571,781),10480=>array(132,-195,571,521),10481=>array(132,-195,571,781),10482=>array(132,-195,571,521),10483=>array(132,-195,571,781),10484=>array(132,-195,571,521),10485=>array(132,-195,571,781),10486=>array(132,-195,571,521),10487=>array(132,-195,571,781),10488=>array(132,-195,571,781),10489=>array(132,-195,571,781),10490=>array(132,-195,571,781),10491=>array(132,-195,571,781),10492=>array(132,-195,571,781),10493=>array(132,-195,571,781),10494=>array(132,-195,571,781),10495=>array(132,-195,571,781),10496=>array(51,119,721,527),10497=>array(51,119,721,527),10498=>array(33,119,703,527),10499=>array(51,119,721,527),10500=>array(33,119,721,527),10501=>array(51,119,721,527),10502=>array(33,119,703,527),10503=>array(51,119,721,527),10504=>array(193,-20,561,724),10505=>array(193,0,561,744),10506=>array(149,0,605,744),10507=>array(149,-20,605,724),10508=>array(33,119,703,527),10509=>array(51,119,721,527),10510=>array(33,119,703,527),10511=>array(51,119,721,527),10512=>array(44,118,721,529),10513=>array(48,119,721,527),10514=>array(193,0,561,724),10515=>array(193,0,561,724),10516=>array(44,118,721,529),10517=>array(44,118,721,529),10518=>array(44,118,721,529),10519=>array(44,118,721,529),10520=>array(44,118,721,529),10521=>array(51,118,710,529),10522=>array(44,118,703,529),10523=>array(51,118,710,529),10524=>array(44,118,703,529),10525=>array(33,119,703,527),10526=>array(51,119,721,527),10527=>array(33,119,703,527),10528=>array(51,119,721,527),10529=>array(132,52,622,595),10530=>array(132,52,622,595),10531=>array(132,-45,585,595),10532=>array(168,-45,622,595),10533=>array(168,52,622,692),10534=>array(132,52,585,692),10535=>array(112,29,642,595),10536=>array(112,29,622,617),10537=>array(112,52,642,617),10538=>array(132,29,642,617),10539=>array(112,29,642,617),10540=>array(112,29,642,617),10541=>array(112,29,622,617),10542=>array(112,29,622,617),10543=>array(112,29,642,617),10544=>array(112,29,642,617),10545=>array(112,29,642,595),10546=>array(112,29,642,595),10547=>array(38,119,721,527),10548=>array(131,94,637,623),10549=>array(131,80,637,608),10550=>array(132,70,608,632),10551=>array(146,70,622,632),10552=>array(255,-13,532,735),10553=>array(222,-13,499,735),10554=>array(46,188,720,495),10555=>array(35,151,708,459),10556=>array(35,78,708,495),10557=>array(46,0,720,495),10558=>array(126,58,623,593),10559=>array(132,58,628,593),10560=>array(121,48,633,719),10561=>array(121,48,633,719),10562=>array(33,-52,721,698),10563=>array(33,-52,721,698),10564=>array(33,-52,721,698),10565=>array(51,0,721,527),10566=>array(33,0,703,527),10567=>array(51,119,721,527),10568=>array(33,119,721,527),10569=>array(193,-12,561,744),10570=>array(31,119,724,527),10571=>array(31,119,724,527),10572=>array(193,-23,561,747),10573=>array(193,-23,561,747),10574=>array(31,270,724,527),10575=>array(329,-23,561,747),10576=>array(31,119,724,377),10577=>array(193,-23,426,747),10578=>array(51,131,703,527),10579=>array(51,131,703,527),10580=>array(204,0,561,724),10581=>array(204,0,561,724),10582=>array(51,119,703,515),10583=>array(51,119,703,515),10584=>array(193,0,550,724),10585=>array(193,0,550,724),10586=>array(31,131,703,527),10587=>array(51,131,724,527),10588=>array(204,0,561,747),10589=>array(204,-23,561,724),10590=>array(31,119,703,515),10591=>array(51,119,724,515),10592=>array(193,0,550,747),10593=>array(193,-23,550,724),10594=>array(31,21,703,625),10595=>array(105,0,649,747),10596=>array(51,21,724,625),10597=>array(105,-23,649,724),10598=>array(31,172,724,625),10599=>array(31,21,724,475),10600=>array(31,172,724,625),10601=>array(31,21,724,475),10602=>array(31,184,703,613),10603=>array(31,34,703,462),10604=>array(51,184,724,613),10605=>array(51,34,724,462),10606=>array(105,-23,649,747),10607=>array(105,-23,649,747),10608=>array(51,270,703,571),10609=>array(51,119,721,757),10610=>array(51,119,721,610),10611=>array(33,36,703,527),10612=>array(51,36,721,527),10613=>array(51,-138,721,527),10614=>array(33,-76,703,791),10615=>array(33,42,878,604),10616=>array(51,-76,721,791),10617=>array(51,-76,721,748),10618=>array(33,10,813,637),10619=>array(33,-76,703,748),10620=>array(147,11,618,636),10621=>array(136,11,606,636),10622=>array(96,62,659,584),10623=>array(96,54,659,576),10731=>array(2,-233,442,807),10764=>array(21,-182,1555,759),10765=>array(22,-182,527,760),10766=>array(22,-182,527,760),10799=>array(116,23,638,604),10858=>array(95,222,659,567),10859=>array(95,60,659,567),11008=>array(64,-28,621,591),11009=>array(133,-28,690,591),11010=>array(64,52,621,671),11011=>array(133,52,690,671),11012=>array(33,119,721,527),11013=>array(33,119,703,527),11014=>array(193,0,561,744),11015=>array(193,-20,561,724),11016=>array(64,-28,621,591),11017=>array(133,-28,690,591),11018=>array(64,52,621,671),11019=>array(133,52,690,671),11020=>array(33,119,721,527),11021=>array(193,-20,561,744),11022=>array(51,112,721,514),11023=>array(51,132,721,534),11024=>array(33,112,703,514),11025=>array(33,132,703,534),11026=>array(82,-124,769,643),11027=>array(82,-124,769,643),11028=>array(82,-124,769,643),11029=>array(82,-124,769,643),11030=>array(2,-124,690,643),11031=>array(2,-124,690,643),11032=>array(2,-124,690,643),11033=>array(2,-124,690,643),11034=>array(82,-124,769,643),11360=>array(32,0,613,729),11361=>array(3,0,347,760),11363=>array(32,0,655,729),11364=>array(42,-208,753,729),11367=>array(42,-157,810,729),11368=>array(27,-138,634,760),11369=>array(42,-157,810,729),11370=>array(31,-138,639,760),11371=>array(33,-157,625,729),11372=>array(31,-138,481,519),11373=>array(38,-14,728,742),11374=>array(38,-208,954,729),11375=>array(-7,0,708,729),11376=>array(38,-14,728,742),11377=>array(-17,0,638,533),11378=>array(-8,0,1099,730),11379=>array(-8,0,886,533),11381=>array(42,0,661,729),11382=>array(31,0,510,519),11383=>array(42,-14,772,533),11385=>array(26,-14,483,760),11386=>array(37,-14,564,533),11387=>array(27,0,529,519),11388=>array(40,-124,247,426),11389=>array(-4,326,448,734),11390=>array(59,-208,596,742),11391=>array(33,-208,657,729),11520=>array(39,-53,657,514),11521=>array(38,-218,534,514),11522=>array(43,-218,685,514),11523=>array(61,-2,545,759),11524=>array(43,-217,670,514),11525=>array(40,-217,826,514),11526=>array(40,0,642,759),11527=>array(40,0,825,514),11528=>array(47,0,519,514),11529=>array(38,-217,544,729),11530=>array(34,0,821,514),11531=>array(61,-4,530,759),11532=>array(38,0,544,759),11533=>array(40,-2,827,514),11534=>array(40,0,722,514),11535=>array(40,-218,739,759),11536=>array(40,0,826,759),11537=>array(38,0,543,759),11538=>array(39,-217,530,515),11539=>array(40,-221,823,675),11540=>array(57,-217,787,555),11541=>array(39,-218,738,759),11542=>array(38,0,542,514),11543=>array(38,-217,544,514),11544=>array(38,-217,543,514),11545=>array(52,-217,547,759),11546=>array(71,-217,581,514),11547=>array(58,0,773,759),11548=>array(69,-217,844,514),11549=>array(39,-217,575,515),11550=>array(64,-217,571,514),11551=>array(40,-218,728,518),11552=>array(41,0,961,514),11553=>array(39,-217,532,759),11554=>array(51,-3,520,579),11555=>array(38,-217,543,759),11556=>array(38,-217,636,514),11557=>array(65,-4,757,759),11800=>array(40,-14,469,742),11807=>array(95,60,659,406),11810=>array(112,403,362,760),11811=>array(63,403,313,760),11812=>array(112,-132,362,225),11813=>array(63,-132,313,225),11822=>array(58,-14,487,742),42564=>array(59,-14,596,742),42565=>array(39,-14,470,533),42566=>array(42,0,380,729),42567=>array(32,0,331,519),42576=>array(5,0,1159,729),42577=>array(13,0,949,519),42580=>array(53,-14,1116,742),42581=>array(40,-14,875,533),42582=>array(42,0,1169,729),42583=>array(47,-14,914,533),42760=>array(86,0,364,693),42761=>array(86,0,364,693),42762=>array(86,0,364,693),42763=>array(86,0,364,693),42764=>array(86,0,364,693),42765=>array(86,0,364,693),42766=>array(86,0,364,693),42767=>array(86,0,364,693),42768=>array(86,0,364,693),42769=>array(86,0,364,693),42770=>array(86,0,364,693),42771=>array(86,0,364,693),42772=>array(86,0,364,693),42773=>array(86,0,364,693),42774=>array(86,0,364,693),42779=>array(57,326,289,743),42780=>array(57,315,289,731),42781=>array(72,318,177,734),42782=>array(72,326,177,742),42783=>array(72,0,177,416),42790=>array(42,-208,810,729),42791=>array(27,-222,567,760),42792=>array(10,-203,873,729),42793=>array(21,-203,787,680),42794=>array(31,-14,591,742),42795=>array(41,-12,521,742),42796=>array(37,-14,549,729),42797=>array(37,-222,517,519),42798=>array(37,-104,646,729),42799=>array(37,-240,614,519),42800=>array(26,0,523,519),42801=>array(39,-14,470,533),42802=>array(-7,0,1181,729),42803=>array(37,-14,867,533),42804=>array(-7,-14,1096,742),42805=>array(37,-14,868,533),42806=>array(-28,-14,1032,729),42807=>array(37,-14,876,533),42808=>array(-7,0,927,729),42809=>array(37,-14,754,533),42810=>array(-7,0,927,729),42811=>array(37,-14,754,533),42812=>array(-7,-208,908,729),42813=>array(37,-222,784,533),42814=>array(38,-14,671,742),42815=>array(37,-14,508,533),42816=>array(32,0,810,729),42817=>array(27,0,639,760),42822=>array(42,0,804,729),42823=>array(31,0,501,760),42826=>array(-4,-14,914,742),42827=>array(-4,-14,697,533),42830=>array(38,-14,1265,742),42831=>array(37,-14,918,533),42856=>array(42,-208,703,729),42857=>array(21,-208,614,519),42875=>array(48,-208,613,742),42876=>array(26,-208,483,533),42880=>array(20,0,591,729),42881=>array(22,-240,312,519),42882=>array(48,-208,759,743),42883=>array(31,-208,645,533),42884=>array(48,-208,613,742),42885=>array(26,-208,483,533),42886=>array(16,-14,680,729),42887=>array(15,-14,517,519),42891=>array(115,225,280,729),42892=>array(85,458,190,729),42893=>array(27,0,775,729),42896=>array(40,-157,805,729),42897=>array(31,-138,640,533),42922=>array(-108,0,810,729),43002=>array(31,0,932,519),43003=>array(12,0,597,729),43004=>array(22,0,635,729),43005=>array(42,0,958,729),43006=>array(42,0,380,928),43007=>array(-7,0,1168,729),62464=>array(45,-21,589,871),62465=>array(50,-21,594,870),62466=>array(45,-21,644,869),62467=>array(50,-21,849,870),62468=>array(45,-21,580,870),62469=>array(45,-21,589,871),62470=>array(20,-21,648,870),62471=>array(50,-20,883,870),62472=>array(50,-21,594,870),62473=>array(50,-21,594,870),62474=>array(50,-27,1127,870),62475=>array(50,-21,595,870),62476=>array(65,-21,610,882),62477=>array(50,-152,853,870),62478=>array(50,-21,594,870),62479=>array(50,-21,594,871),62480=>array(50,-21,895,854),62481=>array(0,-21,667,870),62482=>array(50,-21,714,870),62483=>array(25,-21,654,870),62484=>array(50,-21,846,870),62485=>array(50,-21,594,846),62486=>array(50,-21,839,870),62487=>array(50,-21,593,869),62488=>array(20,-21,600,870),62489=>array(65,-21,610,870),62490=>array(50,-21,652,864),62491=>array(50,-21,594,870),62492=>array(65,-21,646,870),62493=>array(50,-21,595,904),62494=>array(0,-21,652,870),62495=>array(46,-31,797,869),62496=>array(50,-21,594,876),62497=>array(65,-21,693,873),62498=>array(50,-63,594,870),62499=>array(50,-21,594,889),62500=>array(50,-21,594,870),62501=>array(50,-21,646,870),62502=>array(50,-20,861,870),62504=>array(57,-217,753,759),63173=>array(37,-14,564,756),63185=>array(51,616,399,816),63188=>array(67,624,382,840),64256=>array(27,0,787,760),64257=>array(27,0,634,760),64258=>array(27,0,632,760),64259=>array(28,0,985,760),64260=>array(27,0,983,760),64261=>array(28,-14,755,760),64262=>array(39,-14,870,748),65533=>array(22,-108,980,956),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>313,33=>395,34=>469,35=>754,36=>626,37=>855,38=>813,39=>275,40=>426,41=>426,42=>470,43=>754,44=>313,45=>374,46=>313,47=>329,48=>626,49=>626,50=>626,51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>332,59=>332,60=>754,61=>754,62=>754,63=>527,64=>900,65=>698,66=>760,67=>716,68=>780,69=>686,70=>639,71=>769,72=>850,73=>421,74=>426,75=>782,76=>633,77=>996,78=>822,79=>784,80=>677,81=>784,82=>748,83=>650,84=>669,85=>785,86=>698,87=>1011,88=>698,89=>642,90=>657,91=>426,92=>329,93=>426,94=>754,95=>450,96=>450,97=>583,98=>629,99=>548,100=>629,101=>572,102=>387,103=>629,104=>654,105=>342,106=>325,107=>624,108=>342,109=>952,110=>654,111=>600,112=>629,113=>629,114=>474,115=>506,116=>416,117=>654,118=>523,119=>774,120=>536,121=>523,122=>511,123=>579,124=>327,125=>579,126=>754,160=>313,161=>395,162=>626,163=>626,164=>572,165=>626,166=>327,167=>470,168=>450,169=>900,170=>438,171=>563,172=>754,173=>374,174=>900,175=>450,176=>450,177=>754,178=>394,179=>394,180=>450,181=>659,182=>572,183=>313,184=>450,185=>394,186=>450,187=>563,188=>938,189=>938,190=>938,191=>527,192=>698,193=>698,194=>698,195=>698,196=>698,197=>698,198=>931,199=>716,200=>686,201=>686,202=>686,203=>686,204=>421,205=>421,206=>421,207=>421,208=>787,209=>822,210=>784,211=>784,212=>784,213=>784,214=>784,215=>754,216=>784,217=>785,218=>785,219=>785,220=>785,221=>642,222=>681,223=>684,224=>583,225=>583,226=>583,227=>583,228=>583,229=>583,230=>877,231=>548,232=>572,233=>572,234=>572,235=>572,236=>342,237=>342,238=>342,239=>342,240=>600,241=>654,242=>600,243=>600,244=>600,245=>600,246=>600,247=>754,248=>600,249=>654,250=>654,251=>654,252=>654,253=>523,254=>629,255=>523,256=>698,257=>583,258=>698,259=>583,260=>698,261=>583,262=>716,263=>548,264=>716,265=>548,266=>716,267=>548,268=>716,269=>548,270=>780,271=>629,272=>787,273=>629,274=>686,275=>572,276=>686,277=>572,278=>686,279=>572,280=>686,281=>572,282=>686,283=>572,284=>769,285=>629,286=>769,287=>629,288=>769,289=>629,290=>769,291=>629,292=>850,293=>654,294=>850,295=>654,296=>421,297=>342,298=>421,299=>342,300=>421,301=>342,302=>421,303=>342,304=>421,305=>342,306=>848,307=>676,308=>426,309=>325,310=>782,311=>624,312=>624,313=>633,314=>342,315=>633,316=>342,317=>633,318=>342,319=>633,320=>342,321=>639,322=>346,323=>822,324=>654,325=>822,326=>654,327=>822,328=>654,329=>907,330=>785,331=>654,332=>784,333=>600,334=>784,335=>600,336=>784,337=>600,338=>1062,339=>925,340=>748,341=>474,342=>748,343=>474,344=>748,345=>474,346=>650,347=>506,348=>650,349=>506,350=>650,351=>506,352=>650,353=>506,354=>669,355=>416,356=>669,357=>416,358=>669,359=>416,360=>785,361=>654,362=>785,363=>654,364=>785,365=>654,366=>785,367=>654,368=>785,369=>654,370=>785,371=>654,372=>1011,373=>774,374=>642,375=>523,376=>642,377=>657,378=>511,379=>657,380=>511,381=>657,382=>511,383=>387,384=>629,385=>760,386=>769,387=>629,388=>769,389=>629,390=>716,391=>716,392=>548,393=>787,394=>780,395=>769,396=>629,397=>600,398=>686,399=>784,400=>649,401=>639,402=>387,403=>769,404=>693,405=>938,406=>421,407=>421,408=>782,409=>624,410=>342,411=>631,412=>952,413=>822,414=>654,415=>784,416=>784,417=>600,418=>1080,419=>849,420=>677,421=>629,422=>748,423=>650,424=>506,425=>636,426=>298,427=>416,428=>669,429=>416,430=>669,431=>785,432=>654,433=>801,434=>801,435=>642,436=>637,437=>657,438=>511,439=>591,440=>591,441=>591,442=>591,443=>626,444=>678,445=>511,446=>482,447=>644,448=>265,449=>443,450=>413,451=>265,452=>1437,453=>1292,454=>1140,455=>1059,456=>958,457=>667,458=>1248,459=>1148,460=>980,461=>698,462=>583,463=>421,464=>342,465=>784,466=>600,467=>785,468=>654,469=>785,470=>654,471=>785,472=>654,473=>785,474=>654,475=>785,476=>654,477=>572,478=>698,479=>583,480=>698,481=>583,482=>931,483=>877,484=>806,485=>629,486=>769,487=>629,488=>782,489=>624,490=>784,491=>600,492=>784,493=>600,494=>591,495=>511,496=>342,497=>1437,498=>1292,499=>1140,500=>769,501=>629,502=>1099,503=>708,504=>822,505=>654,506=>698,507=>583,508=>931,509=>877,510=>784,511=>600,512=>698,513=>583,514=>698,515=>583,516=>686,517=>572,518=>686,519=>572,520=>421,521=>342,522=>421,523=>342,524=>784,525=>600,526=>784,527=>600,528=>748,529=>474,530=>748,531=>474,532=>785,533=>654,534=>785,535=>654,536=>650,537=>506,538=>669,539=>416,540=>621,541=>546,542=>850,543=>654,544=>785,545=>711,546=>632,547=>554,548=>657,549=>511,550=>698,551=>583,552=>686,553=>572,554=>784,555=>600,556=>784,557=>600,558=>784,559=>600,560=>784,561=>600,562=>642,563=>523,564=>516,565=>830,566=>508,567=>325,568=>928,569=>928,570=>698,571=>716,572=>548,573=>633,574=>669,575=>506,576=>511,577=>594,578=>492,579=>760,580=>785,581=>698,582=>686,583=>572,584=>426,585=>348,586=>763,587=>629,588=>748,589=>474,590=>642,591=>523,592=>583,593=>629,594=>629,595=>629,596=>548,597=>548,598=>629,599=>657,600=>572,601=>572,602=>816,603=>547,604=>505,605=>816,606=>647,607=>348,608=>629,609=>629,610=>563,611=>541,612=>564,613=>654,614=>654,615=>654,616=>342,617=>342,618=>342,619=>368,620=>462,621=>342,622=>716,623=>952,624=>952,625=>952,626=>654,627=>654,628=>641,629=>600,630=>955,631=>674,632=>600,633=>514,634=>514,635=>514,636=>474,637=>474,638=>406,639=>438,640=>721,641=>721,642=>506,643=>298,644=>387,645=>486,646=>298,647=>443,648=>416,649=>654,650=>611,651=>624,652=>577,653=>816,654=>571,655=>654,656=>511,657=>511,658=>511,659=>511,660=>482,661=>482,662=>482,663=>490,664=>784,665=>625,666=>647,667=>563,668=>659,669=>345,670=>666,671=>581,672=>629,673=>482,674=>482,675=>1005,676=>1061,677=>1005,678=>844,679=>643,680=>851,681=>935,682=>782,683=>716,684=>596,685=>398,686=>552,687=>646,688=>469,689=>466,690=>282,691=>372,692=>372,693=>432,694=>474,695=>595,696=>436,697=>271,698=>469,699=>313,700=>313,701=>313,702=>330,703=>330,704=>282,705=>282,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>254,713=>450,714=>450,715=>450,716=>254,717=>450,720=>332,721=>332,722=>330,723=>330,726=>353,727=>353,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>375,736=>340,737=>263,738=>355,739=>427,740=>282,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450,750=>498,751=>450,752=>450,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>701,881=>519,882=>722,883=>699,884=>271,885=>271,886=>866,887=>664,890=>450,891=>548,892=>548,893=>548,894=>332,900=>450,901=>450,902=>698,903=>313,904=>852,905=>1006,906=>595,908=>798,910=>857,911=>820,912=>435,913=>698,914=>760,915=>639,916=>698,917=>686,918=>657,919=>850,920=>784,921=>421,922=>782,923=>698,924=>996,925=>822,926=>633,927=>784,928=>850,929=>677,931=>636,932=>669,933=>642,934=>784,935=>698,936=>822,937=>801,938=>421,939=>642,940=>692,941=>547,942=>654,943=>435,944=>624,945=>692,946=>598,947=>594,948=>600,949=>547,950=>533,951=>654,952=>600,953=>435,954=>674,955=>631,956=>659,957=>624,958=>533,959=>600,960=>659,961=>598,962=>548,963=>664,964=>605,965=>624,966=>814,967=>592,968=>847,969=>857,970=>435,971=>624,972=>600,973=>624,974=>857,975=>782,976=>600,977=>764,978=>687,979=>872,980=>687,981=>847,982=>857,983=>589,984=>784,985=>600,986=>716,987=>548,988=>639,989=>475,990=>531,991=>593,992=>716,993=>600,1008=>589,1009=>598,1010=>548,1011=>325,1012=>784,1013=>548,1014=>548,1015=>681,1016=>629,1017=>716,1018=>996,1019=>774,1020=>623,1021=>716,1022=>716,1023=>716,1024=>686,1025=>686,1026=>811,1027=>621,1028=>716,1029=>650,1030=>421,1031=>421,1032=>426,1033=>1081,1034=>1135,1035=>866,1036=>818,1037=>850,1038=>730,1039=>850,1040=>733,1041=>769,1042=>760,1043=>621,1044=>800,1045=>686,1046=>1181,1047=>649,1048=>850,1049=>850,1050=>818,1051=>795,1052=>996,1053=>850,1054=>784,1055=>850,1056=>677,1057=>716,1058=>669,1059=>730,1060=>854,1061=>698,1062=>870,1063=>822,1064=>1141,1065=>1164,1066=>861,1067=>1081,1068=>743,1069=>716,1070=>1158,1071=>793,1072=>583,1073=>600,1074=>625,1075=>551,1076=>600,1077=>572,1078=>909,1079=>574,1080=>667,1081=>667,1082=>650,1083=>634,1084=>782,1085=>659,1086=>600,1087=>659,1088=>629,1089=>548,1090=>558,1091=>576,1092=>812,1093=>536,1094=>665,1095=>659,1096=>967,1097=>974,1098=>690,1099=>902,1100=>611,1101=>548,1102=>923,1103=>665,1104=>572,1105=>572,1106=>646,1107=>551,1108=>548,1109=>506,1110=>342,1111=>342,1112=>325,1113=>889,1114=>913,1115=>654,1116=>650,1117=>667,1118=>576,1119=>659,1122=>792,1123=>633,1124=>1076,1125=>867,1130=>1181,1131=>909,1132=>1467,1133=>1167,1136=>986,1137=>995,1138=>784,1139=>587,1140=>824,1141=>673,1142=>824,1143=>673,1164=>761,1165=>606,1168=>630,1169=>556,1170=>621,1171=>551,1172=>781,1173=>645,1174=>1181,1175=>909,1176=>649,1177=>574,1178=>852,1179=>669,1182=>818,1183=>650,1184=>937,1185=>744,1186=>870,1187=>665,1188=>1050,1189=>860,1190=>1210,1191=>953,1194=>716,1195=>548,1196=>669,1197=>558,1198=>642,1199=>523,1200=>642,1201=>523,1202=>779,1203=>584,1204=>919,1205=>726,1206=>835,1207=>665,1210=>819,1211=>654,1216=>421,1217=>1181,1218=>909,1219=>782,1220=>624,1223=>850,1224=>659,1227=>822,1228=>659,1231=>342,1232=>733,1233=>583,1234=>733,1235=>583,1236=>931,1237=>877,1238=>686,1239=>572,1240=>784,1241=>572,1242=>784,1243=>572,1244=>1181,1245=>909,1246=>649,1247=>574,1248=>591,1249=>511,1250=>850,1251=>667,1252=>850,1253=>667,1254=>784,1255=>600,1256=>784,1257=>600,1258=>784,1259=>600,1260=>716,1261=>548,1262=>730,1263=>576,1264=>730,1265=>576,1266=>730,1267=>576,1268=>822,1269=>659,1270=>621,1271=>551,1272=>1081,1273=>902,1296=>649,1297=>574,1298=>795,1299=>634,1300=>1123,1301=>851,1306=>738,1307=>576,1308=>925,1309=>770,1329=>848,1330=>748,1331=>804,1332=>817,1333=>739,1334=>738,1335=>672,1336=>748,1337=>1013,1338=>804,1339=>722,1340=>650,1341=>1069,1342=>798,1343=>757,1344=>663,1345=>777,1346=>826,1347=>766,1348=>879,1349=>750,1350=>822,1351=>759,1352=>784,1353=>736,1354=>931,1355=>761,1356=>867,1357=>784,1358=>822,1359=>727,1360=>727,1361=>752,1362=>639,1363=>859,1364=>802,1365=>784,1366=>867,1369=>276,1370=>237,1371=>264,1372=>352,1373=>290,1374=>396,1375=>450,1377=>949,1378=>625,1379=>699,1380=>721,1381=>655,1382=>668,1383=>539,1384=>660,1385=>818,1386=>690,1387=>651,1388=>358,1389=>978,1390=>625,1391=>647,1392=>663,1393=>615,1394=>664,1395=>633,1396=>651,1397=>323,1398=>647,1399=>446,1400=>664,1401=>385,1402=>953,1403=>602,1404=>669,1405=>651,1406=>651,1407=>936,1408=>651,1409=>642,1410=>444,1411=>936,1412=>660,1413=>624,1414=>860,1415=>750,1417=>306,1418=>349,4256=>680,4257=>842,4258=>779,4259=>787,4260=>703,4261=>970,4262=>913,4263=>1091,4264=>579,4265=>736,4266=>946,4267=>945,4268=>716,4269=>1021,4270=>872,4271=>812,4272=>998,4273=>712,4274=>680,4275=>968,4276=>878,4277=>959,4278=>729,4279=>750,4280=>739,4281=>750,4282=>817,4283=>969,4284=>692,4285=>739,4286=>731,4287=>1000,4288=>1010,4289=>721,4290=>803,4291=>722,4292=>792,4293=>957,4304=>535,4305=>563,4306=>579,4307=>798,4308=>553,4309=>549,4310=>600,4311=>823,4312=>552,4313=>540,4314=>1008,4315=>576,4316=>576,4317=>791,4318=>561,4319=>571,4320=>790,4321=>599,4322=>702,4323=>676,4324=>782,4325=>575,4326=>820,4327=>559,4328=>583,4329=>576,4330=>656,4331=>577,4332=>567,4333=>566,4334=>603,4335=>678,4336=>563,4337=>591,4338=>563,4339=>563,4340=>562,4341=>603,4342=>846,4343=>612,4344=>572,4345=>605,4346=>562,4347=>529,4348=>318,7424=>577,7425=>802,7426=>846,7427=>625,7428=>548,7429=>607,7430=>607,7431=>555,7432=>458,7433=>288,7434=>505,7435=>650,7436=>555,7437=>782,7438=>664,7439=>600,7440=>548,7441=>565,7442=>565,7443=>600,7444=>890,7445=>538,7446=>600,7447=>600,7448=>527,7449=>721,7450=>721,7451=>558,7452=>583,7453=>597,7454=>831,7455=>589,7456=>523,7457=>774,7458=>511,7459=>511,7460=>529,7461=>721,7462=>527,7463=>577,7464=>659,7465=>527,7466=>769,7467=>634,7468=>439,7469=>586,7470=>479,7471=>479,7472=>491,7473=>432,7474=>432,7475=>483,7476=>536,7477=>265,7478=>268,7479=>492,7480=>398,7481=>627,7482=>518,7483=>545,7484=>493,7485=>398,7486=>426,7487=>471,7488=>409,7489=>422,7490=>494,7491=>419,7492=>419,7493=>448,7494=>591,7495=>448,7496=>448,7497=>400,7498=>400,7499=>370,7500=>370,7501=>448,7502=>270,7503=>471,7504=>655,7505=>426,7506=>420,7507=>384,7508=>420,7509=>420,7510=>448,7511=>333,7512=>468,7513=>376,7514=>655,7515=>442,7516=>454,7517=>376,7518=>374,7519=>378,7520=>513,7521=>373,7522=>215,7523=>372,7524=>468,7525=>442,7526=>376,7527=>374,7528=>377,7529=>513,7530=>373,7531=>937,7543=>576,7544=>536,7547=>342,7548=>342,7549=>629,7550=>583,7551=>611,7557=>342,7579=>448,7580=>384,7581=>384,7582=>420,7583=>370,7584=>345,7585=>335,7586=>448,7587=>470,7588=>270,7589=>276,7590=>270,7591=>270,7592=>333,7593=>331,7594=>289,7595=>387,7596=>613,7597=>655,7598=>529,7599=>528,7600=>425,7601=>420,7602=>470,7603=>360,7604=>348,7605=>333,7606=>468,7607=>427,7608=>367,7609=>439,7610=>442,7611=>371,7612=>474,7613=>371,7614=>407,7615=>420,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>698,7681=>583,7682=>760,7683=>629,7684=>760,7685=>629,7686=>760,7687=>629,7688=>716,7689=>548,7690=>780,7691=>629,7692=>780,7693=>629,7694=>780,7695=>629,7696=>780,7697=>629,7698=>780,7699=>629,7700=>686,7701=>572,7702=>686,7703=>572,7704=>686,7705=>572,7706=>686,7707=>572,7708=>686,7709=>572,7710=>639,7711=>387,7712=>769,7713=>629,7714=>850,7715=>654,7716=>850,7717=>654,7718=>850,7719=>654,7720=>850,7721=>654,7722=>850,7723=>654,7724=>421,7725=>342,7726=>421,7727=>342,7728=>782,7729=>624,7730=>782,7731=>624,7732=>782,7733=>624,7734=>633,7735=>342,7736=>633,7737=>342,7738=>633,7739=>342,7740=>633,7741=>342,7742=>996,7743=>952,7744=>996,7745=>952,7746=>996,7747=>952,7748=>822,7749=>654,7750=>822,7751=>654,7752=>822,7753=>654,7754=>822,7755=>654,7756=>784,7757=>600,7758=>784,7759=>600,7760=>784,7761=>600,7762=>784,7763=>600,7764=>677,7765=>629,7766=>677,7767=>629,7768=>748,7769=>474,7770=>748,7771=>474,7772=>748,7773=>474,7774=>748,7775=>474,7776=>650,7777=>506,7778=>650,7779=>506,7780=>650,7781=>506,7782=>650,7783=>506,7784=>650,7785=>506,7786=>669,7787=>416,7788=>669,7789=>416,7790=>669,7791=>416,7792=>669,7793=>416,7794=>785,7795=>654,7796=>785,7797=>654,7798=>785,7799=>654,7800=>785,7801=>654,7802=>785,7803=>654,7804=>698,7805=>523,7806=>698,7807=>523,7808=>1011,7809=>774,7810=>1011,7811=>774,7812=>1011,7813=>774,7814=>1011,7815=>774,7816=>1011,7817=>774,7818=>698,7819=>536,7820=>698,7821=>536,7822=>642,7823=>523,7824=>657,7825=>511,7826=>657,7827=>511,7828=>657,7829=>511,7830=>654,7831=>416,7832=>774,7833=>523,7834=>913,7835=>387,7836=>387,7837=>387,7838=>852,7839=>600,7840=>698,7841=>583,7842=>698,7843=>583,7844=>698,7845=>583,7846=>698,7847=>583,7848=>698,7849=>583,7850=>698,7851=>583,7852=>698,7853=>583,7854=>698,7855=>583,7856=>698,7857=>583,7858=>698,7859=>583,7860=>698,7861=>583,7862=>698,7863=>583,7864=>686,7865=>572,7866=>686,7867=>572,7868=>686,7869=>572,7870=>686,7871=>572,7872=>686,7873=>572,7874=>686,7875=>572,7876=>686,7877=>572,7878=>686,7879=>572,7880=>421,7881=>342,7882=>421,7883=>342,7884=>784,7885=>600,7886=>784,7887=>600,7888=>784,7889=>600,7890=>784,7891=>600,7892=>784,7893=>600,7894=>784,7895=>600,7896=>784,7897=>600,7898=>784,7899=>600,7900=>784,7901=>600,7902=>784,7903=>600,7904=>784,7905=>600,7906=>784,7907=>600,7908=>785,7909=>654,7910=>785,7911=>654,7912=>785,7913=>654,7914=>785,7915=>654,7916=>785,7917=>654,7918=>785,7919=>654,7920=>785,7921=>654,7922=>642,7923=>523,7924=>642,7925=>523,7926=>642,7927=>523,7928=>642,7929=>523,7930=>970,7931=>630,7936=>692,7937=>692,7938=>692,7939=>692,7940=>692,7941=>692,7942=>692,7943=>692,7944=>698,7945=>698,7946=>880,7947=>880,7948=>748,7949=>764,7950=>698,7951=>698,7952=>547,7953=>547,7954=>547,7955=>547,7956=>547,7957=>547,7960=>826,7961=>817,7962=>1052,7963=>1052,7964=>984,7965=>1007,7968=>654,7969=>654,7970=>654,7971=>654,7972=>654,7973=>654,7974=>654,7975=>654,7976=>990,7977=>984,7978=>1222,7979=>1225,7980=>1151,7981=>1177,7982=>1077,7983=>1074,7984=>435,7985=>435,7986=>435,7987=>435,7988=>435,7989=>435,7990=>435,7991=>435,7992=>566,7993=>555,7994=>790,7995=>792,7996=>719,7997=>748,7998=>650,7999=>642,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>810,8009=>841,8010=>1116,8011=>1113,8012=>931,8013=>959,8016=>624,8017=>624,8018=>624,8019=>624,8020=>624,8021=>624,8022=>624,8023=>624,8025=>830,8027=>1067,8029=>1020,8031=>917,8032=>857,8033=>857,8034=>857,8035=>857,8036=>857,8037=>857,8038=>857,8039=>857,8040=>838,8041=>867,8042=>1141,8043=>1146,8044=>949,8045=>979,8046=>920,8047=>954,8048=>692,8049=>692,8050=>547,8051=>547,8052=>654,8053=>654,8054=>435,8055=>435,8056=>600,8057=>600,8058=>624,8059=>624,8060=>857,8061=>857,8064=>692,8065=>692,8066=>692,8067=>692,8068=>692,8069=>692,8070=>692,8071=>692,8072=>698,8073=>698,8074=>880,8075=>880,8076=>748,8077=>764,8078=>698,8079=>698,8080=>654,8081=>654,8082=>654,8083=>654,8084=>654,8085=>654,8086=>654,8087=>654,8088=>990,8089=>984,8090=>1222,8091=>1225,8092=>1151,8093=>1177,8094=>1077,8095=>1074,8096=>857,8097=>857,8098=>857,8099=>857,8100=>857,8101=>857,8102=>857,8103=>857,8104=>838,8105=>867,8106=>1141,8107=>1146,8108=>949,8109=>979,8110=>920,8111=>954,8112=>692,8113=>692,8114=>692,8115=>692,8116=>692,8118=>692,8119=>692,8120=>698,8121=>698,8122=>729,8123=>698,8124=>698,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>654,8131=>654,8132=>654,8134=>654,8135=>654,8136=>899,8137=>852,8138=>1072,8139=>1006,8140=>850,8141=>450,8142=>450,8143=>450,8144=>435,8145=>435,8146=>435,8147=>435,8150=>435,8151=>435,8152=>421,8153=>421,8154=>642,8155=>595,8157=>450,8158=>450,8159=>450,8160=>624,8161=>624,8162=>624,8163=>624,8164=>598,8165=>598,8166=>624,8167=>624,8168=>642,8169=>642,8170=>917,8171=>857,8172=>819,8173=>450,8174=>450,8175=>450,8178=>857,8179=>857,8180=>857,8182=>857,8183=>857,8184=>962,8185=>798,8186=>991,8187=>820,8188=>801,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>313,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>313,8217=>313,8218=>313,8219=>313,8220=>518,8221=>518,8222=>518,8223=>518,8224=>470,8225=>470,8226=>575,8227=>575,8228=>313,8229=>606,8230=>900,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1246,8241=>1638,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8249=>360,8250=>360,8252=>566,8253=>527,8254=>450,8258=>920,8260=>150,8261=>426,8262=>426,8263=>974,8264=>770,8265=>770,8267=>572,8268=>450,8269=>450,8270=>470,8271=>332,8273=>470,8274=>500,8275=>900,8279=>731,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>394,8305=>215,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475,8316=>475,8317=>268,8318=>268,8319=>467,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>268,8334=>268,8336=>419,8337=>400,8338=>420,8339=>427,8340=>400,8341=>469,8342=>471,8343=>263,8344=>655,8345=>467,8346=>448,8347=>355,8348=>333,8358=>626,8364=>626,8367=>1039,8369=>710,8372=>788,8373=>626,8376=>669,8377=>626,8451=>1078,8457=>1001,8462=>654,8463=>654,8470=>978,8482=>900,8486=>801,8487=>801,8490=>782,8491=>698,8498=>639,8513=>697,8514=>501,8515=>573,8516=>684,8523=>813,8526=>533,8528=>932,8529=>932,8530=>1326,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>421,8545=>663,8546=>904,8547=>984,8548=>698,8549=>1014,8550=>1256,8551=>1498,8552=>962,8553=>698,8554=>970,8555=>1212,8556=>633,8557=>716,8558=>780,8559=>996,8560=>342,8561=>684,8562=>1025,8563=>865,8564=>523,8565=>865,8566=>1207,8567=>1548,8568=>878,8569=>536,8570=>878,8571=>1220,8572=>342,8573=>548,8574=>629,8575=>952,8576=>1129,8577=>780,8578=>1141,8579=>716,8580=>548,8581=>716,8585=>932,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>765,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>577,8706=>480,8707=>558,8708=>558,8710=>677,8711=>677,8712=>666,8713=>666,8715=>666,8716=>666,8719=>757,8720=>757,8721=>677,8722=>754,8723=>754,8724=>754,8725=>329,8727=>622,8728=>466,8729=>466,8730=>591,8731=>591,8732=>591,8733=>604,8734=>750,8735=>754,8736=>754,8739=>292,8740=>546,8741=>476,8742=>696,8743=>730,8744=>730,8745=>754,8746=>754,8747=>521,8748=>900,8749=>1252,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>974,8789=>974,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>754,8848=>754,8849=>754,8850=>754,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>795,8867=>795,8868=>864,8869=>864,8870=>554,8871=>554,8872=>795,8873=>795,8874=>795,8875=>971,8876=>795,8877=>795,8878=>795,8879=>971,8901=>358,8962=>751,8968=>426,8969=>426,8970=>426,8971=>426,8976=>754,8977=>484,8984=>835,8985=>754,8992=>521,8993=>521,8997=>900,9000=>1299,9085=>907,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>521,9167=>850,9251=>751,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754,10181=>411,10182=>411,10208=>444,10216=>411,10217=>411,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>929,10616=>754,10617=>754,10618=>864,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1604,10765=>549,10766=>549,10799=>754,10858=>754,10859=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11360=>633,11361=>342,11363=>677,11364=>748,11367=>850,11368=>654,11369=>782,11370=>624,11371=>657,11372=>511,11373=>763,11374=>996,11375=>698,11376=>763,11377=>638,11378=>1099,11379=>886,11381=>701,11382=>541,11383=>814,11385=>514,11386=>600,11387=>555,11388=>282,11389=>439,11390=>650,11391=>657,11520=>695,11521=>571,11522=>723,11523=>592,11524=>708,11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>567,11532=>581,11533=>866,11534=>761,11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584,11546=>619,11547=>842,11548=>883,11549=>613,11550=>608,11551=>766,11552=>1002,11553=>569,11554=>580,11555=>582,11556=>674,11557=>822,11800=>527,11807=>754,11810=>426,11811=>426,11812=>426,11813=>426,11822=>527,42564=>650,42565=>506,42566=>421,42567=>342,42576=>1200,42577=>982,42580=>1158,42581=>923,42582=>1158,42583=>935,42760=>450,42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450,42771=>450,42772=>450,42773=>450,42774=>450,42779=>346,42780=>346,42781=>249,42782=>249,42783=>249,42790=>850,42791=>641,42792=>903,42793=>817,42794=>626,42795=>548,42796=>570,42797=>538,42798=>667,42799=>635,42800=>533,42801=>506,42802=>1170,42803=>887,42804=>1134,42805=>903,42806=>1051,42807=>907,42808=>914,42809=>731,42810=>914,42811=>731,42812=>895,42813=>762,42814=>716,42815=>548,42816=>818,42817=>650,42822=>824,42823=>523,42826=>909,42827=>692,42830=>1303,42831=>954,42856=>708,42857=>644,42875=>625,42876=>474,42880=>633,42881=>342,42882=>785,42883=>654,42884=>625,42885=>474,42886=>716,42887=>548,42891=>395,42892=>275,42893=>822,42896=>822,42897=>654,42922=>850,43002=>962,43003=>639,43004=>677,43005=>996,43006=>421,43007=>1157,62464=>634,62465=>645,62466=>688,62467=>898,62468=>645,62469=>639,62470=>698,62471=>934,62472=>645,62473=>645,62474=>1178,62475=>660,62476=>659,62477=>903,62478=>645,62479=>659,62480=>945,62481=>717,62482=>765,62483=>719,62484=>896,62485=>659,62486=>888,62487=>658,62488=>665,62489=>659,62490=>702,62491=>659,62492=>665,62493=>646,62494=>702,62495=>842,62496=>644,62497=>743,62498=>645,62499=>645,62500=>645,62501=>695,62502=>911,62504=>813,63173=>600,63185=>450,63188=>450,64256=>738,64257=>654,64258=>654,64259=>1007,64260=>1005,64261=>784,64262=>874,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserifcondensedb.z b/tcpdf/fonts/dejavuserifcondensedb.z new file mode 100644 index 0000000..dd6abfc Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensedb.z differ diff --git a/tcpdf/fonts/dejavuserifcondensedbi.ctg.z b/tcpdf/fonts/dejavuserifcondensedbi.ctg.z new file mode 100644 index 0000000..c1b7143 Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensedbi.ctg.z differ diff --git a/tcpdf/fonts/dejavuserifcondensedbi.php b/tcpdf/fonts/dejavuserifcondensedbi.php new file mode 100644 index 0000000..0ef81c9 --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensedbi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerifCondensed-BoldItalic'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=335940; +$enc=''; +$file='dejavuserifcondensedbi.z'; +$ctg='dejavuserifcondensedbi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-815 -389 1579 1145]','ItalicAngle'=>-11,'Ascent'=>939,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>60,'StemH'=>26,'AvgWidth'=>509,'MaxWidth'=>1631,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(65,-14,345,729),34=>array(85,458,383,729),35=>array(61,0,693,718),36=>array(37,-146,568,761),37=>array(53,-14,802,742),38=>array(6,-14,803,742),39=>array(85,458,190,729),40=>array(84,-156,459,760),41=>array(-35,-156,340,760),42=>array(20,278,451,742),43=>array(95,1,659,627),44=>array(-4,-165,254,156),45=>array(37,202,336,334),46=>array(73,-14,241,172),47=>array(-72,-93,401,729),48=>array(42,-14,584,742),49=>array(58,0,482,742),50=>array(-5,0,571,742),51=>array(3,-14,576,742),52=>array(5,0,569,742),53=>array(16,-14,573,729),54=>array(52,-14,605,742),55=>array(93,0,616,729),56=>array(17,-14,589,742),57=>array(21,-14,574,742),58=>array(55,-14,277,490),59=>array(-22,-161,290,490),60=>array(95,32,659,595),61=>array(95,147,659,480),62=>array(95,32,659,595),63=>array(92,-14,517,742),64=>array(58,-174,848,703),65=>array(-71,0,655,729),66=>array(-22,0,704,729),67=>array(38,-14,708,742),68=>array(-22,0,743,729),69=>array(-22,0,696,729),70=>array(-22,0,691,729),71=>array(38,-14,730,742),72=>array(-22,0,874,729),73=>array(-22,0,444,729),74=>array(-142,-208,474,729),75=>array(-22,0,812,729),76=>array(-22,0,582,729),77=>array(-26,0,1018,729),78=>array(-24,0,851,729),79=>array(38,-14,746,742),80=>array(-22,0,681,729),81=>array(44,-196,771,742),82=>array(-22,0,700,729),83=>array(12,-14,613,742),84=>array(42,0,725,729),85=>array(85,-14,831,729),86=>array(48,0,775,729),87=>array(45,0,1085,729),88=>array(-48,0,727,729),89=>array(45,0,715,729),90=>array(-31,0,684,729),91=>array(34,-132,440,760),92=>array(72,-93,257,729),93=>array(-15,-132,392,760),94=>array(91,457,664,729),95=>array(0,-236,450,-143),96=>array(115,616,319,800),97=>array(31,-14,519,533),98=>array(22,-14,581,760),99=>array(30,-14,533,533),100=>array(9,-14,610,760),101=>array(30,-14,534,533),102=>array(-53,-190,516,760),103=>array(20,-222,600,533),104=>array(30,0,578,760),105=>array(30,0,303,760),106=>array(-149,-222,318,760),107=>array(30,0,583,760),108=>array(30,0,319,760),109=>array(50,0,896,533),110=>array(50,0,598,533),111=>array(30,-14,571,533),112=>array(22,-208,618,533),113=>array(47,-208,599,533),114=>array(50,0,529,533),115=>array(-0,-14,488,533),116=>array(43,-14,407,680),117=>array(57,-14,604,519),118=>array(19,0,530,521),119=>array(27,0,801,519),120=>array(-17,0,545,519),121=>array(-18,-222,574,519),122=>array(-14,-41,526,560),123=>array(70,-163,579,760),124=>array(116,-236,211,764),125=>array(1,-163,509,760),126=>array(95,221,659,406),161=>array(50,0,330,742),162=>array(70,-146,568,662),163=>array(-0,0,610,742),164=>array(33,30,541,596),165=>array(25,0,663,729),166=>array(116,-171,211,699),167=>array(-1,-95,464,742),168=>array(147,645,474,788),169=>array(124,0,776,725),170=>array(6,246,395,745),171=>array(62,64,518,522),172=>array(95,140,659,441),173=>array(37,202,336,334),174=>array(124,0,776,725),175=>array(140,664,433,756),176=>array(78,424,371,749),177=>array(95,0,659,627),178=>array(2,334,357,742),179=>array(6,326,361,742),180=>array(204,616,473,800),181=>array(28,-208,625,519),182=>array(101,-96,590,729),183=>array(73,255,241,440),184=>array(101,-196,313,0),185=>array(35,334,305,742),186=>array(6,246,433,742),187=>array(44,64,500,522),188=>array(35,-14,842,742),189=>array(35,-14,845,742),190=>array(6,-14,842,742),191=>array(10,-14,435,742),192=>array(-71,0,655,927),193=>array(-71,0,655,927),194=>array(-71,0,655,927),195=>array(-71,0,655,929),196=>array(-71,0,655,939),197=>array(-88,0,638,928),198=>array(-92,0,940,729),199=>array(38,-196,708,742),200=>array(-22,0,696,927),201=>array(-22,0,696,927),202=>array(-22,0,696,927),203=>array(-22,0,696,939),204=>array(-22,0,444,927),205=>array(-22,0,445,927),206=>array(-22,0,448,927),207=>array(-22,0,452,939),208=>array(-16,0,749,729),209=>array(-24,0,851,929),210=>array(38,-14,746,927),211=>array(38,-14,746,927),212=>array(38,-14,746,927),213=>array(38,-14,746,929),214=>array(38,-14,746,939),215=>array(116,23,638,604),216=>array(-33,-38,816,766),217=>array(85,-14,831,927),218=>array(85,-14,831,927),219=>array(85,-14,831,927),220=>array(85,-14,831,939),221=>array(45,0,715,927),222=>array(-22,0,656,729),223=>array(-69,-190,614,760),224=>array(31,-14,519,800),225=>array(31,-14,519,800),226=>array(31,-14,519,800),227=>array(31,-14,519,792),228=>array(31,-14,519,788),229=>array(31,-14,519,888),230=>array(24,-14,800,533),231=>array(30,-196,533,533),232=>array(30,-14,534,800),233=>array(30,-14,534,800),234=>array(30,-14,534,800),235=>array(30,-14,535,788),236=>array(51,0,298,800),237=>array(51,0,419,800),238=>array(41,0,373,800),239=>array(51,0,419,788),240=>array(15,-14,570,764),241=>array(50,0,598,792),242=>array(30,-14,571,800),243=>array(30,-14,571,800),244=>array(30,-14,571,800),245=>array(30,-14,571,792),246=>array(30,-14,571,788),247=>array(95,60,659,567),248=>array(-24,-50,625,567),249=>array(57,-14,604,800),250=>array(57,-14,604,800),251=>array(57,-14,604,800),252=>array(57,-14,604,788),253=>array(-18,-222,574,800),254=>array(2,-208,598,760),255=>array(-18,-222,574,788),256=>array(-71,0,655,914),257=>array(31,-14,519,763),258=>array(-71,0,655,936),259=>array(31,-14,519,776),260=>array(-71,-196,655,729),261=>array(31,-196,519,533),262=>array(38,-14,708,927),263=>array(30,-14,540,800),264=>array(38,-14,708,927),265=>array(30,-14,533,800),266=>array(38,-14,708,939),267=>array(30,-14,533,788),268=>array(38,-14,708,927),269=>array(30,-14,535,800),270=>array(-22,0,743,927),271=>array(9,-14,835,760),272=>array(-16,0,749,729),273=>array(9,-14,667,760),274=>array(-22,0,696,914),275=>array(30,-14,534,763),276=>array(-22,0,696,927),277=>array(30,-14,534,776),278=>array(-22,0,696,939),279=>array(30,-14,534,788),280=>array(-22,-196,696,729),281=>array(30,-196,534,533),282=>array(-22,0,696,930),283=>array(30,-14,535,800),284=>array(38,-14,730,927),285=>array(20,-222,600,800),286=>array(38,-14,730,927),287=>array(20,-222,600,776),288=>array(38,-14,730,939),289=>array(20,-222,600,788),290=>array(38,-240,730,742),291=>array(20,-222,600,753),292=>array(-22,0,874,927),293=>array(30,0,578,927),294=>array(-22,0,874,729),295=>array(30,0,578,760),296=>array(-22,0,468,929),297=>array(51,0,408,792),298=>array(-22,0,447,914),299=>array(51,0,351,763),300=>array(-22,0,464,927),301=>array(51,0,400,776),302=>array(-5,-196,461,729),303=>array(47,-196,320,760),304=>array(-22,0,444,939),305=>array(51,0,298,519),306=>array(-22,-208,896,729),307=>array(30,-222,668,760),308=>array(-142,-208,474,927),309=>array(-128,-222,342,800),310=>array(-22,-226,812,729),311=>array(30,-226,583,760),312=>array(52,0,604,518),313=>array(-22,0,582,928),314=>array(30,0,431,928),315=>array(-22,-226,582,729),316=>array(30,-226,319,760),317=>array(-22,0,617,729),318=>array(30,0,531,760),319=>array(-22,0,639,729),320=>array(30,0,479,760),321=>array(-16,0,587,729),322=>array(-7,0,370,760),323=>array(-24,0,851,928),324=>array(50,0,598,776),325=>array(-24,-226,851,729),326=>array(50,-226,598,533),327=>array(-24,0,851,927),328=>array(50,0,598,800),329=>array(67,0,812,742),330=>array(31,-208,772,743),331=>array(70,-222,604,533),332=>array(38,-14,746,914),333=>array(30,-14,571,763),334=>array(38,-14,746,927),335=>array(30,-14,571,776),336=>array(38,-14,746,927),337=>array(30,-14,587,800),338=>array(38,0,1072,729),339=>array(31,-14,885,533),340=>array(-22,0,700,928),341=>array(50,0,536,776),342=>array(-22,-226,700,729),343=>array(50,-226,529,533),344=>array(-22,0,700,927),345=>array(50,0,535,800),346=>array(12,-14,624,928),347=>array(-0,-14,536,776),348=>array(12,-14,613,927),349=>array(-0,-14,488,800),350=>array(12,-196,613,742),351=>array(-0,-196,488,533),352=>array(12,-14,613,927),353=>array(-0,-14,497,800),354=>array(42,-196,725,729),355=>array(43,-196,407,680),356=>array(42,0,725,927),357=>array(43,-14,524,780),358=>array(42,0,725,729),359=>array(9,-14,407,680),360=>array(85,-14,831,929),361=>array(57,-14,604,792),362=>array(85,-14,831,914),363=>array(57,-14,604,763),364=>array(85,-14,831,927),365=>array(57,-14,604,776),366=>array(85,-14,831,1057),367=>array(57,-14,604,854),368=>array(85,-14,831,927),369=>array(57,-14,604,800),370=>array(85,-204,831,729),371=>array(57,-196,604,519),372=>array(45,0,1085,931),373=>array(27,0,801,800),374=>array(45,0,715,931),375=>array(-18,-222,574,800),376=>array(45,0,715,939),377=>array(-31,0,684,928),378=>array(-14,-41,536,776),379=>array(-31,0,684,952),380=>array(-14,-41,526,759),381=>array(-31,0,684,927),382=>array(-14,-41,526,800),383=>array(-53,-190,516,760),384=>array(22,-14,581,760),385=>array(-86,0,704,729),386=>array(-22,0,743,729),387=>array(-45,-14,574,760),388=>array(-22,0,693,729),389=>array(-45,-14,574,760),390=>array(0,-14,671,742),391=>array(29,-14,887,840),392=>array(21,-14,715,709),393=>array(-16,0,749,729),394=>array(-86,0,743,729),395=>array(15,0,783,729),396=>array(0,-14,661,760),397=>array(35,-246,585,533),398=>array(-22,0,704,729),399=>array(38,-14,746,742),400=>array(72,-14,697,742),401=>array(-154,-208,709,729),402=>array(-166,-190,516,760),403=>array(29,-14,910,840),404=>array(75,-92,746,729),405=>array(31,-1,881,760),406=>array(91,0,444,729),407=>array(-22,0,444,729),408=>array(-22,0,875,729),409=>array(31,0,583,760),410=>array(5,0,319,760),411=>array(-33,0,540,739),412=>array(68,-14,997,729),413=>array(-156,-208,869,729),414=>array(68,-208,597,533),415=>array(38,-14,746,742),416=>array(37,-14,844,760),417=>array(31,-14,680,548),418=>array(51,-171,992,742),419=>array(54,-208,790,533),420=>array(-86,0,681,729),421=>array(7,-208,595,709),422=>array(-11,-142,688,729),423=>array(32,-14,622,742),424=>array(21,-14,489,533),425=>array(-27,0,640,729),426=>array(-47,-223,414,760),427=>array(57,-222,465,680),428=>array(38,0,725,729),429=>array(37,-14,473,760),430=>array(60,-208,743,729),431=>array(88,-14,1015,816),432=>array(59,-14,734,548),433=>array(35,-14,822,729),434=>array(120,0,757,729),435=>array(45,0,796,730),436=>array(-19,-222,701,533),437=>array(-31,0,684,729),438=>array(-14,-41,526,560),439=>array(-27,-14,546,729),440=>array(3,-14,583,729),441=>array(5,-203,586,519),442=>array(-2,-220,545,519),443=>array(-5,0,581,742),444=>array(57,-14,692,729),445=>array(-25,-203,579,519),446=>array(-34,-15,341,680),447=>array(20,-208,649,560),448=>array(21,0,244,729),449=>array(21,0,421,729),450=>array(-15,0,428,729),451=>array(21,0,244,729),452=>array(-22,0,1464,927),453=>array(-22,-41,1307,800),454=>array(9,-41,1156,800),455=>array(-22,-208,1106,729),456=>array(-22,-222,951,760),457=>array(30,-222,660,760),458=>array(-24,-208,1296,729),459=>array(-24,-222,1141,760),460=>array(50,-222,973,760),461=>array(-71,0,655,927),462=>array(31,-14,519,800),463=>array(-22,0,473,927),464=>array(51,0,406,800),465=>array(38,-14,746,927),466=>array(30,-14,571,800),467=>array(85,-14,831,927),468=>array(57,-14,604,800),469=>array(85,-14,831,1036),470=>array(57,-14,604,899),471=>array(85,-14,831,1057),472=>array(57,-14,604,920),473=>array(85,-14,831,1058),474=>array(57,-14,604,921),475=>array(85,-14,831,1057),476=>array(57,-14,604,920),477=>array(41,-14,532,533),478=>array(-71,0,655,1036),479=>array(31,-14,519,899),480=>array(-71,0,655,1036),481=>array(31,-14,519,899),482=>array(-92,0,940,914),483=>array(24,-14,800,763),484=>array(38,-14,758,742),485=>array(20,-222,632,533),486=>array(19,-17,711,927),487=>array(-3,-222,576,800),488=>array(-37,0,796,927),489=>array(15,0,568,927),490=>array(38,-204,746,742),491=>array(30,-204,571,533),492=>array(38,-204,746,914),493=>array(30,-204,571,763),494=>array(-27,-14,546,927),495=>array(-25,-203,544,800),496=>array(-128,-222,425,800),497=>array(-22,0,1464,729),498=>array(-22,-41,1307,729),499=>array(9,-41,1156,760),500=>array(21,-14,714,928),501=>array(-3,-222,576,776),502=>array(-21,-14,1097,729),503=>array(-41,-208,751,742),504=>array(-40,0,835,927),505=>array(-40,0,574,800),506=>array(-88,0,638,928),507=>array(31,-14,537,928),508=>array(-92,0,940,928),509=>array(24,-14,800,800),510=>array(-33,-38,816,928),511=>array(-24,-50,625,800),512=>array(-71,0,655,928),513=>array(30,-14,519,800),514=>array(-71,0,655,958),515=>array(30,-14,519,776),516=>array(-22,0,696,928),517=>array(30,-14,534,800),518=>array(-22,0,696,958),519=>array(30,-14,534,776),520=>array(-22,0,444,928),521=>array(14,0,330,801),522=>array(-22,0,451,958),523=>array(30,0,351,767),524=>array(38,-14,746,928),525=>array(30,-14,570,800),526=>array(38,-14,746,958),527=>array(30,-14,570,776),528=>array(-22,0,700,928),529=>array(50,0,528,800),530=>array(-22,0,700,958),531=>array(50,0,528,776),532=>array(85,-14,831,928),533=>array(56,-14,604,800),534=>array(85,-14,831,958),535=>array(56,-14,604,776),536=>array(12,-230,613,742),537=>array(-0,-230,488,533),538=>array(42,-230,725,729),539=>array(43,-230,407,680),540=>array(-23,-210,589,742),541=>array(-21,-211,514,531),542=>array(-22,0,874,927),543=>array(30,0,577,927),544=>array(31,-208,772,743),545=>array(20,-48,650,760),546=>array(4,-14,555,742),547=>array(12,-14,506,760),548=>array(-8,-263,707,729),549=>array(9,-263,549,519),550=>array(-71,0,655,939),551=>array(30,-14,519,788),552=>array(-22,-196,696,729),553=>array(30,-196,534,533),554=>array(38,-14,746,1036),555=>array(30,-14,571,899),556=>array(38,-14,746,1036),557=>array(30,-14,571,894),558=>array(38,-14,746,939),559=>array(30,-14,571,788),560=>array(38,-14,746,1036),561=>array(30,-14,571,899),562=>array(45,0,715,914),563=>array(-18,-222,574,763),564=>array(74,-113,458,760),565=>array(60,-113,792,533),566=>array(52,-113,458,680),567=>array(-128,-222,317,519),568=>array(17,-14,873,760),569=>array(53,-208,908,533),570=>array(-75,-38,774,766),571=>array(-66,-38,783,766),572=>array(-51,-50,599,567),573=>array(-22,0,581,729),574=>array(-89,-38,760,766),575=>array(17,-217,506,533),576=>array(5,-222,546,519),577=>array(-1,0,599,729),578=>array(66,0,479,533),579=>array(-22,0,704,729),580=>array(24,-14,831,729),581=>array(-71,0,655,729),582=>array(-22,-57,696,785),583=>array(30,-56,534,581),584=>array(-142,-208,474,729),585=>array(-128,-222,345,760),586=>array(55,-208,808,742),587=>array(47,-222,660,533),588=>array(-22,0,700,729),589=>array(20,0,529,533),590=>array(18,0,715,729),591=>array(-18,-222,593,519),592=>array(64,-14,552,533),593=>array(37,-14,672,532),594=>array(21,-14,656,531),595=>array(22,-14,574,760),596=>array(11,-14,508,533),597=>array(42,-113,540,527),598=>array(35,-222,641,760),599=>array(17,-14,770,760),600=>array(30,-14,532,533),601=>array(41,-14,532,533),602=>array(36,-14,829,533),603=>array(22,-12,529,526),604=>array(-5,-12,492,526),605=>array(-5,-12,829,526),606=>array(37,-18,630,533),607=>array(-128,-222,345,519),608=>array(0,-222,788,760),609=>array(21,-222,673,519),610=>array(56,-4,536,520),611=>array(44,-219,540,519),612=>array(64,-37,585,520),613=>array(74,-208,621,519),614=>array(31,0,578,760),615=>array(50,-222,578,760),616=>array(5,0,304,760),617=>array(67,0,298,519),618=>array(-15,0,365,519),619=>array(21,0,363,760),620=>array(33,0,439,760),621=>array(40,-222,353,760),622=>array(48,-203,728,760),623=>array(57,-14,902,519),624=>array(74,-208,919,519),625=>array(70,-222,896,533),626=>array(-129,-222,617,533),627=>array(70,-222,686,533),628=>array(11,0,636,519),629=>array(37,-14,564,533),630=>array(56,0,942,521),631=>array(26,-14,626,530),632=>array(-5,-213,602,760),633=>array(-20,-14,459,519),634=>array(-41,-14,480,760),635=>array(-1,-222,534,519),636=>array(32,-207,547,533),637=>array(59,-222,548,533),638=>array(50,0,459,533),639=>array(55,0,368,533),640=>array(11,0,635,519),641=>array(11,0,716,519),642=>array(4,-222,506,533),643=>array(-150,-223,429,760),644=>array(-149,-222,519,760),645=>array(80,-222,410,527),646=>array(-125,-223,429,760),647=>array(35,-161,398,533),648=>array(38,-222,425,680),649=>array(27,-14,626,519),650=>array(34,-14,623,519),651=>array(66,-1,588,519),652=>array(19,0,530,520),653=>array(27,0,801,519),654=>array(1,0,593,741),655=>array(91,0,649,520),656=>array(5,-222,603,519),657=>array(-6,-89,534,519),658=>array(-25,-203,544,519),659=>array(57,-203,544,519),660=>array(47,0,461,761),661=>array(72,0,490,761),662=>array(51,0,469,761),663=>array(60,-223,509,761),664=>array(38,-14,746,742),665=>array(-15,0,580,519),666=>array(14,-18,607,533),667=>array(35,-4,724,760),668=>array(-15,0,674,519),669=>array(-107,-223,338,760),670=>array(90,-208,643,519),671=>array(11,0,517,519),672=>array(34,-208,786,760),673=>array(47,0,461,761),674=>array(72,0,490,761),675=>array(17,-41,1017,760),676=>array(34,-203,1017,760),677=>array(23,-89,1007,760),678=>array(42,0,811,680),679=>array(55,-223,775,760),680=>array(44,-20,823,680),681=>array(-50,-222,916,760),682=>array(31,0,743,760),683=>array(31,-41,726,760),684=>array(30,0,615,625),685=>array(-5,120,406,625),686=>array(-14,-208,600,760),687=>array(-13,-222,657,760),688=>array(47,326,402,751),689=>array(45,329,400,754),690=>array(-7,202,282,752),691=>array(58,334,363,632),692=>array(14,321,318,620),693=>array(24,202,374,617),694=>array(14,326,464,617),695=>array(17,334,505,620),696=>array(-11,212,361,620),697=>array(49,557,217,800),698=>array(49,557,415,800),699=>array(37,456,275,742),700=>array(37,456,275,742),701=>array(87,456,248,742),702=>array(138,481,288,760),703=>array(143,481,293,760),704=>array(4,327,264,752),705=>array(20,327,280,752),706=>array(110,517,361,843),707=>array(88,517,340,843),708=>array(57,561,351,800),709=>array(99,561,393,800),710=>array(95,616,426,800),711=>array(136,616,468,800),712=>array(64,513,190,759),713=>array(140,664,433,756),714=>array(204,616,473,800),715=>array(115,616,319,800),716=>array(64,-90,190,156),717=>array(-9,-189,284,-97),720=>array(60,0,272,434),721=>array(109,303,246,434),722=>array(100,269,250,547),723=>array(106,269,256,547),726=>array(41,165,278,411),727=>array(41,242,278,334),728=>array(153,624,454,776),729=>array(229,645,358,788),730=>array(170,610,421,888),731=>array(137,-196,327,0),732=>array(120,638,461,792),733=>array(131,616,511,800),734=>array(-17,299,364,500),736=>array(28,204,340,617),737=>array(45,326,221,751),738=>array(18,327,328,633),739=>array(-11,334,343,620),740=>array(20,327,280,752),741=>array(131,0,424,693),742=>array(105,0,424,693),743=>array(79,0,424,693),744=>array(52,0,424,693),745=>array(26,0,424,693),748=>array(71,-281,365,-42),750=>array(48,456,471,742),751=>array(49,-241,381,-58),752=>array(29,-281,323,-42),755=>array(100,-240,351,38),759=>array(54,-193,396,-40),768=>array(-365,616,-161,800),769=>array(-276,616,-7,800),770=>array(-386,616,-54,800),771=>array(-360,638,-19,792),772=>array(-340,664,-47,756),773=>array(-450,663,0,755),774=>array(-328,624,-26,776),775=>array(-251,645,-122,788),776=>array(-333,645,-7,788),777=>array(-397,616,-195,866),778=>array(-311,610,-60,888),779=>array(-350,616,31,800),780=>array(-344,616,-13,800),781=>array(-376,616,-258,813),782=>array(-458,616,-176,813),783=>array(-379,616,-63,800),784=>array(-389,624,-88,903),785=>array(-330,624,-28,776),786=>array(-268,456,-84,617),787=>array(-254,606,-113,847),788=>array(-250,606,-111,847),789=>array(-93,616,93,800),790=>array(-373,-253,-168,-69),791=>array(-315,-251,-46,-67),792=>array(-303,-357,-121,-111),793=>array(-330,-357,-147,-111),794=>array(-174,684,63,930),795=>array(-114,338,79,548),796=>array(-288,-389,-138,-111),797=>array(-349,-280,-111,-111),798=>array(-338,-280,-100,-111),799=>array(-342,-357,-104,-111),800=>array(-344,-203,-106,-111),801=>array(-493,-222,-114,139),802=>array(-367,-222,-53,139),803=>array(-358,-213,-229,-70),804=>array(-391,-213,-64,-70),805=>array(-330,-240,-123,-11),806=>array(-318,-230,-135,-69),807=>array(-350,-196,-138,0),808=>array(-313,-196,-123,0),809=>array(-280,-266,-163,-69),810=>array(-380,-253,-70,-69),811=>array(-370,-221,-53,-69),812=>array(-375,-251,-43,-67),813=>array(-407,-253,-75,-69),814=>array(-362,-221,-62,-69),815=>array(-389,-221,-88,-69),816=>array(-398,-222,-57,-68),817=>array(-372,-161,-79,-69),818=>array(-450,-236,0,-143),819=>array(-450,-236,0,-9),820=>array(-686,210,-70,417),821=>array(-315,234,-15,293),822=>array(-630,234,-32,293),823=>array(-629,-50,20,567),824=>array(-815,-38,34,766),825=>array(-297,-378,-147,-100),826=>array(-380,-242,-71,-59),827=>array(-376,-350,-75,-69),828=>array(-397,-221,-80,-69),829=>array(-433,581,-199,820),830=>array(-280,598,-94,877),831=>array(-450,528,0,755),835=>array(-254,606,-113,847),856=>array(12,645,141,788),864=>array(-264,723,510,898),865=>array(-278,729,523,902),880=>array(-22,0,688,729),881=>array(52,0,497,519),882=>array(16,0,762,729),883=>array(31,0,703,519),884=>array(49,557,217,800),885=>array(30,-208,199,35),886=>array(60,0,811,729),887=>array(45,0,612,519),890=>array(184,-208,309,-60),891=>array(20,-14,514,533),892=>array(30,-14,533,533),893=>array(20,-14,514,533),894=>array(-22,-161,290,490),900=>array(204,616,473,800),901=>array(147,645,545,996),902=>array(-71,0,655,800),903=>array(73,255,241,440),904=>array(38,0,859,800),905=>array(38,0,1040,800),906=>array(38,0,610,800),908=>array(38,-14,760,800),910=>array(38,0,928,800),911=>array(1,0,787,800),912=>array(66,16,491,996),913=>array(-71,0,655,729),914=>array(-22,0,704,729),915=>array(-22,0,691,729),916=>array(-38,0,604,729),917=>array(-22,0,696,729),918=>array(-31,0,684,729),919=>array(-22,0,874,729),920=>array(38,-14,746,742),921=>array(-22,0,444,729),922=>array(-22,0,812,729),923=>array(-71,0,655,729),924=>array(-26,0,1018,729),925=>array(-24,0,851,729),926=>array(-14,0,642,729),927=>array(38,-14,746,742),928=>array(-22,0,874,729),929=>array(-22,0,681,729),931=>array(-27,0,640,729),932=>array(42,0,725,729),933=>array(45,0,715,729),934=>array(38,0,745,729),935=>array(-48,0,727,729),936=>array(60,0,880,729),937=>array(-21,0,766,742),938=>array(-22,0,457,939),939=>array(45,0,715,939),940=>array(37,-14,672,800),941=>array(22,-12,545,800),942=>array(68,-208,596,800),943=>array(66,16,430,800),944=>array(66,-1,631,996),945=>array(37,-14,672,532),946=>array(-29,-208,569,769),947=>array(76,-209,601,519),948=>array(17,-14,566,765),949=>array(22,-12,529,526),950=>array(34,-208,573,760),951=>array(68,-208,596,533),952=>array(37,-17,564,771),953=>array(66,16,371,519),954=>array(-15,0,644,519),955=>array(-33,0,540,739),956=>array(28,-208,625,519),957=>array(51,0,604,519),958=>array(24,-208,573,760),959=>array(30,-14,571,533),960=>array(-15,0,674,519),961=>array(-8,-208,580,533),962=>array(54,-208,550,533),963=>array(38,-14,664,519),964=>array(52,16,606,519),965=>array(66,-1,592,519),966=>array(62,-208,792,519),967=>array(-53,-222,636,533),968=>array(97,-208,872,519),969=>array(38,-1,822,519),970=>array(66,16,423,788),971=>array(66,-1,592,788),972=>array(30,-14,571,800),973=>array(66,-1,592,800),974=>array(38,-1,822,800),975=>array(-0,-240,833,729),976=>array(37,-17,545,771),977=>array(45,-17,733,771),978=>array(80,0,697,729),979=>array(38,0,881,800),980=>array(80,0,697,939),981=>array(34,-208,806,760),982=>array(38,-1,876,519),983=>array(26,-222,600,521),984=>array(54,-207,762,742),985=>array(54,-207,582,533),986=>array(55,-208,725,742),987=>array(46,-208,564,616),988=>array(-22,0,691,729),989=>array(-163,-211,508,742),990=>array(15,0,517,729),991=>array(72,0,528,759),992=>array(7,-209,675,742),993=>array(22,-208,574,533),1008=>array(8,-5,581,521),1009=>array(20,-210,580,533),1010=>array(30,-14,533,533),1011=>array(-149,-222,318,760),1012=>array(38,-14,746,742),1013=>array(30,-14,534,533),1014=>array(20,-14,508,533),1015=>array(-22,0,656,729),1016=>array(2,-208,598,760),1017=>array(38,-14,708,742),1018=>array(-26,0,1018,729),1019=>array(0,-208,797,519),1020=>array(-18,-208,604,533),1021=>array(10,-14,679,742),1022=>array(38,-14,708,742),1023=>array(10,-14,679,742),1024=>array(-22,0,696,927),1025=>array(-22,0,696,939),1026=>array(9,-214,727,729),1027=>array(-22,0,673,927),1028=>array(38,-14,708,742),1029=>array(12,-14,613,742),1030=>array(-22,0,444,729),1031=>array(-22,0,490,939),1032=>array(-142,-208,474,729),1033=>array(-39,-14,1017,729),1034=>array(-22,0,1070,729),1035=>array(-10,0,765,729),1036=>array(-22,0,830,927),1037=>array(-22,0,874,927),1038=>array(35,-14,786,997),1039=>array(-8,-157,888,729),1040=>array(-55,0,671,729),1041=>array(-22,0,743,729),1042=>array(-22,0,704,729),1043=>array(-22,0,673,729),1044=>array(-35,-157,817,729),1045=>array(-22,0,696,729),1046=>array(-55,0,1191,729),1047=>array(1,-14,611,742),1048=>array(-22,0,874,729),1049=>array(-22,0,874,999),1050=>array(-22,0,830,729),1051=>array(-39,-14,821,729),1052=>array(-26,0,1018,729),1053=>array(-22,0,874,729),1054=>array(38,-14,746,742),1055=>array(-22,0,874,729),1056=>array(-22,0,681,729),1057=>array(38,-14,708,742),1058=>array(42,0,725,729),1059=>array(35,-14,786,729),1060=>array(34,0,821,729),1061=>array(-48,0,727,729),1062=>array(-8,-157,887,729),1063=>array(81,0,839,729),1064=>array(-26,0,1167,729),1065=>array(-13,-157,1181,729),1066=>array(37,0,796,729),1067=>array(-22,0,1104,729),1068=>array(-22,0,678,729),1069=>array(10,-14,679,742),1070=>array(-22,-14,1114,742),1071=>array(-44,0,817,729),1072=>array(31,-14,519,533),1073=>array(35,-14,625,786),1074=>array(30,-14,550,533),1075=>array(50,-14,498,534),1076=>array(31,-14,597,760),1077=>array(30,-14,534,533),1078=>array(9,-14,1192,533),1079=>array(21,-14,534,533),1080=>array(57,-14,604,519),1081=>array(57,-14,604,817),1082=>array(50,-14,614,533),1083=>array(9,-14,608,519),1084=>array(9,-14,805,519),1085=>array(50,0,606,519),1086=>array(30,-14,571,533),1087=>array(50,0,598,533),1088=>array(22,-208,618,533),1089=>array(30,-14,533,533),1090=>array(50,0,896,533),1091=>array(-18,-222,574,519),1092=>array(27,-208,779,760),1093=>array(-17,0,545,519),1094=>array(57,-217,673,519),1095=>array(57,0,593,519),1096=>array(57,-14,902,519),1097=>array(57,-217,971,519),1098=>array(16,-14,622,534),1099=>array(57,-14,866,519),1100=>array(57,-14,561,519),1101=>array(31,-14,551,533),1102=>array(50,-14,872,533),1103=>array(9,-14,666,519),1104=>array(30,-14,534,800),1105=>array(30,-14,535,788),1106=>array(27,-222,578,760),1107=>array(50,-14,521,800),1108=>array(30,-14,534,533),1109=>array(-0,-14,488,533),1110=>array(30,0,303,760),1111=>array(51,0,419,788),1112=>array(-149,-222,318,760),1113=>array(9,-14,880,519),1114=>array(50,-14,877,519),1115=>array(31,0,578,760),1116=>array(50,-14,614,800),1117=>array(57,-14,604,800),1118=>array(-18,-222,574,823),1119=>array(57,-220,604,519),1122=>array(28,0,728,729),1123=>array(50,-14,912,534),1124=>array(-22,-14,1068,742),1125=>array(68,-14,853,533),1130=>array(9,0,1183,729),1131=>array(25,-14,919,519),1132=>array(-22,0,1405,729),1133=>array(68,-14,1133,519),1136=>array(55,0,1052,729),1137=>array(43,-208,1027,760),1138=>array(38,-14,746,742),1139=>array(31,-14,558,533),1140=>array(61,0,877,742),1141=>array(44,0,707,533),1142=>array(61,0,877,927),1143=>array(44,0,707,800),1164=>array(26,0,726,729),1165=>array(44,-14,570,760),1168=>array(-22,0,708,872),1169=>array(52,0,570,668),1170=>array(-22,0,673,729),1171=>array(50,-14,498,534),1172=>array(-22,-214,691,729),1173=>array(-15,-222,562,519),1174=>array(-55,-157,1191,729),1175=>array(9,-217,1192,533),1176=>array(1,-196,611,742),1177=>array(21,-196,534,533),1178=>array(-22,-157,830,729),1179=>array(50,-217,614,533),1182=>array(-22,0,830,729),1183=>array(50,-14,614,760),1184=>array(37,0,948,729),1185=>array(19,-14,688,533),1186=>array(-22,-157,874,729),1187=>array(50,-217,670,519),1188=>array(-22,0,1103,729),1189=>array(50,0,848,519),1190=>array(-22,-214,1107,729),1191=>array(-15,-222,851,519),1194=>array(38,-196,708,742),1195=>array(30,-196,533,533),1196=>array(42,-157,724,729),1197=>array(50,-217,973,533),1198=>array(45,0,715,729),1199=>array(42,-208,566,519),1200=>array(45,0,714,729),1201=>array(42,-208,566,519),1202=>array(-48,-157,727,729),1203=>array(-17,-217,572,519),1204=>array(20,-157,926,729),1205=>array(31,-217,700,519),1206=>array(81,-157,839,729),1207=>array(57,-217,658,519),1210=>array(-36,0,719,729),1211=>array(30,0,578,760),1216=>array(-22,0,444,729),1217=>array(-55,0,1191,927),1218=>array(9,-14,1192,776),1219=>array(-22,-214,812,729),1220=>array(-15,-222,644,519),1223=>array(-22,-214,874,729),1224=>array(-15,-222,674,519),1227=>array(145,-157,903,729),1228=>array(65,-162,674,519),1231=>array(-36,0,386,760),1232=>array(-55,0,671,936),1233=>array(31,-14,519,776),1234=>array(-55,0,671,939),1235=>array(31,-14,519,788),1236=>array(-92,0,940,729),1237=>array(24,-14,800,533),1238=>array(-22,0,696,927),1239=>array(30,-14,534,776),1240=>array(38,-14,746,742),1241=>array(41,-14,532,533),1242=>array(38,-14,746,939),1243=>array(41,-14,536,788),1244=>array(-55,0,1191,939),1245=>array(9,-14,1192,788),1246=>array(1,-14,611,939),1247=>array(21,-14,534,788),1248=>array(-27,-14,546,729),1249=>array(-25,-203,544,519),1250=>array(-22,0,874,914),1251=>array(57,-14,604,763),1252=>array(-22,0,874,939),1253=>array(57,-14,604,788),1254=>array(38,-14,746,939),1255=>array(30,-14,571,788),1256=>array(38,-14,746,742),1257=>array(37,-14,564,533),1258=>array(38,-14,746,939),1259=>array(37,-14,564,788),1260=>array(10,-14,679,939),1261=>array(31,-14,554,788),1262=>array(35,-14,786,914),1263=>array(-18,-222,574,763),1264=>array(35,-14,786,939),1265=>array(-18,-222,574,788),1266=>array(35,-14,786,927),1267=>array(-18,-222,574,800),1268=>array(81,0,839,939),1269=>array(57,0,593,788),1270=>array(-22,-157,673,729),1271=>array(50,-217,498,534),1272=>array(-22,0,1104,939),1273=>array(57,-14,866,788),1296=>array(72,-14,697,742),1297=>array(15,-14,567,533),1298=>array(-22,-208,838,729),1299=>array(9,-222,609,519),1300=>array(-39,-14,1153,729),1301=>array(9,-14,913,519),1306=>array(44,-196,771,742),1307=>array(47,-208,599,533),1308=>array(45,0,1085,729),1309=>array(27,0,801,519),1329=>array(85,-14,856,729),1330=>array(-34,0,722,743),1331=>array(50,0,822,743),1332=>array(18,0,835,743),1333=>array(85,-14,769,729),1334=>array(22,-72,709,743),1335=>array(-26,-72,716,729),1336=>array(-28,-72,727,743),1337=>array(-33,-10,1063,743),1338=>array(14,-14,869,729),1339=>array(-20,0,698,729),1340=>array(-13,-72,615,729),1341=>array(-19,-14,1054,729),1342=>array(74,-13,831,743),1343=>array(70,0,723,729),1344=>array(-40,-66,625,729),1345=>array(25,-32,720,743),1346=>array(24,-72,794,743),1347=>array(-33,0,734,739),1348=>array(85,-14,963,729),1349=>array(18,-14,708,742),1350=>array(27,-14,797,801),1351=>array(57,-14,725,729),1352=>array(-34,0,699,743),1353=>array(83,-84,708,743),1354=>array(18,0,845,743),1355=>array(27,-72,723,744),1356=>array(-34,0,885,743),1357=>array(85,-14,818,729),1358=>array(41,-72,795,729),1359=>array(18,-14,677,742),1360=>array(-34,0,721,743),1361=>array(15,-14,694,742),1362=>array(-33,0,725,729),1363=>array(35,0,827,729),1364=>array(-100,0,756,743),1365=>array(28,-14,754,742),1366=>array(9,-14,828,729),1369=>array(143,481,293,760),1370=>array(-4,408,254,729),1371=>array(-13,615,292,799),1372=>array(-22,618,377,893),1373=>array(27,615,268,799),1374=>array(-15,605,393,854),1375=>array(26,618,413,760),1377=>array(53,-14,899,519),1378=>array(-25,-208,611,533),1379=>array(62,-208,694,533),1380=>array(15,-208,716,533),1381=>array(50,-14,617,760),1382=>array(62,-208,686,533),1383=>array(-27,0,576,760),1384=>array(-25,-208,624,533),1385=>array(-25,-208,838,532),1386=>array(25,-14,729,760),1387=>array(-58,-208,591,760),1388=>array(-24,-208,375,519),1389=>array(-54,-208,923,760),1390=>array(23,-14,624,789),1391=>array(68,-208,593,760),1392=>array(-24,0,589,760),1393=>array(13,-14,541,783),1394=>array(15,-208,680,533),1395=>array(31,-14,625,771),1396=>array(31,-14,708,771),1397=>array(-138,-208,308,519),1398=>array(40,-14,573,771),1399=>array(-67,-208,455,538),1400=>array(-3,0,611,533),1401=>array(-38,-208,396,540),1402=>array(70,-208,916,519),1403=>array(0,-208,598,537),1404=>array(-3,0,617,533),1405=>array(53,-14,601,519),1406=>array(49,-208,639,760),1407=>array(52,-14,883,533),1408=>array(-34,-208,615,533),1409=>array(36,-222,688,533),1410=>array(-1,0,431,519),1411=>array(49,-208,880,760),1412=>array(-16,-208,637,533),1413=>array(42,-14,582,533),1414=>array(19,-208,826,760),1415=>array(50,-14,717,760),1417=>array(64,-14,240,434),1418=>array(31,203,328,365),4256=>array(8,0,674,848),4257=>array(118,0,748,847),4258=>array(53,-81,729,848),4259=>array(18,-0,787,847),4260=>array(56,-0,730,848),4261=>array(53,-0,883,848),4262=>array(104,-1,840,847),4263=>array(42,-1,1009,847),4264=>array(104,-0,571,847),4265=>array(87,-0,638,847),4266=>array(57,-0,873,847),4267=>array(10,-0,834,847),4268=>array(-33,-0,682,847),4269=>array(39,-35,952,847),4270=>array(104,-0,865,847),4271=>array(104,-0,839,846),4272=>array(56,-0,916,846),4273=>array(53,-0,680,846),4274=>array(8,-0,672,847),4275=>array(41,-58,848,846),4276=>array(55,-0,854,846),4277=>array(72,-0,891,846),4278=>array(-33,-0,661,846),4279=>array(118,-0,777,846),4280=>array(44,-0,767,847),4281=>array(-32,-0,637,846),4282=>array(-10,-1,764,848),4283=>array(13,-0,857,847),4284=>array(-33,-0,690,847),4285=>array(9,-0,717,847),4286=>array(8,-0,759,846),4287=>array(-33,-0,971,846),4288=>array(57,-0,976,846),4289=>array(-33,-0,667,846),4290=>array(36,-0,730,847),4291=>array(89,-1,749,846),4292=>array(56,-0,819,846),4293=>array(12,-0,960,847),4304=>array(18,0,475,596),4305=>array(32,0,525,853),4306=>array(-44,-225,507,566),4307=>array(24,-220,763,556),4308=>array(-51,-225,521,556),4309=>array(-51,-225,522,556),4310=>array(66,0,639,855),4311=>array(31,0,787,556),4312=>array(31,0,514,556),4313=>array(-66,-225,479,556),4314=>array(31,-220,981,562),4315=>array(31,0,619,854),4316=>array(35,0,634,877),4317=>array(35,-123,754,556),4318=>array(17,1,580,854),4319=>array(-42,-225,580,555),4320=>array(39,-0,754,846),4321=>array(75,0,532,854),4322=>array(3,-225,651,706),4323=>array(53,-225,647,556),4324=>array(47,-225,752,556),4325=>array(-35,-225,656,855),4326=>array(19,-220,793,556),4327=>array(-62,-225,566,556),4328=>array(42,0,627,854),4329=>array(-14,-5,538,855),4330=>array(14,-225,618,556),4331=>array(28,0,615,854),4332=>array(18,-229,663,854),4333=>array(-41,-225,573,854),4334=>array(75,0,569,854),4335=>array(-84,-225,667,556),4336=>array(18,0,609,854),4337=>array(24,0,633,863),4338=>array(-51,-94,526,556),4339=>array(-35,-225,581,615),4340=>array(-35,-225,570,855),4341=>array(15,0,666,854),4342=>array(27,-225,810,699),4343=>array(-30,-225,512,566),4344=>array(-24,-225,524,556),4345=>array(24,-225,572,561),4346=>array(38,-69,535,556),4347=>array(-39,0,377,511),4348=>array(62,341,457,882),7424=>array(-15,0,558,519),7425=>array(-15,0,815,519),7426=>array(39,-14,814,533),7427=>array(-15,0,620,519),7428=>array(37,-14,533,533),7429=>array(-15,0,580,519),7430=>array(-15,0,580,519),7431=>array(-20,0,568,519),7432=>array(-39,-18,448,533),7433=>array(-3,-238,270,522),7434=>array(-28,-14,518,519),7435=>array(-15,0,644,519),7436=>array(-3,0,517,519),7437=>array(-15,0,796,519),7438=>array(45,0,679,519),7439=>array(30,-14,571,533),7440=>array(15,-14,511,533),7441=>array(37,-33,529,553),7442=>array(31,-2,526,521),7443=>array(54,-50,548,567),7444=>array(40,-14,895,533),7445=>array(2,-14,487,534),7446=>array(82,260,610,533),7447=>array(82,-14,610,259),7448=>array(-15,0,534,519),7449=>array(5,0,710,519),7450=>array(85,0,710,519),7451=>array(49,0,562,519),7452=>array(57,-14,617,519),7453=>array(-1,-74,583,596),7454=>array(28,-74,817,596),7455=>array(-29,-240,614,761),7456=>array(19,0,591,519),7457=>array(27,0,838,519),7458=>array(-14,0,526,519),7459=>array(-5,-14,527,519),7460=>array(-1,-14,532,742),7461=>array(-15,-14,680,533),7462=>array(-15,0,540,519),7463=>array(-15,0,558,519),7464=>array(-15,0,674,519),7465=>array(-15,0,534,519),7466=>array(68,0,792,519),7467=>array(-26,-14,650,519),7468=>array(-44,334,413,735),7469=>array(-58,334,592,735),7470=>array(-14,334,444,735),7471=>array(-9,334,473,742),7472=>array(-14,334,468,735),7473=>array(-14,334,438,735),7474=>array(26,334,483,735),7475=>array(23,326,460,742),7476=>array(-14,334,551,735),7477=>array(-14,334,280,735),7478=>array(-90,220,299,735),7479=>array(-14,334,512,735),7480=>array(-14,334,366,735),7481=>array(-17,334,642,735),7482=>array(-16,334,536,735),7483=>array(42,326,559,734),7484=>array(23,326,470,742),7485=>array(4,326,351,750),7486=>array(-14,334,429,735),7487=>array(-14,334,441,735),7488=>array(26,334,457,735),7489=>array(53,326,523,735),7490=>array(28,334,684,735),7491=>array(19,318,327,625),7492=>array(40,318,348,625),7493=>array(23,318,423,624),7494=>array(24,318,513,625),7495=>array(39,326,391,752),7496=>array(21,326,399,752),7497=>array(33,326,352,627),7498=>array(40,326,350,627),7499=>array(23,324,330,627),7500=>array(28,324,334,627),7501=>array(27,212,438,627),7502=>array(48,203,220,621),7503=>array(38,334,386,752),7504=>array(50,334,583,627),7505=>array(62,212,399,627),7506=>array(34,326,374,627),7507=>array(22,326,334,627),7508=>array(66,477,399,627),7509=>array(66,326,399,477),7510=>array(39,220,414,627),7511=>array(52,326,281,708),7512=>array(61,326,405,620),7513=>array(3,285,364,660),7514=>array(61,326,593,620),7515=>array(60,334,387,620),7516=>array(-6,326,430,633),7517=>array(-13,217,354,765),7518=>array(44,217,375,625),7519=>array(12,326,352,763),7520=>array(37,217,497,625),7521=>array(-29,209,396,633),7522=>array(19,0,191,418),7523=>array(58,0,363,298),7524=>array(61,-8,405,286),7525=>array(60,0,387,286),7526=>array(-13,-117,354,431),7527=>array(44,-117,375,291),7528=>array(-1,-117,364,299),7529=>array(37,-117,497,291),7530=>array(-29,-125,396,299),7531=>array(57,-14,900,533),7543=>array(-11,-222,575,533),7544=>array(-14,334,551,735),7547=>array(-15,0,365,519),7548=>array(28,0,336,519),7549=>array(22,-208,657,533),7550=>array(18,-14,617,519),7551=>array(-19,-14,634,519),7557=>array(-35,-222,386,760),7579=>array(13,326,413,631),7580=>array(34,326,351,627),7581=>array(43,272,357,624),7582=>array(23,326,374,754),7583=>array(24,324,334,627),7584=>array(-34,229,325,752),7585=>array(-1,212,280,620),7586=>array(28,212,439,620),7587=>array(71,220,416,620),7588=>array(21,334,210,752),7589=>array(60,334,206,620),7590=>array(9,334,249,620),7591=>array(38,334,277,620),7592=>array(-4,211,273,752),7593=>array(43,212,241,752),7594=>array(15,212,281,752),7595=>array(9,334,328,621),7596=>array(62,212,583,627),7597=>array(71,220,604,620),7598=>array(-2,212,468,627),7599=>array(62,212,451,627),7600=>array(9,334,403,621),7601=>array(38,326,370,627),7602=>array(36,217,418,752),7603=>array(16,212,333,627),7604=>array(-14,211,351,752),7605=>array(60,212,317,708),7606=>array(42,326,419,620),7607=>array(36,332,379,628),7608=>array(33,326,386,625),7609=>array(60,333,389,620),7610=>array(12,334,334,620),7611=>array(-9,312,332,642),7612=>array(21,212,397,620),7613=>array(14,285,354,620),7614=>array(2,222,361,620),7615=>array(38,325,370,758),7620=>array(-381,616,5,800),7621=>array(-420,616,-87,800),7622=>array(-363,616,-30,800),7623=>array(-456,616,-69,800),7624=>array(-447,616,-3,800),7625=>array(-482,616,32,800),7680=>array(-71,-240,655,729),7681=>array(30,-240,519,533),7682=>array(-22,0,704,939),7683=>array(21,-14,581,939),7684=>array(-22,-213,704,729),7685=>array(21,-213,581,760),7686=>array(-22,-161,704,729),7687=>array(21,-161,581,760),7688=>array(38,-196,708,927),7689=>array(30,-196,540,800),7690=>array(-22,0,743,939),7691=>array(9,-14,609,939),7692=>array(-22,-213,743,729),7693=>array(9,-213,610,760),7694=>array(-22,-161,743,729),7695=>array(9,-161,609,760),7696=>array(-22,-196,743,729),7697=>array(9,-196,609,760),7698=>array(-22,-240,743,729),7699=>array(9,-240,610,760),7700=>array(-22,0,696,1057),7701=>array(30,-14,534,926),7702=>array(-22,0,696,1057),7703=>array(30,-14,578,926),7704=>array(-22,-240,696,729),7705=>array(30,-240,534,533),7706=>array(-22,-222,696,729),7707=>array(30,-222,534,533),7708=>array(-22,-196,696,927),7709=>array(30,-196,534,776),7710=>array(-22,0,691,939),7711=>array(-53,-190,516,939),7712=>array(38,-14,730,938),7713=>array(20,-222,600,756),7714=>array(-22,0,874,939),7715=>array(30,0,577,939),7716=>array(-22,-213,874,729),7717=>array(30,-213,578,760),7718=>array(-22,0,874,939),7719=>array(30,0,577,939),7720=>array(-22,-196,874,729),7721=>array(30,-196,577,760),7722=>array(-22,-221,874,729),7723=>array(30,-221,577,760),7724=>array(-52,-222,444,729),7725=>array(-98,-222,303,760),7726=>array(-22,0,481,1057),7727=>array(51,0,435,917),7728=>array(-22,0,812,927),7729=>array(30,0,583,927),7730=>array(-22,-213,812,729),7731=>array(30,-213,583,760),7732=>array(-22,-161,812,729),7733=>array(30,-161,583,760),7734=>array(-22,-213,582,729),7735=>array(20,-213,319,760),7736=>array(-22,-213,582,914),7737=>array(20,-213,411,914),7738=>array(-22,-161,582,729),7739=>array(-66,-161,319,760),7740=>array(-22,-240,582,729),7741=>array(-100,-240,319,760),7742=>array(-26,0,1018,927),7743=>array(50,0,895,800),7744=>array(-26,0,1018,937),7745=>array(50,0,896,788),7746=>array(-26,-213,1018,729),7747=>array(50,-213,896,533),7748=>array(-24,0,851,939),7749=>array(50,0,598,788),7750=>array(-24,-213,851,729),7751=>array(50,-213,598,533),7752=>array(-24,-161,851,729),7753=>array(50,-161,597,533),7754=>array(-24,-257,851,729),7755=>array(50,-243,598,533),7756=>array(38,-14,746,1057),7757=>array(30,-14,620,916),7758=>array(38,-14,746,1055),7759=>array(30,-14,586,912),7760=>array(38,-14,746,1057),7761=>array(30,-14,571,926),7762=>array(38,-14,746,1057),7763=>array(30,-14,593,926),7764=>array(-22,0,681,927),7765=>array(22,-208,618,800),7766=>array(-22,0,681,939),7767=>array(22,-208,618,788),7768=>array(-22,0,700,939),7769=>array(50,0,528,788),7770=>array(-22,-213,700,729),7771=>array(42,-213,529,533),7772=>array(-22,-213,700,914),7773=>array(42,-213,529,756),7774=>array(-22,-161,700,729),7775=>array(-46,-161,528,533),7776=>array(12,-14,613,939),7777=>array(-0,-14,488,788),7778=>array(12,-213,613,742),7779=>array(-0,-213,488,533),7780=>array(12,-14,628,959),7781=>array(-0,-14,533,777),7782=>array(12,-14,613,1065),7783=>array(-0,-14,505,883),7784=>array(12,-213,613,939),7785=>array(-0,-213,488,788),7786=>array(42,0,725,939),7787=>array(43,-14,407,939),7788=>array(42,-213,725,729),7789=>array(43,-213,407,680),7790=>array(42,-161,724,729),7791=>array(20,-161,407,680),7792=>array(42,-240,725,729),7793=>array(-18,-240,407,680),7794=>array(85,-213,831,729),7795=>array(56,-213,604,519),7796=>array(85,-222,831,729),7797=>array(56,-222,604,519),7798=>array(85,-240,831,729),7799=>array(56,-240,604,519),7800=>array(85,-14,831,1057),7801=>array(57,-14,632,915),7802=>array(85,-14,831,1055),7803=>array(57,-14,604,930),7804=>array(47,0,774,929),7805=>array(18,0,529,792),7806=>array(48,-213,775,729),7807=>array(19,-213,530,521),7808=>array(45,0,1085,931),7809=>array(27,0,801,800),7810=>array(45,0,1085,931),7811=>array(27,0,801,800),7812=>array(45,0,1085,945),7813=>array(27,0,801,736),7814=>array(45,0,1085,974),7815=>array(26,0,801,788),7816=>array(45,-211,1085,729),7817=>array(27,-213,801,519),7818=>array(-48,0,727,939),7819=>array(-17,0,545,788),7820=>array(-48,0,727,939),7821=>array(-17,0,545,788),7822=>array(45,0,715,942),7823=>array(-18,-222,574,788),7824=>array(-31,0,684,982),7825=>array(-14,-41,526,800),7826=>array(-31,-213,684,729),7827=>array(-14,-213,526,560),7828=>array(-31,-161,684,729),7829=>array(-14,-161,526,560),7830=>array(30,-161,577,760),7831=>array(43,-14,430,939),7832=>array(26,0,801,888),7833=>array(-18,-222,574,888),7834=>array(30,-14,870,760),7835=>array(-53,-190,516,939),7836=>array(-53,-190,516,760),7837=>array(-53,-190,516,760),7838=>array(-35,-14,807,743),7839=>array(17,-14,566,765),7840=>array(-71,-213,655,729),7841=>array(30,-213,519,533),7842=>array(-71,0,655,1048),7843=>array(30,-14,519,866),7844=>array(-71,0,748,1054),7845=>array(31,-14,658,872),7846=>array(-71,0,688,1054),7847=>array(31,-14,599,872),7848=>array(-71,0,761,1116),7849=>array(31,-14,671,934),7850=>array(-71,0,655,1069),7851=>array(31,-14,532,887),7852=>array(-71,-213,655,982),7853=>array(30,-213,519,800),7854=>array(-71,0,655,1057),7855=>array(31,-14,539,901),7856=>array(-71,0,655,1057),7857=>array(31,-14,519,901),7858=>array(-71,0,655,1145),7859=>array(31,-14,519,989),7860=>array(-71,0,655,1069),7861=>array(31,-14,550,913),7862=>array(-71,-213,655,958),7863=>array(30,-213,519,776),7864=>array(-22,-213,696,729),7865=>array(30,-213,534,533),7866=>array(-22,0,696,1048),7867=>array(30,-14,534,866),7868=>array(-22,0,696,929),7869=>array(30,-14,534,792),7870=>array(-22,0,766,1054),7871=>array(30,-14,681,872),7872=>array(-22,0,708,1054),7873=>array(30,-14,622,872),7874=>array(-22,0,779,1116),7875=>array(30,-14,694,934),7876=>array(-22,0,696,1069),7877=>array(30,-14,554,887),7878=>array(-22,-213,696,982),7879=>array(30,-213,534,800),7880=>array(-22,0,444,1048),7881=>array(30,0,418,1106),7882=>array(-22,-213,444,729),7883=>array(28,-213,303,760),7884=>array(38,-213,746,742),7885=>array(30,-213,571,533),7886=>array(38,-14,746,1048),7887=>array(30,-14,570,866),7888=>array(38,-14,800,1054),7889=>array(30,-14,695,872),7890=>array(38,-14,746,1054),7891=>array(30,-14,636,872),7892=>array(38,-14,813,1116),7893=>array(30,-14,708,934),7894=>array(38,-14,746,1069),7895=>array(30,-14,571,887),7896=>array(38,-213,746,982),7897=>array(30,-213,570,800),7898=>array(37,-14,844,927),7899=>array(31,-14,680,800),7900=>array(37,-14,844,927),7901=>array(31,-14,680,800),7902=>array(37,-14,844,1048),7903=>array(31,-14,680,866),7904=>array(37,-14,844,929),7905=>array(31,-14,680,792),7906=>array(37,-213,844,760),7907=>array(31,-213,680,548),7908=>array(85,-213,831,729),7909=>array(57,-213,604,519),7910=>array(85,-14,831,1048),7911=>array(56,-14,604,866),7912=>array(88,-14,1015,927),7913=>array(59,-14,734,800),7914=>array(88,-14,1015,927),7915=>array(59,-14,734,800),7916=>array(88,-14,1015,1048),7917=>array(59,-14,734,866),7918=>array(88,-14,1015,929),7919=>array(59,-14,734,792),7920=>array(88,-213,1015,816),7921=>array(59,-213,734,548),7922=>array(45,0,715,931),7923=>array(-18,-222,574,776),7924=>array(45,-213,714,729),7925=>array(-18,-222,574,519),7926=>array(45,0,714,1051),7927=>array(-18,-222,574,866),7928=>array(45,0,714,929),7929=>array(-18,-222,574,792),7930=>array(-22,0,918,729),7931=>array(31,0,653,760),7936=>array(37,-14,672,837),7937=>array(37,-14,672,837),7938=>array(37,-14,672,837),7939=>array(37,-14,672,837),7940=>array(37,-14,672,837),7941=>array(37,-14,672,837),7942=>array(37,-14,672,1009),7943=>array(37,-14,672,1009),7944=>array(-71,0,655,837),7945=>array(-71,0,655,837),7946=>array(55,0,837,837),7947=>array(63,0,837,837),7948=>array(-21,0,705,837),7949=>array(-5,0,721,837),7950=>array(-71,0,655,1009),7951=>array(-71,0,655,1009),7952=>array(22,-12,529,837),7953=>array(22,-12,529,837),7954=>array(22,-12,529,837),7955=>array(22,-12,529,837),7956=>array(22,-12,567,837),7957=>array(22,-12,570,837),7960=>array(62,0,835,837),7961=>array(63,0,828,837),7962=>array(55,0,1063,837),7963=>array(63,0,1063,837),7964=>array(51,0,994,837),7965=>array(57,0,1018,837),7968=>array(68,-208,596,837),7969=>array(68,-208,596,837),7970=>array(68,-208,596,837),7971=>array(68,-208,596,837),7972=>array(68,-208,610,837),7973=>array(68,-208,606,837),7974=>array(68,-208,613,1009),7975=>array(68,-208,604,1009),7976=>array(62,0,1014,837),7977=>array(63,0,1008,837),7978=>array(55,0,1246,837),7979=>array(63,0,1249,837),7980=>array(51,0,1174,837),7981=>array(57,0,1201,837),7982=>array(95,0,1101,1009),7983=>array(92,0,1098,1009),7984=>array(66,16,371,837),7985=>array(66,16,371,837),7986=>array(40,16,417,837),7987=>array(50,16,425,837),7988=>array(62,16,448,837),7989=>array(53,16,448,837),7990=>array(66,16,459,1009),7991=>array(66,16,453,1009),7992=>array(62,0,589,837),7993=>array(63,0,578,837),7994=>array(55,0,813,837),7995=>array(63,0,815,837),7996=>array(51,0,742,837),7997=>array(57,0,771,837),7998=>array(95,0,673,1009),7999=>array(92,0,665,1009),8000=>array(30,-14,571,837),8001=>array(30,-14,571,837),8002=>array(30,-14,571,837),8003=>array(30,-14,571,837),8004=>array(30,-14,601,837),8005=>array(30,-14,591,837),8008=>array(62,-14,772,837),8009=>array(63,-14,803,837),8010=>array(55,-14,1077,837),8011=>array(63,-14,1075,837),8012=>array(51,-14,893,837),8013=>array(57,-14,921,837),8016=>array(66,-1,592,837),8017=>array(66,-1,592,837),8018=>array(66,-1,592,837),8019=>array(66,-1,592,837),8020=>array(66,-1,603,837),8021=>array(66,-1,600,837),8022=>array(66,-1,592,1009),8023=>array(66,-1,592,1009),8025=>array(63,0,902,837),8027=>array(63,0,1139,837),8029=>array(57,0,1092,837),8031=>array(92,0,989,1009),8032=>array(38,-1,822,837),8033=>array(38,-1,822,837),8034=>array(38,-1,822,837),8035=>array(38,-1,822,837),8036=>array(38,-1,822,837),8037=>array(38,-1,822,837),8038=>array(38,-1,822,1009),8039=>array(38,-1,822,1009),8040=>array(17,0,803,837),8041=>array(45,0,832,837),8042=>array(55,0,1106,837),8043=>array(63,0,1111,837),8044=>array(51,0,914,837),8045=>array(57,0,944,837),8046=>array(95,0,885,1009),8047=>array(92,0,919,1009),8048=>array(37,-14,672,800),8049=>array(37,-14,672,800),8050=>array(22,-12,529,800),8051=>array(22,-12,545,800),8052=>array(68,-208,596,800),8053=>array(68,-208,596,800),8054=>array(66,16,371,800),8055=>array(66,16,430,800),8056=>array(30,-14,571,800),8057=>array(30,-14,571,800),8058=>array(66,-1,592,800),8059=>array(66,-1,592,800),8060=>array(38,-1,822,800),8061=>array(38,-1,822,800),8064=>array(37,-208,672,837),8065=>array(37,-208,672,837),8066=>array(37,-208,672,837),8067=>array(37,-208,672,837),8068=>array(37,-208,672,837),8069=>array(37,-208,672,837),8070=>array(37,-208,672,1009),8071=>array(37,-208,672,1009),8072=>array(-71,-208,655,837),8073=>array(-71,-208,655,837),8074=>array(55,-208,837,837),8075=>array(63,-208,837,837),8076=>array(-21,-208,705,837),8077=>array(-5,-208,721,837),8078=>array(-71,-208,655,1009),8079=>array(-71,-208,655,1009),8080=>array(68,-208,596,837),8081=>array(68,-208,596,837),8082=>array(68,-208,596,837),8083=>array(68,-208,596,837),8084=>array(68,-208,610,837),8085=>array(68,-208,606,837),8086=>array(68,-208,613,1009),8087=>array(68,-208,604,1009),8088=>array(62,-208,1014,837),8089=>array(63,-208,1008,837),8090=>array(55,-208,1246,837),8091=>array(63,-208,1249,837),8092=>array(51,-208,1174,837),8093=>array(57,-208,1201,837),8094=>array(95,-208,1101,1009),8095=>array(92,-208,1098,1009),8096=>array(38,-208,822,837),8097=>array(38,-208,822,837),8098=>array(38,-208,822,837),8099=>array(38,-208,822,837),8100=>array(38,-208,822,837),8101=>array(38,-208,822,837),8102=>array(38,-208,822,1009),8103=>array(38,-208,822,1009),8104=>array(17,-208,803,837),8105=>array(45,-208,832,837),8106=>array(55,-208,1106,837),8107=>array(63,-208,1111,837),8108=>array(51,-208,914,837),8109=>array(57,-208,944,837),8110=>array(95,-208,885,1009),8111=>array(92,-208,919,1009),8112=>array(37,-14,672,776),8113=>array(37,-14,672,756),8114=>array(37,-208,672,800),8115=>array(37,-208,672,532),8116=>array(37,-208,672,800),8118=>array(37,-14,672,792),8119=>array(37,-208,672,792),8120=>array(-71,0,655,936),8121=>array(-71,0,655,914),8122=>array(-40,0,687,800),8123=>array(-71,0,655,800),8124=>array(-71,-208,655,729),8125=>array(210,596,350,837),8126=>array(184,-208,309,-60),8127=>array(210,596,350,837),8128=>array(120,638,461,792),8129=>array(147,645,520,959),8130=>array(68,-208,596,800),8131=>array(68,-208,596,533),8132=>array(68,-208,596,800),8134=>array(68,-208,596,792),8135=>array(68,-208,596,792),8136=>array(55,0,910,800),8137=>array(38,0,859,800),8138=>array(55,0,1095,800),8139=>array(38,0,1040,800),8140=>array(-22,-208,874,729),8141=>array(92,596,468,837),8142=>array(101,596,487,837),8143=>array(160,596,501,1009),8144=>array(66,16,407,776),8145=>array(66,16,391,756),8146=>array(66,16,423,997),8147=>array(66,16,491,996),8150=>array(66,16,411,792),8151=>array(66,16,470,959),8152=>array(-22,0,444,927),8153=>array(-22,0,444,914),8154=>array(55,0,665,800),8155=>array(38,0,610,800),8157=>array(101,596,476,837),8158=>array(91,596,487,837),8159=>array(157,596,499,1009),8160=>array(66,-1,592,776),8161=>array(66,-1,592,756),8162=>array(66,-1,592,997),8163=>array(66,-1,631,996),8164=>array(-8,-208,580,837),8165=>array(-8,-208,580,837),8166=>array(66,-1,592,792),8167=>array(66,-1,604,959),8168=>array(45,0,715,927),8169=>array(45,0,715,914),8170=>array(55,0,989,800),8171=>array(38,0,928,800),8172=>array(63,0,824,837),8173=>array(147,645,474,997),8174=>array(147,645,545,996),8175=>array(115,616,319,800),8178=>array(38,-208,822,800),8179=>array(38,-208,822,519),8180=>array(38,-208,822,800),8182=>array(38,-1,822,746),8183=>array(38,-208,822,746),8184=>array(55,-14,923,800),8185=>array(38,-14,760,800),8186=>array(55,0,956,800),8187=>array(1,0,787,800),8188=>array(-21,-208,766,742),8189=>array(204,616,473,800),8190=>array(212,596,352,837),8208=>array(37,202,336,334),8209=>array(37,202,336,334),8210=>array(38,207,588,324),8211=>array(38,207,412,324),8212=>array(38,207,862,324),8213=>array(-10,207,911,324),8214=>array(116,-236,356,764),8215=>array(0,-236,450,-9),8216=>array(37,456,275,742),8217=>array(29,443,268,729),8218=>array(13,-130,251,156),8219=>array(75,443,239,729),8220=>array(37,456,479,742),8221=>array(29,443,472,729),8222=>array(13,-130,456,156),8223=>array(75,443,444,729),8224=>array(44,-96,483,729),8225=>array(-13,-96,483,729),8226=>array(129,196,446,547),8227=>array(129,157,481,586),8228=>array(73,-14,241,172),8229=>array(73,-14,534,172),8230=>array(73,-14,827,172),8240=>array(53,-14,1194,742),8241=>array(53,-14,1579,742),8242=>array(1,547,232,729),8243=>array(1,547,396,729),8244=>array(1,547,562,729),8245=>array(145,547,312,729),8246=>array(145,547,479,729),8247=>array(145,547,642,729),8248=>array(91,-238,569,29),8249=>array(62,64,316,522),8250=>array(44,64,298,522),8252=>array(9,-14,570,729),8253=>array(92,-14,517,742),8254=>array(0,663,450,755),8258=>array(20,-37,901,832),8260=>array(-234,-14,384,742),8261=>array(35,-132,439,760),8262=>array(-14,-132,391,760),8263=>array(63,-14,975,742),8264=>array(92,-14,776,742),8265=>array(9,-14,742,742),8267=>array(42,-96,554,729),8268=>array(67,189,382,541),8269=>array(67,189,382,541),8270=>array(20,0,451,464),8271=>array(34,-161,231,490),8273=>array(47,-14,396,797),8274=>array(2,-93,476,729),8275=>array(44,221,856,406),8279=>array(1,547,726,729),8304=>array(21,326,364,742),8305=>array(19,334,191,752),8308=>array(4,334,354,742),8309=>array(10,326,362,742),8310=>array(19,326,368,742),8311=>array(31,334,362,742),8312=>array(10,326,373,742),8313=>array(13,326,363,742),8314=>array(60,334,415,679),8315=>array(60,475,415,537),8316=>array(60,415,415,598),8317=>array(53,249,290,752),8318=>array(-22,249,215,752),8319=>array(31,334,376,627),8320=>array(21,0,364,416),8321=>array(35,8,305,416),8322=>array(2,8,357,416),8323=>array(6,0,361,416),8324=>array(4,8,354,416),8325=>array(10,0,362,416),8326=>array(19,0,368,416),8327=>array(31,8,362,416),8328=>array(10,0,373,416),8329=>array(13,0,363,416),8330=>array(60,8,415,353),8331=>array(60,149,415,211),8332=>array(60,89,415,272),8333=>array(53,-78,290,426),8334=>array(-22,-78,215,426),8336=>array(19,-8,327,299),8337=>array(33,0,352,301),8338=>array(34,0,374,301),8339=>array(-11,8,343,293),8340=>array(40,0,350,301),8341=>array(47,0,402,425),8342=>array(38,8,386,426),8343=>array(45,0,221,425),8344=>array(50,8,583,301),8345=>array(31,8,376,301),8346=>array(39,-106,414,301),8347=>array(18,1,328,307),8348=>array(52,0,281,382),8358=>array(-16,0,642,729),8364=>array(-22,-14,626,742),8367=>array(-17,-193,1051,723),8369=>array(-22,0,726,729),8372=>array(3,-14,788,742),8373=>array(74,-146,620,761),8376=>array(37,0,725,729),8377=>array(48,0,654,729),8451=>array(78,-14,1070,749),8457=>array(78,0,1053,749),8462=>array(30,0,578,760),8463=>array(31,0,578,760),8470=>array(-31,-14,938,731),8482=>array(104,447,756,729),8486=>array(-21,0,766,742),8487=>array(35,-13,822,729),8490=>array(-22,0,812,729),8491=>array(-88,0,638,928),8498=>array(-52,0,661,729),8513=>array(4,-14,672,742),8514=>array(8,0,499,729),8515=>array(10,0,604,729),8516=>array(2,0,674,729),8523=>array(42,-14,838,742),8526=>array(-35,0,553,519),8528=>array(25,-14,906,742),8529=>array(25,-14,907,742),8530=>array(25,-14,1303,742),8531=>array(25,-14,905,742),8532=>array(2,-14,905,742),8533=>array(25,-14,906,742),8534=>array(2,-14,906,742),8535=>array(6,-14,906,742),8536=>array(4,-14,906,742),8537=>array(25,-14,913,742),8538=>array(10,-14,913,742),8539=>array(25,-14,917,742),8540=>array(6,-14,917,742),8541=>array(10,-14,917,742),8542=>array(31,-14,917,742),8543=>array(25,-14,788,742),8544=>array(-22,0,444,729),8545=>array(-22,0,686,729),8546=>array(-22,0,927,729),8547=>array(-22,0,1061,729),8548=>array(48,0,775,729),8549=>array(48,0,1037,729),8550=>array(48,0,1279,729),8551=>array(48,0,1521,729),8552=>array(-22,0,991,729),8553=>array(-48,0,727,729),8554=>array(-48,0,993,729),8555=>array(-48,0,1235,729),8556=>array(-22,0,582,729),8557=>array(38,-14,708,742),8558=>array(-22,0,743,729),8559=>array(-26,0,1018,729),8560=>array(30,0,303,760),8561=>array(30,0,645,760),8562=>array(30,0,987,760),8563=>array(30,0,872,760),8564=>array(19,0,530,521),8565=>array(19,0,826,760),8566=>array(19,0,1168,760),8567=>array(19,0,1510,760),8568=>array(30,0,887,760),8569=>array(-17,0,545,519),8570=>array(-17,0,840,760),8571=>array(-17,0,1182,760),8572=>array(30,0,319,760),8573=>array(30,-14,533,533),8574=>array(9,-14,610,760),8575=>array(50,0,896,533),8576=>array(33,0,1115,729),8577=>array(-22,0,751,729),8578=>array(33,0,1115,729),8579=>array(10,-14,679,742),8580=>array(20,-14,514,533),8581=>array(54,-208,725,742),8585=>array(21,-14,905,742),8592=>array(33,119,703,527),8593=>array(193,0,561,744),8594=>array(51,119,721,527),8595=>array(193,-20,561,724),8596=>array(33,119,721,527),8597=>array(193,-20,561,744),8598=>array(132,29,642,595),8599=>array(112,29,622,595),8600=>array(112,52,622,617),8601=>array(132,52,642,617),8602=>array(33,88,703,558),8603=>array(51,88,721,558),8604=>array(48,191,716,499),8605=>array(38,191,706,499),8606=>array(33,119,703,527),8607=>array(193,0,561,744),8608=>array(51,119,721,527),8609=>array(193,-20,561,724),8610=>array(33,118,710,529),8611=>array(44,118,721,529),8612=>array(33,119,703,527),8613=>array(193,0,561,744),8614=>array(51,119,721,527),8615=>array(193,-20,561,724),8616=>array(193,0,561,744),8617=>array(33,119,703,571),8618=>array(51,119,721,571),8619=>array(33,119,703,571),8620=>array(51,119,721,571),8621=>array(33,119,721,527),8622=>array(33,88,721,558),8623=>array(154,-17,629,730),8624=>array(187,0,549,744),8625=>array(205,0,567,744),8626=>array(187,-20,549,724),8627=>array(205,-20,567,724),8628=>array(117,90,655,614),8629=>array(132,53,604,650),8630=>array(68,141,672,569),8631=>array(82,141,686,569),8632=>array(119,29,642,736),8633=>array(51,-52,703,698),8634=>array(103,48,660,600),8635=>array(94,48,651,600),8636=>array(31,270,703,527),8637=>array(31,119,703,377),8638=>array(329,0,561,747),8639=>array(193,0,426,747),8640=>array(51,270,724,527),8641=>array(51,119,724,377),8642=>array(329,-23,561,724),8643=>array(193,-23,426,724),8644=>array(33,-52,721,698),8645=>array(40,-20,715,744),8646=>array(33,-52,721,698),8647=>array(33,-101,703,747),8648=>array(-4,0,759,744),8649=>array(51,-101,721,747),8650=>array(-4,-20,759,724),8651=>array(31,21,724,625),8652=>array(31,21,724,625),8653=>array(33,88,703,558),8654=>array(33,88,721,558),8655=>array(51,88,721,558),8656=>array(33,119,703,527),8657=>array(193,0,561,744),8658=>array(51,119,721,527),8659=>array(193,-20,561,724),8660=>array(33,119,721,527),8661=>array(193,-20,561,744),8662=>array(132,-31,696,595),8663=>array(58,-31,622,595),8664=>array(58,52,622,677),8665=>array(132,52,696,677),8666=>array(33,70,703,576),8667=>array(51,70,721,576),8668=>array(33,119,703,527),8669=>array(51,119,721,527),8670=>array(193,0,561,744),8671=>array(193,-20,561,724),8672=>array(33,119,703,527),8673=>array(193,0,561,744),8674=>array(51,119,721,527),8675=>array(193,-20,561,724),8676=>array(51,119,703,527),8677=>array(51,119,703,527),8678=>array(33,119,703,527),8679=>array(193,0,561,744),8680=>array(51,119,721,527),8681=>array(193,-20,561,724),8682=>array(193,0,561,744),8683=>array(172,0,582,744),8684=>array(172,0,582,744),8685=>array(172,0,582,744),8686=>array(193,0,561,744),8687=>array(172,0,582,744),8688=>array(51,96,721,550),8689=>array(69,0,690,694),8690=>array(64,0,686,694),8691=>array(193,-20,561,744),8692=>array(51,119,721,527),8693=>array(40,-20,715,744),8694=>array(51,-140,721,786),8695=>array(33,119,703,527),8696=>array(51,119,721,527),8697=>array(33,119,721,527),8698=>array(33,119,703,527),8699=>array(51,119,721,527),8700=>array(33,119,721,527),8701=>array(33,119,703,527),8702=>array(51,119,721,527),8703=>array(33,119,721,527),8704=>array(4,0,573,729),8706=>array(33,-12,449,659),8707=>array(63,0,479,729),8708=>array(63,-120,479,849),8710=>array(18,0,661,729),8711=>array(18,0,661,729),8712=>array(95,0,571,627),8713=>array(95,-138,571,765),8715=>array(95,0,571,627),8716=>array(95,-138,571,765),8719=>array(21,-192,734,719),8720=>array(21,-192,734,719),8721=>array(9,-192,661,719),8722=>array(95,257,659,369),8723=>array(95,0,659,627),8724=>array(95,0,659,681),8725=>array(-72,-93,401,729),8727=>array(95,82,527,546),8728=>array(95,161,372,468),8729=>array(95,161,372,468),8730=>array(31,-20,593,827),8731=>array(31,-20,593,940),8732=>array(29,-20,593,928),8733=>array(90,97,515,499),8734=>array(90,97,661,499),8735=>array(106,79,648,681),8736=>array(106,79,648,681),8739=>array(95,-98,197,827),8740=>array(78,-98,469,827),8741=>array(95,-98,381,827),8742=>array(78,-98,619,827),8743=>array(136,0,595,584),8744=>array(136,0,595,584),8745=>array(95,0,659,627),8746=>array(95,-12,659,615),8747=>array(21,-182,500,759),8748=>array(21,-182,852,759),8749=>array(21,-182,1203,759),8760=>array(95,258,659,567),8761=>array(95,60,659,567),8762=>array(95,60,659,567),8763=>array(95,60,659,567),8764=>array(95,222,659,406),8765=>array(95,222,659,406),8770=>array(95,119,659,480),8771=>array(95,147,659,508),8776=>array(95,119,659,508),8784=>array(95,147,659,717),8785=>array(95,-90,659,717),8786=>array(95,-90,659,717),8787=>array(95,-90,659,717),8788=>array(95,110,879,518),8789=>array(95,110,879,518),8800=>array(95,-5,659,631),8801=>array(95,91,659,536),8804=>array(95,0,659,580),8805=>array(95,0,659,580),8834=>array(95,0,659,627),8835=>array(95,0,659,627),8836=>array(95,-138,659,765),8837=>array(95,-138,659,765),8838=>array(95,-85,659,712),8839=>array(95,-85,659,712),8844=>array(95,-12,659,615),8845=>array(95,-12,659,615),8846=>array(95,-12,659,615),8847=>array(95,1,659,627),8848=>array(95,1,659,627),8849=>array(95,-85,659,712),8850=>array(95,-85,659,712),8851=>array(95,0,659,627),8852=>array(95,0,659,627),8853=>array(95,0,659,627),8854=>array(95,0,659,627),8855=>array(95,0,659,627),8856=>array(95,0,659,627),8857=>array(95,0,659,627),8858=>array(95,0,659,627),8859=>array(95,0,659,627),8860=>array(95,0,659,627),8861=>array(95,0,659,627),8862=>array(95,1,659,627),8863=>array(95,1,659,627),8864=>array(95,1,659,627),8865=>array(95,1,659,627),8866=>array(95,0,701,729),8867=>array(95,0,701,729),8868=>array(95,0,769,688),8869=>array(95,0,769,688),8870=>array(95,0,459,729),8871=>array(95,0,459,729),8872=>array(95,0,701,729),8873=>array(95,0,701,729),8874=>array(95,0,701,729),8875=>array(95,0,876,729),8876=>array(95,-123,701,852),8877=>array(95,-123,701,852),8878=>array(95,-123,701,852),8879=>array(95,-123,876,852),8901=>array(95,255,263,440),8962=>array(64,0,687,596),8968=>array(34,-132,440,760),8969=>array(79,-132,391,760),8970=>array(34,-132,346,760),8971=>array(-15,-132,391,760),8976=>array(95,140,659,441),8977=>array(2,113,482,646),8984=>array(76,0,759,759),8985=>array(95,140,659,441),8992=>array(203,-250,500,925),8993=>array(20,-239,316,940),8997=>array(76,0,824,723),9000=>array(53,0,1247,729),9085=>array(1,-228,906,85),9115=>array(56,-252,394,928),9116=>array(56,-252,185,940),9117=>array(56,-240,394,940),9118=>array(56,-252,394,928),9119=>array(266,-252,394,940),9120=>array(56,-240,394,940),9121=>array(56,-252,394,928),9122=>array(56,-252,185,940),9123=>array(56,-240,394,940),9124=>array(56,-252,394,928),9125=>array(266,-252,394,940),9126=>array(56,-240,394,940),9127=>array(275,-261,602,928),9128=>array(74,-247,400,934),9129=>array(275,-240,602,934),9130=>array(275,-256,400,934),9131=>array(74,-261,400,928),9132=>array(275,-247,602,934),9133=>array(74,-240,400,934),9134=>array(203,-250,316,940),9167=>array(82,0,769,596),9251=>array(24,-228,702,85),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,701,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-124,769,643),9633=>array(82,-124,769,643),9634=>array(82,-124,769,643),9635=>array(82,-124,769,643),9636=>array(82,-124,769,643),9637=>array(82,-124,769,643),9638=>array(82,-124,769,643),9639=>array(82,-124,769,643),9640=>array(82,-124,769,643),9641=>array(82,-124,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-124,690,643),9651=>array(2,-124,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-124,690,643),9655=>array(2,-124,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-124,690,643),9661=>array(2,-124,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-124,690,643),9665=>array(2,-124,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-124,690,643),9671=>array(2,-124,690,643),9672=>array(2,-124,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,630,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(49,260,736,645),9697=>array(49,-125,736,260),9698=>array(2,-124,690,643),9699=>array(2,-124,690,643),9700=>array(2,-124,690,643),9701=>array(2,-124,690,643),9702=>array(135,227,396,516),9703=>array(82,-124,769,643),9704=>array(82,-124,769,643),9705=>array(82,-124,769,643),9706=>array(82,-124,769,643),9707=>array(82,-124,769,643),9708=>array(2,-124,690,643),9709=>array(2,-124,690,643),9710=>array(2,-124,690,643),9711=>array(49,-250,958,770),9712=>array(82,-124,769,643),9713=>array(82,-124,769,643),9714=>array(82,-124,769,643),9715=>array(82,-124,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-124,690,643),9721=>array(2,-124,690,643),9722=>array(2,-124,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-124,690,643),9728=>array(75,0,731,729),9784=>array(71,3,735,721),9785=>array(75,0,732,730),9786=>array(75,0,732,730),9787=>array(75,0,732,730),9788=>array(75,0,732,730),9791=>array(77,-102,476,732),9792=>array(77,-125,581,731),9793=>array(77,-125,581,731),9794=>array(77,-5,748,729),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),10145=>array(51,119,721,527),10181=>array(4,-163,394,769),10182=>array(-33,-163,429,769),10208=>array(2,-233,442,807),10216=>array(94,-132,417,759),10217=>array(-6,-132,317,759),10224=>array(62,0,693,744),10225=>array(62,-20,693,724),10226=>array(68,48,672,618),10227=>array(82,48,686,618),10228=>array(51,39,896,608),10229=>array(33,119,1239,527),10230=>array(51,119,1257,527),10231=>array(33,119,1257,527),10232=>array(33,119,1239,527),10233=>array(51,119,1257,527),10234=>array(33,119,1257,527),10235=>array(33,119,1239,527),10236=>array(51,119,1257,527),10237=>array(33,119,1239,527),10238=>array(51,119,1257,527),10239=>array(51,119,1257,527),10241=>array(132,586,308,781),10242=>array(132,325,308,521),10243=>array(132,325,308,781),10244=>array(132,65,308,260),10245=>array(132,65,308,781),10246=>array(132,65,308,521),10247=>array(132,65,308,781),10248=>array(396,586,571,781),10249=>array(132,586,571,781),10250=>array(132,325,571,781),10251=>array(132,325,571,781),10252=>array(132,65,571,781),10253=>array(132,65,571,781),10254=>array(132,65,571,781),10255=>array(132,65,571,781),10256=>array(396,325,571,521),10257=>array(132,325,571,781),10258=>array(132,325,571,521),10259=>array(132,325,571,781),10260=>array(132,65,571,521),10261=>array(132,65,571,781),10262=>array(132,65,571,521),10263=>array(132,65,571,781),10264=>array(396,325,571,781),10265=>array(132,325,571,781),10266=>array(132,325,571,781),10267=>array(132,325,571,781),10268=>array(132,65,571,781),10269=>array(132,65,571,781),10270=>array(132,65,571,781),10271=>array(132,65,571,781),10272=>array(396,65,571,260),10273=>array(132,65,571,781),10274=>array(132,65,571,521),10275=>array(132,65,571,781),10276=>array(132,65,571,260),10277=>array(132,65,571,781),10278=>array(132,65,571,521),10279=>array(132,65,571,781),10280=>array(396,65,571,781),10281=>array(132,65,571,781),10282=>array(132,65,571,781),10283=>array(132,65,571,781),10284=>array(132,65,571,781),10285=>array(132,65,571,781),10286=>array(132,65,571,781),10287=>array(132,65,571,781),10288=>array(396,65,571,521),10289=>array(132,65,571,781),10290=>array(132,65,571,521),10291=>array(132,65,571,781),10292=>array(132,65,571,521),10293=>array(132,65,571,781),10294=>array(132,65,571,521),10295=>array(132,65,571,781),10296=>array(396,65,571,781),10297=>array(132,65,571,781),10298=>array(132,65,571,781),10299=>array(132,65,571,781),10300=>array(132,65,571,781),10301=>array(132,65,571,781),10302=>array(132,65,571,781),10303=>array(132,65,571,781),10304=>array(132,-195,308,0),10305=>array(132,-195,308,781),10306=>array(132,-195,308,521),10307=>array(132,-195,308,781),10308=>array(132,-195,308,260),10309=>array(132,-195,308,781),10310=>array(132,-195,308,521),10311=>array(132,-195,308,781),10312=>array(132,-195,571,781),10313=>array(132,-195,571,781),10314=>array(132,-195,571,781),10315=>array(132,-195,571,781),10316=>array(132,-195,571,781),10317=>array(132,-195,571,781),10318=>array(132,-195,571,781),10319=>array(132,-195,571,781),10320=>array(132,-195,571,521),10321=>array(132,-195,571,781),10322=>array(132,-195,571,521),10323=>array(132,-195,571,781),10324=>array(132,-195,571,521),10325=>array(132,-195,571,781),10326=>array(132,-195,571,521),10327=>array(132,-195,571,781),10328=>array(132,-195,571,781),10329=>array(132,-195,571,781),10330=>array(132,-195,571,781),10331=>array(132,-195,571,781),10332=>array(132,-195,571,781),10333=>array(132,-195,571,781),10334=>array(132,-195,571,781),10335=>array(132,-195,571,781),10336=>array(132,-195,571,260),10337=>array(132,-195,571,781),10338=>array(132,-195,571,521),10339=>array(132,-195,571,781),10340=>array(132,-195,571,260),10341=>array(132,-195,571,781),10342=>array(132,-195,571,521),10343=>array(132,-195,571,781),10344=>array(132,-195,571,781),10345=>array(132,-195,571,781),10346=>array(132,-195,571,781),10347=>array(132,-195,571,781),10348=>array(132,-195,571,781),10349=>array(132,-195,571,781),10350=>array(132,-195,571,781),10351=>array(132,-195,571,781),10352=>array(132,-195,571,521),10353=>array(132,-195,571,781),10354=>array(132,-195,571,521),10355=>array(132,-195,571,781),10356=>array(132,-195,571,521),10357=>array(132,-195,571,781),10358=>array(132,-195,571,521),10359=>array(132,-195,571,781),10360=>array(132,-195,571,781),10361=>array(132,-195,571,781),10362=>array(132,-195,571,781),10363=>array(132,-195,571,781),10364=>array(132,-195,571,781),10365=>array(132,-195,571,781),10366=>array(132,-195,571,781),10367=>array(132,-195,571,781),10368=>array(396,-195,571,0),10369=>array(132,-195,571,781),10370=>array(132,-195,571,521),10371=>array(132,-195,571,781),10372=>array(132,-195,571,260),10373=>array(132,-195,571,781),10374=>array(132,-195,571,521),10375=>array(132,-195,571,781),10376=>array(396,-195,571,781),10377=>array(132,-195,571,781),10378=>array(132,-195,571,781),10379=>array(132,-195,571,781),10380=>array(132,-195,571,781),10381=>array(132,-195,571,781),10382=>array(132,-195,571,781),10383=>array(132,-195,571,781),10384=>array(396,-195,571,521),10385=>array(132,-195,571,781),10386=>array(132,-195,571,521),10387=>array(132,-195,571,781),10388=>array(132,-195,571,521),10389=>array(132,-195,571,781),10390=>array(132,-195,571,521),10391=>array(132,-195,571,781),10392=>array(396,-195,571,781),10393=>array(132,-195,571,781),10394=>array(132,-195,571,781),10395=>array(132,-195,571,781),10396=>array(132,-195,571,781),10397=>array(132,-195,571,781),10398=>array(132,-195,571,781),10399=>array(132,-195,571,781),10400=>array(396,-195,571,260),10401=>array(132,-195,571,781),10402=>array(132,-195,571,521),10403=>array(132,-195,571,781),10404=>array(132,-195,571,260),10405=>array(132,-195,571,781),10406=>array(132,-195,571,521),10407=>array(132,-195,571,781),10408=>array(396,-195,571,781),10409=>array(132,-195,571,781),10410=>array(132,-195,571,781),10411=>array(132,-195,571,781),10412=>array(132,-195,571,781),10413=>array(132,-195,571,781),10414=>array(132,-195,571,781),10415=>array(132,-195,571,781),10416=>array(396,-195,571,521),10417=>array(132,-195,571,781),10418=>array(132,-195,571,521),10419=>array(132,-195,571,781),10420=>array(132,-195,571,521),10421=>array(132,-195,571,781),10422=>array(132,-195,571,521),10423=>array(132,-195,571,781),10424=>array(396,-195,571,781),10425=>array(132,-195,571,781),10426=>array(132,-195,571,781),10427=>array(132,-195,571,781),10428=>array(132,-195,571,781),10429=>array(132,-195,571,781),10430=>array(132,-195,571,781),10431=>array(132,-195,571,781),10432=>array(132,-195,571,0),10433=>array(132,-195,571,781),10434=>array(132,-195,571,521),10435=>array(132,-195,571,781),10436=>array(132,-195,571,260),10437=>array(132,-195,571,781),10438=>array(132,-195,571,521),10439=>array(132,-195,571,781),10440=>array(132,-195,571,781),10441=>array(132,-195,571,781),10442=>array(132,-195,571,781),10443=>array(132,-195,571,781),10444=>array(132,-195,571,781),10445=>array(132,-195,571,781),10446=>array(132,-195,571,781),10447=>array(132,-195,571,781),10448=>array(132,-195,571,521),10449=>array(132,-195,571,781),10450=>array(132,-195,571,521),10451=>array(132,-195,571,781),10452=>array(132,-195,571,521),10453=>array(132,-195,571,781),10454=>array(132,-195,571,521),10455=>array(132,-195,571,781),10456=>array(132,-195,571,781),10457=>array(132,-195,571,781),10458=>array(132,-195,571,781),10459=>array(132,-195,571,781),10460=>array(132,-195,571,781),10461=>array(132,-195,571,781),10462=>array(132,-195,571,781),10463=>array(132,-195,571,781),10464=>array(132,-195,571,260),10465=>array(132,-195,571,781),10466=>array(132,-195,571,521),10467=>array(132,-195,571,781),10468=>array(132,-195,571,260),10469=>array(132,-195,571,781),10470=>array(132,-195,571,521),10471=>array(132,-195,571,781),10472=>array(132,-195,571,781),10473=>array(132,-195,571,781),10474=>array(132,-195,571,781),10475=>array(132,-195,571,781),10476=>array(132,-195,571,781),10477=>array(132,-195,571,781),10478=>array(132,-195,571,781),10479=>array(132,-195,571,781),10480=>array(132,-195,571,521),10481=>array(132,-195,571,781),10482=>array(132,-195,571,521),10483=>array(132,-195,571,781),10484=>array(132,-195,571,521),10485=>array(132,-195,571,781),10486=>array(132,-195,571,521),10487=>array(132,-195,571,781),10488=>array(132,-195,571,781),10489=>array(132,-195,571,781),10490=>array(132,-195,571,781),10491=>array(132,-195,571,781),10492=>array(132,-195,571,781),10493=>array(132,-195,571,781),10494=>array(132,-195,571,781),10495=>array(132,-195,571,781),10496=>array(51,119,721,527),10497=>array(51,119,721,527),10498=>array(33,119,703,527),10499=>array(51,119,721,527),10500=>array(33,119,721,527),10501=>array(51,119,721,527),10502=>array(33,119,703,527),10503=>array(51,119,721,527),10504=>array(193,-20,561,724),10505=>array(193,0,561,744),10506=>array(149,0,605,744),10507=>array(149,-20,605,724),10508=>array(33,119,703,527),10509=>array(51,119,721,527),10510=>array(33,119,703,527),10511=>array(51,119,721,527),10512=>array(44,118,721,529),10513=>array(48,119,721,527),10514=>array(193,0,561,724),10515=>array(193,0,561,724),10516=>array(44,118,721,529),10517=>array(44,118,721,529),10518=>array(44,118,721,529),10519=>array(44,118,721,529),10520=>array(44,118,721,529),10521=>array(51,118,710,529),10522=>array(44,118,703,529),10523=>array(51,118,710,529),10524=>array(44,118,703,529),10525=>array(33,119,703,527),10526=>array(51,119,721,527),10527=>array(33,119,703,527),10528=>array(51,119,721,527),10529=>array(132,52,622,595),10530=>array(132,52,622,595),10531=>array(132,-45,585,595),10532=>array(168,-45,622,595),10533=>array(168,52,622,692),10534=>array(132,52,585,692),10535=>array(112,29,642,595),10536=>array(112,29,622,617),10537=>array(112,52,642,617),10538=>array(132,29,642,617),10539=>array(112,29,642,617),10540=>array(112,29,642,617),10541=>array(112,29,622,617),10542=>array(112,29,622,617),10543=>array(112,29,642,617),10544=>array(112,29,642,617),10545=>array(112,29,642,595),10546=>array(112,29,642,595),10547=>array(38,119,721,527),10548=>array(131,94,637,623),10549=>array(131,80,637,608),10550=>array(132,70,608,632),10551=>array(146,70,622,632),10552=>array(255,-13,532,735),10553=>array(222,-13,499,735),10554=>array(46,188,720,495),10555=>array(35,151,708,459),10556=>array(35,78,708,495),10557=>array(46,0,720,495),10558=>array(126,58,623,593),10559=>array(132,58,628,593),10560=>array(121,48,633,719),10561=>array(121,48,633,719),10562=>array(33,-52,721,698),10563=>array(33,-52,721,698),10564=>array(33,-52,721,698),10565=>array(51,0,721,527),10566=>array(33,0,703,527),10567=>array(51,119,721,527),10568=>array(33,119,721,527),10569=>array(193,-12,561,744),10570=>array(31,119,724,527),10571=>array(31,119,724,527),10572=>array(193,-23,561,747),10573=>array(193,-23,561,747),10574=>array(31,270,724,527),10575=>array(329,-23,561,747),10576=>array(31,119,724,377),10577=>array(193,-23,426,747),10578=>array(51,131,703,527),10579=>array(51,131,703,527),10580=>array(204,0,561,724),10581=>array(204,0,561,724),10582=>array(51,119,703,515),10583=>array(51,119,703,515),10584=>array(193,0,550,724),10585=>array(193,0,550,724),10586=>array(31,131,703,527),10587=>array(51,131,724,527),10588=>array(204,0,561,747),10589=>array(204,-23,561,724),10590=>array(31,119,703,515),10591=>array(51,119,724,515),10592=>array(193,0,550,747),10593=>array(193,-23,550,724),10594=>array(31,21,703,625),10595=>array(105,0,649,747),10596=>array(51,21,724,625),10597=>array(105,-23,649,724),10598=>array(31,172,724,625),10599=>array(31,21,724,475),10600=>array(31,172,724,625),10601=>array(31,21,724,475),10602=>array(31,184,703,613),10603=>array(31,34,703,462),10604=>array(51,184,724,613),10605=>array(51,34,724,462),10606=>array(105,-23,649,747),10607=>array(105,-23,649,747),10608=>array(51,270,703,571),10609=>array(51,119,721,757),10610=>array(51,119,721,610),10611=>array(33,36,703,527),10612=>array(51,36,721,527),10613=>array(51,-138,721,527),10614=>array(33,-76,703,791),10615=>array(33,42,878,604),10616=>array(51,-76,721,791),10617=>array(51,-76,721,748),10618=>array(33,10,813,637),10619=>array(33,-76,703,748),10620=>array(147,11,618,636),10621=>array(136,11,606,636),10622=>array(96,62,659,584),10623=>array(96,54,659,576),10731=>array(2,-233,442,807),10764=>array(21,-182,1555,759),10765=>array(22,-182,527,760),10766=>array(22,-182,527,760),10799=>array(116,23,638,604),10858=>array(95,222,659,567),10859=>array(95,60,659,567),11008=>array(64,-28,621,591),11009=>array(133,-28,690,591),11010=>array(64,52,621,671),11011=>array(133,52,690,671),11012=>array(33,119,721,527),11013=>array(33,119,703,527),11014=>array(193,0,561,744),11015=>array(193,-20,561,724),11016=>array(64,-28,621,591),11017=>array(133,-28,690,591),11018=>array(64,52,621,671),11019=>array(133,52,690,671),11020=>array(33,119,721,527),11021=>array(193,-20,561,744),11022=>array(51,112,721,514),11023=>array(51,132,721,534),11024=>array(33,112,703,514),11025=>array(33,132,703,534),11026=>array(82,-124,769,643),11027=>array(82,-124,769,643),11028=>array(82,-124,769,643),11029=>array(82,-124,769,643),11030=>array(2,-124,690,643),11031=>array(2,-124,690,643),11032=>array(2,-124,690,643),11033=>array(2,-124,690,643),11034=>array(82,-124,769,643),11360=>array(-22,0,581,729),11361=>array(-16,0,366,760),11363=>array(-22,0,681,729),11364=>array(129,-208,764,729),11367=>array(-8,-157,888,729),11368=>array(31,-217,655,760),11369=>array(-8,-157,826,729),11370=>array(31,-217,594,760),11371=>array(-17,-157,698,729),11372=>array(-14,-214,526,560),11373=>array(26,-14,791,742),11374=>array(38,-208,1082,729),11375=>array(110,0,836,729),11376=>array(-26,-14,739,742),11377=>array(18,0,682,533),11378=>array(45,0,1160,730),11379=>array(26,0,930,533),11381=>array(-22,0,688,729),11382=>array(52,0,497,519),11383=>array(44,-14,774,533),11385=>array(-41,-14,449,760),11386=>array(82,-14,610,533),11387=>array(-18,0,575,519),11388=>array(-7,-132,282,418),11389=>array(119,326,576,734),11390=>array(29,-208,630,742),11391=>array(-13,-208,703,729),11520=>array(86,-53,722,514),11521=>array(28,-218,598,514),11522=>array(83,-218,750,514),11523=>array(75,-2,642,759),11524=>array(92,-217,735,514),11525=>array(40,-217,891,514),11526=>array(108,0,707,759),11527=>array(40,0,890,514),11528=>array(88,0,583,514),11529=>array(38,-217,608,729),11530=>array(34,0,886,514),11531=>array(74,-4,622,759),11532=>array(38,0,608,759),11533=>array(39,-2,892,514),11534=>array(96,0,787,514),11535=>array(81,-218,835,759),11536=>array(40,0,890,759),11537=>array(38,0,607,759),11538=>array(29,-217,589,515),11539=>array(40,-221,909,675),11540=>array(70,-217,836,555),11541=>array(57,-218,792,759),11542=>array(38,0,606,514),11543=>array(38,-217,608,514),11544=>array(38,-217,607,514),11545=>array(54,-217,611,759),11546=>array(66,-217,646,514),11547=>array(70,0,822,759),11548=>array(71,-217,909,514),11549=>array(29,-217,640,515),11550=>array(61,-217,636,514),11551=>array(23,-218,793,518),11552=>array(88,0,1026,514),11553=>array(48,-217,596,759),11554=>array(60,-3,572,579),11555=>array(38,-217,639,759),11556=>array(38,-217,701,514),11557=>array(79,-4,818,759),11800=>array(10,-14,435,742),11807=>array(95,60,659,406),11810=>array(112,314,440,760),11811=>array(131,314,392,760),11812=>array(34,-132,294,314),11813=>array(-15,-132,313,314),11822=>array(88,-14,547,742),42564=>array(32,-14,622,742),42565=>array(21,-14,489,533),42566=>array(91,0,444,729),42567=>array(67,0,298,519),42576=>array(37,0,1222,729),42577=>array(16,-14,926,534),42580=>array(53,-14,1180,742),42581=>array(40,-14,854,533),42582=>array(-22,0,1115,729),42583=>array(68,-14,862,533),42760=>array(131,0,424,693),42761=>array(105,0,424,693),42762=>array(79,0,424,693),42763=>array(52,0,424,693),42764=>array(26,0,424,693),42765=>array(26,0,424,693),42766=>array(26,0,398,693),42767=>array(26,0,372,693),42768=>array(26,0,345,693),42769=>array(26,0,319,693),42770=>array(26,0,424,693),42771=>array(26,0,398,693),42772=>array(26,0,372,693),42773=>array(26,0,345,693),42774=>array(26,0,319,693),42779=>array(71,326,305,743),42780=>array(41,315,275,731),42781=>array(44,318,213,734),42782=>array(36,326,205,742),42783=>array(-21,0,147,416),42790=>array(-4,-208,892,729),42791=>array(50,-222,578,760),42792=>array(60,-203,861,729),42793=>array(60,-203,780,680),42794=>array(2,-14,628,742),42795=>array(11,-12,549,742),42796=>array(11,-14,534,729),42797=>array(11,-222,515,519),42798=>array(19,-104,638,729),42799=>array(13,-240,601,519),42800=>array(-20,0,568,519),42801=>array(-0,-14,488,533),42802=>array(-71,0,1127,729),42803=>array(31,-14,821,533),42804=>array(-71,-14,1096,742),42805=>array(31,-14,875,533),42806=>array(-90,-14,1097,729),42807=>array(31,-14,856,533),42808=>array(-71,0,991,729),42809=>array(31,-14,756,533),42810=>array(-71,0,991,729),42811=>array(18,-14,766,533),42812=>array(-53,-208,990,729),42813=>array(31,-222,723,533),42814=>array(10,-14,679,742),42815=>array(20,-14,514,533),42816=>array(-22,0,812,729),42817=>array(31,0,583,760),42822=>array(96,0,772,729),42823=>array(83,0,446,760),42826=>array(-11,-14,920,742),42827=>array(-9,-14,703,533),42830=>array(38,-14,1265,742),42831=>array(37,-14,918,533),42856=>array(-40,-208,752,729),42857=>array(23,-208,653,519),42875=>array(31,-208,694,742),42876=>array(32,-208,547,533),42880=>array(52,0,655,729),42881=>array(22,-240,311,519),42882=>array(31,-208,721,743),42883=>array(32,-208,625,533),42884=>array(31,-208,694,742),42885=>array(32,-208,547,533),42886=>array(39,-14,745,729),42887=>array(38,-14,563,519),42891=>array(143,225,345,729),42892=>array(62,458,214,729),42893=>array(81,0,839,729),42896=>array(-24,-157,851,729),42897=>array(50,-217,676,533),42922=>array(-86,0,874,729),43002=>array(-16,0,976,519),43003=>array(45,0,661,729),43004=>array(48,0,699,729),43005=>array(-22,0,1022,729),43006=>array(-40,0,461,928),43007=>array(-71,0,1231,729),62464=>array(6,-15,570,876),62465=>array(19,-15,579,876),62466=>array(11,-15,625,875),62467=>array(73,-15,894,876),62468=>array(5,-15,642,876),62469=>array(-1,-15,631,876),62470=>array(75,-15,676,876),62471=>array(33,-14,924,875),62472=>array(41,-15,627,876),62473=>array(6,-15,626,876),62474=>array(75,-21,1177,876),62475=>array(20,-15,659,876),62476=>array(29,-15,681,888),62477=>array(42,-146,891,876),62478=>array(12,-15,633,876),62479=>array(5,-15,702,877),62480=>array(22,-15,888,860),62481=>array(59,-15,645,876),62482=>array(29,-15,712,876),62483=>array(72,-15,723,876),62484=>array(82,-15,906,876),62485=>array(-1,-15,699,864),62486=>array(81,-16,896,875),62487=>array(4,-15,698,875),62488=>array(23,-15,669,876),62489=>array(-24,-15,600,876),62490=>array(25,-15,677,870),62491=>array(19,-15,658,876),62492=>array(29,-15,714,876),62493=>array(1,-15,618,910),62494=>array(64,-15,641,876),62495=>array(-19,-25,866,875),62496=>array(1,-15,647,882),62497=>array(31,-15,742,879),62498=>array(-26,-57,631,876),62499=>array(3,-15,702,895),62500=>array(3,-15,646,876),62501=>array(-0,-15,690,876),62502=>array(66,-14,908,876),62504=>array(64,-217,809,759),63172=>array(51,0,351,763),63173=>array(11,-14,597,756),63174=>array(20,-222,600,533),63175=>array(57,-14,644,731),63176=>array(57,-14,938,731),63185=>array(53,616,404,816),63188=>array(72,624,406,840),64256=>array(-53,-190,875,760),64257=>array(-53,-190,611,760),64258=>array(-53,-190,648,760),64259=>array(-53,-190,968,760),64260=>array(-53,-190,1003,760),64261=>array(-53,-190,791,760),64262=>array(-0,-14,878,748),65533=>array(94,-108,1052,956),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>313,33=>395,34=>469,35=>754,36=>626,37=>855,38=>813,39=>275,40=>426,41=>426,42=>470,43=>754,44=>313,45=>374,46=>313,47=>329,48=>626,49=>626,50=>626,51=>626,52=>626,53=>626,54=>626,55=>626,56=>626,57=>626,58=>332,59=>332,60=>754,61=>754,62=>754,63=>527,64=>900,65=>698,66=>760,67=>716,68=>780,69=>686,70=>639,71=>769,72=>850,73=>421,74=>426,75=>782,76=>633,77=>996,78=>822,79=>784,80=>677,81=>784,82=>748,83=>650,84=>669,85=>785,86=>698,87=>1011,88=>698,89=>642,90=>657,91=>426,92=>329,93=>426,94=>754,95=>450,96=>450,97=>583,98=>629,99=>548,100=>629,101=>572,102=>387,103=>629,104=>654,105=>342,106=>325,107=>624,108=>342,109=>952,110=>654,111=>600,112=>629,113=>629,114=>474,115=>506,116=>416,117=>654,118=>523,119=>774,120=>536,121=>523,122=>511,123=>579,124=>327,125=>579,126=>754,160=>313,161=>395,162=>626,163=>626,164=>572,165=>626,166=>327,167=>470,168=>450,169=>900,170=>438,171=>563,172=>754,173=>374,174=>900,175=>450,176=>450,177=>754,178=>394,179=>394,180=>450,181=>659,182=>572,183=>313,184=>450,185=>394,186=>450,187=>563,188=>938,189=>938,190=>938,191=>527,192=>698,193=>698,194=>698,195=>698,196=>698,197=>698,198=>931,199=>716,200=>686,201=>686,202=>686,203=>686,204=>421,205=>421,206=>421,207=>421,208=>787,209=>822,210=>784,211=>784,212=>784,213=>784,214=>784,215=>754,216=>784,217=>785,218=>785,219=>785,220=>785,221=>642,222=>681,223=>684,224=>583,225=>583,226=>583,227=>583,228=>583,229=>583,230=>838,231=>548,232=>572,233=>572,234=>572,235=>572,236=>342,237=>342,238=>342,239=>342,240=>600,241=>654,242=>600,243=>600,244=>600,245=>600,246=>600,247=>754,248=>600,249=>654,250=>654,251=>654,252=>654,253=>523,254=>629,255=>523,256=>698,257=>583,258=>698,259=>583,260=>698,261=>583,262=>716,263=>548,264=>716,265=>548,266=>716,267=>548,268=>716,269=>548,270=>780,271=>629,272=>787,273=>629,274=>686,275=>572,276=>686,277=>572,278=>686,279=>572,280=>686,281=>572,282=>686,283=>572,284=>769,285=>629,286=>769,287=>629,288=>769,289=>629,290=>769,291=>629,292=>850,293=>654,294=>850,295=>654,296=>421,297=>342,298=>421,299=>342,300=>421,301=>342,302=>421,303=>342,304=>421,305=>342,306=>848,307=>676,308=>426,309=>325,310=>782,311=>624,312=>624,313=>633,314=>342,315=>633,316=>342,317=>633,318=>457,319=>633,320=>501,321=>639,322=>346,323=>822,324=>654,325=>822,326=>654,327=>822,328=>654,329=>907,330=>785,331=>654,332=>784,333=>600,334=>784,335=>600,336=>784,337=>600,338=>1062,339=>925,340=>748,341=>474,342=>748,343=>474,344=>748,345=>474,346=>650,347=>506,348=>650,349=>506,350=>650,351=>506,352=>650,353=>506,354=>669,355=>416,356=>669,357=>416,358=>669,359=>416,360=>785,361=>654,362=>785,363=>654,364=>785,365=>654,366=>785,367=>654,368=>785,369=>654,370=>785,371=>654,372=>1011,373=>774,374=>642,375=>523,376=>642,377=>657,378=>511,379=>657,380=>511,381=>657,382=>511,383=>387,384=>629,385=>760,386=>769,387=>629,388=>769,389=>629,390=>716,391=>716,392=>548,393=>787,394=>780,395=>769,396=>629,397=>600,398=>686,399=>784,400=>649,401=>639,402=>387,403=>769,404=>693,405=>938,406=>421,407=>421,408=>782,409=>624,410=>342,411=>631,412=>952,413=>822,414=>654,415=>784,416=>784,417=>600,418=>1080,419=>849,420=>677,421=>629,422=>748,423=>650,424=>506,425=>636,426=>298,427=>416,428=>669,429=>416,430=>669,431=>785,432=>654,433=>801,434=>801,435=>642,436=>628,437=>657,438=>511,439=>591,440=>591,441=>591,442=>591,443=>626,444=>678,445=>511,446=>482,447=>644,448=>265,449=>443,450=>413,451=>265,452=>1437,453=>1292,454=>1140,455=>1059,456=>958,457=>667,458=>1248,459=>1148,460=>980,461=>698,462=>583,463=>421,464=>342,465=>784,466=>600,467=>785,468=>654,469=>785,470=>654,471=>785,472=>654,473=>785,474=>654,475=>785,476=>654,477=>572,478=>698,479=>583,480=>698,481=>583,482=>931,483=>877,484=>806,485=>629,486=>769,487=>629,488=>782,489=>624,490=>784,491=>600,492=>784,493=>600,494=>591,495=>511,496=>325,497=>1437,498=>1292,499=>1140,500=>769,501=>629,502=>1099,503=>708,504=>822,505=>654,506=>698,507=>583,508=>931,509=>838,510=>784,511=>600,512=>698,513=>583,514=>698,515=>583,516=>686,517=>572,518=>686,519=>572,520=>421,521=>342,522=>421,523=>342,524=>784,525=>600,526=>784,527=>600,528=>748,529=>474,530=>748,531=>474,532=>785,533=>654,534=>785,535=>654,536=>650,537=>506,538=>669,539=>416,540=>621,541=>546,542=>850,543=>654,544=>785,545=>711,546=>632,547=>554,548=>657,549=>511,550=>698,551=>583,552=>686,553=>572,554=>784,555=>600,556=>784,557=>600,558=>784,559=>600,560=>784,561=>600,562=>642,563=>523,564=>516,565=>830,566=>508,567=>325,568=>928,569=>928,570=>698,571=>716,572=>548,573=>633,574=>669,575=>506,576=>511,577=>594,578=>492,579=>760,580=>785,581=>698,582=>686,583=>572,584=>426,585=>348,586=>763,587=>629,588=>748,589=>474,590=>642,591=>523,592=>583,593=>692,594=>692,595=>629,596=>548,597=>548,598=>629,599=>657,600=>572,601=>572,602=>816,603=>547,604=>505,605=>816,606=>647,607=>348,608=>629,609=>629,610=>563,611=>541,612=>564,613=>654,614=>654,615=>654,616=>342,617=>342,618=>342,619=>368,620=>462,621=>342,622=>716,623=>952,624=>952,625=>952,626=>654,627=>654,628=>641,629=>600,630=>955,631=>674,632=>600,633=>514,634=>514,635=>514,636=>474,637=>474,638=>406,639=>438,640=>721,641=>721,642=>506,643=>298,644=>387,645=>486,646=>298,647=>443,648=>416,649=>654,650=>611,651=>624,652=>523,653=>774,654=>571,655=>654,656=>511,657=>511,658=>511,659=>511,660=>482,661=>482,662=>482,663=>490,664=>784,665=>625,666=>647,667=>563,668=>659,669=>345,670=>666,671=>555,672=>629,673=>482,674=>482,675=>1005,676=>1061,677=>1005,678=>844,679=>643,680=>851,681=>935,682=>782,683=>716,684=>596,685=>398,686=>552,687=>646,688=>469,689=>466,690=>282,691=>372,692=>372,693=>432,694=>474,695=>488,696=>329,697=>271,698=>469,699=>313,700=>313,701=>313,702=>330,703=>330,704=>282,705=>282,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>254,713=>450,714=>450,715=>450,716=>254,717=>450,720=>332,721=>332,722=>330,723=>330,726=>353,727=>353,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>375,736=>340,737=>263,738=>355,739=>338,740=>282,741=>450,742=>450,743=>450,744=>450,745=>450,748=>450,750=>498,751=>450,752=>450,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>701,881=>519,882=>722,883=>699,884=>271,885=>271,886=>866,887=>664,890=>450,891=>548,892=>548,893=>548,894=>332,900=>450,901=>450,902=>698,903=>313,904=>852,905=>1022,906=>595,908=>798,910=>857,911=>820,912=>435,913=>698,914=>760,915=>639,916=>698,917=>686,918=>657,919=>850,920=>784,921=>421,922=>782,923=>698,924=>996,925=>822,926=>633,927=>784,928=>850,929=>677,931=>636,932=>669,933=>642,934=>784,935=>698,936=>822,937=>801,938=>421,939=>642,940=>692,941=>547,942=>654,943=>435,944=>624,945=>692,946=>598,947=>594,948=>600,949=>547,950=>533,951=>654,952=>600,953=>435,954=>674,955=>631,956=>659,957=>624,958=>533,959=>600,960=>659,961=>598,962=>548,963=>664,964=>605,965=>624,966=>814,967=>592,968=>847,969=>857,970=>435,971=>624,972=>600,973=>624,974=>857,975=>782,976=>600,977=>764,978=>687,979=>872,980=>687,981=>847,982=>857,983=>589,984=>784,985=>600,986=>716,987=>548,988=>639,989=>475,990=>531,991=>593,992=>716,993=>600,1008=>589,1009=>598,1010=>548,1011=>325,1012=>784,1013=>548,1014=>548,1015=>681,1016=>629,1017=>716,1018=>996,1019=>774,1020=>623,1021=>716,1022=>716,1023=>716,1024=>686,1025=>686,1026=>811,1027=>621,1028=>716,1029=>650,1030=>421,1031=>421,1032=>426,1033=>1081,1034=>1135,1035=>866,1036=>818,1037=>850,1038=>730,1039=>850,1040=>733,1041=>769,1042=>760,1043=>621,1044=>800,1045=>686,1046=>1181,1047=>649,1048=>850,1049=>850,1050=>818,1051=>795,1052=>996,1053=>850,1054=>784,1055=>850,1056=>677,1057=>716,1058=>669,1059=>730,1060=>854,1061=>698,1062=>870,1063=>822,1064=>1141,1065=>1164,1066=>861,1067=>1081,1068=>743,1069=>716,1070=>1158,1071=>793,1072=>583,1073=>650,1074=>591,1075=>506,1076=>625,1077=>572,1078=>1175,1079=>574,1080=>654,1081=>654,1082=>609,1083=>659,1084=>855,1085=>656,1086=>600,1087=>654,1088=>629,1089=>548,1090=>952,1091=>538,1092=>812,1093=>536,1094=>723,1095=>643,1096=>952,1097=>1021,1098=>654,1099=>916,1100=>593,1101=>580,1102=>901,1103=>716,1104=>572,1105=>572,1106=>646,1107=>506,1108=>548,1109=>506,1110=>342,1111=>342,1112=>325,1113=>913,1114=>910,1115=>654,1116=>609,1117=>654,1118=>538,1119=>654,1122=>792,1123=>945,1124=>1076,1125=>867,1130=>1181,1131=>909,1132=>1467,1133=>1122,1136=>986,1137=>995,1138=>784,1139=>587,1140=>824,1141=>673,1142=>824,1143=>673,1164=>761,1165=>606,1168=>630,1169=>556,1170=>621,1171=>506,1172=>768,1173=>634,1174=>1181,1175=>1175,1176=>649,1177=>574,1178=>812,1179=>633,1182=>818,1183=>609,1184=>937,1185=>684,1186=>856,1187=>725,1188=>1050,1189=>859,1190=>1191,1191=>911,1194=>716,1195=>548,1196=>669,1197=>1028,1198=>642,1199=>515,1200=>642,1201=>515,1202=>709,1203=>536,1204=>909,1205=>749,1206=>822,1207=>712,1210=>819,1211=>654,1216=>421,1217=>1181,1218=>1175,1219=>782,1220=>624,1223=>850,1224=>659,1227=>885,1228=>659,1231=>342,1232=>733,1233=>583,1234=>733,1235=>583,1236=>931,1237=>877,1238=>686,1239=>572,1240=>784,1241=>572,1242=>784,1243=>572,1244=>1181,1245=>1175,1246=>649,1247=>574,1248=>591,1249=>511,1250=>850,1251=>654,1252=>850,1253=>654,1254=>784,1255=>600,1256=>784,1257=>600,1258=>784,1259=>600,1260=>716,1261=>580,1262=>730,1263=>538,1264=>730,1265=>538,1266=>730,1267=>538,1268=>822,1269=>643,1270=>621,1271=>506,1272=>1081,1273=>916,1296=>649,1297=>574,1298=>795,1299=>659,1300=>1123,1301=>904,1306=>738,1307=>576,1308=>925,1309=>770,1329=>848,1330=>748,1331=>804,1332=>817,1333=>739,1334=>738,1335=>672,1336=>748,1337=>1013,1338=>804,1339=>722,1340=>650,1341=>1069,1342=>798,1343=>757,1344=>663,1345=>777,1346=>826,1347=>766,1348=>879,1349=>750,1350=>822,1351=>759,1352=>784,1353=>736,1354=>931,1355=>761,1356=>867,1357=>784,1358=>822,1359=>727,1360=>727,1361=>752,1362=>639,1363=>859,1364=>802,1365=>784,1366=>867,1369=>276,1370=>237,1371=>264,1372=>352,1373=>290,1374=>396,1375=>450,1377=>949,1378=>625,1379=>699,1380=>721,1381=>655,1382=>668,1383=>539,1384=>660,1385=>818,1386=>690,1387=>651,1388=>358,1389=>978,1390=>625,1391=>647,1392=>663,1393=>615,1394=>664,1395=>633,1396=>651,1397=>323,1398=>647,1399=>446,1400=>664,1401=>385,1402=>953,1403=>602,1404=>669,1405=>651,1406=>651,1407=>936,1408=>651,1409=>642,1410=>444,1411=>936,1412=>660,1413=>624,1414=>860,1415=>750,1417=>306,1418=>349,4256=>688,4257=>851,4258=>788,4259=>795,4260=>712,4261=>979,4262=>921,4263=>1100,4264=>587,4265=>745,4266=>955,4267=>954,4268=>725,4269=>1030,4270=>880,4271=>820,4272=>1007,4273=>721,4274=>689,4275=>977,4276=>887,4277=>968,4278=>738,4279=>758,4280=>748,4281=>759,4282=>826,4283=>978,4284=>701,4285=>748,4286=>740,4287=>1008,4288=>1019,4289=>730,4290=>812,4291=>730,4292=>801,4293=>965,4304=>535,4305=>563,4306=>579,4307=>798,4308=>553,4309=>549,4310=>599,4311=>823,4312=>552,4313=>540,4314=>1008,4315=>589,4316=>576,4317=>791,4318=>561,4319=>571,4320=>790,4321=>591,4322=>721,4323=>676,4324=>782,4325=>575,4326=>820,4327=>559,4328=>583,4329=>576,4330=>656,4331=>577,4332=>575,4333=>566,4334=>606,4335=>663,4336=>563,4337=>591,4338=>563,4339=>563,4340=>562,4341=>603,4342=>846,4343=>612,4344=>572,4345=>605,4346=>562,4347=>401,4348=>327,7424=>577,7425=>802,7426=>838,7427=>625,7428=>548,7429=>607,7430=>607,7431=>555,7432=>458,7433=>288,7434=>505,7435=>650,7436=>555,7437=>782,7438=>664,7439=>600,7440=>548,7441=>565,7442=>565,7443=>600,7444=>925,7445=>538,7446=>600,7447=>600,7448=>527,7449=>721,7450=>721,7451=>558,7452=>583,7453=>597,7454=>831,7455=>589,7456=>523,7457=>774,7458=>511,7459=>511,7460=>529,7461=>721,7462=>527,7463=>577,7464=>659,7465=>527,7466=>769,7467=>634,7468=>439,7469=>586,7470=>479,7471=>479,7472=>491,7473=>432,7474=>432,7475=>483,7476=>536,7477=>265,7478=>268,7479=>492,7480=>398,7481=>627,7482=>518,7483=>545,7484=>493,7485=>398,7486=>426,7487=>471,7488=>422,7489=>494,7490=>637,7491=>367,7492=>367,7493=>436,7494=>528,7495=>448,7496=>448,7497=>400,7498=>400,7499=>370,7500=>370,7501=>448,7502=>270,7503=>471,7504=>655,7505=>426,7506=>420,7507=>384,7508=>420,7509=>420,7510=>448,7511=>333,7512=>468,7513=>376,7514=>655,7515=>442,7516=>454,7517=>376,7518=>374,7519=>378,7520=>513,7521=>373,7522=>215,7523=>372,7524=>468,7525=>442,7526=>376,7527=>374,7528=>377,7529=>513,7530=>373,7531=>938,7543=>576,7544=>536,7547=>342,7548=>342,7549=>629,7550=>583,7551=>611,7557=>342,7579=>436,7580=>384,7581=>384,7582=>420,7583=>370,7584=>244,7585=>335,7586=>448,7587=>470,7588=>270,7589=>276,7590=>270,7591=>270,7592=>333,7593=>331,7594=>289,7595=>387,7596=>613,7597=>655,7598=>529,7599=>528,7600=>425,7601=>420,7602=>470,7603=>360,7604=>348,7605=>333,7606=>468,7607=>427,7608=>367,7609=>439,7610=>329,7611=>321,7612=>474,7613=>371,7614=>407,7615=>420,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>698,7681=>583,7682=>760,7683=>629,7684=>760,7685=>629,7686=>760,7687=>629,7688=>716,7689=>548,7690=>780,7691=>629,7692=>780,7693=>629,7694=>780,7695=>629,7696=>780,7697=>629,7698=>780,7699=>629,7700=>686,7701=>572,7702=>686,7703=>572,7704=>686,7705=>572,7706=>686,7707=>572,7708=>686,7709=>572,7710=>639,7711=>387,7712=>769,7713=>629,7714=>850,7715=>654,7716=>850,7717=>654,7718=>850,7719=>654,7720=>850,7721=>654,7722=>850,7723=>654,7724=>421,7725=>342,7726=>421,7727=>342,7728=>782,7729=>624,7730=>782,7731=>624,7732=>782,7733=>624,7734=>633,7735=>342,7736=>633,7737=>342,7738=>633,7739=>342,7740=>633,7741=>342,7742=>996,7743=>952,7744=>996,7745=>952,7746=>996,7747=>952,7748=>822,7749=>654,7750=>822,7751=>654,7752=>822,7753=>654,7754=>822,7755=>654,7756=>784,7757=>600,7758=>784,7759=>600,7760=>784,7761=>600,7762=>784,7763=>600,7764=>677,7765=>629,7766=>677,7767=>629,7768=>748,7769=>474,7770=>748,7771=>474,7772=>748,7773=>474,7774=>748,7775=>474,7776=>650,7777=>506,7778=>650,7779=>506,7780=>650,7781=>506,7782=>650,7783=>506,7784=>650,7785=>506,7786=>669,7787=>416,7788=>669,7789=>416,7790=>669,7791=>416,7792=>669,7793=>416,7794=>785,7795=>654,7796=>785,7797=>654,7798=>785,7799=>654,7800=>785,7801=>654,7802=>785,7803=>654,7804=>698,7805=>523,7806=>698,7807=>523,7808=>1011,7809=>774,7810=>1011,7811=>774,7812=>1011,7813=>774,7814=>1011,7815=>774,7816=>1011,7817=>774,7818=>698,7819=>536,7820=>698,7821=>536,7822=>642,7823=>523,7824=>657,7825=>511,7826=>657,7827=>511,7828=>657,7829=>511,7830=>654,7831=>416,7832=>774,7833=>523,7834=>913,7835=>387,7836=>387,7837=>387,7838=>852,7839=>600,7840=>698,7841=>583,7842=>698,7843=>583,7844=>698,7845=>583,7846=>698,7847=>583,7848=>698,7849=>583,7850=>698,7851=>583,7852=>698,7853=>583,7854=>698,7855=>583,7856=>698,7857=>583,7858=>698,7859=>583,7860=>698,7861=>583,7862=>698,7863=>583,7864=>686,7865=>572,7866=>686,7867=>572,7868=>686,7869=>572,7870=>686,7871=>572,7872=>686,7873=>572,7874=>686,7875=>572,7876=>686,7877=>572,7878=>686,7879=>572,7880=>421,7881=>342,7882=>421,7883=>342,7884=>784,7885=>600,7886=>784,7887=>600,7888=>784,7889=>600,7890=>784,7891=>600,7892=>784,7893=>600,7894=>784,7895=>600,7896=>784,7897=>600,7898=>784,7899=>600,7900=>784,7901=>600,7902=>784,7903=>600,7904=>784,7905=>600,7906=>784,7907=>600,7908=>785,7909=>654,7910=>785,7911=>654,7912=>785,7913=>654,7914=>785,7915=>654,7916=>785,7917=>654,7918=>785,7919=>654,7920=>785,7921=>654,7922=>642,7923=>523,7924=>642,7925=>523,7926=>642,7927=>523,7928=>642,7929=>523,7930=>970,7931=>630,7936=>692,7937=>692,7938=>692,7939=>692,7940=>692,7941=>692,7942=>692,7943=>692,7944=>698,7945=>698,7946=>880,7947=>880,7948=>748,7949=>764,7950=>698,7951=>698,7952=>547,7953=>547,7954=>547,7955=>547,7956=>547,7957=>547,7960=>826,7961=>817,7962=>1052,7963=>1052,7964=>984,7965=>1007,7968=>654,7969=>654,7970=>654,7971=>654,7972=>654,7973=>654,7974=>654,7975=>654,7976=>990,7977=>984,7978=>1222,7979=>1225,7980=>1151,7981=>1177,7982=>1077,7983=>1074,7984=>435,7985=>435,7986=>435,7987=>435,7988=>435,7989=>435,7990=>435,7991=>435,7992=>566,7993=>555,7994=>790,7995=>792,7996=>719,7997=>748,7998=>650,7999=>642,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>810,8009=>841,8010=>1116,8011=>1113,8012=>931,8013=>959,8016=>624,8017=>624,8018=>624,8019=>624,8020=>624,8021=>624,8022=>624,8023=>624,8025=>830,8027=>1067,8029=>1020,8031=>917,8032=>857,8033=>857,8034=>857,8035=>857,8036=>857,8037=>857,8038=>857,8039=>857,8040=>838,8041=>867,8042=>1141,8043=>1146,8044=>949,8045=>979,8046=>920,8047=>954,8048=>692,8049=>692,8050=>547,8051=>547,8052=>654,8053=>654,8054=>435,8055=>435,8056=>600,8057=>600,8058=>624,8059=>624,8060=>857,8061=>857,8064=>692,8065=>692,8066=>692,8067=>692,8068=>692,8069=>692,8070=>692,8071=>692,8072=>698,8073=>698,8074=>880,8075=>880,8076=>748,8077=>764,8078=>698,8079=>698,8080=>654,8081=>654,8082=>654,8083=>654,8084=>654,8085=>654,8086=>654,8087=>654,8088=>990,8089=>984,8090=>1222,8091=>1225,8092=>1151,8093=>1177,8094=>1077,8095=>1074,8096=>857,8097=>857,8098=>857,8099=>857,8100=>857,8101=>857,8102=>857,8103=>857,8104=>838,8105=>867,8106=>1141,8107=>1146,8108=>949,8109=>979,8110=>920,8111=>954,8112=>692,8113=>692,8114=>692,8115=>692,8116=>692,8118=>692,8119=>692,8120=>698,8121=>698,8122=>729,8123=>698,8124=>698,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>654,8131=>654,8132=>654,8134=>654,8135=>654,8136=>899,8137=>852,8138=>1072,8139=>1006,8140=>850,8141=>450,8142=>450,8143=>450,8144=>435,8145=>435,8146=>435,8147=>435,8150=>435,8151=>435,8152=>421,8153=>421,8154=>642,8155=>595,8157=>450,8158=>450,8159=>450,8160=>624,8161=>624,8162=>624,8163=>624,8164=>598,8165=>598,8166=>624,8167=>624,8168=>642,8169=>642,8170=>917,8171=>857,8172=>819,8173=>450,8174=>450,8175=>450,8178=>857,8179=>857,8180=>857,8182=>857,8183=>857,8184=>962,8185=>798,8186=>991,8187=>820,8188=>801,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>626,8200=>313,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>374,8209=>374,8210=>626,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>313,8217=>313,8218=>313,8219=>313,8220=>518,8221=>518,8222=>518,8223=>518,8224=>470,8225=>470,8226=>575,8227=>575,8228=>313,8229=>606,8230=>900,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1246,8241=>1631,8242=>237,8243=>402,8244=>567,8245=>237,8246=>402,8247=>567,8248=>659,8249=>360,8250=>360,8252=>566,8253=>527,8254=>450,8258=>920,8260=>150,8261=>426,8262=>426,8263=>974,8264=>770,8265=>770,8267=>572,8268=>450,8269=>450,8270=>470,8271=>332,8273=>470,8274=>500,8275=>900,8279=>731,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>394,8305=>215,8308=>394,8309=>394,8310=>394,8311=>394,8312=>394,8313=>394,8314=>475,8315=>475,8316=>475,8317=>268,8318=>268,8319=>412,8320=>394,8321=>394,8322=>394,8323=>394,8324=>394,8325=>394,8326=>394,8327=>394,8328=>394,8329=>394,8330=>475,8331=>475,8332=>475,8333=>268,8334=>268,8336=>367,8337=>400,8338=>420,8339=>338,8340=>400,8341=>469,8342=>471,8343=>263,8344=>655,8345=>412,8346=>448,8347=>355,8348=>333,8358=>626,8364=>626,8367=>1039,8369=>710,8372=>788,8373=>626,8376=>669,8377=>626,8451=>1078,8457=>1001,8462=>654,8463=>654,8470=>978,8482=>900,8486=>801,8487=>801,8490=>782,8491=>698,8498=>639,8513=>707,8514=>518,8515=>573,8516=>684,8523=>813,8526=>533,8528=>932,8529=>932,8530=>1326,8531=>932,8532=>932,8533=>932,8534=>932,8535=>932,8536=>932,8537=>932,8538=>932,8539=>932,8540=>932,8541=>932,8542=>932,8543=>554,8544=>421,8545=>663,8546=>904,8547=>984,8548=>698,8549=>1014,8550=>1256,8551=>1498,8552=>962,8553=>698,8554=>970,8555=>1212,8556=>633,8557=>716,8558=>780,8559=>996,8560=>342,8561=>684,8562=>1025,8563=>865,8564=>523,8565=>865,8566=>1207,8567=>1548,8568=>878,8569=>536,8570=>878,8571=>1220,8572=>342,8573=>548,8574=>629,8575=>952,8576=>1129,8577=>780,8578=>1141,8579=>716,8580=>548,8581=>716,8585=>932,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>765,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>577,8706=>480,8707=>558,8708=>558,8710=>677,8711=>677,8712=>666,8713=>666,8715=>666,8716=>666,8719=>757,8720=>757,8721=>677,8722=>754,8723=>754,8724=>754,8725=>329,8727=>622,8728=>466,8729=>466,8730=>591,8731=>591,8732=>591,8733=>604,8734=>750,8735=>754,8736=>754,8739=>292,8740=>546,8741=>476,8742=>696,8743=>730,8744=>730,8745=>754,8746=>754,8747=>521,8748=>900,8749=>1252,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>974,8789=>974,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>754,8848=>754,8849=>754,8850=>754,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>795,8867=>795,8868=>864,8869=>864,8870=>554,8871=>554,8872=>795,8873=>795,8874=>795,8875=>971,8876=>795,8877=>795,8878=>795,8879=>971,8901=>358,8962=>751,8968=>426,8969=>426,8970=>426,8971=>426,8976=>754,8977=>484,8984=>835,8985=>754,8992=>521,8993=>521,8997=>900,9000=>1299,9085=>907,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>521,9167=>850,9251=>751,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754,10181=>411,10182=>411,10208=>444,10216=>411,10217=>411,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>703,10241=>703,10242=>703,10243=>703,10244=>703,10245=>703,10246=>703,10247=>703,10248=>703,10249=>703,10250=>703,10251=>703,10252=>703,10253=>703,10254=>703,10255=>703,10256=>703,10257=>703,10258=>703,10259=>703,10260=>703,10261=>703,10262=>703,10263=>703,10264=>703,10265=>703,10266=>703,10267=>703,10268=>703,10269=>703,10270=>703,10271=>703,10272=>703,10273=>703,10274=>703,10275=>703,10276=>703,10277=>703,10278=>703,10279=>703,10280=>703,10281=>703,10282=>703,10283=>703,10284=>703,10285=>703,10286=>703,10287=>703,10288=>703,10289=>703,10290=>703,10291=>703,10292=>703,10293=>703,10294=>703,10295=>703,10296=>703,10297=>703,10298=>703,10299=>703,10300=>703,10301=>703,10302=>703,10303=>703,10304=>703,10305=>703,10306=>703,10307=>703,10308=>703,10309=>703,10310=>703,10311=>703,10312=>703,10313=>703,10314=>703,10315=>703,10316=>703,10317=>703,10318=>703,10319=>703,10320=>703,10321=>703,10322=>703,10323=>703,10324=>703,10325=>703,10326=>703,10327=>703,10328=>703,10329=>703,10330=>703,10331=>703,10332=>703,10333=>703,10334=>703,10335=>703,10336=>703,10337=>703,10338=>703,10339=>703,10340=>703,10341=>703,10342=>703,10343=>703,10344=>703,10345=>703,10346=>703,10347=>703,10348=>703,10349=>703,10350=>703,10351=>703,10352=>703,10353=>703,10354=>703,10355=>703,10356=>703,10357=>703,10358=>703,10359=>703,10360=>703,10361=>703,10362=>703,10363=>703,10364=>703,10365=>703,10366=>703,10367=>703,10368=>703,10369=>703,10370=>703,10371=>703,10372=>703,10373=>703,10374=>703,10375=>703,10376=>703,10377=>703,10378=>703,10379=>703,10380=>703,10381=>703,10382=>703,10383=>703,10384=>703,10385=>703,10386=>703,10387=>703,10388=>703,10389=>703,10390=>703,10391=>703,10392=>703,10393=>703,10394=>703,10395=>703,10396=>703,10397=>703,10398=>703,10399=>703,10400=>703,10401=>703,10402=>703,10403=>703,10404=>703,10405=>703,10406=>703,10407=>703,10408=>703,10409=>703,10410=>703,10411=>703,10412=>703,10413=>703,10414=>703,10415=>703,10416=>703,10417=>703,10418=>703,10419=>703,10420=>703,10421=>703,10422=>703,10423=>703,10424=>703,10425=>703,10426=>703,10427=>703,10428=>703,10429=>703,10430=>703,10431=>703,10432=>703,10433=>703,10434=>703,10435=>703,10436=>703,10437=>703,10438=>703,10439=>703,10440=>703,10441=>703,10442=>703,10443=>703,10444=>703,10445=>703,10446=>703,10447=>703,10448=>703,10449=>703,10450=>703,10451=>703,10452=>703,10453=>703,10454=>703,10455=>703,10456=>703,10457=>703,10458=>703,10459=>703,10460=>703,10461=>703,10462=>703,10463=>703,10464=>703,10465=>703,10466=>703,10467=>703,10468=>703,10469=>703,10470=>703,10471=>703,10472=>703,10473=>703,10474=>703,10475=>703,10476=>703,10477=>703,10478=>703,10479=>703,10480=>703,10481=>703,10482=>703,10483=>703,10484=>703,10485=>703,10486=>703,10487=>703,10488=>703,10489=>703,10490=>703,10491=>703,10492=>703,10493=>703,10494=>703,10495=>703,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>929,10616=>754,10617=>754,10618=>864,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1604,10765=>549,10766=>549,10799=>754,10858=>754,10859=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11360=>633,11361=>342,11363=>677,11364=>748,11367=>850,11368=>654,11369=>782,11370=>624,11371=>657,11372=>511,11373=>763,11374=>996,11375=>698,11376=>763,11377=>638,11378=>1099,11379=>886,11381=>701,11382=>519,11383=>814,11385=>514,11386=>600,11387=>555,11388=>282,11389=>439,11390=>650,11391=>657,11520=>695,11521=>571,11522=>723,11523=>592,11524=>708,11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>567,11532=>581,11533=>866,11534=>761,11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584,11546=>619,11547=>842,11548=>883,11549=>613,11550=>608,11551=>766,11552=>1002,11553=>569,11554=>580,11555=>582,11556=>674,11557=>822,11800=>527,11807=>754,11810=>426,11811=>426,11812=>426,11813=>426,11822=>527,42564=>650,42565=>506,42566=>421,42567=>342,42576=>1200,42577=>976,42580=>1158,42581=>923,42582=>1158,42583=>926,42760=>450,42761=>450,42762=>450,42763=>450,42764=>450,42765=>450,42766=>450,42767=>450,42768=>450,42769=>450,42770=>450,42771=>450,42772=>450,42773=>450,42774=>450,42779=>346,42780=>346,42781=>249,42782=>249,42783=>249,42790=>850,42791=>641,42792=>903,42793=>817,42794=>626,42795=>548,42796=>570,42797=>538,42798=>667,42799=>635,42800=>533,42801=>506,42802=>1170,42803=>885,42804=>1134,42805=>886,42806=>1051,42807=>906,42808=>914,42809=>749,42810=>914,42811=>749,42812=>895,42813=>671,42814=>716,42815=>548,42816=>782,42817=>624,42822=>824,42823=>523,42826=>909,42827=>692,42830=>1303,42831=>954,42856=>708,42857=>644,42875=>625,42876=>474,42880=>633,42881=>342,42882=>785,42883=>654,42884=>625,42885=>474,42886=>716,42887=>548,42891=>395,42892=>275,42893=>822,42896=>822,42897=>730,42922=>850,43002=>961,43003=>639,43004=>677,43005=>996,43006=>421,43007=>1157,62464=>653,62465=>663,62466=>707,62467=>917,62468=>663,62469=>658,62470=>716,62471=>952,62472=>663,62473=>663,62474=>1196,62475=>679,62476=>678,62477=>922,62478=>663,62479=>678,62480=>963,62481=>736,62482=>783,62483=>737,62484=>914,62485=>677,62486=>907,62487=>677,62488=>684,62489=>678,62490=>720,62491=>678,62492=>684,62493=>664,62494=>721,62495=>860,62496=>663,62497=>762,62498=>664,62499=>663,62500=>663,62501=>714,62502=>930,62504=>813,63172=>342,63173=>600,63174=>629,63175=>654,63176=>952,63185=>450,63188=>450,64256=>744,64257=>654,64258=>654,64259=>998,64260=>1031,64261=>791,64262=>874,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1002,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserifcondensedbi.z b/tcpdf/fonts/dejavuserifcondensedbi.z new file mode 100644 index 0000000..f72fcba Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensedbi.z differ diff --git a/tcpdf/fonts/dejavuserifcondensedi.ctg.z b/tcpdf/fonts/dejavuserifcondensedi.ctg.z new file mode 100644 index 0000000..aa9dc33 Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensedi.ctg.z differ diff --git a/tcpdf/fonts/dejavuserifcondensedi.php b/tcpdf/fonts/dejavuserifcondensedi.php new file mode 100644 index 0000000..7edf115 --- /dev/null +++ b/tcpdf/fonts/dejavuserifcondensedi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerifCondensed-Italic'; +$up=-63; +$ut=44; +$dw=540; +$diff=''; +$originalsize=342736; +$enc=''; +$file='dejavuserifcondensedi.z'; +$ctg='dejavuserifcondensedi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-755 -347 1480 1109]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>34,'StemH'=>15,'AvgWidth'=>461,'MaxWidth'=>1560,'MissingWidth'=>540); +$cbbox=array(0=>array(44,-177,495,705),33=>array(69,-14,303,729),34=>array(88,458,326,729),35=>array(69,0,686,718),36=>array(30,-147,517,760),37=>array(81,-14,774,742),38=>array(35,-14,751,742),39=>array(88,458,158,729),40=>array(71,-156,367,760),41=>array(-17,-156,280,760),42=>array(14,287,436,742),43=>array(95,0,659,627),44=>array(18,-136,221,111),45=>array(33,230,271,306),46=>array(84,-14,202,116),47=>array(-72,-93,375,729),48=>array(59,-14,513,742),49=>array(63,0,396,742),50=>array(-4,0,504,742),51=>array(11,-14,515,742),52=>array(-3,0,506,742),53=>array(20,-14,518,729),54=>array(56,-14,543,742),55=>array(109,0,572,729),56=>array(31,-14,524,742),57=>array(30,-14,516,742),58=>array(65,-14,239,434),59=>array(-11,-136,251,434),60=>array(95,46,659,581),61=>array(95,175,659,452),62=>array(95,46,659,581),63=>array(97,-14,472,742),64=>array(58,-174,851,704),65=>array(-69,0,604,729),66=>array(-14,0,606,729),67=>array(47,-14,672,742),68=>array(-14,0,670,729),69=>array(-14,0,642,729),70=>array(-14,0,651,729),71=>array(50,-14,682,742),72=>array(-14,0,799,729),73=>array(-14,0,370,729),74=>array(-152,-208,402,729),75=>array(-14,0,716,729),76=>array(-14,0,544,729),77=>array(-14,0,940,729),78=>array(-19,-14,813,729),79=>array(46,-14,688,742),80=>array(-14,0,602,729),81=>array(54,-160,709,742),82=>array(-14,0,645,729),83=>array(26,-14,577,742),84=>array(42,0,655,729),85=>array(98,-14,783,729),86=>array(45,0,727,729),87=>array(59,0,986,729),88=>array(-59,0,670,729),89=>array(44,0,666,729),90=>array(-23,0,638,729),91=>array(-1,-132,360,760),92=>array(72,-93,231,729),93=>array(-9,-132,352,760),94=>array(95,457,659,729),95=>array(0,-236,450,-197),96=>array(161,615,330,799),97=>array(30,-14,477,534),98=>array(38,-14,519,760),99=>array(38,-14,487,533),100=>array(18,-14,541,760),101=>array(38,-14,492,533),102=>array(-56,-208,466,760),103=>array(32,-222,538,533),104=>array(43,0,498,760),105=>array(45,0,243,736),106=>array(-165,-222,265,736),107=>array(37,0,494,760),108=>array(37,0,251,760),109=>array(63,0,792,533),110=>array(63,0,517,533),111=>array(38,-14,503,533),112=>array(39,-208,555,533),113=>array(81,-208,535,533),114=>array(63,0,475,533),115=>array(10,-14,431,533),116=>array(49,-14,363,680),117=>array(62,-14,517,519),118=>array(34,0,499,519),119=>array(50,0,752,519),120=>array(2,0,495,519),121=>array(-34,-222,518,519),122=>array(-10,-25,479,544),123=>array(108,-163,541,760),124=>array(116,-236,188,764),125=>array(32,-163,465,760),126=>array(95,233,659,394),161=>array(59,0,293,743),162=>array(68,-145,510,662),163=>array(-5,0,545,742),164=>array(45,45,529,582),165=>array(41,0,639,729),166=>array(116,-171,188,699),167=>array(1,-95,433,742),168=>array(173,652,447,766),169=>array(124,0,776,725),170=>array(31,261,389,734),171=>array(66,69,506,517),172=>array(95,140,659,421),173=>array(33,230,271,306),174=>array(124,0,776,725),175=>array(162,673,437,745),176=>array(85,432,365,742),177=>array(95,0,659,627),178=>array(3,326,317,742),179=>array(11,319,317,742),180=>array(231,616,465,800),181=>array(40,-208,540,519),182=>array(105,-96,587,729),183=>array(83,282,201,412),184=>array(113,-193,308,0),185=>array(42,326,263,734),186=>array(18,261,390,742),187=>array(45,69,485,517),188=>array(42,-14,777,742),189=>array(42,-14,771,742),190=>array(11,-14,777,742),191=>array(28,-13,403,743),192=>array(-69,0,604,927),193=>array(-69,0,604,927),194=>array(-69,0,604,927),195=>array(-69,0,604,921),196=>array(-69,0,604,920),197=>array(-87,0,587,928),198=>array(-80,0,911,729),199=>array(47,-193,672,742),200=>array(-14,0,642,927),201=>array(-14,0,642,927),202=>array(-14,0,642,927),203=>array(-14,0,642,920),204=>array(-14,0,370,927),205=>array(-14,0,402,927),206=>array(-14,0,405,927),207=>array(-14,0,403,920),208=>array(-10,0,674,729),209=>array(-19,-14,813,921),210=>array(46,-14,688,927),211=>array(46,-14,688,927),212=>array(46,-14,688,927),213=>array(46,-14,688,921),214=>array(46,-14,688,920),215=>array(124,33,630,594),216=>array(-19,-28,755,757),217=>array(98,-14,783,927),218=>array(98,-14,783,927),219=>array(98,-14,783,927),220=>array(98,-14,783,920),221=>array(44,0,666,927),222=>array(-14,0,574,729),223=>array(-77,-208,525,760),224=>array(30,-14,477,799),225=>array(30,-14,490,800),226=>array(30,-14,477,800),227=>array(30,-14,500,777),228=>array(30,-14,477,766),229=>array(30,-14,477,878),230=>array(30,-15,806,533),231=>array(38,-193,487,533),232=>array(38,-14,492,799),233=>array(38,-14,506,800),234=>array(38,-14,492,800),235=>array(38,-14,492,766),236=>array(64,0,249,799),237=>array(64,0,384,800),238=>array(64,0,353,800),239=>array(64,0,366,766),240=>array(23,-14,518,760),241=>array(63,0,517,777),242=>array(38,-14,503,799),243=>array(38,-14,510,800),244=>array(38,-14,503,800),245=>array(38,-14,521,777),246=>array(38,-14,503,766),247=>array(95,68,659,559),248=>array(-15,-46,553,565),249=>array(62,-14,517,799),250=>array(62,-14,517,800),251=>array(62,-14,517,800),252=>array(62,-14,517,766),253=>array(-34,-222,518,800),254=>array(19,-208,536,760),255=>array(-34,-222,518,766),256=>array(-69,0,604,899),257=>array(30,-14,477,745),258=>array(-69,0,604,926),259=>array(30,-14,477,772),260=>array(-69,-192,604,729),261=>array(30,-192,477,534),262=>array(47,-14,672,927),263=>array(38,-14,506,800),264=>array(47,-14,672,927),265=>array(38,-14,487,800),266=>array(47,-14,672,921),267=>array(38,-14,487,766),268=>array(47,-14,672,927),269=>array(38,-14,506,800),270=>array(-14,0,670,927),271=>array(18,-14,732,760),272=>array(-10,0,674,729),273=>array(18,-14,599,760),274=>array(-14,0,642,899),275=>array(38,-14,492,746),276=>array(-14,0,642,928),277=>array(38,-14,497,785),278=>array(-14,0,642,921),279=>array(38,-14,492,766),280=>array(-14,-192,642,729),281=>array(38,-192,492,533),282=>array(-14,0,642,927),283=>array(38,-14,506,800),284=>array(50,-14,682,927),285=>array(32,-222,538,800),286=>array(50,-14,682,928),287=>array(32,-222,538,785),288=>array(50,-14,682,921),289=>array(32,-222,538,766),290=>array(50,-224,682,742),291=>array(32,-222,538,741),292=>array(-14,0,799,927),293=>array(43,0,498,927),294=>array(-14,0,799,729),295=>array(43,0,498,760),296=>array(-14,0,417,921),297=>array(48,0,362,777),298=>array(-14,0,406,899),299=>array(48,0,324,745),300=>array(-14,0,415,928),301=>array(64,0,366,785),302=>array(2,-192,387,729),303=>array(26,-192,260,736),304=>array(-14,0,370,921),305=>array(64,0,236,519),306=>array(-14,-208,762,729),307=>array(45,-222,522,736),308=>array(-152,-208,409,927),309=>array(-146,-222,324,800),310=>array(-14,-209,716,729),311=>array(37,-209,494,760),312=>array(58,0,516,518),313=>array(-14,0,544,928),314=>array(37,0,337,928),315=>array(-14,-209,544,729),316=>array(37,-209,251,760),317=>array(-14,0,544,729),318=>array(37,0,443,760),319=>array(-14,0,568,729),320=>array(37,0,379,760),321=>array(-10,0,549,729),322=>array(10,0,294,760),323=>array(-19,-14,813,928),324=>array(63,0,517,776),325=>array(-19,-224,813,729),326=>array(63,-209,517,533),327=>array(-19,-14,813,932),328=>array(63,0,517,800),329=>array(35,0,692,742),330=>array(42,-208,724,743),331=>array(83,-222,521,533),332=>array(46,-14,688,899),333=>array(38,-14,503,745),334=>array(46,-14,688,928),335=>array(38,-14,503,785),336=>array(46,-14,708,927),337=>array(38,-14,583,800),338=>array(52,0,1008,729),339=>array(38,-15,850,533),340=>array(-14,0,645,928),341=>array(63,0,494,776),342=>array(-14,-209,645,729),343=>array(63,-209,475,533),344=>array(-14,0,645,927),345=>array(63,0,488,800),346=>array(26,-14,577,928),347=>array(10,-14,494,776),348=>array(26,-14,577,927),349=>array(10,-14,439,800),350=>array(26,-193,577,742),351=>array(10,-193,431,533),352=>array(26,-14,577,927),353=>array(10,-14,471,800),354=>array(42,-193,655,729),355=>array(34,-193,363,680),356=>array(42,0,655,927),357=>array(49,-14,428,788),358=>array(42,0,655,729),359=>array(20,-14,363,680),360=>array(98,-14,783,921),361=>array(62,-14,517,777),362=>array(98,-14,783,899),363=>array(62,-14,517,745),364=>array(98,-14,783,928),365=>array(62,-14,517,785),366=>array(98,-14,783,1051),367=>array(62,-14,517,868),368=>array(98,-14,783,927),369=>array(62,-14,559,800),370=>array(98,-200,783,729),371=>array(62,-192,517,519),372=>array(59,0,986,931),373=>array(50,0,752,800),374=>array(44,0,666,931),375=>array(-34,-222,518,800),376=>array(44,0,666,920),377=>array(-23,0,638,928),378=>array(-10,-25,494,776),379=>array(-23,0,638,930),380=>array(-10,-25,479,734),381=>array(-23,0,638,927),382=>array(-10,-25,479,800),383=>array(-56,-208,466,760),384=>array(38,-14,519,760),385=>array(-62,0,606,729),386=>array(-14,0,642,729),387=>array(-40,-14,513,760),388=>array(-14,0,580,729),389=>array(-40,-14,511,760),390=>array(13,-14,639,742),391=>array(42,-14,878,796),392=>array(35,-14,695,639),393=>array(-10,0,674,729),394=>array(-61,0,670,729),395=>array(22,0,670,729),396=>array(6,-14,599,760),397=>array(41,-246,517,533),398=>array(-14,0,649,729),399=>array(47,-14,688,742),400=>array(84,-14,626,742),401=>array(-166,-208,669,729),402=>array(-165,-185,466,760),403=>array(45,-14,887,796),404=>array(70,-92,678,729),405=>array(43,-3,772,760),406=>array(99,0,370,729),407=>array(-14,0,370,729),408=>array(-15,0,798,741),409=>array(37,0,494,760),410=>array(-0,0,251,760),411=>array(-30,0,488,765),412=>array(76,-14,890,730),413=>array(-167,-208,830,729),414=>array(81,-208,512,533),415=>array(46,-14,688,742),416=>array(44,-14,774,760),417=>array(37,-14,616,533),418=>array(59,-157,864,742),419=>array(62,-208,655,533),420=>array(-61,0,602,729),421=>array(22,-208,532,716),422=>array(-0,-159,631,729),423=>array(46,-14,583,742),424=>array(30,-14,437,533),425=>array(-27,0,640,729),426=>array(-18,-222,377,761),427=>array(44,-222,421,680),428=>array(61,0,655,729),429=>array(42,-14,437,760),430=>array(61,-208,674,729),431=>array(95,-14,958,802),432=>array(57,-14,654,532),433=>array(50,-14,756,729),434=>array(99,0,626,729),435=>array(44,0,777,729),436=>array(-34,-222,710,530),437=>array(-23,0,638,729),438=>array(-9,-25,479,544),439=>array(-11,-14,505,729),440=>array(21,-14,536,729),441=>array(21,-224,535,519),442=>array(8,-224,505,519),443=>array(-4,0,504,742),444=>array(57,-14,592,729),445=>array(-11,-224,501,519),446=>array(52,-15,365,680),447=>array(36,-208,557,560),448=>array(33,0,232,729),449=>array(33,0,410,729),450=>array(-15,0,428,729),451=>array(33,0,232,729),452=>array(-14,0,1360,927),453=>array(-14,-25,1200,800),454=>array(18,-25,1055,800),455=>array(-14,-208,1000,729),456=>array(-14,-222,863,736),457=>array(37,-222,553,760),458=>array(-19,-208,1189,729),459=>array(-19,-222,1053,736),460=>array(63,-222,845,736),461=>array(-69,0,604,927),462=>array(30,-14,478,800),463=>array(-14,0,419,927),464=>array(64,0,379,800),465=>array(46,-14,688,927),466=>array(38,-14,509,800),467=>array(98,-14,783,927),468=>array(62,-14,517,800),469=>array(98,-14,783,1025),470=>array(62,-14,517,886),471=>array(98,-14,783,1044),472=>array(62,-14,517,905),473=>array(98,-14,783,1043),474=>array(62,-14,517,904),475=>array(98,-14,783,1044),476=>array(62,-14,517,905),477=>array(46,-14,488,533),478=>array(-69,0,604,1025),479=>array(30,-14,489,886),480=>array(-69,0,604,1025),481=>array(30,-14,480,888),482=>array(-80,0,911,899),483=>array(30,-15,806,745),484=>array(42,-14,709,742),485=>array(31,-222,573,533),486=>array(50,-14,682,927),487=>array(32,-222,538,800),488=>array(-14,0,716,927),489=>array(37,0,494,964),490=>array(46,-200,688,742),491=>array(38,-200,503,533),492=>array(46,-200,688,899),493=>array(38,-200,503,745),494=>array(-11,-14,506,927),495=>array(-11,-224,505,800),496=>array(-146,-222,397,800),497=>array(-14,0,1360,729),498=>array(-14,-25,1200,729),499=>array(18,-25,1055,760),500=>array(50,-14,682,928),501=>array(32,-222,538,800),502=>array(-13,-14,1027,729),503=>array(-34,-208,635,742),504=>array(-19,-14,813,927),505=>array(63,0,517,799),506=>array(-86,0,587,927),507=>array(30,-14,505,927),508=>array(-80,0,911,928),509=>array(30,-15,806,802),510=>array(-19,-28,755,928),511=>array(-15,-46,553,800),512=>array(-69,0,604,927),513=>array(29,-14,476,800),514=>array(-69,0,604,967),515=>array(29,-14,476,785),516=>array(-14,0,642,927),517=>array(38,-14,492,800),518=>array(-14,0,642,967),519=>array(38,-14,492,785),520=>array(-14,0,382,927),521=>array(13,0,319,799),522=>array(-14,0,403,967),523=>array(43,0,329,757),524=>array(46,-14,688,927),525=>array(38,-14,503,800),526=>array(46,-14,688,967),527=>array(38,-14,503,785),528=>array(-14,0,645,927),529=>array(63,0,474,800),530=>array(-14,0,645,967),531=>array(63,0,474,785),532=>array(98,-14,783,927),533=>array(62,-14,517,800),534=>array(98,-14,783,967),535=>array(62,-14,517,785),536=>array(26,-225,577,742),537=>array(10,-225,431,533),538=>array(42,-225,655,729),539=>array(49,-225,363,680),540=>array(-15,-210,536,742),541=>array(-34,-211,446,530),542=>array(-14,0,799,927),543=>array(42,0,497,964),544=>array(42,-208,724,743),545=>array(30,-73,662,760),546=>array(4,-14,492,742),547=>array(12,-14,464,760),548=>array(-7,-187,655,729),549=>array(7,-195,496,519),550=>array(-69,0,604,921),551=>array(29,-14,476,766),552=>array(-14,-193,642,729),553=>array(38,-193,492,533),554=>array(46,-14,688,1025),555=>array(38,-14,510,886),556=>array(46,-14,688,1025),557=>array(38,-14,510,862),558=>array(46,-14,688,921),559=>array(38,-14,503,766),560=>array(46,-14,688,1025),561=>array(38,-14,503,887),562=>array(44,0,666,899),563=>array(-34,-222,518,745),564=>array(72,-107,393,760),565=>array(72,-107,710,533),566=>array(57,-107,394,680),567=>array(-146,-222,256,519),568=>array(25,-14,799,760),569=>array(62,-208,836,533),570=>array(-69,-28,712,757),571=>array(-43,-28,731,757),572=>array(-32,-46,536,565),573=>array(-14,0,544,729),574=>array(-87,-28,687,757),575=>array(28,-222,450,533),576=>array(10,-222,498,519),577=>array(21,0,521,729),578=>array(56,0,396,533),579=>array(-14,0,606,729),580=>array(37,-14,783,729),581=>array(-69,0,604,729),582=>array(-14,-54,642,783),583=>array(38,-54,492,579),584=>array(-152,-208,402,729),585=>array(-146,-222,290,736),586=>array(67,-208,746,742),587=>array(81,-222,626,533),588=>array(-14,0,645,729),589=>array(25,0,475,533),590=>array(17,0,666,729),591=>array(-34,-222,557,519),592=>array(60,-14,506,533),593=>array(38,-12,590,533),594=>array(25,-12,570,533),595=>array(39,-14,511,760),596=>array(20,-14,463,533),597=>array(46,-107,496,533),598=>array(43,-222,607,760),599=>array(25,-14,730,760),600=>array(35,-14,488,533),601=>array(46,-14,488,533),602=>array(38,-14,826,533),603=>array(23,-19,449,524),604=>array(4,-19,425,524),605=>array(3,-19,765,524),606=>array(44,-18,534,533),607=>array(-146,-222,290,519),608=>array(10,-222,750,760),609=>array(32,-222,615,519),610=>array(44,-18,488,529),611=>array(67,-223,530,519),612=>array(85,-16,497,532),613=>array(79,-208,534,519),614=>array(43,0,497,760),615=>array(63,-222,493,760),616=>array(8,0,251,736),617=>array(68,0,236,519),618=>array(-13,0,313,519),619=>array(17,0,331,760),620=>array(22,0,370,760),621=>array(47,-222,319,760),622=>array(57,-224,609,760),623=>array(70,-14,798,519),624=>array(88,-208,817,533),625=>array(83,-222,787,533),626=>array(-147,-222,513,533),627=>array(83,-222,637,533),628=>array(-14,-14,608,519),629=>array(44,-14,497,533),630=>array(45,0,726,519),631=>array(34,-14,537,530),632=>array(42,-208,494,760),633=>array(-12,-14,400,519),634=>array(-33,-14,421,759),635=>array(6,-222,510,519),636=>array(45,-207,493,533),637=>array(72,-222,494,533),638=>array(63,0,428,530),639=>array(59,0,331,530),640=>array(-15,0,487,519),641=>array(-15,0,568,519),642=>array(14,-222,450,533),643=>array(-167,-222,379,761),644=>array(-167,-222,469,760),645=>array(74,-222,376,530),646=>array(-156,-222,426,761),647=>array(17,-161,332,533),648=>array(46,-208,380,680),649=>array(20,-14,551,519),650=>array(42,-14,560,519),651=>array(69,-3,501,519),652=>array(34,0,499,519),653=>array(50,0,752,519),654=>array(-15,0,537,741),655=>array(73,0,603,519),656=>array(10,-222,597,519),657=>array(-1,-93,487,519),658=>array(-11,-224,505,519),659=>array(28,-224,505,519),660=>array(36,0,422,761),661=>array(89,0,441,761),662=>array(51,0,404,761),663=>array(-6,-222,408,759),664=>array(47,-14,688,742),665=>array(-13,0,470,519),666=>array(21,-18,511,533),667=>array(24,-18,705,760),668=>array(-15,0,598,519),669=>array(-155,-222,316,736),670=>array(81,-209,538,519),671=>array(-9,0,453,519),672=>array(42,-208,748,760),673=>array(36,0,422,761),674=>array(89,0,441,761),675=>array(18,-25,895,760),676=>array(43,-224,898,760),677=>array(32,-93,887,760),678=>array(48,0,696,680),679=>array(60,-222,672,761),680=>array(49,-14,729,680),681=>array(-53,-222,781,760),682=>array(37,0,596,760),683=>array(37,-25,606,760),684=>array(21,-15,548,625),685=>array(-15,105,398,625),686=>array(86,-207,636,760),687=>array(87,-222,728,760),688=>array(31,326,312,751),689=>array(28,326,309,751),690=>array(-24,202,233,739),691=>array(40,327,292,625),692=>array(-4,318,247,617),693=>array(5,202,319,617),694=>array(-5,327,333,617),695=>array(32,326,474,617),696=>array(-21,202,326,617),697=>array(49,557,204,800),698=>array(49,557,367,800),699=>array(70,495,256,742),700=>array(77,495,263,742),701=>array(113,495,227,742),702=>array(106,492,250,760),703=>array(109,492,254,760),704=>array(-18,347,225,772),705=>array(17,347,235,772),706=>array(111,524,360,836),707=>array(90,524,339,836),708=>array(63,561,344,800),709=>array(105,561,387,800),710=>array(153,616,434,800),711=>array(185,616,465,800),712=>array(64,513,190,759),713=>array(162,673,437,745),714=>array(231,616,465,800),715=>array(161,615,330,799),716=>array(64,-90,190,156),717=>array(17,-156,292,-84),720=>array(57,0,247,434),721=>array(106,303,220,434),722=>array(64,249,208,517),723=>array(67,249,211,517),726=>array(41,165,278,411),727=>array(41,242,278,334),728=>array(180,645,455,785),729=>array(257,652,360,766),730=>array(188,610,429,878),731=>array(144,-192,306,0),732=>array(161,639,475,777),733=>array(170,616,509,800),734=>array(-7,307,365,508),736=>array(42,202,334,617),737=>array(33,326,161,751),738=>array(1,318,268,625),739=>array(1,326,312,617),740=>array(17,347,235,772),741=>array(141,0,409,668),742=>array(114,0,409,668),743=>array(88,0,409,668),744=>array(62,0,409,668),745=>array(35,0,409,668),748=>array(77,-281,358,-42),750=>array(77,495,413,742),751=>array(75,-241,355,-58),752=>array(36,-281,316,-42),755=>array(104,-240,346,28),759=>array(68,-192,382,-55),768=>array(-339,615,-171,799),769=>array(-270,616,-36,800),770=>array(-348,616,-67,800),771=>array(-340,639,-26,777),772=>array(-339,673,-63,745),773=>array(-450,716,0,755),774=>array(-321,645,-45,785),775=>array(-244,652,-141,766),776=>array(-327,652,-53,766),777=>array(-255,616,-73,852),778=>array(-313,610,-71,878),779=>array(-331,616,8,800),780=>array(-316,616,-35,800),781=>array(-234,616,-136,803),782=>array(-332,616,-38,803),783=>array(-388,616,-82,800),784=>array(-321,645,-45,874),785=>array(-343,645,-67,785),786=>array(-208,495,-52,644),787=>array(-212,606,-83,829),788=>array(-214,606,-95,829),789=>array(-74,616,74,800),790=>array(-355,-260,-186,-76),791=>array(-294,-259,-61,-76),792=>array(-304,-340,-139,-107),793=>array(-311,-340,-146,-107),794=>array(-168,698,55,932),795=>array(-112,350,74,532),796=>array(-280,-347,-135,-79),797=>array(-343,-251,-120,-99),798=>array(-329,-260,-105,-107),799=>array(-335,-340,-112,-107),800=>array(-336,-179,-112,-107),801=>array(-396,-222,-74,63),802=>array(-348,-222,-76,63),803=>array(-193,-191,-90,-77),804=>array(-363,-191,-89,-77),805=>array(-320,-241,-132,-32),806=>array(-313,-225,-180,-76),807=>array(-337,-193,-142,0),808=>array(-307,-192,-145,0),809=>array(-274,-263,-176,-76),810=>array(-373,-259,-77,-75),811=>array(-353,-217,-73,-77),812=>array(-349,-261,-68,-77),813=>array(-382,-260,-101,-76),814=>array(-350,-217,-74,-77),815=>array(-374,-216,-99,-76),816=>array(-385,-213,-71,-76),817=>array(-362,-147,-87,-75),818=>array(-450,-236,0,-197),819=>array(-450,-236,0,-80),820=>array(-681,212,-68,415),821=>array(-266,227,-22,278),822=>array(-559,227,-27,278),823=>array(-551,-46,17,565),824=>array(-755,-28,19,757),825=>array(-305,-344,-161,-76),826=>array(-375,-256,-80,-72),827=>array(-370,-344,-81,-75),828=>array(-377,-217,-98,-77),829=>array(-301,575,-86,792),830=>array(-234,592,-64,850),831=>array(-450,599,0,755),835=>array(-212,606,-83,829),856=>array(21,652,125,766),864=>array(-261,723,515,859),865=>array(-295,729,506,869),880=>array(-14,0,643,729),881=>array(58,0,440,519),882=>array(14,0,655,729),883=>array(38,0,509,519),884=>array(49,557,204,800),885=>array(49,-208,204,35),886=>array(66,-14,726,743),887=>array(58,0,525,519),890=>array(194,-208,298,-60),891=>array(26,-14,470,533),892=>array(38,-14,487,533),893=>array(26,-14,470,533),894=>array(-11,-136,251,434),900=>array(231,616,465,800),901=>array(173,652,523,996),902=>array(-69,0,604,800),903=>array(83,282,201,412),904=>array(65,0,795,800),905=>array(65,0,950,800),906=>array(65,0,520,800),908=>array(61,-14,702,800),910=>array(65,0,879,800),911=>array(12,0,718,800),912=>array(69,22,442,996),913=>array(-69,0,604,729),914=>array(-14,0,606,729),915=>array(-14,0,650,729),916=>array(-30,0,548,729),917=>array(-14,0,642,729),918=>array(-23,0,638,729),919=>array(-14,0,799,729),920=>array(46,-14,688,742),921=>array(-14,0,370,729),922=>array(-14,0,716,729),923=>array(-69,0,604,729),924=>array(-14,0,940,729),925=>array(-19,-14,813,729),926=>array(-14,0,642,729),927=>array(46,-14,688,742),928=>array(-14,0,799,729),929=>array(-14,0,602,729),931=>array(-27,0,640,729),932=>array(42,0,655,729),933=>array(44,0,666,729),934=>array(50,0,688,729),935=>array(-59,0,670,729),936=>array(97,0,818,729),937=>array(-9,0,697,742),938=>array(-14,0,409,920),939=>array(44,0,666,920),940=>array(38,-12,590,800),941=>array(23,-19,465,800),942=>array(81,-208,512,800),943=>array(69,22,384,800),944=>array(69,-3,562,996),945=>array(38,-12,590,533),946=>array(-29,-208,475,765),947=>array(87,-209,535,519),948=>array(24,-14,500,765),949=>array(23,-19,449,524),950=>array(44,-208,532,760),951=>array(81,-208,512,533),952=>array(44,-11,497,771),953=>array(69,22,272,519),954=>array(-9,0,577,519),955=>array(-30,0,488,765),956=>array(40,-208,540,519),957=>array(64,0,516,519),958=>array(31,-208,532,760),959=>array(38,-14,503,533),960=>array(-9,0,604,519),961=>array(-8,-208,501,533),962=>array(62,-208,504,533),963=>array(46,-14,635,519),964=>array(60,22,510,519),965=>array(69,-3,503,519),966=>array(49,-208,609,521),967=>array(-53,-222,589,533),968=>array(115,-208,713,519),969=>array(31,-3,690,519),970=>array(69,22,368,766),971=>array(69,-3,503,766),972=>array(38,-14,514,800),973=>array(69,-3,503,800),974=>array(31,-3,690,800),975=>array(7,-240,737,729),976=>array(44,-11,484,771),977=>array(46,-11,615,771),978=>array(81,0,630,731),979=>array(65,0,799,800),980=>array(81,0,630,920),981=>array(31,-208,576,760),982=>array(31,-3,755,519),983=>array(17,-222,579,533),984=>array(63,-208,705,742),985=>array(62,-208,514,533),986=>array(63,-208,689,742),987=>array(54,-208,519,616),988=>array(-14,0,650,729),989=>array(-161,-211,467,742),990=>array(22,0,508,729),991=>array(78,0,520,759),992=>array(27,-208,666,742),993=>array(23,-208,456,533),1008=>array(-2,-4,560,533),1009=>array(20,-210,501,533),1010=>array(38,-14,487,533),1011=>array(-165,-222,265,736),1012=>array(46,-14,688,742),1013=>array(38,-14,487,533),1014=>array(26,-14,463,533),1015=>array(-14,0,574,729),1016=>array(19,-208,536,760),1017=>array(47,-14,672,742),1018=>array(-14,0,940,729),1019=>array(-21,-208,663,519),1020=>array(-18,-208,526,533),1021=>array(21,-14,644,742),1022=>array(47,-14,672,742),1023=>array(21,-14,644,742),1024=>array(-14,0,642,927),1025=>array(-14,0,642,920),1026=>array(18,-216,646,729),1027=>array(-14,0,622,927),1028=>array(50,-14,672,742),1029=>array(26,-14,577,742),1030=>array(-14,0,370,729),1031=>array(-14,0,423,920),1032=>array(-152,-208,402,729),1033=>array(-37,-14,909,729),1034=>array(-14,0,933,729),1035=>array(-1,0,681,729),1036=>array(-14,0,716,927),1037=>array(-14,0,799,927),1038=>array(26,-14,705,970),1039=>array(-0,-157,813,729),1040=>array(-53,0,620,729),1041=>array(-14,0,642,729),1042=>array(-14,0,606,729),1043=>array(-14,0,622,729),1044=>array(-33,-157,746,729),1045=>array(-14,0,642,729),1046=>array(-53,0,1030,729),1047=>array(8,-14,519,742),1048=>array(-14,0,799,729),1049=>array(-14,0,799,966),1050=>array(-14,0,716,729),1051=>array(-37,-14,771,729),1052=>array(-14,0,940,729),1053=>array(-14,0,799,729),1054=>array(46,-14,688,742),1055=>array(-14,0,799,729),1056=>array(-14,0,602,729),1057=>array(47,-14,672,742),1058=>array(42,0,655,729),1059=>array(26,-14,705,729),1060=>array(48,0,701,729),1061=>array(-59,0,670,729),1062=>array(-0,-157,813,729),1063=>array(63,0,713,729),1064=>array(-14,0,1042,729),1065=>array(-0,-157,1055,729),1066=>array(66,0,662,729),1067=>array(-14,0,900,729),1068=>array(-14,0,553,729),1069=>array(21,-14,644,742),1070=>array(-14,-14,1015,742),1071=>array(-33,0,741,729),1072=>array(30,-14,477,534),1073=>array(44,-14,553,786),1074=>array(38,-14,483,533),1075=>array(65,-14,443,534),1076=>array(38,-14,533,760),1077=>array(38,-14,492,533),1078=>array(10,-14,1013,533),1079=>array(23,-14,447,533),1080=>array(62,-14,517,519),1081=>array(62,-14,517,752),1082=>array(63,-14,538,533),1083=>array(11,-14,513,519),1084=>array(11,-14,686,519),1085=>array(63,0,530,519),1086=>array(38,-14,503,533),1087=>array(63,0,517,533),1088=>array(39,-208,555,533),1089=>array(38,-14,487,533),1090=>array(63,0,792,533),1091=>array(-34,-222,518,519),1092=>array(25,-208,674,760),1093=>array(2,0,495,519),1094=>array(62,-208,579,519),1095=>array(63,0,498,519),1096=>array(62,-14,790,519),1097=>array(62,-208,852,519),1098=>array(35,-14,559,534),1099=>array(62,-14,670,519),1100=>array(62,-14,448,519),1101=>array(21,-14,470,533),1102=>array(63,-14,754,533),1103=>array(11,-14,533,519),1104=>array(38,-14,492,799),1105=>array(38,-14,492,766),1106=>array(34,-222,485,760),1107=>array(65,-14,483,800),1108=>array(38,-14,487,533),1109=>array(10,-14,431,533),1110=>array(45,0,243,736),1111=>array(64,0,366,766),1112=>array(-165,-222,265,736),1113=>array(11,-14,732,519),1114=>array(63,-14,749,519),1115=>array(34,0,497,760),1116=>array(63,-14,538,800),1117=>array(62,-14,517,799),1118=>array(-34,-222,518,750),1119=>array(62,-211,517,519),1122=>array(52,0,632,729),1123=>array(63,-14,752,534),1124=>array(-14,-14,999,742),1125=>array(58,-14,734,533),1130=>array(10,0,1010,729),1131=>array(30,-14,835,519),1132=>array(-14,0,1158,729),1133=>array(58,-14,964,519),1136=>array(56,0,891,729),1137=>array(15,-208,841,760),1138=>array(46,-14,688,742),1139=>array(38,-14,459,533),1140=>array(64,0,822,742),1141=>array(45,0,641,533),1142=>array(64,0,822,927),1143=>array(45,0,641,800),1164=>array(15,0,582,729),1165=>array(31,-14,429,760),1168=>array(-14,0,656,872),1169=>array(58,0,509,668),1170=>array(-14,0,622,729),1171=>array(65,-14,443,534),1172=>array(-14,-216,651,729),1173=>array(-15,-222,490,519),1174=>array(-53,-157,1030,729),1175=>array(10,-208,1013,533),1176=>array(8,-193,519,742),1177=>array(23,-193,447,533),1178=>array(-0,-157,729,729),1179=>array(63,-208,538,533),1182=>array(-14,0,716,729),1183=>array(63,-14,538,760),1184=>array(66,0,824,729),1185=>array(35,-14,602,533),1186=>array(-14,-157,799,729),1187=>array(63,-208,592,519),1188=>array(-14,0,1051,729),1189=>array(63,0,778,519),1190=>array(-14,-216,1011,729),1191=>array(-15,-222,764,519),1194=>array(47,-193,672,742),1195=>array(38,-193,487,533),1196=>array(42,-157,655,729),1197=>array(63,-208,862,533),1198=>array(44,0,666,729),1199=>array(53,-208,523,519),1200=>array(44,0,666,729),1201=>array(53,-208,523,519),1202=>array(-59,-157,670,729),1203=>array(2,-208,518,519),1204=>array(42,-157,870,729),1205=>array(31,-208,610,519),1206=>array(63,-157,712,729),1207=>array(63,-208,560,519),1210=>array(-76,0,573,729),1211=>array(43,0,498,760),1216=>array(-14,0,370,729),1217=>array(-53,0,1030,928),1218=>array(10,-14,1013,785),1219=>array(-14,-216,716,729),1220=>array(-15,-222,571,519),1223=>array(-14,-216,799,729),1224=>array(-15,-222,598,519),1227=>array(63,-157,712,729),1228=>array(67,-138,598,519),1231=>array(-41,0,331,760),1232=>array(-53,0,620,926),1233=>array(30,-14,477,772),1234=>array(-53,0,620,920),1235=>array(30,-14,477,766),1236=>array(-80,0,911,729),1237=>array(30,-15,806,533),1238=>array(-14,0,642,928),1239=>array(38,-14,497,785),1240=>array(47,-14,688,742),1241=>array(46,-14,488,533),1242=>array(47,-14,688,920),1243=>array(46,-14,488,766),1244=>array(-53,0,1030,920),1245=>array(10,-14,1013,766),1246=>array(8,-14,519,920),1247=>array(23,-14,457,766),1248=>array(-11,-14,505,729),1249=>array(-11,-224,505,519),1250=>array(-14,0,799,899),1251=>array(62,-14,517,745),1252=>array(-14,0,799,920),1253=>array(62,-14,517,766),1254=>array(46,-14,688,920),1255=>array(38,-14,503,766),1256=>array(46,-14,688,742),1257=>array(44,-14,497,533),1258=>array(46,-14,688,920),1259=>array(44,-14,497,766),1260=>array(21,-14,644,920),1261=>array(21,-14,470,766),1262=>array(26,-14,705,899),1263=>array(-34,-222,518,745),1264=>array(26,-14,705,920),1265=>array(-34,-222,518,766),1266=>array(26,-14,705,927),1267=>array(-34,-222,539,800),1268=>array(63,0,713,920),1269=>array(63,0,498,766),1270=>array(-0,-157,636,729),1271=>array(65,-208,443,534),1272=>array(-14,0,900,920),1273=>array(62,-14,670,766),1296=>array(84,-14,626,742),1297=>array(23,-14,475,533),1298=>array(-37,-208,771,729),1299=>array(11,-222,513,519),1300=>array(-37,-14,1109,729),1301=>array(11,-14,833,519),1306=>array(54,-160,709,742),1307=>array(81,-208,535,533),1308=>array(59,0,986,729),1309=>array(50,0,752,519),1329=>array(86,-14,753,729),1330=>array(-34,0,657,743),1331=>array(61,0,716,743),1332=>array(18,0,735,743),1333=>array(86,-14,702,729),1334=>array(44,-45,677,743),1335=>array(10,-45,708,729),1336=>array(-30,-45,659,743),1337=>array(-33,-14,893,743),1338=>array(25,-14,763,729),1339=>array(6,0,666,729),1340=>array(10,-45,574,729),1341=>array(7,-14,1007,729),1342=>array(85,-13,752,742),1343=>array(63,0,651,729),1344=>array(28,-66,604,729),1345=>array(44,-32,672,743),1346=>array(29,-45,691,743),1347=>array(13,0,695,739),1348=>array(98,-14,864,729),1349=>array(31,-14,623,742),1350=>array(37,-14,699,774),1351=>array(62,-14,671,729),1352=>array(-34,0,632,743),1353=>array(97,-45,658,743),1354=>array(9,0,700,743),1355=>array(38,-45,671,743),1356=>array(-34,0,769,743),1357=>array(86,-14,753,729),1358=>array(30,-45,693,729),1359=>array(25,-14,603,742),1360=>array(-34,0,688,743),1361=>array(37,-14,627,742),1362=>array(6,0,642,729),1363=>array(58,0,706,729),1364=>array(-32,0,690,743),1365=>array(53,-14,698,742),1366=>array(31,-14,682,729),1369=>array(109,492,254,760),1370=>array(24,482,228,729),1371=>array(-16,615,224,799),1372=>array(-22,618,370,893),1373=>array(90,615,259,799),1374=>array(-12,618,339,856),1375=>array(26,618,413,760),1377=>array(62,-14,791,519),1378=>array(-28,-208,512,533),1379=>array(56,-208,615,533),1380=>array(8,-208,615,533),1381=>array(60,-14,542,760),1382=>array(56,-208,612,533),1383=>array(-42,0,483,760),1384=>array(-35,-208,527,533),1385=>array(-35,-208,744,533),1386=>array(20,-14,660,760),1387=>array(-56,-208,507,760),1388=>array(-43,-208,299,519),1389=>array(-56,-208,808,760),1390=>array(28,-14,527,770),1391=>array(82,-208,512,760),1392=>array(-37,0,490,760),1393=>array(26,-14,489,773),1394=>array(0,-208,571,533),1395=>array(38,-14,570,767),1396=>array(40,-14,646,773),1397=>array(-88,-208,253,519),1398=>array(63,-14,494,773),1399=>array(-67,-208,426,533),1400=>array(-5,0,521,533),1401=>array(-39,-208,343,544),1402=>array(79,-208,808,519),1403=>array(5,-208,498,533),1404=>array(-6,0,537,533),1405=>array(62,-14,517,519),1406=>array(58,-208,559,760),1407=>array(61,-14,775,533),1408=>array(-28,-208,535,533),1409=>array(34,-222,617,533),1410=>array(-9,0,417,519),1411=>array(58,-208,772,760),1412=>array(-42,-208,546,533),1413=>array(44,-14,503,533),1414=>array(16,-208,683,760),1415=>array(64,-14,671,760),1417=>array(65,-14,239,434),1418=>array(36,202,274,306),4256=>array(22,0,674,847),4257=>array(136,0,709,847),4258=>array(72,-58,709,848),4259=>array(43,1,784,847),4260=>array(72,0,709,847),4261=>array(72,0,856,847),4262=>array(100,0,772,847),4263=>array(57,0,963,847),4264=>array(100,0,524,847),4265=>array(106,0,601,847),4266=>array(63,0,810,847),4267=>array(25,0,788,847),4268=>array(-16,0,638,847),4269=>array(54,-37,934,847),4270=>array(100,0,826,847),4271=>array(100,0,795,847),4272=>array(74,0,880,847),4273=>array(67,0,649,847),4274=>array(31,0,633,847),4275=>array(56,-37,836,847),4276=>array(75,0,845,847),4277=>array(83,0,876,847),4278=>array(-16,0,614,847),4279=>array(132,0,709,847),4280=>array(65,0,708,847),4281=>array(-15,0,557,847),4282=>array(45,-25,769,847),4283=>array(12,0,769,847),4284=>array(-16,1,672,847),4285=>array(14,1,688,847),4286=>array(22,0,709,847),4287=>array(-16,0,865,847),4288=>array(63,0,886,847),4289=>array(-16,0,623,847),4290=>array(57,1,720,847),4291=>array(106,0,710,847),4292=>array(72,0,803,847),4293=>array(26,0,882,848),4304=>array(25,0,436,571),4305=>array(40,0,485,829),4306=>array(-36,-225,466,542),4307=>array(32,-220,723,531),4308=>array(-44,-225,480,532),4309=>array(-43,-225,481,532),4310=>array(72,0,593,831),4311=>array(39,0,746,531),4312=>array(38,0,474,532),4313=>array(-57,-225,439,532),4314=>array(39,-220,940,537),4315=>array(38,0,578,829),4316=>array(42,0,593,840),4317=>array(42,-98,713,532),4318=>array(24,1,539,829),4319=>array(-35,-225,536,531),4320=>array(45,-0,713,822),4321=>array(77,0,490,829),4322=>array(10,-225,611,681),4323=>array(55,-225,602,532),4324=>array(55,-225,712,532),4325=>array(-27,-225,612,831),4326=>array(28,-220,752,532),4327=>array(-53,-225,522,531),4328=>array(49,0,586,830),4329=>array(-4,-5,497,831),4330=>array(22,-225,579,531),4331=>array(36,0,575,829),4332=>array(18,-229,610,830),4333=>array(-33,-225,530,829),4334=>array(77,0,523,830),4335=>array(-78,-225,626,532),4336=>array(25,0,568,829),4337=>array(32,0,594,830),4338=>array(-40,-91,485,532),4339=>array(-27,-225,537,585),4340=>array(-26,-225,530,831),4341=>array(23,0,612,829),4342=>array(34,-225,770,672),4343=>array(-22,-225,471,542),4344=>array(-17,-225,484,532),4345=>array(33,-225,532,537),4346=>array(43,-69,494,532),4347=>array(-7,0,360,486),4348=>array(93,341,434,845),7424=>array(-48,0,470,519),7425=>array(-64,0,686,519),7426=>array(40,-14,816,533),7427=>array(-13,0,504,519),7428=>array(44,-14,487,533),7429=>array(-13,0,489,519),7430=>array(-13,0,489,519),7431=>array(-20,0,487,519),7432=>array(29,-18,440,533),7433=>array(57,-214,254,522),7434=>array(-29,-14,454,519),7435=>array(-15,0,571,519),7436=>array(-9,0,453,519),7437=>array(-13,0,713,519),7438=>array(57,-14,599,519),7439=>array(38,-14,503,533),7440=>array(17,-14,459,533),7441=>array(44,9,537,511),7442=>array(41,27,534,492),7443=>array(44,-0,537,523),7444=>array(40,-14,852,533),7445=>array(2,-14,429,533),7446=>array(90,260,542,533),7447=>array(90,-14,542,259),7448=>array(7,0,486,519),7449=>array(-35,0,549,519),7450=>array(47,0,548,519),7451=>array(57,0,509,519),7452=>array(40,-14,571,519),7453=>array(7,-29,576,551),7454=>array(46,-29,809,551),7455=>array(-19,-205,604,680),7456=>array(34,0,551,519),7457=>array(51,0,804,519),7458=>array(-9,0,479,519),7459=>array(5,-14,479,519),7460=>array(4,-14,469,742),7461=>array(-13,-14,626,533),7462=>array(-15,0,478,519),7463=>array(-48,0,470,519),7464=>array(-9,0,604,519),7465=>array(7,0,486,519),7466=>array(69,0,656,520),7467=>array(-26,-14,586,519),7468=>array(-44,326,381,734),7469=>array(-50,326,574,734),7470=>array(-9,326,382,734),7471=>array(-4,334,411,742),7472=>array(-9,326,422,734),7473=>array(-9,326,404,734),7474=>array(-9,326,409,734),7475=>array(31,318,430,742),7476=>array(-9,326,503,734),7477=>array(-9,326,233,734),7478=>array(-96,209,253,734),7479=>array(-9,326,451,734),7480=>array(-9,326,343,734),7481=>array(-9,326,592,734),7482=>array(-12,318,512,734),7483=>array(47,318,508,734),7484=>array(29,318,434,742),7485=>array(4,326,308,750),7486=>array(-9,326,379,734),7487=>array(-9,326,406,734),7488=>array(26,326,413,734),7489=>array(62,318,494,734),7490=>array(37,326,622,734),7491=>array(19,318,300,625),7492=>array(38,318,319,625),7493=>array(23,327,372,632),7494=>array(25,318,514,625),7495=>array(16,318,319,751),7496=>array(28,318,357,751),7497=>array(28,318,315,625),7498=>array(28,318,315,625),7499=>array(91,316,352,625),7500=>array(28,316,289,625),7501=>array(28,202,396,625),7502=>array(21,207,145,619),7503=>array(16,326,304,751),7504=>array(21,326,479,625),7505=>array(21,202,297,625),7506=>array(28,318,321,625),7507=>array(28,318,312,625),7508=>array(28,472,317,625),7509=>array(28,318,317,471),7510=>array(16,209,342,625),7511=>array(16,318,214,707),7512=>array(15,318,302,617),7513=>array(8,310,359,635),7514=>array(21,326,479,625),7515=>array(-2,326,292,617),7516=>array(-6,326,396,633),7517=>array(-13,217,295,763),7518=>array(51,217,334,625),7519=>array(17,326,311,763),7520=>array(31,217,382,626),7521=>array(-29,209,367,633),7522=>array(28,0,153,412),7523=>array(40,0,292,299),7524=>array(15,-8,302,291),7525=>array(-2,0,292,291),7526=>array(-13,-109,295,437),7527=>array(51,-109,334,298),7528=>array(-1,-117,314,299),7529=>array(31,-109,382,300),7530=>array(-29,-117,367,307),7531=>array(61,-14,837,533),7543=>array(58,-222,564,533),7544=>array(-9,326,503,734),7547=>array(-13,0,313,519),7548=>array(28,0,272,519),7549=>array(39,-208,606,533),7550=>array(-0,-14,571,519),7551=>array(-18,-14,579,519),7557=>array(-50,-222,317,760),7579=>array(16,327,359,632),7580=>array(18,318,300,625),7581=>array(18,266,300,625),7582=>array(59,318,371,751),7583=>array(61,316,323,625),7584=>array(-35,209,294,751),7585=>array(16,202,269,617),7586=>array(36,202,403,617),7587=>array(36,209,323,617),7588=>array(26,326,180,738),7589=>array(38,326,144,617),7590=>array(-12,326,193,617),7591=>array(-12,326,193,617),7592=>array(-4,202,291,738),7593=>array(34,202,206,751),7594=>array(2,202,234,751),7595=>array(60,326,350,624),7596=>array(75,202,519,625),7597=>array(46,209,505,625),7598=>array(7,202,438,625),7599=>array(70,202,419,625),7600=>array(26,318,412,624),7601=>array(26,318,320,625),7602=>array(70,209,355,751),7603=>array(11,202,279,625),7604=>array(-38,202,307,752),7605=>array(31,202,270,707),7606=>array(12,318,347,617),7607=>array(64,324,367,626),7608=>array(22,326,356,625),7609=>array(71,324,344,617),7610=>array(21,326,314,617),7611=>array(-6,312,302,631),7612=>array(3,202,374,617),7613=>array(35,274,342,617),7614=>array(41,201,366,617),7615=>array(70,320,355,758),7620=>array(-374,616,6,800),7621=>array(-421,616,-97,800),7622=>array(-353,616,-29,800),7623=>array(-456,616,-76,800),7624=>array(-411,616,-40,800),7625=>array(-446,616,-4,800),7680=>array(-69,-241,604,729),7681=>array(29,-241,476,534),7682=>array(-14,0,606,921),7683=>array(38,-14,518,920),7684=>array(-14,-191,606,729),7685=>array(38,-187,519,760),7686=>array(-14,-147,606,729),7687=>array(38,-143,518,760),7688=>array(47,-193,672,927),7689=>array(38,-193,510,800),7690=>array(-14,0,670,921),7691=>array(18,-14,575,920),7692=>array(-14,-191,670,729),7693=>array(18,-191,541,760),7694=>array(-14,-147,670,729),7695=>array(18,-147,541,760),7696=>array(-14,-193,670,729),7697=>array(18,-193,541,760),7698=>array(-14,-240,670,729),7699=>array(-1,-240,541,760),7700=>array(-14,0,642,1044),7701=>array(38,-14,492,919),7702=>array(-14,0,642,1044),7703=>array(38,-14,519,919),7704=>array(-14,-240,642,729),7705=>array(38,-240,492,533),7706=>array(-14,-213,642,729),7707=>array(35,-213,492,533),7708=>array(-14,-193,642,928),7709=>array(38,-193,497,785),7710=>array(-14,0,651,921),7711=>array(-56,-208,466,921),7712=>array(50,-14,682,927),7713=>array(32,-222,538,745),7714=>array(-14,0,799,921),7715=>array(42,0,497,920),7716=>array(-14,-191,799,729),7717=>array(43,-191,498,760),7718=>array(-14,0,799,920),7719=>array(42,0,497,920),7720=>array(-14,-193,799,729),7721=>array(42,-193,497,760),7722=>array(-14,-217,799,729),7723=>array(42,-217,497,760),7724=>array(-71,-213,370,729),7725=>array(-106,-213,243,736),7726=>array(-14,0,434,1044),7727=>array(64,0,391,886),7728=>array(-14,0,716,927),7729=>array(37,0,494,961),7730=>array(-14,-191,716,729),7731=>array(37,-191,494,760),7732=>array(-14,-147,716,729),7733=>array(37,-147,494,760),7734=>array(-14,-191,544,729),7735=>array(21,-191,251,760),7736=>array(-14,-191,544,899),7737=>array(21,-191,382,900),7738=>array(-14,-147,544,729),7739=>array(-80,-147,251,760),7740=>array(-14,-240,544,729),7741=>array(-105,-240,251,760),7742=>array(-14,0,940,927),7743=>array(63,0,791,800),7744=>array(-14,0,940,921),7745=>array(63,0,792,766),7746=>array(-14,-191,940,729),7747=>array(63,-191,792,533),7748=>array(-19,-14,813,920),7749=>array(63,0,517,766),7750=>array(-19,-191,813,729),7751=>array(63,-191,517,533),7752=>array(-19,-147,813,729),7753=>array(63,-147,517,533),7754=>array(-19,-240,813,729),7755=>array(63,-240,517,533),7756=>array(46,-14,688,1044),7757=>array(38,-14,537,881),7758=>array(46,-14,688,1050),7759=>array(38,-14,503,891),7760=>array(46,-14,688,1044),7761=>array(38,-14,503,919),7762=>array(46,-14,688,1044),7763=>array(38,-14,523,919),7764=>array(-14,0,602,931),7765=>array(39,-208,568,800),7766=>array(-14,0,602,921),7767=>array(39,-208,555,766),7768=>array(-14,0,645,921),7769=>array(63,0,474,766),7770=>array(-14,-191,645,729),7771=>array(34,-191,475,533),7772=>array(-14,-191,645,899),7773=>array(34,-191,475,745),7774=>array(-14,-147,645,729),7775=>array(-60,-147,474,533),7776=>array(26,-14,577,921),7777=>array(10,-14,431,766),7778=>array(26,-191,577,742),7779=>array(10,-191,431,533),7780=>array(26,-14,578,939),7781=>array(10,-14,492,757),7782=>array(26,-14,577,1049),7783=>array(10,-14,457,867),7784=>array(26,-191,577,921),7785=>array(10,-191,431,766),7786=>array(42,0,655,921),7787=>array(49,-14,363,920),7788=>array(42,-191,655,729),7789=>array(49,-191,363,680),7790=>array(42,-147,655,729),7791=>array(10,-147,363,680),7792=>array(42,-240,655,729),7793=>array(-16,-240,363,680),7794=>array(98,-191,783,729),7795=>array(55,-191,517,519),7796=>array(98,-213,783,729),7797=>array(31,-213,517,519),7798=>array(98,-240,783,729),7799=>array(35,-240,517,519),7800=>array(98,-14,783,1044),7801=>array(62,-14,521,881),7802=>array(98,-14,783,1032),7803=>array(62,-14,517,908),7804=>array(45,0,727,921),7805=>array(33,0,504,777),7806=>array(45,-191,727,729),7807=>array(34,-191,499,519),7808=>array(59,0,986,927),7809=>array(50,0,752,776),7810=>array(59,0,986,927),7811=>array(50,0,752,776),7812=>array(59,0,986,920),7813=>array(50,0,752,766),7814=>array(59,0,986,921),7815=>array(50,0,752,766),7816=>array(59,-191,986,729),7817=>array(50,-191,752,519),7818=>array(-59,0,670,921),7819=>array(2,0,494,766),7820=>array(-59,0,670,920),7821=>array(2,0,494,766),7822=>array(44,0,666,921),7823=>array(-33,-222,519,766),7824=>array(-23,0,638,927),7825=>array(-10,-25,479,800),7826=>array(-23,-191,638,729),7827=>array(-10,-191,479,544),7828=>array(-23,-147,638,729),7829=>array(-10,-147,479,544),7830=>array(42,-147,497,760),7831=>array(49,-14,374,920),7832=>array(50,0,752,878),7833=>array(-33,-222,519,878),7834=>array(29,-14,787,760),7835=>array(-56,-208,466,921),7836=>array(-56,-208,466,760),7837=>array(-56,-208,466,760),7838=>array(-23,-14,694,743),7839=>array(24,-14,500,765),7840=>array(-69,-191,604,729),7841=>array(29,-191,476,534),7842=>array(-69,0,604,1034),7843=>array(29,-14,476,852),7844=>array(-69,0,688,1028),7845=>array(30,-14,627,846),7846=>array(-69,0,604,1028),7847=>array(30,-14,519,847),7848=>array(-69,0,667,1086),7849=>array(30,-14,608,904),7850=>array(-69,0,604,1043),7851=>array(30,-14,516,861),7852=>array(-69,-191,604,982),7853=>array(29,-191,476,800),7854=>array(-69,0,604,1044),7855=>array(30,-14,491,877),7856=>array(-69,0,604,1044),7857=>array(30,-14,482,877),7858=>array(-69,0,604,1109),7859=>array(30,-14,482,942),7860=>array(-69,0,604,1043),7861=>array(30,-14,503,876),7862=>array(-69,-191,604,967),7863=>array(29,-191,480,785),7864=>array(-14,-191,642,729),7865=>array(38,-191,492,533),7866=>array(-14,0,642,1034),7867=>array(38,-14,492,852),7868=>array(-14,0,642,921),7869=>array(38,-14,516,777),7870=>array(-14,0,708,1028),7871=>array(38,-14,652,846),7872=>array(-14,0,642,1028),7873=>array(38,-14,545,846),7874=>array(-14,0,688,1086),7875=>array(38,-14,633,904),7876=>array(-14,0,642,1043),7877=>array(38,-14,541,861),7878=>array(-14,-191,642,927),7879=>array(38,-191,492,800),7880=>array(-14,0,392,1034),7881=>array(43,0,315,852),7882=>array(-14,-191,370,729),7883=>array(23,-191,243,736),7884=>array(46,-191,688,742),7885=>array(38,-191,503,533),7886=>array(46,-14,688,1034),7887=>array(38,-14,503,852),7888=>array(46,-14,749,1028),7889=>array(38,-14,641,846),7890=>array(46,-14,688,1028),7891=>array(38,-14,534,846),7892=>array(46,-14,729,1086),7893=>array(38,-14,622,904),7894=>array(46,-14,688,1043),7895=>array(38,-14,530,861),7896=>array(46,-191,688,982),7897=>array(38,-191,503,800),7898=>array(44,-14,774,927),7899=>array(37,-14,616,800),7900=>array(44,-14,774,927),7901=>array(37,-14,616,799),7902=>array(44,-14,774,1034),7903=>array(37,-14,616,852),7904=>array(44,-14,774,921),7905=>array(37,-14,616,777),7906=>array(44,-191,774,760),7907=>array(37,-191,616,533),7908=>array(98,-191,783,729),7909=>array(62,-191,517,519),7910=>array(98,-14,783,1034),7911=>array(62,-14,517,852),7912=>array(95,-14,958,927),7913=>array(57,-14,654,800),7914=>array(95,-14,958,927),7915=>array(57,-14,654,799),7916=>array(95,-14,958,1034),7917=>array(57,-14,654,852),7918=>array(95,-14,958,921),7919=>array(57,-14,654,777),7920=>array(95,-191,958,802),7921=>array(57,-191,654,532),7922=>array(44,0,666,927),7923=>array(-34,-222,518,776),7924=>array(44,-191,666,729),7925=>array(-33,-222,519,519),7926=>array(44,0,666,1037),7927=>array(-33,-222,519,852),7928=>array(44,0,666,921),7929=>array(-33,-222,519,777),7930=>array(-14,0,800,729),7931=>array(37,0,539,760),7936=>array(38,-12,590,829),7937=>array(38,-12,590,829),7938=>array(38,-12,590,829),7939=>array(38,-12,590,829),7940=>array(38,-12,590,829),7941=>array(38,-12,590,829),7942=>array(38,-12,590,994),7943=>array(38,-12,590,994),7944=>array(-69,0,604,829),7945=>array(-69,0,604,829),7946=>array(51,0,736,829),7947=>array(59,0,736,829),7948=>array(-59,0,615,829),7949=>array(-32,0,641,829),7950=>array(-69,0,604,994),7951=>array(-69,0,604,994),7952=>array(23,-19,449,829),7953=>array(23,-19,449,829),7954=>array(23,-19,449,829),7955=>array(23,-19,449,829),7956=>array(23,-19,480,829),7957=>array(23,-19,501,829),7960=>array(53,0,752,829),7961=>array(60,0,742,829),7962=>array(51,0,945,829),7963=>array(59,0,954,829),7964=>array(53,0,893,829),7965=>array(60,0,916,829),7968=>array(81,-208,512,829),7969=>array(81,-208,512,829),7970=>array(81,-208,512,829),7971=>array(81,-208,512,829),7972=>array(81,-208,517,829),7973=>array(81,-208,519,829),7974=>array(81,-208,527,994),7975=>array(81,-208,527,994),7976=>array(53,0,913,829),7977=>array(60,0,907,829),7978=>array(51,0,1105,829),7979=>array(59,0,1116,829),7980=>array(53,0,1058,829),7981=>array(60,0,1079,829),7982=>array(87,0,1002,994),7983=>array(87,0,1000,994),7984=>array(69,22,272,829),7985=>array(69,22,272,829),7986=>array(42,22,364,829),7987=>array(46,22,362,829),7988=>array(69,22,405,829),7989=>array(65,22,407,829),7990=>array(69,22,396,994),7991=>array(69,22,397,994),7992=>array(53,0,483,829),7993=>array(60,0,475,829),7994=>array(51,0,676,829),7995=>array(59,0,678,829),7996=>array(53,0,625,829),7997=>array(60,0,649,829),7998=>array(87,0,576,994),7999=>array(87,0,567,994),8000=>array(38,-14,503,829),8001=>array(38,-14,503,829),8002=>array(38,-14,503,829),8003=>array(38,-14,503,829),8004=>array(38,-14,525,829),8005=>array(38,-14,516,829),8008=>array(46,-14,688,829),8009=>array(60,-14,724,829),8010=>array(51,-14,958,829),8011=>array(59,-14,965,829),8012=>array(53,-14,793,829),8013=>array(60,-14,817,829),8016=>array(69,-3,503,829),8017=>array(69,-3,503,829),8018=>array(69,-3,503,829),8019=>array(69,-3,503,829),8020=>array(69,-3,505,829),8021=>array(69,-3,519,829),8022=>array(69,-3,510,994),8023=>array(69,-3,505,994),8025=>array(60,0,837,829),8027=>array(59,0,1043,829),8029=>array(60,0,1011,829),8031=>array(87,0,930,994),8032=>array(31,-3,690,829),8033=>array(31,-3,690,829),8034=>array(31,-3,690,829),8035=>array(31,-3,690,829),8036=>array(31,-3,690,829),8037=>array(31,-3,690,829),8038=>array(31,-3,690,994),8039=>array(31,-3,690,994),8040=>array(-9,0,697,829),8041=>array(27,0,734,829),8042=>array(51,0,969,829),8043=>array(59,0,974,829),8044=>array(53,0,803,829),8045=>array(60,0,829,829),8046=>array(87,0,795,994),8047=>array(87,0,824,994),8048=>array(38,-12,590,799),8049=>array(38,-12,590,800),8050=>array(23,-19,449,799),8051=>array(23,-19,465,800),8052=>array(81,-208,512,799),8053=>array(81,-208,512,800),8054=>array(69,22,272,799),8055=>array(69,22,384,800),8056=>array(38,-14,503,799),8057=>array(38,-14,514,800),8058=>array(69,-3,503,799),8059=>array(69,-3,503,800),8060=>array(31,-3,690,799),8061=>array(31,-3,690,800),8064=>array(38,-208,590,829),8065=>array(38,-208,590,829),8066=>array(38,-208,590,829),8067=>array(38,-208,590,829),8068=>array(38,-208,590,829),8069=>array(38,-208,590,829),8070=>array(38,-208,590,994),8071=>array(38,-208,590,994),8072=>array(-69,-208,604,829),8073=>array(-69,-208,604,829),8074=>array(51,-208,736,829),8075=>array(59,-208,736,829),8076=>array(-59,-208,615,829),8077=>array(-32,-208,641,829),8078=>array(-69,-208,604,994),8079=>array(-69,-208,604,994),8080=>array(75,-208,512,829),8081=>array(75,-208,512,829),8082=>array(75,-208,512,829),8083=>array(75,-208,512,829),8084=>array(75,-208,517,829),8085=>array(75,-208,519,829),8086=>array(75,-208,527,994),8087=>array(75,-208,527,994),8088=>array(53,-208,913,829),8089=>array(60,-208,907,829),8090=>array(51,-208,1105,829),8091=>array(59,-208,1116,829),8092=>array(53,-208,1058,829),8093=>array(60,-208,1079,829),8094=>array(87,-208,1002,994),8095=>array(87,-208,1000,994),8096=>array(31,-208,690,829),8097=>array(31,-208,690,829),8098=>array(31,-208,690,829),8099=>array(31,-208,690,829),8100=>array(31,-208,690,829),8101=>array(31,-208,690,829),8102=>array(31,-208,690,994),8103=>array(31,-208,690,994),8104=>array(-9,-208,697,829),8105=>array(27,-208,734,829),8106=>array(51,-208,969,829),8107=>array(59,-208,974,829),8108=>array(53,-208,803,829),8109=>array(60,-208,829,829),8110=>array(87,-208,795,994),8111=>array(87,-208,824,994),8112=>array(38,-12,590,785),8113=>array(38,-12,590,745),8114=>array(38,-208,590,799),8115=>array(38,-208,590,533),8116=>array(38,-208,590,800),8118=>array(38,-12,590,777),8119=>array(38,-208,590,777),8120=>array(-69,0,604,926),8121=>array(-69,0,604,899),8122=>array(-69,0,604,799),8123=>array(-69,0,604,800),8124=>array(-69,-208,604,729),8125=>array(216,606,345,829),8126=>array(194,-208,298,-60),8127=>array(216,606,345,829),8128=>array(161,639,475,777),8129=>array(173,652,512,944),8130=>array(75,-208,512,799),8131=>array(75,-208,512,533),8132=>array(75,-208,512,800),8134=>array(81,-208,527,777),8135=>array(75,-208,527,777),8136=>array(90,0,805,799),8137=>array(65,0,795,800),8138=>array(90,0,971,799),8139=>array(65,0,950,800),8140=>array(-14,-208,799,729),8141=>array(109,606,431,829),8142=>array(121,606,452,829),8143=>array(161,606,475,994),8144=>array(69,22,380,785),8145=>array(69,22,358,745),8146=>array(69,22,371,996),8147=>array(69,22,442,996),8150=>array(69,22,406,777),8151=>array(69,22,443,944),8152=>array(-14,0,370,729),8153=>array(-14,0,390,899),8154=>array(90,0,544,799),8155=>array(65,0,520,800),8157=>array(114,606,431,829),8158=>array(113,606,454,829),8159=>array(161,606,475,994),8160=>array(69,-3,503,785),8161=>array(69,-3,503,745),8162=>array(69,-3,503,996),8163=>array(69,-3,562,996),8164=>array(-8,-208,501,829),8165=>array(-8,-208,501,829),8166=>array(69,-3,506,777),8167=>array(69,-3,538,944),8168=>array(44,0,666,926),8169=>array(44,0,666,899),8170=>array(90,0,901,799),8171=>array(65,0,879,800),8172=>array(60,0,707,829),8173=>array(173,652,447,996),8174=>array(173,652,523,996),8175=>array(161,615,330,799),8178=>array(31,-208,690,799),8179=>array(31,-208,690,519),8180=>array(31,-208,690,800),8182=>array(31,-3,690,730),8183=>array(31,-208,690,730),8184=>array(90,-14,815,799),8185=>array(61,-14,702,800),8186=>array(90,0,837,799),8187=>array(12,0,718,800),8188=>array(-9,-208,697,742),8189=>array(231,616,465,800),8190=>array(224,606,343,829),8208=>array(33,230,271,306),8209=>array(33,230,271,306),8210=>array(34,233,539,298),8211=>array(34,233,417,298),8212=>array(34,233,866,298),8213=>array(-6,233,906,298),8214=>array(116,-236,333,764),8215=>array(0,-236,450,-80),8216=>array(70,495,256,742),8217=>array(49,482,236,729),8218=>array(24,-136,228,111),8219=>array(86,482,205,729),8220=>array(70,495,430,742),8221=>array(49,482,410,729),8222=>array(24,-136,401,111),8223=>array(86,482,379,729),8224=>array(47,-96,462,729),8225=>array(-12,-96,462,729),8226=>array(135,227,396,516),8227=>array(135,188,431,555),8228=>array(92,-14,209,116),8229=>array(92,-14,509,116),8230=>array(92,-14,809,116),8240=>array(81,-14,1127,742),8241=>array(81,-14,1480,742),8242=>array(1,547,199,729),8243=>array(1,547,331,729),8244=>array(1,547,462,729),8245=>array(81,547,215,729),8246=>array(81,547,347,729),8247=>array(81,547,479,729),8248=>array(4,-236,300,-30),8249=>array(66,69,315,517),8250=>array(45,69,294,517),8252=>array(7,-14,477,729),8253=>array(97,-14,472,742),8254=>array(0,716,450,755),8258=>array(14,-28,886,814),8260=>array(-231,-14,381,742),8261=>array(-0,-132,360,760),8262=>array(-9,-132,352,760),8263=>array(66,-14,880,742),8264=>array(97,-14,681,742),8265=>array(7,-14,649,742),8267=>array(38,-96,540,729),8268=>array(95,220,355,509),8269=>array(95,220,355,509),8270=>array(14,-28,436,427),8271=>array(97,-136,247,434),8273=>array(14,-6,436,929),8274=>array(-14,-93,434,729),8275=>array(44,233,856,394),8279=>array(1,547,594,729),8304=>array(21,319,327,742),8305=>array(28,326,153,738),8308=>array(6,326,324,734),8309=>array(13,319,349,727),8310=>array(15,319,343,742),8311=>array(38,326,349,734),8312=>array(13,319,346,742),8313=>array(7,319,335,742),8314=>array(60,326,415,677),8315=>array(60,479,415,524),8316=>array(60,424,415,580),8317=>array(44,239,231,751),8318=>array(-10,239,176,751),8319=>array(40,326,326,625),8320=>array(21,-7,327,416),8321=>array(42,0,263,408),8322=>array(3,0,317,416),8323=>array(11,-7,317,416),8324=>array(6,0,324,408),8325=>array(13,-7,349,401),8326=>array(15,-7,343,416),8327=>array(38,0,349,408),8328=>array(13,-7,346,416),8329=>array(7,-7,335,416),8330=>array(60,0,415,351),8331=>array(60,153,415,198),8332=>array(60,98,415,253),8333=>array(44,-87,231,425),8334=>array(-10,-87,176,425),8336=>array(19,-8,300,299),8337=>array(28,-8,315,299),8338=>array(28,-8,321,299),8339=>array(1,0,312,291),8340=>array(28,-8,315,299),8341=>array(31,0,312,425),8342=>array(16,0,304,425),8343=>array(33,0,161,425),8344=>array(21,0,479,299),8345=>array(40,0,326,299),8346=>array(16,-117,342,298),8347=>array(1,-8,268,299),8348=>array(16,-8,214,381),8358=>array(-10,-14,606,729),8364=>array(-21,-14,544,742),8367=>array(-23,-193,970,723),8369=>array(-14,0,646,729),8372=>array(23,-14,688,742),8373=>array(77,-147,536,760),8376=>array(38,0,655,729),8377=>array(46,0,594,729),8451=>array(85,-14,990,742),8457=>array(85,0,969,742),8462=>array(43,0,498,760),8463=>array(43,0,497,760),8470=>array(-32,-14,801,729),8482=>array(106,447,744,729),8486=>array(-9,0,697,742),8487=>array(50,-13,756,729),8490=>array(-14,0,716,729),8491=>array(-87,0,587,928),8498=>array(-26,0,639,729),8513=>array(42,-14,655,742),8514=>array(53,0,476,729),8515=>array(3,0,539,729),8516=>array(-59,0,493,729),8523=>array(57,-14,773,742),8526=>array(-24,0,482,519),8528=>array(42,-14,860,742),8529=>array(42,-14,846,742),8530=>array(42,-14,1199,742),8531=>array(42,-14,829,742),8532=>array(3,-14,829,742),8533=>array(42,-14,860,742),8534=>array(3,-14,860,742),8535=>array(11,-14,860,742),8536=>array(6,-14,860,742),8537=>array(42,-14,854,742),8538=>array(13,-14,854,742),8539=>array(42,-14,857,742),8540=>array(11,-14,857,742),8541=>array(13,-14,857,742),8542=>array(38,-14,857,742),8543=>array(42,-14,742,742),8544=>array(-14,0,370,729),8545=>array(-14,0,545,729),8546=>array(-14,0,721,729),8547=>array(-14,0,947,729),8548=>array(45,0,727,729),8549=>array(45,0,897,729),8550=>array(45,0,1073,729),8551=>array(45,0,1249,729),8552=>array(-14,0,868,729),8553=>array(-59,0,670,729),8554=>array(-59,0,853,729),8555=>array(-59,0,1029,729),8556=>array(-14,0,544,729),8557=>array(47,-14,672,742),8558=>array(-14,0,670,729),8559=>array(-14,0,940,729),8560=>array(45,0,243,736),8561=>array(45,0,531,736),8562=>array(45,0,819,736),8563=>array(45,0,787,736),8564=>array(34,0,499,519),8565=>array(34,0,751,736),8566=>array(34,0,1040,736),8567=>array(34,0,1327,736),8568=>array(45,0,783,736),8569=>array(2,0,495,519),8570=>array(2,0,750,736),8571=>array(2,0,1039,736),8572=>array(37,0,251,760),8573=>array(38,-14,487,533),8574=>array(18,-14,541,760),8575=>array(63,0,792,533),8576=>array(41,0,1042,729),8577=>array(-14,0,678,729),8578=>array(41,0,1042,729),8579=>array(21,-14,644,742),8580=>array(26,-14,470,533),8581=>array(63,-208,689,742),8585=>array(21,-14,829,742),8592=>array(33,119,703,527),8593=>array(193,0,561,744),8594=>array(51,119,721,527),8595=>array(193,-20,561,724),8596=>array(33,119,721,527),8597=>array(193,-20,561,744),8598=>array(132,40,633,595),8599=>array(121,39,622,595),8600=>array(121,52,622,607),8601=>array(132,52,633,607),8602=>array(33,116,703,531),8603=>array(51,116,721,531),8604=>array(50,159,720,453),8605=>array(34,159,704,453),8606=>array(33,119,703,527),8607=>array(193,0,561,744),8608=>array(51,119,721,527),8609=>array(193,-20,561,724),8610=>array(33,119,706,527),8611=>array(48,119,721,527),8612=>array(33,119,703,527),8613=>array(193,0,561,744),8614=>array(51,119,721,527),8615=>array(193,-20,561,724),8616=>array(193,0,561,744),8617=>array(33,119,703,548),8618=>array(51,119,721,548),8619=>array(33,119,703,548),8620=>array(51,119,721,548),8621=>array(33,119,721,527),8622=>array(33,116,721,531),8623=>array(154,-13,620,730),8624=>array(209,0,534,744),8625=>array(220,0,545,744),8626=>array(209,-20,534,724),8627=>array(220,-20,545,724),8628=>array(117,102,655,609),8629=>array(143,53,600,650),8630=>array(40,145,692,540),8631=>array(62,145,715,540),8632=>array(119,40,635,717),8633=>array(51,-52,703,698),8634=>array(83,71,679,604),8635=>array(75,71,671,604),8636=>array(31,284,703,527),8637=>array(31,119,703,363),8638=>array(341,0,561,747),8639=>array(193,0,413,747),8640=>array(51,284,724,527),8641=>array(51,119,724,363),8642=>array(341,-23,561,724),8643=>array(193,-23,413,724),8644=>array(33,-52,721,698),8645=>array(40,-20,715,744),8646=>array(33,-52,721,698),8647=>array(33,-101,703,747),8648=>array(-4,0,759,744),8649=>array(51,-101,721,747),8650=>array(-4,-20,759,724),8651=>array(31,21,724,625),8652=>array(31,21,724,625),8653=>array(33,83,703,563),8654=>array(33,83,721,563),8655=>array(51,83,721,563),8656=>array(33,119,703,527),8657=>array(193,0,561,744),8658=>array(51,119,721,527),8659=>array(193,-20,561,724),8660=>array(33,119,721,527),8661=>array(193,-20,561,744),8662=>array(132,-21,687,595),8663=>array(67,-21,622,595),8664=>array(67,52,622,667),8665=>array(132,52,687,667),8666=>array(33,70,703,576),8667=>array(51,70,721,576),8668=>array(33,119,703,527),8669=>array(51,119,721,527),8670=>array(193,0,561,744),8671=>array(193,-20,561,724),8672=>array(33,119,703,527),8673=>array(193,0,561,744),8674=>array(51,119,721,527),8675=>array(193,-20,561,724),8676=>array(51,119,703,527),8677=>array(51,119,703,527),8678=>array(33,119,703,527),8679=>array(193,0,561,744),8680=>array(51,119,721,527),8681=>array(193,-20,561,724),8682=>array(193,0,561,744),8683=>array(172,0,582,744),8684=>array(172,0,582,744),8685=>array(172,0,582,744),8686=>array(193,0,561,744),8687=>array(172,0,582,744),8688=>array(51,96,721,550),8689=>array(73,0,690,689),8690=>array(64,0,681,689),8691=>array(193,-20,561,744),8692=>array(51,119,721,527),8693=>array(40,-20,715,744),8694=>array(51,-140,721,786),8695=>array(33,119,703,527),8696=>array(51,119,721,527),8697=>array(33,119,721,527),8698=>array(33,119,703,527),8699=>array(51,119,721,527),8700=>array(33,119,721,527),8701=>array(33,119,703,527),8702=>array(51,119,721,527),8703=>array(33,119,721,527),8704=>array(4,0,540,729),8706=>array(45,-12,422,647),8707=>array(54,0,418,729),8708=>array(54,-116,418,845),8710=>array(22,0,601,729),8711=>array(22,0,601,729),8712=>array(95,0,571,627),8713=>array(95,-132,571,759),8715=>array(95,0,571,627),8716=>array(95,-132,571,759),8719=>array(23,-192,692,719),8720=>array(23,-192,692,719),8721=>array(7,-192,631,719),8722=>array(95,274,659,353),8723=>array(95,0,659,627),8724=>array(95,0,659,659),8725=>array(-72,-93,375,729),8727=>array(95,85,517,541),8728=>array(95,175,346,454),8729=>array(95,175,346,454),8730=>array(26,-20,574,811),8731=>array(26,-20,574,938),8732=>array(26,-20,574,929),8733=>array(97,108,512,491),8734=>array(97,108,654,491),8735=>array(124,99,630,661),8736=>array(124,99,630,661),8739=>array(95,-98,167,827),8740=>array(78,-98,353,827),8741=>array(95,-98,321,827),8742=>array(78,-98,493,827),8743=>array(116,0,543,584),8744=>array(116,0,543,584),8745=>array(95,0,659,627),8746=>array(95,-12,659,615),8747=>array(21,-181,448,757),8748=>array(21,-181,745,757),8749=>array(21,-181,1042,757),8760=>array(95,274,659,559),8761=>array(95,68,659,559),8762=>array(95,68,659,559),8763=>array(95,68,659,559),8764=>array(95,233,659,394),8765=>array(95,233,659,394),8770=>array(95,138,659,452),8771=>array(95,175,659,489),8776=>array(95,138,659,489),8784=>array(95,175,659,658),8785=>array(95,-31,659,658),8786=>array(95,-31,659,658),8787=>array(95,-31,659,658),8788=>array(95,149,835,478),8789=>array(95,149,835,478),8800=>array(95,19,659,608),8801=>array(95,93,659,534),8804=>array(95,0,659,582),8805=>array(95,0,659,582),8834=>array(95,0,659,627),8835=>array(95,0,659,627),8836=>array(95,-132,659,759),8837=>array(95,-132,659,759),8838=>array(95,-73,659,700),8839=>array(95,-73,659,700),8844=>array(95,-12,659,615),8845=>array(95,-12,659,615),8846=>array(95,-12,659,615),8847=>array(95,0,667,627),8848=>array(95,0,667,627),8849=>array(95,-73,667,700),8850=>array(95,-73,667,700),8851=>array(95,0,659,635),8852=>array(95,0,659,635),8853=>array(95,0,659,627),8854=>array(95,0,659,627),8855=>array(95,0,659,627),8856=>array(95,0,659,627),8857=>array(95,0,659,627),8858=>array(95,0,659,627),8859=>array(95,0,659,627),8860=>array(95,0,659,627),8861=>array(95,0,659,627),8862=>array(95,0,659,627),8863=>array(95,0,659,627),8864=>array(95,0,659,627),8865=>array(95,0,659,627),8866=>array(95,0,679,729),8867=>array(95,0,679,729),8868=>array(95,0,751,688),8869=>array(95,0,751,688),8870=>array(95,0,415,729),8871=>array(95,0,415,729),8872=>array(95,0,679,729),8873=>array(95,0,679,729),8874=>array(95,0,679,729),8875=>array(95,0,833,729),8876=>array(95,-115,679,844),8877=>array(95,-115,679,844),8878=>array(95,-115,679,844),8879=>array(95,-115,833,844),8901=>array(95,282,213,412),8962=>array(64,0,624,596),8968=>array(-1,-132,360,760),8969=>array(112,-132,352,760),8970=>array(-1,-132,240,760),8971=>array(-9,-132,352,760),8976=>array(95,140,659,421),8977=>array(2,126,459,634),8984=>array(108,0,792,759),8985=>array(95,140,659,421),8992=>array(189,-250,448,928),8993=>array(18,-237,277,942),8997=>array(76,0,824,723),9000=>array(53,0,1247,729),9085=>array(4,-228,823,101),9115=>array(77,-252,373,946),9116=>array(77,-252,163,942),9117=>array(77,-240,373,942),9118=>array(77,-252,373,946),9119=>array(287,-252,373,942),9120=>array(77,-240,373,942),9121=>array(77,-252,373,928),9122=>array(77,-252,163,942),9123=>array(77,-240,373,942),9124=>array(77,-252,373,928),9125=>array(287,-252,373,935),9126=>array(77,-240,373,935),9127=>array(296,-261,602,928),9128=>array(74,-252,378,940),9129=>array(296,-240,602,940),9130=>array(296,-256,378,943),9131=>array(74,-261,378,928),9132=>array(296,-252,602,940),9133=>array(74,-240,378,940),9134=>array(189,-250,277,942),9167=>array(82,0,769,596),9251=>array(23,-228,640,101),9472=>array(-9,242,551,326),9473=>array(-9,200,551,368),9474=>array(235,-302,306,973),9475=>array(200,-302,341,973),9476=>array(-9,242,551,326),9477=>array(-9,200,551,368),9478=>array(235,-302,306,973),9479=>array(200,-302,341,973),9480=>array(-9,242,551,326),9481=>array(-9,200,551,368),9482=>array(235,-302,306,973),9483=>array(200,-302,341,973),9484=>array(235,-302,551,326),9485=>array(235,-302,551,368),9486=>array(200,-302,551,326),9487=>array(200,-302,551,368),9488=>array(-9,-302,306,326),9489=>array(-9,-302,306,368),9490=>array(-9,-302,341,326),9491=>array(-9,-302,341,368),9492=>array(235,242,551,973),9493=>array(235,200,551,973),9494=>array(200,242,551,973),9495=>array(200,200,551,973),9496=>array(-9,242,306,973),9497=>array(-9,200,306,973),9498=>array(-9,242,341,973),9499=>array(-9,200,341,973),9500=>array(235,-302,551,973),9501=>array(235,-302,551,973),9502=>array(200,-302,551,973),9503=>array(200,-302,551,973),9504=>array(200,-302,551,973),9505=>array(200,-302,551,973),9506=>array(200,-302,551,973),9507=>array(200,-302,551,973),9508=>array(-9,-302,306,973),9509=>array(-9,-302,306,973),9510=>array(-9,-302,341,973),9511=>array(-9,-302,341,973),9512=>array(-9,-302,341,973),9513=>array(-9,-302,341,973),9514=>array(-9,-302,341,973),9515=>array(-9,-302,341,973),9516=>array(-9,-302,551,326),9517=>array(-9,-302,551,368),9518=>array(-9,-302,551,368),9519=>array(-9,-302,551,368),9520=>array(-9,-302,551,326),9521=>array(-9,-302,551,368),9522=>array(-9,-302,551,368),9523=>array(-9,-302,551,368),9524=>array(-9,242,551,973),9525=>array(-9,200,551,973),9526=>array(-9,200,551,973),9527=>array(-9,200,551,973),9528=>array(-9,242,551,973),9529=>array(-9,200,551,973),9530=>array(-9,200,551,973),9531=>array(-9,200,551,973),9532=>array(-9,-302,551,973),9533=>array(-9,-302,551,973),9534=>array(-9,-302,551,973),9535=>array(-9,-302,551,973),9536=>array(-9,-302,551,973),9537=>array(-9,-302,551,973),9538=>array(-9,-302,551,973),9539=>array(-9,-302,551,973),9540=>array(-9,-302,551,973),9541=>array(-9,-302,551,973),9542=>array(-9,-302,551,973),9543=>array(-9,-302,551,973),9544=>array(-9,-302,551,973),9545=>array(-9,-302,551,973),9546=>array(-9,-302,551,973),9547=>array(-9,-302,551,973),9548=>array(-9,242,551,326),9549=>array(-9,200,551,368),9550=>array(235,-302,306,973),9551=>array(200,-302,341,973),9552=>array(-9,158,551,410),9553=>array(165,-302,376,973),9554=>array(235,-302,551,410),9555=>array(165,-302,551,326),9556=>array(165,-302,551,410),9557=>array(-9,-302,306,410),9558=>array(-9,-302,376,326),9559=>array(-9,-302,376,410),9560=>array(235,158,551,973),9561=>array(165,242,551,973),9562=>array(165,158,551,973),9563=>array(-9,158,306,973),9564=>array(-9,242,376,973),9565=>array(-9,158,376,973),9566=>array(235,-302,551,973),9567=>array(165,-302,551,973),9568=>array(165,-302,551,973),9569=>array(-9,-302,306,973),9570=>array(-9,-302,376,973),9571=>array(-9,-302,376,973),9572=>array(-9,-302,551,410),9573=>array(-9,-302,551,326),9574=>array(-9,-302,551,410),9575=>array(-9,158,551,973),9576=>array(-9,242,551,973),9577=>array(-9,158,551,973),9578=>array(-9,-302,551,973),9579=>array(-9,-302,551,973),9580=>array(-9,-302,551,973),9581=>array(235,-302,551,326),9582=>array(-9,-302,306,326),9583=>array(-9,242,306,973),9584=>array(235,242,551,973),9585=>array(-48,-302,590,973),9586=>array(-48,-302,590,973),9587=>array(-48,-302,590,973),9588=>array(-9,242,280,326),9589=>array(235,284,306,973),9590=>array(279,242,551,326),9591=>array(235,-302,306,284),9592=>array(-9,200,280,368),9593=>array(200,284,341,973),9594=>array(279,200,551,368),9595=>array(200,-302,341,284),9596=>array(-9,200,551,368),9597=>array(200,-302,341,973),9598=>array(-9,200,551,368),9599=>array(200,-302,341,973),9600=>array(-9,260,701,770),9601=>array(-9,-250,701,-123),9602=>array(-9,-250,701,-5),9603=>array(-9,-250,701,132),9604=>array(-9,-250,701,260),9605=>array(-9,-250,701,387),9606=>array(-9,-250,701,515),9607=>array(-9,-250,701,642),9608=>array(-9,-250,701,770),9609=>array(-9,-250,612,770),9610=>array(-9,-250,523,770),9611=>array(-9,-250,435,770),9612=>array(-9,-250,346,770),9613=>array(-9,-250,257,770),9614=>array(-9,-250,168,770),9615=>array(-9,-250,80,770),9616=>array(346,-250,701,770),9617=>array(-9,-250,612,770),9618=>array(-9,-250,701,770),9619=>array(-9,-250,701,770),9620=>array(-9,642,701,770),9621=>array(612,-250,701,770),9622=>array(-9,-250,347,260),9623=>array(346,-250,701,260),9624=>array(-9,260,347,770),9625=>array(-9,-250,701,770),9626=>array(-9,-250,701,770),9627=>array(-9,-250,701,770),9628=>array(-9,-250,701,770),9629=>array(346,260,701,770),9630=>array(-9,-250,701,770),9631=>array(-9,-250,701,770),9632=>array(82,-124,769,643),9633=>array(82,-124,769,643),9634=>array(82,-124,769,643),9635=>array(82,-124,769,643),9636=>array(82,-124,769,643),9637=>array(82,-124,769,643),9638=>array(82,-124,769,643),9639=>array(82,-124,769,643),9640=>array(82,-124,769,643),9641=>array(82,-124,769,643),9642=>array(82,11,528,509),9643=>array(82,11,528,509),9644=>array(82,75,769,444),9645=>array(82,75,769,444),9646=>array(82,-122,414,642),9647=>array(82,-122,414,642),9648=>array(2,75,690,444),9649=>array(2,75,690,444),9650=>array(2,-124,690,643),9651=>array(2,-124,690,643),9652=>array(2,11,449,509),9653=>array(2,11,449,509),9654=>array(2,-124,690,643),9655=>array(2,-124,690,643),9656=>array(2,11,449,509),9657=>array(2,11,449,509),9658=>array(2,11,690,509),9659=>array(2,11,690,509),9660=>array(2,-124,690,643),9661=>array(2,-124,690,643),9662=>array(2,11,449,509),9663=>array(2,11,449,509),9664=>array(2,-124,690,643),9665=>array(2,-124,690,643),9666=>array(2,11,449,509),9667=>array(2,11,449,509),9668=>array(2,11,690,509),9669=>array(2,11,690,509),9670=>array(2,-124,690,643),9671=>array(2,-124,690,643),9672=>array(2,-124,690,643),9673=>array(49,-125,736,645),9674=>array(2,-233,442,807),9675=>array(49,-125,736,645),9676=>array(50,-125,735,644),9677=>array(49,-125,736,645),9678=>array(49,-125,736,645),9679=>array(49,-123,736,641),9680=>array(49,-123,736,641),9681=>array(49,-123,736,641),9682=>array(49,-123,736,641),9683=>array(49,-123,736,641),9684=>array(49,-123,736,641),9685=>array(49,-123,736,641),9686=>array(49,-125,393,645),9687=>array(82,-125,425,645),9688=>array(82,-10,630,770),9689=>array(82,-250,792,770),9690=>array(82,260,792,770),9691=>array(82,-250,792,260),9692=>array(2,260,346,645),9693=>array(2,260,346,645),9694=>array(2,-125,346,260),9695=>array(2,-125,346,260),9696=>array(49,260,736,645),9697=>array(49,-125,736,260),9698=>array(2,-124,690,643),9699=>array(2,-124,690,643),9700=>array(2,-124,690,643),9701=>array(2,-124,690,643),9702=>array(135,227,396,516),9703=>array(82,-124,769,643),9704=>array(82,-124,769,643),9705=>array(82,-124,769,643),9706=>array(82,-124,769,643),9707=>array(82,-124,769,643),9708=>array(2,-124,690,643),9709=>array(2,-124,690,643),9710=>array(2,-124,690,643),9711=>array(49,-250,958,770),9712=>array(82,-124,769,643),9713=>array(82,-124,769,643),9714=>array(82,-124,769,643),9715=>array(82,-124,769,643),9716=>array(49,-123,736,641),9717=>array(49,-123,736,641),9718=>array(49,-123,736,641),9719=>array(49,-123,736,641),9720=>array(2,-124,690,643),9721=>array(2,-124,690,643),9722=>array(2,-124,690,643),9723=>array(82,-66,666,585),9724=>array(82,-66,666,585),9725=>array(82,-17,578,537),9726=>array(82,-17,578,537),9727=>array(2,-124,690,643),9728=>array(75,0,731,729),9784=>array(71,3,735,721),9785=>array(75,0,732,730),9786=>array(75,0,732,730),9787=>array(75,0,732,730),9788=>array(75,0,732,730),9791=>array(77,-102,476,732),9792=>array(77,-125,581,731),9793=>array(77,-125,581,731),9794=>array(77,-5,748,729),9795=>array(149,0,657,730),9796=>array(197,0,609,730),9797=>array(109,0,697,730),9798=>array(114,0,692,730),9799=>array(216,0,590,730),9824=>array(142,0,665,729),9825=>array(81,0,726,727),9826=>array(151,0,655,729),9827=>array(100,0,707,729),9828=>array(141,0,666,729),9829=>array(80,0,728,729),9830=>array(151,0,655,729),9831=>array(100,0,707,732),9833=>array(75,-5,306,729),9834=>array(75,-5,499,729),9835=>array(165,-102,642,729),9836=>array(83,-5,724,729),9837=>array(79,-3,353,731),9838=>array(75,0,246,731),9839=>array(76,0,360,731),10145=>array(51,119,721,527),10181=>array(4,-163,337,769),10182=>array(-33,-163,369,769),10208=>array(2,-233,442,807),10216=>array(80,-132,357,759),10217=>array(-6,-132,271,759),10224=>array(62,0,693,744),10225=>array(62,-20,693,724),10226=>array(44,53,697,613),10227=>array(57,53,710,613),10228=>array(51,10,896,637),10229=>array(33,119,1239,527),10230=>array(51,119,1257,527),10231=>array(33,119,1257,527),10232=>array(33,119,1239,527),10233=>array(51,119,1257,527),10234=>array(33,119,1257,527),10235=>array(33,119,1239,527),10236=>array(51,119,1257,527),10237=>array(33,119,1239,527),10238=>array(51,119,1257,527),10239=>array(51,119,1257,527),10241=>array(125,627,271,789),10242=>array(125,351,271,512),10243=>array(125,351,271,789),10244=>array(125,74,271,236),10245=>array(125,74,271,789),10246=>array(125,74,271,512),10247=>array(125,74,271,789),10248=>array(389,627,534,789),10249=>array(125,627,534,789),10250=>array(125,351,534,789),10251=>array(125,351,534,789),10252=>array(125,74,534,789),10253=>array(125,74,534,789),10254=>array(125,74,534,789),10255=>array(125,74,534,789),10256=>array(389,351,534,512),10257=>array(125,351,534,789),10258=>array(125,351,534,512),10259=>array(125,351,534,789),10260=>array(125,74,534,512),10261=>array(125,74,534,789),10262=>array(125,74,534,512),10263=>array(125,74,534,789),10264=>array(389,351,534,789),10265=>array(125,351,534,789),10266=>array(125,351,534,789),10267=>array(125,351,534,789),10268=>array(125,74,534,789),10269=>array(125,74,534,789),10270=>array(125,74,534,789),10271=>array(125,74,534,789),10272=>array(389,74,534,236),10273=>array(125,74,534,789),10274=>array(125,74,534,512),10275=>array(125,74,534,789),10276=>array(125,74,534,236),10277=>array(125,74,534,789),10278=>array(125,74,534,512),10279=>array(125,74,534,789),10280=>array(389,74,534,789),10281=>array(125,74,534,789),10282=>array(125,74,534,789),10283=>array(125,74,534,789),10284=>array(125,74,534,789),10285=>array(125,74,534,789),10286=>array(125,74,534,789),10287=>array(125,74,534,789),10288=>array(389,74,534,512),10289=>array(125,74,534,789),10290=>array(125,74,534,512),10291=>array(125,74,534,789),10292=>array(125,74,534,512),10293=>array(125,74,534,789),10294=>array(125,74,534,512),10295=>array(125,74,534,789),10296=>array(389,74,534,789),10297=>array(125,74,534,789),10298=>array(125,74,534,789),10299=>array(125,74,534,789),10300=>array(125,74,534,789),10301=>array(125,74,534,789),10302=>array(125,74,534,789),10303=>array(125,74,534,789),10304=>array(125,-203,271,-41),10305=>array(125,-203,271,789),10306=>array(125,-203,271,512),10307=>array(125,-203,271,789),10308=>array(125,-203,271,236),10309=>array(125,-203,271,789),10310=>array(125,-203,271,512),10311=>array(125,-203,271,789),10312=>array(125,-203,534,789),10313=>array(125,-203,534,789),10314=>array(125,-203,534,789),10315=>array(125,-203,534,789),10316=>array(125,-203,534,789),10317=>array(125,-203,534,789),10318=>array(125,-203,534,789),10319=>array(125,-203,534,789),10320=>array(125,-203,534,512),10321=>array(125,-203,534,789),10322=>array(125,-203,534,512),10323=>array(125,-203,534,789),10324=>array(125,-203,534,512),10325=>array(125,-203,534,789),10326=>array(125,-203,534,512),10327=>array(125,-203,534,789),10328=>array(125,-203,534,789),10329=>array(125,-203,534,789),10330=>array(125,-203,534,789),10331=>array(125,-203,534,789),10332=>array(125,-203,534,789),10333=>array(125,-203,534,789),10334=>array(125,-203,534,789),10335=>array(125,-203,534,789),10336=>array(125,-203,534,236),10337=>array(125,-203,534,789),10338=>array(125,-203,534,512),10339=>array(125,-203,534,789),10340=>array(125,-203,534,236),10341=>array(125,-203,534,789),10342=>array(125,-203,534,512),10343=>array(125,-203,534,789),10344=>array(125,-203,534,789),10345=>array(125,-203,534,789),10346=>array(125,-203,534,789),10347=>array(125,-203,534,789),10348=>array(125,-203,534,789),10349=>array(125,-203,534,789),10350=>array(125,-203,534,789),10351=>array(125,-203,534,789),10352=>array(125,-203,534,512),10353=>array(125,-203,534,789),10354=>array(125,-203,534,512),10355=>array(125,-203,534,789),10356=>array(125,-203,534,512),10357=>array(125,-203,534,789),10358=>array(125,-203,534,512),10359=>array(125,-203,534,789),10360=>array(125,-203,534,789),10361=>array(125,-203,534,789),10362=>array(125,-203,534,789),10363=>array(125,-203,534,789),10364=>array(125,-203,534,789),10365=>array(125,-203,534,789),10366=>array(125,-203,534,789),10367=>array(125,-203,534,789),10368=>array(389,-203,534,-41),10369=>array(125,-203,534,789),10370=>array(125,-203,534,512),10371=>array(125,-203,534,789),10372=>array(125,-203,534,236),10373=>array(125,-203,534,789),10374=>array(125,-203,534,512),10375=>array(125,-203,534,789),10376=>array(389,-203,534,789),10377=>array(125,-203,534,789),10378=>array(125,-203,534,789),10379=>array(125,-203,534,789),10380=>array(125,-203,534,789),10381=>array(125,-203,534,789),10382=>array(125,-203,534,789),10383=>array(125,-203,534,789),10384=>array(389,-203,534,512),10385=>array(125,-203,534,789),10386=>array(125,-203,534,512),10387=>array(125,-203,534,789),10388=>array(125,-203,534,512),10389=>array(125,-203,534,789),10390=>array(125,-203,534,512),10391=>array(125,-203,534,789),10392=>array(389,-203,534,789),10393=>array(125,-203,534,789),10394=>array(125,-203,534,789),10395=>array(125,-203,534,789),10396=>array(125,-203,534,789),10397=>array(125,-203,534,789),10398=>array(125,-203,534,789),10399=>array(125,-203,534,789),10400=>array(389,-203,534,236),10401=>array(125,-203,534,789),10402=>array(125,-203,534,512),10403=>array(125,-203,534,789),10404=>array(125,-203,534,236),10405=>array(125,-203,534,789),10406=>array(125,-203,534,512),10407=>array(125,-203,534,789),10408=>array(389,-203,534,789),10409=>array(125,-203,534,789),10410=>array(125,-203,534,789),10411=>array(125,-203,534,789),10412=>array(125,-203,534,789),10413=>array(125,-203,534,789),10414=>array(125,-203,534,789),10415=>array(125,-203,534,789),10416=>array(389,-203,534,512),10417=>array(125,-203,534,789),10418=>array(125,-203,534,512),10419=>array(125,-203,534,789),10420=>array(125,-203,534,512),10421=>array(125,-203,534,789),10422=>array(125,-203,534,512),10423=>array(125,-203,534,789),10424=>array(389,-203,534,789),10425=>array(125,-203,534,789),10426=>array(125,-203,534,789),10427=>array(125,-203,534,789),10428=>array(125,-203,534,789),10429=>array(125,-203,534,789),10430=>array(125,-203,534,789),10431=>array(125,-203,534,789),10432=>array(125,-203,534,-41),10433=>array(125,-203,534,789),10434=>array(125,-203,534,512),10435=>array(125,-203,534,789),10436=>array(125,-203,534,236),10437=>array(125,-203,534,789),10438=>array(125,-203,534,512),10439=>array(125,-203,534,789),10440=>array(125,-203,534,789),10441=>array(125,-203,534,789),10442=>array(125,-203,534,789),10443=>array(125,-203,534,789),10444=>array(125,-203,534,789),10445=>array(125,-203,534,789),10446=>array(125,-203,534,789),10447=>array(125,-203,534,789),10448=>array(125,-203,534,512),10449=>array(125,-203,534,789),10450=>array(125,-203,534,512),10451=>array(125,-203,534,789),10452=>array(125,-203,534,512),10453=>array(125,-203,534,789),10454=>array(125,-203,534,512),10455=>array(125,-203,534,789),10456=>array(125,-203,534,789),10457=>array(125,-203,534,789),10458=>array(125,-203,534,789),10459=>array(125,-203,534,789),10460=>array(125,-203,534,789),10461=>array(125,-203,534,789),10462=>array(125,-203,534,789),10463=>array(125,-203,534,789),10464=>array(125,-203,534,236),10465=>array(125,-203,534,789),10466=>array(125,-203,534,512),10467=>array(125,-203,534,789),10468=>array(125,-203,534,236),10469=>array(125,-203,534,789),10470=>array(125,-203,534,512),10471=>array(125,-203,534,789),10472=>array(125,-203,534,789),10473=>array(125,-203,534,789),10474=>array(125,-203,534,789),10475=>array(125,-203,534,789),10476=>array(125,-203,534,789),10477=>array(125,-203,534,789),10478=>array(125,-203,534,789),10479=>array(125,-203,534,789),10480=>array(125,-203,534,512),10481=>array(125,-203,534,789),10482=>array(125,-203,534,512),10483=>array(125,-203,534,789),10484=>array(125,-203,534,512),10485=>array(125,-203,534,789),10486=>array(125,-203,534,512),10487=>array(125,-203,534,789),10488=>array(125,-203,534,789),10489=>array(125,-203,534,789),10490=>array(125,-203,534,789),10491=>array(125,-203,534,789),10492=>array(125,-203,534,789),10493=>array(125,-203,534,789),10494=>array(125,-203,534,789),10495=>array(125,-203,534,789),10496=>array(51,119,721,527),10497=>array(51,119,721,527),10498=>array(33,119,703,527),10499=>array(51,119,721,527),10500=>array(33,119,721,527),10501=>array(51,119,721,527),10502=>array(33,119,703,527),10503=>array(51,119,721,527),10504=>array(193,-20,561,724),10505=>array(193,0,561,744),10506=>array(149,0,605,744),10507=>array(149,-20,605,724),10508=>array(33,119,703,527),10509=>array(51,119,721,527),10510=>array(33,119,703,527),10511=>array(51,119,721,527),10512=>array(48,119,721,527),10513=>array(48,119,721,527),10514=>array(193,0,561,724),10515=>array(193,0,561,724),10516=>array(48,119,721,527),10517=>array(48,119,721,527),10518=>array(48,119,721,527),10519=>array(48,119,721,527),10520=>array(48,119,721,527),10521=>array(51,119,706,527),10522=>array(48,119,703,527),10523=>array(51,119,706,527),10524=>array(48,119,703,527),10525=>array(33,119,703,527),10526=>array(51,119,721,527),10527=>array(33,119,703,527),10528=>array(51,119,721,527),10529=>array(132,51,623,595),10530=>array(132,51,622,595),10531=>array(132,-37,583,595),10532=>array(170,-38,622,595),10533=>array(170,52,622,684),10534=>array(132,52,584,684),10535=>array(122,40,633,595),10536=>array(122,40,622,607),10537=>array(122,52,633,607),10538=>array(132,40,633,607),10539=>array(122,40,633,607),10540=>array(122,40,633,607),10541=>array(122,40,622,607),10542=>array(122,40,622,607),10543=>array(122,40,633,607),10544=>array(122,40,633,607),10545=>array(122,40,633,595),10546=>array(122,40,633,595),10547=>array(33,119,721,527),10548=>array(132,98,636,610),10549=>array(132,90,637,602),10550=>array(143,70,604,629),10551=>array(150,70,611,629),10552=>array(263,-0,528,732),10553=>array(226,-0,491,732),10554=>array(50,197,710,491),10555=>array(45,156,706,450),10556=>array(44,82,704,491),10557=>array(50,0,710,491),10558=>array(130,30,611,609),10559=>array(144,30,624,609),10560=>array(125,53,629,778),10561=>array(125,53,629,778),10562=>array(33,-52,721,698),10563=>array(33,-52,721,698),10564=>array(33,-52,721,698),10565=>array(51,0,721,527),10566=>array(33,0,703,527),10567=>array(51,119,721,527),10568=>array(33,119,721,527),10569=>array(193,-10,561,744),10570=>array(31,119,724,527),10571=>array(31,119,724,527),10572=>array(193,-23,561,747),10573=>array(193,-23,561,747),10574=>array(31,284,724,527),10575=>array(341,-23,561,747),10576=>array(31,119,724,363),10577=>array(193,-23,413,747),10578=>array(51,131,703,527),10579=>array(51,131,703,527),10580=>array(204,0,561,724),10581=>array(204,0,561,724),10582=>array(51,119,703,515),10583=>array(51,119,703,515),10584=>array(193,0,550,724),10585=>array(193,0,550,724),10586=>array(31,131,703,527),10587=>array(51,131,724,527),10588=>array(204,0,561,747),10589=>array(204,-23,561,724),10590=>array(31,119,703,515),10591=>array(51,119,724,515),10592=>array(193,0,550,747),10593=>array(193,-23,550,724),10594=>array(31,21,703,625),10595=>array(105,0,649,747),10596=>array(51,21,724,625),10597=>array(105,-23,649,724),10598=>array(31,186,724,625),10599=>array(31,21,724,460),10600=>array(31,186,724,625),10601=>array(31,21,724,460),10602=>array(31,203,703,608),10603=>array(31,38,703,444),10604=>array(51,203,724,608),10605=>array(51,38,724,444),10606=>array(105,-23,649,747),10607=>array(105,-23,649,747),10608=>array(51,191,703,456),10609=>array(51,119,721,680),10610=>array(51,119,721,572),10611=>array(33,74,703,527),10612=>array(51,74,721,527),10613=>array(51,-71,721,527),10614=>array(33,-76,703,776),10615=>array(33,56,832,591),10616=>array(51,-76,721,776),10617=>array(51,-76,721,723),10618=>array(33,10,835,637),10619=>array(33,-76,703,723),10620=>array(152,21,614,625),10621=>array(141,21,602,625),10622=>array(105,67,649,580),10623=>array(105,59,649,571),10731=>array(2,-233,442,807),10764=>array(21,-181,1340,757),10765=>array(21,-181,448,757),10766=>array(21,-181,448,757),10799=>array(124,33,630,594),10858=>array(95,233,659,559),10859=>array(95,68,659,559),11008=>array(64,-28,621,591),11009=>array(133,-28,690,591),11010=>array(64,52,621,671),11011=>array(133,52,690,671),11012=>array(33,119,721,527),11013=>array(33,119,703,527),11014=>array(193,0,561,744),11015=>array(193,-20,561,724),11016=>array(64,-28,621,591),11017=>array(133,-28,690,591),11018=>array(64,52,621,671),11019=>array(133,52,690,671),11020=>array(33,119,721,527),11021=>array(193,-20,561,744),11022=>array(51,137,721,498),11023=>array(51,149,721,510),11024=>array(33,137,703,498),11025=>array(33,149,703,510),11026=>array(82,-124,769,643),11027=>array(82,-124,769,643),11028=>array(82,-124,769,643),11029=>array(82,-124,769,643),11030=>array(2,-124,690,643),11031=>array(2,-124,690,643),11032=>array(2,-124,690,643),11033=>array(2,-124,690,643),11034=>array(82,-124,769,643),11360=>array(-14,0,544,729),11361=>array(-2,0,291,760),11363=>array(-14,0,602,729),11364=>array(91,-208,663,729),11367=>array(-0,-157,813,729),11368=>array(43,-208,569,760),11369=>array(-0,-157,729,729),11370=>array(37,-208,513,760),11371=>array(-10,-157,652,729),11372=>array(-9,-208,479,544),11373=>array(40,-14,722,742),11374=>array(4,-208,958,729),11375=>array(49,0,723,729),11376=>array(-7,-14,676,742),11377=>array(32,0,640,530),11378=>array(59,0,1075,729),11379=>array(49,0,889,530),11381=>array(-14,0,643,729),11382=>array(58,0,440,519),11383=>array(32,-15,592,521),11385=>array(-33,-14,391,760),11386=>array(44,-14,497,533),11387=>array(6,0,518,519),11388=>array(-24,-124,233,413),11389=>array(25,326,454,734),11390=>array(43,-208,593,742),11391=>array(-5,-208,657,729),11520=>array(101,-54,708,512),11521=>array(42,-221,583,512),11522=>array(-3,-221,582,512),11523=>array(106,-1,627,760),11524=>array(49,-221,589,512),11525=>array(53,-220,878,512),11526=>array(123,0,692,760),11527=>array(53,0,876,511),11528=>array(104,0,567,512),11529=>array(53,-220,593,729),11530=>array(47,0,873,512),11531=>array(110,-1,611,760),11532=>array(53,0,593,760),11533=>array(52,-1,878,512),11534=>array(53,0,593,512),11535=>array(76,-221,822,760),11536=>array(53,0,877,760),11537=>array(53,0,593,760),11538=>array(42,-220,569,511),11539=>array(53,-224,891,636),11540=>array(97,-220,804,553),11541=>array(71,-221,778,760),11542=>array(53,0,592,512),11543=>array(53,-220,593,512),11544=>array(53,-221,593,512),11545=>array(85,-220,597,760),11546=>array(89,-220,631,512),11547=>array(96,0,612,760),11548=>array(104,-220,896,512),11549=>array(42,-220,625,512),11550=>array(81,-220,621,512),11551=>array(36,-221,779,515),11552=>array(57,0,882,512),11553=>array(61,-220,581,760),11554=>array(80,-2,554,578),11555=>array(53,-220,625,760),11556=>array(53,-220,686,512),11557=>array(109,-2,805,760),11800=>array(28,-13,403,743),11807=>array(95,68,659,394),11810=>array(77,314,360,760),11811=>array(138,314,352,760),11812=>array(-1,-132,213,314),11813=>array(-9,-132,274,314),11822=>array(93,-14,497,742),42564=>array(46,-14,583,742),42565=>array(30,-14,437,533),42566=>array(99,0,370,729),42567=>array(68,0,236,519),42576=>array(66,0,1008,729),42577=>array(35,-14,782,534),42580=>array(59,-14,1088,742),42581=>array(41,-14,725,533),42582=>array(-14,0,980,729),42583=>array(63,-14,728,533),42760=>array(141,0,409,668),42761=>array(114,0,409,668),42762=>array(88,0,409,668),42763=>array(62,0,409,668),42764=>array(35,0,409,668),42765=>array(35,0,409,668),42766=>array(35,0,382,668),42767=>array(35,0,356,668),42768=>array(35,0,330,668),42769=>array(35,0,303,668),42770=>array(35,0,409,668),42771=>array(35,0,382,668),42772=>array(35,0,356,668),42773=>array(35,0,330,668),42774=>array(35,0,303,668),42779=>array(160,326,392,743),42780=>array(125,315,357,731),42781=>array(139,318,278,734),42782=>array(135,326,274,742),42783=>array(78,0,217,416),42790=>array(4,-208,817,729),42791=>array(63,-222,493,760),42792=>array(62,-224,737,729),42793=>array(67,-224,662,680),42794=>array(7,-14,528,742),42795=>array(15,-14,479,742),42796=>array(1,-14,455,729),42797=>array(1,-222,445,519),42798=>array(9,-92,535,729),42799=>array(3,-242,512,519),42800=>array(-20,0,487,519),42801=>array(10,-14,431,533),42802=>array(-69,0,1029,729),42803=>array(30,-14,789,533),42804=>array(-69,-14,1054,742),42805=>array(30,-14,817,533),42806=>array(-78,-14,1059,729),42807=>array(30,-14,777,533),42808=>array(-69,0,949,729),42809=>array(30,-14,718,533),42810=>array(-69,0,949,729),42811=>array(26,-14,714,533),42812=>array(-51,-208,962,729),42813=>array(30,-222,693,533),42814=>array(21,-14,644,742),42815=>array(26,-14,470,533),42816=>array(-14,0,716,729),42817=>array(37,0,494,760),42822=>array(96,0,655,729),42823=>array(83,0,307,760),42826=>array(-9,-14,849,742),42827=>array(-9,-14,649,533),42830=>array(47,-14,1225,742),42831=>array(44,-14,854,533),42856=>array(-33,-208,637,729),42857=>array(40,-208,530,519),42875=>array(43,-208,594,743),42876=>array(44,-208,493,533),42880=>array(53,0,612,729),42881=>array(37,-240,251,519),42882=>array(43,-208,676,743),42883=>array(44,-208,541,533),42884=>array(43,-208,594,743),42885=>array(44,-208,493,533),42886=>array(48,-14,708,729),42887=>array(46,-14,519,519),42891=>array(127,205,303,729),42892=>array(64,458,182,729),42893=>array(63,0,713,729),42896=>array(-6,-157,826,729),42897=>array(63,-208,589,533),42922=>array(-62,0,799,729),43002=>array(-13,0,875,519),43003=>array(73,0,639,729),43004=>array(60,0,620,729),43005=>array(-19,0,935,729),43006=>array(-32,0,387,928),43007=>array(-69,0,1142,729),62464=>array(-0,0,518,866),62465=>array(10,0,526,865),62466=>array(6,0,570,864),62467=>array(72,0,835,865),62468=>array(-4,0,590,865),62469=>array(-7,0,576,866),62470=>array(68,0,621,865),62471=>array(32,1,866,865),62472=>array(36,0,573,865),62473=>array(2,0,571,865),62474=>array(79,0,1113,865),62475=>array(13,0,609,865),62476=>array(26,0,626,867),62477=>array(41,-107,831,865),62478=>array(3,0,580,865),62479=>array(-1,0,646,866),62480=>array(22,-0,829,843),62481=>array(54,0,591,865),62482=>array(25,0,656,865),62483=>array(63,0,667,865),62484=>array(81,0,849,865),62485=>array(-5,0,642,852),62486=>array(77,0,837,865),62487=>array(-3,0,642,864),62488=>array(18,0,616,865),62489=>array(-29,0,543,865),62490=>array(19,0,623,859),62491=>array(15,0,607,865),62492=>array(22,0,659,865),62493=>array(-4,0,562,872),62494=>array(59,0,585,865),62495=>array(-22,-10,806,863),62496=>array(-2,0,593,869),62497=>array(28,0,689,866),62498=>array(-30,-40,576,865),62499=>array(0,0,646,878),62500=>array(-5,0,591,865),62501=>array(-8,0,631,865),62502=>array(63,0,849,865),62504=>array(85,-220,786,760),63172=>array(48,0,324,745),63173=>array(19,-14,526,747),63174=>array(32,-222,538,533),63175=>array(62,-14,547,691),63176=>array(62,-14,819,691),63185=>array(99,625,400,785),63188=>array(100,670,358,806),64256=>array(-56,-208,766,760),64257=>array(-56,-208,549,760),64258=>array(-56,-208,580,760),64259=>array(-56,-208,845,760),64260=>array(-56,-208,886,760),64261=>array(-56,-208,668,760),64262=>array(10,-14,823,737),65533=>array(85,-84,982,912),65535=>array(44,-177,495,705)); +$cw=array(0=>540,32=>286,33=>361,34=>414,35=>754,36=>572,37=>855,38=>801,39=>247,40=>351,41=>351,42=>450,43=>754,44=>286,45=>304,46=>286,47=>303,48=>572,49=>572,50=>572,51=>572,52=>572,53=>572,54=>572,55=>572,56=>572,57=>572,58=>303,59=>303,60=>754,61=>754,62=>754,63=>482,64=>900,65=>650,66=>661,67=>688,68=>721,69=>657,70=>624,71=>719,72=>785,73=>355,74=>360,75=>672,76=>598,77=>921,78=>787,79=>738,80=>605,81=>738,82=>677,83=>616,84=>600,85=>758,86=>650,87=>925,88=>641,89=>594,90=>625,91=>351,92=>303,93=>351,94=>754,95=>450,96=>450,97=>536,98=>576,99=>504,100=>576,101=>532,102=>333,103=>576,104=>580,105=>288,106=>279,107=>545,108=>288,109=>853,110=>580,111=>542,112=>576,113=>576,114=>430,115=>461,116=>361,117=>580,118=>508,119=>770,120=>507,121=>508,122=>474,123=>572,124=>303,125=>572,126=>754,160=>286,161=>361,162=>572,163=>572,164=>572,165=>572,166=>303,167=>450,168=>450,169=>900,170=>427,171=>550,172=>754,173=>304,174=>900,175=>450,176=>450,177=>754,178=>360,179=>360,180=>450,181=>584,182=>572,183=>286,184=>450,185=>360,186=>423,187=>550,188=>872,189=>872,190=>872,191=>482,192=>650,193=>650,194=>650,195=>650,196=>650,197=>650,198=>901,199=>688,200=>657,201=>657,202=>657,203=>657,204=>355,205=>355,206=>355,207=>355,208=>726,209=>787,210=>738,211=>738,212=>738,213=>738,214=>738,215=>754,216=>738,217=>758,218=>758,219=>758,220=>758,221=>594,222=>608,223=>601,224=>536,225=>536,226=>536,227=>536,228=>536,229=>536,230=>846,231=>504,232=>532,233=>532,234=>532,235=>532,236=>288,237=>288,238=>288,239=>288,240=>542,241=>580,242=>542,243=>542,244=>542,245=>542,246=>542,247=>754,248=>542,249=>580,250=>580,251=>580,252=>580,253=>508,254=>576,255=>508,256=>650,257=>536,258=>650,259=>536,260=>650,261=>536,262=>688,263=>504,264=>688,265=>504,266=>688,267=>504,268=>688,269=>504,270=>721,271=>576,272=>726,273=>576,274=>657,275=>532,276=>657,277=>532,278=>657,279=>532,280=>657,281=>532,282=>657,283=>532,284=>719,285=>576,286=>719,287=>576,288=>719,289=>576,290=>719,291=>576,292=>785,293=>580,294=>785,295=>580,296=>355,297=>288,298=>355,299=>288,300=>355,301=>288,302=>355,303=>288,304=>355,305=>288,306=>721,307=>479,308=>360,309=>279,310=>672,311=>545,312=>545,313=>598,314=>288,315=>598,316=>288,317=>598,318=>360,319=>604,320=>418,321=>602,322=>292,323=>787,324=>580,325=>787,326=>580,327=>787,328=>580,329=>779,330=>758,331=>580,332=>738,333=>542,334=>738,335=>542,336=>738,337=>542,338=>1023,339=>890,340=>677,341=>430,342=>677,343=>430,344=>677,345=>430,346=>616,347=>461,348=>616,349=>461,350=>616,351=>461,352=>616,353=>461,354=>600,355=>361,356=>600,357=>361,358=>600,359=>361,360=>758,361=>580,362=>758,363=>580,364=>758,365=>580,366=>758,367=>580,368=>758,369=>580,370=>758,371=>580,372=>925,373=>770,374=>594,375=>508,376=>594,377=>625,378=>474,379=>625,380=>474,381=>625,382=>474,383=>333,384=>576,385=>661,386=>661,387=>576,388=>661,389=>576,390=>688,391=>688,392=>504,393=>726,394=>721,395=>661,396=>576,397=>542,398=>657,399=>738,400=>561,401=>624,402=>333,403=>719,404=>641,405=>839,406=>355,407=>355,408=>672,409=>545,410=>288,411=>570,412=>853,413=>787,414=>580,415=>738,416=>738,417=>542,418=>936,419=>726,420=>605,421=>576,422=>677,423=>616,424=>461,425=>636,426=>292,427=>361,428=>600,429=>361,430=>600,431=>758,432=>580,433=>746,434=>684,435=>664,436=>670,437=>625,438=>474,439=>508,440=>508,441=>508,442=>508,443=>572,444=>618,445=>508,446=>482,447=>571,448=>265,449=>443,450=>413,451=>265,452=>1347,453=>1195,454=>1050,455=>958,456=>876,457=>567,458=>1148,459=>1066,460=>858,461=>650,462=>536,463=>355,464=>288,465=>738,466=>542,467=>758,468=>580,469=>758,470=>580,471=>758,472=>580,473=>758,474=>580,475=>758,476=>580,477=>532,478=>650,479=>536,480=>650,481=>536,482=>901,483=>846,484=>763,485=>576,486=>719,487=>576,488=>672,489=>545,490=>738,491=>542,492=>738,493=>542,494=>508,495=>508,496=>288,497=>1347,498=>1195,499=>1050,500=>719,501=>576,502=>1038,503=>636,504=>787,505=>580,506=>650,507=>536,508=>901,509=>846,510=>738,511=>542,512=>650,513=>536,514=>650,515=>536,516=>657,517=>532,518=>657,519=>532,520=>355,521=>288,522=>355,523=>288,524=>738,525=>542,526=>738,527=>542,528=>677,529=>430,530=>677,531=>430,532=>758,533=>580,534=>758,535=>580,536=>616,537=>461,538=>600,539=>361,540=>564,541=>469,542=>785,543=>580,544=>758,545=>732,546=>514,547=>497,548=>625,549=>474,550=>650,551=>536,552=>657,553=>532,554=>738,555=>542,556=>738,557=>542,558=>738,559=>542,560=>738,561=>542,562=>594,563=>508,564=>450,565=>748,566=>444,567=>279,568=>864,569=>864,570=>650,571=>688,572=>504,573=>598,574=>600,575=>461,576=>474,577=>525,578=>417,579=>661,580=>758,581=>650,582=>657,583=>532,584=>360,585=>283,586=>704,587=>576,588=>677,589=>430,590=>594,591=>508,592=>536,593=>607,594=>607,595=>576,596=>504,597=>504,598=>582,599=>614,600=>532,601=>532,602=>759,603=>483,604=>458,605=>695,606=>552,607=>283,608=>615,609=>576,610=>489,611=>539,612=>507,613=>580,614=>580,615=>580,616=>288,617=>353,618=>288,619=>342,620=>409,621=>326,622=>633,623=>853,624=>853,625=>853,626=>579,627=>624,628=>581,629=>542,630=>711,631=>583,632=>542,633=>451,634=>451,635=>496,636=>430,637=>430,638=>407,639=>407,640=>534,641=>534,642=>461,643=>244,644=>333,645=>438,646=>292,647=>361,648=>361,649=>580,650=>558,651=>547,652=>508,653=>770,654=>508,655=>589,656=>537,657=>504,658=>508,659=>504,660=>482,661=>482,662=>482,663=>461,664=>738,665=>506,666=>552,667=>588,668=>600,669=>329,670=>545,671=>488,672=>615,673=>482,674=>482,675=>896,676=>930,677=>898,678=>741,679=>538,680=>743,681=>804,682=>652,683=>608,684=>538,685=>398,686=>703,687=>690,688=>389,689=>387,690=>237,691=>312,692=>312,693=>387,694=>352,695=>485,696=>320,697=>250,698=>414,699=>286,700=>286,701=>286,702=>276,703=>276,704=>252,705=>252,706=>450,707=>450,708=>450,709=>450,710=>450,711=>450,712=>254,713=>450,714=>450,715=>450,716=>254,717=>450,720=>303,721=>303,722=>276,723=>276,726=>353,727=>353,728=>450,729=>450,730=>450,731=>450,732=>450,733=>450,734=>375,736=>339,737=>218,738=>303,739=>319,740=>252,741=>444,742=>444,743=>444,744=>444,745=>444,748=>450,750=>435,751=>450,752=>450,755=>450,759=>450,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>666,881=>478,882=>600,883=>498,884=>250,885=>250,886=>787,887=>600,890=>450,891=>504,892=>504,893=>504,894=>303,900=>450,901=>450,902=>650,903=>286,904=>810,905=>935,906=>505,908=>751,910=>808,911=>767,912=>353,913=>650,914=>661,915=>624,916=>650,917=>657,918=>625,919=>785,920=>738,921=>355,922=>672,923=>650,924=>921,925=>787,926=>633,927=>738,928=>785,929=>605,931=>636,932=>600,933=>594,934=>738,935=>641,936=>789,937=>746,938=>355,939=>594,940=>607,941=>483,942=>539,943=>353,944=>547,945=>607,946=>520,947=>538,948=>542,949=>483,950=>488,951=>539,952=>542,953=>353,954=>590,955=>570,956=>584,957=>547,958=>496,959=>542,960=>591,961=>529,962=>504,963=>614,964=>498,965=>547,966=>630,967=>545,968=>706,969=>734,970=>353,971=>547,972=>542,973=>547,974=>734,975=>672,976=>524,977=>643,978=>618,979=>787,980=>618,981=>613,982=>734,983=>561,984=>738,985=>542,986=>688,987=>504,988=>624,989=>417,990=>531,991=>593,992=>704,993=>519,1008=>561,1009=>529,1010=>504,1011=>279,1012=>738,1013=>504,1014=>504,1015=>608,1016=>576,1017=>688,1018=>921,1019=>637,1020=>529,1021=>688,1022=>688,1023=>688,1024=>657,1025=>657,1026=>719,1027=>596,1028=>688,1029=>616,1030=>355,1031=>355,1032=>360,1033=>976,1034=>1006,1035=>785,1036=>696,1037=>785,1038=>650,1039=>785,1040=>681,1041=>661,1042=>661,1043=>596,1044=>731,1045=>657,1046=>1011,1047=>561,1048=>785,1049=>785,1050=>696,1051=>751,1052=>921,1053=>785,1054=>738,1055=>785,1056=>605,1057=>688,1058=>600,1059=>650,1060=>747,1061=>641,1062=>785,1063=>695,1064=>1027,1065=>1027,1066=>715,1067=>885,1068=>606,1069=>688,1070=>1074,1071=>727,1072=>536,1073=>549,1074=>523,1075=>455,1076=>570,1077=>532,1078=>1023,1079=>491,1080=>580,1081=>580,1082=>537,1083=>573,1084=>746,1085=>593,1086=>542,1087=>580,1088=>576,1089=>504,1090=>853,1091=>522,1092=>704,1093=>507,1094=>628,1095=>560,1096=>853,1097=>901,1098=>600,1099=>733,1100=>490,1101=>504,1102=>792,1103=>596,1104=>532,1105=>532,1106=>561,1107=>455,1108=>504,1109=>461,1110=>288,1111=>288,1112=>279,1113=>773,1114=>790,1115=>580,1116=>537,1117=>580,1118=>522,1119=>580,1122=>686,1123=>794,1124=>1016,1125=>750,1130=>1011,1131=>828,1132=>1223,1133=>956,1136=>849,1137=>812,1138=>738,1139=>497,1140=>773,1141=>610,1142=>773,1143=>610,1164=>636,1165=>490,1168=>604,1169=>476,1170=>596,1171=>455,1172=>657,1173=>552,1174=>1011,1175=>1023,1176=>561,1177=>491,1178=>696,1179=>544,1182=>696,1183=>537,1184=>803,1185=>602,1186=>785,1187=>641,1188=>1025,1189=>771,1190=>1085,1191=>848,1194=>688,1195=>504,1196=>600,1197=>911,1198=>594,1199=>514,1200=>594,1201=>514,1202=>641,1203=>566,1204=>842,1205=>659,1206=>674,1207=>609,1210=>674,1211=>580,1216=>355,1217=>1011,1218=>1023,1219=>672,1220=>545,1223=>785,1224=>600,1227=>674,1228=>600,1231=>288,1232=>681,1233=>536,1234=>681,1235=>536,1236=>901,1237=>846,1238=>657,1239=>532,1240=>738,1241=>532,1242=>738,1243=>532,1244=>1011,1245=>1023,1246=>561,1247=>491,1248=>508,1249=>508,1250=>785,1251=>580,1252=>785,1253=>580,1254=>738,1255=>542,1256=>738,1257=>542,1258=>738,1259=>542,1260=>688,1261=>504,1262=>650,1263=>522,1264=>650,1265=>522,1266=>650,1267=>522,1268=>695,1269=>560,1270=>596,1271=>455,1272=>885,1273=>733,1296=>561,1297=>491,1298=>751,1299=>573,1300=>1079,1301=>845,1306=>738,1307=>576,1308=>925,1309=>770,1329=>729,1330=>729,1331=>725,1332=>745,1333=>725,1334=>743,1335=>685,1336=>729,1337=>871,1338=>734,1339=>695,1340=>614,1341=>987,1342=>760,1343=>723,1344=>647,1345=>729,1346=>750,1347=>748,1348=>808,1349=>687,1350=>714,1351=>678,1352=>719,1353=>717,1354=>787,1355=>747,1356=>778,1357=>719,1358=>721,1359=>658,1360=>697,1361=>674,1362=>570,1363=>760,1364=>759,1365=>751,1366=>738,1369=>276,1370=>237,1371=>207,1372=>352,1373=>328,1374=>347,1375=>450,1377=>854,1378=>556,1379=>625,1380=>625,1381=>565,1382=>619,1383=>458,1384=>572,1385=>711,1386=>604,1387=>571,1388=>274,1389=>875,1390=>553,1391=>565,1392=>572,1393=>567,1394=>572,1395=>588,1396=>580,1397=>278,1398=>572,1399=>415,1400=>584,1401=>329,1402=>846,1403=>505,1404=>591,1405=>580,1406=>567,1407=>836,1408=>580,1409=>578,1410=>435,1411=>836,1412=>572,1413=>548,1414=>728,1415=>709,1417=>306,1418=>300,4256=>659,4257=>773,4258=>753,4259=>782,4260=>668,4261=>892,4262=>833,4263=>1000,4264=>519,4265=>684,4266=>875,4267=>856,4268=>677,4269=>976,4270=>815,4271=>754,4272=>944,4273=>668,4274=>611,4275=>922,4276=>852,4277=>926,4278=>667,4279=>668,4280=>668,4281=>668,4282=>800,4283=>852,4284=>651,4285=>688,4286=>668,4287=>871,4288=>909,4289=>641,4290=>786,4291=>669,4292=>762,4293=>864,4304=>495,4305=>523,4306=>539,4307=>759,4308=>514,4309=>510,4310=>558,4311=>783,4312=>512,4313=>500,4314=>968,4315=>536,4316=>536,4317=>751,4318=>521,4319=>531,4320=>750,4321=>546,4322=>682,4323=>631,4324=>742,4325=>535,4326=>781,4327=>520,4328=>543,4329=>536,4330=>616,4331=>537,4332=>501,4333=>527,4334=>562,4335=>624,4336=>523,4337=>551,4338=>523,4339=>523,4340=>522,4341=>593,4342=>806,4343=>572,4344=>532,4345=>565,4346=>522,4347=>410,4348=>335,7424=>508,7425=>697,7426=>846,7427=>506,7428=>504,7429=>527,7430=>527,7431=>498,7432=>458,7433=>288,7434=>448,7435=>537,7436=>488,7437=>700,7438=>600,7439=>542,7440=>504,7441=>582,7442=>582,7443=>582,7444=>890,7445=>461,7446=>542,7447=>542,7448=>498,7449=>534,7450=>534,7451=>498,7452=>526,7453=>597,7454=>831,7455=>589,7456=>508,7457=>770,7458=>474,7459=>474,7460=>478,7461=>668,7462=>471,7463=>508,7464=>591,7465=>498,7466=>632,7467=>571,7468=>409,7469=>567,7470=>417,7471=>417,7472=>454,7473=>413,7474=>413,7475=>453,7476=>494,7477=>224,7478=>227,7479=>423,7480=>376,7481=>580,7482=>496,7483=>496,7484=>464,7485=>332,7486=>381,7487=>426,7488=>378,7489=>478,7490=>583,7491=>338,7492=>338,7493=>382,7494=>532,7495=>360,7496=>360,7497=>348,7498=>348,7499=>385,7500=>306,7501=>360,7502=>157,7503=>328,7504=>552,7505=>359,7506=>347,7507=>312,7508=>347,7509=>347,7510=>360,7511=>222,7512=>359,7513=>376,7514=>552,7515=>335,7516=>421,7517=>327,7518=>338,7519=>341,7520=>396,7521=>343,7522=>181,7523=>312,7524=>359,7525=>335,7526=>327,7527=>338,7528=>333,7529=>396,7530=>343,7531=>876,7543=>576,7544=>494,7547=>288,7548=>353,7549=>576,7550=>526,7551=>558,7557=>288,7579=>382,7580=>317,7581=>317,7582=>426,7583=>385,7584=>209,7585=>285,7586=>439,7587=>359,7588=>181,7589=>181,7590=>181,7591=>181,7592=>286,7593=>237,7594=>236,7595=>409,7596=>552,7597=>552,7598=>445,7599=>443,7600=>438,7601=>347,7602=>426,7603=>295,7604=>269,7605=>301,7606=>359,7607=>429,7608=>331,7609=>417,7610=>320,7611=>298,7612=>376,7613=>376,7614=>406,7615=>426,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>650,7681=>536,7682=>661,7683=>576,7684=>661,7685=>576,7686=>661,7687=>576,7688=>688,7689=>504,7690=>721,7691=>576,7692=>721,7693=>576,7694=>721,7695=>576,7696=>721,7697=>576,7698=>721,7699=>576,7700=>657,7701=>532,7702=>657,7703=>532,7704=>657,7705=>532,7706=>657,7707=>532,7708=>657,7709=>532,7710=>624,7711=>333,7712=>719,7713=>576,7714=>785,7715=>580,7716=>785,7717=>580,7718=>785,7719=>580,7720=>785,7721=>580,7722=>785,7723=>580,7724=>355,7725=>288,7726=>355,7727=>288,7728=>672,7729=>545,7730=>672,7731=>545,7732=>672,7733=>545,7734=>598,7735=>288,7736=>598,7737=>288,7738=>598,7739=>288,7740=>598,7741=>288,7742=>921,7743=>853,7744=>921,7745=>853,7746=>921,7747=>857,7748=>787,7749=>580,7750=>787,7751=>580,7752=>787,7753=>580,7754=>787,7755=>580,7756=>738,7757=>542,7758=>738,7759=>542,7760=>738,7761=>542,7762=>738,7763=>542,7764=>605,7765=>576,7766=>605,7767=>576,7768=>677,7769=>430,7770=>677,7771=>430,7772=>677,7773=>430,7774=>677,7775=>430,7776=>616,7777=>461,7778=>616,7779=>461,7780=>616,7781=>461,7782=>616,7783=>469,7784=>616,7785=>461,7786=>600,7787=>361,7788=>600,7789=>361,7790=>600,7791=>361,7792=>600,7793=>361,7794=>758,7795=>580,7796=>758,7797=>580,7798=>758,7799=>580,7800=>758,7801=>580,7802=>758,7803=>580,7804=>650,7805=>508,7806=>650,7807=>508,7808=>925,7809=>770,7810=>925,7811=>770,7812=>925,7813=>770,7814=>925,7815=>770,7816=>925,7817=>770,7818=>641,7819=>507,7820=>641,7821=>507,7822=>594,7823=>508,7824=>625,7825=>474,7826=>625,7827=>474,7828=>625,7829=>474,7830=>580,7831=>361,7832=>770,7833=>508,7834=>813,7835=>333,7836=>333,7837=>333,7838=>746,7839=>542,7840=>650,7841=>536,7842=>650,7843=>536,7844=>650,7845=>551,7846=>650,7847=>551,7848=>650,7849=>551,7850=>650,7851=>551,7852=>650,7853=>536,7854=>650,7855=>536,7856=>650,7857=>536,7858=>650,7859=>536,7860=>650,7861=>536,7862=>650,7863=>536,7864=>657,7865=>532,7866=>657,7867=>532,7868=>657,7869=>532,7870=>657,7871=>554,7872=>657,7873=>554,7874=>657,7875=>554,7876=>657,7877=>554,7878=>657,7879=>532,7880=>355,7881=>288,7882=>355,7883=>288,7884=>738,7885=>542,7886=>738,7887=>542,7888=>738,7889=>550,7890=>738,7891=>550,7892=>738,7893=>550,7894=>738,7895=>550,7896=>738,7897=>542,7898=>738,7899=>542,7900=>738,7901=>542,7902=>738,7903=>542,7904=>738,7905=>542,7906=>738,7907=>542,7908=>758,7909=>580,7910=>758,7911=>580,7912=>758,7913=>580,7914=>758,7915=>580,7916=>758,7917=>580,7918=>758,7919=>580,7920=>758,7921=>580,7922=>594,7923=>508,7924=>594,7925=>508,7926=>594,7927=>508,7928=>594,7929=>508,7930=>854,7931=>523,7936=>607,7937=>607,7938=>607,7939=>607,7940=>607,7941=>607,7942=>607,7943=>607,7944=>650,7945=>650,7946=>782,7947=>782,7948=>660,7949=>687,7950=>650,7951=>650,7952=>483,7953=>483,7954=>483,7955=>483,7956=>483,7957=>483,7960=>768,7961=>757,7962=>960,7963=>969,7964=>907,7965=>931,7968=>539,7969=>539,7970=>539,7971=>539,7972=>539,7973=>539,7974=>539,7975=>539,7976=>898,7977=>893,7978=>1090,7979=>1101,7980=>1043,7981=>1064,7982=>988,7983=>985,7984=>353,7985=>353,7986=>353,7987=>353,7988=>353,7989=>353,7990=>353,7991=>353,7992=>469,7993=>461,7994=>661,7995=>664,7996=>611,7997=>635,7998=>561,7999=>553,8000=>542,8001=>542,8002=>542,8003=>542,8004=>542,8005=>542,8008=>738,8009=>773,8010=>1008,8011=>1015,8012=>843,8013=>867,8016=>547,8017=>547,8018=>547,8019=>547,8020=>547,8021=>547,8022=>547,8023=>547,8025=>765,8027=>971,8029=>939,8031=>857,8032=>734,8033=>734,8034=>734,8035=>734,8036=>734,8037=>734,8038=>734,8039=>734,8040=>746,8041=>783,8042=>1018,8043=>1023,8044=>852,8045=>878,8046=>844,8047=>873,8048=>607,8049=>607,8050=>483,8051=>483,8052=>539,8053=>539,8054=>353,8055=>353,8056=>542,8057=>542,8058=>547,8059=>547,8060=>734,8061=>734,8064=>607,8065=>607,8066=>607,8067=>607,8068=>607,8069=>607,8070=>607,8071=>607,8072=>650,8073=>650,8074=>782,8075=>782,8076=>660,8077=>687,8078=>650,8079=>650,8080=>539,8081=>539,8082=>539,8083=>539,8084=>539,8085=>539,8086=>539,8087=>539,8088=>898,8089=>893,8090=>1090,8091=>1101,8092=>1043,8093=>1064,8094=>988,8095=>985,8096=>734,8097=>734,8098=>734,8099=>734,8100=>734,8101=>734,8102=>734,8103=>734,8104=>746,8105=>783,8106=>1018,8107=>1023,8108=>852,8109=>878,8110=>844,8111=>873,8112=>607,8113=>607,8114=>607,8115=>607,8116=>607,8118=>607,8119=>607,8120=>650,8121=>650,8122=>650,8123=>650,8124=>650,8125=>450,8126=>450,8127=>450,8128=>450,8129=>450,8130=>539,8131=>539,8132=>539,8134=>539,8135=>539,8136=>820,8137=>810,8138=>956,8139=>935,8140=>785,8141=>450,8142=>450,8143=>450,8144=>353,8145=>353,8146=>353,8147=>353,8150=>353,8151=>353,8152=>355,8153=>355,8154=>529,8155=>505,8157=>450,8158=>450,8159=>450,8160=>547,8161=>547,8162=>547,8163=>547,8164=>529,8165=>529,8166=>547,8167=>547,8168=>594,8169=>594,8170=>829,8171=>808,8172=>711,8173=>450,8174=>450,8175=>450,8178=>734,8179=>734,8180=>734,8182=>734,8183=>734,8184=>865,8185=>751,8186=>886,8187=>767,8188=>746,8189=>450,8190=>450,8192=>450,8193=>900,8194=>450,8195=>900,8196=>296,8197=>225,8198=>150,8199=>572,8200=>286,8201=>180,8202=>89,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>304,8209=>304,8210=>572,8211=>450,8212=>900,8213=>900,8214=>450,8215=>450,8216=>286,8217=>286,8218=>286,8219=>286,8220=>460,8221=>460,8222=>466,8223=>460,8224=>450,8225=>450,8226=>531,8227=>531,8228=>301,8229=>600,8230=>900,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>180,8240=>1208,8241=>1560,8242=>204,8243=>336,8244=>468,8245=>204,8246=>336,8247=>468,8248=>305,8249=>360,8250=>360,8252=>475,8253=>482,8254=>450,8258=>900,8260=>150,8261=>351,8262=>351,8263=>878,8264=>678,8265=>678,8267=>572,8268=>450,8269=>450,8270=>450,8271=>303,8273=>450,8274=>404,8275=>900,8279=>597,8287=>200,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>360,8305=>181,8308=>360,8309=>360,8310=>360,8311=>360,8312=>360,8313=>360,8314=>475,8315=>475,8316=>475,8317=>221,8318=>221,8319=>365,8320=>360,8321=>360,8322=>360,8323=>360,8324=>360,8325=>360,8326=>360,8327=>360,8328=>360,8329=>360,8330=>475,8331=>475,8332=>475,8333=>221,8334=>221,8336=>338,8337=>348,8338=>347,8339=>319,8340=>348,8341=>389,8342=>328,8343=>218,8344=>552,8345=>365,8346=>360,8347=>303,8348=>222,8358=>594,8364=>572,8367=>951,8369=>635,8372=>702,8373=>572,8376=>600,8377=>572,8451=>1006,8457=>942,8462=>580,8463=>580,8470=>852,8482=>900,8486=>746,8487=>746,8490=>672,8491=>650,8498=>624,8513=>697,8514=>501,8515=>501,8516=>549,8523=>801,8526=>462,8528=>872,8529=>872,8530=>1233,8531=>872,8532=>872,8533=>872,8534=>872,8535=>872,8536=>872,8537=>872,8538=>872,8539=>872,8540=>872,8541=>872,8542=>872,8543=>511,8544=>355,8545=>531,8546=>707,8547=>870,8548=>650,8549=>883,8550=>1059,8551=>1234,8552=>838,8553=>641,8554=>839,8555=>1015,8556=>598,8557=>688,8558=>721,8559=>921,8560=>288,8561=>576,8562=>863,8563=>796,8564=>508,8565=>796,8566=>1084,8567=>1372,8568=>795,8569=>507,8570=>795,8571=>1083,8572=>288,8573=>504,8574=>576,8575=>853,8576=>1085,8577=>721,8578=>1085,8579=>688,8580=>504,8581=>688,8585=>872,8592=>754,8593=>754,8594=>754,8595=>754,8596=>754,8597=>754,8598=>754,8599=>754,8600=>754,8601=>754,8602=>754,8603=>754,8604=>754,8605=>754,8606=>754,8607=>754,8608=>754,8609=>754,8610=>754,8611=>754,8612=>754,8613=>754,8614=>754,8615=>754,8616=>754,8617=>754,8618=>754,8619=>754,8620=>754,8621=>754,8622=>754,8623=>754,8624=>754,8625=>754,8626=>754,8627=>754,8628=>754,8629=>754,8630=>754,8631=>754,8632=>754,8633=>754,8634=>754,8635=>754,8636=>754,8637=>754,8638=>754,8639=>754,8640=>754,8641=>754,8642=>754,8643=>754,8644=>754,8645=>754,8646=>754,8647=>754,8648=>754,8649=>754,8650=>754,8651=>754,8652=>754,8653=>754,8654=>754,8655=>754,8656=>754,8657=>754,8658=>754,8659=>754,8660=>754,8661=>754,8662=>754,8663=>754,8664=>754,8665=>754,8666=>754,8667=>754,8668=>754,8669=>754,8670=>754,8671=>754,8672=>754,8673=>754,8674=>754,8675=>754,8676=>754,8677=>754,8678=>754,8679=>754,8680=>754,8681=>754,8682=>754,8683=>754,8684=>754,8685=>754,8686=>754,8687=>754,8688=>754,8689=>754,8690=>754,8691=>754,8692=>754,8693=>754,8694=>754,8695=>754,8696=>754,8697=>754,8698=>754,8699=>754,8700=>754,8701=>754,8702=>754,8703=>754,8704=>543,8706=>465,8707=>488,8708=>488,8710=>628,8711=>628,8712=>666,8713=>666,8715=>666,8716=>666,8719=>716,8720=>716,8721=>642,8722=>754,8723=>754,8724=>754,8725=>303,8727=>611,8728=>441,8729=>441,8730=>573,8731=>573,8732=>573,8733=>609,8734=>750,8735=>754,8736=>754,8739=>262,8740=>431,8741=>416,8742=>570,8743=>659,8744=>659,8745=>754,8746=>754,8747=>469,8748=>766,8749=>1063,8760=>754,8761=>754,8762=>754,8763=>754,8764=>754,8765=>754,8770=>754,8771=>754,8776=>754,8784=>754,8785=>754,8786=>754,8787=>754,8788=>930,8789=>930,8800=>754,8801=>754,8804=>754,8805=>754,8834=>754,8835=>754,8836=>754,8837=>754,8838=>754,8839=>754,8844=>754,8845=>754,8846=>754,8847=>761,8848=>761,8849=>761,8850=>761,8851=>754,8852=>754,8853=>754,8854=>754,8855=>754,8856=>754,8857=>754,8858=>754,8859=>754,8860=>754,8861=>754,8862=>754,8863=>754,8864=>754,8865=>754,8866=>773,8867=>773,8868=>846,8869=>846,8870=>510,8871=>510,8872=>773,8873=>773,8874=>773,8875=>927,8876=>773,8877=>773,8878=>773,8879=>927,8901=>308,8962=>687,8968=>351,8969=>351,8970=>351,8971=>351,8976=>754,8977=>461,8984=>900,8985=>754,8992=>469,8993=>469,8997=>900,9000=>1299,9085=>827,9115=>450,9116=>450,9117=>450,9118=>450,9119=>450,9120=>450,9121=>450,9122=>450,9123=>450,9124=>450,9125=>450,9126=>450,9127=>675,9128=>675,9129=>675,9130=>675,9131=>675,9132=>675,9133=>675,9134=>469,9167=>850,9251=>687,9472=>542,9473=>542,9474=>542,9475=>542,9476=>542,9477=>542,9478=>542,9479=>542,9480=>542,9481=>542,9482=>542,9483=>542,9484=>542,9485=>542,9486=>542,9487=>542,9488=>542,9489=>542,9490=>542,9491=>542,9492=>542,9493=>542,9494=>542,9495=>542,9496=>542,9497=>542,9498=>542,9499=>542,9500=>542,9501=>542,9502=>542,9503=>542,9504=>542,9505=>542,9506=>542,9507=>542,9508=>542,9509=>542,9510=>542,9511=>542,9512=>542,9513=>542,9514=>542,9515=>542,9516=>542,9517=>542,9518=>542,9519=>542,9520=>542,9521=>542,9522=>542,9523=>542,9524=>542,9525=>542,9526=>542,9527=>542,9528=>542,9529=>542,9530=>542,9531=>542,9532=>542,9533=>542,9534=>542,9535=>542,9536=>542,9537=>542,9538=>542,9539=>542,9540=>542,9541=>542,9542=>542,9543=>542,9544=>542,9545=>542,9546=>542,9547=>542,9548=>542,9549=>542,9550=>542,9551=>542,9552=>542,9553=>542,9554=>542,9555=>542,9556=>542,9557=>542,9558=>542,9559=>542,9560=>542,9561=>542,9562=>542,9563=>542,9564=>542,9565=>542,9566=>542,9567=>542,9568=>542,9569=>542,9570=>542,9571=>542,9572=>542,9573=>542,9574=>542,9575=>542,9576=>542,9577=>542,9578=>542,9579=>542,9580=>542,9581=>542,9582=>542,9583=>542,9584=>542,9585=>542,9586=>542,9587=>542,9588=>542,9589=>542,9590=>542,9591=>542,9592=>542,9593=>542,9594=>542,9595=>542,9596=>542,9597=>542,9598=>542,9599=>542,9600=>692,9601=>692,9602=>692,9603=>692,9604=>692,9605=>692,9606=>692,9607=>692,9608=>692,9609=>692,9610=>692,9611=>692,9612=>692,9613=>692,9614=>692,9615=>692,9616=>692,9617=>692,9618=>692,9619=>692,9620=>692,9621=>692,9622=>692,9623=>692,9624=>692,9625=>692,9626=>692,9627=>692,9628=>692,9629=>692,9630=>692,9631=>692,9632=>850,9633=>850,9634=>850,9635=>850,9636=>850,9637=>850,9638=>850,9639=>850,9640=>850,9641=>850,9642=>610,9643=>610,9644=>850,9645=>850,9646=>495,9647=>495,9648=>692,9649=>692,9650=>692,9651=>692,9652=>452,9653=>452,9654=>692,9655=>692,9656=>452,9657=>452,9658=>692,9659=>692,9660=>692,9661=>692,9662=>452,9663=>452,9664=>692,9665=>692,9666=>452,9667=>452,9668=>692,9669=>692,9670=>692,9671=>692,9672=>692,9673=>785,9674=>444,9675=>785,9676=>785,9677=>785,9678=>785,9679=>785,9680=>785,9681=>785,9682=>785,9683=>785,9684=>785,9685=>785,9686=>474,9687=>474,9688=>712,9689=>873,9690=>873,9691=>873,9692=>348,9693=>348,9694=>348,9695=>348,9696=>785,9697=>785,9698=>692,9699=>692,9700=>692,9701=>692,9702=>531,9703=>850,9704=>850,9705=>850,9706=>850,9707=>850,9708=>692,9709=>692,9710=>692,9711=>1007,9712=>850,9713=>850,9714=>850,9715=>850,9716=>785,9717=>785,9718=>785,9719=>785,9720=>692,9721=>692,9722=>692,9723=>747,9724=>747,9725=>659,9726=>659,9727=>692,9728=>807,9784=>807,9785=>807,9786=>807,9787=>807,9788=>807,9791=>552,9792=>658,9793=>658,9794=>807,9795=>807,9796=>807,9797=>807,9798=>807,9799=>807,9824=>807,9825=>807,9826=>807,9827=>807,9828=>807,9829=>807,9830=>807,9831=>807,9833=>424,9834=>574,9835=>807,9836=>807,9837=>424,9838=>321,9839=>435,10145=>754,10181=>351,10182=>351,10208=>444,10216=>351,10217=>351,10224=>754,10225=>754,10226=>754,10227=>754,10228=>930,10229=>1290,10230=>1290,10231=>1290,10232=>1290,10233=>1290,10234=>1290,10235=>1290,10236=>1290,10237=>1290,10238=>1290,10239=>1290,10240=>659,10241=>659,10242=>659,10243=>659,10244=>659,10245=>659,10246=>659,10247=>659,10248=>659,10249=>659,10250=>659,10251=>659,10252=>659,10253=>659,10254=>659,10255=>659,10256=>659,10257=>659,10258=>659,10259=>659,10260=>659,10261=>659,10262=>659,10263=>659,10264=>659,10265=>659,10266=>659,10267=>659,10268=>659,10269=>659,10270=>659,10271=>659,10272=>659,10273=>659,10274=>659,10275=>659,10276=>659,10277=>659,10278=>659,10279=>659,10280=>659,10281=>659,10282=>659,10283=>659,10284=>659,10285=>659,10286=>659,10287=>659,10288=>659,10289=>659,10290=>659,10291=>659,10292=>659,10293=>659,10294=>659,10295=>659,10296=>659,10297=>659,10298=>659,10299=>659,10300=>659,10301=>659,10302=>659,10303=>659,10304=>659,10305=>659,10306=>659,10307=>659,10308=>659,10309=>659,10310=>659,10311=>659,10312=>659,10313=>659,10314=>659,10315=>659,10316=>659,10317=>659,10318=>659,10319=>659,10320=>659,10321=>659,10322=>659,10323=>659,10324=>659,10325=>659,10326=>659,10327=>659,10328=>659,10329=>659,10330=>659,10331=>659,10332=>659,10333=>659,10334=>659,10335=>659,10336=>659,10337=>659,10338=>659,10339=>659,10340=>659,10341=>659,10342=>659,10343=>659,10344=>659,10345=>659,10346=>659,10347=>659,10348=>659,10349=>659,10350=>659,10351=>659,10352=>659,10353=>659,10354=>659,10355=>659,10356=>659,10357=>659,10358=>659,10359=>659,10360=>659,10361=>659,10362=>659,10363=>659,10364=>659,10365=>659,10366=>659,10367=>659,10368=>659,10369=>659,10370=>659,10371=>659,10372=>659,10373=>659,10374=>659,10375=>659,10376=>659,10377=>659,10378=>659,10379=>659,10380=>659,10381=>659,10382=>659,10383=>659,10384=>659,10385=>659,10386=>659,10387=>659,10388=>659,10389=>659,10390=>659,10391=>659,10392=>659,10393=>659,10394=>659,10395=>659,10396=>659,10397=>659,10398=>659,10399=>659,10400=>659,10401=>659,10402=>659,10403=>659,10404=>659,10405=>659,10406=>659,10407=>659,10408=>659,10409=>659,10410=>659,10411=>659,10412=>659,10413=>659,10414=>659,10415=>659,10416=>659,10417=>659,10418=>659,10419=>659,10420=>659,10421=>659,10422=>659,10423=>659,10424=>659,10425=>659,10426=>659,10427=>659,10428=>659,10429=>659,10430=>659,10431=>659,10432=>659,10433=>659,10434=>659,10435=>659,10436=>659,10437=>659,10438=>659,10439=>659,10440=>659,10441=>659,10442=>659,10443=>659,10444=>659,10445=>659,10446=>659,10447=>659,10448=>659,10449=>659,10450=>659,10451=>659,10452=>659,10453=>659,10454=>659,10455=>659,10456=>659,10457=>659,10458=>659,10459=>659,10460=>659,10461=>659,10462=>659,10463=>659,10464=>659,10465=>659,10466=>659,10467=>659,10468=>659,10469=>659,10470=>659,10471=>659,10472=>659,10473=>659,10474=>659,10475=>659,10476=>659,10477=>659,10478=>659,10479=>659,10480=>659,10481=>659,10482=>659,10483=>659,10484=>659,10485=>659,10486=>659,10487=>659,10488=>659,10489=>659,10490=>659,10491=>659,10492=>659,10493=>659,10494=>659,10495=>659,10496=>754,10497=>754,10498=>754,10499=>754,10500=>754,10501=>754,10502=>754,10503=>754,10504=>754,10505=>754,10506=>754,10507=>754,10508=>754,10509=>754,10510=>754,10511=>754,10512=>754,10513=>754,10514=>754,10515=>754,10516=>754,10517=>754,10518=>754,10519=>754,10520=>754,10521=>754,10522=>754,10523=>754,10524=>754,10525=>754,10526=>754,10527=>754,10528=>754,10529=>754,10530=>754,10531=>754,10532=>754,10533=>754,10534=>754,10535=>754,10536=>754,10537=>754,10538=>754,10539=>754,10540=>754,10541=>754,10542=>754,10543=>754,10544=>754,10545=>754,10546=>754,10547=>754,10548=>754,10549=>754,10550=>754,10551=>754,10552=>754,10553=>754,10554=>754,10555=>754,10556=>754,10557=>754,10558=>754,10559=>754,10560=>754,10561=>754,10562=>754,10563=>754,10564=>754,10565=>754,10566=>754,10567=>754,10568=>754,10569=>754,10570=>754,10571=>754,10572=>754,10573=>754,10574=>754,10575=>754,10576=>754,10577=>754,10578=>754,10579=>754,10580=>754,10581=>754,10582=>754,10583=>754,10584=>754,10585=>754,10586=>754,10587=>754,10588=>754,10589=>754,10590=>754,10591=>754,10592=>754,10593=>754,10594=>754,10595=>754,10596=>754,10597=>754,10598=>754,10599=>754,10600=>754,10601=>754,10602=>754,10603=>754,10604=>754,10605=>754,10606=>754,10607=>754,10608=>754,10609=>754,10610=>754,10611=>754,10612=>754,10613=>754,10614=>754,10615=>883,10616=>754,10617=>754,10618=>886,10619=>754,10620=>754,10621=>754,10622=>754,10623=>754,10731=>444,10764=>1361,10765=>469,10766=>469,10799=>754,10858=>754,10859=>754,11008=>754,11009=>754,11010=>754,11011=>754,11012=>754,11013=>754,11014=>754,11015=>754,11016=>754,11017=>754,11018=>754,11019=>754,11020=>754,11021=>754,11022=>754,11023=>754,11024=>754,11025=>754,11026=>850,11027=>850,11028=>850,11029=>850,11030=>692,11031=>692,11032=>692,11033=>692,11034=>850,11360=>598,11361=>288,11363=>605,11364=>677,11367=>785,11368=>580,11369=>672,11370=>545,11371=>625,11372=>474,11373=>704,11374=>921,11375=>650,11376=>704,11377=>596,11378=>1017,11379=>845,11381=>666,11382=>478,11383=>630,11385=>451,11386=>542,11387=>498,11388=>237,11389=>409,11390=>616,11391=>625,11520=>695,11521=>571,11522=>569,11523=>592,11524=>568,11525=>866,11526=>680,11527=>864,11528=>555,11529=>581,11530=>866,11531=>568,11532=>581,11533=>866,11534=>580,11535=>779,11536=>865,11537=>580,11538=>580,11539=>863,11540=>851,11541=>777,11542=>580,11543=>581,11544=>580,11545=>584,11546=>619,11547=>571,11548=>883,11549=>613,11550=>608,11551=>766,11552=>861,11553=>569,11554=>580,11555=>582,11556=>674,11557=>822,11800=>482,11807=>754,11810=>351,11811=>351,11812=>351,11813=>351,11822=>482,42564=>616,42565=>461,42566=>355,42567=>353,42576=>994,42577=>845,42580=>1074,42581=>783,42582=>1025,42583=>787,42760=>444,42761=>444,42762=>444,42763=>444,42764=>444,42765=>444,42766=>444,42767=>444,42768=>444,42769=>444,42770=>444,42771=>444,42772=>444,42773=>444,42774=>444,42779=>332,42780=>332,42781=>228,42782=>228,42783=>228,42790=>785,42791=>571,42792=>758,42793=>679,42794=>550,42795=>504,42796=>493,42797=>478,42798=>566,42799=>549,42800=>462,42801=>461,42802=>1075,42803=>848,42804=>1103,42805=>855,42806=>1034,42807=>839,42808=>871,42809=>705,42810=>871,42811=>705,42812=>866,42813=>683,42814=>688,42815=>504,42816=>672,42817=>545,42822=>708,42823=>391,42826=>838,42827=>640,42830=>1274,42831=>899,42856=>636,42857=>549,42875=>550,42876=>430,42880=>598,42881=>288,42882=>758,42883=>580,42884=>550,42885=>430,42886=>688,42887=>504,42891=>361,42892=>247,42893=>695,42896=>787,42897=>628,42922=>785,43002=>861,43003=>624,43004=>605,43005=>921,43006=>355,43007=>1081,62464=>598,62465=>607,62466=>651,62467=>861,62468=>607,62469=>602,62470=>661,62471=>896,62472=>607,62473=>607,62474=>1141,62475=>624,62476=>623,62477=>866,62478=>607,62479=>623,62480=>908,62481=>681,62482=>728,62483=>682,62484=>859,62485=>622,62486=>852,62487=>621,62488=>628,62489=>623,62490=>665,62491=>623,62492=>628,62493=>608,62494=>665,62495=>805,62496=>607,62497=>707,62498=>608,62499=>607,62500=>607,62501=>659,62502=>875,62504=>813,63172=>288,63173=>542,63174=>576,63175=>580,63176=>853,63185=>450,63188=>450,64256=>637,64257=>600,64258=>600,64259=>847,64260=>887,64261=>669,64262=>824,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>923,65535=>540); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserifcondensedi.z b/tcpdf/fonts/dejavuserifcondensedi.z new file mode 100644 index 0000000..2449994 Binary files /dev/null and b/tcpdf/fonts/dejavuserifcondensedi.z differ diff --git a/tcpdf/fonts/dejavuserifi.ctg.z b/tcpdf/fonts/dejavuserifi.ctg.z new file mode 100644 index 0000000..aa9dc33 Binary files /dev/null and b/tcpdf/fonts/dejavuserifi.ctg.z differ diff --git a/tcpdf/fonts/dejavuserifi.php b/tcpdf/fonts/dejavuserifi.php new file mode 100644 index 0000000..15124fc --- /dev/null +++ b/tcpdf/fonts/dejavuserifi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='DejaVuSerif-Italic'; +$up=-63; +$ut=44; +$dw=600; +$diff=''; +$originalsize=343388; +$enc=''; +$file='dejavuserifi.z'; +$ctg='dejavuserifi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-839 -347 1645 1109]','ItalicAngle'=>-11,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>519,'StemV'=>34,'StemH'=>15,'AvgWidth'=>513,'MaxWidth'=>1734,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(76,-14,336,729),34=>array(98,458,362,729),35=>array(77,0,761,718),36=>array(33,-147,575,760),37=>array(90,-14,860,742),38=>array(39,-14,835,742),39=>array(98,458,176,729),40=>array(79,-156,408,760),41=>array(-19,-156,311,760),42=>array(16,287,484,742),43=>array(106,0,732,627),44=>array(20,-136,246,111),45=>array(36,230,302,306),46=>array(94,-14,224,116),47=>array(-80,-93,417,729),48=>array(65,-14,570,742),49=>array(70,0,439,742),50=>array(-4,0,561,742),51=>array(12,-14,572,742),52=>array(-4,0,562,742),53=>array(22,-14,575,729),54=>array(62,-14,603,742),55=>array(122,0,635,729),56=>array(35,-14,582,742),57=>array(33,-14,574,742),58=>array(73,-14,265,434),59=>array(-12,-136,279,434),60=>array(106,46,732,581),61=>array(106,175,732,452),62=>array(106,46,732,581),63=>array(107,-14,524,742),64=>array(64,-174,945,704),65=>array(-77,0,671,729),66=>array(-16,0,673,729),67=>array(52,-14,747,742),68=>array(-16,0,745,729),69=>array(-16,0,713,729),70=>array(-16,0,723,729),71=>array(56,-14,757,742),72=>array(-16,0,888,729),73=>array(-16,0,411,729),74=>array(-169,-208,446,729),75=>array(-16,0,795,729),76=>array(-16,0,605,729),77=>array(-16,0,1044,729),78=>array(-21,-14,903,729),79=>array(52,-14,764,742),80=>array(-16,0,668,729),81=>array(60,-160,789,742),82=>array(-16,0,716,729),83=>array(29,-14,641,742),84=>array(47,0,729,729),85=>array(109,-14,870,729),86=>array(51,0,808,729),87=>array(65,0,1096,729),88=>array(-65,0,745,729),89=>array(49,0,740,729),90=>array(-26,0,709,729),91=>array(-1,-132,400,760),92=>array(80,-93,257,729),93=>array(-10,-132,391,760),94=>array(106,457,732,729),95=>array(0,-236,500,-197),96=>array(179,615,366,799),97=>array(33,-14,530,534),98=>array(42,-14,576,760),99=>array(42,-14,542,533),100=>array(20,-14,601,760),101=>array(42,-14,547,533),102=>array(-63,-208,518,760),103=>array(35,-222,597,533),104=>array(48,0,553,760),105=>array(50,0,270,736),106=>array(-183,-222,294,736),107=>array(41,0,549,760),108=>array(41,0,279,760),109=>array(70,0,879,533),110=>array(70,0,575,533),111=>array(42,-14,560,533),112=>array(43,-208,617,533),113=>array(90,-208,594,533),114=>array(70,0,527,533),115=>array(11,-14,479,533),116=>array(55,-14,404,680),117=>array(68,-14,574,519),118=>array(38,0,554,519),119=>array(56,0,836,519),120=>array(2,0,550,519),121=>array(-37,-222,575,519),122=>array(-11,-25,532,544),123=>array(120,-163,601,760),124=>array(129,-236,208,764),125=>array(35,-163,517,760),126=>array(106,233,732,394),161=>array(66,0,326,743),162=>array(75,-145,566,662),163=>array(-5,0,606,742),164=>array(51,45,588,582),165=>array(45,0,710,729),166=>array(129,-171,208,699),167=>array(2,-95,481,742),168=>array(193,652,497,766),169=>array(138,0,862,725),170=>array(35,261,432,734),171=>array(73,69,562,517),172=>array(106,140,732,421),173=>array(36,230,302,306),174=>array(138,0,862,725),175=>array(180,673,485,745),176=>array(95,432,405,742),177=>array(106,0,732,627),178=>array(3,326,352,742),179=>array(13,319,353,742),180=>array(257,616,516,800),181=>array(44,-208,600,519),182=>array(117,-96,652,729),183=>array(93,282,223,412),184=>array(125,-193,342,0),185=>array(46,326,292,734),186=>array(20,261,434,742),187=>array(50,69,539,517),188=>array(46,-14,864,742),189=>array(46,-14,857,742),190=>array(13,-14,864,742),191=>array(32,-13,448,743),192=>array(-77,0,671,927),193=>array(-77,0,671,927),194=>array(-77,0,671,927),195=>array(-77,0,671,921),196=>array(-77,0,671,920),197=>array(-96,0,652,928),198=>array(-88,0,1012,729),199=>array(52,-193,747,742),200=>array(-16,0,713,927),201=>array(-16,0,713,927),202=>array(-16,0,713,927),203=>array(-16,0,713,920),204=>array(-16,0,411,927),205=>array(-16,0,447,927),206=>array(-16,0,450,927),207=>array(-16,0,448,920),208=>array(-11,0,750,729),209=>array(-21,-14,903,921),210=>array(52,-14,764,927),211=>array(52,-14,764,927),212=>array(52,-14,764,927),213=>array(52,-14,764,921),214=>array(52,-14,764,920),215=>array(138,33,700,594),216=>array(-21,-28,839,757),217=>array(109,-14,870,927),218=>array(109,-14,870,927),219=>array(109,-14,870,927),220=>array(109,-14,870,920),221=>array(49,0,740,927),222=>array(-16,0,638,729),223=>array(-85,-208,583,760),224=>array(33,-14,530,799),225=>array(33,-14,544,800),226=>array(33,-14,530,800),227=>array(33,-14,555,777),228=>array(33,-14,530,766),229=>array(33,-14,530,878),230=>array(34,-15,895,533),231=>array(42,-193,542,533),232=>array(42,-14,547,799),233=>array(42,-14,562,800),234=>array(42,-14,547,800),235=>array(42,-14,547,766),236=>array(72,0,276,799),237=>array(72,0,426,800),238=>array(72,0,392,800),239=>array(72,0,407,766),240=>array(26,-14,576,760),241=>array(70,0,575,777),242=>array(42,-14,560,799),243=>array(42,-14,567,800),244=>array(42,-14,560,800),245=>array(42,-14,578,777),246=>array(42,-14,560,766),247=>array(106,68,732,559),248=>array(-17,-46,615,565),249=>array(68,-14,574,799),250=>array(68,-14,574,800),251=>array(68,-14,574,800),252=>array(68,-14,574,766),253=>array(-37,-222,575,800),254=>array(21,-208,595,760),255=>array(-37,-222,575,766),256=>array(-77,0,671,899),257=>array(33,-14,530,745),258=>array(-77,0,671,926),259=>array(33,-14,530,772),260=>array(-77,-192,671,729),261=>array(33,-192,530,534),262=>array(52,-14,747,927),263=>array(42,-14,562,800),264=>array(52,-14,747,927),265=>array(42,-14,542,800),266=>array(52,-14,747,921),267=>array(42,-14,542,766),268=>array(52,-14,747,927),269=>array(42,-14,563,800),270=>array(-16,0,745,927),271=>array(20,-14,814,760),272=>array(-11,0,750,729),273=>array(20,-14,665,760),274=>array(-16,0,713,899),275=>array(42,-14,547,746),276=>array(-16,0,713,928),277=>array(42,-14,551,785),278=>array(-16,0,713,921),279=>array(42,-14,547,766),280=>array(-16,-192,713,729),281=>array(42,-192,547,533),282=>array(-16,0,713,927),283=>array(42,-14,563,800),284=>array(56,-14,757,927),285=>array(35,-222,597,800),286=>array(56,-14,757,928),287=>array(35,-222,597,785),288=>array(56,-14,757,921),289=>array(35,-222,597,766),290=>array(56,-224,757,742),291=>array(35,-222,597,741),292=>array(-16,0,888,927),293=>array(48,0,553,927),294=>array(-16,0,888,729),295=>array(48,0,553,760),296=>array(-16,0,463,921),297=>array(53,0,402,777),298=>array(-16,0,451,899),299=>array(54,0,359,745),300=>array(-16,0,461,928),301=>array(72,0,406,785),302=>array(3,-192,430,729),303=>array(29,-192,289,736),304=>array(-16,0,411,921),305=>array(72,0,262,519),306=>array(-16,-208,847,729),307=>array(50,-222,580,736),308=>array(-169,-208,454,927),309=>array(-162,-222,359,800),310=>array(-16,-209,795,729),311=>array(41,-209,549,760),312=>array(64,0,573,518),313=>array(-16,0,605,928),314=>array(41,0,375,928),315=>array(-16,-209,605,729),316=>array(41,-209,279,760),317=>array(-16,0,605,729),318=>array(41,0,492,760),319=>array(-16,0,631,729),320=>array(41,0,421,760),321=>array(-11,0,610,729),322=>array(12,0,327,760),323=>array(-21,-14,903,928),324=>array(70,0,575,776),325=>array(-21,-224,903,729),326=>array(70,-209,575,533),327=>array(-21,-14,903,932),328=>array(70,0,575,800),329=>array(39,0,770,742),330=>array(47,-208,804,743),331=>array(92,-222,579,533),332=>array(52,-14,764,899),333=>array(42,-14,560,745),334=>array(52,-14,764,928),335=>array(42,-14,560,785),336=>array(52,-14,787,927),337=>array(42,-14,647,800),338=>array(58,0,1120,729),339=>array(42,-15,944,533),340=>array(-16,0,716,928),341=>array(70,0,548,776),342=>array(-16,-209,716,729),343=>array(70,-209,527,533),344=>array(-16,0,716,927),345=>array(70,0,542,800),346=>array(29,-14,641,928),347=>array(11,-14,548,776),348=>array(29,-14,641,927),349=>array(11,-14,488,800),350=>array(29,-193,641,742),351=>array(11,-193,479,533),352=>array(29,-14,641,927),353=>array(11,-14,523,800),354=>array(47,-193,729,729),355=>array(38,-193,404,680),356=>array(47,0,729,927),357=>array(55,-14,476,788),358=>array(47,0,728,729),359=>array(22,-14,403,680),360=>array(109,-14,870,921),361=>array(68,-14,574,777),362=>array(109,-14,870,899),363=>array(68,-14,574,745),364=>array(109,-14,870,928),365=>array(68,-14,574,785),366=>array(109,-14,870,1051),367=>array(68,-14,574,868),368=>array(109,-14,870,927),369=>array(68,-14,621,800),370=>array(109,-200,870,729),371=>array(68,-192,574,519),372=>array(65,0,1096,931),373=>array(56,0,836,800),374=>array(49,0,740,931),375=>array(-37,-222,575,800),376=>array(49,0,740,920),377=>array(-26,0,709,928),378=>array(-11,-25,548,776),379=>array(-26,0,709,930),380=>array(-11,-25,532,734),381=>array(-26,0,709,927),382=>array(-11,-25,532,800),383=>array(-62,-208,518,760),384=>array(42,-14,576,760),385=>array(-68,0,673,729),386=>array(-16,0,712,729),387=>array(-44,-14,570,760),388=>array(-16,0,644,729),389=>array(-44,-14,568,760),390=>array(15,-14,709,742),391=>array(47,-14,976,796),392=>array(40,-14,772,639),393=>array(-11,0,750,729),394=>array(-68,0,745,729),395=>array(25,0,745,729),396=>array(7,-14,666,760),397=>array(46,-246,575,533),398=>array(-16,0,721,729),399=>array(52,-14,764,742),400=>array(94,-14,696,742),401=>array(-184,-208,743,729),402=>array(-184,-185,518,760),403=>array(51,-14,985,796),404=>array(79,-92,753,729),405=>array(48,-3,858,760),406=>array(110,0,411,729),407=>array(-16,0,411,729),408=>array(-17,0,887,741),409=>array(42,0,549,760),410=>array(-0,0,279,760),411=>array(-34,0,542,765),412=>array(84,-14,989,730),413=>array(-185,-208,922,729),414=>array(90,-208,569,533),415=>array(52,-14,764,742),416=>array(49,-14,860,760),417=>array(41,-14,684,533),418=>array(65,-157,959,742),419=>array(68,-208,728,533),420=>array(-68,0,668,729),421=>array(25,-208,591,716),422=>array(-0,-159,701,729),423=>array(52,-14,647,742),424=>array(34,-14,485,533),425=>array(-31,0,711,729),426=>array(-20,-222,419,761),427=>array(49,-222,468,680),428=>array(67,0,729,729),429=>array(47,-14,485,760),430=>array(67,-208,749,729),431=>array(106,-14,1064,802),432=>array(63,-14,726,532),433=>array(56,-14,840,729),434=>array(110,0,696,729),435=>array(49,0,863,729),436=>array(-38,-222,789,530),437=>array(-26,0,709,729),438=>array(-10,-25,531,544),439=>array(-12,-14,561,729),440=>array(23,-14,596,729),441=>array(23,-224,594,519),442=>array(9,-224,561,519),443=>array(-4,0,560,742),444=>array(63,-14,657,729),445=>array(-12,-224,557,519),446=>array(58,-15,406,680),447=>array(41,-208,618,560),448=>array(37,0,258,729),449=>array(37,0,456,729),450=>array(-17,0,476,729),451=>array(37,0,258,729),452=>array(-16,0,1511,927),453=>array(-16,-25,1333,800),454=>array(20,-25,1172,800),455=>array(-16,-208,1110,729),456=>array(-16,-222,958,736),457=>array(41,-222,614,760),458=>array(-21,-208,1321,729),459=>array(-21,-222,1169,736),460=>array(70,-222,938,736),461=>array(-77,0,671,927),462=>array(33,-14,531,800),463=>array(-16,0,466,927),464=>array(72,0,421,800),465=>array(52,-14,764,927),466=>array(42,-14,565,800),467=>array(109,-14,870,927),468=>array(68,-14,574,800),469=>array(109,-14,870,1025),470=>array(68,-14,574,886),471=>array(109,-14,870,1044),472=>array(68,-14,574,905),473=>array(109,-14,870,1043),474=>array(68,-14,574,904),475=>array(109,-14,870,1044),476=>array(68,-14,574,905),477=>array(51,-14,542,533),478=>array(-77,0,671,1025),479=>array(33,-14,543,886),480=>array(-77,0,671,1025),481=>array(33,-14,534,888),482=>array(-88,0,1012,899),483=>array(34,-15,895,745),484=>array(46,-14,789,742),485=>array(35,-222,636,533),486=>array(56,-14,757,927),487=>array(35,-222,597,800),488=>array(-16,0,795,927),489=>array(41,0,549,964),490=>array(52,-200,764,742),491=>array(42,-200,560,533),492=>array(52,-200,764,899),493=>array(42,-200,560,745),494=>array(-12,-14,563,927),495=>array(-12,-224,561,800),496=>array(-162,-222,441,800),497=>array(-16,0,1511,729),498=>array(-16,-25,1333,729),499=>array(20,-25,1172,760),500=>array(56,-14,757,928),501=>array(35,-222,597,800),502=>array(-15,-14,1141,729),503=>array(-37,-208,706,742),504=>array(-21,-14,903,927),505=>array(69,0,574,799),506=>array(-96,0,652,927),507=>array(33,-14,561,927),508=>array(-88,0,1012,928),509=>array(34,-15,895,802),510=>array(-21,-28,839,928),511=>array(-17,-46,615,800),512=>array(-77,0,671,927),513=>array(33,-14,529,800),514=>array(-77,0,671,967),515=>array(33,-14,529,785),516=>array(-16,0,713,927),517=>array(42,-14,546,800),518=>array(-16,0,713,967),519=>array(42,-14,546,785),520=>array(-16,0,425,927),521=>array(14,0,355,799),522=>array(-16,0,448,967),523=>array(48,0,365,757),524=>array(51,-14,764,927),525=>array(42,-14,559,800),526=>array(51,-14,764,967),527=>array(42,-14,559,785),528=>array(-16,0,716,927),529=>array(69,0,527,800),530=>array(-16,0,716,967),531=>array(69,0,527,785),532=>array(109,-14,870,927),533=>array(68,-14,574,800),534=>array(109,-14,870,967),535=>array(68,-14,574,785),536=>array(29,-225,641,742),537=>array(11,-225,479,533),538=>array(47,-225,729,729),539=>array(55,-225,404,680),540=>array(-17,-210,595,742),541=>array(-38,-211,496,530),542=>array(-16,0,888,927),543=>array(47,0,552,964),544=>array(47,-208,804,743),545=>array(33,-73,735,760),546=>array(4,-14,546,742),547=>array(13,-14,515,760),548=>array(-8,-187,728,729),549=>array(8,-195,551,519),550=>array(-77,0,671,921),551=>array(33,-14,529,766),552=>array(-16,-193,713,729),553=>array(42,-193,546,533),554=>array(52,-14,764,1025),555=>array(42,-14,566,886),556=>array(52,-14,764,1025),557=>array(42,-14,566,862),558=>array(52,-14,764,921),559=>array(42,-14,560,766),560=>array(52,-14,764,1025),561=>array(42,-14,560,887),562=>array(49,0,740,899),563=>array(-37,-222,575,745),564=>array(80,-107,437,760),565=>array(81,-107,789,533),566=>array(63,-107,437,680),567=>array(-162,-222,284,519),568=>array(28,-14,888,760),569=>array(68,-208,929,533),570=>array(-77,-28,791,757),571=>array(-47,-28,813,757),572=>array(-36,-46,596,565),573=>array(-16,0,604,729),574=>array(-97,-28,763,757),575=>array(31,-222,500,533),576=>array(11,-222,553,519),577=>array(24,0,579,729),578=>array(62,0,440,533),579=>array(-16,0,673,729),580=>array(41,-14,870,729),581=>array(-77,0,671,729),582=>array(-16,-54,713,783),583=>array(42,-54,547,579),584=>array(-168,-208,446,729),585=>array(-162,-222,322,736),586=>array(75,-208,829,742),587=>array(90,-222,696,533),588=>array(-16,0,716,729),589=>array(28,0,527,533),590=>array(19,0,740,729),591=>array(-37,-222,618,519),592=>array(67,-14,563,533),593=>array(42,-12,655,533),594=>array(28,-12,633,533),595=>array(43,-14,568,760),596=>array(22,-14,514,533),597=>array(52,-107,550,533),598=>array(48,-222,675,760),599=>array(28,-14,812,760),600=>array(39,-14,542,533),601=>array(51,-14,542,533),602=>array(42,-14,917,533),603=>array(25,-19,499,524),604=>array(4,-19,472,524),605=>array(3,-19,850,524),606=>array(50,-18,594,533),607=>array(-162,-222,322,519),608=>array(12,-222,833,760),609=>array(35,-222,683,519),610=>array(50,-18,542,529),611=>array(75,-223,589,519),612=>array(94,-16,552,532),613=>array(87,-208,593,519),614=>array(48,0,552,760),615=>array(70,-222,548,760),616=>array(9,0,279,736),617=>array(76,0,263,519),618=>array(-15,0,348,519),619=>array(19,0,368,760),620=>array(25,0,411,760),621=>array(52,-222,354,760),622=>array(63,-224,677,760),623=>array(78,-14,887,519),624=>array(98,-208,907,533),625=>array(92,-222,874,533),626=>array(-164,-222,569,533),627=>array(92,-222,708,533),628=>array(-15,-14,675,519),629=>array(50,-14,552,533),630=>array(50,0,806,519),631=>array(38,-14,596,530),632=>array(46,-208,549,760),633=>array(-13,-14,444,519),634=>array(-37,-14,467,759),635=>array(7,-222,566,519),636=>array(50,-207,547,533),637=>array(80,-222,549,533),638=>array(70,0,475,530),639=>array(65,0,368,530),640=>array(-16,0,542,519),641=>array(-16,0,632,519),642=>array(16,-222,500,533),643=>array(-186,-222,421,761),644=>array(-186,-222,521,760),645=>array(82,-222,418,530),646=>array(-173,-222,474,761),647=>array(19,-161,368,533),648=>array(51,-208,422,680),649=>array(21,-14,612,519),650=>array(47,-14,622,519),651=>array(77,-3,557,519),652=>array(38,0,554,519),653=>array(56,0,835,519),654=>array(-16,0,596,741),655=>array(81,0,670,519),656=>array(11,-222,663,519),657=>array(-1,-93,541,519),658=>array(-12,-224,561,519),659=>array(31,-224,561,519),660=>array(40,0,469,761),661=>array(99,0,490,761),662=>array(57,0,449,761),663=>array(-7,-222,453,759),664=>array(52,-14,764,742),665=>array(-15,0,522,519),666=>array(24,-18,568,533),667=>array(27,-18,783,760),668=>array(-16,0,664,519),669=>array(-172,-222,351,736),670=>array(90,-209,597,519),671=>array(-9,0,502,519),672=>array(46,-208,831,760),673=>array(40,0,469,761),674=>array(99,0,490,761),675=>array(20,-25,994,760),676=>array(48,-224,998,760),677=>array(35,-93,985,760),678=>array(53,0,773,680),679=>array(67,-222,747,761),680=>array(55,-14,809,680),681=>array(-59,-222,868,760),682=>array(42,0,662,760),683=>array(41,-25,673,760),684=>array(23,-15,609,625),685=>array(-16,105,443,625),686=>array(96,-207,706,760),687=>array(97,-222,809,760),688=>array(34,326,346,751),689=>array(31,326,343,751),690=>array(-26,202,259,739),691=>array(44,327,324,625),692=>array(-5,318,274,617),693=>array(6,202,354,617),694=>array(-6,327,369,617),695=>array(36,326,526,617),696=>array(-23,202,362,617),697=>array(54,557,227,800),698=>array(54,557,408,800),699=>array(78,495,285,742),700=>array(85,495,292,742),701=>array(126,495,252,742),702=>array(118,492,278,760),703=>array(122,492,282,760),704=>array(-19,347,250,772),705=>array(19,347,261,772),706=>array(124,524,400,836),707=>array(100,524,376,836),708=>array(71,561,382,800),709=>array(118,561,429,800),710=>array(170,616,481,800),711=>array(205,616,517,800),712=>array(71,513,211,759),713=>array(180,673,485,745),714=>array(257,616,516,800),715=>array(179,615,366,799),716=>array(71,-90,211,156),717=>array(19,-156,324,-84),720=>array(63,0,274,434),721=>array(118,303,245,434),722=>array(71,249,231,517),723=>array(74,249,235,517),726=>array(45,165,310,411),727=>array(45,242,309,334),728=>array(200,645,505,785),729=>array(286,652,400,766),730=>array(209,610,477,878),731=>array(159,-192,339,0),732=>array(179,639,527,777),733=>array(189,616,565,800),734=>array(-8,307,406,508),736=>array(47,202,371,617),737=>array(37,326,179,751),738=>array(1,318,298,625),739=>array(2,326,346,617),740=>array(19,347,261,772),741=>array(157,0,454,668),742=>array(127,0,454,668),743=>array(98,0,454,668),744=>array(69,0,454,668),745=>array(40,0,454,668),748=>array(86,-281,398,-42),750=>array(85,495,458,742),751=>array(83,-241,395,-58),752=>array(40,-281,352,-42),755=>array(116,-240,384,28),759=>array(76,-192,424,-55),768=>array(-377,615,-190,799),769=>array(-299,616,-40,800),770=>array(-386,616,-75,800),771=>array(-377,639,-29,777),772=>array(-376,673,-71,745),773=>array(-500,716,0,755),774=>array(-356,645,-51,785),775=>array(-271,652,-156,766),776=>array(-363,652,-60,766),777=>array(-283,616,-82,852),778=>array(-347,610,-80,878),779=>array(-367,616,9,800),780=>array(-351,616,-40,800),781=>array(-260,616,-151,803),782=>array(-368,616,-42,803),783=>array(-431,616,-91,800),784=>array(-356,645,-51,874),785=>array(-380,645,-75,785),786=>array(-231,495,-58,644),787=>array(-235,606,-92,829),788=>array(-238,606,-105,829),789=>array(-82,616,82,800),790=>array(-394,-260,-207,-76),791=>array(-327,-259,-67,-76),792=>array(-338,-340,-155,-107),793=>array(-345,-340,-162,-107),794=>array(-187,698,61,932),795=>array(-125,350,82,532),796=>array(-311,-347,-150,-79),797=>array(-381,-251,-133,-99),798=>array(-365,-260,-117,-107),799=>array(-372,-340,-124,-107),800=>array(-373,-179,-125,-107),801=>array(-440,-222,-83,63),802=>array(-387,-222,-84,63),803=>array(-214,-191,-100,-77),804=>array(-403,-191,-99,-77),805=>array(-355,-241,-146,-32),806=>array(-348,-225,-200,-76),807=>array(-375,-193,-158,0),808=>array(-341,-192,-161,0),809=>array(-305,-263,-195,-76),810=>array(-414,-259,-86,-75),811=>array(-392,-217,-81,-77),812=>array(-388,-261,-76,-77),813=>array(-424,-260,-112,-76),814=>array(-388,-217,-83,-77),815=>array(-416,-216,-110,-76),816=>array(-428,-213,-79,-76),817=>array(-402,-147,-97,-75),818=>array(-500,-236,0,-197),819=>array(-500,-236,0,-80),820=>array(-756,212,-76,415),821=>array(-296,227,-24,278),822=>array(-621,227,-30,278),823=>array(-612,-46,19,565),824=>array(-839,-28,21,757),825=>array(-339,-344,-179,-76),826=>array(-417,-256,-88,-72),827=>array(-411,-344,-89,-75),828=>array(-419,-217,-108,-77),829=>array(-334,575,-96,792),830=>array(-260,592,-71,850),831=>array(-500,599,0,755),835=>array(-235,606,-92,829),856=>array(24,652,138,766),864=>array(-290,723,572,859),865=>array(-329,729,563,869),880=>array(-16,0,714,729),881=>array(65,0,489,519),882=>array(16,0,728,729),883=>array(42,0,565,519),884=>array(54,557,227,800),885=>array(54,-208,227,35),886=>array(73,-14,807,743),887=>array(65,0,583,519),890=>array(215,-208,331,-60),891=>array(30,-14,522,533),892=>array(42,-14,542,533),893=>array(30,-14,522,533),894=>array(-12,-136,279,434),900=>array(257,616,516,800),901=>array(193,652,581,996),902=>array(-77,0,671,800),903=>array(93,282,223,412),904=>array(72,0,883,800),905=>array(72,0,1055,800),906=>array(72,0,578,800),908=>array(67,-14,780,800),910=>array(72,0,978,800),911=>array(13,0,798,800),912=>array(77,22,491,996),913=>array(-77,0,671,729),914=>array(-16,0,673,729),915=>array(-16,0,723,729),916=>array(-33,0,609,729),917=>array(-16,0,713,729),918=>array(-26,0,709,729),919=>array(-16,0,888,729),920=>array(52,-14,764,742),921=>array(-16,0,411,729),922=>array(-16,0,795,729),923=>array(-77,0,671,729),924=>array(-16,0,1044,729),925=>array(-21,-14,903,729),926=>array(-16,0,713,729),927=>array(52,-14,764,742),928=>array(-16,0,888,729),929=>array(-16,0,668,729),931=>array(-31,0,711,729),932=>array(47,0,729,729),933=>array(49,0,740,729),934=>array(56,0,765,729),935=>array(-65,0,745,729),936=>array(107,0,909,729),937=>array(-10,0,775,742),938=>array(-16,0,455,920),939=>array(49,0,740,920),940=>array(42,-12,655,800),941=>array(25,-19,516,800),942=>array(90,-208,569,800),943=>array(77,22,426,800),944=>array(77,-3,624,996),945=>array(42,-12,655,533),946=>array(-32,-208,528,765),947=>array(97,-209,594,519),948=>array(27,-14,556,765),949=>array(25,-19,499,524),950=>array(49,-208,591,760),951=>array(90,-208,569,533),952=>array(50,-11,552,771),953=>array(77,22,302,519),954=>array(-10,0,642,519),955=>array(-34,0,542,765),956=>array(44,-208,600,519),957=>array(71,0,573,519),958=>array(34,-208,591,760),959=>array(42,-14,560,533),960=>array(-10,0,672,519),961=>array(-9,-208,557,533),962=>array(68,-208,561,533),963=>array(51,-14,706,519),964=>array(66,22,566,519),965=>array(77,-3,559,519),966=>array(54,-208,676,521),967=>array(-59,-222,655,533),968=>array(128,-208,792,519),969=>array(35,-3,767,519),970=>array(77,22,409,766),971=>array(77,-3,559,766),972=>array(42,-14,570,800),973=>array(77,-3,559,800),974=>array(35,-3,767,800),975=>array(8,-240,818,729),976=>array(50,-11,539,771),977=>array(51,-11,683,771),978=>array(90,0,700,731),979=>array(72,0,888,800),980=>array(90,0,700,920),981=>array(34,-208,640,760),982=>array(35,-3,839,519),983=>array(19,-222,643,533),984=>array(71,-208,783,742),985=>array(68,-208,571,533),986=>array(71,-208,766,742),987=>array(61,-208,577,616),988=>array(-16,0,723,729),989=>array(-179,-211,519,742),990=>array(25,0,564,729),991=>array(86,0,578,759),992=>array(30,-208,740,742),993=>array(25,-208,506,533),1008=>array(-2,-4,622,533),1009=>array(22,-210,557,533),1010=>array(42,-14,542,533),1011=>array(-183,-222,294,736),1012=>array(52,-14,764,742),1013=>array(42,-14,541,533),1014=>array(29,-14,515,533),1015=>array(-16,0,638,729),1016=>array(21,-208,595,760),1017=>array(52,-14,747,742),1018=>array(-16,0,1044,729),1019=>array(-24,-208,736,519),1020=>array(-20,-208,584,533),1021=>array(23,-14,715,742),1022=>array(52,-14,747,742),1023=>array(23,-14,715,742),1024=>array(-16,0,713,927),1025=>array(-16,0,713,920),1026=>array(20,-216,718,729),1027=>array(-16,0,691,927),1028=>array(56,-14,746,742),1029=>array(29,-14,641,742),1030=>array(-16,0,411,729),1031=>array(-16,0,470,920),1032=>array(-169,-208,446,729),1033=>array(-41,-14,1009,729),1034=>array(-16,0,1037,729),1035=>array(-1,0,756,729),1036=>array(-16,0,795,927),1037=>array(-16,0,888,927),1038=>array(29,-14,783,970),1039=>array(-0,-157,903,729),1040=>array(-60,0,689,729),1041=>array(-16,0,712,729),1042=>array(-16,0,673,729),1043=>array(-16,0,691,729),1044=>array(-36,-157,828,729),1045=>array(-16,0,713,729),1046=>array(-59,0,1145,729),1047=>array(9,-14,576,742),1048=>array(-16,0,888,729),1049=>array(-16,0,888,966),1050=>array(-16,0,795,729),1051=>array(-41,-14,856,729),1052=>array(-16,0,1044,729),1053=>array(-16,0,888,729),1054=>array(52,-14,764,742),1055=>array(-16,0,888,729),1056=>array(-16,0,668,729),1057=>array(52,-14,747,742),1058=>array(47,0,729,729),1059=>array(29,-14,783,729),1060=>array(54,0,779,729),1061=>array(-65,0,745,729),1062=>array(-0,-157,903,729),1063=>array(70,0,792,729),1064=>array(-16,0,1157,729),1065=>array(-0,-157,1172,729),1066=>array(74,0,735,729),1067=>array(-16,0,1000,729),1068=>array(-16,0,614,729),1069=>array(23,-14,715,742),1070=>array(-16,-14,1128,742),1071=>array(-37,0,823,729),1072=>array(33,-14,530,534),1073=>array(49,-14,614,786),1074=>array(42,-14,537,533),1075=>array(72,-14,492,534),1076=>array(42,-14,592,760),1077=>array(42,-14,547,533),1078=>array(11,-14,1125,533),1079=>array(26,-14,497,533),1080=>array(68,-14,574,519),1081=>array(68,-14,574,752),1082=>array(70,-14,597,533),1083=>array(12,-14,570,519),1084=>array(12,-14,762,519),1085=>array(70,0,588,519),1086=>array(42,-14,560,533),1087=>array(70,0,575,533),1088=>array(43,-208,617,533),1089=>array(42,-14,542,533),1090=>array(70,0,879,533),1091=>array(-37,-222,575,519),1092=>array(28,-208,749,760),1093=>array(2,0,550,519),1094=>array(68,-208,643,519),1095=>array(70,0,553,519),1096=>array(68,-14,877,519),1097=>array(68,-208,946,519),1098=>array(39,-14,621,534),1099=>array(68,-14,744,519),1100=>array(68,-14,498,519),1101=>array(23,-14,522,533),1102=>array(70,-14,837,533),1103=>array(12,-14,592,519),1104=>array(42,-14,547,799),1105=>array(42,-14,547,766),1106=>array(38,-222,539,760),1107=>array(72,-14,537,800),1108=>array(42,-14,541,533),1109=>array(11,-14,479,533),1110=>array(50,0,270,736),1111=>array(72,0,407,766),1112=>array(-183,-222,294,736),1113=>array(12,-14,813,519),1114=>array(70,-14,832,519),1115=>array(38,0,552,760),1116=>array(70,-14,597,800),1117=>array(68,-14,574,799),1118=>array(-37,-222,575,750),1119=>array(68,-211,574,519),1122=>array(58,0,702,729),1123=>array(70,-14,836,534),1124=>array(-16,-14,1110,742),1125=>array(65,-14,815,533),1130=>array(12,0,1122,729),1131=>array(34,-14,928,519),1132=>array(-16,0,1286,729),1133=>array(65,-14,1071,519),1136=>array(63,0,989,729),1137=>array(17,-208,935,760),1138=>array(52,-14,764,742),1139=>array(42,-14,510,533),1140=>array(71,0,914,742),1141=>array(51,0,712,533),1142=>array(71,0,914,927),1143=>array(51,0,712,800),1164=>array(17,0,646,729),1165=>array(35,-14,476,760),1168=>array(-16,0,729,872),1169=>array(65,0,565,668),1170=>array(-16,0,691,729),1171=>array(72,-14,492,534),1172=>array(-16,-216,723,729),1173=>array(-17,-222,545,519),1174=>array(-59,-157,1145,729),1175=>array(11,-208,1125,533),1176=>array(9,-193,576,742),1177=>array(26,-193,497,533),1178=>array(-0,-157,810,729),1179=>array(70,-208,597,533),1182=>array(-16,0,795,729),1183=>array(70,-14,597,760),1184=>array(74,0,916,729),1185=>array(40,-14,669,533),1186=>array(-16,-157,888,729),1187=>array(70,-208,658,519),1188=>array(-16,0,1168,729),1189=>array(70,0,864,519),1190=>array(-16,-216,1123,729),1191=>array(-17,-222,849,519),1194=>array(52,-193,747,742),1195=>array(42,-193,542,533),1196=>array(47,-157,729,729),1197=>array(70,-208,958,533),1198=>array(49,0,740,729),1199=>array(59,-208,581,519),1200=>array(49,0,740,729),1201=>array(59,-208,581,519),1202=>array(-65,-157,745,729),1203=>array(3,-208,575,519),1204=>array(47,-157,967,729),1205=>array(35,-208,677,519),1206=>array(70,-157,791,729),1207=>array(70,-208,622,519),1210=>array(-84,0,637,729),1211=>array(48,0,553,760),1216=>array(-16,0,411,729),1217=>array(-59,0,1145,928),1218=>array(11,-14,1125,785),1219=>array(-16,-216,795,729),1220=>array(-17,-222,635,519),1223=>array(-16,-216,888,729),1224=>array(-17,-222,665,519),1227=>array(70,-157,791,729),1228=>array(75,-138,665,519),1231=>array(-45,0,367,760),1232=>array(-60,0,689,926),1233=>array(33,-14,530,772),1234=>array(-60,0,689,920),1235=>array(33,-14,530,766),1236=>array(-88,0,1012,729),1237=>array(34,-15,895,533),1238=>array(-16,0,713,928),1239=>array(42,-14,551,785),1240=>array(52,-14,764,742),1241=>array(51,-14,542,533),1242=>array(52,-14,764,920),1243=>array(51,-14,542,766),1244=>array(-59,0,1145,920),1245=>array(11,-14,1125,766),1246=>array(9,-14,576,920),1247=>array(26,-14,507,766),1248=>array(-12,-14,561,729),1249=>array(-12,-224,561,519),1250=>array(-16,0,888,899),1251=>array(68,-14,574,745),1252=>array(-16,0,888,920),1253=>array(68,-14,574,766),1254=>array(52,-14,764,920),1255=>array(42,-14,560,766),1256=>array(52,-14,764,742),1257=>array(50,-14,552,533),1258=>array(52,-14,764,920),1259=>array(50,-14,552,766),1260=>array(23,-14,715,920),1261=>array(23,-14,522,766),1262=>array(29,-14,783,899),1263=>array(-37,-222,575,745),1264=>array(29,-14,783,920),1265=>array(-37,-222,575,766),1266=>array(29,-14,783,927),1267=>array(-37,-222,598,800),1268=>array(70,0,792,920),1269=>array(70,0,553,766),1270=>array(-0,-157,706,729),1271=>array(72,-208,492,534),1272=>array(-16,0,1000,920),1273=>array(68,-14,744,766),1296=>array(94,-14,696,742),1297=>array(26,-14,528,533),1298=>array(-41,-208,856,729),1299=>array(12,-222,570,519),1300=>array(-41,-14,1232,729),1301=>array(12,-14,925,519),1306=>array(60,-160,789,742),1307=>array(90,-208,594,533),1308=>array(65,0,1096,729),1309=>array(56,0,836,519),1329=>array(96,-14,836,729),1330=>array(-38,0,729,743),1331=>array(67,0,795,743),1332=>array(20,0,817,743),1333=>array(96,-14,779,729),1334=>array(49,-45,752,743),1335=>array(11,-45,786,729),1336=>array(-33,-45,732,743),1337=>array(-37,-14,992,743),1338=>array(28,-14,848,729),1339=>array(7,0,739,729),1340=>array(11,-45,638,729),1341=>array(8,-14,1119,729),1342=>array(94,-13,835,742),1343=>array(70,0,724,729),1344=>array(31,-66,671,729),1345=>array(49,-32,747,743),1346=>array(33,-45,768,743),1347=>array(14,0,772,739),1348=>array(109,-14,959,729),1349=>array(35,-14,691,742),1350=>array(41,-14,776,774),1351=>array(68,-14,745,729),1352=>array(-38,0,702,743),1353=>array(108,-45,731,743),1354=>array(10,0,778,743),1355=>array(42,-45,745,743),1356=>array(-38,0,854,743),1357=>array(96,-14,836,729),1358=>array(34,-45,770,729),1359=>array(28,-14,670,742),1360=>array(-38,0,764,743),1361=>array(42,-14,696,742),1362=>array(7,0,713,729),1363=>array(64,0,784,729),1364=>array(-35,0,767,743),1365=>array(59,-14,775,742),1366=>array(34,-14,757,729),1369=>array(122,492,282,760),1370=>array(27,482,253,729),1371=>array(-18,615,249,799),1372=>array(-24,618,411,893),1373=>array(101,615,288,799),1374=>array(-13,618,376,856),1375=>array(30,618,458,760),1377=>array(69,-14,878,519),1378=>array(-31,-208,568,533),1379=>array(63,-208,684,533),1380=>array(9,-208,684,533),1381=>array(67,-14,602,760),1382=>array(63,-208,680,533),1383=>array(-46,0,537,760),1384=>array(-39,-208,586,533),1385=>array(-39,-208,827,533),1386=>array(22,-14,733,760),1387=>array(-62,-208,563,760),1388=>array(-47,-208,332,519),1389=>array(-62,-208,897,760),1390=>array(32,-14,585,770),1391=>array(91,-208,569,760),1392=>array(-41,0,544,760),1393=>array(29,-14,543,773),1394=>array(1,-208,635,533),1395=>array(42,-14,633,767),1396=>array(44,-14,718,773),1397=>array(-98,-208,281,519),1398=>array(71,-14,549,773),1399=>array(-75,-208,473,533),1400=>array(-6,0,579,533),1401=>array(-42,-208,380,544),1402=>array(88,-208,897,519),1403=>array(6,-208,553,533),1404=>array(-6,0,596,533),1405=>array(69,-14,574,519),1406=>array(65,-208,621,760),1407=>array(68,-14,861,533),1408=>array(-31,-208,594,533),1409=>array(38,-222,685,533),1410=>array(-9,0,462,519),1411=>array(65,-208,858,760),1412=>array(-46,-208,607,533),1413=>array(49,-14,560,533),1414=>array(18,-208,758,760),1415=>array(72,-14,746,760),1417=>array(73,-14,265,434),1418=>array(40,202,305,306),4256=>array(24,0,749,847),4257=>array(152,0,788,847),4258=>array(80,-58,788,848),4259=>array(48,1,871,847),4260=>array(81,0,788,847),4261=>array(81,0,951,847),4262=>array(111,0,858,847),4263=>array(63,0,1070,847),4264=>array(111,0,582,847),4265=>array(118,0,667,847),4266=>array(70,0,900,847),4267=>array(28,0,875,847),4268=>array(-17,0,708,847),4269=>array(60,-37,1038,847),4270=>array(111,0,917,847),4271=>array(111,0,884,847),4272=>array(83,0,978,847),4273=>array(75,0,721,847),4274=>array(35,0,704,847),4275=>array(63,-37,929,847),4276=>array(84,0,938,847),4277=>array(92,0,973,847),4278=>array(-17,0,682,847),4279=>array(147,0,788,847),4280=>array(72,0,787,847),4281=>array(-16,0,619,847),4282=>array(50,-25,854,847),4283=>array(13,0,854,847),4284=>array(-17,1,747,847),4285=>array(16,1,764,847),4286=>array(24,0,788,847),4287=>array(-17,0,960,847),4288=>array(70,0,984,847),4289=>array(-17,0,692,847),4290=>array(63,1,800,847),4291=>array(118,0,789,847),4292=>array(81,0,892,847),4293=>array(29,0,980,848),4304=>array(28,0,484,571),4305=>array(44,0,539,829),4306=>array(-40,-225,518,542),4307=>array(36,-220,803,531),4308=>array(-48,-225,534,532),4309=>array(-48,-225,535,532),4310=>array(81,0,659,831),4311=>array(43,0,829,531),4312=>array(42,0,526,532),4313=>array(-63,-225,487,532),4314=>array(43,-220,1044,537),4315=>array(42,0,642,829),4316=>array(47,0,659,840),4317=>array(47,-98,792,532),4318=>array(27,1,599,829),4319=>array(-38,-225,595,531),4320=>array(51,-0,792,822),4321=>array(86,0,544,829),4322=>array(12,-225,679,681),4323=>array(62,-225,668,532),4324=>array(61,-225,791,532),4325=>array(-30,-225,680,831),4326=>array(31,-220,835,532),4327=>array(-59,-225,580,531),4328=>array(55,0,651,830),4329=>array(-4,-5,552,831),4330=>array(24,-225,643,531),4331=>array(41,0,639,829),4332=>array(20,-229,677,830),4333=>array(-36,-225,589,829),4334=>array(86,0,581,830),4335=>array(-86,-225,695,532),4336=>array(28,0,631,829),4337=>array(36,0,660,830),4338=>array(-43,-91,539,532),4339=>array(-30,-225,596,585),4340=>array(-29,-225,588,831),4341=>array(26,0,680,829),4342=>array(38,-225,855,672),4343=>array(-24,-225,523,542),4344=>array(-19,-225,538,532),4345=>array(37,-225,590,537),4346=>array(48,-69,549,532),4347=>array(-8,0,400,486),4348=>array(104,341,481,845),7424=>array(-53,0,521,519),7425=>array(-71,0,762,519),7426=>array(45,-14,906,533),7427=>array(-15,0,560,519),7428=>array(50,-14,541,533),7429=>array(-15,0,543,519),7430=>array(-15,0,543,519),7431=>array(-21,0,541,519),7432=>array(32,-18,489,533),7433=>array(63,-214,283,522),7434=>array(-32,-14,504,519),7435=>array(-16,0,634,519),7436=>array(-9,0,502,519),7437=>array(-14,0,792,519),7438=>array(63,-14,666,519),7439=>array(42,-14,560,533),7440=>array(19,-14,510,533),7441=>array(50,9,597,511),7442=>array(46,27,593,492),7443=>array(49,-0,596,523),7444=>array(45,-14,946,533),7445=>array(3,-14,477,533),7446=>array(100,260,603,533),7447=>array(100,-14,603,259),7448=>array(8,0,540,519),7449=>array(-39,0,609,519),7450=>array(52,0,608,519),7451=>array(63,0,565,519),7452=>array(44,-14,634,519),7453=>array(8,-29,639,551),7454=>array(52,-29,899,551),7455=>array(-21,-205,670,680),7456=>array(38,0,612,519),7457=>array(57,0,893,519),7458=>array(-10,0,531,519),7459=>array(6,-14,533,519),7460=>array(5,-14,521,742),7461=>array(-15,-14,695,533),7462=>array(-16,0,531,519),7463=>array(-53,0,521,519),7464=>array(-9,0,671,519),7465=>array(8,0,540,519),7466=>array(77,0,729,520),7467=>array(-28,-14,651,519),7468=>array(-48,326,423,734),7469=>array(-55,326,637,734),7470=>array(-10,326,424,734),7471=>array(-5,334,456,742),7472=>array(-10,326,469,734),7473=>array(-10,326,449,734),7474=>array(-10,326,454,734),7475=>array(35,318,477,742),7476=>array(-10,326,559,734),7477=>array(-10,326,259,734),7478=>array(-106,209,281,734),7479=>array(-10,326,501,734),7480=>array(-10,326,381,734),7481=>array(-10,326,658,734),7482=>array(-13,318,569,734),7483=>array(52,318,564,734),7484=>array(33,318,481,742),7485=>array(5,326,341,750),7486=>array(-10,326,421,734),7487=>array(-10,326,451,734),7488=>array(30,326,458,734),7489=>array(69,318,548,734),7490=>array(42,326,690,734),7491=>array(21,318,333,625),7492=>array(42,318,354,625),7493=>array(26,327,413,632),7494=>array(28,318,571,625),7495=>array(18,318,354,751),7496=>array(31,318,397,751),7497=>array(31,318,350,625),7498=>array(31,318,350,625),7499=>array(101,316,391,625),7500=>array(31,316,321,625),7501=>array(31,202,439,625),7502=>array(23,207,161,619),7503=>array(18,326,338,751),7504=>array(23,326,533,625),7505=>array(23,202,330,625),7506=>array(31,318,357,625),7507=>array(31,318,346,625),7508=>array(31,472,353,625),7509=>array(31,318,352,471),7510=>array(18,209,379,625),7511=>array(18,318,238,707),7512=>array(17,318,335,617),7513=>array(9,310,399,635),7514=>array(23,326,533,625),7515=>array(-2,326,324,617),7516=>array(-6,326,439,633),7517=>array(-14,217,328,763),7518=>array(57,217,371,625),7519=>array(19,326,345,763),7520=>array(34,217,424,626),7521=>array(-32,209,407,633),7522=>array(32,0,170,412),7523=>array(44,0,324,299),7524=>array(17,-8,335,291),7525=>array(-2,0,324,291),7526=>array(-14,-109,328,437),7527=>array(57,-109,371,298),7528=>array(-1,-117,350,299),7529=>array(34,-109,424,300),7530=>array(-32,-117,407,307),7531=>array(67,-14,930,533),7543=>array(65,-222,627,533),7544=>array(-10,326,559,734),7547=>array(-14,0,347,519),7548=>array(31,0,303,519),7549=>array(43,-208,673,533),7550=>array(-0,-14,634,519),7551=>array(-19,-14,643,519),7557=>array(-55,-222,353,760),7579=>array(18,327,399,632),7580=>array(20,318,333,625),7581=>array(20,266,333,625),7582=>array(66,318,412,751),7583=>array(68,316,358,625),7584=>array(-39,209,326,751),7585=>array(18,202,299,617),7586=>array(40,202,448,617),7587=>array(41,209,358,617),7588=>array(29,326,200,738),7589=>array(42,326,159,617),7590=>array(-13,326,214,617),7591=>array(-13,326,214,617),7592=>array(-4,202,323,738),7593=>array(38,202,228,751),7594=>array(3,202,260,751),7595=>array(66,326,389,624),7596=>array(83,202,576,625),7597=>array(52,209,562,625),7598=>array(8,202,486,625),7599=>array(78,202,465,625),7600=>array(30,318,457,624),7601=>array(30,318,355,625),7602=>array(79,209,395,751),7603=>array(13,202,310,625),7604=>array(-42,202,341,752),7605=>array(35,202,299,707),7606=>array(14,318,385,617),7607=>array(72,324,408,626),7608=>array(25,326,396,625),7609=>array(80,324,382,617),7610=>array(24,326,349,617),7611=>array(-6,312,335,631),7612=>array(4,202,415,617),7613=>array(39,274,380,617),7614=>array(45,201,406,617),7615=>array(79,320,395,758),7620=>array(-416,616,6,800),7621=>array(-467,616,-108,800),7622=>array(-392,616,-33,800),7623=>array(-506,616,-84,800),7624=>array(-456,616,-44,800),7625=>array(-495,616,-5,800),7680=>array(-77,-241,671,729),7681=>array(33,-241,529,534),7682=>array(-16,0,673,921),7683=>array(42,-14,576,920),7684=>array(-16,-191,673,729),7685=>array(42,-187,576,760),7686=>array(-16,-147,673,729),7687=>array(42,-143,576,760),7688=>array(52,-193,747,927),7689=>array(42,-193,567,800),7690=>array(-16,0,745,921),7691=>array(20,-14,639,920),7692=>array(-16,-191,745,729),7693=>array(20,-191,601,760),7694=>array(-16,-147,745,729),7695=>array(20,-147,601,760),7696=>array(-16,-193,745,729),7697=>array(20,-193,601,760),7698=>array(-16,-240,745,729),7699=>array(-1,-240,601,760),7700=>array(-16,0,713,1044),7701=>array(42,-14,547,919),7702=>array(-16,0,713,1044),7703=>array(42,-14,576,919),7704=>array(-16,-240,713,729),7705=>array(42,-240,546,533),7706=>array(-16,-213,713,729),7707=>array(39,-213,546,533),7708=>array(-16,-193,713,928),7709=>array(42,-193,551,785),7710=>array(-16,0,723,921),7711=>array(-62,-208,518,921),7712=>array(56,-14,757,927),7713=>array(35,-222,597,745),7714=>array(-16,0,888,921),7715=>array(47,0,552,920),7716=>array(-16,-191,888,729),7717=>array(48,-191,553,760),7718=>array(-16,0,888,920),7719=>array(47,0,552,920),7720=>array(-16,-193,888,729),7721=>array(47,-193,552,760),7722=>array(-16,-217,888,729),7723=>array(47,-217,552,760),7724=>array(-79,-213,411,729),7725=>array(-118,-213,270,736),7726=>array(-16,0,482,1044),7727=>array(72,0,434,886),7728=>array(-16,0,795,927),7729=>array(41,0,549,961),7730=>array(-16,-191,795,729),7731=>array(41,-191,549,760),7732=>array(-16,-147,795,729),7733=>array(41,-147,549,760),7734=>array(-16,-191,605,729),7735=>array(23,-191,279,760),7736=>array(-16,-191,605,899),7737=>array(23,-191,425,900),7738=>array(-16,-147,605,729),7739=>array(-88,-147,279,760),7740=>array(-16,-240,605,729),7741=>array(-117,-240,279,760),7742=>array(-16,0,1044,927),7743=>array(69,0,879,800),7744=>array(-16,0,1044,921),7745=>array(70,0,879,766),7746=>array(-16,-191,1044,729),7747=>array(70,-191,879,533),7748=>array(-21,-14,903,920),7749=>array(70,0,575,766),7750=>array(-21,-191,903,729),7751=>array(70,-191,575,533),7752=>array(-21,-147,903,729),7753=>array(69,-147,574,533),7754=>array(-21,-240,903,729),7755=>array(70,-240,575,533),7756=>array(52,-14,764,1044),7757=>array(42,-14,597,881),7758=>array(52,-14,764,1050),7759=>array(42,-14,560,891),7760=>array(52,-14,764,1044),7761=>array(42,-14,560,919),7762=>array(52,-14,764,1044),7763=>array(42,-14,581,919),7764=>array(-16,0,668,931),7765=>array(43,-208,631,800),7766=>array(-16,0,668,921),7767=>array(43,-208,617,766),7768=>array(-16,0,716,921),7769=>array(69,0,527,766),7770=>array(-16,-191,716,729),7771=>array(38,-191,527,533),7772=>array(-16,-191,716,899),7773=>array(38,-191,527,745),7774=>array(-16,-147,716,729),7775=>array(-66,-147,527,533),7776=>array(29,-14,641,921),7777=>array(11,-14,479,766),7778=>array(29,-191,641,742),7779=>array(11,-191,479,533),7780=>array(29,-14,642,939),7781=>array(11,-14,547,757),7782=>array(29,-14,641,1049),7783=>array(11,-14,507,867),7784=>array(29,-191,641,921),7785=>array(11,-191,479,766),7786=>array(47,0,729,921),7787=>array(55,-14,404,920),7788=>array(47,-191,729,729),7789=>array(55,-191,404,680),7790=>array(46,-147,728,729),7791=>array(12,-147,404,680),7792=>array(47,-240,729,729),7793=>array(-18,-240,404,680),7794=>array(109,-191,870,729),7795=>array(62,-191,574,519),7796=>array(109,-213,870,729),7797=>array(35,-213,574,519),7798=>array(109,-240,870,729),7799=>array(39,-240,574,519),7800=>array(109,-14,870,1044),7801=>array(68,-14,579,881),7802=>array(109,-14,870,1032),7803=>array(68,-14,574,908),7804=>array(51,0,808,921),7805=>array(37,0,560,777),7806=>array(51,-191,808,729),7807=>array(38,-191,554,519),7808=>array(65,0,1096,927),7809=>array(56,0,836,776),7810=>array(65,0,1096,927),7811=>array(56,0,836,776),7812=>array(65,0,1096,920),7813=>array(56,0,836,766),7814=>array(65,0,1096,921),7815=>array(56,0,835,766),7816=>array(65,-191,1096,729),7817=>array(56,-191,835,519),7818=>array(-65,0,745,921),7819=>array(2,0,549,766),7820=>array(-65,0,745,920),7821=>array(2,0,549,766),7822=>array(49,0,740,921),7823=>array(-37,-222,576,766),7824=>array(-26,0,709,927),7825=>array(-11,-25,532,800),7826=>array(-26,-191,709,729),7827=>array(-11,-191,532,544),7828=>array(-26,-147,709,729),7829=>array(-11,-147,532,544),7830=>array(47,-147,552,760),7831=>array(55,-14,416,920),7832=>array(56,0,835,878),7833=>array(-37,-222,576,878),7834=>array(33,-14,874,760),7835=>array(-62,-208,518,921),7836=>array(-62,-208,518,760),7837=>array(-62,-208,518,760),7838=>array(-26,-14,771,743),7839=>array(27,-14,556,765),7840=>array(-77,-191,671,729),7841=>array(33,-191,529,534),7842=>array(-77,0,671,1034),7843=>array(33,-14,529,852),7844=>array(-77,0,764,1028),7845=>array(33,-14,697,846),7846=>array(-77,0,671,1028),7847=>array(33,-14,577,847),7848=>array(-77,0,742,1086),7849=>array(33,-14,675,904),7850=>array(-77,0,671,1043),7851=>array(33,-14,573,861),7852=>array(-77,-191,671,982),7853=>array(33,-191,529,800),7854=>array(-77,0,671,1044),7855=>array(33,-14,545,877),7856=>array(-77,0,671,1044),7857=>array(33,-14,536,877),7858=>array(-77,0,671,1109),7859=>array(33,-14,536,942),7860=>array(-77,0,671,1043),7861=>array(33,-14,559,876),7862=>array(-77,-191,671,967),7863=>array(33,-191,533,785),7864=>array(-16,-191,713,729),7865=>array(42,-191,547,533),7866=>array(-16,0,713,1034),7867=>array(42,-14,546,852),7868=>array(-16,0,713,921),7869=>array(42,-14,573,777),7870=>array(-16,0,786,1028),7871=>array(42,-14,725,846),7872=>array(-16,0,713,1028),7873=>array(42,-14,605,846),7874=>array(-16,0,765,1086),7875=>array(42,-14,703,904),7876=>array(-16,0,713,1043),7877=>array(42,-14,601,861),7878=>array(-16,-191,713,927),7879=>array(42,-191,546,800),7880=>array(-16,0,435,1034),7881=>array(48,0,350,852),7882=>array(-16,-191,411,729),7883=>array(25,-191,270,736),7884=>array(52,-191,764,742),7885=>array(42,-191,560,533),7886=>array(51,-14,764,1034),7887=>array(42,-14,559,852),7888=>array(52,-14,832,1028),7889=>array(42,-14,712,846),7890=>array(52,-14,764,1028),7891=>array(42,-14,593,846),7892=>array(52,-14,810,1086),7893=>array(42,-14,690,904),7894=>array(52,-14,764,1043),7895=>array(42,-14,588,861),7896=>array(51,-191,764,982),7897=>array(42,-191,559,800),7898=>array(49,-14,860,927),7899=>array(41,-14,684,800),7900=>array(49,-14,860,927),7901=>array(41,-14,684,799),7902=>array(49,-14,860,1034),7903=>array(41,-14,684,852),7904=>array(49,-14,860,921),7905=>array(41,-14,684,777),7906=>array(49,-191,860,760),7907=>array(41,-191,684,533),7908=>array(109,-191,870,729),7909=>array(68,-191,574,519),7910=>array(109,-14,870,1034),7911=>array(68,-14,574,852),7912=>array(106,-14,1064,927),7913=>array(63,-14,726,800),7914=>array(106,-14,1064,927),7915=>array(63,-14,726,799),7916=>array(106,-14,1064,1034),7917=>array(63,-14,726,852),7918=>array(106,-14,1064,921),7919=>array(63,-14,726,777),7920=>array(106,-191,1064,802),7921=>array(63,-191,726,532),7922=>array(49,0,740,927),7923=>array(-37,-222,575,776),7924=>array(49,-191,740,729),7925=>array(-37,-222,576,519),7926=>array(49,0,740,1037),7927=>array(-37,-222,576,852),7928=>array(49,0,740,921),7929=>array(-37,-222,576,777),7930=>array(-16,0,889,729),7931=>array(42,0,599,760),7936=>array(42,-12,655,829),7937=>array(42,-12,655,829),7938=>array(42,-12,655,829),7939=>array(42,-12,655,829),7940=>array(42,-12,655,829),7941=>array(42,-12,655,829),7942=>array(42,-12,655,994),7943=>array(42,-12,655,994),7944=>array(-77,0,671,829),7945=>array(-77,0,671,829),7946=>array(57,0,818,829),7947=>array(65,0,818,829),7948=>array(-65,0,683,829),7949=>array(-36,0,712,829),7950=>array(-77,0,671,994),7951=>array(-77,0,671,994),7952=>array(25,-19,499,829),7953=>array(25,-19,499,829),7954=>array(25,-19,499,829),7955=>array(25,-19,499,829),7956=>array(25,-19,534,829),7957=>array(25,-19,557,829),7960=>array(59,0,836,829),7961=>array(67,0,825,829),7962=>array(57,0,1050,829),7963=>array(65,0,1060,829),7964=>array(59,0,992,829),7965=>array(67,0,1018,829),7968=>array(90,-208,569,829),7969=>array(90,-208,569,829),7970=>array(90,-208,569,829),7971=>array(90,-208,569,829),7972=>array(90,-208,574,829),7973=>array(90,-208,577,829),7974=>array(90,-208,586,994),7975=>array(90,-208,586,994),7976=>array(59,0,1014,829),7977=>array(67,0,1008,829),7978=>array(57,0,1228,829),7979=>array(65,0,1240,829),7980=>array(59,0,1175,829),7981=>array(67,0,1199,829),7982=>array(97,0,1114,994),7983=>array(97,0,1111,994),7984=>array(77,22,302,829),7985=>array(77,22,302,829),7986=>array(46,22,404,829),7987=>array(51,22,402,829),7988=>array(77,22,450,829),7989=>array(73,22,452,829),7990=>array(77,22,439,994),7991=>array(77,22,441,994),7992=>array(59,0,537,829),7993=>array(67,0,528,829),7994=>array(57,0,751,829),7995=>array(65,0,754,829),7996=>array(59,0,695,829),7997=>array(67,0,722,829),7998=>array(97,0,640,994),7999=>array(97,0,631,994),8000=>array(42,-14,560,829),8001=>array(42,-14,560,829),8002=>array(42,-14,560,829),8003=>array(42,-14,560,829),8004=>array(42,-14,583,829),8005=>array(42,-14,573,829),8008=>array(52,-14,764,829),8009=>array(67,-14,804,829),8010=>array(57,-14,1064,829),8011=>array(65,-14,1072,829),8012=>array(59,-14,881,829),8013=>array(67,-14,908,829),8016=>array(77,-3,559,829),8017=>array(77,-3,559,829),8018=>array(77,-3,559,829),8019=>array(77,-3,559,829),8020=>array(77,-3,562,829),8021=>array(77,-3,576,829),8022=>array(77,-3,567,994),8023=>array(77,-3,561,994),8025=>array(67,0,931,829),8027=>array(65,0,1159,829),8029=>array(67,0,1124,829),8031=>array(97,0,1033,994),8032=>array(35,-3,767,829),8033=>array(35,-3,767,829),8034=>array(35,-3,767,829),8035=>array(35,-3,767,829),8036=>array(35,-3,767,829),8037=>array(35,-3,767,829),8038=>array(35,-3,767,994),8039=>array(35,-3,767,994),8040=>array(-10,0,775,829),8041=>array(31,0,816,829),8042=>array(57,0,1077,829),8043=>array(65,0,1083,829),8044=>array(59,0,892,829),8045=>array(67,0,921,829),8046=>array(97,0,883,994),8047=>array(97,0,916,994),8048=>array(42,-12,655,799),8049=>array(42,-12,655,800),8050=>array(25,-19,499,799),8051=>array(25,-19,516,800),8052=>array(90,-208,569,799),8053=>array(90,-208,569,800),8054=>array(77,22,302,799),8055=>array(77,22,426,800),8056=>array(42,-14,560,799),8057=>array(42,-14,570,800),8058=>array(77,-3,559,799),8059=>array(77,-3,559,800),8060=>array(35,-3,767,799),8061=>array(35,-3,767,800),8064=>array(42,-208,655,829),8065=>array(42,-208,655,829),8066=>array(42,-208,655,829),8067=>array(42,-208,655,829),8068=>array(42,-208,655,829),8069=>array(42,-208,655,829),8070=>array(42,-208,655,994),8071=>array(42,-208,655,994),8072=>array(-77,-208,671,829),8073=>array(-77,-208,671,829),8074=>array(57,-208,818,829),8075=>array(65,-208,818,829),8076=>array(-65,-208,683,829),8077=>array(-36,-208,712,829),8078=>array(-77,-208,671,994),8079=>array(-77,-208,671,994),8080=>array(83,-208,569,829),8081=>array(83,-208,569,829),8082=>array(83,-208,569,829),8083=>array(83,-208,569,829),8084=>array(83,-208,574,829),8085=>array(83,-208,577,829),8086=>array(83,-208,586,994),8087=>array(83,-208,586,994),8088=>array(59,-208,1014,829),8089=>array(67,-208,1008,829),8090=>array(57,-208,1228,829),8091=>array(65,-208,1240,829),8092=>array(59,-208,1175,829),8093=>array(67,-208,1199,829),8094=>array(97,-208,1114,994),8095=>array(97,-208,1111,994),8096=>array(35,-208,767,829),8097=>array(35,-208,767,829),8098=>array(35,-208,767,829),8099=>array(35,-208,767,829),8100=>array(35,-208,767,829),8101=>array(35,-208,767,829),8102=>array(35,-208,767,994),8103=>array(35,-208,767,994),8104=>array(-10,-208,775,829),8105=>array(31,-208,816,829),8106=>array(57,-208,1077,829),8107=>array(65,-208,1083,829),8108=>array(59,-208,892,829),8109=>array(67,-208,921,829),8110=>array(97,-208,883,994),8111=>array(97,-208,916,994),8112=>array(42,-12,655,785),8113=>array(42,-12,655,745),8114=>array(42,-208,655,799),8115=>array(42,-208,655,533),8116=>array(42,-208,655,800),8118=>array(42,-12,655,777),8119=>array(42,-208,655,777),8120=>array(-77,0,671,926),8121=>array(-77,0,671,899),8122=>array(-77,0,671,799),8123=>array(-77,0,671,800),8124=>array(-77,-208,671,729),8125=>array(240,606,383,829),8126=>array(215,-208,331,-60),8127=>array(240,606,383,829),8128=>array(179,639,527,777),8129=>array(193,652,568,944),8130=>array(83,-208,569,799),8131=>array(83,-208,569,533),8132=>array(83,-208,569,800),8134=>array(90,-208,586,777),8135=>array(83,-208,586,777),8136=>array(100,0,895,799),8137=>array(72,0,883,800),8138=>array(100,0,1079,799),8139=>array(72,0,1055,800),8140=>array(-16,-208,888,729),8141=>array(121,606,479,829),8142=>array(135,606,501,829),8143=>array(179,606,527,994),8144=>array(77,22,422,785),8145=>array(77,22,397,745),8146=>array(77,22,412,996),8147=>array(77,22,491,996),8150=>array(77,22,451,777),8151=>array(77,22,492,944),8152=>array(-16,0,411,729),8153=>array(-16,0,433,899),8154=>array(100,0,604,799),8155=>array(72,0,578,800),8157=>array(127,606,479,829),8158=>array(125,606,504,829),8159=>array(179,606,527,994),8160=>array(77,-3,559,785),8161=>array(77,-3,559,745),8162=>array(77,-3,559,996),8163=>array(77,-3,624,996),8164=>array(-9,-208,557,829),8165=>array(-9,-208,557,829),8166=>array(77,-3,563,777),8167=>array(77,-3,598,944),8168=>array(49,0,740,926),8169=>array(49,0,740,899),8170=>array(100,0,1001,799),8171=>array(72,0,978,800),8172=>array(67,0,786,829),8173=>array(193,652,497,996),8174=>array(193,652,581,996),8175=>array(179,615,366,799),8178=>array(35,-208,767,799),8179=>array(35,-208,767,519),8180=>array(35,-208,767,800),8182=>array(35,-3,767,730),8183=>array(35,-208,767,730),8184=>array(100,-14,906,799),8185=>array(67,-14,780,800),8186=>array(100,0,930,799),8187=>array(13,0,798,800),8188=>array(-10,-208,775,742),8189=>array(257,616,516,800),8190=>array(249,606,380,829),8208=>array(36,230,302,306),8209=>array(36,230,302,306),8210=>array(38,233,599,298),8211=>array(38,233,462,298),8212=>array(38,233,962,298),8213=>array(-6,233,1006,298),8214=>array(129,-236,369,764),8215=>array(0,-236,500,-80),8216=>array(78,495,285,742),8217=>array(54,482,262,729),8218=>array(27,-136,253,111),8219=>array(96,482,228,729),8220=>array(78,495,478,742),8221=>array(54,482,455,729),8222=>array(27,-136,446,111),8223=>array(96,482,421,729),8224=>array(53,-96,513,729),8225=>array(-13,-96,513,729),8226=>array(150,227,440,516),8227=>array(150,188,479,555),8228=>array(102,-14,232,116),8229=>array(102,-14,565,116),8230=>array(102,-14,898,116),8240=>array(90,-14,1252,742),8241=>array(90,-14,1645,742),8242=>array(2,547,221,729),8243=>array(2,547,367,729),8244=>array(2,547,514,729),8245=>array(90,547,238,729),8246=>array(90,547,385,729),8247=>array(90,547,531,729),8248=>array(5,-236,333,-30),8249=>array(73,69,350,517),8250=>array(50,69,327,517),8252=>array(8,-14,530,729),8253=>array(108,-14,524,742),8254=>array(0,716,500,755),8258=>array(16,-28,984,814),8260=>array(-257,-14,424,742),8261=>array(-0,-132,399,760),8262=>array(-9,-132,391,760),8263=>array(74,-14,978,742),8264=>array(107,-14,756,742),8265=>array(8,-14,722,742),8267=>array(42,-96,599,729),8268=>array(105,220,395,509),8269=>array(105,220,395,509),8270=>array(16,-28,484,427),8271=>array(108,-136,274,434),8273=>array(16,-6,484,929),8274=>array(-16,-93,481,729),8275=>array(49,233,951,394),8279=>array(2,547,660,729),8304=>array(23,319,363,742),8305=>array(32,326,170,738),8308=>array(7,326,359,734),8309=>array(15,319,388,727),8310=>array(17,319,381,742),8311=>array(42,326,388,734),8312=>array(15,319,384,742),8313=>array(8,319,372,742),8314=>array(67,326,461,677),8315=>array(67,479,461,524),8316=>array(67,424,461,580),8317=>array(50,239,257,751),8318=>array(-11,239,196,751),8319=>array(44,326,362,625),8320=>array(23,-7,363,416),8321=>array(46,0,292,408),8322=>array(3,0,352,416),8323=>array(13,-7,353,416),8324=>array(7,0,359,408),8325=>array(15,-7,388,401),8326=>array(17,-7,381,416),8327=>array(42,0,388,408),8328=>array(15,-7,384,416),8329=>array(8,-7,372,416),8330=>array(67,0,461,351),8331=>array(67,153,461,198),8332=>array(67,98,461,253),8333=>array(50,-87,257,425),8334=>array(-11,-87,196,425),8336=>array(21,-8,333,299),8337=>array(31,-8,350,299),8338=>array(31,-8,357,299),8339=>array(2,0,346,291),8340=>array(31,-8,350,299),8341=>array(34,0,346,425),8342=>array(18,0,338,425),8343=>array(37,0,179,425),8344=>array(23,0,533,299),8345=>array(44,0,362,299),8346=>array(18,-117,379,298),8347=>array(1,-8,298,299),8348=>array(18,-8,238,381),8358=>array(-11,-14,674,729),8364=>array(-24,-14,604,742),8367=>array(-26,-193,1077,723),8369=>array(-16,0,717,729),8372=>array(25,-14,765,742),8373=>array(85,-147,596,760),8376=>array(42,0,728,729),8377=>array(52,0,660,729),8451=>array(95,-14,1100,742),8457=>array(95,0,1077,742),8462=>array(48,0,553,760),8463=>array(48,0,552,760),8470=>array(-35,-14,890,729),8482=>array(118,447,826,729),8486=>array(-10,0,775,742),8487=>array(56,-13,840,729),8490=>array(-16,0,795,729),8491=>array(-96,0,652,928),8498=>array(-29,0,709,729),8513=>array(47,-14,728,742),8514=>array(59,0,529,729),8515=>array(3,0,599,729),8516=>array(-65,0,548,729),8523=>array(63,-14,859,742),8526=>array(-26,0,536,519),8528=>array(46,-14,956,742),8529=>array(46,-14,940,742),8530=>array(46,-14,1332,742),8531=>array(46,-14,921,742),8532=>array(3,-14,921,742),8533=>array(46,-14,956,742),8534=>array(3,-14,956,742),8535=>array(13,-14,956,742),8536=>array(7,-14,956,742),8537=>array(46,-14,949,742),8538=>array(15,-14,949,742),8539=>array(46,-14,952,742),8540=>array(13,-14,952,742),8541=>array(15,-14,952,742),8542=>array(42,-14,952,742),8543=>array(46,-14,825,742),8544=>array(-16,0,411,729),8545=>array(-16,0,606,729),8546=>array(-16,0,802,729),8547=>array(-16,0,1052,729),8548=>array(51,0,808,729),8549=>array(51,0,997,729),8550=>array(51,0,1192,729),8551=>array(51,0,1388,729),8552=>array(-16,0,965,729),8553=>array(-65,0,745,729),8554=>array(-65,0,948,729),8555=>array(-65,0,1144,729),8556=>array(-16,0,605,729),8557=>array(52,-14,747,742),8558=>array(-16,0,745,729),8559=>array(-16,0,1044,729),8560=>array(50,0,270,736),8561=>array(50,0,590,736),8562=>array(50,0,910,736),8563=>array(50,0,874,736),8564=>array(38,0,554,519),8565=>array(38,0,835,736),8566=>array(38,0,1155,736),8567=>array(38,0,1475,736),8568=>array(50,0,870,736),8569=>array(2,0,550,519),8570=>array(2,0,834,736),8571=>array(2,0,1154,736),8572=>array(41,0,279,760),8573=>array(42,-14,542,533),8574=>array(20,-14,601,760),8575=>array(70,0,879,533),8576=>array(46,0,1158,729),8577=>array(-16,0,754,729),8578=>array(46,0,1158,729),8579=>array(23,-14,715,742),8580=>array(30,-14,522,533),8581=>array(71,-208,765,742),8585=>array(23,-14,921,742),8592=>array(37,119,781,527),8593=>array(215,0,623,744),8594=>array(57,119,801,527),8595=>array(215,-20,623,724),8596=>array(37,119,801,527),8597=>array(215,-20,623,744),8598=>array(147,40,703,595),8599=>array(135,39,690,595),8600=>array(135,52,690,607),8601=>array(147,52,703,607),8602=>array(37,116,781,531),8603=>array(57,116,801,531),8604=>array(56,159,800,453),8605=>array(38,159,782,453),8606=>array(37,119,781,527),8607=>array(215,0,623,744),8608=>array(57,119,801,527),8609=>array(215,-20,623,724),8610=>array(37,119,784,527),8611=>array(54,119,801,527),8612=>array(37,119,781,527),8613=>array(215,0,623,744),8614=>array(57,119,801,527),8615=>array(215,-20,623,724),8616=>array(215,0,623,744),8617=>array(37,119,781,548),8618=>array(57,119,801,548),8619=>array(37,119,781,548),8620=>array(57,119,801,548),8621=>array(37,119,801,527),8622=>array(37,116,801,531),8623=>array(172,-13,688,730),8624=>array(232,0,593,744),8625=>array(245,0,605,744),8626=>array(232,-20,593,724),8627=>array(245,-20,605,724),8628=>array(130,102,728,609),8629=>array(159,53,667,650),8630=>array(44,145,769,540),8631=>array(69,145,794,540),8632=>array(132,40,706,717),8633=>array(57,-52,781,698),8634=>array(93,71,754,604),8635=>array(83,71,745,604),8636=>array(34,284,781,527),8637=>array(34,119,781,363),8638=>array(379,0,623,747),8639=>array(215,0,458,747),8640=>array(57,284,804,527),8641=>array(57,119,804,363),8642=>array(379,-23,623,724),8643=>array(215,-23,458,724),8644=>array(37,-52,801,698),8645=>array(44,-20,794,744),8646=>array(37,-52,801,698),8647=>array(37,-101,781,747),8648=>array(-5,0,843,744),8649=>array(57,-101,801,747),8650=>array(-5,-20,843,724),8651=>array(34,21,804,625),8652=>array(34,21,804,625),8653=>array(37,83,781,563),8654=>array(37,83,801,563),8655=>array(57,83,801,563),8656=>array(37,119,781,527),8657=>array(215,0,623,744),8658=>array(57,119,801,527),8659=>array(215,-20,623,724),8660=>array(37,119,801,527),8661=>array(215,-20,623,744),8662=>array(147,-21,763,595),8663=>array(75,-21,690,595),8664=>array(75,52,690,667),8665=>array(147,52,763,667),8666=>array(37,70,781,576),8667=>array(57,70,801,576),8668=>array(37,119,781,527),8669=>array(57,119,801,527),8670=>array(215,0,623,744),8671=>array(215,-20,623,724),8672=>array(37,119,781,527),8673=>array(215,0,623,744),8674=>array(57,119,801,527),8675=>array(215,-20,623,724),8676=>array(57,119,781,527),8677=>array(57,119,781,527),8678=>array(37,119,781,527),8679=>array(215,0,623,744),8680=>array(57,119,801,527),8681=>array(215,-20,623,724),8682=>array(215,0,623,744),8683=>array(192,0,646,744),8684=>array(192,0,646,744),8685=>array(192,0,646,744),8686=>array(215,0,623,744),8687=>array(192,0,646,744),8688=>array(57,96,801,550),8689=>array(82,0,767,689),8690=>array(71,0,756,689),8691=>array(215,-20,623,744),8692=>array(57,119,801,527),8693=>array(44,-20,794,744),8694=>array(57,-140,801,786),8695=>array(37,119,781,527),8696=>array(57,119,801,527),8697=>array(37,119,801,527),8698=>array(37,119,781,527),8699=>array(57,119,801,527),8700=>array(37,119,801,527),8701=>array(37,119,781,527),8702=>array(57,119,801,527),8703=>array(37,119,801,527),8704=>array(4,0,599,729),8706=>array(51,-12,469,647),8707=>array(61,0,464,729),8708=>array(61,-116,464,845),8710=>array(25,0,667,729),8711=>array(25,0,667,729),8712=>array(106,0,634,627),8713=>array(106,-132,634,759),8715=>array(106,0,634,627),8716=>array(106,-132,634,759),8719=>array(26,-192,769,719),8720=>array(26,-192,769,719),8721=>array(8,-192,701,719),8722=>array(106,274,732,353),8723=>array(106,0,732,627),8724=>array(106,0,732,659),8725=>array(-80,-93,417,729),8727=>array(106,85,574,541),8728=>array(106,175,384,454),8729=>array(106,175,384,454),8730=>array(30,-20,637,811),8731=>array(30,-20,637,938),8732=>array(30,-20,637,929),8733=>array(108,108,569,491),8734=>array(108,108,726,491),8735=>array(138,99,700,661),8736=>array(138,99,700,661),8739=>array(106,-98,185,827),8740=>array(86,-98,392,827),8741=>array(106,-98,356,827),8742=>array(86,-98,547,827),8743=>array(128,0,604,584),8744=>array(128,0,604,584),8745=>array(105,0,732,627),8746=>array(105,-12,732,615),8747=>array(23,-181,497,757),8748=>array(23,-181,828,757),8749=>array(23,-181,1158,757),8760=>array(106,274,732,559),8761=>array(106,68,732,559),8762=>array(106,68,732,559),8763=>array(106,68,732,559),8764=>array(106,233,732,394),8765=>array(106,233,732,394),8770=>array(106,138,732,452),8771=>array(106,175,732,489),8776=>array(106,138,732,489),8784=>array(106,175,732,658),8785=>array(106,-31,732,658),8786=>array(106,-31,732,658),8787=>array(106,-31,732,658),8788=>array(106,149,927,478),8789=>array(106,149,927,478),8800=>array(106,19,732,608),8801=>array(106,93,732,534),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8834=>array(106,0,732,627),8835=>array(106,0,732,627),8836=>array(106,-132,732,759),8837=>array(106,-132,732,759),8838=>array(106,-73,732,700),8839=>array(106,-73,732,700),8844=>array(105,-12,732,615),8845=>array(105,-12,732,615),8846=>array(105,-12,732,615),8847=>array(106,0,740,627),8848=>array(106,0,740,627),8849=>array(106,-73,740,700),8850=>array(106,-73,740,700),8851=>array(105,0,732,635),8852=>array(105,0,732,635),8853=>array(105,0,732,627),8854=>array(105,0,732,627),8855=>array(105,0,732,627),8856=>array(105,0,732,627),8857=>array(105,0,732,627),8858=>array(105,0,732,627),8859=>array(105,0,732,627),8860=>array(105,0,732,627),8861=>array(105,0,732,627),8862=>array(105,0,732,627),8863=>array(105,0,732,627),8864=>array(105,0,732,627),8865=>array(105,0,732,627),8866=>array(106,0,754,729),8867=>array(106,0,754,729),8868=>array(106,0,834,688),8869=>array(106,0,834,688),8870=>array(106,0,461,729),8871=>array(106,0,461,729),8872=>array(106,0,754,729),8873=>array(106,0,754,729),8874=>array(106,0,754,729),8875=>array(106,0,925,729),8876=>array(106,-115,754,844),8877=>array(106,-115,754,844),8878=>array(106,-115,754,844),8879=>array(106,-115,925,844),8901=>array(106,282,236,412),8962=>array(71,0,692,596),8968=>array(-1,-132,400,760),8969=>array(124,-132,391,760),8970=>array(-1,-132,266,760),8971=>array(-10,-132,391,760),8976=>array(106,140,732,421),8977=>array(3,126,510,634),8984=>array(121,0,879,759),8985=>array(106,140,732,421),8992=>array(210,-250,497,928),8993=>array(21,-237,307,942),8997=>array(84,0,916,723),9000=>array(59,0,1385,729),9085=>array(5,-228,914,101),9115=>array(86,-252,414,946),9116=>array(86,-252,181,942),9117=>array(86,-240,414,942),9118=>array(86,-252,414,946),9119=>array(319,-252,414,942),9120=>array(86,-240,414,942),9121=>array(86,-252,414,928),9122=>array(86,-252,181,942),9123=>array(86,-240,414,942),9124=>array(86,-252,414,928),9125=>array(319,-252,414,935),9126=>array(86,-240,414,935),9127=>array(330,-261,668,928),9128=>array(82,-252,420,940),9129=>array(330,-240,668,940),9130=>array(330,-256,420,943),9131=>array(82,-261,420,928),9132=>array(330,-252,668,940),9133=>array(82,-240,420,940),9134=>array(210,-250,307,942),9167=>array(91,0,854,596),9251=>array(26,-228,711,101),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,779,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-124,854,643),9633=>array(91,-124,854,643),9634=>array(91,-124,854,643),9635=>array(91,-124,854,643),9636=>array(91,-124,854,643),9637=>array(91,-124,854,643),9638=>array(91,-124,854,643),9639=>array(91,-124,854,643),9640=>array(91,-124,854,643),9641=>array(91,-124,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-124,766,643),9651=>array(3,-124,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-124,766,643),9655=>array(3,-124,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-124,766,643),9661=>array(3,-124,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-124,766,643),9665=>array(3,-124,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-124,766,643),9671=>array(3,-124,766,643),9672=>array(3,-124,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,385,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,385,260),9696=>array(55,260,818,645),9697=>array(55,-125,818,260),9698=>array(3,-124,766,643),9699=>array(3,-124,766,643),9700=>array(3,-124,766,643),9701=>array(3,-124,766,643),9702=>array(150,227,440,516),9703=>array(91,-124,854,643),9704=>array(91,-124,854,643),9705=>array(91,-124,854,643),9706=>array(91,-124,854,643),9707=>array(91,-124,854,643),9708=>array(3,-124,766,643),9709=>array(3,-124,766,643),9710=>array(3,-124,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-124,854,643),9713=>array(91,-124,854,643),9714=>array(91,-124,854,643),9715=>array(91,-124,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-124,766,643),9721=>array(3,-124,766,643),9722=>array(3,-124,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-124,766,643),9728=>array(83,0,813,729),9784=>array(80,3,817,721),9785=>array(83,0,813,730),9786=>array(83,0,813,730),9787=>array(83,0,813,730),9788=>array(83,0,813,730),9791=>array(85,-102,528,732),9792=>array(85,-125,646,731),9793=>array(85,-125,646,731),9794=>array(85,-5,831,729),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),10145=>array(57,119,801,527),10181=>array(4,-163,374,769),10182=>array(-37,-163,410,769),10208=>array(3,-233,491,807),10216=>array(89,-132,397,759),10217=>array(-7,-132,301,759),10224=>array(68,0,770,744),10225=>array(68,-20,770,724),10226=>array(49,53,774,613),10227=>array(63,53,789,613),10228=>array(57,10,996,637),10229=>array(37,119,1376,527),10230=>array(57,119,1396,527),10231=>array(37,119,1396,527),10232=>array(37,119,1376,527),10233=>array(57,119,1396,527),10234=>array(37,119,1396,527),10235=>array(37,119,1376,527),10236=>array(57,119,1396,527),10237=>array(37,119,1376,527),10238=>array(57,119,1396,527),10239=>array(57,119,1396,527),10241=>array(139,627,300,789),10242=>array(139,351,300,512),10243=>array(139,351,300,789),10244=>array(139,74,300,236),10245=>array(139,74,300,789),10246=>array(139,74,300,512),10247=>array(139,74,300,789),10248=>array(432,627,593,789),10249=>array(139,627,593,789),10250=>array(139,351,593,789),10251=>array(139,351,593,789),10252=>array(139,74,593,789),10253=>array(139,74,593,789),10254=>array(139,74,593,789),10255=>array(139,74,593,789),10256=>array(432,351,593,512),10257=>array(139,351,593,789),10258=>array(139,351,593,512),10259=>array(139,351,593,789),10260=>array(139,74,593,512),10261=>array(139,74,593,789),10262=>array(139,74,593,512),10263=>array(139,74,593,789),10264=>array(432,351,593,789),10265=>array(139,351,593,789),10266=>array(139,351,593,789),10267=>array(139,351,593,789),10268=>array(139,74,593,789),10269=>array(139,74,593,789),10270=>array(139,74,593,789),10271=>array(139,74,593,789),10272=>array(432,74,593,236),10273=>array(139,74,593,789),10274=>array(139,74,593,512),10275=>array(139,74,593,789),10276=>array(139,74,593,236),10277=>array(139,74,593,789),10278=>array(139,74,593,512),10279=>array(139,74,593,789),10280=>array(432,74,593,789),10281=>array(139,74,593,789),10282=>array(139,74,593,789),10283=>array(139,74,593,789),10284=>array(139,74,593,789),10285=>array(139,74,593,789),10286=>array(139,74,593,789),10287=>array(139,74,593,789),10288=>array(432,74,593,512),10289=>array(139,74,593,789),10290=>array(139,74,593,512),10291=>array(139,74,593,789),10292=>array(139,74,593,512),10293=>array(139,74,593,789),10294=>array(139,74,593,512),10295=>array(139,74,593,789),10296=>array(432,74,593,789),10297=>array(139,74,593,789),10298=>array(139,74,593,789),10299=>array(139,74,593,789),10300=>array(139,74,593,789),10301=>array(139,74,593,789),10302=>array(139,74,593,789),10303=>array(139,74,593,789),10304=>array(139,-203,300,-41),10305=>array(139,-203,300,789),10306=>array(139,-203,300,512),10307=>array(139,-203,300,789),10308=>array(139,-203,300,236),10309=>array(139,-203,300,789),10310=>array(139,-203,300,512),10311=>array(139,-203,300,789),10312=>array(139,-203,593,789),10313=>array(139,-203,593,789),10314=>array(139,-203,593,789),10315=>array(139,-203,593,789),10316=>array(139,-203,593,789),10317=>array(139,-203,593,789),10318=>array(139,-203,593,789),10319=>array(139,-203,593,789),10320=>array(139,-203,593,512),10321=>array(139,-203,593,789),10322=>array(139,-203,593,512),10323=>array(139,-203,593,789),10324=>array(139,-203,593,512),10325=>array(139,-203,593,789),10326=>array(139,-203,593,512),10327=>array(139,-203,593,789),10328=>array(139,-203,593,789),10329=>array(139,-203,593,789),10330=>array(139,-203,593,789),10331=>array(139,-203,593,789),10332=>array(139,-203,593,789),10333=>array(139,-203,593,789),10334=>array(139,-203,593,789),10335=>array(139,-203,593,789),10336=>array(139,-203,593,236),10337=>array(139,-203,593,789),10338=>array(139,-203,593,512),10339=>array(139,-203,593,789),10340=>array(139,-203,593,236),10341=>array(139,-203,593,789),10342=>array(139,-203,593,512),10343=>array(139,-203,593,789),10344=>array(139,-203,593,789),10345=>array(139,-203,593,789),10346=>array(139,-203,593,789),10347=>array(139,-203,593,789),10348=>array(139,-203,593,789),10349=>array(139,-203,593,789),10350=>array(139,-203,593,789),10351=>array(139,-203,593,789),10352=>array(139,-203,593,512),10353=>array(139,-203,593,789),10354=>array(139,-203,593,512),10355=>array(139,-203,593,789),10356=>array(139,-203,593,512),10357=>array(139,-203,593,789),10358=>array(139,-203,593,512),10359=>array(139,-203,593,789),10360=>array(139,-203,593,789),10361=>array(139,-203,593,789),10362=>array(139,-203,593,789),10363=>array(139,-203,593,789),10364=>array(139,-203,593,789),10365=>array(139,-203,593,789),10366=>array(139,-203,593,789),10367=>array(139,-203,593,789),10368=>array(432,-203,593,-41),10369=>array(139,-203,593,789),10370=>array(139,-203,593,512),10371=>array(139,-203,593,789),10372=>array(139,-203,593,236),10373=>array(139,-203,593,789),10374=>array(139,-203,593,512),10375=>array(139,-203,593,789),10376=>array(432,-203,593,789),10377=>array(139,-203,593,789),10378=>array(139,-203,593,789),10379=>array(139,-203,593,789),10380=>array(139,-203,593,789),10381=>array(139,-203,593,789),10382=>array(139,-203,593,789),10383=>array(139,-203,593,789),10384=>array(432,-203,593,512),10385=>array(139,-203,593,789),10386=>array(139,-203,593,512),10387=>array(139,-203,593,789),10388=>array(139,-203,593,512),10389=>array(139,-203,593,789),10390=>array(139,-203,593,512),10391=>array(139,-203,593,789),10392=>array(432,-203,593,789),10393=>array(139,-203,593,789),10394=>array(139,-203,593,789),10395=>array(139,-203,593,789),10396=>array(139,-203,593,789),10397=>array(139,-203,593,789),10398=>array(139,-203,593,789),10399=>array(139,-203,593,789),10400=>array(432,-203,593,236),10401=>array(139,-203,593,789),10402=>array(139,-203,593,512),10403=>array(139,-203,593,789),10404=>array(139,-203,593,236),10405=>array(139,-203,593,789),10406=>array(139,-203,593,512),10407=>array(139,-203,593,789),10408=>array(432,-203,593,789),10409=>array(139,-203,593,789),10410=>array(139,-203,593,789),10411=>array(139,-203,593,789),10412=>array(139,-203,593,789),10413=>array(139,-203,593,789),10414=>array(139,-203,593,789),10415=>array(139,-203,593,789),10416=>array(432,-203,593,512),10417=>array(139,-203,593,789),10418=>array(139,-203,593,512),10419=>array(139,-203,593,789),10420=>array(139,-203,593,512),10421=>array(139,-203,593,789),10422=>array(139,-203,593,512),10423=>array(139,-203,593,789),10424=>array(432,-203,593,789),10425=>array(139,-203,593,789),10426=>array(139,-203,593,789),10427=>array(139,-203,593,789),10428=>array(139,-203,593,789),10429=>array(139,-203,593,789),10430=>array(139,-203,593,789),10431=>array(139,-203,593,789),10432=>array(139,-203,593,-41),10433=>array(139,-203,593,789),10434=>array(139,-203,593,512),10435=>array(139,-203,593,789),10436=>array(139,-203,593,236),10437=>array(139,-203,593,789),10438=>array(139,-203,593,512),10439=>array(139,-203,593,789),10440=>array(139,-203,593,789),10441=>array(139,-203,593,789),10442=>array(139,-203,593,789),10443=>array(139,-203,593,789),10444=>array(139,-203,593,789),10445=>array(139,-203,593,789),10446=>array(139,-203,593,789),10447=>array(139,-203,593,789),10448=>array(139,-203,593,512),10449=>array(139,-203,593,789),10450=>array(139,-203,593,512),10451=>array(139,-203,593,789),10452=>array(139,-203,593,512),10453=>array(139,-203,593,789),10454=>array(139,-203,593,512),10455=>array(139,-203,593,789),10456=>array(139,-203,593,789),10457=>array(139,-203,593,789),10458=>array(139,-203,593,789),10459=>array(139,-203,593,789),10460=>array(139,-203,593,789),10461=>array(139,-203,593,789),10462=>array(139,-203,593,789),10463=>array(139,-203,593,789),10464=>array(139,-203,593,236),10465=>array(139,-203,593,789),10466=>array(139,-203,593,512),10467=>array(139,-203,593,789),10468=>array(139,-203,593,236),10469=>array(139,-203,593,789),10470=>array(139,-203,593,512),10471=>array(139,-203,593,789),10472=>array(139,-203,593,789),10473=>array(139,-203,593,789),10474=>array(139,-203,593,789),10475=>array(139,-203,593,789),10476=>array(139,-203,593,789),10477=>array(139,-203,593,789),10478=>array(139,-203,593,789),10479=>array(139,-203,593,789),10480=>array(139,-203,593,512),10481=>array(139,-203,593,789),10482=>array(139,-203,593,512),10483=>array(139,-203,593,789),10484=>array(139,-203,593,512),10485=>array(139,-203,593,789),10486=>array(139,-203,593,512),10487=>array(139,-203,593,789),10488=>array(139,-203,593,789),10489=>array(139,-203,593,789),10490=>array(139,-203,593,789),10491=>array(139,-203,593,789),10492=>array(139,-203,593,789),10493=>array(139,-203,593,789),10494=>array(139,-203,593,789),10495=>array(139,-203,593,789),10496=>array(57,119,801,527),10497=>array(57,119,801,527),10498=>array(37,119,781,527),10499=>array(57,119,801,527),10500=>array(37,119,801,527),10501=>array(57,119,801,527),10502=>array(37,119,781,527),10503=>array(57,119,801,527),10504=>array(215,-20,623,724),10505=>array(215,0,623,744),10506=>array(166,0,672,744),10507=>array(166,-20,672,724),10508=>array(37,119,781,527),10509=>array(57,119,801,527),10510=>array(37,119,781,527),10511=>array(57,119,801,527),10512=>array(54,119,801,527),10513=>array(54,119,801,527),10514=>array(215,0,623,724),10515=>array(215,0,623,724),10516=>array(54,119,801,527),10517=>array(54,119,801,527),10518=>array(54,119,801,527),10519=>array(54,119,801,527),10520=>array(54,119,801,527),10521=>array(57,119,784,527),10522=>array(54,119,781,527),10523=>array(57,119,784,527),10524=>array(54,119,781,527),10525=>array(37,119,781,527),10526=>array(57,119,801,527),10527=>array(37,119,781,527),10528=>array(57,119,801,527),10529=>array(147,51,691,595),10530=>array(147,51,690,595),10531=>array(147,-37,648,595),10532=>array(189,-38,690,595),10533=>array(189,52,690,684),10534=>array(147,52,648,684),10535=>array(135,40,703,595),10536=>array(135,40,691,607),10537=>array(135,52,703,607),10538=>array(147,40,703,607),10539=>array(135,40,703,607),10540=>array(135,40,703,607),10541=>array(135,40,691,607),10542=>array(135,40,691,607),10543=>array(135,40,703,607),10544=>array(135,40,703,607),10545=>array(135,40,703,595),10546=>array(135,40,703,595),10547=>array(37,119,801,527),10548=>array(146,98,706,610),10549=>array(147,90,707,602),10550=>array(159,70,671,629),10551=>array(167,70,679,629),10552=>array(292,-0,586,732),10553=>array(251,-0,545,732),10554=>array(56,197,789,491),10555=>array(51,156,784,450),10556=>array(49,82,782,491),10557=>array(56,0,789,491),10558=>array(145,30,678,609),10559=>array(160,30,693,609),10560=>array(139,53,699,778),10561=>array(139,53,699,778),10562=>array(37,-52,801,698),10563=>array(37,-52,801,698),10564=>array(37,-52,801,698),10565=>array(57,0,801,527),10566=>array(37,0,781,527),10567=>array(57,119,801,527),10568=>array(37,119,801,527),10569=>array(215,-10,623,744),10570=>array(34,119,804,527),10571=>array(34,119,804,527),10572=>array(215,-23,623,747),10573=>array(215,-23,623,747),10574=>array(34,284,804,527),10575=>array(379,-23,623,747),10576=>array(34,119,804,363),10577=>array(215,-23,458,747),10578=>array(57,131,781,527),10579=>array(57,131,781,527),10580=>array(227,0,623,724),10581=>array(227,0,623,724),10582=>array(57,119,781,515),10583=>array(57,119,781,515),10584=>array(215,0,611,724),10585=>array(215,0,611,724),10586=>array(34,131,781,527),10587=>array(57,131,804,527),10588=>array(227,0,623,747),10589=>array(227,-23,623,724),10590=>array(34,119,781,515),10591=>array(57,119,804,515),10592=>array(215,0,611,747),10593=>array(215,-23,611,724),10594=>array(34,21,781,625),10595=>array(117,0,721,747),10596=>array(57,21,804,625),10597=>array(117,-23,721,724),10598=>array(34,186,804,625),10599=>array(34,21,804,460),10600=>array(34,186,804,625),10601=>array(34,21,804,460),10602=>array(34,203,781,608),10603=>array(34,38,781,444),10604=>array(57,203,804,608),10605=>array(57,38,804,444),10606=>array(117,-23,721,747),10607=>array(117,-23,721,747),10608=>array(57,191,781,456),10609=>array(57,119,801,680),10610=>array(57,119,801,572),10611=>array(37,74,781,527),10612=>array(57,74,801,527),10613=>array(57,-71,801,527),10614=>array(37,-76,781,776),10615=>array(37,56,924,591),10616=>array(57,-76,801,776),10617=>array(57,-76,801,723),10618=>array(37,10,927,637),10619=>array(37,-76,781,723),10620=>array(169,21,682,625),10621=>array(156,21,669,625),10622=>array(117,67,721,580),10623=>array(117,59,721,571),10731=>array(3,-233,491,807),10764=>array(23,-181,1489,757),10765=>array(23,-181,497,757),10766=>array(23,-181,497,757),10799=>array(138,33,700,594),10858=>array(106,233,732,559),10859=>array(106,68,732,559),11008=>array(71,-28,690,591),11009=>array(148,-28,767,591),11010=>array(71,52,690,671),11011=>array(148,52,767,671),11012=>array(37,119,801,527),11013=>array(37,119,781,527),11014=>array(215,0,623,744),11015=>array(215,-20,623,724),11016=>array(71,-28,690,591),11017=>array(148,-28,767,591),11018=>array(71,52,690,671),11019=>array(148,52,767,671),11020=>array(37,119,801,527),11021=>array(215,-20,623,744),11022=>array(57,137,801,498),11023=>array(57,149,801,510),11024=>array(37,137,781,498),11025=>array(37,149,781,510),11026=>array(91,-124,854,643),11027=>array(91,-124,854,643),11028=>array(91,-124,854,643),11029=>array(91,-124,854,643),11030=>array(3,-124,766,643),11031=>array(3,-124,766,643),11032=>array(3,-124,766,643),11033=>array(3,-124,766,643),11034=>array(91,-124,854,643),11360=>array(-16,0,604,729),11361=>array(-2,0,323,760),11363=>array(-16,0,668,729),11364=>array(101,-208,736,729),11367=>array(-0,-157,903,729),11368=>array(48,-208,632,760),11369=>array(-0,-157,810,729),11370=>array(42,-208,569,760),11371=>array(-11,-157,724,729),11372=>array(-10,-208,531,544),11373=>array(44,-14,802,742),11374=>array(4,-208,1064,729),11375=>array(55,0,803,729),11376=>array(-7,-14,750,742),11377=>array(36,0,711,530),11378=>array(65,0,1194,729),11379=>array(55,0,988,530),11381=>array(-16,0,714,729),11382=>array(65,0,489,519),11383=>array(36,-15,657,521),11385=>array(-37,-14,434,760),11386=>array(50,-14,552,533),11387=>array(7,0,575,519),11388=>array(-26,-124,259,413),11389=>array(28,326,504,734),11390=>array(48,-208,659,742),11391=>array(-6,-208,729,729),11520=>array(112,-54,786,512),11521=>array(46,-221,648,512),11522=>array(-3,-221,646,512),11523=>array(118,-1,697,760),11524=>array(55,-221,654,512),11525=>array(59,-220,975,512),11526=>array(136,0,769,760),11527=>array(59,0,974,511),11528=>array(116,0,630,512),11529=>array(59,-220,659,729),11530=>array(52,0,969,512),11531=>array(123,-1,679,760),11532=>array(59,0,659,760),11533=>array(58,-1,976,512),11534=>array(59,0,658,512),11535=>array(85,-221,914,760),11536=>array(59,0,974,760),11537=>array(59,0,658,760),11538=>array(47,-220,632,511),11539=>array(59,-224,990,636),11540=>array(107,-220,893,553),11541=>array(80,-221,865,760),11542=>array(59,0,657,512),11543=>array(59,-220,659,512),11544=>array(59,-221,658,512),11545=>array(95,-220,663,760),11546=>array(100,-220,701,512),11547=>array(106,0,680,760),11548=>array(116,-220,995,512),11549=>array(47,-220,694,512),11550=>array(90,-220,689,512),11551=>array(40,-221,865,515),11552=>array(63,0,980,512),11553=>array(68,-220,646,760),11554=>array(89,-2,616,578),11555=>array(59,-220,694,760),11556=>array(59,-220,762,512),11557=>array(121,-2,895,760),11800=>array(32,-13,448,743),11807=>array(106,68,732,394),11810=>array(85,314,400,760),11811=>array(153,314,391,760),11812=>array(-1,-132,237,314),11813=>array(-10,-132,304,314),11822=>array(104,-14,552,742),42564=>array(52,-14,647,742),42565=>array(34,-14,485,533),42566=>array(110,0,411,729),42567=>array(76,0,263,519),42576=>array(74,0,1121,729),42577=>array(39,-14,869,534),42580=>array(65,-14,1209,742),42581=>array(45,-14,806,533),42582=>array(-16,0,1088,729),42583=>array(70,-14,808,533),42760=>array(157,0,454,668),42761=>array(127,0,454,668),42762=>array(98,0,454,668),42763=>array(69,0,454,668),42764=>array(40,0,454,668),42765=>array(40,0,454,668),42766=>array(40,0,425,668),42767=>array(40,0,396,668),42768=>array(40,0,366,668),42769=>array(40,0,337,668),42770=>array(40,0,454,668),42771=>array(40,0,425,668),42772=>array(40,0,396,668),42773=>array(40,0,366,668),42774=>array(40,0,337,668),42779=>array(178,326,435,743),42780=>array(140,315,397,731),42781=>array(155,318,309,734),42782=>array(150,326,305,742),42783=>array(87,0,241,416),42790=>array(4,-208,908,729),42791=>array(70,-222,548,760),42792=>array(69,-224,818,729),42793=>array(75,-224,735,680),42794=>array(8,-14,587,742),42795=>array(17,-14,533,742),42796=>array(2,-14,505,729),42797=>array(2,-222,494,519),42798=>array(10,-92,594,729),42799=>array(4,-242,569,519),42800=>array(-21,0,541,519),42801=>array(11,-14,479,533),42802=>array(-77,0,1144,729),42803=>array(34,-14,876,533),42804=>array(-77,-14,1170,742),42805=>array(34,-14,907,533),42806=>array(-86,-14,1177,729),42807=>array(34,-14,863,533),42808=>array(-77,0,1054,729),42809=>array(34,-14,797,533),42810=>array(-77,0,1054,729),42811=>array(30,-14,793,533),42812=>array(-57,-208,1068,729),42813=>array(34,-222,770,533),42814=>array(23,-14,715,742),42815=>array(30,-14,522,533),42816=>array(-16,0,795,729),42817=>array(42,0,549,760),42822=>array(107,0,727,729),42823=>array(93,0,340,760),42826=>array(-10,-14,943,742),42827=>array(-10,-14,721,533),42830=>array(52,-14,1360,742),42831=>array(50,-14,949,533),42856=>array(-36,-208,707,729),42857=>array(44,-208,588,519),42875=>array(48,-208,660,743),42876=>array(50,-208,547,533),42880=>array(60,0,680,729),42881=>array(42,-240,279,519),42882=>array(48,-208,751,743),42883=>array(50,-208,601,533),42884=>array(48,-208,660,743),42885=>array(50,-208,547,533),42886=>array(53,-14,787,729),42887=>array(51,-14,576,519),42891=>array(141,205,336,729),42892=>array(72,458,202,729),42893=>array(70,0,792,729),42896=>array(-7,-157,917,729),42897=>array(70,-208,654,533),42922=>array(-68,0,888,729),43002=>array(-14,0,971,519),43003=>array(82,0,709,729),43004=>array(66,0,688,729),43005=>array(-21,0,1039,729),43006=>array(-35,0,430,928),43007=>array(-77,0,1269,729),62464=>array(-0,0,575,866),62465=>array(12,0,584,865),62466=>array(7,0,633,864),62467=>array(80,0,928,865),62468=>array(-4,0,655,865),62469=>array(-8,0,640,866),62470=>array(76,0,690,865),62471=>array(36,1,961,865),62472=>array(40,0,636,865),62473=>array(2,0,634,865),62474=>array(88,0,1236,865),62475=>array(14,0,677,865),62476=>array(29,0,696,867),62477=>array(45,-107,923,865),62478=>array(4,0,644,865),62479=>array(-1,0,717,866),62480=>array(24,-0,921,843),62481=>array(60,0,657,865),62482=>array(28,0,729,865),62483=>array(71,0,741,865),62484=>array(90,0,943,865),62485=>array(-6,0,713,852),62486=>array(85,0,930,865),62487=>array(-3,0,712,864),62488=>array(20,0,685,865),62489=>array(-32,0,604,865),62490=>array(21,0,692,859),62491=>array(17,0,674,865),62492=>array(25,0,732,865),62493=>array(-5,0,624,872),62494=>array(66,0,650,865),62495=>array(-24,-10,895,863),62496=>array(-2,0,659,869),62497=>array(31,0,766,866),62498=>array(-33,-40,639,865),62499=>array(1,0,717,878),62500=>array(-6,0,657,865),62501=>array(-9,0,701,865),62502=>array(70,0,943,865),62504=>array(95,-220,873,760),63172=>array(54,0,359,745),63173=>array(21,-14,584,747),63174=>array(35,-222,597,533),63175=>array(68,-14,608,691),63176=>array(68,-14,910,691),63185=>array(110,625,445,785),63188=>array(111,670,398,806),64256=>array(-62,-208,851,760),64257=>array(-62,-208,610,760),64258=>array(-62,-208,644,760),64259=>array(-62,-208,938,760),64260=>array(-62,-208,984,760),64261=>array(-62,-208,743,760),64262=>array(11,-14,915,737),65533=>array(95,-84,1091,912),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>318,33=>402,34=>460,35=>838,36=>636,37=>950,38=>890,39=>275,40=>390,41=>390,42=>500,43=>838,44=>318,45=>338,46=>318,47=>337,48=>636,49=>636,50=>636,51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838,61=>838,62=>838,63=>536,64=>1000,65=>722,66=>735,67=>765,68=>802,69=>730,70=>694,71=>799,72=>872,73=>395,74=>401,75=>747,76=>664,77=>1024,78=>875,79=>820,80=>673,81=>820,82=>753,83=>685,84=>667,85=>843,86=>722,87=>1028,88=>712,89=>660,90=>695,91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>596,98=>640,99=>560,100=>640,101=>592,102=>370,103=>640,104=>644,105=>320,106=>310,107=>606,108=>320,109=>948,110=>644,111=>602,112=>640,113=>640,114=>478,115=>513,116=>402,117=>644,118=>565,119=>856,120=>564,121=>565,122=>527,123=>636,124=>337,125=>636,126=>838,160=>318,161=>402,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500,169=>1000,170=>475,171=>612,172=>838,173=>338,174=>1000,175=>500,176=>500,177=>838,178=>401,179=>401,180=>500,181=>650,182=>636,183=>318,184=>500,185=>401,186=>470,187=>612,188=>969,189=>969,190=>969,191=>536,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1001,199=>765,200=>730,201=>730,202=>730,203=>730,204=>395,205=>395,206=>395,207=>395,208=>807,209=>875,210=>820,211=>820,212=>820,213=>820,214=>820,215=>838,216=>820,217=>843,218=>843,219=>843,220=>843,221=>660,222=>676,223=>668,224=>596,225=>596,226=>596,227=>596,228=>596,229=>596,230=>940,231=>560,232=>592,233=>592,234=>592,235=>592,236=>320,237=>320,238=>320,239=>320,240=>602,241=>644,242=>602,243=>602,244=>602,245=>602,246=>602,247=>838,248=>602,249=>644,250=>644,251=>644,252=>644,253=>565,254=>640,255=>565,256=>722,257=>596,258=>722,259=>596,260=>722,261=>596,262=>765,263=>560,264=>765,265=>560,266=>765,267=>560,268=>765,269=>560,270=>802,271=>640,272=>807,273=>640,274=>730,275=>592,276=>730,277=>592,278=>730,279=>592,280=>730,281=>592,282=>730,283=>592,284=>799,285=>640,286=>799,287=>640,288=>799,289=>640,290=>799,291=>640,292=>872,293=>644,294=>872,295=>644,296=>395,297=>320,298=>395,299=>320,300=>395,301=>320,302=>395,303=>320,304=>395,305=>320,306=>801,307=>533,308=>401,309=>310,310=>747,311=>606,312=>606,313=>664,314=>320,315=>664,316=>320,317=>664,318=>400,319=>671,320=>465,321=>669,322=>324,323=>875,324=>644,325=>875,326=>644,327=>875,328=>644,329=>866,330=>843,331=>644,332=>820,333=>602,334=>820,335=>602,336=>820,337=>602,338=>1137,339=>989,340=>753,341=>478,342=>753,343=>478,344=>753,345=>478,346=>685,347=>513,348=>685,349=>513,350=>685,351=>513,352=>685,353=>513,354=>667,355=>402,356=>667,357=>402,358=>667,359=>402,360=>843,361=>644,362=>843,363=>644,364=>843,365=>644,366=>843,367=>644,368=>843,369=>644,370=>843,371=>644,372=>1028,373=>856,374=>660,375=>565,376=>660,377=>695,378=>527,379=>695,380=>527,381=>695,382=>527,383=>370,384=>640,385=>735,386=>735,387=>640,388=>735,389=>640,390=>765,391=>765,392=>560,393=>807,394=>802,395=>735,396=>640,397=>602,398=>730,399=>820,400=>623,401=>694,402=>370,403=>799,404=>712,405=>932,406=>395,407=>395,408=>747,409=>606,410=>320,411=>634,412=>948,413=>875,414=>644,415=>820,416=>820,417=>602,418=>1040,419=>807,420=>673,421=>640,422=>753,423=>685,424=>513,425=>707,426=>324,427=>402,428=>667,429=>402,430=>667,431=>843,432=>644,433=>829,434=>760,435=>738,436=>745,437=>695,438=>527,439=>564,440=>564,441=>564,442=>564,443=>636,444=>687,445=>564,446=>536,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1497,453=>1329,454=>1167,455=>1065,456=>974,457=>630,458=>1276,459=>1185,460=>954,461=>722,462=>596,463=>395,464=>320,465=>820,466=>602,467=>843,468=>644,469=>843,470=>644,471=>843,472=>644,473=>843,474=>644,475=>843,476=>644,477=>592,478=>722,479=>596,480=>722,481=>596,482=>1001,483=>940,484=>848,485=>640,486=>799,487=>640,488=>747,489=>606,490=>820,491=>602,492=>820,493=>602,494=>564,495=>564,496=>320,497=>1497,498=>1329,499=>1167,500=>799,501=>640,502=>1154,503=>707,504=>875,505=>644,506=>722,507=>596,508=>1001,509=>940,510=>820,511=>602,512=>722,513=>596,514=>722,515=>596,516=>730,517=>592,518=>730,519=>592,520=>395,521=>320,522=>395,523=>320,524=>820,525=>602,526=>820,527=>602,528=>753,529=>478,530=>753,531=>478,532=>843,533=>644,534=>843,535=>644,536=>685,537=>513,538=>667,539=>402,540=>627,541=>521,542=>872,543=>644,544=>843,545=>814,546=>572,547=>552,548=>695,549=>527,550=>722,551=>596,552=>730,553=>592,554=>820,555=>602,556=>820,557=>602,558=>820,559=>602,560=>820,561=>602,562=>660,563=>565,564=>500,565=>832,566=>494,567=>310,568=>960,569=>960,570=>722,571=>765,572=>560,573=>664,574=>667,575=>513,576=>527,577=>583,578=>464,579=>735,580=>843,581=>722,582=>730,583=>592,584=>401,585=>315,586=>782,587=>640,588=>753,589=>478,590=>660,591=>565,592=>596,593=>675,594=>675,595=>640,596=>560,597=>560,598=>647,599=>683,600=>592,601=>592,602=>843,603=>537,604=>509,605=>773,606=>613,607=>315,608=>683,609=>640,610=>544,611=>599,612=>564,613=>644,614=>644,615=>644,616=>320,617=>392,618=>320,619=>380,620=>454,621=>363,622=>704,623=>948,624=>948,625=>948,626=>644,627=>694,628=>646,629=>602,630=>790,631=>647,632=>602,633=>501,634=>501,635=>551,636=>478,637=>478,638=>453,639=>453,640=>594,641=>594,642=>513,643=>271,644=>370,645=>487,646=>324,647=>402,648=>402,649=>644,650=>620,651=>608,652=>565,653=>856,654=>565,655=>655,656=>597,657=>560,658=>564,659=>560,660=>536,661=>536,662=>536,663=>513,664=>820,665=>563,666=>613,667=>654,668=>667,669=>366,670=>606,671=>543,672=>683,673=>536,674=>536,675=>996,676=>1033,677=>998,678=>823,679=>598,680=>825,681=>894,682=>725,683=>676,684=>598,685=>443,686=>781,687=>767,688=>433,689=>430,690=>264,691=>347,692=>347,693=>430,694=>392,695=>539,696=>355,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>280,705=>281,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>282,713=>500,714=>500,715=>500,716=>282,717=>500,720=>337,721=>337,722=>307,723=>307,726=>392,727=>392,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>417,736=>377,737=>243,738=>337,739=>355,740=>281,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500,750=>484,751=>500,752=>500,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,835=>0,847=>0,856=>0,864=>0,865=>0,880=>740,881=>531,882=>667,883=>553,884=>278,885=>278,886=>875,887=>667,890=>500,891=>560,892=>560,893=>560,894=>337,900=>500,901=>500,902=>722,903=>318,904=>900,905=>1039,906=>562,908=>835,910=>897,911=>853,912=>392,913=>722,914=>735,915=>694,916=>722,917=>730,918=>695,919=>872,920=>820,921=>395,922=>747,923=>722,924=>1024,925=>875,926=>704,927=>820,928=>872,929=>673,931=>707,932=>667,933=>660,934=>820,935=>712,936=>877,937=>829,938=>395,939=>660,940=>675,941=>537,942=>599,943=>392,944=>608,945=>675,946=>578,947=>598,948=>602,949=>537,950=>542,951=>599,952=>602,953=>392,954=>656,955=>634,956=>650,957=>608,958=>551,959=>602,960=>657,961=>588,962=>560,963=>683,964=>553,965=>608,966=>700,967=>606,968=>784,969=>815,970=>392,971=>608,972=>602,973=>608,974=>815,975=>747,976=>583,977=>715,978=>687,979=>874,980=>687,981=>682,982=>815,983=>624,984=>820,985=>602,986=>765,987=>560,988=>694,989=>463,990=>590,991=>660,992=>782,993=>577,1008=>624,1009=>588,1010=>560,1011=>310,1012=>820,1013=>560,1014=>560,1015=>676,1016=>640,1017=>765,1018=>1024,1019=>708,1020=>588,1021=>765,1022=>765,1023=>765,1024=>730,1025=>730,1026=>799,1027=>662,1028=>765,1029=>685,1030=>395,1031=>395,1032=>401,1033=>1084,1034=>1118,1035=>872,1036=>774,1037=>872,1038=>723,1039=>872,1040=>757,1041=>735,1042=>735,1043=>662,1044=>813,1045=>730,1046=>1124,1047=>623,1048=>872,1049=>872,1050=>774,1051=>834,1052=>1024,1053=>872,1054=>820,1055=>872,1056=>673,1057=>765,1058=>667,1059=>723,1060=>830,1061=>712,1062=>872,1063=>773,1064=>1141,1065=>1141,1066=>794,1067=>984,1068=>674,1069=>765,1070=>1193,1071=>808,1072=>596,1073=>610,1074=>582,1075=>505,1076=>634,1077=>592,1078=>1137,1079=>545,1080=>644,1081=>644,1082=>597,1083=>637,1084=>829,1085=>659,1086=>602,1087=>644,1088=>640,1089=>560,1090=>948,1091=>580,1092=>783,1093=>564,1094=>698,1095=>622,1096=>947,1097=>1001,1098=>667,1099=>814,1100=>544,1101=>560,1102=>880,1103=>662,1104=>592,1105=>592,1106=>624,1107=>505,1108=>560,1109=>513,1110=>320,1111=>320,1112=>310,1113=>859,1114=>878,1115=>644,1116=>597,1117=>644,1118=>580,1119=>644,1122=>762,1123=>882,1124=>1129,1125=>834,1130=>1124,1131=>920,1132=>1359,1133=>1063,1136=>944,1137=>902,1138=>820,1139=>552,1140=>859,1141=>678,1142=>859,1143=>678,1164=>707,1165=>544,1168=>672,1169=>529,1170=>662,1171=>505,1172=>730,1173=>614,1174=>1124,1175=>1137,1176=>623,1177=>545,1178=>774,1179=>604,1182=>774,1183=>597,1184=>892,1185=>669,1186=>872,1187=>712,1188=>1139,1189=>857,1190=>1206,1191=>943,1194=>765,1195=>560,1196=>667,1197=>1013,1198=>660,1199=>571,1200=>660,1201=>571,1202=>712,1203=>629,1204=>936,1205=>732,1206=>749,1207=>677,1210=>749,1211=>644,1216=>395,1217=>1124,1218=>1137,1219=>747,1220=>606,1223=>872,1224=>667,1227=>749,1228=>667,1231=>320,1232=>757,1233=>596,1234=>757,1235=>596,1236=>1001,1237=>940,1238=>730,1239=>592,1240=>820,1241=>592,1242=>820,1243=>592,1244=>1124,1245=>1137,1246=>623,1247=>545,1248=>564,1249=>564,1250=>872,1251=>644,1252=>872,1253=>644,1254=>820,1255=>602,1256=>820,1257=>602,1258=>820,1259=>602,1260=>765,1261=>560,1262=>723,1263=>580,1264=>723,1265=>580,1266=>723,1267=>580,1268=>773,1269=>622,1270=>662,1271=>505,1272=>984,1273=>814,1296=>623,1297=>545,1298=>834,1299=>637,1300=>1199,1301=>939,1306=>820,1307=>640,1308=>1028,1309=>856,1329=>810,1330=>811,1331=>806,1332=>828,1333=>806,1334=>826,1335=>761,1336=>811,1337=>968,1338=>816,1339=>772,1340=>682,1341=>1097,1342=>845,1343=>804,1344=>719,1345=>810,1346=>833,1347=>831,1348=>897,1349=>763,1350=>794,1351=>754,1352=>799,1353=>797,1354=>875,1355=>830,1356=>864,1357=>799,1358=>802,1359=>731,1360=>774,1361=>749,1362=>633,1363=>845,1364=>843,1365=>835,1366=>821,1369=>307,1370=>264,1371=>229,1372=>391,1373=>364,1374=>386,1375=>500,1377=>949,1378=>618,1379=>695,1380=>695,1381=>628,1382=>688,1383=>510,1384=>636,1385=>791,1386=>671,1387=>635,1388=>305,1389=>973,1390=>614,1391=>628,1392=>636,1393=>630,1394=>636,1395=>654,1396=>644,1397=>309,1398=>636,1399=>461,1400=>649,1401=>365,1402=>940,1403=>562,1404=>657,1405=>644,1406=>630,1407=>930,1408=>644,1409=>643,1410=>483,1411=>930,1412=>636,1413=>609,1414=>809,1415=>789,1417=>340,1418=>334,4256=>732,4257=>860,4258=>837,4259=>869,4260=>743,4261=>991,4262=>925,4263=>1111,4264=>576,4265=>760,4266=>972,4267=>951,4268=>753,4269=>1084,4270=>906,4271=>838,4272=>1049,4273=>743,4274=>679,4275=>1025,4276=>946,4277=>1029,4278=>741,4279=>743,4280=>742,4281=>743,4282=>889,4283=>946,4284=>724,4285=>765,4286=>743,4287=>968,4288=>1010,4289=>712,4290=>874,4291=>744,4292=>847,4293=>960,4304=>550,4305=>581,4306=>599,4307=>843,4308=>571,4309=>567,4310=>620,4311=>871,4312=>569,4313=>556,4314=>1076,4315=>596,4316=>596,4317=>835,4318=>580,4319=>590,4320=>833,4321=>607,4322=>758,4323=>701,4324=>825,4325=>595,4326=>868,4327=>578,4328=>604,4329=>596,4330=>685,4331=>597,4332=>557,4333=>585,4334=>625,4335=>693,4336=>582,4337=>613,4338=>581,4339=>582,4340=>580,4341=>659,4342=>896,4343=>636,4344=>592,4345=>628,4346=>581,4347=>456,4348=>373,7424=>565,7425=>774,7426=>940,7427=>563,7428=>560,7429=>585,7430=>585,7431=>553,7432=>509,7433=>320,7434=>499,7435=>597,7436=>543,7437=>778,7438=>667,7439=>602,7440=>560,7441=>647,7442=>647,7443=>647,7444=>989,7445=>512,7446=>602,7447=>602,7448=>553,7449=>594,7450=>594,7451=>553,7452=>585,7453=>664,7454=>923,7455=>655,7456=>565,7457=>856,7458=>527,7459=>527,7460=>531,7461=>743,7462=>524,7463=>565,7464=>657,7465=>553,7466=>703,7467=>635,7468=>455,7469=>630,7470=>463,7471=>463,7472=>505,7473=>459,7474=>459,7475=>503,7476=>549,7477=>249,7478=>252,7479=>470,7480=>418,7481=>645,7482=>551,7483=>551,7484=>516,7485=>369,7486=>424,7487=>474,7488=>420,7489=>531,7490=>647,7491=>375,7492=>375,7493=>425,7494=>592,7495=>400,7496=>400,7497=>387,7498=>387,7499=>428,7500=>340,7501=>400,7502=>175,7503=>365,7504=>613,7505=>399,7506=>385,7507=>346,7508=>385,7509=>385,7510=>400,7511=>247,7512=>399,7513=>418,7514=>613,7515=>373,7516=>468,7517=>364,7518=>376,7519=>379,7520=>441,7521=>381,7522=>201,7523=>347,7524=>399,7525=>373,7526=>364,7527=>376,7528=>370,7529=>441,7530=>381,7531=>974,7543=>640,7544=>549,7547=>320,7548=>392,7549=>640,7550=>585,7551=>620,7557=>320,7579=>425,7580=>353,7581=>353,7582=>473,7583=>428,7584=>233,7585=>316,7586=>488,7587=>399,7588=>201,7589=>201,7590=>201,7591=>201,7592=>318,7593=>263,7594=>263,7595=>455,7596=>613,7597=>613,7598=>495,7599=>492,7600=>487,7601=>385,7602=>473,7603=>328,7604=>299,7605=>334,7606=>399,7607=>477,7608=>368,7609=>464,7610=>355,7611=>332,7612=>418,7613=>418,7614=>452,7615=>473,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>722,7681=>596,7682=>735,7683=>640,7684=>735,7685=>640,7686=>735,7687=>640,7688=>765,7689=>560,7690=>802,7691=>640,7692=>802,7693=>640,7694=>802,7695=>640,7696=>802,7697=>640,7698=>802,7699=>640,7700=>730,7701=>592,7702=>730,7703=>592,7704=>730,7705=>592,7706=>730,7707=>592,7708=>730,7709=>592,7710=>694,7711=>370,7712=>799,7713=>640,7714=>872,7715=>644,7716=>872,7717=>644,7718=>872,7719=>644,7720=>872,7721=>644,7722=>872,7723=>644,7724=>395,7725=>320,7726=>395,7727=>320,7728=>747,7729=>606,7730=>747,7731=>606,7732=>747,7733=>606,7734=>664,7735=>320,7736=>664,7737=>320,7738=>664,7739=>320,7740=>664,7741=>320,7742=>1024,7743=>948,7744=>1024,7745=>948,7746=>1024,7747=>953,7748=>875,7749=>644,7750=>875,7751=>644,7752=>875,7753=>644,7754=>875,7755=>644,7756=>820,7757=>602,7758=>820,7759=>602,7760=>820,7761=>602,7762=>820,7763=>602,7764=>673,7765=>640,7766=>673,7767=>640,7768=>753,7769=>478,7770=>753,7771=>478,7772=>753,7773=>478,7774=>753,7775=>478,7776=>685,7777=>513,7778=>685,7779=>513,7780=>685,7781=>513,7782=>685,7783=>521,7784=>685,7785=>513,7786=>667,7787=>402,7788=>667,7789=>402,7790=>667,7791=>402,7792=>667,7793=>402,7794=>843,7795=>644,7796=>843,7797=>644,7798=>843,7799=>644,7800=>843,7801=>644,7802=>843,7803=>644,7804=>722,7805=>565,7806=>722,7807=>565,7808=>1028,7809=>856,7810=>1028,7811=>856,7812=>1028,7813=>856,7814=>1028,7815=>856,7816=>1028,7817=>856,7818=>712,7819=>564,7820=>712,7821=>564,7822=>660,7823=>565,7824=>695,7825=>527,7826=>695,7827=>527,7828=>695,7829=>527,7830=>644,7831=>402,7832=>856,7833=>565,7834=>903,7835=>370,7836=>370,7837=>370,7838=>829,7839=>602,7840=>722,7841=>596,7842=>722,7843=>596,7844=>722,7845=>613,7846=>722,7847=>613,7848=>722,7849=>613,7850=>722,7851=>613,7852=>722,7853=>596,7854=>722,7855=>596,7856=>722,7857=>596,7858=>722,7859=>596,7860=>722,7861=>596,7862=>722,7863=>596,7864=>730,7865=>592,7866=>730,7867=>592,7868=>730,7869=>592,7870=>730,7871=>615,7872=>730,7873=>615,7874=>730,7875=>615,7876=>730,7877=>615,7878=>730,7879=>592,7880=>395,7881=>320,7882=>395,7883=>320,7884=>820,7885=>602,7886=>820,7887=>602,7888=>820,7889=>612,7890=>820,7891=>612,7892=>820,7893=>612,7894=>820,7895=>612,7896=>820,7897=>602,7898=>820,7899=>602,7900=>820,7901=>602,7902=>820,7903=>602,7904=>820,7905=>602,7906=>820,7907=>602,7908=>843,7909=>644,7910=>843,7911=>644,7912=>843,7913=>644,7914=>843,7915=>644,7916=>843,7917=>644,7918=>843,7919=>644,7920=>843,7921=>644,7922=>660,7923=>565,7924=>660,7925=>565,7926=>660,7927=>565,7928=>660,7929=>565,7930=>949,7931=>581,7936=>675,7937=>675,7938=>675,7939=>675,7940=>675,7941=>675,7942=>675,7943=>675,7944=>722,7945=>722,7946=>869,7947=>869,7948=>734,7949=>763,7950=>722,7951=>722,7952=>537,7953=>537,7954=>537,7955=>537,7956=>537,7957=>537,7960=>853,7961=>841,7962=>1067,7963=>1077,7964=>1008,7965=>1035,7968=>599,7969=>599,7970=>599,7971=>599,7972=>599,7973=>599,7974=>599,7975=>599,7976=>998,7977=>992,7978=>1212,7979=>1224,7980=>1159,7981=>1183,7982=>1098,7983=>1095,7984=>392,7985=>392,7986=>392,7987=>392,7988=>392,7989=>392,7990=>392,7991=>392,7992=>521,7993=>512,7994=>735,7995=>738,7996=>679,7997=>706,7998=>624,7999=>615,8000=>602,8001=>602,8002=>602,8003=>602,8004=>602,8005=>602,8008=>820,8009=>859,8010=>1120,8011=>1127,8012=>937,8013=>964,8016=>608,8017=>608,8018=>608,8019=>608,8020=>608,8021=>608,8022=>608,8023=>608,8025=>851,8027=>1079,8029=>1044,8031=>953,8032=>815,8033=>815,8034=>815,8035=>815,8036=>815,8037=>815,8038=>815,8039=>815,8040=>829,8041=>870,8042=>1131,8043=>1137,8044=>946,8045=>976,8046=>938,8047=>970,8048=>675,8049=>675,8050=>537,8051=>537,8052=>599,8053=>599,8054=>392,8055=>392,8056=>602,8057=>602,8058=>608,8059=>608,8060=>815,8061=>815,8064=>675,8065=>675,8066=>675,8067=>675,8068=>675,8069=>675,8070=>675,8071=>675,8072=>722,8073=>722,8074=>869,8075=>869,8076=>734,8077=>763,8078=>722,8079=>722,8080=>599,8081=>599,8082=>599,8083=>599,8084=>599,8085=>599,8086=>599,8087=>599,8088=>998,8089=>992,8090=>1212,8091=>1224,8092=>1159,8093=>1183,8094=>1098,8095=>1095,8096=>815,8097=>815,8098=>815,8099=>815,8100=>815,8101=>815,8102=>815,8103=>815,8104=>829,8105=>870,8106=>1131,8107=>1137,8108=>946,8109=>976,8110=>938,8111=>970,8112=>675,8113=>675,8114=>675,8115=>675,8116=>675,8118=>675,8119=>675,8120=>722,8121=>722,8122=>722,8123=>722,8124=>722,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>599,8131=>599,8132=>599,8134=>599,8135=>599,8136=>912,8137=>900,8138=>1063,8139=>1039,8140=>872,8141=>500,8142=>500,8143=>500,8144=>392,8145=>392,8146=>392,8147=>392,8150=>392,8151=>392,8152=>395,8153=>395,8154=>588,8155=>562,8157=>500,8158=>500,8159=>500,8160=>608,8161=>608,8162=>608,8163=>608,8164=>588,8165=>588,8166=>608,8167=>608,8168=>660,8169=>660,8170=>921,8171=>897,8172=>790,8173=>500,8174=>500,8175=>500,8178=>815,8179=>815,8180=>815,8182=>815,8183=>815,8184=>961,8185=>835,8186=>984,8187=>853,8188=>829,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>338,8209=>338,8210=>636,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>318,8217=>318,8218=>318,8219=>318,8220=>511,8221=>511,8222=>518,8223=>511,8224=>500,8225=>500,8226=>590,8227=>590,8228=>334,8229=>667,8230=>1000,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1342,8241=>1734,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8249=>400,8250=>400,8252=>527,8253=>536,8254=>500,8258=>1000,8260=>167,8261=>390,8262=>390,8263=>976,8264=>753,8265=>753,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8273=>500,8274=>450,8275=>1000,8279=>663,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>201,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>405,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>375,8337=>387,8338=>385,8339=>355,8340=>387,8341=>433,8342=>365,8343=>243,8344=>613,8345=>405,8346=>400,8347=>337,8348=>247,8358=>660,8364=>636,8367=>1057,8369=>706,8372=>780,8373=>636,8376=>667,8377=>636,8451=>1119,8457=>1047,8462=>644,8463=>644,8470=>946,8482=>1000,8486=>829,8487=>829,8490=>747,8491=>722,8498=>694,8513=>775,8514=>557,8515=>557,8516=>611,8523=>890,8526=>514,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>395,8545=>590,8546=>786,8547=>966,8548=>722,8549=>981,8550=>1176,8551=>1372,8552=>932,8553=>712,8554=>932,8555=>1127,8556=>664,8557=>765,8558=>802,8559=>1024,8560=>320,8561=>640,8562=>959,8563=>885,8564=>565,8565=>885,8566=>1205,8567=>1524,8568=>884,8569=>564,8570=>884,8571=>1204,8572=>320,8573=>560,8574=>640,8575=>948,8576=>1206,8577=>802,8578=>1206,8579=>765,8580=>560,8581=>765,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>604,8706=>517,8707=>542,8708=>542,8710=>698,8711=>698,8712=>740,8713=>740,8715=>740,8716=>740,8719=>796,8720=>796,8721=>714,8722=>838,8723=>838,8724=>838,8725=>337,8727=>680,8728=>490,8729=>490,8730=>637,8731=>637,8732=>637,8733=>677,8734=>833,8735=>838,8736=>838,8739=>291,8740=>479,8741=>462,8742=>634,8743=>732,8744=>732,8745=>838,8746=>838,8747=>521,8748=>852,8749=>1182,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8770=>838,8771=>838,8776=>838,8784=>838,8785=>838,8786=>838,8787=>838,8788=>1033,8789=>1033,8800=>838,8801=>838,8804=>838,8805=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8844=>838,8845=>838,8846=>838,8847=>846,8848=>846,8849=>846,8850=>846,8851=>838,8852=>838,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>860,8867=>860,8868=>940,8869=>940,8870=>567,8871=>567,8872=>860,8873=>860,8874=>860,8875=>1031,8876=>860,8877=>860,8878=>860,8879=>1031,8901=>342,8962=>764,8968=>390,8969=>390,8970=>390,8971=>390,8976=>838,8977=>513,8984=>1000,8985=>838,8992=>521,8993=>521,8997=>1000,9000=>1443,9085=>919,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9167=>945,9251=>764,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9784=>896,9785=>896,9786=>896,9787=>896,9788=>896,9791=>614,9792=>731,9793=>731,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,10145=>838,10181=>390,10182=>390,10208=>494,10216=>390,10217=>390,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1033,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10496=>838,10497=>838,10498=>838,10499=>838,10500=>838,10501=>838,10502=>838,10503=>838,10504=>838,10505=>838,10506=>838,10507=>838,10508=>838,10509=>838,10510=>838,10511=>838,10512=>838,10513=>838,10514=>838,10515=>838,10516=>838,10517=>838,10518=>838,10519=>838,10520=>838,10521=>838,10522=>838,10523=>838,10524=>838,10525=>838,10526=>838,10527=>838,10528=>838,10529=>838,10530=>838,10531=>838,10532=>838,10533=>838,10534=>838,10535=>838,10536=>838,10537=>838,10538=>838,10539=>838,10540=>838,10541=>838,10542=>838,10543=>838,10544=>838,10545=>838,10546=>838,10547=>838,10548=>838,10549=>838,10550=>838,10551=>838,10552=>838,10553=>838,10554=>838,10555=>838,10556=>838,10557=>838,10558=>838,10559=>838,10560=>838,10561=>838,10562=>838,10563=>838,10564=>838,10565=>838,10566=>838,10567=>838,10568=>838,10569=>838,10570=>838,10571=>838,10572=>838,10573=>838,10574=>838,10575=>838,10576=>838,10577=>838,10578=>838,10579=>838,10580=>838,10581=>838,10582=>838,10583=>838,10584=>838,10585=>838,10586=>838,10587=>838,10588=>838,10589=>838,10590=>838,10591=>838,10592=>838,10593=>838,10594=>838,10595=>838,10596=>838,10597=>838,10598=>838,10599=>838,10600=>838,10601=>838,10602=>838,10603=>838,10604=>838,10605=>838,10606=>838,10607=>838,10608=>838,10609=>838,10610=>838,10611=>838,10612=>838,10613=>838,10614=>838,10615=>981,10616=>838,10617=>838,10618=>984,10619=>838,10620=>838,10621=>838,10622=>838,10623=>838,10731=>494,10764=>1513,10765=>521,10766=>521,10799=>838,10858=>838,10859=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>838,11023=>838,11024=>838,11025=>838,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11360=>664,11361=>320,11363=>673,11364=>753,11367=>872,11368=>644,11369=>747,11370=>606,11371=>695,11372=>527,11373=>782,11374=>1024,11375=>722,11376=>782,11377=>663,11378=>1130,11379=>939,11381=>740,11382=>531,11383=>700,11385=>501,11386=>602,11387=>553,11388=>264,11389=>455,11390=>685,11391=>695,11520=>773,11521=>635,11522=>633,11523=>658,11524=>631,11525=>962,11526=>756,11527=>960,11528=>617,11529=>646,11530=>962,11531=>632,11532=>646,11533=>962,11534=>645,11535=>866,11536=>961,11537=>645,11538=>645,11539=>959,11540=>945,11541=>863,11542=>644,11543=>646,11544=>645,11545=>649,11546=>688,11547=>634,11548=>982,11549=>681,11550=>676,11551=>852,11552=>957,11553=>632,11554=>645,11555=>646,11556=>749,11557=>914,11800=>536,11807=>838,11810=>390,11811=>390,11812=>390,11813=>390,11822=>536,42564=>685,42565=>513,42566=>395,42567=>392,42576=>1104,42577=>939,42580=>1193,42581=>871,42582=>1140,42583=>875,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>253,42782=>253,42783=>253,42790=>872,42791=>634,42792=>843,42793=>754,42794=>612,42795=>560,42796=>548,42797=>531,42798=>629,42799=>610,42800=>514,42801=>513,42802=>1195,42803=>943,42804=>1226,42805=>950,42806=>1149,42807=>933,42808=>968,42809=>784,42810=>968,42811=>784,42812=>962,42813=>759,42814=>765,42815=>560,42816=>747,42817=>606,42822=>787,42823=>434,42826=>932,42827=>711,42830=>1416,42831=>999,42856=>707,42857=>610,42875=>612,42876=>478,42880=>664,42881=>320,42882=>843,42883=>644,42884=>612,42885=>478,42886=>765,42887=>560,42891=>402,42892=>275,42893=>773,42896=>875,42897=>698,42922=>872,43002=>957,43003=>694,43004=>673,43005=>1024,43006=>395,43007=>1201,62464=>664,62465=>675,62466=>724,62467=>958,62468=>675,62469=>669,62470=>735,62471=>997,62472=>675,62473=>675,62474=>1268,62475=>693,62476=>692,62477=>963,62478=>675,62479=>692,62480=>1009,62481=>756,62482=>809,62483=>758,62484=>955,62485=>691,62486=>946,62487=>690,62488=>698,62489=>692,62490=>739,62491=>692,62492=>698,62493=>676,62494=>739,62495=>895,62496=>675,62497=>785,62498=>676,62499=>675,62500=>675,62501=>732,62502=>972,62504=>904,63172=>320,63173=>602,63174=>640,63175=>644,63176=>947,63185=>500,63188=>500,64256=>708,64257=>667,64258=>667,64259=>941,64260=>986,64261=>744,64262=>916,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/dejavuserifi.z b/tcpdf/fonts/dejavuserifi.z new file mode 100644 index 0000000..7051936 Binary files /dev/null and b/tcpdf/fonts/dejavuserifi.z differ diff --git a/tcpdf/fonts/freefont-20120503/AUTHORS b/tcpdf/fonts/freefont-20120503/AUTHORS new file mode 100644 index 0000000..e7f7575 --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/AUTHORS @@ -0,0 +1,242 @@ +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Authors + ==================== + +The FreeFont collection is being maintained by + Steve White <stevan.white AT googlemail.com> +The folowing list cites the other contributors that contributed to +particular ISO 10646 blocks. + +* URW++ Design & Development GmbH <http://www.urwpp.de/> + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) (most) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) (parts) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + +* Yannis Haralambous <yannis.haralambous AT enst-bretagne.fr> and John + Plaice <plaice AT omega.cse.unsw.edu.au> + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Yannis Haralambous and Wellcome Institute + + Sinhala (U+0D80-U+0DFF) + +* Young U. Ryu <ryoung AT utdallas.edu> + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + +* Valek Filippov <frob AT df.ru> + + Cyrillic (U+0400-U+04FF) + +* Wadalab Kanji Comittee + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + +* Angelo Haritsis <ah AT computer.org> + + Greek (U+0370-U+03FF) + +* Yannis Haralambous and Virach Sornlertlamvanich + + Thai (U+0E00-U+0E7F) + +* Shaheed R. Haque <srhaque AT iee.org> + + Bengali (U+0980-U+09FF) + +* Sam Stepanyan <sam AT arminco.com> + + Armenian (U+0530-U+058F) + +* Mohamed Ishan <ishan AT mitf.f2s.com> + + Thaana (U+0780-U+07BF) + +* Sushant Kumar Dash <sushant AT writeme.com> + + Oriya (U+0B00-U+0B7F) + +* Harsh Kumar <harshkumar AT vsnl.com> + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + +* Prasad A. Chodavarapu <chprasad AT hotmail.com> + + Telugu (U+0C00-U+0C7F) + +* Frans Velthuis <velthuis AT rc.rug.nl> and Anshuman Pandey + <apandey AT u.washington.edu> + + Devanagari (U+0900-U+097F) + +* Hardip Singh Pannu <HSPannu AT aol.com> + + Gurmukhi (U+0A00-U+0A7F) + +* Jeroen Hellingman <jehe AT kabelfoon.nl> + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + +* Thomas Ridgeway <email needed> + + Tamil (U+0B80-U+0BFF) + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek <kudlek AT informatik.uni-hamburg.de>, Olaf + Kummer <kummer AT informatik.uni-hamburg.de>, and Jochen Metzinger <?> + + Ethiopic (U+1200-U+137F) + +* Maxim Iorsh <iorsh AT users.sourceforge.net> + + Hebrew (U+0590-U+05FF) + +* Vyacheslav Dikonov <sdiconov AT mail.ru> + + Syriac (U+0700-U+074A) + Braille (U+2800-U+28FF) + +* Panayotis Katsaloulis <panayotis AT panayotis.com> + + Greek Extended (U+1F00-U+1FFF) + +* M.S. Sridhar <mssridhar AT vsnl.com> + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + <nlevitt AT columbia.edu> + + Sinhala (U+0D80-U+0DFF) + +* Dan Shurovich Chirkov <dansh AT chirkov.com> + + Cyrillic (U+0400-U+04FF) + +* Abbas Izad <abbasizad AT hotmail.com> + + Arabic (U+0600-U+06FF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Denis Jacquerye <moyogo AT gmail.com> + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + +* K.H. Hussain <hussain AT kfri.org> and R. Chitrajan + + Malayalam (U+0D00-U+0D7F) + +* Solaiman Karim <solaiman AT ekushey.org> and Omi Azad <omi AT ekushey.org> + + Bengali (U+0980-U+09FF) + +* Sonali Sonania <sonalisonania AT gmail.com> and Monika Shah + <monikapatira AT gmail.com> + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +* Pravin Satpute <pravin.d.s AT gmail.com>, Bageshri Salvi + <sbagrshri AT yahoo.co.in>, Rahul Bhalerao <b.rahul.pm AT gmail.com> and + Sandeep Shedmake <sandeep.shedmake AT gmail.com> + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +* Gia Shervashidze <giasher AT telenet.ge> + + Georgian (U+10A0-U+10FF) + +* Daniel Johnson + + Armenian (serif) (U+0530-U+058F) + Cherokee (U+13A0-U+13FF) + Unified Canadian Aboriginal Syllabics (U+1400-U+167F) + UCAS Extended (U+18B0-U+18F5) + Tifinagh (U+2D30-U+2D7F) + Vai (U+A500-U+A62B) + Latin Extended-D (Mayanist letters) (U+A720-U+A7FF) + Kayah Li (U+A900-U+A92F) + Osmanya (U+10480-U+104a7) + +* George Douros + + Gothic (U+10330-U+1034F) + Phoenecian (U+10900-U+1091F) + Byzantine Musical Symbols (U+1D000-U+1D0FF) + Western Musical Symbols (U+1D100-U+1D1DF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + Mah Jong Tiles (U+1F000-U+1F02B) + Dominoes (U+1F030-U+1F093) + +* Steve White <stevan_white AT gmail.com> + Glagolitic (U+2C00-U+2C5F) + Coptic (U+2C80-U+2CFF) + Arabic (U+0600-U+06FF) (Mono) + Old Italic (U+10300-U+1032F) + +* Pavel Skrylev is responsible for + Cyrillic Extended-A (U+2DEO-U+2DFF) + as well as many of the additions to + Cyrillic Extended-B (U+A640-U+A65F) + +* Mark Williamson + Made the MPH 2 Damase font, from which + Hanunóo (U+1720-U+173F) + Buginese (U+1A00-U+1A1F) + Tai Le (U+1950-U+197F) + Ugaritic (U+10380-U+1039F) + Old Persian (U+103A0-U+103DF) + +* Masoud Pourmoosa + Arabic (U+0600-U+06FF) + +* Emmanuel Vallois + Python scripts, support + +* Primož Peterlin <primoz.peterlin AT biofiz.mf.uni-lj.si> + maintained FreeFont for several years, and is thanked for all his work. + +Please see the CREDITS file for details on who contributed particular +subsets of the glyphs in font files. + +-------------------------------------------------------------------------- +$Id: AUTHORS,v 1.23 2010-09-11 13:24:11 Stevan_White Exp $ diff --git a/tcpdf/fonts/freefont-20120503/COPYING b/tcpdf/fonts/freefont-20120503/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/tcpdf/fonts/freefont-20120503/CREDITS b/tcpdf/fonts/freefont-20120503/CREDITS new file mode 100644 index 0000000..06d280e --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/CREDITS @@ -0,0 +1,597 @@ +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Credits + ==================== + +This file lists contributors and contributions to the GNU FreeFont project. + + +* URW++ Design & Development GmbH <http://www.urwpp.de/> + +URW++ donated a set of 35 core PostScript Type 1 fonts to the +Ghostscript project <http://www.ghostscript.com/>, to be available +under the terms of GNU General Public License (GPL). + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + + +* Yannis Haralambous <yannis.haralambous AT enst-bretagne.fr> and John + Plaice <plaice AT omega.cse.unsw.edu.au> + +Yannis Haralambous and John Plaice are the authors of Omega typesetting +system, <http://omega.enstb.org/>. Omega is an extension of TeX. +Its first release, aims primarily at improving TeX's multilingual abilities. +In Omega all characters and pointers into data-structures are 16-bit wide, +instead of 8-bit, thereby eliminating many of the trivial limitations of TeX. +Omega also allows multiple input and output character sets, and uses +programmable filters to translate from one encoding to another, to perform +contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode +standard character set, based on ISO-10646. These improvements not only make +it a lot easier for TeX users to cope with multiple or complex languages, +like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but +will also form the basis for future developments in other areas, such as +native color support and hypertext features. ... Fonts for UT1 (omlgc family) +and UT2 (omah family) are under development: these fonts are in PostScript +format and visually close to Times and Helvetica font families. +Omega fonts are available subject to GPL + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +Current info: <http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=omega> + +* Valek Filippov <frob AT df.ru> + +Valek Filippov added Cyrillic glyphs and composite Latin Extended A to +the whole set of the abovementioned URW set of 35 PostScript core fonts, +<ftp://ftp.gnome.ru/fonts/>. The fonts are available under GPL. +(The Cyrillic range was since replaced by another font.) + + Latin Extended-A (U+0100-U+017F) + + +* Wadalab Kanji Comittee + +Between April 1990 and March 1992, Wadalab Kanji Comittee put together a +series of scalable font files with Japanese scripts, in four forms: +Sai Micho, Chu Mincho, Cho Kaku and Saimaru. +The font files are written in custom file format, while tools for conversion +into Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji +Comittee was later dismissed. The resulting files were once found on the FTP +server of the Department of Mathematical Engineering and Information Physics, +Faculty of Engineering, University of Tokyo. Some of these are available at +<http://www.ctan.org/tex-archive/fonts/wadalab> + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + + +* Young U. Ryu <ryoung AT utdallas.edu> + +Young Ryu is the author of Txfonts, a set of mathematical symbols +designed to accompany text typeset in Times or its variants. In the +documentation, Young adresses the design of mathematical symbols: "The +Adobe Times fonts are thicker than the CM fonts. Designing math fonts +for Times based on the rule thickness of Times = , , + , / , < , +etc. would result in too thick math symbols, in my opinion. In the TX +fonts, these glyphs are thinner than those of original Times +fonts. That is, the rule thickness of these glyphs is around 85% of +that of the Times fonts, but still thicker than that of the CM fonts." +TX fonts are are distributed under the GNU public license (GPL). +<http://www.ctan.org/tex-archive/fonts/txfonts/>. + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + + +* Angelo Haritsis <ah AT computer.org> + +Angelo Haritsis has compiled a set of Greek Type 1 fonts, once available as +as a tarball named greekXfonts-Type1-1.1.tgz. +The glyphs from this source have been used to compose Greek glyphs in +FreeSans and FreeMono. + +Angelo's licence says: "You can enjoy free use of these fonts for +educational or commercial purposes. All derived works should include +this paragraph. If you want to change something please let me have +your changes (via email) so that they can go into the next +version. You can also send comments etc to the above address." + + Greek (U+0370-U+03FF) + + +* Yannis Haralambous and Virach Sornlertlamvanich + +In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of +glyphs covering the Thai national standard Nf3, in both upright and +slanted shape. The collection of glyphs have been made part of GNU +intlfonts 1.2 package and is available under the GPL at +<ftp://ftp.gnu.org/pub/gnu/intlfonts/>. + + Thai (U+0E00-U+0E7F) + +* Shaheed R. Haque <srhaque AT iee.org> + +Shaheed Haque has developed a basic set of basic Bengali glyphs +(without ligatures), using ISO10646 encoding. They are available under +the XFree86 license at <http://www.btinternet.com/~shaheedhaque/>. + +Copyright (C) 2001 S.R.Haque <srhaque AT iee.org>. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of S.R.Haque shall not be +used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +S.R.Haque. + + Bengali (U+0980-U+09FF) + + +* Sam Stepanyan <sam AT arminco.com> + +Sam Stepanyan created a set of Armenian sans serif glyphs visually +compatible with Helvetica or Arial. Available on +<http://www.editum.com.ar/mashtots/html/fonts/ara.tar.gz>. On +2002-01-24, Sam writes: "Arial Armenian font is free for +non-commercial use, so it is OK to use under GPL license." + +Armenian (U+0530-U+058F) + + +* Mohamed Ishan <> + +Mohamed Ishan started the Thaana Unicode Project and among other things +created a couple of Thaana fonts, available under FDL or BDF license. + + Thaana (U+0780-U+07BF) + + +* Sushant Kumar Dash <sushant AT writeme.com> (*) + +Sushant Dash has created a font in his mother tongue, Oriya. As he +states on his web page <http://sushantdash.tripod.com/>: +"Please feel free to foreword this mail to your Oriya friends. No +copyright law is applied for this font. It is totally free!!! Feel +free to modify this using any font editing tools. This is designed for +people like me, who are away from Orissa and want to write letters +home using Computers, but suffer due to unavailability of Oriya +fonts.(Or the cost of the available packages are too much)." + + Oriya (U+0B00-U+0B7F) + + +* Harsh Kumar <harshkumar AT vsnl.com> + +Harsh Kumar has started BharatBhasha <http://www.bharatbhasha.net/> - +an effort to provide "FREE software, Tutorial, Source Codes +etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and +Bangla. You can type text, write Web pages or develop Indian Languages +Applications on Windows and on Linux. We also offer FREE help to +users, enthusiasts and software developers for their work in Indian +languages." + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + + +* Prasad A. Chodavarapu <chprasad AT hotmail.com> + +Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type +1 and TrueType format on <http://chaitanya.bhaavana.net/fonts/>. +Tikkana exceeds the Unicode Telugu range with some composite glyphs. +Available under the GNU General Public License. + + Telugu (U+0C00-U+0C7F) + + +* Frans Velthuis <velthuis AT rc.rug.nl> and Anshuman Pandey + <apandey AT u.washington.edu> + +In 1991, Frans Velthuis from the Groningen University, The Netherlands, +released a Devanagari font as Metafont source, available under the terms of +GNU GPL. Later, Anshuman Pandey from the Washington University, Seattle, USA, +took over the maintenance of font. Zdeněk Wagner has provided a huge amount +of expert advice regarding the implementation of the font in FreeSerif. +Fonts can be found on CTAN, +<ftp://ftp.dante.de/tex-archive/language/devanagari/>. + + Devanagari (U+0900-U+097F) + + +* Hardip Singh Pannu <HSPannu AT aol.com> + +In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, +available as regular, bold, oblique and bold oblique form. Its license +says "Please remember that these fonts are copyrighted (by me) and are +for non-profit use only." + + Gurmukhi (U+0A00-U+0A7F) + + +* Jeroen Hellingman <jehe AT kabelfoon.nl> + +Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a +set of Oriya metafonts in 1996. Malayalam fonts were created as +uniform stroke only, while Oriya metafonts exist in both uniform and +modulated stroke. From private communication: "It is my intention to +release the fonts under GPL, but not all copies around have this +notice on them." Metafonts can be found on CTAN, +<ftp://ftp.dante.de/tex-archive/language/oriya/> and +<ftp://ftp.dante.de/tex-archive/language/malayalam/>. + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + + +* Thomas Ridgeway <> (*) + +Thomas Ridgeway, then at the Humanities And Arts Computing Center, +Washington University, Seattle, USA, (now defunct), created a Tamil +metafont in 1990. Anshuman Pandey from the same university took over +the maintenance of font. Fonts can be found at CTAN, +<ftp://ftp.dante.de/tex-archive/language/tamil/wntamil/>. + + Tamil (U+0B80-U+0BFF) + + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek <kudlek AT informatik.uni-hamburg.de>, Olaf + Kummer <kummer AT informatik.uni-hamburg.de>, and Jochen Metzinger <?> + +Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations +of Computer Science, University of Hamburg, prepared a set of Ethiopic +metafonts, found on +<ftp://ftp.dante.de/tex-archive/language/ethiopia/ethiop/>. They also +maintain home page on the Ethiopic font project, +<http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/wimis/kummer/ethiop_eng.html>, +and can be reached at <ethiop AT informatik.uni-hamburg.de>. The current +version of fonts is 0.7 (1998), and they are released under GNU GPL. I +converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A +program <http://www.inf.bme.hu/~pts/textrace/> and removed some +redundant control points with PfaEdit. + + Ethiopic (U+1200-U+137F) + + +* Maxim Iorsh <iorsh AT users.sourceforge.net> + +In 2002, Maxim Iorsh started the Culmus project, aiming at providing +Hebrew-speaking Linux and Unix community with a basic collection of +Hebrew fonts for X Windows. The fonts are visually compatible with +URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono +L families, respectively, and are released under GNU GPL license. See +also <http://culmus.sourceforge.net/>. + + Hebrew (U+0590-U+05FF) + + +* Panayotis Katsaloulis <panayotis AT panayotis.com> + +Panayotis Katsaloulis helped fixing Greek accents in the Greek +Extended area. + + Greek Extended (U+1F00-U+1FFF) + + +* Vyacheslav Dikonov <sdiconov AT mail.ru> + +Vyacheslav Dikonov made a Braille unicode font that could be merged +with the UCS fonts to fill the 2800-28FF range completely. (uniform +scaling is possible to adapt it to any cell size). He also contributed +a free syriac font, whose glyphs (about half of them) are borrowed +from the "Carlo Ator" font by Tim Erickson. +Vyacheslav also filled in a few missing +spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of +subscript and superscript digits and capital Roman numbers. + + Syriac (U+0700-U+074A) + Box Drawing (U+2500-U+257F) + Braille (U+2800-U+28FF) + +* Tim Erickson + +Is the author of several Eurasian fonts, including "Carlo Ator". +He has given his written permission for glyphs from this font to be +included in FreeFont. + Syriac (U+0700-U+074A) + + +* M.S. Sridhar <mssridhar AT vsnl.com> + +M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti +Software for Indian Languages (http://www.akruti.com/), have released +a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, +Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) +under the GNU General Public License (GPL). You can download the fonts +from the Free Software Foundation of India WWW site +(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. + +For any further information or assistance regarding these fonts, +please contact mssridhar AT vsnl.com. + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + <nlevitt AT columbia.edu> + +Noah Levitt found out that the Sinhalese fonts available on the site +<http://www.metta.lk/fonts/> are released under GNU GPL, or, +precisely, "Public Domain under GNU Licence Produced by DMS +Electronics for The Sri Lanka Tipitaka Project" (taken from the font +comment), and took the effort of recoding the font to Unicode. + +These glyphs were later replaced by those from the LKLUG font +<http://www.lug.lk/fonts/lklug> + +Finally the range was completely replaced by glyphs from the sinh TeX +font, with much help and advice from Harshula Jayasuriya. + + Sinhala (U+0D80-U+0DFF) + + +* Daniel Shurovich Chirkov <dansh AT chirkov.com> + +Dan Chirkov updated the FreeSerif font with the missing Cyrillic +glyphs needed for conformance to Unicode 3.2. The effort is part of +the Slavjanskij package for Mac OS X, +<http://www.versiontracker.com/dyn/moreinfo/macosx/18680>. + + Cyrillic (U+0400-U+04FF) + + +* Denis Jacquerye <moyogo AT gmail.com> + +Denis Jacquerye added new glyphs and corrected existing ones in the +Latin Extended-B and IPA Extensions ranges. + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + + +* K.H. Hussain <hussain AT kfri.org> and R. Chitrajan + +`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi, +a team of socially committed information technology professionals and +philologists, has applied developments in computer technology and desktop +publishing to resurrect the Malayalam language from the disorder, +fragmentation and degeneration it had suffered since the attempt to adapt +the Malayalam script for using with a regular mechanical typewriter, which +took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute +has released "Rachana Normal" fonts with approximately 900 glyphs required +to typeset traditional Malayalam. R. Chitrajan apparently encoded the +glyphs in the OpenType table. + +In 2008, the Malayalam ranges in FreeSerif were updated under the advise +and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing, +to reflect the revised edition Rachana_04. + + Malayalam (U+0D00-U+0D7F) + + +* Solaiman Karim <solaiman AT ekushey.org> + + Bengali (U+0980-U+09FF) + +Solaiman Karim has developed several OpenType Bangla fonts and +released them under GNU GPL on <http://www.ekushey.org>. + + +* Sonali Sonania <sonalisonania AT gmail.com> and Monika Shah + <monikapatira AT gmail.com> + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi +Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore +560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai, +lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali +Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released +under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii +Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC +Mumbai (formerly National Centre for Software Technology); funded by +TDIL, Govt. of India. Contact:monika_shah AT lycos.com, +sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in. +website: www.janabhaaratii.org.in. + + +* Pravin Satpute <pravin.d.s AT gmail.com>, Bageshri Salvi + <sbagrshri AT yahoo.co.in>, Rahul Bhalerao <b.rahul.pm AT + gmail.com> and Sandeep Shedmake <sandeep.shedmake AT gmail.com> + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +In December 2005 the team at www.gnowledge.org released a set of two +Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font +belongs to serif style and is an original work of the team; "Samyak +Sans" font belongs to sans serif style and is actually a compilation +of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti +and ThendralUni). Both fonts are based on Unicode standard. +The fonts are now hosted at Sarovar.org: +http://sarovar.org/projects/samyak/ + + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts, +AnmolUni and AnmolUni-Bold, which are available under the terms of GNU +Generel Public License from the Punjabu Computing Resource Center, +http://guca.sourceforge.net/typography/fonts/anmoluni/. + + +* Gia Shervashidze <giasher AT telenet.ge> + + Georgian (U+10A0-U+10FF) + +Starting in mid-1990s, Gia Shervashidze designed many +Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial +Georgian, Courier New Georgian. His work on Georgian localization can +be reached at http://www.gia.ge/. + + +* Primož Peterlin <primoz.peterlin AT biofiz.mf.uni-lj.si> + +Primož Peterlin filled in missing glyphs here and there (e.g. Latin +Extended-B and IPA Extensions ranges in the FreeMono familiy), and +created the following UCS blocks: + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Arrows (U+2190-U+21FF) + Box Drawing (U+2500-U+257F) + Block Elements (U+2580-U+259F) + Geometrical Shapes (U+25A0-U+25FF) + +* Mark Williamson + +Made the MPH 2 Damase font, from which + Hanunóo (U+1720-U+173F) + Buginese (U+1A00-U+1A1F) + Tai Le (U+1950-U+197F) + Ugaritic (U+10380-U+1039F) + Old Persian (U+103A0-U+103DF) + +* Jacob Poon + +Submitted a very thorough survey of glyph problems and other suggestions. + +* Alexey Kryukov + +Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one +point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided +valuable direction about Cyrillic and Greek typesetting. + + Cyrillic (U+0400-U+04FF) + +* George Douros + +The creator of several fonts focusing on ancient scripts and symbols. +Many of the glyphs are created by making outlines from scanned images +of ancient sources. + + Aegean: Phoenecian + Analecta: Gothic (U+10330-U+1034F) + Musical: Byzantine & Western + Unicode: many Miscellaneous Symbols, Miscellaneous Technical, OCR, + supplemental Symbols, and Mathematical Alphanumeric symbols, + Mah Jong, and the outline of the Domino. + +* Daniel Johnson + +Created by hand a Cherokee range specially for FreeFont to be "in line with +the classic Cherokee typefaces used in 19th century printing", but also to +fit well with ranges previously in FreeFont. Then he made Unified Canadian +Syllabics in Sans, and a Cherokee and Kayah Li in Mono! And never to be +outdone by himself, then did UCAS Extended and Osmanya.... What next? + + Armenian (serif) (U+0530-U+058F) + Cherokee (U+13A0-U+13FF) + Unified Canadian Aboriginal Syllabics (U+1400-U+167F) + UCAS Extended (U+18B0-U+18F5) + Kayah Li (U+A900-U+A92F) + Tifinagh (U+2D30-U+2D7F) + Vai (U+A500-U+A62B) + Latin Extended-D (Mayanist letters) (U+A720-U+A7FF) + Osmanya (U+10480-U+104a7) + +* Yannis Haralambous and Wellcome Institute + +In 1994, The Wellcome Library + The Wellcome Institute for the History of Medicine + 183 Euston Road, London NW1 2BE, England. +commissioned Mr. Haralambous to produce a Sinhalese font for them. + +We have received 03/09 official notice from Robert Kiley, Head of e-Strategy +for the Wellcome Library, that Yannis' font could be included in GNU +FreeFont under its GNU license. + +Thanks to Dominik Wujastyk, for providing us with feedback and contacts +to repsonsible people at the Trust. + + Sinhala (U+0D80-U+0DFF) + +* The Sinhala font project http://sinhala.sourceforge.net/ + +The Sinhala font project has taken the glyphs from Yannis Haralambous' +Sinhala font, to produce a Unicode TrueType font, LKLUG. These glyphs +were for a while included in FreeFont. + + Sinhala (U+0D80-U+0DFF) + +* Steve White <stevan.white AT googlemail.com> + +Filled in a lot of missing characters, got some font features working, +left fingerprints almost everywhere, and is responsible for these blocks: + + Runic (U+16A0-U+16F0) + Glagolitic (U+2C00-U+2C5F) + Coptic (U+2C80-U+2CFF) + Old Italic (U+10300-U+1032F) +(The design of Runic is based roughly on one originally submitted by +Vyacheslav Dikonov) + + +* Pavel Skrylev is responsible for + Cyrillic Extended-A (U+2DEO-U+2DFF) + as well as many of the additions to + Cyrillic Extended-B (U+A640-U+A65F) + + +* Masoud Pourmoosa corrected several letters in Arabic for Persian: + Arabic (U+0600-U+06FF) + +Notes: + +*: The glyph collection looks license-compatible, but its author has + not yet replied and agreed on their work being used in part of + this glyph collection. + +-------------------------------------------------------------------------- +$Id: CREDITS,v 1.28 2010/09/11 13:24:11 Stevan_White Exp $ diff --git a/tcpdf/fonts/freefont-20120503/ChangeLog b/tcpdf/fonts/freefont-20120503/ChangeLog new file mode 100644 index 0000000..2d7ec40 --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/ChangeLog @@ -0,0 +1,14707 @@ +2012-04-22 16:18 +0000 [r2239-2240] Stevan_White: + + * INSTALL: Improved info on Debian install. + + * notes/troubleshooting.txt: More info on the blurry + text in Windows issue. + +2012-04-22 11:43 +0000 [r2238] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: + Regularized abbreviatons of supplement, extended + +2012-04-22 11:06 +0000 [r2237] Stevan_White: + + * FreeSerifBold.sfd: Arabic: added 3 graphical + marks to complete the range. + +2012-04-22 10:51 +0000 [r2236] Stevan_White: + + * FreeSerif.sfd: Fixed problems turned up by + tests. Somehow alefmaksurainitialarabic hadn't been re-named. Two + new Combining Diacritics hadn't been given Unicode. + +2012-04-21 17:11 +0000 [r2235] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeMono.sfd, + FreeMonoBoldOblique.sfd: Revision of German + TTF Names. + +2012-04-21 16:52 +0000 [r2231-2234] Stevan_White: + + * INSTALL: More info for Windows. + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd: PS Private: put in extra + blues line, adjusted to numerals. + + * tools/report/OpenType/UnicodeRanges.py: Corrected + one range + + * tools/generate/TrueType, + tools/generate/WOFF, + tools/generate/OpenType, + tools/generate/MacTT: all: removed launch line + WOFF: made quadratic, and autoinstructed TrueType: turned off + saving of hints + +2012-04-21 11:17 +0000 [r2230] Stevan_White: + + * FreeSerifBold.sfd: Vietnamese: small + adjustment of accents + +2012-04-20 12:57 +0000 [r2228-2229] Stevan_White: + + * AUTHORS, CREDITS: Various + corrections, doing the best I could with stale URLs. + + * ChangeLog: Some typos + +2012-04-20 11:06 +0000 [r2227] Stevan_White: + + * ChangeLog: Summary of changes since late last + year. + +2012-04-19 21:07 +0000 [r2226] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: re-named + alefmaksurainitialarabic and alefmaksuramedialarabic as + alefmaksurainitialarabic and alefmaksuramedialarabic to avoid a + confusing FontForge warning. This was discussed on the FontForge + list, and a partial remedy was agreed upon. + +2012-04-19 21:02 +0000 [r2225] Stevan_White: + + * FreeSerif.sfd: GPOS table: removed the + Cyrillic kerns with non-Unicode "alternative" Cyrillic, because + FontForge warns that Windows apps will have *problems* with + mappings that aren't Unicode-Unicode. Most of the kerns were + rather small anyway. + +2012-04-19 20:39 +0000 [r2224] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBoldOblique.sfd: TTF Names: Fixes bug + #36232: Windows 7 strange bug with installation/font control + panel. Also improved French names. (Thanks to Emmanuel Vallois) + +2012-04-18 07:31 +0000 [r2223] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: Regularized + overlap of horizontal. Cleaned up numerous other letters. + +2012-04-17 07:37 +0000 [r2222] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Currency Symbols: + Added/corrected/adjusted Indian Rupee. + +2012-04-16 22:45 +0000 [r2221] Stevan_White: + + * notes/maintenance.txt, + notes/usage.txt, + notes/troubleshooting.txt, + notes/webfont_guidelines.txt, + notes/features.txt: Added section about where + letters are to usage.txt Made sure svn properties are set for + others. + +2012-04-16 22:26 +0000 [r2220] Stevan_White: + + * README: Updated information about file types + +2012-04-16 22:17 +0000 [r2219] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: resolves bug + #36195: Arabic semicolon doesn't match with others + +2012-04-15 23:16 +0000 [r2218] Stevan_White: + + * FreeSerifBold.sfd: Arabic: this was meant to + be in previous commit. + +2012-04-15 18:30 +0000 [r2217] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: Remedies bug + #36196: Arabic ba and teh isolated and final. Also applied + similar alteration to some similar letters. Bold: there were some + missing ligatures of superscript marks. + +2012-04-15 17:52 +0000 [r2216] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: Remedies bug + #36198: dots for Arabic letter jeh Also revised placement dots + over some other letters. + +2012-04-15 13:24 +0000 [r2215] Stevan_White: + + * FreeSerif.sfd: Arabic: remedies bug #36191, + Arabic character DAD final form + +2012-04-15 12:23 +0000 [r2214] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: toward bug #36189: + discrepancy in different forms of ک and گ + +2012-04-15 12:02 +0000 [r2213] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: remedies bug + #36190, Arabic question mark too small + +2012-04-15 11:16 +0000 [r2212] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: anchors for + recently added letters. Thanks, Zdenek. + +2012-04-15 10:44 +0000 [r2211] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: adjusted height of + dots on a few glyphs + +2012-04-15 10:31 +0000 [r2210] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: remedies bug + #36181: initial and final form of heh (U+0647) + https://savannah.gnu.org/bugs/?36181 + +2012-04-14 13:35 +0000 [r2209] Stevan_White: + + * tools/test/ranges/Arabic/arabic_test.py (added), + tools/test/ranges/Arabic/unicode_joining.py + (added), + tools/test/ranges/Arabic/generate_arabic_shaping.py + (added), tools/test/ranges (added), + tools/test/ranges/Arabic (added): Scripts to + generate comprehensive Arabic tests in HTML, courtesy of Emmanuel + Vallois. + +2012-04-13 09:56 +0000 [r2208] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd: Devanagari: serif: corrected + OpenType glyph type of ru, ruu ligatures to be base ligatures, + not marks. sans, sans bold: added ka-ra "vatu" ligature at + Zdenek's suggestion. sans: removed empty lookup. + +2012-04-10 20:33 +0000 [r2207] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: several mark + placement issues, pointed out by Zdenek. + +2012-04-09 21:58 +0000 [r2206] Stevan_White: + + * sfd/Makefile, FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: made Arabic and + Persion digits 500EM wide. + +2012-04-09 18:35 +0000 [r2205] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd: Arabic: messed with digits. + Overall, had been building with GIT version of FontForge. found + that older distro version 22-Feb-2011-ML shows warning dialogs + Internal Error: EITOfNextMajor failed! on Clockwise Test + (cleverly omitting the crucial info). Turns out, just rounding to + int on certain characters fixes it. + +2012-04-09 11:34 +0000 [r2204] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: More kerning: tried + to synch up normal and bold. Altered letters especially for + Seraiki. Lots of fiddling with heh and heh-doachashmee. Seems the + letter transforms very differently for different languages. This + is not there yet. + +2012-04-08 12:53 +0000 [r2203] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: made 'ccmp' table + and some combining marks to handle cases of letters that don't + have positional forms in Unicode. Only did a few -- more are + needed. Lots of kerning. Fiddled with shapes of several letters. + +2012-04-07 19:21 +0000 [r2202] Stevan_White: + + * FreeSerif.sfd: Arabic: more alterations toward + bug #36115: Various little problems with Arabic/Persian glyphs + More kerning. Some forms from Pashto are missing. + +2012-04-06 17:45 +0000 [r2201] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: made medial form of + loop-letters more distinctive from initial forms. (toward bug bug + #36115: Various little problems with Arabic/Persian glyphs) + +2012-04-05 16:43 +0000 [r2200] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: improvements to + digits (Persian primarily) based on patch from Masoud Pourmoosa. + +2012-04-04 17:10 +0000 [r2199] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Arabic; (for Farsi) toward + bug 34700: made farsi yeh final more like the Unicode samples. + https://savannah.gnu.org/bugs/?34700 Arabic/Persian in FreeSerif: + ending "Yeh" is annoying + +2012-04-04 14:34 +0000 [r2198] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Various attempts to make + web fonts work/look better. Sans Devanagari: made relation + between overhang and horizontal more consistent for half-forms. + Corrected metrics in FreeSansOblique. Some kerning overall, after + looking again at sample pages + +2012-04-02 13:30 +0000 [r2197] Stevan_White: + + * FreeSansBold.sfd: Devanagari: toward more + consistent spacing, especialy of half-forms + +2012-04-02 12:57 +0000 [r2196] Stevan_White: + + * FreeSans.sfd: Devanagri: better connection of + horizontals, especially half forms. + +2012-04-01 13:45 +0000 [r2195] Stevan_White: + + * FreeSerif.sfd: Combining Diacritical Marks + Supplement: made glyphs for large part of range. Latin + Extended-D: made Latin con and US glyphs. + +2012-03-30 13:34 +0000 [r2193-2194] Stevan_White: + + * tools/generate/OpenType: Turn on PS rounding for + Type1 glyphs + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Pointwise cleanup + toward validation with PS rounding turned on for OpenType. + +2012-03-30 11:16 +0000 [r2192] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: bold, italic, + re-considered vowel naming to avoid FF warnings. Latin: a bit of + kerning + +2012-03-29 20:39 +0000 [r2191] Stevan_White: + + * notes/troubleshooting.txt: corrections about + recent changes + +2012-03-28 19:59 +0000 [r2190] Stevan_White: + + * notes/troubleshooting.txt: Remarks about + LibreOffice's challenges with OpenType features. + +2012-03-28 19:38 +0000 [r2189] Stevan_White: + + * notes/README-downloads.txt: brought up to date, + regarding perferred format in various systems, and the WOFF files + +2012-03-28 19:31 +0000 [r2185-2188] Stevan_White: + + * AUTHORS, INSTALL, + COPYING: changed SVN keywords + + * ChangeLog: corrections, addition + + * CREDITS: correctons, additions + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: simplified dist + lookup criteria + +2012-03-28 19:24 +0000 [r2184] Stevan_White: + + * tools/report/ligatureLookups.py: better error + handling, doc + +2012-03-28 19:20 +0000 [r2183] Stevan_White: + + * FreeSerifBold.sfd: Devanagari: cleaned up a + bunch of excess GPOS anchors; tidied lookups. + +2012-03-28 09:17 +0000 [r2180-2182] Stevan_White: + + * Makefile: insert troubleshooting doc + + * notes/troubleshooting.txt (added): A doc + explaining how to troubleshoot font problems. + + * notes/usage.txt: Tidied, more explanation of the + doc as a whole. + +2012-03-26 10:43 +0000 [r2179] Stevan_White: + + * FreeSerif.sfd: Devanagari: much experimenting + with lookups to center western punctuation between words + (resulted in several bug reports on firefox and xetex). + Currently, uses GSUB 'locl'. GPOS are too problematic in apps to + use. + +2012-03-25 09:49 +0000 [r2178] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: added + positioning for western punctuation + +2012-03-25 09:40 +0000 [r2177] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari, Bengali: small + tweeks to dots + +2012-03-24 21:34 +0000 [r2176] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBoldOblique.sfd: TTF Names: Hindi + hyphenated term + +2012-03-24 10:20 +0000 [r2175] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: regarding + horizontal spacing, on advice of Zdenek. o, au -- stems were too + close. danda, dbldanda: much too near preceding word. Made so + that danda-space would space the mark evenly between the words. + Made lookups for similarly-spaced question and exclamation marks. + Kerning (or dist?): Experiments -- problems include: Firefox + doesn't seem to support "dist". Xetex doesn't turn kerning on by + default. Fontforge complains Windows doesn't like to kern + auxiliaries with Unicode ranges. Nonetheless, it does pack words + rather tighter. My own advice: made ra glyph more narrow. It was + the worst, spacing wise, on the un-kerned page. Oriya: made + similar spacing for its danda. + +2012-03-23 12:56 +0000 [r2174] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: efforts to + improve horizontal spacing, that Zdenek complains about. 1) + medium: o, au vowels: stems too close 2) danda, dbldanda, should + be widely separated from words, centred between them. 3) bold: on + horizontal, bevels extend rather more than they should (reduced + in Unicode and through first set of half marks in the + auxiliaries... willl complete later.) 4) made special localized + forms of question, exclamation mark. + +2012-03-22 23:25 +0000 [r2172-2173] Stevan_White: + + * tools/generate/TrueType, + tools/generate/WOFF, + tools/generate/OpenType: Set the encoding to + UnicodeFull before build (a bit wasteful for faces with no high + Unicode, but couldn't think of a better way.) + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd: More re-thinking of OS/2 + weights. In sans, again adjusted OS/2 Windows metrics to stop + clipping. (I'm just sure this will mess up line spacing in + OpenOffice, but didn't have time to check. Something has a bug.) + +2012-03-22 19:17 +0000 [r2171] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Font Info: filled out + TTF Names Fullname for Hindi + +2012-03-22 19:00 +0000 [r2170] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added Hindi term for + Font Style in TTF Names (courtesy of Monika Shah) + +2012-03-22 18:49 +0000 [r2169] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: FontInfo: + re-considered OS/2 and Panose weight descriptions + +2012-03-22 15:02 +0000 [r2168] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: Replaced a + 'pres' table that got zeroed by a crash. More adjustments to mark + placement. + +2012-03-22 12:51 +0000 [r2167] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: Replaced lost + 'pres' lookup tables. + +2012-03-22 10:35 +0000 [r2166] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Overall: Several + measures toward reducing warnings from Font Validator. In "roman" + faces, change TTF Name: SubFamily to "Regular". (FontForge binds + this to PSNames:Weight --? so changed that.) Experimenting with + General:Name For Humans (Fiddled with Family Name too...but + changed it back.) Changes to OS/2:Sub/Super Subscript Offset -- + made positive. Some fiddling with Panose info. Also: previously + OS/2 Charsets missed 708, Arabic ASMO 708. (Bug in + FontForge-patch reported.) In sans and mono oblique, bold, and + boldoblique, added some math operators to fill an Apple codepage. + Sinhala: FreeSerifBold -- implemented same change moving 'ccmp' + to 'akhn' as in roman face. Has to do with bug in OpenOffice/ICU. + +2012-03-20 08:25 +0000 [r2165] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: OS/2 small tweeks: + set "weight, width, slope only" + +2012-03-19 18:34 +0000 [r2164] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: OS/2 Charsets: made serif, + serifbold, mono to support ASMO 708 MS Codepage for Arabic (small + bug in FontForge) OS/2 Version: changed from Automatic to 3 for + all, only to satisfy old MS Font Validator, which chokes on + higher versions. + +2012-03-19 09:45 +0000 [r2163] Stevan_White: + + * FreeMono.sfd: correction-something went wrong + with the encoding two commits ago. (I switched encoding from + custom to BMP and back again.) This should encorporate the recent + changes and fix the problem. + +2012-03-19 09:07 +0000 [r2162] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: comments + containing new Unicode ranges without ulUnicodeRange bits + +2012-03-19 08:41 +0000 [r2161] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: OS/2 version: set to + 3 (was "Automatic") mostly for MS Font Validator. Arabic + Presentation Forms B: (regular) made lam-alif ligatures, + completing range. + +2012-03-18 15:57 +0000 [r2160] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Devanagari: more toward + positioning of marks. + +2012-03-18 15:09 +0000 [r2159] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: resolved some + dfficult cases reported by Zdenek. (esp. that esign and reph + could come in either order.) + +2012-03-18 06:37 +0000 [r2158] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd: Devanagari: More toward proper + mark placement. + +2012-03-16 17:39 +0000 [r2157] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: more issues + regarding mark placement. + +2012-03-15 23:39 +0000 [r2156] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: toward fixing + mark positioning problems Zdenek pointed out. + +2012-03-15 10:28 +0000 [r2155] Stevan_White: + + * FreeSerif.sfd: Latin: got i-ogonek-acute to + remove dot over i again (for Navaho). Problem was evidently a + DFLT{dflt} entry in lookup language tags. + +2012-03-15 10:03 +0000 [r2153-2154] Stevan_White: + + * FreeSans.sfd: Devanagari: fixes for some mark + issues pointed out by Zdenek. + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: corrected + longstanding problem that made stacked Vietnamese accents fail. + Had to do with long list of languages filter of default ligature + lookup, excluding Turkish, and rendering logic I don't + understand. Devanagari: toward correcting marks stacked below + rakaar. + +2012-03-13 16:29 +0000 [r2152] Stevan_White: + + * FreeSerif.sfd: Mathematical Alphanumeric + Symbols (especially) named some characters + +2012-03-13 10:46 +0000 [r2151] Stevan_White: + + * FreeSerifBold.sfd: Devanagari: ha-rrvocalic + and improved ha-rakaar, as in medium + +2012-03-12 21:59 +0000 [r2150] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Mathematical Operators: + reduced horizontal spacing of complement operator + +2012-03-12 21:28 +0000 [r2149] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Mathematical Operators: + re-thought dimensions of "complement" symbol (after seeing it in + Dieudonné's analysis book) + +2012-03-12 18:49 +0000 [r2148] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Devanagari: various adjustments + to marks. serif: added ha-llvocalic, rplaced ha_ra conjunct, + positioned virama separately from fowels. + +2012-03-11 22:39 +0000 [r2147] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Bengali: adjustments to marks; + GPOS tables to position them. + +2012-03-11 16:37 +0000 [r2146] Stevan_White: + + * FreeSansOblique.sfd: Bengali: fixed some + horizontal spacing issues + +2012-03-11 00:56 +0000 [r2145] Stevan_White: + + * FreeSansBold.sfd, + FreeSerif.sfd: Made to pass tests -- mostly + little pointwise tweeks. One range of auxiliaries had wandered + out of the Private Use area. + +2012-03-10 23:55 +0000 [r2144] Stevan_White: + + * FreeMonoOblique.sfd: Armenian: corrected width + of one glyph + +2012-03-10 18:53 +0000 [r2143] Stevan_White: + + * FreeSans.sfd: Bengali: completed pointwise + clean-up of auxiliaries. Found a couple more with quite wrong + rignt bounds. + +2012-03-10 13:15 +0000 [r2142] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: OS/2 vertical metrics: + another change of heart: made vertical metrics like other fonts I + looked at, and tightened line spacing. Bengali: (sans) point-wise + clean-up down to bn_l_dd_ra (before I pooped out) Fixed right + bound of several auxiliaries, such as bn_p_ma, bn_m_p_la + +2012-03-09 19:04 +0000 [r2141] Stevan_White: + + * FreeSerifItalic.sfd: Removed some unintended + empty contours. Pointwise clean-up of points too close (but gave + up on Bengali range.) + +2012-03-09 18:45 +0000 [r2139-2140] Stevan_White: + + * tools/generate/TrueType: Made splines quadratic + + * FreeMonoOblique.sfd: Pointwise cleanup of + "points too close" problems. + +2012-03-09 18:35 +0000 [r2138] Stevan_White: + + * FreeSerifBold.sfd: Removed an unintended empty + contour + +2012-03-09 16:52 +0000 [r2137] Stevan_White: + + * tools/generate/TrueType, + tools/generate/WOFF, + tools/generate/OpenType, + tools/generate/buildutils.py, + tools/generate/MacTT: Updated copyrights + +2012-03-09 16:49 +0000 [r2136] Stevan_White: + + * sfd/Makefile: Made to properly report progress for + OpenType target + +2012-03-09 16:08 +0000 [r2135] Stevan_White: + + * FreeSerif.sfd: Mahjong Tiles: The previous + commit didn't quite do it. Sometimes, but starting the generate + process from scratch, it still crashed. But this "circle" glyph + was excessively elaborate anyway. Made it simpler, cleaned it up, + and now the crash isn't happening. + +2012-03-09 13:12 +0000 [r2134] Stevan_White: + + * FreeSerif.sfd: Mahjong Tiles: work-around for + FontForge crash, by use of references. Crash: Select All, + AutoHint. Generate Fonts, OpenType Options, check Postscript + Hints. Generate. segfault. + +2012-03-09 12:04 +0000 [r2133] Stevan_White: + + * FreeSerif.sfd: Mahjong Tiles: named the glyphs + +2012-03-09 01:17 +0000 [r2132] Stevan_White: + + * FreeSans.sfd: Corrected mixed reference and + contour. Overall point-wise cleanup "points too close" + +2012-03-07 23:27 +0000 [r2131] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Font Info General: + changed copyright 2011 to 2012 since no public release was made + last year. + +2012-03-07 21:06 +0000 [r2130] Stevan_White: + + * Makefile: Source tarball now includes all build + scripts etc. + +2012-03-07 14:50 +0000 [r2129] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: .notdef: made clearer + that something is missing... + +2012-03-06 19:07 +0000 [r2128] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: mostly + adjustments to mark placement. + +2012-03-06 11:22 +0000 [r2127] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: various + alterations toward ligatures as in Velthuis manual, and for + legibility. + +2012-03-05 21:18 +0000 [r2126] Stevan_White: + + * FreeSansBold.sfd: Devanagari: made half-na a + bit wider on Monika Shah's recommendation. Tweeked several other + auxiliaries for legibility. + +2012-03-05 20:25 +0000 [r2125] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: Several issues + reported by Monika Shah, including rakaar being placed + improperly, and some Sanskrit ligatures leaking into Hindi. + +2012-03-05 16:41 +0000 [r2124] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Devanagari: combined + half-form issues, reported by Zdenek Wagner. + +2012-03-05 15:07 +0000 [r2123] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: Several + alterations based on a report by Zdenek Wagner. Anusvara in + conjunction with other above marks, u and uumatra in conjunction + with ha and nuktas. + +2012-03-05 01:22 +0000 [r2122] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Bengali: Several + ligatures with ba had lost the holes in their ba. (bn_k_ba, etc); + also bn_asamib_r_ukaar. Copied holes from similar glyphs. A + similar thing may have happend to a couple of other ligs + (bn_ss_tta1, bn_ss_tt_ra1). I don't know how these should look, + but they seem to be unused anyway. + +2012-03-04 18:24 +0000 [r2121] Stevan_White: + + * FreeSerifItalic.sfd: general clean-up of + points too close. Bogged down on Bengali. + +2012-03-04 18:01 +0000 [r2120] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Currency Symbols: added + Rupee to italic. general clean-up of points too close. + +2012-03-04 13:18 +0000 [r2119] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Gurmukhi: adjusted + placement of dots. re-named tables and rounded to int in bold. + +2012-03-04 12:25 +0000 [r2118] Stevan_White: + + * FreeSerif.sfd: Devanagari Extended: completed + range + +2012-03-04 11:25 +0000 [r2117] Stevan_White: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Armenian: added dhahma + (and ran clear hints) + +2012-03-04 11:21 +0000 [r2116] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Armenian: added drahma + +2012-03-04 10:45 +0000 [r2115] Stevan_White: + + * FreeSerifBold.sfd: Devanagari: completed main + Unicode range. + +2012-03-04 10:17 +0000 [r2114] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Gurmukhi: Added range in + bold. Serif: Many point-wise cleanups, in Gurmukhi and other + ranges. + +2012-03-02 22:19 +0000 [r2113] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: starting to + converge. In serif, added ra-u and ra-uu and tables, raised + anusvara. Various small alterations to sans letters. + +2012-03-02 15:18 +0000 [r2112] Stevan_White: + + * FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: corrected + rakaar on letter da + +2012-03-02 14:56 +0000 [r2111] Stevan_White: + + * FreeSansBold.sfd: Devanagari: glyph clean-up + pass through auxiliaries. + +2012-03-02 12:22 +0000 [r2110] Stevan_White: + + * FreeSansBold.sfd: Devanagari: clean-up pass + through Unicode range. Added a few ligatures. + +2012-03-02 03:35 +0000 [r2107-2109] Stevan_White: + + * FreeSansBold.sfd: Devanagari: implemented by + increasing weight of letters from Sans. Subset of auxiliaries in + Sans: plan is to do more with tables. + + * FreeSans.sfd: Devanagari: re-instated + dev_ha_rvocalic.blws + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: corrected table + having to do with rakaar on round consonants + +2012-03-01 19:50 +0000 [r2106] Stevan_White: + + * FreeSans.sfd: Devanagari: Regularized + horizontal bar height and width, as well as size and shape of dot + marks (made all diamonds). More use of references. (With GPOS + tables, most of the nuktas and halents would go away.) Latin: + made comma a bit less spindly, and likewise with derived marks. + +2012-02-29 22:29 +0000 [r2105] Stevan_White: + + * FreeSerif.sfd: Bengali: some insignificant + clean-up. what to do about these glyphs? + +2012-02-29 19:12 +0000 [r2104] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd: Various small corrections + to get test suite to run + +2012-02-29 17:02 +0000 [r2103] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: corrected table + tag for style sets. Made substitutions for Marathi more like + those for Hindi than Sanskrit. + +2012-02-29 11:21 +0000 [r2102] Stevan_White: + + * FreeSerifBold.sfd: Devanagari: should now have + same coverage as regular face. + +2012-02-29 07:10 +0000 [r2101] Stevan_White: + + * FreeSerif.sfd: Devanagari: replaced + auxiliaries; added positioning anchors. + +2012-02-25 13:52 +0000 [r2100] Stevan_White: + + * Makefile: include usage notes in packages + +2012-02-25 10:40 +0000 [r2099] Stevan_White: + + * notes/usage.txt: Further notes + +2012-02-25 10:30 +0000 [r2098] Stevan_White: + + * notes/usage.txt (added), + notes/features.txt: Usage notes -- primarily about + discretionary and language-specific features, what they're for + and how to use them. + +2012-02-24 15:58 +0000 [r2097] Stevan_White: + + * FreeSerif.sfd: Oriya: Special form for ukar + under some consonants, ligatures for several consonants with + aakar, with lookups. + +2012-02-24 12:21 +0000 [r2096] Stevan_White: + + * FreeSerif.sfd: Oriya: found auxiliaries that + had excaped clean-up. + +2012-02-24 11:47 +0000 [r2095] Stevan_White: + + * FreeSerif.sfd: Oriya: Switched yophola and + yyophola for about the 3rd time. This time, following doc for + ortex. Clean-up of "points too close". + +2012-02-23 23:37 +0000 [r2094] Stevan_White: + + * FreeSerif.sfd: Oriya: removed overlap of + components, validated. + +2012-02-23 23:25 +0000 [r2093] Stevan_White: + + * FreeSerif.sfd: Oriya: glyph cleanup of + auxiliaries complete. + +2012-02-23 19:55 +0000 [r2092] Stevan_White: + + * FreeSerif.sfd: Oriya: one removed glyph had + stowed away in a chaining lookup list + +2012-02-23 18:09 +0000 [r2091] Stevan_White: + + * FreeSerif.sfd: Oriya: Corrected lookup tag for + 'haln' form for 'no'. More glyph cleanup in auxiliaries. + +2012-02-23 16:19 +0000 [r2090] daniel_j: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Set correct codepoint + and Unicode name for uniA7AA (hooked H) in sans bold and + bold-oblique + +2012-02-23 14:52 +0000 [r2089] Stevan_White: + + * FreeSerif.sfd: Oriya: corrected blown-out + letter in main range, renamed an auxiliary. + +2012-02-23 14:11 +0000 [r2088] Stevan_White: + + * FreeSerif.sfd: Oriya: worked on vowels. + adjusted ii and ai_length to improve connections. Made table for + i sign beneath tho, dho. + +2012-02-23 13:35 +0000 [r2087] Stevan_White: + + * FreeSerif.sfd: Oriya: in auxiliary glyphs, a + bit more clean-up, regularizing stem widths. Moved previous + 'half' to 'haln', as 'half' isn't recognized by Pango. + +2012-02-23 12:46 +0000 [r2086] Stevan_White: + + * FreeSerif.sfd: Oriya: Re-shaped a few letters + with over-thick round parts. Made vowels a bit closer to base + letter. + +2012-02-23 11:53 +0000 [r2085] Stevan_White: + + * FreeSerif.sfd: Oriya: made verticals in main + range of more consistent width. + +2012-02-22 22:32 +0000 [r2084] Stevan_White: + + * FreeSerif.sfd: Oriya: more lookups seem to be + working, but there is a big question about why the halent + switches position. Is this the shaping engine, or something I've + done with the tables? + +2012-02-22 19:44 +0000 [r2083] Stevan_White: + + * FreeSerif.sfd: Oriya: regularized glyph + bearings + +2012-02-22 19:18 +0000 [r2082] Stevan_White: + + * FreeSerif.sfd: Oriya: enabled lookups for lots + more ligatures. Still concerned that akhans aren't activating. + Some adjustment of stem widths, etc. + +2012-02-22 09:38 +0000 [r2081] Stevan_White: + + * FreeSerif.sfd: Oriya: made anusvara a spacing + mark, made tables and spacing versions of below base marks to + avoid collisions with subscripted consonants, adjusted vowel e to + be less angular and a bit lighter. + +2012-02-22 00:44 +0000 [r2080] Stevan_White: + + * FreeSerif.sfd: Oriya: a lot of work with + tables getting examples on MS Typography pages on Oriya to work. + Glyph clean-up, mark adjustments. + +2012-02-21 10:39 +0000 [r2079] Stevan_White: + + * FreeSerif.sfd: Oriya: completed Unicode range; + more glyph clean-up. yophola and zophola were exchanged -- fixed. + made look-up for reph+canrabindu. + +2012-02-20 22:39 +0000 [r2078] Stevan_White: + + * FreeSans.sfd: Devanagari: better use of + references in auxiliary range + +2012-02-20 08:41 +0000 [r2077] Stevan_White: + + * FreeSerif.sfd: Oriya: more glyph clean-up + +2012-02-19 20:52 +0000 [r2076] Stevan_White: + + * FreeMono.sfd, + FreeSerifBold.sfd: Currency Symbols: New + Indian Rupee. + +2012-02-19 20:27 +0000 [r2075] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Currency Symbols: Rupee ought + to be shaped as a Devanagari ra with two horizontals, as pointed + out by Santhosh Thottingal. + +2012-02-19 20:05 +0000 [r2074] Stevan_White: + + * FreeSans.sfd: Malayalam: corrected l_voc_mal + and ll_voc_mal, which were completely wrong, as pointed out by + Santhosh Thottingal. + +2012-02-19 19:37 +0000 [r2073] Stevan_White: + + * FreeSerif.sfd: Oriya: Made vowels combine more + correctly. More glyph clean-up. + +2012-02-19 11:03 +0000 [r2072] Stevan_White: + + * FreeSerif.sfd: Oriya: more glyph clean-up + +2012-02-19 00:51 +0000 [r2071] Stevan_White: + + * FreeSerif.sfd: Oriya: clean-up, glyph + validation of main Unicode range. + +2012-02-18 21:50 +0000 [r2070] Stevan_White: + + * FreeSerif.sfd: Gujarati: Removed overlaps, + cleaned up resulting issues. + +2012-02-18 19:34 +0000 [r2069] Stevan_White: + + * FreeSerif.sfd: Gujarati: main glyph clean-up + done. some mods to glyph shapes . added a few i-widening table + entries. + +2012-02-18 18:16 +0000 [r2068] Stevan_White: + + * FreeSans.sfd: Malayalam: positioning tables + for below marks l_voc_mal and ll_voc_mal, as well as for reph. + (consult latest development version of Meera). Currency: made + indian Rupee sign a bit wider + +2012-02-18 00:02 +0000 [r2067] Stevan_White: + + * FreeSerif.sfd: Gujarati: further glyph + clean-up (almost there!). Adjusted marks. Made new lookups to + pick letter i based on width of the letter it goes over. + +2012-02-17 14:42 +0000 [r2066] Stevan_White: + + * FreeSerif.sfd: Gujarati: mostly messing with + mark positioning: got rid of carat-reph forms. + +2012-02-17 11:28 +0000 [r2065] Stevan_White: + + * FreeSerif.sfd: Gujarati: further glyph + clean-up, adjustments to mark placement. + +2012-02-17 01:44 +0000 [r2064] Stevan_White: + + * FreeSerif.sfd: Gujarati: replaced ha_half, + added some lookups for above marks. + +2012-02-17 00:14 +0000 [r2062-2063] Stevan_White: + + * FreeSerif.sfd: Correction: kerning tables were + blown out in commit 2056. There were several bad crashes about + that time. The effect seems to be: all kern table entries are set + to 0. + + * sfd/Makefile, FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: kerning tables restored. + Problem happened in commit 2096 + +2012-02-16 23:41 +0000 [r2061] Stevan_White: + + * FreeSerif.sfd: Gujarati: more glyph clean-up, + mostly in auxiliaries. Just noticed all kern tables have been + zeroed again (thank you, FontForge). + +2012-02-16 21:11 +0000 [r2060] Stevan_White: + + * FreeSerif.sfd: Gujarati: glyph clean-up of + Unicode range, some of auxiliary glyphs. + +2012-02-15 20:16 +0000 [r2059] Stevan_White: + + * FreeSerif.sfd: Gujarati: more glyph clean-up, + re-naming. much more to do. + +2012-02-15 17:12 +0000 [r2058] Stevan_White: + + * FreeSerif.sfd: Gujurati: removed anusvara and + nukta lookups in preference of positioning. general glyph + clean-up. deleted a bunch of unused characters. Oriya: general + glyph clean-up. + +2012-02-14 23:59 +0000 [r2057] Stevan_White: + + * FreeSerif.sfd: Gujarati: Again, from Samak + Gujarati font (full GPL 3.0 with font exception) Scaled slightly + to fit bounds, moved some letters, renamed a few. Lots more to + do. + +2012-02-14 22:35 +0000 [r2056] Stevan_White: + + * FreeSerif.sfd: reverting previous commit. + lookup tables somehow got damaged + +2012-02-14 20:40 +0000 [r2055] Stevan_White: + + * FreeSerif.sfd: Gujarati: From Samak Gujarati + font (full GPL 3.0 with font exception) Scaled slightly to fit + bounds, moved some letters, renamed a few. Lots more to do. + +2012-02-14 19:37 +0000 [r2054] Stevan_White: + + * FreeSans.sfd: Gujarati: Deleted range, over + questions of its provenance. Tut mir leid. + +2012-02-13 23:16 +0000 [r2052-2053] Stevan_White: + + * FreeSerif.sfd: Tamil: cleaned up 'virama' + glyph. + + * FreeSerif.sfd: Gurmukhi: cleaned up 'aa' + glyph. + +2012-02-13 23:11 +0000 [r2051] Stevan_White: + + * FreeSerif.sfd: Gurmukhi: cleaned up 'a' glyph. + +2012-02-13 23:06 +0000 [r2049-2050] Stevan_White: + + * FreeSerif.sfd: Oriya: compacted auxiliary + glyphs a bit. + + * FreeSerif.sfd: Oriya: removed most holonto and + nukta forms in preference for positioning lookups + +2012-02-13 21:08 +0000 [r2048] Stevan_White: + + * FreeSans.sfd: Gujarati: made to validate + +2012-02-13 20:55 +0000 [r2047] Stevan_White: + + * FreeSans.sfd: Gujarati: regularized horizontal + placement and spacing, mostly increasing spacing a bit. Got rid + of nukta substitution table in favor of positioning lookup; + likewise with all anusvara lookups. The glyphs of this range are + still very erratic, and the weight is substantially greater than + that of the rest of the face. + +2012-02-13 13:56 +0000 [r2046] Stevan_White: + + * FreeSans.sfd: Gujarati: shifted entire range + up by 44EM, so it didn't dangle so. Fiddled with mark placement. + +2012-02-13 00:01 +0000 [r2045] Stevan_White: + + * FreeSerif.sfd: Gurmukhi: improved vowel a. + +2012-02-12 23:29 +0000 [r2044] Stevan_White: + + * FreeSerif.sfd: Gurmukhi: replaced range with + glyphs from 'singh' metafont by Amarjit Singh + http://www.tex.ac.uk/tex-archive/language/gurmukhi/ The 'singh' + font is properly GPL. And the overall look is much more like + serif than what had been there. Status: added a few letters and + tables. Two marks were unrepresented in 'singh', and are + leftovers. I made a ya_halant and a ra below-form. Also made + substitution and positioning tables. Worst: the vowel 'a' is very + messed up -- much too heavy; hand-drawn. Will have to replace it. + Also need to review the missing marks. Pity there's no bold... + +2012-02-12 22:02 +0000 [r2043] Stevan_White: + + * tools/utility/metafont/bulk_eps_import.py (added), + tools/utility/metafont (added): Tools for + extracting glyphs from metafont files + +2012-02-10 23:22 +0000 [r2042] Stevan_White: + + * FreeSansBold.sfd: Gurmukhi: more of same. + +2012-02-10 23:18 +0000 [r2041] Stevan_White: + + * FreeSansBold.sfd: Gurmukhi: adjusted GPOS + entries + +2012-02-10 22:58 +0000 [r2040] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Gurmukhi: various tweeks to + ligatures. Gujarati: various tweeks to ligatures. + +2012-02-10 19:01 +0000 [r2039] Stevan_White: + + * FreeSansBold.sfd: Gurmukhi: toward version in + medium. Geometric Shapes: made dotted circle. + +2012-02-10 17:57 +0000 [r2038] Stevan_White: + + * FreeSerif.sfd: Oriya: added letters to + complete range. re-named letters for consistency with other indic + languages. fixed a broken table. + +2012-02-10 16:46 +0000 [r2037] daniel_j: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Unicode 6.1 addition in + FreeSerif: H-hook (U+A7AA) for Chadian languages + +2012-02-10 15:46 +0000 [r2036] Stevan_White: + + * FreeSerif.sfd: Oriya: Re-introduced, using + Samak Oriya, a GPL v.3 + font exception. + http://sarovar.org/projects/samyak/ Already the original is + altered in several ways. The glyphs need a lot of work. + +2012-02-10 12:03 +0000 [r2035] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: corrected + Private Use range + +2012-02-09 18:50 +0000 [r2034] Stevan_White: + + * FreeSans.sfd: Gujarati: added abbreviation + character + +2012-02-09 18:29 +0000 [r2033] Stevan_White: + + * FreeSans.sfd: Gurmukhi: named glyphs better. + Malayalam: corrected problems caused by recent inconsistent + naming. + +2012-02-09 16:36 +0000 [r2032] Stevan_White: + + * FreeSans.sfd: Gujurati: named characters + better -- makes it easier to see table problems. Found one error + in tables, fixed. There are others. + +2012-02-08 19:55 +0000 [r2031] Stevan_White: + + * FreeSerif.sfd: Tamil: several new tables in + effort to resolve spacing bug. + +2012-02-08 15:37 +0000 [r2030] Stevan_White: + + * FreeSerif.sfd: Tamil: fixed shrii ligature + +2012-02-08 15:15 +0000 [r2029] Stevan_White: + + * FreeSerif.sfd: Tamil: Toward resolution of bug + #35479: Tamil in FreeSerif: some ligatures wrong + https://savannah.gnu.org/bugs/index.php?35479 Removed GSUB tables + about positioning the virama; implemented this with a GPOS table + and anchor points. Corrected tables for sshri, kss ligatures. + Toward resolution of bug #35480: Tamil in FreeSerif: placement of + vowel marks poor https://savannah.gnu.org/bugs/index.php?35480 + Made a vertical ii sign, made a contextual chain that replaces + the normal ii with this one for certain letters. + +2012-02-08 01:41 +0000 [r2028] Stevan_White: + + * FreeSerif.sfd: Malayalam: Added subtable for + nta (mal_n1rh), Separated 'psts' subtable into u and uu ones, and + everything else, hoping somehow to deal with the orthographic + reform. + +2012-02-07 23:52 +0000 [r2026-2027] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Malayalam: some additions from + recent Unicode (historical letters) Rearranged akhan lookups. + + * tools/report/OpenType/UnicodeRanges.py: Recent + Unicode additions + +2012-02-06 19:24 +0000 [r2025] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Latin: Fixed broken + kerning. Problem was: there was an entry for 'f' as the first + letter in two subtables of the same lookup. The second subtable + was ignored, even though there was no match for the second letter + in the first lookup. That is, within a kern lookup, the first + letters of the pairs should be unique. + +2012-02-06 14:41 +0000 [r2023-2024] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin: put dflt back in + Standard Ligature language list + + * FreeSerif.sfd: Devanagari: added glyphs for + Bompay, Calcutta, Nepali styles from velthuis. made Style Set + lookups for them. Latin: put dflt back in the Standard Ligatures + language list + +2012-02-05 23:59 +0000 [r2022] Stevan_White: + + * FreeSerifBold.sfd: Devanagari: named more + Unicode glyphs, tried to make tables more like latest Serif. Know + of one inconsistency remaining. + +2012-02-05 12:18 +0000 [r2021] Stevan_White: + + * FreeSerif.sfd: Devanagari: re-worked overlarge + reph-anudatta. Regularized table naming. + +2012-02-04 21:50 +0000 [r2019-2020] Stevan_White: + + * FreeSerif.sfd: Devanagari: lookup tables -- + for the first time, test matches big table of ligatures in + velthuis (wrt Sanskrit and Hindi). + + * FreeSans.sfd: Devanagari: named a bunch of + Unicode glyphs + +2012-02-03 15:09 +0000 [r2018] Stevan_White: + + * FreeSerif.sfd: Devanagari: another + re-arrangement of tables for velthuis compliance. problems + persist. + +2012-02-01 20:59 +0000 [r2017] Stevan_White: + + * FreeSerif.sfd: Devanagari: complete + re-structuring of tables in attempt to resemble better the specs + about Indic tables, and produce ligatures of the velthuis font. + Hebrew: Support raising of Yiddish vowel marks. + +2012-02-01 19:29 +0000 [r2016] daniel_j: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Unicode 6.1 additions + in FreeSans: - Tifinagh Ye, Yo - Armenian dram - African H with + hook + +2012-01-31 12:02 +0000 [r2015] Stevan_White: + + * FreeSansBoldOblique.sfd: Hebrew: last commit + accidentlly widened right side of many letters + +2012-01-31 11:51 +0000 [r2014] Stevan_White: + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Hebrew: more + adjustment of points: bold--shifted letters to right + +2012-01-31 11:08 +0000 [r2013] Stevan_White: + + * FreeSansOblique.sfd: Hebrew: some adjustment + of mark positioning + +2012-01-31 10:58 +0000 [r2012] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Hebrew: adjustments to + positioning marks; italic moved letter yod + +2012-01-31 10:33 +0000 [r2011] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Hebrew: deleted incorrect + ligature lookup + +2012-01-31 10:24 +0000 [r2010] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Hebrew: deleted + incorrect ligature lookup + +2012-01-31 10:13 +0000 [r2009] Stevan_White: + + * FreeSansBold.sfd: Hebrew: adjustments to mark + positioning, a bit of tidying of letters. Latin: deleted a + mistakenly copied table. + +2012-01-31 09:47 +0000 [r2008] Stevan_White: + + * FreeSansBold.sfd: Hebrew: added mark + positioning + +2012-01-31 00:15 +0000 [r2007] Stevan_White: + + * FreeSans.sfd: Hebrew: should rememdy bug + #35409: Incorrect placement of khirik-yud for Yiddish in FreeSans + (At least for FreeSans medium) + +2012-01-28 14:26 +0000 [r2006] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Devanagari: roman--adjusted + auxiliary glyph names to better fit bold bold: several + corrections + +2012-01-28 12:37 +0000 [r2005] Stevan_White: + + * FreeSerifBold.sfd: Devanagari: various repairs + to glyphs and tables + +2012-01-28 01:36 +0000 [r2004] Stevan_White: + + * FreeSerifBold.sfd: Devanagari: added glyphs + from velthuis font's dvngb10.pfb, added subtables from FreeSerif. + Still plenty missing. + +2012-01-27 22:13 +0000 [r2003] Stevan_White: + + * FreeSerif.sfd: Devanagari: a couple more + tables to handle velthuis corner cases. + +2012-01-26 22:52 +0000 [r2002] Stevan_White: + + * FreeSerif.sfd: Devanagari: fixed a few lookup + problems. several more remain. + +2012-01-25 14:24 +0000 [r2000-2001] Stevan_White: + + * FreeSerif.sfd: Devanagari: adjustments to mark + positioning + + * FreeSans.sfd: Latin: adjustments to accents + Devanagari: re-working tables for better support of Hindi vs + Sanskrit + +2012-01-25 12:09 +0000 [r1999] Stevan_White: + + * FreeSerif.sfd: Devanagari: Named some letters; + some table clean-up. Devanagari Extended: Added combining + cantillation marks. + +2012-01-24 15:02 +0000 [r1998] Stevan_White: + + * FreeSerif.sfd: Devanagari: Most of the + previous commits about Hindi were in error: two columns of the + velthuis manual for Modern Hindi and Old Hindi were swapped. This + now implements Modern Hindi, except for one conjunct. Old Hindi + conjuncts are moved to separate tables, but Old Hindi is not + specifically supported. + +2012-01-23 18:48 +0000 [r1997] Stevan_White: + + * FreeSerif.sfd: Devanagari: several table + corrections, based on new tests. + +2012-01-23 10:18 +0000 [r1996] Stevan_White: + + * FreeSerif.sfd: Devanagari: table for + consonants that don't take half-form, other conjunct table + tweeks. + +2012-01-21 23:20 +0000 [r1995] Stevan_White: + + * FreeSerif.sfd: Devanagari: many small + corrections to GSUB. + +2012-01-20 13:44 +0000 [r1994] Stevan_White: + + * FreeSerif.sfd: Devanagari: Sanskrit/Hindi + distinction now seems to be working. (Was order of two 'akhn' + tables, one specialized for Sanskrit. Don't understand--thought + always all matching tables were executed.) + +2012-01-20 01:41 +0000 [r1993] Stevan_White: + + * FreeSerif.sfd: Devanagari: some clean-up, + split the akhn table into general (modern Hindi) and Sanskrit. + But not the Sanskrit doesn't activate in any environment, with + lang='sa'. However, seems to work for Hindi. + +2012-01-19 16:00 +0000 [r1992] Stevan_White: + + * FreeSerif.sfd: Devanagari: more tweeks to + rakaar slash + +2012-01-19 15:30 +0000 [r1991] Stevan_White: + + * FreeSerif.sfd: Devanagari: corrected simple + Rakaar forms again + +2012-01-19 13:52 +0000 [r1990] Stevan_White: + + * FreeSerif.sfd: Devanagari: corrected spacing + problem with combining rakaar slash. + +2012-01-19 00:52 +0000 [r1989] Stevan_White: + + * FreeSerif.sfd: Devanagari: fixed last + consonant-virama-ra conjuncts + +2012-01-19 00:32 +0000 [r1988] Stevan_White: + + * FreeSerif.sfd: Devanagari: fixed + consonant-virama-consonant-virama conjuncts + +2012-01-19 00:04 +0000 [r1987] Stevan_White: + + * FreeSerif.sfd: Devanagari: much done on tables + for compound letters. a couple of compounds were corrected. + +2012-01-18 14:40 +0000 [r1986] Stevan_White: + + * FreeSerif.sfd: Devanagari: Much messing with + combined forms for vowels+rakh, finally got features going for + distinction of Rakaar slash vs Rakaar below mark. + +2012-01-16 00:36 +0000 [r1985] Stevan_White: + + * FreeSerif.sfd: Devanagari: more lookups + working. Still a couple of letters wrong. + +2012-01-14 22:43 +0000 [r1984] Stevan_White: + + * FreeSerif.sfd: Devanagari: with help of Z. + Wagner, and a TeX cmap file making the connection betwen + conjuncts in the Velthuis font and Unicode, inserted the Velthuis + au auxiliary glyphs and made lookup tables Mostly working. + +2012-01-13 12:08 +0000 [r1983] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Devanagari: (sans) better names + for a couple of characters, (serif) made names more like sans, + added Kashmiri letters to complete Unicode 6.0 range + +2012-01-13 00:25 +0000 [r1982] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: PS: Added UniqueId TT + Names: Added UniqueID Devanagari: (serif) added ABVM, BLWM tables + and anchors Devanagari: (sans) small tweaks mostly regarding mark + placement + +2012-01-10 17:17 +0000 [r1981] Stevan_White: + + * FreeSans.sfd: Devanagari: a couple of + touch-ups: corrected 'abvs' entry for ausign-anusvera. + +2012-01-10 16:12 +0000 [r1980] Stevan_White: + + * FreeSans.sfd: Devanagari: re-named most + auxiliary glyphs to make tables more sensible. + +2012-01-10 12:56 +0000 [r1979] Stevan_White: + + * FreeSans.sfd: Devanagari: simplified and + regularized some glyph names + +2012-01-10 02:07 +0000 [r1978] Stevan_White: + + * FreeSans.sfd: Gurmukhi: tried to get marks + under control. Added GPOS tables, anchors. + +2012-01-10 00:48 +0000 [r1977] Stevan_White: + + * FreeSans.sfd: Devanagari: copied a few + ligatures that were in gargi but not in FreeSans. There are still + a few more, but I'm not clear about them. Tables: moved auxiliary + letters for Indic around a bit. + +2012-01-09 20:56 +0000 [r1976] Stevan_White: + + * FreeSans.sfd: Indic tables: rearranged + Devanagari: re-named the GPOS anchors Lagin: iogonek lookup had + gotten somehow fouled up + +2012-01-08 01:32 +0000 [r1975] Stevan_White: + + * FreeSerif.sfd: Devanagari: copied in rest of + Unicode chars from velthuis font dvng10.pfb with advice from + Zdeněk Wagner. Next plan: copy in ligatures from same file and + use a cmap file provided by Zdeněk to construct a basic GSUB + table. + +2012-01-08 00:25 +0000 [r1974] Stevan_White: + + * FreeSerif.sfd: Latin, Cyrillic: tweeks to + accent marks. Devanagari: beginning to replace range with + Velthuis font. + +2012-01-07 19:42 +0000 [r1973] Stevan_White: + + * FreeSans.sfd: Devanagari: widened space + between verticals in U+0906 by request. Made a lot of references + in range. Added Kashmiri letters from latest Unicode version. + +2012-01-03 20:17 +0000 [r1972] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Combining Diacritics: + forgot to add Cyrillic mark for previous commit + +2012-01-03 20:08 +0000 [r1971] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Cyrillic: Added mark + for diacriticals on capital letters. toward bug #35225: Combining + Diacritical Marks improperly positioned for Cyrillic capital + letters https://savannah.gnu.org/bugs/?35225 Latin: re-thought + spacing in bold, bold oblique, and re-positioned many accents for + legibility + +2011-12-31 20:09 +0000 [r1970] Stevan_White: + + * FreeSans.sfd: Miscellaneous Symbols: hammer + and sickle, smileface, frown face, courtesy Sander van Geloven + +2011-12-28 14:05 +0000 [r1969] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Mathematical Operators: + revision of v. and h. placement and spacing. Reduced height of + partialdiff in some faces. + +2011-12-28 13:40 +0000 [r1968] Stevan_White: + + * FreeSerif.sfd: Mathematical Operators: lowered + nabla, made partialdiff of normal height + +2011-12-25 13:54 +0000 [r1967] Stevan_White: + + * FreeSans.sfd: Miscellaneous Symbols: uni2639 + -- a (first) contribution by Sander van Geloven + +2011-12-25 13:37 +0000 [r1966] Stevan_White: + + * FreeSerif.sfd: Mathematical Operators: + improved symbols having vertical lines + +2011-12-19 13:55 +0000 [r1965] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: General Punctuation: + regularize width of bullet chars Geometrical Shapes: made new and + regularized width of bullet chars Mathematical Operators: messed + with bullet-lige operators + +2011-12-18 17:35 +0000 [r1964] Stevan_White: + + * FreeSerif.sfd: Mathematical Operators: fixed + some spacing issues. + +2011-12-18 13:52 +0000 [r1963] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Latin, Punctuation: + slash and some vertical lines were wrongly spaced. + +2011-12-17 01:39 +0000 [r1962] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Mathematical Operators: in + sans, added some angle glyphs by request. General vertical + metrecs: fixed some mistakes, re-thought overall. + +2011-12-16 12:17 +0000 [r1961] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Technical Symbols: made + extensible mathematical symbol pieces for sans, adjusted + horizontal bracket in serif. + +2011-12-16 00:10 +0000 [r1960] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Sans: glyphwise same + vertical adjustments as with Serif, same caveats. All faces: + re-thought metrics. Hope they make better sense now. + +2011-12-15 18:02 +0000 [r1959] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: General alterations to make + fit in vertical bounds (-300,900). Problems remain in Sinhala and + Malayalam. Esp. note two Bengali "vocalic" glyphs, used only for + transcription of Sanskrit, were altered and moved. + +2011-12-14 22:31 +0000 [r1958] Stevan_White: + + * FreeSerif.sfd: Malayalam: some glyph clean-up + +2011-12-14 21:49 +0000 [r1957] Stevan_White: + + * FreeSerif.sfd: Changed ascent and descent of a + number of letters out of bounds (several in Arabic, also + Devnagari). The worst are in Malayalam though, and they remain. + +2011-12-14 15:59 +0000 [r1956] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Supplementary + Punctuation: made a few new ones + +2011-12-12 20:52 +0000 [r1955] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Latin Extended-B: + Same with tz ligature as in roman + +2011-12-12 18:42 +0000 [r1954] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Latin Extended-B: + re-thought replacement for tz ligature in German. Note: the + Unicode tz character is used in Mayanist texts. + +2011-12-11 23:25 +0000 [r1953] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Complete set of lowercse + latin super/subscripts for normal and bold, with 'subs' and + 'sups' lookups. + +2011-12-11 20:59 +0000 [r1952] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: (roman) re-thought + tz ligature Number Forms: adjusted vulgar fractions table, to + make all work in xelatex + +2011-12-09 11:22 +0000 [r1951] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: avoid fi, fl etc + ligatures in Turkish. Re-thought TZ, tz ligatures. + +2011-12-09 00:08 +0000 [r1950] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Proportional Numbers, + Slashed Zero + +2011-12-08 23:57 +0000 [r1948-1949] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Greek: added digamma + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Serif faces: lots of work + on numeric substitutions 'onum' Oldstyle Figures 'pnum' + Proportional Numbers 'tnum' Tabular Numbers 'lnum' Lining Figures + 'zero' Slashed Zero Cyrillic for Bulgarian: activated new-style + forms with 'ss01' Style Set 1 Cyrillic regular: Bit of kerning. + (FontForge still complains about non-Unicode glyphs) + +2011-12-06 22:40 +0000 [r1947] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: More additions to 'sups' + table in roman, bold. Added a few Phonetic Extensions to + italic... but this should wait for a set of small caps. + +2011-12-06 21:47 +0000 [r1945-1946] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Changed Bulgarian lookup + tag from cv00 to ss01 bold: adjusted some superscript letter + spacings, minute, prime spacing normal: added proportional + numerals, tables tnum, lnum, pnum adjusted widths of some + superscript letters, tweeked some others added tables sups, subs + + * FreeSans.sfd: Latin: some kerning + +2011-12-05 18:50 +0000 [r1944] Stevan_White: + + * FreeSansBold.sfd: Latin etc: re-spaced, + re-kerned letter a + +2011-12-05 13:19 +0000 [r1943] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Cyrillic: tweeks to glyphs, + spacing for alternate Bulgarian letters. + +2011-12-05 12:47 +0000 [r1942] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Cyrillic: kerning and spacing. + +2011-12-05 10:27 +0000 [r1941] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Cyrillic: more work on + alternative letters for Bulgarian, Serbian + +2011-12-04 23:46 +0000 [r1939-1940] Stevan_White: + + * FreeSerif.sfd: Cyrillic: adjust spacing of + some Bulgarin letters + + * FreeSerifBold.sfd: Latin: bit o kerning + +2011-12-04 14:00 +0000 [r1938] Stevan_White: + + * FreeSerif.sfd: Cyrillic: expanded/corrected + letters for Bulgarian alternate forms. + +2011-12-03 22:45 +0000 [r1937] Stevan_White: + + * FreeSerif.sfd: Cyrillic: alternative small + letters for Bulgarian, with lookup table. + +2011-12-03 18:04 +0000 [r1936] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBoldOblique.sfd: glyph clean-ups + related to recent commits, toward validation + +2011-12-03 17:29 +0000 [r1935] Stevan_White: + + * FreeSansBoldOblique.sfd: Mathematical + Operators: two were out of place + +2011-12-03 17:25 +0000 [r1934] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Arrows: made new + ones, corrected others + +2011-12-03 15:48 +0000 [r1933] Stevan_White: + + * FreeSerif.sfd: Currency Symbols: added + spesmilo + +2011-12-03 15:04 +0000 [r1932] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerifBold.sfd: Arrows: lots of additions, + corrections + +2011-12-03 13:32 +0000 [r1931] Stevan_White: + + * FreeSansOblique.sfd: Arrows: made glyphs so + range is similar to rest of Sans. + +2011-12-03 12:59 +0000 [r1930] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Geometric Shapes: + made minimal set. Mathematical Operators: made a few more glyphs, + corrected a couple. Number Forms: deleted range in bold faces -- + can't properly represent all. + +2011-12-03 01:02 +0000 [r1929] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoOblique.sfd: Miscellaneous Technical + Symbols: made a few important ones. + +2011-12-03 00:33 +0000 [r1928] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Mathematical + Operators: made a few more glyphs. some clean-up. + +2011-12-02 19:12 +0000 [r1927] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Mathematical + Operators: revised a few glyphs in medium, got a sort of minimal + set into other styles + +2011-12-02 15:03 +0000 [r1926] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Mathematical + Operators: made yet more. + +2011-12-02 13:57 +0000 [r1925] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Mathematical Operators: + revised a few in medium (weight and spacing), made a lot of new + characters for other styles. + +2011-12-02 10:53 +0000 [r1924] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Mathematical Operators + (etc): more operators (bold), revisions (medium) + +2011-12-02 02:32 +0000 [r1923] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Mathematical Operators: + tried to make of more uniform weight (medium) made several new + (bold) + +2011-12-01 20:22 +0000 [r1921-1922] Stevan_White: + + * FreeSerif.sfd: Combining Half Marks: adjusted + mark anchors + + * FreeMono.sfd: Cyrillic: fix to old letter + Arabic: hah_final made all contours- no refs + +2011-12-01 19:34 +0000 [r1919-1920] Stevan_White: + + * tools/generate/TrueType, + tools/generate/OpenType, + tools/generate/MacTT: vim-style file type comment + + * tools/generate/buildutils.py: Version string to + comply with OpenType recommendation. + +2011-12-01 18:37 +0000 [r1918] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBoldOblique.sfd: Misc. Math. Symbols: + made reverse logical not (req. for some MS codepages) Math. + Operators: made a few while I was around + +2011-11-30 20:50 +0000 [r1917] Stevan_White: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Cyrillic: made uk letters + digraph, due to complaint by user + +2011-11-30 13:20 +0000 [r1916] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: Corrected + Combining Half Marks + +2011-11-30 13:15 +0000 [r1915] Stevan_White: + + * FreeSerif.sfd: Combining Half Marks: made + letters, filled range, added mark anchors + +2011-11-30 12:26 +0000 [r1914] Stevan_White: + + * Makefile: targets for woff packages + +2011-11-30 12:15 +0000 [r1913] Stevan_White: + + * README: Added lines on WOFF format. + +2011-11-30 12:05 +0000 [r1912] Stevan_White: + + * notes/webfont_guidelines.txt: added WOFF + +2011-11-28 11:41 +0000 [r1911] Stevan_White: + + * FreeSerif.sfd: Latin: some light kerning + +2011-11-28 00:17 +0000 [r1910] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Grid Fitting: made + uniformly Version 1 ("Optimized for Cleartype" won't stay on in + FontForge ?) + +2011-11-27 20:52 +0000 [r1909] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: general glyph alterations + toward validation. some of these are due to some bug in FontForge + algorithms -- nothing was apparently wrong with the glyphs. + +2011-11-27 00:34 +0000 [r1907-1908] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: some kerning + + * sfd/Makefile, + tools/test/checkGlyphNumbers.py: Made to function + either from directory or from Makefile. + +2011-11-25 11:38 +0000 [r1906] Stevan_White: + + * FreeSerifBold.sfd: correction to 'ccmp' table + for Vietnamese 2 + +2011-11-25 11:29 +0000 [r1905] Stevan_White: + + * FreeSerif.sfd: Added some fractions to the + 'frac' lookup + +2011-11-25 11:17 +0000 [r1904] Stevan_White: + + * FreeSerif.sfd: corrected some entries in + 'frac' lookup + +2011-11-25 11:08 +0000 [r1903] Stevan_White: + + * FreeSerif.sfd: Number Forms: adjusted diagonal + fractions Cyrillic: clean-up of Ksi contour + +2011-11-25 10:36 +0000 [r1901-1902] Stevan_White: + + * tools/report/kernclasses.py (added): Tabular + report of kerning classes in fonts + + * FreeSerifBoldItalic.sfd: Latin: named 2 glyphs + referred to in kern tables + +2011-11-25 10:16 +0000 [r1900] Stevan_White: + + * tools/test/checkGlyphNumbers.py: corrected for + directory move + +2011-11-24 18:35 +0000 [r1899] Stevan_White: + + * FreeSans.sfd: Cyrillic: made Ksi, ksi + +2011-11-24 17:58 +0000 [r1898] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Latin: for f and + other hooked letters: special punctuation lookup + +2011-11-24 17:39 +0000 [r1896-1897] Stevan_White: + + * FreeSerif.sfd: General Punctuation: adjusted, + regularized spacing of primes + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Latin: f and other + hooked letters: put more of hook into kerning + +2011-11-24 16:51 +0000 [r1895] Stevan_White: + + * FreeSerif.sfd: Cyrillic: improve spacing of + Ksi + +2011-11-24 15:05 +0000 [r1894] Stevan_White: + + * FreeSans.sfd: Cyrillic: Made some Old Church + Slavonic letters, by request. + +2011-11-23 15:12 +0000 [r1893] Stevan_White: + + * FreeSans.sfd: Malayalam: glyph clean-up toward + validation + +2011-11-23 01:19 +0000 [r1892] Stevan_White: + + * FreeSans.sfd: Malayalam conjuncts: numerous + contour improvements toward validation + +2011-11-22 00:25 +0000 [r1890-1891] Stevan_White: + + * tools/utility/log2changelog_CVS.pl (removed): This + is what I meant to do in the previous commit + + * tools/utility/log2changelog.pl (removed), + tools/utility/log2changelog_CVS.pl (added): No + need for this script now the VC is changed to SVN; there are + other tools for SVN that perform the same task. + +2011-11-21 19:01 +0000 [r1889] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: More individual glyph + tweeks toward validation. (Discovered trigger to one FontForge + bug: contour 1st node at sharp point.) + +2011-11-21 11:15 +0000 [r1888] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Overall glyph tweeks + to improve FontForge validation. Note some of these can be called + messy node problems, others are due to some malfunction of + FontForge. + +2011-11-20 14:36 +0000 [r1887] Stevan_White: + + * ChangeLog: brought up to date + +2011-11-18 09:55 +0000 [r1886] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Unfortunately several + unrelated changes got balled up in this commit. Generally, slight + re-wording of license (program ->font) Serif, Sans: Latin, Greek, + Cyrillic and phonetic: substantial changes to glyph bearings, + attempt to normalize; re-did kerning angled slightly + hungarianumlaut and double-grave accents toward one another. + lcaron, dcaron, tcaron: prefer an acute accent to apostrophe. + Note this messes up some letters d, l, t with acute, for + languages using IPA. Serif: Cyrillic Ouk: fixed bug #34687: Bad + shape of Cyrillic U+0478 & u+0479 Cyrillic Extended-A: increased + hight of combining marks slightly (regular face only) Italic + Cyrillic: re-did Serbian sha and te with longer line. Bengali, + Tamil, Thai, Ethiopic, Georgian, Cyrillic Extended-B, Latin + Extended-D, Arabic Presentation forms, Letterlike and + Miscellaneous Math Symbols: glyph clean-ups longs: fixed bug + #34841: U+017F LONG S upright a bit wrong Sans: acute, grave, + hungarianumlaut and double-grave accents on capitals somewhat + shorter to better fit in the line, + +2011-11-18 09:46 +0000 [r1885] Stevan_White: + + * FreeMono.sfd: Arabic: positional + substitutions; added a couple of characters + +2011-11-12 14:48 +0000 [r1883-1884] Stevan_White: + + * sfd/Makefile: target for making WOFF files + + * tools/generate/WOFF: removed one unused package + better documentation + +2011-11-12 14:37 +0000 [r1882] Stevan_White: + + * tools/generate/WOFF: removed debug strings + +2011-11-12 14:34 +0000 [r1881] Stevan_White: + + * tools/generate/WOFF (added): Generator for Web + Open Font Format files + +2011-11-05 16:43 +0000 [r1880] Stevan_White: + + * FreeMono.sfd: Arabic: addded three letters + +2011-11-05 15:06 +0000 [r1879] Stevan_White: + + * FreeMono.sfd: Arabic: Many incorrectly 0-width + chars made full width. Implemented marks, mostly for vertical + mark placement. + +2011-11-04 22:28 +0000 [r1878] Stevan_White: + + * FreeMono.sfd: Arabic: added several + characters. nearing functionality of serif version. + +2011-11-04 14:55 +0000 [r1877] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: fixed several + substitution and glyph problems. See discussion + https://savannah.gnu.org/bugs/?34190 + +2011-11-03 17:55 +0000 [r1876] Stevan_White: + + * FreeSerifBold.sfd: Arabic: improved meemfinal + +2011-11-03 16:07 +0000 [r1875] Stevan_White: + + * FreeSerif.sfd: Punctuation Suppl: a few + additions. Geometrical Shapes, Math Suppl: mostly spacing. + +2011-11-03 13:18 +0000 [r1873-1874] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: typo in + doc + + * FreeSerif.sfd: Removed excess entry for + uni29b4. + +2011-11-03 12:55 +0000 [r1872] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: Added to + Supplemental Punctuation + +2011-11-03 12:15 +0000 [r1871] Stevan_White: + + * FreeSerif.sfd: Punctuation: named some glyphs, + re-sized some spaces, added some Supplemental + +2011-11-03 09:48 +0000 [r1870] Stevan_White: + + * tools/utility/fontforge-interp.sh: more doc + +2011-11-03 01:40 +0000 [r1869] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Glyph clean-up, and change + of problematic glyph names + +2011-11-03 01:21 +0000 [r1868] Stevan_White: + + * tools/test/validate.py: Better exception handling + +2011-11-03 01:09 +0000 [r1867] Stevan_White: + + * FreeSerifBold.sfd: Some glyph clean-up + +2011-11-03 00:59 +0000 [r1866] Stevan_White: + + * FreeSerif.sfd: Some glyph clean-up. + +2011-11-03 00:51 +0000 [r1862-1865] Stevan_White: + + * tools/utility/fontforge-interp.sh (added): Wrapper + for fontforge. + + * tools/test/findBackLayers.py, + tools/test/validate.py, + tools/test/checkGlyphNumbers.py, + tools/test/isMonoMono.py: Call wrapper for + fontforge rather than calling a specific instance. + + * tools/generate/TrueType, + tools/generate/OpenType, + tools/generate/MacTT: Call wrapper for fontforge + rather than calling specific instance + + * tools/report/private_use.py, + tools/report/range_report.py, + tools/report/ligatureLookups.py: Use wrapper for + fontforge rather than calling explicit instance. + +2011-11-03 00:45 +0000 [r1861] Stevan_White: + + * sfd/Makefile: Made to execute fontforge from any + instance in PATH + +2011-11-02 18:32 +0000 [r1859-1860] Stevan_White: + + * FreeSerif.sfd: Arabic: named some glyphs + + * FreeMono.sfd: Arabic: corrected slot for one + letter. + +2011-11-02 00:56 +0000 [r1858] Stevan_White: + + * FreeMono.sfd: Arabic: most of intermediate + forms with lookups: A and B. Some general contour cleanup. + +2011-10-31 22:12 +0000 [r1857] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Cyrillic: added + 'locl' lookup for Serbian/Macedonian 'be' + +2011-10-31 19:34 +0000 [r1855-1856] Stevan_White: + + * FreeSerif.sfd: Spacing Modifier Letters: + horizontal space adjustments + + * FreeSans.sfd: Latin, Diacritics, etc: + hungarian umlaut, double grave adjustments + +2011-10-31 19:27 +0000 [r1854] Stevan_White: + + * FreeMono.sfd: Arabic: Drew most of main range. + +2011-10-31 17:22 +0000 [r1853] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin, Diacriticals, etc: + adjustment on hungarian umlaut, double grave + +2011-10-30 16:25 +0000 [r1852] Stevan_White: + + * FreeSerif.sfd: Arabic: removed Arabic-only + ligatures lookup, as it seems to confuse Pango. + +2011-10-30 12:51 +0000 [r1851] Stevan_White: + + * FreeSerif.sfd: Arabic: changed size of tatweel + +2011-10-30 11:07 +0000 [r1850] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Cyrillic: cursive + Macedonian gje. See bug 34688. + https://savannah.gnu.org/bugs/?34688 + +2011-10-29 23:12 +0000 [r1849] Stevan_White: + + * FreeSerif.sfd: Arabic Presentation Forms-B: + adjustment to meem-final. + +2011-10-29 22:01 +0000 [r1848] Stevan_White: + + * FreeSerif.sfd: Spacing Modifier/Combining + Diacritics: double-gramve and Hungarian umlaut, to make them less + extremely wide and hard to accommodate. Made less steep, at + slightly different angles, following advice at + http://typophile.com/node/78623 + http://diacritics.typo.cz/index.php?id=24 + +2011-10-29 18:53 +0000 [r1847] Stevan_White: + + * FreeSerif.sfd: Arabic: Re-worked final meem. + Put Arabic-only ligatures in Arabic-only lookup. Put Allah in a + 'dlig' lookup. Made tatweel shorter. + +2011-10-29 12:09 +0000 [r1846] Stevan_White: + + * FreeSerif.sfd: Arabic: marked some ending + ligatures as Arabic-language only, on advice from a Persan + speaker (comments to bug #34190) + +2011-10-29 06:18 +0000 [r1845] Stevan_White: + + * FreeSerif.sfd: General Punctuation: made + bullet-bullets same width as bullet + +2011-10-29 04:44 +0000 [r1844] Stevan_White: + + * FreeSerif.sfd: Punctuation, Geometric Shapes, + Miscellaneous Symbols, etc.: regularize bullet-like characters + somewhat in width and weight + +2011-10-28 23:51 +0000 [r1843] Stevan_White: + + * FreeSerifBold.sfd: Arabic Extended-A: Added 2 + ligatures + +2011-10-28 22:53 +0000 [r1842] Stevan_White: + + * FreeSans.sfd: Cyrillic Supplement: letters for + Abkhaz and Azerbaijani, and Nivkh. + +2011-10-28 22:16 +0000 [r1841] Stevan_White: + + * FreeMono.sfd: Cyrillic Supplement: letters for + Abkhaz and Azerbaijani + +2011-10-28 21:53 +0000 [r1840] Stevan_White: + + * FreeMono.sfd: Cyrillic: Added Nivkh letters + +2011-10-28 18:10 +0000 [r1839] Stevan_White: + + * tools/utility/special-purpose/makeBraille.py + (added), tools/utility/special-purpose (added), + tools/utility/makeBraille.py (removed): + special-purpose directory for one-shot scripts, included as + examples. + +2011-10-28 12:29 +0000 [r1838] Stevan_White: + + * FreeSansBold.sfd: Latin: small adjustment to + letter spacing + +2011-10-28 11:50 +0000 [r1837] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: several lookup + corrections thanks to Emmanuel Vallois, see comments to [bug + #34190] Persian characters in FreeSerif not connecting right In + bold, lots of re-namings to make lookups copied from roman work. + +2011-10-27 22:01 +0000 [r1836] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeMono.sfd: Latin (Vietnamese): adjusted + some marks. Latin: SansBold attempts to regularize spacing. + +2011-10-27 16:34 +0000 [r1834-1835] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: kerning, a bit of + letter spacing + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Latin: much messing + with accents for Vietnamese, some kerning + +2011-10-26 22:42 +0000 [r1833] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: efforts to limit + height of accents: Making shorter glyphs for some accents for + capital letters. Some compacting of taller stacked glyphs. Made + all lowercase letters' accents fall in the bounds. + +2011-10-26 14:44 +0000 [r1832] Stevan_White: + + * FreeSerifBold.sfd: Combining Diacritics: + adjustments for Serbian Cyrillic + +2011-10-26 14:36 +0000 [r1830-1831] Stevan_White: + + * FreeSans.sfd: Latin, General Punctuation: + attempts to regularize widths and spaces + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Combinind + Diacriticals: corrections to mark placement for Cyrillic Serbian + +2011-10-26 12:39 +0000 [r1829] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Latin: Replaced d-, l-, t-caron + mark with one distinguishable from punctuation Sans: implemented + shorter acute, grave, circumflex, caron for caps + +2011-10-26 10:20 +0000 [r1828] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Cyrillic: adjusted + mark anchors + +2011-10-26 02:16 +0000 [r1827] Stevan_White: + + * FreeSansBoldOblique.sfd: General Punctuation: + got rid of minor build warning + +2011-10-26 02:13 +0000 [r1826] Stevan_White: + + * FreeMono.sfd: Greek: got rid of build warning + +2011-10-26 01:56 +0000 [r1825] Stevan_White: + + * FreeSerif.sfd: Punctuation, Spacing + Diacritical Marks: worked on widths + +2011-10-25 21:28 +0000 [r1822-1824] Stevan_White: + + * tools/generate/TrueType, + tools/generate/OpenType, + tools/generate/buildutils.py, + tools/generate/MacTT: Again trying to set keywords + + * tools/generate/TrueType, + tools/generate/OpenType, + tools/generate/buildutils.py, + tools/generate/MacTT: Added Date svn keyword + + * tools/generate/TrueType, + tools/generate/OpenType, + tools/generate/buildutils.py, + tools/generate/MacTT: Added Revision keyword + +2011-10-25 21:13 +0000 [r1821] Stevan_White: + + * tools/generate/TrueType, + tools/generate/OpenType, + tools/generate/buildutils.py (added), + tools/generate/MacTT: Implemented cleaned-up + Revision string + +2011-10-25 20:10 +0000 [r1820] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Cyrillic: added marks for + Serbian; adjusted others + +2011-10-25 19:19 +0000 [r1819] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Cyrillic: added marks + for Serbian to roman, added mark positioning to non-roman + +2011-10-25 19:02 +0000 [r1818] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Adjusted the font family + class. some kerning adjusted some marks. + +2011-10-25 18:42 +0000 [r1817] Stevan_White: + + * FreeSerifItalic.sfd: Spacing + Modifiers/Diacritics: regularized spacing some + +2011-10-25 14:42 +0000 [r1816] Stevan_White: + + * FreeSerifItalic.sfd: Latin: shifted grave and + acute accents so they could be used independently. Lots more + kerning, More adjustment of extreme characters. + +2011-10-24 20:16 +0000 [r1815] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Cyrillic: for Serbian + 'salt' form for italic 'sha' with line below + +2011-10-24 15:02 +0000 [r1814] Stevan_White: + + * FreeSerifItalic.sfd: Cyrillic: removed lookup + for supposed Serbian gje, leaving only the Macedonian form. + +2011-10-23 12:06 +0000 [r1812-1813] Stevan_White: + + * FreeSerif.sfd: Latin, IPA: kerning + + * FreeSerifItalic.sfd: Latin, IPA: horizontal + positioning, kerning Greek, extended: re-positioning of all marks + +2011-10-22 18:24 +0000 [r1811] Stevan_White: + + * FreeSerifItalic.sfd: Cyrillic: re-kerned a bit + +2011-10-21 22:53 +0000 [r1810] Stevan_White: + + * FreeSerifItalic.sfd: Greek, Cyrillic: working + on fallout from re-spacing of Latin + +2011-10-21 20:18 +0000 [r1809] Stevan_White: + + * FreeSerifItalic.sfd: Latin: kerning + +2011-10-20 17:13 +0000 [r1808] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd: Greek, Cyrillic: made Phi, + Ef more distinct, made some overwide glyphs narrower + +2011-10-20 16:44 +0000 [r1806-1807] Stevan_White: + + * FreeSerifItalic.sfd: Latin: starting to mess + with spacing of extreme letters: f g j y + + * FreeMono.sfd: Greek, Cyrillic: make Phi, Ef + more distinct + +2011-10-19 17:24 +0000 [r1805] Stevan_White: + + * FreeSerif.sfd: Diacriticals: corrected + acutecmb placement + +2011-10-19 14:56 +0000 [r1804] Stevan_White: + + * FreeSerif.sfd: Latin/IPA: Reduced size of + hooks on many letters. Reduced spacing of grave, acute (big + overhaul). kerning in IPA for African, Americanist alphabets + +2011-10-18 23:35 +0000 [r1802-1803] Stevan_White: + + * notes/webfont_guidelines.txt: Propset id + + * notes/webfont_guidelines.txt: formatting, propset + ID + +2011-10-18 23:19 +0000 [r1801] Stevan_White: + + * notes/README-downloads.txt, + notes/webfont_guidelines.txt (added), + notes/features.txt: updates added webfont + guidelines + +2011-10-18 22:22 +0000 [r1800] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Latin: more fiddling with + kerning. Fixed longstanding bug with "equals" (had mysterious + mkmk anchors) + +2011-10-18 00:03 +0000 [r1799] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Latin: more fiddling with + kerning + +2011-10-17 23:36 +0000 [r1798] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Latin: More with j and f. + Got rid of small caps kerning, which didn't make much sense + anyway. Tried to space small caps letters a bit better. + +2011-10-17 19:13 +0000 [r1797] Stevan_White: + + * FreeSerif.sfd: Latin: a bit experimental: got + rid of overlap of tails on f and j, compensating with kerning. + More kerning. Increased width of quotesingle. + +2011-10-17 18:10 +0000 [r1796] Stevan_White: + + * FreeSerif.sfd: Latin kerning: added letters to + classes. Have not yet done Latin Extended Additional + +2011-10-17 12:40 +0000 [r1795] Stevan_White: + + * FreeSerifBold.sfd: Latin: kerning re-done + +2011-10-15 18:28 +0000 [r1794] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Latin: more adjustments to + spacing, and re-introduced kerning, completely re-done since the + disappearance of the tables. Improvement all around. + +2011-10-15 15:28 +0000 [r1793] Stevan_White: + + * FreeSerif.sfd: Latin, Greek, Cyrillic: changes + to L and R bearings to most characters. + +2011-10-15 12:01 +0000 [r1792] Stevan_White: + + * FreeSerifItalic.sfd: Latin, Cyrillic: spacing + of a couple of letters + +2011-10-15 11:24 +0000 [r1791] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Latin, Cyrillic: + spacing and kerning of a few letters + +2011-10-15 09:38 +0000 [r1790] Stevan_White: + + * FreeSerifItalic.sfd: Cyrillic: some kerning, + esp. of Serbian letters + +2011-10-15 01:40 +0000 [r1789] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Cyrillic: adjusted + boundaries of alternate te + +2011-10-14 11:59 +0000 [r1788] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerifBold.sfd: Cyrillic: Made + Serb/Macedonian 'be' and lookups for it + +2011-10-13 11:20 +0000 [r1787] Stevan_White: + + * FreeSans.sfd: Latin, Greek, Cyrillic: attempt + to make capitals with straight sides spaced even Some clean-up of + Greek letterforms + +2011-10-13 10:18 +0000 [r1786] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Cyrillic: made special 'be' for + Serbian/Macedonian lookup for gje for italic + +2011-10-12 22:29 +0000 [r1785] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Cyrillic: more tweeks + to Serbian Cyrillic glyphs and similar, re-named Cyrillic + auxiliary glyphs. + +2011-10-12 18:40 +0000 [r1784] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Cyrillic: Lookups for + localized forms for Serbian/Macedonian. Remedies bug #34537: + Serbian Localized Glyphs https://savannah.gnu.org/bugs/?34537 + Most look-ups were for existing glyphs. In italic also made glyph + for te, like a rotated m with macron. Re-named cyrillic auxiliary + glyphs. + +2011-10-12 12:31 +0000 [r1783] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin, Diacriticals: + adjustments for Kwak̕wala + +2011-10-11 20:48 +0000 [r1782] Stevan_White: + + * CREDITS: to myself, for Old Italic + +2011-10-11 17:55 +0000 [r1781] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: Update for + Old Italic + +2011-10-11 17:00 +0000 [r1780] Stevan_White: + + * FreeMono.sfd: Old Italic: I made letters for + this alphabet based on bits of existing ones. + +2011-10-11 09:55 +0000 [r1779] Stevan_White: + + * FreeSerif.sfd: IPA: adjustment to kerning, + named a few marked letters + +2011-10-11 09:45 +0000 [r1778] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Phonetic Extensions: + additions for Saanich/Musqueam + +2011-10-11 09:40 +0000 [r1777] Stevan_White: + + * FreeMono.sfd: Runic: completely re-did range, + to make stem width like rest of font. (ends are still square or + angular rather than round...) Consulted many inscriptions, and + changed form where seemed appropriate. + +2011-10-09 15:26 +0000 [r1776] Stevan_White: + + * FreeSerif.sfd: Kerning of IPA symbols for + Saanich/Musqueam + +2011-10-09 14:03 +0000 [r1775] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Latin, IPA + Extensions, Diacriticals: toward Sannich/Musqueam + +2011-10-09 10:52 +0000 [r1774] Stevan_White: + + * notes/maintenance.txt: about adding binaries to + cvs for web pages + +2011-10-08 22:48 +0000 [r1773] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin/IPA: further tweeks + to letter forms + +2011-10-08 19:36 +0000 [r1772] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin, Phonetic symbols, + Diacriticals: tweeks for Musqueam/Saanich + +2011-10-08 17:33 +0000 [r1771] Stevan_White: + + * FreeSans.sfd: couple of validation issues + +2011-10-08 16:47 +0000 [r1770] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin, Combining Marks, + IPA: lots of changes for Saanich/Musqueam. + +2011-10-08 01:28 +0000 [r1769] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Latin/IPA: tweeks for + Saanich/Musqueam + +2011-10-07 12:13 +0000 [r1768] Stevan_White: + + * FreeSerif.sfd: Latin and IPA, Phonetic + Extensions: For display of Saanich language, 1) made for + combining right comma on small Latin, some IPA letters, and on + the c-hacek. 2) made ligatures for d, l, and t combined with + U+0313, 3) Adjusted the widths of some of the IPA letters. + +2011-09-30 23:31 +0000 [r1767] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: more kerning, + re-think letter ae + +2011-09-30 19:50 +0000 [r1766] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerifBold.sfd: Basic Latin: emboldened + commercial at sign, to remedy bug #23574: Serif Bold: some + symbols not bold https://savannah.gnu.org/bugs/index.php?23574 + +2011-09-30 18:59 +0000 [r1765] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd: Bengali: made a Ganda mark, to + remedy bug #33983: Bengali Ganda mark is missing + https://savannah.gnu.org/bugs/index.php?33983 + +2011-09-30 18:17 +0000 [r1764] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: more work on + connecting letters. Re-thought tatween. + +2011-09-30 13:00 +0000 [r1763] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: un-linking more + auxiliary dependencies. Re-thought 'v' decoration. Hebrew: dagesh + was a little small in bold. + +2011-09-29 22:39 +0000 [r1762] Stevan_White: + + * FreeSerifBold.sfd: Arabic: removed more + unnecessary auxiliary references + +2011-09-29 20:59 +0000 [r1761] Stevan_White: + + * FreeSerifBold.sfd: Arabic: emboldended the + last of the letters (I hope) un-linked some auxiliaries that were + represented by unicode + +2011-09-29 13:37 +0000 [r1760] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: alterations to + kaf/keheh, kerning to improve spacing + +2011-09-29 10:43 +0000 [r1759] Stevan_White: + + * FreeSerifBold.sfd: Arabic: lots of alterations + to letter shapes, spacing + +2011-09-28 23:03 +0000 [r1758] Stevan_White: + + * FreeSerifBold.sfd: Arabic: moved a lot of + improvements from roman to bold + +2011-09-28 14:13 +0000 [r1757] Stevan_White: + + * FreeSerif.sfd: Arabic: reduced awful space on + left side of free-standing letters + +2011-09-28 00:10 +0000 [r1756] Stevan_White: + + * FreeSerif.sfd: Arabic: regularized alef + variants, maddah, etc. + +2011-09-27 20:47 +0000 [r1755] Stevan_White: + + * FreeSerif.sfd: Arabic: More ligatures, a + couple alternative parentheses, re-worked hah medial + +2011-09-27 09:11 +0000 [r1754] Stevan_White: + + * FreeSerif.sfd: Arabic: added a few ligatures, + re-thought jeem medial, touched up some other letters + +2011-09-26 15:28 +0000 [r1753] Stevan_White: + + * FreeSerif.sfd: Arabic: more small stem width + adjustments + +2011-09-26 14:51 +0000 [r1752] Stevan_White: + + * FreeSerif.sfd: Arabic: kerning was in wrong + direction. + +2011-09-26 13:01 +0000 [r1751] Stevan_White: + + * tools/report/range_report.py, + tools/report/OpenType/UnicodeRanges.py: updated + copyright + +2011-09-26 07:06 +0000 [r1750] Stevan_White: + + * FreeSerif.sfd: Arabic: trying to regularize + stem widths + +2011-09-25 22:33 +0000 [r1749] Stevan_White: + + * FreeSerif.sfd: Arabic: more adjustment, + kerning + +2011-09-25 15:45 +0000 [r1748] Stevan_White: + + * FreeSerif.sfd: Arabic: more tweeks to shapes, + kerning + +2011-09-25 15:16 +0000 [r1747] Stevan_White: + + * FreeSerif.sfd: Arabic: tweeks to letter + shapes, spacing, mark placement + +2011-09-25 01:13 +0000 [r1746] Stevan_White: + + * FreeSerif.sfd: Arabic: shape adjustments to + dal and noon + +2011-09-24 14:58 +0000 [r1745] Stevan_White: + + * FreeSerif.sfd: Arabic: further adjustment of + letter shapes, dot placement + +2011-09-22 21:28 +0000 [r1744] Stevan_White: + + * CREDITS: Credit to Tim Erickson for Syriac glyphs. + Marked many links as being broken with FIXMEs + +2011-09-22 20:48 +0000 [r1743] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Thaana: made bold version, + adjusted spacing + +2011-09-22 20:41 +0000 [r1742] Stevan_White: + + * FreeSerif.sfd: Thaana: made new character from + parts + +2011-09-22 20:28 +0000 [r1741] Stevan_White: + + * tools/report/OpenType/UnicodeRanges.py: correct + Runic + +2011-09-22 18:54 +0000 [r1740] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Arabic: numerous tweeks to + letter shapes. In roman, some more kerning + +2011-09-22 18:16 +0000 [r1739] Stevan_White: + + * FreeSans.sfd: Syriac: filled in some missing + Unicode using Tim Erikson's Carlo Ator font (by his written + permission!) + +2011-09-21 10:13 +0000 [r1738] Stevan_White: + + * FreeSerif.sfd: Arabic: fixed lam-alef ligature + (again) (I think) Made most dots of uniform size adjusted height + of final, isolated hah started on a kerning table + +2011-09-20 17:52 +0000 [r1737] Stevan_White: + + * FreeSerif.sfd: Arabic: made a few more + low-numbered glypys, to finish off the range. + +2011-09-20 12:47 +0000 [r1736] Stevan_White: + + * tools/report/OpenType/OpenType.py (removed), + tools/report/range_report.py, + tools/report/ranges (removed), + tools/report/OpenType/UnicodeRanges.py (added), + tools/report/OpenType (added): Better naming of + packages + +2011-09-19 23:23 +0000 [r1735] Stevan_White: + + * FreeSerif.sfd: Arabic: added some low-numbered + characters: Subtending marks, Arabic ray, Poetic marks + +2011-09-19 17:54 +0000 [r1734] Stevan_White: + + * FreeSerif.sfd: Arabic: drew some more Koranic + annotations. re-thought sizing and placement of some others + +2011-09-19 13:55 +0000 [r1733] Stevan_White: + + * FreeSerif.sfd: Arabic: raised letter noon more + attempts to regularize placement of marks + +2011-09-18 21:22 +0000 [r1732] Stevan_White: + + * FreeSerif.sfd: Arabic: many adjustments, + mostly of marks + +2011-09-18 14:30 +0000 [r1731] Stevan_White: + + * FreeSerif.sfd: Arabic: adjusted marks, added + anchor points for new marks, made a couple of new letters got + ligatures working again replaced Allah and Rial ligatures + +2011-09-17 18:51 +0000 [r1730] Stevan_White: + + * FreeSerif.sfd: Arabic: mostly messing with + marks: shadda combinations seem to be working. + +2011-09-16 19:45 +0000 [r1729] Stevan_White: + + * FreeSerif.sfd: Arabic: corrected some + diacriticals in Presentation Forms-B especially FBBC-FBC1 were + messed up, unfortunately so were a lot of references to those + +2011-09-16 18:36 +0000 [r1728] Stevan_White: + + * FreeSerif.sfd: Arabic: small spacing issues, + tweeks to shapes of medial letters + +2011-09-16 17:56 +0000 [r1727] Stevan_White: + + * FreeSerif.sfd: Arabic: re-did several + combining forms (which I think I drew myself) added some + diacriticals to main range and finished Presentation Forms-B + +2011-09-16 13:54 +0000 [r1726] Stevan_White: + + * FreeSerif.sfd: Arabic: more fussing with marks + +2011-09-16 13:35 +0000 [r1725] Stevan_White: + + * FreeSerif.sfd: Arabic: more fiddling with + marks + +2011-09-16 13:23 +0000 [r1724] Stevan_White: + + * FreeSerif.sfd: Arabic: much fussing with mark + placement. horizontal spacing of waw + +2011-09-16 12:07 +0000 [r1723] Stevan_White: + + * FreeSerif.sfd: Arabic: added mark positioning. + will need to re-think some of the marks. + +2011-09-16 10:18 +0000 [r1722] Stevan_White: + + * notes/maintenance.txt: Changed some CVS info to + SVN info. Still need to test and describe tagging in SVN. + +2011-09-16 09:42 +0000 [r1721] Stevan_White: + + * README: Replaced list of character sets with + character ranges, which makes more sense at this time. + +2011-09-15 23:22 +0000 [r1720] Stevan_White: + + * FreeSerif.sfd: Arabic: big experiment + adjusting baselines of many of the deeper characters. from + looking at "Arabic Calligraphy, Nash script for beginners". Also + shortened reh. + +2011-09-15 21:32 +0000 [r1719] Stevan_White: + + * FreeSerif.sfd: Arabic: a couple more + positional forms, a couple of lookups + +2011-09-15 19:22 +0000 [r1718] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Arabic Supplement: populated + +2011-09-15 14:12 +0000 [r1717] Stevan_White: + + * FreeSerif.sfd: Arabic: much concern over + proper old Arabic kah U+0643 vs the more modern "Persian" keheh + U+06a9. Fiddling with hamzas. + +2011-09-15 11:53 +0000 [r1716] Stevan_White: + + * FreeSerif.sfd: Arabic: added a few obsolete or + unexplained characters. much adjustment of combining marks and + dots for better consistency. + +2011-09-14 23:24 +0000 [r1715] Stevan_White: + + * FreeSerif.sfd: Arabic: much fiddling with + medial forms, a bit with lookups (seems ligatures are failing + altogether) + +2011-09-14 19:40 +0000 [r1714] Stevan_White: + + * FreeSerif.sfd: Arabic: added 2 radical signs + Seems the digits in Arabic have been all along the Indo-Persian + forms. Now there is a separate range for those. So I movde the + old letters, and drew new Arabic versions of those that differed. + +2011-09-14 17:26 +0000 [r1713] Stevan_White: + + * tools/report/ranges/OpenType.py: Brought Arabic up + to date + +2011-09-14 09:37 +0000 [r1712] Stevan_White: + + * FreeSerif.sfd: Arabic: further clean-up; made + swash kaf to connect as initial form + +2011-09-14 08:52 +0000 [r1711] Stevan_White: + + * FreeSerif.sfd: Arabic: further cleanup, added + pedagogical symbols (dots, etc) + +2011-09-14 01:04 +0000 [r1710] Stevan_White: + + * FreeSerif.sfd: Arabic: added letters for Malay + Big clean-up of glyphs. Still to do one section of presentation + forms. + +2011-09-13 20:46 +0000 [r1709] Stevan_White: + + * FreeSerif.sfd: Arabic: made letters for + Parkari. Added lookups init, fina, medi for letters with forms + that vary in the font. + +2011-09-13 19:43 +0000 [r1708] Stevan_White: + + * FreeSerif.sfd: Arabic: made main Arabic area + characters and presentation forms for Uighur, Kazakh, Kirghiz, + Sindhi, and Lahnda, as well as the kaf swash + +2011-09-13 19:40 +0000 [r1707] Stevan_White: + + * tools/report/range_report.py: corrected font paths + +2011-09-13 18:10 +0000 [r1706] Stevan_White: + + * FreeSerif.sfd: Arabic: added more presentation + forms mostly for Urdu and Sindhi + +2011-09-13 13:34 +0000 [r1705] Stevan_White: + + * FreeSerif.sfd: Arabic: made some presentation + forms for Urdu + +2011-09-13 11:05 +0000 [r1704] Stevan_White: + + * tools/utility/hex_range.py: doc + +2011-09-13 09:37 +0000 [r1703] Stevan_White: + + * tools/ranges.py (removed), + tools/report/range_report.py (added), + tools/report/ranges (added), + tools/range_report.py (removed), + tools/ranges (removed): rearrangement, got rid of + duplicate script + +2011-09-13 09:29 +0000 [r1702] Stevan_White: + + * tools/ranges/OpenType.py: documented, removed + copied text + +2011-09-13 09:20 +0000 [r1701] Stevan_White: + + * tools/freefont-ttf.spec (removed), + tools/utility/freefont-ttf.spec (added): + Rearranged, added a little doc + +2011-09-13 09:15 +0000 [r1700] Stevan_White: + + * tools/OS2UnicodeRange (removed), + tools/KerningNumerals.pl (removed), + tools/utility/KerningNumerals.pl (added), + tools/report/OS2UnicodeRange (added): Rearranged + some old utilities. Put in some doc of who wrote what. + +2011-09-12 23:37 +0000 [r1699] Stevan_White: + + * tools/script-menu (added), + tools/hex_range.py (removed), + tools/report/private_use.py (added), + tools/utility/log2changelog.pl (added), + tools/script-menu/nameBySlot.py (added), + tools/utility/hex_range.py (added), + tools/script-menu/unnameBySlot.py (added), + tools/utility/makeBraille.py (added), + tools/utility (added), + tools/nameBySlot.py (removed): Added some scripts, + reorganized + +2011-09-12 22:12 +0000 [r1698] Stevan_White: + + * tools/ranges/OpenType.py: Brought a few ranges up + to date + +2011-09-12 22:06 +0000 [r1697] Stevan_White: + + * FreeSerif.sfd: Arabic, etc: Added a lot of + letters, mostly following existing patterns. Especially a lot of + combinations for Urdu, Sindhi, Pashto, Kazakh, Kurdish, Kirghiz, + Turkic, Uighur Berber, Maghrib Arabic, Tunisian Arabic, Moroccan + Arabic, Not all forms are there yet. Very few lookups were + added...this has to be done too. + +2011-09-12 15:13 +0000 [r1696] Stevan_White: + + * FreeSerif.sfd: Arabic: added some Urdu letters + (drawn by myself, with apologies) + +2011-09-12 13:07 +0000 [r1695] Stevan_White: + + * FreeSerif.sfd: Arabic: added keheh and + presentation forms, added lookup entries for them. + +2011-09-12 12:25 +0000 [r1694] Stevan_White: + + * tools/test/findBackLayers.py (added), + sfd/Makefile, + tools/test/MES-Conformance (added), + tools/test/MES-Conformance/CheckConformance.pl, + tools/test/validate.py (added), + tools/generate/MacTT (added), + tools/findBackLayers.py (removed), + tools/test/MES-Conformance/WGL4.lst, + tools/report (added), + tools/generate/TrueType (added), + tools/MES-Conformance (removed), + FreeSansOblique.sfd, tools/test + (added), tools/ligatureLookups.py (removed), + tools/validate.py (removed), + FreeMonoOblique.sfd, + FreeSerifItalic.sfd, + tools/hex_range.py, + FreeSerifBoldItalic.sfd, + tools/generate (added), + tools/test/MES-Conformance/MES-1.txt, + tools/report/ligatureLookups.py (added), + tools/test/MES-Conformance/MES-2.txt, + tools/GenerateTrueType (removed), + tools/freefont-ttf.spec, + tools/generate/OpenType (added), + FreeSansBold.sfd, + tools/test/MES-Conformance/MES-3B.txt, + FreeMono.sfd, + FreeSerifBold.sfd, + FreeMonoBold.sfd, + tools/test/isMonoMono.py (added), + tools/checkGlyphNumbers.py (removed), + tools/ranges/__init__.py, + tools/ranges/OpenType.py, + tools/GenerateOpenType (removed), + tools/KerningNumerals.pl, + tools/test/MES-Conformance/MES-1.lst, + FreeSansBoldOblique.sfd, + tools/test/MES-Conformance/MES-2.lst, + tools/test/MES-Conformance/mes-list-expand.pl, + tools/test/MES-Conformance/MES-3B.lst, + FreeMonoBoldOblique.sfd, + tools/GenerateMacTT (removed), + tools/test/checkGlyphNumbers.py (added), + tools/isMonoMono.py (removed): Rearranged tools/ + directory. Made paths in sfd/Makefile agree with changes. + +2011-09-12 12:10 +0000 [r1693] Stevan_White: + + * FreeSerif.sfd: Latin Extended-B: adjusted + Hungarian umlauts Dingbats: drew several characters to fill out + range for Unicode 6 + +2011-09-12 11:40 +0000 [r1692] Stevan_White: + + * FreeSans.sfd: Osmanya: corrected Unicode + values Letterlike symbols: added one, made some references + +2011-09-02 12:07 +0000 [r1691] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: Control Pictures: U+2404 and + U+2405 glyphs are reversed. This is due to the icons for them in + FontForge being also reversed. in response to + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=632746 + +2011-09-02 01:15 +0000 [r1690] Stevan_White: + + * FreeSerif.sfd: Arabic: (really Persian) lookup + tables added init, medi, fina lookups peh, tcheh, gaf and fina + lookup for jeh In response to ubuntu bug report + https://bugs.launchpad.net/ubuntu/+source/ttf-freefont/+bug/730770 + Not sure if this completely resolves the issue. + +2011-08-31 18:16 +0000 [r1689] Stevan_White: + + * FreeSerif.sfd: Letterlike Symbols: added a + few, made better use of small caps for others + +2011-08-31 17:24 +0000 [r1688] Stevan_White: + + * tools/ranges/OpenType.py: mostly revised some + comments + +2011-08-31 17:19 +0000 [r1687] Stevan_White: + + * FreeSerif.sfd: Miscellaneous Technical: + several additions Supplemental Punctuation: several additions + +2011-08-29 23:44 +0000 [r1686] Stevan_White: + + * tools/ranges/OpenType.py: typos + +2011-08-27 20:23 +0000 [r1685] Stevan_White: + + * FreeSans.sfd: Osmanya: resolves bug #34155: + FreeSans: Osmanya digits shifted two code positions + https://savannah.gnu.org/bugs/index.php?34155 + +2011-08-27 20:08 +0000 [r1684] Stevan_White: + + * FreeSans.sfd: Greek: added lunate letters + +2011-08-24 21:40 +0000 [r1683] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Mathematical Operators: added a + few in sans, named a few in serif + +2011-08-24 11:30 +0000 [r1682] Stevan_White: + + * FreeSerifBold.sfd: Phonetic Extensions: more + +2011-08-24 10:11 +0000 [r1681] Stevan_White: + + * FreeSerifBold.sfd: Public Use: script-size + latin Sup-sub: implemented with script-size letters Phonetic + Extensions: filled in many of them + +2011-08-24 01:09 +0000 [r1680] daniel_j: + + * FreeSans.sfd: Added U+1400. Fixes bug #34008 + +2011-08-17 20:05 +0000 [r1679] Stevan_White: + + * FreeSerifItalic.sfd: named a few characters + +2011-08-14 08:55 +0000 [r1677-1678] Stevan_White: + + * tools/ranges/OpenType.py: some changes to Latin + Extended ranges + + * tools/ranges/OpenType.py: added point for Bengali + gandha mark + +2011-08-13 23:15 +0000 [r1676] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Currency Symbols: + added a few more + +2011-08-13 19:53 +0000 [r1675] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Currency Symbols: + added several + +2011-08-13 14:10 +0000 [r1674] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: Control Pictures: filled out + range + +2011-08-12 08:59 +0000 [r1673] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Specials: filled out + range + +2011-08-12 08:21 +0000 [r1672] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd, + FreeMonoOblique.sfd: Cyrillic, Extensions: + added a few archaic letters, messed with accents + +2011-08-10 22:13 +0000 [r1671] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Super/Subscripts (mono and + serif roman) re-design of super numerals. Phonetic ranges: + fiddled a lot with superscript letters. Cyrillic: adjusted some + marks especially on antiquated letters. + +2011-08-05 16:52 +0000 [r1670] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd: Phonetic Extensions: some + tweeks to small caps letters Subscripts and superscripts: tweeks + +2011-08-04 21:27 +0000 [r1669] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: superscripts, + subscripts, diagonal fractions: all faces Re-thought and + regularized positioning, fixed a few bugs. All the "superior" + numerals and a few superscript latin letters got positioned so + they go over the em height. Latin ordinals are positioned + parallel to em height, and now both a and o are underlined in all + faces. Diagonal fractions are likewise regularized. + +2011-07-31 13:42 +0000 [r1668] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: General Punctuation: remedy + bug #33905: NARROW NO-BREAK SPACE too wide In one face u+202F was + zero width, in others much too wide. Also: set both it and + thinspace to 1/6 em. + +2011-07-23 21:38 +0000 [r1667] Stevan_White: + + * FreeSerif.sfd: Sinhala: further simplification + of ccmp tables + +2011-07-23 09:58 +0000 [r1666] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Latin: Better optical + centering of j + +2011-07-22 20:25 +0000 [r1665] Stevan_White: + + * FreeSerif.sfd: Indic ranges, mostly Sinhala: + attempts to get it working in Windows. Problem: some of the + ligature lookups map to things that by themselves could not + render properly. e, o and O vowels around consonents, especially. + Seems layout engine in Linux is responsible for making it work in + the past... Cleaned up some lookups. In other ranges, added + script ranges for MS "new layout engine", e.g. dev2, bng2. Note: + Malayalam is mlm2, not mly2 as in Fontforge. + +2011-07-18 20:45 +0000 [r1664] Stevan_White: + + * FreeSerif.sfd: Greek: filled out range for + Unicode 6 special mark lookups for Greek re-named some characters + +2011-07-18 19:02 +0000 [r1663] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Made more to validate + Corrected one more wrong unicode in small caps + +2011-07-18 18:11 +0000 [r1662] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Private Use: + corrected small caps unicode SansBoldOblique: made to validate + +2011-07-18 17:58 +0000 [r1661] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Cyrillic Extended: finished + 4 new letters (normal face) Combining Diacritical Marks: lots of + small tweeks. Latin: fiddled with a few accent marks Private Use: + small caps glyphs corrected unicode Added missing single-digit + diagonal fractions, with lookups Added lookup to remove longs + from end of words. Still isn't right. + +2011-07-16 11:24 +0000 [r1660] Stevan_White: + + * notes/features.txt (added): Initial document about + OpenType features used in FreeFont. + +2011-07-16 11:12 +0000 [r1659] Stevan_White: + + * FreeSerif.sfd: Non-unicode vulgar fractions + (2/7, 5/9, etc) with 'frac' table entries + +2011-07-16 10:28 +0000 [r1658] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Added glyph for zeroslash, + and lookup 'zero' for it. Mono: added 'frac' lookup. + +2011-07-16 09:45 +0000 [r1657] Stevan_White: + + * FreeSerifItalic.sfd: Correction to ccmp table + for iogonek + +2011-07-16 08:38 +0000 [r1656] Stevan_White: + + * notes/maintenance.txt: put a title on it, a little + re-wording of new paragraphs + +2011-07-16 08:33 +0000 [r1655] Stevan_White: + + * notes/maintenance.txt: Added section on doing + tests. + +2011-07-15 12:34 +0000 [r1654] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Serif: Made the diacritical + lookups previously reserved for Latin to be generic, removed + special marks lookup for Greek/Coptic, use instead generic one. + Added a couple of new letters to Latin Extended-D Bold: Fiddling + with diactitics and marks. Something has gone very wrong with the + lookups... still not clear what. + +2011-07-13 09:20 +0000 [r1653] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Combining Diacritical + Marks: a bugfix and a few positioning tweeks + +2011-07-12 14:24 +0000 [r1652] Stevan_White: + + * FreeSans.sfd: *** empty log message *** + +2011-07-12 14:17 +0000 [r1651] Stevan_White: + + * FreeSans.sfd: Latin: all letters now have + 'above' mark. + +2011-07-12 14:04 +0000 [r1650] Stevan_White: + + * FreeSerif.sfd: Combining diacritical marks: + fiddled with positioning + +2011-07-01 10:56 +0000 [r1648-1649] Stevan_White: + + * FreeSans.sfd: Hebrew: tweeks to vowel points + + * FreeMono.sfd: Alphabetic Presentation Forms: + widened Hebrew wide letters + +2011-07-01 07:59 +0000 [r1647] Stevan_White: + + * FreeSerif.sfd: Hebrew: tweaks to absolute + placement of marks + +2011-06-30 22:47 +0000 [r1646] Stevan_White: + + * FreeSerif.sfd: Hebrew: small tweeks to + cantillation marks, etc + +2011-06-30 11:47 +0000 [r1645] Stevan_White: + + * FreeSerif.sfd: Hebrew: lower cantillation + marks to left of vowels + +2011-06-27 00:20 +0000 [r1644] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Hebrew: got rid of spurious + tables. + +2011-06-27 00:06 +0000 [r1643] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Hebrew: got yidddish CCMP with + yod and yodyod working in Serif + +2011-06-26 22:32 +0000 [r1642] Stevan_White: + + * FreeSans.sfd: Hebrew: issue with Yiddish vs + std. Hebrew scripts for MARK lookups. Somehow gets very confused + by specific ranges, in different ways on different systems. + Disabled distinction between scripts. + +2011-06-26 18:20 +0000 [r1641] Stevan_White: + + * FreeSans.sfd: Hebrew: corrected side of above + vowel. More vowel marks. + +2011-06-26 17:56 +0000 [r1640] Stevan_White: + + * FreeSerif.sfd: Hebrew: corrected placement of + top vowel. fiddled with cantellatin marks. + +2011-06-25 17:27 +0000 [r1639] Stevan_White: + + * FreeSerif.sfd: Hebrew: further fiddling with + points + +2011-06-25 14:49 +0000 [r1638] Stevan_White: + + * FreeSerif.sfd: Hebrew: more fiddling with + vowel and cantillation points + +2011-06-25 11:12 +0000 [r1637] Stevan_White: + + * FreeSerif.sfd: Hebrew: more vowel and + cantillation point marks + +2011-06-25 09:01 +0000 [r1636] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Hebrew: disabled distinction + between Yiddish and Std. vowel marks + +2011-06-24 14:57 +0000 [r1635] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Removed angle + brackets from licence text, because it caused some trouble for + some buggy software, and the offsetting could be done better with + a newline. + +2011-06-24 13:17 +0000 [r1634] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Hebrew: worked on MARK + tables in Sans and Serif in response to further mails regarding + bug 25887. Split one table up so lookups wre properly executed in + both Yiddish and regular Hebrew. Some adjustment of letter + spacing and punctuation in other faces. + +2011-06-12 07:14 +0000 [r1633] Stevan_White: + + * INSTALL, README: Fixed a couple of + goofs + +2011-06-11 08:12 +0000 [r1632] Stevan_White: + + * INSTALL: General update: Esp. concerning OpenType + support using FreeType2, and on Win 7 and Mac OS X. + +2011-06-11 08:07 +0000 [r1631] Stevan_White: + + * README: Removed remarks about how to install + (better for INSTALL file) General re-phrasing and tidying. + +2011-06-10 09:34 +0000 [r1630] Stevan_White: + + * INSTALL: Correct name of X Windows system. Also + added Microsoft and Apple to their product names for clarity and + consistency. + +2011-06-10 09:31 +0000 [r1629] Stevan_White: + + * README: Correct name of X Window system. Added web + page and contact info. Removed Primoz' e-mail. + +2011-06-08 11:34 +0000 [r1628] Stevan_White: + + * INSTALL: Removed remark about "cost", slight + rewording, pursuant to discussion in bug #33449: INSTALL file not + conform to FSF's policy + +2011-05-04 16:13 +0000 [r1627] Stevan_White: + + * tools/ranges/OpenType.py: new letters to Cyrillic + Supplement + +2011-04-29 10:33 +0000 [r1626] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin: a few more small + adjustments to accents + +2011-04-29 10:13 +0000 [r1625] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin: small adjustments to + some accents + +2011-04-29 09:48 +0000 [r1624] Stevan_White: + + * notes/maintenance.txt: info about ssh keys on + Savannah + +2011-02-03 21:13 +0000 [r1623] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Latin ^ Extensions: + various fiddling with spacing and accents for greater uniformity. + Also fixed a couple of errors. + +2011-02-02 21:33 +0000 [r1622] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Remedies bug #32326, about + alignment for combining diacritics on dottedcircle Just put main + 'mark' anchors on the dottedcircle character. + +2011-01-30 13:28 +0000 [r1621] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Latin: Much fiddling + with accents, also with width of accented i letters + +2011-01-29 18:19 +0000 [r1620] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Accents macron, + acute, grave: made more consistent + +2011-01-29 17:37 +0000 [r1619] Stevan_White: + + * FreeSerif.sfd: Chess pieces: made all same + width, and in a square + +2011-01-28 21:05 +0000 [r1618] Stevan_White: + + * FreeSans.sfd: Made grave, acute, and macron a + little more consistent + +2011-01-26 20:28 +0000 [r1617] Stevan_White: + + * FreeSerifBold.sfd: Made a few accents more + consistent, re bug #32220 + +2011-01-25 22:03 +0000 [r1616] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Latin, Cyrillic, Greek: more + toward bug #32220 + +2011-01-24 22:54 +0000 [r1615] Stevan_White: + + * FreeSerif.sfd: Latin, Cyrillic: preferred + acute, grave and dieresis to the spacing modifier versions, + somewhat in response to bug #32220 + http://savannah.gnu.org/bugs/?32220 + +2011-01-21 22:12 +0000 [r1614] Stevan_White: + + * FreeSerifBold.sfd: Sinhala: various tweeking + of auxiliary glyphs to avoid self-intersection + +2011-01-19 00:21 +0000 [r1613] Stevan_White: + + * FreeSerifBold.sfd: as prev. + +2011-01-19 00:14 +0000 [r1612] Stevan_White: + + * FreeSerifBold.sfd: Sinhala: trying to make + widths like those of normal + +2011-01-18 23:26 +0000 [r1610-1611] Stevan_White: + + * FreeSerifBold.sfd: Geometric Shapes: re-did + dotted circle, made some triangles bigger. Singhala: slight + modification to widths, to make it more like normal. + + * FreeSerif.sfd: Geometric Shapes: felt some + triangles were over-large. Scaled, and fiddled with their + references + +2011-01-18 08:53 +0000 [r1609] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Copyright: corrected + on Karl Berry's advice. + +2011-01-18 08:41 +0000 [r1608] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: kerning + +2011-01-16 13:24 +0000 [r1606-1607] Stevan_White: + + * FreeSerif.sfd: Sinhala: fixed one + self-intersection + + * FreeSerifBold.sfd: Sinhala: Now ccmp tables + are working. Improved many gloppy self-intersections in the main + Unicode range, but many remain in the replacement area. + +2011-01-16 11:35 +0000 [r1605] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Copyright notice: + included 2011 + +2011-01-15 21:35 +0000 [r1604] Stevan_White: + + * FreeSerifBold.sfd: Sinhala: mostly emboldened + the FreeSerif glphs by 30 en. Many glyphs are pretty gloppy. Also + the rak descender isn't connecting properly. + +2011-01-15 17:24 +0000 [r1603] Stevan_White: + + * FreeSerif.sfd: Miscellaneous Mathematical + Symbols-A Mathematical Operators: a few more additions + +2011-01-09 15:08 +0000 [r1602] Stevan_White: + + * tools/ranges/OpenType.py: corrected/updated a + couple of OpenType ranges + +2011-01-09 12:58 +0000 [r1601] Stevan_White: + + * FreeSerif.sfd: Mathematical Symbols: replaced + some outlines with references Miscellaneous Mathematical + Symbols-A: added a few + +2011-01-08 23:56 +0000 [r1600] Stevan_White: + + * FreeSerif.sfd: Miscellaneous Mathematical + Symbols A & B: more + +2011-01-08 14:24 +0000 [r1599] Stevan_White: + + * FreeSerif.sfd: Miscellaneous Mathematical + Symbols-A Miscellaneous Mathematical Symbols-B Supplemental + Mathematical Operators: a few more characters + +2011-01-08 13:02 +0000 [r1598] Stevan_White: + + * FreeSerif.sfd: Miscellaneous Math Symbols-A: + added a few easy symbols + +2011-01-08 00:21 +0000 [r1597] Stevan_White: + + * FreeSerif.sfd: Supplemental Mathematical + Operators: Miscellaneous Mathematical Operators-B: a few more + symbols + +2011-01-06 22:03 +0000 [r1596] Stevan_White: + + * FreeSerif.sfd: Miscellaneous Mathematical + Symbols-B: added some easy ones + +2011-01-03 20:50 +0000 [r1595] Stevan_White: + + * FreeSerifBold.sfd: Greek Extended: U+1FC3 + should not have had a tilde resolves bug #32041: Error in + FreeSerifBold.ttf character U+1FC3 (8131) + +2010-10-31 23:35 +0000 [r1594] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Added c2sc tables, and smcp + tables for Turkish (dotted vs dotted i distinction) + +2010-10-29 06:57 +0000 [r1593] Stevan_White: + + * FreeSerif.sfd: Currency: Indian Rupee courtesy + of Daniel Johnson Named some of the other characters. + +2010-10-19 23:01 +0000 [r1592] Stevan_White: + + * FreeSansBoldOblique.sfd: Latin: a bit + o'kerning + +2010-10-19 19:25 +0000 [r1591] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Filled in IBM + Classifications + +2010-10-19 07:27 +0000 [r1590] Stevan_White: + + * FreeSansBold.sfd, + FreeSerif.sfd: roman: Mahjong made dot rounder + sans: corrected missing extrema on ssharp + +2010-10-18 19:02 +0000 [r1589] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Combining Diacritical + Marks: completed range + +2010-10-17 10:16 +0000 [r1588] Stevan_White: + + * FreeMono.sfd: Combining Diacritical Marks: + completed range + +2010-10-12 21:50 +0000 [r1587] Stevan_White: + + * FreeMono.sfd: Miscellaneous Symbols: drew a + few more. + +2010-10-12 18:27 +0000 [r1586] Stevan_White: + + * FreeMono.sfd: Miscellaneous Symbols: Corrected + comet, drew a snowman. Solves bug #31315 + (https://savannah.gnu.org/bugs/?31315) + +2010-10-11 22:01 +0000 [r1585] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Malayalam: mass rename of + auxiliary glyphs in Public Use Area + +2010-10-11 21:14 +0000 [r1584] Stevan_White: + + * FreeSerif.sfd: Adjusted spacing of some + conjunct letter parts. + +2010-10-10 23:22 +0000 [r1583] Stevan_White: + + * FreeSerif.sfd: Malayalam: Corrected a couple + of glyph names. + +2010-10-10 08:58 +0000 [r1582] Stevan_White: + + * FreeSans.sfd: Incorporated the Meera_04 font, + of the GPL project Swathanthra Malayalam Computing + http://savannah.nongnu.org/projects/smc/ Copyright (c) 2007, + Hussain K H, Suresh P, Swathanthra Malayalam Computing Drew + several additions for the modern Unicode standard. Cleaned up + many glyphs, and re-named those in the Unicode range. + Re-connected the lookups for Chillu letters to point to those in + Unicode, and deleted the counterparts in the auxiliary range. + +2010-10-10 08:48 +0000 [r1581] Stevan_White: + + * FreeSerif.sfd: Malayalam: Re-named some glyphs + so the commonly used ones were shorter. pba_mal renamed to ba_mal + chandrakkala renamed to candrakala Cleared NameMe_195551 as it + did nothing Raised ascenders on both i_sign_mal and ii_sign_mal, + and made the latter go over preceding letter, based on other + fonts and samples. + +2010-10-07 06:21 +0000 [r1580] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Armenian: Changed U+FB13-7 + to 'dlig' lookup, based on a native speaker telling me this is + not normally seen in printed form, and on the last lines of sect + 7.7 of the Unicode standard. (sans face too will follow) + +2010-10-06 20:34 +0000 [r1579] Stevan_White: + + * FreeSerif.sfd: Bengali: cleaned up a few + conjunct glyphs + +2010-10-06 18:59 +0000 [r1578] Stevan_White: + + * FreeSerif.sfd: Phonetic Extensions Supplement: + Corrected AD9B, raised all superscripts to capital height. + (Thanks to Emmanuel Vallois for noticing!) + +2010-10-06 18:43 +0000 [r1577] Stevan_White: + + * FreeSerif.sfd: Cyrillic Extended-B: Corrected + Payerok (pajerok) A67D. (Thanks to Emmanuel Valois for pointing + it out!) + +2010-10-06 18:28 +0000 [r1576] Stevan_White: + + * FreeSerif.sfd: Tamil: Corrected position of + pulli over some letters. (Thanks to Emmanuel Valois for pointing + it out!) + +2010-10-05 21:58 +0000 [r1575] Stevan_White: + + * FreeSerif.sfd: Arabic: added some Pashto + letters. Need init, final, medial forms. + +2010-10-05 19:40 +0000 [r1574] Stevan_White: + + * FreeSerif.sfd: Buginese: On advice of Emmanuel + Vallois, corrected iya ligature per + http://www.unicode.org/versions/Unicode5.2.0/ch11.pd + +2010-10-05 07:34 +0000 [r1573] Stevan_White: + + * FreeSerif.sfd: Buginese: added iya ligature + based on WAZU test page + http://www.wazu.jp/gallery/Test_Buginese.html + +2010-10-03 16:31 +0000 [r1572] Stevan_White: + + * FreeSerif.sfd: old-style numerals and lookup + +2010-10-03 15:47 +0000 [r1571] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: combining diacritical + marks: More corrections, making dots on i and j to be replaced by + mark. + +2010-10-03 10:19 +0000 [r1570] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: combining diacritical + marks: in serif, made more marks to remove dot on i, j. Filled + out range in nono-roman faces. + +2010-10-02 22:05 +0000 [r1569] Stevan_White: + + * FreeSerif.sfd: small-caps: tweeks + +2010-10-02 21:39 +0000 [r1568] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: ssharp: made thinner, + deeper, and renamed + +2010-10-02 20:31 +0000 [r1567] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: small-caps: kerning + +2010-09-30 21:37 +0000 [r1566] Stevan_White: + + * FreeSerif.sfd: Tamil: rounded to int on the + Private Use ligatures + +2010-09-30 18:55 +0000 [r1565] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Latin: a touch of kerning + +2010-09-29 22:16 +0000 [r1564] Stevan_White: + + * FreeMono.sfd: Braille Patterns: made the dots + bigger + +2010-09-29 21:38 +0000 [r1563] Stevan_White: + + * FreeMono.sfd: Braille Patterns: Replaced to + conform better to the Unicode Standard, sect. 15.10 and the + Unicode glyph samples: like it or not, the dots are meant to be + hollow and filled, representing 'off' and 'on'. All now reference + auxiliary characters, for consistency and flexibility. + +2010-09-28 23:16 +0000 [r1562] Stevan_White: + + * FreeSansBold.sfd: small caps + +2010-09-28 08:21 +0000 [r1561] Stevan_White: + + * FreeSerifBold.sfd: small caps: Touch-ups + +2010-09-27 20:02 +0000 [r1560] Stevan_White: + + * FreeSerifBold.sfd: small caps + +2010-09-26 16:50 +0000 [r1559] Stevan_White: + + * FreeSerifBold.sfd: Added PS Private OtherBlues + +2010-09-26 10:55 +0000 [r1558] Stevan_White: + + * FreeSerifItalic.sfd: Latin: tweeked a couple + of stacked accents + +2010-09-26 09:52 +0000 [r1557] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: More revision of + spacing and letter forms. Still lots to do. + +2010-09-25 23:13 +0000 [r1556] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: kerning for African + characters + +2010-09-25 22:54 +0000 [r1555] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd: Latin: spacing and glyph form + tweeks in Extended-C and IPA for African scripts. Re-worked + upsilonlatin in serif roman. + +2010-09-25 18:36 +0000 [r1554] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Latin Extended-B: + re-worked Oi, oi, and yhook; kerning and other tweeks for African + scripts. + +2010-09-25 14:04 +0000 [r1553] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: lookups for Latin as + in serif, to deal with accented i and the dot. + +2010-09-25 13:39 +0000 [r1552] Stevan_White: + + * FreeSerifItalic.sfd: Latin: tweeked kerning + and spacing, especially of apostrophe and quotes. + +2010-09-25 12:22 +0000 [r1551] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: IPA Extensions: Completed + range in bold italic. bold: characters with low right hook, made + not so extreme yhook: made narrower by bending right arm in a + bit. replacement lookups for i with accents and i-ogonek with + accents, so that accents replace the dot rather than floating + over it. + +2010-09-23 22:17 +0000 [r1550] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Latin: more fiddling with + letter forms and spacing + +2010-09-23 20:24 +0000 [r1549] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: blues values: made descender + value a bit wider (also did this in previous commit to bold + italic. Latin: more adjustments and corrections of hastily drawn + glyphs. + +2010-09-23 19:27 +0000 [r1548] Stevan_White: + + * FreeSerif.sfd: Latin: Addressed several issues + pointed out by Daniel Johnson concerning African and Navaho + samples. + +2010-09-23 08:25 +0000 [r1547] Stevan_White: + + * FreeSerifBoldItalic.sfd: Latin: Re-worked + various glyphs for consistency (mostly they appeared to have been + skewed versions from bold--or worse). Still more to be done here. + +2010-09-22 22:20 +0000 [r1546] Stevan_White: + + * FreeSerifItalic.sfd: Latin: some marks for + African languages + +2010-09-22 22:04 +0000 [r1545] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: various measures to + improve the look of African-language samples. Kerned several + letters in IPA Extensions range. Adjusted spacing of several + letters. Re-worked Eng a bit, as well as gammalatin. Put some new + letters in bold italic. + +2010-09-22 08:42 +0000 [r1544] Stevan_White: + + * FreeSans.sfd: Latin Extended Additional: added + four letters small caps: made basic set and smcp lookup table + +2010-09-22 06:09 +0000 [r1543] Stevan_White: + + * Makefile: Was putting ttf files into the otf + tarball. One character fixes it. + +2010-09-21 19:34 +0000 [r1541-1542] Stevan_White: + + * FreeSerif.sfd: Latin Extended-C: three new + letters; two are additions for Shona + + * tools/ranges/OpenType.py: three new letters in + Latin Extended-C range + +2010-09-21 19:16 +0000 [r1540] Stevan_White: + + * FreeSerif.sfd: small caps: forms for + Vietnamese lookup tables for accessing alternate forms in Greek + and in Latin + +2010-09-21 08:29 +0000 [r1539] Stevan_White: + + * FreeSerif.sfd: small caps: tweeked spacing + +2010-09-20 22:45 +0000 [r1538] Stevan_White: + + * FreeSerif.sfd: Small caps replacements for + Latin, with the smcp table to do it. (Haven't seen this actually + function yet... ) + +2010-09-19 13:22 +0000 [r1536] Stevan_White: + + * FreeSerifBold.sfd: Fixed validation problem. + +2010-09-19 13:15 +0000 [r1535] Stevan_White: + + * ChangeLog: today's commits + +2010-09-19 12:40 +0000 [r1534] Stevan_White: + + * FreeSerif.sfd: Sinhala: Fixed one lookup table + mistake, and a couple of glpyh omissions, that Harshula pointed + out. + +2010-09-19 11:48 +0000 [r1533] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Sans: Applied Daniel + Johnsons improvement to capital Eng to Sans, as described in + previous commits. + +2010-09-19 10:32 +0000 [r1532] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Coptic: added alphabet to + bold. Accent marks not working -- a mystery. Some tweeks in + medium face as well. glyph cleanup -- points too close, some + glyphs outside bounding boxes. + +2010-09-18 08:50 +0000 [r1531] Stevan_White: + + * tools/ligatureLookups.py: mostly code style + improvements + +2010-09-18 07:54 +0000 [r1529-1530] Stevan_White: + + * tools/ligatureLookups.py: mostly code tidying + + * ChangeLog: added latest changes, and also changes + to the tools/ directory since 2008 + +2010-09-17 18:38 +0000 [r1528] Stevan_White: + + * FreeSerif.sfd: Sinhala: tightened up left side + of na and derivatives. + +2010-09-17 08:27 +0000 [r1527] Stevan_White: + + * FreeSerif.sfd: Sinhala: tighened up left sides + of u, lla, na, dha, ndha, nya, jnya + +2010-09-17 08:09 +0000 [r1526] Stevan_White: + + * FreeSerif.sfd: Sinhala: tightened up some of + the vowel conjuncts, and left side of nna. + +2010-09-16 20:05 +0000 [r1525] Stevan_White: + + * FreeSerif.sfd: Coptic: fiddled about with + letter forms, striving for a kind of consistency. Sinhala: + Harshula noticed four incorrect combined forms. Fixed these. + +2010-09-16 08:09 +0000 [r1524] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Latin Extended-A: + Applied Daniel Johnson's patch that made two versions of capital + Eng. His explanation: ' http://en.wikipedia.org/wiki/%C5%8A The + form of capital Eng currently in all three FreeFont faces is that + used by the Sami people, resembling a capital N with a hooked + right descender. However, the form preferred for African and + Amerindian languages resembles a tall lowercase n with a hook + that almost meets the left vertical. (See wikipedia link above + for a visual.) Recommend moving the existing Sami-style Eng to a + PUA or non-Unicode slot, creating African-style Eng at U+014A, + and adding a LOCL table with substitution rules for Inari Sami + (ISM), Lule Sami (LSM), Northern Sami (NSM) and Skolt Sami (SKS). + ' Latin Extended-B: Also in his patch: added U+0220 (Latin + Capital Letter N with long leg) + +2010-09-15 17:02 +0000 [r1523] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin for Sami: Daniel + Johnson's patch added alternative form of Eng for African + languages and a 'local' table for the Sami form. + +2010-09-15 16:23 +0000 [r1522] Stevan_White: + + * notes/maintenance.txt: Updated upload and release + procedures. + +2010-09-15 08:05 +0000 [r1521] Stevan_White: + + * FreeSerif.sfd: Sinhala: regularized kundaliya + a bit. + +2010-09-15 07:24 +0000 [r1520] Stevan_White: + + * FreeSans.sfd: Put stray lookup into its proper + subtable. + +2010-09-14 23:24 +0000 [r1519] Stevan_White: + + * FreeSerif.sfd: Sinhala: re-named a few more + ligature glyphs, for consistency + +2010-09-14 22:50 +0000 [r1518] Stevan_White: + + * FreeSans.sfd: Gurmukhi: improved some names of + ligature glyphs, and found one apparently doubled table entry + (kagurmukhi_nuktagurmukhi.nukt now gur_ka.nukt) + +2010-09-14 22:17 +0000 [r1517] Stevan_White: + + * tools/GenerateTrueType: prev. commit had one space + too many + +2010-09-14 22:08 +0000 [r1516] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd: Various measures to fix + problems FontForge Find Problems reports under ATT, including a + mass glyph rename of Sinhala ligatures. + +2010-09-14 13:02 +0000 [r1514-1515] Stevan_White: + + * tools/ranges.py, + tools/hex_range.py, + tools/findBackLayers.py, + tools/ranges/OpenType.py, + tools/GenerateTrueType, + tools/GenerateOpenType, + tools/range_report.py, + tools/ligatureLookups.py, + tools/validate.py, + tools/GenerateMacTT, + tools/checkGlyphNumbers.py, + tools/isMonoMono.py, + tools/nameBySlot.py: Added license and other tags + to python files. + + * Makefile: target for tarball for OpenType + +2010-09-13 19:21 +0000 [r1513] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoOblique.sfd: Cyrillic: A few more old + letters. + +2010-09-13 08:25 +0000 [r1512] Stevan_White: + + * tools/ranges/OpenType.py: updated some Web links. + +2010-09-12 22:57 +0000 [r1511] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Supplemental + Punctuation: One character for consistency with other faces. + +2010-09-12 21:18 +0000 [r1510] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd: + Control Pictures: Added because it was easy. + +2010-09-12 20:49 +0000 [r1509] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Alphabetic + Presentation Forms: filled out range in sans faces. + +2010-09-12 19:55 +0000 [r1508] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBoldOblique.sfd: Cleared hints. + +2010-09-12 19:43 +0000 [r1507] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Dozens of measures to + pass general validation tests, including . cleanup of many glyphs + for extrema and self-intersection problmes . re-naming glyphs + whose PS names are too long. . removing blank glyphs . giving + Unicode points to glyphs missing them. There are still a few + lookup table issues in FreeSerif and FreeSans though. + +2010-09-12 18:42 +0000 [r1505-1506] Stevan_White: + + * tools/nameBySlot.py: Corrected output for high + Unicode. + + * tools/checkGlyphNumbers.py: Made aware of special + TrueType slots. + +2010-09-12 16:50 +0000 [r1504] Stevan_White: + + * FreeSerif.sfd: Re-named some of the Sinhala + lookups in somewhat better way. Control Pictures: added a bunch + (but... is it worth it?) + +2010-09-12 15:01 +0000 [r1503] Stevan_White: + + * tools/range_report.py: Added a Private Use total + and better explanation of totals generally. Some code clean-up. + +2010-09-11 13:24 +0000 [r1500-1502] Stevan_White: + + * ChangeLog: The sfd changes since the last release + + * AUTHORS, CREDITS: Added some recent + contributors + + * tools/ranges/OpenType.py: made not to complain + about extra TrueType characters. + +2010-09-11 09:52 +0000 [r1499] Stevan_White: + + * FreeSerif.sfd: Coptic: Widened bowl of Khei. + +2010-09-11 09:48 +0000 [r1498] Stevan_White: + + * FreeSerif.sfd: Coptic: deepened descenders of + small letters to same depth as in Latin Expanded bowl of Fei and + fei to resemble other samples. + +2010-09-10 21:38 +0000 [r1497] Stevan_White: + + * FreeSerif.sfd: Cyrillic: mostly positioning of + marks for old Cyrillic alphabets + +2010-09-10 08:05 +0000 [r1496] Stevan_White: + + * FreeSerif.sfd: Coptic: Replaced acoptic with + something more dramatic, fiddled with kerning, tidied some other + letters + +2010-09-08 22:50 +0000 [r1495] Stevan_White: + + * AUTHORS, CREDITS: mention of recent + additions + +2010-09-08 22:18 +0000 [r1494] Stevan_White: + + * FreeSerifBold.sfd: Block Elements: replaced + long-missing shade blocks + +2010-09-08 22:12 +0000 [r1493] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Block Elements: replaced + long-missing shade blocks + +2010-09-08 08:18 +0000 [r1492] Stevan_White: + + * tools/range_report.py: More explanation in output. + +2010-09-08 07:41 +0000 [r1491] Stevan_White: + + * tools/ranges/OpenType.py, + tools/range_report.py: another consistency check + added UCAS Extended range + +2010-09-07 18:30 +0000 [r1490] Stevan_White: + + * FreeSerif.sfd: Buginese: lookup tables and + glyphs to re-order vowels, courtesy of Mohammad Anwari. + +2010-09-07 17:39 +0000 [r1489] Stevan_White: + + * FreeSans.sfd: Osmanya: courtesy of Daniel + Johnson. Note this script is slanted in every sample I've seen. + That is justification enough that the glyphs in this range look + slated, although the face isn't oblique. + +2010-09-07 17:19 +0000 [r1488] Stevan_White: + + * FreeSans.sfd: UCAS Extended: by Daniel Johnson + +2010-09-07 16:43 +0000 [r1487] Stevan_White: + + * FreeSerif.sfd: Sinhala: complete replacement + of range with glyphs extracted more directly from Yannis + Haralambous' sinha TeX font (last version was also derived from + this font, but had undergone detrimental processing). Implements + "rak" glyphs using three GSUB lookup steps. + +2010-09-04 23:52 +0000 [r1486] Stevan_White: + + * FreeSerif.sfd: Fix for FontForge warning (v + 20090923) "On Windows many apps will have problems with this + font's kerning, because because 58 of its glyph kern pairs cannot + be mapped to unicode-BMP kern pairs" This was due to kern tables + for the Musical Symbols range, which isn't in the Unicode Basic + Multilingual Plane. Removed this lookup. Might consider another + way to position these symbols. + +2010-08-29 22:59 +0000 [r1485] Stevan_White: + + * FreeSerif.sfd: Sinhala: patch by Harshula + Jayasuriya to correct the writing system direction in some + lookups. + +2010-08-29 22:52 +0000 [r1484] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Currency Symbols: additions + and tweeking + +2010-08-24 19:15 +0000 [r1483] Stevan_White: + + * FreeSerif.sfd: Sinhala: added one ligature + glyph, from Harshula Jayasuriya + +2010-08-20 20:19 +0000 [r1482] Stevan_White: + + * FreeSerif.sfd: Resolves class of validation + problems in Sinhala: Bad Glyph Name. This is a FontForge bug, + that appears when certain types of problems occur in the glyph + contours. Probably an arithmetic error causes some corruption. + +2010-08-20 18:17 +0000 [r1481] Stevan_White: + + * FreeSerif.sfd: corrected missing extrema in + recent Latin Extended-D range + +2010-08-20 17:56 +0000 [r1480] Stevan_White: + + * FreeSerif.sfd: Sinhala: re-did previous patch + using a more recent one. Un-did some other glyph changes that + didn't help much anyway. + +2010-08-20 11:05 +0000 [r1479] Stevan_White: + + * FreeMono.sfd: Named letters in several + ranges... should write a script for this... + +2010-08-20 09:52 +0000 [r1478] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added full GNU + copyright announcement to TT Names. Updated Copyright date. + +2010-08-20 09:16 +0000 [r1477] Stevan_White: + + * FreeSerif.sfd: Sinhala: Applied a patch from + Harshula Jayasuriya, improving glyph names. I tried to tidy up + some of the glyphs, but it's a big job... Latin Extended B: fixed + one case of missing extrema + +2010-08-18 09:48 +0000 [r1476] Stevan_White: + + * FreeSerif.sfd: Latin Extended-D: yet a few + more easily made letters + +2010-08-18 09:32 +0000 [r1475] Stevan_White: + + * FreeSerif.sfd: Latin Extended-D: made a few + more letters + +2010-08-09 06:34 +0000 [r1474] Stevan_White: + + * FreeSerif.sfd: Supplemental Arrows-A: + completed + +2010-08-09 05:50 +0000 [r1473] Stevan_White: + + * FreeSerif.sfd: Arrows: completed + +2010-08-08 22:38 +0000 [r1472] Stevan_White: + + * FreeSerif.sfd: Added more Arrows + +2010-08-04 17:43 +0000 [r1471] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Combining Diacritics: + some additions in BoldOblique, corrections in other faces. + Several improvements to Greek letter forms in BoldOblique + +2010-08-03 21:59 +0000 [r1470] Stevan_White: + + * FreeMonoBold.sfd: Arrows, a few math + operators, and one more combining diacritical + +2010-08-03 16:03 +0000 [r1469] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd: Added some combining + diacriticals to bold, touched up some spacing modifiers. Minor + corrections to roman. + +2010-08-03 15:06 +0000 [r1468] Stevan_White: + + * FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Marks, spacing + modifier letters: corrected placement of marks, added some + spacing modifier letters and combining marks. + +2010-08-03 12:53 +0000 [r1467] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Better Vietnamese + support, using 'ccmp' and 'mark' lookup tables. MonoBoldOblique: + added Extended Latin ranges + +2010-08-03 09:12 +0000 [r1466] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Vietnamese: Much adjustment + of horn letters, also general adjustemen of marks + +2010-08-02 21:49 +0000 [r1465] Stevan_White: + + * FreeSerif.sfd: Vietnamese: inadvertently broke + the main face. This fixes it. + +2010-08-02 18:25 +0000 [r1464] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Vietamese: In roman and + sans, lookups are basically functional now. Used 'ccmp' Ligature + Substitution to form stacked marks (inasmuch as glyphs for the + stacked Unicode codepoints are available) Adjusted positioning of + some marks. Named many letters and combining marks. roman italic. + Re-designed horn of O and U. Other roman faces could also benefit + from a horn job. + +2010-08-02 09:43 +0000 [r1462-1463] Stevan_White: + + * tools/ranges/OpenType.py: Correction regarding NKo + range. + + * tools/range_report.py: made not to complain about + special TrueType slots 0x00, 0x01, 0x0D + +2010-08-02 08:38 +0000 [r1461] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: roman: correction to one math + operator mono: Mathematical Operators complete (up to some + pre-5.2 Unicode version) + +2010-08-01 22:01 +0000 [r1460] Stevan_White: + + * FreeMono.sfd: Mathematical Symbols: range + nearly finished + +2010-08-01 17:17 +0000 [r1459] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: roman: corrected direction of 2 + math operators mono: added several math operators + +2010-08-01 14:04 +0000 [r1458] Stevan_White: + + * FreeSerif.sfd: more improvements to marks for + Vietnamese + +2010-08-01 13:25 +0000 [r1457] Stevan_White: + + * FreeSerif.sfd: Worked on mark positioning for + Vietnamese, Cyrillic + +2010-07-30 11:59 +0000 [r1456] Stevan_White: + + * FreeMono.sfd: Reduced height of two-part + Summation symbols https://savannah.gnu.org/bugs/?23064 + +2010-07-30 10:53 +0000 [r1455] Stevan_White: + + * FreeSerif.sfd: Added some Miscellaneous + Technical Symbols + +2010-07-30 09:24 +0000 [r1454] Stevan_White: + + * FreeMono.sfd: Corrected U+2626 Orthodox Cross + https://savannah.gnu.org/bugs/?27579#discussion + +2010-07-29 19:29 +0000 [r1453] Stevan_White: + + * FreeSerif.sfd: Put in some scan lines + 23BA-23BD, based on 2500, as discussed in + https://savannah.gnu.org/bugs/?23064 I still have no idea what + the application for these glyphs would be... + +2010-07-17 20:07 +0000 [r1452] Stevan_White: + + * FreeSerif.sfd: added mark anchors for acute, + grave in cyrillic (other faces already had them) + +2010-07-13 12:30 +0000 [r1451] Stevan_White: + + * FreeMono.sfd: Made germandbls (ess-zet) a bit + wider, moved a bit to left + +2010-07-10 20:42 +0000 [r1450] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Resolves bug 30344: "Greek + Final Sigma could be shortened" + https://savannah.gnu.org/bugs/index.php?30344 Problem only + affected roman, but touched up other faces anyway. + +2010-05-30 16:20 +0000 [r1449] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin-extended-B: fiddled + with some of the horizontal strokes + +2010-05-29 16:22 +0000 [r1448] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: accents on ogonek + letters (for Navaho) a little adjustment of apostrophe (Navaho, + Hawaiian) + +2010-05-29 15:05 +0000 [r1447] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin mark problems * low + dots in bold uneven * ring in bold smaller than in roman, and not + heavier * apostrophe in italic too far to right (Navaho, + Hawaiian) + +2010-05-29 09:19 +0000 [r1446] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: fixed problems with + various marks: ogonek, hook, comma below, some kerning, esp. of + non-ascii characters + +2010-05-29 07:39 +0000 [r1445] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Sans: made dot accents same + height as i-dot, kerned y with comma Both: made low comma accent + lower, smaller (esp. for Romanian) + +2010-05-27 19:13 +0000 [r1444] Stevan_White: + + * FreeSans.sfd: Latin: make caron of more + uniform height + +2010-05-27 18:58 +0000 [r1443] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Latin: made ring accent + heavier, esp. for Swedish + +2010-05-27 18:41 +0000 [r1442] Stevan_White: + + * FreeSans.sfd: Latin: i was somehow displaced, + dotlessi was much too wide for Turkish + +2010-05-10 20:17 +0000 [r1441] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Latin: kerning tweeks + +2010-05-09 18:54 +0000 [r1440] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: As discussed in + freefont-bugs mailing list, Thu, May 6, 2010 "FreeMono affected + by OS X 10.6 nested character references bug" reduced reference + nesting in multiple quote characters, as a courtesy to Mac OS + 10.6 users, who suffer from a bug. + +2010-05-03 22:52 +0000 [r1439] Stevan_White: + + * FreeSerif.sfd: Latin: kerning tweeks + +2010-05-03 20:51 +0000 [r1438] Stevan_White: + + * FreeSerifBold.sfd: Latin: spacing of round + small letters, kerning tweeks, fiddled with ligatures + +2010-04-17 19:38 +0000 [r1437] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Daniel Johnson improved + Cherokee Da + +2010-04-10 12:03 +0000 [r1436] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Emboldened underscore + and related glyphs. Resolves issue 22999 + https://savannah.gnu.org/bugs/index.php?22999 Low line (005F) in + bold fonts do not have heavier weight + +2010-04-09 18:55 +0000 [r1435] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Serif: Added Thai TTF names + +2010-04-08 20:44 +0000 [r1434] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Corrected some + language names A bit o kerning + +2010-04-08 20:20 +0000 [r1433] Stevan_White: + + * FreeSerifBold.sfd: Fixed problem with name. + This should be the same as before the revision except for the + fix. The KDE font installer was saying this face was incorrectly + named Free Serif Bold Italic, but this wasn't quite correct. One + of the other language names said it was named Free Serif Halvfett + Kursiv, which conflicted with that language name for the real + Free Serif Bold Italic. + +2010-04-08 17:26 +0000 [r1432] Stevan_White: + + * FreeSerifBold.sfd: regression: for some + unknown reason, previous release gets built so that my system + thinks it is Free Serif Bold Italic. This is a mystery. There is + nothing about Italic in the file. + +2010-04-06 19:33 +0000 [r1431] Stevan_White: + + * sfd/Makefile: Made graceful in absence of + Fontforge + +2010-03-29 20:47 +0000 [r1430] Stevan_White: + + * FreeSerifBold.sfd: Adjusted some accent marks, + named a few characters + +2010-03-25 21:05 +0000 [r1429] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: added Ukrainian TTF + names + +2010-03-24 23:40 +0000 [r1428] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: added bahasa + indonesian TTF names + +2010-03-21 12:27 +0000 [r1427] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added several TTF + Names. (Need to check with native speakers.) + +2010-03-20 11:39 +0000 [r1426] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Fill out TTF Names tables + regarding font names + +2010-03-19 08:37 +0000 [r1425] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Removed TTF Names for + 'sample text' and all 'license URL' except English, 1) in + response to FontForge complain that large names tables conflict + with recent Windows patches 2) because they are redundant and + inappropriate (Hope to post the list of sample texts elsewhere, + because I like the idea.) + +2010-03-02 08:13 +0000 [r1424] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Latin standard + ligatures: in non-bold, promoted dlig to liga. Put standard Dutch + IJ in all; Adjusted spacing a bit + +2010-02-28 13:04 +0000 [r1423] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBold.sfd: Cyrillic: further revision + of spacing, in direction of loosening. bold ze was strangely + thin; made bolder. + +2010-02-27 11:45 +0000 [r1422] Stevan_White: + + * FreeSerif.sfd: Cyrillic: reviewed spacing of + whole range, generally loosened slightly tidied a couple of ugly + glyphs + +2010-02-09 19:34 +0000 [r1421] Stevan_White: + + * FreeSerifBoldItalic.sfd: tweeks to kerning in + Latin + +2010-02-09 18:40 +0000 [r1420] Stevan_White: + + * FreeSerifBold.sfd: Tweeks to kerning in Latin + +2010-01-28 08:20 +0000 [r1419] Stevan_White: + + * tools/isMonoMono.py: Implement FontForge handling + of magic characters .notdef, .null, nonmarkingreturn at 0x0000 + 0x0001 0x000D + +2010-01-27 22:48 +0000 [r1418] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Improved magic + characters for FreeMono, inserted them for other faces + https://savannah.gnu.org/bugs/index.php?28742 + +2010-01-27 21:24 +0000 [r1417] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Added at 0x0000 + 0x0001 0x000D characters .notdef .null nonmarkingreturn These are + NOT UNICODE they are to satisfy an essentially undocumented + "feature" of FontForge, ( in source tottf.c, AssignNotdefNull() ) + And a funny strong suggestion of TrueType fonts, that they begin + with three special characters (evidently different from encoding + slots) http://www.microsoft.com/typography/otspec/recom.htm + FontForge looks for these glyphs in certain places and copies + them. Otherwise, apparently, it will find a glyph elsewhere + (unclear how) and copy it there, possibly resulting in something + quite wrong (such as a non-monospace font). The three are copied + to the end of TTF fonts (only one to the end of OTF fonts) + +2009-12-30 23:25 +0000 [r1416] Stevan_White: + + * FreeSans.sfd: Tamil: deletd Unicode range due + to absence of necessary ligatures + +2009-12-30 23:01 +0000 [r1415] Stevan_White: + + * FreeSerifBold.sfd: Cyrillic tweek to spacing + +2009-12-29 21:01 +0000 [r1414] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Gurmukhi: added 2 characters + to complete range + +2009-12-29 20:40 +0000 [r1413] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Devanagari: filled out sans, + some corrections in serif + +2009-12-29 01:42 +0000 [r1412] Stevan_White: + + * FreeSerif.sfd: Devanagari: Drew and + constructed glyphs to complete range. + +2009-12-28 19:00 +0000 [r1411] Stevan_White: + + * AUTHORS, CREDITS: added credits for + recent additions + +2009-12-28 18:36 +0000 [r1410] Stevan_White: + + * tools/ranges/OpenType.py: Added/corrected some + ranges + +2009-12-27 16:25 +0000 [r1405-1409] Stevan_White: + + * tools/MES-Conformance/WGL4.lst (added), + tools/MES-Conformance (added), + tools/MES-Conformance/MES-1.txt (added), + tools/MES-Conformance/MES-2.txt (added), + tools/MES-Conformance/CheckConformance.pl (added), + tools/MES-Conformance/MES-1.lst (added), + tools/MES-Conformance/MES-2.lst (added), + tools/MES-Conformance/MES-3B.txt (added), + tools/MES-Conformance/mes-list-expand.pl (added), + tools/MES-Conformance/MES-3B.lst (added): Moved + Primoz' conformance tools (dated 2002) to a more comfortalbe + directory. + + * tools/MES-3B.lst (removed), + tools/GenerateTrueType, + tools/WGL4.lst (removed), + tools/MES-1.txt (removed), + tools/MES-2.txt (removed), + tools/CheckConformance.pl (removed), + tools/MES-1.lst (removed), + tools/MES-2.lst (removed), + tools/MES-3B.txt (removed), + tools/mes-list-expand.pl (removed): disabled build + of Mac TT + + * tools/ligatureLookups.py: better sanity check + + * tools/range_report.py: more generic title + + * tools/ranges/OpenType.py: correction to Tamil + +2009-12-27 13:56 +0000 [r1404] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Resolves bug #23049 + Replacement character (U+FFFD) not properly styled + https://savannah.gnu.org/bugs/index.php?23049 + +2009-12-27 01:47 +0000 [r1403] Stevan_White: + + * FreeSerif.sfd: Devanagari: added letters, + completing Unicode range + +2009-12-27 01:06 +0000 [r1402] Stevan_White: + + * FreeSerif.sfd: Tamil: added 2 monster glyphs, + completing range (0bc1-2 still questionable) + +2009-12-26 18:14 +0000 [r1401] Stevan_White: + + * FreeSerif.sfd: Tamil: a few more symbols. Only + a couple of monster signs still missing, and a couple of marks + seem just wrong... + +2009-12-26 17:03 +0000 [r1400] Stevan_White: + + * FreeSerif.sfd: Tamil: added digits + +2009-12-26 15:40 +0000 [r1399] Stevan_White: + + * FreeSans.sfd: Tamil: completed digits, added + some other chars + +2009-12-26 14:12 +0000 [r1398] Stevan_White: + + * FreeSerif.sfd: Malayalam: completed Unicode + range, also moving some Chillu letters from Private Use area to + Unicode, and re-establishing ligatures + +2009-12-26 00:38 +0000 [r1397] Stevan_White: + + * FreeSerif.sfd: Indic ranges: named lots of + characters Tamil: corrected and added a few letters + +2009-12-24 23:56 +0000 [r1396] Stevan_White: + + * FreeSans.sfd: Indic ranges, esp. Devanagari: + added several new Unicode (not yet complete) tidied letters + Bengali: tidying, made some refs + +2009-12-24 18:29 +0000 [r1395] Stevan_White: + + * FreeSans.sfd: Indic ranges: named most of the + Unicode characters Tried to improve a few bad names for ligatures + in Private Use Area Made a few references: not clearly an + improvement. This stuff is still a mess... + +2009-12-24 15:19 +0000 [r1394] Stevan_White: + + * FreeSans.sfd: Devanagari: added an obviously + missing nukta ligature + +2009-12-24 14:36 +0000 [r1393] Stevan_White: + + * FreeSans.sfd: Gujarati: added some subvocalic + letters for Sanskrit. Quality is low. + +2009-12-24 13:26 +0000 [r1392] Stevan_White: + + * FreeSans.sfd: Filled out Geometric Shapes. + +2009-12-24 10:23 +0000 [r1391] Stevan_White: + + * tools/ligatureLookups.py: fixed syntax error + +2009-12-23 23:06 +0000 [r1390] Stevan_White: + + * tools/LigatureList.pl (removed): no longer + relevant. + +2009-12-23 22:58 +0000 [r1389] Stevan_White: + + * tools/ligatureLookups.py (added): Replacement for + the LigatureList.pl script, which relied on an external utility + to produce a list of replacement lookups. + +2009-12-22 23:56 +0000 [r1388] Stevan_White: + + * tools/ranges/OpenType.py: removed links to + disappeared web pages + +2009-12-22 23:45 +0000 [r1387] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: cosmetic re-name and + re-order of lookups + +2009-12-22 22:51 +0000 [r1386] Stevan_White: + + * FreeMonoOblique.sfd: Diagonal Fractions lookup + didn't make much sense in mono anyway, much less in just one + style. + +2009-12-20 13:33 +0000 [r1385] Stevan_White: + + * FreeSerif.sfd: split Diagonal Fractions lookup + into two tables + +2009-12-19 23:20 +0000 [r1382-1384] Stevan_White: + + * tools/range_report.py: corrected script name + + * tools/ranges/OpenType.py: numerous changes, some + reflecting changes to Unicode standard + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: General Punctuation: + Got rid of deprecated subrange 0x206A-0x206F + +2009-12-19 23:13 +0000 [r1381] Stevan_White: + + * FreeSerif.sfd: re-encoded some characters + adjusted some marks corrected two wrongly-placed glyphs in + Phonetic Extensions Supplement + +2009-12-14 08:22 +0000 [r1380] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Unicode 5.2 + corrections of Abkhasian letters from Daniel Johnson. Got rid of + some old glyph names. + +2009-12-06 15:07 +0000 [r1379] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Cherokee: fixed previous + commit of a partial, and old range in medium weight + +2009-12-06 14:57 +0000 [r1378] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Cherokee, courtesy of + Daniel Johnson. + +2009-11-20 13:28 +0000 [r1377] Stevan_White: + + * FreeSans.sfd: New glyphs for Unified Canadian + Aboriginal Syllabics as defined in Unicode 5.2 by Daniel Johnson + +2009-11-14 22:47 +0000 [r1376] Stevan_White: + + * FreeSerif.sfd: Resolves bug #27842: FreeSerif + U+1F016 (Mahjong Tile Seven of Bamboos) Wrong + https://savannah.gnu.org/bugs/?27842 has one extra bamboo in it + for a total of eight. The bamboo on the top left needs to be + removed + +2009-11-14 22:31 +0000 [r1375] Stevan_White: + + * FreeSerif.sfd: Resolves bug #27579: Orthodox + cross has wrong glyph http://savannah.gnu.org/bugs/?27579 U+2626 + Orthodox Cross should slope downwards from left to right. + +2009-11-13 02:33 +0000 [r1374] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBold.sfd: Cyrillic: corrections to + Abkhazian letters by Daniel Johnson + +2009-11-05 15:33 +0000 [r1373] Stevan_White: + + * FreeSerif.sfd: Cyrillic: corrections to + Abkhazian letters by Daniel Johnson + +2009-10-16 21:12 +0000 [r1372] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Cyrillic: tweeks to brev, + based on Unicode 5.2 samples + +2009-10-08 07:38 +0000 [r1371] Stevan_White: + + * FreeSerif.sfd: Currency Symbols: tidied + +2009-10-07 23:48 +0000 [r1370] Stevan_White: + + * FreeSerif.sfd: Number Forms: three new vulgar + fractions + +2009-10-07 23:32 +0000 [r1369] Stevan_White: + + * FreeSerif.sfd: Currency Symbols: added "Tenga" + of Kazakhstan + +2009-10-07 23:19 +0000 [r1368] Stevan_White: + + * FreeSerif.sfd: Latin Extended: corrected a + couple of wrong bearings some fiddling with Vienamese letters + with hook + +2009-09-30 23:31 +0000 [r1367] Stevan_White: + + * FreeSerif.sfd: added missing accent + +2009-09-17 21:20 +0000 [r1366] Stevan_White: + + * FreeSerif.sfd: Latin kerning: gave qj positive + kerning (it must happen sometimes) + +2009-09-17 21:09 +0000 [r1365] Stevan_White: + + * FreeSerif.sfd: Latin kerning: differentiated + grave and dieresis vowels in some combos. (also, adieresis hadn't + been kerned at all...) + +2009-09-17 20:12 +0000 [r1364] Stevan_White: + + * AUTHORS: Credited Yannis & Wellcome Institute for + Sinhala glyphs + +2009-09-17 20:07 +0000 [r1363] Stevan_White: + + * FreeSerif.sfd: made ref of one sinhals letter + +2009-09-15 10:30 +0000 [r1362] Stevan_White: + + * CREDITS: Credit Wellcome Library for Sinhala, and + the Sinhala LKLUG font + +2009-07-30 14:03 +0000 [r1361] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd: kerning + +2009-07-26 10:41 +0000 [r1360] Stevan_White: + + * FreeSansBold.sfd: kerning + +2009-07-26 07:54 +0000 [r1359] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: added some space in + diaeresis did some kerning + +2009-07-26 07:42 +0000 [r1358] Stevan_White: + + * FreeSansBold.sfd: revert serious mistake with + previous commit: had somehow set splies quadratic. Here, the + GaspTable from that commit is preserved, However there were + evidently numerous other changes that weren't documented, and + these are lost. + +2009-07-12 16:21 +0000 [r1357] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added GASP tables for + control of hinting/smoothing (anti-alising) of TrueType. Now the + values are better suited to the EM size of the fonts. Further + adjustment (based say on stem width) might still be profitable. + +2009-07-11 23:32 +0000 [r1356] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: More tweeks on + accents, especially Maltese letters. + +2009-07-11 19:53 +0000 [r1355] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Maltese Hbar, hbar, + Improved, made more consistent. + +2009-07-11 17:08 +0000 [r1354] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Latin: various + corrections and tweeks for consistency in accented letters. + +2009-07-11 08:23 +0000 [r1353] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: more space to accent on + lcaron tightened DZ etc ligatures in SerifItalic faces made + references etc in Spacing Modifiers and Combining further kerning + +2009-07-10 22:21 +0000 [r1352] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: kerning Sans: decided dots + and some other marks needed more room. + +2009-07-10 19:09 +0000 [r1351] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: IPA. Phonetics: tweeks + +2009-07-10 08:02 +0000 [r1349-1350] Stevan_White: + + * FreeSerif.sfd: Tweeked some math symbols + + * FreeSans.sfd, + FreeSansOblique.sfd: Letterlike: additions + +2009-07-10 07:21 +0000 [r1348] Stevan_White: + + * FreeMonoOblique.sfd: IPA + +2009-07-09 22:53 +0000 [r1347] Stevan_White: + + * FreeSerifBoldItalic.sfd: Another IPA symbol + +2009-07-09 22:32 +0000 [r1346] Stevan_White: + + * FreeSerifBoldItalic.sfd: IPA and Spacing + Modifier Letters: added a few + +2009-07-08 22:38 +0000 [r1345] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: various horizontal + spacing and positioning issues Replaced Tz and tz ligatures with + the originals of Danial Johnson. (range is "Mayanist" and despite + Unicode samples, current usage uses normal z in glyph) Put + stylized Tz tz in a discretionary ligature lookup. + +2009-07-08 18:39 +0000 [r1344] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Cyrillic yi_yi + Ukrainian ligature Latin various pointwise cleanup, made some + references, horizontal adjustments + +2009-07-08 00:16 +0000 [r1343] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Cyrillic: Special ligature + for Ukrainian yi_yi, also some kerning + +2009-07-07 08:09 +0000 [r1342] Stevan_White: + + * FreeSerif.sfd: Latin: kerning; made accents on + i tighter to avoid collisions + +2009-07-05 13:08 +0000 [r1341] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Made lookup tables + for Dutch IJ + +2009-07-05 13:01 +0000 [r1340] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Re-did Dutch digraph + IJ in bold faces as "broken-U", because I thought it was cool and + nobody was there to stop me. + +2009-07-05 12:35 +0000 [r1339] Stevan_White: + + * FreeSerif.sfd: Corrected ligatures Tz tz; put + them in special lookup Latin Extended Additional: added + medevalist letters, completing range + +2009-07-05 11:07 +0000 [r1338] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Cyrillic: added yi_yi + ligature for Ukrainian in roman. Not sure if it's right. Latin: + kerning. Added longs_t ligature, and historic ligature tables + IPA: in bolditalic, added a letter or two + +2009-07-04 23:22 +0000 [r1337] Stevan_White: + + * FreeSerif.sfd: Kerning for hbar + +2009-07-04 23:10 +0000 [r1336] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Kerning for Western Slavic + languages Added a couple of IPA to BI + +2009-07-04 13:29 +0000 [r1335] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: combined letters ae, + oe, ij had incorrect horizontal spacing + +2009-07-04 13:14 +0000 [r1334] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: combined letters ae, oe, ij + had wrong horizontal spacing. + +2009-07-04 12:27 +0000 [r1333] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Combining Diacritical Marks + for Symbols: additions and fiddling. Also related circles, + arrows. + +2009-07-04 09:22 +0000 [r1332] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Letterlike Symbols: + various additions and adjustments Number Forms: Completed range + in serif roman. Adjusted spacing of Latin numerals in serif + faces. Diacritics for Symbols: various additions Geometric + shapes: thought it best for circle to be round even in oblique + faces. It's a choice of course. Added to several faces. Made all + to pass tests (except sinhals) + +2009-07-02 20:37 +0000 [r1331] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Letterlike Symbols: more + additions, adjustments Also fiddled with some math symbols in + Sans faces + +2009-07-02 09:14 +0000 [r1330] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Letterlike Symbols; + additions and adjustments Note: Pango is rendering very + strangely: many glyphs in the font are being stolen from some + other fonts instead: All the script an blackletter, and some + others as well. Is there a cache in the system somewhere? Or + what? + +2009-06-28 19:48 +0000 [r1329] Stevan_White: + + * FreeSerif.sfd: Modified glyph. From patch by + Pavel Skrylev. + +2009-06-28 19:11 +0000 [r1328] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Superscritps and + Subscripts: made glyphs to complete range in all faces + +2009-06-28 17:43 +0000 [r1327] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Added some combining + marks for symbols and Blackboard Bold letters to letterlike + symbols + +2009-06-28 08:59 +0000 [r1326] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerifBold.sfd: Various adjustments + regarding superscript and subscript characters in several ranges. + +2009-06-27 15:45 +0000 [r1325] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: More fiddling with + super/subscripts Tidied points in Serif to make fontforge "wrong + direction" complaint in scaled reference go away. Made some other + references in basic latin ranges. + +2009-06-27 14:54 +0000 [r1324] Stevan_White: + + * FreeSerif.sfd: Superscripts and subscripts (in + various ranges): tried to systematize sizing and vertical + placement. Note: most letters are still simply scaled. This is + practical maintenance-wise, but isn't typographically optimal. + +2009-06-27 09:04 +0000 [r1323] Stevan_White: + + * FreeSerif.sfd: Cyrillic Extended A: altered + mark positions + +2009-06-26 23:31 +0000 [r1322] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Phonetic Extensions: + various corrections and fiddling Changed Blues values in + FreeSerifBoldItalic + +2009-06-25 19:27 +0000 [r1321] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Combining Diacritical + Marks for Symbols: added to bold oblique added placement mark to + many + +2009-06-25 07:37 +0000 [r1320] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Deleted TrueType + tables 'cvt', 'fpgm', 'prep' because of FontForge complaints. + +2009-06-25 07:24 +0000 [r1319] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: IPA Extensions: + completed in bold and boldoblique, completing range for face. All + faces: deleted 'cvt', 'prep', 'fpgm' TrueType tables, because + FontForge was complaining about them (legacy hinting that could + interfere, possibly lower quality code, etc) + +2009-06-24 23:22 +0000 [r1318] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: IPA Extensions: made + several characters + +2009-06-24 22:25 +0000 [r1317] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: IPA Extensions: completed + range in bold + +2009-06-23 21:48 +0000 [r1316] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Spacing Modifiers: added a + couple Combining Diacriticals: brought range to par with FreeSans + +2009-06-23 21:11 +0000 [r1315] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Same correction as + for FreeSerif + +2009-06-23 20:58 +0000 [r1314] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Corrected descender of 027f + +2009-06-23 20:45 +0000 [r1313] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: IPA and related: made lots + of additional glyphs + +2009-06-22 08:43 +0000 [r1312] Stevan_White: + + * FreeSerif.sfd: Latin: further clean-up + +2009-06-21 10:53 +0000 [r1311] Stevan_White: + + * FreeSerif.sfd: General pointwise clean-up of + Latin and Latin Extended. No visible changes were intended + besides changed policy on horizontal placement of some horned + letters + +2009-06-21 09:21 +0000 [r1310] Stevan_White: + + * FreeSerif.sfd: Latin Extended-C: constructed + glyphs to complete range. Latin Extended-D: constructed a bunch + of glyphs; some related changes elsewhere. + +2009-06-20 17:43 +0000 [r1309] Stevan_White: + + * FreeSerif.sfd: Latin Extended-C: added most of + range + +2009-06-20 12:51 +0000 [r1308] Stevan_White: + + * FreeSerif.sfd: Modifier Tone Letters: added + glyphs to complete range. This should also complete all the + IPA/Phonetic extenseions ranges. + +2009-06-20 11:25 +0000 [r1307] Stevan_White: + + * FreeSerif.sfd: Phonetic Extensions Supplement: + added letters completing range Note the superscript ones are + simply scaled, so stem width is not quite right... + +2009-06-19 08:19 +0000 [r1306] Stevan_White: + + * FreeSerif.sfd: Phonetic Extensions: made + letters to complete range + +2009-06-18 06:40 +0000 [r1305] Stevan_White: + + * FreeSans.sfd: IPA Extensions: clean-up, fix + some horizontal spacing issues + +2009-06-18 06:16 +0000 [r1304] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Some glyph problems + clean-up, made to pass validate (BlueValues) + +2009-06-17 21:13 +0000 [r1303] Stevan_White: + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: IPA Extensions: + Improved spacing and horizontal positioning + +2009-06-17 08:42 +0000 [r1302] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Georgian: added + missing letter + +2009-06-17 08:22 +0000 [r1301] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: IPA: made curls on + some glyphs more distinct. note horizontal placement in BO is + chaotic--needs work + +2009-06-14 13:51 +0000 [r1300] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: various + experiments with lookups. calt: should have allowed isolatef + forms of combining marks, (but can't see application support...) + aalt, hist: for alterntative characters Added some historical + glyphs Math Alphanumeric: some clean-up. + +2009-06-11 21:57 +0000 [r1299] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: various + tweeks. Failed attempt to use 'isol' lookup to put isolated + combining marks above the baseline. + +2009-06-11 09:04 +0000 [r1298] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: more fiddling + with mark placement, strengthened ornamental endings + +2009-06-10 22:53 +0000 [r1297] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: mkmk + positioning of augmentation dot + +2009-06-10 09:09 +0000 [r1296] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: combining + marks above and below notes now working somewhat + +2009-06-08 21:46 +0000 [r1295] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: more + adjustments of size and placement + +2009-06-06 23:28 +0000 [r1294] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: mostly work on + lookups. Made tablature symbols thinner. + +2009-06-06 19:24 +0000 [r1293] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: more fiddling + with sizes and positions Byzantine Musical Symbols: minor + clean-ups + +2009-06-06 12:31 +0000 [r1292] Stevan_White: + + * FreeSerif.sfd: Fixed some ATT problems with + 'kern' lookups for Cyrillic + +2009-06-06 12:25 +0000 [r1291] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: more changes + to size and position + +2009-06-05 21:28 +0000 [r1290] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: many changes + to glyph positions and shapes + +2009-05-27 22:36 +0000 [r1289] Stevan_White: + + * FreeSerif.sfd: Cyrillic, additions and + re-naming by Pavel Skrylev. * Added Cyrillic-B Ext glyphs, and + Cyrillic-A Ext glyphs. * Added cyr_above anchor to all cyrillic + glyphs, some glyphs was changed * To all Cyrillic letters I've + given proper names based on old Slavic language which is source + of all modern slavic languages. (the naming is contentious, and + there are a couple of technical problems...under consideration) + +2009-05-26 23:09 +0000 [r1288] Stevan_White: + + * FreeSerif.sfd: Musical Symbols: scaled up + accidentals a bit. reduced width of repeated figure marks reduced + width of caesura even more tried to implement mark + positioning...not working everywhere made references + +2009-05-25 23:48 +0000 [r1287] Stevan_White: + + * FreeSerif.sfd: Made all letterlike glyph parts + more like those from Serif and Serif Italic. (Except for Ped. + U+1d1ae) + +2009-05-20 08:25 +0000 [r1286] Stevan_White: + + * FreeSerif.sfd: Corrected DPOS lookup for Music + range to be in script 'musi' + +2009-05-20 07:35 +0000 [r1285] Stevan_White: + + * FreeSerif.sfd: Western Musical Symbols: + fiddling Miscellaneous Symbols: re-design of musical flat symbol + +2009-05-19 07:37 +0000 [r1284] Stevan_White: + + * FreeSerif.sfd: Western Musical Symbols: + revised horizontal placement of notes + +2009-05-19 01:38 +0000 [r1283] Stevan_White: + + * FreeSerif.sfd: Western Musical Symbols: raised + some more glyphs + +2009-05-19 01:27 +0000 [r1282] Stevan_White: + + * FreeSerif.sfd: Western Musical Symbols: + altered many combining symbols to be more like Unicode sample + corrected many symbols that should be spacing but had 0 width + raised many symbols that were far lower than in Unicode samples + +2009-05-18 09:47 +0000 [r1281] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: U+0354 and U+0355 + (combining left/right arrowhead below) were switched + +2009-05-11 21:27 +0000 [r1280] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Hebrew: Moved vowel below mark + for esh (05e8) and dalet (05d3) as recommended in bug report + #25887 "FreeSans Hebrew most nonspacing marks are spacing" + https://savannah.gnu.org/bugs/?25887 + +2009-05-11 07:25 +0000 [r1279] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Put PS Private + BlueScale back to default. (Was really experiment to alleviate + excessive overshoot. Didn't work and FontForge complained.) + +2009-05-11 07:21 +0000 [r1278] Stevan_White: + + * FreeSerif.sfd: Geometric Shapes: made two + 'bullet' shapes to be consistent with 'bullet' Blues values: put + Std VH W into Stem Snap values + +2009-05-11 07:09 +0000 [r1277] Stevan_White: + + * FreeSans.sfd: More Geometric Shapes. also + worked on character widths. + +2009-05-09 19:47 +0000 [r1276] Stevan_White: + + * FreeSans.sfd: More Geometric Shapes + +2009-05-02 12:44 +0000 [r1274-1275] Stevan_White: + + * FreeSansOblique.sfd: Had misplaced Tifinagh + range. + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: The rest of Tifinagh, + courtesy of Daniel Johnson. + a few adjustments. + +2009-05-01 09:06 +0000 [r1273] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Explicitly disabled + PS Private dictionary entry BlueFuzz as recommended in Adobe Type + 1 Font Format, sect. 5.8. + +2009-05-01 07:50 +0000 [r1272] Stevan_White: + + * FreeSans.sfd: Tifinagh range, courtesy of + Daniel Johnson. + +2009-05-01 07:47 +0000 [r1271] Stevan_White: + + * tools/ranges.py: Corrections for Georgian and + Tifinagh ranges + +2009-05-01 07:17 +0000 [r1270] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Adjusted PS Private + values according to understanding of Adobe Type 1 Font Format + (Ch. 5, Private Dictionary) Not completely clear on BlueScale, + and StemSnap values are still a mystery. (FontForge 'guess' seems + to do little or nothing, and I don't know where these values came + from) Original hope was to improve appearance of overshoot in + Sans, but it seems that my renderers ignore this information. + +2009-04-28 07:41 +0000 [r1269] Stevan_White: + + * FreeSans.sfd: More Geometric Shapes + +2009-04-27 23:14 +0000 [r1268] Stevan_White: + + * FreeSans.sfd: More Geometrical Shapes + +2009-04-27 08:11 +0000 [r1267] Stevan_White: + + * FreeSans.sfd: Added U+25D0-3 (half-black + circles) Note the Geometric Shapes range is still in poor shape + in Sans. + +2009-04-25 11:55 +0000 [r1266] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Serif: fiddled with mark + positioning in Cyrillic and Glagolitic Non-roman faces: Added + 'mark' positioning for Cyrillic + +2009-04-14 09:16 +0000 [r1265] Stevan_White: + + * FreeSerif.sfd: Cyrillic Extended-B more + additions. Now has all except payerok punctuation and Old + Abkhasian letters. + +2009-04-13 18:10 +0000 [r1264] Stevan_White: + + * FreeSerif.sfd: Cyrillic Extended-B a few more + letters + +2009-04-13 17:35 +0000 [r1263] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: kerning: tweeks + +2009-04-11 15:35 +0000 [r1262] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Georgian: additions and + improvements. Serif now has full compliment. Note uppercase is + questionable, being a simple scaling... + +2009-04-11 13:20 +0000 [r1261] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Latin Extended-D + added u+a788-c + +2009-04-11 12:08 +0000 [r1260] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin Extended-D corrected + slots for Mayanist letters in roman added modifier letters + u+a788-c + +2009-04-11 11:42 +0000 [r1259] Stevan_White: + + * tools/ranges.py: Corrected Vai range + +2009-04-11 10:50 +0000 [r1258] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin Extended-D Mayanist + letters by Daniel Johnson + +2009-04-10 09:00 +0000 [r1257] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Letterlike Symbols: additions + and improvements + +2009-04-10 08:38 +0000 [r1256] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Letterlike Symbols: + additions, improvements + +2009-04-10 07:13 +0000 [r1255] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Reconsidered numeral + 1. Made angle more like other angles in font. + +2009-04-09 06:45 +0000 [r1254] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Increased angle of + hook on numeral 'one', to improve distinction from letter 'l' at + small point sized. (Noticed that on some systems, even at 12 + point the distinction had not been obvious.) + +2009-03-29 13:56 +0000 [r1253] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: General Punctuation: + Adjust position, shape of quotes, fiddle with others. + +2009-03-29 12:12 +0000 [r1252] Stevan_White: + + * FreeSans.sfd: Kerning: Had grouped letters + with round bowls on left (e,c,0,d,q) together, but now see the + original Nimbus fonts had left bounds that vary by 10 EM or more, + which is quite visible. I am correcting a flaw in the original + font in a very difficult and complex way. It would be much better + to make the bounds of these similar letters to be equal. To do: + same for punctuation, copy to other styles of Sans + +2009-03-29 03:48 +0000 [r1251] Stevan_White: + + * FreeSerif.sfd: Kerning: tweeks + +2009-03-29 03:34 +0000 [r1250] Stevan_White: + + * FreeSerif.sfd: Kerning tweek + +2009-03-22 18:54 +0000 [r1249] Stevan_White: + + * FreeMono.sfd: clean-up of some of the basic + Nimbus glyphs + +2009-03-22 14:26 +0000 [r1248] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Hebrew: more work on lookups + regarding vowel marks + +2009-03-22 11:03 +0000 [r1247] Stevan_White: + + * FreeSans.sfd: Hebrew: vowel mark positioning + +2009-03-16 19:26 +0000 [r1246] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: re-named some lookup tables + (Sinhala, Hebrew) + +2009-03-15 11:58 +0000 [r1245] Stevan_White: + + * FreeSerif.sfd: Georgian: point-wise cleanup + note: doubts about spacing and glyph bounds in capitals + +2009-03-15 09:58 +0000 [r1244] Stevan_White: + + * FreeSerif.sfd: Greek Extended: corrected + u+1fd3 + +2009-03-13 08:15 +0000 [r1243] Stevan_White: + + * FreeSerif.sfd: Cyrillic (and extensions) + various tweeks to old Cyrillic letters, spacing. + +2009-03-07 12:30 +0000 [r1242] Stevan_White: + + * FreeMonoBoldOblique.sfd: correct direction + braceleft + +2009-03-07 12:16 +0000 [r1240-1241] Stevan_White: + + * FreeSerif.sfd: Glagolitic: tweeks + + * FreeMonoBold.sfd: correct direction of + braceleft + +2009-03-05 09:03 +0000 [r1239] Stevan_White: + + * FreeSerif.sfd: Glagolitic: more fiddling. + Raised small letters so their tops are even with the tops of the + big letters, which is more in line with their "hanging" nature, + and with most manuscripts. + +2009-03-04 07:03 +0000 [r1238] Stevan_White: + + * tools/ranges.py: ranges for Sinhala + +2009-03-03 09:54 +0000 [r1237] Stevan_White: + + * FreeSerif.sfd: Glagolitic: more tweeks + +2009-03-02 23:03 +0000 [r1236] Stevan_White: + + * FreeSerif.sfd: Glagolitic: added Djervi (I + think) + +2009-03-02 21:49 +0000 [r1235] Stevan_White: + + * tools/GenerateMacTT (added): Special script for + generating fonts that don't give errors on the Mac. I hope + somebody will fix something, either in Font Book or FontForge, + that will make this unnecessary + +2009-03-01 23:24 +0000 [r1234] Stevan_White: + + * FreeSerif.sfd: Glagolitic: tweeks + +2009-02-28 19:38 +0000 [r1233] Stevan_White: + + * FreeSerif.sfd: Sinhala: replaced U+0DD0-1 with + ones from sinha font + +2009-02-28 12:25 +0000 [r1232] Stevan_White: + + * FreeSerif.sfd: Glagolitid: Additions, + improvements (Note: the characters still missing I simply haven't + yet recognized in a manuscript or found in an on-line HTML + encoded text. I would like to see real ones rather than copying + out of the Unicode samples.) Cyrillic Extended B: Assembled + Monograph Uk, uk. See discussion + http://en.wikipedia.org/wiki/Uk_(Cyrillic) + +2009-02-28 00:14 +0000 [r1231] Stevan_White: + + * FreeSerif.sfd: More work on Glagolitic + +2009-02-27 15:35 +0000 [r1230] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made braces more + distinctive. + +2009-02-26 15:12 +0000 [r1229] Stevan_White: + + * FreeMono.sfd: ASCII: Accentuated braces (for + better readability in terminals) + +2009-02-24 22:27 +0000 [r1228] Stevan_White: + + * FreeSerif.sfd: Cherokee: Daniel improved + U+13d2 + +2009-02-24 07:41 +0000 [r1227] Stevan_White: + + * FreeSerif.sfd: Sinhala: Copied most Unicode + glyphs directly from Yannis Haralambous sinhala MetaFont files. + These are: all but 0dd0 0dd1 0df4. Gave Unicode characters names, + based on a transliteration scheme from Harshula. The auxiliary + Sinhala are all from the LKLUG font. + +2009-02-22 23:41 +0000 [r1226] Stevan_White: + + * FreeSerif.sfd: Copied glyphs from LKLUG font, + as discussed with Harshula Jayasuriya. + http://sinhala.cvs.sourceforge.net/viewvc/sinhala/sinhala/fonts/ + This font is derived from a Metafont font: This package was + originally developed by Yannis Haralambous (Yannis.Haralambous at + univ-lille1 fr), with funding from the Wellcome Institute for the + History of Medicine, 183 Euston Road, London NW1 2BE, England + (Contact person: Dominik Wujastyk (D.Wujastyk at ucl ac uk)), + which is using the font in its Catalogue of Sinhala Manuscript. + The original package was available by ftp at ftp.bcc.ac.uk in: + /pub/users/ucgadkw/indology/software/sinhala1-TeX.zip The hope is + to eventually pull glyphs directly from the original MF files. + +2009-02-21 19:48 +0000 [r1225] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: tidying previous commits + +2009-02-21 14:11 +0000 [r1224] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Serif: Revised letter + spacing in Armenian. Serif roman: Added initial version of + Glagolitic (by me) + +2009-02-18 20:38 +0000 [r1223] Stevan_White: + + * FreeSerif.sfd: Armenian: spacing changes + Sinhala: deleted range, for usual reasons: It doesn't even + contain the full set of Unicode letters, and Sinhala requires + auxiliary characters and lookup tables for proper representation. + (Found what I think are the originals at + http://www.mettanet.org/fonts/ ) + +2009-02-12 20:08 +0000 [r1222] Stevan_White: + + * tools/ranges.py, + tools/findBackLayers.py, + tools/GenerateTrueType, + tools/GenerateOpenType, + tools/range_report.py, + tools/validate.py, + tools/checkGlyphNumbers.py, + tools/isMonoMono.py: Changed + /usr/local/bin/fontforge to /usr/bin/fontforge (to work with the + update-alternatives mechanism, whereby a link is made + /usr/bin/fontforge -> /etc/alternatives/fontforge -> preferred + binary ) + +2009-02-12 19:33 +0000 [r1221] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: SerifBoldItalic - Armenian + oblique from Daniel Johnson's bold version Added ligatures (by + Daniel) and lookup tables. + +2009-02-12 08:39 +0000 [r1220] Stevan_White: + + * FreeSerifItalic.sfd: Armenian: Made oblique + version of Daniel Johnson's range + +2009-02-12 08:28 +0000 [r1219] Stevan_White: + + * FreeSerifBold.sfd: Armenian by Daniel Johnson + +2009-02-12 08:00 +0000 [r1218] Stevan_White: + + * FreeSerif.sfd: Improvements of a couple of + Armenian characters, from Daniel Johnson. + +2009-02-07 20:28 +0000 [r1217] Stevan_White: + + * FreeSerifItalic.sfd: Latin: kerning fixed some + missing extrema + +2009-02-07 19:47 +0000 [r1216] Stevan_White: + + * FreeSerifItalic.sfd: Latin: kerning made some + more delicate italic IPA letters + +2009-02-06 20:14 +0000 [r1215] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Latin: kerning + +2009-02-06 10:19 +0000 [r1214] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin: kerning Adjusted ff + etc ligatures in Italic + +2009-02-05 23:20 +0000 [r1213] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin: kerning + +2009-02-05 19:57 +0000 [r1212] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Thai sample text (means + something like Mr Sangkapan who sells bottles was picked up by + the police because he stole the wash of ms. .....) + +2009-02-04 20:19 +0000 [r1211] Stevan_White: + + * FreeSans.sfd: Vai range, by Daniel Johnson + +2009-02-04 20:08 +0000 [r1210] Stevan_White: + + * FreeSerifBoldItalic.sfd: Latin: kerning + +2009-02-03 20:53 +0000 [r1209] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin: kerning + +2009-02-02 23:44 +0000 [r1208] Stevan_White: + + * FreeSerifBoldItalic.sfd: Latin: kerning + +2009-02-02 23:32 +0000 [r1207] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Latin: kerning + +2009-01-26 21:00 +0000 [r1206] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made nu distinct from + v. Remedies bug #25376: https://savannah.gnu.org/bugs/?25376 + greek letter 'nu' [U+03bd] same as latin 'v' [U+0076] in FreeMono + +2009-01-22 21:37 +0000 [r1205] Stevan_White: + + * FreeSans.sfd: Kerning. Need to copy to other + faces + +2009-01-22 01:44 +0000 [r1204] Stevan_White: + + * FreeSerif.sfd: Arabic ligatures: turned on + "ignore combining marks" on advice of Khaled Hosny. + +2009-01-20 17:09 +0000 [r1203] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Drew U+1e9C-F in Latin + Extended Additional (including capital ess-zet) + +2009-01-19 20:48 +0000 [r1202] Stevan_White: + + * FreeMono.sfd: Update ot Kayah Li from Daniel + Johnson + +2009-01-18 16:49 +0000 [r1201] Stevan_White: + + * AUTHORS, CREDITS: Daniel Johnson's + latest contributions + +2009-01-18 14:33 +0000 [r1200] Stevan_White: + + * FreeSerif.sfd: Coptic: Laula to be same height + as Phi Psi (higher than other letters). Dei and dei also to be + higher letters, adjusted widths too. + +2009-01-18 14:25 +0000 [r1199] Stevan_White: + + * FreeSans.sfd: Unified Canadian Aboriginal + Syllabics: moved the non-Unicode letter part glyphs ucas.ring + ucas.horizline ucas.shortvert ucas.righttack ucas.lefttack to the + Private Use area 59664-59668 Technique was to edit the SFD file + directly: It seems the encoding slot for the glyph is the first + field of the "Encoding:" line for the character. + +2009-01-18 13:28 +0000 [r1198] Stevan_White: + + * FreeMono.sfd: Cherokee: improvements from D. + Johnsaon + +2009-01-18 12:34 +0000 [r1197] Stevan_White: + + * FreeSerif.sfd: Latin: kerning + +2009-01-17 18:58 +0000 [r1196] Stevan_White: + + * FreeSerif.sfd: Cyrillic: kerning + +2009-01-17 15:26 +0000 [r1195] Stevan_White: + + * FreeSerif.sfd: Re-linked Ezh/Yogh and re-made + reversed Ezh + +2009-01-16 21:28 +0000 [r1194] Stevan_White: + + * FreeSerif.sfd: Fiddled with Coptic glyphs: + Longer tail on Shei, less droopy Alfa. Made Armenian Aiw to be a + link to Phi (on Daniel Johnson's advice ) + +2009-01-16 08:01 +0000 [r1193] Stevan_White: + + * tools/ranges.py: corrected Unified Canadian + Aboriginal Syllabics + +2009-01-16 07:44 +0000 [r1192] Stevan_White: + + * FreeMono.sfd: Kayah Li by Daniel Johnson + +2009-01-16 07:36 +0000 [r1190-1191] Stevan_White: + + * FreeMono.sfd: removed hints + + * FreeMono.sfd: Cherokee, by Daniel Johnson + +2009-01-16 07:27 +0000 [r1189] Stevan_White: + + * FreeSerif.sfd: Made references of some + Armenian punctuation, Made primereversed to be really the reverse + of prime. + +2009-01-13 21:43 +0000 [r1187-1188] Stevan_White: + + * FreeSans.sfd: named some Armenian letters + + * FreeSerif.sfd: Armenian range by Daniel + Johnson, with ligatures. + +2009-01-13 08:43 +0000 [r1186] Stevan_White: + + * README: GPL 2 -> GPL 3 + +2009-01-12 20:35 +0000 [r1185] Stevan_White: + + * FreeSerif.sfd: Coptic: more kerning + +2009-01-12 09:06 +0000 [r1184] Stevan_White: + + * FreeSerif.sfd: Coptic: Raised top of laula + above common top, as it appears in most other fonts.Makes it + easier to distinguish from alfa. A little more space around Iauda + and iauda. Kerned Dei. + +2009-01-11 22:30 +0000 [r1183] Stevan_White: + + * FreeSerif.sfd: Coptic: Made capital Alpha is + distinct in printed form. Made more angular vida with flattened + top and bottom. Made small hori more curvy. + +2009-01-11 14:06 +0000 [r1182] Stevan_White: + + * FreeSerif.sfd: Greek: made archaic letters + u+0370-3 (understand are used for old numbering) Coptic: more + fiddling with Hori, made Kapa much wider reduced width of small + letter straight stems to match small letters in Latin kerning for + capitals + +2009-01-11 00:39 +0000 [r1181] Stevan_White: + + * FreeSerif.sfd: Revised Coptic. Added a few + dialectic letters and kai symbol Removed many "ear" serifs, + preferring a slashing continuation of long decenders and + diagonals as in some manuscripts Made Kai and kai not to go below + baseline Made Psi a little broader Made small khei distinct from + cap, Revised Hori and hori. Some of this toward + https://savannah.gnu.org/bugs/?25289 + +2009-01-08 22:23 +0000 [r1180] Stevan_White: + + * FreeSerif.sfd: Various alterations to Coptic: + Re-worked K and M, added kern table. + +2009-01-07 10:03 +0000 [r1179] Stevan_White: + + * FreeSans.sfd: Daniel Johnson's fix of TT + reference transformation bug in Unified Canadian Aboriginal + Syllabics, + +2009-01-06 22:27 +0000 [r1178] Stevan_White: + + * FreeSans.sfd: Unified Canadian Aboriginal + Syllabics range, courtesy of Daniel Johnson. + +2009-01-04 16:12 +0000 [r1176] Stevan_White: + + * ChangeLog: copyright dates 2009 + +2009-01-04 16:08 +0000 [r1175] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added 2009 to + copyright dates + +2009-01-04 15:59 +0000 [r1173-1174] Stevan_White: + + * ChangeLog: changes since last release + + * AUTHORS, CREDITS: Removed + Glagolitic range author + +2009-01-04 15:27 +0000 [r1172] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerifBold.sfd: Added some TrueType names + +2009-01-01 20:47 +0000 [r1171] Stevan_White: + + * FreeSerif.sfd: Removde Glagolitic range, since + have not (yet) received OK from author. Added some TrueType Names + +2008-12-31 13:06 +0000 [r1170] Stevan_White: + + * COPYING: Updated license to GPL v3 + +2008-12-30 21:34 +0000 [r1169] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Oblique versions of + Daniel Johnson's Cherokee. + +2008-12-30 20:42 +0000 [r1168] Stevan_White: + + * FreeSerifBold.sfd: Cherokee Bold range from + Daniel Johnson. + +2008-12-27 16:43 +0000 [r1165-1167] Stevan_White: + + * tools/isMonoMono.py: 900 EM -> 800 + + * FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Made glyphs to lie + between -200 and 800 EM + + * tools/isMonoMono.py: check that glyphs lie in + vertical bounding boxes + +2008-12-27 14:46 +0000 [r1164] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Extensible bracket characters + didn't exactly line up. Fixed. Mono: a couple of glyphs had + gotten out of their bounding boxes again. + +2008-12-26 22:41 +0000 [r1162] Stevan_White: + + * ChangeLog: last two day's changes + +2008-12-26 22:36 +0000 [r1160-1161] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Final pre-release + cleanup + + * notes/maintenance.txt: nongnu -> gnu + +2008-12-26 20:48 +0000 [r1159] Stevan_White: + + * FreeSerif.sfd: Buginese vowel u was misnamed + +2008-12-26 20:36 +0000 [r1158] Stevan_White: + + * FreeMono.sfd: Yatcyrillic somehow was a mark + character ... fixed + +2008-12-26 20:27 +0000 [r1157] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Had to un-link references + in Sans: uni02B2, uni02B5 SansOblique: uni0363 because validation + of the TTF file said the glyph "is drawn in wrong direction" I + would have preferred to have understand this... + +2008-12-26 20:23 +0000 [r1156] Stevan_White: + + * sfd/Makefile: Added quick test for FontForge + version. + +2008-12-26 19:52 +0000 [r1155] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Removed kerning + tables (?? what were they doing here anyway??) + +2008-12-26 19:43 +0000 [r1154] Stevan_White: + + * tools/ranges.py: some changes to explanatory text + +2008-12-26 18:54 +0000 [r1153] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Kerning tables for Thai. + Handles one common case: short letter followed by a tall one with + an overhang to the left. + +2008-12-26 12:33 +0000 [r1152] Stevan_White: + + * INSTALL: small corrections: better detail about + Windows install + +2008-12-26 12:29 +0000 [r1151] Stevan_White: + + * AUTHORS, CREDITS: added most recent + authors, synched up + +2008-12-25 20:47 +0000 [r1150] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd: More putzing with kerning + tables + +2008-12-25 14:43 +0000 [r1149] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Copied kerning classes + Serif -> SerifBold SerifItalic -> SerifBoldItalic Sans -> + SansOblique SansBold SansBoldOblique Some associated naming of + characters, etc + +2008-12-25 12:51 +0000 [r1146-1148] Stevan_White: + + * AUTHORS, CREDITS, + README: formatting + + * ChangeLog: brought up to date + + * notes/maintenance.txt: added new release + proceedures + +2008-12-25 11:54 +0000 [r1145] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Additions and correction in + Spacing Modifier letters and IPA Extensions + +2008-12-23 21:35 +0000 [r1144] Stevan_White: + + * FreeSerif.sfd: Applied patch to Cherokee range + +2008-12-20 15:57 +0000 [r1143] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Fixed kern classes that end in + space (crashes FontForge) + +2008-12-20 15:38 +0000 [r1142] Stevan_White: + + * FreeSerifItalic.sfd: kerning + +2008-12-20 12:17 +0000 [r1141] Stevan_White: + + * FreeSerif.sfd: kerning + +2008-12-19 00:55 +0000 [r1140] Stevan_White: + + * FreeSerifItalic.sfd: kerning + +2008-12-19 00:06 +0000 [r1139] Stevan_White: + + * FreeSerif.sfd: kerning Some adjustments to + Glagolitc spacing, mark positioning + +2008-12-17 23:08 +0000 [r1138] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: kerning + +2008-12-16 23:36 +0000 [r1137] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: kerning + +2008-12-11 22:27 +0000 [r1136] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: kerning + +2008-12-10 11:03 +0000 [r1135] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: kerning + +2008-12-10 09:34 +0000 [r1134] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: kerning + +2008-12-08 23:01 +0000 [r1133] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: kerning + +2008-12-08 09:52 +0000 [r1132] Stevan_White: + + * FreeSansOblique.sfd: Slanted small final + sigma. remedies bug #24993: U+03C2 "Greek small letter final + sigma" not slanted in Free Sans Oblique + https://savannah.gnu.org/bugs/index.php?24993 + +2008-12-07 19:30 +0000 [r1131] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: kerning, etc + +2008-12-06 23:42 +0000 [r1130] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: kerning + +2008-12-06 13:48 +0000 [r1129] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: kerning Tweek in Sans + having to do with addition of Latin Extended + +2008-12-05 20:52 +0000 [r1128] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Tweeks to Latin + Extended Additional + +2008-12-05 20:34 +0000 [r1127] Stevan_White: + + * FreeSansBoldOblique.sfd: Added Latin Extended + Additional range + +2008-12-05 10:35 +0000 [r1126] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Extra space at end of + kern class names has bad effect on FornForge script that try to + run through kern classes. Some FontForge call corrupts memory. + Got rid of extra space. + +2008-12-02 21:12 +0000 [r1125] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Replaced U+0387 GREEK + ANO TELEIA with top dot of colon. See bug #24987: U+0387 GREEK + ANO TELEIA too low https://savannah.gnu.org/bugs/index.php?24987 + +2008-12-02 09:25 +0000 [r1124] Stevan_White: + + * FreeSerif.sfd: more kerning in Cyrillic (broke + into two tables of classes) + +2008-12-01 20:22 +0000 [r1122-1123] Stevan_White: + + * FreeSerif.sfd: tweeks to kernin + + * FreeSerifBoldItalic.sfd: kerning + +2008-11-30 21:17 +0000 [r1121] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Kerning for Latin and + Cyrillic fairly complete in Serif faces. Complete in sense that + it looks pretty good under Pango for English French German + Spanish Polish Czech Latvian But have not done Vietnamese (will + require many more entries). I adjust roman and italic, then copy + tables by hand to bold and bolditalic. Misgiving: bolditalic is + much too crammed Overall, I may have over-kerned. (A difficult + temptation to master.) + +2008-11-30 15:06 +0000 [r1120] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: kerning + +2008-11-30 13:43 +0000 [r1119] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd: kerning In Serif, modified + widths of some extended latin glyphs + +2008-11-29 13:44 +0000 [r1118] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: kerning + +2008-11-29 11:56 +0000 [r1117] Stevan_White: + + * FreeSerif.sfd: Broke Latin kerning subtable + into four, hoping it will be easier to understand and maintain. + +2008-11-29 11:26 +0000 [r1116] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: kerning + +2008-11-29 00:38 +0000 [r1115] Stevan_White: + + * FreeSansOblique.sfd: kerning + +2008-11-28 23:43 +0000 [r1114] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd: kerninig + +2008-11-28 21:54 +0000 [r1112-1113] Stevan_White: + + * FreeSans.sfd: kerning + + * FreeSans.sfd, + FreeSerif.sfd: more kerning; made guillemot + narrower + +2008-11-28 10:26 +0000 [r1111] Stevan_White: + + * FreeSans.sfd: kerning + +2008-11-28 00:11 +0000 [r1109-1110] Stevan_White: + + * FreeSansOblique.sfd, + FreeSerif.sfd: previous commit was incomplete + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Adjusted width of single + quotes (and apostrophe) to be "punctuation width" More fiddling + with kerning. + +2008-11-27 22:37 +0000 [r1108] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: much fiddling with kerning + +2008-11-26 19:44 +0000 [r1107] Stevan_White: + + * FreeSerifBold.sfd: Basic kerning, named main + Cyrillic letters + +2008-11-26 18:41 +0000 [r1106] Stevan_White: + + * FreeSerifItalic.sfd: Basic Cyrillic kerning + +2008-11-26 07:03 +0000 [r1105] Stevan_White: + + * FreeSerif.sfd: further tweeks to Cyrillic + kerning + +2008-11-26 06:58 +0000 [r1104] Stevan_White: + + * FreeSerif.sfd: Tweeks to Cyrillic kerning + +2008-11-26 00:32 +0000 [r1103] Stevan_White: + + * FreeSerifItalic.sfd, + sfd/Makefile, FreeSerif.sfd, + FreeSerifBold.sfd: Much fiddling with kerning, + tables, and generating fonts whose kerning tables work with + OpenOffice. + +2008-11-25 23:59 +0000 [r1102] Stevan_White: + + * tools/GenerateTrueType: Made to include old-style + kerning Converted to Python + +2008-11-24 08:11 +0000 [r1100-1101] Stevan_White: + + * FreeSerif.sfd: Prev commit to validate + + * FreeSerif.sfd: regularized padding in + Miscellaneous symbols. At least within related ranges tried to + make similar. + +2008-11-23 20:21 +0000 [r1097-1099] Stevan_White: + + * tools/ranges/__init__.py (added), + tools/ranges/OpenType.py (added), + tools/ranges (added): meant to add these before + moving the ranges.py file + + * tools/range_report (removed), + tools/range_report.py (added): preferred to keep + the file ending + + * tools/range_report (added): Starting to break out + different functionalities of this large script + +2008-11-23 15:38 +0000 [r1096] Stevan_White: + + * FreeSerif.sfd: Completed Miscellaneous + Symbols, with some drawings from George Douros' Unicode Symbols, + and some of mine. + +2008-11-23 14:21 +0000 [r1095] Stevan_White: + + * FreeSerif.sfd: Filled out Miscellaneous + Symbols. Used George Douros' Unicode font. + +2008-11-23 12:57 +0000 [r1094] Stevan_White: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Replaced Greek Exteded + psili and dasia with scaled versions of the "bent quote" mark. I + think it's distinctive enough, but not so silly. Remedies bug + #22997: Mono: Greek Extended psili is ugly + https://savannah.gnu.org/bugs/?22997 + +2008-11-23 00:47 +0000 [r1093] Stevan_White: + + * FreeSerif.sfd: Made some recycling symbols + +2008-11-22 23:07 +0000 [r1092] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Finished with Hebrew + Pointed letters in all faces. + +2008-11-22 16:36 +0000 [r1091] Stevan_White: + + * FreeSans.sfd: Fiddled with Hebrew Pointed + letters + +2008-11-22 15:45 +0000 [r1090] Stevan_White: + + * FreeSerifItalic.sfd: Marks for Vietnamese + +2008-11-22 10:32 +0000 [r1089] Stevan_White: + + * CREDITS: fixed some links having to do with Omega, + intlfonts + +2008-11-22 09:32 +0000 [r1088] Stevan_White: + + * CREDITS: Fixed/removed broken links + +2008-11-21 23:53 +0000 [r1087] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Letter pe had strange thick + middle ear that looked awful. lamed had ben bumped at some point. + Fixed. Adjusted some of the points. + +2008-11-21 22:54 +0000 [r1086] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: repairs to Pointed Hebrew + +2008-11-21 21:29 +0000 [r1085] Stevan_White: + + * FreeSerif.sfd: Numeral line positioning marks + for Gothic + +2008-11-21 10:17 +0000 [r1084] Stevan_White: + + * FreeSerifItalic.sfd: Added Combining Marks for + Symbols (some question about obliqueness of some symbols) Cleaned + up some empty glyphs in Pointed Hebrew. + +2008-11-20 21:00 +0000 [r1083] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Provided Hebrew pointed + letters, with lookups, for all Serif faces. + +2008-11-19 22:30 +0000 [r1082] Stevan_White: + + * FreeSerifBoldItalic.sfd: renamed Hebrew + lookups + +2008-11-19 22:12 +0000 [r1081] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Completed Hebrew in Bold + faces. + +2008-11-19 00:04 +0000 [r1080] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd: More tweeks to Hebrew points + +2008-11-18 23:44 +0000 [r1079] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd: Adjustments corrections and + additions to Hebrew points + +2008-11-18 20:56 +0000 [r1078] Stevan_White: + + * FreeSansBold.sfd: Cleaned out a lot of + ridiculous kernings + +2008-11-16 23:39 +0000 [r1077] Stevan_White: + + * FreeSansBoldOblique.sfd: fiddled with Armenian + ligatures + +2008-11-16 23:26 +0000 [r1076] Stevan_White: + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Added Armenian (with + ligatures) to BoldOblique Fiddled with character spacing + +2008-11-16 22:56 +0000 [r1075] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added U+01f9 and + paragraph end marker to Georgian Fiddled with Armenian ligatures + +2008-11-15 13:36 +0000 [r1074] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Added Georgian turned + gan 10F9 (because it was easy) + +2008-11-15 13:28 +0000 [r1073] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Another pass at + letter spacing in Cyrillic. Also went through ancient letters. + Added Georgian paragraph separator 10FB + +2008-11-15 10:11 +0000 [r1072] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Re-worked letter + spacing through modern Cyrillic range. + +2008-11-15 00:05 +0000 [r1071] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd: Letter spacing + +2008-11-14 22:48 +0000 [r1070] Stevan_White: + + * FreeSerif.sfd: Added several characters to + Cyrillic Extended-B + +2008-11-14 09:56 +0000 [r1069] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Made Cyrillic hooked + e U+04BC-F to look less goofy. + +2008-11-14 09:36 +0000 [r1068] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Based on assertion on + Pechatnyj Dvor's web site, Cyrillic Fita U+0472-3 and "Barred O" + U+04E8-9 are different styles the same letter, and the fact that + the tilde in the O never looked good in Sans, I made them all + barred O's. + +2008-11-14 09:32 +0000 [r1067] Stevan_White: + + * FreeSerif.sfd: Added Cyrillic Yn, yn + (U+a65e-f) + +2008-11-14 08:30 +0000 [r1066] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerifBold.sfd: Synced up Cyrillic and + Combining Diacritics ranges, Couple of tweeks in Gujarati to make + TT validate + +2008-11-13 23:44 +0000 [r1065] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Changes to older Cyrillic + letters, in response to further information. Made omegas, omegas + with titlo, and OT to all be of the same size and shape in Serif. + Un-linked Cyrillic Psi and psi from Greek, made squarer versions. + Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f + . Experimenting with mark positioning for Cyrillic + +2008-11-12 22:53 +0000 [r1064] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Strove to make Euro + look more like the EC logo design, while making glyph fit better + with the design of its face. See bug #3576: Euro design + https://savannah.gnu.org/bugs/?23576 + +2008-11-12 21:33 +0000 [r1063] Stevan_White: + + * FreeSans.sfd: Tweeks to previous commit + +2008-11-12 21:10 +0000 [r1062] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Adjustments mostly to GPOS + tables having to do with Vietnamese marks. The WAZU Vietnamese + test page looks pretty good in Sans now. Still not thrilled with + below-dot when it appears with a mark over e.g. U+0102. Pango + positions one or the other but not both. + +2008-11-12 00:04 +0000 [r1061] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Extensive + modification of GPOS lookup tables for mark positioning. I think + they're now all functional (except styled Mono faces have none). + Also added lots of marks to faces that didn't have them, and also + fiddled with Combining Diacritical Marks. + +2008-11-10 19:53 +0000 [r1060] Stevan_White: + + * FreeSerif.sfd: Made one combining mark really + combining + +2008-11-10 19:49 +0000 [r1059] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made a few combining + characters to be zero-width in Mono, Added them to other styles. + +2008-11-09 23:49 +0000 [r1058] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Figured out why below marks + in Thai weren't working in the lowest letters. I think Pango and + other font renderers ignore 'blwm'. 'mark' works though. + +2008-11-09 23:21 +0000 [r1057] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Tweeks to Thai marks + +2008-11-09 22:56 +0000 [r1056] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Several bugfixes in Thai, + mostly having to do with mark placement and ligatures. + Implemented ru-saraaa and lu-saraaa with ligatures. + +2008-11-09 21:21 +0000 [r1055] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: added and named + dottedcircle (used by Pango to render combining mark base) + +2008-11-09 12:42 +0000 [r1054] Stevan_White: + + * FreeSerif.sfd: More tweeks to Coptic + +2008-11-09 12:22 +0000 [r1053] Stevan_White: + + * FreeSerif.sfd: Tweeks to Coptic, after viewing + more papyrus samples and web pages. + +2008-11-09 10:41 +0000 [r1052] Stevan_White: + + * FreeSerif.sfd: Weight of Coptic small letters + made to match that of Latin and Greek ones. + +2008-11-08 20:05 +0000 [r1051] Stevan_White: + + * FreeSerif.sfd: Coptic tweek spacing + +2008-11-08 19:22 +0000 [r1050] Stevan_White: + + * FreeSerif.sfd: Made Coptic to comply better + with http://www.wazu.jp/gallery/Test_Coptic.html Made a flourish + at foot of letters with long diagonal. + +2008-11-08 15:51 +0000 [r1049] Stevan_White: + + * FreeSerif.sfd: Coptic: punctuation marks were + in the wrong row. + +2008-11-08 15:38 +0000 [r1048] Stevan_White: + + * FreeSerif.sfd: More tweeks to Coptic; put in a + mark lookup table. Note: for small letters I made scaled + references to captials. Results in those letters looking quite + light next to the capitals and next to small Latin letters. Also, + there are a few variant forms for capitals (Unicode samples don't + show this). It would be good to re-work + +2008-11-08 13:27 +0000 [r1047] Stevan_White: + + * FreeSerif.sfd: Added Coptic alphabet in + u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by me, based on + Unicode samples, TeX font copte, and scans at WikiPedia. + +2008-11-07 08:12 +0000 [r1046] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Further tweeks to dieresis + in Greek and Cyrillic + +2008-11-07 07:41 +0000 [r1045] Stevan_White: + + * FreeSerif.sfd: replaced Greek I dieresis with + references, tweeked height of dieresis. + +2008-11-04 08:42 +0000 [r1044] Stevan_White: + + * FreeSerif.sfd: Added a few Cyrillic Extended-B + letters seen in web pages while looking for Glagolitic text. + +2008-11-04 00:29 +0000 [r1042-1043] Stevan_White: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Added a few old Cyrillic + characters. + + * FreeSerif.sfd: Several corrections and tweeks + to Glagolitic. Still missing six slots from Unicode, but don't + see them in the TeX fonts. On the other hand, several on-line + Glagolitic pages (bibles etc) don't seem to use these. Maybe it's + OK as-is. + +2008-11-03 09:53 +0000 [r1041] Stevan_White: + + * FreeSerif.sfd: Added lowercase range to + Glagolitic, as a facile scaling of the uppercase. + +2008-11-03 09:50 +0000 [r1040] Stevan_White: + + * FreeSerif.sfd: Added letter to Glagolitic, + scaled range. + +2008-11-02 22:59 +0000 [r1039] Stevan_White: + + * FreeSerif.sfd: Replaced fraktur bold from + Mathematical Alphanumeric Symbols with that from TX Fonts by + Young Ryu. One concern: letter k is damaged (in both medium and + bold). I just hacked something up. Added Glagolitic "round type" + font (Croation capitols only) from the collection of Croatian + fonts for LaTeX by Darko Zubrinić + ftp://ftp.dante.de/tex-archive/languages/croatian/ + http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf Several + letters are missing besides the small letters. + +2008-11-02 09:06 +0000 [r1038] Stevan_White: + + * FreeSerifBoldItalic.sfd: A couple of Thai + references got obliqued twice. + +2008-11-02 08:57 +0000 [r1037] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: By popular demand, removed + 'ears' from Greek Upsilon and Psi. Copied resulting glyphs to + Serif Mathematical Alphanumeric Symbols. + +2008-11-02 00:49 +0000 [r1036] Stevan_White: + + * FreeSerif.sfd: Some pointwise cleanup of main + Tamil range + +2008-11-01 23:20 +0000 [r1035] Stevan_White: + + * FreeSerif.sfd: Tried some things with lookups. + Didn't make much headway. + +2008-11-01 22:34 +0000 [r1033-1034] Stevan_White: + + * FreeMono.sfd: somehow made a letter with wrong + width + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Added similar lookups and + ligatures to Thai ranges. + +2008-11-01 18:34 +0000 [r1032] Stevan_White: + + * FreeSerif.sfd: Lookups now work no worse than + those for other Thai fonts, at least in Pango. Still perplexed by + behaviour of "Required" lookups. + +2008-11-01 15:44 +0000 [r1031] Stevan_White: + + * FreeSerif.sfd: For Thai, made ligatures and + lookups for yoying and thothan combined with a lower vowel. These + work well. Attempted looksups for saraaa with ru and lu, and for + saraam. Not working. + +2008-10-31 23:54 +0000 [r1030] Stevan_White: + + * FreeSans.sfd: Cleaned up a few of the Bengali + ligatures + +2008-10-31 23:46 +0000 [r1029] Stevan_White: + + * FreeSerifBold.sfd: Tweek Thai + +2008-10-31 22:48 +0000 [r1028] Stevan_White: + + * FreeSerif.sfd: Fixed ligatures and mark + positioning for Hanunóo. Problem with ligatures: Gnome pango + doesn't do 'rlig', only 'liga' + +2008-10-31 21:27 +0000 [r1027] Stevan_White: + + * FreeSerifItalic.sfd: Changed lookup table + scripts for Devanagari and Bengali. Find Problems -> ATT found + several problems showing lookups acting on glyphs that weren't + listed in the script ranges, including dev2, bng2 (why not deva + and beng, I don't know). danda and doubledanda of Devanagari I + understand are to be shared among Indic scripts. So included bng2 + and dev2 in the 'aalt' table for those. The 'init' and 'half' + tables for Bengali made active for bng2. The 'locl' table for + Bengali didn't do anything I could see: It mapped the Devanagari + danda to itself, and the doubledanda to itself. Deleted. + +2008-10-31 20:10 +0000 [r1026] Stevan_White: + + * FreeSerifItalic.sfd: Cleaned up some kern + tables. adjustments of under 5 EM are invisible. Some others I + just didn't like. Some were putting a letter beneath another, + with is wrong. + +2008-10-31 19:39 +0000 [r1025] Stevan_White: + + * FreeSerifBoldItalic.sfd: Added Thai + +2008-10-31 19:02 +0000 [r1024] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBold.sfd: Changes to mark positioning + lookups, esp. in Italic. Widened numerals in Bold + +2008-10-27 19:00 +0000 [r1023] Stevan_White: + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Tweeks regarding + Armenian and lookups + +2008-10-27 18:48 +0000 [r1022] Stevan_White: + + * FreeSansBold.sfd: Added Armenian ligatures + FB13-FB17 with lookups Also made a historical ligature ('hlig') + table for u+0587. Toward bug #15183: missing characters from + Armenian range (FreeSans, Bold) + https://savannah.gnu.org/bugs/index.php?15183 + +2008-10-27 09:17 +0000 [r1021] Stevan_White: + + * FreeSansOblique.sfd: Added Armenian ligatures, + lookups. Cleaned up contours. + +2008-10-26 23:45 +0000 [r1020] Stevan_White: + + * FreeSans.sfd: Added 5 Armenian ligatures to + U+FB13 – FB17, and made corresponding 'liga' lookup. Found + there one ligature u+0587 that according to + http://en.wikipedia.org/wiki/Armenian_alphabet "in new + orthography the և character is not a typographical ligature + anymore, and must never be treated as such. It is a distinct + letter and has its place in the new alphabetic sequence." So + moved this out of the 'liga' lookup and into a new 'hlig' lookup. + +2008-10-26 22:26 +0000 [r1019] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Lots of improvements to + Thai. Completely revised letter spacing in Italic, and fiddled + with combining marks in all. Still aren't working quite right, + especially in Italic. Still need to work over digits (in Bold + they aren't even bold yet) + +2008-10-26 14:21 +0000 [r1018] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Bold Thai : added + (painstakingly) constructed glyphs, lookups roman Thai: tweeks + Italic Thai: tweeks (Note this still has multiple problems) + +2008-10-25 08:26 +0000 [r1017] Stevan_White: + + * FreeSerif.sfd: WAZU says + http://www.wazu.jp/gallery/Fonts_Hanunoo.html MPH 2B Damase + doesn't support the consonant-vowel ligatures necessary to render + Buhid writing. OK, so I made 'mark' lookups for combining marks + and a bunch of ligatures in an 'rlig' lookup. The latter still + not working: don't know why. Made page to match the example of + the combining forms at + http://www.omniglot.com/writing/hanunoo.htm + +2008-10-24 21:56 +0000 [r1016] Stevan_White: + + * FreeSerif.sfd: Removed some marks from + Mathematical Alphanumeric Symbols + +2008-10-24 08:13 +0000 [r1015] Stevan_White: + + * FreeSerif.sfd: Tweeked combining marks for + Vietnamese. Made to satisfy WAZU JAPAN Comprehensive Unicode Test + Page for Vietnamese / Quốc Ngữ + http://www.wazu.jp/gallery/Test_Vietnamese.html Could still use + some tweeking... + +2008-10-24 07:25 +0000 [r1014] Stevan_White: + + * FreeSerif.sfd: Added marks for composition of + Vietnamese + +2008-10-23 22:03 +0000 [r1013] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Put "below" combining mark on + lots of vowels and derivatives, for Vietnamese. Named a bunch of + composit Latin, expecting to make substitutions. + +2008-10-23 20:14 +0000 [r1012] Stevan_White: + + * FreeSerif.sfd: Thai spacing alterations based + on advice of a native speaker. + +2008-10-22 06:30 +0000 [r1011] Stevan_White: + + * FreeSerif.sfd: re-named Thai lookups according + to order + +2008-10-21 21:28 +0000 [r1010] Stevan_White: + + * FreeSans.sfd: Cleanup of glyphs in Gujarati, + Devanagari. Note: Serious problem with Sans GPOS abvm in + Devanagari "'abvm' Above Base Mark in Devanagari subtable" + "gujr-0" But all the characters that list gujr-0 are in Gujarati. + Not sure how this got broken or how to fix it. + +2008-10-21 19:32 +0000 [r1009] Stevan_White: + + * FreeSerif.sfd: Fiddled with Thai mark + positioning: passes my tests now OK. Made a few more references + in Math Symbols; more regularization of stroke. + +2008-10-21 09:01 +0000 [r1008] Stevan_White: + + * FreeSerif.sfd: Added mark class for Vietnamese + "horn" Several references made in General Punctuation, Arrows + +2008-10-20 22:47 +0000 [r1007] Stevan_White: + + * FreeMono.sfd: added some Combining Diacritical + Marks + +2008-10-20 18:41 +0000 [r1006] Stevan_White: + + * FreeSerif.sfd: Made some references from + serifed Latin capitals to Greek counterparts. + +2008-10-20 18:24 +0000 [r1005] Stevan_White: + + * FreeSerif.sfd: Made a few repeated glyphs into + references in Musical Symbols + +2008-10-20 17:33 +0000 [r1004] Stevan_White: + + * tools/ranges.py, tools/validate.py: + tweeked some ranges, format of output + +2008-10-19 19:36 +0000 [r1003] Stevan_White: + + * FreeSerif.sfd: Moved several glypns from + Mathematical Alphanumeric Symbols to Letterlike Symbols. Couple + tweeks in Mathematical Symbols. + +2008-10-19 18:30 +0000 [r1002] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Fiddling with Mathematical + Symbols. In Serif, trying to make stroke width more consistent. + +2008-10-19 16:47 +0000 [r1001] Stevan_White: + + * FreeMono.sfd: Tweek + +2008-10-19 16:44 +0000 [r1000] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Added some Greek + symbols in Mono and Sans to make a little more regular and + correspond better with TeX. Tweek of serif. + +2008-10-19 14:47 +0000 [r999] Stevan_White: + + * FreeSansBold.sfd: a few more improvements. + (One problem with the Mathematical Alphanumeric area is, one must + remember to change it any time another face is altered...) + +2008-10-19 14:41 +0000 [r998] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerifBold.sfd: Several improvements and + additions to Sans faces (mostly in Greek) from experience of + pasting into FreeSerif Mathematical Alphanumeric Symbols. + +2008-10-19 14:37 +0000 [r997] Stevan_White: + + * FreeSerif.sfd: Replaced most of Mathematical + Alphanumeric Symbols roman italic bold (latin and greek) gothic + italic bold (latin and greek) typewriter and numerals with glyphs + from FreeFont. These were scaled to uniform height. Remains: + Blackboard Bold, Fraktur, Calligraphic, Script + +2008-10-19 12:03 +0000 [r996] Stevan_White: + + * FreeSerif.sfd: Tidied lookup table names for + Malayalam + +2008-10-19 11:49 +0000 [r995] Stevan_White: + + * FreeSerif.sfd: Applied Malayalam patch from + Hiran Venugopalan + +2008-10-19 10:27 +0000 [r993-994] Stevan_White: + + * FreeMono.sfd: Added/corrected many + Mathematical Symbols + + * FreeSansOblique.sfd: more IPA + +2008-10-18 11:20 +0000 [r992] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Made lots more IPA + and Phonetic Extensions Note: fontforge is reporting an error in + a few glyphs made by scaling another, that the glyphs are drawn + in the wrong direction--only in TrueType though. Suspect a + FontForge bug. + +2008-10-17 23:10 +0000 [r991] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Added several + Combining Diacritical Marks + +2008-10-17 20:33 +0000 [r990] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Made several Spacing + Modifier Letters, Combining Diacritical Marks, and IPA and + Phonetic Extensions + +2008-10-17 06:40 +0000 [r989] Stevan_White: + + * CREDITS: Hiran Venugopalan of Swathanthra + Malayalam Computing George Douros Daniel Johnson + +2008-10-16 20:53 +0000 [r988] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Added some Superscripts and + Subscripts + +2008-10-16 20:01 +0000 [r987] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Finished off + Superscripts and subscripts + +2008-10-16 19:06 +0000 [r986] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Completed General + Punctuation for Mono faces + +2008-10-16 08:08 +0000 [r985] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Added some General + Punctuation + +2008-10-16 06:48 +0000 [r983-984] Stevan_White: + + * tools/ranges.py: un-grayed totals rows + + * tools/ranges.py: Fiddled Cyrillic made output + prettier + +2008-10-15 18:28 +0000 [r982] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: more Letterlike + Symbols, Currency Symbols + +2008-10-15 08:49 +0000 [r981] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Made some Combining + Diacritical Marks for Symbols, Letterlike Symbols + +2008-10-14 22:18 +0000 [r980] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Added some General + Punctuation + +2008-10-14 21:24 +0000 [r979] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Added double slanted + hyphen, made General Punctuaton Supplement like Serif's + +2008-10-14 21:03 +0000 [r977-978] Stevan_White: + + * FreeSansBoldOblique.sfd: Filled out Greek + Extended + + * FreeSerifItalic.sfd, + FreeMono.sfd: fixes to last 2 commits + +2008-10-14 19:51 +0000 [r976] Stevan_White: + + * FreeSerifItalic.sfd: Last character to General + Punctuation + +2008-10-14 19:43 +0000 [r975] Stevan_White: + + * FreeMono.sfd: Built some Enclosed + Alphanumerics (1-10) + +2008-10-14 07:26 +0000 [r974] Stevan_White: + + * FreeSerif.sfd: Copied in Daniel Johnson's + changes to Cherokee. + +2008-10-12 15:42 +0000 [r973] Stevan_White: + + * FreeSerif.sfd: Included Daniel Johnson's + Cherokee glyphs. + +2008-10-05 11:20 +0000 [r972] Stevan_White: + + * FreeMono.sfd: Further corrections to diaresis + in Cyrillic -- legibility in small sizes + +2008-10-05 10:43 +0000 [r971] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd: Regularized placement of + diaresis in Cyrillic + +2008-10-05 09:07 +0000 [r970] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added same set of + glyphs to Cyrillic Supplement + +2008-10-04 22:26 +0000 [r969] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Added some of the + easier letters from Cyrillic Supplement + +2008-10-04 20:27 +0000 [r968] Stevan_White: + + * FreeSerifItalic.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Finished high + Cyrillic range for MonoBold and MonoBoldOblique. (Remaining: + historic ranges, Cyrillic extensions) Tweeked others. + +2008-10-04 13:26 +0000 [r967] Stevan_White: + + * INSTALL: Added info about Adobe ATM + +2008-10-03 22:40 +0000 [r966] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMonoBold.sfd: Serif*Italic: Added last + Abkhazian letters to Cyrillic MonoBold: tweek + +2008-10-03 16:23 +0000 [r965] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoOblique.sfd: Mono: Some additions to + historic letters + +2008-10-03 14:55 +0000 [r964] Stevan_White: + + * FreeSerif.sfd: Added some punctuation and + combining numeric marks from Cyrillic Extended B + +2008-10-03 13:21 +0000 [r963] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeSerifBold.sfd: Various technical tweeks, + mostly concerning recent additions. Also did a bit more "Points + too close" and "irrelevant control points". Cyrillic millions + redesign meant could not maintain use of references for it. + +2008-10-03 11:03 +0000 [r962] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: More high Cyrillic Included + old Cyrillic millions combining mark in Sans, changed design in + Serif + +2008-10-02 21:44 +0000 [r961] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: More high Cyrillic + +2008-10-02 17:45 +0000 [r960] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoOblique.sfd: More high Cyrillic glyphs + +2008-10-02 08:55 +0000 [r959] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: More glyphs in high + Cyrillic. Remains only some whose form I'm unsure of in italic. + +2008-10-02 07:44 +0000 [r958] Stevan_White: + + * FreeSerifBoldItalic.sfd: More glyphs in higher + Cyrillic range + +2008-10-01 23:02 +0000 [r957] Stevan_White: + + * FreeSerifItalic.sfd: Same process of + tightening el, em, ge (but a P.S. to previous commit: also did + ya, ze for SerifBold. + +2008-10-01 22:54 +0000 [r956] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: BoldItalic: Tightened up + spacing on left of el, em, ge (could go farther, but it is partly + a problem with glyph design... + +2008-10-01 22:10 +0000 [r955] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: More additions to Cyrillic. + Finished SerifBold except for Nivkh additions. Used references on + number combining forms. + +2008-09-29 22:44 +0000 [r954] Stevan_White: + + * FreeSerif.sfd: Added four (obsolete) Chuvash + letters to Cyrillic Supplement - completing it. + +2008-09-29 21:32 +0000 [r953] Stevan_White: + + * FreeSerif.sfd: Greek adjustments Adjusted + spacing of kappa slightly Got rid of ears on Psi, following + similar request for Upsilon. + +2008-09-28 17:02 +0000 [r952] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Adding and fiddling with + Spacing Modifiers and Combining Diacriticals + +2008-09-28 10:30 +0000 [r951] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Revisions of several + Combining Diacritical marks + +2008-09-28 10:25 +0000 [r950] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: More Combining + Diacriticals + +2008-09-28 08:18 +0000 [r949] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Still more Spacing + Modifiers and Combining Diacriticals + +2008-09-28 00:10 +0000 [r948] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: A few Combining + Diacriticals and Spacing Modifiers + +2008-09-27 23:45 +0000 [r947] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: MonoBoldOblique: + Primarily filling out Spacing Modifier Letters others: little + fixes found along the way + +2008-09-27 13:04 +0000 [r946] Stevan_White: + + * FreeSerif.sfd: Replaced Malayalam range with + that from Rachana_04 found on Swathanthra Malayalam Computing + project page http://savannah.nongnu.org/projects/smc/ Besides + scaling and converting to cubic, performed much clean-up of + glyphs, added an r2 character, and re-named a bunch of + characters. + +2008-09-22 22:06 +0000 [r945] Stevan_White: + + * tools/ranges.py: Corrections and additions to + several ranges, put extra row in table with character totals + +2008-09-22 21:41 +0000 [r944] Stevan_White: + + * FreeSerif.sfd: Filled in as much of Phonetic + Extensions as I could without artistic abilities. Note 1D48-9 are + not references due to apparent FontForge bug, that says scaled + references go in wrong direction. + +2008-09-22 19:20 +0000 [r943] Stevan_White: + + * FreeSerif.sfd: Cleaup of some Bengali glyphs. + Note many of the ligatures remain very very messy. + +2008-09-22 14:29 +0000 [r940-942] Stevan_White: + + * Makefile: made some lines quiet + + * sfd/Makefile: added more validations made to work + with GenerateOpenType + + * tools/GenerateOpenType: Replaced bash version with + Python + +2008-09-22 09:23 +0000 [r939] Stevan_White: + + * FreeSerif.sfd: Built two more easy Phonetic + Extensions + +2008-09-22 09:14 +0000 [r938] Stevan_White: + + * FreeSerif.sfd: Built some Phonetic Extensions + letters, those with middle tilde + +2008-09-21 20:46 +0000 [r937] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Added lots of Spacing + Modifier Letters and Combining Diacritical Marks. + +2008-09-21 15:34 +0000 [r936] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Wrote script to check + if glyph encodings were in stated ranges, fixed most + discrepancies. There were a bunch of incompletely deleted + characters in several faces. Sans: found several other problems + in the process Tamil Four slots labelled 0BDA-D have glyphs, not + in Unicode. also 0BE1 I think they are misplaced; added 0010 to + each of them Devanagari Slot labelled U+093B is not in + Unicode--can't find glyph: deleted likewise 094F (may have been + meant to be 0954) 0955, 0973-0976 0954 should be a combining + mark, but it appears on the wrong side of 0. 0971 was just + wrong--made into simple dot. 0972 is also wrong--made my own + Candra A. Gujarati Slots labelled 0AE4-5 are not in Unicode; seem + not to belong at all. Deleted. 2800 is a dup of 2790. Deleted + Serif: phillipine_double u1736 was misplaced A bunch of the Math + Alphanumeric symbols are empty in the standard, because they're + represented elsewhere. These should be deleted (TO DO) First need + to make style consistent with existing symbols. + +2008-09-21 11:41 +0000 [r935] Stevan_White: + + * FreeSerif.sfd: Applied patch from Daniel J + Remedies bug FreeSerif: Missing glyphs with palatal hook + https://savannah.gnu.org/bugs/index.php?24298 Adding several + letters to Phoenetic Extensions range U+1D80-BF + +2008-09-21 11:00 +0000 [r934] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made four characters + U+200C-F to be zero-width Remedy to bug #23593: Mono 0-width + chars: zero-width or space? + https://savannah.gnu.org/bugs/index.php?23593 + +2008-09-20 23:17 +0000 [r933] Stevan_White: + + * FreeSerif.sfd: Made Mahjong tiles to take up + less space using references Cleaned up several validation + problems + +2008-09-19 22:54 +0000 [r932] Stevan_White: + + * tools/checkGlyphNumbers.py: included other Private + Use Ranges + +2008-09-19 20:48 +0000 [r931] Stevan_White: + + * tools/checkGlyphNumbers.py (added): Added script + to check that glyph numbers match Unicode (with complication) + +2008-09-19 20:36 +0000 [r930] Stevan_White: + + * tools/ranges.py: corrected and simplified + calculation of whether OS/2 bit is set. Now works mostly + perfectly, except for some high Unicode ranges... + +2008-09-19 20:25 +0000 [r928-929] Stevan_White: + + * FreeSerif.sfd: Added several Hebrew Alphabetic + Presentation Forms (some easy ones), to make its coverage the + same as Serif Bold. + + * FreeSerifBold.sfd: Re-encoded. Deleted several + glyphs in Hebrew Alphabetic Presentation Forms that didn't + correspond valid Unicode + +2008-09-19 20:19 +0000 [r927] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeMonoBold.sfd: Ran script to find + mis-numbered glyphs. Several were simply typos, some offset by + one. + +2008-09-19 20:13 +0000 [r926] Stevan_White: + + * FreeSansOblique.sfd: Numerous cases of glyphs + in Private Use area incorrectly assigned Unicode numbers and + names. Gave all -1 for Unicode and named like "slot.XXXX". + +2008-09-19 09:51 +0000 [r921-925] Stevan_White: + + * tools/GenerateOpenType: Made to output old-style + kerning tables for Windows (FontForge complains though) + + * tools/GenerateTrueType: Made to hint before + instructing: FontForge bases TT instructions on hints although + hints are not put into TrueType fonts. + + * tools/hex_range.py: cosmetic tweek + + * tools/isMonoMono.py: re-worked to take a list of + files as input + + * tools/ranges.py: re-structured code and corrected + a few ranges + +2008-09-19 09:17 +0000 [r920] Stevan_White: + + * FreeSerif.sfd: Adapted Mahjong Tiles from + George Douros' Unicode Symbols font. + +2008-09-18 23:27 +0000 [r919] Stevan_White: + + * FreeSerif.sfd: Added Domino Tiles. Domino + outline is copied from George Douros' Unicode Symbols, but the + rest I preferred to do with references. + +2008-09-18 21:30 +0000 [r918] Stevan_White: + + * FreeSerif.sfd: Adapted Mathematical + Alphanumeric Symbols from George Douros' Unicode Symbols font. + +2008-09-18 21:02 +0000 [r917] Stevan_White: + + * FreeMonoBoldOblique.sfd: This one got away + from me--I don't know what I did. Looks like some small contour + edits. + +2008-09-18 20:58 +0000 [r915-916] Stevan_White: + + * FreeSansBoldOblique.sfd: Fixed one mis-numberd + character in Latin Extended-B + + * FreeSerifItalic.sfd, + FreeSerifBold.sfd: Fixed several mis-numbered + characters. + +2008-09-18 20:13 +0000 [r914] Stevan_White: + + * FreeSansBold.sfd: SansBold: one Georgian + letter with no name, one Zapf Dingbat was unnumbered ATT test + shows a bunch of problems with Gurmukhi and 'blwf' table indeed + shows those letters at 0x10000+ Sans names them like + uni0A30_uni0A4D.blwf: they are in range ECC6 to ED06 I meant to + move this range into Private Use in last release, and missed it. + So now it is moved, into same range as Sans. Both Sans and + SansBold in nukt table for Gurmukhi have duplicate entries for + uni0A15 uni0A3C. Deleted dups. + +2008-09-18 19:05 +0000 [r913] Stevan_White: + + * FreeMonoOblique.sfd: fixed a number of + Unassigned Code Points in Greek Extended + +2008-09-18 18:31 +0000 [r912] Stevan_White: + + * FreeSansOblique.sfd: mis-numbered Combining + Diacritics + +2008-09-18 18:24 +0000 [r911] Stevan_White: + + * FreeSansOblique.sfd: Several chars in Latin + Extended hadn't been named. One spurious letter in Letterlike + Symbols + +2008-09-16 19:37 +0000 [r910] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: Lots of additions: unless + otherwise noted, they are from George Duros' fonts Analecta, + Music, and Unicode (haven't got final confirmation of the + eligibility of these glyphs, so this is just for testing.) Added + some combining marks, fiddled a bit. In both Serif & Mono, tried + to get a key symbol characters to fit inside the key combining + mark Serif Got rid of ears on Upsilon Added: Gothic Western & + Byzantine Musical Symbols Misc Symbols, Misc Technical Symbols + (also drew many myself) Supplemental Symbols and Arrows Mono + Added: lotsa Misc Technical Symbols OCR Symbols drew many + Supplemental Symbols and Arrows, Misc Technical Sans Added + Phoenecian Made a few Letterlike Symbols; Made Re and Im to be + sans-serif. + +2008-09-11 20:49 +0000 [r908] Stevan_White: + + * ChangeLog: changes since June + +2008-09-11 20:42 +0000 [r907] Stevan_White: + + * FreeSerif.sfd: Removed pointless entries from + Latin kern table Tidied points in Sinhala + +2008-09-07 21:47 +0000 [r906] Stevan_White: + + * FreeSerif.sfd: Tidied up Tamil ligatures + EEA8-EEAB to fix TT build warning "MonotonicFindAlong: Never + found our spline." + +2008-09-07 21:07 +0000 [r905] Stevan_White: + + * FreeSerifBoldItalic.sfd, + sfd/Makefile, FreeSans.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added APL characters + to FreeMono (why?...) Fixed several last-minute problems, + including Serif: Tweeked GPOS mark table for Cyrillic Sans: Added + a GPOS table for Cyrillic (but several diacritics are missing) + Serif, Mono: tweeked some bugs in extensible brackets & integrals + Serif: Vietnamese o circumflex: accent was a bit high. fixed. + MonoBoldOblique OTF build uni213b intersects self Generation of + TT fonts complains about several things to stderr, including + SerifBold: "There exists a 'fpgm' code that seems incompatible + with FontForge's. Instructions generated will be of lower + quality. If legacy hinting is to be scrapped, it is suggested to + clear the `fpgm` and repeat autoinstructing. It will be then + possible to append user's code to FontForge's 'fpgm', but due to + possible future updates, it is extremely advised to use high + numbers for user's functions." (probably has been there since I + first copied the TT instructions in. ) Just repeated the copying + process carefully, and the warning went away. Serif: + "FindMatchingHVEdge fell into an impossible position" fixed a + bunch of point too close REMAINING PROBLEM in Serif TT build + "MonotonicFindAlong: Never found our spline." fixed several bad + TT matrices-- there are several more fixed many "control points + too close" no luck + +2008-09-03 08:43 +0000 [r904] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Added/corrected some + Misc. Symbols by copying from Serif. Note this is only a stopgap + solution. Want real sans-serif symbols. + +2008-09-02 22:41 +0000 [r903] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Put in minimal + Miscellaneous Symbols: Card suites and some musical notes. Note + not very happy with shapes...some I just drew. Sans isn't really + sans. Fixed one APL symbol in Mono so it verified in OTF version + +2008-08-31 11:39 +0000 [r902] Stevan_White: + + * FreeMono.sfd: Built set of APL symbols. + +2008-08-30 18:37 +0000 [r901] Stevan_White: + + * FreeSans.sfd: Un-linked references in uni02B2 + and uni02B5, because when validating the TrueType version, + fontforge gave an error "is drawn in wrong direction". (I suspect + a bug in fontforge. Other similar glyphs make no errors.) + +2008-08-30 16:23 +0000 [r900] Stevan_White: + + * FreeSerif.sfd: Fixed missing extrema in + TrueType. These were the last cases being reported by validate in + all the faces. + +2008-08-30 13:46 +0000 [r899] Stevan_White: + + * FreeSerifItalic.sfd: fixed last missing + extrema in TrueType + +2008-08-30 11:02 +0000 [r898] Stevan_White: + + * sfd/Makefile, Makefile, + tools/validate.py, + tools/isMonoMono.py: restructured validation to + look in a directory + +2008-08-30 10:57 +0000 [r897] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd: Fixed missing extrema in + TrueType versions + +2008-08-30 09:31 +0000 [r894-896] Stevan_White: + + * AUTHORS, CREDITS: unified style + + * README: lots of re-wording, concerning goals and + purposes + + * INSTALL: Got rid of outline style, tried to make a + little more appealing. + +2008-08-14 22:01 +0000 [r893] Stevan_White: + + * FreeSans.sfd: Same problem with uni0A83 as + with bn_llikaar. Just made zero-width. + +2008-08-14 20:29 +0000 [r892] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd: Glyph bn_llikaar, U+09E3 + BENGALI VOWEL SIGN VOCALIC LL, has right bound positioned far + into the negative. Causes a warning in fontforge when opening OTF + version. Comparing with other fonts supporting Bengali, found no + others that do this. FreeSerif makes glyph width 0 (which sounds + right according to Unicode) and puts glyph wholly to left of 0. + However, I haven't found this letter in text anywhere. I wonder + if it is really used in writing. + +2008-08-14 07:41 +0000 [r891] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd: Further TrueType validation + fixes. Sans still has two glyps in wrong direction. + +2008-08-13 23:09 +0000 [r890] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Fixed more TrueType + problems...all with missing extrema in TTF validation + +2008-08-13 21:35 +0000 [r889] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: fixed all the TrueType + validation problems of type "intersects itself" and all but two + of the "wrong directions", as well as a lot of "missing extrema". + But there remain hundreds of missing extrema in the TrueType + version. Also, bn_llikaar in Sans and Oblique still has a problem + in OTF version. + +2008-08-12 22:21 +0000 [r888] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made .ttf files to + validate. Other faces have many more problems still. + +2008-08-12 20:41 +0000 [r887] Stevan_White: + + * tools/GenerateTrueType: For TrueType, one puts in + Instructions, not Hints. This vastly improves look of TrueType + fonts in Windows. + +2008-08-11 23:07 +0000 [r886] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd, + FreeMonoOblique.sfd: Continuing to make OTF + versions validate. * FreeMonoOblique.sfd: lots of missing points + at extrema * FreeSerif.sfd 12 wrong directions, 1 missing extrema + * FreeSerifItalic.sfd many missing points at extrema, 1 + self-intersecting What was wrong: in several oblique cases, an + already-italic glyph was made more italic, thereby fouling up + extrema (although why it passed validation in the SFD I don't + know). Some glyphs were overly-complicated with many near points. + Cleaned up, rounded to int. Remaining problem: OTF + FreeSansOblique FreeSans. one Bengali glyph in each whose advance + width and htmx don't match. Moral of story: validate the OTF and + TTF versions too before a release. + +2008-08-11 22:59 +0000 [r885] Stevan_White: + + * FreeSansOblique.sfd: Reverse a mistake from + last commit: somehow this file was converted to quadratic, or + something. + +2008-08-10 22:25 +0000 [r884] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Found that SFD files + that validated produced OpenType files that don't. These + represent the easy fixes. Some were result of conversion to + quadratic; some shouldn't have validated in the SFD... * + MonoBoldOblique: uni0250 missing pts at extrema [reference glyph + rotated...] * Sans: uni0AC4 wrong direction [simplified, rounded + to int] * SansOblique: uni01EA wrong direction [rounded to int] * + SerifBold: uni023f wrong direction [round to int] * + SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, + added extrema] + +2008-08-06 18:08 +0000 [r883] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd: Re-set font metrics, + which were somehow making uneven vertical spacing. + +2008-08-06 07:05 +0000 [r882] Stevan_White: + + * ChangeLog: Added changes since last release + +2008-06-22 09:14 +0000 [r881] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: Made to validate + +2008-06-22 09:08 +0000 [r879-880] Stevan_White: + + * tools/ranges.py: Brought more into line with + OpenType added some ranges fixed bug with ranges outside of font + + * CREDITS: 3 new ranges + +2008-06-22 07:53 +0000 [r878] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Cyrillic: tweeked accents for + consistency, and for readability in small sizes. + +2008-06-21 23:31 +0000 [r877] Stevan_White: + + * FreeSerif.sfd: Thanna range: tweeking + +2008-06-21 23:15 +0000 [r876] Stevan_White: + + * FreeSerif.sfd: Thaana range: Scaled up by + about 15%, raised by 100EM, tightened some of the diacritics to + get inside 900 to -300 EM limits. + +2008-06-21 22:21 +0000 [r875] Stevan_White: + + * FreeSans.sfd: Added Old Persian and Ugaritic + from MPH2BDamase font. + +2008-06-21 21:50 +0000 [r874] Stevan_White: + + * FreeSerif.sfd: Added Tai Le range adapted from + MPH2BDamase font. + +2008-06-21 18:39 +0000 [r873] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Added some ancient Greek + numerals from Tempora to high Unicode area, (partly just to show + it can now be done.) + +2008-06-21 15:51 +0000 [r871-872] Stevan_White: + + * FreeSerifItalic.sfd: Couple of tweeks putting + glyphs above -300EM. + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Surgery to Thai letter 'tho + than', u+0e10, to push it above -300 EM. This makes Thai range + completely between 900 and -300 EM. + +2008-06-21 11:20 +0000 [r870] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSerif.sfd: Many auxilary characters (esp. + for Malayalam, Bengla, and Tamil) representing ligatures and + alternative forms without their own Unicode, were moved from + ranges above 0xFFFF (which ought to have been slots for other + defined Unicode ranges) into the Private Use area. In Serif, I + segregated the scripts, in Sans it was hard to see where one + began and another ended, so I moved them en masse. Note several + problems with wrongly-named characters: I already re-named + glyph570 and glyph582. But there are others with names starting + with A... + +2008-06-21 11:08 +0000 [r869] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd: Fixed (I hope the last) + problem with scripts in lookups Find Problems -> ATT (all + selected) finds multiple issues, SansBold In addition to script + 'guru', added 'gur2' to the scripts for these lookups 'nukt' + Nukta forms in Gurmukhi 'blwf' Below Base Forms in Gurmukhi + 'pstf' Post Base Forms in Gurmukhi 'blws' Below Base + Substitutions in Gurmukhi 'abvs' Above Base Substitutions in + Gurmukhi 'psts' Post Base Substitutions in Gurmukhi SansOblique + In addition to script 'beng', added 'bng2' to the scripts for the + lookup 'half' Half Forms in Bengali Moreover, the lookup 'aalt' + Access All Alternates in Latin contains only Bengali letters. + Re-named as Bengali, made to work on beng, bng2 scripts + +2008-06-20 21:52 +0000 [r868] Stevan_White: + + * FreeSerif.sfd: Scaled Sinhala range. Remedies + bug #23656: Sinhala letters over-sized + +2008-06-20 18:03 +0000 [r867] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Mostly messing with + Greek Extended accents again. re-positioned ypogegrammani on + advice of Alexey Kryukov Put prosgegrammani beneath main letters + in Mono, to make narrower glyphs Implemented more distinction + between tonos and acute. + +2008-06-19 08:25 +0000 [r866] Stevan_White: + + * FreeMonoBoldOblique.sfd: Completed fit of Mono + to 800 to -200 EM. + +2008-06-19 07:47 +0000 [r865] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd: Set Metrics to + recommended values + +2008-06-19 07:40 +0000 [r864] Stevan_White: + + * FreeMonoOblique.sfd: Now Mono Oblique, as well + as roman and Bold, are within 800 to -200 EM. Just BoldOblique to + go. + +2008-06-19 07:25 +0000 [r863] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd: More toward fitting to 800 + to -200 EM. Basically, reduced Georgian by 92%. Also made an + over-all offset, so Georgian is somehow centered (Bold...I guess + I already did this in roman). Want to also do an emboldening to + make stroke like rest of font, but current FontForge has a nasty + crash that loses data on this function. + +2008-06-19 06:19 +0000 [r862] Stevan_White: + + * FreeMono.sfd: In effort to make fit in 800 to + -200 EM, Scaled Georgian by 92%, centered on 600 wide box. Next: + Embolden a bit. + +2008-06-18 19:46 +0000 [r861] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Toward making all + glyphs lie between -200 and 800 EM. Numerous small changes, + especially raising descenders of some Hebrew letters. Georgian + remains a problem + +2008-06-13 07:39 +0000 [r860] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Moved prosgegrammeni up to + baseline, (and then moved all references down to baseline) + +2008-06-13 06:17 +0000 [r859] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added Control Picture + "blank" to all faces. Switched U+0222-3 from TemporaLGCUni + +2008-06-11 17:57 +0000 [r858] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: More fiddling with Greek + Extended accents + +2008-06-11 07:43 +0000 [r857] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Tweeks to accents etc in + Greek Extended and Cyrillic + +2008-06-10 08:00 +0000 [r856] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBold.sfd: Fixed a few big horizontal + spacing problems + +2008-06-09 23:12 +0000 [r855] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Implemented TemporaLCGUni + glyphs in Cyrillic ranges. Added a breve_cyrillic for the + moustache breve mark. + +2008-06-08 08:45 +0000 [r854] Stevan_White: + + * FreeSerif.sfd: Replaced most of Cyrillic range + with TemporaLGCUni. Remodelled many of the derived Cyrillic + characters after these. Fiddled globally with spacing of small + letters. Unclear on diacritics 485-6, unhappy with breve. + +2008-06-07 23:12 +0000 [r853] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Started implementing + TemporaLCGUni in Greek ranges. Replaced 3DC-3E1 from Tempora, + because I thought they looked nicer and more like the other + existing FreeFont glyphs. Replaced 3DA-B from Tempora, because + they look more like Unicode samples, and nicer. Added 03f3-4, + 03F7-F. Prefer my own lunate epsilon. Replaced Phi and Omega from + Tempora. These plainly fit the other FreeFont glyphs better than + the origninals. (How did this happen?) In bold, replaced U+03D7 + Copied lbbar u+2114 Small italic greek: replaced most except phi, + psi, omega Based on new information, broke the identification of + oxia with Latin acute. + +2008-06-07 13:15 +0000 [r852] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Efforts to control + heights of characters + +2008-06-05 22:04 +0000 [r851] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made to validate + +2008-06-04 23:14 +0000 [r850] Stevan_White: + + * FreeSans.sfd: Fixed undefined character in + kerning classes + +2008-06-03 22:26 +0000 [r849] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: tweeks and additions + to General Punctuation + +2008-06-03 07:12 +0000 [r848] Stevan_White: + + * FreeSansOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Completed/tweeked + Number Forms + +2008-06-02 22:28 +0000 [r847] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Added some Miscellaneous + Technical symbols + +2008-06-02 21:25 +0000 [r846] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Tweeks...mostly Letterlike + +2008-06-01 21:52 +0000 [r845] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Added Box Drawing characters to + Serif. Tweeked a glyph in Mono + +2008-06-01 12:30 +0000 [r844] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added several glyphs + to Letterlike Characters + +2008-05-31 07:30 +0000 [r843] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Validation pass + SansOblique and SansBoldOblique had validation problem with + BlueValues Private Dictionary Elements in BlueValues/OtherBlues + array are disordered Elements in BlueValues/OtherBlues array are + too close (Change BlueFuzz) StemSnapV does not contain StdVW + value. So I ordered the array, and based on other slanted fonts, + removed StemSnapV. Note however, I still think the two top Blues + lines are too close But I don't even know what the second-to-top + line is meant to do. + +2008-05-31 07:23 +0000 [r842] Stevan_White: + + * FreeSerif.sfd: Added to Block Elements, + Geometric Shapes Made to validate + +2008-05-29 08:49 +0000 [r841] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Looking at special symbols. + Drew several Miscellaneous Symbols in Mono and Serif + (Completed/corrected planetary symbols, added Dice, some other + easy ones) Completed Dingbats in Serif (using URW Dingbats) Added + some Block Elements to Serif + +2008-05-25 23:47 +0000 [r840] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: More changes stemming from + J. Poon's report. + +2008-05-25 12:56 +0000 [r839] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd: Height surgery on + SerifBoldItalic. More fiddling with accents in others. + +2008-05-25 11:01 +0000 [r838] Stevan_White: + + * FreeSerifItalic.sfd: More height surgery. Only + a few left in Benglai and Thai + +2008-05-25 10:54 +0000 [r837] Stevan_White: + + * FreeSerifBold.sfd: Re-applied surgery to make + glyphs between 900 and -300EM + +2008-05-25 09:58 +0000 [r836] Stevan_White: + + * FreeSerifBold.sfd: *** Regression + Inadvertently un-linked all references in SerifBold in r1.83. + This reverses that error (but also un-does the surgery mentioned + there) + +2008-05-24 22:23 +0000 [r835] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBold.sfd: Applied surgery to make + Latin letters go under 900EM. One exception yet... + +2008-05-24 20:59 +0000 [r834] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Serif: much fiddling with + accents in Latin ranges. Re-thought some glyphs (there are still + a few messy ones, especially in bold) Checked horizontal + spacing...fixed a number of problems. + +2008-05-23 07:37 +0000 [r833] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSerifBold.sfd: Made Latin Extended-B + coverage consistent across Serif; cleaned up some glyphs + +2008-05-22 23:07 +0000 [r832] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd: Filled more of General + Punctuation in Sans and Serif Made all agree on coverage of Latin + Extended Additional + +2008-05-22 21:34 +0000 [r831] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSerifBold.sfd: Added Latin Extended + Additional to SansOblique. Made Latin Extended Additional + coverage consistent across Sans, B, I Made Latin Extended-B + coverage same in SerifBold. + +2008-05-22 19:05 +0000 [r830] Stevan_White: + + * FreeSansBold.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Mono* made Latin-B + coverage consistent across faces + +2008-05-22 07:50 +0000 [r829] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Made set of Latin + Extended-B consistent across Sans faces + +2008-05-21 23:14 +0000 [r828] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: More filling in General + Punctuation + +2008-05-21 22:26 +0000 [r827] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: another bunch of J. Poon's + reports also, filling in some Combining Diacriticals, Spacing + Modifiers, and General Punctuation in bold faces + +2008-05-20 23:16 +0000 [r826] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeSerifBold.sfd: Mucking about with mark + tables in Thai (Serif) Other faces: Making changes from J. Poon's + report + +2008-05-20 06:41 +0000 [r825] Stevan_White: + + * CREDITS: Mark Williamson Jacob Poon + +2008-05-20 06:37 +0000 [r823-824] Stevan_White: + + * Makefile: added tests target + + * tools/findBackLayers.py (added), + tools/validate.py (added), + tools/isMonoMono.py (added), + tools/nameBySlot.py (added): isMonoMono.py checks + that monospace is really that findBackLayers.py finds glyphs in + back layers nameBySlot.py Sets name/unicode values of a range to + encoding value verify.py runs FontForge "verify" on all faces + +2008-05-18 19:17 +0000 [r822] Stevan_White: + + * tools/ranges.py: put table explanation back in + +2008-05-18 19:11 +0000 [r821] Stevan_White: + + * tools/ranges.py: Improved behaviour for high + Unicode + +2008-05-18 13:32 +0000 [r820] Stevan_White: + + * FreeSans.sfd: Revision of kerning + +2008-05-18 12:16 +0000 [r819] Stevan_White: + + * FreeSerif.sfd: Made Latin kerning a little + more reasonable: reduced many excessive kerns (some had letters + apparently overlapping, which shouldn't happen) made kerns + increment by 5EM for ease of reading got rid of kerns too small + to be seen + +2008-05-18 12:11 +0000 [r818] Stevan_White: + + * FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: made to verify + +2008-05-12 22:52 +0000 [r817] Stevan_White: + + * FreeSerif.sfd: made to validate + +2008-05-12 22:46 +0000 [r816] Stevan_White: + + * FreeSerif.sfd: Gurmukhi: filled range in + Serif, taking glyphs from the original Punjabi font by Hardip + Singh Pannu http://members.aol.com/hspannu/punjabi.html (file + pb_win95.exe) + +2008-05-12 19:43 +0000 [r815] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerifBold.sfd: Hebrew, basic. Some faces + missing punctuation marks, added. + +2008-05-12 19:03 +0000 [r814] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd: + Armenian: Sans tried to make verticals and horizontals of more + uniform width both, finddled with punctuation + +2008-05-12 12:56 +0000 [r813] Stevan_White: + + * FreeMonoOblique.sfd: made to validate + +2008-05-12 12:23 +0000 [r812] Stevan_White: + + * FreeMonoBold.sfd: made to validate + +2008-05-12 12:04 +0000 [r811] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Armenian in Sans: + regularized letter spacing + +2008-05-12 10:19 +0000 [r810] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeMonoOblique.sfd: Armenian: fill out ranges + and clean up SansBold especially had a lot of incorrect + references. Now all the ranges with Armenian at least share the + same set of characters. + +2008-05-12 07:58 +0000 [r809] Stevan_White: + + * FreeMono.sfd: Fixed glyph with wrong width. + +2008-05-11 21:29 +0000 [r808] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: 1) made to validate + 2) Mono: copied in Spacing Modifier Letters (glyphs not yet + named) 3) SerifItalic: Filled in General Punctuation + +2008-05-11 17:56 +0000 [r807] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made to validate, and + pass all other FontForge tests. Expedient: rounded everything to + int + +2008-05-11 14:00 +0000 [r806] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Made to have the same Greek + Symbols, Made to validate + +2008-05-11 12:59 +0000 [r805] Stevan_White: + + * FreeSansOblique.sfd: Made Greek Symbols as + full as rest of Sans + +2008-05-11 12:40 +0000 [r804] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Made Greek Symbols as full + as rest of Sans. Changed a name in Sans. + +2008-05-11 12:25 +0000 [r803] Stevan_White: + + * FreeSansBold.sfd: Deleted orphaned Arabic + glyph from Arabic Presentation forms-B + +2008-05-11 12:17 +0000 [r802] Stevan_White: + + * FreeMonoOblique.sfd: Made Greek as full as + other faces Made to validate + +2008-05-11 11:08 +0000 [r801] Stevan_White: + + * FreeSansBold.sfd: Deleted seven orphaned + Arabic characters; looks like somebody started, didn't get very + far, putting Arabic in bold. + +2008-05-11 11:05 +0000 [r800] Stevan_White: + + * FreeSerifBold.sfd: Deleted the single Arabic + character: it was clearly there by mistake. + +2008-05-11 11:01 +0000 [r799] Stevan_White: + + * FreeSansOblique.sfd: Tweeks to Armenian + +2008-05-11 10:56 +0000 [r796-798] Stevan_White: + + * FreeSansOblique.sfd: Comment from previous + commit of FreeSans was meant for FreeSansOblique. In FreeSans, + only tweeked a few letters during putting more characters in this + face. Filled in Spacing Modifier Letters, increased General + Punctuation. + + * FreeSans.sfd: Filled in Spacing Modifier + Letters, increased General Punctuation + + * FreeMono.sfd: Made Armenian as full as other + roman faces. + +2008-05-11 08:22 +0000 [r795] Stevan_White: + + * FreeMono.sfd: Completed Spacing Modifier + Letters Added a couple of Greek Punctuation + +2008-05-10 22:39 +0000 [r794] Stevan_White: + + * FreeMono.sfd: added more Spacing Modifier + Letters + +2008-05-10 21:57 +0000 [r792-793] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Did same process of scaling and + sizing for Thai in Sans as in Serif. Added mark tables to Sans. + Improvement, but there are questions... + + * FreeSans.sfd: Tidied some Gurmukhi glyphs, + validated. + +2008-05-10 17:50 +0000 [r791] Stevan_White: + + * FreeMonoBoldOblique.sfd: Made metrics like + rest of Mono + +2008-05-10 13:44 +0000 [r790] Stevan_White: + + * FreeSans.sfd: Deleted ranges for Oriya, + Kannada, on account of 1) they only contained a subset of the + consonant glyphs of the scripts, few if any vowels, and had no + ligature lookups as required 2) Kannada was based on the Akurti + fonts, which have copyright issues. See bug #23225: Oriya range + only partial bug #23224: Kannada range only partial + +2008-05-09 07:49 +0000 [r789] Stevan_White: + + * tools/ranges.py: more info on range intervals + +2008-05-09 05:36 +0000 [r788] Stevan_White: + + * FreeSerif.sfd: Deleted Telugu range. It didn't + represent a complete writing system for the language. See notes + at https://savannah.gnu.org/bugs/index.php?23202 Serif: Telugu + range missing many characters; many wrong + +2008-05-09 05:22 +0000 [r787] Stevan_White: + + * FreeSerif.sfd: Got a copy of the original + Tikkana font, Copied in remaining consonants and vowels that I + could find there. I think one vowel 0C55 is missing according to + unicode). Strangely, the Telugu digits are alo missing. In + Tikkana, the default "checkmark" structural mark is missing from + many consonants, according to Unicode, but is a separate glyph. I + put the checkmark on. This, and scaled up by 150% and cleaned up + intersecting glyphs and many unnecessary points. + +2008-05-07 22:38 +0000 [r786] Stevan_White: + + * FreeSerif.sfd: Filled out Telugu consonants. + Vowels still need to be done + +2008-05-07 19:35 +0000 [r785] Stevan_White: + + * FreeSerif.sfd: Operated on Latin glyphs with + stacked accents to make them fit under 900EM. Scaled Telugu bu + 150%. + +2008-05-05 22:17 +0000 [r784] Stevan_White: + + * FreeSansBold.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd: Corrected further fontforge + "find problems" added some math characters to FreeSerif + +2008-05-04 23:52 +0000 [r783] Stevan_White: + + * FreeSansBold.sfd: Made to validate, and fixed + bad TT transformations + +2008-05-04 19:52 +0000 [r782] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Mainly TeX additions trying to + satisfy Markus Kuhn's TeX-as-Unicode page + +2008-05-04 14:25 +0000 [r781] Stevan_White: + + * FreeMono.sfd: Adjusted heights of extensible + brackets + +2008-05-04 13:42 +0000 [r780] Stevan_White: + + * FreeMono.sfd: Fixed problems with extensible + brackets, thanks to Markus Kuhn's page + http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt + +2008-05-04 11:43 +0000 [r779] Stevan_White: + + * tools/ranges.py: fiddled with ranges, doc + +2008-05-04 11:25 +0000 [r778] Stevan_White: + + * tools/ranges.py: made some ranges more correct? + +2008-05-04 11:02 +0000 [r777] Stevan_White: + + * tools/ranges.py: fixed some bugs in ranges better + error reporting + +2008-05-04 10:34 +0000 [r775-776] Stevan_White: + + * tools/ranges.py: Got rid of Unicode 1.1 references + + * tools/ranges.py: made to use OpenType table + +2008-05-04 03:11 +0000 [r774] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: made to validate + +2008-05-03 20:44 +0000 [r773] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Removed digits from Private + Use Area. See bug 23050. + +2008-05-03 19:54 +0000 [r772] Stevan_White: + + * tools/ranges.py: restructure text output + +2008-05-03 17:05 +0000 [r771] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd: + Completed General Punctuation + +2008-05-03 15:00 +0000 [r770] Stevan_White: + + * tools/ranges.py: More docs, date + +2008-05-03 14:53 +0000 [r769] Stevan_White: + + * FreeSans.sfd: Completed IPA Extensions + +2008-05-03 13:46 +0000 [r768] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: More work on Superscripts and + Subscripts, Spacing Modifiers. Sans is now complete in both. + Added Pfennig to Sans and Mono. + +2008-05-03 11:55 +0000 [r767] Stevan_White: + + * tools/ranges.py: rearrangement and cosmetic + +2008-05-03 11:46 +0000 [r765-766] Stevan_White: + + * tools/ranges.py: ...except I had broken it. now + fixed + + * tools/ranges.py: Seems to be in a useful form at + this point. + +2008-05-03 10:29 +0000 [r764] Stevan_White: + + * FreeSerif.sfd: Added a hand-drawn old German + Pfennig to Currency Symbols + +2008-05-02 23:46 +0000 [r763] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: Further additions to General + Punctuation, Super and Sub Scripts, Spacing Modifiers, etc. + +2008-05-02 20:29 +0000 [r762] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd: Sans: additions to Spacing + Modifiers, IPA SerifItalic: shortening stacked accents to + maintain readability when clipped + +2008-05-01 19:32 +0000 [r761] Stevan_White: + + * FreeSans.sfd: Additions to Spacing Modifiers + and changes to Combining Diacritics + +2008-05-01 18:26 +0000 [r760] Stevan_White: + + * FreeSerif.sfd: Made sure all the half rings in + Combining Diacriticals and Spacing Modifiers were really half + rings (J. Poon had complained about this) + +2008-05-01 18:11 +0000 [r759] Stevan_White: + + * FreeSerif.sfd: Filled out General Punctuation + Some work on Spacing Modifiers + +2008-05-01 14:10 +0000 [r758] Stevan_White: + + * FreeSerif.sfd: Filled out Mathematical + Operators still needs lots of work Made to validate + +2008-05-01 09:14 +0000 [r757] Stevan_White: + + * FreeSerif.sfd: Filled out Latin Extended B + +2008-04-30 23:00 +0000 [r756] Stevan_White: + + * FreeSerif.sfd: added some letters with curls + to Latin Extended B + +2008-04-30 22:38 +0000 [r755] Stevan_White: + + * FreeSerif.sfd: more fiddling with Latin + Extended B accents + +2008-04-30 20:28 +0000 [r754] Stevan_White: + + * FreeSerif.sfd: Added Hanunóo script, with + characters based on those in font MPH2BDamase, on request from + the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase Glyphs are + simple vector strokes. Could be a little more uniform. + +2008-04-29 23:54 +0000 [r753] Stevan_White: + + * FreeSerif.sfd: Added Buginese script + "Lontara", with characters based on those in font MPH2BDamase, on + request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase Note the glyphs + are pretty rough, clearly a digitization of handwriting. I just + cleaned them up, and corrected discrepancies with Unicode, and + compared with some pictorial samples of the script I could find. + +2008-04-28 22:15 +0000 [r752] Stevan_White: + + * tools/ranges.py: improved look a lot still unhappy + with some ranges OS/2 seems sometimes bang-on, sometimes + unrelated to anything ( including fontforge's OS/2 listing) + +2008-04-28 22:00 +0000 [r751] Stevan_White: + + * FreeSerif.sfd: Much fiddling with Tamil range. + First scaled to 78% (avoiding the references) This gets it in the + ballpark height-wise. [A bit taller than the Latin letters, but + the stroke is narrower, but then the glyphs are busier.] Then had + to re-align combined references, the trickiest being the halants. + Checked with other fonts with Tamil text. + +2008-04-28 20:05 +0000 [r750] Stevan_White: + + * FreeSerif.sfd: Cleanum of missing extrema in + Arabic and Thaana + +2008-04-28 19:55 +0000 [r749] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: cleanup of control points in + Arabic and Thaana + +2008-04-28 17:04 +0000 [r748] Stevan_White: + + * tools/ranges.py (added): a script to print out how + many characters in a range are implemented in each font + +2008-04-28 08:06 +0000 [r747] Stevan_White: + + * FreeSerif.sfd: * Many changes to Thai, trying + to make the script fit between some lines, so accents won't get + clipped, etc. Also, stroke weight was heavier than that of Latin. + Scaled whole thing by 93%. Shrank the tallest letters 0E42-4 to + get them under 900EM. Shaved off top of maiek. Fiddled with + positioning of all accents. Made positioning tables for accents. + [note, unclear these are working correctly] * Fixed a bug having + to do with character replacements for characters named 'ng' and + 'nj'; these names had been taken on by other characters. * Made + to validate * unicode positions of two Cyrillic Extended + characters were switched. * fiddled with a couple of Cyrillic + combining diacritics + +2008-04-26 22:14 +0000 [r746] Stevan_White: + + * FreeSans.sfd: bugfix: a left harpoon + mysteriously appeared to the left of letter p! + +2008-04-26 19:46 +0000 [r745] Stevan_White: + + * FreeMono.sfd: Made to validate + +2008-04-26 18:40 +0000 [r744] Stevan_White: + + * FreeSans.sfd: made to validate + +2008-04-26 15:04 +0000 [r743] Stevan_White: + + * FreeSans.sfd: Toward J. Poons report Made 032B + more like proper double-arches (and distinct fro 033C seagull) + +2008-04-26 14:22 +0000 [r742] Stevan_White: + + * FreeSans.sfd: Toward J. Poon's report Made + 032b more like a seagull + +2008-04-26 14:05 +0000 [r741] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd: Sans: fiddling with widths + and terminators of math symbols, toward J. Poon's report R & B: + removed u+2741 because it didn't match the Unicode description + +2008-04-26 12:08 +0000 [r740] Stevan_White: + + * FreeMono.sfd: extensible parenthesis symbols + weight/terminators Toward bug # 23064 + https://savannah.gnu.org/bugs/index.php?23064 Rounded a bunch of + terminators + +2008-04-22 21:45 +0000 [r739] Stevan_White: + + * FreeSans.sfd: Fiddled with math--consequences + of changing the "similar" operator + +2008-04-22 20:06 +0000 [r738] Stevan_White: + + * FreeSerif.sfd: Small alignment problem in + Greek Extended + +2008-04-22 19:52 +0000 [r737] Stevan_White: + + * FreeSerif.sfd: One more tweek to spacing in + Cyrillic Extended + +2008-04-22 19:48 +0000 [r736] Stevan_White: + + * FreeSerif.sfd: Corrected spacing in Cyrillic + Supplement + +2008-04-22 19:35 +0000 [r735] Stevan_White: + + * FreeSerif.sfd: Added Cyrillic Supplement + letters for Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, + Aleut + +2008-04-22 18:46 +0000 [r734] Stevan_White: + + * FreeSans.sfd: More tightening of accents + +2008-04-22 18:41 +0000 [r733] Stevan_White: + + * FreeSerif.sfd: Added Cyrillic letters for + Nivkh (completing Cyrillic range) More tightening of accents in + Latin Extended. + +2008-04-22 08:49 +0000 [r732] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Adjustments to h and k with + caron and cedilla in Latin A and B + +2008-04-21 22:23 +0000 [r731] Stevan_White: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: FreeSerifBold: deleted 3 + dotted Hebrew letters in Private/Corporate use (E801-3). They + weren't ligatures or in any other lookup, and they weren't + present in FreeSerif. FreeSansBold: unlinked and deleted F6C3, + which called itself commaaccent. Made some new spacing and + non-spacing accents to make up for it. FreeSansBoldOblique: Made + references of many Latin Extended. Also corrected several wrong + ones. Freeserif: re-named commaaccent + +2008-04-21 18:30 +0000 [r730] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Deleted Hiragana and + Katakana ranges, as discussed on bugs list. Cleaned up some + encoding issues, unnamed glyphs + +2008-04-21 07:28 +0000 [r728-729] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Roman: added 'sine' -- not + beautiful, but I liked drawing it All: Made special lookup for + Dutch ligatures 'IJ' and 'ij' + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Roman: ffi etc Latin + ligatures from 'liga' to 'dlig' (these weren't really ligatures + anyway, and only looked very bad when used. Retain for condensed + type. Others: deleted Latin 'liga' table altogether BoldOblique : + added j to ij ligature + +2008-04-20 22:31 +0000 [r727] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Toward J. Poon's + Report: Except for issues of terminators not always vertical or + horizontal, and a few things that were too hard or I was unsure + of. + +2008-04-20 15:31 +0000 [r726] Stevan_White: + + * FreeSerif.sfd: More fiddling with accents + +2008-04-20 15:11 +0000 [r725] Stevan_White: + + * FreeSerif.sfd: futzing with accents in Latin + Extended Additional + +2008-04-20 14:28 +0000 [r724] Stevan_White: + + * FreeSerif.sfd: Fiddled with accents in Latin + Extended-B + +2008-04-20 12:56 +0000 [r723] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: added primemod + character, referenced by Greek number sign + +2008-04-20 09:51 +0000 [r722] Stevan_White: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Following J. Poon's + report, disconnected NJ (01CA) + +2008-04-19 21:20 +0000 [r721] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: First pass throught + J. Poon's bug list. See bug reports for details. + +2008-04-19 15:44 +0000 [r720] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made underscore + slanted in Oblique faces, made all to be width of character. + Towards J. Poon's report. Disturbed that xterm and some other + apps put small space between characters when none was called for. + +2008-04-19 15:20 +0000 [r719] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd: corrections on Currency + Symbols + +2008-04-19 11:59 +0000 [r718] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: More corrections, additions + to Currency Symbols + +2008-04-19 01:41 +0000 [r717] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Filled out and corrected + Currency Symbols + +2008-04-18 21:46 +0000 [r716] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Adjustments to Combining Marks + for Symbols Additions to range in Sans, and re-structured its + marks table so that "middle" can apply to any range + +2008-04-18 08:31 +0000 [r715] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Made reference between + combining koronis and lenis of Greek Extended In Serif, re-worked + combining marks lookup tables, added anchors in Latin, moved so + without marks they work in kedit (but now I'm doubting kedit does + a reasonable thing...what is a better application for testing + this?) + +2008-04-16 21:46 +0000 [r714] Stevan_White: + + * FreeSerifItalic.sfd: adjusting of spacing and + accents in Greek + +2008-04-16 20:30 +0000 [r713] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoOblique.sfd: Much futzing with Greek + letter spacing and accents. Added lenis to FreeMono. + +2008-04-16 06:45 +0000 [r712] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: Adjusted spacing of dots of + Greek dieresistonons in Serif Whippted up something for Greek + kappascript in Mono (could use revision) + +2008-04-16 06:18 +0000 [r711] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Raised dots on + double-dotted Cyrillic i, to match that of i and j. + +2008-04-14 09:02 +0000 [r710] Stevan_White: + + * FreeMono.sfd: Corrected 27e6-7 "white bracket" + Note it is probably a FontForge bug these symbols aren't showing + up. FontForge thinks they are in Supplemental Arrows, but they + should be in Supplemental Math-A + +2008-04-13 22:18 +0000 [r709] Stevan_White: + + * FreeMono.sfd: named some Greek characters + +2008-04-13 22:00 +0000 [r708] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Spacing of some Cyrillic + characters + +2008-04-13 21:10 +0000 [r707] Stevan_White: + + * FreeSerif.sfd: some fiddling with accents, + yogh was too wide + +2008-04-13 14:28 +0000 [r706] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd: Character spacing was + chaos--tried to improve. BoldOblique also needs it. + +2008-04-13 12:17 +0000 [r705] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Completed the fix of + bug #12798, Greek glyphs with accents to side Much mucking with + accents here, and fixed a few things that were just wrong. + +2008-04-12 19:56 +0000 [r704] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made Mono curly + quotes "bent" + +2008-04-12 19:39 +0000 [r703] Stevan_White: + + * FreeMono.sfd: More fiddling with Greek accents + Made quotes "bent" + +2008-04-12 18:57 +0000 [r702] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Adjustments on Greek + diaresistonos etc. Adjustments in Serif on combining marks for + symbols + +2008-04-12 11:58 +0000 [r701] Stevan_White: + + * FreeSerif.sfd: More additions to Combining + marks for Symbols + +2008-04-12 11:44 +0000 [r700] Stevan_White: + + * FreeSerif.sfd: Additions to Combining marks + for Symbols -- now mostly full. Lots of adjustments to middle + anchor point in Latin to make big circle (nearly) encircle + preceding latter + +2008-04-11 07:14 +0000 [r699] Stevan_White: + + * FreeMono.sfd: Bugfix: Had indroduce a glyph of + width other than 600, making kterminal not recognize it as a + monospace font. + +2008-04-10 19:44 +0000 [r698] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: More messing with accents. + Further to bug #12798, Greek glyphs with accents to side Much + messing with glyphs in Greek Extended range + +2008-04-09 11:35 +0000 [r697] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Revisited Latin-1 and + Latin-A accents. Glyph B7 was called "periodcentered", but + Unicode callse it Mid Dot, and the description doesn't refer to + the period. I made it like the dot accent. throughout, and + referred L-dot to it. Also double-checked "commaaccent" + characters (some in Unicode called cedilla, but the Unicode + example shows a comma...mystery) also the funny IPA upside-down f + often had two bars, incorrectly. To do: go through rest of Serif, + and Sans + +2008-04-08 23:25 +0000 [r696] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Completed + re-structuring of stacked Latin accents in Mono. Also: lots of + associated adjustments of Greek Extended accents. (Trying to at + least center extremely wide characters on their box) Repaired + some victems of "find overlaps" sweeps Worked on glyphs with + apostrope/comma parts Corrected a few wrong glyphs. Trying out a + "bent quotes" solution to making primes distinct from quotes. + +2008-04-08 09:56 +0000 [r695] Stevan_White: + + * FreeMonoOblique.sfd: Toward reducing overall + height Did similar process as for Mono, fixing a few errors along + the way. Also the Greek Extended range was very messed up + vertical and horizontally. Horizonal spacing of the heavily + accented Greek is a real problem in Mono... To do: revisit + "commaaccent" characters in all faces: do some have cedillas? + some Hebrew glyphs are a little low Georgian generally is way out + of bounds + +2008-04-07 07:18 +0000 [r694] Stevan_White: + + * INSTALL: various updates and corrections, tweeked + formatting + +2008-04-06 22:48 +0000 [r693] Stevan_White: + + * FreeMonoBold.sfd: Tweeking of accents + +2008-04-06 21:21 +0000 [r692] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd: Re-worked accents in + FreeMonoBold.sfd to make Latin ranges lie between 800 and -200 + EM, as with FreeMono. + +2008-04-06 16:20 +0000 [r691] Stevan_White: + + * tools/hex_range.py (added): a tool for printing + out ranges of formatted hex numbers + +2008-04-06 12:33 +0000 [r690] Stevan_White: + + * FreeMono.sfd: Latin Extended ranges: + Implemented new policy of shortening the letters of the + characters with the highest-stacked accents. At this point all + the Latin glyphs lie betweeen 800 and -200 EM. Also checked for + readability of all the Latin extended letters in xterm. (Issue: + it chops letters outside their bounding boxes; many accents had + been a bit outside. Made sure that if they were chopped, they + were at least still recognizable.) + +2008-04-05 19:41 +0000 [r689] Stevan_White: + + * FreeMono.sfd: Following exchange about Mono on + freefont-bugs with Joe Wells, who * doesn't like the curly quote + marks * wants combining diacritics to work * wants tight line + spacing Trying to reduce font height: * exclamdown was below -200 + * Throughout Extended Greek, ypogegrammeni were too low. + Shortened glyph, and raised all references. * Lots of messing + with Latin Extended ranges to make glyphs mostly fit into 800 + height. Mostly succeeded. A couple will get chopped. * Messed + with "commaaccent" glyphs, which were very low * Cyrillic 04B1 + had a tail that was incorrectly low * Much mucking with Georgian + range. Moved up by 95 (read Georgian is written as though + centered between two horizontal lines, rather than as sitting on + a baseline) There are still a few very high glyphs. FontForge + U+0122 called Gcommaaccent, glyph looks like that, but Unicode + says it's Gcedilla. Made the ones called cedilla by Unicode to be + cedillas Note bug in Unicode: standard for 0122, 0123, 0136, + 0137, 013B, 013C, 0145, 0146, 0156, 0157 all talk about cedilla, + say to make it with cedilla, but example shows comma. By the way: + * Got rid of commaaccent and dotlessj in Corporate Use * Replaced + shadedark, with little squares now not overlapping. * Corrected + IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac, 02ad, + 02ae, 02af (so many changes...the CVS server was down...) + +2008-04-05 18:18 +0000 [r688] Stevan_White: + + * FreeSerif.sfd: e-named arabic and hebrew + characters Big adjustment to comma-accents. Mostly effects Greek + Extended. Made such accents to be like comma, rather than like + Russian apostrophe (and de-referenced that symbol) + +2008-04-04 07:17 +0000 [r687] Stevan_White: + + * FreeMono.sfd, + FreeSerif.sfd: raised dot on superscript i + (2071) to make it more distinct at small sizes + +2008-04-03 23:33 +0000 [r686] Stevan_White: + + * FreeMono.sfd: added two IPA symbols + +2008-04-02 20:15 +0000 [r685] Stevan_White: + + * FreeSerif.sfd: fixed a few more control points + too close + +2008-04-02 18:59 +0000 [r684] Stevan_White: + + * FreeSerif.sfd: Fixed names of languages in + ligature table for latn "w/i". This fixes a crash when FontForge + opened the ttf table + +2008-04-02 18:47 +0000 [r683] Stevan_White: + + * FreeSerif.sfd: Motivated by bug crashing + FontForge when opening ttf file, started cleanup of useless + control points. Not finished. Got partway through Sinhala + +2008-03-31 21:51 +0000 [r682] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd: Fixed various "Find + Problems", including glyphs with mixed-up names, and bad TT + matrices. (lots more bad TT matrices remain) + +2008-03-31 06:50 +0000 [r681] Stevan_White: + + * FreeSerif.sfd: re-named a bunch of Cyrillic + letters + +2008-03-30 22:32 +0000 [r680] Stevan_White: + + * FreeSerif.sfd: put above mark on Cyrillic i + and double-dot i for Slavonic number forms + +2008-03-30 21:06 +0000 [r679] Stevan_White: + + * FreeSans.sfd: tightened spacing on glyphs of + last commit + +2008-03-30 21:03 +0000 [r678] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Concerning bug #16120, Include + upper case Wynn and upper case Yogh Adapted Herman Miller's + Thyromanes letters 01F7 021C 021D for Serif Drew my own versions + for Sans. + +2008-03-30 16:00 +0000 [r677] Stevan_White: + + * FreeSerif.sfd: Added 04F6,7 + +2008-03-30 15:34 +0000 [r676] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Made more Cyrillic diacritics + really combine. Made a mark lookup just for Cyrillic diacritics, + Marked most of the unadorned Cyrillic alphabet. Still not clear + on correct shapes for some of the marks. + +2008-03-29 23:25 +0000 [r675] Stevan_White: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Tweeks to accents + +2008-03-29 20:32 +0000 [r674] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd: small adjustments in Cyrillic + +2008-03-29 20:14 +0000 [r673] Stevan_White: + + * FreeSerif.sfd: corrected small palochka made + Cyrillic combining hundred-thousands and millions really combine + named some combining diacriticals + +2008-03-29 14:18 +0000 [r672] Stevan_White: + + * FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: mostly adjusted + horizontal spacing of mono oblique faces + +2008-03-29 13:18 +0000 [r671] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: More cleanup of + Cyrillic ranges Completely re-did horizontal spacing of + SerifItalic and SerifBoldItalic. See bug #17912, poor kerning in + Cyrillic oblique... https://savannah.gnu.org/bugs/index.php?17912 + It looked like chaos to me. Only so much can be done: the font is + flawed. But I think the changes make text readable in these + faces. There were many dozens of incorrect glyphs in + higher-numbered characters. It looked like someone started + copying letters that were like the correct ones, meaning to edit + them later, but never got around to it. (Or else, a facile + copying of glyphs that kinda looked right, but really kinda + weren't.) I deleted all those I could find. No glyph is better + than a wrong glyph. Futzt with accents, shooting for consistency + and readability. A maintenance thing: making correct references + (acyrillic vs a, although they may be the same glyph) I made a + lot of headway, but it isn't finished. Likewise, a large fraction + of these are compound characters, which can be made with + references, resulting in easier maintenance, reduced likelihood + of errors, and smaller files. I replaced many. + +2008-03-29 00:34 +0000 [r670] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd: Cyrillic italic Added italic, + bolditalic 0493, 04a7, 04AD because their form clearly varies in + italic. But was just guessing... + +2008-03-29 00:14 +0000 [r669] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: Cyrillic italic Added + italic, bolditalic 0493, 04AD because their form clearly varies + in italic. But was just guessing as to exact form. + +2008-03-28 23:16 +0000 [r668] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Overhaul of Cyrillic + Italic, BoldItalic added small yat for bug #22588 (note Times New + Roman doesn't use alternate form in Italic) All forms of Serif + have big problems in Cyrillic. The ugliest is in roman. The + letters, even of the Russian alphabet, are of inconsistent height + (awfully, small 0438 (ii) 0446 (tse)) and they vary from the + height of Latin and they vary from the height of italic and bold. + They are a mish-mash of letters from several fonts, of similar + (but not quite identical) weight, and similar, (but not quite + identical) size. I think the best solution would be to identify + the face that best matches Latin, and fill the range with that. I + think this is possible because the rarer letters seem to be + better: the common letters are the ones that are wrong. For now, + I just increased the sized of 0438 and 0446, and 048a, 048b, also + 0459 (lje) 045A (nje) 0464 (dje) Other issues ------------ Were + outline, with home-made accents - replaced with references 0400 + (was referencing E) 0401, 0402, 040c, 040d, 040e 0450, 0451, 0453 + more in the later ranges. Deleted dozens of characters in Bold, + Italic, and BoldItalic, that appeared half-made (a part of the + letter was copied, but the letter was never completed, and was + basically wrong) Lots of letters with hooks and lines in italic + were represented as just the unhooked version in italic. 048a, + 048b (short i with tail, had big-eared breve common in Cyrillic, + but unlike other letters) Re-implemented many compound letters + with references. Questionable ------------ In all versions, + 0478-9 Uk, uk. SerifItalic 0495 Small ge with acute, in italic: + is it like italic ge, or oblique? Well, peeked at Times New + Roman, which has it oblique. + +2008-03-27 20:33 +0000 [r667] Stevan_White: + + * FreeSerifBoldItalic.sfd: Moving all Greek + capitals with accent so they don't cover previous letter. + Remedies bug #12798 + +2008-03-27 20:27 +0000 [r666] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Various tweeks to accented + Latin letters. Connected O-ogonek correctly + +2008-03-27 19:55 +0000 [r665] Stevan_White: + + * FreeSerifItalic.sfd: Accents of numerous + accented Latin letters got shifted in a previous commit. This + fixes it. + +2008-03-27 19:28 +0000 [r664] Stevan_White: + + * FreeSerif.sfd: Adjusted combining tack left + and right (0318-0319) to be above -300 EM. + +2008-03-26 23:37 +0000 [r663] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Added some "middle" marks for + positioning of diacritics + +2008-03-26 23:21 +0000 [r662] Stevan_White: + + * FreeSans.sfd: copied 4 enclosing combining + diacriticals from Serif 20DD - 20E0 + +2008-03-26 23:13 +0000 [r661] Stevan_White: + + * FreeSerif.sfd: adjusted and added some + enclosing diacritics 20DD - 20E0 could use more work. Other faces + need 'em too. In response to Debian bug #472566 ttf-freefont: + U+20DD COMBINING ENCOLSING CIRCLE doesn't combine + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566 + +2008-03-26 20:00 +0000 [r660] Stevan_White: + + * FreeSerif.sfd: Lowered a few over-high Latin + accents + +2008-03-25 23:27 +0000 [r659] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd: FreeSansBold Devangari only + digits 1 and 2, and nothing else. Deleted FreeMonoBold + FreeMonoOblique FreeSerifBold FreeSeriftalic FreeSerifBoldItalic + FreeSansOblique FreeSansBold FreeSansBoldOblique got rid of + dotlessj, comma in Corporate Use Single Substitution lookup, ccmp + table made proper dotlessj, re-linked j-circumflex Note: + FreeSansBold has a commaaccent in Corporate Use, used by several + other characers. Haven't done anything about this. + +2008-03-25 07:30 +0000 [r658] Stevan_White: + + * FreeSerif.sfd: Added/corrected glyphs for yeh + hamza in Arabic, Added init and medi lookups for yeh hamza. + +2008-03-24 21:54 +0000 [r657] Stevan_White: + + * FreeSerif.sfd: Added isolated and final forms + for 0629 teh marbuta 0624 waw hamza 0626 yeh hamza 0649 alef + maksura A previous commit had added lookups that referred to + these, + +2008-03-24 18:51 +0000 [r656] Stevan_White: + + * FreeSerif.sfd: more fiddling with + super/subscripts + +2008-03-24 12:17 +0000 [r655] Stevan_White: + + * notes/README-downloads.txt (added): An explanatory + file for the downloads directory + +2008-03-24 11:59 +0000 [r654] Stevan_White: + + * sfd/Makefile, + tools/GenerateTrueType, Makefile, + tools/GenerateOpenType (added): Scripts and Make + targets to generate OpenType fonts and zip file + +2008-03-24 11:56 +0000 [r653] Stevan_White: + + * notes/maintenance.txt: Added gnupload and info + about tagging + +2008-03-23 18:11 +0000 [r652] Stevan_White: + + * Makefile: no longer needs VPATH on top level + +2008-03-23 18:04 +0000 [r650] Stevan_White: + + * ChangeLog: additions for last few days + +2008-03-23 14:21 +0000 [r649] Stevan_White: + + * FreeSerif.sfd: last problem with Find Problems + -> ATT 'mark' Latin lookup afii10026 is in 'cyrl', also afii10074 + (These are upper and lower Cyrillic i) [Just removed mark from + both letters] 'half' Bengali lookup Khanda_Ta is in 'bng2' [added + bng2 to lookup] + +2008-03-23 13:28 +0000 [r648] Stevan_White: + + * FreeSerif.sfd: added TtTable etc + +2008-03-23 13:15 +0000 [r647] Stevan_White: + + * FreeSerif.sfd: clean-up of Points too Close + through to end of font. This episode completes the paths/points + clean-up of Serif. (But note: many ranges, esp. Ethiopic, + Japanese, and Indic, have way too many points, resulting in + lumpiness.) + +2008-03-23 12:03 +0000 [r646] Stevan_White: + + * FreeSerif.sfd: clean-up of Points too Close + though Arabic + +2008-03-23 11:50 +0000 [r645] Stevan_White: + + * FreeSerif.sfd: clean-up of Points too Close + through Hiragana and Katakana + +2008-03-22 14:43 +0000 [r644] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Mostly additions to FreeSans, + mostly having to do with LaTeX ranges. This basically fills the + LaTeX range for FreeSans, except for extensible brackets etc. + +2008-03-21 23:49 +0000 [r642-643] Stevan_White: + + * Makefile: split Makefile into two levels + + * sfd/Makefile (added): tidier with a lower-level + makefile + +2008-03-21 21:51 +0000 [r641] Stevan_White: + + * Makefile: made quieter + +2008-03-21 20:57 +0000 [r640] Stevan_White: + + * FreeSerif.sfd: in previous commit, hadn't + relly saved the changes about the ligature tables. this does that + also, named the "ciel" and "floor" characters + +2008-03-21 20:50 +0000 [r636-639] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd: (these changes were also + made in the previous few commits of other faces) changed name of + 00B5 from 'mu' to 'micro' changed name of 2206 from 'Delta' to + 'Delta.math' changed name of 0308 from 'diaerisis' to + 'diaerisiscomb' + + * FreeSerif.sfd: split lookup for ligatures in + latin into two classes; ff, ffl, fl which are appropriate for all + languages, and fi, ffi, which are not appropriate in Turkish (due + to distinction between short and long i) + + * FreeMonoBoldOblique.sfd: moved dotlessj from + Corporate Use, deleted commaaccent there mis-named glyphs + tcommaaccent, Tcommaaccent changed name of 030A from 'dieresis' + to 'ringcomb' + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: removed bogus glyphs + for 200C 200D, ZWJ and ZWNJ (zero-width joiner, zero-width + non-joiner) + +2008-03-21 20:20 +0000 [r633-635] Stevan_White: + + * tools/ConvertFont (removed): this was apparently + an older version of GenerateTrueType + + * tools/GenerateTrueType: Took out scaling to 2048 + (was there a good reason for that?) Made to first auto-hint whole + font + + * Makefile: made to work for me + +2008-03-21 15:20 +0000 [r632] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd: Regularized stacking of + accents in Latin Extended Additional + +2008-03-21 15:09 +0000 [r631] Stevan_White: + + * FreeSerif.sfd: everal characters in U+F600 + Corporate Use range dotlessj, onefitted (and other "fitted" + numerals), commaaccent registered, copyright, trademark According + to "Adobe Glyph List" + http://www.tug.org/texlive/Contents/live/texmf-dist/doc/generic/t2/glyphlist.txt + Adobe "fitted" numerals used to go in the corporate use section + More in U+F800 range more corporate symbols represented elsewhere + math braces, brackets move some to 2300 range Now Serif has full + set extensible brackets in Miscellaneous Technical Also, think + I've filled out all of the IPA + +2008-03-21 15:06 +0000 [r629-630] Stevan_White: + + * FreeMono.sfd: Several additions to IPA + Regularized stacking of accents in Latin Extended Additional + + * FreeSans.sfd: egularized stacking of accents + in Latin Extended Additional Added some arrows Some Blackboard + Bold Several characters in U+F600 Corporate Use range dotlessj, + onefitted, commaaccent dotlessj referred to by: jcircumflex, + uni01F0: how to move it? (renamed it to uFFFF, re-linked others + by hand) commaaccent http://diacritics.typo.cz/index.php?id=9 + should be u+0326 but wasn't linked to anything anyway + +2008-03-21 15:01 +0000 [r628] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Got rid of dotlessi + etc single substitution and related ccmp table Regularized + stacking of accents in Latin Extended Additional FreeSansBold + U+0617 etc, read glyphs "4GWglm" It should be arabic. Deleted + +2008-03-19 08:21 +0000 [r627] Stevan_White: + + * ChangeLog: added changes of the 18th + +2008-03-19 00:14 +0000 [r626] Stevan_White: + + * FreeSans.sfd: clean-up of all path issues and + points too close + +2008-03-18 19:52 +0000 [r625] Stevan_White: + + * FreeSans.sfd: Re-ordered the ShortTable, + because when I did autoinstruct on the quadratic version, it did + it this way. + +2008-03-18 19:44 +0000 [r624] Stevan_White: + + * FreeSans.sfd: A ligature referred to a name + with no entry: afii301. This is the Adobe name for zero-width + joiner, U+200D. With this, FontForge's "Find Problems" ATT "Check + for missing glyph names" finally passes. + +2008-03-18 19:41 +0000 [r623] Stevan_White: + + * FreeSans.sfd: zero-width joiner and zero-width + non-joiner both had glyphs, incorrectly. (u+200B 200C) + +2008-03-18 19:33 +0000 [r622] Stevan_White: + + * FreeSans.sfd: Seems one ot the 'pres' tables + contains mixed Devangari and Gujarati. This is probably a + mistake, but re-named the table accordingly, and added the + script. With this, FontForge "Find Problems" for ATT "Check for + missing scripts in features" finally passes. + +2008-03-18 19:24 +0000 [r621] Stevan_White: + + * FreeSans.sfd: removed another 'above' mark + form a greek letter + +2008-03-18 19:14 +0000 [r619-620] Stevan_White: + + * FreeSans.sfd: Likewise a Gugarati lookup had + script DFLT. + + * FreeSans.sfd: 'pres' Pre Base Substitution has + script DFLT. That cannot be right: this contains Devangari + characters. Changed script and name accordingly. This was + probably a mistake and a leftover. + +2008-03-18 19:07 +0000 [r618] Stevan_White: + + * FreeSans.sfd: got rid of "lookup \d\d" in + table names + +2008-03-18 19:01 +0000 [r617] Stevan_White: + + * FreeSans.sfd: The 'aalt' table for Latin + contains only bengali characters. [renamed accordingly, and put + in script 'beng' rather than 'latn'] The table "Ligature + Substitution for Devanagari lookup 46" is really a 'reph'. + Re-named accordingly. The table "'vatu' Vattu Variants lookup 24" + is in script 'DFLT', which is wrong. The characters are from + Gujarati. But there is already such a table for Gujarati. Changed + name and script accordingly. Got rid of Single Substitution + table. + +2008-03-18 18:54 +0000 [r616] Stevan_White: + + * FreeSans.sfd: Think I fixed the problem + causing the FontForge crashes. Related to the dotlessi thing. + There's a table Lookup: 6 0 0 "'ccmp' Glyph + Composition/Decomposition in Latin lookup 0" {"'ccmp' Glyph + Composition/Decomposition in Latin lookup 0 subtable" } ['ccmp' + ('latn' <'dflt' > ) ] It is related to another lookup ChainSub2: + class "'ccmp' Glyph Composition/Decomposition in Latin lookup 0 + subtable" that has something to do with i and j. It ends with + SeqLookup: 0 "Single Substitution lookup 47" EndFPST When I + removed the lookup for i and j, the SeqLookup line would be badly + corrupted, and subsequent saves resulted in a segfault and a + truncated sfd file. So I doctored the whole thing with vi. + +2008-03-18 08:13 +0000 [r615] Stevan_White: + + * FreeSans.sfd: Again got rid of single + substitution lookup changing dotlessi and dotlessj to i and j, + because it's wrong. + +2008-03-18 08:10 +0000 [r614] Stevan_White: + + * FreeSans.sfd: Regress to 1.118. Somehow + introduced a crash. (I wasn't careful enough changing the names + of the lookups, I think--need to make sure the change results in + unique names). + +2008-03-17 23:36 +0000 [r613] Stevan_White: + + * FreeSans.sfd: got rid of single substiturions + of dotlessi dotlessj for i and j. these were just wrong. the + 'aalt' table only contained Bengali, although it said 'latn' and + its name was Latin. Changed name and script to correct. Got rid + of extra Devanagari vatu table + +2008-03-17 23:30 +0000 [r612] Stevan_White: + + * FreeSans.sfd: got rid of 'lookup xx' in table + names + +2008-03-17 23:26 +0000 [r611] Stevan_White: + + * FreeSans.sfd: Removed 'mark' named 'above' + from some Greek and Cyrillic letters, and corrected it for a + couple of diacriticals. + +2008-03-16 20:32 +0000 [r609-610] Stevan_White: + + * CREDITS: clean-up of non-unicode characters + + * CREDITS: converted to UTF-8 + +2008-03-16 20:18 +0000 [r608] Stevan_White: + + * AUTHORS: changed name of maintainer to mine + +2008-03-16 20:09 +0000 [r607] Stevan_White: + + * ChangeLog: compiled changes from CVS log. this is + a messy process. I'm sure I missed a lot. Meant to represent + changes since 02/10. + +2008-03-16 17:29 +0000 [r606] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, FreeMono.sfd, + FreeMonoOblique.sfd: clean-up named some + unnamed characters removed a duplicate + +2008-03-16 13:34 +0000 [r605] Stevan_White: + + * FreeMono.sfd: Added vowels to GPOS 'mark' + lookup table for 'above' added 'below' as well, but only for + c-cedilla + +2008-03-16 12:11 +0000 [r604] Stevan_White: + + * FreeMono.sfd: Much futzing with accents in + Latin extensions, in attempt to make them readable at small + sizes, and to make the glyph bounds reasonable. Note: + A-ring-acute is a silly character. + +2008-03-15 23:16 +0000 [r603] Stevan_White: + + * FreeMono.sfd: path clean-up up to points too + close passes Validation + +2008-03-15 22:43 +0000 [r602] Stevan_White: + + * FreeMonoBoldOblique.sfd: clean-up of path + problems up to points too close + +2008-03-15 22:19 +0000 [r601] Stevan_White: + + * FreeMonoBoldOblique.sfd: Made to Validate + Added points at extrema + +2008-03-15 21:59 +0000 [r600] Stevan_White: + + * FreeSans.sfd: Changed names of a bunch of + glyphs with invalid TrueType names, in response to failed + Validation, and in Windows the font not showing up in the font + display. These were all in the range 0x1025f+, which is an + attempt to take care of combining forms in Indic scripts (I don't + know if this work was ever completed, or if it is the best way to + do this). The names were like uni0916_uni094D.half_uni0928.pres + or longer uni0926_uni094D.half_uni0926_uni094D.half.pres and a + few much longer than this. By a process of removing redundant + information, I think I preserved what information was there. + There were a few more names that were never filled in, but + contained a minus, which isn't valid. These start with + "nonunicode", and I replaced the minus with an underscore. + +2008-03-15 19:55 +0000 [r599] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: some futzing with Combining + Diacriticals + +2008-03-15 19:50 +0000 [r597-598] Stevan_White: + + * FreeSerifBold.sfd: changed WinInfo + + * FreeSerifBoldItalic.sfd: added TtTable + +2008-03-15 16:12 +0000 [r596] Stevan_White: + + * FreeSerif.sfd: Fixed several lookup issues, + based on "Find Problems". TamlCA_TamlSSA.half with ligature from + lookup subtable 'haln' Halant Forms in Tamil lookup 24 subtable + refers to a missing glyph glyph190 Similar complaint with a + 'half' lookup. For this and the other glyph190 issue, I changed + glyph190 to TamlCA_TamlSSA, which looks right according to its + surroundings. The lookup 'aalt' Access All Alternatives i is + active for glyph bn_ekaar which has script 'bng2', yet this + script does not appear in any of the features which apply the + lookup. Similar complaint about bn_aikaar. For this I changed the + script of the lookup to bng2, and changed the name of the lookup + accordingly. The lookup 'liga' standard Ligatures look is active + for glyph uni0937091F which has script 'dev2', yet this script + does not appear in any of the features which apply the lookup. It + makes a ligature of uni0937 and uni091F, which are in Devangari. + So I changed the script of the lookup to 'dev2' and changed the + name of the lookup accordingly. Also shortened the names of many + of the lookup tables. + +2008-03-15 14:31 +0000 [r595] Stevan_White: + + * FreeSerifBoldItalic.sfd: cleanup of path + problems, including points too close + +2008-03-15 14:04 +0000 [r594] Stevan_White: + + * FreeSerifBoldItalic.sfd: clean-up of path + problems, including extrema + +2008-03-15 13:22 +0000 [r593] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: CJK punctuation: made some of + the very high glyphs smaller (under 900EM) The brackets in Sans + were very ugly, and not even Sans-serif. Serif: added extensible + square brackets, diddled with integral corrected direction of + some added glyphs + +2008-03-15 13:13 +0000 [r592] Stevan_White: + + * FreeSansBoldOblique.sfd: added TtTable + +2008-03-15 13:10 +0000 [r591] Stevan_White: + + * FreeSansBoldOblique.sfd: clean-up of path + problems, including points too close + +2008-03-15 09:41 +0000 [r590] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: OS/2 Metrics back to + 900/300 + +2008-03-15 09:35 +0000 [r589] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: OS/2 Metrics back to + 900/300 -- kedit doesn't like offset values + +2008-03-14 23:17 +0000 [r588] Stevan_White: + + * FreeSansBold.sfd, + FreeSansOblique.sfd: added TfTables + +2008-03-14 23:08 +0000 [r587] Stevan_White: + + * FreeSansBold.sfd: clean-up of path problems + extrema self-intersecting ordered PS blue values + +2008-03-14 22:30 +0000 [r586] Stevan_White: + + * FreeSansBold.sfd: got rid of mixed references + and contours + +2008-03-14 22:22 +0000 [r585] Stevan_White: + + * FreeSansOblique.sfd: much clean-up of "points + too close" + +2008-03-14 21:18 +0000 [r584] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: unified OS/2 Metrics + added Grid Fit added slated-hyphen to Sans + +2008-03-14 19:35 +0000 [r583] Stevan_White: + + * FreeSerif.sfd: in response to Validate, + changed names of three glyphs in the Tamil ligatures range...all + clearly bugs. + +2008-03-14 19:18 +0000 [r582] Stevan_White: + + * FreeSerif.sfd: cleanup of many path problems + "points too close" + +2008-03-14 07:26 +0000 [r581] Stevan_White: + + * FreeSerif.sfd: in response to validate + results, fixed a few glyphs + +2008-03-14 07:19 +0000 [r580] Stevan_White: + + * FreeSerif.sfd: got rid of mixed references and + contours + +2008-03-14 00:05 +0000 [r579] Stevan_White: + + * FreeSerif.sfd: changed OS/2 metrics various + other clean-ups + +2008-03-13 23:43 +0000 [r578] Stevan_White: + + * FreeMonoBoldOblique.sfd: added TtTable + +2008-03-13 23:39 +0000 [r577] Stevan_White: + + * FreeMonoBoldOblique.sfd: got rid of mixed ref + and contour + +2008-03-13 23:33 +0000 [r576] Stevan_White: + + * FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: removed PS Private + StemSnapV, which was empty anyway. + +2008-03-13 23:28 +0000 [r574-575] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: added Grid Fit tables + + * FreeMono.sfd: change OS/2 metrics to 900/300 + +2008-03-13 23:19 +0000 [r573] Stevan_White: + + * FreeSerifItalic.sfd: added TtTable, ShortTable + +2008-03-13 23:15 +0000 [r572] Stevan_White: + + * FreeSerifItalic.sfd: Removed PS Private + StemSnapV -- wasn't right anyway added Grid Fitting made better + OS/2 metrics + +2008-03-13 23:06 +0000 [r571] Stevan_White: + + * FreeSerifItalic.sfd: further path cleanup: + points too close together. in Bengli range, much yet to do + +2008-03-13 20:00 +0000 [r569-570] Stevan_White: + + * FreeMonoOblique.sfd: cleaned up remaining path + problems, missing extrema fixed some math characters + + * FreeMonoBold.sfd: cleaned up path problems, + and mixed refs and contours added TfTable + +2008-03-13 08:25 +0000 [r568] Stevan_White: + + * FreeSerifItalic.sfd: path clean-up more + self-intersecting added many missing extrema fixed mixed + references and glyphs + +2008-03-12 23:11 +0000 [r567] Stevan_White: + + * FreeSans.sfd: Rearranged PS BluesValues so + they were in increasing order, made all 20 in width. In response + to FontForge Validate complaint, in hopes of making font work in + Windows. + +2008-03-12 22:45 +0000 [r566] Stevan_White: + + * FreeMono.sfd: Copied in by hand TrueType + tables from a version with quadratic splines. I hope this will + make the glyphs smooth properly in Windows. + +2008-03-12 22:41 +0000 [r565] Stevan_White: + + * FreeSans.sfd: Added TrueType tables (copied in + by hand from version with quadratic splines) + +2008-03-12 22:34 +0000 [r563-564] Stevan_White: + + * FreeSans.sfd: clean-up tweek + + * FreeSans.sfd: Got rid of mixed contours and + refs + +2008-03-12 22:18 +0000 [r562] Stevan_White: + + * FreeMono.sfd: two more glyphs with quadratic + problems + +2008-03-12 22:07 +0000 [r561] Stevan_White: + + * FreeMono.sfd: a few paths that don't convert + well to quadratics + +2008-03-12 21:45 +0000 [r560] Stevan_White: + + * FreeMono.sfd: Fixed glyphs with mixed contours + and references + +2008-03-12 01:05 +0000 [r559] Stevan_White: + + * FreeSerifBoldItalic.sfd: cleanup of path + problems as others + +2008-03-12 00:51 +0000 [r558] Stevan_White: + + * FreeSerifItalic.sfd: cleanup of path problems + as others + +2008-03-12 00:08 +0000 [r557] Stevan_White: + + * FreeSerifBold.sfd: cleanup of path problems + open intersecting clockwise ref reversed points outside glyph + removed hints + +2008-03-11 23:13 +0000 [r556] Stevan_White: + + * FreeMonoBoldOblique.sfd: cleanup of path + problems open intersecting clockwise flipped ref points beyond + spline removed hints + +2008-03-11 22:59 +0000 [r555] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoOblique.sfd: cleanup of path problems + open paths intersecting clockwise flipped references points + beyond glyph removed hints + +2008-03-11 22:31 +0000 [r554] Stevan_White: + + * FreeSansBoldOblique.sfd: cleanup of path + problems open intersecting clockwise flipped references beyond + spline + +2008-03-11 21:51 +0000 [r553] Stevan_White: + + * FreeSansBold.sfd: clean-up of path problems + open intersecting clockwise flipped references control points + beyond spline removed hints + +2008-03-11 21:46 +0000 [r552] Stevan_White: + + * FreeSansOblique.sfd: clean-up of path and + reference problems open paths intersecting clockwise flipped refs + removed hints + +2008-03-09 20:58 +0000 [r551] Stevan_White: + + * FreeSerif.sfd: continuing general clean-up, + Found several ligatures that referred to a missing glyph "ZWJ". + Took this to mean the "zero width joiner" u+200D There are a + couple more cases in Tamil, but I don't know the glyph they're + referring to. + +2008-03-09 14:27 +0000 [r550] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd: further cleanup of path/ref + problems + +2008-03-09 14:08 +0000 [r549] Stevan_White: + + * FreeMono.sfd: clean-up of path problems + +2008-03-09 14:00 +0000 [r548] Stevan_White: + + * FreeMono.sfd: Efforts to make legible at 9pt. + At 8pt, glyphs are at least distinct. + +2008-03-09 12:53 +0000 [r547] Stevan_White: + + * FreeMono.sfd: math symbols: set for LaTeX 2e + seems to be all there. To do: improve legibility at 9pt. Some + double-arrows are just a blur. + +2008-03-09 12:18 +0000 [r546] Stevan_White: + + * FreeMono.sfd: more math characters corrected + logical 'assert' relations, etc. 22a2-22af + +2008-03-09 10:41 +0000 [r544-545] Stevan_White: + + * FreeSerif.sfd: corrected L-dot + + * FreeSerifItalic.sfd, + FreeMono.sfd, + FreeSerif.sfd: Math symbols ============ + SerifItalic Greek lunate epsilon FreeMono many additions in math + range reduced size of binary union, intersection, vee, wedge + correcte empty set + +2008-03-08 23:22 +0000 [r543] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: FreeSans added Greek lunate + epsilon and rho symbol both un-stacked some more stacked + diacriticals + +2008-03-08 22:41 +0000 [r542] Stevan_White: + + * FreeSans.sfd: Clean-up of font paths open + self-intersecting outermost clockwise missing extrema also + flipped references (unlinked) + +2008-03-08 18:17 +0000 [r541] Stevan_White: + + * FreeSerif.sfd: Added lunate epsilon Corrected + empty set tightened up spacing of some other technical characters + worked on some more math operators involving = + +2008-03-08 15:11 +0000 [r540] Stevan_White: + + * FreeSerif.sfd: Added several math operators + used by LaTeX 2e triangle several arrows arrowhookleft + arrowhookright Supplemental Arrows-A long left arrow long right + arrow long leftright arrow long left double arrow long right + double arrow long leftright double arrow long left arrow with + flat tail long right arrow with flat tail + +2008-03-08 13:11 +0000 [r539] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Supplemental Math operators + ============== Added a few of the "n-ary" operators. Math + operators ============== Corrected n-ary union, intersection, and + spikes to be larger than the binary operators Made (many of) the + operators based on + - = to use those symbols directly (by + reference or copying). I think it is good practice to harmonize + the appearance of math operators with the Latin character set. + Geometrical Shapes ================== Made the large circle + larger still. When is it large enough? Combining marks for + Symbols =========================== Made the combining circle to + really combine. Made a circle-slash + +2008-03-08 10:15 +0000 [r538] Stevan_White: + + * FreeSerif.sfd: Clean-up of path problems + intersecting paths missing extrema outer path clockwise Many + changes in Bengali, Ethiopic ranges. These could really use + further clean-up. Added 'divides' and 'not divides' + +2008-03-08 10:10 +0000 [r537] Stevan_White: + + * FreeMono.sfd: Added Grid Fit "GASP" table + Clean-up of contour problems: open paths intersecting paths (esp. + those of references) outermost paths clockwise missing extrema + Also references problems fipped refs tt (TrueType) transformation + matrix problems Did same process of un-stacking some accents in + Latin Extended range as done for Serif. Made combining + diacritical 'hook' to be shorter. (Should have been multiple + commits...I know) + +2008-03-06 18:58 +0000 [r536] Stevan_White: + + * FreeSerif.sfd: Shortened and thickened the + combining hook mark, U+0309, thus shortening many combined + characters and making it look more like the Unicode samples. Then + touched on bug #22499 Latin Extended Additionals incorrectly + stack accents At least in this face, un-stacked + incorrectly-stacked marks. + +2008-03-05 22:01 +0000 [r535] Stevan_White: + + * FreeSerif.sfd: Fixed positioning U+1EC8, 9, I + with hook above + +2008-03-05 21:45 +0000 [r534] Stevan_White: + + * FreeSerif.sfd: added spacing modifier letters + 02B9 02Ba prime and double-prime + +2008-03-05 21:36 +0000 [r533] Stevan_White: + + * FreeSerif.sfd: vertical lines: combining + diacritical marks corrected 0300 030D 0329 0348 (were rendered as + straight apostrophes) spacing modifier letters added 02C8 02CC + +2008-03-05 20:20 +0000 [r532] Stevan_White: + + * FreeSerif.sfd: Reverses 1.90. I regretted 1.90 + before while and after doing it. + +2008-03-04 20:47 +0000 [r531] Stevan_White: + + * FreeSerif.sfd: Some modifications to Spacing + Modifier Letters 02B0 - 02FF Idea was to bring in line with + Unicode that suggests that these characters should all occupy the + width of a space in the font, here, 250 EM. Unfortunate + side-effects in hundreds of characters that used them. Hope I got + them all. + +2008-03-03 20:01 +0000 [r530] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Set the OS/2 Sup/Sub + settings, which by default looked like random trash. I don't know + if it really helps but it looks better. + +2008-03-03 00:13 +0000 [r529] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: TTY strings updates + Updated Copyright to 2008 Added Vendor URL as the Savannah + freefont site Added a standard pangram as the Sample Text for + Russian in FreeMono*. It reads: In the thickets of the South once + there was a citrus...--yes, but a fake specimen! + +2008-03-02 22:50 +0000 [r528] Stevan_White: + + * FreeMono.sfd: Completed fix of glyph path + problems open path intersecting not clockwise missing extrema Had + to remove one glyph, because couldn't figure out how to make it + not intersect itself: dkshade U+2193, a checkerboard (probably + should be re-done as non-intersecting squares). Also, lowered the + diacritics on a bunch of capital Latin letters, so they didn't + have to intersect when stacked. Act of desperation? + +2008-03-02 21:37 +0000 [r527] Stevan_White: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansBoldOblique.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Clean sweep, fixing + all open glyph contours. + +2008-03-02 20:13 +0000 [r526] Stevan_White: + + * FreeSans.sfd: Parital clean-up of glyph path + problems open paths some of intersecting paths There are many + more instances of intersecting paths. The Bengali range is + particularly affected. + +2008-03-02 19:14 +0000 [r525] Stevan_White: + + * FreeMonoBold.sfd: Cleaned up glyph path + problems open paths intersecting paths not clockwise missing + extrema + +2008-03-02 15:48 +0000 [r524] Stevan_White: + + * FreeMono.sfd: Fixed most glyph path problems. + Open path path direction extrema There are still a few + intersecting paths... + +2008-03-02 12:31 +0000 [r523] Stevan_White: + + * FreeSerif.sfd: Clean-up of problems found by + FontForge "Find Problems". Fixed all problems with Open Paths + Intersecting Paths Check outermost paths clockwise With Check + missing extrema there were lots of problems, and it's very + fiddly. I got up through the Arabic range, but pooped out in the + Indian scripts. Note: Most of the problems were plainly mistakes, + or problems that cropped up after some transformation of the + glyph. Others seem to be the result of freehand drawing or + scanning. More info at: bug #22454: Path bugs in FreeSerif + +2008-03-01 21:14 +0000 [r522] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Removed all back + layers from glyphs that had them. In most cases, this layer had + been used as a guide, slightly modified to make the front layer. + Sometimes it was just a mistake. This remedies bug #22381: Some + characters have "ghost" glyphs in back layer + https://savannah.gnu.org/bugs/index.php?22381 However, this is + bound to happen again. It would be good to have a script that + checks, or maybe a facility in FontForge's "Find Problems". + +2008-03-01 10:20 +0000 [r521] Stevan_White: + + * FreeSerif.sfd: Arabic now seems to be working, + in a limited way, for display of modern text. Remedy for: bug + #22329: Arabic not really working + https://savannah.gnu.org/bugs/index.php?22329 * Drew several + glyphs for special forms of yeh * Drew sukun combining + diacritical * Made some diacritical combining marks to be + properly zero width. * Added 'init' 'medi' 'fina' tables to + convert letters to their initial, medial, and final forms within + words. * Added 'rlig' table for required ligatures of lam and + alif * Constructed the lam-alif ligatures. Not done: * may be + more required ligatures of lam and alif * other common ligatures + * 'mark' table for better positioning of diacriticals * 'mark' + table for positioning vowels * 'locl' table for localized forms + of certain letters * 'ccmp' table for decomposing ligatures Also + (nothing to do with Arabic): moved some glyphs 02d4-02D7 up. + +2008-02-27 22:45 +0000 [r520] Stevan_White: + + * FreeSerif.sfd: Shifted entire Arabic alphabet + down by 200EM, so it shares the common baseline. I hope. Arabic + Arabic Presetation Forms + +2008-02-27 22:26 +0000 [r519] Stevan_White: + + * FreeSans.sfd: Filled out Combining Diacritical + Forms in Sans + +2008-02-27 22:02 +0000 [r518] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: more tweeks to Combining + Diacritical Forms + +2008-02-27 08:38 +0000 [r517] Stevan_White: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd: Combinint diacriticals range + Mostly filled Sans. The rest are tweeks. + +2008-02-26 00:12 +0000 [r516] Stevan_White: + + * FreeSerif.sfd: More tweeks to combining + diacriticals. added DPOS 'mark' tables for Latin below topright + ogonek and put corresponding marks in many Latin letters + +2008-02-24 11:57 +0000 [r515] Stevan_White: + + * FreeSerif.sfd: Some tweeks to previous commit. + +2008-02-24 11:34 +0000 [r514] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Much fiddling with the + "combining diacriticals" range 0300-036F. More info: see bug + #22331: combining diacriticals are misplaced in FreeSerif Filled + in for Serif. Also tidied diacriticals in some of the other + faces. Made to align to medium-sized preceding character, when + not using anchor marks. Added "above" marks where needed. To do: + add "below" table and marks. + +2008-02-23 18:30 +0000 [r513] Stevan_White: + + * FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Continued programme + of filling HTML Character Entities in Mono. I think there are + still a few missing, but I don't have an easy way to tell... + Anyway, it's looking good. + +2008-02-23 13:43 +0000 [r512] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Unified and corrected + combining diacritical marks U+0360-1 where they existed. Also + tidied some of the "tie" marks. These glyphs have width 0. I'm + not sure that is the best way to approach the problem of + combining marks, but I see other fonts that do the same. + +2008-02-23 12:58 +0000 [r511] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Checked U+203F, U+2040 (tie + and undertie). Mostly the tie was too low. + +2008-02-23 11:55 +0000 [r510] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: Made "HTML 4 Character + Entities" complete for normal-style faces. Partial remedy for bug + #21784: missing glyphs for HTML 4 character entities + https://savannah.gnu.org/bugs/?21784 Main things remaining: do + similar process for bold and oblique forms. ----- notes + ----------- Filled out several typographic spaces in Sans and + Mono U+2000, etc. Mono made Rfraktur Mono made 'angle' Mono + copied cards suites from FreeSerif and scaled to fit Sans drew + upsilon-hook. Sans constructed omegapi from omega and a minus + Sans made overline Sans flat copied cards suites from FreeSerif + (maybe not "sans" enough?) Sans 'similar' didn't look like other + such symbols and was much skinnier Sans made several symbols to + be references to 'similar' Sans made 'congruent' Sans made + reference to aleph from alephmath Sans angleleft and angleright + brackets just copied from Serif (in which they look too angular) + Sans "subset" is too high and looks like a letter C. Made to be a + tad higher than small letter Sans notin doesn't look like isin: + 'element' 2208 is the height of a capital. Fixed this, and used + references to better effect. Sans weierstrass p: copied from Mono + (where its style doesn't fit anyway), and widened the stroke + -------- other notes ----------------- better check Sans 0361 + also doubt 223E is right What is to be done about that? Serif + 2040 tie is low...didn't I fix this? Sans Rfraktur and Ifraktur + are not sans-serif. Overall, many Sans math symbols are much + thinner than seems to fit. Sans surprises me not all the + "equals"-like characters are made from "minus" Sans "period" is a + square. (Don't like the dot operator being a square, but that + would be consistent.) Serif ceil and floor glyphs are not high + enough + +2008-02-21 21:28 +0000 [r509] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: In previous commit, + changed Font Info -> OS/2 -> Vendor ID to GNU Repeated that for + the remaining fonts. + +2008-02-21 21:01 +0000 [r508] Stevan_White: + + * FreeSans.sfd, FreeMono.sfd, + FreeSerif.sfd: Worked toward extended integral + signs. U+2320 TOP HALF INTEGRAL U+23AE INTEGRAL EXTENSION U+2321 + BOTTOM HALF INTEGRAL Regarding bug #13370: INTEGRAL EXTENSION + does not align with TOP/BOTTOM HALF INTEGRAL + https://savannah.gnu.org/bugs/?13370 Hope was to make the three + pieces precisely match up. But the horizontal space eludes me. + There is still a tiny gap, althogh I have made the parts slightly + longer than they ought to be. Also, FreeMono is still not + advertizing that it supports "Miscellaneous Technical Symbols", + although FontForge shows it selected in Font Info->OS/2. + +2008-02-21 00:46 +0000 [r507] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Moved capital Greeek + letters with tonos so tonos doesn't cover preceding letter + Partial remedy for bug #12798: some combined Greek characters + have a bug https://savannah.gnu.org/bugs/index.php?12798 Only + deals with range 0380 - 03df (Greek). More needs to be done in + Greek Extended range. + +2008-02-20 21:57 +0000 [r506] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Made Greek 'tonos' to + be the same as combining accent acute Remedy for bug #12821: + FreeSerif has Greek tonos different than Greek acute + https://savannah.gnu.org/bugs/index.php?12821 In some cases, just + made a reference to U+0301 (combining accent acute) of U+0384 + (Greek tonos). The characters that used tonos were linked to + that. In many cases, this cause spacing problems, which were also + fixed + +2008-02-20 19:50 +0000 [r505] Stevan_White: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Tweeks to curly quotes of + previous commit + +2008-02-20 08:52 +0000 [r504] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Made proper curly + quotes of U2018 - U201F in monospace fonts (removed incorrect + reference in some straight quotes U2033... Remedies bug #18300: + FreeMono has the wrong quote marks ‘ (U+2018) and “ (U+201C) + https://savannah.gnu.org/bugs/index.php?18300 + +2008-02-19 23:17 +0000 [r503] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: This touches on two + bug reports with interrelated glyphs bug #20278: Vertical offset + of superscripted numerical digits Some vertical offset problems, + lots more horizontal ones. Changes also impacted vulgar + fractions, so had to fix those too. bug #17756: possible printing + problem with vulgar fractions. . . . + https://savannah.gnu.org/bugs/index.php?17756 I think this was a + case of front and back layers inadvertently both having glyphs in + them. Removed the ones I found, and tidied up all vulgar + fractions + +2008-02-18 23:21 +0000 [r502] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Added to FreeSerif* uni2E17 + double hyphen In pursuit of bug #22267: Request Double-Hyphen + Sign https://savannah.gnu.org/bugs/?22267 + +2008-02-18 22:37 +0000 [r501] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: unified 'liga' for Latin: + now only ff ffi ffl fi fl Other ligatures should be put in dlig, + hlig, etc. Removed such as Lj, DZ. I don't thing these are + ligatures. (Am I wrong? the glyphs aren't modified...) + +2008-02-18 08:33 +0000 [r500] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerif.sfd: Slightly increased the height + of Cyrillic О (U+0438) to be even with other similar glyphs + (e.g. U+043D) Remedies bug #22289: The Cyrillic О letter in + FreeSerif isn't high enough + https://savannah.gnu.org/bugs/index.php?22289 + +2008-02-18 08:18 +0000 [r499] Stevan_White: + + * FreeSans.sfd, + FreeSerif.sfd: Made U+30FB, KATAKANA MIDDLE + DOT to be same width as other Katakana. Remedies bug #18326: ・ + (U+30FB, KATAKANA MIDDLE DOT) should be fullwidth + https://savannah.gnu.org/bugs/index.php?18326 + +2008-02-18 08:02 +0000 [r498] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Moved U+203F UNDERTIE to be + below the baseline, as it should be. See + http://www.unicode.org/charts/PDF/U2000.pdf Remedy for bug + #18413: U+203F UNDERTIE glyph too high in FreeSerif + https://savannah.gnu.org/bugs/?18413 + +2008-02-18 01:19 +0000 [r497] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Re-promoted ff ffi ffl fi + fl as standard ligatures in Latin. Made st ligature historical, + if anything. Cleaned up some silly ligatures (Roman numerals as + ligatures, etc) There is more to be done here, just for Latin + ligatures. + +2008-02-17 23:41 +0000 [r496] Stevan_White: + + * FreeSans.sfd: Offset Hiragana and Katakana + ranges of FreeSans as in + https://savannah.gnu.org/bugs/index.php?22326 + +2008-02-17 23:34 +0000 [r495] Stevan_White: + + * FreeSerif.sfd, + FreeSerifBold.sfd: Corrected vertical offset + of Hiragana and Katakana, cf + https://savannah.gnu.org/bugs/index.php?22326 (with advice from + Kenshi Muto) + +2008-02-17 23:26 +0000 [r494] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Auto-Hinted + everything. The auto-hinting in the new FontForge is said to be + (and seems to me to be) much better than in previous versions. + +2008-02-17 23:16 +0000 [r493] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: TT Info -> + Manufacturer = GNU + +2008-02-17 22:58 +0000 [r492] Stevan_White: + + * FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Updated FontForge SFD + file version to SplineFontDB: 2.0 using FontFOrge 20080214 This + is a very big change, with which we can carry on with the new + FontForge. + +2008-02-17 22:20 +0000 [r491] Stevan_White: + + * FreeSerif.sfd: This removes the georgian-d + patch of revision 1.58. I can't imagine what went on here. Maybe + I somehow got the patch inverted. Anyway, after the patch, 10e6 + and 10d3 are indistinguishable, which is wrong, according to + http://www.unicode.org/charts/PDF/U10A0.pdf Without the patch, + they seem to be correct. + +2008-02-14 23:36 +0000 [r490] Stevan_White: + + * INSTALL: Instructions for KDE local installation + Instructions for Windows Vista + +2008-02-11 22:55 +0000 [r489] Stevan_White: + + * FreeSerif.sfd: This is from an anonymous patch + patch #5924: correct postscript name for cyrillic yat' Wednesday + 05/09/2007 at 18:25 (now bug #22265: correct postscript name for + cyrillic yat') The postscript name of the two cyrillic letters + yat' and YAT' (0x0462) is not correct, so this fixes it: I found + confirmation of the PostScript names here + http://www.adobe.com/devnet/font/pdfs/5013.Cyrillic_Font_Spec.pdf + +2008-02-11 20:06 +0000 [r488] Stevan_White: + + * README: Made status of Microsoft core web fonts a + little clearer. + +2008-02-10 19:50 +0000 [r486] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Apply patch + 011_liga_to_dlig by Christian Perrier from Debian sources. I am + not quite sure which bug this is meant to fix, but it is most + like bug #15792: Freefont Alef and Lamed combine although this + patch is not the patch included in that bug report. (The report + was closed...no indication if any action was taken.) This is the + last outstanding patch from the Debian sources for ttf-freefont + found in ttf-freefont-20060501cvs-12.diff That is, the SVD files + of this project should now match the ones used to build the + Debian ttf-freefont fonts. + +2008-02-10 19:38 +0000 [r483-485] Stevan_White: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Apply patch + 009_freemono_really_mono by Christian Perrier from Debian sources + meant to remedy bug #17062: Erroneous Georgian D in FreeSerif + reported by Christian Perrier + + * FreeSerif.sfd: Apply patch 008_georgian_d by + Christian Perrier from Debian sources, meant to remedy bug + #17062: Erroneous Georgian D in FreeSerif + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Apply patch + 007_horizontal_spacing by Christian Perrier from Debian sources, + which is meant to remedy bug #17038: horizontal spacing bug in + freemono reported by Christian Perrier + +2008-02-10 19:28 +0000 [r482] Stevan_White: + + * FreeMono.sfd: Apply the patch + 006_remove-russian-sample by Christian Perrier from the Debian + sources that remedies bug #15791 Weird strings in freefont fonts + reported by Christian Perrier Note this change had previously + been made by Primoz Peterlin. The problem was that the Russian + string had somehow become corrupted. I may replace it with a + correctly encoded version in the future. + +2008-02-10 19:23 +0000 [r481] Stevan_White: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Apply patch + 004_workaround-spacing-bug by Christian Perrier, from the Debian + sources which is meant as a (partial) remedy for bug #15956: Line + height is too big in sans and serif reported by Eeli Kaikkonen + Thanks also to Jan Willem Stumpel + +2008-02-10 19:12 +0000 [r479-480] Stevan_White: + + * FreeMono.sfd: In preparation for merge with + Debian sources, which date from 2006-05-01, remove this commit, + which was RCS file: /sources/freefont/freefont/FreeMono.sfd,v + revision 1.28 date: 2006-05-04 15:54:45 +0200; author: peterlin; + state: Exp; lines: +3 -3; Deleted messy Russian sample text from + FreeMono. The Debian diffs already contain this patch, so it will + not get re-applied. Note: I also found the Russian string that + somehow got corrupted, and may well re-insert it later, because I + like it. + + * FreeSans.sfd: In preparation for merge with + Debian sources which date from 2006-05-01, un-do this commit, + which was revision 1.80 date: 2006-05-01 14:42:53 +0200; author: + moyogo; state: Exp; lines: +72 -36; replaced U+2134 Plan to apply + the Debian patches, then re-apply this one. + +2008-02-03 09:50 +0000 [r478] Stevan_White: + + * README: updated URLs corrected spelling errors + added reference to DejaVu (Bitstream Vera) fonts removed + reference to ttfedit, which seems no longer to exist updated + freefont URL added Steve White + +2008-01-22 18:35 +0000 [r476-477] Stevan_White: + + * test (removed): remove the test file + + * test (added): test to see if I can really commit + with the new account + +2006-09-20 11:37 +0000 [r475] peterlin: + + * INSTALL, ChangeLog: * INSTALL: + added installation procedure for MacOS X, courtesy Philipp + Kempgen. + +2006-05-04 13:54 +0000 [r474] peterlin: + + * ChangeLog, FreeMono.sfd: + Deleted messy Russian sample text from FreeMono. + +2006-05-01 12:42 +0000 [r473] moyogo: + + * FreeSans.sfd: replaced U+2134 + +2006-04-15 21:49 +0000 [r472] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSerif.sfd: * FreeSerif.sfd: corrected + U+10D3. * FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE + S T) changed from mandatory ("liga") to discretionary ("dlig") + (bug #16253). + +2006-04-15 21:01 +0000 [r471] peterlin: + + * ChangeLog, FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: * FreeMono.sfd: + deleted incomplete glyph U+FB06 (LATIN SMALL LIGATURE S T); + deleted U+FB00, U+FB01, U+FB02, U+FB05 as ligatures. * + FreeMonoOblique.sfd, FreeMonoBoldOblique.sfd: added + U+FB00; deleted U+FB01, U+FB02 as ligatures. * + FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as + ligatures. + +2006-04-15 20:21 +0000 [r470] peterlin: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added Georgian + letters, donated by Gia Shervashidze. + +2006-02-22 22:57 +0000 [r469] peterlin: + + * ChangeLog, FreeMono.sfd, + FreeMonoOblique.sfd: * FreeMono.sfd, + FreeMonoOblique.sfd: ligature U+FB4F changed from mandatory + ("liga") to discretionary ("dlig"). This is respons to + Bug#349657: [bug #15792] Freefont Alef and Lamed combine + +2006-02-21 00:23 +0000 [r468] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeSerifBold.sfd: * FreeSerifBold.sfd, + FreeSans.sfd, FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, FreeSansBold.sfd: ligature + U+FB4F changed from mandatory ("liga") to discretionary ("dlig"). + This is respons to Bug#349657: [bug #15792] Freefont Alef and + Lamed combine + +2006-02-20 23:13 +0000 [r467] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif + glyphs for U+2198/U+2199 were reversed. + +2006-02-14 23:09 +0000 [r466] moyogo: + + * ChangeLog, FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: * removed ij and IJ + ligature substitutions + +2006-02-10 22:13 +0000 [r465] peterlin: + + * AUTHORS, ChangeLog, + CREDITS, FreeSerif.sfd: * + FreeSerif.sfd: added small Georgian letters (mkhedruli), + donated by Gia Shervashidze * AUTHORS: Added Gia Shervashidze * + CREDITS: Added Gia Shervashidze + +2006-01-30 23:07 +0000 [r464] peterlin: + + * ChangeLog, notes/maintenance.txt: + notes/maintenance.txt - login as "anonymous" + +2006-01-26 22:32 +0000 [r462] peterlin: + + * ChangeLog, notes/maintenance.txt: * + notes/maintenance.txt: Added information on the Makefile now + used. + +2006-01-26 22:12 +0000 [r461] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B, + U+0586. Armenian small letters completed. + +2006-01-26 15:44 +0000 [r460] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions + section is now complete. Copied a dozen of glyphs from Omega IPA + to Phonetic Extension section. + +2006-01-25 23:01 +0000 [r459] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA, + U+01BB, U+01BE, U+01BF. + +2006-01-25 12:44 +0000 [r458] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: aligned small Armenian letters to x-height in + response to bug #15480. Armenian in Free Sans needs a major + cleanup. + +2006-01-24 23:39 +0000 [r457] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460, + U+0461, U+04Bc, U+04BD, U+0508. + +2006-01-24 12:18 +0000 [r456] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd: changed U+0285. + +2006-01-24 12:01 +0000 [r455] peterlin: + + * ChangeLog, FreeSansOblique.sfd: + * FreeSansOblique.sfd: replaced accented chars in Latin-1 and + Latin Extended-B sections with references, where possible. + +2006-01-23 22:13 +0000 [r454] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSansOblique.sfd: * FreeSans.sfd: added + U+0195, U+01AA, U+0297, U+03D7, U+03F0. Several flipped + references replaced by outlines. * FreeSansOblique.sfd: Latin + Extended-B section more or less brought in sync with FreeSans. + +2006-01-23 15:33 +0000 [r453] peterlin: + + * ChangeLog, + FreeMonoBoldOblique.sfd: * + FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in + the Latin Extended-B and IPA Extensions sections. + +2006-01-23 14:44 +0000 [r452] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7, + U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in + the Cyrillic region with references. + +2006-01-20 23:37 +0000 [r451] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: Deleted spurious glyphs in the control code + area. + +2006-01-20 23:27 +0000 [r450] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286, U+029D. + Changed U+0261. + +2006-01-19 22:00 +0000 [r449] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with + AnmolUni by Kulbir Singh Thind. + +2006-01-17 22:10 +0000 [r448] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6, + U+01BE, U+0262, U+02A2. + +2006-01-17 14:07 +0000 [r447] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd: Changed U+0261 in order to distinguish it + from U+0067. Changed U+0251, U+0252. + +2006-01-17 13:26 +0000 [r446] peterlin: + + * ChangeLog, + FreeSerifBoldItalic.sfd: * + FreeSerifBold.sfd: Small changes in the Cyrillic section. + Added U+0183, U+018C. + +2006-01-17 10:18 +0000 [r445] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: Added U+2045, U+2046. + +2006-01-17 10:02 +0000 [r444] peterlin: + + * AUTHORS, ChangeLog, + CREDITS, FreeSansBold.sfd: * + FreeSansBold.sfd: Filled in the Gurkmukhi part with the + AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections + in the Cyrillic part. * CREDITS: Added Kulbir Singh Thind. * + AUTHORS: Added Kulbir Singh Thind. + +2006-01-14 18:09 +0000 [r443] peterlin: + + * AUTHORS, ChangeLog, + CREDITS, FreeSerif.sfd: * + FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced by + the ones released by the Samyak font project. * CREDITS: Added + Pravin Satpute, Bageshri Salvi, Rahul Bhalerao and Sandeep + Shedmake * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul + Bhalerao and Sandeep Shedmake + +2006-01-08 14:12 +0000 [r442] peterlin: + + * ChangeLog, FreeSansBold.sfd, + FreeMonoBoldOblique.sfd: FreeSansBold.sfd, + FreeMonoBoldOblique.sfd: minor changes + +2006-01-05 22:18 +0000 [r441] peterlin: + + * ChangeLog: Noted moyogo's modifications in + ChangeLog as well. + +2006-01-05 16:12 +0000 [r440] moyogo: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: added cedi sign + U+20B5, Ghanaian currency + +2006-01-05 15:55 +0000 [r439] moyogo: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: added cedi sign U+20B5, + Ghanaian currency + +2006-01-05 15:44 +0000 [r438] moyogo: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: added cedi sign + U+20B5, Ghanaian currency + +2005-12-29 14:39 +0000 [r437] peterlin: + + * ChangeLog, FreeSans.sfd: + FreeSans.sfd: minor cleanup in the Gujarati part. + +2005-12-22 12:46 +0000 [r436] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: Devanagari and Gujarati parts cleared; once + again merged with Gargi 1.9 and Padmaa 0.6, this time correctly + so that the anchor points survived the merger. + +2005-12-16 15:48 +0000 [r435] peterlin: + + * ChangeLog, FreeSansBold.sfd: + FreeSansBold.sfd: added U+0577. + +2005-12-15 09:26 +0000 [r434] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd: * FreeSans.sfd: added + U+0559, U+055F, U+2024. * FreeSansBold.sfd: added U+056E, + U+0573. + +2005-12-14 10:07 +0000 [r433] peterlin: + + * AUTHORS, ChangeLog, + CREDITS, FreeSans.sfd: * + FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6, courtesy + Monika Shah and Sonali Sonania from C-DAC, Mumbai. * CREDITS: + Added Monika Shah and Sonali Sonania. * AUTHORS: Added Monika + Shah and Sonali Sonania. + +2005-12-13 13:34 +0000 [r432] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSerif.sfd: * FreeSans.sfd - Removed + Sinhala glyphs. * FreeSerif.sfd - Added Sinhala glyphs, + formerly in FreeSans. + +2005-12-09 10:04 +0000 [r431] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO + SIGN) + +2005-12-09 09:34 +0000 [r430] peterlin: + + * ChangeLog, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: * FreeSerifBold.sfd: + added more glyphs from Txfonts to the Arrows and Mathematical + Symbols ranges. * FreeSerifBoldItalic.sfd: added U+03F5 from + Txfonts. + +2005-12-09 08:54 +0000 [r429] peterlin: + + * tools/freefont-ttf.spec (added): Specification + file for building a RPM package, courtesy Rok Papez. + +2005-12-08 14:58 +0000 [r428] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582. + +2005-12-08 14:19 +0000 [r427] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd: copied Box Drawing range from FreeSans. + +2005-12-08 13:13 +0000 [r426] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows + and Mathematical Symbols ranges. + +2005-12-08 09:59 +0000 [r425] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B, + U+2322-2323. Cyrillic composite characters replaced with + references. + +2005-12-07 23:30 +0000 [r424] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B, + U+02AE, U+02AF, U+02DE. + +2005-12-07 22:20 +0000 [r423] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd: updated Hebrew part with Drugulin font + from the Culmus project. + +2005-12-07 20:54 +0000 [r422] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216. + +2005-12-07 15:12 +0000 [r421] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: added U+ U+2320 TOP HALF INTEGRAL, U+23AE + INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370). + +2005-12-06 23:17 +0000 [r420] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started + adding "below" anchors. Performed hinting on characters that were + not hinted "en masse". + +2005-12-06 16:02 +0000 [r419] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: fixed some more metrics problems in the + Extended Greek area; performed hinting on characters that were + not hinted "en masse". + +2005-12-06 10:52 +0000 [r418] peterlin: + + * ChangeLog, Makefile: * Makefile: + clean also signature files. + +2005-12-06 09:46 +0000 [r416] peterlin: + + * ChangeLog, FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: * + FreeMonoBoldOblique.sfd, FreeMonoBold.sfd: cosmetic + changes; cleaning background of referenced composed characters. + +2005-12-05 17:52 +0000 [r415] teras: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Some changes to the + greek glyphs, mostly having to do with "tonos" (accent) + +2005-12-05 16:24 +0000 [r414] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: minor cosmetic changes. + +2005-12-05 15:18 +0000 [r413] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: adjusted widths of characters in the Extended + Greek range; accents are not any more considerably overhanging on + the left side. Added U+1EDA-1EE3, U+1EE8-1EF1. + +2005-12-05 09:03 +0000 [r412] peterlin: + + * ChangeLog, FreeSans.sfd: + FreeSans.sfd - continued working on Extended Greek range; not + finished yet. + +2005-12-03 11:15 +0000 [r411] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd: fixed combined Greek accents (bug #12800). + Width of characters still need to be adjusted as in FreeSerif. + +2005-12-03 10:56 +0000 [r410] peterlin: + + * AUTHORS, ChangeLog, + CREDITS, FreeSerif.sfd: * + FreeSerif.sfd: fixed positions of Greek accents (bug #12798). + * CREDITS: Added Panayotis Katsaloulis. * AUTHORS: Added + Panayotis Katsaloulis.i + +2005-12-03 09:25 +0000 [r409] peterlin: + + * ChangeLog, Makefile: * Makefile: + minor changes; now creating also a tarfile with sfds. + +2005-12-01 15:31 +0000 [r408] peterlin: + + * ChangeLog, FreeSerifItalic.sfd: + * FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1, + U+01C3, U+01E0, U+01E1, U+01F8, U+01F9. + +2005-12-01 15:03 +0000 [r407] peterlin: + + * ChangeLog, Makefile (added): * + Makefile: created a Makefile to assist building. + +2005-12-01 15:00 +0000 [r406] peterlin: + + * ChangeLog, README: README: an + update. + +2005-12-01 14:41 +0000 [r405] peterlin: + + * ChangeLog, COPYING (added): * + COPYING: added GNU General Public License, version 2. + +2005-12-01 12:40 +0000 [r404] peterlin: + + * ChangeLog, tools/GenerateTrueType + (added): * tools/GenerateTrueType: wrote a FontForge script for + conversion to TrueType. + +2005-12-01 11:07 +0000 [r403] peterlin: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerif.sfd: * FreeSerif.sfd: merged + with SolaimanLipi Bangla OpenType font from www.ekushey.org, + courtesy Solaiman Karim. * FreeSerifItalic.sfd: merged with + SolaimanLipi Bangla OpenType font from www.ekushey.org, slanted + by 15.5 degrees. + +2005-12-01 10:15 +0000 [r402] peterlin: + + * AUTHORS, ChangeLog, + CREDITS, FreeSans.sfd, + FreeSansOblique.sfd: * FreeSans.sfd: + merged with Rupali Bangla OpenType font from www.ekushey.org * + FreeSansOblique.sfd: merged with Rupali Bangla OpenType font + from www.ekushey.org, slanted by 12 degrees. * CREDITS: added + Solaiman Karim * AUTHORS: added Solaiman Karim + +2005-11-30 14:42 +0000 [r401] peterlin: + + * AUTHORS, ChangeLog, + CREDITS, FreeSerif.sfd: * + FreeSerif.sfd: merged with the Rachana Normal. * AUTHORS: + added K.H. Hussain and R. Chitrajan * CREDITS: added K.H. Hussain + and R. Chitrajan + +2005-11-23 22:37 +0000 [r400] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E, + U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198. + +2005-11-23 09:08 +0000 [r399] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - cleaned some background images. + +2005-11-22 22:20 +0000 [r398] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd: * FreeSans.sfd, + FreeSansBold.sfd - added U+0263. + +2005-11-22 15:51 +0000 [r397] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, + U+25AC. + +2005-11-22 09:34 +0000 [r396] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - added U+2504-250B. + +2005-11-21 23:12 +0000 [r395] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps. + +2005-11-21 22:47 +0000 [r394] peterlin: + + * ChangeLog, + FreeSerifBoldItalic.sfd: * + FreeSerifBoldItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added a couple of + glyphs in the IPA Extensions region. + +2005-11-21 15:49 +0000 [r393] peterlin: + + * ChangeLog, FreeMono.sfd, + FreeMonoOblique.sfd: * FreeMono.sfd - + corrected positions of some Greek diacritics on page 0x1F. * + FreeMonoOblique.sfd - working on bringing it in sync with + FreeMono.sfd. + +2005-11-20 22:56 +0000 [r392] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2. + +2005-11-19 22:59 +0000 [r391] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3, + U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192, + U+01B4, U+0282, U+0284. + +2005-11-18 22:44 +0000 [r390] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - started Box Drawing area. + +2005-11-18 09:30 +0000 [r389] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+02EE, U+207F. + +2005-11-17 22:06 +0000 [r388] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA + Extensions ranges. + +2005-11-17 12:59 +0000 [r387] peterlin: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: * + FreeMonoOblique.sfd, FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd, FreeSansOblique.sfd, + FreeSansBold.sfd, FreeSansBoldOblique.sfd, + FreeSerifItalic.sfd, FreeSerifBold.sfd, + FreeSerifBoldItalic.sfd - added U+FFFD. + +2005-11-17 12:33 +0000 [r386] peterlin: + + * ChangeLog, + FreeSerifBoldItalic.sfd: * + FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1, + U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5, + U+2669-266F. MES-1 compliant. + +2005-11-17 10:43 +0000 [r385] peterlin: + + * ChangeLog, FreeSerifItalic.sfd: + * FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F, + U+0279, U+0287, U+028C-028E, U+029E. + +2005-11-17 10:23 +0000 [r384] peterlin: + + * ChangeLog, FreeSerifItalic.sfd: + * FreeSerifItalic.sfd - added glyphs from the Omega project + to Latin Extended-B, IPA Extensions and Greek ranges. + +2005-11-17 09:31 +0000 [r383] peterlin: + + * ChangeLog, + FreeSerifBoldItalic.sfd: * + FreeSerifBoldItalic.sfd - added glyphs from the Omega project + to Latin Extended-B, IPA Extensions and Greek ranges. + +2005-11-17 09:09 +0000 [r382] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd - added glyphs from the Omega project to + Latin Extended-B, IPA Extensions and Greek ranges. + +2005-11-16 23:17 +0000 [r381] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added a handful of letters in the Latin + Extended-B and IPA Extension ranges from the Omega font + collection. + +2005-11-16 22:37 +0000 [r380] peterlin: + + * ChangeLog, FreeSerifItalic.sfd: + * FreeSerifItalic.sfd - started added accent anchors. Added a + handful of Greek letters from Omega font collection. + +2005-11-16 15:41 +0000 [r379] peterlin: + + * ChangeLog, FreeSerifItalic.sfd: + * FreeSerifItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points + +2005-11-16 15:02 +0000 [r378] peterlin: + + * papers/eurotex2003/freefont.bib, + papers/eurotex2003/freefont.tex: Changed files + sent back by Karl Berry. The text should now exactly match the + paper published in TUGboat 24(2003)545-549. + +2005-11-16 14:49 +0000 [r377] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSansOblique.sfd: * FreeSansOblique.sfd + - applied the sequence suggested by Werner Lemberg for reducing + redundant points. * FreeSans.sfd - changed U+01A5. + +2005-11-16 13:23 +0000 [r376] moyogo: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerif.sfd: fixed latin gamma and baby + gamma in Serif; added Ezhes variations to SerifItalic + +2005-11-16 12:50 +0000 [r375] peterlin: + + * ChangeLog, FreeMonoOblique.sfd: + * FreeMonoOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added U+F6BE. + +2005-11-16 12:28 +0000 [r374] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F, + U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291, + U+029D. + +2005-11-16 10:36 +0000 [r373] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - replaced Greek letters with references, where + applicable. Added U+03D7, U+03F0-03F2. + +2005-11-16 09:39 +0000 [r372] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - Made small Greek letters the same height as + Latin and Cyrillic ones and replaced them with references, where + applicable. + +2005-11-15 23:09 +0000 [r371] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs + in the Latin-1 and Latin Extended-A areas with references. Made + capital Greek letters the same height as Latin and Cyrillic ones + and replaced them with references, where applicable. + +2005-11-15 19:21 +0000 [r370] moyogo: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: fixed U+026A, to + prevent confusion with U+0069 when accented + +2005-11-15 12:18 +0000 [r369] peterlin: + + * ChangeLog, FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: * + FreeMonoBold.sfd - corrected Greek tonos (slanted instead of + a vertical line). * FreeMonoBoldOblique.sfd - applied the + sequence suggested by Werner Lemberg for reducing redundant + points. Replaced accented glyphs in the Latin-1 and Latin + Extended-A areas with references. + +2005-11-14 23:20 +0000 [r368] peterlin: + + * ChangeLog, FreeMonoBold.sfd: * + FreeMonoBold.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs + in the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 22:44 +0000 [r367] peterlin: + + * ChangeLog, FreeMono.sfd: * + FreeMono.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs + in the Greek and Cyrillic areas with references. + +2005-11-14 13:43 +0000 [r366] peterlin: + + * ChangeLog, + FreeSansBoldOblique.sfd: * + FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185, + U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292, + U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B, + U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant. + +2005-11-14 12:55 +0000 [r365] peterlin: + + * ChangeLog, + FreeSansBoldOblique.sfd: * + FreeSansBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 area with references. + +2005-11-14 09:07 +0000 [r364] peterlin: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Added 2005 in + copyright info. + +2005-11-13 23:19 +0000 [r363] peterlin: + + * ChangeLog, FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: * FreeSerif.sfd - + applied the sequence suggested by Werner Lemberg for reducing + redundant points. * FreeSansBold.sfd - added U+219A, U+219B, + U+2669-266F. * FreeSerifBold.sfd - added U+2669-266F. + +2005-11-12 22:31 +0000 [r362] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187, + U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1, + U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281, + U+0284. + +2005-11-11 22:50 +0000 [r361] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added U+01A5, + U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA, + U+21E4, U+21E5. + +2005-11-11 15:52 +0000 [r360] peterlin: + + * ChangeLog, FreeMono.sfd: * + FreeMono.sfd - corrected Greek letters (using tonos instead + of a vertical line). Added U+026E, U+F6BE. Accented characters in + Latin 1, Latin Extended A and partly Latin Extended B replaced by + references. + +2005-11-11 15:03 +0000 [r359] peterlin: + + * ChangeLog, FreeMono.sfd: * + FreeMono.sfd - applied the sequence for reducing redundant + points, suggested by Werner Lemberg. + +2005-11-11 10:40 +0000 [r358] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E, + U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding + accent anchors. + +2005-11-10 22:56 +0000 [r357] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - replaced glyphs with references in the + Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6, + U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565, + U+0584, U+0587, U+0589. + +2005-11-10 22:11 +0000 [r356] peterlin: + + * ChangeLog, FreeSansOblique.sfd: + * FreeSansOblique - changed U+0192, U+01A5; added + U+01C0-01C3. + +2005-11-10 17:01 +0000 [r355] moyogo: + + * ChangeLog, FreeSans.sfd, + FreeSansOblique.sfd: added a couple of IPA + characters to FreeSans and FreeSansOblique + +2005-11-10 15:53 +0000 [r354] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added + automatically constructed accented characters in page 0x1E. + +2005-11-10 13:28 +0000 [r353] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126, + U+2190-2199, U+219E-21A8, U+21C4-21CA. + +2005-11-10 10:07 +0000 [r352] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+01A6. Simplified outlines in the + ASCII range. + +2005-11-09 22:42 +0000 [r351] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195, U+0197, + U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6, U+01C0, + U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3, + U+1EE8-1EF1. + +2005-11-09 15:41 +0000 [r350] peterlin: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd: * + FreeSerifItalic.sfd - changed U+03D5. * + FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070, + U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F. + +2005-11-09 14:32 +0000 [r349] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2, + U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE, + U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A, + U+220B, U+220D, U+2272, U+2273, U+2282, U+2283. + +2005-11-09 12:57 +0000 [r348] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+0183, U+018C. + +2005-11-07 21:00 +0000 [r347] peterlin: + + * FreeSansBold.sfd: FreeSansBold.sfd - added + U+0562, U+056D. U+0575. + +2005-11-07 11:39 +0000 [r346] peterlin: + + * ChangeLog, FreeMono.sfd: * + FreeSansBold.sfd - added U+0562, U+056D. U+0575. * + FreeMono.sfd - added U+0589. + +2005-11-06 22:20 +0000 [r345] peterlin: + + * ChangeLog, FreeMono.sfd, + FreeMonoBold.sfd: * FreeMono.sfd - added + U+2227, U+2228, U+2262. Corrected U+2299-229D in response to bug + report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121 * + FreeMonoBold.sfd - added U+2010, U+2012 in response to bug + report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032 + Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi + symbol) in order to conform to Unicode standard. Simplified glyph + shapes in ASCII range. Started adding "above" and "below" + anchors. + +2005-11-06 20:47 +0000 [r344] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected + U+2071, U+222E, U+2242, U+2243 in response to bug reports + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120 + +2005-11-05 23:18 +0000 [r343] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - accented letters in Latin Extended-A replaced + by references wherever possible. * FreeSerif.sfd - added + U+0180, U+0181, U+0187, U+0188, U+018A, U+0193, U+019C, U+01A4, + U+01A5, U+01A7, U+01A8, U+01AF, U+01B0, U+026E, U+0270, U+0278, + U+0280, U+0281, U+028B, U+0299, U+029C, U+029F. + +2005-11-03 09:32 +0000 [r342] peterlin: + + * ChangeLog, FreeSansBold.sfd: + FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4, + U+01E5. + +2005-11-02 23:25 +0000 [r341] peterlin: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd: * FreeSansBold.sfd - + added U+0180, U+0184, U+0185, U+0192, U+019B, U+01A0-01A2, + U+01AF, U+01B0, U+01EE, U+01EF, U+0292, U+0294-0296, U+02A1, + U+0532, U+054C, U+057C, U+222B. Changed U+014B, U+01A5, U+01B4, + U+03BB. * FreeSans.sfd - added U+04C5, U+04C6, U+04C9, + U+04CA, U+04D, U+04CE. + +2005-11-02 09:52 +0000 [r340] peterlin: + + * ChangeLog, FreeMono.sfd: * + FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and + U+03D5 (Greek phi symbol) in order to conform to Unicode + standard. Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE. + +2005-11-02 09:11 +0000 [r339] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - started Armenian; added U+0538, U+0542, + U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561, + U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572, + U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585. + +2005-11-01 22:12 +0000 [r338] peterlin: + + * ChangeLog, FreeSansBold.sfd, + FreeSansBoldOblique.sfd: * + FreeSansBold.sfd - modified U+019C. * + FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C, + U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015, + U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215. + +2005-10-31 11:37 +0000 [r337] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282, U+0288, + U+028C-028E, U+0290, U+029E, U+02A0. + +2005-10-28 23:13 +0000 [r336] peterlin: + + * ChangeLog, FreeSerifBold.sfd: + FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9, + U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298, + U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129, + U+2217. + +2005-10-28 12:20 +0000 [r335] peterlin: + + * ChangeLog, FreeSerifBold.sfd: + FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080, + U+2085-2089, U+2153-215E, U+2113-2115, U+2119. + +2005-10-28 09:03 +0000 [r334] peterlin: + + * ChangeLog, FreeSerifBold.sfd: + FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1, + U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F, + U+0282, U+0287, U+0288, U+028C-028E, U+0290. + +2005-10-27 22:26 +0000 [r333] peterlin: + + * ChangeLog, FreeSerifBold.sfd: + FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191, + U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A, + U+0271-0273, U+0283, U+0285. + +2005-10-27 14:28 +0000 [r332] peterlin: + + * ChangeLog, FreeSansBold.sfd: + FreeSansBold.sfd - added subscripts and superscripts + (U+2070-208F), completed fractions (U+2152-215F) and Roman + numerals (U+2160-217F). + +2005-10-27 13:44 +0000 [r331] peterlin: + + * ChangeLog, FreeSerifItalic.sfd: + FreeSerifItalic.sfd - minor cleanup in the superscript range + (U+2070-2079). + +2005-10-27 09:42 +0000 [r330] peterlin: + + * ChangeLog, FreeSans.sfd: + FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5, + U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114, + U+2119. + +2005-10-26 21:31 +0000 [r329] peterlin: + + * ChangeLog, FreeSans.sfd: + FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292, U+0298. + Changed U+0251, U+0294, U+02A1. + +2005-10-26 14:45 +0000 [r328] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032, U+203C, + U+2047-2049. + +2005-10-26 13:56 +0000 [r327] peterlin: + + * ChangeLog, FreeSansBold.sfd: * + FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines + of most Greek letters. + +2005-10-26 12:52 +0000 [r326] peterlin: + + * ChangeLog, FreeMono.sfd: * + FreeMono.sfd - a try to imitate Denis' work on adding anchors + by adding "above" anchor to a couple of basic Latin characters. + +2005-10-26 11:57 +0000 [r325] peterlin: + + * ChangeLog, FreeMono.sfd: + FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071, + U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E, + U+2126, U+2127, U+2153-215F, U+2202. + +2005-10-26 08:18 +0000 [r324] peterlin: + + * ChangeLog, FreeSans.sfd: * + FreeSans.sfd - added "above" anchors to selected Cyrillic + characters. Added U+0294, U+02A1. + +2005-10-25 14:29 +0000 [r323] peterlin: + + * ChangeLog, FreeSansOblique.sfd: + FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015, + U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F, + U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1 + compliant. + +2005-10-25 14:00 +0000 [r322] peterlin: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: + FreeSansOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, + FreeSansBoldOblique.sfd, FreeMonoBoldOblique.sfd, + FreeMonoBold.sfd, FreeSerifItalic.sfd, + FreeSerifBold.sfd FreeSerifBoldItalic.sfd - brought in + sync with Valek Filipov's urw-fonts-1.0.7pre41 + +2005-10-25 12:13 +0000 [r321] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9, U+0253, + U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269, U+026D, + U+0271-0273, U+0279-027D. + +2005-10-25 09:53 +0000 [r320] peterlin: + + * ChangeLog, + FreeSerifBoldItalic.sfd: + FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084, + U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of + diacritics on U+0200-0217. + +2005-10-25 09:06 +0000 [r319] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E, U+027F, + U+0283, U+0285. + +2005-10-25 08:12 +0000 [r318] peterlin: + + * ChangeLog, FreeSerifItalic.sfd: + FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193, + U+2669-266F. FreeSerifItalic is now MES-1 compliant. + +2005-10-24 19:34 +0000 [r317] moyogo: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: added ccmp feature + for i and j to be substituted with dotless i or j when followed + by above diacritic + +2005-10-24 15:01 +0000 [r316] peterlin: + + * ChangeLog, FreeSans.sfd: + FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now + MES-1 conformant. + +2005-10-23 12:29 +0000 [r314-315] moyogo: + + * FreeSans.sfd: added above, below, abovemk and + belowmk anchors for diacritics placement; cleared U+0084 + + * ChangeLog, FreeSans.sfd: added + above, below, abovemk and belowmk anchors for diacritics + placement + +2005-10-21 12:18 +0000 [r313] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017, U+2036, + U+2037, U+203C, U+203E, U+2047-204A. + +2005-10-20 12:04 +0000 [r312] peterlin: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189, U+018B, + U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7, U+01DD, + U+2010-2013, U+2015. FreeSerif is now MES-1 conformant. + +2005-10-20 11:13 +0000 [r311] peterlin: + + * ChangeLog, FreeSerifBold.sfd: * + FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F, + U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE. + Corrected position of diacritics on U+0200-0217. + +2005-10-19 13:03 +0000 [r310] moyogo: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: * FreeSerif.sfd - added + U+0268, U+026A, U+0289, U+0292; and anchor "above" to more base + glyphs. * FreeSerifBold.sfd, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259, + U+0261, U+0268, U+026A, U+0279, U+0289 * FreeSerifBold.sfd - + added anchor "above" to marks U+0300-0314, and to base glyphs + (vowels). + +2005-10-18 20:36 +0000 [r309] moyogo: + + * ChangeLog, FreeSerif.sfd: * + FreeSerif.sfd - added anchor "above" to marks U+0300-0314, + and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190, + U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs + to use references. + +2005-10-17 09:25 +0000 [r308] peterlin: + + * ChangeLog, FreeSansBold.sfd: + FreeSansBold.sfd - added U+01B7, U+01B8, U+0275. + +2005-10-16 18:06 +0000 [r307] moyogo: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: * FreeSans.sfd, + FreeSansOblique.sfd - added some Latin Extended-B African + letters: U+0181, U+018A, U+0197-0198, U+01A4, U+01AC, U+01B1, + U+01B3-01B4; * FreeSansBold.sfd, FreeSansBoldOblique.sfd + - added Latin Extended-B U+0187, 018E-018F, U+0191, U+0193, + U+0197-0199, U+019D-019F, U+01AB-01AE; correcting width of + non-space Combining Diacrtical Marks; added more glyphs to IPA + Extensions to match non Bold * FreeSansBoldOblique.sfd - + added many accented glyphs + +2005-10-15 20:59 +0000 [r306] moyogo: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: * FreeSans.sfd, + FreeSansOblique.sfd - added IPA Extensions + U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier + Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added + stroke to U+0268 * FreeSansOblique.sfd - fixed skew on U+027F + * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added to + Latin Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, + U+0256-0257, U+0261, U+0265-026A, U+026F-0273, U+0289, + U+028C-028E * FreeSansBoldOblique.sfd - added to Latin + extended-B U+0189, U+01A8, U+01B1, U+0283, U+02C9 and Spacing + Modifiers U+02C9-02CB + +2005-10-14 13:47 +0000 [r304-305] peterlin: + + * ChangeLog: FreeSansBold.sfd - Added a couple + of composite glyphs, mostly in the IPA and Latin Extended B + ranges. + + * FreeSansBold.sfd: Added a couple of composite + glyphs, mostly in the IPA and Latin Extended B ranges. + +2005-10-13 17:58 +0000 [r303] moyogo: + + * ChangeLog, FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: * FreeSans.sfd - + removed overlap and simplified U+0187, 0191, 0193, 01A5, 01AE, + 0260, 0271, 0272, 0273, 027B; fixed diacritics placement on + U+0200-0217; fixed glyph for U+0283 to correct esh without + stroke; added U+025F and fixed U+025F from it; fixed height of + glyph at U+0285; arranged U+027E,027F to make more + distinguishable from U+0072. * FreeSansOblique.sfd - added the + corrected or new glyphs from FreeSans; diacritics on U+200-0217 + will need height readjustements. * FreeSansBold.sfd, + FreeSansBoldOblique - added U+0186, 0190, 0250, 0254, 0258, 0259, + 025B, 025C + +2005-10-13 15:00 +0000 [r302] moyogo: + + * FreeSerifBoldItalic.sfd: fixed open o, U+0254, + that was left unturned + +2005-10-13 12:51 +0000 [r299-301] peterlin: + + * FreeSerifItalic.sfd: Added glyphs + U+222B-U+222F, U+2320, U+2321. Fixed diacritics on U+0200-U+0217. + + * AUTHORS, ChangeLog, + CREDITS: Added Denis Jacquerye. + + * FreeSerif.sfd: Minor changes: U+22A2, U+22A3, + U+22A6, U+23AE. Added U+0250, U+0251, U+0258, U+0259, U+0275. + +2005-10-13 05:58 +0000 [r298] moyogo: + + * ChangeLog, FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: 2005-10-12 Denis Jacquerye + <moyogo@gmail.com> * FreeSerif.sfd - Corrected diacritics + position on U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A. * + FreeSerif.sfd, FreeSerifBold.sfd, + FreeSerifItalic.sfd, FreeSerifBoldItalic.sfd - added + U+0186,0190,0254 and U+025B. + +2005-10-11 15:11 +0000 [r297] peterlin: + + * FreeSerif.sfd: Attempt to correct bug #13370: + INTEGRAL EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; + added glyph U+23AE. + +2005-10-11 14:33 +0000 [r296] peterlin: + + * FreeSerif.sfd: Fixed bug #13399 (glyphs for + U+0360 and U+0361 swapped). + +2005-05-16 14:33 +0000 [r295] peterlin: + + * ChangeLog, FreeMono.sfd: + Corrected shapes for Cross of Lorraine and Cross of Jerusalem. + +2005-04-07 13:45 +0000 [r294] peterlin: + + * notes (added), + notes/maintenance.txt (added): Some basic notes + how things work with Savannah. + +2005-04-07 13:25 +0000 [r292-293] peterlin: + + * FreeSansBold.sfd: Added some combining + accents, just to test a new version of FontForge. + + * ChangeLog: Minor change to FreeSansBold. + +2003-11-18 16:26 +0000 [r291] peterlin: + + * FreeSans.sfd: Started to apply Josef Segur's + patch. + +2003-10-08 12:22 +0000 [r290] peterlin: + + * AUTHORS, ChangeLog: Added Abbas + Izad. + +2003-10-08 12:18 +0000 [r289] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeMonoOblique.sfd: Applied Josef Segur's + corrections from Oct. 5. + +2003-10-04 17:51 +0000 [r288] peterlin: + + * FreeSerif.sfd: A rather naive composition of + Arabic "accented" charachers, based on the work of Abbas Izad. + +2003-10-02 20:54 +0000 [r286-287] peterlin: + + * ChangeLog: Update. + + * FreeSerif.sfd: Abbas Izad's contributed + Arabic/Farsi characters added. + +2003-10-02 20:09 +0000 [r284-285] peterlin: + + * ChangeLog: Update. + + * FreeSansBoldOblique.sfd: Combining chars + corrected (this one escaped the batch). + +2003-10-02 19:55 +0000 [r283] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Combining characters + (U+0300 - U+036F) moved left, so that they have negative + horizontal values and zero advance width. + +2003-09-15 09:23 +0000 [r282] peterlin: + + * FreeSerifItalic.sfd: Super- and subscripts + added. Those copied from Free Serif regular (0,5-9) seem a bit + heavier to me than 1-4 designed specially for italic. Might + require a further adjustment. : + ---------------------------------------------------------------------- + +2003-09-15 09:08 +0000 [r281] peterlin: + + * FreeSerifItalic.sfd: Started working on super- + and subscripts. + +2003-09-15 08:36 +0000 [r280] peterlin: + + * FreeSerifBold.sfd: Started working on super- + and subscripts. + +2003-09-12 14:12 +0000 [r279] peterlin: + + * FreeSerif.sfd: Added three Hiragana characters + (U+3094, U+3099 and U+309B) and 6 Katakana characters + (U+30F4-U+30FC). + +2003-09-12 13:53 +0000 [r278] peterlin: + + * FreeSansBold.sfd: Cleared background + characters in Latin Extended-A. Added some automatically + constructed characters in Latin Extended-B. Started with + superscripts and subscripts. + +2003-09-12 12:53 +0000 [r277] peterlin: + + * FreeSans.sfd: Subscript numerals + (U+2080-U+2089) completed. + +2003-09-12 12:40 +0000 [r276] peterlin: + + * FreeSans.sfd: Upgraded Pfaedit to 030827. Two + Hiragana characters (U+3099, U+309B) and 8 Katakana characters + (U+30F7-U+30FE) added. + +2003-06-02 05:34 +0000 [r275] teras: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Basic ancient greek + support + +2003-05-22 19:35 +0000 [r274] teras: + + * FreeSansBold.sfd: Basic ancient greek support + +2003-05-22 18:05 +0000 [r273] teras: + + * FreeSans.sfd: Basic ancient greek support + +2003-05-19 08:18 +0000 [r272] peterlin: + + * ChangeLog: Upload. + +2003-05-19 08:15 +0000 [r271] peterlin: + + * FreeSerifItalic.sfd: Improved control point + positioning on Thai character fongman. Actually, Thai needs some + work here... + +2003-05-19 08:09 +0000 [r270] peterlin: + + * FreeSerif.sfd: Thai letters bo baimai and po + pla swapped; Thai character fongman corrected, all courtesy + Theppitak Karoonboonyanan. + +2003-05-19 07:45 +0000 [r269] peterlin: + + * ChangeLog: Update. + +2003-05-17 00:55 +0000 [r268] teras: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Full support of all ancient + greek glyphs + +2003-05-16 09:41 +0000 [r267] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSansBold.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Saved in a new SFD + format with a new version of PfaEdit. + +2003-05-15 12:15 +0000 [r266] peterlin: + + * ChangeLog: Mentioned KerningNumerals.pl. + +2003-05-15 12:07 +0000 [r265] peterlin: + + * ChangeLog: Update. + +2003-05-15 12:04 +0000 [r263-264] peterlin: + + * tools/KerningNumerals.pl: Now doing the new-style + kerning information (KernsSLIF) as well. + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Oops! It's KernsSLIF, + not Kerns. Corrected. + +2003-05-15 11:58 +0000 [r262] peterlin: + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Completed moving + kerning information from ASCII numerals to kerned numerals in the + Adobe corporate use area (U+F6xx). + +2003-05-15 10:32 +0000 [r261] peterlin: + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Automatically moved + kerning information from ASCII numerals with the + KerningNumerals.pl script. + +2003-05-15 10:27 +0000 [r259-260] peterlin: + + * FreeSansBold.sfd: Automatically moved kerning + information with the KerningNumerals.pl script. + + * tools/KerningNumerals.pl (added): A Perl script + for moving kerning information from ASCII numerals (U+0030...) to + characters in the Adobe corporate use area (U+F6xx). + +2003-05-14 12:10 +0000 [r258] peterlin: + + * ChangeLog: Update + +2003-05-14 12:00 +0000 [r257] peterlin: + + * FreeSans.sfd: First approximation of super- + and subscript numerals and vulgar fractions. + +2003-05-14 10:00 +0000 [r256] peterlin: + + * ChangeLog: Update. + +2003-05-14 09:57 +0000 [r255] peterlin: + + * FreeSerif.sfd: Super- and subscript numerals + complete, vulgar fractions completed and redone as references + rather than outlines. + +2003-05-12 16:58 +0000 [r253-254] peterlin: + + * ChangeLog: Update + + * FreeSerif.sfd: Super- and subscripts, vulgar + fractions. + +2003-05-12 16:12 +0000 [r251-252] peterlin: + + * ChangeLog: Update. + + * FreeSerif.sfd: Rounded to integer. + +2003-05-12 15:45 +0000 [r250] peterlin: + + * FreeSerif.sfd: Cleanup of the Cyrillic letters + added on March 27. + +2003-05-09 09:56 +0000 [r249] peterlin: + + * ChangeLog: Update. + +2003-05-09 09:53 +0000 [r248] peterlin: + + * FreeMonoBold.sfd: Additions in the Latin + Extended-B and IPA Extensions range. + +2003-05-08 09:07 +0000 [r246-247] peterlin: + + * ChangeLog: Update. + + * FreeSerifBoldItalic.sfd: Added a couple of + characters to the Latin Extended-B area. + +2003-05-08 08:37 +0000 [r245] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: ASCII numerals now + monospaced; kerned numerals moved to Adobe corporate use area + (U+F6xx). + +2003-05-08 07:47 +0000 [r244] peterlin: + + * ChangeLog: Update. + +2003-05-07 15:56 +0000 [r243] peterlin: + + * FreeSans.sfd, + FreeSerif.sfd: Roman numerals. + +2003-05-07 15:13 +0000 [r242] peterlin: + + * FreeSans.sfd: Added characters in the Latin + Extended-B range. + +2003-05-07 13:56 +0000 [r241] peterlin: + + * FreeSans.sfd: Added Greek accents. + +2003-05-07 13:19 +0000 [r240] peterlin: + + * FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Automated addition of + accented characters. + +2003-05-07 12:57 +0000 [r239] peterlin: + + * FreeMonoBoldOblique.sfd: Additions in Latin + Extended-B and Basic Greek. + +2003-05-07 12:13 +0000 [r237-238] peterlin: + + * FreeMonoBoldOblique.sfd: Points rounded to + integer values; glyphs simplified. + + * FreeMonoBoldOblique.sfd: Cleanup (fixed + widths, clockwise/counter-clockwise corrections etc.) + +2003-05-07 11:53 +0000 [r236] peterlin: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd: Points rounded to integer + values; outlines simplified. + +2003-05-07 11:48 +0000 [r234-235] peterlin: + + * FreeSans.sfd: Rounded to integer and + simplified. + + * FreeSans.sfd: Cleanup (open paths fixed). + +2003-05-07 11:40 +0000 [r232-233] peterlin: + + * FreeMonoOblique.sfd: Kerning pairs removed. + + * FreeMonoOblique.sfd: Cleanup (path direction + etc.) + +2003-05-07 10:16 +0000 [r231] peterlin: + + * FreeMonoBold.sfd: Cleanup + (clockwise/counter-clockwise direction corrected). + +2003-05-07 10:01 +0000 [r230] peterlin: + + * FreeMono.sfd: Major cleanup (fixed widths, + open paths, clockwise/counter-clockwise directions etc.). + +2003-05-06 15:54 +0000 [r229] peterlin: + + * FreeSans.sfd: Proportional numerals don't + really have to be outlines - references are enough. Caught two + remaining numeral kerns, ",1" and ".1". Free Sans is now clean. + +2003-05-06 15:39 +0000 [r228] peterlin: + + * FreeSansBold.sfd: ASCII numerals now + monospaced; kerned numerals moved to Adobe corporate use area + (U+F6xx). Not finished yet - left kerns are done, right only up + to letter C! + +2003-05-06 14:39 +0000 [r227] peterlin: + + * FreeSans.sfd: ASCII numerals now monospaced; + kerned numerals moved to Adobe corporate use area (uniF6xx). + +2003-05-06 13:09 +0000 [r226] peterlin: + + * tools/OS2UnicodeRange (added): A simple script to + display OS/2 Unicode range table in TrueType fonts. + +2003-05-06 11:53 +0000 [r225] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Updated years of FSF + copyleft. + +2003-05-06 11:36 +0000 [r224] peterlin: + + * FreeMonoBold.sfd: Minor changes in Latin + Extended-B and IPA Extensions. + +2003-04-02 15:54 +0000 [r223] peterlin: + + * papers (added), papers/eurotex2003 + (added), papers/eurotex2003/eurotex2003.cls + (added), papers/eurotex2003/freefont.bib (added), + papers/eurotex2003/freefont.tex (added): Paper for + the EuroTeX 2003 conference, ENST Bretagne, Brest, June 24-27. + +2003-03-27 08:40 +0000 [r222] peterlin: + + * AUTHORS, ChangeLog, + CREDITS: Update. + +2003-03-27 08:13 +0000 [r221] peterlin: + + * FreeSerif.sfd: Cyrillic and Cyrillic + Supplement blocks brought to conformance with Unicode 3.2, + courtesy Daniel Shurovich Chirkov. + +2003-03-19 17:31 +0000 [r220] peterlin: + + * FreeSansOblique.sfd: Synchronized germandbls + (U+00DF) with the one in FreeSans. + +2003-03-19 17:17 +0000 [r219] peterlin: + + * FreeSans.sfd: Made somewhat wider germandbls + (U+00DF). Walter Schmidt brought up this problem with URW fonts + in the tex-fonts list. + +2003-03-18 16:38 +0000 [r218] peterlin: + + * FreeSans.sfd: Added Sinhala glyphs from the + Tipitaka project <http://www.metta.lk>, recoded to Unicode by + Noah Levitt. + +2003-02-27 13:56 +0000 [r217] peterlin: + + * FreeSansBold.sfd: Somewhat "cleaner" glyphs in + the Greek part. + +2003-02-24 12:49 +0000 [r216] peterlin: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: All numerals set to + equal width (556 points). + +2003-02-21 16:58 +0000 [r215] peterlin: + + * FreeSans.sfd: A nicer capital schwa. + +2003-02-19 09:35 +0000 [r213-214] peterlin: + + * ChangeLog: Update. + + * FreeSans.sfd: Minor changes on mathematics + operators. + +2003-02-18 16:57 +0000 [r212] peterlin: + + * FreeSans.sfd: Added two Tamil signs (virama + and au length mark). + +2003-02-18 11:35 +0000 [r211] peterlin: + + * ChangeLog: Update. + +2003-02-18 11:28 +0000 [r210] peterlin: + + * FreeMono.sfd: Integral signs more in the + spirit of Courier design. + +2003-02-18 11:12 +0000 [r209] peterlin: + + * FreeMono.sfd: Cleaned out some backgrounds. + +2003-02-05 15:46 +0000 [r207-208] peterlin: + + * ChangeLog: Update. + + * FreeSans.sfd: Added a couple of glyphs in the + IPA and African Latin ranges. + +2003-01-30 15:55 +0000 [r206] peterlin: + + * ChangeLog: Update. + +2003-01-30 15:35 +0000 [r205] peterlin: + + * FreeSansBold.sfd, + FreeSansBoldOblique.sfd: Corrected Maltese + hbar and Hbar. + +2003-01-30 14:54 +0000 [r204] peterlin: + + * FreeSans.sfd, + FreeSansOblique.sfd, + FreeMonoBoldOblique.sfd: Corrected Maltese + hbar and Hbar. + +2003-01-30 14:43 +0000 [r203] peterlin: + + * FreeMonoBold.sfd: Corrected Maltese Hbar. + +2003-01-28 16:31 +0000 [r202] peterlin: + + * FreeSerifItalic.sfd: Corrected Maltese hbar. + +2002-12-19 18:31 +0000 [r201] peterlin: + + * FreeSans.sfd: Cleaner Tamil outlines. + +2002-12-18 17:38 +0000 [r199-200] peterlin: + + * ChangeLog: Update. + + * tools/ConvertFont (added): Convert fonts from + PfaEdit's native format to TrueType format. + +2002-12-18 17:17 +0000 [r198] peterlin: + + * ChangeLog: Update. + +2002-12-18 10:43 +0000 [r197] peterlin: + + * FreeSans.sfd: Added (almost complete) Tamil + Unicode range. + +2002-12-17 16:44 +0000 [r196] peterlin: + + * FreeSans.sfd: Started adding Kannada glyphs + from Akruti fonts. + +2002-12-17 15:56 +0000 [r195] peterlin: + + * AUTHORS, ChangeLog, + CREDITS: Added M.S. Sridhar and Akruti fonts. + +2002-12-17 15:42 +0000 [r194] peterlin: + + * FreeSans.sfd: Added some Devanagari and + Gujarati glyphs from the Akruti fonts. + +2002-12-17 10:08 +0000 [r193] peterlin: + + * ChangeLog, CREDITS: Correct + spelling of Culmus project. + +2002-12-12 15:09 +0000 [r192] peterlin: + + * INSTALL (added): Installation notes for the Free + UCS outline fonts. + +2002-12-12 08:57 +0000 [r191] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Checked in as v1.1. + +2002-12-12 08:48 +0000 [r190] peterlin: + + * FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Checked in as v1.1. + +2002-12-06 15:13 +0000 [r189] peterlin: + + * FreeMono.sfd: Minor correction on U+230F. + +2002-12-06 15:00 +0000 [r188] peterlin: + + * FreeMono.sfd: Various additions in the + U+2000-U+27FF area, courtesy Vyacheslav Dikonov. + +2002-12-06 14:20 +0000 [r187] peterlin: + + * CREDITS: Added Vyacheslav Dikonov. + +2002-12-06 14:08 +0000 [r186] peterlin: + + * AUTHORS: Added Vyacheslav Dikonov. + +2002-12-06 13:59 +0000 [r185] peterlin: + + * FreeMono.sfd: Added Runes (U+16A0...), + courtesy Vyacheslav Dikonov. + +2002-12-06 13:43 +0000 [r184] peterlin: + + * ChangeLog: Update. + +2002-12-06 13:40 +0000 [r182-183] peterlin: + + * FreeSans.sfd: Added Unicode Syriac glyphs, + courtesy Vyacheslav Dikonov. + + * FreeMono.sfd: Added Braille glyphs, courtesy + Vyacheslav Dikonov. + +2002-11-28 10:10 +0000 [r181] peterlin: + + * README: Resubmitted using -r1.1. + +2002-11-28 10:02 +0000 [r180] peterlin: + + * AUTHORS: Resubmitted using -r 1.1 + +2002-11-28 09:57 +0000 [r179] peterlin: + + * AUTHORS: Re-submitted using CVS 1.11.2. + +2002-11-28 09:41 +0000 [r178] peterlin: + + * README: Updated text reflecting that Microsoft Web + fonts are no longer freely available. + +2002-10-16 11:02 +0000 [r177] peterlin: + + * FreeSerif.sfd: Corrected glyph 0x0446, thanks + to Reiji SUZUKI, who spotted it. + +2002-10-11 16:40 +0000 [r176] peterlin: + + * ChangeLog: Update. + +2002-10-11 16:29 +0000 [r175] peterlin: + + * ChangeLog: Update. + +2002-10-11 15:46 +0000 [r174] peterlin: + + * FreeSans.sfd: Added a handful of kern pairs + beyond Latin-1. + +2002-10-11 14:14 +0000 [r173] peterlin: + + * FreeSerif.sfd: Adding kern pairs manually also + cleans the empty glyph slots (and makes the file unreadable by + PfaEdit). Reintroduced them. + +2002-10-11 14:01 +0000 [r172] peterlin: + + * FreeSerif.sfd: Added about one dozen kern + pairs as a test. + +2002-10-11 13:44 +0000 [r171] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Patch from Sept 23 + introduced core dumps, as PfaEdit dutifully cleared all the empty + glyph slots along the way, which messed up its internal workings. + Re-introduced all the empty glyph slots. + +2002-09-23 16:00 +0000 [r170] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: At some point I lost the + kerning information. First attempt to reconstruct it from AFM + files. + +2002-09-11 14:39 +0000 [r169] peterlin: + + * FreeMono.sfd: Swapped incorrect "dialytika and + oxia" and "dialytika and varia". Made "tonos" equal to "oxia". + Started doing base Greek with new tonos. + +2002-09-11 11:31 +0000 [r168] peterlin: + + * FreeMonoBold.sfd: Hebrew parts in sync with + Culmus 0.6. + +2002-09-11 11:26 +0000 [r167] peterlin: + + * ChangeLog: Update. + +2002-09-11 09:53 +0000 [r166] peterlin: + + * FreeMono.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Hebrew parts in sync + with Culmus 0.6. + +2002-09-11 09:16 +0000 [r165] peterlin: + + * ChangeLog: Update. + +2002-09-11 09:13 +0000 [r164] peterlin: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: * Added Danilo + Segan's Serbian Cyrillic glyphs. * Updated Hebrew part to comply + with Culmus 0.6. + +2002-09-10 08:21 +0000 [r163] peterlin: + + * FreeSans.sfd: Started working on IPA range. + +2002-09-09 16:01 +0000 [r161-162] peterlin: + + * ChangeLog: Update. + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Updated Cyrillic part + to match Filippov's 1.0.7pre14. + +2002-09-09 15:39 +0000 [r160] peterlin: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Updated Cyrillic part + to match Filippov's 1.0.7pre14. + +2002-09-09 14:33 +0000 [r158-159] peterlin: + + * ChangeLog: Update. + + * FreeSansOblique.sfd: Added Stepanyan's + Armenian glyphs from FreeSans, skewed for 12 degrees. + +2002-09-06 14:16 +0000 [r157] peterlin: + + * AUTHORS, CREDITS: Changed @ in + email addresses to " AT ". + +2002-09-06 13:43 +0000 [r155-156] peterlin: + + * ChangeLog: A minor correction. + + * ChangeLog: Update. + +2002-09-06 13:18 +0000 [r154] peterlin: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Added Maxim Iorsh's + Hebrew glyphs (still considered experimental by their author, but + much better than previous ones). + +2002-08-28 15:31 +0000 [r152-153] peterlin: + + * AUTHORS, CREDITS: Added Maxim + Iorsh. + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Added Maxim Iorsh's + Hebrew glyphs. + +2002-07-26 10:21 +0000 [r151] peterlin: + + * ChangeLog: Update. + +2002-07-26 10:17 +0000 [r150] peterlin: + + * FreeMono.sfd: Some minor changes. + +2002-06-11 19:28 +0000 [r148-149] peterlin: + + * ChangeLog: Update. + + * FreeMono.sfd: Applied Michalis Kabrianis's + patch concerning perispomeni in Greek politoniko. + +2002-05-23 11:25 +0000 [r147] peterlin: + + * ChangeLog: Update. + +2002-05-23 11:20 +0000 [r146] peterlin: + + * FreeMono.sfd: Applied Michalis Kabrianis's + patch which corrects psili. Also some working variants of + characters in the IPA range. + +2002-05-16 14:44 +0000 [r145] peterlin: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoBoldOblique.sfd: Added LangName + information. + +2002-05-15 13:23 +0000 [r144] peterlin: + + * ChangeLog: Update. + +2002-05-15 13:14 +0000 [r143] peterlin: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Deleted explicit ".notdef" + characters. + +2002-05-14 08:59 +0000 [r142] peterlin: + + * FreeSansBoldOblique.sfd: Filled-in the missing + TTFWidth and TTFWeight values. + +2002-05-14 08:51 +0000 [r141] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Correctly formed + Panose and LineGap lines. + +2002-05-09 18:13 +0000 [r140] peterlin: + + * ChangeLog: Update. + +2002-05-09 17:42 +0000 [r139] peterlin: + + * FreeSans.sfd: Added some more composite + glyphs. Croatian ligatures better kerned. + +2002-05-09 17:10 +0000 [r138] peterlin: + + * FreeSans.sfd: Added diacritics. Added glyphs + to the Latin Extenede-B area. + +2002-05-07 16:13 +0000 [r137] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Updated Panose and LangName + information in the TTF header. + +2002-05-07 15:40 +0000 [r136] peterlin: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Updated Panose and + LangName information in the TTF header. + +2002-05-07 15:28 +0000 [r135] peterlin: + + * FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd: Updating Panose and + LangName information in the font header. + +2002-04-30 12:27 +0000 [r134] peterlin: + + * ChangeLog: Update + +2002-04-30 11:21 +0000 [r133] peterlin: + + * FreeMonoBold.sfd: Several minor changes (lower + carons etc.) + +2002-04-30 10:14 +0000 [r132] peterlin: + + * FreeMonoBold.sfd: Working on Greek small + letters. + +2002-04-29 19:44 +0000 [r131] peterlin: + + * ChangeLog: Update. + +2002-04-29 19:38 +0000 [r129-130] peterlin: + + * FreeMonoBoldOblique.sfd: Started adding Greek. + + * FreeMono.sfd, + FreeMonoBold.sfd: Harmonizing Greek with + Latin. Done with capitals. + +2002-04-29 18:08 +0000 [r128] peterlin: + + * FreeMonoBold.sfd: Added glyphs in the + Geometrical Shapes and Miscellaneous Symbols area. + +2002-04-29 17:35 +0000 [r127] peterlin: + + * FreeMono.sfd: Added one glyph to the + Geometrical Shapes area, which is now completed; added three + glyphs to the Miscellaneous Symbols area. + +2002-04-29 10:34 +0000 [r126] peterlin: + + * FreeMono.sfd: Erased explicit ".notdef" + character (U+0000). Hopefully this will now stop getting PfaEdit + confused about the "post" table. + +2002-04-26 15:41 +0000 [r124-125] peterlin: + + * ChangeLog: Update. + + * FreeSans.sfd: Adjusted accent positions on + several glyphs in the Latin Extended-A area. + +2002-04-25 16:20 +0000 [r121-123] peterlin: + + * ChangeLog: Update. + + * FreeMono.sfd: Minor corrections in the Box + Drawing area. + + * FreeMonoBold.sfd: Box Drawing area completed. + Added some glyphs in the Geometrical Shapes area. + +2002-04-24 16:09 +0000 [r120] peterlin: + + * ChangeLog: Update. + +2002-04-24 16:06 +0000 [r119] peterlin: + + * FreeMono.sfd: BoxDrawing area completed. + +2002-04-23 15:22 +0000 [r118] peterlin: + + * FreeMonoBold.sfd: Added glyphs in the General + Punctuation area. + +2002-04-23 15:04 +0000 [r117] peterlin: + + * FreeMono.sfd, + FreeMonoBold.sfd: Added glyphs to the Box + Drawing area. + +2002-04-23 13:52 +0000 [r115-116] peterlin: + + * ChangeLog: Update. + + * tools/WGL4.lst: Correction. Added missing + characters 02DC:SMALL TILDE, F001:LATIN SMALL LIGATURE FI and + F002:LATIN SMALL LIGATURE FL (the latter two belong to private + use area). Left 00A0:NO-BREAK SPACE in place, although some specs + don't list it. Total 653 characters on the list (WGL4 is supposed + to have 652 coded characters). + +2002-04-22 21:27 +0000 [r114] peterlin: + + * FreeMonoBold.sfd: Adding new glyphs to the + Latin Extended-B and IPA Extensions ranges. + +2002-04-22 15:05 +0000 [r112-113] peterlin: + + * ChangeLog: *** empty log message *** + + * FreeMono.sfd, + FreeMonoBold.sfd: Working on Latin Extended-B + and Greek. + +2002-04-19 15:58 +0000 [r110-111] peterlin: + + * FreeSerif.sfd: Somewhat cleaner chess figures. + + * ChangeLog: *** empty log message *** + +2002-04-19 14:57 +0000 [r109] peterlin: + + * ChangeLog: Update. + +2002-04-19 14:23 +0000 [r108] peterlin: + + * tools/MES-2.txt, tools/MES-2.lst: + Corrected list (it is not 203C-203E, it is 203C and 203E). + +2002-04-19 09:24 +0000 [r107] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSans.sfd, + FreeSansBold.sfd, + FreeSansOblique.sfd, + FreeSansBoldOblique.sfd, + FreeMono.sfd, + FreeSerif.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeSerifBold.sfd, + FreeMonoBoldOblique.sfd: Changed "Family Name" + from Free to FreeSerif, FreeSans and FreeMono, as appropriate. + Changed Font Modifiers from MonoBold etc. to Bold, Italic, + Oblique, BoldOblique and BoldItalic. + +2002-04-18 09:38 +0000 [r106] peterlin: + + * FreeMono.sfd, + FreeMonoBold.sfd, + FreeMonoOblique.sfd, + FreeMonoBoldOblique.sfd: Corrected metrics; + now all character widths are set to 600. + +2002-04-17 18:49 +0000 [r104-105] peterlin: + + * ChangeLog: Added forgotten info on box drawing + characters in FreeSerif. + + * ChangeLog: *** empty log message *** + +2002-04-17 17:37 +0000 [r103] peterlin: + + * FreeSerif.sfd: Box drawing characters + corrected. Now they extend both ascender and descender height. + +2002-04-17 15:45 +0000 [r102] peterlin: + + * FreeMonoBold.sfd: Continued working on Greek. + +2002-04-17 14:53 +0000 [r101] peterlin: + + * FreeMonoBold.sfd: Added some more Box Drawing + characters. + +2002-04-17 11:56 +0000 [r100] peterlin: + + * FreeMonoBold.sfd: Added some Box Drawing + characters. + +2002-04-16 15:36 +0000 [r99] peterlin: + + * ChangeLog: *** empty log message *** + +2002-04-16 15:30 +0000 [r98] peterlin: + + * FreeMono.sfd: Added a couple of characters in + the Miscellaneous Symbols area. + +2002-04-16 14:28 +0000 [r97] peterlin: + + * FreeMonoBoldOblique.sfd: Added superscripts, + subscripts, vulgar fractions and a couple other characters needed + to make font MES-1 compliant. + +2002-04-16 13:58 +0000 [r96] peterlin: + + * FreeMonoBold.sfd: Added some characters, + mostly in the Miscellaneous Symbols area. FreeMonoBold now + complies with MES-1. + +2002-04-16 10:16 +0000 [r95] peterlin: + + * ChangeLog: Update. + +2002-04-16 10:13 +0000 [r94] peterlin: + + * FreeMonoBold.sfd: Started harmonizing Greek + letters with Latin and Cyrillic. + +2002-04-16 09:28 +0000 [r93] peterlin: + + * FreeMonoBold.sfd: Added subscripts, + superscripts and vulgar fractions. + +2002-04-15 13:42 +0000 [r92] peterlin: + + * ChangeLog: Update + +2002-04-12 15:59 +0000 [r91] peterlin: + + * AUTHORS, CREDITS: Added Beyene, + Kudlek, Kummer and Metzinger from the Theoretical Foundations of + Computer Science, University of Hamburg, the authors of the set + of Ethiopic metafonts. + +2002-04-12 15:42 +0000 [r90] peterlin: + + * ChangeLog: Update. + +2002-04-12 15:38 +0000 [r89] peterlin: + + * FreeSerif.sfd: Added Ethiopian glyphs, + converted from the Metafont sources from TGI, Universität Hamburg + (authors Berhanu Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, + and Jochen Metzinger) using Szabo's TeXtrace and retouched using + PfaEdit. Ethiopian metafonts are released under GNU GPL, + http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/wimis/kummer/ethiop_eng.html + +2002-04-12 15:30 +0000 [r88] peterlin: + + * FreeMonoBold.sfd: Added 40 characters, mostly + in the Latin Extended-B and IPA Extensions areas. + +2002-04-11 19:56 +0000 [r86-87] peterlin: + + * ChangeLog: *** empty log message *** + + * FreeMono.sfd: Added a handful of characters in + the Latin Extended-B, Currency Symbols and Miscellaneous Symbols + areas. + +2002-04-11 09:57 +0000 [r85] peterlin: + + * FreeMono.sfd: Added three glyphs to the IPA + Extensions area. + +2002-04-09 07:12 +0000 [r83-84] peterlin: + + * ChangeLog: *** empty log message *** + + * FreeMono.sfd: Corrected accent positioning in + the Extended Greek area; adding a couple of glyphs here and + there. 20 characters short of MES-2 conformance. + +2002-04-08 16:57 +0000 [r82] peterlin: + + * AUTHORS, CREDITS: Added Jeroen + Hellingman and Thomas Ridgeway, the authors of Malayalam, Oriya + and Tamil glyphs sets. + +2002-04-08 16:39 +0000 [r81] peterlin: + + * ChangeLog: *** empty log message *** + +2002-04-08 16:33 +0000 [r80] peterlin: + + * FreeMono.sfd: Added some arrows and Greek + politoniko. + +2002-04-05 15:04 +0000 [r79] peterlin: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Modern Non-Russian + Cyrillic mostly completed. + +2002-04-05 10:37 +0000 [r78] peterlin: + + * FreeSerif.sfd: Added Thomas Ridgeway's Tamil + fonts, partly edited. + +2002-04-04 16:15 +0000 [r77] peterlin: + + * ChangeLog: Update. + +2002-04-04 16:12 +0000 [r76] peterlin: + + * FreeMonoBold.sfd: Started working on the + non-Russian Cyrillic glyphs. Corrected Serbian letters dje, lje, + nje and tshe. + +2002-04-04 10:44 +0000 [r75] peterlin: + + * FreeMono.sfd: Minor modifications in the + non-Russian Cyrillic area. + +2002-04-04 10:35 +0000 [r74] peterlin: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Armenian capital + characters matching in case Latin, Cyrillic and Greek. + +2002-04-04 09:57 +0000 [r73] peterlin: + + * FreeMonoOblique.sfd: Serbian Cyrillic glyphs + synchronized with FreeMono. + +2002-04-04 09:36 +0000 [r71-72] peterlin: + + * ChangeLog: Update. + + * FreeMono.sfd: Serbian cyrillic characters dje + and tshe corrected. + +2002-04-03 16:34 +0000 [r70] peterlin: + + * ChangeLog: *** empty log message *** + +2002-04-03 16:29 +0000 [r69] peterlin: + + * FreeMono.sfd: Armenian characters added. + +2002-03-28 15:32 +0000 [r67-68] peterlin: + + * ChangeLog: Update. + + * FreeMono.sfd: Added some mathematical symbols. + +2002-03-26 21:00 +0000 [r66] peterlin: + + * ChangeLog: Update. + +2002-03-26 20:56 +0000 [r65] peterlin: + + * FreeSans.sfd: Added H.S. Pannu's Gurmukhi. It + actually fits in here much better than it fits FreeSerif. I'll + have to look for a Gurmukhi font with modulated stroke for + FreeSerif. + +2002-03-26 20:45 +0000 [r64] peterlin: + + * FreeSerif.sfd: A more stylish barred H. + +2002-03-26 20:35 +0000 [r63] peterlin: + + * ChangeLog: Update. + +2002-03-26 20:29 +0000 [r62] peterlin: + + * FreeMono.sfd: Minor changes in Greek; added + some mathematical symbols. + +2002-03-26 16:20 +0000 [r61] peterlin: + + * FreeMono.sfd: Completed vulgar fractions. + +2002-03-26 16:00 +0000 [r60] peterlin: + + * FreeSerif.sfd: Added dotted Hebrew letters. + +2002-03-26 14:40 +0000 [r58-59] peterlin: + + * FreeSerifItalic.sfd: Took Hebrew characters + from FreeSerif and slanted them for 15.5 degrees. + + * FreeSerif.sfd: Telugu letters optimized + somehow. Still too small, though. + +2002-03-26 14:15 +0000 [r57] peterlin: + + * AUTHORS, CREDITS: Corrected Unicode + ranges for Gurmukhi and Gujarati. + +2002-03-26 09:58 +0000 [r55-56] peterlin: + + * ChangeLog: Update. + + * FreeMonoBold.sfd: Added characters to the + Latin Extended-B and IPA Extensions area. + +2002-03-25 20:00 +0000 [r53-54] peterlin: + + * ChangeLog: Update. + + * FreeMonoBold.sfd: Started adding Latin + Extended-B and IPA Extensions. + +2002-03-25 19:28 +0000 [r51-52] peterlin: + + * ChangeLog: Update. + + * FreeMono.sfd: Minor cosmetic changes; cleaning + up Greek (removing redundant control points), added some + non-European Cyrillic glyphs as a test. + +2002-03-22 11:31 +0000 [r50] peterlin: + + * FreeMono.sfd: Some minor modifications; + letters in Latin Extended-B area "welded" together. + +2002-03-20 20:47 +0000 [r49] peterlin: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Numerous glyphs added in + the Latin Extended-B, IPA Extensions and Number Forms areas. + MES-1 compliant! + +2002-03-20 12:46 +0000 [r48] peterlin: + + * ChangeLog: Update. + +2002-03-19 14:22 +0000 [r47] peterlin: + + * ChangeLog: Update. + +2002-03-19 13:12 +0000 [r46] peterlin: + + * FreeMonoOblique.sfd: Added characters in Latin + Extended-B and IPA Extensions area. Now mostly synchronized with + FreeMono. + +2002-03-18 17:56 +0000 [r45] peterlin: + + * FreeMono.sfd: Added some more IPA characters. + +2002-03-18 14:33 +0000 [r44] peterlin: + + * ChangeLog: Update. + +2002-03-18 12:21 +0000 [r43] peterlin: + + * FreeMono.sfd: Added some more characters, in + particular in the Latin Extended-B and IPA Extensions areas, to a + total of 1424 chars. + +2002-03-15 19:08 +0000 [r41-42] peterlin: + + * FreeMono.sfd: Added a dozen or two new + characters, in particular in the IPA Extensions area. + + * ChangeLog: Update. + +2002-03-15 13:57 +0000 [r40] peterlin: + + * ChangeLog: Update. + +2002-03-14 09:15 +0000 [r38-39] peterlin: + + * ChangeLog: Update. + + * FreeMono.sfd: Added three smiley characters. + +2002-03-10 18:16 +0000 [r37] peterlin: + + * AUTHORS, ChangeLog, + CREDITS: Due credit to the original author of + Gurmukhi font, Hardip Singh Pannu. + +2002-03-10 18:07 +0000 [r36] peterlin: + + * FreeSerif.sfd: Anshuman Pandey has only + converted Gurmukhi from TrueType to Metafont; the original author + of Gurkmukhi font is Hardip Singh Pannu + <http://members.aol.com/hspannu/punjabi.html>. Got the permission + from him to include the Gurmukhi glyph set. + +2002-03-08 12:17 +0000 [r34-35] peterlin: + + * ChangeLog: Update + + * FreeSerif.sfd: Added some more glyphs in the + Mathematical Symbols area. + +2002-03-06 20:48 +0000 [r32-33] peterlin: + + * ChangeLog: Update. + + * FreeSerif.sfd: Basic Gurmukhi (Unicode range + without ligatures). I believe the author is Anshuman Pandey + <apandey@u.washington.edu>, found in CTAN + <http://www.tex.ac.uk/tex-archive/language/gurmukhi/pandey/>. + +2002-03-06 20:13 +0000 [r31] peterlin: + + * ChangeLog: Update. + +2002-03-06 18:07 +0000 [r30] peterlin: + + * FreeMono.sfd: Silly me. Glyphs in Box Drawing + and Block Elements areas extend through ascender *and descender* + width. Corrected. + +2002-03-06 15:10 +0000 [r29] peterlin: + + * FreeMono.sfd, + FreeMonoOblique.sfd: Added musical glyphs in + the Miscellaneous Symbols area, linked "non-breaking" space to + space, "soft hyphen" to hyphen-minus. Now we are 4 glyphs short + of MES-1 conformance. + +2002-03-05 19:50 +0000 [r28] peterlin: + + * ChangeLog: Update. + +2002-03-05 19:47 +0000 [r27] peterlin: + + * tools/WGL4.lst (added): Microsoft Windows Glyph + List 4.0 (WGL4). I seem to have lost 2 characters - there ought + to be 652, and I have only 650. + +2002-03-05 19:20 +0000 [r25-26] peterlin: + + * ChangeLog: Update. + + * tools/LigatureList.pl (added): A Perl script, + which lists the GSUB list (ligature list) of a OpenType font. + Requires George Williams' showttf utility, available on + <http://bibliofile.mc.duke.edu/gww/FreeWare/MyToys.html>. + +2002-03-05 19:12 +0000 [r24] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerifBold.sfd: An auxilliary substitute + for Hebrew glyphs added. + +2002-03-04 17:38 +0000 [r23] peterlin: + + * ChangeLog: Update + +2002-03-04 17:35 +0000 [r22] peterlin: + + * FreeSerif.sfd: Added some more glyphs in the + Mathematical Operators area. + +2002-03-04 15:24 +0000 [r21] peterlin: + + * AUTHORS, CREDITS: Added Frans + Velthuis <velthuis@rc.rug.nl> and Anshuman Pandey + <apandey@u.washington.edu>. + +2002-03-04 14:54 +0000 [r20] peterlin: + + * ChangeLog: Update + +2002-03-04 14:44 +0000 [r19] peterlin: + + * FreeSerif.sfd: Fragments of Harsh Kumar's + Devanagari font substituted by Frans Velthuis' and Anshuman + Pandey's devanagari metafont, converted to PFB by Peter Szabo's + TeXtrace. Right now only Unicode part without ligatures is made + (though they are present in original font). + +2002-02-28 19:14 +0000 [r18] peterlin: + + * ChangeLog: Update ChangeLog. + +2002-02-28 19:05 +0000 [r17] peterlin: + + * FreeSerif.sfd: Added some more glyphs to the + Miscellaneous Symbols page (0x26). + +2002-02-28 18:33 +0000 [r16] peterlin: + + * AUTHORS, CREDITS: Added Prasad A. + Chodavarapu, the author of Tikkana, a Telugu font available under + the GNU General Public License. + +2002-02-28 18:00 +0000 [r15] peterlin: + + * FreeSerif.sfd: Added some Telugu glyphs to + page 0x0C, courtesy Prasad A. Chodavarapu + <http://chaitanya.bhaavana.net/fonts/> + +2002-02-28 16:49 +0000 [r14] peterlin: + + * AUTHORS, CREDITS: Prof. Venkatesh + (Venky) Hariharan supplied me with an email address for Harsh + Kumar. + +2002-02-28 14:51 +0000 [r13] peterlin: + + * ChangeLog (added): A log of changes to project + files. + +2002-02-26 18:38 +0000 [r12] peterlin: + + * AUTHORS, CREDITS: Mohamed Ishan's + email address corrected to his preferred one. + +2002-02-25 19:26 +0000 [r11] peterlin: + + * FreeMono.sfd: Added some more glyphs, in + particular in the Mathematical Operators section. Changed + FamilyName to Free, FontName to FreeMono, and Full name to "Free + Monospaced". + +2002-02-25 12:43 +0000 [r10] peterlin: + + * FreeSerif.sfd: Added a couple of glyphs in + Mathematics Operators. + +2002-02-20 21:08 +0000 [r9] peterlin: + + * AUTHORS, CREDITS: New coauthors + added: Mohamed Ishan, Harsh Kumar and Sushant Kumar Dash. + +2002-02-20 20:21 +0000 [r8] peterlin: + + * FreeSerifItalic.sfd, + FreeSerifBoldItalic.sfd, + FreeSerif.sfd, + FreeSerifBold.sfd: Glyphs originating from the + old Omega system removed. + +2002-02-20 20:06 +0000 [r7] peterlin: + + * FreeSerifItalic.sfd (added), + FreeSerifBoldItalic.sfd (added), + FreeSerif.sfd (added), + FreeSerifBold.sfd (added): Proportional ISO + 10646 fonts with modulated stroke. + +2002-02-20 18:46 +0000 [r6] peterlin: + + * FreeSans.sfd: Added an incomplete set of Oriya + characters, courtesy Sushant Dash <sushant@writeme.com>. + +2002-02-20 16:37 +0000 [r5] peterlin: + + * tools/MES-3B.lst (added), tools + (added), tools/MES-1.txt (added), + tools/MES-2.txt (added), + tools/CheckConformance.pl (added), + tools/MES-1.lst (added), + tools/MES-2.lst (added), + tools/MES-3B.txt (added), + tools/mes-list-expand.pl (added): Tools for + checking conformance with coded character sets. + +2002-02-20 13:52 +0000 [r3-4] peterlin: + + * AUTHORS (added), CREDITS (added), + README (added): Free UCS Scalable Fonts + + * FreeSans.sfd (added), + FreeSansBold.sfd (added), + FreeSansOblique.sfd (added), + FreeSansBoldOblique.sfd (added): Proportional + ISO 10646 fonts with uniform stroke. + +2002-02-20 13:46 +0000 [r2] peterlin: + + * sfd (added), trunk/freefont (added), + FreeMono.sfd (added), + FreeMonoBold.sfd (added), + FreeMonoOblique.sfd (added), + FreeMonoBoldOblique.sfd (added): Monospaced + ISO 10646 fonts. + diff --git a/tcpdf/fonts/freefont-20120503/INSTALL b/tcpdf/fonts/freefont-20120503/INSTALL new file mode 100644 index 0000000..b458961 --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/INSTALL @@ -0,0 +1,98 @@ + Installing GNU FreeFont + ======================= + +GNU FreeFont can be used in any modern operating system. + +This document explains how to install FreeFont on some common systems. + +UNIX/GNU/Linux/BSD Systems +-------------------------- + +FreeFont works with any system using the free font rasterizer FreeType +<http://www.freetype.org/>. Some features such as glyph substitution and +positioning may be handled by the text layout library +Pango <http://www.pango.org/>. + +Most recent systems using FreeType2 and Pango handle OpenType fonts well, +but on older systems TrueType may perform better. + +* Debian GNU/Linux + +Users of Debian GNU/Linux system will probably want to use the Debian package, +named 'ttf-freefont', available from the Debian Linux site. + +Install the fonts by issuing the command + apt-get install ttf-freefont + + +* KDE local installation + +Users of KDE can install .ttf files on a per-user basis using the KDE +Control Center module "kcmfontinst", which may appear in the menu as + + Settings -> System Administration -> Font Installer + +This is especially helpful for developers and testers. + + +* Generic X Window systems + + 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts + in the TrueType format. + + 2) Unpack TrueType fonts into a suitable directory, + e.g. /usr/local/share/fonts/default/TrueType/ + + 3) If you have chosen any other directory, make sure the directory you + used to install the fonts is listed in the path searched by the X + Font Server by editing the config file in /etc/X11/. + + In some systems, you list the directory in the item "catalogue=" + in the file /etc/X11/fs/config. + + 4) Run ttmkfdir in the directory where you unpacked the fonts. + + +Microsoft Windows 95/98/NT/2000/XP; Vista/7 +------------------------------------------- + +Note that in at least Windows 7, Vista, XP and 2000, the TrueType versions +perform much better than, and are recommended over, the OpenType ones. + +For good font smoothing in Windows, Microsoft ClearType must be enabled. +The native Windows web browser must be used to install, enable, and configure +ClearType. A web search for "ClearType Tuner" will find the proper web pages. +Recent versions of the browser raise a security block (a yellow bar at the +top of the window), which you must act upon to allow installation. A +checkbox in the window turns ClearType on (in Win-speek, "Turn on ClearType"). +The change happens immediately. + +* Vista, Windows 7: + 1) From the Start menu, open Control Panels + 2) Drag-n-drop font files onto Fonts control panel + You may get a dialog saying + "Windows needs your permission to continue" + a) Click Continue + +* 95/98/NT: + The font installation is similar to Vista. + + In order to use OpenType, users of Windows 95, 98 and NT 4.0 can + install Adobe's 'Type Manager Light', which may be obtained from + the Adobe web site. + + Otherwise, use the TrueType versions. + +Apple Mac OS X +-------------- + +Support for OpenType on MacOS X started with OS 10.4, and has been improved +gradually in later versions. + +Installing on Mac OS X consists of moving the font files to either + /Library/Fonts/ or ~/Library/Fonts/ +depending on whether they should be available to all users on your system +or just to your own user. + +-------------------------------------------------------------------------- +$Id: INSTALL,v 1.11 2011-06-12 07:14:12 Stevan_White Exp $ diff --git a/tcpdf/fonts/freefont-20120503/README b/tcpdf/fonts/freefont-20120503/README new file mode 100644 index 0000000..d83f4a9 --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/README @@ -0,0 +1,127 @@ +-*-text-*- + GNU FreeFont + +The GNU FreeFont project aims to provide a useful set of free scalable +(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode +UCS (Universal Character Set). + +Statement of Purpose +-------------------- + +The practical reason for putting glyphs together in a single font face is +to conveniently mix symbols and characters from different writing systems, +without having to switch fonts. + +Coverage +-------- + +FreeFont covers the following character ranges +* Latin, Cyrillic, and Arabic, with supplements for many languages +* Greek, Hebrew, Armenian, Georgian, Thaana, Syriac +* Devanagari, Bengali, Gujarati, Gurmukhi, Sinhala, Tamil, Malayalam +* Thai, Tai Le, Kayah Li, Hanunóo, Buginese +* Cherokee, Unified Canadian Aboriginal Syllabics +* Ethiopian, Tifnagh, Vai, Osmanya, Coptic +* Glagolitic, Gothic, Runic, Ugaritic, Old Persian, Phoenician, Old Italic +* Braille, International Phonetic Alphabet +* currency symbols, general punctuation and diacritical marks, dingbats +* mathematical symbols, including much of the TeX repertoire of symbols +* technical symbols: APL, OCR, arrows, +* geometrical shapes, box drawing +* musical symbols, gaming symbols, miscellaneous symbols + etc. +For more detail see <http://www.gnu.org/software/freefont/coverage.html> + +Editing +------- + +The free outline font editor, George Williams' FontForge +<http://fontforge.sourceforge.net/> is used for editing the fonts. + +Design Issues +------------- + +Which font shapes should be made? Historical style terms like Renaissance +or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek +scripts to any greater extent than Kufi or Nashki can be applied beyond +Arabic script; "italic" is strictly meaningful only for Latin letters, +although many scripts such as Cyrillic have a history with "cursive" and +many others with "oblique" faces. + +However, most modern writing systems have typographic formulations for +contrasting uniform and modulated character stroke widths, and since the +advent of the typewriter, most have developed a typographic style with +uniform-width characters. + +Accordingly, the FreeFont family has one monospaced - FreeMono - and two +proportional faces (one with uniform stroke - FreeSans - and one with +modulated stroke - FreeSerif). + +The point of having characters from different writing systems in one font +is that mixed text should look good, and so each FreeFont face contains +characters of similar style and weight. + +Licensing +--------- + +Free UCS scalable fonts is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +The fonts are distributed in the hope that they will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and +embed this font or unaltered portions of this font into the document, this +font does not by itself cause the resulting document to be covered by the +GNU General Public License. This exception does not however invalidate any +other reasons why the document might be covered by the GNU General Public +License. If you modify this font, you may extend this exception to your +version of the font, but you are not obligated to do so. If you do not +wish to do so, delete this exception statement from your version. + +Files and their suffixes +------------------------ + +The files with .sfd (Spline Font Database) are in FontForge's native format. +They may be used to modify the fonts. + +TrueType fonts are the files with the .ttf (TrueType Font) suffix. These +are ready to use in Linux/Unix, on Apple Mac OS, and on Microsoft Windows +systems. + +OpenType fonts (with suffix .otf) are preferred for use on Linux/Unix, +but *not* for recent Microsoft Windows systems. +See the INSTALL file for more information. + +Web Open Font Format files (with suffix .woff) are for use in Web sites. +See the webfont_guidelines.txt for further information. + +Further information +------------------- + +Home page of GNU FreeFont: + http://www.gnu.org/software/freefont/ + +More information is at the main project page of Free UCS scalable fonts: + http://savannah.gnu.org/projects/freefont/ + +To report problems with GNU FreeFont, it is best to obtain a Savannah +account and post reports using that account on + https://savannah.gnu.org/bugs/ + +Public discussions about GNU FreeFont may be posted to the mailing list + freefont-bugs@gnu.org + +-------------------------------------------------------------------------- +Original author: Primoz Peterlin +Current administrator: Steve White <stevan.white@googlemail.com> + +$Id: README,v 1.10 2011-06-12 07:14:12 Stevan_White Exp $ diff --git a/tcpdf/fonts/freefont-20120503/TROUBLESHOOTING b/tcpdf/fonts/freefont-20120503/TROUBLESHOOTING new file mode 100644 index 0000000..a7af222 --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/TROUBLESHOOTING @@ -0,0 +1,115 @@ + Troubleshooting GNU FreeFont + +So your text looks lousy, although you installed FreeFont and you seem to be +using it. What do you do? + +Before you blame the problem on FreeFont, take the time to double-check that +the text you are looking at is really rendered with FreeFont. + +Be aware that not all Unicode characters are supported by FreeFont, and +even characters supported by one face, such as Serif, might not be +supported by other faces such as Sans. + +Also, some systems have settings that strongly affect the rendering +of fonts. It may be worth tweaking these. + +glyph substitution +================== + +When given the task of displaying characters in text, modern font rendering +software usually tries to display *something*, even if the font it is +*supposed* to be using does not contain glyphs for all the characters in the +text. The software will snoop through all the fonts on the system to find +one that has a glyph for the one missing in the desired font. So although +you have specified FreeSans-bold, you may be looking at a letter from quite +a different font. + +First double-check that the font in question really contains the character +in question. If you don't have font development software, this can be +tricky. In the case of FreeFont, you can check if a given character +range is supported: <http://www.gnu.org/software/freefont/coverage.html> + +Next double-check that your application (web browser, text editor, etc) +has indeed been properly instructed to use the font. + +Then double-check that the font is really installed in the system. +(This depends on the operating system, of course.) + +Linux and Unix +============== + +Modern Linux systems use a system called fontconfig, which maintains a font +cache, for efficiency. + +The font cache can really complicate font installation and troubleshooting +however. It can happen that when a font is newly installed, what is +displayed is coming out of an old cache entry rather than the new font. + +Just what to do depends on how and where the font was installed. + +Fonts installed system-wide are usually put in a directory such as + /usr/share/fonts/ +the font cache for these might be in + /var/cache/fontconfig/ +Fonts installed just for one user account will typically be in + ~/.fonts/ +and the cache will be + ~/.fontconfig/ + +You can clean your local cache merely by emptying the directory + ~/.fontconfig/ +In any case, to clean the cache, you can use the fontconfig command + fc-cache -vf +If run as root, it will clean the system cache, if run as a normal user, +it cleans only the normal user's cache. + +The procedure for local fonts is: + 1) shut off any program using the fonts in question + 2) clean the cache + 3) re-start the program +The procedure for system-wide fonts is: + 1) log out of the X Windows session + 2) in a console, clean the cache + 3) log in to an X Windows session + +LibreOffice / OpenOffice +======================== +These products have their own font rendering libraries, which have +idiosyncratic behavior. + +It has recently been reported that as of LibreOffice 3.5.1, font features +are disabled for OpenType fonts. If you use FreeFont with these products, +you may want to install the TrueType versions of the fonts. + +Windows +======= + +The most common complaint has to do with "blurry text". There are two +causes. + +The first is that ClearType smoothing is turned off. The best way to check +is to use the native Windows Web browser. Do a search for "ClearType Tuner". +The Microsoft pages install a tuner for ClearType. A security block notice +will appear at the top of the window--you have to allow the installation. +Then check the box "Turn on ClearType". The change happens immediately. + +The secont cause is that the FreeFont version with cubic spline outlines is +installed. As of the 2012 GNU FreeFont release, the TrueType builds have +quadratic splines, which work best with Windows' rendering software. + TTF (TrueType) quadratic splines Windows 7, Vista, Windows XP. + OTF (OpenType) cubic splines Linux, Mac + +Note also: Firefox has a setting for ClearType: + gfx.font_rendering.cleartype_params.rendering_mode +A value of 2 sets it to old-style GDI rendering, while -1 is the default. + +reporting problems +================== + +If you really think you're seeing a bug in FreeFont, or if you have +a suggestion, consider opening a problem report at + https://savannah.gnu.org/bugs/?group=freefont +It is best that you make a Savannah account and log in with that, so +you can be e-mailed whenever changes are made to your report. + +$Id: troubleshooting.txt,v 1.10 2011-07-16 08:38:06 Stevan_White Exp $ diff --git a/tcpdf/fonts/freefont-20120503/USAGE b/tcpdf/fonts/freefont-20120503/USAGE new file mode 100644 index 0000000..7f7aa5c --- /dev/null +++ b/tcpdf/fonts/freefont-20120503/USAGE @@ -0,0 +1,185 @@ + Usage of GNU FreeFont + +Language scripts and faces +========================== + +There are three faces (serif, sans-serif, and monospace), and four styles +(regular, bold, cursive/italic, and bold cursive/italic) for each face. +There is one font file per face/style combination: 12 files in total. + +The letters for various languages, as well as specialized symbols, exist +among the various font files, but they are not uniformly populated. +All the fonts have complete support for Latin, Cyrillic, and Greek, as +well as most of the extensions for those scripts. + +At this time, serif regular has by far the largest number of letters, and +supports the largest number of writing scripts. However there are writing +scripts supported by the sans-serif but not by serif. + +For an overview of which scripts and sets of symbols are supported by +which face, see the FreeFont 'coverage' web page. + +Font features +============= + +FreeFont has numerous font "features" that perform alterations to the basic +letters of the font, replacing them with other letters, or positioning them +with respect to other letters. + +Many features are activated automatically, but in some environments, they +present some user control. This documents those features with user control. + +Language-specific features +========================== + +Some OpenType font features are activated only when the text is specified to +be of a certain language. + +This is done in HTML by enclosing the text with a tag whose 'lang' attribute +is set to the appropriate ISO 632.2 language code. In a word processor, +any block of text can be given a language setting. + +Latin +----- +Catalan ligature improving l·l +Dutch ligatures for ij, IJ +Sami localized form for letter Eng +Turkish overrides ligatures fi ffi of Latin + +Cyrillic +-------- +Ukrainian ligature for double i-diaresis +Serbian/Macedonian localized letters be, and more in italic +Bulgarian style set for modern glyphs + +Hebrew +------ +Yiddish raised vowels under yo + +Devanagari +---------- +Sanskrit much larger set of ligatures + +Hindi, Marathi better spacing of Western punctuation marks + +Indic languages +--------------- + +The 'danda' character is encoded in Unicode only in the Devanagari range. +When writing in scripts of other Indic languages, this same character is to +be used. But the shapes and line thicknesses of glyphs vary slightly from +one script to another, so the same glyph for 'danda' may not fit all scripts. + +By specifying the language of the text, an appropriate glyph for 'danda' +will be obtained. + +Style sets +========== + +These replacements are activated by specifying a "Style Set". +These features are accessible only from typesetting software. + +Cyrillic Bulgarian modern (ss01) + +Devanagari Bombay (ss02), Calcutta (ss03), Nepali (ss04) + +Discretionary features +====================== +These features are accessible only from typesetting software. +Typically the user must specifically request them. + +Unless otherwise noted, these are available only in FreeSerif. + +Ligatures and substitutions +--------------------------- + +Arabic, Armenian, Hebrew, German, Dutch + +Small captials +-------------- + +A limited set of specially drawn small capital letters in Latin. + +Superscript and subscript +------------------------- + +Transform a limited set of characters--mostly Latin letters and numerals-- +to versions well-sized and positioned as superscript or subscript. + +Numeral styles +-------------- + +The default numerals of FreeSerif are mono-spaced and of even height. +It also features proportionally-spaced numerals, and "old-style" numerals-- +those which vary in height and sometimes go beneath the baseline. +These can be had at discretion. + +Diagonal fractions +------------------ + +A limited set of diagonal fraction substitutions are available at discretion. +The set is more than what is encoded in Unicode. +They work with the ASCII slash or the mathematical slash U+2215. +The transform a sequence "number-slash-number" to a diagonal form. + +Zero +---- + +A slashed form of the numeral zero is available at discretion. +Available in all faces. + +Alternative characters +====================== + +FreeSerif has some listings of alternatives for specific characters. +Again this is use primarily in specialized typesetting software. + +Greek, Latin + +Use in LaTeX +============ +It is possible to use Unicode fonts in recent LaTeX implementations, but in + LuaTeX http://www.luatex.org/ and + XeTeX http://tug.org/xetex/ +it is particularly easy to use Unicode text, and to enable font features. +Recent versions of these systems use the 'fontspec' package to choose fonts +and features. + +A very simple document might contain the lines +--------------------------------------------------------------------------- +\documentclass{ltxdockit} +\usepackage{fontspec} +\usepackage{xunicode} +\setmainfont[]{FreeSerif} +\begin{document} +{\fontspec[Script=Default,Fractions={On}]{FreeSerif} +1/7 3/10 7/10} + +x\raisebox{-0.5ex}{{\scriptsize ai}} +x{\fontspec[Script=Default,VerticalPosition={Inferior}]{FreeSerif} +abcdefghijklmnopqrstuvwxyz+−(0123456789)} \\ +x\raisebox{0.85ex}{{\scriptsize ai}} +x{\fontspec[Script=Default,VerticalPosition={Superior}]{FreeSerif} +abcdefghijklmnopqrstuvwxyz+−(0123456789)} + +{\fontspec[Script=Latin]{FreeSerif} +\textsc{Small Caps} } + +{ Bсички хора се раждат свободни и равни по достойнство и права. +\fontspec[Script=Cyrillic,Language=Bulgarian,Variant={1}]{FreeSerif} \selectfont +Bсички хора се раждат свободни и равни по достойнство и права. } + +\end{document} +--------------------------------------------------------------------------- +Here are some 'fontspec' setting-value pairs meaningful for FreeFont. + +Numbers: Lining OldStyle Proportional SlashedZero +Fractions: On +VerticalPosition: Superior Inferior +Ligatures: Common Historical +Letters: UppercaseSmallCaps +Variant: 1 (etc. -- must be in {} picks style set.) +--------------------------------------------------------------------------- + + +$Id: usage.txt,v 1.10 2011-07-16 08:38:06 Stevan_White Exp $ diff --git a/tcpdf/fonts/freemono.ctg.z b/tcpdf/fonts/freemono.ctg.z new file mode 100644 index 0000000..e952241 Binary files /dev/null and b/tcpdf/fonts/freemono.ctg.z differ diff --git a/tcpdf/fonts/freemono.php b/tcpdf/fonts/freemono.php new file mode 100644 index 0000000..566ea4c --- /dev/null +++ b/tcpdf/fonts/freemono.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeMono'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=584424; +$enc=''; +$file='freemono.z'; +$ctg='freemono.ctg.z'; +$desc=array('Flags'=>33,'FontBBox'=>'[-793 -200 699 800]','ItalicAngle'=>0,'Ascent'=>800,'Descent'=>-200,'Leading'=>0,'CapHeight'=>563,'XHeight'=>417,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cbbox=array(0=>array(40,-80,560,643),33=>array(240,-15,360,618),34=>array(146,315,454,604),35=>array(92,-62,508,647),36=>array(113,-92,487,655),37=>array(87,-12,513,611),38=>array(105,-16,478,519),39=>array(236,315,364,604),40=>array(294,-124,458,604),41=>array(147,-124,311,604),42=>array(113,250,487,604),43=>array(72,32,528,530),44=>array(135,-145,340,145),45=>array(72,258,528,299),46=>array(226,-15,374,116),47=>array(113,-81,487,668),48=>array(113,-15,487,618),49=>array(113,0,487,612),50=>array(84,0,478,618),51=>array(96,-15,499,618),52=>array(105,0,478,604),53=>array(96,-15,499,604),54=>array(136,-15,510,618),55=>array(105,-1,478,604),56=>array(113,-15,487,618),57=>array(136,-15,510,618),58=>array(226,-15,374,417),59=>array(139,-145,350,417),60=>array(72,44,522,518),61=>array(51,190,549,375),62=>array(78,44,528,518),63=>array(134,-15,487,577),64=>array(105,-62,478,624),65=>array(9,0,591,563),66=>array(43,0,541,563),67=>array(63,-16,534,576),68=>array(43,0,520,563),69=>array(43,0,520,563),70=>array(43,0,520,563),71=>array(63,-16,562,576),72=>array(53,0,551,563),73=>array(113,0,487,563),74=>array(84,-16,583,563),75=>array(43,0,572,563),76=>array(63,0,541,563),77=>array(11,0,593,563),78=>array(22,0,562,563),79=>array(51,-16,549,576),80=>array(43,0,499,563),81=>array(51,-115,549,576),82=>array(43,0,589,563),83=>array(92,-16,508,576),84=>array(72,0,528,563),85=>array(40,-16,560,563),86=>array(9,0,591,563),87=>array(20,0,580,563),88=>array(40,0,560,563),89=>array(51,0,549,563),90=>array(103,0,497,563),91=>array(280,-124,445,604),92=>array(113,-81,487,668),93=>array(155,-124,320,604),94=>array(113,354,487,615),95=>array(0,-125,600,-75),96=>array(155,490,320,639),97=>array(72,-16,541,431),98=>array(22,-16,541,604),99=>array(84,-16,535,431),100=>array(63,-16,583,604),101=>array(63,-16,520,431),102=>array(105,0,541,604),103=>array(63,-186,562,431),104=>array(43,0,551,604),105=>array(92,0,508,624),106=>array(117,-186,428,624),107=>array(63,0,541,604),108=>array(92,0,508,604),109=>array(11,0,593,431),110=>array(53,0,541,431),111=>array(72,-16,528,431),112=>array(22,-186,541,431),113=>array(63,-186,583,431),114=>array(84,0,541,427),115=>array(103,-16,497,431),116=>array(43,-16,499,563),117=>array(43,-16,541,417),118=>array(30,0,570,417),119=>array(30,0,570,417),120=>array(51,0,549,417),121=>array(51,-186,549,417),122=>array(115,0,489,417),123=>array(157,-124,410,604),124=>array(280,-124,320,604),125=>array(190,-124,443,604),126=>array(92,212,508,348),160=>array(0,0,0,0),161=>array(240,-165,360,468),162=>array(113,-13,469,630),163=>array(63,0,520,578),164=>array(103,95,497,489),165=>array(51,0,549,563),166=>array(280,-124,320,604),167=>array(66,-62,534,603),168=>array(140,511,461,611),169=>array(3,-15,596,578),170=>array(154,188,447,574),171=>array(63,0,541,417),172=>array(72,168,528,438),173=>array(72,258,528,299),174=>array(3,-15,596,578),175=>array(155,536,445,576),176=>array(155,346,445,636),177=>array(72,0,528,529),178=>array(175,379,405,732),179=>array(181,371,416,732),180=>array(280,490,445,639),181=>array(43,-200,541,417),182=>array(79,-62,525,604),183=>array(250,180,350,280),184=>array(210,-173,377,0),185=>array(191,375,410,728),186=>array(154,188,448,577),187=>array(63,0,541,417),188=>array(16,0,580,612),189=>array(23,0,573,612),190=>array(6,0,580,612),191=>array(113,-175,466,417),192=>array(9,0,591,775),193=>array(9,0,591,772),194=>array(9,0,591,759),195=>array(9,0,591,703),196=>array(9,0,591,709),197=>array(9,0,591,794),198=>array(10,0,590,563),199=>array(63,-173,534,576),200=>array(43,0,520,777),201=>array(43,0,520,775),202=>array(43,0,520,755),203=>array(43,0,520,706),204=>array(113,0,487,777),205=>array(113,0,487,774),206=>array(113,0,487,760),207=>array(113,0,487,708),208=>array(0,0,520,563),209=>array(22,0,562,705),210=>array(51,-16,549,777),211=>array(51,-16,549,778),212=>array(51,-16,549,759),213=>array(51,-16,549,703),214=>array(51,-16,549,707),215=>array(118,100,482,464),216=>array(40,-43,560,605),217=>array(40,-16,560,777),218=>array(40,-16,560,775),219=>array(40,-16,560,759),220=>array(40,-16,560,707),221=>array(51,0,549,778),222=>array(43,0,499,563),223=>array(23,-16,497,604),224=>array(72,-16,541,640),225=>array(72,-16,541,640),226=>array(72,-16,541,626),227=>array(72,-16,541,580),228=>array(72,-16,541,591),229=>array(72,-16,541,672),230=>array(12,-16,578,431),231=>array(84,-173,535,431),232=>array(63,-16,520,640),233=>array(63,-16,520,640),234=>array(63,-16,520,624),235=>array(63,-16,520,591),236=>array(92,0,508,640),237=>array(92,0,508,640),238=>array(92,0,508,628),239=>array(92,0,508,591),240=>array(72,-17,528,620),241=>array(53,0,541,580),242=>array(72,-16,528,640),243=>array(72,-16,528,640),244=>array(72,-16,528,630),245=>array(72,-16,528,580),246=>array(72,-16,528,591),247=>array(72,25,528,540),248=>array(53,-43,543,458),249=>array(43,-16,541,640),250=>array(43,-16,541,640),251=>array(43,-16,541,626),252=>array(43,-16,541,591),253=>array(51,-186,549,640),254=>array(22,-186,541,590),255=>array(51,-186,549,591),256=>array(9,0,591,668),257=>array(72,-16,541,531),258=>array(9,0,591,743),259=>array(72,-16,541,623),260=>array(9,-155,601,563),261=>array(72,-155,556,431),262=>array(63,-16,534,777),263=>array(84,-16,535,640),264=>array(63,-16,534,760),265=>array(84,-16,535,623),266=>array(63,-16,534,712),267=>array(84,-16,535,591),268=>array(63,-16,534,753),269=>array(84,-16,535,640),270=>array(43,0,520,751),271=>array(63,-16,686,604),272=>array(0,0,520,563),273=>array(63,-16,583,604),274=>array(43,0,520,668),275=>array(63,-16,520,531),276=>array(43,0,520,744),277=>array(63,-16,520,624),278=>array(43,0,520,708),279=>array(63,-16,520,604),280=>array(43,-155,548,563),281=>array(63,-155,520,431),282=>array(43,0,520,751),283=>array(63,-16,520,640),284=>array(63,-16,562,756),285=>array(63,-186,562,640),286=>array(63,-16,562,744),287=>array(63,-186,562,621),288=>array(63,-16,562,714),289=>array(63,-186,562,606),290=>array(63,-200,562,576),291=>array(63,-186,562,665),292=>array(53,0,551,759),293=>array(43,0,551,786),294=>array(53,0,551,563),295=>array(43,0,551,604),296=>array(113,0,487,704),297=>array(92,0,508,580),298=>array(113,0,487,667),299=>array(92,0,508,531),300=>array(113,0,487,744),301=>array(92,0,508,622),302=>array(113,-155,500,563),303=>array(92,-155,520,624),304=>array(113,0,487,710),305=>array(92,0,508,417),306=>array(29,-16,571,563),307=>array(124,-186,483,624),308=>array(84,-16,583,749),309=>array(117,-186,432,666),310=>array(43,-200,572,563),311=>array(63,-200,541,604),312=>array(70,0,530,417),313=>array(63,0,541,760),314=>array(92,0,508,798),315=>array(63,-200,541,563),316=>array(92,-200,508,604),317=>array(63,0,544,576),318=>array(92,0,512,604),319=>array(63,0,541,563),320=>array(52,0,482,604),321=>array(43,0,541,563),322=>array(92,0,508,604),323=>array(22,0,562,755),324=>array(53,0,541,640),325=>array(22,-200,562,563),326=>array(53,-200,541,431),327=>array(22,0,562,754),328=>array(53,0,541,640),329=>array(8,0,541,664),330=>array(53,-11,521,577),331=>array(53,-199,480,431),332=>array(51,-16,549,669),333=>array(72,-16,528,531),334=>array(51,-16,549,744),335=>array(72,-16,528,621),336=>array(51,-16,549,745),337=>array(72,-16,528,634),338=>array(10,0,590,563),339=>array(12,-16,578,431),340=>array(43,0,589,756),341=>array(84,0,541,640),342=>array(43,-200,589,563),343=>array(84,-200,541,427),344=>array(43,0,589,752),345=>array(84,0,541,640),346=>array(92,-16,508,758),347=>array(103,-16,497,640),348=>array(92,-16,508,751),349=>array(103,-16,497,626),350=>array(92,-173,508,576),351=>array(103,-173,497,431),352=>array(92,-16,508,749),353=>array(103,-16,497,639),354=>array(72,-173,528,563),355=>array(43,-189,499,563),356=>array(72,0,528,752),357=>array(43,-16,518,613),358=>array(72,0,528,563),359=>array(43,-16,499,563),360=>array(40,-16,560,704),361=>array(43,-16,541,580),362=>array(40,-16,560,667),363=>array(43,-16,541,531),364=>array(40,-16,560,745),365=>array(43,-16,541,621),366=>array(40,-16,560,781),367=>array(43,-16,541,672),368=>array(40,-16,560,748),369=>array(43,-16,541,634),370=>array(40,-155,560,563),371=>array(43,-155,556,417),372=>array(20,0,580,751),373=>array(30,0,570,640),374=>array(51,0,549,752),375=>array(51,-186,549,640),376=>array(51,0,549,722),377=>array(103,0,497,761),378=>array(115,0,489,640),379=>array(103,0,497,718),380=>array(115,0,489,605),381=>array(103,0,497,754),382=>array(115,0,489,640),383=>array(105,0,541,604),384=>array(22,-16,541,604),385=>array(-26,0,541,563),386=>array(44,0,542,563),387=>array(22,-16,541,604),388=>array(46,0,549,590),389=>array(22,-16,541,590),390=>array(63,-16,534,576),391=>array(63,-16,667,632),392=>array(84,-16,659,485),393=>array(0,0,520,563),394=>array(-62,0,520,563),395=>array(58,0,556,563),396=>array(22,-16,541,604),397=>array(68,-199,518,460),398=>array(43,0,520,563),399=>array(50,-16,534,576),400=>array(92,-16,508,576),401=>array(8,-93,565,563),402=>array(87,-93,518,618),403=>array(63,-16,668,632),404=>array(48,-27,546,563),405=>array(7,-16,581,604),406=>array(173,-8,502,563),407=>array(113,0,487,563),408=>array(43,0,614,563),409=>array(63,0,541,618),410=>array(92,0,508,604),411=>array(58,-2,550,614),412=>array(11,-14,593,563),413=>array(8,-93,596,563),414=>array(53,-184,541,431),415=>array(51,-16,549,576),416=>array(51,-16,597,672),417=>array(72,-16,590,539),418=>array(3,-16,594,638),419=>array(29,-16,596,468),420=>array(-26,0,499,563),421=>array(22,-186,541,618),422=>array(60,-186,540,563),423=>array(92,-16,508,576),424=>array(103,-16,497,431),425=>array(102,0,490,577),426=>array(81,-93,518,618),427=>array(43,-199,499,563),428=>array(17,0,528,563),429=>array(43,-16,499,618),430=>array(72,-199,528,563),431=>array(40,-16,629,711),432=>array(43,-16,574,565),433=>array(78,-2,540,571),434=>array(43,-12,553,563),435=>array(-18,0,549,563),436=>array(51,-186,618,565),437=>array(103,0,497,563),438=>array(115,0,489,417),439=>array(96,-15,499,563),440=>array(80,-15,483,563),441=>array(95,-158,437,417),442=>array(88,-200,437,417),443=>array(84,0,478,618),444=>array(80,-15,499,563),445=>array(95,-20,420,417),446=>array(134,-14,487,563),447=>array(22,-186,534,444),448=>array(280,-124,320,604),449=>array(216,-124,384,604),450=>array(51,-124,549,604),451=>array(240,-15,360,618),452=>array(23,0,592,751),453=>array(23,0,588,622),454=>array(25,-16,585,623),455=>array(5,-16,591,563),456=>array(23,-186,583,624),457=>array(124,-186,483,624),458=>array(0,-19,600,563),459=>array(22,-186,583,624),460=>array(13,-186,583,624),461=>array(9,0,591,752),462=>array(72,-16,541,606),463=>array(113,0,487,752),464=>array(92,0,508,620),465=>array(51,-16,549,752),466=>array(72,-16,528,606),467=>array(40,-16,560,752),468=>array(43,-16,541,606),469=>array(40,-16,560,800),470=>array(43,-16,541,684),471=>array(40,-15,560,794),472=>array(43,-16,541,769),473=>array(40,-15,560,794),474=>array(43,-16,541,742),475=>array(40,-15,560,797),476=>array(43,-16,541,773),477=>array(63,-16,520,431),478=>array(9,0,591,800),479=>array(72,-16,541,684),480=>array(9,0,591,800),481=>array(72,-16,541,687),482=>array(10,0,590,663),483=>array(12,-16,578,522),484=>array(63,-16,562,576),485=>array(63,-186,562,431),486=>array(63,-16,562,764),487=>array(63,-186,562,617),488=>array(43,0,572,749),489=>array(63,0,541,784),490=>array(51,-171,549,576),491=>array(72,-171,528,431),492=>array(51,-171,549,663),493=>array(72,-171,528,521),494=>array(96,-15,499,765),495=>array(95,-158,437,620),496=>array(117,-186,445,609),497=>array(23,0,561,563),498=>array(23,0,569,563),499=>array(25,-16,553,604),500=>array(63,-16,562,752),501=>array(63,-186,562,606),502=>array(16,-16,580,565),503=>array(22,-186,538,572),504=>array(22,0,562,752),505=>array(53,0,541,649),506=>array(9,-2,591,800),507=>array(72,-16,541,800),508=>array(10,0,590,752),509=>array(12,-16,578,606),510=>array(40,-43,560,793),511=>array(53,-43,543,647),512=>array(9,0,591,771),513=>array(72,-16,541,647),514=>array(9,0,591,701),515=>array(72,-16,541,598),516=>array(43,0,520,769),517=>array(63,-16,520,634),518=>array(43,0,520,701),519=>array(63,-16,520,585),520=>array(100,0,487,769),521=>array(92,0,508,634),522=>array(113,0,487,701),523=>array(92,0,508,585),524=>array(51,-16,549,771),525=>array(72,-16,528,634),526=>array(51,-16,549,703),527=>array(72,-16,528,585),528=>array(36,0,589,769),529=>array(84,0,541,634),530=>array(43,0,589,700),531=>array(84,0,541,585),532=>array(40,-16,560,772),533=>array(43,-16,541,634),534=>array(40,-16,560,703),535=>array(43,-16,541,585),536=>array(92,-200,508,576),537=>array(103,-200,497,431),538=>array(72,-200,528,563),539=>array(43,-200,499,563),540=>array(112,-20,510,576),541=>array(124,-116,494,431),542=>array(53,0,551,752),543=>array(43,0,551,777),544=>array(30,-186,570,577),548=>array(103,-199,497,563),549=>array(115,-199,489,417),550=>array(9,0,591,706),551=>array(72,-16,541,591),552=>array(43,-173,520,563),553=>array(63,-188,520,431),554=>array(51,-16,549,800),555=>array(72,-16,528,684),556=>array(51,-16,549,800),557=>array(72,-16,528,684),558=>array(51,-16,549,712),559=>array(72,-16,528,589),560=>array(51,-16,549,800),561=>array(72,-16,528,693),562=>array(51,0,549,664),563=>array(51,-186,549,521),567=>array(117,-186,428,417),592=>array(72,-14,541,433),593=>array(63,-16,583,431),594=>array(31,-14,551,433),595=>array(22,-16,541,618),596=>array(84,-16,535,431),597=>array(84,-132,538,431),598=>array(63,-199,695,604),599=>array(63,-16,699,618),600=>array(63,-16,520,431),601=>array(63,-16,520,431),602=>array(67,-16,693,431),603=>array(103,-16,497,431),604=>array(103,-16,497,431),605=>array(103,-16,662,431),606=>array(76,-16,497,431),607=>array(147,-186,544,417),608=>array(63,-186,678,618),609=>array(63,-186,481,444),610=>array(77,-12,516,426),611=>array(52,-200,552,417),612=>array(50,-20,550,416),613=>array(43,-187,551,417),614=>array(51,0,551,618),615=>array(51,-199,478,618),616=>array(92,0,508,624),617=>array(173,-8,502,426),618=>array(135,0,465,417),619=>array(92,0,508,604),620=>array(92,0,508,604),621=>array(135,-199,513,604),622=>array(22,-158,567,604),623=>array(11,-14,593,417),624=>array(11,-186,593,417),625=>array(11,-199,532,431),626=>array(-67,-199,541,431),627=>array(53,-199,673,431),628=>array(54,0,530,417),629=>array(72,-16,528,431),630=>array(13,0,587,417),631=>array(43,-16,552,465),632=>array(112,-200,545,614),633=>array(84,-10,541,417),634=>array(84,-10,541,603),635=>array(52,-199,579,417),636=>array(84,-186,541,427),637=>array(105,-199,541,427),638=>array(84,0,518,417),639=>array(84,-200,518,417),640=>array(60,0,540,417),641=>array(60,0,540,417),642=>array(103,-199,497,431),643=>array(87,-93,518,618),644=>array(87,-93,518,618),645=>array(87,-93,518,618),646=>array(81,-93,518,618),647=>array(43,-16,499,563),648=>array(43,-200,499,563),649=>array(43,-16,541,417),650=>array(70,-16,530,455),651=>array(30,0,511,543),652=>array(30,0,570,417),653=>array(30,0,570,417),654=>array(51,0,549,603),655=>array(81,0,519,417),656=>array(115,-199,682,417),657=>array(115,-99,514,417),658=>array(95,-158,437,417),659=>array(112,-200,437,417),660=>array(134,0,487,577),661=>array(134,0,487,577),662=>array(134,-14,487,563),663=>array(63,-200,534,578),664=>array(72,-16,528,431),665=>array(73,0,511,417),666=>array(103,-16,509,431),667=>array(77,-12,629,492),668=>array(83,0,521,417),669=>array(144,-186,546,624),670=>array(63,-187,541,417),671=>array(92,0,512,417),672=>array(63,-186,699,618),673=>array(134,0,487,577),674=>array(134,0,487,577),675=>array(41,-16,569,604),676=>array(25,-158,573,604),677=>array(11,-99,595,604),678=>array(14,-16,587,563),679=>array(24,-16,582,618),680=>array(6,-132,591,566),681=>array(15,-199,575,604),682=>array(7,0,592,604),683=>array(37,0,562,604),684=>array(110,1,490,661),685=>array(72,-21,528,564),686=>array(10,-187,550,616),687=>array(5,-199,599,616),688=>array(122,381,453,783),689=>array(127,381,453,782),690=>array(201,259,404,780),691=>array(145,381,442,667),692=>array(95,375,392,661),693=>array(119,288,462,661),694=>array(102,390,458,757),695=>array(110,396,490,661),696=>array(144,278,476,661),697=>array(251,490,374,664),698=>array(166,490,439,664),699=>array(251,490,374,664),700=>array(251,490,374,664),701=>array(251,490,374,664),702=>array(300,480,393,661),703=>array(207,480,300,661),704=>array(192,383,422,741),705=>array(192,383,422,741),706=>array(197,595,403,800),707=>array(197,595,403,800),708=>array(198,595,402,800),709=>array(198,595,402,800),710=>array(155,490,445,639),711=>array(155,490,445,639),712=>array(280,490,320,635),713=>array(155,536,445,576),714=>array(270,490,435,639),715=>array(155,490,320,639),716=>array(280,-187,320,-42),717=>array(155,-124,445,-84),718=>array(217,-200,382,-51),719=>array(217,-198,382,-49),720=>array(230,0,370,417),721=>array(230,270,370,417),722=>array(300,192,393,373),723=>array(207,192,300,373),724=>array(187,536,413,669),725=>array(187,490,413,623),726=>array(187,490,413,716),727=>array(187,536,413,576),728=>array(155,490,445,620),729=>array(250,511,350,611),730=>array(207,480,393,661),731=>array(280,-155,433,0),732=>array(145,516,455,605),733=>array(155,490,445,633),734=>array(175,262,424,405),735=>array(214,514,386,686),736=>array(137,269,463,671),737=>array(166,389,437,782),738=>array(171,386,428,677),739=>array(137,388,462,660),740=>array(192,388,422,764),741=>array(50,0,458,800),742=>array(50,-12,458,800),743=>array(50,-12,458,800),744=>array(50,-12,458,800),745=>array(50,0,458,800),746=>array(100,0,508,690),747=>array(90,-10,498,379),748=>array(155,-200,445,-51),749=>array(55,528,545,666),750=>array(100,343,471,604),751=>array(198,-200,402,5),752=>array(198,-200,402,5),753=>array(198,-200,402,0),754=>array(198,-200,402,0),755=>array(207,-200,393,-19),756=>array(217,216,382,365),757=>array(149,474,450,623),758=>array(217,199,382,348),759=>array(145,-199,455,-110),760=>array(226,309,374,741),761=>array(233,543,366,676),762=>array(233,543,366,676),763=>array(233,-40,366,93),764=>array(280,-42,413,91),765=>array(120,-200,480,-47),766=>array(120,-200,438,-47),767=>array(59,-200,546,-21),768=>array(-445,490,-280,639),769=>array(-320,490,-155,639),770=>array(-445,490,-155,639),771=>array(-455,516,-145,605),772=>array(-445,536,-155,576),773=>array(-545,536,-55,576),774=>array(-445,490,-155,620),775=>array(-350,511,-250,611),776=>array(-460,511,-139,611),777=>array(-396,468,-208,682),778=>array(-393,480,-207,661),779=>array(-445,490,-155,633),780=>array(-445,490,-155,639),781=>array(-320,490,-280,635),782=>array(-380,490,-220,635),783=>array(-445,490,-155,633),784=>array(-445,490,-155,675),785=>array(-441,454,-151,584),786=>array(-324,490,-201,664),787=>array(-294,478,-171,652),788=>array(-369,490,-246,664),789=>array(-123,524,0,698),790=>array(-360,-199,-195,-50),791=>array(-374,-200,-209,-51),792=>array(-355,-190,-222,-20),793=>array(-336,-190,-203,-20),794=>array(-92,543,41,676),795=>array(-163,376,19,565),796=>array(-341,-200,-248,-19),797=>array(-402,-187,-176,-54),798=>array(-405,-187,-179,-54),799=>array(-424,-200,-198,26),800=>array(-427,-121,-201,-81),801=>array(-345,-199,-111,0),802=>array(-345,-199,-111,0),803=>array(-350,-157,-250,-57),804=>array(-455,-153,-134,-53),805=>array(-385,-200,-199,-19),806=>array(-259,-200,-154,-52),807=>array(-390,-173,-223,0),808=>array(-320,-155,-167,0),809=>array(-323,-182,-283,-37),810=>array(-447,-200,-127,-47),811=>array(-467,-163,-134,-43),812=>array(-438,-188,-148,-39),813=>array(-453,-187,-163,-38),814=>array(-434,-176,-144,-46),815=>array(-454,-183,-164,-53),816=>array(-452,-143,-142,-54),817=>array(-436,-119,-146,-79),818=>array(-600,-150,0,-100),819=>array(-600,-200,0,-52),820=>array(-442,186,-132,275),821=>array(-443,279,-153,319),822=>array(-540,234,-84,275),823=>array(-381,224,-144,400),824=>array(-479,168,-125,395),825=>array(-312,-200,-219,-19),826=>array(-447,-200,-127,-47),827=>array(-368,-200,-190,-23),828=>array(-459,-163,-122,-43),829=>array(-384,481,-212,653),830=>array(-356,460,-279,687),831=>array(-600,648,0,796),832=>array(-388,490,-223,639),833=>array(-352,490,-187,639),834=>array(-455,516,-145,605),835=>array(-324,478,-201,652),836=>array(-453,490,-146,670),837=>array(-310,-200,-76,-51),838=>array(-447,461,-127,614),839=>array(-430,-199,-140,-79),840=>array(-366,-174,-233,-29),841=>array(-373,-181,-240,-48),842=>array(-447,490,-137,633),843=>array(-447,450,-137,727),844=>array(-433,516,-123,746),845=>array(-437,-182,-161,-53),846=>array(-356,-193,-242,-40),848=>array(-403,455,-197,660),849=>array(-364,467,-271,648),850=>array(-440,465,-150,667),851=>array(-381,-200,-209,-28),852=>array(-403,-200,-199,0),853=>array(-414,-200,-210,0),854=>array(-500,-200,-114,5),855=>array(-305,471,-212,652),856=>array(-101,511,-1,611),857=>array(-394,-200,-206,-22),858=>array(-447,-199,-151,-31),859=>array(-388,451,-198,629),860=>array(-364,-200,364,-36),861=>array(-364,455,364,619),862=>array(-300,477,300,527),863=>array(-300,-120,300,-70),864=>array(-232,-140,232,-51),865=>array(-364,476,364,640),866=>array(-276,-199,291,-27),867=>array(-385,448,-182,641),868=>array(-405,448,-208,641),869=>array(-387,456,-207,725),870=>array(-397,448,-200,641),871=>array(-414,447,-199,634),872=>array(-394,446,-199,639),873=>array(-407,446,-182,714),874=>array(-404,456,-184,717),875=>array(-427,458,-176,644),876=>array(-389,458,-192,642),877=>array(-378,447,-181,697),878=>array(-411,454,-178,634),879=>array(-402,456,-187,636),884=>array(251,490,374,664),885=>array(251,-125,374,49),890=>array(255,-199,489,-50),894=>array(139,-145,350,417),900=>array(232,490,369,670),901=>array(147,490,454,670),902=>array(-33,0,599,619),903=>array(226,285,374,417),904=>array(-26,0,591,619),905=>array(-16,0,598,621),906=>array(12,0,542,619),908=>array(16,-16,588,619),910=>array(-42,0,597,617),911=>array(20,0,585,621),912=>array(129,-16,502,670),913=>array(9,0,591,563),914=>array(43,0,541,563),915=>array(62,0,538,563),916=>array(9,0,591,563),917=>array(43,0,520,563),918=>array(103,0,497,563),919=>array(53,0,551,563),920=>array(51,-16,549,576),921=>array(113,0,487,563),922=>array(43,0,572,563),923=>array(9,0,591,563),924=>array(11,0,593,563),925=>array(22,0,562,563),926=>array(69,0,531,563),927=>array(51,-16,549,576),928=>array(51,0,543,563),929=>array(43,0,499,563),931=>array(102,0,490,577),932=>array(72,0,528,563),933=>array(51,0,549,563),934=>array(46,0,554,563),935=>array(40,0,560,563),936=>array(19,0,586,563),937=>array(70,0,530,563),938=>array(113,0,487,716),939=>array(51,0,549,716),940=>array(63,-16,583,684),941=>array(145,-2,493,696),942=>array(53,-186,541,684),943=>array(173,-16,502,684),944=>array(43,-12,553,667),945=>array(63,-16,583,431),946=>array(60,-186,535,604),947=>array(61,-186,545,417),948=>array(68,-8,518,651),949=>array(145,-2,493,443),950=>array(122,-186,482,604),951=>array(53,-186,541,431),952=>array(113,-15,487,618),953=>array(173,-16,502,418),954=>array(70,0,530,417),955=>array(58,-2,550,614),956=>array(43,-200,541,417),957=>array(53,0,539,417),958=>array(124,-186,482,604),959=>array(72,-16,528,431),960=>array(82,0,518,417),961=>array(21,-200,531,427),962=>array(94,-159,503,428),963=>array(43,-14,533,426),964=>array(43,-8,553,417),965=>array(43,-12,553,417),966=>array(37,-200,545,417),967=>array(31,-186,553,417),968=>array(34,-186,557,604),969=>array(43,-16,552,418),970=>array(90,-16,502,571),971=>array(43,-12,553,571),972=>array(72,-16,528,684),973=>array(43,-12,553,684),974=>array(43,-16,552,684),976=>array(112,-20,492,614),977=>array(66,-15,487,618),978=>array(48,0,552,563),979=>array(-48,0,579,563),980=>array(48,0,552,677),981=>array(81,-186,509,604),982=>array(43,-16,552,431),986=>array(80,-146,596,562),987=>array(89,-147,538,439),988=>array(43,0,520,563),989=>array(123,-180,532,438),1008=>array(39,-1,561,417),1009=>array(100,-190,531,443),1012=>array(51,-16,549,576),1013=>array(175,-17,425,432),1024=>array(43,0,520,752),1025=>array(43,0,520,726),1026=>array(8,-137,527,566),1027=>array(62,0,538,752),1028=>array(64,-16,536,576),1029=>array(92,-16,508,576),1030=>array(113,0,487,563),1031=>array(113,0,487,725),1032=>array(84,-16,583,563),1033=>array(6,0,584,563),1034=>array(10,0,584,563),1035=>array(8,3,579,566),1036=>array(45,0,572,752),1037=>array(51,0,550,752),1038=>array(50,0,550,754),1039=>array(51,-80,549,563),1040=>array(9,0,591,563),1041=>array(44,0,542,563),1042=>array(43,0,541,563),1043=>array(62,0,538,563),1044=>array(32,-125,566,563),1045=>array(43,0,520,563),1046=>array(8,0,592,563),1047=>array(92,-16,508,576),1048=>array(51,0,550,563),1049=>array(51,0,550,771),1050=>array(45,0,572,563),1051=>array(57,0,551,563),1052=>array(11,0,593,563),1053=>array(53,0,551,563),1054=>array(51,-16,549,576),1055=>array(51,0,549,563),1056=>array(43,0,499,563),1057=>array(63,-16,534,576),1058=>array(72,0,528,563),1059=>array(50,0,550,563),1060=>array(14,0,586,563),1061=>array(40,0,560,563),1062=>array(50,-125,550,563),1063=>array(73,0,550,563),1064=>array(-46,0,646,563),1065=>array(4,-125,591,563),1066=>array(23,0,557,563),1067=>array(11,0,593,563),1068=>array(43,-1,535,562),1069=>array(64,-16,536,576),1070=>array(3,-16,597,576),1071=>array(13,0,559,563),1072=>array(72,-16,541,431),1073=>array(81,-16,519,626),1074=>array(108,0,492,417),1075=>array(114,0,486,417),1076=>array(55,-118,552,417),1077=>array(63,-16,520,431),1078=>array(12,0,589,417),1079=>array(103,-16,497,431),1080=>array(65,0,535,417),1081=>array(65,0,535,644),1082=>array(70,0,530,417),1083=>array(88,0,512,417),1084=>array(52,0,549,417),1085=>array(65,0,543,417),1086=>array(72,-16,528,431),1087=>array(65,0,536,417),1088=>array(22,-186,541,431),1089=>array(84,-16,535,431),1090=>array(102,-1,498,417),1091=>array(51,-186,549,417),1092=>array(32,-186,568,573),1093=>array(51,0,549,417),1094=>array(53,-118,536,417),1095=>array(96,0,506,417),1096=>array(9,0,592,417),1097=>array(9,-118,588,417),1098=>array(64,0,540,417),1099=>array(10,0,590,417),1100=>array(108,0,492,417),1101=>array(74,-16,526,431),1102=>array(10,-16,590,431),1103=>array(88,0,512,417),1104=>array(63,-16,520,620),1105=>array(63,-16,520,604),1106=>array(43,-151,478,604),1107=>array(114,0,486,610),1108=>array(74,-16,526,431),1109=>array(103,-16,497,431),1110=>array(92,0,508,624),1111=>array(92,0,508,603),1112=>array(117,-186,428,624),1113=>array(34,0,566,417),1114=>array(28,0,572,417),1115=>array(43,0,551,604),1116=>array(70,0,530,610),1117=>array(65,0,535,620),1118=>array(51,-186,549,604),1119=>array(62,-80,538,417),1120=>array(20,-16,580,564),1121=>array(43,-16,552,418),1122=>array(16,-1,568,634),1123=>array(27,0,492,489),1124=>array(3,-16,572,576),1125=>array(10,-16,596,431),1126=>array(9,0,591,563),1127=>array(9,0,591,417),1128=>array(0,0,600,563),1129=>array(5,0,595,417),1130=>array(8,0,592,564),1131=>array(38,0,562,416),1132=>array(3,0,592,563),1133=>array(38,0,574,416),1134=>array(124,-186,482,754),1135=>array(124,-186,482,614),1136=>array(19,0,586,563),1137=>array(34,-186,557,604),1138=>array(51,-16,549,576),1139=>array(72,-16,528,431),1140=>array(9,0,586,563),1141=>array(30,0,586,417),1142=>array(9,0,586,731),1143=>array(30,0,586,605),1144=>array(10,-186,596,576),1145=>array(10,-186,586,431),1146=>array(51,-41,549,599),1147=>array(72,-41,528,454),1148=>array(20,-16,580,799),1149=>array(43,-16,552,626),1150=>array(20,-16,580,800),1151=>array(43,-16,552,664),1155=>array(-472,617,-112,771),1156=>array(-441,643,-151,773),1157=>array(-369,490,-246,664),1158=>array(-294,478,-171,652),1159=>array(-402,454,-2,584),1162=>array(51,-146,550,771),1163=>array(65,-146,535,644),1164=>array(43,0,499,584),1165=>array(108,0,492,438),1166=>array(43,0,501,563),1167=>array(22,-186,541,431),1168=>array(62,0,538,688),1169=>array(114,0,486,535),1170=>array(62,0,538,563),1171=>array(114,0,486,417),1172=>array(62,-93,560,563),1173=>array(114,-188,486,417),1174=>array(8,-146,592,563),1175=>array(12,-146,589,417),1176=>array(92,-173,508,576),1177=>array(103,-173,497,431),1178=>array(36,-146,565,563),1179=>array(70,-146,531,417),1180=>array(36,0,564,563),1181=>array(70,0,530,417),1182=>array(36,0,564,563),1183=>array(70,0,530,417),1184=>array(-25,0,564,563),1185=>array(10,0,530,417),1186=>array(53,-146,551,563),1187=>array(82,-146,518,417),1188=>array(53,0,619,563),1189=>array(82,0,598,417),1190=>array(-13,-93,612,563),1191=>array(18,-188,585,417),1192=>array(63,-132,535,576),1193=>array(84,-132,538,431),1194=>array(63,-155,534,576),1195=>array(84,-155,535,431),1196=>array(72,-146,528,563),1197=>array(122,-147,478,417),1198=>array(51,0,549,563),1199=>array(30,-199,570,417),1200=>array(51,0,549,563),1201=>array(30,-200,570,417),1202=>array(40,-146,560,563),1203=>array(51,-146,549,417),1204=>array(-18,-146,550,563),1205=>array(8,-118,524,417),1206=>array(74,-146,526,563),1207=>array(96,-146,506,417),1208=>array(74,0,526,563),1209=>array(96,0,506,417),1210=>array(74,0,526,563),1211=>array(96,0,506,417),1212=>array(-84,-16,534,576),1213=>array(-50,-16,520,431),1214=>array(-84,-155,534,576),1215=>array(-50,-155,520,431),1216=>array(113,0,487,563),1217=>array(8,0,592,733),1218=>array(12,0,589,607),1219=>array(36,-105,528,563),1220=>array(70,-188,500,417),1221=>array(57,-146,551,563),1222=>array(88,-146,512,417),1223=>array(53,-199,530,563),1224=>array(82,-199,518,417),1225=>array(53,-146,551,563),1226=>array(65,-146,543,417),1227=>array(74,-147,526,563),1228=>array(96,-146,506,417),1229=>array(11,-146,593,563),1230=>array(52,-146,549,417),1231=>array(113,0,487,563),1232=>array(9,0,591,733),1233=>array(72,-16,541,601),1234=>array(9,0,591,725),1235=>array(72,-16,541,603),1236=>array(10,0,590,563),1237=>array(12,-16,578,431),1238=>array(43,0,520,733),1239=>array(63,-16,520,604),1240=>array(50,-16,534,576),1241=>array(76,-16,533,431),1242=>array(50,-16,534,724),1243=>array(76,-16,533,606),1244=>array(8,0,592,724),1245=>array(12,0,589,605),1246=>array(92,-16,508,716),1247=>array(103,-16,497,603),1248=>array(96,-15,499,563),1249=>array(95,-158,437,417),1250=>array(51,0,550,669),1251=>array(65,0,535,522),1252=>array(51,0,550,722),1253=>array(65,0,535,604),1254=>array(51,-16,549,726),1255=>array(72,-16,528,603),1256=>array(51,-16,549,576),1257=>array(72,-16,528,431),1258=>array(51,-16,549,722),1259=>array(72,-16,528,604),1260=>array(64,-16,536,723),1261=>array(74,-16,526,603),1262=>array(50,0,550,663),1263=>array(51,-186,549,525),1264=>array(50,0,550,723),1265=>array(51,-186,549,603),1266=>array(50,0,550,746),1267=>array(51,-186,549,600),1268=>array(73,0,550,722),1269=>array(96,0,506,603),1270=>array(62,-146,538,563),1271=>array(114,-146,486,417),1272=>array(11,0,593,723),1273=>array(10,0,590,603),1274=>array(55,-199,538,563),1275=>array(0,-199,486,417),1276=>array(40,-199,560,563),1277=>array(51,-199,549,417),1278=>array(40,0,560,563),1279=>array(51,0,549,417),1296=>array(92,-16,508,576),1297=>array(103,-16,497,431),1298=>array(57,-199,530,563),1299=>array(88,-199,512,417),1306=>array(51,-115,549,576),1307=>array(63,-186,583,431),1308=>array(20,0,580,563),1309=>array(30,0,570,417),1310=>array(45,0,572,563),1311=>array(70,0,530,417),1316=>array(51,-146,550,563),1317=>array(65,-146,536,417),1318=>array(73,-146,550,563),1319=>array(96,-146,506,417),1329=>array(41,-145,580,563),1330=>array(41,0,567,579),1331=>array(43,0,582,580),1332=>array(19,0,593,579),1333=>array(34,-16,560,563),1334=>array(34,-10,566,578),1335=>array(58,-80,519,563),1336=>array(41,0,561,579),1337=>array(13,0,596,575),1338=>array(53,-16,572,563),1339=>array(21,0,571,563),1340=>array(63,0,543,562),1341=>array(0,-12,592,563),1342=>array(46,-14,550,572),1343=>array(41,0,561,563),1344=>array(107,-20,493,571),1345=>array(53,0,577,584),1346=>array(21,0,581,579),1347=>array(33,0,569,564),1348=>array(21,-16,587,564),1349=>array(90,0,499,605),1350=>array(18,-16,570,563),1351=>array(61,-16,537,612),1352=>array(42,0,562,579),1353=>array(43,-61,527,586),1354=>array(24,0,575,579),1355=>array(64,-3,584,564),1356=>array(32,0,590,579),1357=>array(41,-16,561,563),1358=>array(11,0,551,564),1359=>array(92,-16,508,576),1360=>array(42,0,562,579),1361=>array(65,0,520,594),1362=>array(92,0,502,563),1363=>array(71,0,529,563),1364=>array(2,0,587,580),1365=>array(51,-16,549,576),1366=>array(90,-17,510,572),1369=>array(253,480,346,661),1370=>array(251,490,374,664),1371=>array(270,490,435,639),1372=>array(145,471,455,603),1373=>array(218,490,383,639),1374=>array(185,595,452,778),1375=>array(143,588,456,719),1377=>array(10,-16,593,423),1378=>array(52,-190,557,432),1379=>array(43,-190,582,438),1380=>array(33,-190,579,438),1381=>array(44,-16,560,572),1382=>array(43,-189,583,438),1383=>array(125,0,444,572),1384=>array(53,-190,542,438),1385=>array(22,-190,542,438),1386=>array(53,-16,572,572),1387=>array(53,-190,542,573),1388=>array(73,-190,533,422),1389=>array(3,-190,573,573),1390=>array(71,-16,596,572),1391=>array(56,-190,544,572),1392=>array(53,0,542,572),1393=>array(71,-16,591,609),1394=>array(66,-190,594,438),1395=>array(80,0,477,572),1396=>array(54,-16,553,573),1397=>array(91,-190,405,422),1398=>array(127,-16,543,637),1399=>array(71,-190,533,438),1400=>array(53,0,542,438),1401=>array(93,-190,533,453),1402=>array(10,-190,593,422),1403=>array(71,-190,533,438),1404=>array(53,0,522,438),1405=>array(44,-16,543,423),1406=>array(44,-190,593,572),1407=>array(103,-16,497,431),1408=>array(53,-190,542,438),1409=>array(63,-186,562,431),1410=>array(121,0,532,422),1411=>array(10,-190,592,572),1412=>array(105,0,544,613),1413=>array(72,-16,528,431),1414=>array(90,-190,510,572),1415=>array(44,-16,541,572),1417=>array(226,-15,374,417),1418=>array(179,235,429,326),1423=>array(19,0,579,579),1456=>array(271,-200,329,-42),1457=>array(153,-200,447,-42),1458=>array(153,-200,447,-43),1459=>array(152,-200,447,-40),1460=>array(271,-101,329,-42),1461=>array(212,-101,388,-42),1462=>array(212,-200,388,-42),1463=>array(212,-101,388,-60),1464=>array(212,-200,389,-40),1465=>array(245,540,303,599),1466=>array(267,538,325,597),1467=>array(153,-200,447,-42),1468=>array(271,211,329,270),1469=>array(280,-200,320,-24),1470=>array(100,439,500,480),1471=>array(212,540,388,581),1472=>array(280,-120,320,600),1473=>array(519,540,578,599),1474=>array(49,540,108,599),1475=>array(226,-15,374,417),1476=>array(270,540,329,599),1477=>array(269,-140,327,-81),1478=>array(133,0,430,480),1479=>array(212,-200,389,-40),1488=>array(60,0,540,480),1489=>array(60,0,560,480),1490=>array(133,0,467,480),1491=>array(60,0,540,480),1492=>array(60,0,540,480),1493=>array(170,0,320,480),1494=>array(133,0,467,480),1495=>array(60,0,540,480),1496=>array(22,0,535,480),1497=>array(170,219,320,480),1498=>array(60,-200,499,480),1499=>array(60,0,499,480),1500=>array(60,0,540,617),1501=>array(60,0,540,480),1502=>array(60,0,540,480),1503=>array(170,-200,320,480),1504=>array(133,0,430,480),1505=>array(60,0,540,480),1506=>array(60,0,543,480),1507=>array(60,-200,540,480),1508=>array(60,0,540,480),1509=>array(60,-200,540,480),1510=>array(50,0,530,480),1511=>array(49,-200,529,480),1512=>array(60,0,540,480),1513=>array(51,0,570,480),1514=>array(23,0,540,480),1520=>array(90,0,450,480),1521=>array(90,0,450,480),1522=>array(90,219,450,480),1523=>array(250,315,370,604),1524=>array(158,315,458,604),1542=>array(0,0,600,753),1543=>array(0,0,600,733),1544=>array(36,-184,560,170),1545=>array(103,-81,546,668),1546=>array(40,-81,590,668),1547=>array(101,-200,474,486),1548=>array(185,-85,390,205),1549=>array(190,-115,381,69),1550=>array(68,0,548,186),1551=>array(100,-200,506,247),1563=>array(189,-18,400,544),1566=>array(170,86,430,256),1567=>array(134,-15,487,577),1568=>array(100,-200,515,221),1569=>array(205,-81,395,167),1570=>array(193,-20,427,714),1571=>array(211,-20,349,779),1572=>array(101,-200,404,399),1573=>array(261,-200,399,583),1574=>array(100,-144,515,399),1575=>array(280,-20,320,583),1576=>array(40,-158,560,217),1577=>array(180,-16,420,436),1578=>array(40,0,560,336),1579=>array(40,0,560,396),1580=>array(61,-200,537,310),1581=>array(61,-200,537,310),1582=>array(61,-200,537,486),1583=>array(133,0,430,260),1584=>array(133,0,430,416),1585=>array(97,-199,400,224),1586=>array(97,-199,400,416),1587=>array(0,-124,600,184),1588=>array(0,-124,600,416),1589=>array(0,-124,600,213),1590=>array(0,-124,600,416),1591=>array(92,-16,501,564),1592=>array(92,-16,501,564),1593=>array(132,-200,520,247),1594=>array(132,-200,520,416),1595=>array(40,0,560,584),1596=>array(40,-200,560,582),1597=>array(100,-144,515,524),1598=>array(100,-144,515,416),1599=>array(100,-144,515,416),1600=>array(0,0,600,40),1601=>array(40,0,560,466),1602=>array(101,-184,500,336),1603=>array(100,0,560,571),1604=>array(80,-177,527,564),1605=>array(150,-200,470,330),1606=>array(101,-178,474,416),1607=>array(182,-16,418,300),1608=>array(101,-200,404,170),1609=>array(100,-144,515,221),1610=>array(50,-200,600,221),1611=>array(187,605,412,799),1612=>array(167,583,430,800),1613=>array(187,-200,412,-6),1614=>array(187,695,412,800),1615=>array(221,588,365,800),1616=>array(187,-200,412,-95),1617=>array(206,601,394,709),1618=>array(236,657,362,775),1619=>array(183,647,417,714),1620=>array(211,599,349,779),1621=>array(211,-200,349,-20),1622=>array(280,-190,320,-45),1623=>array(220,588,364,800),1625=>array(-117,647,117,714),1626=>array(198,595,402,800),1627=>array(198,595,402,800),1628=>array(252,-151,350,-51),1629=>array(225,588,379,800),1630=>array(160,579,460,799),1631=>array(135,-200,367,-45),1632=>array(225,291,375,441),1633=>array(229,-19,319,582),1634=>array(160,-19,468,582),1635=>array(110,-19,501,582),1636=>array(132,0,470,567),1637=>array(92,-16,508,570),1638=>array(68,-19,469,564),1639=>array(92,-13,508,576),1640=>array(92,-13,508,576),1641=>array(121,-19,490,584),1642=>array(113,-81,487,668),1643=>array(183,-109,417,95),1644=>array(251,490,374,664),1645=>array(113,80,487,434),1646=>array(40,0,560,217),1647=>array(101,-184,474,170),1648=>array(280,600,320,745),1649=>array(173,-20,402,748),1650=>array(135,-20,367,775),1651=>array(145,-200,377,583),1652=>array(211,599,349,779),1653=>array(280,-20,499,659),1654=>array(101,-200,404,435),1655=>array(101,-200,505,438),1656=>array(40,-144,599,435),1657=>array(40,0,560,437),1658=>array(40,0,560,386),1659=>array(40,-200,560,217),1660=>array(40,-107,560,217),1661=>array(40,0,560,386),1662=>array(40,-200,560,217),1663=>array(40,0,560,387),1664=>array(40,-200,560,217),1665=>array(61,-200,537,519),1666=>array(61,-200,537,566),1667=>array(61,-200,537,310),1668=>array(61,-200,537,310),1669=>array(61,-200,537,546),1670=>array(61,-200,537,310),1671=>array(61,-200,537,310),1672=>array(133,0,430,564),1673=>array(133,-107,430,260),1674=>array(133,-158,430,260),1675=>array(133,-158,430,544),1676=>array(133,0,430,436),1677=>array(133,-154,430,260),1678=>array(133,0,430,486),1679=>array(133,0,430,486),1680=>array(133,0,430,487),1681=>array(97,-199,408,554),1682=>array(97,-199,402,529),1683=>array(97,-199,474,224),1684=>array(97,-199,510,224),1685=>array(20,-200,560,224),1686=>array(97,-199,510,224),1687=>array(97,-199,400,436),1688=>array(97,-199,430,486),1689=>array(97,-199,410,457),1690=>array(0,-158,600,366),1691=>array(0,-200,600,184),1692=>array(0,-200,600,416),1693=>array(0,-154,600,213),1694=>array(0,-124,600,416),1695=>array(92,-16,510,564),1696=>array(132,-200,520,496),1697=>array(40,0,560,260),1698=>array(40,-158,560,260),1699=>array(40,-158,560,436),1700=>array(40,0,580,486),1701=>array(40,-200,580,260),1702=>array(40,0,580,497),1703=>array(101,-184,474,346),1704=>array(101,-184,520,416),1705=>array(40,0,560,582),1706=>array(40,0,560,432),1707=>array(40,0,560,582),1708=>array(100,0,560,716),1709=>array(100,0,560,776),1710=>array(100,-200,560,571),1711=>array(40,0,560,582),1712=>array(40,0,560,582),1713=>array(20,0,560,636),1714=>array(40,-154,560,582),1715=>array(40,-200,560,582),1716=>array(10,0,590,666),1717=>array(80,-177,527,750),1718=>array(80,-177,527,686),1719=>array(80,-177,527,706),1720=>array(80,-200,527,564),1721=>array(101,-200,547,366),1722=>array(101,-178,474,250),1723=>array(101,-178,474,534),1724=>array(101,-200,474,250),1725=>array(101,-178,474,486),1726=>array(50,-16,408,220),1727=>array(61,-200,537,486),1728=>array(202,-16,398,435),1729=>array(277,-35,600,55),1730=>array(231,-35,600,329),1731=>array(200,-35,600,226),1732=>array(101,-200,404,170),1733=>array(101,-200,404,170),1734=>array(101,-200,404,438),1735=>array(101,-200,404,438),1736=>array(101,-200,404,415),1737=>array(101,-200,404,440),1738=>array(101,-200,420,376),1739=>array(101,-200,430,416),1740=>array(100,-144,515,221),1741=>array(22,-144,555,221),1742=>array(100,-144,515,438),1743=>array(101,-200,404,366),1744=>array(40,-200,560,221),1745=>array(0,-200,600,221),1746=>array(40,0,560,293),1747=>array(40,0,560,435),1748=>array(179,-26,401,69),1749=>array(202,-16,398,220),1774=>array(133,0,430,564),1775=>array(97,-199,402,564),1776=>array(225,291,375,441),1777=>array(229,-19,319,582),1778=>array(160,-19,468,582),1779=>array(110,-19,501,582),1780=>array(130,-19,494,582),1781=>array(92,-1,508,570),1782=>array(226,-6,494,567),1783=>array(92,-13,508,576),1784=>array(92,-13,508,576),1785=>array(121,-19,490,584),1786=>array(0,-158,600,416),1787=>array(0,-158,600,416),1788=>array(132,-200,520,416),1789=>array(221,80,366,437),1790=>array(190,36,431,434),1791=>array(50,-16,408,524),4304=>array(102,108,498,552),4305=>array(106,108,494,755),4306=>array(93,-184,507,458),4307=>array(53,-190,547,458),4308=>array(100,-184,500,458),4309=>array(100,-184,500,458),4310=>array(65,108,536,773),4311=>array(64,100,536,460),4312=>array(103,101,497,458),4313=>array(99,-184,501,466),4314=>array(53,-98,547,458),4315=>array(102,108,498,773),4316=>array(99,108,501,790),4317=>array(58,101,542,458),4318=>array(100,108,500,775),4319=>array(93,-184,507,480),4320=>array(53,100,538,773),4321=>array(106,108,494,773),4322=>array(53,-188,547,617),4323=>array(53,-184,547,466),4324=>array(52,-184,548,458),4325=>array(98,-180,503,799),4326=>array(53,-190,547,458),4327=>array(104,-184,496,454),4328=>array(64,108,535,773),4329=>array(106,102,494,773),4330=>array(53,-185,547,466),4331=>array(102,108,498,773),4332=>array(80,-200,520,800),4333=>array(76,-184,524,743),4334=>array(102,108,498,773),4335=>array(50,-184,550,458),4336=>array(106,108,494,775),4337=>array(46,114,554,754),4338=>array(110,86,490,487),4339=>array(98,-184,502,460),4340=>array(117,-184,483,621),4341=>array(87,107,513,775),4345=>array(93,-200,507,442),4347=>array(101,10,492,584),4348=>array(173,204,475,716),5024=>array(43,0,520,563),5025=>array(43,0,589,563),5026=>array(72,0,528,563),5027=>array(24,-16,575,563),5028=>array(10,-16,589,576),5029=>array(92,0,508,624),5030=>array(72,-16,528,576),5031=>array(51,-16,549,576),5032=>array(74,0,526,563),5033=>array(50,-16,550,563),5034=>array(9,0,591,563),5035=>array(84,-16,583,563),5036=>array(43,0,520,563),5037=>array(20,0,580,563),5038=>array(104,0,497,576),5039=>array(28,-16,573,563),5040=>array(104,0,497,563),5041=>array(62,0,538,563),5042=>array(52,-16,548,576),5043=>array(20,0,580,563),5044=>array(66,-16,534,563),5045=>array(72,0,528,563),5046=>array(64,-16,535,576),5047=>array(9,0,591,563),5048=>array(50,0,550,579),5049=>array(35,-14,565,563),5050=>array(3,-16,597,576),5051=>array(51,0,549,563),5052=>array(74,-16,525,563),5053=>array(42,-16,558,563),5054=>array(51,-16,549,576),5055=>array(57,-16,543,563),5056=>array(63,-16,562,576),5057=>array(20,-16,580,572),5058=>array(74,0,526,563),5059=>array(103,0,497,563),5060=>array(14,-16,586,563),5061=>array(6,-16,594,576),5062=>array(72,0,528,563),5063=>array(26,-18,574,573),5064=>array(53,-16,547,576),5065=>array(9,0,591,576),5066=>array(26,-18,574,573),5067=>array(104,-16,496,576),5068=>array(40,-16,560,563),5069=>array(28,-16,573,579),5070=>array(84,0,516,563),5071=>array(43,-1,535,562),5072=>array(92,0,508,563),5073=>array(76,-16,524,580),5074=>array(38,0,562,563),5075=>array(50,-16,549,563),5076=>array(9,0,591,563),5077=>array(77,-16,523,576),5078=>array(59,-13,541,563),5079=>array(72,-8,528,563),5080=>array(90,-8,510,563),5081=>array(9,0,591,563),5082=>array(92,-16,508,576),5083=>array(41,-16,559,576),5084=>array(50,-16,550,576),5085=>array(63,0,541,576),5086=>array(63,0,541,563),5087=>array(63,-16,534,576),5088=>array(28,-16,572,563),5089=>array(52,-16,548,576),5090=>array(43,0,499,563),5091=>array(50,-16,550,576),5092=>array(38,0,562,563),5093=>array(40,0,560,563),5094=>array(43,0,572,563),5095=>array(40,0,560,580),5096=>array(12,-16,588,576),5097=>array(35,-105,599,576),5098=>array(31,-16,569,579),5099=>array(51,-16,549,576),5100=>array(51,-16,549,579),5101=>array(72,-16,529,576),5102=>array(81,-16,519,576),5103=>array(26,-18,574,573),5104=>array(62,-35,538,604),5105=>array(60,-16,539,563),5106=>array(50,0,550,618),5107=>array(29,-16,571,576),5108=>array(43,0,541,563),5792=>array(196,-103,451,788),5793=>array(196,-103,451,790),5794=>array(118,-103,489,788),5795=>array(58,-103,529,788),5796=>array(118,-103,489,788),5797=>array(128,-103,499,788),5798=>array(155,-103,430,788),5799=>array(155,-103,430,788),5800=>array(196,-103,391,788),5801=>array(190,-104,421,787),5802=>array(190,-104,421,787),5803=>array(153,-103,434,788),5804=>array(169,-103,432,788),5805=>array(217,-103,369,788),5806=>array(217,-103,369,788),5807=>array(169,-103,432,788),5808=>array(169,-103,432,788),5809=>array(169,-103,450,788),5810=>array(204,116,397,576),5811=>array(190,-103,466,789),5812=>array(190,-103,466,789),5813=>array(190,-103,466,789),5814=>array(147,-103,466,789),5815=>array(20,-103,580,788),5816=>array(20,-103,580,788),5817=>array(192,-103,468,788),5818=>array(153,-103,434,788),5819=>array(153,-103,434,788),5820=>array(169,-103,432,788),5821=>array(237,-103,363,788),5822=>array(169,-103,432,788),5823=>array(246,-103,398,788),5824=>array(169,-103,432,788),5825=>array(280,-103,321,788),5826=>array(237,-103,363,788),5827=>array(104,-4,497,626),5828=>array(49,-103,551,788),5829=>array(169,-103,432,788),5830=>array(202,-103,354,788),5831=>array(125,-103,474,788),5832=>array(153,-103,453,788),5833=>array(45,-103,556,789),5834=>array(112,-44,473,781),5835=>array(164,-103,436,789),5836=>array(280,284,321,737),5837=>array(237,212,363,745),5838=>array(126,243,475,741),5839=>array(126,-103,475,788),5840=>array(196,-103,391,788),5841=>array(174,-103,410,788),5842=>array(169,-103,458,788),5843=>array(217,-103,369,788),5844=>array(169,-103,458,788),5845=>array(166,-103,466,788),5846=>array(105,-103,495,788),5847=>array(105,-103,495,788),5848=>array(76,-103,524,788),5849=>array(237,-103,363,788),5850=>array(226,-103,421,788),5851=>array(200,-103,436,788),5852=>array(87,143,513,640),5853=>array(76,-103,524,788),5854=>array(20,-103,580,788),5855=>array(79,-37,524,657),5856=>array(21,-103,580,788),5857=>array(45,-103,556,788),5858=>array(21,-103,580,788),5859=>array(45,-103,556,789),5860=>array(20,-103,580,788),5861=>array(105,-103,495,788),5862=>array(76,-103,524,788),5863=>array(280,-53,321,400),5864=>array(126,-103,475,788),5865=>array(132,-103,408,788),5866=>array(76,-103,518,789),5867=>array(234,332,366,480),5868=>array(234,132,366,537),5869=>array(142,199,458,516),5870=>array(126,-103,475,788),5871=>array(76,-103,525,788),5872=>array(76,-103,524,788),7680=>array(9,-200,591,563),7681=>array(72,-200,541,431),7682=>array(43,0,541,722),7683=>array(22,-16,541,726),7684=>array(43,-152,541,563),7685=>array(22,-175,541,604),7686=>array(43,-99,541,563),7687=>array(22,-105,541,604),7688=>array(63,-173,534,752),7689=>array(84,-173,535,606),7690=>array(43,0,520,718),7691=>array(63,-16,583,726),7692=>array(43,-151,520,563),7693=>array(63,-163,583,604),7694=>array(43,-96,520,563),7695=>array(63,-101,583,604),7696=>array(43,-172,520,563),7697=>array(63,-177,583,604),7698=>array(43,-189,520,563),7699=>array(63,-200,583,604),7700=>array(43,0,520,800),7701=>array(63,-16,520,752),7702=>array(43,0,520,800),7703=>array(63,-16,520,752),7704=>array(43,-189,520,563),7705=>array(63,-200,520,431),7706=>array(43,-145,520,563),7707=>array(63,-151,520,431),7708=>array(43,-173,520,743),7709=>array(63,-188,520,622),7710=>array(43,0,520,722),7711=>array(105,0,541,763),7712=>array(63,-16,562,665),7713=>array(63,-186,562,541),7714=>array(53,0,551,722),7715=>array(43,0,551,727),7716=>array(53,-167,551,563),7717=>array(43,-172,551,604),7718=>array(53,0,551,717),7719=>array(43,0,551,753),7720=>array(53,-173,551,563),7721=>array(43,-173,551,604),7722=>array(53,-154,551,563),7723=>array(43,-154,551,604),7724=>array(113,-143,487,563),7725=>array(92,-146,508,624),7726=>array(113,0,487,800),7727=>array(92,0,508,773),7728=>array(43,0,572,761),7729=>array(63,0,541,771),7730=>array(43,-146,572,563),7731=>array(63,-150,541,604),7732=>array(43,-96,572,563),7733=>array(63,-93,541,604),7734=>array(63,-154,541,563),7735=>array(92,-152,508,604),7736=>array(63,-154,541,672),7737=>array(92,-152,508,710),7738=>array(63,-98,541,563),7739=>array(92,-99,508,604),7740=>array(63,-189,541,563),7741=>array(92,-189,508,604),7742=>array(11,0,593,752),7743=>array(11,0,593,627),7744=>array(11,0,593,705),7745=>array(11,0,593,603),7746=>array(11,-151,593,563),7747=>array(11,-150,593,431),7748=>array(22,0,562,705),7749=>array(53,0,541,604),7750=>array(22,-147,562,563),7751=>array(53,-146,541,431),7752=>array(22,-98,562,563),7753=>array(53,-97,541,431),7754=>array(22,-189,562,563),7755=>array(53,-189,541,431),7756=>array(51,-15,549,800),7757=>array(72,-16,528,783),7758=>array(51,-15,549,797),7759=>array(72,-16,528,728),7760=>array(51,-15,549,800),7761=>array(72,-16,528,752),7762=>array(51,-15,549,800),7763=>array(72,-16,528,752),7764=>array(43,0,499,763),7765=>array(22,-186,541,625),7766=>array(43,0,499,719),7767=>array(22,-186,541,609),7768=>array(43,0,589,719),7769=>array(84,0,541,602),7770=>array(43,-146,589,563),7771=>array(84,-145,541,427),7772=>array(43,-146,589,664),7773=>array(84,-145,541,519),7774=>array(43,-98,589,563),7775=>array(84,-101,541,427),7776=>array(92,-16,508,722),7777=>array(103,-16,497,603),7778=>array(92,-177,508,576),7779=>array(103,-181,497,431),7780=>array(92,-15,508,800),7781=>array(103,-16,497,749),7782=>array(92,-15,508,799),7783=>array(103,-16,497,747),7784=>array(92,-177,508,723),7785=>array(103,-181,497,603),7786=>array(72,0,528,719),7787=>array(43,-16,499,704),7788=>array(72,-148,528,563),7789=>array(43,-162,499,563),7790=>array(72,-92,528,563),7791=>array(43,-99,499,563),7792=>array(72,-189,528,563),7793=>array(43,-200,499,563),7794=>array(40,-169,560,563),7795=>array(43,-168,541,417),7796=>array(40,-153,560,563),7797=>array(43,-156,541,417),7798=>array(40,-200,560,563),7799=>array(43,-200,541,417),7800=>array(40,-15,560,800),7801=>array(43,-16,541,768),7802=>array(40,-15,560,796),7803=>array(43,-16,541,703),7804=>array(9,0,591,705),7805=>array(30,0,570,563),7806=>array(9,-147,591,563),7807=>array(30,-146,570,417),7808=>array(20,0,580,752),7809=>array(30,0,570,606),7810=>array(20,0,580,752),7811=>array(30,0,570,606),7812=>array(20,0,580,704),7813=>array(30,0,570,603),7814=>array(20,0,580,709),7815=>array(30,0,570,605),7816=>array(20,-145,580,563),7817=>array(30,-140,570,417),7818=>array(40,0,560,704),7819=>array(51,0,549,603),7820=>array(40,0,560,705),7821=>array(51,0,549,603),7822=>array(51,0,549,706),7823=>array(51,-186,549,604),7824=>array(103,0,497,752),7825=>array(115,0,489,624),7826=>array(103,-160,497,563),7827=>array(115,-160,489,417),7828=>array(103,-100,497,563),7829=>array(115,-100,489,417),7830=>array(43,-87,551,604),7831=>array(43,-16,499,703),7832=>array(30,0,570,652),7833=>array(51,-186,549,651),7834=>array(72,-16,550,661),7835=>array(105,0,541,757),7840=>array(9,-150,591,563),7841=>array(72,-164,541,431),7842=>array(9,0,591,800),7843=>array(72,-16,541,696),7844=>array(9,0,612,800),7845=>array(72,-16,541,777),7846=>array(0,0,591,800),7847=>array(72,-16,541,786),7848=>array(9,0,609,800),7849=>array(72,-16,612,699),7850=>array(9,0,591,800),7851=>array(72,-16,541,768),7852=>array(9,-150,591,762),7853=>array(72,-164,541,624),7854=>array(9,0,591,800),7855=>array(72,-16,541,736),7856=>array(9,0,591,800),7857=>array(72,-16,541,745),7858=>array(9,-2,591,800),7859=>array(72,-16,541,796),7860=>array(9,0,591,800),7861=>array(72,-16,541,755),7862=>array(9,-150,591,733),7863=>array(72,-164,541,624),7864=>array(43,-146,520,563),7865=>array(63,-161,520,431),7866=>array(43,0,520,800),7867=>array(63,-16,520,693),7868=>array(43,0,520,703),7869=>array(63,-16,520,564),7870=>array(43,0,612,800),7871=>array(63,-16,520,777),7872=>array(-23,0,520,800),7873=>array(63,-16,520,786),7874=>array(29,0,600,800),7875=>array(38,-16,560,781),7876=>array(43,0,520,800),7877=>array(63,-16,520,768),7878=>array(43,-146,520,752),7879=>array(63,-161,520,626),7880=>array(113,0,487,800),7881=>array(92,0,508,693),7882=>array(113,-149,487,563),7883=>array(92,-151,508,624),7884=>array(51,-160,549,576),7885=>array(72,-164,528,431),7886=>array(51,-16,549,800),7887=>array(72,-16,528,693),7888=>array(51,-16,612,800),7889=>array(72,-16,528,777),7890=>array(-11,-16,549,800),7891=>array(72,-16,528,786),7892=>array(23,-16,610,800),7893=>array(48,-16,541,781),7894=>array(51,-15,549,800),7895=>array(72,-16,528,757),7896=>array(51,-160,549,752),7897=>array(72,-164,528,625),7898=>array(51,-16,597,776),7899=>array(72,-16,590,668),7900=>array(51,-16,597,793),7901=>array(72,-16,590,676),7902=>array(51,-16,597,800),7903=>array(72,-16,590,680),7904=>array(51,-16,597,749),7905=>array(72,-16,590,640),7906=>array(51,-159,597,672),7907=>array(72,-167,590,539),7908=>array(40,-164,560,563),7909=>array(43,-159,541,417),7910=>array(40,-16,560,800),7911=>array(43,-16,541,693),7912=>array(40,-16,629,771),7913=>array(43,-16,574,664),7914=>array(40,-16,629,800),7915=>array(43,-16,574,667),7916=>array(40,-16,629,800),7917=>array(43,-16,574,704),7918=>array(40,-16,629,756),7919=>array(43,-16,574,614),7920=>array(40,-162,629,711),7921=>array(43,-162,574,565),7922=>array(51,0,549,763),7923=>array(51,-186,549,611),7924=>array(51,-147,549,563),7925=>array(51,-186,549,417),7926=>array(51,0,549,800),7927=>array(51,-186,549,683),7928=>array(51,0,549,704),7929=>array(51,-186,549,564),7936=>array(63,-16,583,648),7937=>array(63,-16,583,648),7938=>array(63,-16,583,655),7939=>array(63,-16,583,653),7940=>array(63,-16,583,655),7941=>array(63,-16,583,655),7942=>array(63,-16,583,764),7943=>array(63,-16,583,764),7944=>array(-23,0,591,593),7945=>array(-11,0,591,595),7946=>array(-53,0,660,606),7947=>array(-88,0,660,621),7948=>array(-65,0,658,618),7949=>array(-82,0,655,619),7950=>array(-59,0,659,715),7951=>array(-63,0,665,731),7952=>array(145,-2,493,660),7953=>array(145,-2,493,660),7954=>array(145,-2,493,667),7955=>array(145,-2,493,665),7956=>array(145,-2,493,667),7957=>array(145,-2,493,667),7960=>array(-19,0,589,615),7961=>array(-4,0,583,615),7962=>array(-112,0,600,622),7963=>array(-108,0,600,618),7964=>array(-131,0,590,619),7965=>array(-123,0,599,621),7968=>array(53,-186,541,648),7969=>array(53,-186,541,651),7970=>array(53,-186,541,658),7971=>array(53,-186,541,656),7972=>array(53,-186,541,658),7973=>array(53,-186,541,658),7974=>array(53,-186,541,767),7975=>array(53,-186,541,767),7976=>array(-15,0,584,614),7977=>array(-7,0,588,614),7978=>array(-72,0,642,621),7979=>array(-75,0,644,621),7980=>array(-85,0,632,619),7981=>array(-87,0,633,618),7982=>array(-72,0,642,735),7983=>array(-41,0,645,733),7984=>array(173,-16,502,648),7985=>array(173,-16,502,648),7986=>array(102,-16,502,655),7987=>array(105,-16,502,653),7988=>array(173,-16,502,655),7989=>array(160,-16,502,655),7990=>array(79,-16,502,764),7991=>array(111,-16,502,764),7992=>array(-5,0,506,616),7993=>array(29,0,513,617),7994=>array(-21,0,590,623),7995=>array(-15,0,604,613),7996=>array(-29,0,586,618),7997=>array(-19,0,600,618),7998=>array(-14,0,600,729),7999=>array(6,0,600,731),8000=>array(72,-16,528,647),8001=>array(72,-16,528,648),8002=>array(72,-16,528,655),8003=>array(72,-16,528,653),8004=>array(72,-16,528,655),8005=>array(72,-16,528,655),8008=>array(6,-16,578,612),8009=>array(12,-16,595,612),8010=>array(-93,-16,628,618),8011=>array(-112,-16,632,616),8012=>array(-27,-16,624,618),8013=>array(-28,-16,627,618),8016=>array(43,-12,553,648),8017=>array(43,-12,553,648),8018=>array(43,-12,553,655),8019=>array(43,-12,553,653),8020=>array(43,-12,553,655),8021=>array(43,-12,553,655),8022=>array(43,-12,553,764),8023=>array(43,-12,553,764),8025=>array(0,0,602,614),8027=>array(-96,0,649,616),8029=>array(-88,0,652,621),8031=>array(-36,0,651,749),8032=>array(43,-16,552,648),8033=>array(43,-16,552,648),8034=>array(43,-16,552,655),8035=>array(43,-16,552,653),8036=>array(43,-16,552,655),8037=>array(43,-16,552,655),8038=>array(43,-16,552,764),8039=>array(43,-16,552,764),8040=>array(-5,0,555,614),8041=>array(8,0,569,617),8042=>array(-84,0,619,618),8043=>array(-84,0,629,616),8044=>array(-19,0,614,615),8045=>array(-26,0,623,618),8046=>array(-30,0,624,735),8047=>array(-38,0,624,734),8048=>array(63,-16,583,664),8049=>array(63,-16,583,664),8050=>array(145,-2,493,676),8051=>array(145,-2,493,676),8052=>array(53,-186,541,667),8053=>array(53,-186,541,667),8054=>array(173,-16,502,664),8055=>array(173,-16,502,664),8056=>array(72,-16,528,664),8057=>array(72,-16,528,664),8058=>array(43,-12,553,664),8059=>array(43,-12,553,664),8060=>array(43,-16,552,664),8061=>array(43,-16,552,664),8064=>array(63,-199,583,648),8065=>array(63,-199,583,648),8066=>array(63,-199,583,655),8067=>array(63,-199,583,653),8068=>array(63,-199,583,655),8069=>array(63,-199,583,655),8070=>array(63,-199,583,764),8071=>array(63,-199,583,764),8072=>array(-16,-197,598,593),8073=>array(-4,-197,598,595),8074=>array(-75,-197,638,606),8075=>array(-137,-197,611,621),8076=>array(-106,-197,617,618),8077=>array(-106,-197,631,619),8078=>array(-114,-197,604,715),8079=>array(-126,-197,602,731),8080=>array(53,-199,541,648),8081=>array(53,-199,541,651),8082=>array(53,-200,541,658),8083=>array(53,-200,541,656),8084=>array(53,-199,541,658),8085=>array(53,-200,541,658),8086=>array(53,-199,541,767),8087=>array(53,-199,541,767),8088=>array(-15,-200,584,614),8089=>array(-7,-200,588,614),8090=>array(-72,-200,642,621),8091=>array(-75,-200,644,621),8092=>array(-85,-200,632,619),8093=>array(-87,-200,633,618),8094=>array(-115,-200,599,735),8095=>array(-41,-200,645,733),8096=>array(43,-200,552,648),8097=>array(43,-199,552,648),8098=>array(43,-200,552,655),8099=>array(43,-200,552,653),8100=>array(43,-199,552,655),8101=>array(43,-200,552,655),8102=>array(43,-200,552,764),8103=>array(43,-200,552,764),8104=>array(-5,-200,555,614),8105=>array(8,-200,569,617),8106=>array(-84,-200,619,618),8107=>array(-84,-200,629,616),8108=>array(-19,-200,614,615),8109=>array(-26,-200,623,618),8110=>array(-100,-200,554,735),8111=>array(-110,-200,552,734),8112=>array(63,-16,583,601),8113=>array(63,-16,583,538),8114=>array(63,-199,583,664),8115=>array(63,-200,583,431),8116=>array(63,-199,583,684),8118=>array(63,-16,583,573),8119=>array(63,-199,583,573),8120=>array(9,0,591,746),8121=>array(9,0,591,656),8122=>array(-21,0,595,621),8123=>array(3,0,633,618),8124=>array(9,-200,591,563),8125=>array(236,484,341,657),8126=>array(495,2,682,151),8127=>array(228,484,333,657),8128=>array(145,516,455,605),8129=>array(140,511,461,733),8130=>array(53,-199,541,667),8131=>array(53,-200,541,431),8132=>array(53,-199,541,684),8134=>array(53,-186,541,577),8135=>array(53,-199,541,577),8136=>array(-25,0,580,624),8137=>array(-17,0,593,618),8138=>array(-15,0,594,621),8139=>array(-12,0,600,618),8140=>array(51,-200,549,563),8141=>array(166,481,415,661),8142=>array(173,481,417,661),8143=>array(128,484,438,773),8144=>array(106,-16,502,601),8145=>array(106,-16,502,538),8146=>array(102,-16,502,668),8147=>array(147,-16,502,670),8150=>array(96,-16,502,560),8151=>array(90,-16,502,693),8152=>array(113,0,487,746),8153=>array(113,0,487,656),8154=>array(-13,0,494,617),8155=>array(24,0,539,618),8157=>array(169,479,427,659),8158=>array(147,481,402,661),8159=>array(160,484,470,773),8160=>array(43,-12,553,601),8161=>array(43,-12,553,535),8162=>array(43,-12,553,667),8163=>array(43,-12,553,417),8164=>array(21,-200,531,660),8165=>array(21,-200,531,660),8166=>array(43,-12,553,573),8167=>array(43,-12,553,693),8168=>array(51,0,549,746),8169=>array(51,0,549,656),8170=>array(-15,0,599,615),8171=>array(-32,0,600,615),8172=>array(-61,0,499,614),8173=>array(150,490,451,670),8174=>array(147,490,454,670),8175=>array(216,490,353,670),8178=>array(43,-200,552,664),8179=>array(43,-200,552,418),8180=>array(43,-200,552,684),8182=>array(43,-16,552,573),8183=>array(43,-200,552,573),8184=>array(-61,0,578,621),8185=>array(-3,1,549,615),8186=>array(-17,0,592,618),8187=>array(14,0,556,617),8188=>array(70,-200,530,563),8189=>array(232,490,369,670),8190=>array(243,484,348,657),8208=>array(136,258,464,299),8209=>array(136,258,464,299),8210=>array(72,261,528,302),8211=>array(72,261,528,302),8212=>array(1,261,599,302),8213=>array(1,261,599,302),8214=>array(228,-27,373,582),8215=>array(0,-200,600,-54),8216=>array(240,369,398,630),8217=>array(201,343,359,604),8218=>array(135,-150,293,111),8219=>array(306,343,464,604),8220=>array(66,369,444,630),8221=>array(93,343,464,604),8222=>array(86,-133,467,128),8223=>array(136,343,507,604),8224=>array(124,-63,476,604),8225=>array(124,-62,476,604),8226=>array(202,141,398,337),8227=>array(184,86,414,336),8228=>array(250,-15,349,84),8229=>array(140,-15,460,84),8230=>array(51,-15,549,84),8231=>array(250,180,350,280),8240=>array(34,-9,564,614),8241=>array(2,-9,594,614),8242=>array(201,343,398,604),8243=>array(105,342,495,604),8244=>array(2,343,598,604),8245=>array(201,343,398,604),8246=>array(105,343,495,604),8247=>array(2,343,598,604),8248=>array(155,-165,445,-16),8249=>array(63,0,312,417),8250=>array(293,0,541,417),8251=>array(61,51,521,511),8252=>array(112,-15,488,618),8253=>array(134,-15,487,577),8254=>array(-1,635,599,685),8255=>array(100,-174,500,-44),8256=>array(100,454,500,584),8257=>array(177,-198,423,252),8258=>array(-83,0,683,729),8259=>array(72,39,528,496),8260=>array(50,138,549,470),8261=>array(278,-124,403,604),8262=>array(197,-124,322,604),8263=>array(1,-15,598,577),8264=>array(38,-15,584,618),8265=>array(16,-15,551,618),8266=>array(105,-14,478,417),8267=>array(79,-62,525,604),8268=>array(81,109,525,453),8269=>array(81,109,525,453),8270=>array(113,7,487,361),8271=>array(139,-145,350,417),8272=>array(100,-1,500,584),8273=>array(113,1,487,754),8274=>array(106,0,494,755),8275=>array(145,185,455,274),8276=>array(100,-164,500,-34),8277=>array(72,261,528,302),8278=>array(104,-2,495,572),8279=>array(-29,343,677,604),8280=>array(2,-2,600,663),8281=>array(0,-2,600,572),8282=>array(250,-2,350,777),8283=>array(1,-200,599,800),8284=>array(72,32,529,530),8285=>array(250,-2,350,777),8286=>array(250,-2,350,777),8304=>array(192,378,408,734),8305=>array(179,381,421,779),8308=>array(183,382,408,734),8309=>array(181,380,418,741),8310=>array(176,374,408,748),8311=>array(183,374,400,734),8312=>array(192,373,408,742),8313=>array(206,370,438,744),8314=>array(178,439,422,698),8315=>array(178,557,422,592),8316=>array(178,520,422,628),8317=>array(266,352,372,800),8318=>array(228,352,334,800),8319=>array(149,382,451,651),8320=>array(195,-190,411,166),8321=>array(194,-184,413,169),8322=>array(178,-183,408,170),8323=>array(184,-187,419,174),8324=>array(186,-186,411,166),8325=>array(184,-188,421,173),8326=>array(179,-186,411,188),8327=>array(186,-184,403,176),8328=>array(195,-185,411,184),8329=>array(209,-188,441,186),8330=>array(178,-172,422,87),8331=>array(178,-54,422,-19),8332=>array(178,-73,422,35),8333=>array(266,-200,372,248),8334=>array(228,-200,334,248),8336=>array(145,-181,468,128),8337=>array(134,-180,449,129),8338=>array(143,-180,457,129),8339=>array(129,-181,471,108),8340=>array(134,-180,449,129),8353=>array(63,-81,534,626),8354=>array(63,-16,534,576),8355=>array(43,0,520,563),8356=>array(63,0,520,578),8357=>array(11,-64,593,470),8358=>array(22,0,562,563),8359=>array(27,-17,578,563),8360=>array(0,-17,599,563),8361=>array(20,0,580,563),8362=>array(60,0,540,480),8363=>array(43,-1,563,694),8364=>array(32,-16,537,576),8365=>array(43,0,572,563),8366=>array(72,0,528,563),8367=>array(13,-102,584,563),8368=>array(103,-200,528,567),8369=>array(43,0,537,563),8370=>array(63,-67,562,624),8371=>array(9,0,591,563),8372=>array(62,-16,518,576),8373=>array(63,-64,534,624),8376=>array(72,0,528,563),8377=>array(80,0,509,564),8400=>array(-540,640,-45,774),8401=>array(-535,636,-40,770),8402=>array(-325,-124,-285,604),8406=>array(-559,572,-72,800),8407=>array(-501,572,-14,800),8411=>array(-549,643,-51,743),8412=>array(-549,643,0,743),8413=>array(-793,-198,195,790),8414=>array(-782,-193,207,796),8415=>array(-793,-190,193,796),8416=>array(-793,-198,195,790),8417=>array(-572,572,-22,800),8418=>array(-714,-75,102,643),8419=>array(-704,-200,147,800),8421=>array(-487,-81,-113,668),8422=>array(-375,-124,-225,604),8424=>array(-471,-178,-3,-78),8426=>array(-559,167,-72,395),8427=>array(-542,-81,-58,668),8428=>array(-541,-200,-46,-66),8429=>array(-547,-200,-52,-66),8430=>array(-498,-200,-12,-21),8431=>array(-498,-200,-12,-21),8448=>array(15,-7,574,629),8449=>array(3,-9,587,606),8450=>array(63,-16,534,576),8451=>array(21,-16,579,661),8452=>array(63,0,541,626),8453=>array(9,-12,589,592),8454=>array(9,-9,600,592),8455=>array(92,-16,508,576),8456=>array(43,-16,514,576),8457=>array(8,0,595,661),8461=>array(33,0,571,563),8462=>array(34,0,537,604),8463=>array(34,0,537,604),8464=>array(49,-28,558,568),8465=>array(86,-15,520,563),8466=>array(86,0,520,578),8467=>array(117,-28,483,632),8468=>array(25,-17,558,586),8469=>array(30,0,578,563),8470=>array(9,0,586,563),8471=>array(0,0,600,600),8472=>array(52,-150,542,454),8473=>array(43,0,499,563),8474=>array(51,-115,549,576),8476=>array(40,-1,561,574),8477=>array(35,0,589,563),8478=>array(43,0,589,563),8480=>array(10,236,594,575),8481=>array(0,0,600,563),8482=>array(4,243,598,563),8484=>array(49,0,551,563),8486=>array(70,0,530,563),8487=>array(70,-10,530,553),8489=>array(173,6,502,440),8490=>array(43,0,572,563),8491=>array(9,0,591,794),8494=>array(63,-16,520,431),8498=>array(43,0,520,563),8501=>array(60,0,540,480),8502=>array(60,0,560,480),8503=>array(133,0,467,480),8504=>array(60,0,540,480),8505=>array(62,0,538,623),8506=>array(-59,-4,633,495),8507=>array(-27,0,626,563),8513=>array(50,-14,549,578),8514=>array(55,0,533,563),8515=>array(55,0,533,563),8516=>array(51,0,549,563),8523=>array(106,-15,479,520),8525=>array(8,-12,595,721),8526=>array(98,1,480,452),8531=>array(23,-10,591,608),8532=>array(8,-10,591,614),8533=>array(23,-2,600,608),8534=>array(8,-2,600,614),8535=>array(6,-2,600,611),8536=>array(3,-2,600,614),8537=>array(23,-10,578,608),8538=>array(6,-10,578,622),8539=>array(23,-10,584,608),8540=>array(6,-10,584,611),8541=>array(6,-10,584,622),8542=>array(56,-10,584,614),8543=>array(23,51,493,608),8544=>array(113,0,487,563),8545=>array(49,0,551,563),8546=>array(33,0,567,563),8547=>array(37,0,563,563),8548=>array(43,0,556,563),8549=>array(37,0,563,563),8550=>array(32,0,558,563),8551=>array(17,0,583,563),8552=>array(14,0,586,563),8553=>array(40,0,560,563),8554=>array(8,0,581,563),8555=>array(14,0,586,563),8556=>array(63,0,541,563),8557=>array(63,-16,534,576),8558=>array(43,0,520,563),8559=>array(11,0,593,563),8560=>array(92,0,508,624),8561=>array(79,0,538,624),8562=>array(14,0,589,624),8563=>array(11,0,593,624),8564=>array(30,0,570,417),8565=>array(5,0,598,624),8566=>array(43,0,572,624),8567=>array(-22,0,611,624),8568=>array(63,0,544,624),8569=>array(51,0,549,417),8570=>array(34,0,555,624),8571=>array(34,0,570,624),8572=>array(92,0,508,604),8573=>array(84,-16,535,431),8574=>array(63,-16,583,604),8575=>array(11,0,593,431),8592=>array(41,167,528,395),8593=>array(186,38,414,524),8594=>array(54,167,541,395),8595=>array(186,38,414,524),8596=>array(25,167,575,395),8597=>array(186,6,414,556),8598=>array(112,103,463,453),8599=>array(123,102,472,453),8600=>array(120,109,470,460),8601=>array(128,109,479,458),8602=>array(40,160,560,404),8603=>array(40,160,560,404),8604=>array(77,158,523,374),8605=>array(77,158,523,374),8606=>array(40,167,560,395),8607=>array(186,21,414,541),8608=>array(40,167,560,395),8609=>array(186,21,414,541),8610=>array(41,167,538,395),8611=>array(62,167,559,395),8612=>array(42,135,566,427),8613=>array(154,0,446,524),8614=>array(42,135,566,427),8615=>array(154,38,446,562),8616=>array(154,-51,446,556),8617=>array(41,167,538,442),8618=>array(70,167,567,442),8619=>array(41,167,538,442),8620=>array(70,167,567,442),8621=>array(25,167,575,395),8622=>array(0,160,600,404),8623=>array(132,52,404,748),8624=>array(105,30,460,510),8625=>array(140,30,495,510),8626=>array(105,30,460,510),8627=>array(140,30,495,510),8628=>array(42,28,522,512),8629=>array(41,30,524,510),8630=>array(40,285,522,650),8631=>array(40,285,522,650),8632=>array(43,103,560,571),8633=>array(38,-10,566,569),8634=>array(59,30,545,514),8635=>array(57,30,543,514),8636=>array(33,261,528,395),8637=>array(33,169,528,303),8638=>array(280,38,414,533),8639=>array(187,38,321,533),8640=>array(33,261,528,395),8641=>array(49,169,544,303),8642=>array(280,38,414,533),8643=>array(187,38,321,533),8644=>array(41,23,561,539),8645=>array(43,21,559,541),8646=>array(41,23,561,539),8647=>array(41,23,528,539),8648=>array(42,38,558,524),8649=>array(74,23,561,539),8650=>array(42,38,558,524),8651=>array(33,97,544,467),8652=>array(33,97,544,467),8653=>array(56,0,544,584),8654=>array(16,0,584,584),8655=>array(56,0,542,584),8656=>array(56,147,550,415),8657=>array(166,38,434,760),8658=>array(50,147,544,415),8659=>array(166,32,434,754),8660=>array(16,147,584,415),8661=>array(166,-2,434,800),8668=>array(44,167,555,395),8669=>array(44,167,555,395),8678=>array(42,147,558,415),8679=>array(166,23,434,539),8680=>array(42,147,558,415),8681=>array(166,23,434,539),8691=>array(165,-1,435,565),8704=>array(9,0,591,563),8705=>array(63,-18,534,760),8706=>array(136,-15,510,618),8707=>array(43,0,493,563),8708=>array(43,-94,493,681),8709=>array(35,0,565,530),8710=>array(43,0,557,563),8711=>array(43,0,557,563),8712=>array(38,30,536,530),8713=>array(38,-81,536,668),8714=>array(115,110,464,449),8715=>array(38,30,536,530),8716=>array(38,-81,536,668),8717=>array(115,110,464,449),8718=>array(150,0,450,500),8719=>array(51,-80,543,624),8720=>array(51,-81,543,623),8721=>array(113,-67,507,623),8722=>array(72,261,528,302),8723=>array(72,0,528,529),8724=>array(72,-10,528,628),8725=>array(96,51,493,514),8726=>array(96,51,493,514),8727=>array(113,119,487,473),8728=>array(154,136,448,429),8729=>array(202,141,398,337),8730=>array(10,0,600,699),8731=>array(10,0,600,732),8732=>array(10,0,600,734),8733=>array(37,134,554,468),8734=>array(5,134,595,468),8735=>array(20,0,580,560),8736=>array(70,0,528,439),8737=>array(49,51,550,534),8738=>array(67,12,522,532),8739=>array(279,-27,320,582),8740=>array(177,-27,423,582),8741=>array(228,-27,373,582),8742=>array(151,-27,456,582),8743=>array(60,0,534,450),8744=>array(60,0,534,450),8745=>array(71,-11,527,465),8746=>array(73,-11,528,465),8747=>array(136,-78,466,744),8748=>array(56,-79,546,744),8749=>array(16,-79,586,744),8750=>array(110,-78,480,744),8751=>array(56,-79,546,744),8752=>array(16,-79,586,745),8753=>array(110,-78,550,744),8754=>array(110,-78,550,744),8755=>array(110,-78,550,744),8756=>array(59,2,539,446),8757=>array(59,2,539,446),8758=>array(250,-1,350,446),8759=>array(60,-1,539,446),8760=>array(72,261,528,507),8761=>array(72,-1,501,446),8762=>array(60,69,539,505),8763=>array(92,63,508,510),8764=>array(92,212,508,348),8765=>array(92,212,508,348),8766=>array(25,96,576,389),8767=>array(102,172,498,388),8768=>array(232,43,368,459),8769=>array(92,94,508,464),8770=>array(74,148,530,429),8771=>array(74,148,530,431),8772=>array(72,94,528,464),8773=>array(51,121,549,511),8774=>array(51,-14,549,502),8775=>array(51,8,549,546),8776=>array(92,148,508,431),8777=>array(92,94,508,464),8778=>array(74,32,530,431),8779=>array(92,35,508,510),8780=>array(51,121,549,531),8781=>array(100,89,500,420),8782=>array(51,-5,549,434),8783=>array(51,122,549,434),8784=>array(51,122,549,513),8785=>array(51,-89,549,509),8786=>array(51,-89,549,509),8787=>array(51,-89,549,509),8788=>array(46,134,512,431),8789=>array(46,134,512,431),8790=>array(51,122,549,307),8791=>array(51,122,549,581),8792=>array(51,122,549,504),8793=>array(51,122,549,512),8794=>array(51,122,549,512),8795=>array(51,122,549,586),8796=>array(51,122,549,644),8797=>array(51,122,549,586),8798=>array(19,122,585,657),8799=>array(51,122,549,687),8800=>array(51,94,549,464),8801=>array(51,107,549,446),8802=>array(51,12,549,542),8803=>array(51,51,549,540),8804=>array(65,-1,522,581),8805=>array(78,-1,534,577),8806=>array(51,-3,549,717),8807=>array(51,-3,549,720),8808=>array(37,-94,535,615),8809=>array(37,-95,535,615),8810=>array(21,114,579,448),8811=>array(21,114,579,448),8812=>array(206,-124,399,604),8813=>array(100,12,500,512),8814=>array(72,-81,522,668),8815=>array(78,-81,528,668),8816=>array(43,-102,525,595),8817=>array(59,-102,531,595),8818=>array(72,-20,522,627),8819=>array(78,-20,528,626),8820=>array(72,-77,522,676),8821=>array(78,-77,528,676),8822=>array(137,-12,463,574),8823=>array(137,-12,463,574),8824=>array(137,-77,463,676),8825=>array(137,-77,463,676),8826=>array(72,39,524,521),8827=>array(70,41,522,523),8828=>array(72,-37,524,563),8829=>array(70,-37,526,556),8830=>array(72,-20,524,623),8831=>array(70,-20,522,624),8832=>array(72,-16,524,563),8833=>array(70,-16,522,563),8834=>array(51,113,538,452),8835=>array(51,113,538,452),8836=>array(51,-81,538,668),8837=>array(51,-81,538,668),8838=>array(51,-1,538,452),8839=>array(51,-1,538,452),8840=>array(51,-82,553,533),8841=>array(51,-82,538,530),8842=>array(51,-105,538,477),8843=>array(51,-105,538,476),8844=>array(73,-11,528,465),8845=>array(73,-11,528,465),8846=>array(73,-11,528,465),8847=>array(74,113,538,452),8848=>array(62,113,526,452),8849=>array(74,19,538,474),8850=>array(62,19,526,476),8851=>array(72,-20,528,456),8852=>array(72,-20,528,456),8853=>array(24,1,575,551),8854=>array(24,1,575,551),8855=>array(28,0,580,553),8856=>array(28,1,580,554),8857=>array(35,0,565,530),8858=>array(35,0,565,530),8859=>array(35,1,565,531),8860=>array(35,0,565,530),8861=>array(35,0,565,530),8862=>array(50,0,550,500),8863=>array(50,0,550,500),8864=>array(50,0,550,500),8865=>array(50,0,550,500),8866=>array(51,-24,561,585),8867=>array(39,-24,549,585),8868=>array(30,-15,570,583),8869=>array(30,0,570,598),8870=>array(170,-24,443,585),8871=>array(170,-24,443,585),8872=>array(51,-24,561,585),8873=>array(119,-24,494,585),8874=>array(73,-24,548,585),8875=>array(34,-24,571,585),8876=>array(51,-24,561,585),8877=>array(51,-24,561,585),8878=>array(121,-24,542,585),8879=>array(34,-24,579,585),8880=>array(123,-21,476,582),8881=>array(123,-21,476,582),8882=>array(95,78,479,340),8883=>array(121,78,505,340),8884=>array(72,24,528,368),8885=>array(72,24,528,387),8886=>array(22,141,578,337),8887=>array(22,141,578,337),8888=>array(92,141,495,337),8889=>array(52,33,549,530),8890=>array(100,-199,500,273),8891=>array(60,-1,534,558),8892=>array(60,0,534,563),8893=>array(60,0,534,563),8894=>array(20,0,580,560),8895=>array(20,0,580,560),8896=>array(45,-11,555,562),8897=>array(45,-11,555,562),8898=>array(43,-58,557,691),8899=>array(43,-39,557,710),8900=>array(214,78,386,319),8901=>array(250,180,350,280),8902=>array(152,132,446,412),8903=>array(72,25,528,540),8904=>array(92,82,508,344),8905=>array(92,82,508,344),8906=>array(92,82,508,344),8907=>array(133,-6,467,564),8908=>array(133,-6,467,564),8909=>array(76,147,532,429),8910=>array(56,54,539,506),8911=>array(56,54,539,506),8912=>array(51,113,538,452),8913=>array(51,113,538,452),8914=>array(71,-11,527,465),8915=>array(71,-11,527,465),8916=>array(120,1,459,436),8917=>array(51,-27,549,582),8918=>array(78,44,528,518),8919=>array(78,44,528,518),8920=>array(5,115,594,320),8921=>array(5,115,594,320),8922=>array(187,5,413,530),8923=>array(187,5,413,530),8924=>array(56,-42,512,536),8925=>array(56,-46,513,536),8926=>array(70,-37,526,556),8927=>array(72,-37,524,563),8928=>array(72,-72,524,601),8929=>array(70,-72,526,601),8930=>array(52,-64,538,573),8931=>array(51,-64,538,572),8932=>array(51,-105,538,474),8933=>array(51,-105,538,476),8934=>array(72,-106,522,678),8935=>array(78,-96,528,682),8936=>array(72,-106,524,679),8937=>array(70,-106,522,679),8938=>array(95,-18,493,445),8939=>array(96,-18,505,445),8940=>array(72,-18,528,445),8941=>array(72,-18,528,445),8942=>array(250,-6,350,460),8943=>array(67,177,533,277),8944=>array(36,-24,564,498),8945=>array(21,-45,544,484),8960=>array(55,20,545,510),8962=>array(50,0,550,601),8963=>array(133,474,467,800),8964=>array(133,-200,467,126),8965=>array(133,2,467,440),8966=>array(133,2,467,531),8968=>array(279,216,566,669),8969=>array(34,216,321,669),8970=>array(279,-2,566,451),8971=>array(34,0,321,453),8972=>array(279,380,560,760),8973=>array(40,380,321,760),8974=>array(279,0,560,380),8975=>array(40,0,320,380),8976=>array(72,168,528,438),8978=>array(35,1,565,265),8980=>array(5,261,595,609),8981=>array(55,-25,530,450),8984=>array(25,52,575,603),8985=>array(72,167,528,437),8988=>array(280,519,561,800),8989=>array(39,519,320,800),8990=>array(280,-200,561,81),8991=>array(39,-200,320,81),8992=>array(280,-200,511,800),8993=>array(89,-200,320,800),8994=>array(100,152,500,282),8995=>array(100,152,500,282),8996=>array(6,92,594,522),8997=>array(32,100,567,522),8998=>array(0,0,600,360),8999=>array(62,0,538,360),9001=>array(196,-124,400,602),9002=>array(200,-124,404,602),9003=>array(0,0,600,360),9004=>array(43,-13,557,581),9014=>array(1,-94,599,689),9015=>array(80,-94,520,689),9016=>array(0,-94,600,689),9017=>array(0,-94,600,689),9018=>array(0,-94,600,689),9019=>array(0,-94,600,689),9020=>array(0,-94,600,689),9021=>array(35,-27,565,582),9022=>array(35,0,565,530),9023=>array(72,51,528,514),9024=>array(72,51,528,514),9025=>array(0,-94,600,689),9026=>array(0,-94,600,689),9027=>array(0,-94,600,689),9028=>array(0,-94,600,689),9029=>array(41,-27,528,582),9030=>array(73,-27,560,582),9031=>array(0,-94,600,689),9032=>array(0,-94,600,689),9033=>array(35,0,565,530),9034=>array(30,-124,570,598),9035=>array(43,-27,557,582),9036=>array(0,-94,600,689),9037=>array(0,-94,600,689),9038=>array(30,-1,570,597),9039=>array(72,77,528,563),9040=>array(0,-94,600,689),9041=>array(30,-15,570,665),9042=>array(43,-19,557,590),9043=>array(0,-94,600,689),9044=>array(0,-94,600,689),9045=>array(30,-15,570,583),9046=>array(72,1,528,487),9047=>array(0,-94,600,689),9048=>array(155,-124,445,604),9049=>array(43,-124,557,563),9050=>array(155,-124,445,319),9051=>array(154,-124,448,429),9052=>array(35,-124,565,530),9053=>array(71,-11,527,465),9054=>array(0,-94,600,689),9055=>array(35,0,565,530),9056=>array(0,-94,600,689),9057=>array(30,-15,570,723),9058=>array(43,0,557,723),9059=>array(140,132,461,625),9060=>array(140,136,461,625),9061=>array(35,0,565,645),9062=>array(72,-28,528,582),9063=>array(51,-27,538,582),9064=>array(92,212,508,611),9065=>array(78,44,528,611),9066=>array(72,-145,528,299),9067=>array(43,0,557,563),9068=>array(92,-15,508,618),9069=>array(92,-27,508,582),9070=>array(139,-124,445,518),9071=>array(0,-94,600,689),9072=>array(0,-94,600,689),9073=>array(74,-18,526,460),9074=>array(74,-18,526,460),9075=>array(173,-16,502,418),9076=>array(21,-200,531,427),9077=>array(43,-16,552,418),9078=>array(63,-124,583,431),9079=>array(155,-124,445,432),9080=>array(155,-124,502,418),9081=>array(43,-124,552,418),9082=>array(63,-16,583,431),9084=>array(0,-200,599,686),9085=>array(2,0,598,420),9086=>array(4,0,598,561),9087=>array(167,-200,433,768),9088=>array(60,-68,534,621),9089=>array(1,1,599,421),9090=>array(1,0,600,418),9091=>array(5,152,595,466),9092=>array(1,0,600,440),9093=>array(50,-53,550,624),9094=>array(1,0,600,600),9095=>array(2,0,599,511),9096=>array(1,-18,599,580),9097=>array(0,0,600,600),9098=>array(0,0,600,600),9099=>array(0,-16,600,585),9100=>array(18,-1,570,582),9101=>array(2,0,598,605),9102=>array(2,0,600,583),9103=>array(35,0,565,534),9104=>array(35,0,565,534),9105=>array(35,0,565,534),9106=>array(35,0,565,534),9107=>array(25,191,575,377),9108=>array(20,1,580,478),9109=>array(0,-94,600,689),9110=>array(173,315,412,656),9111=>array(2,-64,599,702),9112=>array(2,-61,598,699),9113=>array(2,-43,600,715),9114=>array(1,3,600,607),9115=>array(340,-200,519,718),9116=>array(340,-200,380,800),9117=>array(340,-118,519,800),9118=>array(81,-200,260,718),9119=>array(220,-200,260,800),9120=>array(81,-118,260,800),9121=>array(300,-200,500,699),9122=>array(300,-200,340,800),9123=>array(300,-99,500,800),9124=>array(100,-200,300,699),9125=>array(260,-200,300,800),9126=>array(100,-99,300,800),9127=>array(280,-200,501,700),9128=>array(44,-200,320,800),9129=>array(280,-100,501,800),9130=>array(280,-200,320,800),9131=>array(99,-200,320,700),9132=>array(280,-200,556,800),9133=>array(99,-100,320,800),9134=>array(280,-200,320,800),9135=>array(0,-200,600,-120),9136=>array(60,-200,540,800),9137=>array(60,-200,540,800),9138=>array(11,-200,570,620),9139=>array(11,-20,570,800),9140=>array(0,634,600,800),9141=>array(0,0,600,166),9142=>array(0,241,600,627),9143=>array(34,-200,321,800),9146=>array(0,720,600,800),9147=>array(0,485,600,565),9148=>array(0,260,600,340),9149=>array(0,35,600,115),9150=>array(177,0,422,682),9151=>array(177,0,422,682),9152=>array(40,-85,559,671),9153=>array(40,-85,559,671),9154=>array(40,-85,559,671),9155=>array(30,-85,570,671),9156=>array(30,-85,570,671),9157=>array(30,-85,570,671),9158=>array(25,-85,574,671),9159=>array(25,-85,574,671),9160=>array(25,-85,574,671),9161=>array(87,-85,512,671),9162=>array(87,-85,512,671),9163=>array(178,0,423,682),9164=>array(178,0,423,682),9165=>array(14,0,586,513),9166=>array(16,38,584,505),9167=>array(64,0,536,500),9178=>array(6,-116,594,644),9179=>array(6,0,594,335),9182=>array(0,592,600,798),9183=>array(0,-200,600,6),9186=>array(20,0,580,460),9187=>array(43,-13,557,581),9188=>array(1,261,599,302),9189=>array(10,0,590,372),9190=>array(4,152,596,417),9216=>array(44,-1,558,630),9217=>array(56,0,554,633),9218=>array(46,0,557,633),9219=>array(35,0,557,630),9220=>array(45,-1,560,630),9221=>array(35,-37,560,630),9222=>array(30,0,573,629),9223=>array(38,-1,558,629),9224=>array(128,99,473,567),9225=>array(106,101,494,566),9226=>array(115,100,499,569),9227=>array(88,100,504,568),9228=>array(117,100,489,567),9229=>array(104,102,502,567),9230=>array(111,101,473,569),9231=>array(126,100,474,567),9232=>array(43,0,564,628),9233=>array(33,0,543,628),9234=>array(43,0,560,628),9235=>array(43,-1,563,628),9236=>array(43,1,559,628),9237=>array(34,0,563,630),9238=>array(36,-1,568,633),9239=>array(35,0,569,630),9240=>array(30,-1,571,632),9241=>array(114,108,504,559),9242=>array(33,-1,569,633),9243=>array(35,-4,566,629),9244=>array(97,100,488,567),9245=>array(95,99,498,565),9246=>array(105,98,488,567),9247=>array(90,101,498,571),9248=>array(134,98,482,566),9249=>array(33,-1,567,628),9250=>array(22,-16,541,590),9251=>array(40,1,552,154),9252=>array(20,0,573,615),9253=>array(0,0,600,707),9254=>array(113,-15,466,577),9280=>array(31,0,569,694),9281=>array(106,-1,493,694),9282=>array(106,-1,493,694),9283=>array(106,-1,493,694),9284=>array(106,0,493,694),9285=>array(10,122,590,456),9286=>array(23,0,576,680),9287=>array(10,0,577,609),9288=>array(35,0,564,680),9289=>array(9,0,587,211),9290=>array(98,0,502,694),9312=>array(0,0,600,600),9313=>array(0,0,600,600),9314=>array(0,0,600,600),9315=>array(0,0,600,600),9316=>array(0,0,600,600),9317=>array(0,0,600,600),9318=>array(0,0,600,600),9319=>array(0,0,600,600),9320=>array(0,0,600,600),9321=>array(0,0,600,600),9472=>array(0,280,600,320),9473=>array(0,260,600,340),9474=>array(280,-200,320,800),9475=>array(260,-200,340,800),9476=>array(0,280,600,320),9477=>array(0,260,600,340),9478=>array(280,-200,320,800),9479=>array(260,-200,340,800),9480=>array(0,280,600,320),9481=>array(0,260,600,340),9482=>array(280,-200,320,800),9483=>array(260,-200,340,800),9484=>array(280,-200,600,320),9485=>array(280,-200,600,340),9486=>array(260,-200,600,320),9487=>array(260,-200,600,340),9488=>array(0,-200,320,320),9489=>array(0,-200,320,340),9490=>array(0,-200,340,320),9491=>array(0,-200,340,340),9492=>array(280,280,600,800),9493=>array(280,260,600,800),9494=>array(260,280,600,800),9495=>array(260,260,600,800),9496=>array(0,280,320,800),9497=>array(0,260,320,800),9498=>array(0,280,340,800),9499=>array(0,260,340,800),9500=>array(280,-200,600,800),9501=>array(280,-200,600,800),9502=>array(260,-200,600,800),9503=>array(260,-200,600,800),9504=>array(260,-200,600,800),9505=>array(260,-200,600,800),9506=>array(260,-200,600,800),9507=>array(260,-200,600,800),9508=>array(0,-200,320,800),9509=>array(0,-200,320,800),9510=>array(0,-200,340,800),9511=>array(0,-200,340,800),9512=>array(0,-200,340,800),9513=>array(0,-200,340,800),9514=>array(0,-200,340,800),9515=>array(0,-200,340,800),9516=>array(0,-200,600,320),9517=>array(0,-200,600,340),9518=>array(0,-200,600,340),9519=>array(0,-200,600,340),9520=>array(0,-200,600,320),9521=>array(0,-200,600,340),9522=>array(0,-200,600,340),9523=>array(0,-200,600,340),9524=>array(0,280,600,800),9525=>array(0,260,600,800),9526=>array(0,260,600,800),9527=>array(0,260,600,800),9528=>array(0,280,600,800),9529=>array(0,260,600,800),9530=>array(0,260,600,800),9531=>array(0,260,600,800),9532=>array(0,-200,600,800),9533=>array(0,-200,600,800),9534=>array(0,-200,600,800),9535=>array(0,-200,600,800),9536=>array(0,-200,600,800),9537=>array(0,-200,600,800),9538=>array(0,-200,600,800),9539=>array(0,-200,600,800),9540=>array(0,-200,600,800),9541=>array(0,-200,600,800),9542=>array(0,-200,600,800),9543=>array(0,-200,600,800),9544=>array(0,-200,600,800),9545=>array(0,-200,600,800),9546=>array(0,-200,600,800),9547=>array(0,-200,600,800),9548=>array(0,280,600,320),9549=>array(0,260,600,340),9550=>array(280,-200,320,800),9551=>array(240,-200,360,800),9552=>array(0,220,600,380),9553=>array(220,-200,380,800),9554=>array(280,-200,600,380),9555=>array(220,-200,600,320),9556=>array(220,-200,600,380),9557=>array(0,-200,320,380),9558=>array(0,-200,380,320),9559=>array(0,-200,380,380),9560=>array(280,220,600,800),9561=>array(220,280,600,800),9562=>array(220,220,600,800),9563=>array(0,220,320,800),9564=>array(0,280,380,800),9565=>array(0,220,380,800),9566=>array(280,-200,600,800),9567=>array(220,-200,600,800),9568=>array(220,-200,600,800),9569=>array(0,-200,320,800),9570=>array(0,-200,380,800),9571=>array(0,-200,380,800),9572=>array(0,-200,600,380),9573=>array(0,-200,600,320),9574=>array(0,-200,600,380),9575=>array(0,220,600,800),9576=>array(0,280,600,800),9577=>array(0,220,600,800),9578=>array(0,-200,600,800),9579=>array(0,-200,600,800),9580=>array(0,-200,600,800),9581=>array(280,-200,600,320),9582=>array(0,-200,320,320),9583=>array(0,280,320,800),9584=>array(280,280,600,800),9585=>array(0,-200,600,800),9586=>array(-5,-200,600,800),9587=>array(-17,-200,617,800),9588=>array(0,280,300,320),9589=>array(280,300,320,800),9590=>array(300,280,600,320),9591=>array(280,-200,320,300),9592=>array(0,260,300,340),9593=>array(260,300,340,800),9594=>array(300,260,600,340),9595=>array(260,-200,340,300),9596=>array(0,260,600,340),9597=>array(260,-200,340,800),9598=>array(0,260,600,340),9599=>array(260,-200,340,800),9600=>array(0,300,600,800),9601=>array(0,-200,600,-75),9602=>array(0,-200,600,50),9603=>array(0,-200,600,175),9604=>array(0,-200,600,300),9605=>array(0,-200,600,425),9606=>array(0,-200,600,550),9607=>array(0,-200,600,675),9608=>array(0,-200,600,800),9609=>array(0,-200,525,800),9610=>array(0,-200,450,800),9611=>array(0,-200,375,800),9612=>array(0,-200,300,800),9613=>array(0,-200,225,800),9614=>array(0,-200,150,800),9615=>array(0,-200,75,800),9616=>array(300,-200,600,800),9617=>array(0,-200,550,750),9618=>array(0,-200,600,750),9619=>array(1,-200,600,800),9620=>array(0,675,600,800),9621=>array(525,-200,600,800),9622=>array(0,-200,300,300),9623=>array(300,-200,600,300),9624=>array(0,300,300,800),9625=>array(0,-200,600,800),9626=>array(0,-200,600,800),9627=>array(0,-200,600,800),9628=>array(0,-200,600,800),9629=>array(300,300,600,800),9630=>array(0,-200,600,800),9631=>array(0,-200,600,800),9632=>array(50,0,550,500),9633=>array(50,0,550,500),9634=>array(50,0,550,500),9635=>array(50,0,550,500),9636=>array(50,0,550,500),9637=>array(50,0,550,500),9638=>array(50,0,550,500),9639=>array(50,0,550,500),9640=>array(50,0,550,500),9641=>array(50,0,550,500),9642=>array(175,0,425,250),9643=>array(175,0,425,250),9644=>array(50,0,550,300),9645=>array(50,0,550,300),9646=>array(150,0,450,500),9647=>array(150,0,450,500),9648=>array(25,0,575,300),9649=>array(25,0,575,300),9650=>array(35,0,565,454),9651=>array(35,0,565,454),9652=>array(168,0,432,226),9653=>array(168,0,432,226),9654=>array(84,0,543,530),9655=>array(84,0,543,530),9656=>array(199,0,428,266),9657=>array(199,0,427,262),9658=>array(121,0,506,266),9659=>array(121,0,505,262),9660=>array(35,0,565,454),9661=>array(35,0,565,454),9662=>array(168,0,432,226),9663=>array(168,0,432,226),9664=>array(57,0,516,530),9665=>array(57,0,516,530),9666=>array(172,0,401,266),9667=>array(173,0,401,262),9668=>array(94,0,479,266),9669=>array(95,0,479,262),9670=>array(35,0,565,530),9671=>array(35,0,565,530),9672=>array(35,0,565,530),9673=>array(35,0,565,530),9674=>array(89,-11,511,575),9675=>array(35,0,565,530),9676=>array(35,0,565,530),9677=>array(35,0,565,530),9678=>array(35,0,565,530),9679=>array(35,0,565,530),9680=>array(35,0,565,530),9681=>array(35,0,565,530),9682=>array(35,0,565,530),9683=>array(35,0,565,530),9684=>array(35,0,565,530),9685=>array(35,0,565,530),9686=>array(35,0,300,530),9687=>array(300,0,565,530),9688=>array(150,0,450,600),9689=>array(0,0,600,600),9690=>array(0,300,600,600),9691=>array(0,0,600,300),9692=>array(35,266,304,530),9693=>array(300,266,569,530),9694=>array(300,0,569,264),9695=>array(35,0,304,264),9696=>array(35,266,565,530),9697=>array(35,0,565,264),9698=>array(50,0,550,500),9699=>array(50,0,550,500),9700=>array(50,0,550,500),9701=>array(50,0,550,500),9702=>array(202,141,398,337),9703=>array(50,0,550,500),9704=>array(50,0,550,500),9705=>array(50,0,550,500),9706=>array(50,0,550,500),9707=>array(50,0,550,500),9708=>array(35,0,565,454),9709=>array(35,0,565,454),9710=>array(35,0,565,454),9711=>array(0,0,600,600),9712=>array(50,0,550,500),9713=>array(50,0,550,500),9714=>array(50,0,550,500),9715=>array(50,0,550,500),9716=>array(35,0,565,530),9717=>array(35,0,565,530),9718=>array(35,0,565,530),9719=>array(35,0,565,530),9720=>array(50,0,550,500),9721=>array(50,0,550,500),9722=>array(50,0,550,500),9723=>array(50,0,550,500),9724=>array(50,0,550,500),9725=>array(125,75,475,425),9726=>array(125,75,475,425),9727=>array(50,0,550,500),9728=>array(20,20,580,580),9729=>array(47,174,547,406),9730=>array(60,0,540,512),9731=>array(36,-19,569,662),9732=>array(17,6,565,528),9733=>array(6,-8,592,552),9734=>array(6,-8,592,552),9735=>array(120,0,430,549),9736=>array(90,-20,514,555),9737=>array(35,0,565,530),9744=>array(50,0,550,500),9745=>array(50,0,550,500),9746=>array(50,0,550,500),9747=>array(113,-81,487,668),9748=>array(46,0,540,734),9754=>array(38,0,550,500),9755=>array(50,0,562,500),9756=>array(38,0,550,500),9757=>array(50,1,550,513),9758=>array(50,0,562,500),9759=>array(56,-10,556,502),9766=>array(80,-20,520,608),9767=>array(28,-124,582,623),9768=>array(80,-20,520,608),9769=>array(30,0,570,540),9774=>array(35,0,565,530),9775=>array(35,0,565,530),9776=>array(50,0,550,500),9777=>array(50,0,550,500),9778=>array(50,0,550,500),9779=>array(50,0,550,500),9780=>array(50,0,550,500),9781=>array(50,0,550,500),9782=>array(50,0,550,500),9783=>array(50,0,550,500),9784=>array(10,-26,590,554),9785=>array(35,0,565,530),9786=>array(35,0,565,530),9787=>array(35,0,565,530),9788=>array(20,20,580,580),9789=>array(135,-85,543,585),9790=>array(55,-85,463,585),9791=>array(118,-20,482,672),9792=>array(118,-20,482,563),9793=>array(118,-20,482,563),9794=>array(64,0,562,498),9795=>array(2,0,578,616),9796=>array(56,-194,520,615),9797=>array(29,-11,573,621),9798=>array(29,-15,570,615),9799=>array(86,0,474,621),9800=>array(0,-11,600,623),9801=>array(58,-18,542,616),9802=>array(0,-18,600,614),9803=>array(0,-1,599,612),9804=>array(5,-120,586,570),9805=>array(-2,-194,600,617),9806=>array(3,0,597,429),9807=>array(-2,-111,599,616),9808=>array(1,5,598,603),9809=>array(9,-11,595,605),9810=>array(6,0,593,424),9811=>array(6,0,593,625),9824=>array(72,0,529,579),9825=>array(44,-14,556,576),9826=>array(84,-11,516,580),9827=>array(14,-1,586,570),9828=>array(72,0,529,579),9829=>array(44,-15,556,575),9830=>array(81,-11,513,580),9831=>array(14,-1,586,570),9833=>array(134,0,310,576),9834=>array(134,0,498,576),9835=>array(54,-2,528,572),9836=>array(54,-2,528,572),9837=>array(109,0,441,636),9838=>array(120,-167,480,603),9839=>array(61,-170,539,604),9856=>array(74,0,526,454),9857=>array(74,0,526,454),9858=>array(74,0,526,454),9859=>array(74,0,526,454),9860=>array(74,0,526,454),9861=>array(74,0,526,454),10176=>array(5,0,595,686),10177=>array(35,0,565,454),10178=>array(5,0,595,624),10179=>array(5,0,592,568),10180=>array(5,0,592,568),10181=>array(189,-171,411,739),10182=>array(189,-171,411,739),10183=>array(45,-11,555,562),10184=>array(11,51,580,529),10185=>array(11,51,580,529),10186=>array(91,-167,508,735),10188=>array(77,86,529,652),10192=>array(35,0,565,530),10193=>array(45,14,555,587),10194=>array(16,0,584,500),10195=>array(89,-22,476,366),10196=>array(89,-22,476,366),10197=>array(19,82,557,344),10198=>array(19,82,557,344),10199=>array(7,82,585,344),10212=>array(9,1,585,480),10213=>array(9,1,585,480),10214=>array(151,-124,449,604),10215=>array(151,-124,449,604),10216=>array(125,-121,475,603),10217=>array(125,-121,475,603),10218=>array(45,-121,555,603),10219=>array(45,-121,555,603),10226=>array(7,48,591,520),10227=>array(14,48,598,520),10229=>array(10,167,590,395),10230=>array(10,167,590,395),10231=>array(10,167,590,395),10232=>array(10,147,590,415),10233=>array(10,147,590,415),10234=>array(10,147,590,415),10235=>array(10,135,590,427),10236=>array(10,135,590,427),10240=>array(100,-198,500,642),10241=>array(100,-198,500,642),10242=>array(100,-198,500,642),10243=>array(100,-198,500,642),10244=>array(100,-198,500,642),10245=>array(100,-198,500,642),10246=>array(100,-198,500,642),10247=>array(100,-198,500,642),10248=>array(100,-198,500,642),10249=>array(100,-198,500,642),10250=>array(100,-198,500,642),10251=>array(100,-198,500,642),10252=>array(100,-198,500,642),10253=>array(100,-198,500,642),10254=>array(100,-198,500,642),10255=>array(100,-198,500,642),10256=>array(100,-198,500,642),10257=>array(100,-198,500,642),10258=>array(100,-198,500,642),10259=>array(100,-198,500,642),10260=>array(100,-198,500,642),10261=>array(100,-198,500,642),10262=>array(100,-198,500,642),10263=>array(100,-198,500,642),10264=>array(100,-198,500,642),10265=>array(100,-198,500,642),10266=>array(100,-198,500,642),10267=>array(100,-198,500,642),10268=>array(100,-198,500,642),10269=>array(100,-198,500,642),10270=>array(100,-198,500,642),10271=>array(100,-198,500,642),10272=>array(100,-198,500,642),10273=>array(100,-198,500,642),10274=>array(100,-198,500,642),10275=>array(100,-198,500,642),10276=>array(100,-198,500,642),10277=>array(100,-198,500,642),10278=>array(100,-198,500,642),10279=>array(100,-198,500,642),10280=>array(100,-198,500,642),10281=>array(100,-198,500,642),10282=>array(100,-198,500,642),10283=>array(100,-198,500,642),10284=>array(100,-198,500,642),10285=>array(100,-198,500,642),10286=>array(100,-198,500,642),10287=>array(100,-198,500,642),10288=>array(100,-198,500,642),10289=>array(100,-198,500,642),10290=>array(100,-198,500,642),10291=>array(100,-198,500,642),10292=>array(100,-198,500,642),10293=>array(100,-198,500,642),10294=>array(100,-198,500,642),10295=>array(100,-198,500,642),10296=>array(100,-198,500,642),10297=>array(100,-198,500,642),10298=>array(100,-198,500,642),10299=>array(100,-198,500,642),10300=>array(100,-198,500,642),10301=>array(100,-198,500,642),10302=>array(100,-198,500,642),10303=>array(100,-198,500,642),10304=>array(100,-198,500,642),10305=>array(100,-198,500,642),10306=>array(100,-198,500,642),10307=>array(100,-198,500,642),10308=>array(100,-198,500,642),10309=>array(100,-198,500,642),10310=>array(100,-198,500,642),10311=>array(100,-198,500,642),10312=>array(100,-198,500,642),10313=>array(100,-198,500,642),10314=>array(100,-198,500,642),10315=>array(100,-198,500,642),10316=>array(100,-198,500,642),10317=>array(100,-198,500,642),10318=>array(100,-198,500,642),10319=>array(100,-198,500,642),10320=>array(100,-198,500,642),10321=>array(100,-198,500,642),10322=>array(100,-198,500,642),10323=>array(100,-198,500,642),10324=>array(100,-198,500,642),10325=>array(100,-198,500,642),10326=>array(100,-198,500,642),10327=>array(100,-198,500,642),10328=>array(100,-198,500,642),10329=>array(100,-198,500,642),10330=>array(100,-198,500,642),10331=>array(100,-198,500,642),10332=>array(100,-198,500,642),10333=>array(100,-198,500,642),10334=>array(100,-198,500,642),10335=>array(100,-198,500,642),10336=>array(100,-198,500,642),10337=>array(100,-198,500,642),10338=>array(100,-198,500,642),10339=>array(100,-198,500,642),10340=>array(100,-198,500,642),10341=>array(100,-198,500,642),10342=>array(100,-198,500,642),10343=>array(100,-198,500,642),10344=>array(100,-198,500,642),10345=>array(100,-198,500,642),10346=>array(100,-198,500,642),10347=>array(100,-198,500,642),10348=>array(100,-198,500,642),10349=>array(100,-198,500,642),10350=>array(100,-198,500,642),10351=>array(100,-198,500,642),10352=>array(100,-198,500,642),10353=>array(100,-198,500,642),10354=>array(100,-198,500,642),10355=>array(100,-198,500,642),10356=>array(100,-198,500,642),10357=>array(100,-198,500,642),10358=>array(100,-198,500,642),10359=>array(100,-198,500,642),10360=>array(100,-198,500,642),10361=>array(100,-198,500,642),10362=>array(100,-198,500,642),10363=>array(100,-198,500,642),10364=>array(100,-198,500,642),10365=>array(100,-198,500,642),10366=>array(100,-198,500,642),10367=>array(100,-198,500,642),10368=>array(100,-198,500,642),10369=>array(100,-198,500,642),10370=>array(100,-198,500,642),10371=>array(100,-198,500,642),10372=>array(100,-198,500,642),10373=>array(100,-198,500,642),10374=>array(100,-198,500,642),10375=>array(100,-198,500,642),10376=>array(100,-198,500,642),10377=>array(100,-198,500,642),10378=>array(100,-198,500,642),10379=>array(100,-198,500,642),10380=>array(100,-198,500,642),10381=>array(100,-198,500,642),10382=>array(100,-198,500,642),10383=>array(100,-198,500,642),10384=>array(100,-198,500,642),10385=>array(100,-198,500,642),10386=>array(100,-198,500,642),10387=>array(100,-198,500,642),10388=>array(100,-198,500,642),10389=>array(100,-198,500,642),10390=>array(100,-198,500,642),10391=>array(100,-198,500,642),10392=>array(100,-198,500,642),10393=>array(100,-198,500,642),10394=>array(100,-198,500,642),10395=>array(100,-198,500,642),10396=>array(100,-198,500,642),10397=>array(100,-198,500,642),10398=>array(100,-198,500,642),10399=>array(100,-198,500,642),10400=>array(100,-198,500,642),10401=>array(100,-198,500,642),10402=>array(100,-198,500,642),10403=>array(100,-198,500,642),10404=>array(100,-198,500,642),10405=>array(100,-198,500,642),10406=>array(100,-198,500,642),10407=>array(100,-198,500,642),10408=>array(100,-198,500,642),10409=>array(100,-198,500,642),10410=>array(100,-198,500,642),10411=>array(100,-198,500,642),10412=>array(100,-198,500,642),10413=>array(100,-198,500,642),10414=>array(100,-198,500,642),10415=>array(100,-198,500,642),10416=>array(100,-198,500,642),10417=>array(100,-198,500,642),10418=>array(100,-198,500,642),10419=>array(100,-198,500,642),10420=>array(100,-198,500,642),10421=>array(100,-198,500,642),10422=>array(100,-198,500,642),10423=>array(100,-198,500,642),10424=>array(100,-198,500,642),10425=>array(100,-198,500,642),10426=>array(100,-198,500,642),10427=>array(100,-198,500,642),10428=>array(100,-198,500,642),10429=>array(100,-198,500,642),10430=>array(100,-198,500,642),10431=>array(100,-198,500,642),10432=>array(100,-198,500,642),10433=>array(100,-198,500,642),10434=>array(100,-198,500,642),10435=>array(100,-198,500,642),10436=>array(100,-198,500,642),10437=>array(100,-198,500,642),10438=>array(100,-198,500,642),10439=>array(100,-198,500,642),10440=>array(100,-198,500,642),10441=>array(100,-198,500,642),10442=>array(100,-198,500,642),10443=>array(100,-198,500,642),10444=>array(100,-198,500,642),10445=>array(100,-198,500,642),10446=>array(100,-198,500,642),10447=>array(100,-198,500,642),10448=>array(100,-198,500,642),10449=>array(100,-198,500,642),10450=>array(100,-198,500,642),10451=>array(100,-198,500,642),10452=>array(100,-198,500,642),10453=>array(100,-198,500,642),10454=>array(100,-198,500,642),10455=>array(100,-198,500,642),10456=>array(100,-198,500,642),10457=>array(100,-198,500,642),10458=>array(100,-198,500,642),10459=>array(100,-198,500,642),10460=>array(100,-198,500,642),10461=>array(100,-198,500,642),10462=>array(100,-198,500,642),10463=>array(100,-198,500,642),10464=>array(100,-198,500,642),10465=>array(100,-198,500,642),10466=>array(100,-198,500,642),10467=>array(100,-198,500,642),10468=>array(100,-198,500,642),10469=>array(100,-198,500,642),10470=>array(100,-198,500,642),10471=>array(100,-198,500,642),10472=>array(100,-198,500,642),10473=>array(100,-198,500,642),10474=>array(100,-198,500,642),10475=>array(100,-198,500,642),10476=>array(100,-198,500,642),10477=>array(100,-198,500,642),10478=>array(100,-198,500,642),10479=>array(100,-198,500,642),10480=>array(100,-198,500,642),10481=>array(100,-198,500,642),10482=>array(100,-198,500,642),10483=>array(100,-198,500,642),10484=>array(100,-198,500,642),10485=>array(100,-198,500,642),10486=>array(100,-198,500,642),10487=>array(100,-198,500,642),10488=>array(100,-198,500,642),10489=>array(100,-198,500,642),10490=>array(100,-198,500,642),10491=>array(100,-198,500,642),10492=>array(100,-198,500,642),10493=>array(100,-198,500,642),10494=>array(100,-198,500,642),10495=>array(100,-198,500,642),10752=>array(0,0,600,600),10753=>array(0,0,600,600),10754=>array(0,0,600,600),10755=>array(43,-39,557,710),10756=>array(40,-41,560,693),10757=>array(40,-20,560,652),10758=>array(40,-20,560,652),10781=>array(69,30,531,369),10815=>array(51,0,543,563),11008=>array(63,43,482,463),11009=>array(63,43,483,462),11010=>array(63,44,483,463),11011=>array(64,43,483,463),11012=>array(17,147,583,417),11013=>array(42,147,558,415),11014=>array(166,23,434,539),11015=>array(166,23,434,539),11016=>array(63,43,483,464),11017=>array(62,43,483,463),11018=>array(63,43,484,463),11019=>array(63,43,483,464),11020=>array(17,147,583,417),11021=>array(165,-1,435,565),11026=>array(50,0,550,500),11027=>array(50,0,550,500),11028=>array(50,0,550,500),11029=>array(50,0,550,500),11030=>array(35,0,565,530),11031=>array(35,0,565,530),11032=>array(35,0,565,530),11033=>array(35,0,565,530),11035=>array(1,0,599,600),11036=>array(1,0,599,600),11037=>array(240,290,360,415),11038=>array(240,290,360,415),11039=>array(6,1,594,560),11040=>array(6,1,594,560),11041=>array(43,-13,557,581),11042=>array(35,-3,549,591),11043=>array(-5,37,589,551),11044=>array(0,0,600,600),11045=>array(89,0,513,424),11046=>array(89,0,513,424),11047=>array(120,-11,480,460),11048=>array(120,-11,480,460),11049=>array(172,76,430,333),11050=>array(214,81,386,322),11051=>array(214,78,386,319),11091=>array(21,-14,580,574),11092=>array(21,-14,580,574),11798=>array(78,38,528,673),11799=>array(99,34,501,463),11800=>array(123,-18,476,574),11802=>array(72,258,528,541),11803=>array(92,212,508,565),11806=>array(92,212,508,469),11807=>array(92,79,508,348),11816=>array(164,-124,459,604),11817=>array(167,-124,462,604),11818=>array(70,-2,520,502),11819=>array(10,46,585,438),11820=>array(15,47,590,439),11821=>array(50,28,550,513),11822=>array(124,-15,477,577),11824=>array(202,141,398,337),42888=>array(155,-95,445,54),42889=>array(226,-15,374,417),42890=>array(175,190,425,375),42891=>array(260,209,339,643),42892=>array(260,335,339,643),43264=>array(83,0,517,450),43265=>array(83,0,517,450),43266=>array(83,0,517,457),43267=>array(83,0,517,450),43268=>array(83,-200,517,457),43269=>array(83,0,517,450),43270=>array(83,-12,517,457),43271=>array(83,0,517,669),43272=>array(83,0,517,457),43273=>array(83,0,517,669),43274=>array(83,0,517,456),43275=>array(83,0,517,450),43276=>array(83,0,517,457),43277=>array(83,0,517,450),43278=>array(85,0,518,450),43279=>array(41,0,517,450),43280=>array(83,-200,517,464),43281=>array(83,-200,517,450),43282=>array(83,-13,517,458),43283=>array(83,0,517,669),43284=>array(83,-200,517,450),43285=>array(83,0,517,450),43286=>array(83,0,559,662),43287=>array(83,0,517,450),43288=>array(83,0,517,450),43289=>array(83,-12,517,457),43290=>array(83,-200,517,457),43291=>array(83,0,517,450),43292=>array(83,-200,517,448),43293=>array(83,0,517,669),43294=>array(83,-200,517,450),43295=>array(83,-200,517,457),43296=>array(83,0,517,450),43297=>array(83,0,517,662),43298=>array(83,0,517,450),43299=>array(83,0,517,450),43300=>array(83,0,517,450),43301=>array(83,0,517,450),43302=>array(-345,510,-255,580),43303=>array(-477,481,-124,621),43304=>array(-473,478,-127,621),43305=>array(-441,490,-159,621),43306=>array(-441,490,-159,621),43307=>array(-345,-111,-255,-41),43308=>array(-517,-200,-83,41),43309=>array(-517,-200,-83,41),43310=>array(83,0,517,138),43311=>array(280,-7,321,457),64256=>array(41,0,536,604),64257=>array(77,0,503,604),64258=>array(71,0,521,604),64259=>array(19,0,583,604),64260=>array(10,0,590,604),64261=>array(66,-16,570,604),64285=>array(170,115,329,480),64286=>array(186,540,413,628),64287=>array(90,113,450,480),64288=>array(60,0,543,480),64289=>array(20,0,580,480),64290=>array(20,0,580,480),64291=>array(20,0,580,480),64292=>array(20,0,580,480),64293=>array(20,0,580,617),64294=>array(20,0,580,480),64295=>array(20,0,580,480),64296=>array(20,0,580,480),64297=>array(72,261,528,530),64298=>array(51,0,578,599),64299=>array(49,0,570,599),64300=>array(51,0,578,599),64301=>array(49,0,570,599),64302=>array(60,-101,540,480),64303=>array(60,-200,540,480),64304=>array(60,-101,540,480),64305=>array(60,0,560,480),64306=>array(133,0,467,480),64307=>array(60,0,540,480),64308=>array(60,0,540,480),64309=>array(170,0,320,480),64310=>array(133,0,467,480),64312=>array(22,0,535,480),64313=>array(163,219,320,480),64314=>array(60,-200,499,480),64315=>array(60,0,499,480),64316=>array(60,0,540,617),64318=>array(60,0,540,480),64320=>array(133,0,430,480),64321=>array(60,0,540,480),64323=>array(60,-200,540,480),64324=>array(60,0,540,480),64326=>array(50,0,530,480),64327=>array(49,-200,529,480),64328=>array(60,0,540,480),64329=>array(51,0,570,480),64330=>array(23,0,540,480),64331=>array(170,0,320,599),64332=>array(60,0,560,581),64333=>array(60,0,499,581),64334=>array(60,0,540,581),64335=>array(60,0,540,617),64336=>array(173,-20,402,748),64337=>array(173,0,600,748),64338=>array(40,-200,560,217),64339=>array(40,-200,600,217),64340=>array(0,-200,390,217),64341=>array(0,-200,600,217),64342=>array(40,-200,560,217),64343=>array(40,-200,600,217),64344=>array(0,-200,430,217),64345=>array(0,-200,600,217),64346=>array(40,-200,560,217),64347=>array(40,-200,600,217),64348=>array(0,-200,412,217),64349=>array(0,-200,600,217),64350=>array(40,0,560,386),64351=>array(40,0,600,386),64352=>array(0,0,350,476),64353=>array(0,0,600,476),64354=>array(40,0,560,387),64355=>array(40,0,600,387),64356=>array(0,0,412,437),64357=>array(0,0,600,437),64358=>array(40,0,560,437),64359=>array(40,0,600,437),64360=>array(0,0,408,502),64361=>array(0,0,600,502),64362=>array(40,0,580,486),64363=>array(40,0,600,486),64364=>array(0,0,430,486),64365=>array(0,0,600,486),64366=>array(40,0,580,497),64367=>array(40,0,600,497),64368=>array(0,0,402,497),64369=>array(0,0,600,497),64370=>array(61,-200,537,310),64371=>array(61,-200,600,310),64372=>array(0,-200,510,219),64373=>array(0,-200,600,219),64374=>array(61,-200,537,310),64375=>array(61,-200,600,310),64376=>array(0,-154,510,219),64377=>array(0,-154,600,219),64378=>array(61,-200,537,310),64379=>array(61,-200,600,310),64380=>array(0,-200,510,219),64381=>array(0,-200,600,219),64382=>array(61,-200,537,310),64383=>array(61,-200,600,310),64384=>array(0,-200,510,219),64385=>array(0,-200,600,219),64386=>array(133,-154,430,260),64387=>array(133,-154,600,260),64388=>array(133,0,430,466),64389=>array(133,0,600,466),64390=>array(133,0,430,496),64391=>array(133,0,600,496),64392=>array(133,0,430,560),64393=>array(133,0,600,560),64394=>array(97,-199,430,476),64395=>array(97,-199,600,466),64396=>array(97,-199,408,520),64397=>array(97,-199,600,520),64398=>array(40,0,560,582),64399=>array(40,0,600,582),64400=>array(0,0,510,582),64401=>array(0,0,600,582),64402=>array(40,0,560,582),64403=>array(40,0,600,582),64404=>array(0,0,510,582),64405=>array(0,0,600,582),64406=>array(40,-200,560,582),64407=>array(40,-200,600,582),64408=>array(0,-200,510,582),64409=>array(0,-200,600,582),64410=>array(30,0,560,636),64411=>array(30,0,600,636),64412=>array(0,0,510,636),64413=>array(0,0,600,636),64414=>array(101,-178,474,250),64415=>array(101,-178,600,250),64416=>array(101,-178,474,534),64417=>array(101,-178,600,534),64418=>array(0,0,408,534),64419=>array(0,0,600,534),64420=>array(202,-16,398,435),64421=>array(202,-16,600,435),64422=>array(202,-16,398,220),64423=>array(277,-35,600,55),64424=>array(0,-154,373,91),64425=>array(0,-154,600,91),64426=>array(50,-16,408,220),64427=>array(50,-16,600,220),64428=>array(0,-16,408,220),64429=>array(0,-16,600,220),64430=>array(40,0,600,293),64431=>array(49,0,600,260),64432=>array(40,0,600,435),64433=>array(49,0,600,435),64434=>array(250,416,350,516),64435=>array(250,-158,350,-58),64436=>array(180,416,420,516),64437=>array(180,-154,420,-54),64438=>array(170,416,430,586),64439=>array(170,-200,430,-30),64440=>array(170,416,430,586),64441=>array(170,-200,430,-30),64442=>array(188,419,412,587),64443=>array(188,-200,412,-32),64444=>array(85,-200,245,-55),64445=>array(220,416,390,596),64446=>array(220,-200,390,-20),64448=>array(193,584,408,800),64449=>array(204,-200,419,-24),64467=>array(40,0,560,586),64468=>array(40,0,600,586),64469=>array(0,0,510,656),64470=>array(0,0,600,656),64471=>array(101,-200,404,435),64472=>array(101,-200,600,435),64473=>array(101,-200,404,438),64474=>array(101,-200,600,438),64475=>array(101,-200,404,415),64476=>array(101,-200,600,415),64477=>array(101,-200,529,435),64478=>array(101,-200,430,416),64479=>array(101,-200,600,416),64480=>array(101,-200,404,170),64481=>array(101,-200,600,170),64482=>array(101,-200,404,434),64483=>array(101,-200,600,434),64484=>array(40,-200,560,221),64485=>array(60,-200,627,100),64486=>array(0,-200,390,217),64487=>array(0,-200,600,217),64488=>array(0,0,321,217),64489=>array(0,0,600,217),64508=>array(100,-144,515,221),64509=>array(60,-184,627,100),64510=>array(0,-154,420,217),64511=>array(0,-154,600,217),65136=>array(187,605,412,799),65137=>array(0,0,600,799),65138=>array(167,583,430,800),65139=>array(294,0,600,85),65140=>array(187,-200,412,-6),65142=>array(187,695,412,800),65143=>array(0,0,600,800),65144=>array(221,588,365,800),65145=>array(0,0,600,800),65146=>array(187,-200,412,-95),65147=>array(0,-200,600,40),65148=>array(206,601,394,709),65149=>array(0,0,600,709),65150=>array(236,657,362,775),65151=>array(0,0,600,775),65152=>array(205,-81,395,167),65153=>array(193,-20,427,714),65154=>array(193,0,600,714),65155=>array(211,-20,349,779),65156=>array(211,0,600,779),65157=>array(101,-200,404,399),65158=>array(101,-200,600,399),65159=>array(261,-200,399,583),65160=>array(241,-200,600,581),65161=>array(100,-144,515,399),65162=>array(60,-144,600,399),65163=>array(0,0,349,419),65164=>array(0,0,600,419),65165=>array(280,-20,320,583),65166=>array(280,0,600,581),65167=>array(40,-158,560,217),65168=>array(40,-158,600,217),65169=>array(0,-158,321,217),65170=>array(0,-158,600,217),65171=>array(180,-16,420,416),65172=>array(180,-16,600,416),65173=>array(40,0,560,336),65174=>array(40,0,600,336),65175=>array(0,0,420,416),65176=>array(0,0,600,416),65177=>array(40,0,560,396),65178=>array(40,0,600,396),65179=>array(0,0,430,426),65180=>array(0,0,600,426),65181=>array(61,-200,537,310),65182=>array(61,-200,600,310),65183=>array(0,-100,510,219),65184=>array(0,-100,600,219),65185=>array(61,-200,537,310),65186=>array(61,-200,600,310),65187=>array(0,0,510,219),65188=>array(0,0,600,219),65189=>array(61,-200,537,486),65190=>array(61,-200,600,486),65191=>array(0,0,510,416),65192=>array(0,0,600,416),65193=>array(133,0,430,260),65194=>array(133,0,600,260),65195=>array(133,0,430,416),65196=>array(133,0,600,416),65197=>array(97,-199,400,224),65198=>array(97,-199,600,224),65199=>array(97,-199,400,416),65200=>array(97,-199,600,416),65201=>array(0,-124,600,184),65202=>array(0,-124,600,184),65203=>array(0,0,530,184),65204=>array(0,0,600,184),65205=>array(0,-124,600,416),65206=>array(0,-124,600,416),65207=>array(0,0,530,416),65208=>array(0,0,600,416),65209=>array(0,-124,600,213),65210=>array(0,-124,600,213),65211=>array(0,-16,480,213),65212=>array(0,-16,600,213),65213=>array(0,-124,600,416),65214=>array(0,-124,600,416),65215=>array(0,-16,480,416),65216=>array(0,-16,600,416),65217=>array(92,-16,501,564),65218=>array(92,-16,600,564),65219=>array(0,-16,501,564),65220=>array(0,-16,600,564),65221=>array(92,-16,501,564),65222=>array(92,-16,600,564),65223=>array(0,-16,501,564),65224=>array(0,-16,600,564),65225=>array(132,-200,520,247),65226=>array(132,-200,520,247),65227=>array(0,0,424,225),65228=>array(0,0,600,251),65229=>array(132,-200,520,416),65230=>array(132,-200,520,416),65231=>array(0,0,424,416),65232=>array(0,0,600,416),65233=>array(40,0,560,466),65234=>array(40,0,600,466),65235=>array(0,0,393,416),65236=>array(0,0,600,416),65237=>array(101,-184,500,336),65238=>array(101,-184,600,336),65239=>array(0,0,420,436),65240=>array(0,0,600,436),65241=>array(0,0,520,571),65242=>array(40,0,600,571),65243=>array(0,0,510,582),65244=>array(0,0,600,582),65245=>array(80,-177,527,564),65246=>array(80,-177,600,564),65247=>array(0,0,395,564),65248=>array(0,0,600,581),65249=>array(150,-200,470,330),65250=>array(181,-200,600,194),65251=>array(0,-11,393,170),65252=>array(0,-11,600,170),65253=>array(101,-178,474,416),65254=>array(101,-178,600,366),65255=>array(0,0,350,416),65256=>array(0,0,600,416),65257=>array(202,-16,398,220),65258=>array(202,-16,600,234),65259=>array(0,-16,408,220),65260=>array(0,-200,600,240),65261=>array(101,-200,404,170),65262=>array(101,-200,600,170),65263=>array(100,-144,515,221),65264=>array(60,-144,600,181),65265=>array(50,-200,600,221),65266=>array(60,-200,600,181),65267=>array(0,-154,420,217),65268=>array(0,-154,600,217),65269=>array(64,0,500,702),65270=>array(64,0,560,702),65271=>array(94,0,500,779),65272=>array(73,0,560,779),65273=>array(100,-200,500,583),65274=>array(73,-200,560,581),65275=>array(100,0,500,583),65276=>array(73,0,560,581),65532=>array(30,0,572,630),65533=>array(-24,-86,623,798),65535=>array(40,-80,560,643)); +$cw=array(0=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600,606=>600,607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600,676=>600,677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600,686=>600,687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>600,769=>600,770=>600,771=>600,772=>600,773=>600,774=>600,775=>600,776=>600,777=>600,778=>600,779=>600,780=>600,781=>600,782=>600,783=>600,784=>600,785=>600,786=>600,787=>600,788=>600,789=>600,790=>600,791=>600,792=>600,793=>600,794=>600,795=>600,796=>600,797=>600,798=>600,799=>600,800=>600,801=>600,802=>600,803=>600,804=>600,805=>600,806=>600,807=>600,808=>600,809=>600,810=>600,811=>600,812=>600,813=>600,814=>600,815=>600,816=>600,817=>600,818=>600,819=>600,820=>600,821=>600,822=>600,823=>600,824=>600,825=>600,826=>600,827=>600,828=>600,829=>600,830=>600,831=>600,832=>600,833=>600,834=>600,835=>600,836=>600,837=>600,838=>600,839=>600,840=>600,841=>600,842=>600,843=>600,844=>600,845=>600,846=>600,847=>600,848=>600,849=>600,850=>600,851=>600,852=>600,853=>600,854=>600,855=>600,856=>600,857=>600,858=>600,859=>600,860=>600,861=>600,862=>600,863=>600,864=>600,865=>600,866=>600,867=>600,868=>600,869=>600,870=>600,871=>600,872=>600,873=>600,874=>600,875=>600,876=>600,877=>600,878=>600,879=>600,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,989=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1125=>600,1126=>600,1127=>600,1128=>600,1129=>600,1130=>600,1131=>600,1132=>600,1133=>600,1134=>600,1135=>600,1136=>600,1137=>600,1138=>600,1139=>600,1140=>600,1141=>600,1142=>600,1143=>600,1144=>600,1145=>600,1146=>600,1147=>600,1148=>600,1149=>600,1150=>600,1151=>600,1155=>600,1156=>600,1157=>600,1158=>600,1159=>600,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1274=>600,1275=>600,1276=>600,1277=>600,1278=>600,1279=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1316=>600,1317=>600,1318=>600,1319=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600,1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600,1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1423=>600,1456=>600,1457=>600,1458=>600,1459=>600,1460=>600,1461=>600,1462=>600,1463=>600,1464=>600,1465=>600,1466=>600,1467=>600,1468=>600,1469=>600,1470=>600,1471=>600,1472=>600,1473=>600,1474=>600,1475=>600,1476=>600,1477=>600,1478=>600,1479=>600,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,1542=>600,1543=>600,1544=>600,1545=>600,1546=>600,1547=>600,1548=>600,1549=>600,1550=>600,1551=>600,1563=>600,1566=>600,1567=>600,1568=>600,1569=>600,1570=>600,1571=>600,1572=>600,1573=>600,1574=>600,1575=>600,1576=>600,1577=>600,1578=>600,1579=>600,1580=>600,1581=>600,1582=>600,1583=>600,1584=>600,1585=>600,1586=>600,1587=>600,1588=>600,1589=>600,1590=>600,1591=>600,1592=>600,1593=>600,1594=>600,1595=>600,1596=>600,1597=>600,1598=>600,1599=>600,1600=>600,1601=>600,1602=>600,1603=>600,1604=>600,1605=>600,1606=>600,1607=>600,1608=>600,1609=>600,1610=>600,1611=>600,1612=>600,1613=>600,1614=>600,1615=>600,1616=>600,1617=>600,1618=>600,1619=>600,1620=>600,1621=>600,1622=>600,1623=>600,1625=>600,1626=>600,1627=>600,1628=>600,1629=>600,1630=>600,1631=>600,1632=>600,1633=>600,1634=>600,1635=>600,1636=>600,1637=>600,1638=>600,1639=>600,1640=>600,1641=>600,1642=>600,1643=>600,1644=>600,1645=>600,1646=>600,1647=>600,1648=>600,1649=>600,1650=>600,1651=>600,1652=>600,1653=>600,1654=>600,1655=>600,1656=>600,1657=>600,1658=>600,1659=>600,1660=>600,1661=>600,1662=>600,1663=>600,1664=>600,1665=>600,1666=>600,1667=>600,1668=>600,1669=>600,1670=>600,1671=>600,1672=>600,1673=>600,1674=>600,1675=>600,1676=>600,1677=>600,1678=>600,1679=>600,1680=>600,1681=>600,1682=>600,1683=>600,1684=>600,1685=>600,1686=>600,1687=>600,1688=>600,1689=>600,1690=>600,1691=>600,1692=>600,1693=>600,1694=>600,1695=>600,1696=>600,1697=>600,1698=>600,1699=>600,1700=>600,1701=>600,1702=>600,1703=>600,1704=>600,1705=>600,1706=>600,1707=>600,1708=>600,1709=>600,1710=>600,1711=>600,1712=>600,1713=>600,1714=>600,1715=>600,1716=>600,1717=>600,1718=>600,1719=>600,1720=>600,1721=>600,1722=>600,1723=>600,1724=>600,1725=>600,1726=>600,1727=>600,1728=>600,1729=>600,1730=>600,1731=>600,1732=>600,1733=>600,1734=>600,1735=>600,1736=>600,1737=>600,1738=>600,1739=>600,1740=>600,1741=>600,1742=>600,1743=>600,1744=>600,1745=>600,1746=>600,1747=>600,1748=>600,1749=>600,1774=>600,1775=>600,1776=>600,1777=>600,1778=>600,1779=>600,1780=>600,1781=>600,1782=>600,1783=>600,1784=>600,1785=>600,1786=>600,1787=>600,1788=>600,1789=>600,1790=>600,1791=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,5024=>600,5025=>600,5026=>600,5027=>600,5028=>600,5029=>600,5030=>600,5031=>600,5032=>600,5033=>600,5034=>600,5035=>600,5036=>600,5037=>600,5038=>600,5039=>600,5040=>600,5041=>600,5042=>600,5043=>600,5044=>600,5045=>600,5046=>600,5047=>600,5048=>600,5049=>600,5050=>600,5051=>600,5052=>600,5053=>600,5054=>600,5055=>600,5056=>600,5057=>600,5058=>600,5059=>600,5060=>600,5061=>600,5062=>600,5063=>600,5064=>600,5065=>600,5066=>600,5067=>600,5068=>600,5069=>600,5070=>600,5071=>600,5072=>600,5073=>600,5074=>600,5075=>600,5076=>600,5077=>600,5078=>600,5079=>600,5080=>600,5081=>600,5082=>600,5083=>600,5084=>600,5085=>600,5086=>600,5087=>600,5088=>600,5089=>600,5090=>600,5091=>600,5092=>600,5093=>600,5094=>600,5095=>600,5096=>600,5097=>600,5098=>600,5099=>600,5100=>600,5101=>600,5102=>600,5103=>600,5104=>600,5105=>600,5106=>600,5107=>600,5108=>600,5792=>600,5793=>600,5794=>600,5795=>600,5796=>600,5797=>600,5798=>600,5799=>600,5800=>600,5801=>600,5802=>600,5803=>600,5804=>600,5805=>600,5806=>600,5807=>600,5808=>600,5809=>600,5810=>600,5811=>600,5812=>600,5813=>600,5814=>600,5815=>600,5816=>600,5817=>600,5818=>600,5819=>600,5820=>600,5821=>600,5822=>600,5823=>600,5824=>600,5825=>600,5826=>600,5827=>600,5828=>600,5829=>600,5830=>600,5831=>600,5832=>600,5833=>600,5834=>600,5835=>600,5836=>600,5837=>600,5838=>600,5839=>600,5840=>600,5841=>600,5842=>600,5843=>600,5844=>600,5845=>600,5846=>600,5847=>600,5848=>600,5849=>600,5850=>600,5851=>600,5852=>600,5853=>600,5854=>600,5855=>600,5856=>600,5857=>600,5858=>600,5859=>600,5860=>600,5861=>600,5862=>600,5863=>600,5864=>600,5865=>600,5866=>600,5867=>600,5868=>600,5869=>600,5870=>600,5871=>600,5872=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600,8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>600,8205=>600,8206=>600,8207=>600,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8353=>600,8354=>600,8355=>600,8356=>600,8357=>600,8358=>600,8359=>600,8360=>600,8361=>600,8362=>600,8363=>600,8364=>600,8365=>600,8366=>600,8367=>600,8368=>600,8369=>600,8370=>600,8371=>600,8372=>600,8373=>600,8376=>600,8377=>600,8400=>600,8401=>600,8402=>600,8406=>600,8407=>600,8411=>600,8412=>600,8413=>600,8414=>600,8415=>600,8416=>600,8417=>600,8418=>600,8419=>600,8421=>600,8422=>600,8424=>600,8426=>600,8427=>600,8428=>600,8429=>600,8430=>600,8431=>600,8448=>600,8449=>600,8450=>600,8451=>600,8452=>600,8453=>600,8454=>600,8455=>600,8456=>600,8457=>600,8461=>600,8462=>600,8463=>600,8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,8474=>600,8476=>600,8477=>600,8478=>600,8480=>600,8481=>600,8482=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8602=>600,8603=>600,8604=>600,8605=>600,8606=>600,8607=>600,8608=>600,8609=>600,8610=>600,8611=>600,8612=>600,8613=>600,8614=>600,8615=>600,8616=>600,8617=>600,8618=>600,8619=>600,8620=>600,8621=>600,8622=>600,8623=>600,8624=>600,8625=>600,8626=>600,8627=>600,8628=>600,8629=>600,8630=>600,8631=>600,8632=>600,8633=>600,8634=>600,8635=>600,8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8653=>600,8654=>600,8655=>600,8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8668=>600,8669=>600,8678=>600,8679=>600,8680=>600,8681=>600,8691=>600,8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8735=>600,8736=>600,8737=>600,8738=>600,8739=>600,8740=>600,8741=>600,8742=>600,8743=>600,8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,8749=>600,8750=>600,8751=>600,8752=>600,8753=>600,8754=>600,8755=>600,8756=>600,8757=>600,8758=>600,8759=>600,8760=>600,8761=>600,8762=>600,8763=>600,8764=>600,8765=>600,8766=>600,8767=>600,8768=>600,8769=>600,8770=>600,8771=>600,8772=>600,8773=>600,8774=>600,8775=>600,8776=>600,8777=>600,8778=>600,8779=>600,8780=>600,8781=>600,8782=>600,8783=>600,8784=>600,8785=>600,8786=>600,8787=>600,8788=>600,8789=>600,8790=>600,8791=>600,8792=>600,8793=>600,8794=>600,8795=>600,8796=>600,8797=>600,8798=>600,8799=>600,8800=>600,8801=>600,8802=>600,8803=>600,8804=>600,8805=>600,8806=>600,8807=>600,8808=>600,8809=>600,8810=>600,8811=>600,8812=>600,8813=>600,8814=>600,8815=>600,8816=>600,8817=>600,8818=>600,8819=>600,8820=>600,8821=>600,8822=>600,8823=>600,8824=>600,8825=>600,8826=>600,8827=>600,8828=>600,8829=>600,8830=>600,8831=>600,8832=>600,8833=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,8840=>600,8841=>600,8842=>600,8843=>600,8844=>600,8845=>600,8846=>600,8847=>600,8848=>600,8849=>600,8850=>600,8851=>600,8852=>600,8853=>600,8854=>600,8855=>600,8856=>600,8857=>600,8858=>600,8859=>600,8860=>600,8861=>600,8862=>600,8863=>600,8864=>600,8865=>600,8866=>600,8867=>600,8868=>600,8869=>600,8870=>600,8871=>600,8872=>600,8873=>600,8874=>600,8875=>600,8876=>600,8877=>600,8878=>600,8879=>600,8880=>600,8881=>600,8882=>600,8883=>600,8884=>600,8885=>600,8886=>600,8887=>600,8888=>600,8889=>600,8890=>600,8891=>600,8892=>600,8893=>600,8894=>600,8895=>600,8896=>600,8897=>600,8898=>600,8899=>600,8900=>600,8901=>600,8902=>600,8903=>600,8904=>600,8905=>600,8906=>600,8907=>600,8908=>600,8909=>600,8910=>600,8911=>600,8912=>600,8913=>600,8914=>600,8915=>600,8916=>600,8917=>600,8918=>600,8919=>600,8920=>600,8921=>600,8922=>600,8923=>600,8924=>600,8925=>600,8926=>600,8927=>600,8928=>600,8929=>600,8930=>600,8931=>600,8932=>600,8933=>600,8934=>600,8935=>600,8936=>600,8937=>600,8938=>600,8939=>600,8940=>600,8941=>600,8942=>600,8943=>600,8944=>600,8945=>600,8960=>600,8962=>600,8963=>600,8964=>600,8965=>600,8966=>600,8968=>600,8969=>600,8970=>600,8971=>600,8972=>600,8973=>600,8974=>600,8975=>600,8976=>600,8978=>600,8980=>600,8981=>600,8984=>600,8985=>600,8988=>600,8989=>600,8990=>600,8991=>600,8992=>600,8993=>600,8994=>600,8995=>600,8996=>600,8997=>600,8998=>600,8999=>600,9001=>600,9002=>600,9003=>600,9004=>600,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9084=>600,9085=>600,9086=>600,9087=>600,9088=>600,9089=>600,9090=>600,9091=>600,9092=>600,9093=>600,9094=>600,9095=>600,9096=>600,9097=>600,9098=>600,9099=>600,9100=>600,9101=>600,9102=>600,9103=>600,9104=>600,9105=>600,9106=>600,9107=>600,9108=>600,9109=>600,9110=>600,9111=>600,9112=>600,9113=>600,9114=>600,9115=>600,9116=>600,9117=>600,9118=>600,9119=>600,9120=>600,9121=>600,9122=>600,9123=>600,9124=>600,9125=>600,9126=>600,9127=>600,9128=>600,9129=>600,9130=>600,9131=>600,9132=>600,9133=>600,9134=>600,9135=>600,9136=>600,9137=>600,9138=>600,9139=>600,9140=>600,9141=>600,9142=>600,9143=>600,9146=>600,9147=>600,9148=>600,9149=>600,9150=>600,9151=>600,9152=>600,9153=>600,9154=>600,9155=>600,9156=>600,9157=>600,9158=>600,9159=>600,9160=>600,9161=>600,9162=>600,9163=>600,9164=>600,9165=>600,9166=>600,9167=>600,9178=>600,9179=>600,9182=>600,9183=>600,9186=>600,9187=>600,9188=>600,9189=>600,9190=>600,9216=>600,9217=>600,9218=>600,9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600,9251=>600,9252=>600,9253=>600,9254=>600,9280=>600,9281=>600,9282=>600,9283=>600,9284=>600,9285=>600,9286=>600,9287=>600,9288=>600,9289=>600,9290=>600,9312=>600,9313=>600,9314=>600,9315=>600,9316=>600,9317=>600,9318=>600,9319=>600,9320=>600,9321=>600,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9622=>600,9623=>600,9624=>600,9625=>600,9626=>600,9627=>600,9628=>600,9629=>600,9630=>600,9631=>600,9632=>600,9633=>600,9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9720=>600,9721=>600,9722=>600,9723=>600,9724=>600,9725=>600,9726=>600,9727=>600,9728=>600,9729=>600,9730=>600,9731=>600,9732=>600,9733=>600,9734=>600,9735=>600,9736=>600,9737=>600,9744=>600,9745=>600,9746=>600,9747=>600,9748=>600,9754=>600,9755=>600,9756=>600,9757=>600,9758=>600,9759=>600,9766=>600,9767=>600,9768=>600,9769=>600,9774=>600,9775=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9784=>600,9785=>600,9786=>600,9787=>600,9788=>600,9789=>600,9790=>600,9791=>600,9792=>600,9793=>600,9794=>600,9795=>600,9796=>600,9797=>600,9798=>600,9799=>600,9800=>600,9801=>600,9802=>600,9803=>600,9804=>600,9805=>600,9806=>600,9807=>600,9808=>600,9809=>600,9810=>600,9811=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,9856=>600,9857=>600,9858=>600,9859=>600,9860=>600,9861=>600,10176=>600,10177=>600,10178=>600,10179=>600,10180=>600,10181=>600,10182=>600,10183=>600,10184=>600,10185=>600,10186=>600,10188=>600,10192=>600,10193=>600,10194=>600,10195=>600,10196=>600,10197=>600,10198=>600,10199=>600,10212=>600,10213=>600,10214=>600,10215=>600,10216=>600,10217=>600,10218=>600,10219=>600,10226=>600,10227=>600,10229=>600,10230=>600,10231=>600,10232=>600,10233=>600,10234=>600,10235=>600,10236=>600,10240=>600,10241=>600,10242=>600,10243=>600,10244=>600,10245=>600,10246=>600,10247=>600,10248=>600,10249=>600,10250=>600,10251=>600,10252=>600,10253=>600,10254=>600,10255=>600,10256=>600,10257=>600,10258=>600,10259=>600,10260=>600,10261=>600,10262=>600,10263=>600,10264=>600,10265=>600,10266=>600,10267=>600,10268=>600,10269=>600,10270=>600,10271=>600,10272=>600,10273=>600,10274=>600,10275=>600,10276=>600,10277=>600,10278=>600,10279=>600,10280=>600,10281=>600,10282=>600,10283=>600,10284=>600,10285=>600,10286=>600,10287=>600,10288=>600,10289=>600,10290=>600,10291=>600,10292=>600,10293=>600,10294=>600,10295=>600,10296=>600,10297=>600,10298=>600,10299=>600,10300=>600,10301=>600,10302=>600,10303=>600,10304=>600,10305=>600,10306=>600,10307=>600,10308=>600,10309=>600,10310=>600,10311=>600,10312=>600,10313=>600,10314=>600,10315=>600,10316=>600,10317=>600,10318=>600,10319=>600,10320=>600,10321=>600,10322=>600,10323=>600,10324=>600,10325=>600,10326=>600,10327=>600,10328=>600,10329=>600,10330=>600,10331=>600,10332=>600,10333=>600,10334=>600,10335=>600,10336=>600,10337=>600,10338=>600,10339=>600,10340=>600,10341=>600,10342=>600,10343=>600,10344=>600,10345=>600,10346=>600,10347=>600,10348=>600,10349=>600,10350=>600,10351=>600,10352=>600,10353=>600,10354=>600,10355=>600,10356=>600,10357=>600,10358=>600,10359=>600,10360=>600,10361=>600,10362=>600,10363=>600,10364=>600,10365=>600,10366=>600,10367=>600,10368=>600,10369=>600,10370=>600,10371=>600,10372=>600,10373=>600,10374=>600,10375=>600,10376=>600,10377=>600,10378=>600,10379=>600,10380=>600,10381=>600,10382=>600,10383=>600,10384=>600,10385=>600,10386=>600,10387=>600,10388=>600,10389=>600,10390=>600,10391=>600,10392=>600,10393=>600,10394=>600,10395=>600,10396=>600,10397=>600,10398=>600,10399=>600,10400=>600,10401=>600,10402=>600,10403=>600,10404=>600,10405=>600,10406=>600,10407=>600,10408=>600,10409=>600,10410=>600,10411=>600,10412=>600,10413=>600,10414=>600,10415=>600,10416=>600,10417=>600,10418=>600,10419=>600,10420=>600,10421=>600,10422=>600,10423=>600,10424=>600,10425=>600,10426=>600,10427=>600,10428=>600,10429=>600,10430=>600,10431=>600,10432=>600,10433=>600,10434=>600,10435=>600,10436=>600,10437=>600,10438=>600,10439=>600,10440=>600,10441=>600,10442=>600,10443=>600,10444=>600,10445=>600,10446=>600,10447=>600,10448=>600,10449=>600,10450=>600,10451=>600,10452=>600,10453=>600,10454=>600,10455=>600,10456=>600,10457=>600,10458=>600,10459=>600,10460=>600,10461=>600,10462=>600,10463=>600,10464=>600,10465=>600,10466=>600,10467=>600,10468=>600,10469=>600,10470=>600,10471=>600,10472=>600,10473=>600,10474=>600,10475=>600,10476=>600,10477=>600,10478=>600,10479=>600,10480=>600,10481=>600,10482=>600,10483=>600,10484=>600,10485=>600,10486=>600,10487=>600,10488=>600,10489=>600,10490=>600,10491=>600,10492=>600,10493=>600,10494=>600,10495=>600,10752=>600,10753=>600,10754=>600,10755=>600,10756=>600,10757=>600,10758=>600,10781=>600,10815=>600,11008=>600,11009=>600,11010=>600,11011=>600,11012=>600,11013=>600,11014=>600,11015=>600,11016=>600,11017=>600,11018=>600,11019=>600,11020=>600,11021=>600,11026=>600,11027=>600,11028=>600,11029=>600,11030=>600,11031=>600,11032=>600,11033=>600,11035=>600,11036=>600,11037=>600,11038=>600,11039=>600,11040=>600,11041=>600,11042=>600,11043=>600,11044=>600,11045=>600,11046=>600,11047=>600,11048=>600,11049=>600,11050=>600,11051=>600,11091=>600,11092=>600,11798=>600,11799=>600,11800=>600,11802=>600,11803=>600,11806=>600,11807=>600,11816=>600,11817=>600,11818=>600,11819=>600,11820=>600,11821=>600,11822=>600,11824=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,43264=>600,43265=>600,43266=>600,43267=>600,43268=>600,43269=>600,43270=>600,43271=>600,43272=>600,43273=>600,43274=>600,43275=>600,43276=>600,43277=>600,43278=>600,43279=>600,43280=>600,43281=>600,43282=>600,43283=>600,43284=>600,43285=>600,43286=>600,43287=>600,43288=>600,43289=>600,43290=>600,43291=>600,43292=>600,43293=>600,43294=>600,43295=>600,43296=>600,43297=>600,43298=>600,43299=>600,43300=>600,43301=>600,43302=>600,43303=>600,43304=>600,43305=>600,43306=>600,43307=>600,43308=>600,43309=>600,43310=>600,43311=>600,64256=>600,64257=>600,64258=>600,64259=>600,64260=>600,64261=>600,64285=>600,64286=>600,64287=>600,64288=>600,64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,64336=>600,64337=>600,64338=>600,64339=>600,64340=>600,64341=>600,64342=>600,64343=>600,64344=>600,64345=>600,64346=>600,64347=>600,64348=>600,64349=>600,64350=>600,64351=>600,64352=>600,64353=>600,64354=>600,64355=>600,64356=>600,64357=>600,64358=>600,64359=>600,64360=>600,64361=>600,64362=>600,64363=>600,64364=>600,64365=>600,64366=>600,64367=>600,64368=>600,64369=>600,64370=>600,64371=>600,64372=>600,64373=>600,64374=>600,64375=>600,64376=>600,64377=>600,64378=>600,64379=>600,64380=>600,64381=>600,64382=>600,64383=>600,64384=>600,64385=>600,64386=>600,64387=>600,64388=>600,64389=>600,64390=>600,64391=>600,64392=>600,64393=>600,64394=>600,64395=>600,64396=>600,64397=>600,64398=>600,64399=>600,64400=>600,64401=>600,64402=>600,64403=>600,64404=>600,64405=>600,64406=>600,64407=>600,64408=>600,64409=>600,64410=>600,64411=>600,64412=>600,64413=>600,64414=>600,64415=>600,64416=>600,64417=>600,64418=>600,64419=>600,64420=>600,64421=>600,64422=>600,64423=>600,64424=>600,64425=>600,64426=>600,64427=>600,64428=>600,64429=>600,64430=>600,64431=>600,64432=>600,64433=>600,64434=>600,64435=>600,64436=>600,64437=>600,64438=>600,64439=>600,64440=>600,64441=>600,64442=>600,64443=>600,64444=>600,64445=>600,64446=>600,64448=>600,64449=>600,64467=>600,64468=>600,64469=>600,64470=>600,64471=>600,64472=>600,64473=>600,64474=>600,64475=>600,64476=>600,64477=>600,64478=>600,64479=>600,64480=>600,64481=>600,64482=>600,64483=>600,64484=>600,64485=>600,64486=>600,64487=>600,64488=>600,64489=>600,64508=>600,64509=>600,64510=>600,64511=>600,65136=>600,65137=>600,65138=>600,65139=>600,65140=>600,65142=>600,65143=>600,65144=>600,65145=>600,65146=>600,65147=>600,65148=>600,65149=>600,65150=>600,65151=>600,65152=>600,65153=>600,65154=>600,65155=>600,65156=>600,65157=>600,65158=>600,65159=>600,65160=>600,65161=>600,65162=>600,65163=>600,65164=>600,65165=>600,65166=>600,65167=>600,65168=>600,65169=>600,65170=>600,65171=>600,65172=>600,65173=>600,65174=>600,65175=>600,65176=>600,65177=>600,65178=>600,65179=>600,65180=>600,65181=>600,65182=>600,65183=>600,65184=>600,65185=>600,65186=>600,65187=>600,65188=>600,65189=>600,65190=>600,65191=>600,65192=>600,65193=>600,65194=>600,65195=>600,65196=>600,65197=>600,65198=>600,65199=>600,65200=>600,65201=>600,65202=>600,65203=>600,65204=>600,65205=>600,65206=>600,65207=>600,65208=>600,65209=>600,65210=>600,65211=>600,65212=>600,65213=>600,65214=>600,65215=>600,65216=>600,65217=>600,65218=>600,65219=>600,65220=>600,65221=>600,65222=>600,65223=>600,65224=>600,65225=>600,65226=>600,65227=>600,65228=>600,65229=>600,65230=>600,65231=>600,65232=>600,65233=>600,65234=>600,65235=>600,65236=>600,65237=>600,65238=>600,65239=>600,65240=>600,65241=>600,65242=>600,65243=>600,65244=>600,65245=>600,65246=>600,65247=>600,65248=>600,65249=>600,65250=>600,65251=>600,65252=>600,65253=>600,65254=>600,65255=>600,65256=>600,65257=>600,65258=>600,65259=>600,65260=>600,65261=>600,65262=>600,65263=>600,65264=>600,65265=>600,65266=>600,65267=>600,65268=>600,65269=>600,65270=>600,65271=>600,65272=>600,65273=>600,65274=>600,65275=>600,65276=>600,65279=>600,65529=>600,65530=>600,65531=>600,65532=>600,65533=>600,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freemono.z b/tcpdf/fonts/freemono.z new file mode 100644 index 0000000..bb4fe17 Binary files /dev/null and b/tcpdf/fonts/freemono.z differ diff --git a/tcpdf/fonts/freemonob.ctg.z b/tcpdf/fonts/freemonob.ctg.z new file mode 100644 index 0000000..4333c3c Binary files /dev/null and b/tcpdf/fonts/freemonob.ctg.z differ diff --git a/tcpdf/fonts/freemonob.php b/tcpdf/fonts/freemonob.php new file mode 100644 index 0000000..b6fa43c --- /dev/null +++ b/tcpdf/fonts/freemonob.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeMonoBold'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=296284; +$enc=''; +$file='freemonob.z'; +$ctg='freemonob.ctg.z'; +$desc=array('Flags'=>33,'FontBBox'=>'[-600 -200 736 800]','ItalicAngle'=>0,'Ascent'=>800,'Descent'=>-200,'Leading'=>0,'CapHeight'=>583,'XHeight'=>437,'StemV'=>123,'StemH'=>53,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cbbox=array(0=>array(20,-110,580,673),33=>array(220,-15,381,638),34=>array(136,312,464,602),35=>array(62,-92,538,675),36=>array(83,-123,517,684),37=>array(80,-15,521,617),38=>array(75,-14,508,550),39=>array(236,312,364,602),40=>array(264,-153,488,632),41=>array(117,-153,341,632),42=>array(83,208,517,622),43=>array(42,0,558,560),44=>array(147,-158,351,134),45=>array(42,229,558,329),46=>array(225,-15,375,117),47=>array(83,-113,517,695),48=>array(83,-15,517,638),49=>array(83,0,517,638),50=>array(54,0,508,638),51=>array(66,-15,529,638),52=>array(75,0,508,622),53=>array(66,-15,529,622),54=>array(105,-15,540,638),55=>array(75,-1,508,622),56=>array(83,-15,517,638),57=>array(106,-15,541,638),58=>array(225,-15,375,437),59=>array(147,-158,351,437),60=>array(42,54,544,501),61=>array(42,138,558,422),62=>array(56,53,558,500),63=>array(104,-15,517,598),64=>array(76,-152,509,620),65=>array(-21,0,621,583),66=>array(13,0,571,583),67=>array(33,-14,564,597),68=>array(13,0,550,583),69=>array(13,0,550,583),70=>array(13,0,550,583),71=>array(33,-14,592,597),72=>array(23,0,581,583),73=>array(83,0,517,583),74=>array(54,-14,613,583),75=>array(13,0,602,583),76=>array(33,0,571,583),77=>array(-19,0,623,583),78=>array(-8,0,592,583),79=>array(21,-14,579,597),80=>array(13,0,529,583),81=>array(21,-145,579,597),82=>array(3,0,609,583),83=>array(62,-14,538,597),84=>array(42,0,558,583),85=>array(10,-14,590,583),86=>array(-21,0,621,583),87=>array(-10,0,610,583),88=>array(10,0,590,583),89=>array(21,0,579,583),90=>array(73,0,527,583),91=>array(250,-148,475,623),92=>array(83,-113,517,695),93=>array(125,-148,350,623),94=>array(83,325,517,652),95=>array(0,-200,600,-100),96=>array(163,496,350,666),97=>array(42,-16,571,450),98=>array(-8,-14,571,623),99=>array(54,-16,565,450),100=>array(33,-14,613,623),101=>array(33,-16,550,450),102=>array(75,0,571,623),103=>array(33,-200,592,451),104=>array(13,0,581,623),105=>array(62,0,538,623),106=>array(87,-200,458,623),107=>array(33,0,571,623),108=>array(62,0,538,623),109=>array(-19,0,623,450),110=>array(23,0,571,450),111=>array(42,-16,558,450),112=>array(0,-200,579,450),113=>array(20,-200,600,450),114=>array(54,0,571,449),115=>array(73,-16,527,450),116=>array(13,-16,529,591),117=>array(13,-13,571,437),118=>array(0,0,600,437),119=>array(0,0,600,437),120=>array(21,0,579,437),121=>array(21,-200,579,437),122=>array(85,0,519,437),123=>array(132,-153,453,623),124=>array(250,-153,350,623),125=>array(147,-153,468,623),126=>array(62,179,538,385),160=>array(0,0,0,0),161=>array(220,-200,381,453),162=>array(83,-44,499,661),163=>array(33,0,550,598),164=>array(73,64,527,519),165=>array(21,0,579,580),166=>array(250,-153,350,622),167=>array(36,-170,564,583),168=>array(136,534,464,654),169=>array(-7,-15,606,598),170=>array(118,162,489,595),171=>array(33,20,571,415),172=>array(42,115,465,445),173=>array(42,229,558,329),174=>array(-7,-15,606,598),175=>array(125,546,475,626),176=>array(125,243,475,596),177=>array(42,0,558,624),178=>array(149,370,429,760),179=>array(157,370,442,769),180=>array(250,496,427,660),181=>array(13,-153,571,437),182=>array(49,-174,558,583),183=>array(240,172,360,292),184=>array(180,-199,407,1),185=>array(166,370,434,761),186=>array(122,162,480,595),187=>array(33,20,571,415),188=>array(-34,0,629,638),189=>array(-34,0,629,638),190=>array(-43,0,630,637),191=>array(83,-200,496,413),192=>array(-21,0,621,798),193=>array(-21,0,621,800),194=>array(-21,0,621,790),195=>array(-21,0,621,758),196=>array(-21,0,621,766),197=>array(-21,0,621,800),198=>array(-20,0,614,583),199=>array(33,-200,564,597),200=>array(13,0,550,800),201=>array(13,0,550,800),202=>array(13,-1,550,788),203=>array(13,0,550,765),204=>array(83,0,517,800),205=>array(83,0,517,800),206=>array(83,0,517,791),207=>array(83,0,517,764),208=>array(0,0,550,583),209=>array(-8,0,592,755),210=>array(21,-14,579,800),211=>array(21,-14,579,800),212=>array(21,-14,579,788),213=>array(21,-14,579,759),214=>array(21,-14,579,767),215=>array(100,80,500,480),216=>array(9,-70,590,638),217=>array(10,-14,590,800),218=>array(10,-14,590,800),219=>array(10,-14,590,792),220=>array(10,-14,590,764),221=>array(21,0,579,790),222=>array(14,0,523,583),223=>array(13,-16,529,623),224=>array(42,-16,571,666),225=>array(42,-16,571,660),226=>array(42,-16,571,660),227=>array(42,-16,571,621),228=>array(42,-16,571,626),229=>array(42,-16,571,657),230=>array(-13,-16,612,450),231=>array(54,-200,565,450),232=>array(33,-16,550,666),233=>array(33,-16,550,659),234=>array(33,-16,550,660),235=>array(33,-16,550,624),236=>array(62,0,538,666),237=>array(62,0,538,661),238=>array(62,0,538,660),239=>array(62,0,538,627),240=>array(42,-16,558,646),241=>array(23,0,571,635),242=>array(42,-16,558,666),243=>array(42,-16,558,660),244=>array(42,-16,558,660),245=>array(42,-16,558,637),246=>array(42,-16,558,624),247=>array(42,28,558,532),248=>array(23,-70,573,494),249=>array(13,-13,571,666),250=>array(13,-13,571,661),251=>array(13,-13,571,660),252=>array(13,-13,571,627),253=>array(21,-200,579,674),254=>array(-8,-200,571,624),255=>array(21,-200,579,625),256=>array(-21,0,621,737),257=>array(42,-16,571,604),258=>array(-21,0,621,800),259=>array(42,-16,571,664),260=>array(-21,-200,621,583),261=>array(42,-200,580,450),262=>array(33,-14,564,800),263=>array(54,-16,565,661),264=>array(33,-14,564,790),265=>array(54,-16,565,658),266=>array(33,-14,564,777),267=>array(54,-16,565,627),268=>array(33,-5,564,800),269=>array(54,-16,565,670),270=>array(13,0,550,800),271=>array(0,-14,697,623),272=>array(0,0,550,583),273=>array(13,-16,593,624),274=>array(13,0,550,737),275=>array(33,-16,550,604),276=>array(13,0,550,800),277=>array(33,-16,550,664),278=>array(13,0,550,747),279=>array(33,-16,550,627),280=>array(13,-200,587,583),281=>array(33,-200,550,450),282=>array(13,0,550,800),283=>array(33,-16,550,670),284=>array(33,-14,592,793),285=>array(33,-200,592,660),286=>array(33,-14,592,800),287=>array(33,-200,592,664),288=>array(33,-14,592,761),289=>array(33,-200,592,627),290=>array(33,-199,592,597),291=>array(33,-200,592,660),292=>array(23,0,581,789),293=>array(13,0,581,800),294=>array(23,0,581,583),295=>array(13,0,581,624),296=>array(83,0,517,749),297=>array(62,0,538,635),298=>array(83,0,517,737),299=>array(62,0,538,604),300=>array(83,0,517,800),301=>array(62,0,538,664),302=>array(83,-200,517,583),303=>array(62,-200,540,623),304=>array(83,0,517,777),305=>array(62,0,538,437),306=>array(-17,-14,633,583),307=>array(12,-200,568,623),308=>array(54,-14,613,790),309=>array(87,-200,465,660),310=>array(13,-197,602,583),311=>array(33,-199,571,623),312=>array(52,0,548,437),313=>array(33,0,571,800),314=>array(62,0,538,800),315=>array(33,-199,571,583),316=>array(62,-200,538,623),317=>array(33,0,573,600),318=>array(62,0,573,623),319=>array(33,0,571,583),320=>array(62,0,566,623),321=>array(12,0,571,583),322=>array(62,0,538,624),323=>array(-8,0,592,791),324=>array(23,0,571,674),325=>array(-8,-199,592,583),326=>array(23,-200,571,450),327=>array(-8,0,592,800),328=>array(23,0,571,670),329=>array(0,0,571,660),330=>array(23,-123,566,637),331=>array(23,-200,510,450),332=>array(21,-14,579,737),333=>array(42,-16,558,604),334=>array(21,-14,579,800),335=>array(42,-16,558,664),336=>array(21,-14,579,792),337=>array(42,-16,558,674),338=>array(-20,0,612,583),339=>array(-11,-16,613,450),340=>array(3,0,609,800),341=>array(54,0,571,674),342=>array(3,-199,609,583),343=>array(54,-191,571,449),344=>array(3,0,609,800),345=>array(54,0,571,670),346=>array(62,-14,538,800),347=>array(73,-16,527,660),348=>array(62,-14,538,790),349=>array(73,-16,527,660),350=>array(62,-200,538,597),351=>array(73,-200,527,450),352=>array(62,-14,538,800),353=>array(73,-16,527,670),354=>array(42,-200,558,583),355=>array(13,-200,529,591),356=>array(42,0,558,800),357=>array(13,-16,591,640),358=>array(42,0,558,583),359=>array(13,-16,529,591),360=>array(10,-14,590,727),361=>array(13,-13,571,637),362=>array(10,-14,590,737),363=>array(13,-13,571,604),364=>array(10,-14,590,800),365=>array(13,-13,571,663),366=>array(10,-14,590,800),367=>array(13,-13,571,676),368=>array(10,-14,590,789),369=>array(13,-13,571,664),370=>array(10,-200,590,583),371=>array(13,-200,571,437),372=>array(-10,0,610,793),373=>array(0,0,600,642),374=>array(21,0,579,788),375=>array(21,-200,579,645),376=>array(21,0,579,746),377=>array(73,0,527,800),378=>array(85,0,519,662),379=>array(73,0,527,766),380=>array(85,0,519,627),381=>array(73,0,527,800),382=>array(85,0,519,670),383=>array(75,0,571,623),384=>array(-8,-14,571,624),385=>array(-46,0,591,583),386=>array(21,0,579,583),387=>array(-8,-14,571,624),388=>array(21,0,574,615),389=>array(1,-16,570,615),390=>array(33,-14,564,597),391=>array(33,-14,663,679),392=>array(54,-16,654,546),393=>array(0,0,550,583),394=>array(-88,0,550,583),395=>array(21,0,579,583),396=>array(33,-14,613,624),397=>array(42,-200,558,454),398=>array(33,0,570,583),399=>array(25,-17,559,601),400=>array(62,-14,538,597),401=>array(-103,-123,550,583),402=>array(57,-123,548,638),403=>array(33,-14,664,676),404=>array(23,-22,571,588),405=>array(-27,-13,613,624),406=>array(105,-16,547,583),407=>array(83,0,517,583),408=>array(8,0,629,587),409=>array(33,0,571,638),410=>array(62,0,538,624),411=>array(21,0,579,624),412=>array(-19,-13,623,583),413=>array(-124,-123,592,583),414=>array(23,-200,571,450),415=>array(21,-14,579,597),416=>array(21,-14,600,664),417=>array(42,-16,603,520),418=>array(3,-15,651,628),419=>array(-33,-16,651,486),420=>array(-83,0,529,583),421=>array(-8,-200,571,638),422=>array(23,-200,574,583),423=>array(62,-14,538,597),424=>array(73,-16,527,450),425=>array(73,0,527,583),426=>array(56,-118,543,606),427=>array(13,-200,529,591),428=>array(-3,0,558,583),429=>array(13,-16,529,638),430=>array(42,-123,558,583),431=>array(0,-14,599,697),432=>array(0,-13,600,551),433=>array(53,-18,565,596),434=>array(18,-19,578,588),435=>array(-60,0,579,583),436=>array(21,-200,672,551),437=>array(73,0,527,583),438=>array(85,0,519,437),439=>array(44,-50,563,583),440=>array(44,-50,563,583),441=>array(70,-183,462,442),442=>array(63,-200,462,442),443=>array(54,0,524,598),444=>array(55,-22,524,588),445=>array(70,-26,445,442),446=>array(109,-22,512,588),447=>array(0,-200,562,463),448=>array(250,-153,350,623),449=>array(154,-153,446,622),450=>array(26,-149,574,629),451=>array(220,-15,381,638),452=>array(0,0,599,800),453=>array(0,0,596,680),454=>array(3,-16,600,719),455=>array(2,-14,598,583),456=>array(25,-200,568,623),457=>array(26,-200,552,624),458=>array(-25,-18,625,588),459=>array(7,-200,583,623),460=>array(3,-200,568,623),461=>array(-21,0,621,800),462=>array(42,-16,571,647),463=>array(83,0,517,800),464=>array(62,0,538,670),465=>array(21,-14,579,800),466=>array(42,-16,558,670),467=>array(10,-14,590,800),468=>array(13,-13,571,670),469=>array(10,-14,590,800),470=>array(13,-13,571,761),471=>array(10,-14,590,800),472=>array(13,-13,571,800),473=>array(10,-14,590,798),474=>array(13,-13,571,800),475=>array(10,-14,590,800),476=>array(13,-13,571,800),477=>array(33,-16,550,450),478=>array(-21,0,621,800),479=>array(42,-16,571,758),480=>array(-21,0,621,800),481=>array(42,-16,571,741),482=>array(-20,0,614,737),483=>array(-13,-16,612,600),484=>array(13,-14,595,597),485=>array(33,-200,592,451),486=>array(33,-14,592,800),487=>array(33,-200,592,670),488=>array(13,0,602,800),489=>array(33,0,571,791),490=>array(21,-200,579,597),491=>array(42,-200,558,450),492=>array(21,-200,579,737),493=>array(42,-200,558,600),494=>array(44,-50,563,800),495=>array(90,-183,482,670),496=>array(87,-200,473,670),497=>array(0,0,588,587),498=>array(0,0,596,588),499=>array(3,-16,581,629),500=>array(33,-14,592,800),501=>array(33,-200,592,655),502=>array(23,0,568,583),503=>array(7,-200,573,597),504=>array(-8,0,592,800),505=>array(23,0,571,660),506=>array(-21,0,621,800),507=>array(42,-15,571,799),508=>array(-20,0,614,800),509=>array(-13,-16,612,654),510=>array(9,-70,590,800),511=>array(23,-70,573,668),512=>array(-21,0,621,797),513=>array(42,-16,571,680),514=>array(-21,0,621,788),515=>array(42,-16,571,656),516=>array(13,0,550,798),517=>array(33,-16,550,684),518=>array(13,0,550,788),519=>array(33,-16,550,658),520=>array(68,0,517,800),521=>array(62,0,538,684),522=>array(83,0,517,787),523=>array(62,0,538,663),524=>array(21,-14,579,795),525=>array(42,-16,558,684),526=>array(21,-14,579,783),527=>array(42,-16,558,653),528=>array(3,0,609,800),529=>array(54,0,571,684),530=>array(3,0,609,786),531=>array(54,0,571,659),532=>array(10,-14,590,800),533=>array(13,-13,571,684),534=>array(10,-14,590,788),535=>array(13,-13,571,665),536=>array(62,-199,538,597),537=>array(73,-199,527,450),538=>array(42,-199,558,583),539=>array(13,-199,529,591),540=>array(87,-45,535,601),541=>array(99,-141,519,456),542=>array(23,0,581,800),543=>array(13,0,581,759),544=>array(13,-200,594,637),548=>array(73,-200,527,583),549=>array(85,-200,519,437),550=>array(-21,0,621,757),551=>array(42,-16,571,627),552=>array(13,-200,550,583),553=>array(33,-200,550,450),554=>array(21,-12,579,800),555=>array(42,-16,558,757),556=>array(21,-12,579,799),557=>array(42,-16,558,772),558=>array(21,-14,579,757),559=>array(42,-16,558,627),560=>array(21,-12,579,800),561=>array(42,-16,558,750),562=>array(21,0,579,737),563=>array(21,-200,579,600),567=>array(87,-200,458,437),592=>array(42,-13,571,453),593=>array(33,-14,613,467),594=>array(33,-18,613,463),595=>array(-8,-14,571,638),596=>array(54,-16,565,450),598=>array(33,-200,728,624),599=>array(33,-14,725,638),600=>array(33,-16,550,450),601=>array(33,-16,550,450),603=>array(73,-16,527,450),604=>array(73,-16,527,450),607=>array(117,-200,564,437),608=>array(33,-200,704,638),609=>array(33,-200,510,462),613=>array(13,-188,581,435),614=>array(23,0,581,638),615=>array(23,-200,509,638),616=>array(62,0,538,623),617=>array(105,-16,547,437),618=>array(110,0,490,437),619=>array(62,0,538,624),621=>array(105,-200,547,624),623=>array(-19,-13,623,437),624=>array(-19,-200,623,437),625=>array(-19,-200,563,450),626=>array(-102,-200,571,450),627=>array(23,-200,707,450),628=>array(63,0,543,437),629=>array(42,-16,558,450),633=>array(54,-12,571,437),634=>array(54,-12,571,637),635=>array(54,-200,644,437),636=>array(54,-200,571,449),637=>array(77,-200,571,449),638=>array(54,0,484,450),639=>array(54,-200,484,450),640=>array(75,0,519,437),641=>array(75,0,519,437),642=>array(73,-200,527,450),643=>array(57,-123,548,638),644=>array(27,-200,592,638),645=>array(57,-123,548,638),647=>array(13,-16,529,591),648=>array(13,-200,529,591),649=>array(13,-13,571,437),652=>array(0,0,600,437),653=>array(0,0,600,437),654=>array(21,0,579,637),656=>array(85,-200,716,437),657=>array(90,-99,539,441),658=>array(70,-183,462,442),659=>array(87,-200,462,442),660=>array(104,0,517,598),661=>array(104,0,517,598),662=>array(104,-15,517,583),663=>array(33,-200,564,597),664=>array(21,-14,579,597),665=>array(48,1,536,442),666=>array(78,-21,534,456),667=>array(9,-21,596,517),668=>array(58,0,542,437),669=>array(119,-186,571,649),670=>array(33,-186,571,437),671=>array(66,0,539,437),672=>array(33,-200,725,638),673=>array(104,0,517,598),674=>array(104,0,517,598),688=>array(98,361,478,800),689=>array(114,360,490,800),690=>array(176,224,429,800),691=>array(119,359,468,688),692=>array(62,354,410,683),693=>array(94,231,488,683),694=>array(77,360,483,777),695=>array(98,365,500,687),696=>array(113,243,488,686),697=>array(204,440,395,664),698=>array(119,440,460,664),699=>array(203,496,390,666),700=>array(210,496,387,660),701=>array(204,440,395,664),702=>array(280,486,373,667),703=>array(227,486,320,667),704=>array(167,358,447,766),705=>array(167,358,447,766),706=>array(166,570,443,800),707=>array(162,570,439,800),708=>array(173,570,427,800),709=>array(173,570,427,800),710=>array(125,497,476,661),711=>array(125,490,476,654),712=>array(255,465,345,660),713=>array(125,546,475,626),714=>array(240,496,417,660),715=>array(163,496,350,666),716=>array(255,-200,345,-5),717=>array(125,-114,475,-34),718=>array(225,-194,412,-24),719=>array(187,-192,364,-28),720=>array(209,0,391,437),721=>array(209,246,391,437),722=>array(280,198,373,379),723=>array(227,198,320,379),724=>array(209,537,385,680),725=>array(215,525,391,668),726=>array(202,508,398,704),727=>array(202,521,398,591),728=>array(125,503,475,656),729=>array(240,534,360,654),730=>array(207,496,393,677),731=>array(250,-200,463,0),732=>array(115,531,485,648),733=>array(125,496,475,660),734=>array(142,237,449,439),735=>array(218,514,382,677),736=>array(112,236,488,688),737=>array(141,360,462,800),738=>array(146,358,453,699),739=>array(112,361,487,683),740=>array(167,359,447,785),741=>array(25,-25,483,800),742=>array(25,-37,483,800),743=>array(25,-37,483,800),744=>array(25,-37,483,800),745=>array(25,-25,483,800),746=>array(75,-25,533,715),747=>array(65,-35,523,404),748=>array(125,-199,476,-35),749=>array(30,503,570,734),750=>array(108,341,468,633),751=>array(173,-200,427,30),752=>array(173,-200,427,30),753=>array(166,-200,443,30),754=>array(157,-176,434,54),755=>array(207,-186,393,-5),756=>array(225,222,412,392),757=>array(157,222,480,392),758=>array(187,205,364,369),759=>array(115,-184,485,-67),760=>array(225,309,375,761),761=>array(208,518,391,701),762=>array(208,518,391,701),763=>array(208,-65,391,118),764=>array(255,-67,438,116),765=>array(95,-200,505,-22),766=>array(95,-200,463,-22),767=>array(13,-200,579,29),768=>array(-437,496,-250,666),769=>array(-350,496,-173,660),770=>array(-465,481,-114,645),771=>array(-485,531,-115,648),772=>array(-475,546,-125,626),773=>array(-545,546,-55,626),774=>array(-475,503,-125,656),775=>array(-360,534,-240,654),776=>array(-464,534,-136,654),777=>array(-396,486,-208,682),778=>array(-393,496,-207,677),779=>array(-475,496,-125,660),780=>array(-475,490,-124,654),781=>array(-340,514,-260,708),782=>array(-420,514,-167,708),783=>array(-474,500,-125,670),784=>array(-475,503,-125,718),785=>array(-477,469,-127,622),786=>array(-376,477,-189,647),787=>array(-366,482,-189,646),788=>array(-422,457,-231,681),789=>array(-372,479,-195,643),790=>array(-433,-193,-246,-23),791=>array(-400,-194,-223,-30),792=>array(-365,-200,-222,-24),793=>array(-346,-200,-203,-24),794=>array(-97,510,86,693),795=>array(-162,483,0,698),796=>array(-367,-179,-274,2),797=>array(-380,-186,-204,-43),798=>array(-377,-198,-201,-55),799=>array(-409,-200,-213,-4),800=>array(-412,-136,-216,-66),801=>array(-547,-200,-250,0),802=>array(-350,-200,-53,0),803=>array(-360,-164,-240,-44),804=>array(-459,-160,-131,-40),805=>array(-385,-200,-199,-19),806=>array(-357,-191,-210,-21),807=>array(-420,-199,-193,1),808=>array(-350,-200,-137,0),809=>array(-343,-200,-263,-6),810=>array(-439,-175,-150,-22),811=>array(-477,-173,-124,-43),812=>array(-468,-191,-117,-27),813=>array(-471,-193,-120,-29),814=>array(-461,-183,-111,-30),815=>array(-474,-200,-124,-47),816=>array(-482,-172,-112,-55),817=>array(-475,-139,-125,-59),818=>array(-600,-200,0,-100),819=>array(-600,-200,0,-19),820=>array(-472,201,-102,318),821=>array(-473,289,-123,369),822=>array(-570,205,-54,305),823=>array(-472,222,-114,456),824=>array(-584,180,-1,534),825=>array(-286,-200,-193,-19),826=>array(-439,-200,-150,-47),827=>array(-388,-200,-210,-23),828=>array(-469,-178,-112,-33),829=>array(-376,501,-212,664),830=>array(-366,485,-269,722),831=>array(-600,619,0,800),832=>array(-399,496,-212,666),833=>array(-344,496,-167,660),834=>array(-455,528,-85,645),835=>array(-360,482,-183,646),836=>array(-478,522,-132,759),837=>array(-334,-200,-37,0),838=>array(-439,533,-150,686),839=>array(-475,-199,-125,-12),840=>array(-416,-200,-178,-6),841=>array(-398,-200,-215,-17),842=>array(-477,502,-107,666),843=>array(-477,463,-107,780),844=>array(-463,491,-93,749),845=>array(-454,-200,-164,-39),846=>array(-378,-194,-236,-24),848=>array(-438,459,-161,689),849=>array(-349,481,-256,662),850=>array(-472,527,-122,774),851=>array(-377,-175,-213,-12),852=>array(-435,-200,-158,30),853=>array(-451,-200,-174,30),854=>array(-555,-200,-48,30),855=>array(-328,485,-235,666),856=>array(-120,534,0,654),857=>array(-409,-200,-191,8),858=>array(-448,-200,-150,-11),859=>array(-390,477,-196,684),860=>array(-392,-200,393,24),861=>array(-392,455,393,679),862=>array(-300,482,300,582),863=>array(-300,-195,300,-95),864=>array(-370,-166,370,-49),865=>array(-393,446,392,670),866=>array(-286,-200,300,-13),867=>array(-398,468,-169,669),868=>array(-418,468,-195,669),869=>array(-400,476,-194,745),870=>array(-410,468,-187,669),871=>array(-427,468,-186,663),872=>array(-407,466,-186,667),873=>array(-420,467,-169,742),874=>array(-417,476,-171,745),875=>array(-440,478,-163,672),876=>array(-402,478,-179,672),877=>array(-391,467,-168,729),878=>array(-424,474,-165,663),879=>array(-415,476,-174,665),884=>array(204,440,395,664),885=>array(147,-149,351,143),890=>array(231,-200,528,0),894=>array(147,-158,351,437),900=>array(191,463,382,696),901=>array(119,522,465,759),902=>array(-79,0,650,675),903=>array(225,304,375,437),904=>array(-95,0,619,675),905=>array(-109,0,600,674),906=>array(-31,0,584,672),908=>array(-34,-14,595,675),910=>array(-106,0,625,671),911=>array(-16,0,609,671),912=>array(105,-16,547,735),913=>array(-21,0,621,583),914=>array(13,0,571,583),915=>array(32,0,568,583),916=>array(11,0,589,583),917=>array(13,0,550,583),918=>array(73,0,527,583),919=>array(23,0,581,583),920=>array(21,-14,579,597),921=>array(83,0,517,583),922=>array(13,0,602,583),923=>array(-21,0,621,583),924=>array(-19,0,623,583),925=>array(-8,0,592,583),926=>array(35,0,565,583),927=>array(21,-14,579,597),928=>array(23,0,581,583),929=>array(13,0,529,583),931=>array(73,0,527,583),932=>array(42,0,558,583),933=>array(21,0,579,583),934=>array(4,0,596,583),935=>array(10,0,590,583),936=>array(-16,0,616,583),937=>array(29,0,571,583),938=>array(83,0,517,757),939=>array(21,0,579,757),940=>array(33,-14,613,764),941=>array(73,-16,527,747),942=>array(23,-200,571,747),943=>array(105,-16,547,747),944=>array(10,-16,587,735),945=>array(33,-14,613,467),946=>array(13,-200,529,623),947=>array(23,-200,581,437),948=>array(42,-16,558,638),949=>array(73,-16,527,450),950=>array(92,-200,517,624),951=>array(23,-200,571,450),952=>array(83,-15,517,623),953=>array(105,-16,547,437),954=>array(52,0,548,437),955=>array(21,0,579,624),956=>array(13,-200,571,437),957=>array(34,0,552,437),958=>array(117,-200,522,637),959=>array(42,-16,558,450),960=>array(46,0,553,437),961=>array(-24,-200,558,450),962=>array(113,-36,510,463),963=>array(42,-16,602,450),964=>array(70,-16,531,437),965=>array(10,-16,587,437),966=>array(-6,-200,578,450),967=>array(4,-200,586,437),968=>array(-22,-200,622,638),969=>array(19,-40,577,453),970=>array(97,-16,547,630),971=>array(10,-16,587,630),972=>array(42,-16,558,747),973=>array(10,-16,587,747),974=>array(19,-40,577,750),976=>array(82,-34,522,625),977=>array(71,-44,529,649),978=>array(23,-25,577,588),979=>array(-73,-25,604,588),980=>array(23,-25,577,720),981=>array(-4,-200,604,639),982=>array(19,-40,577,453),986=>array(55,-171,621,587),987=>array(64,-172,563,464),988=>array(18,-25,545,588),989=>array(45,-200,577,451),1008=>array(14,-26,586,442),1009=>array(42,-200,558,450),1012=>array(21,-14,579,597),1013=>array(150,-42,450,457),1024=>array(13,0,550,793),1025=>array(13,0,550,764),1026=>array(20,-187,582,582),1027=>array(32,0,568,793),1028=>array(34,-14,566,597),1029=>array(62,-14,538,597),1030=>array(83,0,517,583),1031=>array(83,0,517,764),1032=>array(27,-14,586,583),1033=>array(-46,0,640,583),1034=>array(-46,0,636,584),1035=>array(-8,0,606,583),1036=>array(6,0,594,791),1037=>array(21,0,579,793),1038=>array(20,0,580,770),1039=>array(21,-99,579,583),1040=>array(-21,0,621,583),1041=>array(21,0,579,583),1042=>array(13,0,571,583),1043=>array(32,0,568,583),1044=>array(5,-141,599,583),1045=>array(13,0,550,583),1046=>array(-24,0,623,583),1047=>array(62,-14,538,597),1048=>array(21,0,579,583),1049=>array(21,0,579,771),1050=>array(6,0,594,583),1051=>array(13,0,587,583),1052=>array(-19,0,623,583),1053=>array(23,0,581,583),1054=>array(21,-14,579,597),1055=>array(21,0,579,583),1056=>array(13,0,529,583),1057=>array(33,-14,564,597),1058=>array(42,0,558,583),1059=>array(20,0,580,583),1060=>array(4,0,596,583),1061=>array(10,0,590,583),1062=>array(6,-141,594,583),1063=>array(38,0,562,583),1064=>array(-22,0,622,583),1065=>array(-28,-141,624,583),1066=>array(-7,0,607,583),1067=>array(-21,0,621,583),1068=>array(13,0,529,583),1069=>array(34,-14,566,597),1070=>array(-23,-14,600,597),1071=>array(-3,0,603,583),1072=>array(42,-16,571,450),1073=>array(52,-14,548,661),1074=>array(84,0,516,437),1075=>array(98,0,502,437),1076=>array(35,-92,565,437),1077=>array(33,-16,550,450),1078=>array(-21,0,620,437),1079=>array(73,-16,527,450),1080=>array(31,0,568,437),1081=>array(31,0,568,630),1082=>array(52,0,548,437),1083=>array(17,0,582,437),1084=>array(-16,0,620,437),1085=>array(51,0,548,437),1086=>array(42,-16,558,450),1087=>array(46,0,553,437),1088=>array(0,-200,579,450),1089=>array(54,-16,565,450),1090=>array(62,1,538,438),1091=>array(21,-200,579,437),1092=>array(4,-200,596,648),1093=>array(21,0,579,437),1094=>array(31,-92,569,437),1095=>array(49,0,551,437),1096=>array(-11,0,612,437),1097=>array(-11,-92,612,437),1098=>array(21,0,579,437),1099=>array(-9,0,608,437),1100=>array(84,0,516,437),1101=>array(44,-16,556,450),1102=>array(-12,-16,612,450),1103=>array(52,0,548,437),1104=>array(33,-16,550,660),1105=>array(33,-16,550,624),1106=>array(13,-185,510,624),1107=>array(98,0,502,660),1108=>array(44,-16,556,450),1109=>array(73,-16,527,450),1110=>array(62,0,538,623),1111=>array(62,0,538,626),1112=>array(87,-200,458,623),1113=>array(-29,-1,654,436),1114=>array(-29,0,623,437),1115=>array(13,0,582,624),1116=>array(52,0,548,660),1117=>array(31,0,568,660),1118=>array(21,-200,579,630),1119=>array(32,-99,569,437),1136=>array(-16,0,616,583),1137=>array(-22,-200,622,638),1138=>array(21,-14,579,597),1156=>array(-465,469,-115,622),1157=>array(-385,457,-194,681),1158=>array(-376,482,-199,646),1162=>array(21,-141,578,771),1163=>array(31,-141,568,630),1164=>array(12,0,529,633),1165=>array(84,0,516,516),1166=>array(13,0,538,583),1167=>array(-7,-200,572,450),1168=>array(32,0,568,700),1169=>array(98,0,502,529),1170=>array(31,0,568,583),1171=>array(79,0,502,437),1172=>array(24,-145,560,583),1173=>array(98,-145,502,437),1174=>array(-24,-141,623,583),1175=>array(-21,-92,620,437),1176=>array(62,-199,538,597),1177=>array(73,-199,527,450),1178=>array(6,-141,594,583),1179=>array(52,-141,548,437),1180=>array(6,0,594,583),1181=>array(29,0,589,437),1182=>array(2,0,594,583),1183=>array(48,0,548,437),1184=>array(-27,0,645,583),1185=>array(11,0,589,437),1186=>array(23,-141,581,583),1187=>array(31,-141,568,437),1188=>array(-42,0,620,583),1189=>array(0,0,600,437),1190=>array(-45,-145,630,583),1191=>array(-53,-145,630,437),1192=>array(33,-132,551,597),1193=>array(54,-132,551,450),1194=>array(33,-199,564,597),1195=>array(54,-199,565,450),1196=>array(42,-141,558,583),1197=>array(62,-141,538,437),1198=>array(21,0,579,583),1199=>array(21,-146,579,437),1200=>array(21,0,579,583),1201=>array(21,-146,579,437),1202=>array(10,-141,590,583),1203=>array(21,-141,580,437),1204=>array(-29,-141,619,583),1205=>array(-29,-141,609,437),1206=>array(38,-141,562,583),1207=>array(49,-141,551,437),1208=>array(38,0,562,583),1209=>array(49,0,551,437),1210=>array(38,0,562,583),1211=>array(49,0,551,437),1212=>array(-25,-17,627,601),1213=>array(0,-16,600,450),1214=>array(-25,-200,627,601),1215=>array(0,-200,600,450),1216=>array(83,0,517,583),1217=>array(-24,0,623,769),1218=>array(-21,-3,620,659),1219=>array(6,-145,566,583),1220=>array(52,-145,542,437),1221=>array(13,-141,587,583),1222=>array(17,-141,582,437),1223=>array(23,-145,561,583),1224=>array(51,-145,548,437),1225=>array(23,-141,581,583),1226=>array(51,-141,548,437),1227=>array(38,-141,562,583),1228=>array(49,-141,551,437),1229=>array(-19,-141,623,584),1230=>array(-16,-141,620,437),1231=>array(83,0,517,583),1232=>array(-21,0,621,770),1233=>array(42,-16,571,659),1234=>array(-21,0,621,743),1235=>array(42,-16,571,624),1236=>array(-20,0,614,583),1237=>array(-13,-16,612,450),1238=>array(13,0,550,770),1239=>array(33,-16,550,669),1240=>array(25,-17,559,601),1241=>array(33,-16,550,450),1242=>array(25,-17,559,764),1243=>array(33,-16,550,626),1244=>array(-24,0,623,764),1245=>array(-21,-3,620,623),1246=>array(62,-14,538,743),1247=>array(73,-16,527,627),1248=>array(44,-50,563,583),1249=>array(70,-183,462,442),1250=>array(21,0,579,722),1251=>array(31,0,568,586),1252=>array(21,0,579,764),1253=>array(31,0,568,623),1254=>array(21,-14,579,763),1255=>array(42,-16,558,625),1256=>array(21,-14,579,597),1257=>array(42,-16,558,450),1258=>array(21,-14,579,765),1259=>array(42,-16,558,625),1260=>array(34,-14,566,764),1261=>array(44,-16,556,628),1262=>array(20,0,580,722),1263=>array(21,-200,579,586),1264=>array(20,0,580,764),1265=>array(21,-200,579,623),1266=>array(20,0,580,780),1267=>array(21,-200,579,665),1268=>array(38,0,562,763),1269=>array(49,0,551,626),1270=>array(32,-141,568,583),1271=>array(98,-141,502,437),1272=>array(-21,0,621,763),1273=>array(-9,0,608,626),1296=>array(62,-14,538,597),1297=>array(73,-16,527,450),1298=>array(13,-145,567,583),1299=>array(17,-145,582,437),1306=>array(21,-145,579,597),1307=>array(20,-200,600,450),1308=>array(-10,0,610,583),1309=>array(0,0,600,437),1310=>array(6,0,594,583),1311=>array(52,0,548,437),1456=>array(271,-200,329,-38),1457=>array(153,-200,447,-52),1458=>array(153,-200,447,-42),1459=>array(152,-200,447,-39),1460=>array(260,-127,339,-46),1461=>array(212,-101,388,-42),1462=>array(212,-200,388,-42),1463=>array(206,-95,394,-42),1464=>array(212,-200,389,-40),1465=>array(256,528,335,609),1467=>array(153,-200,447,-42),1468=>array(260,200,339,281),1469=>array(280,-200,320,-24),1470=>array(60,380,540,480),1471=>array(206,540,394,593),1472=>array(250,-153,350,622),1473=>array(495,528,574,609),1474=>array(39,529,118,610),1475=>array(225,-15,375,437),1476=>array(227,528,306,609),1488=>array(60,0,540,480),1489=>array(60,0,540,480),1490=>array(123,0,477,480),1491=>array(60,0,540,480),1492=>array(60,0,540,480),1493=>array(150,0,378,480),1494=>array(123,0,477,480),1495=>array(60,0,540,480),1496=>array(44,0,524,480),1497=>array(144,190,366,480),1498=>array(60,-200,500,480),1499=>array(60,0,500,480),1500=>array(60,0,540,629),1501=>array(48,0,528,480),1502=>array(25,0,540,480),1503=>array(150,-200,378,480),1504=>array(123,0,445,480),1505=>array(60,0,540,480),1506=>array(60,0,547,480),1507=>array(60,-200,540,480),1508=>array(60,0,541,480),1509=>array(60,-200,540,480),1510=>array(48,0,528,480),1511=>array(50,-200,530,480),1512=>array(60,0,540,480),1513=>array(51,0,569,480),1514=>array(28,0,540,480),1520=>array(36,0,536,480),1521=>array(42,0,536,480),1522=>array(42,190,536,480),1523=>array(241,315,395,605),1524=>array(139,315,513,605),4304=>array(118,102,482,511),4305=>array(121,102,479,667),4306=>array(110,-147,490,428),4307=>array(76,-156,524,428),4308=>array(117,-147,484,428),4309=>array(116,-147,484,428),4310=>array(86,102,514,696),4311=>array(86,90,515,429),4312=>array(119,90,481,428),4313=>array(115,-147,485,440),4314=>array(76,-157,524,428),4315=>array(118,102,482,696),4316=>array(112,102,488,717),4317=>array(80,91,520,428),4318=>array(116,102,484,698),4319=>array(109,-147,490,463),4320=>array(80,90,521,696),4321=>array(121,102,479,696),4322=>array(76,-150,524,564),4323=>array(76,-147,524,439),4324=>array(75,-147,525,428),4325=>array(113,-144,487,737),4326=>array(76,-157,524,428),4327=>array(116,-147,484,440),4328=>array(86,102,514,696),4329=>array(121,93,479,696),4330=>array(76,-148,524,440),4331=>array(118,102,482,696),4332=>array(96,-200,501,696),4333=>array(93,-147,507,658),4334=>array(118,102,482,696),4335=>array(70,-147,530,428),4336=>array(121,102,479,698),4337=>array(58,102,542,707),4338=>array(131,95,469,450),4339=>array(110,-138,490,444),4340=>array(126,-138,474,597),4341=>array(96,102,502,696),4345=>array(110,-170,490,405),4347=>array(91,-2,502,592),4348=>array(183,199,465,661),7680=>array(-21,-200,621,583),7681=>array(42,-200,571,450),7682=>array(13,0,571,757),7683=>array(-8,-14,571,762),7684=>array(13,-160,571,583),7685=>array(-8,-174,571,623),7686=>array(13,-144,571,583),7687=>array(-8,-144,571,623),7688=>array(33,-200,564,800),7689=>array(54,-200,565,654),7690=>array(13,0,550,757),7691=>array(33,-14,613,767),7692=>array(13,-160,550,583),7693=>array(33,-174,613,623),7694=>array(13,-144,550,583),7695=>array(33,-144,613,623),7696=>array(13,-200,550,583),7697=>array(33,-200,613,624),7698=>array(13,-200,550,583),7699=>array(33,-200,613,623),7700=>array(13,0,550,800),7701=>array(33,-16,550,800),7702=>array(13,0,550,798),7703=>array(33,-16,550,800),7704=>array(13,-200,550,583),7705=>array(33,-199,550,450),7706=>array(13,-165,550,583),7707=>array(33,-181,550,450),7708=>array(13,-200,550,800),7709=>array(33,-200,550,643),7710=>array(13,0,550,757),7711=>array(75,0,571,775),7712=>array(33,-14,592,737),7713=>array(33,-200,592,604),7714=>array(23,0,581,757),7715=>array(13,0,581,763),7716=>array(23,-160,581,583),7717=>array(13,-160,581,623),7718=>array(23,0,581,757),7719=>array(13,0,581,784),7720=>array(23,-200,581,583),7721=>array(13,-200,581,624),7722=>array(23,-200,581,583),7723=>array(13,-200,581,623),7724=>array(83,-165,517,583),7725=>array(62,-165,538,623),7726=>array(83,0,517,799),7727=>array(62,0,538,772),7728=>array(13,0,602,794),7729=>array(33,0,571,800),7730=>array(13,-160,602,583),7731=>array(33,-160,571,623),7732=>array(13,-144,602,583),7733=>array(33,-150,571,623),7734=>array(33,-160,571,583),7735=>array(62,-160,538,623),7736=>array(33,-160,571,737),7737=>array(62,-160,538,744),7738=>array(33,-156,571,583),7739=>array(62,-158,538,623),7740=>array(33,-200,571,583),7741=>array(62,-200,538,623),7742=>array(-19,0,623,792),7743=>array(-19,0,623,654),7744=>array(-19,0,623,748),7745=>array(-19,0,623,627),7746=>array(-19,-160,623,583),7747=>array(-19,-160,623,450),7748=>array(-8,0,592,757),7749=>array(23,0,571,627),7750=>array(-8,-160,592,583),7751=>array(23,-160,571,450),7752=>array(-8,-156,592,583),7753=>array(23,-158,571,450),7754=>array(-8,-200,592,583),7755=>array(23,-198,571,450),7756=>array(21,-12,579,800),7757=>array(42,-16,558,800),7758=>array(21,-12,579,800),7759=>array(42,-16,558,787),7760=>array(21,-12,579,800),7761=>array(42,-16,558,800),7762=>array(21,-12,579,800),7763=>array(42,-16,558,800),7764=>array(13,0,529,800),7765=>array(0,-200,579,660),7766=>array(13,0,529,757),7767=>array(0,-200,579,627),7768=>array(3,0,609,757),7769=>array(54,0,571,627),7770=>array(3,-160,609,583),7771=>array(54,-160,571,449),7772=>array(3,-160,609,737),7773=>array(54,-160,571,604),7774=>array(3,-144,609,583),7775=>array(54,-144,571,449),7776=>array(62,-14,538,760),7777=>array(73,-16,527,627),7778=>array(62,-174,538,597),7779=>array(73,-176,527,450),7780=>array(62,-12,538,800),7781=>array(73,-16,527,796),7782=>array(62,-12,538,800),7783=>array(73,-16,527,785),7784=>array(62,-174,538,758),7785=>array(73,-176,527,627),7786=>array(42,0,558,757),7787=>array(13,-16,529,751),7788=>array(42,-160,558,583),7789=>array(13,-176,529,591),7790=>array(42,-152,558,583),7791=>array(13,-162,529,591),7792=>array(42,-200,558,583),7793=>array(13,-200,529,591),7794=>array(10,-174,590,583),7795=>array(13,-173,571,437),7796=>array(10,-179,590,583),7797=>array(13,-178,571,437),7798=>array(10,-200,590,585),7799=>array(13,-198,571,437),7800=>array(10,-14,590,800),7801=>array(13,-13,571,800),7802=>array(10,-14,590,800),7803=>array(13,-13,571,764),7804=>array(-21,0,621,762),7805=>array(0,0,600,635),7806=>array(-21,-160,621,583),7807=>array(0,-160,600,437),7808=>array(-10,0,610,800),7809=>array(0,0,600,660),7810=>array(-10,0,610,800),7811=>array(0,0,600,660),7812=>array(-10,0,610,757),7813=>array(0,0,600,610),7814=>array(-10,0,610,757),7815=>array(0,0,600,627),7816=>array(-10,-160,610,583),7817=>array(0,-160,600,437),7818=>array(10,0,590,757),7819=>array(21,0,579,627),7820=>array(10,0,590,757),7821=>array(21,0,579,610),7822=>array(21,0,579,757),7823=>array(21,-200,579,627),7824=>array(73,0,527,800),7825=>array(85,0,519,654),7826=>array(73,-160,527,583),7827=>array(85,-160,519,437),7828=>array(73,-160,527,583),7829=>array(85,-162,519,437),7830=>array(13,-160,581,623),7831=>array(0,-16,529,751),7832=>array(0,0,600,681),7833=>array(21,-200,579,681),7834=>array(42,-16,571,667),7835=>array(75,0,571,783),7840=>array(-21,-160,621,583),7841=>array(42,-176,571,450),7842=>array(-21,0,621,800),7843=>array(42,-16,571,705),7844=>array(-21,0,621,800),7845=>array(42,-16,599,765),7846=>array(-21,0,621,800),7847=>array(-11,-16,571,768),7848=>array(-21,0,621,800),7849=>array(42,-16,592,755),7850=>array(-21,0,621,792),7851=>array(42,-16,571,784),7852=>array(-21,-160,621,787),7853=>array(42,-176,571,660),7854=>array(-21,0,621,799),7855=>array(42,-16,571,792),7856=>array(-21,0,621,800),7857=>array(42,-16,571,800),7858=>array(-21,0,621,800),7859=>array(42,-16,571,799),7860=>array(-21,0,621,797),7861=>array(42,-16,571,796),7862=>array(-21,-160,621,800),7863=>array(42,-176,571,664),7864=>array(13,-160,550,583),7865=>array(33,-176,550,450),7866=>array(13,0,550,800),7867=>array(33,-16,550,705),7868=>array(13,0,550,762),7869=>array(33,-16,550,615),7870=>array(13,0,599,800),7871=>array(33,-16,590,757),7872=>array(0,0,559,800),7873=>array(0,-16,550,776),7874=>array(13,0,599,800),7875=>array(33,-16,598,756),7876=>array(13,0,550,798),7877=>array(33,-16,550,786),7878=>array(13,-160,550,789),7879=>array(33,-176,550,660),7880=>array(83,0,517,800),7881=>array(62,0,538,703),7882=>array(83,-160,517,583),7883=>array(62,-160,538,623),7884=>array(21,-174,579,597),7885=>array(42,-176,558,450),7886=>array(21,-14,579,800),7887=>array(42,-16,558,704),7888=>array(21,-14,599,800),7889=>array(42,-16,592,747),7890=>array(0,-14,579,800),7891=>array(1,-16,558,774),7892=>array(21,-14,599,800),7893=>array(42,-16,599,757),7894=>array(21,-12,579,792),7895=>array(42,-16,558,797),7896=>array(21,-174,579,776),7897=>array(42,-176,558,654),7898=>array(21,-14,600,800),7899=>array(42,-16,603,652),7900=>array(21,-14,600,800),7901=>array(42,-16,603,656),7902=>array(21,-14,600,800),7903=>array(42,-16,603,703),7904=>array(21,-14,600,780),7905=>array(42,-16,603,637),7906=>array(21,-174,600,664),7907=>array(42,-176,603,520),7908=>array(10,-174,590,583),7909=>array(13,-173,571,437),7910=>array(10,-14,590,800),7911=>array(13,-13,571,702),7912=>array(0,-14,599,800),7913=>array(0,-13,600,675),7914=>array(0,-14,599,800),7915=>array(0,-13,600,665),7916=>array(0,-14,599,800),7917=>array(0,-13,600,702),7918=>array(0,-14,599,777),7919=>array(0,-13,600,637),7920=>array(0,-174,599,697),7921=>array(0,-173,600,551),7922=>array(21,0,579,800),7923=>array(21,-200,579,660),7924=>array(21,-160,579,583),7925=>array(21,-200,579,437),7926=>array(21,0,579,800),7927=>array(21,-200,579,700),7928=>array(21,0,579,762),7929=>array(21,-200,579,637),8208=>array(42,229,558,329),8209=>array(42,229,558,329),8210=>array(42,229,558,329),8211=>array(42,229,558,329),8212=>array(0,229,600,329),8213=>array(0,229,600,329),8214=>array(163,-21,437,579),8215=>array(0,-200,600,-19),8216=>array(300,344,455,636),8217=>array(147,331,302,623),8218=>array(192,-171,347,121),8219=>array(300,331,455,623),8220=>array(152,344,512,636),8221=>array(89,341,449,633),8222=>array(91,-171,451,121),8223=>array(126,331,486,623),8224=>array(94,-92,506,622),8225=>array(94,-92,506,622),8226=>array(150,154,449,453),8227=>array(169,114,446,416),8228=>array(223,-15,373,117),8229=>array(114,-15,485,117),8230=>array(25,-15,575,117),8231=>array(240,172,360,292),8240=>array(0,0,600,618),8241=>array(2,-9,594,614),8242=>array(147,331,351,623),8243=>array(83,331,480,623),8244=>array(19,331,576,623),8245=>array(147,331,351,623),8246=>array(83,331,479,623),8247=>array(19,331,577,623),8248=>array(140,-180,460,4),8249=>array(33,20,342,415),8250=>array(263,20,571,415),8251=>array(31,11,561,551),8252=>array(95,-15,506,638),8253=>array(119,-30,502,592),8254=>array(0,633,600,733),8255=>array(80,-194,520,-23),8256=>array(80,434,520,604),8257=>array(162,-200,438,280),8258=>array(-137,-42,736,747),8259=>array(57,24,543,511),8260=>array(21,102,580,500),8261=>array(248,-153,433,623),8262=>array(167,-153,352,623),8263=>array(0,-40,610,602),8264=>array(4,-15,606,638),8265=>array(-5,-15,617,638),8266=>array(75,-20,508,437),8267=>array(49,-174,558,583),8268=>array(66,111,540,485),8269=>array(60,111,534,485),8270=>array(83,-20,517,394),8271=>array(139,-145,350,417),8272=>array(80,3,520,604),8273=>array(83,-41,517,772),8274=>array(81,-12,515,800),8275=>array(115,183,485,300),8276=>array(80,-194,520,-24),8277=>array(42,229,558,329),8278=>array(94,-10,505,584),8279=>array(-21,331,692,623),8280=>array(0,-10,600,675),8281=>array(0,-10,600,584),8282=>array(240,-10,360,789),8283=>array(0,-200,600,800),8284=>array(42,0,558,560),8285=>array(240,-10,360,789),8286=>array(240,-10,360,789),8304=>array(168,370,432,769),8305=>array(164,370,436,800),8308=>array(143,370,410,750),8309=>array(148,366,431,755),8310=>array(159,368,427,767),8311=>array(167,370,432,751),8312=>array(168,370,432,769),8313=>array(163,370,428,769),8314=>array(163,413,437,688),8315=>array(163,518,437,583),8316=>array(163,489,437,664),8317=>array(251,322,387,800),8318=>array(213,322,349,800),8319=>array(133,370,466,669),8320=>array(168,-172,432,227),8321=>array(166,-162,434,229),8322=>array(149,-152,429,238),8323=>array(157,-162,442,237),8324=>array(143,-162,410,218),8325=>array(148,-166,431,223),8326=>array(159,-164,427,235),8327=>array(167,-152,432,229),8328=>array(168,-162,432,237),8329=>array(163,-162,428,237),8330=>array(163,-118,437,157),8331=>array(163,-13,437,52),8332=>array(163,-88,437,87),8333=>array(251,-200,387,278),8334=>array(213,-200,349,278),8336=>array(130,-176,483,163),8337=>array(119,-175,464,164),8338=>array(128,-175,472,164),8339=>array(114,-176,486,143),8340=>array(119,-175,464,164),8355=>array(10,0,550,583),8356=>array(33,0,550,598),8357=>array(-19,-142,623,598),8358=>array(0,0,600,583),8361=>array(-10,0,610,583),8362=>array(22,0,578,480),8363=>array(-7,-17,573,764),8364=>array(17,-14,585,597),8365=>array(0,0,600,583),8366=>array(42,0,558,583),8369=>array(13,0,598,583),8370=>array(33,-123,592,684),8371=>array(-21,0,621,583),8372=>array(0,-14,598,597),8373=>array(68,-123,538,684),8376=>array(42,0,558,597),8377=>array(60,-1,549,584),8448=>array(-6,-9,618,800),8449=>array(-9,-13,615,800),8451=>array(3,-14,598,745),8453=>array(5,-13,598,800),8454=>array(3,-10,648,800),8455=>array(62,-14,538,597),8457=>array(3,0,600,745),8462=>array(33,0,593,624),8465=>array(61,-40,545,588),8466=>array(55,0,550,598),8467=>array(75,-48,564,644),8470=>array(-14,0,612,583),8472=>array(27,-175,567,479),8476=>array(15,-27,586,604),8480=>array(-40,207,620,592),8481=>array(0,0,598,563),8482=>array(-33,220,620,583),8486=>array(29,0,571,583),8487=>array(29,0,571,583),8489=>array(128,-13,570,440),8490=>array(13,0,602,583),8491=>array(-21,0,621,800),8494=>array(41,-16,558,450),8498=>array(38,0,575,583),8501=>array(60,0,540,480),8502=>array(60,0,540,480),8503=>array(123,0,477,480),8504=>array(60,0,540,480),8506=>array(-80,-19,663,540),8507=>array(-27,0,626,563),8513=>array(20,1,579,612),8514=>array(25,0,563,583),8515=>array(25,0,563,583),8516=>array(21,0,579,583),8523=>array(76,-17,509,547),8525=>array(-30,-11,613,798),8526=>array(97,0,501,438),8531=>array(0,-20,600,638),8532=>array(-50,-20,633,638),8533=>array(-34,-25,642,638),8534=>array(-50,-25,642,638),8535=>array(-43,-25,642,637),8536=>array(-33,-25,642,627),8537=>array(-34,-12,603,638),8538=>array(-36,-12,603,624),8539=>array(-34,-17,622,638),8540=>array(-43,-17,622,637),8541=>array(-36,-17,622,624),8542=>array(7,-17,622,627),8543=>array(-34,51,484,638),8592=>array(30,139,570,423),8593=>array(157,11,442,552),8594=>array(30,139,570,424),8595=>array(158,11,443,552),8596=>array(10,139,590,423),8597=>array(158,-9,443,572),8598=>array(108,80,502,472),8599=>array(109,80,501,473),8600=>array(108,80,502,472),8601=>array(109,80,501,473),8612=>array(30,139,570,423),8613=>array(158,11,442,551),8614=>array(30,139,570,423),8615=>array(158,11,442,551),8633=>array(30,-19,570,553),8636=>array(30,222,570,396),8637=>array(30,51,570,225),8638=>array(303,1,477,541),8639=>array(123,1,297,541),8640=>array(30,231,570,405),8641=>array(30,52,570,226),8642=>array(300,1,474,541),8643=>array(126,1,300,541),8644=>array(30,6,570,575),8645=>array(15,20,585,561),8646=>array(30,8,570,576),8647=>array(30,-1,570,583),8648=>array(7,21,592,562),8649=>array(30,-1,570,584),8650=>array(8,21,593,562),8651=>array(30,22,570,446),8652=>array(30,20,570,451),8656=>array(15,37,570,457),8657=>array(90,-40,510,684),8658=>array(15,37,570,457),8659=>array(90,-70,510,654),8660=>array(0,37,600,457),8661=>array(90,-150,510,684),8704=>array(-21,0,621,583),8705=>array(54,-100,565,700),8706=>array(102,-16,524,590),8707=>array(13,0,550,583),8708=>array(13,-113,550,695),8709=>array(33,-113,567,639),8710=>array(15,0,585,583),8711=>array(15,0,585,583),8712=>array(16,5,564,555),8713=>array(16,-113,564,695),8714=>array(101,3,499,437),8715=>array(16,5,564,555),8716=>array(16,-113,564,695),8717=>array(101,0,499,434),8718=>array(150,0,450,500),8719=>array(21,-100,717,670),8720=>array(-117,-100,579,670),8721=>array(45,-97,537,671),8722=>array(42,230,558,330),8723=>array(42,0,558,624),8724=>array(42,-42,558,690),8725=>array(83,-113,517,695),8726=>array(83,-113,517,695),8727=>array(83,77,517,491),8728=>array(154,136,448,429),8729=>array(150,154,449,453),8730=>array(12,-60,600,697),8731=>array(0,-60,600,800),8732=>array(0,-60,600,800),8733=>array(51,124,564,500),8734=>array(3,124,597,500),8735=>array(60,0,553,513),8739=>array(249,-27,350,582),8741=>array(150,-27,450,582),8743=>array(70,-22,517,480),8744=>array(77,-30,524,472),8745=>array(71,-11,527,465),8746=>array(73,-11,528,465),8747=>array(76,-78,524,744),8748=>array(-14,-78,634,744),8756=>array(49,-6,549,458),8757=>array(49,-10,549,454),8758=>array(240,-9,360,458),8759=>array(50,-9,549,458),8764=>array(72,182,528,378),8776=>array(72,108,528,481),8800=>array(42,22,558,525),8801=>array(42,46,558,514),8804=>array(3,0,549,591),8805=>array(35,0,582,591),8834=>array(32,68,569,457),8835=>array(32,68,569,457),8836=>array(32,-113,569,588),8837=>array(32,-113,569,588),8838=>array(32,-16,569,536),8839=>array(41,-16,578,549),8869=>array(16,0,585,622),8898=>array(42,-39,557,710),8899=>array(43,-39,557,710),8976=>array(42,115,465,445),9001=>array(168,-149,425,627),9002=>array(175,-149,432,627),9251=>array(92,0,508,203),9472=>array(0,250,600,350),9473=>array(0,200,600,400),9474=>array(250,-200,350,800),9475=>array(200,-200,400,800),9476=>array(0,250,600,350),9477=>array(0,200,600,400),9478=>array(250,-200,350,800),9479=>array(200,-200,400,800),9480=>array(0,250,600,350),9481=>array(0,200,600,400),9482=>array(250,-200,350,800),9483=>array(200,-200,400,800),9484=>array(250,-200,600,350),9485=>array(250,-200,600,400),9486=>array(200,-200,600,350),9487=>array(200,-200,600,400),9488=>array(0,-200,350,350),9489=>array(0,-200,350,400),9490=>array(0,-200,400,350),9491=>array(0,-200,400,400),9492=>array(250,250,600,800),9493=>array(250,200,600,800),9494=>array(200,250,600,800),9495=>array(200,200,600,800),9496=>array(0,250,350,800),9497=>array(0,200,350,800),9498=>array(0,250,400,800),9499=>array(0,200,400,800),9500=>array(250,-200,600,800),9501=>array(250,-200,600,800),9502=>array(200,-200,600,800),9503=>array(200,-200,600,800),9504=>array(200,-200,600,800),9505=>array(200,-200,600,800),9506=>array(200,-200,600,800),9507=>array(200,-200,600,800),9508=>array(0,-200,350,800),9509=>array(0,-200,350,800),9510=>array(0,-200,400,800),9511=>array(0,-200,400,800),9512=>array(0,-200,400,800),9513=>array(0,-200,400,800),9514=>array(0,-200,400,800),9515=>array(0,-200,400,800),9516=>array(0,-200,600,350),9517=>array(0,-200,600,400),9518=>array(0,-200,600,400),9519=>array(0,-200,600,400),9520=>array(0,-200,600,350),9521=>array(0,-200,600,400),9522=>array(0,-200,600,400),9523=>array(0,-200,600,400),9524=>array(0,250,600,800),9525=>array(0,200,600,800),9526=>array(0,200,600,800),9527=>array(0,200,600,800),9528=>array(0,250,600,800),9529=>array(0,200,600,800),9530=>array(0,200,600,800),9531=>array(0,200,600,800),9532=>array(0,-200,600,800),9533=>array(0,-200,600,800),9534=>array(0,-200,600,800),9535=>array(0,-200,600,800),9536=>array(0,-200,600,800),9537=>array(0,-200,600,800),9538=>array(0,-200,600,800),9539=>array(0,-200,600,800),9540=>array(0,-200,600,800),9541=>array(0,-200,600,800),9542=>array(0,-200,600,800),9543=>array(0,-200,600,800),9544=>array(0,-200,600,800),9545=>array(0,-200,600,800),9546=>array(0,-200,600,800),9547=>array(0,-200,600,800),9548=>array(0,250,600,350),9549=>array(0,200,600,400),9550=>array(230,-200,370,800),9551=>array(180,-200,420,800),9552=>array(0,150,600,450),9553=>array(150,-200,450,800),9554=>array(250,-200,600,450),9555=>array(150,-200,600,350),9556=>array(150,-200,600,450),9557=>array(0,-200,350,450),9558=>array(0,-200,450,350),9559=>array(0,-200,450,450),9560=>array(250,150,600,800),9561=>array(150,250,600,800),9562=>array(150,150,600,800),9563=>array(0,150,350,800),9564=>array(0,250,450,800),9565=>array(0,150,450,800),9566=>array(250,-200,600,800),9567=>array(150,-200,600,800),9568=>array(150,-200,600,800),9569=>array(0,-200,350,800),9570=>array(0,-200,450,800),9571=>array(0,-200,450,800),9572=>array(0,-200,600,450),9573=>array(0,-200,600,350),9574=>array(0,-200,600,450),9575=>array(0,150,600,800),9576=>array(0,250,600,800),9577=>array(0,150,600,800),9578=>array(0,-200,600,800),9579=>array(0,-200,600,800),9580=>array(0,-200,600,800),9581=>array(250,-200,600,350),9582=>array(0,-200,350,350),9583=>array(0,250,350,800),9584=>array(250,250,600,800),9585=>array(0,-200,600,796),9586=>array(0,-200,600,800),9587=>array(0,-200,600,800),9588=>array(0,250,300,350),9589=>array(250,300,350,800),9590=>array(300,250,600,350),9591=>array(250,-200,350,300),9592=>array(0,200,300,400),9593=>array(200,300,400,800),9594=>array(300,200,600,400),9595=>array(200,-200,400,300),9596=>array(0,200,600,400),9597=>array(200,-200,400,800),9598=>array(0,200,600,400),9599=>array(200,-200,400,800),9600=>array(0,300,600,800),9601=>array(0,-200,600,-75),9602=>array(0,-200,600,50),9603=>array(0,-200,600,175),9604=>array(0,-200,600,300),9605=>array(0,-200,600,425),9606=>array(0,-200,600,550),9607=>array(0,-200,600,675),9608=>array(0,-200,600,800),9609=>array(0,-200,525,800),9610=>array(0,-200,450,800),9611=>array(0,-200,375,800),9612=>array(0,-200,300,800),9613=>array(0,-200,225,800),9614=>array(0,-200,150,800),9615=>array(0,-200,75,800),9616=>array(300,-200,600,800),9617=>array(0,-200,550,750),9618=>array(0,-200,600,750),9620=>array(0,675,600,800),9621=>array(525,-200,600,800),9632=>array(50,0,550,500),9633=>array(50,0,550,500),9635=>array(50,0,550,500),9636=>array(50,0,550,500),9637=>array(50,0,550,500),9638=>array(50,0,550,500),9639=>array(50,0,550,500),9640=>array(50,0,550,500),9641=>array(50,0,550,500),9642=>array(175,0,425,250),9643=>array(175,0,425,250),9644=>array(50,0,550,300),9645=>array(50,0,550,300),9646=>array(150,0,450,500),9647=>array(150,0,450,500),9648=>array(25,0,575,300),9649=>array(25,0,575,300),9650=>array(35,0,565,454),9651=>array(35,0,565,454),9652=>array(168,0,432,226),9653=>array(168,0,432,226),9654=>array(84,0,543,530),9655=>array(84,0,543,530),9656=>array(199,0,428,266),9657=>array(199,0,428,266),9658=>array(121,0,506,266),9660=>array(35,0,565,454),9661=>array(35,0,565,454),9662=>array(168,0,432,226),9663=>array(168,0,432,226),9664=>array(84,0,543,530),9665=>array(84,0,543,530),9666=>array(199,0,428,266),9667=>array(199,0,428,266),9668=>array(94,0,479,266),9670=>array(35,0,565,530),9671=>array(35,0,565,530),9673=>array(33,-2,567,532),9674=>array(72,-19,529,593),9675=>array(33,-2,567,532),9677=>array(33,-2,567,532),9679=>array(33,-2,567,532),9680=>array(33,-2,567,532),9681=>array(33,-2,567,532),9682=>array(33,-2,567,532),9683=>array(33,-2,567,532),9684=>array(33,-2,567,532),9685=>array(33,-2,567,532),9686=>array(35,0,300,530),9687=>array(302,0,567,530),9688=>array(0,-200,600,800),9689=>array(0,0,600,600),9698=>array(50,0,550,500),9699=>array(50,0,550,500),9700=>array(50,0,550,500),9701=>array(50,0,550,500),9702=>array(172,138,428,394),9703=>array(50,0,550,500),9704=>array(50,0,550,500),9705=>array(50,0,550,500),9706=>array(50,0,550,500),9707=>array(50,0,550,500),9708=>array(35,0,565,454),9709=>array(35,0,565,454),9710=>array(35,0,565,454),9711=>array(0,0,600,600),9712=>array(50,0,550,500),9713=>array(50,0,550,500),9714=>array(50,0,550,500),9715=>array(50,0,550,500),9716=>array(33,-2,567,532),9717=>array(33,-2,567,532),9718=>array(33,-2,567,532),9719=>array(33,-2,567,532),9735=>array(88,0,430,560),9736=>array(83,-20,561,572),9737=>array(33,-2,567,532),9776=>array(50,0,550,500),9777=>array(50,0,550,500),9778=>array(50,0,550,500),9779=>array(50,0,550,500),9780=>array(50,0,550,500),9781=>array(50,0,550,500),9782=>array(50,0,550,500),9783=>array(50,0,550,500),9785=>array(33,-2,567,532),9786=>array(33,-2,567,532),9787=>array(33,-2,567,532),9824=>array(62,-10,539,617),9825=>array(34,-55,566,586),9826=>array(71,-31,530,601),9827=>array(4,-11,596,580),9828=>array(62,-10,539,617),9829=>array(34,-56,566,585),9830=>array(68,-31,527,601),9831=>array(3,-11,595,580),9833=>array(112,-17,332,583),9834=>array(112,-17,522,583),9835=>array(48,-17,524,570),9836=>array(48,-17,524,570),9837=>array(89,-30,461,656),9838=>array(100,-187,500,623),9839=>array(41,-190,559,624),11798=>array(56,30,558,685),11799=>array(68,4,532,525),11800=>array(108,-13,491,609),11802=>array(42,229,558,584),11803=>array(62,179,538,581),11806=>array(62,179,538,481),11807=>array(62,71,538,385),11816=>array(74,-153,549,632),11817=>array(77,-153,552,632),11818=>array(60,-10,530,514),11819=>array(2,36,597,448),11820=>array(2,37,597,449),11821=>array(40,20,560,525),11822=>array(104,-15,517,598),11824=>array(172,138,428,394),42888=>array(125,-88,476,76),42889=>array(225,-15,375,437),42890=>array(171,138,429,422),42891=>array(220,179,381,679),42892=>array(220,275,381,679),64256=>array(3,0,594,623),64257=>array(61,0,551,623),64258=>array(8,0,591,623),64285=>array(144,89,366,480),64287=>array(42,103,536,480),64288=>array(48,0,546,480),64298=>array(51,0,574,609),64299=>array(39,0,569,610),64300=>array(51,0,574,609),64301=>array(39,0,569,610),64302=>array(60,-95,540,480),64303=>array(60,-200,540,480),64304=>array(60,-112,540,480),64305=>array(60,0,540,480),64306=>array(123,0,477,480),64307=>array(60,0,540,480),64308=>array(60,0,540,480),64309=>array(150,0,378,480),64310=>array(123,0,477,480),64312=>array(44,0,524,480),64313=>array(144,190,366,480),64314=>array(60,-200,500,480),64315=>array(60,0,500,480),64316=>array(60,0,540,629),64318=>array(25,0,540,480),64320=>array(123,0,445,480),64321=>array(60,0,540,480),64323=>array(60,-200,540,480),64324=>array(60,0,541,480),64326=>array(48,0,528,480),64327=>array(50,-200,530,480),64328=>array(60,0,540,480),64329=>array(51,0,569,480),64330=>array(28,0,540,480),64331=>array(150,0,378,609),64332=>array(60,0,540,593),64333=>array(60,0,500,593),64334=>array(60,0,541,593),64335=>array(60,0,540,629),65532=>array(20,1,582,637),65533=>array(-43,-147,643,800),65535=>array(20,-110,580,673)); +$cw=array(0=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600,652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>600,769=>600,770=>600,771=>600,772=>600,773=>600,774=>600,775=>600,776=>600,777=>600,778=>600,779=>600,780=>600,781=>600,782=>600,783=>600,784=>600,785=>600,786=>600,787=>600,788=>600,789=>600,790=>600,791=>600,792=>600,793=>600,794=>600,795=>600,796=>600,797=>600,798=>600,799=>600,800=>600,801=>600,802=>600,803=>600,804=>600,805=>600,806=>600,807=>600,808=>600,809=>600,810=>600,811=>600,812=>600,813=>600,814=>600,815=>600,816=>600,817=>600,818=>600,819=>600,820=>600,821=>600,822=>600,823=>600,824=>600,825=>600,826=>600,827=>600,828=>600,829=>600,830=>600,831=>600,832=>600,833=>600,834=>600,835=>600,836=>600,837=>600,838=>600,839=>600,840=>600,841=>600,842=>600,843=>600,844=>600,845=>600,846=>600,847=>600,848=>600,849=>600,850=>600,851=>600,852=>600,853=>600,854=>600,855=>600,856=>600,857=>600,858=>600,859=>600,860=>600,861=>600,862=>600,863=>600,864=>600,865=>600,866=>600,867=>600,868=>600,869=>600,870=>600,871=>600,872=>600,873=>600,874=>600,875=>600,876=>600,877=>600,878=>600,879=>600,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,989=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>600,1157=>600,1158=>600,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1456=>600,1457=>600,1458=>600,1459=>600,1460=>600,1461=>600,1462=>600,1463=>600,1464=>600,1465=>600,1467=>600,1468=>600,1469=>600,1470=>600,1471=>600,1472=>600,1473=>600,1474=>600,1475=>600,1476=>600,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>600,8205=>600,8206=>600,8207=>600,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8357=>600,8358=>600,8361=>600,8362=>600,8363=>600,8364=>600,8365=>600,8366=>600,8369=>600,8370=>600,8371=>600,8372=>600,8373=>600,8376=>600,8377=>600,8448=>600,8449=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8462=>600,8465=>600,8466=>600,8467=>600,8470=>600,8472=>600,8476=>600,8480=>600,8481=>600,8482=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8612=>600,8613=>600,8614=>600,8615=>600,8633=>600,8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8735=>600,8739=>600,8741=>600,8743=>600,8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,8756=>600,8757=>600,8758=>600,8759=>600,8764=>600,8776=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,8869=>600,8898=>600,8899=>600,8976=>600,9001=>600,9002=>600,9251=>600,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9673=>600,9674=>600,9675=>600,9677=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,9718=>600,9719=>600,9735=>600,9736=>600,9737=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,11798=>600,11799=>600,11800=>600,11802=>600,11803=>600,11806=>600,11807=>600,11816=>600,11817=>600,11818=>600,11819=>600,11820=>600,11821=>600,11822=>600,11824=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600,64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65529=>600,65530=>600,65531=>600,65532=>600,65533=>600,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freemonob.z b/tcpdf/fonts/freemonob.z new file mode 100644 index 0000000..d206e0f Binary files /dev/null and b/tcpdf/fonts/freemonob.z differ diff --git a/tcpdf/fonts/freemonobi.ctg.z b/tcpdf/fonts/freemonobi.ctg.z new file mode 100644 index 0000000..1f38cc3 Binary files /dev/null and b/tcpdf/fonts/freemonobi.ctg.z differ diff --git a/tcpdf/fonts/freemonobi.php b/tcpdf/fonts/freemonobi.php new file mode 100644 index 0000000..c2d9ec5 --- /dev/null +++ b/tcpdf/fonts/freemonobi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeMonoBoldOblique'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=295360; +$enc=''; +$file='freemonobi.z'; +$ctg='freemonobi.ctg.z'; +$desc=array('Flags'=>97,'FontBBox'=>'[-642 -200 834 800]','ItalicAngle'=>-12,'Ascent'=>800,'Descent'=>-200,'Leading'=>0,'CapHeight'=>583,'XHeight'=>437,'StemV'=>123,'StemH'=>53,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cbbox=array(0=>array(-3,-110,723,673),33=>array(234,-15,501,638),34=>array(243,312,592,602),35=>array(101,-92,623,675),36=>array(100,-123,610,684),37=>array(131,-15,599,617),38=>array(102,-14,557,550),39=>array(343,312,492,602),40=>array(304,-153,613,632),41=>array(94,-153,403,632),42=>array(178,208,614,622),43=>array(101,0,619,560),44=>array(118,-158,379,134),45=>array(101,229,619,329),46=>array(234,-15,387,117),47=>array(69,-113,656,695),48=>array(130,-15,602,638),49=>array(92,0,530,638),50=>array(54,0,602,638),51=>array(80,-15,609,638),52=>array(104,0,579,622),53=>array(83,-15,610,622),54=>array(154,-15,663,638),55=>array(184,-1,640,622),56=>array(114,-15,608,638),57=>array(115,-15,624,638),58=>array(234,-15,455,437),59=>array(118,-158,431,437),60=>array(102,54,642,501),61=>array(81,138,638,422),62=>array(76,53,616,500),63=>array(197,-15,608,598),64=>array(98,-152,582,620),65=>array(-11,0,633,583),66=>array(22,0,620,583),67=>array(70,-14,653,597),68=>array(23,0,622,583),69=>array(13,0,642,583),70=>array(3,0,654,583),71=>array(59,-14,647,597),72=>array(12,0,655,583),73=>array(63,0,602,583),74=>array(4,-14,667,583),75=>array(2,0,667,583),76=>array(22,0,596,583),77=>array(-10,0,728,583),78=>array(21,0,706,583),79=>array(55,-14,629,597),80=>array(23,0,617,583),81=>array(55,-145,629,597),82=>array(3,0,611,583),83=>array(62,-14,624,597),84=>array(81,0,642,583),85=>array(80,-14,675,583),86=>array(41,0,685,583),87=>array(58,0,685,583),88=>array(-1,0,672,583),89=>array(78,0,644,583),90=>array(53,0,608,583),91=>array(219,-148,598,627),92=>array(219,-113,504,695),93=>array(104,-148,483,627),94=>array(161,325,598,652),95=>array(-43,-200,578,-100),96=>array(274,496,444,666),97=>array(65,-16,583,450),98=>array(2,-14,623,624),99=>array(73,-16,606,450),100=>array(74,-14,664,624),101=>array(74,-16,600,450),102=>array(84,0,691,623),103=>array(63,-200,665,451),104=>array(33,0,593,624),105=>array(72,0,550,623),106=>array(64,-200,561,623),107=>array(42,0,606,624),108=>array(72,0,550,624),109=>array(-9,0,635,450),110=>array(33,0,583,450),111=>array(74,-16,599,450),112=>array(-41,-200,623,450),113=>array(45,-200,666,450),114=>array(44,0,630,449),115=>array(83,-16,592,450),116=>array(94,-16,547,591),117=>array(94,-13,603,437),118=>array(61,0,663,437),119=>array(62,0,664,437),120=>array(30,0,641,437),121=>array(-22,-200,652,437),122=>array(85,0,599,437),123=>array(179,-153,576,623),124=>array(227,-153,472,622),125=>array(124,-153,519,623),126=>array(114,179,606,385),160=>array(0,0,0,0),161=>array(186,-200,453,453),162=>array(144,-44,593,661),163=>array(64,0,571,598),164=>array(96,64,626,519),165=>array(133,0,693,580),166=>array(227,-153,472,622),167=>array(45,-170,643,583),168=>array(261,534,592,654),169=>array(48,-15,675,598),170=>array(168,162,559,595),171=>array(80,20,654,415),172=>array(125,115,560,445),173=>array(101,229,619,329),174=>array(48,-15,675,598),175=>array(249,546,600,626),176=>array(210,243,568,596),177=>array(52,0,640,624),178=>array(222,369,558,759),179=>array(239,368,564,767),180=>array(344,496,537,660),181=>array(72,-153,603,438),182=>array(108,-174,672,583),183=>array(290,182,413,302),184=>array(150,-200,388,0),185=>array(244,369,514,760),186=>array(166,162,566,595),187=>array(43,20,617,415),188=>array(37,-20,641,648),189=>array(25,0,685,647),190=>array(18,0,653,644),191=>array(75,-200,486,413),192=>array(-11,0,633,800),193=>array(-11,0,633,799),194=>array(-11,0,633,800),195=>array(-11,0,633,782),196=>array(-11,0,633,777),197=>array(-11,0,633,799),198=>array(-10,0,717,583),199=>array(80,-200,663,597),200=>array(13,0,642,800),201=>array(13,0,642,800),202=>array(13,0,642,800),203=>array(13,0,642,777),204=>array(63,0,602,799),205=>array(63,0,602,799),206=>array(63,0,602,799),207=>array(63,0,602,777),208=>array(23,0,622,583),209=>array(21,0,706,782),210=>array(55,-14,629,800),211=>array(55,-14,629,800),212=>array(55,-14,629,800),213=>array(55,-14,629,782),214=>array(55,-14,629,777),215=>array(126,80,592,480),216=>array(-1,-70,712,638),217=>array(80,-14,675,800),218=>array(80,-14,675,799),219=>array(80,-14,675,800),220=>array(80,-14,675,777),221=>array(78,0,644,799),222=>array(23,0,588,583),223=>array(22,-16,569,623),224=>array(65,-16,583,667),225=>array(65,-16,583,661),226=>array(65,-16,583,662),227=>array(65,-16,585,635),228=>array(65,-16,583,630),229=>array(65,-16,583,677),230=>array(3,-16,654,450),231=>array(72,-200,606,450),232=>array(74,-16,600,666),233=>array(74,-16,600,661),234=>array(74,-16,600,674),235=>array(74,-16,600,630),236=>array(72,0,550,668),237=>array(72,0,550,662),238=>array(72,0,550,674),239=>array(72,0,550,630),240=>array(83,-16,617,646),241=>array(33,0,589,635),242=>array(74,-16,599,666),243=>array(74,-16,599,659),244=>array(74,-16,599,662),245=>array(74,-16,599,635),246=>array(74,-16,599,630),247=>array(101,28,619,532),248=>array(2,-70,654,494),249=>array(94,-13,603,668),250=>array(94,-13,603,661),251=>array(94,-13,603,661),252=>array(94,-13,603,630),253=>array(-22,-200,652,661),254=>array(-41,-200,623,624),255=>array(-22,-200,652,630),256=>array(-11,0,633,737),257=>array(65,-16,586,590),258=>array(-11,0,633,799),259=>array(65,-16,584,664),260=>array(-11,-200,633,583),261=>array(65,-200,583,450),262=>array(70,-14,653,800),263=>array(73,-16,606,662),264=>array(70,-14,653,800),265=>array(73,-16,606,674),266=>array(70,-14,653,777),267=>array(73,-16,606,630),268=>array(70,-14,653,800),269=>array(73,-16,606,662),270=>array(23,0,622,800),271=>array(-16,-14,758,643),272=>array(23,0,622,583),273=>array(34,-14,672,624),274=>array(13,0,642,737),275=>array(74,-16,600,590),276=>array(13,0,642,776),277=>array(74,-16,600,664),278=>array(13,0,642,757),279=>array(74,-16,600,630),280=>array(23,-200,652,583),281=>array(74,-200,600,450),282=>array(13,0,642,800),283=>array(74,-16,609,661),284=>array(59,-14,647,787),285=>array(63,-200,665,674),286=>array(59,-14,647,800),287=>array(63,-200,665,664),288=>array(59,-14,647,757),289=>array(63,-200,665,631),290=>array(59,-200,647,597),291=>array(63,-200,665,662),292=>array(12,0,655,799),293=>array(33,0,692,799),294=>array(1,0,643,583),295=>array(6,0,566,624),296=>array(63,0,624,782),297=>array(72,0,553,635),298=>array(63,0,602,737),299=>array(72,0,554,590),300=>array(63,0,609,800),301=>array(72,0,557,664),302=>array(93,-199,632,583),303=>array(72,-200,550,623),304=>array(63,0,602,757),305=>array(72,0,550,437),306=>array(2,-14,726,583),307=>array(19,-200,668,623),308=>array(11,-14,692,800),309=>array(64,-200,587,661),310=>array(2,-199,667,583),311=>array(42,-199,606,624),312=>array(18,0,582,437),313=>array(22,0,596,800),314=>array(72,0,550,800),315=>array(22,-199,596,583),316=>array(72,-199,550,624),317=>array(22,0,719,619),318=>array(72,0,698,638),319=>array(22,0,596,583),320=>array(72,0,641,624),321=>array(43,0,616,583),322=>array(72,0,557,624),323=>array(21,0,706,800),324=>array(33,0,583,674),325=>array(21,-199,706,583),326=>array(33,-199,583,450),327=>array(21,0,706,800),328=>array(33,0,593,662),329=>array(33,0,583,661),330=>array(32,-123,642,637),331=>array(6,-200,548,450),332=>array(55,-14,629,737),333=>array(74,-16,599,590),334=>array(55,-14,629,781),335=>array(74,-16,599,663),336=>array(55,-14,680,800),337=>array(74,-16,613,666),338=>array(34,0,717,583),339=>array(28,-16,666,450),340=>array(3,0,611,800),341=>array(44,0,630,674),342=>array(3,-199,611,583),343=>array(44,-199,630,449),344=>array(3,0,611,799),345=>array(44,0,630,662),346=>array(62,-14,624,800),347=>array(83,-16,592,661),348=>array(62,-14,624,800),349=>array(83,-16,593,674),350=>array(72,-200,634,597),351=>array(83,-200,592,450),352=>array(62,-14,624,800),353=>array(83,-16,599,660),354=>array(121,-200,682,583),355=>array(94,-200,547,591),356=>array(81,0,642,800),357=>array(94,-16,667,680),358=>array(60,0,620,583),359=>array(29,-16,516,591),360=>array(80,-14,675,782),361=>array(94,-13,603,635),362=>array(80,-14,675,737),363=>array(94,-13,603,590),364=>array(80,-14,675,800),365=>array(94,-13,603,663),366=>array(80,-14,675,800),367=>array(94,-13,603,701),368=>array(80,-14,675,800),369=>array(94,-13,608,664),370=>array(90,-200,685,583),371=>array(94,-200,603,437),372=>array(58,0,685,800),373=>array(62,0,664,674),374=>array(78,0,644,800),375=>array(-22,-200,652,674),376=>array(78,0,644,777),377=>array(53,0,608,800),378=>array(85,0,599,662),379=>array(53,0,608,777),380=>array(85,0,599,630),381=>array(53,0,621,800),382=>array(85,0,601,662),383=>array(64,0,671,623),384=>array(6,-14,628,624),385=>array(40,0,638,583),386=>array(10,0,662,583),387=>array(6,-14,628,624),388=>array(24,0,606,615),389=>array(6,-16,621,615),390=>array(44,-14,627,597),391=>array(19,-14,731,679),392=>array(36,-16,698,546),393=>array(23,0,622,583),394=>array(38,0,650,583),395=>array(44,0,686,583),396=>array(29,-14,619,624),397=>array(-6,-200,570,454),398=>array(41,0,670,583),399=>array(65,-17,628,601),400=>array(80,-14,623,597),401=>array(-96,-123,695,583),402=>array(29,-123,657,638),403=>array(48,-14,762,676),404=>array(107,-22,658,588),405=>array(-43,-13,671,624),406=>array(196,-16,538,583),407=>array(90,0,630,583),408=>array(6,1,722,588),409=>array(34,0,599,638),410=>array(65,0,573,624),411=>array(24,0,585,624),412=>array(32,-13,707,583),413=>array(-137,-123,708,583),414=>array(56,-200,599,450),415=>array(64,-14,637,597),416=>array(46,-14,693,664),417=>array(30,-16,640,520),418=>array(4,-15,639,628),419=>array(0,-16,656,486),420=>array(43,0,645,583),421=>array(-58,-200,608,638),422=>array(14,-200,541,583),423=>array(80,-14,599,597),424=>array(96,-16,576,450),425=>array(64,0,642,583),426=>array(176,-118,541,606),427=>array(95,-200,549,591),428=>array(84,0,671,583),429=>array(89,-16,542,638),430=>array(91,-123,651,583),431=>array(59,-14,747,697),432=>array(35,-13,693,551),433=>array(71,-18,662,596),434=>array(108,-19,675,588),435=>array(58,0,714,583),436=>array(-49,-200,733,551),437=>array(73,0,628,583),438=>array(83,0,596,437),439=>array(46,-50,610,583),440=>array(57,-50,621,583),441=>array(88,-183,531,442),442=>array(44,-200,548,442),443=>array(63,0,603,598),444=>array(91,-23,601,589),445=>array(102,-26,531,442),446=>array(114,-22,565,589),447=>array(-34,-200,636,463),448=>array(227,-153,472,622),449=>array(132,-153,568,622),450=>array(69,-149,651,629),451=>array(234,-15,501,638),452=>array(8,0,727,776),453=>array(8,0,730,669),454=>array(37,-16,748,726),455=>array(15,-14,716,583),456=>array(33,-200,659,623),457=>array(18,-200,627,624),458=>array(2,-18,751,587),459=>array(-4,-200,685,623),460=>array(-2,-200,678,623),461=>array(-11,0,633,800),462=>array(65,-16,601,654),463=>array(63,0,609,800),464=>array(72,0,565,654),465=>array(55,-14,629,800),466=>array(74,-16,599,654),467=>array(80,-14,675,800),468=>array(94,-13,603,654),469=>array(77,-14,659,798),470=>array(94,-13,627,774),471=>array(88,-14,670,800),472=>array(94,-13,603,797),473=>array(78,-14,660,800),474=>array(94,-13,630,800),475=>array(87,-14,669,800),476=>array(94,-13,603,800),477=>array(74,-16,600,450),478=>array(-11,0,633,798),479=>array(65,-16,621,774),480=>array(-14,-1,632,800),481=>array(65,-16,622,761),482=>array(-10,0,717,717),483=>array(3,-16,654,590),484=>array(58,-14,636,597),485=>array(53,-200,656,451),486=>array(59,-14,660,800),487=>array(63,-200,665,655),488=>array(2,0,667,800),489=>array(42,0,642,800),490=>array(55,-200,629,597),491=>array(74,-200,599,450),492=>array(55,-200,629,717),493=>array(74,-200,599,590),494=>array(46,-50,610,800),495=>array(55,-183,573,644),496=>array(64,-200,599,641),497=>array(8,0,705,587),498=>array(8,0,675,588),499=>array(37,-16,660,629),500=>array(59,-14,647,800),501=>array(63,-200,665,655),502=>array(12,0,644,583),503=>array(-27,-200,675,597),504=>array(21,0,706,800),505=>array(33,0,583,660),506=>array(-11,0,633,800),507=>array(65,-16,583,800),508=>array(-10,0,717,800),509=>array(3,-16,654,654),510=>array(-1,-70,712,799),511=>array(2,-70,654,698),512=>array(-11,0,633,800),513=>array(65,-16,583,680),514=>array(-11,0,633,755),515=>array(65,-16,583,631),516=>array(13,0,642,800),517=>array(74,-16,600,680),518=>array(13,0,642,756),519=>array(74,-16,600,625),520=>array(63,0,602,800),521=>array(72,0,550,680),522=>array(63,0,602,755),523=>array(72,0,570,631),524=>array(55,-14,629,800),525=>array(74,-16,599,680),526=>array(55,-14,629,760),527=>array(74,-16,599,631),528=>array(3,0,611,798),529=>array(44,0,630,680),530=>array(3,0,611,757),531=>array(44,0,630,631),532=>array(80,-14,675,798),533=>array(94,-13,603,680),534=>array(80,-14,675,758),535=>array(94,-13,603,631),536=>array(62,-199,624,597),537=>array(83,-199,592,450),538=>array(81,-199,642,583),539=>array(94,-199,547,591),540=>array(86,-45,605,601),541=>array(137,-141,569,456),542=>array(12,0,655,800),543=>array(33,0,636,799),544=>array(11,-200,600,637),548=>array(73,-200,628,583),549=>array(85,-200,599,437),550=>array(-11,0,633,766),551=>array(65,-16,583,630),552=>array(13,-200,642,583),553=>array(64,-200,590,450),554=>array(45,-12,631,798),555=>array(74,-16,634,770),556=>array(45,-12,619,800),557=>array(74,-16,614,767),558=>array(55,-14,629,777),559=>array(74,-16,599,630),560=>array(48,-12,618,800),561=>array(74,-16,609,752),562=>array(78,0,644,717),563=>array(-22,-200,652,570),567=>array(64,-200,561,437),592=>array(67,-13,616,453),593=>array(26,-14,577,467),594=>array(84,-18,635,463),595=>array(5,-14,627,638),596=>array(51,-16,590,450),598=>array(29,-200,655,624),599=>array(8,-14,782,638),600=>array(43,-16,599,450),601=>array(83,-16,609,450),603=>array(84,-16,580,450),604=>array(74,-16,565,450),607=>array(59,-200,556,437),608=>array(28,-200,782,638),609=>array(86,-200,610,462),613=>array(81,-189,641,435),614=>array(14,0,575,638),615=>array(36,-200,578,638),616=>array(75,0,554,623),617=>array(141,-16,514,437),618=>array(113,0,568,437),619=>array(65,0,599,624),621=>array(221,-200,514,624),623=>array(29,-13,673,437),624=>array(37,-200,682,437),625=>array(-6,-200,638,450),626=>array(-119,-200,597,450),627=>array(6,-200,652,450),628=>array(68,0,620,437),629=>array(84,-16,609,450),633=>array(35,-12,621,437),634=>array(25,-12,653,637),635=>array(34,-200,620,437),636=>array(-5,-200,623,449),637=>array(132,-200,623,449),638=>array(95,0,588,450),639=>array(65,-200,500,450),640=>array(38,0,485,437),641=>array(85,0,603,437),642=>array(39,-200,565,450),643=>array(-11,-123,617,638),644=>array(-52,-200,670,638),645=>array(118,-123,502,644),647=>array(125,-16,578,591),648=>array(113,-200,564,591),649=>array(10,-13,571,437),652=>array(7,0,609,437),653=>array(6,0,608,437),654=>array(0,0,674,637),656=>array(20,-199,623,437),657=>array(90,-98,593,442),658=>array(55,-183,548,442),659=>array(95,-200,548,442),660=>array(116,0,545,598),661=>array(123,0,568,598),662=>array(76,-15,505,583),663=>array(19,-200,641,597),664=>array(44,-14,617,597),665=>array(56,1,568,442),666=>array(101,-21,593,456),667=>array(35,-21,674,517),668=>array(43,0,653,437),669=>array(86,-186,562,649),670=>array(78,-189,642,435),671=>array(29,0,523,437),672=>array(30,-200,803,638),673=>array(131,0,595,598),674=>array(163,0,608,598),688=>array(184,360,562,800),689=>array(168,361,546,800),690=>array(213,225,552,800),691=>array(213,359,611,688),692=>array(183,353,580,682),693=>array(203,231,600,683),694=>array(190,361,670,778),695=>array(205,359,608,681),696=>array(165,239,616,682),697=>array(327,461,519,645),698=>array(242,461,584,645),699=>array(309,496,479,666),700=>array(304,496,497,660),701=>array(324,440,478,664),702=>array(383,486,498,667),703=>array(333,486,448,667),704=>array(283,358,563,766),705=>array(277,358,576,766),706=>array(287,570,577,800),707=>array(290,570,595,800),708=>array(280,570,536,800),709=>array(329,570,590,800),710=>array(218,497,570,661),711=>array(257,497,609,661),712=>array(344,465,454,660),713=>array(249,546,600,626),714=>array(332,496,525,660),715=>array(274,496,444,666),716=>array(344,-200,454,-5),717=>array(108,-114,459,-34),718=>array(221,-194,391,-24),719=>array(136,-192,329,-28),720=>array(211,0,466,437),721=>array(282,245,466,437),722=>array(295,198,410,379),723=>array(313,198,428,379),724=>array(316,511,516,644),725=>array(330,511,530,644),726=>array(329,508,529,704),727=>array(329,571,529,641),728=>array(234,503,586,656),729=>array(-235,534,-112,654),730=>array(309,496,498,677),731=>array(223,-200,434,0),732=>array(214,531,595,648),733=>array(239,498,608,662),734=>array(207,237,502,439),735=>array(335,514,518,677),736=>array(249,230,627,682),737=>array(213,360,536,800),738=>array(230,359,574,700),739=>array(196,360,610,682),740=>array(296,374,598,800),741=>array(157,-25,625,800),742=>array(135,-37,617,800),743=>array(94,-37,617,800),744=>array(60,-37,617,800),745=>array(28,-25,617,800),746=>array(70,-25,538,715),747=>array(66,-35,558,404),748=>array(92,-199,444,-35),749=>array(148,503,715,734),750=>array(190,331,620,623),751=>array(124,-199,476,-35),752=>array(280,-200,536,30),753=>array(287,-200,577,30),754=>array(127,-200,417,30),755=>array(309,-186,498,-5),756=>array(336,222,506,392),757=>array(268,222,574,392),758=>array(281,205,474,369),759=>array(100,-184,481,-67),760=>array(234,309,455,761),761=>array(307,518,508,701),762=>array(322,518,515,701),763=>array(84,-65,277,118),764=>array(138,-67,339,116),765=>array(59,-200,494,-22),766=>array(59,-200,444,-22),767=>array(-3,-200,565,29),768=>array(-326,496,-156,666),769=>array(-256,496,-63,660),770=>array(-382,497,-30,661),771=>array(-386,531,-5,648),772=>array(-351,546,0,626),773=>array(-443,546,50,626),774=>array(-335,503,17,656),775=>array(-235,534,-112,654),776=>array(-320,534,11,654),777=>array(-293,486,-102,682),778=>array(-248,496,-59,677),779=>array(-313,498,56,662),780=>array(-333,497,19,661),781=>array(-187,514,-86,713),782=>array(-277,514,-7,713),783=>array(-403,496,-60,666),784=>array(-366,503,-14,754),785=>array(-323,471,29,624),786=>array(-106,496,64,666),787=>array(-62,484,131,648),788=>array(-114,452,40,676),789=>array(-69,530,124,694),790=>array(-371,-193,-201,-23),791=>array(-403,-194,-210,-30),792=>array(-390,-200,-234,-24),793=>array(-374,-200,-218,-24),794=>array(37,510,230,693),795=>array(-61,483,128,698),796=>array(-404,-179,-289,2),797=>array(-413,-200,-213,-67),798=>array(-398,-200,-198,-67),799=>array(-432,-200,-232,-4),800=>array(-405,-136,-205,-66),801=>array(-572,-200,-250,0),802=>array(-356,-200,-76,0),803=>array(-407,-176,-284,-56),804=>array(-496,-170,-165,-50),805=>array(-427,-198,-238,-17),806=>array(-437,-191,-265,-21),807=>array(-450,-200,-212,0),808=>array(-377,-200,-166,0),809=>array(-371,-200,-270,-1),810=>array(-474,-199,-162,-31),811=>array(-495,-173,-138,-43),812=>array(-476,-184,-124,-20),813=>array(-508,-200,-156,-36),814=>array(-455,-173,-103,-20),815=>array(-500,-200,-148,-47),816=>array(-490,-168,-109,-51),817=>array(-487,-139,-136,-59),818=>array(-642,-200,-21,-100),819=>array(-642,-200,-3,-19),820=>array(-373,201,8,318),821=>array(-349,289,2,369),822=>array(-511,205,7,305),823=>array(-415,222,-26,456),824=>array(-536,180,103,534),825=>array(-382,-200,-267,-19),826=>array(-474,-200,-163,-32),827=>array(-424,-200,-214,-23),828=>array(-495,-198,-137,-53),829=>array(-259,501,-76,664),830=>array(-258,485,-120,722),831=>array(-469,619,170,800),832=>array(-228,496,-58,666),833=>array(-207,496,-14,660),834=>array(-335,531,46,648),835=>array(-208,484,-15,648),836=>array(-336,496,21,712),837=>array(-322,-200,-43,0),838=>array(-316,477,-5,645),839=>array(-514,-200,-139,-11),840=>array(-443,-200,-184,-1),841=>array(-404,-200,-211,-17),842=>array(-350,502,35,666),843=>array(-378,463,3,780),844=>array(-344,491,66,749),845=>array(-465,-200,-174,-39),846=>array(-411,-194,-267,-24),848=>array(-310,459,-5,689),849=>array(-137,511,-22,692),850=>array(-335,487,17,734),851=>array(-413,-200,-230,-37),852=>array(-394,-200,-104,30),853=>array(-434,-200,-144,30),854=>array(-576,-200,-53,30),855=>array(-207,486,-92,667),856=>array(-235,534,-112,654),857=>array(-431,-200,-212,8),858=>array(-461,-200,-157,-11),859=>array(-258,477,-60,684),860=>array(-400,-200,388,24),861=>array(-254,476,534,700),862=>array(-193,512,428,612),863=>array(-343,-195,278,-95),864=>array(-432,-166,329,-49),865=>array(-292,416,496,640),866=>array(-311,-200,276,-13),867=>array(-288,468,-64,669),868=>array(-301,468,-74,669),869=>array(-296,476,-89,745),870=>array(-296,468,-70,669),871=>array(-292,468,-72,663),872=>array(-299,466,-68,667),873=>array(-302,467,-47,743),874=>array(-308,476,-66,745),875=>array(-336,478,-58,672),876=>array(-307,478,-54,672),877=>array(-256,467,-61,729),878=>array(-298,474,-38,663),879=>array(-311,476,-48,665),884=>array(327,461,519,645),885=>array(147,-149,351,143),890=>array(243,-200,522,0),894=>array(118,-158,431,437),900=>array(79,460,272,624),901=>array(227,496,584,712),902=>array(-23,0,633,583),903=>array(302,304,455,437),904=>array(-34,0,711,585),905=>array(-41,0,689,584),906=>array(27,0,669,583),908=>array(-8,-14,637,597),910=>array(-66,0,702,587),911=>array(7,0,651,583),912=>array(164,-16,543,712),913=>array(-11,0,633,583),914=>array(22,0,620,583),915=>array(38,0,690,583),916=>array(-29,0,615,583),917=>array(24,0,653,583),918=>array(53,0,608,583),919=>array(12,0,655,583),920=>array(63,-14,637,597),921=>array(63,0,602,583),922=>array(2,0,667,583),923=>array(-16,0,628,583),924=>array(-10,0,728,583),925=>array(21,0,706,583),926=>array(35,0,677,583),927=>array(55,-14,629,597),928=>array(25,0,667,583),929=>array(39,0,633,583),931=>array(64,0,642,583),932=>array(81,0,642,583),933=>array(78,0,644,583),934=>array(48,0,651,583),935=>array(-1,0,672,583),936=>array(60,0,694,583),937=>array(30,0,639,583),938=>array(63,0,602,757),939=>array(78,0,644,757),940=>array(75,-14,626,696),941=>array(115,-16,589,675),942=>array(57,-200,599,675),943=>array(176,-16,549,675),944=>array(121,-16,700,715),945=>array(50,-14,601,467),946=>array(1,-200,591,623),947=>array(95,-200,655,437),948=>array(80,-16,656,638),949=>array(115,-16,589,450),950=>array(111,-200,624,624),951=>array(30,-200,572,450),952=>array(129,-15,599,623),953=>array(164,-16,537,437),954=>array(60,0,624,437),955=>array(25,0,586,624),956=>array(-9,-200,605,437),957=>array(94,0,625,437),958=>array(141,-200,609,637),959=>array(74,-16,599,450),960=>array(41,0,651,437),961=>array(-35,-200,616,450),962=>array(113,-20,571,458),963=>array(58,-16,654,450),964=>array(138,-16,588,437),965=>array(89,-16,668,437),966=>array(65,-200,633,450),967=>array(-18,-200,658,437),968=>array(41,-200,688,638),969=>array(47,-40,636,453),970=>array(164,-16,537,610),971=>array(89,-16,668,630),972=>array(74,-16,599,675),973=>array(89,-16,668,675),974=>array(47,-40,636,678),976=>array(117,-46,599,639),977=>array(105,-44,591,649),978=>array(82,0,681,563),979=>array(14,-25,710,589),980=>array(82,0,681,720),981=>array(22,-200,642,639),982=>array(40,-41,639,456),986=>array(63,-171,716,587),987=>array(79,-172,642,464),988=>array(22,-25,671,588),989=>array(1,-200,651,451),1008=>array(8,-26,661,442),1009=>array(57,-200,609,468),1012=>array(64,-14,637,597),1013=>array(189,-41,539,456),1024=>array(13,0,642,793),1025=>array(13,0,642,766),1026=>array(97,-187,614,582),1027=>array(10,0,662,790),1028=>array(28,-14,612,597),1029=>array(52,-14,614,597),1030=>array(63,0,602,583),1031=>array(63,0,602,764),1032=>array(4,-14,667,583),1033=>array(-63,0,638,583),1034=>array(-83,0,644,584),1035=>array(69,0,597,583),1036=>array(0,0,664,788),1037=>array(0,0,642,793),1038=>array(87,0,654,769),1039=>array(0,-99,642,583),1040=>array(-11,0,633,583),1041=>array(0,0,652,583),1042=>array(22,0,620,583),1043=>array(10,0,662,583),1044=>array(-19,-141,657,583),1045=>array(13,0,642,583),1046=>array(-31,0,726,583),1047=>array(62,-14,598,597),1048=>array(0,0,642,583),1049=>array(0,0,642,776),1050=>array(0,0,664,583),1051=>array(6,0,649,583),1052=>array(-10,0,728,583),1053=>array(12,0,655,583),1054=>array(35,-14,609,597),1055=>array(0,0,642,583),1056=>array(23,0,617,583),1057=>array(70,-14,653,597),1058=>array(81,0,642,583),1059=>array(87,0,654,583),1060=>array(36,0,639,583),1061=>array(-1,0,672,583),1062=>array(0,-141,642,583),1063=>array(87,0,593,583),1064=>array(-34,0,731,583),1065=>array(-34,-141,731,583),1066=>array(20,0,651,583),1067=>array(-33,0,727,583),1068=>array(48,0,598,583),1069=>array(9,-14,591,597),1070=>array(-20,-14,669,597),1071=>array(-29,0,681,583),1072=>array(65,-16,583,450),1073=>array(58,-14,599,641),1074=>array(87,0,570,437),1075=>array(97,0,584,437),1076=>array(21,-92,643,437),1077=>array(74,-16,600,450),1078=>array(-18,0,696,437),1079=>array(74,-16,565,450),1080=>array(13,0,623,437),1081=>array(13,0,623,630),1082=>array(31,0,595,437),1083=>array(10,0,649,437),1084=>array(-30,0,726,437),1085=>array(43,0,653,437),1086=>array(64,-16,589,450),1087=>array(41,0,651,437),1088=>array(-28,-200,636,450),1089=>array(48,-16,581,450),1090=>array(115,1,623,438),1091=>array(-22,-200,652,437),1092=>array(-13,-200,669,648),1093=>array(30,0,641,437),1094=>array(32,-92,626,437),1095=>array(95,0,599,437),1096=>array(-32,0,724,437),1097=>array(-32,-92,724,437),1098=>array(71,0,598,437),1099=>array(-38,0,698,437),1100=>array(92,0,549,437),1101=>array(57,-16,600,450),1102=>array(-34,-16,673,450),1103=>array(54,0,624,437),1104=>array(74,-16,600,671),1105=>array(74,-16,600,622),1106=>array(68,-185,597,624),1107=>array(97,0,584,654),1108=>array(66,-16,600,450),1109=>array(83,-16,592,450),1110=>array(72,0,550,623),1111=>array(72,0,564,623),1112=>array(64,-200,561,623),1113=>array(-42,-1,660,436),1114=>array(-16,0,662,437),1115=>array(36,0,596,624),1116=>array(31,0,595,654),1117=>array(13,0,623,668),1118=>array(-22,-200,652,663),1119=>array(32,-99,644,437),1136=>array(60,0,694,583),1137=>array(41,-200,688,638),1138=>array(55,-14,629,597),1156=>array(-323,471,29,624),1157=>array(-210,452,-56,676),1158=>array(-153,484,40,648),1162=>array(10,-141,654,771),1163=>array(10,-141,622,630),1164=>array(21,0,574,633),1165=>array(93,0,551,516),1166=>array(22,0,618,583),1167=>array(-41,-200,625,450),1168=>array(11,0,677,700),1169=>array(107,0,604,529),1170=>array(11,0,662,583),1171=>array(107,0,595,437),1172=>array(13,-145,664,583),1173=>array(107,-145,595,437),1174=>array(-31,-141,726,583),1175=>array(-18,-92,696,437),1176=>array(73,-199,610,597),1177=>array(83,-199,575,450),1178=>array(5,-141,671,583),1179=>array(61,-141,627,437),1180=>array(15,0,681,583),1181=>array(38,0,663,437),1182=>array(15,0,681,583),1183=>array(61,0,627,437),1184=>array(31,-1,702,583),1185=>array(69,0,668,437),1186=>array(32,-141,676,583),1187=>array(40,-141,652,437),1188=>array(-33,0,744,583),1189=>array(9,-1,693,437),1190=>array(-36,-145,678,583),1191=>array(-44,-145,671,437),1192=>array(59,-132,643,597),1193=>array(92,-132,626,450),1194=>array(59,-199,643,597),1195=>array(92,-199,626,450),1196=>array(101,-141,662,583),1197=>array(114,-141,621,437),1198=>array(78,0,644,583),1199=>array(78,-146,644,437),1200=>array(103,0,674,583),1201=>array(76,-146,643,437),1202=>array(9,-141,683,583),1203=>array(30,-141,642,437),1204=>array(56,-141,724,583),1205=>array(25,-141,683,437),1206=>array(119,-141,627,583),1207=>array(109,-141,615,437),1208=>array(129,0,637,583),1209=>array(109,0,615,437),1210=>array(7,0,513,583),1211=>array(1,0,505,437),1212=>array(18,-18,674,601),1213=>array(38,-16,633,450),1214=>array(18,-200,674,601),1215=>array(48,-200,643,450),1216=>array(63,0,602,583),1217=>array(-31,0,726,776),1218=>array(-18,0,696,645),1219=>array(15,-145,681,583),1220=>array(51,-145,617,437),1221=>array(27,-141,672,583),1222=>array(14,-141,645,437),1223=>array(32,-145,676,583),1224=>array(50,-145,622,437),1225=>array(22,-141,666,583),1226=>array(50,-141,622,437),1227=>array(129,-141,637,583),1228=>array(109,-141,615,437),1229=>array(-10,-141,729,584),1230=>array(-7,-141,704,437),1231=>array(63,0,602,583),1232=>array(-11,0,633,776),1233=>array(65,-16,587,669),1234=>array(-11,0,633,763),1235=>array(65,-16,587,624),1236=>array(-10,0,717,583),1237=>array(3,-16,654,450),1238=>array(13,0,642,776),1239=>array(74,-16,600,667),1240=>array(65,-17,628,601),1241=>array(74,-16,600,450),1242=>array(65,-17,628,763),1243=>array(74,-16,600,626),1244=>array(-31,0,726,763),1245=>array(-18,0,696,623),1246=>array(62,-14,598,765),1247=>array(74,-16,565,623),1248=>array(46,-50,610,583),1249=>array(55,-183,548,442),1250=>array(0,0,642,723),1251=>array(13,0,623,584),1252=>array(0,0,642,763),1253=>array(13,0,623,627),1254=>array(55,-14,629,743),1255=>array(74,-16,599,623),1256=>array(75,-14,649,597),1257=>array(84,-16,609,450),1258=>array(75,-14,649,765),1259=>array(84,-16,609,623),1260=>array(49,-14,631,766),1261=>array(57,-16,600,627),1262=>array(121,0,688,723),1263=>array(-20,-200,654,584),1264=>array(128,0,695,765),1265=>array(-22,-200,652,623),1266=>array(120,0,687,790),1267=>array(-22,-200,652,654),1268=>array(133,0,639,763),1269=>array(101,0,605,624),1270=>array(11,-141,662,583),1271=>array(107,-141,595,437),1272=>array(-12,0,748,763),1273=>array(-21,0,715,623),1296=>array(82,-14,625,597),1297=>array(87,-16,584,450),1298=>array(17,-145,662,583),1299=>array(13,-145,646,437),1306=>array(55,-145,629,597),1307=>array(45,-200,666,450),1308=>array(58,0,685,583),1309=>array(62,0,664,437),1310=>array(5,-1,671,583),1311=>array(61,0,627,437),1456=>array(271,-200,329,-42),1457=>array(155,-200,450,-42),1458=>array(153,-200,447,-42),1459=>array(152,-200,447,-40),1460=>array(254,-111,315,-52),1461=>array(212,-119,388,-60),1462=>array(212,-200,388,-42),1463=>array(206,-95,394,-42),1464=>array(212,-200,389,-40),1465=>array(177,541,237,600),1467=>array(153,-200,447,-42),1468=>array(321,211,381,270),1469=>array(280,-200,320,-24),1470=>array(60,380,540,480),1471=>array(206,540,394,593),1472=>array(250,-153,350,622),1473=>array(539,536,599,595),1474=>array(148,536,208,595),1475=>array(225,-15,375,437),1476=>array(246,674,306,733),1488=>array(60,0,642,480),1489=>array(70,0,552,480),1490=>array(133,0,517,480),1491=>array(150,0,632,480),1492=>array(104,0,612,480),1493=>array(240,0,480,480),1494=>array(214,0,569,480),1495=>array(97,0,611,480),1496=>array(134,0,626,480),1497=>array(234,190,468,480),1498=>array(150,-200,572,480),1499=>array(70,0,570,480),1500=>array(141,0,642,629),1501=>array(80,0,600,480),1502=>array(101,0,611,480),1503=>array(240,-200,480,480),1504=>array(133,0,516,480),1505=>array(122,-1,611,480),1506=>array(70,0,649,480),1507=>array(125,-200,611,480),1508=>array(70,0,612,480),1509=>array(150,-200,642,480),1510=>array(58,0,630,480),1511=>array(80,-200,632,480),1512=>array(150,0,612,480),1513=>array(51,0,671,480),1514=>array(38,0,612,480),1520=>array(126,0,638,480),1521=>array(132,0,638,480),1522=>array(132,190,638,480),1523=>array(242,315,395,605),1524=>array(140,315,513,605),4304=>array(169,102,541,511),4305=>array(170,102,536,667),4306=>array(108,-147,495,428),4307=>array(106,-156,588,428),4308=>array(114,-147,547,428),4309=>array(115,-147,548,428),4310=>array(204,102,582,696),4311=>array(139,90,579,429),4312=>array(168,90,536,428),4313=>array(113,-147,553,440),4314=>array(102,-157,589,428),4315=>array(208,102,598,696),4316=>array(164,102,633,717),4317=>array(132,91,582,428),4318=>array(168,102,565,698),4319=>array(112,-147,589,463),4320=>array(133,90,603,696),4321=>array(176,102,542,696),4322=>array(94,-150,566,564),4323=>array(143,-147,593,439),4324=>array(123,-147,590,428),4325=>array(112,-144,641,737),4326=>array(104,-157,589,428),4327=>array(115,-147,568,440),4328=>array(201,102,640,696),4329=>array(144,93,537,696),4330=>array(91,-148,578,440),4331=>array(168,102,628,696),4332=>array(227,-200,634,721),4333=>array(90,-147,610,658),4334=>array(170,102,544,696),4335=>array(51,-147,607,428),4336=>array(166,102,595,698),4337=>array(146,102,667,707),4338=>array(162,95,500,450),4339=>array(94,-138,568,444),4340=>array(124,-138,548,597),4341=>array(147,102,608,696),4345=>array(159,-170,546,405),4347=>array(123,0,601,594),4348=>array(222,199,574,661),7680=>array(-11,-200,633,583),7681=>array(65,-200,583,450),7682=>array(22,0,620,757),7683=>array(2,-14,623,762),7684=>array(22,-160,620,583),7685=>array(2,-174,623,624),7686=>array(22,-120,620,583),7687=>array(2,-134,623,624),7688=>array(80,-200,663,800),7689=>array(72,-200,606,654),7690=>array(23,0,622,757),7691=>array(74,-14,664,767),7692=>array(23,-160,622,583),7693=>array(74,-174,664,624),7694=>array(23,-120,622,583),7695=>array(74,-139,664,624),7696=>array(22,-200,622,583),7697=>array(73,-200,664,624),7698=>array(23,-200,622,583),7699=>array(69,-200,664,624),7700=>array(21,0,634,800),7701=>array(74,-16,600,800),7702=>array(21,0,634,798),7703=>array(74,-16,600,800),7704=>array(13,-200,642,583),7705=>array(74,-199,600,450),7706=>array(13,-165,642,583),7707=>array(74,-181,600,450),7708=>array(13,-200,642,781),7709=>array(64,-200,597,643),7710=>array(3,0,654,757),7711=>array(84,0,691,775),7712=>array(59,-14,647,717),7713=>array(63,-200,665,571),7714=>array(12,0,655,757),7715=>array(33,0,593,763),7716=>array(12,-160,655,583),7717=>array(33,-160,593,624),7718=>array(12,0,655,757),7719=>array(33,0,609,784),7720=>array(-2,-200,676,583),7721=>array(-2,-200,594,624),7722=>array(12,-200,655,583),7723=>array(33,-200,593,624),7724=>array(63,-165,602,583),7725=>array(72,-165,550,623),7726=>array(92,0,616,799),7727=>array(72,0,560,772),7728=>array(2,0,667,794),7729=>array(42,0,606,800),7730=>array(2,-160,667,583),7731=>array(42,-160,606,624),7732=>array(2,-132,667,583),7733=>array(42,-150,606,624),7734=>array(22,-160,596,583),7735=>array(72,-160,550,624),7736=>array(22,-160,596,717),7737=>array(72,-160,561,744),7738=>array(22,-156,596,583),7739=>array(72,-158,550,624),7740=>array(22,-200,596,583),7741=>array(72,-200,550,624),7742=>array(-10,0,728,792),7743=>array(-9,0,635,654),7744=>array(-10,0,728,748),7745=>array(-9,0,635,610),7746=>array(-10,-160,728,583),7747=>array(-9,-160,635,450),7748=>array(21,0,706,757),7749=>array(33,0,583,610),7750=>array(21,-160,706,583),7751=>array(33,-160,583,450),7752=>array(21,-156,706,583),7753=>array(33,-158,583,450),7754=>array(21,-200,706,583),7755=>array(33,-198,583,450),7756=>array(68,-12,656,800),7757=>array(74,-16,599,800),7758=>array(68,-12,639,800),7759=>array(74,-16,599,787),7760=>array(68,-12,638,800),7761=>array(74,-16,599,800),7762=>array(68,-12,638,800),7763=>array(74,-16,599,800),7764=>array(23,0,617,800),7765=>array(-41,-200,623,654),7766=>array(23,0,617,757),7767=>array(-41,-200,623,630),7768=>array(3,0,611,757),7769=>array(44,0,630,630),7770=>array(3,-160,611,583),7771=>array(44,-160,630,449),7772=>array(3,-160,611,732),7773=>array(44,-160,639,604),7774=>array(3,-144,611,583),7775=>array(44,-144,630,449),7776=>array(62,-14,624,760),7777=>array(83,-16,592,630),7778=>array(62,-174,624,597),7779=>array(83,-176,592,450),7780=>array(72,-12,616,800),7781=>array(83,-16,592,796),7782=>array(72,-12,631,800),7783=>array(83,-16,599,765),7784=>array(62,-174,624,758),7785=>array(83,-176,592,622),7786=>array(81,0,642,757),7787=>array(94,-16,547,751),7788=>array(81,-160,642,583),7789=>array(94,-176,547,591),7790=>array(79,-152,642,583),7791=>array(88,-162,547,591),7792=>array(81,-200,642,583),7793=>array(92,-200,547,591),7794=>array(80,-174,675,583),7795=>array(94,-173,603,437),7796=>array(80,-179,675,583),7797=>array(89,-178,603,437),7798=>array(80,-200,675,585),7799=>array(94,-198,603,437),7800=>array(105,-14,689,800),7801=>array(94,-13,603,786),7802=>array(105,-14,689,800),7803=>array(94,-13,612,764),7804=>array(41,0,685,762),7805=>array(61,0,663,615),7806=>array(41,-160,685,583),7807=>array(61,-160,663,437),7808=>array(58,0,685,800),7809=>array(62,0,664,660),7810=>array(58,0,685,800),7811=>array(62,0,664,654),7812=>array(58,0,685,757),7813=>array(62,0,664,610),7814=>array(58,0,685,757),7815=>array(62,0,664,630),7816=>array(58,-160,685,583),7817=>array(62,-160,664,437),7818=>array(-1,0,672,757),7819=>array(30,0,641,630),7820=>array(-1,0,672,757),7821=>array(30,0,641,610),7822=>array(78,0,644,757),7823=>array(-22,-200,652,630),7824=>array(53,0,608,800),7825=>array(85,0,599,654),7826=>array(53,-160,608,583),7827=>array(85,-160,599,437),7828=>array(53,-160,608,583),7829=>array(85,-162,599,437),7830=>array(33,-160,593,624),7831=>array(94,-16,547,751),7832=>array(62,0,664,681),7833=>array(-22,-200,652,681),7834=>array(65,-16,583,687),7835=>array(64,0,671,783),7840=>array(-11,-160,633,583),7841=>array(65,-176,583,450),7842=>array(-11,0,633,800),7843=>array(65,-16,583,705),7844=>array(-11,0,727,800),7845=>array(65,-16,709,765),7846=>array(-11,0,636,800),7847=>array(65,-16,583,768),7848=>array(-11,0,706,800),7849=>array(65,-16,698,755),7850=>array(-14,-1,650,792),7851=>array(65,-16,590,784),7852=>array(-11,-160,633,787),7853=>array(65,-176,583,662),7854=>array(-14,-1,632,799),7855=>array(65,-16,584,800),7856=>array(-14,-1,632,800),7857=>array(65,-16,584,800),7858=>array(-14,-1,632,800),7859=>array(65,-16,584,800),7860=>array(-14,-1,632,797),7861=>array(65,-16,604,800),7862=>array(-11,-160,633,769),7863=>array(65,-176,584,664),7864=>array(13,-160,642,583),7865=>array(74,-176,600,450),7866=>array(13,0,642,800),7867=>array(74,-16,600,705),7868=>array(13,0,642,762),7869=>array(74,-16,600,615),7870=>array(13,0,709,800),7871=>array(74,-16,720,777),7872=>array(13,0,653,800),7873=>array(74,-16,600,776),7874=>array(13,0,705,800),7875=>array(74,-16,714,776),7876=>array(21,0,652,798),7877=>array(74,-16,620,799),7878=>array(13,-160,642,789),7879=>array(74,-176,600,629),7880=>array(63,0,602,800),7881=>array(72,0,550,703),7882=>array(63,-160,602,583),7883=>array(72,-160,550,623),7884=>array(55,-174,629,597),7885=>array(74,-176,599,450),7886=>array(55,-14,629,800),7887=>array(74,-16,599,704),7888=>array(55,-14,709,800),7889=>array(74,-16,732,767),7890=>array(55,-14,656,800),7891=>array(74,-16,599,774),7892=>array(55,-14,705,800),7893=>array(74,-16,705,777),7894=>array(68,-12,665,792),7895=>array(74,-16,615,787),7896=>array(55,-174,629,766),7897=>array(74,-176,599,654),7898=>array(46,-14,693,800),7899=>array(30,-16,640,652),7900=>array(46,-14,693,800),7901=>array(30,-16,640,656),7902=>array(46,-14,693,800),7903=>array(30,-16,640,703),7904=>array(46,-14,693,780),7905=>array(30,-16,640,635),7906=>array(46,-174,693,664),7907=>array(30,-176,640,520),7908=>array(80,-174,675,583),7909=>array(94,-173,603,437),7910=>array(80,-14,675,800),7911=>array(94,-13,603,702),7912=>array(59,-14,747,800),7913=>array(35,-13,693,675),7914=>array(59,-14,747,800),7915=>array(35,-13,693,665),7916=>array(59,-14,747,800),7917=>array(35,-13,693,702),7918=>array(59,-14,747,777),7919=>array(35,-13,693,635),7920=>array(59,-174,747,697),7921=>array(35,-173,693,551),7922=>array(78,0,644,800),7923=>array(-22,-200,652,660),7924=>array(78,-160,644,583),7925=>array(-22,-200,652,437),7926=>array(78,0,644,800),7927=>array(-22,-200,652,700),7928=>array(78,0,644,762),7929=>array(-22,-200,652,635),8208=>array(101,229,619,329),8209=>array(101,229,619,329),8210=>array(101,229,619,329),8211=>array(101,229,619,329),8212=>array(-18,229,642,329),8213=>array(-18,229,642,329),8214=>array(163,-39,437,621),8215=>array(-43,-200,596,-19),8216=>array(191,344,391,636),8217=>array(210,331,410,623),8218=>array(144,-194,344,98),8219=>array(393,331,543,623),8220=>array(113,344,541,636),8221=>array(243,331,673,623),8222=>array(43,-194,480,98),8223=>array(252,331,640,623),8224=>array(175,-92,589,622),8225=>array(123,-92,589,622),8226=>array(211,154,517,453),8227=>array(208,116,517,417),8228=>array(232,-15,385,117),8229=>array(123,-15,497,117),8230=>array(34,-15,587,117),8231=>array(290,182,413,302),8240=>array(104,0,627,618),8241=>array(21,-9,619,614),8242=>array(222,331,484,623),8243=>array(158,331,613,623),8244=>array(94,331,709,623),8245=>array(279,331,429,623),8246=>array(215,331,557,623),8247=>array(151,331,655,623),8248=>array(108,-180,430,4),8249=>array(80,20,425,415),8250=>array(273,20,617,415),8251=>array(89,11,623,551),8252=>array(109,-15,626,638),8253=>array(156,-30,536,592),8254=>array(141,660,762,760),8255=>array(64,-194,508,-24),8256=>array(180,434,623,604),8257=>array(123,-200,467,280),8258=>array(-97,-15,784,774),8259=>array(112,24,601,511),8260=>array(52,102,676,500),8261=>array(240,-153,557,623),8262=>array(143,-153,460,623),8263=>array(42,-40,707,602),8264=>array(97,-15,726,638),8265=>array(9,-15,708,638),8266=>array(144,-20,600,435),8267=>array(19,-174,648,583),8268=>array(121,111,637,485),8269=>array(-37,111,479,485),8270=>array(129,-20,565,394),8271=>array(139,-145,350,417),8272=>array(106,3,623,604),8273=>array(110,-25,640,799),8274=>array(67,-12,654,799),8275=>array(161,183,542,300),8276=>array(49,-194,492,-24),8277=>array(101,229,619,329),8278=>array(164,0,642,594),8279=>array(63,331,834,623),8280=>array(77,0,671,685),8281=>array(14,0,716,594),8282=>array(251,0,518,799),8283=>array(70,-198,673,800),8284=>array(48,-1,667,564),8285=>array(246,0,514,799),8286=>array(275,0,541,799),8304=>array(266,368,554,767),8305=>array(244,372,519,799),8308=>array(230,372,523,752),8309=>array(229,369,551,758),8310=>array(259,368,571,767),8311=>array(293,383,572,764),8312=>array(266,368,568,767),8313=>array(269,368,578,767),8314=>array(289,439,565,714),8315=>array(299,544,575,609),8316=>array(299,485,592,660),8317=>array(339,322,529,800),8318=>array(291,322,481,800),8319=>array(213,373,549,672),8320=>array(176,-154,464,245),8321=>array(154,-143,424,248),8322=>array(122,-153,458,237),8323=>array(139,-154,464,245),8324=>array(150,-150,443,230),8325=>array(149,-153,471,236),8326=>array(159,-154,471,245),8327=>array(193,-149,472,232),8328=>array(146,-154,448,245),8329=>array(159,-154,468,245),8330=>array(158,-122,434,153),8331=>array(171,-17,447,48),8332=>array(172,-72,465,103),8333=>array(206,-200,396,278),8334=>array(170,-200,360,278),8336=>array(108,-172,453,167),8337=>array(111,-175,460,164),8338=>array(119,-175,470,164),8339=>array(79,-166,490,153),8340=>array(123,-175,472,164),8355=>array(22,0,674,583),8356=>array(64,0,571,598),8357=>array(-10,-142,688,598),8358=>array(29,0,715,583),8361=>array(59,0,725,583),8362=>array(-19,0,619,480),8363=>array(14,-17,652,764),8364=>array(65,-14,698,597),8365=>array(20,0,686,583),8366=>array(136,0,682,583),8369=>array(22,0,690,583),8370=>array(78,-123,667,684),8371=>array(-12,0,686,583),8372=>array(49,-14,672,597),8373=>array(48,-123,578,684),8376=>array(93,0,680,597),8377=>array(117,0,634,584),8448=>array(63,-10,687,800),8449=>array(72,-13,696,800),8451=>array(140,-14,697,745),8453=>array(81,-13,705,800),8454=>array(60,-10,684,800),8455=>array(80,-14,623,597),8457=>array(140,0,724,745),8462=>array(33,0,593,624),8465=>array(145,-25,643,603),8466=>array(63,0,567,598),8467=>array(114,-48,691,644),8470=>array(-32,0,686,583),8472=>array(25,-175,623,479),8476=>array(47,-24,601,607),8480=>array(23,207,743,592),8481=>array(43,0,630,563),8482=>array(60,220,732,583),8486=>array(30,0,639,583),8487=>array(14,0,623,583),8489=>array(138,-13,511,440),8490=>array(2,0,667,583),8491=>array(-11,0,633,799),8494=>array(82,-16,608,450),8498=>array(55,2,706,585),8501=>array(60,0,642,480),8502=>array(70,0,552,480),8503=>array(133,0,517,480),8504=>array(150,0,632,480),8506=>array(-80,15,663,590),8507=>array(-22,0,708,563),8513=>array(-35,1,553,612),8514=>array(100,0,674,583),8515=>array(25,0,679,583),8516=>array(-44,0,522,583),8523=>array(27,-17,482,547),8525=>array(49,-11,673,798),8526=>array(113,0,602,438),8531=>array(0,-20,648,646),8532=>array(-12,-20,665,642),8533=>array(-22,-25,640,644),8534=>array(-44,-25,641,642),8535=>array(-31,-25,639,641),8536=>array(-14,-25,637,638),8537=>array(2,-12,655,644),8538=>array(10,2,670,634),8539=>array(3,-17,655,644),8540=>array(-8,-17,651,643),8541=>array(-2,-17,649,634),8542=>array(61,-17,612,633),8543=>array(-48,51,529,644),8592=>array(89,139,631,423),8593=>array(226,1,512,542),8594=>array(59,139,601,423),8595=>array(198,1,484,542),8596=>array(69,139,650,423),8597=>array(183,-9,496,571),8598=>array(208,80,526,472),8599=>array(112,80,582,473),8600=>array(108,80,502,472),8601=>array(122,80,592,473),8612=>array(49,139,614,423),8613=>array(164,0,510,540),8614=>array(49,139,614,423),8615=>array(164,0,510,540),8633=>array(6,-19,634,553),8636=>array(47,222,595,396),8637=>array(47,51,582,225),8638=>array(259,1,486,541),8639=>array(269,0,502,540),8640=>array(57,201,592,375),8641=>array(47,122,595,296),8642=>array(269,0,502,540),8643=>array(229,1,456,541),8644=>array(29,6,651,573),8645=>array(66,1,614,542),8646=>array(29,8,621,576),8647=>array(49,-1,631,583),8648=>array(56,1,632,542),8649=>array(29,-1,611,583),8650=>array(38,1,614,542),8651=>array(25,22,605,446),8652=>array(47,20,603,451),8656=>array(47,37,618,457),8657=>array(174,-40,595,684),8658=>array(27,37,598,457),8659=>array(125,-50,546,674),8660=>array(32,37,633,457),8661=>array(89,-150,585,684),8704=>array(90,0,734,583),8705=>array(74,-100,679,700),8706=>array(138,-16,579,590),8707=>array(43,0,675,583),8708=>array(13,-113,666,695),8709=>array(80,-113,631,639),8710=>array(15,0,585,583),8711=>array(141,0,711,583),8712=>array(79,5,673,555),8713=>array(69,-113,673,695),8714=>array(141,3,584,437),8715=>array(48,5,642,555),8716=>array(48,-113,642,695),8717=>array(16,0,459,434),8718=>array(130,0,577,500),8719=>array(8,-100,783,670),8720=>array(-183,-100,592,670),8721=>array(32,-97,668,671),8722=>array(101,230,619,330),8723=>array(101,0,702,723),8724=>array(81,-42,599,700),8725=>array(69,-113,656,695),8726=>array(83,-113,517,695),8727=>array(178,77,614,491),8728=>array(154,136,448,429),8729=>array(211,154,517,453),8730=>array(62,-60,650,697),8731=>array(52,-60,650,800),8732=>array(62,-60,650,800),8733=>array(101,124,644,500),8734=>array(-4,124,604,500),8735=>array(60,0,553,513),8739=>array(249,-27,350,582),8741=>array(150,-27,450,582),8743=>array(77,-14,523,488),8744=>array(71,-18,517,484),8745=>array(63,-11,569,465),8746=>array(109,-11,615,465),8747=>array(76,-78,666,744),8748=>array(-24,-78,766,744),8756=>array(99,4,602,468),8757=>array(-4,-20,499,444),8758=>array(290,1,413,468),8759=>array(100,1,602,468),8764=>array(110,182,570,378),8776=>array(100,108,600,481),8800=>array(81,22,638,525),8801=>array(58,46,641,514),8804=>array(50,0,666,591),8805=>array(52,0,660,591),8834=>array(45,68,620,457),8835=>array(25,68,600,457),8838=>array(61,-16,640,536),8839=>array(51,-16,639,549),8869=>array(16,0,585,622),8898=>array(42,-39,662,710),8899=>array(80,-39,699,710),8976=>array(77,115,551,445),9001=>array(148,-149,478,627),9002=>array(152,-149,482,627),9251=>array(92,0,541,203),9674=>array(133,-19,590,593),9675=>array(33,-2,567,532),9711=>array(0,0,600,600),9824=>array(91,-10,593,617),9825=>array(126,-55,666,586),9826=>array(131,-31,590,601),9827=>array(56,-11,654,580),9828=>array(91,-10,593,617),9829=>array(126,-56,666,585),9830=>array(128,-31,587,601),9831=>array(56,-11,654,580),9833=>array(65,-17,388,583),9834=>array(65,-17,509,583),9835=>array(29,-17,555,570),9836=>array(29,-17,555,570),9837=>array(82,-30,531,656),9838=>array(91,-187,599,623),9839=>array(31,-190,658,624),11798=>array(76,20,616,685),11799=>array(77,4,616,525),11800=>array(114,-33,494,589),11802=>array(81,229,599,584),11803=>array(104,179,596,581),11806=>array(94,179,586,511),11807=>array(84,61,576,385),11816=>array(74,-153,634,632),11817=>array(24,-153,584,632),11818=>array(110,0,583,524),11819=>array(77,50,631,460),11820=>array(34,40,588,450),11821=>array(80,30,603,535),11822=>array(156,-15,602,598),42888=>array(124,-88,476,76),42889=>array(234,-15,455,437),42890=>array(190,138,469,422),42891=>array(298,179,511,679),42892=>array(319,275,511,679),64256=>array(3,0,721,623),64257=>array(47,0,552,623),64258=>array(22,0,613,623),64285=>array(234,105,468,480),64287=>array(132,103,638,480),64288=>array(57,0,649,480),64298=>array(51,0,671,595),64299=>array(51,0,671,595),64300=>array(51,0,671,595),64301=>array(51,0,671,595),64302=>array(60,-95,642,480),64303=>array(60,-200,642,480),64304=>array(60,-101,642,480),64305=>array(70,0,552,480),64306=>array(133,0,517,480),64307=>array(150,0,632,480),64308=>array(104,0,612,480),64309=>array(229,0,480,480),64310=>array(194,0,569,480),64312=>array(134,0,626,480),64313=>array(213,190,468,480),64314=>array(150,-200,572,480),64315=>array(70,0,570,480),64316=>array(141,0,642,629),64318=>array(101,0,611,480),64320=>array(133,0,516,480),64321=>array(122,-1,611,480),64323=>array(125,-200,611,480),64324=>array(70,0,612,480),64326=>array(58,0,630,480),64327=>array(80,-200,632,480),64328=>array(150,0,612,480),64329=>array(51,0,671,480),64330=>array(38,0,612,480),64331=>array(240,0,480,600),64332=>array(70,0,552,593),64333=>array(70,0,570,593),64334=>array(70,0,612,593),64335=>array(150,0,643,629),65532=>array(31,1,600,637),65533=>array(16,-147,703,800),65535=>array(-3,-110,723,673)); +$cw=array(0=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600,652=>600,653=>600,654=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>600,769=>600,770=>600,771=>600,772=>600,773=>600,774=>600,775=>600,776=>600,777=>600,778=>600,779=>600,780=>600,781=>600,782=>600,783=>600,784=>600,785=>600,786=>600,787=>600,788=>600,789=>600,790=>600,791=>600,792=>600,793=>600,794=>600,795=>600,796=>600,797=>600,798=>600,799=>600,800=>600,801=>600,802=>600,803=>600,804=>600,805=>600,806=>600,807=>600,808=>600,809=>600,810=>600,811=>600,812=>600,813=>600,814=>600,815=>600,816=>600,817=>600,818=>600,819=>600,820=>600,821=>600,822=>600,823=>600,824=>600,825=>600,826=>600,827=>600,828=>600,829=>600,830=>600,831=>600,832=>600,833=>600,834=>600,835=>600,836=>600,837=>600,838=>600,839=>600,840=>600,841=>600,842=>600,843=>600,844=>600,845=>600,846=>600,847=>600,848=>600,849=>600,850=>600,851=>600,852=>600,853=>600,854=>600,855=>600,856=>600,857=>600,858=>600,859=>600,860=>600,861=>600,862=>600,863=>600,864=>600,865=>600,866=>600,867=>600,868=>600,869=>600,870=>600,871=>600,872=>600,873=>600,874=>600,875=>600,876=>600,877=>600,878=>600,879=>600,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,989=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1136=>600,1137=>600,1138=>600,1156=>600,1157=>600,1158=>600,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1456=>600,1457=>600,1458=>600,1459=>600,1460=>600,1461=>600,1462=>600,1463=>600,1464=>600,1465=>600,1467=>600,1468=>600,1469=>600,1470=>600,1471=>600,1472=>600,1473=>600,1474=>600,1475=>600,1476=>600,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>600,8205=>600,8206=>600,8207=>600,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8355=>600,8356=>600,8357=>600,8358=>600,8361=>600,8362=>600,8363=>600,8364=>600,8365=>600,8366=>600,8369=>600,8370=>600,8371=>600,8372=>600,8373=>600,8376=>600,8377=>600,8448=>600,8449=>600,8451=>600,8453=>600,8454=>600,8455=>600,8457=>600,8462=>600,8465=>600,8466=>600,8467=>600,8470=>600,8472=>600,8476=>600,8480=>600,8481=>600,8482=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8612=>600,8613=>600,8614=>600,8615=>600,8633=>600,8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8645=>600,8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8735=>600,8739=>600,8741=>600,8743=>600,8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,8756=>600,8757=>600,8758=>600,8759=>600,8764=>600,8776=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8838=>600,8839=>600,8869=>600,8898=>600,8899=>600,8976=>600,9001=>600,9002=>600,9251=>600,9674=>600,9675=>600,9711=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,11798=>600,11799=>600,11800=>600,11802=>600,11803=>600,11806=>600,11807=>600,11816=>600,11817=>600,11818=>600,11819=>600,11820=>600,11821=>600,11822=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600,64285=>600,64287=>600,64288=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65529=>600,65530=>600,65531=>600,65532=>600,65533=>600,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freemonobi.z b/tcpdf/fonts/freemonobi.z new file mode 100644 index 0000000..3943763 Binary files /dev/null and b/tcpdf/fonts/freemonobi.z differ diff --git a/tcpdf/fonts/freemonoi.ctg.z b/tcpdf/fonts/freemonoi.ctg.z new file mode 100644 index 0000000..0b82e24 Binary files /dev/null and b/tcpdf/fonts/freemonoi.ctg.z differ diff --git a/tcpdf/fonts/freemonoi.php b/tcpdf/fonts/freemonoi.php new file mode 100644 index 0000000..df16585 --- /dev/null +++ b/tcpdf/fonts/freemonoi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeMonoOblique'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=390692; +$enc=''; +$file='freemonoi.z'; +$ctg='freemonoi.ctg.z'; +$desc=array('Flags'=>97,'FontBBox'=>'[-644 -200 816 800]','ItalicAngle'=>-12,'Ascent'=>800,'Descent'=>-200,'Leading'=>0,'CapHeight'=>563,'XHeight'=>417,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cbbox=array(0=>array(23,-80,697,643),33=>array(246,-15,463,618),34=>array(208,315,564,604),35=>array(137,-62,589,647),36=>array(131,-92,582,655),37=>array(137,-12,591,611),38=>array(132,-16,527,519),39=>array(344,315,492,604),40=>array(335,-124,583,604),41=>array(124,-124,372,604),42=>array(211,250,586,604),43=>array(131,32,588,530),44=>array(110,-145,371,145),45=>array(131,258,588,299),46=>array(235,-15,386,116),47=>array(99,-81,625,668),48=>array(156,-15,571,618),49=>array(116,0,493,612),50=>array(84,0,572,618),51=>array(110,-15,579,618),52=>array(141,0,545,604),53=>array(113,-15,584,604),54=>array(184,-15,631,618),55=>array(215,-1,606,604),56=>array(143,-15,576,618),57=>array(142,-15,589,618),58=>array(235,-15,450,417),59=>array(114,-145,426,417),60=>array(131,44,627,518),61=>array(95,190,625,375),62=>array(92,44,588,518),63=>array(231,-15,581,577),64=>array(139,-62,561,624),65=>array(13,0,596,563),66=>array(47,0,591,563),67=>array(110,-16,635,576),68=>array(47,0,592,563),69=>array(47,0,619,563),70=>array(47,0,640,563),71=>array(108,-16,636,576),72=>array(57,0,646,563),73=>array(117,0,603,563),74=>array(100,-16,699,563),75=>array(47,0,662,563),76=>array(67,0,585,563),77=>array(15,0,700,563),78=>array(46,0,678,563),79=>array(102,-16,616,576),80=>array(47,0,587,563),81=>array(102,-115,616,576),82=>array(47,0,594,563),83=>array(96,-17,602,577),84=>array(152,0,648,563),85=>array(136,-16,676,563),86=>array(124,0,707,563),87=>array(122,0,696,563),88=>array(44,0,662,563),89=>array(153,0,665,563),90=>array(103,0,590,563),91=>array(254,-124,570,604),92=>array(250,-81,474,668),93=>array(133,-124,449,604),94=>array(192,354,567,615),95=>array(-27,-125,584,-75),96=>array(267,490,410,639),97=>array(93,-16,546,431),98=>array(26,-16,591,604),99=>array(121,-17,596,432),100=>array(102,-16,630,604),101=>array(104,-16,570,431),102=>array(109,0,663,604),103=>array(105,-186,647,431),104=>array(55,0,556,604),105=>array(96,0,513,624),106=>array(82,-186,517,624),107=>array(67,0,578,604),108=>array(96,0,513,604),109=>array(15,0,603,431),110=>array(57,0,546,431),111=>array(111,-16,577,431),112=>array(-13,-186,593,431),113=>array(105,-186,668,431),114=>array(88,0,619,427),115=>array(108,-17,558,431),116=>array(127,-16,518,563),117=>array(127,-16,569,417),118=>array(114,0,655,417),119=>array(114,0,655,417),120=>array(55,0,611,417),121=>array(22,-186,634,417),122=>array(115,0,563,417),123=>array(207,-124,535,604),124=>array(257,-124,444,604),125=>array(167,-124,495,604),126=>array(145,212,575,348),160=>array(0,0,0,0),161=>array(222,-200,439,433),162=>array(175,-13,563,630),163=>array(90,0,541,578),164=>array(127,95,597,489),165=>array(161,0,665,563),166=>array(257,-124,444,604),167=>array(91,-62,624,603),168=>array(258,511,581,611),169=>array(57,-15,663,578),170=>array(199,188,511,574),171=>array(108,0,626,417),172=>array(160,168,621,438),173=>array(131,258,588,299),174=>array(57,-15,663,578),175=>array(273,536,564,576),176=>array(257,346,553,636),177=>array(76,0,597,529),178=>array(250,381,534,734),179=>array(265,379,536,740),180=>array(388,490,577,639),181=>array(86,-200,569,417),182=>array(152,-62,648,604),183=>array(299,187,401,287),184=>array(181,-173,356,0),185=>array(269,379,489,732),186=>array(199,188,543,577),187=>array(67,0,585,417),188=>array(74,0,619,612),189=>array(82,0,627,612),190=>array(70,0,619,612),191=>array(105,-175,455,417),192=>array(13,0,596,772),193=>array(13,0,596,774),194=>array(13,0,596,744),195=>array(13,0,596,704),196=>array(13,0,596,714),197=>array(13,0,596,783),198=>array(14,0,690,563),199=>array(110,-173,635,576),200=>array(47,0,619,772),201=>array(47,0,619,774),202=>array(47,0,619,744),203=>array(47,0,619,714),204=>array(117,0,603,772),205=>array(117,0,603,774),206=>array(117,0,603,744),207=>array(117,0,605,714),208=>array(47,0,592,563),209=>array(46,0,678,704),210=>array(102,-16,616,772),211=>array(102,-16,616,774),212=>array(102,-16,616,744),213=>array(102,-16,616,704),214=>array(102,-16,617,714),215=>array(143,100,577,464),216=>array(34,-43,685,605),217=>array(136,-16,676,772),218=>array(136,-16,676,774),219=>array(136,-16,676,744),220=>array(136,-16,676,714),221=>array(153,0,665,774),222=>array(47,0,566,563),223=>array(47,-16,539,604),224=>array(93,-16,546,650),225=>array(93,-16,546,629),226=>array(93,-16,554,623),227=>array(93,-16,579,605),228=>array(93,-16,569,588),229=>array(93,-16,546,660),230=>array(36,-16,630,431),231=>array(122,-173,596,431),232=>array(104,-16,570,645),233=>array(104,-16,570,629),234=>array(104,-16,570,622),235=>array(104,-16,570,588),236=>array(96,0,513,640),237=>array(96,0,525,629),238=>array(96,0,533,623),239=>array(96,0,569,588),240=>array(111,-17,582,620),241=>array(57,0,579,604),242=>array(111,-16,577,643),243=>array(111,-16,577,629),244=>array(111,-16,577,623),245=>array(111,-16,579,577),246=>array(111,-16,577,588),247=>array(131,25,588,540),248=>array(47,-43,637,458),249=>array(127,-16,569,643),250=>array(127,-16,569,629),251=>array(127,-16,569,626),252=>array(127,-16,569,588),253=>array(22,-186,634,629),254=>array(-13,-186,593,590),255=>array(22,-186,634,588),256=>array(13,0,596,667),257=>array(93,-16,557,563),258=>array(13,0,596,741),259=>array(93,-16,574,622),260=>array(13,-155,596,563),261=>array(93,-155,546,431),262=>array(110,-16,635,754),263=>array(121,-17,596,629),264=>array(110,-16,635,752),265=>array(121,-17,596,606),266=>array(110,-16,635,715),267=>array(121,-17,596,587),268=>array(110,-16,635,758),269=>array(121,-17,596,635),270=>array(47,0,596,758),271=>array(51,-16,756,604),272=>array(47,0,592,563),273=>array(102,-16,690,604),274=>array(47,0,619,649),275=>array(104,-16,570,563),276=>array(47,0,619,735),277=>array(104,-16,570,589),278=>array(47,0,619,727),279=>array(104,-16,570,587),280=>array(47,-155,619,563),281=>array(104,-155,570,431),282=>array(47,0,619,758),283=>array(104,-16,596,641),284=>array(108,-16,636,752),285=>array(105,-186,647,606),286=>array(108,-16,636,741),287=>array(105,-186,647,622),288=>array(108,-16,636,713),289=>array(105,-186,647,568),290=>array(108,-200,636,576),291=>array(105,-186,647,648),292=>array(57,0,646,752),293=>array(55,0,584,793),294=>array(57,0,646,563),295=>array(55,0,556,604),296=>array(117,0,603,705),297=>array(96,0,567,546),298=>array(117,0,603,667),299=>array(96,0,557,571),300=>array(117,0,603,735),301=>array(96,0,567,589),302=>array(117,-155,603,563),303=>array(96,-155,513,624),304=>array(117,0,603,725),305=>array(96,0,513,417),306=>array(27,-16,672,563),307=>array(34,-186,647,624),308=>array(100,-16,710,752),309=>array(82,-186,539,626),310=>array(47,-200,662,563),311=>array(67,-200,578,604),312=>array(82,0,594,417),313=>array(67,0,585,756),314=>array(96,0,548,791),315=>array(67,-200,585,563),316=>array(96,-200,513,604),317=>array(67,0,643,603),318=>array(75,0,623,604),319=>array(67,0,585,563),320=>array(48,0,569,604),321=>array(66,0,586,563),322=>array(96,0,524,604),323=>array(46,0,678,774),324=>array(57,0,550,641),325=>array(46,-200,678,563),326=>array(57,-200,546,431),327=>array(46,0,678,758),328=>array(57,0,596,623),329=>array(57,0,546,664),330=>array(57,-11,597,577),331=>array(57,-116,545,431),332=>array(102,-16,616,665),333=>array(111,-16,577,562),334=>array(102,-16,616,735),335=>array(111,-16,577,589),336=>array(102,-16,668,759),337=>array(111,-16,648,663),338=>array(62,0,690,563),339=>array(50,-16,630,431),340=>array(47,0,594,767),341=>array(88,0,619,634),342=>array(47,-200,594,563),343=>array(88,-200,619,427),344=>array(47,0,596,758),345=>array(88,0,619,637),346=>array(96,-17,602,773),347=>array(108,-17,558,629),348=>array(96,-17,602,752),349=>array(108,-17,558,606),350=>array(96,-179,602,577),351=>array(108,-173,558,431),352=>array(96,-17,602,758),353=>array(108,-17,596,638),354=>array(152,-172,648,563),355=>array(127,-189,518,563),356=>array(152,0,648,758),357=>array(127,-16,692,604),358=>array(152,0,648,563),359=>array(102,-16,518,563),360=>array(136,-16,676,702),361=>array(127,-16,569,575),362=>array(136,-16,676,666),363=>array(127,-16,569,565),364=>array(136,-16,676,735),365=>array(127,-16,569,589),366=>array(136,-16,676,783),367=>array(127,-16,569,656),368=>array(136,-16,676,787),369=>array(127,-16,576,633),370=>array(136,-155,676,563),371=>array(127,-155,569,417),372=>array(122,0,696,752),373=>array(114,0,655,606),374=>array(153,0,665,752),375=>array(22,-186,634,606),376=>array(153,0,665,722),377=>array(103,0,590,762),378=>array(115,0,563,626),379=>array(103,0,590,715),380=>array(115,0,563,585),381=>array(103,0,596,758),382=>array(115,0,578,636),383=>array(109,0,663,604),384=>array(-37,-16,528,604),385=>array(-13,0,531,563),386=>array(35,0,628,563),387=>array(-37,-16,562,604),388=>array(-8,0,522,590),389=>array(-36,-16,530,590),390=>array(113,-16,637,576),391=>array(44,-16,718,632),392=>array(72,-16,694,485),393=>array(47,0,592,563),394=>array(-24,0,532,563),395=>array(12,0,597,563),396=>array(-1,-16,603,604),397=>array(24,-200,545,451),398=>array(26,0,619,563),399=>array(35,-16,547,576),400=>array(61,-16,540,576),401=>array(-55,-93,635,563),402=>array(74,-93,643,618),403=>array(42,-16,719,632),404=>array(105,-27,605,563),405=>array(-44,-16,606,604),406=>array(224,-8,458,563),407=>array(57,0,543,563),408=>array(-13,0,656,563),409=>array(1,0,512,618),410=>array(31,0,449,604),411=>array(-3,-2,489,614),412=>array(31,-14,651,563),413=>array(-55,-93,662,563),414=>array(30,-184,519,431),415=>array(102,-16,616,576),416=>array(109,-16,672,711),417=>array(103,-16,634,565),418=>array(-15,-16,592,638),419=>array(19,-16,554,468),420=>array(-13,0,527,563),421=>array(-60,-186,547,618),422=>array(24,-186,486,563),423=>array(96,-17,557,577),424=>array(102,-17,523,431),425=>array(30,0,562,577),426=>array(135,-93,450,618),427=>array(88,-199,479,563),428=>array(55,0,588,563),429=>array(62,-16,454,618),430=>array(128,-199,609,563),431=>array(101,-16,728,711),432=>array(96,-16,645,565),433=>array(66,-2,601,571),434=>array(91,-12,610,563),435=>array(20,0,605,563),436=>array(-19,-186,679,565),437=>array(43,0,530,563),438=>array(71,0,518,417),439=>array(55,-15,517,563),440=>array(62,-15,556,563),441=>array(87,-158,477,417),442=>array(42,-200,501,417),443=>array(18,0,506,618),444=>array(55,-15,517,563),445=>array(84,-20,462,417),446=>array(83,-14,513,563),447=>array(-41,-186,581,444),448=>array(207,-124,393,604),449=>array(143,-124,457,604),450=>array(44,-124,574,604),451=>array(246,-15,463,618),452=>array(-53,0,635,749),453=>array(-40,0,623,629),454=>array(-10,-16,608,629),455=>array(-50,-16,649,564),456=>array(-20,-186,669,624),457=>array(81,-186,569,624),458=>array(-27,-16,683,563),459=>array(-1,-186,669,624),460=>array(-30,-186,669,624),461=>array(13,0,596,765),462=>array(93,-16,573,620),463=>array(117,0,603,765),464=>array(96,0,553,620),465=>array(102,-16,616,765),466=>array(111,-16,577,620),467=>array(136,-16,676,765),468=>array(127,-16,569,620),469=>array(136,-16,676,800),470=>array(127,-16,580,691),471=>array(136,-16,668,799),472=>array(127,-16,602,755),473=>array(136,-16,667,800),474=>array(127,-16,603,765),475=>array(136,-16,676,799),476=>array(127,-16,569,800),477=>array(104,-16,570,431),478=>array(13,0,596,798),479=>array(93,-16,578,691),480=>array(13,0,596,797),481=>array(93,-16,579,651),482=>array(14,0,690,656),483=>array(36,-16,630,511),484=>array(48,-16,575,576),485=>array(79,-186,621,431),486=>array(108,-16,636,765),487=>array(105,-186,647,620),488=>array(47,0,662,765),489=>array(67,0,610,765),490=>array(102,-166,616,576),491=>array(111,-166,577,431),492=>array(102,-166,616,656),493=>array(111,-166,577,511),494=>array(55,-15,517,765),495=>array(54,-158,518,620),496=>array(82,-186,568,671),497=>array(-33,0,613,563),498=>array(-33,0,583,563),499=>array(-7,-16,564,604),500=>array(108,-16,636,765),501=>array(105,-186,647,620),502=>array(-38,-16,609,565),503=>array(-55,-186,598,572),504=>array(46,0,678,765),505=>array(57,0,546,620),506=>array(13,0,596,800),507=>array(93,-16,589,800),508=>array(14,0,690,765),509=>array(36,-16,630,620),510=>array(34,-43,685,774),511=>array(47,-43,637,647),512=>array(13,0,596,778),513=>array(93,-16,546,640),514=>array(13,0,596,738),515=>array(93,-16,570,622),516=>array(47,0,619,785),517=>array(104,-16,570,640),518=>array(47,0,619,726),519=>array(104,-16,570,622),520=>array(117,0,603,775),521=>array(96,0,514,640),522=>array(117,0,603,737),523=>array(96,0,532,622),524=>array(102,-16,616,776),525=>array(111,-16,577,640),526=>array(102,-16,616,730),527=>array(111,-16,577,622),528=>array(47,0,594,777),529=>array(88,0,619,640),530=>array(47,0,594,736),531=>array(88,0,619,622),532=>array(136,-16,676,772),533=>array(127,-16,569,640),534=>array(136,-16,676,732),535=>array(127,-16,569,622),536=>array(96,-200,602,577),537=>array(108,-200,558,431),538=>array(152,-200,648,563),539=>array(127,-200,518,563),540=>array(53,-20,520,576),541=>array(129,-116,509,431),542=>array(57,0,646,765),543=>array(55,0,607,793),544=>array(33,-186,573,577),548=>array(64,-199,551,563),549=>array(92,-199,539,417),550=>array(13,0,596,716),551=>array(93,-16,546,571),552=>array(47,-167,619,563),553=>array(104,-183,570,431),554=>array(102,-16,617,800),555=>array(111,-16,588,691),556=>array(102,-16,616,800),557=>array(111,-16,600,685),558=>array(102,-16,616,716),559=>array(111,-16,577,571),560=>array(102,-16,616,796),561=>array(111,-16,579,651),562=>array(153,0,665,656),563=>array(22,-186,634,511),567=>array(82,-186,517,417),592=>array(111,-14,564,433),593=>array(55,-16,547,456),594=>array(67,-39,559,433),595=>array(-38,-16,527,618),596=>array(59,-16,540,431),597=>array(90,-132,563,431),598=>array(59,-199,617,604),599=>array(38,-16,760,618),600=>array(37,-16,527,431),601=>array(56,-16,523,431),602=>array(61,-16,701,431),603=>array(83,-16,516,431),604=>array(64,-16,498,431),605=>array(108,-16,725,431),606=>array(114,-16,543,431),607=>array(86,-186,525,417),608=>array(59,-186,758,618),609=>array(105,-186,647,431),610=>array(82,-12,538,426),611=>array(112,-200,614,417),612=>array(72,-20,592,416),613=>array(102,-187,604,417),614=>array(-11,0,491,618),615=>array(10,-199,498,618),616=>array(29,0,489,624),617=>array(215,-8,472,426),618=>array(95,0,505,417),619=>array(31,0,510,604),620=>array(32,0,495,604),621=>array(215,-199,435,604),622=>array(-22,-158,605,604),623=>array(47,-14,635,417),624=>array(65,-186,654,417),625=>array(-10,-199,579,431),626=>array(-127,-199,522,431),627=>array(32,-199,614,431),628=>array(32,0,570,417),629=>array(67,-16,532,431),630=>array(9,0,611,417),631=>array(79,-16,609,465),632=>array(93,-200,565,614),633=>array(6,-10,537,417),634=>array(121,-10,691,603),635=>array(40,-199,571,417),636=>array(23,-186,593,427),637=>array(164,-199,594,427),638=>array(43,0,559,417),639=>array(67,-200,439,417),640=>array(20,0,500,417),641=>array(109,0,668,417),642=>array(64,-199,532,431),643=>array(18,-93,588,618),644=>array(18,-93,588,618),645=>array(155,-93,450,618),646=>array(23,-93,587,618),647=>array(24,-16,415,563),648=>array(87,-200,480,563),649=>array(59,-16,558,417),650=>array(70,-16,530,455),651=>array(30,0,511,543),652=>array(-55,0,486,417),653=>array(-55,0,486,417),654=>array(-34,0,578,603),655=>array(120,0,560,417),656=>array(92,-199,624,417),657=>array(81,-99,529,417),658=>array(54,-158,495,417),659=>array(115,-200,522,417),660=>array(91,0,520,577),661=>array(108,0,538,577),662=>array(202,-14,632,563),663=>array(30,-200,594,576),664=>array(111,-16,577,431),665=>array(33,0,498,417),666=>array(125,-16,568,431),667=>array(60,-12,665,492),668=>array(43,0,543,417),669=>array(64,-186,500,624),670=>array(86,-187,597,417),671=>array(52,0,500,417),672=>array(59,-186,779,618),673=>array(91,0,520,577),674=>array(108,0,538,577),675=>array(75,-16,643,604),676=>array(59,-158,658,604),677=>array(45,-99,617,604),678=>array(97,-17,648,563),679=>array(44,-16,643,618),680=>array(90,-132,656,566),681=>array(18,-199,642,604),682=>array(10,0,653,604),683=>array(40,0,636,604),684=>array(99,0,735,793),685=>array(72,-21,648,564),686=>array(133,-187,627,616),687=>array(128,-199,622,616),688=>array(200,389,526,782),689=>array(214,387,540,789),690=>array(249,243,532,771),691=>array(239,384,585,663),692=>array(208,382,554,661),693=>array(229,299,574,701),694=>array(196,388,624,755),695=>array(270,395,623,667),696=>array(201,260,600,653),697=>array(236,490,392,664),698=>array(151,490,457,664),699=>array(233,490,389,664),700=>array(236,490,392,664),701=>array(269,490,360,664),702=>array(281,480,395,661),703=>array(205,480,319,661),704=>array(332,383,561,741),705=>array(325,383,573,741),706=>array(345,595,568,800),707=>array(328,595,551,800),708=>array(328,595,533,800),709=>array(363,595,568,800),710=>array(263,490,554,639),711=>array(286,490,577,639),712=>array(387,490,450,635),713=>array(273,536,564,576),714=>array(376,490,565,639),715=>array(267,490,410,639),716=>array(374,-187,437,-42),717=>array(132,-124,423,-84),718=>array(226,-200,369,-51),719=>array(180,-198,369,-49),720=>array(232,0,456,417),721=>array(315,270,456,417),722=>array(297,192,411,373),723=>array(282,190,396,371),724=>array(305,536,532,669),725=>array(305,536,532,669),726=>array(315,490,542,716),727=>array(305,536,532,576),728=>array(280,489,574,621),729=>array(368,511,470,611),730=>array(326,480,516,661),731=>array(258,-155,408,0),732=>array(258,516,579,605),733=>array(263,490,576,633),734=>array(250,262,488,405),735=>array(326,514,529,686),736=>array(265,256,591,658),737=>array(258,386,530,779),738=>array(266,383,558,674),739=>array(232,388,594,660),740=>array(322,388,570,764),741=>array(215,0,629,800),742=>array(183,-12,624,800),743=>array(134,-12,624,800),744=>array(92,-12,624,800),745=>array(53,0,624,800),746=>array(100,0,513,690),747=>array(92,-10,539,379),748=>array(139,-200,431,-51),749=>array(170,528,679,666),750=>array(185,343,569,604),751=>array(194,-200,400,5),752=>array(158,-200,363,0),753=>array(177,-200,398,0),754=>array(159,-200,382,0),755=>array(326,-200,516,-19),756=>array(282,216,425,365),757=>array(220,477,499,626),758=>array(263,199,452,348),759=>array(106,-199,427,-110),760=>array(313,309,528,741),761=>array(352,543,506,676),762=>array(371,543,510,676),763=>array(226,-40,365,93),764=>array(226,-42,380,91),765=>array(77,-200,466,-47),766=>array(77,-200,405,-47),767=>array(36,-200,524,-21),768=>array(-220,490,-77,639),769=>array(-212,490,-23,639),770=>array(-275,490,16,639),771=>array(-287,516,34,605),772=>array(-270,536,21,576),773=>array(-383,536,109,576),774=>array(-258,489,36,621),775=>array(-184,511,-82,611),776=>array(-272,511,51,611),777=>array(-394,465,-204,682),778=>array(-224,480,-34,661),779=>array(-337,490,-24,633),780=>array(-274,490,17,639),781=>array(-173,490,-110,635),782=>array(-223,490,-50,635),783=>array(-300,490,-7,639),784=>array(-260,489,34,675),785=>array(-264,471,30,603),786=>array(-182,490,-26,664),787=>array(-130,478,26,652),788=>array(-169,502,-78,676),789=>array(-187,474,-31,648),790=>array(-378,-199,-235,-50),791=>array(-399,-200,-210,-51),792=>array(-410,-200,-264,-30),793=>array(-395,-200,-249,-30),794=>array(46,543,185,676),795=>array(-208,376,-26,565),796=>array(-405,-200,-291,-19),797=>array(-434,-187,-207,-54),798=>array(-414,-187,-187,-54),799=>array(-446,-200,-219,26),800=>array(-423,-121,-196,-81),801=>array(-381,-199,-111,0),802=>array(-359,-199,-145,0),803=>array(-382,-157,-280,-57),804=>array(-477,-153,-154,-53),805=>array(-416,-200,-226,-19),806=>array(-289,-200,-158,-54),807=>array(-419,-173,-244,0),808=>array(-342,-155,-192,0),809=>array(-346,-200,-283,-55),810=>array(-466,-200,-122,-47),811=>array(-475,-163,-137,-43),812=>array(-437,-188,-146,-39),813=>array(-485,-187,-194,-38),814=>array(-439,-177,-145,-45),815=>array(-483,-184,-189,-52),816=>array(-459,-143,-138,-54),817=>array(-457,-119,-166,-79),818=>array(-631,-146,-20,-96),819=>array(-644,-197,-9,-48),820=>array(-329,186,-8,275),821=>array(-325,279,-34,319),822=>array(-481,234,-24,275),823=>array(-460,224,-193,400),824=>array(-577,168,-183,395),825=>array(-341,-200,-227,-19),826=>array(-479,-200,-135,-47),827=>array(-424,-200,-214,-23),828=>array(-483,-163,-146,-43),829=>array(-268,481,-65,653),830=>array(-254,460,-137,687),831=>array(-464,651,171,800),832=>array(-276,490,-133,639),833=>array(-246,490,-57,639),834=>array(-294,516,27,605),835=>array(-160,478,-4,652),836=>array(-263,494,16,676),837=>array(-303,-200,-89,-34),838=>array(-305,469,39,622),839=>array(-447,-199,-156,-79),840=>array(-389,-200,-233,-55),841=>array(-385,-181,-246,-48),842=>array(-282,490,16,633),843=>array(-334,450,-13,727),844=>array(-279,516,71,746),845=>array(-447,-182,-171,-53),846=>array(-357,-193,-251,-40),848=>array(-272,455,-49,660),849=>array(-183,492,-69,673),850=>array(-303,585,-9,788),851=>array(-417,-200,-214,-28),852=>array(-424,-200,-203,0),853=>array(-453,-200,-230,0),854=>array(-537,-200,-151,0),855=>array(-141,488,-27,669),856=>array(17,511,119,611),857=>array(-405,-200,-216,-22),858=>array(-469,-199,-169,-31),859=>array(-259,451,-81,629),860=>array(-345,-200,334,-36),861=>array(-199,476,480,640),862=>array(-227,477,384,527),863=>array(-357,-120,254,-70),864=>array(-238,-140,204,-51),865=>array(-238,476,441,640),866=>array(-277,-198,249,-28),867=>array(-276,448,-80,641),868=>array(-288,448,-86,641),869=>array(-286,456,-105,725),870=>array(-281,448,-79,641),871=>array(-278,447,-87,634),872=>array(-278,445,-73,640),873=>array(-290,446,-62,714),874=>array(-298,456,-82,717),875=>array(-326,458,-72,644),876=>array(-288,458,-58,642),877=>array(-242,447,-73,697),878=>array(-275,454,-41,634),879=>array(-300,456,-60,636),884=>array(236,490,392,664),885=>array(236,-125,392,49),890=>array(262,-199,476,-33),894=>array(114,-145,426,417),900=>array(286,583,447,756),901=>array(183,494,462,676),902=>array(19,0,593,613),903=>array(299,285,450,417),904=>array(71,0,695,613),905=>array(66,0,695,613),906=>array(105,0,640,613),908=>array(111,-18,637,612),910=>array(51,0,704,610),911=>array(106,-2,654,612),912=>array(209,-7,488,660),913=>array(-54,0,520,577),914=>array(-26,0,529,577),915=>array(10,0,617,577),916=>array(-54,0,520,577),917=>array(-5,0,584,577),918=>array(30,0,539,577),919=>array(-16,0,589,577),920=>array(40,-16,554,590),921=>array(43,0,544,577),922=>array(-24,0,609,577),923=>array(-59,0,515,577),924=>array(-55,0,638,577),925=>array(-11,0,632,577),926=>array(-3,0,603,577),927=>array(41,-18,555,588),928=>array(-16,0,589,577),929=>array(-1,0,548,577),931=>array(30,0,562,577),932=>array(76,0,591,577),933=>array(76,0,604,577),934=>array(43,0,544,577),935=>array(-28,0,604,577),936=>array(85,0,653,579),937=>array(7,-2,555,571),938=>array(43,0,559,742),939=>array(76,0,604,742),940=>array(48,-14,529,661),941=>array(119,-2,521,659),942=>array(31,-186,520,647),943=>array(222,-7,465,647),944=>array(92,-12,603,680),945=>array(48,-14,529,445),946=>array(-29,-122,541,637),947=>array(123,-190,621,426),948=>array(35,-8,573,651),949=>array(119,-2,521,443),950=>array(99,-190,577,620),951=>array(31,-186,520,431),952=>array(65,-20,523,626),953=>array(222,-7,465,426),954=>array(14,2,538,428),955=>array(-15,-2,477,618),956=>array(-50,-190,547,426),957=>array(136,0,628,418),958=>array(123,-200,583,615),959=>array(61,-16,526,443),960=>array(3,0,579,428),961=>array(-52,-190,563,443),962=>array(99,-146,557,424),963=>array(34,-14,568,428),964=>array(91,0,602,428),965=>array(92,-12,603,428),966=>array(110,-200,594,426),967=>array(-39,-177,624,428),968=>array(83,-200,645,428),969=>array(34,-16,595,430),970=>array(168,-7,491,591),971=>array(92,-12,603,591),972=>array(61,-16,526,659),973=>array(92,-12,603,643),974=>array(34,-16,595,651),976=>array(162,-20,594,614),977=>array(101,-15,556,618),978=>array(144,0,643,563),979=>array(44,0,689,563),980=>array(144,0,643,677),981=>array(93,-200,565,614),982=>array(75,-16,624,431),986=>array(118,-146,715,562),987=>array(125,-147,631,439),988=>array(47,0,640,563),989=>array(88,-180,614,438),1008=>array(43,-1,646,417),1009=>array(82,-190,584,443),1012=>array(102,-16,616,576),1013=>array(214,-16,513,431),1024=>array(47,0,619,769),1025=>array(47,0,619,723),1026=>array(125,-137,596,566),1027=>array(48,0,640,775),1028=>array(106,-16,630,576),1029=>array(96,-17,602,577),1030=>array(117,0,603,563),1031=>array(117,0,604,724),1032=>array(100,-16,699,563),1033=>array(17,0,619,563),1034=>array(9,0,618,563),1035=>array(108,3,590,566),1036=>array(43,0,647,792),1037=>array(53,0,643,771),1038=>array(157,0,727,741),1039=>array(84,-80,672,563),1040=>array(13,0,596,563),1041=>array(35,0,628,563),1042=>array(47,0,591,563),1043=>array(48,0,640,563),1044=>array(23,-146,637,563),1045=>array(47,0,619,563),1046=>array(15,0,682,563),1047=>array(97,-16,579,576),1048=>array(53,0,643,563),1049=>array(53,0,643,741),1050=>array(43,0,647,563),1051=>array(53,0,619,563),1052=>array(15,0,700,563),1053=>array(57,0,646,563),1054=>array(102,-16,616,576),1055=>array(52,0,642,563),1056=>array(47,0,587,563),1057=>array(110,-16,635,576),1058=>array(152,0,648,563),1059=>array(95,0,665,563),1060=>array(61,0,656,563),1061=>array(44,0,662,563),1062=>array(69,-146,659,563),1063=>array(194,0,630,563),1064=>array(23,0,696,563),1065=>array(16,-146,689,563),1066=>array(73,0,618,563),1067=>array(9,0,705,563),1068=>array(74,0,565,563),1069=>array(83,-16,605,576),1070=>array(-1,-16,676,576),1071=>array(18,0,676,563),1072=>array(93,-16,546,431),1073=>array(127,-16,619,626),1074=>array(106,0,526,417),1075=>array(110,0,567,417),1076=>array(32,-118,595,417),1077=>array(104,-16,570,431),1078=>array(33,0,646,417),1079=>array(101,-16,536,431),1080=>array(69,0,627,417),1081=>array(69,0,627,606),1082=>array(82,0,594,417),1083=>array(89,0,587,417),1084=>array(44,0,614,417),1085=>array(80,0,608,417),1086=>array(111,-16,577,431),1087=>array(76,0,604,417),1088=>array(-13,-186,593,431),1089=>array(121,-17,596,432),1090=>array(182,-1,567,417),1091=>array(22,-186,634,417),1092=>array(74,-186,621,573),1093=>array(55,0,611,417),1094=>array(81,-118,609,417),1095=>array(161,0,595,417),1096=>array(71,0,638,417),1097=>array(38,-118,641,417),1098=>array(125,0,573,417),1099=>array(9,0,670,417),1100=>array(105,0,511,417),1101=>array(94,-16,576,431),1102=>array(23,-16,619,431),1103=>array(78,0,584,417),1104=>array(104,-16,570,627),1105=>array(104,-16,570,605),1106=>array(76,-151,555,604),1107=>array(110,0,567,639),1108=>array(121,-16,594,431),1109=>array(108,-17,558,431),1110=>array(96,0,513,624),1111=>array(96,0,570,603),1112=>array(82,-186,517,624),1113=>array(49,0,597,417),1114=>array(33,0,600,417),1115=>array(65,0,566,604),1116=>array(82,0,594,639),1117=>array(69,0,627,610),1118=>array(22,-186,634,610),1119=>array(64,-80,621,417),1120=>array(66,-16,690,564),1121=>array(34,-16,595,430),1122=>array(79,-1,606,608),1123=>array(88,0,519,445),1124=>array(9,-17,672,576),1125=>array(13,-16,656,431),1126=>array(12,0,597,563),1127=>array(12,0,597,417),1128=>array(-22,0,671,563),1129=>array(8,0,601,417),1130=>array(11,0,597,564),1131=>array(41,0,567,416),1132=>array(10,0,597,563),1133=>array(41,0,579,416),1134=>array(88,-186,572,754),1135=>array(88,-186,542,614),1136=>array(85,0,653,579),1137=>array(83,-200,645,428),1138=>array(102,-16,616,576),1139=>array(111,-16,577,431),1140=>array(123,0,706,563),1141=>array(113,0,675,417),1142=>array(123,0,706,734),1143=>array(113,0,675,626),1144=>array(50,-186,681,576),1145=>array(43,-186,671,431),1146=>array(102,-41,616,599),1147=>array(111,-41,577,454),1148=>array(66,-16,690,799),1149=>array(34,-16,595,626),1150=>array(66,-16,690,800),1151=>array(34,-16,607,664),1155=>array(-341,617,52,771),1156=>array(-294,471,0,603),1157=>array(-169,502,-78,676),1158=>array(-130,478,26,652),1159=>array(-125,454,276,584),1162=>array(53,-146,643,741),1163=>array(69,-146,627,606),1164=>array(85,0,576,583),1165=>array(125,0,531,437),1166=>array(62,0,602,563),1167=>array(-7,-186,599,431),1168=>array(42,0,657,688),1169=>array(104,0,582,535),1170=>array(50,0,642,563),1171=>array(108,0,565,417),1172=>array(44,-93,636,563),1173=>array(93,-188,550,417),1174=>array(7,-146,701,563),1175=>array(15,-146,663,417),1176=>array(113,-173,595,576),1177=>array(126,-173,561,431),1178=>array(41,-146,646,563),1179=>array(83,-146,594,417),1180=>array(38,0,657,563),1181=>array(80,0,592,417),1182=>array(44,0,648,563),1183=>array(83,0,595,417),1184=>array(67,0,671,563),1185=>array(116,0,632,417),1186=>array(53,-146,643,563),1187=>array(86,-146,603,417),1188=>array(19,0,701,563),1189=>array(48,0,649,417),1190=>array(-24,-93,642,563),1191=>array(21,-188,609,417),1192=>array(109,-132,634,576),1193=>array(122,-132,595,431),1194=>array(117,-155,641,576),1195=>array(111,-155,584,431),1196=>array(150,-146,646,563),1197=>array(182,-147,567,417),1198=>array(153,0,665,563),1199=>array(118,-199,660,417),1200=>array(153,0,665,563),1201=>array(113,-199,655,417),1202=>array(42,-146,661,563),1203=>array(54,-146,610,417),1204=>array(102,-146,694,563),1205=>array(102,-118,643,417),1206=>array(185,-146,621,563),1207=>array(175,-146,586,417),1208=>array(185,0,621,563),1209=>array(178,0,590,417),1210=>array(99,0,534,563),1211=>array(99,0,511,417),1212=>array(54,-16,672,576),1213=>array(70,-16,632,431),1214=>array(55,-155,672,576),1215=>array(75,-155,637,431),1216=>array(117,0,603,563),1217=>array(15,0,682,755),1218=>array(33,0,646,624),1219=>array(55,-105,660,563),1220=>array(86,-188,598,417),1221=>array(72,-146,646,563),1222=>array(99,-146,597,417),1223=>array(64,-199,653,563),1224=>array(83,-199,601,417),1225=>array(57,-146,646,563),1226=>array(69,-146,628,417),1227=>array(187,-147,622,563),1228=>array(179,-146,590,417),1229=>array(15,-146,700,563),1230=>array(56,-146,634,417),1231=>array(117,0,603,563),1232=>array(13,0,598,735),1233=>array(93,-16,577,625),1234=>array(13,0,596,726),1235=>array(93,-16,568,602),1236=>array(14,0,690,563),1237=>array(36,-16,630,431),1238=>array(47,0,619,755),1239=>array(104,-16,570,624),1240=>array(103,-16,615,576),1241=>array(104,-16,570,431),1242=>array(103,-16,615,723),1243=>array(104,-16,570,604),1244=>array(15,0,682,723),1245=>array(33,0,646,604),1246=>array(97,-16,587,723),1247=>array(101,-16,555,604),1248=>array(55,-15,517,563),1249=>array(54,-158,495,417),1250=>array(53,0,643,664),1251=>array(69,0,627,522),1252=>array(53,0,643,724),1253=>array(69,0,627,603),1254=>array(102,-16,616,724),1255=>array(111,-16,577,603),1256=>array(102,-16,616,576),1257=>array(111,-16,577,431),1258=>array(102,-16,616,722),1259=>array(111,-16,577,603),1260=>array(83,-16,605,725),1261=>array(94,-16,576,604),1262=>array(95,0,665,665),1263=>array(22,-186,634,521),1264=>array(95,0,665,722),1265=>array(22,-186,634,603),1266=>array(95,0,665,764),1267=>array(22,-186,634,614),1268=>array(194,0,630,722),1269=>array(161,0,595,603),1270=>array(48,-146,640,563),1271=>array(110,-146,567,417),1272=>array(9,0,705,723),1273=>array(9,0,670,603),1296=>array(120,-16,601,576),1297=>array(125,-16,561,431),1298=>array(71,-199,646,563),1299=>array(99,-199,597,417),1306=>array(102,-115,616,576),1307=>array(105,-186,668,431),1308=>array(122,0,696,563),1309=>array(114,0,655,417),1310=>array(49,0,652,563),1311=>array(73,0,585,417),1329=>array(61,-145,601,563),1330=>array(-17,0,564,579),1331=>array(54,0,558,580),1332=>array(20,0,569,579),1333=>array(73,-16,588,563),1334=>array(-25,-10,565,578),1335=>array(10,-80,552,563),1336=>array(-17,0,565,579),1337=>array(-45,0,601,575),1338=>array(30,-16,592,563),1339=>array(-34,0,550,563),1340=>array(7,0,504,562),1341=>array(-54,-12,620,563),1342=>array(31,-14,561,572),1343=>array(96,0,587,563),1344=>array(113,-20,528,571),1345=>array(7,0,543,584),1346=>array(24,0,525,579),1347=>array(-6,0,527,564),1348=>array(27,-16,596,564),1349=>array(29,0,509,605),1350=>array(74,-16,578,563),1351=>array(43,-16,562,612),1352=>array(16,0,555,579),1353=>array(-2,-61,553,586),1354=>array(25,0,537,579),1355=>array(8,-3,553,564),1356=>array(-26,0,595,579),1357=>array(47,-16,587,563),1358=>array(36,0,586,564),1359=>array(34,-16,544,584),1360=>array(0,0,582,579),1361=>array(25,0,506,594),1362=>array(36,0,508,563),1363=>array(65,0,533,563),1364=>array(0,0,596,580),1365=>array(42,-16,559,584),1366=>array(36,-17,494,572),1369=>array(251,480,365,661),1370=>array(236,490,392,664),1371=>array(376,490,565,639),1372=>array(249,471,580,603),1373=>array(330,490,473,639),1374=>array(315,595,601,778),1375=>array(275,588,586,719),1377=>array(47,-16,578,423),1378=>array(-11,-190,537,432),1379=>array(59,-190,561,438),1380=>array(10,-190,558,438),1381=>array(89,-16,587,572),1382=>array(59,-189,623,438),1383=>array(71,0,461,572),1384=>array(-10,-190,521,438),1385=>array(-41,-190,568,438),1386=>array(29,-16,591,572),1387=>array(-25,-190,507,573),1388=>array(11,-190,473,422),1389=>array(-75,-190,560,573),1390=>array(50,-16,623,572),1391=>array(101,-190,519,572),1392=>array(-4,0,487,572),1393=>array(47,-16,533,609),1394=>array(43,-190,532,438),1395=>array(23,0,512,572),1396=>array(79,-16,605,573),1397=>array(29,-190,470,422),1398=>array(82,-16,555,637),1399=>array(30,-190,553,438),1400=>array(10,0,501,438),1401=>array(28,-190,486,453),1402=>array(65,-190,655,422),1403=>array(30,-190,553,438),1404=>array(10,0,514,438),1405=>array(85,-16,528,423),1406=>array(88,-190,562,572),1407=>array(61,-16,517,438),1408=>array(-10,-190,521,438),1409=>array(77,-188,622,438),1410=>array(80,0,492,422),1411=>array(49,-190,561,572),1412=>array(43,0,602,613),1413=>array(66,-16,534,438),1414=>array(77,-190,512,572),1415=>array(148,-16,547,572),1417=>array(235,-15,450,417),1418=>array(185,235,435,326),1423=>array(49,0,559,579),1456=>array(229,-200,313,-41),1457=>array(135,-200,431,-42),1458=>array(137,-200,431,-42),1459=>array(137,-200,431,-40),1460=>array(251,-101,311,-42),1461=>array(194,-102,372,-43),1462=>array(194,-200,372,-42),1463=>array(195,-83,372,-42),1464=>array(197,-200,374,-40),1465=>array(91,540,151,599),1467=>array(133,-200,404,-42),1468=>array(321,211,382,270),1469=>array(233,-200,304,-24),1470=>array(197,439,598,480),1471=>array(332,540,508,581),1472=>array(258,-120,444,600),1473=>array(639,540,700,599),1474=>array(169,540,230,599),1475=>array(235,-15,450,417),1476=>array(419,674,481,734),1488=>array(60,0,642,480),1489=>array(64,0,565,480),1490=>array(137,0,504,480),1491=>array(157,0,638,480),1492=>array(99,0,614,480),1493=>array(267,0,422,480),1494=>array(230,0,565,480),1495=>array(99,0,614,480),1496=>array(120,0,637,480),1497=>array(267,219,422,480),1498=>array(157,-200,573,480),1499=>array(64,0,572,480),1500=>array(153,0,642,617),1501=>array(97,0,614,480),1502=>array(101,0,614,481),1503=>array(238,-200,422,480),1504=>array(137,0,504,480),1505=>array(125,0,614,480),1506=>array(64,0,645,480),1507=>array(143,-200,614,480),1508=>array(64,0,614,480),1509=>array(157,-200,642,480),1510=>array(55,0,633,480),1511=>array(80,-200,631,480),1512=>array(157,0,614,480),1513=>array(51,0,672,480),1514=>array(27,0,614,480),1520=>array(187,0,552,480),1521=>array(187,0,552,480),1522=>array(187,219,552,480),1523=>array(324,315,498,604),1524=>array(232,315,586,604),4304=>array(156,112,560,553),4305=>array(163,112,559,760),4306=>array(86,-179,509,463),4307=>array(72,-185,600,463),4308=>array(93,-179,569,463),4309=>array(96,-179,570,463),4310=>array(193,112,601,777),4311=>array(120,105,603,465),4312=>array(157,106,559,463),4313=>array(93,-179,577,470),4314=>array(75,-186,614,463),4315=>array(203,112,628,777),4316=>array(155,112,666,795),4317=>array(114,106,610,463),4318=>array(155,112,588,779),4319=>array(91,-179,611,485),4320=>array(113,105,628,777),4321=>array(166,112,562,777),4322=>array(70,-183,590,622),4323=>array(128,-179,623,470),4324=>array(104,-179,620,463),4325=>array(90,-179,671,800),4326=>array(83,-186,619,463),4327=>array(96,-179,586,459),4328=>array(196,112,677,777),4329=>array(131,107,556,777),4330=>array(62,-180,602,470),4331=>array(157,112,661,777),4332=>array(222,-200,667,800),4333=>array(69,-179,640,748),4334=>array(160,112,564,777),4335=>array(23,-179,635,463),4336=>array(156,112,626,779),4337=>array(135,119,690,759),4338=>array(136,90,520,491),4339=>array(72,-179,601,465),4340=>array(111,-179,556,626),4341=>array(139,111,631,779),4345=>array(131,-200,554,442),4347=>array(108,3,565,577),4348=>array(215,207,599,720),7680=>array(13,-198,596,563),7681=>array(93,-200,546,431),7682=>array(47,0,591,722),7683=>array(26,-16,591,723),7684=>array(47,-160,591,563),7685=>array(26,-176,591,604),7686=>array(47,-100,591,563),7687=>array(26,-116,591,604),7688=>array(110,-173,635,785),7689=>array(122,-173,596,640),7690=>array(47,0,592,736),7691=>array(102,-16,630,725),7692=>array(47,-160,592,563),7693=>array(102,-176,630,604),7694=>array(47,-100,592,563),7695=>array(102,-116,630,604),7696=>array(47,-167,592,563),7697=>array(102,-183,630,604),7698=>array(47,-199,592,563),7699=>array(102,-200,630,604),7700=>array(47,0,619,800),7701=>array(104,-16,570,785),7702=>array(47,0,619,800),7703=>array(104,-16,570,776),7704=>array(47,-196,619,563),7705=>array(104,-199,570,431),7706=>array(47,-149,619,563),7707=>array(104,-165,570,431),7708=>array(47,-167,619,768),7709=>array(104,-183,570,623),7710=>array(47,0,640,736),7711=>array(109,0,663,764),7712=>array(108,-16,636,676),7713=>array(105,-186,647,531),7714=>array(57,0,646,736),7715=>array(55,0,556,725),7716=>array(57,-160,646,563),7717=>array(55,-160,556,604),7718=>array(57,0,646,736),7719=>array(55,0,611,746),7720=>array(56,-167,645,563),7721=>array(55,-167,556,604),7722=>array(57,-192,646,563),7723=>array(55,-192,556,604),7724=>array(117,-149,603,563),7725=>array(96,-149,513,624),7726=>array(117,0,619,800),7727=>array(96,0,569,781),7728=>array(47,0,662,785),7729=>array(67,0,578,777),7730=>array(47,-160,662,563),7731=>array(67,-160,578,604),7732=>array(47,-100,662,563),7733=>array(67,-100,578,604),7734=>array(67,-160,585,563),7735=>array(96,-160,513,604),7736=>array(67,-160,585,676),7737=>array(96,-160,533,704),7738=>array(67,-100,585,563),7739=>array(96,-100,513,604),7740=>array(67,-200,585,563),7741=>array(96,-197,513,604),7742=>array(15,0,700,776),7743=>array(15,0,603,628),7744=>array(15,0,700,736),7745=>array(15,0,603,591),7746=>array(15,-160,700,563),7747=>array(15,-160,603,431),7748=>array(46,0,678,736),7749=>array(57,0,546,591),7750=>array(46,-160,678,563),7751=>array(57,-160,546,431),7752=>array(46,-100,678,563),7753=>array(57,-100,546,431),7754=>array(46,-197,678,563),7755=>array(57,-199,546,431),7756=>array(102,-11,623,800),7757=>array(111,-16,579,772),7758=>array(102,-11,639,800),7759=>array(111,-16,604,723),7760=>array(102,-11,616,785),7761=>array(111,-16,577,777),7762=>array(102,-11,632,800),7763=>array(111,-16,591,777),7764=>array(47,0,587,785),7765=>array(-13,-186,604,640),7766=>array(47,0,587,725),7767=>array(-13,-186,593,591),7768=>array(47,0,594,724),7769=>array(88,0,619,591),7770=>array(47,-160,594,563),7771=>array(88,-160,619,427),7772=>array(47,-160,594,676),7773=>array(88,-160,619,551),7774=>array(47,-100,594,563),7775=>array(88,-100,619,427),7776=>array(96,-17,602,737),7777=>array(108,-17,558,591),7778=>array(96,-177,602,577),7779=>array(108,-177,558,431),7780=>array(96,-15,602,800),7781=>array(108,-17,558,743),7782=>array(96,-17,602,800),7783=>array(108,-17,596,739),7784=>array(96,-177,602,737),7785=>array(108,-177,558,591),7786=>array(152,0,648,736),7787=>array(127,-16,518,683),7788=>array(152,-160,648,563),7789=>array(127,-176,518,563),7790=>array(138,-100,648,563),7791=>array(127,-116,518,563),7792=>array(118,-197,648,563),7793=>array(111,-200,518,563),7794=>array(112,-176,676,563),7795=>array(68,-176,569,417),7796=>array(114,-165,676,563),7797=>array(70,-165,569,417),7798=>array(112,-200,676,563),7799=>array(113,-200,569,417),7800=>array(136,-16,672,800),7801=>array(127,-16,569,755),7802=>array(136,-16,676,800),7803=>array(127,-16,580,725),7804=>array(124,0,707,725),7805=>array(114,0,655,580),7806=>array(124,-160,707,563),7807=>array(114,-160,655,417),7808=>array(122,0,696,785),7809=>array(114,0,655,640),7810=>array(122,0,696,785),7811=>array(114,0,655,640),7812=>array(122,0,696,736),7813=>array(114,0,655,591),7814=>array(122,0,696,736),7815=>array(114,0,655,591),7816=>array(122,-160,696,563),7817=>array(114,-160,655,417),7818=>array(44,0,662,736),7819=>array(55,0,611,591),7820=>array(44,0,662,736),7821=>array(55,0,611,591),7822=>array(153,0,665,736),7823=>array(22,-186,634,591),7824=>array(103,0,590,785),7825=>array(115,0,563,640),7826=>array(103,-160,590,563),7827=>array(115,-160,563,417),7828=>array(103,-100,590,563),7829=>array(115,-100,563,417),7830=>array(55,-100,556,604),7831=>array(127,-16,518,723),7832=>array(114,0,655,672),7833=>array(22,-186,634,672),7834=>array(93,-16,600,661),7835=>array(109,0,663,764),7840=>array(13,-160,596,563),7841=>array(93,-176,546,431),7842=>array(13,0,596,800),7843=>array(93,-16,546,693),7844=>array(13,0,691,789),7845=>array(93,-16,699,751),7846=>array(13,0,603,796),7847=>array(93,-16,554,733),7848=>array(13,0,739,800),7849=>array(93,-16,680,762),7850=>array(13,0,622,782),7851=>array(93,-16,609,748),7852=>array(13,-160,596,762),7853=>array(93,-176,554,640),7854=>array(13,0,596,800),7855=>array(93,-16,585,776),7856=>array(13,0,596,799),7857=>array(93,-16,574,770),7858=>array(13,0,596,800),7859=>array(93,-16,574,790),7860=>array(13,0,611,780),7861=>array(93,-16,615,770),7862=>array(13,-160,596,760),7863=>array(93,-176,573,623),7864=>array(47,-160,619,563),7865=>array(104,-176,570,431),7866=>array(47,0,619,800),7867=>array(104,-16,570,671),7868=>array(47,0,619,701),7869=>array(104,-16,570,580),7870=>array(47,0,714,797),7871=>array(104,-16,711,797),7872=>array(47,0,619,799),7873=>array(104,-16,570,732),7874=>array(47,0,752,800),7875=>array(104,-16,706,772),7876=>array(47,0,622,792),7877=>array(104,-16,597,750),7878=>array(47,-160,619,776),7879=>array(104,-176,570,640),7880=>array(117,0,603,800),7881=>array(96,0,513,681),7882=>array(117,-160,603,563),7883=>array(96,-160,513,624),7884=>array(102,-176,616,576),7885=>array(111,-176,577,431),7886=>array(102,-16,616,800),7887=>array(111,-16,577,693),7888=>array(102,-16,769,788),7889=>array(111,-16,681,734),7890=>array(102,-13,617,798),7891=>array(111,-16,577,734),7892=>array(102,-16,736,800),7893=>array(111,-16,699,731),7894=>array(102,-11,653,797),7895=>array(111,-16,601,747),7896=>array(102,-176,616,779),7897=>array(111,-176,577,640),7898=>array(109,-16,672,788),7899=>array(103,-16,634,628),7900=>array(109,-16,672,782),7901=>array(103,-16,634,621),7902=>array(109,-16,672,800),7903=>array(103,-16,634,680),7904=>array(173,-16,736,751),7905=>array(147,-16,678,668),7906=>array(149,-176,731,711),7907=>array(148,-176,679,565),7908=>array(136,-176,676,563),7909=>array(127,-176,569,417),7910=>array(136,-16,676,800),7911=>array(127,-16,569,681),7912=>array(101,-16,728,758),7913=>array(96,-16,645,643),7914=>array(101,-16,728,770),7915=>array(96,-16,645,626),7916=>array(101,-16,728,799),7917=>array(96,-16,645,675),7918=>array(101,-16,728,766),7919=>array(96,-16,645,626),7920=>array(101,-176,728,711),7921=>array(96,-176,645,565),7922=>array(153,0,665,785),7923=>array(22,-186,634,640),7924=>array(153,-160,665,563),7925=>array(22,-186,634,417),7926=>array(153,0,665,800),7927=>array(22,-186,634,654),7928=>array(153,0,665,725),7929=>array(22,-186,634,580),7936=>array(48,-14,529,701),7937=>array(48,-14,529,682),7938=>array(48,-14,529,689),7939=>array(48,-14,529,695),7940=>array(48,-14,529,686),7941=>array(48,-14,575,688),7942=>array(48,-14,579,799),7943=>array(48,-14,591,800),7944=>array(13,0,587,617),7945=>array(16,0,590,615),7946=>array(10,0,597,622),7947=>array(21,0,595,628),7948=>array(-3,0,617,619),7949=>array(40,0,648,620),7950=>array(55,0,629,744),7951=>array(51,0,625,744),7952=>array(119,-2,521,725),7953=>array(119,-2,521,680),7954=>array(119,-2,521,687),7955=>array(119,-2,528,693),7956=>array(119,-2,543,684),7957=>array(119,-2,590,686),7960=>array(90,0,679,616),7961=>array(91,0,680,615),7962=>array(-4,0,680,619),7963=>array(21,0,682,625),7964=>array(-41,0,680,616),7965=>array(5,0,709,620),7968=>array(31,-186,520,695),7969=>array(31,-186,520,680),7970=>array(31,-186,520,687),7971=>array(31,-186,520,699),7972=>array(31,-186,575,684),7973=>array(31,-186,622,686),7974=>array(31,-186,589,800),7975=>array(31,-186,638,799),7976=>array(77,0,682,618),7977=>array(79,0,684,618),7978=>array(31,0,716,620),7979=>array(54,0,708,622),7980=>array(-3,0,709,619),7981=>array(12,0,713,621),7982=>array(78,0,727,744),7983=>array(96,0,734,744),7984=>array(222,-7,465,697),7985=>array(222,-7,465,668),7986=>array(203,-7,465,675),7987=>array(222,-7,480,681),7988=>array(222,-7,495,672),7989=>array(222,-7,542,674),7990=>array(222,-7,553,800),7991=>array(222,-7,558,800),7992=>array(115,0,621,618),7993=>array(117,0,618,618),7994=>array(79,0,687,621),7995=>array(106,0,682,628),7996=>array(82,0,722,613),7997=>array(88,0,700,620),7998=>array(131,0,712,741),7999=>array(134,0,711,744),8000=>array(61,-16,526,725),8001=>array(61,-16,526,680),8002=>array(61,-16,526,687),8003=>array(61,-16,526,693),8004=>array(61,-16,540,684),8005=>array(61,-16,587,686),8008=>array(106,-18,639,613),8009=>array(122,-18,636,613),8010=>array(-6,-18,662,622),8011=>array(29,-18,664,624),8012=>array(44,-18,663,615),8013=>array(61,-18,656,617),8016=>array(92,-12,603,685),8017=>array(92,-12,603,688),8018=>array(92,-12,603,707),8019=>array(92,-12,603,693),8020=>array(92,-12,603,684),8021=>array(92,-12,603,690),8022=>array(92,-12,603,800),8023=>array(92,-12,603,799),8025=>array(89,0,679,618),8027=>array(50,0,746,628),8029=>array(29,0,774,618),8031=>array(81,0,764,744),8032=>array(34,-16,595,705),8033=>array(34,-16,595,668),8034=>array(34,-16,595,675),8035=>array(34,-16,595,689),8036=>array(34,-16,595,668),8037=>array(34,-16,595,674),8038=>array(34,-16,595,799),8039=>array(34,-16,595,800),8040=>array(82,-2,630,614),8041=>array(86,-2,634,612),8042=>array(-22,-2,640,622),8043=>array(15,-2,646,626),8044=>array(26,-2,631,613),8045=>array(70,-2,663,615),8046=>array(70,-2,650,738),8047=>array(54,-2,656,740),8048=>array(48,-14,529,689),8049=>array(48,-14,529,680),8050=>array(119,-2,521,687),8051=>array(119,-2,521,678),8052=>array(31,-186,520,687),8053=>array(31,-186,520,678),8054=>array(222,-7,465,675),8055=>array(222,-7,465,666),8056=>array(61,-16,526,687),8057=>array(61,-16,526,678),8058=>array(92,-12,603,675),8059=>array(92,-12,603,666),8060=>array(34,-16,595,667),8061=>array(34,-16,595,614),8064=>array(48,-200,529,701),8065=>array(48,-200,529,682),8066=>array(48,-200,529,689),8067=>array(48,-200,529,695),8068=>array(48,-200,529,686),8069=>array(48,-200,575,688),8070=>array(48,-200,579,799),8071=>array(48,-200,591,800),8072=>array(13,-200,587,617),8073=>array(34,-200,608,615),8074=>array(20,-200,607,622),8075=>array(26,-200,600,628),8076=>array(0,-200,620,619),8077=>array(51,-200,659,620),8078=>array(55,-200,629,744),8079=>array(51,-200,625,744),8080=>array(31,-200,520,695),8081=>array(31,-200,520,680),8082=>array(31,-200,520,687),8083=>array(31,-200,520,699),8084=>array(31,-200,575,684),8085=>array(31,-200,622,686),8086=>array(31,-200,589,800),8087=>array(31,-200,638,800),8088=>array(77,-200,682,618),8089=>array(79,-200,684,618),8090=>array(51,-200,736,620),8091=>array(82,-200,736,622),8092=>array(15,-200,727,619),8093=>array(30,-200,731,621),8094=>array(78,-200,727,744),8095=>array(96,-200,734,744),8096=>array(34,-199,595,705),8097=>array(34,-200,595,668),8098=>array(34,-200,595,675),8099=>array(34,-200,595,689),8100=>array(34,-200,595,668),8101=>array(34,-200,595,674),8102=>array(34,-199,595,799),8103=>array(34,-200,595,800),8104=>array(82,-200,630,614),8105=>array(68,-200,616,612),8106=>array(-22,-200,640,622),8107=>array(26,-200,657,626),8108=>array(26,-200,631,613),8109=>array(70,-200,663,615),8110=>array(70,-200,650,738),8111=>array(54,-200,656,740),8112=>array(48,-14,529,637),8113=>array(48,-14,529,545),8114=>array(48,-200,529,689),8115=>array(48,-200,529,445),8116=>array(48,-200,529,661),8118=>array(48,-14,529,594),8119=>array(48,-200,529,594),8120=>array(-54,0,520,769),8121=>array(-54,0,520,677),8122=>array(17,0,591,625),8123=>array(27,0,601,616),8124=>array(13,-200,587,577),8125=>array(344,578,482,751),8126=>array(262,-199,476,-20),8127=>array(65,577,203,750),8128=>array(140,516,460,605),8129=>array(126,511,474,733),8130=>array(31,-200,520,687),8131=>array(31,-200,520,431),8132=>array(31,-200,520,674),8134=>array(31,-186,568,592),8135=>array(31,-200,568,592),8136=>array(78,0,667,622),8137=>array(70,0,682,616),8138=>array(73,0,678,622),8139=>array(78,0,687,613),8140=>array(60,-200,665,577),8141=>array(179,477,409,661),8142=>array(200,483,471,658),8143=>array(139,503,459,800),8144=>array(194,-7,488,623),8145=>array(178,-7,469,531),8146=>array(197,-7,476,657),8147=>array(222,-7,505,666),8150=>array(168,-7,488,580),8151=>array(168,-7,516,713),8152=>array(43,0,549,769),8153=>array(43,0,544,677),8154=>array(103,0,604,619),8155=>array(115,0,651,613),8157=>array(259,483,457,667),8158=>array(259,484,519,660),8159=>array(221,499,541,800),8160=>array(92,-12,603,623),8161=>array(92,-12,603,531),8162=>array(92,-12,603,671),8163=>array(92,-12,603,670),8164=>array(-52,-190,563,674),8165=>array(-52,-190,563,680),8166=>array(92,-12,603,580),8167=>array(92,-12,603,713),8168=>array(76,0,604,769),8169=>array(76,0,604,677),8170=>array(128,0,688,622),8171=>array(97,0,749,613),8172=>array(97,0,646,609),8173=>array(223,491,502,675),8174=>array(242,488,521,670),8175=>array(258,477,318,661),8178=>array(34,-200,595,667),8179=>array(34,-200,595,430),8180=>array(34,-200,595,651),8182=>array(34,-16,595,610),8183=>array(34,-200,595,610),8184=>array(112,-18,637,619),8185=>array(113,-18,638,609),8186=>array(94,-2,642,618),8187=>array(84,-2,632,609),8188=>array(67,-200,615,571),8189=>array(142,479,303,652),8190=>array(259,484,349,657),8208=>array(194,258,524,299),8209=>array(194,258,524,299),8210=>array(131,261,588,302),8211=>array(131,261,588,302),8212=>array(60,261,659,302),8213=>array(60,261,659,302),8214=>array(230,39,370,638),8215=>array(-27,-200,584,-54),8216=>array(364,364,536,625),8217=>array(292,343,464,604),8218=>array(153,-181,325,80),8219=>array(375,343,501,604),8220=>array(196,364,586,625),8221=>array(195,343,579,604),8222=>array(81,-181,465,80),8223=>array(263,343,610,604),8224=>array(208,-63,561,604),8225=>array(154,-62,561,604),8226=>array(253,141,449,337),8227=>array(202,86,459,336),8228=>array(250,-15,349,84),8229=>array(140,-15,460,84),8230=>array(57,-15,557,84),8231=>array(299,187,401,287),8240=>array(91,-9,598,614),8241=>array(-43,-9,554,614),8242=>array(178,343,426,604),8243=>array(178,343,642,604),8244=>array(83,343,731,604),8245=>array(229,343,376,604),8246=>array(217,343,578,604),8247=>array(130,343,675,604),8248=>array(123,-165,415,-16),8249=>array(108,0,397,417),8250=>array(297,0,585,417),8251=>array(60,51,522,511),8252=>array(54,-15,527,618),8253=>array(171,-15,521,577),8254=>array(134,635,745,685),8255=>array(84,-174,487,-44),8256=>array(201,454,602,584),8257=>array(141,-198,450,252),8258=>array(0,0,763,719),8259=>array(128,39,586,496),8260=>array(84,138,645,470),8261=>array(220,-124,477,604),8262=>array(123,-124,380,604),8263=>array(52,-15,693,577),8264=>array(71,-15,623,618),8265=>array(-42,-15,581,618),8266=>array(133,-14,524,417),8267=>array(44,-62,598,604),8268=>array(133,109,618,453),8269=>array(121,109,606,453),8270=>array(161,0,536,354),8271=>array(139,-145,350,417),8272=>array(121,0,602,584),8273=>array(162,1,606,719),8274=>array(99,-31,625,722),8275=>array(183,168,504,257),8276=>array(86,-164,487,-34),8277=>array(131,261,588,302),8278=>array(173,5,630,579),8279=>array(59,343,816,604),8280=>array(86,5,659,670),8281=>array(23,5,704,579),8282=>array(260,5,506,784),8283=>array(79,-193,661,785),8284=>array(90,32,633,538),8285=>array(255,5,502,784),8286=>array(284,5,529,784),8304=>array(276,379,516,733),8305=>array(260,381,503,788),8308=>array(226,382,468,734),8309=>array(235,380,506,741),8310=>array(277,380,551,754),8311=>array(329,414,558,774),8312=>array(273,417,524,786),8313=>array(292,414,567,788),8314=>array(305,432,549,691),8315=>array(295,549,539,584),8316=>array(287,512,546,620),8317=>array(374,352,533,800),8318=>array(326,352,485,800),8319=>array(239,381,544,650),8320=>array(199,-149,439,205),8321=>array(192,-129,412,224),8322=>array(203,-137,487,216),8323=>array(188,-149,459,212),8324=>array(179,-136,421,216),8325=>array(168,-158,439,203),8326=>array(180,-158,454,216),8327=>array(212,-144,441,216),8328=>array(186,-151,437,218),8329=>array(175,-144,450,230),8330=>array(168,-129,412,130),8331=>array(178,-12,422,23),8332=>array(195,-58,439,50),8333=>array(235,-200,394,248),8334=>array(188,-200,347,248),8336=>array(124,-151,437,158),8337=>array(126,-160,447,149),8338=>array(134,-160,455,149),8339=>array(95,-141,475,148),8340=>array(145,-160,466,149),8353=>array(109,-81,635,626),8354=>array(109,-16,635,576),8355=>array(-13,0,580,563),8356=>array(28,0,479,578),8357=>array(14,-64,644,470),8358=>array(45,0,678,563),8359=>array(-27,-17,609,563),8360=>array(3,-17,640,563),8361=>array(71,0,696,563),8362=>array(64,0,639,480),8363=>array(83,0,708,696),8364=>array(81,-16,652,576),8365=>array(46,0,662,563),8366=>array(151,0,648,563),8367=>array(16,-102,610,563),8368=>array(106,-200,555,567),8369=>array(47,0,634,563),8370=>array(107,-67,636,624),8371=>array(12,0,604,563),8372=>array(112,-16,591,576),8373=>array(62,-92,574,655),8376=>array(139,0,644,563),8377=>array(157,0,616,564),8448=>array(98,-10,681,719),8449=>array(58,-14,625,715),8450=>array(50,-16,574,576),8451=>array(70,-16,609,661),8452=>array(66,0,585,626),8453=>array(37,-13,603,718),8454=>array(50,-13,623,719),8455=>array(61,-16,540,576),8456=>array(65,-16,587,576),8457=>array(128,0,715,661),8461=>array(-23,0,606,563),8462=>array(55,0,556,604),8463=>array(54,0,557,604),8464=>array(4,-28,630,570),8465=>array(142,-15,653,563),8466=>array(28,0,479,578),8467=>array(95,-28,544,632),8468=>array(29,-17,669,586),8469=>array(-26,0,634,563),8470=>array(7,0,680,563),8471=>array(43,0,643,600),8472=>array(9,-150,570,454),8473=>array(-13,0,527,563),8474=>array(54,-115,568,576),8476=>array(68,0,571,573),8477=>array(-21,0,534,563),8478=>array(47,0,607,563),8480=>array(65,237,706,574),8481=>array(41,0,634,563),8482=>array(90,243,710,563),8484=>array(44,0,639,563),8486=>array(7,-2,555,571),8487=>array(65,-2,601,571),8489=>array(210,-2,453,431),8490=>array(47,0,662,563),8491=>array(13,0,596,783),8494=>array(104,-16,570,431),8498=>array(61,0,654,563),8501=>array(60,0,642,480),8502=>array(64,0,565,480),8503=>array(137,0,504,480),8504=>array(157,0,638,480),8505=>array(72,0,550,623),8506=>array(-59,47,633,562),8507=>array(-24,0,710,563),8513=>array(-24,-14,504,578),8514=>array(11,0,529,563),8515=>array(55,0,649,563),8516=>array(-65,0,447,563),8523=>array(57,-15,452,520),8525=>array(91,-13,660,721),8526=>array(119,2,594,453),8531=>array(53,-19,635,592),8532=>array(45,-32,631,586),8533=>array(54,-22,643,594),8534=>array(50,-12,658,596),8535=>array(52,-18,648,579),8536=>array(69,-13,648,584),8537=>array(51,-14,671,582),8538=>array(55,-14,666,582),8539=>array(53,-16,652,592),8540=>array(44,-16,656,580),8541=>array(62,-16,653,583),8542=>array(107,-16,648,584),8543=>array(64,51,574,634),8544=>array(117,0,603,563),8545=>array(-7,0,607,563),8546=>array(-23,0,623,563),8547=>array(-19,0,619,563),8548=>array(98,0,612,563),8549=>array(-3,0,619,563),8550=>array(-8,0,614,563),8551=>array(-23,0,639,563),8552=>array(-42,0,632,563),8553=>array(44,0,662,563),8554=>array(-48,0,637,563),8555=>array(-42,0,642,563),8556=>array(67,0,585,563),8557=>array(110,-16,635,576),8558=>array(47,0,592,563),8559=>array(15,0,700,563),8560=>array(96,0,513,624),8561=>array(82,0,554,624),8562=>array(18,0,647,624),8563=>array(29,0,678,624),8564=>array(114,0,655,417),8565=>array(88,0,660,624),8566=>array(126,0,644,624),8567=>array(61,0,683,624),8568=>array(81,0,606,624),8569=>array(55,0,611,417),8570=>array(37,0,624,624),8571=>array(37,0,642,624),8572=>array(96,0,513,604),8573=>array(121,-17,596,432),8574=>array(102,-16,630,604),8575=>array(15,0,603,431),8592=>array(41,167,529,395),8593=>array(193,38,421,524),8594=>array(53,167,541,395),8595=>array(178,38,407,524),8596=>array(25,167,575,395),8597=>array(172,6,428,556),8598=>array(149,103,431,453),8599=>array(89,102,509,453),8600=>array(153,109,433,460),8601=>array(91,109,513,458),8612=>array(101,135,653,427),8613=>array(157,0,482,524),8614=>array(-45,135,507,427),8615=>array(118,0,443,524),8616=>array(93,-51,434,556),8617=>array(80,167,596,442),8618=>array(111,168,597,442),8628=>array(146,28,573,512),8629=>array(71,30,629,510),8636=>array(90,261,589,394),8637=>array(95,169,589,303),8638=>array(292,38,480,533),8639=>array(253,38,432,533),8640=>array(82,239,576,373),8641=>array(92,152,591,285),8642=>array(253,38,432,533),8643=>array(262,38,450,533),8644=>array(41,-13,611,435),8646=>array(53,-13,569,435),8651=>array(72,12,589,394),8652=>array(75,9,576,403),8656=>array(105,147,611,415),8657=>array(230,-18,556,704),8658=>array(105,147,611,415),8659=>array(200,-17,526,705),8660=>array(75,147,644,417),8661=>array(197,-62,573,740),8668=>array(84,167,596,395),8669=>array(83,167,595,395),8704=>array(122,0,705,563),8705=>array(36,-18,600,758),8706=>array(111,-16,580,581),8707=>array(46,0,592,563),8708=>array(46,-94,613,681),8709=>array(35,0,565,530),8710=>array(43,0,557,563),8711=>array(157,0,671,563),8712=>array(83,30,626,530),8713=>array(83,-81,626,668),8714=>array(169,110,556,449),8715=>array(47,30,590,530),8716=>array(47,-81,590,668),8717=>array(143,110,530,449),8718=>array(150,0,557,500),8719=>array(38,-80,652,624),8720=>array(42,-81,656,623),8721=>array(90,-127,616,563),8722=>array(131,261,588,302),8723=>array(136,50,661,637),8724=>array(111,-10,568,635),8725=>array(40,51,528,514),8726=>array(96,51,493,514),8727=>array(211,119,586,473),8728=>array(154,136,448,429),8729=>array(253,141,449,337),8730=>array(31,0,663,699),8731=>array(31,0,663,740),8732=>array(31,0,663,734),8733=>array(102,134,648,468),8734=>array(1,134,600,468),8735=>array(20,0,580,560),8736=>array(70,0,528,439),8739=>array(279,-27,320,582),8740=>array(177,-27,423,582),8741=>array(228,-27,373,582),8742=>array(151,-27,456,582),8745=>array(72,-11,583,465),8746=>array(102,-11,613,465),8747=>array(135,-78,587,744),8748=>array(15,-78,677,744),8756=>array(57,-45,539,397),8757=>array(59,51,541,493),8758=>array(299,6,401,453),8759=>array(109,6,590,453),8764=>array(136,212,563,348),8769=>array(143,51,570,410),8770=>array(133,148,590,429),8771=>array(133,148,590,431),8773=>array(55,50,585,434),8776=>array(135,100,594,387),8800=>array(96,94,625,464),8801=>array(78,117,630,456),8804=>array(56,0,635,535),8805=>array(71,0,600,535),8834=>array(97,113,615,452),8835=>array(101,113,618,452),8836=>array(97,-38,615,576),8837=>array(101,-38,618,576),8838=>array(80,1,620,452),8839=>array(66,1,618,452),8869=>array(30,0,570,598),8898=>array(41,-28,666,721),8899=>array(79,-39,704,710),8901=>array(299,187,401,287),8976=>array(92,168,598,438),8994=>array(137,152,538,282),8995=>array(137,152,538,282),9001=>array(238,-124,503,602),9002=>array(181,-124,446,602),9251=>array(40,1,580,154),9674=>array(119,-11,541,575),9675=>array(65,0,595,530),9711=>array(43,0,643,600),9824=>array(103,0,582,579),9825=>array(136,-14,656,576),9826=>array(144,-11,577,580),9827=>array(66,-1,643,570),9828=>array(103,0,582,579),9829=>array(136,-15,656,575),9830=>array(141,-11,574,580),9831=>array(66,-1,643,570),9833=>array(173,0,437,556),9834=>array(95,0,486,556),9835=>array(33,-2,556,572),9836=>array(33,-2,556,572),9837=>array(55,0,516,616),9838=>array(78,-167,519,603),9839=>array(19,-170,579,604),11798=>array(92,45,588,670),11799=>array(108,34,579,463),11800=>array(129,-18,479,574),11802=>array(111,258,568,541),11803=>array(135,212,565,565),11806=>array(125,212,555,476),11807=>array(115,86,545,348),11816=>array(185,-124,564,604),11817=>array(144,-124,523,604),11818=>array(119,5,571,509),11819=>array(86,55,619,445),11820=>array(46,55,579,445),11821=>array(89,35,591,520),11822=>array(200,-15,580,577),42888=>array(154,-95,445,54),42889=>array(235,-15,450,417),42890=>array(197,190,463,375),42891=>array(328,209,469,643),42892=>array(355,335,469,643),64256=>array(68,0,690,605),64257=>array(84,0,520,604),64258=>array(87,0,553,604),64285=>array(267,115,422,480),64286=>array(314,540,544,628),64287=>array(187,131,552,480),64288=>array(64,0,645,480),64289=>array(60,0,642,480),64290=>array(157,0,638,480),64291=>array(99,0,614,480),64292=>array(64,0,572,480),64293=>array(153,0,642,617),64294=>array(97,0,614,480),64295=>array(157,0,614,480),64296=>array(27,0,614,480),64297=>array(131,261,589,530),64298=>array(51,0,700,599),64299=>array(51,0,672,599),64300=>array(51,0,700,599),64301=>array(51,0,672,599),64302=>array(60,-83,642,480),64303=>array(60,-200,642,480),64304=>array(60,-101,642,480),64305=>array(64,0,565,480),64306=>array(137,0,504,480),64307=>array(157,0,638,480),64308=>array(99,0,614,480),64309=>array(229,0,422,480),64310=>array(227,0,565,480),64312=>array(120,0,637,480),64313=>array(213,219,422,480),64314=>array(157,-200,573,480),64315=>array(64,0,572,480),64316=>array(153,0,642,617),64318=>array(101,0,614,481),64320=>array(137,0,504,480),64321=>array(125,0,614,480),64323=>array(143,-200,614,480),64324=>array(64,0,614,480),64326=>array(55,0,633,480),64327=>array(80,-200,631,480),64328=>array(157,0,614,480),64329=>array(51,0,672,480),64330=>array(27,0,614,480),64331=>array(91,0,422,599),64332=>array(64,0,565,581),64333=>array(64,0,572,581),64334=>array(64,0,614,581),64335=>array(157,0,642,617),65532=>array(47,0,610,630),65533=>array(52,-84,699,800),65535=>array(23,-80,697,643)); +$cw=array(0=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,338=>600,339=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,350=>600,351=>600,352=>600,353=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,372=>600,373=>600,374=>600,375=>600,376=>600,377=>600,378=>600,379=>600,380=>600,381=>600,382=>600,383=>600,384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,402=>600,403=>600,404=>600,405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,544=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600,606=>600,607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,647=>600,648=>600,649=>600,650=>600,651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,666=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600,676=>600,677=>600,678=>600,679=>600,680=>600,681=>600,682=>600,683=>600,684=>600,685=>600,686=>600,687=>600,688=>600,689=>600,690=>600,691=>600,692=>600,693=>600,694=>600,695=>600,696=>600,697=>600,698=>600,699=>600,700=>600,701=>600,702=>600,703=>600,704=>600,705=>600,706=>600,707=>600,708=>600,709=>600,710=>600,711=>600,712=>600,713=>600,714=>600,715=>600,716=>600,717=>600,718=>600,719=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,729=>600,730=>600,731=>600,732=>600,733=>600,734=>600,735=>600,736=>600,737=>600,738=>600,739=>600,740=>600,741=>600,742=>600,743=>600,744=>600,745=>600,746=>600,747=>600,748=>600,749=>600,750=>600,751=>600,752=>600,753=>600,754=>600,755=>600,756=>600,757=>600,758=>600,759=>600,760=>600,761=>600,762=>600,763=>600,764=>600,765=>600,766=>600,767=>600,768=>600,769=>600,770=>600,771=>600,772=>600,773=>600,774=>600,775=>600,776=>600,777=>600,778=>600,779=>600,780=>600,781=>600,782=>600,783=>600,784=>600,785=>600,786=>600,787=>600,788=>600,789=>600,790=>600,791=>600,792=>600,793=>600,794=>600,795=>600,796=>600,797=>600,798=>600,799=>600,800=>600,801=>600,802=>600,803=>600,804=>600,805=>600,806=>600,807=>600,808=>600,809=>600,810=>600,811=>600,812=>600,813=>600,814=>600,815=>600,816=>600,817=>600,818=>600,819=>600,820=>600,821=>600,822=>600,823=>600,824=>600,825=>600,826=>600,827=>600,828=>600,829=>600,830=>600,831=>600,832=>600,833=>600,834=>600,835=>600,836=>600,837=>600,838=>600,839=>600,840=>600,841=>600,842=>600,843=>600,844=>600,845=>600,846=>600,847=>600,848=>600,849=>600,850=>600,851=>600,852=>600,853=>600,854=>600,855=>600,856=>600,857=>600,858=>600,859=>600,860=>600,861=>600,862=>600,863=>600,864=>600,865=>600,866=>600,867=>600,868=>600,869=>600,870=>600,871=>600,872=>600,873=>600,874=>600,875=>600,876=>600,877=>600,878=>600,879=>600,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,989=>600,1008=>600,1009=>600,1012=>600,1013=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1120=>600,1121=>600,1122=>600,1123=>600,1124=>600,1125=>600,1126=>600,1127=>600,1128=>600,1129=>600,1130=>600,1131=>600,1132=>600,1133=>600,1134=>600,1135=>600,1136=>600,1137=>600,1138=>600,1139=>600,1140=>600,1141=>600,1142=>600,1143=>600,1144=>600,1145=>600,1146=>600,1147=>600,1148=>600,1149=>600,1150=>600,1151=>600,1155=>600,1156=>600,1157=>600,1158=>600,1159=>600,1162=>600,1163=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1231=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1270=>600,1271=>600,1272=>600,1273=>600,1296=>600,1297=>600,1298=>600,1299=>600,1306=>600,1307=>600,1308=>600,1309=>600,1310=>600,1311=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600,1369=>600,1370=>600,1371=>600,1372=>600,1373=>600,1374=>600,1375=>600,1377=>600,1378=>600,1379=>600,1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,1415=>600,1417=>600,1418=>600,1423=>600,1456=>600,1457=>600,1458=>600,1459=>600,1460=>600,1461=>600,1462=>600,1463=>600,1464=>600,1465=>600,1467=>600,1468=>600,1469=>600,1470=>600,1471=>600,1472=>600,1473=>600,1474=>600,1475=>600,1476=>600,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,4345=>600,4347=>600,4348=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>600,8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600,8020=>600,8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,8116=>600,8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600,8195=>600,8196=>600,8197=>600,8198=>600,8199=>600,8200=>600,8201=>600,8202=>600,8203=>600,8204=>600,8205=>600,8206=>600,8207=>600,8208=>600,8209=>600,8210=>600,8211=>600,8212=>600,8213=>600,8214=>600,8215=>600,8216=>600,8217=>600,8218=>600,8219=>600,8220=>600,8221=>600,8222=>600,8223=>600,8224=>600,8225=>600,8226=>600,8227=>600,8228=>600,8229=>600,8230=>600,8231=>600,8232=>600,8233=>600,8234=>600,8235=>600,8236=>600,8237=>600,8238=>600,8239=>600,8240=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,8247=>600,8248=>600,8249=>600,8250=>600,8251=>600,8252=>600,8253=>600,8254=>600,8255=>600,8256=>600,8257=>600,8258=>600,8259=>600,8260=>600,8261=>600,8262=>600,8263=>600,8264=>600,8265=>600,8266=>600,8267=>600,8268=>600,8269=>600,8270=>600,8271=>600,8272=>600,8273=>600,8274=>600,8275=>600,8276=>600,8277=>600,8278=>600,8279=>600,8280=>600,8281=>600,8282=>600,8283=>600,8284=>600,8285=>600,8286=>600,8287=>600,8288=>600,8289=>600,8290=>600,8291=>600,8292=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,8331=>600,8332=>600,8333=>600,8334=>600,8336=>600,8337=>600,8338=>600,8339=>600,8340=>600,8353=>600,8354=>600,8355=>600,8356=>600,8357=>600,8358=>600,8359=>600,8360=>600,8361=>600,8362=>600,8363=>600,8364=>600,8365=>600,8366=>600,8367=>600,8368=>600,8369=>600,8370=>600,8371=>600,8372=>600,8373=>600,8376=>600,8377=>600,8448=>600,8449=>600,8450=>600,8451=>600,8452=>600,8453=>600,8454=>600,8455=>600,8456=>600,8457=>600,8461=>600,8462=>600,8463=>600,8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,8474=>600,8476=>600,8477=>600,8478=>600,8480=>600,8481=>600,8482=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8494=>600,8498=>600,8501=>600,8502=>600,8503=>600,8504=>600,8505=>600,8506=>600,8507=>600,8513=>600,8514=>600,8515=>600,8516=>600,8523=>600,8525=>600,8526=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,8560=>600,8561=>600,8562=>600,8563=>600,8564=>600,8565=>600,8566=>600,8567=>600,8568=>600,8569=>600,8570=>600,8571=>600,8572=>600,8573=>600,8574=>600,8575=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8612=>600,8613=>600,8614=>600,8615=>600,8616=>600,8617=>600,8618=>600,8628=>600,8629=>600,8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,8644=>600,8646=>600,8651=>600,8652=>600,8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8668=>600,8669=>600,8704=>600,8705=>600,8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,8716=>600,8717=>600,8718=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8735=>600,8736=>600,8739=>600,8740=>600,8741=>600,8742=>600,8745=>600,8746=>600,8747=>600,8748=>600,8756=>600,8757=>600,8758=>600,8759=>600,8764=>600,8769=>600,8770=>600,8771=>600,8773=>600,8776=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,8869=>600,8898=>600,8899=>600,8901=>600,8976=>600,8994=>600,8995=>600,9001=>600,9002=>600,9251=>600,9674=>600,9675=>600,9711=>600,9824=>600,9825=>600,9826=>600,9827=>600,9828=>600,9829=>600,9830=>600,9831=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,11798=>600,11799=>600,11800=>600,11802=>600,11803=>600,11806=>600,11807=>600,11816=>600,11817=>600,11818=>600,11819=>600,11820=>600,11821=>600,11822=>600,42888=>600,42889=>600,42890=>600,42891=>600,42892=>600,64256=>600,64257=>600,64258=>600,64285=>600,64286=>600,64287=>600,64288=>600,64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65529=>600,65530=>600,65531=>600,65532=>600,65533=>600,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freemonoi.z b/tcpdf/fonts/freemonoi.z new file mode 100644 index 0000000..f52d9b1 Binary files /dev/null and b/tcpdf/fonts/freemonoi.z differ diff --git a/tcpdf/fonts/freesans.ctg.z b/tcpdf/fonts/freesans.ctg.z new file mode 100644 index 0000000..0a4dc84 Binary files /dev/null and b/tcpdf/fonts/freesans.ctg.z differ diff --git a/tcpdf/fonts/freesans.php b/tcpdf/fonts/freesans.php new file mode 100644 index 0000000..996d8db --- /dev/null +++ b/tcpdf/fonts/freesans.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSans'; +$up=-176; +$ut=50; +$dw=800; +$diff=''; +$originalsize=1563256; +$enc=''; +$file='freesans.z'; +$ctg='freesans.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-1166 -638 2260 1050]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>729,'XHeight'=>524,'StemV'=>70,'StemH'=>30,'AvgWidth'=>657,'MaxWidth'=>2256,'MissingWidth'=>800); +$cbbox=array(0=>array(35,-139,765,800),33=>array(124,0,208,729),34=>array(40,464,293,709),35=>array(14,-20,542,697),36=>array(33,-126,518,770),37=>array(29,-20,859,709),38=>array(52,-23,637,709),39=>array(53,464,147,709),40=>array(73,-212,291,729),41=>array(38,-212,256,729),42=>array(40,441,343,729),43=>array(50,-10,534,474),44=>array(87,-147,192,104),45=>array(46,240,287,312),46=>array(80,0,184,104),47=>array(-8,-20,284,729),48=>array(43,-23,507,709),49=>array(102,0,347,709),50=>array(34,0,511,709),51=>array(32,-23,506,709),52=>array(28,0,520,709),53=>array(35,-23,513,709),54=>array(43,-23,513,709),55=>array(46,0,520,709),56=>array(37,-23,513,709),57=>array(38,-23,509,709),58=>array(80,0,184,524),59=>array(80,-147,185,524),60=>array(45,-9,534,474),61=>array(50,111,534,353),62=>array(50,-9,539,474),63=>array(77,0,509,741),64=>array(34,-142,951,741),65=>array(15,0,651,729),66=>array(80,0,624,729),67=>array(40,-23,669,741),68=>array(80,0,658,729),69=>array(80,0,603,729),70=>array(80,0,569,729),71=>array(40,-23,705,741),72=>array(80,0,641,729),73=>array(100,0,194,729),74=>array(35,-23,444,729),75=>array(80,0,659,729),76=>array(80,0,533,729),77=>array(80,0,766,729),78=>array(80,0,650,729),79=>array(40,-23,744,741),80=>array(80,0,606,729),81=>array(40,-59,744,741),82=>array(80,0,666,729),83=>array(48,-23,621,741),84=>array(30,0,602,729),85=>array(80,-23,640,729),86=>array(15,0,630,729),87=>array(15,0,922,729),88=>array(15,0,642,729),89=>array(15,0,663,729),90=>array(30,0,585,729),91=>array(64,-212,250,729),92=>array(-8,-20,284,729),93=>array(22,-212,208,729),94=>array(44,329,425,709),95=>array(-22,-176,578,-126),96=>array(22,592,231,740),97=>array(30,-23,523,539),98=>array(60,-23,529,729),99=>array(30,-23,476,539),100=>array(30,-23,499,729),101=>array(30,-23,503,539),102=>array(20,0,260,732),103=>array(30,-218,490,539),104=>array(60,0,476,729),105=>array(66,0,150,729),106=>array(0,-218,171,729),107=>array(60,0,504,729),108=>array(60,0,144,729),109=>array(60,0,752,539),110=>array(60,0,477,539),111=>array(30,-23,504,539),112=>array(60,-218,529,539),113=>array(30,-218,499,539),114=>array(60,0,312,539),115=>array(34,-23,459,539),116=>array(20,-23,260,668),117=>array(60,-23,477,524),118=>array(10,0,486,524),119=>array(10,0,712,524),120=>array(10,0,466,524),121=>array(10,-218,468,524),122=>array(30,0,456,524),123=>array(43,-212,276,729),124=>array(95,-212,155,729),125=>array(57,-212,290,729),126=>array(33,268,466,438),160=>array(0,0,0,0),161=>array(122,-205,206,524),162=>array(52,-120,510,628),163=>array(26,-23,535,729),164=>array(67,133,489,551),165=>array(11,0,545,709),166=>array(100,-212,160,729),167=>array(43,-213,506,729),168=>array(25,612,308,716),169=>array(39,-14,761,708),170=>array(37,303,333,742),171=>array(71,106,428,438),172=>array(40,86,544,375),173=>array(46,240,287,312),174=>array(39,-14,761,708),175=>array(28,631,302,701),176=>array(151,383,454,686),177=>array(50,-11,534,623),178=>array(19,390,326,815),179=>array(16,378,322,817),180=>array(92,592,301,740),181=>array(65,-220,544,524),182=>array(48,-177,522,729),183=>array(87,227,191,331),184=>array(39,-214,287,0),185=>array(69,390,230,815),186=>array(40,303,324,742),187=>array(72,106,429,438),188=>array(61,-20,849,726),189=>array(61,-20,844,729),190=>array(26,-20,836,734),191=>array(96,-217,528,524),192=>array(15,0,651,900),193=>array(15,0,651,900),194=>array(15,0,651,900),195=>array(15,0,651,887),196=>array(15,1,651,881),197=>array(15,0,651,966),198=>array(15,0,954,729),199=>array(40,-214,669,741),200=>array(80,0,603,900),201=>array(80,0,603,900),202=>array(80,0,603,900),203=>array(80,0,603,884),204=>array(0,0,229,900),205=>array(49,0,278,900),206=>array(10,0,297,900),207=>array(8,0,291,882),208=>array(20,0,667,729),209=>array(80,0,650,870),210=>array(40,-23,744,900),211=>array(40,-23,744,900),212=>array(40,-23,744,900),213=>array(40,-23,744,882),214=>array(40,-23,744,884),215=>array(95,34,488,427),216=>array(35,-23,749,755),217=>array(80,-23,640,900),218=>array(80,-23,640,900),219=>array(80,-23,640,900),220=>array(80,-23,640,881),221=>array(15,0,663,900),222=>array(80,0,605,729),223=>array(80,-24,554,728),224=>array(30,-23,523,740),225=>array(30,-23,523,740),226=>array(30,-23,523,727),227=>array(30,-23,523,709),228=>array(30,-23,523,727),229=>array(30,-23,523,772),230=>array(30,-23,841,539),231=>array(30,-214,476,539),232=>array(30,-23,503,740),233=>array(30,-23,503,740),234=>array(30,-23,503,727),235=>array(30,-23,503,727),236=>array(0,0,209,740),237=>array(13,0,222,740),238=>array(-12,0,275,727),239=>array(-11,0,272,728),240=>array(30,-23,504,743),241=>array(60,0,477,706),242=>array(30,-23,504,740),243=>array(30,-23,504,740),244=>array(30,-23,504,730),245=>array(30,-23,504,708),246=>array(30,-23,504,729),247=>array(50,0,534,472),248=>array(10,-30,521,539),249=>array(60,-23,477,740),250=>array(60,-23,477,740),251=>array(60,-23,477,729),252=>array(60,-23,477,729),253=>array(10,-218,468,740),254=>array(60,-218,528,714),255=>array(10,-218,468,729),256=>array(15,0,651,870),257=>array(30,-23,523,681),258=>array(15,0,651,900),259=>array(30,-23,523,727),260=>array(17,-205,692,729),261=>array(30,-205,583,539),262=>array(40,-23,669,900),263=>array(30,-23,476,740),264=>array(40,-23,669,900),265=>array(30,-23,476,708),266=>array(40,-23,669,900),267=>array(30,-23,476,729),268=>array(40,-23,669,900),269=>array(30,-23,476,732),270=>array(80,0,658,900),271=>array(30,-23,720,740),272=>array(20,0,667,729),273=>array(30,-23,561,729),274=>array(80,0,603,870),275=>array(30,-23,503,681),276=>array(80,0,603,900),277=>array(30,-23,503,729),278=>array(80,0,603,899),279=>array(30,-23,503,729),280=>array(80,-205,642,729),281=>array(30,-204,503,539),282=>array(80,0,603,900),283=>array(30,-23,503,730),284=>array(40,-23,705,900),285=>array(30,-218,490,719),286=>array(40,-23,705,900),287=>array(30,-218,490,730),288=>array(40,-23,705,900),289=>array(30,-218,490,729),290=>array(40,-300,705,741),291=>array(30,-218,490,746),292=>array(80,0,641,900),293=>array(60,0,476,900),294=>array(30,0,692,729),295=>array(15,0,494,729),296=>array(-7,0,307,873),297=>array(-26,0,288,698),298=>array(2,0,276,870),299=>array(-6,0,268,681),300=>array(-3,0,298,900),301=>array(-15,0,286,729),302=>array(26,-205,234,729),303=>array(2,-205,210,729),304=>array(95,0,199,883),305=>array(70,0,153,524),306=>array(100,-23,674,729),307=>array(66,-218,333,729),308=>array(35,-23,528,900),309=>array(-13,-218,274,719),310=>array(80,-300,659,729),311=>array(60,-300,504,729),312=>array(60,0,504,524),313=>array(80,0,533,900),314=>array(13,0,242,900),315=>array(80,-300,533,729),316=>array(60,-300,166,729),317=>array(80,0,533,740),318=>array(60,0,360,740),319=>array(80,0,533,729),320=>array(60,0,335,729),321=>array(30,0,582,729),322=>array(20,0,232,729),323=>array(80,0,650,900),324=>array(60,0,477,740),325=>array(80,-300,650,729),326=>array(60,-300,477,539),327=>array(80,0,650,900),328=>array(60,0,477,731),329=>array(39,0,587,728),330=>array(80,-16,637,744),331=>array(60,-218,477,539),332=>array(40,-23,744,870),333=>array(30,-23,504,681),334=>array(40,-23,744,900),335=>array(30,-23,504,729),336=>array(40,-23,744,900),337=>array(30,-23,504,740),338=>array(40,-20,956,741),339=>array(30,-23,889,539),340=>array(80,0,666,900),341=>array(60,0,331,740),342=>array(80,-300,666,729),343=>array(60,-300,312,539),344=>array(80,0,666,900),345=>array(45,0,332,741),346=>array(48,-23,621,900),347=>array(34,-23,459,740),348=>array(48,-23,621,900),349=>array(34,-23,459,720),350=>array(48,-214,621,741),351=>array(34,-214,459,539),352=>array(48,-23,621,900),353=>array(34,-23,459,733),354=>array(30,-213,602,729),355=>array(20,-227,299,668),356=>array(30,0,602,900),357=>array(20,-23,410,740),358=>array(30,0,602,729),359=>array(20,-23,265,668),360=>array(80,-23,640,873),361=>array(60,-23,477,703),362=>array(80,-23,640,870),363=>array(60,-23,477,681),364=>array(80,-23,640,900),365=>array(60,-23,477,727),366=>array(80,-23,640,965),367=>array(60,-23,477,772),368=>array(80,-23,640,900),369=>array(60,-23,477,731),370=>array(80,-205,640,729),371=>array(60,-204,516,524),372=>array(15,0,922,900),373=>array(10,0,712,721),374=>array(15,0,663,900),375=>array(10,-218,468,719),376=>array(15,0,663,881),377=>array(30,0,585,900),378=>array(30,0,456,740),379=>array(30,0,585,881),380=>array(30,0,456,729),381=>array(30,0,585,900),382=>array(30,0,456,733),383=>array(20,0,260,732),384=>array(20,-23,551,729),385=>array(40,0,802,729),386=>array(80,0,624,729),387=>array(60,-23,529,729),388=>array(1,0,673,729),389=>array(1,-23,563,729),390=>array(40,-23,669,741),391=>array(40,-23,741,741),392=>array(30,-23,557,556),393=>array(20,0,667,729),394=>array(40,0,836,729),395=>array(40,0,584,729),396=>array(30,-23,499,729),397=>array(30,-197,522,548),398=>array(30,0,553,729),399=>array(40,-23,670,741),400=>array(40,-23,613,741),401=>array(2,-218,579,729),402=>array(0,-218,258,732),403=>array(40,-23,782,741),404=>array(15,-27,663,729),405=>array(60,-23,823,729),406=>array(66,-23,235,729),407=>array(15,0,348,729),408=>array(80,0,673,729),409=>array(60,0,504,732),410=>array(6,0,339,729),411=>array(10,-10,536,738),412=>array(80,-15,784,729),413=>array(-8,-218,650,729),414=>array(60,-200,477,539),415=>array(40,-23,744,741),416=>array(40,-23,790,796),417=>array(30,-23,559,631),418=>array(40,-23,936,742),419=>array(30,-200,666,539),420=>array(40,0,784,729),421=>array(60,-218,529,732),422=>array(80,-125,635,729),423=>array(48,-23,621,741),424=>array(34,-23,459,539),425=>array(30,0,585,729),426=>array(0,-218,335,732),427=>array(20,-218,260,668),428=>array(15,0,608,729),429=>array(20,-23,261,732),430=>array(30,-218,602,729),431=>array(80,-23,771,856),432=>array(60,-23,618,651),433=>array(40,-4,717,729),434=>array(80,-23,655,729),435=>array(15,0,713,729),436=>array(10,-218,608,732),437=>array(30,0,585,729),438=>array(30,0,456,524),439=>array(40,-23,589,729),440=>array(30,-23,579,729),441=>array(30,-143,504,524),442=>array(30,-202,479,524),443=>array(34,0,511,709),446=>array(30,-21,462,668),447=>array(60,-218,531,540),448=>array(95,-212,155,729),449=>array(95,-212,265,729),450=>array(50,-212,534,729),451=>array(124,0,208,729),452=>array(80,0,1245,900),453=>array(80,0,1144,733),454=>array(30,-23,1002,733),455=>array(80,-23,970,729),456=>array(80,-218,727,729),457=>array(60,-218,373,729),458=>array(80,-23,1132,729),459=>array(80,-218,873,729),460=>array(60,-218,707,729),461=>array(15,0,651,900),462=>array(30,-23,523,729),463=>array(7,0,294,900),464=>array(-13,0,274,729),465=>array(40,-23,744,900),466=>array(30,-23,504,729),467=>array(80,-23,640,900),468=>array(60,-23,477,729),469=>array(80,-23,640,965),470=>array(60,-23,477,821),471=>array(80,-23,640,990),472=>array(60,-23,477,900),473=>array(80,-23,640,980),474=>array(60,-23,477,900),475=>array(80,-23,640,980),476=>array(60,-23,477,900),477=>array(30,-23,503,539),478=>array(15,0,651,965),479=>array(30,-23,523,800),480=>array(15,0,651,952),481=>array(30,-23,523,800),482=>array(15,0,954,871),483=>array(30,-23,841,701),484=>array(40,-23,758,741),485=>array(30,-218,515,539),486=>array(40,-23,705,900),487=>array(30,-218,490,729),488=>array(80,0,659,900),489=>array(60,0,504,900),490=>array(40,-221,744,741),491=>array(30,-221,504,539),492=>array(40,-221,744,870),493=>array(30,-221,504,649),494=>array(40,-23,589,900),495=>array(20,-143,494,729),496=>array(-33,-218,254,714),497=>array(80,0,1267,729),498=>array(80,0,1148,729),499=>array(30,-23,1012,729),500=>array(40,-23,705,900),501=>array(30,-218,490,727),503=>array(80,0,569,743),504=>array(80,0,650,900),505=>array(60,0,477,740),506=>array(15,0,651,900),507=>array(30,-23,523,900),508=>array(15,0,954,900),509=>array(30,-23,841,727),510=>array(35,-23,749,900),511=>array(10,-30,521,727),512=>array(15,0,651,900),513=>array(30,-23,523,729),514=>array(15,0,651,900),515=>array(30,-23,523,714),516=>array(80,0,603,900),517=>array(30,-23,503,729),518=>array(80,0,603,900),519=>array(30,-23,503,714),520=>array(-33,0,300,900),521=>array(-71,0,262,729),522=>array(-1,0,300,900),523=>array(-19,0,282,714),524=>array(40,-23,744,900),525=>array(30,-23,504,729),526=>array(40,-23,744,900),527=>array(30,-23,504,714),528=>array(80,0,666,900),529=>array(-21,0,312,729),530=>array(80,0,666,900),531=>array(45,0,346,714),532=>array(80,-23,640,900),533=>array(60,-23,477,729),534=>array(80,-23,640,900),535=>array(60,-23,477,714),536=>array(48,-300,621,741),537=>array(34,-300,459,539),538=>array(30,-300,602,729),539=>array(20,-300,260,668),540=>array(40,-100,499,709),541=>array(20,-84,384,542),542=>array(80,0,641,900),543=>array(60,0,476,900),544=>array(80,-219,640,741),548=>array(30,-216,585,729),549=>array(30,-216,456,524),550=>array(15,0,651,900),551=>array(30,-23,523,729),552=>array(80,-207,603,729),553=>array(30,-230,503,539),554=>array(40,-23,744,965),555=>array(30,-23,504,800),556=>array(40,-23,744,998),557=>array(30,-23,504,800),558=>array(40,-23,744,900),559=>array(30,-23,504,701),560=>array(40,-23,744,985),561=>array(30,-23,504,802),562=>array(15,0,663,851),563=>array(10,-218,468,649),567=>array(-18,-218,153,524),568=>array(30,-23,885,729),569=>array(30,-218,884,539),592=>array(20,-23,513,539),593=>array(30,-23,552,538),594=>array(20,-14,542,547),595=>array(60,-23,529,732),596=>array(30,-23,476,539),597=>array(11,-42,471,539),598=>array(30,-218,592,729),599=>array(30,-23,586,732),600=>array(30,-23,503,539),601=>array(30,-23,503,539),602=>array(30,-23,764,570),603=>array(30,-23,455,539),604=>array(30,-23,455,539),605=>array(30,-23,716,570),606=>array(30,-23,476,539),607=>array(20,-218,268,524),608=>array(30,-218,577,650),609=>array(30,-218,542,539),610=>array(30,-23,522,539),611=>array(10,-230,473,524),612=>array(10,-24,542,542),613=>array(60,-205,476,524),614=>array(60,0,476,732),615=>array(60,-218,476,732),616=>array(15,0,253,729),617=>array(66,-23,235,524),618=>array(20,0,258,524),619=>array(20,0,453,729),620=>array(20,0,407,729),621=>array(68,-218,240,729),622=>array(60,-143,578,729),623=>array(60,-15,752,524),624=>array(60,-200,752,524),625=>array(60,-218,752,539),626=>array(10,-218,515,539),627=>array(60,-218,566,539),628=>array(60,0,487,524),629=>array(30,-23,504,539),630=>array(30,-23,734,539),631=>array(30,-9,698,542),632=>array(24,-200,664,712),633=>array(20,-15,272,524),634=>array(20,-15,272,729),635=>array(20,-218,360,524),636=>array(60,-200,312,539),637=>array(60,-218,312,539),638=>array(60,0,348,539),639=>array(20,-200,308,539),640=>array(60,0,519,524),641=>array(64,0,523,524),642=>array(34,-216,459,539),643=>array(20,-218,279,732),644=>array(20,-218,278,732),645=>array(30,-218,289,539),646=>array(15,-218,450,732),647=>array(20,1,260,692),648=>array(20,-218,260,668),649=>array(14,-23,582,524),650=>array(30,-23,578,544),651=>array(60,-23,490,524),652=>array(10,0,486,524),653=>array(10,0,712,524),654=>array(10,0,468,742),655=>array(10,0,496,524),656=>array(30,-217,544,523),657=>array(30,-96,478,524),658=>array(20,-143,494,524),659=>array(30,-138,510,524),660=>array(30,0,468,709),661=>array(30,0,468,709),662=>array(30,0,468,709),663=>array(40,-213,669,741),664=>array(40,-23,744,741),665=>array(60,0,458,524),666=>array(30,-23,476,539),667=>array(30,-23,602,544),668=>array(60,0,478,524),669=>array(14,-218,449,729),670=>array(10,-201,454,528),671=>array(60,0,370,524),672=>array(30,-218,586,650),673=>array(30,0,468,709),674=>array(30,0,468,709),675=>array(30,-23,901,729),676=>array(30,-143,930,729),677=>array(30,-96,925,729),678=>array(20,-23,675,668),679=>array(20,-218,504,732),680=>array(20,-115,750,668),681=>array(20,-199,738,732),682=>array(60,-23,626,729),683=>array(60,0,549,729),684=>array(48,-1,505,730),685=>array(30,119,456,616),686=>array(10,-198,514,732),687=>array(10,-218,601,732),688=>array(26,389,297,864),689=>array(26,390,297,866),690=>array(24,264,136,880),691=>array(32,389,197,740),692=>array(35,380,200,731),693=>array(26,248,248,730),694=>array(42,390,342,732),695=>array(24,390,481,732),696=>array(10,247,309,731),697=>array(49,438,226,716),698=>array(49,438,434,716),699=>array(85,503,190,754),700=>array(80,457,185,708),701=>array(85,457,190,708),702=>array(89,579,177,754),703=>array(79,579,167,754),704=>array(24,400,309,765),705=>array(24,400,309,765),706=>array(28,545,304,750),707=>array(28,545,304,750),708=>array(51,574,282,750),709=>array(51,574,282,751),710=>array(20,591,307,741),711=>array(19,591,306,741),712=>array(89,588,161,785),713=>array(28,631,302,701),714=>array(92,593,301,741),715=>array(22,592,231,740),716=>array(89,-259,161,-62),717=>array(29,-140,303,-70),718=>array(83,-201,292,-53),719=>array(35,-200,244,-52),720=>array(103,0,229,546),721=>array(103,432,229,546),722=>array(92,-1,180,174),723=>array(83,2,171,177),724=>array(11,149,322,402),725=>array(11,149,322,402),726=>array(11,110,322,422),727=>array(11,231,322,301),728=>array(15,597,316,732),729=>array(115,612,219,716),730=>array(61,561,273,772),731=>array(57,-205,265,0),732=>array(5,613,319,717),733=>array(0,590,333,740),734=>array(0,234,321,570),735=>array(19,597,314,794),736=>array(11,238,312,730),737=>array(53,389,109,864),738=>array(27,383,305,750),739=>array(13,390,310,732),740=>array(13,390,299,851),741=>array(40,0,454,800),742=>array(40,0,454,800),743=>array(40,0,454,800),744=>array(40,0,454,800),745=>array(40,0,454,800),746=>array(72,-1,479,606),747=>array(72,0,479,614),748=>array(23,-200,310,-50),749=>array(28,593,302,800),750=>array(80,497,333,729),751=>array(51,-201,282,-25),752=>array(46,-201,277,-25),753=>array(26,-221,302,-16),754=>array(27,-220,303,-15),755=>array(58,-258,270,-47),756=>array(22,366,231,514),757=>array(0,366,333,516),758=>array(0,368,333,518),759=>array(9,-157,323,-53),760=>array(80,65,184,589),761=>array(24,512,176,749),762=>array(26,512,178,749),763=>array(24,-73,176,164),764=>array(24,-72,176,165),765=>array(11,-200,322,-28),766=>array(11,-200,322,-28),767=>array(0,-220,333,-19),768=>array(-311,592,-102,740),769=>array(-241,592,-32,740),770=>array(-313,591,-26,741),771=>array(-328,613,-14,717),772=>array(-305,631,-31,701),773=>array(-451,629,115,701),774=>array(-318,597,-17,732),775=>array(-218,612,-114,716),776=>array(-308,612,-25,716),777=>array(-284,564,-131,757),778=>array(-272,561,-60,772),779=>array(-312,591,21,741),780=>array(-314,591,-27,741),781=>array(-207,588,-135,785),782=>array(-276,588,-59,785),783=>array(-414,590,-81,740),784=>array(-318,597,-17,815),785=>array(-318,597,-17,732),786=>array(-215,583,-127,746),787=>array(-206,577,-118,740),788=>array(-212,577,-124,740),789=>array(0,578,88,741),790=>array(-311,-200,-102,-52),791=>array(-258,-200,-49,-52),792=>array(-280,-289,-75,-51),793=>array(-255,-288,-50,-50),794=>array(-203,427,71,701),795=>array(-137,440,67,651),796=>array(-224,-218,-136,-43),797=>array(-284,-200,-46,-45),798=>array(-284,-200,-46,-45),799=>array(-284,-288,-46,-50),800=>array(-424,-156,-113,-86),801=>array(-171,-218,0,45),802=>array(-83,-218,88,45),803=>array(-270,-165,-166,-61),804=>array(-365,-162,-82,-58),805=>array(-337,-255,-125,-44),806=>array(-269,-300,-169,-76),807=>array(-368,-214,-120,0),808=>array(-276,-205,-68,0),809=>array(-259,-243,-187,-46),810=>array(-305,-197,-31,-60),811=>array(-320,-172,-14,-50),812=>array(-314,-200,-27,-50),813=>array(-314,-200,-27,-50),814=>array(-318,-200,-17,-65),815=>array(-318,-200,-17,-65),816=>array(-387,-187,-73,-83),817=>array(-368,-153,-94,-83),818=>array(-601,-176,-1,-126),819=>array(-601,-278,-1,-126),820=>array(-450,208,-136,312),821=>array(-411,232,-137,302),822=>array(-711,222,-111,272),823=>array(-701,3,-13,616),824=>array(-701,-61,-13,749),825=>array(-264,-253,-176,-78),826=>array(-362,-176,-88,-39),827=>array(-364,-300,-103,-39),828=>array(-382,-174,-76,-59),829=>array(-302,563,-45,756),830=>array(-223,582,-119,850),831=>array(-600,589,0,741),832=>array(-311,593,-102,741),833=>array(-241,592,-32,740),834=>array(-344,604,-30,708),835=>array(-206,577,-118,740),836=>array(-355,600,-28,758),837=>array(-321,-170,-165,-10),838=>array(-305,593,-31,730),839=>array(-372,-209,-98,-39),840=>array(-328,-239,-115,-42),841=>array(-270,-237,-126,-93),842=>array(-369,595,-55,786),843=>array(-408,559,-94,900),844=>array(-367,573,-53,812),845=>array(-544,-243,-44,-45),846=>array(-364,-300,-167,-55),848=>array(-326,545,-50,750),849=>array(-198,589,-110,764),850=>array(-351,563,-50,800),851=>array(-432,-230,-175,-37),852=>array(-406,-221,-130,-16),853=>array(-389,-220,-113,-15),854=>array(-493,-218,-29,-41),855=>array(-197,573,-109,748),856=>array(-323,636,-219,740),857=>array(-403,-284,-174,-68),858=>array(-516,-228,-92,-48),859=>array(-337,546,-103,800),860=>array(-333,-199,334,-35),861=>array(-329,613,338,777),862=>array(-325,611,325,676),863=>array(-325,-147,325,-82),864=>array(-344,569,332,739),865=>array(-333,632,334,796),866=>array(-301,-261,299,-30),867=>array(-349,569,-161,784),868=>array(-367,570,-186,784),869=>array(-285,575,-253,853),870=>array(-368,570,-187,784),871=>array(-341,570,-182,779),872=>array(-333,571,-162,785),873=>array(-348,570,-168,856),874=>array(-331,569,-172,848),875=>array(-407,572,-143,777),876=>array(-291,572,-194,777),877=>array(-306,570,-214,833),878=>array(-365,570,-183,770),879=>array(-358,570,-184,770),884=>array(49,438,226,716),885=>array(22,-194,139,6),890=>array(127,-200,283,-40),891=>array(34,-12,408,530),892=>array(30,-12,404,530),893=>array(34,-12,408,530),894=>array(80,-147,185,524),900=>array(115,592,324,740),901=>array(6,620,333,778),902=>array(5,0,651,741),903=>array(86,420,190,524),904=>array(0,0,755,740),905=>array(0,0,794,740),906=>array(0,0,329,740),908=>array(0,-23,826,741),910=>array(0,6,878,741),911=>array(0,0,757,740),912=>array(-23,-8,304,765),913=>array(15,0,651,729),914=>array(80,0,624,729),915=>array(80,0,564,729),916=>array(14,0,684,729),917=>array(80,0,603,729),918=>array(30,0,585,729),919=>array(80,0,641,729),920=>array(40,-23,744,741),921=>array(100,0,194,729),922=>array(80,0,659,729),923=>array(15,0,651,729),924=>array(80,0,766,729),925=>array(80,0,650,729),926=>array(40,0,586,729),927=>array(40,-23,744,741),928=>array(80,0,640,729),929=>array(80,0,606,729),931=>array(40,0,606,729),932=>array(30,3,602,732),933=>array(15,6,663,735),934=>array(40,0,699,729),935=>array(15,0,642,729),936=>array(60,0,702,729),937=>array(40,0,717,733),938=>array(-2,0,281,900),939=>array(15,6,663,900),940=>array(30,-13,565,740),941=>array(30,-10,467,740),942=>array(15,-182,489,746),943=>array(60,-8,299,744),944=>array(60,-14,498,765),945=>array(30,-13,565,531),946=>array(60,-198,514,732),947=>array(10,-198,508,536),948=>array(30,-16,522,729),949=>array(30,-10,467,532),950=>array(30,-194,432,718),951=>array(15,-182,489,531),952=>array(30,-12,475,730),953=>array(60,-8,274,524),954=>array(60,0,490,524),955=>array(10,-12,536,730),956=>array(60,-200,480,523),957=>array(10,0,486,524),958=>array(30,-194,455,718),959=>array(30,-10,514,532),960=>array(20,-4,584,524),961=>array(60,-200,544,532),962=>array(30,-182,509,536),963=>array(30,-12,586,532),964=>array(20,-12,472,524),965=>array(60,-14,498,524),966=>array(30,-200,681,524),967=>array(10,-212,569,538),968=>array(60,-200,638,524),969=>array(30,-9,698,526),970=>array(-38,-8,274,703),971=>array(60,-14,498,703),972=>array(30,-10,514,744),973=>array(60,-14,498,744),974=>array(30,-9,698,744),977=>array(30,-12,533,730),978=>array(20,0,681,741),979=>array(0,0,874,741),980=>array(20,0,681,900),981=>array(30,-200,670,712),982=>array(30,-9,698,534),983=>array(10,-216,546,524),1008=>array(10,-17,570,539),1009=>array(60,-186,544,532),1010=>array(30,-12,404,530),1011=>array(0,-218,171,729),1012=>array(40,-23,744,741),1013=>array(30,-12,258,530),1014=>array(50,-12,278,530),1017=>array(40,-23,589,741),1021=>array(30,-23,579,741),1022=>array(40,-23,589,741),1023=>array(30,-23,579,741),1024=>array(80,0,603,900),1025=>array(80,0,603,900),1026=>array(30,-148,720,729),1027=>array(80,0,569,900),1028=>array(40,-23,669,741),1029=>array(48,-23,621,741),1030=>array(100,0,194,729),1031=>array(7,0,290,900),1032=>array(35,-23,444,729),1033=>array(30,0,969,729),1034=>array(80,0,969,729),1035=>array(30,0,720,729),1036=>array(80,0,622,900),1037=>array(80,0,650,900),1038=>array(15,0,608,900),1039=>array(80,-135,642,729),1040=>array(15,0,651,729),1041=>array(80,0,624,729),1042=>array(80,0,624,729),1043=>array(80,0,569,729),1044=>array(34,-135,778,729),1045=>array(80,0,603,729),1046=>array(15,0,900,729),1047=>array(40,-23,613,741),1048=>array(80,0,650,729),1049=>array(80,0,650,900),1050=>array(80,0,622,729),1051=>array(30,-10,591,729),1052=>array(80,0,766,729),1053=>array(80,0,641,729),1054=>array(40,-23,744,741),1055=>array(80,0,641,729),1056=>array(80,0,606,729),1057=>array(40,-23,669,741),1058=>array(30,0,602,729),1059=>array(15,0,608,729),1060=>array(40,0,805,729),1061=>array(15,0,642,729),1062=>array(80,-135,708,729),1063=>array(50,0,540,729),1064=>array(80,0,750,729),1065=>array(80,-135,817,729),1066=>array(30,0,805,729),1067=>array(80,0,794,729),1068=>array(80,0,624,729),1069=>array(40,-23,669,741),1070=>array(80,-23,955,741),1071=>array(15,0,606,729),1072=>array(30,-23,523,539),1073=>array(30,-23,504,775),1074=>array(60,0,458,524),1075=>array(60,0,370,524),1076=>array(20,-120,562,524),1077=>array(30,-23,503,539),1078=>array(10,0,755,524),1079=>array(30,-23,455,539),1080=>array(60,0,487,524),1081=>array(60,0,487,699),1082=>array(60,0,474,524),1083=>array(20,-10,437,524),1084=>array(60,0,538,524),1085=>array(60,0,478,524),1086=>array(30,-23,504,539),1087=>array(60,0,477,524),1088=>array(60,-218,529,539),1089=>array(30,-23,476,539),1090=>array(20,0,392,524),1091=>array(10,-218,468,524),1092=>array(30,-218,819,674),1093=>array(10,0,466,524),1094=>array(60,-120,538,524),1095=>array(50,0,430,524),1096=>array(60,0,612,524),1097=>array(60,-120,672,524),1098=>array(20,0,616,524),1099=>array(60,0,610,524),1100=>array(60,0,473,524),1101=>array(30,-23,476,539),1102=>array(60,-23,711,539),1103=>array(10,0,469,524),1104=>array(30,-23,503,740),1105=>array(30,-23,503,717),1106=>array(18,-163,517,729),1107=>array(60,0,370,740),1108=>array(30,-23,476,539),1109=>array(36,-23,461,539),1110=>array(70,0,154,729),1111=>array(-10,0,273,709),1112=>array(0,-218,171,729),1113=>array(20,0,766,524),1114=>array(60,0,807,524),1115=>array(20,0,519,729),1116=>array(60,0,474,740),1117=>array(60,0,487,740),1118=>array(10,-218,468,699),1119=>array(60,-120,478,524),1120=>array(15,0,921,729),1121=>array(10,0,670,524),1122=>array(30,0,775,729),1123=>array(20,0,606,648),1124=>array(100,-23,907,741),1125=>array(71,-23,672,539),1126=>array(15,0,770,729),1127=>array(10,0,547,524),1128=>array(100,0,1010,729),1129=>array(71,0,737,524),1130=>array(15,0,900,729),1131=>array(10,0,755,524),1132=>array(100,0,1110,729),1133=>array(71,0,925,524),1134=>array(34,-192,613,807),1135=>array(43,-186,455,605),1136=>array(60,0,702,729),1137=>array(60,-200,638,524),1138=>array(40,-23,744,741),1139=>array(30,-23,504,539),1140=>array(15,0,742,729),1141=>array(10,0,550,524),1142=>array(15,0,742,900),1143=>array(10,0,550,729),1144=>array(39,-218,1160,741),1145=>array(30,-218,934,542),1146=>array(40,-23,824,741),1147=>array(30,-23,564,540),1148=>array(15,0,921,980),1149=>array(10,0,681,800),1150=>array(15,0,921,900),1151=>array(10,0,670,729),1154=>array(20,-220,448,529),1155=>array(-380,611,-20,799),1156=>array(-258,597,43,732),1157=>array(-249,608,-86,696),1158=>array(-244,614,-80,703),1159=>array(-553,579,0,745),1160=>array(-752,-122,269,857),1161=>array(-771,-237,341,875),1162=>array(80,-135,717,900),1163=>array(60,-120,547,699),1164=>array(20,0,653,729),1165=>array(10,0,490,524),1166=>array(80,0,606,729),1167=>array(60,-218,530,539),1168=>array(80,0,569,825),1169=>array(60,0,355,629),1170=>array(20,0,584,729),1171=>array(20,0,392,524),1172=>array(80,-174,569,729),1173=>array(60,-143,417,524),1174=>array(15,-135,900,729),1175=>array(10,-120,815,524),1176=>array(40,-205,613,741),1177=>array(30,-205,455,539),1178=>array(80,-135,622,729),1179=>array(60,-120,474,524),1180=>array(80,0,665,729),1181=>array(60,0,504,524),1182=>array(10,0,674,729),1183=>array(10,0,514,524),1184=>array(20,0,830,729),1185=>array(20,0,648,524),1186=>array(80,-135,708,729),1187=>array(60,-120,538,524),1188=>array(80,0,965,729),1189=>array(60,0,689,524),1190=>array(80,-174,998,729),1191=>array(60,-143,750,524),1192=>array(40,-23,788,741),1193=>array(30,-23,616,539),1194=>array(40,-205,669,741),1195=>array(30,-205,476,539),1196=>array(30,-135,602,729),1197=>array(20,-120,392,524),1198=>array(15,0,663,729),1199=>array(10,-200,578,524),1200=>array(15,0,663,729),1201=>array(10,-200,578,524),1202=>array(15,-135,642,729),1203=>array(10,-120,466,524),1204=>array(30,-135,913,729),1205=>array(20,-120,652,524),1206=>array(50,-135,607,729),1207=>array(40,-120,481,524),1208=>array(60,0,550,729),1209=>array(40,0,420,524),1210=>array(80,0,570,729),1211=>array(60,0,440,524),1212=>array(40,-23,875,757),1213=>array(30,-23,661,539),1214=>array(40,-197,875,757),1215=>array(30,-197,661,539),1216=>array(80,0,174,729),1217=>array(15,0,900,900),1218=>array(10,0,755,698),1219=>array(80,-174,656,729),1220=>array(60,-143,472,524),1221=>array(30,-135,662,729),1222=>array(20,-120,498,524),1223=>array(80,-174,641,729),1224=>array(60,-143,478,524),1225=>array(80,-135,712,729),1226=>array(60,-120,539,524),1227=>array(60,-135,550,729),1228=>array(40,-120,420,524),1229=>array(80,-135,837,729),1230=>array(60,-120,599,524),1231=>array(80,0,174,729),1232=>array(15,0,651,900),1233=>array(30,-23,523,734),1234=>array(15,0,651,900),1235=>array(30,-23,523,703),1236=>array(15,0,954,729),1237=>array(30,-23,841,539),1238=>array(80,0,603,900),1239=>array(30,-23,503,734),1240=>array(40,-23,670,741),1241=>array(40,-23,513,539),1242=>array(40,-23,670,900),1243=>array(40,-23,513,703),1244=>array(15,0,900,900),1245=>array(10,0,755,703),1246=>array(40,-23,613,900),1247=>array(30,-23,455,703),1248=>array(40,-23,589,729),1249=>array(30,-143,504,524),1250=>array(80,0,650,870),1251=>array(60,0,487,681),1252=>array(80,0,650,900),1253=>array(60,0,487,703),1254=>array(40,-23,744,900),1255=>array(30,-23,504,703),1256=>array(40,-23,744,741),1257=>array(30,-23,504,539),1258=>array(40,-23,744,900),1259=>array(30,-23,504,703),1260=>array(40,-23,669,900),1261=>array(30,-23,476,703),1262=>array(15,0,608,870),1263=>array(10,-218,468,681),1264=>array(15,0,608,900),1265=>array(10,-218,468,703),1266=>array(15,0,608,900),1267=>array(10,-218,468,749),1268=>array(50,0,540,900),1269=>array(50,0,430,703),1270=>array(80,-135,569,729),1271=>array(60,-120,370,524),1272=>array(80,0,794,900),1273=>array(60,0,610,703),1274=>array(20,-218,584,729),1275=>array(20,-218,392,524),1276=>array(15,-174,642,729),1277=>array(10,-143,466,524),1278=>array(15,0,642,729),1279=>array(10,0,466,524),1296=>array(40,-23,613,741),1297=>array(30,-23,455,539),1298=>array(30,-174,591,729),1299=>array(20,-143,437,524),1306=>array(40,-59,744,741),1307=>array(30,-218,499,539),1308=>array(15,0,922,729),1309=>array(9,0,711,524),1310=>array(80,0,622,729),1311=>array(60,0,474,524),1316=>array(80,-135,707,729),1317=>array(60,-135,544,524),1318=>array(50,-135,607,729),1319=>array(50,-135,497,524),1329=>array(70,-41,720,716),1330=>array(70,0,633,726),1331=>array(40,-1,700,726),1332=>array(60,1,705,729),1333=>array(70,-10,633,733),1334=>array(50,0,731,735),1335=>array(70,0,416,721),1336=>array(70,0,633,729),1337=>array(70,-2,790,728),1338=>array(65,-10,636,718),1339=>array(70,0,632,732),1340=>array(70,0,350,716),1341=>array(70,-12,787,723),1342=>array(35,-4,768,762),1343=>array(70,1,633,733),1344=>array(20,-74,564,725),1345=>array(50,-42,591,728),1346=>array(65,0,636,728),1347=>array(40,0,618,724),1348=>array(60,-10,729,729),1349=>array(45,-12,550,728),1350=>array(10,-9,727,729),1351=>array(40,-12,556,739),1352=>array(70,1,633,729),1353=>array(66,-14,583,728),1354=>array(65,1,628,729),1355=>array(45,0,714,735),1356=>array(70,1,708,729),1357=>array(70,-12,633,716),1358=>array(65,1,718,729),1359=>array(45,-12,615,728),1360=>array(70,1,633,729),1361=>array(60,-12,569,728),1362=>array(70,0,345,723),1363=>array(45,1,743,725),1364=>array(30,0,592,728),1365=>array(45,-12,730,729),1366=>array(40,-8,674,725),1369=>array(79,579,167,754),1370=>array(53,489,155,723),1371=>array(30,588,173,718),1372=>array(27,577,306,730),1373=>array(22,592,231,740),1374=>array(13,588,305,793),1375=>array(22,573,307,708),1377=>array(65,-10,768,524),1378=>array(70,-200,491,535),1379=>array(35,-200,561,535),1380=>array(65,-200,559,534),1381=>array(65,-11,490,721),1382=>array(35,-200,571,537),1383=>array(70,-121,333,721),1384=>array(65,-200,486,529),1385=>array(70,-200,554,537),1386=>array(35,-3,569,734),1387=>array(70,-200,492,716),1388=>array(70,-200,256,524),1389=>array(70,-200,730,713),1390=>array(35,-8,515,748),1391=>array(70,-200,493,721),1392=>array(70,0,492,716),1393=>array(35,-14,467,736),1394=>array(65,-200,558,530),1395=>array(44,0,507,731),1396=>array(65,-10,461,744),1397=>array(-20,-200,179,524),1398=>array(70,-10,462,745),1399=>array(35,-195,378,529),1400=>array(65,-1,486,535),1401=>array(35,-199,357,531),1402=>array(65,-200,768,524),1403=>array(38,-201,463,532),1404=>array(65,0,488,535),1405=>array(65,-12,485,523),1406=>array(65,-200,574,716),1407=>array(65,-13,824,535),1408=>array(65,-200,486,535),1409=>array(35,-200,492,535),1410=>array(70,0,281,524),1411=>array(65,-200,824,723),1412=>array(0,-200,542,537),1413=>array(35,-12,521,530),1414=>array(42,-200,623,725),1415=>array(70,-8,544,723),1417=>array(90,0,190,519),1418=>array(12,166,294,263),1423=>array(60,1,705,729),1456=>array(265,-256,336,-60),1457=>array(112,-256,468,-60),1458=>array(120,-256,463,-60),1459=>array(128,-249,466,-60),1460=>array(265,-131,336,-60),1461=>array(200,-131,401,-60),1462=>array(184,-256,383,-60),1463=>array(187,-131,415,-60),1464=>array(190,-248,418,-60),1465=>array(264,660,335,731),1466=>array(8,658,79,729),1467=>array(162,-273,432,-60),1468=>array(224,270,295,341),1469=>array(229,-248,300,-60),1470=>array(38,524,393,600),1471=>array(101,660,341,731),1472=>array(62,-100,149,700),1473=>array(639,640,710,711),1474=>array(70,640,141,711),1475=>array(80,0,184,524),1476=>array(394,640,465,711),1477=>array(255,-131,326,-60),1478=>array(51,0,326,600),1479=>array(190,-248,418,-60),1488=>array(58,0,582,600),1489=>array(58,0,566,600),1490=>array(30,0,433,600),1491=>array(38,0,543,600),1492=>array(63,0,570,600),1493=>array(62,0,149,600),1494=>array(39,0,296,600),1495=>array(63,0,571,600),1496=>array(61,0,570,600),1497=>array(58,286,145,600),1498=>array(38,-200,474,600),1499=>array(57,0,516,600),1500=>array(37,0,545,749),1501=>array(63,0,571,600),1502=>array(48,0,570,600),1503=>array(62,-200,149,600),1504=>array(51,0,326,600),1505=>array(61,0,569,600),1506=>array(36,-55,531,600),1507=>array(57,-200,523,600),1508=>array(63,0,533,600),1509=>array(13,-200,485,600),1510=>array(51,0,533,600),1511=>array(62,-200,550,600),1512=>array(37,0,495,600),1513=>array(60,0,720,600),1514=>array(35,0,635,600),1520=>array(62,0,362,600),1521=>array(60,0,351,600),1522=>array(56,286,343,600),1523=>array(44,464,137,709),1524=>array(55,464,308,709),1792=>array(56,2,567,504),1793=>array(52,99,163,210),1794=>array(50,-112,161,-1),1795=>array(51,100,162,452),1796=>array(44,-240,156,112),1797=>array(106,1,394,113),1798=>array(106,-110,394,113),1799=>array(106,-109,394,112),1800=>array(84,97,309,450),1801=>array(87,-241,313,112),1802=>array(26,3,548,712),1803=>array(26,245,548,524),1804=>array(136,177,480,621),1805=>array(26,228,548,722),1808=>array(35,-137,415,634),1809=>array(57,372,386,818),1810=>array(-72,0,538,427),1811=>array(-72,-231,609,541),1812=>array(-72,-231,609,541),1813=>array(107,-143,473,429),1814=>array(107,0,473,429),1815=>array(109,-69,645,429),1816=>array(100,0,538,427),1817=>array(177,-170,347,371),1818=>array(-72,0,591,290),1819=>array(-72,-161,682,540),1820=>array(-72,-161,682,540),1821=>array(-72,0,448,273),1822=>array(-78,-173,757,768),1823=>array(97,-216,549,475),1824=>array(-72,0,624,664),1825=>array(107,-138,645,427),1826=>array(107,-300,624,259),1827=>array(-72,-2,689,424),1828=>array(167,-206,689,424),1829=>array(-72,0,676,540),1830=>array(-72,0,540,576),1831=>array(-72,0,540,576),1832=>array(127,-300,642,272),1833=>array(-72,0,550,427),1834=>array(107,0,473,608),1835=>array(-72,0,645,427),1836=>array(99,-10,619,491),1837=>array(-72,0,538,628),1838=>array(-72,-231,609,558),1839=>array(107,-200,473,429),1840=>array(206,596,396,786),1841=>array(256,-300,445,-110),1842=>array(300,-265,335,745),1843=>array(245,554,480,776),1844=>array(205,-260,440,-38),1845=>array(227,565,504,768),1846=>array(245,554,480,776),1847=>array(205,-260,440,-38),1848=>array(220,-225,405,-75),1849=>array(125,-266,410,-64),1850=>array(169,588,347,714),1851=>array(288,-188,466,-62),1852=>array(263,-177,374,-66),1853=>array(171,566,379,783),1854=>array(253,-255,461,-37),1855=>array(263,618,374,729),1856=>array(271,-154,369,-61),1857=>array(263,618,374,729),1858=>array(263,-177,374,-66),1859=>array(265,567,376,848),1860=>array(263,-300,375,-39),1861=>array(167,567,474,818),1862=>array(172,-300,469,-54),1863=>array(170,640,472,780),1864=>array(168,-184,474,-30),1865=>array(167,567,468,801),1866=>array(213,598,421,795),1869=>array(132,-24,723,544),1870=>array(-72,0,624,707),1871=>array(-72,0,624,664),2304=>array(-303,656,71,900),2305=>array(-297,656,77,900),2306=>array(-181,696,-33,844),2307=>array(76,98,224,525),2308=>array(30,0,727,860),2309=>array(30,0,727,613),2310=>array(4,0,898,613),2311=>array(-10,-151,474,613),2312=>array(-10,-151,474,900),2313=>array(-10,-6,592,613),2314=>array(-10,-6,814,613),2315=>array(-10,-11,931,613),2316=>array(-10,-119,651,613),2317=>array(-10,-133,443,831),2318=>array(-10,-133,443,860),2319=>array(-10,-133,443,613),2320=>array(-10,-133,443,900),2321=>array(4,0,898,819),2322=>array(4,0,898,860),2323=>array(4,0,898,900),2324=>array(4,0,898,900),2325=>array(-10,0,759,613),2326=>array(-10,0,790,613),2327=>array(-10,0,532,613),2328=>array(-10,0,600,613),2329=>array(-10,-6,690,613),2330=>array(-10,0,630,613),2331=>array(-10,-8,654,613),2332=>array(-10,0,713,613),2333=>array(-10,-151,702,613),2334=>array(-10,0,690,613),2335=>array(-10,-6,578,613),2336=>array(-10,6,541,613),2337=>array(-10,-6,621,613),2338=>array(-10,-6,548,613),2339=>array(-10,0,618,613),2340=>array(-10,-1,574,613),2341=>array(42,0,670,613),2342=>array(-10,-39,510,613),2343=>array(41,0,603,613),2344=>array(-10,0,578,613),2345=>array(-10,-53,578,613),2346=>array(-10,0,489,613),2347=>array(-10,0,743,613),2348=>array(-10,0,502,613),2349=>array(6,0,588,613),2350=>array(-10,0,528,613),2351=>array(-10,0,566,613),2352=>array(-10,-13,445,613),2353=>array(-10,-80,445,613),2354=>array(-10,-11,666,613),2355=>array(-10,58,671,613),2356=>array(-10,-109,671,613),2357=>array(-10,0,502,613),2358=>array(-10,-16,656,613),2359=>array(-10,0,489,613),2360=>array(-10,-13,677,613),2361=>array(-10,-70,496,613),2362=>array(-121,614,-53,800),2363=>array(-10,0,236,800),2364=>array(-384,-107,-236,41),2365=>array(23,-15,440,587),2366=>array(-10,0,236,613),2367=>array(-10,0,648,869),2368=>array(-243,1,236,855),2369=>array(-447,-266,13,-14),2370=>array(-317,-266,143,-14),2371=>array(-304,-268,-14,-14),2372=>array(-304,-300,33,122),2373=>array(-300,656,74,827),2374=>array(-451,614,-81,860),2375=>array(-388,613,-76,900),2376=>array(-416,613,-72,900),2377=>array(-73,0,301,827),2378=>array(-223,0,236,860),2379=>array(-160,0,236,899),2380=>array(-192,0,236,900),2381=>array(-162,-230,57,-25),2382=>array(0,1,159,613),2383=>array(-274,0,236,860),2384=>array(21,-6,824,783),2385=>array(-121,614,-53,900),2386=>array(-544,-257,6,-206),2387=>array(-468,736,-206,900),2388=>array(-206,736,56,900),2389=>array(-300,618,74,900),2390=>array(-440,-164,0,-37),2391=>array(-440,-300,0,-37),2392=>array(-10,-107,759,613),2393=>array(-10,-180,790,613),2394=>array(-10,0,532,613),2395=>array(-10,-101,713,613),2396=>array(-10,-180,621,613),2397=>array(-10,-180,548,613),2398=>array(-10,-48,743,613),2399=>array(-10,-60,566,613),2400=>array(-10,-188,910,613),2401=>array(-10,-291,674,613),2402=>array(-416,-300,40,113),2403=>array(-417,-300,60,256),2404=>array(371,-96,438,640),2405=>array(238,-82,518,654),2406=>array(90,93,484,498),2407=>array(113,0,447,613),2408=>array(88,-68,498,613),2409=>array(100,-129,486,613),2410=>array(78,4,510,613),2411=>array(102,0,535,614),2412=>array(102,-104,484,613),2413=>array(34,6,510,604),2414=>array(130,6,458,611),2415=>array(129,-119,458,613),2416=>array(91,182,303,392),2417=>array(129,717,258,837),2418=>array(30,0,778,827),2419=>array(30,0,727,800),2420=>array(4,0,898,800),2421=>array(4,0,898,860),2422=>array(30,-164,727,613),2423=>array(30,-300,727,613),2425=>array(-10,-154,713,613),2426=>array(-10,0,566,613),2427=>array(-10,-20,578,613),2428=>array(-10,-20,713,613),2429=>array(88,1,498,613),2430=>array(-10,-75,621,613),2431=>array(-10,-20,502,613),2433=>array(-313,617,-22,797),2434=>array(20,43,286,547),2435=>array(34,49,229,507),2437=>array(1,0,656,558),2438=>array(1,0,829,635),2439=>array(-14,-50,507,790),2440=>array(1,-10,564,772),2441=>array(0,62,539,790),2442=>array(0,64,559,794),2443=>array(18,0,600,651),2444=>array(116,53,533,633),2447=>array(35,0,501,571),2448=>array(35,0,588,857),2451=>array(23,62,504,538),2452=>array(23,62,593,861),2453=>array(1,0,569,558),2454=>array(28,0,467,644),2455=>array(43,3,480,635),2456=>array(1,0,437,558),2457=>array(9,3,447,525),2458=>array(0,2,407,558),2459=>array(0,-75,509,558),2460=>array(0,-3,601,558),2461=>array(1,1,563,646),2462=>array(26,0,747,570),2463=>array(-47,70,401,807),2464=>array(0,3,404,852),2465=>array(0,60,540,558),2466=>array(0,3,408,558),2467=>array(63,0,460,657),2468=>array(-33,38,597,558),2469=>array(15,0,490,646),2470=>array(-23,-2,435,558),2471=>array(45,0,461,565),2472=>array(0,-2,445,558),2474=>array(9,0,499,627),2475=>array(1,0,595,558),2476=>array(0,0,396,558),2477=>array(0,71,565,558),2478=>array(1,0,458,558),2479=>array(0,0,433,558),2480=>array(0,0,396,558),2482=>array(1,0,508,558),2486=>array(0,0,518,645),2487=>array(0,0,445,558),2488=>array(0,0,508,558),2489=>array(1,-53,497,558),2492=>array(-313,-135,-201,-23),2493=>array(0,-53,487,558),2494=>array(-79,0,193,635),2495=>array(0,0,541,789),2496=>array(-393,0,180,809),2497=>array(-251,-214,105,76),2498=>array(-192,-274,154,36),2499=>array(-354,-293,-83,41),2500=>array(-289,-300,47,131),2503=>array(1,0,303,558),2504=>array(-58,0,332,787),2507=>array(-458,0,418,635),2508=>array(-438,0,419,820),2509=>array(-209,-166,-13,-3),2510=>array(11,3,401,561),2519=>array(-276,2,219,820),2524=>array(0,-112,540,558),2525=>array(0,-145,408,558),2527=>array(0,0,433,558),2528=>array(19,-253,594,651),2529=>array(116,-269,640,633),2530=>array(-383,-300,-89,84),2531=>array(-401,-300,151,186),2534=>array(65,65,419,430),2535=>array(77,2,364,556),2536=>array(49,-59,482,547),2537=>array(17,44,500,514),2538=>array(57,23,394,579),2539=>array(49,5,439,549),2540=>array(8,26,467,535),2541=>array(96,30,473,540),2542=>array(36,31,522,542),2543=>array(28,30,445,574),2544=>array(-25,0,414,558),2545=>array(-25,0,414,558),2546=>array(27,98,471,609),2547=>array(-5,73,358,548),2548=>array(26,98,470,609),2549=>array(40,75,550,548),2550=>array(13,29,543,572),2551=>array(23,47,133,551),2552=>array(17,35,342,558),2553=>array(43,146,391,489),2554=>array(3,372,524,729),2555=>array(49,-178,344,298),2561=>array(-324,657,0,900),2562=>array(-137,719,0,856),2563=>array(48,39,296,621),2565=>array(-7,0,872,641),2566=>array(-7,0,1104,641),2567=>array(-32,0,884,900),2568=>array(-10,0,945,900),2569=>array(-7,-154,739,897),2570=>array(-7,-271,739,897),2575=>array(-10,0,679,929),2576=>array(-7,0,872,974),2579=>array(-7,0,735,949),2580=>array(-7,0,872,981),2581=>array(-8,0,697,641),2582=>array(-13,0,648,641),2583=>array(-7,0,714,641),2584=>array(-7,0,764,641),2585=>array(-9,0,667,641),2586=>array(-6,0,700,641),2587=>array(-8,0,672,641),2588=>array(-10,0,669,641),2589=>array(-7,-2,642,641),2590=>array(-6,-3,655,641),2591=>array(-7,-3,659,641),2592=>array(-10,-2,673,641),2593=>array(-8,0,669,641),2594=>array(-9,-6,667,641),2595=>array(-7,0,667,641),2596=>array(-6,3,657,641),2597=>array(-6,0,650,641),2598=>array(-8,0,677,641),2599=>array(-10,0,648,641),2600=>array(-12,-2,643,641),2602=>array(-9,0,666,641),2603=>array(-8,0,669,641),2604=>array(-9,0,637,641),2605=>array(-9,0,634,641),2606=>array(-7,0,673,641),2607=>array(-6,0,749,641),2608=>array(-6,-1,632,641),2610=>array(-10,-4,691,640),2611=>array(-21,-13,734,641),2613=>array(-7,-3,642,641),2614=>array(-7,0,682,641),2616=>array(-7,0,682,641),2617=>array(-10,0,628,641),2620=>array(-163,-156,-57,-50),2622=>array(-13,250,309,641),2623=>array(-5,0,488,933),2624=>array(-222,0,322,900),2625=>array(-518,-154,-152,-49),2626=>array(-518,-275,-152,-54),2631=>array(-502,651,-134,929),2632=>array(-545,656,-132,981),2635=>array(-479,678,-147,939),2636=>array(-561,711,-119,981),2637=>array(-338,-285,-59,-52),2641=>array(-338,-285,-59,-52),2649=>array(-13,0,651,641),2650=>array(-6,-12,777,641),2651=>array(-10,0,667,641),2652=>array(-6,-3,669,641),2654=>array(-6,-10,672,641),2662=>array(33,40,618,625),2663=>array(31,-55,531,683),2664=>array(21,3,555,670),2665=>array(21,1,558,669),2666=>array(20,-1,512,658),2667=>array(0,0,498,641),2668=>array(16,0,486,829),2669=>array(14,0,583,664),2670=>array(14,0,600,642),2671=>array(14,0,618,789),2672=>array(-303,707,-24,931),2673=>array(-356,707,-32,897),2674=>array(-10,0,679,641),2675=>array(-7,0,739,897),2676=>array(12,-55,1518,984),2677=>array(-278,-265,0,-24),3330=>array(72,-13,419,333),3331=>array(77,23,273,522),3333=>array(88,-14,1360,557),3334=>array(89,-226,1522,558),3335=>array(87,-217,981,557),3336=>array(87,-217,1728,558),3337=>array(90,-215,720,558),3338=>array(90,-215,1473,558),3339=>array(87,-231,865,558),3340=>array(89,-10,1059,558),3342=>array(89,-221,1203,559),3343=>array(88,-222,1231,558),3344=>array(89,-221,1902,559),3346=>array(86,-13,714,559),3347=>array(86,-13,1195,559),3348=>array(86,-13,1463,559),3349=>array(89,-14,954,558),3350=>array(87,-13,910,557),3351=>array(89,-13,910,562),3352=>array(89,0,1343,558),3353=>array(87,-13,1002,557),3354=>array(90,0,865,544),3355=>array(90,-14,1281,557),3356=>array(87,-14,841,557),3357=>array(89,-14,1536,559),3358=>array(87,-14,1342,557),3359=>array(89,-14,589,558),3360=>array(89,-13,666,558),3361=>array(87,-16,1291,564),3362=>array(89,-14,1332,558),3363=>array(87,-14,1326,558),3364=>array(87,-14,954,557),3365=>array(87,0,823,558),3366=>array(89,-13,618,557),3367=>array(89,-14,928,558),3368=>array(89,-14,928,558),3369=>array(57,-14,928,558),3370=>array(89,-4,855,544),3371=>array(89,-4,1143,557),3372=>array(87,-13,1203,557),3373=>array(89,-19,644,559),3374=>array(87,0,628,558),3375=>array(90,-16,1022,557),3376=>array(90,-13,716,558),3377=>array(89,-13,662,557),3378=>array(89,0,855,557),3379=>array(86,-208,714,559),3380=>array(90,-13,641,563),3381=>array(86,-10,878,558),3382=>array(89,-13,1009,562),3383=>array(89,-4,1098,557),3384=>array(87,-16,1287,563),3385=>array(89,-9,1147,558),3386=>array(101,-200,855,544),3389=>array(85,-300,740,741),3390=>array(90,-13,506,557),3391=>array(-109,0,202,813),3392=>array(-145,0,202,812),3393=>array(72,-298,372,558),3394=>array(72,-298,372,558),3395=>array(43,-300,451,550),3396=>array(43,-300,451,550),3398=>array(89,-10,714,557),3399=>array(86,-16,535,559),3400=>array(89,-10,1404,557),3402=>array(-741,-13,536,557),3403=>array(-564,-16,526,559),3404=>array(-741,-13,724,558),3405=>array(-97,557,219,745),3406=>array(58,576,214,732),3415=>array(47,-13,724,558),3424=>array(87,-231,865,558),3425=>array(89,-226,1213,558),3426=>array(-655,-308,0,69),3427=>array(-732,-300,10,217),3430=>array(77,-14,687,545),3431=>array(35,-202,693,561),3432=>array(77,-10,764,557),3433=>array(85,-14,1030,557),3434=>array(85,-16,666,686),3435=>array(80,-216,934,699),3436=>array(85,-217,1213,561),3437=>array(83,-217,680,557),3438=>array(85,-217,832,557),3439=>array(84,-16,941,770),3440=>array(44,-217,1221,564),3441=>array(85,-217,886,561),3442=>array(89,-14,1322,610),3443=>array(62,176,874,524),3444=>array(87,-14,900,775),3445=>array(87,-14,1044,775),3449=>array(89,-14,1148,561),3450=>array(87,-14,1400,775),3451=>array(89,-14,994,771),3452=>array(89,-13,700,771),3453=>array(87,-14,1114,771),3454=>array(89,-13,1004,771),3455=>array(89,-14,957,771),4256=>array(60,0,527,720),4257=>array(60,0,560,720),4258=>array(60,0,582,740),4259=>array(60,20,755,740),4260=>array(60,0,520,740),4261=>array(60,0,515,740),4262=>array(60,0,739,740),4263=>array(80,0,813,740),4264=>array(60,20,562,740),4265=>array(60,0,517,740),4266=>array(60,20,879,740),4267=>array(60,0,522,740),4268=>array(80,0,543,740),4269=>array(80,20,710,740),4270=>array(60,0,507,720),4271=>array(30,0,543,720),4272=>array(60,20,739,720),4273=>array(80,0,541,720),4274=>array(60,0,732,740),4275=>array(20,0,644,740),4276=>array(60,0,787,740),4277=>array(60,0,519,720),4278=>array(60,20,752,740),4279=>array(60,0,523,720),4280=>array(30,0,573,740),4281=>array(80,20,530,740),4282=>array(60,0,694,720),4283=>array(60,0,516,720),4284=>array(80,0,623,740),4285=>array(60,0,631,720),4286=>array(80,0,536,720),4287=>array(60,0,828,740),4288=>array(60,0,513,720),4304=>array(30,0,406,450),4305=>array(30,0,461,720),4306=>array(30,-280,498,420),4307=>array(30,-261,662,420),4308=>array(30,-280,417,420),4309=>array(30,-280,417,420),4310=>array(30,0,598,740),4311=>array(30,0,704,420),4312=>array(30,20,419,420),4313=>array(30,-280,415,420),4314=>array(30,-260,813,420),4315=>array(30,0,419,720),4316=>array(30,0,419,720),4317=>array(30,20,652,420),4318=>array(30,0,419,720),4319=>array(0,-280,450,420),4320=>array(30,20,652,720),4321=>array(30,0,438,720),4322=>array(30,-280,680,602),4323=>array(0,-280,593,420),4324=>array(30,-280,667,420),4325=>array(30,-280,417,714),4326=>array(30,-260,672,420),4327=>array(30,-280,417,420),4328=>array(0,0,440,740),4329=>array(30,20,410,740),4330=>array(30,-280,602,420),4331=>array(30,0,419,720),4332=>array(30,0,470,740),4333=>array(30,-280,536,720),4334=>array(30,0,419,720),4335=>array(0,-280,656,420),4336=>array(30,0,444,720),4337=>array(0,-4,600,746),4338=>array(30,-5,364,394),4339=>array(30,-274,389,376),4340=>array(30,-274,392,711),4341=>array(30,6,436,714),4345=>array(30,-280,498,420),4347=>array(60,2,455,580),4348=>array(78,228,371,768),5024=>array(53,0,631,729),5025=>array(53,-10,696,729),5026=>array(-22,0,550,729),5027=>array(5,-23,712,729),5028=>array(29,-23,941,741),5029=>array(53,0,146,729),5030=>array(42,-23,575,741),5031=>array(36,-23,758,741),5032=>array(53,0,444,729),5033=>array(24,-23,635,729),5034=>array(-22,0,614,729),5035=>array(-21,-23,388,729),5036=>array(53,0,576,729),5037=>array(9,0,742,729),5038=>array(26,0,484,741),5039=>array(-29,-23,674,752),5040=>array(53,0,494,729),5041=>array(53,0,537,729),5042=>array(-3,-23,781,741),5043=>array(2,0,909,729),5044=>array(13,-23,567,741),5045=>array(50,0,519,752),5046=>array(30,-23,647,741),5047=>array(53,0,739,729),5048=>array(28,0,497,752),5049=>array(-2,-23,851,729),5050=>array(30,-23,905,741),5051=>array(53,0,614,729),5052=>array(24,-23,470,729),5053=>array(12,-23,679,729),5054=>array(29,-23,733,741),5055=>array(23,-130,486,729),5056=>array(30,-23,695,741),5057=>array(-26,-23,776,742),5058=>array(53,0,543,729),5059=>array(16,0,571,729),5060=>array(28,0,544,752),5061=>array(29,-23,1011,741),5062=>array(24,0,596,729),5063=>array(10,-23,789,752),5064=>array(16,-23,704,741),5065=>array(-8,0,1138,741),5066=>array(10,-23,789,752),5067=>array(36,-23,574,741),5068=>array(50,-23,610,729),5069=>array(6,-23,876,752),5070=>array(6,0,573,729),5071=>array(53,0,597,729),5072=>array(6,0,469,729),5073=>array(24,-24,667,738),5074=>array(53,0,582,729),5075=>array(51,-23,460,729),5076=>array(-13,0,898,729),5077=>array(32,-23,564,741),5078=>array(2,-23,652,729),5079=>array(-26,0,460,729),5080=>array(9,0,495,729),5081=>array(-13,0,602,729),5082=>array(32,-23,564,741),5083=>array(35,-23,835,740),5084=>array(-5,-24,700,742),5085=>array(50,0,503,741),5086=>array(53,0,506,729),5087=>array(30,-23,659,741),5088=>array(17,-23,683,729),5089=>array(8,-23,792,741),5090=>array(53,0,579,729),5091=>array(31,-23,651,741),5092=>array(8,0,713,729),5093=>array(53,0,703,729),5094=>array(53,0,632,729),5095=>array(8,-22,493,729),5096=>array(30,-24,798,741),5097=>array(30,-91,913,741),5098=>array(-7,-23,857,741),5099=>array(29,-23,733,741),5100=>array(36,-23,764,741),5101=>array(-26,-24,581,741),5102=>array(36,-23,546,741),5103=>array(10,-23,789,752),5104=>array(17,-15,596,741),5105=>array(-24,-23,679,729),5106=>array(50,0,540,741),5107=>array(31,-23,847,741),5108=>array(53,0,597,729),5120=>array(50,148,534,390),5121=>array(50,0,891,730),5122=>array(50,0,891,893),5123=>array(50,0,891,730),5124=>array(50,0,891,886),5125=>array(50,0,676,730),5126=>array(50,0,676,770),5127=>array(50,0,676,770),5128=>array(50,0,676,730),5129=>array(50,0,676,730),5130=>array(50,0,676,730),5131=>array(50,0,676,770),5132=>array(50,0,891,730),5133=>array(50,0,891,730),5134=>array(50,0,891,730),5135=>array(50,0,891,730),5136=>array(50,0,891,886),5137=>array(50,0,891,886),5138=>array(50,0,832,730),5139=>array(50,0,832,730),5140=>array(50,0,832,846),5141=>array(50,0,832,846),5142=>array(50,0,676,819),5143=>array(50,0,832,730),5144=>array(50,0,832,730),5145=>array(50,0,832,846),5146=>array(50,0,832,846),5147=>array(50,0,676,815),5148=>array(50,428,444,770),5149=>array(50,307,298,576),5150=>array(50,428,397,730),5151=>array(50,428,279,730),5152=>array(50,428,279,730),5153=>array(50,554,402,730),5154=>array(50,554,402,730),5155=>array(50,428,226,780),5156=>array(50,428,401,780),5157=>array(50,428,413,730),5158=>array(50,430,239,730),5159=>array(50,307,166,423),5160=>array(50,446,350,505),5161=>array(50,430,350,730),5162=>array(50,430,350,730),5163=>array(50,0,1119,770),5164=>array(50,0,891,770),5165=>array(50,0,760,730),5166=>array(50,0,962,770),5167=>array(50,0,891,730),5168=>array(50,0,891,893),5169=>array(50,0,891,730),5170=>array(50,0,891,886),5171=>array(50,0,676,730),5172=>array(50,0,676,770),5173=>array(50,0,676,770),5174=>array(50,0,676,730),5175=>array(50,0,676,730),5176=>array(50,0,676,730),5177=>array(50,0,676,770),5178=>array(50,0,891,730),5179=>array(50,0,891,730),5180=>array(50,0,891,730),5181=>array(50,0,891,730),5182=>array(50,0,891,886),5183=>array(50,0,891,886),5184=>array(50,0,676,730),5185=>array(50,0,832,730),5186=>array(50,0,676,846),5187=>array(50,0,832,846),5188=>array(50,0,832,730),5189=>array(50,0,676,730),5190=>array(50,0,832,846),5191=>array(50,0,676,846),5192=>array(50,0,676,786),5193=>array(50,428,340,770),5194=>array(50,430,109,730),5195=>array(50,365,282,730),5196=>array(50,0,692,730),5197=>array(50,0,692,893),5198=>array(50,0,692,730),5199=>array(50,0,692,886),5200=>array(50,0,694,730),5201=>array(50,0,694,886),5202=>array(50,0,694,886),5203=>array(50,0,694,730),5204=>array(50,0,694,730),5205=>array(50,0,694,730),5206=>array(50,0,694,886),5207=>array(50,0,864,730),5208=>array(50,0,862,730),5209=>array(50,0,862,730),5210=>array(50,0,862,730),5211=>array(50,0,862,886),5212=>array(50,0,862,886),5213=>array(50,0,694,730),5214=>array(50,0,866,730),5215=>array(50,0,694,886),5216=>array(50,0,866,886),5217=>array(50,0,866,730),5218=>array(50,0,694,730),5219=>array(50,0,866,886),5220=>array(50,0,694,886),5221=>array(50,0,865,730),5222=>array(50,365,427,770),5223=>array(50,0,805,730),5224=>array(50,0,805,730),5225=>array(50,0,805,730),5226=>array(50,0,805,730),5227=>array(50,0,542,730),5228=>array(50,0,542,893),5229=>array(50,0,542,730),5230=>array(50,0,542,886),5231=>array(50,0,542,730),5232=>array(50,0,560,886),5233=>array(50,0,663,888),5234=>array(50,0,542,730),5235=>array(50,0,553,886),5236=>array(50,0,668,730),5237=>array(50,0,714,730),5238=>array(50,0,714,730),5239=>array(50,0,668,730),5240=>array(50,0,714,886),5241=>array(50,0,668,886),5242=>array(50,0,668,730),5243=>array(50,0,713,730),5244=>array(50,0,685,886),5245=>array(50,0,713,886),5246=>array(50,0,714,730),5247=>array(50,0,668,730),5248=>array(50,0,714,886),5249=>array(50,0,684,886),5250=>array(50,0,713,730),5251=>array(50,364,311,730),5252=>array(50,364,311,730),5253=>array(50,0,658,730),5254=>array(50,0,658,730),5255=>array(50,0,658,730),5256=>array(50,0,601,730),5257=>array(50,0,542,730),5258=>array(50,0,542,893),5259=>array(50,0,542,730),5260=>array(50,0,542,886),5261=>array(50,0,542,730),5262=>array(50,0,560,886),5263=>array(50,0,663,888),5264=>array(50,0,542,730),5265=>array(50,0,558,886),5266=>array(50,0,558,730),5267=>array(50,0,713,730),5268=>array(50,0,713,730),5269=>array(50,0,558,730),5270=>array(50,0,713,886),5271=>array(50,0,558,886),5272=>array(50,0,559,730),5273=>array(50,0,713,730),5274=>array(50,0,577,886),5275=>array(50,0,713,886),5276=>array(50,0,713,730),5277=>array(50,0,559,730),5278=>array(50,0,713,886),5279=>array(50,0,575,886),5280=>array(50,0,713,730),5281=>array(50,364,311,730),5282=>array(50,364,311,730),5283=>array(50,0,542,730),5284=>array(50,0,542,893),5285=>array(50,0,542,730),5286=>array(50,0,542,886),5287=>array(50,0,542,730),5288=>array(50,0,560,886),5289=>array(50,0,663,888),5290=>array(50,0,542,730),5291=>array(50,0,558,886),5292=>array(50,0,542,730),5293=>array(50,0,713,730),5294=>array(50,0,713,730),5295=>array(50,0,542,730),5296=>array(50,0,713,886),5297=>array(50,0,542,886),5298=>array(50,0,542,730),5299=>array(50,0,713,730),5300=>array(50,0,560,886),5301=>array(50,0,713,886),5302=>array(50,0,713,730),5303=>array(50,0,542,730),5304=>array(50,0,713,886),5305=>array(50,0,558,886),5306=>array(50,0,713,730),5307=>array(50,365,296,730),5308=>array(50,368,226,720),5309=>array(50,365,296,730),5310=>array(50,365,281,730),5311=>array(50,0,512,730),5312=>array(50,0,662,492),5313=>array(50,0,662,656),5314=>array(50,0,662,492),5315=>array(50,0,662,648),5316=>array(50,0,662,492),5317=>array(50,0,662,648),5318=>array(50,0,662,648),5319=>array(50,0,662,492),5320=>array(50,0,662,648),5321=>array(50,0,818,509),5322=>array(50,0,778,509),5323=>array(50,0,778,492),5324=>array(50,0,662,492),5325=>array(50,0,778,648),5326=>array(50,0,662,648),5327=>array(50,0,662,648),5328=>array(50,364,416,625),5329=>array(50,365,402,730),5330=>array(50,364,416,625),5331=>array(50,0,662,492),5332=>array(50,0,662,655),5333=>array(50,0,662,492),5334=>array(50,0,662,648),5335=>array(50,0,662,492),5336=>array(50,0,662,648),5337=>array(50,0,662,648),5338=>array(50,0,662,492),5339=>array(50,0,662,648),5340=>array(50,0,818,509),5341=>array(50,0,778,509),5342=>array(50,0,778,509),5343=>array(50,0,818,509),5344=>array(50,0,778,648),5345=>array(50,0,818,648),5346=>array(50,0,662,509),5347=>array(50,0,778,509),5348=>array(50,0,662,648),5349=>array(50,0,778,648),5350=>array(50,0,778,509),5351=>array(50,0,662,509),5352=>array(50,0,778,648),5353=>array(50,0,662,648),5354=>array(50,364,416,625),5355=>array(0,365,262,730),5356=>array(50,0,574,730),5357=>array(50,0,454,730),5358=>array(50,0,473,894),5359=>array(50,0,454,730),5360=>array(50,0,471,886),5361=>array(50,0,454,730),5362=>array(50,0,470,886),5363=>array(50,0,574,886),5364=>array(50,0,454,730),5365=>array(50,0,470,886),5366=>array(50,-3,570,727),5367=>array(50,0,610,730),5368=>array(50,0,609,730),5369=>array(50,0,570,730),5370=>array(50,0,626,886),5371=>array(50,0,570,886),5372=>array(50,0,570,730),5373=>array(50,0,610,730),5374=>array(50,0,587,886),5375=>array(50,0,626,886),5376=>array(50,0,609,730),5377=>array(50,0,570,730),5378=>array(50,0,609,886),5379=>array(50,0,586,886),5380=>array(50,0,609,730),5381=>array(50,365,259,730),5382=>array(50,365,315,730),5383=>array(50,365,259,730),5384=>array(50,365,408,730),5385=>array(50,343,265,730),5386=>array(50,343,265,730),5387=>array(50,257,297,838),5388=>array(50,0,960,838),5389=>array(50,0,970,838),5390=>array(50,0,822,838),5391=>array(50,0,822,838),5392=>array(50,0,780,730),5393=>array(50,0,780,730),5394=>array(50,0,780,886),5395=>array(50,0,804,482),5396=>array(50,0,804,638),5397=>array(50,0,804,482),5398=>array(50,0,804,638),5399=>array(50,0,951,730),5400=>array(50,0,952,730),5401=>array(50,0,951,730),5402=>array(50,0,952,730),5403=>array(50,0,951,886),5404=>array(50,0,952,886),5405=>array(50,0,948,482),5406=>array(50,0,948,482),5407=>array(50,0,948,638),5408=>array(50,0,948,638),5409=>array(50,0,948,482),5410=>array(50,0,948,482),5411=>array(50,0,948,638),5412=>array(50,0,948,638),5413=>array(50,363,544,678),5414=>array(50,0,466,730),5415=>array(50,0,466,893),5416=>array(50,0,466,730),5417=>array(50,0,466,886),5418=>array(50,0,466,730),5419=>array(50,0,482,886),5420=>array(50,0,586,887),5421=>array(50,0,466,730),5422=>array(50,0,482,886),5423=>array(50,0,621,730),5424=>array(50,0,622,730),5425=>array(50,0,621,730),5426=>array(50,0,622,730),5427=>array(50,0,621,886),5428=>array(50,0,622,886),5429=>array(50,0,621,730),5430=>array(50,0,622,730),5431=>array(50,0,637,886),5432=>array(50,0,622,886),5433=>array(50,0,621,730),5434=>array(50,0,622,730),5435=>array(50,0,621,886),5436=>array(50,0,638,886),5437=>array(50,0,621,730),5438=>array(50,365,322,730),5439=>array(50,365,455,730),5440=>array(50,366,414,730),5441=>array(50,366,410,726),5442=>array(50,0,780,456),5443=>array(50,0,780,456),5444=>array(50,-2,780,454),5445=>array(50,-2,780,619),5446=>array(50,-2,780,455),5447=>array(50,-2,780,612),5448=>array(50,0,506,730),5449=>array(50,0,506,886),5450=>array(50,0,506,730),5451=>array(50,0,506,730),5452=>array(50,0,506,886),5453=>array(50,-1,506,730),5454=>array(50,0,641,886),5455=>array(50,0,662,886),5456=>array(50,365,293,730),5457=>array(50,365,312,730),5458=>array(50,0,574,730),5459=>array(50,0,767,730),5460=>array(50,0,767,893),5461=>array(50,0,767,730),5462=>array(50,0,767,886),5463=>array(50,0,774,730),5464=>array(50,0,774,846),5465=>array(50,0,774,730),5466=>array(50,0,774,846),5467=>array(50,0,930,846),5468=>array(50,0,922,846),5469=>array(50,377,415,730),5470=>array(50,0,692,730),5471=>array(50,0,692,730),5472=>array(50,0,692,730),5473=>array(50,0,692,730),5474=>array(50,0,692,886),5475=>array(50,0,692,886),5476=>array(50,0,692,730),5477=>array(50,0,692,886),5478=>array(50,0,692,730),5479=>array(50,0,692,886),5480=>array(50,0,848,886),5481=>array(50,0,798,886),5482=>array(50,365,360,730),5483=>array(50,0,692,730),5484=>array(50,0,692,730),5485=>array(50,0,694,730),5486=>array(50,0,694,730),5487=>array(50,365,775,730),5488=>array(50,0,692,730),5489=>array(50,0,692,730),5490=>array(50,0,694,730),5491=>array(50,0,694,730),5492=>array(50,0,750,730),5493=>array(50,0,750,730),5494=>array(50,0,750,886),5495=>array(50,0,750,730),5496=>array(50,0,750,886),5497=>array(50,0,750,730),5498=>array(50,0,750,886),5499=>array(50,365,443,730),5500=>array(50,0,542,730),5501=>array(50,366,410,726),5502=>array(50,0,825,893),5503=>array(50,0,825,730),5504=>array(50,0,825,886),5505=>array(50,0,727,730),5506=>array(50,0,745,886),5507=>array(50,0,825,730),5508=>array(50,0,825,886),5509=>array(50,364,594,730),5510=>array(50,0,542,730),5511=>array(50,0,542,730),5512=>array(50,0,542,730),5513=>array(50,0,542,730),5514=>array(50,0,732,730),5515=>array(50,0,732,730),5516=>array(50,0,732,730),5517=>array(50,0,732,730),5518=>array(50,0,1006,893),5519=>array(50,0,1006,730),5520=>array(50,0,1006,886),5521=>array(50,0,637,730),5522=>array(50,0,655,886),5523=>array(50,0,1006,730),5524=>array(50,0,1006,886),5525=>array(50,365,474,730),5526=>array(50,365,732,730),5527=>array(50,0,596,730),5528=>array(50,0,596,730),5529=>array(50,0,596,730),5530=>array(50,0,596,730),5531=>array(50,0,662,614),5532=>array(50,0,662,614),5533=>array(50,0,662,614),5534=>array(50,0,662,614),5535=>array(50,365,416,730),5536=>array(50,0,722,730),5537=>array(50,0,722,730),5538=>array(50,0,722,730),5539=>array(50,0,722,748),5540=>array(50,0,722,730),5541=>array(50,0,722,747),5542=>array(50,365,416,730),5543=>array(50,0,588,730),5544=>array(50,0,588,730),5545=>array(50,0,588,886),5546=>array(50,0,588,730),5547=>array(50,0,588,886),5548=>array(50,0,588,730),5549=>array(50,0,588,886),5550=>array(50,365,338,730),5551=>array(50,0,438,730),5552=>array(50,0,465,730),5553=>array(50,0,465,730),5554=>array(50,0,465,730),5555=>array(50,0,465,730),5556=>array(50,0,542,730),5557=>array(50,0,542,730),5558=>array(50,0,542,730),5559=>array(50,0,542,730),5560=>array(50,0,492,730),5561=>array(50,0,492,730),5562=>array(50,0,492,730),5563=>array(50,0,492,730),5564=>array(50,0,511,730),5565=>array(50,0,511,730),5566=>array(50,0,511,730),5567=>array(50,0,511,730),5568=>array(50,0,580,730),5569=>array(50,0,580,730),5570=>array(50,0,580,730),5571=>array(50,0,580,730),5572=>array(50,0,891,730),5573=>array(50,0,891,730),5574=>array(50,0,676,730),5575=>array(50,0,676,730),5576=>array(50,0,676,730),5577=>array(50,0,676,730),5578=>array(50,0,891,730),5579=>array(50,0,891,730),5580=>array(50,0,676,730),5581=>array(50,0,676,730),5582=>array(50,0,676,730),5583=>array(50,0,676,730),5584=>array(50,0,891,730),5585=>array(50,0,891,730),5586=>array(50,0,676,730),5587=>array(50,0,676,730),5588=>array(50,0,676,730),5589=>array(50,0,676,730),5590=>array(50,0,891,730),5591=>array(50,0,891,730),5592=>array(50,0,676,730),5593=>array(50,0,676,730),5594=>array(50,0,676,730),5595=>array(50,0,676,730),5596=>array(50,0,780,730),5597=>array(50,0,780,730),5598=>array(50,0,780,730),5599=>array(50,0,780,730),5600=>array(50,0,780,730),5601=>array(50,0,780,730),5602=>array(50,0,780,730),5603=>array(50,0,780,730),5604=>array(50,0,780,730),5605=>array(50,0,780,730),5606=>array(50,0,780,730),5607=>array(50,0,780,730),5608=>array(50,0,780,730),5609=>array(50,0,780,730),5610=>array(50,0,780,730),5611=>array(50,0,780,730),5612=>array(50,0,780,730),5613=>array(50,0,780,730),5614=>array(50,430,350,730),5615=>array(50,0,672,730),5616=>array(50,0,672,730),5617=>array(50,0,672,730),5618=>array(50,0,672,730),5619=>array(50,0,672,730),5620=>array(50,0,672,730),5621=>array(50,0,672,730),5622=>array(50,0,672,730),5623=>array(50,0,672,730),5624=>array(50,0,672,730),5625=>array(50,0,672,730),5626=>array(50,0,672,730),5627=>array(50,0,672,730),5628=>array(50,0,672,730),5629=>array(50,0,672,730),5630=>array(50,0,672,730),5631=>array(50,0,672,730),5632=>array(50,0,672,730),5633=>array(50,365,472,730),5634=>array(50,0,542,730),5635=>array(50,0,542,730),5636=>array(50,0,662,492),5637=>array(50,0,662,492),5638=>array(50,0,662,492),5639=>array(50,0,662,492),5640=>array(50,0,672,730),5641=>array(50,0,672,730),5642=>array(50,0,672,730),5643=>array(50,0,672,730),5644=>array(50,0,672,730),5645=>array(50,0,672,730),5646=>array(50,0,780,730),5647=>array(50,0,780,730),5648=>array(50,0,654,730),5649=>array(50,0,654,730),5650=>array(50,0,654,730),5651=>array(50,0,654,730),5652=>array(50,0,597,730),5653=>array(50,0,597,730),5654=>array(50,0,597,730),5655=>array(50,0,780,547),5656=>array(50,0,780,547),5657=>array(50,0,780,547),5658=>array(50,0,780,547),5659=>array(50,0,780,547),5660=>array(50,0,597,730),5661=>array(50,0,597,730),5662=>array(50,0,780,547),5663=>array(50,0,780,547),5664=>array(50,0,780,547),5665=>array(50,0,780,547),5666=>array(50,0,780,366),5667=>array(50,-1,780,365),5668=>array(50,0,415,730),5669=>array(50,0,415,730),5670=>array(50,0,415,730),5671=>array(50,0,415,730),5672=>array(50,0,780,474),5673=>array(50,-109,780,365),5674=>array(50,0,524,730),5675=>array(50,0,524,730),5676=>array(50,0,524,730),5677=>array(50,0,524,730),5678=>array(50,0,559,547),5679=>array(50,0,559,547),5680=>array(50,0,597,509),5681=>array(50,0,597,509),5682=>array(50,0,597,509),5683=>array(50,0,597,509),5684=>array(50,0,689,654),5685=>array(50,-106,689,548),5686=>array(50,0,704,639),5687=>array(50,0,704,639),5688=>array(50,0,704,639),5689=>array(50,0,704,639),5690=>array(50,0,780,655),5691=>array(50,-108,780,547),5692=>array(50,0,705,730),5693=>array(50,0,705,730),5694=>array(50,0,705,730),5695=>array(50,0,705,730),5696=>array(50,0,780,730),5697=>array(50,0,780,730),5698=>array(50,0,780,730),5699=>array(50,0,780,730),5700=>array(50,0,780,730),5701=>array(50,0,780,730),5702=>array(50,365,377,730),5703=>array(50,295,377,800),5704=>array(50,0,780,730),5705=>array(50,0,780,730),5706=>array(50,0,780,730),5707=>array(50,0,780,730),5708=>array(50,0,780,730),5709=>array(50,0,780,730),5710=>array(50,0,780,730),5711=>array(50,0,780,730),5712=>array(50,0,668,730),5713=>array(50,0,668,730),5714=>array(50,0,668,730),5715=>array(50,0,668,730),5716=>array(50,0,780,730),5717=>array(50,0,780,730),5718=>array(50,0,668,730),5719=>array(50,0,668,730),5720=>array(50,0,668,730),5721=>array(50,0,668,730),5722=>array(50,0,475,730),5723=>array(50,0,780,730),5724=>array(50,0,780,730),5725=>array(50,0,668,730),5726=>array(50,0,668,730),5727=>array(50,0,668,730),5728=>array(50,0,668,730),5729=>array(50,0,780,730),5730=>array(50,0,780,730),5731=>array(50,0,668,730),5732=>array(50,0,668,730),5733=>array(50,0,668,730),5734=>array(50,0,668,730),5735=>array(50,0,672,730),5736=>array(50,0,672,730),5737=>array(50,0,672,730),5738=>array(50,0,672,730),5739=>array(50,0,672,730),5740=>array(50,0,672,730),5741=>array(50,0,772,730),5742=>array(50,0,320,270),5743=>array(50,0,825,730),5744=>array(50,0,1006,730),5745=>array(50,0,1266,730),5746=>array(50,0,1264,886),5747=>array(50,0,913,730),5748=>array(50,0,931,886),5749=>array(50,0,1264,730),5750=>array(50,0,1280,886),5751=>array(50,0,618,730),5752=>array(50,0,728,730),5753=>array(50,0,728,886),5754=>array(50,0,648,730),5755=>array(50,0,648,886),5756=>array(50,0,728,730),5757=>array(50,0,728,886),5758=>array(50,485,350,670),5759=>array(50,395,350,760),6320=>array(50,0,676,800),6321=>array(50,0,676,800),6322=>array(50,0,676,800),6323=>array(50,0,832,800),6324=>array(50,0,676,800),6325=>array(50,0,676,800),6326=>array(50,0,736,800),6327=>array(50,0,694,896),6328=>array(50,0,542,800),6329=>array(50,0,714,800),6330=>array(29,0,542,896),6331=>array(50,0,662,655),6332=>array(50,0,662,655),6333=>array(50,0,662,730),6334=>array(50,0,454,730),6335=>array(50,0,454,730),6336=>array(50,0,780,853),6337=>array(50,0,780,853),6338=>array(50,0,951,896),6339=>array(50,0,466,800),6340=>array(50,0,466,800),6341=>array(50,0,506,896),6342=>array(50,0,774,507),6343=>array(50,0,842,507),6344=>array(50,0,774,648),6345=>array(50,0,842,648),6346=>array(50,0,662,507),6347=>array(50,0,774,507),6348=>array(50,0,662,648),6349=>array(50,0,774,648),6350=>array(50,0,946,474),6351=>array(50,-2,914,474),6352=>array(50,-2,914,648),6353=>array(50,0,676,730),6354=>array(50,0,676,886),6355=>array(50,0,636,730),6356=>array(50,365,475,733),6357=>array(50,365,402,730),6358=>array(50,364,311,730),6359=>array(50,364,311,730),6360=>array(50,365,296,730),6361=>array(50,364,416,625),6362=>array(50,365,260,730),6363=>array(50,365,436,614),6364=>array(50,365,525,733),6365=>array(50,365,525,733),6366=>array(50,607,173,730),6367=>array(50,614,166,730),6368=>array(50,0,934,474),6369=>array(33,0,506,886),6370=>array(50,0,523,886),6371=>array(50,0,856,730),6372=>array(50,0,808,730),6373=>array(50,0,856,730),6374=>array(50,0,694,886),6375=>array(50,0,694,886),6376=>array(50,0,708,730),6377=>array(50,0,542,846),6378=>array(50,0,758,730),6379=>array(50,0,613,886),6380=>array(50,0,580,846),6381=>array(50,0,856,730),6382=>array(50,0,672,886),6383=>array(50,0,672,886),6384=>array(50,0,856,730),6385=>array(50,0,597,886),6386=>array(50,0,934,547),6387=>array(50,365,230,730),6388=>array(50,364,269,630),6389=>array(50,365,305,628),7424=>array(5,0,483,525),7425=>array(10,0,693,525),7426=>array(38,-21,849,541),7428=>array(33,-23,496,540),7429=>array(54,0,476,525),7430=>array(10,0,482,525),7431=>array(54,0,430,525),7432=>array(30,-23,455,539),7433=>array(72,-205,156,524),7434=>array(20,-23,327,525),7435=>array(54,0,486,525),7436=>array(5,0,402,525),7437=>array(54,0,560,525),7439=>array(33,-23,552,540),7448=>array(54,0,438,525),7449=>array(14,-1,474,524),7450=>array(23,0,450,525),7451=>array(20,0,432,525),7452=>array(54,-23,457,525),7456=>array(5,0,467,525),7457=>array(5,0,671,525),7458=>array(30,0,430,525),7579=>array(5,378,356,755),7581=>array(5,361,314,752),7582=>array(15,373,333,887),7583=>array(9,373,294,751),7588=>array(12,391,172,880),7589=>array(45,375,159,743),7590=>array(44,390,98,742),7595=>array(34,390,253,742),7596=>array(38,243,502,752),7597=>array(32,257,496,743),7598=>array(14,243,354,752),7599=>array(41,243,381,752),7600=>array(38,390,325,742),7601=>array(15,373,333,751),7602=>array(14,270,443,882),7607=>array(15,374,383,755),7608=>array(39,375,310,743),7609=>array(40,374,329,742),7612=>array(10,244,355,741),7613=>array(10,325,311,742),7614=>array(13,294,331,742),7615=>array(15,381,314,880),7680=>array(15,-253,651,729),7681=>array(30,-253,523,539),7682=>array(80,0,624,883),7683=>array(60,-23,529,729),7684=>array(80,-164,624,729),7685=>array(60,-187,529,729),7686=>array(80,-130,624,729),7687=>array(60,-153,529,729),7688=>array(40,-214,669,900),7689=>array(30,-214,476,747),7690=>array(80,0,658,883),7691=>array(30,-23,499,729),7692=>array(80,-164,658,729),7693=>array(30,-187,499,729),7694=>array(80,-130,658,729),7695=>array(30,-153,499,729),7696=>array(89,-207,667,729),7697=>array(26,-230,495,729),7698=>array(80,-210,658,729),7699=>array(30,-233,499,729),7700=>array(80,0,603,980),7701=>array(30,-23,503,860),7702=>array(80,0,603,980),7703=>array(30,-23,503,856),7704=>array(80,-210,603,729),7705=>array(30,-233,503,539),7706=>array(80,-164,603,729),7707=>array(30,-187,503,539),7708=>array(80,-207,603,936),7709=>array(30,-230,503,734),7710=>array(80,0,569,883),7711=>array(20,0,260,883),7712=>array(40,-23,705,871),7713=>array(30,-218,490,669),7714=>array(80,0,641,881),7715=>array(60,0,476,729),7716=>array(80,-164,641,729),7717=>array(60,-164,476,729),7718=>array(80,0,641,879),7719=>array(60,0,476,862),7720=>array(-15,-207,644,729),7721=>array(-33,-207,486,729),7722=>array(80,-195,641,729),7723=>array(60,-195,476,729),7724=>array(-10,-164,304,729),7725=>array(-29,-164,285,729),7726=>array(5,0,328,1000),7727=>array(-12,0,288,900),7728=>array(80,0,659,900),7729=>array(60,0,504,900),7730=>array(80,-164,659,729),7731=>array(60,-164,504,729),7732=>array(80,-130,659,729),7733=>array(60,-130,504,729),7734=>array(80,-164,533,729),7735=>array(58,-164,162,729),7736=>array(80,-164,533,871),7737=>array(-27,-164,247,859),7738=>array(80,-130,533,729),7739=>array(-27,-130,247,729),7740=>array(80,-210,533,729),7741=>array(-34,-210,253,729),7742=>array(80,0,766,900),7743=>array(60,0,752,747),7744=>array(80,0,766,883),7745=>array(60,0,752,729),7746=>array(80,-164,766,729),7747=>array(60,-164,752,539),7748=>array(80,0,650,880),7749=>array(60,0,477,729),7750=>array(80,-164,650,729),7751=>array(60,-164,477,539),7752=>array(80,-130,650,729),7753=>array(60,-130,477,539),7754=>array(80,-210,650,729),7755=>array(60,-210,477,539),7756=>array(40,-23,744,990),7757=>array(30,-23,504,880),7758=>array(40,-23,744,1000),7759=>array(30,-23,504,846),7760=>array(40,-23,744,980),7761=>array(30,-23,504,860),7762=>array(40,-23,744,980),7763=>array(30,-23,504,856),7764=>array(80,0,606,900),7765=>array(60,-218,529,747),7766=>array(80,0,606,883),7767=>array(60,-218,529,729),7768=>array(80,0,666,883),7769=>array(60,0,312,729),7770=>array(80,-164,666,729),7771=>array(59,-164,312,539),7772=>array(80,-164,666,871),7773=>array(59,-164,333,669),7774=>array(80,-130,666,729),7775=>array(-26,-130,312,539),7776=>array(48,-23,621,897),7777=>array(34,-23,459,729),7778=>array(48,-187,621,741),7779=>array(34,-187,459,539),7780=>array(48,-23,621,1000),7781=>array(34,-23,459,862),7782=>array(48,-23,621,1000),7783=>array(34,-23,459,852),7784=>array(48,-187,621,883),7785=>array(34,-187,459,729),7786=>array(30,0,602,883),7787=>array(20,-23,260,832),7788=>array(30,-164,602,729),7789=>array(20,-187,260,668),7790=>array(30,-130,602,729),7791=>array(20,-153,323,668),7792=>array(30,-210,602,729),7793=>array(20,-233,329,668),7794=>array(80,-186,640,729),7795=>array(60,-186,477,524),7796=>array(80,-187,640,729),7797=>array(60,-187,477,524),7798=>array(80,-233,640,729),7799=>array(60,-233,477,524),7800=>array(80,-23,640,980),7801=>array(60,-23,477,876),7802=>array(80,-23,640,972),7803=>array(60,-23,477,831),7804=>array(15,0,630,878),7805=>array(10,0,486,703),7806=>array(15,-164,630,729),7807=>array(10,-164,486,524),7808=>array(15,0,922,900),7809=>array(10,0,712,747),7810=>array(15,0,922,900),7811=>array(10,0,712,747),7812=>array(15,0,922,879),7813=>array(10,0,712,730),7814=>array(15,0,922,883),7815=>array(10,0,712,729),7816=>array(15,-164,922,729),7817=>array(10,-164,712,524),7818=>array(15,0,642,883),7819=>array(10,0,466,729),7820=>array(15,0,642,880),7821=>array(10,0,466,730),7822=>array(15,0,663,883),7823=>array(10,-218,468,729),7824=>array(30,0,585,900),7825=>array(30,0,456,729),7826=>array(30,-164,585,729),7827=>array(30,-164,456,524),7828=>array(30,-130,585,729),7829=>array(30,-130,456,524),7830=>array(60,-130,476,729),7831=>array(0,-23,283,834),7832=>array(10,0,712,772),7833=>array(10,-218,468,771),7834=>array(30,-23,523,754),7835=>array(20,0,260,896),7836=>array(18,0,258,732),7837=>array(18,0,258,732),7838=>array(93,-23,627,741),7839=>array(30,-16,522,729),7840=>array(15,-164,651,729),7841=>array(30,-187,523,539),7842=>array(15,0,651,969),7843=>array(30,-23,523,786),7844=>array(15,0,651,1000),7845=>array(30,-23,543,876),7846=>array(15,0,651,1000),7847=>array(4,-23,523,876),7848=>array(15,0,651,1000),7849=>array(30,-23,523,884),7850=>array(15,0,651,990),7851=>array(30,-23,523,867),7852=>array(15,-164,651,900),7853=>array(30,-187,523,749),7854=>array(15,0,651,1000),7855=>array(30,-23,523,892),7856=>array(15,0,651,1000),7857=>array(30,-23,523,890),7858=>array(15,0,651,1050),7859=>array(30,-23,523,916),7860=>array(15,0,651,1031),7861=>array(30,-23,523,881),7862=>array(15,-164,651,892),7863=>array(30,-187,523,734),7864=>array(80,-164,603,729),7865=>array(30,-187,503,539),7866=>array(80,0,603,976),7867=>array(30,-23,503,786),7868=>array(80,0,603,901),7869=>array(30,-23,503,703),7870=>array(80,0,630,1000),7871=>array(30,-23,542,876),7872=>array(42,0,603,1000),7873=>array(4,-23,503,876),7874=>array(80,0,607,1000),7875=>array(30,-23,532,864),7876=>array(80,0,603,1000),7877=>array(30,-23,503,865),7878=>array(80,-164,603,900),7879=>array(30,-187,503,731),7880=>array(83,0,236,976),7881=>array(58,0,211,771),7882=>array(95,-164,199,729),7883=>array(57,-164,161,729),7884=>array(40,-187,744,741),7885=>array(30,-187,504,539),7886=>array(40,-23,744,977),7887=>array(30,-23,504,776),7888=>array(40,-23,744,1000),7889=>array(30,-23,534,875),7890=>array(40,-23,744,1000),7891=>array(0,-23,504,876),7892=>array(40,-23,744,900),7893=>array(30,-23,559,774),7894=>array(40,-23,744,1000),7895=>array(30,-23,504,864),7896=>array(40,-187,744,900),7897=>array(30,-187,504,749),7898=>array(40,-23,790,900),7899=>array(30,-23,559,740),7900=>array(40,-23,790,900),7901=>array(30,-23,559,740),7902=>array(40,-23,790,976),7903=>array(30,-23,559,772),7904=>array(40,-23,790,884),7905=>array(30,-23,559,705),7906=>array(40,-187,790,796),7907=>array(30,-187,559,631),7908=>array(80,-187,640,729),7909=>array(60,-187,477,524),7910=>array(80,-23,640,963),7911=>array(60,-23,477,751),7912=>array(80,-23,771,900),7913=>array(60,-23,618,740),7914=>array(80,-23,771,900),7915=>array(60,-23,618,740),7916=>array(80,-23,771,941),7917=>array(60,-23,618,766),7918=>array(80,-23,771,881),7919=>array(60,-23,618,690),7920=>array(80,-187,771,856),7921=>array(60,-187,618,651),7922=>array(15,0,663,900),7923=>array(10,-218,468,740),7924=>array(15,-164,663,729),7925=>array(10,-218,468,524),7926=>array(15,0,663,949),7927=>array(10,-218,468,749),7928=>array(15,0,663,885),7929=>array(10,-218,468,688),7936=>array(30,-13,565,742),7937=>array(30,-13,565,740),7938=>array(30,-13,565,756),7939=>array(30,-13,565,756),7940=>array(30,-13,565,756),7941=>array(30,-13,565,756),7942=>array(30,-13,565,875),7943=>array(30,-13,565,875),7944=>array(15,0,651,741),7945=>array(12,0,648,741),7946=>array(-14,0,726,740),7947=>array(-13,0,737,747),7948=>array(-17,0,673,741),7949=>array(-19,0,680,741),7950=>array(-15,0,654,852),7951=>array(-27,0,648,855),7952=>array(30,-10,467,738),7953=>array(30,-10,467,739),7954=>array(30,-10,467,756),7955=>array(30,-10,467,756),7956=>array(30,-10,467,756),7957=>array(30,-10,467,756),7960=>array(-13,0,666,741),7961=>array(-18,0,649,741),7962=>array(-16,0,836,741),7963=>array(-15,0,818,741),7964=>array(-17,0,803,741),7965=>array(-15,0,815,741),7968=>array(15,-182,489,753),7969=>array(15,-182,489,756),7970=>array(15,-182,489,756),7971=>array(15,-182,489,756),7972=>array(15,-182,489,756),7973=>array(15,-182,489,756),7974=>array(15,-182,489,875),7975=>array(15,-182,489,875),7976=>array(-15,0,691,741),7977=>array(-9,0,697,741),7978=>array(-14,0,864,741),7979=>array(-8,0,866,741),7980=>array(-12,0,862,741),7981=>array(-12,0,865,741),7982=>array(-35,0,772,852),7983=>array(-35,0,772,853),7984=>array(44,-8,274,756),7985=>array(56,-8,274,756),7986=>array(-12,-8,294,756),7987=>array(-9,-8,294,756),7988=>array(-5,-8,289,756),7989=>array(-7,-8,296,756),7990=>array(-53,-8,274,875),7991=>array(-53,-8,274,875),7992=>array(-15,0,238,741),7993=>array(-11,0,237,741),7994=>array(-14,0,398,741),7995=>array(-15,0,401,741),7996=>array(-15,0,393,741),7997=>array(-13,0,400,741),7998=>array(-32,0,310,854),7999=>array(-34,0,306,858),8000=>array(30,-10,514,741),8001=>array(30,-10,514,741),8002=>array(30,-10,514,756),8003=>array(30,-10,514,756),8004=>array(30,-10,514,756),8005=>array(30,-10,514,756),8008=>array(-17,-23,741,744),8009=>array(-12,-23,750,747),8010=>array(-14,-23,956,741),8011=>array(-13,-23,953,741),8012=>array(-15,-23,853,741),8013=>array(-13,-23,863,741),8016=>array(60,-14,498,742),8017=>array(60,-14,498,739),8018=>array(60,-14,498,756),8019=>array(60,-14,498,756),8020=>array(60,-14,498,756),8021=>array(60,-14,498,756),8022=>array(60,-14,498,874),8023=>array(60,-14,498,875),8025=>array(-18,6,743,741),8027=>array(-17,6,911,741),8029=>array(-12,6,967,741),8031=>array(-17,6,859,855),8032=>array(30,-9,698,739),8033=>array(30,-9,698,738),8034=>array(30,-9,698,756),8035=>array(30,-9,698,756),8036=>array(30,-9,698,756),8037=>array(30,-9,698,756),8038=>array(30,-9,698,874),8039=>array(30,-9,698,874),8040=>array(-13,0,708,738),8041=>array(-15,0,713,741),8042=>array(-15,0,911,744),8043=>array(-17,0,909,744),8044=>array(-13,0,818,738),8045=>array(-17,0,857,733),8046=>array(-9,0,840,852),8047=>array(-13,0,840,854),8048=>array(30,-13,565,747),8049=>array(30,-13,565,747),8050=>array(30,-10,467,747),8051=>array(30,-10,467,747),8052=>array(15,-182,489,747),8053=>array(15,-182,489,747),8054=>array(0,-8,274,747),8055=>array(56,-8,274,747),8056=>array(30,-10,514,747),8057=>array(30,-10,514,747),8058=>array(60,-14,498,747),8059=>array(60,-14,498,747),8060=>array(30,-9,698,747),8061=>array(30,-9,698,747),8064=>array(30,-199,565,742),8065=>array(30,-199,565,740),8066=>array(30,-199,565,756),8067=>array(30,-199,565,756),8068=>array(30,-199,565,756),8069=>array(30,-199,565,756),8070=>array(30,-199,565,875),8071=>array(30,-199,565,875),8072=>array(15,0,815,741),8073=>array(12,0,813,741),8074=>array(-14,0,901,740),8075=>array(-13,0,901,747),8076=>array(-17,0,838,741),8077=>array(-19,0,845,741),8078=>array(-15,0,820,852),8079=>array(-27,0,812,855),8080=>array(15,-200,489,753),8081=>array(15,-200,489,756),8082=>array(15,-200,489,756),8083=>array(15,-200,489,756),8084=>array(15,-200,489,756),8085=>array(15,-200,489,756),8086=>array(15,-200,489,875),8087=>array(15,-199,489,875),8088=>array(-15,0,913,741),8089=>array(-9,0,916,741),8090=>array(-14,0,1089,741),8091=>array(-8,0,1094,741),8092=>array(-12,0,1084,741),8093=>array(-12,0,1087,741),8094=>array(-35,0,994,852),8095=>array(-35,0,997,853),8096=>array(30,-199,698,739),8097=>array(30,-199,698,738),8098=>array(30,-199,698,756),8099=>array(30,-199,698,756),8100=>array(30,-199,698,756),8101=>array(30,-199,698,756),8102=>array(30,-199,698,874),8103=>array(30,-199,698,874),8104=>array(-13,-1,919,738),8105=>array(-15,-1,919,741),8106=>array(-15,0,1115,744),8107=>array(-17,-1,1113,744),8108=>array(-13,0,1030,738),8109=>array(-17,0,1062,733),8110=>array(-9,-1,1047,852),8111=>array(-13,-1,1050,854),8112=>array(30,-13,565,734),8113=>array(30,-13,565,669),8114=>array(30,-199,565,747),8115=>array(30,-199,565,531),8116=>array(30,-199,565,747),8118=>array(30,-13,565,703),8119=>array(30,-199,565,703),8120=>array(15,0,651,899),8121=>array(15,0,651,871),8122=>array(-35,0,651,741),8123=>array(5,0,651,741),8124=>array(15,0,817,729),8125=>array(116,577,204,740),8126=>array(23,0,179,178),8127=>array(116,577,204,740),8128=>array(13,620,327,724),8129=>array(13,633,327,900),8130=>array(15,-200,489,747),8131=>array(15,-198,489,531),8132=>array(15,-199,489,747),8134=>array(15,-182,489,736),8135=>array(15,-200,489,736),8136=>array(-9,0,773,741),8137=>array(-29,0,712,741),8138=>array(16,0,831,741),8139=>array(6,0,812,741),8140=>array(80,0,860,729),8141=>array(82,577,388,740),8142=>array(66,577,360,740),8143=>array(13,569,327,874),8144=>array(-51,-8,274,734),8145=>array(-37,-8,274,669),8146=>array(-29,-8,298,765),8147=>array(-17,-8,310,760),8150=>array(-57,-8,274,703),8151=>array(-16,-8,298,876),8152=>array(-3,0,298,900),8153=>array(2,0,276,870),8154=>array(-27,0,301,741),8155=>array(-30,0,292,741),8157=>array(68,577,371,740),8158=>array(81,577,384,740),8159=>array(13,569,327,876),8160=>array(60,-14,498,734),8161=>array(60,-14,498,669),8162=>array(60,-14,498,765),8163=>array(60,-14,498,763),8164=>array(60,-200,544,741),8165=>array(60,-200,544,741),8166=>array(60,-14,498,703),8167=>array(60,-14,498,875),8168=>array(15,6,663,900),8169=>array(15,6,663,871),8170=>array(-38,6,813,741),8171=>array(-55,6,823,741),8172=>array(-13,0,679,741),8173=>array(34,620,361,778),8174=>array(34,620,361,778),8175=>array(32,592,241,740),8178=>array(30,-199,698,747),8179=>array(30,-199,698,526),8180=>array(30,-199,698,747),8182=>array(30,-9,698,703),8183=>array(30,-199,698,703),8184=>array(-65,-23,804,741),8185=>array(-22,-23,804,741),8186=>array(-57,0,787,733),8187=>array(-38,0,753,733),8188=>array(40,0,920,733),8189=>array(82,592,291,740),8190=>array(118,577,206,740),8208=>array(46,240,284,312),8209=>array(46,240,284,312),8210=>array(68,240,488,312),8211=>array(40,240,460,312),8212=>array(40,240,960,312),8213=>array(40,240,960,312),8214=>array(70,-14,250,676),8215=>array(-19,-278,581,-126),8216=>array(97,498,190,730),8217=>array(80,497,173,729),8218=>array(80,-128,173,104),8219=>array(97,497,190,729),8220=>array(89,498,340,730),8221=>array(80,497,333,729),8222=>array(80,-128,333,104),8223=>array(87,497,340,729),8224=>array(38,-177,513,709),8225=>array(38,-177,513,709),8226=>array(75,220,325,470),8227=>array(90,220,320,470),8228=>array(198,0,302,104),8229=>array(94,0,406,104),8230=>array(80,0,600,104),8231=>array(87,227,191,331),8240=>array(9,-22,993,738),8241=>array(9,-22,1353,738),8242=>array(49,438,226,716),8243=>array(49,438,437,716),8244=>array(49,438,648,716),8245=>array(49,438,226,716),8246=>array(49,438,437,716),8247=>array(49,438,648,716),8248=>array(9,-171,367,121),8249=>array(49,106,201,438),8250=>array(49,106,201,438),8251=>array(98,68,524,492),8252=>array(124,0,486,729),8253=>array(77,0,509,741),8254=>array(-22,752,556,806),8255=>array(59,-199,600,-28),8256=>array(59,574,600,745),8257=>array(35,-201,403,276),8258=>array(10,2,822,729),8259=>array(50,161,350,321),8260=>array(-178,-20,346,729),8261=>array(121,-212,276,729),8262=>array(31,-212,186,729),8263=>array(77,0,1065,741),8264=>array(77,0,764,741),8265=>array(124,0,787,741),8266=>array(46,-12,520,412),8267=>array(48,-177,522,729),8268=>array(31,74,506,544),8269=>array(32,74,506,544),8270=>array(40,2,343,290),8271=>array(63,-147,168,524),8272=>array(59,21,600,718),8273=>array(40,2,343,741),8274=>array(60,1,584,750),8275=>array(1,293,497,399),8276=>array(59,-204,600,-33),8277=>array(36,-14,751,701),8278=>array(60,2,455,580),8279=>array(49,438,839,716),8280=>array(60,0,662,690),8281=>array(60,2,665,709),8282=>array(60,3,164,786),8283=>array(60,-199,662,800),8284=>array(60,41,544,525),8285=>array(60,-1,164,800),8286=>array(60,2,164,797),8304=>array(26,377,324,815),8305=>array(42,390,98,864),8308=>array(20,390,337,815),8309=>array(18,376,326,815),8310=>array(24,376,327,815),8311=>array(22,390,327,815),8312=>array(22,376,328,815),8313=>array(23,376,326,815),8314=>array(17,426,333,742),8315=>array(11,560,339,606),8316=>array(11,518,339,676),8317=>array(111,289,253,900),8318=>array(78,289,220,900),8319=>array(39,390,311,741),8320=>array(26,-213,324,225),8321=>array(69,-200,230,225),8322=>array(19,-200,326,225),8323=>array(16,-214,322,225),8324=>array(20,-200,337,225),8325=>array(18,-214,326,225),8326=>array(24,-214,327,225),8327=>array(22,-200,327,225),8328=>array(22,-214,328,225),8329=>array(23,-214,326,225),8330=>array(17,-155,333,161),8331=>array(12,-23,340,23),8332=>array(12,-79,340,79),8333=>array(111,-300,253,311),8334=>array(76,-298,218,313),8336=>array(20,-207,341,159),8337=>array(21,-211,329,155),8338=>array(19,-211,328,155),8339=>array(6,-200,303,141),8340=>array(19,-210,327,156),8352=>array(38,0,593,731),8353=>array(38,-87,577,780),8354=>array(32,-23,569,741),8355=>array(44,0,542,729),8356=>array(26,-23,535,729),8357=>array(70,-89,762,626),8358=>array(71,0,659,729),8359=>array(91,-23,1241,729),8360=>array(80,-23,1144,729),8361=>array(50,0,821,729),8362=>array(60,0,795,600),8363=>array(54,1,530,799),8364=>array(36,-23,619,709),8365=>array(24,0,658,729),8366=>array(21,0,593,729),8367=>array(14,-200,1244,729),8368=>array(34,-200,551,727),8369=>array(39,0,666,729),8370=>array(90,-93,659,800),8371=>array(17,0,653,729),8372=>array(91,-23,579,741),8373=>array(33,-126,602,770),8376=>array(32,0,484,729),8377=>array(12,-7,487,729),8400=>array(-520,558,-18,748),8401=>array(-520,558,-18,748),8402=>array(-202,-14,-147,676),8403=>array(-227,-1,-167,535),8404=>array(-627,503,0,800),8405=>array(-627,503,0,800),8406=>array(-601,546,-9,889),8407=>array(-601,546,-9,889),8408=>array(-393,109,-99,402),8409=>array(-393,109,-65,440),8410=>array(-393,73,-62,401),8411=>array(-471,540,1,644),8412=>array(-593,582,12,687),8413=>array(-724,-201,276,799),8414=>array(-719,-193,270,796),8415=>array(-716,-190,270,796),8416=>array(-718,-198,270,790),8417=>array(-650,554,1,897),8420=>array(-1166,-146,-1,852),8421=>array(-701,-61,-13,749),8422=>array(-319,-14,-139,676),8423=>array(-432,90,72,638),8424=>array(-471,-161,1,-57),8425=>array(-464,503,0,687),8426=>array(-958,20,-48,546),8427=>array(-594,-99,74,591),8428=>array(-517,-245,-15,-55),8429=>array(-520,-242,-18,-52),8430=>array(-586,-286,6,-28),8431=>array(-601,-288,-9,-30),8432=>array(-301,566,-104,754),8448=>array(41,-20,819,741),8449=>array(41,-20,830,741),8450=>array(48,-23,677,741),8451=>array(30,-23,969,741),8452=>array(51,1,515,685),8453=>array(48,-20,765,741),8454=>array(48,-20,808,741),8455=>array(40,-23,613,741),8456=>array(43,-23,672,741),8457=>array(40,0,879,729),8459=>array(3,-22,1210,717),8460=>array(17,-111,591,718),8461=>array(46,0,601,729),8462=>array(28,0,532,729),8463=>array(86,0,590,729),8464=>array(8,-17,902,717),8465=>array(15,-87,591,699),8466=>array(41,-17,863,738),8467=>array(31,-11,454,726),8468=>array(5,-23,714,729),8469=>array(76,0,646,729),8470=>array(64,0,899,729),8471=>array(39,-14,761,708),8472=>array(52,-150,542,454),8473=>array(91,0,617,729),8474=>array(38,-59,742,741),8475=>array(0,-17,889,717),8476=>array(19,-8,685,741),8477=>array(93,0,679,729),8478=>array(93,-55,816,729),8479=>array(93,-104,679,894),8480=>array(33,181,998,743),8481=>array(27,0,1240,729),8482=>array(20,203,978,729),8483=>array(30,-104,645,894),8484=>array(28,0,583,729),8486=>array(40,0,717,733),8487=>array(29,-41,706,692),8488=>array(17,-140,488,705),8489=>array(12,-1,226,531),8490=>array(80,0,659,729),8491=>array(15,0,651,966),8492=>array(4,-14,898,708),8493=>array(17,-13,600,705),8494=>array(30,-23,503,539),8495=>array(31,-11,443,491),8496=>array(25,-8,691,708),8497=>array(11,-22,960,728),8498=>array(41,0,530,729),8499=>array(9,-36,1195,719),8501=>array(58,0,582,600),8502=>array(58,0,566,600),8503=>array(30,0,433,600),8504=>array(38,0,543,600),8505=>array(67,0,207,729),8506=>array(36,-20,836,684),8507=>array(40,0,1322,729),8508=>array(30,0,582,524),8510=>array(82,0,566,729),8511=>array(80,0,640,729),8513=>array(60,-23,725,741),8514=>array(80,0,533,729),8515=>array(80,0,533,729),8516=>array(11,0,659,729),8517=>array(61,0,728,729),8522=>array(27,1,491,711),8523=>array(30,-12,615,720),8525=>array(36,-20,1169,729),8526=>array(35,0,388,525),8531=>array(49,-20,828,729),8532=>array(25,-20,859,730),8533=>array(69,-20,863,730),8534=>array(30,-20,863,735),8535=>array(36,-20,853,730),8536=>array(30,-20,863,729),8537=>array(69,-20,854,730),8538=>array(28,-20,864,729),8539=>array(69,-20,855,730),8540=>array(26,-20,865,730),8541=>array(38,-20,855,729),8542=>array(52,-20,845,729),8543=>array(69,-20,671,730),8544=>array(100,0,194,729),8545=>array(100,0,472,729),8546=>array(100,0,750,729),8547=>array(100,0,908,729),8548=>array(15,0,630,729),8549=>array(15,0,861,729),8550=>array(15,0,1139,729),8551=>array(15,0,1417,729),8552=>array(100,0,920,729),8553=>array(15,0,642,729),8554=>array(15,0,861,729),8555=>array(15,0,1139,729),8556=>array(80,0,533,729),8557=>array(40,-23,669,741),8558=>array(80,0,658,729),8559=>array(80,0,766,729),8560=>array(66,0,150,729),8561=>array(66,0,372,729),8562=>array(66,0,594,729),8563=>array(66,0,708,729),8564=>array(10,0,486,524),8565=>array(10,0,650,729),8566=>array(10,0,872,729),8567=>array(10,0,1094,729),8568=>array(66,0,688,729),8569=>array(10,0,466,524),8570=>array(10,0,650,729),8571=>array(10,0,872,729),8572=>array(60,0,144,729),8573=>array(30,-23,476,539),8574=>array(30,-23,499,729),8575=>array(60,0,752,539),8592=>array(32,-15,942,511),8593=>array(45,0,571,910),8594=>array(49,-15,959,511),8595=>array(45,-22,571,888),8596=>array(24,-15,1024,511),8597=>array(261,-22,787,910),8598=>array(20,24,782,787),8599=>array(19,24,783,787),8600=>array(20,24,782,787),8601=>array(19,24,783,787),8612=>array(28,-18,939,514),8613=>array(73,-208,606,704),8614=>array(48,-18,959,514),8615=>array(73,-208,606,704),8617=>array(28,-15,942,511),8618=>array(45,-15,959,511),8628=>array(20,13,665,600),8629=>array(15,-16,602,629),8636=>array(32,220,942,511),8637=>array(32,-20,942,271),8638=>array(56,-158,348,753),8639=>array(35,-161,327,750),8640=>array(32,223,942,514),8641=>array(45,-12,955,279),8642=>array(56,-111,348,800),8643=>array(32,-110,324,801),8644=>array(32,-185,959,681),8645=>array(20,-219,886,708),8646=>array(32,-185,959,682),8647=>array(32,-181,942,800),8648=>array(14,-146,996,764),8649=>array(42,-181,952,800),8650=>array(14,-146,996,764),8651=>array(32,-112,955,613),8652=>array(32,-107,942,600),8656=>array(30,-15,939,513),8657=>array(39,2,567,911),8658=>array(45,-20,954,508),8659=>array(44,-19,572,890),8660=>array(27,-20,1023,510),8661=>array(39,-97,567,801),8668=>array(32,-8,1071,518),8669=>array(32,-8,1071,518),8704=>array(17,0,653,729),8705=>array(88,-139,588,861),8706=>array(43,-23,513,709),8707=>array(80,0,586,729),8708=>array(80,-100,586,800),8709=>array(40,-14,762,710),8710=>array(10,0,701,729),8711=>array(10,0,701,729),8712=>array(55,0,530,616),8713=>array(55,-62,530,687),8714=>array(45,1,505,469),8715=>array(55,-1,530,615),8716=>array(55,-60,530,689),8717=>array(80,-1,540,467),8718=>array(97,65,397,665),8719=>array(85,-100,697,815),8720=>array(85,-100,697,815),8721=>array(40,-100,691,824),8722=>array(50,197,534,267),8723=>array(50,-11,534,623),8724=>array(50,1,534,639),8725=>array(-4,-20,520,729),8726=>array(40,-20,352,544),8727=>array(53,59,447,474),8728=>array(63,91,436,463),8729=>array(150,180,400,430),8730=>array(7,-36,512,916),8731=>array(7,-36,512,916),8732=>array(7,-36,512,916),8733=>array(25,124,625,404),8734=>array(25,124,689,404),8735=>array(62,0,587,525),8736=>array(26,0,738,712),8737=>array(26,-100,738,562),8738=>array(50,-24,559,579),8739=>array(70,-14,130,676),8740=>array(30,-14,258,676),8741=>array(70,-14,250,676),8742=>array(30,-14,310,676),8743=>array(30,0,578,448),8744=>array(30,0,578,448),8745=>array(40,-1,732,508),8746=>array(40,-17,732,492),8747=>array(60,-246,415,767),8748=>array(60,-246,655,767),8749=>array(60,-246,855,767),8750=>array(55,-246,414,767),8751=>array(50,-252,721,767),8756=>array(144,12,656,464),8757=>array(144,12,656,464),8758=>array(73,0,177,524),8759=>array(73,0,547,524),8760=>array(50,197,534,494),8761=>array(50,0,738,494),8762=>array(47,-22,544,494),8763=>array(33,40,466,525),8764=>array(33,206,466,376),8765=>array(35,206,468,376),8766=>array(75,122,498,394),8768=>array(37,-9,207,424),8769=>array(51,90,484,390),8770=>array(52,36,536,372),8771=>array(50,109,534,445),8772=>array(40,4,544,486),8773=>array(50,36,534,536),8774=>array(50,-19,534,536),8775=>array(50,4,534,544),8776=>array(31,112,466,486),8777=>array(33,44,468,526),8778=>array(50,0,534,569),8779=>array(33,52,466,561),8780=>array(50,48,534,538),8781=>array(27,51,528,466),8784=>array(50,111,534,544),8785=>array(50,-69,534,525),8786=>array(50,-72,534,526),8787=>array(50,-66,534,524),8788=>array(47,-60,685,524),8789=>array(50,-62,705,524),8791=>array(50,114,534,671),8792=>array(50,114,534,622),8793=>array(50,114,534,677),8794=>array(50,114,534,679),8795=>array(50,114,534,742),8796=>array(50,114,534,772),8797=>array(50,114,536,743),8798=>array(50,114,534,710),8799=>array(50,114,534,747),8800=>array(50,-20,534,472),8801=>array(50,89,534,449),8802=>array(40,-20,544,544),8803=>array(60,-56,544,524),8804=>array(50,-11,539,639),8805=>array(50,-11,541,639),8806=>array(50,-122,542,664),8807=>array(50,-124,539,671),8810=>array(45,-9,911,474),8811=>array(45,-9,911,474),8813=>array(27,-20,528,544),8814=>array(45,-20,534,544),8815=>array(45,-68,534,496),8816=>array(45,-78,534,690),8817=>array(45,-78,534,690),8818=>array(50,-44,539,639),8819=>array(50,-44,539,639),8822=>array(50,-198,542,641),8823=>array(50,-199,542,641),8826=>array(45,-9,534,474),8827=>array(45,-9,534,474),8828=>array(49,-1,538,603),8829=>array(50,-1,541,604),8830=>array(45,-75,534,555),8831=>array(45,-75,534,550),8832=>array(45,-38,534,526),8833=>array(45,-38,534,526),8834=>array(55,0,530,600),8835=>array(55,0,530,600),8836=>array(55,-59,530,690),8837=>array(55,-66,530,683),8838=>array(36,-22,530,698),8839=>array(50,-21,534,695),8840=>array(50,-79,534,750),8841=>array(50,-79,534,750),8844=>array(40,-17,732,492),8845=>array(40,-17,732,492),8846=>array(40,-17,732,493),8847=>array(52,8,556,506),8848=>array(80,1,584,499),8849=>array(66,2,570,648),8850=>array(66,0,570,660),8851=>array(69,1,567,505),8852=>array(69,1,567,505),8853=>array(43,-15,733,675),8854=>array(43,-15,733,675),8855=>array(43,-15,733,675),8856=>array(43,-15,733,675),8857=>array(43,-15,733,675),8858=>array(43,-15,733,675),8859=>array(43,-15,733,675),8860=>array(43,-15,733,675),8861=>array(43,-15,733,675),8866=>array(76,-1,625,546),8867=>array(31,-1,580,546),8868=>array(15,-54,652,620),8869=>array(15,0,652,674),8870=>array(76,0,448,546),8871=>array(76,-20,468,548),8872=>array(76,-20,688,548),8882=>array(62,6,574,508),8883=>array(62,6,574,508),8884=>array(62,33,574,654),8885=>array(62,37,574,659),8891=>array(20,45,568,607),8892=>array(30,0,578,596),8893=>array(18,0,566,612),8896=>array(30,0,714,668),8897=>array(30,0,714,668),8898=>array(61,-35,703,796),8899=>array(61,-82,703,749),8901=>array(87,302,211,427),8902=>array(64,109,406,434),8904=>array(62,6,648,508),8909=>array(50,156,534,475),8910=>array(50,14,533,503),8911=>array(51,20,534,509),8918=>array(45,21,538,504),8919=>array(26,22,519,505),8920=>array(48,1,1172,484),8921=>array(33,1,1157,484),8928=>array(40,-56,544,648),8929=>array(40,-56,544,648),8930=>array(66,-72,570,750),8931=>array(66,-72,570,750),8934=>array(50,-190,539,596),8935=>array(50,-190,539,557),8936=>array(45,-190,534,554),8937=>array(45,-190,534,550),8942=>array(82,44,186,815),8943=>array(129,255,899,359),8944=>array(129,45,898,815),8945=>array(128,44,898,815),8960=>array(39,-24,781,719),8968=>array(98,0,382,729),8969=>array(72,0,357,729),8970=>array(74,0,358,729),8971=>array(98,0,383,729),8976=>array(40,86,544,375),8992=>array(150,-200,374,900),8993=>array(10,-200,234,900),8994=>array(59,158,600,329),8995=>array(59,155,600,326),9001=>array(25,-198,314,746),9002=>array(15,-198,304,746),9115=>array(40,-200,340,782),9116=>array(40,-200,122,800),9117=>array(40,-182,340,800),9118=>array(44,-200,344,782),9119=>array(262,-200,344,800),9120=>array(44,-181,344,801),9121=>array(88,-200,333,846),9122=>array(88,-200,164,800),9123=>array(88,-247,333,800),9124=>array(55,-200,300,847),9125=>array(224,-200,300,800),9126=>array(55,-246,300,800),9127=>array(121,-200,276,739),9128=>array(50,-200,205,800),9129=>array(128,1,283,800),9130=>array(128,-200,205,800),9131=>array(50,-200,205,739),9132=>array(128,-200,283,800),9133=>array(50,1,205,800),9134=>array(150,-200,234,800),9138=>array(56,-200,749,730),9139=>array(56,-130,749,800),9216=>array(64,-1,735,686),9217=>array(51,0,734,689),9218=>array(51,0,734,689),9219=>array(68,0,734,687),9220=>array(68,-1,735,687),9221=>array(58,-18,746,687),9222=>array(52,0,722,686),9223=>array(61,-1,725,686),9224=>array(211,96,622,624),9225=>array(186,101,649,623),9226=>array(221,100,616,625),9227=>array(190,100,649,624),9228=>array(230,100,606,624),9229=>array(187,102,638,623),9230=>array(216,98,632,625),9231=>array(221,100,514,623),9232=>array(76,0,722,685),9233=>array(86,0,655,685),9234=>array(86,0,711,685),9235=>array(86,-4,695,685),9236=>array(86,1,713,685),9237=>array(64,0,722,686),9238=>array(71,-1,714,689),9239=>array(78,0,717,687),9240=>array(61,-1,729,688),9241=>array(197,108,633,616),9242=>array(68,-1,727,689),9243=>array(88,-7,741,686),9244=>array(220,97,637,624),9245=>array(188,96,637,621),9246=>array(228,95,637,624),9247=>array(204,98,637,627),9248=>array(219,98,619,622),9249=>array(86,-1,714,685),9250=>array(10,-23,542,729),9251=>array(18,0,482,184),9252=>array(109,0,689,698),9253=>array(0,0,800,800),9254=>array(177,0,609,741),9312=>array(35,-13,754,706),9313=>array(35,-13,754,706),9314=>array(35,-13,754,706),9315=>array(35,-13,754,706),9316=>array(35,-13,754,706),9317=>array(35,-13,754,706),9318=>array(35,-13,754,706),9319=>array(35,-13,754,706),9320=>array(35,-13,754,706),9321=>array(35,-13,754,706),9472=>array(0,260,1000,340),9473=>array(0,220,1000,380),9474=>array(460,-200,540,800),9475=>array(420,-200,580,800),9476=>array(0,260,1000,340),9477=>array(0,220,1000,380),9478=>array(460,-200,540,800),9479=>array(420,-200,580,800),9480=>array(0,260,1000,340),9481=>array(0,220,1000,380),9482=>array(460,-200,540,800),9483=>array(420,-200,580,800),9484=>array(460,-200,1000,340),9485=>array(460,-200,1000,380),9486=>array(420,-200,1000,340),9487=>array(420,-200,1000,380),9488=>array(0,-200,540,340),9489=>array(0,-200,540,380),9490=>array(0,-200,580,340),9491=>array(0,-200,580,380),9492=>array(460,260,1000,800),9493=>array(460,220,1000,800),9494=>array(420,260,1000,800),9495=>array(420,220,1000,800),9496=>array(0,260,540,800),9497=>array(0,220,540,800),9498=>array(0,260,580,800),9499=>array(0,220,580,800),9500=>array(460,-200,1000,800),9501=>array(460,-200,1000,800),9502=>array(420,-200,1000,800),9503=>array(420,-200,1000,800),9504=>array(420,-200,1000,800),9505=>array(420,-200,1000,800),9506=>array(420,-200,1000,800),9507=>array(420,-200,1000,800),9508=>array(0,-200,540,800),9509=>array(0,-200,540,800),9510=>array(0,-200,580,800),9511=>array(0,-200,580,800),9512=>array(420,-200,1000,800),9513=>array(0,-200,580,800),9514=>array(0,-200,580,800),9515=>array(0,-200,580,800),9516=>array(0,-200,1000,340),9517=>array(0,-200,1000,380),9518=>array(0,-200,1000,380),9519=>array(0,-200,1000,380),9520=>array(0,-200,1000,340),9521=>array(0,-200,1000,380),9522=>array(0,-200,1000,380),9523=>array(0,-200,1000,380),9524=>array(0,260,1000,800),9525=>array(0,220,1000,800),9526=>array(0,220,1000,800),9527=>array(0,220,1000,800),9528=>array(0,260,1000,800),9529=>array(0,220,1000,800),9530=>array(0,220,1000,800),9531=>array(0,220,1000,800),9532=>array(0,-200,1000,800),9533=>array(0,-200,1000,800),9534=>array(0,-200,1000,800),9535=>array(0,-200,1000,800),9536=>array(0,-200,1000,800),9537=>array(0,-200,1000,800),9538=>array(0,-200,1000,800),9539=>array(0,-200,1000,800),9540=>array(0,-200,1000,800),9541=>array(0,-200,1000,800),9542=>array(0,-200,1000,800),9543=>array(0,-200,1000,800),9544=>array(0,-200,1000,800),9545=>array(0,-200,1000,800),9546=>array(0,-200,1000,800),9547=>array(0,-200,1000,800),9552=>array(0,180,1000,420),9553=>array(380,-200,620,800),9554=>array(460,-200,1000,420),9555=>array(380,-200,1000,340),9556=>array(380,-200,1000,420),9557=>array(0,-200,540,420),9558=>array(0,-200,620,340),9559=>array(0,-200,620,420),9560=>array(460,180,1000,800),9561=>array(380,260,1000,800),9562=>array(380,180,1000,800),9563=>array(0,180,540,800),9564=>array(0,260,620,800),9565=>array(0,180,620,800),9566=>array(460,-200,1000,800),9567=>array(380,-200,1000,800),9568=>array(380,-200,1000,800),9569=>array(0,-200,540,800),9570=>array(0,-200,620,800),9571=>array(0,-200,620,800),9572=>array(0,-200,1000,420),9573=>array(0,-200,1000,340),9574=>array(0,-200,1000,420),9575=>array(0,180,1000,800),9576=>array(0,260,1000,800),9577=>array(0,180,1000,800),9578=>array(0,-200,1000,800),9579=>array(0,-200,1000,800),9580=>array(0,-200,1000,800),9600=>array(0,300,1000,800),9601=>array(0,-200,1000,-75),9602=>array(0,-200,1000,50),9603=>array(0,-200,1000,175),9604=>array(0,-200,1000,300),9605=>array(0,-200,1000,425),9606=>array(0,-200,1000,550),9607=>array(0,-200,1000,675),9608=>array(0,-200,1000,800),9609=>array(0,-200,875,800),9610=>array(0,-200,795,800),9611=>array(0,-200,625,800),9612=>array(0,-200,500,800),9613=>array(0,-200,375,800),9614=>array(0,-200,250,800),9615=>array(0,-200,125,800),9616=>array(500,-200,1000,800),9617=>array(0,-200,950,750),9618=>array(0,-200,1000,750),9619=>array(0,-200,1000,800),9620=>array(0,675,1000,800),9621=>array(875,-200,1000,800),9622=>array(0,-200,500,300),9623=>array(500,-200,1000,300),9624=>array(500,300,1000,800),9625=>array(0,-200,1000,800),9626=>array(0,-200,1000,800),9627=>array(0,-200,1000,800),9628=>array(0,-200,1000,800),9629=>array(0,300,500,800),9630=>array(0,-200,1000,800),9631=>array(0,-200,1000,800),9632=>array(50,0,750,700),9633=>array(50,0,750,700),9634=>array(50,1,750,700),9635=>array(50,0,750,700),9636=>array(50,0,750,700),9637=>array(50,0,750,700),9638=>array(50,0,750,700),9639=>array(50,0,750,700),9640=>array(50,0,750,700),9641=>array(50,0,750,700),9642=>array(224,262,400,437),9643=>array(224,262,400,437),9644=>array(100,225,700,525),9645=>array(100,225,700,525),9646=>array(250,65,550,665),9647=>array(250,67,550,667),9648=>array(0,108,1000,608),9649=>array(0,108,1000,608),9650=>array(35,0,858,706),9651=>array(35,0,858,706),9652=>array(128,176,540,529),9653=>array(128,176,541,530),9654=>array(94,-58,800,765),9655=>array(94,-58,800,765),9656=>array(180,134,533,546),9657=>array(158,147,512,560),9658=>array(94,147,800,559),9659=>array(93,147,800,559),9660=>array(35,0,858,706),9661=>array(35,0,858,706),9662=>array(129,173,541,526),9663=>array(128,176,541,530),9664=>array(94,-58,800,764),9665=>array(94,-58,800,764),9666=>array(136,132,489,544),9667=>array(158,146,512,559),9668=>array(94,132,800,544),9669=>array(93,147,800,559),9670=>array(36,-13,754,705),9671=>array(36,-13,754,705),9672=>array(36,-13,754,705),9673=>array(39,-14,761,708),9674=>array(22,0,468,744),9675=>array(39,-14,761,708),9676=>array(39,-14,761,708),9677=>array(39,-14,761,708),9678=>array(39,-14,761,708),9679=>array(39,-14,761,708),9680=>array(39,-14,761,708),9681=>array(39,-14,761,708),9682=>array(39,-14,761,708),9683=>array(39,-14,761,708),9684=>array(39,-14,761,708),9685=>array(39,-14,761,708),9686=>array(39,-14,406,708),9687=>array(394,-14,761,708),9688=>array(0,0,400,729),9689=>array(50,0,750,700),9690=>array(50,347,750,700),9691=>array(50,0,750,353),9692=>array(39,349,406,708),9693=>array(402,341,761,708),9694=>array(394,0,761,359),9695=>array(39,0,398,367),9696=>array(39,349,761,708),9697=>array(39,0,761,359),9698=>array(150,0,850,700),9699=>array(150,0,850,700),9700=>array(150,0,850,700),9701=>array(150,0,850,700),9702=>array(75,220,325,470),9703=>array(50,0,750,700),9704=>array(50,0,750,700),9705=>array(50,0,750,700),9706=>array(50,0,750,700),9707=>array(50,0,750,700),9708=>array(35,0,858,706),9709=>array(35,0,858,706),9710=>array(35,0,858,706),9711=>array(10,-201,1010,799),9712=>array(50,0,750,700),9713=>array(50,1,750,701),9714=>array(50,0,750,700),9715=>array(50,1,750,701),9716=>array(39,-14,761,708),9717=>array(39,-14,761,708),9718=>array(39,-14,761,708),9719=>array(39,-14,761,708),9720=>array(157,106,644,591),9721=>array(156,104,641,591),9722=>array(156,3,641,490),9723=>array(158,106,643,591),9724=>array(157,106,642,591),9725=>array(200,124,600,524),9726=>array(200,124,600,524),9727=>array(156,106,643,591),9772=>array(66,-193,863,800),9773=>array(35,-2,760,700),9785=>array(35,0,735,700),9786=>array(35,0,735,700),9824=>array(34,0,591,705),9825=>array(35,-14,659,704),9826=>array(34,-14,560,705),9827=>array(35,0,741,705),9828=>array(34,0,591,705),9829=>array(35,-14,659,704),9830=>array(34,-14,560,705),9831=>array(35,0,741,705),9833=>array(55,0,276,694),9834=>array(55,0,498,694),9835=>array(55,0,665,703),9836=>array(55,0,665,703),9837=>array(66,-21,368,730),9838=>array(60,-214,330,712),9839=>array(50,-197,365,762),10048=>array(34,-295,1125,800),10752=>array(10,-201,1010,799),10753=>array(10,-201,1010,799),10754=>array(12,-199,1011,801),10755=>array(61,-82,703,749),10756=>array(61,-82,703,749),10761=>array(40,-20,540,483),11568=>array(40,-8,312,264),11569=>array(56,-16,816,744),11570=>array(56,-16,816,744),11571=>array(72,0,648,728),11572=>array(72,0,648,728),11573=>array(72,0,648,728),11574=>array(48,0,496,738),11575=>array(48,0,661,728),11576=>array(48,0,661,728),11577=>array(72,0,648,728),11578=>array(72,0,648,728),11579=>array(54,-8,542,734),11580=>array(72,0,626,728),11581=>array(72,0,670,728),11582=>array(72,-10,520,738),11583=>array(72,0,670,728),11584=>array(56,-16,816,744),11585=>array(56,-16,816,744),11586=>array(72,-10,220,738),11587=>array(48,0,624,728),11588=>array(60,0,636,728),11589=>array(72,0,648,728),11590=>array(52,64,492,512),11591=>array(72,0,670,728),11592=>array(54,290,702,438),11593=>array(58,0,542,728),11594=>array(48,0,624,728),11595=>array(60,-16,828,744),11596=>array(54,0,782,728),11597=>array(72,0,452,728),11598=>array(72,0,648,728),11599=>array(90,0,170,728),11600=>array(54,0,782,728),11601=>array(38,-224,186,728),11602=>array(63,-16,615,728),11603=>array(54,-8,326,736),11604=>array(56,-16,816,744),11605=>array(55,-18,816,743),11606=>array(72,0,648,728),11607=>array(60,-10,208,738),11608=>array(56,-10,584,738),11609=>array(56,-16,816,744),11610=>array(55,-18,816,743),11611=>array(56,-16,702,744),11612=>array(54,0,370,728),11613=>array(72,0,648,728),11614=>array(56,-16,702,744),11615=>array(72,0,648,728),11616=>array(48,0,661,728),11617=>array(72,0,648,728),11618=>array(60,5,481,728),11619=>array(54,0,774,728),11620=>array(72,0,408,728),11621=>array(54,0,774,728),11622=>array(49,-13,670,653),11623=>array(46,240,572,312),11631=>array(72,444,370,728),11798=>array(50,-15,539,624),11799=>array(46,107,284,458),11800=>array(63,-24,495,717),11802=>array(25,240,308,716),11803=>array(33,268,466,676),11806=>array(33,268,466,540),11807=>array(33,146,466,438),11816=>array(53,-212,422,729),11817=>array(38,-212,407,729),11818=>array(22,15,627,593),11819=>array(22,82,601,478),11820=>array(22,38,601,434),11821=>array(24,95,626,674),11822=>array(57,0,489,741),11824=>array(75,220,325,470),42240=>array(70,0,628,729),42241=>array(70,0,628,729),42242=>array(70,-61,606,729),42243=>array(70,0,730,729),42244=>array(70,0,730,729),42245=>array(70,-12,780,741),42246=>array(70,-12,860,741),42247=>array(70,0,650,729),42248=>array(70,0,686,729),42249=>array(70,0,680,729),42250=>array(70,0,680,729),42251=>array(70,0,680,729),42252=>array(70,0,470,741),42253=>array(70,0,470,741),42254=>array(70,0,710,729),42255=>array(70,0,710,729),42256=>array(70,-12,1012,729),42257=>array(70,-12,1012,729),42258=>array(70,0,710,729),42259=>array(70,-174,710,729),42260=>array(70,0,650,729),42261=>array(70,-12,704,729),42262=>array(70,0,530,729),42263=>array(70,0,530,729),42264=>array(70,0,530,729),42265=>array(70,0,530,729),42266=>array(70,74,913,639),42267=>array(70,74,913,639),42268=>array(70,62,679,642),42269=>array(70,62,679,642),42270=>array(70,0,1010,729),42271=>array(70,0,820,729),42272=>array(70,0,799,729),42273=>array(70,0,650,729),42274=>array(70,-20,669,729),42275=>array(70,0,913,729),42276=>array(70,0,710,729),42277=>array(70,0,770,729),42278=>array(70,0,710,729),42279=>array(70,-15,354,744),42280=>array(70,-85,770,729),42281=>array(70,-85,897,729),42282=>array(70,0,392,729),42283=>array(70,0,882,729),42284=>array(70,0,665,729),42285=>array(70,0,665,729),42286=>array(70,45,710,685),42287=>array(70,0,680,729),42288=>array(70,0,799,729),42289=>array(70,0,702,729),42290=>array(70,-60,702,789),42291=>array(70,-20,606,729),42292=>array(70,-20,692,729),42293=>array(70,0,604,729),42294=>array(70,0,604,729),42295=>array(70,191,418,539),42296=>array(70,-174,534,539),42297=>array(70,191,752,539),42298=>array(70,0,989,729),42299=>array(70,0,781,729),42300=>array(70,0,781,729),42301=>array(70,0,619,730),42302=>array(70,0,774,730),42303=>array(70,0,638,729),42304=>array(70,158,837,395),42305=>array(70,158,837,570),42306=>array(70,0,837,491),42307=>array(70,0,542,731),42308=>array(70,0,542,731),42309=>array(70,-12,770,729),42310=>array(70,0,705,729),42311=>array(70,0,474,729),42312=>array(70,-12,704,729),42313=>array(70,0,470,741),42314=>array(70,74,634,639),42315=>array(70,-48,653,639),42316=>array(70,0,817,729),42317=>array(70,0,817,699),42318=>array(70,-20,606,729),42319=>array(70,0,747,729),42320=>array(70,0,692,729),42321=>array(70,0,817,729),42322=>array(70,0,754,729),42323=>array(70,0,820,729),42324=>array(70,0,635,729),42325=>array(70,45,710,685),42326=>array(70,0,635,729),42327=>array(70,0,463,729),42328=>array(70,0,453,729),42329=>array(70,0,624,729),42330=>array(70,0,702,729),42331=>array(70,0,702,729),42332=>array(70,0,702,729),42333=>array(70,0,822,729),42334=>array(70,0,641,729),42335=>array(70,-192,641,729),42336=>array(70,0,762,729),42337=>array(70,0,762,729),42338=>array(70,-14,874,741),42339=>array(70,-14,874,741),42340=>array(70,0,762,729),42341=>array(70,-46,858,776),42342=>array(70,0,673,729),42343=>array(70,0,665,729),42344=>array(70,0,661,729),42345=>array(70,-20,712,729),42346=>array(70,0,525,729),42347=>array(70,-10,820,739),42348=>array(70,0,610,729),42349=>array(70,0,817,729),42350=>array(70,0,745,728),42351=>array(70,0,440,729),42352=>array(70,0,778,729),42353=>array(70,0,630,730),42354=>array(70,0,630,730),42355=>array(70,0,630,730),42356=>array(70,0,654,645),42357=>array(70,0,654,645),42358=>array(70,0,563,729),42359=>array(70,0,563,729),42360=>array(70,-1,743,738),42361=>array(70,241,764,489),42362=>array(70,0,555,729),42363=>array(70,0,817,729),42364=>array(70,0,522,729),42365=>array(70,0,702,729),42366=>array(70,0,702,729),42367=>array(70,0,569,729),42368=>array(70,0,569,729),42369=>array(70,0,817,729),42370=>array(70,0,817,729),42371=>array(70,-12,647,729),42372=>array(70,-174,647,729),42373=>array(70,0,716,729),42374=>array(70,-12,821,729),42375=>array(70,0,710,729),42376=>array(70,0,771,729),42377=>array(70,0,430,729),42378=>array(70,0,722,729),42379=>array(70,0,452,729),42380=>array(70,0,452,729),42381=>array(70,0,577,729),42382=>array(70,0,291,729),42383=>array(70,0,745,728),42384=>array(70,0,780,728),42385=>array(70,0,613,729),42386=>array(70,174,764,556),42387=>array(70,-12,828,729),42388=>array(70,0,452,729),42389=>array(70,0,750,729),42390=>array(70,0,750,729),42391=>array(70,0,738,729),42392=>array(70,66,794,666),42393=>array(70,0,702,729),42394=>array(70,0,738,729),42395=>array(70,0,799,729),42396=>array(70,0,830,729),42397=>array(70,0,774,729),42398=>array(70,0,774,729),42399=>array(70,0,742,727),42400=>array(70,0,742,727),42401=>array(70,0,742,727),42402=>array(70,0,860,729),42403=>array(70,0,920,729),42404=>array(70,0,470,741),42405=>array(70,0,538,741),42406=>array(70,0,560,729),42407=>array(70,0,840,729),42408=>array(70,60,617,560),42409=>array(70,-174,617,560),42410=>array(70,60,674,560),42411=>array(70,0,617,560),42412=>array(70,0,654,729),42413=>array(70,0,672,729),42414=>array(70,0,654,729),42415=>array(70,0,672,729),42416=>array(70,85,674,560),42417=>array(70,85,674,560),42418=>array(70,85,674,560),42419=>array(70,85,674,560),42420=>array(70,45,710,685),42421=>array(70,0,470,741),42422=>array(70,0,470,741),42423=>array(70,0,525,729),42424=>array(70,0,670,729),42425=>array(70,-12,550,729),42426=>array(70,0,702,729),42427=>array(70,0,844,729),42428=>array(70,0,844,729),42429=>array(70,0,787,729),42430=>array(70,0,730,729),42431=>array(70,0,702,729),42432=>array(70,0,817,729),42433=>array(70,0,920,505),42434=>array(70,0,935,729),42435=>array(70,0,729,729),42436=>array(70,0,729,729),42437=>array(70,0,878,729),42438=>array(70,0,878,729),42439=>array(70,30,836,685),42440=>array(70,-44,974,729),42441=>array(70,0,530,729),42442=>array(70,0,530,729),42443=>array(70,0,504,729),42444=>array(70,-12,672,729),42445=>array(70,0,504,729),42446=>array(70,-12,672,729),42447=>array(70,0,430,729),42448=>array(70,-174,534,729),42449=>array(70,0,634,729),42450=>array(70,0,634,729),42451=>array(70,0,676,729),42452=>array(70,0,750,729),42453=>array(70,0,661,729),42454=>array(70,0,735,729),42455=>array(70,0,536,729),42456=>array(70,0,656,729),42457=>array(70,0,656,729),42458=>array(70,0,430,729),42459=>array(70,-93,743,728),42460=>array(70,0,869,570),42461=>array(70,51,828,721),42462=>array(70,0,590,729),42463=>array(70,0,563,729),42464=>array(70,0,844,729),42465=>array(70,0,619,729),42466=>array(70,0,1161,500),42467=>array(70,0,714,729),42468=>array(70,0,640,729),42469=>array(70,0,912,729),42470=>array(70,0,634,729),42471=>array(70,0,712,729),42472=>array(70,0,521,730),42473=>array(70,0,700,730),42474=>array(70,0,550,729),42475=>array(70,0,550,729),42476=>array(70,225,860,505),42477=>array(70,129,860,505),42478=>array(70,174,860,556),42479=>array(70,0,715,729),42480=>array(70,0,715,729),42481=>array(70,-1,743,738),42482=>array(70,-1,743,738),42483=>array(70,0,901,729),42484=>array(70,0,901,729),42485=>array(70,0,651,729),42486=>array(70,0,731,729),42487=>array(70,0,512,729),42488=>array(70,-174,534,729),42489=>array(70,0,548,729),42490=>array(70,0,512,729),42491=>array(70,0,989,729),42492=>array(70,0,989,729),42493=>array(70,0,989,729),42494=>array(70,0,989,729),42495=>array(70,0,650,729),42496=>array(70,0,719,729),42497=>array(70,0,653,729),42498=>array(70,0,651,729),42499=>array(70,0,702,729),42500=>array(70,0,702,729),42501=>array(70,0,702,729),42502=>array(70,0,702,729),42503=>array(70,0,702,729),42504=>array(70,0,550,729),42505=>array(70,0,564,729),42506=>array(70,0,736,729),42507=>array(70,-20,755,729),42508=>array(70,185,600,545),42509=>array(70,0,451,380),42510=>array(70,0,442,352),42511=>array(70,-6,1064,322),42512=>array(70,0,1254,729),42513=>array(70,0,702,729),42514=>array(70,0,1021,730),42515=>array(70,0,375,729),42516=>array(70,0,741,729),42517=>array(70,0,706,729),42518=>array(70,0,544,729),42519=>array(70,0,650,729),42520=>array(70,0,832,745),42521=>array(70,0,695,729),42522=>array(70,-71,850,800),42523=>array(70,-12,954,729),42524=>array(70,0,665,729),42525=>array(70,0,672,729),42526=>array(70,0,746,729),42527=>array(70,0,645,741),42528=>array(70,0,622,729),42529=>array(70,0,130,729),42530=>array(70,0,607,741),42531=>array(70,0,700,742),42532=>array(70,0,570,729),42533=>array(70,0,525,729),42534=>array(70,0,456,729),42535=>array(70,0,607,741),42536=>array(70,0,430,668),42537=>array(70,0,645,741),42538=>array(70,0,1073,728),42539=>array(70,-2,490,741),42888=>array(23,-74,310,76),42889=>array(56,0,160,524),42890=>array(50,111,292,353),42891=>array(50,303,144,770),42892=>array(50,462,144,770),42922=>array(40,0,819,729),64256=>array(18,0,475,732),64257=>array(12,0,388,732),64258=>array(18,0,395,732),64259=>array(18,0,580,732),64260=>array(18,0,575,732),64261=>array(18,-23,496,732),64275=>array(65,-10,939,744),64276=>array(65,-11,979,744),64277=>array(65,-200,977,744),64278=>array(65,-200,972,716),64279=>array(65,-200,1191,744),64285=>array(58,147,145,600),64286=>array(0,660,306,813),64287=>array(56,149,343,600),64288=>array(37,0,531,600),64289=>array(58,0,832,600),64290=>array(38,0,793,600),64291=>array(63,0,820,600),64292=>array(57,-1,766,600),64293=>array(37,0,795,749),64294=>array(63,0,821,600),64295=>array(37,0,745,600),64296=>array(35,0,885,600),64297=>array(50,197,534,474),64298=>array(60,0,720,711),64299=>array(60,0,720,711),64300=>array(60,0,720,711),64301=>array(60,0,720,711),64302=>array(58,-131,582,600),64303=>array(58,-248,582,600),64304=>array(58,0,582,600),64305=>array(58,0,566,600),64306=>array(30,0,433,600),64307=>array(38,0,543,600),64308=>array(63,0,570,600),64309=>array(33,0,229,600),64310=>array(29,0,316,600),64312=>array(61,0,570,600),64313=>array(7,286,215,600),64314=>array(38,-200,474,600),64315=>array(57,0,516,600),64316=>array(37,0,545,749),64318=>array(48,0,570,600),64320=>array(51,0,326,600),64321=>array(61,0,569,600),64323=>array(57,-200,523,600),64324=>array(63,0,533,600),64326=>array(51,0,533,600),64327=>array(62,-200,550,600),64328=>array(37,0,495,600),64329=>array(60,0,720,600),64330=>array(35,0,635,600),64331=>array(62,0,149,731),64332=>array(58,0,566,731),64333=>array(57,0,516,731),64334=>array(63,0,533,731),64335=>array(72,0,582,749),65532=>array(46,-2,715,686),65533=>array(18,-63,881,800),65535=>array(35,-139,765,800)); +$cw=array(0=>800,32=>250,33=>333,34=>333,35=>556,36=>556,37=>889,38=>667,39=>200,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>250,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>250,59=>250,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>666,66=>664,67=>709,68=>698,69=>633,70=>599,71=>765,72=>721,73=>278,74=>528,75=>674,76=>563,77=>846,78=>730,79=>784,80=>656,81=>784,82=>709,83=>667,84=>632,85=>720,86=>645,87=>937,88=>657,89=>678,90=>615,91=>278,92=>278,93=>277,94=>469,95=>556,96=>250,97=>543,98=>559,99=>506,100=>559,101=>533,102=>280,103=>550,104=>536,105=>222,106=>243,107=>514,108=>214,109=>812,110=>537,111=>534,112=>559,113=>559,114=>332,115=>493,116=>280,117=>537,118=>496,119=>722,120=>476,121=>478,122=>486,123=>333,124=>250,125=>333,126=>500,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>800,170=>370,171=>500,172=>584,173=>333,174=>800,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>556,182=>537,183=>250,184=>333,185=>350,186=>365,187=>500,188=>869,189=>869,190=>879,191=>556,192=>666,193=>666,194=>666,195=>666,196=>666,197=>666,198=>984,199=>709,200=>633,201=>633,202=>633,203=>633,204=>278,205=>278,206=>300,207=>300,208=>707,209=>730,210=>784,211=>784,212=>784,213=>784,214=>784,215=>584,216=>789,217=>720,218=>720,219=>720,220=>720,221=>678,222=>645,223=>594,224=>543,225=>543,226=>543,227=>543,228=>543,229=>543,230=>871,231=>506,232=>533,233=>533,234=>533,235=>533,236=>222,237=>222,238=>262,239=>262,240=>534,241=>537,242=>534,243=>534,244=>534,245=>534,246=>534,247=>584,248=>534,249=>537,250=>537,251=>537,252=>537,253=>478,254=>558,255=>478,256=>666,257=>543,258=>666,259=>543,260=>667,261=>543,262=>709,263=>506,264=>709,265=>506,266=>709,267=>506,268=>709,269=>506,270=>698,271=>745,272=>707,273=>576,274=>633,275=>533,276=>633,277=>533,278=>633,279=>533,280=>642,281=>533,282=>633,283=>533,284=>765,285=>550,286=>765,287=>550,288=>765,289=>550,290=>765,291=>550,292=>721,293=>536,294=>722,295=>554,296=>300,297=>262,298=>278,299=>262,300=>300,301=>262,302=>278,303=>262,304=>278,305=>222,306=>759,307=>384,308=>528,309=>262,310=>674,311=>514,312=>514,313=>563,314=>242,315=>563,316=>214,317=>563,318=>385,319=>563,320=>360,321=>612,322=>252,323=>730,324=>537,325=>730,326=>537,327=>730,328=>537,329=>647,330=>677,331=>537,332=>784,333=>534,334=>784,335=>534,336=>784,337=>534,338=>986,339=>919,340=>709,341=>332,342=>709,343=>332,344=>709,345=>332,346=>667,347=>493,348=>667,349=>493,350=>667,351=>493,352=>667,353=>493,354=>632,355=>284,356=>632,357=>440,358=>632,359=>285,360=>720,361=>537,362=>720,363=>537,364=>720,365=>537,366=>720,367=>537,368=>720,369=>537,370=>720,371=>537,372=>937,373=>722,374=>678,375=>478,376=>678,377=>615,378=>486,379=>615,380=>486,381=>615,382=>486,383=>280,384=>581,385=>842,386=>664,387=>559,388=>713,389=>593,390=>709,391=>771,392=>577,393=>707,394=>876,395=>664,396=>559,397=>552,398=>633,399=>710,400=>653,401=>609,402=>278,403=>812,404=>678,405=>853,406=>256,407=>363,408=>673,409=>514,410=>345,411=>546,412=>864,413=>730,414=>537,415=>782,416=>792,417=>559,418=>1016,419=>726,420=>824,421=>559,422=>655,423=>667,424=>500,425=>615,426=>350,427=>280,428=>638,429=>281,430=>632,431=>776,432=>619,433=>757,434=>695,435=>728,436=>613,437=>615,438=>486,439=>619,440=>609,441=>524,442=>509,443=>556,446=>492,447=>561,448=>260,449=>370,450=>584,451=>278,452=>1275,453=>1178,454=>1032,455=>1054,456=>778,457=>424,458=>1216,459=>924,460=>758,461=>666,462=>543,463=>300,464=>262,465=>784,466=>534,467=>720,468=>537,469=>720,470=>537,471=>720,472=>537,473=>720,474=>537,475=>720,476=>537,477=>533,478=>666,479=>543,480=>666,481=>543,482=>984,483=>871,484=>774,485=>555,486=>765,487=>550,488=>674,489=>514,490=>784,491=>534,492=>784,493=>534,494=>619,495=>524,496=>222,497=>1297,498=>1178,499=>1042,500=>765,501=>550,503=>609,504=>730,505=>537,506=>666,507=>543,508=>984,509=>871,510=>789,511=>611,512=>666,513=>543,514=>666,515=>543,516=>633,517=>533,518=>633,519=>533,520=>300,521=>262,522=>300,523=>262,524=>784,525=>534,526=>784,527=>534,528=>709,529=>332,530=>709,531=>332,532=>720,533=>537,534=>720,535=>537,536=>667,537=>493,538=>632,539=>280,540=>539,541=>414,542=>721,543=>536,544=>720,548=>615,549=>486,550=>666,551=>543,552=>633,553=>533,554=>784,555=>534,556=>784,557=>534,558=>784,559=>534,560=>784,561=>534,562=>678,563=>478,567=>222,568=>915,569=>914,592=>543,593=>572,594=>572,595=>559,596=>506,597=>501,598=>602,599=>596,600=>533,601=>533,602=>784,603=>485,604=>485,605=>736,606=>505,607=>288,608=>587,609=>557,610=>562,611=>483,612=>552,613=>536,614=>536,615=>536,616=>268,617=>255,618=>278,619=>473,620=>427,621=>260,622=>608,623=>812,624=>812,625=>812,626=>575,627=>576,628=>547,629=>534,630=>754,631=>728,632=>700,633=>332,634=>332,635=>380,636=>332,637=>332,638=>368,639=>368,640=>529,641=>536,642=>500,643=>299,644=>298,645=>309,646=>463,647=>280,648=>280,649=>596,650=>608,651=>520,652=>496,653=>722,654=>478,655=>506,656=>564,657=>508,658=>524,659=>530,660=>498,661=>498,662=>498,663=>699,664=>784,665=>488,666=>505,667=>622,668=>538,669=>459,670=>514,671=>390,672=>606,673=>498,674=>498,675=>921,676=>960,677=>945,678=>705,679=>524,680=>770,681=>798,682=>652,683=>569,684=>530,685=>486,686=>574,687=>611,688=>333,689=>333,690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>250,700=>250,701=>250,702=>250,703=>250,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>250,713=>333,714=>333,715=>333,716=>250,717=>333,718=>333,719=>333,720=>333,721=>333,722=>250,723=>250,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>333,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>400,751=>333,752=>333,753=>333,754=>333,755=>333,756=>250,757=>333,758=>333,759=>333,760=>250,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>278,885=>199,890=>332,891=>460,892=>456,893=>460,894=>278,900=>333,901=>333,902=>666,903=>275,904=>785,905=>874,906=>413,908=>866,910=>893,911=>809,912=>284,913=>666,914=>664,915=>594,916=>699,917=>633,918=>615,919=>721,920=>784,921=>278,922=>674,923=>666,924=>846,925=>730,926=>626,927=>784,928=>720,929=>656,931=>636,932=>632,933=>678,934=>739,935=>657,936=>762,937=>757,938=>278,939=>678,940=>578,941=>497,942=>549,943=>307,944=>558,945=>578,946=>544,947=>518,948=>552,949=>497,950=>447,951=>549,952=>505,953=>284,954=>500,955=>546,956=>540,957=>496,958=>485,959=>544,960=>594,961=>574,962=>539,963=>606,964=>492,965=>558,966=>711,967=>569,968=>698,969=>728,970=>284,971=>558,972=>544,973=>558,974=>728,977=>553,978=>691,979=>884,980=>691,981=>700,982=>728,983=>556,1008=>580,1009=>574,1010=>456,1011=>243,1012=>782,1013=>308,1014=>308,1017=>619,1021=>619,1022=>619,1023=>619,1024=>643,1025=>643,1026=>770,1027=>599,1028=>709,1029=>667,1030=>278,1031=>300,1032=>528,1033=>1009,1034=>1009,1035=>770,1036=>637,1037=>730,1038=>623,1039=>722,1040=>666,1041=>664,1042=>664,1043=>599,1044=>812,1045=>643,1046=>915,1047=>653,1048=>730,1049=>730,1050=>637,1051=>671,1052=>846,1053=>721,1054=>784,1055=>721,1056=>646,1057=>709,1058=>632,1059=>623,1060=>845,1061=>657,1062=>742,1063=>620,1064=>830,1065=>851,1066=>845,1067=>879,1068=>664,1069=>709,1070=>995,1071=>686,1072=>543,1073=>534,1074=>488,1075=>390,1076=>582,1077=>533,1078=>765,1079=>485,1080=>547,1081=>547,1082=>484,1083=>497,1084=>598,1085=>538,1086=>534,1087=>537,1088=>559,1089=>506,1090=>412,1091=>478,1092=>849,1093=>476,1094=>558,1095=>490,1096=>672,1097=>702,1098=>646,1099=>680,1100=>503,1101=>506,1102=>741,1103=>529,1104=>533,1105=>533,1106=>577,1107=>390,1108=>506,1109=>502,1110=>224,1111=>262,1112=>243,1113=>796,1114=>837,1115=>579,1116=>484,1117=>547,1118=>478,1119=>538,1120=>936,1121=>680,1122=>815,1123=>636,1124=>947,1125=>702,1126=>785,1127=>556,1128=>1025,1129=>746,1130=>915,1131=>765,1132=>1125,1133=>935,1134=>653,1135=>485,1136=>762,1137=>698,1138=>784,1139=>534,1140=>772,1141=>570,1142=>772,1143=>570,1144=>1170,1145=>944,1146=>864,1147=>594,1148=>936,1149=>680,1150=>936,1151=>680,1154=>468,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>763,1163=>573,1164=>693,1165=>520,1166=>646,1167=>562,1168=>601,1169=>387,1170=>614,1171=>412,1172=>599,1173=>467,1174=>932,1175=>835,1176=>653,1177=>485,1178=>658,1179=>494,1180=>680,1181=>514,1182=>689,1183=>524,1184=>845,1185=>658,1186=>740,1187=>558,1188=>995,1189=>709,1190=>1058,1191=>790,1192=>802,1193=>626,1194=>709,1195=>506,1196=>632,1197=>412,1198=>678,1199=>588,1200=>678,1201=>588,1202=>674,1203=>486,1204=>951,1205=>672,1206=>640,1207=>501,1208=>630,1209=>480,1210=>630,1211=>480,1212=>915,1213=>691,1214=>915,1215=>691,1216=>254,1217=>915,1218=>765,1219=>671,1220=>482,1221=>694,1222=>518,1223=>721,1224=>538,1225=>744,1226=>559,1227=>630,1228=>480,1229=>869,1230=>619,1231=>254,1232=>666,1233=>543,1234=>666,1235=>543,1236=>984,1237=>871,1238=>643,1239=>533,1240=>710,1241=>543,1242=>710,1243=>543,1244=>915,1245=>765,1246=>653,1247=>485,1248=>619,1249=>534,1250=>730,1251=>547,1252=>730,1253=>547,1254=>784,1255=>534,1256=>784,1257=>534,1258=>784,1259=>534,1260=>709,1261=>506,1262=>623,1263=>478,1264=>623,1265=>478,1266=>623,1267=>478,1268=>620,1269=>490,1270=>599,1271=>390,1272=>879,1273=>680,1274=>614,1275=>412,1276=>657,1277=>476,1278=>657,1279=>476,1296=>653,1297=>485,1298=>671,1299=>497,1306=>784,1307=>559,1308=>937,1309=>712,1310=>637,1311=>484,1316=>727,1317=>564,1318=>627,1319=>517,1329=>730,1330=>693,1331=>730,1332=>735,1333=>693,1334=>751,1335=>446,1336=>703,1337=>790,1338=>656,1339=>697,1340=>390,1341=>852,1342=>791,1343=>698,1344=>585,1345=>656,1346=>651,1347=>658,1348=>759,1349=>595,1350=>772,1351=>603,1352=>703,1353=>648,1354=>698,1355=>744,1356=>738,1357=>703,1358=>739,1359=>660,1360=>693,1361=>623,1362=>385,1363=>788,1364=>632,1365=>775,1366=>714,1369=>250,1370=>222,1371=>200,1372=>333,1373=>333,1374=>333,1375=>333,1377=>833,1378=>551,1379=>572,1380=>569,1381=>546,1382=>581,1383=>353,1384=>551,1385=>568,1386=>569,1387=>552,1388=>276,1389=>795,1390=>535,1391=>553,1392=>537,1393=>512,1394=>568,1395=>552,1396=>531,1397=>249,1398=>527,1399=>405,1400=>551,1401=>390,1402=>833,1403=>509,1404=>523,1405=>545,1406=>584,1407=>879,1408=>552,1409=>552,1410=>301,1411=>884,1412=>578,1413=>556,1414=>668,1415=>544,1417=>278,1418=>333,1423=>735,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>448,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1477=>0,1478=>378,1479=>0,1488=>640,1489=>591,1490=>466,1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,1792=>600,1793=>201,1794=>201,1795=>201,1796=>201,1797=>500,1798=>500,1799=>500,1800=>370,1801=>370,1802=>574,1803=>574,1804=>645,1805=>574,1807=>0,1808=>452,1809=>452,1810=>574,1811=>645,1812=>645,1813=>509,1814=>509,1815=>682,1816=>585,1817=>404,1818=>627,1819=>718,1820=>718,1821=>484,1822=>682,1823=>600,1824=>660,1825=>682,1826=>538,1827=>718,1828=>718,1829=>718,1830=>574,1831=>574,1832=>638,1833=>585,1834=>509,1835=>682,1836=>682,1837=>574,1838=>645,1839=>509,1840=>0,1841=>0,1842=>0,1843=>0,1844=>0,1845=>0,1846=>0,1847=>0,1848=>0,1849=>0,1850=>0,1851=>0,1852=>0,1853=>0,1854=>0,1855=>0,1856=>0,1857=>0,1858=>0,1859=>0,1860=>0,1861=>0,1862=>0,1863=>0,1864=>0,1865=>0,1866=>0,1869=>660,1870=>660,1871=>660,2304=>0,2305=>0,2306=>0,2307=>305,2308=>717,2309=>717,2310=>888,2311=>464,2312=>464,2313=>582,2314=>804,2315=>921,2316=>641,2317=>433,2318=>433,2319=>433,2320=>433,2321=>888,2322=>888,2323=>888,2324=>888,2325=>749,2326=>780,2327=>522,2328=>590,2329=>680,2330=>620,2331=>644,2332=>703,2333=>692,2334=>680,2335=>568,2336=>531,2337=>611,2338=>538,2339=>608,2340=>564,2341=>660,2342=>500,2343=>593,2344=>568,2345=>568,2346=>479,2347=>733,2348=>492,2349=>578,2350=>518,2351=>556,2352=>435,2353=>435,2354=>656,2355=>661,2356=>661,2357=>492,2358=>646,2359=>479,2360=>667,2361=>486,2362=>0,2363=>226,2364=>0,2365=>442,2366=>226,2367=>226,2368=>226,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>226,2378=>226,2379=>226,2380=>226,2381=>0,2382=>149,2383=>226,2384=>839,2385=>0,2386=>0,2387=>0,2388=>0,2389=>0,2390=>0,2391=>0,2392=>749,2393=>780,2394=>522,2395=>703,2396=>611,2397=>538,2398=>733,2399=>556,2400=>900,2401=>626,2402=>0,2403=>0,2404=>674,2405=>674,2406=>575,2407=>575,2408=>575,2409=>575,2410=>575,2411=>575,2412=>575,2413=>575,2414=>575,2415=>575,2416=>365,2417=>387,2418=>717,2419=>717,2420=>888,2421=>888,2422=>717,2423=>717,2425=>703,2426=>556,2427=>568,2428=>703,2429=>575,2430=>611,2431=>492,2433=>0,2434=>300,2435=>264,2437=>656,2438=>829,2439=>507,2440=>564,2441=>539,2442=>559,2443=>600,2444=>481,2447=>580,2448=>627,2451=>540,2452=>613,2453=>570,2454=>467,2455=>481,2456=>438,2457=>483,2458=>408,2459=>509,2460=>601,2461=>563,2462=>771,2463=>401,2464=>404,2465=>540,2466=>408,2467=>460,2468=>543,2469=>477,2470=>418,2471=>433,2472=>445,2474=>499,2475=>594,2476=>397,2477=>565,2478=>458,2479=>433,2480=>396,2482=>508,2486=>518,2487=>445,2488=>508,2489=>460,2492=>0,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,2498=>0,2499=>0,2500=>0,2503=>295,2504=>303,2507=>0,2508=>0,2509=>0,2510=>356,2519=>219,2524=>540,2525=>408,2527=>433,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,2555=>344,2561=>0,2562=>0,2563=>351,2565=>860,2566=>1088,2567=>869,2568=>928,2569=>723,2570=>723,2575=>665,2576=>857,2579=>716,2580=>858,2581=>682,2582=>634,2583=>696,2584=>744,2585=>649,2586=>674,2587=>656,2588=>653,2589=>629,2590=>639,2591=>641,2592=>657,2593=>650,2594=>653,2595=>651,2596=>640,2597=>634,2598=>662,2599=>630,2600=>625,2602=>645,2603=>653,2604=>624,2605=>613,2606=>658,2607=>734,2608=>620,2610=>676,2611=>719,2613=>626,2614=>666,2616=>666,2617=>614,2620=>0,2622=>286,2623=>322,2624=>301,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>636,2650=>762,2651=>652,2652=>653,2654=>656,2662=>672,2663=>543,2664=>622,2665=>622,2666=>576,2667=>589,2668=>509,2669=>645,2670=>661,2671=>655,2672=>0,2673=>0,2674=>666,2675=>726,2676=>1217,2677=>0,3330=>419,3331=>273,3333=>1360,3334=>1522,3335=>981,3336=>1728,3337=>720,3338=>1473,3339=>865,3340=>1059,3342=>1203,3343=>1231,3344=>1902,3346=>714,3347=>1195,3348=>1463,3349=>954,3350=>910,3351=>910,3352=>1343,3353=>1002,3354=>865,3355=>1281,3356=>841,3357=>1536,3358=>1342,3359=>589,3360=>666,3361=>1291,3362=>1332,3363=>1326,3364=>954,3365=>823,3366=>618,3367=>928,3368=>928,3369=>928,3370=>855,3371=>1143,3372=>1203,3373=>644,3374=>628,3375=>1022,3376=>716,3377=>662,3378=>855,3379=>714,3380=>641,3381=>878,3382=>1009,3383=>1098,3384=>1287,3385=>1147,3386=>855,3389=>700,3390=>506,3391=>217,3392=>217,3393=>372,3394=>372,3395=>451,3396=>451,3398=>714,3399=>535,3400=>1404,3402=>0,3403=>0,3404=>0,3405=>0,3406=>273,3415=>724,3424=>865,3425=>1213,3426=>0,3427=>0,3430=>687,3431=>693,3432=>764,3433=>1030,3434=>666,3435=>934,3436=>1213,3437=>680,3438=>832,3439=>941,3440=>1221,3441=>886,3442=>1322,3443=>874,3444=>900,3445=>1044,3449=>1148,3450=>1400,3451=>994,3452=>700,3453=>1114,3454=>1004,3455=>957,4256=>587,4257=>620,4258=>642,4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515,4348=>449,5024=>678,5025=>756,5026=>604,5027=>770,5028=>969,5029=>207,5030=>633,5031=>800,5032=>474,5033=>689,5034=>672,5035=>446,5036=>637,5037=>776,5038=>511,5039=>723,5040=>528,5041=>591,5042=>839,5043=>963,5044=>615,5045=>563,5046=>705,5047=>800,5048=>558,5049=>880,5050=>966,5051=>675,5052=>527,5053=>733,5054=>779,5055=>547,5056=>756,5057=>834,5058=>604,5059=>632,5060=>605,5061=>1051,5062=>657,5063=>842,5064=>748,5065=>1192,5066=>842,5067=>632,5068=>668,5069=>928,5070=>626,5071=>655,5072=>502,5073=>696,5074=>642,5075=>518,5076=>952,5077=>622,5078=>710,5079=>521,5080=>556,5081=>656,5082=>622,5083=>881,5084=>760,5085=>564,5086=>567,5087=>712,5088=>717,5089=>838,5090=>617,5091=>689,5092=>767,5093=>728,5094=>690,5095=>551,5096=>859,5097=>957,5098=>900,5099=>779,5100=>805,5101=>621,5102=>604,5103=>842,5104=>653,5105=>737,5106=>601,5107=>901,5108=>655,5120=>584,5121=>941,5122=>941,5123=>941,5124=>941,5125=>726,5126=>726,5127=>726,5128=>726,5129=>726,5130=>726,5131=>726,5132=>941,5133=>941,5134=>941,5135=>941,5136=>941,5137=>941,5138=>882,5139=>882,5140=>882,5141=>882,5142=>726,5143=>882,5144=>882,5145=>882,5146=>882,5147=>726,5148=>494,5149=>347,5150=>447,5151=>329,5152=>329,5153=>452,5154=>452,5155=>276,5156=>451,5157=>463,5158=>289,5159=>216,5160=>400,5161=>400,5162=>400,5163=>1169,5164=>941,5165=>810,5166=>1012,5167=>941,5168=>941,5169=>941,5170=>941,5171=>726,5172=>726,5173=>726,5174=>726,5175=>726,5176=>726,5177=>726,5178=>941,5179=>941,5180=>941,5181=>941,5182=>941,5183=>941,5184=>726,5185=>882,5186=>726,5187=>882,5188=>882,5189=>726,5190=>882,5191=>726,5192=>726,5193=>390,5194=>159,5195=>332,5196=>742,5197=>742,5198=>742,5199=>742,5200=>744,5201=>744,5202=>744,5203=>744,5204=>744,5205=>744,5206=>744,5207=>914,5208=>912,5209=>912,5210=>914,5211=>912,5212=>914,5213=>744,5214=>916,5215=>744,5216=>916,5217=>916,5218=>744,5219=>916,5220=>744,5221=>915,5222=>477,5223=>855,5224=>855,5225=>855,5226=>855,5227=>592,5228=>592,5229=>592,5230=>592,5231=>592,5232=>610,5233=>713,5234=>592,5235=>608,5236=>718,5237=>764,5238=>764,5239=>718,5240=>764,5241=>718,5242=>718,5243=>763,5244=>735,5245=>763,5246=>764,5247=>718,5248=>764,5249=>734,5250=>763,5251=>361,5252=>361,5253=>708,5254=>708,5255=>708,5256=>651,5257=>592,5258=>592,5259=>592,5260=>592,5261=>592,5262=>610,5263=>713,5264=>592,5265=>608,5266=>608,5267=>763,5268=>763,5269=>608,5270=>763,5271=>608,5272=>609,5273=>763,5274=>627,5275=>763,5276=>763,5277=>609,5278=>763,5279=>625,5280=>763,5281=>361,5282=>361,5283=>592,5284=>592,5285=>592,5286=>592,5287=>592,5288=>610,5289=>713,5290=>592,5291=>608,5292=>592,5293=>763,5294=>763,5295=>592,5296=>763,5297=>592,5298=>592,5299=>763,5300=>610,5301=>763,5302=>763,5303=>592,5304=>763,5305=>608,5306=>763,5307=>346,5308=>276,5309=>346,5310=>331,5311=>562,5312=>712,5313=>712,5314=>712,5315=>712,5316=>712,5317=>712,5318=>712,5319=>712,5320=>712,5321=>868,5322=>828,5323=>828,5324=>712,5325=>828,5326=>712,5327=>712,5328=>466,5329=>452,5330=>466,5331=>712,5332=>712,5333=>712,5334=>712,5335=>712,5336=>712,5337=>712,5338=>712,5339=>712,5340=>868,5341=>828,5342=>828,5343=>868,5344=>828,5345=>868,5346=>712,5347=>828,5348=>712,5349=>828,5350=>828,5351=>712,5352=>828,5353=>712,5354=>466,5355=>262,5356=>624,5357=>504,5358=>524,5359=>504,5360=>521,5361=>504,5362=>520,5363=>624,5364=>504,5365=>520,5366=>620,5367=>660,5368=>659,5369=>620,5370=>676,5371=>620,5372=>620,5373=>660,5374=>637,5375=>676,5376=>659,5377=>620,5378=>659,5379=>636,5380=>659,5381=>309,5382=>365,5383=>309,5384=>458,5385=>315,5386=>315,5387=>347,5388=>1010,5389=>1020,5390=>872,5391=>872,5392=>830,5393=>830,5394=>830,5395=>854,5396=>854,5397=>854,5398=>854,5399=>1001,5400=>1002,5401=>1001,5402=>1002,5403=>1001,5404=>1002,5405=>998,5406=>998,5407=>998,5408=>998,5409=>998,5410=>998,5411=>998,5412=>998,5413=>594,5414=>516,5415=>516,5416=>516,5417=>516,5418=>516,5419=>532,5420=>636,5421=>516,5422=>532,5423=>671,5424=>672,5425=>671,5426=>672,5427=>671,5428=>672,5429=>671,5430=>672,5431=>687,5432=>672,5433=>671,5434=>672,5435=>671,5436=>688,5437=>671,5438=>372,5439=>505,5440=>464,5441=>460,5442=>830,5443=>830,5444=>830,5445=>830,5446=>830,5447=>830,5448=>556,5449=>556,5450=>556,5451=>556,5452=>556,5453=>556,5454=>691,5455=>712,5456=>343,5457=>362,5458=>624,5459=>817,5460=>817,5461=>817,5462=>817,5463=>824,5464=>824,5465=>824,5466=>824,5467=>980,5468=>972,5469=>465,5470=>742,5471=>742,5472=>742,5473=>742,5474=>742,5475=>742,5476=>742,5477=>742,5478=>742,5479=>742,5480=>898,5481=>848,5482=>410,5483=>742,5484=>742,5485=>744,5486=>744,5487=>825,5488=>742,5489=>742,5490=>744,5491=>744,5492=>800,5493=>800,5494=>800,5495=>800,5496=>800,5497=>800,5498=>800,5499=>493,5500=>592,5501=>460,5502=>875,5503=>875,5504=>875,5505=>777,5506=>795,5507=>875,5508=>875,5509=>644,5510=>592,5511=>592,5512=>592,5513=>592,5514=>782,5515=>782,5516=>782,5517=>782,5518=>1056,5519=>1056,5520=>1056,5521=>687,5522=>705,5523=>1056,5524=>1056,5525=>524,5526=>782,5527=>646,5528=>646,5529=>646,5530=>646,5531=>712,5532=>712,5533=>712,5534=>712,5535=>466,5536=>772,5537=>772,5538=>772,5539=>772,5540=>772,5541=>772,5542=>466,5543=>638,5544=>638,5545=>638,5546=>638,5547=>638,5548=>638,5549=>638,5550=>388,5551=>488,5552=>515,5553=>515,5554=>515,5555=>515,5556=>592,5557=>592,5558=>592,5559=>592,5560=>542,5561=>542,5562=>542,5563=>542,5564=>561,5565=>561,5566=>561,5567=>561,5568=>630,5569=>630,5570=>630,5571=>630,5572=>941,5573=>941,5574=>726,5575=>726,5576=>726,5577=>726,5578=>941,5579=>941,5580=>726,5581=>726,5582=>726,5583=>726,5584=>941,5585=>941,5586=>726,5587=>726,5588=>730,5589=>726,5590=>941,5591=>941,5592=>726,5593=>726,5594=>730,5595=>726,5596=>830,5597=>830,5598=>830,5599=>830,5600=>830,5601=>830,5602=>830,5603=>830,5604=>830,5605=>830,5606=>830,5607=>830,5608=>830,5609=>830,5610=>830,5611=>830,5612=>830,5613=>830,5614=>400,5615=>722,5616=>722,5617=>722,5618=>722,5619=>722,5620=>722,5621=>722,5622=>722,5623=>722,5624=>722,5625=>722,5626=>722,5627=>722,5628=>722,5629=>722,5630=>722,5631=>722,5632=>722,5633=>522,5634=>592,5635=>592,5636=>712,5637=>712,5638=>712,5639=>712,5640=>722,5641=>722,5642=>722,5643=>722,5644=>722,5645=>722,5646=>830,5647=>830,5648=>704,5649=>704,5650=>704,5651=>704,5652=>647,5653=>647,5654=>647,5655=>830,5656=>830,5657=>830,5658=>830,5659=>830,5660=>647,5661=>647,5662=>830,5663=>830,5664=>830,5665=>830,5666=>830,5667=>830,5668=>465,5669=>465,5670=>465,5671=>465,5672=>830,5673=>830,5674=>574,5675=>574,5676=>574,5677=>574,5678=>609,5679=>609,5680=>647,5681=>647,5682=>647,5683=>647,5684=>739,5685=>739,5686=>754,5687=>754,5688=>754,5689=>754,5690=>830,5691=>830,5692=>755,5693=>755,5694=>755,5695=>755,5696=>830,5697=>830,5698=>830,5699=>830,5700=>830,5701=>830,5702=>427,5703=>427,5704=>830,5705=>830,5706=>830,5707=>830,5708=>830,5709=>830,5710=>830,5711=>830,5712=>718,5713=>718,5714=>718,5715=>718,5716=>830,5717=>830,5718=>718,5719=>718,5720=>718,5721=>718,5722=>525,5723=>830,5724=>830,5725=>718,5726=>718,5727=>718,5728=>718,5729=>830,5730=>830,5731=>718,5732=>718,5733=>718,5734=>718,5735=>722,5736=>722,5737=>722,5738=>722,5739=>722,5740=>722,5741=>822,5742=>370,5743=>875,5744=>1056,5745=>1316,5746=>1314,5747=>963,5748=>981,5749=>1314,5750=>1330,5751=>668,5752=>778,5753=>778,5754=>698,5755=>698,5756=>778,5757=>778,5758=>400,5759=>400,6320=>726,6321=>726,6322=>726,6323=>882,6324=>726,6325=>726,6326=>786,6327=>744,6328=>592,6329=>764,6330=>592,6331=>712,6332=>712,6333=>712,6334=>504,6335=>504,6336=>830,6337=>830,6338=>1001,6339=>516,6340=>516,6341=>556,6342=>824,6343=>892,6344=>824,6345=>892,6346=>712,6347=>824,6348=>712,6349=>824,6350=>996,6351=>964,6352=>964,6353=>726,6354=>726,6355=>686,6356=>525,6357=>452,6358=>361,6359=>361,6360=>346,6361=>466,6362=>310,6363=>486,6364=>575,6365=>575,6366=>223,6367=>216,6368=>984,6369=>556,6370=>556,6371=>906,6372=>858,6373=>906,6374=>744,6375=>744,6376=>758,6377=>592,6378=>808,6379=>646,6380=>630,6381=>906,6382=>722,6383=>722,6384=>906,6385=>647,6386=>984,6387=>280,6388=>319,6389=>355,7424=>488,7425=>733,7426=>863,7427=>507,7428=>529,7429=>509,7430=>515,7431=>470,7432=>497,7433=>222,7434=>381,7435=>496,7436=>432,7437=>614,7439=>585,7448=>471,7449=>539,7450=>504,7451=>448,7452=>511,7456=>472,7457=>676,7458=>460,7579=>365,7581=>322,7582=>341,7583=>304,7588=>189,7589=>179,7590=>146,7595=>277,7596=>537,7597=>549,7598=>391,7599=>404,7600=>374,7601=>349,7602=>462,7607=>397,7608=>348,7609=>344,7612=>367,7613=>326,7614=>347,7615=>328,7680=>666,7681=>543,7682=>664,7683=>559,7684=>664,7685=>559,7686=>664,7687=>559,7688=>709,7689=>506,7690=>698,7691=>559,7692=>698,7693=>559,7694=>698,7695=>559,7696=>722,7697=>556,7698=>698,7699=>559,7700=>633,7701=>533,7702=>633,7703=>533,7704=>633,7705=>533,7706=>633,7707=>533,7708=>633,7709=>533,7710=>599,7711=>280,7712=>765,7713=>550,7714=>721,7715=>536,7716=>721,7717=>536,7718=>721,7719=>536,7720=>722,7721=>556,7722=>721,7723=>536,7724=>278,7725=>262,7726=>278,7727=>262,7728=>674,7729=>514,7730=>674,7731=>514,7732=>674,7733=>514,7734=>563,7735=>214,7736=>563,7737=>214,7738=>563,7739=>214,7740=>563,7741=>214,7742=>846,7743=>812,7744=>846,7745=>812,7746=>846,7747=>812,7748=>730,7749=>537,7750=>730,7751=>537,7752=>730,7753=>537,7754=>730,7755=>537,7756=>784,7757=>534,7758=>784,7759=>534,7760=>784,7761=>534,7762=>784,7763=>534,7764=>656,7765=>559,7766=>656,7767=>559,7768=>709,7769=>332,7770=>709,7771=>332,7772=>709,7773=>332,7774=>709,7775=>332,7776=>667,7777=>493,7778=>667,7779=>493,7780=>667,7781=>493,7782=>667,7783=>493,7784=>667,7785=>493,7786=>632,7787=>280,7788=>632,7789=>280,7790=>632,7791=>280,7792=>632,7793=>280,7794=>720,7795=>537,7796=>720,7797=>537,7798=>720,7799=>537,7800=>720,7801=>537,7802=>720,7803=>537,7804=>645,7805=>496,7806=>645,7807=>496,7808=>937,7809=>722,7810=>937,7811=>722,7812=>937,7813=>722,7814=>937,7815=>722,7816=>937,7817=>722,7818=>657,7819=>476,7820=>657,7821=>476,7822=>678,7823=>478,7824=>615,7825=>486,7826=>615,7827=>486,7828=>615,7829=>486,7830=>536,7831=>280,7832=>722,7833=>478,7834=>543,7835=>280,7836=>278,7837=>278,7838=>663,7839=>552,7840=>666,7841=>543,7842=>666,7843=>543,7844=>666,7845=>543,7846=>666,7847=>543,7848=>666,7849=>543,7850=>666,7851=>543,7852=>666,7853=>543,7854=>666,7855=>543,7856=>666,7857=>543,7858=>666,7859=>543,7860=>666,7861=>543,7862=>666,7863=>543,7864=>633,7865=>533,7866=>633,7867=>533,7868=>633,7869=>533,7870=>633,7871=>533,7872=>633,7873=>533,7874=>633,7875=>533,7876=>633,7877=>533,7878=>633,7879=>533,7880=>278,7881=>222,7882=>278,7883=>222,7884=>784,7885=>534,7886=>784,7887=>534,7888=>784,7889=>534,7890=>784,7891=>534,7892=>784,7893=>534,7894=>784,7895=>534,7896=>784,7897=>534,7898=>792,7899=>559,7900=>792,7901=>559,7902=>792,7903=>559,7904=>792,7905=>559,7906=>792,7907=>559,7908=>720,7909=>537,7910=>720,7911=>537,7912=>776,7913=>619,7914=>776,7915=>619,7916=>776,7917=>619,7918=>776,7919=>619,7920=>776,7921=>619,7922=>678,7923=>478,7924=>678,7925=>478,7926=>678,7927=>478,7928=>678,7929=>478,7936=>578,7937=>578,7938=>578,7939=>578,7940=>578,7941=>578,7942=>578,7943=>578,7944=>666,7945=>666,7946=>742,7947=>756,7948=>692,7949=>699,7950=>673,7951=>666,7952=>497,7953=>497,7954=>497,7955=>497,7956=>497,7957=>497,7960=>730,7961=>714,7962=>900,7963=>882,7964=>867,7965=>879,7968=>549,7969=>549,7970=>549,7971=>549,7972=>549,7973=>549,7974=>549,7975=>549,7976=>771,7977=>777,7978=>944,7979=>946,7980=>942,7981=>945,7982=>852,7983=>852,7984=>284,7985=>284,7986=>284,7987=>284,7988=>284,7989=>284,7990=>284,7991=>284,7992=>322,7993=>321,7994=>482,7995=>485,7996=>477,7997=>484,7998=>394,7999=>390,8000=>544,8001=>544,8002=>544,8003=>544,8004=>544,8005=>544,8008=>775,8009=>784,8010=>990,8011=>987,8012=>887,8013=>897,8016=>558,8017=>558,8018=>558,8019=>558,8020=>558,8021=>558,8022=>558,8023=>558,8025=>747,8027=>915,8029=>971,8031=>863,8032=>728,8033=>728,8034=>728,8035=>728,8036=>728,8037=>728,8038=>728,8039=>728,8040=>769,8041=>774,8042=>972,8043=>970,8044=>879,8045=>918,8046=>901,8047=>901,8048=>578,8049=>578,8050=>497,8051=>497,8052=>549,8053=>549,8054=>284,8055=>284,8056=>544,8057=>544,8058=>558,8059=>558,8060=>728,8061=>728,8064=>578,8065=>578,8066=>578,8067=>578,8068=>578,8069=>578,8070=>578,8071=>578,8072=>830,8073=>828,8074=>916,8075=>916,8076=>853,8077=>860,8078=>835,8079=>827,8080=>549,8081=>549,8082=>549,8083=>549,8084=>549,8085=>549,8086=>549,8087=>549,8088=>928,8089=>931,8090=>1104,8091=>1109,8092=>1099,8093=>1102,8094=>1009,8095=>1012,8096=>728,8097=>728,8098=>728,8099=>728,8100=>728,8101=>728,8102=>728,8103=>728,8104=>934,8105=>934,8106=>1130,8107=>1128,8108=>1045,8109=>1077,8110=>1062,8111=>1065,8112=>578,8113=>578,8114=>578,8115=>578,8116=>578,8118=>578,8119=>578,8120=>666,8121=>666,8122=>666,8123=>666,8124=>832,8125=>333,8126=>200,8127=>333,8128=>333,8129=>333,8130=>549,8131=>549,8132=>549,8134=>549,8135=>549,8136=>833,8137=>776,8138=>911,8139=>892,8140=>875,8141=>400,8142=>400,8143=>333,8144=>284,8145=>284,8146=>284,8147=>284,8150=>284,8151=>284,8152=>278,8153=>278,8154=>385,8155=>376,8157=>400,8158=>400,8159=>333,8160=>558,8161=>558,8162=>558,8163=>558,8164=>574,8165=>574,8166=>558,8167=>514,8168=>678,8169=>678,8170=>817,8171=>827,8172=>729,8173=>393,8174=>393,8175=>333,8178=>728,8179=>728,8180=>728,8182=>728,8183=>728,8184=>833,8185=>833,8186=>848,8187=>814,8188=>939,8189=>333,8190=>333,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>167,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>500,8212=>1000,8213=>1000,8214=>320,8215=>566,8216=>250,8217=>250,8218=>250,8219=>250,8220=>400,8221=>400,8222=>400,8223=>400,8224=>556,8225=>556,8226=>400,8227=>400,8228=>500,8229=>500,8230=>680,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>167,8240=>1000,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469,8247=>680,8248=>376,8249=>250,8250=>250,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537,8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>787,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>350,8305=>140,8308=>350,8309=>350,8310=>350,8311=>350,8312=>350,8313=>350,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>360,8320=>350,8321=>350,8322=>350,8323=>350,8324=>350,8325=>350,8326=>350,8327=>350,8328=>350,8329=>350,8330=>350,8331=>350,8332=>350,8333=>350,8334=>350,8336=>363,8337=>366,8338=>360,8339=>325,8340=>350,8352=>623,8353=>615,8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1317,8360=>1202,8361=>879,8362=>869,8363=>538,8364=>655,8365=>667,8366=>611,8367=>1290,8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8376=>516,8377=>499,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>870,8449=>859,8450=>722,8451=>1017,8452=>556,8453=>796,8454=>832,8455=>653,8456=>722,8457=>919,8459=>1229,8460=>615,8461=>647,8462=>556,8463=>572,8464=>919,8465=>606,8466=>900,8467=>481,8468=>747,8469=>722,8470=>934,8471=>800,8472=>600,8473=>667,8474=>778,8475=>900,8476=>699,8477=>722,8478=>834,8479=>722,8480=>1043,8481=>1261,8482=>1000,8483=>667,8484=>611,8486=>757,8487=>757,8488=>512,8489=>284,8490=>674,8491=>666,8492=>918,8493=>623,8494=>533,8495=>469,8496=>712,8497=>965,8498=>588,8499=>1200,8501=>640,8502=>592,8503=>466,8504=>598,8505=>278,8506=>868,8507=>1338,8508=>619,8510=>582,8511=>722,8513=>765,8514=>563,8515=>556,8516=>678,8517=>780,8522=>516,8523=>655,8525=>1200,8526=>435,8531=>860,8532=>880,8533=>899,8534=>889,8535=>880,8536=>889,8537=>879,8538=>889,8539=>880,8540=>889,8541=>880,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>645,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>657,8554=>945,8555=>1223,8556=>563,8557=>709,8558=>698,8559=>846,8560=>222,8561=>444,8562=>666,8563=>722,8564=>496,8565=>722,8566=>944,8567=>1166,8568=>722,8569=>476,8570=>722,8571=>944,8572=>214,8573=>506,8574=>559,8575=>812,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8598=>800,8599=>800,8600=>800,8601=>800,8612=>987,8613=>680,8614=>987,8615=>680,8617=>987,8618=>987,8628=>700,8629=>658,8636=>987,8637=>987,8638=>380,8639=>393,8640=>987,8641=>987,8642=>380,8643=>379,8644=>987,8645=>906,8646=>990,8647=>987,8648=>1010,8649=>987,8650=>1010,8651=>987,8652=>987,8656=>987,8657=>603,8658=>987,8659=>603,8660=>1042,8661=>603,8668=>1092,8669=>1092,8704=>667,8705=>676,8706=>556,8707=>667,8708=>667,8709=>802,8710=>711,8711=>711,8712=>584,8713=>584,8714=>585,8715=>584,8716=>584,8717=>585,8718=>500,8719=>783,8720=>783,8721=>771,8722=>584,8723=>584,8724=>584,8725=>510,8726=>392,8727=>500,8728=>500,8729=>500,8730=>512,8731=>512,8732=>512,8733=>713,8734=>713,8735=>639,8736=>768,8737=>768,8738=>600,8739=>200,8740=>288,8741=>320,8742=>340,8743=>608,8744=>608,8745=>768,8746=>768,8747=>465,8748=>705,8749=>905,8750=>464,8751=>761,8756=>800,8757=>800,8758=>250,8759=>620,8760=>584,8761=>778,8762=>584,8763=>500,8764=>500,8765=>500,8766=>573,8768=>244,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>500,8777=>500,8778=>584,8779=>500,8780=>584,8781=>554,8784=>584,8785=>584,8786=>584,8787=>584,8788=>735,8789=>755,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584,8800=>584,8801=>584,8802=>584,8803=>600,8804=>584,8805=>584,8806=>584,8807=>584,8810=>955,8811=>955,8813=>554,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8822=>584,8823=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584,8832=>584,8833=>584,8834=>584,8835=>584,8836=>584,8837=>584,8838=>584,8839=>584,8840=>584,8841=>584,8844=>768,8845=>768,8846=>768,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>768,8854=>778,8855=>778,8856=>768,8857=>778,8858=>776,8859=>776,8860=>776,8861=>776,8866=>658,8867=>658,8868=>658,8869=>658,8870=>500,8871=>528,8872=>758,8882=>636,8883=>636,8884=>636,8885=>636,8891=>584,8892=>608,8893=>584,8896=>744,8897=>744,8898=>764,8899=>764,8901=>298,8902=>471,8904=>710,8909=>584,8910=>584,8911=>584,8918=>584,8919=>564,8920=>1215,8921=>1215,8928=>584,8929=>584,8930=>636,8931=>636,8934=>584,8935=>584,8936=>584,8937=>584,8942=>250,8943=>1000,8944=>1000,8945=>1000,8960=>823,8968=>456,8969=>455,8970=>456,8971=>455,8976=>584,8992=>374,8993=>374,8994=>658,8995=>658,9001=>329,9002=>329,9115=>384,9116=>384,9117=>384,9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9127=>333,9128=>333,9129=>333,9130=>333,9131=>333,9132=>333,9133=>333,9134=>374,9138=>804,9139=>804,9216=>800,9217=>784,9218=>800,9219=>800,9220=>784,9221=>800,9222=>800,9223=>800,9224=>800,9225=>800,9226=>800,9227=>800,9228=>800,9229=>800,9230=>800,9231=>800,9232=>800,9233=>800,9234=>800,9235=>800,9236=>800,9237=>800,9238=>800,9239=>800,9240=>800,9241=>800,9242=>800,9243=>800,9244=>800,9245=>800,9246=>800,9247=>800,9248=>800,9249=>800,9250=>556,9251=>500,9252=>800,9253=>800,9254=>800,9312=>788,9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>800,9633=>800,9634=>800,9635=>800,9636=>800,9637=>800,9638=>800,9639=>800,9640=>800,9641=>800,9642=>625,9643=>625,9644=>800,9645=>800,9646=>800,9647=>800,9648=>1000,9649=>1000,9650=>892,9651=>892,9652=>669,9653=>669,9654=>892,9655=>892,9656=>669,9657=>669,9658=>891,9659=>891,9660=>892,9661=>892,9662=>669,9663=>669,9664=>892,9665=>892,9666=>669,9667=>669,9668=>891,9669=>891,9670=>788,9671=>788,9672=>788,9673=>800,9674=>489,9675=>800,9676=>800,9677=>800,9678=>800,9679=>800,9680=>800,9681=>800,9682=>800,9683=>800,9684=>800,9685=>800,9686=>800,9687=>800,9688=>400,9689=>800,9690=>800,9691=>800,9692=>800,9693=>800,9694=>800,9695=>799,9696=>800,9697=>800,9698=>1000,9699=>1000,9700=>1000,9701=>1000,9702=>400,9703=>800,9704=>800,9705=>800,9706=>800,9707=>800,9708=>892,9709=>892,9710=>892,9711=>1020,9712=>800,9713=>800,9714=>800,9715=>800,9716=>800,9717=>800,9718=>800,9719=>800,9720=>800,9721=>800,9722=>800,9723=>800,9724=>800,9725=>800,9726=>800,9727=>800,9772=>929,9773=>795,9785=>770,9786=>770,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,10048=>1161,10752=>1020,10753=>1020,10754=>1020,10755=>764,10756=>764,10761=>584,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>544,11575=>709,11576=>709,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>292,11587=>696,11588=>696,11589=>720,11590=>544,11591=>724,11592=>756,11593=>600,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>260,11600=>836,11601=>224,11602=>678,11603=>380,11604=>872,11605=>872,11606=>720,11607=>268,11608=>640,11609=>872,11610=>872,11611=>770,11612=>424,11613=>720,11614=>770,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11622=>728,11623=>618,11631=>442,11798=>584,11799=>333,11800=>556,11802=>333,11803=>500,11806=>500,11807=>500,11816=>464,11817=>464,11818=>660,11819=>623,11820=>623,11821=>660,11822=>556,11824=>350,42240=>698,42241=>698,42242=>676,42243=>800,42244=>800,42245=>850,42246=>930,42247=>720,42248=>756,42249=>750,42250=>750,42251=>750,42252=>540,42253=>540,42254=>780,42255=>780,42256=>1082,42257=>1082,42258=>780,42259=>780,42260=>720,42261=>774,42262=>600,42263=>600,42264=>600,42265=>600,42266=>983,42267=>983,42268=>749,42269=>749,42270=>1080,42271=>890,42272=>869,42273=>720,42274=>739,42275=>983,42276=>780,42277=>840,42278=>780,42279=>424,42280=>840,42281=>967,42282=>462,42283=>952,42284=>735,42285=>735,42286=>780,42287=>750,42288=>869,42289=>772,42290=>772,42291=>676,42292=>762,42293=>674,42294=>674,42295=>488,42296=>604,42297=>822,42298=>1059,42299=>851,42300=>851,42301=>689,42302=>844,42303=>708,42304=>907,42305=>907,42306=>907,42307=>612,42308=>612,42309=>840,42310=>775,42311=>544,42312=>774,42313=>540,42314=>704,42315=>723,42316=>887,42317=>887,42318=>676,42319=>817,42320=>762,42321=>887,42322=>824,42323=>890,42324=>705,42325=>780,42326=>705,42327=>533,42328=>523,42329=>694,42330=>772,42331=>772,42332=>772,42333=>892,42334=>711,42335=>711,42336=>832,42337=>832,42338=>944,42339=>944,42340=>832,42341=>928,42342=>743,42343=>735,42344=>731,42345=>782,42346=>595,42347=>890,42348=>680,42349=>887,42350=>815,42351=>510,42352=>848,42353=>700,42354=>700,42355=>700,42356=>724,42357=>724,42358=>633,42359=>633,42360=>813,42361=>834,42362=>625,42363=>887,42364=>592,42365=>772,42366=>772,42367=>639,42368=>639,42369=>887,42370=>887,42371=>717,42372=>717,42373=>786,42374=>891,42375=>780,42376=>841,42377=>500,42378=>792,42379=>522,42380=>522,42381=>647,42382=>361,42383=>815,42384=>850,42385=>683,42386=>834,42387=>898,42388=>522,42389=>820,42390=>820,42391=>808,42392=>864,42393=>772,42394=>808,42395=>869,42396=>900,42397=>844,42398=>844,42399=>812,42400=>812,42401=>812,42402=>930,42403=>990,42404=>540,42405=>608,42406=>630,42407=>910,42408=>687,42409=>687,42410=>744,42411=>687,42412=>724,42413=>742,42414=>724,42415=>742,42416=>744,42417=>744,42418=>744,42419=>744,42420=>780,42421=>540,42422=>540,42423=>595,42424=>740,42425=>620,42426=>772,42427=>914,42428=>914,42429=>857,42430=>800,42431=>772,42432=>887,42433=>990,42434=>1005,42435=>799,42436=>799,42437=>948,42438=>948,42439=>906,42440=>1044,42441=>600,42442=>600,42443=>574,42444=>742,42445=>574,42446=>742,42447=>500,42448=>604,42449=>704,42450=>704,42451=>746,42452=>820,42453=>731,42454=>805,42455=>606,42456=>726,42457=>726,42458=>500,42459=>813,42460=>939,42461=>898,42462=>660,42463=>633,42464=>914,42465=>689,42466=>1231,42467=>784,42468=>710,42469=>982,42470=>704,42471=>782,42472=>591,42473=>770,42474=>620,42475=>620,42476=>930,42477=>930,42478=>930,42479=>785,42480=>785,42481=>813,42482=>813,42483=>971,42484=>971,42485=>721,42486=>801,42487=>582,42488=>604,42489=>618,42490=>582,42491=>1059,42492=>1059,42493=>1059,42494=>1059,42495=>720,42496=>789,42497=>723,42498=>721,42499=>772,42500=>772,42501=>772,42502=>772,42503=>772,42504=>620,42505=>634,42506=>806,42507=>825,42508=>670,42509=>521,42510=>512,42511=>1134,42512=>1324,42513=>772,42514=>1091,42515=>445,42516=>811,42517=>776,42518=>614,42519=>720,42520=>902,42521=>765,42522=>920,42523=>1024,42524=>735,42525=>742,42526=>816,42527=>715,42528=>692,42529=>200,42530=>677,42531=>770,42532=>640,42533=>595,42534=>526,42535=>677,42536=>500,42537=>715,42538=>1143,42539=>560,42888=>333,42889=>276,42890=>342,42891=>194,42892=>194,42922=>899,64256=>495,64257=>460,64258=>465,64259=>652,64260=>645,64261=>520,64275=>1004,64276=>1044,64277=>1042,64278=>1037,64279=>1256,64285=>200,64286=>305,64287=>400,64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584,64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598,64308=>622,64309=>291,64310=>371,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378,64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591,64333=>550,64334=>568,64335=>640,65529=>0,65530=>0,65531=>0,65532=>784,65533=>900,65535=>800); +// --- EOF --- diff --git a/tcpdf/fonts/freesans.z b/tcpdf/fonts/freesans.z new file mode 100644 index 0000000..27760fc Binary files /dev/null and b/tcpdf/fonts/freesans.z differ diff --git a/tcpdf/fonts/freesansb.ctg.z b/tcpdf/fonts/freesansb.ctg.z new file mode 100644 index 0000000..9c74c58 Binary files /dev/null and b/tcpdf/fonts/freesansb.ctg.z differ diff --git a/tcpdf/fonts/freesansb.php b/tcpdf/fonts/freesansb.php new file mode 100644 index 0000000..d2e3133 --- /dev/null +++ b/tcpdf/fonts/freesansb.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSansBold'; +$up=-189; +$ut=69; +$dw=800; +$diff=''; +$originalsize=416128; +$enc=''; +$file='freesansb.z'; +$ctg='freesansb.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-968 -460 1556 1066]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>729,'XHeight'=>540,'StemV'=>105,'StemH'=>45,'AvgWidth'=>642,'MaxWidth'=>1473,'MissingWidth'=>800); +$cbbox=array(0=>array(35,-139,765,800),33=>array(112,0,262,726),34=>array(50,470,424,729),35=>array(3,-32,553,697),36=>array(22,-126,527,763),37=>array(22,-20,863,709),38=>array(55,-23,694,723),39=>array(56,470,194,729),40=>array(40,-200,303,729),41=>array(22,-200,285,729),42=>array(23,407,357,729),43=>array(50,-10,533,473),44=>array(50,-174,200,146),45=>array(26,207,298,342),46=>array(50,0,200,146),47=>array(2,-14,275,714),48=>array(29,-23,517,724),49=>array(68,0,378,709),50=>array(30,0,515,724),51=>array(29,-23,516,724),52=>array(24,0,522,709),53=>array(27,-23,517,709),54=>array(32,-23,519,724),55=>array(29,0,528,709),56=>array(22,-23,525,724),57=>array(28,-24,516,724),58=>array(50,0,200,520),59=>array(50,-174,200,520),60=>array(40,-10,529,474),61=>array(50,52,534,411),62=>array(40,-10,529,474),63=>array(64,0,556,744),64=>array(27,-138,947,745),65=>array(10,0,687,729),66=>array(80,0,664,729),67=>array(40,-23,681,741),68=>array(80,0,684,729),69=>array(80,0,625,729),70=>array(80,0,592,729),71=>array(40,-21,709,743),72=>array(80,0,669,729),73=>array(80,0,230,729),74=>array(30,-23,492,729),75=>array(80,0,723,729),76=>array(80,0,579,729),77=>array(80,0,790,729),78=>array(80,0,673,729),79=>array(40,-23,742,741),80=>array(80,0,637,729),81=>array(40,-54,742,741),82=>array(80,0,677,729),83=>array(40,-23,641,741),84=>array(30,0,614,729),85=>array(80,-23,658,729),86=>array(20,0,643,729),87=>array(20,0,939,729),88=>array(22,0,653,729),89=>array(10,0,633,729),90=>array(30,0,578,729),91=>array(66,-200,308,729),92=>array(-12,-14,289,714),93=>array(18,-200,260,729),94=>array(61,270,522,695),95=>array(-22,-200,578,-120),96=>array(17,607,213,757),97=>array(40,-23,536,549),98=>array(65,-23,581,729),99=>array(40,-23,528,549),100=>array(40,-23,556,729),101=>array(40,-23,543,549),102=>array(14,0,313,729),103=>array(40,-218,547,549),104=>array(65,0,539,729),105=>array(70,0,210,729),106=>array(4,-218,210,729),107=>array(65,0,554,729),108=>array(65,0,205,729),109=>array(65,0,829,549),110=>array(65,0,548,549),111=>array(40,-23,574,549),112=>array(65,-218,581,549),113=>array(40,-218,556,549),114=>array(65,0,372,549),115=>array(30,-23,521,549),116=>array(21,-23,308,674),117=>array(65,-23,548,540),118=>array(10,0,532,540),119=>array(10,0,771,540),120=>array(15,0,534,540),121=>array(10,-219,539,540),122=>array(30,0,477,540),123=>array(37,-200,317,729),124=>array(100,-200,180,729),125=>array(72,-200,352,729),126=>array(20,142,479,314),160=>array(0,0,0,0),161=>array(66,-186,216,540),162=>array(36,-124,522,634),163=>array(31,-23,537,715),164=>array(26,100,530,604),165=>array(5,0,552,704),166=>array(100,-200,180,729),167=>array(33,-201,518,723),168=>array(13,621,319,743),169=>array(-14,-22,751,743),170=>array(31,262,329,729),171=>array(88,72,468,481),172=>array(39,86,544,376),173=>array(26,207,298,342),174=>array(-14,-22,751,743),175=>array(16,620,315,699),176=>array(151,383,454,686),177=>array(50,-16,533,644),178=>array(16,390,328,824),179=>array(15,371,329,818),180=>array(121,607,317,757),181=>array(58,-220,573,540),182=>array(19,-191,529,729),183=>array(64,169,188,292),184=>array(27,-220,294,0),185=>array(40,389,242,814),186=>array(23,262,343,729),187=>array(88,72,462,481),188=>array(40,-20,850,742),189=>array(40,-20,846,744),190=>array(15,-20,850,741),191=>array(52,-204,544,540),192=>array(10,0,687,900),193=>array(10,0,687,900),194=>array(10,0,687,900),195=>array(10,0,687,890),196=>array(10,0,687,900),197=>array(10,0,687,949),198=>array(10,0,975,729),199=>array(40,-220,681,741),200=>array(80,0,625,900),201=>array(80,0,625,900),202=>array(80,0,625,900),203=>array(80,0,625,900),204=>array(0,0,236,900),205=>array(42,0,278,900),206=>array(-4,0,314,900),207=>array(2,0,308,900),208=>array(20,0,701,729),209=>array(80,0,673,900),210=>array(40,-23,742,900),211=>array(40,-23,742,900),212=>array(40,-23,742,900),213=>array(40,-23,742,900),214=>array(40,-23,742,900),215=>array(79,18,505,444),216=>array(36,-39,760,749),217=>array(80,-23,658,900),218=>array(80,-23,658,900),219=>array(80,-23,658,900),220=>array(80,-23,658,900),221=>array(10,0,633,900),222=>array(80,0,637,729),223=>array(67,-23,575,729),224=>array(40,-23,536,757),225=>array(40,-23,536,757),226=>array(40,-23,536,757),227=>array(40,-23,536,749),228=>array(40,-23,536,743),229=>array(40,-23,536,770),230=>array(28,-24,858,549),231=>array(40,-220,528,549),232=>array(40,-23,543,757),233=>array(40,-23,543,757),234=>array(40,-23,543,757),235=>array(40,-23,543,743),236=>array(10,0,210,757),237=>array(70,0,270,757),238=>array(-9,0,309,757),239=>array(-4,0,302,743),240=>array(40,-23,574,744),241=>array(65,0,548,749),242=>array(40,-23,574,757),243=>array(40,-23,574,757),244=>array(40,-23,574,759),245=>array(40,-23,574,749),246=>array(40,-23,574,743),247=>array(50,-11,534,474),248=>array(13,-38,600,557),249=>array(65,-23,548,757),250=>array(65,-23,548,757),251=>array(65,-23,548,757),252=>array(65,-23,548,743),253=>array(10,-219,539,757),254=>array(65,-218,581,729),255=>array(10,-219,539,743),256=>array(10,0,687,879),257=>array(40,-23,536,699),258=>array(10,0,687,900),259=>array(40,-23,536,748),260=>array(20,-233,717,729),261=>array(40,-233,560,549),262=>array(40,-23,681,900),263=>array(40,-23,528,757),264=>array(40,-23,681,900),265=>array(40,-23,528,759),266=>array(40,-23,681,900),267=>array(40,-23,528,731),268=>array(40,-23,681,900),269=>array(40,-23,528,757),270=>array(80,0,684,900),271=>array(40,-23,789,740),272=>array(20,0,701,729),273=>array(40,-23,616,729),274=>array(80,0,625,879),275=>array(40,-23,543,699),276=>array(80,0,625,900),277=>array(40,-23,543,783),278=>array(80,0,625,900),279=>array(40,-23,543,743),280=>array(80,-233,649,729),281=>array(40,-234,544,549),282=>array(80,0,625,900),283=>array(40,-23,543,757),284=>array(40,-21,709,900),285=>array(40,-218,547,790),286=>array(40,-21,709,900),287=>array(40,-218,547,748),288=>array(40,-21,709,900),289=>array(40,-218,547,762),290=>array(40,-300,709,743),291=>array(40,-218,547,851),292=>array(80,0,669,900),293=>array(65,0,539,900),294=>array(10,0,719,729),295=>array(8,0,541,729),296=>array(-22,0,332,900),297=>array(-27,0,327,768),298=>array(15,-1,288,879),299=>array(7,0,267,699),300=>array(23,0,287,900),301=>array(15,0,279,783),302=>array(49,-233,252,729),303=>array(35,-233,232,729),304=>array(80,0,230,900),305=>array(70,0,210,540),306=>array(80,-23,542,729),307=>array(70,-218,478,729),308=>array(30,-23,492,900),309=>array(-19,-218,299,782),310=>array(80,-300,723,729),311=>array(65,-300,554,729),312=>array(70,0,559,540),313=>array(80,0,579,900),314=>array(42,0,278,900),315=>array(80,-300,579,729),316=>array(65,-300,205,729),317=>array(80,0,579,740),318=>array(65,0,440,740),319=>array(80,0,579,729),320=>array(65,0,415,729),321=>array(10,0,607,729),322=>array(10,0,262,729),323=>array(80,0,673,900),324=>array(65,0,548,757),325=>array(80,-300,673,729),326=>array(65,-300,548,549),327=>array(80,0,673,900),328=>array(65,0,548,757),329=>array(33,0,638,748),330=>array(80,-16,712,741),331=>array(65,-218,548,549),332=>array(40,-23,742,879),333=>array(40,-23,574,699),334=>array(40,-23,742,900),335=>array(40,-23,574,783),336=>array(40,-23,742,900),337=>array(40,-23,574,757),338=>array(40,-23,982,741),339=>array(40,-23,937,549),340=>array(80,0,677,900),341=>array(65,0,372,757),342=>array(80,-300,677,729),343=>array(65,-300,372,549),344=>array(80,0,677,900),345=>array(55,0,373,757),346=>array(40,-23,641,900),347=>array(30,-23,521,757),348=>array(40,-23,641,900),349=>array(30,-23,521,790),350=>array(40,-220,641,741),351=>array(30,-220,521,549),352=>array(40,-23,641,900),353=>array(30,-23,521,757),354=>array(30,-220,614,729),355=>array(14,-241,326,674),356=>array(30,0,614,900),357=>array(21,-23,480,740),358=>array(30,0,614,729),359=>array(9,-23,301,674),360=>array(80,-23,658,900),361=>array(65,-23,548,768),362=>array(80,-23,658,879),363=>array(65,-23,548,699),364=>array(80,-23,658,900),365=>array(65,-23,548,783),366=>array(80,-23,658,949),367=>array(65,-23,548,770),368=>array(80,-23,658,900),369=>array(65,-23,558,757),370=>array(80,-234,658,729),371=>array(58,-233,564,540),372=>array(20,0,939,900),373=>array(10,0,771,790),374=>array(10,-2,633,900),375=>array(10,-219,539,790),376=>array(10,0,633,900),377=>array(30,0,578,900),378=>array(30,0,477,757),379=>array(30,0,578,900),380=>array(30,0,477,743),381=>array(30,0,578,900),382=>array(30,0,477,757),383=>array(14,0,308,729),384=>array(5,-23,581,729),385=>array(40,0,863,729),386=>array(63,0,647,729),387=>array(80,-23,596,729),388=>array(0,0,654,729),389=>array(0,-23,613,729),390=>array(40,-23,681,741),391=>array(40,-23,735,748),392=>array(40,-23,593,558),393=>array(20,0,701,729),394=>array(40,0,883,729),395=>array(52,0,636,729),396=>array(40,-23,556,729),397=>array(1,-183,543,547),398=>array(40,0,585,729),399=>array(40,-23,742,741),400=>array(40,-23,641,741),401=>array(20,-218,587,729),402=>array(14,-218,313,729),403=>array(40,-23,766,748),404=>array(17,-20,640,729),405=>array(80,-16,884,729),406=>array(65,-48,284,754),407=>array(20,0,413,729),408=>array(80,0,784,745),409=>array(65,0,554,729),410=>array(5,-25,388,754),411=>array(17,-13,586,739),412=>array(80,-10,898,729),413=>array(20,-218,668,729),414=>array(65,-201,548,549),415=>array(40,-23,742,741),416=>array(40,-23,791,763),417=>array(40,-23,658,585),418=>array(40,-200,996,744),419=>array(40,-218,782,550),420=>array(40,0,836,729),421=>array(65,-218,581,688),422=>array(80,-190,627,729),423=>array(40,-23,641,741),424=>array(35,-23,526,549),425=>array(60,0,676,729),426=>array(36,-213,421,740),427=>array(14,-218,301,674),428=>array(40,0,695,729),429=>array(14,-23,301,729),430=>array(20,-218,604,729),431=>array(80,-23,773,896),432=>array(65,-23,663,707),433=>array(0,-35,719,714),434=>array(65,-12,673,731),435=>array(17,0,809,729),436=>array(9,-219,638,730),437=>array(30,0,578,729),438=>array(21,0,468,540),439=>array(40,-23,527,729),440=>array(29,-23,516,729),441=>array(35,-143,611,524),442=>array(30,-254,529,549),443=>array(20,1,549,740),446=>array(40,-15,532,729),447=>array(65,-218,592,552),448=>array(100,-200,180,729),449=>array(100,-200,320,729),450=>array(45,-200,539,731),451=>array(62,0,212,726),452=>array(80,0,1270,900),453=>array(80,0,1179,757),454=>array(40,-23,1088,757),455=>array(80,-23,1103,729),456=>array(80,-218,785,729),457=>array(65,-218,486,729),458=>array(80,-23,1214,729),459=>array(80,-218,930,729),460=>array(65,-218,819,729),461=>array(10,0,687,900),462=>array(40,-23,536,759),463=>array(-3,0,315,900),464=>array(-8,0,310,759),465=>array(40,-23,742,900),466=>array(40,-23,574,759),467=>array(80,-23,658,900),468=>array(65,-23,548,759),469=>array(80,-23,658,989),470=>array(65,-23,548,862),471=>array(80,-23,658,1032),472=>array(65,-23,548,900),473=>array(80,-23,658,1030),474=>array(65,-23,548,900),475=>array(80,-23,658,1037),476=>array(65,-23,548,900),477=>array(40,-23,543,549),478=>array(10,0,687,989),479=>array(40,-23,536,862),480=>array(10,0,687,989),481=>array(40,-23,536,859),482=>array(10,0,975,880),483=>array(28,-24,858,699),484=>array(40,-23,794,741),485=>array(34,-218,632,549),486=>array(40,-21,709,900),487=>array(40,-218,547,759),488=>array(80,0,723,900),489=>array(65,0,554,890),490=>array(40,-249,742,741),491=>array(35,-249,569,549),492=>array(40,-249,742,860),493=>array(35,-249,569,668),494=>array(40,-23,527,900),495=>array(35,-143,522,759),496=>array(-8,-218,310,750),497=>array(80,0,1300,729),498=>array(80,0,1199,729),499=>array(40,-23,1088,729),500=>array(40,-21,709,900),501=>array(40,-218,547,757),503=>array(80,0,619,743),504=>array(80,0,673,900),505=>array(65,0,548,759),506=>array(10,0,687,900),507=>array(40,-23,536,900),508=>array(10,0,975,900),509=>array(28,-24,858,757),510=>array(36,-39,760,900),511=>array(13,-38,600,757),512=>array(10,0,687,900),513=>array(26,-23,536,756),514=>array(10,0,687,900),515=>array(40,-23,536,752),516=>array(80,0,625,900),517=>array(17,-23,543,756),518=>array(80,0,625,900),519=>array(40,-23,543,752),520=>array(-118,0,310,900),521=>array(-78,0,306,756),522=>array(23,0,287,900),523=>array(5,0,269,752),524=>array(40,-23,742,900),525=>array(40,-23,574,756),526=>array(40,-23,742,900),527=>array(40,-23,574,752),528=>array(80,0,677,900),529=>array(-19,0,372,756),530=>array(80,0,677,900),531=>array(65,0,372,752),532=>array(80,-23,658,900),533=>array(65,-23,548,756),534=>array(80,-23,658,900),535=>array(65,-23,548,752),536=>array(40,-300,641,741),537=>array(30,-300,521,549),538=>array(30,-300,614,729),539=>array(21,-300,308,674),540=>array(35,-140,546,741),541=>array(30,-133,444,551),542=>array(80,0,669,900),543=>array(65,0,539,882),548=>array(30,-215,578,729),549=>array(21,-216,468,540),550=>array(10,0,687,900),551=>array(40,-23,536,731),552=>array(80,-213,625,729),553=>array(40,-236,543,549),554=>array(40,-23,742,989),555=>array(40,-23,574,859),556=>array(40,-23,742,989),557=>array(40,-23,574,859),558=>array(40,-23,742,900),559=>array(40,-23,574,731),560=>array(40,-23,742,989),561=>array(40,-23,574,859),562=>array(10,0,633,879),563=>array(10,-219,539,699),567=>array(4,-218,210,540),592=>array(30,-23,526,549),593=>array(40,-23,687,549),594=>array(0,-9,647,563),595=>array(65,-23,581,729),596=>array(30,-23,518,549),597=>array(10,-51,543,549),598=>array(40,-218,622,729),599=>array(40,-23,622,729),600=>array(40,-23,543,549),601=>array(40,-23,543,549),602=>array(22,-23,800,570),603=>array(80,-10,571,547),604=>array(38,-23,529,549),605=>array(30,-23,800,570),606=>array(34,-10,531,547),607=>array(30,-218,302,540),608=>array(40,-218,611,688),609=>array(40,-218,603,549),610=>array(40,-22,529,550),611=>array(10,-219,546,540),612=>array(10,-24,643,550),613=>array(65,-218,548,540),614=>array(64,0,538,729),615=>array(65,-218,539,729),616=>array(14,0,286,729),617=>array(65,-23,271,540),618=>array(14,0,286,540),619=>array(7,0,466,729),620=>array(20,0,507,729),621=>array(65,-218,271,729),622=>array(65,-143,704,729),623=>array(65,-9,829,540),624=>array(65,-218,830,540),625=>array(65,-218,829,549),626=>array(14,-218,563,549),627=>array(65,-218,614,549),628=>array(65,0,560,540),629=>array(40,-23,574,549),630=>array(40,-23,844,549),631=>array(40,-9,808,542),632=>array(40,-201,674,729),633=>array(17,-8,324,541),634=>array(14,-8,321,729),635=>array(18,-217,391,541),636=>array(65,-200,372,549),637=>array(65,-218,372,549),638=>array(65,0,438,549),639=>array(35,-200,408,549),640=>array(65,0,571,540),641=>array(75,0,581,540),642=>array(14,-218,574,549),643=>array(24,-218,308,729),644=>array(18,-218,317,729),645=>array(14,-218,298,560),646=>array(3,-218,551,729),647=>array(13,-147,300,550),648=>array(14,-218,301,674),649=>array(15,-23,628,540),650=>array(40,-23,688,541),651=>array(65,-23,595,542),652=>array(10,0,532,540),653=>array(10,0,771,540),654=>array(10,1,539,760),655=>array(10,0,532,540),656=>array(21,-218,537,540),657=>array(21,-96,570,540),658=>array(35,-143,522,540),659=>array(35,-143,583,540),660=>array(40,0,532,744),661=>array(40,0,532,744),662=>array(40,-15,532,729),663=>array(65,-201,553,739),664=>array(40,-23,574,549),665=>array(65,0,523,540),666=>array(44,-10,541,547),667=>array(40,-23,602,549),668=>array(65,0,548,540),669=>array(3,-218,551,729),670=>array(33,-192,522,537),671=>array(60,0,408,540),672=>array(40,-218,622,688),673=>array(40,0,532,744),674=>array(40,0,532,744),675=>array(40,-23,983,729),676=>array(40,-143,989,729),677=>array(40,-96,1087,729),678=>array(14,-23,772,674),679=>array(14,-218,568,729),680=>array(14,-23,784,674),681=>array(14,-218,806,729),682=>array(65,-23,718,729),683=>array(65,0,634,729),684=>array(15,-1,511,740),685=>array(20,109,466,634),686=>array(32,-218,581,729),687=>array(32,-300,646,729),688=>array(31,390,340,865),689=>array(30,390,339,864),690=>array(27,246,162,863),691=>array(39,390,240,748),692=>array(32,383,233,741),693=>array(13,248,256,742),694=>array(48,390,378,742),695=>array(24,389,520,741),696=>array(10,248,355,742),697=>array(40,467,207,742),698=>array(40,467,415,742),699=>array(68,482,190,729),700=>array(68,482,190,729),701=>array(68,483,190,730),702=>array(116,573,254,798),703=>array(99,573,237,798),704=>array(9,376,324,769),705=>array(9,376,324,769),706=>array(11,545,321,796),707=>array(11,544,321,795),708=>array(25,559,308,765),709=>array(25,559,308,766),710=>array(8,607,326,757),711=>array(9,607,327,757),712=>array(127,588,207,785),713=>array(16,620,315,699),714=>array(20,607,216,757),715=>array(17,607,213,757),716=>array(100,-259,172,-62),717=>array(17,-151,316,-72),718=>array(78,-186,274,-36),719=>array(20,-186,216,-36),720=>array(77,0,255,561),721=>array(77,400,255,561),722=>array(94,-23,232,202),723=>array(87,-23,225,202),724=>array(0,134,333,412),725=>array(0,139,333,417),726=>array(0,99,333,433),727=>array(0,216,333,316),728=>array(35,605,299,748),729=>array(112,621,222,743),730=>array(77,590,257,770),731=>array(45,-234,268,0),732=>array(-9,621,345,749),733=>array(-44,610,340,757),734=>array(0,219,333,585),735=>array(90,589,410,803),736=>array(11,249,360,743),737=>array(56,389,148,864),738=>array(25,371,345,744),739=>array(16,389,354,741),740=>array(-9,390,311,874),741=>array(25,-15,469,800),742=>array(25,0,469,800),743=>array(25,0,469,800),744=>array(25,0,469,800),745=>array(25,0,469,800),746=>array(57,0,494,615),747=>array(57,0,494,623),748=>array(13,-184,331,-34),749=>array(17,544,316,781),750=>array(56,482,384,729),751=>array(25,-216,308,-10),752=>array(20,-216,303,-10),753=>array(12,-256,322,-5),754=>array(12,-263,322,-12),755=>array(76,-200,256,-20),756=>array(34,391,230,541),757=>array(17,391,389,541),758=>array(20,389,391,541),759=>array(23,-149,377,-21),760=>array(50,65,200,585),761=>array(9,497,191,764),762=>array(11,497,193,764),763=>array(9,-88,191,179),764=>array(9,-87,191,180),765=>array(30,-198,304,-61),766=>array(30,-200,303,-28),767=>array(-21,-237,348,-5),768=>array(-319,607,-123,757),769=>array(-215,607,-19,757),770=>array(-328,604,-10,754),771=>array(-339,624,15,752),772=>array(-314,620,-15,699),773=>array(-578,640,22,720),774=>array(-298,605,-34,748),775=>array(-218,621,-108,743),776=>array(-317,621,-11,743),777=>array(-284,564,-131,757),778=>array(-256,590,-76,770),779=>array(-377,610,7,757),780=>array(-324,607,-6,757),781=>array(-210,588,-130,785),782=>array(-279,588,-54,785),783=>array(-377,610,7,757),784=>array(-298,605,-34,842),785=>array(-298,605,-34,748),786=>array(-251,570,-119,760),787=>array(-194,563,-62,753),788=>array(-197,563,-65,753),789=>array(0,553,132,743),790=>array(-262,-197,-66,-47),791=>array(-261,-195,-65,-45),792=>array(-289,-300,-60,-44),793=>array(-289,-300,-60,-44),794=>array(-205,417,99,721),795=>array(-152,425,82,672),796=>array(-316,-268,-178,-43),797=>array(-299,-230,-31,-45),798=>array(-299,-230,-31,-45),799=>array(-294,-295,-36,-38),800=>array(-284,-172,-46,-92),801=>array(-201,-233,0,60),802=>array(-113,-233,88,60),803=>array(-221,-186,-111,-64),804=>array(-320,-192,-14,-70),805=>array(-269,-236,-89,-56),806=>array(-226,-300,-104,-68),807=>array(-306,-220,-39,0),808=>array(-288,-234,-65,0),809=>array(-203,-241,-123,-44),810=>array(-305,-197,-31,-60),811=>array(-320,-199,-14,-77),812=>array(-324,-200,-6,-50),813=>array(-335,-200,-17,-50),814=>array(-298,-195,-34,-52),815=>array(-301,-200,-37,-57),816=>array(-342,-179,12,-51),817=>array(-317,-180,-18,-101),818=>array(-440,-172,126,-92),819=>array(-452,-258,114,-55),820=>array(-464,216,-110,344),821=>array(-423,221,-124,300),822=>array(-550,226,16,306),823=>array(-701,3,-13,616),824=>array(-701,-61,-13,749),825=>array(-203,-253,-65,-28),826=>array(-305,-198,-31,-61),827=>array(-323,-300,-62,-39),828=>array(-352,-174,-46,-59),829=>array(-334,558,-14,772),830=>array(-225,579,-117,853),831=>array(-584,593,-18,796),832=>array(-316,608,-120,758),833=>array(-215,607,-19,757),834=>array(-339,624,15,752),835=>array(-194,563,-62,753),836=>array(-331,600,3,780),837=>array(-203,-200,-17,-47),838=>array(-305,611,-31,748),839=>array(-322,-274,-22,-72),840=>array(-323,-247,-97,-50),841=>array(-285,-238,-111,-64),842=>array(-378,580,-24,801),843=>array(-359,541,-5,900),844=>array(-381,581,-27,850),845=>array(-513,-231,-69,-46),846=>array(-386,-300,-144,-33),848=>array(-343,544,-33,795),849=>array(-249,575,-111,800),850=>array(-334,572,-70,801),851=>array(-358,-235,-38,-21),852=>array(-420,-256,-110,-5),853=>array(-404,-263,-94,-12),854=>array(-529,-251,-3,-36),855=>array(-210,575,-72,800),856=>array(-326,645,-216,767),857=>array(-421,-300,-156,-48),858=>array(-531,-243,-77,-33),859=>array(-359,564,-81,848),860=>array(-349,-243,350,-49),861=>array(-345,569,354,763),862=>array(-340,596,340,691),863=>array(-340,-155,340,-60),864=>array(-361,596,347,796),865=>array(-349,646,350,840),866=>array(-316,-280,325,-11),867=>array(-345,569,-156,788),868=>array(-363,570,-171,788),869=>array(-284,575,-230,853),870=>array(-364,570,-160,788),871=>array(-339,570,-155,785),872=>array(-329,571,-142,789),873=>array(-344,570,-147,856),874=>array(-329,569,-148,848),875=>array(-405,572,-114,781),876=>array(-289,572,-171,781),877=>array(-305,570,-195,836),878=>array(-365,570,-166,776),879=>array(-356,570,-158,776),884=>array(56,603,329,789),885=>array(58,-186,331,0),890=>array(130,-200,316,-47),894=>array(50,-174,200,520),900=>array(93,607,289,757),901=>array(-1,600,333,780),902=>array(10,0,687,757),903=>array(113,374,263,520),904=>array(0,0,762,757),905=>array(0,0,798,757),906=>array(0,0,350,757),908=>array(0,-23,760,757),910=>array(0,0,953,757),911=>array(0,0,821,749),912=>array(-24,-17,389,784),913=>array(10,0,687,729),914=>array(49,0,633,729),915=>array(80,0,614,729),916=>array(10,0,734,729),917=>array(80,0,625,729),918=>array(30,0,578,729),919=>array(80,0,669,729),920=>array(40,3,756,726),921=>array(80,0,230,729),922=>array(80,0,723,729),923=>array(10,0,703,729),924=>array(80,-7,830,725),925=>array(80,-8,694,724),926=>array(50,0,634,729),927=>array(40,-23,742,741),928=>array(80,-7,690,724),929=>array(80,-8,676,724),931=>array(30,0,646,729),932=>array(20,1,638,732),933=>array(5,0,756,729),934=>array(40,-13,749,723),935=>array(10,-7,774,728),936=>array(70,-10,762,732),937=>array(40,0,759,749),938=>array(1,0,307,900),939=>array(10,0,761,900),940=>array(40,-15,632,763),941=>array(40,-10,531,757),942=>array(20,-200,548,757),943=>array(60,-17,331,757),944=>array(60,-16,548,782),945=>array(40,-15,632,542),946=>array(60,-190,560,721),947=>array(10,-199,563,548),948=>array(40,-3,582,727),949=>array(40,-10,531,547),950=>array(40,-214,492,736),951=>array(10,-200,538,548),952=>array(40,-16,555,729),953=>array(60,-17,331,540),954=>array(60,-8,557,543),955=>array(10,-13,579,739),956=>array(60,-202,603,543),957=>array(10,-25,556,543),958=>array(40,-209,519,731),959=>array(40,-23,574,549),960=>array(30,-18,643,545),961=>array(60,-203,594,555),962=>array(40,-205,553,554),963=>array(40,-12,652,551),964=>array(20,-12,537,542),965=>array(60,-16,548,540),966=>array(40,-196,748,545),967=>array(0,-199,611,561),968=>array(50,-205,678,540),969=>array(40,-15,758,545),970=>array(0,-17,331,731),971=>array(60,-16,548,731),972=>array(40,-23,574,757),973=>array(60,-16,548,769),974=>array(40,-15,758,738),977=>array(39,-37,589,755),978=>array(20,0,739,745),979=>array(0,0,912,757),980=>array(20,0,739,900),981=>array(40,-201,674,729),982=>array(40,-34,758,559),983=>array(0,-241,642,549),1008=>array(0,-42,642,564),1009=>array(40,-211,574,557),1012=>array(40,-23,742,741),1013=>array(40,-37,318,555),1024=>array(80,0,625,900),1025=>array(80,0,625,900),1026=>array(20,-164,764,729),1027=>array(80,0,592,900),1028=>array(40,-23,681,741),1029=>array(40,-23,641,741),1030=>array(80,0,230,729),1031=>array(2,0,308,900),1032=>array(30,-23,492,729),1033=>array(20,0,1038,729),1034=>array(80,0,1076,729),1035=>array(20,0,764,729),1036=>array(80,0,723,900),1037=>array(80,0,673,900),1038=>array(10,0,691,900),1039=>array(80,-150,670,729),1040=>array(10,0,687,729),1041=>array(80,0,664,729),1042=>array(80,0,664,729),1043=>array(80,0,592,729),1044=>array(35,-150,865,729),1045=>array(80,0,625,729),1046=>array(10,0,1066,729),1047=>array(40,-23,641,741),1048=>array(80,0,673,729),1049=>array(80,0,673,900),1050=>array(80,0,723,729),1051=>array(20,-12,631,729),1052=>array(80,0,790,729),1053=>array(80,0,669,729),1054=>array(40,-23,742,741),1055=>array(80,0,669,729),1056=>array(80,0,637,729),1057=>array(40,-23,681,741),1058=>array(30,0,614,729),1059=>array(10,0,691,729),1060=>array(40,0,872,729),1061=>array(10,0,641,729),1062=>array(80,-150,779,729),1063=>array(70,0,626,729),1064=>array(80,0,979,729),1065=>array(80,-150,1109,729),1066=>array(20,0,807,729),1067=>array(80,0,896,729),1068=>array(80,0,637,729),1069=>array(40,-23,681,741),1070=>array(80,-23,1055,741),1071=>array(10,0,621,729),1072=>array(40,-23,536,549),1073=>array(40,-23,555,777),1074=>array(65,0,523,540),1075=>array(65,0,413,540),1076=>array(20,-125,659,540),1077=>array(40,-23,543,549),1078=>array(5,0,777,540),1079=>array(40,-23,531,549),1080=>array(65,0,560,540),1081=>array(65,0,560,723),1082=>array(65,0,554,540),1083=>array(20,-10,508,540),1084=>array(65,0,611,540),1085=>array(65,0,548,540),1086=>array(40,-23,574,549),1087=>array(65,0,548,540),1088=>array(65,-218,581,549),1089=>array(40,-23,528,549),1090=>array(15,0,425,540),1091=>array(10,-219,539,540),1092=>array(40,-218,932,719),1093=>array(10,0,529,540),1094=>array(65,-125,634,540),1095=>array(50,0,508,540),1096=>array(65,0,831,540),1097=>array(65,-125,950,540),1098=>array(20,0,663,540),1099=>array(65,0,723,540),1100=>array(65,0,537,540),1101=>array(40,-23,528,549),1102=>array(65,-23,817,549),1103=>array(10,0,516,540),1104=>array(40,-23,543,757),1105=>array(40,-23,543,731),1106=>array(20,-173,566,729),1107=>array(65,0,413,757),1108=>array(40,-23,528,549),1109=>array(33,-23,524,549),1110=>array(70,0,210,729),1111=>array(-3,0,303,743),1112=>array(4,-218,210,729),1113=>array(20,0,853,540),1114=>array(65,0,867,540),1115=>array(20,0,564,729),1116=>array(65,0,554,757),1117=>array(65,0,560,757),1118=>array(10,-219,539,752),1119=>array(65,-125,549,540),1120=>array(20,0,966,729),1121=>array(10,0,726,541),1136=>array(70,-10,762,732),1137=>array(65,-205,693,540),1138=>array(40,-23,742,741),1139=>array(36,-23,570,549),1148=>array(20,0,966,999),1149=>array(10,0,726,815),1150=>array(20,0,966,900),1151=>array(10,0,726,729),1154=>array(22,-220,427,508),1155=>array(-390,611,-10,799),1156=>array(-298,605,-34,748),1157=>array(-226,592,-36,724),1158=>array(-223,592,-33,724),1159=>array(-588,579,0,780),1160=>array(-764,-122,281,869),1161=>array(-769,-235,339,873),1162=>array(82,-150,785,900),1163=>array(60,-125,641,723),1164=>array(15,0,642,729),1165=>array(15,0,575,540),1166=>array(80,0,637,729),1167=>array(60,-218,576,549),1168=>array(82,0,594,864),1169=>array(60,0,408,666),1170=>array(15,0,605,729),1171=>array(15,0,429,540),1172=>array(82,-172,607,729),1173=>array(60,-187,534,540),1174=>array(10,-150,1066,729),1175=>array(5,-125,777,540),1176=>array(42,-234,643,741),1177=>array(32,-234,523,549),1178=>array(82,-150,725,729),1179=>array(60,-125,549,540),1180=>array(82,0,725,729),1181=>array(60,0,549,540),1182=>array(10,0,732,729),1183=>array(10,0,550,540),1184=>array(14,0,887,729),1185=>array(15,0,675,540),1186=>array(82,-150,791,729),1187=>array(60,-125,629,540),1188=>array(82,0,982,729),1189=>array(60,0,741,540),1190=>array(81,-172,1045,729),1191=>array(60,-187,877,540),1192=>array(44,-23,926,741),1193=>array(36,-23,733,549),1194=>array(44,-234,685,741),1195=>array(36,-234,524,549),1196=>array(15,-150,599,729),1197=>array(13,-125,423,540),1198=>array(10,0,633,729),1199=>array(5,-189,568,540),1200=>array(10,0,633,729),1201=>array(20,-189,583,540),1202=>array(5,-150,636,729),1203=>array(5,-125,524,540),1204=>array(15,-150,905,729),1205=>array(21,-125,715,540),1206=>array(68,-150,734,729),1207=>array(48,-125,592,540),1208=>array(60,0,616,729),1209=>array(60,0,518,540),1210=>array(70,0,626,729),1211=>array(70,0,528,540),1212=>array(42,-23,957,745),1213=>array(32,-23,725,549),1214=>array(42,-197,957,745),1215=>array(32,-197,725,549),1216=>array(82,0,232,729),1217=>array(10,0,1066,900),1218=>array(5,0,777,723),1219=>array(80,-172,692,729),1220=>array(60,-188,510,540),1221=>array(36,-150,757,729),1222=>array(29,-125,603,540),1223=>array(82,-172,671,729),1224=>array(60,-187,543,540),1225=>array(82,-150,781,729),1226=>array(60,-125,629,540),1227=>array(68,-150,624,729),1228=>array(60,-125,518,540),1229=>array(82,-150,902,729),1230=>array(60,-125,692,540),1231=>array(82,0,232,729),1232=>array(-1,0,676,900),1233=>array(40,-23,536,748),1234=>array(-1,0,676,900),1235=>array(40,-23,536,743),1236=>array(5,0,970,729),1237=>array(36,-24,866,549),1238=>array(80,0,625,895),1239=>array(40,-23,543,733),1240=>array(44,-23,685,741),1241=>array(30,-24,533,548),1242=>array(44,-23,685,900),1243=>array(30,-24,533,712),1244=>array(10,0,1066,900),1245=>array(5,0,777,712),1246=>array(40,-23,641,900),1247=>array(40,-23,531,712),1248=>array(40,-23,527,729),1249=>array(35,-143,522,540),1250=>array(80,0,673,838),1251=>array(65,0,560,649),1252=>array(80,0,673,900),1253=>array(65,0,560,712),1254=>array(40,-23,742,900),1255=>array(40,-23,574,743),1256=>array(40,-23,742,741),1257=>array(36,-23,570,549),1258=>array(40,-23,742,900),1259=>array(36,-23,570,762),1260=>array(40,-23,681,900),1261=>array(40,-23,528,712),1262=>array(4,0,685,838),1263=>array(10,-219,539,649),1264=>array(5,0,686,900),1265=>array(5,-219,534,712),1266=>array(4,0,685,900),1267=>array(4,-219,533,737),1268=>array(70,0,626,900),1269=>array(50,0,508,712),1270=>array(82,-150,594,729),1271=>array(60,-125,408,540),1272=>array(80,0,896,900),1273=>array(65,0,723,712),1296=>array(32,-23,633,741),1297=>array(29,-23,520,549),1298=>array(36,-199,647,729),1299=>array(29,-168,517,540),1306=>array(40,-54,742,741),1307=>array(48,-218,564,549),1308=>array(20,0,939,729),1309=>array(10,0,771,540),1310=>array(82,0,725,729),1311=>array(60,0,549,540),1329=>array(70,-130,750,729),1330=>array(70,0,648,752),1331=>array(45,1,755,751),1332=>array(65,0,752,752),1333=>array(70,0,648,752),1334=>array(60,1,791,760),1335=>array(70,4,466,746),1336=>array(70,0,648,752),1337=>array(70,-27,840,753),1338=>array(45,-24,666,743),1339=>array(70,2,682,757),1340=>array(70,2,400,741),1341=>array(70,-20,837,748),1342=>array(42,-29,831,801),1343=>array(65,0,643,729),1344=>array(20,-99,630,750),1345=>array(35,-59,626,753),1346=>array(60,0,747,752),1347=>array(35,1,663,754),1348=>array(70,-23,757,729),1349=>array(35,-26,590,753),1350=>array(0,0,687,729),1351=>array(45,-25,611,770),1352=>array(65,1,678,754),1353=>array(45,-47,612,753),1354=>array(50,1,663,754),1355=>array(65,-1,785,760),1356=>array(65,0,752,752),1357=>array(65,-21,678,741),1358=>array(45,1,748,754),1359=>array(36,-37,656,753),1360=>array(70,0,648,752),1361=>array(40,-23,600,753),1362=>array(70,1,395,748),1363=>array(35,-24,783,750),1364=>array(20,1,632,753),1365=>array(35,-27,770,754),1366=>array(35,-24,719,750),1369=>array(99,573,237,798),1370=>array(16,456,180,748),1371=>array(2,563,230,743),1372=>array(-3,520,327,790),1373=>array(17,607,213,757),1374=>array(9,567,348,815),1375=>array(8,563,346,734),1377=>array(60,-25,813,549),1378=>array(65,-218,548,549),1379=>array(30,-218,624,549),1380=>array(65,-201,626,549),1381=>array(60,-23,543,729),1382=>array(35,-218,629,549),1383=>array(70,-121,387,729),1384=>array(65,-218,548,549),1385=>array(65,-200,628,549),1386=>array(35,-20,681,729),1387=>array(70,-200,544,729),1388=>array(70,-201,288,729),1389=>array(70,-200,771,729),1390=>array(35,-23,640,748),1391=>array(65,-200,548,729),1392=>array(70,0,542,741),1393=>array(35,-23,569,729),1394=>array(65,-200,626,549),1395=>array(30,0,588,797),1396=>array(65,-23,548,729),1397=>array(5,-235,259,549),1398=>array(65,-23,548,729),1399=>array(26,-200,510,557),1400=>array(65,0,536,560),1401=>array(20,-200,372,540),1402=>array(55,-200,808,549),1403=>array(35,-200,542,562),1404=>array(65,0,553,549),1405=>array(65,-23,535,548),1406=>array(65,-200,626,729),1407=>array(65,-23,891,549),1408=>array(65,-200,548,549),1409=>array(40,-200,547,560),1410=>array(70,0,318,540),1411=>array(65,-200,891,729),1412=>array(65,-200,581,549),1413=>array(35,-37,571,555),1414=>array(35,-200,728,729),1415=>array(65,-23,626,729),1417=>array(50,0,200,520),1418=>array(21,141,381,298),1423=>array(65,0,718,752),1456=>array(299,-267,381,-60),1457=>array(136,-267,503,-60),1458=>array(101,-267,468,-60),1459=>array(126,-260,500,-60),1460=>array(299,-142,381,-60),1461=>array(234,-142,446,-60),1462=>array(218,-267,428,-60),1463=>array(198,-142,398,-60),1464=>array(208,-248,408,-60),1465=>array(0,660,82,742),1467=>array(157,-266,498,-60),1468=>array(258,259,340,341),1469=>array(218,-248,300,-60),1470=>array(63,485,444,600),1471=>array(193,660,393,742),1472=>array(79,-100,218,700),1473=>array(650,639,732,721),1474=>array(101,639,183,721),1475=>array(50,0,200,520),1476=>array(261,639,343,721),1488=>array(61,0,650,600),1489=>array(77,0,610,600),1490=>array(47,0,503,600),1491=>array(63,0,566,600),1492=>array(79,0,612,600),1493=>array(79,0,218,600),1494=>array(63,0,371,600),1495=>array(79,0,612,600),1496=>array(76,0,609,600),1497=>array(73,276,212,600),1498=>array(62,-200,520,600),1499=>array(76,0,534,600),1500=>array(62,0,595,750),1501=>array(80,0,613,600),1502=>array(67,0,633,600),1503=>array(79,-200,218,600),1504=>array(73,0,359,600),1505=>array(76,0,609,600),1506=>array(60,-55,579,600),1507=>array(72,-200,590,601),1508=>array(79,0,597,600),1509=>array(27,-200,544,600),1510=>array(61,0,606,600),1511=>array(80,-200,599,600),1512=>array(63,0,530,600),1513=>array(76,0,766,600),1514=>array(62,0,685,600),1520=>array(79,0,475,600),1521=>array(73,0,471,600),1522=>array(73,276,470,600),1523=>array(50,470,188,729),1524=>array(50,470,424,729),2304=>array(-310,636,84,895),2305=>array(-310,661,84,920),2306=>array(-191,720,-23,888),2307=>array(66,92,234,539),2308=>array(9,-20,747,870),2309=>array(9,-20,747,633),2310=>array(3,-20,938,633),2311=>array(-10,-178,514,633),2312=>array(-10,-178,514,920),2313=>array(-10,-26,632,633),2314=>array(-10,-26,854,633),2315=>array(-10,-31,971,633),2316=>array(-10,-139,691,633),2317=>array(-10,-155,483,830),2318=>array(-10,-155,483,870),2319=>array(-10,-155,483,633),2320=>array(-10,-155,483,900),2321=>array(3,-20,938,818),2322=>array(3,-20,938,870),2323=>array(3,-20,938,900),2324=>array(3,-20,938,914),2325=>array(-10,-20,799,633),2326=>array(-10,-20,830,633),2327=>array(-10,-20,572,633),2328=>array(-10,-20,640,633),2329=>array(-10,-24,780,633),2330=>array(-10,-20,670,633),2331=>array(-10,-28,694,633),2332=>array(-10,-20,753,633),2333=>array(-10,-178,742,633),2334=>array(-10,-20,730,633),2335=>array(-10,-26,618,633),2336=>array(-10,-14,581,633),2337=>array(-10,-24,661,633),2338=>array(-10,-26,588,633),2339=>array(-10,-20,658,633),2340=>array(-10,-29,614,633),2341=>array(41,-20,710,633),2342=>array(-10,-59,557,633),2343=>array(41,-20,643,633),2344=>array(-10,-20,618,633),2345=>array(-10,-63,618,633),2346=>array(-10,-20,529,633),2347=>array(-10,-20,783,633),2348=>array(-10,-20,542,633),2349=>array(6,-20,628,633),2350=>array(-10,-20,568,633),2351=>array(-10,-20,606,633),2352=>array(-10,-42,485,633),2353=>array(-10,-90,485,633),2354=>array(-10,-24,706,633),2355=>array(-10,38,711,633),2356=>array(-10,-119,711,633),2357=>array(-10,-20,542,633),2358=>array(-10,-44,696,633),2359=>array(-10,-20,529,633),2360=>array(-10,-30,717,633),2361=>array(-10,-90,536,633),2362=>array(-131,634,-43,810),2363=>array(-10,-20,276,810),2364=>array(-394,-117,-226,51),2365=>array(23,-35,482,633),2366=>array(-10,-20,276,633),2367=>array(-10,-20,710,889),2368=>array(-243,-19,276,875),2369=>array(-441,-276,28,16),2370=>array(-326,-276,143,16),2371=>array(-314,-268,3,16),2372=>array(-314,-310,46,162),2373=>array(-310,651,84,826),2374=>array(-463,634,-73,870),2375=>array(-395,634,-73,900),2376=>array(-424,634,-73,914),2377=>array(-63,-20,331,826),2378=>array(-215,-20,276,870),2379=>array(-137,-20,276,900),2380=>array(-160,-20,276,914),2381=>array(-185,-264,101,-44),2382=>array(0,-19,199,633),2383=>array(-284,-20,276,870),2384=>array(21,-26,864,798),2385=>array(-131,634,-43,910),2386=>array(-554,-267,16,-196),2387=>array(-490,726,-190,910),2388=>array(-222,726,78,910),2389=>array(-310,598,84,900),2390=>array(-454,-174,14,-24),2391=>array(-454,-310,14,-24),2392=>array(-10,-127,799,633),2393=>array(-10,-190,830,633),2394=>array(-10,-20,572,633),2395=>array(-10,-111,753,633),2396=>array(-10,-205,661,633),2397=>array(-10,-205,588,633),2398=>array(-10,-93,783,633),2399=>array(-10,-130,606,633),2400=>array(-10,-208,950,633),2401=>array(-10,-311,700,633),2402=>array(-436,-300,58,153),2403=>array(-437,-300,66,296),2404=>array(351,-145,458,689),2405=>array(218,-131,538,703),2406=>array(70,73,504,518),2407=>array(93,-20,467,633),2408=>array(59,-97,518,633),2409=>array(70,-146,506,633),2410=>array(58,-16,530,637),2411=>array(82,-20,562,641),2412=>array(82,-132,510,633),2413=>array(14,-14,530,624),2414=>array(110,-14,480,631),2415=>array(109,-138,478,633),2416=>array(81,172,313,402),2417=>array(119,707,268,847),2418=>array(9,-20,788,826),2419=>array(9,-20,747,810),2420=>array(3,-20,938,810),2421=>array(3,-20,938,870),2422=>array(9,-174,747,633),2423=>array(9,-310,747,633),2425=>array(-10,-164,753,633),2426=>array(-10,-20,606,633),2427=>array(-10,-40,618,633),2428=>array(-10,-40,753,633),2429=>array(79,-19,538,633),2430=>array(-10,-105,661,633),2431=>array(-10,-40,542,633),2561=>array(-315,704,-2,959),2562=>array(-82,706,82,870),2563=>array(40,29,305,639),2565=>array(-9,0,917,641),2566=>array(-9,0,1169,641),2567=>array(-54,-7,944,933),2568=>array(-8,-7,978,933),2569=>array(-9,-224,774,921),2570=>array(-9,-359,774,921),2575=>array(-8,-7,739,929),2576=>array(-9,0,917,966),2579=>array(-9,-7,793,948),2580=>array(-9,0,917,975),2581=>array(-10,0,742,641),2582=>array(-9,0,690,641),2583=>array(-10,0,758,641),2584=>array(-14,0,809,641),2585=>array(-16,-16,724,641),2586=>array(-14,0,744,641),2587=>array(-10,-5,708,641),2588=>array(-12,0,708,641),2589=>array(-9,-27,687,641),2590=>array(-8,-13,704,641),2591=>array(-12,-13,703,641),2592=>array(-14,-13,730,641),2593=>array(-5,-5,697,641),2594=>array(-11,-22,714,641),2595=>array(-9,-5,744,641),2596=>array(-8,-8,705,642),2597=>array(-8,0,708,642),2598=>array(-10,-5,714,641),2599=>array(-13,0,683,641),2600=>array(-10,-20,687,641),2602=>array(-9,0,697,641),2603=>array(-8,-12,708,641),2604=>array(-6,0,676,641),2605=>array(-6,-5,674,641),2606=>array(-9,0,717,641),2607=>array(-13,0,796,641),2608=>array(-8,-12,688,641),2610=>array(-7,-16,747,641),2611=>array(-50,-16,827,641),2613=>array(-9,-8,679,641),2614=>array(-14,0,724,641),2616=>array(-9,0,719,641),2617=>array(-12,0,671,641),2620=>array(-200,-172,-74,-44),2622=>array(-20,250,332,641),2623=>array(-12,0,537,933),2624=>array(-231,0,329,933),2625=>array(-545,-224,-158,-70),2626=>array(-545,-363,-158,-39),2631=>array(-584,658,-160,929),2632=>array(-628,656,-150,973),2635=>array(-542,675,-148,976),2636=>array(-614,669,-132,975),2637=>array(-377,-285,-98,-52),2641=>array(-377,-285,-98,-52),2649=>array(-14,-40,700,642),2650=>array(-62,-17,828,641),2651=>array(-7,0,735,641),2652=>array(-8,-16,714,641),2654=>array(-25,-66,729,642),2662=>array(33,17,642,625),2663=>array(27,-55,593,693),2664=>array(22,2,627,675),2665=>array(18,-8,624,674),2666=>array(22,-6,580,674),2667=>array(9,0,562,641),2668=>array(21,0,558,834),2669=>array(9,-2,642,674),2670=>array(12,0,667,649),2671=>array(13,0,683,792),2672=>array(-306,697,-14,935),2673=>array(-313,694,0,929),2674=>array(-8,-7,739,641),2675=>array(-9,-5,774,921),2676=>array(4,-49,1556,978),2677=>array(-288,-275,0,-24),4256=>array(60,0,536,720),4257=>array(60,0,585,720),4258=>array(60,0,604,740),4259=>array(60,20,779,740),4260=>array(60,0,547,740),4261=>array(60,0,550,740),4262=>array(60,0,767,740),4263=>array(80,0,848,740),4264=>array(60,20,579,740),4265=>array(60,0,550,740),4266=>array(60,20,891,740),4267=>array(60,0,526,740),4268=>array(80,0,548,720),4269=>array(80,20,755,740),4270=>array(60,0,550,720),4271=>array(30,0,530,720),4272=>array(60,20,744,720),4273=>array(80,0,555,720),4274=>array(60,0,763,740),4275=>array(30,0,667,740),4276=>array(60,0,790,740),4277=>array(60,0,547,720),4278=>array(60,20,780,740),4279=>array(60,0,547,720),4280=>array(50,0,585,740),4281=>array(80,20,550,740),4282=>array(80,0,719,720),4283=>array(60,0,518,720),4284=>array(80,0,615,740),4285=>array(60,0,644,720),4286=>array(80,0,548,720),4287=>array(6,0,856,739),4288=>array(60,0,549,720),4304=>array(30,0,433,460),4305=>array(30,0,486,720),4306=>array(30,-260,534,420),4307=>array(30,-260,676,420),4308=>array(30,-260,429,420),4309=>array(30,-260,446,420),4310=>array(30,0,593,740),4311=>array(30,0,681,420),4312=>array(30,20,464,420),4313=>array(30,-260,446,420),4314=>array(30,-260,864,420),4315=>array(30,0,470,740),4316=>array(30,0,470,740),4317=>array(30,20,682,420),4318=>array(30,0,463,720),4319=>array(0,-260,473,420),4320=>array(30,20,682,720),4321=>array(30,21,473,740),4322=>array(30,-260,680,601),4323=>array(0,-260,640,420),4324=>array(30,-260,677,420),4325=>array(30,-260,429,720),4326=>array(30,-260,661,420),4327=>array(30,-260,435,420),4328=>array(0,0,462,740),4329=>array(30,20,450,740),4330=>array(30,-265,626,420),4331=>array(30,0,470,720),4332=>array(30,0,492,740),4333=>array(30,-260,524,720),4334=>array(30,0,470,720),4335=>array(0,-260,686,418),4336=>array(30,0,480,720),4337=>array(0,6,709,725),4338=>array(30,-4,420,394),4339=>array(30,-274,449,386),4340=>array(30,-274,472,724),4341=>array(30,6,501,734),4345=>array(30,-280,534,400),4347=>array(63,1,478,588),4348=>array(78,228,409,783),5024=>array(60,0,664,729),5025=>array(60,-10,678,729),5026=>array(1,0,585,729),5027=>array(12,-25,853,729),5028=>array(39,-23,1006,741),5029=>array(60,0,210,729),5030=>array(46,-25,598,743),5031=>array(43,-24,815,742),5032=>array(60,0,576,729),5033=>array(36,-25,752,729),5034=>array(-16,0,661,729),5035=>array(0,-23,462,729),5036=>array(60,0,605,729),5037=>array(26,0,895,729),5038=>array(35,0,579,741),5039=>array(-19,-24,760,752),5040=>array(60,0,501,729),5041=>array(60,0,594,729),5042=>array(4,-24,924,742),5043=>array(6,0,925,729),5044=>array(26,-25,600,743),5045=>array(57,0,576,754),5046=>array(40,-23,698,741),5047=>array(60,0,770,729),5048=>array(45,0,507,752),5049=>array(10,-25,953,729),5050=>array(40,-12,897,752),5051=>array(60,0,649,729),5052=>array(26,-25,562,729),5053=>array(27,-25,795,729),5054=>array(39,-23,741,741),5055=>array(37,-130,556,729),5056=>array(39,-21,708,743),5057=>array(-16,-23,804,742),5058=>array(60,0,571,729),5059=>array(45,0,593,729),5060=>array(42,0,548,752),5061=>array(39,-23,1091,741),5062=>array(40,0,624,729),5063=>array(21,-25,870,754),5064=>array(23,-25,893,743),5065=>array(4,0,1297,741),5066=>array(21,-25,870,754),5067=>array(45,-25,649,743),5068=>array(57,-23,635,729),5069=>array(10,-25,1023,754),5070=>array(22,0,623,729),5071=>array(60,0,617,729),5072=>array(19,0,618,729),5073=>array(44,-25,793,738),5074=>array(60,0,624,729),5075=>array(58,-23,520,729),5076=>array(-2,0,864,729),5077=>array(41,-25,593,743),5078=>array(9,-25,721,729),5079=>array(-12,0,582,729),5080=>array(15,0,609,729),5081=>array(-2,0,621,729),5082=>array(41,-25,593,743),5083=>array(42,-25,898,742),5084=>array(4,-25,853,742),5085=>array(58,0,557,752),5086=>array(60,0,559,729),5087=>array(41,-23,682,741),5088=>array(28,-25,851,729),5089=>array(19,-24,990,742),5090=>array(60,0,617,729),5091=>array(39,-25,717,743),5092=>array(10,0,790,729),5093=>array(60,0,797,729),5094=>array(60,0,703,729),5095=>array(20,-25,565,729),5096=>array(41,-24,925,742),5097=>array(39,-98,968,743),5098=>array(3,-26,991,744),5099=>array(39,-23,741,741),5100=>array(42,-25,879,742),5101=>array(-9,-25,638,741),5102=>array(43,-25,601,743),5103=>array(21,-25,870,754),5104=>array(28,-25,687,741),5105=>array(-18,-25,835,729),5106=>array(57,0,568,752),5107=>array(39,-21,938,743),5108=>array(60,0,644,729),7680=>array(10,-218,687,729),7681=>array(40,-219,536,549),7682=>array(80,0,664,900),7683=>array(65,-23,581,752),7684=>array(80,-205,664,729),7685=>array(65,-205,581,729),7686=>array(80,-151,664,729),7687=>array(65,-151,581,729),7688=>array(40,-220,681,900),7689=>array(40,-220,528,757),7690=>array(80,0,684,900),7691=>array(40,-23,556,731),7692=>array(80,-205,684,729),7693=>array(40,-205,556,729),7694=>array(80,-151,684,729),7695=>array(40,-151,556,729),7696=>array(80,-213,684,729),7697=>array(40,-236,556,729),7698=>array(80,-202,684,729),7699=>array(40,-202,556,729),7700=>array(80,0,625,983),7701=>array(40,-23,543,900),7702=>array(80,0,625,986),7703=>array(40,-23,543,900),7704=>array(80,-202,625,729),7705=>array(40,-202,543,549),7706=>array(80,-174,625,729),7707=>array(40,-174,543,549),7708=>array(80,-213,625,900),7709=>array(40,-236,543,745),7710=>array(80,0,592,900),7711=>array(14,0,313,900),7712=>array(40,-21,709,879),7713=>array(40,-218,547,699),7714=>array(80,0,669,900),7715=>array(65,0,539,801),7716=>array(80,-205,669,729),7717=>array(65,-205,539,729),7718=>array(80,0,669,900),7719=>array(65,0,539,900),7720=>array(51,-200,672,729),7721=>array(65,-201,539,729),7722=>array(80,-184,669,729),7723=>array(65,-184,539,729),7724=>array(-22,-174,332,729),7725=>array(-37,-174,317,729),7726=>array(2,0,308,1040),7727=>array(-4,0,302,900),7728=>array(80,0,723,900),7729=>array(65,0,554,896),7730=>array(80,-205,723,729),7731=>array(65,-205,554,729),7732=>array(80,-151,723,729),7733=>array(65,-151,554,729),7734=>array(80,-205,579,729),7735=>array(65,-205,205,729),7736=>array(80,-205,579,879),7737=>array(-12,-205,287,879),7738=>array(80,-151,579,729),7739=>array(-10,-151,289,729),7740=>array(80,-202,579,729),7741=>array(-25,-202,293,729),7742=>array(80,0,790,900),7743=>array(65,0,829,748),7744=>array(80,0,790,900),7745=>array(65,0,829,750),7746=>array(80,-205,790,729),7747=>array(65,-205,829,549),7748=>array(80,0,673,900),7749=>array(65,0,548,751),7750=>array(80,-205,673,729),7751=>array(65,-205,548,549),7752=>array(80,-151,673,729),7753=>array(65,-151,548,549),7754=>array(80,-200,673,729),7755=>array(65,-200,548,549),7756=>array(40,-23,742,1029),7757=>array(40,-23,574,900),7758=>array(40,-23,742,1045),7759=>array(40,-23,574,900),7760=>array(40,-23,742,990),7761=>array(40,-23,574,900),7762=>array(40,-23,742,985),7763=>array(40,-23,574,900),7764=>array(80,0,637,900),7765=>array(65,-218,581,757),7766=>array(80,0,637,900),7767=>array(65,-218,581,750),7768=>array(80,0,677,900),7769=>array(65,0,372,749),7770=>array(80,-205,677,729),7771=>array(65,-205,372,549),7772=>array(80,-205,677,860),7773=>array(65,-205,372,683),7774=>array(80,-151,677,729),7775=>array(46,-151,372,549),7776=>array(40,-23,641,900),7777=>array(30,-23,521,752),7778=>array(40,-205,641,741),7779=>array(30,-205,521,549),7780=>array(40,-23,641,1023),7781=>array(30,-23,521,898),7782=>array(40,-23,641,1026),7783=>array(30,-23,521,896),7784=>array(40,-205,641,900),7785=>array(30,-205,521,749),7786=>array(30,0,614,900),7787=>array(21,-23,308,871),7788=>array(30,-205,614,729),7789=>array(21,-205,308,674),7790=>array(30,-151,614,729),7791=>array(20,-151,319,674),7792=>array(30,-202,614,729),7793=>array(7,-202,325,674),7794=>array(80,-205,658,729),7795=>array(65,-205,548,540),7796=>array(80,-174,658,729),7797=>array(65,-174,548,540),7798=>array(80,-200,658,729),7799=>array(65,-200,548,540),7800=>array(80,-23,658,1026),7801=>array(65,-23,548,897),7802=>array(80,-23,658,983),7803=>array(65,-23,548,871),7804=>array(20,0,643,900),7805=>array(10,0,532,753),7806=>array(20,-205,643,729),7807=>array(10,-205,532,540),7808=>array(20,0,939,900),7809=>array(10,0,771,749),7810=>array(20,0,939,900),7811=>array(10,0,771,757),7812=>array(20,0,939,900),7813=>array(10,0,771,750),7814=>array(20,0,939,900),7815=>array(10,0,771,750),7816=>array(20,-205,939,729),7817=>array(10,-205,771,540),7818=>array(22,0,653,900),7819=>array(15,0,534,749),7820=>array(22,0,653,900),7821=>array(15,0,534,752),7822=>array(10,0,633,900),7823=>array(10,-219,539,747),7824=>array(30,0,578,900),7825=>array(30,0,477,757),7826=>array(30,-205,578,729),7827=>array(30,-205,477,540),7828=>array(30,-151,578,729),7829=>array(30,-151,477,540),7830=>array(65,-151,539,729),7831=>array(0,-23,308,849),7832=>array(10,0,771,752),7833=>array(10,-219,539,752),7834=>array(40,-23,551,798),7835=>array(14,0,308,900),7838=>array(80,-23,701,744),7840=>array(10,-205,687,729),7841=>array(40,-205,536,549),7842=>array(10,0,687,969),7843=>array(40,-23,536,786),7844=>array(10,0,696,1000),7845=>array(40,-23,556,900),7846=>array(10,0,687,1000),7847=>array(0,-23,536,900),7848=>array(10,0,687,1000),7849=>array(40,-23,536,900),7850=>array(10,0,687,1029),7851=>array(40,-23,536,900),7852=>array(10,-205,687,900),7853=>array(40,-205,536,759),7854=>array(10,0,687,1011),7855=>array(40,-23,536,900),7856=>array(10,0,687,1000),7857=>array(40,-23,536,900),7858=>array(10,0,687,1066),7859=>array(40,-23,536,900),7860=>array(10,0,687,1059),7861=>array(40,-23,536,900),7862=>array(10,-205,687,900),7863=>array(40,-205,536,752),7864=>array(80,-205,625,729),7865=>array(40,-205,543,549),7866=>array(80,0,625,976),7867=>array(40,-23,543,786),7868=>array(80,0,625,900),7869=>array(40,-23,543,737),7870=>array(80,0,667,1000),7871=>array(40,-23,566,900),7872=>array(35,0,625,1000),7873=>array(14,-23,543,900),7874=>array(80,0,627,1000),7875=>array(40,-23,543,900),7876=>array(80,0,625,1024),7877=>array(40,-23,543,900),7878=>array(80,-205,625,900),7879=>array(40,-205,543,759),7880=>array(80,0,236,976),7881=>array(70,0,231,771),7882=>array(80,-205,230,729),7883=>array(70,-205,210,729),7884=>array(40,-205,742,741),7885=>array(40,-205,574,549),7886=>array(40,-23,742,977),7887=>array(40,-23,574,776),7888=>array(40,-23,742,1000),7889=>array(40,-23,591,900),7890=>array(40,-23,742,1000),7891=>array(28,-23,574,900),7892=>array(40,-23,742,1000),7893=>array(40,-23,574,900),7894=>array(40,-23,742,1027),7895=>array(40,-23,574,900),7896=>array(40,-205,742,900),7897=>array(40,-205,574,759),7898=>array(40,-23,791,900),7899=>array(40,-23,658,757),7900=>array(40,-23,791,900),7901=>array(40,-23,658,757),7902=>array(40,-23,791,976),7903=>array(40,-23,658,772),7904=>array(40,-23,791,900),7905=>array(40,-23,658,779),7906=>array(40,-205,791,763),7907=>array(40,-205,658,585),7908=>array(80,-205,658,729),7909=>array(65,-205,548,540),7910=>array(80,-23,658,963),7911=>array(65,-23,548,751),7912=>array(80,-23,773,900),7913=>array(65,-23,663,757),7914=>array(80,-23,773,900),7915=>array(65,-23,663,757),7916=>array(80,-23,773,941),7917=>array(65,-23,663,766),7918=>array(80,-23,773,900),7919=>array(65,-23,663,746),7920=>array(80,-205,773,896),7921=>array(65,-205,663,707),7922=>array(10,0,633,900),7923=>array(10,-219,539,757),7924=>array(10,-205,633,729),7925=>array(10,-219,539,540),7926=>array(10,0,633,949),7927=>array(10,-219,539,749),7928=>array(10,0,633,900),7929=>array(10,-219,539,752),7936=>array(40,-15,632,799),7937=>array(40,-15,632,799),7938=>array(40,-15,632,800),7939=>array(40,-15,632,799),7940=>array(40,-15,632,800),7941=>array(40,-15,632,799),7942=>array(40,-15,632,899),7943=>array(40,-15,632,899),7944=>array(10,0,687,741),7945=>array(10,0,687,747),7946=>array(0,0,860,745),7947=>array(0,0,844,738),7948=>array(0,0,791,738),7949=>array(0,0,802,753),7950=>array(-33,0,725,878),7951=>array(-8,0,745,881),7952=>array(40,-10,531,799),7953=>array(40,-10,531,799),7954=>array(40,-10,531,800),7955=>array(40,-10,531,799),7956=>array(40,-10,531,800),7957=>array(40,-10,531,799),7960=>array(0,0,718,741),7961=>array(0,0,720,741),7962=>array(0,0,927,742),7963=>array(0,0,913,741),7964=>array(0,0,909,738),7965=>array(0,0,915,741),7968=>array(10,-200,538,802),7969=>array(10,-200,538,802),7970=>array(10,-200,538,800),7971=>array(10,-200,538,799),7972=>array(10,-200,538,797),7973=>array(10,-200,538,790),7974=>array(10,-200,538,900),7975=>array(10,-200,538,900),7976=>array(0,0,763,741),7977=>array(0,0,766,741),7978=>array(0,0,961,742),7979=>array(0,0,952,741),7980=>array(0,0,947,738),7981=>array(0,0,959,741),7982=>array(-51,0,853,881),7983=>array(-25,0,864,878),7984=>array(59,-17,331,799),7985=>array(60,-17,331,799),7986=>array(22,-17,389,800),7987=>array(26,-17,391,799),7988=>array(38,-17,394,800),7989=>array(39,-17,390,799),7990=>array(19,-17,386,901),7991=>array(37,-17,400,899),7992=>array(0,0,343,741),7993=>array(0,0,343,741),7994=>array(0,0,521,742),7995=>array(0,0,521,741),7996=>array(0,0,517,738),7997=>array(0,0,511,741),7998=>array(0,0,459,877),7999=>array(22,0,459,876),8000=>array(40,-23,574,799),8001=>array(40,-23,574,799),8002=>array(40,-23,574,800),8003=>array(40,-23,574,799),8004=>array(40,-23,574,800),8005=>array(40,-23,574,799),8008=>array(0,-23,824,741),8009=>array(0,-23,825,741),8010=>array(0,-23,1018,742),8011=>array(0,-23,1013,741),8012=>array(0,-23,979,741),8013=>array(0,-23,977,741),8016=>array(60,-16,548,799),8017=>array(60,-16,548,799),8018=>array(60,-16,548,800),8019=>array(60,-16,548,799),8020=>array(60,-16,548,800),8021=>array(60,-16,548,799),8022=>array(60,-16,548,901),8023=>array(60,-16,548,899),8025=>array(0,0,891,741),8027=>array(0,0,1095,741),8029=>array(0,0,1110,741),8031=>array(22,0,1022,876),8032=>array(40,-15,758,801),8033=>array(40,-15,758,800),8034=>array(40,-15,758,801),8035=>array(40,-15,758,799),8036=>array(40,-15,758,812),8037=>array(40,-15,758,802),8038=>array(40,-15,758,900),8039=>array(40,-15,758,898),8040=>array(0,0,836,749),8041=>array(0,0,839,749),8042=>array(0,0,1031,749),8043=>array(0,0,1031,749),8044=>array(0,0,991,749),8045=>array(0,0,1004,749),8046=>array(0,0,961,877),8047=>array(22,0,958,876),8048=>array(40,-15,632,775),8049=>array(40,-15,632,775),8050=>array(40,-10,531,775),8051=>array(40,-10,531,775),8052=>array(10,-200,538,775),8053=>array(10,-200,538,778),8054=>array(0,-17,331,775),8055=>array(60,-17,331,775),8056=>array(40,-23,574,775),8057=>array(40,-23,574,775),8058=>array(60,-16,548,775),8059=>array(60,-16,548,775),8060=>array(40,-15,758,784),8061=>array(40,-15,758,784),8064=>array(40,-199,632,799),8065=>array(40,-199,632,799),8066=>array(40,-199,632,800),8067=>array(40,-199,632,799),8068=>array(40,-199,632,800),8069=>array(40,-199,632,799),8070=>array(40,-199,632,899),8071=>array(40,-199,632,899),8072=>array(10,-5,894,741),8073=>array(10,-5,891,747),8074=>array(4,-5,1056,745),8075=>array(0,-5,1030,738),8076=>array(0,-5,979,738),8077=>array(0,-5,989,753),8078=>array(-42,-5,905,878),8079=>array(-28,-5,911,881),8080=>array(10,-200,538,802),8081=>array(10,-200,538,802),8082=>array(10,-200,538,800),8083=>array(10,-200,538,799),8084=>array(10,-200,538,797),8085=>array(10,-200,538,790),8086=>array(10,-200,538,900),8087=>array(10,-200,538,900),8088=>array(0,-5,991,741),8089=>array(0,-5,1000,741),8090=>array(0,-4,1189,742),8091=>array(0,-5,1192,741),8092=>array(0,-5,1183,738),8093=>array(0,-5,1194,741),8094=>array(-51,-5,1081,881),8095=>array(-25,-5,1100,878),8096=>array(40,-200,758,801),8097=>array(40,-200,758,800),8098=>array(40,-200,758,801),8099=>array(40,-200,758,799),8100=>array(40,-200,758,812),8101=>array(40,-200,758,802),8102=>array(40,-200,758,900),8103=>array(40,-200,758,898),8104=>array(0,-22,1059,749),8105=>array(0,-22,1053,749),8106=>array(0,-22,1246,749),8107=>array(0,-22,1245,749),8108=>array(0,-22,1205,749),8109=>array(0,-22,1222,749),8110=>array(0,-22,1181,877),8111=>array(22,-22,1177,876),8112=>array(40,-15,632,752),8113=>array(40,-15,632,668),8114=>array(40,-199,632,775),8115=>array(40,-199,632,542),8116=>array(40,-199,632,763),8118=>array(40,-15,632,737),8119=>array(40,-199,632,737),8120=>array(10,0,687,901),8121=>array(10,0,687,860),8122=>array(-22,0,687,741),8123=>array(10,0,687,741),8124=>array(10,-5,892,729),8125=>array(84,563,216,753),8126=>array(58,0,244,252),8127=>array(84,563,216,753),8128=>array(0,620,354,748),8129=>array(-10,609,344,901),8130=>array(10,-200,538,775),8131=>array(10,-200,538,548),8132=>array(20,-200,548,757),8134=>array(10,-200,538,782),8135=>array(10,-200,538,782),8136=>array(0,0,762,741),8137=>array(0,0,759,741),8138=>array(0,0,804,741),8139=>array(0,0,801,741),8140=>array(80,-5,893,729),8141=>array(84,563,432,754),8142=>array(84,563,427,754),8143=>array(27,563,381,900),8144=>array(23,-17,351,752),8145=>array(0,-17,350,668),8146=>array(0,-17,363,783),8147=>array(0,-17,354,781),8150=>array(0,-17,369,737),8151=>array(0,-17,382,899),8152=>array(23,0,287,944),8153=>array(6,0,305,860),8154=>array(0,0,375,732),8155=>array(0,0,365,738),8157=>array(81,563,429,753),8158=>array(81,563,431,753),8159=>array(-10,560,344,894),8160=>array(60,-16,548,752),8161=>array(60,-16,548,668),8162=>array(60,-16,548,783),8163=>array(60,-16,548,783),8164=>array(60,-203,594,764),8165=>array(60,-203,594,780),8166=>array(60,-16,548,737),8167=>array(60,-16,548,899),8168=>array(5,0,756,901),8169=>array(5,0,756,860),8170=>array(0,0,943,729),8171=>array(0,0,967,735),8172=>array(0,-8,782,756),8173=>array(0,600,332,780),8174=>array(-1,600,333,780),8175=>array(82,579,282,745),8178=>array(40,-200,758,784),8179=>array(40,-200,758,545),8180=>array(40,-200,758,738),8182=>array(40,-15,758,761),8183=>array(40,-200,758,761),8184=>array(0,-23,873,750),8185=>array(0,-23,833,747),8186=>array(0,0,876,759),8187=>array(0,0,854,749),8188=>array(40,0,973,749),8189=>array(117,588,317,754),8190=>array(81,563,213,753),8208=>array(26,207,298,311),8209=>array(26,207,298,311),8210=>array(-9,207,557,311),8211=>array(-9,207,557,311),8212=>array(-7,207,1003,311),8213=>array(-7,207,1003,311),8214=>array(100,-200,342,729),8215=>array(-22,-300,578,-90),8216=>array(68,482,190,729),8217=>array(68,482,190,729),8218=>array(60,-134,182,113),8219=>array(68,482,190,729),8220=>array(62,482,390,729),8221=>array(56,482,384,729),8222=>array(56,-134,384,113),8223=>array(66,482,390,729),8224=>array(31,-194,523,709),8225=>array(28,-194,520,709),8226=>array(50,170,350,470),8227=>array(51,182,359,516),8228=>array(161,0,311,146),8229=>array(36,0,436,146),8230=>array(36,0,686,146),8231=>array(64,169,188,292),8240=>array(11,-22,990,739),8241=>array(11,-22,1356,739),8242=>array(40,467,207,742),8243=>array(40,467,401,742),8244=>array(40,467,585,742),8245=>array(40,467,207,742),8246=>array(40,467,387,742),8247=>array(40,467,571,742),8248=>array(2,-196,448,169),8249=>array(83,72,250,481),8250=>array(80,72,247,481),8251=>array(61,33,561,527),8252=>array(112,0,595,726),8253=>array(31,0,593,744),8254=>array(1,694,556,798),8255=>array(34,-219,625,4),8256=>array(34,562,625,785),8257=>array(-10,-226,448,301),8258=>array(-7,-32,836,729),8259=>array(50,151,350,331),8260=>array(-173,-20,337,715),8261=>array(96,-237,301,754),8262=>array(6,-237,211,754),8263=>array(64,0,1167,744),8264=>array(64,0,873,744),8265=>array(112,0,889,744),8266=>array(29,-12,528,560),8267=>array(19,-191,529,729),8268=>array(36,49,560,569),8269=>array(36,49,560,569),8270=>array(23,-32,357,290),8271=>array(113,-174,263,520),8272=>array(34,-11,625,559),8273=>array(23,-32,357,741),8274=>array(65,1,575,736),8275=>array(0,268,568,424),8276=>array(34,-247,625,-24),8277=>array(11,-39,776,726),8278=>array(37,-26,452,561),8279=>array(40,467,820,742),8280=>array(37,-11,659,698),8281=>array(37,-24,662,702),8282=>array(37,-23,161,779),8283=>array(37,-200,659,797),8284=>array(57,41,543,524),8285=>array(37,-21,161,752),8286=>array(37,-22,161,753),8304=>array(19,370,333,819),8305=>array(54,390,146,864),8308=>array(14,390,334,815),8309=>array(14,360,330,800),8310=>array(19,370,332,819),8311=>array(16,375,337,800),8312=>array(13,370,336,819),8313=>array(19,368,332,817),8314=>array(20,447,331,736),8315=>array(20,556,331,627),8316=>array(20,484,331,698),8317=>array(26,296,197,900),8318=>array(19,296,190,900),8319=>array(42,390,357,747),8320=>array(19,-218,333,231),8321=>array(40,-200,242,225),8322=>array(16,-200,328,234),8323=>array(15,-213,329,234),8324=>array(14,-200,334,225),8325=>array(14,-214,330,226),8326=>array(19,-214,332,235),8327=>array(16,-200,337,225),8328=>array(13,-214,336,235),8329=>array(19,-214,332,235),8330=>array(20,-129,331,160),8331=>array(21,-20,332,51),8332=>array(21,-97,332,117),8333=>array(26,-300,197,303),8334=>array(18,-299,189,305),8336=>array(27,-215,350,157),8337=>array(28,-213,355,159),8338=>array(26,-213,374,159),8339=>array(9,-200,348,151),8340=>array(26,-213,353,159),8355=>array(19,0,567,729),8356=>array(12,-33,578,754),8357=>array(60,-114,824,651),8358=>array(46,1,684,733),8360=>array(80,-23,1206,729),8362=>array(80,0,979,600),8363=>array(29,-24,555,803),8364=>array(36,-23,604,739),8368=>array(5,-200,581,752),8373=>array(22,-126,562,763),8376=>array(14,0,598,729),8377=>array(12,-47,587,729),8400=>array(-565,542,-1,773),8401=>array(-565,542,-1,773),8402=>array(-212,-24,-137,686),8403=>array(-237,-11,-157,545),8406=>array(-623,524,6,911),8407=>array(-616,524,13,911),8411=>array(-494,482,-2,605),8412=>array(-678,482,-2,605),8413=>array(-720,-201,280,799),8414=>array(-725,-199,276,802),8415=>array(-726,-200,280,806),8416=>array(-728,-208,280,800),8417=>array(-673,534,23,918),8421=>array(-708,-64,-6,752),8423=>array(-433,87,77,641),8424=>array(-494,-199,-2,-76),8425=>array(-467,500,3,690),8426=>array(-968,10,-41,556),8427=>array(-600,-102,80,594),8428=>array(-534,-270,31,-38),8429=>array(-537,-267,28,-35),8430=>array(-608,-302,21,-12),8431=>array(-616,-304,13,-14),8432=>array(-305,562,-100,757),8448=>array(40,-20,902,746),8449=>array(36,-20,932,746),8451=>array(30,-23,993,741),8453=>array(32,-20,954,742),8454=>array(36,-20,966,742),8455=>array(40,-23,641,741),8456=>array(40,-23,681,741),8457=>array(30,0,892,729),8462=>array(65,0,539,729),8465=>array(30,-102,636,714),8467=>array(14,-11,587,744),8468=>array(5,-23,845,729),8470=>array(68,0,974,729),8471=>array(30,-44,850,776),8476=>array(24,-24,726,756),8480=>array(46,260,929,742),8481=>array(14,0,1299,729),8482=>array(21,273,879,729),8486=>array(40,0,759,749),8487=>array(40,-57,759,692),8489=>array(10,-17,281,540),8490=>array(80,0,723,729),8491=>array(10,0,687,949),8494=>array(40,-23,543,549),8498=>array(20,0,532,729),8501=>array(31,0,620,600),8502=>array(20,0,553,600),8503=>array(47,0,503,600),8504=>array(63,0,566,600),8506=>array(40,-23,836,680),8507=>array(67,0,1400,729),8513=>array(49,-25,718,739),8514=>array(40,0,539,729),8515=>array(32,0,531,729),8516=>array(10,0,633,729),8523=>array(8,-21,647,725),8525=>array(10,-20,1268,742),8526=>array(29,-1,440,583),8531=>array(40,-21,854,744),8532=>array(16,-21,854,744),8533=>array(40,-22,840,744),8534=>array(16,-21,840,745),8535=>array(15,-20,840,745),8536=>array(14,-20,840,735),8537=>array(40,-21,832,744),8538=>array(14,-24,832,730),8539=>array(40,-24,856,744),8540=>array(15,-24,856,743),8541=>array(14,-24,856,730),8542=>array(16,-24,856,730),8543=>array(40,-20,620,745),8544=>array(80,0,230,729),8545=>array(80,0,508,729),8546=>array(80,0,786,729),8547=>array(80,0,891,729),8548=>array(20,0,643,729),8549=>array(20,0,827,729),8550=>array(20,0,1115,729),8551=>array(20,0,1393,729),8552=>array(80,0,911,729),8553=>array(22,0,653,729),8554=>array(22,0,847,729),8555=>array(22,0,1115,729),8556=>array(80,0,579,729),8557=>array(40,-23,681,741),8558=>array(80,0,684,729),8559=>array(80,0,790,729),8560=>array(70,0,210,729),8561=>array(70,0,488,729),8562=>array(70,0,766,729),8563=>array(70,0,790,729),8564=>array(10,0,532,540),8565=>array(10,0,716,729),8566=>array(10,0,994,729),8567=>array(10,0,1272,729),8568=>array(70,0,772,729),8569=>array(15,0,534,540),8570=>array(15,0,716,729),8571=>array(15,0,994,729),8572=>array(65,0,205,729),8573=>array(40,-23,528,549),8574=>array(40,-23,556,729),8575=>array(65,0,829,549),8592=>array(39,70,925,394),8593=>array(320,-211,644,675),8594=>array(42,70,928,394),8595=>array(320,-211,644,675),8596=>array(39,70,925,394),8597=>array(320,-211,644,675),8598=>array(158,-111,826,556),8599=>array(139,-112,806,556),8600=>array(138,-92,806,575),8601=>array(158,-92,825,576),8602=>array(39,-60,925,522),8603=>array(39,-60,925,522),8606=>array(39,70,928,394),8607=>array(322,-212,646,677),8608=>array(39,70,928,394),8609=>array(322,-213,646,676),8610=>array(39,70,925,394),8611=>array(39,70,925,394),8612=>array(39,20,925,445),8613=>array(270,-211,695,675),8614=>array(39,20,925,445),8615=>array(269,-211,694,675),8616=>array(270,-221,694,745),8644=>array(39,-110,925,574),8645=>array(140,-211,824,675),8646=>array(39,-110,925,574),8647=>array(39,-110,925,574),8648=>array(140,-211,824,675),8649=>array(39,-110,925,574),8650=>array(140,-211,824,675),8704=>array(10,0,687,729),8705=>array(108,-139,608,861),8706=>array(32,-23,519,724),8707=>array(59,0,604,729),8708=>array(55,-60,604,802),8709=>array(49,-25,811,747),8710=>array(8,0,721,729),8711=>array(8,0,721,729),8712=>array(55,0,530,616),8713=>array(55,-50,530,685),8714=>array(45,1,505,469),8715=>array(55,-1,530,615),8716=>array(55,-60,530,675),8717=>array(80,-1,540,467),8718=>array(90,35,410,655),8719=>array(105,-183,717,732),8720=>array(105,-183,717,732),8721=>array(41,-195,744,729),8722=>array(50,172,533,291),8723=>array(51,1,534,661),8724=>array(50,1,533,674),8725=>array(0,-20,510,715),8726=>array(40,-20,412,544),8727=>array(16,66,485,537),8728=>array(63,111,436,483),8729=>array(100,170,400,470),8730=>array(7,-73,570,900),8731=>array(7,-73,570,900),8732=>array(7,-73,570,900),8733=>array(25,124,636,404),8734=>array(25,124,689,404),8735=>array(62,0,587,525),8736=>array(28,0,740,712),8739=>array(70,-14,150,676),8741=>array(70,-14,310,676),8743=>array(30,0,578,448),8744=>array(30,0,578,448),8745=>array(40,-1,732,508),8746=>array(40,-11,732,498),8747=>array(60,-246,468,767),8748=>array(60,-246,758,767),8749=>array(60,-246,1048,767),8756=>array(133,-46,665,425),8757=>array(135,51,667,522),8758=>array(50,-58,174,485),8759=>array(50,-58,544,485),8760=>array(50,172,533,455),8761=>array(50,-58,735,455),8762=>array(50,-30,533,505),8763=>array(20,-18,479,486),8764=>array(20,140,479,312),8768=>array(36,-22,208,437),8770=>array(53,10,536,397),8771=>array(50,84,533,471),8773=>array(50,-23,534,572),8776=>array(18,46,479,422),8778=>array(50,-25,533,505),8779=>array(20,-14,479,497),8784=>array(50,52,534,630),8785=>array(50,-127,534,586),8786=>array(50,-130,534,597),8787=>array(50,-124,534,595),8788=>array(64,-118,705,585),8789=>array(50,-120,705,575),8791=>array(50,55,534,669),8792=>array(50,55,534,645),8793=>array(50,55,534,677),8794=>array(50,55,534,679),8797=>array(35,55,577,741),8798=>array(50,55,534,715),8799=>array(50,55,534,818),8800=>array(50,-60,534,545),8801=>array(50,24,533,513),8804=>array(50,-38,539,611),8805=>array(50,-38,539,604),8806=>array(50,-181,539,684),8807=>array(50,-183,539,681),8810=>array(40,-10,976,474),8811=>array(50,-9,986,475),8818=>array(45,-60,534,639),8819=>array(40,-60,529,639),8834=>array(55,0,530,616),8835=>array(55,1,530,617),8836=>array(55,-60,530,675),8837=>array(54,-60,530,675),8838=>array(50,-57,533,734),8839=>array(50,-56,533,732),8853=>array(30,-28,746,688),8854=>array(30,-28,746,688),8855=>array(30,-28,746,688),8856=>array(30,-28,746,688),8857=>array(30,-28,746,688),8858=>array(30,-28,746,688),8859=>array(30,-28,746,688),8860=>array(30,-28,746,688),8861=>array(30,-28,746,688),8891=>array(20,20,568,607),8892=>array(30,0,578,620),8893=>array(18,0,566,636),8896=>array(30,0,714,668),8897=>array(30,0,714,668),8898=>array(61,-35,703,796),8899=>array(61,-82,703,749),8901=>array(72,286,226,443),8942=>array(59,-14,183,776),8943=>array(106,197,896,320),8944=>array(106,-13,895,776),8945=>array(105,-14,895,776),8968=>array(98,0,382,729),8969=>array(74,0,358,729),8970=>array(98,0,382,729),8971=>array(74,0,358,729),8976=>array(39,86,544,376),8994=>array(59,148,600,342),8995=>array(59,142,600,336),9001=>array(15,-198,334,746),9002=>array(25,-198,344,746),9251=>array(10,0,490,200),9674=>array(16,-26,518,744),9675=>array(20,-44,840,776),9676=>array(21,-44,839,776),9702=>array(50,151,350,451),9711=>array(10,-201,1010,799),9772=>array(12,-200,906,797),9824=>array(14,-20,611,782),9825=>array(15,-96,679,724),9826=>array(8,-56,587,748),9827=>array(15,-20,761,725),9828=>array(14,-20,611,782),9829=>array(15,-97,679,724),9830=>array(8,-56,587,748),9831=>array(15,-20,761,725),9833=>array(38,0,277,694),9834=>array(55,0,514,694),9835=>array(55,0,696,729),9836=>array(55,0,696,729),9837=>array(96,-36,457,730),9838=>array(130,-214,413,712),9839=>array(86,-197,460,762),10048=>array(31,-200,1023,796),10752=>array(10,-201,1010,799),10753=>array(10,-201,1010,799),10754=>array(9,-199,1008,801),11568=>array(36,-10,316,270),11569=>array(56,-16,816,744),11570=>array(56,-16,816,744),11571=>array(72,0,648,728),11572=>array(72,0,648,728),11573=>array(72,0,648,728),11574=>array(48,0,616,738),11575=>array(48,0,704,728),11576=>array(48,0,704,728),11577=>array(72,0,648,728),11578=>array(72,0,648,728),11579=>array(54,-10,542,728),11580=>array(72,0,626,728),11581=>array(72,0,670,728),11582=>array(72,-10,520,738),11583=>array(72,0,670,728),11584=>array(56,-16,816,744),11585=>array(56,-16,816,744),11586=>array(72,-20,240,748),11587=>array(72,0,648,728),11588=>array(60,0,636,728),11589=>array(72,0,648,728),11590=>array(52,44,532,532),11591=>array(72,0,670,728),11592=>array(54,270,742,458),11593=>array(58,0,555,728),11594=>array(48,0,624,728),11595=>array(60,-16,828,744),11596=>array(54,0,782,728),11597=>array(52,0,472,728),11598=>array(72,0,648,728),11599=>array(90,0,210,728),11600=>array(54,0,782,728),11601=>array(56,-244,244,728),11602=>array(63,-16,655,728),11603=>array(54,-10,334,738),11604=>array(56,-16,816,744),11605=>array(56,-16,816,744),11606=>array(60,0,636,728),11607=>array(60,-10,248,738),11608=>array(56,-10,584,738),11609=>array(56,-16,816,744),11610=>array(56,-16,816,744),11611=>array(56,-16,694,744),11612=>array(54,0,370,728),11613=>array(72,0,648,728),11614=>array(56,-16,694,744),11615=>array(72,0,648,728),11616=>array(48,0,661,728),11617=>array(72,0,648,728),11618=>array(25,-23,516,756),11619=>array(54,0,774,728),11620=>array(72,0,408,728),11621=>array(54,0,774,728),11631=>array(72,444,410,728),11798=>array(40,-53,529,665),11799=>array(40,118,290,447),11800=>array(24,-23,586,721),11802=>array(13,207,319,573),11803=>array(20,142,479,544),11806=>array(20,142,479,501),11807=>array(20,-12,479,314),11816=>array(20,-200,474,729),11817=>array(22,-200,476,729),11818=>array(29,3,624,554),11819=>array(15,59,603,475),11820=>array(15,41,603,457),11821=>array(21,5,643,603),11822=>array(64,0,556,744),42888=>array(11,-58,329,92),42889=>array(0,0,150,520),42890=>array(50,52,292,411),42891=>array(60,303,198,770),42892=>array(60,462,198,770),42922=>array(40,0,868,729),64256=>array(14,0,587,729),64257=>array(14,0,505,729),64258=>array(14,0,532,729),64259=>array(14,0,778,729),64260=>array(14,0,778,729),64261=>array(14,-23,602,729),64275=>array(65,-23,1173,729),64276=>array(65,-23,1176,729),64277=>array(65,-200,1168,729),64278=>array(65,-200,1173,729),64279=>array(65,-200,1383,729),64285=>array(73,136,212,600),64286=>array(0,660,306,813),64287=>array(73,138,470,600),64288=>array(86,0,579,600),64289=>array(61,0,900,600),64290=>array(63,0,816,600),64291=>array(79,0,862,600),64292=>array(76,0,784,600),64293=>array(62,0,845,750),64294=>array(80,0,863,600),64295=>array(63,0,780,600),64296=>array(62,0,935,600),64297=>array(50,172,533,473),64298=>array(76,0,766,721),64299=>array(76,0,766,721),64300=>array(76,0,766,721),64301=>array(76,0,766,721),64302=>array(61,-142,650,600),64303=>array(61,-248,650,600),64304=>array(61,-108,650,600),64305=>array(77,0,610,600),64306=>array(47,0,503,600),64307=>array(63,0,566,600),64308=>array(79,0,612,600),64309=>array(8,0,269,600),64310=>array(31,0,371,600),64312=>array(76,0,609,600),64313=>array(41,276,282,600),64314=>array(62,-200,520,600),64315=>array(76,0,534,600),64316=>array(62,0,595,750),64318=>array(67,0,633,600),64320=>array(73,0,359,600),64321=>array(76,0,609,600),64323=>array(72,-200,590,601),64324=>array(79,0,597,600),64326=>array(61,0,606,600),64327=>array(80,-200,599,600),64328=>array(63,0,530,600),64329=>array(76,0,766,600),64330=>array(62,0,685,600),64331=>array(79,0,218,742),64332=>array(77,0,610,742),64333=>array(76,0,534,742),64334=>array(79,0,597,742),64335=>array(83,0,650,750),65532=>array(46,-2,731,686),65533=>array(19,-63,882,800),65535=>array(35,-139,765,800)); +$cw=array(0=>800,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>250,40=>333,41=>333,42=>389,43=>584,44=>250,45=>333,46=>250,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>250,59=>250,60=>584,61=>584,62=>584,63=>611,64=>975,65=>697,66=>704,67=>721,68=>724,69=>665,70=>632,71=>769,72=>749,73=>310,74=>572,75=>728,76=>619,77=>870,78=>753,79=>782,80=>677,81=>782,82=>722,83=>681,84=>644,85=>738,86=>663,87=>959,88=>675,89=>643,90=>608,91=>333,92=>278,93=>333,94=>584,95=>556,96=>250,97=>566,98=>621,99=>558,100=>621,101=>583,102=>343,103=>612,104=>604,105=>280,106=>280,107=>564,108=>270,109=>894,110=>613,111=>614,112=>621,113=>621,114=>392,115=>556,116=>338,117=>613,118=>542,119=>781,120=>549,121=>549,122=>507,123=>389,124=>280,125=>389,126=>500,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>351,179=>351,180=>333,181=>611,182=>556,183=>278,184=>333,185=>300,186=>365,187=>556,188=>869,189=>869,190=>869,191=>611,192=>697,193=>697,194=>697,195=>697,196=>697,197=>697,198=>1015,199=>721,200=>665,201=>665,202=>665,203=>665,204=>310,205=>310,206=>310,207=>310,208=>741,209=>753,210=>782,211=>782,212=>782,213=>782,214=>782,215=>584,216=>783,217=>738,218=>738,219=>738,220=>738,221=>643,222=>677,223=>611,224=>566,225=>566,226=>566,227=>566,228=>566,229=>566,230=>889,231=>558,232=>583,233=>583,234=>583,235=>583,236=>280,237=>280,238=>300,239=>300,240=>614,241=>613,242=>614,243=>614,244=>614,245=>614,246=>614,247=>584,248=>614,249=>613,250=>613,251=>613,252=>613,253=>549,254=>621,255=>549,256=>697,257=>566,258=>697,259=>566,260=>717,261=>556,262=>721,263=>558,264=>721,265=>558,266=>721,267=>558,268=>721,269=>558,270=>724,271=>789,272=>741,273=>626,274=>665,275=>583,276=>665,277=>583,278=>665,279=>583,280=>665,281=>584,282=>665,283=>583,284=>769,285=>612,286=>769,287=>612,288=>769,289=>612,290=>769,291=>612,292=>749,293=>604,294=>729,295=>606,296=>310,297=>300,298=>310,299=>280,300=>310,301=>300,302=>310,303=>280,304=>310,305=>280,306=>622,307=>548,308=>572,309=>280,310=>728,311=>564,312=>559,313=>619,314=>270,315=>619,316=>270,317=>619,318=>442,319=>619,320=>440,321=>637,322=>278,323=>753,324=>613,325=>753,326=>613,327=>753,328=>613,329=>701,330=>752,331=>613,332=>782,333=>614,334=>782,335=>614,336=>782,337=>614,338=>1012,339=>977,340=>722,341=>392,342=>722,343=>392,344=>722,345=>392,346=>681,347=>556,348=>681,349=>556,350=>681,351=>556,352=>681,353=>556,354=>644,355=>333,356=>644,357=>481,358=>644,359=>333,360=>738,361=>613,362=>738,363=>613,364=>738,365=>613,366=>738,367=>613,368=>738,369=>613,370=>738,371=>611,372=>959,373=>781,374=>643,375=>549,376=>643,377=>608,378=>507,379=>608,380=>507,381=>608,382=>507,383=>333,384=>621,385=>903,386=>679,387=>636,388=>690,389=>653,390=>721,391=>754,392=>613,393=>741,394=>923,395=>722,396=>621,397=>622,398=>665,399=>782,400=>681,401=>611,402=>333,403=>786,404=>657,405=>949,406=>299,407=>433,408=>784,409=>564,410=>393,411=>600,412=>978,413=>748,414=>613,415=>782,416=>791,417=>658,418=>1076,419=>847,420=>876,421=>621,422=>647,423=>681,424=>561,425=>676,426=>441,427=>333,428=>715,429=>333,430=>624,431=>773,432=>666,433=>799,434=>722,435=>839,436=>643,437=>611,438=>500,439=>567,440=>556,441=>645,442=>569,443=>579,446=>572,447=>627,448=>260,449=>400,450=>584,451=>278,452=>1300,453=>1204,454=>1111,455=>1183,456=>855,457=>556,458=>1294,459=>1000,460=>889,461=>697,462=>566,463=>310,464=>300,465=>782,466=>614,467=>738,468=>613,469=>738,470=>613,471=>738,472=>613,473=>738,474=>613,475=>738,476=>613,477=>583,478=>697,479=>566,480=>697,481=>566,482=>1005,483=>889,484=>804,485=>652,486=>769,487=>612,488=>728,489=>564,490=>782,491=>611,492=>782,493=>611,494=>567,495=>562,496=>300,497=>1333,498=>1222,499=>1111,500=>769,501=>612,503=>659,504=>753,505=>613,506=>697,507=>566,508=>1015,509=>889,510=>783,511=>614,512=>697,513=>566,514=>697,515=>566,516=>665,517=>583,518=>665,519=>583,520=>310,521=>300,522=>310,523=>280,524=>782,525=>614,526=>782,527=>614,528=>722,529=>392,530=>722,531=>392,532=>738,533=>613,534=>738,535=>613,536=>681,537=>556,538=>644,539=>338,540=>586,541=>484,542=>749,543=>604,548=>611,549=>500,550=>697,551=>566,552=>655,553=>583,554=>782,555=>614,556=>782,557=>614,558=>782,559=>614,560=>782,561=>614,562=>643,563=>549,567=>280,592=>566,593=>687,594=>687,595=>621,596=>558,597=>573,598=>636,599=>636,600=>583,601=>583,602=>834,603=>571,604=>561,605=>820,606=>570,607=>316,608=>625,609=>617,610=>579,611=>556,612=>654,613=>613,614=>603,615=>604,616=>300,617=>285,618=>300,619=>473,620=>527,621=>285,622=>744,623=>894,624=>895,625=>894,626=>628,627=>628,628=>625,629=>614,630=>894,631=>848,632=>714,633=>389,634=>386,635=>406,636=>386,637=>386,638=>473,639=>473,640=>586,641=>581,642=>609,643=>333,644=>331,645=>313,646=>553,647=>328,648=>315,649=>643,650=>728,651=>635,652=>542,653=>781,654=>549,655=>542,656=>551,657=>591,658=>562,659=>593,660=>572,661=>572,662=>572,663=>586,664=>614,665=>563,666=>590,667=>616,668=>613,669=>552,670=>588,671=>454,672=>636,673=>572,674=>572,675=>1004,676=>1029,677=>1117,678=>807,679=>583,680=>824,681=>871,682=>753,683=>668,684=>525,685=>486,686=>659,687=>679,688=>377,689=>377,690=>202,691=>272,692=>272,693=>299,694=>395,695=>534,696=>364,697=>250,698=>454,699=>250,700=>250,701=>250,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>250,715=>250,716=>272,717=>333,718=>333,719=>250,720=>333,721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>500,751=>333,752=>333,753=>333,754=>333,755=>333,756=>250,757=>400,758=>400,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>379,885=>379,890=>333,894=>333,900=>363,901=>333,902=>697,903=>333,904=>802,905=>878,906=>430,908=>800,910=>958,911=>861,912=>341,913=>697,914=>673,915=>634,916=>744,917=>655,918=>608,919=>749,920=>796,921=>310,922=>728,923=>713,924=>910,925=>774,926=>684,927=>782,928=>770,929=>716,931=>676,932=>658,933=>761,934=>789,935=>784,936=>832,937=>799,938=>310,939=>771,940=>632,941=>571,942=>598,943=>356,944=>608,945=>632,946=>600,947=>573,948=>622,949=>571,950=>512,951=>598,952=>595,953=>341,954=>567,955=>589,956=>613,957=>566,958=>539,959=>614,960=>658,961=>634,962=>593,963=>662,964=>557,965=>608,966=>788,967=>631,968=>728,969=>798,970=>341,971=>608,972=>614,973=>608,974=>798,977=>609,978=>742,979=>917,980=>744,981=>714,982=>798,983=>642,1008=>642,1009=>614,1012=>782,1013=>358,1024=>655,1025=>655,1026=>824,1027=>612,1028=>721,1029=>681,1030=>310,1031=>310,1032=>572,1033=>1078,1034=>1116,1035=>824,1036=>728,1037=>753,1038=>701,1039=>750,1040=>697,1041=>704,1042=>704,1043=>612,1044=>900,1045=>655,1046=>1076,1047=>681,1048=>753,1049=>753,1050=>728,1051=>711,1052=>870,1053=>749,1054=>782,1055=>749,1056=>677,1057=>721,1058=>644,1059=>701,1060=>912,1061=>651,1062=>809,1063=>706,1064=>1059,1065=>1139,1066=>847,1067=>976,1068=>677,1069=>721,1070=>1095,1071=>701,1072=>566,1073=>595,1074=>563,1075=>428,1076=>679,1077=>583,1078=>782,1079=>571,1080=>625,1081=>625,1082=>559,1083=>573,1084=>676,1085=>613,1086=>614,1087=>613,1088=>621,1089=>558,1090=>440,1091=>549,1092=>972,1093=>539,1094=>654,1095=>573,1096=>896,1097=>970,1098=>703,1099=>788,1100=>577,1101=>568,1102=>857,1103=>581,1104=>583,1105=>583,1106=>631,1107=>428,1108=>568,1109=>555,1110=>280,1111=>300,1112=>270,1113=>893,1114=>907,1115=>629,1116=>559,1117=>625,1118=>549,1119=>614,1120=>986,1121=>736,1136=>832,1137=>758,1138=>782,1139=>606,1148=>942,1149=>736,1150=>986,1151=>736,1154=>449,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>832,1163=>675,1164=>682,1165=>611,1166=>677,1167=>612,1168=>636,1169=>440,1170=>622,1171=>449,1172=>647,1173=>574,1174=>1096,1175=>803,1176=>683,1177=>555,1178=>759,1179=>573,1180=>730,1181=>554,1182=>737,1183=>555,1184=>892,1185=>680,1186=>825,1187=>653,1188=>999,1189=>763,1190=>1105,1191=>925,1192=>963,1193=>766,1194=>722,1195=>558,1196=>614,1197=>438,1198=>643,1199=>573,1200=>643,1201=>603,1202=>670,1203=>548,1204=>952,1205=>738,1206=>781,1207=>615,1208=>698,1209=>588,1210=>687,1211=>588,1212=>993,1213=>761,1214=>993,1215=>761,1216=>314,1217=>1076,1218=>782,1219=>697,1220=>543,1221=>793,1222=>634,1223=>753,1224=>603,1225=>819,1226=>663,1227=>706,1228=>588,1229=>935,1230=>720,1231=>314,1232=>697,1233=>566,1234=>697,1235=>566,1236=>1004,1237=>898,1238=>655,1239=>583,1240=>722,1241=>583,1242=>722,1243=>583,1244=>1076,1245=>782,1246=>681,1247=>571,1248=>567,1249=>552,1250=>753,1251=>625,1252=>753,1253=>625,1254=>782,1255=>614,1256=>782,1257=>606,1258=>782,1259=>606,1260=>721,1261=>568,1262=>700,1263=>544,1264=>701,1265=>539,1266=>700,1267=>537,1268=>706,1269=>573,1270=>611,1271=>432,1272=>976,1273=>788,1296=>672,1297=>546,1298=>729,1299=>577,1306=>782,1307=>621,1308=>959,1309=>776,1310=>730,1311=>554,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>250,1418=>398,1423=>752,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>516,1471=>0,1472=>297,1473=>0,1474=>0,1475=>333,1476=>0,1488=>714,1489=>651,1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667,1501=>683,1502=>704,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,2304=>0,2305=>0,2306=>0,2307=>305,2308=>737,2309=>737,2310=>928,2311=>504,2312=>504,2313=>622,2314=>844,2315=>961,2316=>681,2317=>473,2318=>473,2319=>473,2320=>473,2321=>928,2322=>928,2323=>928,2324=>928,2325=>789,2326=>820,2327=>562,2328=>630,2329=>770,2330=>660,2331=>684,2332=>743,2333=>732,2334=>720,2335=>608,2336=>571,2337=>651,2338=>578,2339=>648,2340=>604,2341=>700,2342=>540,2343=>633,2344=>608,2345=>608,2346=>519,2347=>773,2348=>532,2349=>618,2350=>558,2351=>596,2352=>475,2353=>475,2354=>696,2355=>701,2356=>701,2357=>532,2358=>686,2359=>519,2360=>707,2361=>526,2362=>0,2363=>266,2364=>0,2365=>482,2366=>266,2367=>266,2368=>266,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>266,2378=>266,2379=>266,2380=>266,2381=>0,2382=>189,2383=>266,2384=>879,2385=>0,2386=>0,2387=>0,2388=>0,2389=>0,2390=>0,2391=>0,2392=>789,2393=>820,2394=>562,2395=>743,2396=>651,2397=>578,2398=>773,2399=>596,2400=>940,2401=>666,2402=>0,2403=>0,2404=>674,2405=>674,2406=>575,2407=>575,2408=>575,2409=>575,2410=>575,2411=>575,2412=>575,2413=>575,2414=>575,2415=>575,2416=>365,2417=>387,2418=>737,2419=>737,2420=>928,2421=>888,2422=>737,2423=>737,2425=>743,2426=>596,2427=>608,2428=>743,2429=>615,2430=>651,2431=>532,2561=>0,2562=>0,2563=>313,2565=>897,2566=>1157,2567=>930,2568=>966,2569=>762,2570=>762,2575=>729,2576=>904,2579=>773,2580=>903,2581=>726,2582=>672,2583=>741,2584=>790,2585=>702,2586=>723,2587=>693,2588=>688,2589=>673,2590=>683,2591=>686,2592=>711,2593=>680,2594=>693,2595=>729,2596=>691,2597=>694,2598=>699,2599=>666,2600=>669,2602=>683,2603=>690,2604=>660,2605=>659,2606=>692,2607=>772,2608=>673,2610=>731,2611=>814,2613=>663,2614=>704,2616=>702,2617=>650,2620=>0,2622=>307,2623=>304,2624=>306,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>684,2650=>813,2651=>715,2652=>695,2654=>709,2662=>697,2663=>630,2664=>696,2665=>690,2666=>646,2667=>636,2668=>571,2669=>682,2670=>718,2671=>730,2672=>0,2673=>0,2674=>722,2675=>760,2676=>1110,2677=>0,4256=>616,4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,4345=>564,4347=>515,4348=>449,5024=>714,5025=>731,5026=>624,5027=>908,5028=>1040,5029=>271,5030=>654,5031=>863,5032=>604,5033=>791,5034=>714,5035=>522,5036=>661,5037=>926,5038=>615,5039=>811,5040=>538,5041=>633,5042=>979,5043=>964,5044=>635,5045=>607,5046=>753,5047=>831,5048=>566,5049=>977,5050=>958,5051=>710,5052=>616,5053=>834,5054=>790,5055=>612,5056=>766,5057=>857,5058=>627,5059=>649,5060=>607,5061=>1127,5062=>680,5063=>920,5064=>928,5065=>1333,5066=>920,5067=>705,5068=>695,5069=>1074,5070=>672,5071=>672,5072=>667,5073=>819,5074=>679,5075=>575,5076=>903,5077=>652,5078=>776,5079=>643,5080=>670,5081=>660,5082=>648,5083=>934,5084=>909,5085=>613,5086=>615,5087=>735,5088=>900,5089=>1024,5090=>647,5091=>760,5092=>829,5093=>824,5094=>756,5095=>625,5096=>981,5097=>1014,5098=>1040,5099=>790,5100=>926,5101=>686,5102=>656,5103=>920,5104=>741,5105=>890,5106=>626,5107=>974,5108=>699,7680=>697,7681=>566,7682=>704,7683=>621,7684=>704,7685=>621,7686=>704,7687=>621,7688=>721,7689=>558,7690=>724,7691=>621,7692=>724,7693=>621,7694=>724,7695=>621,7696=>724,7697=>621,7698=>724,7699=>621,7700=>665,7701=>583,7702=>665,7703=>583,7704=>665,7705=>583,7706=>665,7707=>583,7708=>655,7709=>583,7710=>632,7711=>343,7712=>769,7713=>612,7714=>749,7715=>604,7716=>749,7717=>604,7718=>749,7719=>604,7720=>752,7721=>604,7722=>749,7723=>604,7724=>310,7725=>280,7726=>310,7727=>300,7728=>728,7729=>564,7730=>728,7731=>564,7732=>728,7733=>564,7734=>619,7735=>270,7736=>619,7737=>270,7738=>619,7739=>270,7740=>619,7741=>270,7742=>870,7743=>894,7744=>870,7745=>894,7746=>870,7747=>894,7748=>753,7749=>613,7750=>753,7751=>613,7752=>753,7753=>613,7754=>753,7755=>613,7756=>782,7757=>614,7758=>782,7759=>614,7760=>782,7761=>614,7762=>782,7763=>614,7764=>677,7765=>621,7766=>677,7767=>621,7768=>722,7769=>392,7770=>722,7771=>392,7772=>722,7773=>392,7774=>722,7775=>392,7776=>681,7777=>556,7778=>681,7779=>556,7780=>681,7781=>556,7782=>681,7783=>556,7784=>681,7785=>556,7786=>644,7787=>338,7788=>644,7789=>338,7790=>644,7791=>338,7792=>644,7793=>338,7794=>738,7795=>613,7796=>738,7797=>613,7798=>738,7799=>613,7800=>738,7801=>613,7802=>738,7803=>613,7804=>663,7805=>542,7806=>663,7807=>542,7808=>959,7809=>781,7810=>959,7811=>781,7812=>959,7813=>781,7814=>959,7815=>781,7816=>959,7817=>781,7818=>675,7819=>549,7820=>675,7821=>549,7822=>643,7823=>549,7824=>608,7825=>507,7826=>608,7827=>507,7828=>608,7829=>507,7830=>604,7831=>338,7832=>781,7833=>549,7834=>555,7835=>333,7838=>741,7840=>697,7841=>566,7842=>697,7843=>566,7844=>697,7845=>566,7846=>697,7847=>566,7848=>697,7849=>566,7850=>697,7851=>566,7852=>697,7853=>566,7854=>697,7855=>566,7856=>697,7857=>566,7858=>697,7859=>566,7860=>697,7861=>566,7862=>697,7863=>566,7864=>665,7865=>583,7866=>665,7867=>583,7868=>665,7869=>583,7870=>665,7871=>583,7872=>665,7873=>583,7874=>665,7875=>583,7876=>665,7877=>583,7878=>665,7879=>583,7880=>310,7881=>280,7882=>310,7883=>280,7884=>782,7885=>614,7886=>782,7887=>614,7888=>782,7889=>614,7890=>782,7891=>614,7892=>782,7893=>614,7894=>782,7895=>614,7896=>782,7897=>614,7898=>791,7899=>658,7900=>791,7901=>658,7902=>791,7903=>658,7904=>791,7905=>658,7906=>791,7907=>658,7908=>738,7909=>613,7910=>738,7911=>613,7912=>773,7913=>666,7914=>773,7915=>666,7916=>773,7917=>666,7918=>773,7919=>666,7920=>773,7921=>666,7922=>643,7923=>549,7924=>643,7925=>549,7926=>643,7927=>549,7928=>643,7929=>549,7936=>632,7937=>632,7938=>632,7939=>632,7940=>632,7941=>632,7942=>632,7943=>632,7944=>697,7945=>697,7946=>865,7947=>849,7948=>796,7949=>807,7950=>730,7951=>750,7952=>571,7953=>571,7954=>571,7955=>571,7956=>571,7957=>571,7960=>758,7961=>760,7962=>957,7963=>943,7964=>939,7965=>945,7968=>598,7969=>598,7970=>598,7971=>598,7972=>598,7973=>598,7974=>598,7975=>598,7976=>843,7977=>846,7978=>1041,7979=>1032,7980=>1027,7981=>1039,7982=>933,7983=>944,7984=>341,7985=>341,7986=>393,7987=>395,7988=>398,7989=>392,7990=>390,7991=>404,7992=>423,7993=>423,7994=>601,7995=>601,7996=>597,7997=>591,7998=>539,7999=>539,8000=>614,8001=>614,8002=>614,8003=>614,8004=>614,8005=>614,8008=>864,8009=>865,8010=>1058,8011=>1053,8012=>1019,8013=>1027,8016=>608,8017=>608,8018=>608,8019=>608,8020=>608,8021=>608,8022=>608,8023=>608,8025=>896,8027=>1100,8029=>1115,8031=>1027,8032=>798,8033=>798,8034=>798,8035=>798,8036=>798,8037=>798,8038=>798,8039=>798,8040=>876,8041=>879,8042=>1071,8043=>1071,8044=>1031,8045=>1044,8046=>1001,8047=>989,8048=>632,8049=>632,8050=>571,8051=>571,8052=>598,8053=>598,8054=>341,8055=>341,8056=>610,8057=>610,8058=>608,8059=>608,8060=>798,8061=>798,8064=>632,8065=>632,8066=>632,8067=>632,8068=>632,8069=>632,8070=>632,8071=>632,8072=>909,8073=>906,8074=>1071,8075=>1045,8076=>994,8077=>1004,8078=>920,8079=>926,8080=>598,8081=>598,8082=>598,8083=>598,8084=>598,8085=>598,8086=>598,8087=>598,8088=>1006,8089=>1015,8090=>1204,8091=>1207,8092=>1198,8093=>1209,8094=>1096,8095=>1115,8096=>798,8097=>798,8098=>798,8099=>798,8100=>798,8101=>798,8102=>798,8103=>798,8104=>1074,8105=>1068,8106=>1261,8107=>1260,8108=>1220,8109=>1237,8110=>1196,8111=>1192,8112=>642,8113=>642,8114=>642,8115=>642,8116=>642,8118=>642,8119=>642,8120=>697,8121=>697,8122=>697,8123=>697,8124=>907,8125=>278,8126=>346,8127=>278,8128=>354,8129=>333,8130=>598,8131=>598,8132=>598,8134=>598,8135=>598,8136=>792,8137=>789,8138=>884,8139=>881,8140=>908,8141=>492,8142=>489,8143=>394,8144=>361,8145=>360,8146=>373,8147=>364,8150=>379,8151=>392,8152=>310,8153=>310,8154=>455,8155=>445,8157=>481,8158=>589,8159=>333,8160=>608,8161=>608,8162=>608,8163=>608,8164=>634,8165=>634,8166=>608,8167=>608,8168=>761,8169=>761,8170=>948,8171=>972,8172=>822,8173=>333,8174=>333,8175=>333,8178=>798,8179=>798,8180=>798,8182=>798,8183=>798,8184=>913,8185=>873,8186=>916,8187=>894,8188=>988,8189=>333,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>167,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>556,8212=>1000,8213=>1000,8214=>437,8215=>556,8216=>250,8217=>250,8218=>260,8219=>250,8220=>450,8221=>450,8222=>450,8223=>450,8224=>556,8225=>556,8226=>400,8227=>400,8228=>500,8229=>500,8230=>750,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>167,8240=>1000,8241=>1367,8242=>250,8243=>426,8244=>614,8245=>250,8246=>426,8247=>614,8248=>450,8249=>333,8250=>333,8251=>622,8252=>666,8253=>614,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>537,8268=>600,8269=>600,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>200,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>216,8318=>218,8319=>391,8320=>351,8321=>301,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>216,8334=>216,8336=>363,8337=>366,8338=>394,8339=>360,8340=>355,8355=>611,8356=>591,8357=>889,8358=>727,8360=>1265,8362=>1049,8363=>580,8364=>640,8368=>605,8373=>591,8376=>612,8377=>599,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>945,8449=>968,8451=>1033,8453=>981,8454=>1002,8455=>667,8456=>721,8457=>919,8462=>604,8465=>666,8467=>608,8468=>881,8470=>999,8471=>880,8476=>749,8480=>1000,8481=>1320,8482=>940,8486=>799,8487=>799,8489=>346,8490=>728,8491=>697,8494=>583,8498=>612,8501=>644,8502=>573,8503=>557,8504=>638,8506=>871,8507=>1431,8513=>769,8514=>619,8515=>611,8516=>643,8523=>669,8525=>1281,8526=>482,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>310,8545=>568,8546=>866,8547=>901,8548=>663,8549=>887,8550=>1195,8551=>1473,8552=>925,8553=>675,8554=>927,8555=>1195,8556=>619,8557=>721,8558=>724,8559=>870,8560=>280,8561=>556,8562=>834,8563=>800,8564=>542,8565=>786,8566=>1064,8567=>1342,8568=>794,8569=>549,8570=>786,8571=>1064,8572=>270,8573=>558,8574=>621,8575=>894,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8704=>697,8705=>716,8706=>556,8707=>667,8708=>667,8709=>860,8710=>729,8711=>729,8712=>584,8713=>584,8714=>585,8715=>584,8716=>584,8717=>585,8718=>500,8719=>823,8720=>823,8721=>806,8722=>584,8723=>584,8724=>584,8725=>510,8726=>452,8727=>500,8728=>500,8729=>500,8730=>594,8731=>549,8732=>549,8733=>713,8734=>713,8735=>639,8736=>800,8739=>220,8741=>380,8743=>608,8744=>608,8745=>768,8746=>768,8747=>518,8748=>808,8749=>1098,8756=>797,8757=>800,8758=>250,8759=>620,8760=>584,8761=>778,8762=>584,8763=>500,8764=>500,8768=>244,8770=>584,8771=>584,8773=>584,8776=>500,8778=>584,8779=>500,8784=>584,8785=>584,8786=>584,8787=>584,8788=>755,8789=>755,8791=>584,8792=>584,8793=>584,8794=>584,8797=>614,8798=>584,8799=>584,8800=>584,8801=>584,8804=>583,8805=>584,8806=>584,8807=>584,8810=>1026,8811=>1026,8818=>584,8819=>584,8834=>584,8835=>584,8836=>584,8837=>584,8838=>584,8839=>584,8853=>776,8854=>776,8855=>776,8856=>776,8857=>778,8858=>776,8859=>776,8860=>776,8861=>776,8891=>584,8892=>608,8893=>584,8896=>744,8897=>744,8898=>764,8899=>764,8901=>298,8942=>250,8943=>1000,8944=>1000,8945=>1000,8968=>456,8969=>456,8970=>456,8971=>456,8976=>584,8994=>658,8995=>658,9001=>359,9002=>359,9251=>500,9674=>541,9675=>860,9676=>860,9702=>400,9711=>1020,9772=>923,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10048=>1453,10752=>1020,10753=>1020,10754=>1020,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>664,11575=>752,11576=>752,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>312,11587=>720,11588=>696,11589=>720,11590=>584,11591=>742,11592=>796,11593=>613,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>300,11600=>836,11601=>300,11602=>718,11603=>388,11604=>872,11605=>872,11606=>696,11607=>308,11608=>640,11609=>872,11610=>872,11611=>762,11612=>424,11613=>720,11614=>762,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>482,11798=>584,11799=>333,11800=>611,11802=>333,11803=>500,11806=>500,11807=>500,11816=>504,11817=>504,11818=>660,11819=>623,11820=>623,11821=>660,11822=>611,42888=>333,42889=>276,42890=>342,42891=>258,42892=>258,42922=>948,64256=>607,64257=>575,64258=>602,64259=>848,64260=>848,64261=>627,64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756,64331=>297,64332=>591,64333=>550,64334=>568,64335=>714,65529=>0,65530=>0,65531=>0,65532=>800,65533=>900,65535=>800); +// --- EOF --- diff --git a/tcpdf/fonts/freesansb.z b/tcpdf/fonts/freesansb.z new file mode 100644 index 0000000..ea001a1 Binary files /dev/null and b/tcpdf/fonts/freesansb.z differ diff --git a/tcpdf/fonts/freesansbi.ctg.z b/tcpdf/fonts/freesansbi.ctg.z new file mode 100644 index 0000000..8acd694 Binary files /dev/null and b/tcpdf/fonts/freesansbi.ctg.z differ diff --git a/tcpdf/fonts/freesansbi.php b/tcpdf/fonts/freesansbi.php new file mode 100644 index 0000000..299dc0a --- /dev/null +++ b/tcpdf/fonts/freesansbi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSansBoldOblique'; +$up=-145; +$ut=69; +$dw=800; +$diff=''; +$originalsize=342488; +$enc=''; +$file='freesansbi.z'; +$ctg='freesansbi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-908 -313 1591 1076]','ItalicAngle'=>-12,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>729,'XHeight'=>540,'StemV'=>105,'StemH'=>45,'AvgWidth'=>639,'MaxWidth'=>1501,'MissingWidth'=>800); +$cbbox=array(0=>array(-5,-139,925,800),33=>array(112,0,417,726),34=>array(177,470,579,729),35=>array(33,-32,660,697),36=>array(59,-126,628,763),37=>array(129,-20,903,709),38=>array(89,-23,720,723),39=>array(177,470,343,729),40=>array(84,-200,458,729),41=>array(-21,-200,353,729),42=>array(145,407,478,729),43=>array(87,-10,596,473),44=>array(27,-174,245,146),45=>array(70,207,371,342),46=>array(64,0,245,146),47=>array(-1,-14,427,714),48=>array(81,-23,614,724),49=>array(172,0,529,709),50=>array(30,0,628,724),51=>array(67,-23,613,724),52=>array(57,0,599,709),53=>array(59,-23,641,709),54=>array(85,-23,625,724),55=>array(131,0,679,709),56=>array(60,-23,620,724),57=>array(68,-23,611,724),58=>array(113,0,374,520),59=>array(76,-174,374,520),60=>array(77,-10,630,474),61=>array(61,52,622,412),62=>array(38,-10,591,474),63=>array(168,0,672,744),64=>array(74,-138,1032,745),65=>array(26,0,703,729),66=>array(82,0,762,729),67=>array(107,-23,793,741),68=>array(77,0,776,729),69=>array(79,0,762,729),70=>array(74,0,741,729),71=>array(107,-23,819,741),72=>array(68,0,812,729),73=>array(63,0,368,729),74=>array(59,-23,641,729),75=>array(74,0,843,729),76=>array(80,0,606,729),77=>array(66,0,931,729),78=>array(68,0,816,729),79=>array(106,-23,828,741),80=>array(76,0,747,729),81=>array(109,-54,831,741),82=>array(80,0,785,729),83=>array(76,-23,725,741),84=>array(142,0,753,729),85=>array(119,-23,809,729),86=>array(179,0,802,729),87=>array(168,0,1087,729),88=>array(22,0,802,729),89=>array(182,0,805,729),90=>array(30,0,733,729),91=>array(23,-200,463,729),92=>array(138,-23,285,709),93=>array(-25,-200,415,729),94=>array(119,270,580,695),95=>array(-65,-200,552,-120),96=>array(175,607,339,757),97=>array(50,-23,578,549),98=>array(59,-23,640,729),99=>array(77,-23,597,549),100=>array(79,-23,700,729),101=>array(64,-23,591,549),102=>array(90,0,464,729),103=>array(26,-218,656,549),104=>array(67,0,629,729),105=>array(67,0,362,729),106=>array(-43,-218,365,729),107=>array(59,0,651,729),108=>array(67,0,362,729),109=>array(60,0,911,549),110=>array(63,0,629,549),111=>array(82,-23,634,549),112=>array(11,-218,637,549),113=>array(72,-218,659,549),114=>array(63,0,487,549),115=>array(60,-23,589,549),116=>array(101,-23,414,674),117=>array(88,-23,656,540),118=>array(129,0,651,540),119=>array(120,0,881,540),120=>array(16,0,648,540),121=>array(37,-219,653,540),122=>array(21,0,575,540),123=>array(84,-200,472,729),124=>array(57,-200,335,729),125=>array(31,-200,419,729),126=>array(97,142,581,314),160=>array(0,0,0,0),161=>array(26,-186,331,540),162=>array(79,-124,598,634),163=>array(49,-23,629,715),164=>array(66,100,644,604),165=>array(107,0,702,704),166=>array(57,-200,335,729),167=>array(56,-201,596,723),168=>array(142,621,474,741),169=>array(54,-22,837,743),170=>array(96,262,451,729),171=>array(135,72,571,481),172=>array(103,86,632,376),173=>array(70,207,371,342),174=>array(55,-22,837,743),175=>array(147,622,464,702),176=>array(240,383,543,686),177=>array(50,0,630,633),178=>array(82,390,457,824),179=>array(117,371,460,818),180=>array(247,607,475,757),181=>array(-44,-194,629,543),182=>array(121,-191,684,729),183=>array(143,182,270,282),184=>array(-13,-220,270,0),185=>array(165,390,393,815),186=>array(92,262,471,729),187=>array(103,72,533,481),188=>array(152,-20,890,743),189=>array(157,-20,915,743),190=>array(124,-20,887,742),191=>array(52,-204,556,540),192=>array(26,0,703,924),193=>array(26,0,703,930),194=>array(26,0,703,936),195=>array(26,0,740,923),196=>array(26,0,714,921),197=>array(26,0,703,953),198=>array(1,0,1104,729),199=>array(107,-220,793,741),200=>array(79,0,762,923),201=>array(79,0,762,930),202=>array(79,0,762,936),203=>array(79,0,762,921),204=>array(63,0,368,926),205=>array(63,0,461,930),206=>array(63,0,467,936),207=>array(63,0,487,921),208=>array(73,0,776,729),209=>array(68,0,816,923),210=>array(106,-23,828,926),211=>array(106,-23,828,930),212=>array(106,-23,828,937),213=>array(106,-23,828,923),214=>array(106,-23,828,921),215=>array(102,18,582,444),216=>array(34,-39,906,749),217=>array(119,-23,809,925),218=>array(119,-23,809,930),219=>array(119,-23,809,936),220=>array(119,-23,809,921),221=>array(182,0,805,930),222=>array(76,0,721,729),223=>array(67,-23,663,729),224=>array(50,-23,578,757),225=>array(50,-23,578,757),226=>array(50,-23,578,756),227=>array(50,-23,604,731),228=>array(50,-23,588,739),229=>array(50,-23,578,774),230=>array(54,-23,927,549),231=>array(77,-220,597,549),232=>array(64,-23,591,757),233=>array(64,-23,591,757),234=>array(64,-23,591,757),235=>array(64,-23,591,739),236=>array(67,0,325,757),237=>array(67,0,435,757),238=>array(67,0,426,756),239=>array(67,0,449,740),240=>array(83,-23,633,744),241=>array(63,0,639,731),242=>array(82,-23,634,757),243=>array(82,-23,634,757),244=>array(82,-23,634,757),245=>array(82,-23,634,731),246=>array(82,-23,634,739),247=>array(77,0,606,462),248=>array(12,-38,709,557),249=>array(88,-23,656,757),250=>array(88,-23,656,757),251=>array(88,-23,656,757),252=>array(88,-23,656,739),253=>array(37,-219,653,757),254=>array(11,-218,637,729),255=>array(37,-219,653,741),256=>array(26,0,703,881),257=>array(50,-23,578,702),258=>array(26,0,703,927),259=>array(50,-23,586,751),260=>array(26,-233,703,729),261=>array(50,-233,578,549),262=>array(107,-23,793,930),263=>array(77,-23,597,757),264=>array(107,-23,793,941),265=>array(77,-23,597,757),266=>array(107,-23,793,899),267=>array(77,-23,597,742),268=>array(107,-23,793,931),269=>array(77,-23,597,757),270=>array(77,0,776,931),271=>array(79,-23,888,740),272=>array(73,0,776,729),273=>array(79,-23,746,729),274=>array(79,0,762,881),275=>array(64,-23,591,702),276=>array(79,0,762,927),277=>array(64,-23,591,751),278=>array(79,0,762,899),279=>array(64,-23,591,742),280=>array(79,-233,762,729),281=>array(64,-233,591,549),282=>array(79,0,762,931),283=>array(64,-23,597,757),284=>array(107,-23,819,939),285=>array(26,-218,656,787),286=>array(107,-23,819,927),287=>array(26,-218,656,751),288=>array(107,-23,819,899),289=>array(26,-218,656,742),290=>array(107,-300,819,741),291=>array(26,-218,656,833),292=>array(68,0,812,936),293=>array(67,0,629,932),294=>array(-9,0,767,729),295=>array(68,0,625,729),296=>array(63,0,514,921),297=>array(78,0,489,762),298=>array(63,0,476,881),299=>array(78,0,450,702),300=>array(63,0,473,942),301=>array(78,0,445,783),302=>array(7,-233,368,729),303=>array(0,-233,351,729),304=>array(63,0,387,899),305=>array(67,0,322,540),306=>array(98,-23,680,729),307=>array(67,-218,575,729),308=>array(59,-23,641,936),309=>array(-32,-218,440,756),310=>array(74,-300,843,729),311=>array(59,-300,651,729),312=>array(59,0,624,540),313=>array(80,0,606,930),314=>array(67,0,451,930),315=>array(80,-300,606,729),316=>array(9,-300,362,729),317=>array(80,0,658,740),318=>array(67,0,568,740),319=>array(80,0,613,729),320=>array(67,0,508,729),321=>array(54,0,624,729),322=>array(50,0,372,729),323=>array(68,0,816,930),324=>array(63,0,629,757),325=>array(68,-300,816,729),326=>array(63,-300,629,549),327=>array(68,0,816,931),328=>array(63,0,629,757),329=>array(108,0,674,790),330=>array(51,-16,781,741),331=>array(63,-218,629,549),332=>array(106,-23,828,881),333=>array(82,-23,634,702),334=>array(106,-23,828,943),335=>array(82,-23,634,751),336=>array(106,-23,828,919),337=>array(82,-23,693,757),338=>array(90,-23,1107,741),339=>array(82,-23,997,549),340=>array(80,0,785,930),341=>array(63,0,515,757),342=>array(80,-300,785,729),343=>array(15,-300,487,549),344=>array(80,0,785,931),345=>array(63,0,534,757),346=>array(76,-23,725,930),347=>array(60,-23,589,757),348=>array(76,-23,725,932),349=>array(60,-23,589,756),350=>array(76,-220,725,741),351=>array(60,-220,589,549),352=>array(76,-23,725,931),353=>array(60,-23,597,757),354=>array(132,-219,753,729),355=>array(-2,-228,414,674),356=>array(142,0,753,922),357=>array(101,-23,578,740),358=>array(142,0,753,729),359=>array(73,-23,414,674),360=>array(119,-23,809,922),361=>array(88,-23,656,762),362=>array(119,-23,809,881),363=>array(88,-23,656,702),364=>array(119,-23,809,928),365=>array(88,-23,656,751),366=>array(119,-23,809,953),367=>array(88,-23,656,759),368=>array(119,-23,821,918),369=>array(88,-23,711,757),370=>array(119,-233,809,729),371=>array(88,-233,656,540),372=>array(168,0,1087,938),373=>array(120,0,881,787),374=>array(182,0,805,929),375=>array(37,-219,653,787),376=>array(182,0,805,921),377=>array(30,0,733,930),378=>array(21,0,575,757),379=>array(30,0,733,899),380=>array(21,0,575,742),381=>array(30,0,733,931),382=>array(21,0,575,754),383=>array(90,0,464,729),384=>array(60,-23,641,729),385=>array(140,0,905,729),386=>array(82,0,749,729),387=>array(59,-23,639,729),388=>array(69,0,681,729),389=>array(59,-23,640,729),390=>array(82,-23,768,741),391=>array(107,-23,897,748),392=>array(77,-23,703,558),393=>array(73,0,776,729),394=>array(90,0,864,729),395=>array(57,0,756,729),396=>array(54,-23,679,729),397=>array(-20,-180,609,549),398=>array(54,0,754,729),399=>array(59,-23,782,741),400=>array(29,-23,685,741),401=>array(-51,-218,717,729),402=>array(-22,-218,463,729),403=>array(50,-23,869,748),404=>array(181,-20,805,729),405=>array(67,-16,986,729),406=>array(50,-48,335,754),407=>array(55,0,473,729),408=>array(25,0,856,745),409=>array(59,0,649,729),410=>array(41,-25,450,754),411=>array(16,-13,595,739),412=>array(62,-9,972,729),413=>array(-47,-218,802,729),414=>array(26,-201,592,549),415=>array(29,-24,752,741),416=>array(102,-23,950,763),417=>array(82,-23,777,585),418=>array(95,-200,1049,744),419=>array(70,-218,760,550),420=>array(90,0,846,729),421=>array(-25,-218,722,560),422=>array(60,-190,634,729),423=>array(66,-23,737,741),424=>array(59,-23,593,549),425=>array(-1,-25,786,743),426=>array(159,-213,462,740),427=>array(41,-218,405,674),428=>array(89,0,747,729),429=>array(96,-23,438,729),430=>array(88,-218,699,729),431=>array(119,-23,959,895),432=>array(87,-23,806,707),433=>array(52,-33,875,739),434=>array(102,-12,757,731),435=>array(104,0,858,729),436=>array(37,-219,799,730),437=>array(30,0,733,729),438=>array(21,0,574,540),439=>array(32,-23,591,729),440=>array(31,-23,595,729),441=>array(46,-143,681,524),442=>array(12,-254,606,549),443=>array(20,1,663,740),446=>array(32,-13,535,729),447=>array(7,-218,675,552),448=>array(80,-23,348,800),449=>array(80,-23,528,800),450=>array(88,-25,637,801),451=>array(112,0,417,726),452=>array(77,0,1455,931),453=>array(77,0,1297,754),454=>array(79,-23,1186,754),455=>array(80,-23,1252,729),456=>array(80,-218,976,729),457=>array(67,-218,643,729),458=>array(68,-23,1363,729),459=>array(68,-218,1087,729),460=>array(63,-218,976,729),461=>array(26,0,722,932),462=>array(50,-23,589,756),463=>array(63,0,492,929),464=>array(78,0,472,756),465=>array(106,-23,828,931),466=>array(82,-23,634,756),467=>array(119,-23,809,930),468=>array(88,-23,656,756),469=>array(119,-23,809,990),470=>array(88,-23,656,865),471=>array(119,-23,809,1073),472=>array(88,-23,656,953),473=>array(119,-23,809,1063),474=>array(88,-23,656,948),475=>array(119,-23,809,1063),476=>array(88,-23,656,944),477=>array(56,-23,583,549),478=>array(26,0,734,990),479=>array(50,-23,608,865),480=>array(26,0,730,991),481=>array(50,-23,608,861),482=>array(1,0,1104,881),483=>array(54,-23,927,702),484=>array(107,-23,845,741),485=>array(28,-218,656,549),486=>array(107,-23,819,925),487=>array(26,-218,656,756),488=>array(74,0,843,926),489=>array(59,0,651,887),490=>array(106,-248,828,741),491=>array(82,-248,634,549),492=>array(106,-248,828,880),493=>array(82,-248,634,702),494=>array(32,-23,591,931),495=>array(50,-143,627,754),496=>array(-43,-218,458,747),497=>array(77,0,1455,729),498=>array(77,0,1297,729),499=>array(79,-23,1186,729),500=>array(107,-23,819,930),501=>array(26,-218,656,757),503=>array(66,1,727,743),504=>array(68,0,816,924),505=>array(63,0,629,757),506=>array(26,0,734,930),507=>array(50,-23,589,950),508=>array(1,0,1104,930),509=>array(54,-23,927,757),510=>array(34,-39,906,930),511=>array(12,-38,709,757),512=>array(26,0,703,933),513=>array(50,-23,578,759),514=>array(26,0,703,922),515=>array(50,-23,578,752),516=>array(79,0,762,937),517=>array(64,-23,591,759),518=>array(79,0,762,932),519=>array(64,-23,591,752),520=>array(63,0,434,933),521=>array(70,0,422,759),522=>array(63,0,444,928),523=>array(67,0,403,752),524=>array(106,-23,828,939),525=>array(82,-23,634,759),526=>array(106,-23,828,933),527=>array(82,-23,634,752),528=>array(80,0,785,936),529=>array(63,0,487,759),530=>array(80,0,785,923),531=>array(63,0,487,752),532=>array(119,-23,809,932),533=>array(88,-23,656,759),534=>array(119,-23,809,926),535=>array(88,-23,656,752),536=>array(76,-293,725,741),537=>array(60,-293,589,549),538=>array(142,-293,753,729),539=>array(65,-293,414,674),540=>array(27,-140,632,741),541=>array(40,-133,512,551),542=>array(68,0,812,931),543=>array(67,0,664,879),548=>array(33,-215,778,729),549=>array(21,-216,583,541),550=>array(26,0,703,899),551=>array(50,-23,578,729),552=>array(79,-213,762,729),553=>array(64,-236,591,549),554=>array(106,-23,828,988),555=>array(82,-23,634,861),556=>array(106,-23,828,998),557=>array(82,-23,634,861),558=>array(106,-23,828,899),559=>array(82,-23,634,729),560=>array(106,-23,828,991),561=>array(82,-23,634,861),562=>array(182,0,805,880),563=>array(37,-219,653,702),567=>array(-43,-218,325,540),592=>array(50,-23,578,549),593=>array(50,-23,634,549),594=>array(50,-23,634,549),595=>array(50,-23,630,729),596=>array(50,-23,570,549),597=>array(36,-51,636,549),598=>array(50,-218,674,729),599=>array(50,-23,739,729),600=>array(50,-23,580,549),601=>array(70,-23,597,549),602=>array(50,-23,880,570),603=>array(50,-10,617,552),604=>array(50,-23,579,549),605=>array(50,-23,888,570),606=>array(50,-10,591,547),607=>array(-35,-218,353,540),608=>array(-2,-218,720,688),609=>array(26,-218,656,549),610=>array(50,-23,568,549),611=>array(57,-219,634,540),612=>array(67,-24,704,550),613=>array(60,-218,630,540),614=>array(60,0,617,729),615=>array(53,-218,610,729),616=>array(46,0,362,729),617=>array(64,-23,304,540),618=>array(3,0,390,540),619=>array(69,0,554,729),620=>array(84,0,573,729),621=>array(41,-218,362,729),622=>array(55,-143,796,729),623=>array(65,-6,916,543),624=>array(64,-218,916,540),625=>array(55,-218,905,549),626=>array(-33,-218,644,549),627=>array(53,-218,619,549),628=>array(54,0,652,540),629=>array(51,-23,604,549),630=>array(50,-23,915,539),631=>array(50,-9,836,542),632=>array(62,-201,715,729),633=>array(40,-8,464,541),634=>array(40,-8,503,729),635=>array(40,-217,464,541),636=>array(13,-200,479,549),637=>array(27,-218,476,549),638=>array(53,0,509,549),639=>array(86,-200,470,549),640=>array(55,0,622,540),641=>array(55,0,676,540),642=>array(-40,-218,632,549),643=>array(-26,-218,458,729),644=>array(-35,-218,449,729),645=>array(74,-218,335,560),646=>array(-10,-218,648,729),647=>array(21,-147,334,550),648=>array(71,-218,425,674),649=>array(44,-23,686,540),650=>array(60,-24,774,544),651=>array(60,-23,640,524),652=>array(19,0,541,540),653=>array(7,0,768,540),654=>array(7,1,623,760),655=>array(128,0,651,540),656=>array(19,-218,572,540),657=>array(21,-96,597,540),658=>array(50,-143,627,540),659=>array(55,-143,615,540),660=>array(127,0,632,744),661=>array(118,0,618,744),662=>array(58,0,558,744),663=>array(41,-201,637,739),664=>array(50,-23,602,549),665=>array(60,0,612,540),666=>array(50,-10,591,547),667=>array(50,-23,682,549),668=>array(59,0,657,540),669=>array(-10,-218,571,729),670=>array(26,-191,618,538),671=>array(60,0,432,540),672=>array(50,-218,730,688),673=>array(127,0,632,744),674=>array(125,0,628,742),675=>array(75,-23,1078,729),676=>array(75,-143,1080,729),677=>array(75,-96,1103,729),678=>array(100,-23,839,674),679=>array(100,-218,723,729),680=>array(100,-23,859,674),681=>array(90,-218,890,729),682=>array(67,-23,787,729),683=>array(67,0,742,729),684=>array(80,-1,664,740),685=>array(43,109,601,634),686=>array(126,-218,696,729),687=>array(126,-300,696,729),688=>array(114,390,481,865),689=>array(115,390,478,864),690=>array(66,235,332,852),691=>array(127,390,403,748),692=>array(94,383,370,741),693=>array(117,249,394,743),694=>array(97,390,501,742),695=>array(165,389,661,741),696=>array(108,248,509,742),697=>array(159,467,370,743),698=>array(159,467,578,743),699=>array(300,503,513,754),700=>array(208,483,382,730),701=>array(206,457,343,708),702=>array(237,573,403,798),703=>array(241,573,406,798),704=>array(139,390,463,783),705=>array(140,390,461,783),706=>array(147,544,490,795),707=>array(131,545,474,796),708=>array(144,559,427,765),709=>array(191,559,474,766),710=>array(135,610,453,757),711=>array(167,610,485,757),712=>array(250,588,373,785),713=>array(147,622,464,702),714=>array(247,607,475,757),715=>array(175,607,339,757),716=>array(46,-216,169,-19),717=>array(-15,-149,302,-69),718=>array(236,-186,400,-36),719=>array(190,-186,418,-36),720=>array(82,0,374,561),721=>array(196,400,374,561),722=>array(104,-23,269,202),723=>array(85,-21,250,204),724=>array(28,134,383,412),725=>array(67,139,422,417),726=>array(45,99,401,433),727=>array(45,216,401,316),728=>array(188,611,455,754),729=>array(241,621,377,741),730=>array(214,593,398,773),731=>array(23,-233,248,0),732=>array(117,622,500,744),733=>array(82,610,498,757),734=>array(84,219,428,585),735=>array(218,589,579,803),736=>array(121,248,497,742),737=>array(140,390,332,865),738=>array(114,379,459,752),739=>array(97,389,508,741),740=>array(151,390,477,874),741=>array(176,1,643,800),742=>array(141,1,641,800),743=>array(99,-1,639,800),744=>array(56,0,640,800),745=>array(23,1,639,800),746=>array(57,-1,517,621),747=>array(53,-1,572,629),748=>array(171,-181,489,-34),749=>array(137,546,483,780),750=>array(171,469,595,729),751=>array(26,-221,309,-14),752=>array(-21,-218,262,-12),753=>array(-19,-257,324,-6),754=>array(-46,-262,297,-11),755=>array(51,-202,235,-22),756=>array(222,381,386,531),757=>array(175,381,515,531),758=>array(173,379,576,531),759=>array(-10,-148,373,-26),760=>array(113,65,374,585),761=>array(114,497,354,764),762=>array(151,497,356,764),763=>array(-11,-88,194,179),764=>array(-12,-87,228,180),765=>array(-13,-197,291,-60),766=>array(-13,-200,278,-28),767=>array(-46,-237,330,-1),768=>array(-158,607,6,757),769=>array(-86,607,142,757),770=>array(-198,610,120,757),771=>array(-218,613,165,735),772=>array(-209,598,108,678),773=>array(-454,618,163,698),774=>array(-145,611,122,754),775=>array(-92,621,44,741),776=>array(-191,621,141,741),777=>array(-156,554,24,767),778=>array(-119,593,65,773),779=>array(-251,610,165,757),780=>array(-166,610,152,757),781=>array(-88,588,35,785),782=>array(-157,588,111,785),783=>array(-252,607,100,757),784=>array(-145,611,122,840),785=>array(-145,611,122,754),786=>array(-221,583,-80,740),787=>array(-219,583,-78,740),788=>array(-108,589,28,746),789=>array(123,583,264,740),790=>array(-222,-200,-58,-50),791=>array(-277,-200,-49,-50),792=>array(-337,-300,-69,-44),793=>array(-327,-300,-59,-44),794=>array(-73,412,254,716),795=>array(-62,425,203,672),796=>array(-315,-258,-150,-33),797=>array(-348,-230,-58,-45),798=>array(-331,-230,-40,-45),799=>array(-348,-313,-58,-45),800=>array(-336,-173,-47,-71),801=>array(-250,-233,13,60),802=>array(-140,-233,61,60),803=>array(-253,-205,-117,-85),804=>array(-356,-202,-24,-82),805=>array(-295,-231,-111,-51),806=>array(-306,-300,-134,-73),807=>array(-346,-220,-63,0),808=>array(-310,-233,-85,0),809=>array(-254,-246,-131,-49),810=>array(-344,-189,-40,-52),811=>array(-339,-177,-23,-55),812=>array(-318,-190,0,-43),813=>array(-362,-194,-44,-47),814=>array(-305,-189,-38,-46),815=>array(-342,-197,-75,-54),816=>array(-373,-172,10,-50),817=>array(-344,-147,-27,-67),818=>array(-478,-171,99,-91),819=>array(-617,-286,-8,-62),820=>array(-338,217,45,339),821=>array(-292,223,25,303),822=>array(-518,227,59,307),823=>array(-701,3,-13,616),824=>array(-701,-61,-13,749),825=>array(-246,-232,-81,-7),826=>array(-340,-206,-36,-69),827=>array(-387,-300,-70,-39),828=>array(-384,-174,-75,-59),829=>array(-190,569,171,783),830=>array(-101,579,65,853),831=>array(-445,581,164,805),832=>array(-158,608,6,758),833=>array(-86,607,142,757),834=>array(-213,625,170,747),835=>array(-219,583,-78,740),836=>array(-182,590,204,782),837=>array(-233,-200,-51,-61),838=>array(-344,619,-40,756),839=>array(-368,-266,-32,-56),840=>array(-379,-248,-100,-51),841=>array(-316,-240,-122,-66),842=>array(-242,580,140,801),843=>array(-233,568,150,930),844=>array(-255,582,165,845),845=>array(-513,-231,-69,-46),846=>array(-418,-300,-176,-33),848=>array(-223,545,120,796),849=>array(-289,549,-124,774),850=>array(-305,572,-38,800),851=>array(-377,-224,-16,-10),852=>array(-451,-273,-108,-22),853=>array(-462,-272,-119,-21),854=>array(-582,-251,-55,-36),855=>array(-204,556,-39,781),856=>array(-197,645,-61,765),857=>array(-458,-301,-192,-48),858=>array(-562,-243,-104,-33),859=>array(-222,596,75,880),860=>array(-365,-235,340,-41),861=>array(-203,577,502,771),862=>array(-213,596,487,691),863=>array(-358,-164,342,-69),864=>array(-224,595,515,795),865=>array(-215,606,490,800),866=>array(-355,-280,294,-11),867=>array(-341,569,-140,788),868=>array(-354,570,-152,788),869=>array(-285,575,-172,853),870=>array(-348,570,-137,788),871=>array(-330,570,-114,785),872=>array(-315,571,-116,789),873=>array(-329,570,-92,856),874=>array(-329,569,-114,848),875=>array(-407,572,-82,781),876=>array(-290,572,-128,781),877=>array(-275,570,-155,836),878=>array(-320,570,-120,776),879=>array(-356,570,-114,776),884=>array(25,575,172,789),885=>array(-1,-182,213,-35),890=>array(100,-200,282,-61),894=>array(76,-174,374,520),900=>array(154,559,382,709),901=>array(148,590,534,782),902=>array(-113,-25,630,741),903=>array(193,374,374,520),904=>array(78,-25,937,741),905=>array(78,-25,999,741),906=>array(49,-25,487,741),908=>array(54,-51,922,763),910=>array(70,-25,1069,741),911=>array(78,-25,914,747),912=>array(-12,-16,443,802),913=>array(-113,-25,630,741),914=>array(-46,-25,656,741),915=>array(-38,-25,687,741),916=>array(-119,-26,626,741),917=>array(-40,-25,719,741),918=>array(-85,-25,710,741),919=>array(-55,-25,746,741),920=>array(0,-38,770,755),921=>array(-51,-25,284,741),922=>array(-46,-25,799,741),923=>array(-123,-25,620,741),924=>array(-56,-25,869,741),925=>array(-64,-25,741,741),926=>array(-50,-25,709,741),927=>array(1,-51,772,763),928=>array(-40,-25,761,741),929=>array(-42,-25,695,741),931=>array(-81,-25,706,743),932=>array(76,-25,728,741),933=>array(63,-25,814,741),934=>array(-9,-25,722,745),935=>array(-116,-25,813,741),936=>array(18,-27,815,746),937=>array(-79,-25,744,747),938=>array(-51,-25,404,921),939=>array(63,-25,814,921),940=>array(11,-12,615,763),941=>array(-30,-10,537,766),942=>array(3,-215,578,769),943=>array(-12,-16,359,766),944=>array(-14,-39,575,801),945=>array(11,-12,615,552),946=>array(-107,-197,557,731),947=>array(74,-193,650,554),948=>array(-33,-5,596,724),949=>array(-30,-10,537,552),950=>array(-14,-205,565,735),951=>array(3,-215,578,556),952=>array(-15,-13,548,731),953=>array(-12,-16,242,545),954=>array(-27,-14,604,543),955=>array(-106,-5,498,732),956=>array(-44,-194,629,543),957=>array(48,-9,594,542),958=>array(-34,-212,556,728),959=>array(-14,-10,564,552),960=>array(27,-29,702,545),961=>array(-65,-225,604,557),962=>array(12,-214,570,561),963=>array(-4,-37,687,555),964=>array(59,-29,590,543),965=>array(-14,-39,575,543),966=>array(34,-225,754,547),967=>array(-129,-237,687,563),968=>array(20,-225,740,543),969=>array(-7,-34,736,555),970=>array(-12,-16,365,729),971=>array(-14,-39,575,729),972=>array(-14,-10,564,760),973=>array(-14,-39,575,766),974=>array(-7,-34,736,766),977=>array(79,-37,673,755),978=>array(158,-25,889,766),979=>array(96,-25,1062,766),980=>array(158,-25,889,921),981=>array(62,-201,715,729),982=>array(52,-34,847,559),983=>array(-51,-216,714,564),1008=>array(-51,-42,714,564),1009=>array(23,-211,633,557),1012=>array(29,-23,752,741),1013=>array(66,-37,419,555),1024=>array(79,0,762,951),1025=>array(79,0,762,921),1026=>array(83,-165,770,729),1027=>array(80,0,747,930),1028=>array(110,-23,791,741),1029=>array(76,-23,725,741),1030=>array(63,0,368,729),1031=>array(63,0,484,900),1032=>array(59,-23,641,729),1033=>array(-31,0,1035,729),1034=>array(-9,0,1043,729),1035=>array(65,0,753,729),1036=>array(74,0,843,930),1037=>array(82,0,830,951),1038=>array(143,0,840,944),1039=>array(68,0,812,729),1040=>array(26,0,703,729),1041=>array(82,0,749,729),1042=>array(82,0,762,729),1043=>array(80,0,747,729),1044=>array(-8,-150,893,729),1045=>array(79,0,762,729),1046=>array(22,0,1189,729),1047=>array(75,-23,724,741),1048=>array(82,0,830,729),1049=>array(82,0,830,944),1050=>array(74,0,843,729),1051=>array(22,0,787,729),1052=>array(82,0,947,729),1053=>array(82,0,826,729),1054=>array(104,-23,826,741),1055=>array(82,0,826,729),1056=>array(82,0,753,729),1057=>array(96,-23,782,741),1058=>array(142,0,753,729),1059=>array(143,0,840,729),1060=>array(109,0,959,729),1061=>array(15,0,792,729),1062=>array(82,-150,834,729),1063=>array(141,0,761,729),1064=>array(82,0,1205,729),1065=>array(82,-150,1213,729),1066=>array(142,0,856,729),1067=>array(82,0,1053,729),1068=>array(82,0,695,729),1069=>array(95,-23,776,741),1070=>array(81,-23,1193,741),1071=>array(15,0,781,729),1072=>array(59,-23,587,549),1073=>array(94,-23,705,777),1074=>array(60,0,612,540),1075=>array(60,0,523,540),1076=>array(-6,-125,748,540),1077=>array(75,-23,602,549),1078=>array(10,0,861,540),1079=>array(62,-23,591,549),1080=>array(60,0,658,540),1081=>array(60,0,658,754),1082=>array(60,0,625,540),1083=>array(10,0,638,540),1084=>array(60,0,719,540),1085=>array(60,0,658,540),1086=>array(74,-23,626,549),1087=>array(60,0,658,540),1088=>array(14,-218,640,549),1089=>array(73,-23,593,549),1090=>array(106,0,540,540),1091=>array(37,-219,649,540),1092=>array(75,-218,985,719),1093=>array(10,0,640,540),1094=>array(60,-125,684,540),1095=>array(103,0,619,540),1096=>array(60,0,956,540),1097=>array(60,-125,982,540),1098=>array(100,0,699,540),1099=>array(60,0,861,540),1100=>array(60,0,577,540),1101=>array(70,-23,585,549),1102=>array(60,-23,931,549),1103=>array(20,0,641,540),1104=>array(75,-23,602,759),1105=>array(75,-23,602,729),1106=>array(81,-173,638,729),1107=>array(60,0,535,757),1108=>array(72,-23,590,549),1109=>array(66,-23,595,549),1110=>array(70,0,365,729),1111=>array(80,0,448,741),1112=>array(-42,-218,366,729),1113=>array(20,0,894,540),1114=>array(60,0,903,540),1115=>array(83,0,639,729),1116=>array(60,0,625,757),1117=>array(60,0,658,759),1118=>array(37,-219,649,752),1119=>array(60,0,658,540),1120=>array(125,0,1095,729),1121=>array(87,0,822,541),1136=>array(128,-27,925,746),1137=>array(96,-225,816,543),1138=>array(106,-23,829,741),1139=>array(75,-23,628,549),1148=>array(125,0,1095,999),1149=>array(87,0,825,815),1150=>array(125,0,1095,900),1151=>array(87,0,822,729),1154=>array(11,-220,476,508),1155=>array(-261,611,160,799),1156=>array(-158,611,109,754),1157=>array(-213,598,1,730),1158=>array(-193,592,-3,724),1159=>array(-465,579,144,780),1160=>array(-764,-122,281,869),1161=>array(-769,-235,339,873),1162=>array(68,-150,816,944),1163=>array(60,-125,683,754),1164=>array(66,0,679,729),1165=>array(95,0,587,540),1166=>array(80,0,751,729),1167=>array(14,-218,642,549),1168=>array(80,0,776,864),1169=>array(60,0,550,666),1170=>array(86,0,753,729),1171=>array(75,0,564,540),1172=>array(80,-166,747,729),1173=>array(60,-132,523,540),1174=>array(15,-150,1182,729),1175=>array(11,-125,862,540),1176=>array(67,-233,716,741),1177=>array(56,-233,580,549),1178=>array(80,-150,847,729),1179=>array(60,-125,625,540),1180=>array(80,0,847,729),1181=>array(60,0,625,540),1182=>array(80,0,847,729),1183=>array(60,0,625,540),1184=>array(142,0,1010,729),1185=>array(100,0,745,540),1186=>array(70,-150,814,729),1187=>array(60,-125,674,540),1188=>array(80,0,1134,729),1189=>array(60,0,855,540),1190=>array(80,-166,1119,729),1191=>array(60,-132,862,540),1192=>array(95,-23,939,741),1193=>array(75,-23,747,549),1194=>array(100,-233,781,741),1195=>array(77,-233,595,549),1196=>array(142,-150,753,729),1197=>array(101,-125,535,540),1198=>array(182,0,805,729),1199=>array(125,-189,688,540),1200=>array(95,0,798,729),1201=>array(59,-189,688,540),1202=>array(16,-150,793,729),1203=>array(10,-125,640,540),1204=>array(142,-150,954,729),1205=>array(101,-125,749,540),1206=>array(144,-150,752,729),1207=>array(104,-125,631,540),1208=>array(144,0,744,729),1209=>array(114,0,615,540),1210=>array(80,0,680,729),1211=>array(70,0,571,540),1212=>array(137,-23,1032,745),1213=>array(108,-23,793,549),1214=>array(135,-197,1032,745),1215=>array(101,-197,787,549),1216=>array(80,0,385,729),1217=>array(16,0,1183,944),1218=>array(10,0,861,754),1219=>array(80,-163,847,729),1220=>array(60,-132,625,540),1221=>array(21,-150,786,729),1222=>array(21,-125,675,540),1223=>array(80,-166,824,729),1224=>array(60,-132,658,540),1225=>array(80,-150,824,729),1226=>array(60,-125,683,540),1227=>array(150,-150,750,729),1228=>array(116,-125,617,540),1229=>array(80,-150,945,729),1230=>array(70,-125,755,540),1231=>array(80,0,385,729),1232=>array(13,0,690,972),1233=>array(59,-23,587,783),1234=>array(15,0,709,949),1235=>array(59,-23,589,760),1236=>array(1,0,1104,729),1237=>array(54,-23,927,549),1238=>array(80,0,763,972),1239=>array(76,-23,603,783),1240=>array(105,-23,791,741),1241=>array(77,-23,600,549),1242=>array(105,-23,791,949),1243=>array(77,-23,600,760),1244=>array(14,0,1181,949),1245=>array(10,0,861,760),1246=>array(75,-23,724,949),1247=>array(62,-23,591,760),1248=>array(101,-23,660,729),1249=>array(88,-143,665,540),1250=>array(80,0,828,880),1251=>array(60,0,658,700),1252=>array(80,0,828,949),1253=>array(60,0,658,760),1254=>array(104,-23,826,949),1255=>array(74,-23,626,760),1256=>array(106,-23,829,741),1257=>array(68,-23,621,549),1258=>array(106,-23,829,949),1259=>array(68,-23,621,760),1260=>array(95,-23,776,949),1261=>array(70,-23,603,760),1262=>array(143,0,840,880),1263=>array(37,-219,649,700),1264=>array(143,0,840,949),1265=>array(37,-219,649,760),1266=>array(143,0,840,976),1267=>array(37,-219,649,787),1268=>array(141,0,761,949),1269=>array(103,0,619,760),1270=>array(80,-150,747,729),1271=>array(60,-125,523,540),1272=>array(80,0,1051,949),1273=>array(60,0,861,760),1296=>array(71,-23,735,741),1297=>array(58,-23,583,549),1298=>array(33,-199,802,729),1299=>array(26,-168,632,540),1306=>array(109,-54,831,741),1307=>array(72,-218,659,549),1308=>array(168,0,1087,729),1309=>array(120,0,881,540),1310=>array(82,0,849,729),1311=>array(60,0,625,540),1329=>array(112,-130,803,729),1330=>array(70,0,761,752),1331=>array(124,1,809,751),1332=>array(123,0,823,752),1333=>array(117,0,784,752),1334=>array(76,1,822,760),1335=>array(71,4,575,746),1336=>array(70,0,761,752),1337=>array(70,-27,941,753),1338=>array(83,-24,783,743),1339=>array(70,2,752,757),1340=>array(70,2,431,741),1341=>array(70,-20,954,748),1342=>array(115,-29,967,801),1343=>array(135,0,758,729),1344=>array(67,-99,783,750),1345=>array(57,-59,735,753),1346=>array(118,0,774,752),1347=>array(35,1,790,754),1348=>array(112,-23,912,729),1349=>array(76,-26,688,753),1350=>array(128,0,789,729),1351=>array(90,-25,710,770),1352=>array(65,1,781,754),1353=>array(80,-47,721,753),1354=>array(124,1,767,754),1355=>array(69,-1,816,760),1356=>array(65,0,823,752),1357=>array(117,-21,836,741),1358=>array(134,1,818,754),1359=>array(79,-37,747,753),1360=>array(70,0,761,752),1361=>array(80,-23,699,753),1362=>array(70,1,501,748),1363=>array(103,-24,869,750),1364=>array(40,1,745,753),1365=>array(100,-27,858,754),1366=>array(70,-24,789,750),1369=>array(241,573,406,798),1370=>array(130,456,339,748),1371=>array(122,563,388,743),1372=>array(128,520,495,790),1373=>array(175,607,339,757),1374=>array(133,567,496,815),1375=>array(142,563,485,734),1377=>array(90,-25,930,549),1378=>array(19,-218,631,549),1379=>array(76,-218,661,549),1380=>array(65,-201,646,549),1381=>array(89,-23,658,729),1382=>array(81,-218,666,549),1383=>array(70,-121,499,729),1384=>array(19,-218,631,549),1385=>array(22,-200,693,549),1386=>array(80,-20,793,729),1387=>array(27,-200,627,729),1388=>array(27,-201,365,729),1389=>array(27,-200,886,729),1390=>array(82,-23,751,748),1391=>array(94,-200,663,729),1392=>array(70,0,622,741),1393=>array(82,-23,634,729),1394=>array(65,-200,631,549),1395=>array(30,0,706,797),1396=>array(94,-23,703,729),1397=>array(-41,-235,376,549),1398=>array(94,-23,663,729),1399=>array(5,-200,579,557),1400=>array(65,0,616,560),1401=>array(-5,-200,444,540),1402=>array(85,-200,925,549),1403=>array(59,-200,615,562),1404=>array(65,0,639,549),1405=>array(98,-23,651,548),1406=>array(94,-200,703,729),1407=>array(94,-23,974,549),1408=>array(22,-200,631,549),1409=>array(48,-200,664,560),1410=>array(70,0,338,540),1411=>array(94,-200,974,729),1412=>array(22,-200,646,549),1413=>array(80,-37,636,555),1414=>array(70,-200,782,729),1415=>array(94,-23,663,729),1417=>array(113,0,374,520),1418=>array(57,141,422,298),1423=>array(123,0,801,752),1456=>array(264,-267,390,-60),1457=>array(133,-267,518,-60),1458=>array(232,-267,591,-60),1459=>array(208,-260,563,-60),1460=>array(293,-142,393,-60),1461=>array(228,-142,458,-60),1462=>array(212,-267,440,-60),1463=>array(249,-142,466,-60),1464=>array(236,-248,453,-60),1465=>array(204,660,304,742),1467=>array(151,-266,510,-60),1468=>array(263,259,363,341),1469=>array(227,-248,350,-60),1470=>array(259,485,665,600),1471=>array(295,660,512,742),1472=>array(18,-100,327,700),1473=>array(745,639,845,721),1474=>array(205,639,305,721),1475=>array(113,0,374,520),1476=>array(422,639,522,721),1488=>array(49,0,709,600),1489=>array(37,0,595,600),1490=>array(7,0,500,600),1491=>array(126,0,653,600),1492=>array(39,0,652,600),1493=>array(39,0,306,600),1494=>array(109,0,458,600),1495=>array(39,0,655,600),1496=>array(81,0,651,600),1497=>array(92,276,300,600),1498=>array(125,-200,563,600),1499=>array(36,0,577,600),1500=>array(125,0,683,750),1501=>array(40,0,656,600),1502=>array(46,0,677,600),1503=>array(-4,-200,306,600),1504=>array(33,0,402,600),1505=>array(80,0,651,600),1506=>array(9,-55,667,600),1507=>array(112,-200,634,601),1508=>array(39,0,641,600),1509=>array(114,-200,632,600),1510=>array(46,0,667,600),1511=>array(-3,-200,687,600),1512=>array(126,0,570,600),1513=>array(87,0,854,600),1514=>array(23,0,730,600),1520=>array(39,0,563,600),1521=>array(92,0,559,600),1522=>array(92,276,558,600),1523=>array(137,470,303,729),1524=>array(137,470,539,729),4256=>array(102,0,604,720),4257=>array(100,0,637,720),4258=>array(101,0,659,740),4259=>array(114,20,897,740),4260=>array(104,0,660,740),4261=>array(103,0,673,740),4262=>array(177,0,816,740),4263=>array(124,0,966,740),4264=>array(127,20,682,740),4265=>array(104,0,670,740),4266=>array(114,20,1015,740),4267=>array(99,0,644,740),4268=>array(119,0,668,720),4269=>array(120,20,874,740),4270=>array(104,0,653,720),4271=>array(87,0,683,720),4272=>array(105,20,796,720),4273=>array(125,0,606,720),4274=>array(112,0,829,740),4275=>array(167,0,798,740),4276=>array(173,0,914,740),4277=>array(104,0,699,720),4278=>array(117,20,899,740),4279=>array(104,0,700,720),4280=>array(106,0,706,740),4281=>array(84,20,641,740),4282=>array(144,0,825,720),4283=>array(99,0,671,720),4284=>array(120,0,764,740),4285=>array(104,0,781,720),4286=>array(119,0,604,720),4287=>array(28,0,993,739),4288=>array(99,0,667,720),4304=>array(63,0,475,460),4305=>array(69,0,537,720),4306=>array(13,-260,528,420),4307=>array(25,-260,729,420),4308=>array(8,-260,485,420),4309=>array(11,-260,506,420),4310=>array(149,0,647,740),4311=>array(67,0,738,420),4312=>array(65,20,514,420),4313=>array(11,-260,508,420),4314=>array(34,-260,919,420),4315=>array(70,0,593,740),4316=>array(71,0,623,740),4317=>array(71,20,735,420),4318=>array(64,0,564,720),4319=>array(45,-260,562,420),4320=>array(71,20,796,720),4321=>array(80,21,519,740),4322=>array(32,-260,706,601),4323=>array(66,-260,704,420),4324=>array(74,-260,735,420),4325=>array(6,-260,582,720),4326=>array(26,-260,716,420),4327=>array(6,-260,524,420),4328=>array(61,0,590,740),4329=>array(34,20,541,740),4330=>array(34,-265,672,420),4331=>array(69,0,623,720),4332=>array(69,0,642,740),4333=>array(6,-260,626,720),4334=>array(69,0,521,720),4335=>array(-49,-260,730,418),4336=>array(67,0,588,724),4337=>array(58,6,815,725),4338=>array(29,-4,460,394),4339=>array(4,-274,507,386),4340=>array(1,-274,557,724),4341=>array(64,6,605,734),4345=>array(64,-280,579,400),4347=>array(77,1,517,556),4348=>array(109,228,524,783),5024=>array(60,0,738,729),5025=>array(60,-10,711,729),5026=>array(107,0,714,729),5027=>array(40,-25,897,729),5028=>array(94,-23,1103,741),5029=>array(60,0,339,729),5030=>array(72,-25,681,743),5031=>array(108,-24,889,742),5032=>array(60,0,667,729),5033=>array(62,-25,881,729),5034=>array(-16,0,661,729),5035=>array(29,-23,591,729),5036=>array(60,0,716,729),5037=>array(97,0,981,729),5038=>array(105,0,668,741),5039=>array(-2,-24,837,752),5040=>array(60,0,579,729),5041=>array(60,0,723,729),5042=>array(27,-24,975,742),5043=>array(134,0,1054,729),5044=>array(60,-25,700,743),5045=>array(57,0,672,754),5046=>array(91,-23,776,741),5047=>array(60,0,899,729),5048=>array(95,0,607,752),5049=>array(73,-25,1039,729),5050=>array(98,-12,1026,752),5051=>array(60,0,778,729),5052=>array(56,-25,613,729),5053=>array(66,-25,924,729),5054=>array(94,-23,812,741),5055=>array(112,-130,598,729),5056=>array(95,-21,797,743),5057=>array(5,-23,804,742),5058=>array(60,0,620,729),5059=>array(45,0,722,729),5060=>array(101,0,648,752),5061=>array(94,-23,1195,741),5062=>array(40,0,753,729),5063=>array(55,-25,934,754),5064=>array(105,-25,992,743),5065=>array(112,0,1406,741),5066=>array(55,-25,934,754),5067=>array(81,-25,729,743),5068=>array(93,-23,764,729),5069=>array(37,-25,1090,754),5070=>array(65,0,689,729),5071=>array(60,0,663,729),5072=>array(88,0,673,729),5073=>array(71,-25,883,738),5074=>array(60,0,711,729),5075=>array(86,-23,568,729),5076=>array(126,0,993,729),5077=>array(67,-25,695,743),5078=>array(104,-25,758,729),5079=>array(-12,0,711,729),5080=>array(15,0,738,729),5081=>array(126,0,750,729),5082=>array(67,-25,676,743),5083=>array(88,-25,1002,742),5084=>array(28,-25,884,742),5085=>array(58,0,619,752),5086=>array(60,0,582,729),5087=>array(95,-23,766,741),5088=>array(105,-25,923,729),5089=>array(95,-24,1088,742),5090=>array(60,0,711,729),5091=>array(94,-25,810,743),5092=>array(113,0,919,729),5093=>array(60,0,882,729),5094=>array(60,0,801,729),5095=>array(53,-25,694,729),5096=>array(95,-24,1037,742),5097=>array(95,-98,958,743),5098=>array(37,-26,1081,744),5099=>array(94,-23,812,741),5100=>array(108,-25,967,742),5101=>array(20,-25,727,741),5102=>array(87,-25,683,743),5103=>array(55,-25,934,754),5104=>array(36,-25,756,741),5105=>array(15,-25,881,729),5106=>array(57,0,665,752),5107=>array(95,-21,1050,743),5108=>array(60,0,721,729),7680=>array(26,-199,703,729),7681=>array(50,-199,578,549),7682=>array(82,0,762,899),7683=>array(59,-23,640,742),7684=>array(82,-205,762,729),7685=>array(59,-205,640,729),7686=>array(82,-149,762,729),7687=>array(59,-149,640,729),7688=>array(107,-220,793,930),7689=>array(77,-220,597,757),7690=>array(77,0,776,899),7691=>array(79,-23,700,742),7692=>array(77,-205,776,729),7693=>array(79,-205,700,729),7694=>array(77,-149,776,729),7695=>array(79,-149,700,729),7696=>array(77,-213,772,729),7697=>array(55,-236,700,729),7698=>array(77,-199,776,729),7699=>array(75,-199,700,729),7700=>array(79,0,762,1026),7701=>array(64,-23,591,902),7702=>array(79,0,762,1028),7703=>array(64,-23,598,905),7704=>array(79,-199,762,729),7705=>array(64,-199,591,549),7706=>array(79,-173,762,729),7707=>array(61,-173,591,549),7708=>array(79,-213,762,931),7709=>array(64,-236,591,751),7710=>array(74,0,741,899),7711=>array(90,0,464,899),7712=>array(107,-23,819,863),7713=>array(26,-218,656,663),7714=>array(68,0,812,899),7715=>array(67,0,629,799),7716=>array(68,-174,812,729),7717=>array(67,-174,629,729),7718=>array(68,0,812,899),7719=>array(67,0,690,899),7720=>array(0,-200,812,729),7721=>array(67,-201,629,729),7722=>array(68,-178,812,729),7723=>array(67,-178,629,729),7724=>array(-78,-173,368,729),7725=>array(-75,-173,362,729),7726=>array(63,0,512,1072),7727=>array(67,0,482,925),7728=>array(74,0,843,930),7729=>array(59,0,651,930),7730=>array(74,-174,843,729),7731=>array(59,-205,651,729),7732=>array(74,-149,843,729),7733=>array(59,-149,651,729),7734=>array(80,-205,606,729),7735=>array(40,-205,362,729),7736=>array(80,-205,689,863),7737=>array(40,-205,475,863),7738=>array(80,-149,606,729),7739=>array(-45,-149,362,729),7740=>array(80,-199,606,729),7741=>array(-61,-199,362,729),7742=>array(66,0,931,950),7743=>array(60,0,911,748),7744=>array(66,0,931,899),7745=>array(60,0,911,742),7746=>array(66,-205,931,729),7747=>array(60,-205,911,549),7748=>array(68,0,816,899),7749=>array(63,0,629,742),7750=>array(68,-174,816,729),7751=>array(63,-205,629,549),7752=>array(68,-149,816,729),7753=>array(63,-149,629,549),7754=>array(68,-197,816,729),7755=>array(63,-197,629,549),7756=>array(106,-23,828,1059),7757=>array(82,-23,634,900),7758=>array(106,-23,828,1043),7759=>array(82,-23,635,889),7760=>array(106,-23,828,1031),7761=>array(82,-23,634,901),7762=>array(106,-23,828,1028),7763=>array(82,-23,634,896),7764=>array(76,0,747,930),7765=>array(11,-218,637,757),7766=>array(76,0,747,899),7767=>array(11,-218,637,742),7768=>array(80,0,785,899),7769=>array(63,0,487,742),7770=>array(80,-205,785,729),7771=>array(55,-205,487,549),7772=>array(80,-205,785,863),7773=>array(55,-205,513,686),7774=>array(80,-149,785,729),7775=>array(35,-149,487,549),7776=>array(76,-23,725,899),7777=>array(60,-23,589,742),7778=>array(76,-205,725,741),7779=>array(60,-205,589,549),7780=>array(76,-23,725,1061),7781=>array(60,-23,589,896),7782=>array(76,-23,725,1054),7783=>array(60,-23,597,894),7784=>array(76,-205,725,899),7785=>array(60,-205,589,747),7786=>array(142,0,753,899),7787=>array(101,-23,414,869),7788=>array(142,-205,753,729),7789=>array(96,-205,414,674),7790=>array(141,-149,753,729),7791=>array(-15,-149,414,674),7792=>array(103,-199,753,729),7793=>array(-25,-199,414,674),7794=>array(119,-205,809,729),7795=>array(88,-205,656,540),7796=>array(119,-173,809,729),7797=>array(88,-173,656,540),7798=>array(119,-197,809,729),7799=>array(88,-197,656,540),7800=>array(119,-23,809,1056),7801=>array(88,-23,658,897),7802=>array(119,-23,809,981),7803=>array(88,-23,656,889),7804=>array(179,0,802,894),7805=>array(129,0,651,748),7806=>array(179,-205,802,729),7807=>array(129,-205,651,540),7808=>array(168,0,1087,924),7809=>array(120,0,881,757),7810=>array(168,0,1087,930),7811=>array(120,0,881,757),7812=>array(168,0,1087,899),7813=>array(120,0,881,748),7814=>array(168,0,1087,899),7815=>array(120,0,881,742),7816=>array(168,-182,1087,729),7817=>array(120,-174,881,540),7818=>array(22,0,802,899),7819=>array(16,0,648,742),7820=>array(22,0,802,899),7821=>array(16,0,648,750),7822=>array(182,0,805,899),7823=>array(37,-219,653,742),7824=>array(30,0,733,951),7825=>array(21,0,575,759),7826=>array(30,-205,733,729),7827=>array(21,-205,575,540),7828=>array(30,-149,733,729),7829=>array(21,-149,575,540),7830=>array(67,-165,629,729),7831=>array(101,-23,487,848),7832=>array(120,0,881,755),7833=>array(37,-219,653,755),7834=>array(50,-23,731,798),7835=>array(90,0,464,899),7840=>array(26,-205,703,729),7841=>array(50,-205,578,549),7842=>array(26,0,703,979),7843=>array(50,-23,578,796),7844=>array(26,0,877,1000),7845=>array(50,-23,743,900),7846=>array(26,0,703,1007),7847=>array(50,-23,578,900),7848=>array(26,0,866,1000),7849=>array(50,-23,719,901),7850=>array(26,0,758,1044),7851=>array(50,-23,635,900),7852=>array(26,-205,703,909),7853=>array(50,-205,578,759),7854=>array(26,0,703,1043),7855=>array(50,-23,622,900),7856=>array(26,0,703,1031),7857=>array(50,-23,586,900),7858=>array(26,0,703,1076),7859=>array(50,-23,586,926),7860=>array(26,0,728,1054),7861=>array(50,-23,663,900),7862=>array(26,-205,703,908),7863=>array(50,-205,578,758),7864=>array(79,-205,762,729),7865=>array(64,-205,591,549),7866=>array(79,0,762,986),7867=>array(64,-23,591,796),7868=>array(79,0,762,900),7869=>array(64,-23,604,732),7870=>array(79,0,881,1000),7871=>array(64,-23,735,900),7872=>array(79,0,762,1000),7873=>array(64,-23,591,900),7874=>array(79,0,808,1000),7875=>array(64,-23,711,900),7876=>array(79,0,762,1049),7877=>array(64,-23,645,900),7878=>array(79,-205,762,907),7879=>array(64,-205,591,759),7880=>array(63,0,426,986),7881=>array(67,0,386,781),7882=>array(39,-205,368,729),7883=>array(46,-205,362,729),7884=>array(106,-205,828,741),7885=>array(82,-205,634,549),7886=>array(106,-23,828,987),7887=>array(82,-23,634,786),7888=>array(106,-23,932,1000),7889=>array(82,-23,776,901),7890=>array(106,-23,828,1000),7891=>array(82,-23,634,900),7892=>array(106,-23,864,1000),7893=>array(82,-23,748,900),7894=>array(106,-23,828,1052),7895=>array(82,-23,666,896),7896=>array(106,-205,828,907),7897=>array(82,-205,634,759),7898=>array(102,-23,950,930),7899=>array(82,-23,777,757),7900=>array(102,-23,950,924),7901=>array(82,-23,777,757),7902=>array(102,-23,950,986),7903=>array(82,-23,777,782),7904=>array(102,-23,950,900),7905=>array(82,-23,777,774),7906=>array(102,-205,950,763),7907=>array(82,-205,777,585),7908=>array(119,-205,809,729),7909=>array(88,-205,656,540),7910=>array(119,-23,809,973),7911=>array(88,-23,656,761),7912=>array(119,-23,959,930),7913=>array(87,-23,806,757),7914=>array(119,-23,959,900),7915=>array(87,-23,806,757),7916=>array(119,-23,959,951),7917=>array(87,-23,806,776),7918=>array(119,-23,959,900),7919=>array(87,-23,806,797),7920=>array(119,-205,959,895),7921=>array(87,-205,806,707),7922=>array(182,0,805,900),7923=>array(37,-219,653,757),7924=>array(182,-205,805,729),7925=>array(37,-219,653,540),7926=>array(182,0,805,959),7927=>array(37,-219,653,759),7928=>array(182,0,805,896),7929=>array(37,-219,653,747),7936=>array(11,-12,615,770),7937=>array(11,-12,615,775),7938=>array(11,-12,615,770),7939=>array(11,-12,615,792),7940=>array(11,-12,615,770),7941=>array(11,-12,616,775),7942=>array(11,-12,615,899),7943=>array(11,-12,616,897),7944=>array(-113,-25,630,748),7945=>array(-113,-25,630,747),7946=>array(39,-25,782,745),7947=>array(63,-25,806,747),7948=>array(31,-25,774,742),7949=>array(14,-25,757,741),7950=>array(-33,-18,710,875),7951=>array(-8,-25,735,874),7952=>array(-30,-10,537,770),7953=>array(-30,-10,537,775),7954=>array(-30,-10,537,770),7955=>array(-30,-10,545,792),7956=>array(-30,-10,544,770),7957=>array(-30,-10,598,775),7960=>array(92,-25,851,742),7961=>array(86,-25,845,747),7962=>array(113,-25,1034,742),7963=>array(125,-25,1060,747),7964=>array(112,-25,1044,742),7965=>array(124,-25,1058,745),7968=>array(3,-215,578,774),7969=>array(3,-215,578,779),7970=>array(3,-215,579,774),7971=>array(3,-215,614,781),7972=>array(3,-215,664,774),7973=>array(3,-215,691,779),7974=>array(3,-215,653,901),7975=>array(3,-215,673,901),7976=>array(93,-25,894,742),7977=>array(88,-25,889,747),7978=>array(111,-25,1084,742),7979=>array(124,-25,1111,747),7980=>array(114,-25,1088,742),7981=>array(131,-25,1099,745),7982=>array(120,-25,1012,875),7983=>array(117,-25,1026,878),7984=>array(-12,-16,286,767),7985=>array(-12,-16,322,772),7986=>array(-12,-16,339,767),7987=>array(-12,-16,382,774),7988=>array(-12,-16,418,767),7989=>array(-12,-16,448,772),7990=>array(-12,-16,437,900),7991=>array(-12,-16,438,901),7992=>array(109,-25,455,742),7993=>array(125,-25,464,741),7994=>array(112,-25,619,742),7995=>array(125,-25,649,747),7996=>array(111,-25,619,742),7997=>array(125,-25,621,745),7998=>array(122,-25,556,874),7999=>array(113,-25,559,875),8000=>array(-14,-10,564,770),8001=>array(-14,-10,564,775),8002=>array(-14,-10,564,770),8003=>array(-14,-10,564,777),8004=>array(-14,-10,594,770),8005=>array(-14,-10,624,775),8008=>array(119,-51,895,763),8009=>array(84,-51,855,769),8010=>array(117,-51,1068,763),8011=>array(131,-51,1071,769),8012=>array(114,-51,1014,763),8013=>array(134,-51,1012,767),8016=>array(-14,-39,575,767),8017=>array(-14,-39,575,772),8018=>array(-14,-39,575,767),8019=>array(-14,-39,575,774),8020=>array(-14,-39,577,767),8021=>array(-14,-39,607,772),8022=>array(-14,-39,596,901),8023=>array(-14,-39,598,901),8025=>array(132,-25,1034,747),8027=>array(128,-25,1218,747),8029=>array(129,-25,1232,745),8031=>array(122,-25,1151,876),8032=>array(-7,-34,736,773),8033=>array(-7,-34,736,778),8034=>array(-7,-34,736,773),8035=>array(-7,-34,736,780),8036=>array(-7,-34,736,773),8037=>array(-7,-34,736,778),8038=>array(-7,-34,736,901),8039=>array(-7,-34,736,899),8040=>array(45,-25,868,747),8041=>array(16,-25,839,753),8042=>array(113,-25,1056,747),8043=>array(131,-25,1051,753),8044=>array(114,-25,967,747),8045=>array(131,-25,966,751),8046=>array(123,-25,965,873),8047=>array(120,-25,989,874),8048=>array(11,-12,615,762),8049=>array(11,-12,615,762),8050=>array(-30,-10,537,762),8051=>array(-30,-10,537,762),8052=>array(3,-215,578,766),8053=>array(3,-215,578,766),8054=>array(-12,-16,284,759),8055=>array(-12,-16,316,759),8056=>array(-14,-10,564,762),8057=>array(-14,-10,564,762),8058=>array(-14,-39,575,759),8059=>array(-14,-39,575,759),8060=>array(-7,-34,736,765),8061=>array(-7,-34,736,765),8064=>array(11,-201,615,770),8065=>array(11,-201,615,775),8066=>array(11,-201,615,770),8067=>array(11,-201,615,792),8068=>array(11,-201,615,770),8069=>array(11,-201,616,775),8070=>array(11,-201,615,899),8071=>array(11,-201,616,897),8072=>array(-113,-25,834,748),8073=>array(-113,-25,835,747),8074=>array(39,-25,986,745),8075=>array(63,-25,1010,747),8076=>array(31,-25,976,742),8077=>array(14,-25,957,741),8078=>array(-33,-25,918,875),8079=>array(-8,-25,939,874),8080=>array(-18,-215,578,774),8081=>array(-19,-215,578,779),8082=>array(-20,-215,579,774),8083=>array(-19,-215,614,781),8084=>array(-19,-215,664,774),8085=>array(-19,-215,691,779),8086=>array(-20,-215,653,901),8087=>array(-19,-215,673,901),8088=>array(93,-25,948,742),8089=>array(88,-25,940,747),8090=>array(111,-25,1135,742),8091=>array(124,-25,1166,747),8092=>array(114,-25,1141,742),8093=>array(131,-25,1151,745),8094=>array(120,-25,1067,875),8095=>array(117,-25,1082,878),8096=>array(-7,-201,736,773),8097=>array(-7,-201,736,778),8098=>array(-7,-201,736,773),8099=>array(-7,-201,736,780),8100=>array(-7,-201,736,773),8101=>array(-7,-201,736,778),8102=>array(-7,-201,736,901),8103=>array(-7,-201,736,899),8104=>array(45,-25,985,747),8105=>array(16,-25,960,753),8106=>array(113,-25,1181,747),8107=>array(131,-25,1172,753),8108=>array(114,-25,1089,747),8109=>array(131,-25,1088,751),8110=>array(123,-25,1086,873),8111=>array(120,-25,1110,874),8112=>array(11,-12,615,755),8113=>array(11,-12,615,702),8114=>array(11,-201,615,762),8115=>array(11,-201,615,552),8116=>array(11,-201,615,762),8118=>array(11,-12,615,734),8119=>array(11,-201,615,734),8120=>array(-113,-25,630,900),8121=>array(-113,-25,630,880),8122=>array(-113,-25,630,741),8123=>array(-113,-25,630,741),8124=>array(-113,-25,834,741),8125=>array(34,670,175,828),8126=>array(18,0,200,176),8127=>array(114,583,255,741),8128=>array(-45,629,338,751),8129=>array(142,621,535,900),8130=>array(-17,-215,578,766),8131=>array(-17,-215,578,556),8132=>array(-17,-215,578,769),8134=>array(3,-215,580,738),8135=>array(-20,-215,580,738),8136=>array(96,-25,920,741),8137=>array(78,-25,934,741),8138=>array(91,-25,944,741),8139=>array(77,-25,951,741),8140=>array(-55,-25,806,741),8141=>array(112,583,418,741),8142=>array(145,583,497,741),8143=>array(23,583,406,899),8144=>array(-12,-16,346,752),8145=>array(-12,-16,358,702),8146=>array(-12,-16,402,795),8147=>array(-12,-16,394,794),8150=>array(-12,-16,390,731),8151=>array(-12,-16,457,888),8152=>array(-51,-25,386,899),8153=>array(-51,-25,389,861),8154=>array(99,-25,499,741),8155=>array(77,-25,509,741),8157=>array(160,604,477,763),8158=>array(194,589,544,746),8159=>array(61,583,444,899),8160=>array(-14,-39,575,752),8161=>array(-14,-39,575,702),8162=>array(-14,-39,575,796),8163=>array(-14,-39,575,795),8164=>array(-65,-225,604,775),8165=>array(-65,-225,604,780),8166=>array(-14,-39,575,731),8167=>array(-14,-39,617,888),8168=>array(63,-25,814,899),8169=>array(63,-25,814,880),8170=>array(63,-25,991,758),8171=>array(59,-25,1035,758),8172=>array(97,-25,834,747),8173=>array(124,604,510,796),8174=>array(124,610,510,802),8175=>array(175,607,339,757),8178=>array(-7,-200,736,765),8179=>array(-7,-200,736,555),8180=>array(-7,-200,736,766),8182=>array(-7,-34,736,737),8183=>array(-7,-201,736,737),8184=>array(101,-51,929,763),8185=>array(86,-51,868,763),8186=>array(77,-25,900,747),8187=>array(18,-25,841,747),8188=>array(-79,-25,875,747),8189=>array(247,607,475,757),8190=>array(170,589,306,746),8208=>array(69,207,365,311),8209=>array(69,207,365,311),8210=>array(35,207,624,311),8211=>array(35,207,624,311),8212=>array(37,207,1070,311),8213=>array(37,207,1070,311),8214=>array(57,-200,497,729),8215=>array(-85,-300,561,-90),8216=>array(166,469,357,729),8217=>array(165,469,356,729),8218=>array(36,-135,227,125),8219=>array(190,469,356,729),8220=>array(170,469,589,729),8221=>array(171,469,595,729),8222=>array(36,-135,462,125),8223=>array(190,469,571,729),8224=>array(109,-194,626,709),8225=>array(35,-194,623,709),8226=>array(111,175,367,425),8227=>array(63,179,405,511),8228=>array(64,0,245,146),8229=>array(92,0,605,146),8230=>array(92,0,939,146),8231=>array(143,182,270,282),8240=>array(72,-21,1021,739),8241=>array(72,-21,1390,739),8242=>array(159,467,370,743),8243=>array(159,467,564,743),8244=>array(159,467,748,743),8245=>array(166,467,315,743),8246=>array(166,467,495,743),8247=>array(166,467,679,743),8248=>array(-40,-196,407,169),8249=>array(128,72,351,481),8250=>array(96,72,319,481),8251=>array(81,33,660,527),8252=>array(112,0,750,726),8253=>array(138,0,694,744),8254=>array(158,740,731,820),8255=>array(8,-219,626,4),8256=>array(154,559,772,782),8257=>array(-58,-226,495,301),8258=>array(29,-32,871,729),8259=>array(77,161,406,321),8260=>array(-177,-20,489,715),8261=>array(73,-237,462,754),8262=>array(-45,-237,344,754),8263=>array(168,0,1283,744),8264=>array(168,0,1028,744),8265=>array(112,0,1005,744),8266=>array(115,-1,643,544),8267=>array(24,-191,640,729),8268=>array(58,99,620,561),8269=>array(44,107,606,569),8270=>array(145,-32,478,290),8271=>array(106,-174,374,520),8272=>array(51,-18,717,558),8273=>array(55,-32,492,739),8274=>array(61,0,727,736),8275=>array(56,268,659,424),8276=>array(-20,-239,598,-16),8277=>array(81,-39,852,726),8278=>array(116,-13,556,542),8279=>array(159,467,983,743),8280=>array(116,2,741,688),8281=>array(59,1,814,698),8282=>array(58,-1,323,750),8283=>array(116,-198,741,801),8284=>array(58,38,645,525),8285=>array(49,1,312,742),8286=>array(60,-9,327,743),8304=>array(121,370,460,819),8305=>array(122,390,315,864),8308=>array(107,390,451,815),8309=>array(111,373,478,813),8310=>array(122,370,466,819),8311=>array(153,389,497,814),8312=>array(118,370,473,819),8313=>array(116,368,460,817),8314=>array(142,457,469,746),8315=>array(142,566,469,637),8316=>array(127,493,485,708),8317=>array(128,302,372,899),8318=>array(123,303,367,900),8319=>array(110,390,479,747),8320=>array(5,-224,344,225),8321=>array(41,-200,269,225),8322=>array(-29,-200,346,234),8323=>array(-7,-217,336,230),8324=>array(-17,-200,327,225),8325=>array(-14,-218,353,222),8326=>array(-5,-217,339,232),8327=>array(40,-200,384,225),8328=>array(-5,-216,350,233),8329=>array(1,-217,345,232),8330=>array(10,-129,337,160),8331=>array(8,-20,335,51),8332=>array(-3,-108,355,107),8333=>array(5,-299,249,298),8334=>array(11,-300,255,297),8336=>array(-7,-215,337,157),8337=>array(3,-217,347,155),8338=>array(13,-219,373,153),8339=>array(-30,-200,382,151),8340=>array(15,-216,359,156),8355=>array(71,-1,725,731),8356=>array(14,-27,651,754),8357=>array(29,-114,905,651),8358=>array(86,0,792,730),8360=>array(80,-23,1311,729),8362=>array(-40,0,987,600),8363=>array(23,-24,720,803),8364=>array(89,-23,752,739),8368=>array(0,-202,658,752),8373=>array(10,-126,593,763),8376=>array(87,0,753,729),8377=>array(106,-47,742,729),8400=>array(-450,542,130,773),8401=>array(-450,542,115,773),8402=>array(-218,-24,9,686),8403=>array(-240,-11,-41,545),8406=>array(-470,524,166,911),8407=>array(-516,524,120,911),8411=>array(-465,495,30,595),8412=>array(-599,495,80,595),8413=>array(-724,-204,276,796),8414=>array(-725,-199,276,802),8415=>array(-726,-200,280,806),8416=>array(-728,-208,280,800),8417=>array(-519,534,178,918),8421=>array(-548,-64,-20,752),8423=>array(-314,87,214,641),8424=>array(-515,-186,-20,-86),8425=>array(-361,500,150,690),8426=>array(-908,10,26,556),8427=>array(-622,-102,206,594),8428=>array(-579,-270,-14,-38),8429=>array(-587,-267,-7,-35),8430=>array(-635,-302,1,-12),8431=>array(-656,-304,-20,-14),8432=>array(-164,562,42,757),8448=>array(90,-20,952,746),8449=>array(90,-20,986,746),8451=>array(84,-23,1093,741),8453=>array(86,-20,1008,742),8454=>array(86,-20,1016,742),8455=>array(29,-23,685,741),8456=>array(52,-23,735,741),8457=>array(94,0,1041,729),8462=>array(67,0,629,729),8465=>array(29,-102,748,714),8467=>array(64,-11,702,744),8468=>array(72,-23,912,729),8470=>array(59,0,1052,729),8471=>array(60,-44,880,776),8476=>array(37,-24,773,756),8480=>array(131,260,1084,742),8481=>array(133,0,1319,729),8482=>array(213,273,1087,729),8486=>array(-65,-25,758,747),8487=>array(-9,-43,814,729),8489=>array(114,0,368,561),8490=>array(74,0,843,729),8491=>array(26,0,703,953),8494=>array(64,-23,591,549),8498=>array(30,0,697,729),8501=>array(49,0,709,600),8502=>array(37,0,595,600),8503=>array(7,0,500,600),8504=>array(126,0,653,600),8506=>array(48,-21,844,702),8507=>array(63,0,1504,729),8513=>array(106,-23,818,741),8514=>array(160,0,686,729),8515=>array(32,0,686,729),8516=>array(22,0,645,729),8523=>array(94,-21,725,725),8525=>array(19,-20,1277,742),8526=>array(14,0,509,540),8531=>array(102,-20,899,742),8532=>array(68,-20,924,742),8533=>array(97,-20,907,743),8534=>array(72,-20,932,743),8535=>array(98,-20,927,743),8536=>array(97,-20,930,742),8537=>array(82,-20,916,743),8538=>array(101,-20,909,742),8539=>array(80,-20,901,743),8540=>array(99,-20,910,743),8541=>array(107,-20,904,743),8542=>array(90,-20,884,744),8543=>array(90,-20,836,742),8544=>array(63,0,368,729),8545=>array(63,0,646,729),8546=>array(63,0,924,729),8547=>array(63,0,1080,729),8548=>array(179,0,802,729),8549=>array(179,0,1035,729),8550=>array(179,0,1313,729),8551=>array(179,0,1591,729),8552=>array(63,0,1080,729),8553=>array(22,0,802,729),8554=>array(22,0,1035,729),8555=>array(22,0,1313,729),8556=>array(80,0,606,729),8557=>array(107,-23,793,741),8558=>array(77,0,776,729),8559=>array(66,0,931,729),8560=>array(67,0,362,729),8561=>array(67,0,640,729),8562=>array(67,0,918,729),8563=>array(67,0,929,729),8564=>array(129,0,651,540),8565=>array(129,0,918,729),8566=>array(129,0,1196,729),8567=>array(129,0,1474,729),8568=>array(67,0,926,729),8569=>array(16,0,648,540),8570=>array(16,0,918,729),8571=>array(16,0,1196,729),8572=>array(67,0,362,729),8573=>array(77,-23,597,549),8574=>array(79,-23,700,729),8575=>array(60,0,911,549),8592=>array(39,70,925,394),8593=>array(320,-211,644,675),8594=>array(42,70,928,394),8595=>array(320,-211,644,675),8596=>array(39,70,925,394),8597=>array(320,-211,644,675),8598=>array(158,-111,826,556),8599=>array(139,-112,806,556),8600=>array(138,-92,806,575),8601=>array(158,-92,825,576),8602=>array(39,-60,925,522),8603=>array(39,-60,925,522),8606=>array(39,70,928,394),8607=>array(322,-212,646,677),8608=>array(39,70,928,394),8609=>array(322,-213,646,676),8610=>array(39,70,925,394),8611=>array(39,70,925,394),8612=>array(39,20,925,445),8613=>array(270,-211,695,675),8614=>array(39,20,925,445),8615=>array(269,-211,694,675),8616=>array(270,-221,694,745),8644=>array(39,-110,925,574),8645=>array(140,-211,824,675),8646=>array(39,-110,925,574),8647=>array(39,-110,925,574),8648=>array(140,-211,824,675),8649=>array(39,-110,925,574),8650=>array(140,-211,824,675),8704=>array(165,0,842,729),8705=>array(125,-139,745,861),8706=>array(82,-23,653,709),8707=>array(29,0,729,729),8708=>array(12,-60,729,802),8709=>array(59,-25,821,747),8710=>array(8,0,721,729),8711=>array(88,0,801,729),8712=>array(70,0,621,616),8713=>array(4,-50,636,685),8714=>array(68,1,585,469),8715=>array(24,-1,575,615),8716=>array(22,-60,654,675),8717=>array(30,-1,547,467),8718=>array(77,35,530,655),8719=>array(43,-181,851,734),8720=>array(31,-185,839,730),8721=>array(-1,-195,893,729),8722=>array(87,172,596,292),8723=>array(50,0,630,633),8724=>array(87,1,596,664),8725=>array(0,-20,746,741),8726=>array(40,-20,412,544),8727=>array(47,66,516,537),8728=>array(84,121,457,493),8729=>array(168,175,424,425),8730=>array(68,-75,827,918),8731=>array(68,-75,827,918),8732=>array(68,-75,827,918),8733=>array(79,124,716,404),8734=>array(49,124,720,404),8735=>array(62,0,587,525),8736=>array(28,0,740,712),8739=>array(70,-14,150,676),8741=>array(70,-14,310,676),8743=>array(30,0,578,448),8744=>array(30,0,578,448),8745=>array(30,-1,767,508),8746=>array(65,-11,802,498),8747=>array(-12,-246,610,767),8748=>array(-12,-246,900,767),8749=>array(-12,-246,1190,767),8764=>array(37,140,521,312),8776=>array(27,46,549,422),8800=>array(61,-74,622,544),8801=>array(87,24,596,514),8804=>array(35,0,657,624),8805=>array(44,0,627,624),8834=>array(80,0,631,616),8835=>array(24,1,575,617),8838=>array(7,-57,641,734),8839=>array(7,-56,595,732),8976=>array(57,86,624,376),8994=>array(90,148,650,342),8995=>array(9,142,569,336),9001=>array(43,-198,463,746),9002=>array(-17,-198,402,746),9251=>array(10,0,533,200),9674=>array(16,-26,518,744),9675=>array(60,-44,880,776),9702=>array(70,151,378,451),9711=>array(10,-204,1010,796),9824=>array(14,-20,611,782),9825=>array(15,-96,679,724),9826=>array(8,-56,587,748),9827=>array(15,-20,761,725),9828=>array(14,-20,611,782),9829=>array(15,-97,679,724),9830=>array(8,-56,587,748),9831=>array(15,-20,761,725),9833=>array(-20,0,351,694),9834=>array(-3,0,522,694),9835=>array(23,0,742,729),9836=>array(23,0,742,729),9837=>array(23,-36,452,730),9838=>array(56,-214,475,712),9839=>array(14,-197,529,762),11568=>array(60,-10,347,270),11569=>array(124,-16,902,744),11570=>array(124,-16,902,744),11571=>array(72,0,803,728),11572=>array(72,0,803,728),11573=>array(72,0,803,728),11574=>array(182,0,756,738),11575=>array(48,0,704,728),11576=>array(202,0,859,728),11577=>array(72,0,803,728),11578=>array(72,0,803,728),11579=>array(117,-10,632,728),11580=>array(72,0,781,728),11581=>array(72,0,825,728),11582=>array(87,-10,600,738),11583=>array(72,0,788,728),11584=>array(124,-16,902,744),11585=>array(102,-16,925,744),11586=>array(83,-20,383,748),11587=>array(72,0,803,728),11588=>array(60,0,727,728),11589=>array(72,0,803,728),11590=>array(79,44,628,532),11591=>array(72,0,825,728),11592=>array(129,270,822,458),11593=>array(92,0,686,728),11594=>array(48,0,650,728),11595=>array(56,-16,987,744),11596=>array(96,0,895,728),11597=>array(52,0,627,728),11598=>array(72,0,803,728),11599=>array(90,0,365,728),11600=>array(96,0,895,728),11601=>array(21,-244,365,728),11602=>array(105,-16,804,728),11603=>array(78,-10,465,738),11604=>array(124,-16,902,744),11605=>array(124,-16,902,744),11606=>array(124,0,791,728),11607=>array(75,-10,388,738),11608=>array(71,-10,724,738),11609=>array(124,-16,902,744),11610=>array(124,-16,943,744),11611=>array(124,-16,819,744),11612=>array(118,0,461,728),11613=>array(72,0,803,728),11614=>array(124,-16,819,744),11615=>array(72,0,803,728),11616=>array(48,0,661,728),11617=>array(72,0,803,728),11618=>array(48,-23,649,756),11619=>array(54,0,929,728),11620=>array(72,0,486,728),11621=>array(54,0,929,728),11631=>array(166,444,565,728),11798=>array(38,-40,591,645),11799=>array(52,68,398,497),11800=>array(43,-23,599,721),11802=>array(40,207,404,571),11803=>array(27,142,511,547),11806=>array(37,142,521,491),11807=>array(27,1,511,314),11816=>array(24,-200,589,729),11817=>array(-41,-200,524,729),11818=>array(68,16,666,544),11819=>array(50,58,675,398),11820=>array(40,178,665,518),11821=>array(50,18,675,593),11822=>array(116,0,618,744),42888=>array(138,-55,456,92),42889=>array(63,0,324,520),42890=>array(55,52,336,412),42891=>array(164,303,362,770),42892=>array(196,462,362,770),42922=>array(141,0,1007,729),64256=>array(90,0,737,729),64257=>array(90,0,660,729),64258=>array(90,0,687,729),64259=>array(90,0,933,729),64260=>array(90,0,933,729),64261=>array(90,-23,708,729),64275=>array(94,-23,1288,729),64276=>array(94,-23,1291,729),64277=>array(94,-200,1251,729),64278=>array(94,-200,1288,729),64279=>array(94,-200,1498,729),64285=>array(92,136,300,600),64286=>array(142,660,449,813),64287=>array(92,138,558,600),64288=>array(26,0,647,600),64289=>array(29,0,939,600),64290=>array(106,0,883,600),64291=>array(19,0,883,600),64292=>array(16,0,804,600),64293=>array(105,0,913,750),64294=>array(20,0,886,600),64295=>array(106,0,800,600),64296=>array(3,0,958,600),64297=>array(27,172,535,473),64298=>array(87,0,855,721),64299=>array(87,0,854,721),64300=>array(87,0,854,721),64301=>array(87,0,854,721),64302=>array(49,-142,709,600),64303=>array(49,-248,709,600),64304=>array(49,-108,709,600),64305=>array(37,0,595,600),64306=>array(7,0,500,600),64307=>array(126,0,653,600),64308=>array(39,0,652,600),64309=>array(33,0,357,600),64310=>array(56,0,458,600),64312=>array(81,0,651,600),64313=>array(66,276,370,600),64314=>array(125,-200,563,600),64315=>array(36,0,577,600),64316=>array(125,0,683,750),64318=>array(46,0,677,600),64320=>array(33,0,402,600),64321=>array(80,0,651,600),64323=>array(112,-200,634,601),64324=>array(39,0,641,600),64326=>array(46,0,667,600),64327=>array(-3,-200,687,600),64328=>array(126,0,570,600),64329=>array(87,0,854,600),64330=>array(23,0,730,600),64331=>array(39,0,306,742),64332=>array(37,0,595,742),64333=>array(36,0,577,742),64334=>array(39,0,641,742),64335=>array(164,0,709,750),65532=>array(69,-2,781,686),65533=>array(54,-63,917,800),65535=>array(-5,-139,925,800)); +$cw=array(0=>800,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>667,182=>556,183=>278,184=>333,185=>248,186=>365,187=>556,188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>892,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556,258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556,268=>722,269=>556,270=>722,271=>755,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611,288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>300,298=>278,299=>300,300=>278,301=>300,302=>278,303=>278,304=>278,305=>278,306=>595,307=>488,308=>556,309=>300,310=>722,311=>556,312=>529,313=>611,314=>278,315=>611,316=>278,317=>611,318=>444,319=>611,320=>466,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722,328=>611,329=>656,330=>720,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611,338=>1000,339=>962,340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556,350=>667,351=>556,352=>667,353=>556,354=>611,355=>333,356=>611,357=>444,358=>611,359=>404,360=>722,361=>611,362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611,372=>944,373=>778,374=>667,375=>556,376=>667,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>333,384=>611,385=>857,386=>722,387=>611,388=>667,389=>611,390=>722,391=>752,392=>586,393=>722,394=>818,395=>722,396=>611,397=>609,398=>667,399=>778,400=>672,401=>611,402=>333,403=>778,404=>667,405=>940,406=>278,407=>395,408=>778,409=>556,410=>333,411=>620,412=>889,413=>722,414=>611,415=>778,416=>788,417=>653,418=>973,419=>739,420=>756,421=>611,422=>647,423=>667,424=>556,425=>688,426=>441,427=>333,428=>605,429=>333,430=>611,431=>769,432=>664,433=>780,434=>722,435=>762,436=>650,437=>611,438=>500,439=>556,440=>556,441=>645,442=>569,443=>579,446=>546,447=>608,448=>258,449=>443,450=>584,451=>278,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556,458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>300,465=>778,466=>611,467=>722,468=>611,469=>722,470=>611,471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556,478=>722,479=>556,480=>722,481=>556,482=>1000,483=>892,484=>811,485=>641,486=>778,487=>611,488=>722,489=>556,490=>778,491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333,498=>1222,499=>1111,500=>778,501=>611,503=>630,504=>722,505=>611,506=>722,507=>556,508=>1000,509=>892,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>301,522=>278,523=>278,524=>778,525=>611,526=>778,527=>611,528=>722,529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,536=>667,537=>556,538=>611,539=>333,540=>569,541=>486,542=>722,543=>611,548=>645,549=>500,550=>722,551=>556,552=>667,553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,561=>611,562=>667,563=>556,567=>278,592=>556,593=>611,594=>671,595=>611,596=>556,597=>600,598=>595,599=>611,600=>556,601=>556,602=>834,603=>570,604=>546,605=>820,606=>570,607=>278,608=>611,609=>611,610=>556,611=>556,612=>646,613=>619,614=>611,615=>611,616=>278,617=>326,618=>278,619=>473,620=>527,621=>298,622=>778,623=>889,624=>889,625=>889,626=>611,627=>611,628=>615,629=>590,630=>878,631=>822,632=>778,633=>389,634=>389,635=>406,636=>419,637=>389,638=>455,639=>455,640=>620,641=>586,642=>606,643=>333,644=>302,645=>333,646=>556,647=>328,648=>333,649=>623,650=>686,651=>630,652=>556,653=>778,654=>556,655=>556,656=>519,657=>571,658=>556,659=>632,660=>563,661=>563,662=>563,663=>556,664=>579,665=>572,666=>570,667=>616,668=>603,669=>552,670=>556,671=>454,672=>611,673=>546,674=>546,675=>1004,676=>1018,677=>1097,678=>804,679=>593,680=>840,681=>866,682=>752,683=>668,684=>536,685=>486,686=>659,687=>679,688=>377,689=>377,690=>202,691=>272,692=>272,693=>299,694=>395,695=>534,696=>364,697=>278,698=>454,699=>278,700=>333,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>272,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>510,736=>372,737=>210,738=>363,739=>373,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333,755=>333,756=>333,757=>437,758=>437,759=>400,760=>333,761=>200,762=>200,763=>200,764=>200,765=>332,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>208,885=>247,890=>364,894=>333,900=>239,901=>446,902=>688,903=>333,904=>903,905=>962,906=>448,908=>904,910=>991,911=>932,912=>346,913=>764,914=>688,915=>642,916=>744,917=>710,918=>688,919=>743,920=>810,921=>296,922=>744,923=>744,924=>860,925=>714,926=>690,927=>822,928=>781,929=>698,931=>688,932=>688,933=>744,934=>777,935=>783,936=>805,937=>780,938=>296,939=>744,940=>640,941=>530,942=>597,943=>339,944=>575,945=>656,946=>576,947=>591,948=>620,949=>570,950=>522,951=>586,952=>586,953=>346,954=>576,955=>620,956=>667,957=>564,958=>530,959=>610,960=>721,961=>626,962=>595,963=>676,964=>592,965=>575,966=>801,967=>632,968=>722,969=>800,970=>346,971=>575,972=>609,973=>604,974=>769,977=>580,978=>742,979=>857,980=>620,981=>778,982=>740,983=>601,1008=>556,1009=>566,1012=>778,1013=>328,1024=>667,1025=>667,1026=>790,1027=>617,1028=>731,1029=>667,1030=>278,1031=>278,1032=>556,1033=>1110,1034=>1088,1035=>790,1036=>722,1037=>757,1038=>698,1039=>722,1040=>722,1041=>722,1042=>722,1043=>617,1044=>876,1045=>667,1046=>1100,1047=>670,1048=>757,1049=>757,1050=>722,1051=>715,1052=>874,1053=>753,1054=>778,1055=>753,1056=>680,1057=>722,1058=>611,1059=>698,1060=>909,1061=>657,1062=>845,1063=>688,1064=>1132,1065=>1217,1066=>835,1067=>980,1068=>678,1069=>735,1070=>1142,1071=>708,1072=>553,1073=>591,1074=>574,1075=>429,1076=>745,1077=>572,1078=>792,1079=>554,1080=>603,1081=>603,1082=>559,1083=>583,1084=>664,1085=>603,1086=>588,1087=>603,1088=>605,1089=>549,1090=>440,1091=>541,1092=>948,1093=>539,1094=>690,1095=>564,1096=>901,1097=>987,1098=>692,1099=>806,1100=>572,1101=>546,1102=>893,1103=>586,1104=>572,1105=>572,1106=>616,1107=>429,1108=>549,1109=>562,1110=>281,1111=>300,1112=>282,1113=>888,1114=>897,1115=>606,1116=>559,1117=>603,1118=>541,1119=>603,1120=>986,1121=>736,1136=>830,1137=>761,1138=>778,1139=>590,1148=>942,1149=>736,1150=>986,1151=>736,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>791,1163=>662,1164=>639,1165=>581,1166=>670,1167=>649,1168=>623,1169=>450,1170=>623,1171=>472,1172=>674,1173=>528,1174=>1091,1175=>803,1176=>659,1177=>548,1178=>739,1179=>569,1180=>742,1181=>560,1182=>737,1183=>559,1184=>900,1185=>679,1186=>808,1187=>673,1188=>1004,1189=>761,1190=>1114,1191=>876,1192=>963,1193=>766,1194=>724,1195=>554,1196=>611,1197=>454,1198=>667,1199=>584,1200=>652,1201=>632,1202=>667,1203=>550,1204=>951,1205=>748,1206=>759,1207=>630,1208=>669,1209=>580,1210=>672,1211=>576,1212=>977,1213=>752,1214=>993,1215=>761,1216=>318,1217=>1087,1218=>792,1219=>726,1220=>530,1221=>782,1222=>674,1223=>749,1224=>603,1225=>823,1226=>682,1227=>675,1228=>573,1229=>941,1230=>754,1231=>310,1232=>704,1233=>553,1234=>711,1235=>553,1236=>1000,1237=>892,1238=>667,1239=>569,1240=>738,1241=>561,1242=>738,1243=>561,1244=>1086,1245=>792,1246=>670,1247=>554,1248=>558,1249=>546,1250=>753,1251=>603,1252=>753,1253=>603,1254=>778,1255=>588,1256=>778,1257=>590,1258=>778,1259=>590,1260=>735,1261=>546,1262=>698,1263=>541,1264=>698,1265=>541,1266=>698,1267=>541,1268=>686,1269=>564,1270=>617,1271=>475,1272=>976,1273=>806,1296=>672,1297=>546,1298=>729,1299=>577,1306=>778,1307=>611,1308=>944,1309=>776,1310=>750,1311=>573,1329=>730,1330=>713,1331=>765,1332=>752,1333=>708,1334=>801,1335=>496,1336=>713,1337=>855,1338=>686,1339=>727,1340=>420,1341=>897,1342=>841,1343=>708,1344=>660,1345=>666,1346=>747,1347=>698,1348=>757,1349=>630,1350=>747,1351=>651,1352=>743,1353=>657,1354=>728,1355=>799,1356=>752,1357=>743,1358=>768,1359=>691,1360=>713,1361=>640,1362=>425,1363=>818,1364=>672,1365=>805,1366=>754,1369=>333,1370=>222,1371=>250,1372=>333,1373=>333,1374=>352,1375=>362,1377=>873,1378=>613,1379=>634,1380=>636,1381=>593,1382=>639,1383=>417,1384=>613,1385=>658,1386=>711,1387=>609,1388=>318,1389=>836,1390=>670,1391=>613,1392=>607,1393=>611,1394=>626,1395=>619,1396=>618,1397=>324,1398=>613,1399=>540,1400=>591,1401=>392,1402=>873,1403=>577,1404=>603,1405=>600,1406=>626,1407=>951,1408=>613,1409=>612,1410=>348,1411=>951,1412=>616,1413=>606,1414=>763,1415=>626,1417=>333,1418=>398,1423=>752,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>596,1471=>0,1472=>377,1473=>0,1474=>0,1475=>413,1476=>0,1488=>714,1489=>651,1490=>557,1491=>638,1492=>682,1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667,1501=>683,1502=>694,1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671,1511=>672,1512=>600,1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,4256=>616,4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,4345=>564,4347=>515,4348=>449,5024=>714,5025=>731,5026=>624,5027=>908,5028=>1040,5029=>271,5030=>654,5031=>863,5032=>604,5033=>791,5034=>714,5035=>522,5036=>661,5037=>926,5038=>615,5039=>811,5040=>538,5041=>633,5042=>979,5043=>964,5044=>635,5045=>607,5046=>753,5047=>831,5048=>566,5049=>977,5050=>958,5051=>710,5052=>616,5053=>834,5054=>790,5055=>612,5056=>766,5057=>857,5058=>627,5059=>649,5060=>607,5061=>1127,5062=>680,5063=>920,5064=>928,5065=>1333,5066=>920,5067=>705,5068=>695,5069=>1074,5070=>672,5071=>672,5072=>667,5073=>819,5074=>679,5075=>575,5076=>903,5077=>652,5078=>776,5079=>643,5080=>670,5081=>660,5082=>648,5083=>934,5084=>909,5085=>613,5086=>615,5087=>735,5088=>900,5089=>1024,5090=>647,5091=>760,5092=>829,5093=>824,5094=>756,5095=>625,5096=>981,5097=>1014,5098=>1040,5099=>790,5100=>926,5101=>686,5102=>656,5103=>920,5104=>741,5105=>890,5106=>626,5107=>974,5108=>699,7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,7686=>722,7687=>611,7688=>722,7689=>556,7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,7696=>722,7697=>611,7698=>722,7699=>611,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,7716=>722,7717=>611,7718=>722,7719=>611,7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,7726=>278,7727=>278,7728=>722,7729=>556,7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,7746=>833,7747=>889,7748=>722,7749=>611,7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,7756=>778,7757=>611,7758=>778,7759=>611,7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,7766=>667,7767=>611,7768=>722,7769=>389,7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,7776=>667,7777=>556,7778=>667,7779=>556,7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,7786=>611,7787=>333,7788=>611,7789=>333,7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,7796=>722,7797=>611,7798=>722,7799=>611,7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,7806=>667,7807=>556,7808=>944,7809=>778,7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,7816=>944,7817=>778,7818=>667,7819=>556,7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>611,7831=>333,7832=>778,7833=>556,7834=>555,7835=>333,7840=>722,7841=>556,7842=>722,7843=>556,7844=>722,7845=>556,7846=>722,7847=>556,7848=>722,7849=>556,7850=>722,7851=>556,7852=>722,7853=>556,7854=>722,7855=>556,7856=>722,7857=>556,7858=>722,7859=>556,7860=>722,7861=>556,7862=>722,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>278,7884=>778,7885=>611,7886=>778,7887=>611,7888=>778,7889=>611,7890=>778,7891=>611,7892=>778,7893=>611,7894=>778,7895=>611,7896=>778,7897=>611,7898=>788,7899=>653,7900=>788,7901=>653,7902=>788,7903=>653,7904=>788,7905=>653,7906=>788,7907=>653,7908=>722,7909=>611,7910=>722,7911=>611,7912=>769,7913=>664,7914=>769,7915=>664,7916=>769,7917=>664,7918=>769,7919=>664,7920=>769,7921=>664,7922=>667,7923=>556,7924=>667,7925=>556,7926=>667,7927=>556,7928=>667,7929=>556,7936=>656,7937=>656,7938=>656,7939=>656,7940=>656,7941=>656,7942=>656,7943=>656,7944=>764,7945=>764,7946=>916,7947=>940,7948=>908,7949=>891,7950=>844,7951=>869,7952=>570,7953=>570,7954=>570,7955=>570,7956=>570,7957=>570,7960=>842,7961=>836,7962=>1025,7963=>1051,7964=>1035,7965=>1049,7968=>586,7969=>586,7970=>586,7971=>586,7972=>586,7973=>586,7974=>586,7975=>586,7976=>891,7977=>886,7978=>1081,7979=>1108,7980=>1085,7981=>1096,7982=>1009,7983=>1023,7984=>346,7985=>346,7986=>346,7987=>346,7988=>346,7989=>346,7990=>346,7991=>346,7992=>467,7993=>476,7994=>631,7995=>661,7996=>631,7997=>633,7998=>568,7999=>571,8000=>610,8001=>610,8002=>610,8003=>610,8004=>610,8005=>610,8008=>945,8009=>905,8010=>1118,8011=>1121,8012=>1064,8013=>1062,8016=>575,8017=>575,8018=>575,8019=>575,8020=>575,8021=>575,8022=>575,8023=>575,8025=>964,8027=>1148,8029=>1162,8031=>1081,8032=>800,8033=>800,8034=>800,8035=>800,8036=>800,8037=>800,8038=>800,8039=>800,8040=>904,8041=>875,8042=>1092,8043=>1087,8044=>1003,8045=>1002,8046=>1001,8047=>1025,8048=>656,8049=>656,8050=>570,8051=>570,8052=>586,8053=>586,8054=>346,8055=>346,8056=>610,8057=>610,8058=>575,8059=>575,8060=>800,8061=>800,8064=>656,8065=>656,8066=>656,8067=>656,8068=>656,8069=>656,8070=>656,8071=>656,8072=>854,8073=>855,8074=>1006,8075=>1030,8076=>996,8077=>977,8078=>938,8079=>959,8080=>586,8081=>586,8082=>586,8083=>586,8084=>586,8085=>586,8086=>586,8087=>586,8088=>960,8089=>960,8090=>1155,8091=>1186,8092=>1161,8093=>1171,8094=>1087,8095=>1102,8096=>800,8097=>800,8098=>800,8099=>800,8100=>800,8101=>800,8102=>800,8103=>800,8104=>1005,8105=>980,8106=>1201,8107=>1192,8108=>1109,8109=>1108,8110=>1106,8111=>1130,8112=>656,8113=>656,8114=>656,8115=>656,8116=>640,8118=>656,8119=>656,8120=>764,8121=>764,8122=>764,8123=>764,8124=>854,8125=>278,8126=>201,8127=>147,8128=>278,8129=>333,8130=>586,8131=>586,8132=>597,8134=>586,8135=>586,8136=>911,8137=>925,8138=>941,8139=>948,8140=>826,8141=>402,8142=>403,8143=>147,8144=>346,8145=>346,8146=>346,8147=>346,8150=>346,8151=>346,8152=>296,8153=>296,8154=>511,8155=>521,8157=>434,8158=>433,8159=>333,8160=>575,8161=>575,8162=>575,8163=>575,8164=>626,8165=>626,8166=>575,8167=>575,8168=>744,8169=>744,8170=>901,8171=>975,8172=>837,8173=>353,8174=>351,8175=>303,8178=>800,8179=>800,8180=>800,8182=>800,8183=>800,8184=>979,8185=>918,8186=>936,8187=>877,8188=>895,8189=>333,8190=>159,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>167,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>556,8212=>1000,8213=>1000,8214=>437,8215=>556,8216=>278,8217=>278,8218=>278,8219=>278,8220=>500,8221=>500,8222=>500,8223=>503,8224=>556,8225=>556,8226=>400,8227=>400,8228=>278,8229=>666,8230=>1000,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>167,8240=>1000,8241=>1372,8242=>238,8243=>426,8244=>614,8245=>238,8246=>379,8247=>571,8248=>450,8249=>333,8250=>333,8251=>622,8252=>666,8253=>617,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>400,8260=>167,8261=>334,8262=>334,8263=>1222,8264=>944,8265=>944,8266=>556,8267=>556,8268=>600,8269=>600,8270=>389,8271=>333,8272=>658,8273=>389,8274=>634,8275=>568,8276=>658,8277=>793,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>200,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,8316=>351,8317=>270,8318=>270,8319=>391,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>270,8334=>270,8336=>363,8337=>366,8338=>394,8339=>360,8340=>355,8355=>611,8356=>576,8357=>833,8358=>724,8360=>1286,8362=>1049,8363=>571,8364=>640,8368=>594,8373=>591,8376=>612,8377=>599,8400=>0,8401=>0,8402=>0,8403=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>945,8449=>1007,8451=>1020,8453=>981,8454=>1002,8455=>667,8456=>722,8457=>930,8462=>611,8465=>606,8467=>608,8468=>883,8470=>1006,8471=>860,8476=>699,8480=>1000,8481=>1330,8482=>1000,8486=>780,8487=>780,8489=>286,8490=>722,8491=>722,8494=>556,8498=>626,8501=>714,8502=>651,8503=>557,8504=>638,8506=>906,8507=>1425,8513=>778,8514=>611,8515=>611,8516=>667,8523=>710,8525=>1242,8526=>460,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,8558=>722,8559=>833,8560=>278,8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,8568=>834,8569=>556,8570=>834,8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,8616=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8704=>697,8705=>716,8706=>608,8707=>667,8708=>667,8709=>860,8710=>729,8711=>729,8712=>584,8713=>584,8714=>585,8715=>584,8716=>584,8717=>585,8718=>500,8719=>800,8720=>801,8721=>856,8722=>584,8723=>584,8724=>584,8725=>627,8726=>452,8727=>500,8728=>500,8729=>500,8730=>637,8731=>549,8732=>549,8733=>713,8734=>713,8735=>639,8736=>800,8739=>220,8741=>380,8743=>608,8744=>608,8745=>768,8746=>768,8747=>518,8748=>808,8749=>1098,8764=>500,8776=>500,8800=>584,8801=>584,8804=>584,8805=>584,8834=>584,8835=>584,8838=>584,8839=>584,8976=>584,8994=>658,8995=>658,9001=>380,9002=>380,9251=>500,9674=>541,9675=>860,9702=>400,9711=>1020,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>664,11575=>752,11576=>752,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>312,11587=>720,11588=>696,11589=>720,11590=>584,11591=>742,11592=>796,11593=>613,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>300,11600=>836,11601=>300,11602=>718,11603=>388,11604=>872,11605=>872,11606=>696,11607=>308,11608=>640,11609=>872,11610=>872,11611=>762,11612=>424,11613=>720,11614=>762,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>482,11798=>584,11799=>333,11800=>611,11802=>333,11803=>500,11806=>500,11807=>500,11816=>504,11817=>504,11818=>660,11819=>660,11820=>660,11821=>660,11822=>611,42888=>333,42889=>276,42890=>342,42891=>258,42892=>258,42922=>917,64256=>607,64257=>576,64258=>603,64259=>849,64260=>849,64261=>627,64275=>1243,64276=>1226,64277=>1233,64278=>1238,64279=>1448,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>348,64310=>443,64312=>670,64313=>284,64314=>590,64315=>595,64316=>667,64318=>694,64320=>429,64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756,64331=>212,64332=>591,64333=>550,64334=>568,64335=>714,65529=>0,65530=>0,65531=>0,65532=>800,65533=>900,65535=>800); +// --- EOF --- diff --git a/tcpdf/fonts/freesansbi.z b/tcpdf/fonts/freesansbi.z new file mode 100644 index 0000000..c1cfa09 Binary files /dev/null and b/tcpdf/fonts/freesansbi.z differ diff --git a/tcpdf/fonts/freesansi.ctg.z b/tcpdf/fonts/freesansi.ctg.z new file mode 100644 index 0000000..ae9a7fc Binary files /dev/null and b/tcpdf/fonts/freesansi.ctg.z differ diff --git a/tcpdf/fonts/freesansi.php b/tcpdf/fonts/freesansi.php new file mode 100644 index 0000000..366b471 --- /dev/null +++ b/tcpdf/fonts/freesansi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSansOblique'; +$up=-176; +$ut=50; +$dw=800; +$diff=''; +$originalsize=763696; +$enc=''; +$file='freesansi.z'; +$ctg='freesansi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-1166 -431 1572 1072]','ItalicAngle'=>-12,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>729,'XHeight'=>524,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>1501,'MissingWidth'=>800); +$cbbox=array(0=>array(-15,-139,915,800),33=>array(124,0,363,729),34=>array(177,464,455,709),35=>array(54,-20,649,697),36=>array(69,-126,613,770),37=>array(134,-20,895,709),38=>array(83,-23,644,709),39=>array(173,464,292,709),40=>array(113,-213,446,729),41=>array(-7,-213,326,729),42=>array(169,438,471,729),43=>array(92,-11,591,473),44=>array(55,-147,214,103),45=>array(97,240,351,312),46=>array(87,0,213,103),47=>array(-12,-20,434,729),48=>array(98,-23,598,709),49=>array(208,0,498,709),50=>array(34,0,620,709),51=>array(71,-23,599,709),52=>array(63,0,573,709),53=>array(70,-23,629,709),54=>array(93,-23,611,709),55=>array(137,0,671,709),56=>array(74,-23,604,709),57=>array(83,-23,599,709),58=>array(110,0,326,524),59=>array(78,-147,325,524),60=>array(87,-9,635,474),61=>array(74,111,609,355),62=>array(48,-9,596,474),63=>array(184,0,630,741),64=>array(80,-142,1036,741),65=>array(16,0,652,729),66=>array(80,0,712,729),67=>array(100,-23,758,741),68=>array(80,0,750,729),69=>array(80,0,741,729),70=>array(80,0,724,729),71=>array(109,-23,809,741),72=>array(80,0,796,729),73=>array(100,0,349,729),74=>array(47,-23,581,729),75=>array(80,0,814,729),76=>array(80,0,551,729),77=>array(80,0,921,729),78=>array(80,0,805,729),79=>array(100,-23,824,741),80=>array(80,0,722,729),81=>array(102,-59,826,741),82=>array(80,0,757,729),83=>array(81,-23,706,741),84=>array(158,0,748,729),85=>array(120,-23,796,729),86=>array(170,0,785,729),87=>array(170,0,1077,729),88=>array(20,0,792,729),89=>array(170,0,818,729),90=>array(30,0,739,729),91=>array(19,-213,405,729),92=>array(147,-20,280,729),93=>array(-23,-213,363,729),94=>array(115,329,496,709),95=>array(-59,-176,551,-126),96=>array(179,592,357,740),97=>array(63,-23,566,539),98=>array(60,-23,594,729),99=>array(76,-23,554,539),100=>array(76,-23,653,729),101=>array(77,-23,573,539),102=>array(71,0,395,732),103=>array(34,-218,603,539),104=>array(60,0,564,729),105=>array(66,0,305,729),106=>array(-45,-218,328,729),107=>array(60,0,586,729),108=>array(68,0,307,729),109=>array(60,0,841,539),110=>array(60,0,564,539),111=>array(80,-23,576,539),112=>array(14,-213,593,539),113=>array(71,-213,607,539),114=>array(60,0,427,539),115=>array(61,-23,520,539),116=>array(87,-23,356,668),117=>array(83,-23,589,524),118=>array(122,0,598,524),119=>array(122,0,824,524),120=>array(17,0,583,524),121=>array(-2,-218,580,524),122=>array(31,0,557,524),123=>array(91,-213,431,729),124=>array(54,-212,315,729),125=>array(-16,-213,324,729),126=>array(137,268,594,438),160=>array(0,0,0,0),161=>array(76,-205,315,524),162=>array(96,-120,585,628),163=>array(44,-23,628,729),164=>array(110,133,593,556),165=>array(100,0,696,709),166=>array(54,-212,315,729),167=>array(63,-213,589,729),168=>array(154,612,451,715),169=>array(55,-22,836,742),170=>array(107,303,441,742),171=>array(93,106,494,438),172=>array(99,86,619,377),173=>array(97,240,351,312),174=>array(55,-22,836,742),175=>array(160,627,450,696),176=>array(291,383,594,686),177=>array(50,0,625,633),178=>array(104,380,472,805),179=>array(132,366,464,805),180=>array(218,592,458,740),181=>array(-9,-200,602,518),182=>array(145,-178,677,729),183=>array(166,192,293,295),184=>array(1,-214,264,0),185=>array(184,380,372,805),186=>array(114,303,452,742),187=>array(69,106,466,438),188=>array(182,-20,898,726),189=>array(182,-20,945,726),190=>array(128,-20,938,734),191=>array(85,-217,531,524),192=>array(16,0,652,920),193=>array(16,0,667,920),194=>array(16,0,652,940),195=>array(16,0,679,909),196=>array(16,0,667,904),197=>array(16,0,652,970),198=>array(11,0,1087,729),199=>array(100,-214,758,741),200=>array(80,0,741,920),201=>array(80,0,741,920),202=>array(80,0,741,940),203=>array(80,0,741,904),204=>array(100,0,377,920),205=>array(100,0,467,920),206=>array(100,0,456,940),207=>array(100,0,477,904),208=>array(89,0,759,729),209=>array(80,0,805,909),210=>array(100,-23,824,920),211=>array(100,-23,824,920),212=>array(100,-23,824,940),213=>array(100,-23,824,909),214=>array(100,-23,824,904),215=>array(113,34,568,427),216=>array(42,-24,877,741),217=>array(120,-23,796,920),218=>array(120,-23,796,920),219=>array(120,-23,796,940),220=>array(120,-23,796,904),221=>array(170,0,818,920),222=>array(80,0,697,729),223=>array(60,-24,632,728),224=>array(63,-23,566,740),225=>array(63,-23,568,740),226=>array(63,-23,566,742),227=>array(63,-23,589,707),228=>array(63,-23,566,702),229=>array(63,-23,566,772),230=>array(65,-23,921,539),231=>array(76,-214,554,539),232=>array(77,-23,573,740),233=>array(77,-23,573,740),234=>array(77,-23,573,742),235=>array(77,-23,573,725),236=>array(66,0,337,740),237=>array(66,0,385,740),238=>array(86,0,400,742),239=>array(86,0,423,725),240=>array(80,-23,576,743),241=>array(60,0,589,707),242=>array(80,-23,576,740),243=>array(80,-23,576,740),244=>array(80,-23,576,742),245=>array(80,-23,579,707),246=>array(80,-23,576,725),247=>array(92,0,591,462),248=>array(19,-30,639,541),249=>array(83,-23,589,740),250=>array(83,-23,589,740),251=>array(83,-23,589,749),252=>array(83,-23,589,725),253=>array(-2,-218,580,740),254=>array(15,-213,594,729),255=>array(-2,-218,580,725),256=>array(16,0,660,869),257=>array(63,-23,566,676),258=>array(16,0,687,916),259=>array(63,-23,586,734),260=>array(17,-205,663,729),261=>array(65,-205,571,539),262=>array(100,-23,758,920),263=>array(76,-23,568,740),264=>array(100,-23,758,940),265=>array(76,-23,554,749),266=>array(100,-23,758,904),267=>array(76,-23,554,702),268=>array(100,-23,758,939),269=>array(76,-23,564,739),270=>array(80,0,750,940),271=>array(76,-23,826,740),272=>array(89,0,759,729),273=>array(73,-23,695,729),274=>array(80,0,741,869),275=>array(77,-23,573,676),276=>array(80,0,741,916),277=>array(77,-23,586,734),278=>array(80,0,741,904),279=>array(77,-23,573,702),280=>array(80,-205,741,729),281=>array(77,-205,573,539),282=>array(80,0,741,939),283=>array(77,-23,579,739),284=>array(109,-23,809,938),285=>array(34,-218,603,774),286=>array(109,-23,809,936),287=>array(34,-218,603,734),288=>array(109,-23,809,932),289=>array(34,-218,603,727),290=>array(109,-300,809,741),291=>array(34,-218,603,746),292=>array(80,0,796,937),293=>array(60,0,564,929),294=>array(83,0,830,729),295=>array(63,0,566,729),296=>array(103,0,504,937),297=>array(86,0,451,732),298=>array(103,0,472,869),299=>array(86,0,413,676),300=>array(103,0,497,916),301=>array(86,0,445,734),302=>array(-6,-205,349,729),303=>array(-30,-205,325,729),304=>array(100,0,391,904),305=>array(66,0,261,524),306=>array(100,-23,812,729),307=>array(66,-218,493,729),308=>array(47,-23,581,942),309=>array(-45,-218,400,752),310=>array(80,-300,814,729),311=>array(60,-300,586,729),312=>array(60,0,583,524),313=>array(80,0,551,920),314=>array(68,0,417,920),315=>array(80,-300,551,729),316=>array(-2,-300,307,729),317=>array(80,0,556,740),318=>array(68,0,476,740),319=>array(80,0,568,729),320=>array(68,0,424,729),321=>array(75,0,570,729),322=>array(62,0,312,729),323=>array(80,0,805,920),324=>array(60,0,568,740),325=>array(80,-300,805,729),326=>array(60,-300,564,539),327=>array(80,0,805,940),328=>array(60,0,577,738),329=>array(143,0,674,728),330=>array(80,-16,698,744),331=>array(60,-218,565,539),332=>array(100,-23,824,869),333=>array(80,-23,576,676),334=>array(100,-23,824,916),335=>array(80,-23,582,734),336=>array(100,-23,843,940),337=>array(80,-23,686,740),338=>array(101,-23,1108,741),339=>array(80,-23,961,539),340=>array(80,0,757,920),341=>array(60,0,488,740),342=>array(80,-300,757,729),343=>array(-2,-300,427,539),344=>array(80,0,757,940),345=>array(60,0,488,738),346=>array(81,-23,706,920),347=>array(61,-23,538,740),348=>array(81,-23,706,942),349=>array(61,-23,520,749),350=>array(89,-214,714,741),351=>array(61,-214,521,539),352=>array(81,-23,706,939),353=>array(61,-23,548,739),354=>array(150,-213,748,729),355=>array(-18,-230,366,668),356=>array(158,0,748,939),357=>array(87,-23,506,740),358=>array(161,0,750,729),359=>array(53,-23,359,668),360=>array(120,-23,796,906),361=>array(83,-23,589,717),362=>array(120,-23,796,869),363=>array(83,-23,589,676),364=>array(120,-23,796,916),365=>array(83,-23,589,734),366=>array(120,-23,796,974),367=>array(83,-23,589,772),368=>array(120,-23,807,940),369=>array(83,-23,681,740),370=>array(124,-205,800,729),371=>array(88,-205,594,524),372=>array(170,0,1077,935),373=>array(122,0,824,749),374=>array(170,0,818,935),375=>array(-2,-218,580,749),376=>array(170,0,818,904),377=>array(30,0,739,920),378=>array(31,0,557,740),379=>array(30,0,739,904),380=>array(31,0,557,702),381=>array(30,0,739,940),382=>array(31,0,557,738),383=>array(89,0,413,732),384=>array(54,-23,588,729),385=>array(91,0,821,729),386=>array(80,0,724,729),387=>array(54,-23,588,729),388=>array(91,0,683,729),389=>array(54,-23,588,729),390=>array(107,-23,765,741),391=>array(99,-23,872,741),392=>array(62,-23,648,556),393=>array(89,0,759,729),394=>array(139,0,906,729),395=>array(89,0,727,729),396=>array(73,-23,631,729),397=>array(32,-196,597,538),398=>array(73,0,751,729),399=>array(105,-23,824,741),400=>array(67,-23,681,741),401=>array(-98,-218,680,729),402=>array(-45,-218,413,732),403=>array(111,-23,925,741),404=>array(162,-27,810,729),405=>array(75,-23,896,729),406=>array(81,-23,309,729),407=>array(75,0,422,729),408=>array(82,0,860,729),409=>array(43,0,548,732),410=>array(72,0,419,729),411=>array(13,-10,542,738),412=>array(87,-15,922,729),413=>array(-35,-218,789,729),414=>array(60,-200,549,539),415=>array(110,-23,829,741),416=>array(101,-23,938,796),417=>array(76,-23,677,631),418=>array(102,-23,1051,742),419=>array(80,-200,760,540),420=>array(141,0,881,729),421=>array(7,-213,586,732),422=>array(91,-125,707,729),423=>array(77,-23,692,741),424=>array(61,-23,520,539),425=>array(44,0,699,729),426=>array(114,-218,366,732),427=>array(54,-218,357,668),428=>array(123,0,750,729),429=>array(111,-23,401,732),430=>array(160,-218,746,729),431=>array(124,-23,940,856),432=>array(87,-23,744,651),433=>array(79,-30,846,692),434=>array(119,-23,745,729),435=>array(160,0,902,729),436=>array(6,-218,753,732),437=>array(21,0,728,729),438=>array(35,0,559,524),439=>array(67,-23,731,729),440=>array(79,-23,717,729),441=>array(22,-143,557,524),442=>array(17,-202,555,524),443=>array(34,0,623,709),446=>array(101,-21,537,668),447=>array(7,-218,609,540),448=>array(54,-212,315,729),449=>array(54,-212,455,729),450=>array(74,-212,609,729),451=>array(124,0,363,729),452=>array(80,0,1439,940),453=>array(80,0,1265,738),454=>array(76,-23,1113,738),455=>array(80,-23,1137,729),456=>array(80,-218,884,729),457=>array(68,-218,550,729),458=>array(80,-23,1289,729),459=>array(80,-218,1050,729),460=>array(60,-218,884,729),461=>array(16,0,678,929),462=>array(63,-23,578,727),463=>array(103,0,491,929),464=>array(86,0,434,727),465=>array(100,-23,824,929),466=>array(80,-23,576,727),467=>array(120,-23,796,929),468=>array(83,-23,589,727),469=>array(120,-23,796,971),470=>array(83,-23,589,800),471=>array(120,-23,796,1038),472=>array(83,-23,621,883),473=>array(120,-23,796,1037),474=>array(83,-23,606,883),475=>array(120,-23,796,1041),476=>array(83,-23,589,883),477=>array(92,-23,588,539),478=>array(16,0,686,967),479=>array(63,-23,593,802),480=>array(16,0,682,974),481=>array(63,-23,595,800),482=>array(11,0,1087,869),483=>array(65,-23,921,648),484=>array(108,-23,814,741),485=>array(31,-218,601,539),486=>array(109,-23,809,929),487=>array(34,-218,603,727),488=>array(80,0,814,929),489=>array(60,0,586,914),490=>array(104,-221,828,741),491=>array(75,-221,571,539),492=>array(104,-221,828,869),493=>array(75,-221,571,648),494=>array(67,-23,731,934),495=>array(45,-143,574,747),496=>array(-65,-218,406,712),497=>array(80,0,1461,729),498=>array(80,0,1279,729),499=>array(76,-23,1113,729),500=>array(109,-23,809,929),501=>array(34,-218,603,727),503=>array(91,0,707,743),504=>array(80,0,805,920),505=>array(60,0,564,740),506=>array(16,0,752,945),507=>array(63,-23,660,942),508=>array(11,0,1087,920),509=>array(65,-23,921,740),510=>array(42,-24,877,920),511=>array(19,-30,639,740),512=>array(16,0,652,931),513=>array(63,-23,566,729),514=>array(16,0,652,913),515=>array(63,-23,566,711),516=>array(80,0,741,931),517=>array(77,-23,573,729),518=>array(80,0,741,913),519=>array(77,-23,573,711),520=>array(97,0,449,931),521=>array(45,0,397,729),522=>array(103,0,463,913),523=>array(86,0,411,711),524=>array(100,-23,824,931),525=>array(80,-23,576,729),526=>array(100,-23,824,913),527=>array(80,-23,576,711),528=>array(80,0,757,931),529=>array(60,0,451,729),530=>array(80,0,757,913),531=>array(60,0,501,711),532=>array(120,-23,796,931),533=>array(83,-23,589,729),534=>array(120,-23,796,913),535=>array(83,-23,589,711),536=>array(81,-300,706,741),537=>array(61,-300,520,539),538=>array(158,-300,748,729),539=>array(47,-300,356,668),540=>array(35,-100,585,709),541=>array(26,-84,449,542),542=>array(80,0,796,933),543=>array(60,0,605,917),548=>array(28,-216,736,729),549=>array(31,-216,555,524),550=>array(16,0,652,903),551=>array(63,-23,566,702),552=>array(90,-207,751,729),553=>array(69,-230,580,539),554=>array(100,-23,824,971),555=>array(80,-23,580,800),556=>array(100,-23,824,971),557=>array(80,-23,585,801),558=>array(100,-23,824,904),559=>array(80,-23,576,702),560=>array(100,-23,824,978),561=>array(80,-23,584,800),562=>array(170,0,818,869),563=>array(-2,-218,580,676),567=>array(-65,-218,264,524),592=>array(101,-23,604,539),593=>array(55,-23,578,538),594=>array(86,-14,609,547),595=>array(55,-23,578,732),596=>array(50,-23,528,539),597=>array(14,-42,548,539),598=>array(45,-218,603,729),599=>array(50,-23,696,732),600=>array(51,-23,533,539),601=>array(92,-23,588,539),602=>array(51,-23,827,570),603=>array(50,-23,501,539),604=>array(60,-23,520,539),605=>array(62,-24,804,570),606=>array(62,-23,520,539),607=>array(-34,-218,307,524),608=>array(17,-218,672,650),609=>array(34,-218,603,539),610=>array(50,-23,560,539),611=>array(75,-230,537,524),612=>array(82,-24,619,542),613=>array(61,-205,565,524),614=>array(55,0,559,732),615=>array(56,-218,560,732),616=>array(55,0,317,729),617=>array(46,-23,216,524),618=>array(12,0,361,524),619=>array(82,0,541,729),620=>array(100,0,483,729),621=>array(28,-218,294,729),622=>array(68,-143,655,729),623=>array(90,-15,871,524),624=>array(58,-200,838,524),625=>array(56,-218,836,539),626=>array(-38,-218,601,539),627=>array(56,-218,561,539),628=>array(60,0,588,524),629=>array(50,-23,538,539),630=>array(56,-23,823,539),631=>array(69,-9,756,542),632=>array(57,-200,711,712),633=>array(34,-14,401,525),634=>array(24,-15,407,729),635=>array(40,-218,386,524),636=>array(14,-200,396,539),637=>array(29,-218,397,539),638=>array(56,0,422,539),639=>array(92,-200,388,539),640=>array(65,0,564,525),641=>array(66,-1,652,524),642=>array(-40,-216,559,539),643=>array(-33,-218,391,732),644=>array(-32,-221,391,733),645=>array(81,-218,262,539),646=>array(-18,-218,566,732),647=>array(32,-145,301,546),648=>array(80,-218,367,668),649=>array(60,-23,641,524),650=>array(55,-23,668,544),651=>array(43,-23,521,524),652=>array(13,0,489,524),653=>array(10,0,712,524),654=>array(28,0,610,742),655=>array(125,0,612,524),656=>array(34,-216,538,524),657=>array(31,-96,555,524),658=>array(45,-143,574,524),659=>array(90,-138,555,524),660=>array(143,0,594,709),661=>array(143,0,585,709),662=>array(72,0,523,709),664=>array(50,-23,546,539),665=>array(60,0,538,525),666=>array(60,-23,552,539),667=>array(50,-23,691,544),668=>array(51,0,571,526),669=>array(-18,-218,479,729),670=>array(27,-204,553,525),671=>array(69,0,381,524),672=>array(55,-218,688,650),673=>array(143,0,594,709),674=>array(142,0,585,709),675=>array(61,-23,985,729),676=>array(51,-143,975,729),677=>array(51,-96,977,729),678=>array(95,-23,733,668),679=>array(92,-218,650,732),680=>array(95,-115,793,668),681=>array(88,-199,823,732),682=>array(68,-23,698,729),683=>array(68,0,655,729),684=>array(80,0,625,726),685=>array(55,119,587,616),686=>array(124,-198,629,732),687=>array(124,-218,629,732),688=>array(86,380,414,855),689=>array(93,380,421,856),690=>array(74,237,318,853),691=>array(112,380,351,731),692=>array(91,369,330,720),693=>array(94,238,333,720),694=>array(103,380,485,722),695=>array(147,379,604,721),696=>array(72,238,452,722),697=>array(145,438,370,716),698=>array(145,438,578,716),699=>array(193,503,353,754),700=>array(184,457,343,708),701=>array(206,457,343,708),702=>array(272,579,381,754),703=>array(218,579,328,754),704=>array(154,400,448,765),705=>array(157,400,445,765),706=>array(163,545,463,750),707=>array(163,545,463,750),708=>array(173,574,405,750),709=>array(210,574,442,750),710=>array(146,591,433,741),711=>array(176,592,463,740),712=>array(254,588,369,785),713=>array(160,627,450,696),714=>array(218,592,458,740),715=>array(194,592,341,740),716=>array(82,-223,197,-26),717=>array(-4,-144,286,-75),718=>array(54,-201,232,-53),719=>array(15,-201,255,-53),720=>array(103,0,346,546),721=>array(219,432,346,546),722=>array(123,-1,233,174),723=>array(124,2,234,177),724=>array(42,149,369,402),725=>array(-36,149,291,402),726=>array(60,110,386,422),727=>array(60,231,386,301),728=>array(165,594,471,729),729=>array(244,612,370,715),730=>array(198,561,414,772),731=>array(35,-205,246,0),732=>array(130,611,471,719),733=>array(91,592,507,740),734=>array(87,234,408,570),735=>array(241,591,584,788),736=>array(123,228,424,720),737=>array(128,379,285,854),738=>array(125,365,424,732),739=>array(87,379,456,721),740=>array(177,380,465,841),741=>array(194,0,625,800),742=>array(159,0,625,800),743=>array(117,0,625,800),744=>array(75,0,625,800),745=>array(40,0,625,800),746=>array(71,-1,495,606),747=>array(72,0,553,614),748=>array(23,-199,310,-51),749=>array(156,574,475,781),750=>array(155,499,457,730),751=>array(45,-200,277,-24),752=>array(8,-240,272,-49),753=>array(-10,-226,268,-28),754=>array(-29,-228,250,-30),755=>array(22,-258,238,-47),756=>array(157,366,304,514),757=>array(163,366,478,514),758=>array(104,364,519,514),759=>array(-24,-159,317,-51),760=>array(110,65,326,589),761=>array(132,512,336,749),762=>array(169,512,338,749),763=>array(20,-73,189,164),764=>array(11,-72,215,165),765=>array(-32,-200,317,-28),766=>array(-32,-200,295,-28),767=>array(-26,-220,311,-19),768=>array(-154,592,24,740),769=>array(-115,592,125,740),770=>array(-187,591,100,741),771=>array(-203,611,138,719),772=>array(-173,627,117,696),773=>array(-318,629,265,701),774=>array(-168,594,138,729),775=>array(-89,612,37,715),776=>array(-179,612,118,715),777=>array(-116,576,42,769),778=>array(-135,561,81,772),779=>array(-242,592,174,740),780=>array(-157,592,130,740),781=>array(-83,588,32,785),782=>array(-152,588,108,785),783=>array(-241,592,111,740),784=>array(-168,594,138,814),785=>array(-168,594,138,729),786=>array(-229,583,-114,740),787=>array(-219,583,-104,740),788=>array(-116,584,-3,741),789=>array(123,583,238,740),790=>array(-272,-200,-94,-52),791=>array(-303,-200,-63,-52),792=>array(-326,-298,-87,-60),793=>array(-319,-298,-80,-60),794=>array(-171,427,119,701),795=>array(-44,440,189,651),796=>array(-248,-235,-138,-60),797=>array(-330,-215,-76,-60),798=>array(-313,-215,-58,-60),799=>array(-330,-298,-76,-60),800=>array(-311,-137,-57,-65),801=>array(-217,-218,10,45),802=>array(-110,-218,58,45),803=>array(-255,-185,-129,-82),804=>array(-337,-182,-40,-79),805=>array(-272,-255,-56,-44),806=>array(-288,-300,-141,-76),807=>array(-332,-214,-69,0),808=>array(-298,-205,-87,0),809=>array(-253,-247,-138,-50),810=>array(-347,-192,-43,-55),811=>array(-341,-176,-25,-54),812=>array(-308,-194,-21,-46),813=>array(-350,-195,-63,-45),814=>array(-327,-186,-21,-51),815=>array(-349,-188,-43,-53),816=>array(-360,-159,-19,-51),817=>array(-322,-132,-32,-63),818=>array(-626,-125,-16,-75),819=>array(-642,-200,-14,-51),820=>array(-325,206,16,314),821=>array(-279,228,11,297),822=>array(-540,273,70,323),823=>array(-701,3,-13,616),824=>array(-701,-61,-13,749),825=>array(-223,-214,-113,-39),826=>array(-337,-203,-33,-66),827=>array(-387,-300,-70,-39),828=>array(-384,-174,-75,-59),829=>array(-177,563,109,756),830=>array(-99,582,62,850),831=>array(-476,590,152,739),832=>array(-197,593,-19,741),833=>array(-142,592,98,740),834=>array(-200,603,141,711),835=>array(-219,583,-104,740),836=>array(-225,601,149,760),837=>array(-261,-200,-106,-46),838=>array(-280,603,24,740),839=>array(-354,-232,-36,-43),840=>array(-379,-270,-108,-73),841=>array(-302,-199,-145,-55),842=>array(-299,595,42,786),843=>array(-283,564,58,904),844=>array(-242,571,123,816),845=>array(-544,-243,-44,-45),846=>array(-396,-300,-198,-55),848=>array(-200,545,100,750),849=>array(-222,572,-112,747),850=>array(-306,563,0,803),851=>array(-307,-230,-21,-37),852=>array(-423,-226,-145,-28),853=>array(-445,-228,-166,-30),854=>array(-542,-202,-78,-25),855=>array(-160,573,-50,748),856=>array(-194,608,-68,711),857=>array(-432,-262,-204,-46),858=>array(-547,-228,-120,-48),859=>array(-201,546,46,800),860=>array(-344,-199,327,-35),861=>array(-174,569,497,733),862=>array(-195,611,469,676),863=>array(-344,-127,320,-62),864=>array(-216,569,486,739),865=>array(-212,567,459,731),866=>array(-337,-261,268,-30),867=>array(-336,569,-144,784),868=>array(-349,570,-159,784),869=>array(-285,575,-194,853),870=>array(-349,570,-159,784),871=>array(-332,570,-139,779),872=>array(-315,571,-133,785),873=>array(-330,570,-110,856),874=>array(-331,569,-139,848),875=>array(-407,572,-109,777),876=>array(-291,572,-150,777),877=>array(-280,570,-177,833),878=>array(-322,570,-141,770),879=>array(-355,570,-139,770),884=>array(32,580,162,780),885=>array(16,-194,146,6),890=>array(72,-200,227,-46),894=>array(78,-147,325,524),900=>array(186,592,426,740),901=>array(244,601,618,760),902=>array(0,0,670,740),903=>array(200,421,326,524),904=>array(85,0,866,740),905=>array(85,0,911,740),906=>array(85,0,432,740),908=>array(85,-12,911,740),910=>array(85,0,1012,740),911=>array(85,0,902,736),912=>array(71,-8,480,749),913=>array(0,0,670,716),914=>array(0,0,645,716),915=>array(0,0,663,716),916=>array(0,0,670,716),917=>array(0,0,697,716),918=>array(0,0,733,716),919=>array(0,0,739,716),920=>array(45,-12,763,730),921=>array(0,0,273,716),922=>array(0,0,747,716),923=>array(0,0,670,716),924=>array(0,0,863,716),925=>array(0,0,743,716),926=>array(0,0,697,716),927=>array(50,-12,766,730),928=>array(0,0,739,716),929=>array(0,0,681,716),931=>array(0,0,725,718),932=>array(135,0,724,716),933=>array(153,0,809,716),934=>array(52,0,732,720),935=>array(0,0,817,716),936=>array(72,-2,812,720),937=>array(0,0,767,722),938=>array(29,0,430,904),939=>array(153,0,809,904),940=>array(34,-13,584,740),941=>array(16,-10,522,740),942=>array(33,-182,551,740),943=>array(28,-8,383,740),944=>array(37,-14,569,760),945=>array(34,-13,584,530),946=>array(-48,-198,545,732),947=>array(102,-198,611,530),948=>array(29,-16,594,718),949=>array(16,-10,522,532),950=>array(27,-194,532,718),951=>array(33,-182,551,531),952=>array(37,-12,537,730),953=>array(28,-8,221,520),954=>array(1,0,540,518),955=>array(0,-10,529,732),956=>array(-49,-200,562,518),957=>array(92,0,566,518),958=>array(19,-194,553,718),959=>array(32,-12,542,530),960=>array(59,-4,671,520),961=>array(-49,-200,564,532),962=>array(102,-182,605,536),963=>array(32,-12,667,530),964=>array(96,-4,565,518),965=>array(37,-14,569,518),966=>array(35,-200,703,522),967=>array(-70,-212,646,538),968=>array(46,-200,709,518),969=>array(26,-9,717,526),970=>array(73,-8,397,702),971=>array(37,-14,569,702),972=>array(32,-12,542,740),973=>array(37,-14,569,740),974=>array(26,-9,717,740),977=>array(102,-12,643,730),978=>array(189,0,856,741),979=>array(109,0,1009,742),980=>array(138,0,805,904),981=>array(37,-200,691,712),982=>array(78,-9,817,534),983=>array(8,-216,656,524),1008=>array(8,-17,656,539),1009=>array(49,-186,607,532),1012=>array(110,-23,829,741),1013=>array(92,-12,389,530),1024=>array(70,0,731,920),1025=>array(70,0,731,904),1026=>array(149,-147,768,728),1027=>array(80,0,724,920),1028=>array(101,-23,759,741),1029=>array(75,-23,700,741),1030=>array(80,0,329,729),1031=>array(90,0,481,904),1032=>array(73,-23,607,729),1033=>array(20,0,1004,729),1034=>array(80,0,1136,729),1035=>array(147,0,767,728),1036=>array(80,0,811,920),1037=>array(80,0,805,920),1038=>array(115,0,750,901),1039=>array(80,-135,796,729),1040=>array(15,0,651,729),1041=>array(80,0,724,729),1042=>array(80,0,712,729),1043=>array(80,0,724,729),1044=>array(3,-135,840,729),1045=>array(70,0,731,729),1046=>array(15,0,1017,729),1047=>array(84,-23,708,741),1048=>array(80,0,805,729),1049=>array(80,0,805,900),1050=>array(80,0,811,729),1051=>array(15,0,730,729),1052=>array(85,0,926,729),1053=>array(77,0,793,729),1054=>array(100,-23,824,741),1055=>array(80,0,796,729),1056=>array(69,0,711,729),1057=>array(88,-23,746,741),1058=>array(156,0,746,729),1059=>array(115,0,750,729),1060=>array(110,0,924,729),1061=>array(13,0,785,729),1062=>array(80,-135,796,729),1063=>array(140,0,687,729),1064=>array(80,0,905,729),1065=>array(80,-135,905,729),1066=>array(158,0,841,729),1067=>array(80,0,960,729),1068=>array(80,0,670,729),1069=>array(96,-23,759,741),1070=>array(80,-23,1149,741),1071=>array(15,0,761,729),1072=>array(63,-23,566,539),1073=>array(87,-23,641,776),1074=>array(70,0,548,525),1075=>array(70,0,476,524),1076=>array(-11,-120,603,524),1077=>array(68,-23,564,539),1078=>array(5,0,889,524),1079=>array(60,-23,520,539),1080=>array(70,0,598,524),1081=>array(70,0,598,722),1082=>array(70,0,593,524),1083=>array(20,0,549,524),1084=>array(70,0,659,524),1085=>array(70,0,599,524),1086=>array(73,-23,569,539),1087=>array(70,0,598,524),1088=>array(32,-213,611,539),1089=>array(75,-23,553,539),1090=>array(105,0,493,524),1091=>array(-17,-218,565,524),1092=>array(82,-218,957,674),1093=>array(9,0,575,524),1094=>array(70,-120,598,524),1095=>array(108,0,523,524),1096=>array(70,0,733,524),1097=>array(70,-120,733,524),1098=>array(105,0,646,525),1099=>array(70,0,772,525),1100=>array(70,0,523,525),1101=>array(70,-23,544,539),1102=>array(70,-23,826,539),1103=>array(5,0,591,525),1104=>array(68,-23,564,741),1105=>array(68,-23,564,702),1106=>array(91,-163,591,729),1107=>array(70,0,518,740),1108=>array(72,-23,545,539),1109=>array(60,-23,519,539),1110=>array(70,0,309,729),1111=>array(86,0,419,708),1112=>array(-43,-218,330,729),1113=>array(14,0,798,524),1114=>array(70,0,855,524),1115=>array(95,0,594,729),1116=>array(70,0,593,740),1117=>array(70,0,598,740),1118=>array(-17,-218,565,734),1119=>array(70,-120,598,524),1120=>array(142,0,1082,729),1121=>array(101,0,788,524),1136=>array(115,-2,855,720),1137=>array(75,-200,738,518),1138=>array(111,-23,837,741),1139=>array(72,-23,566,539),1148=>array(142,0,1082,964),1149=>array(101,0,817,800),1150=>array(142,0,1082,900),1151=>array(101,0,788,729),1154=>array(11,-220,499,529),1155=>array(-251,611,150,799),1156=>array(-181,594,125,729),1157=>array(-142,642,38,731),1158=>array(-137,638,29,726),1159=>array(-430,579,136,745),1160=>array(-752,-122,269,857),1161=>array(-727,-172,295,849),1162=>array(80,-135,805,928),1163=>array(70,-120,598,729),1164=>array(98,0,688,729),1165=>array(91,0,558,525),1166=>array(80,0,722,729),1167=>array(23,-218,603,539),1168=>array(80,0,745,825),1169=>array(70,0,499,629),1170=>array(101,0,745,729),1171=>array(73,0,505,524),1172=>array(80,-140,724,729),1173=>array(70,-126,476,524),1174=>array(15,-135,1017,729),1175=>array(10,-120,894,524),1176=>array(84,-205,708,741),1177=>array(61,-205,521,539),1178=>array(80,-135,811,729),1179=>array(70,-120,593,524),1180=>array(80,0,811,729),1181=>array(70,0,593,524),1182=>array(102,0,833,729),1183=>array(74,0,597,524),1184=>array(149,0,974,729),1185=>array(108,0,719,525),1186=>array(80,-135,796,729),1187=>array(70,-120,599,524),1188=>array(80,0,1130,729),1189=>array(70,0,799,524),1190=>array(80,-140,1062,729),1191=>array(70,-126,777,524),1192=>array(99,-23,813,741),1193=>array(75,-23,639,539),1194=>array(100,-205,758,741),1195=>array(73,-205,551,539),1196=>array(158,-135,747,729),1197=>array(106,-120,494,524),1198=>array(165,0,813,729),1199=>array(117,-200,685,524),1200=>array(120,0,813,729),1201=>array(69,-200,689,524),1202=>array(15,-135,785,729),1203=>array(10,-120,572,524),1204=>array(149,-135,947,729),1205=>array(105,-120,672,524),1206=>array(142,-135,674,729),1207=>array(111,-120,513,524),1208=>array(140,0,672,729),1209=>array(111,0,513,524),1210=>array(80,0,612,729),1211=>array(70,0,472,524),1212=>array(166,-23,979,757),1213=>array(119,-23,741,539),1214=>array(146,-197,961,757),1215=>array(100,-197,721,539),1216=>array(80,0,329,729),1217=>array(15,0,1017,900),1218=>array(5,0,889,734),1219=>array(80,-140,811,729),1220=>array(70,-126,593,524),1221=>array(15,-135,730,729),1222=>array(14,-120,543,524),1223=>array(80,-140,796,729),1224=>array(70,-126,599,524),1225=>array(80,-135,796,729),1226=>array(70,-120,599,524),1227=>array(142,-135,674,729),1228=>array(111,-120,513,524),1229=>array(80,-135,921,729),1230=>array(70,-120,659,524),1231=>array(80,0,329,729),1232=>array(15,0,689,936),1233=>array(59,-23,596,759),1234=>array(15,0,666,904),1235=>array(59,-23,576,727),1236=>array(11,0,1087,729),1237=>array(65,-23,921,539),1238=>array(70,0,731,935),1239=>array(68,-23,588,759),1240=>array(110,-23,770,741),1241=>array(68,-23,546,539),1242=>array(110,-23,770,904),1243=>array(68,-23,546,702),1244=>array(15,0,1017,903),1245=>array(5,0,889,727),1246=>array(84,-23,708,903),1247=>array(60,-23,531,727),1248=>array(67,-23,731,729),1249=>array(105,-143,634,524),1250=>array(80,0,805,871),1251=>array(70,0,598,693),1252=>array(80,0,805,904),1253=>array(70,0,598,727),1254=>array(98,-23,822,904),1255=>array(71,-23,567,727),1256=>array(111,-23,837,741),1257=>array(72,-23,566,539),1258=>array(111,-23,837,904),1259=>array(72,-23,566,727),1260=>array(96,-23,759,903),1261=>array(70,-23,560,727),1262=>array(115,0,750,871),1263=>array(-17,-218,565,693),1264=>array(115,0,750,904),1265=>array(-17,-218,565,727),1266=>array(115,0,750,939),1267=>array(-17,-218,604,774),1268=>array(140,0,687,904),1269=>array(108,0,523,727),1270=>array(80,-135,724,729),1271=>array(70,-120,476,524),1272=>array(80,0,960,903),1273=>array(70,0,772,727),1296=>array(85,-23,715,741),1297=>array(60,-23,531,539),1298=>array(30,-174,749,729),1299=>array(67,-143,599,524),1306=>array(102,-59,826,741),1307=>array(71,-213,607,539),1308=>array(170,0,1077,729),1309=>array(122,0,824,524),1310=>array(79,0,743,729),1311=>array(70,0,573,524),1329=>array(55,-41,722,716),1330=>array(2,-2,667,726),1331=>array(83,-1,715,726),1332=>array(75,1,700,729),1333=>array(52,5,684,733),1334=>array(-32,-6,662,735),1335=>array(7,0,457,721),1336=>array(-3,0,663,729),1337=>array(-14,-2,801,728),1338=>array(28,-10,675,718),1339=>array(-15,0,617,732),1340=>array(17,0,317,716),1341=>array(-10,-12,819,723),1342=>array(28,-4,825,762),1343=>array(81,1,677,733),1344=>array(2,-74,649,725),1345=>array(0,-42,627,728),1346=>array(68,0,591,728),1347=>array(-30,0,659,724),1348=>array(19,0,790,729),1349=>array(10,-12,575,728),1350=>array(67,0,745,729),1351=>array(4,-12,573,739),1352=>array(-3,1,663,729),1353=>array(29,-14,616,728),1354=>array(75,1,663,729),1355=>array(-32,-8,662,735),1356=>array(-3,1,688,729),1357=>array(52,-12,719,716),1358=>array(82,1,714,729),1359=>array(13,-12,631,728),1360=>array(-3,1,663,729),1361=>array(23,-12,590,728),1362=>array(-1,0,375,723),1363=>array(33,1,749,725),1364=>array(-16,0,631,728),1365=>array(38,-12,743,729),1366=>array(-4,-8,664,725),1369=>array(218,579,328,754),1370=>array(146,489,334,723),1371=>array(134,588,320,718),1372=>array(140,585,473,730),1373=>array(58,583,212,720),1374=>array(150,595,449,782),1375=>array(154,588,441,707),1377=>array(40,-10,824,520),1378=>array(-5,-211,541,529),1379=>array(48,-209,561,530),1380=>array(40,-209,548,515),1381=>array(14,-11,521,721),1382=>array(54,-209,554,518),1383=>array(30,-121,395,721),1384=>array(-15,-208,530,529),1385=>array(-11,-221,580,518),1386=>array(18,-14,615,723),1387=>array(-38,-205,508,716),1388=>array(-16,-208,224,519),1389=>array(-32,-210,783,713),1390=>array(12,-14,554,742),1391=>array(50,-211,551,721),1392=>array(-10,0,492,716),1393=>array(9,-14,462,736),1394=>array(6,-209,484,515),1395=>array(-33,-1,574,731),1396=>array(19,-10,543,725),1397=>array(-122,-210,230,519),1398=>array(18,-10,497,726),1399=>array(-6,-209,436,510),1400=>array(13,-1,513,529),1401=>array(-23,-209,362,521),1402=>array(61,-213,846,520),1403=>array(18,-209,500,532),1404=>array(24,-2,524,529),1405=>array(40,-12,540,519),1406=>array(50,-211,593,716),1407=>array(47,-13,857,529),1408=>array(-10,-211,536,529),1409=>array(1,-210,565,530),1410=>array(22,0,247,505),1411=>array(18,-206,828,723),1412=>array(-34,-209,599,518),1413=>array(40,-12,546,530),1414=>array(14,-209,631,725),1415=>array(17,-8,483,723),1417=>array(35,0,245,519),1418=>array(6,166,292,263),1423=>array(131,1,788,729),1456=>array(270,-256,382,-60),1457=>array(133,-256,504,-60),1458=>array(32,-256,379,-60),1459=>array(55,-249,397,-60),1460=>array(296,-131,382,-60),1461=>array(231,-131,447,-60),1462=>array(215,-256,429,-60),1463=>array(129,-131,332,-60),1464=>array(137,-248,340,-60),1465=>array(211,660,297,731),1467=>array(143,-249,488,-60),1468=>array(292,270,378,341),1469=>array(150,-248,261,-60),1470=>array(160,524,572,600),1471=>array(267,664,470,735),1472=>array(31,-100,288,700),1473=>array(780,640,866,711),1474=>array(211,640,297,711),1475=>array(110,0,326,524),1476=>array(446,640,532,711),1488=>array(66,0,702,600),1489=>array(58,0,583,600),1490=>array(30,0,465,600),1491=>array(149,0,671,600),1492=>array(63,0,651,600),1493=>array(62,0,277,600),1494=>array(126,0,424,600),1495=>array(63,0,656,600),1496=>array(104,0,656,600),1497=>array(118,286,273,600),1498=>array(149,-200,559,600),1499=>array(57,0,601,600),1500=>array(148,0,673,749),1501=>array(63,0,656,600),1502=>array(68,0,655,600),1503=>array(19,-200,277,600),1504=>array(51,0,412,600),1505=>array(103,0,656,600),1506=>array(24,-55,659,600),1507=>array(135,-200,611,600),1508=>array(63,0,616,600),1509=>array(140,-200,613,600),1510=>array(59,0,652,600),1511=>array(19,-200,678,600),1512=>array(148,0,582,600),1513=>array(110,0,848,600),1514=>array(35,0,723,600),1520=>array(62,0,489,600),1521=>array(120,0,478,600),1522=>array(119,286,473,600),1523=>array(155,464,273,709),1524=>array(165,464,443,709),2433=>array(-291,632,-48,796),2434=>array(14,43,282,552),2435=>array(5,48,258,507),2437=>array(21,0,687,558),2438=>array(13,0,852,635),2439=>array(6,-50,527,790),2440=>array(2,-10,576,772),2441=>array(-16,62,575,790),2442=>array(-6,64,594,794),2443=>array(59,0,649,651),2444=>array(125,53,515,633),2447=>array(30,0,546,571),2448=>array(0,0,608,857),2451=>array(59,62,531,538),2452=>array(25,62,598,861),2453=>array(13,0,655,558),2454=>array(55,0,549,644),2455=>array(62,3,546,635),2456=>array(23,0,506,558),2457=>array(34,3,436,525),2458=>array(21,2,492,558),2459=>array(41,-75,606,558),2460=>array(24,-3,669,558),2461=>array(14,1,625,646),2462=>array(20,0,769,570),2463=>array(-27,70,435,807),2464=>array(-26,3,454,852),2465=>array(3,60,596,558),2466=>array(5,3,488,558),2467=>array(74,0,551,657),2468=>array(11,38,652,558),2469=>array(38,0,540,646),2470=>array(26,-2,495,558),2471=>array(48,0,520,565),2472=>array(9,-2,534,558),2474=>array(31,0,575,627),2475=>array(23,0,660,558),2476=>array(23,0,473,558),2477=>array(18,71,629,558),2478=>array(24,0,523,558),2479=>array(17,0,504,558),2480=>array(23,0,480,558),2482=>array(15,0,584,558),2486=>array(19,0,581,645),2487=>array(25,0,506,558),2488=>array(28,0,567,558),2489=>array(29,-53,520,558),2492=>array(-382,-161,-266,-49),2493=>array(29,-53,429,558),2494=>array(-39,0,267,635),2495=>array(-14,0,593,789),2496=>array(-332,0,232,809),2497=>array(-251,-214,81,76),2498=>array(-190,-274,129,36),2499=>array(-232,-293,13,41),2500=>array(-341,-431,28,41),2503=>array(1,0,354,558),2504=>array(-21,0,347,787),2507=>array(2,0,952,635),2508=>array(22,0,928,820),2509=>array(-200,-166,-22,-3),2510=>array(34,3,358,561),2519=>array(-208,2,268,820),2524=>array(35,-112,604,558),2525=>array(42,-159,495,558),2527=>array(28,0,504,558),2528=>array(86,-253,677,651),2529=>array(159,-269,576,633),2530=>array(-268,-340,12,44),2531=>array(-575,-340,-17,146),2534=>array(59,65,427,430),2535=>array(33,2,349,556),2536=>array(57,-59,425,547),2537=>array(47,44,506,514),2538=>array(42,23,410,579),2539=>array(35,5,456,549),2540=>array(29,26,464,535),2541=>array(114,30,430,540),2542=>array(27,31,534,542),2543=>array(40,30,431,574),2544=>array(23,0,473,558),2545=>array(10,0,473,558),2546=>array(70,98,417,609),2547=>array(-7,73,348,548),2548=>array(-28,98,524,609),2549=>array(29,75,598,548),2550=>array(-21,29,601,572),2551=>array(13,47,146,551),2552=>array(29,35,327,558),2553=>array(37,146,398,489),2554=>array(9,372,557,729),2555=>array(82,-178,311,298),4256=>array(102,0,593,720),4257=>array(100,0,611,720),4258=>array(104,0,637,740),4259=>array(124,17,873,740),4260=>array(104,0,644,740),4261=>array(99,0,638,740),4262=>array(179,0,792,740),4263=>array(124,0,936,740),4264=>array(132,20,663,740),4265=>array(99,0,641,740),4266=>array(124,20,1003,740),4267=>array(100,0,641,740),4268=>array(122,0,669,740),4269=>array(118,20,833,740),4270=>array(98,0,606,720),4271=>array(128,0,696,720),4272=>array(103,20,792,720),4273=>array(121,0,590,720),4274=>array(110,0,796,740),4275=>array(163,0,776,740),4276=>array(172,0,913,740),4277=>array(103,0,672,720),4278=>array(116,20,875,740),4279=>array(102,0,676,720),4280=>array(115,0,699,740),4281=>array(84,20,616,740),4282=>array(127,0,798,720),4283=>array(98,0,669,720),4284=>array(125,0,769,740),4285=>array(102,0,766,720),4286=>array(123,0,585,720),4287=>array(92,0,921,740),4288=>array(94,0,626,720),4304=>array(58,0,447,450),4305=>array(67,0,508,720),4306=>array(8,-280,488,420),4307=>array(28,-263,714,420),4308=>array(4,-280,476,420),4309=>array(4,-280,475,420),4310=>array(149,0,651,740),4311=>array(69,0,757,420),4312=>array(68,20,470,420),4313=>array(5,-280,479,420),4314=>array(35,-260,872,420),4315=>array(68,0,540,720),4316=>array(68,0,547,720),4317=>array(73,20,707,420),4318=>array(61,0,518,720),4319=>array(37,-280,539,420),4320=>array(76,20,743,720),4321=>array(79,0,480,720),4322=>array(32,-280,702,602),4323=>array(69,-280,659,420),4324=>array(77,-280,725,420),4325=>array(4,-280,569,714),4326=>array(38,-262,728,420),4327=>array(3,-280,506,420),4328=>array(90,0,571,740),4329=>array(34,20,501,740),4330=>array(33,-280,648,420),4331=>array(68,0,572,720),4332=>array(69,0,619,740),4333=>array(4,-280,637,720),4334=>array(66,0,469,720),4335=>array(-52,-280,693,420),4336=>array(67,0,547,720),4337=>array(71,-4,693,746),4338=>array(29,-5,411,394),4339=>array(2,-274,449,376),4340=>array(1,-274,471,711),4341=>array(61,6,533,714),4345=>array(72,-280,552,420),4347=>array(80,-1,526,576),4348=>array(107,228,467,768),5024=>array(53,0,705,729),5025=>array(53,-10,699,729),5026=>array(92,0,679,729),5027=>array(32,-23,756,729),5028=>array(84,-23,1030,741),5029=>array(53,0,275,729),5030=>array(64,-23,641,741),5031=>array(101,-23,835,741),5032=>array(53,0,535,729),5033=>array(39,-23,764,729),5034=>array(-22,0,614,729),5035=>array(5,-23,517,729),5036=>array(53,0,687,729),5037=>array(80,0,824,729),5038=>array(96,0,573,741),5039=>array(-18,-23,756,752),5040=>array(53,0,567,729),5041=>array(53,0,666,729),5042=>array(20,-23,829,741),5043=>array(130,0,1038,729),5044=>array(47,-23,669,741),5045=>array(50,0,619,752),5046=>array(84,-23,733,741),5047=>array(53,0,868,729),5048=>array(96,0,597,752),5049=>array(60,-23,940,729),5050=>array(85,-23,1034,741),5051=>array(53,0,743,729),5052=>array(54,-23,522,729),5053=>array(42,-23,808,729),5054=>array(84,-23,804,741),5055=>array(103,-130,528,729),5056=>array(84,-23,775,741),5057=>array(-11,-23,776,742),5058=>array(53,0,588,729),5059=>array(16,0,698,729),5060=>array(87,0,644,752),5061=>array(84,-23,1113,741),5062=>array(24,0,725,729),5063=>array(42,-23,856,752),5064=>array(98,-23,804,741),5065=>array(100,0,1253,741),5066=>array(42,-23,856,752),5067=>array(71,-23,650,741),5068=>array(83,-23,739,729),5069=>array(33,-23,944,752),5070=>array(53,0,635,729),5071=>array(53,0,642,729),5072=>array(73,0,526,729),5073=>array(51,-24,756,738),5074=>array(53,0,675,729),5075=>array(78,-23,502,729),5076=>array(115,0,1027,729),5077=>array(53,-23,662,741),5078=>array(97,-23,690,729),5079=>array(-26,0,589,729),5080=>array(9,0,624,729),5081=>array(115,0,731,729),5082=>array(53,-23,625,741),5083=>array(80,-23,937,740),5084=>array(13,-24,725,742),5085=>array(50,0,560,741),5086=>array(53,0,521,729),5087=>array(84,-23,733,741),5088=>array(94,-23,752,729),5089=>array(86,-23,893,741),5090=>array(53,0,675,729),5091=>array(85,-23,744,741),5092=>array(103,0,842,729),5093=>array(53,0,789,729),5094=>array(53,0,758,729),5095=>array(41,-22,622,729),5096=>array(86,-24,913,741),5097=>array(84,-91,903,741),5098=>array(26,-23,953,741),5099=>array(84,-23,804,741),5100=>array(101,-23,847,741),5101=>array(3,-24,671,741),5102=>array(78,-23,629,741),5103=>array(42,-23,856,752),5104=>array(25,-15,663,741),5105=>array(9,-23,724,729),5106=>array(50,0,609,741),5107=>array(85,-23,970,741),5108=>array(53,0,664,729),7680=>array(16,-260,652,729),7681=>array(63,-259,566,539),7682=>array(80,0,712,879),7683=>array(60,-23,594,729),7684=>array(80,-164,712,729),7685=>array(60,-187,594,729),7686=>array(80,-134,712,729),7687=>array(60,-157,594,729),7688=>array(100,-214,758,926),7689=>array(76,-214,570,747),7690=>array(80,0,750,879),7691=>array(76,-23,653,729),7692=>array(80,-164,750,729),7693=>array(76,-187,653,729),7694=>array(80,-134,750,729),7695=>array(76,-157,653,729),7696=>array(89,-207,758,729),7697=>array(71,-230,650,729),7698=>array(80,-210,750,729),7699=>array(61,-233,653,729),7700=>array(80,0,741,1026),7701=>array(77,-23,573,890),7702=>array(80,0,741,1024),7703=>array(77,-23,576,890),7704=>array(80,-210,741,729),7705=>array(77,-233,573,539),7706=>array(80,-166,741,729),7707=>array(77,-189,573,539),7708=>array(90,-207,751,933),7709=>array(69,-230,585,731),7710=>array(80,0,724,879),7711=>array(71,0,417,879),7712=>array(109,-23,809,866),7713=>array(34,-218,603,664),7714=>array(80,0,796,879),7715=>array(60,0,564,790),7716=>array(80,-164,796,729),7717=>array(60,-164,564,729),7718=>array(80,0,796,904),7719=>array(60,0,625,879),7720=>array(-52,-207,799,729),7721=>array(-70,-207,574,729),7722=>array(80,-198,796,729),7723=>array(60,-198,564,729),7724=>array(-53,-166,349,729),7725=>array(-79,-166,305,729),7726=>array(100,0,518,1034),7727=>array(86,0,472,900),7728=>array(80,0,814,921),7729=>array(60,0,586,897),7730=>array(80,-164,814,729),7731=>array(60,-164,586,729),7732=>array(80,-134,814,729),7733=>array(60,-134,586,729),7734=>array(80,-164,551,729),7735=>array(24,-164,307,729),7736=>array(80,-164,596,866),7737=>array(24,-164,430,854),7738=>array(80,-134,551,729),7739=>array(-52,-134,307,729),7740=>array(80,-210,551,729),7741=>array(-80,-210,307,729),7742=>array(80,0,921,922),7743=>array(60,0,841,747),7744=>array(80,0,921,879),7745=>array(60,0,841,702),7746=>array(80,-164,921,729),7747=>array(60,-164,841,539),7748=>array(80,0,805,879),7749=>array(60,0,564,702),7750=>array(80,-164,805,729),7751=>array(60,-164,564,539),7752=>array(80,-134,805,729),7753=>array(60,-134,564,539),7754=>array(80,-210,805,729),7755=>array(60,-210,564,539),7756=>array(100,-23,824,1040),7757=>array(80,-23,597,900),7758=>array(100,-23,824,1000),7759=>array(80,-23,588,845),7760=>array(100,-23,824,1000),7761=>array(80,-23,576,847),7762=>array(100,-23,824,1000),7763=>array(80,-23,591,847),7764=>array(80,0,722,922),7765=>array(14,-213,598,740),7766=>array(80,0,722,879),7767=>array(14,-213,593,702),7768=>array(80,0,757,879),7769=>array(60,0,427,702),7770=>array(80,-164,757,729),7771=>array(60,-164,427,539),7772=>array(80,-164,757,866),7773=>array(60,-164,476,676),7774=>array(80,-134,757,729),7775=>array(17,-134,427,539),7776=>array(81,-23,706,879),7777=>array(61,-23,520,702),7778=>array(81,-187,706,741),7779=>array(61,-187,520,539),7780=>array(81,-23,706,1021),7781=>array(61,-23,538,861),7782=>array(81,-23,706,1009),7783=>array(61,-23,548,851),7784=>array(81,-187,706,887),7785=>array(61,-187,520,702),7786=>array(158,0,748,879),7787=>array(87,-23,356,831),7788=>array(158,-164,748,729),7789=>array(60,-187,356,668),7790=>array(156,-134,748,729),7791=>array(-31,-157,356,668),7792=>array(114,-210,748,729),7793=>array(-46,-233,356,668),7794=>array(120,-186,796,729),7795=>array(83,-186,589,524),7796=>array(120,-189,796,729),7797=>array(83,-189,589,524),7798=>array(120,-233,796,729),7799=>array(83,-233,589,524),7800=>array(120,-23,796,1013),7801=>array(83,-23,597,900),7802=>array(120,-23,796,971),7803=>array(83,-23,589,820),7804=>array(170,0,785,880),7805=>array(122,0,598,705),7806=>array(170,-164,785,729),7807=>array(122,-164,598,524),7808=>array(170,0,1077,925),7809=>array(122,0,824,747),7810=>array(170,0,1077,931),7811=>array(122,0,824,747),7812=>array(170,0,1077,904),7813=>array(122,0,824,725),7814=>array(170,0,1077,879),7815=>array(122,0,824,702),7816=>array(170,-164,1077,729),7817=>array(122,-164,824,524),7818=>array(20,0,792,879),7819=>array(17,0,583,702),7820=>array(20,0,792,904),7821=>array(17,0,583,702),7822=>array(170,0,818,879),7823=>array(-2,-218,580,702),7824=>array(30,0,739,929),7825=>array(31,0,557,749),7826=>array(30,-164,739,729),7827=>array(31,-164,557,524),7828=>array(30,-134,739,729),7829=>array(31,-134,557,524),7830=>array(60,-134,564,729),7831=>array(87,-23,435,813),7832=>array(122,0,824,772),7833=>array(-2,-218,580,771),7834=>array(63,-23,678,754),7835=>array(89,0,413,879),7840=>array(16,-164,652,729),7841=>array(63,-187,566,539),7842=>array(16,0,652,948),7843=>array(63,-23,566,798),7844=>array(16,0,834,1000),7845=>array(63,-23,745,890),7846=>array(16,0,652,1000),7847=>array(63,-23,566,870),7848=>array(16,0,794,1000),7849=>array(63,-23,669,900),7850=>array(16,0,711,1013),7851=>array(63,-23,621,900),7852=>array(16,-164,652,903),7853=>array(63,-187,566,749),7854=>array(16,0,712,1021),7855=>array(63,-23,624,892),7856=>array(16,0,678,1014),7857=>array(63,-23,586,892),7858=>array(16,0,658,1072),7859=>array(63,-23,586,920),7860=>array(16,0,706,1014),7861=>array(63,-23,615,883),7862=>array(16,-164,677,889),7863=>array(63,-187,581,731),7864=>array(80,-164,741,729),7865=>array(77,-187,573,539),7866=>array(80,0,741,988),7867=>array(77,-23,573,798),7868=>array(80,0,741,903),7869=>array(77,-23,589,705),7870=>array(80,0,825,1000),7871=>array(77,-23,745,890),7872=>array(80,0,741,1000),7873=>array(77,-23,573,870),7874=>array(80,0,810,956),7875=>array(77,-23,682,900),7876=>array(80,0,741,1021),7877=>array(77,-23,619,900),7878=>array(80,-164,741,904),7879=>array(77,-187,573,731),7880=>array(100,0,429,988),7881=>array(66,0,355,783),7882=>array(67,-164,349,729),7883=>array(23,-164,305,729),7884=>array(100,-187,824,741),7885=>array(80,-187,576,539),7886=>array(100,-23,824,989),7887=>array(80,-23,576,788),7888=>array(100,-23,874,1000),7889=>array(80,-23,745,890),7890=>array(100,-23,824,1000),7891=>array(80,-23,576,870),7892=>array(100,-23,857,956),7893=>array(80,-23,672,900),7894=>array(100,-23,824,1024),7895=>array(80,-23,601,900),7896=>array(100,-187,824,904),7897=>array(80,-187,576,749),7898=>array(101,-23,938,920),7899=>array(76,-23,677,740),7900=>array(101,-23,938,920),7901=>array(76,-23,677,740),7902=>array(101,-23,938,988),7903=>array(76,-23,677,784),7904=>array(101,-23,938,886),7905=>array(76,-23,677,707),7906=>array(101,-187,938,796),7907=>array(76,-187,677,631),7908=>array(120,-187,796,729),7909=>array(83,-187,589,524),7910=>array(120,-23,796,975),7911=>array(83,-23,589,763),7912=>array(124,-23,940,920),7913=>array(87,-23,744,740),7914=>array(124,-23,940,920),7915=>array(87,-23,744,740),7916=>array(124,-23,940,953),7917=>array(87,-23,744,778),7918=>array(124,-23,940,883),7919=>array(87,-23,744,692),7920=>array(124,-187,940,856),7921=>array(87,-187,744,651),7922=>array(170,0,818,927),7923=>array(-2,-218,580,731),7924=>array(170,-164,818,729),7925=>array(-2,-218,580,524),7926=>array(170,0,818,961),7927=>array(-2,-218,580,761),7928=>array(170,0,818,887),7929=>array(-2,-218,580,690),7936=>array(34,-13,584,756),7937=>array(34,-13,584,757),7938=>array(34,-13,584,756),7939=>array(34,-13,584,757),7940=>array(34,-13,607,756),7941=>array(34,-13,592,757),7942=>array(34,-13,591,873),7943=>array(34,-13,587,871),7944=>array(0,0,670,735),7945=>array(0,0,670,742),7946=>array(78,0,748,741),7947=>array(62,0,732,742),7948=>array(28,0,698,741),7949=>array(26,0,696,742),7950=>array(0,0,670,862),7951=>array(0,0,670,856),7952=>array(16,-10,522,756),7953=>array(16,-10,522,757),7954=>array(16,-10,522,756),7955=>array(16,-10,522,757),7956=>array(16,-10,540,756),7957=>array(16,-10,527,757),7960=>array(109,0,806,741),7961=>array(101,0,798,742),7962=>array(104,0,1009,741),7963=>array(116,0,1004,742),7964=>array(108,0,1005,741),7965=>array(118,0,994,742),7968=>array(33,-182,551,756),7969=>array(33,-182,551,757),7970=>array(33,-182,556,756),7971=>array(33,-182,553,757),7972=>array(33,-182,600,756),7973=>array(33,-182,626,757),7974=>array(33,-182,618,873),7975=>array(33,-182,617,871),7976=>array(100,0,839,741),7977=>array(113,0,852,742),7978=>array(110,0,1037,741),7979=>array(116,0,1026,742),7980=>array(111,0,1037,741),7981=>array(118,0,1024,742),7982=>array(101,0,906,853),7983=>array(119,1,943,854),7984=>array(28,-8,264,756),7985=>array(28,-8,277,757),7986=>array(107,-8,435,756),7987=>array(124,-8,431,757),7988=>array(89,-8,460,756),7989=>array(71,-8,454,757),7990=>array(94,-9,479,874),7991=>array(89,-8,475,870),7992=>array(107,0,390,741),7993=>array(112,0,385,742),7994=>array(105,0,592,741),7995=>array(118,0,594,742),7996=>array(106,0,594,741),7997=>array(114,0,582,742),7998=>array(109,0,472,855),7999=>array(124,0,485,856),8000=>array(32,-12,542,756),8001=>array(32,-12,542,757),8002=>array(32,-12,542,756),8003=>array(32,-12,542,757),8004=>array(32,-12,585,756),8005=>array(32,-12,579,757),8008=>array(92,-12,808,741),8009=>array(101,-12,817,742),8010=>array(108,-12,1047,741),8011=>array(122,-12,1045,742),8012=>array(111,-12,947,741),8013=>array(122,-12,947,742),8016=>array(37,-14,569,756),8017=>array(37,-14,569,757),8018=>array(37,-14,569,756),8019=>array(37,-14,569,757),8020=>array(37,-14,569,756),8021=>array(37,-14,569,757),8022=>array(37,-14,572,873),8023=>array(37,-14,569,871),8025=>array(121,0,963,742),8027=>array(121,0,1129,742),8029=>array(126,0,1161,742),8031=>array(113,0,1061,854),8032=>array(26,-9,717,756),8033=>array(26,-9,717,757),8034=>array(26,-9,717,756),8035=>array(26,-9,717,757),8036=>array(26,-9,717,756),8037=>array(26,-9,717,757),8038=>array(26,-9,717,873),8039=>array(26,-9,717,868),8040=>array(26,0,793,741),8041=>array(45,0,812,742),8042=>array(109,0,1005,741),8043=>array(121,0,992,742),8044=>array(113,0,936,741),8045=>array(122,0,931,742),8046=>array(103,0,884,855),8047=>array(120,0,907,857),8048=>array(34,-13,584,747),8049=>array(34,-13,584,747),8050=>array(16,-10,522,747),8051=>array(16,-10,522,747),8052=>array(33,-182,551,747),8053=>array(33,-182,551,747),8054=>array(28,-8,288,747),8055=>array(28,-8,319,747),8056=>array(32,-12,542,747),8057=>array(32,-12,542,747),8058=>array(37,-14,569,747),8059=>array(37,-14,569,747),8060=>array(26,-9,717,747),8061=>array(26,-9,717,747),8064=>array(34,-200,584,756),8065=>array(34,-200,584,757),8066=>array(34,-200,584,756),8067=>array(34,-200,584,757),8068=>array(34,-200,607,756),8069=>array(34,-200,592,757),8070=>array(34,-200,591,873),8071=>array(34,-200,587,871),8072=>array(0,0,844,735),8073=>array(0,0,846,742),8074=>array(78,0,933,741),8075=>array(62,0,913,742),8076=>array(28,0,871,741),8077=>array(26,0,880,742),8078=>array(0,0,850,862),8079=>array(0,0,849,856),8080=>array(-2,-200,551,756),8081=>array(4,-200,551,757),8082=>array(-1,-200,556,756),8083=>array(-2,-200,553,757),8084=>array(2,-200,600,756),8085=>array(0,-200,626,757),8086=>array(0,-200,618,873),8087=>array(0,-200,617,871),8088=>array(102,0,875,741),8089=>array(113,0,879,742),8090=>array(110,0,1077,741),8091=>array(116,0,1069,742),8092=>array(111,0,1080,741),8093=>array(118,0,1065,742),8094=>array(101,0,938,853),8095=>array(119,0,971,854),8096=>array(26,-200,717,756),8097=>array(26,-200,717,757),8098=>array(26,-200,717,756),8099=>array(26,-200,717,757),8100=>array(26,-200,717,756),8101=>array(26,-200,717,757),8102=>array(26,-200,717,873),8103=>array(26,-200,717,868),8104=>array(26,0,877,741),8105=>array(45,0,892,742),8106=>array(109,0,1098,741),8107=>array(121,0,1080,742),8108=>array(113,0,1019,741),8109=>array(122,0,1015,742),8110=>array(103,0,968,855),8111=>array(120,0,987,857),8112=>array(34,-13,584,734),8113=>array(34,-13,584,668),8114=>array(34,-200,584,747),8115=>array(34,-200,584,530),8116=>array(34,-200,584,740),8118=>array(34,-13,584,707),8119=>array(34,-200,584,707),8120=>array(0,0,670,899),8121=>array(0,0,670,870),8122=>array(61,0,731,741),8123=>array(49,0,719,741),8124=>array(0,0,846,716),8125=>array(114,583,229,740),8126=>array(18,0,173,177),8127=>array(114,583,229,740),8128=>array(-32,618,309,726),8129=>array(153,596,502,881),8130=>array(1,-200,551,747),8131=>array(2,-200,551,531),8132=>array(1,-200,551,740),8134=>array(33,-182,593,752),8135=>array(-2,-200,593,752),8136=>array(109,0,882,741),8137=>array(75,0,896,741),8138=>array(103,0,951,741),8139=>array(74,0,917,741),8140=>array(0,0,771,716),8141=>array(114,583,431,740),8142=>array(114,583,455,740),8143=>array(172,574,513,875),8144=>array(73,-8,407,734),8145=>array(60,-8,367,668),8146=>array(69,-8,443,760),8147=>array(74,-8,470,747),8150=>array(74,-8,415,707),8151=>array(58,-8,455,886),8152=>array(44,0,447,899),8153=>array(42,0,419,870),8154=>array(110,0,476,741),8155=>array(80,0,441,741),8157=>array(163,584,466,741),8158=>array(163,584,491,741),8159=>array(74,572,415,871),8160=>array(37,-14,569,734),8161=>array(37,-14,569,668),8162=>array(37,-14,569,761),8163=>array(37,-14,569,761),8164=>array(-49,-200,564,756),8165=>array(-49,-200,564,757),8166=>array(37,-14,569,707),8167=>array(37,-14,569,868),8168=>array(153,0,809,899),8169=>array(153,0,809,870),8170=>array(95,0,941,741),8171=>array(85,0,976,741),8172=>array(101,0,782,742),8173=>array(119,601,493,760),8174=>array(244,601,618,760),8175=>array(179,592,357,740),8178=>array(26,-200,717,747),8179=>array(26,-200,717,526),8180=>array(26,-200,717,740),8182=>array(26,-9,717,707),8183=>array(26,-200,717,707),8184=>array(106,-12,905,741),8185=>array(80,-12,844,741),8186=>array(81,0,848,741),8187=>array(43,0,810,741),8188=>array(0,0,852,722),8189=>array(218,592,458,740),8190=>array(163,584,276,741),8208=>array(97,240,351,312),8209=>array(97,240,351,312),8210=>array(46,240,628,312),8211=>array(46,240,628,312),8212=>array(42,240,1068,312),8213=>array(42,240,1068,312),8214=>array(70,-14,250,676),8215=>array(-60,-283,553,-67),8216=>array(168,499,311,730),8217=>array(168,499,311,730),8218=>array(37,-128,180,103),8219=>array(192,497,312,729),8220=>array(150,499,454,730),8221=>array(155,499,457,730),8222=>array(20,-128,322,103),8223=>array(177,497,457,729),8224=>array(127,-177,620,709),8225=>array(51,-177,620,709),8226=>array(120,220,376,470),8227=>array(117,220,373,470),8228=>array(87,0,213,103),8229=>array(115,0,573,103),8230=>array(115,0,906,103),8231=>array(166,192,293,295),8240=>array(93,-20,1024,738),8241=>array(92,-22,1384,738),8242=>array(145,438,370,716),8243=>array(145,438,582,716),8244=>array(145,438,798,716),8245=>array(192,438,323,716),8246=>array(192,438,538,716),8247=>array(192,438,734,716),8248=>array(-27,-171,330,121),8249=>array(94,106,290,438),8250=>array(74,106,272,438),8251=>array(117,68,624,492),8252=>array(124,0,641,729),8253=>array(184,0,631,741),8254=>array(137,752,728,806),8255=>array(39,-199,595,-28),8256=>array(181,574,736,745),8257=>array(-8,-201,445,276),8258=>array(45,-1,856,729),8259=>array(84,161,419,321),8260=>array(-178,-20,506,729),8261=>array(98,-212,431,729),8262=>array(-15,-212,319,729),8263=>array(184,0,1156,741),8264=>array(184,0,919,741),8265=>array(124,0,908,741),8266=>array(115,-12,608,412),8267=>array(67,-177,633,729),8268=>array(69,74,601,544),8269=>array(37,74,569,544),8270=>array(77,-1,379,290),8271=>array(53,-147,279,524),8272=>array(86,21,730,718),8273=>array(76,-1,474,741),8274=>array(60,0,744,750),8275=>array(63,293,582,399),8276=>array(15,-204,571,-33),8277=>array(107,-14,826,701),8278=>array(139,-33,585,544),8279=>array(145,438,983,716),8280=>array(139,-34,764,655),8281=>array(47,-33,803,673),8282=>array(50,-32,321,750),8283=>array(105,-199,730,764),8284=>array(58,40,645,525),8285=>array(60,0,337,800),8286=>array(55,2,328,796),8304=>array(141,366,460,805),8305=>array(122,380,279,854),8308=>array(119,380,447,805),8309=>array(121,366,473,805),8310=>array(126,366,454,805),8311=>array(161,380,497,805),8312=>array(126,366,463,805),8313=>array(136,366,465,805),8314=>array(131,400,456,716),8315=>array(123,535,461,581),8316=>array(112,464,471,622),8317=>array(226,288,443,901),8318=>array(125,288,342,901),8319=>array(109,380,437,731),8320=>array(18,-214,337,225),8321=>array(61,-200,249,225),8322=>array(-10,-200,358,225),8323=>array(7,-214,339,225),8324=>array(-7,-200,321,225),8325=>array(-3,-214,349,225),8326=>array(3,-214,331,225),8327=>array(40,-200,376,225),8328=>array(0,-214,337,225),8329=>array(9,-214,338,225),8330=>array(18,-126,343,190),8331=>array(13,9,351,55),8332=>array(3,-47,362,111),8333=>array(110,-300,327,313),8334=>array(-8,-300,209,313),8336=>array(-9,-213,319,153),8337=>array(2,-213,325,153),8338=>array(12,-213,335,153),8339=>array(-29,-200,339,141),8340=>array(29,-213,353,153),8352=>array(131,0,683,731),8353=>array(100,-87,675,780),8354=>array(94,-23,668,741),8355=>array(102,0,697,729),8356=>array(46,-23,626,729),8357=>array(70,-89,851,626),8358=>array(116,0,763,729),8359=>array(15,-23,1224,729),8360=>array(80,-23,1242,729),8361=>array(102,0,976,729),8362=>array(20,0,883,600),8363=>array(54,1,692,799),8364=>array(89,-23,756,709),8365=>array(79,0,810,729),8366=>array(133,0,748,729),8367=>array(0,-200,1264,716),8368=>array(34,-200,633,727),8369=>array(91,0,795,729),8370=>array(152,-93,760,800),8371=>array(17,0,726,729),8372=>array(126,-23,680,741),8373=>array(54,-126,657,770),8376=>array(134,0,639,729),8377=>array(96,-7,625,729),8400=>array(-401,558,109,748),8401=>array(-401,558,101,748),8402=>array(-205,-14,-3,676),8403=>array(-228,-1,-53,535),8404=>array(-506,503,132,800),8405=>array(-496,503,122,800),8406=>array(-449,546,148,889),8407=>array(-449,546,151,889),8408=>array(-342,109,-41,402),8409=>array(-342,109,18,440),8410=>array(-342,73,-36,401),8411=>array(-369,505,149,608),8412=>array(-451,582,191,686),8413=>array(-718,-198,270,790),8414=>array(-719,-193,270,796),8415=>array(-716,-190,270,796),8416=>array(-718,-198,270,790),8417=>array(-496,554,155,897),8420=>array(-1166,-146,-1,852),8421=>array(-542,-61,-25,749),8422=>array(-317,-14,10,676),8423=>array(-312,90,208,638),8424=>array(-525,-196,-7,-93),8425=>array(-358,503,147,687),8426=>array(-898,20,19,546),8427=>array(-616,-99,200,591),8428=>array(-508,-245,-5,-55),8429=>array(-497,-242,21,-52),8430=>array(-542,-286,57,-28),8431=>array(-657,-288,-58,-30),8432=>array(-160,566,38,754),8448=>array(80,-20,859,741),8449=>array(80,-20,860,741),8450=>array(61,-23,719,741),8451=>array(122,-23,1058,741),8452=>array(102,1,515,685),8453=>array(108,-20,825,741),8454=>array(108,-20,865,741),8455=>array(57,-23,671,741),8456=>array(66,-23,730,741),8457=>array(78,0,972,729),8459=>array(3,-22,1210,717),8460=>array(7,-111,581,718),8461=>array(26,0,736,729),8462=>array(60,0,564,729),8463=>array(86,0,590,729),8464=>array(8,-17,902,717),8465=>array(7,-87,690,699),8466=>array(5,-17,950,738),8467=>array(38,-11,536,726),8468=>array(53,-23,759,729),8469=>array(56,0,781,729),8470=>array(64,0,981,729),8471=>array(24,-67,890,799),8472=>array(3,-156,572,454),8473=>array(51,0,694,729),8474=>array(42,-59,770,741),8475=>array(-2,-17,887,717),8476=>array(11,-8,717,741),8477=>array(53,0,731,729),8478=>array(53,-55,855,729),8479=>array(39,-104,731,894),8480=>array(48,188,1091,739),8481=>array(99,0,1224,729),8482=>array(103,203,1072,728),8483=>array(9,-104,730,894),8484=>array(28,0,736,729),8486=>array(0,0,767,722),8487=>array(42,-20,809,702),8488=>array(-4,-140,566,705),8489=>array(115,1,308,529),8490=>array(80,0,814,729),8491=>array(16,0,652,970),8492=>array(34,-14,928,708),8493=>array(17,-13,600,705),8494=>array(77,-23,573,539),8495=>array(23,-11,498,491),8496=>array(25,-8,691,708),8497=>array(1,-22,950,728),8498=>array(13,0,657,729),8499=>array(9,-36,1195,719),8501=>array(26,0,662,600),8502=>array(58,0,583,600),8503=>array(30,0,465,600),8504=>array(119,0,641,600),8505=>array(67,0,362,729),8506=>array(61,-21,933,683),8507=>array(30,0,1407,729),8508=>array(44,0,664,524),8510=>array(52,0,691,729),8511=>array(70,0,785,729),8513=>array(80,-23,780,741),8514=>array(150,0,621,729),8515=>array(10,0,618,729),8516=>array(9,0,657,729),8522=>array(31,1,574,711),8523=>array(98,-46,659,686),8525=>array(35,-20,1163,729),8526=>array(13,0,478,525),8531=>array(103,-20,851,805),8532=>array(44,-20,891,735),8533=>array(113,-20,926,729),8534=>array(94,-20,937,735),8535=>array(88,-20,882,730),8536=>array(91,-20,895,735),8537=>array(141,-20,898,729),8538=>array(91,-20,898,735),8539=>array(107,-20,887,729),8540=>array(93,-20,884,730),8541=>array(103,-20,908,735),8542=>array(107,-20,883,733),8543=>array(139,-20,823,729),8544=>array(100,0,349,729),8545=>array(100,0,627,729),8546=>array(100,0,905,729),8547=>array(100,0,1063,729),8548=>array(170,0,785,729),8549=>array(170,0,1016,729),8550=>array(170,0,1294,729),8551=>array(170,0,1572,729),8552=>array(100,0,1070,729),8553=>array(20,0,792,729),8554=>array(20,0,1016,729),8555=>array(20,0,1294,729),8556=>array(80,0,551,729),8557=>array(100,-23,758,741),8558=>array(80,0,750,729),8559=>array(80,0,921,729),8560=>array(66,0,305,729),8561=>array(66,0,527,729),8562=>array(66,0,749,729),8563=>array(66,0,820,729),8564=>array(122,0,598,524),8565=>array(122,0,805,729),8566=>array(122,0,1027,729),8567=>array(122,0,1249,729),8568=>array(66,0,805,729),8569=>array(17,0,583,524),8570=>array(17,0,805,729),8571=>array(17,0,1027,729),8572=>array(68,0,307,729),8573=>array(76,-23,554,539),8574=>array(76,-23,653,729),8575=>array(60,0,841,539),8592=>array(32,-15,948,511),8593=>array(88,0,614,910),8594=>array(43,-15,959,511),8595=>array(2,-22,528,888),8596=>array(24,-15,1024,511),8597=>array(215,-22,833,910),8598=>array(108,24,796,787),8599=>array(33,24,940,786),8600=>array(6,24,694,787),8601=>array(33,25,940,787),8612=>array(44,-18,1012,514),8613=>array(19,-208,689,704),8614=>array(44,-18,1012,514),8615=>array(20,-208,690,704),8617=>array(81,-15,1021,511),8618=>array(117,-15,1012,511),8628=>array(135,13,709,600),8629=>array(35,-16,736,629),8636=>array(49,220,971,511),8637=>array(60,-20,970,271),8638=>array(73,-90,496,820),8639=>array(91,-70,441,840),8640=>array(49,220,959,511),8641=>array(48,-20,970,271),8642=>array(73,-90,423,820),8643=>array(27,-70,451,840),8644=>array(32,-185,999,681),8645=>array(88,-22,868,910),8646=>array(43,-185,998,682),8647=>array(32,-200,1028,856),8648=>array(88,0,1144,910),8649=>array(32,-200,1028,856),8650=>array(38,-111,1094,799),8651=>array(48,-120,991,613),8652=>array(40,-107,979,597),8656=>array(53,-15,990,513),8657=>array(79,-106,616,804),8658=>array(29,-15,966,513),8659=>array(33,-106,570,804),8660=>array(79,-20,1075,510),8661=>array(259,-253,895,743),8668=>array(8,-8,1052,518),8669=>array(51,-8,1095,518),8704=>array(120,0,756,729),8705=>array(105,-139,725,861),8706=>array(82,-23,601,709),8707=>array(90,0,751,729),8708=>array(90,-100,751,800),8709=>array(40,-14,762,710),8710=>array(10,0,701,729),8711=>array(160,0,851,729),8712=>array(60,0,611,616),8713=>array(60,-62,611,687),8714=>array(48,1,565,469),8715=>array(34,-1,585,615),8716=>array(43,-60,585,689),8717=>array(20,-1,537,467),8718=>array(100,0,528,600),8719=>array(33,-100,841,815),8720=>array(31,-100,839,815),8721=>array(18,-100,854,824),8722=>array(81,197,601,269),8723=>array(49,-21,624,612),8724=>array(72,0,571,633),8725=>array(212,-20,876,709),8726=>array(70,-20,382,544),8727=>array(113,59,507,474),8728=>array(72,71,445,443),8729=>array(197,220,453,470),8730=>array(77,-36,779,916),8731=>array(77,-36,779,916),8732=>array(77,-36,779,916),8733=>array(58,124,686,404),8734=>array(48,124,719,404),8735=>array(72,0,597,525),8736=>array(26,0,738,712),8737=>array(26,-100,738,562),8738=>array(50,-24,559,579),8739=>array(70,-14,130,676),8740=>array(30,-14,258,676),8741=>array(70,-14,250,676),8742=>array(30,-14,310,676),8743=>array(20,0,568,448),8744=>array(60,0,608,448),8745=>array(25,0,763,509),8746=>array(69,-17,807,492),8747=>array(8,-246,577,767),8748=>array(8,-246,837,767),8749=>array(8,-246,1077,767),8756=>array(133,-23,668,428),8757=>array(132,48,667,499),8758=>array(152,-35,279,488),8759=>array(152,-35,649,488),8760=>array(71,197,591,458),8761=>array(51,-35,770,458),8762=>array(46,-7,646,468),8763=>array(46,55,529,519),8764=>array(66,206,549,376),8770=>array(65,36,585,372),8771=>array(81,109,601,445),8773=>array(34,36,589,536),8776=>array(64,112,549,486),8778=>array(51,0,579,569),8779=>array(46,52,529,561),8800=>array(74,2,609,480),8801=>array(81,89,601,451),8804=>array(21,-11,640,639),8805=>array(18,-11,596,639),8960=>array(39,-24,781,719),8976=>array(58,86,624,375),8994=>array(72,158,628,329),8995=>array(61,155,617,326),9001=>array(39,-268,428,676),9002=>array(4,-198,393,746),9251=>array(18,0,522,184),9674=>array(22,0,468,744),9675=>array(39,-14,761,708),9702=>array(115,220,371,470),9711=>array(74,-67,940,799),9824=>array(72,0,656,705),9825=>array(148,-14,782,704),9826=>array(107,-14,634,705),9827=>array(99,0,813,705),9828=>array(72,0,656,705),9829=>array(148,-14,782,704),9830=>array(107,-14,634,705),9831=>array(99,0,813,705),9833=>array(-21,0,372,694),9834=>array(-21,0,497,694),9835=>array(16,0,722,703),9836=>array(16,0,722,703),9837=>array(-32,-21,362,730),9838=>array(-28,-214,402,712),9839=>array(-39,-197,452,762),11568=>array(64,-8,343,264),11569=>array(124,-16,902,744),11570=>array(124,-16,902,744),11571=>array(72,0,803,728),11572=>array(72,0,803,728),11573=>array(72,0,803,728),11574=>array(187,0,639,738),11575=>array(48,0,661,728),11576=>array(202,0,816,728),11577=>array(72,0,803,728),11578=>array(72,0,803,728),11579=>array(122,-8,628,734),11580=>array(72,0,781,728),11581=>array(72,0,825,728),11582=>array(83,-10,600,738),11583=>array(72,0,812,728),11584=>array(124,-16,902,744),11585=>array(110,-16,919,744),11586=>array(83,-10,363,738),11587=>array(48,0,779,728),11588=>array(60,0,722,728),11589=>array(72,0,803,728),11590=>array(79,64,587,512),11591=>array(72,0,825,728),11592=>array(129,290,782,438),11593=>array(92,0,681,728),11594=>array(48,0,642,728),11595=>array(56,-16,987,744),11596=>array(104,0,886,728),11597=>array(72,0,607,728),11598=>array(72,0,803,728),11599=>array(90,0,325,728),11600=>array(104,0,886,728),11601=>array(4,-224,307,728),11602=>array(101,-16,764,728),11603=>array(78,-8,457,736),11604=>array(124,-16,902,744),11605=>array(123,-18,902,743),11606=>array(140,0,803,728),11607=>array(71,-10,351,738),11608=>array(67,-10,727,738),11609=>array(124,-16,902,744),11610=>array(123,-18,952,743),11611=>array(124,-16,827,744),11612=>array(122,0,456,728),11613=>array(72,0,803,728),11614=>array(124,-16,827,744),11615=>array(72,0,803,728),11616=>array(48,0,661,728),11617=>array(72,0,803,728),11618=>array(75,5,622,728),11619=>array(54,0,929,728),11620=>array(72,0,486,728),11621=>array(54,0,929,728),11631=>array(166,444,525,728),11798=>array(38,-20,586,618),11799=>array(59,107,371,458),11800=>array(71,-24,518,717),11802=>array(67,240,411,625),11803=>array(47,268,504,676),11806=>array(57,268,514,564),11807=>array(57,151,514,438),11816=>array(33,-213,517,729),11817=>array(-37,-213,447,729),11818=>array(31,-20,659,557),11819=>array(53,90,678,433),11820=>array(23,160,648,503),11821=>array(43,10,668,588),11822=>array(119,0,556,741),42888=>array(8,-74,295,76),42889=>array(86,0,302,524),42890=>array(62,111,330,355),42891=>array(141,303,308,770),42892=>array(175,462,308,770),42922=>array(91,0,905,729),64256=>array(88,0,630,732),64257=>array(88,0,546,732),64258=>array(88,0,550,732),64259=>array(88,0,735,732),64260=>array(88,0,730,732),64261=>array(88,-23,608,732),64275=>array(19,-10,980,755),64276=>array(19,-11,1022,724),64277=>array(19,-205,993,724),64278=>array(50,-211,1027,716),64279=>array(19,-210,1257,724),64285=>array(93,147,273,600),64286=>array(52,660,359,813),64287=>array(119,149,473,600),64288=>array(37,0,659,600),64289=>array(-54,0,832,600),64290=>array(29,0,800,600),64291=>array(-57,0,782,600),64292=>array(-63,0,727,600),64293=>array(29,0,803,749),64294=>array(-57,0,785,600),64295=>array(28,0,707,600),64296=>array(-85,0,847,600),64297=>array(-28,197,471,474),64298=>array(110,0,866,711),64299=>array(110,0,848,711),64300=>array(110,0,866,711),64301=>array(110,0,848,711),64302=>array(66,-131,702,600),64303=>array(66,-248,702,600),64304=>array(66,-96,702,600),64305=>array(58,0,583,600),64306=>array(30,0,465,600),64307=>array(149,0,671,600),64308=>array(63,0,651,600),64309=>array(61,0,328,600),64310=>array(72,0,424,600),64312=>array(104,0,656,600),64313=>array(75,286,343,600),64314=>array(149,-200,559,600),64315=>array(57,0,601,600),64316=>array(148,0,673,749),64318=>array(68,0,655,600),64320=>array(51,0,412,600),64321=>array(103,0,656,600),64323=>array(135,-200,611,600),64324=>array(63,0,616,600),64326=>array(59,0,652,600),64327=>array(19,-200,678,600),64328=>array(148,0,582,600),64329=>array(110,0,848,600),64330=>array(35,0,723,600),64331=>array(62,0,297,731),64332=>array(58,0,583,735),64333=>array(57,0,601,735),64334=>array(63,0,616,735),64335=>array(195,0,702,749),65532=>array(67,-2,761,686),65533=>array(14,-63,877,800),65535=>array(-15,-139,915,800)); +$cw=array(0=>800,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>664,67=>710,68=>702,69=>657,70=>601,71=>778,72=>721,73=>278,74=>507,75=>667,76=>556,77=>846,78=>730,79=>770,80=>646,81=>776,82=>709,83=>651,84=>611,85=>721,86=>645,87=>937,88=>669,89=>678,90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>554,98=>561,99=>515,100=>558,101=>547,102=>260,103=>552,104=>540,105=>222,106=>242,107=>502,108=>222,109=>816,110=>540,111=>556,112=>563,113=>556,114=>324,115=>500,116=>265,117=>538,118=>497,119=>723,120=>490,121=>479,122=>500,123=>334,124=>260,125=>334,126=>584,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>444,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>352,179=>352,180=>333,181=>556,182=>537,183=>278,184=>333,185=>250,186=>365,187=>444,188=>900,189=>927,190=>947,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>711,200=>657,201=>657,202=>657,203=>657,204=>278,205=>278,206=>278,207=>278,208=>722,209=>730,210=>770,211=>770,212=>770,213=>770,214=>770,215=>584,216=>778,217=>721,218=>721,219=>721,220=>721,221=>678,222=>646,223=>579,224=>554,225=>554,226=>554,227=>554,228=>554,229=>554,230=>897,231=>510,232=>547,233=>547,234=>547,235=>547,236=>222,237=>222,238=>262,239=>262,240=>556,241=>540,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>561,249=>538,250=>538,251=>538,252=>538,253=>479,254=>561,255=>479,256=>667,257=>554,258=>667,259=>554,260=>667,261=>556,262=>710,263=>515,264=>710,265=>515,266=>710,267=>515,268=>710,269=>515,270=>702,271=>692,272=>722,273=>556,274=>657,275=>547,276=>657,277=>547,278=>657,279=>547,280=>657,281=>547,282=>657,283=>547,284=>778,285=>552,286=>778,287=>552,288=>778,289=>552,290=>778,291=>552,292=>721,293=>540,294=>722,295=>556,296=>300,297=>262,298=>300,299=>262,300=>300,301=>262,302=>278,303=>262,304=>278,305=>222,306=>742,307=>387,308=>507,309=>262,310=>667,311=>502,312=>500,313=>556,314=>222,315=>556,316=>222,317=>556,318=>342,319=>556,320=>359,321=>556,322=>222,323=>730,324=>540,325=>730,326=>540,327=>730,328=>540,329=>692,330=>642,331=>538,332=>770,333=>556,334=>770,335=>556,336=>770,337=>556,338=>1000,339=>937,340=>709,341=>324,342=>709,343=>324,344=>709,345=>324,346=>651,347=>500,348=>651,349=>500,350=>667,351=>500,352=>651,353=>500,354=>611,355=>278,356=>611,357=>373,358=>611,359=>278,360=>721,361=>538,362=>721,363=>538,364=>721,365=>538,366=>721,367=>538,368=>721,369=>538,370=>722,371=>556,372=>937,373=>723,374=>678,375=>479,376=>678,377=>611,378=>500,379=>611,380=>500,381=>611,382=>500,383=>278,384=>556,385=>777,386=>667,387=>556,388=>667,389=>556,390=>710,391=>722,392=>530,393=>722,394=>869,395=>667,396=>556,397=>566,398=>667,399=>778,400=>667,401=>611,402=>278,403=>778,404=>667,405=>889,406=>278,407=>333,408=>741,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778,416=>778,417=>556,418=>1002,419=>737,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611,426=>333,427=>278,428=>611,429=>278,430=>611,431=>773,432=>623,433=>768,434=>722,435=>793,436=>608,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556,448=>260,449=>520,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444,458=>1158,459=>944,460=>778,461=>667,462=>554,463=>300,464=>262,465=>770,466=>556,467=>721,468=>538,469=>721,470=>538,471=>721,472=>538,473=>721,474=>538,475=>721,476=>538,477=>547,478=>667,479=>554,480=>667,481=>554,482=>1000,483=>897,484=>778,485=>556,486=>778,487=>552,488=>667,489=>502,490=>778,491=>551,492=>778,493=>551,494=>611,495=>560,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>552,503=>630,504=>730,505=>540,506=>667,507=>554,508=>1000,509=>897,510=>778,511=>561,512=>667,513=>554,514=>667,515=>554,516=>657,517=>547,518=>657,519=>547,520=>300,521=>262,522=>300,523=>262,524=>770,525=>556,526=>770,527=>556,528=>709,529=>324,530=>709,531=>324,532=>721,533=>538,534=>721,535=>538,536=>651,537=>500,538=>611,539=>265,540=>521,541=>393,542=>721,543=>540,548=>611,549=>500,550=>667,551=>554,552=>667,553=>556,554=>770,555=>556,556=>770,557=>556,558=>770,559=>556,560=>770,561=>556,562=>678,563=>479,567=>222,592=>554,593=>556,594=>589,595=>556,596=>515,597=>500,598=>581,599=>564,600=>556,601=>547,602=>773,603=>500,604=>500,605=>742,606=>500,607=>246,608=>556,609=>552,610=>546,611=>434,612=>556,613=>540,614=>556,615=>556,616=>245,617=>222,618=>278,619=>473,620=>427,621=>229,622=>611,623=>816,624=>803,625=>833,626=>566,627=>576,628=>560,629=>556,630=>778,631=>722,632=>728,633=>324,634=>333,635=>393,636=>333,637=>333,638=>384,639=>369,640=>546,641=>546,642=>550,643=>328,644=>298,645=>298,646=>444,647=>265,648=>278,649=>579,650=>626,651=>539,652=>497,653=>723,654=>479,655=>538,656=>510,657=>520,658=>560,659=>552,660=>533,661=>534,662=>533,663=>1000,664=>526,665=>501,666=>520,667=>575,668=>520,669=>444,670=>502,671=>430,672=>556,673=>532,674=>533,675=>934,676=>944,677=>944,678=>689,679=>506,680=>764,681=>766,682=>660,683=>577,684=>475,685=>486,686=>565,687=>621,688=>333,689=>333,690=>167,691=>236,692=>236,693=>276,694=>359,695=>500,696=>330,697=>278,698=>454,699=>278,700=>278,701=>278,702=>333,703=>333,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>333,717=>333,718=>333,719=>333,720=>333,721=>333,722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>510,736=>333,737=>186,738=>333,739=>333,740=>334,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>333,751=>333,752=>383,753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199,890=>332,894=>278,900=>291,901=>624,902=>659,903=>278,904=>870,905=>870,906=>315,908=>876,910=>903,911=>882,912=>333,913=>765,914=>643,915=>589,916=>760,917=>659,918=>682,919=>707,920=>769,921=>256,922=>689,923=>765,924=>825,925=>687,926=>649,927=>766,928=>730,929=>649,931=>678,932=>655,933=>733,934=>753,935=>783,936=>773,937=>768,938=>285,939=>733,940=>593,941=>523,942=>595,943=>271,944=>549,945=>596,946=>534,947=>531,948=>566,949=>523,950=>470,951=>557,952=>547,953=>293,954=>516,955=>579,956=>571,957=>518,958=>499,959=>561,960=>636,961=>551,962=>564,963=>627,964=>505,965=>549,966=>715,967=>579,968=>662,969=>746,970=>335,971=>549,972=>535,973=>503,974=>725,977=>580,978=>742,979=>809,980=>620,981=>728,982=>740,983=>556,1008=>556,1009=>566,1012=>778,1013=>328,1024=>657,1025=>657,1026=>781,1027=>590,1028=>709,1029=>655,1030=>254,1031=>300,1032=>532,1033=>1002,1034=>1166,1035=>772,1036=>674,1037=>730,1038=>605,1039=>721,1040=>667,1041=>665,1042=>664,1043=>590,1044=>807,1045=>657,1046=>914,1047=>653,1048=>730,1049=>730,1050=>674,1051=>656,1052=>846,1053=>721,1054=>770,1055=>720,1056=>649,1057=>709,1058=>606,1059=>605,1060=>875,1061=>660,1062=>754,1063=>612,1064=>830,1065=>872,1066=>839,1067=>885,1068=>668,1069=>708,1070=>1099,1071=>676,1072=>554,1073=>545,1074=>521,1075=>375,1076=>572,1077=>538,1078=>815,1079=>488,1080=>557,1081=>557,1082=>519,1083=>508,1084=>618,1085=>558,1086=>533,1087=>557,1088=>569,1089=>511,1090=>392,1091=>469,1092=>922,1093=>475,1094=>588,1095=>482,1096=>693,1097=>722,1098=>644,1099=>731,1100=>521,1101=>509,1102=>790,1103=>550,1104=>538,1105=>538,1106=>566,1107=>375,1108=>506,1109=>488,1110=>224,1111=>272,1112=>226,1113=>793,1114=>849,1115=>576,1116=>519,1117=>557,1118=>469,1119=>557,1120=>942,1121=>693,1136=>749,1137=>666,1138=>785,1139=>528,1148=>942,1149=>736,1150=>947,1151=>686,1154=>456,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>751,1163=>588,1164=>685,1165=>554,1166=>656,1167=>606,1168=>598,1169=>396,1170=>611,1171=>409,1172=>592,1173=>448,1174=>921,1175=>826,1176=>657,1177=>493,1178=>680,1179=>529,1180=>678,1181=>524,1182=>695,1183=>528,1184=>846,1185=>650,1186=>741,1187=>578,1188=>992,1189=>700,1190=>1047,1191=>778,1192=>810,1193=>645,1194=>709,1195=>509,1196=>611,1197=>393,1198=>664,1199=>580,1200=>668,1201=>617,1202=>664,1203=>489,1204=>905,1205=>662,1206=>631,1207=>498,1208=>597,1209=>472,1210=>597,1211=>471,1212=>927,1213=>716,1214=>927,1215=>699,1216=>254,1217=>915,1218=>815,1219=>665,1220=>510,1221=>678,1222=>533,1223=>721,1224=>558,1225=>751,1226=>589,1227=>599,1228=>472,1229=>876,1230=>649,1231=>254,1232=>667,1233=>552,1234=>667,1235=>552,1236=>1000,1237=>897,1238=>657,1239=>538,1240=>722,1241=>511,1242=>722,1243=>511,1244=>914,1245=>815,1246=>653,1247=>488,1248=>611,1249=>546,1250=>730,1251=>557,1252=>730,1253=>557,1254=>774,1255=>529,1256=>785,1257=>528,1258=>785,1259=>528,1260=>708,1261=>509,1262=>605,1263=>469,1264=>605,1265=>469,1266=>605,1267=>469,1268=>612,1269=>482,1270=>601,1271=>430,1272=>885,1273=>731,1296=>667,1297=>500,1298=>673,1299=>557,1306=>776,1307=>556,1308=>937,1309=>723,1310=>667,1311=>510,1329=>722,1330=>705,1331=>774,1332=>754,1333=>722,1334=>751,1335=>485,1336=>722,1337=>782,1338=>655,1339=>699,1340=>417,1341=>853,1342=>791,1343=>711,1344=>588,1345=>663,1346=>665,1347=>665,1348=>756,1349=>623,1350=>773,1351=>603,1352=>722,1353=>648,1354=>722,1355=>751,1356=>750,1357=>722,1358=>748,1359=>667,1360=>699,1361=>623,1362=>417,1363=>785,1364=>638,1365=>778,1366=>716,1369=>333,1370=>222,1371=>133,1372=>325,1373=>333,1374=>333,1375=>333,1377=>833,1378=>556,1379=>572,1380=>581,1381=>546,1382=>588,1383=>448,1384=>556,1385=>568,1386=>582,1387=>552,1388=>301,1389=>799,1390=>556,1391=>554,1392=>533,1393=>548,1394=>552,1395=>552,1396=>544,1397=>222,1398=>544,1399=>456,1400=>556,1401=>390,1402=>833,1403=>509,1404=>547,1405=>533,1406=>610,1407=>887,1408=>556,1409=>545,1410=>301,1411=>853,1412=>632,1413=>579,1414=>690,1415=>545,1417=>278,1418=>367,1423=>735,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>488,1471=>0,1472=>212,1473=>0,1474=>0,1475=>278,1476=>0,1488=>640,1489=>591,1490=>466,1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,1511=>606,1512=>547,1513=>776,1514=>687,1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,2433=>0,2434=>300,2435=>264,2437=>594,2438=>790,2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,2448=>627,2451=>540,2452=>613,2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,2460=>591,2461=>563,2462=>771,2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,2470=>418,2471=>433,2472=>445,2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,2482=>498,2486=>498,2487=>425,2488=>495,2489=>440,2492=>0,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,2498=>0,2499=>0,2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,2519=>219,2524=>523,2525=>408,2527=>428,2528=>594,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,2555=>344,4256=>587,4257=>620,4258=>642,4259=>815,4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790,4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603,4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436,4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843,4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697,4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449,4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,4345=>528,4347=>515,4348=>449,5024=>678,5025=>756,5026=>604,5027=>770,5028=>969,5029=>207,5030=>633,5031=>800,5032=>474,5033=>689,5034=>672,5035=>446,5036=>637,5037=>776,5038=>511,5039=>723,5040=>528,5041=>591,5042=>839,5043=>963,5044=>615,5045=>563,5046=>705,5047=>800,5048=>558,5049=>880,5050=>966,5051=>675,5052=>527,5053=>733,5054=>779,5055=>547,5056=>756,5057=>834,5058=>604,5059=>632,5060=>605,5061=>1051,5062=>657,5063=>842,5064=>748,5065=>1192,5066=>842,5067=>632,5068=>668,5069=>928,5070=>626,5071=>655,5072=>502,5073=>696,5074=>642,5075=>518,5076=>952,5077=>622,5078=>710,5079=>521,5080=>556,5081=>656,5082=>622,5083=>881,5084=>760,5085=>564,5086=>567,5087=>712,5088=>717,5089=>838,5090=>617,5091=>689,5092=>767,5093=>728,5094=>690,5095=>551,5096=>859,5097=>957,5098=>900,5099=>779,5100=>805,5101=>621,5102=>604,5103=>842,5104=>653,5105=>737,5106=>601,5107=>901,5108=>655,7680=>667,7681=>554,7682=>664,7683=>561,7684=>664,7685=>561,7686=>664,7687=>561,7688=>711,7689=>510,7690=>702,7691=>558,7692=>702,7693=>558,7694=>702,7695=>558,7696=>722,7697=>556,7698=>702,7699=>558,7700=>657,7701=>547,7702=>657,7703=>547,7704=>657,7705=>547,7706=>657,7707=>547,7708=>667,7709=>556,7710=>601,7711=>260,7712=>778,7713=>552,7714=>721,7715=>540,7716=>721,7717=>540,7718=>721,7719=>540,7720=>722,7721=>556,7722=>721,7723=>540,7724=>278,7725=>222,7726=>278,7727=>262,7728=>667,7729=>502,7730=>667,7731=>502,7732=>667,7733=>502,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>846,7743=>816,7744=>846,7745=>816,7746=>846,7747=>816,7748=>730,7749=>540,7750=>730,7751=>540,7752=>730,7753=>540,7754=>730,7755=>540,7756=>770,7757=>556,7758=>770,7759=>556,7760=>770,7761=>556,7762=>770,7763=>556,7764=>646,7765=>563,7766=>646,7767=>563,7768=>709,7769=>324,7770=>709,7771=>324,7772=>709,7773=>324,7774=>709,7775=>324,7776=>651,7777=>500,7778=>651,7779=>500,7780=>651,7781=>500,7782=>651,7783=>500,7784=>651,7785=>500,7786=>611,7787=>265,7788=>611,7789=>265,7790=>611,7791=>265,7792=>611,7793=>265,7794=>721,7795=>538,7796=>721,7797=>538,7798=>721,7799=>538,7800=>721,7801=>538,7802=>721,7803=>538,7804=>645,7805=>497,7806=>645,7807=>497,7808=>937,7809=>723,7810=>937,7811=>723,7812=>937,7813=>723,7814=>937,7815=>723,7816=>937,7817=>723,7818=>669,7819=>490,7820=>669,7821=>490,7822=>678,7823=>479,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>540,7831=>265,7832=>723,7833=>479,7834=>554,7835=>278,7840=>667,7841=>554,7842=>667,7843=>554,7844=>667,7845=>554,7846=>667,7847=>554,7848=>667,7849=>554,7850=>667,7851=>554,7852=>667,7853=>554,7854=>667,7855=>554,7856=>667,7857=>554,7858=>667,7859=>554,7860=>667,7861=>554,7862=>667,7863=>554,7864=>657,7865=>547,7866=>657,7867=>547,7868=>657,7869=>547,7870=>657,7871=>547,7872=>657,7873=>547,7874=>657,7875=>547,7876=>657,7877=>547,7878=>657,7879=>547,7880=>278,7881=>222,7882=>278,7883=>222,7884=>770,7885=>556,7886=>770,7887=>556,7888=>770,7889=>556,7890=>770,7891=>556,7892=>770,7893=>556,7894=>770,7895=>556,7896=>770,7897=>556,7898=>778,7899=>556,7900=>778,7901=>556,7902=>778,7903=>556,7904=>778,7905=>556,7906=>778,7907=>556,7908=>721,7909=>538,7910=>721,7911=>538,7912=>773,7913=>623,7914=>773,7915=>623,7916=>773,7917=>623,7918=>773,7919=>623,7920=>773,7921=>623,7922=>678,7923=>479,7924=>678,7925=>479,7926=>678,7927=>479,7928=>678,7929=>479,7936=>596,7937=>596,7938=>596,7939=>596,7940=>596,7941=>596,7942=>596,7943=>596,7944=>718,7945=>718,7946=>796,7947=>780,7948=>746,7949=>744,7950=>718,7951=>718,7952=>523,7953=>523,7954=>523,7955=>523,7956=>523,7957=>523,7960=>759,7961=>751,7962=>962,7963=>957,7964=>958,7965=>947,7968=>557,7969=>557,7970=>557,7971=>557,7972=>557,7973=>557,7974=>557,7975=>557,7976=>807,7977=>796,7978=>1013,7979=>1002,7980=>1009,7981=>1000,7982=>882,7983=>919,7984=>293,7985=>293,7986=>361,7987=>382,7988=>347,7989=>329,7990=>352,7991=>347,7992=>353,7993=>348,7994=>555,7995=>557,7996=>557,7997=>545,7998=>435,7999=>448,8000=>561,8001=>561,8002=>561,8003=>561,8004=>561,8005=>561,8008=>792,8009=>801,8010=>1031,8011=>1029,8012=>931,8013=>931,8016=>549,8017=>549,8018=>549,8019=>549,8020=>549,8021=>549,8022=>549,8023=>549,8025=>838,8027=>1004,8029=>1036,8031=>936,8032=>746,8033=>746,8034=>746,8035=>746,8036=>746,8037=>746,8038=>746,8039=>746,8040=>768,8041=>794,8042=>1003,8043=>1002,8044=>922,8045=>918,8046=>871,8047=>893,8048=>596,8049=>596,8050=>523,8051=>523,8052=>557,8053=>557,8054=>293,8055=>293,8056=>561,8057=>561,8058=>549,8059=>549,8060=>746,8061=>746,8064=>596,8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>859,8073=>861,8074=>948,8075=>928,8076=>886,8077=>895,8078=>865,8079=>864,8080=>557,8081=>557,8082=>557,8083=>557,8084=>557,8085=>557,8086=>557,8087=>557,8088=>890,8089=>894,8090=>1092,8091=>1084,8092=>1095,8093=>1080,8094=>953,8095=>986,8096=>746,8097=>746,8098=>746,8099=>746,8100=>746,8101=>746,8102=>746,8103=>746,8104=>892,8105=>907,8106=>1113,8107=>1095,8108=>1034,8109=>1030,8110=>983,8111=>1002,8112=>596,8113=>596,8114=>596,8115=>596,8116=>593,8118=>596,8119=>596,8120=>765,8121=>765,8122=>765,8123=>765,8124=>861,8125=>147,8126=>201,8127=>147,8128=>278,8129=>333,8130=>557,8131=>557,8132=>595,8134=>557,8135=>557,8136=>835,8137=>849,8138=>895,8139=>861,8140=>786,8141=>602,8142=>601,8143=>333,8144=>335,8145=>322,8146=>357,8147=>336,8150=>340,8151=>320,8152=>300,8153=>298,8154=>439,8155=>408,8157=>434,8158=>433,8159=>333,8160=>549,8161=>549,8162=>549,8163=>549,8164=>551,8165=>551,8166=>549,8167=>549,8168=>733,8169=>733,8170=>794,8171=>832,8172=>739,8173=>333,8174=>624,8175=>303,8178=>746,8179=>746,8180=>725,8182=>746,8183=>746,8184=>889,8185=>828,8186=>836,8187=>811,8188=>867,8189=>333,8190=>159,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>167,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>556,8211=>556,8212=>1000,8213=>1000,8214=>312,8215=>567,8216=>222,8217=>222,8218=>222,8219=>221,8220=>333,8221=>333,8222=>333,8223=>333,8224=>556,8225=>556,8226=>400,8227=>400,8228=>278,8229=>666,8230=>1000,8231=>278,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>167,8240=>1000,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469,8247=>680,8248=>376,8249=>250,8250=>250,8251=>622,8252=>556,8253=>556,8254=>556,8255=>658,8256=>658,8257=>438,8258=>840,8259=>450,8260=>167,8261=>334,8262=>334,8263=>1082,8264=>834,8265=>834,8266=>556,8267=>537,8268=>537,8269=>537,8270=>389,8271=>278,8272=>658,8273=>389,8274=>634,8275=>500,8276=>658,8277=>1000,8278=>515,8279=>855,8280=>722,8281=>725,8282=>224,8283=>722,8284=>604,8285=>224,8286=>224,8287=>0,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>351,8305=>140,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>350,8315=>350,8316=>350,8317=>350,8318=>350,8319=>360,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,8325=>353,8326=>351,8327=>351,8328=>351,8329=>351,8330=>350,8331=>350,8332=>350,8333=>350,8334=>350,8336=>363,8337=>366,8338=>360,8339=>325,8340=>350,8352=>623,8353=>615,8354=>601,8355=>611,8356=>556,8357=>833,8358=>682,8359=>1205,8360=>1222,8361=>879,8362=>869,8363=>538,8364=>655,8365=>667,8366=>611,8367=>1290,8368=>570,8369=>684,8370=>717,8371=>667,8372=>667,8373=>640,8376=>516,8377=>544,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>900,8449=>889,8450=>722,8451=>1019,8452=>556,8453=>836,8454=>862,8455=>667,8456=>722,8457=>867,8459=>1139,8460=>615,8461=>647,8462=>540,8463=>572,8464=>829,8465=>606,8466=>900,8467=>481,8468=>747,8469=>722,8470=>934,8471=>882,8472=>600,8473=>667,8474=>778,8475=>850,8476=>699,8477=>722,8478=>834,8479=>722,8480=>1043,8481=>1261,8482=>1000,8483=>667,8484=>611,8486=>768,8487=>744,8488=>512,8489=>286,8490=>722,8491=>722,8492=>908,8493=>623,8494=>547,8495=>469,8496=>662,8497=>895,8498=>556,8499=>1100,8501=>570,8502=>591,8503=>456,8504=>598,8505=>278,8506=>848,8507=>1338,8508=>619,8510=>582,8511=>722,8513=>778,8514=>556,8515=>556,8516=>678,8522=>516,8523=>640,8525=>1160,8526=>435,8531=>869,8532=>869,8533=>869,8534=>869,8535=>839,8536=>849,8537=>869,8538=>849,8539=>849,8540=>849,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,8548=>645,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>669,8554=>945,8555=>1223,8556=>556,8557=>710,8558=>702,8559=>846,8560=>222,8561=>444,8562=>666,8563=>722,8564=>497,8565=>722,8566=>944,8567=>1166,8568=>722,8569=>490,8570=>722,8571=>944,8572=>222,8573=>515,8574=>558,8575=>816,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8598=>800,8599=>800,8600=>800,8601=>800,8612=>987,8613=>680,8614=>987,8615=>680,8617=>987,8618=>987,8628=>700,8629=>658,8636=>987,8637=>987,8638=>440,8639=>440,8640=>987,8641=>987,8642=>440,8643=>440,8644=>987,8645=>863,8646=>990,8647=>987,8648=>1133,8649=>987,8650=>1133,8651=>987,8652=>987,8656=>987,8657=>577,8658=>987,8659=>577,8660=>1042,8661=>1042,8668=>1092,8669=>1092,8704=>697,8705=>676,8706=>556,8707=>667,8708=>667,8709=>802,8710=>712,8711=>712,8712=>584,8713=>584,8714=>585,8715=>584,8716=>584,8717=>585,8718=>500,8719=>783,8720=>783,8721=>771,8722=>584,8723=>584,8724=>584,8725=>947,8726=>392,8727=>584,8728=>497,8729=>584,8730=>662,8731=>662,8732=>662,8733=>713,8734=>713,8735=>639,8736=>768,8737=>768,8738=>600,8739=>200,8740=>288,8741=>320,8742=>340,8743=>608,8744=>608,8745=>768,8746=>768,8747=>465,8748=>725,8749=>965,8756=>800,8757=>800,8758=>250,8759=>620,8760=>584,8761=>778,8762=>584,8763=>500,8764=>500,8770=>584,8771=>584,8773=>584,8776=>500,8778=>584,8779=>500,8800=>584,8801=>584,8804=>584,8805=>584,8960=>823,8976=>584,8994=>658,8995=>658,9001=>390,9002=>390,9251=>500,9674=>489,9675=>800,9702=>400,9711=>882,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>556,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11568=>352,11569=>872,11570=>872,11571=>720,11572=>720,11573=>720,11574=>544,11575=>709,11576=>709,11577=>720,11578=>720,11579=>596,11580=>698,11581=>742,11582=>574,11583=>742,11584=>872,11585=>872,11586=>292,11587=>696,11588=>696,11589=>720,11590=>544,11591=>724,11592=>756,11593=>600,11594=>672,11595=>888,11596=>836,11597=>524,11598=>720,11599=>260,11600=>836,11601=>224,11602=>678,11603=>380,11604=>872,11605=>872,11606=>720,11607=>268,11608=>640,11609=>872,11610=>872,11611=>770,11612=>424,11613=>720,11614=>770,11615=>720,11616=>709,11617=>720,11618=>541,11619=>828,11620=>454,11621=>828,11631=>442,11798=>584,11799=>333,11800=>556,11802=>333,11803=>500,11806=>500,11807=>500,11816=>464,11817=>464,11818=>660,11819=>623,11820=>623,11821=>660,11822=>556,42888=>333,42889=>276,42890=>342,42891=>194,42892=>194,42922=>830,64256=>494,64257=>471,64258=>474,64259=>659,64260=>654,64261=>530,64275=>1027,64276=>1056,64277=>1058,64278=>1073,64279=>1301,64285=>200,64286=>305,64287=>400,64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,64296=>937,64297=>584,64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,64306=>466,64307=>598,64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,64318=>621,64320=>378,64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,64331=>212,64332=>591,64333=>550,64334=>568,64335=>640,65529=>0,65530=>0,65531=>0,65532=>800,65533=>788,65535=>800); +// --- EOF --- diff --git a/tcpdf/fonts/freesansi.z b/tcpdf/fonts/freesansi.z new file mode 100644 index 0000000..999b8eb Binary files /dev/null and b/tcpdf/fonts/freesansi.z differ diff --git a/tcpdf/fonts/freeserif.ctg.z b/tcpdf/fonts/freeserif.ctg.z new file mode 100644 index 0000000..1443ba5 Binary files /dev/null and b/tcpdf/fonts/freeserif.ctg.z differ diff --git a/tcpdf/fonts/freeserif.php b/tcpdf/fonts/freeserif.php new file mode 100644 index 0000000..7b42fcd --- /dev/null +++ b/tcpdf/fonts/freeserif.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSerif'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=3303588; +$enc=''; +$file='freeserif.z'; +$ctg='freeserif.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-879 -551 1767 936]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>662,'XHeight'=>450,'StemV'=>70,'StemH'=>30,'AvgWidth'=>618,'MaxWidth'=>1752,'MissingWidth'=>600); +$cbbox=array(0=>array(34,-71,566,750),33=>array(130,-9,237,676),34=>array(73,431,327,676),35=>array(5,0,496,662),36=>array(44,-87,457,727),37=>array(61,-13,772,676),38=>array(42,-13,750,676),39=>array(58,431,143,676),40=>array(48,-177,304,676),41=>array(29,-177,285,676),42=>array(69,265,432,676),43=>array(30,0,534,506),44=>array(56,-141,195,102),45=>array(39,194,285,257),46=>array(70,-11,181,100),47=>array(0,-14,296,676),48=>array(24,-14,476,676),49=>array(111,0,394,676),50=>array(30,0,475,676),51=>array(43,-14,432,676),52=>array(12,0,472,676),53=>array(32,-14,438,688),54=>array(34,-14,468,684),55=>array(20,-8,449,662),56=>array(56,-14,445,676),57=>array(30,-22,459,676),58=>array(81,-11,192,459),59=>array(80,-141,219,459),60=>array(28,-10,536,516),61=>array(30,120,534,386),62=>array(28,-10,536,516),63=>array(68,-8,414,676),64=>array(86,-14,779,676),65=>array(15,0,706,674),66=>array(15,0,591,662),67=>array(35,-14,640,676),68=>array(15,0,684,662),69=>array(15,0,600,662),70=>array(15,0,549,662),71=>array(35,-14,712,676),72=>array(15,0,698,662),73=>array(15,0,312,662),74=>array(10,-14,370,662),75=>array(15,0,704,662),76=>array(15,0,601,662),77=>array(15,0,866,662),78=>array(15,-11,710,662),79=>array(35,-14,689,676),80=>array(15,0,541,662),81=>array(35,-178,702,676),82=>array(15,0,657,662),83=>array(30,-14,479,676),84=>array(15,0,591,662),85=>array(15,-14,706,662),86=>array(10,-11,691,662),87=>array(10,-11,937,662),88=>array(10,0,704,662),89=>array(10,0,691,662),90=>array(10,0,598,662),91=>array(88,-156,299,662),92=>array(0,-14,296,676),93=>array(34,-156,245,662),94=>array(24,297,446,662),95=>array(0,-125,500,-75),96=>array(19,507,242,678),97=>array(25,-10,430,460),98=>array(10,-10,475,683),99=>array(25,-10,412,460),100=>array(25,-10,489,683),101=>array(25,-10,424,460),102=>array(10,0,373,683),103=>array(15,-218,457,460),104=>array(10,0,488,683),105=>array(16,0,253,683),106=>array(0,-218,264,683),107=>array(10,0,508,683),108=>array(10,0,248,683),109=>array(10,0,769,460),110=>array(10,0,479,460),111=>array(25,-10,466,460),112=>array(10,-217,475,460),113=>array(25,-217,489,461),114=>array(10,0,340,460),115=>array(35,-10,332,459),116=>array(17,-10,283,579),117=>array(10,-11,480,450),118=>array(5,-14,463,450),119=>array(5,-14,678,450),120=>array(10,0,472,450),121=>array(5,-218,466,450),122=>array(10,0,401,450),123=>array(100,-181,350,680),124=>array(67,-14,133,676),125=>array(130,-181,380,680),126=>array(19,186,481,320),160=>array(0,0,0,0),161=>array(96,-218,203,467),162=>array(53,-138,448,579),163=>array(12,-8,490,676),164=>array(-22,58,522,602),165=>array(-53,0,512,662),166=>array(67,-14,133,676),167=>array(70,-148,426,676),168=>array(18,523,316,622),169=>array(26,-23,766,717),170=>array(4,270,270,676),171=>array(42,33,458,416),172=>array(30,108,534,386),173=>array(39,194,285,257),174=>array(26,-23,766,717),175=>array(11,547,322,601),176=>array(57,390,343,676),177=>array(30,0,534,633),178=>array(12,390,315,850),179=>array(29,380,294,850),180=>array(10,507,234,678),181=>array(36,-218,512,450),182=>array(8,-154,480,662),183=>array(75,183,174,282),184=>array(52,-215,261,0),185=>array(67,390,260,850),186=>array(6,270,304,676),187=>array(42,33,458,416),188=>array(30,-14,704,730),189=>array(30,-14,745,730),190=>array(29,-14,704,729),191=>array(29,-218,375,466),192=>array(15,0,706,890),193=>array(15,0,706,890),194=>array(15,0,706,886),195=>array(15,0,706,838),196=>array(15,0,706,835),197=>array(15,0,706,895),198=>array(10,0,873,662),199=>array(35,-215,640,676),200=>array(15,0,600,890),201=>array(15,0,600,890),202=>array(15,0,600,886),203=>array(15,0,600,834),204=>array(15,0,312,890),205=>array(15,0,312,890),206=>array(11,0,322,886),207=>array(15,0,316,835),208=>array(15,0,684,662),209=>array(15,-11,710,838),210=>array(35,-14,689,890),211=>array(35,-14,689,890),212=>array(35,-14,689,886),213=>array(35,-14,689,838),214=>array(35,-14,689,835),215=>array(38,8,526,497),216=>array(35,-80,689,734),217=>array(15,-14,706,890),218=>array(15,-14,706,890),219=>array(15,-14,706,886),220=>array(15,-14,706,834),221=>array(10,0,691,890),222=>array(16,0,542,662),223=>array(10,-9,466,683),224=>array(25,-10,430,676),225=>array(25,-10,430,676),226=>array(25,-10,430,674),227=>array(25,-10,430,626),228=>array(25,-10,430,619),229=>array(25,-10,430,696),230=>array(25,-10,619,460),231=>array(25,-215,412,460),232=>array(25,-10,424,676),233=>array(25,-10,424,676),234=>array(25,-10,424,674),235=>array(25,-10,424,621),236=>array(0,0,253,676),237=>array(16,0,253,676),238=>array(-16,0,295,674),239=>array(7,0,271,622),240=>array(25,-10,467,686),241=>array(10,0,479,626),242=>array(25,-10,466,676),243=>array(25,-10,466,676),244=>array(25,-10,466,674),245=>array(25,-10,466,625),246=>array(25,-10,466,619),247=>array(30,-4,534,510),248=>array(25,-112,466,551),249=>array(10,-10,480,676),250=>array(10,-10,480,676),251=>array(10,-10,480,674),252=>array(10,-10,480,621),253=>array(5,-218,466,676),254=>array(10,-217,475,683),255=>array(5,-218,466,625),256=>array(15,0,706,790),257=>array(25,-10,430,584),258=>array(15,0,706,876),259=>array(25,-10,430,664),260=>array(10,-165,782,674),261=>array(25,-165,432,460),262=>array(35,-14,640,890),263=>array(25,-10,412,676),264=>array(35,-14,640,886),265=>array(25,-10,412,674),266=>array(35,-14,640,835),267=>array(25,-10,412,622),268=>array(35,-14,640,886),269=>array(25,-10,412,674),270=>array(15,0,684,887),271=>array(25,-10,615,683),272=>array(15,0,684,662),273=>array(25,-10,498,683),274=>array(15,0,600,790),275=>array(25,-10,424,584),276=>array(15,0,600,876),277=>array(25,-10,424,665),278=>array(15,0,600,835),279=>array(25,-10,424,622),280=>array(12,-165,613,662),281=>array(25,-165,424,460),282=>array(15,0,600,886),283=>array(25,-10,424,675),284=>array(35,-14,712,885),285=>array(15,-218,457,674),286=>array(35,-14,712,875),287=>array(15,-218,457,665),288=>array(35,-14,712,835),289=>array(15,-218,457,619),290=>array(35,-300,712,676),291=>array(15,-218,457,748),292=>array(15,0,698,900),293=>array(10,0,488,890),294=>array(13,0,696,662),295=>array(10,0,488,683),296=>array(1,0,331,830),297=>array(-28,0,302,614),298=>array(11,0,322,790),299=>array(-19,0,292,584),300=>array(15,0,312,876),301=>array(-4,0,277,663),302=>array(10,-165,389,662),303=>array(16,-165,278,683),304=>array(15,0,312,835),305=>array(16,0,253,460),306=>array(15,-14,684,662),307=>array(16,-220,445,683),308=>array(10,-14,382,900),309=>array(0,-218,348,687),310=>array(15,-300,704,662),311=>array(10,-300,508,683),312=>array(10,0,493,460),313=>array(15,0,601,890),314=>array(10,0,248,890),315=>array(15,-300,601,662),316=>array(10,-300,248,683),317=>array(15,0,601,675),318=>array(10,0,370,683),319=>array(15,0,601,662),320=>array(10,0,357,683),321=>array(10,0,596,662),322=>array(19,0,259,683),323=>array(15,-11,710,890),324=>array(10,0,479,676),325=>array(15,-300,710,662),326=>array(10,-300,479,460),327=>array(15,-11,710,884),328=>array(10,0,479,675),329=>array(20,0,528,704),330=>array(15,-14,666,672),331=>array(16,-218,424,460),332=>array(35,-14,689,790),333=>array(25,-10,466,584),334=>array(35,-14,689,876),335=>array(25,-10,466,664),336=>array(35,-14,689,888),337=>array(25,-10,466,678),338=>array(35,-6,890,668),339=>array(25,-10,685,460),340=>array(15,0,657,890),341=>array(10,0,340,676),342=>array(15,-300,657,662),343=>array(10,-300,340,460),344=>array(15,0,657,886),345=>array(10,0,340,674),346=>array(30,-14,479,890),347=>array(35,-10,332,676),348=>array(30,-14,479,886),349=>array(27,-10,338,675),350=>array(40,-215,489,676),351=>array(35,-215,332,459),352=>array(30,-14,479,887),353=>array(23,-10,334,676),354=>array(10,-215,586,662),355=>array(17,-215,283,579),356=>array(15,0,591,888),357=>array(17,-10,390,675),358=>array(10,0,586,662),359=>array(17,-10,283,579),360=>array(15,-14,706,830),361=>array(10,-10,480,621),362=>array(15,-14,706,790),363=>array(10,-10,480,584),364=>array(15,-14,706,876),365=>array(10,-10,480,662),366=>array(15,-14,706,895),367=>array(10,-10,480,696),368=>array(15,-14,706,890),369=>array(10,-10,480,678),370=>array(10,-165,701,662),371=>array(10,-165,501,450),372=>array(10,-11,937,887),373=>array(5,-14,678,676),374=>array(10,0,691,887),375=>array(5,-218,466,675),376=>array(10,0,691,835),377=>array(10,0,598,890),378=>array(10,0,401,676),379=>array(10,0,598,835),380=>array(10,0,401,619),381=>array(10,0,598,886),382=>array(10,0,401,674),383=>array(10,0,373,683),384=>array(10,-10,479,683),385=>array(5,0,702,662),386=>array(13,0,589,662),387=>array(10,-10,488,662),388=>array(5,0,606,683),389=>array(5,-10,490,683),390=>array(39,-14,644,676),391=>array(35,-14,813,822),392=>array(25,-10,554,680),393=>array(15,0,684,662),394=>array(10,0,795,662),395=>array(35,0,567,662),396=>array(25,-10,501,662),397=>array(25,-224,471,459),398=>array(10,0,595,662),399=>array(25,-14,676,676),400=>array(35,-15,491,702),401=>array(6,-204,619,662),402=>array(0,-218,460,683),403=>array(35,-14,819,822),404=>array(15,-15,635,662),405=>array(10,-9,710,683),406=>array(19,-10,326,683),407=>array(3,0,333,662),408=>array(15,0,776,676),409=>array(10,0,508,683),410=>array(3,1,283,684),411=>array(18,-10,448,672),412=>array(15,-10,936,662),413=>array(6,-218,783,662),414=>array(16,-200,485,460),415=>array(35,-14,689,676),416=>array(35,-14,709,796),417=>array(25,-10,532,552),418=>array(35,-14,1023,676),419=>array(25,-217,771,460),420=>array(10,0,657,662),421=>array(5,-217,470,683),422=>array(15,-113,669,662),423=>array(60,-14,509,676),424=>array(30,-10,327,459),425=>array(15,0,563,661),426=>array(22,-190,576,683),427=>array(17,-218,283,579),428=>array(10,0,612,662),429=>array(8,-10,370,683),430=>array(10,-204,586,662),431=>array(15,-14,777,796),432=>array(10,-11,539,552),433=>array(25,-13,718,663),434=>array(15,-15,689,662),435=>array(10,0,796,666),436=>array(5,-218,570,683),437=>array(15,0,603,662),438=>array(10,0,401,450),439=>array(14,-14,496,662),440=>array(35,-14,517,662),441=>array(25,-209,381,450),442=>array(20,-228,364,451),443=>array(30,0,475,676),444=>array(20,-14,569,662),445=>array(25,-183,404,477),446=>array(10,-10,364,579),447=>array(10,-217,477,460),448=>array(67,-14,123,726),449=>array(67,-14,283,676),450=>array(47,-13,553,709),451=>array(130,-9,237,676),452=>array(15,0,1320,886),453=>array(15,0,1123,674),454=>array(25,-10,901,683),455=>array(15,-14,981,662),456=>array(15,-218,805,683),457=>array(10,-218,462,683),458=>array(15,-14,1092,662),459=>array(15,-218,916,683),460=>array(10,-218,694,683),461=>array(15,0,706,886),462=>array(25,-10,430,674),463=>array(9,0,320,886),464=>array(-19,-2,292,672),465=>array(35,-14,689,886),466=>array(25,-10,466,674),467=>array(15,-14,706,882),468=>array(10,-10,480,674),469=>array(15,-14,706,900),470=>array(10,-10,480,717),471=>array(15,-14,706,900),472=>array(10,-10,480,800),473=>array(14,-12,705,900),474=>array(10,-10,480,800),475=>array(15,-14,706,891),476=>array(10,-10,480,800),477=>array(20,-10,419,460),478=>array(15,0,706,900),479=>array(25,-10,430,717),480=>array(15,0,706,900),481=>array(25,-10,430,717),482=>array(10,0,873,790),483=>array(25,-10,619,584),484=>array(32,-14,709,676),485=>array(1,-218,479,460),486=>array(35,-14,712,886),487=>array(15,-218,457,674),488=>array(15,0,704,886),489=>array(10,0,508,847),490=>array(34,-165,688,676),491=>array(25,-165,466,460),492=>array(34,-165,688,800),493=>array(25,-165,466,584),494=>array(14,-14,496,900),495=>array(6,-209,362,674),496=>array(0,-218,348,672),497=>array(15,0,1320,662),498=>array(15,0,1123,662),499=>array(25,-10,901,683),500=>array(35,-14,712,890),501=>array(15,-218,457,676),502=>array(19,-14,917,662),503=>array(16,0,518,676),504=>array(15,-11,710,890),505=>array(10,0,479,676),506=>array(15,0,706,900),507=>array(25,-10,430,900),508=>array(10,0,873,890),509=>array(25,-10,619,676),510=>array(35,-80,689,890),511=>array(25,-112,466,676),512=>array(15,0,706,888),513=>array(25,-10,430,696),514=>array(15,0,706,876),515=>array(25,-10,430,664),516=>array(15,0,600,888),517=>array(25,-10,424,693),518=>array(15,0,600,876),519=>array(25,-10,424,664),520=>array(0,0,312,888),521=>array(-57,0,253,686),522=>array(15,0,312,876),523=>array(-5,0,276,664),524=>array(35,-14,689,888),525=>array(25,-10,466,689),526=>array(35,-14,689,876),527=>array(25,-10,466,664),528=>array(15,0,657,888),529=>array(10,0,340,695),530=>array(15,0,657,876),531=>array(10,0,340,664),532=>array(15,-14,706,888),533=>array(10,-10,480,692),534=>array(15,-14,706,876),535=>array(10,-10,480,664),536=>array(30,-300,479,676),537=>array(35,-300,332,459),538=>array(15,-300,591,662),539=>array(17,-300,283,579),540=>array(35,-30,400,670),541=>array(30,-211,401,418),542=>array(15,0,698,886),543=>array(10,0,488,850),544=>array(23,-200,695,672),545=>array(27,-230,578,683),546=>array(35,-14,520,677),547=>array(25,-10,433,702),548=>array(9,-199,601,662),549=>array(27,-199,432,450),550=>array(15,0,706,820),551=>array(25,-10,430,622),552=>array(12,-215,597,662),553=>array(25,-215,424,460),554=>array(35,-14,689,900),555=>array(25,-10,466,717),556=>array(35,-14,689,900),557=>array(25,-10,466,717),558=>array(35,-14,689,834),559=>array(25,-10,466,622),560=>array(35,-14,689,900),561=>array(25,-10,466,717),562=>array(10,0,691,790),563=>array(5,-218,466,584),564=>array(19,-300,395,683),565=>array(16,-230,578,460),566=>array(12,-300,367,579),567=>array(0,-218,263,460),568=>array(27,-10,739,683),569=>array(25,-217,737,461),570=>array(15,-44,706,721),571=>array(35,-44,640,721),572=>array(25,-44,418,516),573=>array(15,0,602,662),574=>array(10,-44,586,721),575=>array(40,-199,337,459),576=>array(27,-199,417,450),577=>array(10,0,383,676),578=>array(20,0,393,463),579=>array(5,0,593,662),580=>array(15,-14,706,662),581=>array(10,0,691,673),582=>array(15,-44,600,726),583=>array(25,-68,424,519),584=>array(10,-14,370,662),585=>array(0,-218,348,683),586=>array(35,-200,757,674),587=>array(25,-217,559,461),588=>array(15,0,657,662),589=>array(10,0,340,460),590=>array(10,0,691,662),591=>array(14,-218,475,450),592=>array(2,-10,407,460),593=>array(25,-10,488,460),594=>array(10,-7,473,463),595=>array(69,-10,468,683),596=>array(22,-10,409,460),597=>array(25,-102,400,460),598=>array(25,-218,551,683),599=>array(25,-10,569,683),600=>array(20,-10,419,460),601=>array(20,-10,419,460),602=>array(26,-10,690,563),603=>array(25,-10,383,461),604=>array(20,-10,378,461),605=>array(20,-10,626,563),606=>array(25,-9,397,458),607=>array(5,-218,343,460),608=>array(25,-218,572,683),609=>array(25,-218,426,461),610=>array(25,-14,499,461),611=>array(10,-233,484,450),612=>array(20,-9,547,460),613=>array(10,-233,488,450),614=>array(10,0,488,683),615=>array(10,-218,428,683),616=>array(7,0,278,683),617=>array(20,-10,304,460),618=>array(15,0,250,450),619=>array(5,0,335,683),620=>array(5,0,344,683),621=>array(19,-218,361,683),622=>array(10,-209,523,683),623=>array(10,-10,769,450),624=>array(10,-233,769,450),625=>array(10,-218,700,460),626=>array(0,-218,534,460),627=>array(10,-218,547,460),628=>array(10,-8,529,450),629=>array(25,-10,466,460),630=>array(25,0,642,460),631=>array(25,-10,636,460),632=>array(35,-200,589,662),633=>array(5,-10,335,450),634=>array(0,1,330,661),635=>array(5,-218,443,450),636=>array(10,-200,340,460),637=>array(10,-218,342,460),638=>array(10,0,374,460),639=>array(5,-200,369,460),640=>array(10,0,474,450),641=>array(10,0,474,450),642=>array(40,-218,337,459),643=>array(0,-218,360,683),644=>array(0,-218,360,683),645=>array(0,-218,360,463),646=>array(7,-300,451,683),647=>array(-2,-10,264,579),648=>array(10,-218,330,579),649=>array(6,-10,506,450),650=>array(25,-10,479,450),651=>array(15,-10,460,461),652=>array(5,0,463,464),653=>array(5,0,678,464),654=>array(5,0,466,668),655=>array(5,0,470,450),656=>array(10,-218,580,450),657=>array(10,-102,408,450),658=>array(6,-209,362,450),659=>array(10,-272,394,450),660=>array(20,0,393,676),661=>array(25,0,398,676),662=>array(10,-14,383,662),663=>array(45,-170,432,675),664=>array(35,-14,689,676),665=>array(10,0,431,450),666=>array(25,-9,397,458),667=>array(32,-14,587,675),668=>array(10,0,521,450),669=>array(15,-230,336,683),670=>array(5,-233,503,450),671=>array(10,0,434,450),672=>array(25,-217,573,683),673=>array(10,0,383,676),674=>array(25,0,398,676),675=>array(25,-10,769,683),676=>array(25,-183,769,683),677=>array(25,-102,776,683),678=>array(10,-10,510,579),679=>array(10,-231,493,683),680=>array(10,-102,650,579),681=>array(10,-218,704,683),682=>array(19,0,513,683),683=>array(19,0,528,683),684=>array(14,-8,463,663),685=>array(28,101,460,662),686=>array(5,-233,602,466),687=>array(5,-231,667,468),688=>array(6,390,325,845),689=>array(6,390,327,848),690=>array(0,245,178,847),691=>array(2,390,222,698),692=>array(6,384,226,692),693=>array(5,244,299,693),694=>array(3,390,315,692),695=>array(7,382,456,690),696=>array(7,245,315,690),697=>array(27,459,228,735),698=>array(13,459,404,735),699=>array(31,431,170,674),700=>array(30,431,169,674),701=>array(31,432,170,675),702=>array(86,508,186,707),703=>array(64,514,164,713),704=>array(16,309,240,676),705=>array(16,308,240,675),706=>array(39,554,293,752),707=>array(40,547,294,745),708=>array(35,516,298,707),709=>array(35,516,298,707),710=>array(11,507,322,674),711=>array(11,507,322,674),712=>array(100,505,150,702),713=>array(11,547,322,601),714=>array(10,505,234,676),715=>array(17,505,240,676),716=>array(100,-259,150,-62),717=>array(11,-153,322,-99),718=>array(17,-231,240,-60),719=>array(10,-241,234,-70),720=>array(70,0,180,460),721=>array(70,360,180,460),722=>array(86,4,186,203),723=>array(64,2,164,201),724=>array(10,51,321,288),725=>array(10,47,321,284),726=>array(37,52,295,310),727=>array(11,151,322,205),728=>array(26,507,307,664),729=>array(118,523,217,622),730=>array(67,497,266,696),731=>array(64,-165,249,0),732=>array(1,520,331,626),733=>array(40,505,327,676),734=>array(0,300,323,563),735=>array(18,534,336,773),736=>array(6,233,325,692),737=>array(13,390,171,845),738=>array(33,382,233,698),739=>array(11,390,319,690),740=>array(16,390,267,843),741=>array(20,0,410,800),742=>array(20,0,410,800),743=>array(20,0,410,800),744=>array(20,0,410,800),745=>array(20,0,410,800),746=>array(50,-1,457,524),747=>array(50,0,455,473),748=>array(14,-200,325,-33),749=>array(11,565,322,734),750=>array(30,433,363,676),751=>array(35,-241,298,-50),752=>array(35,-240,298,-49),753=>array(39,-226,293,-28),754=>array(40,-228,294,-30),755=>array(67,-247,266,-48),756=>array(17,279,240,450),757=>array(19,279,418,450),758=>array(19,279,418,450),759=>array(2,-191,332,-85),760=>array(70,205,181,675),761=>array(24,505,176,742),762=>array(24,505,176,742),763=>array(24,-55,176,182),764=>array(24,-55,176,182),765=>array(11,-200,322,-28),766=>array(13,-200,324,-28),767=>array(5,-245,323,-39),768=>array(-314,507,-91,678),769=>array(-241,507,-17,678),770=>array(-322,507,-11,674),771=>array(-332,509,-2,615),772=>array(-320,547,-9,601),773=>array(-489,547,-11,601),774=>array(-307,507,-26,664),775=>array(-215,501,-116,600),776=>array(-315,501,-17,600),777=>array(-249,521,-84,688),778=>array(-266,497,-67,696),779=>array(-269,505,18,676),780=>array(-322,507,-11,674),781=>array(-190,505,-140,702),782=>array(-217,505,-58,702),783=>array(-340,505,-53,676),784=>array(-300,507,-19,715),785=>array(-308,507,-27,664),786=>array(-242,491,-103,734),787=>array(-263,481,-124,724),788=>array(-251,482,-112,725),789=>array(-41,476,98,719),790=>array(-283,-214,-60,-43),791=>array(-276,-215,-52,-44),792=>array(-315,-300,-78,-45),793=>array(-308,-300,-71,-44),794=>array(-119,505,118,742),795=>array(-50,366,71,578),796=>array(-241,-256,-141,-57),797=>array(-379,-300,-68,-63),798=>array(-366,-299,-55,-62),799=>array(-343,-297,-85,-39),800=>array(-361,-131,-50,-77),801=>array(-157,-231,0,46),802=>array(-25,-231,132,46),803=>array(-320,-171,-222,-71),804=>array(-399,-170,-102,-70),805=>array(-307,-247,-108,-48),806=>array(-264,-300,-125,-57),807=>array(-281,-215,-72,0),808=>array(-269,-165,-84,0),809=>array(-247,-259,-197,-62),810=>array(-369,-228,-58,-56),811=>array(-333,-194,-60,-52),812=>array(-386,-218,-75,-51),813=>array(-386,-226,-75,-59),814=>array(-368,-219,-87,-62),815=>array(-353,-220,-72,-63),816=>array(-384,-162,-54,-56),817=>array(-366,-130,-55,-76),818=>array(-500,-125,0,-75),819=>array(-500,-200,0,-58),820=>array(-357,190,-27,296),821=>array(-363,201,-118,244),822=>array(-400,199,0,242),823=>array(-455,109,-35,336),824=>array(-397,-112,42,662),825=>array(-301,-246,-201,-47),826=>array(-373,-229,-62,-57),827=>array(-344,-299,-83,-38),828=>array(-349,-230,-41,-53),829=>array(-345,493,-27,732),830=>array(-314,645,-198,900),831=>array(-500,551,0,693),832=>array(-316,505,-93,676),833=>array(-243,505,-19,676),834=>array(-244,550,86,656),835=>array(-214,526,-75,742),836=>array(-338,537,-31,751),837=>array(-211,-200,-44,-52),838=>array(-385,490,-74,662),839=>array(-397,-196,-86,-42),840=>array(-299,-259,-121,-62),841=>array(-270,-218,-126,-74),842=>array(-373,485,-43,676),843=>array(-370,476,-40,760),844=>array(-371,506,-41,739),845=>array(-441,-245,-21,-39),846=>array(-317,-295,-111,-18),848=>array(-335,489,-81,687),849=>array(-207,510,-107,709),850=>array(-300,507,-19,715),851=>array(-415,-291,-97,-52),852=>array(-366,-226,-112,-28),853=>array(-345,-227,-91,-29),854=>array(-509,-229,-1,-31),855=>array(-265,499,-165,698),856=>array(-99,523,0,622),857=>array(-310,-239,-127,-32),858=>array(-377,-219,-2,-29),859=>array(-337,490,-103,744),860=>array(-286,-195,286,-46),861=>array(-286,534,286,683),862=>array(-286,557,286,600),863=>array(-286,-142,286,-99),864=>array(-286,549,286,694),865=>array(-286,524,286,673),866=>array(-286,-245,286,-39),867=>array(-318,494,-136,704),868=>array(-299,494,-121,704),869=>array(-241,500,-136,802),870=>array(-341,494,-144,704),871=>array(-319,494,-111,698),872=>array(-322,494,-149,703),873=>array(-329,494,-123,801),874=>array(-311,500,-99,801),875=>array(-373,500,-38,704),876=>array(-262,500,-116,704),877=>array(-271,494,-153,755),878=>array(-335,494,-133,698),879=>array(-330,500,-126,698),880=>array(18,0,513,662),881=>array(15,-10,418,451),882=>array(30,0,507,662),883=>array(30,0,467,662),884=>array(0,557,154,780),885=>array(46,-223,200,0),886=>array(19,0,702,662),887=>array(20,-10,575,481),890=>array(129,-200,296,-52),891=>array(41,-10,432,461),892=>array(41,-10,432,461),893=>array(41,-10,432,461),894=>array(80,-141,219,459),900=>array(70,560,198,775),901=>array(13,515,320,729),902=>array(15,0,706,687),903=>array(66,352,184,470),904=>array(28,0,785,687),905=>array(28,0,883,688),906=>array(28,0,489,690),908=>array(28,-14,783,689),910=>array(28,0,819,690),911=>array(28,0,833,688),912=>array(-49,-10,271,752),913=>array(15,0,706,674),914=>array(15,0,591,662),915=>array(15,0,549,662),916=>array(10,0,640,674),917=>array(15,0,600,662),918=>array(10,0,598,662),919=>array(15,0,698,662),920=>array(35,-12,719,673),921=>array(15,0,312,662),922=>array(15,0,704,662),923=>array(15,0,706,674),924=>array(15,0,866,662),925=>array(15,-11,710,662),926=>array(40,0,550,662),927=>array(35,-14,689,676),928=>array(15,0,698,662),929=>array(15,0,541,662),931=>array(15,0,563,661),932=>array(15,0,591,662),933=>array(15,0,651,672),934=>array(35,0,725,662),935=>array(10,0,704,662),936=>array(15,0,773,668),937=>array(15,0,708,676),938=>array(15,0,316,836),939=>array(15,0,651,834),940=>array(41,-10,558,775),941=>array(41,-10,399,775),942=>array(15,-224,471,775),943=>array(65,-10,271,775),944=>array(19,-10,464,747),945=>array(41,-10,558,461),946=>array(65,-201,485,675),947=>array(19,-224,461,461),948=>array(44,-6,490,677),949=>array(41,-10,399,461),950=>array(39,-194,456,690),951=>array(15,-224,471,461),952=>array(51,-10,483,672),953=>array(65,-10,271,451),954=>array(20,0,524,481),955=>array(24,-10,454,673),956=>array(65,-224,521,451),957=>array(15,0,455,461),958=>array(5,-186,494,746),959=>array(25,-10,466,460),960=>array(35,-10,552,470),961=>array(50,-221,487,461),962=>array(44,-233,442,460),963=>array(41,-10,525,479),964=>array(12,-10,405,468),965=>array(19,-10,464,461),966=>array(40,-222,602,463),967=>array(19,-209,461,461),968=>array(27,-224,637,579),969=>array(41,-10,652,461),970=>array(-48,-10,271,649),971=>array(19,-10,464,650),972=>array(25,-10,466,759),973=>array(19,-10,464,735),974=>array(41,-10,652,740),975=>array(15,-200,656,662),976=>array(44,-10,490,705),977=>array(17,-10,569,705),978=>array(5,0,617,672),979=>array(28,0,793,709),980=>array(5,0,617,835),981=>array(43,-224,597,576),982=>array(18,-10,653,521),983=>array(33,-166,502,461),984=>array(35,0,561,662),985=>array(29,-220,470,460),986=>array(35,0,567,677),987=>array(27,-194,407,460),988=>array(15,0,549,662),989=>array(10,-218,439,467),990=>array(25,-16,631,668),991=>array(47,-181,348,705),992=>array(15,0,706,674),993=>array(26,-180,556,705),994=>array(35,-219,927,675),995=>array(24,-219,649,459),996=>array(32,-181,528,675),997=>array(24,-220,480,461),998=>array(32,-184,548,675),999=>array(22,-9,436,506),1000=>array(36,-119,500,673),1001=>array(22,-81,338,458),1002=>array(32,-51,810,675),1003=>array(22,-35,571,459),1004=>array(36,-10,572,799),1005=>array(24,-7,412,551),1006=>array(32,-181,602,800),1007=>array(22,-220,425,566),1008=>array(33,-10,501,461),1009=>array(41,-224,481,461),1010=>array(41,-10,432,461),1011=>array(0,-218,264,683),1012=>array(35,-14,689,676),1013=>array(41,-10,332,461),1014=>array(41,-10,332,461),1015=>array(16,0,542,662),1016=>array(19,-212,512,654),1017=>array(35,-14,640,676),1018=>array(12,0,863,662),1019=>array(59,-212,707,461),1020=>array(-56,-218,481,461),1021=>array(28,-14,633,676),1022=>array(35,-14,640,676),1023=>array(28,-14,633,676),1024=>array(15,0,600,898),1025=>array(15,0,600,850),1026=>array(10,-13,712,662),1027=>array(15,0,549,890),1028=>array(35,-14,640,676),1029=>array(40,-14,489,676),1030=>array(15,0,312,662),1031=>array(15,0,313,846),1032=>array(5,-14,365,662),1033=>array(5,-13,913,662),1034=>array(15,0,950,662),1035=>array(15,-1,806,662),1036=>array(15,0,654,890),1037=>array(15,0,698,898),1038=>array(10,-13,699,865),1039=>array(15,-170,698,662),1040=>array(10,0,701,674),1041=>array(15,0,541,662),1042=>array(15,0,591,662),1043=>array(15,0,549,662),1044=>array(10,-170,631,662),1045=>array(15,0,600,662),1046=>array(10,0,927,668),1047=>array(20,-15,550,676),1048=>array(15,0,698,662),1049=>array(15,0,698,865),1050=>array(15,0,654,668),1051=>array(10,-13,666,662),1052=>array(15,0,866,662),1053=>array(15,0,698,662),1054=>array(35,-14,689,676),1055=>array(15,0,698,662),1056=>array(15,0,541,662),1057=>array(35,-14,640,676),1058=>array(15,0,591,662),1059=>array(10,-13,699,662),1060=>array(35,0,725,662),1061=>array(10,0,704,662),1062=>array(15,-170,707,662),1063=>array(15,0,657,662),1064=>array(15,0,959,662),1065=>array(15,-170,967,662),1066=>array(10,0,689,662),1067=>array(15,0,837,662),1068=>array(15,0,541,662),1069=>array(20,-14,625,676),1070=>array(15,-14,927,676),1071=>array(10,0,628,662),1072=>array(25,-10,430,460),1073=>array(30,-10,471,706),1074=>array(16,0,438,450),1075=>array(16,0,374,450),1076=>array(12,-125,476,450),1077=>array(25,-10,424,460),1078=>array(10,0,652,455),1079=>array(12,-8,376,459),1080=>array(16,0,508,450),1081=>array(16,0,508,682),1082=>array(16,0,488,455),1083=>array(5,-9,474,450),1084=>array(16,-14,616,450),1085=>array(16,0,508,450),1086=>array(25,-10,466,460),1087=>array(16,0,508,450),1088=>array(15,-217,480,460),1089=>array(25,-10,412,460),1090=>array(14,0,408,450),1091=>array(5,-218,466,450),1092=>array(25,-215,669,683),1093=>array(3,0,465,450),1094=>array(16,-125,510,450),1095=>array(15,0,489,450),1096=>array(16,0,740,450),1097=>array(16,-125,742,450),1098=>array(14,0,480,450),1099=>array(15,0,609,450),1100=>array(16,0,406,450),1101=>array(12,-10,407,460),1102=>array(16,-10,639,460),1103=>array(5,0,476,450),1104=>array(25,-10,424,684),1105=>array(25,-10,424,660),1106=>array(16,-190,449,683),1107=>array(16,0,374,676),1108=>array(25,-10,420,460),1109=>array(35,-10,332,459),1110=>array(16,0,253,683),1111=>array(-14,0,284,680),1112=>array(0,-218,264,683),1113=>array(5,-9,652,450),1114=>array(16,0,686,450),1115=>array(16,0,498,683),1116=>array(16,0,488,676),1117=>array(16,0,508,678),1118=>array(5,-218,466,682),1119=>array(16,-126,508,450),1120=>array(35,-14,953,676),1121=>array(25,-10,639,461),1122=>array(10,1,688,663),1123=>array(15,0,481,683),1124=>array(14,-14,918,676),1125=>array(15,-10,622,460),1126=>array(10,0,891,674),1127=>array(6,0,629,450),1128=>array(15,0,1235,674),1129=>array(15,0,884,450),1130=>array(10,0,927,662),1131=>array(6,0,648,450),1132=>array(12,0,1268,662),1133=>array(15,0,901,450),1134=>array(20,-212,484,856),1135=>array(12,-184,353,594),1136=>array(15,0,853,662),1137=>array(20,-215,670,683),1138=>array(35,-14,689,676),1139=>array(25,-10,466,460),1140=>array(16,-10,755,668),1141=>array(15,-14,540,455),1142=>array(15,-10,754,884),1143=>array(15,-14,540,672),1144=>array(32,-218,1146,676),1145=>array(23,-218,880,460),1146=>array(35,-64,844,726),1147=>array(25,-46,586,496),1148=>array(35,-14,953,900),1149=>array(25,-10,655,718),1150=>array(35,-14,953,846),1151=>array(25,-10,639,626),1152=>array(35,0,567,677),1153=>array(25,-171,398,460),1154=>array(1,-212,235,123),1155=>array(-323,507,-10,644),1156=>array(-439,503,-2,675),1157=>array(-230,507,-15,676),1158=>array(-230,506,-15,675),1159=>array(-442,474,96,676),1160=>array(-752,-134,269,857),1161=>array(-796,-262,366,900),1162=>array(15,-146,698,865),1163=>array(15,-146,507,682),1164=>array(15,0,541,662),1165=>array(15,0,405,450),1166=>array(15,0,546,662),1167=>array(15,-217,496,460),1168=>array(15,0,549,767),1169=>array(15,0,383,538),1170=>array(5,0,551,662),1171=>array(4,0,378,450),1172=>array(15,-218,584,662),1173=>array(15,-218,437,450),1174=>array(10,-170,973,668),1175=>array(10,-125,668,455),1176=>array(22,-212,552,676),1177=>array(12,-165,376,459),1178=>array(15,-170,673,668),1179=>array(15,-125,502,455),1180=>array(15,0,698,668),1181=>array(15,0,521,455),1182=>array(15,0,654,668),1183=>array(10,0,484,455),1184=>array(15,0,801,668),1185=>array(10,0,558,455),1186=>array(15,-170,707,662),1187=>array(15,-125,509,450),1188=>array(15,0,911,662),1189=>array(15,0,637,450),1190=>array(15,-218,990,662),1191=>array(15,-218,696,450),1192=>array(35,-14,722,676),1193=>array(25,-10,491,460),1194=>array(35,-212,640,676),1195=>array(25,-165,412,460),1196=>array(15,-129,591,662),1197=>array(14,-108,438,450),1198=>array(10,0,691,662),1199=>array(5,-217,558,450),1200=>array(10,0,691,662),1201=>array(5,-217,558,450),1202=>array(10,-170,755,662),1203=>array(16,-125,504,450),1204=>array(10,-129,948,662),1205=>array(15,-108,678,450),1206=>array(15,-170,666,662),1207=>array(15,-125,491,450),1208=>array(15,0,701,662),1209=>array(15,0,523,450),1210=>array(15,0,657,662),1211=>array(15,0,493,683),1212=>array(20,-13,824,676),1213=>array(21,-9,541,490),1214=>array(20,-128,824,676),1215=>array(21,-128,541,490),1216=>array(15,0,312,662),1217=>array(10,0,927,865),1218=>array(10,0,652,682),1219=>array(15,-218,593,668),1220=>array(15,-219,431,455),1221=>array(10,-145,666,662),1222=>array(5,-146,474,450),1223=>array(15,-177,698,662),1224=>array(15,-218,482,450),1225=>array(15,-146,698,662),1226=>array(15,-145,530,464),1227=>array(15,-129,657,662),1228=>array(15,-108,489,450),1229=>array(15,-146,866,662),1230=>array(15,-146,615,450),1231=>array(15,0,312,662),1232=>array(10,0,701,865),1233=>array(25,-10,430,682),1234=>array(10,0,701,852),1235=>array(25,-10,430,618),1236=>array(10,0,873,662),1237=>array(25,-10,619,460),1238=>array(15,0,600,865),1239=>array(25,-10,424,682),1240=>array(25,-14,676,676),1241=>array(12,-10,411,460),1242=>array(25,-14,676,842),1243=>array(12,-10,411,621),1244=>array(10,0,927,851),1245=>array(10,0,652,611),1246=>array(20,-15,550,848),1247=>array(12,-8,376,616),1248=>array(14,-14,496,662),1249=>array(15,-10,341,450),1250=>array(15,0,698,800),1251=>array(16,0,508,584),1252=>array(15,0,698,835),1253=>array(16,0,508,624),1254=>array(35,-14,689,851),1255=>array(25,-10,466,614),1256=>array(35,-14,689,676),1257=>array(25,-10,466,460),1258=>array(35,-14,689,845),1259=>array(25,-10,466,613),1260=>array(20,-14,625,853),1261=>array(12,-10,407,628),1262=>array(10,-13,699,800),1263=>array(14,-218,475,584),1264=>array(10,-13,699,851),1265=>array(14,-218,475,616),1266=>array(10,-13,699,898),1267=>array(14,-218,475,676),1268=>array(15,0,657,834),1269=>array(15,0,489,624),1270=>array(15,-129,549,662),1271=>array(15,-108,373,450),1272=>array(15,0,837,848),1273=>array(15,0,609,619),1274=>array(15,-231,549,662),1275=>array(15,-231,373,450),1276=>array(10,-177,696,662),1277=>array(10,-218,426,450),1278=>array(10,0,704,662),1279=>array(15,0,477,450),1280=>array(35,0,561,662),1281=>array(25,-10,489,683),1282=>array(35,0,893,662),1283=>array(25,-20,609,683),1284=>array(22,-12,782,674),1285=>array(15,-26,502,460),1286=>array(15,-127,538,687),1287=>array(15,-129,455,462),1288=>array(10,-13,916,662),1289=>array(5,-32,612,450),1290=>array(15,-13,949,662),1291=>array(15,-40,657,464),1292=>array(35,-13,712,676),1293=>array(25,-8,408,460),1294=>array(10,-13,690,662),1295=>array(10,-41,474,464),1296=>array(35,-15,491,676),1297=>array(25,-14,394,463),1298=>array(10,-177,666,662),1299=>array(5,-218,474,450),1300=>array(10,-7,931,662),1301=>array(5,-14,629,450),1302=>array(15,0,810,662),1303=>array(15,-217,687,460),1304=>array(10,0,939,662),1305=>array(10,-10,736,460),1306=>array(35,-178,702,676),1307=>array(26,-217,490,461),1308=>array(10,-11,937,662),1309=>array(10,-14,683,450),1310=>array(15,0,654,668),1311=>array(15,0,487,455),1312=>array(8,-218,956,662),1313=>array(5,-218,685,450),1314=>array(20,-218,993,662),1315=>array(15,-218,716,450),1316=>array(15,-129,709,662),1317=>array(15,-108,510,450),1318=>array(15,-129,668,662),1319=>array(15,-108,492,450),1329=>array(15,-24,784,662),1330=>array(16,0,702,676),1331=>array(30,0,772,676),1332=>array(11,0,844,676),1333=>array(15,-14,701,662),1334=>array(40,-70,692,674),1335=>array(15,-70,697,662),1336=>array(50,-70,646,676),1337=>array(15,0,767,676),1338=>array(30,-14,772,662),1339=>array(15,0,695,662),1340=>array(15,-70,653,662),1341=>array(15,0,815,662),1342=>array(10,-16,907,674),1343=>array(15,0,657,662),1344=>array(10,-61,454,662),1345=>array(40,-24,636,674),1346=>array(15,-70,848,676),1347=>array(40,-14,670,675),1348=>array(15,-14,846,662),1349=>array(40,-15,588,676),1350=>array(10,0,843,732),1351=>array(30,-16,684,678),1352=>array(15,0,704,676),1353=>array(30,-118,684,678),1354=>array(20,0,716,676),1355=>array(40,-70,692,674),1356=>array(15,0,864,676),1357=>array(15,-14,704,662),1358=>array(15,-70,834,662),1359=>array(40,-15,489,676),1360=>array(15,0,688,676),1361=>array(30,-15,578,676),1362=>array(15,0,571,662),1363=>array(40,0,730,662),1364=>array(10,0,770,676),1365=>array(30,-14,684,676),1366=>array(30,-15,654,662),1369=>array(0,508,100,707),1370=>array(0,508,100,707),1371=>array(28,459,229,735),1372=>array(40,389,267,662),1373=>array(-21,459,180,735),1374=>array(-20,496,272,664),1375=>array(-18,530,260,683),1377=>array(15,-10,770,450),1378=>array(16,-200,491,460),1379=>array(24,-200,532,461),1380=>array(16,-200,531,460),1381=>array(15,-10,491,683),1382=>array(24,-200,488,461),1383=>array(15,-70,468,683),1384=>array(15,-200,484,460),1385=>array(15,-200,531,460),1386=>array(25,-10,529,683),1387=>array(15,-200,493,683),1388=>array(16,-200,274,460),1389=>array(15,-200,735,683),1390=>array(25,-10,530,690),1391=>array(15,-200,498,662),1392=>array(15,0,493,683),1393=>array(25,-10,488,662),1394=>array(15,-200,516,460),1395=>array(25,-10,508,669),1396=>array(15,-10,485,662),1397=>array(-70,-218,193,460),1398=>array(50,-10,458,662),1399=>array(15,-200,396,461),1400=>array(15,0,484,460),1401=>array(16,-200,397,464),1402=>array(15,-200,778,450),1403=>array(20,-200,404,461),1404=>array(15,0,448,460),1405=>array(15,-10,485,450),1406=>array(15,-200,506,683),1407=>array(15,-10,743,460),1408=>array(15,-200,489,460),1409=>array(25,-218,426,461),1410=>array(15,0,273,460),1411=>array(15,-200,743,683),1412=>array(15,-200,480,460),1413=>array(30,-10,471,460),1414=>array(30,-200,532,670),1415=>array(15,-10,528,683),1417=>array(81,-11,192,459),1418=>array(23,174,257,293),1423=>array(11,0,724,676),1425=>array(117,-229,265,-51),1426=>array(0,632,217,827),1427=>array(21,629,172,849),1428=>array(182,630,265,810),1429=>array(135,630,311,807),1430=>array(155,-259,286,-47),1431=>array(114,603,288,777),1432=>array(95,633,385,782),1433=>array(59,627,190,839),1434=>array(323,-218,477,-60),1435=>array(152,-245,283,-33),1436=>array(167,623,298,835),1437=>array(366,623,497,835),1438=>array(169,623,420,835),1439=>array(56,636,448,853),1440=>array(315,636,496,853),1441=>array(0,638,152,822),1442=>array(117,-229,265,-51),1443=>array(128,-218,285,-61),1444=>array(180,-218,334,-60),1445=>array(142,-245,273,-33),1446=>array(101,-245,330,-33),1447=>array(158,-218,310,-61),1448=>array(46,627,177,839),1449=>array(16,636,197,853),1450=>array(117,-229,265,-51),1451=>array(139,651,293,809),1452=>array(107,637,264,794),1453=>array(213,-259,344,-47),1454=>array(0,633,290,782),1455=>array(-84,648,88,820),1456=>array(217,-221,283,-57),1457=>array(99,-222,362,-73),1458=>array(98,-221,337,-57),1459=>array(66,-223,342,-57),1460=>array(217,-133,283,-69),1461=>array(167,-120,334,-56),1462=>array(151,-220,343,-56),1463=>array(158,-114,338,-62),1464=>array(158,-224,338,-62),1465=>array(83,632,166,712),1466=>array(179,632,262,712),1467=>array(142,-249,340,-57),1468=>array(208,233,291,313),1469=>array(198,-218,250,-58),1470=>array(25,461,345,536),1471=>array(158,650,338,702),1472=>array(0,0,52,694),1473=>array(394,623,477,703),1474=>array(56,623,139,703),1475=>array(80,73,266,617),1476=>array(191,636,296,749),1477=>array(249,-176,354,-63),1478=>array(86,0,303,598),1479=>array(158,-224,338,-62),1488=>array(27,-5,488,584),1489=>array(24,0,504,598),1490=>array(39,0,296,598),1491=>array(25,-2,482,596),1492=>array(22,-2,465,598),1493=>array(48,0,255,598),1494=>array(55,-1,267,598),1495=>array(29,-2,466,598),1496=>array(27,0,496,598),1497=>array(61,283,256,593),1498=>array(26,-264,496,600),1499=>array(15,0,485,598),1500=>array(74,2,461,820),1501=>array(23,0,483,598),1502=>array(23,0,487,599),1503=>array(58,-264,250,600),1504=>array(47,0,264,598),1505=>array(30,0,492,598),1506=>array(11,0,479,600),1507=>array(24,-263,485,600),1508=>array(19,0,472,598),1509=>array(24,-264,470,600),1510=>array(13,0,476,598),1511=>array(21,-264,483,600),1512=>array(24,-1,469,598),1513=>array(29,0,531,598),1514=>array(32,-1,498,598),1520=>array(48,0,515,598),1521=>array(31,0,495,598),1522=>array(31,283,486,593),1523=>array(132,500,297,727),1524=>array(45,500,346,727),1536=>array(20,-81,588,158),1537=>array(10,-164,1000,1),1538=>array(30,-80,770,152),1539=>array(80,-158,769,108),1542=>array(0,-65,525,900),1543=>array(0,-65,525,900),1544=>array(26,-210,704,267),1545=>array(55,-14,534,676),1546=>array(55,-14,674,676),1547=>array(75,-270,640,631),1548=>array(70,-5,216,224),1549=>array(50,-109,294,83),1550=>array(40,0,600,200),1551=>array(107,-300,636,432),1552=>array(30,744,270,900),1553=>array(32,694,262,900),1554=>array(43,654,352,889),1555=>array(30,643,352,900),1556=>array(34,764,314,850),1557=>array(21,642,250,900),1558=>array(20,621,346,897),1559=>array(53,617,191,889),1560=>array(93,717,250,822),1561=>array(50,675,206,875),1562=>array(63,-287,220,-182),1563=>array(71,-11,210,486),1566=>array(72,57,300,254),1567=>array(68,-8,414,676),1568=>array(75,-300,652,315),1569=>array(85,-79,329,280),1570=>array(0,-48,275,800),1571=>array(24,-48,182,890),1572=>array(0,-247,329,528),1573=>array(47,-300,205,701),1574=>array(75,-160,652,512),1575=>array(100,-48,179,701),1576=>array(75,-200,877,309),1577=>array(75,-5,342,531),1578=>array(75,0,877,421),1579=>array(75,0,877,494),1580=>array(75,-280,591,332),1581=>array(75,-280,591,332),1582=>array(75,-280,591,541),1583=>array(55,0,368,350),1584=>array(55,0,368,561),1585=>array(0,-247,345,247),1586=>array(0,-247,345,431),1587=>array(75,-241,914,205),1588=>array(75,-241,914,454),1589=>array(75,-241,909,260),1590=>array(75,-241,909,421),1591=>array(0,0,568,695),1592=>array(0,0,568,695),1593=>array(75,-280,591,421),1594=>array(75,-280,591,611),1595=>array(75,0,902,713),1596=>array(75,-265,902,701),1597=>array(75,-160,652,542),1598=>array(75,-160,652,437),1599=>array(75,-160,652,504),1600=>array(-5,0,205,80),1601=>array(75,0,868,601),1602=>array(75,-170,634,501),1603=>array(-10,0,456,675),1604=>array(75,-239,598,675),1605=>array(75,-300,467,429),1606=>array(75,-194,597,496),1607=>array(75,-5,342,359),1608=>array(0,-247,329,254),1609=>array(75,-160,652,315),1610=>array(75,-300,652,315),1611=>array(74,674,269,895),1612=>array(72,666,316,900),1613=>array(44,-300,239,-79),1614=>array(74,704,269,835),1615=>array(31,651,225,900),1616=>array(44,-300,239,-169),1617=>array(75,721,259,880),1618=>array(113,693,238,850),1619=>array(12,731,287,806),1620=>array(88,667,246,900),1621=>array(71,-280,229,-47),1622=>array(141,-269,200,-56),1623=>array(81,641,275,890),1624=>array(69,661,305,900),1625=>array(-124,788,116,854),1626=>array(95,684,254,824),1627=>array(51,682,210,822),1628=>array(120,-171,218,-71),1629=>array(41,651,235,900),1630=>array(74,687,269,858),1631=>array(0,-290,237,-60),1632=>array(141,80,358,327),1633=>array(154,-16,331,602),1634=>array(70,-14,417,620),1635=>array(39,-15,456,628),1636=>array(85,-13,446,612),1637=>array(57,0,443,573),1638=>array(20,-15,483,624),1639=>array(60,-15,439,610),1640=>array(60,-15,439,610),1641=>array(102,-15,422,620),1642=>array(55,-14,385,676),1643=>array(20,-109,195,146),1644=>array(55,389,180,622),1645=>array(48,313,423,673),1646=>array(75,0,877,309),1647=>array(75,-170,634,307),1648=>array(121,658,180,871),1649=>array(-10,-48,280,829),1650=>array(-24,-48,213,900),1651=>array(0,-290,237,701),1652=>array(78,613,236,846),1653=>array(100,-48,326,846),1654=>array(0,-247,442,506),1655=>array(0,-247,482,561),1656=>array(75,-160,792,576),1657=>array(75,0,877,617),1658=>array(75,0,877,521),1659=>array(75,-277,877,309),1660=>array(75,-125,877,421),1661=>array(75,0,877,492),1662=>array(75,-265,877,309),1663=>array(75,0,877,534),1664=>array(75,-300,877,309),1665=>array(75,-280,591,631),1666=>array(75,-280,591,621),1667=>array(75,-280,591,332),1668=>array(75,-280,591,332),1669=>array(75,-281,591,604),1670=>array(75,-280,591,332),1671=>array(75,-280,591,332),1672=>array(55,0,368,727),1673=>array(55,-139,368,364),1674=>array(55,-200,368,350),1675=>array(55,-200,368,727),1676=>array(55,0,368,551),1677=>array(55,-190,368,350),1678=>array(55,0,368,634),1679=>array(55,0,368,642),1680=>array(55,0,368,674),1681=>array(0,-247,345,607),1682=>array(0,-247,345,504),1683=>array(0,-281,345,247),1684=>array(0,-300,345,247),1685=>array(0,-247,494,247),1686=>array(0,-300,345,247),1687=>array(0,-247,345,421),1688=>array(0,-247,345,504),1689=>array(0,-247,345,543),1690=>array(75,-241,914,341),1691=>array(75,-275,914,207),1692=>array(75,-275,914,444),1693=>array(75,-241,909,260),1694=>array(75,-241,909,484),1695=>array(0,0,568,695),1696=>array(75,-280,591,674),1697=>array(75,0,868,410),1698=>array(75,-200,868,410),1699=>array(75,-200,868,581),1700=>array(75,0,868,644),1701=>array(75,-265,868,410),1702=>array(75,0,868,732),1703=>array(75,-170,634,491),1704=>array(75,-170,634,568),1705=>array(75,0,902,701),1706=>array(0,0,1134,679),1707=>array(75,0,902,701),1708=>array(-10,0,456,771),1709=>array(-10,0,456,844),1710=>array(-10,-265,456,675),1711=>array(75,0,902,800),1712=>array(75,0,902,800),1713=>array(75,0,902,800),1714=>array(75,-200,902,800),1715=>array(75,-277,902,800),1716=>array(75,0,902,800),1717=>array(75,-239,598,804),1718=>array(75,-239,598,800),1719=>array(75,-239,598,855),1720=>array(75,-300,598,675),1721=>array(75,-300,597,496),1722=>array(75,-194,597,355),1723=>array(75,-194,597,660),1724=>array(75,-300,597,479),1725=>array(75,-194,597,564),1726=>array(-23,0,396,364),1727=>array(75,-280,591,511),1728=>array(75,-5,342,578),1729=>array(75,-5,342,359),1730=>array(75,-56,393,428),1731=>array(75,-56,393,321),1732=>array(0,-247,329,254),1733=>array(0,-247,329,254),1734=>array(0,-247,329,484),1735=>array(0,-247,329,561),1736=>array(0,-247,329,547),1737=>array(0,-247,329,461),1738=>array(0,-247,329,451),1739=>array(0,-247,329,524),1740=>array(75,-160,652,315),1741=>array(19,-166,708,315),1742=>array(75,-160,652,474),1743=>array(0,-247,329,441),1744=>array(75,-300,652,315),1745=>array(75,-300,652,315),1746=>array(75,-170,710,265),1747=>array(67,-170,710,448),1748=>array(75,-12,355,75),1749=>array(75,-5,342,299),1750=>array(61,580,498,900),1751=>array(61,580,387,900),1752=>array(-8,733,195,859),1753=>array(41,564,252,900),1754=>array(51,585,339,900),1755=>array(36,778,150,877),1756=>array(37,656,457,880),1757=>array(0,-126,1132,797),1758=>array(16,-137,954,801),1759=>array(42,613,216,900),1760=>array(73,714,187,888),1761=>array(56,740,294,850),1762=>array(57,575,253,900),1763=>array(19,-300,439,-76),1764=>array(60,754,243,805),1765=>array(43,215,208,466),1766=>array(40,23,359,242),1767=>array(40,596,359,815),1768=>array(20,560,281,905),1769=>array(20,-89,740,800),1770=>array(74,-288,291,-43),1771=>array(74,655,291,900),1772=>array(70,749,181,860),1773=>array(17,-289,155,-33),1774=>array(55,0,368,571),1775=>array(0,-247,345,461),1776=>array(141,80,358,327),1777=>array(154,-16,331,602),1778=>array(70,-14,417,620),1779=>array(39,-15,456,628),1780=>array(66,-15,426,624),1781=>array(57,-16,442,618),1782=>array(110,-18,417,624),1783=>array(60,-15,439,610),1784=>array(60,-15,439,610),1785=>array(102,-15,422,620),1786=>array(75,-241,914,454),1787=>array(75,-241,909,421),1788=>array(75,-280,591,611),1789=>array(78,91,260,526),1790=>array(13,91,226,462),1791=>array(-23,0,396,561),1872=>array(75,-200,877,309),1873=>array(75,-200,877,484),1874=>array(75,-253,877,309),1875=>array(75,-253,877,401),1876=>array(75,-200,877,401),1877=>array(75,-201,877,309),1878=>array(75,0,877,464),1879=>array(75,-280,591,511),1880=>array(75,-280,591,332),1881=>array(55,-277,368,725),1882=>array(55,-218,368,350),1883=>array(0,-247,398,247),1884=>array(75,-241,914,522),1885=>array(75,-280,591,609),1886=>array(75,-280,591,692),1887=>array(75,-280,591,691),1888=>array(75,-200,868,410),1889=>array(75,-263,868,410),1890=>array(75,0,902,721),1891=>array(75,0,902,784),1892=>array(75,-263,902,701),1893=>array(75,-300,467,621),1894=>array(75,-300,467,429),1895=>array(75,-300,597,496),1896=>array(75,-194,597,785),1897=>array(75,-194,597,679),1898=>array(75,-240,691,675),1899=>array(0,-247,345,521),1900=>array(0,-247,345,516),1901=>array(75,-241,914,441),1902=>array(75,-280,591,332),1903=>array(75,-280,591,332),1904=>array(75,-241,914,678),1905=>array(0,-247,345,723),1906=>array(75,-280,591,667),1907=>array(-9,-48,179,900),1908=>array(-26,-48,183,902),1909=>array(75,-160,652,462),1910=>array(75,-160,652,465),1911=>array(75,-300,753,315),1912=>array(0,-247,329,460),1913=>array(0,-247,329,462),1914=>array(60,-170,710,590),1915=>array(54,-170,710,592),1916=>array(75,-280,591,332),1917=>array(75,-241,914,560),1918=>array(75,-241,914,414),1919=>array(-10,0,456,675),1920=>array(-33,102,421,361),1921=>array(-112,39,481,367),1922=>array(-124,43,577,359),1923=>array(-45,40,532,390),1924=>array(23,94,466,353),1925=>array(-15,16,415,358),1926=>array(84,124,458,363),1927=>array(0,56,438,344),1928=>array(-4,-6,440,342),1929=>array(16,44,445,358),1930=>array(-50,-54,420,416),1931=>array(-80,-41,504,381),1932=>array(-4,-13,466,342),1933=>array(-57,-17,503,367),1934=>array(28,94,454,365),1935=>array(-1,-6,541,352),1936=>array(11,129,872,353),1937=>array(118,48,410,357),1938=>array(22,-54,500,365),1939=>array(50,-64,531,378),1940=>array(-74,31,481,347),1941=>array(-50,-54,422,416),1942=>array(40,-80,449,357),1943=>array(16,-21,673,533),1944=>array(-4,-49,466,495),1945=>array(-28,102,426,361),1946=>array(-57,93,397,484),1947=>array(-80,-40,504,511),1948=>array(-45,40,532,483),1949=>array(11,129,872,499),1950=>array(11,79,872,353),1951=>array(22,244,887,488),1952=>array(-4,-13,466,342),1953=>array(-4,-13,466,466),1954=>array(0,16,438,344),1955=>array(0,56,438,475),1956=>array(28,94,454,522),1957=>array(6,-6,449,484),1958=>array(243,517,543,727),1959=>array(180,507,543,829),1960=>array(169,-285,517,-54),1961=>array(152,-300,533,-6),1962=>array(217,509,504,764),1963=>array(50,511,609,764),1964=>array(275,509,532,781),1965=>array(90,518,591,755),1966=>array(98,516,583,785),1967=>array(190,509,611,885),1968=>array(249,523,524,769),1969=>array(35,-80,404,342),2304=>array(-419,682,-75,899),2305=>array(-360,682,-16,898),2306=>array(-247,676,-135,788),2307=>array(116,-10,283,488),2308=>array(-1,-40,901,858),2309=>array(-1,-40,901,609),2310=>array(-1,-40,1110,609),2311=>array(-40,-121,593,609),2312=>array(-39,-119,592,855),2313=>array(-39,0,636,610),2314=>array(-39,0,887,610),2315=>array(-39,-59,1006,610),2316=>array(-39,-126,867,610),2317=>array(-40,-282,694,883),2318=>array(-40,-282,694,858),2319=>array(-40,-282,694,609),2320=>array(-40,-282,694,896),2321=>array(-1,-40,1110,880),2322=>array(-1,-40,1110,858),2323=>array(-1,-40,1110,894),2324=>array(-1,-40,1110,900),2325=>array(-39,-38,782,610),2326=>array(-40,-40,837,609),2327=>array(-40,-40,734,609),2328=>array(-40,-40,734,609),2329=>array(-40,42,770,609),2330=>array(-40,-40,774,609),2331=>array(-40,-153,927,609),2332=>array(-40,-40,853,609),2333=>array(-40,-121,873,609),2334=>array(-40,-40,774,609),2335=>array(-40,17,668,609),2336=>array(-40,17,668,609),2337=>array(-40,42,692,609),2338=>array(-40,-1,648,609),2339=>array(-40,-40,734,609),2340=>array(-40,-40,694,609),2341=>array(-1,-40,734,609),2342=>array(-40,0,628,609),2343=>array(-1,-40,734,609),2344=>array(-40,-40,694,609),2345=>array(-40,-46,694,609),2346=>array(-40,-40,654,609),2347=>array(-40,-40,828,609),2348=>array(-40,-40,661,609),2349=>array(-40,-40,734,609),2350=>array(-40,-40,734,609),2351=>array(-40,-40,734,609),2352=>array(-40,-40,534,609),2353=>array(-40,-42,534,609),2354=>array(-40,-40,827,609),2355=>array(-40,-1,887,609),2356=>array(-40,-95,887,609),2357=>array(-40,-40,661,609),2358=>array(-40,-40,827,609),2359=>array(-40,-40,654,609),2360=>array(-40,-40,774,609),2361=>array(-40,-210,648,609),2362=>array(46,610,124,802),2363=>array(-40,-40,381,802),2364=>array(-166,-202,-54,-90),2365=>array(93,-40,609,611),2366=>array(-40,-40,381,609),2367=>array(-40,-40,535,893),2368=>array(-373,-40,381,893),2369=>array(-468,-280,-11,-35),2370=>array(-429,-300,-2,-22),2371=>array(-357,-280,-43,-37),2372=>array(-327,-300,30,78),2373=>array(-374,682,-30,883),2374=>array(-534,613,-120,858),2375=>array(-568,607,-130,893),2376=>array(-568,607,-130,922),2377=>array(-125,-40,381,883),2378=>array(-294,-40,381,858),2379=>array(-313,-40,381,893),2380=>array(-313,-40,381,922),2381=>array(-310,-270,0,-77),2382=>array(126,-38,460,610),2383=>array(-324,-40,381,900),2384=>array(-1,-40,875,681),2385=>array(-242,655,-157,900),2386=>array(-400,-125,0,-75),2387=>array(-314,705,-91,876),2388=>array(-240,709,-16,880),2389=>array(-400,630,0,900),2390=>array(-444,-151,2,-48),2391=>array(-444,-310,2,-48),2392=>array(-39,-45,782,610),2393=>array(-40,-54,837,609),2394=>array(-40,-45,734,609),2395=>array(-40,-45,853,609),2396=>array(-40,-92,692,609),2397=>array(-40,-127,648,609),2398=>array(-40,-42,828,609),2399=>array(-40,-42,734,609),2400=>array(-40,-212,1007,609),2401=>array(-40,-291,867,609),2402=>array(-409,-300,75,18),2403=>array(-409,-300,100,121),2404=>array(300,-40,379,609),2405=>array(300,-40,573,609),2406=>array(-1,103,363,466),2407=>array(-1,-212,288,609),2408=>array(-1,-153,438,568),2409=>array(-1,-153,378,580),2410=>array(-1,74,571,609),2411=>array(-6,-96,498,609),2412=>array(-1,-153,438,615),2413=>array(-1,-1,571,609),2414=>array(-40,-40,478,495),2415=>array(-1,-154,485,609),2416=>array(40,273,326,559),2417=>array(145,516,255,626),2418=>array(-1,-40,901,883),2419=>array(-1,-40,901,802),2420=>array(-1,-40,1110,802),2421=>array(-1,-40,1110,900),2422=>array(-1,-151,901,609),2423=>array(-1,-310,901,609),2425=>array(-40,-147,853,609),2426=>array(-39,-38,733,610),2427=>array(-39,-69,693,610),2428=>array(-39,-69,853,610),2429=>array(0,-38,438,569),2430=>array(-39,0,769,610),2431=>array(-39,0,660,610),2433=>array(-318,648,-59,820),2434=>array(47,-28,342,561),2435=>array(78,45,291,565),2437=>array(-20,26,614,588),2438=>array(-20,13,795,678),2439=>array(-25,-43,514,814),2440=>array(-16,22,530,804),2441=>array(-15,92,560,817),2442=>array(-29,85,588,807),2443=>array(16,67,625,689),2444=>array(54,58,466,618),2447=>array(42,27,495,593),2448=>array(44,26,575,879),2451=>array(25,87,496,566),2452=>array(46,88,587,851),2453=>array(-16,33,582,588),2454=>array(15,33,500,679),2455=>array(14,12,505,683),2456=>array(-13,28,489,588),2457=>array(8,44,440,565),2458=>array(-11,78,426,588),2459=>array(-13,-46,487,588),2460=>array(-15,35,612,588),2461=>array(-11,40,573,681),2462=>array(41,27,752,586),2463=>array(-49,104,436,820),2464=>array(-15,72,422,893),2465=>array(-10,91,547,588),2466=>array(-15,103,429,588),2467=>array(23,31,466,678),2468=>array(-13,98,573,588),2469=>array(12,25,502,678),2470=>array(-15,26,500,588),2471=>array(39,12,460,594),2472=>array(-12,16,466,588),2474=>array(30,31,566,678),2475=>array(-15,30,626,588),2476=>array(-18,21,462,588),2477=>array(-15,106,551,588),2478=>array(-15,27,505,588),2479=>array(-15,25,488,588),2480=>array(-18,21,462,588),2482=>array(-15,25,560,588),2486=>array(-50,31,547,678),2487=>array(-15,31,485,588),2488=>array(-15,25,541,588),2489=>array(-20,-54,478,588),2492=>array(-316,-125,-200,-6),2493=>array(-15,-54,478,588),2494=>array(-81,13,223,678),2495=>array(-20,21,520,818),2496=>array(-379,25,225,843),2497=>array(-296,-148,35,127),2498=>array(-243,-205,82,105),2499=>array(-407,-223,-154,111),2500=>array(-317,-300,39,156),2503=>array(-12,46,314,588),2504=>array(-56,41,323,808),2507=>array(-12,13,808,678),2508=>array(-56,13,850,808),2509=>array(-70,-132,163,588),2510=>array(11,49,389,594),2519=>array(-269,15,232,844),2524=>array(-10,-84,547,588),2525=>array(-15,-60,429,588),2527=>array(-15,25,488,588),2528=>array(15,-51,623,688),2529=>array(54,-241,517,618),2530=>array(-378,-299,-111,65),2531=>array(-393,-300,149,128),2534=>array(48,85,444,470),2535=>array(74,26,367,601),2536=>array(34,-51,480,591),2537=>array(-4,67,476,541),2538=>array(38,62,405,603),2539=>array(32,39,486,577),2540=>array(-1,43,463,582),2541=>array(92,30,467,575),2542=>array(5,53,484,581),2543=>array(26,57,448,606),2544=>array(-22,21,462,588),2545=>array(-13,-4,462,588),2546=>array(27,62,409,565),2547=>array(-13,100,375,577),2548=>array(25,55,409,559),2549=>array(41,72,497,602),2550=>array(41,59,525,602),2551=>array(23,77,132,581),2552=>array(21,75,339,582),2553=>array(15,199,291,469),2554=>array(31,375,596,760),2555=>array(42,-170,344,328),2561=>array(-177,639,145,847),2562=>array(-125,655,-13,767),2563=>array(59,-54,327,524),2565=>array(0,-37,817,570),2566=>array(0,-37,1018,570),2567=>array(-37,-36,825,836),2568=>array(-37,-36,896,836),2569=>array(-48,-138,596,840),2570=>array(-48,-268,596,840),2575=>array(-87,17,625,836),2576=>array(0,-37,817,863),2579=>array(-48,0,596,891),2580=>array(0,-37,817,836),2581=>array(-37,0,575,570),2582=>array(-37,-37,687,580),2583=>array(-37,-37,687,570),2584=>array(-37,-37,817,580),2585=>array(-37,-113,625,570),2586=>array(-37,0,625,570),2587=>array(-37,0,736,570),2588=>array(-37,-36,686,570),2589=>array(-37,-113,625,570),2590=>array(-37,14,625,570),2591=>array(-37,17,625,570),2592=>array(-37,17,625,570),2593=>array(-37,-29,596,570),2594=>array(-37,0,625,570),2595=>array(-37,-14,625,570),2596=>array(-37,0,596,570),2597=>array(-37,-37,686,570),2598=>array(-37,16,625,570),2599=>array(-37,-37,687,570),2600=>array(-37,0,663,570),2602=>array(0,-37,687,570),2603=>array(-37,0,607,570),2604=>array(-37,-37,687,570),2605=>array(-37,0,596,570),2606=>array(-37,-37,687,570),2607=>array(-37,-37,817,570),2608=>array(-57,-41,527,570),2610=>array(-37,0,663,570),2611=>array(-37,-89,663,570),2613=>array(-37,15,625,570),2614=>array(-37,-37,687,570),2616=>array(-37,-37,687,570),2617=>array(-49,-28,527,570),2620=>array(-369,-19,-257,93),2622=>array(-37,177,356,570),2623=>array(-37,-37,436,836),2624=>array(-349,-37,356,836),2625=>array(-493,-138,-140,-23),2626=>array(-493,-268,-140,-23),2631=>array(-497,606,-88,836),2632=>array(-507,606,-98,863),2635=>array(-507,569,-122,836),2636=>array(-447,496,-62,836),2637=>array(-157,-197,130,-17),2641=>array(-204,-158,50,-24),2649=>array(-37,-37,687,580),2650=>array(-37,-37,687,570),2651=>array(-37,-36,686,570),2652=>array(-37,-113,596,570),2654=>array(-37,-19,607,570),2662=>array(0,97,340,436),2663=>array(71,-74,270,570),2664=>array(0,-37,410,536),2665=>array(0,-37,354,554),2666=>array(0,70,534,570),2667=>array(0,-37,365,570),2668=>array(0,-11,374,676),2669=>array(0,36,410,561),2670=>array(56,16,466,443),2671=>array(56,16,466,570),2672=>array(-400,630,-120,806),2673=>array(-323,639,-1,827),2674=>array(-37,17,625,570),2675=>array(-48,0,596,840),2676=>array(71,-74,996,900),2677=>array(-226,-200,-97,-23),2689=>array(-386,627,90,900),2690=>array(-238,712,-125,825),2691=>array(84,129,197,555),2693=>array(30,0,1015,614),2694=>array(30,0,1232,614),2695=>array(40,0,603,614),2696=>array(40,0,797,857),2697=>array(40,0,716,846),2698=>array(40,-2,994,860),2699=>array(40,0,931,621),2700=>array(40,0,844,635),2701=>array(30,0,1015,880),2703=>array(30,0,1015,900),2704=>array(30,0,1015,900),2705=>array(30,0,1232,880),2707=>array(30,0,1232,900),2708=>array(30,0,1232,900),2709=>array(30,-2,676,623),2710=>array(30,0,782,618),2711=>array(40,0,690,614),2712=>array(40,0,613,614),2713=>array(30,0,596,613),2714=>array(40,0,760,637),2715=>array(40,0,733,635),2716=>array(40,1,946,630),2717=>array(40,-2,914,634),2718=>array(30,0,794,614),2719=>array(40,0,552,611),2720=>array(40,0,542,620),2721=>array(30,0,509,613),2722=>array(40,0,457,614),2723=>array(40,-173,832,627),2724=>array(40,-1,623,614),2725=>array(40,0,727,617),2726=>array(40,0,524,678),2727=>array(40,0,560,693),2728=>array(40,0,705,614),2730=>array(30,0,609,616),2731=>array(30,-171,684,623),2732=>array(40,0,763,614),2733=>array(40,0,760,615),2734=>array(40,0,666,619),2735=>array(40,0,779,645),2736=>array(40,0,487,633),2738=>array(40,0,716,618),2739=>array(40,0,740,617),2741=>array(40,0,583,614),2742=>array(40,-1,731,614),2743=>array(40,0,519,616),2744=>array(40,0,770,633),2745=>array(40,-188,701,613),2748=>array(-238,-112,-127,1),2749=>array(40,-1,457,615),2750=>array(45,0,205,614),2751=>array(66,0,643,879),2752=>array(-216,0,246,879),2753=>array(-596,-224,-25,1),2754=>array(-244,-223,327,2),2755=>array(-295,-230,23,0),2756=>array(-244,-266,-1,0),2757=>array(-378,644,-69,880),2759=>array(-428,616,-95,900),2760=>array(-521,617,-62,900),2761=>array(-170,0,218,880),2763=>array(-209,0,210,900),2764=>array(-324,0,217,900),2765=>array(-142,-315,70,-37),2768=>array(40,0,1028,825),2784=>array(40,0,1041,616),2785=>array(40,-171,801,633),2786=>array(-372,-310,9,-4),2787=>array(-442,-253,36,0),2790=>array(40,48,562,564),2791=>array(40,0,450,614),2792=>array(40,-2,557,617),2793=>array(40,-1,626,617),2794=>array(40,0,580,666),2795=>array(30,0,617,614),2796=>array(40,-35,520,619),2797=>array(40,0,655,614),2798=>array(40,0,510,610),2799=>array(40,1,552,614),2800=>array(50,0,312,243),2801=>array(50,-124,755,614),2817=>array(-345,659,39,900),2818=>array(15,394,242,632),2819=>array(40,0,349,632),2821=>array(40,0,754,632),2822=>array(40,0,933,632),2823=>array(40,-1,797,631),2824=>array(40,-3,828,631),2825=>array(40,0,798,631),2826=>array(40,-1,817,631),2827=>array(40,-102,772,630),2828=>array(40,0,560,631),2831=>array(35,0,643,631),2832=>array(35,0,965,832),2835=>array(40,0,649,650),2836=>array(40,0,924,830),2837=>array(40,0,699,632),2838=>array(40,0,713,631),2839=>array(40,0,732,631),2840=>array(40,-1,740,631),2841=>array(40,0,788,631),2842=>array(40,0,671,631),2843=>array(40,-1,594,628),2844=>array(40,0,651,631),2845=>array(40,0,639,631),2846=>array(40,0,584,632),2847=>array(40,0,643,631),2848=>array(40,0,627,631),2849=>array(40,0,701,632),2850=>array(40,-35,652,631),2851=>array(40,-4,721,631),2852=>array(40,0,673,631),2853=>array(40,0,713,631),2854=>array(40,0,648,631),2855=>array(40,0,642,631),2856=>array(40,0,649,631),2858=>array(40,0,713,631),2859=>array(40,0,920,631),2860=>array(40,-29,642,631),2861=>array(40,0,752,631),2862=>array(40,-2,713,631),2863=>array(35,0,773,631),2864=>array(40,0,723,632),2866=>array(40,0,835,631),2867=>array(40,0,682,631),2869=>array(40,-29,636,631),2870=>array(40,0,709,631),2871=>array(40,-1,703,631),2872=>array(40,0,592,631),2873=>array(40,-39,543,632),2876=>array(-270,-223,-131,-100),2877=>array(40,0,331,634),2878=>array(50,0,193,631),2879=>array(-592,677,-87,813),2880=>array(-181,0,183,712),2881=>array(-420,-279,132,1),2882=>array(-283,-261,189,0),2883=>array(-275,-300,49,15),2884=>array(-275,-300,49,21),2887=>array(40,0,466,629),2888=>array(40,0,1110,833),2891=>array(40,0,1288,631),2892=>array(40,0,1283,834),2893=>array(-126,-274,76,-6),2902=>array(-719,535,-53,833),2903=>array(-648,0,166,834),2908=>array(40,-223,701,632),2909=>array(40,-223,652,631),2911=>array(35,-149,785,635),2912=>array(40,-150,750,631),2913=>array(40,-166,670,631),2914=>array(-301,-267,-67,0),2915=>array(-279,-315,-10,0),2918=>array(40,1,684,631),2919=>array(50,3,471,631),2920=>array(50,1,448,631),2921=>array(40,0,759,637),2922=>array(35,0,606,633),2923=>array(35,0,589,635),2924=>array(30,0,588,637),2925=>array(30,0,572,630),2926=>array(50,0,487,631),2927=>array(40,0,457,631),2928=>array(35,0,601,634),2929=>array(40,-320,720,644),2930=>array(50,0,193,631),2931=>array(40,0,405,631),2932=>array(40,0,615,631),2933=>array(30,-11,711,598),2934=>array(40,-14,752,584),2935=>array(40,-11,747,598),2946=>array(-420,540,-181,762),2947=>array(8,0,580,452),2949=>array(0,-160,875,644),2950=>array(0,-182,1035,644),2951=>array(0,-148,813,843),2952=>array(0,0,553,468),2953=>array(0,0,455,467),2954=>array(0,2,1087,472),2958=>array(0,-4,565,468),2959=>array(0,-115,565,467),2960=>array(0,-291,654,470),2962=>array(0,-280,717,473),2963=>array(0,-280,717,473),2964=>array(0,-287,1603,469),2965=>array(0,0,640,468),2969=>array(0,0,651,470),2970=>array(0,0,569,468),2972=>array(0,-287,654,470),2974=>array(0,-239,833,468),2975=>array(0,0,551,471),2979=>array(0,-2,1193,468),2980=>array(0,-254,651,468),2984=>array(0,-243,523,468),2985=>array(0,-2,873,469),2986=>array(0,0,431,471),2990=>array(0,0,588,471),2991=>array(0,0,626,471),2992=>array(0,-115,414,468),2993=>array(0,-249,511,474),2994=>array(0,-2,611,468),2995=>array(0,0,768,468),2996=>array(0,-284,607,471),2997=>array(0,0,694,470),2998=>array(0,0,718,473),2999=>array(0,-250,827,468),3000=>array(0,0,830,471),3001=>array(0,-260,1026,466),3006=>array(0,1,414,468),3007=>array(-406,0,125,707),3008=>array(-337,468,26,711),3009=>array(-214,208,364,476),3010=>array(-151,7,584,681),3014=>array(0,-2,653,691),3015=>array(0,-1,461,692),3016=>array(0,-2,802,468),3018=>array(0,-2,1123,691),3019=>array(0,-1,947,692),3020=>array(0,-2,1471,691),3021=>array(-480,621,-301,799),3024=>array(0,-280,717,473),3031=>array(40,1,808,469),3046=>array(32,0,468,456),3047=>array(0,0,640,468),3048=>array(0,2,757,470),3049=>array(0,0,601,468),3050=>array(0,0,721,470),3051=>array(0,-239,773,468),3052=>array(0,-16,789,468),3053=>array(0,-4,565,468),3054=>array(0,-160,875,644),3055=>array(0,0,735,468),3056=>array(0,0,511,650),3057=>array(0,1,661,474),3058=>array(0,-150,834,468),3059=>array(0,0,594,468),3060=>array(0,0,815,774),3061=>array(0,-200,1513,654),3062=>array(0,-270,592,473),3063=>array(0,0,906,469),3064=>array(0,-250,1287,571),3065=>array(0,-239,773,774),3066=>array(0,-243,695,774),3330=>array(77,-12,416,328),3331=>array(56,8,222,428),3333=>array(76,-10,1055,448),3334=>array(76,-160,1192,448),3335=>array(76,-160,792,450),3336=>array(76,-160,1469,450),3337=>array(72,-160,570,450),3338=>array(72,-160,1244,450),3339=>array(79,-182,674,448),3340=>array(82,-10,895,446),3342=>array(78,-194,1006,450),3343=>array(78,-192,1008,446),3344=>array(76,-194,1538,450),3346=>array(78,-12,586,450),3347=>array(78,-12,980,450),3348=>array(78,-12,1253,450),3349=>array(74,-10,776,448),3350=>array(77,-12,798,450),3351=>array(77,-12,688,448),3352=>array(76,0,1095,450),3353=>array(76,-12,811,450),3354=>array(74,0,728,440),3355=>array(72,-10,963,448),3356=>array(74,-12,704,448),3357=>array(76,-12,1245,448),3358=>array(77,-12,1106,450),3359=>array(74,-10,466,448),3360=>array(77,-10,530,448),3361=>array(77,-12,984,450),3362=>array(77,-14,1028,450),3363=>array(76,-12,1099,450),3364=>array(76,-10,780,450),3365=>array(77,0,732,450),3366=>array(77,-16,484,448),3367=>array(77,-12,736,448),3368=>array(79,-10,746,450),3369=>array(40,-12,746,450),3370=>array(74,-10,780,440),3371=>array(74,-10,962,450),3372=>array(74,-12,1022,450),3373=>array(77,-12,499,450),3374=>array(77,0,511,450),3375=>array(79,-10,790,448),3376=>array(77,-12,530,452),3377=>array(76,-10,512,448),3378=>array(77,0,712,448),3379=>array(74,-180,556,448),3380=>array(77,-8,519,450),3381=>array(76,-10,716,448),3382=>array(77,-10,786,450),3383=>array(74,-10,921,448),3384=>array(72,-6,977,454),3385=>array(74,-10,978,446),3386=>array(75,-200,780,440),3389=>array(72,-158,380,602),3390=>array(77,-12,400,450),3391=>array(-110,0,184,676),3392=>array(-121,0,175,676),3393=>array(44,-246,269,448),3394=>array(40,-231,252,421),3395=>array(74,-246,381,436),3396=>array(59,-246,381,436),3398=>array(76,-12,540,450),3399=>array(76,-10,478,448),3400=>array(76,-12,1070,450),3402=>array(-604,-12,460,450),3403=>array(-534,-12,460,450),3404=>array(-604,-12,747,450),3405=>array(-47,450,232,612),3406=>array(62,465,160,564),3415=>array(76,-12,677,450),3424=>array(79,-181,674,448),3425=>array(73,-147,1006,451),3426=>array(-416,-276,-30,-45),3427=>array(-504,-300,-47,-30),3430=>array(73,0,558,363),3431=>array(70,-153,660,451),3432=>array(78,-10,674,450),3433=>array(74,-10,933,452),3434=>array(74,-7,671,656),3435=>array(74,-193,698,591),3436=>array(81,-190,704,456),3437=>array(78,-190,694,453),3438=>array(81,-190,678,451),3439=>array(81,-13,684,619),3440=>array(0,-190,981,452),3441=>array(74,-190,695,456),3442=>array(74,-10,1056,553),3443=>array(60,152,660,448),3444=>array(76,-12,664,603),3445=>array(76,-12,870,603),3449=>array(77,-10,864,448),3450=>array(77,-12,1137,604),3451=>array(77,-10,776,603),3452=>array(78,-12,534,604),3453=>array(76,-10,860,601),3454=>array(76,-10,780,603),3455=>array(74,-11,866,602),3458=>array(40,181,214,354),3459=>array(40,61,214,485),3461=>array(40,-300,586,546),3462=>array(40,-300,882,546),3463=>array(40,-300,908,546),3464=>array(40,-300,907,546),3465=>array(40,-180,586,535),3466=>array(40,0,609,833),3467=>array(40,-252,743,487),3468=>array(40,-252,1069,487),3469=>array(40,0,979,535),3470=>array(40,0,1271,535),3471=>array(40,0,1010,635),3472=>array(40,0,1437,635),3473=>array(40,0,637,744),3474=>array(40,0,746,826),3475=>array(40,0,1274,744),3476=>array(40,0,701,726),3477=>array(40,0,701,724),3478=>array(40,-1,1130,726),3482=>array(40,0,854,535),3483=>array(40,-11,675,726),3484=>array(40,0,675,535),3485=>array(40,0,679,535),3486=>array(40,0,701,726),3487=>array(40,0,794,535),3488=>array(40,0,679,726),3489=>array(40,0,655,727),3490=>array(40,0,655,727),3491=>array(40,0,1262,726),3492=>array(40,-274,985,535),3493=>array(40,-274,899,535),3494=>array(40,0,655,727),3495=>array(40,0,679,726),3496=>array(40,0,637,744),3497=>array(40,0,701,726),3498=>array(40,0,637,743),3499=>array(20,0,1083,682),3500=>array(41,0,701,727),3501=>array(40,0,739,535),3502=>array(40,0,637,744),3503=>array(40,-274,424,535),3504=>array(40,0,701,726),3505=>array(20,0,881,535),3507=>array(40,-274,424,535),3508=>array(40,0,637,535),3509=>array(40,0,637,744),3510=>array(40,0,675,726),3511=>array(40,0,747,535),3512=>array(40,0,679,726),3513=>array(40,0,701,726),3514=>array(40,0,679,535),3515=>array(30,0,592,741),3517=>array(40,-252,743,465),3520=>array(40,0,679,726),3521=>array(40,0,675,535),3522=>array(40,0,637,535),3523=>array(40,0,679,535),3524=>array(40,0,747,535),3525=>array(40,-252,743,465),3526=>array(40,0,637,535),3530=>array(-180,486,0,827),3535=>array(20,43,289,491),3536=>array(20,-170,319,376),3537=>array(20,-170,319,376),3538=>array(-594,515,-57,823),3539=>array(-572,515,-35,823),3540=>array(-681,-285,-40,0),3542=>array(-681,-285,-40,0),3544=>array(20,43,289,491),3545=>array(40,0,671,535),3546=>array(40,0,1062,827),3547=>array(40,0,1313,535),3548=>array(40,0,1238,535),3549=>array(40,0,1235,826),3550=>array(40,0,1252,535),3551=>array(20,43,421,491),3570=>array(20,43,619,491),3571=>array(40,43,441,491),3572=>array(40,81,908,369),3585=>array(58,0,468,527),3586=>array(46,0,408,531),3587=>array(46,0,470,530),3588=>array(58,0,468,527),3589=>array(58,0,480,527),3590=>array(46,0,519,530),3591=>array(24,0,353,527),3592=>array(32,0,424,527),3593=>array(46,0,558,527),3594=>array(46,0,408,562),3595=>array(46,0,470,562),3596=>array(46,-9,652,527),3597=>array(46,-273,653,527),3598=>array(46,-226,504,527),3599=>array(46,-226,504,527),3600=>array(32,-300,425,524),3601=>array(46,0,573,532),3602=>array(58,0,667,527),3603=>array(46,-9,744,527),3604=>array(58,0,467,527),3605=>array(58,0,478,527),3606=>array(48,-9,458,527),3607=>array(46,0,513,532),3608=>array(58,0,444,524),3609=>array(46,0,557,527),3610=>array(48,0,490,527),3611=>array(48,0,490,746),3612=>array(64,0,492,527),3613=>array(64,0,492,747),3614=>array(46,0,540,527),3615=>array(46,0,540,747),3616=>array(46,-10,504,527),3617=>array(58,0,478,528),3618=>array(64,-9,432,529),3619=>array(32,-10,418,524),3620=>array(56,-225,466,527),3621=>array(56,-8,448,527),3622=>array(46,-226,504,527),3623=>array(24,-8,414,529),3624=>array(58,0,497,556),3625=>array(46,0,568,527),3626=>array(58,-8,479,555),3627=>array(46,0,514,534),3628=>array(46,0,635,725),3629=>array(58,-9,450,527),3630=>array(58,-9,450,569),3631=>array(46,0,386,532),3632=>array(46,-2,356,526),3633=>array(-167,591,143,800),3634=>array(24,0,314,527),3635=>array(-72,0,351,776),3636=>array(-408,546,-82,748),3637=>array(-409,545,-82,801),3638=>array(-408,544,-82,800),3639=>array(-409,544,-82,800),3640=>array(-220,-300,-64,-52),3641=>array(-339,-300,-64,-46),3642=>array(-158,-167,-55,-64),3647=>array(16,-129,551,737),3648=>array(64,-9,240,527),3649=>array(64,-9,475,527),3650=>array(0,-9,401,900),3651=>array(0,-9,380,900),3652=>array(-43,-12,378,900),3653=>array(-20,-224,269,527),3654=>array(46,-226,389,532),3655=>array(-390,567,-46,886),3656=>array(-154,674,-86,847),3657=>array(-338,687,-64,869),3658=>array(-439,686,-64,868),3659=>array(-202,689,-55,837),3660=>array(-250,685,-16,894),3661=>array(-226,697,-83,848),3662=>array(-303,609,-83,900),3663=>array(66,0,592,526),3664=>array(56,-9,472,385),3665=>array(56,-11,472,385),3666=>array(1,-12,515,600),3667=>array(56,-11,538,385),3668=>array(57,-1,586,602),3669=>array(56,-1,596,587),3670=>array(-25,-9,423,599),3671=>array(56,-14,658,608),3672=>array(56,-1,572,598),3673=>array(56,-5,533,598),3674=>array(46,0,548,531),3675=>array(33,-11,1355,534),4256=>array(77,10,462,683),4257=>array(80,18,466,694),4258=>array(77,11,562,686),4259=>array(77,10,644,685),4260=>array(78,10,475,684),4261=>array(77,10,468,685),4262=>array(77,11,463,686),4263=>array(77,11,703,685),4264=>array(77,10,462,685),4265=>array(77,14,464,683),4266=>array(78,0,845,679),4267=>array(77,11,462,685),4268=>array(76,10,462,687),4269=>array(77,12,703,685),4270=>array(77,11,462,685),4271=>array(77,10,462,683),4272=>array(76,11,705,684),4273=>array(29,11,464,687),4274=>array(68,10,560,685),4275=>array(77,10,560,686),4276=>array(71,11,576,685),4277=>array(76,10,460,688),4278=>array(77,10,645,685),4279=>array(77,14,463,685),4280=>array(77,11,511,686),4281=>array(77,11,463,687),4282=>array(77,10,508,685),4283=>array(76,11,462,687),4284=>array(77,10,557,685),4285=>array(77,10,453,685),4286=>array(30,11,464,689),4287=>array(77,-133,559,686),4288=>array(78,11,463,686),4289=>array(75,11,460,685),4290=>array(82,9,563,685),4291=>array(77,14,468,686),4292=>array(77,10,469,685),4293=>array(77,12,462,685),4304=>array(33,10,421,494),4305=>array(33,11,419,687),4306=>array(33,-270,511,396),4307=>array(33,-274,596,395),4308=>array(33,-272,418,397),4309=>array(33,-273,419,396),4310=>array(33,10,419,685),4311=>array(33,10,669,400),4312=>array(33,11,418,396),4313=>array(33,-274,419,394),4314=>array(23,-272,789,396),4315=>array(33,10,418,682),4316=>array(33,10,420,686),4317=>array(33,11,662,396),4318=>array(33,10,416,684),4319=>array(33,-272,415,396),4320=>array(33,10,661,683),4321=>array(33,10,468,686),4322=>array(33,-272,511,395),4323=>array(0,-271,483,398),4324=>array(33,-272,527,400),4325=>array(33,-272,417,687),4326=>array(33,-271,594,395),4327=>array(33,-275,419,396),4328=>array(23,10,457,685),4329=>array(33,10,419,686),4330=>array(33,-271,452,398),4331=>array(33,10,419,686),4332=>array(1,-272,485,686),4333=>array(33,-271,410,684),4334=>array(33,10,467,686),4335=>array(1,-271,582,394),4336=>array(33,9,422,689),4337=>array(33,10,418,684),4338=>array(1,10,482,396),4339=>array(1,-268,384,396),4340=>array(33,-271,420,501),4341=>array(33,11,418,684),4342=>array(33,-279,708,686),4343=>array(33,-273,419,396),4344=>array(33,-273,419,400),4345=>array(33,-256,511,410),4346=>array(33,-198,454,396),4347=>array(12,0,402,573),4348=>array(24,203,315,711),4608=>array(69,-1,492,531),4609=>array(69,-1,747,531),4610=>array(14,-41,544,600),4611=>array(14,1,470,600),4612=>array(14,-6,480,601),4613=>array(10,-10,572,609),4614=>array(69,-1,681,551),4616=>array(49,1,545,604),4617=>array(50,1,705,604),4618=>array(49,-42,764,604),4619=>array(56,1,547,604),4620=>array(50,1,722,604),4621=>array(45,-14,589,597),4622=>array(49,1,885,597),4623=>array(57,-138,795,604),4624=>array(29,1,772,586),4625=>array(29,1,1028,586),4626=>array(29,-42,1025,586),4627=>array(29,1,771,585),4628=>array(29,1,952,586),4629=>array(29,1,772,658),4630=>array(29,1,771,585),4631=>array(29,-140,962,585),4632=>array(57,92,861,421),4633=>array(58,92,1103,421),4634=>array(46,-42,1064,608),4635=>array(46,1,919,612),4636=>array(43,0,987,612),4637=>array(59,0,913,612),4638=>array(77,1,912,613),4639=>array(46,-140,1044,602),4640=>array(62,85,774,464),4641=>array(61,86,1010,464),4642=>array(14,-41,844,569),4643=>array(14,1,690,569),4644=>array(67,0,837,580),4645=>array(28,1,907,579),4646=>array(59,1,774,580),4647=>array(15,-138,839,568),4648=>array(48,-9,538,555),4649=>array(82,1,592,550),4650=>array(49,3,534,550),4651=>array(48,-16,708,551),4652=>array(49,0,654,555),4653=>array(45,-1,538,551),4654=>array(45,-1,638,585),4655=>array(48,-15,735,635),4656=>array(45,-5,532,584),4657=>array(45,-5,787,584),4658=>array(44,-37,785,584),4659=>array(44,-5,532,584),4660=>array(45,-5,719,584),4661=>array(45,-5,532,583),4662=>array(45,-5,532,584),4663=>array(46,-140,781,583),4664=>array(21,-5,624,639),4665=>array(21,-5,781,639),4666=>array(21,-36,816,639),4667=>array(21,-5,624,639),4668=>array(21,-5,733,639),4669=>array(36,-5,650,639),4670=>array(21,-5,624,639),4671=>array(40,-122,796,649),4672=>array(64,-3,635,583),4673=>array(64,-3,654,583),4674=>array(64,-29,640,583),4675=>array(21,-17,692,583),4676=>array(64,-3,635,583),4677=>array(63,-3,635,657),4678=>array(65,1,648,563),4680=>array(64,-3,793,583),4682=>array(64,-3,1009,583),4683=>array(62,-66,634,583),4684=>array(7,-148,634,583),4685=>array(64,-3,950,583),4688=>array(19,-3,682,654),4689=>array(19,-3,682,654),4690=>array(19,-29,682,654),4691=>array(21,-17,741,654),4692=>array(19,-3,682,654),4693=>array(36,-3,694,677),4694=>array(65,1,648,696),4696=>array(19,-3,792,654),4698=>array(20,-3,1009,654),4699=>array(19,-140,682,654),4700=>array(7,-177,682,654),4701=>array(19,-3,950,654),4704=>array(16,-4,489,564),4705=>array(15,-4,727,564),4706=>array(16,-38,742,564),4707=>array(16,-4,489,564),4708=>array(16,-4,683,564),4709=>array(3,-4,737,564),4710=>array(16,-4,489,564),4711=>array(16,-140,707,564),4712=>array(-38,-4,567,712),4713=>array(-38,-4,727,712),4714=>array(-38,-38,742,712),4715=>array(-38,-4,567,712),4716=>array(-38,-4,683,712),4717=>array(3,-4,815,712),4718=>array(-38,-4,567,712),4719=>array(-38,-140,737,712),4720=>array(37,-4,692,583),4721=>array(37,-3,692,583),4722=>array(37,-29,692,583),4723=>array(35,-27,764,583),4724=>array(37,-3,692,583),4725=>array(37,-3,692,657),4726=>array(27,-8,663,563),4727=>array(29,-146,692,583),4728=>array(59,-2,726,634),4729=>array(59,-2,726,634),4730=>array(59,-39,711,634),4731=>array(49,-27,790,634),4732=>array(58,-2,726,622),4733=>array(88,1,765,774),4734=>array(56,1,691,737),4735=>array(59,-146,726,634),4736=>array(31,1,556,579),4737=>array(30,1,759,579),4738=>array(30,-42,767,579),4739=>array(4,-37,549,579),4740=>array(31,1,720,579),4741=>array(55,1,527,580),4742=>array(48,1,846,543),4744=>array(31,1,913,579),4746=>array(31,1,918,579),4747=>array(17,-96,596,579),4748=>array(31,-125,691,579),4749=>array(31,1,830,579),4752=>array(49,-2,346,578),4753=>array(107,-2,532,577),4754=>array(108,-20,476,577),4755=>array(63,1,533,553),4756=>array(93,1,418,577),4757=>array(50,-2,519,551),4758=>array(63,1,614,543),4759=>array(37,-140,619,553),4760=>array(73,-2,705,634),4761=>array(72,-2,736,634),4762=>array(72,-39,709,634),4763=>array(51,1,667,663),4764=>array(43,1,677,649),4765=>array(54,-3,630,660),4766=>array(51,0,718,663),4767=>array(54,-140,648,670),4768=>array(47,0,543,568),4769=>array(47,0,711,568),4770=>array(47,-41,810,568),4771=>array(47,1,543,568),4772=>array(47,0,731,568),4773=>array(40,0,543,588),4774=>array(47,1,544,568),4775=>array(-33,0,654,641),4776=>array(66,-4,518,621),4777=>array(65,-4,721,621),4778=>array(66,-37,756,621),4779=>array(74,-4,518,621),4780=>array(65,-4,683,621),4781=>array(78,-3,518,621),4782=>array(66,-3,518,621),4784=>array(62,1,945,579),4786=>array(62,1,990,579),4787=>array(81,-76,623,579),4788=>array(81,-77,727,579),4789=>array(62,1,872,579),4792=>array(10,-4,693,663),4793=>array(10,-4,896,663),4794=>array(10,-37,931,667),4795=>array(10,-4,693,663),4796=>array(10,-4,858,663),4797=>array(10,-3,693,663),4798=>array(10,-3,693,663),4800=>array(10,-4,1078,663),4802=>array(10,-4,1125,663),4803=>array(-36,-76,711,663),4804=>array(-36,-76,815,663),4805=>array(10,-4,1036,663),4808=>array(64,89,708,474),4809=>array(64,49,871,473),4810=>array(55,-20,643,563),4811=>array(55,-2,643,563),4812=>array(75,-2,630,564),4813=>array(64,89,964,473),4814=>array(52,1,658,553),4816=>array(78,-17,517,509),4817=>array(78,-18,764,509),4818=>array(60,-42,739,599),4819=>array(60,1,560,599),4820=>array(59,0,665,590),4821=>array(65,-13,460,560),4822=>array(67,1,555,590),4824=>array(34,-2,478,539),4825=>array(34,-2,677,539),4826=>array(34,-39,698,539),4827=>array(34,-2,478,539),4828=>array(34,-2,654,539),4829=>array(24,-3,682,539),4830=>array(34,-2,478,539),4831=>array(34,-140,693,538),4832=>array(38,-3,929,565),4833=>array(38,-2,929,565),4834=>array(38,-39,931,565),4835=>array(38,-3,929,565),4836=>array(38,-2,929,565),4837=>array(72,-3,988,655),4838=>array(38,-2,929,564),4839=>array(38,-140,929,565),4840=>array(48,0,446,552),4841=>array(48,0,488,552),4842=>array(48,1,646,552),4843=>array(37,-34,591,580),4844=>array(48,1,588,552),4845=>array(52,-15,617,580),4846=>array(48,1,666,552),4848=>array(37,15,562,566),4849=>array(43,-2,839,580),4850=>array(43,-39,815,580),4851=>array(43,-2,608,580),4852=>array(37,-5,675,566),4853=>array(37,15,709,566),4854=>array(81,1,751,581),4855=>array(43,-140,783,580),4856=>array(37,-121,620,558),4857=>array(22,-118,751,573),4858=>array(23,-154,729,573),4859=>array(22,-118,520,573),4860=>array(37,-173,675,558),4861=>array(37,-121,766,558),4862=>array(52,-116,722,573),4863=>array(22,-168,694,630),4864=>array(37,-121,689,647),4865=>array(22,-118,751,661),4866=>array(23,-154,729,661),4867=>array(22,-118,660,661),4868=>array(37,-173,689,647),4869=>array(37,-121,766,647),4870=>array(52,-116,722,661),4871=>array(11,-168,694,704),4872=>array(35,-2,432,565),4873=>array(35,-2,642,565),4874=>array(35,-39,655,565),4875=>array(21,-60,578,562),4876=>array(35,-3,581,565),4877=>array(39,-3,548,565),4878=>array(51,-3,490,592),4880=>array(35,-2,832,565),4882=>array(35,-3,828,565),4883=>array(20,0,500,565),4884=>array(37,-106,638,565),4885=>array(35,-3,741,565),4888=>array(-10,-2,596,712),4889=>array(-10,-2,700,712),4890=>array(-10,-39,713,712),4891=>array(21,-60,654,712),4892=>array(-10,-2,640,712),4893=>array(-9,-3,596,712),4894=>array(-24,-3,582,654),4896=>array(63,-3,794,428),4897=>array(63,-3,1011,428),4898=>array(63,-42,1015,426),4899=>array(62,-2,753,534),4900=>array(63,-3,983,426),4901=>array(49,1,710,532),4902=>array(63,-21,766,476),4903=>array(63,-169,1013,401),4904=>array(63,-3,1065,448),4905=>array(63,-3,1121,448),4906=>array(63,-97,1131,448),4907=>array(42,-3,993,534),4908=>array(63,-3,1274,448),4909=>array(52,0,990,524),4910=>array(63,-21,1037,477),4911=>array(63,-175,1129,419),4912=>array(70,0,566,606),4913=>array(71,1,743,606),4914=>array(70,-41,805,606),4915=>array(56,1,566,606),4916=>array(70,0,731,606),4917=>array(70,0,742,606),4918=>array(70,1,537,606),4919=>array(56,-138,769,606),4920=>array(70,0,566,522),4921=>array(71,1,743,522),4922=>array(70,-41,805,522),4923=>array(56,1,566,522),4924=>array(70,0,731,522),4925=>array(70,0,742,522),4926=>array(70,1,537,522),4927=>array(56,-138,769,522),4928=>array(90,-19,488,531),4929=>array(91,-18,749,531),4930=>array(34,-31,577,550),4931=>array(34,1,432,550),4932=>array(34,1,516,550),4933=>array(65,-11,446,560),4934=>array(67,1,555,590),4936=>array(20,-23,712,585),4937=>array(73,1,655,583),4938=>array(20,-26,671,585),4939=>array(73,1,650,583),4940=>array(20,-81,825,585),4941=>array(49,1,650,551),4942=>array(42,-8,683,586),4943=>array(34,-140,650,583),4944=>array(38,-3,722,612),4945=>array(38,-4,722,612),4946=>array(38,-42,722,612),4947=>array(9,-47,779,601),4948=>array(38,-3,722,612),4949=>array(67,-2,751,613),4950=>array(29,-3,808,612),4951=>array(38,-126,722,612),4952=>array(49,4,685,625),4953=>array(46,-29,920,693),4954=>array(20,-26,683,625),4961=>array(48,153,184,509),4962=>array(166,153,533,509),4963=>array(58,88,348,580),4964=>array(58,50,349,645),4965=>array(59,105,466,557),4966=>array(48,153,465,509),4967=>array(48,40,184,622),4968=>array(48,40,650,622),4969=>array(50,-140,636,648),4970=>array(35,-140,562,662),4971=>array(76,-140,589,663),4972=>array(76,-140,589,663),4973=>array(50,-140,563,663),4974=>array(19,-160,562,651),4975=>array(79,-160,655,651),4976=>array(81,-166,706,657),4977=>array(79,-140,591,663),4978=>array(50,-160,562,651),4979=>array(37,-156,663,660),4980=>array(102,-156,677,660),4981=>array(72,-154,658,648),4982=>array(54,-154,508,648),4983=>array(67,-156,722,660),4984=>array(49,-156,645,660),4985=>array(37,-154,866,648),4986=>array(50,-156,547,660),4987=>array(21,-156,547,660),4988=>array(48,-156,825,660),5024=>array(18,0,687,662),5025=>array(19,-9,654,662),5026=>array(8,0,584,662),5027=>array(0,-9,640,662),5028=>array(28,-9,778,671),5029=>array(-3,0,277,670),5030=>array(32,-14,492,676),5031=>array(37,-14,517,676),5032=>array(20,0,440,662),5033=>array(24,-18,692,662),5034=>array(-12,0,679,674),5035=>array(-1,-14,359,662),5036=>array(18,0,603,662),5037=>array(3,10,685,672),5038=>array(37,0,437,676),5039=>array(-12,-14,573,667),5040=>array(18,0,448,662),5041=>array(18,0,552,662),5042=>array(6,-14,706,676),5043=>array(-12,-11,915,662),5044=>array(12,-14,482,676),5045=>array(-9,0,510,676),5046=>array(20,-14,632,676),5047=>array(16,0,867,662),5048=>array(40,0,481,676),5049=>array(-3,-14,778,670),5050=>array(21,-14,933,676),5051=>array(18,0,701,662),5052=>array(-3,-13,571,662),5053=>array(19,-14,709,662),5054=>array(20,-14,674,676),5055=>array(-6,-9,614,662),5056=>array(19,-14,696,676),5057=>array(-12,-14,708,680),5058=>array(18,0,600,662),5059=>array(21,0,609,662),5060=>array(9,0,541,680),5061=>array(20,-14,886,676),5062=>array(44,0,620,662),5063=>array(-7,-14,653,680),5064=>array(17,-14,657,680),5065=>array(-2,0,935,671),5066=>array(-6,-18,654,680),5067=>array(22,-14,519,680),5068=>array(-2,-14,669,662),5069=>array(13,-14,703,680),5070=>array(-11,0,505,662),5071=>array(19,0,545,662),5072=>array(1,0,512,662),5073=>array(11,-14,663,680),5074=>array(21,0,600,662),5075=>array(-2,-14,518,662),5076=>array(-12,-11,949,662),5077=>array(26,-14,519,680),5078=>array(-2,-14,578,662),5079=>array(-12,-18,628,660),5080=>array(-12,-18,628,660),5081=>array(-12,-11,669,662),5082=>array(31,-14,480,676),5083=>array(28,-14,789,680),5084=>array(-6,-9,634,671),5085=>array(-12,0,574,675),5086=>array(18,0,604,662),5087=>array(20,-14,625,676),5088=>array(15,-14,655,662),5089=>array(-12,-14,688,676),5090=>array(19,0,545,662),5091=>array(25,-14,600,680),5092=>array(13,0,743,660),5093=>array(18,0,752,662),5094=>array(18,0,707,662),5095=>array(8,-14,468,662),5096=>array(22,-14,782,680),5097=>array(20,-14,800,680),5098=>array(8,-14,768,680),5099=>array(25,-14,665,680),5100=>array(28,-14,688,680),5101=>array(9,-14,490,680),5102=>array(26,-14,486,680),5103=>array(-7,-14,695,680),5104=>array(-12,-101,528,680),5105=>array(-12,-9,752,662),5106=>array(-12,0,610,680),5107=>array(20,-14,808,677),5108=>array(17,0,593,662),5920=>array(0,0,502,700),5921=>array(0,0,502,700),5922=>array(3,8,497,693),5923=>array(15,2,454,687),5924=>array(6,4,480,693),5925=>array(69,0,502,700),5926=>array(9,1,543,701),5927=>array(5,0,502,700),5928=>array(11,4,495,693),5929=>array(4,0,502,699),5930=>array(3,8,502,688),5931=>array(3,0,502,700),5932=>array(6,4,480,693),5933=>array(0,357,487,398),5934=>array(6,-102,480,693),5935=>array(0,0,784,702),5936=>array(6,-102,480,693),5937=>array(22,0,502,700),5938=>array(-275,715,-56,756),5939=>array(-279,-1,-60,40),5940=>array(-668,-177,91,703),5941=>array(65,11,192,696),5942=>array(65,11,352,696),6480=>array(19,0,449,557),6481=>array(39,-3,454,562),6482=>array(47,0,469,557),6483=>array(46,-8,593,555),6484=>array(41,-3,602,556),6485=>array(66,0,538,555),6486=>array(52,-4,642,554),6487=>array(52,-4,642,554),6488=>array(62,-10,526,557),6489=>array(63,-5,486,558),6490=>array(59,-6,629,559),6491=>array(58,-5,475,557),6492=>array(59,-190,607,552),6493=>array(46,-5,465,545),6494=>array(63,-109,632,557),6495=>array(41,-109,604,556),6496=>array(50,-221,439,559),6497=>array(41,-202,587,559),6498=>array(66,0,497,555),6499=>array(45,-1,200,897),6500=>array(58,0,428,894),6501=>array(58,0,428,894),6502=>array(58,-230,428,894),6503=>array(58,-225,405,557),6504=>array(58,-221,397,557),6505=>array(58,-287,428,560),6506=>array(58,-237,432,894),6507=>array(60,-237,433,894),6508=>array(70,0,449,886),6509=>array(57,-108,615,559),6512=>array(43,0,583,557),6513=>array(61,0,438,558),6514=>array(61,0,529,557),6515=>array(52,-4,446,564),6516=>array(54,0,450,557),6656=>array(57,37,720,476),6657=>array(61,4,844,602),6658=>array(53,18,638,536),6659=>array(47,4,740,415),6660=>array(61,34,844,602),6661=>array(65,0,611,601),6662=>array(49,45,767,466),6663=>array(44,25,814,547),6664=>array(36,20,702,430),6665=>array(49,45,767,466),6666=>array(36,0,702,430),6667=>array(26,9,834,549),6668=>array(23,20,900,578),6669=>array(36,24,755,427),6670=>array(23,15,1081,404),6671=>array(41,14,1138,371),6672=>array(17,2,1042,367),6673=>array(60,28,634,525),6674=>array(28,17,1127,496),6675=>array(17,10,1042,367),6676=>array(79,19,593,457),6677=>array(17,2,1042,367),6678=>array(53,21,958,454),6679=>array(-662,520,-525,657),6680=>array(-232,-194,-95,-57),6681=>array(0,-67,388,479),6682=>array(2,5,537,412),6683=>array(-691,525,-482,882),6686=>array(2,7,554,458),6687=>array(60,0,463,698),7424=>array(5,0,492,460),7425=>array(5,0,644,450),7426=>array(33,-10,627,460),7427=>array(10,0,431,450),7428=>array(25,-10,444,461),7429=>array(10,0,500,450),7430=>array(10,0,500,450),7431=>array(10,0,432,450),7432=>array(20,-10,378,461),7433=>array(25,-199,262,484),7434=>array(0,-12,292,450),7435=>array(10,0,508,450),7436=>array(10,0,434,450),7437=>array(10,0,632,450),7438=>array(10,-8,529,450),7439=>array(25,-10,484,461),7440=>array(7,-9,413,455),7441=>array(18,-2,489,440),7442=>array(18,28,489,416),7443=>array(5,-5,668,436),7444=>array(24,-10,684,460),7445=>array(23,-10,349,454),7446=>array(22,229,461,460),7447=>array(22,-13,461,218),7448=>array(10,0,401,450),7449=>array(18,-1,483,450),7450=>array(20,0,484,450),7451=>array(10,0,403,450),7452=>array(3,-14,509,450),7453=>array(14,2,474,472),7454=>array(14,1,646,472),7455=>array(20,-83,481,677),7456=>array(5,-8,497,450),7457=>array(5,-14,684,450),7458=>array(10,0,429,450),7459=>array(9,-10,333,444),7460=>array(39,-10,412,675),7461=>array(6,-7,672,670),7462=>array(10,0,368,444),7463=>array(10,0,474,452),7464=>array(10,0,468,444),7465=>array(10,0,363,444),7466=>array(10,0,518,448),7467=>array(6,-9,447,444),7468=>array(8,390,495,850),7469=>array(5,390,644,840),7470=>array(10,390,431,840),7471=>array(10,390,431,840),7472=>array(10,390,500,840),7473=>array(10,390,432,840),7474=>array(5,390,427,840),7475=>array(10,376,484,851),7476=>array(8,390,519,840),7477=>array(13,390,248,840),7478=>array(0,378,292,840),7479=>array(10,390,508,840),7480=>array(10,390,434,840),7481=>array(8,390,630,840),7482=>array(8,382,527,840),7483=>array(10,382,529,840),7484=>array(12,380,471,851),7485=>array(12,380,338,844),7486=>array(10,390,401,840),7487=>array(10,390,474,840),7488=>array(8,390,401,840),7489=>array(10,376,516,840),7490=>array(5,376,684,840),7491=>array(21,382,295,698),7492=>array(2,382,276,698),7493=>array(16,382,327,698),7494=>array(22,382,421,698),7495=>array(2,382,315,846),7496=>array(16,382,327,845),7497=>array(15,382,283,698),7498=>array(15,380,283,696),7499=>array(12,382,253,698),7500=>array(7,381,248,697),7501=>array(17,243,313,698),7502=>array(11,233,169,690),7503=>array(5,390,337,845),7504=>array(11,390,517,698),7505=>array(10,243,285,699),7506=>array(17,382,315,698),7507=>array(15,382,275,697),7508=>array(22,576,461,807),7509=>array(22,380,461,611),7510=>array(3,245,315,698),7511=>array(9,382,186,776),7512=>array(6,382,319,690),7513=>array(8,390,316,703),7514=>array(11,383,517,691),7515=>array(13,382,318,690),7516=>array(3,381,437,822),7517=>array(43,253,325,841),7518=>array(12,239,309,699),7519=>array(29,381,329,840),7520=>array(26,239,404,699),7521=>array(12,199,309,649),7522=>array(11,-150,169,307),7523=>array(2,-150,222,158),7524=>array(6,-158,319,150),7525=>array(13,-158,318,150),7526=>array(43,-284,325,304),7527=>array(12,-300,309,160),7528=>array(33,-298,327,160),7529=>array(26,-298,404,162),7530=>array(12,-290,309,160),7531=>array(9,-10,744,460),7532=>array(-68,-10,468,683),7533=>array(27,-10,541,683),7534=>array(-8,0,383,683),7535=>array(9,0,780,460),7536=>array(7,0,486,460),7537=>array(-48,-217,470,460),7538=>array(-34,0,335,460),7539=>array(-9,0,384,461),7540=>array(10,-10,356,459),7541=>array(-46,-10,300,579),7542=>array(27,0,418,450),7543=>array(41,-218,483,460),7544=>array(9,390,467,834),7545=>array(28,-113,419,450),7546=>array(-9,-14,761,683),7547=>array(12,0,268,450),7548=>array(15,-10,304,460),7549=>array(5,-217,492,460),7550=>array(8,-14,514,450),7551=>array(8,-10,492,461),7552=>array(3,-231,468,683),7553=>array(27,-231,491,683),7554=>array(20,-231,383,683),7555=>array(28,-231,650,460),7556=>array(7,-231,505,683),7557=>array(19,-231,257,683),7558=>array(16,-231,781,460),7559=>array(16,-231,486,460),7560=>array(5,-231,470,460),7561=>array(5,-231,335,460),7562=>array(51,-231,348,459),7563=>array(-76,-231,384,683),7564=>array(19,-231,477,450),7565=>array(17,-231,479,450),7566=>array(27,-231,418,450),7567=>array(37,-231,576,460),7568=>array(16,-231,613,460),7569=>array(27,-230,625,683),7570=>array(25,-231,564,460),7571=>array(41,-231,533,461),7572=>array(41,-231,399,461),7573=>array(25,-231,613,460),7574=>array(16,-231,387,683),7575=>array(25,-231,412,460),7576=>array(-50,-231,410,683),7577=>array(9,-230,613,450),7578=>array(6,-230,362,450),7579=>array(-6,383,305,699),7580=>array(25,382,285,697),7581=>array(24,321,276,699),7582=>array(21,382,318,849),7583=>array(18,382,259,698),7584=>array(13,390,255,848),7585=>array(3,381,245,839),7586=>array(17,243,313,698),7587=>array(6,237,325,692),7588=>array(6,391,189,849),7589=>array(14,384,205,700),7590=>array(10,390,168,692),7591=>array(11,390,169,691),7592=>array(2,235,218,848),7593=>array(4,244,234,849),7594=>array(10,235,171,848),7595=>array(4,390,289,692),7596=>array(4,243,467,699),7597=>array(8,234,518,693),7598=>array(48,243,406,699),7599=>array(7,243,368,699),7600=>array(4,384,353,692),7601=>array(26,382,323,698),7602=>array(21,270,393,848),7603=>array(6,243,206,698),7604=>array(50,293,292,898),7605=>array(11,244,190,779),7606=>array(4,383,340,692),7607=>array(16,383,321,692),7608=>array(5,381,345,693),7609=>array(10,383,309,699),7610=>array(13,390,318,698),7611=>array(8,390,269,690),7612=>array(-4,243,379,692),7613=>array(-4,321,264,692),7614=>array(14,249,253,692),7615=>array(24,383,314,841),7616=>array(-365,491,-26,720),7617=>array(-365,481,-26,720),7619=>array(-538,534,0,736),7626=>array(-267,-238,-121,-34),7627=>array(-593,507,0,664),7628=>array(-593,507,0,664),7629=>array(-295,507,295,674),7630=>array(-260,507,-75,672),7631=>array(-337,-290,-103,-36),7635=>array(-234,504,-40,802),7636=>array(-306,495,-44,703),7637=>array(-329,495,-24,703),7638=>array(-289,493,-54,703),7639=>array(-229,505,-58,803),7640=>array(-289,495,-94,795),7641=>array(-289,495,-94,802),7642=>array(-259,492,-63,794),7643=>array(-324,490,-10,805),7644=>array(-277,500,-57,801),7645=>array(-222,500,-117,801),7646=>array(-334,500,-53,797),7647=>array(-424,500,-12,797),7648=>array(-273,500,-66,704),7649=>array(-354,494,-10,797),7650=>array(-324,500,-17,797),7651=>array(-261,500,-108,797),7652=>array(-229,494,-96,704),7653=>array(-246,500,-85,801),7654=>array(-289,500,-115,698),7676=>array(-286,-176,286,-27),7677=>array(-437,-256,-107,-23),7678=>array(-341,504,-87,702),7679=>array(-509,-229,0,-31),7680=>array(15,-247,706,674),7681=>array(25,-247,430,460),7682=>array(15,0,591,817),7683=>array(10,-10,475,683),7684=>array(15,-171,591,662),7685=>array(10,-171,475,683),7686=>array(15,-116,591,662),7687=>array(10,-120,475,683),7688=>array(35,-215,640,890),7689=>array(25,-215,412,676),7690=>array(15,0,684,816),7691=>array(25,-10,489,683),7692=>array(15,-171,684,662),7693=>array(25,-171,489,683),7694=>array(15,-110,684,662),7695=>array(25,-119,489,683),7696=>array(14,-212,683,663),7697=>array(25,-217,489,683),7698=>array(15,-219,684,662),7699=>array(25,-229,489,683),7700=>array(12,0,597,900),7701=>array(25,-10,424,800),7702=>array(12,0,597,900),7703=>array(25,-10,424,800),7704=>array(15,-219,600,662),7705=>array(25,-229,424,460),7706=>array(15,-160,600,662),7707=>array(25,-170,424,460),7708=>array(12,-215,597,876),7709=>array(25,-215,424,667),7710=>array(15,0,549,812),7711=>array(10,0,373,825),7712=>array(35,-14,712,800),7713=>array(15,-218,457,566),7714=>array(15,0,698,813),7715=>array(10,0,488,800),7716=>array(15,-171,698,662),7717=>array(10,-171,488,683),7718=>array(15,0,698,814),7719=>array(10,0,488,825),7720=>array(15,-214,698,662),7721=>array(10,-214,488,683),7722=>array(15,-197,698,662),7723=>array(10,-197,488,683),7724=>array(1,-162,331,662),7725=>array(-31,-162,299,683),7726=>array(10,0,340,900),7727=>array(7,0,278,813),7728=>array(15,0,704,890),7729=>array(10,0,508,897),7730=>array(15,-171,704,662),7731=>array(10,-171,508,683),7732=>array(15,-110,704,662),7733=>array(10,-121,508,683),7734=>array(15,-171,601,662),7735=>array(10,-171,248,683),7736=>array(15,-171,601,800),7737=>array(-18,-171,293,800),7738=>array(15,-112,601,662),7739=>array(-22,-111,289,683),7740=>array(15,-219,601,662),7741=>array(-17,-219,294,683),7742=>array(15,0,866,890),7743=>array(10,0,769,676),7744=>array(15,0,866,811),7745=>array(10,0,769,610),7746=>array(15,-171,866,662),7747=>array(10,-171,769,460),7748=>array(15,-11,710,812),7749=>array(10,0,479,609),7750=>array(15,-171,710,662),7751=>array(10,-171,479,460),7752=>array(15,-123,710,662),7753=>array(10,-115,479,460),7754=>array(15,-230,710,662),7755=>array(10,-219,479,460),7756=>array(34,-13,688,900),7757=>array(25,-10,466,801),7758=>array(35,-14,689,900),7759=>array(25,-10,466,777),7760=>array(34,-13,688,899),7761=>array(25,-10,466,800),7762=>array(34,-13,688,900),7763=>array(25,-10,466,800),7764=>array(15,0,541,873),7765=>array(10,-217,475,661),7766=>array(15,0,541,812),7767=>array(10,-217,475,613),7768=>array(15,0,657,812),7769=>array(10,0,340,608),7770=>array(15,-171,657,662),7771=>array(10,-171,340,460),7772=>array(15,-171,657,800),7773=>array(10,-171,340,574),7774=>array(15,-115,657,662),7775=>array(10,-116,340,460),7776=>array(30,-14,479,825),7777=>array(35,-10,332,615),7778=>array(30,-171,479,676),7779=>array(35,-171,332,459),7780=>array(30,-13,479,900),7781=>array(35,-10,332,759),7782=>array(30,-13,479,900),7783=>array(23,-10,334,825),7784=>array(30,-171,479,825),7785=>array(35,-171,332,611),7786=>array(15,0,591,801),7787=>array(17,-10,283,718),7788=>array(15,-171,591,662),7789=>array(17,-171,283,579),7790=>array(15,-114,591,662),7791=>array(-9,-118,302,579),7792=>array(15,-219,591,662),7793=>array(-9,-229,302,579),7794=>array(15,-153,706,662),7795=>array(10,-149,480,450),7796=>array(15,-181,706,662),7797=>array(10,-168,480,450),7798=>array(15,-233,706,662),7799=>array(10,-229,480,450),7800=>array(15,-13,706,900),7801=>array(10,-10,480,817),7802=>array(15,-14,706,900),7803=>array(10,-10,480,727),7804=>array(10,-11,691,806),7805=>array(5,-14,463,616),7806=>array(10,-171,691,662),7807=>array(5,-171,463,450),7808=>array(10,-11,937,890),7809=>array(5,-14,678,676),7810=>array(10,-11,937,873),7811=>array(5,-14,678,676),7812=>array(10,-11,937,813),7813=>array(5,-14,678,620),7814=>array(10,-11,937,811),7815=>array(5,-14,678,613),7816=>array(10,-171,937,662),7817=>array(5,-171,678,450),7818=>array(10,0,704,812),7819=>array(10,0,472,609),7820=>array(10,0,704,801),7821=>array(10,0,472,589),7822=>array(10,0,691,813),7823=>array(5,-218,466,617),7824=>array(10,0,598,869),7825=>array(10,0,401,657),7826=>array(10,-171,598,662),7827=>array(10,-171,401,450),7828=>array(10,-118,598,662),7829=>array(10,-122,401,450),7830=>array(10,-94,488,683),7831=>array(-3,-10,295,718),7832=>array(5,-14,678,696),7833=>array(5,-218,466,696),7834=>array(25,-10,430,707),7835=>array(10,0,373,825),7836=>array(10,0,381,683),7837=>array(10,0,373,683),7838=>array(15,-9,624,683),7839=>array(35,-6,481,677),7840=>array(15,-171,706,674),7841=>array(25,-171,430,460),7842=>array(15,0,706,878),7843=>array(25,-10,430,686),7844=>array(15,0,711,900),7845=>array(25,-10,501,800),7846=>array(1,0,706,900),7847=>array(-88,-10,430,800),7848=>array(15,0,706,872),7849=>array(25,-10,454,800),7850=>array(15,0,706,899),7851=>array(25,-10,430,820),7852=>array(15,-171,706,848),7853=>array(25,-171,430,657),7854=>array(15,0,706,900),7855=>array(25,-10,430,824),7856=>array(15,0,706,899),7857=>array(25,-10,430,848),7858=>array(15,0,706,900),7859=>array(25,-10,430,816),7860=>array(15,0,706,899),7861=>array(25,-10,430,798),7862=>array(15,-171,706,876),7863=>array(25,-171,430,672),7864=>array(15,-171,600,662),7865=>array(25,-171,424,460),7866=>array(15,0,600,870),7867=>array(25,-10,424,686),7868=>array(15,0,600,802),7869=>array(25,-10,424,618),7870=>array(15,0,624,899),7871=>array(25,-10,517,801),7872=>array(-29,0,600,899),7873=>array(-70,-10,424,800),7874=>array(15,0,613,869),7875=>array(25,-10,444,800),7876=>array(15,0,600,900),7877=>array(25,-10,424,820),7878=>array(15,-171,600,869),7879=>array(25,-171,424,657),7880=>array(15,0,312,889),7881=>array(16,0,253,677),7882=>array(15,-171,312,662),7883=>array(16,-171,253,683),7884=>array(35,-171,689,676),7885=>array(25,-171,466,460),7886=>array(35,-14,689,900),7887=>array(25,-10,466,684),7888=>array(35,-14,719,900),7889=>array(25,-10,554,800),7890=>array(2,-14,689,899),7891=>array(-42,-10,466,800),7892=>array(35,-14,689,872),7893=>array(25,-10,484,800),7894=>array(35,-13,689,900),7895=>array(25,-10,466,820),7896=>array(35,-171,689,853),7897=>array(25,-171,466,657),7898=>array(35,-14,709,890),7899=>array(25,-10,532,676),7900=>array(35,-14,709,890),7901=>array(25,-10,532,676),7902=>array(35,-14,709,900),7903=>array(25,-10,532,684),7904=>array(35,-14,709,845),7905=>array(25,-10,532,618),7906=>array(35,-173,709,796),7907=>array(25,-169,532,552),7908=>array(15,-171,706,662),7909=>array(10,-171,480,450),7910=>array(15,-14,706,898),7911=>array(10,-10,480,686),7912=>array(15,-14,777,890),7913=>array(10,-10,539,676),7914=>array(15,-14,777,890),7915=>array(10,-10,539,676),7916=>array(15,-14,777,898),7917=>array(10,-10,539,686),7918=>array(15,-14,777,825),7919=>array(10,-10,539,628),7920=>array(15,-149,777,796),7921=>array(10,-149,539,552),7922=>array(10,0,691,890),7923=>array(5,-218,466,676),7924=>array(10,-171,691,662),7925=>array(5,-218,466,450),7926=>array(10,0,691,898),7927=>array(5,-218,466,686),7928=>array(10,0,691,796),7929=>array(5,-218,466,609),7930=>array(15,0,898,662),7931=>array(10,0,492,683),7932=>array(35,-14,469,676),7933=>array(23,-10,319,460),7934=>array(6,-10,703,662),7935=>array(6,-201,505,450),7936=>array(41,-10,558,736),7937=>array(41,-10,558,734),7938=>array(41,-10,558,738),7939=>array(41,-10,558,735),7940=>array(41,-10,558,736),7941=>array(41,-10,558,737),7942=>array(41,-10,558,801),7943=>array(41,-10,558,801),7944=>array(15,0,706,689),7945=>array(15,0,706,687),7946=>array(-7,0,796,689),7947=>array(-8,0,800,687),7948=>array(-9,0,748,690),7949=>array(-8,1,750,686),7950=>array(-9,0,705,791),7951=>array(-9,0,707,788),7952=>array(41,-10,399,736),7953=>array(41,-10,399,734),7954=>array(22,-10,399,738),7955=>array(41,-10,399,735),7956=>array(41,-10,399,736),7957=>array(41,-10,399,737),7960=>array(1,0,758,686),7961=>array(-7,0,758,684),7962=>array(-14,0,890,689),7963=>array(-8,0,908,686),7964=>array(-8,0,929,692),7965=>array(-8,0,924,691),7968=>array(15,-224,471,736),7969=>array(15,-224,471,734),7970=>array(15,-224,471,738),7971=>array(15,-224,471,735),7972=>array(15,-224,471,736),7973=>array(15,-224,471,737),7974=>array(15,-224,471,800),7975=>array(15,-224,471,800),7976=>array(-12,0,826,689),7977=>array(-13,0,840,683),7978=>array(-14,0,965,694),7979=>array(-8,0,991,687),7980=>array(-8,0,1007,687),7981=>array(-8,0,1010,691),7982=>array(-21,0,899,794),7983=>array(-20,0,902,789),7984=>array(36,-10,271,736),7985=>array(60,-10,271,734),7986=>array(-9,-10,287,738),7987=>array(-9,-10,305,735),7988=>array(-9,-10,285,736),7989=>array(-9,-10,291,737),7990=>array(-10,-10,320,804),7991=>array(-17,-10,313,801),7992=>array(-14,0,441,686),7993=>array(-6,0,473,686),7994=>array(-14,0,597,690),7995=>array(-7,0,620,686),7996=>array(-8,0,622,691),7997=>array(-7,0,627,689),7998=>array(-23,0,518,786),7999=>array(-9,0,533,788),8000=>array(25,-10,466,736),8001=>array(25,-10,466,734),8002=>array(25,-10,466,738),8003=>array(25,-10,466,735),8004=>array(25,-10,466,736),8005=>array(25,-10,466,737),8008=>array(3,-14,781,687),8009=>array(-6,-14,795,686),8010=>array(-14,-14,940,689),8011=>array(-8,-14,965,687),8012=>array(-8,-14,909,690),8013=>array(-8,-14,925,688),8016=>array(19,-10,464,736),8017=>array(19,-10,464,734),8018=>array(19,-10,464,738),8019=>array(19,-10,464,735),8020=>array(19,-10,464,736),8021=>array(19,-10,464,737),8022=>array(19,-10,464,800),8023=>array(19,-10,464,800),8025=>array(-8,0,777,685),8027=>array(-8,0,947,684),8029=>array(-9,0,948,686),8031=>array(-14,0,854,798),8032=>array(41,-10,652,736),8033=>array(41,-10,652,734),8034=>array(41,-10,652,738),8035=>array(41,-10,652,735),8036=>array(41,-10,652,736),8037=>array(41,-10,652,737),8038=>array(41,-10,652,801),8039=>array(41,-10,652,800),8040=>array(-8,0,801,687),8041=>array(-9,0,808,686),8042=>array(-14,0,971,691),8043=>array(-8,0,989,686),8044=>array(-8,0,939,690),8045=>array(-8,0,951,689),8046=>array(-23,0,870,792),8047=>array(-28,0,861,791),8048=>array(41,-10,558,727),8049=>array(41,-10,558,728),8050=>array(41,-10,399,724),8051=>array(41,-10,399,725),8052=>array(15,-224,471,722),8053=>array(15,-224,471,725),8054=>array(3,-10,271,725),8055=>array(65,-10,271,725),8056=>array(25,-10,466,724),8057=>array(25,-10,466,723),8058=>array(19,-10,464,723),8059=>array(19,-10,464,720),8060=>array(41,-10,652,721),8061=>array(41,-10,652,720),8064=>array(41,-200,558,736),8065=>array(41,-200,558,734),8066=>array(41,-200,558,738),8067=>array(41,-200,558,735),8068=>array(41,-200,558,736),8069=>array(41,-200,558,737),8070=>array(41,-200,558,800),8071=>array(41,-200,558,800),8072=>array(15,0,873,689),8073=>array(15,0,874,687),8074=>array(-10,0,969,689),8075=>array(-8,0,976,687),8076=>array(-11,0,928,690),8077=>array(-8,0,933,686),8078=>array(-15,0,869,791),8079=>array(-19,0,871,788),8080=>array(15,-224,471,736),8081=>array(15,-224,471,734),8082=>array(15,-224,471,738),8083=>array(15,-224,471,735),8084=>array(15,-224,471,736),8085=>array(15,-224,471,737),8086=>array(15,-224,471,802),8087=>array(15,-224,471,801),8088=>array(-12,0,1002,689),8089=>array(-13,0,1011,683),8090=>array(-14,0,1138,694),8091=>array(-8,0,1164,687),8092=>array(-8,0,1180,687),8093=>array(-8,0,1184,691),8094=>array(-21,0,1073,794),8095=>array(-20,0,1073,789),8096=>array(41,-200,652,736),8097=>array(41,-200,652,734),8098=>array(41,-200,652,738),8099=>array(41,-200,652,735),8100=>array(41,-200,652,736),8101=>array(41,-200,652,737),8102=>array(41,-200,652,805),8103=>array(41,-200,652,802),8104=>array(-4,0,1019,687),8105=>array(-9,0,1025,686),8106=>array(-14,0,1195,691),8107=>array(-8,0,1214,686),8108=>array(-8,0,1161,690),8109=>array(-8,0,1171,689),8110=>array(-23,0,1083,792),8111=>array(-28,0,1076,791),8112=>array(41,-10,558,672),8113=>array(41,-10,558,584),8114=>array(41,-200,558,720),8115=>array(41,-200,558,461),8116=>array(41,-200,558,721),8118=>array(41,-10,558,666),8119=>array(41,-200,558,666),8120=>array(15,0,706,883),8121=>array(15,0,706,780),8122=>array(15,0,706,689),8123=>array(15,0,706,687),8124=>array(15,0,874,674),8125=>array(57,526,196,742),8126=>array(129,0,296,148),8127=>array(168,521,323,736),8128=>array(102,599,432,705),8129=>array(102,552,432,799),8130=>array(15,-224,471,722),8131=>array(15,-224,471,461),8132=>array(15,-224,471,723),8134=>array(15,-224,471,671),8135=>array(15,-224,471,673),8136=>array(4,0,749,684),8137=>array(24,0,788,687),8138=>array(1,0,805,684),8139=>array(19,0,874,689),8140=>array(15,0,868,662),8141=>array(70,520,366,738),8142=>array(108,518,402,736),8143=>array(96,546,426,877),8144=>array(-16,-10,271,672),8145=>array(-48,-10,271,584),8146=>array(-40,-10,272,751),8147=>array(-32,-10,275,752),8150=>array(-30,-10,300,665),8151=>array(-30,-10,300,799),8152=>array(15,0,312,859),8153=>array(11,0,322,756),8154=>array(1,0,419,697),8155=>array(17,0,499,685),8157=>array(79,519,393,735),8158=>array(101,519,401,737),8159=>array(93,541,423,874),8160=>array(19,-10,464,678),8161=>array(19,-10,464,584),8162=>array(19,-10,464,747),8163=>array(19,-10,464,747),8164=>array(50,-221,487,736),8165=>array(50,-221,487,734),8166=>array(19,-10,464,667),8167=>array(19,-10,464,776),8168=>array(15,0,651,837),8169=>array(15,0,651,798),8170=>array(1,0,775,690),8171=>array(16,0,787,687),8172=>array(-7,0,700,667),8173=>array(11,542,323,756),8174=>array(13,515,320,729),8175=>array(197,520,315,735),8178=>array(41,-200,652,723),8179=>array(41,-200,652,461),8180=>array(41,-200,652,723),8182=>array(41,-10,652,663),8183=>array(41,-200,652,667),8184=>array(0,-14,782,679),8185=>array(60,-14,849,676),8186=>array(0,0,801,676),8187=>array(21,0,811,676),8188=>array(15,0,913,676),8189=>array(213,516,341,731),8190=>array(192,519,347,734),8208=>array(39,194,285,257),8209=>array(39,194,285,257),8210=>array(0,194,500,257),8211=>array(0,194,500,257),8212=>array(0,194,1000,257),8213=>array(0,194,1000,257),8214=>array(72,-157,248,662),8215=>array(92,-196,403,-42),8216=>array(31,433,170,676),8217=>array(30,433,169,676),8218=>array(30,-141,169,102),8219=>array(31,434,170,677),8220=>array(37,433,370,676),8221=>array(30,433,363,676),8222=>array(30,-141,361,102),8223=>array(30,434,363,677),8224=>array(59,-149,443,676),8225=>array(58,-153,442,676),8226=>array(65,191,335,461),8227=>array(70,160,340,463),8228=>array(260,1,359,100),8229=>array(136,1,484,100),8230=>array(117,1,882,100),8231=>array(75,183,174,282),8240=>array(7,-19,994,706),8241=>array(7,-19,1356,706),8242=>array(27,459,228,735),8243=>array(27,459,418,735),8244=>array(23,459,606,735),8245=>array(22,459,223,735),8246=>array(32,459,423,735),8247=>array(26,459,609,735),8248=>array(24,-162,446,203),8249=>array(14,33,236,416),8250=>array(14,33,236,416),8251=>array(21,-26,610,563),8252=>array(130,-9,570,676),8253=>array(68,-8,414,676),8254=>array(0,547,500,597),8255=>array(44,-276,897,-20),8256=>array(53,644,906,900),8257=>array(-9,-14,287,676),8258=>array(68,-89,864,679),8259=>array(65,233,335,381),8260=>array(-168,-14,331,676),8261=>array(88,-181,253,680),8262=>array(131,-181,296,680),8263=>array(68,-8,858,676),8264=>array(68,-9,681,676),8265=>array(130,-9,747,676),8266=>array(20,-8,449,450),8267=>array(-22,-154,450,662),8268=>array(38,182,362,450),8269=>array(38,182,362,450),8270=>array(69,-11,432,400),8271=>array(80,-141,219,459),8272=>array(14,-3,867,801),8273=>array(69,-10,432,875),8274=>array(0,-14,499,676),8275=>array(1,293,497,399),8276=>array(44,-275,897,-19),8277=>array(23,-10,489,456),8278=>array(10,1,400,574),8279=>array(24,459,808,735),8280=>array(12,1,609,665),8281=>array(10,1,610,574),8282=>array(40,1,139,779),8283=>array(12,-202,609,802),8284=>array(30,0,534,506),8285=>array(40,1,139,779),8286=>array(40,1,139,779),8304=>array(6,380,314,850),8305=>array(11,390,169,847),8308=>array(5,390,314,850),8309=>array(22,380,298,858),8310=>array(13,380,308,853),8311=>array(14,385,305,840),8312=>array(28,380,293,850),8313=>array(11,378,306,851),8314=>array(8,440,331,764),8315=>array(8,576,331,628),8316=>array(8,522,331,676),8317=>array(32,297,204,869),8318=>array(11,297,183,869),8319=>array(11,390,323,698),8320=>array(6,-160,314,310),8321=>array(67,-150,260,310),8322=>array(12,-150,315,310),8323=>array(29,-160,294,310),8324=>array(5,-150,314,310),8325=>array(22,-160,298,318),8326=>array(13,-160,308,313),8327=>array(14,-155,305,300),8328=>array(28,-160,293,310),8329=>array(11,-162,306,311),8330=>array(8,-110,331,214),8331=>array(8,26,331,78),8332=>array(8,-28,331,126),8333=>array(32,-193,204,379),8334=>array(11,-193,183,379),8336=>array(21,-158,295,158),8337=>array(15,-158,283,158),8338=>array(17,-158,315,158),8339=>array(11,-150,319,150),8340=>array(15,-157,283,159),8352=>array(55,0,644,691),8353=>array(28,-139,633,793),8354=>array(28,-14,633,676),8355=>array(12,0,546,662),8356=>array(12,-8,490,676),8357=>array(16,-114,775,576),8358=>array(12,-11,707,662),8359=>array(10,-10,916,662),8360=>array(15,-10,974,662),8361=>array(13,-11,800,662),8362=>array(60,0,795,600),8363=>array(27,-1,497,802),8364=>array(34,-14,707,676),8365=>array(34,0,723,662),8366=>array(17,0,593,662),8367=>array(7,-207,1293,672),8368=>array(12,-197,475,672),8369=>array(16,0,589,662),8370=>array(32,-37,609,704),8371=>array(15,0,706,674),8372=>array(42,-14,491,676),8373=>array(42,-87,546,727),8374=>array(19,-10,497,683),8375=>array(33,-48,519,676),8376=>array(20,-1,504,666),8377=>array(20,-14,634,661),8400=>array(-616,680,15,856),8401=>array(-616,674,15,850),8402=>array(-217,-77,-177,554),8403=>array(-217,-1,-177,457),8404=>array(-625,683,34,900),8405=>array(-660,683,-1,900),8406=>array(-632,592,-1,900),8407=>array(-632,592,-1,900),8408=>array(-388,114,-104,397),8409=>array(-394,114,-95,412),8410=>array(-394,102,-95,397),8411=>array(-500,496,-3,595),8412=>array(-642,494,53,594),8413=>array(-741,-198,257,800),8414=>array(-740,-193,249,796),8415=>array(-735,-190,251,796),8416=>array(-738,-198,250,790),8417=>array(-606,592,25,900),8418=>array(-706,-75,210,643),8419=>array(-879,-200,147,862),8420=>array(-785,-88,288,784),8421=>array(-491,-134,8,556),8422=>array(-282,-157,-106,662),8423=>array(-432,15,48,539),8424=>array(-498,-147,-1,-48),8425=>array(-464,503,0,675),8426=>array(-628,103,3,411),8427=>array(-572,-98,52,592),8428=>array(-550,-234,81,-58),8429=>array(-559,-240,72,-64),8430=>array(-630,-300,1,8),8431=>array(-583,-300,48,8),8432=>array(-340,476,-157,683),8448=>array(35,-17,716,682),8449=>array(37,-18,686,682),8450=>array(26,-18,646,673),8451=>array(17,-14,940,676),8452=>array(35,1,481,667),8453=>array(32,-15,688,680),8454=>array(30,-18,736,680),8455=>array(35,-15,491,702),8456=>array(34,-14,639,676),8457=>array(17,0,849,676),8458=>array(-22,-216,507,347),8459=>array(7,-9,1102,700),8460=>array(18,-158,614,683),8461=>array(26,0,738,656),8462=>array(9,-9,468,683),8463=>array(9,-9,468,683),8464=>array(14,-12,798,701),8465=>array(11,-4,564,685),8466=>array(12,-9,822,703),8467=>array(15,-11,432,677),8468=>array(19,-10,747,683),8469=>array(26,-18,674,656),8470=>array(16,-11,857,662),8471=>array(26,-23,766,717),8472=>array(20,-211,732,573),8473=>array(26,0,583,656),8474=>array(26,-171,708,673),8475=>array(15,-12,929,700),8476=>array(16,-4,667,681),8477=>array(26,0,683,656),8478=>array(17,-1,659,662),8479=>array(17,-93,659,826),8480=>array(20,196,950,670),8481=>array(15,0,1105,662),8482=>array(10,210,1033,660),8483=>array(16,-93,697,826),8484=>array(26,0,608,656),8485=>array(6,-209,362,664),8486=>array(15,0,708,676),8487=>array(35,-10,715,666),8488=>array(23,-162,608,674),8489=>array(35,0,241,461),8490=>array(15,0,704,662),8491=>array(15,0,706,895),8492=>array(7,-8,883,703),8493=>array(35,-4,583,683),8494=>array(35,-10,499,460),8495=>array(0,-7,380,347),8496=>array(35,-9,647,704),8497=>array(25,-10,898,703),8498=>array(15,0,549,662),8499=>array(12,-10,1217,697),8500=>array(0,-7,405,347),8501=>array(27,-5,488,584),8502=>array(24,0,504,598),8503=>array(39,0,296,598),8504=>array(25,-2,482,596),8505=>array(20,0,379,683),8506=>array(28,-21,883,647),8507=>array(15,-1,1119,662),8508=>array(10,0,643,518),8510=>array(15,0,557,656),8511=>array(25,0,699,656),8512=>array(15,0,557,656),8513=>array(34,11,641,707),8514=>array(22,0,436,664),8515=>array(22,0,436,664),8516=>array(20,0,610,665),8517=>array(10,0,730,656),8518=>array(23,-5,643,680),8519=>array(35,-5,574,468),8520=>array(25,0,346,688),8521=>array(1,-199,526,688),8522=>array(35,0,482,664),8523=>array(32,-13,740,676),8525=>array(22,-14,884,676),8526=>array(15,0,403,450),8528=>array(30,-14,756,730),8529=>array(30,-14,734,730),8530=>array(30,-14,947,730),8531=>array(30,-14,726,730),8532=>array(16,-14,777,730),8533=>array(30,-14,686,730),8534=>array(16,-14,762,730),8535=>array(21,-14,702,730),8536=>array(9,-14,732,730),8537=>array(30,-14,703,730),8538=>array(24,-14,734,738),8539=>array(30,-14,715,730),8540=>array(20,-14,742,730),8541=>array(23,-14,732,738),8542=>array(33,-14,713,720),8543=>array(30,-14,581,730),8544=>array(15,0,312,662),8545=>array(15,0,631,662),8546=>array(15,0,950,662),8547=>array(15,-11,1010,662),8548=>array(10,-11,691,662),8549=>array(10,-11,1013,662),8550=>array(10,-11,1336,662),8551=>array(10,-11,1652,662),8552=>array(15,0,1033,662),8553=>array(10,0,704,662),8554=>array(10,0,1019,662),8555=>array(10,0,1339,662),8556=>array(15,0,601,662),8557=>array(35,-14,640,676),8558=>array(15,0,684,662),8559=>array(15,0,866,662),8560=>array(16,0,253,683),8561=>array(16,0,511,683),8562=>array(16,0,769,683),8563=>array(16,-14,709,683),8564=>array(5,-14,463,450),8565=>array(5,-14,702,683),8566=>array(5,-14,961,683),8567=>array(5,-14,1219,683),8568=>array(16,0,726,683),8569=>array(10,0,472,450),8570=>array(10,0,729,683),8571=>array(10,0,987,683),8572=>array(10,0,248,683),8573=>array(25,-10,412,460),8574=>array(25,-10,489,683),8575=>array(10,0,769,460),8576=>array(17,0,1066,662),8577=>array(16,0,685,662),8578=>array(15,0,1075,662),8579=>array(28,-14,633,676),8580=>array(15,-10,402,460),8581=>array(28,-200,637,676),8582=>array(15,-22,513,662),8583=>array(16,0,685,662),8584=>array(16,0,1076,662),8585=>array(16,-15,738,730),8592=>array(30,52,870,462),8593=>array(32,-39,442,801),8594=>array(30,52,870,462),8595=>array(45,-104,455,736),8596=>array(30,52,870,462),8597=>array(45,-195,455,645),8598=>array(58,-35,770,677),8599=>array(30,-31,742,681),8600=>array(30,-163,742,549),8601=>array(58,-167,770,545),8602=>array(30,52,870,462),8603=>array(30,52,870,462),8604=>array(30,52,980,462),8605=>array(20,52,970,462),8606=>array(30,52,870,462),8607=>array(45,-131,455,709),8608=>array(30,52,870,462),8609=>array(47,-195,457,645),8610=>array(30,52,989,462),8611=>array(30,52,989,462),8612=>array(30,52,958,462),8613=>array(45,-175,455,753),8614=>array(55,52,983,462),8615=>array(45,-239,455,689),8616=>array(0,-183,500,743),8617=>array(30,52,870,468),8618=>array(40,52,880,468),8619=>array(30,52,870,468),8620=>array(30,52,870,468),8621=>array(30,52,1117,462),8622=>array(30,52,870,462),8623=>array(45,-93,547,685),8624=>array(62,0,420,715),8625=>array(62,0,420,715),8626=>array(62,0,420,715),8627=>array(62,0,420,715),8628=>array(2,13,647,600),8629=>array(15,-16,602,629),8630=>array(32,0,1059,525),8631=>array(32,0,1059,525),8632=>array(62,-35,774,771),8633=>array(4,0,962,730),8634=>array(60,0,783,713),8635=>array(60,0,783,713),8636=>array(30,229,870,462),8637=>array(30,52,870,285),8638=>array(221,-132,455,709),8639=>array(45,-130,279,711),8640=>array(30,229,870,462),8641=>array(30,51,870,284),8642=>array(220,-194,454,647),8643=>array(45,-194,279,647),8644=>array(30,-118,870,632),8645=>array(45,-130,795,710),8646=>array(30,-118,870,633),8647=>array(30,-118,870,632),8648=>array(45,-131,795,709),8649=>array(30,-118,870,632),8650=>array(45,-125,795,715),8651=>array(30,-49,870,564),8652=>array(30,-49,870,563),8653=>array(30,6,870,510),8654=>array(30,6,880,510),8655=>array(30,6,870,510),8656=>array(30,5,870,510),8657=>array(23,-131,529,710),8658=>array(30,3,870,508),8659=>array(21,-195,527,646),8660=>array(30,5,880,510),8661=>array(21,-200,527,651),8662=>array(40,-234,963,688),8663=>array(37,-213,960,711),8664=>array(37,-234,960,688),8665=>array(40,-257,963,667),8666=>array(30,-64,870,577),8667=>array(40,-64,880,577),8668=>array(30,52,1058,462),8669=>array(20,52,1048,462),8670=>array(45,-152,455,688),8671=>array(45,-152,455,688),8672=>array(30,52,870,462),8673=>array(45,-131,455,709),8674=>array(30,52,870,462),8675=>array(45,-195,455,645),8676=>array(44,52,962,462),8677=>array(30,52,948,462),8678=>array(30,5,870,510),8679=>array(45,-40,550,800),8680=>array(40,5,880,510),8681=>array(45,-195,551,646),8682=>array(44,-56,550,780),8683=>array(44,-56,550,780),8684=>array(44,-56,550,780),8685=>array(45,-56,551,780),8686=>array(45,-55,551,766),8687=>array(46,-55,550,778),8688=>array(40,82,876,588),8689=>array(60,-35,864,769),8690=>array(62,-55,866,749),8691=>array(45,-202,551,678),8692=>array(30,52,870,462),8693=>array(45,-195,797,646),8694=>array(40,-258,880,832),8695=>array(30,63,870,473),8696=>array(30,63,870,473),8697=>array(30,63,870,473),8698=>array(30,63,870,473),8699=>array(30,63,870,473),8700=>array(30,63,870,473),8701=>array(30,52,870,462),8702=>array(30,52,870,462),8703=>array(30,52,870,462),8704=>array(25,-14,562,662),8705=>array(36,-13,496,801),8706=>array(26,-10,462,675),8707=>array(44,0,543,662),8708=>array(44,-134,543,794),8709=>array(30,-14,632,588),8710=>array(6,0,608,688),8711=>array(6,-26,608,662),8712=>array(52,8,484,506),8713=>array(52,-102,484,616),8714=>array(48,-17,414,500),8715=>array(52,8,484,506),8716=>array(52,-102,484,616),8717=>array(48,-17,414,500),8718=>array(77,0,423,691),8719=>array(25,-101,803,751),8720=>array(25,-101,803,751),8721=>array(14,-123,695,752),8722=>array(30,220,534,286),8723=>array(30,0,534,634),8724=>array(30,0,534,652),8725=>array(0,-14,499,676),8726=>array(0,-14,499,676),8727=>array(55,86,346,415),8728=>array(65,131,335,401),8729=>array(66,152,268,354),8730=>array(-2,-65,523,900),8731=>array(-2,-65,523,900),8732=>array(-2,-65,523,900),8733=>array(28,62,609,440),8734=>array(52,62,801,440),8735=>array(62,0,447,385),8736=>array(18,0,530,453),8737=>array(18,-40,530,453),8738=>array(35,0,467,510),8739=>array(72,-157,128,662),8740=>array(25,-157,224,662),8741=>array(72,-157,248,662),8742=>array(10,-157,394,662),8743=>array(19,-1,545,507),8744=>array(19,-1,545,507),8745=>array(25,0,539,565),8746=>array(25,-5,539,560),8747=>array(0,-200,499,900),8748=>array(0,-200,849,900),8749=>array(0,-200,1193,900),8750=>array(35,-200,583,900),8751=>array(35,-200,867,900),8752=>array(35,-200,1203,900),8753=>array(35,-200,607,900),8754=>array(35,-200,619,900),8755=>array(35,-200,643,900),8756=>array(35,-15,528,477),8757=>array(35,-21,531,472),8758=>array(75,-23,174,472),8759=>array(64,-25,560,472),8760=>array(30,220,534,454),8761=>array(30,6,721,465),8762=>array(30,4,534,498),8763=>array(56,17,581,476),8764=>array(56,159,581,320),8765=>array(56,159,581,320),8766=>array(17,118,486,355),8767=>array(0,194,614,522),8768=>array(68,-23,229,502),8769=>array(56,104,581,406),8770=>array(56,127,581,441),8771=>array(55,125,580,439),8772=>array(55,-20,580,524),8773=>array(52,57,577,562),8774=>array(52,-49,577,559),8775=>array(52,-70,577,616),8776=>array(56,74,581,440),8777=>array(56,-20,581,524),8778=>array(56,23,581,523),8779=>array(56,5,581,505),8780=>array(56,57,581,583),8781=>array(51,60,585,454),8782=>array(65,58,570,455),8783=>array(65,118,570,455),8784=>array(30,123,534,568),8785=>array(30,-73,534,573),8786=>array(30,-75,534,571),8787=>array(30,-69,534,570),8788=>array(35,5,705,493),8789=>array(30,5,718,490),8790=>array(30,123,534,389),8791=>array(30,123,534,665),8792=>array(30,123,534,609),8793=>array(30,123,534,707),8794=>array(30,123,534,709),8795=>array(30,123,534,764),8796=>array(30,123,534,800),8797=>array(30,123,540,748),8798=>array(30,123,534,692),8799=>array(30,123,534,800),8800=>array(30,-52,534,566),8801=>array(66,23,570,489),8802=>array(62,-52,574,566),8803=>array(66,-36,570,540),8804=>array(64,1,574,633),8805=>array(62,1,570,641),8806=>array(64,-113,573,706),8807=>array(69,-115,577,713),8808=>array(64,-198,573,706),8809=>array(69,-198,577,713),8810=>array(28,-10,867,516),8811=>array(28,-10,866,516),8812=>array(62,-170,348,670),8813=>array(51,-52,585,566),8814=>array(64,-102,572,616),8815=>array(62,-102,570,616),8816=>array(64,-92,574,646),8817=>array(62,-92,570,646),8818=>array(56,-112,581,599),8819=>array(53,-112,578,599),8820=>array(56,-112,581,646),8821=>array(53,-112,578,646),8822=>array(62,-199,572,683),8823=>array(62,-200,572,683),8824=>array(62,-201,572,690),8825=>array(62,-201,572,690),8826=>array(62,-30,574,542),8827=>array(62,-30,574,542),8828=>array(62,-52,574,606),8829=>array(62,-52,574,607),8830=>array(61,-112,586,623),8831=>array(62,-112,587,608),8832=>array(62,-102,574,616),8833=>array(62,-102,574,616),8834=>array(52,28,584,526),8835=>array(52,28,584,526),8836=>array(52,-102,584,616),8837=>array(52,-102,584,616),8838=>array(52,-64,584,571),8839=>array(51,-64,584,573),8840=>array(52,-139,584,663),8841=>array(51,-139,584,664),8842=>array(52,-137,584,571),8843=>array(51,-137,584,573),8844=>array(25,-6,539,559),8845=>array(25,-6,539,559),8846=>array(25,-6,539,559),8847=>array(32,8,532,506),8848=>array(32,8,532,506),8849=>array(32,-64,532,573),8850=>array(32,-64,532,571),8851=>array(33,0,531,500),8852=>array(33,0,531,500),8853=>array(17,-44,619,558),8854=>array(17,-44,619,558),8855=>array(17,-44,619,558),8856=>array(17,-44,619,558),8857=>array(17,-44,619,558),8858=>array(17,-44,619,558),8859=>array(17,-44,619,558),8860=>array(17,-44,619,558),8861=>array(17,-44,619,558),8862=>array(61,0,575,514),8863=>array(61,0,575,514),8864=>array(61,0,575,514),8865=>array(61,0,575,514),8866=>array(62,0,724,588),8867=>array(52,0,714,588),8868=>array(62,0,650,662),8869=>array(62,0,650,662),8870=>array(62,0,404,514),8871=>array(62,0,404,514),8872=>array(62,0,535,514),8873=>array(62,0,526,514),8874=>array(62,0,648,514),8875=>array(62,0,646,514),8876=>array(62,0,536,514),8877=>array(62,0,536,514),8878=>array(5,0,576,514),8879=>array(62,0,646,514),8880=>array(62,-39,574,550),8881=>array(62,-39,574,550),8882=>array(62,6,574,508),8883=>array(62,1,574,503),8884=>array(62,-63,574,574),8885=>array(62,-63,574,574),8886=>array(62,89,1234,424),8887=>array(62,89,1234,424),8888=>array(62,89,904,424),8889=>array(30,0,534,506),8890=>array(48,-211,458,325),8891=>array(19,1,545,666),8892=>array(19,-1,545,662),8893=>array(19,-1,545,662),8894=>array(46,0,530,498),8895=>array(31,0,530,498),8896=>array(30,0,714,669),8897=>array(30,0,714,669),8898=>array(61,-50,704,695),8899=>array(60,-50,703,695),8900=>array(42,11,470,504),8901=>array(74,189,173,288),8902=>array(64,109,406,434),8903=>array(57,-29,574,548),8904=>array(50,2,586,506),8905=>array(50,2,572,506),8906=>array(64,2,586,506),8907=>array(52,-34,764,678),8908=>array(52,-34,764,678),8909=>array(54,117,579,439),8910=>array(32,0,604,512),8911=>array(32,0,604,512),8912=>array(52,8,584,506),8913=>array(52,8,584,506),8914=>array(33,1,531,533),8915=>array(33,-9,531,523),8916=>array(32,0,562,732),8917=>array(30,-14,534,676),8918=>array(28,-10,536,516),8919=>array(28,-10,536,516),8920=>array(51,-10,1154,516),8921=>array(51,-10,1154,516),8922=>array(62,-214,574,728),8923=>array(62,-214,574,728),8924=>array(62,-81,574,603),8925=>array(62,-83,574,603),8926=>array(62,-106,574,633),8927=>array(62,-104,574,633),8928=>array(62,-104,574,636),8929=>array(62,-102,574,656),8930=>array(84,-139,584,663),8931=>array(84,-139,584,663),8932=>array(84,-137,584,573),8933=>array(84,-137,584,571),8934=>array(56,-186,581,599),8935=>array(56,-186,581,599),8936=>array(56,-186,581,622),8937=>array(56,-186,581,618),8938=>array(62,-102,574,616),8939=>array(62,-102,574,616),8940=>array(62,-162,574,676),8941=>array(62,-162,574,676),8942=>array(70,0,169,766),8943=>array(117,211,882,310),8944=>array(117,1,881,766),8945=>array(116,0,881,766),8946=>array(45,8,549,506),8947=>array(52,8,484,506),8948=>array(52,19,412,436),8949=>array(52,8,484,674),8950=>array(52,8,489,643),8951=>array(44,6,416,546),8952=>array(52,-116,487,506),8953=>array(52,8,484,506),8954=>array(52,8,556,506),8955=>array(52,8,484,506),8956=>array(52,19,412,436),8957=>array(52,8,485,643),8958=>array(44,6,412,546),8959=>array(61,0,540,662),8960=>array(30,-14,632,588),8961=>array(20,273,422,454),8962=>array(77,0,618,676),8963=>array(32,612,442,839),8964=>array(32,-216,442,11),8965=>array(30,-1,478,563),8966=>array(30,-1,478,676),8968=>array(62,1,412,800),8969=>array(62,0,412,800),8970=>array(62,0,412,800),8971=>array(62,1,412,800),8972=>array(289,-190,574,96),8973=>array(26,-190,313,96),8974=>array(288,567,575,853),8975=>array(26,565,311,851),8976=>array(30,108,534,386),8977=>array(108,145,397,434),8978=>array(35,0,757,364),8979=>array(35,0,757,364),8980=>array(32,-3,561,379),8981=>array(7,5,452,461),8982=>array(18,69,544,595),8983=>array(18,68,545,595),8984=>array(75,52,625,603),8985=>array(30,108,534,386),8986=>array(60,0,720,660),8987=>array(50,1,582,725),8988=>array(1,451,351,800),8989=>array(125,451,474,801),8990=>array(0,-200,349,150),8991=>array(123,-201,473,148),8992=>array(332,-200,715,800),8993=>array(32,-199,415,801),8994=>array(62,156,596,316),8995=>array(62,156,596,316),8996=>array(84,82,713,517),8997=>array(18,56,783,509),8998=>array(5,0,794,461),8999=>array(25,0,776,461),9000=>array(16,-1,783,475),9001=>array(25,-198,306,746),9002=>array(21,-198,302,746),9003=>array(5,0,794,461),9004=>array(42,-62,759,766),9031=>array(55,-158,720,658),9032=>array(55,-158,720,658),9040=>array(55,-158,720,658),9047=>array(55,-158,720,658),9054=>array(55,-158,720,658),9088=>array(44,-7,756,598),9089=>array(25,0,775,510),9090=>array(99,81,702,504),9091=>array(1,288,827,677),9094=>array(11,-121,799,713),9095=>array(18,0,784,682),9096=>array(34,-72,766,660),9097=>array(99,-44,701,558),9098=>array(70,0,730,660),9100=>array(53,-20,741,638),9103=>array(36,-13,754,706),9104=>array(36,-13,754,706),9105=>array(36,-13,754,706),9106=>array(36,-13,754,706),9108=>array(5,-20,795,666),9109=>array(53,0,744,691),9110=>array(267,315,506,656),9111=>array(39,-93,762,760),9112=>array(36,-101,764,758),9113=>array(15,-43,785,715),9114=>array(20,-15,780,684),9115=>array(40,-200,436,801),9116=>array(40,-200,122,800),9117=>array(40,-200,436,800),9118=>array(-52,-200,344,800),9119=>array(262,-200,344,800),9120=>array(-52,-200,344,801),9121=>array(88,-200,333,662),9122=>array(88,-200,164,800),9123=>array(88,-62,333,800),9124=>array(55,-200,300,662),9125=>array(224,-200,300,800),9126=>array(55,-62,300,800),9127=>array(201,-200,439,800),9128=>array(14,-200,283,800),9129=>array(201,-200,439,800),9130=>array(201,-200,283,800),9131=>array(45,-200,283,800),9132=>array(201,-200,470,800),9133=>array(45,-200,283,800),9134=>array(332,-200,415,800),9138=>array(49,-200,1238,800),9139=>array(49,-198,1238,800),9140=>array(20,588,839,800),9141=>array(21,-300,840,-88),9142=>array(20,163,840,672),9144=>array(0,-200,48,801),9145=>array(841,-200,889,801),9146=>array(0,666,889,714),9147=>array(0,475,889,523),9148=>array(0,76,889,124),9149=>array(0,-114,889,-66),9166=>array(54,-52,746,728),9167=>array(111,0,690,615),9180=>array(21,540,875,797),9181=>array(21,-200,875,57),9182=>array(20,551,882,802),9183=>array(21,-199,883,52),9184=>array(0,-163,910,27),9185=>array(0,564,910,754),9186=>array(35,0,726,507),9187=>array(83,-141,827,709),9189=>array(56,0,886,419),9190=>array(56,152,761,417),9216=>array(42,-1,748,663),9217=>array(85,0,714,667),9218=>array(75,0,755,667),9219=>array(56,0,755,664),9220=>array(56,-1,741,664),9221=>array(56,-59,742,664),9222=>array(62,0,727,667),9223=>array(49,-1,748,663),9224=>array(189,99,574,601),9225=>array(164,101,645,600),9226=>array(199,100,609,602),9227=>array(188,100,645,601),9228=>array(208,100,599,601),9229=>array(185,102,635,601),9230=>array(210,101,584,603),9231=>array(215,100,554,601),9232=>array(74,0,741,662),9233=>array(74,0,671,662),9234=>array(74,0,709,662),9235=>array(74,-1,680,662),9236=>array(74,1,717,662),9237=>array(42,0,737,663),9238=>array(75,-4,744,667),9239=>array(56,0,726,664),9240=>array(59,-4,749,666),9241=>array(175,108,667,593),9242=>array(62,-1,746,667),9243=>array(66,-4,742,663),9244=>array(198,100,589,601),9245=>array(186,99,589,599),9246=>array(206,98,589,601),9247=>array(182,101,589,604),9248=>array(213,98,597,600),9249=>array(74,-1,747,662),9250=>array(10,-23,542,729),9251=>array(45,0,458,160),9252=>array(77,0,723,664),9253=>array(0,0,800,800),9254=>array(70,-8,416,676),9312=>array(35,-13,754,706),9313=>array(35,-13,754,706),9314=>array(35,-13,754,706),9315=>array(35,-13,754,706),9316=>array(35,-13,754,706),9317=>array(35,-13,754,706),9318=>array(35,-13,754,706),9319=>array(35,-13,754,706),9320=>array(35,-13,754,706),9321=>array(35,-13,754,706),9472=>array(0,276,889,324),9473=>array(0,252,889,348),9474=>array(432,-200,480,801),9475=>array(408,-200,504,801),9484=>array(432,-200,889,324),9485=>array(432,-200,889,348),9486=>array(408,-200,889,324),9487=>array(408,-200,889,348),9488=>array(0,-200,480,324),9489=>array(0,-200,480,348),9490=>array(0,-200,504,324),9491=>array(0,-200,504,348),9492=>array(432,276,889,801),9493=>array(432,252,889,801),9494=>array(408,276,889,801),9495=>array(408,252,889,801),9496=>array(0,276,480,801),9497=>array(0,252,480,801),9498=>array(0,276,504,801),9499=>array(0,252,504,801),9500=>array(432,-200,889,801),9501=>array(432,-200,889,801),9502=>array(408,-200,889,801),9503=>array(408,-200,889,801),9504=>array(408,-200,889,801),9505=>array(408,-200,889,801),9506=>array(408,-200,889,801),9507=>array(408,-200,889,801),9508=>array(0,-200,480,801),9509=>array(0,-200,480,801),9510=>array(0,-200,504,801),9511=>array(0,-200,504,801),9512=>array(0,-200,504,801),9513=>array(0,-200,504,801),9514=>array(0,-200,504,801),9515=>array(0,-200,504,801),9516=>array(0,-200,889,324),9517=>array(0,-200,889,348),9518=>array(0,-200,889,348),9519=>array(0,-200,889,348),9520=>array(0,-200,889,324),9521=>array(0,-200,889,348),9522=>array(0,-200,889,348),9523=>array(0,-200,889,348),9524=>array(0,276,889,801),9525=>array(0,252,889,801),9526=>array(0,252,889,801),9527=>array(0,252,889,801),9528=>array(0,276,889,801),9529=>array(0,252,889,801),9530=>array(0,252,889,801),9531=>array(0,252,889,801),9532=>array(0,-200,889,801),9533=>array(0,-200,889,801),9534=>array(0,-200,889,801),9535=>array(0,-200,889,801),9536=>array(0,-200,889,801),9537=>array(0,-200,889,801),9538=>array(0,-200,889,801),9539=>array(0,-200,889,801),9540=>array(0,-200,889,801),9541=>array(0,-200,889,801),9542=>array(0,-200,889,801),9543=>array(0,-200,889,801),9544=>array(0,-200,889,801),9545=>array(0,-200,889,801),9546=>array(0,-200,889,801),9547=>array(0,-200,889,801),9552=>array(0,204,889,396),9553=>array(360,-200,552,801),9554=>array(432,-200,889,396),9555=>array(360,-200,889,324),9556=>array(360,-200,889,396),9557=>array(0,-200,480,396),9558=>array(0,-200,552,324),9559=>array(0,-200,552,396),9560=>array(432,204,889,801),9561=>array(360,276,889,801),9562=>array(360,204,889,801),9563=>array(0,204,480,801),9564=>array(0,276,552,801),9565=>array(0,204,552,801),9566=>array(432,-200,889,801),9567=>array(360,-200,889,801),9568=>array(360,-200,889,801),9569=>array(0,-200,480,801),9570=>array(0,-200,552,801),9571=>array(0,-200,552,801),9572=>array(0,-200,889,396),9573=>array(0,-200,889,324),9574=>array(0,-200,889,396),9575=>array(0,204,889,801),9576=>array(0,276,889,801),9577=>array(0,204,889,801),9578=>array(0,-200,889,801),9579=>array(0,-200,889,801),9580=>array(0,-200,889,801),9581=>array(432,-200,889,424),9582=>array(0,-200,457,424),9583=>array(0,176,457,800),9584=>array(432,177,889,801),9585=>array(0,-201,889,800),9586=>array(0,-201,889,800),9587=>array(0,-201,889,800),9588=>array(0,276,444,324),9589=>array(421,250,469,801),9590=>array(445,276,889,324),9591=>array(421,-200,469,351),9592=>array(0,252,444,348),9593=>array(397,252,493,801),9594=>array(445,252,889,348),9595=>array(397,-201,493,348),9596=>array(0,260,600,340),9597=>array(408,-200,504,801),9598=>array(0,260,600,340),9599=>array(408,-200,504,801),9600=>array(0,200,761,700),9601=>array(0,-200,761,-75),9602=>array(0,-200,761,50),9603=>array(0,-200,761,175),9604=>array(0,-200,761,300),9605=>array(0,-200,761,425),9606=>array(0,-200,761,550),9607=>array(0,-200,761,675),9608=>array(0,-200,761,800),9609=>array(0,-200,666,800),9610=>array(0,-200,571,800),9611=>array(0,-200,476,800),9612=>array(0,-200,381,800),9613=>array(0,-200,286,800),9614=>array(0,-200,191,800),9615=>array(0,-200,96,800),9616=>array(380,-200,761,800),9617=>array(0,-137,938,800),9618=>array(0,-137,938,800),9619=>array(0,-200,1000,800),9620=>array(0,675,761,800),9621=>array(665,-200,761,800),9622=>array(0,-200,380,300),9623=>array(381,-200,761,300),9624=>array(381,300,761,800),9625=>array(0,-200,761,800),9626=>array(0,-200,761,800),9627=>array(0,-200,761,800),9628=>array(0,-200,761,800),9629=>array(0,300,380,800),9630=>array(0,-200,761,800),9631=>array(0,-200,761,800),9632=>array(35,0,726,691),9633=>array(35,0,726,691),9634=>array(35,0,726,691),9635=>array(35,0,726,691),9636=>array(35,0,726,691),9637=>array(35,0,726,691),9638=>array(35,0,726,691),9639=>array(35,0,726,691),9640=>array(35,0,726,691),9641=>array(57,0,713,650),9642=>array(35,142,311,418),9643=>array(35,136,311,412),9644=>array(35,0,726,346),9645=>array(35,0,726,346),9646=>array(207,0,553,691),9647=>array(207,-1,553,690),9648=>array(14,0,745,450),9649=>array(14,0,745,450),9650=>array(26,0,814,676),9651=>array(26,0,814,676),9652=>array(13,120,407,458),9653=>array(4,120,415,473),9654=>array(92,-56,768,732),9655=>array(82,-56,758,732),9656=>array(35,62,373,456),9657=>array(26,54,379,465),9658=>array(92,60,768,454),9659=>array(82,60,788,472),9660=>array(26,-13,814,663),9661=>array(26,-12,814,664),9662=>array(13,100,407,439),9663=>array(5,95,416,448),9664=>array(32,-56,708,732),9665=>array(32,-56,708,732),9666=>array(13,61,351,455),9667=>array(7,46,360,457),9668=>array(32,62,708,456),9669=>array(44,58,750,470),9670=>array(35,-14,754,705),9671=>array(36,-13,754,705),9672=>array(36,-13,754,705),9673=>array(26,-23,766,717),9674=>array(18,0,466,740),9675=>array(26,-23,766,717),9676=>array(35,-14,757,708),9677=>array(20,-19,751,713),9678=>array(26,-23,766,717),9679=>array(35,-14,757,708),9680=>array(35,-14,757,708),9681=>array(35,-14,757,708),9682=>array(35,-14,757,708),9683=>array(35,-14,757,708),9684=>array(35,-14,757,708),9685=>array(35,-14,757,708),9686=>array(35,-14,403,705),9687=>array(399,-14,767,705),9688=>array(0,0,400,691),9689=>array(35,0,726,691),9690=>array(35,345,726,691),9691=>array(35,-2,726,344),9692=>array(35,344,402,708),9693=>array(392,341,756,708),9694=>array(389,-16,756,348),9695=>array(35,-15,399,352),9696=>array(35,344,757,708),9697=>array(35,-14,757,350),9698=>array(35,0,726,691),9699=>array(35,0,726,691),9700=>array(35,0,726,691),9701=>array(35,0,726,691),9702=>array(65,196,335,466),9703=>array(35,0,726,691),9704=>array(35,0,726,691),9705=>array(35,0,726,691),9706=>array(35,0,726,691),9707=>array(35,0,726,691),9708=>array(26,0,814,676),9709=>array(26,0,814,676),9710=>array(26,0,814,676),9711=>array(11,-85,874,778),9712=>array(35,0,726,691),9713=>array(35,0,726,691),9714=>array(35,0,726,691),9715=>array(35,0,726,691),9716=>array(35,-14,757,708),9717=>array(35,-14,757,708),9718=>array(35,-14,757,708),9719=>array(35,-14,757,708),9720=>array(65,-30,756,661),9721=>array(24,0,715,691),9722=>array(65,0,756,691),9723=>array(55,43,512,500),9724=>array(55,43,512,500),9725=>array(45,127,390,472),9726=>array(45,127,390,472),9727=>array(24,0,715,691),9728=>array(32,-20,767,715),9729=>array(50,330,757,633),9730=>array(14,-15,734,677),9731=>array(52,-47,756,794),9732=>array(55,0,737,681),9733=>array(32,-13,779,707),9734=>array(32,2,784,719),9735=>array(39,-2,419,677),9736=>array(67,-112,629,665),9737=>array(32,0,692,660),9738=>array(27,-15,907,628),9739=>array(32,-15,912,628),9740=>array(32,0,654,622),9741=>array(32,-108,912,881),9742=>array(32,138,683,566),9743=>array(32,138,683,566),9744=>array(33,0,724,691),9745=>array(32,0,723,691),9746=>array(32,0,723,691),9747=>array(32,0,724,692),9748=>array(40,-15,760,894),9749=>array(32,-16,805,751),9750=>array(32,0,687,655),9751=>array(32,0,687,655),9752=>array(32,-18,750,696),9753=>array(21,121,779,570),9754=>array(20,105,785,488),9755=>array(20,105,785,488),9756=>array(20,113,767,479),9757=>array(31,-38,398,710),9758=>array(33,113,780,479),9759=>array(32,-48,399,700),9760=>array(32,0,485,699),9761=>array(32,0,628,744),9762=>array(32,-16,692,644),9763=>array(32,-5,700,625),9764=>array(32,-158,854,666),9765=>array(32,-178,545,684),9766=>array(32,0,457,691),9767=>array(32,0,531,741),9768=>array(33,0,458,691),9769=>array(32,-22,738,683),9770=>array(32,0,693,666),9771=>array(32,-129,828,688),9772=>array(32,-18,636,762),9773=>array(32,-2,721,665),9774=>array(32,0,692,660),9775=>array(32,0,698,666),9776=>array(50,0,550,500),9777=>array(50,0,550,500),9778=>array(50,0,550,500),9779=>array(50,0,550,500),9780=>array(50,0,550,500),9781=>array(50,0,550,500),9782=>array(50,0,550,500),9783=>array(50,0,550,500),9784=>array(32,0,698,666),9785=>array(32,0,692,660),9786=>array(32,0,692,660),9787=>array(32,0,692,660),9788=>array(32,-20,767,715),9789=>array(219,-85,627,585),9790=>array(32,-85,440,585),9791=>array(32,-215,463,733),9792=>array(32,-215,463,537),9793=>array(32,0,463,752),9794=>array(32,0,654,622),9795=>array(32,0,629,683),9796=>array(32,-194,512,683),9797=>array(32,-11,576,621),9798=>array(32,-15,573,615),9799=>array(40,0,513,683),9800=>array(32,-11,772,707),9801=>array(32,-15,551,714),9802=>array(32,-55,764,750),9803=>array(32,0,974,694),9804=>array(32,-170,793,670),9805=>array(32,-194,1157,697),9806=>array(32,0,1112,505),9807=>array(32,-111,1157,694),9808=>array(32,0,651,619),9809=>array(32,-11,776,694),9810=>array(32,-15,1115,446),9811=>array(32,0,765,695),9812=>array(97,0,703,658),9813=>array(54,0,747,646),9814=>array(149,0,651,587),9815=>array(77,-23,723,670),9816=>array(101,0,698,591),9817=>array(186,0,615,588),9818=>array(97,0,704,656),9819=>array(53,-1,747,645),9820=>array(150,0,651,583),9821=>array(76,-30,724,666),9822=>array(99,0,700,589),9823=>array(185,0,614,588),9824=>array(107,0,664,705),9825=>array(73,-14,697,704),9826=>array(122,-14,648,705),9827=>array(32,0,738,705),9828=>array(107,0,664,705),9829=>array(73,-14,697,704),9830=>array(122,-14,648,705),9831=>array(32,0,738,705),9832=>array(32,-20,863,718),9833=>array(38,-10,278,767),9834=>array(38,-10,476,767),9835=>array(38,-10,664,770),9836=>array(38,-10,664,678),9837=>array(56,-104,329,822),9838=>array(56,-300,324,665),9839=>array(50,-300,365,654),9840=>array(32,0,610,723),9841=>array(32,0,623,733),9842=>array(32,-64,837,715),9843=>array(32,-64,873,751),9844=>array(32,-64,873,751),9845=>array(32,-64,873,751),9846=>array(32,-64,873,751),9847=>array(32,-64,873,751),9848=>array(32,-64,873,751),9849=>array(32,-64,873,751),9850=>array(32,-64,873,751),9851=>array(33,-175,984,728),9852=>array(32,-216,1032,784),9853=>array(32,-216,1032,784),9854=>array(32,-112,922,778),9855=>array(32,-7,574,673),9856=>array(35,0,487,454),9857=>array(35,0,487,454),9858=>array(35,0,487,454),9859=>array(35,0,487,454),9860=>array(35,0,487,454),9861=>array(35,0,487,454),9862=>array(32,-62,813,718),9863=>array(32,-62,812,718),9864=>array(32,-62,812,718),9865=>array(32,-62,812,718),9866=>array(32,311,716,404),9867=>array(32,311,716,404),9868=>array(32,219,716,499),9869=>array(32,219,716,499),9870=>array(32,219,716,499),9871=>array(32,219,716,499),9872=>array(42,-117,694,678),9873=>array(42,-118,694,677),9874=>array(32,-74,931,704),9875=>array(32,-137,738,671),9876=>array(32,-81,1006,621),9877=>array(42,-140,348,698),9878=>array(32,-131,965,694),9879=>array(32,-22,755,676),9880=>array(32,-93,476,686),9881=>array(32,-73,777,672),9882=>array(32,-132,982,684),9883=>array(32,-167,827,724),9884=>array(32,-145,786,675),9885=>array(32,-148,940,727),9888=>array(7,0,893,767),9889=>array(30,-54,516,747),9890=>array(39,-154,745,500),9891=>array(39,-79,756,681),9892=>array(39,-200,708,790),9893=>array(39,-154,512,681),9894=>array(39,-12,571,702),9895=>array(39,-179,670,758),9896=>array(39,-12,472,779),9897=>array(39,68,831,500),9898=>array(54,179,557,682),9899=>array(54,179,557,682),9900=>array(55,242,486,673),9901=>array(55,242,727,673),9902=>array(55,242,970,675),9903=>array(55,242,1086,673),9904=>array(51,366,814,643),9905=>array(75,0,438,659),9906=>array(39,-154,472,500),9907=>array(99,-200,544,716),9908=>array(84,-200,638,716),9909=>array(105,-200,614,693),9910=>array(44,-169,733,622),9911=>array(41,-198,455,693),9912=>array(84,-200,518,750),9913=>array(44,-66,792,613),9914=>array(44,0,622,609),9915=>array(44,0,622,609),9916=>array(98,-177,609,496),9920=>array(0,70,669,498),9921=>array(-1,-5,669,598),9922=>array(-1,70,669,498),9923=>array(0,-5,669,598),9985=>array(35,71,939,617),9986=>array(35,81,927,611),9987=>array(35,69,939,615),9988=>array(35,0,945,691),9989=>array(36,-14,811,706),9990=>array(35,-13,755,707),9991=>array(35,-14,755,706),9992=>array(35,-13,761,705),9993=>array(35,137,655,556),9994=>array(29,-10,516,513),9995=>array(30,-10,545,701),9996=>array(29,-10,516,706),9997=>array(33,59,820,632),9998=>array(35,51,876,641),9999=>array(35,141,899,550),10000=>array(35,49,876,636),10001=>array(35,139,909,550),10002=>array(35,103,938,588),10003=>array(34,-14,721,705),10004=>array(36,-14,811,706),10005=>array(35,0,727,692),10006=>array(35,0,727,692),10007=>array(-1,-69,572,660),10008=>array(36,-14,642,705),10009=>array(35,0,728,694),10010=>array(35,0,726,691),10011=>array(35,0,725,690),10012=>array(35,0,720,685),10013=>array(35,0,460,691),10014=>array(35,0,517,691),10015=>array(35,0,503,691),10016=>array(35,96,542,595),10017=>array(35,-14,657,702),10018=>array(35,-13,751,705),10019=>array(35,-14,752,703),10020=>array(35,-14,753,705),10021=>array(35,-14,756,707),10022=>array(35,-13,759,705),10023=>array(35,-14,759,705),10024=>array(24,-14,787,683),10025=>array(35,2,787,719),10026=>array(35,-13,754,706),10027=>array(35,-14,807,706),10028=>array(35,-12,789,706),10029=>array(35,-14,798,706),10030=>array(35,-13,782,705),10031=>array(35,-13,796,707),10032=>array(35,-13,888,706),10033=>array(35,0,710,691),10034=>array(35,0,688,691),10035=>array(35,0,714,691),10036=>array(34,-15,756,706),10037=>array(35,-14,758,705),10038=>array(35,-16,661,706),10039=>array(35,-7,741,698),10040=>array(35,-7,734,699),10041=>array(35,-1,757,720),10042=>array(35,0,725,693),10043=>array(35,-11,672,704),10044=>array(35,-14,672,704),10045=>array(35,-3,647,694),10046=>array(35,-13,666,708),10047=>array(35,-18,791,716),10048=>array(35,-16,780,705),10049=>array(35,-14,754,704),10050=>array(35,-14,754,704),10051=>array(33,0,674,717),10052=>array(36,0,651,688),10053=>array(35,0,661,693),10054=>array(35,0,655,681),10055=>array(34,-14,751,703),10056=>array(35,-15,752,704),10057=>array(35,-13,678,709),10058=>array(35,-14,756,707),10059=>array(36,-14,751,701),10060=>array(35,-4,732,694),10061=>array(35,-13,838,705),10062=>array(21,-23,759,715),10063=>array(35,0,727,691),10064=>array(35,0,727,691),10065=>array(35,0,725,691),10066=>array(35,0,725,691),10067=>array(30,-16,566,674),10068=>array(30,-15,566,674),10069=>array(40,-15,232,674),10070=>array(35,-14,749,705),10071=>array(81,-13,251,691),10072=>array(35,0,104,691),10073=>array(35,0,242,691),10074=>array(35,0,380,691),10075=>array(35,263,357,705),10076=>array(34,262,357,705),10077=>array(35,263,633,705),10078=>array(36,263,634,705),10079=>array(34,-168,357,275),10080=>array(36,-156,634,286),10081=>array(35,-143,697,805),10082=>array(56,-14,488,705),10083=>array(34,-14,508,704),10084=>array(35,40,875,651),10085=>array(35,-13,633,706),10086=>array(35,-13,726,705),10087=>array(21,121,779,570),10088=>array(35,-14,356,705),10089=>array(35,-14,355,705),10090=>array(35,0,283,691),10091=>array(35,0,283,691),10092=>array(35,0,242,691),10093=>array(35,0,242,691),10094=>array(35,0,475,691),10095=>array(35,0,475,691),10096=>array(35,0,375,691),10097=>array(35,0,375,691),10098=>array(35,-14,199,705),10099=>array(35,-14,199,705),10100=>array(35,0,299,691),10101=>array(35,0,299,691),10102=>array(35,-13,754,706),10103=>array(35,-13,754,706),10104=>array(35,-13,754,706),10105=>array(35,-13,754,706),10106=>array(35,-13,754,706),10107=>array(35,-13,754,706),10108=>array(35,-13,754,706),10109=>array(35,-13,754,706),10110=>array(35,-13,754,706),10111=>array(35,-13,754,706),10112=>array(35,-13,754,706),10113=>array(35,-13,754,706),10114=>array(35,-13,754,706),10115=>array(35,-13,754,706),10116=>array(35,-13,754,706),10117=>array(35,-13,754,706),10118=>array(35,-13,754,706),10119=>array(35,-13,754,706),10120=>array(35,-13,754,706),10121=>array(35,-13,754,706),10122=>array(35,-13,755,706),10123=>array(34,-13,754,706),10124=>array(34,-13,754,706),10125=>array(35,-13,754,706),10126=>array(35,-13,754,706),10127=>array(35,-13,754,706),10128=>array(35,-13,754,706),10129=>array(35,-13,754,706),10130=>array(35,-13,754,706),10131=>array(35,-13,754,706),10132=>array(35,58,860,634),10133=>array(34,-14,722,675),10134=>array(34,264,722,396),10135=>array(34,-14,722,674),10136=>array(35,94,698,597),10137=>array(35,140,890,551),10138=>array(35,94,698,597),10139=>array(35,167,884,526),10140=>array(35,28,892,664),10141=>array(35,129,891,562),10142=>array(35,129,893,561),10143=>array(35,154,799,537),10144=>array(35,97,838,594),10145=>array(35,104,791,588),10146=>array(35,82,889,610),10147=>array(35,82,889,610),10148=>array(35,4,882,688),10149=>array(34,83,896,608),10150=>array(35,84,896,608),10151=>array(35,-100,429,790),10152=>array(35,70,848,621),10153=>array(35,43,802,648),10154=>array(35,43,802,648),10155=>array(35,101,832,589),10156=>array(35,101,832,591),10157=>array(35,44,661,651),10158=>array(35,44,661,646),10159=>array(35,75,840,613),10160=>array(0,166,832,674),10161=>array(35,75,840,613),10162=>array(35,1,725,690),10163=>array(35,159,911,532),10164=>array(34,36,736,655),10165=>array(35,209,830,483),10166=>array(34,36,736,655),10167=>array(34,-18,853,711),10168=>array(35,123,932,568),10169=>array(34,-20,853,710),10170=>array(35,113,796,578),10171=>array(36,116,838,576),10172=>array(35,149,891,542),10173=>array(35,75,932,615),10174=>array(34,99,884,592),10175=>array(0,166,1248,674),10176=>array(62,0,447,391),10177=>array(26,0,814,676),10178=>array(82,0,670,662),10179=>array(52,28,584,526),10180=>array(52,28,584,526),10183=>array(19,-1,545,507),10184=>array(0,-14,814,676),10185=>array(52,-14,867,676),10186=>array(30,-14,190,676),10188=>array(43,-55,847,900),10190=>array(61,0,575,514),10191=>array(61,0,575,514),10192=>array(36,-13,754,705),10193=>array(19,-1,545,507),10194=>array(19,19,517,451),10195=>array(62,0,412,350),10196=>array(62,0,412,350),10197=>array(40,2,705,506),10198=>array(50,2,715,506),10199=>array(40,2,834,506),10200=>array(62,0,650,800),10201=>array(62,0,650,800),10202=>array(62,0,828,514),10203=>array(62,0,828,514),10204=>array(62,89,904,424),10205=>array(50,122,876,394),10206=>array(50,122,876,394),10207=>array(50,0,322,676),10208=>array(18,0,466,740),10209=>array(35,-13,626,578),10210=>array(35,-13,706,578),10211=>array(35,-13,706,578),10212=>array(34,0,695,514),10213=>array(61,0,722,514),10214=>array(88,-156,421,662),10215=>array(34,-156,367,662),10216=>array(25,-188,306,736),10217=>array(23,-188,304,736),10218=>array(25,-188,475,736),10219=>array(21,-188,471,736),10224=>array(45,-163,956,678),10225=>array(45,-163,956,678),10226=>array(32,-15,1059,855),10227=>array(45,-15,1072,855),10228=>array(62,-44,902,558),10229=>array(0,52,1000,462),10230=>array(0,52,1000,462),10231=>array(0,52,1000,462),10232=>array(0,5,1000,510),10233=>array(0,5,1000,510),10234=>array(0,5,1000,510),10235=>array(0,52,1000,462),10236=>array(0,52,1000,462),10237=>array(0,5,1000,510),10238=>array(0,5,1000,510),10239=>array(20,52,1360,462),10624=>array(80,-14,340,676),10625=>array(65,191,335,461),10626=>array(30,125,209,545),10627=>array(100,-181,380,680),10628=>array(100,-181,380,680),10629=>array(48,-177,304,676),10630=>array(29,-177,285,676),10635=>array(78,-251,323,662),10636=>array(10,-251,255,662),10641=>array(25,-188,306,736),10642=>array(23,-188,306,736),10649=>array(40,1,139,779),10651=>array(29,-40,541,453),10653=>array(46,0,530,498),10654=>array(18,0,547,453),10656=>array(35,0,467,510),10657=>array(-4,39,506,471),10658=>array(18,0,530,453),10659=>array(45,0,557,453),10660=>array(18,-140,530,453),10661=>array(45,-140,557,453),10672=>array(28,64,631,667),10673=>array(30,-14,632,772),10674=>array(30,-14,632,853),10675=>array(30,-14,632,850),10676=>array(30,-14,632,850),10677=>array(25,-13,901,673),10678=>array(17,-44,619,558),10679=>array(26,-23,766,717),10680=>array(17,-44,619,558),10681=>array(26,-23,766,717),10684=>array(26,-23,766,717),10686=>array(30,-23,770,717),10687=>array(30,-23,770,717),10688=>array(26,-23,766,717),10689=>array(26,-23,766,717),10690=>array(26,-23,947,717),10691=>array(26,-23,1020,717),10692=>array(61,0,575,514),10693=>array(61,0,575,514),10694=>array(61,0,575,514),10695=>array(61,0,575,514),10696=>array(61,0,575,514),10697=>array(40,0,674,634),10698=>array(26,0,814,853),10699=>array(35,-125,858,706),10700=>array(26,0,814,676),10701=>array(24,0,907,676),10702=>array(82,-14,812,675),10703=>array(32,-14,826,398),10704=>array(44,-14,838,398),10705=>array(50,-33,652,535),10706=>array(50,-33,652,535),10707=>array(50,-33,652,535),10708=>array(50,-33,652,535),10709=>array(50,-33,652,535),10710=>array(67,0,635,602),10711=>array(67,0,635,602),10726=>array(62,0,742,514),10728=>array(26,0,814,676),10729=>array(26,0,814,676),10731=>array(23,0,471,740),10740=>array(30,-11,980,459),10741=>array(40,-14,336,676),10742=>array(20,-14,331,800),10743=>array(40,-14,336,676),10744=>array(0,-200,400,800),10745=>array(0,-200,400,800),10752=>array(30,-49,830,751),10753=>array(30,-49,830,751),10754=>array(30,-49,830,751),10755=>array(60,-50,703,695),10756=>array(61,-50,703,695),10757=>array(62,-44,694,735),10758=>array(62,-50,694,729),10761=>array(30,-31,715,654),10781=>array(50,-33,652,535),10786=>array(30,0,534,661),10787=>array(30,0,534,674),10788=>array(30,0,534,662),10789=>array(30,-153,534,506),10790=>array(30,-149,534,506),10791=>array(30,-63,537,506),10800=>array(38,8,526,661),10801=>array(32,-125,532,497),10808=>array(26,-23,766,717),10809=>array(26,0,814,676),10810=>array(26,0,814,676),10811=>array(26,0,814,676),10815=>array(23,0,706,662),10993=>array(50,-13,322,663),10994=>array(30,-14,290,676),10995=>array(11,-14,341,676),10996=>array(80,-14,360,676),10997=>array(30,-14,390,676),11008=>array(48,-195,955,712),11009=>array(48,-195,955,712),11010=>array(48,-195,955,712),11011=>array(48,-195,955,712),11012=>array(56,8,1188,560),11013=>array(56,8,944,560),11014=>array(224,-160,776,728),11015=>array(224,-160,776,728),11016=>array(48,-195,955,712),11017=>array(48,-195,955,712),11018=>array(48,-195,955,712),11019=>array(48,-195,955,712),11020=>array(56,8,1188,560),11021=>array(224,-282,776,850),11022=>array(33,91,749,450),11023=>array(23,88,739,447),11024=>array(23,88,739,447),11025=>array(33,91,749,450),11026=>array(57,-44,713,612),11027=>array(57,-44,713,612),11028=>array(57,-44,713,612),11029=>array(57,-44,713,612),11030=>array(5,-96,766,665),11031=>array(5,-96,766,665),11032=>array(5,-96,766,665),11033=>array(5,-96,766,665),11034=>array(57,-44,713,612),11035=>array(68,-147,932,716),11036=>array(68,-147,932,716),11037=>array(32,174,251,394),11038=>array(32,174,251,394),11039=>array(48,-34,799,679),11040=>array(48,-34,799,679),11041=>array(57,-111,743,679),11042=>array(57,-111,743,679),11043=>array(9,-59,799,627),11044=>array(20,-196,980,765),11045=>array(11,64,451,504),11046=>array(11,64,451,504),11047=>array(64,64,397,504),11048=>array(64,64,397,504),11049=>array(13,117,348,452),11050=>array(54,117,307,452),11051=>array(15,117,268,452),11052=>array(20,19,835,550),11053=>array(20,19,835,550),11054=>array(49,-124,580,692),11055=>array(49,-124,580,692),11056=>array(30,52,870,462),11057=>array(40,-258,880,832),11088=>array(20,50,570,573),11089=>array(5,106,424,504),11090=>array(5,106,424,504),11091=>array(57,-91,771,660),11092=>array(57,-91,771,660),11264=>array(40,0,605,662),11265=>array(40,-128,753,662),11266=>array(40,162,811,662),11267=>array(40,-91,660,662),11268=>array(40,164,811,664),11269=>array(40,-14,600,676),11270=>array(40,0,734,671),11271=>array(40,0,625,662),11272=>array(40,-1,693,662),11273=>array(40,-109,794,662),11274=>array(40,-35,794,662),11275=>array(40,-8,694,662),11276=>array(40,0,750,800),11277=>array(40,-83,540,662),11278=>array(40,-1,794,560),11279=>array(40,-69,939,662),11280=>array(40,0,698,662),11281=>array(40,-66,370,676),11282=>array(40,0,735,662),11283=>array(40,-1,431,662),11284=>array(40,-8,694,662),11285=>array(40,330,811,662),11286=>array(40,0,855,662),11287=>array(40,-20,682,662),11288=>array(40,-125,598,662),11289=>array(40,0,580,662),11290=>array(40,0,681,662),11291=>array(40,0,753,662),11292=>array(40,-11,781,662),11293=>array(40,0,659,662),11294=>array(40,310,753,662),11295=>array(40,-66,642,676),11296=>array(40,-66,529,676),11297=>array(30,0,761,662),11299=>array(0,-200,711,662),11300=>array(40,-14,665,676),11301=>array(40,-14,834,676),11302=>array(40,0,625,662),11303=>array(40,-14,1099,676),11304=>array(40,-14,983,676),11305=>array(40,-14,1198,676),11306=>array(40,0,722,662),11310=>array(40,0,719,662),11312=>array(30,168,454,665),11313=>array(30,72,565,665),11314=>array(30,289,609,665),11315=>array(30,99,495,665),11316=>array(30,291,609,666),11317=>array(30,157,450,675),11318=>array(30,168,551,672),11319=>array(30,168,469,665),11320=>array(30,167,520,665),11321=>array(30,86,596,665),11322=>array(30,141,596,665),11323=>array(30,162,521,665),11324=>array(30,168,563,768),11325=>array(30,105,405,665),11326=>array(30,167,596,588),11327=>array(30,116,705,665),11328=>array(30,168,524,665),11329=>array(30,118,278,675),11330=>array(30,168,552,665),11331=>array(30,167,324,665),11332=>array(30,162,521,665),11333=>array(30,415,609,665),11334=>array(30,168,642,665),11335=>array(30,153,512,665),11336=>array(30,74,449,665),11337=>array(30,168,435,665),11338=>array(30,168,511,665),11339=>array(30,168,565,665),11340=>array(30,159,586,665),11341=>array(30,168,495,665),11342=>array(30,400,565,665),11343=>array(30,118,482,675),11344=>array(30,118,397,675),11345=>array(20,168,569,665),11347=>array(0,18,534,665),11348=>array(30,157,499,675),11349=>array(30,157,626,675),11350=>array(30,168,469,665),11351=>array(30,157,825,675),11352=>array(30,157,738,675),11353=>array(30,157,899,675),11354=>array(30,168,542,665),11358=>array(30,168,540,665),11360=>array(0,0,598,662),11361=>array(5,0,283,683),11362=>array(3,0,614,662),11363=>array(0,0,542,662),11364=>array(17,-200,659,662),11365=>array(25,-44,430,516),11366=>array(13,-68,289,579),11367=>array(19,-170,710,662),11368=>array(10,-125,491,683),11369=>array(34,-170,731,662),11370=>array(10,-125,511,683),11371=>array(9,-170,581,662),11372=>array(10,-125,390,450),11373=>array(35,-15,667,673),11374=>array(12,-204,863,662),11375=>array(15,-11,706,663),11376=>array(13,-14,645,674),11377=>array(5,-14,619,460),11378=>array(5,-11,1063,676),11379=>array(5,-14,847,460),11380=>array(10,-14,463,522),11381=>array(19,0,513,662),11382=>array(9,0,346,451),11383=>array(25,-11,587,463),11384=>array(25,-10,554,460),11385=>array(5,-8,337,670),11386=>array(25,-10,466,460),11387=>array(5,0,387,431),11388=>array(0,-291,172,295),11389=>array(6,222,450,661),11390=>array(42,-217,491,676),11391=>array(9,-218,577,662),11392=>array(24,-11,695,676),11393=>array(16,-7,486,460),11394=>array(32,-14,496,675),11395=>array(22,-11,355,460),11396=>array(32,-10,582,662),11397=>array(22,-7,411,450),11398=>array(32,-51,937,676),11399=>array(23,-35,658,460),11400=>array(36,-15,611,676),11401=>array(24,-10,419,460),11402=>array(36,-24,561,674),11403=>array(22,-32,379,458),11404=>array(32,-126,553,674),11405=>array(22,-86,393,458),11406=>array(32,-10,666,674),11407=>array(22,-7,487,458),11408=>array(36,-14,690,676),11409=>array(24,-10,469,460),11410=>array(40,-10,243,675),11411=>array(42,-7,196,460),11412=>array(32,-7,614,676),11413=>array(22,-6,433,460),11414=>array(32,-137,745,800),11415=>array(23,-116,551,566),11416=>array(32,-10,787,676),11417=>array(22,-7,567,460),11418=>array(32,-10,666,676),11419=>array(22,-7,485,460),11420=>array(36,-125,535,676),11421=>array(22,-85,391,460),11422=>array(35,-14,689,676),11423=>array(20,-10,461,460),11424=>array(32,-10,692,662),11425=>array(22,-7,502,450),11426=>array(41,-181,490,676),11427=>array(26,-220,351,460),11428=>array(36,-15,611,676),11429=>array(25,-10,416,460),11430=>array(32,-10,582,662),11431=>array(22,-7,411,450),11432=>array(32,-181,687,675),11433=>array(22,-220,497,460),11434=>array(36,-181,726,800),11435=>array(24,-220,514,566),11436=>array(32,-137,741,676),11437=>array(22,-116,541,460),11438=>array(32,-181,689,800),11439=>array(22,-220,497,566),11440=>array(36,-15,928,675),11441=>array(24,-10,657,460),11456=>array(32,-181,653,675),11457=>array(22,-220,442,603),11464=>array(36,-119,547,673),11465=>array(22,-81,369,458),11466=>array(32,-65,461,676),11467=>array(22,-44,333,460),11492=>array(23,-102,391,459),11493=>array(22,-220,478,797),11494=>array(16,-220,465,797),11495=>array(24,-220,962,788),11496=>array(19,-220,437,797),11497=>array(22,-220,541,797),11498=>array(29,-10,910,459),11517=>array(32,59,224,392),11518=>array(167,-5,547,673),11519=>array(12,477,256,675),11744=>array(-240,472,-10,798),11745=>array(-220,471,-9,683),11746=>array(-193,470,-10,682),11747=>array(-200,471,-9,683),11748=>array(-296,468,-6,687),11749=>array(-170,472,-5,684),11750=>array(-234,470,-11,684),11751=>array(-237,466,-13,681),11752=>array(-313,463,-6,684),11753=>array(-231,470,-3,682),11754=>array(-206,470,-4,682),11755=>array(-227,470,-9,682),11756=>array(-212,374,-6,680),11757=>array(-191,469,-12,681),11758=>array(-197,470,-7,682),11759=>array(-225,471,-7,683),11760=>array(-226,411,-11,682),11761=>array(-246,470,-12,682),11762=>array(-338,470,-4,682),11763=>array(-326,412,-6,683),11764=>array(-202,470,-3,682),11765=>array(-388,465,-6,687),11766=>array(-206,470,-8,681),11767=>array(-191,470,-3,683),11768=>array(-230,470,-4,683),11769=>array(-220,470,-5,798),11770=>array(-256,470,-4,798),11771=>array(-312,465,-12,691),11772=>array(-293,465,-4,687),11773=>array(-306,470,-6,682),11774=>array(-318,470,-3,682),11775=>array(-415,469,-6,683),11776=>array(33,159,311,663),11777=>array(33,159,311,663),11782=>array(22,159,512,663),11783=>array(22,159,512,663),11787=>array(35,524,311,800),11788=>array(50,401,450,800),11789=>array(50,401,450,800),11791=>array(0,-125,1000,-75),11792=>array(0,-201,1000,-75),11793=>array(0,-201,1000,-75),11798=>array(28,-19,536,675),11799=>array(43,82,281,341),11800=>array(68,-8,414,676),11802=>array(18,194,316,622),11803=>array(19,186,481,580),11804=>array(50,-219,450,180),11805=>array(50,-219,450,180),11806=>array(19,186,481,461),11807=>array(19,22,481,320),11808=>array(88,-156,299,662),11809=>array(34,-156,245,662),11810=>array(88,253,299,662),11811=>array(34,253,245,662),11812=>array(88,-156,299,253),11813=>array(34,-156,245,253),11814=>array(52,28,804,526),11815=>array(52,28,804,526),11816=>array(48,-177,435,676),11817=>array(29,-177,416,676),11818=>array(10,1,610,574),11819=>array(-82,92,492,483),11820=>array(-82,92,492,483),11821=>array(12,1,609,665),11822=>array(70,-8,416,676),11823=>array(67,645,183,900),11824=>array(65,196,335,466),11825=>array(75,183,174,282),42560=>array(9,-155,577,662),42561=>array(15,-155,391,450),42562=>array(9,-155,577,662),42563=>array(13,-155,391,450),42564=>array(21,-14,470,676),42565=>array(35,-10,332,459),42566=>array(42,-15,346,663),42567=>array(65,-10,271,451),42568=>array(14,0,705,662),42569=>array(10,0,509,532),42570=>array(17,-176,542,668),42571=>array(25,-10,433,702),42572=>array(34,-14,1111,676),42573=>array(25,-10,750,461),42574=>array(0,0,638,683),42575=>array(0,0,522,683),42576=>array(10,0,993,662),42577=>array(14,0,713,450),42578=>array(20,0,885,663),42579=>array(16,0,650,683),42580=>array(39,-14,951,676),42581=>array(25,-10,679,460),42582=>array(12,0,1027,674),42583=>array(15,-10,633,460),42584=>array(15,0,706,674),42585=>array(10,0,499,458),42586=>array(15,0,917,662),42587=>array(10,0,690,496),42588=>array(12,0,1032,674),42589=>array(15,0,735,458),42590=>array(25,-215,764,672),42591=>array(10,-215,535,464),42592=>array(10,-170,702,662),42593=>array(14,-125,508,450),42594=>array(10,-170,880,662),42595=>array(12,-125,620,450),42596=>array(5,-13,918,662),42597=>array(5,-9,620,450),42598=>array(12,0,1121,662),42599=>array(16,-14,762,450),42600=>array(35,-14,689,676),42601=>array(25,-10,466,460),42602=>array(34,-14,756,676),42603=>array(29,-10,530,460),42604=>array(34,-14,1228,676),42605=>array(25,-10,816,460),42606=>array(24,-6,709,746),42607=>array(-412,723,-18,839),42608=>array(-768,-152,284,900),42609=>array(-661,-202,159,878),42610=>array(-664,-257,198,900),42611=>array(26,364,493,900),42620=>array(-541,683,-31,834),42621=>array(-206,522,-46,788),42622=>array(0,683,510,834),42623=>array(14,522,174,788),42624=>array(10,-170,631,790),42625=>array(12,-125,476,578),42626=>array(8,-13,457,776),42627=>array(25,-10,322,779),42628=>array(20,-15,1149,676),42629=>array(10,-8,828,459),42630=>array(10,0,992,662),42631=>array(16,0,750,450),42632=>array(10,-300,724,662),42633=>array(12,-300,524,450),42634=>array(16,-163,719,662),42635=>array(10,-190,519,450),42636=>array(16,-14,592,662),42637=>array(10,-28,427,450),42638=>array(20,-232,719,662),42639=>array(9,-208,530,450),42640=>array(16,-296,592,662),42641=>array(8,-296,468,450),42642=>array(16,0,912,662),42643=>array(14,0,640,450),42644=>array(9,0,657,677),42645=>array(16,0,498,662),42646=>array(20,-232,964,662),42647=>array(16,-208,763,450),42752=>array(26,-124,292,125),42753=>array(26,-193,292,125),42754=>array(26,551,292,800),42755=>array(26,482,292,800),42756=>array(26,551,292,800),42757=>array(25,481,292,800),42758=>array(26,-124,292,125),42759=>array(25,-194,292,125),42760=>array(50,-1,257,800),42761=>array(50,-1,257,800),42762=>array(50,-1,257,800),42763=>array(50,-1,257,800),42764=>array(50,-7,257,800),42765=>array(50,-1,257,806),42766=>array(50,-1,257,800),42767=>array(50,-1,257,800),42768=>array(50,-1,257,800),42769=>array(50,-1,257,800),42770=>array(20,0,410,800),42771=>array(20,0,410,800),42772=>array(20,0,410,800),42773=>array(20,0,410,800),42774=>array(20,0,410,800),42775=>array(60,296,294,800),42776=>array(24,396,429,800),42777=>array(30,566,534,800),42778=>array(30,578,534,856),42779=>array(44,335,310,801),42780=>array(44,335,310,801),42781=>array(86,354,157,801),42782=>array(86,354,157,801),42783=>array(86,83,157,530),42784=>array(30,578,534,856),42785=>array(30,-277,534,131),42786=>array(15,-14,260,674),42787=>array(43,-13,212,461),42788=>array(16,233,371,675),42789=>array(15,148,260,460),42790=>array(19,-218,702,662),42791=>array(10,-218,428,683),42792=>array(17,0,869,662),42793=>array(13,-10,677,579),42794=>array(44,-15,500,676),42795=>array(25,-14,394,663),42796=>array(12,-52,370,676),42797=>array(53,-215,370,450),42798=>array(12,-139,537,676),42799=>array(53,-215,545,450),42800=>array(10,0,398,450),42801=>array(33,-14,359,460),42802=>array(15,0,1167,674),42803=>array(25,-10,679,461),42804=>array(15,-14,1104,676),42805=>array(25,-10,716,460),42806=>array(15,-14,1074,674),42807=>array(25,-11,683,460),42808=>array(15,-11,889,674),42809=>array(25,-15,558,460),42810=>array(15,-11,889,674),42811=>array(25,-15,558,460),42812=>array(15,-218,899,674),42813=>array(25,-218,544,460),42814=>array(34,-14,639,676),42815=>array(20,-10,407,460),42816=>array(34,0,723,662),42817=>array(10,0,508,683),42818=>array(34,0,723,662),42819=>array(10,0,508,683),42820=>array(34,0,723,662),42821=>array(9,0,507,683),42822=>array(12,0,700,662),42823=>array(10,0,331,683),42824=>array(0,0,598,662),42825=>array(5,0,283,683),42826=>array(14,-14,736,676),42827=>array(14,-10,530,460),42828=>array(34,-14,899,676),42829=>array(25,-10,636,460),42830=>array(34,-14,1228,676),42831=>array(25,-10,816,460),42832=>array(16,0,542,662),42833=>array(10,-217,475,460),42838=>array(34,-178,701,676),42839=>array(25,-217,575,461),42842=>array(21,0,367,675),42843=>array(25,-10,327,459),42852=>array(16,0,542,662),42853=>array(10,-217,475,683),42854=>array(16,0,542,662),42855=>array(10,-217,475,683),42862=>array(30,-22,459,676),42863=>array(25,-218,464,459),42864=>array(20,254,293,675),42873=>array(34,-14,688,772),42874=>array(25,-10,466,669),42875=>array(10,-200,472,676),42876=>array(10,-200,338,460),42877=>array(31,-6,556,662),42878=>array(31,-6,556,662),42879=>array(25,-113,416,450),42880=>array(9,0,595,662),42881=>array(10,0,248,683),42882=>array(24,-200,673,676),42883=>array(16,-200,485,460),42884=>array(10,-200,472,676),42885=>array(10,-200,338,460),42886=>array(28,-14,633,664),42887=>array(25,-10,412,450),42888=>array(11,-102,322,65),42889=>array(80,-11,191,459),42890=>array(15,120,267,386),42891=>array(90,176,196,760),42892=>array(90,375,188,760),42893=>array(19,0,702,662),42896=>array(12,-129,707,662),42897=>array(10,-108,482,460),42922=>array(5,0,817,662),43002=>array(9,-10,768,450),43003=>array(12,0,546,662),43004=>array(16,0,542,662),43005=>array(12,0,863,662),43006=>array(18,0,315,800),43007=>array(5,-11,1295,662),43232=>array(-331,504,-148,686),43233=>array(-311,347,-166,758),43234=>array(-331,376,-111,737),43235=>array(-321,376,-131,743),43236=>array(-401,490,-114,758),43237=>array(-363,405,-111,758),43238=>array(-351,376,-131,761),43239=>array(-381,452,-94,758),43240=>array(-360,433,-101,701),43241=>array(-351,376,-107,758),43242=>array(-451,433,1,758),43243=>array(-390,453,-52,758),43244=>array(-420,434,-9,758),43245=>array(-400,433,-33,758),43246=>array(-410,433,-63,758),43247=>array(-390,433,-103,758),43248=>array(-460,433,20,900),43249=>array(-354,433,-95,759),43250=>array(40,462,384,678),43251=>array(40,268,432,678),43252=>array(40,28,432,678),43253=>array(40,-133,384,678),43254=>array(40,-135,384,678),43255=>array(39,-70,427,678),43256=>array(0,78,640,609),43257=>array(0,78,600,633),43258=>array(38,354,364,629),43259=>array(10,615,410,665),64256=>array(20,0,638,683),64257=>array(10,0,499,683),64258=>array(10,0,499,683),64259=>array(10,0,770,683),64260=>array(10,0,768,683),64261=>array(10,-10,576,683),64262=>array(35,-10,658,699),64275=>array(15,-10,956,676),64276=>array(15,-10,954,662),64277=>array(15,-200,963,662),64278=>array(15,-200,956,662),64279=>array(15,-200,1204,662),64285=>array(61,170,256,593),64286=>array(107,719,401,865),64287=>array(31,183,486,593),64288=>array(11,48,479,600),64289=>array(27,-5,768,584),64290=>array(25,-2,765,596),64291=>array(22,-2,748,598),64292=>array(15,0,748,598),64293=>array(74,2,744,820),64294=>array(30,0,775,598),64295=>array(24,-1,752,598),64296=>array(32,-1,781,598),64297=>array(30,220,534,506),64298=>array(29,0,531,703),64299=>array(29,0,531,703),64300=>array(29,0,531,703),64301=>array(29,0,531,703),64302=>array(27,-114,488,584),64303=>array(27,-221,488,584),64304=>array(27,-120,488,584),64305=>array(24,0,504,598),64306=>array(39,0,296,598),64307=>array(25,-2,482,596),64308=>array(22,-2,465,598),64309=>array(48,0,255,598),64310=>array(30,-1,267,598),64312=>array(27,0,496,598),64313=>array(61,283,256,593),64314=>array(26,-264,496,600),64315=>array(15,0,485,598),64316=>array(74,2,461,820),64318=>array(23,0,487,599),64320=>array(47,0,264,598),64321=>array(30,0,492,598),64323=>array(24,-263,485,600),64324=>array(19,0,472,598),64326=>array(13,0,476,598),64327=>array(21,-264,483,600),64328=>array(24,-1,469,598),64329=>array(29,0,531,598),64330=>array(32,-1,498,598),64331=>array(48,0,255,712),64332=>array(24,0,504,702),64333=>array(15,0,485,702),64334=>array(19,0,472,702),64335=>array(36,-5,498,843),64336=>array(-10,-48,280,829),64337=>array(0,0,290,829),64338=>array(75,-277,877,309),64339=>array(75,-277,877,309),64340=>array(-22,-277,232,309),64341=>array(-22,-277,322,309),64342=>array(75,-265,877,309),64343=>array(75,-265,877,309),64344=>array(-22,-265,266,309),64345=>array(-22,-265,322,309),64346=>array(75,-300,877,309),64347=>array(75,-300,877,309),64348=>array(-22,-300,268,309),64349=>array(-22,-300,322,309),64350=>array(75,0,877,521),64351=>array(75,0,877,521),64352=>array(-22,0,225,601),64353=>array(-22,0,322,601),64354=>array(75,0,877,534),64355=>array(75,0,877,534),64356=>array(-22,0,258,656),64357=>array(-22,0,322,655),64358=>array(75,0,877,617),64359=>array(75,0,877,617),64360=>array(-22,0,258,667),64361=>array(-22,0,322,667),64362=>array(75,0,868,644),64363=>array(75,0,881,594),64364=>array(-15,0,308,674),64365=>array(-23,0,351,594),64366=>array(75,0,868,733),64367=>array(75,0,881,675),64368=>array(-15,0,308,725),64369=>array(-23,0,351,675),64370=>array(75,-280,591,332),64371=>array(75,-280,605,332),64372=>array(-15,-227,590,330),64373=>array(-15,-227,645,330),64374=>array(75,-280,591,332),64375=>array(75,-280,605,332),64376=>array(-15,-140,590,330),64377=>array(-15,-140,645,330),64378=>array(75,-280,591,332),64379=>array(75,-280,605,332),64380=>array(-15,-215,590,330),64381=>array(-15,-215,645,330),64382=>array(75,-280,591,332),64383=>array(75,-280,605,332),64384=>array(-15,-270,590,330),64385=>array(-15,-270,645,330),64386=>array(55,-190,368,350),64387=>array(55,-190,368,350),64388=>array(55,0,368,551),64389=>array(55,0,368,551),64390=>array(55,0,368,634),64391=>array(55,0,368,634),64392=>array(55,0,368,727),64393=>array(55,0,368,727),64394=>array(0,-247,345,504),64395=>array(0,-247,345,504),64396=>array(0,-247,345,607),64397=>array(0,-247,345,607),64398=>array(75,0,902,701),64399=>array(75,0,978,701),64400=>array(-10,0,373,701),64401=>array(-10,0,479,701),64402=>array(75,0,902,800),64403=>array(75,0,978,801),64404=>array(-10,0,373,799),64405=>array(-10,0,479,801),64406=>array(75,-277,902,800),64407=>array(75,-277,978,801),64408=>array(-10,-257,373,799),64409=>array(-10,-257,479,801),64410=>array(75,0,902,800),64411=>array(75,0,978,801),64412=>array(-17,0,373,831),64413=>array(-17,0,479,831),64414=>array(75,-194,597,355),64415=>array(75,-194,597,355),64416=>array(75,-194,597,660),64417=>array(75,-194,597,660),64418=>array(-22,0,248,664),64419=>array(-22,0,322,664),64420=>array(75,-5,342,578),64421=>array(74,0,430,672),64422=>array(75,-5,342,359),64423=>array(75,-56,393,113),64424=>array(-5,-207,283,117),64425=>array(-4,-207,340,112),64426=>array(-23,0,413,364),64427=>array(-23,0,413,364),64428=>array(-23,0,476,364),64429=>array(50,-236,520,325),64430=>array(75,-170,710,265),64431=>array(75,-170,690,75),64432=>array(75,-170,710,510),64433=>array(75,-170,690,500),64434=>array(114,457,222,561),64435=>array(118,-200,226,-96),64436=>array(123,457,344,561),64437=>array(123,-200,344,-96),64438=>array(132,457,360,654),64439=>array(132,-263,360,-66),64440=>array(148,455,376,652),64441=>array(148,-265,376,-68),64442=>array(227,220,475,494),64443=>array(227,-301,475,-27),64444=>array(88,-300,247,-103),64445=>array(94,480,232,691),64446=>array(94,-277,232,-66),64447=>array(104,-260,237,-92),64448=>array(72,396,282,657),64449=>array(72,-300,282,-39),64467=>array(75,0,711,854),64468=>array(75,0,711,854),64469=>array(-10,0,373,832),64470=>array(-10,0,479,834),64471=>array(0,-247,329,561),64472=>array(0,-247,329,561),64473=>array(40,-247,369,484),64474=>array(40,-247,369,484),64475=>array(40,-247,369,547),64476=>array(40,-247,369,547),64477=>array(40,-247,522,561),64478=>array(40,-247,369,524),64479=>array(40,-247,369,524),64480=>array(40,-247,369,254),64481=>array(40,-247,369,254),64482=>array(40,-247,369,461),64483=>array(40,-247,369,461),64484=>array(75,-300,652,315),64485=>array(75,-460,685,156),64486=>array(-22,-277,225,309),64487=>array(-22,-277,322,309),64488=>array(-22,0,225,309),64489=>array(-22,0,322,309),64508=>array(75,-160,652,315),64509=>array(75,-241,685,156),64510=>array(-22,-189,243,309),64511=>array(-22,-190,322,309),64606=>array(72,511,329,900),64607=>array(105,534,309,900),64608=>array(74,621,299,900),64609=>array(31,531,289,900),64610=>array(105,629,319,900),64611=>array(85,531,269,871),64612=>array(5,-247,721,612),64613=>array(5,-247,721,612),64615=>array(121,-194,1011,612),64618=>array(5,-247,721,334),64619=>array(5,-247,721,401),64621=>array(121,-200,1011,486),64624=>array(5,-247,721,516),64625=>array(5,-247,721,516),64627=>array(121,-194,1011,516),64630=>array(5,-247,721,576),64631=>array(5,-247,721,576),64633=>array(121,-194,1011,576),64650=>array(5,-247,721,483),64651=>array(5,-247,721,483),64653=>array(121,-194,1011,486),64657=>array(5,-247,721,334),64658=>array(5,-247,721,401),64660=>array(121,-194,1011,486),64830=>array(25,-178,414,676),64831=>array(29,-178,418,676),65010=>array(52,0,1025,900),65020=>array(42,-247,1055,700),65056=>array(-286,524,0,673),65057=>array(-286,524,0,673),65058=>array(-375,549,0,685),65059=>array(-375,549,0,685),65060=>array(-155,547,156,601),65061=>array(-481,547,-170,601),65062=>array(-500,547,0,601),65136=>array(3,674,198,895),65137=>array(-5,0,205,895),65138=>array(2,666,246,900),65139=>array(33,0,373,290),65140=>array(3,-300,198,-79),65142=>array(3,704,198,835),65143=>array(-5,0,205,835),65144=>array(3,651,197,900),65145=>array(-5,0,205,900),65146=>array(3,-300,198,-169),65147=>array(-5,-300,205,80),65148=>array(9,721,193,880),65149=>array(-5,0,205,880),65150=>array(38,693,163,850),65151=>array(-5,0,205,850),65152=>array(85,-79,329,280),65153=>array(0,-48,275,800),65154=>array(-20,0,255,806),65155=>array(24,-48,182,890),65156=>array(28,0,247,900),65157=>array(40,-247,369,548),65158=>array(30,-247,359,548),65159=>array(47,-300,205,701),65160=>array(59,-290,247,700),65161=>array(75,-160,652,512),65162=>array(75,-161,690,492),65163=>array(-22,0,225,589),65164=>array(-22,0,322,590),65165=>array(100,-48,179,701),65166=>array(96,0,247,700),65167=>array(75,-200,877,309),65168=>array(75,-200,939,309),65169=>array(-22,-200,225,309),65170=>array(-22,-200,322,309),65171=>array(75,-5,342,531),65172=>array(74,0,430,541),65173=>array(75,0,877,421),65174=>array(75,0,939,411),65175=>array(-22,0,262,500),65176=>array(-22,0,322,500),65177=>array(75,0,877,494),65178=>array(75,0,939,494),65179=>array(-22,0,258,594),65180=>array(-22,0,322,594),65181=>array(75,-280,591,332),65182=>array(75,-280,605,332),65183=>array(-15,-140,590,330),65184=>array(-15,-130,645,330),65185=>array(75,-280,591,332),65186=>array(75,-280,605,332),65187=>array(-15,0,590,330),65188=>array(-15,0,645,330),65189=>array(75,-280,591,511),65190=>array(75,-280,605,511),65191=>array(-15,0,590,511),65192=>array(-15,0,645,511),65193=>array(55,0,368,350),65194=>array(55,0,413,350),65195=>array(55,0,368,561),65196=>array(55,0,413,561),65197=>array(0,-247,345,247),65198=>array(0,-247,408,247),65199=>array(0,-247,345,431),65200=>array(0,-247,408,429),65201=>array(75,-241,914,205),65202=>array(75,-241,914,205),65203=>array(-20,0,603,205),65204=>array(-20,0,618,205),65205=>array(75,-241,914,454),65206=>array(75,-241,914,454),65207=>array(-20,0,603,455),65208=>array(-20,0,603,455),65209=>array(75,-241,909,260),65210=>array(75,-241,909,260),65211=>array(-20,0,598,260),65212=>array(-20,0,598,260),65213=>array(75,-241,909,421),65214=>array(75,-241,909,421),65215=>array(-20,0,598,415),65216=>array(-20,0,598,415),65217=>array(0,0,568,695),65218=>array(0,0,568,695),65219=>array(-15,0,491,695),65220=>array(-10,0,544,695),65221=>array(0,0,568,695),65222=>array(0,0,568,695),65223=>array(-15,0,491,695),65224=>array(-10,0,544,695),65225=>array(75,-280,591,421),65226=>array(75,-280,591,336),65227=>array(-15,0,563,355),65228=>array(-15,0,462,322),65229=>array(75,-280,591,611),65230=>array(75,-280,591,541),65231=>array(-15,0,563,549),65232=>array(-15,0,462,541),65233=>array(75,0,868,601),65234=>array(75,0,881,511),65235=>array(-15,0,308,601),65236=>array(-23,0,351,501),65237=>array(75,-170,634,501),65238=>array(75,-170,634,501),65239=>array(-15,0,308,590),65240=>array(-23,0,351,500),65241=>array(-10,0,456,675),65242=>array(75,0,711,675),65243=>array(-10,0,373,701),65244=>array(-10,0,479,701),65245=>array(75,-239,598,675),65246=>array(75,-240,677,675),65247=>array(-10,0,217,674),65248=>array(-10,0,290,675),65249=>array(75,-300,467,429),65250=>array(74,-300,435,260),65251=>array(-15,-14,389,237),65252=>array(-15,-10,489,249),65253=>array(75,-194,597,496),65254=>array(75,-194,660,496),65255=>array(-22,0,225,498),65256=>array(-22,0,322,498),65257=>array(75,-5,342,359),65258=>array(74,0,430,364),65259=>array(-23,0,413,364),65260=>array(-23,-236,420,325),65261=>array(0,-247,329,254),65262=>array(0,-247,382,254),65263=>array(75,-160,652,315),65264=>array(75,-161,690,307),65265=>array(75,-300,652,315),65266=>array(75,-300,690,307),65267=>array(-22,-190,244,309),65268=>array(-22,-190,322,309),65269=>array(12,0,453,754),65270=>array(3,-4,604,754),65271=>array(11,0,443,900),65272=>array(23,-4,624,880),65273=>array(12,-300,443,713),65274=>array(23,-300,624,694),65275=>array(12,0,443,713),65276=>array(23,-4,624,694),65532=>array(84,1,731,664),65533=>array(19,-63,882,800),65535=>array(34,-71,566,750)); +$cw=array(0=>600,13=>600,32=>250,33=>333,34=>400,35=>500,36=>500,37=>833,38=>778,39=>200,40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>296,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>250,59=>250,60=>564,61=>564,62=>564,63=>444,64=>865,65=>721,66=>631,67=>670,68=>719,69=>610,70=>564,71=>722,72=>714,73=>327,74=>385,75=>709,76=>611,77=>881,78=>725,79=>724,80=>576,81=>723,82=>667,83=>529,84=>606,85=>721,86=>701,87=>947,88=>714,89=>701,90=>613,91=>333,92=>296,93=>333,94=>469,95=>500,96=>250,97=>435,98=>500,99=>444,100=>499,101=>444,102=>373,103=>467,104=>498,105=>278,106=>348,107=>513,108=>258,109=>779,110=>489,111=>491,112=>500,113=>499,114=>345,115=>367,116=>283,117=>490,118=>468,119=>683,120=>482,121=>471,122=>417,123=>480,124=>200,125=>480,126=>500,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>793,170=>276,171=>500,172=>564,173=>333,174=>792,175=>333,176=>400,177=>564,178=>320,179=>320,180=>250,181=>500,182=>483,183=>250,184=>333,185=>320,186=>310,187=>500,188=>730,189=>750,190=>750,191=>444,192=>721,193=>721,194=>721,195=>721,196=>721,197=>721,198=>888,199=>674,200=>610,201=>610,202=>610,203=>610,204=>327,205=>327,206=>327,207=>327,208=>719,209=>725,210=>724,211=>724,212=>724,213=>724,214=>724,215=>564,216=>724,217=>721,218=>721,219=>721,220=>721,221=>701,222=>577,223=>491,224=>435,225=>435,226=>435,227=>435,228=>435,229=>435,230=>639,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>492,241=>489,242=>491,243=>491,244=>491,245=>491,246=>491,247=>564,248=>491,249=>490,250=>490,251=>490,252=>490,253=>471,254=>500,255=>471,256=>721,257=>435,258=>721,259=>435,260=>717,261=>437,262=>670,263=>444,264=>670,265=>444,266=>670,267=>444,268=>670,269=>444,270=>719,271=>635,272=>719,273=>498,274=>610,275=>444,276=>610,277=>444,278=>610,279=>444,280=>611,281=>444,282=>610,283=>444,284=>722,285=>467,286=>722,287=>467,288=>722,289=>467,290=>722,291=>467,292=>714,293=>498,294=>711,295=>498,296=>327,297=>278,298=>327,299=>278,300=>327,301=>278,302=>325,303=>278,304=>327,305=>278,306=>699,307=>529,308=>385,309=>348,310=>709,311=>513,312=>503,313=>611,314=>258,315=>611,316=>258,317=>611,318=>390,319=>611,320=>382,321=>606,322=>278,323=>725,324=>489,325=>725,326=>489,327=>725,328=>489,329=>538,330=>701,331=>500,332=>724,333=>491,334=>724,335=>491,336=>724,337=>491,338=>900,339=>705,340=>667,341=>345,342=>667,343=>345,344=>667,345=>345,346=>529,347=>367,348=>529,349=>367,350=>549,351=>367,352=>529,353=>367,354=>596,355=>283,356=>606,357=>410,358=>596,359=>283,360=>721,361=>490,362=>721,363=>490,364=>721,365=>490,366=>721,367=>490,368=>721,369=>490,370=>711,371=>501,372=>947,373=>683,374=>701,375=>471,376=>701,377=>613,378=>417,379=>613,380=>417,381=>613,382=>417,383=>373,384=>504,385=>737,386=>624,387=>513,388=>641,389=>515,390=>670,391=>813,392=>554,393=>719,394=>830,395=>582,396=>511,397=>496,398=>610,399=>711,400=>525,401=>629,402=>460,403=>819,404=>650,405=>735,406=>333,407=>336,408=>776,409=>513,410=>286,411=>470,412=>951,413=>798,414=>495,415=>724,416=>723,417=>536,418=>1038,419=>774,420=>692,421=>495,422=>674,423=>549,424=>367,425=>603,426=>592,427=>289,428=>622,429=>376,430=>596,431=>783,432=>545,433=>723,434=>724,435=>801,436=>570,437=>617,438=>416,439=>531,440=>537,441=>396,442=>389,443=>500,444=>604,445=>439,446=>389,447=>502,448=>190,449=>350,450=>600,451=>333,452=>1333,453=>1166,454=>944,455=>1000,456=>889,457=>546,458=>1111,459=>1000,460=>778,461=>721,462=>435,463=>327,464=>278,465=>724,466=>491,467=>721,468=>490,469=>721,470=>490,471=>721,472=>490,473=>722,474=>490,475=>721,476=>490,477=>444,478=>721,479=>435,480=>721,481=>435,482=>888,483=>639,484=>722,485=>490,486=>722,487=>467,488=>709,489=>513,490=>722,491=>491,492=>722,493=>491,494=>531,495=>387,496=>348,497=>1333,498=>1166,499=>944,500=>722,501=>467,502=>1001,503=>552,504=>725,505=>489,506=>722,507=>435,508=>888,509=>639,510=>724,511=>491,512=>721,513=>435,514=>721,515=>435,516=>610,517=>444,518=>610,519=>444,520=>327,521=>278,522=>327,523=>278,524=>724,525=>491,526=>724,527=>491,528=>667,529=>345,530=>667,531=>345,532=>721,533=>490,534=>721,535=>490,536=>529,537=>367,538=>606,539=>283,540=>435,541=>426,542=>714,543=>498,544=>715,545=>588,546=>555,547=>458,548=>611,549=>444,550=>721,551=>435,552=>611,553=>444,554=>724,555=>491,556=>724,557=>491,558=>724,559=>491,560=>724,561=>491,562=>701,563=>471,564=>407,565=>597,566=>379,567=>348,568=>771,569=>762,570=>721,571=>674,572=>434,573=>612,574=>596,575=>377,576=>444,577=>418,578=>418,579=>628,580=>720,581=>701,582=>610,583=>444,584=>385,585=>358,586=>760,587=>559,588=>667,589=>345,590=>701,591=>490,592=>435,593=>498,594=>498,595=>493,596=>434,597=>444,598=>551,599=>569,600=>444,601=>444,602=>703,603=>403,604=>403,605=>641,606=>422,607=>353,608=>572,609=>501,610=>521,611=>494,612=>567,613=>498,614=>498,615=>501,616=>285,617=>306,618=>275,619=>340,620=>354,621=>364,622=>553,623=>779,624=>779,625=>772,626=>544,627=>547,628=>549,629=>491,630=>652,631=>661,632=>624,633=>345,634=>345,635=>443,636=>345,637=>344,638=>379,639=>374,640=>489,641=>484,642=>377,643=>360,644=>360,645=>360,646=>451,647=>281,648=>330,649=>512,650=>504,651=>485,652=>468,653=>683,654=>471,655=>485,656=>583,657=>428,658=>387,659=>409,660=>418,661=>408,662=>408,663=>454,664=>724,665=>468,666=>422,667=>587,668=>540,669=>343,670=>513,671=>449,672=>573,673=>408,674=>408,675=>784,676=>794,677=>801,678=>550,679=>493,680=>675,681=>752,682=>553,683=>543,684=>477,685=>500,686=>612,687=>667,688=>332,689=>333,690=>232,691=>228,692=>228,693=>305,694=>321,695=>463,696=>322,697=>250,698=>408,699=>200,700=>200,701=>200,702=>250,703=>250,704=>258,705=>258,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>250,713=>333,714=>250,715=>250,716=>250,717=>333,718=>250,719=>250,720=>250,721=>250,722=>250,723=>250,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>336,735=>352,736=>331,737=>187,738=>263,739=>332,740=>300,741=>460,742=>460,743=>460,744=>460,745=>460,746=>477,747=>475,748=>339,749=>333,750=>400,751=>333,752=>333,753=>333,754=>333,755=>333,756=>250,757=>437,758=>437,759=>333,760=>250,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>332,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,880=>535,881=>433,882=>537,883=>497,884=>199,885=>199,886=>722,887=>590,890=>332,891=>485,892=>485,893=>485,894=>250,900=>267,901=>333,902=>721,903=>250,904=>800,905=>902,906=>507,908=>818,910=>861,911=>871,912=>286,913=>721,914=>631,915=>569,916=>660,917=>610,918=>613,919=>714,920=>754,921=>327,922=>709,923=>721,924=>881,925=>725,926=>590,927=>724,928=>713,929=>576,931=>603,932=>606,933=>666,934=>760,935=>714,936=>788,937=>723,938=>327,939=>666,940=>583,941=>426,942=>536,943=>286,944=>514,945=>583,946=>527,947=>480,948=>534,949=>426,950=>466,951=>536,952=>534,953=>286,954=>544,955=>476,956=>536,957=>480,958=>514,959=>491,960=>587,961=>528,962=>452,963=>537,964=>420,965=>514,966=>643,967=>480,968=>693,969=>693,970=>286,971=>514,972=>491,973=>514,974=>693,975=>671,976=>534,977=>587,978=>627,979=>803,980=>627,981=>640,982=>684,983=>534,984=>576,985=>500,986=>602,987=>426,988=>559,989=>445,990=>656,991=>400,992=>721,993=>570,994=>962,995=>673,996=>592,997=>522,998=>580,999=>460,1000=>500,1001=>338,1002=>842,1003=>593,1004=>564,1005=>412,1006=>634,1007=>447,1008=>534,1009=>534,1010=>485,1011=>348,1012=>724,1013=>361,1014=>361,1015=>577,1016=>537,1017=>674,1018=>889,1019=>709,1020=>534,1021=>668,1022=>675,1023=>668,1024=>610,1025=>610,1026=>747,1027=>564,1028=>660,1029=>549,1030=>327,1031=>327,1032=>380,1033=>948,1034=>985,1035=>821,1036=>664,1037=>713,1038=>709,1039=>713,1040=>711,1041=>576,1042=>626,1043=>564,1044=>639,1045=>610,1046=>937,1047=>585,1048=>713,1049=>713,1050=>664,1051=>681,1052=>881,1053=>713,1054=>724,1055=>713,1056=>576,1057=>670,1058=>606,1059=>709,1060=>760,1061=>714,1062=>717,1063=>672,1064=>974,1065=>982,1066=>724,1067=>852,1068=>576,1069=>660,1070=>962,1071=>643,1072=>435,1073=>495,1074=>468,1075=>388,1076=>490,1077=>436,1078=>662,1079=>401,1080=>524,1081=>524,1082=>498,1083=>490,1084=>632,1085=>524,1086=>491,1087=>524,1088=>500,1089=>424,1090=>422,1091=>471,1092=>694,1093=>482,1094=>524,1095=>504,1096=>756,1097=>756,1098=>505,1099=>624,1100=>431,1101=>432,1102=>664,1103=>492,1104=>434,1105=>434,1106=>479,1107=>388,1108=>432,1109=>367,1110=>269,1111=>278,1112=>348,1113=>677,1114=>711,1115=>514,1116=>498,1117=>524,1118=>471,1119=>524,1120=>988,1121=>664,1122=>723,1123=>506,1124=>941,1125=>647,1126=>901,1127=>635,1128=>1245,1129=>894,1130=>937,1131=>654,1132=>1278,1133=>907,1134=>519,1135=>378,1136=>868,1137=>694,1138=>724,1139=>491,1140=>770,1141=>550,1142=>770,1143=>550,1144=>1151,1145=>885,1146=>879,1147=>611,1148=>988,1149=>664,1150=>988,1151=>664,1152=>602,1153=>428,1154=>232,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>713,1163=>522,1164=>576,1165=>430,1166=>575,1167=>511,1168=>559,1169=>397,1170=>571,1171=>392,1172=>619,1173=>462,1174=>983,1175=>682,1176=>587,1177=>401,1178=>683,1179=>516,1180=>708,1181=>531,1182=>664,1183=>494,1184=>811,1185=>568,1186=>717,1187=>519,1188=>921,1189=>647,1190=>1025,1191=>721,1192=>751,1193=>516,1194=>660,1195=>424,1196=>606,1197=>452,1198=>701,1199=>563,1200=>701,1201=>563,1202=>765,1203=>518,1204=>958,1205=>692,1206=>676,1207=>505,1208=>716,1209=>538,1210=>672,1211=>508,1212=>859,1213=>553,1214=>858,1215=>553,1216=>327,1217=>937,1218=>662,1219=>613,1220=>441,1221=>681,1222=>489,1223=>713,1224=>497,1225=>713,1226=>545,1227=>672,1228=>504,1229=>881,1230=>630,1231=>327,1232=>711,1233=>435,1234=>711,1235=>435,1236=>883,1237=>639,1238=>610,1239=>436,1240=>711,1241=>436,1242=>711,1243=>436,1244=>937,1245=>662,1246=>585,1247=>401,1248=>531,1249=>366,1250=>713,1251=>524,1252=>713,1253=>524,1254=>724,1255=>491,1256=>724,1257=>491,1258=>724,1259=>491,1260=>660,1261=>432,1262=>709,1263=>471,1264=>709,1265=>471,1266=>709,1267=>471,1268=>672,1269=>504,1270=>559,1271=>383,1272=>852,1273=>624,1274=>559,1275=>386,1276=>706,1277=>436,1278=>714,1279=>492,1280=>576,1281=>504,1282=>908,1283=>634,1284=>803,1285=>518,1286=>553,1287=>471,1288=>931,1289=>637,1290=>964,1291=>682,1292=>725,1293=>433,1294=>705,1295=>499,1296=>523,1297=>407,1298=>681,1299=>489,1300=>941,1301=>644,1302=>820,1303=>697,1304=>949,1305=>748,1306=>723,1307=>505,1308=>947,1309=>693,1310=>664,1311=>497,1312=>992,1313=>710,1314=>1029,1315=>741,1316=>719,1317=>520,1318=>678,1319=>505,1329=>794,1330=>712,1331=>782,1332=>854,1333=>711,1334=>702,1335=>707,1336=>655,1337=>777,1338=>782,1339=>710,1340=>663,1341=>830,1342=>917,1343=>672,1344=>469,1345=>666,1346=>858,1347=>685,1348=>856,1349=>618,1350=>858,1351=>709,1352=>719,1353=>714,1354=>731,1355=>702,1356=>874,1357=>719,1358=>844,1359=>519,1360=>703,1361=>608,1362=>586,1363=>750,1364=>780,1365=>714,1366=>684,1369=>120,1370=>120,1371=>269,1372=>307,1373=>241,1374=>312,1375=>300,1377=>786,1378=>506,1379=>542,1380=>541,1381=>506,1382=>503,1383=>478,1384=>499,1385=>541,1386=>539,1387=>508,1388=>289,1389=>750,1390=>540,1391=>513,1392=>508,1393=>503,1394=>531,1395=>518,1396=>500,1397=>243,1398=>473,1399=>406,1400=>499,1401=>407,1402=>793,1403=>414,1404=>463,1405=>500,1406=>516,1407=>758,1408=>504,1409=>466,1410=>288,1411=>758,1412=>510,1413=>501,1414=>562,1415=>543,1417=>278,1418=>280,1423=>754,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>370,1471=>0,1472=>126,1473=>0,1474=>0,1475=>346,1476=>0,1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350,1495=>537,1496=>537,1497=>320,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>310,1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537,1520=>583,1521=>563,1522=>537,1523=>396,1524=>396,1536=>600,1537=>1000,1538=>800,1539=>800,1542=>549,1543=>549,1544=>724,1545=>599,1546=>729,1547=>626,1548=>246,1549=>344,1550=>640,1551=>686,1552=>0,1553=>0,1554=>0,1555=>0,1556=>0,1557=>0,1558=>0,1559=>0,1560=>0,1561=>0,1562=>0,1563=>250,1566=>374,1567=>444,1568=>672,1569=>350,1570=>245,1571=>229,1572=>329,1573=>229,1574=>672,1575=>229,1576=>877,1577=>416,1578=>877,1579=>877,1580=>598,1581=>598,1582=>598,1583=>348,1584=>348,1585=>345,1586=>345,1587=>901,1588=>901,1589=>909,1590=>909,1591=>568,1592=>568,1593=>591,1594=>591,1595=>902,1596=>902,1597=>672,1598=>672,1599=>672,1600=>200,1601=>858,1602=>626,1603=>486,1604=>598,1605=>475,1606=>585,1607=>372,1608=>329,1609=>672,1610=>672,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1622=>0,1623=>0,1624=>0,1625=>0,1626=>0,1627=>0,1628=>0,1629=>0,1630=>0,1631=>0,1632=>500,1633=>500,1634=>500,1635=>500,1636=>500,1637=>500,1638=>500,1639=>500,1640=>500,1641=>500,1642=>440,1643=>212,1644=>235,1645=>471,1646=>877,1647=>626,1648=>0,1649=>229,1650=>229,1651=>229,1652=>300,1653=>326,1654=>442,1655=>482,1656=>792,1657=>877,1658=>877,1659=>877,1660=>877,1661=>877,1662=>877,1663=>877,1664=>877,1665=>598,1666=>598,1667=>598,1668=>598,1669=>598,1670=>598,1671=>598,1672=>348,1673=>348,1674=>348,1675=>348,1676=>348,1677=>348,1678=>348,1679=>348,1680=>348,1681=>345,1682=>345,1683=>345,1684=>345,1685=>492,1686=>345,1687=>345,1688=>345,1689=>345,1690=>901,1691=>901,1692=>901,1693=>909,1694=>909,1695=>568,1696=>591,1697=>858,1698=>858,1699=>858,1700=>858,1701=>858,1702=>858,1703=>626,1704=>626,1705=>902,1706=>1108,1707=>902,1708=>486,1709=>486,1710=>486,1711=>902,1712=>902,1713=>902,1714=>902,1715=>902,1716=>902,1717=>598,1718=>598,1719=>598,1720=>598,1721=>585,1722=>585,1723=>585,1724=>585,1725=>585,1726=>446,1727=>598,1728=>372,1729=>372,1730=>372,1731=>372,1732=>329,1733=>329,1734=>329,1735=>329,1736=>329,1737=>329,1738=>329,1739=>329,1740=>672,1741=>728,1742=>672,1743=>329,1744=>672,1745=>672,1746=>710,1747=>710,1748=>395,1749=>372,1750=>0,1751=>0,1752=>0,1753=>0,1754=>0,1755=>0,1756=>0,1757=>1132,1758=>970,1759=>0,1760=>0,1761=>0,1762=>0,1763=>0,1764=>301,1765=>250,1766=>400,1767=>0,1768=>0,1769=>760,1770=>0,1771=>0,1772=>0,1773=>0,1774=>348,1775=>345,1776=>500,1777=>501,1778=>500,1779=>500,1780=>500,1781=>500,1782=>500,1783=>500,1784=>500,1785=>500,1786=>901,1787=>909,1788=>591,1789=>300,1790=>246,1791=>446,1872=>877,1873=>877,1874=>877,1875=>877,1876=>877,1877=>877,1878=>877,1879=>598,1880=>598,1881=>348,1882=>348,1883=>345,1884=>901,1885=>591,1886=>591,1887=>591,1888=>858,1889=>858,1890=>902,1891=>902,1892=>902,1893=>475,1894=>475,1895=>585,1896=>585,1897=>585,1898=>678,1899=>345,1900=>345,1901=>901,1902=>598,1903=>598,1904=>901,1905=>345,1906=>598,1907=>229,1908=>229,1909=>672,1910=>672,1911=>753,1912=>329,1913=>329,1914=>710,1915=>710,1916=>598,1917=>901,1918=>901,1919=>486,1920=>450,1921=>501,1922=>582,1923=>544,1924=>482,1925=>433,1926=>448,1927=>462,1928=>474,1929=>471,1930=>469,1931=>537,1932=>499,1933=>514,1934=>471,1935=>572,1936=>880,1937=>440,1938=>476,1939=>594,1940=>469,1941=>448,1942=>441,1943=>519,1944=>573,1945=>459,1946=>447,1947=>496,1948=>541,1949=>887,1950=>883,1951=>964,1952=>558,1953=>505,1954=>471,1955=>554,1956=>459,1957=>486,1958=>36,1959=>36,1960=>43,1961=>45,1962=>43,1963=>45,1964=>45,1965=>45,1966=>45,1967=>45,1968=>0,1969=>406,2304=>0,2305=>0,2306=>0,2307=>398,2308=>861,2309=>861,2310=>1070,2311=>553,2312=>553,2313=>597,2314=>848,2315=>967,2316=>828,2317=>654,2318=>654,2319=>654,2320=>654,2321=>1070,2322=>1070,2323=>1070,2324=>1070,2325=>743,2326=>797,2327=>694,2328=>694,2329=>730,2330=>734,2331=>887,2332=>813,2333=>833,2334=>734,2335=>628,2336=>628,2337=>652,2338=>608,2339=>694,2340=>654,2341=>694,2342=>588,2343=>694,2344=>654,2345=>654,2346=>614,2347=>788,2348=>621,2349=>694,2350=>694,2351=>694,2352=>494,2353=>494,2354=>787,2355=>847,2356=>847,2357=>621,2358=>787,2359=>614,2360=>734,2361=>608,2362=>341,2363=>341,2364=>0,2365=>569,2366=>341,2367=>341,2368=>341,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>341,2378=>341,2379=>341,2380=>341,2381=>0,2382=>420,2383=>226,2384=>1047,2385=>0,2386=>0,2387=>0,2388=>0,2389=>0,2390=>0,2391=>0,2392=>743,2393=>797,2394=>694,2395=>813,2396=>652,2397=>608,2398=>788,2399=>694,2400=>967,2401=>827,2402=>0,2403=>0,2404=>450,2405=>644,2406=>455,2407=>419,2408=>569,2409=>509,2410=>701,2411=>628,2412=>569,2413=>701,2414=>608,2415=>608,2416=>455,2417=>398,2418=>861,2419=>861,2420=>1040,2421=>1040,2422=>861,2423=>861,2425=>813,2426=>694,2427=>654,2428=>814,2429=>569,2430=>730,2431=>621,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,2555=>344,2561=>0,2562=>0,2563=>385,2565=>781,2566=>982,2567=>789,2568=>860,2569=>559,2570=>559,2575=>589,2576=>781,2579=>559,2580=>781,2581=>538,2582=>650,2583=>650,2584=>781,2585=>589,2586=>589,2587=>699,2588=>650,2589=>589,2590=>589,2591=>589,2592=>589,2593=>559,2594=>589,2595=>589,2596=>559,2597=>650,2598=>589,2599=>650,2600=>626,2602=>650,2603=>570,2604=>650,2605=>559,2606=>650,2607=>781,2608=>490,2610=>626,2611=>626,2613=>589,2614=>650,2616=>650,2617=>490,2620=>0,2622=>320,2623=>260,2624=>320,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>650,2650=>650,2651=>650,2652=>559,2654=>570,2662=>420,2663=>350,2664=>490,2665=>434,2666=>574,2667=>455,2668=>452,2669=>490,2670=>504,2671=>504,2672=>0,2673=>0,2674=>589,2675=>559,2676=>808,2677=>0,2689=>0,2690=>0,2691=>287,2693=>1055,2694=>1272,2695=>643,2696=>772,2697=>756,2698=>1034,2699=>971,2700=>885,2701=>1055,2703=>1055,2704=>1055,2705=>1272,2707=>1272,2708=>1272,2709=>706,2710=>822,2711=>730,2712=>653,2713=>636,2714=>800,2715=>773,2716=>946,2717=>954,2718=>834,2719=>582,2720=>582,2721=>549,2722=>497,2723=>872,2724=>663,2725=>767,2726=>559,2727=>600,2728=>745,2730=>649,2731=>714,2732=>803,2733=>800,2734=>706,2735=>819,2736=>517,2738=>756,2739=>780,2741=>623,2742=>771,2743=>559,2744=>810,2745=>711,2748=>0,2749=>497,2750=>245,2751=>226,2752=>286,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>258,2763=>250,2764=>257,2765=>0,2768=>1078,2784=>1071,2785=>841,2786=>0,2787=>0,2790=>602,2791=>490,2792=>587,2793=>666,2794=>620,2795=>657,2796=>560,2797=>695,2798=>550,2799=>592,2800=>362,2801=>805,2817=>0,2818=>257,2819=>389,2821=>789,2822=>968,2823=>832,2824=>863,2825=>833,2826=>852,2827=>807,2828=>600,2831=>703,2832=>1000,2835=>689,2836=>959,2837=>739,2838=>748,2839=>768,2840=>775,2841=>828,2842=>711,2843=>634,2844=>691,2845=>679,2846=>624,2847=>693,2848=>667,2849=>741,2850=>692,2851=>756,2852=>713,2853=>748,2854=>688,2855=>677,2856=>689,2858=>748,2859=>960,2860=>682,2861=>787,2862=>748,2863=>808,2864=>758,2866=>870,2867=>722,2869=>676,2870=>744,2871=>738,2872=>652,2873=>583,2876=>0,2877=>366,2878=>228,2879=>0,2880=>218,2881=>0,2882=>0,2883=>0,2884=>0,2887=>501,2888=>1137,2891=>1322,2892=>1318,2893=>0,2902=>0,2903=>201,2908=>741,2909=>692,2911=>825,2912=>785,2913=>700,2914=>0,2915=>0,2918=>724,2919=>521,2920=>498,2921=>786,2922=>641,2923=>624,2924=>628,2925=>612,2926=>522,2927=>497,2928=>636,2929=>755,2930=>228,2931=>440,2932=>650,2933=>741,2934=>787,2935=>782,2946=>0,2947=>616,2949=>910,2950=>1072,2951=>848,2952=>591,2953=>492,2954=>1123,2958=>602,2959=>602,2960=>691,2962=>753,2963=>753,2964=>1597,2965=>686,2969=>727,2970=>607,2972=>700,2974=>879,2975=>589,2979=>1230,2980=>697,2984=>569,2985=>911,2986=>507,2990=>634,2991=>702,2992=>452,2993=>573,2994=>661,2995=>804,2996=>655,2997=>770,2998=>794,2999=>873,3000=>880,3001=>1102,3006=>452,3007=>176,3008=>0,3009=>404,3010=>641,3014=>690,3015=>500,3016=>848,3018=>1159,3019=>1000,3020=>1488,3021=>0,3024=>763,3031=>844,3046=>500,3047=>686,3048=>829,3049=>673,3050=>793,3051=>829,3052=>841,3053=>602,3054=>910,3055=>797,3056=>587,3057=>697,3058=>878,3059=>609,3060=>833,3061=>1549,3062=>664,3063=>978,3064=>1325,3065=>825,3066=>711,3330=>417,3331=>221,3333=>1055,3334=>1195,3335=>792,3336=>1469,3337=>570,3338=>1244,3339=>676,3340=>897,3342=>1008,3343=>1008,3344=>1538,3346=>586,3347=>981,3348=>1254,3349=>776,3350=>798,3351=>691,3352=>1095,3353=>811,3354=>728,3355=>963,3356=>704,3357=>1245,3358=>1106,3359=>466,3360=>531,3361=>984,3362=>1028,3363=>1102,3364=>780,3365=>732,3366=>485,3367=>737,3368=>747,3369=>747,3370=>780,3371=>962,3372=>1023,3373=>500,3374=>511,3375=>792,3376=>530,3377=>512,3378=>712,3379=>556,3380=>519,3381=>716,3382=>786,3383=>921,3384=>977,3385=>978,3386=>780,3389=>375,3390=>403,3391=>199,3392=>190,3393=>275,3394=>258,3395=>378,3396=>378,3398=>542,3399=>478,3400=>1070,3402=>0,3403=>0,3404=>0,3405=>89,3406=>221,3415=>677,3424=>676,3425=>1006,3426=>0,3427=>0,3430=>559,3431=>660,3432=>674,3433=>933,3434=>671,3435=>699,3436=>704,3437=>694,3438=>678,3439=>684,3440=>981,3441=>742,3442=>1056,3443=>660,3444=>664,3445=>870,3449=>864,3450=>1137,3451=>776,3452=>534,3453=>860,3454=>780,3455=>866,3458=>254,3459=>254,3461=>616,3462=>922,3463=>908,3464=>907,3465=>626,3466=>615,3467=>763,3468=>1109,3469=>1019,3470=>1311,3471=>1050,3472=>1477,3473=>677,3474=>746,3475=>1314,3476=>741,3477=>741,3478=>1170,3482=>894,3483=>715,3484=>715,3485=>719,3486=>741,3487=>834,3488=>719,3489=>677,3490=>677,3491=>1302,3492=>1005,3493=>919,3494=>677,3495=>719,3496=>677,3497=>741,3498=>677,3499=>1123,3500=>743,3501=>779,3502=>677,3503=>444,3504=>741,3505=>921,3507=>444,3508=>677,3509=>677,3510=>715,3511=>787,3512=>719,3513=>741,3514=>719,3515=>604,3517=>763,3520=>719,3521=>715,3522=>677,3523=>719,3524=>787,3525=>763,3526=>677,3530=>0,3535=>329,3536=>319,3537=>319,3538=>0,3539=>0,3540=>0,3542=>0,3544=>329,3545=>691,3546=>1062,3547=>1333,3548=>1278,3549=>1235,3550=>1292,3551=>461,3570=>680,3571=>481,3572=>948,3585=>532,3586=>472,3587=>534,3588=>532,3589=>544,3590=>583,3591=>417,3592=>488,3593=>604,3594=>472,3595=>534,3596=>716,3597=>717,3598=>568,3599=>568,3600=>457,3601=>637,3602=>731,3603=>790,3604=>531,3605=>542,3606=>522,3607=>577,3608=>468,3609=>603,3610=>554,3611=>554,3612=>556,3613=>556,3614=>604,3615=>604,3616=>568,3617=>542,3618=>496,3619=>442,3620=>530,3621=>512,3622=>568,3623=>478,3624=>543,3625=>614,3626=>525,3627=>578,3628=>659,3629=>514,3630=>514,3631=>450,3632=>402,3633=>0,3634=>378,3635=>415,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>620,3648=>286,3649=>521,3650=>447,3651=>426,3652=>424,3653=>333,3654=>453,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>528,3665=>528,3666=>571,3667=>594,3668=>631,3669=>632,3670=>478,3671=>713,3672=>597,3673=>565,3674=>615,3675=>1381,4256=>453,4257=>448,4258=>546,4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>855,4267=>464,4268=>443,4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,4320=>694,4321=>501,4322=>544,4323=>518,4324=>560,4325=>450,4326=>627,4327=>452,4328=>490,4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>482,4339=>414,4340=>453,4341=>418,4342=>741,4343=>452,4344=>452,4345=>544,4346=>454,4347=>410,4348=>339,4608=>583,4609=>770,4610=>560,4611=>525,4612=>525,4613=>583,4614=>758,4616=>598,4617=>787,4618=>817,4619=>583,4620=>758,4621=>612,4622=>875,4623=>817,4624=>817,4625=>1050,4626=>1050,4627=>817,4628=>1050,4629=>817,4630=>787,4631=>1021,4632=>933,4633=>1137,4634=>1067,4635=>980,4636=>1065,4637=>962,4638=>962,4639=>1097,4640=>831,4641=>1021,4642=>851,4643=>735,4644=>875,4645=>968,4646=>817,4647=>881,4648=>583,4649=>642,4650=>583,4651=>758,4652=>700,4653=>583,4654=>700,4655=>758,4656=>583,4657=>787,4658=>787,4659=>583,4660=>729,4661=>583,4662=>583,4663=>817,4664=>642,4665=>817,4666=>846,4667=>642,4668=>758,4669=>744,4670=>642,4671=>817,4672=>700,4673=>700,4674=>700,4675=>758,4676=>700,4677=>700,4678=>729,4680=>846,4682=>1079,4683=>700,4684=>700,4685=>1021,4688=>700,4689=>700,4690=>700,4691=>758,4692=>700,4693=>758,4694=>729,4696=>846,4698=>1079,4699=>700,4700=>700,4701=>1021,4704=>525,4705=>758,4706=>758,4707=>525,4708=>700,4709=>773,4710=>525,4711=>787,4712=>525,4713=>758,4714=>758,4715=>525,4716=>700,4717=>773,4718=>525,4719=>525,4720=>729,4721=>729,4722=>729,4723=>802,4724=>729,4725=>729,4726=>758,4727=>729,4728=>758,4729=>758,4730=>758,4731=>817,4732=>758,4733=>817,4734=>758,4735=>758,4736=>612,4737=>817,4738=>817,4739=>612,4740=>787,4741=>583,4742=>875,4744=>962,4746=>992,4747=>700,4748=>758,4749=>904,4752=>408,4753=>583,4754=>525,4755=>554,4756=>481,4757=>554,4758=>642,4759=>671,4760=>700,4761=>758,4762=>729,4763=>700,4764=>671,4765=>700,4766=>758,4767=>700,4768=>583,4769=>735,4770=>822,4771=>583,4772=>793,4773=>583,4774=>583,4775=>694,4776=>554,4777=>729,4778=>773,4779=>554,4780=>700,4781=>554,4782=>554,4784=>992,4786=>1021,4787=>671,4788=>787,4789=>904,4792=>729,4793=>904,4794=>948,4795=>729,4796=>875,4797=>729,4798=>729,4800=>1137,4802=>1167,4803=>758,4804=>875,4805=>1108,4808=>758,4809=>875,4810=>700,4811=>700,4812=>700,4813=>992,4814=>758,4816=>554,4817=>787,4818=>758,4819=>583,4820=>758,4821=>496,4822=>612,4824=>525,4825=>700,4826=>700,4827=>525,4828=>685,4829=>729,4830=>510,4831=>729,4832=>962,4833=>962,4834=>962,4835=>962,4836=>962,4837=>1021,4838=>962,4839=>962,4840=>467,4841=>525,4842=>671,4843=>612,4844=>612,4845=>671,4846=>671,4848=>612,4849=>875,4850=>817,4851=>642,4852=>729,4853=>729,4854=>758,4855=>817,4856=>700,4857=>758,4858=>715,4859=>700,4860=>700,4861=>787,4862=>758,4863=>700,4864=>700,4865=>758,4866=>715,4867=>700,4868=>700,4869=>787,4870=>758,4871=>700,4872=>467,4873=>671,4874=>671,4875=>612,4876=>612,4877=>583,4878=>525,4880=>846,4882=>904,4883=>554,4884=>700,4885=>817,4888=>525,4889=>729,4890=>729,4891=>612,4892=>671,4893=>583,4894=>525,4896=>817,4897=>1021,4898=>1021,4899=>817,4900=>992,4901=>758,4902=>817,4903=>1021,4904=>1079,4905=>1137,4906=>1137,4907=>1050,4908=>1312,4909=>1050,4910=>1050,4911=>1123,4912=>647,4913=>793,4914=>822,4915=>647,4916=>793,4917=>764,4918=>583,4919=>647,4920=>583,4921=>793,4922=>822,4923=>583,4924=>793,4925=>764,4926=>583,4927=>793,4928=>540,4929=>758,4930=>583,4931=>467,4932=>583,4933=>481,4934=>612,4936=>758,4937=>700,4938=>758,4939=>700,4940=>831,4941=>671,4942=>758,4943=>700,4944=>758,4945=>758,4946=>758,4947=>817,4948=>758,4949=>758,4950=>817,4951=>758,4952=>642,4953=>980,4954=>758,4961=>233,4962=>583,4963=>408,4964=>408,4965=>525,4966=>525,4967=>233,4968=>700,4969=>671,4970=>612,4971=>642,4972=>642,4973=>642,4974=>583,4975=>700,4976=>758,4977=>642,4978=>583,4979=>700,4980=>729,4981=>720,4982=>583,4983=>758,4984=>700,4985=>904,4986=>612,4987=>583,4988=>875,5024=>711,5025=>678,5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,5034=>703,5035=>383,5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,5044=>498,5045=>528,5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,5054=>698,5055=>638,5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,5064=>675,5065=>949,5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,5074=>631,5075=>542,5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,5084=>658,5085=>597,5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,5094=>731,5095=>492,5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,5104=>563,5105=>776,5106=>634,5107=>822,5108=>621,5920=>502,5921=>502,5922=>500,5923=>498,5924=>500,5925=>502,5926=>502,5927=>502,5928=>500,5929=>503,5930=>502,5931=>502,5932=>500,5933=>500,5934=>500,5935=>796,5936=>500,5937=>502,5938=>0,5939=>0,5940=>0,5941=>230,5942=>397,6480=>537,6481=>537,6482=>531,6483=>678,6484=>682,6485=>628,6486=>732,6487=>721,6488=>598,6489=>583,6490=>702,6491=>554,6492=>683,6493=>554,6494=>710,6495=>695,6496=>523,6497=>678,6498=>589,6499=>272,6500=>506,6501=>515,6502=>515,6503=>210,6504=>210,6505=>515,6506=>515,6507=>515,6508=>229,6509=>705,6512=>649,6513=>538,6514=>568,6515=>520,6516=>544,6656=>820,6657=>958,6658=>758,6659=>859,6660=>958,6661=>727,6662=>904,6663=>940,6664=>850,6665=>905,6666=>838,6667=>961,6668=>1000,6669=>880,6670=>1189,6671=>1246,6672=>1177,6673=>757,6674=>1246,6675=>1192,6676=>709,6677=>1192,6678=>1075,6679=>0,6680=>0,6681=>534,6682=>690,6683=>0,6686=>697,6687=>500,7424=>507,7425=>659,7426=>639,7427=>468,7428=>461,7429=>537,7430=>537,7431=>447,7432=>403,7433=>278,7434=>312,7435=>523,7436=>449,7437=>652,7438=>539,7439=>523,7440=>435,7441=>507,7442=>507,7443=>673,7444=>705,7445=>378,7446=>483,7447=>483,7448=>438,7449=>484,7450=>489,7451=>423,7452=>522,7453=>488,7454=>660,7455=>500,7456=>512,7457=>699,7458=>444,7459=>355,7460=>444,7461=>681,7462=>392,7463=>483,7464=>483,7465=>372,7466=>541,7467=>470,7468=>503,7469=>653,7470=>441,7471=>441,7472=>510,7473=>435,7474=>435,7475=>491,7476=>527,7477=>255,7478=>300,7479=>512,7480=>436,7481=>638,7482=>535,7483=>539,7484=>483,7485=>350,7486=>411,7487=>480,7488=>409,7489=>526,7490=>695,7491=>297,7492=>297,7493=>335,7494=>440,7495=>335,7496=>335,7497=>297,7498=>297,7499=>279,7500=>258,7501=>323,7502=>186,7503=>338,7504=>521,7505=>335,7506=>335,7507=>290,7508=>483,7509=>483,7510=>335,7511=>186,7512=>335,7513=>326,7514=>521,7515=>322,7516=>442,7517=>353,7518=>321,7519=>357,7520=>430,7521=>321,7522=>186,7523=>223,7524=>335,7525=>335,7526=>353,7527=>321,7528=>353,7529=>430,7530=>321,7531=>754,7532=>500,7533=>500,7534=>333,7535=>778,7536=>500,7537=>500,7538=>333,7539=>333,7540=>389,7541=>278,7542=>444,7543=>467,7544=>483,7545=>447,7546=>774,7547=>280,7548=>278,7549=>500,7550=>522,7551=>514,7552=>500,7553=>500,7554=>333,7555=>676,7556=>525,7557=>278,7558=>802,7559=>507,7560=>500,7561=>333,7562=>389,7563=>384,7564=>500,7565=>500,7566=>444,7567=>602,7568=>637,7569=>648,7570=>590,7571=>559,7572=>426,7573=>590,7574=>413,7575=>444,7576=>360,7577=>638,7578=>389,7579=>335,7580=>292,7581=>285,7582=>341,7583=>280,7584=>255,7585=>251,7586=>323,7587=>336,7588=>188,7589=>212,7590=>184,7591=>182,7592=>230,7593=>236,7594=>196,7595=>297,7596=>497,7597=>529,7598=>401,7599=>404,7600=>364,7601=>349,7602=>412,7603=>224,7604=>312,7605=>197,7606=>344,7607=>346,7608=>354,7609=>334,7610=>325,7611=>277,7612=>393,7613=>288,7614=>277,7615=>338,7616=>0,7617=>0,7619=>0,7626=>0,7627=>0,7628=>0,7629=>0,7630=>0,7631=>0,7635=>0,7636=>0,7637=>0,7638=>0,7639=>0,7640=>0,7641=>0,7642=>0,7643=>0,7644=>0,7645=>0,7646=>0,7647=>0,7648=>0,7649=>0,7650=>0,7651=>0,7652=>0,7653=>0,7654=>0,7676=>0,7677=>0,7678=>0,7679=>0,7680=>721,7681=>435,7682=>631,7683=>500,7684=>631,7685=>500,7686=>631,7687=>500,7688=>674,7689=>444,7690=>719,7691=>499,7692=>719,7693=>499,7694=>719,7695=>499,7696=>720,7697=>499,7698=>719,7699=>499,7700=>611,7701=>444,7702=>611,7703=>444,7704=>610,7705=>444,7706=>610,7707=>444,7708=>611,7709=>444,7710=>564,7711=>373,7712=>722,7713=>467,7714=>714,7715=>498,7716=>714,7717=>498,7718=>714,7719=>498,7720=>713,7721=>498,7722=>713,7723=>498,7724=>327,7725=>278,7726=>333,7727=>278,7728=>709,7729=>513,7730=>709,7731=>513,7732=>709,7733=>513,7734=>611,7735=>258,7736=>611,7737=>258,7738=>611,7739=>258,7740=>611,7741=>258,7742=>881,7743=>779,7744=>881,7745=>779,7746=>881,7747=>779,7748=>725,7749=>489,7750=>725,7751=>489,7752=>725,7753=>489,7754=>725,7755=>489,7756=>722,7757=>491,7758=>724,7759=>491,7760=>722,7761=>491,7762=>722,7763=>491,7764=>576,7765=>500,7766=>576,7767=>500,7768=>667,7769=>345,7770=>667,7771=>345,7772=>667,7773=>345,7774=>667,7775=>345,7776=>529,7777=>367,7778=>529,7779=>367,7780=>529,7781=>367,7782=>529,7783=>367,7784=>529,7785=>367,7786=>606,7787=>283,7788=>606,7789=>283,7790=>606,7791=>283,7792=>606,7793=>283,7794=>721,7795=>490,7796=>721,7797=>490,7798=>721,7799=>490,7800=>721,7801=>490,7802=>721,7803=>490,7804=>701,7805=>468,7806=>701,7807=>468,7808=>947,7809=>683,7810=>947,7811=>683,7812=>947,7813=>683,7814=>947,7815=>683,7816=>947,7817=>683,7818=>714,7819=>482,7820=>714,7821=>482,7822=>701,7823=>471,7824=>613,7825=>417,7826=>613,7827=>417,7828=>613,7829=>417,7830=>498,7831=>283,7832=>683,7833=>471,7834=>435,7835=>373,7836=>381,7837=>373,7838=>659,7839=>516,7840=>721,7841=>435,7842=>721,7843=>435,7844=>721,7845=>435,7846=>721,7847=>435,7848=>721,7849=>454,7850=>721,7851=>435,7852=>721,7853=>435,7854=>721,7855=>435,7856=>721,7857=>435,7858=>721,7859=>454,7860=>721,7861=>435,7862=>721,7863=>435,7864=>610,7865=>444,7866=>610,7867=>444,7868=>610,7869=>444,7870=>610,7871=>444,7872=>610,7873=>444,7874=>610,7875=>444,7876=>610,7877=>444,7878=>610,7879=>444,7880=>327,7881=>278,7882=>327,7883=>278,7884=>724,7885=>491,7886=>724,7887=>491,7888=>724,7889=>491,7890=>724,7891=>491,7892=>724,7893=>491,7894=>724,7895=>491,7896=>724,7897=>491,7898=>723,7899=>536,7900=>723,7901=>536,7902=>720,7903=>536,7904=>723,7905=>536,7906=>723,7907=>536,7908=>721,7909=>490,7910=>717,7911=>490,7912=>783,7913=>545,7914=>783,7915=>545,7916=>783,7917=>545,7918=>783,7919=>545,7920=>783,7921=>545,7922=>701,7923=>471,7924=>701,7925=>471,7926=>701,7927=>501,7928=>701,7929=>471,7930=>908,7931=>502,7932=>501,7933=>342,7934=>713,7935=>510,7936=>583,7937=>583,7938=>583,7939=>583,7940=>583,7941=>583,7942=>583,7943=>583,7944=>721,7945=>721,7946=>813,7947=>817,7948=>763,7949=>765,7950=>720,7951=>721,7952=>426,7953=>426,7954=>426,7955=>426,7956=>426,7957=>426,7960=>770,7961=>770,7962=>902,7963=>919,7964=>940,7965=>936,7968=>536,7969=>536,7970=>536,7971=>536,7972=>536,7973=>536,7974=>536,7975=>536,7976=>847,7977=>859,7978=>986,7979=>1010,7980=>1026,7981=>1029,7982=>918,7983=>921,7984=>286,7985=>286,7986=>302,7987=>320,7988=>300,7989=>306,7990=>312,7991=>303,7992=>475,7993=>507,7994=>617,7995=>654,7996=>655,7997=>660,7998=>551,7999=>566,8000=>491,8001=>491,8002=>491,8003=>491,8004=>491,8005=>491,8008=>816,8009=>825,8010=>969,8011=>995,8012=>938,8013=>955,8016=>514,8017=>514,8018=>514,8019=>514,8020=>514,8021=>514,8022=>514,8023=>514,8025=>818,8027=>988,8029=>989,8031=>893,8032=>693,8033=>693,8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,8040=>836,8041=>843,8042=>1006,8043=>1024,8044=>974,8045=>986,8046=>905,8047=>896,8048=>583,8049=>583,8050=>426,8051=>426,8052=>536,8053=>536,8054=>286,8055=>286,8056=>491,8057=>491,8058=>514,8059=>514,8060=>693,8061=>693,8064=>583,8065=>583,8066=>583,8067=>583,8068=>583,8069=>583,8070=>583,8071=>583,8072=>888,8073=>889,8074=>984,8075=>991,8076=>943,8077=>948,8078=>884,8079=>886,8080=>536,8081=>536,8082=>536,8083=>536,8084=>536,8085=>536,8086=>536,8087=>536,8088=>1017,8089=>1026,8090=>1153,8091=>1179,8092=>1195,8093=>1199,8094=>1088,8095=>1088,8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1034,8105=>1040,8106=>1210,8107=>1229,8108=>1176,8109=>1186,8110=>1098,8111=>1090,8112=>583,8113=>583,8114=>583,8115=>583,8116=>583,8118=>583,8119=>583,8120=>721,8121=>721,8122=>721,8123=>721,8124=>889,8125=>250,8126=>332,8127=>500,8128=>500,8129=>534,8130=>536,8131=>536,8132=>536,8134=>536,8135=>536,8136=>761,8137=>800,8138=>829,8139=>893,8140=>883,8141=>500,8142=>500,8143=>500,8144=>286,8145=>286,8146=>286,8147=>286,8150=>286,8151=>286,8152=>327,8153=>327,8154=>447,8155=>537,8157=>500,8158=>500,8159=>500,8160=>514,8161=>514,8162=>514,8163=>514,8164=>528,8165=>528,8166=>514,8167=>514,8168=>666,8169=>666,8170=>816,8171=>828,8172=>721,8173=>333,8174=>333,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693,8184=>832,8185=>899,8186=>847,8187=>852,8188=>928,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>166,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>320,8215=>478,8216=>200,8217=>200,8218=>200,8219=>200,8220=>400,8221=>400,8222=>400,8223=>400,8224=>500,8225=>500,8226=>400,8227=>400,8228=>620,8229=>620,8230=>1000,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>250,8240=>1000,8241=>1363,8242=>250,8243=>450,8244=>636,8245=>250,8246=>450,8247=>636,8248=>469,8249=>250,8250=>250,8251=>629,8252=>666,8253=>444,8254=>500,8255=>953,8256=>953,8257=>314,8258=>931,8259=>400,8260=>167,8261=>383,8262=>383,8263=>888,8264=>777,8265=>777,8266=>500,8267=>453,8268=>400,8269=>400,8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>838,8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,8286=>179,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>320,8305=>180,8308=>320,8309=>320,8310=>320,8311=>320,8312=>320,8313=>320,8314=>340,8315=>340,8316=>340,8317=>216,8318=>216,8319=>335,8320=>320,8321=>320,8322=>320,8323=>320,8324=>320,8325=>320,8326=>320,8327=>320,8328=>320,8329=>320,8330=>340,8331=>340,8332=>350,8333=>216,8334=>216,8336=>300,8337=>295,8338=>325,8339=>330,8340=>292,8352=>698,8353=>667,8354=>667,8355=>556,8356=>500,8357=>778,8358=>722,8359=>940,8360=>1009,8361=>813,8362=>869,8363=>512,8364=>741,8365=>722,8366=>611,8367=>1340,8368=>489,8369=>601,8370=>619,8371=>722,8372=>556,8373=>611,8374=>498,8375=>569,8376=>524,8377=>654,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>741,8449=>723,8450=>674,8451=>954,8452=>506,8453=>721,8454=>766,8455=>525,8456=>667,8457=>864,8458=>510,8459=>1127,8460=>649,8461=>768,8462=>490,8463=>490,8464=>808,8465=>613,8466=>845,8467=>447,8468=>778,8469=>701,8470=>880,8471=>792,8472=>767,8473=>589,8474=>729,8475=>964,8476=>711,8477=>755,8478=>667,8479=>667,8480=>960,8481=>1116,8482=>1048,8483=>722,8484=>640,8485=>389,8486=>723,8487=>750,8488=>643,8489=>286,8490=>709,8491=>721,8492=>906,8493=>603,8494=>533,8495=>393,8496=>682,8497=>920,8498=>564,8499=>1231,8500=>407,8501=>517,8502=>537,8503=>350,8504=>537,8505=>417,8506=>906,8507=>1155,8508=>655,8510=>577,8511=>722,8512=>600,8513=>663,8514=>485,8515=>485,8516=>637,8517=>768,8518=>653,8519=>606,8520=>369,8521=>535,8522=>516,8523=>778,8525=>899,8526=>413,8528=>780,8529=>770,8530=>980,8531=>750,8532=>801,8533=>720,8534=>796,8535=>736,8536=>766,8537=>750,8538=>730,8539=>750,8540=>770,8541=>760,8542=>750,8543=>700,8544=>327,8545=>658,8546=>977,8547=>1041,8548=>701,8549=>1040,8550=>1363,8551=>1679,8552=>1051,8553=>714,8554=>1046,8555=>1366,8556=>611,8557=>670,8558=>719,8559=>881,8560=>278,8561=>536,8562=>794,8563=>734,8564=>468,8565=>718,8566=>986,8567=>1244,8568=>736,8569=>482,8570=>754,8571=>1012,8572=>258,8573=>444,8574=>499,8575=>779,8576=>1082,8577=>722,8578=>1090,8579=>667,8580=>427,8581=>667,8582=>528,8583=>722,8584=>1093,8585=>771,8592=>900,8593=>472,8594=>900,8595=>500,8596=>900,8597=>499,8598=>800,8599=>800,8600=>800,8601=>800,8602=>900,8603=>900,8604=>1000,8605=>1000,8606=>900,8607=>500,8608=>900,8609=>499,8610=>1019,8611=>1019,8612=>1013,8613=>500,8614=>1013,8615=>500,8616=>500,8617=>910,8618=>910,8619=>910,8620=>900,8621=>1147,8622=>900,8623=>592,8624=>482,8625=>482,8626=>482,8627=>482,8628=>658,8629=>658,8630=>1069,8631=>1069,8632=>836,8633=>964,8634=>843,8635=>843,8636=>900,8637=>900,8638=>499,8639=>499,8640=>900,8641=>900,8642=>499,8643=>499,8644=>900,8645=>840,8646=>900,8647=>900,8648=>840,8649=>900,8650=>840,8651=>900,8652=>900,8653=>900,8654=>910,8655=>900,8656=>900,8657=>550,8658=>900,8659=>550,8660=>910,8661=>550,8662=>1000,8663=>1000,8664=>1000,8665=>1000,8666=>910,8667=>910,8668=>1078,8669=>1078,8670=>500,8671=>500,8672=>900,8673=>500,8674=>900,8675=>500,8676=>992,8677=>992,8678=>910,8679=>596,8680=>910,8681=>596,8682=>594,8683=>594,8684=>594,8685=>595,8686=>596,8687=>596,8688=>906,8689=>926,8690=>926,8691=>596,8692=>900,8693=>842,8694=>910,8695=>900,8696=>900,8697=>900,8698=>900,8699=>900,8700=>900,8701=>900,8702=>900,8703=>900,8704=>587,8705=>532,8706=>494,8707=>587,8708=>587,8709=>662,8710=>612,8711=>612,8712=>536,8713=>536,8714=>439,8715=>536,8716=>536,8717=>439,8718=>500,8719=>823,8720=>823,8721=>713,8722=>564,8723=>564,8724=>564,8725=>500,8726=>500,8727=>400,8728=>400,8729=>333,8730=>549,8731=>549,8732=>549,8733=>636,8734=>853,8735=>509,8736=>575,8737=>559,8738=>509,8739=>200,8740=>250,8741=>320,8742=>404,8743=>564,8744=>564,8745=>564,8746=>564,8747=>456,8748=>812,8749=>1153,8750=>618,8751=>910,8752=>1238,8753=>646,8754=>651,8755=>651,8756=>565,8757=>568,8758=>250,8759=>629,8760=>564,8761=>758,8762=>564,8763=>636,8764=>636,8765=>636,8766=>503,8767=>614,8768=>297,8769=>636,8770=>636,8771=>636,8772=>636,8773=>636,8774=>636,8775=>636,8776=>636,8777=>636,8778=>636,8779=>636,8780=>636,8781=>636,8782=>636,8783=>636,8784=>564,8785=>564,8786=>564,8787=>564,8788=>735,8789=>755,8790=>564,8791=>564,8792=>564,8793=>564,8794=>564,8795=>564,8796=>600,8797=>564,8798=>564,8799=>564,8800=>564,8801=>636,8802=>636,8803=>636,8804=>636,8805=>636,8806=>636,8807=>636,8808=>636,8809=>636,8810=>900,8811=>899,8812=>410,8813=>636,8814=>636,8815=>636,8816=>636,8817=>636,8818=>636,8819=>636,8820=>636,8821=>636,8822=>636,8823=>636,8824=>636,8825=>636,8826=>636,8827=>636,8828=>636,8829=>636,8830=>636,8831=>636,8832=>636,8833=>636,8834=>636,8835=>636,8836=>636,8837=>636,8838=>636,8839=>636,8840=>636,8841=>636,8842=>636,8843=>636,8844=>564,8845=>564,8846=>564,8847=>564,8848=>564,8849=>564,8850=>564,8851=>563,8852=>564,8853=>636,8854=>636,8855=>636,8856=>636,8857=>636,8858=>636,8859=>636,8860=>636,8861=>636,8862=>636,8863=>636,8864=>636,8865=>636,8866=>778,8867=>778,8868=>712,8869=>712,8870=>466,8871=>466,8872=>595,8873=>588,8874=>710,8875=>706,8876=>595,8877=>596,8878=>608,8879=>706,8880=>636,8881=>636,8882=>636,8883=>636,8884=>636,8885=>636,8886=>1296,8887=>1296,8888=>966,8889=>564,8890=>506,8891=>564,8892=>564,8893=>566,8894=>570,8895=>582,8896=>744,8897=>744,8898=>764,8899=>764,8900=>512,8901=>250,8902=>471,8903=>629,8904=>636,8905=>636,8906=>636,8907=>816,8908=>816,8909=>636,8910=>636,8911=>636,8912=>636,8913=>636,8914=>564,8915=>564,8916=>594,8917=>564,8918=>564,8919=>564,8920=>1215,8921=>1215,8922=>636,8923=>636,8924=>636,8925=>636,8926=>636,8927=>636,8928=>636,8929=>636,8930=>636,8931=>636,8932=>636,8933=>636,8934=>636,8935=>636,8936=>636,8937=>636,8938=>636,8939=>636,8940=>636,8941=>636,8942=>250,8943=>1000,8944=>1000,8945=>1000,8946=>601,8947=>536,8948=>464,8949=>536,8950=>536,8951=>464,8952=>536,8953=>536,8954=>601,8955=>536,8956=>464,8957=>536,8958=>464,8959=>600,8960=>662,8961=>442,8962=>694,8963=>472,8964=>472,8965=>508,8966=>508,8968=>474,8969=>474,8970=>474,8971=>474,8972=>600,8973=>600,8974=>600,8975=>600,8976=>564,8977=>503,8978=>791,8979=>791,8980=>593,8981=>560,8982=>563,8983=>563,8984=>700,8985=>564,8986=>780,8987=>632,8988=>474,8989=>474,8990=>474,8991=>474,8992=>686,8993=>686,8994=>658,8995=>658,8996=>800,8997=>800,8998=>800,8999=>800,9000=>800,9001=>329,9002=>329,9003=>800,9004=>800,9031=>777,9032=>777,9040=>777,9047=>777,9054=>777,9088=>800,9089=>800,9090=>800,9091=>840,9094=>800,9095=>800,9096=>800,9097=>800,9098=>800,9100=>800,9103=>788,9104=>788,9105=>788,9106=>788,9108=>800,9109=>800,9110=>800,9111=>800,9112=>800,9113=>800,9114=>800,9115=>384,9116=>384,9117=>384,9118=>384,9119=>384,9120=>384,9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9127=>494,9128=>494,9129=>494,9130=>494,9131=>494,9132=>494,9133=>494,9134=>686,9138=>1287,9139=>1287,9140=>860,9141=>861,9142=>861,9144=>889,9145=>889,9146=>889,9147=>889,9148=>889,9149=>889,9166=>800,9167=>800,9180=>896,9181=>896,9182=>903,9183=>904,9184=>910,9185=>910,9186=>761,9187=>910,9189=>942,9190=>817,9216=>800,9217=>800,9218=>800,9219=>800,9220=>800,9221=>800,9222=>800,9223=>800,9224=>800,9225=>800,9226=>800,9227=>800,9228=>800,9229=>800,9230=>800,9231=>800,9232=>800,9233=>800,9234=>800,9235=>800,9236=>800,9237=>800,9238=>800,9239=>800,9240=>800,9241=>800,9242=>800,9243=>800,9244=>800,9245=>800,9246=>800,9247=>800,9248=>800,9249=>800,9250=>556,9251=>500,9252=>800,9253=>800,9254=>500,9312=>788,9313=>788,9314=>788,9315=>788,9316=>788,9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>889,9473=>889,9474=>889,9475=>889,9484=>889,9485=>889,9486=>889,9487=>889,9488=>889,9489=>889,9490=>889,9491=>889,9492=>889,9493=>889,9494=>889,9495=>889,9496=>889,9497=>889,9498=>889,9499=>889,9500=>889,9501=>889,9502=>889,9503=>889,9504=>889,9505=>889,9506=>889,9507=>889,9508=>889,9509=>889,9510=>889,9511=>889,9512=>889,9513=>889,9514=>889,9515=>889,9516=>889,9517=>889,9518=>889,9519=>889,9520=>889,9521=>889,9522=>889,9523=>889,9524=>889,9525=>889,9526=>889,9527=>889,9528=>889,9529=>889,9530=>889,9531=>889,9532=>889,9533=>889,9534=>889,9535=>889,9536=>889,9537=>889,9538=>889,9539=>889,9540=>889,9541=>889,9542=>889,9543=>889,9544=>889,9545=>889,9546=>889,9547=>889,9552=>889,9553=>889,9554=>889,9555=>889,9556=>889,9557=>889,9558=>889,9559=>889,9560=>889,9561=>889,9562=>889,9563=>889,9564=>889,9565=>889,9566=>889,9567=>889,9568=>889,9569=>889,9570=>889,9571=>889,9572=>889,9573=>889,9574=>889,9575=>889,9576=>889,9577=>889,9578=>889,9579=>889,9580=>889,9581=>889,9582=>889,9583=>889,9584=>889,9585=>889,9586=>889,9587=>889,9588=>889,9589=>889,9590=>889,9591=>889,9592=>889,9593=>889,9594=>889,9595=>889,9596=>600,9597=>889,9598=>600,9599=>889,9600=>761,9601=>761,9602=>761,9603=>761,9604=>761,9605=>761,9606=>761,9607=>761,9608=>761,9609=>761,9610=>761,9611=>761,9612=>761,9613=>761,9614=>761,9615=>761,9616=>761,9617=>1000,9618=>1000,9619=>1000,9620=>761,9621=>761,9622=>761,9623=>761,9624=>761,9625=>761,9626=>761,9627=>761,9628=>761,9629=>761,9630=>761,9631=>761,9632=>761,9633=>761,9634=>761,9635=>761,9636=>761,9637=>761,9638=>761,9639=>761,9640=>761,9641=>761,9642=>346,9643=>346,9644=>761,9645=>761,9646=>761,9647=>761,9648=>761,9649=>761,9650=>840,9651=>840,9652=>420,9653=>420,9654=>800,9655=>800,9656=>386,9657=>386,9658=>800,9659=>800,9660=>840,9661=>840,9662=>420,9663=>420,9664=>800,9665=>800,9666=>386,9667=>386,9668=>800,9669=>800,9670=>788,9671=>788,9672=>788,9673=>791,9674=>494,9675=>791,9676=>791,9677=>785,9678=>791,9679=>791,9680=>791,9681=>791,9682=>791,9683=>791,9684=>791,9685=>791,9686=>791,9687=>791,9688=>400,9689=>761,9690=>761,9691=>761,9692=>791,9693=>791,9694=>791,9695=>791,9696=>791,9697=>791,9698=>761,9699=>761,9700=>761,9701=>761,9702=>400,9703=>761,9704=>761,9705=>761,9706=>761,9707=>761,9708=>840,9709=>840,9710=>840,9711=>885,9712=>761,9713=>761,9714=>761,9715=>761,9716=>791,9717=>791,9718=>791,9719=>791,9720=>780,9721=>780,9722=>780,9723=>567,9724=>567,9725=>435,9726=>435,9727=>780,9728=>800,9729=>800,9730=>748,9731=>800,9732=>800,9733=>811,9734=>816,9735=>468,9736=>677,9737=>724,9738=>944,9739=>944,9740=>686,9741=>944,9742=>715,9743=>715,9744=>757,9745=>755,9746=>755,9747=>756,9748=>800,9749=>837,9750=>719,9751=>719,9752=>782,9753=>800,9754=>800,9755=>800,9756=>800,9757=>430,9758=>800,9759=>430,9760=>517,9761=>660,9762=>724,9763=>732,9764=>886,9765=>577,9766=>489,9767=>563,9768=>490,9769=>770,9770=>725,9771=>860,9772=>668,9773=>753,9774=>724,9775=>730,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9784=>730,9785=>724,9786=>724,9787=>724,9788=>799,9789=>659,9790=>659,9791=>495,9792=>495,9793=>495,9794=>686,9795=>661,9796=>544,9797=>608,9798=>605,9799=>545,9800=>804,9801=>583,9802=>796,9803=>1006,9804=>825,9805=>1189,9806=>1144,9807=>1189,9808=>683,9809=>808,9810=>1146,9811=>797,9812=>800,9813=>800,9814=>800,9815=>800,9816=>800,9817=>800,9818=>800,9819=>800,9820=>800,9821=>800,9822=>800,9823=>800,9824=>770,9825=>770,9826=>770,9827=>770,9828=>770,9829=>770,9830=>770,9831=>770,9832=>895,9833=>333,9834=>513,9835=>722,9836=>722,9837=>371,9838=>377,9839=>402,9840=>642,9841=>655,9842=>869,9843=>905,9844=>905,9845=>905,9846=>905,9847=>905,9848=>905,9849=>905,9850=>905,9851=>1016,9852=>1064,9853=>1064,9854=>954,9855=>606,9856=>522,9857=>522,9858=>522,9859=>522,9860=>522,9861=>522,9862=>845,9863=>844,9864=>844,9865=>844,9866=>748,9867=>748,9868=>748,9869=>748,9870=>748,9871=>748,9872=>726,9873=>726,9874=>963,9875=>770,9876=>1038,9877=>388,9878=>997,9879=>787,9880=>508,9881=>809,9882=>1014,9883=>859,9884=>818,9885=>972,9888=>1000,9889=>546,9890=>784,9891=>786,9892=>738,9893=>542,9894=>601,9895=>700,9896=>511,9897=>861,9898=>611,9899=>611,9900=>544,9901=>782,9902=>1025,9903=>1141,9904=>1000,9905=>513,9906=>510,9907=>642,9908=>722,9909=>719,9910=>777,9911=>495,9912=>602,9913=>836,9914=>666,9915=>666,9916=>691,9920=>689,9921=>689,9922=>689,9923=>689,9985=>974,9986=>961,9987=>974,9988=>980,9989=>846,9990=>789,9991=>790,9992=>791,9993=>690,9994=>549,9995=>570,9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10024=>823,10025=>823,10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10060=>761,10061=>873,10062=>780,10063=>762,10064=>762,10065=>759,10066=>759,10067=>601,10068=>601,10069=>272,10070=>784,10071=>333,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10079=>392,10080=>668,10081=>732,10082=>544,10083=>544,10084=>910,10085=>667,10086=>760,10087=>800,10088=>390,10089=>390,10090=>317,10091=>317,10092=>276,10093=>276,10094=>509,10095=>509,10096=>410,10097=>410,10098=>234,10099=>234,10100=>334,10101=>334,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,10133=>756,10134=>756,10135=>756,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10160=>832,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,10175=>1248,10176=>509,10177=>892,10178=>752,10179=>636,10180=>636,10183=>564,10184=>876,10185=>867,10186=>220,10188=>847,10190=>636,10191=>636,10192=>788,10193=>564,10194=>536,10195=>474,10196=>474,10197=>755,10198=>755,10199=>874,10200=>712,10201=>712,10202=>890,10203=>890,10204=>966,10205=>926,10206=>926,10207=>372,10208=>494,10209=>661,10210=>741,10211=>741,10212=>756,10213=>756,10214=>455,10215=>455,10216=>329,10217=>329,10218=>496,10219=>496,10224=>1000,10225=>1000,10226=>1104,10227=>1102,10228=>964,10229=>1000,10230=>1000,10231=>1000,10232=>1000,10233=>1000,10234=>1000,10235=>1000,10236=>1000,10237=>1000,10238=>1000,10239=>1392,10624=>420,10625=>350,10626=>238,10627=>480,10628=>480,10629=>333,10630=>333,10635=>333,10636=>333,10641=>329,10642=>329,10649=>179,10651=>559,10653=>570,10654=>595,10656=>509,10657=>509,10658=>575,10659=>575,10660=>575,10661=>575,10672=>746,10673=>746,10674=>746,10675=>746,10676=>746,10677=>926,10678=>636,10679=>791,10680=>636,10681=>791,10684=>791,10686=>800,10687=>800,10688=>791,10689=>791,10690=>983,10691=>1052,10692=>636,10693=>636,10694=>636,10695=>636,10696=>636,10697=>714,10698=>840,10699=>892,10700=>892,10701=>931,10702=>892,10703=>870,10704=>870,10705=>702,10706=>702,10707=>702,10708=>702,10709=>702,10710=>702,10711=>702,10726=>804,10728=>840,10729=>840,10731=>494,10740=>1000,10741=>376,10742=>351,10743=>376,10744=>400,10745=>400,10752=>860,10753=>860,10754=>860,10755=>766,10756=>766,10757=>756,10758=>756,10761=>745,10781=>702,10786=>564,10787=>564,10788=>564,10789=>564,10790=>564,10791=>564,10800=>564,10801=>564,10808=>791,10809=>840,10810=>840,10811=>840,10815=>713,10993=>372,10994=>320,10995=>352,10996=>440,10997=>420,11008=>1000,11009=>1000,11010=>1000,11011=>1000,11012=>1222,11013=>1000,11014=>1000,11015=>1000,11016=>1000,11017=>1000,11018=>1000,11019=>1000,11020=>1244,11021=>1000,11022=>772,11023=>772,11024=>772,11025=>772,11026=>770,11027=>770,11028=>770,11029=>770,11030=>770,11031=>770,11032=>770,11033=>770,11034=>770,11035=>1000,11036=>1000,11037=>283,11038=>283,11039=>846,11040=>846,11041=>799,11042=>799,11043=>807,11044=>1000,11045=>461,11046=>461,11047=>461,11048=>461,11049=>360,11050=>360,11051=>283,11052=>854,11053=>854,11054=>628,11055=>628,11056=>900,11057=>910,11088=>589,11089=>443,11090=>443,11091=>802,11092=>803,11264=>645,11265=>793,11266=>851,11267=>700,11268=>851,11269=>640,11270=>774,11271=>665,11272=>733,11273=>834,11274=>834,11275=>734,11276=>790,11277=>580,11278=>834,11279=>979,11280=>738,11281=>410,11282=>775,11283=>471,11284=>734,11285=>851,11286=>895,11287=>722,11288=>638,11289=>620,11290=>721,11291=>793,11292=>821,11293=>699,11294=>793,11295=>682,11296=>569,11297=>791,11299=>751,11300=>705,11301=>874,11302=>665,11303=>1139,11304=>1023,11305=>1238,11306=>762,11310=>759,11312=>484,11313=>595,11314=>638,11315=>525,11316=>638,11317=>480,11318=>580,11319=>499,11320=>550,11321=>625,11322=>626,11323=>550,11324=>592,11325=>435,11326=>626,11327=>734,11328=>553,11329=>308,11330=>581,11331=>353,11332=>550,11333=>638,11334=>671,11335=>542,11336=>478,11337=>465,11338=>540,11339=>594,11340=>616,11341=>524,11342=>594,11343=>512,11344=>427,11345=>589,11347=>564,11348=>529,11349=>655,11350=>499,11351=>854,11352=>767,11353=>929,11354=>571,11358=>569,11360=>611,11361=>289,11362=>627,11363=>556,11364=>667,11365=>435,11366=>303,11367=>728,11368=>501,11369=>734,11370=>514,11371=>611,11372=>405,11373=>680,11374=>889,11375=>721,11376=>680,11377=>624,11378=>1075,11379=>852,11380=>468,11381=>557,11382=>380,11383=>612,11384=>559,11385=>347,11386=>491,11387=>397,11388=>230,11389=>469,11390=>556,11391=>611,11392=>719,11393=>499,11394=>532,11395=>381,11396=>615,11397=>433,11398=>969,11399=>680,11400=>647,11401=>444,11402=>593,11403=>402,11404=>573,11405=>405,11406=>698,11407=>509,11408=>726,11409=>493,11410=>283,11411=>238,11412=>628,11413=>455,11414=>653,11415=>471,11416=>819,11417=>589,11418=>698,11419=>507,11420=>546,11421=>378,11422=>724,11423=>489,11424=>724,11425=>524,11426=>526,11427=>375,11428=>647,11429=>438,11430=>615,11431=>433,11432=>719,11433=>519,11434=>762,11435=>538,11436=>649,11437=>461,11438=>721,11439=>519,11440=>964,11441=>681,11456=>689,11457=>464,11464=>579,11465=>391,11466=>493,11467=>355,11492=>408,11493=>499,11494=>496,11495=>986,11496=>466,11497=>461,11498=>934,11517=>256,11518=>617,11519=>266,11744=>0,11745=>0,11746=>0,11747=>0,11748=>0,11749=>0,11750=>0,11751=>0,11752=>0,11753=>0,11754=>0,11755=>0,11756=>0,11757=>0,11758=>0,11759=>0,11760=>0,11761=>0,11762=>0,11763=>0,11764=>0,11765=>0,11766=>0,11767=>0,11768=>0,11769=>0,11770=>0,11771=>0,11772=>0,11773=>0,11774=>0,11775=>0,11776=>333,11777=>333,11782=>534,11783=>534,11787=>346,11788=>500,11789=>500,11791=>1000,11792=>1000,11793=>1000,11798=>564,11799=>333,11800=>444,11802=>333,11803=>500,11804=>500,11805=>500,11806=>500,11807=>500,11808=>333,11809=>333,11810=>333,11811=>333,11812=>333,11813=>333,11814=>856,11815=>856,11816=>464,11817=>464,11818=>620,11819=>410,11820=>410,11821=>620,11822=>500,11823=>250,11824=>400,11825=>250,42560=>607,42561=>411,42562=>611,42563=>410,42564=>487,42565=>367,42566=>368,42567=>286,42568=>722,42569=>519,42570=>550,42571=>458,42572=>1145,42573=>775,42574=>665,42575=>548,42576=>1014,42577=>736,42578=>910,42579=>675,42580=>962,42581=>677,42582=>1042,42583=>648,42584=>722,42585=>513,42586=>932,42587=>700,42588=>1042,42589=>749,42590=>780,42591=>550,42592=>717,42593=>524,42594=>896,42595=>635,42596=>933,42597=>635,42598=>1139,42599=>777,42600=>724,42601=>491,42602=>790,42603=>560,42604=>1262,42605=>850,42606=>734,42607=>0,42608=>0,42609=>0,42610=>0,42611=>519,42620=>0,42621=>0,42622=>510,42623=>201,42624=>639,42625=>488,42626=>475,42627=>347,42628=>1160,42629=>842,42630=>1000,42631=>768,42632=>737,42633=>531,42634=>827,42635=>530,42636=>608,42637=>438,42638=>742,42639=>545,42640=>608,42641=>480,42642=>926,42643=>654,42644=>671,42645=>518,42646=>992,42647=>780,42752=>318,42753=>318,42754=>318,42755=>318,42756=>318,42757=>318,42758=>318,42759=>318,42760=>307,42761=>307,42762=>307,42763=>307,42764=>307,42765=>307,42766=>307,42767=>307,42768=>307,42769=>307,42770=>460,42771=>460,42772=>460,42773=>460,42774=>460,42775=>374,42776=>445,42777=>564,42778=>564,42779=>354,42780=>354,42781=>243,42782=>243,42783=>243,42784=>564,42785=>564,42786=>276,42787=>242,42788=>386,42789=>276,42790=>722,42791=>501,42792=>895,42793=>703,42794=>532,42795=>409,42796=>437,42797=>389,42798=>592,42799=>600,42800=>413,42801=>373,42802=>1183,42803=>683,42804=>1154,42805=>741,42806=>1089,42807=>693,42808=>902,42809=>563,42810=>902,42811=>563,42812=>912,42813=>549,42814=>667,42815=>432,42816=>722,42817=>513,42818=>722,42819=>513,42820=>722,42821=>512,42822=>713,42823=>341,42824=>611,42825=>289,42826=>750,42827=>544,42828=>918,42829=>654,42830=>1262,42831=>841,42832=>556,42833=>500,42838=>722,42839=>575,42842=>397,42843=>344,42852=>576,42853=>500,42854=>576,42855=>500,42862=>489,42863=>489,42864=>307,42873=>722,42874=>491,42875=>483,42876=>344,42877=>611,42878=>581,42879=>441,42880=>611,42881=>258,42882=>689,42883=>495,42884=>483,42885=>344,42886=>667,42887=>444,42888=>333,42889=>250,42890=>282,42891=>286,42892=>278,42893=>722,42896=>722,42897=>492,42922=>833,43002=>779,43003=>556,43004=>556,43005=>889,43006=>333,43007=>1298,43232=>0,43233=>0,43234=>0,43235=>0,43236=>0,43237=>0,43238=>0,43239=>0,43240=>0,43241=>0,43242=>0,43243=>0,43244=>0,43245=>0,43246=>0,43247=>0,43248=>0,43249=>0,43250=>500,43251=>500,43252=>500,43253=>500,43254=>500,43255=>500,43256=>694,43257=>680,43258=>400,43259=>500,64256=>639,64257=>524,64258=>509,64259=>795,64260=>778,64261=>581,64262=>663,64275=>971,64276=>969,64277=>978,64278=>971,64279=>1219,64285=>320,64286=>0,64287=>537,64288=>537,64289=>817,64290=>820,64291=>820,64292=>820,64293=>820,64294=>820,64295=>820,64296=>820,64297=>564,64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537,64309=>350,64310=>350,64312=>537,64313=>320,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537,64334=>537,64335=>547,64336=>229,64337=>237,64338=>877,64339=>877,64340=>268,64341=>300,64342=>926,64343=>877,64344=>296,64345=>300,64346=>877,64347=>877,64348=>298,64349=>300,64350=>877,64351=>877,64352=>270,64353=>300,64354=>877,64355=>877,64356=>288,64357=>300,64358=>877,64359=>877,64360=>288,64361=>300,64362=>858,64363=>858,64364=>338,64365=>328,64366=>858,64367=>858,64368=>338,64369=>328,64370=>598,64371=>595,64372=>600,64373=>630,64374=>598,64375=>595,64376=>600,64377=>630,64378=>598,64379=>595,64380=>600,64381=>630,64382=>598,64383=>595,64384=>600,64385=>630,64386=>400,64387=>348,64388=>400,64389=>348,64390=>348,64391=>348,64392=>348,64393=>348,64394=>345,64395=>345,64396=>345,64397=>345,64398=>902,64399=>966,64400=>373,64401=>469,64402=>902,64403=>966,64404=>373,64405=>469,64406=>902,64407=>966,64408=>373,64409=>469,64410=>902,64411=>966,64412=>373,64413=>469,64414=>585,64415=>585,64416=>585,64417=>585,64418=>293,64419=>300,64420=>372,64421=>420,64422=>372,64423=>393,64424=>313,64425=>340,64426=>456,64427=>456,64428=>456,64429=>496,64430=>710,64431=>680,64432=>710,64433=>680,64434=>344,64435=>344,64436=>484,64437=>484,64438=>508,64439=>508,64440=>508,64441=>508,64442=>565,64443=>508,64444=>335,64445=>344,64446=>344,64447=>342,64448=>354,64449=>354,64467=>719,64468=>688,64469=>373,64470=>469,64471=>359,64472=>329,64473=>399,64474=>369,64475=>399,64476=>369,64477=>522,64478=>399,64479=>369,64480=>399,64481=>369,64482=>399,64483=>369,64484=>672,64485=>670,64486=>270,64487=>300,64488=>270,64489=>300,64508=>672,64509=>670,64510=>270,64511=>300,64606=>375,64607=>375,64608=>375,64609=>375,64610=>375,64611=>375,64612=>698,64613=>698,64615=>988,64618=>698,64619=>698,64621=>988,64624=>698,64625=>698,64627=>988,64630=>698,64631=>698,64633=>988,64650=>698,64651=>698,64653=>988,64657=>698,64658=>698,64660=>988,64830=>443,64831=>443,65010=>1025,65020=>1107,65056=>0,65057=>0,65058=>0,65059=>0,65060=>0,65061=>0,65062=>0,65136=>200,65137=>200,65138=>250,65139=>373,65140=>200,65142=>200,65143=>200,65144=>200,65145=>200,65146=>200,65147=>200,65148=>200,65149=>200,65150=>200,65151=>200,65152=>350,65153=>245,65154=>237,65155=>229,65156=>237,65157=>399,65158=>359,65159=>229,65160=>237,65161=>672,65162=>680,65163=>270,65164=>300,65165=>229,65166=>237,65167=>907,65168=>917,65169=>270,65170=>300,65171=>416,65172=>420,65173=>907,65174=>917,65175=>288,65176=>300,65177=>907,65178=>917,65179=>288,65180=>300,65181=>598,65182=>595,65183=>600,65184=>630,65185=>598,65186=>595,65187=>600,65188=>630,65189=>598,65190=>595,65191=>600,65192=>630,65193=>348,65194=>398,65195=>403,65196=>398,65197=>345,65198=>385,65199=>345,65200=>385,65201=>901,65202=>901,65203=>648,65204=>603,65205=>901,65206=>901,65207=>649,65208=>598,65209=>909,65210=>893,65211=>633,65212=>583,65213=>909,65214=>893,65215=>630,65216=>580,65217=>568,65218=>568,65219=>521,65220=>521,65221=>568,65222=>568,65223=>521,65224=>521,65225=>591,65226=>530,65227=>584,65228=>447,65229=>591,65230=>537,65231=>584,65232=>447,65233=>858,65234=>858,65235=>338,65236=>328,65237=>626,65238=>626,65239=>338,65240=>328,65241=>486,65242=>688,65243=>373,65244=>469,65245=>628,65246=>667,65247=>247,65248=>280,65249=>475,65250=>415,65251=>419,65252=>476,65253=>637,65254=>637,65255=>270,65256=>300,65257=>372,65258=>420,65259=>463,65260=>396,65261=>374,65262=>359,65263=>672,65264=>680,65265=>672,65266=>680,65267=>270,65268=>300,65269=>456,65270=>594,65271=>446,65272=>614,65273=>446,65274=>614,65275=>446,65276=>614,65279=>0,65529=>0,65530=>0,65531=>0,65532=>800,65533=>900,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freeserif.z b/tcpdf/fonts/freeserif.z new file mode 100644 index 0000000..158194a Binary files /dev/null and b/tcpdf/fonts/freeserif.z differ diff --git a/tcpdf/fonts/freeserifb.ctg.z b/tcpdf/fonts/freeserifb.ctg.z new file mode 100644 index 0000000..3268f27 Binary files /dev/null and b/tcpdf/fonts/freeserifb.ctg.z differ diff --git a/tcpdf/fonts/freeserifb.php b/tcpdf/fonts/freeserifb.php new file mode 100644 index 0000000..95eb43d --- /dev/null +++ b/tcpdf/fonts/freeserifb.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSerifBold'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=1310828; +$enc=''; +$file='freeserifb.z'; +$ctg='freeserifb.ctg.z'; +$desc=array('Flags'=>32,'FontBBox'=>'[-819 -555 1834 920]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>676,'XHeight'=>461,'StemV'=>123,'StemH'=>53,'AvgWidth'=>628,'MaxWidth'=>1850,'MissingWidth'=>600); +$cbbox=array(0=>array(23,-81,577,774),33=>array(81,-13,251,691),34=>array(83,404,472,691),35=>array(4,0,496,700),36=>array(29,-99,472,750),37=>array(124,-14,877,692),38=>array(62,-16,787,691),39=>array(75,404,204,691),40=>array(46,-168,306,694),41=>array(27,-168,287,694),42=>array(60,262,443,685),43=>array(62,-16,614,528),44=>array(39,-180,223,155),45=>array(44,171,287,287),46=>array(41,-13,210,156),47=>array(-24,-19,302,691),48=>array(24,-13,476,688),49=>array(65,0,442,688),50=>array(17,0,478,688),51=>array(16,-14,468,688),52=>array(19,0,475,688),53=>array(22,-8,470,676),54=>array(28,-13,475,688),55=>array(17,0,477,676),56=>array(28,-13,472,688),57=>array(26,-13,473,688),58=>array(82,-13,251,472),59=>array(82,-180,266,472),60=>array(62,-25,614,539),61=>array(62,87,614,427),62=>array(62,-25,614,539),63=>array(57,-13,445,689),64=>array(108,-19,822,691),65=>array(20,0,700,690),66=>array(20,0,623,676),67=>array(35,-19,673,691),68=>array(20,0,696,676),69=>array(20,0,645,676),70=>array(20,0,587,676),71=>array(35,-19,753,691),72=>array(20,0,758,676),73=>array(20,0,370,676),74=>array(5,-96,481,676),75=>array(20,0,759,676),76=>array(20,0,639,676),77=>array(20,0,927,676),78=>array(20,-18,705,676),79=>array(35,-19,743,691),80=>array(20,0,604,676),81=>array(35,-176,743,691),82=>array(20,0,709,676),83=>array(45,-19,523,692),84=>array(20,0,625,676),85=>array(20,-19,705,676),86=>array(10,-18,695,676),87=>array(10,-15,972,676),88=>array(20,0,703,676),89=>array(10,0,694,676),90=>array(20,0,626,676),91=>array(67,-149,301,678),92=>array(-25,-19,303,691),93=>array(32,-149,266,678),94=>array(73,311,509,676),95=>array(0,-155,500,-75),96=>array(8,528,246,713),97=>array(25,-14,488,473),98=>array(18,-14,520,676),99=>array(25,-14,430,473),100=>array(25,-14,534,676),101=>array(25,-14,426,473),102=>array(18,0,393,691),103=>array(25,-206,480,473),104=>array(18,0,536,676),105=>array(24,0,265,691),106=>array(0,-203,320,691),107=>array(18,0,545,676),108=>array(18,0,259,676),109=>array(18,0,814,473),110=>array(18,0,536,473),111=>array(25,-14,476,473),112=>array(15,-205,520,473),113=>array(25,-205,527,473),114=>array(18,0,422,473),115=>array(35,-14,371,473),116=>array(18,-12,330,630),117=>array(18,-14,546,461),118=>array(9,-14,473,461),119=>array(9,-14,693,461),120=>array(18,0,490,461),121=>array(9,-205,473,461),122=>array(21,0,420,461),123=>array(22,-175,340,698),124=>array(66,-19,154,691),125=>array(54,-175,372,698),126=>array(29,175,491,331),160=>array(0,0,0,0),161=>array(82,-203,252,501),162=>array(53,-140,458,588),163=>array(21,-14,477,684),164=>array(-26,61,526,613),165=>array(-64,0,547,676),166=>array(66,-19,154,691),167=>array(57,-132,443,691),168=>array(-2,537,337,666),169=>array(26,-19,721,691),170=>array(-1,261,301,688),171=>array(23,36,473,415),172=>array(62,64,618,362),173=>array(44,171,287,287),174=>array(26,-19,721,691),175=>array(1,565,331,637),176=>array(57,402,343,688),177=>array(62,-44,614,558),178=>array(0,390,300,803),179=>array(3,383,297,803),180=>array(86,528,324,713),181=>array(33,-206,536,461),182=>array(0,-186,519,676),183=>array(60,181,189,310),184=>array(68,-218,294,0),185=>array(14,390,259,803),186=>array(18,261,312,688),187=>array(27,36,477,415),188=>array(28,-12,743,688),189=>array(3,-12,765,688),190=>array(23,-12,733,688),191=>array(55,-201,443,501),192=>array(20,0,700,900),193=>array(20,0,700,900),194=>array(20,0,700,899),195=>array(20,0,700,850),196=>array(20,0,700,848),197=>array(20,0,700,900),198=>array(20,0,967,676),199=>array(35,-218,673,691),200=>array(20,0,645,900),201=>array(20,0,645,900),202=>array(20,0,645,899),203=>array(20,0,645,849),204=>array(20,0,370,900),205=>array(20,0,370,900),206=>array(20,0,370,900),207=>array(20,0,370,858),208=>array(12,0,696,676),209=>array(20,-18,705,884),210=>array(35,-19,743,900),211=>array(35,-19,743,900),212=>array(35,-19,743,899),213=>array(35,-19,743,852),214=>array(35,-19,743,853),215=>array(62,-17,614,531),216=>array(35,-74,743,737),217=>array(20,-19,705,900),218=>array(20,-19,705,900),219=>array(20,-19,705,900),220=>array(20,-19,705,853),221=>array(10,0,694,900),222=>array(20,0,604,676),223=>array(20,-12,518,691),224=>array(25,-14,488,713),225=>array(25,-14,488,713),226=>array(25,-14,488,704),227=>array(25,-14,488,674),228=>array(25,-14,488,645),229=>array(25,-14,488,722),230=>array(25,-14,685,473),231=>array(25,-218,430,473),232=>array(25,-14,426,713),233=>array(25,-14,426,712),234=>array(25,-14,426,680),235=>array(25,-14,426,642),236=>array(0,0,263,713),237=>array(24,0,265,713),238=>array(-28,0,309,704),239=>array(-20,0,319,642),240=>array(25,-14,476,691),241=>array(18,0,536,674),242=>array(25,-14,476,713),243=>array(25,-14,476,713),244=>array(25,-14,476,695),245=>array(25,-14,476,644),246=>array(25,-14,476,639),247=>array(62,-56,614,570),248=>array(25,-92,476,549),249=>array(18,-14,546,713),250=>array(18,-14,546,713),251=>array(18,-14,546,704),252=>array(18,-14,546,639),253=>array(9,-205,473,713),254=>array(18,-205,523,676),255=>array(9,-205,473,641),256=>array(20,0,700,845),257=>array(25,-14,488,635),258=>array(20,0,700,900),259=>array(25,-14,488,691),260=>array(9,-205,817,690),261=>array(25,-173,500,473),262=>array(35,-19,673,900),263=>array(25,-14,430,713),264=>array(35,-19,673,900),265=>array(25,-14,430,687),266=>array(35,-19,673,855),267=>array(25,-14,430,638),268=>array(35,-19,673,899),269=>array(25,-14,430,692),270=>array(20,0,696,900),271=>array(25,-14,677,676),272=>array(12,0,696,676),273=>array(25,-14,534,676),274=>array(20,0,645,801),275=>array(25,-14,426,614),276=>array(20,0,645,889),277=>array(25,-14,426,674),278=>array(20,0,645,876),279=>array(25,-14,426,642),280=>array(18,-173,739,676),281=>array(25,-173,444,473),282=>array(20,0,645,900),283=>array(25,-14,426,692),284=>array(35,-19,753,900),285=>array(25,-206,480,687),286=>array(35,-19,753,900),287=>array(25,-206,480,691),288=>array(35,-19,753,855),289=>array(25,-206,480,640),290=>array(35,-300,753,691),291=>array(25,-206,480,767),292=>array(20,0,758,900),293=>array(18,0,536,900),294=>array(21,0,759,676),295=>array(13,0,534,676),296=>array(8,0,373,853),297=>array(-36,0,329,638),298=>array(20,0,370,846),299=>array(-18,0,312,616),300=>array(20,0,370,889),301=>array(-6,0,297,674),302=>array(20,-173,505,676),303=>array(24,-173,396,691),304=>array(20,0,370,876),305=>array(24,0,263,461),306=>array(20,-96,859,676),307=>array(24,-203,530,691),308=>array(5,-96,481,900),309=>array(0,-203,387,687),310=>array(20,-300,759,676),311=>array(18,-300,545,676),312=>array(22,0,514,470),313=>array(20,0,639,900),314=>array(18,0,296,900),315=>array(20,-300,639,676),316=>array(18,-300,259,676),317=>array(20,0,639,676),318=>array(18,0,413,676),319=>array(20,0,639,676),320=>array(18,0,427,676),321=>array(19,0,638,676),322=>array(-22,0,303,676),323=>array(20,-18,705,900),324=>array(18,0,536,713),325=>array(20,-300,705,676),326=>array(18,-300,536,473),327=>array(20,-18,705,900),328=>array(18,0,536,692),329=>array(11,0,606,755),330=>array(16,-14,789,695),331=>array(21,-203,490,473),332=>array(35,-19,743,800),333=>array(25,-14,476,614),334=>array(35,-19,743,889),335=>array(25,-14,476,674),336=>array(35,-19,743,900),337=>array(25,-14,476,713),338=>array(22,-5,981,684),339=>array(25,-14,699,473),340=>array(20,0,709,900),341=>array(18,0,422,713),342=>array(20,-300,709,676),343=>array(18,-300,422,473),344=>array(20,0,709,900),345=>array(18,0,422,692),346=>array(45,-19,523,900),347=>array(35,-14,371,713),348=>array(45,-19,523,900),349=>array(34,-14,371,687),350=>array(35,-218,513,692),351=>array(25,-218,361,473),352=>array(45,-19,523,900),353=>array(27,-14,371,692),354=>array(20,-218,625,676),355=>array(18,-230,330,630),356=>array(20,0,625,900),357=>array(18,-12,447,675),358=>array(32,0,637,676),359=>array(13,-12,332,630),360=>array(20,-19,705,853),361=>array(18,-14,546,638),362=>array(20,-19,705,800),363=>array(18,-14,546,612),364=>array(20,-19,705,889),365=>array(18,-14,546,674),366=>array(20,-19,705,900),367=>array(18,-14,546,718),368=>array(20,-19,705,899),369=>array(18,-14,546,713),370=>array(20,-173,705,676),371=>array(18,-173,558,461),372=>array(10,-15,972,900),373=>array(9,-14,693,687),374=>array(10,0,694,900),375=>array(9,-205,473,687),376=>array(10,0,694,876),377=>array(20,0,626,900),378=>array(21,0,420,713),379=>array(20,0,626,876),380=>array(21,0,420,666),381=>array(20,0,626,900),382=>array(21,0,420,692),383=>array(18,0,393,691),384=>array(13,-14,521,676),385=>array(10,0,767,676),386=>array(25,0,609,676),387=>array(17,-14,521,676),388=>array(16,0,619,686),389=>array(17,-14,521,686),390=>array(35,-19,673,691),391=>array(35,-19,901,822),392=>array(25,-14,605,691),393=>array(12,0,696,676),394=>array(10,0,840,676),395=>array(35,0,638,676),396=>array(25,-14,534,676),397=>array(25,-230,500,473),398=>array(20,0,645,676),399=>array(35,-19,743,691),400=>array(40,-14,586,691),401=>array(3,-96,707,676),402=>array(-57,-203,439,691),403=>array(35,-19,901,822),404=>array(20,-15,762,676),405=>array(20,-9,791,676),406=>array(16,-12,327,676),407=>array(20,0,370,676),408=>array(30,0,846,691),409=>array(22,0,543,691),410=>array(16,0,276,676),411=>array(12,-13,486,694),412=>array(23,-14,953,676),413=>array(0,-227,843,676),414=>array(21,-215,539,473),415=>array(35,-19,743,691),416=>array(35,-19,773,864),417=>array(25,-14,564,647),418=>array(35,-19,1157,694),419=>array(25,-205,776,473),420=>array(0,0,738,676),421=>array(19,-205,524,691),422=>array(16,-196,733,676),423=>array(45,-19,523,692),424=>array(35,-14,371,473),425=>array(12,0,621,673),426=>array(0,-230,465,691),427=>array(20,-227,332,630),428=>array(4,0,688,676),429=>array(15,-12,390,691),430=>array(31,-96,640,676),431=>array(16,-19,748,864),432=>array(16,-14,600,647),433=>array(35,-15,735,676),434=>array(16,-19,623,697),435=>array(13,0,818,682),436=>array(16,-205,695,692),437=>array(28,0,634,676),438=>array(21,0,420,461),439=>array(-5,-17,580,676),440=>array(36,-17,621,676),441=>array(30,-217,486,462),442=>array(37,-217,450,462),443=>array(17,0,478,688),444=>array(50,-17,605,676),445=>array(30,-217,490,463),446=>array(20,-14,401,630),447=>array(19,-205,579,471),448=>array(66,-14,154,696),449=>array(66,-14,352,696),450=>array(33,-13,537,697),451=>array(81,-13,251,691),452=>array(20,0,1290,900),453=>array(20,0,1134,692),454=>array(25,-14,966,692),455=>array(20,-96,1115,676),456=>array(20,-203,907,691),457=>array(18,-203,530,691),458=>array(20,-96,1181,676),459=>array(20,-203,945,691),460=>array(18,-203,809,691),461=>array(20,0,700,892),462=>array(25,-14,488,692),463=>array(20,0,370,892),464=>array(-33,0,304,692),465=>array(35,-19,743,892),466=>array(25,-14,476,692),467=>array(20,-19,705,892),468=>array(18,-14,546,692),469=>array(16,-16,701,900),470=>array(18,-14,546,769),471=>array(16,-16,701,900),472=>array(18,-14,546,881),473=>array(16,-16,701,900),474=>array(18,-14,546,875),475=>array(16,-16,701,900),476=>array(18,-14,546,884),477=>array(18,-13,419,474),478=>array(20,0,700,900),479=>array(25,-14,488,788),480=>array(9,0,689,900),481=>array(25,-14,488,788),482=>array(20,0,967,837),483=>array(25,-14,685,619),484=>array(37,-19,755,691),485=>array(16,-206,500,473),486=>array(35,-19,753,898),487=>array(25,-206,480,692),488=>array(20,0,759,899),489=>array(18,0,545,892),490=>array(35,-202,743,691),491=>array(25,-201,476,473),492=>array(35,-202,743,836),493=>array(25,-201,476,612),494=>array(-5,-17,580,900),495=>array(14,-217,470,692),496=>array(0,-203,387,692),497=>array(20,0,1290,676),498=>array(20,0,1134,676),499=>array(25,-14,966,676),500=>array(35,-19,753,900),501=>array(25,-206,480,686),502=>array(16,-13,955,676),503=>array(3,0,592,699),504=>array(20,-18,705,900),505=>array(18,0,536,696),506=>array(9,0,689,900),507=>array(25,-14,488,899),508=>array(20,0,967,900),509=>array(25,-14,685,686),510=>array(35,-74,743,899),511=>array(25,-92,476,774),512=>array(20,0,700,900),513=>array(25,-14,488,710),514=>array(20,0,700,859),515=>array(25,-14,488,674),516=>array(20,0,645,900),517=>array(25,-14,426,710),518=>array(20,0,645,861),519=>array(25,-14,426,673),520=>array(0,0,370,900),521=>array(-60,0,269,710),522=>array(20,0,370,862),523=>array(-15,0,288,673),524=>array(35,-19,743,900),525=>array(25,-14,476,710),526=>array(35,-19,743,858),527=>array(25,-14,476,674),528=>array(20,0,709,900),529=>array(18,0,422,710),530=>array(20,0,709,866),531=>array(18,0,422,673),532=>array(20,-19,705,900),533=>array(18,-14,546,710),534=>array(20,-19,705,859),535=>array(18,-14,546,674),536=>array(45,-300,523,692),537=>array(35,-300,371,473),538=>array(20,-300,625,676),539=>array(18,-300,330,630),540=>array(33,-58,423,693),541=>array(24,-239,428,444),542=>array(20,0,758,892),543=>array(18,0,536,892),544=>array(-8,-200,731,695),545=>array(25,-253,629,676),546=>array(35,-19,528,691),547=>array(30,-14,470,726),548=>array(28,-227,634,676),549=>array(21,-227,420,461),550=>array(20,0,700,845),551=>array(25,-14,488,640),552=>array(16,-216,641,676),553=>array(25,-227,426,473),554=>array(35,-16,743,900),555=>array(25,-14,476,788),556=>array(35,-16,743,900),557=>array(25,-14,476,788),558=>array(35,-19,743,845),559=>array(25,-14,476,637),560=>array(35,-16,743,900),561=>array(25,-14,476,742),562=>array(10,0,694,837),563=>array(9,-205,473,612),564=>array(24,-298,429,676),565=>array(21,-237,635,473),566=>array(18,-294,413,630),567=>array(0,-203,317,461),568=>array(9,-21,767,700),569=>array(1,-199,759,483),570=>array(9,-90,689,744),571=>array(46,-90,687,744),572=>array(1,-55,440,539),573=>array(14,0,635,676),574=>array(31,-90,644,744),575=>array(35,-200,380,473),576=>array(7,-200,443,473),577=>array(16,0,465,691),578=>array(25,0,444,476),579=>array(18,0,621,676),580=>array(16,-19,701,676),581=>array(18,-14,703,680),582=>array(16,-77,641,780),583=>array(25,-77,426,542),584=>array(3,-96,479,676),585=>array(-57,-203,328,691),586=>array(12,-199,760,697),587=>array(8,-211,588,484),588=>array(16,0,705,676),589=>array(29,0,434,473),590=>array(15,0,699,676),591=>array(16,-205,480,461),592=>array(25,-14,488,473),593=>array(25,-14,511,461),594=>array(25,-14,511,461),595=>array(72,-14,521,691),596=>array(5,-14,410,473),597=>array(25,-102,456,473),598=>array(25,-203,633,676),599=>array(25,-14,654,691),600=>array(25,-14,426,473),601=>array(25,-14,426,473),602=>array(25,-14,636,473),603=>array(25,-13,420,474),604=>array(9,-13,404,474),605=>array(9,-13,618,474),606=>array(27,-13,431,474),607=>array(-57,-203,317,461),608=>array(34,-205,660,691),609=>array(34,-205,481,473),610=>array(24,-13,545,473),611=>array(10,-231,489,461),612=>array(26,-9,565,470),613=>array(14,-215,532,461),614=>array(16,0,534,691),615=>array(16,-203,485,691),616=>array(5,0,298,691),617=>array(16,-12,329,461),618=>array(12,0,281,461),619=>array(2,0,367,676),620=>array(4,0,393,676),621=>array(16,-203,344,676),622=>array(16,-217,616,676),623=>array(16,-12,812,461),624=>array(16,-215,814,461),625=>array(16,-203,764,473),626=>array(-34,-203,609,473),627=>array(21,-203,628,473),628=>array(12,-12,490,461),629=>array(25,-14,476,473),630=>array(25,-14,732,473),631=>array(35,-13,680,478),632=>array(37,-215,674,676),633=>array(5,-12,409,461),634=>array(29,-12,434,676),635=>array(29,-203,518,461),636=>array(29,-215,434,473),637=>array(18,-203,423,473),638=>array(14,0,389,473),639=>array(14,-200,389,473),640=>array(12,0,533,461),641=>array(12,0,533,461),642=>array(35,-227,371,473),643=>array(-30,-203,466,691),644=>array(-34,-203,462,691),645=>array(6,-203,502,473),646=>array(6,-250,555,691),647=>array(5,-12,317,630),648=>array(18,-203,387,630),649=>array(16,-14,537,461),650=>array(52,-11,508,461),651=>array(18,-9,508,466),652=>array(9,0,473,475),653=>array(9,0,693,475),654=>array(9,0,473,666),655=>array(4,0,502,461),656=>array(21,-227,666,461),657=>array(21,-98,478,461),658=>array(14,-217,470,462),659=>array(21,-266,473,462),660=>array(25,0,413,689),661=>array(25,0,413,689),662=>array(25,-14,413,675),663=>array(25,-201,430,691),664=>array(35,-19,743,691),665=>array(12,0,484,461),666=>array(29,-13,433,474),667=>array(30,-6,718,614),668=>array(12,0,570,461),669=>array(4,-203,433,691),670=>array(4,-215,531,461),671=>array(12,0,471,461),672=>array(34,-205,660,691),673=>array(25,0,413,689),674=>array(25,0,413,689),675=>array(25,-14,850,676),676=>array(25,-217,853,676),677=>array(25,-98,908,676),678=>array(18,-14,619,630),679=>array(18,-205,619,689),680=>array(18,-102,704,630),681=>array(14,-203,759,691),682=>array(16,-14,611,676),683=>array(16,0,580,676),684=>array(10,1,466,697),685=>array(23,88,465,675),686=>array(-54,-215,593,504),687=>array(-20,-230,713,504),688=>array(11,390,356,841),689=>array(10,390,364,860),690=>array(0,255,213,851),691=>array(19,390,289,705),692=>array(3,381,279,704),693=>array(3,251,337,704),694=>array(8,389,363,703),695=>array(10,381,466,697),696=>array(11,253,320,697),697=>array(12,463,250,760),698=>array(8,463,470,760),699=>array(45,441,204,695),700=>array(45,441,204,695),701=>array(45,441,204,695),702=>array(150,497,267,731),703=>array(33,497,150,731),704=>array(35,490,299,800),705=>array(36,490,300,800),706=>array(33,501,299,715),707=>array(33,501,299,715),708=>array(24,510,309,712),709=>array(24,510,309,712),710=>array(-2,528,335,704),711=>array(-2,528,335,704),712=>array(64,507,136,764),713=>array(1,565,331,637),714=>array(86,528,324,713),715=>array(8,528,246,713),716=>array(64,-300,136,-43),717=>array(1,-137,331,-65),718=>array(46,-229,284,-44),719=>array(38,-234,276,-49),720=>array(60,-1,190,461),721=>array(60,343,190,461),722=>array(150,-275,267,-41),723=>array(33,-273,150,-39),724=>array(32,168,304,360),725=>array(32,168,304,360),726=>array(32,68,304,340),727=>array(31,167,303,239),728=>array(15,528,318,691),729=>array(103,537,232,666),730=>array(67,544,266,743),731=>array(90,-191,319,26),732=>array(-16,547,349,674),733=>array(2,528,331,713),734=>array(64,284,306,462),735=>array(9,527,346,780),736=>array(6,232,333,704),737=>array(11,390,170,841),738=>array(17,381,242,705),739=>array(8,390,323,697),740=>array(17,390,281,859),741=>array(40,0,454,800),742=>array(40,0,454,800),743=>array(40,0,454,800),744=>array(40,0,454,800),745=>array(40,0,454,800),746=>array(72,-1,479,606),747=>array(72,0,479,614),748=>array(-2,-218,335,-42),749=>array(1,564,331,770),750=>array(14,356,468,691),751=>array(24,-222,309,-20),752=>array(24,-219,309,-17),753=>array(34,-236,300,-22),754=>array(33,-231,299,-17),755=>array(64,-254,263,-55),756=>array(8,302,246,487),757=>array(2,302,331,487),758=>array(2,302,331,487),759=>array(17,-164,382,-37),760=>array(82,203,251,688),761=>array(11,511,163,748),762=>array(11,511,163,748),763=>array(12,-72,164,165),764=>array(11,-72,163,165),765=>array(11,-200,322,-20),766=>array(13,-200,324,-28),767=>array(1,-271,421,-36),768=>array(-326,528,-88,713),769=>array(-247,528,-9,713),770=>array(-335,528,2,704),771=>array(-349,536,16,663),772=>array(-330,565,0,637),773=>array(-499,565,-1,637),774=>array(-318,528,-15,691),775=>array(-230,537,-101,666),776=>array(-335,537,4,666),777=>array(-263,527,-90,697),778=>array(-264,505,-65,704),779=>array(-307,528,22,713),780=>array(-335,518,2,694),781=>array(-205,507,-133,764),782=>array(-271,507,-55,764),783=>array(-388,528,-59,713),784=>array(-311,515,-8,746),785=>array(-319,480,-16,643),786=>array(-246,506,-87,760),787=>array(-234,493,-75,747),788=>array(-243,500,-84,754),789=>array(-44,485,115,739),790=>array(-294,-224,-56,-39),791=>array(-290,-225,-52,-40),792=>array(-334,-300,-100,-29),793=>array(-247,-300,-13,-29),794=>array(-67,505,170,742),795=>array(-19,374,157,647),796=>array(-256,-272,-139,-38),797=>array(-332,-233,-60,-41),798=>array(-352,-244,-80,-52),799=>array(-302,-300,-30,-28),800=>array(-302,-200,-30,-128),801=>array(-225,-251,-1,46),802=>array(-103,-251,121,46),803=>array(-268,-185,-139,-56),804=>array(-461,-185,-122,-56),805=>array(-303,-254,-104,-55),806=>array(-278,-298,-119,-54),807=>array(-316,-218,-90,0),808=>array(-286,-157,-47,0),809=>array(-277,-300,-205,-43),810=>array(-363,-225,-52,-45),811=>array(-368,-189,-85,-47),812=>array(-335,-220,2,-44),813=>array(-384,-220,-47,-44),814=>array(-318,-210,-15,-47),815=>array(-366,-210,-63,-47),816=>array(-404,-200,-39,-73),817=>array(-390,-148,-60,-76),818=>array(-500,-155,0,-75),819=>array(-501,-270,0,-58),820=>array(-365,169,0,296),821=>array(-374,184,-96,256),822=>array(-490,187,-10,259),823=>array(-459,92,-47,345),824=>array(-492,-127,-14,583),825=>array(-194,-282,-77,-48),826=>array(-356,-220,-45,-40),827=>array(-341,-300,-78,-37),828=>array(-400,-258,-31,-45),829=>array(-336,497,1,750),830=>array(-236,503,-109,795),831=>array(-501,520,0,732),832=>array(-326,528,-88,713),833=>array(-247,528,-9,713),834=>array(-365,536,0,663),835=>array(-205,501,-20,799),836=>array(-346,530,33,772),837=>array(-228,-200,-58,-47),838=>array(-312,512,-1,692),839=>array(-333,-268,-61,-89),840=>array(-318,-300,-105,-43),841=>array(-270,-218,-126,-74),842=>array(-373,505,-8,696),843=>array(-387,501,-22,850),844=>array(-388,517,-23,785),845=>array(-427,-261,-7,-27),846=>array(-323,-293,-89,-15),848=>array(-320,501,-54,715),849=>array(-284,510,-167,744),850=>array(-312,507,-9,738),851=>array(-425,-299,-88,-46),852=>array(-333,-260,-67,-46),853=>array(-352,-258,-86,-44),854=>array(-534,-264,-14,-50),855=>array(-237,514,-120,748),856=>array(0,537,129,666),857=>array(-312,-258,-120,-46),858=>array(-392,-258,-41,-51),859=>array(-339,500,-101,754),860=>array(-299,-215,293,-46),861=>array(-286,696,306,865),862=>array(-326,693,326,765),863=>array(-323,-138,329,-66),864=>array(-286,549,286,695),865=>array(-296,524,296,693),866=>array(-311,-259,309,-25),867=>array(-315,499,-115,709),868=>array(-293,499,-119,709),869=>array(-237,506,-132,804),870=>array(-338,499,-143,709),871=>array(-315,498,-87,703),872=>array(-319,498,-144,708),873=>array(-323,497,-103,795),874=>array(-304,506,-81,798),875=>array(-384,508,-41,712),876=>array(-258,508,-83,712),877=>array(-269,499,-134,776),878=>array(-330,498,-130,703),879=>array(-324,506,-120,705),884=>array(1,551,164,780),885=>array(37,-220,200,9),890=>array(130,-200,300,-47),894=>array(82,-180,266,472),900=>array(91,546,238,770),901=>array(14,528,393,770),902=>array(20,0,700,704),903=>array(32,258,218,444),904=>array(0,0,805,703),905=>array(2,0,923,698),906=>array(0,0,541,705),908=>array(0,-19,800,702),910=>array(0,0,866,702),911=>array(0,0,826,701),912=>array(-42,-13,337,766),913=>array(20,0,700,690),914=>array(20,0,623,676),915=>array(16,0,583,676),916=>array(13,0,746,690),917=>array(20,0,645,676),918=>array(20,0,626,676),919=>array(25,0,763,676),920=>array(35,-19,743,691),921=>array(24,0,374,676),922=>array(33,0,772,676),923=>array(9,0,689,690),924=>array(18,0,925,676),925=>array(20,-18,705,676),926=>array(58,0,593,673),927=>array(35,-19,743,691),928=>array(24,0,788,676),929=>array(20,0,604,676),931=>array(12,0,621,673),932=>array(20,0,625,676),933=>array(20,0,718,676),934=>array(52,0,816,673),935=>array(20,0,703,676),936=>array(7,0,917,686),937=>array(56,0,756,691),938=>array(24,0,374,866),939=>array(20,0,718,868),940=>array(37,-13,588,770),941=>array(36,-13,431,770),942=>array(9,-231,529,770),943=>array(65,-13,318,770),944=>array(8,-13,497,767),945=>array(37,-13,588,474),946=>array(56,-200,522,679),947=>array(28,-231,523,474),948=>array(38,-13,513,690),949=>array(36,-13,431,474),950=>array(47,-180,476,735),951=>array(9,-231,529,474),952=>array(50,-13,501,696),953=>array(65,-13,318,461),954=>array(17,0,579,486),955=>array(12,-13,486,694),956=>array(49,-215,587,461),957=>array(9,-13,472,474),958=>array(44,-192,460,739),959=>array(37,-13,514,474),960=>array(26,-13,570,498),961=>array(43,-202,508,474),962=>array(40,-192,420,490),963=>array(34,-13,537,474),964=>array(8,-13,423,499),965=>array(8,-13,490,474),966=>array(39,-211,622,474),967=>array(9,-211,486,474),968=>array(9,-211,659,578),969=>array(35,-13,680,474),970=>array(0,-13,318,684),971=>array(8,-13,490,684),972=>array(37,-13,514,731),973=>array(8,-13,490,730),974=>array(35,-13,680,729),976=>array(44,-13,507,727),977=>array(8,-13,592,727),978=>array(17,0,709,676),979=>array(0,0,858,705),980=>array(17,0,709,866),981=>array(44,-211,617,676),982=>array(25,-13,680,547),983=>array(30,-182,521,474),984=>array(16,0,600,676),985=>array(37,-245,514,474),986=>array(16,0,637,690),987=>array(34,-192,506,498),988=>array(16,0,583,676),989=>array(-28,-212,503,498),990=>array(16,-12,699,691),991=>array(33,-192,404,727),992=>array(9,0,689,690),993=>array(12,-202,593,708),994=>array(35,-219,987,692),995=>array(35,-219,680,474),996=>array(35,-181,581,692),997=>array(35,-220,531,475),998=>array(25,-194,581,690),999=>array(35,-9,509,516),1000=>array(35,-119,539,691),1001=>array(35,-81,441,473),1002=>array(22,-71,910,692),1003=>array(12,-55,641,474),1004=>array(35,-10,611,799),1005=>array(35,-7,513,551),1006=>array(22,-181,632,800),1007=>array(22,-220,495,566),1008=>array(30,-13,521,474),1009=>array(43,-240,508,474),1010=>array(37,-13,439,474),1011=>array(0,-203,320,691),1012=>array(35,-19,743,691),1013=>array(40,-20,388,477),1014=>array(40,-20,388,477),1015=>array(20,0,604,676),1016=>array(-4,-206,543,682),1017=>array(49,-19,687,691),1018=>array(16,0,923,676),1019=>array(57,-206,774,474),1020=>array(-46,-212,508,474),1021=>array(49,-19,687,691),1022=>array(49,-19,687,691),1023=>array(49,-19,687,691),1024=>array(29,0,654,900),1025=>array(29,0,654,876),1026=>array(22,-14,804,676),1027=>array(25,0,592,900),1028=>array(60,-19,698,691),1029=>array(50,-19,528,692),1030=>array(29,0,379,676),1031=>array(29,0,379,877),1032=>array(14,-96,490,676),1033=>array(18,-14,1012,676),1034=>array(25,0,1007,676),1035=>array(22,-1,874,676),1036=>array(25,0,753,900),1037=>array(25,0,763,900),1038=>array(10,-14,721,900),1039=>array(25,-200,763,676),1040=>array(23,0,703,690),1041=>array(25,0,609,676),1042=>array(29,0,632,676),1043=>array(25,0,592,676),1044=>array(25,-200,693,676),1045=>array(29,0,654,676),1046=>array(25,0,1079,686),1047=>array(34,-19,604,691),1048=>array(25,0,763,676),1049=>array(25,0,763,900),1050=>array(25,0,753,686),1051=>array(18,-14,768,676),1052=>array(29,0,936,676),1053=>array(29,0,767,676),1054=>array(60,-19,768,691),1055=>array(25,0,789,676),1056=>array(29,0,613,676),1057=>array(46,-19,684,691),1058=>array(11,0,616,676),1059=>array(10,-14,721,676),1060=>array(50,0,814,673),1061=>array(20,0,703,676),1062=>array(25,-200,763,676),1063=>array(25,0,743,676),1064=>array(25,0,1104,676),1065=>array(25,-200,1104,676),1066=>array(22,0,744,676),1067=>array(25,0,959,676),1068=>array(25,0,609,676),1069=>array(49,-19,687,691),1070=>array(25,-19,1076,691),1071=>array(11,0,709,676),1072=>array(50,-14,513,473),1073=>array(60,-14,507,711),1074=>array(26,0,495,461),1075=>array(26,0,420,461),1076=>array(19,-142,546,461),1077=>array(60,-14,461,473),1078=>array(26,0,779,470),1079=>array(30,-14,445,473),1080=>array(26,0,546,461),1081=>array(26,0,546,693),1082=>array(26,0,550,470),1083=>array(4,-7,525,461),1084=>array(26,-14,656,461),1085=>array(26,0,546,461),1086=>array(60,-14,511,473),1087=>array(26,0,546,461),1088=>array(22,-205,527,473),1089=>array(60,-14,465,473),1090=>array(19,0,482,461),1091=>array(9,-205,473,461),1092=>array(60,-205,819,683),1093=>array(21,0,493,461),1094=>array(26,-142,547,461),1095=>array(26,0,538,461),1096=>array(26,0,807,461),1097=>array(26,-142,808,461),1098=>array(19,0,597,461),1099=>array(26,0,738,461),1100=>array(26,0,495,461),1101=>array(30,-14,479,473),1102=>array(26,-14,750,473),1103=>array(16,0,537,461),1104=>array(60,-14,461,713),1105=>array(60,-14,461,666),1106=>array(26,-203,532,676),1107=>array(26,0,420,713),1108=>array(60,-14,509,473),1109=>array(60,-14,396,473),1110=>array(34,0,275,691),1111=>array(-20,0,319,666),1112=>array(0,-203,320,691),1113=>array(7,-7,762,461),1114=>array(26,0,774,461),1115=>array(26,0,544,676),1116=>array(26,0,550,713),1117=>array(26,0,546,713),1118=>array(9,-205,473,693),1119=>array(26,-142,546,461),1120=>array(60,-19,1006,691),1121=>array(60,-13,709,474),1122=>array(25,0,746,676),1123=>array(20,0,598,683),1124=>array(16,-19,998,691),1125=>array(29,-14,750,473),1126=>array(10,0,961,690),1127=>array(12,0,675,461),1128=>array(25,0,1347,690),1129=>array(25,0,955,461),1130=>array(16,0,1070,676),1131=>array(14,0,768,461),1132=>array(25,0,1450,676),1133=>array(25,0,1046,461),1134=>array(50,-212,600,872),1135=>array(36,-192,412,609),1136=>array(25,0,954,673),1137=>array(25,-206,759,676),1138=>array(60,-19,768,691),1139=>array(60,-14,601,473),1140=>array(16,-18,788,686),1141=>array(21,-14,572,471),1142=>array(16,-18,788,900),1143=>array(21,-14,572,710),1144=>array(60,-205,1205,691),1145=>array(57,-205,953,473),1146=>array(60,-81,932,753),1147=>array(60,-62,684,524),1148=>array(60,-19,1006,900),1149=>array(60,-13,709,725),1150=>array(60,-19,1006,862),1151=>array(60,-13,709,664),1152=>array(50,0,671,690),1153=>array(60,-171,451,473),1154=>array(-16,-212,246,151),1155=>array(-355,528,-10,687),1156=>array(-446,508,0,687),1157=>array(-329,511,-141,750),1158=>array(-287,511,-99,750),1159=>array(-601,535,54,715),1160=>array(-758,-134,275,869),1161=>array(-796,-262,366,900),1162=>array(25,-161,763,900),1163=>array(25,-161,545,697),1164=>array(25,0,609,676),1165=>array(25,0,498,461),1166=>array(25,0,609,676),1167=>array(24,-205,530,473),1168=>array(25,0,592,842),1169=>array(25,0,434,571),1170=>array(10,0,593,676),1171=>array(5,0,420,461),1172=>array(25,-218,606,676),1173=>array(26,-203,535,461),1174=>array(26,-200,1136,686),1175=>array(26,-142,824,470),1176=>array(50,-212,620,691),1177=>array(30,-170,445,473),1178=>array(25,-200,808,686),1179=>array(25,-142,588,470),1180=>array(25,0,799,686),1181=>array(25,0,581,470),1182=>array(22,0,885,686),1183=>array(22,0,660,470),1184=>array(22,0,858,685),1185=>array(19,0,620,470),1186=>array(25,-200,763,676),1187=>array(25,-142,550,461),1188=>array(25,0,961,676),1189=>array(25,0,674,461),1190=>array(25,-218,1036,676),1191=>array(26,-203,814,461),1192=>array(60,-14,853,676),1193=>array(50,-10,616,460),1194=>array(60,-212,698,691),1195=>array(60,-170,465,473),1196=>array(22,-200,627,676),1197=>array(19,-142,482,461),1198=>array(10,0,694,676),1199=>array(15,-205,594,461),1200=>array(15,0,699,676),1201=>array(15,-205,594,461),1202=>array(16,-200,765,676),1203=>array(16,-142,548,461),1204=>array(22,-167,1018,676),1205=>array(19,-110,766,461),1206=>array(25,-200,743,676),1207=>array(26,-142,543,461),1208=>array(25,0,799,676),1209=>array(26,0,572,461),1210=>array(25,0,743,676),1211=>array(28,0,546,676),1212=>array(15,-19,910,691),1213=>array(12,-13,587,474),1214=>array(15,-128,910,691),1215=>array(12,-128,587,474),1216=>array(29,0,379,676),1217=>array(25,0,1079,900),1218=>array(26,0,779,692),1219=>array(25,-236,717,686),1220=>array(26,-203,541,470),1221=>array(18,-161,768,676),1222=>array(4,-161,525,461),1223=>array(25,-236,763,676),1224=>array(26,-203,544,461),1225=>array(25,-161,763,676),1226=>array(26,-161,546,461),1227=>array(25,-167,743,676),1228=>array(26,-110,538,461),1229=>array(25,-161,932,676),1230=>array(26,-161,656,461),1231=>array(29,0,379,676),1232=>array(23,0,703,900),1233=>array(50,-14,513,693),1234=>array(23,0,703,876),1235=>array(50,-14,513,666),1236=>array(41,0,988,676),1237=>array(50,-14,710,473),1238=>array(29,0,654,900),1239=>array(60,-14,461,691),1240=>array(60,-19,768,691),1241=>array(44,-13,445,474),1242=>array(35,-19,743,876),1243=>array(44,-13,445,666),1244=>array(25,0,1079,876),1245=>array(26,0,779,666),1246=>array(34,-19,604,876),1247=>array(30,-14,445,666),1248=>array(18,-17,603,676),1249=>array(30,-14,422,471),1250=>array(25,0,763,847),1251=>array(26,0,546,637),1252=>array(25,0,763,876),1253=>array(26,0,546,666),1254=>array(60,-19,768,876),1255=>array(60,-14,511,666),1256=>array(60,-19,768,691),1257=>array(60,-14,511,473),1258=>array(35,-19,743,876),1259=>array(60,-14,511,666),1260=>array(49,-19,687,876),1261=>array(30,-14,479,666),1262=>array(10,-14,721,847),1263=>array(9,-205,473,637),1264=>array(10,-14,721,876),1265=>array(9,-205,473,666),1266=>array(10,-14,721,900),1267=>array(9,-205,473,713),1268=>array(25,0,743,876),1269=>array(26,0,538,666),1270=>array(24,-200,602,676),1271=>array(26,-142,416,461),1272=>array(25,0,959,863),1273=>array(26,0,738,640),1281=>array(23,-14,532,676),1296=>array(50,-19,620,691),1297=>array(50,-14,465,473),1298=>array(18,-236,768,676),1299=>array(4,-203,525,461),1306=>array(60,-176,768,691),1307=>array(60,-205,562,473),1308=>array(7,-15,969,676),1309=>array(2,-14,686,461),1310=>array(25,0,753,686),1311=>array(26,0,550,470),1329=>array(15,-41,879,662),1330=>array(15,0,777,676),1331=>array(30,0,848,676),1332=>array(15,0,931,676),1333=>array(15,-14,765,662),1334=>array(30,-87,755,674),1335=>array(15,-87,790,662),1336=>array(80,-87,752,676),1337=>array(15,0,923,676),1338=>array(30,-14,859,662),1339=>array(15,0,750,676),1340=>array(15,-87,746,662),1341=>array(15,0,951,662),1342=>array(10,-19,982,691),1343=>array(15,0,733,662),1344=>array(10,-61,454,662),1345=>array(40,-24,701,674),1346=>array(15,-87,931,676),1347=>array(40,-14,730,675),1348=>array(15,-14,951,662),1349=>array(40,-15,611,691),1350=>array(10,-14,914,749),1351=>array(30,-16,744,678),1352=>array(15,0,764,676),1353=>array(40,-148,754,678),1354=>array(20,0,826,676),1355=>array(30,-87,765,674),1356=>array(15,0,945,676),1357=>array(15,-14,764,662),1358=>array(15,-87,917,662),1359=>array(40,-14,525,677),1360=>array(15,0,748,676),1361=>array(40,-15,611,676),1362=>array(15,0,641,662),1363=>array(30,0,794,664),1364=>array(10,0,859,676),1365=>array(30,-14,738,676),1366=>array(30,-15,724,662),1369=>array(33,491,150,725),1370=>array(150,497,267,731),1371=>array(12,463,250,760),1372=>array(40,389,267,662),1373=>array(15,463,253,760),1374=>array(-20,496,284,676),1375=>array(-18,530,282,683),1377=>array(15,-14,803,461),1378=>array(15,-200,533,473),1379=>array(30,-200,591,473),1380=>array(15,-200,598,473),1381=>array(15,-14,536,676),1382=>array(30,-200,532,473),1383=>array(15,-87,486,676),1384=>array(15,-200,533,473),1385=>array(15,-200,576,473),1386=>array(30,-14,575,676),1387=>array(15,-200,533,676),1388=>array(15,-200,254,461),1389=>array(15,-200,783,676),1390=>array(30,-10,584,690),1391=>array(15,-200,529,676),1392=>array(15,0,533,676),1393=>array(30,-13,498,665),1394=>array(15,-200,568,473),1395=>array(30,-13,545,669),1396=>array(15,-14,536,662),1397=>array(0,-200,317,461),1398=>array(80,-14,552,676),1399=>array(15,-200,417,461),1400=>array(15,0,533,473),1401=>array(15,-200,396,464),1402=>array(15,-200,795,461),1403=>array(30,-200,434,461),1404=>array(15,0,533,473),1405=>array(15,-14,536,461),1406=>array(15,-200,580,676),1407=>array(15,-14,806,473),1408=>array(15,-200,533,473),1409=>array(30,-200,477,473),1410=>array(15,0,297,461),1411=>array(15,-200,806,676),1412=>array(15,-200,520,473),1413=>array(30,-14,481,473),1414=>array(30,-200,638,670),1415=>array(15,-14,587,676),1417=>array(82,-13,251,472),1418=>array(23,144,326,326),1423=>array(15,0,788,676),1425=>array(209,-235,393,-45),1426=>array(184,665,394,855),1427=>array(20,665,177,900),1428=>array(267,665,343,855),1429=>array(219,665,395,855),1430=>array(214,-265,350,-45),1431=>array(231,665,371,845),1432=>array(134,665,424,820),1433=>array(-85,665,51,885),1434=>array(445,-235,663,-55),1435=>array(167,-265,337,-45),1436=>array(264,665,400,885),1437=>array(511,665,647,885),1438=>array(176,665,432,885),1439=>array(-53,666,376,886),1440=>array(315,666,499,886),1441=>array(-89,668,89,852),1442=>array(209,-235,393,-45),1443=>array(85,-220,315,-45),1444=>array(84,-235,302,-55),1445=>array(133,-265,269,-45),1446=>array(108,-265,342,-45),1447=>array(215,-264,371,-55),1448=>array(162,665,298,885),1449=>array(-93,666,91,886),1450=>array(209,-235,393,-45),1451=>array(73,664,291,844),1452=>array(74,665,304,840),1453=>array(354,-265,490,-45),1454=>array(-254,665,36,820),1455=>array(209,665,387,843),1456=>array(262,-236,338,-45),1457=>array(93,-235,433,-45),1458=>array(77,-235,421,-45),1459=>array(81,-235,419,-45),1460=>array(262,-120,338,-45),1461=>array(203,-120,394,-45),1462=>array(174,-235,386,-45),1463=>array(183,-110,433,-55),1464=>array(181,-235,411,-55),1465=>array(0,645,76,720),1466=>array(0,628,106,734),1467=>array(155,-235,442,-45),1468=>array(-42,258,42,342),1469=>array(230,-230,286,-45),1470=>array(36,440,399,600),1471=>array(85,654,304,709),1472=>array(50,-15,105,660),1473=>array(439,630,515,705),1474=>array(134,630,210,705),1475=>array(100,50,300,620),1476=>array(175,630,251,705),1477=>array(247,-145,353,-39),1478=>array(32,0,341,644),1479=>array(171,-272,421,-55),1488=>array(41,0,554,644),1489=>array(21,0,495,645),1490=>array(9,-1,317,644),1491=>array(32,-5,485,645),1492=>array(40,-5,521,645),1493=>array(31,-5,223,644),1494=>array(31,-7,258,644),1495=>array(39,-5,519,645),1496=>array(33,0,557,644),1497=>array(29,301,235,645),1498=>array(32,-285,458,645),1499=>array(18,0,480,645),1500=>array(33,-5,477,899),1501=>array(43,0,498,645),1502=>array(39,0,568,637),1503=>array(32,-280,237,644),1504=>array(6,0,315,644),1505=>array(45,0,490,645),1506=>array(30,-222,520,644),1507=>array(38,-280,468,645),1508=>array(16,0,468,644),1509=>array(32,-280,504,646),1510=>array(36,0,523,645),1511=>array(44,-300,524,645),1512=>array(32,-5,472,645),1513=>array(33,0,683,645),1514=>array(8,-5,540,645),1520=>array(31,-5,489,644),1521=>array(29,-5,489,645),1522=>array(0,301,472,645),1523=>array(107,475,322,752),1524=>array(31,475,421,752),1536=>array(20,-80,588,158),1537=>array(10,-164,1000,1),1538=>array(30,-82,770,152),1539=>array(80,-158,768,108),1542=>array(0,-65,525,900),1543=>array(0,-65,525,900),1544=>array(26,-210,704,267),1545=>array(40,-19,549,691),1546=>array(40,-19,689,691),1547=>array(75,-260,635,661),1548=>array(45,-10,201,219),1549=>array(27,-133,301,92),1550=>array(42,1,598,177),1551=>array(52,-300,581,436),1552=>array(30,744,270,900),1553=>array(32,694,258,900),1554=>array(30,662,385,891),1555=>array(30,627,355,900),1556=>array(34,760,316,850),1557=>array(21,642,250,900),1558=>array(20,621,346,897),1559=>array(53,605,195,896),1560=>array(93,717,250,822),1561=>array(50,675,206,875),1562=>array(87,-284,244,-179),1563=>array(82,-13,266,555),1566=>array(92,1,367,231),1567=>array(67,-13,455,689),1568=>array(75,-300,722,330),1569=>array(86,-79,333,292),1570=>array(0,-61,282,824),1571=>array(53,-61,217,900),1572=>array(3,-270,329,559),1573=>array(86,-300,250,696),1574=>array(75,-166,722,533),1575=>array(109,-61,214,696),1576=>array(75,-217,899,360),1577=>array(67,0,394,610),1578=>array(75,0,897,490),1579=>array(75,0,897,563),1580=>array(75,-260,655,449),1581=>array(75,-260,655,449),1582=>array(75,-260,655,640),1583=>array(75,0,418,399),1584=>array(75,0,418,631),1585=>array(0,-247,355,268),1586=>array(0,-247,355,478),1587=>array(74,-241,911,244),1588=>array(74,-241,911,503),1589=>array(75,-242,909,260),1590=>array(75,-242,909,460),1591=>array(0,0,568,711),1592=>array(0,0,568,711),1593=>array(75,-300,595,436),1594=>array(75,-300,595,610),1595=>array(74,0,901,701),1596=>array(74,-284,901,701),1597=>array(75,-166,722,592),1598=>array(75,-166,722,440),1599=>array(75,-166,722,543),1600=>array(-5,0,413,110),1601=>array(75,0,868,600),1602=>array(75,-170,635,510),1603=>array(-5,0,456,675),1604=>array(75,-240,601,688),1605=>array(75,-298,489,451),1606=>array(74,-194,601,498),1607=>array(67,0,394,403),1608=>array(3,-270,329,269),1609=>array(75,-166,722,330),1610=>array(75,-300,722,330),1611=>array(74,674,269,895),1612=>array(72,666,316,900),1613=>array(44,-300,239,-79),1614=>array(74,704,269,835),1615=>array(31,651,225,900),1616=>array(74,-296,269,-165),1617=>array(75,721,259,880),1618=>array(106,693,246,850),1619=>array(12,721,294,824),1620=>array(86,654,250,900),1621=>array(69,-282,233,-36),1622=>array(131,-269,209,-56),1623=>array(81,641,275,890),1624=>array(69,661,305,900),1625=>array(-124,788,116,854),1626=>array(65,697,224,842),1627=>array(55,687,214,832),1628=>array(110,-181,228,-71),1629=>array(31,651,225,900),1630=>array(74,686,269,872),1631=>array(0,-290,261,-58),1632=>array(121,57,378,350),1633=>array(132,-14,339,627),1634=>array(62,-14,442,652),1635=>array(24,-14,473,649),1636=>array(70,-14,461,627),1637=>array(42,-15,458,589),1638=>array(13,-14,489,648),1639=>array(53,-12,447,614),1640=>array(43,-18,456,647),1641=>array(77,-16,450,635),1642=>array(40,-19,409,691),1643=>array(20,-109,195,146),1644=>array(50,384,185,622),1645=>array(14,278,473,687),1646=>array(75,0,899,360),1647=>array(75,-170,635,304),1648=>array(111,658,189,871),1649=>array(0,-61,296,864),1650=>array(0,-61,261,900),1651=>array(0,-290,261,696),1652=>array(76,611,240,857),1653=>array(100,-61,336,857),1654=>array(3,-270,464,520),1655=>array(3,-270,461,581),1656=>array(75,-166,722,587),1657=>array(75,0,897,617),1658=>array(75,0,897,584),1659=>array(75,-291,897,351),1660=>array(75,-135,897,481),1661=>array(75,0,897,556),1662=>array(75,-284,899,360),1663=>array(75,0,897,628),1664=>array(75,-300,897,351),1665=>array(75,-260,655,709),1666=>array(75,-260,655,714),1667=>array(75,-260,655,449),1668=>array(75,-260,655,449),1669=>array(75,-261,655,713),1670=>array(75,-260,655,449),1671=>array(75,-260,655,449),1672=>array(75,0,418,747),1673=>array(75,-139,418,400),1674=>array(75,-217,418,399),1675=>array(75,-217,418,747),1676=>array(75,0,418,650),1677=>array(75,-207,418,399),1678=>array(75,0,418,713),1679=>array(75,0,418,686),1680=>array(18,0,418,758),1681=>array(0,-247,358,637),1682=>array(0,-247,355,512),1683=>array(0,-291,355,268),1684=>array(0,-297,381,268),1685=>array(0,-247,510,268),1686=>array(0,-300,358,268),1687=>array(0,-247,355,470),1688=>array(0,-247,355,583),1689=>array(0,-247,357,577),1690=>array(74,-241,911,390),1691=>array(74,-284,911,246),1692=>array(74,-284,911,503),1693=>array(75,-242,909,260),1694=>array(75,-242,909,533),1695=>array(0,0,568,711),1696=>array(75,-300,595,703),1697=>array(75,0,868,410),1698=>array(75,-217,868,410),1699=>array(75,-217,868,645),1700=>array(75,0,868,693),1701=>array(75,-284,868,410),1702=>array(75,0,868,746),1703=>array(75,-170,635,521),1704=>array(75,-170,635,603),1705=>array(74,0,901,701),1706=>array(0,1,1134,685),1707=>array(74,0,901,701),1708=>array(-5,0,456,777),1709=>array(-5,0,456,900),1710=>array(-5,-284,456,675),1711=>array(74,0,901,819),1712=>array(74,0,901,819),1713=>array(74,0,901,819),1714=>array(74,-227,901,819),1715=>array(74,-291,901,819),1716=>array(74,0,901,819),1717=>array(75,-240,601,832),1718=>array(75,-240,601,800),1719=>array(75,-240,601,846),1720=>array(75,-300,601,688),1721=>array(74,-290,601,498),1722=>array(74,-194,601,358),1723=>array(74,-194,601,657),1724=>array(75,-300,601,491),1725=>array(74,-194,601,613),1726=>array(-21,0,417,398),1727=>array(75,-260,655,650),1728=>array(75,-10,364,559),1729=>array(75,-52,399,142),1730=>array(75,-52,399,439),1731=>array(75,-52,399,380),1732=>array(3,-270,329,269),1733=>array(3,-270,329,269),1734=>array(3,-270,329,532),1735=>array(3,-270,329,581),1736=>array(3,-270,329,557),1737=>array(3,-270,329,502),1738=>array(3,-270,329,510),1739=>array(3,-270,329,583),1740=>array(75,-166,722,330),1741=>array(19,-166,762,330),1742=>array(75,-166,722,452),1743=>array(3,-270,329,491),1744=>array(75,-300,736,330),1745=>array(75,-300,722,330),1746=>array(75,-170,752,280),1747=>array(65,-170,752,459),1748=>array(75,-12,355,105),1749=>array(75,-10,364,313),1750=>array(60,580,498,900),1751=>array(61,580,387,900),1752=>array(1,732,226,874),1753=>array(40,552,266,900),1754=>array(80,545,370,900),1755=>array(43,730,226,883),1756=>array(37,656,456,899),1757=>array(0,-126,1132,797),1758=>array(9,-144,961,808),1759=>array(42,613,216,900),1760=>array(73,715,187,891),1761=>array(54,735,305,858),1762=>array(48,565,256,900),1763=>array(18,-300,438,-57),1764=>array(70,748,257,817),1765=>array(84,203,248,473),1766=>array(40,23,380,249),1767=>array(40,589,380,815),1768=>array(15,616,280,900),1769=>array(7,-107,754,800),1770=>array(74,-288,291,-43),1771=>array(74,655,291,900),1772=>array(41,731,210,900),1773=>array(7,-289,153,-26),1774=>array(75,0,418,652),1775=>array(0,-247,355,502),1776=>array(121,57,378,350),1777=>array(132,-14,339,627),1778=>array(62,-14,442,652),1779=>array(24,-14,473,649),1780=>array(56,-17,448,626),1781=>array(42,-15,458,618),1782=>array(75,-28,418,625),1783=>array(53,-12,447,614),1784=>array(43,-18,456,647),1785=>array(77,-16,450,635),1786=>array(74,-241,911,503),1787=>array(75,-242,909,460),1788=>array(75,-300,595,610),1789=>array(76,91,269,537),1790=>array(13,91,269,473),1791=>array(-21,0,417,562),1872=>array(75,-217,897,351),1873=>array(75,-217,897,553),1874=>array(75,-277,897,351),1875=>array(75,-277,897,450),1876=>array(75,-227,897,470),1877=>array(75,-195,897,351),1878=>array(75,0,897,472),1879=>array(75,-260,655,620),1880=>array(75,-260,655,449),1881=>array(75,-291,418,735),1882=>array(75,-213,418,399),1883=>array(0,-247,418,268),1884=>array(74,-241,911,564),1885=>array(75,-300,595,620),1886=>array(75,-300,595,686),1887=>array(75,-300,595,704),1888=>array(75,-227,868,410),1889=>array(75,-277,868,410),1890=>array(74,0,901,701),1891=>array(74,0,901,793),1892=>array(74,-277,901,701),1893=>array(75,-298,489,660),1894=>array(75,-298,489,451),1895=>array(74,-300,601,498),1896=>array(74,-194,601,785),1897=>array(74,-194,601,692),1898=>array(75,-240,658,688),1899=>array(0,-247,355,580),1900=>array(0,-247,355,537),1901=>array(74,-241,911,524),1902=>array(75,-260,655,449),1903=>array(75,-260,655,449),1904=>array(74,-241,911,697),1905=>array(0,-247,355,783),1906=>array(75,-260,655,747),1907=>array(0,-61,214,900),1908=>array(-12,-61,214,900),1909=>array(75,-166,722,478),1910=>array(75,-166,722,476),1911=>array(75,-300,782,330),1912=>array(-23,-270,329,516),1913=>array(-35,-270,329,516),1914=>array(75,-170,752,596),1915=>array(75,-170,752,593),1916=>array(75,-260,655,449),1917=>array(74,-241,911,561),1918=>array(74,-241,911,472),1919=>array(-23,0,456,718),1920=>array(-33,102,421,361),1921=>array(-112,39,481,367),1922=>array(-124,43,577,359),1923=>array(-45,40,532,390),1924=>array(23,94,466,353),1925=>array(-15,16,415,358),1926=>array(84,124,458,363),1927=>array(0,56,438,344),1928=>array(-4,-6,440,342),1929=>array(16,44,445,358),1930=>array(-50,-54,420,416),1931=>array(-80,-41,504,381),1932=>array(-4,-13,466,342),1933=>array(-57,-17,503,367),1934=>array(28,94,454,365),1935=>array(-1,-6,541,352),1936=>array(11,129,872,353),1937=>array(118,48,410,357),1938=>array(22,-54,500,365),1939=>array(50,-64,531,378),1940=>array(-74,31,481,347),1941=>array(-50,-54,422,416),1942=>array(40,-80,449,357),1943=>array(16,-21,673,533),1944=>array(-4,-49,466,495),1945=>array(-28,102,426,361),1946=>array(-57,93,397,484),1947=>array(-80,-40,504,511),1948=>array(-45,40,532,483),1949=>array(11,129,872,499),1950=>array(11,79,872,353),1951=>array(22,244,887,488),1952=>array(-4,-13,466,342),1953=>array(-4,-13,466,466),1954=>array(0,16,438,344),1955=>array(0,56,438,475),1956=>array(28,94,454,522),1957=>array(6,-6,449,484),1958=>array(243,517,543,727),1959=>array(180,507,543,829),1960=>array(169,-285,517,-54),1961=>array(152,-300,533,-6),1962=>array(217,509,504,764),1963=>array(50,511,609,764),1964=>array(275,509,532,781),1965=>array(90,518,591,755),1966=>array(98,516,583,785),1967=>array(190,509,611,885),1968=>array(249,523,524,769),1969=>array(40,-80,409,342),2304=>array(-470,660,-105,900),2305=>array(-470,658,-105,898),2306=>array(-308,699,-170,838),2307=>array(94,-32,305,518),2308=>array(-3,-52,904,870),2309=>array(-3,-52,904,622),2310=>array(-3,-52,1134,622),2311=>array(-42,-134,607,622),2312=>array(-42,-134,617,900),2313=>array(-42,-3,639,622),2314=>array(-42,-3,890,622),2315=>array(-42,-72,1010,622),2316=>array(-42,-140,870,622),2317=>array(-42,-294,697,893),2318=>array(-42,-294,697,870),2319=>array(-42,-294,697,622),2320=>array(-42,-294,697,900),2321=>array(-3,-52,1134,893),2322=>array(-3,-52,1134,870),2323=>array(-3,-52,1134,900),2324=>array(-3,-52,1134,900),2325=>array(-42,-52,786,622),2326=>array(-42,-52,840,622),2327=>array(-42,-52,737,622),2328=>array(-42,-52,737,622),2329=>array(-42,29,815,622),2330=>array(-42,-52,777,622),2331=>array(-42,-166,930,622),2332=>array(-42,-52,856,622),2333=>array(-42,-134,876,622),2334=>array(-42,-52,777,622),2335=>array(-42,4,671,622),2336=>array(-42,4,671,622),2337=>array(-42,29,716,622),2338=>array(-42,-3,651,622),2339=>array(-42,-52,737,622),2340=>array(-42,-52,697,622),2341=>array(-12,-52,737,622),2342=>array(-42,0,631,622),2343=>array(-3,-52,737,622),2344=>array(-42,-52,697,622),2345=>array(-42,-52,697,622),2346=>array(-42,-52,657,622),2347=>array(-42,-52,831,622),2348=>array(-42,-52,664,622),2349=>array(-52,-52,737,622),2350=>array(-42,-52,737,622),2351=>array(-42,-52,737,622),2352=>array(-42,-52,537,622),2353=>array(-42,-52,537,622),2354=>array(-42,-52,830,622),2355=>array(-42,-3,890,622),2356=>array(-42,-130,890,622),2357=>array(-42,-52,664,622),2358=>array(-42,-52,830,622),2359=>array(-42,-52,657,622),2360=>array(-42,-52,777,622),2361=>array(-42,-223,651,622),2362=>array(41,623,129,802),2363=>array(-42,-52,384,802),2364=>array(-190,-20,-52,119),2365=>array(90,-52,612,624),2366=>array(-42,-52,384,622),2367=>array(-42,-52,548,900),2368=>array(-407,-52,384,888),2369=>array(-477,-300,0,-34),2370=>array(-438,-300,0,-4),2371=>array(-348,-300,-12,-35),2372=>array(-338,-300,40,100),2373=>array(-365,672,0,893),2374=>array(-539,625,-115,870),2375=>array(-592,609,-129,900),2376=>array(-572,581,-109,900),2377=>array(-135,-52,384,893),2378=>array(-309,-52,384,870),2379=>array(-326,-52,384,900),2380=>array(-322,-52,384,900),2381=>array(-335,-263,0,-44),2382=>array(133,-52,484,622),2383=>array(-369,-52,384,870),2384=>array(-3,-52,888,695),2385=>array(-265,613,-136,900),2386=>array(-400,-130,0,-70),2387=>array(-372,655,-134,840),2388=>array(-238,655,0,840),2389=>array(-400,605,0,900),2390=>array(-444,-156,2,-48),2391=>array(-444,-300,2,-48),2392=>array(-42,-70,786,622),2393=>array(-42,-68,840,622),2394=>array(-42,-52,737,622),2395=>array(-42,-52,906,622),2396=>array(-42,-150,716,622),2397=>array(-42,-194,651,622),2398=>array(-42,-52,831,622),2399=>array(-42,-52,737,622),2400=>array(-42,-225,1010,622),2401=>array(-42,-304,870,622),2402=>array(-408,-296,88,39),2403=>array(-408,-300,113,138),2404=>array(300,-52,405,622),2405=>array(300,-52,655,622),2406=>array(-3,90,386,479),2407=>array(0,-240,304,622),2408=>array(0,-166,454,579),2409=>array(0,-166,394,593),2410=>array(0,61,587,622),2411=>array(-16,-109,517,622),2412=>array(0,-166,454,626),2413=>array(0,-3,587,622),2414=>array(-39,-52,494,508),2415=>array(0,-167,501,622),2416=>array(160,252,466,559),2417=>array(129,400,271,542),2418=>array(-3,-52,904,893),2419=>array(-3,-52,904,802),2420=>array(-3,-52,1134,802),2421=>array(-3,-52,1134,870),2422=>array(-3,-156,904,622),2423=>array(-3,-300,904,622),2425=>array(-42,-185,856,622),2426=>array(-42,-52,737,622),2427=>array(-42,-105,697,622),2428=>array(-42,-105,856,622),2429=>array(10,1,524,622),2430=>array(-42,-105,716,622),2431=>array(-42,-105,664,622),2561=>array(-188,629,155,885),2562=>array(-138,667,0,805),2563=>array(39,-74,347,544),2565=>array(-20,-57,837,590),2566=>array(-20,-57,1038,590),2567=>array(-57,-56,845,856),2568=>array(-57,-56,916,856),2569=>array(-68,-143,616,860),2570=>array(-68,-273,616,860),2575=>array(-97,-3,645,846),2576=>array(-20,-57,837,873),2579=>array(-68,-20,616,911),2580=>array(-20,-57,837,856),2581=>array(-57,-20,595,590),2582=>array(-57,-57,707,600),2583=>array(-57,-57,707,590),2584=>array(-57,-57,837,600),2585=>array(-57,-133,645,590),2586=>array(-57,-20,645,590),2587=>array(-57,-20,756,590),2588=>array(-57,-56,706,590),2589=>array(-57,-133,645,590),2590=>array(-56,-6,645,590),2591=>array(-57,-3,645,590),2592=>array(-57,-3,645,590),2593=>array(-57,-49,616,590),2594=>array(-57,-20,645,590),2595=>array(-57,-34,645,590),2596=>array(-57,-20,616,590),2597=>array(-57,-57,706,590),2598=>array(-57,-4,645,590),2599=>array(-57,-57,707,590),2600=>array(-57,-20,683,590),2602=>array(-20,-57,707,590),2603=>array(-57,-20,627,590),2604=>array(-57,-57,707,590),2605=>array(-57,-20,616,590),2606=>array(-57,-57,707,590),2607=>array(-57,-57,837,590),2608=>array(-77,-61,547,590),2610=>array(-57,-20,683,590),2611=>array(-57,-131,683,590),2613=>array(-57,-5,645,590),2614=>array(-57,-57,707,590),2616=>array(-57,-57,707,590),2617=>array(-69,-48,547,590),2620=>array(-379,-29,-247,103),2622=>array(-57,157,376,590),2623=>array(-57,-57,456,856),2624=>array(-369,-57,376,856),2625=>array(-503,-143,-130,-13),2626=>array(-503,-273,-130,-13),2631=>array(-507,596,-78,846),2632=>array(-517,597,-90,873),2635=>array(-517,559,-112,846),2636=>array(-457,486,-52,846),2637=>array(-167,-207,143,-7),2641=>array(-226,-168,60,10),2649=>array(-57,-57,707,600),2650=>array(-57,-59,707,590),2651=>array(-57,-79,706,590),2652=>array(-57,-133,616,590),2654=>array(-57,-59,627,590),2662=>array(-20,77,360,456),2663=>array(51,-94,290,590),2664=>array(-20,-57,430,556),2665=>array(-20,-57,374,574),2666=>array(-20,50,554,590),2667=>array(-19,-57,385,590),2668=>array(-20,-31,394,696),2669=>array(-20,16,430,581),2670=>array(36,-4,486,463),2671=>array(36,-4,486,590),2672=>array(-410,620,-110,816),2673=>array(-334,629,9,837),2674=>array(-57,-3,645,590),2675=>array(-68,-20,616,860),2676=>array(51,-94,1016,920),2677=>array(-236,-210,-87,-13),3458=>array(25,166,229,369),3459=>array(25,46,229,500),3461=>array(25,-300,601,561),3462=>array(25,-300,907,561),3463=>array(25,-300,908,561),3464=>array(20,-300,907,561),3465=>array(25,-195,601,550),3466=>array(25,-15,624,848),3467=>array(25,-267,758,502),3468=>array(25,-267,1099,502),3469=>array(25,-15,1004,550),3470=>array(10,-15,1301,550),3471=>array(25,-15,1025,650),3472=>array(15,-15,1462,650),3473=>array(25,-15,652,772),3474=>array(10,-15,746,853),3475=>array(25,-15,1313,772),3476=>array(25,-15,716,741),3477=>array(25,-15,716,739),3478=>array(25,-16,1170,741),3482=>array(25,-15,869,550),3483=>array(25,-31,690,741),3484=>array(25,-15,690,550),3485=>array(25,-15,694,560),3486=>array(25,-15,716,741),3487=>array(25,-15,809,560),3488=>array(25,-15,694,741),3489=>array(26,-15,677,750),3490=>array(21,-15,677,745),3491=>array(25,-15,1277,741),3492=>array(25,-289,1002,550),3493=>array(25,-289,917,550),3494=>array(25,-15,681,745),3495=>array(25,-15,694,741),3496=>array(25,-15,652,772),3497=>array(25,-15,716,741),3498=>array(25,-15,652,770),3499=>array(5,-15,1098,701),3500=>array(26,-15,716,742),3501=>array(25,-15,754,550),3502=>array(25,-15,652,772),3503=>array(25,-289,441,550),3504=>array(25,-15,716,741),3505=>array(2,-15,896,550),3507=>array(25,-289,441,550),3508=>array(25,-15,652,550),3509=>array(25,-15,652,772),3510=>array(25,-15,690,741),3511=>array(25,-15,762,560),3512=>array(25,-15,694,741),3513=>array(25,-15,716,741),3514=>array(25,-15,694,550),3515=>array(7,-15,604,763),3517=>array(25,-267,758,480),3520=>array(25,-15,694,741),3521=>array(25,-15,690,550),3522=>array(25,-15,652,550),3523=>array(25,-15,694,560),3524=>array(25,-15,762,550),3525=>array(25,-267,758,480),3526=>array(25,-15,652,550),3530=>array(-195,465,15,855),3535=>array(5,28,304,506),3536=>array(30,-185,319,391),3537=>array(30,-185,319,391),3538=>array(-609,500,-42,838),3539=>array(-587,500,-20,838),3540=>array(-696,-300,-25,0),3542=>array(-696,-300,-25,0),3544=>array(5,28,304,506),3545=>array(25,-15,686,550),3546=>array(25,-15,1062,855),3547=>array(5,-15,1328,550),3548=>array(25,-15,1253,550),3549=>array(25,-15,1235,854),3550=>array(25,-15,1272,550),3551=>array(10,28,441,506),3570=>array(10,28,639,506),3571=>array(25,28,456,506),3572=>array(25,66,923,384),3585=>array(58,0,526,534),3586=>array(46,0,514,538),3587=>array(46,0,597,537),3588=>array(58,0,528,534),3589=>array(58,0,528,535),3590=>array(46,-15,635,537),3591=>array(24,0,387,534),3592=>array(32,0,470,536),3593=>array(46,-17,646,536),3594=>array(46,0,514,562),3595=>array(46,0,595,562),3596=>array(58,-17,835,534),3597=>array(56,-266,750,534),3598=>array(46,-226,569,534),3599=>array(46,-226,573,534),3600=>array(32,-300,438,531),3601=>array(32,0,666,537),3602=>array(58,-17,812,534),3603=>array(58,-17,879,534),3604=>array(58,0,528,534),3605=>array(58,0,528,534),3606=>array(46,-16,514,534),3607=>array(36,0,606,534),3608=>array(54,0,478,539),3609=>array(36,-17,635,534),3610=>array(46,0,557,534),3611=>array(46,0,552,747),3612=>array(64,0,557,534),3613=>array(64,0,553,747),3614=>array(44,0,644,534),3615=>array(46,0,644,747),3616=>array(46,-17,573,534),3617=>array(36,-17,525,534),3618=>array(64,-16,488,536),3619=>array(32,-17,438,531),3620=>array(58,-224,526,534),3621=>array(64,-16,505,536),3622=>array(46,-226,573,534),3623=>array(24,-17,462,536),3624=>array(58,0,541,556),3625=>array(36,0,766,534),3626=>array(64,-16,521,555),3627=>array(34,0,604,534),3628=>array(42,0,754,731),3629=>array(58,-16,496,536),3630=>array(50,-16,490,569),3631=>array(36,0,446,534),3632=>array(32,-4,385,526),3633=>array(-181,589,172,800),3634=>array(24,0,359,534),3635=>array(-82,0,388,752),3636=>array(-415,546,-74,748),3637=>array(-406,545,-65,801),3638=>array(-423,543,-77,814),3639=>array(-406,544,-65,800),3640=>array(-250,-300,-44,-52),3641=>array(-409,-300,-44,-52),3642=>array(-166,-177,-43,-54),3647=>array(16,-129,619,770),3648=>array(64,-16,311,527),3649=>array(64,-16,578,527),3650=>array(0,-16,483,900),3651=>array(-20,-16,451,900),3652=>array(-56,-16,439,900),3653=>array(24,-224,359,534),3654=>array(32,-224,436,536),3655=>array(-400,560,-36,886),3656=>array(-163,674,-76,847),3657=>array(-311,680,-18,871),3658=>array(-470,675,-59,868),3659=>array(-240,679,-73,847),3660=>array(-260,677,-6,894),3661=>array(-236,571,-73,742),3662=>array(-310,602,-83,900),3663=>array(56,-10,602,536),3664=>array(35,-19,513,395),3665=>array(35,-19,513,395),3666=>array(1,-17,557,603),3667=>array(35,-21,579,392),3668=>array(35,-19,605,602),3669=>array(35,-22,617,587),3670=>array(-8,-19,473,607),3671=>array(35,-19,709,608),3672=>array(35,-19,596,598),3673=>array(35,-16,555,598),3674=>array(36,0,657,534),3675=>array(25,-18,1362,541),4256=>array(42,-3,498,706),4257=>array(44,5,502,717),4258=>array(35,-2,604,698),4259=>array(30,-28,691,697),4260=>array(42,-3,511,696),4261=>array(41,-3,503,697),4262=>array(41,-2,499,698),4263=>array(42,-2,768,697),4264=>array(41,-3,498,697),4265=>array(41,1,499,695),4266=>array(19,-21,904,691),4267=>array(41,-2,498,697),4268=>array(40,-3,498,709),4269=>array(42,-1,768,697),4270=>array(41,-2,498,698),4271=>array(41,-3,498,695),4272=>array(40,-2,770,719),4273=>array(0,-2,512,699),4274=>array(33,-3,609,697),4275=>array(36,-3,601,699),4276=>array(28,-2,619,697),4277=>array(40,-3,496,700),4278=>array(30,-29,693,697),4279=>array(41,1,499,697),4280=>array(38,-2,550,698),4281=>array(41,-2,499,699),4282=>array(39,-3,546,712),4283=>array(40,-2,498,699),4284=>array(36,-3,598,697),4285=>array(42,-3,489,713),4286=>array(0,-2,512,700),4287=>array(25,-146,609,700),4288=>array(42,-2,499,699),4289=>array(42,-2,499,699),4290=>array(41,-4,635,697),4291=>array(41,2,504,698),4292=>array(41,-3,506,697),4293=>array(41,-1,498,697),4304=>array(33,10,489,505),4305=>array(33,11,485,697),4306=>array(33,-270,588,396),4307=>array(33,-300,683,395),4308=>array(33,-272,484,397),4309=>array(33,-273,486,396),4310=>array(33,10,485,685),4311=>array(33,10,763,400),4312=>array(33,11,485,396),4313=>array(33,-274,485,394),4314=>array(23,-289,900,396),4315=>array(33,10,484,682),4316=>array(33,10,486,695),4317=>array(33,11,754,397),4318=>array(33,10,482,686),4319=>array(33,-272,481,396),4320=>array(33,9,755,695),4321=>array(33,10,540,687),4322=>array(33,-272,587,395),4323=>array(1,-271,562,398),4324=>array(33,-272,606,400),4325=>array(33,-272,483,687),4326=>array(33,-296,681,395),4327=>array(33,-275,485,396),4328=>array(33,10,539,685),4329=>array(33,10,485,686),4330=>array(33,-271,522,417),4331=>array(33,10,485,686),4332=>array(0,-272,559,686),4333=>array(33,-271,476,699),4334=>array(33,10,539,686),4335=>array(1,-271,673,394),4336=>array(33,10,490,691),4337=>array(33,10,484,687),4338=>array(0,9,595,396),4339=>array(0,-268,449,396),4340=>array(33,-271,486,501),4341=>array(33,11,484,684),4342=>array(33,-269,805,686),4343=>array(33,-271,484,398),4344=>array(33,-272,483,394),4345=>array(33,-256,588,410),4346=>array(33,-214,492,398),4347=>array(15,-13,435,590),4348=>array(24,219,365,734),5024=>array(18,0,694,676),5025=>array(19,-9,744,676),5026=>array(8,0,613,676),5027=>array(0,-19,851,676),5028=>array(28,-19,983,691),5029=>array(-3,0,347,691),5030=>array(32,-19,552,690),5031=>array(37,-14,727,676),5032=>array(20,0,514,676),5033=>array(24,-19,750,676),5034=>array(-12,0,668,690),5035=>array(-1,-38,475,676),5036=>array(18,0,643,676),5037=>array(3,0,805,676),5038=>array(37,0,557,695),5039=>array(-12,-14,653,667),5040=>array(18,0,461,676),5041=>array(18,0,585,676),5042=>array(6,-19,861,695),5043=>array(-12,-15,950,676),5044=>array(12,-19,572,695),5045=>array(-9,0,565,676),5046=>array(20,-19,691,691),5047=>array(16,0,923,676),5048=>array(40,0,534,695),5049=>array(-3,-19,818,695),5050=>array(21,-19,1072,691),5051=>array(18,0,756,676),5052=>array(-3,-19,571,676),5053=>array(19,-19,845,676),5054=>array(20,-19,728,691),5055=>array(-6,-19,686,676),5056=>array(19,-19,737,691),5057=>array(-12,-19,778,696),5058=>array(18,0,736,676),5059=>array(21,0,627,676),5060=>array(9,0,631,696),5061=>array(20,-19,965,691),5062=>array(44,1,649,676),5063=>array(-7,-19,773,680),5064=>array(17,-19,787,696),5065=>array(-2,0,1028,695),5066=>array(-6,-19,726,680),5067=>array(22,-19,584,696),5068=>array(-2,-19,683,676),5069=>array(13,-19,860,696),5070=>array(-11,0,560,676),5071=>array(15,0,599,676),5072=>array(1,0,512,676),5073=>array(11,-19,749,696),5074=>array(21,0,739,676),5075=>array(-2,-14,557,676),5076=>array(-12,-19,1028,676),5077=>array(26,-19,576,690),5078=>array(-2,-14,701,676),5079=>array(-12,-19,690,676),5080=>array(-12,-19,690,676),5081=>array(-12,-18,673,676),5082=>array(31,-19,509,692),5083=>array(28,-19,919,696),5084=>array(-6,-9,694,671),5085=>array(-12,0,607,694),5086=>array(18,0,637,676),5087=>array(20,-19,658,691),5088=>array(15,-19,817,695),5089=>array(-12,-19,843,695),5090=>array(15,0,599,676),5091=>array(25,-19,715,691),5092=>array(13,0,874,676),5093=>array(18,0,872,676),5094=>array(18,0,757,676),5095=>array(8,-14,588,662),5096=>array(22,-19,804,696),5097=>array(20,-19,925,696),5098=>array(8,-19,858,696),5099=>array(25,-19,733,691),5100=>array(28,-14,768,680),5101=>array(9,-19,550,696),5102=>array(26,-19,566,696),5103=>array(-7,-19,773,680),5104=>array(-12,-101,588,696),5105=>array(-12,-19,862,676),5106=>array(-12,0,706,694),5107=>array(20,-19,813,688),5108=>array(17,0,620,676),7424=>array(5,0,469,473),7425=>array(5,0,762,461),7426=>array(18,-15,678,472),7427=>array(12,0,484,461),7428=>array(24,-13,470,473),7429=>array(12,0,524,461),7430=>array(12,0,524,461),7431=>array(12,0,475,461),7432=>array(9,-13,404,474),7433=>array(13,-217,254,474),7434=>array(1,-66,377,461),7435=>array(12,0,551,461),7436=>array(12,0,471,461),7437=>array(12,0,671,461),7438=>array(12,-12,490,461),7439=>array(24,-13,528,473),7440=>array(22,-13,468,473),7441=>array(24,-22,510,482),7442=>array(5,11,493,417),7443=>array(7,-5,648,446),7444=>array(18,-14,692,473),7445=>array(23,-13,361,472),7446=>array(24,230,528,473),7447=>array(23,-27,528,217),7448=>array(12,0,461,461),7449=>array(4,-1,526,461),7450=>array(5,0,526,461),7451=>array(12,0,436,461),7452=>array(12,-13,510,461),7453=>array(13,-1,488,527),7454=>array(6,-3,660,526),7455=>array(20,-128,494,669),7456=>array(5,-14,469,461),7457=>array(5,-14,689,461),7458=>array(12,0,411,461),7459=>array(5,-4,398,461),7460=>array(15,-14,448,683),7461=>array(6,-7,672,692),7462=>array(10,0,398,462),7463=>array(6,0,470,471),7464=>array(16,0,538,462),7465=>array(13,0,412,462),7466=>array(4,0,626,468),7467=>array(12,-10,524,462),7468=>array(3,390,467,863),7469=>array(3,390,760,851),7470=>array(12,390,484,851),7471=>array(12,390,484,851),7472=>array(12,390,524,851),7473=>array(12,390,475,851),7474=>array(12,390,475,851),7475=>array(24,377,545,863),7476=>array(12,390,570,851),7477=>array(12,390,281,851),7478=>array(1,324,377,851),7479=>array(12,390,551,851),7480=>array(12,390,471,851),7481=>array(12,390,671,851),7482=>array(12,378,490,851),7483=>array(12,378,490,851),7484=>array(24,377,528,863),7485=>array(12,377,343,853),7486=>array(12,390,461,851),7487=>array(12,390,533,851),7488=>array(12,390,436,851),7489=>array(12,377,510,851),7490=>array(5,376,689,851),7491=>array(17,381,325,705),7492=>array(11,375,319,699),7493=>array(16,379,343,698),7494=>array(12,378,455,706),7495=>array(11,381,347,841),7496=>array(17,381,356,841),7497=>array(17,381,284,705),7498=>array(11,373,278,697),7499=>array(12,380,278,707),7500=>array(5,379,270,706),7501=>array(17,253,320,705),7502=>array(10,229,169,690),7503=>array(15,390,362,841),7504=>array(11,390,543,705),7505=>array(14,253,329,707),7506=>array(17,381,317,705),7507=>array(3,374,273,698),7510=>array(13,253,349,705),7511=>array(13,382,221,810),7512=>array(11,381,358,697),7513=>array(21,395,337,742),7514=>array(14,376,546,691),7515=>array(14,381,323,697),7516=>array(13,381,447,836),7517=>array(37,254,350,843),7518=>array(18,235,351,708),7519=>array(25,377,344,849),7520=>array(26,246,417,706),7521=>array(6,198,326,658),7522=>array(11,-150,170,311),7523=>array(19,-150,289,165),7524=>array(11,-159,358,157),7525=>array(14,-159,323,157),7526=>array(37,-283,350,306),7527=>array(18,-300,351,173),7528=>array(28,-285,341,169),7529=>array(26,-291,417,169),7530=>array(6,-291,326,169),7543=>array(18,-206,473,473),7544=>array(8,390,503,843),7579=>array(4,378,331,697),7580=>array(17,381,287,705),7581=>array(14,321,304,707),7582=>array(11,379,314,852),7583=>array(5,380,270,707),7584=>array(9,390,260,851),7585=>array(0,378,251,839),7586=>array(17,253,320,705),7587=>array(6,241,351,692),7588=>array(5,391,202,854),7589=>array(11,382,222,700),7590=>array(8,390,189,699),7591=>array(8,390,189,699),7592=>array(-6,253,283,853),7593=>array(12,254,233,844),7595=>array(6,390,314,699),7596=>array(8,253,510,707),7597=>array(12,246,548,700),7598=>array(5,253,437,707),7599=>array(15,253,422,707),7600=>array(6,381,327,699),7601=>array(16,379,319,706),7602=>array(12,259,440,857),7603=>array(19,237,245,707),7604=>array(0,300,334,900),7605=>array(13,238,223,814),7606=>array(10,380,360,699),7607=>array(24,382,331,699),7608=>array(11,382,345,700),7609=>array(12,383,341,703),7610=>array(8,383,317,699),7611=>array(4,390,270,697),7612=>array(4,237,437,699),7613=>array(4,324,311,699),7614=>array(9,244,315,700),7615=>array(13,381,316,857),7680=>array(20,-254,700,690),7681=>array(25,-254,488,473),7682=>array(20,0,623,845),7683=>array(18,-14,520,692),7684=>array(20,-185,623,676),7685=>array(18,-185,520,676),7686=>array(20,-112,623,676),7687=>array(18,-126,520,676),7688=>array(35,-218,673,900),7689=>array(25,-218,430,686),7690=>array(20,0,696,845),7691=>array(25,-14,534,683),7692=>array(20,-185,696,676),7693=>array(25,-185,534,676),7694=>array(20,-112,696,676),7695=>array(25,-126,534,676),7696=>array(16,-216,692,676),7697=>array(25,-225,534,676),7698=>array(20,-216,696,676),7699=>array(25,-230,534,676),7700=>array(16,0,641,900),7701=>array(25,-14,426,843),7702=>array(16,0,641,900),7703=>array(25,-14,426,845),7704=>array(20,-216,645,676),7705=>array(25,-230,426,473),7706=>array(20,-169,645,676),7707=>array(25,-183,426,473),7708=>array(16,-216,641,879),7709=>array(25,-227,426,664),7710=>array(20,0,587,845),7711=>array(18,0,393,845),7712=>array(35,-19,753,800),7713=>array(25,-206,480,612),7714=>array(20,0,758,845),7715=>array(18,0,536,842),7716=>array(20,-185,758,676),7717=>array(18,-185,536,676),7718=>array(20,0,758,845),7719=>array(18,0,536,845),7720=>array(16,-216,754,676),7721=>array(16,-217,534,676),7722=>array(20,-188,758,676),7723=>array(18,-188,536,676),7724=>array(8,-169,373,676),7725=>array(-36,-169,329,691),7726=>array(16,-1,401,900),7727=>array(-20,0,319,886),7728=>array(20,0,759,900),7729=>array(18,0,545,900),7730=>array(20,-185,759,676),7731=>array(18,-185,545,676),7732=>array(20,-139,759,676),7733=>array(18,-142,545,676),7734=>array(20,-185,639,676),7735=>array(18,-185,259,676),7736=>array(20,-185,639,800),7737=>array(-29,-185,301,800),7738=>array(20,-142,639,676),7739=>array(-26,-142,304,676),7740=>array(20,-216,639,676),7741=>array(-33,-216,304,676),7742=>array(20,0,927,900),7743=>array(18,0,814,686),7744=>array(20,0,927,845),7745=>array(18,0,814,638),7746=>array(20,-185,927,676),7747=>array(18,-185,814,473),7748=>array(20,-18,705,845),7749=>array(18,0,536,636),7750=>array(20,-185,705,676),7751=>array(18,-185,536,473),7752=>array(20,-142,705,676),7753=>array(18,-135,536,473),7754=>array(20,-234,705,676),7755=>array(18,-216,536,473),7756=>array(35,-16,743,900),7757=>array(25,-14,476,884),7758=>array(35,-16,743,900),7759=>array(25,-14,476,845),7760=>array(35,-16,743,900),7761=>array(25,-14,476,842),7762=>array(35,-16,743,900),7763=>array(25,-14,476,843),7764=>array(20,0,604,900),7765=>array(15,-205,520,686),7766=>array(20,0,604,845),7767=>array(15,-205,520,638),7768=>array(20,0,709,845),7769=>array(18,0,422,636),7770=>array(20,-185,709,676),7771=>array(18,-185,422,473),7772=>array(20,-185,709,802),7773=>array(18,-185,422,619),7774=>array(20,-139,709,676),7775=>array(18,-134,422,473),7776=>array(45,-19,523,845),7777=>array(35,-14,371,638),7778=>array(45,-185,523,692),7779=>array(35,-185,371,473),7780=>array(35,-16,513,900),7781=>array(35,-14,371,825),7782=>array(35,-16,513,900),7783=>array(27,-14,371,829),7784=>array(45,-185,523,845),7785=>array(35,-185,371,635),7786=>array(20,0,625,845),7787=>array(18,-12,330,799),7788=>array(20,-185,625,676),7789=>array(18,-185,330,630),7790=>array(20,-145,625,676),7791=>array(11,-144,341,630),7792=>array(20,-216,625,676),7793=>array(8,-228,345,630),7794=>array(20,-174,705,676),7795=>array(18,-175,546,461),7796=>array(20,-175,705,676),7797=>array(18,-173,546,461),7798=>array(20,-225,705,676),7799=>array(18,-224,546,461),7800=>array(16,-16,701,900),7801=>array(18,-14,546,863),7802=>array(16,-16,701,900),7803=>array(18,-14,546,802),7804=>array(10,-18,695,843),7805=>array(9,-14,473,628),7806=>array(10,-185,695,676),7807=>array(9,-185,473,461),7808=>array(10,-15,972,900),7809=>array(9,-14,693,686),7810=>array(10,-15,972,900),7811=>array(9,-14,693,686),7812=>array(10,-15,972,845),7813=>array(9,-14,693,644),7814=>array(10,-15,972,845),7815=>array(9,-14,693,638),7816=>array(10,-185,972,676),7817=>array(9,-185,693,461),7818=>array(20,0,703,845),7819=>array(18,0,490,636),7820=>array(20,0,703,845),7821=>array(18,0,490,640),7822=>array(10,0,694,845),7823=>array(9,-205,473,636),7824=>array(20,0,626,892),7825=>array(21,0,420,677),7826=>array(20,-185,626,676),7827=>array(21,-185,420,461),7828=>array(20,-145,626,676),7829=>array(21,-144,420,461),7830=>array(18,-151,536,676),7831=>array(6,-12,345,799),7832=>array(9,-14,693,707),7833=>array(9,-205,473,707),7834=>array(25,-14,507,731),7835=>array(18,0,393,845),7836=>array(14,0,389,691),7837=>array(14,0,389,691),7838=>array(15,-9,760,683),7839=>array(38,-13,513,690),7840=>array(20,-185,700,690),7841=>array(25,-185,488,473),7842=>array(20,0,700,887),7843=>array(25,-14,488,697),7844=>array(20,0,756,900),7845=>array(25,-14,562,860),7846=>array(-66,0,700,900),7847=>array(-67,-14,488,862),7848=>array(20,0,700,900),7849=>array(25,-14,496,802),7850=>array(9,0,689,900),7851=>array(25,-14,488,871),7852=>array(20,-185,700,892),7853=>array(25,-185,488,677),7854=>array(9,0,689,900),7855=>array(25,-14,488,838),7856=>array(9,0,689,900),7857=>array(25,-14,488,844),7858=>array(9,0,689,900),7859=>array(25,-14,488,802),7860=>array(9,0,689,900),7861=>array(25,-14,488,843),7862=>array(20,-185,700,879),7863=>array(25,-185,488,690),7864=>array(20,-185,645,676),7865=>array(25,-185,426,473),7866=>array(20,0,645,887),7867=>array(25,-14,426,697),7868=>array(20,0,645,843),7869=>array(25,-14,426,628),7870=>array(20,0,737,900),7871=>array(25,-14,548,860),7872=>array(-86,0,645,900),7873=>array(-75,-14,426,858),7874=>array(20,0,650,900),7875=>array(25,-14,485,802),7876=>array(16,0,641,900),7877=>array(25,-14,426,850),7878=>array(20,-185,645,892),7879=>array(25,-185,426,677),7880=>array(20,0,370,891),7881=>array(24,0,263,718),7882=>array(20,-185,370,676),7883=>array(24,-185,265,691),7884=>array(35,-185,743,691),7885=>array(25,-185,476,473),7886=>array(35,-19,743,885),7887=>array(25,-14,476,697),7888=>array(35,-19,799,900),7889=>array(25,-14,565,860),7890=>array(-34,-19,743,900),7891=>array(-58,-14,476,858),7892=>array(35,-19,743,900),7893=>array(25,-14,494,799),7894=>array(35,-16,743,900),7895=>array(25,-14,476,871),7896=>array(35,-185,743,892),7897=>array(25,-185,476,677),7898=>array(35,-19,773,900),7899=>array(25,-14,564,713),7900=>array(35,-19,773,900),7901=>array(25,-14,564,713),7902=>array(35,-19,773,885),7903=>array(25,-14,564,697),7904=>array(35,-19,773,864),7905=>array(18,-14,564,647),7906=>array(35,-185,773,864),7907=>array(25,-180,564,647),7908=>array(20,-185,705,676),7909=>array(18,-185,546,461),7910=>array(20,-19,705,900),7911=>array(18,-14,546,711),7912=>array(16,-19,748,900),7913=>array(16,-14,600,713),7914=>array(16,-19,748,900),7915=>array(16,-14,600,713),7916=>array(16,-19,748,887),7917=>array(16,-14,600,697),7918=>array(16,-19,748,864),7919=>array(16,-14,600,647),7920=>array(16,-179,748,864),7921=>array(16,-179,600,647),7922=>array(10,0,694,900),7923=>array(9,-205,473,686),7924=>array(10,-185,694,676),7925=>array(9,-205,473,461),7926=>array(10,0,694,887),7927=>array(9,-205,473,697),7928=>array(10,0,694,843),7929=>array(9,-205,473,628),7936=>array(37,-13,588,750),7937=>array(37,-13,588,718),7938=>array(37,-13,588,718),7939=>array(37,-13,588,720),7940=>array(37,-13,588,717),7941=>array(37,-13,588,706),7942=>array(37,-13,588,849),7943=>array(37,-13,588,849),7944=>array(20,0,700,711),7945=>array(20,0,700,711),7946=>array(-9,0,808,707),7947=>array(-15,0,811,705),7948=>array(-32,0,750,712),7949=>array(-16,0,776,710),7950=>array(-41,0,699,840),7951=>array(-37,0,700,852),7952=>array(36,-13,431,750),7953=>array(36,-13,431,718),7954=>array(36,-13,431,718),7955=>array(36,-13,431,720),7956=>array(36,-13,431,717),7957=>array(36,-13,431,706),7960=>array(-34,0,795,711),7961=>array(-15,0,804,709),7962=>array(-26,0,922,709),7963=>array(-10,0,948,704),7964=>array(-45,0,942,706),7965=>array(-8,0,980,707),7968=>array(9,-231,529,750),7969=>array(9,-231,529,718),7970=>array(9,-231,529,718),7971=>array(9,-231,529,720),7972=>array(9,-231,529,717),7973=>array(9,-231,529,706),7974=>array(9,-231,529,849),7975=>array(9,-231,529,851),7976=>array(-20,0,915,706),7977=>array(-13,0,910,711),7978=>array(-30,0,1027,709),7979=>array(-11,0,1053,706),7980=>array(-22,0,1081,705),7981=>array(-5,0,1091,707),7982=>array(-37,0,994,838),7983=>array(-37,0,980,849),7984=>array(60,-13,318,749),7985=>array(65,-13,318,718),7986=>array(13,-13,330,718),7987=>array(-2,-13,318,718),7988=>array(13,-13,339,717),7989=>array(1,-13,329,711),7990=>array(0,-13,362,851),7991=>array(1,-13,363,851),7992=>array(-23,0,522,707),7993=>array(-13,0,529,711),7994=>array(-23,0,641,707),7995=>array(-16,0,647,705),7996=>array(-18,0,693,707),7997=>array(-11,0,702,709),7998=>array(-39,0,600,838),7999=>array(-42,0,602,848),8000=>array(37,-13,514,750),8001=>array(37,-13,514,738),8002=>array(37,-13,514,739),8003=>array(37,-13,514,743),8004=>array(37,-13,514,735),8005=>array(37,-13,514,746),8008=>array(-20,-19,850,707),8009=>array(-17,-19,851,707),8010=>array(-27,-19,1003,709),8011=>array(-14,-19,1017,705),8012=>array(-28,-19,962,706),8013=>array(-23,-19,986,707),8016=>array(8,-13,490,750),8017=>array(8,-13,490,744),8018=>array(8,-13,490,739),8019=>array(8,-13,490,741),8020=>array(8,-13,490,738),8021=>array(8,-13,490,745),8022=>array(8,-13,490,870),8023=>array(8,-13,490,884),8025=>array(-17,0,866,707),8027=>array(-19,0,1016,707),8029=>array(-17,0,1039,707),8031=>array(-39,0,940,850),8032=>array(35,-13,680,745),8033=>array(35,-13,680,736),8034=>array(35,-13,680,739),8035=>array(35,-13,680,740),8036=>array(35,-13,680,738),8037=>array(35,-13,680,739),8038=>array(35,-13,680,873),8039=>array(35,-13,680,883),8040=>array(-29,0,850,708),8041=>array(-16,0,858,708),8042=>array(-29,0,1011,708),8043=>array(-17,0,1030,707),8044=>array(-30,0,979,706),8045=>array(-19,0,989,709),8046=>array(-35,0,929,840),8047=>array(-40,0,906,848),8048=>array(37,-13,588,734),8049=>array(37,-13,588,724),8050=>array(36,-13,431,734),8051=>array(36,-13,431,727),8052=>array(9,-231,529,735),8053=>array(9,-231,529,731),8054=>array(57,-13,318,729),8055=>array(65,-13,318,731),8056=>array(37,-13,514,733),8057=>array(37,-13,514,731),8058=>array(8,-13,490,732),8059=>array(8,-13,490,729),8060=>array(35,-13,680,734),8061=>array(35,-13,680,729),8064=>array(37,-200,588,750),8065=>array(37,-201,588,718),8066=>array(37,-200,588,718),8067=>array(37,-200,588,720),8068=>array(37,-200,588,717),8069=>array(37,-201,588,706),8070=>array(37,-201,588,849),8071=>array(37,-200,588,849),8072=>array(20,0,870,711),8073=>array(20,0,873,711),8074=>array(-9,0,972,707),8075=>array(-15,0,978,705),8076=>array(-32,0,922,712),8077=>array(-16,0,941,710),8078=>array(-41,0,861,840),8079=>array(-37,0,863,852),8080=>array(9,-231,529,750),8081=>array(9,-231,529,718),8082=>array(9,-231,529,718),8083=>array(9,-231,529,720),8084=>array(9,-231,529,717),8085=>array(9,-231,529,706),8086=>array(9,-231,529,849),8087=>array(9,-231,529,851),8088=>array(-20,0,1081,706),8089=>array(-13,0,1077,711),8090=>array(-30,0,1208,709),8091=>array(-11,0,1235,706),8092=>array(-22,0,1255,705),8093=>array(-5,0,1268,707),8094=>array(-37,0,1159,838),8095=>array(-37,0,1147,849),8096=>array(35,-202,680,745),8097=>array(35,-202,680,736),8098=>array(35,-200,680,739),8099=>array(35,-201,680,740),8100=>array(35,-201,680,738),8101=>array(35,-201,680,739),8102=>array(35,-201,680,873),8103=>array(35,-201,680,883),8104=>array(-29,0,1042,708),8105=>array(-16,0,1058,708),8106=>array(-29,0,1213,708),8107=>array(-17,0,1236,707),8108=>array(-30,0,1187,706),8109=>array(-19,0,1195,709),8110=>array(-35,0,1136,840),8111=>array(-40,0,1116,848),8112=>array(37,-13,588,693),8113=>array(37,-13,588,617),8114=>array(37,-201,588,734),8115=>array(37,-200,588,474),8116=>array(37,-200,588,724),8118=>array(37,-13,588,677),8119=>array(37,-201,588,677),8120=>array(20,0,700,879),8121=>array(20,0,700,788),8122=>array(20,0,700,735),8123=>array(20,0,700,720),8124=>array(20,0,868,690),8125=>array(174,546,328,774),8126=>array(130,0,300,183),8127=>array(174,546,328,774),8128=>array(76,557,438,682),8129=>array(118,557,452,853),8130=>array(9,-231,529,735),8131=>array(9,-231,529,474),8132=>array(9,-231,529,770),8134=>array(9,-231,529,676),8135=>array(9,-231,529,676),8136=>array(2,0,768,707),8137=>array(0,0,808,702),8138=>array(14,0,898,709),8139=>array(0,0,920,702),8140=>array(25,0,935,676),8141=>array(70,546,387,774),8142=>array(70,546,396,774),8143=>array(79,502,441,862),8144=>array(40,-13,343,698),8145=>array(27,-13,357,617),8146=>array(-46,-13,335,770),8147=>array(-43,-13,338,753),8150=>array(-14,-13,348,676),8151=>array(-22,-13,318,800),8152=>array(24,0,374,879),8153=>array(24,0,374,800),8154=>array(0,0,494,707),8155=>array(0,0,538,706),8157=>array(60,546,380,776),8158=>array(90,534,418,762),8159=>array(79,492,441,862),8160=>array(8,-13,490,692),8161=>array(8,-13,490,618),8162=>array(8,-13,490,768),8163=>array(8,-13,490,752),8164=>array(43,-202,508,734),8165=>array(43,-202,508,740),8166=>array(8,-13,490,675),8167=>array(8,-13,490,800),8168=>array(20,0,718,879),8169=>array(20,0,718,788),8170=>array(0,0,854,706),8171=>array(0,0,876,705),8172=>array(-18,0,757,708),8173=>array(86,549,467,786),8174=>array(86,546,467,770),8175=>array(163,525,302,749),8178=>array(35,-201,680,734),8179=>array(35,-201,680,474),8180=>array(35,-201,680,729),8182=>array(35,-13,680,675),8183=>array(35,-201,680,675),8184=>array(0,-19,849,704),8185=>array(0,-19,822,705),8186=>array(1,0,872,702),8187=>array(0,0,837,699),8188=>array(56,0,973,691),8189=>array(131,516,278,740),8190=>array(170,546,324,774),8208=>array(44,181,287,271),8209=>array(44,181,287,271),8210=>array(0,181,500,271),8211=>array(0,181,500,271),8212=>array(0,181,1000,271),8213=>array(0,181,1000,271),8214=>array(56,-19,274,691),8215=>array(156,-268,428,-89),8216=>array(33,356,217,691),8217=>array(33,356,217,691),8218=>array(33,-180,217,155),8219=>array(33,356,217,691),8220=>array(32,356,485,691),8221=>array(14,356,468,691),8222=>array(14,-180,468,155),8223=>array(32,356,486,691),8224=>array(47,-134,453,691),8225=>array(45,-132,456,691),8226=>array(50,101,450,501),8227=>array(46,101,468,575),8228=>array(41,-13,210,156),8229=>array(41,-13,460,156),8230=>array(82,-13,917,156),8231=>array(60,181,189,310),8240=>array(7,-29,995,706),8241=>array(7,-14,1580,692),8242=>array(12,463,250,760),8243=>array(12,463,474,760),8244=>array(12,463,696,760),8245=>array(15,463,253,760),8246=>array(15,463,469,760),8247=>array(15,463,678,760),8248=>array(8,-162,460,203),8249=>array(51,36,305,415),8250=>array(28,36,282,415),8251=>array(40,-55,687,592),8252=>array(81,-13,584,691),8253=>array(58,-13,640,689),8254=>array(0,537,500,617),8255=>array(50,-276,912,-16),8256=>array(50,640,912,900),8257=>array(-11,-19,344,691),8258=>array(59,-92,875,688),8259=>array(63,200,437,388),8260=>array(-168,-12,329,688),8261=>array(67,-175,279,698),8262=>array(53,-175,265,698),8263=>array(57,-13,945,689),8264=>array(57,-13,751,691),8265=>array(81,-13,778,691),8266=>array(17,-18,477,462),8267=>array(0,-186,519,676),8268=>array(35,130,557,570),8269=>array(43,141,565,581),8270=>array(60,-14,443,409),8271=>array(82,-180,266,472),8272=>array(50,1,912,796),8273=>array(60,-13,443,884),8274=>array(0,-12,497,694),8275=>array(6,268,574,424),8276=>array(41,-279,903,-19),8277=>array(26,-24,761,711),8278=>array(15,-1,435,602),8279=>array(12,463,863,760),8280=>array(-3,-1,624,693),8281=>array(-5,-1,625,602),8282=>array(25,-1,154,807),8283=>array(-3,-204,624,830),8284=>array(8,-20,560,534),8285=>array(25,-1,154,807),8286=>array(25,-1,154,807),8304=>array(3,385,297,806),8305=>array(13,390,172,851),8308=>array(3,390,299,803),8309=>array(5,385,295,795),8310=>array(5,384,296,805),8311=>array(-2,390,296,796),8312=>array(6,385,294,806),8313=>array(5,382,296,803),8314=>array(35,481,265,711),8315=>array(35,556,265,636),8316=>array(35,497,265,700),8317=>array(17,313,195,900),8318=>array(31,313,209,900),8319=>array(14,390,359,705),8320=>array(3,-154,297,267),8321=>array(14,-150,259,263),8322=>array(0,-150,300,263),8323=>array(3,-154,297,266),8324=>array(3,-150,299,263),8325=>array(5,-153,295,257),8326=>array(5,-155,296,266),8327=>array(-2,-150,296,256),8328=>array(6,-154,294,267),8329=>array(5,-156,296,265),8330=>array(35,-69,265,161),8331=>array(35,6,265,86),8332=>array(35,-53,265,150),8333=>array(6,-242,184,345),8334=>array(33,-249,211,338),8336=>array(17,-159,325,165),8337=>array(17,-159,284,165),8338=>array(17,-149,317,175),8339=>array(8,-150,323,157),8340=>array(17,-155,290,177),8352=>array(55,0,660,691),8353=>array(49,-85,687,753),8354=>array(48,-19,750,691),8355=>array(16,0,583,676),8356=>array(21,-14,477,684),8357=>array(16,-204,814,677),8358=>array(16,-18,701,676),8359=>array(10,-9,936,673),8360=>array(20,-14,1083,676),8361=>array(18,-15,981,676),8362=>array(60,0,815,609),8363=>array(27,-6,517,802),8364=>array(34,-19,732,676),8365=>array(34,0,743,672),8366=>array(17,-5,614,667),8367=>array(7,-212,1412,693),8368=>array(12,-197,535,692),8369=>array(16,-5,609,667),8370=>array(32,-37,629,704),8371=>array(22,-5,631,674),8372=>array(42,-14,491,676),8373=>array(29,-99,478,750),8376=>array(20,-1,504,676),8377=>array(18,-112,657,675),8400=>array(-592,665,39,878),8401=>array(-592,660,39,872),8406=>array(-617,548,13,900),8407=>array(-558,548,72,900),8411=>array(-535,494,-8,623),8412=>array(-735,494,-8,623),8413=>array(-781,-238,297,840),8414=>array(-760,-213,269,816),8415=>array(-775,-230,291,836),8416=>array(-781,-238,297,840),8417=>array(-606,548,25,900),8421=>array(-437,-96,60,604),8423=>array(-432,15,68,559),8424=>array(-533,-169,-6,-40),8426=>array(-626,81,4,433),8427=>array(-572,-96,60,604),8428=>array(-574,-256,57,-43),8429=>array(-583,-262,48,-50),8430=>array(-615,-300,15,52),8431=>array(-577,-300,53,52),8448=>array(8,-14,689,683),8449=>array(8,-14,689,683),8451=>array(17,-19,945,691),8453=>array(6,-14,687,686),8454=>array(6,-14,695,686),8455=>array(40,-14,586,691),8456=>array(31,-19,669,691),8457=>array(15,0,899,688),8458=>array(1,-207,471,462),8459=>array(19,-33,1056,723),8462=>array(-13,-9,498,699),8463=>array(-13,-9,498,699),8464=>array(10,-149,933,678),8465=>array(32,-37,605,761),8466=>array(12,-86,787,689),8467=>array(18,-14,439,677),8468=>array(16,-14,800,676),8470=>array(16,-18,877,676),8471=>array(13,-75,842,754),8472=>array(33,-193,604,479),8475=>array(17,-8,739,691),8476=>array(28,-44,882,762),8478=>array(26,-14,715,676),8479=>array(26,-93,715,826),8480=>array(30,203,971,687),8481=>array(25,0,1178,676),8482=>array(13,211,1068,672),8483=>array(16,-93,701,826),8486=>array(36,0,736,691),8487=>array(36,-23,736,668),8489=>array(16,-2,329,471),8490=>array(20,0,759,676),8491=>array(20,0,700,900),8492=>array(17,-22,781,684),8494=>array(36,-10,514,473),8495=>array(5,-13,398,462),8497=>array(12,-66,857,705),8498=>array(12,0,579,676),8499=>array(12,-44,1178,704),8501=>array(41,0,554,644),8502=>array(21,0,495,645),8503=>array(9,-1,317,644),8504=>array(32,-5,485,645),8506=>array(15,-15,882,693),8507=>array(16,0,1171,676),8523=>array(5,-28,730,679),8525=>array(16,-14,1038,683),8526=>array(7,0,394,460),8531=>array(14,-12,777,690),8532=>array(10,-12,777,691),8533=>array(14,-12,754,690),8534=>array(0,-12,782,690),8535=>array(13,-12,782,689),8536=>array(13,-12,782,690),8537=>array(14,-12,759,690),8538=>array(15,-12,779,688),8539=>array(14,-12,774,690),8540=>array(13,-12,784,688),8541=>array(15,-12,784,688),8542=>array(18,-12,784,688),8543=>array(14,-12,668,690),8544=>array(20,0,370,676),8545=>array(20,0,744,676),8546=>array(20,0,1122,676),8547=>array(20,-18,1071,676),8548=>array(10,-18,695,676),8549=>array(10,-18,1082,676),8550=>array(10,-18,1458,676),8551=>array(10,-18,1834,676),8552=>array(20,0,1077,676),8553=>array(20,0,703,676),8554=>array(20,0,1079,676),8555=>array(20,0,1456,676),8556=>array(20,0,639,676),8557=>array(35,-19,673,691),8558=>array(20,0,696,676),8559=>array(20,0,927,676),8560=>array(24,0,265,691),8561=>array(24,0,532,691),8562=>array(24,0,799,691),8563=>array(24,-14,731,691),8564=>array(9,-14,473,461),8565=>array(9,-14,741,691),8566=>array(9,-14,1005,691),8567=>array(9,-14,1265,691),8568=>array(24,0,758,691),8569=>array(18,0,490,461),8570=>array(18,0,755,691),8571=>array(18,0,1021,691),8572=>array(18,0,259,676),8573=>array(25,-14,430,473),8574=>array(25,-14,534,676),8575=>array(18,0,814,473),8592=>array(32,23,872,491),8593=>array(28,-83,495,757),8594=>array(32,23,872,491),8595=>array(28,-62,495,778),8596=>array(30,23,870,491),8597=>array(28,-110,496,730),8598=>array(42,-68,882,772),8599=>array(26,-62,866,778),8600=>array(22,-39,862,801),8601=>array(34,-59,874,781),8602=>array(22,23,862,491),8603=>array(32,23,872,491),8604=>array(17,23,1110,491),8605=>array(27,23,1120,491),8606=>array(22,23,862,491),8607=>array(26,-171,494,669),8608=>array(32,23,872,491),8609=>array(30,-218,498,622),8610=>array(32,23,976,491),8611=>array(22,23,966,491),8612=>array(31,-23,860,477),8613=>array(26,-137,526,692),8614=>array(45,-23,874,477),8615=>array(26,-154,526,675),8616=>array(11,-229,511,730),8617=>array(22,23,867,510),8618=>array(32,23,872,510),8619=>array(22,23,862,491),8620=>array(32,23,872,491),8621=>array(32,23,1135,491),8622=>array(32,23,872,491),8624=>array(62,0,560,739),8625=>array(60,0,558,739),8630=>array(32,-8,1027,435),8631=>array(32,-8,1027,435),8632=>array(0,-68,1000,880),8633=>array(71,-214,880,668),8634=>array(108,-7,872,725),8635=>array(108,-7,872,725),8636=>array(62,209,902,491),8637=>array(62,23,902,305),8638=>array(232,-162,512,678),8639=>array(45,-162,324,678),8640=>array(62,210,902,492),8641=>array(62,24,902,306),8642=>array(232,-162,512,678),8643=>array(45,-162,324,678),8644=>array(62,-147,902,661),8645=>array(30,-178,838,662),8646=>array(62,-147,902,661),8647=>array(62,-147,902,661),8648=>array(93,-211,901,629),8649=>array(29,-210,869,598),8650=>array(30,-148,838,692),8651=>array(62,-103,902,607),8652=>array(62,-103,902,607),8653=>array(62,-45,902,558),8654=>array(42,-45,922,558),8655=>array(62,-45,902,558),8656=>array(62,-45,902,558),8657=>array(14,-162,616,678),8658=>array(62,-45,902,558),8659=>array(14,-162,616,678),8660=>array(42,-45,922,558),8661=>array(14,-182,616,698),8662=>array(62,-244,1001,694),8663=>array(62,-244,1001,694),8664=>array(62,-244,1001,694),8665=>array(62,-244,1001,694),8666=>array(62,-131,902,645),8667=>array(62,-131,902,645),8668=>array(32,23,1068,491),8669=>array(32,23,1068,491),8672=>array(62,24,902,491),8674=>array(62,24,902,491),8676=>array(71,6,878,506),8677=>array(73,-52,880,448),8704=>array(28,-3,599,673),8705=>array(38,-29,510,800),8706=>array(20,-16,533,692),8707=>array(44,0,583,672),8708=>array(44,-135,583,793),8709=>array(12,-16,721,690),8710=>array(13,0,746,690),8711=>array(13,-15,746,675),8712=>array(52,0,524,538),8713=>array(52,-110,524,648),8714=>array(28,-16,414,475),8715=>array(52,0,524,538),8716=>array(52,-110,524,648),8717=>array(25,-11,411,480),8718=>array(57,0,443,691),8719=>array(24,-123,788,746),8720=>array(24,-123,788,746),8721=>array(14,-123,695,752),8722=>array(62,209,614,305),8723=>array(62,-44,614,558),8724=>array(62,-16,614,733),8725=>array(0,-12,537,688),8726=>array(0,-12,537,688),8727=>array(58,42,441,465),8728=>array(62,71,435,443),8729=>array(50,71,450,471),8730=>array(0,-35,550,900),8731=>array(0,-35,550,900),8732=>array(0,-35,550,900),8733=>array(22,42,635,456),8734=>array(22,42,723,456),8735=>array(62,0,447,385),8736=>array(62,0,493,547),8737=>array(62,0,493,547),8738=>array(62,-2,493,517),8739=>array(72,-162,168,678),8740=>array(0,-162,531,678),8741=>array(72,-162,406,678),8742=>array(0,-162,705,678),8743=>array(62,0,632,574),8744=>array(62,0,632,574),8745=>array(62,0,632,594),8746=>array(62,0,632,594),8747=>array(29,-200,558,900),8748=>array(29,-200,868,900),8749=>array(29,-200,1178,900),8756=>array(62,-9,566,497),8757=>array(62,-9,566,497),8760=>array(62,209,614,522),8761=>array(62,13,865,500),8763=>array(62,15,614,504),8764=>array(62,156,614,366),8765=>array(62,157,614,358),8766=>array(17,94,786,415),8768=>array(54,-11,251,574),8769=>array(62,38,614,476),8770=>array(62,87,614,480),8771=>array(62,87,614,480),8773=>array(62,0,614,567),8776=>array(62,35,614,488),8777=>array(62,-72,614,586),8778=>array(62,0,614,567),8781=>array(55,23,621,491),8782=>array(62,19,614,495),8783=>array(62,87,614,495),8784=>array(62,87,614,644),8785=>array(62,-130,614,644),8786=>array(62,-130,614,644),8787=>array(62,-130,614,644),8788=>array(82,11,885,500),8789=>array(82,14,885,503),8790=>array(62,87,614,428),8791=>array(62,87,614,712),8796=>array(62,87,614,776),8800=>array(33,-13,537,519),8801=>array(62,0,614,514),8802=>array(62,-72,614,586),8804=>array(31,0,539,642),8805=>array(31,0,539,642),8806=>array(62,-199,614,704),8807=>array(62,-199,614,704),8808=>array(62,-253,614,704),8809=>array(62,-253,614,704),8810=>array(52,-25,995,539),8811=>array(52,-25,995,539),8812=>array(62,-186,388,686),8813=>array(55,-72,621,586),8814=>array(62,-122,614,636),8815=>array(62,-122,614,636),8816=>array(62,-182,614,696),8817=>array(62,-182,614,696),8818=>array(62,-152,614,612),8819=>array(62,-152,614,612),8820=>array(62,-182,614,696),8821=>array(62,-182,614,696),8822=>array(62,-131,614,645),8823=>array(62,-131,614,645),8824=>array(62,-182,614,696),8825=>array(62,-182,614,696),8826=>array(62,-92,614,605),8827=>array(62,-92,614,605),8828=>array(62,-98,614,678),8829=>array(62,-98,614,678),8830=>array(62,-152,614,678),8831=>array(62,-152,614,678),8832=>array(62,-122,614,636),8833=>array(62,-122,614,636),8834=>array(52,0,624,538),8835=>array(52,0,624,538),8836=>array(52,-110,624,648),8837=>array(52,-110,624,648),8838=>array(52,-98,624,612),8839=>array(52,-98,624,612),8840=>array(52,-182,624,696),8841=>array(52,-182,624,696),8842=>array(52,-156,624,611),8843=>array(52,-156,624,611),8846=>array(62,0,632,594),8847=>array(52,0,624,538),8848=>array(52,0,624,538),8849=>array(52,-98,624,612),8850=>array(52,-98,624,612),8851=>array(62,0,632,566),8852=>array(62,0,632,566),8853=>array(17,-14,721,690),8854=>array(17,-14,721,690),8855=>array(17,-14,721,690),8856=>array(17,-14,721,690),8857=>array(17,-13,721,691),8858=>array(17,-12,721,692),8859=>array(17,-13,721,691),8861=>array(17,-14,721,690),8862=>array(62,0,616,554),8863=>array(62,0,616,554),8864=>array(62,0,616,554),8865=>array(62,0,616,554),8866=>array(62,0,425,514),8867=>array(62,0,425,514),8868=>array(62,0,690,550),8869=>array(62,0,690,550),8871=>array(62,0,425,514),8873=>array(62,0,597,514),8874=>array(62,0,769,514),8876=>array(2,0,525,514),8877=>array(2,0,525,514),8878=>array(2,0,697,514),8879=>array(2,0,697,514),8882=>array(62,-25,614,539),8883=>array(62,-25,614,539),8884=>array(62,-98,614,612),8885=>array(62,-98,614,612),8886=>array(62,86,1318,446),8887=>array(62,86,1318,446),8888=>array(62,86,965,446),8890=>array(108,-211,518,325),8891=>array(62,0,632,775),8892=>array(62,0,632,775),8893=>array(62,0,632,775),8900=>array(42,34,470,480),8903=>array(62,-56,614,570),8904=>array(62,10,697,504),8905=>array(62,54,570,460),8906=>array(62,54,570,460),8907=>array(52,-42,779,686),8908=>array(52,-42,779,686),8909=>array(62,87,614,480),8910=>array(20,0,714,553),8911=>array(20,0,714,553),8912=>array(52,0,624,538),8913=>array(52,0,624,538),8914=>array(62,0,632,594),8915=>array(62,0,632,594),8916=>array(62,0,632,732),8918=>array(62,-25,614,539),8919=>array(62,-25,614,539),8920=>array(52,-25,1389,540),8921=>array(52,-25,1389,540),8922=>array(62,-285,614,798),8923=>array(62,-285,614,798),8924=>array(62,-130,614,644),8925=>array(62,-130,614,644),8926=>array(62,-206,614,720),8927=>array(62,-206,614,720),8928=>array(62,-206,614,720),8929=>array(62,-206,614,720),8930=>array(52,-182,624,696),8931=>array(52,-182,624,696),8934=>array(62,-154,614,612),8935=>array(62,-154,614,612),8936=>array(62,-154,614,678),8937=>array(62,-154,614,678),8938=>array(62,-122,614,636),8939=>array(62,-122,614,636),8940=>array(62,-182,614,696),8941=>array(62,-182,614,696),8960=>array(62,-21,675,610),8968=>array(88,-184,377,656),8969=>array(34,-184,323,656),8970=>array(88,-184,377,656),8971=>array(34,-184,323,656),8976=>array(62,64,618,362),8994=>array(62,131,889,400),8995=>array(62,131,889,400),9001=>array(50,-162,348,679),9002=>array(50,-162,348,679),9251=>array(31,0,469,186),9472=>array(0,260,1000,340),9473=>array(0,220,1000,380),9474=>array(460,-200,540,800),9475=>array(420,-200,580,800),9476=>array(-1,260,1000,340),9477=>array(-1,220,1000,380),9478=>array(460,-200,540,800),9479=>array(420,-200,580,800),9480=>array(-1,260,1000,340),9481=>array(-1,220,1000,380),9482=>array(460,-200,540,800),9483=>array(420,-200,580,800),9484=>array(460,-200,1000,340),9485=>array(460,-200,1000,380),9486=>array(420,-200,1000,340),9487=>array(420,-200,1000,380),9488=>array(0,-200,540,340),9489=>array(0,-200,540,380),9490=>array(0,-200,580,340),9491=>array(0,-200,580,380),9492=>array(460,260,1000,800),9493=>array(460,220,1000,800),9494=>array(420,260,1000,800),9495=>array(420,220,1000,800),9496=>array(0,260,540,800),9497=>array(0,220,540,800),9498=>array(0,260,580,800),9499=>array(0,220,580,800),9500=>array(460,-200,1000,800),9501=>array(460,-200,1000,800),9502=>array(420,-200,1000,800),9503=>array(420,-200,1000,800),9504=>array(420,-200,1000,800),9505=>array(420,-200,1000,800),9506=>array(420,-200,1000,800),9507=>array(420,-200,1000,800),9508=>array(0,-200,540,800),9509=>array(0,-200,540,800),9510=>array(0,-200,580,800),9511=>array(0,-200,580,800),9512=>array(420,-200,1000,800),9513=>array(0,-200,580,800),9514=>array(0,-200,580,800),9515=>array(0,-200,580,800),9516=>array(0,-200,1000,340),9517=>array(0,-200,1000,380),9518=>array(0,-200,1000,380),9519=>array(0,-200,1000,380),9520=>array(0,-200,1000,340),9521=>array(0,-200,1000,380),9522=>array(0,-200,1000,380),9523=>array(0,-200,1000,380),9524=>array(0,260,1000,800),9525=>array(0,220,1000,800),9526=>array(0,220,1000,800),9527=>array(0,220,1000,800),9528=>array(0,260,1000,800),9529=>array(0,220,1000,800),9530=>array(0,220,1000,800),9531=>array(0,220,1000,800),9532=>array(0,-200,1000,800),9533=>array(0,-200,1000,800),9534=>array(0,-200,1000,800),9535=>array(0,-200,1000,800),9536=>array(0,-200,1000,800),9537=>array(0,-200,1000,800),9538=>array(0,-200,1000,800),9539=>array(0,-200,1000,800),9540=>array(0,-200,1000,800),9541=>array(0,-200,1000,800),9542=>array(0,-200,1000,800),9543=>array(0,-200,1000,800),9544=>array(0,-200,1000,800),9545=>array(0,-200,1000,800),9546=>array(0,-200,1000,800),9547=>array(0,-200,1000,800),9552=>array(0,180,1000,420),9553=>array(380,-200,620,800),9554=>array(460,-200,1000,420),9555=>array(380,-200,1000,340),9556=>array(380,-200,1000,420),9557=>array(0,-200,540,420),9558=>array(0,-200,620,340),9559=>array(0,-200,620,420),9560=>array(460,180,1000,800),9561=>array(380,260,1000,800),9562=>array(380,180,1000,800),9563=>array(0,180,540,800),9564=>array(0,260,620,800),9565=>array(0,180,620,800),9566=>array(460,-200,1000,800),9567=>array(380,-200,1000,800),9568=>array(380,-200,1000,800),9569=>array(0,-200,540,800),9570=>array(0,-200,620,800),9571=>array(0,-200,620,800),9572=>array(0,-200,1000,420),9573=>array(0,-200,1000,340),9574=>array(0,-200,1000,420),9575=>array(0,180,1000,800),9576=>array(0,260,1000,800),9577=>array(0,180,1000,800),9578=>array(0,-200,1000,800),9579=>array(0,-200,1000,800),9580=>array(0,-200,1000,800),9600=>array(0,300,1000,800),9601=>array(0,-200,1000,-75),9602=>array(0,-200,1000,50),9603=>array(0,-200,1000,175),9604=>array(0,-200,1000,300),9605=>array(0,-200,1000,425),9606=>array(0,-200,1000,550),9607=>array(0,-200,1000,675),9608=>array(0,-200,1000,800),9609=>array(0,-200,875,800),9610=>array(0,-200,795,800),9611=>array(0,-200,625,800),9612=>array(0,-200,500,800),9613=>array(0,-200,375,800),9614=>array(0,-200,250,800),9615=>array(0,-200,125,800),9616=>array(500,-200,1000,800),9617=>array(0,-200,950,750),9618=>array(0,-200,1000,750),9619=>array(0,-200,1000,800),9620=>array(0,675,1000,800),9621=>array(875,-200,1000,800),9622=>array(0,-200,500,300),9623=>array(500,-200,1000,300),9624=>array(500,300,1000,800),9625=>array(0,-200,1000,800),9626=>array(0,-200,1000,800),9627=>array(0,-200,1000,800),9628=>array(0,-200,1000,800),9629=>array(0,300,500,800),9630=>array(0,-200,1000,800),9631=>array(0,-200,1000,800),9632=>array(62,-20,616,534),9633=>array(62,-20,616,534),9642=>array(62,0,247,182),9644=>array(35,-20,790,534),9645=>array(35,-20,790,534),9646=>array(62,-64,616,691),9647=>array(62,-61,616,694),9650=>array(26,0,814,674),9651=>array(57,-21,624,537),9654=>array(83,-215,757,573),9655=>array(61,-26,619,541),9660=>array(-133,-158,655,516),9661=>array(57,-21,624,537),9664=>array(-76,-57,598,731),9665=>array(61,-25,619,542),9670=>array(42,-133,538,647),9671=>array(42,-133,538,647),9674=>array(18,0,466,740),9675=>array(6,-83,786,697),9676=>array(2,-58,790,730),9679=>array(17,-15,721,689),9688=>array(0,0,500,673),9702=>array(50,101,450,501),9711=>array(13,-75,842,754),9733=>array(44,-83,959,735),9734=>array(44,-83,959,735),9824=>array(42,0,576,555),9825=>array(42,-34,603,561),9826=>array(42,-31,545,590),9827=>array(43,0,540,588),9828=>array(3,-40,580,680),9829=>array(42,-34,603,561),9830=>array(42,-31,545,590),9831=>array(2,-40,616,595),9833=>array(38,0,277,694),9834=>array(55,0,514,694),9835=>array(55,0,696,729),9836=>array(55,0,696,729),9837=>array(96,-36,457,730),9838=>array(130,-214,413,712),9839=>array(86,-197,460,762),10214=>array(88,-149,527,678),10215=>array(34,-149,473,678),11392=>array(35,-11,738,691),11393=>array(35,-7,555,473),11394=>array(35,-14,509,692),11395=>array(35,-11,418,473),11396=>array(35,-10,575,676),11397=>array(22,-7,411,461),11398=>array(22,-71,1027,692),11399=>array(13,-55,748,473),11400=>array(35,-15,646,693),11401=>array(35,-10,467,473),11402=>array(35,-34,560,691),11403=>array(35,-32,392,473),11404=>array(22,-146,575,691),11405=>array(22,-96,463,473),11406=>array(32,-10,666,691),11407=>array(32,-7,497,474),11408=>array(35,-14,719,691),11409=>array(35,-10,520,472),11410=>array(65,-13,278,691),11411=>array(52,-13,206,473),11412=>array(32,-7,664,692),11413=>array(35,-16,516,473),11414=>array(22,-137,815,800),11415=>array(13,-116,621,566),11416=>array(32,-10,767,690),11417=>array(32,-14,577,473),11418=>array(32,-10,676,691),11419=>array(32,-14,505,473),11420=>array(6,-145,555,690),11421=>array(12,-105,421,472),11422=>array(35,-19,743,691),11423=>array(32,-13,509,474),11424=>array(32,-10,692,676),11425=>array(22,-13,502,461),11426=>array(41,-181,510,691),11427=>array(16,-220,411,473),11428=>array(35,-15,646,693),11429=>array(35,-10,473,473),11430=>array(32,-10,582,678),11431=>array(12,-7,421,461),11432=>array(17,-181,742,691),11433=>array(12,-220,577,473),11434=>array(35,-181,765,800),11435=>array(35,-220,635,566),11436=>array(22,-137,791,691),11437=>array(16,-116,601,473),11438=>array(12,-181,789,800),11439=>array(22,-220,597,566),11440=>array(35,-15,967,691),11441=>array(35,-10,708,473),11517=>array(12,59,254,392),11518=>array(140,-5,547,691),11519=>array(12,474,286,689),11799=>array(48,36,283,408),42560=>array(28,-175,604,676),42561=>array(21,-175,419,461),42571=>array(30,-14,470,726),42576=>array(22,0,1100,676),42577=>array(19,0,862,461),42580=>array(35,-19,1092,691),42581=>array(25,-14,746,473),42582=>array(16,0,1069,690),42583=>array(12,-14,758,473),42600=>array(35,-19,743,691),42601=>array(25,-14,476,473),42790=>array(16,-230,754,676),42791=>array(16,-203,485,676),42792=>array(20,0,929,676),42793=>array(18,-12,728,630),42794=>array(34,-19,604,691),42795=>array(22,-14,430,673),42796=>array(19,-106,412,688),42797=>array(21,-205,356,461),42798=>array(19,-180,635,688),42799=>array(21,-205,585,461),42888=>array(-2,-81,335,95),42889=>array(82,-13,251,472),42890=>array(31,87,307,427),42891=>array(90,177,259,760),42892=>array(90,375,259,760),42893=>array(16,0,754,676),42896=>array(16,-200,701,676),42897=>array(21,-142,546,473),42922=>array(10,0,905,676),43002=>array(18,-11,814,462),64256=>array(18,0,670,691),64257=>array(18,0,540,691),64258=>array(18,0,540,691),64259=>array(18,0,817,691),64260=>array(18,0,817,691),64261=>array(18,-12,606,691),64262=>array(35,-14,733,760),64275=>array(15,-14,1090,676),64276=>array(15,-14,1090,676),64277=>array(15,-200,1084,676),64278=>array(15,-200,1090,676),64279=>array(15,-200,1345,676),64285=>array(29,159,235,645),64286=>array(248,652,462,724),64287=>array(29,160,501,645),64288=>array(30,0,520,644),64297=>array(33,209,537,506),64298=>array(33,0,683,705),64299=>array(33,0,683,705),64300=>array(33,0,683,705),64301=>array(33,0,683,705),64302=>array(41,-110,554,644),64303=>array(41,-235,554,644),64304=>array(41,-127,554,644),64305=>array(21,0,495,645),64306=>array(9,-1,317,644),64307=>array(32,-5,485,645),64308=>array(40,-5,521,645),64309=>array(31,-5,223,644),64310=>array(5,-7,258,644),64312=>array(33,0,557,644),64313=>array(26,301,235,645),64314=>array(32,-285,458,645),64315=>array(18,0,480,645),64316=>array(33,-5,477,899),64318=>array(39,0,568,637),64320=>array(6,0,315,644),64321=>array(45,0,490,645),64323=>array(38,-280,468,645),64324=>array(16,0,468,644),64326=>array(36,0,523,645),64327=>array(44,-300,524,645),64328=>array(32,-5,472,645),64329=>array(0,0,650,645),64330=>array(8,-5,540,645),64331=>array(31,-5,230,720),64332=>array(21,0,495,709),64333=>array(18,0,480,709),64334=>array(16,0,468,709),64335=>array(52,0,554,899),64336=>array(0,-61,296,864),64337=>array(0,-2,296,874),64338=>array(74,-291,896,351),64339=>array(74,-291,896,351),64340=>array(-5,-291,298,333),64341=>array(-5,-291,344,333),64342=>array(76,-284,898,351),64343=>array(76,-284,898,351),64344=>array(-5,-284,298,333),64345=>array(-5,-284,344,333),64346=>array(75,-300,897,351),64347=>array(75,-300,897,351),64348=>array(-18,-300,338,333),64349=>array(-21,-300,344,333),64350=>array(75,0,897,584),64351=>array(75,0,897,584),64352=>array(-5,0,298,634),64353=>array(-5,0,344,644),64354=>array(75,0,897,628),64355=>array(75,0,897,628),64356=>array(-24,0,332,659),64357=>array(-21,0,344,659),64358=>array(75,0,897,617),64359=>array(75,0,897,617),64360=>array(-5,0,298,697),64361=>array(-5,0,344,697),64362=>array(75,0,868,693),64363=>array(75,0,881,693),64364=>array(-5,0,308,673),64365=>array(-23,0,351,673),64366=>array(75,0,868,764),64367=>array(75,0,881,739),64368=>array(-5,0,352,779),64369=>array(-23,0,352,719),64370=>array(75,-260,655,449),64371=>array(75,-260,693,449),64372=>array(-15,-251,602,389),64373=>array(-15,-251,622,389),64374=>array(75,-260,655,449),64375=>array(75,-260,693,449),64376=>array(-15,-157,602,389),64377=>array(-15,-157,622,389),64378=>array(75,-260,655,449),64379=>array(75,-260,693,449),64380=>array(-15,-234,602,389),64381=>array(-15,-234,622,389),64382=>array(75,-260,655,449),64383=>array(75,-260,693,449),64384=>array(-15,-270,602,389),64385=>array(-15,-270,622,389),64386=>array(75,-207,418,399),64387=>array(75,-207,418,399),64388=>array(75,0,418,650),64389=>array(75,0,418,650),64390=>array(75,0,418,713),64391=>array(75,0,418,713),64392=>array(75,0,418,747),64393=>array(75,0,418,747),64394=>array(0,-247,355,593),64395=>array(0,-247,355,593),64396=>array(0,-247,358,637),64397=>array(0,-247,358,637),64398=>array(74,0,901,701),64399=>array(74,0,950,701),64400=>array(-5,0,451,701),64401=>array(-5,0,489,701),64402=>array(74,0,901,819),64403=>array(74,0,950,820),64404=>array(-5,0,451,818),64405=>array(-5,0,489,820),64406=>array(74,-291,901,819),64407=>array(74,-291,950,820),64408=>array(-5,-291,451,818),64409=>array(-5,-291,489,820),64410=>array(74,0,901,819),64411=>array(74,0,950,820),64412=>array(-5,0,451,850),64413=>array(-5,0,489,850),64414=>array(74,-194,601,358),64415=>array(74,-194,601,358),64416=>array(74,-194,601,657),64417=>array(74,-194,601,657),64418=>array(-5,0,298,664),64419=>array(-5,0,344,664),64420=>array(75,-10,364,559),64421=>array(65,0,433,749),64422=>array(67,0,394,403),64423=>array(75,-52,399,142),64424=>array(-4,-207,288,146),64425=>array(-4,-207,314,142),64426=>array(-21,0,417,398),64427=>array(-21,0,417,398),64428=>array(-10,-1,490,418),64429=>array(45,-236,491,355),64430=>array(75,-170,752,280),64431=>array(87,-170,752,105),64432=>array(75,-170,752,530),64433=>array(87,-170,752,460),64434=>array(130,433,261,560),64435=>array(130,-217,261,-90),64436=>array(120,433,386,560),64437=>array(120,-227,386,-100),64438=>array(143,443,418,673),64439=>array(143,-277,418,-47),64440=>array(90,436,365,666),64441=>array(90,-284,365,-54),64442=>array(93,219,449,498),64443=>array(73,-300,429,-21),64444=>array(34,-298,250,-41),64445=>array(104,446,292,694),64446=>array(104,-291,292,-43),64447=>array(99,-260,242,-92),64448=>array(57,388,290,657),64449=>array(57,-300,290,-31),64467=>array(75,0,660,873),64468=>array(75,0,660,883),64469=>array(-5,0,451,860),64470=>array(-5,0,489,868),64471=>array(3,-270,329,581),64472=>array(3,-270,329,581),64473=>array(3,-270,329,532),64474=>array(3,-270,329,532),64475=>array(3,-270,329,557),64476=>array(3,-270,329,557),64477=>array(3,-270,461,581),64478=>array(3,-270,329,583),64479=>array(3,-270,329,583),64480=>array(3,-270,329,269),64481=>array(3,-270,329,269),64482=>array(3,-270,329,502),64483=>array(3,-270,329,502),64484=>array(75,-300,736,330),64485=>array(75,-470,725,176),64486=>array(-32,-291,271,333),64487=>array(-5,-291,344,333),64488=>array(-32,0,271,333),64489=>array(-5,0,344,333),64508=>array(75,-166,722,330),64509=>array(75,-256,725,176),64510=>array(-32,-216,299,333),64511=>array(-5,-227,344,333),65010=>array(75,0,1036,900),65020=>array(75,-247,1095,700),65136=>array(74,674,269,895),65137=>array(-5,0,413,895),65138=>array(72,666,316,900),65139=>array(33,0,373,290),65140=>array(44,-300,239,-79),65142=>array(74,704,269,835),65143=>array(-5,0,413,835),65144=>array(31,651,225,900),65145=>array(-5,0,413,900),65146=>array(74,-296,269,-165),65147=>array(-5,-296,413,110),65148=>array(75,721,259,880),65149=>array(-5,0,413,880),65150=>array(106,693,246,850),65151=>array(-5,0,413,850),65152=>array(86,-79,333,292),65153=>array(0,-61,282,824),65154=>array(0,-2,282,824),65155=>array(53,-61,217,900),65156=>array(46,-2,252,900),65157=>array(3,-270,329,579),65158=>array(3,-270,329,539),65159=>array(86,-300,250,696),65160=>array(57,-292,252,700),65161=>array(75,-166,722,533),65162=>array(75,-166,725,503),65163=>array(-32,0,271,600),65164=>array(-5,0,344,600),65165=>array(109,-61,214,696),65166=>array(92,-2,252,700),65167=>array(75,-217,899,360),65168=>array(75,-217,972,351),65169=>array(-5,-217,298,333),65170=>array(-5,-217,344,333),65171=>array(67,0,394,610),65172=>array(65,0,433,610),65173=>array(75,0,897,490),65174=>array(75,0,972,489),65175=>array(-5,0,304,549),65176=>array(-5,0,344,549),65177=>array(75,0,897,563),65178=>array(75,0,972,583),65179=>array(-5,0,328,653),65180=>array(-5,0,344,653),65181=>array(75,-260,655,449),65182=>array(75,-260,693,449),65183=>array(-25,-147,592,389),65184=>array(-15,-147,622,389),65185=>array(75,-260,655,449),65186=>array(75,-260,693,449),65187=>array(-15,0,602,389),65188=>array(-15,0,622,389),65189=>array(75,-260,655,640),65190=>array(75,-260,693,640),65191=>array(-15,0,602,580),65192=>array(-15,0,622,580),65193=>array(75,0,418,399),65194=>array(75,0,418,399),65195=>array(75,0,418,631),65196=>array(75,0,418,631),65197=>array(0,-247,355,268),65198=>array(0,-247,355,268),65199=>array(0,-247,355,478),65200=>array(0,-247,355,478),65201=>array(74,-241,911,244),65202=>array(74,-241,911,244),65203=>array(-10,0,611,244),65204=>array(-10,0,611,244),65205=>array(74,-241,911,503),65206=>array(74,-241,911,503),65207=>array(-10,0,611,503),65208=>array(-10,0,611,503),65209=>array(75,-242,909,260),65210=>array(75,-242,909,260),65211=>array(-10,0,823,287),65212=>array(-10,0,823,287),65213=>array(75,-242,909,460),65214=>array(75,-242,909,460),65215=>array(-10,0,823,536),65216=>array(-10,0,823,536),65217=>array(0,0,568,711),65218=>array(25,0,568,711),65219=>array(-5,0,514,711),65220=>array(-5,0,514,711),65221=>array(0,0,568,711),65222=>array(25,0,568,711),65223=>array(-5,0,514,711),65224=>array(-5,0,514,711),65225=>array(75,-300,595,436),65226=>array(75,-300,601,336),65227=>array(-7,0,673,355),65228=>array(-5,0,522,322),65229=>array(75,-300,595,610),65230=>array(75,-300,601,550),65231=>array(-7,0,673,550),65232=>array(-5,0,522,540),65233=>array(75,0,868,600),65234=>array(75,0,881,600),65235=>array(-5,0,308,630),65236=>array(-23,0,351,590),65237=>array(75,-170,635,510),65238=>array(75,-170,635,510),65239=>array(-5,0,308,609),65240=>array(-23,0,351,579),65241=>array(-5,0,456,675),65242=>array(75,0,660,675),65243=>array(-5,0,451,701),65244=>array(-5,0,489,701),65245=>array(75,-240,601,688),65246=>array(75,-240,677,688),65247=>array(-5,0,238,688),65248=>array(-5,0,285,688),65249=>array(75,-298,489,451),65250=>array(75,-300,478,260),65251=>array(-5,-15,444,267),65252=>array(-5,-10,539,289),65253=>array(74,-194,601,498),65254=>array(74,-194,601,498),65255=>array(-5,0,298,527),65256=>array(-5,0,344,527),65257=>array(67,0,394,403),65258=>array(65,0,433,407),65259=>array(-21,0,417,398),65260=>array(-5,-236,411,355),65261=>array(3,-270,329,269),65262=>array(75,-270,401,269),65263=>array(75,-166,722,330),65264=>array(75,-166,725,307),65265=>array(75,-300,722,330),65266=>array(75,-300,725,307),65267=>array(-32,-227,276,333),65268=>array(-5,-227,344,333),65269=>array(0,0,464,772),65270=>array(39,0,619,772),65271=>array(4,0,464,900),65272=>array(39,0,619,890),65273=>array(12,-292,464,696),65274=>array(39,-292,619,694),65275=>array(12,0,464,696),65276=>array(39,0,619,694),65532=>array(84,-26,768,669),65533=>array(22,-63,885,800),65535=>array(23,-81,577,774)); +$cw=array(0=>600,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333,42=>507,43=>676,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>676,61=>676,62=>676,63=>500,64=>930,65=>721,66=>658,67=>708,68=>731,69=>671,70=>617,71=>776,72=>778,73=>390,74=>501,75=>774,76=>668,77=>947,78=>725,79=>778,80=>639,81=>778,82=>719,83=>568,84=>645,85=>725,86=>705,87=>982,88=>713,89=>704,90=>646,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>545,99=>435,100=>552,101=>444,102=>393,103=>500,104=>554,105=>299,106=>400,107=>555,108=>277,109=>832,110=>554,111=>501,112=>545,113=>545,114=>427,115=>406,116=>335,117=>564,118=>482,119=>702,120=>508,121=>482,122=>444,123=>394,124=>220,125=>394,126=>520,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500,172=>680,173=>333,174=>747,175=>333,176=>400,177=>676,178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>270,186=>330,187=>500,188=>750,189=>770,190=>750,191=>500,192=>721,193=>721,194=>721,195=>721,196=>721,197=>721,198=>987,199=>708,200=>671,201=>671,202=>671,203=>671,204=>390,205=>390,206=>390,207=>390,208=>731,209=>725,210=>778,211=>778,212=>778,213=>778,214=>778,215=>676,216=>778,217=>725,218=>725,219=>725,220=>725,221=>704,222=>639,223=>553,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>703,231=>435,232=>444,233=>444,234=>444,235=>444,236=>299,237=>299,238=>299,239=>299,240=>501,241=>554,242=>501,243=>501,244=>501,245=>501,246=>501,247=>676,248=>501,249=>564,250=>564,251=>564,252=>564,253=>482,254=>548,255=>482,256=>721,257=>500,258=>721,259=>500,260=>722,261=>500,262=>708,263=>435,264=>708,265=>435,266=>708,267=>435,268=>708,269=>435,270=>722,271=>692,272=>731,273=>556,274=>671,275=>444,276=>671,277=>444,278=>671,279=>444,280=>669,281=>444,282=>671,283=>444,284=>776,285=>500,286=>776,287=>500,288=>776,289=>500,290=>776,291=>500,292=>778,293=>554,294=>778,295=>556,296=>390,297=>299,298=>390,299=>299,300=>390,301=>299,302=>389,303=>299,304=>390,305=>299,306=>882,307=>610,308=>501,309=>397,310=>774,311=>555,312=>534,313=>668,314=>277,315=>668,316=>277,317=>668,318=>433,319=>668,320=>457,321=>667,322=>278,323=>725,324=>554,325=>725,326=>554,327=>725,328=>554,329=>626,330=>829,331=>556,332=>778,333=>501,334=>778,335=>501,336=>778,337=>501,338=>1000,339=>717,340=>719,341=>427,342=>719,343=>427,344=>719,345=>427,346=>568,347=>406,348=>568,349=>406,350=>556,351=>389,352=>568,353=>406,354=>645,355=>335,356=>645,357=>467,358=>667,359=>337,360=>725,361=>564,362=>725,363=>564,364=>725,365=>564,366=>725,367=>564,368=>725,369=>564,370=>725,371=>561,372=>982,373=>702,374=>704,375=>482,376=>704,377=>646,378=>444,379=>646,380=>444,381=>646,382=>444,383=>337,384=>556,385=>802,386=>659,387=>556,388=>667,389=>556,390=>708,391=>901,392=>605,393=>731,394=>875,395=>658,396=>554,397=>525,398=>665,399=>778,400=>622,401=>735,402=>383,403=>901,404=>782,405=>811,406=>327,407=>389,408=>846,409=>556,410=>298,411=>495,412=>976,413=>864,414=>556,415=>778,416=>793,417=>574,418=>1177,419=>794,420=>749,421=>556,422=>748,423=>568,424=>406,425=>650,426=>465,427=>343,428=>719,429=>391,430=>667,431=>768,432=>620,433=>770,434=>685,435=>833,436=>695,437=>667,438=>444,439=>593,440=>639,441=>508,442=>482,443=>500,444=>641,445=>520,446=>444,447=>611,448=>220,449=>418,450=>570,451=>333,452=>1331,453=>1158,454=>990,455=>1134,456=>987,457=>610,458=>1200,459=>1025,460=>889,461=>721,462=>500,463=>390,464=>299,465=>778,466=>501,467=>725,468=>564,469=>722,470=>564,471=>722,472=>564,473=>722,474=>564,475=>722,476=>564,477=>444,478=>721,479=>500,480=>722,481=>500,482=>987,483=>703,484=>778,485=>500,486=>776,487=>500,488=>774,489=>555,490=>778,491=>501,492=>778,493=>501,494=>593,495=>502,496=>397,497=>1331,498=>1158,499=>990,500=>776,501=>500,502=>995,503=>603,504=>725,505=>554,506=>722,507=>500,508=>987,509=>703,510=>778,511=>501,512=>721,513=>500,514=>721,515=>500,516=>671,517=>444,518=>671,519=>444,520=>390,521=>299,522=>390,523=>299,524=>778,525=>501,526=>778,527=>501,528=>719,529=>427,530=>719,531=>427,532=>725,533=>564,534=>725,535=>564,536=>568,537=>406,538=>645,539=>335,540=>464,541=>453,542=>778,543=>554,544=>731,545=>649,546=>568,547=>494,548=>667,549=>444,550=>721,551=>500,552=>667,553=>444,554=>778,555=>501,556=>778,557=>501,558=>778,559=>501,560=>778,561=>501,562=>704,563=>482,564=>437,565=>636,566=>413,567=>397,568=>776,569=>760,570=>722,571=>722,572=>444,573=>664,574=>667,575=>409,576=>451,577=>505,578=>479,579=>656,580=>750,581=>705,582=>667,583=>478,584=>500,585=>333,586=>760,587=>588,588=>712,589=>444,590=>722,591=>500,592=>500,593=>523,594=>523,595=>556,596=>434,597=>468,598=>633,599=>654,600=>444,601=>444,602=>611,603=>438,604=>440,605=>611,606=>459,607=>333,608=>660,609=>500,610=>549,611=>499,612=>582,613=>554,614=>556,615=>556,616=>303,617=>333,618=>293,619=>369,620=>397,621=>344,622=>667,623=>832,624=>833,625=>833,626=>626,627=>633,628=>502,629=>501,630=>744,631=>715,632=>711,633=>427,634=>444,635=>524,636=>444,637=>428,638=>394,639=>394,640=>538,641=>538,642=>406,643=>410,644=>406,645=>507,646=>499,647=>335,648=>392,649=>500,650=>557,651=>533,652=>482,653=>702,654=>482,655=>516,656=>672,657=>492,658=>502,659=>502,660=>438,661=>438,662=>438,663=>444,664=>778,665=>507,666=>460,667=>722,668=>582,669=>438,670=>555,671=>483,672=>604,673=>438,674=>438,675=>872,676=>878,677=>926,678=>654,679=>624,680=>722,681=>825,682=>646,683=>604,684=>490,685=>500,686=>611,687=>713,688=>367,689=>378,690=>243,691=>300,692=>291,693=>337,694=>368,695=>476,696=>330,697=>250,698=>500,699=>250,700=>250,701=>250,702=>300,703=>300,704=>333,705=>333,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>200,713=>333,714=>333,715=>333,716=>200,717=>333,718=>333,719=>333,720=>250,721=>250,722=>300,723=>300,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>352,736=>350,737=>181,738=>257,739=>333,740=>300,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>480,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261,757=>333,758=>333,759=>400,760=>333,761=>175,762=>175,763=>175,764=>175,765=>333,766=>337,767=>432,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>200,890=>0,894=>333,900=>330,901=>415,902=>721,903=>250,904=>811,905=>938,906=>556,908=>840,910=>886,911=>879,912=>330,913=>721,914=>658,915=>611,916=>759,917=>671,918=>646,919=>778,920=>778,921=>390,922=>774,923=>722,924=>947,925=>725,926=>650,927=>778,928=>812,929=>639,931=>650,932=>645,933=>738,934=>868,935=>713,936=>924,937=>811,938=>390,939=>738,940=>605,941=>440,942=>605,943=>330,944=>550,945=>605,946=>550,947=>550,948=>550,949=>440,950=>495,951=>605,952=>550,953=>330,954=>608,955=>495,956=>605,957=>495,958=>495,959=>550,960=>605,961=>550,962=>440,963=>550,964=>440,965=>550,966=>660,967=>495,968=>715,969=>715,970=>330,971=>550,972=>550,973=>550,974=>715,976=>550,977=>605,978=>722,979=>871,980=>722,981=>660,982=>715,983=>550,984=>611,985=>550,986=>650,987=>514,988=>611,989=>513,990=>715,991=>439,992=>722,993=>605,994=>1022,995=>715,996=>626,997=>576,998=>616,999=>544,1000=>539,1001=>441,1002=>932,1003=>653,1004=>593,1005=>513,1006=>654,1007=>517,1008=>550,1009=>550,1010=>477,1011=>400,1012=>778,1013=>424,1014=>424,1015=>639,1016=>575,1017=>722,1018=>943,1019=>809,1020=>550,1021=>722,1022=>722,1023=>722,1024=>666,1025=>666,1026=>852,1027=>617,1028=>733,1029=>568,1030=>400,1031=>400,1032=>513,1033=>1062,1034=>1057,1035=>899,1036=>769,1037=>788,1038=>731,1039=>788,1040=>704,1041=>659,1042=>678,1043=>617,1044=>718,1045=>666,1046=>1104,1047=>654,1048=>788,1049=>788,1050=>769,1051=>793,1052=>957,1053=>788,1054=>828,1055=>814,1056=>659,1057=>733,1058=>649,1059=>731,1060=>864,1061=>713,1062=>788,1063=>768,1064=>1129,1065=>1129,1066=>794,1067=>984,1068=>659,1069=>747,1070=>1136,1071=>734,1072=>528,1073=>567,1074=>545,1075=>439,1076=>565,1077=>511,1078=>805,1079=>495,1080=>572,1081=>572,1082=>566,1083=>551,1084=>682,1085=>572,1086=>571,1087=>572,1088=>591,1089=>495,1090=>501,1091=>482,1092=>879,1093=>508,1094=>566,1095=>564,1096=>833,1097=>827,1098=>647,1099=>764,1100=>545,1101=>539,1102=>800,1103=>563,1104=>511,1105=>511,1106=>592,1107=>439,1108=>539,1109=>436,1110=>291,1111=>299,1112=>400,1113=>812,1114=>824,1115=>570,1116=>566,1117=>572,1118=>482,1119=>572,1120=>1066,1121=>769,1122=>796,1123=>648,1124=>1033,1125=>778,1126=>977,1127=>685,1128=>1363,1129=>971,1130=>1086,1131=>778,1132=>1466,1133=>1062,1134=>650,1135=>462,1136=>974,1137=>771,1138=>828,1139=>661,1140=>808,1141=>578,1142=>808,1143=>590,1144=>1214,1145=>962,1146=>992,1147=>744,1148=>1066,1149=>769,1150=>1066,1151=>769,1152=>694,1153=>483,1154=>258,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>788,1163=>569,1164=>659,1165=>548,1166=>659,1167=>594,1168=>618,1169=>459,1170=>618,1171=>439,1172=>666,1173=>585,1174=>1155,1175=>843,1176=>670,1177=>495,1178=>833,1179=>610,1180=>815,1181=>597,1182=>901,1183=>676,1184=>874,1185=>636,1186=>788,1187=>572,1188=>986,1189=>693,1190=>1086,1191=>864,1192=>913,1193=>666,1194=>733,1195=>495,1196=>649,1197=>501,1198=>712,1199=>609,1200=>712,1201=>609,1202=>790,1203=>567,1204=>1043,1205=>785,1206=>768,1207=>562,1208=>824,1209=>598,1210=>768,1211=>570,1212=>960,1213=>637,1214=>960,1215=>637,1216=>400,1217=>1104,1218=>805,1219=>742,1220=>557,1221=>793,1222=>551,1223=>788,1224=>570,1225=>788,1226=>572,1227=>768,1228=>564,1229=>957,1230=>682,1231=>400,1232=>704,1233=>528,1234=>704,1235=>528,1236=>989,1237=>725,1238=>667,1239=>511,1240=>828,1241=>511,1242=>778,1243=>511,1244=>1104,1245=>805,1246=>654,1247=>495,1248=>626,1249=>472,1250=>788,1251=>572,1252=>788,1253=>572,1254=>828,1255=>571,1256=>828,1257=>571,1258=>778,1259=>571,1260=>747,1261=>539,1262=>731,1263=>482,1264=>731,1265=>482,1266=>731,1267=>500,1268=>768,1269=>564,1270=>627,1271=>435,1272=>984,1273=>764,1281=>544,1296=>660,1297=>495,1298=>793,1299=>551,1306=>778,1307=>588,1308=>994,1309=>716,1310=>769,1311=>566,1329=>889,1330=>787,1331=>858,1332=>941,1333=>775,1334=>765,1335=>805,1336=>762,1337=>938,1338=>869,1339=>765,1340=>756,1341=>966,1342=>992,1343=>748,1344=>469,1345=>731,1346=>941,1347=>745,1348=>966,1349=>641,1350=>929,1351=>774,1352=>779,1353=>784,1354=>841,1355=>775,1356=>955,1357=>779,1358=>927,1359=>555,1360=>763,1361=>641,1362=>656,1363=>824,1364=>869,1365=>768,1366=>754,1369=>300,1370=>300,1371=>270,1372=>307,1373=>270,1374=>324,1375=>322,1377=>818,1378=>548,1379=>601,1380=>608,1381=>551,1382=>547,1383=>496,1384=>548,1385=>586,1386=>585,1387=>548,1388=>269,1389=>798,1390=>594,1391=>544,1392=>548,1393=>513,1394=>583,1395=>560,1396=>551,1397=>397,1398=>567,1399=>447,1400=>548,1401=>411,1402=>810,1403=>464,1404=>548,1405=>551,1406=>595,1407=>821,1408=>548,1409=>557,1410=>312,1411=>821,1412=>550,1413=>511,1414=>668,1415=>602,1417=>333,1418=>349,1423=>818,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561,1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581,1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502,1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,1536=>600,1537=>1000,1538=>800,1539=>800,1542=>549,1543=>549,1544=>724,1545=>599,1546=>729,1547=>635,1548=>226,1549=>344,1550=>640,1551=>616,1552=>0,1553=>0,1554=>0,1555=>0,1556=>0,1557=>0,1558=>0,1559=>0,1560=>0,1561=>0,1562=>0,1563=>333,1566=>407,1567=>500,1568=>742,1569=>350,1570=>264,1571=>264,1572=>329,1573=>264,1574=>742,1575=>264,1576=>899,1577=>424,1578=>897,1579=>897,1580=>655,1581=>655,1582=>655,1583=>397,1584=>397,1585=>358,1586=>331,1587=>901,1588=>901,1589=>909,1590=>909,1591=>557,1592=>550,1593=>595,1594=>602,1595=>901,1596=>901,1597=>742,1598=>742,1599=>742,1600=>408,1601=>858,1602=>635,1603=>446,1604=>601,1605=>489,1606=>591,1607=>424,1608=>329,1609=>742,1610=>742,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1622=>0,1623=>0,1624=>0,1625=>0,1626=>0,1627=>0,1628=>0,1629=>0,1630=>0,1631=>0,1632=>500,1633=>500,1634=>500,1635=>500,1636=>500,1637=>500,1638=>500,1639=>500,1640=>500,1641=>500,1642=>449,1643=>212,1644=>235,1645=>487,1646=>899,1647=>665,1648=>0,1649=>264,1650=>264,1651=>264,1652=>300,1653=>356,1654=>472,1655=>462,1656=>752,1657=>897,1658=>897,1659=>897,1660=>897,1661=>897,1662=>899,1663=>897,1664=>897,1665=>655,1666=>655,1667=>655,1668=>655,1669=>655,1670=>655,1671=>655,1672=>397,1673=>397,1674=>397,1675=>397,1676=>397,1677=>397,1678=>397,1679=>397,1680=>397,1681=>358,1682=>358,1683=>355,1684=>358,1685=>520,1686=>358,1687=>345,1688=>345,1689=>345,1690=>901,1691=>901,1692=>901,1693=>909,1694=>909,1695=>557,1696=>595,1697=>858,1698=>858,1699=>858,1700=>858,1701=>858,1702=>858,1703=>635,1704=>665,1705=>901,1706=>1108,1707=>901,1708=>446,1709=>446,1710=>446,1711=>901,1712=>901,1713=>901,1714=>901,1715=>901,1716=>901,1717=>601,1718=>601,1719=>601,1720=>601,1721=>591,1722=>591,1723=>591,1724=>591,1725=>591,1726=>470,1727=>655,1728=>394,1729=>399,1730=>399,1731=>399,1732=>329,1733=>329,1734=>329,1735=>329,1736=>329,1737=>329,1738=>329,1739=>329,1740=>742,1741=>776,1742=>742,1743=>329,1744=>742,1745=>742,1746=>752,1747=>752,1748=>395,1749=>394,1750=>0,1751=>0,1752=>0,1753=>0,1754=>0,1755=>0,1756=>0,1757=>1132,1758=>970,1759=>0,1760=>0,1761=>0,1762=>0,1763=>0,1764=>321,1765=>329,1766=>500,1767=>0,1768=>0,1769=>760,1770=>0,1771=>0,1772=>0,1773=>0,1774=>397,1775=>338,1776=>500,1777=>500,1778=>500,1779=>500,1780=>500,1781=>500,1782=>500,1783=>500,1784=>500,1785=>500,1786=>901,1787=>909,1788=>602,1789=>300,1790=>300,1791=>447,1872=>897,1873=>897,1874=>897,1875=>897,1876=>897,1877=>897,1878=>897,1879=>655,1880=>655,1881=>397,1882=>397,1883=>418,1884=>901,1885=>595,1886=>595,1887=>595,1888=>858,1889=>858,1890=>901,1891=>901,1892=>901,1893=>489,1894=>489,1895=>591,1896=>591,1897=>591,1898=>658,1899=>358,1900=>358,1901=>901,1902=>655,1903=>655,1904=>901,1905=>358,1906=>655,1907=>264,1908=>264,1909=>742,1910=>742,1911=>792,1912=>329,1913=>329,1914=>752,1915=>752,1916=>655,1917=>901,1918=>901,1919=>446,1920=>450,1921=>501,1922=>582,1923=>544,1924=>482,1925=>433,1926=>448,1927=>462,1928=>474,1929=>471,1930=>469,1931=>537,1932=>499,1933=>514,1934=>471,1935=>572,1936=>880,1937=>440,1938=>476,1939=>594,1940=>469,1941=>448,1942=>441,1943=>519,1944=>573,1945=>459,1946=>447,1947=>496,1948=>541,1949=>887,1950=>883,1951=>964,1952=>558,1953=>505,1954=>471,1955=>554,1956=>459,1957=>486,1958=>36,1959=>36,1960=>43,1961=>45,1962=>43,1963=>45,1964=>45,1965=>45,1966=>45,1967=>45,1968=>0,1969=>412,2304=>0,2305=>0,2306=>0,2307=>398,2308=>862,2309=>862,2310=>1092,2311=>575,2312=>575,2313=>597,2314=>848,2315=>968,2316=>828,2317=>655,2318=>655,2319=>655,2320=>655,2321=>1092,2322=>1092,2323=>1092,2324=>1092,2325=>744,2326=>798,2327=>695,2328=>695,2329=>773,2330=>735,2331=>888,2332=>814,2333=>834,2334=>735,2335=>629,2336=>629,2337=>674,2338=>609,2339=>695,2340=>655,2341=>695,2342=>589,2343=>695,2344=>655,2345=>655,2346=>615,2347=>789,2348=>622,2349=>695,2350=>695,2351=>695,2352=>495,2353=>495,2354=>788,2355=>848,2356=>848,2357=>622,2358=>788,2359=>615,2360=>735,2361=>609,2362=>341,2363=>342,2364=>0,2365=>570,2366=>342,2367=>342,2368=>342,2369=>0,2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>342,2378=>342,2379=>342,2380=>342,2381=>0,2382=>442,2383=>342,2384=>1047,2385=>0,2386=>0,2387=>0,2388=>0,2389=>0,2390=>0,2391=>0,2392=>744,2393=>798,2394=>695,2395=>864,2396=>674,2397=>609,2398=>789,2399=>695,2400=>968,2401=>828,2402=>0,2403=>0,2404=>475,2405=>730,2406=>455,2407=>419,2408=>569,2409=>509,2410=>701,2411=>628,2412=>569,2413=>701,2414=>608,2415=>608,2416=>625,2417=>398,2418=>862,2419=>862,2420=>1092,2421=>1092,2422=>862,2423=>862,2425=>814,2426=>695,2427=>655,2428=>814,2429=>628,2430=>674,2431=>622,2561=>0,2562=>0,2563=>385,2565=>781,2566=>982,2567=>789,2568=>860,2569=>559,2570=>559,2575=>589,2576=>781,2579=>559,2580=>781,2581=>538,2582=>650,2583=>650,2584=>781,2585=>589,2586=>589,2587=>699,2588=>650,2589=>589,2590=>589,2591=>589,2592=>589,2593=>559,2594=>589,2595=>589,2596=>559,2597=>650,2598=>589,2599=>650,2600=>626,2602=>650,2603=>570,2604=>650,2605=>559,2606=>650,2607=>781,2608=>490,2610=>626,2611=>626,2613=>589,2614=>650,2616=>650,2617=>490,2620=>0,2622=>320,2623=>260,2624=>320,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2641=>0,2649=>650,2650=>650,2651=>650,2652=>559,2654=>570,2662=>420,2663=>350,2664=>490,2665=>434,2666=>574,2667=>455,2668=>452,2669=>490,2670=>504,2671=>504,2672=>0,2673=>0,2674=>589,2675=>559,2676=>808,2677=>0,3458=>254,3459=>254,3461=>616,3462=>932,3463=>908,3464=>907,3465=>626,3466=>624,3467=>763,3468=>1119,3469=>1029,3470=>1311,3471=>1050,3472=>1477,3473=>677,3474=>746,3475=>1338,3476=>741,3477=>741,3478=>1180,3482=>894,3483=>715,3484=>715,3485=>719,3486=>741,3487=>834,3488=>719,3489=>677,3490=>677,3491=>1302,3492=>1005,3493=>919,3494=>681,3495=>719,3496=>677,3497=>741,3498=>677,3499=>1123,3500=>743,3501=>779,3502=>677,3503=>444,3504=>741,3505=>921,3507=>444,3508=>677,3509=>677,3510=>715,3511=>787,3512=>719,3513=>741,3514=>719,3515=>604,3517=>763,3520=>719,3521=>715,3522=>677,3523=>719,3524=>787,3525=>763,3526=>677,3530=>0,3535=>329,3536=>319,3537=>319,3538=>0,3539=>0,3540=>0,3542=>0,3544=>329,3545=>691,3546=>1062,3547=>1333,3548=>1278,3549=>1235,3550=>1292,3551=>461,3570=>680,3571=>481,3572=>948,3585=>590,3586=>578,3587=>661,3588=>592,3589=>592,3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804,3598=>633,3599=>637,3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670,3608=>542,3609=>671,3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589,3618=>552,3619=>484,3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668,3628=>778,3629=>560,3630=>514,3631=>510,3632=>412,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486,3652=>475,3653=>423,3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744,3672=>622,3673=>585,3674=>721,3675=>1381,4256=>540,4257=>544,4258=>639,4259=>718,4260=>553,4261=>545,4262=>541,4263=>810,4264=>540,4265=>541,4266=>921,4267=>540,4268=>529,4269=>810,4270=>540,4271=>540,4272=>810,4273=>545,4274=>642,4275=>643,4276=>659,4277=>538,4278=>718,4279=>541,4280=>592,4281=>535,4282=>586,4283=>540,4284=>628,4285=>521,4286=>548,4287=>630,4288=>541,4289=>541,4290=>660,4291=>544,4292=>542,4293=>498,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518,4332=>559,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484,4342=>838,4343=>517,4344=>516,4345=>621,4346=>522,4347=>450,4348=>389,5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001,5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668,5037=>829,5038=>575,5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726,5047=>947,5048=>558,5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761,5057=>802,5058=>760,5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707,5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>581,5076=>1052,5077=>600,5078=>730,5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660,5087=>692,5088=>841,5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830,5097=>948,5098=>886,5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730,5107=>827,5108=>648,7424=>474,7425=>775,7426=>703,7427=>507,7428=>492,7429=>546,7430=>546,7431=>487,7432=>440,7433=>299,7434=>389,7435=>556,7436=>483,7437=>683,7438=>502,7439=>552,7440=>492,7441=>534,7442=>507,7443=>663,7444=>717,7445=>384,7446=>552,7447=>552,7448=>471,7449=>539,7450=>538,7451=>448,7452=>522,7453=>508,7454=>680,7455=>510,7456=>474,7457=>696,7458=>423,7459=>409,7460=>463,7461=>681,7462=>410,7463=>476,7464=>553,7465=>432,7466=>630,7467=>536,7468=>474,7469=>774,7470=>507,7471=>507,7472=>546,7473=>487,7474=>487,7475=>549,7476=>582,7477=>293,7478=>389,7479=>556,7480=>483,7481=>683,7482=>502,7483=>502,7484=>552,7485=>350,7486=>471,7487=>538,7488=>448,7489=>522,7490=>696,7491=>336,7492=>336,7493=>346,7494=>460,7495=>364,7496=>367,7497=>294,7498=>294,7499=>283,7500=>283,7501=>334,7502=>181,7503=>372,7504=>555,7505=>355,7506=>334,7507=>290,7508=>1000,7509=>1000,7510=>366,7511=>232,7512=>369,7513=>356,7514=>560,7515=>333,7516=>452,7517=>360,7518=>361,7519=>367,7520=>440,7521=>331,7522=>181,7523=>300,7524=>369,7525=>333,7526=>363,7527=>361,7528=>363,7529=>440,7530=>331,7543=>500,7544=>513,7579=>347,7580=>297,7581=>315,7582=>331,7583=>284,7584=>260,7585=>260,7586=>334,7587=>367,7588=>199,7589=>229,7590=>196,7591=>196,7592=>290,7593=>246,7595=>317,7596=>527,7597=>559,7598=>401,7599=>424,7600=>334,7601=>329,7602=>452,7603=>250,7604=>322,7605=>237,7606=>374,7607=>356,7608=>354,7609=>351,7610=>325,7611=>277,7612=>437,7613=>316,7614=>327,7615=>328,7680=>721,7681=>500,7682=>658,7683=>545,7684=>658,7685=>545,7686=>658,7687=>545,7688=>708,7689=>435,7690=>731,7691=>552,7692=>731,7693=>552,7694=>731,7695=>552,7696=>724,7697=>556,7698=>731,7699=>552,7700=>667,7701=>444,7702=>667,7703=>444,7704=>671,7705=>444,7706=>671,7707=>444,7708=>667,7709=>444,7710=>617,7711=>393,7712=>776,7713=>500,7714=>778,7715=>554,7716=>778,7717=>554,7718=>778,7719=>554,7720=>774,7721=>556,7722=>778,7723=>554,7724=>390,7725=>299,7726=>389,7727=>299,7728=>774,7729=>555,7730=>774,7731=>555,7732=>774,7733=>555,7734=>668,7735=>277,7736=>668,7737=>277,7738=>668,7739=>277,7740=>668,7741=>277,7742=>947,7743=>832,7744=>947,7745=>832,7746=>947,7747=>832,7748=>725,7749=>554,7750=>725,7751=>554,7752=>725,7753=>554,7754=>725,7755=>554,7756=>778,7757=>501,7758=>778,7759=>501,7760=>778,7761=>501,7762=>778,7763=>501,7764=>639,7765=>545,7766=>639,7767=>545,7768=>719,7769=>427,7770=>719,7771=>427,7772=>719,7773=>427,7774=>719,7775=>427,7776=>568,7777=>406,7778=>568,7779=>406,7780=>556,7781=>406,7782=>556,7783=>406,7784=>568,7785=>406,7786=>645,7787=>335,7788=>645,7789=>335,7790=>645,7791=>335,7792=>645,7793=>335,7794=>725,7795=>564,7796=>725,7797=>564,7798=>725,7799=>564,7800=>722,7801=>564,7802=>722,7803=>564,7804=>705,7805=>482,7806=>705,7807=>482,7808=>982,7809=>702,7810=>982,7811=>702,7812=>982,7813=>702,7814=>982,7815=>702,7816=>982,7817=>702,7818=>713,7819=>508,7820=>713,7821=>508,7822=>704,7823=>482,7824=>646,7825=>444,7826=>646,7827=>444,7828=>646,7829=>444,7830=>554,7831=>335,7832=>702,7833=>482,7834=>507,7835=>337,7836=>333,7837=>333,7838=>792,7839=>534,7840=>721,7841=>500,7842=>721,7843=>500,7844=>721,7845=>500,7846=>721,7847=>500,7848=>721,7849=>500,7850=>722,7851=>500,7852=>721,7853=>500,7854=>722,7855=>500,7856=>722,7857=>500,7858=>722,7859=>603,7860=>722,7861=>500,7862=>721,7863=>500,7864=>671,7865=>444,7866=>671,7867=>444,7868=>671,7869=>444,7870=>671,7871=>444,7872=>671,7873=>444,7874=>671,7875=>444,7876=>667,7877=>444,7878=>671,7879=>444,7880=>390,7881=>299,7882=>390,7883=>299,7884=>778,7885=>501,7886=>778,7887=>501,7888=>778,7889=>501,7890=>778,7891=>501,7892=>778,7893=>501,7894=>778,7895=>501,7896=>778,7897=>501,7898=>774,7899=>574,7900=>774,7901=>574,7902=>774,7903=>549,7904=>793,7905=>574,7906=>793,7907=>574,7908=>725,7909=>564,7910=>725,7911=>564,7912=>838,7913=>672,7914=>838,7915=>672,7916=>825,7917=>659,7918=>768,7919=>620,7920=>768,7921=>620,7922=>704,7923=>482,7924=>704,7925=>482,7926=>704,7927=>482,7928=>704,7929=>482,7936=>605,7937=>605,7938=>605,7939=>605,7940=>605,7941=>605,7942=>605,7943=>605,7944=>721,7945=>721,7946=>830,7947=>833,7948=>761,7949=>798,7950=>721,7951=>721,7952=>440,7953=>440,7954=>440,7955=>440,7956=>440,7957=>440,7960=>817,7961=>826,7962=>944,7963=>970,7964=>964,7965=>1009,7968=>605,7969=>605,7970=>605,7971=>605,7972=>605,7973=>605,7974=>605,7975=>605,7976=>926,7977=>921,7978=>1038,7979=>1064,7980=>1092,7981=>1102,7982=>1005,7983=>991,7984=>330,7985=>330,7986=>330,7987=>330,7988=>330,7989=>330,7990=>330,7991=>330,7992=>534,7993=>541,7994=>653,7995=>659,7996=>705,7997=>714,7998=>612,7999=>614,8000=>550,8001=>550,8002=>550,8003=>550,8004=>550,8005=>550,8008=>885,8009=>886,8010=>1038,8011=>1052,8012=>997,8013=>1021,8016=>550,8017=>550,8018=>550,8019=>550,8020=>550,8021=>550,8022=>550,8023=>550,8025=>870,8027=>1014,8029=>1043,8031=>944,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715,8038=>715,8039=>715,8040=>905,8041=>913,8042=>1066,8043=>1085,8044=>1034,8045=>1044,8046=>980,8047=>961,8048=>605,8049=>605,8050=>440,8051=>440,8052=>605,8053=>605,8054=>330,8055=>330,8056=>550,8057=>550,8058=>550,8059=>550,8060=>715,8061=>715,8064=>605,8065=>605,8066=>605,8067=>605,8068=>605,8069=>605,8070=>605,8071=>605,8072=>886,8073=>887,8074=>985,8075=>993,8076=>937,8077=>956,8078=>874,8079=>878,8080=>605,8081=>605,8082=>605,8083=>605,8084=>605,8085=>605,8086=>605,8087=>605,8088=>1096,8089=>1092,8090=>1223,8091=>1250,8092=>1270,8093=>1283,8094=>1174,8095=>1162,8096=>715,8097=>715,8098=>715,8099=>715,8100=>715,8101=>715,8102=>715,8103=>715,8104=>1057,8105=>1073,8106=>1228,8107=>1251,8108=>1202,8109=>1210,8110=>1151,8111=>1131,8112=>605,8113=>605,8114=>605,8115=>605,8116=>605,8118=>605,8119=>605,8120=>721,8121=>721,8122=>721,8123=>721,8124=>883,8125=>500,8126=>0,8127=>500,8128=>500,8129=>550,8130=>605,8131=>605,8132=>605,8134=>605,8135=>605,8136=>790,8137=>830,8138=>909,8139=>931,8140=>950,8141=>500,8142=>500,8143=>500,8144=>330,8145=>330,8146=>330,8147=>330,8150=>330,8151=>330,8152=>390,8153=>390,8154=>506,8155=>550,8157=>500,8158=>500,8159=>500,8160=>550,8161=>550,8162=>550,8163=>550,8164=>550,8165=>550,8166=>550,8167=>550,8168=>738,8169=>738,8170=>858,8171=>880,8172=>764,8173=>550,8174=>550,8175=>500,8178=>715,8179=>715,8180=>715,8182=>715,8183=>715,8184=>884,8185=>857,8186=>927,8187=>892,8188=>988,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>166,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>333,8215=>478,8216=>250,8217=>250,8218=>250,8219=>250,8220=>500,8221=>500,8222=>500,8223=>500,8224=>500,8225=>500,8226=>500,8227=>500,8228=>250,8229=>500,8230=>1000,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>166,8240=>1000,8241=>1588,8242=>250,8243=>492,8244=>714,8245=>270,8246=>484,8247=>693,8248=>469,8249=>333,8250=>333,8251=>727,8252=>666,8253=>695,8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>500,8260=>167,8261=>332,8262=>332,8263=>1000,8264=>833,8265=>833,8266=>500,8267=>540,8268=>600,8269=>600,8270=>500,8271=>333,8272=>953,8273=>500,8274=>497,8275=>576,8276=>953,8277=>785,8278=>450,8279=>881,8280=>620,8281=>620,8282=>179,8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>185,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>373,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>336,8337=>294,8338=>334,8339=>333,8340=>308,8352=>710,8353=>722,8354=>783,8355=>611,8356=>500,8357=>833,8358=>722,8359=>960,8360=>1101,8361=>1000,8362=>889,8363=>532,8364=>761,8365=>742,8366=>631,8367=>1435,8368=>579,8369=>609,8370=>639,8371=>660,8372=>556,8373=>500,8376=>524,8377=>675,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8423=>0,8424=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>694,8449=>692,8451=>1009,8453=>687,8454=>717,8455=>622,8456=>709,8457=>923,8458=>500,8459=>1035,8462=>556,8463=>556,8464=>952,8465=>637,8466=>800,8467=>457,8468=>835,8470=>896,8471=>855,8472=>644,8475=>757,8476=>905,8478=>722,8479=>722,8480=>991,8481=>1186,8482=>1086,8483=>722,8486=>771,8487=>771,8489=>333,8490=>774,8491=>721,8492=>806,8494=>551,8495=>444,8497=>873,8498=>617,8499=>1203,8501=>593,8502=>498,8503=>339,8504=>523,8506=>906,8507=>1181,8523=>778,8525=>1048,8526=>408,8531=>800,8532=>800,8533=>800,8534=>800,8535=>800,8536=>800,8537=>800,8538=>800,8539=>800,8540=>800,8541=>800,8542=>800,8543=>800,8544=>390,8545=>760,8546=>1138,8547=>1098,8548=>705,8549=>1098,8550=>1474,8551=>1850,8552=>1096,8553=>713,8554=>1095,8555=>1472,8556=>668,8557=>708,8558=>731,8559=>947,8560=>299,8561=>560,8562=>827,8563=>758,8564=>482,8565=>769,8566=>1033,8567=>1293,8568=>768,8569=>508,8570=>783,8571=>1049,8572=>277,8573=>435,8574=>552,8575=>832,8592=>900,8593=>523,8594=>900,8595=>523,8596=>900,8597=>523,8598=>900,8599=>900,8600=>900,8601=>900,8602=>900,8603=>900,8604=>1152,8605=>1152,8606=>900,8607=>523,8608=>900,8609=>523,8610=>1000,8611=>1000,8612=>900,8613=>552,8614=>900,8615=>552,8616=>524,8617=>900,8618=>900,8619=>900,8620=>900,8621=>1168,8622=>900,8624=>622,8625=>622,8630=>1069,8631=>1060,8632=>964,8633=>964,8634=>980,8635=>980,8636=>964,8637=>964,8638=>557,8639=>556,8640=>964,8641=>964,8642=>557,8643=>556,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8651=>964,8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>630,8658=>964,8659=>630,8660=>964,8661=>630,8662=>1063,8663=>1063,8664=>1063,8665=>1063,8666=>964,8667=>964,8668=>1100,8669=>1100,8672=>964,8674=>964,8676=>964,8677=>964,8704=>627,8705=>548,8706=>558,8707=>627,8708=>627,8709=>746,8710=>759,8711=>759,8712=>576,8713=>576,8714=>439,8715=>576,8716=>576,8717=>439,8718=>500,8719=>812,8720=>812,8721=>713,8722=>676,8723=>676,8724=>676,8725=>540,8726=>540,8727=>500,8728=>500,8729=>500,8730=>550,8731=>550,8732=>550,8733=>752,8734=>752,8735=>509,8736=>555,8737=>555,8738=>555,8739=>240,8740=>531,8741=>478,8742=>705,8743=>694,8744=>694,8745=>694,8746=>694,8747=>493,8748=>793,8749=>1103,8756=>629,8757=>629,8760=>676,8761=>947,8763=>676,8764=>676,8765=>676,8766=>803,8768=>305,8769=>676,8770=>676,8771=>676,8773=>676,8776=>676,8777=>676,8778=>676,8781=>676,8782=>676,8783=>676,8784=>676,8785=>676,8786=>676,8787=>676,8788=>947,8789=>947,8790=>676,8791=>676,8796=>676,8800=>570,8801=>676,8802=>676,8804=>570,8805=>570,8806=>676,8807=>676,8808=>676,8809=>676,8810=>1047,8811=>1047,8812=>450,8813=>676,8814=>676,8815=>676,8816=>676,8817=>676,8818=>676,8819=>676,8820=>676,8821=>676,8822=>676,8823=>676,8824=>676,8825=>676,8826=>676,8827=>676,8828=>676,8829=>676,8830=>676,8831=>676,8832=>676,8833=>676,8834=>676,8835=>676,8836=>676,8837=>676,8838=>676,8839=>676,8840=>676,8841=>676,8842=>676,8843=>676,8846=>694,8847=>676,8848=>676,8849=>676,8850=>676,8851=>694,8852=>694,8853=>738,8854=>738,8855=>738,8856=>738,8857=>738,8858=>738,8859=>738,8861=>738,8862=>678,8863=>678,8864=>678,8865=>678,8866=>487,8867=>487,8868=>752,8869=>752,8871=>487,8873=>659,8874=>831,8876=>587,8877=>587,8878=>759,8879=>759,8882=>676,8883=>676,8884=>676,8885=>676,8886=>1380,8887=>1380,8888=>1027,8890=>626,8891=>694,8892=>694,8893=>694,8900=>512,8903=>676,8904=>759,8905=>632,8906=>632,8907=>831,8908=>831,8909=>676,8910=>734,8911=>734,8912=>676,8913=>676,8914=>694,8915=>694,8916=>694,8918=>676,8919=>676,8920=>1441,8921=>1441,8922=>676,8923=>676,8924=>676,8925=>676,8926=>676,8927=>676,8928=>676,8929=>676,8930=>676,8931=>676,8934=>676,8935=>676,8936=>676,8937=>676,8938=>676,8939=>676,8940=>676,8941=>676,8960=>737,8968=>411,8969=>411,8970=>411,8971=>411,8976=>680,8994=>951,8995=>951,9001=>398,9002=>398,9251=>500,9472=>1000,9473=>1000,9474=>1000,9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>678,9633=>678,9642=>309,9644=>825,9645=>825,9646=>678,9647=>678,9650=>840,9651=>681,9654=>681,9655=>681,9660=>681,9661=>681,9664=>681,9665=>681,9670=>580,9671=>580,9674=>494,9675=>791,9676=>791,9679=>738,9688=>500,9702=>500,9711=>855,9733=>1003,9734=>1003,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10214=>561,10215=>561,11392=>760,11393=>568,11394=>545,11395=>444,11396=>598,11397=>433,11398=>1039,11399=>760,11400=>681,11401=>502,11402=>572,11403=>405,11404=>583,11405=>463,11406=>698,11407=>529,11408=>754,11409=>555,11410=>338,11411=>258,11412=>688,11413=>524,11414=>700,11415=>521,11416=>799,11417=>609,11418=>708,11419=>537,11420=>546,11421=>411,11422=>778,11423=>541,11424=>724,11425=>524,11426=>545,11427=>446,11428=>676,11429=>498,11430=>615,11431=>433,11432=>759,11433=>589,11434=>800,11435=>670,11436=>669,11437=>512,11438=>801,11439=>609,11440=>1003,11441=>743,11517=>266,11518=>617,11519=>307,11799=>333,42560=>657,42561=>444,42571=>494,42576=>1114,42577=>887,42580=>1107,42581=>758,42582=>1085,42583=>768,42600=>778,42601=>501,42790=>774,42791=>551,42792=>953,42793=>752,42794=>652,42795=>452,42796=>478,42797=>422,42798=>662,42799=>612,42888=>333,42889=>278,42890=>282,42891=>349,42892=>278,42893=>774,42896=>722,42897=>556,42922=>925,43002=>832,64256=>670,64257=>565,64258=>558,64259=>842,64260=>835,64261=>611,64262=>738,64275=>1105,64276=>1105,64277=>1099,64278=>1105,64279=>1361,64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491,64335=>593,64336=>264,64337=>247,64338=>897,64339=>897,64340=>328,64341=>338,64342=>898,64343=>898,64344=>328,64345=>335,64346=>897,64347=>897,64348=>338,64349=>338,64350=>897,64351=>897,64352=>328,64353=>338,64354=>897,64355=>897,64356=>348,64357=>338,64358=>897,64359=>897,64360=>328,64361=>338,64362=>858,64363=>858,64364=>360,64365=>328,64366=>858,64367=>858,64368=>360,64369=>328,64370=>655,64371=>688,64372=>597,64373=>597,64374=>655,64375=>688,64376=>597,64377=>597,64378=>655,64379=>688,64380=>597,64381=>597,64382=>655,64383=>750,64384=>597,64385=>597,64386=>440,64387=>397,64388=>397,64389=>397,64390=>397,64391=>397,64392=>397,64393=>397,64394=>345,64395=>345,64396=>338,64397=>338,64398=>901,64399=>950,64400=>453,64401=>489,64402=>901,64403=>950,64404=>451,64405=>489,64406=>901,64407=>950,64408=>451,64409=>489,64410=>901,64411=>950,64412=>451,64413=>489,64414=>591,64415=>591,64416=>591,64417=>591,64418=>328,64419=>333,64420=>394,64421=>423,64422=>424,64423=>399,64424=>314,64425=>314,64426=>470,64427=>470,64428=>470,64429=>486,64430=>752,64431=>752,64432=>752,64433=>752,64434=>344,64435=>344,64436=>484,64437=>484,64438=>508,64439=>508,64440=>508,64441=>508,64442=>565,64443=>508,64444=>335,64445=>344,64446=>344,64447=>342,64448=>354,64449=>354,64467=>648,64468=>648,64469=>453,64470=>489,64471=>359,64472=>329,64473=>359,64474=>329,64475=>359,64476=>329,64477=>462,64478=>329,64479=>329,64480=>329,64481=>329,64482=>329,64483=>329,64484=>742,64485=>725,64486=>301,64487=>339,64488=>301,64489=>339,64508=>742,64509=>725,64510=>301,64511=>275,65010=>1048,65020=>1135,65136=>300,65137=>408,65138=>373,65139=>373,65140=>300,65142=>300,65143=>408,65144=>300,65145=>408,65146=>300,65147=>408,65148=>300,65149=>408,65150=>351,65151=>408,65152=>350,65153=>264,65154=>247,65155=>264,65156=>247,65157=>329,65158=>329,65159=>264,65160=>247,65161=>742,65162=>725,65163=>301,65164=>339,65165=>264,65166=>247,65167=>899,65168=>957,65169=>328,65170=>340,65171=>424,65172=>423,65173=>897,65174=>957,65175=>328,65176=>338,65177=>897,65178=>957,65179=>348,65180=>338,65181=>655,65182=>688,65183=>574,65184=>602,65185=>655,65186=>688,65187=>610,65188=>602,65189=>655,65190=>688,65191=>610,65192=>602,65193=>397,65194=>397,65195=>397,65196=>397,65197=>358,65198=>348,65199=>351,65200=>348,65201=>901,65202=>901,65203=>641,65204=>601,65205=>901,65206=>901,65207=>641,65208=>601,65209=>909,65210=>909,65211=>823,65212=>803,65213=>909,65214=>909,65215=>850,65216=>820,65217=>557,65218=>557,65219=>541,65220=>504,65221=>550,65222=>557,65223=>535,65224=>495,65225=>595,65226=>552,65227=>694,65228=>517,65229=>602,65230=>577,65231=>694,65232=>517,65233=>858,65234=>858,65235=>346,65236=>328,65237=>635,65238=>635,65239=>346,65240=>328,65241=>446,65242=>648,65243=>453,65244=>489,65245=>601,65246=>672,65247=>238,65248=>280,65249=>489,65250=>478,65251=>473,65252=>534,65253=>591,65254=>591,65255=>328,65256=>333,65257=>424,65258=>423,65259=>470,65260=>406,65261=>329,65262=>401,65263=>742,65264=>725,65265=>742,65266=>725,65267=>301,65268=>275,65269=>476,65270=>614,65271=>476,65272=>614,65273=>476,65274=>614,65275=>476,65276=>614,65279=>0,65529=>0,65530=>0,65531=>0,65532=>800,65533=>900,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freeserifb.z b/tcpdf/fonts/freeserifb.z new file mode 100644 index 0000000..6d9f8b6 Binary files /dev/null and b/tcpdf/fonts/freeserifb.z differ diff --git a/tcpdf/fonts/freeserifbi.ctg.z b/tcpdf/fonts/freeserifbi.ctg.z new file mode 100644 index 0000000..93abdfc Binary files /dev/null and b/tcpdf/fonts/freeserifbi.ctg.z differ diff --git a/tcpdf/fonts/freeserifbi.php b/tcpdf/fonts/freeserifbi.php new file mode 100644 index 0000000..cfb3766 --- /dev/null +++ b/tcpdf/fonts/freeserifbi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSerifBoldItalic'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=608708; +$enc=''; +$file='freeserifbi.z'; +$ctg='freeserifbi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-787 -300 1732 900]','ItalicAngle'=>-16.45875,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>669,'XHeight'=>475,'StemV'=>123,'StemH'=>53,'AvgWidth'=>596,'MaxWidth'=>1668,'MissingWidth'=>600); +$cbbox=array(0=>array(6,-81,742,774),33=>array(67,-13,370,684),34=>array(136,398,536,685),35=>array(-33,0,533,700),36=>array(-20,-100,497,733),37=>array(39,-10,793,692),38=>array(5,-19,699,682),39=>array(128,398,268,685),40=>array(28,-179,344,685),41=>array(-44,-179,271,685),42=>array(65,252,456,685),43=>array(33,0,537,506),44=>array(-60,-182,144,134),45=>array(2,166,271,282),46=>array(-9,-13,139,135),47=>array(-4,-18,402,685),48=>array(17,-14,477,683),49=>array(5,0,419,683),50=>array(13,0,486,683),51=>array(5,-13,470,683),52=>array(5,0,523,683),53=>array(9,-13,507,669),54=>array(28,-15,514,679),55=>array(72,0,545,669),56=>array(13,-13,486,683),57=>array(0,-10,487,683),58=>array(23,-13,264,459),59=>array(-25,-183,264,459),60=>array(31,-12,539,518),61=>array(63,107,567,399),62=>array(61,-12,569,518),63=>array(79,-13,470,684),64=>array(62,-19,776,691),65=>array(0,0,660,683),66=>array(0,0,648,669),67=>array(41,-18,686,685),68=>array(0,0,731,669),69=>array(0,0,680,669),70=>array(0,0,673,669),71=>array(44,-18,729,685),72=>array(0,0,823,669),73=>array(0,0,438,669),74=>array(0,-99,570,669),75=>array(0,0,723,669),76=>array(0,0,612,669),77=>array(0,-12,946,669),78=>array(0,-15,775,669),79=>array(36,-18,700,685),80=>array(0,0,640,669),81=>array(33,-208,697,685),82=>array(0,0,652,669),83=>array(0,-18,524,685),84=>array(89,0,689,669),85=>array(107,-18,784,669),86=>array(128,-18,778,669),87=>array(128,-18,1003,669),88=>array(0,0,718,669),89=>array(128,0,714,669),90=>array(0,0,601,669),91=>array(-37,-159,362,674),92=>array(117,-18,397,685),93=>array(-56,-157,343,674),94=>array(67,304,503,669),95=>array(0,-155,500,-75),96=>array(85,516,297,697),97=>array(14,-14,490,462),98=>array(25,-13,483,699),99=>array(24,-13,421,462),100=>array(20,-13,558,699),101=>array(24,-13,417,462),102=>array(-95,-205,520,698),103=>array(-22,-203,508,462),104=>array(20,-9,531,699),105=>array(40,-9,301,685),106=>array(-75,-207,393,685),107=>array(20,-8,526,699),108=>array(42,-9,330,699),109=>array(10,-9,746,462),110=>array(10,-9,509,462),111=>array(25,-13,469,462),112=>array(-81,-205,485,462),113=>array(20,-205,490,462),114=>array(10,0,420,462),115=>array(0,-13,352,462),116=>array(32,-9,324,594),117=>array(35,-9,512,462),118=>array(54,-13,439,462),119=>array(54,-13,652,462),120=>array(-30,-13,485,462),121=>array(-53,-205,433,462),122=>array(0,-78,411,449),123=>array(5,-187,436,686),124=>array(116,-18,204,685),125=>array(-129,-187,302,686),126=>array(54,175,516,331),160=>array(0,0,0,0),161=>array(18,-205,321,492),162=>array(13,-143,410,576),163=>array(8,-12,550,683),164=>array(74,34,626,586),165=>array(125,0,720,669),166=>array(66,-18,154,685),167=>array(36,-143,459,685),168=>array(55,525,397,655),169=>array(30,-18,718,685),170=>array(61,256,390,685),171=>array(12,32,468,415),172=>array(51,108,555,399),173=>array(2,166,271,282),174=>array(30,-18,718,685),175=>array(51,553,393,623),176=>array(172,397,458,683),177=>array(33,0,537,568),178=>array(138,390,449,799),179=>array(133,385,437,803),180=>array(139,516,379,697),181=>array(-40,-207,536,449),182=>array(3,-193,622,669),183=>array(118,157,266,305),184=>array(-80,-218,156,5),185=>array(117,390,388,799),186=>array(57,256,377,685),187=>array(12,32,468,415),188=>array(37,-14,751,683),189=>array(41,-14,773,683),190=>array(48,-14,767,683),191=>array(30,-205,421,492),192=>array(0,0,660,900),193=>array(0,0,660,900),194=>array(0,0,660,897),195=>array(0,0,672,844),196=>array(0,0,660,843),197=>array(0,0,660,900),198=>array(0,0,982,669),199=>array(41,-218,686,685),200=>array(0,0,680,900),201=>array(0,0,680,900),202=>array(0,0,680,897),203=>array(0,0,680,843),204=>array(0,0,438,900),205=>array(0,0,475,900),206=>array(0,0,458,897),207=>array(0,0,476,845),208=>array(0,0,731,669),209=>array(0,-15,775,843),210=>array(36,-18,700,900),211=>array(36,-18,700,900),212=>array(36,-18,700,897),213=>array(36,-18,700,843),214=>array(36,-18,700,842),215=>array(48,16,522,490),216=>array(36,-125,700,764),217=>array(107,-18,784,900),218=>array(107,-18,784,900),219=>array(107,-18,784,897),220=>array(107,-18,784,839),221=>array(128,0,714,900),222=>array(0,0,601,669),223=>array(-75,-200,598,705),224=>array(14,-14,490,697),225=>array(14,-14,490,697),226=>array(14,-14,490,690),227=>array(14,-14,506,628),228=>array(14,-14,490,634),229=>array(14,-14,490,710),230=>array(20,-13,698,462),231=>array(-6,-218,410,462),232=>array(24,-13,417,697),233=>array(24,-13,475,697),234=>array(24,-13,463,690),235=>array(24,-13,483,630),236=>array(40,-9,280,697),237=>array(40,-9,332,697),238=>array(40,-9,370,690),239=>array(40,-9,389,636),240=>array(17,-13,474,699),241=>array(10,-9,531,631),242=>array(25,-13,469,697),243=>array(25,-13,469,697),244=>array(25,-13,471,690),245=>array(25,-13,516,629),246=>array(25,-13,496,636),247=>array(33,-29,537,535),248=>array(25,-119,469,560),249=>array(35,-9,512,697),250=>array(35,-9,521,697),251=>array(35,-9,512,690),252=>array(35,-9,512,633),253=>array(-53,-205,475,697),254=>array(-80,-205,486,699),255=>array(-53,-205,448,633),256=>array(0,0,660,800),257=>array(14,-14,490,603),258=>array(0,0,660,888),259=>array(14,-14,490,678),260=>array(0,-173,796,683),261=>array(14,-173,535,462),262=>array(41,-18,686,900),263=>array(24,-13,474,697),264=>array(41,-18,686,893),265=>array(24,-13,459,686),266=>array(41,-18,686,849),267=>array(24,-13,421,637),268=>array(41,-18,686,900),269=>array(24,-13,518,690),270=>array(0,0,731,900),271=>array(20,-13,735,699),272=>array(0,0,731,669),273=>array(16,-13,577,699),274=>array(0,0,680,800),275=>array(24,-13,459,604),276=>array(0,0,680,881),277=>array(24,-13,483,674),278=>array(0,0,680,865),279=>array(24,-13,417,635),280=>array(0,-173,694,669),281=>array(12,-173,411,462),282=>array(0,0,680,900),283=>array(24,-13,517,690),284=>array(44,-18,729,893),285=>array(-22,-203,508,686),286=>array(44,-18,729,888),287=>array(-22,-203,508,678),288=>array(44,-18,729,849),289=>array(-22,-203,508,632),290=>array(44,-300,729,685),291=>array(-22,-203,508,746),292=>array(0,0,823,893),293=>array(20,-9,553,899),294=>array(0,0,823,669),295=>array(20,-9,531,699),296=>array(0,0,512,838),297=>array(19,-9,404,631),298=>array(0,0,480,800),299=>array(31,-9,373,599),300=>array(0,0,502,881),301=>array(40,-9,385,674),302=>array(0,-173,438,669),303=>array(40,-173,316,685),304=>array(0,0,438,865),305=>array(40,-9,276,462),306=>array(0,-99,904,669),307=>array(37,-207,561,685),308=>array(0,-99,581,893),309=>array(-75,-207,419,686),310=>array(0,-300,723,669),311=>array(20,-297,526,699),312=>array(14,0,534,470),313=>array(0,0,612,900),314=>array(42,-9,392,900),315=>array(0,-300,612,669),316=>array(-36,-300,330,699),317=>array(0,0,655,685),318=>array(42,-9,515,699),319=>array(0,0,612,669),320=>array(42,-9,449,699),321=>array(0,0,612,669),322=>array(37,-9,351,699),323=>array(0,-15,775,900),324=>array(10,-9,511,697),325=>array(0,-300,775,669),326=>array(10,-300,509,462),327=>array(0,-15,775,900),328=>array(10,-9,523,690),329=>array(10,-9,509,761),330=>array(0,-13,827,686),331=>array(10,-207,490,462),332=>array(36,-18,700,801),333=>array(25,-13,487,603),334=>array(36,-18,700,881),335=>array(25,-13,501,674),336=>array(36,-18,711,900),337=>array(25,-13,564,697),338=>array(23,-9,946,677),339=>array(15,-13,683,462),340=>array(0,0,652,900),341=>array(10,0,420,697),342=>array(0,-300,652,669),343=>array(-56,-300,420,462),344=>array(0,0,652,900),345=>array(10,0,449,690),346=>array(0,-25,524,900),347=>array(0,-13,397,697),348=>array(0,-18,524,893),349=>array(0,-13,375,686),350=>array(2,-218,526,685),351=>array(-40,-218,333,462),352=>array(0,-18,524,897),353=>array(0,-13,419,690),354=>array(75,-222,689,669),355=>array(-50,-218,324,594),356=>array(89,0,689,900),357=>array(32,-9,506,685),358=>array(89,0,689,669),359=>array(45,-9,341,594),360=>array(107,-18,784,838),361=>array(35,-9,528,631),362=>array(107,-18,784,800),363=>array(35,-9,515,604),364=>array(107,-18,784,881),365=>array(35,-9,512,674),366=>array(107,-18,784,900),367=>array(35,-9,512,725),368=>array(107,-18,784,900),369=>array(35,-9,571,697),370=>array(67,-173,744,669),371=>array(35,-173,576,462),372=>array(128,-18,1003,893),373=>array(54,-13,652,686),374=>array(128,0,714,893),375=>array(-53,-205,433,686),376=>array(128,0,714,862),377=>array(0,0,601,900),378=>array(0,-78,447,697),379=>array(0,0,601,865),380=>array(0,-78,411,633),381=>array(0,0,601,897),382=>array(0,-78,454,690),383=>array(-95,-205,520,698),384=>array(36,-13,494,699),385=>array(82,0,787,669),386=>array(24,0,711,669),387=>array(31,-13,514,669),388=>array(0,0,596,686),389=>array(46,-13,504,703),390=>array(0,-19,721,691),391=>array(41,-18,955,688),392=>array(14,-13,685,547),393=>array(0,0,731,669),394=>array(79,0,867,669),395=>array(16,0,792,669),396=>array(16,-13,543,669),397=>array(43,-241,528,461),398=>array(0,0,816,669),399=>array(39,-19,646,686),400=>array(13,-19,650,691),401=>array(-95,-207,714,669),402=>array(-95,-205,520,698),403=>array(45,-18,970,688),404=>array(110,-22,704,669),405=>array(17,-12,757,699),406=>array(32,-9,320,699),407=>array(5,0,443,669),408=>array(0,0,833,669),409=>array(0,-8,506,698),410=>array(57,-9,360,699),411=>array(0,-13,499,698),412=>array(41,-17,928,662),413=>array(-95,-207,899,669),414=>array(10,-255,496,462),415=>array(27,-18,691,685),416=>array(27,-18,888,725),417=>array(13,-13,636,590),418=>array(27,-18,996,685),419=>array(13,-13,738,462),420=>array(61,0,758,669),421=>array(-80,-205,486,698),422=>array(0,-196,652,669),423=>array(18,-18,536,685),424=>array(8,-13,320,462),425=>array(28,0,777,669),426=>array(132,-255,418,767),427=>array(-75,-230,368,594),428=>array(50,0,650,669),429=>array(49,-9,470,698),430=>array(100,-255,689,669),431=>array(67,-18,899,725),432=>array(35,-9,734,590),433=>array(21,-16,798,669),434=>array(87,-18,676,687),435=>array(94,0,769,685),436=>array(-54,-205,626,698),437=>array(0,0,601,669),438=>array(0,-78,411,449),439=>array(15,-18,684,669),440=>array(30,-18,682,669),441=>array(0,-217,517,449),442=>array(-32,-215,466,449),443=>array(0,0,507,683),444=>array(15,-18,637,669),445=>array(-56,-233,442,449),446=>array(61,-13,359,594),447=>array(-76,-205,492,462),448=>array(42,-18,280,685),449=>array(42,-18,478,685),450=>array(55,-102,622,608),451=>array(67,-13,370,684),452=>array(0,0,1335,897),453=>array(0,-78,1188,690),454=>array(20,-78,954,699),455=>array(0,-99,1179,669),456=>array(0,-207,947,685),457=>array(42,-207,616,699),458=>array(0,-99,1202,669),459=>array(0,-207,1005,685),460=>array(10,-207,849,685),461=>array(0,0,672,900),462=>array(14,-14,507,676),463=>array(0,0,510,883),464=>array(40,-9,404,676),465=>array(36,-18,700,883),466=>array(25,-13,509,676),467=>array(107,-18,784,883),468=>array(35,-9,538,676),469=>array(67,-15,744,871),470=>array(35,-9,540,763),471=>array(67,-15,744,900),472=>array(35,-9,520,849),473=>array(67,-15,744,900),474=>array(35,-9,557,843),475=>array(67,-15,744,900),476=>array(35,-9,512,852),477=>array(16,-13,409,462),478=>array(0,0,672,900),479=>array(14,-14,519,763),480=>array(-67,0,626,900),481=>array(14,-14,531,742),482=>array(0,0,982,800),483=>array(20,-13,698,572),484=>array(44,-18,729,685),485=>array(-54,-203,528,462),486=>array(44,-18,729,883),487=>array(-22,-203,525,676),488=>array(0,0,723,883),489=>array(20,-8,571,895),490=>array(27,-205,691,685),491=>array(25,-200,469,462),492=>array(27,-205,691,800),493=>array(25,-200,496,607),494=>array(15,-18,684,897),495=>array(-75,-217,466,676),496=>array(-75,-207,378,676),497=>array(0,0,1335,669),498=>array(0,-78,1145,669),499=>array(20,-78,911,699),500=>array(44,-18,729,890),501=>array(-22,-203,508,683),502=>array(0,-13,1006,669),503=>array(0,1,652,686),504=>array(0,-15,775,890),505=>array(10,-9,509,683),506=>array(-67,0,614,900),507=>array(14,-14,528,900),508=>array(0,0,982,890),509=>array(20,-13,698,683),510=>array(36,-125,700,900),511=>array(25,-119,469,683),512=>array(0,0,660,880),513=>array(14,-14,490,687),514=>array(0,0,660,900),515=>array(14,-14,490,685),516=>array(0,0,680,880),517=>array(24,-13,419,687),518=>array(0,0,680,900),519=>array(24,-13,455,685),520=>array(0,0,438,880),521=>array(3,-9,307,687),522=>array(0,0,452,900),523=>array(40,-9,359,685),524=>array(36,-18,700,880),525=>array(25,-13,469,687),526=>array(36,-18,700,900),527=>array(25,-13,469,685),528=>array(0,0,652,880),529=>array(10,0,420,687),530=>array(0,0,652,900),531=>array(10,0,420,685),532=>array(107,-18,784,880),533=>array(35,-9,512,687),534=>array(107,-18,784,900),535=>array(35,-9,512,685),536=>array(0,-300,524,685),537=>array(0,-300,352,462),538=>array(89,-300,689,669),539=>array(-36,-300,324,594),540=>array(45,-58,508,693),541=>array(-11,-239,428,444),542=>array(0,0,823,883),543=>array(20,-9,611,894),544=>array(0,-200,767,685),545=>array(-9,-214,544,699),546=>array(28,-18,604,685),547=>array(24,-13,588,699),548=>array(0,-227,720,676),549=>array(0,-227,493,461),550=>array(0,0,660,839),551=>array(14,-14,490,632),552=>array(0,-222,680,669),553=>array(24,-218,417,462),554=>array(36,-18,700,900),555=>array(25,-13,527,765),556=>array(36,-18,700,900),557=>array(25,-13,530,764),558=>array(36,-18,700,839),559=>array(25,-13,469,632),560=>array(27,-15,691,872),561=>array(25,-13,522,742),562=>array(128,0,714,800),563=>array(-53,-205,436,572),564=>array(-92,-298,350,699),565=>array(6,-216,516,462),566=>array(-93,-294,349,594),567=>array(-75,-207,353,462),568=>array(24,-21,805,700),569=>array(24,-200,806,470),570=>array(-1,-45,746,744),571=>array(8,-45,689,744),572=>array(-6,-45,422,562),573=>array(0,0,612,669),574=>array(38,-45,719,744),575=>array(0,-200,352,462),576=>array(0,-201,424,449),577=>array(6,0,528,685),578=>array(9,0,471,462),579=>array(0,0,648,669),580=>array(88,-18,784,669),581=>array(0,-7,656,680),582=>array(0,-45,704,744),583=>array(-1,-77,456,542),584=>array(0,-99,570,669),585=>array(-75,-207,408,685),586=>array(24,-205,758,686),587=>array(6,-205,540,464),588=>array(0,0,692,669),589=>array(19,0,429,462),590=>array(103,0,724,669),591=>array(-53,-206,438,462),592=>array(64,-14,540,462),593=>array(43,-13,600,462),594=>array(-7,-11,550,464),595=>array(26,-13,484,698),596=>array(3,-14,441,473),597=>array(17,-102,392,451),598=>array(6,-204,544,699),599=>array(7,-13,679,697),600=>array(8,-13,398,462),601=>array(12,-13,405,462),602=>array(2,-13,588,462),603=>array(36,-13,469,462),604=>array(10,-13,450,463),605=>array(15,-13,583,452),606=>array(22,-13,470,466),607=>array(-75,-207,388,462),608=>array(11,-207,691,699),609=>array(-34,-205,478,462),610=>array(20,-13,500,459),611=>array(54,-221,511,462),612=>array(60,-9,601,470),613=>array(54,-246,565,462),614=>array(17,-9,528,697),615=>array(7,-204,495,697),616=>array(26,-9,315,685),617=>array(30,-13,285,449),618=>array(6,0,350,449),619=>array(17,-9,406,699),620=>array(39,-9,394,699),621=>array(-5,-204,320,699),622=>array(32,-217,633,699),623=>array(62,-9,798,462),624=>array(16,-203,734,462),625=>array(10,-205,728,462),626=>array(10,-205,490,462),627=>array(10,-204,504,462),628=>array(0,-10,558,448),629=>array(12,-13,456,462),630=>array(16,-12,730,459),631=>array(15,-13,684,474),632=>array(23,-200,589,697),633=>array(6,-11,416,451),634=>array(0,-11,476,668),635=>array(0,-204,410,451),636=>array(-46,-213,430,466),637=>array(0,-204,429,462),638=>array(0,0,485,473),639=>array(23,-200,388,463),640=>array(0,0,471,449),641=>array(0,0,587,449),642=>array(-18,-227,353,462),643=>array(-75,-205,540,698),644=>array(-75,-205,540,698),645=>array(35,-203,434,473),646=>array(-40,-268,636,698),647=>array(26,-10,318,593),648=>array(0,-204,331,594),649=>array(40,-9,546,462),650=>array(-8,-10,511,449),651=>array(45,-12,504,462),652=>array(8,-13,393,462),653=>array(8,-13,606,462),654=>array(5,-5,491,662),655=>array(85,0,479,449),656=>array(0,-227,611,449),657=>array(0,-158,434,449),658=>array(-75,-217,454,449),659=>array(10,-237,450,449),660=>array(82,0,447,684),661=>array(73,1,455,685),662=>array(12,-15,394,669),663=>array(12,-169,512,685),664=>array(36,-18,700,685),665=>array(0,0,470,449),666=>array(6,-13,431,462),667=>array(21,-13,731,671),668=>array(0,0,575,449),669=>array(-75,-210,464,685),670=>array(0,-250,506,457),671=>array(0,0,431,449),672=>array(7,-205,679,697),673=>array(52,0,437,684),674=>array(76,1,458,685),675=>array(6,-78,758,699),676=>array(6,-217,832,699),677=>array(6,-158,781,699),678=>array(39,-13,603,594),679=>array(39,-205,671,698),680=>array(39,-108,652,594),681=>array(-75,-207,836,698),682=>array(32,-13,581,699),683=>array(32,-78,534,699),684=>array(69,6,577,710),685=>array(22,88,560,670),686=>array(84,-204,573,697),687=>array(87,-204,603,697),688=>array(111,383,460,866),689=>array(109,382,458,863),690=>array(82,249,401,856),691=>array(116,390,396,705),692=>array(115,375,394,690),693=>array(93,240,372,686),694=>array(110,390,510,695),695=>array(149,386,557,710),696=>array(78,256,410,711),697=>array(128,398,268,685),698=>array(114,398,462,685),699=>array(148,441,324,695),700=>array(155,441,331,695),701=>array(166,441,338,695),702=>array(255,497,401,731),703=>array(189,497,335,731),704=>array(186,460,452,770),705=>array(181,460,454,770),706=>array(194,501,483,715),707=>array(181,501,470,715),708=>array(163,510,449,712),709=>array(218,510,504,712),710=>array(40,516,367,690),711=>array(79,516,411,690),712=>array(298,505,432,752),713=>array(51,553,393,623),714=>array(139,516,379,697),715=>array(85,516,297,697),716=>array(49,-300,183,-53),717=>array(-36,-149,306,-79),718=>array(12,-241,224,-60),719=>array(10,-221,250,-40),720=>array(71,-1,328,461),721=>array(155,342,286,461),722=>array(76,-271,222,-37),723=>array(-20,-271,126,-37),724=>array(81,168,367,360),725=>array(116,168,402,360),726=>array(82,68,368,340),727=>array(78,167,364,239),728=>array(71,516,387,678),729=>array(271,525,401,655),730=>array(241,544,445,743),731=>array(-40,-173,189,44),732=>array(138,536,523,655),733=>array(109,516,469,697),734=>array(129,284,368,462),735=>array(166,526,538,781),736=>array(180,331,525,791),737=>array(181,365,378,848),738=>array(135,374,375,698),739=>array(117,380,468,704),740=>array(197,390,482,859),741=>array(194,0,625,800),742=>array(159,0,625,800),743=>array(117,0,625,800),744=>array(75,0,625,800),745=>array(40,0,625,800),746=>array(71,-1,495,606),747=>array(72,0,553,614),748=>array(-8,-230,324,-56),749=>array(155,547,535,756),750=>array(169,369,639,685),751=>array(218,-222,504,-20),752=>array(163,-219,449,-17),753=>array(195,-236,484,-22),754=>array(181,-231,470,-17),755=>array(33,-200,237,-1),756=>array(85,290,297,471),757=>array(109,290,413,471),758=>array(39,290,399,471),759=>array(-27,-175,358,-56),760=>array(99,203,340,675),761=>array(167,511,370,748),762=>array(195,511,363,748),763=>array(-1,-72,167,165),764=>array(-6,-72,197,165),765=>array(-392,-200,-36,-19),766=>array(-30,-200,297,-28),767=>array(-39,-264,376,-74),768=>array(-251,516,-39,697),769=>array(-194,516,46,697),770=>array(-310,516,17,690),771=>array(-313,525,72,644),772=>array(-302,553,40,623),773=>array(-288,565,209,637),774=>array(-151,516,165,678),775=>array(-182,535,-52,665),776=>array(-278,525,64,655),777=>array(-132,505,45,675),778=>array(-186,524,18,723),779=>array(-303,516,57,697),780=>array(-254,516,78,690),781=>array(-37,505,97,752),782=>array(-142,505,161,752),783=>array(-428,512,-124,693),784=>array(-278,516,38,748),785=>array(-197,506,110,669),786=>array(-95,501,81,755),787=>array(-95,501,81,755),788=>array(-74,496,95,745),789=>array(95,491,271,745),790=>array(-285,-220,-73,-39),791=>array(-311,-225,-71,-44),792=>array(-377,-300,-106,-29),793=>array(-314,-300,-43,-29),794=>array(20,505,273,742),795=>array(78,319,321,562),796=>array(-340,-292,-194,-58),797=>array(-365,-218,-79,-26),798=>array(-367,-234,-81,-42),799=>array(-337,-291,-51,-19),800=>array(-371,-137,-85,-65),801=>array(-357,-251,-85,46),802=>array(-160,-251,67,46),803=>array(-312,-200,-182,-70),804=>array(-398,-200,-57,-70),805=>array(-287,-242,-83,-43),806=>array(-286,-300,-110,-56),807=>array(-356,-218,-120,5),808=>array(-356,-157,-118,0),809=>array(-299,-300,-172,-43),810=>array(-409,-226,-53,-45),811=>array(-400,-189,-97,-47),812=>array(-380,-213,-48,-39),813=>array(-416,-210,-89,-36),814=>array(-342,-210,-26,-48),815=>array(-384,-211,-68,-49),816=>array(-422,-173,-37,-54),817=>array(-375,-130,-46,-58),818=>array(-500,-150,0,-70),819=>array(-501,-270,0,-58),820=>array(-495,155,-110,274),821=>array(-284,186,-7,258),822=>array(-425,187,59,259),823=>array(-458,111,10,334),824=>array(-522,-127,121,583),825=>array(-245,-272,-100,-38),826=>array(-410,-220,-54,-39),827=>array(-367,-300,-47,-37),828=>array(-400,-243,-30,-30),829=>array(-244,496,128,751),830=>array(-145,490,49,782),831=>array(-501,492,0,704),832=>array(-213,516,-1,697),833=>array(-79,516,161,697),834=>array(-329,525,56,644),835=>array(-92,488,84,742),836=>array(-209,535,135,759),837=>array(-245,-200,-70,-39),838=>array(-314,481,42,662),839=>array(-403,-225,-97,-46),840=>array(-340,-300,-72,-43),841=>array(-301,-218,-141,-74),842=>array(-270,490,123,681),843=>array(-233,489,152,839),844=>array(-364,505,60,762),845=>array(-458,-261,-37,-27),846=>array(-350,-293,-116,-15),848=>array(-152,501,137,715),849=>array(-286,504,-140,738),850=>array(-293,495,23,727),851=>array(-474,-299,-102,-44),852=>array(-332,-260,-43,-46),853=>array(-369,-258,-80,-44),854=>array(-594,-250,-72,-36),855=>array(-192,505,-46,739),856=>array(32,525,162,655),857=>array(-347,-264,-150,-47),858=>array(-406,-249,-46,-41),859=>array(-216,490,37,744),860=>array(-330,-235,263,-66),861=>array(-133,716,460,885),862=>array(-136,693,552,765),863=>array(-377,-138,311,-66),864=>array(-464,498,444,697),865=>array(-171,524,422,693),866=>array(-323,-300,379,-16),867=>array(-300,499,-94,704),868=>array(-263,499,-93,704),869=>array(-210,502,-96,802),870=>array(-298,499,-106,704),871=>array(-287,500,-81,704),872=>array(-290,497,-118,702),873=>array(-295,498,-63,805),874=>array(-274,502,-53,808),875=>array(-328,504,-10,707),876=>array(-231,508,-54,707),877=>array(-243,500,-117,760),878=>array(-261,498,-94,703),879=>array(-305,500,-83,705),885=>array(0,-220,199,9),890=>array(18,-200,193,-39),894=>array(-25,-183,264,459),900=>array(137,510,319,734),901=>array(151,513,495,737),902=>array(76,0,736,692),903=>array(104,258,295,444),904=>array(135,0,917,694),905=>array(133,0,1047,693),906=>array(133,0,678,693),908=>array(134,-18,855,694),910=>array(132,0,1058,695),911=>array(131,-3,942,694),912=>array(6,-13,350,743),913=>array(0,0,660,683),914=>array(0,0,648,669),915=>array(0,0,680,669),916=>array(0,0,715,683),917=>array(0,0,680,669),918=>array(0,0,601,669),919=>array(0,0,823,669),920=>array(32,-18,696,685),921=>array(0,0,438,669),922=>array(1,0,724,669),923=>array(0,0,660,683),924=>array(0,-12,946,669),925=>array(0,-15,775,669),926=>array(0,0,701,669),927=>array(35,-18,699,685),928=>array(0,0,823,669),929=>array(0,0,640,669),931=>array(0,0,749,669),932=>array(99,0,699,669),933=>array(78,0,786,676),934=>array(54,0,806,669),935=>array(0,0,718,669),936=>array(80,0,981,686),937=>array(0,0,774,685),938=>array(0,0,484,857),939=>array(78,0,786,851),940=>array(17,-13,574,717),941=>array(2,-13,435,717),942=>array(50,-212,530,720),943=>array(33,-13,362,720),944=>array(53,-13,574,746),945=>array(17,-13,574,462),946=>array(-36,-212,572,698),947=>array(40,-212,546,462),948=>array(17,-13,502,689),949=>array(2,-13,435,462),950=>array(21,-187,476,698),951=>array(50,-212,529,462),952=>array(31,-13,504,678),953=>array(33,-13,288,449),954=>array(14,-10,530,465),955=>array(0,-13,499,698),956=>array(-18,-212,560,449),957=>array(45,0,530,462),958=>array(15,-187,464,698),959=>array(20,-13,501,462),960=>array(0,-13,673,486),961=>array(0,-218,503,462),962=>array(22,-187,475,462),963=>array(20,-13,583,486),964=>array(42,-13,497,486),965=>array(53,-13,551,462),966=>array(28,-206,618,462),967=>array(-75,-206,527,462),968=>array(47,-211,706,571),969=>array(15,-13,684,474),970=>array(33,-13,393,632),971=>array(53,-13,551,632),972=>array(20,-13,501,719),973=>array(53,-13,551,719),974=>array(15,-13,684,721),976=>array(29,-13,510,698),977=>array(30,-13,620,698),978=>array(108,0,787,676),979=>array(111,0,996,694),980=>array(108,0,787,851),981=>array(21,-211,610,630),982=>array(15,-13,744,547),983=>array(0,-175,520,462),984=>array(90,0,690,667),985=>array(20,-206,501,462),986=>array(77,-1,672,685),987=>array(10,-187,551,486),988=>array(0,0,673,669),989=>array(-75,-212,586,486),990=>array(69,-18,674,685),991=>array(-15,-178,385,698),992=>array(0,0,695,682),993=>array(0,-206,622,698),1008=>array(0,-13,534,474),1009=>array(-9,-240,511,474),1010=>array(-1,-13,453,474),1011=>array(-75,-207,393,685),1012=>array(27,-18,691,685),1013=>array(27,-3,448,458),1014=>array(0,-3,426,458),1015=>array(0,0,601,669),1016=>array(2,-205,536,692),1017=>array(32,-18,674,685),1018=>array(0,0,946,669),1019=>array(-36,-212,740,462),1020=>array(-107,-212,496,462),1021=>array(12,-18,654,685),1022=>array(32,-18,674,685),1023=>array(12,-18,654,685),1024=>array(0,0,680,900),1025=>array(0,0,680,862),1026=>array(100,-12,749,669),1027=>array(0,0,680,900),1028=>array(32,-18,677,685),1029=>array(0,-18,524,685),1030=>array(0,0,438,669),1031=>array(0,0,481,862),1032=>array(0,-99,570,669),1033=>array(0,-12,1012,669),1034=>array(0,0,978,669),1035=>array(91,-1,759,669),1036=>array(0,0,770,900),1037=>array(0,0,823,900),1038=>array(113,-12,814,883),1039=>array(0,-180,823,669),1040=>array(0,0,660,683),1041=>array(0,0,687,669),1042=>array(0,0,648,669),1043=>array(0,0,680,669),1044=>array(-48,-180,830,669),1045=>array(0,0,680,669),1046=>array(0,0,1110,680),1047=>array(0,-19,658,685),1048=>array(0,0,823,669),1049=>array(0,0,823,883),1050=>array(0,0,770,680),1051=>array(0,-12,856,669),1052=>array(0,-12,946,669),1053=>array(0,0,823,669),1054=>array(36,-18,700,685),1055=>array(0,0,823,669),1056=>array(0,0,640,669),1057=>array(41,-18,686,685),1058=>array(89,0,689,669),1059=>array(113,-12,814,669),1060=>array(54,0,806,669),1061=>array(0,0,718,669),1062=>array(0,-180,824,669),1063=>array(108,0,763,669),1064=>array(0,0,1181,669),1065=>array(0,-180,1181,669),1066=>array(80,0,715,669),1067=>array(0,0,1029,669),1068=>array(0,0,593,669),1069=>array(0,-19,708,685),1070=>array(0,-18,1062,685),1071=>array(0,0,827,669),1072=>array(14,-14,490,462),1073=>array(29,-13,588,690),1074=>array(25,-13,452,462),1075=>array(0,-13,366,462),1076=>array(24,-13,468,699),1077=>array(24,-13,417,462),1078=>array(3,-13,930,462),1079=>array(7,-14,431,462),1080=>array(35,-9,512,462),1081=>array(35,-9,512,676),1082=>array(14,-10,530,465),1083=>array(0,-10,563,462),1084=>array(0,-18,735,462),1085=>array(16,-9,516,461),1086=>array(25,-13,469,462),1087=>array(10,-9,509,462),1088=>array(-81,-205,485,462),1089=>array(24,-13,421,462),1090=>array(10,-9,746,462),1091=>array(2,-204,518,462),1092=>array(24,-205,755,698),1093=>array(-30,-13,485,462),1094=>array(35,-180,512,462),1095=>array(54,-9,512,462),1096=>array(35,-9,759,462),1097=>array(35,-180,760,462),1098=>array(45,-13,622,462),1099=>array(62,-13,727,462),1100=>array(62,-13,465,461),1101=>array(9,-13,453,462),1102=>array(16,-13,728,462),1103=>array(0,-11,557,449),1104=>array(24,-13,417,697),1105=>array(24,-13,473,655),1106=>array(27,-204,531,699),1107=>array(0,-13,411,697),1108=>array(25,-13,465,462),1109=>array(0,-13,352,462),1110=>array(40,-9,301,685),1111=>array(19,-9,361,655),1112=>array(-75,-207,393,685),1113=>array(0,-13,761,462),1114=>array(14,-13,713,461),1115=>array(17,-9,528,699),1116=>array(14,-10,530,697),1117=>array(35,-9,512,697),1118=>array(2,-204,518,676),1119=>array(35,-180,512,462),1120=>array(18,-18,968,685),1121=>array(25,-13,685,462),1122=>array(50,0,724,669),1123=>array(14,-13,719,462),1124=>array(0,-18,1051,685),1125=>array(16,-13,729,462),1126=>array(0,0,870,683),1127=>array(0,-13,715,462),1128=>array(0,0,1186,683),1129=>array(16,-13,903,462),1130=>array(0,0,1016,669),1131=>array(0,-11,806,449),1132=>array(0,0,1341,669),1133=>array(16,-11,992,461),1134=>array(-13,-212,647,862),1135=>array(-16,-184,465,596),1136=>array(50,0,1008,673),1137=>array(36,-206,812,676),1138=>array(27,-18,691,685),1139=>array(24,-13,512,462),1140=>array(138,-18,886,679),1141=>array(66,-13,622,470),1142=>array(138,-18,886,878),1143=>array(66,-13,622,713),1144=>array(34,-204,1164,685),1145=>array(23,-204,940,462),1146=>array(28,-74,883,741),1147=>array(25,-52,607,501),1148=>array(28,-18,978,900),1149=>array(22,-13,730,698),1150=>array(18,-18,968,849),1151=>array(25,-13,685,643),1152=>array(77,-1,672,685),1153=>array(25,-172,422,462),1154=>array(12,-212,310,151),1155=>array(-222,516,160,675),1156=>array(-315,500,131,679),1157=>array(-103,511,104,750),1158=>array(-71,511,138,750),1159=>array(-430,535,235,715),1160=>array(-758,-134,275,869),1161=>array(-787,-253,357,891),1162=>array(0,-157,823,883),1163=>array(45,-157,535,676),1164=>array(0,0,593,669),1165=>array(35,-13,458,461),1166=>array(0,0,640,669),1167=>array(-80,-205,486,462),1168=>array(0,0,727,827),1169=>array(6,0,509,559),1170=>array(0,0,680,669),1171=>array(17,0,500,449),1172=>array(0,-165,675,669),1173=>array(9,-203,483,449),1174=>array(0,-180,1110,680),1175=>array(3,-180,930,462),1176=>array(0,-212,658,685),1177=>array(0,-173,424,462),1178=>array(0,-180,770,680),1179=>array(14,-180,530,465),1180=>array(0,0,806,680),1181=>array(14,-10,556,465),1182=>array(0,0,770,680),1183=>array(14,-10,530,465),1184=>array(81,0,892,680),1185=>array(35,-10,684,465),1186=>array(0,-180,824,669),1187=>array(16,-180,516,461),1188=>array(0,0,1039,669),1189=>array(16,-9,724,461),1190=>array(1,-165,1056,669),1191=>array(14,-203,739,462),1192=>array(32,-225,677,685),1193=>array(15,-182,450,462),1194=>array(32,-212,677,685),1195=>array(15,-173,412,462),1196=>array(89,-167,689,669),1197=>array(16,-180,752,462),1198=>array(128,0,714,669),1199=>array(64,-205,708,470),1200=>array(106,0,714,669),1201=>array(64,-205,708,470),1202=>array(0,-180,718,669),1203=>array(-16,-180,499,462),1204=>array(79,-180,1054,669),1205=>array(36,-180,562,449),1206=>array(128,-180,783,669),1207=>array(64,-180,521,462),1208=>array(128,0,783,669),1209=>array(54,-9,512,462),1210=>array(0,0,655,669),1211=>array(20,-9,531,699),1212=>array(50,-19,861,686),1213=>array(35,-13,576,462),1214=>array(50,-212,861,686),1215=>array(35,-212,576,462),1216=>array(0,0,438,669),1217=>array(0,0,1110,883),1218=>array(3,-13,930,676),1219=>array(0,-165,770,680),1220=>array(14,-203,530,465),1221=>array(0,-157,856,669),1222=>array(0,-157,563,462),1223=>array(0,-165,823,669),1224=>array(16,-203,516,461),1225=>array(0,-157,823,669),1226=>array(16,-157,516,461),1227=>array(118,-167,773,669),1228=>array(54,-110,508,462),1229=>array(0,-157,946,669),1230=>array(0,-157,735,462),1231=>array(0,0,438,669),1232=>array(0,0,660,883),1233=>array(14,-14,490,676),1234=>array(0,0,660,862),1235=>array(14,-14,490,655),1236=>array(0,0,982,669),1237=>array(20,-13,698,462),1238=>array(0,0,680,883),1239=>array(24,-13,471,676),1240=>array(19,-19,626,686),1241=>array(6,-13,399,462),1242=>array(19,-19,626,868),1243=>array(6,-13,436,632),1244=>array(0,0,1110,848),1245=>array(3,-13,930,632),1246=>array(0,-19,658,869),1247=>array(7,-14,456,632),1248=>array(15,-18,684,669),1249=>array(-65,-217,464,449),1250=>array(0,0,823,800),1251=>array(35,-9,512,581),1252=>array(0,0,823,859),1253=>array(35,-9,512,632),1254=>array(36,-18,700,860),1255=>array(25,-13,484,632),1256=>array(27,-18,691,685),1257=>array(12,-13,456,462),1258=>array(27,-18,691,860),1259=>array(12,-13,484,632),1260=>array(0,-19,708,869),1261=>array(9,-13,455,632),1262=>array(113,-12,814,800),1263=>array(2,-204,518,589),1264=>array(113,-12,814,852),1265=>array(2,-204,518,632),1266=>array(113,-12,814,890),1267=>array(2,-204,561,683),1268=>array(108,0,763,851),1269=>array(54,-9,512,632),1270=>array(0,-180,680,669),1271=>array(16,-186,490,449),1272=>array(0,0,1029,852),1273=>array(62,-13,727,632),1296=>array(28,-19,682,691),1297=>array(15,-14,471,473),1298=>array(0,-165,856,669),1299=>array(0,-203,542,462),1306=>array(33,-208,697,685),1307=>array(21,-205,491,462),1308=>array(128,-18,1003,669),1309=>array(43,-13,641,462),1310=>array(0,0,770,680),1311=>array(14,-10,530,465),1329=>array(148,-41,905,662),1330=>array(15,0,833,676),1331=>array(123,0,898,676),1332=>array(95,0,981,676),1333=>array(148,-14,848,662),1334=>array(33,-87,780,674),1335=>array(112,-87,876,662),1336=>array(80,-87,808,676),1337=>array(15,0,1009,676),1338=>array(67,-14,935,662),1339=>array(15,0,797,676),1340=>array(112,-87,742,662),1341=>array(15,0,1045,662),1342=>array(143,-19,1099,691),1343=>array(150,0,830,662),1344=>array(10,-61,530,662),1345=>array(58,-25,797,674),1346=>array(95,-87,927,676),1347=>array(63,-14,767,675),1348=>array(148,-14,1081,662),1349=>array(74,-15,695,691),1350=>array(155,-14,975,749),1351=>array(85,-16,805,678),1352=>array(15,0,772,676),1353=>array(83,-148,840,678),1354=>array(117,0,831,676),1355=>array(43,-87,804,674),1356=>array(15,0,995,676),1357=>array(148,-14,905,662),1358=>array(105,-87,913,662),1359=>array(71,-14,640,677),1360=>array(15,0,833,676),1361=>array(74,-15,691,676),1362=>array(15,0,701,662),1363=>array(95,0,870,664),1364=>array(50,0,926,676),1365=>array(90,-14,818,676),1366=>array(67,-15,769,662),1369=>array(189,491,335,725),1370=>array(255,497,401,731),1371=>array(128,398,268,685),1372=>array(122,389,408,662),1373=>array(197,479,382,776),1374=>array(87,496,409,676),1375=>array(108,530,398,683),1377=>array(86,-14,845,461),1378=>array(-28,-200,572,473),1379=>array(68,-200,598,473),1380=>array(15,-200,605,473),1381=>array(86,-14,583,676),1382=>array(68,-200,578,473),1383=>array(66,-87,566,676),1384=>array(25,-200,559,473),1385=>array(-28,-200,624,473),1386=>array(68,-14,673,676),1387=>array(-28,-200,559,676),1388=>array(25,-200,305,461),1389=>array(-28,-200,825,676),1390=>array(72,-10,682,690),1391=>array(86,-200,578,676),1392=>array(15,0,559,676),1393=>array(63,-13,508,665),1394=>array(15,-200,559,473),1395=>array(63,-13,660,669),1396=>array(86,-14,612,662),1397=>array(-24,-200,415,461),1398=>array(102,-14,594,676),1399=>array(-17,-200,479,461),1400=>array(15,0,559,473),1401=>array(-18,-200,430,464),1402=>array(86,-200,845,461),1403=>array(1,-200,499,461),1404=>array(15,0,565,473),1405=>array(86,-14,578,461),1406=>array(86,-200,624,676),1407=>array(86,-14,832,473),1408=>array(-28,-200,559,473),1409=>array(55,-200,578,473),1410=>array(68,0,305,461),1411=>array(86,-200,832,676),1412=>array(-28,-200,579,473),1413=>array(72,-14,537,473),1414=>array(64,-200,682,670),1415=>array(86,-14,592,676),1417=>array(23,-13,264,459),1418=>array(75,144,394,326),1423=>array(94,0,793,676),1425=>array(161,-235,357,-45),1426=>array(484,665,696,855),1427=>array(175,665,349,900),1428=>array(548,665,651,855),1429=>array(369,665,699,855),1430=>array(195,-265,301,-45),1431=>array(390,665,533,845),1432=>array(290,665,584,820),1433=>array(120,671,226,891),1434=>array(414,-235,649,-55),1435=>array(148,-265,325,-45),1436=>array(407,665,583,885),1437=>array(654,665,830,885),1438=>array(319,665,615,885),1439=>array(115,666,548,886),1440=>array(460,666,671,886),1441=>array(55,668,268,852),1442=>array(245,-235,441,-45),1443=>array(41,-220,303,-45),1444=>array(84,-235,302,-55),1445=>array(82,-265,257,-45),1446=>array(57,-265,330,-45),1447=>array(162,-264,357,-55),1448=>array(211,665,317,885),1449=>array(75,666,249,886),1450=>array(186,-235,381,-45),1451=>array(268,664,486,844),1452=>array(262,665,524,840),1453=>array(335,-265,441,-45),1454=>array(-71,665,223,820),1455=>array(367,665,550,843),1456=>array(211,-236,322,-45),1457=>array(74,-235,417,-45),1458=>array(67,-235,405,-45),1459=>array(60,-235,403,-45),1460=>array(243,-120,322,-45),1461=>array(184,-120,378,-45),1462=>array(155,-235,370,-45),1463=>array(172,-110,408,-55),1464=>array(160,-235,397,-55),1465=>array(281,645,359,720),1466=>array(186,628,295,734),1467=>array(266,-235,555,-45),1468=>array(347,262,425,338),1469=>array(184,-230,274,-45),1470=>array(133,440,522,600),1471=>array(220,654,428,709),1472=>array(49,-15,242,660),1473=>array(758,646,836,721),1474=>array(237,646,315,721),1475=>array(131,50,412,620),1476=>array(494,646,572,721),1477=>array(226,-145,335,-39),1478=>array(52,0,380,644),1479=>array(146,-272,407,-55),1488=>array(51,0,656,644),1489=>array(23,0,527,645),1490=>array(11,-1,386,644),1491=>array(143,-5,600,645),1492=>array(50,-5,636,645),1493=>array(143,-5,332,644),1494=>array(128,-7,367,644),1495=>array(58,-5,634,645),1496=>array(88,0,625,644),1497=>array(144,301,339,645),1498=>array(143,-285,573,645),1499=>array(20,0,556,645),1500=>array(140,-5,586,899),1501=>array(56,0,598,645),1502=>array(68,0,631,637),1503=>array(43,-280,349,644),1504=>array(8,0,404,644),1505=>array(68,0,566,645),1506=>array(17,-222,629,644),1507=>array(59,-280,542,645),1508=>array(18,0,548,644),1509=>array(78,-280,612,646),1510=>array(38,0,624,645),1511=>array(-17,-300,605,645),1512=>array(143,-5,547,645),1513=>array(102,0,790,645),1514=>array(10,-5,616,645),1520=>array(143,-5,598,644),1521=>array(144,-5,598,645),1522=>array(114,301,576,645),1523=>array(213,475,475,752),1524=>array(137,475,574,752),3585=>array(86,0,604,534),3586=>array(84,0,627,538),3587=>array(132,0,710,537),3588=>array(119,0,600,534),3589=>array(119,0,609,535),3590=>array(127,-15,748,537),3591=>array(97,0,481,534),3592=>array(120,0,550,536),3593=>array(101,-17,672,536),3594=>array(84,0,634,562),3595=>array(132,0,715,562),3596=>array(84,-17,948,534),3597=>array(86,-265,853,534),3598=>array(59,-226,647,534),3599=>array(59,-226,651,534),3600=>array(-20,-300,551,531),3601=>array(118,0,764,537),3602=>array(119,-17,925,534),3603=>array(98,-17,905,534),3604=>array(119,0,600,534),3605=>array(119,0,613,534),3606=>array(86,-16,592,534),3607=>array(128,0,704,534),3608=>array(54,0,579,539),3609=>array(129,-17,661,534),3610=>array(102,0,670,534),3611=>array(102,0,711,747),3612=>array(64,0,670,534),3613=>array(64,0,712,747),3614=>array(137,0,757,534),3615=>array(139,0,803,747),3616=>array(59,-17,651,534),3617=>array(55,-17,638,534),3618=>array(85,-16,601,536),3619=>array(101,-17,551,531),3620=>array(100,-224,604,534),3621=>array(80,-16,585,536),3622=>array(59,-226,651,534),3623=>array(112,-17,542,536),3624=>array(119,0,660,556),3625=>array(92,0,853,534),3626=>array(80,-16,639,555),3627=>array(126,0,679,534),3628=>array(135,0,909,731),3629=>array(93,-16,576,536),3630=>array(71,-16,611,569),3631=>array(126,0,543,534),3632=>array(41,-3,502,526),3633=>array(-33,589,342,800),3634=>array(110,0,442,534),3635=>array(106,0,469,783),3636=>array(-281,546,51,748),3637=>array(-272,545,81,801),3638=>array(-289,543,84,814),3639=>array(-272,544,91,800),3640=>array(-283,-300,-73,-52),3641=>array(-442,-300,-55,-52),3642=>array(-193,-177,-66,-54),3647=>array(16,-129,699,770),3648=>array(81,-16,330,527),3649=>array(81,-16,599,527),3650=>array(149,-16,598,900),3651=>array(135,-16,501,900),3652=>array(133,-16,502,900),3653=>array(109,-224,443,534),3654=>array(102,-224,521,536),3655=>array(-256,560,153,886),3656=>array(-2,674,105,847),3657=>array(-166,680,167,871),3658=>array(-313,675,126,868),3659=>array(-84,679,96,847),3660=>array(-104,677,185,894),3661=>array(-99,571,69,742),3662=>array(-166,602,103,900),3663=>array(105,-10,665,536),3664=>array(70,-19,558,395),3665=>array(69,-19,557,395),3666=>array(64,-17,606,603),3667=>array(69,-21,627,392),3668=>array(64,-19,725,602),3669=>array(64,-22,737,587),3670=>array(91,-19,518,607),3671=>array(69,-19,778,608),3672=>array(71,-19,717,598),3673=>array(69,-16,675,598),3674=>array(126,0,770,534),3675=>array(73,-18,1422,541),4256=>array(80,-3,570,706),4257=>array(85,5,551,717),4258=>array(74,-2,655,698),4259=>array(86,-28,811,697),4260=>array(76,-3,622,696),4261=>array(76,-3,619,697),4262=>array(71,-2,567,698),4263=>array(65,-2,868,697),4264=>array(78,-3,609,697),4265=>array(77,1,617,695),4266=>array(74,-21,1022,691),4267=>array(80,-2,607,697),4268=>array(77,-3,649,709),4269=>array(64,-1,865,697),4270=>array(73,-2,605,698),4271=>array(74,-3,646,695),4272=>array(59,-2,815,719),4273=>array(82,-2,557,699),4274=>array(73,-3,665,697),4275=>array(170,-3,720,699),4276=>array(139,-2,739,697),4277=>array(64,-3,645,700),4278=>array(86,-29,810,697),4279=>array(77,1,647,697),4280=>array(128,-2,672,698),4281=>array(41,-2,557,699),4282=>array(82,-3,628,712),4283=>array(80,-2,607,699),4284=>array(35,-3,725,697),4285=>array(106,-3,575,713),4286=>array(84,-2,552,700),4287=>array(25,-146,748,700),4288=>array(71,-2,602,699),4289=>array(70,-2,612,699),4290=>array(57,-4,661,697),4291=>array(58,2,646,698),4292=>array(71,-3,636,697),4293=>array(70,-1,590,697),4304=>array(65,10,533,505),4305=>array(73,11,533,697),4306=>array(14,-270,579,396),4307=>array(29,-300,738,395),4308=>array(7,-272,533,397),4309=>array(8,-273,540,396),4310=>array(64,10,551,685),4311=>array(72,10,816,400),4312=>array(70,11,532,396),4313=>array(6,-274,541,394),4314=>array(19,-289,952,396),4315=>array(73,10,592,682),4316=>array(71,10,633,695),4317=>array(66,11,809,397),4318=>array(62,10,583,686),4319=>array(9,-272,565,396),4320=>array(56,9,809,695),4321=>array(125,10,593,687),4322=>array(22,-272,590,395),4323=>array(73,-271,618,398),4324=>array(78,-272,663,400),4325=>array(6,-272,629,687),4326=>array(29,-296,738,395),4327=>array(9,-275,569,396),4328=>array(122,10,659,685),4329=>array(35,10,544,686),4330=>array(17,-271,553,417),4331=>array(74,10,593,686),4332=>array(119,-272,687,686),4333=>array(3,-271,551,699),4334=>array(126,10,588,686),4335=>array(-57,-271,745,394),4336=>array(62,10,592,691),4337=>array(66,10,598,687),4338=>array(18,9,623,396),4339=>array(-52,-268,527,396),4340=>array(7,-271,573,501),4341=>array(64,11,575,684),4342=>array(73,-269,854,686),4343=>array(10,-271,536,398),4344=>array(9,-272,541,394),4345=>array(81,-256,646,410),4346=>array(31,-214,544,398),4347=>array(28,-20,478,602),4348=>array(53,219,475,734),5024=>array(18,0,777,676),5025=>array(19,-9,770,676),5026=>array(108,0,755,676),5027=>array(31,-19,915,676),5028=>array(89,-19,1092,691),5029=>array(-3,0,381,691),5030=>array(63,-19,632,690),5031=>array(83,-14,812,676),5032=>array(20,0,621,676),5033=>array(56,-19,894,676),5034=>array(-12,0,674,690),5035=>array(16,-38,619,676),5036=>array(18,0,739,676),5037=>array(70,0,882,676),5038=>array(37,0,664,695),5039=>array(10,-14,735,667),5040=>array(18,0,570,676),5041=>array(18,0,729,676),5042=>array(40,-19,940,695),5043=>array(126,-15,1094,676),5044=>array(51,-19,694,695),5045=>array(-9,0,673,676),5046=>array(81,-19,787,691),5047=>array(16,0,1067,676),5048=>array(69,0,555,695),5049=>array(33,-19,936,695),5050=>array(83,-19,1215,691),5051=>array(18,0,900,676),5052=>array(73,-19,625,676),5053=>array(73,-19,989,676),5054=>array(81,-19,809,691),5055=>array(83,-19,748,676),5056=>array(80,-19,799,691),5057=>array(8,-19,783,696),5058=>array(18,0,742,676),5059=>array(21,0,741,676),5060=>array(88,0,660,696),5061=>array(81,-19,1072,691),5062=>array(47,1,791,676),5063=>array(18,-19,853,680),5064=>array(106,-19,902,696),5065=>array(81,0,1153,695),5066=>array(19,-19,806,680),5067=>array(53,-19,644,696),5068=>array(119,-19,827,676),5069=>array(47,-19,946,696),5070=>array(56,0,667,676),5071=>array(15,0,645,676),5072=>array(76,0,580,676),5073=>array(132,-19,870,696),5074=>array(21,0,745,676),5075=>array(118,-14,558,676),5076=>array(127,-19,1172,676),5077=>array(51,-19,684,690),5078=>array(98,-14,751,676),5079=>array(10,-19,834,676),5080=>array(10,-19,827,676),5081=>array(126,-18,817,676),5082=>array(26,-19,628,692),5083=>array(72,-19,1042,696),5084=>array(16,-10,726,671),5085=>array(-12,0,673,694),5086=>array(18,0,686,676),5087=>array(81,-19,787,691),5088=>array(119,-19,917,695),5089=>array(53,-19,952,695),5090=>array(15,0,709,676),5091=>array(86,-19,811,691),5092=>array(113,0,1018,676),5093=>array(18,0,954,676),5094=>array(18,0,868,676),5095=>array(41,-14,729,662),5096=>array(80,-19,910,696),5097=>array(71,-19,962,696),5098=>array(47,-19,969,696),5099=>array(86,-19,814,691),5100=>array(90,-15,867,680),5101=>array(36,-19,649,696),5102=>array(81,-20,660,696),5103=>array(18,-19,853,680),5104=>array(33,-101,704,696),5105=>array(56,-19,918,676),5106=>array(-12,0,712,694),5107=>array(81,-19,932,688),5108=>array(17,0,700,676),7424=>array(0,0,436,451),7425=>array(0,0,649,442),7426=>array(19,-12,697,463),7427=>array(0,0,428,442),7428=>array(27,-12,453,453),7429=>array(0,0,483,442),7431=>array(0,0,449,442),7432=>array(10,-13,450,463),7433=>array(37,-211,298,483),7434=>array(0,-66,377,442),7435=>array(0,0,478,442),7436=>array(0,0,404,442),7437=>array(0,-8,625,442),7439=>array(23,-12,462,453),7448=>array(0,0,423,442),7450=>array(5,-11,437,431),7451=>array(58,0,455,442),7452=>array(70,-12,518,442),7456=>array(84,-12,514,442),7457=>array(84,-12,662,442),7458=>array(0,0,397,442),7579=>array(93,380,467,699),7581=>array(110,321,361,693),7582=>array(116,380,423,858),7583=>array(92,380,387,700),7588=>array(119,384,314,850),7589=>array(131,382,302,692),7592=>array(91,249,453,849),7593=>array(108,254,327,860),7596=>array(104,252,586,700),7597=>array(112,254,594,701),7598=>array(104,252,427,700),7599=>array(107,253,439,700),7600=>array(88,383,462,691),7601=>array(108,380,406,699),7602=>array(113,270,493,871),7603=>array(78,237,327,700),7604=>array(67,294,480,900),7605=>array(49,236,347,789),7606=>array(126,383,466,700),7607=>array(104,383,453,691),7608=>array(130,383,430,687),7609=>array(130,381,438,700),7612=>array(80,237,489,691),7613=>array(90,284,381,691),7614=>array(49,244,405,691),7615=>array(140,381,458,845),7680=>array(0,-250,660,683),7681=>array(14,-264,490,462),7682=>array(0,0,648,839),7683=>array(25,-13,486,699),7684=>array(0,-184,648,669),7685=>array(25,-197,483,699),7686=>array(0,-137,648,669),7687=>array(-38,-144,483,699),7688=>array(41,-218,686,899),7689=>array(-6,-218,471,683),7690=>array(0,0,731,839),7691=>array(20,-13,558,699),7692=>array(0,-184,731,669),7693=>array(20,-197,558,699),7694=>array(0,-137,731,669),7695=>array(-24,-138,558,699),7696=>array(0,-222,731,669),7697=>array(-22,-231,544,699),7698=>array(0,-213,731,669),7699=>array(-15,-211,558,699),7700=>array(0,0,680,900),7701=>array(24,-13,459,844),7702=>array(0,0,680,900),7703=>array(24,-13,493,844),7704=>array(0,-223,680,669),7705=>array(-48,-236,417,462),7706=>array(0,-173,680,669),7707=>array(-44,-186,417,462),7708=>array(0,-222,680,871),7709=>array(24,-218,480,664),7710=>array(0,0,673,839),7711=>array(-95,-205,520,869),7712=>array(44,-18,729,800),7713=>array(-22,-203,508,590),7714=>array(0,0,823,839),7715=>array(20,-9,531,869),7716=>array(0,-184,823,669),7717=>array(20,-193,531,699),7718=>array(0,0,823,839),7719=>array(20,-9,574,869),7720=>array(0,-222,823,669),7721=>array(-23,-219,531,699),7722=>array(0,-193,823,669),7723=>array(20,-202,531,699),7724=>array(-70,-173,438,669),7725=>array(-85,-182,301,685),7726=>array(0,0,516,900),7727=>array(40,-9,409,851),7728=>array(0,0,723,890),7729=>array(20,-8,603,899),7730=>array(0,-184,723,669),7731=>array(20,-180,526,699),7732=>array(0,-143,723,669),7733=>array(11,-139,526,699),7734=>array(0,-184,612,669),7735=>array(5,-193,330,699),7736=>array(0,-184,660,800),7737=>array(5,-193,443,809),7738=>array(0,-140,612,669),7739=>array(-71,-143,330,699),7740=>array(0,-210,612,669),7741=>array(-102,-213,330,699),7742=>array(0,-12,946,890),7743=>array(10,-9,746,683),7744=>array(0,-12,946,839),7745=>array(10,-9,746,632),7746=>array(0,-183,946,669),7747=>array(10,-178,746,462),7748=>array(0,-15,775,839),7749=>array(10,-9,509,632),7750=>array(0,-199,775,669),7751=>array(10,-193,509,462),7752=>array(0,-146,775,669),7753=>array(-3,-143,509,462),7754=>array(0,-238,775,669),7755=>array(-5,-232,509,462),7756=>array(27,-15,716,899),7757=>array(25,-13,531,853),7758=>array(27,-15,695,900),7759=>array(25,-13,529,807),7760=>array(27,-15,691,900),7761=>array(25,-13,487,844),7762=>array(27,-15,691,900),7763=>array(25,-13,518,844),7764=>array(0,0,640,890),7765=>array(-81,-205,514,683),7766=>array(0,0,640,839),7767=>array(-81,-205,485,632),7768=>array(0,0,652,839),7769=>array(10,0,420,632),7770=>array(0,-184,652,669),7771=>array(3,-184,420,462),7772=>array(0,-184,652,800),7773=>array(3,-184,436,582),7774=>array(0,-110,652,669),7775=>array(-47,-110,420,462),7776=>array(0,-18,524,839),7777=>array(0,-13,352,632),7778=>array(0,-182,524,685),7779=>array(0,-176,352,462),7780=>array(2,-15,526,900),7781=>array(0,-13,397,830),7782=>array(2,-15,526,900),7783=>array(0,-13,419,818),7784=>array(0,-182,524,839),7785=>array(0,-176,352,632),7786=>array(89,0,689,839),7787=>array(32,-9,328,764),7788=>array(89,-180,689,669),7789=>array(-11,-184,324,594),7790=>array(65,-143,689,669),7791=>array(-67,-143,324,594),7792=>array(26,-223,689,669),7793=>array(-117,-232,324,594),7794=>array(107,-179,784,669),7795=>array(3,-178,512,462),7796=>array(98,-175,784,669),7797=>array(-8,-168,512,462),7798=>array(104,-218,784,669),7799=>array(-9,-214,512,462),7800=>array(67,-15,744,900),7801=>array(35,-9,528,852),7802=>array(107,-18,784,898),7803=>array(35,-9,554,788),7804=>array(128,-18,778,828),7805=>array(54,-13,470,621),7806=>array(128,-186,778,669),7807=>array(49,-183,439,462),7808=>array(128,-18,1003,890),7809=>array(54,-13,652,683),7810=>array(128,-18,1003,890),7811=>array(54,-13,652,683),7812=>array(128,-18,1003,839),7813=>array(54,-13,652,632),7814=>array(128,-18,1003,839),7815=>array(54,-13,652,632),7816=>array(128,-179,1003,669),7817=>array(54,-174,652,462),7818=>array(0,0,718,839),7819=>array(-30,-13,485,632),7820=>array(0,0,718,839),7821=>array(-30,-13,485,632),7822=>array(128,0,714,839),7823=>array(-53,-205,433,632),7824=>array(0,0,601,883),7825=>array(0,-78,427,676),7826=>array(0,-184,601,669),7827=>array(0,-236,411,449),7828=>array(0,-146,601,669),7829=>array(-36,-188,411,449),7830=>array(20,-146,531,699),7831=>array(32,-9,422,764),7832=>array(54,-13,652,705),7833=>array(-53,-205,433,705),7834=>array(14,-14,595,731),7835=>array(-95,-205,520,869),7836=>array(-75,-205,540,698),7837=>array(-75,-205,540,698),7838=>array(1,-9,815,683),7839=>array(17,-13,502,689),7840=>array(0,-184,660,683),7841=>array(14,-198,490,462),7842=>array(0,0,660,900),7843=>array(14,-14,490,686),7844=>array(0,0,863,900),7845=>array(14,-14,667,800),7846=>array(0,0,660,900),7847=>array(1,-14,490,800),7848=>array(0,0,780,899),7849=>array(14,-14,584,797),7850=>array(0,0,720,900),7851=>array(14,-14,564,858),7852=>array(0,-184,660,883),7853=>array(14,-198,490,676),7854=>array(-67,0,604,900),7855=>array(14,-14,510,854),7856=>array(-67,0,593,900),7857=>array(14,-14,490,851),7858=>array(-67,0,593,900),7859=>array(14,-14,490,820),7860=>array(-67,0,619,900),7861=>array(14,-14,548,843),7862=>array(0,-184,660,889),7863=>array(14,-198,492,664),7864=>array(0,-184,680,669),7865=>array(24,-197,417,462),7866=>array(0,0,680,871),7867=>array(24,-13,417,688),7868=>array(0,0,680,828),7869=>array(24,-13,493,621),7870=>array(0,0,836,900),7871=>array(24,-13,655,803),7872=>array(0,0,680,900),7873=>array(8,-13,463,800),7874=>array(0,0,753,899),7875=>array(24,-13,582,798),7876=>array(0,0,682,900),7877=>array(24,-13,551,858),7878=>array(0,-184,680,883),7879=>array(24,-197,441,676),7880=>array(0,0,438,865),7881=>array(40,-9,278,686),7882=>array(0,-184,438,669),7883=>array(-9,-193,301,685),7884=>array(36,-202,700,685),7885=>array(25,-197,469,462),7886=>array(36,-18,700,874),7887=>array(25,-13,469,686),7888=>array(36,-18,866,900),7889=>array(25,-13,666,794),7890=>array(36,-18,700,900),7891=>array(23,-13,471,800),7892=>array(36,-18,795,897),7893=>array(25,-13,578,799),7894=>array(27,-15,707,900),7895=>array(25,-13,559,844),7896=>array(36,-202,700,883),7897=>array(25,-197,469,676),7898=>array(27,-18,888,900),7899=>array(13,-13,636,693),7900=>array(27,-18,888,900),7901=>array(13,-13,636,693),7902=>array(27,-18,888,896),7903=>array(13,-13,636,689),7904=>array(27,-18,888,871),7905=>array(13,-13,636,694),7906=>array(27,-184,888,725),7907=>array(13,-184,636,590),7908=>array(107,-182,784,669),7909=>array(35,-174,512,462),7910=>array(107,-18,784,874),7911=>array(35,-9,512,686),7912=>array(67,-18,899,894),7913=>array(35,-9,734,693),7914=>array(67,-18,899,894),7915=>array(35,-9,734,693),7916=>array(67,-18,899,893),7917=>array(35,-9,734,689),7918=>array(67,-18,899,856),7919=>array(35,-9,734,694),7920=>array(67,-186,899,725),7921=>array(35,-183,734,590),7922=>array(128,0,714,890),7923=>array(-53,-205,433,683),7924=>array(128,-174,714,669),7925=>array(-53,-205,433,462),7926=>array(128,0,714,877),7927=>array(-53,-205,433,688),7928=>array(128,0,714,828),7929=>array(-53,-205,461,621),7936=>array(17,-13,574,749),7937=>array(17,-13,574,733),7938=>array(17,-13,574,728),7939=>array(17,-13,574,736),7940=>array(17,-13,574,724),7941=>array(17,-13,574,730),7942=>array(17,-13,598,868),7943=>array(17,-13,598,881),7944=>array(0,0,660,713),7945=>array(0,0,660,695),7946=>array(131,0,794,695),7947=>array(145,0,805,692),7948=>array(115,0,775,695),7949=>array(116,0,776,696),7950=>array(59,0,719,831),7951=>array(50,0,710,842),7952=>array(2,-13,435,746),7953=>array(2,-13,435,727),7954=>array(2,-13,435,728),7955=>array(2,-13,435,729),7956=>array(2,-13,484,724),7957=>array(2,-13,460,730),7960=>array(114,0,857,713),7961=>array(139,0,888,696),7962=>array(133,0,987,695),7963=>array(140,0,1001,694),7964=>array(139,0,1024,695),7965=>array(141,0,1018,698),7968=>array(50,-212,529,747),7969=>array(50,-212,529,730),7970=>array(50,-212,529,731),7971=>array(50,-212,529,732),7972=>array(50,-212,578,724),7973=>array(50,-212,593,730),7974=>array(50,-212,666,870),7975=>array(50,-212,673,884),7976=>array(114,0,1001,713),7977=>array(135,0,1024,694),7978=>array(136,0,1137,696),7979=>array(147,0,1156,694),7980=>array(143,0,1173,695),7981=>array(146,0,1179,698),7982=>array(149,0,1084,834),7983=>array(153,0,1096,842),7984=>array(33,-13,310,752),7985=>array(33,-13,341,731),7986=>array(33,-13,350,730),7987=>array(33,-13,350,732),7988=>array(33,-13,438,728),7989=>array(33,-13,429,730),7990=>array(33,-13,498,862),7991=>array(33,-13,504,884),7992=>array(86,0,592,713),7993=>array(134,0,639,693),7994=>array(131,0,745,695),7995=>array(142,0,761,693),7996=>array(132,0,781,695),7997=>array(142,0,782,698),7998=>array(150,0,710,834),7999=>array(150,0,702,845),8000=>array(20,-13,501,745),8001=>array(20,-13,501,730),8002=>array(20,-13,501,729),8003=>array(20,-13,501,731),8004=>array(20,-13,510,724),8005=>array(20,-13,506,730),8008=>array(96,-18,846,713),8009=>array(138,-18,865,695),8010=>array(117,-18,1023,696),8011=>array(142,-18,1055,692),8012=>array(135,-18,987,692),8013=>array(145,-18,995,698),8016=>array(53,-13,551,743),8017=>array(53,-13,551,730),8018=>array(53,-13,551,725),8019=>array(53,-13,551,729),8020=>array(53,-13,552,724),8021=>array(53,-13,556,730),8022=>array(53,-13,617,864),8023=>array(53,-13,621,879),8025=>array(136,0,1024,694),8027=>array(136,0,1140,693),8029=>array(143,0,1173,693),8031=>array(158,0,1092,844),8032=>array(15,-13,684,747),8033=>array(15,-13,684,732),8034=>array(15,-13,684,728),8035=>array(15,-13,684,729),8036=>array(15,-13,684,726),8037=>array(15,-13,684,730),8038=>array(15,-13,684,864),8039=>array(15,-13,694,877),8040=>array(97,0,909,712),8041=>array(137,0,943,695),8042=>array(134,0,1116,693),8043=>array(140,0,1121,695),8044=>array(136,0,1082,693),8045=>array(138,0,1074,696),8046=>array(152,0,1033,832),8047=>array(159,0,1009,844),8048=>array(17,-13,574,729),8049=>array(17,-13,574,720),8050=>array(2,-13,435,725),8051=>array(2,-13,435,717),8052=>array(50,-212,529,725),8053=>array(50,-212,549,719),8054=>array(33,-13,288,725),8055=>array(33,-13,362,720),8056=>array(20,-13,501,725),8057=>array(20,-13,501,720),8058=>array(53,-13,551,725),8059=>array(53,-13,551,719),8060=>array(15,-13,684,725),8061=>array(15,-13,684,720),8064=>array(17,-200,574,749),8065=>array(17,-200,574,733),8066=>array(17,-200,574,728),8067=>array(17,-200,574,736),8068=>array(17,-200,574,724),8069=>array(17,-200,574,730),8070=>array(17,-200,598,868),8071=>array(17,-200,598,881),8072=>array(0,0,842,713),8073=>array(0,0,847,695),8074=>array(131,0,981,695),8075=>array(145,0,991,692),8076=>array(115,0,957,695),8077=>array(116,0,955,696),8078=>array(59,0,897,831),8079=>array(50,0,893,842),8080=>array(40,-212,529,747),8081=>array(40,-212,529,730),8082=>array(40,-212,529,731),8083=>array(40,-212,529,732),8084=>array(40,-212,578,724),8085=>array(40,-212,593,730),8086=>array(40,-212,666,870),8087=>array(40,-212,673,884),8088=>array(114,0,1042,713),8089=>array(135,0,1066,694),8090=>array(136,0,1188,696),8091=>array(147,0,1199,694),8092=>array(143,0,1206,695),8093=>array(146,0,1211,698),8094=>array(149,0,1124,834),8095=>array(153,0,1129,842),8096=>array(15,-200,684,747),8097=>array(15,-200,684,732),8098=>array(15,-200,684,728),8099=>array(15,-200,684,729),8100=>array(15,-200,684,726),8101=>array(15,-200,684,730),8102=>array(15,-200,684,864),8103=>array(15,-200,694,877),8104=>array(97,0,1030,712),8105=>array(137,0,1066,695),8106=>array(134,0,1234,693),8107=>array(140,0,1247,695),8108=>array(136,0,1199,693),8109=>array(138,0,1194,696),8110=>array(152,0,1147,832),8111=>array(159,0,1135,844),8112=>array(17,-13,574,664),8113=>array(17,-13,574,602),8114=>array(17,-200,574,729),8115=>array(17,-200,574,462),8116=>array(17,-200,574,720),8118=>array(17,-13,574,631),8119=>array(17,-200,574,631),8120=>array(0,0,660,871),8121=>array(0,0,660,798),8122=>array(0,0,660,724),8123=>array(0,0,660,693),8124=>array(0,0,835,683),8125=>array(166,501,342,755),8126=>array(0,0,175,161),8127=>array(259,540,425,764),8128=>array(131,559,516,678),8129=>array(160,507,547,796),8130=>array(40,-212,529,725),8131=>array(40,-212,529,462),8132=>array(40,-212,530,720),8134=>array(50,-212,569,633),8135=>array(40,-212,569,633),8136=>array(127,1,807,706),8137=>array(89,0,832,690),8138=>array(124,0,947,707),8139=>array(90,0,983,691),8140=>array(0,0,859,669),8141=>array(168,540,460,766),8142=>array(172,555,497,780),8143=>array(176,527,561,891),8144=>array(33,-13,357,664),8145=>array(14,-13,356,617),8146=>array(32,-13,376,752),8147=>array(33,-13,404,755),8150=>array(33,-13,423,623),8151=>array(33,-13,436,796),8152=>array(0,0,491,871),8153=>array(0,0,469,800),8154=>array(130,0,568,704),8155=>array(98,0,601,691),8157=>array(156,544,451,768),8158=>array(188,558,509,785),8159=>array(181,516,566,890),8160=>array(53,-13,554,664),8161=>array(53,-13,551,610),8162=>array(53,-13,551,752),8163=>array(53,-13,551,750),8164=>array(0,-218,503,708),8165=>array(0,-218,503,713),8166=>array(53,-13,560,623),8167=>array(53,-13,587,796),8168=>array(78,0,786,871),8169=>array(78,0,786,797),8170=>array(139,0,971,727),8171=>array(83,0,966,694),8172=>array(137,0,841,669),8173=>array(176,519,520,752),8174=>array(178,517,522,750),8175=>array(183,557,278,781),8178=>array(15,-200,684,725),8179=>array(15,-200,684,474),8180=>array(15,-200,684,721),8182=>array(15,-13,684,623),8183=>array(15,-200,684,623),8184=>array(146,-18,838,715),8185=>array(89,-18,800,696),8186=>array(133,0,907,724),8187=>array(89,0,888,695),8188=>array(0,0,882,685),8189=>array(191,537,373,761),8190=>array(251,544,435,768),8208=>array(4,178,269,269),8209=>array(4,178,269,269),8210=>array(-40,178,477,269),8211=>array(-40,178,477,269),8212=>array(-40,178,977,269),8213=>array(-40,178,977,269),8214=>array(106,-18,324,685),8215=>array(86,-225,392,-46),8216=>array(92,369,296,685),8217=>array(84,369,288,685),8218=>array(-47,-182,157,134),8219=>array(105,375,316,686),8220=>array(95,369,549,685),8221=>array(84,369,554,685),8222=>array(-28,-182,428,134),8223=>array(105,375,566,686),8224=>array(91,-145,494,685),8225=>array(10,-139,493,685),8226=>array(107,175,470,525),8227=>array(23,101,509,575),8228=>array(70,-13,218,135),8229=>array(70,-13,468,135),8230=>array(70,-13,818,135),8240=>array(7,-29,996,706),8241=>array(39,-10,1577,692),8242=>array(128,398,268,685),8243=>array(128,398,476,685),8244=>array(128,398,764,685),8245=>array(197,479,382,776),8246=>array(214,479,594,776),8247=>array(206,479,756,776),8248=>array(-34,-162,419,203),8249=>array(32,32,303,415),8250=>array(10,32,281,415),8251=>array(107,-56,764,592),8252=>array(67,-13,759,684),8253=>array(118,-13,703,689),8254=>array(155,527,655,607),8255=>array(36,-279,898,-19),8256=>array(214,640,1076,900),8257=>array(-16,-19,480,691),8258=>array(64,-102,888,688),8259=>array(85,200,500,388),8260=>array(-173,-14,508,683),8261=>array(53,-175,444,698),8262=>array(12,-175,403,698),8263=>array(79,-13,970,684),8264=>array(79,-13,870,684),8265=>array(67,-13,859,684),8266=>array(57,0,525,449),8267=>array(-55,-154,559,662),8268=>array(92,155,614,545),8269=>array(69,166,591,556),8270=>array(65,-24,456,409),8271=>array(2,-183,245,459),8272=>array(97,-14,1019,731),8273=>array(65,-23,581,884),8274=>array(18,-14,699,689),8275=>array(62,268,665,424),8276=>array(205,-279,1067,-19),8277=>array(97,-24,836,711),8278=>array(77,-25,527,597),8279=>array(128,398,881,685),8280=>array(55,-25,701,688),8281=>array(-3,-25,777,597),8282=>array(26,-25,362,802),8283=>array(75,-210,721,809),8284=>array(66,-44,637,529),8285=>array(23,-25,359,802),8286=>array(20,-25,356,802),8304=>array(159,386,461,805),8305=>array(188,381,364,847),8308=>array(134,390,474,800),8309=>array(125,390,453,800),8310=>array(142,382,462,798),8311=>array(191,390,502,791),8312=>array(137,386,448,804),8313=>array(135,385,456,800),8314=>array(168,456,417,686),8315=>array(177,531,426,611),8316=>array(161,461,441,681),8317=>array(169,321,382,900),8318=>array(141,320,354,900),8319=>array(116,383,452,700),8320=>array(0,-210,302,209),8321=>array(-9,-200,262,209),8322=>array(-2,-200,309,209),8323=>array(-11,-205,293,213),8324=>array(-17,-200,323,210),8325=>array(-12,-204,316,206),8326=>array(-4,-204,316,212),8327=>array(41,-200,352,201),8328=>array(-8,-205,303,213),8329=>array(-16,-205,305,210),8330=>array(25,-114,274,116),8331=>array(22,-39,271,41),8332=>array(10,-119,290,101),8333=>array(20,-300,233,279),8334=>array(-6,-300,207,280),8336=>array(9,-205,334,120),8337=>array(16,-204,284,120),8338=>array(17,-204,319,120),8339=>array(-21,-203,330,121),8340=>array(8,-204,276,120),8352=>array(61,1,612,678),8353=>array(32,-85,677,753),8354=>array(32,-18,677,685),8355=>array(-13,0,660,669),8356=>array(-32,-12,510,683),8357=>array(12,-114,727,582),8358=>array(-27,-15,748,669),8359=>array(10,-15,983,673),8360=>array(0,-13,1004,669),8361=>array(18,-18,940,669),8362=>array(60,-4,923,605),8363=>array(73,-4,649,802),8364=>array(86,-19,841,676),8365=>array(34,0,814,667),8366=>array(103,0,726,672),8367=>array(7,-212,1480,693),8368=>array(12,-197,579,692),8369=>array(16,-5,709,673),8370=>array(82,-37,692,704),8371=>array(15,-5,737,674),8372=>array(69,-19,584,676),8373=>array(10,-99,565,750),8376=>array(109,-1,648,676),8377=>array(146,-112,761,675),8400=>array(-571,665,95,841),8401=>array(-564,659,102,835),8406=>array(-603,560,19,845),8407=>array(-564,615,58,900),8411=>array(-477,470,69,618),8412=>array(-677,470,69,618),8413=>array(-781,-238,297,840),8414=>array(-760,-213,269,816),8415=>array(-775,-230,291,836),8416=>array(-781,-238,297,840),8417=>array(-570,558,77,843),8421=>array(-309,-96,40,604),8423=>array(-328,15,189,559),8424=>array(-475,-193,71,-45),8426=>array(-612,111,10,396),8427=>array(-577,-98,239,599),8428=>array(-650,-219,16,-43),8429=>array(-646,-225,20,-49),8430=>array(-621,-290,1,-5),8431=>array(-623,-288,-1,-3),8448=>array(58,-14,739,683),8449=>array(68,-14,749,683),8451=>array(106,-18,1020,685),8453=>array(6,-14,687,686),8454=>array(6,-14,709,686),8455=>array(13,-19,650,691),8456=>array(8,-19,699,691),8457=>array(104,0,955,683),8458=>array(1,-207,471,462),8459=>array(19,-33,1056,723),8462=>array(20,-9,531,699),8463=>array(17,-9,528,699),8464=>array(-11,-149,1065,678),8465=>array(8,-37,703,761),8466=>array(-2,-86,895,689),8467=>array(24,-14,527,677),8468=>array(0,-14,911,676),8470=>array(1,-15,855,669),8471=>array(53,-68,882,761),8472=>array(-15,-193,642,479),8475=>array(-1,-8,808,691),8476=>array(23,-44,856,762),8478=>array(-4,-14,710,676),8479=>array(0,-93,714,826),8480=>array(70,203,1054,682),8481=>array(88,0,1080,669),8482=>array(110,204,1081,668),8483=>array(138,-93,788,826),8486=>array(0,0,774,685),8487=>array(34,-16,808,669),8489=>array(40,10,295,472),8490=>array(0,0,723,669),8491=>array(0,0,660,900),8492=>array(-3,-22,880,684),8494=>array(40,-10,535,473),8495=>array(24,-13,417,462),8497=>array(-6,-66,993,705),8498=>array(0,0,673,669),8499=>array(-5,-44,1301,704),8501=>array(21,0,626,644),8502=>array(23,0,527,645),8503=>array(11,-1,386,644),8504=>array(123,-5,580,645),8506=>array(59,-13,952,651),8507=>array(7,-1,1119,669),8523=>array(93,-19,787,682),8525=>array(42,-14,1067,683),8526=>array(2,-1,453,448),8531=>array(79,-12,802,688),8532=>array(102,-15,847,688),8533=>array(73,-14,846,688),8534=>array(107,-14,877,689),8535=>array(92,-18,855,688),8536=>array(107,-14,864,688),8537=>array(79,-12,817,689),8538=>array(86,-18,828,688),8539=>array(72,-13,841,688),8540=>array(86,-18,842,688),8541=>array(92,-15,846,688),8542=>array(77,-15,838,688),8543=>array(79,-12,784,688),8544=>array(0,0,438,669),8545=>array(0,0,761,669),8546=>array(0,0,1084,669),8547=>array(0,-18,1151,669),8548=>array(128,-18,778,669),8549=>array(128,-18,1101,669),8550=>array(128,-18,1409,669),8551=>array(128,-18,1732,669),8552=>array(0,0,1056,669),8553=>array(0,0,718,669),8554=>array(0,0,1073,669),8555=>array(0,0,1398,669),8556=>array(0,0,612,669),8557=>array(41,-18,686,685),8558=>array(0,0,731,669),8559=>array(0,-12,946,669),8560=>array(40,-9,301,685),8561=>array(40,-9,560,685),8562=>array(40,-9,822,685),8563=>array(40,-13,686,685),8564=>array(54,-13,439,462),8565=>array(54,-13,699,685),8566=>array(54,-13,959,685),8567=>array(54,-13,1219,685),8568=>array(40,-13,783,685),8569=>array(-30,-13,485,462),8570=>array(-30,-13,747,685),8571=>array(-30,-13,1007,685),8572=>array(42,-9,330,699),8573=>array(24,-13,421,462),8574=>array(20,-13,558,699),8575=>array(10,-9,746,462),8592=>array(51,36,880,415),8593=>array(106,-189,485,640),8594=>array(51,36,880,415),8595=>array(85,-189,464,640),8596=>array(51,36,913,415),8597=>array(83,-205,462,657),8598=>array(132,-98,751,521),8599=>array(112,-58,731,561),8600=>array(123,-98,742,521),8601=>array(112,-138,731,481),8602=>array(51,-43,880,489),8603=>array(61,-43,890,489),8606=>array(51,36,880,415),8607=>array(116,-189,495,640),8608=>array(61,36,890,415),8609=>array(86,-189,465,640),8610=>array(51,36,891,415),8611=>array(51,36,891,415),8612=>array(51,-23,880,477),8613=>array(45,-188,545,641),8614=>array(91,-23,920,477),8615=>array(155,-187,655,642),8616=>array(61,-232,578,737),8632=>array(60,-98,751,674),8633=>array(31,-213,920,667),8636=>array(63,182,950,415),8637=>array(113,182,1000,415),8638=>array(200,-145,433,742),8639=>array(140,-145,373,742),8640=>array(73,182,960,415),8641=>array(63,182,950,415),8642=>array(190,-145,423,742),8643=>array(110,-145,343,742),8644=>array(51,-164,880,615),8645=>array(76,-189,855,640),8646=>array(51,-164,900,615),8647=>array(71,-164,900,615),8648=>array(76,-209,855,620),8649=>array(31,-164,860,615),8650=>array(56,-169,835,660),8651=>array(73,12,990,587),8652=>array(73,15,970,591),8656=>array(76,-45,953,558),8657=>array(97,-162,700,678),8658=>array(61,-45,938,558),8659=>array(30,-162,633,678),8660=>array(76,-45,957,558),8661=>array(36,-182,704,698),8668=>array(57,23,1103,491),8669=>array(77,23,1123,491),8676=>array(111,-23,920,477),8677=>array(61,-23,870,477),8704=>array(169,-7,740,669),8705=>array(59,-29,611,800),8706=>array(16,-20,472,685),8707=>array(14,0,694,669),8708=>array(14,-135,694,793),8709=>array(52,-18,761,688),8710=>array(6,0,608,688),8711=>array(116,-18,718,670),8712=>array(71,0,606,538),8713=>array(71,-80,613,620),8714=>array(76,-17,484,474),8715=>array(12,0,547,538),8716=>array(8,-80,547,620),8717=>array(92,-18,500,473),8718=>array(57,0,590,691),8719=>array(3,-123,941,746),8720=>array(-9,-123,929,746),8721=>array(-12,-123,782,752),8722=>array(51,209,555,297),8723=>array(99,-54,603,514),8724=>array(62,-16,614,733),8725=>array(0,-12,686,688),8726=>array(120,-12,657,688),8727=>array(112,95,425,443),8728=>array(112,71,485,443),8729=>array(134,104,458,428),8730=>array(53,-35,723,900),8731=>array(53,-35,723,900),8732=>array(53,-35,723,900),8733=>array(71,42,726,456),8734=>array(15,42,733,456),8735=>array(62,0,447,385),8739=>array(72,-162,168,678),8740=>array(30,-162,561,678),8741=>array(72,-162,406,678),8742=>array(0,-162,705,678),8743=>array(42,0,612,574),8744=>array(112,0,682,574),8745=>array(32,0,674,594),8746=>array(70,0,712,594),8747=>array(-3,-200,698,900),8748=>array(-3,-200,1008,900),8749=>array(-3,-200,1318,900),8756=>array(62,-9,566,497),8757=>array(62,-9,566,497),8758=>array(118,-49,266,495),8759=>array(107,-51,652,495),8761=>array(61,17,766,495),8764=>array(102,156,687,366),8770=>array(62,87,614,480),8771=>array(62,87,614,480),8773=>array(52,-3,637,576),8776=>array(92,36,677,486),8778=>array(92,-28,677,569),8784=>array(63,107,567,635),8785=>array(63,-143,567,635),8786=>array(73,-143,577,635),8787=>array(51,-143,579,635),8788=>array(78,17,827,495),8789=>array(70,19,819,497),8790=>array(72,87,624,428),8791=>array(73,107,577,693),8793=>array(64,110,568,730),8794=>array(64,110,568,730),8797=>array(64,110,639,774),8798=>array(63,110,567,693),8799=>array(64,110,568,803),8800=>array(63,-13,567,519),8801=>array(87,12,591,500),8804=>array(71,1,589,672),8805=>array(91,1,629,668),8806=>array(81,-199,605,672),8807=>array(101,-199,619,668),8818=>array(12,-115,597,661),8819=>array(59,-115,644,661),8834=>array(81,-12,716,526),8835=>array(20,-12,655,526),8976=>array(75,64,695,362),8994=>array(93,131,921,400),8995=>array(62,131,889,400),9001=>array(75,-162,462,679),9002=>array(16,-162,403,679),9251=>array(29,0,508,186),9674=>array(48,0,496,740),9675=>array(17,-95,721,609),9676=>array(38,-67,826,722),9688=>array(0,0,644,673),9702=>array(90,101,490,501),9711=>array(53,-68,882,761),9824=>array(80,0,622,555),9825=>array(119,-34,691,561),9826=>array(102,-31,605,590),9827=>array(83,0,589,588),9828=>array(41,-40,631,680),9829=>array(119,-34,691,561),9830=>array(101,-31,605,590),9831=>array(39,-40,663,595),9833=>array(-38,0,373,694),9834=>array(-21,0,528,694),9835=>array(13,0,756,729),9836=>array(13,0,756,729),9837=>array(0,-36,452,730),9838=>array(34,-214,494,712),9839=>array(-8,-197,551,762),11799=>array(42,-56,355,323),42790=>array(-24,-209,799,669),42791=>array(-13,-207,475,699),42792=>array(89,-78,869,669),42793=>array(33,-78,649,594),42794=>array(68,-19,722,691),42795=>array(59,-14,557,673),42796=>array(28,-106,603,688),42797=>array(7,-205,484,461),42798=>array(28,-182,630,688),42799=>array(7,-205,582,461),42888=>array(40,-93,367,81),42889=>array(23,-13,264,459),42890=>array(51,107,304,399),42891=>array(197,177,403,760),42892=>array(225,375,403,760),42922=>array(82,0,962,669),43002=>array(-19,-13,717,458),64256=>array(-95,-205,788,703),64257=>array(-95,-205,607,703),64258=>array(-95,-205,644,704),64259=>array(-95,-205,875,703),64260=>array(-95,-205,913,704),64261=>array(-95,-205,654,698),64262=>array(-19,-13,666,740),64275=>array(86,-14,1133,676),64276=>array(86,-14,1137,676),64277=>array(86,-200,1110,676),64278=>array(86,-200,1132,676),64279=>array(86,-200,1387,676),64285=>array(115,159,339,645),64286=>array(394,652,609,724),64287=>array(143,160,605,645),64288=>array(43,0,629,644),64297=>array(77,209,601,506),64298=>array(102,0,836,721),64299=>array(102,0,790,721),64300=>array(102,0,836,721),64301=>array(102,0,790,721),64302=>array(51,-110,656,644),64303=>array(51,-235,656,644),64304=>array(51,-123,656,644),64305=>array(23,0,527,645),64306=>array(11,-1,386,644),64307=>array(143,-5,600,645),64308=>array(50,-5,636,645),64309=>array(111,-5,332,644),64310=>array(76,-7,367,644),64312=>array(88,0,625,644),64313=>array(97,301,339,645),64314=>array(143,-285,573,645),64315=>array(20,0,556,645),64316=>array(140,-5,586,899),64318=>array(68,0,631,637),64320=>array(8,0,404,644),64321=>array(68,0,566,645),64323=>array(59,-280,542,645),64324=>array(18,0,548,644),64326=>array(38,0,624,645),64327=>array(-17,-300,605,645),64328=>array(143,-5,547,645),64329=>array(69,0,757,645),64330=>array(10,-5,616,645),64331=>array(143,-5,359,720),64332=>array(23,0,527,709),64333=>array(20,0,556,709),64334=>array(18,0,548,709),64335=>array(156,0,656,899),65532=>array(85,-27,797,667),65533=>array(107,-63,971,800),65535=>array(6,-81,742,774)); +$cw=array(0=>600,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>335,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>250,59=>250,60=>570,61=>576,62=>570,63=>500,64=>832,65=>696,66=>640,67=>620,68=>723,69=>630,70=>609,71=>706,72=>753,73=>374,74=>500,75=>663,76=>609,77=>876,78=>705,79=>676,80=>600,81=>677,82=>667,83=>506,84=>593,85=>714,86=>703,87=>928,88=>699,89=>639,90=>562,91=>333,92=>400,93=>333,94=>570,95=>500,96=>333,97=>509,98=>481,99=>428,100=>510,101=>417,102=>485,103=>490,104=>546,105=>292,106=>333,107=>509,108=>294,109=>763,110=>526,111=>474,112=>482,113=>496,114=>400,115=>356,116=>286,117=>530,118=>439,119=>652,120=>476,121=>433,122=>410,123=>348,124=>270,125=>348,126=>570,160=>250,161=>389,162=>410,163=>522,164=>560,165=>645,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>272,186=>300,187=>500,188=>750,189=>750,190=>750,191=>500,192=>696,193=>696,194=>696,195=>696,196=>696,197=>696,198=>911,199=>620,200=>630,201=>630,202=>630,203=>630,204=>374,205=>374,206=>374,207=>374,208=>723,209=>705,210=>676,211=>676,212=>676,213=>676,214=>676,215=>570,216=>676,217=>714,218=>714,219=>714,220=>714,221=>639,222=>597,223=>580,224=>509,225=>509,226=>509,227=>509,228=>509,229=>509,230=>697,231=>417,232=>417,233=>417,234=>417,235=>417,236=>292,237=>292,238=>292,239=>292,240=>450,241=>526,242=>474,243=>474,244=>474,245=>474,246=>474,247=>570,248=>474,249=>530,250=>530,251=>530,252=>530,253=>433,254=>492,255=>433,256=>696,257=>509,258=>696,259=>509,260=>734,261=>509,262=>620,263=>428,264=>620,265=>428,266=>620,267=>428,268=>620,269=>428,270=>723,271=>609,272=>723,273=>505,274=>630,275=>417,276=>630,277=>417,278=>630,279=>417,280=>610,281=>417,282=>667,283=>417,284=>706,285=>490,286=>706,287=>490,288=>706,289=>490,290=>706,291=>490,292=>753,293=>546,294=>758,295=>547,296=>389,297=>292,298=>389,299=>292,300=>389,301=>292,302=>421,303=>292,304=>389,305=>292,306=>834,307=>516,308=>500,309=>333,310=>667,311=>509,312=>514,313=>609,314=>294,315=>609,316=>294,317=>638,318=>382,319=>609,320=>434,321=>609,322=>304,323=>705,324=>526,325=>705,326=>526,327=>705,328=>526,329=>526,330=>793,331=>495,332=>676,333=>474,334=>676,335=>474,336=>676,337=>474,338=>875,339=>680,340=>667,341=>400,342=>667,343=>400,344=>667,345=>400,346=>506,347=>356,348=>506,349=>356,350=>508,351=>337,352=>506,353=>356,354=>593,355=>286,356=>593,357=>426,358=>593,359=>317,360=>714,361=>530,362=>714,363=>530,364=>714,365=>530,366=>714,367=>530,368=>714,369=>530,370=>722,371=>556,372=>928,373=>652,374=>639,375=>433,376=>639,377=>562,378=>410,379=>562,380=>410,381=>562,382=>410,383=>485,384=>492,385=>778,386=>648,387=>486,388=>640,389=>502,390=>702,391=>870,392=>600,393=>723,394=>860,395=>717,396=>505,397=>546,398=>670,399=>629,400=>608,401=>639,402=>435,403=>885,404=>629,405=>738,406=>284,407=>389,408=>748,409=>489,410=>324,411=>508,412=>853,413=>824,414=>506,415=>670,416=>804,417=>579,418=>1014,419=>755,420=>718,421=>484,422=>661,423=>526,424=>400,425=>701,426=>455,427=>333,428=>611,429=>385,430=>611,431=>879,432=>665,433=>724,434=>626,435=>694,436=>591,437=>562,438=>417,439=>609,440=>614,441=>481,442=>428,443=>500,444=>604,445=>448,446=>406,447=>483,448=>260,449=>418,450=>570,451=>333,452=>1296,453=>1123,454=>889,455=>1109,456=>887,457=>556,458=>1132,459=>945,460=>789,461=>696,462=>509,463=>374,464=>292,465=>676,466=>474,467=>714,468=>530,469=>722,470=>530,471=>722,472=>530,473=>722,474=>530,475=>722,476=>530,477=>417,478=>696,479=>509,480=>667,481=>509,482=>911,483=>697,484=>730,485=>510,486=>706,487=>490,488=>663,489=>509,490=>667,491=>474,492=>667,493=>474,494=>609,495=>470,496=>333,497=>1335,498=>1123,499=>889,500=>706,501=>490,502=>992,503=>595,504=>705,505=>526,506=>667,507=>509,508=>911,509=>698,510=>676,511=>474,512=>696,513=>509,514=>696,515=>509,516=>630,517=>417,518=>630,519=>417,520=>374,521=>292,522=>374,523=>292,524=>676,525=>474,526=>676,527=>474,528=>667,529=>400,530=>667,531=>400,532=>714,533=>530,534=>714,535=>530,536=>506,537=>356,538=>593,539=>286,540=>506,541=>491,542=>753,543=>546,544=>719,545=>558,546=>568,547=>500,548=>667,549=>444,550=>696,551=>509,552=>610,553=>417,554=>676,555=>474,556=>676,557=>474,558=>676,559=>474,560=>722,561=>474,562=>639,563=>433,564=>422,565=>591,566=>393,567=>333,568=>810,569=>810,570=>695,571=>620,572=>428,573=>609,574=>593,575=>356,576=>410,577=>476,578=>467,579=>640,580=>714,581=>722,582=>610,583=>399,584=>500,585=>394,586=>732,587=>574,588=>669,589=>409,590=>671,591=>438,592=>509,593=>570,594=>570,595=>483,596=>444,597=>412,598=>476,599=>644,600=>408,601=>409,602=>546,603=>448,604=>463,605=>527,606=>472,607=>359,608=>656,609=>456,610=>494,611=>506,612=>582,613=>546,614=>556,615=>526,616=>318,617=>299,618=>278,619=>378,620=>378,621=>277,622=>639,623=>783,624=>728,625=>727,626=>489,627=>504,628=>513,629=>461,630=>700,631=>688,632=>604,633=>420,634=>389,635=>435,636=>389,637=>389,638=>424,639=>364,640=>496,641=>516,642=>365,643=>505,644=>505,645=>433,646=>601,647=>319,648=>286,649=>550,650=>503,651=>486,652=>439,653=>652,654=>458,655=>406,656=>604,657=>473,658=>470,659=>503,660=>390,661=>387,662=>427,663=>437,664=>778,665=>487,666=>453,667=>655,668=>540,669=>429,670=>509,671=>446,672=>604,673=>380,674=>395,675=>752,676=>848,677=>820,678=>607,679=>595,680=>656,681=>831,682=>585,683=>535,684=>458,685=>463,686=>529,687=>586,688=>396,689=>397,690=>242,691=>243,692=>267,693=>341,694=>368,695=>440,696=>300,697=>250,698=>408,699=>250,700=>250,701=>250,702=>300,703=>300,704=>340,705=>340,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>333,713=>333,714=>333,715=>333,716=>300,717=>333,718=>333,719=>333,720=>278,721=>278,722=>300,723=>300,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>333,735=>352,736=>374,737=>227,738=>264,739=>340,740=>340,741=>526,742=>526,743=>526,744=>526,745=>526,746=>519,747=>519,748=>333,749=>333,750=>480,751=>333,752=>333,753=>333,754=>333,755=>327,756=>261,757=>333,758=>333,759=>400,760=>278,761=>175,762=>175,763=>175,764=>175,765=>0,766=>337,767=>432,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,885=>199,890=>0,894=>333,900=>330,901=>333,902=>696,903=>250,904=>819,905=>955,906=>539,908=>835,910=>961,911=>889,912=>312,913=>696,914=>640,915=>576,916=>751,917=>630,918=>562,919=>753,920=>675,921=>389,922=>663,923=>696,924=>889,925=>705,926=>629,927=>675,928=>753,929=>600,931=>701,932=>621,933=>710,934=>799,935=>699,936=>919,937=>750,938=>374,939=>710,940=>570,941=>439,942=>548,943=>312,944=>536,945=>570,946=>538,947=>532,948=>506,949=>439,950=>437,951=>548,952=>477,953=>312,954=>549,955=>510,956=>589,957=>522,958=>494,959=>512,960=>612,961=>513,962=>468,963=>525,964=>444,965=>536,966=>615,967=>495,968=>693,969=>687,970=>312,971=>536,972=>512,973=>536,974=>687,976=>489,977=>613,978=>722,979=>931,980=>722,981=>623,982=>688,983=>527,984=>615,985=>512,986=>608,987=>508,988=>598,989=>543,990=>708,991=>377,992=>731,993=>631,1008=>534,1009=>519,1010=>477,1011=>333,1012=>670,1013=>411,1014=>439,1015=>597,1016=>533,1017=>631,1018=>889,1019=>761,1020=>506,1021=>637,1022=>631,1023=>637,1024=>630,1025=>630,1026=>768,1027=>576,1028=>637,1029=>506,1030=>374,1031=>374,1032=>500,1033=>1053,1034=>1019,1035=>831,1036=>710,1037=>753,1038=>739,1039=>753,1040=>696,1041=>648,1042=>640,1043=>576,1044=>760,1045=>630,1046=>1052,1047=>651,1048=>753,1049=>753,1050=>710,1051=>786,1052=>876,1053=>753,1054=>676,1055=>753,1056=>600,1057=>620,1058=>593,1059=>739,1060=>799,1061=>699,1062=>754,1063=>693,1064=>1111,1065=>1111,1066=>756,1067=>959,1068=>624,1069=>689,1070=>1038,1071=>757,1072=>509,1073=>478,1074=>467,1075=>374,1076=>456,1077=>417,1078=>941,1079=>458,1080=>530,1081=>530,1082=>538,1083=>580,1084=>752,1085=>533,1086=>474,1087=>526,1088=>482,1089=>428,1090=>763,1091=>496,1092=>759,1093=>476,1094=>529,1095=>529,1096=>776,1097=>777,1098=>663,1099=>744,1100=>506,1101=>458,1102=>733,1103=>572,1104=>417,1105=>417,1106=>541,1107=>374,1108=>454,1109=>356,1110=>292,1111=>292,1112=>333,1113=>802,1114=>754,1115=>545,1116=>538,1117=>530,1118=>496,1119=>530,1120=>948,1121=>693,1122=>751,1123=>760,1124=>1005,1125=>718,1126=>906,1127=>732,1128=>1222,1129=>923,1130=>1052,1131=>828,1132=>1377,1133=>1014,1134=>604,1135=>446,1136=>938,1137=>779,1138=>667,1139=>517,1140=>796,1141=>584,1142=>796,1143=>584,1144=>1131,1145=>907,1146=>864,1147=>616,1148=>959,1149=>690,1150=>948,1151=>635,1152=>608,1153=>434,1154=>372,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>778,1163=>544,1164=>634,1165=>499,1166=>624,1167=>483,1168=>601,1169=>448,1170=>606,1171=>448,1172=>719,1173=>529,1174=>1080,1175=>941,1176=>651,1177=>450,1178=>772,1179=>538,1180=>780,1181=>558,1182=>750,1183=>538,1184=>862,1185=>688,1186=>754,1187=>533,1188=>965,1189=>664,1190=>1089,1191=>783,1192=>661,1193=>522,1194=>637,1195=>419,1196=>614,1197=>769,1198=>639,1199=>660,1200=>638,1201=>660,1202=>694,1203=>500,1204=>984,1205=>579,1206=>713,1207=>538,1208=>713,1209=>529,1210=>727,1211=>546,1212=>850,1213=>570,1214=>844,1215=>570,1216=>374,1217=>1052,1218=>941,1219=>705,1220=>509,1221=>786,1222=>580,1223=>753,1224=>483,1225=>753,1226=>539,1227=>703,1228=>485,1229=>876,1230=>758,1231=>374,1232=>696,1233=>509,1234=>696,1235=>509,1236=>891,1237=>646,1238=>630,1239=>417,1240=>609,1241=>403,1242=>609,1243=>403,1244=>1052,1245=>941,1246=>651,1247=>458,1248=>604,1249=>479,1250=>753,1251=>539,1252=>753,1253=>539,1254=>676,1255=>474,1256=>670,1257=>461,1258=>670,1259=>461,1260=>689,1261=>458,1262=>739,1263=>496,1264=>739,1265=>496,1266=>739,1267=>496,1268=>693,1269=>529,1270=>606,1271=>428,1272=>959,1273=>744,1296=>652,1297=>480,1298=>786,1299=>530,1306=>677,1307=>496,1308=>928,1309=>652,1310=>736,1311=>544,1329=>889,1330=>787,1331=>858,1332=>941,1333=>775,1334=>765,1335=>805,1336=>762,1337=>938,1338=>869,1339=>765,1340=>756,1341=>966,1342=>992,1343=>748,1344=>469,1345=>731,1346=>941,1347=>745,1348=>966,1349=>641,1350=>929,1351=>774,1352=>779,1353=>784,1354=>841,1355=>775,1356=>955,1357=>779,1358=>927,1359=>555,1360=>763,1361=>641,1362=>656,1363=>824,1364=>869,1365=>768,1366=>754,1369=>300,1370=>300,1371=>270,1372=>307,1373=>270,1374=>324,1375=>322,1377=>818,1378=>548,1379=>601,1380=>608,1381=>551,1382=>547,1383=>496,1384=>548,1385=>586,1386=>585,1387=>548,1388=>269,1389=>798,1390=>594,1391=>544,1392=>548,1393=>513,1394=>583,1395=>560,1396=>551,1397=>397,1398=>567,1399=>447,1400=>548,1401=>411,1402=>810,1403=>464,1404=>548,1405=>551,1406=>595,1407=>821,1408=>548,1409=>557,1410=>312,1411=>821,1412=>550,1413=>511,1414=>668,1415=>602,1417=>333,1418=>349,1423=>759,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>433,1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,1477=>0,1478=>347,1479=>0,1488=>593,1489=>498,1490=>339,1491=>523,1492=>561,1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,1502=>581,1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,1512=>502,1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1523=>396,1524=>432,3585=>590,3586=>578,3587=>661,3588=>592,3589=>592,3590=>699,3591=>447,3592=>534,3593=>692,3594=>578,3595=>659,3596=>899,3597=>804,3598=>633,3599=>637,3600=>484,3601=>730,3602=>876,3603=>915,3604=>592,3605=>592,3606=>578,3607=>670,3608=>542,3609=>671,3610=>621,3611=>618,3612=>621,3613=>617,3614=>708,3615=>708,3616=>637,3617=>589,3618=>552,3619=>484,3620=>590,3621=>569,3622=>637,3623=>526,3624=>599,3625=>802,3626=>579,3627=>668,3628=>778,3629=>560,3630=>514,3631=>510,3632=>442,3633=>0,3634=>423,3635=>452,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>665,3648=>357,3649=>624,3650=>529,3651=>486,3652=>475,3653=>423,3654=>500,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>657,3664=>548,3665=>548,3666=>592,3667=>614,3668=>631,3669=>643,3670=>508,3671=>744,3672=>622,3673=>585,3674=>721,3675=>1381,4256=>475,4257=>469,4258=>573,4259=>650,4260=>502,4261=>506,4262=>481,4263=>746,4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,4269=>745,4270=>483,4271=>489,4272=>721,4273=>464,4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,4279=>489,4280=>544,4281=>479,4282=>527,4283=>488,4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,4289=>487,4290=>562,4291=>477,4292=>491,4293=>471,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,4329=>518,4330=>555,4331=>518,4332=>562,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,4339=>480,4340=>519,4341=>484,4342=>838,4343=>517,4344=>516,4345=>621,4346=>522,4347=>410,4348=>389,5024=>718,5025=>768,5026=>633,5027=>878,5028=>1001,5029=>371,5030=>576,5031=>754,5032=>531,5033=>774,5034=>692,5035=>499,5036=>668,5037=>829,5038=>575,5039=>681,5040=>485,5041=>607,5042=>885,5043=>974,5044=>588,5045=>583,5046=>726,5047=>947,5048=>558,5049=>832,5050=>1096,5051=>780,5052=>595,5053=>869,5054=>752,5055=>710,5056=>761,5057=>802,5058=>760,5059=>656,5060=>655,5061=>982,5062=>684,5063=>801,5064=>805,5065=>1042,5066=>755,5067=>612,5068=>707,5069=>889,5070=>584,5071=>623,5072=>536,5073=>763,5074=>763,5075=>549,5076=>1052,5077=>600,5078=>730,5079=>714,5080=>714,5081=>697,5082=>543,5083=>943,5084=>718,5085=>630,5086=>660,5087=>692,5088=>841,5089=>861,5090=>617,5091=>733,5092=>898,5093=>896,5094=>781,5095=>612,5096=>830,5097=>948,5098=>886,5099=>757,5100=>796,5101=>578,5102=>601,5103=>797,5104=>623,5105=>886,5106=>730,5107=>827,5108=>648,7424=>611,7425=>587,7426=>683,7427=>437,7428=>428,7429=>450,7431=>401,7432=>463,7433=>306,7434=>268,7435=>449,7436=>404,7437=>536,7439=>443,7448=>361,7450=>390,7451=>350,7452=>449,7456=>384,7457=>527,7458=>395,7579=>385,7581=>285,7582=>341,7583=>320,7588=>218,7589=>242,7592=>380,7593=>236,7596=>497,7597=>529,7598=>401,7599=>404,7600=>364,7601=>349,7602=>412,7603=>224,7604=>332,7605=>197,7606=>344,7607=>356,7608=>354,7609=>334,7612=>453,7613=>318,7614=>317,7615=>348,7680=>696,7681=>509,7682=>640,7683=>481,7684=>640,7685=>481,7686=>640,7687=>481,7688=>620,7689=>417,7690=>723,7691=>510,7692=>723,7693=>510,7694=>723,7695=>510,7696=>723,7697=>495,7698=>723,7699=>510,7700=>618,7701=>417,7702=>618,7703=>417,7704=>630,7705=>417,7706=>630,7707=>417,7708=>610,7709=>417,7710=>609,7711=>485,7712=>706,7713=>490,7714=>753,7715=>546,7716=>753,7717=>546,7718=>753,7719=>546,7720=>758,7721=>546,7722=>753,7723=>546,7724=>374,7725=>292,7726=>374,7727=>292,7728=>663,7729=>509,7730=>663,7731=>509,7732=>663,7733=>509,7734=>609,7735=>294,7736=>609,7737=>294,7738=>609,7739=>294,7740=>609,7741=>294,7742=>876,7743=>763,7744=>876,7745=>763,7746=>876,7747=>763,7748=>705,7749=>526,7750=>705,7751=>526,7752=>705,7753=>526,7754=>705,7755=>526,7756=>722,7757=>474,7758=>722,7759=>474,7760=>722,7761=>474,7762=>722,7763=>474,7764=>600,7765=>482,7766=>600,7767=>482,7768=>667,7769=>400,7770=>667,7771=>400,7772=>667,7773=>400,7774=>667,7775=>400,7776=>506,7777=>356,7778=>506,7779=>356,7780=>556,7781=>356,7782=>556,7783=>356,7784=>506,7785=>356,7786=>593,7787=>286,7788=>593,7789=>286,7790=>593,7791=>286,7792=>593,7793=>286,7794=>714,7795=>530,7796=>714,7797=>530,7798=>714,7799=>530,7800=>722,7801=>530,7802=>714,7803=>530,7804=>703,7805=>439,7806=>703,7807=>439,7808=>928,7809=>652,7810=>928,7811=>652,7812=>928,7813=>652,7814=>928,7815=>652,7816=>928,7817=>652,7818=>699,7819=>476,7820=>699,7821=>476,7822=>639,7823=>433,7824=>562,7825=>410,7826=>562,7827=>410,7828=>562,7829=>410,7830=>546,7831=>286,7832=>652,7833=>433,7834=>509,7835=>485,7836=>465,7837=>465,7838=>830,7839=>506,7840=>696,7841=>509,7842=>696,7843=>509,7844=>696,7845=>509,7846=>696,7847=>509,7848=>696,7849=>509,7850=>696,7851=>509,7852=>696,7853=>509,7854=>667,7855=>509,7856=>667,7857=>509,7858=>667,7859=>509,7860=>667,7861=>509,7862=>696,7863=>509,7864=>630,7865=>417,7866=>630,7867=>417,7868=>630,7869=>417,7870=>630,7871=>417,7872=>630,7873=>417,7874=>630,7875=>417,7876=>618,7877=>417,7878=>630,7879=>417,7880=>374,7881=>292,7882=>374,7883=>292,7884=>676,7885=>474,7886=>676,7887=>474,7888=>676,7889=>474,7890=>676,7891=>474,7892=>676,7893=>474,7894=>686,7895=>474,7896=>676,7897=>474,7898=>804,7899=>579,7900=>804,7901=>579,7902=>804,7903=>579,7904=>804,7905=>579,7906=>804,7907=>579,7908=>714,7909=>530,7910=>714,7911=>530,7912=>879,7913=>665,7914=>879,7915=>665,7916=>879,7917=>665,7918=>879,7919=>665,7920=>879,7921=>665,7922=>639,7923=>433,7924=>639,7925=>433,7926=>639,7927=>433,7928=>639,7929=>433,7936=>570,7937=>570,7938=>570,7939=>570,7940=>570,7941=>570,7942=>570,7943=>570,7944=>696,7945=>696,7946=>830,7947=>841,7948=>811,7949=>812,7950=>755,7951=>746,7952=>439,7953=>439,7954=>439,7955=>439,7956=>439,7957=>439,7960=>787,7961=>818,7962=>917,7963=>931,7964=>954,7965=>948,7968=>548,7969=>548,7970=>548,7971=>548,7972=>548,7973=>548,7974=>548,7975=>548,7976=>937,7977=>960,7978=>1073,7979=>1092,7980=>1109,7981=>1115,7982=>1020,7983=>1032,7984=>312,7985=>312,7986=>312,7987=>312,7988=>312,7989=>312,7990=>312,7991=>312,7992=>517,7993=>564,7994=>670,7995=>686,7996=>706,7997=>707,7998=>635,7999=>627,8000=>512,8001=>512,8002=>512,8003=>512,8004=>512,8005=>512,8008=>822,8009=>841,8010=>999,8011=>1031,8012=>963,8013=>971,8016=>536,8017=>536,8018=>536,8019=>536,8020=>536,8021=>536,8022=>536,8023=>536,8025=>949,8027=>1065,8029=>1098,8031=>1017,8032=>687,8033=>687,8034=>687,8035=>687,8036=>687,8037=>687,8038=>687,8039=>687,8040=>885,8041=>919,8042=>1092,8043=>1097,8044=>1058,8045=>1050,8046=>1009,8047=>985,8048=>570,8049=>570,8050=>439,8051=>439,8052=>548,8053=>548,8054=>312,8055=>312,8056=>512,8057=>512,8058=>536,8059=>536,8060=>687,8061=>687,8064=>570,8065=>570,8066=>570,8067=>570,8068=>570,8069=>570,8070=>570,8071=>570,8072=>842,8073=>847,8074=>981,8075=>991,8076=>957,8077=>955,8078=>897,8079=>893,8080=>548,8081=>548,8082=>548,8083=>548,8084=>548,8085=>548,8086=>548,8087=>548,8088=>1042,8089=>1066,8090=>1188,8091=>1199,8092=>1206,8093=>1211,8094=>1124,8095=>1129,8096=>687,8097=>687,8098=>687,8099=>687,8100=>687,8101=>687,8102=>687,8103=>687,8104=>1030,8105=>1066,8106=>1234,8107=>1247,8108=>1199,8109=>1194,8110=>1147,8111=>1135,8112=>570,8113=>570,8114=>570,8115=>570,8116=>570,8118=>570,8119=>570,8120=>696,8121=>696,8122=>696,8123=>696,8124=>835,8125=>250,8126=>0,8127=>250,8128=>500,8129=>400,8130=>548,8131=>548,8132=>548,8134=>548,8135=>548,8136=>737,8137=>762,8138=>883,8139=>919,8140=>859,8141=>500,8142=>500,8143=>500,8144=>312,8145=>312,8146=>312,8147=>312,8150=>312,8151=>312,8152=>389,8153=>389,8154=>519,8155=>552,8157=>500,8158=>500,8159=>500,8160=>536,8161=>536,8162=>536,8163=>536,8164=>513,8165=>513,8166=>536,8167=>536,8168=>710,8169=>710,8170=>895,8171=>890,8172=>801,8173=>550,8174=>550,8175=>250,8178=>687,8179=>687,8180=>687,8182=>687,8183=>687,8184=>814,8185=>776,8186=>883,8187=>864,8188=>882,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>166,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>333,8215=>478,8216=>250,8217=>250,8218=>250,8219=>250,8220=>500,8221=>500,8222=>500,8223=>500,8224=>500,8225=>500,8226=>500,8227=>500,8228=>250,8229=>500,8230=>850,8231=>0,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>250,8239=>166,8240=>1000,8241=>1618,8242=>278,8243=>556,8244=>834,8245=>270,8246=>468,8247=>630,8248=>469,8249=>333,8250=>333,8251=>727,8252=>778,8253=>733,8254=>500,8255=>953,8256=>953,8257=>338,8258=>931,8259=>500,8260=>167,8261=>332,8262=>332,8263=>1000,8264=>889,8265=>889,8266=>500,8267=>453,8268=>600,8269=>600,8270=>500,8271=>250,8272=>953,8273=>500,8274=>521,8275=>576,8276=>953,8277=>785,8278=>410,8279=>881,8280=>620,8281=>620,8282=>179,8283=>621,8284=>569,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>219,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>362,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>350,8337=>296,8338=>320,8339=>337,8340=>298,8352=>667,8353=>667,8354=>667,8355=>667,8356=>500,8357=>742,8358=>722,8359=>1008,8360=>953,8361=>889,8362=>889,8363=>532,8364=>761,8365=>742,8366=>631,8367=>1435,8368=>579,8369=>609,8370=>639,8371=>742,8372=>576,8373=>500,8376=>524,8377=>675,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8421=>0,8423=>0,8424=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8448=>624,8449=>625,8451=>964,8453=>623,8454=>727,8455=>608,8456=>685,8457=>881,8458=>500,8459=>1035,8462=>546,8463=>543,8464=>972,8465=>613,8466=>820,8467=>457,8468=>849,8470=>846,8471=>888,8472=>649,8475=>769,8476=>926,8478=>721,8479=>725,8480=>991,8481=>1080,8482=>1016,8483=>713,8486=>750,8487=>750,8489=>312,8490=>663,8491=>696,8492=>825,8494=>540,8495=>417,8497=>923,8498=>625,8499=>1253,8501=>537,8502=>537,8503=>350,8504=>537,8506=>942,8507=>1080,8523=>738,8525=>1072,8526=>440,8531=>800,8532=>800,8533=>800,8534=>800,8535=>800,8536=>800,8537=>800,8538=>800,8539=>800,8540=>800,8541=>800,8542=>800,8543=>750,8544=>374,8545=>716,8546=>1039,8547=>1040,8548=>703,8549=>1037,8550=>1345,8551=>1668,8552=>1005,8553=>699,8554=>1009,8555=>1334,8556=>609,8557=>620,8558=>723,8559=>876,8560=>292,8561=>551,8562=>813,8563=>686,8564=>439,8565=>690,8566=>950,8567=>1210,8568=>774,8569=>476,8570=>738,8571=>998,8572=>294,8573=>428,8574=>510,8575=>763,8592=>900,8593=>500,8594=>900,8595=>500,8596=>900,8597=>500,8598=>800,8599=>800,8600=>801,8601=>800,8602=>900,8603=>900,8606=>900,8607=>500,8608=>900,8609=>500,8610=>900,8611=>900,8612=>900,8613=>601,8614=>950,8615=>650,8616=>600,8632=>800,8633=>964,8636=>964,8637=>964,8638=>500,8639=>500,8640=>964,8641=>964,8642=>500,8643=>500,8644=>964,8645=>884,8646=>964,8647=>964,8648=>884,8649=>964,8650=>884,8651=>987,8652=>987,8656=>964,8657=>630,8658=>964,8659=>630,8660=>964,8661=>630,8668=>1100,8669=>1100,8676=>964,8677=>964,8704=>627,8705=>548,8706=>494,8707=>627,8708=>627,8709=>746,8710=>612,8711=>612,8712=>576,8713=>576,8714=>439,8715=>576,8716=>576,8717=>576,8718=>500,8719=>812,8720=>812,8721=>713,8722=>606,8723=>656,8724=>676,8725=>560,8726=>690,8727=>500,8728=>500,8729=>500,8730=>549,8731=>549,8732=>549,8733=>752,8734=>752,8735=>509,8739=>240,8740=>521,8741=>478,8742=>645,8743=>634,8744=>634,8745=>694,8746=>694,8747=>459,8748=>793,8749=>1103,8756=>629,8757=>629,8758=>250,8759=>629,8761=>767,8764=>676,8770=>676,8771=>636,8773=>636,8776=>676,8778=>636,8784=>570,8785=>570,8786=>570,8787=>570,8788=>827,8789=>877,8790=>636,8791=>576,8793=>570,8794=>570,8797=>570,8798=>570,8799=>570,8800=>570,8801=>636,8804=>626,8805=>616,8806=>676,8807=>676,8818=>636,8819=>636,8834=>676,8835=>676,8976=>680,8994=>951,8995=>951,9001=>398,9002=>398,9251=>500,9674=>494,9675=>738,9676=>791,9688=>500,9702=>500,9711=>855,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,11799=>333,42790=>778,42791=>548,42792=>868,42793=>648,42794=>652,42795=>452,42796=>478,42797=>422,42798=>675,42799=>627,42888=>333,42889=>278,42890=>282,42891=>349,42892=>278,42922=>892,43002=>763,64256=>753,64257=>623,64258=>619,64259=>891,64260=>888,64261=>616,64262=>662,64275=>1105,64276=>1105,64277=>1099,64278=>1105,64279=>1361,64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,64302=>593,64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64318=>581,64320=>347,64321=>512,64323=>493,64324=>491,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266,64332=>498,64333=>501,64334=>491,64335=>593,65529=>0,65530=>0,65531=>0,65532=>800,65533=>900,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freeserifbi.z b/tcpdf/fonts/freeserifbi.z new file mode 100644 index 0000000..7e96ed8 Binary files /dev/null and b/tcpdf/fonts/freeserifbi.z differ diff --git a/tcpdf/fonts/freeserifi.ctg.z b/tcpdf/fonts/freeserifi.ctg.z new file mode 100644 index 0000000..d742f27 Binary files /dev/null and b/tcpdf/fonts/freeserifi.ctg.z differ diff --git a/tcpdf/fonts/freeserifi.php b/tcpdf/fonts/freeserifi.php new file mode 100644 index 0000000..dbe679e --- /dev/null +++ b/tcpdf/fonts/freeserifi.php @@ -0,0 +1,16 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='TrueTypeUnicode'; +$name='FreeSerifItalic'; +$up=-125; +$ut=50; +$dw=600; +$diff=''; +$originalsize=922088; +$enc=''; +$file='freeserifi.z'; +$ctg='freeserifi.ctg.z'; +$desc=array('Flags'=>96,'FontBBox'=>'[-879 -300 1558 900]','ItalicAngle'=>-16.32768,'Ascent'=>900,'Descent'=>-200,'Leading'=>100,'CapHeight'=>653,'XHeight'=>452,'StemV'=>70,'StemH'=>30,'AvgWidth'=>559,'MaxWidth'=>1601,'MissingWidth'=>600); +$cbbox=array(0=>array(19,-71,725,750),33=>array(39,-11,302,667),34=>array(132,421,420,666),35=>array(2,0,540,676),36=>array(31,-89,497,731),37=>array(79,-13,790,676),38=>array(76,-18,723,666),39=>array(132,421,241,666),40=>array(42,-181,315,669),41=>array(16,-180,289,669),42=>array(128,255,492,666),43=>array(86,0,590,506),44=>array(-4,-129,135,101),45=>array(49,192,282,255),46=>array(27,-11,138,100),47=>array(-5,-18,446,666),48=>array(32,-7,497,676),49=>array(49,0,409,676),50=>array(12,0,452,676),51=>array(15,-7,466,676),52=>array(1,0,479,676),53=>array(15,-7,491,666),54=>array(30,-7,521,686),55=>array(75,-8,537,666),56=>array(30,-7,493,676),57=>array(23,-17,492,676),58=>array(50,-11,256,441),59=>array(27,-129,261,441),60=>array(54,-10,562,516),61=>array(86,120,590,386),62=>array(64,-10,572,516),63=>array(132,-12,472,664),64=>array(68,-18,756,666),65=>array(0,0,615,668),66=>array(0,0,596,653),67=>array(43,-18,666,666),68=>array(0,0,708,653),69=>array(0,0,635,653),70=>array(0,0,636,653),71=>array(44,-18,714,666),72=>array(0,0,775,653),73=>array(0,0,392,653),74=>array(0,-18,497,653),75=>array(0,0,715,653),76=>array(0,0,567,653),77=>array(0,0,891,653),78=>array(0,-15,747,653),79=>array(37,-18,676,666),80=>array(0,0,605,653),81=>array(36,-183,676,666),82=>array(0,0,601,653),83=>array(0,-18,491,667),84=>array(94,0,668,653),85=>array(113,-18,776,653),86=>array(126,-18,738,653),87=>array(128,-18,963,653),88=>array(0,0,684,653),89=>array(113,0,668,653),90=>array(0,0,612,653),91=>array(21,-153,391,663),92=>array(109,-18,469,666),93=>array(12,-153,382,663),94=>array(0,301,422,666),95=>array(0,-125,500,-75),96=>array(131,495,299,666),97=>array(17,-11,476,441),98=>array(25,-11,475,683),99=>array(24,-11,419,441),100=>array(18,-13,530,683),101=>array(24,-11,405,441),102=>array(-77,-207,494,678),103=>array(-24,-206,440,441),104=>array(19,-9,478,683),105=>array(39,-11,254,654),106=>array(-74,-207,326,654),107=>array(18,-11,465,683),108=>array(32,-11,271,683),109=>array(12,-9,704,441),110=>array(12,-9,472,441),111=>array(25,-11,466,441),112=>array(-77,-205,467,441),113=>array(19,-209,477,441),114=>array(19,0,386,441),115=>array(0,-13,350,442),116=>array(26,-11,285,546),117=>array(31,-11,464,441),118=>array(51,-18,456,441),119=>array(51,-18,683,441),120=>array(-30,-11,444,441),121=>array(12,-206,462,441),122=>array(-2,-81,380,428),123=>array(51,-177,407,687),124=>array(105,-18,171,666),125=>array(-7,-177,349,687),126=>array(40,186,502,320),160=>array(0,0,0,0),161=>array(59,-205,321,474),162=>array(77,-143,472,560),163=>array(10,-6,517,670),164=>array(-22,53,522,597),165=>array(27,0,603,653),166=>array(105,-18,171,666),167=>array(53,-162,461,666),168=>array(107,508,405,606),169=>array(35,-14,757,708),170=>array(39,292,352,676),171=>array(51,37,445,403),172=>array(86,108,590,386),173=>array(49,192,282,255),174=>array(35,-14,757,708),175=>array(99,532,411,583),176=>array(101,390,387,676),177=>array(86,0,590,568),178=>array(140,391,431,799),179=>array(137,385,433,799),180=>array(101,494,324,664),181=>array(-30,-209,497,428),182=>array(55,-123,616,653),183=>array(142,188,240,286),184=>array(-30,-217,182,0),185=>array(130,391,375,796),186=>array(39,292,362,676),187=>array(17,37,410,403),188=>array(90,-10,797,676),189=>array(98,-10,781,677),190=>array(87,-10,807,676),191=>array(28,-205,367,473),192=>array(0,0,615,878),193=>array(0,0,615,876),194=>array(0,0,615,873),195=>array(0,0,619,802),196=>array(0,0,615,801),197=>array(0,0,615,900),198=>array(2,0,940,653),199=>array(45,-217,668,666),200=>array(0,0,635,878),201=>array(0,0,635,876),202=>array(0,0,635,873),203=>array(0,0,635,801),204=>array(0,0,392,878),205=>array(0,0,423,876),206=>array(0,0,445,873),207=>array(0,0,435,818),208=>array(0,0,708,653),209=>array(0,-15,747,838),210=>array(37,-18,676,878),211=>array(37,-18,676,876),212=>array(37,-18,676,873),213=>array(37,-18,676,801),214=>array(37,-18,676,802),215=>array(93,8,582,497),216=>array(37,-105,676,722),217=>array(113,-18,776,878),218=>array(113,-18,776,876),219=>array(113,-18,776,873),220=>array(113,-18,776,801),221=>array(113,0,668,876),222=>array(-30,0,539,653),223=>array(-75,-207,586,679),224=>array(17,-11,476,666),225=>array(17,-11,477,664),226=>array(17,-11,480,674),227=>array(17,-11,510,626),228=>array(17,-11,489,600),229=>array(17,-11,476,711),230=>array(17,-11,634,441),231=>array(20,-217,419,441),232=>array(24,-11,405,666),233=>array(24,-11,463,664),234=>array(24,-11,459,674),235=>array(24,-11,451,601),236=>array(49,-11,279,666),237=>array(49,-11,316,664),238=>array(49,-11,362,674),239=>array(49,-11,353,602),240=>array(25,-11,480,683),241=>array(12,-9,508,626),242=>array(25,-11,466,666),243=>array(25,-11,467,664),244=>array(25,-11,497,674),245=>array(25,-11,529,609),246=>array(25,-11,489,599),247=>array(86,-11,590,517),248=>array(25,-135,466,554),249=>array(31,-11,464,666),250=>array(31,-11,467,664),251=>array(31,-11,464,674),252=>array(31,-11,479,600),253=>array(12,-206,462,664),254=>array(-75,-205,469,683),255=>array(12,-206,462,601),256=>array(0,0,615,795),257=>array(17,-11,495,583),258=>array(0,0,615,876),259=>array(17,-11,494,664),260=>array(-51,-169,707,668),261=>array(17,-169,500,441),262=>array(43,-18,666,876),263=>array(24,-11,458,664),264=>array(43,-18,666,873),265=>array(24,-11,475,673),266=>array(43,-18,666,823),267=>array(24,-11,419,597),268=>array(43,-18,666,886),269=>array(24,-11,511,674),270=>array(0,0,708,886),271=>array(18,-13,701,683),272=>array(0,0,708,653),273=>array(18,-13,561,683),274=>array(0,0,635,795),275=>array(24,-11,457,581),276=>array(0,0,635,875),277=>array(24,-11,506,663),278=>array(0,0,635,802),279=>array(24,-11,405,601),280=>array(-1,-169,651,653),281=>array(24,-169,437,441),282=>array(0,0,638,886),283=>array(24,-11,522,674),284=>array(44,-18,714,873),285=>array(-24,-206,453,673),286=>array(44,-18,714,876),287=>array(-24,-206,466,664),288=>array(44,-18,714,816),289=>array(-24,-206,440,600),290=>array(44,-300,714,666),291=>array(-24,-206,440,737),292=>array(0,0,775,873),293=>array(19,-9,585,873),294=>array(-8,0,767,653),295=>array(19,-9,478,683),296=>array(0,0,479,812),297=>array(25,-11,401,600),298=>array(0,0,440,795),299=>array(49,-11,384,583),300=>array(0,0,466,875),301=>array(49,-11,397,663),302=>array(0,-169,392,653),303=>array(49,-169,278,654),304=>array(0,0,392,833),305=>array(49,-11,235,441),306=>array(0,-18,760,653),307=>array(38,-207,488,652),308=>array(0,-18,515,873),309=>array(-74,-207,404,683),310=>array(0,-300,715,653),311=>array(18,-300,465,683),312=>array(19,-11,466,455),313=>array(0,0,567,876),314=>array(32,-11,355,876),315=>array(0,-300,567,653),316=>array(16,-300,271,683),317=>array(0,0,579,665),318=>array(32,-11,452,683),319=>array(0,0,567,653),320=>array(32,-11,343,683),321=>array(0,0,567,653),322=>array(37,-11,307,683),323=>array(0,-15,747,876),324=>array(12,-9,472,664),325=>array(0,-300,747,653),326=>array(12,-300,472,441),327=>array(0,-15,747,886),328=>array(12,-9,519,674),329=>array(62,-9,522,665),330=>array(-8,-18,738,669),331=>array(14,-207,442,441),332=>array(37,-18,676,795),333=>array(25,-11,495,580),334=>array(37,-18,676,875),335=>array(25,-11,521,663),336=>array(37,-18,676,878),337=>array(25,-11,532,666),338=>array(37,-8,952,666),339=>array(25,-12,651,441),340=>array(0,0,601,876),341=>array(19,0,411,664),342=>array(0,-300,601,653),343=>array(-4,-300,386,441),344=>array(0,0,601,886),345=>array(19,0,463,674),346=>array(0,-18,491,876),347=>array(0,-13,401,664),348=>array(0,-18,491,873),349=>array(0,-13,402,673),350=>array(10,-217,501,667),351=>array(-18,-217,350,442),352=>array(0,-18,549,886),353=>array(0,-13,465,674),354=>array(59,-217,633,653),355=>array(-55,-228,285,546),356=>array(94,0,668,886),357=>array(26,-11,439,665),358=>array(59,0,633,653),359=>array(13,-11,296,546),360=>array(113,-18,776,812),361=>array(31,-11,511,600),362=>array(113,-18,776,795),363=>array(31,-11,480,583),364=>array(113,-18,776,875),365=>array(31,-11,483,663),366=>array(113,-18,776,900),367=>array(31,-11,464,711),368=>array(113,-18,776,878),369=>array(31,-11,464,666),370=>array(102,-169,765,653),371=>array(31,-169,489,441),372=>array(128,-18,963,873),373=>array(51,-18,683,673),374=>array(113,0,668,873),375=>array(12,-206,462,673),376=>array(113,0,668,802),377=>array(0,0,612,876),378=>array(-2,-81,389,664),379=>array(0,0,612,833),380=>array(-2,-81,380,604),381=>array(0,0,612,886),382=>array(-2,-81,438,674),383=>array(-77,-207,494,678),384=>array(22,-11,473,683),385=>array(98,0,738,653),386=>array(-8,0,604,653),387=>array(25,-11,494,653),388=>array(-6,0,540,658),389=>array(51,-11,502,683),390=>array(-36,-14,647,676),391=>array(45,-14,923,669),392=>array(26,-11,648,678),393=>array(0,0,708,653),394=>array(118,0,870,653),395=>array(11,0,739,653),396=>array(18,-13,522,653),397=>array(-5,-246,455,442),398=>array(0,0,691,653),399=>array(33,-17,610,668),400=>array(13,-15,576,702),401=>array(-77,-207,686,653),402=>array(-77,-207,494,678),403=>array(42,-18,923,671),404=>array(102,-23,728,654),405=>array(19,-9,708,683),406=>array(41,-11,279,683),407=>array(-8,0,384,653),408=>array(-8,0,847,665),409=>array(14,-11,461,678),410=>array(20,-11,279,683),411=>array(-11,-11,447,678),412=>array(103,-10,960,660),413=>array(-77,-207,828,653),414=>array(14,-207,442,441),415=>array(39,-18,678,666),416=>array(37,-18,840,695),417=>array(25,-11,618,545),418=>array(38,-18,941,670),419=>array(27,-207,670,441),420=>array(88,0,736,653),421=>array(-75,-205,469,678),422=>array(-8,-184,586,653),423=>array(51,-18,487,667),424=>array(50,-13,331,442),425=>array(-16,0,698,653),426=>array(123,-207,409,676),427=>array(-56,-142,331,547),428=>array(44,0,633,653),429=>array(56,-11,452,678),430=>array(59,-207,633,653),431=>array(102,-18,883,694),432=>array(31,-11,647,545),433=>array(39,-23,782,653),434=>array(75,-14,712,662),435=>array(92,0,753,671),436=>array(-4,-206,608,670),437=>array(-6,0,606,653),438=>array(-2,-81,380,428),439=>array(-24,-14,600,653),440=>array(20,-14,554,652),441=>array(-23,-209,462,428),442=>array(-31,-205,462,428),443=>array(30,0,536,676),444=>array(4,-14,639,653),445=>array(-26,-207,445,443),446=>array(16,-13,304,546),447=>array(-75,-205,469,441),448=>array(58,-14,288,708),449=>array(58,-14,418,708),450=>array(67,-16,635,706),451=>array(39,-11,302,667),452=>array(0,0,1324,886),453=>array(0,-81,1140,674),454=>array(18,-81,918,683),455=>array(0,-18,1053,653),456=>array(0,-207,822,654),457=>array(32,-207,504,683),458=>array(0,-18,1104,653),459=>array(0,-207,893,654),460=>array(12,-207,746,654),461=>array(0,0,615,900),462=>array(17,-11,501,663),463=>array(0,0,480,875),464=>array(49,-11,398,663),465=>array(37,-18,676,875),466=>array(25,-11,526,663),467=>array(113,-18,776,875),468=>array(31,-11,504,663),469=>array(113,-18,776,899),470=>array(31,-11,519,718),471=>array(77,-16,740,900),472=>array(31,-11,504,800),473=>array(77,-16,740,900),474=>array(31,-11,537,828),475=>array(77,-16,740,900),476=>array(31,-11,479,782),477=>array(24,-11,405,441),478=>array(0,0,615,900),479=>array(17,-11,531,717),480=>array(0,0,620,900),481=>array(17,-11,513,717),482=>array(2,0,940,795),483=>array(17,-11,634,581),484=>array(42,-18,712,666),485=>array(-26,-206,472,441),486=>array(44,-18,714,875),487=>array(-24,-206,476,663),488=>array(0,0,715,875),489=>array(18,-11,554,866),490=>array(50,-200,689,666),491=>array(25,-200,466,441),492=>array(50,-200,689,795),493=>array(25,-200,497,581),494=>array(-24,-14,600,900),495=>array(-48,-209,446,663),496=>array(-124,-207,387,684),497=>array(0,0,1314,653),498=>array(0,-81,1082,653),499=>array(18,-81,850,683),500=>array(44,-18,714,876),501=>array(-24,-206,440,666),502=>array(-8,-14,946,651),503=>array(-10,0,597,675),504=>array(0,-15,747,878),505=>array(12,-9,472,666),506=>array(-18,0,656,900),507=>array(17,-11,506,899),508=>array(2,0,940,863),509=>array(17,-11,634,651),510=>array(37,-105,676,899),511=>array(25,-135,484,764),512=>array(0,0,615,852),513=>array(17,-11,476,666),514=>array(0,0,615,850),515=>array(17,-11,476,638),516=>array(0,0,635,852),517=>array(24,-11,429,666),518=>array(0,0,635,850),519=>array(24,-11,458,638),520=>array(0,0,396,852),521=>array(10,-11,304,667),522=>array(0,0,423,850),523=>array(49,-11,349,638),524=>array(37,-18,676,852),525=>array(25,-11,466,666),526=>array(37,-18,676,850),527=>array(25,-11,471,638),528=>array(0,0,601,852),529=>array(19,0,386,666),530=>array(0,0,601,850),531=>array(19,0,410,638),532=>array(113,-18,776,852),533=>array(31,-11,464,666),534=>array(113,-18,776,850),535=>array(31,-11,464,638),536=>array(0,-300,491,667),537=>array(0,-300,350,442),538=>array(94,-300,668,653),539=>array(-24,-300,285,546),540=>array(28,-30,449,670),541=>array(4,-207,395,442),542=>array(0,0,775,875),543=>array(19,-9,583,866),544=>array(-8,-210,663,683),545=>array(33,-230,539,683),546=>array(42,-18,604,666),547=>array(26,-11,582,683),548=>array(9,-199,621,653),549=>array(8,-199,390,428),550=>array(0,0,615,801),551=>array(17,-11,476,594),552=>array(-8,-216,627,653),553=>array(13,-224,405,441),554=>array(37,-18,676,900),555=>array(25,-11,521,717),556=>array(37,-18,676,900),557=>array(25,-11,530,715),558=>array(37,-18,676,806),559=>array(25,-11,466,594),560=>array(37,-18,676,900),561=>array(25,-11,523,717),562=>array(113,0,668,795),563=>array(12,-206,462,583),564=>array(-93,-300,293,683),565=>array(14,-230,487,441),566=>array(-49,-300,351,579),567=>array(-124,-207,246,441),568=>array(28,-10,763,683),569=>array(28,-217,764,461),570=>array(-18,-74,651,721),571=>array(14,-74,666,721),572=>array(-25,-64,476,496),573=>array(0,0,567,653),574=>array(-44,-44,669,721),575=>array(0,-199,350,442),576=>array(7,-199,479,450),577=>array(98,0,461,666),578=>array(74,0,437,463),579=>array(-8,0,588,653),580=>array(49,-18,765,653),581=>array(-15,0,597,670),582=>array(-8,-84,627,726),583=>array(-16,-68,412,519),584=>array(-6,-18,491,653),585=>array(-77,-207,352,654),586=>array(31,-206,726,674),587=>array(28,-217,537,461),588=>array(-8,0,593,653),589=>array(45,0,412,441),590=>array(79,0,653,653),591=>array(6,-207,498,441),592=>array(57,-11,516,441),593=>array(29,-11,547,441),594=>array(31,-10,549,442),595=>array(22,-11,473,678),596=>array(0,-11,395,441),597=>array(24,-102,419,441),598=>array(18,-218,530,683),599=>array(15,-13,677,678),600=>array(0,-11,389,441),601=>array(24,-11,405,441),602=>array(33,-10,741,563),603=>array(11,-10,401,441),604=>array(3,-10,444,442),605=>array(3,-10,678,563),606=>array(10,-10,443,442),607=>array(-77,-207,293,441),608=>array(15,-207,680,678),609=>array(-30,-218,473,441),610=>array(29,-12,472,440),611=>array(46,-233,551,441),612=>array(60,-9,588,440),613=>array(59,-251,518,441),614=>array(19,-9,475,678),615=>array(19,-218,444,678),616=>array(21,-11,280,654),617=>array(49,-11,235,441),618=>array(7,0,266,431),619=>array(44,-11,397,683),620=>array(68,-11,348,683),621=>array(16,-218,279,683),622=>array(94,-209,586,683),623=>array(62,-9,754,441),624=>array(68,-189,760,441),625=>array(74,-218,734,441),626=>array(-74,-206,570,442),627=>array(13,-218,500,441),628=>array(8,-7,579,450),629=>array(27,-11,468,441),630=>array(28,0,664,440),631=>array(30,-10,653,443),632=>array(19,-200,592,683),633=>array(1,-9,368,432),634=>array(7,0,427,641),635=>array(0,-218,413,432),636=>array(-8,-200,412,441),637=>array(31,-199,412,441),638=>array(-7,0,438,442),639=>array(20,-201,311,441),640=>array(-6,0,418,431),641=>array(-17,0,493,431),642=>array(-15,-218,359,442),643=>array(-77,-207,494,678),644=>array(-77,-231,570,683),645=>array(98,-218,441,463),646=>array(-34,-300,620,683),647=>array(48,-11,307,546),648=>array(-16,-208,296,547),649=>array(21,-11,489,441),650=>array(24,-20,533,429),651=>array(42,-20,476,442),652=>array(-9,-18,396,441),653=>array(-19,-18,613,441),654=>array(-20,-16,430,631),655=>array(87,0,548,428),656=>array(-2,-218,510,428),657=>array(-2,-132,418,428),658=>array(-48,-209,380,428),659=>array(25,-272,392,428),660=>array(98,0,461,666),661=>array(87,0,498,666),662=>array(13,-14,424,652),663=>array(19,-170,531,665),664=>array(37,-18,676,666),665=>array(0,0,394,431),666=>array(11,7,445,459),667=>array(44,-9,730,675),668=>array(0,0,512,431),669=>array(-51,-230,351,683),670=>array(20,-251,467,443),671=>array(0,0,375,431),672=>array(5,-209,682,678),673=>array(25,0,461,676),674=>array(87,0,498,666),675=>array(13,-81,726,683),676=>array(15,-209,726,683),677=>array(15,-132,765,683),678=>array(43,0,551,546),679=>array(41,-207,612,678),680=>array(37,-102,635,546),681=>array(-77,-207,754,678),682=>array(40,0,506,683),683=>array(41,-81,482,683),684=>array(78,-6,604,662),685=>array(50,101,594,662),686=>array(87,-233,694,466),687=>array(87,-231,694,468),688=>array(59,391,374,800),689=>array(57,391,372,800),690=>array(68,306,308,823),691=>array(90,391,342,667),692=>array(90,391,342,667),693=>array(86,265,337,667),694=>array(91,387,421,667),695=>array(120,390,500,666),696=>array(105,277,376,666),697=>array(117,458,363,737),698=>array(97,458,524,737),699=>array(161,501,314,744),700=>array(128,436,267,666),701=>array(158,436,292,666),702=>array(246,508,371,707),703=>array(232,516,357,715),704=>array(149,310,360,677),705=>array(127,310,375,677),706=>array(196,554,474,752),707=>array(176,546,454,744),708=>array(169,516,433,707),709=>array(210,516,474,707),710=>array(156,507,468,674),711=>array(199,507,511,674),712=>array(242,499,376,696),713=>array(99,532,411,583),714=>array(101,494,324,664),715=>array(131,495,299,666),716=>array(44,-259,137,-62),717=>array(-32,-168,292,-117),718=>array(-27,-248,141,-77),719=>array(-31,-253,193,-83),720=>array(84,0,292,460),721=>array(181,360,292,460),722=>array(116,4,241,203),723=>array(94,0,219,199),724=>array(20,51,344,288),725=>array(58,47,382,284),726=>array(69,52,340,310),727=>array(43,151,366,205),728=>array(207,507,494,664),729=>array(273,523,371,621),730=>array(233,512,438,711),731=>array(43,-165,231,0),732=>array(140,520,516,626),733=>array(142,496,438,666),734=>array(82,300,404,563),735=>array(137,534,496,773),736=>array(150,256,440,667),737=>array(102,390,286,801),738=>array(108,387,322,670),739=>array(98,391,406,661),740=>array(161,391,409,797),741=>array(179,0,581,800),742=>array(149,0,581,801),743=>array(105,0,581,801),744=>array(60,0,581,801),745=>array(20,0,581,801),746=>array(49,-1,467,524),747=>array(50,0,511,473),748=>array(5,-200,317,-33),749=>array(187,610,527,770),750=>array(102,436,425,666),751=>array(24,-241,288,-50),752=>array(8,-240,272,-49),753=>array(-9,-227,269,-29),754=>array(-28,-228,250,-30),755=>array(39,-220,244,-21),756=>array(190,495,358,666),757=>array(169,495,463,666),758=>array(142,496,438,666),759=>array(-54,-182,345,-76),760=>array(134,223,340,675),761=>array(118,505,321,742),762=>array(157,505,321,742),763=>array(-1,-55,163,182),764=>array(-1,-55,202,182),765=>array(-34,-200,315,-28),766=>array(-40,-200,283,-28),767=>array(-27,-245,295,-39),768=>array(-133,495,35,666),769=>array(-32,494,191,664),770=>array(-151,507,161,674),771=>array(-150,523,226,629),772=>array(-146,529,166,580),773=>array(-222,547,253,601),774=>array(-104,507,183,664),775=>array(-29,523,69,621),776=>array(-139,523,159,621),777=>array(-53,521,115,688),778=>array(-63,512,142,711),779=>array(-271,496,25,666),780=>array(-109,507,203,674),781=>array(-19,499,73,696),782=>array(-78,499,132,696),783=>array(-393,495,-99,666),784=>array(-93,507,197,717),785=>array(-129,506,157,663),786=>array(-42,486,97,716),787=>array(-32,470,107,700),788=>array(-12,476,122,706),789=>array(108,446,247,676),790=>array(-363,-241,-195,-70),791=>array(-353,-247,-130,-77),792=>array(-337,-273,-66,-38),793=>array(-335,-274,-64,-39),794=>array(23,505,260,742),795=>array(80,333,317,564),796=>array(-336,-245,-211,-46),797=>array(-433,-282,-125,-45),798=>array(-373,-277,-65,-40),799=>array(-346,-297,-75,-39),800=>array(-375,-131,-52,-77),801=>array(-251,-231,-38,46),802=>array(-143,-231,17,46),803=>array(-318,-172,-220,-74),804=>array(-374,-172,-76,-74),805=>array(-380,-255,-175,-56),806=>array(-264,-300,-125,-70),807=>array(-307,-217,-95,0),808=>array(-276,-165,-88,0),809=>array(-276,-259,-183,-62),810=>array(-391,-238,-32,-66),811=>array(-339,-184,-47,-52),812=>array(-350,-238,-38,-71),813=>array(-381,-231,-69,-64),814=>array(-331,-214,-44,-57),815=>array(-373,-220,-86,-63),816=>array(-418,-174,-19,-68),817=>array(-376,-157,-63,-106),818=>array(-500,-125,0,-75),819=>array(-500,-200,0,-58),820=>array(-267,206,109,312),821=>array(-161,201,62,244),822=>array(-322,200,120,243),823=>array(-377,109,119,336),824=>array(-389,-111,203,592),825=>array(-312,-245,-187,-46),826=>array(-455,-215,-96,-43),827=>array(-438,-300,-105,-39),828=>array(-409,-224,-100,-47),829=>array(-163,504,196,743),830=>array(-10,494,168,749),831=>array(-284,511,216,653),832=>array(-135,495,33,666),833=>array(-74,494,149,664),834=>array(-159,550,217,656),835=>array(-60,507,137,722),836=>array(-135,547,162,802),837=>array(-249,-223,-76,-45),838=>array(-161,510,198,682),839=>array(-450,-199,-107,-38),840=>array(-311,-259,-77,-62),841=>array(-298,-218,-141,-74),842=>array(-258,495,95,686),843=>array(-139,500,237,801),844=>array(-148,520,262,767),845=>array(-460,-245,-39,-39),846=>array(-317,-295,-111,-18),848=>array(-82,501,197,699),849=>array(-34,514,91,713),850=>array(-130,507,154,717),851=>array(-463,-280,-104,-41),852=>array(-345,-227,-67,-29),853=>array(-379,-228,-101,-30),854=>array(-559,-228,-50,-30),855=>array(-64,469,61,668),856=>array(-117,523,-19,621),857=>array(-368,-266,-167,-59),858=>array(-462,-249,-77,-59),859=>array(-213,490,34,744),860=>array(-307,-195,266,-46),861=>array(-123,544,450,693),862=>array(-170,548,412,591),863=>array(-307,-120,275,-77),864=>array(-126,549,476,694),865=>array(-128,524,445,673),866=>array(-320,-245,256,-39),867=>array(-299,500,-100,695),868=>array(-263,500,-98,695),869=>array(-210,501,-117,788),870=>array(-298,500,-107,695),871=>array(-289,499,-102,695),872=>array(-295,498,-124,693),873=>array(-296,498,-75,798),874=>array(-274,502,-76,801),875=>array(-317,504,-18,698),876=>array(-237,508,-79,698),877=>array(-246,499,-133,740),878=>array(-272,496,-97,694),879=>array(-315,501,-110,696),884=>array(31,557,229,780),885=>array(0,-223,198,0),890=>array(9,-200,182,-52),894=>array(27,-129,261,441),900=>array(77,528,234,743),901=>array(156,525,453,780),902=>array(10,0,625,702),903=>array(151,352,273,470),904=>array(144,0,832,700),905=>array(126,0,951,707),906=>array(149,0,602,704),908=>array(152,-18,809,668),910=>array(148,0,918,701),911=>array(125,0,904,699),912=>array(3,-11,349,789),913=>array(10,0,625,668),914=>array(0,0,596,653),915=>array(-8,0,627,653),916=>array(-5,0,617,666),917=>array(-3,0,632,653),918=>array(0,0,612,653),919=>array(0,0,775,653),920=>array(39,-18,678,666),921=>array(0,0,392,653),922=>array(1,0,716,653),923=>array(-8,0,607,668),924=>array(0,0,891,653),925=>array(-1,-15,746,653),926=>array(11,0,684,653),927=>array(37,-18,676,666),928=>array(-8,0,767,653),929=>array(0,0,605,653),931=>array(-16,0,698,653),932=>array(104,0,678,653),933=>array(87,0,699,672),934=>array(54,0,761,653),935=>array(0,0,684,653),936=>array(83,0,914,658),937=>array(-8,0,771,666),938=>array(0,0,442,827),939=>array(87,0,699,823),940=>array(9,-11,527,697),941=>array(11,-10,401,697),942=>array(61,-212,488,699),943=>array(3,-11,312,695),944=>array(61,-11,495,783),945=>array(9,-11,527,441),946=>array(-34,-212,491,674),947=>array(34,-212,472,441),948=>array(26,-11,486,677),949=>array(11,-10,401,441),950=>array(22,-178,442,684),951=>array(61,-212,488,441),952=>array(25,-11,497,672),953=>array(3,-11,229,432),954=>array(14,-10,466,441),955=>array(-11,-11,447,678),956=>array(-51,-212,452,431),957=>array(61,0,510,441),958=>array(10,-178,445,684),959=>array(20,-11,480,441),960=>array(-22,-13,597,451),961=>array(-12,-218,451,441),962=>array(-8,-178,411,441),963=>array(18,-11,545,450),964=>array(63,-13,475,451),965=>array(61,-11,495,441),966=>array(23,-205,591,441),967=>array(-52,-205,498,441),968=>array(58,-224,689,558),969=>array(19,-10,648,461),970=>array(43,-11,353,605),971=>array(61,-11,495,599),972=>array(20,-11,480,697),973=>array(61,-11,495,697),974=>array(19,-10,648,697),976=>array(21,-10,531,705),977=>array(63,-10,623,705),978=>array(111,0,696,672),979=>array(115,0,876,702),980=>array(168,0,753,830),981=>array(20,-224,590,662),982=>array(31,-10,725,521),983=>array(30,-151,487,441),984=>array(90,0,643,652),985=>array(20,-221,499,461),986=>array(96,0,605,666),987=>array(12,-178,512,448),988=>array(8,0,645,653),989=>array(-78,-212,492,451),990=>array(62,-16,621,666),991=>array(-14,-178,353,682),992=>array(-18,0,672,669),993=>array(-12,-206,511,678),1008=>array(34,-10,510,461),1009=>array(0,-224,482,461),1010=>array(20,-10,457,461),1011=>array(-74,-207,326,654),1012=>array(39,-18,678,666),1013=>array(9,-10,307,461),1014=>array(33,-10,287,461),1015=>array(-30,0,539,653),1016=>array(-29,-205,469,677),1017=>array(66,-18,673,666),1018=>array(-18,0,873,653),1019=>array(-34,-212,654,441),1020=>array(-126,-212,451,441),1021=>array(66,-18,673,666),1022=>array(66,-18,673,666),1023=>array(66,-18,673,666),1024=>array(0,0,635,878),1025=>array(0,0,635,848),1026=>array(59,-10,654,653),1027=>array(-8,0,627,896),1028=>array(66,-18,689,666),1029=>array(0,-18,491,667),1030=>array(0,0,392,653),1031=>array(0,0,446,832),1032=>array(0,-18,497,653),1033=>array(0,-8,958,653),1034=>array(-8,0,929,653),1035=>array(59,0,687,653),1036=>array(-8,0,699,896),1037=>array(-8,0,766,878),1038=>array(111,-18,814,838),1039=>array(-8,-172,774,653),1040=>array(0,0,615,668),1041=>array(-8,0,604,653),1042=>array(0,0,596,653),1043=>array(-8,0,627,653),1044=>array(-84,-172,728,653),1045=>array(0,0,635,653),1046=>array(-18,0,1021,658),1047=>array(15,-14,570,666),1048=>array(-8,0,766,653),1049=>array(-8,0,766,838),1050=>array(-8,0,699,658),1051=>array(-34,-8,765,653),1052=>array(0,0,891,653),1053=>array(0,0,775,653),1054=>array(37,-18,676,666),1055=>array(-8,0,767,653),1056=>array(0,0,605,653),1057=>array(43,-18,666,666),1058=>array(94,0,668,653),1059=>array(111,-18,814,653),1060=>array(54,0,761,653),1061=>array(0,0,684,653),1062=>array(-8,-172,766,653),1063=>array(113,0,712,653),1064=>array(-8,0,1043,653),1065=>array(-8,-172,1043,653),1066=>array(79,0,682,653),1067=>array(-8,0,937,653),1068=>array(-8,0,546,653),1069=>array(14,-14,604,666),1070=>array(-8,-18,1003,666),1071=>array(-18,0,753,653),1072=>array(17,-11,476,441),1073=>array(27,-11,578,689),1074=>array(27,-11,419,441),1075=>array(8,-11,335,441),1076=>array(27,-11,467,683),1077=>array(25,-11,406,441),1078=>array(0,-11,914,441),1079=>array(6,-9,389,441),1080=>array(31,-11,464,441),1081=>array(31,-11,472,623),1082=>array(12,-10,464,441),1083=>array(-24,-9,484,441),1084=>array(-24,-18,621,441),1085=>array(12,-9,472,441),1086=>array(25,-11,466,441),1087=>array(12,-9,472,441),1088=>array(-77,-205,467,441),1089=>array(26,-11,421,441),1090=>array(12,-9,704,441),1091=>array(-7,-207,454,441),1092=>array(21,-205,703,678),1093=>array(-30,-11,444,441),1094=>array(31,-186,465,441),1095=>array(47,-9,464,441),1096=>array(31,-11,714,441),1097=>array(31,-186,715,441),1098=>array(36,-11,513,441),1099=>array(46,-11,653,441),1100=>array(46,-11,405,441),1101=>array(7,-12,400,441),1102=>array(12,-11,666,441),1103=>array(-7,-11,499,432),1104=>array(25,-11,406,666),1105=>array(25,-11,447,606),1106=>array(29,-207,483,683),1107=>array(8,-11,381,664),1108=>array(30,-11,425,440),1109=>array(0,-13,350,442),1110=>array(39,-11,254,654),1111=>array(49,-11,353,612),1112=>array(-74,-207,326,654),1113=>array(-24,-11,675,442),1114=>array(14,-11,664,441),1115=>array(19,-9,478,683),1116=>array(12,-10,464,680),1117=>array(31,-11,464,666),1118=>array(-7,-207,472,626),1119=>array(38,-186,471,441),1120=>array(37,-18,948,666),1121=>array(33,-10,662,442),1122=>array(65,0,660,653),1123=>array(12,-11,655,441),1124=>array(-8,-18,998,666),1125=>array(12,-11,627,441),1126=>array(-18,0,770,668),1127=>array(-27,-11,604,441),1128=>array(-8,0,1054,668),1129=>array(14,-11,771,441),1130=>array(-18,0,918,653),1131=>array(-3,-12,718,432),1132=>array(-8,0,1214,653),1133=>array(14,-12,866,441),1134=>array(-24,-212,623,843),1135=>array(-14,-184,440,573),1136=>array(144,0,978,662),1137=>array(96,-215,758,683),1138=>array(60,-18,700,666),1139=>array(27,-11,468,441),1140=>array(76,-18,799,668),1141=>array(21,-18,551,442),1142=>array(76,-18,799,885),1143=>array(21,-18,551,684),1144=>array(60,-207,1084,666),1145=>array(23,-207,884,441),1146=>array(33,-64,852,710),1147=>array(31,-43,578,472),1148=>array(37,-18,948,900),1149=>array(31,-10,713,664),1150=>array(37,-18,948,831),1151=>array(33,-10,703,626),1152=>array(96,0,605,666),1153=>array(30,-172,425,441),1154=>array(6,-212,288,123),1155=>array(-201,507,160,644),1156=>array(-262,486,131,657),1157=>array(-29,523,154,738),1158=>array(-44,522,149,737),1159=>array(-420,547,240,703),1160=>array(-752,-134,269,857),1161=>array(-787,-253,357,891),1162=>array(-8,-146,766,838),1163=>array(42,-146,475,623),1164=>array(-8,0,546,653),1165=>array(14,-11,401,441),1166=>array(0,0,605,653),1167=>array(-75,-205,469,441),1168=>array(-8,0,661,760),1169=>array(14,0,463,520),1170=>array(-8,0,627,653),1171=>array(7,0,434,432),1172=>array(9,-242,644,653),1173=>array(14,-218,434,432),1174=>array(-29,-172,1010,658),1175=>array(0,-186,914,441),1176=>array(15,-209,570,666),1177=>array(-3,-169,380,441),1178=>array(-8,-172,699,658),1179=>array(14,-186,466,441),1180=>array(-8,0,735,658),1181=>array(14,-10,507,441),1182=>array(-8,0,699,658),1183=>array(14,-10,466,441),1184=>array(59,0,811,658),1185=>array(36,-10,665,441),1186=>array(-8,-172,767,653),1187=>array(14,-186,474,441),1188=>array(-8,0,982,653),1189=>array(14,-9,670,441),1190=>array(2,-242,952,653),1191=>array(14,-218,651,441),1192=>array(20,-14,729,676),1193=>array(27,-10,511,460),1194=>array(66,-209,689,666),1195=>array(25,-171,421,440),1196=>array(59,-129,633,653),1197=>array(12,-186,704,441),1198=>array(113,0,668,653),1199=>array(22,-209,592,442),1200=>array(69,0,633,653),1201=>array(22,-209,592,442),1202=>array(-8,-172,676,653),1203=>array(-27,-186,447,441),1204=>array(59,-129,922,653),1205=>array(59,-186,557,432),1206=>array(113,-172,712,653),1207=>array(58,-186,475,441),1208=>array(113,0,736,653),1209=>array(58,-9,491,441),1210=>array(-8,0,591,653),1211=>array(19,-9,478,683),1212=>array(19,-17,780,668),1213=>array(49,-11,567,441),1214=>array(19,-128,780,668),1215=>array(49,-128,567,441),1216=>array(0,0,392,653),1217=>array(-18,0,1021,838),1218=>array(0,-11,914,626),1219=>array(-8,-243,699,658),1220=>array(14,-218,466,441),1221=>array(-34,-146,765,653),1222=>array(-45,-146,463,441),1223=>array(-8,-242,767,653),1224=>array(14,-219,461,441),1225=>array(-8,-146,767,653),1226=>array(14,-146,474,441),1227=>array(113,-172,712,653),1228=>array(58,-186,475,441),1229=>array(-18,-146,873,653),1230=>array(-45,-146,600,441),1231=>array(0,0,392,653),1232=>array(0,0,615,838),1233=>array(17,-11,476,626),1234=>array(0,0,615,848),1235=>array(17,-11,476,606),1236=>array(2,0,940,653),1237=>array(17,-11,634,441),1238=>array(0,0,635,838),1239=>array(24,-11,478,626),1240=>array(33,-17,610,668),1241=>array(24,-11,405,441),1242=>array(33,-17,648,847),1243=>array(24,-11,453,606),1244=>array(-18,0,1021,846),1245=>array(0,-11,914,606),1246=>array(15,-14,570,853),1247=>array(6,-9,425,606),1248=>array(-24,-14,600,653),1249=>array(-48,-209,380,428),1250=>array(-8,0,766,795),1251=>array(31,-11,481,583),1252=>array(-8,0,766,848),1253=>array(31,-11,475,606),1254=>array(37,-18,676,852),1255=>array(25,-11,507,606),1256=>array(39,-18,678,666),1257=>array(27,-11,468,441),1258=>array(39,-18,678,850),1259=>array(27,-11,507,606),1260=>array(14,-14,604,851),1261=>array(7,-12,423,606),1262=>array(111,-18,814,795),1263=>array(-7,-207,478,583),1264=>array(111,-18,814,850),1265=>array(-7,-207,467,606),1266=>array(111,-18,814,878),1267=>array(-7,-207,478,666),1268=>array(113,0,712,849),1269=>array(47,-9,464,606),1270=>array(7,-172,644,653),1271=>array(0,-186,434,432),1272=>array(-8,0,937,851),1273=>array(46,-11,653,606),1296=>array(77,-15,616,676),1297=>array(47,-14,465,463),1298=>array(-34,-242,765,653),1299=>array(-45,-218,431,441),1306=>array(36,-183,676,666),1307=>array(20,-209,478,441),1308=>array(128,-18,963,653),1309=>array(40,-18,672,441),1310=>array(-8,0,699,658),1311=>array(14,-10,466,441),1329=>array(146,-24,845,662),1330=>array(16,0,774,676),1331=>array(124,0,823,676),1332=>array(91,0,895,676),1333=>array(146,-14,785,662),1334=>array(43,-70,731,674),1335=>array(112,-70,784,662),1336=>array(50,-70,718,676),1337=>array(15,0,854,676),1338=>array(67,-14,849,662),1339=>array(15,0,742,662),1340=>array(112,-70,650,662),1341=>array(15,0,909,662),1342=>array(141,-16,1026,674),1343=>array(151,0,754,662),1344=>array(10,-61,530,662),1345=>array(57,-25,733,674),1346=>array(95,-70,845,676),1347=>array(64,-14,733,675),1348=>array(146,-14,977,662),1349=>array(74,-15,672,676),1350=>array(154,0,907,732),1351=>array(83,-16,745,678),1352=>array(15,0,714,676),1353=>array(110,-118,771,678),1354=>array(110,0,724,676),1355=>array(43,-70,731,674),1356=>array(15,0,915,676),1357=>array(146,-14,845,662),1358=>array(107,-70,831,662),1359=>array(69,-15,589,676),1360=>array(15,0,773,676),1361=>array(64,-15,663,676),1362=>array(15,0,631,662),1363=>array(59,0,766,653),1364=>array(49,0,825,676),1365=>array(90,-14,764,676),1366=>array(64,-15,699,662),1369=>array(95,510,220,709),1370=>array(110,508,235,707),1371=>array(125,459,371,735),1372=>array(122,389,408,662),1373=>array(121,442,240,666),1374=>array(87,496,396,664),1375=>array(109,530,376,683),1377=>array(107,-10,799,450),1378=>array(-27,-200,528,460),1379=>array(60,-200,539,461),1380=>array(18,-200,538,460),1381=>array(104,-10,530,683),1382=>array(60,-200,523,461),1383=>array(83,-70,530,683),1384=>array(36,-200,495,460),1385=>array(-28,-200,579,460),1386=>array(61,-10,627,683),1387=>array(-28,-200,505,683),1388=>array(48,-200,273,460),1389=>array(-26,-200,769,683),1390=>array(66,-11,628,690),1391=>array(98,-200,519,662),1392=>array(15,0,505,683),1393=>array(61,-10,499,662),1394=>array(17,-200,495,460),1395=>array(61,-10,649,669),1396=>array(98,-10,579,662),1397=>array(-106,-218,291,460),1398=>array(71,-10,492,662),1399=>array(-18,-200,435,461),1400=>array(17,0,495,460),1401=>array(-17,-200,401,464),1402=>array(107,-200,799,450),1403=>array(-10,-200,443,461),1404=>array(17,0,508,460),1405=>array(98,-10,519,450),1406=>array(98,-200,568,683),1407=>array(98,-10,754,460),1408=>array(-26,-200,495,460),1409=>array(45,-218,524,461),1410=>array(90,0,277,460),1411=>array(98,-200,754,683),1412=>array(-28,-200,540,460),1413=>array(71,-10,527,460),1414=>array(64,-200,576,670),1415=>array(104,-10,532,683),1417=>array(50,-11,256,441),1418=>array(76,174,319,293),1423=>array(90,0,734,676),1425=>array(91,-229,250,-51),1426=>array(96,641,316,836),1427=>array(176,669,348,889),1428=>array(223,641,340,836),1429=>array(174,659,385,836),1430=>array(166,-259,267,-47),1431=>array(140,587,315,761),1432=>array(153,668,447,817),1433=>array(160,667,261,879),1434=>array(185,-226,406,-58),1435=>array(65,-170,134,-106),1436=>array(217,653,388,865),1437=>array(376,653,547,865),1438=>array(129,653,420,865),1439=>array(122,666,504,883),1440=>array(380,666,589,883),1441=>array(109,668,294,852),1442=>array(114,-229,273,-51),1443=>array(46,-211,303,-45),1444=>array(102,-226,323,-58),1445=>array(115,-245,286,-33),1446=>array(74,-245,343,-33),1447=>array(122,-228,305,-48),1448=>array(244,667,345,879),1449=>array(84,666,255,883),1450=>array(114,-229,273,-51),1451=>array(174,673,395,841),1452=>array(136,674,393,840),1453=>array(224,-259,325,-47),1454=>array(143,668,437,817),1455=>array(220,668,397,840),1456=>array(143,-242,242,-70),1457=>array(6,-242,302,-70),1458=>array(-3,-222,298,-58),1459=>array(-22,-254,297,-58),1460=>array(123,-134,192,-70),1461=>array(65,-134,236,-70),1462=>array(56,-240,243,-70),1463=>array(44,-160,298,-108),1464=>array(67,-236,301,-44),1465=>array(217,621,303,701),1466=>array(193,634,290,728),1467=>array(32,-245,245,-70),1468=>array(231,182,317,262),1469=>array(152,-213,239,-53),1470=>array(124,652,419,727),1471=>array(144,610,398,662),1472=>array(-96,0,148,694),1473=>array(527,619,613,699),1474=>array(177,619,263,699),1475=>array(63,73,349,617),1476=>array(367,619,453,699),1477=>array(232,-139,329,-45),1478=>array(106,0,393,598),1479=>array(107,-266,354,-67),1488=>array(-53,-5,517,584),1489=>array(-59,0,492,598),1490=>array(-44,0,323,598),1491=>array(82,-2,542,596),1492=>array(-37,-2,526,598),1493=>array(103,0,303,598),1494=>array(60,-1,323,598),1495=>array(-26,-2,527,598),1496=>array(-42,0,520,598),1497=>array(116,284,315,594),1498=>array(125,-300,597,564),1499=>array(-68,0,524,598),1500=>array(137,-6,535,812),1501=>array(-50,0,530,598),1502=>array(-42,0,516,599),1503=>array(43,-300,347,564),1504=>array(-36,0,315,598),1505=>array(-19,0,528,598),1506=>array(-72,0,539,600),1507=>array(68,-300,536,563),1508=>array(-64,0,494,598),1509=>array(4,-300,562,564),1510=>array(-70,0,528,598),1511=>array(-99,-300,551,564),1512=>array(80,-1,504,598),1513=>array(2,0,585,598),1514=>array(-50,-1,533,598),1520=>array(83,0,543,598),1521=>array(88,0,544,598),1522=>array(46,321,505,631),1523=>array(102,500,324,727),1524=>array(15,500,373,727),2404=>array(104,-18,281,498),2405=>array(104,-18,429,498),2433=>array(-289,638,-57,800),2434=>array(45,-58,306,531),2435=>array(39,15,336,535),2437=>array(44,-4,692,558),2438=>array(33,-17,862,648),2439=>array(1,-73,570,782),2440=>array(19,-8,579,774),2441=>array(8,62,597,787),2442=>array(11,55,627,777),2443=>array(60,37,683,659),2444=>array(57,28,450,588),2447=>array(36,-3,552,563),2448=>array(-5,-4,607,849),2451=>array(79,57,528,536),2452=>array(59,58,598,821),2453=>array(29,3,659,558),2454=>array(52,3,564,649),2455=>array(40,-18,572,653),2456=>array(51,-2,567,558),2457=>array(34,14,430,535),2458=>array(23,48,497,558),2459=>array(54,-76,556,558),2460=>array(48,5,689,558),2461=>array(24,10,636,651),2462=>array(36,-3,785,556),2463=>array(-15,74,471,790),2464=>array(-50,42,451,863),2465=>array(45,61,616,558),2466=>array(29,73,496,558),2467=>array(37,1,528,655),2468=>array(41,68,641,558),2469=>array(30,-5,555,651),2470=>array(36,-4,578,558),2471=>array(47,-18,539,564),2472=>array(26,-14,545,558),2474=>array(56,-6,616,624),2475=>array(49,0,703,558),2476=>array(35,-9,541,558),2477=>array(38,76,618,558),2478=>array(49,-3,583,558),2479=>array(49,-5,566,558),2480=>array(35,1,535,558),2482=>array(49,-5,638,558),2486=>array(16,-4,607,647),2487=>array(48,1,562,558),2488=>array(44,-5,619,558),2489=>array(41,-84,538,558),2492=>array(-319,-155,-197,-36),2493=>array(41,-84,407,558),2494=>array(-28,-17,282,648),2495=>array(-27,-9,582,788),2496=>array(-296,-5,268,813),2497=>array(-297,-178,0,97),2498=>array(-239,-235,44,75),2499=>array(-394,-253,-169,81),2500=>array(-348,-300,18,156),2503=>array(23,16,389,558),2504=>array(-31,11,368,778),2507=>array(16,-17,867,648),2508=>array(-26,-17,891,778),2509=>array(-134,-162,154,558),2510=>array(38,19,353,564),2519=>array(-176,-15,276,814),2524=>array(64,-114,639,558),2525=>array(46,-97,526,558),2527=>array(45,-8,568,558),2528=>array(44,-81,698,658),2529=>array(98,-271,491,588),2530=>array(-420,-300,-152,64),2531=>array(-500,-300,67,164),2534=>array(44,55,449,440),2535=>array(13,-4,348,571),2536=>array(56,-81,415,561),2537=>array(37,37,483,511),2538=>array(-2,32,428,573),2539=>array(14,9,510,547),2540=>array(30,13,458,552),2541=>array(118,0,450,545),2542=>array(15,23,515,551),2543=>array(-6,27,427,576),2544=>array(35,-9,541,558),2545=>array(21,-34,544,558),2546=>array(85,32,339,535),2547=>array(-1,70,367,547),2548=>array(-33,25,479,529),2549=>array(17,42,570,572),2550=>array(-7,29,600,572),2551=>array(-1,47,159,551),2552=>array(21,45,345,552),2553=>array(7,169,299,439),2554=>array(30,345,641,730),2555=>array(76,-200,311,298),3585=>array(4,0,486,527),3586=>array(0,-1,463,531),3587=>array(59,-1,523,530),3588=>array(62,0,498,527),3589=>array(61,0,513,526),3590=>array(36,-7,571,530),3591=>array(45,-1,402,529),3592=>array(67,0,416,526),3593=>array(32,-6,489,528),3594=>array(0,0,475,563),3595=>array(56,0,532,563),3596=>array(20,-9,718,529),3597=>array(20,-271,718,527),3598=>array(2,-218,550,530),3599=>array(-5,-219,545,529),3600=>array(-122,-300,478,529),3601=>array(60,-1,602,530),3602=>array(18,-8,697,529),3603=>array(20,-9,712,529),3604=>array(27,0,470,527),3605=>array(21,0,483,527),3606=>array(23,-9,486,529),3607=>array(56,-1,547,531),3608=>array(2,-1,509,529),3609=>array(55,-8,513,530),3610=>array(4,-1,538,529),3611=>array(0,0,595,744),3612=>array(5,-1,566,529),3613=>array(0,0,624,748),3614=>array(49,-1,580,529),3615=>array(49,0,643,744),3616=>array(0,-9,548,529),3617=>array(7,-8,542,530),3618=>array(30,-8,506,530),3619=>array(60,-6,485,526),3620=>array(24,-220,487,528),3621=>array(24,-8,467,529),3622=>array(-2,-225,546,530),3623=>array(57,-9,419,528),3624=>array(52,-5,559,552),3625=>array(2,-1,614,529),3626=>array(21,-12,545,552),3627=>array(54,-1,557,531),3628=>array(54,0,717,654),3629=>array(30,-8,475,529),3630=>array(26,-15,525,565),3631=>array(61,-1,415,531),3632=>array(3,0,409,524),3633=>array(-131,461,187,671),3634=>array(66,0,352,527),3635=>array(-52,0,353,735),3636=>array(-361,438,-3,659),3637=>array(-363,433,54,689),3638=>array(-364,433,74,687),3639=>array(-322,433,49,689),3640=>array(-323,-268,-160,-45),3641=>array(-442,-262,-139,-32),3642=>array(-263,-165,-153,-59),3647=>array(13,-49,645,672),3648=>array(81,-5,278,521),3649=>array(44,-5,486,521),3650=>array(41,-68,499,879),3651=>array(65,-69,352,884),3652=>array(64,-70,365,887),3653=>array(25,-227,320,528),3654=>array(117,-193,485,564),3655=>array(-161,449,208,734),3656=>array(-24,667,68,851),3657=>array(-70,658,239,849),3658=>array(-106,679,257,849),3659=>array(-95,662,122,847),3660=>array(-126,678,153,900),3661=>array(-55,567,94,720),3662=>array(-112,591,204,896),3663=>array(55,0,602,526),3664=>array(63,13,496,408),3665=>array(60,4,499,410),3666=>array(39,-17,533,590),3667=>array(31,12,537,408),3668=>array(7,-13,633,591),3669=>array(7,-13,634,591),3670=>array(85,-19,504,590),3671=>array(2,-14,597,578),3672=>array(16,-16,629,589),3673=>array(12,-14,626,588),3674=>array(70,-1,608,531),3675=>array(7,52,830,467),4256=>array(115,10,534,683),4257=>array(121,18,515,694),4258=>array(116,11,613,686),4259=>array(136,10,765,685),4260=>array(111,10,586,684),4261=>array(112,10,584,685),4262=>array(107,11,536,686),4263=>array(115,11,818,685),4264=>array(114,10,574,685),4265=>array(114,14,582,684),4266=>array(136,10,963,679),4267=>array(116,11,571,685),4268=>array(112,10,608,687),4269=>array(114,12,815,685),4270=>array(109,11,569,685),4271=>array(110,10,607,683),4272=>array(109,11,755,684),4273=>array(115,11,502,687),4274=>array(115,10,624,685),4275=>array(207,10,679,686),4276=>array(181,11,696,685),4277=>array(101,10,606,688),4278=>array(135,10,763,686),4279=>array(113,14,609,685),4280=>array(161,11,633,686),4281=>array(79,11,521,687),4282=>array(120,10,592,685),4283=>array(115,11,571,687),4284=>array(79,10,684,685),4285=>array(139,10,539,685),4286=>array(117,11,512,689),4287=>array(79,-133,705,686),4288=>array(107,11,568,686),4289=>array(106,11,576,685),4290=>array(98,9,614,685),4291=>array(131,14,610,686),4292=>array(107,10,599,685),4293=>array(105,12,551,685),4304=>array(64,10,465,494),4305=>array(72,11,466,687),4306=>array(13,-270,501,396),4307=>array(31,-274,653,395),4308=>array(5,-272,469,397),4309=>array(8,-273,475,396),4310=>array(62,10,491,685),4311=>array(70,10,724,400),4312=>array(69,11,466,396),4313=>array(4,-274,476,394),4314=>array(21,-272,847,396),4315=>array(72,10,528,682),4316=>array(70,10,565,686),4317=>array(66,11,718,397),4318=>array(60,10,518,684),4319=>array(7,-272,499,396),4320=>array(55,10,714,683),4321=>array(118,10,511,686),4322=>array(20,-272,515,395),4323=>array(73,-271,540,398),4324=>array(79,-272,586,400),4325=>array(4,-272,563,687),4326=>array(31,-271,653,395),4327=>array(7,-275,503,396),4328=>array(105,10,579,685),4329=>array(35,10,477,686),4330=>array(15,-271,485,398),4331=>array(72,10,528,686),4332=>array(122,-272,612,686),4333=>array(1,-271,485,684),4334=>array(120,10,515,686),4335=>array(-57,-271,645,394),4336=>array(61,10,527,689),4337=>array(63,10,534,684),4338=>array(17,10,499,396),4339=>array(-11,-268,464,396),4340=>array(5,-271,508,501),4341=>array(63,11,507,684),4342=>array(71,-279,756,686),4343=>array(10,-273,475,396),4344=>array(10,-273,481,400),4345=>array(86,-256,574,410),4346=>array(31,-198,478,396),4347=>array(61,-1,451,571),4348=>array(52,203,424,711),5024=>array(18,0,767,662),5025=>array(19,-9,680,662),5026=>array(112,0,719,662),5027=>array(33,-9,706,662),5028=>array(87,-9,888,671),5029=>array(-3,0,328,670),5030=>array(68,-14,570,676),5031=>array(81,-14,606,676),5032=>array(20,0,547,662),5033=>array(46,-18,833,662),5034=>array(-12,0,684,674),5035=>array(9,-14,500,662),5036=>array(18,0,690,662),5037=>array(72,10,764,672),5038=>array(37,0,538,676),5039=>array(9,-14,653,667),5040=>array(18,0,544,662),5041=>array(18,0,690,662),5042=>array(41,-14,785,676),5043=>array(124,-11,1056,662),5044=>array(51,-14,599,676),5045=>array(-9,0,618,676),5046=>array(79,-14,747,676),5047=>array(16,0,1008,662),5048=>array(83,0,513,676),5049=>array(32,-14,896,670),5050=>array(82,-14,1074,676),5051=>array(18,0,842,662),5052=>array(73,-13,624,662),5053=>array(74,-14,850,662),5054=>array(80,-14,754,676),5055=>array(83,-9,670,662),5056=>array(78,-14,772,676),5057=>array(8,-14,715,680),5058=>array(18,0,605,662),5059=>array(21,0,730,662),5060=>array(88,0,572,680),5061=>array(80,-14,993,676),5062=>array(50,0,755,662),5063=>array(19,-14,733,680),5064=>array(103,-14,765,680),5065=>array(81,0,1053,671),5066=>array(19,-18,734,680),5067=>array(53,-14,587,680),5068=>array(128,-14,810,662),5069=>array(43,-14,788,680),5070=>array(53,0,599,662),5071=>array(19,0,591,662),5072=>array(76,0,580,662),5073=>array(131,-14,783,680),5074=>array(22,0,617,662),5075=>array(90,-14,493,662),5076=>array(124,-11,1090,662),5077=>array(55,-14,608,680),5078=>array(104,-14,659,662),5079=>array(10,-18,769,660),5080=>array(10,-18,769,660),5081=>array(124,-11,810,662),5082=>array(58,-14,580,676),5083=>array(67,-14,909,680),5084=>array(16,-10,666,671),5085=>array(-12,0,611,675),5086=>array(18,0,641,662),5087=>array(79,-14,747,676),5088=>array(110,-14,756,662),5089=>array(50,-14,793,676),5090=>array(19,0,652,662),5091=>array(80,-14,696,680),5092=>array(102,0,884,660),5093=>array(18,0,831,662),5094=>array(18,0,800,662),5095=>array(41,-14,609,662),5096=>array(82,-14,885,680),5097=>array(73,-14,839,680),5098=>array(47,-14,876,680),5099=>array(86,-14,750,680),5100=>array(90,-14,786,680),5101=>array(36,-14,589,680),5102=>array(82,-14,585,680),5103=>array(19,-14,777,680),5104=>array(34,-101,644,680),5105=>array(56,-9,806,662),5106=>array(-12,0,631,680),5107=>array(79,-14,925,677),5108=>array(17,0,668,662),7424=>array(0,0,406,441),7425=>array(1,0,621,431),7426=>array(29,-11,646,441),7427=>array(-6,0,389,431),7428=>array(28,-12,440,440),7429=>array(0,0,468,431),7431=>array(0,0,420,431),7432=>array(3,-10,444,442),7433=>array(24,-180,239,485),7434=>array(0,-12,329,431),7435=>array(0,0,472,431),7436=>array(0,0,375,431),7437=>array(0,0,589,431),7439=>array(24,-12,447,440),7448=>array(0,0,400,431),7450=>array(39,0,437,431),7451=>array(62,0,441,431),7452=>array(74,-12,513,431),7456=>array(83,-12,488,431),7457=>array(84,-12,636,431),7458=>array(0,0,404,431),7552=>array(23,-142,473,683),7579=>array(98,381,446,685),7581=>array(84,321,349,686),7582=>array(91,381,397,847),7583=>array(77,382,373,686),7588=>array(116,383,290,830),7589=>array(113,383,239,687),7592=>array(27,235,297,848),7593=>array(93,244,269,849),7596=>array(97,243,540,686),7597=>array(117,264,582,687),7598=>array(38,251,470,687),7599=>array(89,243,416,686),7600=>array(73,385,456,692),7601=>array(88,381,384,685),7602=>array(91,270,475,862),7603=>array(60,243,311,687),7604=>array(58,301,441,895),7605=>array(42,295,302,757),7606=>array(104,382,418,686),7607=>array(86,376,428,678),7608=>array(132,383,427,680),7609=>array(118,376,409,687),7612=>array(68,243,412,677),7613=>array(78,301,360,677),7614=>array(47,249,335,677),7615=>array(96,382,413,841),7680=>array(0,-235,615,668),7681=>array(17,-246,476,441),7682=>array(0,0,596,804),7683=>array(25,-11,475,692),7684=>array(0,-163,596,653),7685=>array(25,-163,475,683),7686=>array(0,-121,596,653),7687=>array(-25,-121,475,683),7688=>array(45,-217,668,863),7689=>array(20,-217,429,651),7690=>array(0,0,708,806),7691=>array(18,-13,530,683),7692=>array(0,-163,708,653),7693=>array(18,-163,530,683),7694=>array(0,-121,708,653),7695=>array(18,-121,530,683),7696=>array(-8,-216,700,653),7697=>array(8,-223,527,683),7698=>array(0,-186,708,653),7699=>array(18,-199,530,683),7700=>array(-8,0,627,900),7701=>array(24,-11,457,797),7702=>array(-8,0,627,900),7703=>array(24,-11,473,793),7704=>array(0,-186,635,653),7705=>array(-30,-197,405,441),7706=>array(0,-144,635,653),7707=>array(-30,-155,405,441),7708=>array(-8,-216,627,865),7709=>array(13,-224,472,653),7710=>array(0,0,636,806),7711=>array(-77,-207,494,836),7712=>array(44,-18,714,756),7713=>array(-24,-206,454,579),7714=>array(0,0,775,806),7715=>array(19,-9,478,836),7716=>array(0,-163,775,653),7717=>array(19,-163,478,683),7718=>array(0,0,775,791),7719=>array(19,-9,552,821),7720=>array(-8,-215,767,653),7721=>array(-54,-213,478,683),7722=>array(0,-186,775,653),7723=>array(19,-195,478,683),7724=>array(-89,-144,392,653),7725=>array(-92,-155,284,654),7726=>array(-8,0,460,900),7727=>array(49,-11,363,816),7728=>array(0,0,715,863),7729=>array(18,-11,494,893),7730=>array(0,-163,715,653),7731=>array(18,-134,465,683),7732=>array(0,-91,715,653),7733=>array(16,-102,465,683),7734=>array(0,-163,567,653),7735=>array(23,-163,271,683),7736=>array(0,-163,585,744),7737=>array(23,-163,437,774),7738=>array(0,-121,567,653),7739=>array(-78,-121,271,683),7740=>array(0,-186,567,653),7741=>array(-68,-197,271,683),7742=>array(0,0,891,863),7743=>array(12,-9,704,656),7744=>array(0,0,891,806),7745=>array(12,-9,704,594),7746=>array(0,-163,891,653),7747=>array(12,-163,704,441),7748=>array(0,-15,747,806),7749=>array(12,-9,472,594),7750=>array(0,-163,747,653),7751=>array(12,-163,472,441),7752=>array(0,-121,747,653),7753=>array(6,-121,472,441),7754=>array(0,-201,747,653),7755=>array(5,-195,472,441),7756=>array(37,-16,679,900),7757=>array(25,-11,541,834),7758=>array(37,-18,676,899),7759=>array(25,-11,533,762),7760=>array(37,-16,676,900),7761=>array(25,-11,495,797),7762=>array(37,-16,676,890),7763=>array(25,-11,495,793),7764=>array(0,0,605,863),7765=>array(-77,-205,467,651),7766=>array(0,0,605,806),7767=>array(-77,-205,467,594),7768=>array(0,0,601,806),7769=>array(19,0,386,594),7770=>array(0,-163,601,653),7771=>array(19,-163,386,441),7772=>array(0,-163,601,756),7773=>array(19,-163,430,546),7774=>array(0,-121,601,653),7775=>array(-48,-121,386,441),7776=>array(0,-18,491,806),7777=>array(0,-13,350,594),7778=>array(0,-163,491,667),7779=>array(0,-163,350,442),7780=>array(10,-16,501,900),7781=>array(0,-13,401,752),7782=>array(10,-16,542,900),7783=>array(0,-13,465,770),7784=>array(0,-163,491,806),7785=>array(0,-163,350,594),7786=>array(94,0,668,806),7787=>array(26,-11,310,699),7788=>array(94,-163,668,653),7789=>array(3,-163,285,546),7790=>array(64,-121,668,653),7791=>array(-74,-121,285,546),7792=>array(41,-186,668,653),7793=>array(-88,-197,285,546),7794=>array(113,-156,776,653),7795=>array(27,-149,464,441),7796=>array(83,-162,776,653),7797=>array(-8,-155,464,441),7798=>array(105,-204,776,653),7799=>array(-1,-197,464,441),7800=>array(77,-16,740,900),7801=>array(31,-11,511,808),7802=>array(113,-18,776,899),7803=>array(31,-11,510,669),7804=>array(126,-18,738,802),7805=>array(51,-18,477,590),7806=>array(126,-163,738,653),7807=>array(51,-163,456,441),7808=>array(128,-18,963,867),7809=>array(51,-18,683,666),7810=>array(128,-18,963,863),7811=>array(51,-18,683,651),7812=>array(128,-18,963,791),7813=>array(51,-18,683,579),7814=>array(128,-18,963,806),7815=>array(51,-18,683,594),7816=>array(128,-163,963,653),7817=>array(51,-163,683,441),7818=>array(0,0,684,806),7819=>array(-30,-11,444,594),7820=>array(0,0,684,791),7821=>array(-30,-11,444,579),7822=>array(113,0,668,806),7823=>array(12,-206,462,594),7824=>array(0,0,612,875),7825=>array(-2,-81,423,663),7826=>array(0,-163,612,653),7827=>array(-2,-204,380,428),7828=>array(0,-121,612,653),7829=>array(-26,-172,380,428),7830=>array(2,-121,478,683),7831=>array(26,-11,397,684),7832=>array(51,-18,683,684),7833=>array(12,-206,462,684),7834=>array(17,-11,476,707),7835=>array(-48,-207,523,836),7836=>array(-118,-207,453,678),7837=>array(-77,-207,494,678),7838=>array(-10,-9,664,683),7839=>array(26,-11,486,677),7840=>array(0,-163,615,668),7841=>array(17,-163,476,441),7842=>array(0,0,615,877),7843=>array(17,-11,476,659),7844=>array(0,0,796,900),7845=>array(17,-11,670,797),7846=>array(0,0,615,879),7847=>array(17,-11,480,804),7848=>array(0,0,709,895),7849=>array(17,-11,632,683),7850=>array(-18,0,675,900),7851=>array(17,-11,556,802),7852=>array(0,-163,615,875),7853=>array(17,-163,486,663),7854=>array(-18,0,624,900),7855=>array(17,-11,516,800),7856=>array(-18,0,604,900),7857=>array(17,-11,494,798),7858=>array(-18,0,606,900),7859=>array(17,-11,494,810),7860=>array(-18,0,661,900),7861=>array(17,-11,552,802),7862=>array(0,-163,615,865),7863=>array(17,-163,505,653),7864=>array(0,-172,635,653),7865=>array(24,-172,405,441),7866=>array(0,0,635,862),7867=>array(24,-11,425,650),7868=>array(0,0,635,802),7869=>array(24,-11,487,590),7870=>array(0,0,816,898),7871=>array(24,-11,638,800),7872=>array(0,0,635,881),7873=>array(24,-11,459,803),7874=>array(0,0,735,900),7875=>array(24,-11,604,701),7876=>array(-8,0,662,900),7877=>array(24,-11,543,802),7878=>array(0,-172,635,898),7879=>array(24,-172,470,663),7880=>array(0,0,392,859),7881=>array(49,-11,289,660),7882=>array(0,-163,392,653),7883=>array(13,-163,254,654),7884=>array(37,-172,676,666),7885=>array(25,-172,466,441),7886=>array(37,-18,676,871),7887=>array(25,-11,466,656),7888=>array(37,-18,845,900),7889=>array(25,-11,690,798),7890=>array(37,-18,676,880),7891=>array(25,-11,497,801),7892=>array(37,-18,785,900),7893=>array(25,-11,646,710),7894=>array(28,-16,697,900),7895=>array(25,-11,588,802),7896=>array(37,-172,676,875),7897=>array(25,-172,494,663),7898=>array(37,-18,840,876),7899=>array(25,-11,618,666),7900=>array(37,-18,840,878),7901=>array(25,-11,618,666),7902=>array(37,-18,840,900),7903=>array(25,-11,618,684),7904=>array(37,-18,840,845),7905=>array(25,-11,618,606),7906=>array(37,-173,840,695),7907=>array(25,-169,618,545),7908=>array(113,-172,776,653),7909=>array(31,-172,464,441),7910=>array(113,-18,776,862),7911=>array(31,-11,464,654),7912=>array(102,-18,883,876),7913=>array(31,-11,647,666),7914=>array(102,-18,883,878),7915=>array(31,-11,647,666),7916=>array(102,-18,883,898),7917=>array(31,-11,647,686),7918=>array(102,-18,883,825),7919=>array(31,-11,647,628),7920=>array(102,-163,883,694),7921=>array(31,-163,647,545),7922=>array(113,0,668,867),7923=>array(12,-206,462,666),7924=>array(113,-163,668,653),7925=>array(12,-206,462,441),7926=>array(113,0,668,859),7927=>array(12,-206,462,656),7928=>array(113,0,668,802),7929=>array(12,-206,477,590),7936=>array(9,-11,527,710),7937=>array(9,-11,527,708),7938=>array(9,-11,527,710),7939=>array(9,-11,527,709),7940=>array(9,-11,527,712),7941=>array(9,-11,527,709),7942=>array(9,-11,538,800),7943=>array(9,-11,542,800),7944=>array(10,0,625,711),7945=>array(10,0,625,715),7946=>array(174,0,791,711),7947=>array(139,0,754,710),7948=>array(139,0,786,711),7949=>array(139,0,777,712),7950=>array(47,0,662,799),7951=>array(34,0,649,801),7952=>array(11,-10,401,700),7953=>array(11,-10,401,708),7954=>array(11,-10,417,710),7955=>array(11,-10,401,709),7956=>array(11,-10,463,712),7957=>array(11,-10,433,709),7960=>array(126,0,798,711),7961=>array(168,0,846,710),7962=>array(142,0,950,711),7963=>array(132,0,937,713),7964=>array(138,0,984,712),7965=>array(129,0,954,705),7968=>array(61,-212,488,710),7969=>array(61,-212,488,712),7970=>array(61,-212,490,714),7971=>array(61,-212,488,713),7972=>array(61,-212,554,706),7973=>array(61,-212,531,713),7974=>array(61,-212,603,799),7975=>array(61,-212,603,800),7976=>array(101,0,913,708),7977=>array(128,0,938,711),7978=>array(141,0,1072,711),7979=>array(135,0,1072,700),7980=>array(137,0,1116,710),7981=>array(134,0,1087,710),7982=>array(83,0,961,801),7983=>array(82,0,966,800),7984=>array(3,-11,261,710),7985=>array(3,-11,278,708),7986=>array(3,-11,321,710),7987=>array(3,-11,278,709),7988=>array(3,-11,378,712),7989=>array(3,-11,346,709),7990=>array(3,-20,399,801),7991=>array(3,-11,404,800),7992=>array(128,0,549,708),7993=>array(137,0,559,712),7994=>array(133,0,684,711),7995=>array(130,0,673,710),7996=>array(132,0,724,711),7997=>array(141,0,712,710),7998=>array(72,0,569,799),7999=>array(80,0,572,801),8000=>array(44,-11,504,710),8001=>array(20,-11,480,708),8002=>array(20,-11,480,710),8003=>array(20,-11,480,709),8004=>array(20,-11,495,712),8005=>array(20,-11,485,709),8008=>array(131,-18,791,707),8009=>array(130,-18,801,713),8010=>array(127,-18,960,711),8011=>array(130,-18,957,710),8012=>array(128,-18,947,713),8013=>array(128,-18,941,710),8016=>array(61,-11,495,710),8017=>array(61,-11,495,708),8018=>array(61,-11,495,710),8019=>array(61,-11,495,709),8020=>array(61,-11,525,712),8021=>array(61,-11,525,709),8022=>array(61,-11,559,800),8023=>array(61,-11,580,800),8025=>array(134,0,892,715),8027=>array(129,0,998,715),8029=>array(127,0,1026,716),8031=>array(78,0,899,799),8032=>array(19,-10,648,710),8033=>array(19,-10,648,708),8034=>array(19,-10,648,710),8035=>array(19,-10,648,709),8036=>array(19,-10,648,712),8037=>array(19,-10,648,709),8038=>array(19,-10,657,800),8039=>array(19,-10,656,800),8040=>array(100,0,879,711),8041=>array(97,0,876,713),8042=>array(134,0,1059,709),8043=>array(130,0,1039,713),8044=>array(136,0,1039,711),8045=>array(124,0,1014,706),8046=>array(90,0,927,799),8047=>array(88,0,903,799),8048=>array(9,-11,527,706),8049=>array(9,-11,527,704),8050=>array(11,-10,401,703),8051=>array(11,-10,401,704),8052=>array(61,-212,488,705),8053=>array(61,-212,488,702),8054=>array(3,-11,229,703),8055=>array(3,-11,273,703),8056=>array(20,-11,480,700),8057=>array(20,-11,480,700),8058=>array(61,-11,495,707),8059=>array(61,-11,495,706),8060=>array(19,-10,648,697),8061=>array(19,-10,648,701),8064=>array(9,-200,527,710),8065=>array(9,-200,527,708),8066=>array(9,-200,527,710),8067=>array(9,-200,527,709),8068=>array(9,-200,527,712),8069=>array(9,-200,527,709),8070=>array(9,-200,527,801),8071=>array(9,-200,537,800),8072=>array(10,0,813,711),8073=>array(10,0,811,715),8074=>array(174,0,968,711),8075=>array(139,0,938,710),8076=>array(139,0,963,711),8077=>array(139,0,958,712),8078=>array(47,0,845,799),8079=>array(34,0,826,801),8080=>array(40,-212,488,710),8081=>array(40,-212,488,708),8082=>array(40,-212,488,710),8083=>array(40,-212,488,709),8084=>array(40,-212,575,712),8085=>array(40,-212,545,709),8086=>array(40,-212,592,800),8087=>array(40,-212,601,800),8088=>array(101,0,977,708),8089=>array(128,-1,1023,711),8090=>array(141,0,1138,711),8091=>array(135,0,1144,700),8092=>array(137,0,1206,710),8093=>array(134,0,1208,710),8094=>array(83,0,1059,801),8095=>array(82,0,1065,800),8096=>array(19,-200,648,710),8097=>array(19,-200,648,708),8098=>array(19,-200,648,710),8099=>array(19,-200,648,709),8100=>array(19,-200,648,712),8101=>array(19,-200,648,709),8102=>array(19,-200,648,800),8103=>array(19,-200,648,800),8104=>array(100,0,1016,711),8105=>array(97,0,1033,713),8106=>array(134,0,1223,709),8107=>array(130,0,1193,713),8108=>array(136,0,1198,711),8109=>array(124,0,1170,706),8110=>array(90,0,1089,799),8111=>array(88,0,1061,799),8112=>array(9,-11,527,723),8113=>array(9,-11,527,571),8114=>array(9,-200,527,700),8115=>array(9,-200,527,441),8116=>array(9,-200,527,703),8118=>array(9,-11,527,658),8119=>array(9,-200,527,658),8120=>array(10,0,625,865),8121=>array(10,0,625,797),8122=>array(10,0,625,706),8123=>array(10,0,625,704),8124=>array(10,0,812,668),8125=>array(101,494,248,710),8126=>array(9,0,182,148),8127=>array(187,554,334,770),8128=>array(164,597,504,694),8129=>array(195,557,543,789),8130=>array(40,-212,488,703),8131=>array(40,-212,488,441),8132=>array(40,-212,488,700),8134=>array(61,-212,499,655),8135=>array(40,-212,502,656),8136=>array(117,0,752,706),8137=>array(112,0,787,714),8138=>array(147,0,922,706),8139=>array(126,0,941,704),8140=>array(0,0,830,653),8141=>array(169,494,435,710),8142=>array(173,496,495,712),8143=>array(111,470,451,800),8144=>array(3,-11,375,653),8145=>array(0,-11,312,572),8146=>array(3,-11,344,712),8147=>array(3,-11,344,755),8150=>array(-14,-11,326,614),8151=>array(3,-11,361,713),8152=>array(0,0,464,865),8153=>array(0,0,431,744),8154=>array(144,0,536,706),8155=>array(115,0,550,694),8157=>array(160,492,416,709),8158=>array(169,492,465,709),8159=>array(121,462,461,800),8160=>array(61,-11,511,673),8161=>array(61,-11,495,582),8162=>array(61,-11,495,742),8163=>array(61,-11,497,773),8164=>array(-12,-218,451,714),8165=>array(-12,-218,451,712),8166=>array(61,-11,512,653),8167=>array(61,-11,555,733),8168=>array(87,0,699,846),8169=>array(87,0,699,799),8170=>array(165,0,888,706),8171=>array(111,0,884,696),8172=>array(132,0,777,709),8173=>array(170,516,472,730),8174=>array(156,525,453,780),8175=>array(188,490,267,705),8178=>array(19,-200,648,707),8179=>array(19,-200,648,461),8180=>array(19,-200,648,696),8182=>array(19,-10,648,651),8183=>array(19,-200,648,653),8184=>array(155,-18,801,706),8185=>array(115,-18,787,705),8186=>array(102,0,881,706),8187=>array(83,0,862,704),8188=>array(7,0,933,666),8189=>array(257,498,414,713),8190=>array(159,491,310,708),8208=>array(81,201,339,250),8209=>array(124,201,392,250),8210=>array(85,201,607,250),8211=>array(42,201,554,250),8212=>array(42,201,1054,250),8213=>array(85,201,1107,250),8214=>array(57,-77,337,554),8215=>array(-56,-219,443,-57),8216=>array(152,436,291,666),8217=>array(141,436,280,666),8218=>array(-15,-129,124,101),8219=>array(161,428,295,666),8220=>array(121,436,440,666),8221=>array(101,436,424,666),8222=>array(-24,-129,309,101),8223=>array(123,428,429,666),8224=>array(101,-159,488,666),8225=>array(22,-143,491,666),8226=>array(122,191,402,461),8227=>array(88,180,399,483),8228=>array(27,-11,138,100),8229=>array(27,-11,388,100),8230=>array(57,-11,762,100),8231=>array(142,188,240,286),8240=>array(25,-19,1010,706),8241=>array(79,-13,1558,676),8242=>array(124,459,370,735),8243=>array(124,459,555,735),8244=>array(124,459,749,735),8245=>array(164,442,283,666),8246=>array(164,442,473,666),8247=>array(164,442,663,666),8248=>array(-21,-162,401,203),8249=>array(51,37,281,403),8250=>array(15,37,245,403),8251=>array(66,-26,677,563),8252=>array(39,-11,635,667),8253=>array(132,-12,508,664),8254=>array(154,547,665,597),8255=>array(36,-269,890,-13),8256=>array(219,644,1073,900),8257=>array(-13,-14,474,676),8258=>array(68,-86,862,688),8259=>array(85,150,382,298),8260=>array(-172,-10,519,676),8261=>array(165,-181,539,680),8262=>array(80,-181,455,680),8263=>array(132,-12,872,664),8264=>array(132,-12,802,667),8265=>array(39,-12,735,667),8266=>array(104,-8,597,450),8267=>array(-55,-154,559,662),8268=>array(15,155,537,545),8269=>array(13,166,535,556),8270=>array(98,-21,462,390),8271=>array(79,-141,305,459),8272=>array(76,1,981,801),8273=>array(78,-20,567,865),8274=>array(-4,-10,687,676),8275=>array(1,293,497,399),8276=>array(210,-275,1064,-19),8277=>array(70,-9,537,456),8278=>array(123,6,513,578),8279=>array(124,459,983,735),8280=>array(109,6,705,669),8281=>array(26,6,756,578),8282=>array(51,6,340,783),8283=>array(102,-197,698,806),8284=>array(86,0,600,510),8285=>array(45,6,332,783),8286=>array(46,6,331,783),8304=>array(130,379,466,797),8305=>array(165,387,308,826),8308=>array(126,391,453,804),8309=>array(111,387,499,815),8310=>array(126,384,491,806),8311=>array(178,391,504,799),8312=>array(117,385,459,804),8313=>array(102,383,467,805),8314=>array(162,501,374,701),8315=>array(162,576,374,626),8316=>array(152,526,385,676),8317=>array(143,306,374,862),8318=>array(90,306,321,862),8319=>array(120,385,425,683),8320=>array(-16,-212,320,206),8321=>array(-15,-200,230,205),8322=>array(-8,-200,283,208),8323=>array(-13,-204,283,210),8324=>array(-23,-200,304,213),8325=>array(-39,-205,349,223),8326=>array(-20,-204,345,218),8327=>array(32,-200,358,208),8328=>array(-29,-204,313,215),8329=>array(-54,-207,311,215),8330=>array(40,-99,252,101),8331=>array(45,-24,257,26),8332=>array(44,-74,277,76),8333=>array(15,-270,246,286),8334=>array(-28,-270,203,286),8336=>array(-9,-213,304,95),8337=>array(-4,-213,256,95),8338=>array(-3,-214,297,94),8339=>array(-41,-212,282,96),8340=>array(-4,-213,256,95),8352=>array(169,0,732,691),8353=>array(66,-139,798,793),8354=>array(66,-18,689,666),8355=>array(8,0,645,653),8356=>array(10,-6,517,670),8357=>array(12,-114,704,577),8358=>array(-20,-15,727,653),8359=>array(10,-10,962,662),8360=>array(0,-13,946,653),8361=>array(7,-18,906,653),8362=>array(60,0,901,600),8363=>array(73,1,628,802),8364=>array(87,-14,819,676),8365=>array(34,0,792,662),8366=>array(103,0,704,662),8367=>array(7,-207,1358,672),8368=>array(12,-197,502,672),8369=>array(16,0,687,662),8370=>array(82,-37,671,704),8371=>array(15,0,715,674),8372=>array(68,-14,563,676),8373=>array(21,-87,610,727),8374=>array(31,-11,482,663),8376=>array(116,-1,646,666),8377=>array(107,-14,743,661),8400=>array(-300,572,127,689),8401=>array(-323,572,98,689),8402=>array(-234,-77,-59,554),8403=>array(-218,-1,-79,457),8404=>array(-516,514,163,732),8405=>array(-496,514,188,732),8406=>array(-287,531,137,737),8407=>array(-307,531,117,737),8408=>array(-337,114,-46,397),8409=>array(-343,114,-13,412),8410=>array(-343,102,-52,397),8411=>array(-354,501,142,599),8412=>array(-553,513,142,612),8413=>array(-736,-198,252,790),8414=>array(-740,-193,249,796),8415=>array(-735,-190,251,796),8416=>array(-738,-198,250,790),8417=>array(-299,514,122,720),8418=>array(-706,-75,210,643),8419=>array(-879,-200,147,862),8420=>array(-785,-88,288,784),8421=>array(-373,-134,-20,556),8422=>array(-284,-77,-4,554),8423=>array(-328,15,163,539),8424=>array(-512,-142,-16,-44),8425=>array(-358,503,144,675),8426=>array(-608,103,135,411),8427=>array(-594,-99,176,591),8428=>array(-458,-197,-31,-80),8429=>array(-438,-199,-17,-82),8430=>array(-429,-230,-5,-24),8431=>array(-457,-230,-33,-24),8432=>array(-310,471,-127,678),8448=>array(29,-10,720,676),8449=>array(29,-10,720,676),8450=>array(45,-18,720,673),8451=>array(91,-18,966,676),8452=>array(70,1,464,666),8453=>array(17,-10,708,676),8454=>array(17,-10,708,676),8455=>array(13,-15,576,702),8456=>array(38,-14,699,676),8457=>array(91,0,936,676),8458=>array(-59,-216,562,347),8459=>array(9,-9,1218,700),8460=>array(4,-158,756,683),8461=>array(9,0,855,656),8462=>array(19,-9,478,683),8463=>array(49,-9,508,683),8464=>array(16,-12,928,701),8465=>array(20,-4,690,685),8466=>array(0,-9,932,703),8467=>array(34,-11,532,677),8468=>array(41,-11,811,683),8469=>array(8,-18,791,656),8470=>array(0,-15,814,653),8471=>array(65,-14,787,708),8472=>array(-11,-211,800,573),8473=>array(8,0,669,656),8474=>array(35,-171,738,673),8475=>array(8,-12,1015,700),8476=>array(66,-4,747,681),8477=>array(29,0,719,656),8478=>array(-8,-12,637,653),8479=>array(-13,-93,588,826),8480=>array(50,210,939,663),8481=>array(95,0,1165,653),8482=>array(102,221,979,652),8483=>array(-16,-93,688,827),8484=>array(29,0,716,656),8485=>array(-35,-209,462,664),8486=>array(-8,0,771,666),8487=>array(55,-1,834,665),8488=>array(-15,-162,662,674),8489=>array(107,9,333,452),8490=>array(0,0,715,653),8491=>array(0,0,615,900),8492=>array(20,-8,992,703),8493=>array(63,-4,676,683),8494=>array(34,-10,515,460),8495=>array(23,-7,424,347),8496=>array(32,-9,734,704),8497=>array(10,-10,1007,703),8498=>array(9,1,645,654),8499=>array(12,-10,1343,697),8500=>array(33,-7,438,347),8501=>array(-3,-5,567,584),8502=>array(1,0,552,598),8503=>array(6,0,373,598),8504=>array(92,-2,552,596),8505=>array(20,0,434,683),8506=>array(64,-42,913,598),8507=>array(0,0,1232,653),8508=>array(66,-1,751,518),8510=>array(18,0,676,656),8511=>array(28,0,836,656),8513=>array(81,11,718,707),8514=>array(127,0,557,664),8515=>array(22,0,577,664),8516=>array(20,0,611,665),8522=>array(39,0,558,664),8523=>array(116,-18,763,666),8525=>array(42,-12,955,676),8526=>array(10,0,430,431),8531=>array(129,-10,762,677),8532=>array(126,-10,791,678),8533=>array(108,-10,807,677),8534=>array(131,-10,831,678),8535=>array(122,-10,829,678),8536=>array(120,-10,832,684),8537=>array(115,-12,809,677),8538=>array(113,-12,819,693),8539=>array(138,-10,801,677),8540=>array(101,-10,793,678),8541=>array(118,-10,805,695),8542=>array(198,-10,800,679),8543=>array(108,-10,678,677),8544=>array(0,0,392,653),8545=>array(0,0,661,653),8546=>array(0,0,930,653),8547=>array(0,-18,1027,653),8548=>array(126,-18,738,653),8549=>array(126,-18,1003,653),8550=>array(126,-18,1269,653),8551=>array(126,-18,1532,653),8552=>array(0,0,973,653),8553=>array(0,0,684,653),8554=>array(0,0,1030,653),8555=>array(0,0,1297,653),8556=>array(0,0,567,653),8557=>array(43,-18,666,666),8558=>array(0,0,708,653),8559=>array(0,0,891,653),8560=>array(39,-11,254,654),8561=>array(39,-11,472,656),8562=>array(39,-11,690,654),8563=>array(39,-18,660,654),8564=>array(51,-18,456,441),8565=>array(51,-18,673,654),8566=>array(51,-18,888,654),8567=>array(51,-18,1104,654),8568=>array(39,-11,712,654),8569=>array(-30,-11,444,441),8570=>array(-30,-11,658,654),8571=>array(-30,-11,876,654),8572=>array(32,-11,271,683),8573=>array(24,-11,419,441),8574=>array(18,-13,530,683),8575=>array(12,-9,704,441),8592=>array(62,52,910,462),8593=>array(105,-163,516,677),8594=>array(54,52,902,462),8595=>array(-17,-163,394,677),8596=>array(84,52,925,462),8597=>array(252,-163,757,677),8598=>array(111,-35,740,677),8599=>array(8,-35,864,677),8600=>array(60,-163,689,549),8601=>array(8,-35,864,677),8612=>array(84,52,1057,462),8613=>array(36,-207,602,721),8614=>array(56,52,1029,462),8615=>array(48,-207,614,721),8617=>array(64,52,929,468),8618=>array(89,52,915,468),8628=>array(117,13,691,600),8629=>array(51,-16,752,629),8636=>array(68,229,921,462),8637=>array(80,52,921,285),8638=>array(76,-175,441,666),8639=>array(108,-172,389,669),8640=>array(59,232,900,465),8641=>array(59,49,912,282),8642=>array(71,-172,352,669),8643=>array(9,-175,374,666),8644=>array(42,-118,942,632),8645=>array(105,-163,774,677),8646=>array(34,-118,950,633),8651=>array(39,-51,941,564),8652=>array(50,-49,930,566),8656=>array(74,5,943,510),8657=>array(94,-163,606,678),8658=>array(37,5,906,510),8659=>array(24,-163,536,678),8660=>array(84,5,935,510),8661=>array(118,-168,702,683),8668=>array(68,52,1103,462),8669=>array(68,52,1103,462),8704=>array(115,-14,653,662),8705=>array(57,-13,600,801),8706=>array(96,-10,532,666),8707=>array(4,0,644,652),8708=>array(4,-110,649,776),8709=>array(30,-14,632,588),8710=>array(6,0,608,688),8711=>array(124,-20,726,668),8712=>array(71,8,562,506),8713=>array(71,-50,562,606),8714=>array(46,-17,440,500),8715=>array(44,8,535,506),8716=>array(43,-50,535,606),8717=>array(8,-17,435,500),8718=>array(77,0,570,691),8719=>array(-22,-101,925,751),8720=>array(-17,-101,930,751),8721=>array(-22,-123,772,752),8722=>array(86,220,590,286),8723=>array(86,0,590,568),8724=>array(86,0,590,656),8725=>array(143,-10,649,676),8726=>array(110,-14,609,676),8727=>array(102,78,394,407),8728=>array(62,71,435,443),8729=>array(136,152,338,354),8730=>array(94,-65,716,900),8731=>array(94,-65,716,900),8732=>array(94,-65,716,900),8733=>array(18,53,617,434),8734=>array(18,53,662,434),8735=>array(62,0,447,385),8736=>array(18,0,530,453),8737=>array(18,-40,530,453),8738=>array(35,0,467,510),8739=>array(112,-94,168,662),8740=>array(65,-94,264,662),8741=>array(112,-94,288,662),8742=>array(40,-94,424,662),8743=>array(19,0,545,508),8744=>array(79,0,605,508),8745=>array(52,0,655,573),8746=>array(59,0,662,573),8747=>array(-38,-200,726,900),8748=>array(-48,-200,1067,900),8749=>array(-52,-200,1405,900),8750=>array(-22,-200,741,900),8751=>array(-38,-200,1059,900),8756=>array(52,-10,544,481),8757=>array(102,-16,597,476),8758=>array(122,-18,220,476),8759=>array(81,-20,576,476),8761=>array(66,48,740,476),8764=>array(65,159,617,320),8770=>array(65,127,617,441),8771=>array(39,125,591,439),8773=>array(61,57,613,562),8776=>array(65,74,617,440),8778=>array(65,23,617,523),8784=>array(86,123,590,572),8785=>array(86,-68,590,577),8786=>array(86,-70,590,575),8787=>array(86,-64,593,574),8788=>array(102,10,761,497),8789=>array(86,10,784,494),8790=>array(86,123,590,389),8791=>array(86,123,590,680),8793=>array(86,123,590,697),8794=>array(86,123,590,697),8797=>array(86,123,658,766),8798=>array(86,123,590,683),8799=>array(86,123,590,794),8800=>array(64,-3,568,509),8801=>array(92,23,596,489),8804=>array(84,0,592,628),8805=>array(84,0,592,628),8806=>array(70,-113,579,706),8807=>array(105,-115,629,713),8810=>array(54,-10,893,516),8811=>array(64,-10,902,516),8818=>array(35,-112,587,599),8819=>array(62,-112,614,599),8834=>array(75,28,666,526),8835=>array(20,28,611,526),8976=>array(42,108,607,386),8992=>array(194,-83,834,900),8993=>array(-83,-81,551,900),8994=>array(97,156,632,316),8995=>array(92,156,626,316),9001=>array(64,-198,441,746),9002=>array(-16,-198,360,746),9251=>array(45,0,493,160),9674=>array(68,0,516,740),9675=>array(35,-14,757,708),9676=>array(135,-14,857,708),9688=>array(0,0,547,691),9702=>array(125,196,395,466),9711=>array(51,-85,914,778),9824=>array(72,0,656,705),9825=>array(148,-14,782,704),9826=>array(107,-14,634,705),9827=>array(99,0,813,705),9828=>array(72,0,656,705),9829=>array(148,-14,782,704),9830=>array(107,-14,634,705),9831=>array(99,0,813,705),9833=>array(-21,0,372,694),9834=>array(-21,0,497,694),9835=>array(16,0,722,703),9836=>array(16,0,722,703),9837=>array(-32,-21,362,730),9838=>array(-28,-214,402,712),9839=>array(-39,-197,452,762),11799=>array(76,52,343,303),42790=>array(-8,-186,767,653),42791=>array(4,-207,433,655),42792=>array(59,-81,790,653),42793=>array(37,-81,600,546),42794=>array(77,-15,616,676),42795=>array(68,-14,544,663),42796=>array(58,-52,557,676),42797=>array(53,-215,495,450),42798=>array(58,-129,557,676),42799=>array(53,-215,533,450),42888=>array(0,-102,312,65),42889=>array(50,-11,256,441),42890=>array(43,120,295,386),42891=>array(173,176,345,760),42892=>array(211,375,338,760),42893=>array(130,0,767,653),42896=>array(-18,-129,729,653),42897=>array(14,-186,474,441),42922=>array(98,0,917,653),43002=>array(21,-14,713,436),64256=>array(-77,-207,741,681),64257=>array(-77,-207,545,681),64258=>array(-77,-204,582,682),64259=>array(-77,-207,792,681),64260=>array(-77,-207,830,682),64261=>array(-77,-207,606,678),64262=>array(10,-13,677,670),64275=>array(98,-10,990,676),64276=>array(98,-10,993,662),64277=>array(98,-200,975,662),64278=>array(98,-200,990,662),64279=>array(98,-200,1238,662),64285=>array(50,235,315,594),64286=>array(279,719,578,865),64287=>array(46,203,505,631),64288=>array(22,48,589,600),64297=>array(30,220,534,506),64298=>array(2,0,647,699),64299=>array(2,0,585,699),64300=>array(2,0,656,699),64301=>array(2,0,585,699),64302=>array(-53,-96,517,584),64303=>array(-53,-236,517,584),64304=>array(-53,-133,517,584),64305=>array(-59,0,492,598),64306=>array(-44,0,323,598),64307=>array(82,-2,542,596),64308=>array(-37,-2,526,598),64309=>array(46,0,303,598),64310=>array(16,-1,323,598),64312=>array(-42,0,520,598),64313=>array(48,284,315,594),64314=>array(125,-300,597,564),64315=>array(-68,0,524,598),64316=>array(137,-6,535,812),64318=>array(-42,0,516,599),64320=>array(-36,0,315,598),64321=>array(-19,0,528,598),64323=>array(68,-300,536,563),64324=>array(-64,0,494,598),64326=>array(-70,0,528,598),64327=>array(-99,-300,551,564),64328=>array(80,-1,504,598),64329=>array(2,0,585,598),64330=>array(-50,-1,533,598),64331=>array(103,0,303,701),64332=>array(-59,0,492,662),64333=>array(-68,0,524,662),64334=>array(-64,0,494,662),64335=>array(125,-5,573,843),65532=>array(85,0,773,661),65533=>array(115,-63,978,800),65535=>array(19,-71,725,750)); +$cw=array(0=>600,32=>250,33=>333,34=>333,35=>500,36=>500,37=>833,38=>778,39=>200,40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>296,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>250,59=>250,60=>570,61=>664,62=>570,63=>444,64=>780,65=>651,66=>591,67=>611,68=>702,69=>574,70=>576,71=>690,72=>705,73=>322,74=>427,75=>641,76=>568,77=>821,78=>677,79=>656,80=>566,81=>656,82=>616,83=>454,84=>589,85=>706,86=>663,87=>888,88=>665,89=>593,90=>563,91=>389,92=>490,93=>389,94=>422,95=>500,96=>250,97=>498,98=>476,99=>403,100=>500,101=>406,102=>424,103=>440,104=>499,105=>246,106=>285,107=>453,108=>251,109=>725,110=>493,111=>473,112=>469,113=>483,114=>366,115=>345,116=>238,117=>484,118=>456,119=>683,120=>435,121=>462,122=>389,123=>400,124=>275,125=>400,126=>541,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>444,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>250,181=>500,182=>523,183=>250,184=>250,185=>250,186=>310,187=>444,188=>750,189=>740,190=>750,191=>500,192=>651,193=>651,194=>651,195=>651,196=>651,197=>651,198=>877,199=>611,200=>611,201=>611,202=>611,203=>611,204=>322,205=>322,206=>322,207=>322,208=>702,209=>677,210=>656,211=>656,212=>656,213=>656,214=>656,215=>675,216=>657,217=>706,218=>706,219=>706,220=>706,221=>593,222=>537,223=>569,224=>498,225=>498,226=>498,227=>498,228=>498,229=>498,230=>634,231=>403,232=>406,233=>406,234=>406,235=>406,236=>278,237=>278,238=>278,239=>278,240=>456,241=>493,242=>473,243=>473,244=>473,245=>473,246=>473,247=>675,248=>474,249=>484,250=>484,251=>484,252=>484,253=>462,254=>471,255=>462,256=>651,257=>498,258=>651,259=>498,260=>611,261=>500,262=>611,263=>403,264=>611,265=>403,266=>611,267=>403,268=>611,269=>403,270=>702,271=>625,272=>702,273=>500,274=>611,275=>406,276=>611,277=>406,278=>611,279=>406,280=>611,281=>406,282=>611,283=>406,284=>690,285=>440,286=>690,287=>440,288=>690,289=>440,290=>690,291=>440,292=>705,293=>499,294=>722,295=>500,296=>333,297=>278,298=>333,299=>278,300=>333,301=>278,302=>343,303=>278,304=>333,305=>278,306=>707,307=>452,308=>427,309=>328,310=>667,311=>453,312=>454,313=>568,314=>251,315=>568,316=>251,317=>568,318=>377,319=>568,320=>343,321=>564,322=>278,323=>677,324=>493,325=>677,326=>493,327=>677,328=>493,329=>542,330=>696,331=>500,332=>656,333=>473,334=>656,335=>473,336=>656,337=>473,338=>891,339=>653,340=>616,341=>366,342=>616,343=>366,344=>616,345=>366,346=>454,347=>345,348=>454,349=>345,350=>464,351=>345,352=>454,353=>345,354=>556,355=>238,356=>589,357=>364,358=>556,359=>248,360=>706,361=>484,362=>706,363=>484,364=>706,365=>484,366=>706,367=>484,368=>706,369=>484,370=>698,371=>484,372=>888,373=>683,374=>593,375=>462,376=>593,377=>563,378=>389,379=>563,380=>389,381=>563,382=>389,383=>464,384=>479,385=>738,386=>583,387=>481,388=>585,389=>509,390=>627,391=>853,392=>578,393=>702,394=>892,395=>669,396=>540,397=>472,398=>611,399=>585,400=>518,401=>611,402=>464,403=>863,404=>653,405=>708,406=>278,407=>333,408=>792,409=>444,410=>262,411=>480,412=>900,413=>768,414=>500,415=>661,416=>771,417=>576,418=>908,419=>722,420=>698,421=>483,422=>611,423=>500,424=>369,425=>653,426=>461,427=>313,428=>556,429=>335,430=>556,431=>801,432=>605,433=>747,434=>691,435=>663,436=>578,437=>556,438=>389,439=>518,440=>558,441=>434,442=>416,443=>500,444=>615,445=>439,446=>389,447=>473,448=>235,449=>360,450=>600,451=>333,452=>1268,453=>1091,454=>869,455=>1000,456=>824,457=>506,458=>1034,459=>895,460=>748,461=>651,462=>498,463=>322,464=>278,465=>656,466=>473,467=>706,468=>484,469=>706,470=>484,471=>698,472=>484,473=>698,474=>484,475=>698,476=>484,477=>406,478=>651,479=>498,480=>651,481=>498,482=>877,483=>634,484=>712,485=>490,486=>690,487=>440,488=>641,489=>453,490=>670,491=>473,492=>670,493=>473,494=>518,495=>446,496=>278,497=>1258,498=>1091,499=>859,500=>690,501=>440,502=>936,503=>537,504=>677,505=>493,506=>611,507=>498,508=>877,509=>634,510=>657,511=>474,512=>651,513=>498,514=>651,515=>498,516=>574,517=>406,518=>574,519=>406,520=>322,521=>278,522=>322,523=>278,524=>656,525=>473,526=>656,527=>473,528=>616,529=>366,530=>616,531=>366,532=>706,533=>484,534=>706,535=>484,536=>454,537=>345,538=>589,539=>238,540=>434,541=>465,542=>705,543=>499,544=>697,545=>558,546=>540,547=>508,548=>591,549=>404,550=>651,551=>498,552=>577,553=>406,554=>656,555=>473,556=>656,557=>473,558=>656,559=>473,560=>656,561=>473,562=>593,563=>462,564=>334,565=>527,566=>377,567=>278,568=>779,569=>768,570=>651,571=>611,572=>407,573=>564,574=>556,575=>350,576=>414,577=>436,578=>444,579=>588,580=>722,581=>657,582=>604,583=>406,584=>444,585=>348,586=>726,587=>550,588=>616,589=>333,590=>556,591=>470,592=>516,593=>564,594=>564,595=>500,596=>403,597=>407,598=>524,599=>647,600=>406,601=>406,602=>722,603=>431,604=>435,605=>664,606=>462,607=>353,608=>650,609=>480,610=>482,611=>491,612=>602,613=>499,614=>497,615=>485,616=>278,617=>278,618=>278,619=>378,620=>376,621=>364,622=>616,623=>761,624=>766,625=>768,626=>590,627=>569,628=>530,629=>500,630=>667,631=>700,632=>633,633=>366,634=>389,635=>444,636=>389,637=>393,638=>415,639=>383,640=>434,641=>456,642=>354,643=>464,644=>535,645=>496,646=>585,647=>238,648=>278,649=>510,650=>549,651=>464,652=>456,653=>683,654=>438,655=>490,656=>510,657=>492,658=>446,659=>479,660=>436,661=>438,662=>438,663=>454,664=>656,665=>402,666=>462,667=>695,668=>476,669=>307,670=>453,671=>383,672=>652,673=>414,674=>404,675=>745,676=>762,677=>799,678=>551,679=>542,680=>644,681=>756,682=>506,683=>481,684=>500,685=>500,686=>611,687=>716,688=>330,689=>330,690=>178,691=>248,692=>248,693=>309,694=>306,695=>405,696=>260,697=>250,698=>400,699=>200,700=>200,701=>200,702=>250,703=>250,704=>250,705=>250,706=>333,707=>333,708=>333,709=>333,710=>333,711=>333,712=>250,713=>333,714=>250,715=>250,716=>250,717=>333,718=>250,719=>250,720=>250,721=>250,722=>250,723=>250,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,732=>333,733=>333,734=>400,735=>333,736=>311,737=>200,738=>243,739=>328,740=>300,741=>500,742=>500,743=>500,744=>500,745=>500,746=>500,747=>500,748=>333,749=>333,750=>333,751=>333,752=>333,753=>333,754=>333,755=>333,756=>250,757=>333,758=>333,759=>333,760=>250,761=>200,762=>200,763=>200,764=>200,765=>333,766=>333,767=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199,890=>332,894=>333,900=>257,901=>333,902=>661,903=>250,904=>794,905=>904,906=>524,908=>815,910=>837,911=>879,912=>270,913=>661,914=>581,915=>594,916=>660,917=>611,918=>606,919=>705,920=>661,921=>333,922=>641,923=>661,924=>821,925=>677,926=>678,927=>656,928=>697,929=>566,931=>653,932=>596,933=>679,934=>751,935=>665,936=>821,937=>767,938=>333,939=>696,940=>564,941=>431,942=>539,943=>270,944=>540,945=>564,946=>509,947=>496,948=>518,949=>431,950=>408,951=>539,952=>523,953=>270,954=>491,955=>488,956=>501,957=>515,958=>440,959=>524,960=>608,961=>506,962=>423,963=>532,964=>477,965=>540,966=>628,967=>500,968=>728,969=>701,970=>310,971=>540,972=>524,973=>540,974=>701,976=>537,977=>632,978=>630,979=>820,980=>680,981=>612,982=>704,983=>529,984=>555,985=>548,986=>588,987=>498,988=>610,989=>478,990=>653,991=>410,992=>719,993=>544,1008=>563,1009=>546,1010=>495,1011=>285,1012=>661,1013=>280,1014=>280,1015=>540,1016=>500,1017=>704,1018=>832,1019=>703,1020=>533,1021=>704,1022=>704,1023=>704,1024=>574,1025=>574,1026=>668,1027=>594,1028=>634,1029=>454,1030=>322,1031=>322,1032=>427,1033=>992,1034=>963,1035=>703,1036=>644,1037=>720,1038=>739,1039=>728,1040=>651,1041=>583,1042=>591,1043=>594,1044=>668,1045=>574,1046=>987,1047=>592,1048=>720,1049=>720,1050=>644,1051=>695,1052=>821,1053=>705,1054=>656,1055=>697,1056=>566,1057=>611,1058=>589,1059=>739,1060=>751,1061=>665,1062=>696,1063=>642,1064=>973,1065=>983,1066=>716,1067=>877,1068=>580,1069=>594,1070=>984,1071=>683,1072=>498,1073=>475,1074=>418,1075=>354,1076=>493,1077=>406,1078=>914,1079=>412,1080=>484,1081=>484,1082=>483,1083=>504,1084=>641,1085=>492,1086=>473,1087=>493,1088=>469,1089=>436,1090=>725,1091=>478,1092=>735,1093=>435,1094=>485,1095=>484,1096=>734,1097=>735,1098=>545,1099=>677,1100=>437,1101=>432,1102=>671,1103=>519,1104=>406,1105=>406,1106=>510,1107=>354,1108=>442,1109=>345,1110=>246,1111=>278,1112=>285,1113=>707,1114=>696,1115=>498,1116=>483,1117=>484,1118=>478,1119=>491,1120=>964,1121=>679,1122=>708,1123=>688,1124=>975,1125=>644,1126=>812,1127=>624,1128=>1096,1129=>791,1130=>964,1131=>738,1132=>1260,1133=>886,1134=>574,1135=>400,1136=>812,1137=>694,1138=>721,1139=>500,1140=>745,1141=>533,1142=>745,1143=>533,1144=>1108,1145=>908,1146=>868,1147=>602,1148=>964,1149=>684,1150=>964,1151=>679,1152=>588,1153=>443,1154=>320,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>0,1161=>0,1162=>720,1163=>500,1164=>602,1165=>433,1166=>611,1167=>500,1168=>552,1169=>424,1170=>593,1171=>424,1172=>611,1173=>432,1174=>992,1175=>932,1176=>592,1177=>396,1178=>681,1179=>491,1180=>700,1181=>532,1182=>664,1183=>491,1184=>776,1185=>690,1186=>729,1187=>500,1188=>908,1189=>660,1190=>1034,1191=>694,1192=>730,1193=>543,1194=>666,1195=>403,1196=>556,1197=>775,1198=>593,1199=>574,1200=>555,1201=>574,1202=>660,1203=>443,1204=>798,1205=>581,1206=>674,1207=>500,1208=>690,1209=>516,1210=>640,1211=>499,1212=>785,1213=>569,1214=>785,1215=>568,1216=>322,1217=>987,1218=>914,1219=>664,1220=>491,1221=>719,1222=>487,1223=>722,1224=>500,1225=>722,1226=>500,1227=>666,1228=>500,1229=>828,1230=>624,1231=>322,1232=>651,1233=>498,1234=>651,1235=>498,1236=>877,1237=>634,1238=>574,1239=>406,1240=>585,1241=>406,1242=>585,1243=>406,1244=>987,1245=>914,1246=>592,1247=>412,1248=>518,1249=>446,1250=>720,1251=>484,1252=>720,1253=>484,1254=>656,1255=>473,1256=>661,1257=>500,1258=>661,1259=>500,1260=>594,1261=>432,1262=>739,1263=>478,1264=>739,1265=>478,1266=>739,1267=>478,1268=>642,1269=>484,1270=>611,1271=>424,1272=>877,1273=>677,1296=>532,1297=>409,1298=>719,1299=>487,1306=>656,1307=>483,1308=>888,1309=>656,1310=>664,1311=>491,1329=>794,1330=>712,1331=>782,1332=>854,1333=>711,1334=>702,1335=>707,1336=>655,1337=>777,1338=>782,1339=>710,1340=>663,1341=>830,1342=>917,1343=>672,1344=>469,1345=>666,1346=>858,1347=>685,1348=>856,1349=>618,1350=>858,1351=>709,1352=>719,1353=>714,1354=>731,1355=>702,1356=>874,1357=>719,1358=>844,1359=>519,1360=>703,1361=>608,1362=>586,1363=>751,1364=>780,1365=>714,1366=>684,1369=>120,1370=>120,1371=>269,1372=>307,1373=>241,1374=>312,1375=>300,1377=>786,1378=>506,1379=>542,1380=>541,1381=>506,1382=>503,1383=>478,1384=>499,1385=>541,1386=>539,1387=>508,1388=>289,1389=>750,1390=>540,1391=>513,1392=>508,1393=>503,1394=>531,1395=>518,1396=>500,1397=>243,1398=>473,1399=>406,1400=>499,1401=>407,1402=>793,1403=>414,1404=>463,1405=>500,1406=>516,1407=>758,1408=>504,1409=>466,1410=>288,1411=>758,1412=>510,1413=>501,1414=>562,1415=>543,1417=>278,1418=>280,1423=>700,1425=>0,1426=>0,1427=>0,1428=>0,1429=>0,1430=>0,1431=>418,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,1439=>0,1440=>0,1441=>0,1442=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>370,1471=>0,1472=>126,1473=>0,1474=>0,1475=>418,1476=>0,1477=>0,1478=>350,1479=>0,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,1494=>350,1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,1514=>537,1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,2404=>318,2405=>446,2433=>0,2434=>300,2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,2555=>344,3585=>512,3586=>453,3587=>512,3588=>519,3589=>529,3590=>561,3591=>411,3592=>437,3593=>552,3594=>452,3595=>509,3596=>707,3597=>707,3598=>574,3599=>570,3600=>406,3601=>607,3602=>686,3603=>749,3604=>494,3605=>497,3606=>509,3607=>552,3608=>461,3609=>565,3610=>527,3611=>523,3612=>556,3613=>551,3614=>570,3615=>570,3616=>571,3617=>531,3618=>493,3619=>433,3620=>513,3621=>491,3622=>571,3623=>439,3624=>510,3625=>594,3626=>484,3627=>554,3628=>616,3629=>493,3630=>496,3631=>417,3632=>392,3633=>0,3634=>366,3635=>366,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>662,3648=>297,3649=>544,3650=>298,3651=>329,3652=>328,3653=>326,3654=>488,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,3663=>725,3664=>624,3665=>624,3666=>624,3667=>624,3668=>624,3669=>624,3670=>624,3671=>624,3672=>624,3673=>624,3674=>645,3675=>872,4256=>453,4257=>448,4258=>546,4259=>619,4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,4269=>707,4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,4320=>694,4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,4327=>452,4328=>491,4329=>452,4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>480,4339=>414,4340=>453,4341=>418,4342=>741,4343=>452,4344=>452,4345=>544,4346=>454,4347=>410,4348=>339,5024=>711,5025=>678,5026=>604,5027=>667,5028=>796,5029=>301,5030=>516,5031=>544,5032=>457,5033=>716,5034=>703,5035=>383,5036=>628,5037=>709,5038=>455,5039=>601,5040=>472,5041=>574,5042=>730,5043=>939,5044=>498,5045=>528,5046=>667,5047=>891,5048=>505,5049=>792,5050=>957,5051=>725,5052=>595,5053=>733,5054=>698,5055=>638,5056=>720,5057=>732,5058=>624,5059=>638,5060=>565,5061=>903,5062=>655,5063=>681,5064=>675,5065=>949,5066=>683,5067=>547,5068=>693,5069=>732,5070=>529,5071=>569,5072=>536,5073=>677,5074=>631,5075=>495,5076=>973,5077=>543,5078=>607,5079=>652,5080=>652,5081=>693,5082=>514,5083=>803,5084=>658,5085=>597,5086=>627,5087=>659,5088=>679,5089=>706,5090=>563,5091=>618,5092=>767,5093=>776,5094=>731,5095=>492,5096=>808,5097=>823,5098=>796,5099=>689,5100=>716,5101=>518,5102=>521,5103=>719,5104=>563,5105=>776,5106=>634,5107=>822,5108=>621,7424=>416,7425=>587,7426=>703,7427=>410,7428=>428,7429=>450,7431=>401,7432=>435,7433=>246,7434=>268,7435=>449,7436=>364,7437=>536,7439=>443,7448=>361,7450=>390,7451=>380,7452=>449,7456=>384,7457=>527,7458=>395,7552=>500,7579=>335,7581=>285,7582=>312,7583=>280,7588=>188,7589=>212,7592=>230,7593=>236,7596=>497,7597=>529,7598=>421,7599=>404,7600=>364,7601=>329,7602=>412,7603=>234,7604=>282,7605=>217,7606=>384,7607=>356,7608=>344,7609=>334,7612=>403,7613=>318,7614=>297,7615=>318,7680=>651,7681=>498,7682=>591,7683=>476,7684=>591,7685=>476,7686=>591,7687=>476,7688=>611,7689=>403,7690=>702,7691=>500,7692=>702,7693=>500,7694=>702,7695=>500,7696=>693,7697=>500,7698=>702,7699=>500,7700=>577,7701=>406,7702=>577,7703=>406,7704=>574,7705=>406,7706=>574,7707=>406,7708=>577,7709=>406,7710=>576,7711=>424,7712=>690,7713=>440,7714=>705,7715=>499,7716=>705,7717=>499,7718=>705,7719=>499,7720=>697,7721=>498,7722=>705,7723=>499,7724=>322,7725=>246,7726=>314,7727=>278,7728=>641,7729=>453,7730=>641,7731=>453,7732=>641,7733=>453,7734=>568,7735=>251,7736=>568,7737=>251,7738=>568,7739=>251,7740=>568,7741=>251,7742=>821,7743=>725,7744=>821,7745=>725,7746=>821,7747=>725,7748=>677,7749=>493,7750=>677,7751=>493,7752=>677,7753=>493,7754=>677,7755=>493,7756=>656,7757=>473,7758=>656,7759=>473,7760=>656,7761=>473,7762=>656,7763=>473,7764=>566,7765=>469,7766=>566,7767=>469,7768=>616,7769=>366,7770=>616,7771=>366,7772=>616,7773=>366,7774=>616,7775=>366,7776=>454,7777=>345,7778=>454,7779=>345,7780=>464,7781=>345,7782=>464,7783=>345,7784=>454,7785=>345,7786=>589,7787=>238,7788=>589,7789=>238,7790=>589,7791=>238,7792=>589,7793=>238,7794=>706,7795=>484,7796=>706,7797=>484,7798=>706,7799=>484,7800=>698,7801=>484,7802=>706,7803=>484,7804=>663,7805=>456,7806=>663,7807=>456,7808=>888,7809=>683,7810=>888,7811=>683,7812=>888,7813=>683,7814=>888,7815=>683,7816=>888,7817=>683,7818=>665,7819=>435,7820=>665,7821=>435,7822=>593,7823=>462,7824=>563,7825=>389,7826=>563,7827=>389,7828=>563,7829=>389,7830=>499,7831=>238,7832=>683,7833=>462,7834=>444,7835=>383,7836=>383,7837=>424,7838=>676,7839=>464,7840=>651,7841=>498,7842=>651,7843=>498,7844=>651,7845=>498,7846=>651,7847=>498,7848=>651,7849=>498,7850=>651,7851=>498,7852=>651,7853=>498,7854=>651,7855=>498,7856=>651,7857=>498,7858=>651,7859=>498,7860=>651,7861=>498,7862=>651,7863=>498,7864=>574,7865=>406,7866=>574,7867=>406,7868=>574,7869=>406,7870=>611,7871=>406,7872=>611,7873=>406,7874=>611,7875=>406,7876=>611,7877=>406,7878=>574,7879=>406,7880=>322,7881=>278,7882=>322,7883=>246,7884=>656,7885=>473,7886=>656,7887=>473,7888=>656,7889=>473,7890=>656,7891=>473,7892=>656,7893=>473,7894=>656,7895=>473,7896=>656,7897=>473,7898=>771,7899=>576,7900=>771,7901=>576,7902=>807,7903=>585,7904=>771,7905=>576,7906=>771,7907=>576,7908=>706,7909=>484,7910=>706,7911=>484,7912=>801,7913=>605,7914=>801,7915=>605,7916=>807,7917=>585,7918=>801,7919=>605,7920=>801,7921=>605,7922=>593,7923=>462,7924=>593,7925=>462,7926=>593,7927=>462,7928=>593,7929=>462,7936=>564,7937=>564,7938=>564,7939=>564,7940=>564,7941=>564,7942=>564,7943=>564,7944=>661,7945=>661,7946=>794,7947=>771,7948=>792,7949=>773,7950=>661,7951=>648,7952=>431,7953=>431,7954=>431,7955=>431,7956=>431,7957=>431,7960=>740,7961=>795,7962=>923,7963=>910,7964=>956,7965=>926,7968=>539,7969=>539,7970=>539,7971=>539,7972=>539,7973=>539,7974=>539,7975=>539,7976=>879,7977=>901,7978=>1036,7979=>1035,7980=>1079,7981=>1060,7982=>924,7983=>929,7984=>270,7985=>270,7986=>267,7987=>267,7988=>267,7989=>267,7990=>267,7991=>267,7992=>490,7993=>499,7994=>625,7995=>614,7996=>665,7997=>653,7998=>510,7999=>513,8000=>558,8001=>524,8002=>524,8003=>524,8004=>524,8005=>524,8008=>797,8009=>807,8010=>966,8011=>962,8012=>953,8013=>947,8016=>540,8017=>540,8018=>540,8019=>540,8020=>540,8021=>540,8022=>540,8023=>540,8025=>816,8027=>922,8029=>950,8031=>823,8032=>701,8033=>701,8034=>701,8035=>701,8036=>701,8037=>701,8038=>701,8039=>701,8040=>852,8041=>849,8042=>1032,8043=>1012,8044=>1012,8045=>987,8046=>900,8047=>876,8048=>564,8049=>564,8050=>431,8051=>431,8052=>539,8053=>539,8054=>270,8055=>270,8056=>524,8057=>524,8058=>540,8059=>540,8060=>701,8061=>701,8064=>564,8065=>564,8066=>564,8067=>564,8068=>564,8069=>564,8070=>564,8071=>564,8072=>821,8073=>854,8074=>998,8075=>971,8076=>992,8077=>981,8078=>866,8079=>858,8080=>539,8081=>539,8082=>539,8083=>539,8084=>539,8085=>539,8086=>539,8087=>539,8088=>999,8089=>1044,8090=>1159,8091=>1165,8092=>1227,8093=>1229,8094=>1080,8095=>1085,8096=>701,8097=>701,8098=>701,8099=>701,8100=>701,8101=>701,8102=>701,8103=>701,8104=>1037,8105=>1053,8106=>1244,8107=>1214,8108=>1219,8109=>1191,8110=>1110,8111=>1082,8112=>564,8113=>564,8114=>564,8115=>564,8116=>564,8118=>564,8119=>564,8120=>661,8121=>661,8122=>661,8123=>661,8124=>831,8125=>192,8126=>200,8127=>200,8128=>500,8129=>534,8130=>539,8131=>539,8132=>539,8134=>539,8135=>539,8136=>731,8137=>766,8138=>889,8139=>908,8140=>851,8141=>330,8142=>333,8143=>500,8144=>270,8145=>270,8146=>270,8147=>270,8150=>270,8151=>270,8152=>333,8153=>333,8154=>477,8155=>491,8157=>333,8158=>500,8159=>333,8160=>540,8161=>540,8162=>540,8163=>540,8164=>506,8165=>506,8166=>540,8167=>540,8168=>679,8169=>679,8170=>865,8171=>861,8172=>783,8173=>333,8174=>333,8175=>200,8178=>701,8179=>701,8180=>701,8182=>701,8183=>701,8184=>807,8185=>793,8186=>855,8187=>835,8188=>952,8189=>500,8190=>200,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>500,8200=>250,8201=>166,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8211=>500,8212=>1000,8213=>1000,8214=>293,8215=>465,8216=>200,8217=>200,8218=>200,8219=>200,8220=>333,8221=>333,8222=>333,8223=>333,8224=>500,8225=>500,8226=>400,8227=>400,8228=>250,8229=>500,8230=>889,8231=>250,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>166,8240=>1000,8241=>1601,8242=>247,8243=>411,8244=>611,8245=>220,8246=>410,8247=>600,8248=>469,8249=>250,8250=>250,8251=>629,8252=>666,8253=>500,8254=>500,8255=>953,8256=>1000,8257=>314,8258=>931,8259=>400,8260=>167,8261=>480,8262=>480,8263=>900,8264=>833,8265=>763,8266=>500,8267=>453,8268=>453,8269=>500,8270=>500,8271=>278,8272=>882,8273=>500,8274=>497,8275=>500,8276=>953,8277=>512,8278=>410,8279=>855,8280=>620,8281=>620,8282=>179,8283=>621,8284=>564,8285=>179,8286=>179,8287=>111,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8304=>300,8305=>235,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8317=>216,8318=>216,8319=>318,8320=>300,8321=>250,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8330=>300,8331=>300,8332=>300,8333=>216,8334=>216,8336=>350,8337=>304,8338=>340,8339=>317,8340=>278,8352=>698,8353=>667,8354=>667,8355=>611,8356=>500,8357=>722,8358=>667,8359=>988,8360=>953,8361=>833,8362=>869,8363=>512,8364=>741,8365=>722,8366=>611,8367=>1340,8368=>489,8369=>589,8370=>619,8371=>722,8372=>556,8373=>611,8374=>408,8376=>524,8377=>654,8400=>0,8401=>0,8402=>0,8403=>0,8404=>0,8405=>0,8406=>0,8407=>0,8408=>0,8409=>0,8410=>0,8411=>0,8412=>0,8413=>0,8414=>0,8415=>0,8416=>0,8417=>0,8418=>0,8419=>0,8420=>0,8421=>0,8422=>0,8423=>0,8424=>0,8425=>0,8426=>0,8427=>0,8428=>0,8429=>0,8430=>0,8431=>0,8432=>0,8448=>604,8449=>605,8450=>674,8451=>954,8452=>536,8453=>593,8454=>667,8455=>518,8456=>667,8457=>862,8458=>560,8459=>1124,8460=>673,8461=>808,8462=>499,8463=>530,8464=>808,8465=>613,8466=>855,8467=>417,8468=>777,8469=>711,8470=>783,8471=>792,8472=>792,8473=>589,8474=>729,8475=>892,8476=>711,8477=>755,8478=>616,8479=>610,8480=>879,8481=>1156,8482=>920,8483=>611,8484=>659,8485=>409,8486=>767,8487=>767,8488=>663,8489=>286,8490=>722,8491=>722,8492=>936,8493=>613,8494=>523,8495=>430,8496=>637,8497=>890,8498=>576,8499=>1241,8500=>437,8501=>547,8502=>557,8503=>360,8504=>537,8505=>417,8506=>906,8507=>1195,8508=>675,8510=>586,8511=>722,8513=>663,8514=>485,8515=>485,8516=>637,8522=>516,8523=>778,8525=>926,8526=>378,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>322,8545=>608,8546=>877,8547=>950,8548=>663,8549=>930,8550=>1196,8551=>1459,8552=>900,8553=>665,8554=>931,8555=>1204,8556=>568,8557=>611,8558=>702,8559=>821,8560=>246,8561=>496,8562=>682,8563=>660,8564=>456,8565=>665,8566=>880,8567=>1096,8568=>703,8569=>435,8570=>650,8571=>878,8572=>251,8573=>403,8574=>500,8575=>725,8592=>964,8593=>499,8594=>964,8595=>499,8596=>900,8597=>900,8598=>800,8599=>800,8600=>800,8601=>800,8612=>1013,8613=>570,8614=>1013,8615=>500,8617=>910,8618=>910,8628=>658,8629=>658,8636=>900,8637=>900,8638=>400,8639=>400,8640=>900,8641=>900,8642=>400,8643=>400,8644=>900,8645=>790,8646=>900,8651=>900,8652=>900,8656=>900,8657=>550,8658=>900,8659=>550,8660=>910,8661=>650,8668=>1078,8669=>1078,8704=>587,8705=>532,8706=>544,8707=>587,8708=>587,8709=>662,8710=>612,8711=>612,8712=>536,8713=>536,8714=>439,8715=>536,8716=>536,8717=>439,8718=>500,8719=>823,8720=>823,8721=>713,8722=>675,8723=>675,8724=>675,8725=>750,8726=>610,8727=>400,8728=>400,8729=>400,8730=>549,8731=>549,8732=>549,8733=>677,8734=>677,8735=>509,8736=>575,8737=>559,8738=>509,8739=>200,8740=>250,8741=>320,8742=>404,8743=>564,8744=>564,8745=>654,8746=>654,8747=>496,8748=>840,8749=>1173,8750=>652,8751=>870,8756=>565,8757=>568,8758=>250,8759=>629,8761=>767,8764=>636,8770=>586,8771=>586,8773=>636,8776=>636,8778=>636,8784=>614,8785=>564,8786=>564,8787=>564,8788=>735,8789=>755,8790=>675,8791=>657,8793=>614,8794=>675,8797=>614,8798=>614,8799=>614,8800=>675,8801=>636,8804=>675,8805=>675,8806=>636,8807=>636,8810=>900,8811=>899,8818=>636,8819=>636,8834=>636,8835=>636,8976=>564,8992=>686,8993=>686,8994=>658,8995=>658,9001=>329,9002=>329,9251=>500,9674=>494,9675=>791,9676=>791,9688=>400,9702=>400,9711=>885,9824=>626,9825=>694,9826=>595,9827=>776,9828=>626,9829=>694,9830=>595,9831=>776,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,42790=>722,42791=>491,42792=>799,42793=>609,42794=>532,42795=>409,42796=>437,42797=>389,42798=>578,42799=>580,42888=>333,42889=>278,42890=>282,42891=>286,42892=>278,42893=>722,42896=>657,42897=>500,42922=>847,43002=>725,64256=>671,64257=>569,64258=>563,64259=>810,64260=>811,64261=>557,64262=>628,64275=>971,64276=>969,64277=>978,64278=>971,64279=>1219,64285=>350,64286=>0,64287=>537,64288=>537,64297=>564,64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537,64309=>350,64310=>350,64312=>537,64313=>350,64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537,64334=>537,64335=>537,65529=>0,65530=>0,65531=>0,65532=>800,65533=>900,65535=>600); +// --- EOF --- diff --git a/tcpdf/fonts/freeserifi.z b/tcpdf/fonts/freeserifi.z new file mode 100644 index 0000000..ad96b9c Binary files /dev/null and b/tcpdf/fonts/freeserifi.z differ diff --git a/tcpdf/fonts/helvetica.php b/tcpdf/fonts/helvetica.php new file mode 100644 index 0000000..d1aa6d8 --- /dev/null +++ b/tcpdf/fonts/helvetica.php @@ -0,0 +1,13 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Helvetica'; +$up=-100; +$ut=50; +$dw=513; +$diff=''; +$enc=''; +$desc=array('Flags'=>32,'FontBBox'=>'[-166 -225 1000 931]','ItalicAngle'=>0,'Ascent'=>931,'Descent'=>-225,'Leading'=>0,'CapHeight'=>718,'XHeight'=>523,'StemV'=>88,'StemH'=>76,'AvgWidth'=>513,'MaxWidth'=>1015,'MissingWidth'=>513); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>500,128=>655,129=>500,130=>222,131=>278,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>250,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>222,146=>221,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>250,156=>938,157=>500,158=>500,159=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448,188=>869,189=>869,190=>879,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>896,231=>500,232=>556,233=>556,234=>556,235=>556,236=>251,237=>251,238=>251,239=>251,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500); + +// --- EOF --- diff --git a/tcpdf/fonts/helveticab.php b/tcpdf/fonts/helveticab.php new file mode 100644 index 0000000..8d6047f --- /dev/null +++ b/tcpdf/fonts/helveticab.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Helvetica-Bold'; +$up=-100; +$ut=50; +$dw=535; +$diff=''; +$enc=''; +$desc=array('Flags'=>32,'FontBBox'=>'[-170 -228 1003 962]','ItalicAngle'=>0,'Ascent'=>962,'Descent'=>-228,'Leading'=>0,'CapHeight'=>718,'XHeight'=>532,'StemV'=>140,'StemH'=>118,'AvgWidth'=>535,'MaxWidth'=>1000,'MissingWidth'=>535); +$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556); +// --- EOF --- diff --git a/tcpdf/fonts/helveticabi.php b/tcpdf/fonts/helveticabi.php new file mode 100644 index 0000000..e2ecf38 --- /dev/null +++ b/tcpdf/fonts/helveticabi.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Helvetica-BoldOblique'; +$up=-100; +$ut=50; +$dw=535; +$diff=''; +$enc=''; +$desc=array('Flags'=>96,'FontBBox'=>'[-174 -228 1114 962]','ItalicAngle'=>-12,'Ascent'=>962,'Descent'=>-228,'Leading'=>0,'CapHeight'=>718,'XHeight'=>532,'StemV'=>140,'StemH'=>118,'AvgWidth'=>535,'MaxWidth'=>1000,'MissingWidth'=>535); +$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556); +// --- EOF --- diff --git a/tcpdf/fonts/helveticai.php b/tcpdf/fonts/helveticai.php new file mode 100644 index 0000000..0404aeb --- /dev/null +++ b/tcpdf/fonts/helveticai.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Helvetica-Oblique'; +$up=-100; +$ut=50; +$dw=513; +$diff=''; +$enc=''; +$desc=array('Flags'=>96,'FontBBox'=>'[-170 -225 1116 931]','ItalicAngle'=>-12,'Ascent'=>931,'Descent'=>-225,'Leading'=>0,'CapHeight'=>718,'XHeight'=>523,'StemV'=>88,'StemH'=>76,'AvgWidth'=>513,'MaxWidth'=>1015,'MissingWidth'=>513); +$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/hysmyeongjostdmedium.php b/tcpdf/fonts/hysmyeongjostdmedium.php new file mode 100644 index 0000000..9e8b23b --- /dev/null +++ b/tcpdf/fonts/hysmyeongjostdmedium.php @@ -0,0 +1,48 @@ +<?php +$type='cidfont0'; +$name='HYSMyeongJoStd-Medium-Acro'; // AdobeMyungjoStd-Medium-Acro in acrobat 6 +$displayname = 'MyungJo Medium (Korean)'; +$desc = array( + 'Ascent' => 880, + 'Descent' => -120, + 'CapHeight' => 720, + 'Flags' => 6, + 'FontBBox' => '[-28 -148 1001 880]', + 'ItalicAngle' => 0, + 'StemV' => 60, + 'Style' => '<< /Panose <000000000600000000000000> >>', +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Korea1', + 'Supplement' => '1', +); +$enc = 'UniKS-UCS2-H'; + +// underline position, needs checking: +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 333, 33 => 416, 34 => 416, 35 => 833, 36 => 625, 37 => 916, 38 => 833, 39 => 250, 40 => 500, 41 => 500, + 42 => 500, 43 => 833, 44 => 291, 45 => 450, 46 => 291, 47 => 375, 48 => 625, 49 => 625, 50 => 625, 51 => 625, + 52 => 625, 53 => 625, 54 => 625, 55 => 625, 56 => 625, 57 => 625, 58 => 333, 59 => 333, 60 => 833, 61 => 833, + 62 => 916, 63 => 500, 64 => 1000, 65 => 791, 66 => 708, 67 => 708, 68 => 750, 69 => 708, 70 => 666, 71 => 750, + 72 => 791, 73 => 375, 74 => 500, 75 => 791, 76 => 666, 77 => 916, 78 => 791, 79 => 750, 80 => 666, 81 => 750, + 82 => 708, 83 => 666, 84 => 791, 85 => 791, 86 => 750, 87 => 1000, 88 => 708, 89 => 708, 90 => 666, 91 => 500, + 92 => 375, 93 => 500, 94 => 500, 95 => 500, 96 => 333, 97 => 541, 98 => 583, 99 => 541, 100 => 583, 101 => 583, + 102 => 375, 103 => 583, 104 => 583, 105 => 291, 106 => 333, 107 => 583, 108 => 291, 109 => 875, 110 => 583, 111 => 583, + 112 => 583, 113 => 583, 114 => 458, 115 => 541, 116 => 375, 117 => 583, 118 => 583, 119 => 833, 120 => 625, 121 => 625, + 122 => 500, 123 => 583, 124 => 583, 125 => 583, 126 => 750, +); +$_cr = array( + //array(97, 97, 500), + array(8094, 8190, 500) +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +// --- EOF --- diff --git a/tcpdf/fonts/kozgopromedium.php b/tcpdf/fonts/kozgopromedium.php new file mode 100644 index 0000000..72783b7 --- /dev/null +++ b/tcpdf/fonts/kozgopromedium.php @@ -0,0 +1,65 @@ +<?php +$type = 'cidfont0'; +$name = 'KozGoPro-Medium-Acro'; +$displayname = 'Kozuka Gothic Pro (Japanese Sans-Serif)'; +$desc = array( + 'Ascent' => 880, + 'Descent' => -120, + 'CapHeight' => 763, + 'Flags' => 4, + 'FontBBox' => '[-149 -374 1254 1008]', + 'ItalicAngle' => 0, + 'StemV' => 99, + 'Style' => '<< /Panose <0000020b0700000000000000> >>', + 'XHeight' => 549, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Japan1', + 'Supplement' => '4', +); +$enc = 'UniJIS-UCS2-H'; + +// underline position, needs checking: +$up = -75; +$ut = 50; + +$dw = 1000; +$cw = array( + 32 => 224, 33 => 266, 34 => 392, 35 => 551, 36 => 562, 37 => 883, 38 => 677, 39 => 213, 40 => 322, 41 => 322, + 42 => 470, 43 => 677, 44 => 247, 45 => 343, 46 => 245, 47 => 370, 48 => 562, 49 => 562, 50 => 562, 51 => 562, + 52 => 562, 53 => 562, 54 => 562, 55 => 562, 56 => 562, 57 => 562, 58 => 245, 59 => 247, 60 => 677, 61 => 677, + 62 => 677, 63 => 447, 64 => 808, 65 => 661, 66 => 602, 67 => 610, 68 => 708, 69 => 535, 70 => 528, 71 => 689, + 72 => 703, 73 => 275, 74 => 404, 75 => 602, 76 => 514, 77 => 871, 78 => 708, 79 => 727, 80 => 585, 81 => 727, + 82 => 595, 83 => 539, 84 => 541, 85 => 696, 86 => 619, 87 => 922, 88 => 612, 89 => 591, 90 => 584, 91 => 322, + 92 => 562, 93 => 322, 94 => 677, 95 => 568, 96 => 340, 97 => 532, 98 => 612, 99 => 475, 100 => 608, 101 => 543, + 102 => 332, 103 => 603, 104 => 601, 105 => 265, 106 => 276, 107 => 524, 108 => 264, 109 => 901, 110 => 601, 111 => 590, + 112 => 612, 113 => 607, 114 => 367, 115 => 433, 116 => 369, 117 => 597, 118 => 527, 119 => 800, 120 => 511, 121 => 518, + 122 => 468, 123 => 321, 124 => 273, 125 => 321, 126 => 341, 127 => 241, 128 => 362, 129 => 241, 130 => 273, 131 => 677, + 132 => 266, 133 => 562, 134 => 562, 135 => 456, 136 => 562, 137 => 571, 138 => 562, 139 => 416, 140 => 472, 141 => 283, + 142 => 283, 143 => 587, 144 => 588, 145 => 568, 146 => 545, 147 => 545, 148 => 247, 149 => 561, 150 => 330, 151 => 239, + 152 => 418, 153 => 416, 154 => 472, 155 => 1136, 156 => 1288, 157 => 447, 158 => 340, 159 => 340, 160 => 340, 161 => 340, + 162 => 340, 163 => 340, 164 => 455, 165 => 340, 166 => 340, 167 => 340, 168 => 340, 169 => 1136, 170 => 857, 171 => 384, + 172 => 519, 173 => 727, 174 => 952, 175 => 398, 176 => 834, 177 => 264, 178 => 275, 179 => 590, 180 => 918, 181 => 605, + 182 => 677, 183 => 769, 184 => 677, 185 => 473, 186 => 361, 187 => 677, 188 => 347, 189 => 340, 190 => 599, 191 => 284, + 192 => 845, 193 => 845, 194 => 845, 195 => 661, 196 => 661, 197 => 661, 198 => 661, 199 => 661, 200 => 661, 201 => 610, + 202 => 535, 203 => 535, 204 => 535, 205 => 535, 206 => 275, 207 => 275, 208 => 275, 209 => 275, 210 => 715, 211 => 708, + 212 => 727, 213 => 727, 214 => 727, 215 => 727, 216 => 727, 217 => 677, 218 => 696, 219 => 696, 220 => 696, 221 => 696, + 222 => 591, 223 => 584, 224 => 532, 225 => 532, 226 => 532, 227 => 532, 228 => 532, 229 => 532, 230 => 475, 231 => 543, + 232 => 543, 233 => 543, 234 => 543, 235 => 264, 236 => 264, 237 => 264, 238 => 264, 239 => 584, 240 => 601, 241 => 590, + 242 => 590, 243 => 590, 244 => 590, 245 => 590, 246 => 677, 247 => 597, 248 => 597, 249 => 597, 250 => 597, 251 => 518, + 252 => 612, 253 => 518, 254 => 539, 255 => 591, 256 => 584, 257 => 446, 258 => 433, 259 => 683, 260 => 468, 261 => 562, +); +$_cr = array( + array(231, 632, 500), // half-width + array(8718, 8718, 500), + array(9738, 9757, 250), // quarter-width + array(9758, 9778, 333), // third-width + array(12063, 12087, 500) +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +// --- EOF --- diff --git a/tcpdf/fonts/kozminproregular.php b/tcpdf/fonts/kozminproregular.php new file mode 100644 index 0000000..c308d41 --- /dev/null +++ b/tcpdf/fonts/kozminproregular.php @@ -0,0 +1,63 @@ +<?php +$type = 'cidfont0'; +$name = 'KozMinPro-Regular-Acro'; +$displayname = 'Kozuka Mincho Pro (Japanese Serif)'; +$desc = array( + 'Ascent' => 880, + 'Descent' => -120, + 'CapHeight' => 740, + 'Flags' => 6, + 'FontBBox' => '[-195 -272 1110 1075]', + 'ItalicAngle' => 0, + 'StemV' => 86, + 'XHeight' => 502, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'Japan1', + 'Supplement' => '4', +); +$enc = 'UniJIS-UCS2-H'; + +$up = -75; +$ut = 50; + +$dw = 1000; +$cw = array( + 32 => 278, 33 => 299, 34 => 353, 35 => 614, 36 => 614, 37 => 721, 38 => 735, 39 => 216, 40 => 323, 41 => 323, + 42 => 449, 43 => 529, 44 => 219, 45 => 306, 46 => 219, 47 => 453, 48 => 614, 49 => 614, 50 => 614, 51 => 614, + 52 => 614, 53 => 614, 54 => 614, 55 => 614, 56 => 614, 57 => 614, 58 => 219, 59 => 219, 60 => 529, 61 => 529, + 62 => 529, 63 => 486, 64 => 744, 65 => 646, 66 => 604, 67 => 617, 68 => 681, 69 => 567, 70 => 537, 71 => 647, + 72 => 738, 73 => 320, 74 => 433, 75 => 637, 76 => 566, 77 => 904, 78 => 710, 79 => 716, 80 => 605, 81 => 716, + 82 => 623, 83 => 517, 84 => 601, 85 => 690, 86 => 668, 87 => 990, 88 => 681, 89 => 634, 90 => 578, 91 => 316, + 92 => 614, 93 => 316, 94 => 529, 95 => 500, 96 => 387, 97 => 509, 98 => 566, 99 => 478, 100 => 565, 101 => 503, + 102 => 337, 103 => 549, 104 => 580, 105 => 275, 106 => 266, 107 => 544, 108 => 276, 109 => 854, 110 => 579, 111 => 550, + 112 => 578, 113 => 566, 114 => 410, 115 => 444, 116 => 340, 117 => 575, 118 => 512, 119 => 760, 120 => 503, 121 => 529, + 122 => 453, 123 => 326, 124 => 380, 125 => 326, 126 => 387, 127 => 216, 128 => 453, 129 => 216, 130 => 380, 131 => 529, + 132 => 299, 133 => 614, 134 => 614, 135 => 265, 136 => 614, 137 => 475, 138 => 614, 139 => 353, 140 => 451, 141 => 291, + 142 => 291, 143 => 588, 144 => 589, 145 => 500, 146 => 476, 147 => 476, 148 => 219, 149 => 494, 150 => 452, 151 => 216, + 152 => 353, 153 => 353, 154 => 451, 156 => 1075, 157 => 486, 158 => 387, 159 => 387, 160 => 387, 161 => 387, + 162 => 387, 163 => 387, 164 => 387, 165 => 387, 166 => 387, 167 => 387, 168 => 387, 170 => 880, 171 => 448, + 172 => 566, 173 => 716, 174 => 903, 175 => 460, 176 => 805, 177 => 275, 178 => 276, 179 => 550, 180 => 886, 181 => 582, + 182 => 529, 183 => 738, 184 => 529, 185 => 738, 186 => 357, 187 => 529, 188 => 406, 189 => 406, 190 => 575, 191 => 406, + 192 => 934, 193 => 934, 194 => 934, 195 => 646, 196 => 646, 197 => 646, 198 => 646, 199 => 646, 200 => 646, 201 => 617, + 202 => 567, 203 => 567, 204 => 567, 205 => 567, 206 => 320, 207 => 320, 208 => 320, 209 => 320, 210 => 681, 211 => 710, + 212 => 716, 213 => 716, 214 => 716, 215 => 716, 216 => 716, 217 => 529, 218 => 690, 219 => 690, 220 => 690, 221 => 690, + 222 => 634, 223 => 605, 224 => 509, 225 => 509, 226 => 509, 227 => 509, 228 => 509, 229 => 509, 230 => 478, 231 => 503, + 232 => 503, 233 => 503, 234 => 503, 235 => 275, 236 => 275, 237 => 275, 238 => 275, 239 => 550, 240 => 579, 241 => 550, + 242 => 550, 243 => 550, 244 => 550, 245 => 550, 246 => 529, 247 => 575, 248 => 575, 249 => 575, 250 => 575, 251 => 529, + 252 => 578, 253 => 529, 254 => 517, 255 => 634, 256 => 578, 257 => 445, 258 => 444, 259 => 842, 260 => 453, 261 => 614, +); +$_cr = array( + array(231, 632, 500), // half-width + array(8718, 8718, 500), + array(9738, 9757, 250), // quarter-width + array(9758, 9778, 333), // third-width + array(12063, 12087, 500), +); +foreach($_cr as $_r) { + for($i = $_r[0]; $i <= $_r[1]; $i++) { + $cw[$i+31] = $_r[2]; + } +} +// --- EOF --- diff --git a/tcpdf/fonts/msungstdlight.php b/tcpdf/fonts/msungstdlight.php new file mode 100644 index 0000000..a71ea29 --- /dev/null +++ b/tcpdf/fonts/msungstdlight.php @@ -0,0 +1,38 @@ +<?php +$type = 'cidfont0'; +$name = 'MSungStd-Light-Acro'; +$displayname = 'MSung Light (Trad. Chinese)'; +$desc = array( + 'Ascent' => 880, + 'Descent' => -120, + 'CapHeight' => 880, + 'Flags' => 6, + 'FontBBox' => '[-160 -249 1015 1071]', + 'ItalicAngle' => 0, + 'StemV' => 93, +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'CNS1', + 'Supplement' => '3', +); +$enc = 'UniCNS-UCS2-H'; + +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 250, 33 => 250, 34 => 408, 35 => 668, 36 => 490, 37 => 875, 38 => 698, 39 => 250, 40 => 240, 41 => 240, + 42 => 417, 43 => 667, 44 => 250, 45 => 313, 46 => 250, 47 => 520, 48 => 500, 49 => 500, 50 => 500, 51 => 500, + 52 => 500, 53 => 500, 54 => 500, 55 => 500, 56 => 500, 57 => 500, 58 => 250, 59 => 250, 60 => 667, 61 => 667, + 62 => 667, 63 => 396, 64 => 921, 65 => 677, 66 => 615, 67 => 719, 68 => 760, 69 => 625, 70 => 552, 71 => 771, + 72 => 802, 73 => 354, 74 => 354, 75 => 781, 76 => 604, 77 => 927, 78 => 750, 79 => 823, 80 => 563, 81 => 823, + 82 => 729, 83 => 542, 84 => 698, 85 => 771, 86 => 729, 87 => 948, 88 => 771, 89 => 677, 90 => 635, 91 => 344, + 92 => 520, 93 => 344, 94 => 469, 95 => 500, 96 => 250, 97 => 469, 98 => 521, 99 => 427, 100 => 521, 101 => 438, + 102 => 271, 103 => 469, 104 => 531, 105 => 250, 106 => 250, 107 => 458, 108 => 240, 109 => 802, 110 => 531, 111 => 500, + 112 => 521, 113 => 521, 114 => 365, 115 => 333, 116 => 292, 117 => 521, 118 => 458, 119 => 677, 120 => 479, 121 => 458, + 122 => 427, 123 => 480, 124 => 496, 125 => 480, 126 => 667, + 17601 => 500, +); +// --- EOF --- diff --git a/tcpdf/fonts/pdfacourier.php b/tcpdf/fonts/pdfacourier.php new file mode 100644 index 0000000..9b843ec --- /dev/null +++ b/tcpdf/fonts/pdfacourier.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFACourier'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc='cp1252'; +$file='pdfacourier.z'; +$size1=5067; +$size2=35145; +$desc=array('Flags'=>33,'FontBBox'=>'[0 -200 600 794]','ItalicAngle'=>0,'Ascent'=>794,'Descent'=>-200,'Leading'=>0,'CapHeight'=>563,'XHeight'=>417,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/pdfacourier.z b/tcpdf/fonts/pdfacourier.z new file mode 100644 index 0000000..6b58f23 Binary files /dev/null and b/tcpdf/fonts/pdfacourier.z differ diff --git a/tcpdf/fonts/pdfacourierb.php b/tcpdf/fonts/pdfacourierb.php new file mode 100644 index 0000000..12e1b3b --- /dev/null +++ b/tcpdf/fonts/pdfacourierb.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFACourierBold'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc='cp1252'; +$file='pdfacourierb.z'; +$size1=5086; +$size2=37197; +$desc=array('Flags'=>262177,'FontBBox'=>'[-43 -200 630 800]','ItalicAngle'=>0,'Ascent'=>800,'Descent'=>-200,'Leading'=>0,'CapHeight'=>583,'XHeight'=>437,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/pdfacourierb.z b/tcpdf/fonts/pdfacourierb.z new file mode 100644 index 0000000..1dd80b4 Binary files /dev/null and b/tcpdf/fonts/pdfacourierb.z differ diff --git a/tcpdf/fonts/pdfacourierbi.php b/tcpdf/fonts/pdfacourierbi.php new file mode 100644 index 0000000..41c17da --- /dev/null +++ b/tcpdf/fonts/pdfacourierbi.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFACourierBoldOblique'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc='cp1252'; +$file='pdfacourierbi.z'; +$size1=5116; +$size2=42289; +$desc=array('Flags'=>262241,'FontBBox'=>'[-43 -200 735 800]','ItalicAngle'=>-12,'Ascent'=>800,'Descent'=>-200,'Leading'=>0,'CapHeight'=>583,'XHeight'=>437,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/pdfacourierbi.z b/tcpdf/fonts/pdfacourierbi.z new file mode 100644 index 0000000..97d3c95 Binary files /dev/null and b/tcpdf/fonts/pdfacourierbi.z differ diff --git a/tcpdf/fonts/pdfacourieri.php b/tcpdf/fonts/pdfacourieri.php new file mode 100644 index 0000000..d27bc90 --- /dev/null +++ b/tcpdf/fonts/pdfacourieri.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFACourierOblique'; +$up=-100; +$ut=50; +$dw=600; +$diff=''; +$enc='cp1252'; +$file='pdfacourieri.z'; +$size1=5100; +$size2=32883; +$desc=array('Flags'=>97,'FontBBox'=>'[-27 -200 710 783]','ItalicAngle'=>-12,'Ascent'=>783,'Descent'=>-200,'Leading'=>0,'CapHeight'=>563,'XHeight'=>417,'StemV'=>70,'StemH'=>30,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600); +$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600); +// --- EOF --- diff --git a/tcpdf/fonts/pdfacourieri.z b/tcpdf/fonts/pdfacourieri.z new file mode 100644 index 0000000..651d422 Binary files /dev/null and b/tcpdf/fonts/pdfacourieri.z differ diff --git a/tcpdf/fonts/pdfahelvetica.php b/tcpdf/fonts/pdfahelvetica.php new file mode 100644 index 0000000..6fdef5a --- /dev/null +++ b/tcpdf/fonts/pdfahelvetica.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFAHelvetica'; +$up=-151; +$ut=50; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfahelvetica.z'; +$size1=5081; +$size2=22907; +$desc=array('Flags'=>32,'FontBBox'=>'[-22 -220 1001 966]','ItalicAngle'=>0,'Ascent'=>966,'Descent'=>-220,'Leading'=>0,'CapHeight'=>709,'XHeight'=>524,'StemV'=>70,'StemH'=>30,'AvgWidth'=>543,'MaxWidth'=>1015,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>500,128=>655,129=>500,130=>222,131=>278,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>250,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>222,146=>221,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>250,156=>938,157=>500,158=>500,159=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448,188=>869,189=>869,190=>879,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>896,231=>500,232=>556,233=>556,234=>556,235=>556,236=>251,237=>251,238=>251,239=>251,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/pdfahelvetica.z b/tcpdf/fonts/pdfahelvetica.z new file mode 100644 index 0000000..6550a1d Binary files /dev/null and b/tcpdf/fonts/pdfahelvetica.z differ diff --git a/tcpdf/fonts/pdfahelveticab.php b/tcpdf/fonts/pdfahelveticab.php new file mode 100644 index 0000000..3968150 --- /dev/null +++ b/tcpdf/fonts/pdfahelveticab.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFAHelveticaBold'; +$up=-155; +$ut=69; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfahelveticab.z'; +$size1=5098; +$size2=23246; +$desc=array('Flags'=>262176,'FontBBox'=>'[-22 -220 1003 949]','ItalicAngle'=>0,'Ascent'=>949,'Descent'=>-220,'Leading'=>0,'CapHeight'=>724,'XHeight'=>540,'StemV'=>70,'StemH'=>30,'AvgWidth'=>565,'MaxWidth'=>1000,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>500,128=>640,129=>500,130=>278,131=>333,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>953,157=>500,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>351,179=>351,180=>333,181=>611,182=>556,183=>278,184=>333,185=>300,186=>365,187=>556,188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556); +// --- EOF --- diff --git a/tcpdf/fonts/pdfahelveticab.z b/tcpdf/fonts/pdfahelveticab.z new file mode 100644 index 0000000..49f6093 Binary files /dev/null and b/tcpdf/fonts/pdfahelveticab.z differ diff --git a/tcpdf/fonts/pdfahelveticabi.php b/tcpdf/fonts/pdfahelveticabi.php new file mode 100644 index 0000000..2822fd2 --- /dev/null +++ b/tcpdf/fonts/pdfahelveticabi.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFAHelveticaBoldOblique'; +$up=-111; +$ut=69; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfahelveticabi.z'; +$size1=5129; +$size2=30559; +$desc=array('Flags'=>262240,'FontBBox'=>'[-65 -220 1107 953]','ItalicAngle'=>-12,'Ascent'=>953,'Descent'=>-220,'Leading'=>0,'CapHeight'=>724,'XHeight'=>540,'StemV'=>70,'StemH'=>30,'AvgWidth'=>565,'MaxWidth'=>1000,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>500,128=>640,129=>500,130=>278,131=>333,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>962,157=>500,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>667,182=>556,183=>278,184=>333,185=>248,186=>365,187=>556,188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>892,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556); +// --- EOF --- diff --git a/tcpdf/fonts/pdfahelveticabi.z b/tcpdf/fonts/pdfahelveticabi.z new file mode 100644 index 0000000..b97eaeb Binary files /dev/null and b/tcpdf/fonts/pdfahelveticabi.z differ diff --git a/tcpdf/fonts/pdfahelveticai.php b/tcpdf/fonts/pdfahelveticai.php new file mode 100644 index 0000000..ff0915d --- /dev/null +++ b/tcpdf/fonts/pdfahelveticai.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFAHelveticaOblique'; +$up=-151; +$ut=50; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfahelveticai.z'; +$size1=5112; +$size2=26708; +$desc=array('Flags'=>96,'FontBBox'=>'[-65 -218 1108 970]','ItalicAngle'=>-12,'Ascent'=>970,'Descent'=>-218,'Leading'=>0,'CapHeight'=>709,'XHeight'=>524,'StemV'=>70,'StemH'=>30,'AvgWidth'=>544,'MaxWidth'=>1015,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>500,128=>655,129=>500,130=>222,131=>278,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>250,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>250,156=>937,157=>500,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>444,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>352,179=>352,180=>333,181=>556,182=>537,183=>278,184=>333,185=>250,186=>365,187=>444,188=>947,189=>947,190=>947,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>897,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/pdfahelveticai.z b/tcpdf/fonts/pdfahelveticai.z new file mode 100644 index 0000000..ac0bc56 Binary files /dev/null and b/tcpdf/fonts/pdfahelveticai.z differ diff --git a/tcpdf/fonts/pdfasymbol.php b/tcpdf/fonts/pdfasymbol.php new file mode 100644 index 0000000..0af8051 --- /dev/null +++ b/tcpdf/fonts/pdfasymbol.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFASymbol'; +$up=-100; +$ut=50; +$dw=500; +$diff='32 /space /exclam /universal /numbersign /existential /percent /ampersand /suchthat /parenleft /parenright /asteriskmath /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /congruent /Alpha /Beta /Chi /Delta /Epsilon /Phi /Gamma /Eta /Iota /theta1 /Kappa /Lambda /Mu /Nu /Omicron /Pi /Theta /Rho /Sigma /Tau /Upsilon /sigma1 /Omega /Xi /Psi /Zeta /bracketleft /therefore /bracketright /perpendicular /underscore /radicalex /alpha /beta /chi /delta /epsilon /phi /gamma /eta /iota /phi1 /kappa /lambda /mu /nu /omicron /pi /theta /rho /sigma /tau /upsilon /omega1 /omega /xi /psi /zeta /braceleft /bar /braceright /similar /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /Euro /Upsilon1 /minute /lessequal /fraction /infinity /florin /club /diamond /heart /spade /arrowboth /arrowleft /arrowup /arrowright /arrowdown /degree /plusminus /second /greaterequal /multiply /proportional /partialdiff /bullet /divide /notequal /equivalence /approxequal /ellipsis /arrowvertex /arrowhorizex /carriagereturn /aleph /Ifraktur /Rfraktur /weierstrass /circlemultiply /circleplus /emptyset /intersection /union /propersuperset /reflexsuperset /notsubset /propersubset /reflexsubset /element /notelement /angle /gradient /registerserif /copyrightserif /trademarkserif /product /radical /dotmath /logicalnot /logicaland /logicalor /arrowdblboth /arrowdblleft /arrowdblup /arrowdblright /arrowdbldown /lozenge /angleleft /registersans /copyrightsans /trademarksans /summation /parenlefttp /parenleftex /parenleftbt /bracketlefttp /bracketleftex /bracketleftbt /bracelefttp /braceleftmid /braceleftbt /braceex /.notdef /angleright /integral /integraltp /integralex /integralbt /parenrighttp /parenrightex /parenrightbt /bracketrighttp /bracketrightex /bracketrightbt /bracerighttp /bracerightmid /bracerightbt /.notdef '; +$enc='symbol'; +$file='pdfasymbol.z'; +$size1=4188; +$size2=28326; +$desc=array('Flags'=>4,'FontBBox'=>'[-168 -233 997 900]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-233,'Leading'=>0,'CapHeight'=>661,'XHeight'=>460,'StemV'=>70,'StemH'=>30,'AvgWidth'=>578,'MaxWidth'=>1008,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>250,33=>333,34=>587,35=>500,36=>587,37=>833,38=>778,39=>439,40=>333,41=>333,42=>471,43=>564,44=>250,45=>564,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,62=>564,63=>444,64=>636,65=>722,66=>667,67=>722,68=>660,69=>611,70=>742,71=>586,72=>722,73=>333,74=>587,75=>722,76=>722,77=>889,78=>722,79=>722,80=>722,81=>726,82=>556,83=>627,84=>611,85=>696,86=>452,87=>743,88=>628,89=>808,90=>611,91=>333,92=>565,93=>333,94=>712,95=>500,96=>500,97=>583,98=>527,99=>480,100=>534,101=>426,102=>643,103=>480,104=>536,105=>286,106=>640,107=>544,108=>476,109=>536,110=>480,111=>500,112=>587,113=>534,114=>528,115=>537,116=>420,117=>514,118=>684,119=>693,120=>514,121=>693,122=>466,123=>480,124=>200,125=>480,126=>636,127=>500,128=>500,129=>500,130=>500,131=>500,132=>500,133=>500,134=>500,135=>500,136=>500,137=>500,138=>500,139=>500,140=>500,141=>500,142=>500,143=>500,144=>500,145=>500,146=>500,147=>500,148=>500,149=>500,150=>500,151=>500,152=>500,153=>500,154=>500,155=>500,156=>500,157=>500,158=>500,159=>500,160=>500,161=>620,162=>247,163=>636,164=>167,165=>853,166=>358,167=>770,168=>770,169=>770,170=>770,171=>964,172=>964,173=>472,174=>964,175=>500,176=>400,177=>564,178=>411,179=>636,180=>564,181=>636,182=>494,183=>350,184=>564,185=>564,186=>636,187=>636,188=>1000,189=>500,190=>500,191=>658,192=>537,193=>613,194=>711,195=>832,196=>636,197=>636,198=>746,199=>654,200=>654,201=>636,202=>636,203=>636,204=>636,205=>636,206=>536,207=>536,208=>575,209=>612,210=>792,211=>793,212=>1008,213=>823,214=>549,215=>250,216=>564,217=>564,218=>564,219=>964,220=>964,221=>550,222=>964,223=>550,224=>512,225=>329,226=>500,227=>500,228=>500,229=>713,230=>500,231=>500,232=>500,233=>500,234=>500,235=>500,236=>500,237=>500,238=>500,239=>500,240=>500,241=>329,242=>416,243=>686,244=>500,245=>686,246=>500,247=>500,248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>500,255=>333); +// --- EOF --- diff --git a/tcpdf/fonts/pdfasymbol.z b/tcpdf/fonts/pdfasymbol.z new file mode 100644 index 0000000..f7f8651 Binary files /dev/null and b/tcpdf/fonts/pdfasymbol.z differ diff --git a/tcpdf/fonts/pdfatimes.php b/tcpdf/fonts/pdfatimes.php new file mode 100644 index 0000000..49de77b --- /dev/null +++ b/tcpdf/fonts/pdfatimes.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFATimes'; +$up=-100; +$ut=50; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfatimes.z'; +$size1=5061; +$size2=36652; +$desc=array('Flags'=>32,'FontBBox'=>'[-70 -218 1000 900]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-218,'Leading'=>0,'CapHeight'=>662,'XHeight'=>450,'StemV'=>70,'StemH'=>30,'AvgWidth'=>517,'MaxWidth'=>1008,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333,92=>296,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541,127=>500,128=>741,129=>500,130=>250,131=>358,132=>444,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>250,140=>889,141=>500,142=>611,143=>500,144=>500,145=>250,146=>250,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>1008,154=>389,155=>250,156=>709,157=>500,158=>444,159=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>793,170=>276,171=>444,172=>564,173=>333,174=>792,175=>333,176=>400,177=>564,178=>320,179=>320,180=>333,181=>500,182=>483,183=>250,184=>333,185=>320,186=>310,187=>441,188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722,218=>722,219=>722,220=>722,221=>722,222=>576,223=>500,224=>444,225=>444,226=>444,227=>444,228=>444,229=>444,230=>651,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>501,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>496,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/pdfatimes.z b/tcpdf/fonts/pdfatimes.z new file mode 100644 index 0000000..3aed832 Binary files /dev/null and b/tcpdf/fonts/pdfatimes.z differ diff --git a/tcpdf/fonts/pdfatimesb.php b/tcpdf/fonts/pdfatimesb.php new file mode 100644 index 0000000..837a5d9 --- /dev/null +++ b/tcpdf/fonts/pdfatimesb.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFATimesBold'; +$up=-100; +$ut=50; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfatimesb.z'; +$size1=5079; +$size2=35781; +$desc=array('Flags'=>262176,'FontBBox'=>'[-107 -218 1065 900]','ItalicAngle'=>0,'Ascent'=>900,'Descent'=>-218,'Leading'=>0,'CapHeight'=>676,'XHeight'=>461,'StemV'=>70,'StemH'=>30,'AvgWidth'=>544,'MaxWidth'=>1086,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333,42=>507,43=>676,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>676,61=>676,62=>676,63=>500,64=>930,65=>722,66=>667,67=>722,68=>724,69=>667,70=>611,71=>778,72=>774,73=>386,74=>500,75=>764,76=>664,77=>943,78=>722,79=>778,80=>611,81=>778,82=>712,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>546,99=>444,100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500,112=>549,113=>547,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520,127=>500,128=>761,129=>500,130=>250,131=>333,132=>500,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>1000,141=>500,142=>667,143=>500,144=>500,145=>250,146=>250,147=>500,148=>500,149=>524,150=>500,151=>1000,152=>333,153=>1086,154=>389,155=>333,156=>717,157=>500,158=>444,159=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500,172=>680,173=>333,174=>747,175=>333,176=>400,177=>676,178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>270,186=>330,187=>500,188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>676,216=>778,217=>722,218=>722,219=>722,220=>722,221=>722,222=>632,223=>556,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>703,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>676,248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/pdfatimesb.z b/tcpdf/fonts/pdfatimesb.z new file mode 100644 index 0000000..abaef66 Binary files /dev/null and b/tcpdf/fonts/pdfatimesb.z differ diff --git a/tcpdf/fonts/pdfatimesbi.php b/tcpdf/fonts/pdfatimesbi.php new file mode 100644 index 0000000..52eeff2 --- /dev/null +++ b/tcpdf/fonts/pdfatimesbi.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFATimesBoldItalic'; +$up=-100; +$ut=50; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfatimesbi.z'; +$size1=5108; +$size2=38307; +$desc=array('Flags'=>262240,'FontBBox'=>'[-200 -218 1121 900]','ItalicAngle'=>-15,'Ascent'=>900,'Descent'=>-218,'Leading'=>0,'CapHeight'=>669,'XHeight'=>462,'StemV'=>70,'StemH'=>30,'AvgWidth'=>525,'MaxWidth'=>1086,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>744,69=>670,70=>656,71=>722,72=>778,73=>393,74=>500,75=>664,76=>609,77=>896,78=>722,79=>722,80=>614,81=>722,82=>672,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570,127=>500,128=>761,129=>500,130=>250,131=>333,132=>500,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>944,141=>500,142=>611,143=>500,144=>500,145=>250,146=>250,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1086,154=>389,155=>333,156=>711,157=>500,158=>389,159=>611,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>272,186=>300,187=>500,188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722,218=>722,219=>722,220=>722,221=>611,222=>609,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>703,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444); +// --- EOF --- diff --git a/tcpdf/fonts/pdfatimesbi.z b/tcpdf/fonts/pdfatimesbi.z new file mode 100644 index 0000000..4cbbfdc Binary files /dev/null and b/tcpdf/fonts/pdfatimesbi.z differ diff --git a/tcpdf/fonts/pdfatimesi.php b/tcpdf/fonts/pdfatimesi.php new file mode 100644 index 0000000..4d15e94 --- /dev/null +++ b/tcpdf/fonts/pdfatimesi.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFATimesItalic'; +$up=-100; +$ut=50; +$dw=500; +$diff=''; +$enc='cp1252'; +$file='pdfatimesi.z'; +$size1=5091; +$size2=33525; +$desc=array('Flags'=>96,'FontBBox'=>'[-168 -217 1053 900]','ItalicAngle'=>-15,'Ascent'=>900,'Descent'=>-217,'Leading'=>0,'CapHeight'=>653,'XHeight'=>441,'StemV'=>70,'StemH'=>30,'AvgWidth'=>511,'MaxWidth'=>1000,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>604,70=>611,71=>722,72=>722,73=>339,74=>444,75=>652,76=>556,77=>828,78=>657,79=>722,80=>603,81=>722,82=>616,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541,127=>500,128=>741,129=>500,130=>250,131=>278,132=>444,133=>889,134=>500,135=>500,136=>333,137=>1000,138=>500,139=>250,140=>944,141=>500,142=>556,143=>500,144=>500,145=>250,146=>250,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>920,154=>389,155=>250,156=>694,157=>500,158=>389,159=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>444,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>250,186=>310,187=>444,188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>673,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444); +// --- EOF --- diff --git a/tcpdf/fonts/pdfatimesi.z b/tcpdf/fonts/pdfatimesi.z new file mode 100644 index 0000000..b13b1fa Binary files /dev/null and b/tcpdf/fonts/pdfatimesi.z differ diff --git a/tcpdf/fonts/pdfazapfdingbats.php b/tcpdf/fonts/pdfazapfdingbats.php new file mode 100644 index 0000000..2e22503 --- /dev/null +++ b/tcpdf/fonts/pdfazapfdingbats.php @@ -0,0 +1,15 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='Type1'; +$name='PDFAZapfdingbats'; +$up=-100; +$ut=50; +$dw=500; +$diff=''; +$enc=''; +$file='pdfazapfdingbats.z'; +$size1=5065; +$size2=48653; +$desc=array('Flags'=>4,'FontBBox'=>'[-1 -218 945 805]','ItalicAngle'=>0,'Ascent'=>805,'Descent'=>-218,'Leading'=>0,'CapHeight'=>700,'XHeight'=>450,'StemV'=>70,'StemH'=>30,'AvgWidth'=>744,'MaxWidth'=>980,'MissingWidth'=>500); +$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>250,33=>974,34=>961,35=>974,36=>980,37=>715,38=>789,39=>790,40=>791,41=>690,42=>954,43=>933,44=>549,45=>855,46=>911,47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677,57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786,67=>788,68=>788,69=>790,70=>793,71=>794,72=>811,73=>823,74=>789,75=>841,76=>823,77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695,87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815,97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713,106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759,115=>892,116=>892,117=>788,118=>784,119=>791,120=>138,121=>277,122=>415,123=>392,124=>392,125=>668,126=>668,127=>500,128=>390,129=>390,130=>317,131=>317,132=>276,133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334,142=>500,143=>500,144=>500,145=>500,146=>500,147=>500,148=>500,149=>500,150=>500,151=>500,152=>500,153=>500,154=>500,155=>500,156=>500,157=>500,158=>500,159=>500,160=>250,161=>732,162=>544,163=>544,164=>910,165=>667,166=>760,167=>760,168=>770,169=>770,170=>770,171=>770,172=>788,173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788,182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788,191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788,200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788,209=>788,210=>788,211=>788,212=>894,213=>964,214=>964,215=>499,216=>748,217=>924,218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924,227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867,236=>867,237=>696,238=>696,239=>874,240=>501,241=>874,242=>760,243=>946,244=>771,245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970,254=>918,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/pdfazapfdingbats.z b/tcpdf/fonts/pdfazapfdingbats.z new file mode 100644 index 0000000..61c9a47 Binary files /dev/null and b/tcpdf/fonts/pdfazapfdingbats.z differ diff --git a/tcpdf/fonts/stsongstdlight.php b/tcpdf/fonts/stsongstdlight.php new file mode 100644 index 0000000..1c74c62 --- /dev/null +++ b/tcpdf/fonts/stsongstdlight.php @@ -0,0 +1,39 @@ +<?php +$type = 'cidfont0'; +$name = 'STSongStd-Light-Acro'; +$displayname = 'STSong Light (Simp. Chinese)'; +$desc = array( + 'Ascent' => 752, + 'Descent' => -271, + 'CapHeight' => 737, + 'Flags' => 6, + 'FontBBox' => '[-25 -254 1000 880]', + 'ItalicAngle' => 0, + 'StemV' => 58, + 'Style' => '<< /Panose <000000000400000000000000> >>', +); +$cidinfo = array( + 'Registry' => 'Adobe', + 'Ordering' => 'GB1', + 'Supplement' => '2', +); +$enc = 'UniGB-UCS2-H'; + +// underline position, needs checking: +$up = -130; +$ut = 40; + +$dw = 1000; +$cw = array( + 32 => 207, 33 => 270, 34 => 342, 35 => 467, 36 => 462, 37 => 797, 38 => 710, 39 => 239, 40 => 374, 41 => 374, + 42 => 423, 43 => 605, 44 => 238, 45 => 375, 46 => 238, 47 => 334, 48 => 462, 49 => 462, 50 => 462, 51 => 462, + 52 => 462, 53 => 462, 54 => 462, 55 => 462, 56 => 462, 57 => 462, 58 => 238, 59 => 238, 60 => 605, 61 => 605, + 62 => 605, 63 => 344, 64 => 748, 65 => 684, 66 => 560, 67 => 695, 68 => 739, 69 => 563, 70 => 511, 71 => 729, + 72 => 793, 73 => 318, 74 => 312, 75 => 666, 76 => 526, 77 => 896, 78 => 758, 79 => 772, 80 => 544, 81 => 772, + 82 => 628, 83 => 465, 84 => 607, 85 => 753, 86 => 711, 87 => 972, 88 => 647, 89 => 620, 90 => 607, 91 => 374, + 92 => 333, 93 => 374, 94 => 606, 95 => 500, 96 => 239, 97 => 417, 98 => 503, 99 => 427, 100 => 529, 101 => 415, + 102 => 264, 103 => 444, 104 => 518, 105 => 241, 106 => 230, 107 => 495, 108 => 228, 109 => 793, 110 => 527, 111 => 524, + 112 => 524, 113 => 504, 114 => 338, 115 => 336, 116 => 277, 117 => 517, 118 => 450, 119 => 652, 120 => 466, 121 => 452, + 122 => 407, 123 => 370, 124 => 258, 125 => 370, 126 => 605 +); +// --- EOF --- diff --git a/tcpdf/fonts/symbol.php b/tcpdf/fonts/symbol.php new file mode 100644 index 0000000..15f7f1d --- /dev/null +++ b/tcpdf/fonts/symbol.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Symbol'; +$up=-100; +$ut=50; +$dw=587; +$diff=''; +$enc=''; +$desc=array('Flags'=>4,'FontBBox'=>'[-180 -293 1090 1010]','ItalicAngle'=>0,'Ascent'=>1010,'Descent'=>-293,'Leading'=>0,'CapHeight'=>1010,'StemV'=>85,'StemH'=>92,'AvgWidth'=>587,'MaxWidth'=>1042,'MissingWidth'=>587); +$cw=array(0=>587,1=>587,2=>587,3=>587,4=>587,5=>587,6=>587,7=>587,8=>587,9=>587,10=>587,11=>587,12=>587,13=>587,14=>587,15=>587,16=>587,17=>587,18=>587,19=>587,20=>587,21=>587,22=>587,23=>587,24=>587,25=>587,26=>587,27=>587,28=>587,29=>587,30=>587,31=>587,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439,40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611,70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722,80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795,90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549,100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549,109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576,118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549,127=>587,128=>587,129=>587,130=>587,131=>587,132=>587,133=>587,134=>587,135=>587,136=>587,137=>587,138=>587,139=>587,140=>587,141=>587,142=>587,143=>587,144=>587,145=>587,146=>587,147=>587,148=>587,149=>587,150=>587,151=>587,152=>587,153=>587,154=>587,155=>587,156=>587,157=>587,158=>587,159=>587,160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753,169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549,178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549,187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987,196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713,205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823,214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987,223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384,232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>587,241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384,250=>384,251=>384,252=>494,253=>494,254=>494,255=>587); +// --- EOF --- diff --git a/tcpdf/fonts/times.php b/tcpdf/fonts/times.php new file mode 100644 index 0000000..cfcaf06 --- /dev/null +++ b/tcpdf/fonts/times.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Times-Roman'; +$up=-100; +$ut=50; +$dw=495; +$diff=''; +$enc=''; +$desc=array('Flags'=>32,'FontBBox'=>'[-168 -218 1000 898]','ItalicAngle'=>0,'Ascent'=>898,'Descent'=>-218,'Leading'=>0,'CapHeight'=>662,'XHeight'=>450,'StemV'=>84,'StemH'=>28,'AvgWidth'=>495,'MaxWidth'=>1000,'MissingWidth'=>495); +$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333,92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541,127=>350,128=>500,129=>350,130=>333,131=>500,132=>444,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>889,141=>350,142=>611,143=>350,144=>350,145=>333,146=>333,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>980,154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>760,170=>276,171=>500,172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,178=>300,179=>300,180=>333,181=>500,182=>453,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722,218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444,226=>444,227=>444,228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>500,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/timesb.php b/tcpdf/fonts/timesb.php new file mode 100644 index 0000000..9c41a7b --- /dev/null +++ b/tcpdf/fonts/timesb.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Times-Bold'; +$up=-100; +$ut=50; +$dw=516; +$diff=''; +$enc=''; +$desc=array('Flags'=>32,'FontBBox'=>'[-168 -218 1000 935]','ItalicAngle'=>0,'Ascent'=>935,'Descent'=>-218,'Leading'=>0,'CapHeight'=>676,'XHeight'=>461,'StemV'=>139,'StemH'=>44,'AvgWidth'=>516,'MaxWidth'=>1000,'MissingWidth'=>516); +$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,62=>570,63=>500,64=>930,65=>722,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>778,73=>389,74=>500,75=>778,76=>667,77=>944,78=>722,79=>778,80=>611,81=>778,82=>722,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444,100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500,112=>556,113=>556,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520,127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>1000,141=>350,142=>667,143=>350,144=>350,145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500,172=>570,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>300,186=>330,187=>500,188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>570,216=>778,217=>722,218=>722,219=>722,220=>722,221=>722,222=>611,223=>556,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500); +// --- EOF --- diff --git a/tcpdf/fonts/timesbi.php b/tcpdf/fonts/timesbi.php new file mode 100644 index 0000000..4feed74 --- /dev/null +++ b/tcpdf/fonts/timesbi.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Times-BoldItalic'; +$up=-100; +$ut=50; +$dw=501; +$diff=''; +$enc=''; +$desc=array('Flags'=>96,'FontBBox'=>'[-200 -218 996 921]','ItalicAngle'=>-15,'Ascent'=>921,'Descent'=>-218,'Leading'=>0,'CapHeight'=>669,'XHeight'=>462,'StemV'=>121,'StemH'=>42,'AvgWidth'=>501,'MaxWidth'=>1000,'MissingWidth'=>501); +$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>722,69=>667,70=>667,71=>722,72=>778,73=>389,74=>500,75=>667,76=>611,77=>889,78=>722,79=>722,80=>611,81=>722,82=>667,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570,127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,136=>333,137=>1000,138=>556,139=>333,140=>944,141=>350,142=>611,143=>350,144=>350,145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,154=>389,155=>333,156=>722,157=>350,158=>389,159=>611,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>300,186=>300,187=>500,188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722,218=>722,219=>722,220=>722,221=>611,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444); +// --- EOF --- diff --git a/tcpdf/fonts/timesi.php b/tcpdf/fonts/timesi.php new file mode 100644 index 0000000..1e8b673 --- /dev/null +++ b/tcpdf/fonts/timesi.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='Times-Italic'; +$up=-100; +$ut=50; +$dw=491; +$diff=''; +$enc=''; +$desc=array('Flags'=>96,'FontBBox'=>'[-169 -217 1010 883]','ItalicAngle'=>-15.5,'Ascent'=>883,'Descent'=>-217,'Leading'=>0,'CapHeight'=>653,'XHeight'=>441,'StemV'=>76,'StemH'=>32,'AvgWidth'=>491,'MaxWidth'=>1000,'MissingWidth'=>491); +$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,30=>250,31=>250,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>611,70=>611,71=>722,72=>722,73=>333,74=>444,75=>667,76=>556,77=>833,78=>667,79=>722,80=>611,81=>722,82=>611,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541,127=>350,128=>500,129=>350,130=>333,131=>500,132=>556,133=>889,134=>500,135=>500,136=>333,137=>1000,138=>500,139=>333,140=>944,141=>350,142=>556,143=>350,144=>350,145=>333,146=>333,147=>556,148=>556,149=>350,150=>500,151=>889,152=>333,153=>980,154=>389,155=>333,156=>667,157=>350,158=>389,159=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>500,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444); +// --- EOF --- diff --git a/tcpdf/fonts/uni2cid_ac15.php b/tcpdf/fonts/uni2cid_ac15.php new file mode 100644 index 0000000..42c588d --- /dev/null +++ b/tcpdf/fonts/uni2cid_ac15.php @@ -0,0 +1,6 @@ +<?php +// unicode to cid conversion table is from +// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ +// cid2code.txt in ag15.tar.Z +$cidinfo['uni2cid'] = array(32=>1,33=>2,34=>3,35=>4,36=>5,37=>6,38=>7,39=>8,40=>9,41=>10,42=>11,43=>12,44=>13,45=>14,46=>15,47=>16,48=>17,49=>18,50=>19,51=>20,52=>21,53=>22,54=>23,55=>24,56=>25,57=>26,58=>27,59=>28,60=>29,61=>30,62=>31,63=>32,64=>33,65=>34,66=>35,67=>36,68=>37,69=>38,70=>39,71=>40,72=>41,73=>42,74=>43,75=>44,76=>45,77=>46,78=>47,79=>48,80=>49,81=>50,82=>51,83=>52,84=>53,85=>54,86=>55,87=>56,88=>57,89=>58,90=>59,91=>60,92=>61,93=>62,94=>63,95=>64,96=>65,97=>66,98=>67,99=>68,100=>69,101=>70,102=>71,103=>72,104=>73,105=>74,106=>75,107=>76,108=>77,109=>78,110=>79,111=>80,112=>81,113=>82,114=>83,115=>84,116=>85,117=>86,118=>87,119=>88,120=>89,121=>90,122=>91,123=>92,124=>93,125=>94,126=>95,12288=>99,65292=>100,12289=>101,12290=>102,65294=>103,8226=>104,8231=>104,65307=>105,65306=>106,65311=>107,65281=>108,65072=>109,8230=>110,8943=>110,8229=>111,65104=>112,65380=>113,65105=>113,65106=>114,183=>115,65108=>116,65109=>117,65110=>118,65111=>119,65372=>120,8211=>121,65073=>122,8212=>123,65288=>128,65289=>129,65077=>130,65078=>131,65371=>132,65373=>133,65079=>134,65080=>135,12308=>136,12309=>137,65081=>138,65082=>139,12304=>140,12305=>141,65083=>142,65084=>143,12298=>144,12299=>145,65085=>146,65086=>147,12296=>148,12297=>149,65087=>150,65088=>151,12300=>152,12301=>153,65089=>154,65090=>155,12302=>156,12303=>157,65091=>158,65092=>159,65113=>160,65114=>161,65115=>162,65116=>163,65117=>164,65118=>165,8216=>166,8217=>167,8220=>168,8221=>169,12317=>170,12318=>171,8245=>172,8242=>173,65283=>174,65286=>175,65290=>176,8251=>177,167=>178,12291=>179,9675=>180,9679=>181,9651=>182,9650=>183,9678=>184,9734=>185,9733=>186,9671=>187,9670=>188,9633=>189,9632=>190,9661=>191,9660=>192,12963=>193,8453=>194,175=>195,772=>195,8254=>195,65507=>196,65343=>197,717=>198,65097=>199,65098=>200,65101=>201,65102=>202,65099=>203,65100=>204,65119=>205,65120=>206,65121=>207,65291=>208,65293=>209,215=>210,247=>211,177=>212,8730=>213,65308=>214,65310=>215,65309=>216,8806=>217,8807=>218,8800=>219,8734=>220,8786=>221,8801=>222,65122=>223,65123=>224,65124=>225,65125=>226,65126=>227,8764=>228,65374=>228,8745=>229,8746=>230,8869=>231,8736=>232,8735=>233,8895=>234,13266=>235,13265=>236,8747=>237,8750=>238,8757=>239,8756=>240,9792=>241,9794=>242,8853=>243,9793=>243,8857=>244,9737=>244,8593=>245,8595=>246,8594=>247,8592=>248,8598=>249,8599=>250,8601=>251,8600=>252,8741=>253,8739=>254,8725=>257,65295=>257,65128=>258,65340=>258,65284=>259,165=>260,65509=>260,12306=>261,162=>262,65504=>262,163=>263,65505=>263,65285=>264,65312=>265,8451=>266,8457=>267,65129=>268,65130=>269,65131=>270,13269=>271,13212=>272,13213=>273,13214=>274,13262=>275,13217=>276,13198=>277,13199=>278,13252=>279,176=>280,20825=>281,58834=>281,20827=>282,58835=>282,20830=>283,58837=>283,20829=>284,58836=>284,20833=>285,20835=>286,21991=>287,29929=>288,58044=>288,31950=>289,58191=>289,9601=>290,9602=>291,9603=>292,9604=>293,9605=>294,9606=>295,9607=>296,9608=>297,9615=>298,9614=>299,9613=>300,9612=>301,9611=>302,9610=>303,9609=>304,9532=>305,9524=>306,9516=>307,9508=>308,9500=>309,9620=>310,9472=>311,9474=>312,9621=>313,9484=>314,9488=>315,9492=>316,9496=>317,9581=>318,9582=>319,9584=>320,9583=>321,9552=>322,9566=>323,9578=>324,9569=>325,9698=>326,9699=>327,9701=>328,9700=>329,9585=>330,9586=>331,9587=>332,65296=>333,65297=>334,65298=>335,65299=>336,65300=>337,65301=>338,65302=>339,65303=>340,65304=>341,65305=>342,8544=>343,8545=>344,8546=>345,8547=>346,8548=>347,8549=>348,8550=>349,8551=>350,8552=>351,8553=>352,12321=>353,12322=>354,12323=>355,12324=>356,12325=>357,12326=>358,12327=>359,12328=>360,12329=>361,12344=>362,21316=>363,57443=>363,12345=>363,12346=>364,65313=>365,65314=>366,65315=>367,65316=>368,65317=>369,65318=>370,65319=>371,65320=>372,65321=>373,65322=>374,65323=>375,65324=>376,65325=>377,65326=>378,65327=>379,65328=>380,65329=>381,65330=>382,65331=>383,65332=>384,65333=>385,65334=>386,65335=>387,65336=>388,65337=>389,65338=>390,65345=>391,65346=>392,65347=>393,65348=>394,65349=>395,65350=>396,65351=>397,65352=>398,65353=>399,65354=>400,65355=>401,65356=>402,65357=>403,65358=>404,65359=>405,65360=>406,65361=>407,65362=>408,65363=>409,65364=>410,65365=>411,65366=>412,65367=>413,65368=>414,65369=>415,65370=>416,913=>417,914=>418,915=>419,916=>420,917=>421,918=>422,919=>423,920=>424,921=>425,922=>426,923=>427,924=>428,925=>429,926=>430,927=>431,928=>432,929=>433,931=>434,932=>435,933=>436,934=>437,935=>438,936=>439,937=>440,945=>441,946=>442,947=>443,948=>444,949=>445,950=>446,951=>447,952=>448,953=>449,954=>450,955=>451,956=>452,957=>453,958=>454,959=>455,960=>456,961=>457,963=>458,964=>459,965=>460,966=>461,967=>462,968=>463,969=>464,12549=>465,12550=>466,12551=>467,12552=>468,12553=>469,12554=>470,12555=>471,12556=>472,12557=>473,12558=>474,12559=>475,12560=>476,12561=>477,12562=>478,12563=>479,12564=>480,12565=>481,12566=>482,12567=>483,12568=>484,12569=>485,12570=>486,12571=>487,12572=>488,12573=>489,12574=>490,12575=>491,12576=>492,12577=>493,12578=>494,12579=>495,12580=>496,12581=>497,12582=>498,12583=>499,12584=>500,12585=>501,729=>502,714=>503,711=>504,780=>504,715=>505,9312=>506,63153=>506,9313=>507,63154=>507,9314=>508,63155=>508,9315=>509,63156=>509,9316=>510,63157=>510,9317=>511,63158=>511,9318=>512,63159=>512,9319=>513,63160=>513,9320=>514,63161=>514,9321=>515,63162=>515,9332=>516,63163=>516,9333=>517,63164=>517,9334=>518,63165=>518,9335=>519,63166=>519,9336=>520,63167=>520,9337=>521,63168=>521,9338=>522,63169=>522,9339=>523,63170=>523,9340=>524,63171=>524,9341=>525,63172=>525,8560=>526,63173=>526,8561=>527,63174=>527,8562=>528,63175=>528,8563=>529,63176=>529,8564=>530,63177=>530,8565=>531,63178=>531,8566=>532,63179=>532,8567=>533,63180=>533,8568=>534,63181=>534,8569=>535,63182=>535,20008=>536,12033=>536,20022=>537,12034=>537,63183=>537,20031=>538,12035=>538,63184=>538,12037=>539,20101=>539,63185=>539,12039=>540,20128=>540,63186=>540,20866=>541,12044=>541,63187=>541,20886=>542,12045=>542,63188=>542,20907=>543,12046=>543,63189=>543,12051=>544,21241=>544,63190=>544,12054=>545,21304=>545,63191=>545,12057=>546,21353=>546,63192=>546,12059=>547,21430=>547,63193=>547,12065=>548,12066=>548,22786=>548,22794=>548,63194=>548,12071=>549,23424=>549,63195=>549,12078=>550,24027=>550,63196=>550,24186=>551,12083=>551,63197=>551,24191=>552,12084=>552,63198=>552,24308=>553,12085=>553,24400=>554,12089=>554,63200=>554,24417=>555,12090=>555,63201=>555,12097=>556,25908=>556,63202=>556,12102=>557,26080=>557,30098=>558,63204=>558,12135=>558,30326=>559,12136=>559,12193=>560,36789=>560,63206=>560,12202=>561,38582=>561,9216=>562,9217=>563,9218=>564,9219=>565,9220=>566,9221=>567,9222=>568,9223=>569,9224=>570,9225=>571,9226=>572,9227=>573,9228=>574,9229=>575,9230=>576,9231=>577,9232=>578,9233=>579,9234=>580,9235=>581,9236=>582,9237=>583,9238=>584,9239=>585,9240=>586,9241=>587,9242=>588,9243=>589,9244=>590,9245=>591,9246=>592,9247=>593,9249=>594,12032=>595,19968=>595,12036=>596,20057=>596,19969=>597,19971=>598,20035=>599,20061=>600,20102=>601,12038=>602,20108=>602,20154=>603,12040=>603,20799=>604,12041=>604,20837=>605,12042=>605,20843=>606,12043=>606,12047=>607,20960=>607,12049=>608,20992=>608,20993=>609,12050=>610,21147=>610,12052=>611,21269=>611,21313=>612,12055=>612,21340=>613,12056=>613,12060=>614,21448=>614,19977=>615,19979=>616,19976=>617,19978=>618,20011=>619,20024=>620,20961=>621,20037=>622,20040=>623,20063=>624,20062=>625,20110=>626,20129=>627,20800=>628,64012=>628,20995=>629,21242=>630,21315=>631,21449=>632,12061=>633,21475=>633,22303=>634,12063=>634,22763=>635,12064=>635,22805=>636,12067=>636,22823=>637,12068=>637,22899=>638,12069=>638,12070=>639,23376=>639,23377=>640,23379=>641,23544=>642,12072=>642,23567=>643,12073=>643,23586=>644,12074=>644,23608=>645,12075=>645,12077=>646,23665=>646,24029=>647,24037=>648,12079=>648,12080=>649,24049=>649,24050=>650,24051=>651,24062=>652,12081=>652,24178=>653,12082=>653,24318=>654,12086=>654,24331=>655,12087=>655,24339=>656,12088=>656,25165=>657,19985=>658,19984=>659,19981=>660,20013=>661,20016=>662,20025=>663,20043=>664,23609=>665,20104=>666,20113=>667,20117=>668,20114=>669,20116=>670,20130=>671,20161=>672,20160=>673,20163=>674,20166=>675,20167=>676,20173=>677,20170=>678,20171=>679,20164=>680,20803=>681,20801=>682,20839=>683,20845=>684,20846=>685,20844=>686,20887=>687,20982=>688,20998=>689,20999=>690,21000=>691,21243=>692,21246=>693,21247=>694,21270=>695,21305=>696,21320=>697,21319=>698,21317=>699,21342=>700,21380=>701,21451=>702,21450=>703,21453=>704,22764=>705,22825=>706,22827=>707,22826=>708,22829=>709,23380=>710,23569=>711,23588=>712,23610=>713,23663=>714,24052=>715,24187=>716,24319=>717,24340=>718,24341=>719,24515=>720,12092=>720,25096=>721,12093=>721,25142=>722,12094=>722,25163=>723,12095=>723,25166=>724,12096=>725,25903=>725,25991=>726,12098=>726,26007=>727,12099=>727,26020=>728,12100=>728,26041=>729,12101=>729,26085=>730,12103=>730,26352=>731,12104=>731,26376=>732,12105=>732,26408=>733,12106=>733,27424=>734,12107=>734,27490=>735,12108=>735,27513=>736,12109=>736,27595=>737,12111=>737,27604=>738,12112=>738,27611=>739,12113=>739,27663=>740,12114=>740,27700=>741,12116=>741,28779=>742,12117=>742,29226=>743,12118=>743,29238=>744,12119=>744,29243=>745,12120=>745,29255=>746,12122=>746,29273=>747,12123=>747,29275=>748,12124=>748,29356=>749,12125=>749,29579=>750,19993=>751,19990=>752,19989=>753,19988=>754,19992=>755,20027=>756,20045=>757,20047=>758,20046=>759,20197=>760,20184=>761,20180=>762,20181=>763,20182=>764,20183=>765,20195=>766,20196=>767,20185=>768,20190=>769,20805=>770,20804=>771,20873=>772,20874=>773,20908=>774,20985=>775,20986=>776,20984=>777,21002=>778,21152=>779,21151=>780,57435=>781,21253=>781,21254=>782,21271=>783,21277=>784,20191=>785,21322=>786,21321=>787,21345=>788,21344=>789,21359=>790,21358=>791,21435=>792,21487=>793,21476=>794,21491=>795,21484=>796,21486=>797,21481=>798,21480=>799,21500=>800,21496=>801,21493=>802,21483=>803,21478=>804,21482=>805,21490=>806,21489=>807,21488=>808,21477=>809,21485=>810,21499=>811,22235=>812,22234=>813,22806=>814,22830=>815,22833=>816,22900=>817,22902=>818,23381=>819,23427=>820,23612=>821,24040=>822,24039=>823,24038=>824,24066=>825,24067=>826,24179=>827,24188=>828,24321=>829,24344=>830,24343=>831,24517=>832,25098=>833,25171=>834,25172=>835,25170=>836,25169=>837,26021=>838,26086=>839,26414=>840,26412=>841,26410=>842,26411=>843,26413=>844,27491=>845,27597=>846,27665=>847,27664=>848,27704=>849,27713=>850,27712=>851,27710=>852,29359=>853,29572=>854,12126=>854,29577=>855,12127=>855,29916=>856,12128=>856,29926=>857,12129=>857,29976=>858,12130=>858,29983=>859,12131=>859,12132=>860,29992=>860,29993=>861,12133=>862,30000=>862,30001=>863,30002=>864,30003=>865,12134=>866,30091=>866,30333=>867,12137=>867,30382=>868,12138=>868,30399=>869,12139=>869,30446=>870,12140=>870,30683=>871,12141=>871,30690=>872,12142=>872,30707=>873,12143=>873,31034=>874,12144=>874,31166=>875,12146=>875,31348=>876,12147=>876,31435=>877,12148=>877,19998=>878,19999=>879,20050=>880,20051=>881,20073=>882,20121=>883,20132=>884,20134=>885,20133=>886,20223=>887,20233=>888,20249=>889,20234=>890,20245=>891,20237=>892,20240=>893,20241=>894,20239=>895,20210=>896,20214=>897,20219=>898,20208=>899,20211=>900,20221=>901,20225=>902,20235=>903,20809=>904,20807=>905,20806=>906,20808=>907,20840=>908,20849=>909,20877=>910,20912=>911,21015=>912,21009=>913,21010=>914,21006=>915,21014=>916,21155=>917,21256=>918,21281=>919,21280=>920,21360=>921,21361=>922,21513=>923,21519=>924,21516=>925,21514=>926,21520=>927,21505=>928,21515=>929,21508=>930,21521=>931,21517=>932,21512=>933,21507=>934,21518=>935,21510=>936,21522=>937,22240=>938,22238=>939,22237=>940,22323=>941,22320=>942,22312=>943,22317=>944,22316=>945,22319=>946,22313=>947,22809=>948,22810=>949,22839=>950,22840=>951,22916=>952,22904=>953,22915=>954,22909=>955,22905=>956,22914=>957,22913=>958,23383=>959,23384=>960,23431=>961,23432=>962,23429=>963,23433=>964,23546=>965,23574=>966,23673=>967,24030=>968,24070=>969,24182=>970,24180=>971,24335=>972,24347=>973,24537=>974,24534=>975,25102=>976,25100=>977,25101=>978,25104=>979,25187=>980,25179=>981,25176=>982,25910=>983,26089=>984,26088=>985,26092=>986,26093=>987,26354=>988,26355=>989,26377=>990,26429=>991,26420=>992,26417=>993,26421=>994,27425=>995,27492=>996,27515=>997,27670=>998,27741=>999,27735=>1000,27737=>1001,27743=>1002,27744=>1003,27728=>1004,27733=>1005,27745=>1006,27739=>1007,27725=>1008,27726=>1009,28784=>1010,29279=>1011,29277=>1012,30334=>1013,31481=>1014,12149=>1014,31859=>1015,12150=>1015,31992=>1016,12151=>1016,32566=>1017,12152=>1017,32650=>1018,12154=>1018,32701=>1019,12155=>1019,32769=>1020,12156=>1020,32771=>1021,32780=>1022,12157=>1022,32786=>1023,12158=>1023,32819=>1024,12159=>1024,32895=>1025,12160=>1025,32905=>1026,12161=>1026,32907=>1027,32908=>1028,33251=>1029,12162=>1029,33258=>1030,12163=>1030,33267=>1031,12164=>1031,33276=>1032,12165=>1032,33292=>1033,12166=>1033,33307=>1034,12167=>1034,33311=>1035,12168=>1035,33390=>1036,12169=>1036,33394=>1037,12170=>1037,33406=>1038,34411=>1039,12173=>1039,34880=>1040,12174=>1040,34892=>1041,12175=>1041,34915=>1042,12176=>1042,35199=>1043,38433=>1044,20018=>1045,20136=>1046,20301=>1047,20303=>1048,20295=>1049,20311=>1050,20318=>1051,20276=>1052,20315=>1053,20309=>1054,20272=>1055,20304=>1056,20305=>1057,20285=>1058,20282=>1059,20280=>1060,20291=>1061,20308=>1062,20284=>1063,20294=>1064,20323=>1065,20316=>1066,20320=>1067,20271=>1068,20302=>1069,20278=>1070,20313=>1071,20317=>1072,20296=>1073,20314=>1074,20812=>1075,20811=>1076,20813=>1077,20853=>1078,20918=>1079,20919=>1080,21029=>1081,21028=>1082,21033=>1083,21034=>1084,21032=>1085,21163=>1086,21161=>1087,21162=>1088,21164=>1089,21283=>1090,21363=>1091,21365=>1092,21533=>1093,21549=>1094,21534=>1095,21566=>1096,21542=>1097,21582=>1098,21543=>1099,21574=>1100,21571=>1101,21555=>1102,21576=>1103,21570=>1104,21531=>1105,21545=>1106,21578=>1107,21561=>1108,21563=>1109,21560=>1110,21550=>1111,21557=>1112,21558=>1113,21536=>1114,21564=>1115,21568=>1116,21553=>1117,21547=>1118,21535=>1119,21548=>1120,22250=>1121,22256=>1122,22244=>1123,22251=>1124,22346=>1125,22353=>1126,22336=>1127,22349=>1128,22343=>1129,22350=>1130,22334=>1131,22352=>1132,22351=>1133,22331=>1134,22767=>1135,22846=>1136,22941=>1137,22930=>1138,22952=>1139,22942=>1140,22947=>1141,22937=>1142,22934=>1143,22925=>1144,22948=>1145,22931=>1146,22922=>1147,22949=>1148,23389=>1149,23388=>1150,23386=>1151,23387=>1152,23436=>1153,23435=>1154,23439=>1155,23596=>1156,23616=>1157,23617=>1158,23615=>1159,23614=>1160,23696=>1161,23697=>1162,23700=>1163,23692=>1164,24043=>1165,24076=>1166,24207=>1167,24199=>1168,24202=>1169,24311=>1170,24324=>1171,24351=>1172,24420=>1173,24418=>1174,24439=>1175,24441=>1176,24536=>1177,24524=>1178,24535=>1179,24525=>1180,24561=>1181,24555=>1182,24568=>1183,24554=>1184,25106=>1185,25105=>1186,25220=>1187,25239=>1188,25238=>1189,25216=>1190,25206=>1191,25225=>1192,25197=>1193,25226=>1194,25212=>1195,25214=>1196,25209=>1197,25203=>1198,25234=>1199,25199=>1200,25240=>1201,25198=>1202,25237=>1203,25235=>1204,25233=>1205,25222=>1206,25913=>1207,25915=>1208,25912=>1209,26097=>1210,26356=>1211,26463=>1212,26446=>1213,26447=>1214,26448=>1215,26449=>1216,26460=>1217,26454=>1218,26462=>1219,57801=>1219,26441=>1220,26438=>1221,26464=>1222,26451=>1223,26455=>1224,27493=>1225,27599=>1226,27714=>1227,27742=>1228,27801=>1229,27777=>1230,27784=>1231,27785=>1232,27781=>1233,27803=>1234,27754=>1235,27770=>1236,27792=>1237,27760=>1238,27788=>1239,27752=>1240,27798=>1241,27794=>1242,27773=>1243,27779=>1244,27762=>1245,27774=>1246,27764=>1247,27782=>1248,27766=>1249,27789=>1250,27796=>1251,27800=>1252,27778=>1253,28790=>1254,28796=>1255,28797=>1256,28792=>1257,29282=>1258,29281=>1259,29280=>1260,29380=>1261,29378=>1262,29590=>1263,29996=>1264,29995=>1265,30007=>1266,30008=>1267,30338=>1268,30447=>1269,30691=>1270,31169=>1271,31168=>1272,31167=>1273,31350=>1274,31995=>1275,32597=>1276,32918=>1277,32915=>1278,32925=>1279,32920=>1280,32923=>1281,32922=>1282,32946=>1283,33391=>1284,33426=>1285,33419=>1286,33421=>1287,35211=>1288,12178=>1288,35282=>1289,12179=>1289,35328=>1290,12180=>1290,35895=>1291,12181=>1291,35910=>1292,12182=>1292,35925=>1293,12183=>1293,35997=>1294,12185=>1294,36196=>1295,12186=>1295,36208=>1296,12187=>1296,36275=>1297,12188=>1297,36523=>1298,12189=>1298,36554=>1299,12190=>1299,36763=>1300,12191=>1300,36784=>1301,12192=>1301,36802=>1302,36806=>1303,36805=>1304,36804=>1305,24033=>1306,12194=>1307,37009=>1307,37026=>1308,37034=>1309,37030=>1310,37027=>1311,37193=>1312,12195=>1312,37318=>1313,12196=>1313,37324=>1314,12197=>1314,38450=>1315,38446=>1316,38449=>1317,38442=>1318,38444=>1319,20006=>1320,20054=>1321,20083=>1322,20107=>1323,20123=>1324,20126=>1325,20139=>1326,20140=>1327,20335=>1328,20381=>1329,20365=>1330,20339=>1331,20351=>1332,20332=>1333,20379=>1334,20363=>1335,20358=>1336,20355=>1337,20336=>1338,20341=>1339,20360=>1340,20329=>1341,20347=>1342,20374=>1343,20350=>1344,20367=>1345,20369=>1346,20346=>1347,20820=>1348,20818=>1349,20821=>1350,20841=>1351,20855=>1352,20854=>1353,20856=>1354,20925=>1355,20989=>1356,21051=>1357,21048=>1358,21047=>1359,21050=>1360,21040=>1361,21038=>1362,21046=>1363,21057=>1364,21182=>1365,21179=>1366,21330=>1367,21332=>1368,21331=>1369,21329=>1370,21350=>1371,21367=>1372,21368=>1373,21369=>1374,21462=>1375,21460=>1376,21463=>1377,21619=>1378,21621=>1379,21654=>1380,21624=>1381,21653=>1382,21632=>1383,21627=>1384,21623=>1385,21636=>1386,21650=>1387,21638=>1388,21628=>1389,21648=>1390,21617=>1391,21622=>1392,21644=>1393,21658=>1394,21602=>1395,21608=>1396,21643=>1397,21629=>1398,21646=>1399,22266=>1400,22403=>1401,22391=>1402,22378=>1403,22377=>1404,22369=>1405,22374=>1406,22372=>1407,22396=>1408,22812=>1409,22857=>1410,22855=>1411,22856=>1412,22852=>1413,22868=>1414,22974=>1415,22971=>1416,22996=>1417,22969=>1418,22958=>1419,22993=>1420,22982=>1421,22992=>1422,22989=>1423,22987=>1424,22995=>1425,22986=>1426,22959=>1427,22963=>1428,22994=>1429,22981=>1430,23391=>1431,23396=>1432,23395=>1433,23447=>1434,23450=>1435,23448=>1436,23452=>1437,23449=>1438,23451=>1439,23578=>1440,23624=>1441,23621=>1442,23622=>1443,23735=>1444,23713=>1445,23736=>1446,23721=>1447,23723=>1448,23729=>1449,23731=>1450,24088=>1451,24090=>1452,24086=>1453,24085=>1454,24091=>1455,24081=>1456,24184=>1457,24218=>1458,24215=>1459,24220=>1460,24213=>1461,24214=>1462,24310=>1463,24358=>1464,24359=>1465,24361=>1466,24448=>1467,24449=>1468,24447=>1469,24444=>1470,24541=>1471,24544=>1472,24573=>1473,24565=>1474,24575=>1475,24591=>1476,24596=>1477,24623=>1478,24629=>1479,24598=>1480,24618=>1481,24597=>1482,24609=>1483,24615=>1484,24617=>1485,24619=>1486,24603=>1487,25110=>1488,25109=>1489,25151=>1490,25150=>1491,25152=>1492,25215=>1493,25289=>1494,25292=>1495,25284=>1496,25279=>1497,25282=>1498,25273=>1499,25298=>1500,25307=>1501,25259=>1502,25299=>1503,25300=>1504,25291=>1505,25288=>1506,25256=>1507,25277=>1508,25276=>1509,25296=>1510,60582=>1510,25305=>1511,25287=>1512,25293=>1513,25269=>1514,25306=>1515,25265=>1516,25304=>1517,25302=>1518,25303=>1519,25286=>1520,25260=>1521,25294=>1522,61010=>1522,25918=>1523,26023=>1524,26044=>1525,26106=>1526,26132=>1527,26131=>1528,26124=>1529,26118=>1530,26114=>1531,26126=>1532,26112=>1533,26127=>1534,26133=>1535,26122=>1536,26119=>1537,26381=>1538,26379=>1539,26477=>1540,26507=>1541,26517=>1542,26481=>1543,26524=>1544,26483=>1545,26487=>1546,26503=>1547,26525=>1548,26519=>1549,26479=>1550,26480=>1551,26495=>1552,26505=>1553,26494=>1554,26512=>1555,26485=>1556,26522=>1557,26515=>1558,26492=>1559,26474=>1560,26482=>1561,27427=>1562,27494=>1563,27495=>1564,27519=>1565,27667=>1566,27675=>1567,27875=>1568,27880=>1569,27891=>1570,27825=>1571,27852=>1572,27877=>1573,27827=>1574,27837=>1575,27838=>1576,27836=>1577,27874=>1578,27819=>1579,27861=>1580,27859=>1581,27832=>1582,27844=>1583,27833=>1584,27841=>1585,27822=>1586,27863=>1587,27845=>1588,27889=>1589,27839=>1590,27835=>1591,27873=>1592,27867=>1593,27850=>1594,27820=>1595,27887=>1596,27868=>1597,27862=>1598,27872=>1599,28821=>1600,28814=>1601,28818=>1602,28810=>1603,28825=>1604,29228=>1605,29229=>1606,29240=>1607,29256=>1608,29287=>1609,29289=>1610,29376=>1611,29390=>1612,29401=>1613,29399=>1614,29392=>1615,29609=>1616,29608=>1617,29599=>1618,29611=>1619,29605=>1620,30013=>1621,30109=>1622,30105=>1623,30106=>1624,30340=>1625,30402=>1626,30450=>1627,30452=>1628,30693=>1629,30717=>1630,31038=>1631,31040=>1632,31041=>1633,31177=>1634,31176=>1635,31354=>1636,31353=>1637,31482=>1638,31998=>1639,32596=>1640,32652=>1641,32651=>1642,32773=>1643,58236=>1643,32954=>1644,32933=>1645,32930=>1646,32945=>1647,32929=>1648,32939=>1649,32937=>1650,32948=>1651,32938=>1652,32943=>1653,33253=>1654,33278=>1655,33293=>1656,33459=>1657,33437=>1658,33433=>1659,33453=>1660,33469=>1661,33439=>1662,33465=>1663,33457=>1664,33452=>1665,33445=>1666,33455=>1667,33464=>1668,33443=>1669,33456=>1670,33470=>1671,33463=>1672,34382=>1673,34417=>1674,21021=>1675,34920=>1676,36555=>1677,36814=>1678,36820=>1679,36817=>1680,37045=>1681,37048=>1682,37041=>1683,37046=>1684,37319=>1685,37329=>1686,12198=>1686,38263=>1687,12199=>1687,38272=>1688,12200=>1688,38428=>1689,12201=>1689,38464=>1690,38463=>1691,38459=>1692,38468=>1693,38466=>1694,38585=>1695,12203=>1695,38632=>1696,12204=>1696,38738=>1697,12206=>1698,38750=>1698,20127=>1699,20141=>1700,20142=>1701,20449=>1702,20405=>1703,20399=>1704,20415=>1705,20448=>1706,20433=>1707,20431=>1708,20445=>1709,20419=>1710,20406=>1711,20440=>1712,20447=>1713,20426=>1714,20439=>1715,20398=>1716,20432=>1717,20420=>1718,20418=>1719,20442=>1720,20430=>1721,20446=>1722,20407=>1723,20823=>1724,20882=>1725,20881=>1726,20896=>1727,21070=>1728,21059=>1729,21066=>1730,21069=>1731,21068=>1732,21067=>1733,21063=>1734,21191=>1735,21193=>1736,21187=>1737,21185=>1738,21261=>1739,21335=>1740,21371=>1741,21402=>1742,21467=>1743,21676=>1744,21696=>1745,21672=>1746,21710=>1747,21705=>1748,21688=>1749,21670=>1750,21683=>1751,21703=>1752,21698=>1753,21693=>1754,21674=>1755,21697=>1756,21700=>1757,21704=>1758,21679=>1759,21675=>1760,21681=>1761,21691=>1762,21673=>1763,21671=>1764,21695=>1765,22271=>1766,22402=>1767,22411=>1768,22432=>1769,22435=>1770,22434=>1771,22478=>1772,22446=>1773,22419=>1774,22869=>1775,22865=>1776,22863=>1777,22862=>1778,22864=>1779,23004=>1780,23000=>1781,23039=>1782,23011=>1783,23016=>1784,23043=>1785,23013=>1786,23018=>1787,23002=>1788,23014=>1789,23041=>1790,23035=>1791,23401=>1792,23459=>1793,23462=>1794,23460=>1795,23458=>1796,23461=>1797,23553=>1798,23630=>1799,23631=>1800,23629=>1801,23627=>1802,23769=>1803,23762=>1804,24055=>1805,24093=>1806,24101=>1807,24095=>1808,24189=>1809,24224=>1810,24230=>1811,24314=>1812,24328=>1813,24365=>1814,24421=>1815,24456=>1816,24453=>1817,24458=>1818,24459=>1819,24455=>1820,24460=>1821,24457=>1822,24594=>1823,24605=>1824,24608=>1825,24613=>1826,24590=>1827,24616=>1828,24653=>1829,24688=>1830,24680=>1831,24674=>1832,60712=>1832,24646=>1833,24643=>1834,24684=>1835,24683=>1836,24682=>1837,24676=>1838,25153=>1839,25308=>1840,25366=>1841,25353=>1842,25340=>1843,25325=>1844,25345=>1845,25326=>1846,25341=>1847,25351=>1848,25329=>1849,25335=>1850,25327=>1851,25324=>1852,25342=>1853,25332=>1854,25361=>1855,25346=>1856,25919=>1857,25925=>1858,26027=>1859,26045=>1860,26082=>1861,26149=>1862,26157=>1863,26144=>1864,26151=>1865,26159=>1866,26143=>1867,26152=>1868,26161=>1869,26148=>1870,26359=>1871,26623=>1872,26579=>1873,26609=>1874,26580=>1875,26576=>1876,26604=>1877,26550=>1878,26543=>1879,26613=>1880,26601=>1881,26607=>1882,26564=>1883,26577=>1884,26548=>1885,26586=>1886,26597=>1887,26552=>1888,26575=>1889,26590=>1890,26611=>1891,26544=>1892,26585=>1893,26594=>1894,26589=>1895,26578=>1896,27498=>1897,27523=>1898,27526=>1899,27573=>1900,27602=>1901,27607=>1902,27679=>1903,27849=>1904,27915=>1905,27954=>1906,27946=>1907,27969=>1908,27941=>1909,27916=>1910,27953=>1911,27934=>1912,27927=>1913,27963=>1914,27965=>1915,27966=>1916,27958=>1917,27931=>1918,27893=>1919,27961=>1920,27943=>1921,27960=>1922,27945=>1923,27950=>1924,27957=>1925,27918=>1926,27947=>1927,28843=>1928,28858=>1929,28851=>1930,28844=>1931,28847=>1932,28845=>1933,28856=>1934,28846=>1935,28836=>1936,29232=>1937,29298=>1938,29295=>1939,29300=>1940,29417=>1941,29408=>1942,29409=>1943,29623=>1944,29642=>1945,29627=>1946,29618=>1947,29645=>1948,29632=>1949,29619=>1950,29978=>1951,29997=>1952,30031=>1953,30028=>1954,30030=>1955,30027=>1956,30123=>1957,30116=>1958,30117=>1959,30114=>1960,30115=>1961,30328=>1962,30342=>1963,30343=>1964,30344=>1965,30408=>1966,30406=>1967,30403=>1968,30405=>1969,30465=>1970,30457=>1971,30456=>1972,30473=>1973,30475=>1974,30462=>1975,30460=>1976,30471=>1977,30684=>1978,30722=>1979,30740=>1980,30732=>1981,30733=>1982,31046=>1983,31049=>1984,31048=>1985,31047=>1986,31161=>1987,31162=>1988,31185=>1989,31186=>1990,31179=>1991,31359=>1992,31361=>1993,31487=>1994,31485=>1995,31869=>1996,32002=>1997,32005=>1998,32000=>1999,32009=>2000,32007=>2001,32004=>2002,32006=>2003,32568=>2004,32654=>2005,32703=>2006,32784=>2007,32781=>2008,32785=>2009,32822=>2010,32982=>2011,32997=>2012,32986=>2013,32963=>2014,32964=>2015,32972=>2016,32993=>2017,32987=>2018,32974=>2019,32990=>2020,32996=>2021,32989=>2022,33268=>2023,33314=>2024,33511=>2025,33539=>2026,33541=>2027,33507=>2028,33499=>2029,33510=>2030,33540=>2031,33509=>2032,33538=>2033,33545=>2034,33490=>2035,33495=>2036,33521=>2037,33537=>2038,33500=>2039,33492=>2040,33489=>2041,33502=>2042,33491=>2043,33503=>2044,33519=>2045,33542=>2046,34384=>2047,34425=>2048,34427=>2049,34426=>2050,34893=>2051,34923=>2052,35201=>2053,35284=>2054,35336=>2055,35330=>2056,35331=>2057,35998=>2058,36000=>2059,36212=>2060,36211=>2061,36276=>2062,36557=>2063,36556=>2064,36848=>2065,36838=>2066,36834=>2067,36842=>2068,36837=>2069,36845=>2070,36843=>2071,36836=>2072,36840=>2073,37066=>2074,37070=>2075,37057=>2076,37059=>2077,37195=>2078,37194=>2079,37325=>2080,38274=>2081,38480=>2082,38475=>2083,38476=>2084,38477=>2085,38754=>2086,12207=>2086,38761=>2087,12208=>2087,38859=>2088,12209=>2088,38893=>2089,12210=>2089,38899=>2090,12211=>2090,38913=>2091,12212=>2091,39080=>2092,12213=>2092,39131=>2093,12214=>2093,39135=>2094,12215=>2094,39318=>2095,12216=>2095,39321=>2096,12217=>2096,20056=>2097,20147=>2098,20492=>2099,20493=>2100,20515=>2101,20463=>2102,20518=>2103,20517=>2104,20472=>2105,20521=>2106,57375=>2106,20502=>2107,20486=>2108,20540=>2109,20511=>2110,20506=>2111,20498=>2112,20497=>2113,20474=>2114,20480=>2115,20500=>2116,20520=>2117,20465=>2118,20513=>2119,20491=>2120,20505=>2121,20504=>2122,20467=>2123,20462=>2124,20525=>2125,20522=>2126,20478=>2127,20523=>2128,20489=>2129,20860=>2130,20900=>2131,20901=>2132,20898=>2133,20941=>2134,20940=>2135,20934=>2136,20939=>2137,21078=>2138,21084=>2139,21076=>2140,21083=>2141,21085=>2142,21290=>2143,21375=>2144,57459=>2144,21407=>2145,21405=>2146,21471=>2147,21736=>2148,21776=>2149,21761=>2150,21815=>2151,21756=>2152,21733=>2153,21746=>2154,21766=>2155,21754=>2156,21780=>2157,21737=>2158,21741=>2159,21729=>2160,21769=>2161,21742=>2162,21738=>2163,21734=>2164,21799=>2165,21767=>2166,21757=>2167,21775=>2168,22275=>2169,22276=>2170,22466=>2171,22484=>2172,22475=>2173,22467=>2174,22537=>2175,22799=>2176,22871=>2177,22872=>2178,22874=>2179,23057=>2180,23064=>2181,23068=>2182,23071=>2183,23067=>2184,23059=>2185,23020=>2186,23072=>2187,23075=>2188,23081=>2189,23077=>2190,23052=>2191,23049=>2192,23403=>2193,23640=>2194,23472=>2195,23475=>2196,23478=>2197,23476=>2198,23470=>2199,23477=>2200,23481=>2201,23480=>2202,23556=>2203,23633=>2204,23637=>2205,23632=>2206,23789=>2207,23805=>2208,23803=>2209,23786=>2210,23784=>2211,23792=>2212,23798=>2213,23809=>2214,23796=>2215,24046=>2216,24109=>2217,24107=>2218,24235=>2219,24237=>2220,24231=>2221,24369=>2222,24466=>2223,24465=>2224,24464=>2225,24665=>2226,24675=>2227,24677=>2228,24656=>2229,24661=>2230,24685=>2231,24681=>2232,24687=>2233,24708=>2234,24735=>2235,24730=>2236,24717=>2237,24724=>2238,24716=>2239,24709=>2240,24726=>2241,25159=>2242,25331=>2243,25352=>2244,25343=>2245,25422=>2246,25406=>2247,25391=>2248,25429=>2249,25410=>2250,25414=>2251,25423=>2252,25417=>2253,25402=>2254,25424=>2255,25405=>2256,25386=>2257,25387=>2258,25384=>2259,25421=>2260,25420=>2261,25928=>2262,25929=>2263,26009=>2264,26049=>2265,26053=>2266,26178=>2267,26185=>2268,26191=>2269,26179=>2270,26194=>2271,26188=>2272,26181=>2273,26177=>2274,26360=>2275,26388=>2276,26389=>2277,26391=>2278,26657=>2279,26680=>2280,26696=>2281,26694=>2282,26707=>2283,26681=>2284,26690=>2285,26708=>2286,26665=>2287,26803=>2288,26647=>2289,26700=>2290,26705=>2291,26685=>2292,26612=>2293,26704=>2294,26688=>2295,26684=>2296,26691=>2297,26666=>2298,26693=>2299,26643=>2300,26648=>2301,26689=>2302,27530=>2303,27529=>2304,27575=>2305,27683=>2306,27687=>2307,27688=>2308,27686=>2309,27684=>2310,27888=>2311,28010=>2312,28053=>2313,28040=>2314,28039=>2315,28006=>2316,28024=>2317,28023=>2318,27993=>2319,28051=>2320,28012=>2321,28041=>2322,28014=>2323,27994=>2324,28020=>2325,28009=>2326,28044=>2327,28042=>2328,28025=>2329,28037=>2330,28005=>2331,28052=>2332,28874=>2333,28888=>2334,28900=>2335,28889=>2336,28872=>2337,28879=>2338,29241=>2339,29305=>2340,29436=>2341,29433=>2342,29437=>2343,29432=>2344,29431=>2345,29574=>2346,29677=>2347,29705=>2348,29678=>2349,29664=>2350,29674=>2351,29662=>2352,30036=>2353,30045=>2354,30044=>2355,30042=>2356,30041=>2357,30142=>2358,30149=>2359,30151=>2360,30130=>2361,30131=>2362,30141=>2363,30140=>2364,30137=>2365,30146=>2366,30136=>2367,30347=>2368,30384=>2369,30410=>2370,30413=>2371,30414=>2372,30505=>2373,30495=>2374,30496=>2375,30504=>2376,30697=>2377,30768=>2378,30759=>2379,30776=>2380,30749=>2381,30772=>2382,30775=>2383,30757=>2384,30765=>2385,30752=>2386,30751=>2387,30770=>2388,31061=>2389,31056=>2390,31072=>2391,31071=>2392,31062=>2393,31070=>2394,31069=>2395,31063=>2396,31066=>2397,31204=>2398,31203=>2399,60418=>2399,31207=>2400,31199=>2401,31206=>2402,31209=>2403,31192=>2404,31364=>2405,31368=>2406,31449=>2407,31494=>2408,31505=>2409,31881=>2410,32033=>2411,32023=>2412,32011=>2413,32010=>2414,32032=>2415,32034=>2416,32020=>2417,32016=>2418,32021=>2419,32026=>2420,32028=>2421,32013=>2422,32025=>2423,32027=>2424,32570=>2425,32607=>2426,32660=>2427,32709=>2428,32705=>2429,32774=>2430,32772=>2431,32792=>2432,32789=>2433,32793=>2434,32791=>2435,32829=>2436,32831=>2437,33009=>2438,33026=>2439,33008=>2440,33029=>2441,33005=>2442,33012=>2443,33030=>2444,33016=>2445,33011=>2446,33032=>2447,33021=>2448,33034=>2449,33020=>2450,33007=>2451,33261=>2452,33260=>2453,33280=>2454,33296=>2455,33322=>2456,33323=>2457,33320=>2458,33324=>2459,33467=>2460,33579=>2461,33618=>2462,33620=>2463,33610=>2464,33592=>2465,33616=>2466,33609=>2467,33589=>2468,33588=>2469,33615=>2470,33586=>2471,33593=>2472,33590=>2473,33559=>2474,33600=>2475,33585=>2476,33576=>2477,33603=>2478,34388=>2479,34442=>2480,34474=>2481,34451=>2482,34468=>2483,34473=>2484,34444=>2485,34467=>2486,34460=>2487,34928=>2488,34935=>2489,34945=>2490,34946=>2491,34941=>2492,34937=>2493,35352=>2494,35344=>2495,35342=>2496,35340=>2497,35349=>2498,35338=>2499,35351=>2500,35347=>2501,35350=>2502,35343=>2503,35345=>2504,35912=>2505,35962=>2506,35961=>2507,36001=>2508,36002=>2509,36215=>2510,58442=>2510,36524=>2511,36562=>2512,36564=>2513,36559=>2514,36785=>2515,36865=>2516,36870=>2517,36855=>2518,36864=>2519,36858=>2520,36852=>2521,36867=>2522,36861=>2523,36869=>2524,36856=>2525,37013=>2526,37089=>2527,37085=>2528,37090=>2529,37202=>2530,37197=>2531,37196=>2532,37336=>2533,37341=>2534,37335=>2535,37340=>2536,37337=>2537,38275=>2538,38498=>2539,38499=>2540,38497=>2541,38491=>2542,38493=>2543,38500=>2544,38488=>2545,38494=>2546,38587=>2547,39138=>2548,39340=>2549,12218=>2549,39592=>2550,12219=>2550,39640=>2551,12220=>2551,12222=>2552,39717=>2552,39730=>2553,12224=>2553,39740=>2554,12225=>2554,20094=>2555,20602=>2556,20605=>2557,57382=>2557,20572=>2558,20551=>2559,20547=>2560,20556=>2561,20570=>2562,20553=>2563,20581=>2564,20598=>2565,20558=>2566,20565=>2567,20597=>2568,20596=>2569,20599=>2570,20559=>2571,20495=>2572,20591=>2573,20589=>2574,20828=>2575,20885=>2576,20976=>2577,21098=>2578,21103=>2579,21202=>2580,21209=>2581,21208=>2582,21205=>2583,21264=>2584,21263=>2585,21273=>2586,21311=>2587,21312=>2588,21310=>2589,21443=>2590,26364=>2591,21830=>2592,21866=>2593,21862=>2594,21828=>2595,21854=>2596,21857=>2597,21827=>2598,21834=>2599,21809=>2600,21846=>2601,21839=>2602,21845=>2603,21807=>2604,21860=>2605,21816=>2606,21806=>2607,21852=>2608,21804=>2609,21859=>2610,21811=>2611,21825=>2612,21847=>2613,22280=>2614,22283=>2615,22281=>2616,22495=>2617,22533=>2618,22538=>2619,22534=>2620,22496=>2621,22500=>2622,22522=>2623,22530=>2624,22581=>2625,22519=>2626,22521=>2627,22816=>2628,22882=>2629,23094=>2630,23105=>2631,23113=>2632,23142=>2633,23146=>2634,23104=>2635,23100=>2636,23138=>2637,23130=>2638,23110=>2639,23114=>2640,23408=>2641,23495=>2642,23493=>2643,23492=>2644,23490=>2645,23487=>2646,23494=>2647,23561=>2648,23560=>2649,23559=>2650,23648=>2651,23644=>2652,23645=>2653,23815=>2654,23814=>2655,23822=>2656,23835=>2657,23830=>2658,23842=>2659,23825=>2660,23849=>2661,23828=>2662,23833=>2663,23844=>2664,23847=>2665,23831=>2666,24034=>2667,24120=>2668,24118=>2669,24115=>2670,24119=>2671,24247=>2672,24248=>2673,24246=>2674,24245=>2675,24254=>2676,24373=>2677,24375=>2678,24407=>2679,24428=>2680,24425=>2681,24427=>2682,24471=>2683,24473=>2684,24478=>2685,24472=>2686,24481=>2687,24480=>2688,24476=>2689,24703=>2690,24739=>2691,24713=>2692,24736=>2693,24744=>2694,24779=>2695,24756=>2696,24806=>2697,24765=>2698,24773=>2699,24763=>2700,24757=>2701,24796=>2702,24764=>2703,24792=>2704,24789=>2705,24774=>2706,24799=>2707,24760=>2708,24794=>2709,24775=>2710,25114=>2711,25115=>2712,25160=>2713,25504=>2714,25511=>2715,25458=>2716,25494=>2717,25506=>2718,25509=>2719,25463=>2720,25447=>2721,25496=>2722,25514=>2723,25457=>2724,25513=>2725,25481=>2726,25475=>2727,25499=>2728,25451=>2729,25512=>2730,25476=>2731,25480=>2732,25497=>2733,25505=>2734,25516=>2735,25490=>2736,25487=>2737,25472=>2738,25467=>2739,25449=>2740,25448=>2741,25466=>2742,25949=>2743,25942=>2744,25937=>2745,25945=>2746,25943=>2747,21855=>2748,25935=>2749,25944=>2750,25941=>2751,25940=>2752,26012=>2753,26011=>2754,26028=>2755,26063=>2756,26059=>2757,26060=>2758,26062=>2759,26205=>2760,26202=>2761,26212=>2762,26216=>2763,26214=>2764,26206=>2765,26361=>2766,21207=>2767,26395=>2768,26753=>2769,26799=>2770,26786=>2771,26771=>2772,26805=>2773,26751=>2774,26742=>2775,26801=>2776,26791=>2777,26775=>2778,26800=>2779,26755=>2780,26820=>2781,26797=>2782,26758=>2783,26757=>2784,26772=>2785,26781=>2786,26792=>2787,26783=>2788,26785=>2789,26754=>2790,27442=>2791,27578=>2792,27627=>2793,27628=>2794,27691=>2795,28046=>2796,28092=>2797,28147=>2798,28121=>2799,28082=>2800,28129=>2801,28108=>2802,28132=>2803,28155=>2804,28154=>2805,28165=>2806,28103=>2807,28107=>2808,28079=>2809,28113=>2810,28078=>2811,28126=>2812,28153=>2813,28088=>2814,28151=>2815,28149=>2816,28101=>2817,28114=>2818,28186=>2819,28085=>2820,28122=>2821,28139=>2822,28120=>2823,28138=>2824,28145=>2825,28142=>2826,28136=>2827,28102=>2828,28100=>2829,28074=>2830,28140=>2831,28095=>2832,28134=>2833,28921=>2834,28937=>2835,28938=>2836,28925=>2837,28911=>2838,29245=>2839,29309=>2840,29313=>2841,29468=>2842,29467=>2843,29462=>2844,29459=>2845,29465=>2846,29575=>2847,29701=>2848,29706=>2849,29699=>2850,29702=>2851,29694=>2852,29709=>2853,29920=>2854,29942=>2855,29943=>2856,29980=>2857,29986=>2858,30053=>2859,30054=>2860,30050=>2861,30064=>2862,30095=>2863,30164=>2864,30165=>2865,30133=>2866,30154=>2867,30157=>2868,30350=>2869,30420=>2870,30418=>2871,30427=>2872,30519=>2873,30526=>2874,30524=>2875,30518=>2876,30520=>2877,30522=>2878,30827=>2879,30787=>2880,30798=>2881,31077=>2882,31080=>2883,31085=>2884,31227=>2885,31378=>2886,31381=>2887,31520=>2888,31528=>2889,31515=>2890,31532=>2891,31526=>2892,31513=>2893,31518=>2894,31534=>2895,31890=>2896,31895=>2897,31893=>2898,32070=>2899,32067=>2900,32113=>2901,32046=>2902,32057=>2903,32060=>2904,32064=>2905,32048=>2906,32051=>2907,32068=>2908,32047=>2909,32066=>2910,32050=>2911,32049=>2912,32573=>2913,32670=>2914,32666=>2915,32716=>2916,32718=>2917,32722=>2918,32796=>2919,32842=>2920,32838=>2921,33071=>2922,33046=>2923,33059=>2924,33067=>2925,33065=>2926,33072=>2927,33060=>2928,33282=>2929,33333=>2930,33335=>2931,33334=>2932,33337=>2933,33678=>2934,33694=>2935,33688=>2936,33656=>2937,33698=>2938,33686=>2939,33725=>2940,33707=>2941,33682=>2942,33674=>2943,33683=>2944,33673=>2945,33696=>2946,33655=>2947,33659=>2948,33660=>2949,33670=>2950,33703=>2951,34389=>2952,24426=>2953,34503=>2954,34496=>2955,34486=>2956,34500=>2957,34485=>2958,34502=>2959,34507=>2960,34481=>2961,34479=>2962,34505=>2963,34899=>2964,34974=>2965,34952=>2966,34987=>2967,34962=>2968,34966=>2969,34957=>2970,34955=>2971,35219=>2972,35215=>2973,35370=>2974,35357=>2975,35363=>2976,35365=>2977,35377=>2978,35373=>2979,35359=>2980,35355=>2981,35362=>2982,35913=>2983,35930=>2984,36009=>2985,36012=>2986,36011=>2987,36008=>2988,36010=>2989,36007=>2990,36199=>2991,36198=>2992,36286=>2993,36282=>2994,36571=>2995,36575=>2996,36889=>2997,36877=>2998,36890=>2999,36887=>3000,36899=>3001,36895=>3002,36893=>3003,36880=>3004,36885=>3005,36894=>3006,36896=>3007,36879=>3008,36898=>3009,36886=>3010,36891=>3011,36884=>3012,37096=>3013,37101=>3014,37117=>3015,58488=>3015,37207=>3016,37326=>3017,37365=>3018,37350=>3019,37347=>3020,37351=>3021,37357=>3022,37353=>3023,38281=>3024,38506=>3025,38517=>3026,38515=>3027,38520=>3028,38512=>3029,38516=>3030,38518=>3031,38519=>3032,38508=>3033,38592=>3034,38634=>3035,38633=>3036,31456=>3037,31455=>3038,38914=>3039,38915=>3040,39770=>3041,12226=>3041,40165=>3042,12227=>3042,40565=>3043,12228=>3043,40575=>3044,12229=>3044,40613=>3045,12230=>3045,40635=>3046,12231=>3046,20642=>3047,20621=>3048,20613=>3049,20633=>3050,20625=>3051,20608=>3052,20630=>3053,20632=>3054,20634=>3055,26368=>3056,20977=>3057,21106=>3058,21108=>3059,21109=>3060,21097=>3061,21214=>3062,21213=>3063,21211=>3064,21338=>3065,21413=>3066,21883=>3067,21888=>3068,21927=>3069,21884=>3070,21898=>3071,21917=>3072,21912=>3073,21890=>3074,21916=>3075,21930=>3076,21908=>3077,21895=>3078,21899=>3079,21891=>3080,21939=>3081,21934=>3082,21919=>3083,21822=>3084,21938=>3085,21914=>3086,21947=>3087,21932=>3088,21937=>3089,21886=>3090,21897=>3091,21931=>3092,21913=>3093,22285=>3094,22575=>3095,22570=>3096,22580=>3097,22564=>3098,22576=>3099,22577=>3100,22561=>3101,22557=>3102,22560=>3103,22777=>3104,22778=>3105,22880=>3106,23159=>3107,57587=>3107,23194=>3108,23167=>3109,23186=>3110,23195=>3111,23207=>3112,23411=>3113,23409=>3114,23506=>3115,23500=>3116,23507=>3117,23504=>3118,23562=>3119,23563=>3120,23601=>3121,23884=>3122,23888=>3123,23860=>3124,23879=>3125,24061=>3126,24133=>3127,24125=>3128,24128=>3129,24131=>3130,24190=>3131,24266=>3132,24257=>3133,24258=>3134,24260=>3135,24380=>3136,24429=>3137,24489=>3138,24490=>3139,24488=>3140,24785=>3141,24801=>3142,24754=>3143,24758=>3144,24800=>3145,24860=>3146,24867=>3147,24826=>3148,24853=>3149,24816=>3150,24827=>3151,24820=>3152,24936=>3153,24817=>3154,24846=>3155,24822=>3156,24841=>3157,24832=>3158,24850=>3159,25119=>3160,25161=>3161,25507=>3162,25484=>3163,25551=>3164,25536=>3165,25577=>3166,25545=>3167,25542=>3168,25549=>3169,25554=>3170,25571=>3171,25552=>3172,25569=>3173,25558=>3174,25581=>3175,25582=>3176,25462=>3177,25588=>3178,25578=>3179,25563=>3180,25682=>3181,25562=>3182,25593=>3183,25950=>3184,25958=>3185,25954=>3186,25955=>3187,26001=>3188,26000=>3189,26031=>3190,26222=>3191,26224=>3192,26228=>3193,57786=>3193,26230=>3194,26223=>3195,26257=>3196,26234=>3197,26238=>3198,26231=>3199,26366=>3200,26367=>3201,26399=>3202,26397=>3203,26874=>3204,26837=>3205,26848=>3206,26840=>3207,26839=>3208,26885=>3209,26847=>3210,26869=>3211,26862=>3212,26855=>3213,26873=>3214,26834=>3215,26866=>3216,26851=>3217,26827=>3218,26829=>3219,26893=>3220,26898=>3221,26894=>3222,26825=>3223,26842=>3224,26990=>3225,26875=>3226,27454=>3227,27450=>3228,27453=>3229,27544=>3230,27542=>3231,27580=>3232,27631=>3233,27694=>3234,27695=>3235,27692=>3236,28207=>3237,57904=>3237,28216=>3238,28244=>3239,28193=>3240,28210=>3241,28263=>3242,28234=>3243,28192=>3244,28197=>3245,28195=>3246,28187=>3247,28251=>3248,28248=>3249,28196=>3250,28246=>3251,28270=>3252,28205=>3253,28198=>3254,28271=>3255,28212=>3256,28237=>3257,28218=>3258,28204=>3259,28227=>3260,28189=>3261,57901=>3261,28222=>3262,28363=>3263,28297=>3264,28185=>3265,28238=>3266,28259=>3267,28228=>3268,28274=>3269,28265=>3270,28255=>3271,28953=>3272,28954=>3273,28966=>3274,28976=>3275,28961=>3276,28982=>3277,29038=>3278,57958=>3278,28956=>3279,29260=>3280,29316=>3281,29312=>3282,29494=>3283,29477=>3284,29492=>3285,29481=>3286,29754=>3287,29738=>3288,29747=>3289,29730=>3290,29733=>3291,29749=>3292,29750=>3293,29748=>3294,29743=>3295,29723=>3296,29734=>3297,29736=>3298,29989=>3299,29990=>3300,30059=>3301,30058=>3302,30178=>3303,30171=>3304,30179=>3305,30169=>3306,30168=>3307,30174=>3308,30176=>3309,30331=>3310,30332=>3311,30358=>3312,30355=>3313,30388=>3314,30428=>3315,30543=>3316,30701=>3317,30813=>3318,30828=>3319,30831=>3320,31245=>3321,31240=>3322,31243=>3323,31237=>3324,31232=>3325,31384=>3326,31383=>3327,31382=>3328,31461=>3329,31459=>3330,31561=>3331,31574=>3332,31558=>3333,31568=>3334,31570=>3335,31572=>3336,31565=>3337,31563=>3338,31567=>3339,31569=>3340,60510=>3340,31903=>3341,31909=>3342,32094=>3343,32080=>3344,32104=>3345,32085=>3346,32043=>3347,32110=>3348,32114=>3349,32097=>3350,32102=>3351,32098=>3352,32112=>3353,32115=>3354,21892=>3355,32724=>3356,32725=>3357,32779=>3358,32850=>3359,32901=>3360,33109=>3361,33108=>3362,33099=>3363,33105=>3364,33102=>3365,33081=>3366,33094=>3367,33086=>3368,33100=>3369,33107=>3370,33140=>3371,33298=>3372,33308=>3373,33769=>3374,33795=>3375,33784=>3376,33805=>3377,33760=>3378,33733=>3379,33803=>3380,33729=>3381,58309=>3381,33775=>3382,33777=>3383,33780=>3384,33879=>3385,33802=>3386,33776=>3387,33804=>3388,33740=>3389,33789=>3390,33778=>3391,33738=>3392,33848=>3393,33806=>3394,33796=>3395,33756=>3396,33799=>3397,33748=>3398,33759=>3399,34395=>3400,34527=>3401,34521=>3402,34541=>3403,34516=>3404,34523=>3405,34532=>3406,34512=>3407,34526=>3408,34903=>3409,35009=>3410,35010=>3411,34993=>3412,35203=>3413,35222=>3414,35387=>3415,35424=>3416,35413=>3417,35422=>3418,35388=>3419,35393=>3420,35412=>3421,35419=>3422,35408=>3423,35398=>3424,35380=>3425,35386=>3426,35382=>3427,35414=>3428,35937=>3429,35970=>3430,36015=>3431,36028=>3432,36019=>3433,36029=>3434,36033=>3435,36027=>3436,36032=>3437,36020=>3438,36023=>3439,36022=>3440,36031=>3441,36024=>3442,36234=>3443,36229=>3444,36225=>3445,36302=>3446,36317=>3447,36299=>3448,36314=>3449,36305=>3450,36300=>3451,36315=>3452,36294=>3453,36603=>3454,36600=>3455,36604=>3456,36764=>3457,36910=>3458,36917=>3459,36913=>3460,36920=>3461,36914=>3462,36918=>3463,37122=>3464,37109=>3465,37129=>3466,37118=>3467,37219=>3468,37221=>3469,37327=>3470,37396=>3471,37397=>3472,37411=>3473,37385=>3474,37406=>3475,37389=>3476,37392=>3477,37383=>3478,37393=>3479,38292=>3480,38287=>3481,38283=>3482,38289=>3483,38291=>3484,38290=>3485,38286=>3486,38538=>3487,38542=>3488,38539=>3489,38525=>3490,38533=>3491,38534=>3492,38541=>3493,38514=>3494,38532=>3495,38593=>3496,38597=>3497,38596=>3498,38598=>3499,38599=>3500,38639=>3501,38642=>3502,38860=>3503,38917=>3504,38918=>3505,38920=>3506,39143=>3507,39146=>3508,39151=>3509,39145=>3510,39154=>3511,39149=>3512,39342=>3513,39341=>3514,40643=>3515,12232=>3515,40653=>3516,12233=>3516,40657=>3517,12234=>3517,20098=>3518,20653=>3519,20661=>3520,20658=>3521,20659=>3522,20677=>3523,20670=>3524,20652=>3525,20663=>3526,20667=>3527,20655=>3528,20679=>3529,21119=>3530,21111=>3531,21117=>3532,21215=>3533,21222=>3534,21220=>3535,21218=>3536,21219=>3537,21295=>3538,21983=>3539,21992=>3540,21971=>3541,21990=>3542,21966=>3543,21980=>3544,21959=>3545,21969=>3546,21987=>3547,21988=>3548,21999=>3549,21978=>3550,21985=>3551,21957=>3552,21958=>3553,21989=>3554,21961=>3555,22290=>3556,22291=>3557,22622=>3558,22609=>3559,22616=>3560,22615=>3561,22618=>3562,22612=>3563,22635=>3564,22604=>3565,22637=>3566,22602=>3567,22626=>3568,22610=>3569,22603=>3570,22887=>3571,23233=>3572,23241=>3573,23244=>3574,23230=>3575,23229=>3576,23228=>3577,23219=>3578,23234=>3579,23218=>3580,23913=>3581,23919=>3582,24140=>3583,24185=>3584,24265=>3585,24264=>3586,24338=>3587,24409=>3588,24492=>3589,24494=>3590,24858=>3591,24847=>3592,24904=>3593,24863=>3594,24819=>3595,24859=>3596,24825=>3597,24833=>3598,24840=>3599,24910=>3600,24908=>3601,24900=>3602,24909=>3603,24894=>3604,24884=>3605,24871=>3606,24845=>3607,24838=>3608,24887=>3609,25121=>3610,25122=>3611,25619=>3612,25662=>3613,25630=>3614,25642=>3615,25645=>3616,25661=>3617,25644=>3618,25615=>3619,25628=>3620,25620=>3621,25613=>3622,25654=>3623,25622=>3624,25623=>3625,25606=>3626,25964=>3627,26015=>3628,26032=>3629,26263=>3630,26249=>3631,26247=>3632,26248=>3633,26262=>3634,26244=>3635,26264=>3636,26253=>3637,26371=>3638,27028=>3639,26989=>3640,26970=>3641,26999=>3642,26976=>3643,26964=>3644,26997=>3645,26928=>3646,27010=>3647,26954=>3648,26984=>3649,26987=>3650,26974=>3651,26963=>3652,27001=>3653,27014=>3654,26973=>3655,26979=>3656,26971=>3657,27463=>3658,27506=>3659,27584=>3660,27583=>3661,27603=>3662,27645=>3663,28322=>3664,28335=>3665,28371=>3666,28342=>3667,28354=>3668,28304=>3669,28317=>3670,28359=>3671,28357=>3672,28325=>3673,28312=>3674,28348=>3675,28346=>3676,28331=>3677,28369=>3678,28310=>3679,28316=>3680,28356=>3681,28372=>3682,28330=>3683,28327=>3684,28340=>3685,29006=>3686,29017=>3687,29033=>3688,29028=>3689,29001=>3690,29031=>3691,29020=>3692,29036=>3693,29030=>3694,29004=>3695,29029=>3696,29022=>3697,28998=>3698,29032=>3699,29014=>3700,29242=>3701,29266=>3702,29495=>3703,29509=>3704,29503=>3705,29502=>3706,29807=>3707,29786=>3708,29781=>3709,29791=>3710,29790=>3711,29761=>3712,29759=>3713,29785=>3714,29787=>3715,58019=>3716,29788=>3716,30070=>3717,30072=>3718,30208=>3719,30192=>3720,30209=>3721,30194=>3722,30193=>3723,30202=>3724,30207=>3725,30196=>3726,30195=>3727,30430=>3728,30431=>3729,30555=>3730,30571=>3731,30566=>3732,30558=>3733,30563=>3734,30585=>3735,30570=>3736,30572=>3737,30556=>3738,30565=>3739,30568=>3740,30562=>3741,30702=>3742,30862=>3743,30896=>3744,30871=>3745,30872=>3746,30860=>3747,30857=>3748,30844=>3749,30865=>3750,30867=>3751,30847=>3752,31098=>3753,31103=>3754,31105=>3755,33836=>3756,31165=>3757,31260=>3758,31258=>3759,31264=>3760,31252=>3761,31263=>3762,31262=>3763,31391=>3764,31392=>3765,31607=>3766,31680=>3767,31584=>3768,31598=>3769,31591=>3770,31921=>3771,31923=>3772,31925=>3773,32147=>3774,32121=>3775,32145=>3776,32129=>3777,32143=>3778,32091=>3779,32622=>3780,32617=>3781,32618=>3782,32626=>3783,32681=>3784,32680=>3785,32676=>3786,32854=>3787,32856=>3788,32902=>3789,32900=>3790,33137=>3791,33136=>3792,33144=>3793,33125=>3794,33134=>3795,33139=>3796,33131=>3797,33145=>3798,33146=>3799,33126=>3800,33285=>3801,33351=>3802,33922=>3803,33911=>3804,33853=>3805,33841=>3806,33909=>3807,33894=>3808,33899=>3809,33865=>3810,33900=>3811,33883=>3812,33852=>3813,33845=>3814,33889=>3815,33891=>3816,33897=>3817,33901=>3818,33862=>3819,34398=>3820,34396=>3821,34399=>3822,34553=>3823,34579=>3824,34568=>3825,34567=>3826,34560=>3827,34558=>3828,34555=>3829,34562=>3830,34563=>3831,34566=>3832,34570=>3833,34905=>3834,35039=>3835,35028=>3836,35033=>3837,35036=>3838,35032=>3839,35037=>3840,35041=>3841,35018=>3842,35029=>3843,35026=>3844,35228=>3845,35299=>3846,35435=>3847,35442=>3848,35443=>3849,35430=>3850,35433=>3851,35440=>3852,35463=>3853,35452=>3854,35427=>3855,35488=>3856,35441=>3857,35461=>3858,35437=>3859,35426=>3860,35438=>3861,35436=>3862,35449=>3863,35451=>3864,35390=>3865,35432=>3866,35938=>3867,35978=>3868,35977=>3869,36042=>3870,36039=>3871,36040=>3872,36036=>3873,36018=>3874,36035=>3875,36034=>3876,36037=>3877,36321=>3878,36319=>3879,36328=>3880,36335=>3881,36339=>3882,36346=>3883,36330=>3884,36324=>3885,36326=>3886,36530=>3887,36611=>3888,36617=>3889,36606=>3890,36618=>3891,36767=>3892,36786=>3893,36939=>3894,36938=>3895,36947=>3896,36930=>3897,36948=>3898,36924=>3899,36949=>3900,36944=>3901,36935=>3902,36943=>3903,36942=>3904,36941=>3905,36945=>3906,36926=>3907,36929=>3908,37138=>3909,37143=>3910,37228=>3911,37226=>3912,37225=>3913,37321=>3914,37431=>3915,37463=>3916,37432=>3917,37437=>3918,37440=>3919,37438=>3920,37467=>3921,37451=>3922,37476=>3923,37457=>3924,37428=>3925,37449=>3926,37453=>3927,37445=>3928,37433=>3929,37439=>3930,37466=>3931,38296=>3932,38552=>3933,38548=>3934,38549=>3935,38605=>3936,38603=>3937,38601=>3938,38602=>3939,38647=>3940,38651=>3941,38649=>3942,38646=>3943,38742=>3944,38772=>3945,38774=>3946,38928=>3947,38929=>3948,38931=>3949,38922=>3950,38930=>3951,38924=>3952,39164=>3953,39156=>3954,39165=>3955,39166=>3956,39347=>3957,39345=>3958,39348=>3959,39649=>3960,40169=>3961,40578=>3962,40718=>3963,12237=>3963,40723=>3964,12238=>3964,40736=>3965,12239=>3965,20711=>3966,20718=>3967,20709=>3968,20694=>3969,20717=>3970,60903=>3970,20698=>3971,20693=>3972,20687=>3973,20689=>3974,20721=>3975,20686=>3976,20713=>3977,20834=>3978,20979=>3979,21123=>3980,21122=>3981,21297=>3982,21421=>3983,22014=>3984,22016=>3985,22043=>3986,22039=>3987,22013=>3988,22036=>3989,22022=>3990,22025=>3991,22029=>3992,22030=>3993,22007=>3994,22038=>3995,22047=>3996,22024=>3997,22032=>3998,22006=>3999,22296=>4000,22294=>4001,22645=>4002,22654=>4003,22659=>4004,22675=>4005,22666=>4006,22649=>4007,22661=>4008,22653=>4009,22781=>4010,22821=>4011,22818=>4012,22820=>4013,22890=>4014,22889=>4015,23265=>4016,23270=>4017,23273=>4018,23255=>4019,23254=>4020,23256=>4021,23267=>4022,23413=>4023,23518=>4024,23527=>4025,23521=>4026,23525=>4027,23526=>4028,23528=>4029,23522=>4030,23524=>4031,23519=>4032,23565=>4033,23650=>4034,23940=>4035,23943=>4036,24155=>4037,24163=>4038,24149=>4039,24151=>4040,24148=>4041,24275=>4042,24278=>4043,24330=>4044,24390=>4045,24432=>4046,24505=>4047,24903=>4048,24895=>4049,24907=>4050,24951=>4051,24930=>4052,24931=>4053,24927=>4054,24922=>4055,24920=>4056,24949=>4057,25130=>4058,25735=>4059,25688=>4060,25684=>4061,25764=>4062,25720=>4063,25695=>4064,25722=>4065,25681=>4066,25703=>4067,25652=>4068,25709=>4069,25723=>4070,25970=>4071,26017=>4072,26071=>4073,26070=>4074,26274=>4075,26280=>4076,26269=>4077,27036=>4078,27048=>4079,27029=>4080,27073=>4081,27054=>4082,27091=>4083,27083=>4084,27035=>4085,27063=>4086,27067=>4087,27051=>4088,27060=>4089,27088=>4090,27085=>4091,27053=>4092,27084=>4093,27046=>4094,27075=>4095,27043=>4096,27465=>4097,27468=>4098,27699=>4099,28467=>4100,28436=>4101,28414=>4102,28435=>4103,28404=>4104,28457=>4105,28478=>4106,28448=>4107,28460=>4108,28431=>4109,28418=>4110,28450=>4111,28415=>4112,28399=>4113,28422=>4114,28465=>4115,28472=>4116,28466=>4117,28451=>4118,28437=>4119,28459=>4120,28463=>4121,28552=>4122,28458=>4123,28396=>4124,28417=>4125,28402=>4126,28364=>4127,28407=>4128,29076=>4129,29081=>4130,29053=>4131,29066=>4132,29060=>4133,29074=>4134,29246=>4135,29330=>4136,29334=>4137,29508=>4138,29520=>4139,29796=>4140,29795=>4141,29802=>4142,29808=>4143,29805=>4144,29956=>4145,30097=>4146,30247=>4147,30221=>4148,30219=>4149,30217=>4150,30227=>4151,30433=>4152,30435=>4153,30596=>4154,30589=>4155,30591=>4156,30561=>4157,30913=>4158,30879=>4159,30887=>4160,30899=>4161,30889=>4162,30883=>4163,31118=>4164,31119=>4165,31117=>4166,31278=>4167,31281=>4168,31402=>4169,31401=>4170,31469=>4171,31471=>4172,31649=>4173,31637=>4174,31627=>4175,31605=>4176,31639=>4177,31645=>4178,31636=>4179,31631=>4180,31672=>4181,58170=>4181,31623=>4182,31620=>4183,31929=>4184,31933=>4185,31934=>4186,32187=>4187,32176=>4188,32156=>4189,32189=>4190,32190=>4191,32160=>4192,32202=>4193,32180=>4194,32178=>4195,32177=>4196,32186=>4197,32162=>4198,32191=>4199,32181=>4200,32184=>4201,32173=>4202,32210=>4203,58202=>4203,32199=>4204,32172=>4205,32624=>4206,32736=>4207,32737=>4208,32735=>4209,32862=>4210,32858=>4211,32903=>4212,33104=>4213,33152=>4214,33167=>4215,33160=>4216,33162=>4217,33151=>4218,33154=>4219,33255=>4220,33274=>4221,33287=>4222,33300=>4223,33310=>4224,33355=>4225,33993=>4226,33983=>4227,33990=>4228,33988=>4229,33945=>4230,33950=>4231,33970=>4232,33948=>4233,33995=>4234,33976=>4235,33984=>4236,34003=>4237,33936=>4238,33980=>4239,34001=>4240,33994=>4241,34623=>4242,34588=>4243,34619=>4244,34594=>4245,34597=>4246,34612=>4247,34584=>4248,34645=>4249,34615=>4250,34601=>4251,35059=>4252,35074=>4253,35060=>4254,35065=>4255,35064=>4256,35069=>4257,35048=>4258,35098=>4259,35055=>4260,35494=>4261,35468=>4262,35486=>4263,35491=>4264,35469=>4265,35489=>4266,35475=>4267,35492=>4268,35498=>4269,35493=>4270,35496=>4271,35480=>4272,35473=>4273,35482=>4274,35495=>4275,35946=>4276,35981=>4277,35980=>4278,36051=>4279,36049=>4280,36050=>4281,36203=>4282,36249=>4283,36245=>4284,36348=>4285,36628=>4286,36626=>4287,36629=>4288,36627=>4289,36771=>4290,36960=>4291,36952=>4292,36956=>4293,36963=>4294,36953=>4295,36958=>4296,36962=>4297,36957=>4298,36955=>4299,37145=>4300,37144=>4301,37150=>4302,37237=>4303,37240=>4304,37239=>4305,37236=>4306,37496=>4307,37548=>4308,37504=>4309,37509=>4310,37528=>4311,37526=>4312,37499=>4313,37523=>4314,37532=>4315,37544=>4316,37500=>4317,37521=>4318,38305=>4319,38312=>4320,38313=>4321,38307=>4322,38309=>4323,38308=>4324,38553=>4325,38556=>4326,38555=>4327,38604=>4328,38610=>4329,38656=>4330,38780=>4331,38789=>4332,38902=>4333,38935=>4334,38936=>4335,39087=>4336,39089=>4337,39171=>4338,39173=>4339,39180=>4340,39177=>4341,39361=>4342,39599=>4343,39600=>4344,39654=>4345,39745=>4346,39746=>4347,40180=>4348,40182=>4349,40179=>4350,40636=>4351,40763=>4352,12240=>4352,40778=>4353,12241=>4353,20740=>4354,20736=>4355,20731=>4356,20725=>4357,20729=>4358,20738=>4359,20744=>4360,20745=>4361,20741=>4362,20956=>4363,21127=>4364,21128=>4365,21129=>4366,21133=>4367,21130=>4368,21232=>4369,21426=>4370,22062=>4371,22075=>4372,22073=>4373,22066=>4374,22079=>4375,22068=>4376,22057=>4377,22099=>4378,22094=>4379,22103=>4380,22132=>4381,22070=>4382,22063=>4383,22064=>4384,22656=>4385,22687=>4386,22686=>4387,22707=>4388,22684=>4389,22702=>4390,22697=>4391,22694=>4392,22893=>4393,23305=>4394,23291=>4395,23307=>4396,23285=>4397,23308=>4398,23304=>4399,23534=>4400,23532=>4401,23529=>4402,23531=>4403,23652=>4404,23653=>4405,23965=>4406,23956=>4407,24162=>4408,24159=>4409,24161=>4410,24290=>4411,24282=>4412,24287=>4413,24285=>4414,24291=>4415,24288=>4416,24392=>4417,24433=>4418,24503=>4419,24501=>4420,24950=>4421,24935=>4422,24942=>4423,24925=>4424,24917=>4425,24962=>4426,24956=>4427,24944=>4428,24939=>4429,24958=>4430,24999=>4431,24976=>4432,25003=>4433,24974=>4434,25004=>4435,24986=>4436,24996=>4437,24980=>4438,25006=>4439,25134=>4440,25705=>4441,25711=>4442,25721=>4443,25758=>4444,25778=>4445,25736=>4446,25744=>4447,57745=>4447,25776=>4448,25765=>4449,25747=>4450,25749=>4451,25769=>4452,25746=>4453,25774=>4454,25773=>4455,25771=>4456,25754=>4457,25772=>4458,25753=>4459,25762=>4460,25779=>4461,25973=>4462,25975=>4463,25976=>4464,26286=>4465,26283=>4466,26292=>4467,26289=>4468,27171=>4469,27167=>4470,27112=>4471,27137=>4472,27166=>4473,27161=>4474,27133=>4475,27169=>4476,27155=>4477,27146=>4478,27123=>4479,27138=>4480,27141=>4481,27117=>4482,27153=>4483,27472=>4484,27470=>4485,27556=>4486,27589=>4487,27590=>4488,28479=>4489,28540=>4490,28548=>4491,28497=>4492,28518=>4493,28500=>4494,28550=>4495,28525=>4496,28507=>4497,28536=>4498,28526=>4499,28558=>4500,28538=>4501,28528=>4502,28516=>4503,28567=>4504,28504=>4505,28373=>4506,28527=>4507,28512=>4508,28511=>4509,29087=>4510,29100=>4511,29105=>4512,29096=>4513,29270=>4514,29339=>4515,29518=>4516,29527=>4517,29801=>4518,29835=>4519,29827=>4520,29822=>4521,29824=>4522,30079=>4523,30240=>4524,30249=>4525,30239=>4526,30244=>4527,30246=>4528,30241=>4529,30242=>4530,30362=>4531,30394=>4532,30436=>4533,30606=>4534,30599=>4535,30604=>4536,30609=>4537,30603=>4538,30923=>4539,30917=>4540,30906=>4541,30922=>4542,30910=>4543,30933=>4544,30908=>4545,30928=>4546,31295=>4547,31292=>4548,31296=>4549,31293=>4550,31287=>4551,31291=>4552,31407=>4553,31406=>4554,31661=>4555,31665=>4556,31684=>4557,31668=>4558,31686=>4559,31687=>4560,31681=>4561,31648=>4562,31692=>4563,31946=>4564,32224=>4565,32244=>4566,32239=>4567,32251=>4568,32216=>4569,32236=>4570,32221=>4571,32232=>4572,32227=>4573,32218=>4574,32222=>4575,32233=>4576,32158=>4577,32217=>4578,32242=>4579,32249=>4580,32629=>4581,32631=>4582,32687=>4583,32745=>4584,32806=>4585,33179=>4586,33180=>4587,33181=>4588,33184=>4589,33178=>4590,33176=>4591,34071=>4592,34109=>4593,34074=>4594,34030=>4595,34092=>4596,34093=>4597,34067=>4598,34065=>4599,34083=>4600,34081=>4601,34068=>4602,34028=>4603,34085=>4604,34047=>4605,34054=>4606,34690=>4607,34676=>4608,34678=>4609,34656=>4610,34662=>4611,34680=>4612,34664=>4613,34649=>4614,34647=>4615,34636=>4616,34643=>4617,34907=>4618,34909=>4619,35088=>4620,35079=>4621,35090=>4622,35091=>4623,35093=>4624,35082=>4625,35516=>4626,35538=>4627,35527=>4628,35524=>4629,35477=>4630,35531=>4631,35576=>4632,35506=>4633,35529=>4634,35522=>4635,35519=>4636,35504=>4637,35542=>4638,35533=>4639,35510=>4640,35513=>4641,35547=>4642,35916=>4643,35918=>4644,35948=>4645,36064=>4646,36062=>4647,36070=>4648,36068=>4649,36076=>4650,36077=>4651,36066=>4652,36067=>4653,36060=>4654,36074=>4655,36065=>4656,36205=>4657,36255=>4658,36259=>4659,36395=>4660,36368=>4661,36381=>4662,36386=>4663,36367=>4664,36393=>4665,36383=>4666,36385=>4667,36382=>4668,36538=>4669,36637=>4670,36635=>4671,36639=>4672,36649=>4673,36646=>4674,36650=>4675,36636=>4676,36638=>4677,36645=>4678,36969=>4679,36974=>4680,36968=>4681,36973=>4682,36983=>4683,37168=>4684,37165=>4685,37159=>4686,37169=>4687,37255=>4688,37257=>4689,37259=>4690,37251=>4691,37573=>4692,37563=>4693,37559=>4694,37610=>4695,37604=>4696,37569=>4697,37555=>4698,37564=>4699,37586=>4700,37575=>4701,37616=>4702,37554=>4703,38317=>4704,38321=>4705,38660=>4706,38662=>4707,38663=>4708,38665=>4709,38752=>4710,38797=>4711,38795=>4712,38799=>4713,38945=>4714,38955=>4715,38940=>4716,39091=>4717,39178=>4718,39187=>4719,39186=>4720,39192=>4721,39389=>4722,39376=>4723,39391=>4724,39387=>4725,39377=>4726,39381=>4727,39378=>4728,39385=>4729,39607=>4730,39662=>4731,39663=>4732,39719=>4733,39749=>4734,39748=>4735,39799=>4736,39791=>4737,40198=>4738,40201=>4739,40195=>4740,40617=>4741,40638=>4742,40654=>4743,22696=>4744,12242=>4745,40786=>4745,20754=>4746,20760=>4747,20756=>4748,20752=>4749,20757=>4750,20864=>4751,20906=>4752,20957=>4753,21137=>4754,21139=>4755,21235=>4756,22105=>4757,22123=>4758,22137=>4759,22121=>4760,22116=>4761,22136=>4762,22122=>4763,22120=>4764,22117=>4765,22129=>4766,22127=>4767,22124=>4768,22114=>4769,22134=>4770,22721=>4771,22718=>4772,22727=>4773,22725=>4774,22894=>4775,23325=>4776,23348=>4777,23416=>4778,23536=>4779,23566=>4780,24394=>4781,25010=>4782,24977=>4783,25001=>4784,24970=>4785,25037=>4786,25014=>4787,25022=>4788,25034=>4789,25032=>4790,25136=>4791,25797=>4792,25793=>4793,25803=>4794,25787=>4795,25788=>4796,25818=>4797,25796=>4798,25799=>4799,25794=>4800,25805=>4801,25791=>4802,25810=>4803,25812=>4804,25790=>4805,25972=>4806,26310=>4807,26313=>4808,26297=>4809,26308=>4810,26311=>4811,26296=>4812,27197=>4813,27192=>4814,27194=>4815,27225=>4816,27243=>4817,27224=>4818,27193=>4819,27204=>4820,27234=>4821,27233=>4822,27211=>4823,27207=>4824,27189=>4825,27231=>4826,27208=>4827,27481=>4828,27511=>4829,27653=>4830,28610=>4831,28593=>4832,28577=>4833,28611=>4834,28580=>4835,28609=>4836,28583=>4837,28595=>4838,28608=>4839,28601=>4840,28598=>4841,60318=>4841,28582=>4842,28576=>4843,28596=>4844,29118=>4845,29129=>4846,29136=>4847,29138=>4848,29128=>4849,29141=>4850,29113=>4851,29134=>4852,29145=>4853,29148=>4854,29123=>4855,29124=>4856,29544=>4857,29852=>4858,29859=>4859,29848=>4860,29855=>4861,29854=>4862,29922=>4863,29964=>4864,29965=>4865,30260=>4866,30264=>4867,30266=>4868,30439=>4869,30437=>4870,30624=>4871,30622=>4872,30623=>4873,30629=>4874,30952=>4875,30938=>4876,30956=>4877,30951=>4878,31142=>4879,31309=>4880,31310=>4881,31302=>4882,31308=>4883,31307=>4884,31418=>4885,31705=>4886,31761=>4887,31689=>4888,31716=>4889,31707=>4890,31713=>4891,31721=>4892,31718=>4893,31957=>4894,31958=>4895,32266=>4896,32273=>4897,32264=>4898,32283=>4899,32291=>4900,32286=>4901,32285=>4902,58211=>4902,32265=>4903,32272=>4904,32633=>4905,32690=>4906,32752=>4907,32753=>4908,32750=>4909,32808=>4910,58239=>4910,33203=>4911,33193=>4912,33192=>4913,33275=>4914,33288=>4915,33368=>4916,33369=>4917,34122=>4918,34137=>4919,34120=>4920,34152=>4921,34153=>4922,34115=>4923,34121=>4924,34157=>4925,34154=>4926,34142=>4927,34691=>4928,34719=>4929,34718=>4930,34722=>4931,34701=>4932,34913=>4933,35114=>4934,35122=>4935,35109=>4936,35115=>4937,35105=>4938,35242=>4939,35238=>4940,58391=>4940,35558=>4941,35578=>4942,35563=>4943,35569=>4944,35584=>4945,35548=>4946,35559=>4947,35566=>4948,35582=>4949,35585=>4950,35586=>4951,35575=>4952,35565=>4953,35571=>4954,35574=>4955,35580=>4956,35947=>4957,35949=>4958,35987=>4959,36084=>4960,36420=>4961,36401=>4962,36404=>4963,36418=>4964,36409=>4965,36405=>4966,36667=>4967,36655=>4968,36664=>4969,36659=>4970,36776=>4971,36774=>4972,36981=>4973,36980=>4974,36984=>4975,36978=>4976,36988=>4977,36986=>4978,37172=>4979,37266=>4980,37664=>4981,37686=>4982,37624=>4983,37683=>4984,37679=>4985,37666=>4986,37628=>4987,37675=>4988,37636=>4989,37658=>4990,37648=>4991,37670=>4992,37665=>4993,37653=>4994,37678=>4995,37657=>4996,38331=>4997,38567=>4998,38568=>4999,38570=>5000,38613=>5001,38670=>5002,38673=>5003,38678=>5004,38669=>5005,38675=>5006,38671=>5007,38747=>5008,58565=>5009,38748=>5009,38758=>5010,38808=>5011,38960=>5012,38968=>5013,38971=>5014,38967=>5015,38957=>5016,38969=>5017,38948=>5018,39184=>5019,39208=>5020,39198=>5021,39195=>5022,39201=>5023,39194=>5024,39405=>5025,39394=>5026,39409=>5027,39608=>5028,39612=>5029,39675=>5030,39661=>5031,39720=>5032,39825=>5033,40213=>5034,40227=>5035,40230=>5036,40232=>5037,40210=>5038,40219=>5039,40664=>5040,40660=>5041,40845=>5042,12243=>5042,40860=>5043,12244=>5043,20778=>5044,20767=>5045,20769=>5046,20786=>5047,21237=>5048,22158=>5049,22144=>5050,22160=>5051,22149=>5052,22151=>5053,22159=>5054,22741=>5055,22739=>5056,22737=>5057,22734=>5058,23344=>5059,23338=>5060,23332=>5061,23418=>5062,23607=>5063,23656=>5064,23996=>5065,23994=>5066,23997=>5067,23992=>5068,24171=>5069,24396=>5070,24509=>5071,25033=>5072,25026=>5073,25031=>5074,25062=>5075,25035=>5076,25138=>5077,25140=>5078,25806=>5079,25802=>5080,25816=>5081,25824=>5082,25840=>5083,25830=>5084,25836=>5085,25841=>5086,25826=>5087,25837=>5088,25986=>5089,25987=>5090,26329=>5091,26326=>5092,27264=>5093,27284=>5094,27268=>5095,27298=>5096,27292=>5097,27355=>5098,27299=>5099,27262=>5100,27287=>5101,27280=>5102,27296=>5103,27484=>5104,27566=>5105,27610=>5106,27656=>5107,28632=>5108,28657=>5109,28639=>5110,28640=>5111,28635=>5112,28644=>5113,28651=>5114,28655=>5115,28544=>5116,28652=>5117,28641=>5118,28649=>5119,28629=>5120,28654=>5121,28656=>5122,29159=>5123,29151=>5124,60361=>5124,29166=>5125,29158=>5126,29157=>5127,29165=>5128,29164=>5129,29172=>5130,29152=>5131,29237=>5132,29254=>5133,29552=>5134,29554=>5135,29865=>5136,29872=>5137,29862=>5138,29864=>5139,30278=>5140,30274=>5141,30284=>5142,30442=>5143,30643=>5144,30634=>5145,30640=>5146,30636=>5147,30631=>5148,30637=>5149,30703=>5150,30967=>5151,30970=>5152,30964=>5153,30959=>5154,30977=>5155,31143=>5156,31146=>5157,31319=>5158,31423=>5159,31751=>5160,31757=>5161,31742=>5162,31735=>5163,31756=>5164,31712=>5165,31968=>5166,31964=>5167,31966=>5168,31970=>5169,31967=>5170,31961=>5171,31965=>5172,32302=>5173,32318=>5174,32326=>5175,32311=>5176,32306=>5177,32323=>5178,32299=>5179,32317=>5180,32305=>5181,32325=>5182,32321=>5183,32308=>5184,32313=>5185,32328=>5186,32309=>5187,32319=>5188,32303=>5189,32580=>5190,32755=>5191,32764=>5192,32881=>5193,32882=>5194,32880=>5195,32879=>5196,32883=>5197,33222=>5198,33219=>5199,33210=>5200,33218=>5201,33216=>5202,33215=>5203,33213=>5204,33225=>5205,33214=>5206,33256=>5207,33289=>5208,33393=>5209,34218=>5210,34180=>5211,34174=>5212,34204=>5213,34193=>5214,34196=>5215,34223=>5216,34203=>5217,34183=>5218,34216=>5219,34186=>5220,34214=>5221,34407=>5222,34752=>5223,34769=>5224,34739=>5225,34770=>5226,34758=>5227,34731=>5228,34747=>5229,34746=>5230,34760=>5231,34763=>5232,35131=>5233,35126=>5234,35140=>5235,35128=>5236,35133=>5237,35244=>5238,35598=>5239,35607=>5240,35609=>5241,35611=>5242,35594=>5243,35616=>5244,35613=>5245,35588=>5246,35600=>5247,35905=>5248,35903=>5249,35955=>5250,36090=>5251,36093=>5252,36092=>5253,36088=>5254,36091=>5255,36264=>5256,36425=>5257,36427=>5258,36424=>5259,36426=>5260,36676=>5261,36670=>5262,36674=>5263,36677=>5264,36671=>5265,36991=>5266,36989=>5267,36996=>5268,36993=>5269,36994=>5270,36992=>5271,37177=>5272,37283=>5273,37278=>5274,37276=>5275,37709=>5276,37762=>5277,37672=>5278,37749=>5279,37706=>5280,37733=>5281,37707=>5282,37656=>5283,37758=>5284,37740=>5285,37723=>5286,37744=>5287,37722=>5288,37716=>5289,38346=>5290,38347=>5291,38348=>5292,38344=>5293,38342=>5294,38577=>5295,38584=>5296,38614=>5297,38684=>5298,38686=>5299,38816=>5300,38867=>5301,38982=>5302,39094=>5303,39221=>5304,39425=>5305,39423=>5306,39854=>5307,39851=>5308,39850=>5309,39853=>5310,40251=>5311,40255=>5312,40587=>5313,40655=>5314,40670=>5315,40668=>5316,40669=>5317,40667=>5318,40766=>5319,40779=>5320,21474=>5321,22165=>5322,22190=>5323,22745=>5324,22744=>5325,23352=>5326,24413=>5327,25059=>5328,25139=>5329,25844=>5330,25842=>5331,25854=>5332,25862=>5333,25850=>5334,25851=>5335,25847=>5336,26039=>5337,26332=>5338,26406=>5339,27315=>5340,27308=>5341,27331=>5342,27323=>5343,27320=>5344,27330=>5345,27310=>5346,27311=>5347,27487=>5348,27512=>5349,27567=>5350,28681=>5351,28683=>5352,28670=>5353,28678=>5354,28666=>5355,28689=>5356,28687=>5357,29179=>5358,29180=>5359,29182=>5360,29176=>5361,29559=>5362,29557=>5363,29863=>5364,29887=>5365,29973=>5366,30294=>5367,30296=>5368,30290=>5369,30653=>5370,30655=>5371,30651=>5372,30652=>5373,30990=>5374,31150=>5375,31329=>5376,31330=>5377,31328=>5378,31428=>5379,31429=>5380,31787=>5381,31783=>5382,31786=>5383,31774=>5384,31779=>5385,31777=>5386,31975=>5387,32340=>5388,32341=>5389,32350=>5390,32346=>5391,32353=>5392,32338=>5393,32345=>5394,32584=>5395,32761=>5396,32763=>5397,32887=>5398,32886=>5399,33229=>5400,33231=>5401,33290=>5402,34255=>5403,34217=>5404,34253=>5405,34256=>5406,34249=>5407,34224=>5408,34234=>5409,34233=>5410,34799=>5411,34796=>5412,34802=>5413,34784=>5414,35206=>5415,35250=>5416,35316=>5417,35624=>5418,35641=>5419,35628=>5420,35627=>5421,35920=>5422,36101=>5423,36441=>5424,36451=>5425,36454=>5426,36452=>5427,36447=>5428,36437=>5429,36544=>5430,36681=>5431,36685=>5432,36999=>5433,36995=>5434,37000=>5435,37291=>5436,37292=>5437,37328=>5438,37780=>5439,37770=>5440,37782=>5441,37794=>5442,37811=>5443,37806=>5444,37804=>5445,37808=>5446,37784=>5447,37786=>5448,37783=>5449,38356=>5450,38358=>5451,38352=>5452,38357=>5453,38626=>5454,38620=>5455,38617=>5456,38619=>5457,38622=>5458,38692=>5459,38819=>5460,38822=>5461,38829=>5462,38905=>5463,38989=>5464,38991=>5465,38988=>5466,38990=>5467,38995=>5468,39098=>5469,39230=>5470,39231=>5471,39229=>5472,39214=>5473,39333=>5474,39438=>5475,39617=>5476,39683=>5477,39686=>5478,39759=>5479,39758=>5480,39757=>5481,39882=>5482,39881=>5483,39933=>5484,39880=>5485,39872=>5486,40273=>5487,40285=>5488,40288=>5489,40672=>5490,40725=>5491,40748=>5492,20787=>5493,22181=>5494,22184=>5495,22750=>5496,22751=>5497,22754=>5498,23541=>5499,40848=>5500,24300=>5501,25074=>5502,25079=>5503,25078=>5504,25077=>5505,25856=>5506,25871=>5507,26336=>5508,26333=>5509,27365=>5510,27357=>5511,27354=>5512,27347=>5513,28699=>5514,28703=>5515,28712=>5516,28698=>5517,28701=>5518,28693=>5519,28696=>5520,29190=>5521,29197=>5522,29272=>5523,29346=>5524,29560=>5525,29562=>5526,29885=>5527,29898=>5528,29923=>5529,30087=>5530,30086=>5531,30303=>5532,30305=>5533,30663=>5534,31001=>5535,31153=>5536,31339=>5537,31337=>5538,31806=>5539,31807=>5540,31800=>5541,31805=>5542,31799=>5543,31808=>5544,32363=>5545,32365=>5546,32377=>5547,32361=>5548,32362=>5549,32371=>5550,32645=>5551,32694=>5552,32697=>5553,32696=>5554,33240=>5555,34281=>5556,34269=>5557,34282=>5558,34261=>5559,34276=>5560,34277=>5561,34295=>5562,34811=>5563,34821=>5564,34829=>5565,34809=>5566,34814=>5567,35168=>5568,35167=>5569,35158=>5570,35166=>5571,35649=>5572,35676=>5573,35672=>5574,35657=>5575,35674=>5576,35662=>5577,35663=>5578,35654=>5579,35673=>5580,36104=>5581,36106=>5582,36476=>5583,36466=>5584,36487=>5585,36470=>5586,36460=>5587,36474=>5588,36468=>5589,36692=>5590,36686=>5591,36781=>5592,37002=>5593,37003=>5594,37297=>5595,37294=>5596,37857=>5597,37841=>5598,37855=>5599,37827=>5600,37832=>5601,37852=>5602,37853=>5603,37846=>5604,37858=>5605,37837=>5606,37848=>5607,37860=>5608,37847=>5609,37864=>5610,38364=>5611,38580=>5612,38627=>5613,38698=>5614,38695=>5615,38753=>5616,38876=>5617,38907=>5618,39006=>5619,39000=>5620,39003=>5621,39100=>5622,39237=>5623,39241=>5624,39446=>5625,39449=>5626,39693=>5627,39912=>5628,39911=>5629,39894=>5630,39899=>5631,40329=>5632,40289=>5633,40306=>5634,40298=>5635,40300=>5636,40594=>5637,40599=>5638,40595=>5639,40628=>5640,21240=>5641,22199=>5642,22198=>5643,22196=>5644,22204=>5645,22756=>5646,23360=>5647,23363=>5648,23421=>5649,23542=>5650,24009=>5651,25080=>5652,25082=>5653,25880=>5654,25876=>5655,25881=>5656,26342=>5657,26407=>5658,27372=>5659,28734=>5660,28720=>5661,28722=>5662,29200=>5663,29563=>5664,29903=>5665,30306=>5666,30309=>5667,31014=>5668,31018=>5669,31020=>5670,31019=>5671,31431=>5672,31478=>5673,31820=>5674,31811=>5675,31821=>5676,31983=>5677,31984=>5678,36782=>5679,32381=>5680,32380=>5681,32386=>5682,32588=>5683,32768=>5684,33242=>5685,33382=>5686,34299=>5687,34297=>5688,34321=>5689,34298=>5690,34310=>5691,34315=>5692,34311=>5693,34314=>5694,34836=>5695,34837=>5696,35172=>5697,35258=>5698,35320=>5699,35696=>5700,35692=>5701,35686=>5702,35695=>5703,35679=>5704,35691=>5705,36111=>5706,36109=>5707,36489=>5708,36481=>5709,36485=>5710,36482=>5711,37300=>5712,37323=>5713,37912=>5714,37891=>5715,37885=>5716,38369=>5717,38704=>5718,39108=>5719,39250=>5720,39249=>5721,39336=>5722,39467=>5723,39472=>5724,39479=>5725,39477=>5726,39955=>5727,39949=>5728,40569=>5729,40629=>5730,40680=>5731,40751=>5732,40799=>5733,40803=>5734,40801=>5735,20791=>5736,20792=>5737,22209=>5738,22208=>5739,22210=>5740,22804=>5741,23660=>5742,24013=>5743,25084=>5744,25086=>5745,25885=>5746,25884=>5747,26005=>5748,26345=>5749,27387=>5750,27396=>5751,27386=>5752,27570=>5753,28748=>5754,29211=>5755,29351=>5756,29910=>5757,29908=>5758,30313=>5759,30675=>5760,31824=>5761,32399=>5762,32396=>5763,32700=>5764,34327=>5765,34349=>5766,34330=>5767,34851=>5768,34850=>5769,34849=>5770,34847=>5771,35178=>5772,35180=>5773,35261=>5774,35700=>5775,35703=>5776,35709=>5777,36115=>5778,36490=>5779,36493=>5780,36491=>5781,36703=>5782,36783=>5783,37306=>5784,37934=>5785,37939=>5786,37941=>5787,37946=>5788,37944=>5789,37938=>5790,37931=>5791,38370=>5792,38712=>5793,38713=>5794,38706=>5795,38911=>5796,58586=>5796,39015=>5797,39013=>5798,39255=>5799,39493=>5800,39491=>5801,39488=>5802,39486=>5803,39631=>5804,39764=>5805,39761=>5806,39981=>5807,39973=>5808,40367=>5809,40372=>5810,40386=>5811,40376=>5812,40605=>5813,40687=>5814,40729=>5815,40796=>5816,40806=>5817,40807=>5818,20796=>5819,20795=>5820,22216=>5821,22218=>5822,22217=>5823,23423=>5824,24020=>5825,24018=>5826,24398=>5827,25087=>5828,25892=>5829,27402=>5830,27489=>5831,28753=>5832,28760=>5833,29568=>5834,29924=>5835,30090=>5836,30318=>5837,30316=>5838,31155=>5839,31840=>5840,31839=>5841,32894=>5842,32893=>5843,33247=>5844,35186=>5845,35183=>5846,35324=>5847,35712=>5848,36118=>5849,36119=>5850,36497=>5851,36499=>5852,36705=>5853,37192=>5854,37956=>5855,37969=>5856,37970=>5857,38717=>5858,38718=>5859,38851=>5860,38849=>5861,39019=>5862,39253=>5863,39509=>5864,39501=>5865,39634=>5866,39706=>5867,40009=>5868,39985=>5869,39998=>5870,39995=>5871,40403=>5872,40407=>5873,40756=>5874,40812=>5875,40810=>5876,40852=>5877,22220=>5878,24022=>5879,25088=>5880,25891=>5881,25899=>5882,25898=>5883,26348=>5884,27408=>5885,29914=>5886,31434=>5887,31844=>5888,31843=>5889,31845=>5890,32403=>5891,32406=>5892,32404=>5893,33250=>5894,34360=>5895,34367=>5896,34865=>5897,35722=>5898,37008=>5899,37007=>5900,37987=>5901,37984=>5902,37988=>5903,38760=>5904,39023=>5905,39260=>5906,39514=>5907,39515=>5908,39511=>5909,39635=>5910,39636=>5911,39633=>5912,40020=>5913,40023=>5914,40022=>5915,40421=>5916,40607=>5917,40692=>5918,22225=>5919,22761=>5920,25900=>5921,28766=>5922,30321=>5923,30322=>5924,30679=>5925,60226=>5925,32592=>5926,32648=>5927,34870=>5928,34873=>5929,34914=>5930,35731=>5931,35730=>5932,35734=>5933,33399=>5934,36123=>5935,37312=>5936,37994=>5937,38722=>5938,38728=>5939,38724=>5940,38854=>5941,39024=>5942,39519=>5943,39714=>5944,39768=>5945,40031=>5946,40441=>5947,40442=>5948,40572=>5949,40573=>5950,40711=>5951,40823=>5952,40818=>5953,24307=>5954,27414=>5955,28771=>5956,31852=>5957,31854=>5958,34875=>5959,35264=>5960,36513=>5961,37313=>5962,38002=>5963,38000=>5964,39025=>5965,39262=>5966,39638=>5967,39715=>5968,40652=>5969,28772=>5970,30682=>5971,35738=>5972,38007=>5973,38857=>5974,39522=>5975,39525=>5976,32412=>5977,35740=>5978,36522=>5979,37317=>5980,38013=>5981,38014=>5982,38012=>5983,40055=>5984,40056=>5985,40695=>5986,35924=>5987,38015=>5988,40474=>5989,29224=>5990,39530=>5991,39729=>5992,40475=>5993,40478=>5994,31858=>5995,20034=>5996,20060=>5997,12048=>5998,20981=>5998,12053=>5999,21274=>5999,12058=>6000,21378=>6000,19975=>6001,19980=>6002,20039=>6003,20109=>6004,12062=>6005,22231=>6005,12076=>6006,23662=>6006,12091=>6007,24435=>6007,19983=>6008,20871=>6009,19982=>6010,20014=>6011,20115=>6012,20162=>6013,20169=>6014,20168=>6015,20888=>6016,21244=>6017,21356=>6018,21433=>6019,22304=>6020,22787=>6021,22828=>6022,23568=>6023,60417=>6023,24063=>6024,26081=>6025,12110=>6026,27571=>6026,27596=>6027,12115=>6028,27668=>6028,12121=>6029,29247=>6029,20017=>6030,20028=>6031,20200=>6032,20188=>6033,20201=>6034,20193=>6035,20189=>6036,20186=>6037,21004=>6038,21001=>6039,21276=>6040,21324=>6041,22306=>6042,22307=>6043,22807=>6044,22831=>6045,23425=>6046,23428=>6047,23570=>6048,23611=>6049,23668=>6050,23667=>6051,24068=>6052,24192=>6053,24194=>6054,24521=>6055,25097=>6056,25168=>6057,27669=>6058,27702=>6059,27715=>6060,27711=>6061,27707=>6062,29358=>6063,29360=>6064,29578=>6065,12145=>6066,31160=>6066,32906=>6067,38430=>6068,20238=>6069,20248=>6070,20268=>6071,20213=>6072,20244=>6073,20209=>6074,20224=>6075,20215=>6076,20232=>6077,20253=>6078,20226=>6079,20229=>6080,20258=>6081,20243=>6082,20228=>6083,20212=>6084,20242=>6085,20913=>6086,21011=>6087,21008=>6088,21158=>6089,21282=>6090,21279=>6091,21325=>6092,21386=>6093,21511=>6094,22241=>6095,22239=>6096,22318=>6097,22314=>6098,22324=>6099,22844=>6100,22912=>6101,22908=>6102,22917=>6103,22907=>6104,22910=>6105,22903=>6106,22911=>6107,23382=>6108,23573=>6109,23589=>6110,23676=>6111,23674=>6112,23675=>6113,23678=>6114,24031=>6115,24181=>6116,57646=>6116,24196=>6117,24322=>6118,24346=>6119,24436=>6120,24533=>6121,24532=>6122,24527=>6123,25180=>6124,25182=>6125,25188=>6126,25185=>6127,25190=>6128,25186=>6129,25177=>6130,25184=>6131,25178=>6132,25189=>6133,25911=>6134,26095=>6135,26094=>6136,26430=>6137,26425=>6138,26424=>6139,26427=>6140,26426=>6141,26431=>6142,26428=>6143,26419=>6144,27672=>6145,27718=>6146,27730=>6147,27740=>6148,27727=>6149,27722=>6150,60796=>6150,27732=>6151,27723=>6152,27724=>6153,28785=>6154,29278=>6155,29364=>6156,29365=>6157,29582=>6158,29994=>6159,30335=>6160,31349=>6161,12153=>6162,32593=>6162,12171=>6163,33400=>6163,33404=>6164,33408=>6165,33405=>6166,33407=>6167,12172=>6168,34381=>6168,12177=>6169,35198=>6169,37017=>6170,59347=>6171,37015=>6171,37016=>6172,37019=>6173,37012=>6174,38434=>6175,38436=>6176,38432=>6177,38435=>6178,20310=>6179,20283=>6180,20322=>6181,20297=>6182,20307=>6183,20324=>6184,20286=>6185,20327=>6186,20306=>6187,20319=>6188,20289=>6189,20312=>6190,20269=>6191,20275=>6192,20287=>6193,20321=>6194,20879=>6195,20921=>6196,21020=>6197,21022=>6198,21025=>6199,21165=>6200,21166=>6201,21257=>6202,21347=>6203,21362=>6204,21390=>6205,21391=>6206,21552=>6207,21559=>6208,21546=>6209,21588=>6210,21573=>6211,21529=>6212,21532=>6213,21541=>6214,21528=>6215,21565=>6216,21583=>6217,21569=>6218,21544=>6219,21540=>6220,21575=>6221,22254=>6222,22247=>6223,22245=>6224,22337=>6225,22341=>6226,22348=>6227,22345=>6228,22347=>6229,22354=>6230,22790=>6231,22848=>6232,22950=>6233,22936=>6234,22944=>6235,22935=>6236,22926=>6237,22946=>6238,22928=>6239,22927=>6240,22951=>6241,22945=>6242,23438=>6243,23442=>6244,23592=>6245,23594=>6246,23693=>6247,23695=>6248,23688=>6249,23691=>6250,23689=>6251,23698=>6252,23690=>6253,23686=>6254,23699=>6255,23701=>6256,24032=>6257,24074=>6258,24078=>6259,24203=>6260,24201=>6261,24204=>6262,24200=>6263,24205=>6264,24325=>6265,24349=>6266,24440=>6267,24438=>6268,24530=>6269,24529=>6270,24528=>6271,24557=>6272,24552=>6273,24558=>6274,24563=>6275,24545=>6276,24548=>6277,24547=>6278,24570=>6279,24559=>6280,24567=>6281,24571=>6282,24576=>6283,24564=>6284,25146=>6285,25219=>6286,25228=>6287,25230=>6288,25231=>6289,25236=>6290,25223=>6291,25201=>6292,25211=>6293,25210=>6294,25200=>6295,25217=>6296,25224=>6297,25207=>6298,25213=>6299,25202=>6300,25204=>6301,26096=>6302,26100=>6303,26099=>6304,26098=>6305,26101=>6306,26437=>6307,26439=>6308,26457=>6309,26453=>6310,26444=>6311,26440=>6312,26461=>6313,26445=>6314,26458=>6315,26443=>6316,27600=>6317,27673=>6318,27674=>6319,27768=>6320,27751=>6321,27755=>6322,27780=>6323,27787=>6324,27791=>6325,27761=>6326,27759=>6327,27753=>6328,27802=>6329,27757=>6330,27783=>6331,27797=>6332,27804=>6333,57900=>6333,27750=>6334,27763=>6335,27749=>6336,27771=>6337,27790=>6338,28788=>6339,28794=>6340,29283=>6341,29375=>6342,29373=>6343,29379=>6344,29382=>6345,29377=>6346,29370=>6347,29381=>6348,29589=>6349,29591=>6350,29587=>6351,29588=>6352,29586=>6353,30010=>6354,30009=>6355,30100=>6356,30101=>6357,30337=>6358,31037=>6359,32820=>6360,32917=>6361,32921=>6362,32912=>6363,32914=>6364,32924=>6365,33424=>6366,33423=>6367,33413=>6368,33422=>6369,33425=>6370,33427=>6371,33418=>6372,33411=>6373,33412=>6374,12184=>6375,35960=>6375,36809=>6376,36799=>6377,37023=>6378,37025=>6379,37029=>6380,37022=>6381,37031=>6382,37024=>6383,38448=>6384,38440=>6385,38447=>6386,38445=>6387,20019=>6388,20376=>6389,20348=>6390,20357=>6391,20349=>6392,20352=>6393,20359=>6394,20342=>6395,20340=>6396,20361=>6397,20356=>6398,20343=>6399,20300=>6400,20375=>6401,20330=>6402,20378=>6403,20345=>6404,20353=>6405,20344=>6406,20368=>6407,20380=>6408,20372=>6409,20382=>6410,20370=>6411,20354=>6412,20373=>6413,20331=>6414,20334=>6415,20894=>6416,20924=>6417,20926=>6418,21045=>6419,21042=>6420,21043=>6421,21062=>6422,21041=>6423,21180=>6424,21258=>6425,21259=>6426,21308=>6427,21394=>6428,21396=>6429,21639=>6430,21631=>6431,21633=>6432,21649=>6433,21634=>6434,21640=>6435,21611=>6436,21626=>6437,21630=>6438,21605=>6439,21612=>6440,21620=>6441,21606=>6442,21645=>6443,21615=>6444,21601=>6445,21600=>6446,21656=>6447,21603=>6448,21607=>6449,21604=>6450,22263=>6451,22265=>6452,22383=>6453,22386=>6454,22381=>6455,22379=>6456,22385=>6457,22384=>6458,22390=>6459,22400=>6460,22389=>6461,22395=>6462,22387=>6463,22388=>6464,22370=>6465,22376=>6466,22397=>6467,22796=>6468,22853=>6469,22965=>6470,22970=>6471,22991=>6472,22990=>6473,22962=>6474,22988=>6475,22977=>6476,22966=>6477,22972=>6478,22979=>6479,22998=>6480,22961=>6481,22973=>6482,22976=>6483,22984=>6484,22964=>6485,22983=>6486,23394=>6487,23397=>6488,23443=>6489,23445=>6490,23620=>6491,23623=>6492,23726=>6493,23716=>6494,23712=>6495,23733=>6496,23727=>6497,23720=>6498,23724=>6499,23711=>6500,23715=>6501,23725=>6502,23714=>6503,23722=>6504,23719=>6505,23709=>6506,23717=>6507,23734=>6508,23728=>6509,23718=>6510,24087=>6511,24084=>6512,24089=>6513,24360=>6514,24354=>6515,24355=>6516,24356=>6517,24404=>6518,24450=>6519,24446=>6520,24445=>6521,24542=>6522,24549=>6523,24621=>6524,24614=>6525,24601=>6526,24626=>6527,24587=>6528,24628=>6529,24586=>6530,24599=>6531,24627=>6532,24602=>6533,24606=>6534,24620=>6535,24610=>6536,24589=>6537,24592=>6538,24622=>6539,24595=>6540,24593=>6541,24588=>6542,24585=>6543,24604=>6544,25108=>6545,25149=>6546,25261=>6547,25268=>6548,25297=>6549,25278=>6550,25258=>6551,25270=>6552,25290=>6553,25262=>6554,25267=>6555,25263=>6556,25275=>6557,25257=>6558,25264=>6559,25272=>6560,25917=>6561,26024=>6562,26043=>6563,26121=>6564,26108=>6565,26116=>6566,26130=>6567,26120=>6568,26107=>6569,26115=>6570,26123=>6571,26125=>6572,26117=>6573,26109=>6574,26129=>6575,26128=>6576,26358=>6577,26378=>6578,26501=>6579,26476=>6580,26510=>6581,26514=>6582,26486=>6583,26491=>6584,26520=>6585,26502=>6586,26500=>6587,26484=>6588,26509=>6589,26508=>6590,26490=>6591,26527=>6592,26513=>6593,26521=>6594,26499=>6595,26493=>6596,26497=>6597,26488=>6598,26489=>6599,26516=>6600,27429=>6601,27520=>6602,27518=>6603,27614=>6604,27677=>6605,27795=>6606,27884=>6607,27883=>6608,27886=>6609,27865=>6610,27830=>6611,27860=>6612,27821=>6613,27879=>6614,27831=>6615,27856=>6616,27842=>6617,27834=>6618,27843=>6619,27846=>6620,27885=>6621,27890=>6622,27858=>6623,27869=>6624,27828=>6625,27786=>6626,27805=>6627,27776=>6628,27870=>6629,27840=>6630,27952=>6631,27853=>6632,27847=>6633,27824=>6634,27897=>6635,27855=>6636,27881=>6637,27857=>6638,28820=>6639,28824=>6640,28805=>6641,28819=>6642,28806=>6643,28804=>6644,28817=>6645,28822=>6646,28802=>6647,28826=>6648,28803=>6649,29290=>6650,29398=>6651,29387=>6652,29400=>6653,29385=>6654,29404=>6655,29394=>6656,29396=>6657,29402=>6658,29388=>6659,29393=>6660,29604=>6661,29601=>6662,29613=>6663,29606=>6664,29602=>6665,29600=>6666,29612=>6667,29597=>6668,29917=>6669,29928=>6670,30015=>6671,30016=>6672,30014=>6673,30092=>6674,30104=>6675,30383=>6676,30451=>6677,30449=>6678,30448=>6679,30453=>6680,30712=>6681,30716=>6682,30713=>6683,30715=>6684,30714=>6685,30711=>6686,31042=>6687,31039=>6688,31173=>6689,31352=>6690,31355=>6691,31483=>6692,31861=>6693,31997=>6694,32821=>6695,32911=>6696,32942=>6697,32931=>6698,32952=>6699,32949=>6700,32941=>6701,33312=>6702,33440=>6703,33472=>6704,33451=>6705,33434=>6706,33432=>6707,33435=>6708,33461=>6709,33447=>6710,33454=>6711,33468=>6712,33438=>6713,33466=>6714,33460=>6715,33448=>6716,33441=>6717,33449=>6718,33474=>6719,33444=>6720,33475=>6721,33462=>6722,33442=>6723,34416=>6724,34415=>6725,34413=>6726,34414=>6727,35926=>6728,36818=>6729,36811=>6730,36819=>6731,36813=>6732,36822=>6733,36821=>6734,36823=>6735,37042=>6736,37044=>6737,37039=>6738,37043=>6739,37040=>6740,38457=>6741,38461=>6742,38460=>6743,38458=>6744,38467=>6745,20429=>6746,20421=>6747,20435=>6748,20402=>6749,20425=>6750,20427=>6751,20417=>6752,20436=>6753,20444=>6754,20441=>6755,20411=>6756,60346=>6756,20403=>6757,20443=>6758,20423=>6759,20438=>6760,20410=>6761,20416=>6762,20409=>6763,20460=>6764,21060=>6765,21065=>6766,21184=>6767,21186=>6768,21309=>6769,21372=>6770,21399=>6771,21398=>6772,21401=>6773,21400=>6774,21690=>6775,21665=>6776,21677=>6777,21669=>6778,21711=>6779,21699=>6780,33549=>6781,21687=>6782,21678=>6783,21718=>6784,21686=>6785,21701=>6786,21702=>6787,21664=>6788,21616=>6789,21692=>6790,21666=>6791,21694=>6792,21618=>6793,21726=>6794,21680=>6795,22453=>6796,22430=>6797,22431=>6798,22436=>6799,22412=>6800,22423=>6801,22429=>6802,22427=>6803,22420=>6804,22424=>6805,22415=>6806,22425=>6807,22437=>6808,22426=>6809,22421=>6810,22772=>6811,22797=>6812,22867=>6813,23009=>6814,23006=>6815,23022=>6816,23040=>6817,23025=>6818,23005=>6819,23034=>6820,23037=>6821,23036=>6822,23030=>6823,23012=>6824,23026=>6825,23031=>6826,23003=>6827,23017=>6828,23027=>6829,23029=>6830,23008=>6831,23038=>6832,23028=>6833,23021=>6834,23464=>6835,23628=>6836,23760=>6837,23768=>6838,23756=>6839,23767=>6840,23755=>6841,23771=>6842,23774=>6843,23770=>6844,23753=>6845,23751=>6846,23754=>6847,23766=>6848,23763=>6849,23764=>6850,23759=>6851,23752=>6852,23750=>6853,23758=>6854,23775=>6855,23800=>6856,24057=>6857,24097=>6858,24098=>6859,24099=>6860,24096=>6861,24100=>6862,24240=>6863,24228=>6864,24226=>6865,24219=>6866,24227=>6867,24229=>6868,24327=>6869,24366=>6870,24406=>6871,24454=>6872,24631=>6873,24633=>6874,24660=>6875,24690=>6876,24670=>6877,24645=>6878,24659=>6879,24647=>6880,24649=>6881,24667=>6882,24652=>6883,24640=>6884,24642=>6885,24671=>6886,24612=>6887,24644=>6888,24664=>6889,24678=>6890,24686=>6891,25154=>6892,25155=>6893,25295=>6894,25357=>6895,25355=>6896,25333=>6897,25358=>6898,25347=>6899,25323=>6900,25337=>6901,25359=>6902,25356=>6903,25336=>6904,25334=>6905,25344=>6906,25363=>6907,25364=>6908,25338=>6909,25365=>6910,25339=>6911,25328=>6912,25921=>6913,25923=>6914,26026=>6915,26047=>6916,26166=>6917,26145=>6918,26162=>6919,26165=>6920,26140=>6921,26150=>6922,26146=>6923,26163=>6924,26155=>6925,26170=>6926,26141=>6927,26164=>6928,26169=>6929,26158=>6930,26383=>6931,26384=>6932,26561=>6933,26610=>6934,26568=>6935,26554=>6936,26588=>6937,26555=>6938,26616=>6939,26584=>6940,26560=>6941,26551=>6942,26565=>6943,26603=>6944,26596=>6945,26591=>6946,26549=>6947,26573=>6948,26547=>6949,26615=>6950,26614=>6951,26606=>6952,26595=>6953,26562=>6954,26553=>6955,26574=>6956,26599=>6957,26608=>6958,26546=>6959,26620=>6960,26566=>6961,26605=>6962,26572=>6963,26542=>6964,26598=>6965,26587=>6966,26618=>6967,26569=>6968,26570=>6969,26563=>6970,26602=>6971,26571=>6972,27432=>6973,27522=>6974,27524=>6975,27574=>6976,27606=>6977,27608=>6978,27616=>6979,27680=>6980,27681=>6981,27944=>6982,27956=>6983,27949=>6984,27935=>6985,27964=>6986,27967=>6987,27922=>6988,27914=>6989,27866=>6990,27955=>6991,27908=>6992,27929=>6993,27962=>6994,27930=>6995,27921=>6996,27904=>6997,27933=>6998,27970=>6999,27905=>7000,27928=>7001,27959=>7002,27907=>7003,27919=>7004,27968=>7005,27911=>7006,27936=>7007,27948=>7008,27912=>7009,27938=>7010,27913=>7011,27920=>7012,28855=>7013,28831=>7014,28862=>7015,28849=>7016,28848=>7017,28833=>7018,28852=>7019,28853=>7020,28841=>7021,29249=>7022,29257=>7023,29258=>7024,29292=>7025,29296=>7026,29299=>7027,29294=>7028,29386=>7029,29412=>7030,29416=>7031,29419=>7032,29407=>7033,29418=>7034,29414=>7035,29411=>7036,29573=>7037,29644=>7038,29634=>7039,29640=>7040,29637=>7041,29625=>7042,29622=>7043,29621=>7044,29620=>7045,29675=>7046,29631=>7047,29639=>7048,29630=>7049,29635=>7050,29638=>7051,29624=>7052,29643=>7053,29932=>7054,29934=>7055,29998=>7056,30023=>7057,30024=>7058,30119=>7059,30122=>7060,30329=>7061,30404=>7062,30472=>7063,30467=>7064,30468=>7065,30469=>7066,30474=>7067,30455=>7068,30459=>7069,30458=>7070,30695=>7071,30696=>7072,30726=>7073,30737=>7074,30738=>7075,30725=>7076,30736=>7077,30735=>7078,30734=>7079,30729=>7080,58095=>7080,30723=>7081,30739=>7082,31050=>7083,31052=>7084,31051=>7085,31045=>7086,31044=>7087,31189=>7088,31181=>7089,31183=>7090,31190=>7091,31182=>7092,31360=>7093,31358=>7094,31441=>7095,31488=>7096,31489=>7097,31866=>7098,31864=>7099,31865=>7100,31871=>7101,31872=>7102,31873=>7103,32003=>7104,32008=>7105,32001=>7106,32600=>7107,32657=>7108,32653=>7109,32702=>7110,32775=>7111,32782=>7112,32783=>7113,32788=>7114,32823=>7115,32984=>7116,32967=>7117,32992=>7118,32977=>7119,32968=>7120,32962=>7121,32976=>7122,32965=>7123,32995=>7124,32985=>7125,32988=>7126,32970=>7127,32981=>7128,32969=>7129,32975=>7130,32983=>7131,32998=>7132,32973=>7133,33279=>7134,33313=>7135,33428=>7136,33497=>7137,33534=>7138,33529=>7139,33543=>7140,33512=>7141,33536=>7142,33493=>7143,33594=>7144,33515=>7145,33494=>7146,33524=>7147,33516=>7148,33505=>7149,33522=>7150,33525=>7151,33548=>7152,33531=>7153,33526=>7154,33520=>7155,33514=>7156,33508=>7157,33504=>7158,33530=>7159,33523=>7160,33517=>7161,34423=>7162,34420=>7163,34428=>7164,34419=>7165,34881=>7166,34894=>7167,34919=>7168,34922=>7169,34921=>7170,35283=>7171,35332=>7172,35335=>7173,36210=>7174,36835=>7175,36833=>7176,36846=>7177,36832=>7178,37105=>7179,37053=>7180,37055=>7181,37077=>7182,37061=>7183,37054=>7184,37063=>7185,37067=>7186,37064=>7187,37332=>7188,60294=>7188,37331=>7189,38484=>7190,38479=>7191,38481=>7192,38483=>7193,38474=>7194,38478=>7195,20510=>7196,20485=>7197,20487=>7198,20499=>7199,20514=>7200,20528=>7201,20507=>7202,20469=>7203,20468=>7204,20531=>7205,20535=>7206,20524=>7207,20470=>7208,20471=>7209,20503=>7210,20508=>7211,20512=>7212,20519=>7213,20533=>7214,20527=>7215,20529=>7216,20494=>7217,20826=>7218,20884=>7219,20883=>7220,20938=>7221,20932=>7222,20933=>7223,20936=>7224,20942=>7225,21089=>7226,21082=>7227,21074=>7228,21086=>7229,21087=>7230,21077=>7231,21090=>7232,21197=>7233,21262=>7234,21406=>7235,21798=>7236,21730=>7237,21783=>7238,21778=>7239,21735=>7240,21747=>7241,21732=>7242,21786=>7243,21759=>7244,21764=>7245,21768=>7246,21739=>7247,21777=>7248,21765=>7249,21745=>7250,21770=>7251,21755=>7252,21751=>7253,21752=>7254,21728=>7255,21774=>7256,21763=>7257,21771=>7258,22273=>7259,22274=>7260,22476=>7261,22578=>7262,22485=>7263,22482=>7264,22458=>7265,22470=>7266,22461=>7267,22460=>7268,22456=>7269,22454=>7270,22463=>7271,22471=>7272,22480=>7273,22457=>7274,22465=>7275,22798=>7276,22858=>7277,23065=>7278,23062=>7279,23085=>7280,23086=>7281,23061=>7282,23055=>7283,23063=>7284,23050=>7285,23070=>7286,23091=>7287,23404=>7288,23463=>7289,23469=>7290,23468=>7291,23555=>7292,23638=>7293,23636=>7294,23788=>7295,23807=>7296,23790=>7297,23793=>7298,23799=>7299,23808=>7300,23801=>7301,24105=>7302,24104=>7303,24232=>7304,24238=>7305,24234=>7306,24236=>7307,24371=>7308,24368=>7309,24423=>7310,24669=>7311,24666=>7312,24679=>7313,24641=>7314,24738=>7315,24712=>7316,24704=>7317,24722=>7318,24705=>7319,24733=>7320,24707=>7321,24725=>7322,24731=>7323,24727=>7324,24711=>7325,24732=>7326,24718=>7327,25113=>7328,25158=>7329,25330=>7330,25360=>7331,25430=>7332,25388=>7333,25412=>7334,25413=>7335,25398=>7336,25411=>7337,25572=>7338,25401=>7339,25419=>7340,25418=>7341,25404=>7342,25385=>7343,25409=>7344,25396=>7345,25432=>7346,25428=>7347,25433=>7348,25389=>7349,25415=>7350,25395=>7351,25434=>7352,25425=>7353,25400=>7354,25431=>7355,25408=>7356,25416=>7357,25930=>7358,25926=>7359,26054=>7360,26051=>7361,26052=>7362,26050=>7363,26186=>7364,26207=>7365,26183=>7366,26193=>7367,26386=>7368,26387=>7369,26655=>7370,26650=>7371,26697=>7372,26674=>7373,26675=>7374,26683=>7375,26699=>7376,26703=>7377,26646=>7378,26673=>7379,26652=>7380,26677=>7381,26667=>7382,26669=>7383,26671=>7384,26702=>7385,26692=>7386,26676=>7387,26653=>7388,26642=>7389,26644=>7390,26662=>7391,26664=>7392,26670=>7393,26701=>7394,26682=>7395,26661=>7396,26656=>7397,27436=>7398,27439=>7399,27437=>7400,27441=>7401,27444=>7402,27501=>7403,32898=>7404,27528=>7405,27622=>7406,27620=>7407,27624=>7408,27619=>7409,27618=>7410,27623=>7411,27685=>7412,28026=>7413,28003=>7414,28004=>7415,28022=>7416,27917=>7417,28001=>7418,28050=>7419,27992=>7420,28002=>7421,28013=>7422,28015=>7423,28049=>7424,28045=>7425,28143=>7426,28031=>7427,28038=>7428,27998=>7429,28007=>7430,59078=>7430,28000=>7431,28055=>7432,28016=>7433,28028=>7434,27999=>7435,28034=>7436,28056=>7437,27951=>7438,28008=>7439,28043=>7440,28030=>7441,28032=>7442,28036=>7443,27926=>7444,28035=>7445,28027=>7446,28029=>7447,28021=>7448,28048=>7449,28892=>7450,28883=>7451,28881=>7452,28893=>7453,28875=>7454,32569=>7455,28898=>7456,28887=>7457,28882=>7458,28894=>7459,28896=>7460,28884=>7461,28877=>7462,28869=>7463,28870=>7464,28871=>7465,28890=>7466,28878=>7467,28897=>7468,29250=>7469,29304=>7470,29303=>7471,29302=>7472,29440=>7473,29434=>7474,29428=>7475,29438=>7476,29430=>7477,29427=>7478,29435=>7479,29441=>7480,29651=>7481,29657=>7482,29669=>7483,29654=>7484,29628=>7485,29671=>7486,29667=>7487,29673=>7488,29660=>7489,29650=>7490,29659=>7491,29652=>7492,29661=>7493,29658=>7494,29655=>7495,29656=>7496,29672=>7497,29918=>7498,29919=>7499,29940=>7500,29941=>7501,29985=>7502,30043=>7503,30047=>7504,30128=>7505,30145=>7506,30139=>7507,30148=>7508,30144=>7509,30143=>7510,30134=>7511,30138=>7512,30346=>7513,30409=>7514,30493=>7515,30491=>7516,30480=>7517,30483=>7518,30482=>7519,30499=>7520,30481=>7521,30485=>7522,30489=>7523,30490=>7524,30498=>7525,30503=>7526,30755=>7527,30764=>7528,30754=>7529,30773=>7530,30767=>7531,30760=>7532,30766=>7533,30763=>7534,30753=>7535,30761=>7536,30771=>7537,30762=>7538,30769=>7539,31060=>7540,31067=>7541,31055=>7542,31068=>7543,31059=>7544,31058=>7545,31057=>7546,31211=>7547,31212=>7548,31200=>7549,31214=>7550,31213=>7551,31210=>7552,31196=>7553,31198=>7554,31197=>7555,31366=>7556,31369=>7557,31365=>7558,31371=>7559,31372=>7560,31370=>7561,31367=>7562,31448=>7563,31504=>7564,31492=>7565,31507=>7566,31493=>7567,31503=>7568,31496=>7569,31498=>7570,31502=>7571,31497=>7572,31506=>7573,31876=>7574,31889=>7575,31882=>7576,31884=>7577,31880=>7578,31885=>7579,31877=>7580,32030=>7581,32029=>7582,32017=>7583,32014=>7584,32024=>7585,32022=>7586,32019=>7587,32031=>7588,32018=>7589,32015=>7590,32012=>7591,32604=>7592,32609=>7593,32606=>7594,32608=>7595,32605=>7596,32603=>7597,32662=>7598,32658=>7599,32707=>7600,32706=>7601,32704=>7602,32790=>7603,32830=>7604,32825=>7605,33018=>7606,33010=>7607,33017=>7608,33013=>7609,33025=>7610,33019=>7611,33024=>7612,33281=>7613,33327=>7614,33317=>7615,33587=>7616,33581=>7617,33604=>7618,33561=>7619,33617=>7620,33573=>7621,33622=>7622,33599=>7623,33601=>7624,33574=>7625,33564=>7626,33570=>7627,33602=>7628,33614=>7629,33563=>7630,33578=>7631,33544=>7632,33596=>7633,33613=>7634,33558=>7635,33572=>7636,33568=>7637,33591=>7638,33583=>7639,33577=>7640,33607=>7641,33605=>7642,33612=>7643,33619=>7644,33566=>7645,33580=>7646,33611=>7647,33575=>7648,33608=>7649,34387=>7650,34386=>7651,34466=>7652,34472=>7653,34454=>7654,34445=>7655,34449=>7656,34462=>7657,34439=>7658,34455=>7659,34438=>7660,34443=>7661,34458=>7662,34437=>7663,34469=>7664,34457=>7665,34465=>7666,34471=>7667,34453=>7668,34456=>7669,34446=>7670,34461=>7671,34448=>7672,34452=>7673,34883=>7674,34884=>7675,34925=>7676,34933=>7677,34934=>7678,34930=>7679,34944=>7680,34929=>7681,34943=>7682,34927=>7683,34947=>7684,34942=>7685,34932=>7686,34940=>7687,35346=>7688,35911=>7689,35927=>7690,35963=>7691,36004=>7692,36003=>7693,36214=>7694,36216=>7695,36277=>7696,36279=>7697,36278=>7698,36561=>7699,36563=>7700,36862=>7701,36853=>7702,36866=>7703,36863=>7704,36859=>7705,36868=>7706,36860=>7707,36854=>7708,37078=>7709,37088=>7710,37081=>7711,37082=>7712,37091=>7713,37087=>7714,37093=>7715,37080=>7716,37083=>7717,37079=>7718,37084=>7719,37092=>7720,37200=>7721,37198=>7722,37199=>7723,37333=>7724,37346=>7725,37338=>7726,38492=>7727,38495=>7728,38588=>7729,39139=>7730,12221=>7731,39647=>7731,12223=>7732,39727=>7732,20095=>7733,20592=>7734,20586=>7735,20577=>7736,20574=>7737,20576=>7738,20563=>7739,20555=>7740,20573=>7741,20594=>7742,20552=>7743,20557=>7744,20545=>7745,20571=>7746,20554=>7747,20578=>7748,20501=>7749,20549=>7750,20575=>7751,20585=>7752,20587=>7753,20579=>7754,20580=>7755,20550=>7756,20544=>7757,20590=>7758,20595=>7759,20567=>7760,20561=>7761,20944=>7762,21099=>7763,21101=>7764,21100=>7765,21102=>7766,21206=>7767,21203=>7768,21293=>7769,21404=>7770,21877=>7771,21878=>7772,21820=>7773,21837=>7774,21840=>7775,21812=>7776,21802=>7777,21841=>7778,21858=>7779,21814=>7780,21813=>7781,21808=>7782,21842=>7783,21829=>7784,21772=>7785,21810=>7786,21861=>7787,21838=>7788,21817=>7789,21832=>7790,21805=>7791,21819=>7792,21824=>7793,21835=>7794,22282=>7795,22279=>7796,22523=>7797,22548=>7798,22498=>7799,22518=>7800,22492=>7801,22516=>7802,22528=>7803,22509=>7804,22525=>7805,22536=>7806,22520=>7807,22539=>7808,22515=>7809,22479=>7810,22535=>7811,22510=>7812,22499=>7813,22514=>7814,22501=>7815,22508=>7816,22497=>7817,22542=>7818,22524=>7819,22544=>7820,22503=>7821,22529=>7822,22540=>7823,22513=>7824,22505=>7825,22512=>7826,22541=>7827,22532=>7828,22876=>7829,23136=>7830,23128=>7831,23125=>7832,23143=>7833,60437=>7833,23134=>7834,23096=>7835,23093=>7836,23149=>7837,23120=>7838,23135=>7839,23141=>7840,23148=>7841,23123=>7842,23140=>7843,23127=>7844,23107=>7845,23133=>7846,23122=>7847,23108=>7848,23131=>7849,23112=>7850,23182=>7851,23102=>7852,23117=>7853,23097=>7854,23116=>7855,23152=>7856,23145=>7857,23111=>7858,23121=>7859,23126=>7860,23106=>7861,23132=>7862,23410=>7863,23406=>7864,23489=>7865,23488=>7866,23641=>7867,23838=>7868,23819=>7869,23837=>7870,23834=>7871,23840=>7872,23820=>7873,23848=>7874,23821=>7875,23846=>7876,23845=>7877,23823=>7878,23856=>7879,23826=>7880,23843=>7881,23839=>7882,23854=>7883,24126=>7884,24116=>7885,24241=>7886,24244=>7887,24249=>7888,24242=>7889,24243=>7890,24374=>7891,24376=>7892,24475=>7893,24470=>7894,24479=>7895,24714=>7896,24720=>7897,24710=>7898,24766=>7899,24752=>7900,24762=>7901,24787=>7902,24788=>7903,24783=>7904,24804=>7905,24793=>7906,24797=>7907,24776=>7908,24753=>7909,24795=>7910,24759=>7911,24778=>7912,24767=>7913,24771=>7914,24781=>7915,24768=>7916,25394=>7917,25445=>7918,25482=>7919,25474=>7920,25469=>7921,25533=>7922,25502=>7923,25517=>7924,25501=>7925,25495=>7926,25515=>7927,25486=>7928,25455=>7929,25479=>7930,25488=>7931,25454=>7932,25519=>7933,25461=>7934,25500=>7935,25453=>7936,25518=>7937,25468=>7938,25508=>7939,25403=>7940,25503=>7941,25464=>7942,25477=>7943,25473=>7944,25489=>7945,25485=>7946,25456=>7947,25939=>7948,26061=>7949,26213=>7950,26209=>7951,26203=>7952,26201=>7953,26204=>7954,26210=>7955,26392=>7956,26745=>7957,26759=>7958,26768=>7959,26780=>7960,26733=>7961,26734=>7962,26798=>7963,26795=>7964,26966=>7965,26735=>7966,26787=>7967,26796=>7968,26793=>7969,26741=>7970,26740=>7971,26802=>7972,26767=>7973,26743=>7974,26770=>7975,26748=>7976,26731=>7977,26738=>7978,26794=>7979,26752=>7980,26737=>7981,26750=>7982,26779=>7983,26774=>7984,26763=>7985,26784=>7986,26761=>7987,26788=>7988,26744=>7989,26747=>7990,26769=>7991,26764=>7992,26762=>7993,26749=>7994,27446=>7995,27443=>7996,27447=>7997,27448=>7998,27537=>7999,27535=>8000,27533=>8001,27534=>8002,27532=>8003,27690=>8004,28096=>8005,28075=>8006,28084=>8007,28083=>8008,28276=>8009,28076=>8010,28137=>8011,28130=>8012,28087=>8013,28150=>8014,28116=>8015,28160=>8016,28104=>8017,28128=>8018,28127=>8019,28118=>8020,28094=>8021,28133=>8022,28124=>8023,28125=>8024,28123=>8025,28148=>8026,28106=>8027,28093=>8028,28141=>8029,28144=>8030,28090=>8031,28117=>8032,28098=>8033,28111=>8034,28105=>8035,28112=>8036,28146=>8037,28115=>8038,28157=>8039,28119=>8040,28109=>8041,28131=>8042,28091=>8043,28922=>8044,28941=>8045,28919=>8046,28951=>8047,28916=>8048,28940=>8049,28912=>8050,28932=>8051,28915=>8052,28944=>8053,28924=>8054,28927=>8055,28934=>8056,28947=>8057,28928=>8058,28920=>8059,28918=>8060,28939=>8061,28930=>8062,28942=>8063,29310=>8064,29307=>8065,29308=>8066,29311=>8067,29469=>8068,29463=>8069,29447=>8070,29457=>8071,29464=>8072,29450=>8073,29448=>8074,29439=>8075,29455=>8076,29470=>8077,29576=>8078,29686=>8079,29688=>8080,29685=>8081,29700=>8082,29697=>8083,29693=>8084,29703=>8085,29696=>8086,29690=>8087,29692=>8088,29695=>8089,29708=>8090,29707=>8091,29684=>8092,29704=>8093,30052=>8094,30051=>8095,30158=>8096,30162=>8097,30159=>8098,30155=>8099,30156=>8100,30161=>8101,30160=>8102,30351=>8103,30345=>8104,30419=>8105,30521=>8106,30511=>8107,30509=>8108,30513=>8109,30514=>8110,30516=>8111,30515=>8112,30525=>8113,30501=>8114,30523=>8115,30517=>8116,30792=>8117,30802=>8118,30793=>8119,30797=>8120,30794=>8121,30796=>8122,30758=>8123,30789=>8124,30800=>8125,31076=>8126,31079=>8127,31081=>8128,31082=>8129,31075=>8130,31083=>8131,31073=>8132,31163=>8133,31226=>8134,31224=>8135,31222=>8136,31223=>8137,31375=>8138,31380=>8139,31376=>8140,31541=>8141,31547=>8142,31540=>8143,31525=>8144,31536=>8145,31522=>8146,31524=>8147,31539=>8148,31512=>8149,31530=>8150,31517=>8151,31537=>8152,31531=>8153,31533=>8154,31535=>8155,31538=>8156,31544=>8157,31514=>8158,31523=>8159,31892=>8160,31896=>8161,31894=>8162,31907=>8163,32053=>8164,32061=>8165,32056=>8166,32054=>8167,32058=>8168,32069=>8169,32044=>8170,32041=>8171,32065=>8172,32071=>8173,32062=>8174,32063=>8175,32074=>8176,32059=>8177,32040=>8178,32611=>8179,32661=>8180,32668=>8181,32669=>8182,32667=>8183,32714=>8184,32715=>8185,32717=>8186,32720=>8187,32721=>8188,32711=>8189,32719=>8190,32713=>8191,32799=>8192,32798=>8193,32795=>8194,32839=>8195,32835=>8196,32840=>8197,33048=>8198,33061=>8199,33049=>8200,33051=>8201,33069=>8202,33055=>8203,33068=>8204,33054=>8205,33057=>8206,33045=>8207,33063=>8208,33053=>8209,33058=>8210,33297=>8211,33336=>8212,33331=>8213,33338=>8214,33332=>8215,33330=>8216,33396=>8217,33680=>8218,33699=>8219,33704=>8220,33677=>8221,33658=>8222,33651=>8223,33700=>8224,33652=>8225,33679=>8226,33665=>8227,33685=>8228,33689=>8229,33653=>8230,33684=>8231,33705=>8232,33661=>8233,33667=>8234,33676=>8235,33693=>8236,33691=>8237,33706=>8238,33675=>8239,33662=>8240,33701=>8241,33711=>8242,33672=>8243,33687=>8244,33712=>8245,33663=>8246,33702=>8247,33671=>8248,33710=>8249,33654=>8250,34393=>8251,34390=>8252,34495=>8253,34487=>8254,34498=>8255,34497=>8256,34501=>8257,34490=>8258,34480=>8259,34504=>8260,34489=>8261,34483=>8262,34488=>8263,34508=>8264,34484=>8265,34491=>8266,34492=>8267,34499=>8268,34493=>8269,34494=>8270,34898=>8271,34953=>8272,34965=>8273,34984=>8274,34978=>8275,34986=>8276,34970=>8277,34961=>8278,34977=>8279,34975=>8280,34968=>8281,34983=>8282,34969=>8283,34971=>8284,34967=>8285,34980=>8286,34988=>8287,34956=>8288,34963=>8289,34958=>8290,35202=>8291,35286=>8292,35289=>8293,35285=>8294,35376=>8295,35367=>8296,35372=>8297,35358=>8298,35897=>8299,35899=>8300,35932=>8301,35933=>8302,35965=>8303,36005=>8304,36221=>8305,36219=>8306,36217=>8307,36284=>8308,36290=>8309,36281=>8310,36287=>8311,36289=>8312,36568=>8313,36574=>8314,36573=>8315,36572=>8316,36567=>8317,36576=>8318,36577=>8319,36900=>8320,36875=>8321,36881=>8322,36892=>8323,36876=>8324,36897=>8325,37103=>8326,37098=>8327,37104=>8328,37108=>8329,37106=>8330,37107=>8331,37076=>8332,37099=>8333,37100=>8334,37097=>8335,37206=>8336,37208=>8337,37210=>8338,37203=>8339,37205=>8340,37356=>8341,37364=>8342,37361=>8343,37363=>8344,37368=>8345,37348=>8346,37369=>8347,37354=>8348,37355=>8349,37367=>8350,37352=>8351,37358=>8352,38266=>8353,38278=>8354,38280=>8355,38524=>8356,38509=>8357,38507=>8358,38513=>8359,38511=>8360,38591=>8361,38762=>8362,38916=>8363,39141=>8364,39319=>8365,20635=>8366,20629=>8367,20628=>8368,20638=>8369,20619=>8370,20643=>8371,20611=>8372,20620=>8373,20622=>8374,20637=>8375,20584=>8376,20636=>8377,20626=>8378,20610=>8379,20615=>8380,20831=>8381,20948=>8382,21266=>8383,21265=>8384,21412=>8385,21415=>8386,21905=>8387,21928=>8388,21925=>8389,21933=>8390,21879=>8391,22085=>8392,21922=>8393,21907=>8394,21896=>8395,21903=>8396,21941=>8397,21889=>8398,21923=>8399,21906=>8400,21924=>8401,21885=>8402,21900=>8403,21926=>8404,21887=>8405,21909=>8406,21921=>8407,21902=>8408,22284=>8409,22569=>8410,22583=>8411,22553=>8412,22558=>8413,22567=>8414,22563=>8415,22568=>8416,22517=>8417,22600=>8418,22565=>8419,22556=>8420,22555=>8421,22579=>8422,22591=>8423,22582=>8424,22574=>8425,22585=>8426,22584=>8427,22573=>8428,22572=>8429,22587=>8430,22881=>8431,23215=>8432,23188=>8433,23199=>8434,23162=>8435,23202=>8436,23198=>8437,23160=>8438,23206=>8439,23164=>8440,23205=>8441,23212=>8442,23189=>8443,23214=>8444,23095=>8445,23172=>8446,23178=>8447,23191=>8448,23171=>8449,23179=>8450,23209=>8451,23163=>8452,23165=>8453,23180=>8454,23196=>8455,23183=>8456,23187=>8457,23197=>8458,23530=>8459,23501=>8460,23499=>8461,23508=>8462,23505=>8463,23498=>8464,23502=>8465,23564=>8466,23600=>8467,23863=>8468,23875=>8469,23915=>8470,23873=>8471,23883=>8472,23871=>8473,23861=>8474,23889=>8475,23886=>8476,23893=>8477,23859=>8478,23866=>8479,23890=>8480,23869=>8481,23857=>8482,23897=>8483,23874=>8484,23865=>8485,23881=>8486,23864=>8487,23868=>8488,23858=>8489,23862=>8490,23872=>8491,23877=>8492,24132=>8493,24129=>8494,24408=>8495,57673=>8495,24486=>8496,24485=>8497,24491=>8498,24777=>8499,24761=>8500,24780=>8501,24802=>8502,24782=>8503,24772=>8504,24852=>8505,24818=>8506,24842=>8507,24854=>8508,24837=>8509,24821=>8510,24851=>8511,24824=>8512,24828=>8513,24830=>8514,24769=>8515,24835=>8516,24856=>8517,24861=>8518,24848=>8519,24831=>8520,24836=>8521,24843=>8522,25162=>8523,25492=>8524,25521=>8525,25520=>8526,25550=>8527,25573=>8528,25576=>8529,25583=>8530,25539=>8531,25757=>8532,25587=>8533,25546=>8534,25568=>8535,25590=>8536,25557=>8537,25586=>8538,25589=>8539,25697=>8540,25567=>8541,25534=>8542,25565=>8543,25564=>8544,25540=>8545,25560=>8546,25555=>8547,25538=>8548,25543=>8549,25548=>8550,25547=>8551,25544=>8552,25584=>8553,25559=>8554,25561=>8555,25906=>8556,25959=>8557,25962=>8558,25956=>8559,25948=>8560,25960=>8561,25957=>8562,25996=>8563,26013=>8564,26014=>8565,26030=>8566,26064=>8567,26066=>8568,26236=>8569,26220=>8570,26235=>8571,26240=>8572,26225=>8573,26233=>8574,26218=>8575,26226=>8576,26369=>8577,26892=>8578,26835=>8579,26884=>8580,26844=>8581,26922=>8582,26860=>8583,26858=>8584,26865=>8585,26895=>8586,26838=>8587,26871=>8588,26859=>8589,26852=>8590,26870=>8591,26899=>8592,26896=>8593,26867=>8594,26849=>8595,26887=>8596,26828=>8597,26888=>8598,26992=>8599,26804=>8600,26897=>8601,26863=>8602,26822=>8603,26900=>8604,26872=>8605,26832=>8606,26877=>8607,26876=>8608,26856=>8609,26891=>8610,26890=>8611,26903=>8612,26830=>8613,26824=>8614,26845=>8615,26846=>8616,26854=>8617,26868=>8618,26833=>8619,26886=>8620,26836=>8621,26857=>8622,26901=>8623,26917=>8624,26823=>8625,27449=>8626,27451=>8627,27455=>8628,27452=>8629,27540=>8630,27543=>8631,27545=>8632,27541=>8633,27581=>8634,27632=>8635,27634=>8636,27635=>8637,27696=>8638,28156=>8639,28230=>8640,28231=>8641,28191=>8642,28233=>8643,28296=>8644,28220=>8645,28221=>8646,28229=>8647,28258=>8648,28203=>8649,28223=>8650,28225=>8651,28253=>8652,28275=>8653,28188=>8654,28211=>8655,28235=>8656,28224=>8657,28241=>8658,28219=>8659,28163=>8660,28206=>8661,28254=>8662,28264=>8663,28252=>8664,28257=>8665,28209=>8666,28200=>8667,28256=>8668,28273=>8669,28267=>8670,28217=>8671,28194=>8672,28208=>8673,28243=>8674,28261=>8675,28199=>8676,28280=>8677,28260=>8678,28279=>8679,28245=>8680,28281=>8681,28242=>8682,28262=>8683,28213=>8684,28214=>8685,28250=>8686,28960=>8687,28958=>8688,28975=>8689,28923=>8690,28974=>8691,28977=>8692,28963=>8693,28965=>8694,28962=>8695,28978=>8696,28959=>8697,28968=>8698,28986=>8699,28955=>8700,29259=>8701,29274=>8702,29320=>8703,29321=>8704,29318=>8705,29317=>8706,29323=>8707,29458=>8708,29451=>8709,29488=>8710,29474=>8711,29489=>8712,29491=>8713,29479=>8714,29490=>8715,29485=>8716,29478=>8717,29475=>8718,29493=>8719,29452=>8720,29742=>8721,29740=>8722,29744=>8723,29739=>8724,29718=>8725,29722=>8726,29729=>8727,29741=>8728,29745=>8729,29732=>8730,29731=>8731,29725=>8732,29737=>8733,29728=>8734,29746=>8735,29947=>8736,29999=>8737,30063=>8738,30060=>8739,30183=>8740,30170=>8741,30177=>8742,30182=>8743,30173=>8744,30175=>8745,30180=>8746,30167=>8747,30357=>8748,30354=>8749,30426=>8750,30534=>8751,30535=>8752,30532=>8753,30541=>8754,30533=>8755,30538=>8756,30542=>8757,30539=>8758,30540=>8759,30686=>8760,30700=>8761,30816=>8762,30820=>8763,30821=>8764,30812=>8765,30829=>8766,30833=>8767,30826=>8768,30830=>8769,30832=>8770,30825=>8771,30824=>8772,30814=>8773,30818=>8774,31092=>8775,31091=>8776,31090=>8777,31088=>8778,31234=>8779,31242=>8780,31235=>8781,31244=>8782,31236=>8783,31385=>8784,31462=>8785,31460=>8786,31562=>8787,31559=>8788,31556=>8789,31560=>8790,31564=>8791,31566=>8792,31552=>8793,31576=>8794,31557=>8795,31906=>8796,31902=>8797,31912=>8798,31905=>8799,32088=>8800,32111=>8801,32099=>8802,32083=>8803,32086=>8804,32103=>8805,32106=>8806,32079=>8807,32109=>8808,32092=>8809,32107=>8810,32082=>8811,32084=>8812,32105=>8813,32081=>8814,32095=>8815,32078=>8816,32574=>8817,32575=>8818,32613=>8819,32614=>8820,32674=>8821,32672=>8822,32673=>8823,32727=>8824,32849=>8825,32847=>8826,32848=>8827,33022=>8828,32980=>8829,33091=>8830,33098=>8831,33106=>8832,33103=>8833,33095=>8834,33085=>8835,33101=>8836,33082=>8837,33254=>8838,33262=>8839,33271=>8840,33272=>8841,33273=>8842,33284=>8843,33340=>8844,33341=>8845,33343=>8846,33397=>8847,33595=>8848,33743=>8849,60382=>8849,33785=>8850,33827=>8851,33728=>8852,33768=>8853,33810=>8854,33767=>8855,33764=>8856,33788=>8857,33782=>8858,33808=>8859,33734=>8860,33736=>8861,33771=>8862,33763=>8863,33727=>8864,33793=>8865,33757=>8866,33765=>8867,33752=>8868,33791=>8869,33761=>8870,33739=>8871,33742=>8872,33750=>8873,33781=>8874,33737=>8875,33801=>8876,33807=>8877,58332=>8877,33758=>8878,33809=>8879,33798=>8880,33730=>8881,33779=>8882,33749=>8883,33786=>8884,33735=>8885,33745=>8886,33770=>8887,33811=>8888,33690=>8889,33731=>8890,33772=>8891,33774=>8892,33732=>8893,33787=>8894,33751=>8895,33762=>8896,33819=>8897,33755=>8898,33790=>8899,34520=>8900,34530=>8901,34534=>8902,34515=>8903,34531=>8904,34522=>8905,34538=>8906,34525=>8907,34539=>8908,34524=>8909,34540=>8910,34537=>8911,34519=>8912,34536=>8913,34513=>8914,34888=>8915,34902=>8916,34901=>8917,35002=>8918,35031=>8919,35001=>8920,35000=>8921,35008=>8922,35006=>8923,34998=>8924,35004=>8925,34999=>8926,35005=>8927,34994=>8928,35073=>8929,35017=>8930,35221=>8931,35224=>8932,35223=>8933,35293=>8934,35290=>8935,35291=>8936,35406=>8937,35405=>8938,35385=>8939,35417=>8940,35392=>8941,35415=>8942,35416=>8943,35396=>8944,35397=>8945,35410=>8946,35400=>8947,35409=>8948,35402=>8949,35404=>8950,35407=>8951,35935=>8952,35969=>8953,35968=>8954,36026=>8955,36030=>8956,36016=>8957,36025=>8958,36021=>8959,36228=>8960,36224=>8961,36233=>8962,36312=>8963,36307=>8964,36301=>8965,36295=>8966,36310=>8967,36316=>8968,36303=>8969,36309=>8970,36313=>8971,36296=>8972,36311=>8973,36293=>8974,36591=>8975,36599=>8976,36602=>8977,36601=>8978,36582=>8979,36590=>8980,36581=>8981,36597=>8982,36583=>8983,36584=>8984,36598=>8985,36587=>8986,36593=>8987,36588=>8988,36596=>8989,36585=>8990,36909=>8991,36916=>8992,36911=>8993,37126=>8994,37164=>8995,37124=>8996,60367=>8996,37119=>8997,37116=>8998,37128=>8999,37113=>9000,37115=>9001,37121=>9002,37120=>9003,37127=>9004,37125=>9005,37123=>9006,37217=>9007,37220=>9008,37215=>9009,37218=>9010,37216=>9011,37377=>9012,37386=>9013,37413=>9014,37379=>9015,37402=>9016,37414=>9017,37391=>9018,37388=>9019,37376=>9020,37394=>9021,37375=>9022,37373=>9023,37382=>9024,37380=>9025,37415=>9026,37378=>9027,37404=>9028,37412=>9029,37401=>9030,37399=>9031,37381=>9032,37398=>9033,38267=>9034,38285=>9035,38284=>9036,38288=>9037,38535=>9038,38526=>9039,38536=>9040,38537=>9041,38531=>9042,38528=>9043,38594=>9044,38600=>9045,38595=>9046,38641=>9047,38640=>9048,38764=>9049,38768=>9050,38766=>9051,38919=>9052,39081=>9053,39147=>9054,40166=>9055,12235=>9056,40697=>9056,20099=>9057,20100=>9058,20150=>9059,20669=>9060,20671=>9061,20678=>9062,20654=>9063,20676=>9064,20682=>9065,20660=>9066,20680=>9067,20674=>9068,20656=>9069,20673=>9070,20666=>9071,20657=>9072,20683=>9073,20681=>9074,20662=>9075,20664=>9076,20951=>9077,21114=>9078,21112=>9079,21115=>9080,21116=>9081,21955=>9082,21979=>9083,21964=>9084,21968=>9085,21963=>9086,21962=>9087,21981=>9088,21952=>9089,64013=>9089,21972=>9090,21956=>9091,21993=>9092,21951=>9093,21970=>9094,21901=>9095,21967=>9096,21973=>9097,21986=>9098,21974=>9099,21960=>9100,22002=>9101,21965=>9102,21977=>9103,21954=>9104,22292=>9105,22611=>9106,22632=>9107,22628=>9108,22607=>9109,22605=>9110,22601=>9111,22639=>9112,22613=>9113,22606=>9114,22621=>9115,22617=>9116,22629=>9117,22619=>9118,22589=>9119,22627=>9120,22641=>9121,22780=>9122,23239=>9123,23236=>9124,23243=>9125,23226=>9126,23224=>9127,23217=>9128,23221=>9129,23216=>9130,23231=>9131,23240=>9132,23227=>9133,23238=>9134,23223=>9135,23232=>9136,23242=>9137,23220=>9138,23222=>9139,23245=>9140,23225=>9141,23184=>9142,23510=>9143,23512=>9144,23513=>9145,23583=>9146,23603=>9147,23921=>9148,23907=>9149,23882=>9150,23909=>9151,23922=>9152,23916=>9153,23902=>9154,23912=>9155,23911=>9156,23906=>9157,24048=>9158,24143=>9159,24142=>9160,24138=>9161,24141=>9162,24139=>9163,24261=>9164,24268=>9165,24262=>9166,24267=>9167,24263=>9168,24384=>9169,24495=>9170,24493=>9171,24823=>9172,24905=>9173,24906=>9174,24875=>9175,24901=>9176,24886=>9177,24882=>9178,24878=>9179,24902=>9180,24879=>9181,24911=>9182,24873=>9183,24896=>9184,25120=>9185,37224=>9186,25123=>9187,25125=>9188,25124=>9189,25541=>9190,25585=>9191,25579=>9192,25616=>9193,25618=>9194,25609=>9195,25632=>9196,25636=>9197,25651=>9198,25667=>9199,25631=>9200,25621=>9201,25624=>9202,25657=>9203,25655=>9204,25634=>9205,25635=>9206,25612=>9207,25638=>9208,25648=>9209,25640=>9210,25665=>9211,25653=>9212,25647=>9213,25610=>9214,25626=>9215,25664=>9216,25637=>9217,25639=>9218,25611=>9219,25575=>9220,25627=>9221,25646=>9222,25633=>9223,25614=>9224,25967=>9225,26002=>9226,26067=>9227,26246=>9228,26252=>9229,26261=>9230,26256=>9231,26251=>9232,26250=>9233,26265=>9234,26260=>9235,26232=>9236,26400=>9237,26982=>9238,26975=>9239,26936=>9240,26958=>9241,26978=>9242,26993=>9243,26943=>9244,26949=>9245,26986=>9246,26937=>9247,26946=>9248,26967=>9249,26969=>9250,27002=>9251,26952=>9252,26953=>9253,26933=>9254,26988=>9255,26931=>9256,26941=>9257,26981=>9258,26864=>9259,27000=>9260,26932=>9261,26985=>9262,26944=>9263,26991=>9264,26948=>9265,26998=>9266,26968=>9267,26945=>9268,26996=>9269,26956=>9270,26939=>9271,26955=>9272,26935=>9273,26972=>9274,26959=>9275,26961=>9276,26930=>9277,26962=>9278,26927=>9279,27003=>9280,26940=>9281,27462=>9282,27461=>9283,27459=>9284,27458=>9285,27464=>9286,27457=>9287,27547=>9288,27643=>9289,27644=>9290,27641=>9291,27639=>9292,27640=>9293,28315=>9294,28374=>9295,28360=>9296,28303=>9297,28352=>9298,28319=>9299,28307=>9300,28308=>9301,28320=>9302,28337=>9303,28345=>9304,28358=>9305,28370=>9306,28349=>9307,28353=>9308,28318=>9309,28361=>9310,28343=>9311,28336=>9312,28365=>9313,28326=>9314,28367=>9315,28338=>9316,28350=>9317,28355=>9318,28380=>9319,28376=>9320,28313=>9321,28306=>9322,28302=>9323,28301=>9324,28324=>9325,28321=>9326,28351=>9327,28339=>9328,28368=>9329,28362=>9330,28311=>9331,28334=>9332,28323=>9333,28999=>9334,29012=>9335,29010=>9336,29027=>9337,29024=>9338,28993=>9339,29021=>9340,29026=>9341,61080=>9341,29042=>9342,29048=>9343,29034=>9344,29025=>9345,28994=>9346,29016=>9347,28995=>9348,29003=>9349,29040=>9350,29023=>9351,29008=>9352,29011=>9353,28996=>9354,29005=>9355,29018=>9356,29263=>9357,29325=>9358,29324=>9359,29329=>9360,29328=>9361,29326=>9362,29500=>9363,29506=>9364,29499=>9365,29498=>9366,29504=>9367,29514=>9368,29513=>9369,29764=>9370,29770=>9371,29771=>9372,29778=>9373,29777=>9374,29783=>9375,29760=>9376,29775=>9377,29776=>9378,29774=>9379,29762=>9380,29766=>9381,29773=>9382,29780=>9383,29921=>9384,29951=>9385,29950=>9386,29949=>9387,29981=>9388,30073=>9389,30071=>9390,27011=>9391,30191=>9392,30223=>9393,30211=>9394,30199=>9395,30206=>9396,30204=>9397,30201=>9398,60782=>9398,30200=>9399,30224=>9400,30203=>9401,30198=>9402,30189=>9403,30197=>9404,30205=>9405,30361=>9406,30389=>9407,30429=>9408,30549=>9409,30559=>9410,30560=>9411,30546=>9412,30550=>9413,30554=>9414,30569=>9415,30567=>9416,30548=>9417,30553=>9418,30573=>9419,30688=>9420,30855=>9421,30874=>9422,30868=>9423,30863=>9424,30852=>9425,30869=>9426,30853=>9427,30854=>9428,30881=>9429,30851=>9430,30841=>9431,30873=>9432,30848=>9433,30870=>9434,30843=>9435,31100=>9436,31106=>9437,31101=>9438,31097=>9439,31249=>9440,31256=>9441,31257=>9442,31250=>9443,31255=>9444,31253=>9445,31266=>9446,31251=>9447,31259=>9448,31248=>9449,31395=>9450,31394=>9451,31390=>9452,31467=>9453,31590=>9454,31588=>9455,31597=>9456,31604=>9457,31593=>9458,31602=>9459,31589=>9460,31603=>9461,31601=>9462,31600=>9463,31585=>9464,31608=>9465,31606=>9466,31587=>9467,31922=>9468,31924=>9469,31919=>9470,32136=>9471,32134=>9472,32128=>9473,32141=>9474,32127=>9475,32133=>9476,32122=>9477,32142=>9478,32123=>9479,32131=>9480,32124=>9481,32140=>9482,32148=>9483,32132=>9484,32125=>9485,32146=>9486,32621=>9487,32619=>9488,32615=>9489,32616=>9490,32620=>9491,32678=>9492,32677=>9493,32679=>9494,32731=>9495,32732=>9496,32801=>9497,33124=>9498,33120=>9499,33143=>9500,33116=>9501,33129=>9502,33115=>9503,33122=>9504,33138=>9505,26401=>9506,33118=>9507,33142=>9508,33127=>9509,33135=>9510,33092=>9511,33121=>9512,33309=>9513,33353=>9514,33348=>9515,33344=>9516,33346=>9517,33349=>9518,34033=>9519,33855=>9520,33878=>9521,33910=>9522,33913=>9523,33935=>9524,33933=>9525,33893=>9526,33873=>9527,33856=>9528,33926=>9529,33895=>9530,33840=>9531,33869=>9532,33917=>9533,33882=>9534,33881=>9535,33908=>9536,33907=>9537,33885=>9538,34055=>9539,33886=>9540,33847=>9541,33850=>9542,33844=>9543,33914=>9544,33859=>9545,33912=>9546,33842=>9547,33861=>9548,33833=>9549,33753=>9550,33867=>9551,33839=>9552,33858=>9553,33837=>9554,33887=>9555,33904=>9556,33849=>9557,33870=>9558,33868=>9559,33874=>9560,33903=>9561,33989=>9562,33934=>9563,33851=>9564,33863=>9565,33846=>9566,33843=>9567,33896=>9568,33918=>9569,33860=>9570,33835=>9571,33888=>9572,33876=>9573,33902=>9574,33872=>9575,34571=>9576,34564=>9577,34551=>9578,34572=>9579,34554=>9580,34518=>9581,34549=>9582,34637=>9583,34552=>9584,34574=>9585,34569=>9586,34561=>9587,34550=>9588,34573=>9589,34565=>9590,35030=>9591,35019=>9592,35021=>9593,35022=>9594,35038=>9595,35035=>9596,35034=>9597,35020=>9598,35024=>9599,35205=>9600,35227=>9601,35295=>9602,35301=>9603,35300=>9604,35297=>9605,35296=>9606,35298=>9607,35292=>9608,35302=>9609,35446=>9610,35462=>9611,35455=>9612,35425=>9613,35391=>9614,35447=>9615,35458=>9616,35460=>9617,35445=>9618,35459=>9619,35457=>9620,35444=>9621,35450=>9622,35900=>9623,35915=>9624,35914=>9625,35941=>9626,35940=>9627,35942=>9628,35974=>9629,35972=>9630,35973=>9631,36044=>9632,36200=>9633,36201=>9634,36241=>9635,36236=>9636,36238=>9637,36239=>9638,36237=>9639,36243=>9640,36244=>9641,36240=>9642,36242=>9643,36336=>9644,36320=>9645,36332=>9646,36337=>9647,36334=>9648,36304=>9649,36329=>9650,36323=>9651,36322=>9652,36327=>9653,36338=>9654,36331=>9655,36340=>9656,36614=>9657,36607=>9658,36609=>9659,36608=>9660,36613=>9661,36615=>9662,36616=>9663,36610=>9664,36619=>9665,60507=>9665,36946=>9666,36927=>9667,36932=>9668,36937=>9669,36925=>9670,37136=>9671,37133=>9672,37135=>9673,37137=>9674,37142=>9675,37140=>9676,37131=>9677,37134=>9678,37230=>9679,37231=>9680,37448=>9681,37458=>9682,37424=>9683,37434=>9684,37478=>9685,37427=>9686,37477=>9687,37470=>9688,37507=>9689,37422=>9690,37450=>9691,37446=>9692,37485=>9693,37484=>9694,37455=>9695,37472=>9696,37479=>9697,37487=>9698,37430=>9699,37473=>9700,37488=>9701,37425=>9702,37460=>9703,37475=>9704,37456=>9705,37490=>9706,37454=>9707,37459=>9708,37452=>9709,37462=>9710,37426=>9711,38303=>9712,38300=>9713,38302=>9714,38299=>9715,38546=>9716,38547=>9717,38545=>9718,38551=>9719,38606=>9720,38650=>9721,38653=>9722,38648=>9723,38645=>9724,38771=>9725,38775=>9726,38776=>9727,38770=>9728,38927=>9729,38925=>9730,38926=>9731,39084=>9732,39158=>9733,39161=>9734,39343=>9735,39346=>9736,39344=>9737,39349=>9738,39597=>9739,39595=>9740,39771=>9741,40170=>9742,40173=>9743,40167=>9744,40576=>9745,12236=>9746,40701=>9746,20710=>9747,20692=>9748,20695=>9749,20712=>9750,20723=>9751,20699=>9752,20714=>9753,20701=>9754,20708=>9755,20691=>9756,20716=>9757,20720=>9758,20719=>9759,20707=>9760,20704=>9761,20952=>9762,21120=>9763,21121=>9764,21225=>9765,21227=>9766,21296=>9767,21420=>9768,22055=>9769,22037=>9770,22028=>9771,22034=>9772,22012=>9773,22031=>9774,22044=>9775,22017=>9776,22035=>9777,22018=>9778,22010=>9779,22045=>9780,22020=>9781,22015=>9782,22009=>9783,22665=>9784,22652=>9785,22672=>9786,22680=>9787,22662=>9788,22657=>9789,22655=>9790,22644=>9791,22667=>9792,22650=>9793,22663=>9794,22673=>9795,22670=>9796,22646=>9797,22658=>9798,22664=>9799,22651=>9800,22676=>9801,22671=>9802,22782=>9803,22891=>9804,23260=>9805,23278=>9806,23269=>9807,23253=>9808,23274=>9809,23258=>9810,23277=>9811,23275=>9812,23283=>9813,23266=>9814,23264=>9815,23259=>9816,23276=>9817,23262=>9818,23261=>9819,23257=>9820,23272=>9821,23263=>9822,23415=>9823,23520=>9824,23523=>9825,23651=>9826,23938=>9827,23936=>9828,23933=>9829,23942=>9830,23930=>9831,23937=>9832,23927=>9833,23946=>9834,23945=>9835,23944=>9836,23934=>9837,23932=>9838,23949=>9839,23929=>9840,23935=>9841,24152=>9842,24153=>9843,24147=>9844,24280=>9845,24273=>9846,24279=>9847,24270=>9848,24284=>9849,24277=>9850,24281=>9851,24274=>9852,24276=>9853,24388=>9854,24387=>9855,24431=>9856,24502=>9857,24876=>9858,24872=>9859,24897=>9860,24926=>9861,24945=>9862,24947=>9863,24914=>9864,24915=>9865,24946=>9866,24940=>9867,24960=>9868,24948=>9869,24916=>9870,24954=>9871,24923=>9872,24933=>9873,24891=>9874,24938=>9875,24929=>9876,24918=>9877,25129=>9878,25127=>9879,25131=>9880,25643=>9881,25677=>9882,25691=>9883,25693=>9884,25716=>9885,25718=>9886,25714=>9887,25715=>9888,25725=>9889,25717=>9890,25702=>9891,25766=>9892,25678=>9893,25730=>9894,25694=>9895,25692=>9896,25675=>9897,25683=>9898,25696=>9899,25680=>9900,25727=>9901,25663=>9902,25708=>9903,25707=>9904,25689=>9905,25701=>9906,25719=>9907,25971=>9908,26016=>9909,26273=>9910,26272=>9911,26271=>9912,26373=>9913,26372=>9914,26402=>9915,27057=>9916,27062=>9917,27081=>9918,27040=>9919,27086=>9920,27030=>9921,27056=>9922,27052=>9923,27068=>9924,27025=>9925,27033=>9926,27022=>9927,27047=>9928,27021=>9929,27049=>9930,27070=>9931,27055=>9932,27071=>9933,27076=>9934,27069=>9935,27044=>9936,27092=>9937,27065=>9938,27082=>9939,27034=>9940,27087=>9941,27059=>9942,27027=>9943,27050=>9944,27041=>9945,27038=>9946,27097=>9947,27031=>9948,27024=>9949,27074=>9950,27061=>9951,27045=>9952,27078=>9953,27466=>9954,27469=>9955,27467=>9956,27550=>9957,27551=>9958,27552=>9959,27587=>9960,27588=>9961,27646=>9962,28366=>9963,28405=>9964,28401=>9965,28419=>9966,28453=>9967,28408=>9968,28471=>9969,28411=>9970,28462=>9971,28425=>9972,28494=>9973,28441=>9974,28442=>9975,28455=>9976,28440=>9977,28475=>9978,28434=>9979,28397=>9980,28426=>9981,28470=>9982,28531=>9983,28409=>9984,28398=>9985,28461=>9986,28480=>9987,28464=>9988,28476=>9989,28469=>9990,28395=>9991,28423=>9992,28430=>9993,28483=>9994,28421=>9995,28413=>9996,28406=>9997,28473=>9998,28444=>9999,28412=>10000,28474=>10001,28447=>10002,28429=>10003,28446=>10004,28424=>10005,28449=>10006,29063=>10007,29072=>10008,29065=>10009,29056=>10010,29061=>10011,29058=>10012,29071=>10013,29051=>10014,29062=>10015,29057=>10016,29079=>10017,29252=>10018,29267=>10019,29335=>10020,29333=>10021,29331=>10022,29507=>10023,29517=>10024,29521=>10025,29516=>10026,29794=>10027,29811=>10028,29809=>10029,29813=>10030,29810=>10031,29799=>10032,29806=>10033,29952=>10034,29954=>10035,29955=>10036,30077=>10037,30096=>10038,30230=>10039,30216=>10040,30220=>10041,30229=>10042,30225=>10043,30218=>10044,30228=>10045,30392=>10046,30593=>10047,30588=>10048,30597=>10049,30594=>10050,30574=>10051,30592=>10052,30575=>10053,30590=>10054,30595=>10055,30898=>10056,30890=>10057,30900=>10058,30893=>10059,30888=>10060,30846=>10061,30891=>10062,30878=>10063,30885=>10064,30880=>10065,30892=>10066,30882=>10067,30884=>10068,31128=>10069,31114=>10070,31115=>10071,31126=>10072,31125=>10073,31124=>10074,31123=>10075,31127=>10076,31112=>10077,31122=>10078,31120=>10079,31275=>10080,31306=>10081,31280=>10082,31279=>10083,31272=>10084,31270=>10085,31400=>10086,31403=>10087,31404=>10088,31470=>10089,31624=>10090,31644=>10091,31626=>10092,31633=>10093,31632=>10094,31638=>10095,31629=>10096,31628=>10097,31643=>10098,31630=>10099,31621=>10100,31640=>10101,21124=>10102,31641=>10103,31652=>10104,31618=>10105,31931=>10106,31935=>10107,31932=>10108,31930=>10109,32167=>10110,32183=>10111,32194=>10112,32163=>10113,32170=>10114,32193=>10115,32192=>10116,32197=>10117,32157=>10118,32206=>10119,32196=>10120,32198=>10121,32203=>10122,32204=>10123,32175=>10124,32185=>10125,32150=>10126,32188=>10127,32159=>10128,32166=>10129,32174=>10130,32169=>10131,32161=>10132,32201=>10133,32627=>10134,32738=>10135,32739=>10136,32741=>10137,32734=>10138,32804=>10139,32861=>10140,32860=>10141,33161=>10142,33158=>10143,33155=>10144,33159=>10145,33165=>10146,33164=>10147,33163=>10148,33301=>10149,33943=>10150,33956=>10151,33953=>10152,33951=>10153,33978=>10154,33998=>10155,33986=>10156,33964=>10157,33966=>10158,33963=>10159,33977=>10160,33972=>10161,33985=>10162,33997=>10163,33962=>10164,33946=>10165,33969=>10166,34000=>10167,33949=>10168,33959=>10169,33979=>10170,33954=>10171,33940=>10172,33991=>10173,33996=>10174,33947=>10175,33961=>10176,33967=>10177,33960=>10178,58327=>10178,34006=>10179,33944=>10180,33974=>10181,33999=>10182,33952=>10183,34007=>10184,34004=>10185,34002=>10186,34011=>10187,33968=>10188,33937=>10189,34401=>10190,34611=>10191,34595=>10192,34600=>10193,34667=>10194,34624=>10195,34606=>10196,34590=>10197,34593=>10198,34585=>10199,34587=>10200,34627=>10201,34604=>10202,34625=>10203,34622=>10204,34630=>10205,34592=>10206,34610=>10207,34602=>10208,34605=>10209,34620=>10210,34578=>10211,34618=>10212,34609=>10213,34613=>10214,34626=>10215,34598=>10216,34599=>10217,34616=>10218,34596=>10219,34586=>10220,34608=>10221,34577=>10222,35063=>10223,35047=>10224,35057=>10225,35058=>10226,35066=>10227,35070=>10228,35054=>10229,35068=>10230,35062=>10231,35067=>10232,35056=>10233,35052=>10234,35051=>10235,35229=>10236,35233=>10237,35231=>10238,35230=>10239,35305=>10240,35307=>10241,35304=>10242,35499=>10243,35481=>10244,35467=>10245,35474=>10246,35471=>10247,35478=>10248,35901=>10249,35944=>10250,35945=>10251,36053=>10252,36047=>10253,36055=>10254,36246=>10255,36361=>10256,36354=>10257,36351=>10258,36365=>10259,36349=>10260,36362=>10261,36355=>10262,36359=>10263,36358=>10264,36357=>10265,36350=>10266,36352=>10267,36356=>10268,36624=>10269,36625=>10270,36622=>10271,36621=>10272,37155=>10273,37148=>10274,37152=>10275,37154=>10276,37151=>10277,37149=>10278,37146=>10279,37156=>10280,37153=>10281,37147=>10282,37242=>10283,37234=>10284,37241=>10285,37235=>10286,37541=>10287,37540=>10288,37494=>10289,37531=>10290,37498=>10291,37536=>10292,37524=>10293,37546=>10294,37517=>10295,37542=>10296,37530=>10297,37547=>10298,37497=>10299,37527=>10300,37503=>10301,37539=>10302,37614=>10303,37518=>10304,37506=>10305,37525=>10306,37538=>10307,37501=>10308,37512=>10309,37537=>10310,37514=>10311,37510=>10312,37516=>10313,37529=>10314,37543=>10315,37502=>10316,37511=>10317,37545=>10318,37533=>10319,37515=>10320,37421=>10321,38558=>10322,38561=>10323,38655=>10324,38744=>10325,38781=>10326,38778=>10327,38782=>10328,38787=>10329,38784=>10330,38786=>10331,38779=>10332,38788=>10333,38785=>10334,38783=>10335,38862=>10336,38861=>10337,38934=>10338,39085=>10339,39086=>10340,39170=>10341,39168=>10342,39175=>10343,39325=>10344,39324=>10345,39363=>10346,39353=>10347,39355=>10348,39354=>10349,39362=>10350,39357=>10351,39367=>10352,39601=>10353,39651=>10354,39655=>10355,39742=>10356,39743=>10357,39776=>10358,39777=>10359,39775=>10360,40177=>10361,40178=>10362,40181=>10363,40615=>10364,20735=>10365,20739=>10366,20784=>10367,20728=>10368,20742=>10369,20743=>10370,20726=>10371,20734=>10372,20747=>10373,20748=>10374,20733=>10375,20746=>10376,21131=>10377,21132=>10378,21233=>10379,21231=>10380,22088=>10381,22082=>10382,22092=>10383,22069=>10384,22081=>10385,22090=>10386,22089=>10387,22086=>10388,22104=>10389,22106=>10390,22080=>10391,22067=>10392,22077=>10393,22060=>10394,22078=>10395,22072=>10396,22058=>10397,22074=>10398,22298=>10399,22699=>10400,22685=>10401,22705=>10402,22688=>10403,22691=>10404,22703=>10405,22700=>10406,22693=>10407,22689=>10408,22783=>10409,23295=>10410,23284=>10411,23293=>10412,23287=>10413,23286=>10414,23299=>10415,23288=>10416,23298=>10417,23289=>10418,23297=>10419,23303=>10420,23301=>10421,23311=>10422,23655=>10423,23961=>10424,23959=>10425,23967=>10426,23954=>10427,23970=>10428,23955=>10429,23957=>10430,23968=>10431,23964=>10432,23969=>10433,23962=>10434,23966=>10435,24169=>10436,24157=>10437,24160=>10438,24156=>10439,32243=>10440,24283=>10441,24286=>10442,24289=>10443,24393=>10444,24498=>10445,24971=>10446,24963=>10447,24953=>10448,25009=>10449,25008=>10450,24994=>10451,24969=>10452,24987=>10453,24979=>10454,25007=>10455,25005=>10456,24991=>10457,24978=>10458,25002=>10459,24993=>10460,24973=>10461,24934=>10462,25011=>10463,25133=>10464,25710=>10465,25712=>10466,25750=>10467,25760=>10468,25733=>10469,25751=>10470,25756=>10471,25743=>10472,25739=>10473,25738=>10474,25740=>10475,25763=>10476,25759=>10477,25704=>10478,25777=>10479,25752=>10480,25974=>10481,25978=>10482,25977=>10483,25979=>10484,26034=>10485,26035=>10486,26293=>10487,26288=>10488,26281=>10489,26290=>10490,26295=>10491,26282=>10492,26287=>10493,27136=>10494,27142=>10495,27159=>10496,27109=>10497,27128=>10498,27157=>10499,27121=>10500,27108=>10501,27168=>10502,27135=>10503,27116=>10504,27106=>10505,27163=>10506,27165=>10507,27134=>10508,27175=>10509,27122=>10510,27118=>10511,27156=>10512,27127=>10513,27111=>10514,27200=>10515,27144=>10516,27110=>10517,27131=>10518,27149=>10519,27132=>10520,27115=>10521,27145=>10522,27140=>10523,27160=>10524,27173=>10525,27151=>10526,27126=>10527,27174=>10528,27143=>10529,27124=>10530,27158=>10531,27473=>10532,27557=>10533,27555=>10534,27554=>10535,27558=>10536,27649=>10537,27648=>10538,27647=>10539,27650=>10540,28481=>10541,28454=>10542,28542=>10543,28551=>10544,28614=>10545,28562=>10546,28557=>10547,28553=>10548,28556=>10549,28514=>10550,28495=>10551,28549=>10552,28506=>10553,28566=>10554,28534=>10555,28524=>10556,28546=>10557,28501=>10558,28530=>10559,28498=>10560,28496=>10561,28503=>10562,28564=>10563,28563=>10564,28509=>10565,28416=>10566,28513=>10567,28523=>10568,28541=>10569,28519=>10570,28560=>10571,28499=>10572,28555=>10573,28521=>10574,28543=>10575,28565=>10576,28515=>10577,28535=>10578,28522=>10579,28539=>10580,29106=>10581,29103=>10582,29083=>10583,29104=>10584,29088=>10585,29082=>10586,29097=>10587,29109=>10588,29085=>10589,29093=>10590,29086=>10591,29092=>10592,29089=>10593,29098=>10594,29084=>10595,29095=>10596,29107=>10597,29336=>10598,29338=>10599,29528=>10600,29522=>10601,29534=>10602,29535=>10603,29536=>10604,29533=>10605,29531=>10606,29537=>10607,29530=>10608,29529=>10609,29538=>10610,29831=>10611,29833=>10612,29834=>10613,29830=>10614,29825=>10615,29821=>10616,29829=>10617,29832=>10618,29820=>10619,29817=>10620,58868=>10620,29960=>10621,29959=>10622,30078=>10623,30245=>10624,30238=>10625,30233=>10626,30237=>10627,30236=>10628,30243=>10629,30234=>10630,30248=>10631,30235=>10632,30364=>10633,30365=>10634,30366=>10635,30363=>10636,30605=>10637,30607=>10638,30601=>10639,30600=>10640,30925=>10641,30907=>10642,30927=>10643,30924=>10644,30929=>10645,30926=>10646,30932=>10647,30920=>10648,30915=>10649,30916=>10650,30921=>10651,31130=>10652,31137=>10653,31136=>10654,31132=>10655,31138=>10656,31131=>10657,59175=>10657,27510=>10658,31289=>10659,31410=>10660,31412=>10661,31411=>10662,31671=>10663,31691=>10664,31678=>10665,31660=>10666,31694=>10667,31663=>10668,31673=>10669,31690=>10670,31669=>10671,31941=>10672,31944=>10673,31948=>10674,31947=>10675,32247=>10676,32219=>10677,32234=>10678,32231=>10679,32215=>10680,32225=>10681,32259=>10682,32250=>10683,32230=>10684,32246=>10685,32241=>10686,32240=>10687,32238=>10688,32223=>10689,32630=>10690,32684=>10691,32688=>10692,32685=>10693,32749=>10694,32747=>10695,32746=>10696,32748=>10697,32742=>10698,32744=>10699,32868=>10700,32871=>10701,33187=>10702,33183=>10703,33182=>10704,33173=>10705,33186=>10706,33177=>10707,33175=>10708,33302=>10709,33359=>10710,33363=>10711,33362=>10712,33360=>10713,33358=>10714,33361=>10715,34084=>10716,34107=>10717,34063=>10718,34048=>10719,34089=>10720,34062=>10721,34057=>10722,34061=>10723,34079=>10724,34058=>10725,34087=>10726,34076=>10727,34043=>10728,34091=>10729,34042=>10730,34056=>10731,34060=>10732,34036=>10733,34090=>10734,34034=>10735,34069=>10736,34039=>10737,34027=>10738,34035=>10739,34044=>10740,34066=>10741,34026=>10742,34025=>10743,34070=>10744,34046=>10745,34088=>10746,34077=>10747,34094=>10748,34050=>10749,34045=>10750,34078=>10751,34038=>10752,34097=>10753,34086=>10754,34023=>10755,34024=>10756,34032=>10757,34031=>10758,34041=>10759,34072=>10760,34080=>10761,34096=>10762,34059=>10763,34073=>10764,34095=>10765,34402=>10766,34646=>10767,34659=>10768,34660=>10769,34679=>10770,34785=>10771,34675=>10772,34648=>10773,34644=>10774,34651=>10775,34642=>10776,34657=>10777,34650=>10778,34641=>10779,34654=>10780,34669=>10781,34666=>10782,34640=>10783,34638=>10784,34655=>10785,34653=>10786,34671=>10787,34668=>10788,34682=>10789,34670=>10790,34652=>10791,34661=>10792,34639=>10793,34683=>10794,34677=>10795,34658=>10796,34663=>10797,34665=>10798,34906=>10799,35077=>10800,35084=>10801,35092=>10802,35083=>10803,35095=>10804,35096=>10805,35097=>10806,35078=>10807,35094=>10808,35089=>10809,35086=>10810,35081=>10811,35234=>10812,35236=>10813,35235=>10814,35309=>10815,35312=>10816,35308=>10817,35535=>10818,35526=>10819,35512=>10820,35539=>10821,35537=>10822,35540=>10823,35541=>10824,35515=>10825,35543=>10826,35518=>10827,35520=>10828,35525=>10829,35544=>10830,35523=>10831,35514=>10832,35517=>10833,35545=>10834,35902=>10835,35917=>10836,35983=>10837,36069=>10838,36063=>10839,36057=>10840,36072=>10841,36058=>10842,36061=>10843,36071=>10844,36256=>10845,36252=>10846,36257=>10847,36251=>10848,36384=>10849,36387=>10850,36389=>10851,36388=>10852,36398=>10853,36373=>10854,36379=>10855,36374=>10856,36369=>10857,36377=>10858,36390=>10859,36391=>10860,36372=>10861,36370=>10862,36376=>10863,36371=>10864,36380=>10865,36375=>10866,36378=>10867,36652=>10868,36644=>10869,36632=>10870,36634=>10871,36640=>10872,36643=>10873,36630=>10874,36631=>10875,36979=>10876,36976=>10877,36975=>10878,36967=>10879,36971=>10880,37167=>10881,37163=>10882,37161=>10883,37162=>10884,37170=>10885,37158=>10886,37166=>10887,37253=>10888,37254=>10889,37258=>10890,37249=>10891,37250=>10892,37252=>10893,37248=>10894,37584=>10895,37571=>10896,37572=>10897,37568=>10898,37593=>10899,37558=>10900,37583=>10901,37617=>10902,37599=>10903,37592=>10904,37609=>10905,37591=>10906,37597=>10907,37580=>10908,37615=>10909,37570=>10910,37608=>10911,37578=>10912,37576=>10913,37582=>10914,37606=>10915,37581=>10916,37589=>10917,37577=>10918,37600=>10919,37598=>10920,37607=>10921,37585=>10922,37587=>10923,37557=>10924,37601=>10925,37669=>10926,37574=>10927,37556=>10928,38268=>10929,38316=>10930,38315=>10931,38318=>10932,38320=>10933,38564=>10934,38562=>10935,38611=>10936,38661=>10937,38664=>10938,38658=>10939,38746=>10940,38794=>10941,38798=>10942,38792=>10943,38864=>10944,38863=>10945,38942=>10946,38941=>10947,38950=>10948,38953=>10949,38952=>10950,38944=>10951,38939=>10952,38951=>10953,39090=>10954,39176=>10955,39162=>10956,39185=>10957,39188=>10958,39190=>10959,39191=>10960,39189=>10961,39388=>10962,39373=>10963,39375=>10964,39379=>10965,39380=>10966,39374=>10967,39369=>10968,39382=>10969,60270=>10969,39384=>10970,39371=>10971,39383=>10972,39372=>10973,39603=>10974,39660=>10975,39659=>10976,39667=>10977,39666=>10978,39665=>10979,39750=>10980,39747=>10981,39783=>10982,39796=>10983,39793=>10984,39782=>10985,39798=>10986,39797=>10987,39792=>10988,39784=>10989,39780=>10990,39788=>10991,40188=>10992,40186=>10993,40189=>10994,40191=>10995,40183=>10996,40199=>10997,40192=>10998,40185=>10999,40187=>11000,40200=>11001,40197=>11002,40196=>11003,40579=>11004,40659=>11005,40719=>11006,40720=>11007,20764=>11008,20755=>11009,20759=>11010,20762=>11011,20753=>11012,20958=>11013,21300=>11014,21473=>11015,22128=>11016,22112=>11017,22126=>11018,22131=>11019,22118=>11020,22115=>11021,22125=>11022,22130=>11023,22110=>11024,22135=>11025,22300=>11026,22299=>11027,22728=>11028,22717=>11029,22729=>11030,22719=>11031,22714=>11032,22722=>11033,22716=>11034,22726=>11035,23319=>11036,23321=>11037,23323=>11038,23329=>11039,23316=>11040,23315=>11041,23312=>11042,23318=>11043,23336=>11044,59539=>11044,23322=>11045,23328=>11046,23326=>11047,23535=>11048,23980=>11049,23985=>11050,23977=>11051,23975=>11052,23989=>11053,23984=>11054,23982=>11055,23978=>11056,23976=>11057,23986=>11058,23981=>11059,23983=>11060,23988=>11061,24167=>11062,24168=>11063,24166=>11064,24175=>11065,24297=>11066,24295=>11067,24294=>11068,24296=>11069,24293=>11070,24395=>11071,24508=>11072,24507=>11073,24989=>11074,25000=>11075,24982=>11076,25029=>11077,25012=>11078,25030=>11079,25025=>11080,25036=>11081,25018=>11082,25023=>11083,25016=>11084,24972=>11085,25815=>11086,25814=>11087,25808=>11088,25807=>11089,25801=>11090,25789=>11091,25737=>11092,25795=>11093,25819=>11094,25843=>11095,25817=>11096,25907=>11097,25983=>11098,25980=>11099,26018=>11100,26312=>11101,26302=>11102,26304=>11103,26314=>11104,26315=>11105,26319=>11106,26301=>11107,26299=>11108,26298=>11109,26316=>11110,26403=>11111,27188=>11112,27238=>11113,27209=>11114,27239=>11115,27186=>11116,27240=>11117,27198=>11118,27229=>11119,27245=>11120,27254=>11121,27227=>11122,27217=>11123,27176=>11124,27226=>11125,27195=>11126,27199=>11127,27201=>11128,27242=>11129,27236=>11130,27216=>11131,27215=>11132,27220=>11133,27247=>11134,27241=>11135,27232=>11136,27196=>11137,27230=>11138,27222=>11139,27221=>11140,27213=>11141,27214=>11142,27206=>11143,27477=>11144,27476=>11145,27478=>11146,27559=>11147,27562=>11148,27563=>11149,27592=>11150,27591=>11151,27652=>11152,27651=>11153,27654=>11154,28589=>11155,28619=>11156,28579=>11157,28615=>11158,28604=>11159,28622=>11160,28616=>11161,28510=>11162,28612=>11163,28605=>11164,28574=>11165,28618=>11166,28584=>11167,28676=>11168,28581=>11169,28590=>11170,28602=>11171,28588=>11172,28586=>11173,28623=>11174,28607=>11175,28600=>11176,28578=>11177,28617=>11178,28587=>11179,28621=>11180,28591=>11181,28594=>11182,28592=>11183,29125=>11184,29122=>11185,29119=>11186,29112=>11187,29142=>11188,29120=>11189,29121=>11190,29131=>11191,29140=>11192,29130=>11193,29127=>11194,29135=>11195,29117=>11196,29144=>11197,29116=>11198,29126=>11199,29146=>11200,29147=>11201,29341=>11202,29342=>11203,29545=>11204,29542=>11205,29543=>11206,29548=>11207,29541=>11208,29547=>11209,29546=>11210,29823=>11211,29850=>11212,29856=>11213,29844=>11214,29842=>11215,29845=>11216,29857=>11217,29963=>11218,30080=>11219,30255=>11220,30253=>11221,30257=>11222,30269=>11223,30259=>11224,30268=>11225,30261=>11226,30258=>11227,30256=>11228,30395=>11229,30438=>11230,30618=>11231,30621=>11232,30625=>11233,30620=>11234,30619=>11235,30626=>11236,30627=>11237,30613=>11238,30617=>11239,30615=>11240,30941=>11241,30953=>11242,30949=>11243,30954=>11244,30942=>11245,30947=>11246,30939=>11247,30945=>11248,30946=>11249,30957=>11250,30943=>11251,30944=>11252,31140=>11253,31300=>11254,31304=>11255,31303=>11256,31414=>11257,31416=>11258,31413=>11259,31409=>11260,31415=>11261,31710=>11262,31715=>11263,31719=>11264,31709=>11265,31701=>11266,31717=>11267,31706=>11268,31720=>11269,31737=>11270,31700=>11271,31722=>11272,31714=>11273,31708=>11274,31723=>11275,31704=>11276,31711=>11277,31954=>11278,31956=>11279,31959=>11280,31952=>11281,31953=>11282,32274=>11283,32289=>11284,32279=>11285,32268=>11286,32287=>11287,32288=>11288,32275=>11289,32270=>11290,32284=>11291,32277=>11292,32282=>11293,32290=>11294,32267=>11295,32271=>11296,32278=>11297,32269=>11298,32276=>11299,32293=>11300,32292=>11301,32579=>11302,32635=>11303,32636=>11304,32634=>11305,32689=>11306,32751=>11307,32810=>11308,32809=>11309,32876=>11310,33201=>11311,33190=>11312,33198=>11313,33209=>11314,33205=>11315,33195=>11316,33200=>11317,33196=>11318,33204=>11319,33202=>11320,33207=>11321,33191=>11322,33266=>11323,33365=>11324,33366=>11325,33367=>11326,34134=>11327,34117=>11328,34155=>11329,34125=>11330,34131=>11331,34145=>11332,34136=>11333,34112=>11334,34118=>11335,34148=>11336,34113=>11337,34146=>11338,34116=>11339,34129=>11340,34119=>11341,34147=>11342,34110=>11343,34139=>11344,34161=>11345,34126=>11346,34158=>11347,34165=>11348,34133=>11349,34151=>11350,34144=>11351,34188=>11352,34150=>11353,34141=>11354,34132=>11355,34149=>11356,34156=>11357,34403=>11358,34405=>11359,34404=>11360,34724=>11361,34715=>11362,34703=>11363,34711=>11364,34707=>11365,34706=>11366,34696=>11367,34689=>11368,34710=>11369,34712=>11370,34681=>11371,34695=>11372,34723=>11373,34693=>11374,34704=>11375,34705=>11376,34717=>11377,34692=>11378,34708=>11379,34716=>11380,34714=>11381,34697=>11382,35102=>11383,35110=>11384,35120=>11385,35117=>11386,35118=>11387,35111=>11388,35121=>11389,35106=>11390,35113=>11391,35107=>11392,35119=>11393,35116=>11394,35103=>11395,35313=>11396,35552=>11397,35554=>11398,35570=>11399,35572=>11400,35573=>11401,35549=>11402,35604=>11403,35556=>11404,35551=>11405,35568=>11406,35528=>11407,35550=>11408,35553=>11409,35560=>11410,35583=>11411,35567=>11412,35579=>11413,35985=>11414,35986=>11415,35984=>11416,36085=>11417,36078=>11418,36081=>11419,36080=>11420,36083=>11421,36204=>11422,36206=>11423,36261=>11424,36263=>11425,36403=>11426,36414=>11427,36408=>11428,36416=>11429,36421=>11430,36406=>11431,36412=>11432,36413=>11433,36417=>11434,36400=>11435,36415=>11436,36541=>11437,36662=>11438,60329=>11438,36654=>11439,36661=>11440,36658=>11441,36665=>11442,36663=>11443,36660=>11444,36982=>11445,36985=>11446,36987=>11447,36998=>11448,37114=>11449,37171=>11450,37173=>11451,37174=>11452,37267=>11453,37264=>11454,37265=>11455,37261=>11456,37263=>11457,37671=>11458,37662=>11459,37640=>11460,37663=>11461,37638=>11462,37647=>11463,37754=>11464,37688=>11465,37692=>11466,37659=>11467,37667=>11468,37650=>11469,37633=>11470,37702=>11471,37677=>11472,37646=>11473,37645=>11474,37579=>11475,37661=>11476,37626=>11477,37651=>11478,37625=>11479,37623=>11480,37684=>11481,37634=>11482,37668=>11483,37631=>11484,37673=>11485,37689=>11486,37685=>11487,37674=>11488,37652=>11489,37644=>11490,37643=>11491,37630=>11492,37641=>11493,37632=>11494,37627=>11495,37654=>11496,38332=>11497,38349=>11498,38334=>11499,38329=>11500,38330=>11501,38326=>11502,38335=>11503,38325=>11504,38333=>11505,38569=>11506,38612=>11507,38667=>11508,38674=>11509,38672=>11510,38809=>11511,38807=>11512,38804=>11513,38896=>11514,38904=>11515,38965=>11516,38959=>11517,38962=>11518,39204=>11519,39199=>11520,39207=>11521,39209=>11522,39326=>11523,39406=>11524,39404=>11525,39397=>11526,39396=>11527,39408=>11528,39395=>11529,39402=>11530,39401=>11531,39399=>11532,39609=>11533,39615=>11534,39604=>11535,39611=>11536,39670=>11537,39674=>11538,39673=>11539,39671=>11540,39731=>11541,39808=>11542,39813=>11543,39815=>11544,39804=>11545,39806=>11546,39803=>11547,39810=>11548,39827=>11549,39826=>11550,39824=>11551,39802=>11552,39829=>11553,39805=>11554,39816=>11555,40229=>11556,40215=>11557,40224=>11558,40222=>11559,40212=>11560,40233=>11561,40221=>11562,40216=>11563,40226=>11564,40208=>11565,40217=>11566,40223=>11567,40584=>11568,40582=>11569,40583=>11570,40622=>11571,40621=>11572,40661=>11573,40662=>11574,40698=>11575,40722=>11576,40765=>11577,20774=>11578,20773=>11579,20770=>11580,20772=>11581,20768=>11582,20777=>11583,21236=>11584,22163=>11585,22156=>11586,22157=>11587,22150=>11588,22148=>11589,22147=>11590,22142=>11591,22146=>11592,22143=>11593,22145=>11594,22742=>11595,22740=>11596,22735=>11597,22738=>11598,23341=>11599,23333=>11600,23346=>11601,23331=>11602,23340=>11603,23335=>11604,23334=>11605,23343=>11606,23342=>11607,23419=>11608,23537=>11609,23538=>11610,23991=>11611,24172=>11612,24170=>11613,24510=>11614,25027=>11615,25013=>11616,25020=>11617,25063=>11618,25056=>11619,25061=>11620,25060=>11621,25064=>11622,25054=>11623,25839=>11624,25833=>11625,25827=>11626,25835=>11627,25828=>11628,25832=>11629,25985=>11630,25984=>11631,26038=>11632,26074=>11633,26322=>11634,27277=>11635,27286=>11636,27265=>11637,27301=>11638,27273=>11639,27295=>11640,27291=>11641,27297=>11642,27294=>11643,27271=>11644,27283=>11645,27278=>11646,27285=>11647,27267=>11648,27304=>11649,27300=>11650,27281=>11651,27263=>11652,27302=>11653,27290=>11654,27269=>11655,27276=>11656,27282=>11657,27483=>11658,27565=>11659,27657=>11660,28620=>11661,28585=>11662,28660=>11663,28628=>11664,28643=>11665,28636=>11666,28653=>11667,28647=>11668,28646=>11669,28638=>11670,28658=>11671,28637=>11672,28642=>11673,28648=>11674,29153=>11675,29169=>11676,29160=>11677,29170=>11678,29156=>11679,29168=>11680,29154=>11681,29555=>11682,29550=>11683,29551=>11684,29847=>11685,29874=>11686,29867=>11687,29840=>11688,29866=>11689,29869=>11690,29873=>11691,29861=>11692,29871=>11693,29968=>11694,29969=>11695,29970=>11696,29967=>11697,30084=>11698,30275=>11699,30280=>11700,30281=>11701,30279=>11702,30372=>11703,30441=>11704,30645=>11705,30635=>11706,30642=>11707,30647=>11708,30646=>11709,30644=>11710,30641=>11711,30632=>11712,30704=>11713,30963=>11714,30973=>11715,30978=>11716,30971=>11717,30972=>11718,30975=>11719,30962=>11720,30981=>11721,30969=>11722,30974=>11723,30980=>11724,31147=>11725,31144=>11726,31324=>11727,31323=>11728,31318=>11729,31320=>11730,31316=>11731,31322=>11732,31422=>11733,31424=>11734,31425=>11735,31749=>11736,31759=>11737,31730=>11738,31744=>11739,31743=>11740,31739=>11741,31758=>11742,31732=>11743,31755=>11744,31731=>11745,31746=>11746,31753=>11747,31747=>11748,31745=>11749,31736=>11750,31741=>11751,31750=>11752,58176=>11752,31728=>11753,31729=>11754,31760=>11755,31754=>11756,31976=>11757,32301=>11758,32316=>11759,32322=>11760,32307=>11761,38984=>11762,32312=>11763,32298=>11764,32329=>11765,32320=>11766,32327=>11767,32297=>11768,32332=>11769,32304=>11770,32315=>11771,32310=>11772,32324=>11773,32314=>11774,32581=>11775,32639=>11776,32638=>11777,32637=>11778,32756=>11779,32754=>11780,32812=>11781,33211=>11782,33220=>11783,33228=>11784,33226=>11785,33221=>11786,33223=>11787,33212=>11788,33257=>11789,33371=>11790,33370=>11791,33372=>11792,34179=>11793,34176=>11794,34191=>11795,34215=>11796,34197=>11797,34208=>11798,34187=>11799,34211=>11800,34171=>11801,34212=>11802,34202=>11803,34206=>11804,34167=>11805,34172=>11806,34185=>11807,34209=>11808,34170=>11809,34168=>11810,34135=>11811,34190=>11812,34198=>11813,34182=>11814,34189=>11815,34201=>11816,34205=>11817,34177=>11818,34210=>11819,34178=>11820,34184=>11821,34181=>11822,34169=>11823,34166=>11824,34200=>11825,34192=>11826,34207=>11827,34408=>11828,34750=>11829,34730=>11830,34733=>11831,34757=>11832,34736=>11833,34732=>11834,34745=>11835,34741=>11836,34748=>11837,34734=>11838,34761=>11839,34755=>11840,34754=>11841,34764=>11842,34743=>11843,34735=>11844,34756=>11845,34762=>11846,34740=>11847,34742=>11848,34751=>11849,34744=>11850,34749=>11851,34782=>11852,34738=>11853,35125=>11854,35123=>11855,35132=>11856,35134=>11857,35137=>11858,35154=>11859,35127=>11860,35138=>11861,35245=>11862,35247=>11863,35246=>11864,35314=>11865,35315=>11866,35614=>11867,35608=>11868,35606=>11869,35601=>11870,35589=>11871,35595=>11872,35618=>11873,35599=>11874,35602=>11875,35605=>11876,35591=>11877,35597=>11878,35592=>11879,35590=>11880,35612=>11881,35603=>11882,35610=>11883,35919=>11884,35952=>11885,35954=>11886,35953=>11887,35951=>11888,35989=>11889,35988=>11890,36089=>11891,36207=>11892,36430=>11893,36429=>11894,36435=>11895,36432=>11896,36428=>11897,36423=>11898,36675=>11899,36672=>11900,36997=>11901,36990=>11902,37176=>11903,37274=>11904,37282=>11905,37275=>11906,37273=>11907,37279=>11908,37281=>11909,37277=>11910,37280=>11911,37793=>11912,37763=>11913,37807=>11914,37732=>11915,37718=>11916,37703=>11917,37756=>11918,37720=>11919,37724=>11920,37750=>11921,37705=>11922,37712=>11923,37713=>11924,37728=>11925,37741=>11926,37775=>11927,37708=>11928,37738=>11929,37753=>11930,37719=>11931,37717=>11932,37714=>11933,37711=>11934,37745=>11935,37751=>11936,37755=>11937,37729=>11938,37726=>11939,37731=>11940,37735=>11941,37710=>11942,37721=>11943,38343=>11944,38336=>11945,38345=>11946,38339=>11947,38341=>11948,38327=>11949,38574=>11950,38576=>11951,38572=>11952,38688=>11953,38687=>11954,38680=>11955,38685=>11956,38681=>11957,38810=>11958,38817=>11959,38812=>11960,38814=>11961,38813=>11962,38869=>11963,38868=>11964,38897=>11965,38977=>11966,38980=>11967,38986=>11968,38985=>11969,38981=>11970,38979=>11971,39205=>11972,39211=>11973,39212=>11974,39210=>11975,39219=>11976,39218=>11977,39215=>11978,39213=>11979,39217=>11980,39216=>11981,39320=>11982,39331=>11983,39329=>11984,39426=>11985,39418=>11986,39412=>11987,39415=>11988,39417=>11989,39416=>11990,39414=>11991,39419=>11992,39421=>11993,39422=>11994,39420=>11995,39427=>11996,39614=>11997,39678=>11998,39677=>11999,39681=>12000,39676=>12001,39752=>12002,39834=>12003,39848=>12004,39838=>12005,39835=>12006,39846=>12007,39841=>12008,39845=>12009,39844=>12010,39814=>12011,39842=>12012,39840=>12013,39855=>12014,40243=>12015,40257=>12016,40295=>12017,40246=>12018,40238=>12019,40239=>12020,40241=>12021,40248=>12022,40240=>12023,40261=>12024,40258=>12025,40259=>12026,40254=>12027,40247=>12028,40256=>12029,40253=>12030,32757=>12031,40237=>12032,40586=>12033,40585=>12034,40589=>12035,40624=>12036,40648=>12037,40666=>12038,40699=>12039,40703=>12040,40740=>12041,40739=>12042,40738=>12043,40788=>12044,12245=>12045,40864=>12045,20785=>12046,20781=>12047,20782=>12048,22168=>12049,22172=>12050,22167=>12051,22170=>12052,22173=>12053,22169=>12054,22896=>12055,23356=>12056,23657=>12057,23658=>12058,24000=>12059,24173=>12060,24174=>12061,25048=>12062,25055=>12063,25069=>12064,25070=>12065,25073=>12066,25066=>12067,25072=>12068,25067=>12069,25046=>12070,25065=>12071,25855=>12072,25860=>12073,25853=>12074,25848=>12075,25857=>12076,25859=>12077,25852=>12078,26004=>12079,26075=>12080,26330=>12081,26331=>12082,26328=>12083,27333=>12084,27321=>12085,27325=>12086,27361=>12087,27334=>12088,27322=>12089,27318=>12090,27319=>12091,27335=>12092,27316=>12093,27309=>12094,27486=>12095,27593=>12096,27659=>12097,28679=>12098,28684=>12099,28685=>12100,28673=>12101,28677=>12102,28692=>12103,28686=>12104,28671=>12105,28672=>12106,28667=>12107,28710=>12108,28668=>12109,28663=>12110,28682=>12111,29185=>12112,60224=>12112,29183=>12113,29177=>12114,29187=>12115,29181=>12116,29558=>12117,29880=>12118,29888=>12119,29877=>12120,29889=>12121,29886=>12122,29878=>12123,29883=>12124,29890=>12125,29972=>12126,29971=>12127,30300=>12128,30308=>12129,30297=>12130,30288=>12131,30291=>12132,30295=>12133,30298=>12134,30374=>12135,30397=>12136,30444=>12137,30658=>12138,30650=>12139,30988=>12140,30995=>12141,30996=>12142,30985=>12143,30992=>12144,30994=>12145,30993=>12146,31149=>12147,31148=>12148,31327=>12149,31772=>12150,31785=>12151,31769=>12152,31776=>12153,31775=>12154,31789=>12155,31773=>12156,31782=>12157,31784=>12158,31778=>12159,31781=>12160,31792=>12161,32348=>12162,32336=>12163,32342=>12164,32355=>12165,32344=>12166,32354=>12167,32351=>12168,32337=>12169,32352=>12170,32343=>12171,32339=>12172,32693=>12173,32691=>12174,32759=>12175,32760=>12176,32885=>12177,33233=>12178,33234=>12179,33232=>12180,33375=>12181,33374=>12182,34228=>12183,34246=>12184,34240=>12185,34243=>12186,34242=>12187,34227=>12188,34229=>12189,34237=>12190,34247=>12191,34244=>12192,34239=>12193,34251=>12194,34254=>12195,34248=>12196,34245=>12197,34225=>12198,34230=>12199,34258=>12200,34340=>12201,34232=>12202,34231=>12203,34238=>12204,34409=>12205,34791=>12206,34790=>12207,34786=>12208,34779=>12209,34795=>12210,34794=>12211,34789=>12212,34783=>12213,34803=>12214,34788=>12215,34772=>12216,34780=>12217,34771=>12218,34797=>12219,34776=>12220,34787=>12221,34775=>12222,34777=>12223,34817=>12224,34804=>12225,34792=>12226,34781=>12227,35155=>12228,35147=>12229,35151=>12230,35148=>12231,35142=>12232,35152=>12233,35153=>12234,35145=>12235,35626=>12236,35623=>12237,35619=>12238,35635=>12239,35632=>12240,35637=>12241,35655=>12242,35631=>12243,35644=>12244,35646=>12245,35633=>12246,35621=>12247,35639=>12248,35622=>12249,35638=>12250,35630=>12251,35620=>12252,35643=>12253,35645=>12254,35642=>12255,35906=>12256,35957=>12257,35993=>12258,35992=>12259,35991=>12260,36094=>12261,36100=>12262,36098=>12263,36096=>12264,36444=>12265,36450=>12266,36448=>12267,36439=>12268,36438=>12269,36446=>12270,36453=>12271,36455=>12272,36443=>12273,36442=>12274,36449=>12275,36445=>12276,36457=>12277,36436=>12278,36678=>12279,36679=>12280,36680=>12281,36683=>12282,37160=>12283,37178=>12284,37179=>12285,37182=>12286,37288=>12287,37285=>12288,37287=>12289,37295=>12290,37290=>12291,37813=>12292,37772=>12293,37778=>12294,37815=>12295,37787=>12296,37789=>12297,37769=>12298,37799=>12299,37774=>12300,37802=>12301,37790=>12302,37798=>12303,37781=>12304,37768=>12305,37785=>12306,37791=>12307,37760=>12308,37773=>12309,37809=>12310,37777=>12311,37810=>12312,37796=>12313,37800=>12314,37812=>12315,37795=>12316,38354=>12317,38355=>12318,38353=>12319,38579=>12320,38615=>12321,38618=>12322,24002=>12323,38623=>12324,38616=>12325,38621=>12326,38691=>12327,38690=>12328,38693=>12329,38828=>12330,38830=>12331,38824=>12332,38827=>12333,38820=>12334,38826=>12335,38818=>12336,38821=>12337,38871=>12338,38873=>12339,38870=>12340,38872=>12341,38906=>12342,38992=>12343,38993=>12344,38994=>12345,39096=>12346,39233=>12347,39228=>12348,39226=>12349,39439=>12350,39435=>12351,39433=>12352,39437=>12353,39428=>12354,39441=>12355,39434=>12356,39429=>12357,39431=>12358,39430=>12359,39616=>12360,39644=>12361,39688=>12362,39684=>12363,39685=>12364,39721=>12365,39733=>12366,39754=>12367,39756=>12368,39755=>12369,39879=>12370,39878=>12371,39875=>12372,39871=>12373,39873=>12374,39861=>12375,39864=>12376,39891=>12377,39862=>12378,39876=>12379,39865=>12380,39869=>12381,40284=>12382,40275=>12383,40271=>12384,40266=>12385,40283=>12386,40267=>12387,40281=>12388,40278=>12389,40268=>12390,40279=>12391,40274=>12392,40276=>12393,40287=>12394,40280=>12395,40282=>12396,40590=>12397,40588=>12398,40671=>12399,40705=>12400,40704=>12401,40726=>12402,58693=>12402,40741=>12403,40747=>12404,40746=>12405,40745=>12406,40744=>12407,40780=>12408,40789=>12409,20788=>12410,20789=>12411,21142=>12412,21239=>12413,21428=>12414,22187=>12415,22189=>12416,22182=>12417,22183=>12418,22186=>12419,22188=>12420,22746=>12421,22749=>12422,22747=>12423,22802=>12424,23357=>12425,23358=>12426,23359=>12427,24003=>12428,24176=>12429,24511=>12430,25083=>12431,25863=>12432,25872=>12433,25869=>12434,25865=>12435,25868=>12436,25870=>12437,25988=>12438,26078=>12439,26077=>12440,26334=>12441,27367=>12442,27360=>12443,27340=>12444,27345=>12445,27353=>12446,27339=>12447,27359=>12448,27356=>12449,27344=>12450,27371=>12451,27343=>12452,27341=>12453,27358=>12454,27488=>12455,27568=>12456,27660=>12457,28697=>12458,28711=>12459,28704=>12460,28694=>12461,28715=>12462,28705=>12463,28706=>12464,28707=>12465,28713=>12466,28695=>12467,28708=>12468,28700=>12469,29196=>12470,29194=>12471,29191=>12472,29186=>12473,29189=>12474,29349=>12475,29350=>12476,29348=>12477,29347=>12478,29345=>12479,29899=>12480,29893=>12481,29879=>12482,29891=>12483,29974=>12484,30304=>12485,30665=>12486,30666=>12487,30660=>12488,30705=>12489,31005=>12490,31003=>12491,31009=>12492,31004=>12493,30999=>12494,31006=>12495,31152=>12496,31335=>12497,31336=>12498,31795=>12499,31804=>12500,31801=>12501,31788=>12502,31803=>12503,31980=>12504,31978=>12505,32374=>12506,32373=>12507,32376=>12508,32368=>12509,32375=>12510,32367=>12511,32378=>12512,32370=>12513,32372=>12514,32360=>12515,32587=>12516,32586=>12517,32643=>12518,32646=>12519,32695=>12520,32765=>12521,32766=>12522,32888=>12523,33239=>12524,33237=>12525,33291=>12526,33380=>12527,33377=>12528,33379=>12529,34283=>12530,34289=>12531,34285=>12532,34265=>12533,34273=>12534,34280=>12535,34266=>12536,34263=>12537,34284=>12538,34290=>12539,34296=>12540,34264=>12541,34271=>12542,34275=>12543,34268=>12544,34257=>12545,34288=>12546,34278=>12547,34287=>12548,34270=>12549,34274=>12550,34816=>12551,34810=>12552,34819=>12553,34806=>12554,34807=>12555,34825=>12556,34828=>12557,34827=>12558,34822=>12559,34812=>12560,34824=>12561,34815=>12562,34826=>12563,34818=>12564,35170=>12565,35162=>12566,35163=>12567,35159=>12568,35169=>12569,35164=>12570,35160=>12571,35165=>12572,35161=>12573,35208=>12574,35255=>12575,35254=>12576,35318=>12577,35664=>12578,35656=>12579,35658=>12580,35648=>12581,35667=>12582,35670=>12583,35668=>12584,35659=>12585,35669=>12586,35665=>12587,35650=>12588,35666=>12589,35671=>12590,35907=>12591,35959=>12592,35958=>12593,35994=>12594,36102=>12595,36103=>12596,36105=>12597,36268=>12598,36266=>12599,36269=>12600,36267=>12601,36461=>12602,36472=>12603,36467=>12604,36458=>12605,36463=>12606,36475=>12607,36546=>12608,36690=>12609,36689=>12610,36687=>12611,36688=>12612,36691=>12613,36788=>12614,37184=>12615,37183=>12616,37296=>12617,37293=>12618,37854=>12619,37831=>12620,37839=>12621,37826=>12622,37850=>12623,37840=>12624,37881=>12625,37868=>12626,37836=>12627,37849=>12628,37801=>12629,37862=>12630,37834=>12631,37844=>12632,37870=>12633,37859=>12634,37845=>12635,37828=>12636,37838=>12637,37824=>12638,37842=>12639,37797=>12640,37863=>12641,38269=>12642,38362=>12643,38363=>12644,38625=>12645,38697=>12646,38699=>12647,38700=>12648,38696=>12649,38694=>12650,38835=>12651,38839=>12652,38838=>12653,38877=>12654,38878=>12655,38879=>12656,39004=>12657,39001=>12658,39005=>12659,38999=>12660,39103=>12661,39101=>12662,39099=>12663,39102=>12664,39240=>12665,39239=>12666,39235=>12667,39334=>12668,39335=>12669,39450=>12670,39445=>12671,39461=>12672,39453=>12673,39460=>12674,39451=>12675,39458=>12676,39456=>12677,39463=>12678,39459=>12679,39454=>12680,39452=>12681,39444=>12682,39618=>12683,39691=>12684,39690=>12685,39694=>12686,39692=>12687,39735=>12688,39914=>12689,39915=>12690,39904=>12691,39902=>12692,39908=>12693,39910=>12694,39906=>12695,39920=>12696,39892=>12697,39895=>12698,39916=>12699,39900=>12700,39897=>12701,39909=>12702,39893=>12703,39905=>12704,39898=>12705,40311=>12706,40321=>12707,40330=>12708,40324=>12709,40328=>12710,40305=>12711,40320=>12712,40312=>12713,40326=>12714,40331=>12715,40332=>12716,40317=>12717,40299=>12718,40308=>12719,40309=>12720,40304=>12721,40297=>12722,40325=>12723,40307=>12724,40315=>12725,40322=>12726,40303=>12727,40313=>12728,40319=>12729,40327=>12730,40296=>12731,40596=>12732,40593=>12733,40640=>12734,40700=>12735,40749=>12736,40768=>12737,40769=>12738,40781=>12739,40790=>12740,40791=>12741,40792=>12742,21303=>12743,22194=>12744,22197=>12745,22195=>12746,22755=>12747,23365=>12748,24006=>12749,24007=>12750,24302=>12751,24303=>12752,24512=>12753,24513=>12754,25081=>12755,25879=>12756,25878=>12757,25877=>12758,25875=>12759,26079=>12760,26344=>12761,26339=>12762,26340=>12763,27379=>12764,27376=>12765,27370=>12766,27368=>12767,27385=>12768,27377=>12769,27374=>12770,27375=>12771,28732=>12772,28725=>12773,28719=>12774,28727=>12775,28724=>12776,28721=>12777,28738=>12778,28728=>12779,28735=>12780,28730=>12781,28729=>12782,28714=>12783,28736=>12784,28731=>12785,28723=>12786,28737=>12787,29203=>12788,29204=>12789,29352=>12790,29565=>12791,29564=>12792,29882=>12793,30379=>12794,30378=>12795,30398=>12796,30445=>12797,30668=>12798,30670=>12799,30671=>12800,30669=>12801,30706=>12802,31013=>12803,31011=>12804,31015=>12805,31016=>12806,31012=>12807,31017=>12808,31154=>12809,31342=>12810,31340=>12811,31341=>12812,31479=>12813,31817=>12814,31816=>12815,31818=>12816,31815=>12817,31813=>12818,31982=>12819,32379=>12820,32382=>12821,32385=>12822,32384=>12823,32698=>12824,32767=>12825,32889=>12826,33243=>12827,33241=>12828,33384=>12829,33385=>12830,34338=>12831,34303=>12832,34305=>12833,34302=>12834,34331=>12835,34304=>12836,34294=>12837,34308=>12838,34313=>12839,34309=>12840,34316=>12841,34301=>12842,34841=>12843,34832=>12844,34833=>12845,34839=>12846,34835=>12847,34838=>12848,35171=>12849,35174=>12850,35257=>12851,35319=>12852,35680=>12853,35690=>12854,35677=>12855,35688=>12856,35683=>12857,35685=>12858,35687=>12859,35693=>12860,36270=>12861,36486=>12862,36488=>12863,36484=>12864,36697=>12865,36694=>12866,36695=>12867,36693=>12868,36696=>12869,36698=>12870,37005=>12871,37187=>12872,37185=>12873,37303=>12874,37301=>12875,37298=>12876,37299=>12877,37899=>12878,37907=>12879,37883=>12880,37920=>12881,37903=>12882,37908=>12883,37886=>12884,37909=>12885,37904=>12886,37928=>12887,37913=>12888,37901=>12889,37877=>12890,37888=>12891,37879=>12892,37895=>12893,37902=>12894,37910=>12895,37906=>12896,37882=>12897,37897=>12898,37880=>12899,37948=>12900,37898=>12901,37887=>12902,37884=>12903,37900=>12904,37878=>12905,37905=>12906,37894=>12907,38366=>12908,38368=>12909,38367=>12910,38702=>12911,38703=>12912,38841=>12913,38843=>12914,38909=>12915,38910=>12916,39008=>12917,39010=>12918,39011=>12919,39007=>12920,39105=>12921,39106=>12922,39248=>12923,39246=>12924,39257=>12925,39244=>12926,39243=>12927,39251=>12928,39474=>12929,39476=>12930,39473=>12931,39468=>12932,39466=>12933,39478=>12934,39465=>12935,39470=>12936,39480=>12937,39469=>12938,39623=>12939,39626=>12940,39622=>12941,39696=>12942,39698=>12943,39697=>12944,39947=>12945,39944=>12946,39927=>12947,39941=>12948,39954=>12949,39928=>12950,40000=>12951,39943=>12952,39950=>12953,39942=>12954,39959=>12955,39956=>12956,39945=>12957,40351=>12958,40345=>12959,40356=>12960,40349=>12961,40338=>12962,40344=>12963,40336=>12964,40347=>12965,40352=>12966,40340=>12967,40348=>12968,40362=>12969,40343=>12970,40353=>12971,40346=>12972,40354=>12973,40360=>12974,40350=>12975,40355=>12976,40383=>12977,40361=>12978,40342=>12979,40358=>12980,40359=>12981,40601=>12982,40603=>12983,40602=>12984,40677=>12985,40676=>12986,40679=>12987,40678=>12988,40752=>12989,40750=>12990,40795=>12991,40800=>12992,40798=>12993,40797=>12994,40793=>12995,40849=>12996,20794=>12997,20793=>12998,21144=>12999,21143=>13000,22211=>13001,22205=>13002,22206=>13003,23368=>13004,23367=>13005,24011=>13006,24015=>13007,24305=>13008,25085=>13009,25883=>13010,27394=>13011,27388=>13012,27395=>13013,27384=>13014,27392=>13015,28739=>13016,28740=>13017,28746=>13018,28744=>13019,28745=>13020,28741=>13021,28742=>13022,29213=>13023,29210=>13024,29209=>13025,29566=>13026,29975=>13027,30314=>13028,30672=>13029,31021=>13030,31025=>13031,31023=>13032,31828=>13033,31827=>13034,31986=>13035,32394=>13036,60229=>13037,32391=>13037,32392=>13038,32395=>13039,32390=>13040,32397=>13041,32589=>13042,32699=>13043,32816=>13044,33245=>13045,34328=>13046,34346=>13047,34342=>13048,34335=>13049,34339=>13050,34332=>13051,34329=>13052,34343=>13053,34350=>13054,34337=>13055,34336=>13056,34345=>13057,34334=>13058,34341=>13059,34857=>13060,34845=>13061,34843=>13062,34848=>13063,34852=>13064,34844=>13065,34859=>13066,34890=>13067,35181=>13068,35177=>13069,35182=>13070,35179=>13071,35322=>13072,35705=>13073,35704=>13074,35653=>13075,35706=>13076,35707=>13077,36112=>13078,36116=>13079,36271=>13080,36494=>13081,36492=>13082,36702=>13083,36699=>13084,36701=>13085,37190=>13086,37188=>13087,37189=>13088,37305=>13089,37951=>13090,37947=>13091,37942=>13092,37929=>13093,37949=>13094,37936=>13095,37945=>13096,37930=>13097,37943=>13098,37932=>13099,37952=>13100,37937=>13101,38373=>13102,38372=>13103,38371=>13104,38709=>13105,38714=>13106,38847=>13107,38881=>13108,39012=>13109,39113=>13110,39110=>13111,39104=>13112,39256=>13113,39254=>13114,39481=>13115,39485=>13116,39494=>13117,39492=>13118,39490=>13119,39489=>13120,39482=>13121,39487=>13122,39629=>13123,39701=>13124,39703=>13125,39704=>13126,39702=>13127,39738=>13128,39762=>13129,39979=>13130,39965=>13131,39964=>13132,39980=>13133,39971=>13134,39976=>13135,39977=>13136,39972=>13137,39969=>13138,40375=>13139,40374=>13140,40380=>13141,40385=>13142,40391=>13143,40394=>13144,40399=>13145,40382=>13146,40389=>13147,40387=>13148,40379=>13149,40373=>13150,40398=>13151,40377=>13152,40378=>13153,40364=>13154,40392=>13155,40369=>13156,40365=>13157,40396=>13158,40371=>13159,40397=>13160,40370=>13161,40570=>13162,40604=>13163,40683=>13164,40686=>13165,40685=>13166,40731=>13167,40728=>13168,40730=>13169,40753=>13170,40782=>13171,40805=>13172,40804=>13173,40850=>13174,20153=>13175,22214=>13176,22213=>13177,22219=>13178,22897=>13179,23371=>13180,23372=>13181,24021=>13182,24017=>13183,24306=>13184,25889=>13185,25888=>13186,25894=>13187,25890=>13188,27403=>13189,27400=>13190,27401=>13191,27661=>13192,28757=>13193,28758=>13194,28759=>13195,28754=>13196,29214=>13197,29215=>13198,29353=>13199,29567=>13200,29912=>13201,29909=>13202,29913=>13203,29911=>13204,30317=>13205,30381=>13206,31029=>13207,31156=>13208,31344=>13209,31345=>13210,31831=>13211,31836=>13212,31833=>13213,31835=>13214,31834=>13215,31988=>13216,31985=>13217,32401=>13218,32591=>13219,32647=>13220,33246=>13221,33387=>13222,34356=>13223,34357=>13224,34355=>13225,34348=>13226,34354=>13227,34358=>13228,34860=>13229,34856=>13230,34854=>13231,34858=>13232,34853=>13233,35185=>13234,35263=>13235,35262=>13236,35323=>13237,35710=>13238,35716=>13239,35714=>13240,35718=>13241,35717=>13242,35711=>13243,36117=>13244,36501=>13245,36500=>13246,36506=>13247,36498=>13248,36496=>13249,36502=>13250,36503=>13251,36704=>13252,36706=>13253,37191=>13254,37964=>13255,37968=>13256,37962=>13257,37963=>13258,37967=>13259,37959=>13260,37957=>13261,37960=>13262,37961=>13263,37958=>13264,38719=>13265,38883=>13266,39018=>13267,39017=>13268,39115=>13269,39252=>13270,39259=>13271,39502=>13272,39507=>13273,39508=>13274,39500=>13275,39503=>13276,39496=>13277,39498=>13278,39497=>13279,39506=>13280,39504=>13281,39632=>13282,39705=>13283,39723=>13284,39739=>13285,39766=>13286,39765=>13287,40006=>13288,40008=>13289,39999=>13290,40004=>13291,39993=>13292,39987=>13293,40001=>13294,39996=>13295,39991=>13296,39988=>13297,39986=>13298,39997=>13299,39990=>13300,40411=>13301,40402=>13302,40414=>13303,40410=>13304,40395=>13305,40400=>13306,40412=>13307,40401=>13308,40415=>13309,40425=>13310,40409=>13311,40408=>13312,40406=>13313,40437=>13314,40405=>13315,40413=>13316,40630=>13317,40688=>13318,40757=>13319,40755=>13320,40754=>13321,40770=>13322,40811=>13323,40853=>13324,40866=>13325,20797=>13326,21145=>13327,22760=>13328,22759=>13329,22898=>13330,23373=>13331,24024=>13332,34863=>13333,24399=>13334,25089=>13335,25091=>13336,25092=>13337,25897=>13338,25893=>13339,26006=>13340,26347=>13341,27409=>13342,27410=>13343,27407=>13344,27594=>13345,28763=>13346,28762=>13347,29218=>13348,29570=>13349,29569=>13350,29571=>13351,30320=>13352,30676=>13353,31847=>13354,31846=>13355,32405=>13356,33388=>13357,34362=>13358,34368=>13359,34361=>13360,34364=>13361,34353=>13362,34363=>13363,34366=>13364,34864=>13365,34866=>13366,34862=>13367,34867=>13368,35190=>13369,35188=>13370,35187=>13371,35326=>13372,35724=>13373,35726=>13374,35723=>13375,35720=>13376,35909=>13377,36121=>13378,36504=>13379,36708=>13380,36707=>13381,37308=>13382,37986=>13383,37973=>13384,37981=>13385,37975=>13386,37982=>13387,38852=>13388,38853=>13389,38912=>13390,39510=>13391,39513=>13392,39710=>13393,39711=>13394,39712=>13395,40018=>13396,40024=>13397,40016=>13398,40010=>13399,40013=>13400,40011=>13401,40021=>13402,40025=>13403,40012=>13404,40014=>13405,40443=>13406,40439=>13407,40431=>13408,40419=>13409,40427=>13410,40440=>13411,40420=>13412,40438=>13413,40417=>13414,40430=>13415,40422=>13416,40434=>13417,40432=>13418,60370=>13418,40418=>13419,40428=>13420,40436=>13421,40435=>13422,40424=>13423,40429=>13424,40642=>13425,40656=>13426,40690=>13427,40691=>13428,40710=>13429,40732=>13430,40760=>13431,40759=>13432,40758=>13433,40771=>13434,40783=>13435,40817=>13436,40816=>13437,40814=>13438,40815=>13439,22227=>13440,22221=>13441,23374=>13442,23661=>13443,25901=>13444,26349=>13445,26350=>13446,27411=>13447,28767=>13448,28769=>13449,28765=>13450,28768=>13451,29219=>13452,29915=>13453,29925=>13454,30677=>13455,31032=>13456,31159=>13457,31158=>13458,31850=>13459,32407=>13460,32649=>13461,33389=>13462,34371=>13463,34872=>13464,34871=>13465,34869=>13466,34891=>13467,35732=>13468,35733=>13469,36510=>13470,36511=>13471,36512=>13472,36509=>13473,37310=>13474,37309=>13475,37314=>13476,37995=>13477,37992=>13478,37993=>13479,38629=>13480,38726=>13481,38723=>13482,38727=>13483,38855=>13484,38885=>13485,39518=>13486,39637=>13487,39769=>13488,40035=>13489,40039=>13490,40038=>13491,40034=>13492,40030=>13493,40032=>13494,40450=>13495,40446=>13496,40455=>13497,40451=>13498,40454=>13499,40453=>13500,40448=>13501,40449=>13502,40457=>13503,40447=>13504,40445=>13505,40452=>13506,40608=>13507,40734=>13508,40774=>13509,40820=>13510,40821=>13511,40822=>13512,22228=>13513,25902=>13514,26040=>13515,27416=>13516,27417=>13517,27415=>13518,27418=>13519,28770=>13520,29222=>13521,29354=>13522,30680=>13523,30681=>13524,31033=>13525,31849=>13526,31851=>13527,31990=>13528,32410=>13529,32408=>13530,32411=>13531,32409=>13532,33248=>13533,33249=>13534,34374=>13535,34375=>13536,34376=>13537,35193=>13538,35194=>13539,35196=>13540,35195=>13541,35327=>13542,35736=>13543,35737=>13544,36517=>13545,36516=>13546,36515=>13547,37998=>13548,37997=>13549,37999=>13550,38001=>13551,38003=>13552,38729=>13553,39026=>13554,39263=>13555,40040=>13556,40046=>13557,40045=>13558,40459=>13559,40461=>13560,40464=>13561,40463=>13562,40466=>13563,40465=>13564,40609=>13565,40693=>13566,40713=>13567,40775=>13568,40824=>13569,40827=>13570,40826=>13571,40825=>13572,22302=>13573,28774=>13574,31855=>13575,34876=>13576,36274=>13577,36518=>13578,37315=>13579,38004=>13580,38008=>13581,38006=>13582,38005=>13583,39520=>13584,39726=>13585,60830=>13585,40052=>13586,40051=>13587,40049=>13588,40053=>13589,40468=>13590,40467=>13591,40694=>13592,40714=>13593,40868=>13594,28776=>13595,28773=>13596,31991=>13597,34410=>13598,34878=>13599,34877=>13600,34879=>13601,35742=>13602,35996=>13603,36521=>13604,36553=>13605,38731=>13606,39027=>13607,39028=>13608,39116=>13609,39265=>13610,39339=>13611,39524=>13612,39526=>13613,39527=>13614,39716=>13615,40469=>13616,40471=>13617,40776=>13618,25095=>13619,27422=>13620,29223=>13621,34380=>13622,36520=>13623,38018=>13624,38016=>13625,38017=>13626,39529=>13627,39528=>13628,40473=>13629,34379=>13630,35743=>13631,38019=>13632,40057=>13633,40631=>13634,30325=>13635,39531=>13636,40058=>13637,40477=>13638,28777=>13639,28778=>13640,29225=>13641,40612=>13642,40830=>13643,40777=>13644,40856=>13645,65049=>13646,65075=>13743,9588=>13744,65076=>13745,65103=>13746,168=>13747,776=>13747,63208=>13747,710=>13748,65342=>13748,63209=>13748,12541=>13749,63210=>13749,12542=>13750,63211=>13750,12445=>13751,63212=>13751,12446=>13752,63213=>13752,12293=>13754,63216=>13754,12294=>13755,63217=>13755,12295=>13756,63218=>13756,12540=>13757,63219=>13757,65339=>13758,63220=>13758,65341=>13759,63221=>13759,10045=>13760,63222=>13760,12353=>13761,63223=>13761,12354=>13762,63224=>13762,12355=>13763,63225=>13763,12356=>13764,63226=>13764,12357=>13765,63227=>13765,12358=>13766,63228=>13766,12359=>13767,63229=>13767,12360=>13768,63230=>13768,12361=>13769,63231=>13769,12362=>13770,63232=>13770,12363=>13771,63233=>13771,12364=>13772,63234=>13772,12365=>13773,63235=>13773,12366=>13774,63236=>13774,12367=>13775,63237=>13775,12368=>13776,63238=>13776,12369=>13777,63239=>13777,12370=>13778,63240=>13778,12371=>13779,63241=>13779,12372=>13780,63242=>13780,12373=>13781,63243=>13781,12374=>13782,63244=>13782,12375=>13783,63245=>13783,12376=>13784,63246=>13784,12377=>13785,63247=>13785,12378=>13786,63248=>13786,12379=>13787,63249=>13787,12380=>13788,63250=>13788,12381=>13789,63251=>13789,12382=>13790,63252=>13790,12383=>13791,63253=>13791,12384=>13792,63254=>13792,12385=>13793,63255=>13793,12386=>13794,63256=>13794,12387=>13795,63257=>13795,12388=>13796,63258=>13796,12389=>13797,63259=>13797,12390=>13798,63260=>13798,12391=>13799,63261=>13799,12392=>13800,63262=>13800,12393=>13801,63263=>13801,12394=>13802,63264=>13802,12395=>13803,63265=>13803,12396=>13804,63266=>13804,12397=>13805,63267=>13805,12398=>13806,63268=>13806,12399=>13807,63269=>13807,12400=>13808,63270=>13808,12401=>13809,63271=>13809,12402=>13810,63272=>13810,12403=>13811,63273=>13811,12404=>13812,63274=>13812,12405=>13813,63275=>13813,12406=>13814,63276=>13814,12407=>13815,63277=>13815,12408=>13816,63278=>13816,12409=>13817,63279=>13817,12410=>13818,63280=>13818,12411=>13819,63281=>13819,12412=>13820,63282=>13820,12413=>13821,63283=>13821,12414=>13822,63284=>13822,12415=>13823,63285=>13823,12416=>13824,63286=>13824,12417=>13825,63287=>13825,12418=>13826,63288=>13826,12419=>13827,63289=>13827,12420=>13828,63290=>13828,12421=>13829,63291=>13829,12422=>13830,63292=>13830,12423=>13831,63293=>13831,12424=>13832,63294=>13832,12425=>13833,63295=>13833,12426=>13834,63296=>13834,12427=>13835,63297=>13835,12428=>13836,63298=>13836,12429=>13837,63299=>13837,12430=>13838,63300=>13838,12431=>13839,63301=>13839,12432=>13840,63302=>13840,12433=>13841,63303=>13841,12434=>13842,63304=>13842,12435=>13843,63305=>13843,12449=>13844,63306=>13844,12450=>13845,63307=>13845,12451=>13846,63308=>13846,12452=>13847,63309=>13847,12453=>13848,63310=>13848,12454=>13849,63311=>13849,12455=>13850,63312=>13850,12456=>13851,63313=>13851,12457=>13852,63314=>13852,12458=>13853,63315=>13853,12459=>13854,63316=>13854,12460=>13855,63317=>13855,12461=>13856,63318=>13856,12462=>13857,63319=>13857,12463=>13858,63320=>13858,12464=>13859,63321=>13859,12465=>13860,63322=>13860,12466=>13861,63323=>13861,12467=>13862,63324=>13862,12468=>13863,63325=>13863,12469=>13864,63326=>13864,12470=>13865,63327=>13865,12471=>13866,63328=>13866,12472=>13867,63329=>13867,12473=>13868,63330=>13868,12474=>13869,63331=>13869,12475=>13870,63332=>13870,12476=>13871,63333=>13871,12477=>13872,63334=>13872,12478=>13873,63335=>13873,12479=>13874,63336=>13874,12480=>13875,63337=>13875,12481=>13876,63338=>13876,12482=>13877,63339=>13877,12483=>13878,63340=>13878,12484=>13879,63341=>13879,12485=>13880,63342=>13880,12486=>13881,63343=>13881,12487=>13882,63344=>13882,12488=>13883,63345=>13883,12489=>13884,63346=>13884,12490=>13885,63347=>13885,12491=>13886,63348=>13886,12492=>13887,63349=>13887,12493=>13888,63350=>13888,12494=>13889,63351=>13889,12495=>13890,63352=>13890,12496=>13891,63353=>13891,12497=>13892,63354=>13892,12498=>13893,63355=>13893,12499=>13894,63356=>13894,12500=>13895,63357=>13895,12501=>13896,63358=>13896,12502=>13897,63359=>13897,12503=>13898,63360=>13898,12504=>13899,63361=>13899,12505=>13900,63362=>13900,12506=>13901,63363=>13901,12507=>13902,63364=>13902,12508=>13903,63365=>13903,12509=>13904,63366=>13904,12510=>13905,63367=>13905,12511=>13906,63368=>13906,12512=>13907,63369=>13907,12513=>13908,63370=>13908,12514=>13909,63371=>13909,12515=>13910,63372=>13910,12516=>13911,63373=>13911,12517=>13912,63374=>13912,12518=>13913,63375=>13913,12519=>13914,63376=>13914,12520=>13915,63377=>13915,12521=>13916,63378=>13916,12522=>13917,63379=>13917,12523=>13918,63380=>13918,12524=>13919,63381=>13919,12525=>13920,63382=>13920,12526=>13921,63383=>13921,12527=>13922,63384=>13922,12528=>13923,63385=>13923,12529=>13924,63386=>13924,12530=>13925,63387=>13925,12531=>13926,63388=>13926,12532=>13927,63389=>13927,12533=>13928,63390=>13928,12534=>13929,63391=>13929,1040=>13930,63392=>13930,1041=>13931,63393=>13931,1042=>13932,63394=>13932,1043=>13933,63395=>13933,1044=>13934,63396=>13934,1045=>13935,63397=>13935,1025=>13936,63398=>13936,1046=>13937,63399=>13937,1047=>13938,63400=>13938,1048=>13939,63401=>13939,1049=>13940,63402=>13940,1050=>13941,63403=>13941,1051=>13942,63404=>13942,1052=>13943,63405=>13943,1053=>13944,63406=>13944,1054=>13945,63407=>13945,1055=>13946,63408=>13946,1056=>13947,63409=>13947,1057=>13948,63410=>13948,1058=>13949,63411=>13949,1059=>13950,63412=>13950,1060=>13951,63413=>13951,1061=>13952,63414=>13952,1062=>13953,63415=>13953,1063=>13954,63416=>13954,1064=>13955,63417=>13955,1065=>13956,63418=>13956,1066=>13957,63419=>13957,1067=>13958,63420=>13958,1068=>13959,63421=>13959,1069=>13960,63422=>13960,1070=>13961,63423=>13961,1071=>13962,63424=>13962,1072=>13963,63425=>13963,1073=>13964,63426=>13964,1074=>13965,63427=>13965,1075=>13966,63428=>13966,1076=>13967,63429=>13967,1077=>13968,63430=>13968,1105=>13969,63431=>13969,1078=>13970,63432=>13970,1079=>13971,63433=>13971,1080=>13972,63434=>13972,1081=>13973,63435=>13973,1082=>13974,63436=>13974,1083=>13975,63437=>13975,1084=>13976,63438=>13976,1085=>13977,63439=>13977,1086=>13978,63440=>13978,1087=>13979,63441=>13979,1088=>13980,63442=>13980,1089=>13981,63443=>13981,1090=>13982,63444=>13982,1091=>13983,63445=>13983,1092=>13984,63446=>13984,1093=>13985,63447=>13985,1094=>13986,63448=>13986,1095=>13987,63449=>13987,1096=>13988,63450=>13988,1097=>13989,63451=>13989,1098=>13990,63452=>13990,1099=>13991,63453=>13991,1100=>13992,63454=>13992,1101=>13993,63455=>13993,1102=>13994,63456=>13994,1103=>13995,63457=>13995,8679=>13996,63458=>13996,8632=>13997,63459=>13997,8633=>13998,63460=>13998,12751=>13999,20033=>13999,63461=>13999,131276=>14000,63462=>14000,20058=>14001,63463=>14001,131210=>14002,63464=>14002,20994=>14003,63465=>14003,17553=>14004,63466=>14004,40880=>14005,63467=>14005,20872=>14006,63468=>14006,13853=>14007,40881=>14007,63469=>14007,161287=>14008,63470=>14008,172=>14049,65506=>14049,63511=>14049,65508=>14050,63512=>14050,65287=>14051,63513=>14051,65282=>14052,63514=>14052,12849=>14053,63515=>14053,8470=>14054,63516=>14054,8481=>14055,63517=>14055,30849=>14056,37561=>14057,58501=>14057,35023=>14058,22715=>14059,24658=>14060,31911=>14061,23290=>14062,9556=>14063,9574=>14064,9559=>14065,9568=>14066,9580=>14067,9571=>14068,9562=>14069,9577=>14070,9565=>14071,9554=>14072,9572=>14073,9557=>14074,9560=>14078,9575=>14079,9563=>14080,9555=>14081,9573=>14082,9558=>14083,9567=>14084,9579=>14085,9570=>14086,9561=>14087,9576=>14088,9564=>14089,9553=>14090,9619=>14096,65517=>14096,65040=>14099,65041=>14100,65042=>14101,65044=>14103,65043=>14104,65046=>14105,65045=>14106,147159=>14123,58129=>14123,22462=>14124,58130=>14124,159443=>14125,58131=>14125,28990=>14126,58132=>14126,153568=>14127,58133=>14127,27042=>14128,58135=>14128,166889=>14129,58136=>14129,23412=>14130,58137=>14130,31305=>14131,58138=>14131,153825=>14132,58139=>14132,169177=>14133,58140=>14133,31333=>14134,58141=>14134,31357=>14135,58142=>14135,154028=>14136,58143=>14136,31419=>14137,58144=>14137,31408=>14138,58145=>14138,31426=>14139,58146=>14139,31427=>14140,58147=>14140,29137=>14141,58148=>14141,156813=>14142,58149=>14142,16842=>14143,58150=>14143,31450=>14144,58151=>14144,31453=>14145,58152=>14145,31466=>14146,58153=>14146,16879=>14147,58154=>14147,21682=>14148,58155=>14148,154625=>14149,58156=>14149,31499=>14150,58157=>14150,31573=>14151,58158=>14151,31529=>14152,58159=>14152,152334=>14153,58160=>14153,154878=>14154,58161=>14154,31650=>14155,58162=>14155,31599=>14156,58163=>14156,33692=>14157,58164=>14157,154548=>14158,58165=>14158,158847=>14159,58166=>14159,31696=>14160,58167=>14160,33825=>14161,58168=>14161,31634=>14162,58169=>14162,58171=>14164,154912=>14164,33938=>14166,58174=>14166,31738=>14167,58175=>14167,31797=>14169,58177=>14169,154817=>14170,58178=>14170,31812=>14171,58179=>14171,31875=>14172,58180=>14172,149634=>14173,58181=>14173,31910=>14174,58182=>14174,148856=>14175,58184=>14175,31945=>14176,58185=>14176,31943=>14177,58186=>14177,31974=>14178,58187=>14178,31987=>14180,58189=>14180,31989=>14181,58190=>14181,32359=>14182,58192=>14182,17693=>14183,58193=>14183,159300=>14184,58194=>14184,32093=>14185,58195=>14185,159446=>14186,58196=>14186,32137=>14187,58198=>14187,32171=>14188,58199=>14188,28981=>14189,58200=>14189,32179=>14190,58201=>14190,32214=>14191,147543=>14192,58203=>14192,155689=>14193,58204=>14193,32228=>14194,58205=>14194,15635=>14195,58206=>14195,32245=>14196,58207=>14196,137209=>14197,58208=>14197,32229=>14198,58209=>14198,164717=>14199,58210=>14199,155937=>14201,58212=>14201,155994=>14202,58213=>14202,32366=>14203,58214=>14203,17195=>14205,58216=>14205,37996=>14206,58217=>14206,32295=>14207,58218=>14207,32576=>14208,58219=>14208,32577=>14209,58220=>14209,32583=>14210,58221=>14210,31030=>14211,58222=>14211,156368=>14212,58223=>14212,39393=>14213,58224=>14213,32663=>14214,58225=>14214,156497=>14215,58226=>14215,32675=>14216,58227=>14216,136801=>14217,58228=>14217,131176=>14218,58229=>14218,17756=>14219,58230=>14219,145254=>14220,58231=>14220,164666=>14221,58233=>14221,32762=>14222,58234=>14222,156809=>14223,58235=>14223,64091=>14224,32776=>14225,58237=>14225,32797=>14226,58238=>14226,32815=>14228,58240=>14228,172167=>14229,58241=>14229,158915=>14230,58242=>14230,32827=>14231,58243=>14231,32828=>14232,58244=>14232,32865=>14233,58245=>14233,141076=>14234,58246=>14234,18825=>14235,58247=>14235,157222=>14236,58248=>14236,146915=>14237,58249=>14237,157416=>14238,58250=>14238,26405=>14239,58251=>14239,32935=>14240,58252=>14240,166472=>14241,58253=>14241,33031=>14242,58254=>14242,33050=>14243,58255=>14243,22704=>14244,58256=>14244,141046=>14245,58257=>14245,27775=>14246,58258=>14246,156824=>14247,58259=>14247,25831=>14248,58261=>14248,136330=>14249,58262=>14249,33304=>14250,58263=>14250,137310=>14251,58264=>14251,27219=>14252,58265=>14252,150117=>14253,58266=>14253,150165=>14254,58267=>14254,17530=>14255,58268=>14255,33321=>14256,58269=>14256,158290=>14257,58271=>14257,146814=>14258,58272=>14258,20473=>14259,58273=>14259,136445=>14260,58274=>14260,34018=>14261,58275=>14261,33634=>14262,58276=>14262,194959=>14263,149927=>14264,58278=>14264,144688=>14265,58279=>14265,137075=>14266,58280=>14266,146936=>14267,58281=>14267,33450=>14268,58282=>14268,26907=>14269,58283=>14269,194964=>14270,58284=>14270,16859=>14271,58285=>14271,34123=>14272,58286=>14272,33488=>14273,58287=>14273,33562=>14274,58288=>14274,134678=>14275,58289=>14275,137140=>14276,58290=>14276,14017=>14277,58291=>14277,143741=>14278,58292=>14278,144730=>14279,58293=>14279,33403=>14280,58294=>14280,33506=>14281,58295=>14281,33560=>14282,58296=>14282,147083=>14283,58297=>14283,159139=>14284,58298=>14284,158469=>14285,58299=>14285,158615=>14286,58300=>14286,144846=>14287,58301=>14287,15807=>14288,58302=>14288,33565=>14289,58303=>14289,21996=>14290,58304=>14290,33669=>14291,58305=>14291,17675=>14292,58306=>14292,159141=>14293,58307=>14293,33708=>14294,58308=>14294,33747=>14296,58310=>14296,159444=>14297,58312=>14297,27223=>14298,58313=>14298,34138=>14299,58314=>14299,13462=>14300,58315=>14300,159298=>14301,58316=>14301,33880=>14302,58318=>14302,154596=>14303,58319=>14303,33905=>14304,58320=>14304,15827=>14305,58321=>14305,17636=>14306,58322=>14306,27303=>14307,58323=>14307,33866=>14308,58324=>14308,31064=>14309,58326=>14309,158614=>14311,58328=>14311,159351=>14312,58329=>14312,159299=>14313,58330=>14313,34014=>14314,58331=>14314,33681=>14316,58333=>14316,17568=>14317,58334=>14317,33939=>14318,58335=>14318,34020=>14319,58336=>14319,154769=>14320,58337=>14320,16960=>14321,58338=>14321,154816=>14322,58339=>14322,17731=>14323,58340=>14323,34100=>14324,58341=>14324,23282=>14325,58342=>14325,17699=>14326,17703=>14327,58344=>14327,34163=>14328,58345=>14328,17686=>14329,58346=>14329,26559=>14330,58347=>14330,34326=>14331,58348=>14331,165413=>14332,58349=>14332,165435=>14333,58350=>14333,34241=>14334,58351=>14334,159880=>14335,58352=>14335,34306=>14336,58353=>14336,136578=>14337,58354=>14337,159949=>14338,58355=>14338,194994=>14339,58356=>14339,17770=>14340,58357=>14340,34344=>14341,58358=>14341,13896=>14342,58359=>14342,137378=>14343,58360=>14343,21495=>14344,58361=>14344,160666=>14345,58362=>14345,34430=>14346,58363=>14346,172280=>14348,58365=>14348,34798=>14349,58366=>14349,142375=>14350,58367=>14350,34737=>14351,58368=>14351,34778=>14352,58369=>14352,34831=>14353,60990=>14353,58370=>14353,22113=>14354,58371=>14354,34412=>14355,58372=>14355,26710=>14356,58373=>14356,17935=>14357,58374=>14357,34885=>14358,58375=>14358,34886=>14359,58376=>14359,161248=>14360,58377=>14360,146873=>14361,58378=>14361,161252=>14362,58379=>14362,34910=>14363,58380=>14363,34972=>14364,58381=>14364,18011=>14365,58382=>14365,34996=>14366,58383=>14366,34997=>14367,58384=>14367,35013=>14368,58386=>14368,161551=>14369,58388=>14369,35207=>14370,58389=>14370,35239=>14374,58393=>14374,35260=>14375,58394=>14375,166437=>14376,58395=>14376,35303=>14377,58396=>14377,162084=>14378,58397=>14378,162493=>14379,58398=>14379,35484=>14380,58399=>14380,30611=>14381,58400=>14381,37374=>14382,58401=>14382,35472=>14383,58402=>14383,162393=>14384,58403=>14384,31465=>14385,58404=>14385,162618=>14386,58405=>14386,18195=>14387,58407=>14387,162616=>14388,58408=>14388,29052=>14389,58409=>14389,35596=>14390,58410=>14390,35615=>14391,58411=>14391,152624=>14392,58412=>14392,152933=>14393,58413=>14393,35647=>14394,58414=>14394,35661=>14396,58416=>14396,35497=>14397,58417=>14397,150138=>14398,58418=>14398,35728=>14399,58419=>14399,35739=>14400,58420=>14400,35503=>14401,58421=>14401,136927=>14402,58422=>14402,17941=>14403,58423=>14403,34895=>14404,58424=>14404,35995=>14405,58425=>14405,163156=>14406,58426=>14406,163215=>14407,58427=>14407,195028=>14408,58428=>14408,14117=>14409,58429=>14409,163155=>14410,58430=>14410,36054=>14411,58431=>14411,163224=>14412,58432=>14412,163261=>14413,58433=>14413,36114=>14414,58434=>14414,36099=>14415,58435=>14415,137488=>14416,58436=>14416,36059=>14417,58437=>14417,28764=>14418,58438=>14418,36113=>14419,58439=>14419,16080=>14420,58441=>14420,195031=>14421,36265=>14422,58443=>14422,163842=>14423,58444=>14423,135188=>14424,58445=>14424,149898=>14425,58446=>14425,15228=>14426,58447=>14426,164284=>14427,58448=>14427,160012=>14428,58449=>14428,31463=>14429,58450=>14429,36525=>14430,58451=>14430,36534=>14431,58452=>14431,36547=>14432,58453=>14432,37588=>14433,58454=>14433,36633=>14434,58455=>14434,36653=>14435,58456=>14435,164709=>14436,58457=>14436,164882=>14437,58458=>14437,36773=>14438,58459=>14438,37635=>14439,58460=>14439,172703=>14440,58461=>14440,133712=>14441,58462=>14441,36787=>14442,58463=>14442,166366=>14444,58465=>14444,165181=>14445,58466=>14445,146875=>14446,58467=>14446,24312=>14447,58468=>14447,143970=>14448,58469=>14448,36857=>14449,58470=>14449,140069=>14451,58474=>14451,14720=>14452,58475=>14452,159447=>14453,58476=>14453,36919=>14454,58477=>14454,165180=>14455,58478=>14455,162494=>14456,58479=>14456,36961=>14457,58480=>14457,165228=>14458,58481=>14458,165387=>14459,58482=>14459,37032=>14460,58483=>14460,165651=>14461,58484=>14461,37060=>14462,58485=>14462,165606=>14463,58486=>14463,37038=>14464,58487=>14464,64038=>14465,37223=>14466,58489=>14466,37289=>14467,58491=>14467,37316=>14468,58492=>14468,31916=>14469,58493=>14469,166195=>14470,58494=>14470,138889=>14471,58495=>14471,37390=>14472,58496=>14472,27807=>14473,58497=>14473,37441=>14474,58498=>14474,37474=>14475,58499=>14475,153017=>14476,58500=>14476,166598=>14477,58502=>14477,146587=>14478,58503=>14478,166668=>14479,58504=>14479,153051=>14480,58505=>14480,134449=>14481,58506=>14481,37676=>14482,58507=>14482,37739=>14483,58508=>14483,166625=>14484,58509=>14484,166891=>14485,58510=>14485,23235=>14486,58512=>14486,166626=>14487,58513=>14487,166629=>14488,58514=>14488,18789=>14489,58515=>14489,37444=>14490,58516=>14490,166892=>14491,58517=>14491,166969=>14492,58518=>14492,166911=>14493,58519=>14493,37747=>14494,58520=>14494,37979=>14495,58521=>14495,36540=>14496,58522=>14496,38277=>14497,58523=>14497,38310=>14498,58524=>14498,37926=>14499,58525=>14499,38304=>14500,58526=>14500,28662=>14501,58527=>14501,17081=>14502,58528=>14502,165592=>14503,58530=>14503,135804=>14504,58531=>14504,146990=>14505,58532=>14505,18911=>14506,58533=>14506,27676=>14507,58534=>14507,38523=>14508,58535=>14508,38550=>14509,58536=>14509,16748=>14510,58537=>14510,38563=>14511,58538=>14511,159445=>14512,58539=>14512,25050=>14513,58540=>14513,58541=>14514,30965=>14515,58542=>14515,166624=>14516,58543=>14516,38589=>14517,58544=>14517,21452=>14518,58545=>14518,18849=>14519,58546=>14519,158904=>14520,58547=>14520,131700=>14521,58548=>14521,156688=>14522,58549=>14522,168111=>14523,58550=>14523,168165=>14524,58551=>14524,150225=>14525,58552=>14525,137493=>14526,58553=>14526,144138=>14527,58554=>14527,38705=>14528,58555=>14528,34370=>14529,58556=>14529,38710=>14530,58557=>14530,18959=>14531,58558=>14531,17725=>14532,58559=>14532,17797=>14533,58560=>14533,150249=>14534,58561=>14534,28789=>14535,58562=>14535,23361=>14536,58563=>14536,38683=>14537,58564=>14537,168405=>14539,58566=>14539,38743=>14540,58567=>14540,23370=>14541,58568=>14541,168427=>14542,58569=>14542,38751=>14543,58570=>14543,37925=>14544,58571=>14544,20688=>14545,58572=>14545,143543=>14546,58573=>14546,143548=>14547,58574=>14547,38793=>14548,58575=>14548,38815=>14549,58576=>14549,38833=>14550,58577=>14550,38846=>14551,58578=>14551,38848=>14552,58579=>14552,38866=>14553,58580=>14553,38880=>14554,58581=>14554,152684=>14555,58582=>14555,38894=>14556,58583=>14556,29724=>14557,58584=>14557,169011=>14558,58585=>14558,38901=>14560,58587=>14560,168989=>14561,58588=>14561,162170=>14562,58589=>14562,19153=>14563,58590=>14563,38964=>14564,58591=>14564,38963=>14565,58592=>14565,38987=>14566,58593=>14566,39014=>14567,58594=>14567,15118=>14568,58595=>14568,160117=>14569,58596=>14569,15697=>14570,58597=>14570,132656=>14571,58598=>14571,147804=>14572,58599=>14572,153350=>14573,58600=>14573,39114=>14574,58601=>14574,39095=>14575,58602=>14575,39112=>14576,58603=>14576,39111=>14577,58604=>14577,19199=>14578,58605=>14578,159015=>14579,58606=>14579,136915=>14580,58607=>14580,21936=>14581,58608=>14581,39137=>14582,58609=>14582,39142=>14583,58610=>14583,39148=>14584,58611=>14584,37752=>14585,58612=>14585,39225=>14586,58613=>14586,150057=>14587,58614=>14587,19314=>14588,58615=>14588,170071=>14589,58616=>14589,170245=>14590,58617=>14590,39413=>14591,58618=>14591,39436=>14592,58619=>14592,39483=>14593,58620=>14593,39440=>14594,58621=>14594,39512=>14595,58622=>14595,153381=>14596,58623=>14596,14020=>14597,58624=>14597,168113=>14598,58625=>14598,170965=>14599,58626=>14599,39648=>14600,58627=>14600,39650=>14601,58628=>14601,170757=>14602,58629=>14602,39668=>14603,58630=>14603,19470=>14604,58631=>14604,39700=>14605,58632=>14605,39725=>14606,58633=>14606,165376=>14607,58634=>14607,20532=>14608,58635=>14608,39732=>14609,58636=>14609,14531=>14610,58638=>14610,143485=>14611,58639=>14611,39760=>14612,58640=>14612,39744=>14613,58641=>14613,171326=>14614,58642=>14614,23109=>14615,58643=>14615,137315=>14616,58644=>14616,39822=>14617,58645=>14617,39938=>14618,58647=>14618,39935=>14619,58648=>14619,39948=>14620,58649=>14620,171624=>14621,58650=>14621,40404=>14622,58651=>14622,171959=>14623,58652=>14623,172434=>14624,58653=>14624,172459=>14625,58654=>14625,172257=>14626,58655=>14626,172323=>14627,58656=>14627,172511=>14628,58657=>14628,40318=>14629,58658=>14629,40323=>14630,58659=>14630,172340=>14631,58660=>14631,40462=>14632,58661=>14632,40388=>14633,58663=>14633,172435=>14634,58665=>14634,172576=>14635,58666=>14635,137531=>14636,58667=>14636,172595=>14637,58668=>14637,40249=>14638,58669=>14638,172217=>14639,58670=>14639,172724=>14640,58671=>14640,40592=>14641,58672=>14641,40597=>14642,58673=>14642,40606=>14643,58674=>14643,40610=>14644,58675=>14644,19764=>14645,58676=>14645,40618=>14646,58677=>14646,40623=>14647,58678=>14647,148324=>14648,58679=>14648,40641=>14649,58680=>14649,15200=>14650,58681=>14650,14821=>14651,58682=>14651,15645=>14652,58683=>14652,20274=>14653,58684=>14653,14270=>14654,58685=>14654,166955=>14655,58686=>14655,40706=>14656,58687=>14656,40712=>14657,58688=>14657,19350=>14658,58689=>14658,37924=>14659,58690=>14659,159138=>14660,58691=>14660,40727=>14661,60836=>14661,58692=>14661,195099=>14662,40761=>14663,58694=>14663,22175=>14664,58695=>14664,22154=>14665,58696=>14665,40773=>14666,58697=>14666,39352=>14667,58698=>14667,168075=>14668,58699=>14668,38898=>14669,58700=>14669,33919=>14670,58701=>14670,40809=>14672,58703=>14672,31452=>14673,58704=>14673,40846=>14674,58705=>14674,29206=>14675,58706=>14675,19390=>14676,58707=>14676,149877=>14677,58708=>14677,149947=>14678,58709=>14678,29047=>14679,58710=>14679,150008=>14680,58711=>14680,148296=>14681,58712=>14681,150097=>14682,58713=>14682,29598=>14683,58714=>14683,166874=>14684,58715=>14684,137466=>14685,58716=>14685,31135=>14686,58717=>14686,166270=>14687,58718=>14687,167478=>14688,58719=>14688,37737=>14689,58720=>14689,37875=>14690,58721=>14690,166468=>14691,58722=>14691,37612=>14692,58723=>14692,37761=>14693,58724=>14693,37835=>14694,58725=>14694,166252=>14695,58726=>14695,148665=>14696,58727=>14696,29207=>14697,58728=>14697,16107=>14698,58729=>14698,30578=>14699,58730=>14699,31299=>14700,58731=>14700,28880=>14701,58732=>14701,148595=>14702,58733=>14702,148472=>14703,58734=>14703,29054=>14704,58735=>14704,137199=>14705,58736=>14705,28835=>14706,58737=>14706,137406=>14707,58738=>14707,144793=>14708,58739=>14708,16071=>14709,58740=>14709,137349=>14710,58741=>14710,152623=>14711,58742=>14711,137208=>14712,58743=>14712,14114=>14713,58744=>14713,136955=>14714,58745=>14714,137273=>14715,58746=>14715,14049=>14716,58747=>14716,137076=>14717,58748=>14717,137425=>14718,58749=>14718,155467=>14719,58750=>14719,14115=>14720,58751=>14720,136896=>14721,58752=>14721,22363=>14722,58753=>14722,150053=>14723,58754=>14723,136190=>14724,58755=>14724,135848=>14725,58756=>14725,136134=>14726,58757=>14726,136374=>14727,58758=>14727,34051=>14728,58761=>14728,58759=>14728,145062=>14729,58760=>14729,33877=>14731,58762=>14731,149908=>14732,58763=>14732,160101=>14733,58764=>14733,146993=>14734,58765=>14734,152924=>14735,58766=>14735,147195=>14736,58767=>14736,159826=>14737,58768=>14737,17652=>14738,58769=>14738,145134=>14739,58770=>14739,170397=>14740,58771=>14740,159526=>14741,58772=>14741,26617=>14742,58773=>14742,14131=>14743,58774=>14743,15381=>14744,58775=>14744,15847=>14745,58776=>14745,22636=>14746,58777=>14746,137506=>14747,58778=>14747,26640=>14748,58779=>14748,16471=>14749,58780=>14749,145215=>14750,58781=>14750,147681=>14751,58782=>14751,147595=>14752,58783=>14752,147727=>14753,58784=>14753,158753=>14754,58785=>14754,21707=>14755,58786=>14755,22174=>14756,58787=>14756,157361=>14757,58788=>14757,22162=>14758,58789=>14758,135135=>14759,58790=>14759,134056=>14760,58791=>14760,134669=>14761,58792=>14761,166675=>14763,58794=>14763,37788=>14764,58795=>14764,20216=>14765,58796=>14765,20779=>14766,58797=>14766,14361=>14767,58798=>14767,148534=>14768,58799=>14768,20156=>14769,58800=>14769,132197=>14770,58801=>14770,20299=>14772,58803=>14772,20362=>14773,58804=>14773,153169=>14774,58805=>14774,23144=>14775,58806=>14775,131499=>14776,58807=>14776,132043=>14777,58808=>14777,14745=>14778,58809=>14778,131850=>14779,58810=>14779,132116=>14780,58811=>14780,13365=>14781,58812=>14781,20265=>14782,58813=>14782,131776=>14783,58814=>14783,167603=>14784,58815=>14784,131701=>14785,58816=>14785,35546=>14786,58817=>14786,131596=>14787,58818=>14787,20120=>14788,58819=>14788,20685=>14789,58820=>14789,20749=>14790,58821=>14790,20386=>14791,58822=>14791,20227=>14792,58823=>14792,150030=>14793,58824=>14793,147082=>14794,58825=>14794,20290=>14795,58826=>14795,20526=>14796,58827=>14796,20588=>14797,58828=>14797,20609=>14798,58829=>14798,20428=>14799,58830=>14799,20453=>14800,58831=>14800,20568=>14801,58832=>14801,20732=>14802,58833=>14802,28278=>14803,58838=>14803,144789=>14804,58839=>14804,147001=>14805,58840=>14805,147135=>14806,58841=>14806,28018=>14807,58842=>14807,137348=>14808,58843=>14808,147081=>14809,58844=>14809,20904=>14810,58845=>14810,20931=>14811,58846=>14811,132576=>14812,58847=>14812,17629=>14813,58848=>14813,132259=>14814,58849=>14814,132242=>14815,58850=>14815,132241=>14816,58851=>14816,36218=>14817,58852=>14817,166556=>14818,58853=>14818,132878=>14819,58854=>14819,21081=>14820,58855=>14820,21156=>14821,58856=>14821,133235=>14822,58857=>14822,21217=>14823,58858=>14823,18042=>14825,58860=>14825,29068=>14826,58861=>14826,148364=>14827,58862=>14827,134176=>14828,58863=>14828,149932=>14829,58864=>14829,135396=>14830,58865=>14830,27089=>14831,58866=>14831,134685=>14832,58867=>14832,16094=>14834,58869=>14834,29849=>14835,58870=>14835,29716=>14836,58871=>14836,29782=>14837,58872=>14837,29592=>14838,58873=>14838,19342=>14839,58874=>14839,150204=>14840,58875=>14840,147597=>14841,58876=>14841,21456=>14842,58877=>14842,13700=>14843,58878=>14843,29199=>14844,58879=>14844,147657=>14845,58880=>14845,21940=>14846,58881=>14846,131909=>14847,58882=>14847,21709=>14848,58883=>14848,134086=>14849,58884=>14849,22301=>14850,58885=>14850,37469=>14851,58886=>14851,38644=>14852,58887=>14852,22493=>14853,58889=>14853,22413=>14854,58890=>14854,22399=>14855,58891=>14855,13886=>14856,58892=>14856,22731=>14857,58893=>14857,23193=>14858,58894=>14858,166470=>14859,58895=>14859,136954=>14860,58896=>14860,137071=>14861,58897=>14861,136976=>14862,58898=>14862,23084=>14863,58899=>14863,22968=>14864,58900=>14864,23166=>14865,58902=>14865,23247=>14866,58903=>14866,23058=>14867,58904=>14867,153926=>14868,58905=>14868,137715=>14869,58906=>14869,137313=>14870,58907=>14870,148117=>14871,58908=>14871,14069=>14872,58909=>14872,27909=>14873,58910=>14873,29763=>14874,58911=>14874,23073=>14875,58912=>14875,155267=>14876,58913=>14876,23169=>14877,58914=>14877,166871=>14878,58915=>14878,132115=>14879,58916=>14879,37856=>14880,58917=>14880,29836=>14881,58918=>14881,135939=>14882,58919=>14882,28933=>14883,58920=>14883,18802=>14884,58921=>14884,37896=>14885,58922=>14885,166395=>14886,58923=>14886,37821=>14887,58924=>14887,14240=>14888,58925=>14888,23582=>14889,58926=>14889,23710=>14890,58927=>14890,24158=>14891,58928=>14891,24136=>14892,58929=>14892,137622=>14893,58930=>14893,137596=>14894,58931=>14894,146158=>14895,58932=>14895,24269=>14896,58933=>14896,23375=>14897,58934=>14897,58935=>14898,137475=>14898,58936=>14899,137476=>14899,14081=>14900,58937=>14900,137376=>14901,58938=>14901,14045=>14902,58939=>14902,136958=>14903,58940=>14903,14035=>14904,58941=>14904,33066=>14905,58942=>14905,166471=>14906,58943=>14906,138682=>14907,58944=>14907,144498=>14908,58945=>14908,166312=>14909,58946=>14909,24332=>14910,60916=>14910,58947=>14910,24334=>14911,58948=>14911,137511=>14912,58949=>14912,137131=>14913,58950=>14913,23147=>14914,58951=>14914,137019=>14915,58952=>14915,23364=>14916,58953=>14916,161277=>14917,58955=>14917,34912=>14918,58956=>14918,24702=>14919,58957=>14919,141408=>14920,58958=>14920,140843=>14921,58959=>14921,24539=>14922,58960=>14922,16056=>14923,58961=>14923,140719=>14924,58962=>14924,140734=>14925,58963=>14925,168072=>14926,58964=>14926,159603=>14927,58965=>14927,25024=>14928,58966=>14928,131134=>14929,58967=>14929,131142=>14930,58968=>14930,140827=>14931,58969=>14931,24985=>14932,58970=>14932,24984=>14933,58971=>14933,24693=>14934,58972=>14934,142491=>14935,58973=>14935,142599=>14936,58974=>14936,149204=>14937,58975=>14937,168269=>14938,58976=>14938,25713=>14939,58977=>14939,149093=>14940,58978=>14940,142186=>14941,58979=>14941,14889=>14942,58980=>14942,142114=>14943,58981=>14943,144464=>14944,58982=>14944,170218=>14945,58983=>14945,142968=>14946,58984=>14946,25399=>14947,58985=>14947,25782=>14948,58987=>14948,25393=>14949,58988=>14949,25553=>14950,58989=>14950,149987=>14951,58990=>14951,142695=>14952,58991=>14952,25252=>14953,58992=>14953,142497=>14954,58993=>14954,25659=>14955,58994=>14955,25963=>14956,58995=>14956,26994=>14957,58996=>14957,15348=>14958,58997=>14958,143502=>14959,58998=>14959,144045=>14960,58999=>14960,149897=>14961,59000=>14961,144043=>14962,59001=>14962,21773=>14963,59002=>14963,144096=>14964,59003=>14964,137433=>14965,59004=>14965,169023=>14966,59005=>14966,26318=>14967,59006=>14967,144009=>14968,59007=>14968,143795=>14969,59008=>14969,15072=>14970,59009=>14970,152964=>14971,59011=>14971,166690=>14972,59012=>14972,152975=>14973,59013=>14973,136956=>14974,59014=>14974,152923=>14975,59015=>14975,152613=>14976,59016=>14976,30958=>14977,59017=>14977,143619=>14978,59018=>14978,137258=>14979,59019=>14979,143924=>14980,59020=>14980,13412=>14981,59021=>14981,143887=>14982,59022=>14982,143746=>14983,59023=>14983,148169=>14984,59024=>14984,26254=>14985,59025=>14985,159012=>14986,59026=>14986,26219=>14987,59027=>14987,19347=>14988,59028=>14988,26160=>14989,59029=>14989,161904=>14990,59030=>14990,138731=>14991,59031=>14991,26211=>14992,59032=>14992,144082=>14993,59033=>14993,144097=>14994,59034=>14994,26142=>14995,59035=>14995,153714=>14996,59036=>14996,14545=>14997,59037=>14997,145466=>14998,59038=>14998,145340=>14999,59039=>14999,15257=>15000,59040=>15000,145314=>15001,59041=>15001,144382=>15002,59042=>15002,29904=>15003,59043=>15003,15254=>15004,59044=>15004,149034=>15005,59046=>15005,26806=>15006,59047=>15006,15300=>15008,59049=>15008,27326=>15009,59050=>15009,145365=>15010,59052=>15010,148615=>15011,59053=>15011,27187=>15012,59054=>15012,27218=>15013,59055=>15013,27337=>15014,59056=>15014,27397=>15015,59057=>15015,137490=>15016,59058=>15016,25873=>15017,59059=>15017,26776=>15018,59060=>15018,27212=>15019,59061=>15019,15319=>15020,59062=>15020,27258=>15021,59063=>15021,27479=>15022,59064=>15022,147392=>15023,59065=>15023,146586=>15024,59066=>15024,37792=>15025,59067=>15025,37618=>15026,59068=>15026,166890=>15027,59069=>15027,166603=>15028,59070=>15028,37513=>15029,59071=>15029,163870=>15030,59072=>15030,166364=>15031,59073=>15031,37991=>15032,59074=>15032,28069=>15033,59075=>15033,28427=>15034,59076=>15034,147327=>15036,59079=>15036,15759=>15037,59080=>15037,28164=>15038,59081=>15038,147516=>15039,59082=>15039,23101=>15040,59083=>15040,28170=>15041,59084=>15041,22599=>15042,59085=>15042,27940=>15043,59086=>15043,30786=>15044,59087=>15044,28987=>15045,59088=>15045,148250=>15046,59089=>15046,148086=>15047,59090=>15047,28913=>15048,59091=>15048,29264=>15049,61085=>15049,59092=>15049,29319=>15050,59093=>15050,29332=>15051,59094=>15051,149391=>15052,59095=>15052,149285=>15053,59096=>15053,20857=>15054,59097=>15054,150180=>15055,59098=>15055,132587=>15056,59099=>15056,29818=>15057,59100=>15057,147192=>15058,59101=>15058,144991=>15059,59102=>15059,150090=>15060,59103=>15060,149783=>15061,59104=>15061,155617=>15062,59105=>15062,16134=>15063,59106=>15063,16049=>15064,59107=>15064,150239=>15065,59108=>15065,166947=>15066,59109=>15066,147253=>15067,59110=>15067,24743=>15068,59111=>15068,16115=>15069,59112=>15069,29900=>15070,59113=>15070,29756=>15071,59114=>15071,37767=>15072,59115=>15072,29751=>15073,59116=>15073,17567=>15074,59117=>15074,159210=>15075,59118=>15075,17745=>15076,59119=>15076,30083=>15077,59120=>15077,16227=>15078,59121=>15078,150745=>15079,59122=>15079,150790=>15080,59123=>15080,16216=>15081,59124=>15081,30037=>15082,59125=>15082,30323=>15083,59126=>15083,173510=>15084,59127=>15084,29800=>15086,61070=>15086,59129=>15086,166604=>15087,59130=>15087,149931=>15088,59131=>15088,149902=>15089,59132=>15089,15099=>15090,59133=>15090,15821=>15091,59134=>15091,150094=>15092,59135=>15092,16127=>15093,59136=>15093,149957=>15094,59137=>15094,149747=>15095,59138=>15095,37370=>15096,59139=>15096,22322=>15097,59140=>15097,37698=>15098,59141=>15098,166627=>15099,59142=>15099,137316=>15100,59143=>15100,20703=>15101,59144=>15101,152097=>15102,59145=>15102,152039=>15103,59146=>15103,30584=>15104,59147=>15104,143922=>15105,59148=>15105,30478=>15106,59149=>15106,30479=>15107,59150=>15107,30587=>15108,59151=>15108,149143=>15109,59152=>15109,145281=>15110,59153=>15110,14942=>15111,59154=>15111,149744=>15112,59155=>15112,29752=>15113,59156=>15113,29851=>15114,59157=>15114,16063=>15115,59158=>15115,150202=>15116,59159=>15116,150215=>15117,59160=>15117,16584=>15118,59161=>15118,150166=>15119,59162=>15119,156078=>15120,59163=>15120,37639=>15121,59164=>15121,152961=>15122,59165=>15122,30750=>15123,59166=>15123,30861=>15124,59167=>15124,30856=>15125,59168=>15125,30930=>15126,59169=>15126,29648=>15127,59170=>15127,31065=>15128,59171=>15128,161601=>15129,59172=>15129,153315=>15130,59173=>15130,16654=>15131,59174=>15131,31141=>15134,59177=>15134,27181=>15135,59178=>15135,147194=>15136,59179=>15136,31290=>15137,59180=>15137,31220=>15138,59181=>15138,16750=>15139,59182=>15139,136934=>15140,59183=>15140,16690=>15141,59184=>15141,37429=>15142,59185=>15142,31217=>15143,59186=>15143,134476=>15144,59187=>15144,149900=>15145,59188=>15145,131737=>15146,59189=>15146,146874=>15147,59190=>15147,137070=>15148,59191=>15148,13719=>15149,59192=>15149,21867=>15150,59193=>15150,13680=>15151,59194=>15151,13994=>15152,59195=>15152,131540=>15153,59196=>15153,134157=>15154,59197=>15154,31458=>15155,59198=>15155,23129=>15156,59199=>15156,141045=>15157,59200=>15157,154287=>15158,59201=>15158,154268=>15159,59202=>15159,23053=>15160,59203=>15160,131675=>15161,59204=>15161,30960=>15162,59205=>15162,23082=>15163,59206=>15163,154566=>15164,59207=>15164,31486=>15165,59208=>15165,16889=>15166,59209=>15166,31837=>15167,59210=>15167,31853=>15168,59211=>15168,16913=>15169,59212=>15169,154547=>15170,59213=>15170,155324=>15171,59214=>15171,155302=>15172,59215=>15172,31949=>15173,59216=>15173,150009=>15174,59217=>15174,137136=>15175,59218=>15175,31886=>15176,59219=>15176,31868=>15177,59220=>15177,31918=>15178,59221=>15178,27314=>15179,59222=>15179,32220=>15180,59223=>15180,32263=>15181,59224=>15181,32211=>15182,59225=>15182,32590=>15183,59226=>15183,156257=>15184,59227=>15184,155996=>15185,59228=>15185,162632=>15186,59229=>15186,32151=>15187,59230=>15187,155266=>15188,59231=>15188,17002=>15189,59232=>15189,158581=>15190,59233=>15190,133398=>15191,59234=>15191,26582=>15192,59235=>15192,131150=>15193,59236=>15193,144847=>15194,59237=>15194,22468=>15195,59238=>15195,156690=>15196,59239=>15196,156664=>15197,59240=>15197,32733=>15198,59242=>15198,31527=>15199,59243=>15199,133164=>15200,59244=>15200,154345=>15201,59245=>15201,154947=>15202,59246=>15202,31500=>15203,59247=>15203,155150=>15204,59248=>15204,39398=>15205,59249=>15205,34373=>15206,59250=>15206,39523=>15207,59251=>15207,27164=>15208,59252=>15208,144447=>15209,59253=>15209,150007=>15210,59255=>15210,157101=>15211,59256=>15211,39455=>15212,59257=>15212,157088=>15213,59258=>15213,33941=>15214,160039=>15215,59260=>15215,158929=>15216,59261=>15216,17642=>15217,59262=>15217,33079=>15218,59263=>15218,17410=>15219,59264=>15219,32966=>15220,59265=>15220,33033=>15221,59266=>15221,33090=>15222,59267=>15222,157620=>15223,59268=>15223,39107=>15224,59269=>15224,158274=>15225,59270=>15225,33378=>15226,59271=>15226,33381=>15227,59272=>15227,158289=>15228,59273=>15228,33875=>15229,59274=>15229,159143=>15230,59275=>15230,34320=>15231,59276=>15231,160283=>15232,59277=>15232,23174=>15233,59278=>15233,16767=>15234,59279=>15234,137280=>15235,59280=>15235,23339=>15236,59281=>15236,137377=>15237,59282=>15237,23268=>15238,59283=>15238,137432=>15239,59284=>15239,34464=>15240,59285=>15240,195004=>15241,59286=>15241,146831=>15242,59287=>15242,34861=>15243,59288=>15243,160802=>15244,59289=>15244,23042=>15245,59290=>15245,34926=>15246,59291=>15246,20293=>15247,59292=>15247,34951=>15248,59293=>15248,35007=>15249,59294=>15249,35046=>15250,59295=>15250,35173=>15251,59296=>15251,35149=>15252,59297=>15252,153219=>15253,59298=>15253,35156=>15254,59299=>15254,161669=>15255,59300=>15255,161668=>15256,59301=>15256,166901=>15257,59302=>15257,166873=>15258,59303=>15258,166812=>15259,59304=>15259,166393=>15260,59305=>15260,16045=>15261,59306=>15261,33955=>15262,59307=>15262,18165=>15263,59308=>15263,18127=>15264,59309=>15264,14322=>15265,59310=>15265,35389=>15266,59311=>15266,35356=>15267,59312=>15267,169032=>15268,59313=>15268,24397=>15269,59314=>15269,37419=>15270,59315=>15270,148100=>15271,59316=>15271,26068=>15272,59317=>15272,28969=>15273,59318=>15273,28868=>15274,59319=>15274,137285=>15275,59320=>15275,40301=>15276,59321=>15276,35999=>15277,59322=>15277,36073=>15278,59323=>15278,163292=>15279,59324=>15279,22938=>15280,59325=>15280,30659=>15281,59326=>15281,23024=>15282,59327=>15282,14036=>15283,59329=>15283,36394=>15284,59330=>15284,36519=>15285,59331=>15285,150537=>15286,59332=>15286,36656=>15287,59333=>15287,36682=>15288,59334=>15288,17140=>15289,59335=>15289,27736=>15290,59336=>15290,28603=>15291,59337=>15291,140065=>15292,59338=>15292,18587=>15293,59339=>15293,28537=>15294,59340=>15294,28299=>15295,59341=>15295,137178=>15296,59342=>15296,39913=>15297,59343=>15297,14005=>15298,59344=>15298,149807=>15299,59345=>15299,37051=>15300,59346=>15300,18612=>15301,21873=>15302,59348=>15302,18694=>15303,59349=>15303,37307=>15304,59350=>15304,37892=>15305,59351=>15305,166475=>15306,59352=>15306,16482=>15307,59353=>15307,166652=>15308,59354=>15308,37927=>15309,59355=>15309,166941=>15310,59356=>15310,166971=>15311,59357=>15311,34021=>15312,59358=>15312,35371=>15313,59359=>15313,38297=>15314,59360=>15314,38311=>15315,59361=>15315,38295=>15316,59362=>15316,38294=>15317,59363=>15317,167220=>15318,59364=>15318,29765=>15319,59365=>15319,16066=>15320,59366=>15320,149759=>15321,59367=>15321,150082=>15322,59368=>15322,148458=>15323,59369=>15323,16103=>15324,59370=>15324,143909=>15325,59371=>15325,38543=>15326,59372=>15326,167655=>15327,59373=>15327,167526=>15328,59374=>15328,167525=>15329,59375=>15329,16076=>15330,59376=>15330,149997=>15331,59377=>15331,150136=>15332,59378=>15332,147438=>15333,59379=>15333,29714=>15334,59380=>15334,29803=>15335,59381=>15335,16124=>15336,59382=>15336,38721=>15337,59383=>15337,168112=>15338,59384=>15338,26695=>15339,59385=>15339,18973=>15340,59386=>15340,168083=>15341,59387=>15341,153567=>15342,59388=>15342,37736=>15344,59390=>15344,166281=>15345,59391=>15345,166950=>15346,59392=>15346,166703=>15347,59393=>15347,156606=>15348,59394=>15348,37562=>15349,59395=>15349,23313=>15350,59396=>15350,35689=>15351,59397=>15351,18748=>15352,59398=>15352,29689=>15353,59399=>15353,147995=>15354,59400=>15354,38811=>15355,59401=>15355,39224=>15357,59403=>15357,134950=>15358,59404=>15358,24001=>15359,59405=>15359,166853=>15360,59406=>15360,150194=>15361,59407=>15361,38943=>15362,59408=>15362,169178=>15363,59409=>15363,37622=>15364,59410=>15364,169431=>15365,59411=>15365,37349=>15366,59412=>15366,17600=>15367,59413=>15367,166736=>15368,59414=>15368,150119=>15369,59415=>15369,166756=>15370,59416=>15370,39132=>15371,59417=>15371,166469=>15372,59418=>15372,16128=>15373,59419=>15373,37418=>15374,59420=>15374,18725=>15375,59421=>15375,33812=>15376,59422=>15376,39227=>15377,59423=>15377,39245=>15378,59424=>15378,162566=>15379,59425=>15379,15869=>15380,59426=>15380,19311=>15382,59428=>15382,39338=>15383,59429=>15383,39516=>15384,59430=>15384,166757=>15385,59431=>15385,153800=>15386,59432=>15386,27279=>15387,59433=>15387,39457=>15388,59434=>15388,23294=>15389,59435=>15389,39471=>15390,59436=>15390,170225=>15391,59437=>15391,19344=>15392,59438=>15392,170312=>15393,59439=>15393,39356=>15394,59440=>15394,19389=>15395,59441=>15395,19351=>15396,59442=>15396,37757=>15397,59443=>15397,22642=>15398,59444=>15398,135938=>15399,59445=>15399,22562=>15400,59446=>15400,149944=>15401,59447=>15401,136424=>15402,59448=>15402,30788=>15403,59449=>15403,141087=>15404,59450=>15404,146872=>15405,59451=>15405,26821=>15406,59452=>15406,15741=>15407,59453=>15407,37976=>15408,59454=>15408,14631=>15409,59455=>15409,24912=>15410,59456=>15410,141185=>15411,59457=>15411,141675=>15412,59458=>15412,24839=>15413,59459=>15413,40015=>15414,59460=>15414,40019=>15415,59461=>15415,40059=>15416,59462=>15416,39989=>15417,59463=>15417,39952=>15418,59464=>15418,39807=>15419,59465=>15419,39887=>15420,59466=>15420,171565=>15421,59467=>15421,39839=>15422,59468=>15422,172533=>15423,59469=>15423,172286=>15424,59470=>15424,40225=>15425,59471=>15425,19630=>15426,59472=>15426,147716=>15427,59473=>15427,40472=>15428,59474=>15428,19632=>15429,59475=>15429,40204=>15430,59476=>15430,172468=>15431,59477=>15431,172269=>15432,59478=>15432,172275=>15433,59479=>15433,170287=>15434,59480=>15434,40357=>15435,59481=>15435,33981=>15436,59482=>15436,159250=>15437,59483=>15437,159711=>15438,59484=>15438,158594=>15439,59485=>15439,34300=>15440,59486=>15440,17715=>15441,59487=>15441,159140=>15442,59488=>15442,159364=>15443,59489=>15443,159216=>15444,59490=>15444,33824=>15445,59491=>15445,34286=>15446,59492=>15446,159232=>15447,59493=>15447,145367=>15448,59494=>15448,155748=>15449,59495=>15449,31202=>15450,59496=>15450,144796=>15451,59497=>15451,144960=>15452,59498=>15452,149982=>15453,59500=>15453,15714=>15454,59501=>15454,37851=>15455,59502=>15455,37566=>15456,59503=>15456,37704=>15457,59504=>15457,131775=>15458,59505=>15458,30905=>15459,59506=>15459,37495=>15460,59507=>15460,37965=>15461,59508=>15461,20452=>15462,59509=>15462,13376=>15463,59510=>15463,36964=>15464,59511=>15464,152925=>15465,59512=>15465,30781=>15466,59513=>15466,30804=>15467,59514=>15467,30902=>15468,59515=>15468,30795=>15469,59516=>15469,137047=>15470,59517=>15470,143817=>15471,59518=>15471,149825=>15472,59519=>15472,13978=>15473,59520=>15473,20338=>15474,59521=>15474,28634=>15475,59522=>15475,28633=>15476,59523=>15476,28702=>15478,59524=>15478,59525=>15478,21524=>15479,59526=>15479,147893=>15480,59527=>15480,22459=>15481,59528=>15481,22771=>15482,59529=>15482,22410=>15483,59530=>15483,40214=>15484,59531=>15484,22487=>15485,59532=>15485,28980=>15486,59533=>15486,13487=>15487,59534=>15487,147884=>15488,59535=>15488,29163=>15489,59536=>15489,158784=>15490,59537=>15490,151447=>15491,59538=>15491,137141=>15493,59540=>15493,166473=>15494,59541=>15494,24844=>15495,59542=>15495,23246=>15496,59543=>15496,23051=>15497,59544=>15497,17084=>15498,59545=>15498,148616=>15499,59546=>15499,14124=>15500,59547=>15500,19323=>15501,59548=>15501,166396=>15502,59549=>15502,37819=>15503,59550=>15503,37816=>15504,59551=>15504,137430=>15505,59552=>15505,134941=>15506,59553=>15506,33906=>15507,59554=>15507,158912=>15508,59555=>15508,136211=>15509,59556=>15509,148218=>15510,59557=>15510,142374=>15511,59558=>15511,148417=>15512,59559=>15512,22932=>15513,59560=>15513,146871=>15514,59561=>15514,157505=>15515,59562=>15515,32168=>15516,59563=>15516,155995=>15517,59564=>15517,155812=>15518,59565=>15518,149945=>15519,59566=>15519,149899=>15520,59567=>15520,166394=>15521,59568=>15521,37605=>15522,59569=>15522,29666=>15523,59570=>15523,16105=>15524,59571=>15524,29876=>15525,59572=>15525,166755=>15526,59573=>15526,137375=>15527,59574=>15527,16097=>15528,59575=>15528,150195=>15529,59576=>15529,27352=>15530,59577=>15530,29683=>15531,59578=>15531,29691=>15532,59579=>15532,16086=>15533,59580=>15533,150078=>15534,59581=>15534,150164=>15535,59582=>15535,137177=>15536,59583=>15536,150118=>15537,59584=>15537,132007=>15538,59585=>15538,136228=>15539,59586=>15539,149989=>15540,59587=>15540,29768=>15541,59588=>15541,149782=>15542,59589=>15542,28837=>15543,59590=>15543,149878=>15544,59591=>15544,37508=>15545,59592=>15545,29670=>15546,59593=>15546,37727=>15547,59594=>15547,132350=>15548,59595=>15548,37681=>15549,59596=>15549,166606=>15550,59597=>15550,166422=>15551,59598=>15551,37766=>15552,59599=>15552,166887=>15553,59600=>15553,153045=>15554,59601=>15554,18741=>15555,59602=>15555,166530=>15556,59603=>15556,29035=>15557,59604=>15557,149827=>15558,59605=>15558,134399=>15559,59606=>15559,22180=>15560,59607=>15560,132634=>15561,59608=>15561,134123=>15562,59609=>15562,134328=>15563,59610=>15563,21762=>15564,59611=>15564,31172=>15565,59612=>15565,137210=>15566,59613=>15566,32254=>15567,59614=>15567,136898=>15568,59615=>15568,150096=>15569,59616=>15569,137298=>15570,59617=>15570,17710=>15571,59618=>15571,37889=>15572,59619=>15572,14090=>15573,59620=>15573,166592=>15574,59621=>15574,149933=>15575,59622=>15575,22960=>15576,59623=>15576,137407=>15577,59624=>15577,137347=>15578,59625=>15578,160900=>15579,59626=>15579,23201=>15580,59627=>15580,14050=>15581,59628=>15581,146779=>15582,59629=>15582,14000=>15583,59630=>15583,37471=>15584,59631=>15584,23161=>15585,59632=>15585,166529=>15586,59633=>15586,137314=>15587,59634=>15587,37748=>15588,59635=>15588,15565=>15589,59636=>15589,133812=>15590,59637=>15590,19094=>15591,59638=>15591,14730=>15592,59639=>15592,20724=>15593,59640=>15593,15721=>15594,59641=>15594,15692=>15595,59642=>15595,136092=>15596,59643=>15596,29045=>15597,59644=>15597,17147=>15598,59645=>15598,164376=>15599,59646=>15599,28175=>15600,59647=>15600,168164=>15601,59648=>15601,17643=>15602,59649=>15602,27991=>15603,59650=>15603,163407=>15604,59651=>15604,28775=>15605,59652=>15605,27823=>15606,59653=>15606,15574=>15607,59654=>15607,147437=>15608,59655=>15608,146989=>15609,59656=>15609,28162=>15610,59657=>15610,28428=>15611,59658=>15611,15727=>15612,59659=>15612,132085=>15613,59660=>15613,30033=>15614,59661=>15614,14012=>15615,59662=>15615,13512=>15616,59663=>15616,18048=>15617,59664=>15617,16090=>15618,59665=>15618,18545=>15619,59666=>15619,22980=>15620,59667=>15620,37486=>15621,59668=>15621,18750=>15622,59669=>15622,36673=>15623,59670=>15623,166940=>15624,59671=>15624,158656=>15625,59672=>15625,22546=>15626,59673=>15626,22472=>15627,59674=>15627,14038=>15628,59675=>15628,136274=>15629,59676=>15629,28926=>15630,59677=>15630,148322=>15631,59678=>15631,150129=>15632,59679=>15632,143331=>15633,59680=>15633,135856=>15634,59681=>15634,140221=>15635,59682=>15635,26809=>15636,59683=>15636,26983=>15637,59684=>15637,136088=>15638,59685=>15638,144613=>15639,59686=>15639,162804=>15640,59687=>15640,145119=>15641,59688=>15641,166531=>15642,59689=>15642,145366=>15643,59690=>15643,144378=>15644,59691=>15644,150687=>15645,59692=>15645,27162=>15646,59693=>15646,145069=>15647,59694=>15647,158903=>15648,59695=>15648,33854=>15649,59696=>15649,17631=>15650,59697=>15650,17614=>15651,59698=>15651,159014=>15652,59699=>15652,159057=>15653,59700=>15653,158850=>15654,59701=>15654,159710=>15655,59702=>15655,33597=>15658,59705=>15658,137018=>15659,59706=>15659,33773=>15660,59707=>15660,158848=>15661,59708=>15661,159827=>15662,59709=>15662,137179=>15663,59710=>15663,22921=>15664,59711=>15664,23170=>15665,59712=>15665,137139=>15666,59713=>15666,23137=>15667,59714=>15667,23153=>15668,59715=>15668,137477=>15669,59716=>15669,147964=>15670,59717=>15670,14125=>15671,59718=>15671,23023=>15672,59719=>15672,137020=>15673,59720=>15673,14023=>15674,59721=>15674,29070=>15675,59722=>15675,37776=>15676,59723=>15676,26266=>15677,59724=>15677,148133=>15678,59725=>15678,23150=>15679,59726=>15679,23083=>15680,59727=>15680,148115=>15681,59728=>15681,27179=>15682,59729=>15682,147193=>15683,59730=>15683,161590=>15684,59731=>15684,148571=>15685,59732=>15685,148170=>15686,59733=>15686,28957=>15687,59734=>15687,148057=>15688,59735=>15688,166369=>15689,59736=>15689,20400=>15690,59737=>15690,159016=>15691,59738=>15691,23746=>15692,59739=>15692,148686=>15693,59740=>15693,163405=>15694,59741=>15694,148413=>15695,59742=>15695,27148=>15696,59743=>15696,148054=>15697,59744=>15697,135940=>15698,59745=>15698,28979=>15700,59747=>15700,148457=>15701,59748=>15701,15781=>15702,59749=>15702,27871=>15703,59750=>15703,194597=>15704,59751=>15704,23019=>15705,59754=>15705,24412=>15706,59757=>15706,59764=>15707,144128=>15707,31955=>15708,59776=>15708,59783=>15709,162548=>15709,59786=>15710,153334=>15710,162584=>15711,59790=>15711,36972=>15712,59791=>15712,33270=>15713,59795=>15713,30476=>15714,59797=>15714,27810=>15715,59799=>15715,22269=>15716,59800=>15716,22633=>15717,59828=>15717,26465=>15718,59832=>15718,23646=>15719,59838=>15719,22770=>15720,59841=>15720,28857=>15721,59843=>15721,26627=>15722,59853=>15722,59859=>15723,36795=>15723,59861=>15724,36796=>15724,20001=>15725,59871=>15725,31545=>15726,59898=>15726,15820=>15727,59902=>15727,29482=>15728,57990=>15728,59909=>15728,30048=>15729,59912=>15729,22586=>15730,59920=>15730,33446=>15731,59932=>15731,27018=>15732,59940=>15732,24803=>15733,59944=>15733,20206=>15734,59984=>15734,39364=>15735,60002=>15735,40639=>15736,60023=>15736,21249=>15737,60025=>15737,26528=>15738,60038=>15738,24808=>15739,60046=>15739,20916=>15740,60053=>15740,31363=>15741,60064=>15741,39994=>15742,60075=>15742,31432=>15743,60093=>15743,26906=>15744,60098=>15744,22956=>15745,60100=>15745,22592=>15746,60102=>15746,21610=>15747,60114=>15747,24807=>15748,60123=>15748,22138=>15749,60125=>15749,26965=>15750,60132=>15750,39983=>15751,60133=>15751,34725=>15752,60134=>15752,23584=>15753,60141=>15753,24075=>15754,60143=>15754,26398=>15755,60147=>15755,33965=>15756,60157=>15756,35713=>15757,60161=>15757,20088=>15758,60166=>15758,25283=>15759,60176=>15759,26709=>15760,60180=>15760,33533=>15762,60190=>15762,35237=>15763,60194=>15763,36768=>15764,60196=>15764,38840=>15765,60198=>15765,38983=>15766,60200=>15766,39613=>15767,60201=>15767,24497=>15768,60218=>15768,26184=>15769,60219=>15769,26303=>15770,60220=>15770,162425=>15771,60221=>15771,60225=>15773,149946=>15773,60230=>15776,131910=>15776,26382=>15777,60232=>15777,26904=>15778,60233=>15778,161367=>15779,60235=>15779,155618=>15780,60236=>15780,161278=>15781,60239=>15781,139418=>15782,60240=>15782,18640=>15783,60241=>15783,19128=>15784,60242=>15784,60244=>15785,166554=>15785,60247=>15786,147515=>15786,150085=>15787,60250=>15787,132554=>15788,60251=>15788,20946=>15789,60252=>15789,132625=>15790,60253=>15790,22943=>15791,60254=>15791,138920=>15792,60255=>15792,15294=>15793,60256=>15793,146687=>15794,60257=>15794,14747=>15795,60262=>15795,165352=>15796,60264=>15796,170441=>15797,60265=>15797,14178=>15798,60266=>15798,139715=>15799,60267=>15799,35678=>15800,60268=>15800,166734=>15801,60269=>15801,29193=>15803,60274=>15803,60276=>15804,134264=>15804,132985=>15805,60280=>15805,36570=>15806,60281=>15806,21135=>15807,60283=>15807,29041=>15808,60285=>15808,147274=>15809,60288=>15809,150183=>15810,60289=>15810,21948=>15811,60290=>15811,60293=>15812,158546=>15812,13427=>15813,60295=>15813,60297=>15814,161330=>15814,18200=>15815,60299=>15815,60303=>15816,149823=>15816,20582=>15817,60305=>15817,13563=>15818,60306=>15818,144332=>15819,60307=>15819,18300=>15821,60310=>15821,166216=>15822,60311=>15822,60315=>15823,138640=>15823,162834=>15825,60320=>15825,36950=>15826,60321=>15826,151450=>15827,60323=>15827,35682=>15828,60324=>15828,23899=>15829,60327=>15829,158711=>15830,60328=>15830,137500=>15832,60331=>15832,35562=>15833,60332=>15833,150006=>15834,60333=>15834,60335=>15835,147439=>15835,19392=>15836,60337=>15836,141083=>15837,60340=>15837,37989=>15838,60341=>15838,153569=>15839,60342=>15839,24981=>15840,60343=>15840,23079=>15841,60344=>15841,194765=>15842,60345=>15842,194566=>15843,60348=>15844,148769=>15844,20074=>15845,60350=>15845,149812=>15846,60351=>15846,38486=>15847,60352=>15847,28047=>15848,60353=>15848,158909=>15849,60354=>15849,35191=>15850,60356=>15850,60359=>15851,156689=>15851,31554=>15853,60363=>15853,168128=>15854,60364=>15854,133649=>15855,60365=>15855,31301=>15857,60369=>15857,39462=>15858,60372=>15858,13919=>15859,60374=>15859,156777=>15860,60375=>15860,131105=>15861,60376=>15861,31107=>15862,60377=>15862,23852=>15863,60380=>15863,144665=>15864,60381=>15864,18128=>15866,60384=>15866,30011=>15867,60386=>15867,34917=>15868,60387=>15868,22710=>15869,60389=>15869,14108=>15870,60390=>15870,140685=>15871,60391=>15871,15444=>15872,60394=>15872,37505=>15873,60397=>15873,139642=>15874,60398=>15874,37680=>15875,60400=>15875,149968=>15876,60402=>15876,27705=>15877,60403=>15877,134904=>15878,60406=>15878,34855=>15879,60407=>15879,35061=>15880,60408=>15880,141606=>15881,60409=>15881,164979=>15882,60410=>15882,137137=>15883,60411=>15883,28344=>15884,60412=>15884,150058=>15885,60413=>15885,137248=>15886,60414=>15886,14756=>15887,60415=>15887,17727=>15890,60419=>15890,26294=>15891,60420=>15891,171181=>15892,60421=>15892,170148=>15893,60422=>15893,35139=>15894,60423=>15894,16607=>15895,60427=>15895,136714=>15896,60428=>15896,14753=>15897,60429=>15897,145199=>15898,60430=>15898,164072=>15899,60431=>15899,136133=>15900,60432=>15900,29101=>15901,60433=>15901,33638=>15902,60434=>15902,60436=>15903,168360=>15903,19639=>15905,60438=>15905,159919=>15906,60439=>15906,166315=>15907,60440=>15907,147834=>15908,60445=>15908,31555=>15909,60446=>15909,31102=>15910,60447=>15910,28597=>15911,60449=>15911,172767=>15912,60450=>15912,27139=>15913,60451=>15913,164632=>15914,60452=>15914,21410=>15915,60453=>15915,159239=>15916,60454=>15916,37823=>15917,60455=>15917,26678=>15918,60456=>15918,38749=>15919,59389=>15919,60457=>15919,164207=>15920,60458=>15920,158133=>15921,60460=>15921,136173=>15922,60461=>15922,143919=>15923,60462=>15923,23941=>15924,60464=>15924,166960=>15925,60465=>15925,22293=>15926,60467=>15926,38947=>15927,60468=>15927,166217=>15928,60469=>15928,23979=>15929,60470=>15929,149896=>15930,60471=>15930,26046=>15931,60472=>15931,27093=>15932,60473=>15932,21458=>15933,60474=>15933,150181=>15934,60475=>15934,147329=>15935,60476=>15935,15377=>15936,60477=>15936,26422=>15937,60478=>15937,60482=>15938,139169=>15938,13770=>15939,60490=>15939,18682=>15940,60493=>15940,30728=>15942,60496=>15942,37461=>15943,60497=>15943,17394=>15944,60499=>15944,17375=>15945,60501=>15945,23032=>15946,60505=>15946,22155=>15948,60518=>15948,60520=>15949,169449=>15949,36882=>15950,60541=>15950,21953=>15951,60546=>15951,17673=>15952,60551=>15952,32383=>15953,60552=>15953,28502=>15954,60553=>15954,27313=>15955,60554=>15955,13540=>15956,60556=>15956,161949=>15957,60558=>15957,14138=>15958,60559=>15958,60562=>15960,163876=>15960,60565=>15961,162366=>15961,15851=>15962,60567=>15962,60569=>15963,146615=>15963,156248=>15964,60574=>15964,22207=>15965,60575=>15965,36366=>15966,60577=>15966,23405=>15967,60578=>15967,25566=>15968,60581=>15968,25904=>15970,60585=>15970,22061=>15971,60586=>15971,21530=>15972,60588=>15972,171416=>15973,60591=>15973,19581=>15974,60592=>15974,22050=>15975,60593=>15975,22046=>15976,60594=>15976,32585=>15977,60595=>15977,22901=>15978,60597=>15978,146752=>15979,60598=>15979,34672=>15980,60599=>15980,33047=>15981,60604=>15981,40286=>15982,60605=>15982,36120=>15983,60606=>15983,30267=>15984,60607=>15984,40005=>15985,60608=>15985,30286=>15986,60609=>15986,30649=>15987,60610=>15987,37701=>15988,60611=>15988,21554=>15989,60612=>15989,33096=>15990,60613=>15990,33527=>15991,60614=>15991,22053=>15992,60615=>15992,33074=>15993,60616=>15993,33816=>15994,60617=>15994,32957=>15995,60618=>15995,21994=>15996,60619=>15996,31074=>15997,60620=>15997,22083=>15998,60621=>15998,21526=>15999,60622=>15999,134813=>16000,60623=>16000,13774=>16001,60624=>16001,22021=>16002,57509=>16002,60625=>16002,22001=>16003,60626=>16003,26353=>16004,60627=>16004,164578=>16005,60628=>16005,13869=>16006,60629=>16006,30004=>16007,60630=>16007,22000=>16008,60631=>16008,21946=>16009,60632=>16009,21655=>16010,60633=>16010,21874=>16011,60634=>16011,134209=>16012,60635=>16012,134294=>16013,60636=>16013,24272=>16014,57652=>16014,60637=>16014,134774=>16015,60639=>16015,142434=>16016,60640=>16016,134818=>16017,60641=>16017,40619=>16018,60642=>16018,32090=>16019,60643=>16019,135285=>16021,60645=>16021,25245=>16022,60646=>16022,38765=>16023,60647=>16023,21652=>16024,60648=>16024,36045=>16025,60649=>16025,29174=>16026,60650=>16026,37238=>16027,60651=>16027,25596=>16028,60652=>16028,25529=>16029,60653=>16029,25598=>16030,60654=>16030,21865=>16031,60655=>16031,142147=>16032,60656=>16032,40050=>16033,60657=>16033,143027=>16034,60658=>16034,20890=>16035,60659=>16035,13535=>16036,60660=>16036,134567=>16037,60661=>16037,20903=>16038,60662=>16038,21581=>16039,60663=>16039,21790=>16040,60664=>16040,21779=>16041,60665=>16041,30310=>16042,60666=>16042,36397=>16043,60667=>16043,157834=>16044,60668=>16044,30129=>16045,60669=>16045,32950=>16046,60670=>16046,34820=>16047,60671=>16047,35015=>16049,60673=>16049,33206=>16050,60674=>16050,33820=>16051,60675=>16051,17644=>16052,60677=>16052,29444=>16053,60678=>16053,33547=>16054,60681=>16054,22139=>16055,60683=>16055,37232=>16056,60690=>16056,37384=>16057,60692=>16057,134905=>16058,60696=>16058,29286=>16059,60697=>16059,18254=>16060,60699=>16060,60701=>16061,163833=>16061,16634=>16062,60703=>16062,40029=>16063,60704=>16063,25887=>16064,60705=>16064,18675=>16065,60707=>16065,149472=>16066,60708=>16066,171388=>16067,60709=>16067,60713=>16069,161187=>16069,60715=>16070,155720=>16071,60716=>16071,29091=>16072,60718=>16072,32398=>16073,60719=>16073,40272=>16074,60720=>16074,13687=>16075,60723=>16075,27826=>16076,60725=>16076,21351=>16077,60726=>16077,14812=>16078,60728=>16078,60731=>16079,149016=>16079,33325=>16080,60734=>16080,21579=>16081,60735=>16081,60739=>16082,14930=>16083,60740=>16083,29556=>16084,60742=>16084,171692=>16085,60743=>16085,19721=>16086,60744=>16086,39917=>16087,60745=>16087,19547=>16089,60748=>16089,171998=>16090,60751=>16090,33884=>16091,60752=>16091,60754=>16092,160434=>16092,25390=>16093,60757=>16093,32037=>16094,60758=>16094,14890=>16095,60761=>16095,36872=>16096,60762=>16096,21196=>16097,60763=>16097,15988=>16098,60764=>16098,13946=>16099,60765=>16099,17897=>16100,60766=>16100,132238=>16101,60767=>16101,30272=>16102,60768=>16102,23280=>16103,60769=>16103,134838=>16104,60770=>16104,30842=>16105,60771=>16105,18358=>16106,163630=>16106,60772=>16106,22695=>16107,60773=>16107,16575=>16108,60774=>16108,22140=>16109,60775=>16109,39819=>16110,60776=>16110,23924=>16111,60777=>16111,30292=>16112,60778=>16112,173108=>16113,60779=>16113,40581=>16114,60780=>16114,19681=>16115,60781=>16115,14331=>16117,60783=>16117,24857=>16118,60784=>16118,148466=>16119,60786=>16119,60787=>16120,22109=>16121,60788=>16121,171526=>16122,60792=>16122,21044=>16123,60793=>16123,13741=>16124,60795=>16124,40316=>16126,60797=>16126,31830=>16127,60798=>16127,39737=>16128,60799=>16128,22494=>16129,60800=>16129,23635=>16130,60802=>16130,25811=>16131,60803=>16131,169168=>16132,60804=>16132,156469=>16133,60805=>16133,34477=>16134,60807=>16134,134440=>16135,60808=>16135,134513=>16136,60811=>16136,60812=>16137,20990=>16138,60813=>16138,139023=>16139,60814=>16139,23950=>16140,60815=>16140,38659=>16141,60816=>16141,138705=>16142,60817=>16142,40577=>16143,60818=>16143,36940=>16144,60819=>16144,31519=>16145,60820=>16145,39682=>16146,60821=>16146,23761=>16147,60822=>16147,31651=>16148,60823=>16148,25192=>16149,60824=>16149,25397=>16150,60825=>16150,39679=>16151,60826=>16151,31695=>16152,60827=>16152,39722=>16153,60828=>16153,31870=>16154,60829=>16154,31810=>16156,60831=>16156,31878=>16157,60832=>16157,39957=>16158,60833=>16158,31740=>16159,60834=>16159,39689=>16160,60835=>16160,39982=>16162,40794=>16163,60839=>16163,21875=>16164,60840=>16164,23491=>16165,60841=>16165,20477=>16166,60842=>16166,40600=>16167,60843=>16167,20466=>16168,60844=>16168,21088=>16169,60845=>16169,21201=>16170,60847=>16170,22375=>16171,60848=>16171,20566=>16172,60849=>16172,22967=>16173,60850=>16173,24082=>16174,60851=>16174,38856=>16175,60852=>16175,40363=>16176,60853=>16176,36700=>16177,60854=>16177,21609=>16178,60855=>16178,38836=>16179,60856=>16179,39232=>16180,60857=>16180,38842=>16181,60858=>16181,21292=>16182,60859=>16182,24880=>16183,60860=>16183,26924=>16184,60861=>16184,21466=>16185,60862=>16185,39946=>16186,60863=>16186,40194=>16187,60864=>16187,19515=>16188,60865=>16188,38465=>16189,60866=>16189,27008=>16190,60867=>16190,20646=>16191,60868=>16191,30022=>16192,60869=>16192,137069=>16193,60870=>16193,39386=>16194,60871=>16194,21107=>16195,60872=>16195,60873=>16196,37209=>16197,60874=>16197,38529=>16198,60875=>16198,37212=>16199,60876=>16199,60877=>16200,37201=>16201,60878=>16201,167575=>16202,60879=>16202,25471=>16203,60880=>16203,27338=>16204,60882=>16204,22033=>16205,60883=>16205,37262=>16206,60884=>16206,30074=>16207,60885=>16207,25221=>16208,60886=>16208,29519=>16209,60888=>16209,31856=>16210,60889=>16210,154657=>16211,60890=>16211,60892=>16212,30422=>16213,60894=>16213,39837=>16214,60895=>16214,20010=>16215,60896=>16215,134356=>16216,60897=>16216,33726=>16217,60898=>16217,34882=>16218,60899=>16218,60900=>16219,23626=>16220,60901=>16220,27072=>16221,60902=>16221,21023=>16224,60905=>16224,24053=>16225,60906=>16225,20174=>16226,60907=>16226,27697=>16227,60908=>16227,131570=>16228,60909=>16228,20281=>16229,60910=>16229,21660=>16230,60911=>16230,21146=>16232,60913=>16232,36226=>16233,60914=>16233,13822=>16234,60915=>16234,13811=>16236,60917=>16236,60918=>16237,27474=>16238,60919=>16238,37244=>16239,60920=>16239,40869=>16240,60921=>16240,39831=>16241,60922=>16241,38958=>16242,60923=>16242,39092=>16243,60924=>16243,39610=>16244,60925=>16244,40616=>16245,60926=>16245,40580=>16246,60927=>16246,31508=>16247,60929=>16247,60930=>16248,27642=>16249,60931=>16249,34840=>16250,60932=>16250,32632=>16251,60933=>16251,60934=>16252,22048=>16253,60935=>16253,173642=>16254,60936=>16254,36471=>16255,60937=>16255,40787=>16256,60938=>16256,60939=>16257,36308=>16258,60940=>16258,36431=>16259,60941=>16259,40476=>16260,60942=>16260,36353=>16261,60943=>16261,25218=>16262,60944=>16262,164733=>16263,60945=>16263,36392=>16264,60946=>16264,36469=>16265,60947=>16265,31443=>16266,60948=>16266,31294=>16267,60950=>16267,30936=>16268,60951=>16268,27882=>16269,60952=>16269,35431=>16270,60953=>16270,30215=>16271,60954=>16271,40742=>16272,60956=>16272,27854=>16273,60957=>16273,34774=>16274,60958=>16274,30147=>16275,60959=>16275,172722=>16276,60960=>16276,30803=>16277,60961=>16277,36108=>16278,60963=>16278,29410=>16279,60964=>16279,29553=>16280,60965=>16280,35629=>16281,60966=>16281,29442=>16282,60967=>16282,29937=>16283,60968=>16283,36075=>16284,60969=>16284,150203=>16285,60970=>16285,34351=>16286,60971=>16286,24506=>16287,60972=>16287,34976=>16288,60973=>16288,17591=>16289,60974=>16289,60975=>16290,159237=>16291,60977=>16291,60978=>16292,35454=>16293,60979=>16293,140571=>16294,60980=>16294,60981=>16295,24829=>16296,60982=>16296,30311=>16297,60983=>16297,39639=>16298,60984=>16298,40260=>16299,60985=>16299,37742=>16300,58859=>16300,60986=>16300,39823=>16301,60987=>16301,34805=>16302,60988=>16302,60989=>16303,36087=>16305,60991=>16305,29484=>16306,60992=>16306,38689=>16307,60993=>16307,39856=>16308,60994=>16308,13782=>16309,60995=>16309,29362=>16310,60996=>16310,19463=>16311,60997=>16311,31825=>16312,60998=>16312,39242=>16313,60999=>16313,24921=>16314,61001=>16314,19460=>16315,61002=>16315,40598=>16316,61003=>16316,24957=>16317,61004=>16317,61005=>16318,22367=>16319,61006=>16319,24943=>16320,61007=>16320,25254=>16321,61008=>16321,25145=>16322,61009=>16322,14940=>16324,61011=>16324,25058=>16325,61012=>16325,21418=>16326,61013=>16326,25444=>16327,61015=>16327,26626=>16328,61016=>16328,13778=>16329,61017=>16329,23895=>16330,61018=>16330,36826=>16331,61020=>16331,167481=>16332,61021=>16332,61022=>16333,20697=>16334,61023=>16334,30982=>16335,61025=>16335,21298=>16336,61026=>16336,38456=>16337,61027=>16337,134971=>16338,61028=>16338,16485=>16339,61029=>16339,61030=>16340,30718=>16341,61031=>16341,61032=>16342,31938=>16343,61033=>16343,155418=>16344,61034=>16344,31962=>16345,61035=>16345,31277=>16346,61036=>16346,32870=>16347,61037=>16347,32867=>16348,61038=>16348,32077=>16349,61039=>16349,29957=>16350,61040=>16350,29938=>16351,61041=>16351,35220=>16352,61042=>16352,33306=>16353,61043=>16353,26380=>16354,61044=>16354,32866=>16355,61045=>16355,160902=>16356,61046=>16356,32859=>16357,61047=>16357,29936=>16358,61048=>16358,33027=>16359,61049=>16359,30500=>16360,61050=>16360,35209=>16361,61051=>16361,157644=>16362,61052=>16362,30035=>16363,61053=>16363,34729=>16364,61055=>16364,34766=>16365,61056=>16365,33224=>16366,61057=>16366,34700=>16367,61058=>16367,35401=>16368,61059=>16368,36013=>16369,61060=>16369,35651=>16370,61061=>16370,30507=>16371,61062=>16371,29944=>16372,61063=>16372,34010=>16373,61064=>16373,27058=>16374,61066=>16374,36262=>16375,61067=>16375,61068=>16376,35241=>16377,58392=>16377,61069=>16377,28089=>16379,61071=>16379,34753=>16380,61072=>16380,147473=>16381,61073=>16381,29927=>16382,61074=>16382,15835=>16383,61075=>16383,29046=>16384,61076=>16384,24740=>16385,57702=>16385,61077=>16385,24988=>16386,61078=>16386,15569=>16387,61079=>16387,24695=>16389,61081=>16389,61082=>16390,32625=>16391,61083=>16391,194850=>16392,24809=>16393,61086=>16393,19326=>16394,61087=>16394,132423=>16395,57344=>16395,37595=>16396,57345=>16396,132575=>16397,57346=>16397,147397=>16398,57347=>16398,34124=>16399,57348=>16399,17077=>16400,57349=>16400,29679=>16401,57350=>16401,20917=>16402,57351=>16402,13897=>16403,57352=>16403,149826=>16404,57353=>16404,166372=>16405,57354=>16405,37700=>16406,57355=>16406,137691=>16407,57356=>16407,33518=>16408,57357=>16408,146632=>16409,57358=>16409,30780=>16410,57359=>16410,26436=>16411,57360=>16411,25311=>16412,57361=>16412,149811=>16413,57362=>16413,166314=>16414,57363=>16414,131744=>16415,57364=>16415,158643=>16416,57365=>16416,135941=>16417,57366=>16417,20395=>16418,57367=>16418,140525=>16419,57368=>16419,20488=>16420,57369=>16420,159017=>16421,57370=>16421,162436=>16422,57371=>16422,144896=>16423,57372=>16423,150193=>16424,57373=>16424,140563=>16425,57374=>16425,131966=>16427,57376=>16427,24484=>16428,57377=>16428,131968=>16429,57378=>16429,131911=>16430,57379=>16430,28379=>16431,57380=>16431,132127=>16432,57381=>16432,20702=>16433,20737=>16434,57383=>16434,13434=>16435,57384=>16435,20750=>16436,57385=>16436,39020=>16437,57386=>16437,14147=>16438,57387=>16438,33814=>16439,57388=>16439,149924=>16440,57389=>16440,132231=>16441,57390=>16441,20832=>16442,57391=>16442,144308=>16443,57392=>16443,20842=>16444,57393=>16444,134143=>16445,57394=>16445,139516=>16446,57395=>16446,131813=>16447,57396=>16447,140592=>16448,57397=>16448,132494=>16449,57398=>16449,143923=>16450,57399=>16450,137603=>16451,57400=>16451,23426=>16452,57401=>16452,34685=>16453,57402=>16453,132531=>16454,57403=>16454,146585=>16455,57404=>16455,20914=>16456,57405=>16456,20920=>16457,57406=>16457,40244=>16458,57407=>16458,20937=>16459,57408=>16459,20943=>16460,57409=>16460,20945=>16461,57410=>16461,15580=>16462,57411=>16462,20947=>16463,57412=>16463,150182=>16464,57413=>16464,20915=>16465,57414=>16465,20973=>16468,57417=>16468,33741=>16469,57418=>16469,26942=>16470,57419=>16470,145197=>16471,57420=>16471,24443=>16472,57421=>16472,21003=>16473,57422=>16473,21030=>16474,57423=>16474,21052=>16475,57424=>16475,21173=>16476,57425=>16476,21079=>16477,57426=>16477,21140=>16478,57427=>16478,21177=>16479,57428=>16479,21189=>16480,57429=>16480,31765=>16481,57430=>16481,34114=>16482,57431=>16482,21216=>16483,57432=>16483,34317=>16484,57433=>16484,158483=>16485,57434=>16485,194601=>16486,166622=>16487,57436=>16487,21833=>16488,57437=>16488,28377=>16489,57438=>16489,147328=>16490,57439=>16490,133460=>16491,57440=>16491,147436=>16492,57441=>16492,21299=>16493,57442=>16493,134114=>16495,57444=>16495,27851=>16496,57445=>16496,136998=>16497,57446=>16497,26651=>16498,57447=>16498,29653=>16499,57448=>16499,24650=>16500,57449=>16500,16042=>16501,57450=>16501,14540=>16502,57451=>16502,136936=>16503,57452=>16503,29149=>16504,57453=>16504,17570=>16505,57454=>16505,21357=>16506,57455=>16506,21364=>16507,57456=>16507,165547=>16508,57457=>16508,21374=>16509,57458=>16509,194610=>16510,136598=>16511,57460=>16511,136723=>16512,57461=>16512,30694=>16513,57462=>16513,21395=>16514,57463=>16514,166555=>16515,57464=>16515,21408=>16516,57465=>16516,21419=>16517,57466=>16517,21422=>16518,57467=>16518,29607=>16519,57468=>16519,153458=>16520,57469=>16520,16217=>16521,57470=>16521,29596=>16522,57471=>16522,21441=>16523,57472=>16523,21445=>16524,57473=>16524,27721=>16525,57474=>16525,20041=>16526,57475=>16526,22526=>16527,57476=>16527,21465=>16528,57477=>16528,15019=>16529,57478=>16529,134031=>16530,57479=>16530,21472=>16531,57480=>16531,147435=>16532,57481=>16532,142755=>16533,57482=>16533,21494=>16534,57483=>16534,134263=>16535,57484=>16535,21523=>16536,57485=>16536,28793=>16537,57486=>16537,21803=>16538,57487=>16538,26199=>16539,57488=>16539,27995=>16540,57489=>16540,21613=>16541,57490=>16541,158547=>16542,57491=>16542,134516=>16543,57492=>16543,21853=>16544,57493=>16544,21647=>16545,57494=>16545,21668=>16546,57495=>16546,18342=>16547,57496=>16547,136973=>16548,57497=>16548,134877=>16549,57498=>16549,15796=>16550,57499=>16550,134477=>16551,57500=>16551,166332=>16552,57501=>16552,140952=>16553,57502=>16553,21831=>16554,57503=>16554,19693=>16555,57504=>16555,21551=>16556,57505=>16556,29719=>16557,57506=>16557,21894=>16558,57507=>16558,21929=>16559,57508=>16559,137431=>16561,57510=>16561,147514=>16562,57511=>16562,17746=>16563,57512=>16563,148533=>16564,57513=>16564,26291=>16565,57514=>16565,135348=>16566,57515=>16566,22071=>16567,57516=>16567,26317=>16568,57517=>16568,144010=>16569,57518=>16569,26276=>16570,57519=>16570,22093=>16572,57521=>16572,22095=>16573,57522=>16573,30961=>16574,57523=>16574,22257=>16575,57524=>16575,38791=>16576,57525=>16576,21502=>16577,57526=>16577,22272=>16578,57527=>16578,22255=>16579,57528=>16579,22253=>16580,57529=>16580,166758=>16581,57530=>16581,13859=>16582,57531=>16582,135759=>16583,57532=>16583,22342=>16584,57533=>16584,147877=>16585,57534=>16585,27758=>16586,57535=>16586,28811=>16587,57536=>16587,22338=>16588,57537=>16588,14001=>16589,57538=>16589,158846=>16590,57539=>16590,22502=>16591,57540=>16591,136214=>16592,57541=>16592,22531=>16593,57542=>16593,136276=>16594,57543=>16594,148323=>16595,57544=>16595,22566=>16596,57545=>16596,150517=>16597,57546=>16597,22559=>16598,22698=>16599,57548=>16599,13665=>16600,57549=>16600,22752=>16601,57550=>16601,22748=>16602,57551=>16602,135740=>16603,57552=>16603,22779=>16604,57553=>16604,23551=>16605,57554=>16605,22339=>16606,57555=>16606,172368=>16607,57556=>16607,148088=>16608,57557=>16608,37843=>16609,57558=>16609,13729=>16610,57559=>16610,22815=>16611,57560=>16611,26790=>16612,57561=>16612,14019=>16613,57562=>16613,28249=>16614,57563=>16614,136766=>16615,57564=>16615,23076=>16616,57565=>16616,136850=>16618,57567=>16618,34053=>16619,57568=>16619,22985=>16620,57569=>16620,134478=>16621,57570=>16621,158849=>16622,57571=>16622,159018=>16623,57572=>16623,137180=>16624,57573=>16624,23001=>16625,57574=>16625,137211=>16626,57575=>16626,137138=>16627,57576=>16627,159142=>16628,57577=>16628,28017=>16629,57578=>16629,137256=>16630,57579=>16630,136917=>16631,57580=>16631,23033=>16632,57581=>16632,159301=>16633,57582=>16633,23211=>16634,57583=>16634,23139=>16635,57584=>16635,14054=>16636,57585=>16636,149929=>16637,57586=>16637,14088=>16639,57588=>16639,23190=>16640,57589=>16640,29797=>16641,57590=>16641,23251=>16642,57591=>16642,159649=>16643,57592=>16643,140628=>16644,57593=>16644,137489=>16645,57595=>16645,14130=>16646,57596=>16646,136888=>16647,57597=>16647,24195=>16648,57598=>16648,21200=>16649,57599=>16649,23414=>16650,57600=>16650,25992=>16651,57601=>16651,23420=>16652,57602=>16652,162318=>16653,57603=>16653,16388=>16654,57604=>16654,18525=>16655,57605=>16655,131588=>16656,57606=>16656,23509=>16657,57607=>16657,137780=>16658,57609=>16658,154060=>16659,57610=>16659,132517=>16660,57611=>16660,23539=>16661,57612=>16661,23453=>16662,57613=>16662,19728=>16663,57614=>16663,23557=>16664,57615=>16664,138052=>16665,57616=>16665,23571=>16666,57617=>16666,29646=>16667,57618=>16667,23572=>16668,57619=>16668,138405=>16669,57620=>16669,158504=>16670,57621=>16670,23625=>16671,57622=>16671,18653=>16672,57623=>16672,23685=>16673,57624=>16673,23785=>16674,57625=>16674,23791=>16675,57626=>16675,23947=>16676,57627=>16676,138745=>16677,57628=>16677,138807=>16678,57629=>16678,23824=>16679,57630=>16679,23832=>16680,57631=>16680,23878=>16681,57632=>16681,138916=>16682,57633=>16682,23738=>16683,57634=>16683,24023=>16684,57635=>16684,33532=>16685,57636=>16685,14381=>16686,57637=>16686,149761=>16687,57638=>16687,139337=>16688,57639=>16688,139635=>16689,57640=>16689,33415=>16690,57641=>16690,14390=>16691,57642=>16691,15298=>16692,57643=>16692,24110=>16693,57644=>16693,27274=>16694,57645=>16694,57647=>16696,148668=>16697,57648=>16697,134355=>16698,57649=>16698,21414=>16699,57650=>16699,20151=>16700,57651=>16700,21416=>16702,57653=>16702,137073=>16703,57654=>16703,24073=>16704,57655=>16704,57656=>16705,164994=>16706,57657=>16706,24313=>16707,57658=>16707,24315=>16708,57659=>16708,14496=>16709,57660=>16709,24316=>16710,57661=>16710,26686=>16711,57662=>16711,37915=>16712,57663=>16712,24333=>16713,57664=>16713,131521=>16714,57665=>16714,194708=>16715,57666=>16715,15070=>16716,57667=>16716,135994=>16717,57669=>16717,24378=>16718,57670=>16718,157832=>16719,57671=>16719,140240=>16720,57672=>16720,140401=>16721,57674=>16721,24419=>16722,57675=>16722,159342=>16723,57677=>16723,24434=>16724,57678=>16724,37696=>16725,57679=>16725,166454=>16726,57680=>16726,24487=>16727,57681=>16727,23990=>16728,57682=>16728,15711=>16729,57683=>16729,152144=>16730,57684=>16730,139114=>16731,57685=>16731,159992=>16732,57686=>16732,140904=>16733,57687=>16733,37334=>16734,57688=>16734,131742=>16735,57689=>16735,166441=>16736,57690=>16736,24625=>16737,57691=>16737,26245=>16738,57692=>16738,14691=>16739,57694=>16739,15815=>16740,57695=>16740,13881=>16741,57696=>16741,22416=>16742,57697=>16742,141236=>16743,57698=>16743,31089=>16744,57699=>16744,15936=>16745,57700=>16745,24734=>16746,57701=>16746,24810=>16748,149890=>16749,57704=>16749,149903=>16750,57705=>16750,162387=>16751,57706=>16751,29860=>16752,57707=>16752,20705=>16753,57708=>16753,23200=>16754,57709=>16754,24932=>16755,57710=>16755,24898=>16756,57712=>16756,194726=>16757,57713=>16757,159442=>16758,57714=>16758,24961=>16759,57715=>16759,20980=>16760,57716=>16760,132694=>16761,57717=>16761,24967=>16762,57718=>16762,23466=>16763,57719=>16763,147383=>16764,57720=>16764,141407=>16765,57721=>16765,25043=>16766,57722=>16766,166813=>16767,57723=>16767,170333=>16768,57724=>16768,25040=>16769,57725=>16769,14642=>16770,57726=>16770,141696=>16771,57727=>16771,141505=>16772,57728=>16772,24611=>16773,57729=>16773,24924=>16774,57730=>16774,25886=>16775,57731=>16775,25483=>16776,57732=>16776,131352=>16777,57733=>16777,25285=>16778,57734=>16778,137072=>16779,57735=>16779,25301=>16780,57736=>16780,142861=>16781,57737=>16781,25452=>16782,57738=>16782,149983=>16783,57739=>16783,14871=>16784,57740=>16784,25656=>16785,57741=>16785,25592=>16786,57742=>16786,136078=>16787,57743=>16787,137212=>16788,57744=>16788,28554=>16789,57746=>16789,142902=>16790,57747=>16790,153373=>16792,57750=>16792,25825=>16793,57751=>16793,25829=>16794,57752=>16794,38011=>16795,57753=>16795,14950=>16796,57754=>16796,25658=>16797,57755=>16797,14935=>16798,57756=>16798,25933=>16799,57757=>16799,28438=>16800,57758=>16800,150056=>16801,57759=>16801,150051=>16802,57760=>16802,25989=>16803,57761=>16803,25965=>16804,57762=>16804,25951=>16805,57763=>16805,26037=>16807,57765=>16807,149824=>16808,57766=>16808,19255=>16809,57767=>16809,26065=>16810,57768=>16810,16600=>16811,57769=>16811,137257=>16812,57770=>16812,57771=>16813,26083=>16814,57772=>16814,24543=>16815,57773=>16815,144384=>16816,57774=>16816,26136=>16817,57775=>16817,57776=>16818,143863=>16818,57777=>16819,143864=>16819,26180=>16820,57778=>16820,57779=>16821,143780=>16821,57780=>16822,143781=>16822,26187=>16823,57781=>16823,134773=>16824,57782=>16824,26215=>16825,57783=>16825,152038=>16826,57784=>16826,26227=>16827,57785=>16827,64018=>16828,143921=>16829,57788=>16829,165364=>16830,57789=>16830,143816=>16831,57790=>16831,152339=>16832,57791=>16832,30661=>16833,57792=>16833,141559=>16834,57793=>16834,39332=>16835,57794=>16835,26370=>16836,57795=>16836,148380=>16837,57796=>16837,150049=>16838,57797=>16838,27130=>16839,57799=>16839,145346=>16840,57800=>16840,194779=>16841,26471=>16842,57802=>16842,26466=>16843,57803=>16843,147917=>16844,57804=>16844,168173=>16845,57805=>16845,26583=>16846,57806=>16846,17641=>16847,57807=>16847,26658=>16848,57808=>16848,28240=>16849,57809=>16849,37436=>16850,57810=>16850,26625=>16851,57811=>16851,144358=>16852,57812=>16852,159136=>16853,57813=>16853,26717=>16854,57814=>16854,144495=>16855,57815=>16855,27105=>16856,57816=>16856,27147=>16857,57817=>16857,166623=>16858,57818=>16858,26995=>16859,57819=>16859,26819=>16860,57820=>16860,144845=>16861,57821=>16861,26881=>16862,57822=>16862,26880=>16863,57823=>16863,14849=>16864,57825=>16864,144956=>16865,57826=>16865,15232=>16866,57827=>16866,26540=>16867,57828=>16867,26977=>16868,57829=>16868,166474=>16869,57830=>16869,17148=>16870,57831=>16870,26934=>16871,57832=>16871,27032=>16872,57833=>16872,15265=>16873,57834=>16873,132041=>16874,57835=>16874,33635=>16875,57836=>16875,20624=>16876,57837=>16876,27129=>16877,57838=>16877,144985=>16878,57839=>16878,139562=>16879,57840=>16879,27205=>16880,57841=>16880,145155=>16881,57842=>16881,27293=>16882,57843=>16882,15347=>16883,57844=>16883,26545=>16884,57845=>16884,27336=>16885,57846=>16885,168348=>16886,57847=>16886,15373=>16887,57848=>16887,27421=>16888,57849=>16888,133411=>16889,57850=>16889,24798=>16890,60308=>16890,57851=>16890,27445=>16891,57852=>16891,27508=>16892,57853=>16892,141261=>16893,57854=>16893,28341=>16894,57855=>16894,57856=>16895,146139=>16895,137560=>16897,57858=>16897,14144=>16898,57859=>16898,21537=>16899,57860=>16899,146266=>16900,57861=>16900,27617=>16901,57862=>16901,147196=>16902,57863=>16902,27612=>16903,57864=>16903,27703=>16904,57865=>16904,140427=>16905,57866=>16905,149745=>16906,57867=>16906,158545=>16907,57868=>16907,27738=>16908,57869=>16908,33318=>16909,57870=>16909,27769=>16910,57871=>16910,146876=>16911,57872=>16911,17605=>16912,57873=>16912,146877=>16913,57874=>16913,147876=>16914,57875=>16914,149772=>16915,57876=>16915,149760=>16916,57877=>16916,146633=>16917,57878=>16917,14053=>16918,57879=>16918,15595=>16919,57880=>16919,134450=>16920,57881=>16920,39811=>16921,57882=>16921,143865=>16922,57883=>16922,140433=>16923,57884=>16923,32655=>16924,57885=>16924,26679=>16925,57886=>16925,159013=>16926,57887=>16926,159137=>16927,57888=>16927,159211=>16928,57889=>16928,28054=>16929,57890=>16929,27996=>16930,57891=>16930,28284=>16931,57892=>16931,28420=>16932,57893=>16932,149887=>16933,57894=>16933,147589=>16934,57895=>16934,159346=>16935,57896=>16935,34099=>16936,57897=>16936,159604=>16937,57898=>16937,20935=>16938,57899=>16938,33838=>16941,57902=>16941,166689=>16942,57903=>16942,194824=>16943,146991=>16944,57905=>16944,29779=>16945,57906=>16945,147330=>16946,57907=>16946,31180=>16947,57908=>16947,28239=>16948,57909=>16948,23185=>16949,57910=>16949,143435=>16950,57911=>16950,28664=>16951,57912=>16951,14093=>16952,57913=>16952,28573=>16953,57914=>16953,146992=>16954,57915=>16954,28410=>16955,57916=>16955,136343=>16956,57917=>16956,147517=>16957,57918=>16957,17749=>16958,57919=>16958,37872=>16959,57920=>16959,28484=>16960,57921=>16960,28508=>16961,57922=>16961,15694=>16962,57923=>16962,28532=>16963,57924=>16963,168304=>16964,57925=>16964,15675=>16965,57926=>16965,28575=>16966,57927=>16966,147780=>16967,57928=>16967,28627=>16968,57929=>16968,147601=>16969,57930=>16969,147797=>16970,57931=>16970,147513=>16971,57932=>16971,147440=>16972,57933=>16972,147380=>16973,57934=>16973,147775=>16974,57935=>16974,20959=>16975,57936=>16975,57937=>16976,147798=>16976,57938=>16977,147799=>16977,147776=>16978,57939=>16978,156125=>16979,57940=>16979,28747=>16980,57941=>16980,28798=>16981,57942=>16981,28839=>16982,57943=>16982,28876=>16984,57945=>16984,28885=>16985,57946=>16985,28886=>16986,57947=>16986,28895=>16987,57948=>16987,16644=>16988,57949=>16988,15848=>16989,57950=>16989,29108=>16990,57951=>16990,29078=>16991,57952=>16991,148087=>16992,57953=>16992,28971=>16993,57954=>16993,28997=>16994,57955=>16994,23176=>16995,57956=>16995,29002=>16996,57957=>16996,64072=>16997,148325=>16998,57960=>16998,29007=>16999,57961=>16999,37730=>17000,57962=>17000,148161=>17001,57963=>17001,28972=>17002,57964=>17002,148570=>17003,57965=>17003,150055=>17004,57966=>17004,150050=>17005,57967=>17005,29114=>17006,57968=>17006,166888=>17007,57969=>17007,28861=>17008,57970=>17008,29198=>17009,57971=>17009,37954=>17010,57972=>17010,29205=>17011,57973=>17011,22801=>17012,57974=>17012,37955=>17013,57975=>17013,29220=>17014,57976=>17014,37697=>17015,57977=>17015,153093=>17016,57978=>17016,29230=>17017,57979=>17017,29248=>17018,57980=>17018,149876=>17019,57981=>17019,26813=>17020,57982=>17020,29269=>17021,57983=>17021,29271=>17022,57984=>17022,15957=>17023,57985=>17023,143428=>17024,57986=>17024,26637=>17025,57987=>17025,28477=>17026,57988=>17026,29314=>17027,57989=>17027,29483=>17029,57991=>17029,149539=>17030,57992=>17030,165931=>17031,57993=>17031,18669=>17032,57994=>17032,165892=>17033,57995=>17033,29480=>17034,57996=>17034,29486=>17035,57997=>17035,29647=>17036,57998=>17036,29610=>17037,57999=>17037,134202=>17038,58000=>17038,158254=>17039,58001=>17039,29641=>17040,58002=>17040,29769=>17041,58003=>17041,147938=>17042,58004=>17042,136935=>17043,58005=>17043,150052=>17044,58006=>17044,26147=>17045,58007=>17045,14021=>17046,58008=>17046,149943=>17047,58009=>17047,149901=>17048,58010=>17048,150011=>17049,58011=>17049,29687=>17050,58012=>17050,29717=>17051,58013=>17051,26883=>17052,58014=>17052,150054=>17053,58015=>17053,29753=>17054,58016=>17054,16087=>17055,58018=>17055,194863=>17056,141485=>17057,58020=>17057,29792=>17058,58021=>17058,167602=>17059,58022=>17059,29767=>17060,58023=>17060,29668=>17061,58024=>17061,29814=>17062,58025=>17062,33721=>17063,58026=>17063,29804=>17064,58027=>17064,29812=>17065,58029=>17065,37873=>17066,58030=>17066,27180=>17067,58031=>17067,29826=>17068,58032=>17068,18771=>17069,58033=>17069,150156=>17070,58034=>17070,147807=>17071,58035=>17071,150137=>17072,58036=>17072,166799=>17073,58037=>17073,23366=>17074,58038=>17074,166915=>17075,58039=>17075,137374=>17076,58040=>17076,29896=>17077,58041=>17077,137608=>17078,58042=>17078,29966=>17079,58043=>17079,29982=>17080,58045=>17080,167641=>17081,58046=>17081,137803=>17082,58047=>17082,23511=>17083,58048=>17083,167596=>17084,58049=>17084,37765=>17085,58050=>17085,30029=>17086,58051=>17086,30026=>17087,58052=>17087,30055=>17088,58053=>17088,30062=>17089,58054=>17089,151426=>17090,58055=>17090,16132=>17091,58056=>17091,150803=>17092,58057=>17092,30094=>17093,58058=>17093,29789=>17094,58059=>17094,30110=>17095,58060=>17095,30132=>17096,58061=>17096,30210=>17097,58062=>17097,30252=>17098,58063=>17098,30289=>17099,58064=>17099,30287=>17100,58065=>17100,30319=>17101,58066=>17101,58067=>17102,156661=>17103,58068=>17103,30352=>17104,58069=>17104,33263=>17105,58070=>17105,14328=>17106,58071=>17106,157969=>17107,58072=>17107,157966=>17108,58073=>17108,30369=>17109,58074=>17109,30373=>17110,58075=>17110,30391=>17111,58076=>17111,30412=>17112,58077=>17112,159647=>17113,58078=>17113,33890=>17114,58079=>17114,151709=>17115,58080=>17115,151933=>17116,58081=>17116,138780=>17117,58082=>17117,30494=>17118,58083=>17118,30502=>17119,58084=>17119,30528=>17120,58085=>17120,25775=>17121,58086=>17121,152096=>17122,58087=>17122,30552=>17123,58088=>17123,144044=>17124,58089=>17124,30639=>17125,58090=>17125,166244=>17126,58091=>17126,166248=>17127,58092=>17127,136897=>17128,58093=>17128,30708=>17129,58094=>17129,26826=>17131,58098=>17131,30895=>17132,58099=>17132,30919=>17133,58100=>17133,30931=>17134,58101=>17134,38565=>17135,58102=>17135,31022=>17136,58103=>17136,153056=>17137,58104=>17137,30935=>17138,58105=>17138,31028=>17139,58106=>17139,30897=>17140,58107=>17140,161292=>17141,58108=>17141,36792=>17142,58109=>17142,34948=>17143,58110=>17143,140828=>17144,58113=>17144,31110=>17145,58114=>17145,35072=>17146,58115=>17146,26882=>17147,58116=>17147,31104=>17148,58117=>17148,153687=>17149,58118=>17149,31133=>17150,58119=>17150,162617=>17151,58120=>17151,31036=>17152,58121=>17152,31145=>17153,58122=>17153,28202=>17154,58123=>17154,160038=>17155,58124=>17155,16040=>17156,58125=>17156,31174=>17157,58126=>17157,168205=>17158,58127=>17158,31188=>17159,58128=>17159,21797=>17161,62526=>17161,134210=>17163,62528=>17163,134421=>17164,62529=>17164,151851=>17165,62530=>17165,21904=>17166,62531=>17166,142534=>17167,62532=>17167,14828=>17168,62533=>17168,131905=>17169,62534=>17169,36422=>17170,62535=>17170,150968=>17171,62536=>17171,169189=>17172,62537=>17172,164030=>17174,62539=>17174,30586=>17175,62540=>17175,142392=>17176,62541=>17176,14900=>17177,62542=>17177,18389=>17178,62543=>17178,164189=>17179,62544=>17179,158194=>17180,62545=>17180,151018=>17181,62546=>17181,25821=>17182,62547=>17182,134524=>17183,62548=>17183,135092=>17184,62549=>17184,134357=>17185,62550=>17185,25741=>17187,62552=>17187,36478=>17188,62553=>17188,134806=>17189,62554=>17189,135012=>17191,62556=>17191,142505=>17192,62557=>17192,164438=>17193,62558=>17193,148691=>17194,62559=>17194,134470=>17196,62561=>17196,170573=>17197,62562=>17197,164073=>17198,62563=>17198,18420=>17199,62564=>17199,151207=>17200,62565=>17200,142530=>17201,62566=>17201,39602=>17202,62567=>17202,14951=>17203,62568=>17203,169460=>17204,62569=>17204,16365=>17205,62570=>17205,13574=>17206,62571=>17206,152263=>17207,62572=>17207,169940=>17208,62573=>17208,142660=>17210,62575=>17210,40302=>17211,62576=>17211,38933=>17212,62577=>17212,17369=>17214,62579=>17214,25780=>17216,62581=>17216,21731=>17217,62582=>17217,62584=>17219,142282=>17219,14843=>17221,62586=>17221,157402=>17223,62588=>17223,157462=>17224,62589=>17224,162208=>17225,62590=>17225,25834=>17226,62591=>17226,151634=>17227,62592=>17227,134211=>17228,62593=>17228,36456=>17229,62594=>17229,166732=>17231,62596=>17231,132913=>17232,62597=>17232,18443=>17234,62599=>17234,131497=>17235,62600=>17235,16378=>17236,62601=>17236,22643=>17237,62602=>17237,142733=>17238,62603=>17238,148936=>17240,62605=>17240,132348=>17241,62606=>17241,155799=>17242,62607=>17242,134988=>17243,62608=>17243,21881=>17245,62610=>17245,17338=>17247,62612=>17247,19124=>17249,62614=>17249,141926=>17250,62615=>17250,135325=>17251,62616=>17251,33194=>17252,62617=>17252,39157=>17253,62618=>17253,134556=>17254,62619=>17254,25465=>17255,62620=>17255,14846=>17256,62621=>17256,141173=>17257,62622=>17257,36288=>17258,62623=>17258,22177=>17259,62624=>17259,25724=>17260,62625=>17260,15939=>17261,62626=>17261,173569=>17263,62628=>17263,134665=>17264,62629=>17264,142031=>17265,62630=>17265,135368=>17268,62633=>17268,145858=>17269,62634=>17269,14738=>17270,62635=>17270,14854=>17271,62636=>17271,164507=>17272,62637=>17272,13688=>17273,62638=>17273,155209=>17274,62639=>17274,139463=>17275,62640=>17275,142514=>17278,62643=>17278,169760=>17279,62644=>17279,13500=>17280,62645=>17280,27709=>17281,62646=>17281,151099=>17282,62647=>17282,161140=>17285,62650=>17285,142987=>17286,62651=>17286,139784=>17287,62652=>17287,173659=>17288,62653=>17288,167117=>17289,62654=>17289,134778=>17290,62655=>17290,134196=>17291,62656=>17291,161337=>17292,62683=>17292,142286=>17293,62684=>17293,62687=>17294,142417=>17294,14872=>17295,62689=>17295,62691=>17296,135367=>17296,62693=>17297,173618=>17297,167122=>17298,62695=>17298,167321=>17299,62696=>17299,167114=>17300,62697=>17300,38314=>17301,62698=>17301,62706=>17303,161630=>17303,28992=>17304,62708=>17304,20822=>17306,62385=>17306,20222=>17307,20616=>17308,62487=>17308,13459=>17310,62489=>17310,20870=>17311,62491=>17311,24130=>17312,63037=>17312,20997=>17313,62495=>17313,21031=>17314,62436=>17314,21113=>17315,62497=>17315,194600=>17316,13651=>17317,62504=>17317,21442=>17318,62505=>17318,21343=>17319,62715=>17319,21823=>17321,62520=>17321,21976=>17323,59986=>17323,13789=>17324,62722=>17324,22049=>17325,63067=>17325,22100=>17327,60044=>17327,60148=>17328,135291=>17328,60153=>17330,135379=>17330,61095=>17332,135934=>17332,14265=>17335,60104=>17335,23745=>17336,61099=>17336,23829=>17337,63066=>17337,23894=>17338,63030=>17338,14392=>17339,63036=>17339,20097=>17340,62477=>17340,24253=>17341,63038=>17341,14612=>17342,63042=>17342,25017=>17343,63050=>17343,25232=>17344,63054=>17344,25368=>17345,63056=>17345,25690=>17346,63063=>17346,25745=>17347,62381=>17347,33133=>17348,62709=>17348,33156=>17349,59922=>17349,33171=>17350,59924=>17350,26624=>17351,63080=>17351,15292=>17352,63093=>17352,29327=>17353,60517=>17353,29389=>17354,59781=>17354,149487=>17355,29497=>17356,59785=>17356,30018=>17357,59811=>17357,30172=>17358,59817=>17358,16320=>17359,59818=>17359,60278=>17360,151205=>17360,16343=>17361,59820=>17361,30336=>17363,30348=>17364,59824=>17364,151388=>17364,16552=>17365,59845=>17365,30777=>17366,59846=>17366,16643=>17367,59855=>17367,31377=>17368,59863=>17368,31771=>17369,59876=>17369,31981=>17370,59884=>17370,32659=>17371,62658=>17371,32686=>17372,59892=>17372,33535=>17374,59936=>17374,22623=>17375,59981=>17375,34482=>17376,59960=>17376,17836=>17377,34699=>17378,59963=>17378,35143=>17379,59969=>17379,35369=>17381,59972=>17381,36465=>17383,59988=>17383,60484=>17384,164233=>17384,36528=>17385,59990=>17385,37214=>17387,62443=>17387,37260=>17388,62441=>17388,39182=>17389,60051=>17389,39196=>17390,60054=>17390,39809=>17393,60066=>17393,40384=>17394,60080=>17394,40339=>17395,60078=>17395,40620=>17396,60085=>17396,19857=>17397,60540=>17397,37818=>17399,40571=>17400,60084=>17400,28809=>17401,63148=>17401,29512=>17402,59788=>17402,31129=>17404,59858=>17404,36791=>17405,59997=>17405,39234=>17407,60056=>17407,8364=>17601,12443=>17606,63518=>17606,12444=>17607,63519=>17607,11904=>17608,63520=>17608,12736=>17609,62211=>17609,12737=>17610,62212=>17610,12738=>17611,62213=>17611,12739=>17612,62214=>17612,12740=>17613,62215=>17613,131340=>17614,62216=>17614,12741=>17615,62217=>17615,131281=>17616,62218=>17616,131277=>17617,62219=>17617,12742=>17618,62220=>17618,12743=>17619,62221=>17619,131275=>17620,62222=>17620,139240=>17621,62223=>17621,12744=>17622,62224=>17622,131274=>17623,62225=>17623,12745=>17624,62226=>17624,12746=>17625,62227=>17625,12747=>17626,62228=>17626,12748=>17627,62229=>17627,131342=>17628,62230=>17628,12749=>17629,62231=>17629,12750=>17630,62232=>17630,62776=>17631,62777=>17632,138177=>17633,62778=>17633,194680=>17634,62779=>17634,12205=>17635,38737=>17635,62780=>17635,131206=>17636,62781=>17636,20059=>17637,62782=>17637,20155=>17638,62783=>17638,13630=>17639,62784=>17639,23587=>17640,62785=>17640,24401=>17641,62786=>17641,24516=>17642,62787=>17642,14586=>17643,62788=>17643,25164=>17644,62789=>17644,25909=>17645,62790=>17645,27514=>17646,62791=>17646,27701=>17647,62792=>17647,27706=>17648,62793=>17648,28780=>17649,62794=>17649,29227=>17650,62795=>17650,20012=>17651,62796=>17651,29357=>17652,62797=>17652,149737=>17653,62798=>17653,32594=>17654,62799=>17654,31035=>17655,62800=>17655,31993=>17656,62801=>17656,32595=>17657,62802=>17657,156266=>17658,62803=>17658,13505=>17659,62804=>17659,156491=>17660,62806=>17660,32770=>17661,62807=>17661,32896=>17662,62808=>17662,157202=>17663,62809=>17663,158033=>17664,62810=>17664,21341=>17665,62811=>17665,34916=>17666,62812=>17666,35265=>17667,62813=>17667,161970=>17668,62814=>17668,35744=>17669,62815=>17669,36125=>17670,62816=>17670,38021=>17671,62817=>17671,38264=>17672,62818=>17672,38271=>17673,62819=>17673,38376=>17674,62820=>17674,167439=>17675,62821=>17675,38886=>17676,62822=>17676,39029=>17677,62823=>17677,39118=>17678,62824=>17678,39134=>17679,62825=>17679,39267=>17680,62826=>17680,170000=>17681,62827=>17681,40060=>17682,62828=>17682,40479=>17683,62829=>17683,40644=>17684,62830=>17684,27503=>17685,62831=>17685,63751=>17686,62832=>17686,20023=>17687,62833=>17687,131207=>17688,62834=>17688,38429=>17689,62835=>17689,25143=>17690,62836=>17690,38050=>17691,62837=>17691,11908=>17692,63521=>17692,11910=>17693,63522=>17693,11911=>17694,63523=>17694,11912=>17695,63524=>17695,11914=>17696,63525=>17696,11916=>17697,63526=>17697,11917=>17698,63527=>17698,11925=>17699,63528=>17699,11932=>17700,63529=>17700,11941=>17701,63531=>17701,11943=>17702,63532=>17702,11946=>17703,63533=>17703,11948=>17704,63534=>17704,11950=>17705,63535=>17705,11958=>17706,63536=>17706,11964=>17707,63537=>17707,11966=>17708,63538=>17708,11978=>17709,63540=>17709,11980=>17710,63541=>17710,11981=>17711,63542=>17711,11983=>17712,63543=>17712,11990=>17713,63544=>17713,11991=>17714,63545=>17714,11998=>17715,63546=>17715,172969=>17716,62368=>17716,135493=>17717,62369=>17717,25866=>17718,62371=>17718,20029=>17719,62374=>17719,28381=>17720,62375=>17720,40270=>17721,62376=>17721,37343=>17722,62377=>17722,62380=>17723,161589=>17723,20250=>17724,62382=>17724,20264=>17725,62383=>17725,20392=>17726,62384=>17726,20852=>17727,62386=>17727,20892=>17728,62387=>17728,20964=>17729,62388=>17729,21153=>17730,62389=>17730,21160=>17731,62390=>17731,21307=>17732,62391=>17732,21326=>17733,62392=>17733,21457=>17734,62393=>17734,21464=>17735,62394=>17735,22242=>17736,62395=>17736,22768=>17737,62396=>17737,22788=>17738,62397=>17738,22791=>17739,62398=>17739,22834=>17740,62399=>17740,22836=>17741,62400=>17741,23398=>17742,62401=>17742,23454=>17743,62402=>17743,23455=>17744,62403=>17744,23706=>17745,62404=>17745,24198=>17746,62405=>17746,24635=>17747,62406=>17747,25993=>17748,62407=>17748,26622=>17749,62408=>17749,26628=>17750,62409=>17750,26725=>17751,62410=>17751,27982=>17752,62411=>17752,28860=>17753,62412=>17753,30005=>17754,62413=>17754,32420=>17755,62414=>17755,32428=>17756,62415=>17756,32442=>17757,62416=>17757,32455=>17758,62417=>17758,32463=>17759,62418=>17759,32479=>17760,62419=>17760,32518=>17761,62420=>17761,32567=>17762,62421=>17762,33402=>17763,62422=>17763,33487=>17764,62423=>17764,33647=>17765,62424=>17765,35270=>17766,62425=>17766,35774=>17767,62426=>17767,35810=>17768,62427=>17768,36710=>17769,62428=>17769,36711=>17770,62429=>17770,36718=>17771,62430=>17771,29713=>17772,62431=>17772,31996=>17773,62432=>17773,32205=>17774,62433=>17774,26950=>17775,62434=>17775,31433=>17776,62435=>17776,30904=>17777,62442=>17777,32956=>17778,62444=>17778,36107=>17779,62446=>17779,33014=>17780,62447=>17780,133607=>17781,62448=>17781,32927=>17782,62451=>17782,40647=>17783,62452=>17783,19661=>17784,62453=>17784,40393=>17785,62454=>17785,40460=>17786,62455=>17786,19518=>17787,62456=>17787,171510=>17788,62457=>17788,159758=>17789,62458=>17789,40458=>17790,62459=>17790,172339=>17791,62460=>17791,13761=>17792,62461=>17792,28314=>17793,62463=>17793,33342=>17794,62464=>17794,29977=>17795,62465=>17795,18705=>17796,62467=>17796,39532=>17797,62468=>17797,39567=>17798,62469=>17798,40857=>17799,62470=>17799,31111=>17800,62471=>17800,164972=>17801,62472=>17801,138698=>17802,62473=>17802,132560=>17803,62474=>17803,142054=>17804,62475=>17804,20004=>17805,62476=>17805,20096=>17806,62478=>17806,20103=>17807,62479=>17807,20159=>17808,62480=>17808,20203=>17809,62481=>17809,20279=>17810,62482=>17810,13388=>17811,62483=>17811,20413=>17812,62484=>17812,15944=>17813,62485=>17813,20483=>17814,62486=>17814,13437=>17815,62488=>17815,13477=>17816,62490=>17816,22789=>17817,62492=>17817,20955=>17818,62493=>17818,20988=>17819,62494=>17819,20105=>17820,62496=>17820,21136=>17821,62498=>17821,21287=>17822,62499=>17822,13767=>17823,62500=>17823,21417=>17824,62501=>17824,13649=>17825,62502=>17825,21424=>17826,62503=>17826,21539=>17827,62506=>17827,13677=>17828,62507=>17828,13682=>17829,62508=>17829,13953=>17830,62509=>17830,21651=>17831,62510=>17831,21667=>17832,62511=>17832,21684=>17833,62512=>17833,21689=>17834,62513=>17834,21712=>17835,62514=>17835,21743=>17836,62515=>17836,21784=>17837,62516=>17837,21795=>17838,62517=>17838,21800=>17839,62518=>17839,13720=>17840,62519=>17840,13733=>17841,62521=>17841,13759=>17842,62522=>17842,21975=>17843,62523=>17843,13765=>17844,62524=>17844,163204=>17845,62525=>17845,16467=>17846,62538=>17846,62551=>17847,135412=>17847,62555=>17848,134155=>17848,62574=>17849,161992=>17849,62580=>17850,155813=>17850,62583=>17851,142668=>17851,62585=>17852,135287=>17852,62587=>17853,135279=>17853,62595=>17854,139681=>17854,62609=>17855,134550=>17855,16571=>17856,62611=>17856,62631=>17857,142537=>17857,22098=>17858,62641=>17858,134961=>17859,62642=>17859,62657=>17860,157724=>17860,135375=>17861,62659=>17861,141315=>17862,62660=>17862,141625=>17863,62661=>17863,13819=>17864,62662=>17864,152035=>17865,62663=>17865,134796=>17866,62664=>17866,135053=>17867,62665=>17867,134826=>17868,62666=>17868,16275=>17869,62667=>17869,134960=>17870,62668=>17870,134471=>17871,62669=>17871,135503=>17872,62670=>17872,134732=>17873,62671=>17873,134827=>17874,62673=>17874,134057=>17875,62674=>17875,134472=>17876,62675=>17876,135360=>17877,62676=>17877,135485=>17878,62677=>17878,16377=>17879,62678=>17879,140950=>17880,62679=>17880,25650=>17881,62680=>17881,135085=>17882,62681=>17882,144372=>17883,62682=>17883,62685=>17884,134526=>17884,62686=>17885,134527=>17885,62688=>17886,142421=>17886,62690=>17887,134808=>17887,62692=>17888,134958=>17888,62694=>17889,158544=>17889,21708=>17890,62699=>17890,33476=>17891,62700=>17891,21945=>17892,62701=>17892,171715=>17893,62703=>17893,39974=>17894,62704=>17894,39606=>17895,62705=>17895,62707=>17896,142830=>17896,33004=>17897,62710=>17897,23580=>17898,62711=>17898,157042=>17899,62712=>17899,33076=>17900,62713=>17900,14231=>17901,62714=>17901,164029=>17902,62716=>17902,37302=>17903,62717=>17903,134906=>17904,62718=>17904,134671=>17905,62719=>17905,134775=>17906,62720=>17906,134907=>17907,62721=>17907,151019=>17908,62723=>17908,13833=>17909,62724=>17909,134358=>17910,62725=>17910,22191=>17911,62726=>17911,141237=>17912,62727=>17912,135369=>17913,62728=>17913,134672=>17914,62729=>17914,134776=>17915,62730=>17915,135288=>17916,62731=>17916,135496=>17917,62732=>17917,164359=>17918,62733=>17918,136277=>17919,62734=>17919,134777=>17920,62735=>17920,151120=>17921,62736=>17921,142756=>17922,62737=>17922,23124=>17923,62738=>17923,62739=>17924,135197=>17924,62740=>17925,135198=>17925,62741=>17926,135413=>17926,62742=>17927,135414=>17927,22428=>17928,62743=>17928,134673=>17929,62744=>17929,161428=>17930,62745=>17930,164557=>17931,62746=>17931,135093=>17932,62747=>17932,134779=>17933,62748=>17933,151934=>17934,62749=>17934,14083=>17935,62750=>17935,135094=>17936,62751=>17936,135552=>17937,62752=>17937,152280=>17938,62753=>17938,172733=>17939,62754=>17939,149978=>17940,62755=>17940,137274=>17941,62756=>17941,147831=>17942,62757=>17942,164476=>17943,62758=>17943,22681=>17944,62759=>17944,21096=>17945,62760=>17945,13850=>17946,62761=>17946,153405=>17947,62762=>17947,31666=>17948,62763=>17948,23400=>17949,62764=>17949,18432=>17950,62765=>17950,19244=>17951,62766=>17951,40743=>17952,62767=>17952,18919=>17953,62768=>17953,39967=>17954,62769=>17954,39821=>17955,62770=>17955,154484=>17956,62771=>17956,143677=>17957,62772=>17957,22011=>17958,62773=>17958,13810=>17959,62774=>17959,22153=>17960,62775=>17960,23870=>17961,63028=>17961,23880=>17962,63029=>17962,15868=>17963,63031=>17963,14351=>17964,63032=>17964,23972=>17965,63033=>17965,23993=>17966,63034=>17966,14368=>17967,63035=>17967,24357=>17968,63039=>17968,24451=>17969,63040=>17969,14600=>17970,63041=>17970,14655=>17971,63043=>17971,14669=>17972,63044=>17972,24791=>17973,63045=>17973,24893=>17974,63046=>17974,23781=>17975,63047=>17975,14729=>17976,63048=>17976,25015=>17977,63049=>17977,25039=>17978,63051=>17978,14776=>17979,63052=>17979,25132=>17980,63053=>17980,25317=>17981,63055=>17981,14840=>17982,63057=>17982,22193=>17983,63058=>17983,14851=>17984,63059=>17984,25570=>17985,63060=>17985,25595=>17986,63061=>17986,25607=>17987,63062=>17987,14923=>17988,63064=>17988,25792=>17989,63065=>17989,40863=>17990,63068=>17990,14999=>17991,63069=>17991,25990=>17992,63070=>17992,15037=>17993,63071=>17993,26111=>17994,63072=>17994,26195=>17995,63073=>17995,15090=>17996,63074=>17996,26258=>17997,63075=>17997,15138=>17998,63076=>17998,26390=>17999,63077=>17999,15170=>18000,63078=>18000,26532=>18001,63079=>18001,15192=>18002,63081=>18002,26698=>18003,63082=>18003,26756=>18004,63083=>18004,15218=>18005,63084=>18005,15217=>18006,63085=>18006,15227=>18007,63086=>18007,26889=>18008,63087=>18008,26947=>18009,63088=>18009,29276=>18010,63089=>18010,26980=>18011,63090=>18011,27039=>18012,63091=>18012,27013=>18013,63092=>18013,27094=>18014,63094=>18014,15325=>18015,63095=>18015,27237=>18016,63096=>18016,27252=>18017,63097=>18017,27249=>18018,63098=>18018,27266=>18019,63099=>18019,15340=>18020,63100=>18020,27289=>18021,63101=>18021,15346=>18022,63102=>18022,27307=>18023,63103=>18023,27317=>18024,63104=>18024,27348=>18025,63105=>18025,27382=>18026,63106=>18026,27521=>18027,63107=>18027,27585=>18028,63108=>18028,27626=>18029,63109=>18029,27765=>18030,63110=>18030,27818=>18031,63111=>18031,15563=>18032,63112=>18032,27906=>18033,63113=>18033,27910=>18034,63114=>18034,27942=>18035,63115=>18035,28033=>18036,63116=>18036,15599=>18037,63117=>18037,28068=>18038,63118=>18038,28081=>18039,63119=>18039,28181=>18040,63120=>18040,28184=>18041,63121=>18041,28201=>18042,63122=>18042,28294=>18043,63123=>18043,166336=>18044,63124=>18044,28347=>18045,63125=>18045,28386=>18046,63126=>18046,28378=>18047,63127=>18047,40831=>18048,63128=>18048,28392=>18049,63129=>18049,28393=>18050,63130=>18050,28452=>18051,63131=>18051,28468=>18052,63132=>18052,15686=>18053,63133=>18053,147265=>18054,63134=>18054,28545=>18055,63135=>18055,28606=>18056,63136=>18056,15722=>18057,63137=>18057,15733=>18058,63138=>18058,29111=>18059,63139=>18059,23705=>18060,63140=>18060,15754=>18061,63141=>18061,28716=>18062,63142=>18062,15761=>18063,63143=>18063,28752=>18064,63144=>18064,28756=>18065,63145=>18065,28783=>18066,63146=>18066,28799=>18067,63147=>18067,131877=>18068,63149=>18068,17345=>18069,63150=>18069,13809=>18070,63151=>18070,134872=>18071,63152=>18071,13902=>18072,58134=>18072,15789=>18073,58172=>18073,154725=>18074,58173=>18074,26237=>18075,58183=>18075,31860=>18076,58188=>18076,29837=>18077,58197=>18077,32402=>18078,58215=>18078,17667=>18079,58232=>18079,58260=>18080,151480=>18080,58270=>18081,133901=>18081,58277=>18082,158474=>18082,13438=>18083,58311=>18083,58317=>18084,143087=>18084,58325=>18085,146613=>18085,58343=>18086,159385=>18086,34673=>18087,58364=>18087,25537=>18088,58385=>18088,30583=>18089,58387=>18089,35210=>18090,58390=>18090,58406=>18091,147343=>18091,35660=>18092,58415=>18092,58440=>18093,150729=>18093,18730=>18094,58464=>18094,172052=>18095,58471=>18095,165564=>18096,58472=>18096,165121=>18097,58473=>18097,15088=>18098,58490=>18098,28815=>18099,58511=>18099,58529=>18100,140922=>18100,58637=>18101,158120=>18101,58646=>18102,148043=>18102,26760=>18103,58662=>18103,58664=>18104,139611=>18104,40802=>18105,58702=>18105,37830=>18106,58793=>18106,58802=>18107,131967=>18107,37734=>18108,58888=>18108,37519=>18109,58901=>18109,34324=>18110,58954=>18110,58986=>18111,173147=>18111,16784=>18112,59010=>18112,26511=>18113,59045=>18113,26654=>18114,59048=>18114,14435=>18115,59051=>18115,59077=>18116,149996=>18116,15129=>18117,59128=>18117,33942=>18118,59176=>18118,59241=>18119,149858=>18119,14818=>18120,59254=>18120,33920=>18121,59259=>18121,17262=>18122,59328=>18122,38769=>18123,59402=>18123,39323=>18124,59427=>18124,18733=>18125,59499=>18125,28439=>18126,59703=>18126,160009=>18127,59704=>18127,28838=>18128,59746=>18128,150095=>18129,59752=>18129,32357=>18130,59753=>18130,23855=>18131,59755=>18131,15859=>18132,59756=>18132,150109=>18133,59758=>18133,137183=>18134,59759=>18134,32164=>18135,59760=>18135,33830=>18136,59761=>18136,21637=>18137,59762=>18137,146170=>18138,59763=>18138,131604=>18139,59765=>18139,22398=>18140,59766=>18140,133333=>18141,59767=>18141,132633=>18142,59768=>18142,16357=>18143,59769=>18143,139166=>18144,59770=>18144,172726=>18145,59771=>18145,28675=>18146,59772=>18146,168283=>18147,59773=>18147,23920=>18148,59774=>18148,29583=>18149,59775=>18149,166489=>18150,59777=>18150,168992=>18151,59778=>18151,20424=>18152,59779=>18152,32743=>18153,59780=>18153,29456=>18154,59782=>18154,29496=>18155,59784=>18155,29505=>18156,59787=>18156,16041=>18157,59789=>18157,29173=>18158,59792=>18158,149746=>18159,59793=>18159,29665=>18160,59794=>18160,16074=>18161,59796=>18161,16081=>18162,59798=>18162,29721=>18163,59801=>18163,29726=>18164,59802=>18164,29727=>18165,59803=>18165,16098=>18166,59804=>18166,16112=>18167,59805=>18167,16116=>18168,59806=>18168,16122=>18169,59807=>18169,29907=>18170,59808=>18170,16142=>18171,59809=>18171,16211=>18172,59810=>18172,30061=>18173,59812=>18173,30066=>18174,59813=>18174,30093=>18175,59814=>18175,16252=>18176,59815=>18176,30152=>18177,59816=>18177,30285=>18178,59819=>18178,30324=>18179,59821=>18179,16348=>18180,59822=>18180,30330=>18181,59823=>18181,29064=>18182,59825=>18182,22051=>18183,59826=>18183,35200=>18184,59827=>18184,16413=>18185,59829=>18185,30531=>18186,59830=>18186,16441=>18187,59831=>18187,16453=>18188,59833=>18188,13787=>18189,59834=>18189,30616=>18190,59835=>18190,16490=>18191,59836=>18191,16495=>18192,59837=>18192,30654=>18193,59839=>18193,30667=>18194,59840=>18194,30744=>18195,59842=>18195,30748=>18196,59844=>18196,30791=>18197,59847=>18197,30801=>18198,59848=>18198,30822=>18199,59849=>18199,33864=>18200,59850=>18200,152885=>18201,59851=>18201,31027=>18202,59852=>18202,31026=>18203,59854=>18203,16649=>18204,59856=>18204,31121=>18205,59857=>18205,31238=>18206,59860=>18206,16743=>18207,59862=>18207,16818=>18208,59864=>18208,31420=>18209,59865=>18209,33401=>18210,59866=>18210,16836=>18211,59867=>18211,31439=>18212,59868=>18212,31451=>18213,59869=>18213,16847=>18214,59870=>18214,31586=>18215,59872=>18215,31596=>18216,59873=>18216,31611=>18217,59874=>18217,31762=>18218,59875=>18218,16992=>18219,59877=>18219,17018=>18220,59878=>18220,31867=>18221,59879=>18221,31900=>18222,59880=>18222,17036=>18223,59881=>18223,31928=>18224,59882=>18224,17044=>18225,59883=>18225,36755=>18226,59885=>18226,28864=>18227,59886=>18227,134351=>18228,59887=>18228,32207=>18229,59888=>18229,32212=>18230,59889=>18230,32208=>18231,59890=>18231,32253=>18232,59891=>18232,32692=>18233,59893=>18233,29343=>18234,59894=>18234,17303=>18235,59895=>18235,32800=>18236,59896=>18236,32805=>18237,59897=>18237,32814=>18238,59899=>18238,32817=>18239,59900=>18239,32852=>18240,59901=>18240,22452=>18241,59903=>18241,28832=>18242,59904=>18242,32951=>18243,59905=>18243,33001=>18244,59906=>18244,17389=>18245,59907=>18245,33036=>18246,59908=>18246,33038=>18247,59910=>18247,33042=>18248,59911=>18248,33044=>18249,59913=>18249,17409=>18250,59914=>18250,15161=>18251,59915=>18251,33110=>18252,59916=>18252,33113=>18253,59917=>18253,33114=>18254,59918=>18254,17427=>18255,59919=>18255,33148=>18256,59921=>18256,17445=>18257,59923=>18257,17453=>18258,59925=>18258,33189=>18259,59926=>18259,22511=>18260,59927=>18260,33217=>18261,59928=>18261,33252=>18262,59929=>18262,33364=>18263,59930=>18263,17551=>18264,59931=>18264,33398=>18265,59933=>18265,33482=>18266,59934=>18266,33496=>18267,59935=>18267,17584=>18268,59937=>18268,33623=>18269,59938=>18269,38505=>18270,59939=>18270,33797=>18271,59941=>18271,28917=>18272,59942=>18272,33892=>18273,59943=>18273,33928=>18274,59945=>18274,17668=>18275,59946=>18275,33982=>18276,59947=>18276,34017=>18277,59948=>18277,34040=>18278,59949=>18278,34064=>18279,59950=>18279,34104=>18280,59951=>18280,34130=>18281,59952=>18281,17723=>18282,59953=>18282,34159=>18283,59954=>18283,34160=>18284,59955=>18284,34272=>18285,59956=>18285,17783=>18286,59957=>18286,34418=>18287,59958=>18287,34450=>18288,59959=>18288,34543=>18289,59961=>18289,38469=>18290,59962=>18290,17926=>18291,59964=>18291,17943=>18292,59965=>18292,34990=>18293,59966=>18293,35071=>18294,59967=>18294,35108=>18295,59968=>18295,35217=>18296,59970=>18296,162151=>18297,59971=>18297,35384=>18298,59973=>18298,35476=>18299,59974=>18299,35508=>18300,59975=>18300,35921=>18301,59976=>18301,36052=>18302,59977=>18302,36082=>18303,59978=>18303,36124=>18304,59979=>18304,18328=>18305,59980=>18305,36291=>18306,59982=>18306,18413=>18307,59983=>18307,36410=>18308,59985=>18308,22356=>18309,59987=>18309,22005=>18310,59989=>18310,18487=>18311,59991=>18311,36558=>18312,59992=>18312,36578=>18313,59993=>18313,36580=>18314,59994=>18314,36589=>18315,59995=>18315,36594=>18316,59996=>18316,36801=>18317,59998=>18317,36810=>18318,59999=>18318,36812=>18319,60000=>18319,36915=>18320,60001=>18320,18605=>18321,60003=>18321,39136=>18322,60004=>18322,37395=>18323,60005=>18323,18718=>18324,60006=>18324,37416=>18325,60007=>18325,37464=>18326,60008=>18326,37483=>18327,60009=>18327,37553=>18328,60010=>18328,37550=>18329,60011=>18329,37567=>18330,60012=>18330,37603=>18331,60013=>18331,37611=>18332,60014=>18332,37619=>18333,60015=>18333,37620=>18334,60016=>18334,37629=>18335,60017=>18335,37699=>18336,60018=>18336,37764=>18337,60019=>18337,37805=>18338,60020=>18338,18757=>18339,60021=>18339,18769=>18340,60022=>18340,37911=>18341,60024=>18341,37917=>18342,60026=>18342,37933=>18343,60027=>18343,37950=>18344,60028=>18344,18794=>18345,60029=>18345,37972=>18346,60030=>18346,38009=>18347,60031=>18347,38189=>18348,60032=>18348,38306=>18349,60033=>18349,18855=>18350,60034=>18350,38388=>18351,60035=>18351,38451=>18352,60036=>18352,18917=>18353,60037=>18353,18980=>18354,60039=>18354,38720=>18355,60040=>18355,18997=>18356,60041=>18356,38834=>18357,60042=>18357,38850=>18358,60043=>18358,19172=>18359,60045=>18359,39097=>18360,60047=>18360,19225=>18361,60048=>18361,39153=>18362,60049=>18362,22596=>18363,60050=>18363,39193=>18364,60052=>18364,39223=>18365,60055=>18365,39261=>18366,60057=>18366,39266=>18367,60058=>18367,19312=>18368,60059=>18368,39365=>18369,60060=>18369,19357=>18370,60061=>18370,39484=>18371,60062=>18371,39695=>18372,60063=>18372,39785=>18373,60065=>18373,39901=>18374,60067=>18374,39921=>18375,60068=>18375,39924=>18376,60069=>18376,19565=>18377,60070=>18377,39968=>18378,60071=>18378,14191=>18379,60072=>18379,138178=>18380,60073=>18380,40265=>18381,60074=>18381,40702=>18382,60076=>18382,22096=>18383,60077=>18383,40381=>18384,60079=>18384,40444=>18385,60081=>18385,38134=>18386,60082=>18386,36790=>18387,60083=>18387,40625=>18388,60086=>18388,40637=>18389,60087=>18389,40646=>18390,60088=>18390,38108=>18391,60089=>18391,40674=>18392,60090=>18392,40689=>18393,60091=>18393,40696=>18394,60092=>18394,40772=>18395,60094=>18395,131220=>18396,60095=>18396,131767=>18397,60096=>18397,132000=>18398,60097=>18398,38083=>18399,60099=>18399,60101=>18400,132311=>18400,38081=>18401,60103=>18401,132565=>18402,60105=>18402,132629=>18403,60106=>18403,132726=>18404,60107=>18404,136890=>18405,60108=>18405,22359=>18406,60109=>18406,29043=>18407,60110=>18407,133826=>18408,60111=>18408,133837=>18409,60112=>18409,134079=>18410,60113=>18410,194619=>18411,60115=>18411,134091=>18412,60116=>18412,21662=>18413,60117=>18413,134139=>18414,60118=>18414,134203=>18415,60119=>18415,134227=>18416,60120=>18416,134245=>18417,60121=>18417,134268=>18418,60122=>18418,60124=>18419,134285=>18419,134325=>18420,60126=>18420,134365=>18421,60127=>18421,134381=>18422,60128=>18422,134511=>18423,60129=>18423,134578=>18424,60130=>18424,134600=>18425,60131=>18425,134660=>18426,60135=>18426,134670=>18427,60136=>18427,134871=>18428,60137=>18428,135056=>18429,60138=>18429,134957=>18430,60139=>18430,134771=>18431,60140=>18431,60142=>18432,135100=>18432,135260=>18433,60144=>18433,135247=>18434,60145=>18434,135286=>18435,60146=>18435,135304=>18436,60149=>18436,135318=>18437,60150=>18437,13895=>18438,60151=>18438,135359=>18439,60152=>18439,135471=>18440,60154=>18440,135483=>18441,60155=>18441,21348=>18442,60156=>18442,135907=>18443,60158=>18443,136053=>18444,60159=>18444,60160=>18445,135990=>18445,136567=>18446,60162=>18446,136729=>18447,60163=>18447,137155=>18448,60164=>18448,137159=>18449,60165=>18449,28859=>18450,60167=>18450,137261=>18451,60168=>18451,137578=>18452,60169=>18452,137773=>18453,60170=>18453,137797=>18454,60171=>18454,138282=>18455,60172=>18455,138352=>18456,60173=>18456,138412=>18457,60174=>18457,138952=>18458,60175=>18458,138965=>18459,60177=>18459,139029=>18460,60178=>18460,29080=>18461,60179=>18461,139333=>18462,60181=>18462,27113=>18463,60182=>18463,14024=>18464,60183=>18464,139900=>18465,60184=>18465,140247=>18466,60185=>18466,140282=>18467,60186=>18467,141098=>18468,60187=>18468,141425=>18469,60188=>18469,141647=>18470,60189=>18470,141671=>18471,60191=>18471,141715=>18472,60192=>18472,142037=>18473,60193=>18473,60195=>18474,142056=>18474,60197=>18475,142094=>18475,60199=>18476,142143=>18476,60202=>18477,142412=>18477,142472=>18478,60204=>18478,142519=>18479,60205=>18479,154600=>18480,60206=>18480,142600=>18481,60207=>18481,142610=>18482,60208=>18482,142775=>18483,60209=>18483,142741=>18484,60210=>18484,142914=>18485,60211=>18485,143220=>18486,60212=>18486,143308=>18487,60213=>18487,143411=>18488,60214=>18488,143462=>18489,60215=>18489,144159=>18490,60216=>18490,144350=>18491,60217=>18491,144743=>18492,60222=>18492,144883=>18493,60223=>18493,144922=>18494,60227=>18494,145174=>18495,60228=>18495,22709=>18496,60231=>18496,60234=>18497,146087=>18497,146961=>18498,60237=>18498,147129=>18499,60238=>18499,60243=>18500,147737=>18500,148206=>18501,60245=>18501,148237=>18502,60246=>18502,148276=>18503,60248=>18503,148374=>18504,60249=>18504,148484=>18505,60258=>18505,148694=>18506,60259=>18506,22408=>18507,60260=>18507,149108=>18508,60261=>18508,60263=>18509,149295=>18509,149522=>18510,60271=>18510,149755=>18511,60272=>18511,150037=>18512,60273=>18512,60275=>18513,150208=>18513,22885=>18514,60277=>18514,60279=>18515,151430=>18515,60282=>18516,151596=>18516,22335=>18517,60284=>18517,152217=>18518,60286=>18518,152601=>18519,60287=>18519,152646=>18520,60291=>18520,152686=>18521,60292=>18521,60296=>18522,152895=>18522,60298=>18523,152926=>18523,152930=>18524,60300=>18524,152934=>18525,60301=>18525,153543=>18526,60302=>18526,60304=>18527,153693=>18527,60309=>18528,153859=>18528,154286=>18529,60312=>18529,154505=>18530,60313=>18530,154630=>18531,60314=>18531,22433=>18532,60316=>18532,29009=>18533,60317=>18533,60319=>18534,155906=>18534,60322=>18535,156082=>18535,156674=>18536,60325=>18536,156746=>18537,60326=>18537,60330=>18538,156804=>18538,60334=>18539,156808=>18539,60336=>18540,156946=>18540,157119=>18541,60338=>18541,157365=>18542,60339=>18542,22201=>18543,60347=>18543,60349=>18544,157436=>18544,13848=>18545,60355=>18545,157593=>18546,60357=>18546,157806=>18547,60358=>18547,60360=>18548,157790=>18548,60362=>18549,157895=>18549,60366=>18550,157990=>18550,60368=>18551,158009=>18551,60371=>18552,158202=>18552,60373=>18553,158253=>18553,158260=>18554,60378=>18554,158555=>18555,60379=>18555,60383=>18556,158621=>18556,60385=>18557,158884=>18557,60388=>18558,159150=>18558,159819=>18559,60392=>18559,160205=>18560,60393=>18560,160384=>18561,60395=>18561,160389=>18562,60396=>18562,60399=>18563,160395=>18563,60401=>18564,160486=>18564,38047=>18565,60404=>18565,160848=>18566,60405=>18566,14009=>18567,60416=>18567,161740=>18568,60424=>18568,161880=>18569,60425=>18569,22230=>18570,60426=>18570,60435=>18571,162269=>18571,162301=>18572,60441=>18572,162314=>18573,60442=>18573,162571=>18574,60443=>18574,163174=>18575,60444=>18575,60448=>18576,163849=>18576,60459=>18577,163875=>18577,60463=>18578,163912=>18578,60466=>18579,163971=>18579,163984=>18580,60479=>18580,164084=>18581,60480=>18581,164142=>18582,60481=>18582,60483=>18583,164175=>18583,164271=>18584,60485=>18584,164378=>18585,60486=>18585,164614=>18586,60487=>18586,164655=>18587,60488=>18587,164746=>18588,60489=>18588,164968=>18589,60491=>18589,165546=>18590,60492=>18590,25574=>18591,60494=>18591,166230=>18592,60495=>18592,60498=>18593,166328=>18593,60500=>18594,166375=>18594,60502=>18595,166376=>18595,166726=>18596,60503=>18596,166868=>18597,60504=>18597,60506=>18598,166921=>18598,167877=>18599,60508=>18599,168172=>18600,60509=>18600,168208=>18601,60511=>18601,168252=>18602,60512=>18602,15863=>18603,60513=>18603,168286=>18604,60514=>18604,150218=>18605,60515=>18605,36816=>18606,60516=>18606,60519=>18607,169191=>18607,169392=>18608,60521=>18608,169400=>18609,60522=>18609,169778=>18610,60523=>18610,170193=>18611,60524=>18611,170313=>18612,60525=>18612,170346=>18613,60526=>18613,170435=>18614,60527=>18614,170536=>18615,60528=>18615,170766=>18616,60529=>18616,171354=>18617,60530=>18617,171419=>18618,60531=>18618,32415=>18619,60532=>18619,171768=>18620,60533=>18620,171811=>18621,60534=>18621,19620=>18622,60535=>18622,38215=>18623,60536=>18623,172691=>18624,60537=>18624,29090=>18625,60538=>18625,172799=>18626,60539=>18626,173515=>18627,60542=>18627,19868=>18628,60543=>18628,134300=>18629,60544=>18629,36798=>18630,60545=>18630,36794=>18631,60547=>18631,140464=>18632,60548=>18632,36793=>18633,60549=>18633,150163=>18634,60550=>18634,20202=>18635,60555=>18635,60557=>18636,166700=>18636,36480=>18637,60560=>18637,137205=>18638,60561=>18638,166764=>18639,60563=>18639,166809=>18640,60564=>18640,60566=>18641,157359=>18641,60568=>18642,161365=>18642,153141=>18643,60570=>18643,153942=>18644,60571=>18644,20122=>18645,60572=>18645,155265=>18646,60573=>18646,60576=>18647,134765=>18647,147080=>18648,60579=>18648,150686=>18649,60580=>18649,137206=>18650,60583=>18650,137339=>18651,60584=>18651,60587=>18652,154698=>18652,152337=>18653,60589=>18653,15814=>18654,60590=>18654,60596=>18655,155352=>18655,19996=>18656,60600=>18656,135146=>18657,60601=>18657,134473=>18658,60602=>18658,145082=>18659,60603=>18659,60638=>18660,151880=>18660,21982=>18661,60644=>18661,34694=>18662,60672=>18662,60676=>18663,135361=>18663,149254=>18664,60679=>18664,23440=>18665,60680=>18665,60682=>18666,157843=>18666,141044=>18667,60684=>18667,163119=>18668,60685=>18668,147875=>18669,60686=>18669,163187=>18670,60687=>18670,159440=>18671,60688=>18671,160438=>18672,60689=>18672,60691=>18673,135641=>18673,146684=>18674,60693=>18674,173737=>18675,60694=>18675,134828=>18676,60695=>18676,60698=>18677,138402=>18677,60700=>18678,151490=>18678,60702=>18679,135147=>18679,60706=>18680,142752=>18680,135148=>18681,60710=>18681,134666=>18682,60711=>18682,60714=>18683,135149=>18683,60717=>18684,135559=>18684,19994=>18685,60721=>18685,19972=>18686,60722=>18686,23309=>18687,60724=>18687,13996=>18688,60727=>18688,21373=>18689,60729=>18689,13989=>18690,60730=>18690,22682=>18691,60732=>18691,150382=>18692,60733=>18692,22442=>18693,60736=>18693,154261=>18694,60737=>18694,133497=>18695,60738=>18695,60741=>18696,140389=>18696,146686=>18697,60746=>18697,171824=>18698,60747=>18698,151465=>18699,60749=>18699,169374=>18700,60750=>18700,60753=>18701,146870=>18701,157619=>18702,60755=>18702,145184=>18703,60756=>18703,147191=>18704,60759=>18704,146988=>18705,60760=>18705,60785=>18706,143578=>18706,135849=>18707,60789=>18707,22439=>18708,60790=>18708,149859=>18709,60791=>18709,60794=>18710,159918=>18710,60801=>18711,137068=>18711,60806=>18712,160100=>18712,159010=>18713,60809=>18713,150242=>18714,60810=>18714,39963=>18715,60837=>18715,149822=>18716,60838=>18716,15878=>18717,60846=>18717,60881=>18718,159011=>18718,60887=>18719,132092=>18719,60891=>18720,146685=>18720,60893=>18721,149785=>18721,22394=>18722,60904=>18722,21722=>18723,60912=>18723,29050=>18724,60928=>18724,60949=>18725,150135=>18725,60955=>18726,166490=>18726,60962=>18727,194624=>18727,60976=>18728,137275=>18728,61000=>18729,155993=>18729,61014=>18730,144373=>18730,61019=>18731,166850=>18731,61024=>18732,138566=>18732,61054=>18733,159441=>18733,13877=>18734,61065=>18734,61084=>18735,166701=>18735,21024=>18736,61088=>18736,15384=>18737,61089=>18737,146631=>18738,61090=>18738,155351=>18739,61091=>18739,161366=>18740,61092=>18740,152881=>18741,61093=>18741,137540=>18742,61094=>18742,170243=>18743,61096=>18743,159196=>18744,61097=>18744,159917=>18745,61098=>18745,156077=>18746,61100=>18746,166415=>18747,61101=>18747,145015=>18748,61102=>18748,131310=>18749,61103=>18749,157766=>18750,61104=>18750,151310=>18751,61105=>18751,17762=>18752,61106=>18752,23327=>18753,61107=>18753,156492=>18754,61108=>18754,40784=>18755,61109=>18755,40614=>18756,61110=>18756,156267=>18757,61111=>18757,20962=>18758,57415=>18758,21314=>18759,57416=>18759,26285=>18760,57520=>18760,22620=>18761,57547=>18761,21843=>18762,57566=>18762,15749=>18763,57594=>18763,24928=>18764,57608=>18764,18606=>18765,57668=>18765,38845=>18766,57676=>18766,57693=>18767,137335=>18767,24755=>18768,57703=>18768,33828=>18769,57711=>18769,38932=>18770,57748=>18770,147596=>18771,57749=>18771,57764=>18772,143486=>18772,57787=>18773,138813=>18773,15147=>18774,57798=>18774,15666=>18775,57824=>18775,57857=>18776,132021=>18776,28801=>18777,57944=>18777,23708=>18778,57959=>18778,58017=>18779,132547=>18779,14128=>18780,58028=>18780,136054=>18781,58096=>18781,150034=>18782,58097=>18782,58111=>18783,166699=>18783,58112=>18784,155779=>18784,256=>18785,62233=>18785,193=>18786,62234=>18786,461=>18787,62235=>18787,192=>18788,62236=>18788,274=>18789,62237=>18789,201=>18790,62238=>18790,282=>18791,62239=>18791,200=>18792,62240=>18792,332=>18793,62241=>18793,211=>18794,62242=>18794,465=>18795,62243=>18795,210=>18796,62244=>18796,62245=>18797,7870=>18798,62246=>18798,62247=>18799,7872=>18800,62248=>18800,202=>18801,62249=>18801,257=>18802,62250=>18802,225=>18803,62251=>18803,462=>18804,62252=>18804,224=>18805,62253=>18805,593=>18806,62254=>18806,275=>18807,62255=>18807,233=>18808,62256=>18808,283=>18809,62257=>18809,232=>18810,62258=>18810,299=>18811,62259=>18811,237=>18812,62260=>18812,464=>18813,62261=>18813,236=>18814,62262=>18814,333=>18815,62263=>18815,243=>18816,62264=>18816,466=>18817,62265=>18817,242=>18818,62266=>18818,363=>18819,62267=>18819,250=>18820,62268=>18820,468=>18821,62269=>18821,249=>18822,62270=>18822,470=>18823,62271=>18823,472=>18824,62272=>18824,474=>18825,62273=>18825,476=>18826,62274=>18826,252=>18827,62275=>18827,62276=>18828,7871=>18829,62277=>18829,62278=>18830,7873=>18831,62279=>18831,234=>18832,62280=>18832,609=>18833,62281=>18833,643=>18834,63551=>18834,592=>18835,63552=>18835,603=>18836,63553=>18836,596=>18837,63554=>18837,629=>18838,63555=>18838,339=>18839,63556=>18839,248=>18840,63557=>18840,331=>18841,63558=>18841,650=>18842,63559=>18842,618=>18843,63560=>18843,9178=>18844,62282=>18844,9179=>18845,62283=>18845,11933=>18846,63530=>18846,11974=>18847,63539=>18847,12003=>18848,63547=>18848,20539=>18849,28158=>18850,171123=>18851,62841=>18851,40870=>18852,62842=>18852,15817=>18853,62843=>18853,34959=>18854,62845=>18855,147790=>18855,28791=>18856,23797=>18857,19232=>18858,62848=>18858,152013=>18859,62849=>18859,13657=>18860,62850=>18860,154928=>18861,62851=>18861,24866=>18862,62853=>18863,166450=>18863,36775=>18864,37366=>18865,29073=>18866,26393=>18867,29626=>18868,144001=>18869,62859=>18869,172295=>18870,62860=>18870,15499=>18871,62861=>18871,137600=>18872,62862=>18872,19216=>18873,62863=>18873,30948=>18874,29698=>18875,20910=>18876,165647=>18877,62867=>18877,16393=>18878,62868=>18878,27235=>18879,172730=>18880,62870=>18880,16931=>18881,62871=>18881,34319=>18882,31274=>18883,170311=>18884,62875=>18884,166634=>18885,62876=>18885,38741=>18886,28749=>18887,21284=>18888,62880=>18889,139390=>18889,37876=>18890,30425=>18891,166371=>18892,62883=>18892,40871=>18893,62884=>18893,30685=>18894,20131=>18895,20464=>18896,20668=>18897,20015=>18898,20247=>18899,40872=>18900,62891=>18900,21556=>18901,32139=>18902,22674=>18903,22736=>18904,62896=>18905,138678=>18905,24210=>18906,24217=>18907,24514=>18908,62900=>18909,141074=>18909,25995=>18910,62902=>18911,144377=>18911,26905=>18912,27203=>18913,62905=>18914,146531=>18914,27903=>18915,29184=>18916,62909=>18917,148741=>18917,29580=>18918,16091=>18919,62911=>18919,150035=>18920,62912=>18920,23317=>18921,29881=>18922,35715=>18923,154788=>18924,62916=>18924,153237=>18925,62917=>18925,31379=>18926,31724=>18927,31939=>18928,32364=>18929,33528=>18930,34199=>18931,40873=>18932,62924=>18932,34960=>18933,40874=>18934,62926=>18934,36537=>18935,40875=>18936,62928=>18936,36815=>18937,34143=>18938,39392=>18939,37409=>18940,40876=>18941,62933=>18941,167353=>18942,62934=>18942,136255=>18943,62935=>18943,16497=>18944,62936=>18944,17058=>18945,62937=>18945,23066=>18946,39016=>18947,26475=>18948,17014=>18949,62944=>18949,22333=>18950,34262=>18951,62948=>18952,149883=>18952,33471=>18953,160013=>18954,62950=>18954,19585=>18955,62951=>18955,159092=>18956,62952=>18956,23931=>18957,158485=>18958,62954=>18958,159678=>18959,62955=>18959,40877=>18960,62956=>18960,40878=>18961,62957=>18961,23446=>18962,40879=>18963,62959=>18963,32347=>18964,17392=>18965,19506=>18966,17923=>18967,17830=>18968,17784=>18969,160359=>18970,19831=>18971,17843=>18972,162993=>18973,19682=>18974,163013=>18975,15253=>18976,18230=>18977,18244=>18978,19527=>18979,19520=>18980,148159=>18981,144919=>18982,160594=>18983,159371=>18984,159954=>18985,19543=>18986,172881=>18987,18255=>18988,17882=>18989,19589=>18990,162924=>18991,19719=>18992,19108=>18993,18081=>18994,158499=>18995,29221=>18996,154196=>18997,137827=>18998,146950=>18999,147297=>19000,26189=>19001,22267=>19002,32149=>19003,22813=>19004,166841=>19005,15860=>19006,38708=>19007,162799=>19008,23515=>19009,138590=>19010,23204=>19011,13861=>19012,171696=>19013,23249=>19014,23479=>19015,23804=>19016,26478=>19017,34195=>19018,170309=>19019,29793=>19020,29853=>19021,133743=>19022,26343=>19023,28247=>19024,31178=>19025,15752=>19026,17603=>19027,143958=>19028,141206=>19029,17306=>19030,17718=>19031,23765=>19032,146202=>19033,35577=>19034,23672=>19035,15634=>19036,144721=>19037,23928=>19038,40882=>19039,29015=>19040,17752=>19041,147692=>19042,138787=>19043,19575=>19044,14712=>19045,13386=>19046,131492=>19047,158785=>19048,35532=>19049,20404=>19050,131641=>19051,22975=>19052,33132=>19053,38998=>19054,170234=>19055,24379=>19056,134047=>19057,139713=>19058,166253=>19059,16642=>19060,18107=>19061,168057=>19062,16135=>19063,40883=>19064,172469=>19065,16632=>19066,14294=>19067,18167=>19068,158790=>19069,16764=>19070,165554=>19071,160767=>19072,17773=>19073,14548=>19074,152730=>19075,17761=>19076,17691=>19077,19849=>19078,19579=>19079,19830=>19080,17898=>19081,16328=>19082,150287=>19083,13921=>19084,17630=>19085,17597=>19086,16877=>19087); +// --- EOF --- diff --git a/tcpdf/fonts/uni2cid_ag15.php b/tcpdf/fonts/uni2cid_ag15.php new file mode 100644 index 0000000..3fc6198 --- /dev/null +++ b/tcpdf/fonts/uni2cid_ag15.php @@ -0,0 +1,6 @@ +<?php +// unicode to cid conversion table is from +// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ +// cid2code.txt in ag15.tar.Z +$cidinfo['uni2cid'] = array(32=>1,33=>2,34=>3,35=>4,36=>5,37=>6,38=>7,39=>8,40=>9,41=>10,42=>11,43=>12,44=>13,45=>14,46=>15,47=>16,48=>17,49=>18,50=>19,51=>20,52=>21,53=>22,54=>23,55=>24,56=>25,57=>26,58=>27,59=>28,60=>29,61=>30,62=>31,63=>32,64=>33,65=>34,66=>35,67=>36,68=>37,69=>38,70=>39,71=>40,72=>41,73=>42,74=>43,75=>44,76=>45,77=>46,78=>47,79=>48,80=>49,81=>50,82=>51,83=>52,84=>53,85=>54,86=>55,87=>56,88=>57,89=>58,90=>59,91=>60,92=>61,93=>62,94=>63,95=>64,96=>65,97=>66,98=>67,99=>68,100=>69,101=>70,102=>71,103=>72,104=>73,105=>74,106=>75,107=>76,108=>77,109=>78,110=>79,111=>80,112=>81,113=>82,114=>83,115=>84,116=>85,117=>86,118=>87,119=>88,120=>89,121=>90,122=>91,123=>92,124=>93,125=>94,126=>95,12288=>96,12289=>97,12290=>98,183=>99,12539=>99,713=>100,711=>101,168=>102,12291=>103,12293=>104,8212=>105,65374=>106,8214=>107,8230=>108,8943=>108,8216=>109,8217=>110,8220=>111,8221=>112,12308=>113,12309=>114,12296=>115,12297=>116,12298=>117,12299=>118,12300=>119,12301=>120,12302=>121,12303=>122,12310=>123,12311=>124,12304=>125,12305=>126,177=>127,215=>128,247=>129,8758=>130,8743=>131,8744=>132,8721=>133,8719=>134,8746=>135,8745=>136,8712=>137,8759=>138,8730=>139,8869=>140,8741=>141,8736=>142,8978=>143,8857=>144,8747=>145,8750=>146,8801=>147,8780=>148,8776=>149,8765=>150,8733=>151,8800=>152,8814=>153,8815=>154,8804=>155,8805=>156,8734=>157,8757=>158,8756=>159,9794=>160,9792=>161,176=>162,8242=>163,8243=>164,8451=>165,65284=>166,164=>167,65504=>168,65505=>169,8240=>170,167=>171,8470=>172,9734=>173,9733=>174,9675=>175,9679=>176,9678=>177,9671=>178,9670=>179,9633=>180,9632=>181,9651=>182,9650=>183,8251=>184,8594=>185,8592=>186,8593=>187,8595=>188,12307=>189,9352=>190,9353=>191,9354=>192,9355=>193,9356=>194,9357=>195,9358=>196,9359=>197,9360=>198,9361=>199,9362=>200,9363=>201,9364=>202,9365=>203,9366=>204,9367=>205,9368=>206,9369=>207,9370=>208,9371=>209,9332=>210,9333=>211,9334=>212,9335=>213,9336=>214,9337=>215,9338=>216,9339=>217,9340=>218,9341=>219,9342=>220,9343=>221,9344=>222,9345=>223,9346=>224,9347=>225,9348=>226,9349=>227,9350=>228,9351=>229,9312=>230,9313=>231,9314=>232,9315=>233,9316=>234,9317=>235,9318=>236,9319=>237,9320=>238,9321=>239,12832=>240,12833=>241,12834=>242,12835=>243,12836=>244,12837=>245,12838=>246,12839=>247,12840=>248,12841=>249,8544=>250,8545=>251,8546=>252,8547=>253,8548=>254,8549=>255,8550=>256,8551=>257,8552=>258,8553=>259,8554=>260,8555=>261,65281=>262,65282=>263,65283=>264,65509=>265,65285=>266,65286=>267,65287=>268,65288=>269,65289=>270,65290=>271,65291=>272,65292=>273,65293=>274,65294=>275,65295=>276,65296=>277,65297=>278,65298=>279,65299=>280,65300=>281,65301=>282,65302=>283,65303=>284,65304=>285,65305=>286,65306=>287,65307=>288,65308=>289,65309=>290,65310=>291,65311=>292,65312=>293,65313=>294,65314=>295,65315=>296,65316=>297,65317=>298,65318=>299,65319=>300,65320=>301,65321=>302,65322=>303,65323=>304,65324=>305,65325=>306,65326=>307,65327=>308,65328=>309,65329=>310,65330=>311,65331=>312,65332=>313,65333=>314,65334=>315,65335=>316,65336=>317,65337=>318,65338=>319,65339=>320,65340=>321,65341=>322,65342=>323,65343=>324,65344=>325,65345=>326,65346=>327,65347=>328,65348=>329,65349=>330,65350=>331,65351=>332,65352=>333,65353=>334,65354=>335,65355=>336,65356=>337,65357=>338,65358=>339,65359=>340,65360=>341,65361=>342,65362=>343,65363=>344,65364=>345,65365=>346,65366=>347,65367=>348,65368=>349,65369=>350,65370=>351,65371=>352,65372=>353,65373=>354,65507=>355,12353=>356,12354=>357,12355=>358,12356=>359,12357=>360,12358=>361,12359=>362,12360=>363,12361=>364,12362=>365,12363=>366,12364=>367,12365=>368,12366=>369,12367=>370,12368=>371,12369=>372,12370=>373,12371=>374,12372=>375,12373=>376,12374=>377,12375=>378,12376=>379,12377=>380,12378=>381,12379=>382,12380=>383,12381=>384,12382=>385,12383=>386,12384=>387,12385=>388,12386=>389,12387=>390,12388=>391,12389=>392,12390=>393,12391=>394,12392=>395,12393=>396,12394=>397,12395=>398,12396=>399,12397=>400,12398=>401,12399=>402,12400=>403,12401=>404,12402=>405,12403=>406,12404=>407,12405=>408,12406=>409,12407=>410,12408=>411,12409=>412,12410=>413,12411=>414,12412=>415,12413=>416,12414=>417,12415=>418,12416=>419,12417=>420,12418=>421,12419=>422,12420=>423,12421=>424,12422=>425,12423=>426,12424=>427,12425=>428,12426=>429,12427=>430,12428=>431,12429=>432,12430=>433,12431=>434,12432=>435,12433=>436,12434=>437,12435=>438,12449=>439,12450=>440,12451=>441,12452=>442,12453=>443,12454=>444,12455=>445,12456=>446,12457=>447,12458=>448,12459=>449,12460=>450,12461=>451,12462=>452,12463=>453,12464=>454,12465=>455,12466=>456,12467=>457,12468=>458,12469=>459,12470=>460,12471=>461,12472=>462,12473=>463,12474=>464,12475=>465,12476=>466,12477=>467,12478=>468,12479=>469,12480=>470,12481=>471,12482=>472,12483=>473,12484=>474,12485=>475,12486=>476,12487=>477,12488=>478,12489=>479,12490=>480,12491=>481,12492=>482,12493=>483,12494=>484,12495=>485,12496=>486,12497=>487,12498=>488,12499=>489,12500=>490,12501=>491,12502=>492,12503=>493,12504=>494,12505=>495,12506=>496,12507=>497,12508=>498,12509=>499,12510=>500,12511=>501,12512=>502,12513=>503,12514=>504,12515=>505,12516=>506,12517=>507,12518=>508,12519=>509,12520=>510,12521=>511,12522=>512,12523=>513,12524=>514,12525=>515,12526=>516,12527=>517,12528=>518,12529=>519,12530=>520,12531=>521,12532=>522,12533=>523,12534=>524,913=>525,914=>526,915=>527,916=>528,917=>529,918=>530,919=>531,920=>532,921=>533,922=>534,923=>535,924=>536,925=>537,926=>538,927=>539,928=>540,929=>541,931=>542,932=>543,933=>544,934=>545,935=>546,936=>547,937=>548,945=>549,946=>550,947=>551,948=>552,949=>553,950=>554,951=>555,952=>556,953=>557,954=>558,955=>559,956=>560,957=>561,958=>562,959=>563,960=>564,961=>565,963=>566,964=>567,965=>568,966=>569,967=>570,968=>571,969=>572,65040=>573,59277=>573,65042=>574,59278=>574,65041=>575,59279=>575,59280=>576,65043=>576,59281=>577,65044=>577,59282=>578,65045=>578,59283=>579,65046=>579,65077=>580,65078=>581,65081=>582,65082=>583,65087=>584,65088=>585,65085=>586,65086=>587,65089=>588,65090=>589,65091=>590,65092=>591,59284=>592,65047=>592,59285=>593,65048=>593,65083=>594,65084=>595,65079=>596,65080=>597,65073=>598,8285=>599,59286=>599,65049=>599,65075=>600,65076=>601,1040=>602,1041=>603,1042=>604,1043=>605,1044=>606,1045=>607,1025=>608,1046=>609,1047=>610,1048=>611,1049=>612,1050=>613,1051=>614,1052=>615,1053=>616,1054=>617,1055=>618,1056=>619,1057=>620,1058=>621,1059=>622,1060=>623,1061=>624,1062=>625,1063=>626,1064=>627,1065=>628,1066=>629,1067=>630,1068=>631,1069=>632,1070=>633,1071=>634,1072=>635,1073=>636,1074=>637,1075=>638,1076=>639,1077=>640,1105=>641,1078=>642,1079=>643,1080=>644,1081=>645,1082=>646,1083=>647,1084=>648,1085=>649,1086=>650,1087=>651,1088=>652,1089=>653,1090=>654,1091=>655,1092=>656,1093=>657,1094=>658,1095=>659,1096=>660,1097=>661,1098=>662,1099=>663,1100=>664,1101=>665,1102=>666,1103=>667,257=>668,225=>669,462=>670,224=>671,275=>672,233=>673,283=>674,232=>675,299=>676,237=>677,464=>678,236=>679,333=>680,243=>681,466=>682,242=>683,363=>684,250=>685,468=>686,249=>687,470=>688,472=>689,474=>690,476=>691,252=>692,234=>693,593=>694,7743=>695,59335=>695,324=>696,328=>697,505=>698,59336=>698,609=>699,12549=>700,12550=>701,12551=>702,12552=>703,12553=>704,12554=>705,12555=>706,12556=>707,12557=>708,12558=>709,12559=>710,12560=>711,12561=>712,12562=>713,12563=>714,12564=>715,12565=>716,12566=>717,12567=>718,12568=>719,12569=>720,12570=>721,12571=>722,12572=>723,12573=>724,12574=>725,12575=>726,12576=>727,12577=>728,12578=>729,12579=>730,12580=>731,12581=>732,12582=>733,12583=>734,12584=>735,12585=>736,9472=>738,9473=>739,9474=>740,9475=>741,9476=>742,9477=>743,9478=>744,9479=>745,9480=>746,9481=>747,9482=>748,9483=>749,9484=>750,9485=>751,9486=>752,9487=>753,9488=>754,9489=>755,9490=>756,9491=>757,9492=>758,9493=>759,9494=>760,9495=>761,9496=>762,9497=>763,9498=>764,9499=>765,9500=>766,9501=>767,9502=>768,9503=>769,9504=>770,9505=>771,9506=>772,9507=>773,9508=>774,9509=>775,9510=>776,9511=>777,9512=>778,9513=>779,9514=>780,9515=>781,9516=>782,9517=>783,9518=>784,9519=>785,9520=>786,9521=>787,9522=>788,9523=>789,9524=>790,9525=>791,9526=>792,9527=>793,9528=>794,9529=>795,9530=>796,9531=>797,9532=>798,9533=>799,9534=>800,9535=>801,9536=>802,9537=>803,9538=>804,9539=>805,9540=>806,9541=>807,9542=>808,9543=>809,9544=>810,9545=>811,9546=>812,9547=>813,21834=>940,38463=>941,22467=>942,25384=>943,21710=>944,21769=>945,21696=>946,30353=>947,30284=>948,34108=>949,30702=>950,33406=>951,30861=>952,29233=>953,38552=>954,38797=>955,27688=>956,23433=>957,20474=>958,25353=>959,26263=>960,23736=>961,33018=>962,26696=>963,32942=>964,26114=>965,30414=>966,20985=>967,25942=>968,29100=>969,32753=>970,34948=>971,20658=>972,22885=>973,25034=>974,28595=>975,33453=>976,25420=>977,25170=>978,21485=>979,21543=>980,31494=>981,12043=>982,20843=>982,30116=>983,24052=>984,25300=>985,36299=>986,38774=>987,25226=>988,32793=>989,22365=>990,38712=>991,32610=>992,29240=>993,12137=>994,30333=>994,26575=>995,30334=>996,25670=>997,20336=>998,36133=>999,25308=>1000,31255=>1001,26001=>1002,29677=>1003,25644=>1004,25203=>1005,33324=>1006,39041=>1007,26495=>1008,29256=>1009,25198=>1010,25292=>1011,20276=>1012,29923=>1013,21322=>1014,21150=>1015,32458=>1016,37030=>1017,24110=>1018,26758=>1019,27036=>1020,33152=>1021,32465=>1022,26834=>1023,30917=>1024,34444=>1025,38225=>1026,20621=>1027,35876=>1028,33502=>1029,32990=>1030,21253=>1031,35090=>1032,21093=>1033,34180=>1034,38649=>1035,20445=>1036,22561=>1037,39281=>1038,23453=>1039,25265=>1040,25253=>1041,26292=>1042,35961=>1043,40077=>1044,29190=>1045,26479=>1046,30865=>1047,24754=>1048,21329=>1049,21271=>1050,36744=>1051,32972=>1052,36125=>1053,38049=>1054,20493=>1055,29384=>1056,22791=>1057,24811=>1058,28953=>1059,34987=>1060,22868=>1061,33519=>1062,26412=>1063,31528=>1064,23849=>1065,32503=>1066,29997=>1067,27893=>1068,36454=>1069,36856=>1070,36924=>1071,12240=>1072,40763=>1072,12112=>1073,27604=>1073,37145=>1074,31508=>1075,24444=>1076,30887=>1077,34006=>1078,34109=>1079,27605=>1080,27609=>1081,27606=>1082,24065=>1083,24199=>1084,30201=>1085,38381=>1086,25949=>1087,24330=>1088,24517=>1089,36767=>1090,22721=>1091,33218=>1092,36991=>1093,38491=>1094,38829=>1095,36793=>1096,32534=>1097,36140=>1098,25153=>1099,20415=>1100,21464=>1101,21342=>1102,36776=>1103,36777=>1104,36779=>1105,36941=>1106,26631=>1107,24426=>1108,33176=>1109,34920=>1110,40150=>1111,24971=>1112,21035=>1113,30250=>1114,24428=>1115,25996=>1116,28626=>1117,28392=>1118,23486=>1119,25672=>1120,20853=>1121,20912=>1122,26564=>1123,19993=>1124,31177=>1125,39292=>1126,28851=>1127,30149=>1128,24182=>1129,29627=>1130,33760=>1131,25773=>1132,25320=>1133,38069=>1134,27874=>1135,21338=>1136,21187=>1137,25615=>1138,38082=>1139,31636=>1140,20271=>1141,24091=>1142,33334=>1143,33046=>1144,33162=>1145,28196=>1146,27850=>1147,39539=>1148,25429=>1149,12056=>1150,21340=>1150,21754=>1151,34917=>1152,22496=>1153,19981=>1154,24067=>1155,27493=>1156,31807=>1157,37096=>1158,24598=>1159,25830=>1160,29468=>1161,35009=>1162,26448=>1163,25165=>1164,36130=>1165,30572=>1166,36393=>1167,37319=>1168,24425=>1169,33756=>1170,34081=>1171,39184=>1172,21442=>1173,34453=>1174,27531=>1175,24813=>1176,24808=>1177,28799=>1178,33485=>1179,33329=>1180,20179=>1181,27815=>1182,34255=>1183,25805=>1184,31961=>1185,27133=>1186,26361=>1187,33609=>1188,21397=>1189,31574=>1190,20391=>1191,20876=>1192,27979=>1193,23618=>1194,36461=>1195,25554=>1196,21449=>1197,33580=>1198,33590=>1199,26597=>1200,30900=>1201,25661=>1202,23519=>1203,23700=>1204,24046=>1205,35815=>1206,25286=>1207,26612=>1208,35962=>1209,25600=>1210,25530=>1211,34633=>1212,39307=>1213,35863=>1214,32544=>1215,38130=>1216,20135=>1217,38416=>1218,39076=>1219,26124=>1220,29462=>1221,22330=>1222,23581=>1223,24120=>1224,38271=>1225,20607=>1226,32928=>1227,12058=>1228,21378=>1228,25950=>1229,30021=>1230,21809=>1231,20513=>1232,36229=>1233,25220=>1234,38046=>1235,26397=>1236,22066=>1237,28526=>1238,24034=>1239,21557=>1240,28818=>1241,36710=>1242,25199=>1243,25764=>1244,25507=>1245,24443=>1246,28552=>1247,37108=>1248,12162=>1249,33251=>1249,12192=>1250,36784=>1250,23576=>1251,26216=>1252,24561=>1253,27785=>1254,38472=>1255,36225=>1256,34924=>1257,25745=>1258,31216=>1259,22478=>1260,27225=>1261,25104=>1262,21576=>1263,20056=>1264,31243=>1265,24809=>1266,28548=>1267,35802=>1268,25215=>1269,36894=>1270,39563=>1271,31204=>1272,21507=>1273,30196=>1274,25345=>1275,21273=>1276,27744=>1277,36831=>1278,24347=>1279,39536=>1280,32827=>1281,40831=>1282,20360=>1283,23610=>1284,12186=>1285,36196=>1285,32709=>1286,26021=>1287,28861=>1288,20805=>1289,20914=>1290,12173=>1291,34411=>1291,23815=>1292,23456=>1293,25277=>1294,37228=>1295,30068=>1296,36364=>1297,31264=>1298,24833=>1299,31609=>1300,20167=>1301,32504=>1302,30597=>1303,19985=>1304,33261=>1305,21021=>1306,20986=>1307,27249=>1308,21416=>1309,36487=>1310,38148=>1311,38607=>1312,28353=>1313,38500=>1314,26970=>1315,30784=>1316,20648=>1317,30679=>1318,25616=>1319,35302=>1320,22788=>1321,25571=>1322,24029=>1323,31359=>1324,26941=>1325,20256=>1326,33337=>1327,21912=>1328,20018=>1329,30126=>1330,31383=>1331,24162=>1332,24202=>1333,38383=>1334,21019=>1335,21561=>1336,28810=>1337,25462=>1338,38180=>1339,22402=>1340,26149=>1341,26943=>1342,37255=>1343,21767=>1344,28147=>1345,32431=>1346,34850=>1347,25139=>1348,32496=>1349,30133=>1350,33576=>1351,30913=>1352,38604=>1353,36766=>1354,24904=>1355,29943=>1356,35789=>1357,27492=>1358,21050=>1359,36176=>1360,27425=>1361,32874=>1362,33905=>1363,22257=>1364,21254=>1365,20174=>1366,19995=>1367,20945=>1368,31895=>1369,37259=>1370,31751=>1371,20419=>1372,36479=>1373,31713=>1374,31388=>1375,25703=>1376,23828=>1377,20652=>1378,33030=>1379,30209=>1380,31929=>1381,28140=>1382,32736=>1383,26449=>1384,23384=>1385,12072=>1386,23544=>1386,30923=>1387,25774=>1388,25619=>1389,25514=>1390,25387=>1391,38169=>1392,25645=>1393,36798=>1394,31572=>1395,30249=>1396,25171=>1397,12068=>1398,22823=>1398,21574=>1399,12109=>1400,27513=>1400,20643=>1401,25140=>1402,24102=>1403,27526=>1404,20195=>1405,36151=>1406,34955=>1407,24453=>1408,36910=>1409,24608=>1410,32829=>1411,25285=>1412,20025=>1413,21333=>1414,37112=>1415,25528=>1416,32966=>1417,26086=>1418,27694=>1419,20294=>1420,24814=>1421,28129=>1422,35806=>1423,24377=>1424,34507=>1425,24403=>1426,25377=>1427,20826=>1428,33633=>1429,26723=>1430,12049=>1431,20992=>1431,25443=>1432,36424=>1433,20498=>1434,23707=>1435,31095=>1436,23548=>1437,21040=>1438,31291=>1439,24764=>1440,36947=>1441,30423=>1442,24503=>1443,24471=>1444,30340=>1445,36460=>1446,28783=>1447,30331=>1448,31561=>1449,30634=>1450,20979=>1451,37011=>1452,22564=>1453,20302=>1454,28404=>1455,36842=>1456,25932=>1457,31515=>1458,29380=>1459,28068=>1460,32735=>1461,23265=>1462,25269=>1463,24213=>1464,22320=>1465,33922=>1466,31532=>1467,24093=>1468,24351=>1469,36882=>1470,32532=>1471,39072=>1472,25474=>1473,28359=>1474,30872=>1475,28857=>1476,20856=>1477,38747=>1478,22443=>1479,30005=>1480,20291=>1481,30008=>1482,24215=>1483,24806=>1484,22880=>1485,28096=>1486,27583=>1487,30857=>1488,21500=>1489,38613=>1490,20939=>1491,20993=>1492,25481=>1493,21514=>1494,38035=>1495,35843=>1496,36300=>1497,29241=>1498,30879=>1499,34678=>1500,36845=>1501,35853=>1502,21472=>1503,19969=>1504,30447=>1505,21486=>1506,38025=>1507,39030=>1508,12237=>1509,40718=>1509,38189=>1510,23450=>1511,35746=>1512,20002=>1513,19996=>1514,20908=>1515,33891=>1516,25026=>1517,21160=>1518,26635=>1519,20375=>1520,24683=>1521,20923=>1522,27934=>1523,20828=>1524,25238=>1525,12099=>1526,26007=>1526,38497=>1527,12182=>1528,35910=>1528,36887=>1529,30168=>1530,37117=>1531,30563=>1532,27602=>1533,29322=>1534,29420=>1535,35835=>1536,22581=>1537,30585=>1538,36172=>1539,26460=>1540,38208=>1541,32922=>1542,24230=>1543,28193=>1544,22930=>1545,31471=>1546,30701=>1547,38203=>1548,27573=>1549,26029=>1550,32526=>1551,22534=>1552,20817=>1553,38431=>1554,23545=>1555,22697=>1556,21544=>1557,36466=>1558,25958=>1559,39039=>1560,22244=>1561,38045=>1562,30462=>1563,36929=>1564,25479=>1565,21702=>1566,22810=>1567,22842=>1568,22427=>1569,36530=>1570,26421=>1571,36346=>1572,33333=>1573,21057=>1574,24816=>1575,22549=>1576,34558=>1577,23784=>1578,40517=>1579,20420=>1580,39069=>1581,35769=>1582,23077=>1583,24694=>1584,21380=>1585,25212=>1586,36943=>1587,37122=>1588,39295=>1589,24681=>1590,12157=>1591,32780=>1591,12041=>1592,20799=>1592,12159=>1593,32819=>1593,23572=>1594,39285=>1595,27953=>1596,12038=>1597,20108=>1597,36144=>1598,21457=>1599,32602=>1600,31567=>1601,20240=>1602,20047=>1603,38400=>1604,27861=>1605,29648=>1606,34281=>1607,24070=>1608,30058=>1609,32763=>1610,27146=>1611,30718=>1612,38034=>1613,32321=>1614,20961=>1615,28902=>1616,21453=>1617,36820=>1618,33539=>1619,36137=>1620,29359=>1621,39277=>1622,27867=>1623,22346=>1624,33459=>1625,12101=>1626,26041=>1626,32938=>1627,25151=>1628,38450=>1629,22952=>1630,20223=>1631,35775=>1632,32442=>1633,25918=>1634,33778=>1635,12206=>1636,38750=>1636,21857=>1637,39134=>1638,32933=>1639,21290=>1640,35837=>1641,21536=>1642,32954=>1643,24223=>1644,27832=>1645,36153=>1646,33452=>1647,37210=>1648,21545=>1649,27675=>1650,20998=>1651,32439=>1652,22367=>1653,28954=>1654,27774=>1655,31881=>1656,22859=>1657,20221=>1658,24575=>1659,24868=>1660,31914=>1661,20016=>1662,23553=>1663,26539=>1664,34562=>1665,23792=>1666,38155=>1667,39118=>1668,30127=>1669,28925=>1670,36898=>1671,20911=>1672,32541=>1673,35773=>1674,22857=>1675,20964=>1676,20315=>1677,21542=>1678,22827=>1679,25975=>1680,32932=>1681,23413=>1682,25206=>1683,25282=>1684,36752=>1685,24133=>1686,27679=>1687,31526=>1688,20239=>1689,20440=>1690,26381=>1691,28014=>1692,28074=>1693,31119=>1694,34993=>1695,24343=>1696,29995=>1697,25242=>1698,36741=>1699,20463=>1700,37340=>1701,26023=>1702,33071=>1703,33105=>1704,24220=>1705,33104=>1706,36212=>1707,21103=>1708,35206=>1709,36171=>1710,22797=>1711,20613=>1712,20184=>1713,12201=>1714,38428=>1714,12119=>1715,29238=>1715,33145=>1716,36127=>1717,23500=>1718,35747=>1719,38468=>1720,22919=>1721,32538=>1722,21648=>1723,22134=>1724,22030=>1725,35813=>1726,25913=>1727,27010=>1728,38041=>1729,30422=>1730,28297=>1731,12082=>1732,24178=>1732,12130=>1733,29976=>1733,26438=>1734,26577=>1735,31487=>1736,32925=>1737,36214=>1738,24863=>1739,31174=>1740,25954=>1741,36195=>1742,20872=>1743,21018=>1744,38050=>1745,32568=>1746,32923=>1747,32434=>1748,23703=>1749,28207=>1750,26464=>1751,31705=>1752,30347=>1753,12220=>1754,39640=>1754,33167=>1755,32660=>1756,31957=>1757,25630=>1758,38224=>1759,31295=>1760,21578=>1761,21733=>1762,27468=>1763,25601=>1764,12093=>1765,25096=>1765,40509=>1766,33011=>1767,30105=>1768,21106=>1769,12208=>1770,38761=>1770,33883=>1771,26684=>1772,34532=>1773,38401=>1774,38548=>1775,38124=>1776,20010=>1777,21508=>1778,32473=>1779,26681=>1780,36319=>1781,32789=>1782,26356=>1783,24218=>1784,32697=>1785,22466=>1786,32831=>1787,26775=>1788,12079=>1789,24037=>1789,25915=>1790,21151=>1791,24685=>1792,40858=>1793,20379=>1794,36524=>1795,20844=>1796,23467=>1797,12088=>1798,24339=>1798,24041=>1799,27742=>1800,25329=>1801,36129=>1802,20849=>1803,38057=>1804,21246=>1805,27807=>1806,33503=>1807,29399=>1808,22434=>1809,26500=>1810,36141=>1811,22815=>1812,36764=>1813,33735=>1814,21653=>1815,31629=>1816,20272=>1817,27837=>1818,23396=>1819,22993=>1820,12238=>1821,40723=>1821,21476=>1822,34506=>1823,12219=>1824,39592=>1824,12181=>1825,35895=>1825,32929=>1826,25925=>1827,39038=>1828,22266=>1829,38599=>1830,21038=>1831,12128=>1832,29916=>1832,21072=>1833,23521=>1834,25346=>1835,35074=>1836,20054=>1837,25296=>1838,24618=>1839,26874=>1840,20851=>1841,23448=>1842,20896=>1843,35266=>1844,31649=>1845,39302=>1846,32592=>1847,24815=>1848,28748=>1849,36143=>1850,20809=>1851,12084=>1852,24191=>1852,36891=>1853,29808=>1854,35268=>1855,22317=>1856,30789=>1857,24402=>1858,40863=>1859,38394=>1860,36712=>1861,12225=>1862,39740=>1862,35809=>1863,30328=>1864,26690=>1865,26588=>1866,36330=>1867,36149=>1868,21053=>1869,36746=>1870,28378=>1871,26829=>1872,38149=>1873,37101=>1874,22269=>1875,26524=>1876,35065=>1877,36807=>1878,21704=>1879,39608=>1880,23401=>1881,28023=>1882,27686=>1883,20133=>1884,23475=>1885,39559=>1886,37219=>1887,25000=>1888,37039=>1889,38889=>1890,21547=>1891,28085=>1892,23506=>1893,20989=>1894,21898=>1895,32597=>1896,32752=>1897,25788=>1898,25421=>1899,26097=>1900,25022=>1901,24717=>1902,28938=>1903,27735=>1904,27721=>1905,22831=>1906,26477=>1907,33322=>1908,22741=>1909,22158=>1910,35946=>1911,27627=>1912,37085=>1913,22909=>1914,32791=>1915,21495=>1916,28009=>1917,21621=>1918,21917=>1919,33655=>1920,33743=>1921,26680=>1922,12146=>1923,31166=>1923,21644=>1924,20309=>1925,21512=>1926,30418=>1927,35977=>1928,38402=>1929,27827=>1930,28088=>1931,36203=>1932,35088=>1933,40548=>1934,36154=>1935,22079=>1936,12234=>1937,40657=>1937,30165=>1938,24456=>1939,29408=>1940,24680=>1941,21756=>1942,20136=>1943,27178=>1944,34913=>1945,24658=>1946,36720=>1947,21700=>1948,28888=>1949,34425=>1950,40511=>1951,27946=>1952,23439=>1953,24344=>1954,32418=>1955,21897=>1956,20399=>1957,29492=>1958,21564=>1959,21402=>1960,20505=>1961,21518=>1962,21628=>1963,20046=>1964,24573=>1965,29786=>1966,22774=>1967,33899=>1968,32993=>1969,34676=>1970,29392=>1971,31946=>1972,28246=>1973,24359=>1974,34382=>1975,21804=>1976,25252=>1977,20114=>1978,27818=>1979,25143=>1980,33457=>1981,21719=>1982,21326=>1983,29502=>1984,28369=>1985,30011=>1986,21010=>1987,21270=>1988,35805=>1989,27088=>1990,24458=>1991,24576=>1992,28142=>1993,22351=>1994,27426=>1995,29615=>1996,26707=>1997,36824=>1998,32531=>1999,25442=>2000,24739=>2001,21796=>2002,30186=>2003,35938=>2004,28949=>2005,28067=>2006,23462=>2007,24187=>2008,33618=>2009,24908=>2010,40644=>2011,30970=>2012,34647=>2013,31783=>2014,30343=>2015,20976=>2016,24822=>2017,29004=>2018,26179=>2019,24140=>2020,24653=>2021,35854=>2022,28784=>2023,25381=>2024,36745=>2025,24509=>2026,24674=>2027,34516=>2028,22238=>2029,27585=>2030,24724=>2031,24935=>2032,21321=>2033,24800=>2034,26214=>2035,36159=>2036,31229=>2037,20250=>2038,28905=>2039,27719=>2040,35763=>2041,35826=>2042,32472=>2043,33636=>2044,26127=>2045,23130=>2046,39746=>2047,27985=>2048,28151=>2049,35905=>2050,27963=>2051,20249=>2052,12117=>2053,28779=>2053,33719=>2054,25110=>2055,24785=>2056,38669=>2057,36135=>2058,31096=>2059,20987=>2060,22334=>2061,22522=>2062,26426=>2063,30072=>2064,31293=>2065,31215=>2066,31637=>2067,32908=>2068,39269=>2069,36857=>2070,28608=>2071,35749=>2072,40481=>2073,23020=>2074,32489=>2075,32521=>2076,21513=>2077,26497=>2078,26840=>2079,36753=>2080,31821=>2081,38598=>2082,21450=>2083,24613=>2084,30142=>2085,27762=>2086,21363=>2087,23241=>2088,32423=>2089,25380=>2090,12047=>2091,20960=>2091,33034=>2092,12080=>2093,24049=>2093,34015=>2094,25216=>2095,20864=>2096,23395=>2097,20238=>2098,31085=>2099,21058=>2100,24760=>2101,27982=>2102,23492=>2103,23490=>2104,35745=>2105,35760=>2106,26082=>2107,24524=>2108,38469=>2109,22931=>2110,32487=>2111,32426=>2112,22025=>2113,26551=>2114,22841=>2115,20339=>2116,23478=>2117,21152=>2118,33626=>2119,39050=>2120,36158=>2121,30002=>2122,38078=>2123,20551=>2124,31292=>2125,20215=>2126,26550=>2127,39550=>2128,23233=>2129,27516=>2130,30417=>2131,22362=>2132,23574=>2133,31546=>2134,38388=>2135,29006=>2136,20860=>2137,32937=>2138,33392=>2139,22904=>2140,32516=>2141,33575=>2142,26816=>2143,26604=>2144,30897=>2145,30839=>2146,25315=>2147,25441=>2148,31616=>2149,20461=>2150,21098=>2151,20943=>2152,33616=>2153,27099=>2154,37492=>2155,36341=>2156,36145=>2157,35265=>2158,38190=>2159,31661=>2160,20214=>2161,20581=>2162,33328=>2163,21073=>2164,39279=>2165,28176=>2166,28293=>2167,28071=>2168,24314=>2169,20725=>2170,23004=>2171,23558=>2172,27974=>2173,27743=>2174,30086=>2175,33931=>2176,26728=>2177,22870=>2178,35762=>2179,21280=>2180,37233=>2181,38477=>2182,34121=>2183,26898=>2184,30977=>2185,28966=>2186,33014=>2187,20132=>2188,37066=>2189,27975=>2190,39556=>2191,23047=>2192,22204=>2193,25605=>2194,38128=>2195,30699=>2196,20389=>2197,33050=>2198,29409=>2199,12179=>2200,35282=>2200,39290=>2201,32564=>2202,32478=>2203,21119=>2204,25945=>2205,37237=>2206,36735=>2207,36739=>2208,21483=>2209,31382=>2210,25581=>2211,25509=>2212,30342=>2213,31224=>2214,34903=>2215,38454=>2216,25130=>2217,21163=>2218,33410=>2219,26708=>2220,26480=>2221,25463=>2222,30571=>2223,31469=>2224,27905=>2225,32467=>2226,35299=>2227,22992=>2228,25106=>2229,34249=>2230,33445=>2231,30028=>2232,20511=>2233,20171=>2234,30117=>2235,35819=>2236,23626=>2237,12081=>2238,24062=>2238,31563=>2239,12100=>2240,26020=>2240,12198=>2241,37329=>2241,20170=>2242,27941=>2243,35167=>2244,32039=>2245,38182=>2246,20165=>2247,35880=>2248,36827=>2249,38771=>2250,26187=>2251,31105=>2252,36817=>2253,28908=>2254,28024=>2255,23613=>2256,21170=>2257,33606=>2258,20834=>2259,33550=>2260,30555=>2261,26230=>2262,40120=>2263,20140=>2264,24778=>2265,31934=>2266,31923=>2267,32463=>2268,20117=>2269,35686=>2270,26223=>2271,39048=>2272,38745=>2273,22659=>2274,25964=>2275,38236=>2276,24452=>2277,30153=>2278,38742=>2279,31455=>2280,31454=>2281,20928=>2282,28847=>2283,31384=>2284,25578=>2285,31350=>2286,32416=>2287,29590=>2288,12210=>2289,38893=>2289,20037=>2290,28792=>2291,20061=>2292,37202=>2293,21417=>2294,25937=>2295,26087=>2296,12165=>2297,33276=>2297,33285=>2298,21646=>2299,23601=>2300,30106=>2301,38816=>2302,25304=>2303,29401=>2304,30141=>2305,23621=>2306,39545=>2307,33738=>2308,23616=>2309,21632=>2310,30697=>2311,20030=>2312,27822=>2313,32858=>2314,25298=>2315,25454=>2316,24040=>2317,20855=>2318,36317=>2319,36382=>2320,38191=>2321,20465=>2322,21477=>2323,24807=>2324,28844=>2325,21095=>2326,25424=>2327,40515=>2328,23071=>2329,20518=>2330,30519=>2331,21367=>2332,32482=>2333,25733=>2334,25899=>2335,25225=>2336,25496=>2337,20500=>2338,29237=>2339,35273=>2340,20915=>2341,35776=>2342,32477=>2343,22343=>2344,33740=>2345,38055=>2346,20891=>2347,21531=>2348,23803=>2349,20426=>2350,31459=>2351,27994=>2352,37089=>2353,39567=>2354,21888=>2355,21654=>2356,21345=>2357,21679=>2358,24320=>2359,25577=>2360,26999=>2361,20975=>2362,24936=>2363,21002=>2364,22570=>2365,21208=>2366,22350=>2367,30733=>2368,30475=>2369,24247=>2370,24951=>2371,31968=>2372,25179=>2373,25239=>2374,20130=>2375,28821=>2376,32771=>2377,25335=>2378,28900=>2379,38752=>2380,22391=>2381,33499=>2382,26607=>2383,26869=>2384,30933=>2385,39063=>2386,31185=>2387,22771=>2388,21683=>2389,21487=>2390,28212=>2391,20811=>2392,21051=>2393,23458=>2394,35838=>2395,32943=>2396,21827=>2397,22438=>2398,24691=>2399,22353=>2400,21549=>2401,31354=>2402,24656=>2403,23380=>2404,25511=>2405,25248=>2406,12061=>2407,21475=>2407,25187=>2408,23495=>2409,26543=>2410,21741=>2411,31391=>2412,33510=>2413,37239=>2414,24211=>2415,35044=>2416,22840=>2417,22446=>2418,25358=>2419,36328=>2420,33007=>2421,22359=>2422,31607=>2423,20393=>2424,24555=>2425,23485=>2426,27454=>2427,21281=>2428,31568=>2429,29378=>2430,26694=>2431,30719=>2432,30518=>2433,26103=>2434,20917=>2435,20111=>2436,30420=>2437,23743=>2438,31397=>2439,33909=>2440,22862=>2441,39745=>2442,20608=>2443,39304=>2444,24871=>2445,28291=>2446,22372=>2447,26118=>2448,25414=>2449,22256=>2450,25324=>2451,25193=>2452,24275=>2453,38420=>2454,22403=>2455,25289=>2456,21895=>2457,34593=>2458,33098=>2459,36771=>2460,21862=>2461,33713=>2462,26469=>2463,36182=>2464,34013=>2465,23146=>2466,26639=>2467,25318=>2468,31726=>2469,38417=>2470,20848=>2471,28572=>2472,35888=>2473,25597=>2474,35272=>2475,25042=>2476,32518=>2477,28866=>2478,28389=>2479,29701=>2480,27028=>2481,29436=>2482,24266=>2483,37070=>2484,26391=>2485,28010=>2486,25438=>2487,21171=>2488,29282=>2489,12156=>2490,32769=>2490,20332=>2491,23013=>2492,37226=>2493,28889=>2494,28061=>2495,21202=>2496,20048=>2497,38647=>2498,38253=>2499,34174=>2500,30922=>2501,32047=>2502,20769=>2503,22418=>2504,25794=>2505,32907=>2506,31867=>2507,27882=>2508,26865=>2509,26974=>2510,20919=>2511,21400=>2512,26792=>2513,29313=>2514,40654=>2515,31729=>2516,29432=>2517,31163=>2518,28435=>2519,29702=>2520,26446=>2521,12197=>2522,37324=>2522,40100=>2523,31036=>2524,33673=>2525,33620=>2526,21519=>2527,26647=>2528,20029=>2529,21385=>2530,21169=>2531,30782=>2532,21382=>2533,21033=>2534,20616=>2535,20363=>2536,20432=>2537,30178=>2538,12148=>2539,31435=>2539,31890=>2540,27813=>2541,12202=>2542,38582=>2542,12050=>2543,21147=>2543,29827=>2544,21737=>2545,20457=>2546,32852=>2547,33714=>2548,36830=>2549,38256=>2550,24265=>2551,24604=>2552,28063=>2553,24088=>2554,25947=>2555,33080=>2556,38142=>2557,24651=>2558,28860=>2559,32451=>2560,31918=>2561,20937=>2562,63865=>2562,26753=>2563,31921=>2564,33391=>2565,20004=>2566,36742=>2567,37327=>2568,26238=>2569,20142=>2570,35845=>2571,25769=>2572,32842=>2573,20698=>2574,30103=>2575,29134=>2576,23525=>2577,36797=>2578,28518=>2579,20102=>2580,25730=>2581,38243=>2582,24278=>2583,26009=>2584,21015=>2585,35010=>2586,28872=>2587,21155=>2588,29454=>2589,29747=>2590,26519=>2591,30967=>2592,38678=>2593,20020=>2594,37051=>2595,40158=>2596,28107=>2597,20955=>2598,36161=>2599,21533=>2600,25294=>2601,29618=>2602,33777=>2603,38646=>2604,40836=>2605,38083=>2606,20278=>2607,32666=>2608,20940=>2609,28789=>2610,38517=>2611,23725=>2612,39046=>2613,21478=>2614,20196=>2615,28316=>2616,29705=>2617,27060=>2618,30827=>2619,39311=>2620,30041=>2621,21016=>2622,30244=>2623,27969=>2624,26611=>2625,20845=>2626,40857=>2627,32843=>2628,21657=>2629,31548=>2630,31423=>2631,38534=>2632,22404=>2633,25314=>2634,38471=>2635,27004=>2636,23044=>2637,25602=>2638,31699=>2639,28431=>2640,38475=>2641,33446=>2642,21346=>2643,39045=>2644,24208=>2645,28809=>2646,25523=>2647,21348=>2648,34383=>2649,40065=>2650,40595=>2651,30860=>2652,38706=>2653,36335=>2654,36162=>2655,12229=>2656,40575=>2656,28510=>2657,31108=>2658,24405=>2659,38470=>2660,25134=>2661,39540=>2662,21525=>2663,38109=>2664,20387=>2665,26053=>2666,23653=>2667,23649=>2668,32533=>2669,34385=>2670,27695=>2671,24459=>2672,29575=>2673,28388=>2674,32511=>2675,23782=>2676,25371=>2677,23402=>2678,28390=>2679,21365=>2680,20081=>2681,25504=>2682,30053=>2683,25249=>2684,36718=>2685,20262=>2686,20177=>2687,27814=>2688,32438=>2689,35770=>2690,33821=>2691,34746=>2692,32599=>2693,36923=>2694,38179=>2695,31657=>2696,39585=>2697,35064=>2698,33853=>2699,27931=>2700,39558=>2701,32476=>2702,22920=>2703,12231=>2704,40635=>2704,29595=>2705,30721=>2706,34434=>2707,39532=>2708,39554=>2709,22043=>2710,21527=>2711,22475=>2712,20080=>2713,40614=>2714,21334=>2715,36808=>2716,33033=>2717,30610=>2718,39314=>2719,34542=>2720,28385=>2721,34067=>2722,26364=>2723,24930=>2724,28459=>2725,35881=>2726,33426=>2727,33579=>2728,30450=>2729,27667=>2730,24537=>2731,33725=>2732,29483=>2733,33541=>2734,38170=>2735,12113=>2736,27611=>2736,12141=>2737,30683=>2737,38086=>2738,21359=>2739,33538=>2740,20882=>2741,24125=>2742,35980=>2743,36152=>2744,20040=>2745,29611=>2746,26522=>2747,26757=>2748,37238=>2749,38665=>2750,29028=>2751,27809=>2752,30473=>2753,23186=>2754,38209=>2755,27599=>2756,32654=>2757,26151=>2758,23504=>2759,22969=>2760,23194=>2761,38376=>2762,38391=>2763,20204=>2764,33804=>2765,33945=>2766,27308=>2767,30431=>2768,38192=>2769,29467=>2770,26790=>2771,23391=>2772,30511=>2773,37274=>2774,38753=>2775,31964=>2776,36855=>2777,35868=>2778,24357=>2779,12150=>2780,31859=>2780,31192=>2781,35269=>2782,27852=>2783,34588=>2784,23494=>2785,24130=>2786,26825=>2787,30496=>2788,32501=>2789,20885=>2790,20813=>2791,21193=>2792,23081=>2793,32517=>2794,12207=>2795,38754=>2795,33495=>2796,25551=>2797,30596=>2798,34256=>2799,31186=>2800,28218=>2801,24217=>2802,22937=>2803,34065=>2804,28781=>2805,27665=>2806,25279=>2807,12139=>2808,30399=>2808,25935=>2809,24751=>2810,38397=>2811,26126=>2812,34719=>2813,40483=>2814,38125=>2815,21517=>2816,21629=>2817,35884=>2818,25720=>2819,25721=>2820,34321=>2821,27169=>2822,33180=>2823,30952=>2824,25705=>2825,39764=>2826,25273=>2827,26411=>2828,33707=>2829,22696=>2830,40664=>2831,27819=>2832,28448=>2833,23518=>2834,38476=>2835,35851=>2836,29279=>2837,26576=>2838,25287=>2839,29281=>2840,20137=>2841,22982=>2842,27597=>2843,22675=>2844,26286=>2845,24149=>2846,21215=>2847,24917=>2848,12106=>2849,26408=>2849,12140=>2850,30446=>2850,30566=>2851,29287=>2852,31302=>2853,25343=>2854,21738=>2855,21584=>2856,38048=>2857,37027=>2858,23068=>2859,32435=>2860,27670=>2861,20035=>2862,22902=>2863,32784=>2864,22856=>2865,21335=>2866,30007=>2867,38590=>2868,22218=>2869,25376=>2870,33041=>2871,24700=>2872,38393=>2873,28118=>2874,21602=>2875,39297=>2876,20869=>2877,23273=>2878,33021=>2879,22958=>2880,38675=>2881,20522=>2882,27877=>2883,23612=>2884,25311=>2885,20320=>2886,21311=>2887,33147=>2888,36870=>2889,28346=>2890,34091=>2891,25288=>2892,24180=>2893,30910=>2894,25781=>2895,25467=>2896,24565=>2897,23064=>2898,37247=>2899,40479=>2900,23615=>2901,25423=>2902,32834=>2903,23421=>2904,21870=>2905,38218=>2906,38221=>2907,28037=>2908,24744=>2909,26592=>2910,29406=>2911,20957=>2912,23425=>2913,25319=>2914,27870=>2915,12124=>2916,29275=>2916,25197=>2917,38062=>2918,32445=>2919,33043=>2920,27987=>2921,20892=>2922,24324=>2923,22900=>2924,21162=>2925,24594=>2926,12069=>2927,22899=>2927,26262=>2928,34384=>2929,30111=>2930,25386=>2931,25062=>2932,31983=>2933,35834=>2934,21734=>2935,27431=>2936,40485=>2937,27572=>2938,34261=>2939,21589=>2940,20598=>2941,27812=>2942,21866=>2943,36276=>2944,29228=>2945,24085=>2946,24597=>2947,29750=>2948,25293=>2949,25490=>2950,29260=>2951,24472=>2952,28227=>2953,27966=>2954,25856=>2955,28504=>2956,30424=>2957,30928=>2958,30460=>2959,30036=>2960,21028=>2961,21467=>2962,20051=>2963,24222=>2964,26049=>2965,32810=>2966,32982=>2967,25243=>2968,21638=>2969,21032=>2970,28846=>2971,34957=>2972,36305=>2973,27873=>2974,21624=>2975,32986=>2976,22521=>2977,35060=>2978,36180=>2979,38506=>2980,37197=>2981,20329=>2982,27803=>2983,21943=>2984,30406=>2985,30768=>2986,25256=>2987,28921=>2988,28558=>2989,24429=>2990,34028=>2991,26842=>2992,30844=>2993,31735=>2994,33192=>2995,26379=>2996,40527=>2997,25447=>2998,30896=>2999,22383=>3000,30738=>3001,38713=>3002,25209=>3003,25259=>3004,21128=>3005,29749=>3006,27607=>3007,21860=>3008,33086=>3009,30130=>3010,12138=>3011,30382=>3011,21305=>3012,30174=>3013,20731=>3014,23617=>3015,35692=>3016,31687=>3017,20559=>3018,12122=>3019,29255=>3019,39575=>3020,39128=>3021,28418=>3022,29922=>3023,31080=>3024,25735=>3025,30629=>3026,25340=>3027,39057=>3028,36139=>3029,21697=>3030,32856=>3031,20050=>3032,22378=>3033,33529=>3034,33805=>3035,24179=>3036,20973=>3037,29942=>3038,35780=>3039,23631=>3040,22369=>3041,27900=>3042,39047=>3043,23110=>3044,30772=>3045,39748=>3046,36843=>3047,31893=>3048,21078=>3049,25169=>3050,38138=>3051,20166=>3052,33670=>3053,33889=>3054,33769=>3055,33970=>3056,22484=>3057,26420=>3058,22275=>3059,26222=>3060,28006=>3061,35889=>3062,26333=>3063,28689=>3064,26399=>3065,27450=>3066,26646=>3067,25114=>3068,22971=>3069,19971=>3070,20932=>3071,28422=>3072,26578=>3073,27791=>3074,20854=>3075,26827=>3076,22855=>3077,27495=>3078,30054=>3079,23822=>3080,33040=>3081,40784=>3082,26071=>3083,31048=>3084,31041=>3085,39569=>3086,36215=>3087,23682=>3088,20062=>3089,20225=>3090,21551=>3091,22865=>3092,30732=>3093,22120=>3094,12115=>3095,27668=>3095,36804=>3096,24323=>3097,27773=>3098,27875=>3099,35755=>3100,25488=>3101,24688=>3102,27965=>3103,29301=>3104,25190=>3105,38030=>3106,38085=>3107,21315=>3108,36801=>3109,31614=>3110,20191=>3111,35878=>3112,20094=>3113,40660=>3114,38065=>3115,38067=>3116,21069=>3117,28508=>3118,36963=>3119,27973=>3120,35892=>3121,22545=>3122,23884=>3123,12107=>3124,27424=>3124,27465=>3125,26538=>3126,21595=>3127,33108=>3128,32652=>3129,22681=>3130,34103=>3131,24378=>3132,25250=>3133,27207=>3134,38201=>3135,25970=>3136,24708=>3137,26725=>3138,30631=>3139,20052=>3140,20392=>3141,24039=>3142,38808=>3143,25772=>3144,32728=>3145,23789=>3146,20431=>3147,31373=>3148,20999=>3149,33540=>3150,19988=>3151,24623=>3152,31363=>3153,38054=>3154,20405=>3155,20146=>3156,31206=>3157,29748=>3158,21220=>3159,33465=>3160,25810=>3161,31165=>3162,23517=>3163,27777=>3164,38738=>3165,36731=>3166,27682=>3167,20542=>3168,21375=>3169,28165=>3170,25806=>3171,26228=>3172,27696=>3173,24773=>3174,39031=>3175,35831=>3176,24198=>3177,29756=>3178,31351=>3179,31179=>3180,19992=>3181,37041=>3182,29699=>3183,27714=>3184,22234=>3185,37195=>3186,27845=>3187,36235=>3188,21306=>3189,34502=>3190,26354=>3191,36527=>3192,23624=>3193,39537=>3194,28192=>3195,21462=>3196,23094=>3197,40843=>3198,36259=>3199,21435=>3200,22280=>3201,39079=>3202,26435=>3203,37275=>3204,27849=>3205,20840=>3206,30154=>3207,25331=>3208,12125=>3209,29356=>3209,21048=>3210,21149=>3211,32570=>3212,28820=>3213,30264=>3214,21364=>3215,40522=>3216,27063=>3217,30830=>3218,38592=>3219,35033=>3220,32676=>3221,28982=>3222,29123=>3223,20873=>3224,26579=>3225,29924=>3226,22756=>3227,25880=>3228,22199=>3229,35753=>3230,39286=>3231,25200=>3232,32469=>3233,24825=>3234,28909=>3235,22764=>3236,20161=>3237,12040=>3238,20154=>3238,24525=>3239,38887=>3240,20219=>3241,35748=>3242,20995=>3243,22922=>3244,32427=>3245,25172=>3246,20173=>3247,12103=>3248,26085=>3248,25102=>3249,33592=>3250,33993=>3251,33635=>3252,34701=>3253,29076=>3254,28342=>3255,23481=>3256,32466=>3257,20887=>3258,25545=>3259,26580=>3260,12161=>3261,32905=>3261,33593=>3262,34837=>3263,20754=>3264,23418=>3265,22914=>3266,36785=>3267,20083=>3268,27741=>3269,12042=>3270,20837=>3270,35109=>3271,36719=>3272,38446=>3273,34122=>3274,29790=>3275,38160=>3276,38384=>3277,28070=>3278,33509=>3279,24369=>3280,25746=>3281,27922=>3282,33832=>3283,33134=>3284,40131=>3285,22622=>3286,36187=>3287,19977=>3288,21441=>3289,20254=>3290,25955=>3291,26705=>3292,21971=>3293,20007=>3294,25620=>3295,39578=>3296,25195=>3297,23234=>3298,29791=>3299,12170=>3300,33394=>3300,28073=>3301,26862=>3302,20711=>3303,33678=>3304,30722=>3305,26432=>3306,21049=>3307,27801=>3308,32433=>3309,20667=>3310,21861=>3311,29022=>3312,31579=>3313,26194=>3314,29642=>3315,33515=>3316,26441=>3317,12077=>3318,23665=>3318,21024=>3319,29053=>3320,34923=>3321,38378=>3322,38485=>3323,25797=>3324,36193=>3325,33203=>3326,21892=>3327,27733=>3328,25159=>3329,32558=>3330,22674=>3331,20260=>3332,21830=>3333,36175=>3334,26188=>3335,19978=>3336,23578=>3337,35059=>3338,26786=>3339,25422=>3340,31245=>3341,28903=>3342,33421=>3343,21242=>3344,38902=>3345,23569=>3346,21736=>3347,37045=>3348,32461=>3349,22882=>3350,36170=>3351,34503=>3352,12166=>3353,33292=>3353,33293=>3354,36198=>3355,25668=>3356,23556=>3357,24913=>3358,28041=>3359,31038=>3360,35774=>3361,30775=>3362,30003=>3363,21627=>3364,20280=>3365,12189=>3366,36523=>3366,28145=>3367,23072=>3368,32453=>3369,31070=>3370,27784=>3371,23457=>3372,23158=>3373,29978=>3374,32958=>3375,24910=>3376,28183=>3377,22768=>3378,12131=>3379,29983=>3379,29989=>3380,29298=>3381,21319=>3382,32499=>3383,30465=>3384,30427=>3385,21097=>3386,32988=>3387,22307=>3388,24072=>3389,22833=>3390,29422=>3391,26045=>3392,28287=>3393,35799=>3394,12075=>3395,23608=>3395,34417=>3396,12055=>3397,21313=>3397,12143=>3398,30707=>3398,25342=>3399,26102=>3400,20160=>3401,12215=>3402,39135=>3402,34432=>3403,23454=>3404,35782=>3405,21490=>3406,12142=>3407,30690=>3407,20351=>3408,23630=>3409,39542=>3410,22987=>3411,24335=>3412,12144=>3413,31034=>3413,12064=>3414,22763=>3414,19990=>3415,26623=>3416,20107=>3417,25325=>3418,35475=>3419,36893=>3420,21183=>3421,26159=>3422,21980=>3423,22124=>3424,36866=>3425,20181=>3426,20365=>3427,37322=>3428,39280=>3429,12114=>3430,27663=>3430,24066=>3431,24643=>3432,23460=>3433,35270=>3434,35797=>3435,25910=>3436,12095=>3437,25163=>3437,12216=>3438,39318=>3438,23432=>3439,23551=>3440,25480=>3441,21806=>3442,21463=>3443,30246=>3444,20861=>3445,34092=>3446,26530=>3447,26803=>3448,27530=>3449,25234=>3450,36755=>3451,21460=>3452,33298=>3453,28113=>3454,30095=>3455,20070=>3456,36174=>3457,23408=>3458,29087=>3459,34223=>3460,26257=>3461,26329=>3462,32626=>3463,34560=>3464,12233=>3465,40653=>3465,12239=>3466,40736=>3466,23646=>3467,26415=>3468,36848=>3469,26641=>3470,26463=>3471,25101=>3472,31446=>3473,22661=>3474,24246=>3475,25968=>3476,28465=>3477,24661=>3478,21047=>3479,32781=>3480,25684=>3481,34928=>3482,29993=>3483,24069=>3484,26643=>3485,25332=>3486,38684=>3487,21452=>3488,29245=>3489,35841=>3490,12116=>3491,27700=>3491,30561=>3492,31246=>3493,21550=>3494,30636=>3495,39034=>3496,33308=>3497,35828=>3498,30805=>3499,26388=>3500,28865=>3501,26031=>3502,25749=>3503,22070=>3504,24605=>3505,31169=>3506,21496=>3507,19997=>3508,27515=>3509,32902=>3510,23546=>3511,21987=>3512,22235=>3513,20282=>3514,20284=>3515,39282=>3516,24051=>3517,26494=>3518,32824=>3519,24578=>3520,39042=>3521,36865=>3522,23435=>3523,35772=>3524,35829=>3525,25628=>3526,33368=>3527,25822=>3528,22013=>3529,33487=>3530,37221=>3531,20439=>3532,32032=>3533,36895=>3534,31903=>3535,20723=>3536,22609=>3537,28335=>3538,23487=>3539,35785=>3540,32899=>3541,37240=>3542,33948=>3543,31639=>3544,34429=>3545,38539=>3546,38543=>3547,32485=>3548,39635=>3549,30862=>3550,23681=>3551,31319=>3552,36930=>3553,38567=>3554,31071=>3555,23385=>3556,25439=>3557,31499=>3558,34001=>3559,26797=>3560,21766=>3561,32553=>3562,29712=>3563,32034=>3564,38145=>3565,25152=>3566,22604=>3567,20182=>3568,23427=>3569,22905=>3570,22612=>3571,29549=>3572,25374=>3573,36427=>3574,36367=>3575,32974=>3576,33492=>3577,25260=>3578,21488=>3579,27888=>3580,37214=>3581,22826=>3582,24577=>3583,27760=>3584,22349=>3585,25674=>3586,36138=>3587,30251=>3588,28393=>3589,22363=>3590,27264=>3591,30192=>3592,28525=>3593,35885=>3594,35848=>3595,22374=>3596,27631=>3597,34962=>3598,30899=>3599,25506=>3600,21497=>3601,28845=>3602,27748=>3603,22616=>3604,25642=>3605,22530=>3606,26848=>3607,33179=>3608,21776=>3609,31958=>3610,20504=>3611,36538=>3612,28108=>3613,36255=>3614,28907=>3615,25487=>3616,28059=>3617,28372=>3618,32486=>3619,33796=>3620,26691=>3621,36867=>3622,28120=>3623,38518=>3624,35752=>3625,22871=>3626,29305=>3627,34276=>3628,33150=>3629,30140=>3630,35466=>3631,26799=>3632,21076=>3633,36386=>3634,38161=>3635,25552=>3636,39064=>3637,36420=>3638,21884=>3639,20307=>3640,26367=>3641,22159=>3642,24789=>3643,28053=>3644,21059=>3645,23625=>3646,22825=>3647,28155=>3648,22635=>3649,12133=>3650,30000=>3650,29980=>3651,24684=>3652,33300=>3653,33094=>3654,25361=>3655,26465=>3656,36834=>3657,30522=>3658,36339=>3659,36148=>3660,38081=>3661,24086=>3662,21381=>3663,21548=>3664,28867=>3665,27712=>3666,24311=>3667,20572=>3668,20141=>3669,24237=>3670,25402=>3671,33351=>3672,36890=>3673,26704=>3674,37230=>3675,30643=>3676,21516=>3677,38108=>3678,24420=>3679,31461=>3680,26742=>3681,25413=>3682,31570=>3683,32479=>3684,30171=>3685,20599=>3686,25237=>3687,22836=>3688,36879=>3689,20984=>3690,31171=>3691,31361=>3692,22270=>3693,24466=>3694,36884=>3695,28034=>3696,23648=>3697,12063=>3698,22303=>3698,21520=>3699,20820=>3700,28237=>3701,22242=>3702,25512=>3703,39059=>3704,33151=>3705,34581=>3706,35114=>3707,36864=>3708,21534=>3709,23663=>3710,33216=>3711,25302=>3712,25176=>3713,33073=>3714,40501=>3715,38464=>3716,39534=>3717,39548=>3718,26925=>3719,22949=>3720,25299=>3721,21822=>3722,25366=>3723,21703=>3724,34521=>3725,27964=>3726,23043=>3727,12129=>3728,29926=>3728,34972=>3729,27498=>3730,22806=>3731,35916=>3732,24367=>3733,28286=>3734,29609=>3735,39037=>3736,20024=>3737,28919=>3738,23436=>3739,30871=>3740,25405=>3741,26202=>3742,30358=>3743,24779=>3744,23451=>3745,23113=>3746,19975=>3747,33109=>3748,27754=>3749,29579=>3750,20129=>3751,26505=>3752,12153=>3753,32593=>3753,24448=>3754,26106=>3755,26395=>3756,24536=>3757,22916=>3758,23041=>3759,24013=>3760,24494=>3761,21361=>3762,38886=>3763,36829=>3764,26693=>3765,22260=>3766,21807=>3767,24799=>3768,20026=>3769,28493=>3770,32500=>3771,33479=>3772,33806=>3773,22996=>3774,20255=>3775,20266=>3776,23614=>3777,32428=>3778,26410=>3779,34074=>3780,21619=>3781,30031=>3782,32963=>3783,21890=>3784,39759=>3785,20301=>3786,28205=>3787,35859=>3788,23561=>3789,24944=>3790,21355=>3791,30239=>3792,28201=>3793,34442=>3794,12098=>3795,25991=>3795,38395=>3796,32441=>3797,21563=>3798,31283=>3799,32010=>3800,38382=>3801,21985=>3802,32705=>3803,29934=>3804,25373=>3805,34583=>3806,28065=>3807,31389=>3808,25105=>3809,26017=>3810,21351=>3811,25569=>3812,27779=>3813,24043=>3814,21596=>3815,38056=>3816,20044=>3817,27745=>3818,35820=>3819,23627=>3820,12102=>3821,26080=>3821,33436=>3822,26791=>3823,21566=>3824,21556=>3825,12111=>3826,27595=>3826,27494=>3827,20116=>3828,25410=>3829,21320=>3830,33310=>3831,20237=>3832,20398=>3833,22366=>3834,25098=>3835,38654=>3836,26212=>3837,29289=>3838,21247=>3839,21153=>3840,24735=>3841,35823=>3842,26132=>3843,29081=>3844,26512=>3845,35199=>3846,30802=>3847,30717=>3848,26224=>3849,22075=>3850,21560=>3851,38177=>3852,29306=>3853,31232=>3854,24687=>3855,24076=>3856,24713=>3857,33181=>3858,12067=>3859,22805=>3859,24796=>3860,29060=>3861,28911=>3862,28330=>3863,27728=>3864,29312=>3865,27268=>3866,34989=>3867,24109=>3868,20064=>3869,23219=>3870,21916=>3871,38115=>3872,27927=>3873,31995=>3874,38553=>3875,25103=>3876,32454=>3877,30606=>3878,34430=>3879,21283=>3880,38686=>3881,36758=>3882,26247=>3883,23777=>3884,20384=>3885,29421=>3886,19979=>3887,21414=>3888,22799=>3889,21523=>3890,25472=>3891,38184=>3892,20808=>3893,20185=>3894,40092=>3895,32420=>3896,21688=>3897,36132=>3898,34900=>3899,33335=>3900,38386=>3901,28046=>3902,24358=>3903,23244=>3904,26174=>3905,38505=>3906,29616=>3907,29486=>3908,21439=>3909,33146=>3910,39301=>3911,32673=>3912,23466=>3913,38519=>3914,38480=>3915,32447=>3916,30456=>3917,21410=>3918,38262=>3919,12217=>3920,39321=>3920,31665=>3921,35140=>3922,28248=>3923,20065=>3924,32724=>3925,31077=>3926,35814=>3927,24819=>3928,21709=>3929,20139=>3930,39033=>3931,24055=>3932,27233=>3933,20687=>3934,21521=>3935,35937=>3936,33831=>3937,30813=>3938,38660=>3939,21066=>3940,21742=>3941,22179=>3942,38144=>3943,28040=>3944,23477=>3945,28102=>3946,26195=>3947,12073=>3948,23567=>3948,23389=>3949,26657=>3950,32918=>3951,21880=>3952,31505=>3953,25928=>3954,26964=>3955,20123=>3956,27463=>3957,34638=>3958,38795=>3959,21327=>3960,25375=>3961,25658=>3962,37034=>3963,26012=>3964,32961=>3965,35856=>3966,20889=>3967,26800=>3968,21368=>3969,34809=>3970,25032=>3971,27844=>3972,27899=>3973,35874=>3974,23633=>3975,34218=>3976,33455=>3977,38156=>3978,27427=>3979,12191=>3980,36763=>3980,26032=>3981,24571=>3982,12092=>3983,24515=>3983,20449=>3984,34885=>3985,26143=>3986,33125=>3987,29481=>3988,24826=>3989,20852=>3990,21009=>3991,22411=>3992,24418=>3993,37026=>3994,12175=>3995,34892=>3995,37266=>3996,24184=>3997,26447=>3998,24615=>3999,22995=>4000,20804=>4001,20982=>4002,33016=>4003,21256=>4004,27769=>4005,38596=>4006,29066=>4007,20241=>4008,20462=>4009,32670=>4010,26429=>4011,21957=>4012,38152=>4013,31168=>4014,34966=>4015,32483=>4016,22687=>4017,25100=>4018,38656=>4019,34394=>4020,22040=>4021,39035=>4022,24464=>4023,35768=>4024,33988=>4025,37207=>4026,21465=>4027,26093=>4028,24207=>4029,30044=>4030,24676=>4031,32110=>4032,23167=>4033,32490=>4034,32493=>4035,36713=>4036,21927=>4037,23459=>4038,24748=>4039,26059=>4040,12126=>4041,29572=>4041,36873=>4042,30307=>4043,30505=>4044,32474=>4045,38772=>4046,34203=>4047,23398=>4048,12147=>4049,31348=>4049,38634=>4050,12174=>4051,34880=>4051,21195=>4052,29071=>4053,24490=>4054,26092=>4055,35810=>4056,23547=>4057,39535=>4058,24033=>4059,27529=>4060,27739=>4061,35757=>4062,35759=>4063,36874=>4064,36805=>4065,21387=>4066,25276=>4067,40486=>4068,40493=>4069,21568=>4070,20011=>4071,33469=>4072,12123=>4073,29273=>4073,34460=>4074,23830=>4075,34905=>4076,28079=>4077,38597=>4078,21713=>4079,20122=>4080,35766=>4081,28937=>4082,21693=>4083,38409=>4084,28895=>4085,28153=>4086,30416=>4087,20005=>4088,30740=>4089,34578=>4090,23721=>4091,24310=>4092,12180=>4093,35328=>4093,39068=>4094,38414=>4095,28814=>4096,27839=>4097,22852=>4098,25513=>4099,30524=>4100,34893=>4101,28436=>4102,33395=>4103,22576=>4104,29141=>4105,21388=>4106,30746=>4107,38593=>4108,21761=>4109,24422=>4110,28976=>4111,23476=>4112,35866=>4113,39564=>4114,27523=>4115,22830=>4116,40495=>4117,31207=>4118,26472=>4119,25196=>4120,20335=>4121,30113=>4122,12154=>4123,32650=>4123,27915=>4124,38451=>4125,27687=>4126,20208=>4127,30162=>4128,20859=>4129,26679=>4130,28478=>4131,36992=>4132,33136=>4133,22934=>4134,29814=>4135,25671=>4136,23591=>4137,36965=>4138,31377=>4139,35875=>4140,23002=>4141,21676=>4142,33280=>4143,33647=>4144,35201=>4145,32768=>4146,26928=>4147,22094=>4148,32822=>4149,29239=>4150,37326=>4151,20918=>4152,20063=>4153,39029=>4154,25494=>4155,19994=>4156,21494=>4157,26355=>4158,33099=>4159,22812=>4160,28082=>4161,12032=>4162,19968=>4162,22777=>4163,21307=>4164,25558=>4165,38129=>4166,20381=>4167,20234=>4168,12176=>4169,34915=>4169,39056=>4170,22839=>4171,36951=>4172,31227=>4173,20202=>4174,33008=>4175,30097=>4176,27778=>4177,23452=>4178,23016=>4179,24413=>4180,26885=>4181,34433=>4182,20506=>4183,24050=>4184,12036=>4185,20057=>4185,30691=>4186,20197=>4187,33402=>4188,25233=>4189,26131=>4190,12194=>4191,37009=>4191,23673=>4192,20159=>4193,24441=>4194,33222=>4195,36920=>4196,32900=>4197,30123=>4198,20134=>4199,35028=>4200,24847=>4201,27589=>4202,24518=>4203,20041=>4204,30410=>4205,28322=>4206,35811=>4207,35758=>4208,35850=>4209,35793=>4210,24322=>4211,32764=>4212,32716=>4213,32462=>4214,33589=>4215,33643=>4216,22240=>4217,27575=>4218,12211=>4219,38899=>4219,38452=>4220,23035=>4221,21535=>4222,38134=>4223,28139=>4224,23493=>4225,39278=>4226,23609=>4227,24341=>4228,38544=>4229,21360=>4230,33521=>4231,27185=>4232,23156=>4233,40560=>4234,24212=>4235,32552=>4236,33721=>4237,33828=>4238,33829=>4239,33639=>4240,34631=>4241,36814=>4242,36194=>4243,30408=>4244,24433=>4245,39062=>4246,30828=>4247,26144=>4248,21727=>4249,25317=>4250,20323=>4251,33219=>4252,30152=>4253,24248=>4254,38605=>4255,36362=>4256,34553=>4257,21647=>4258,27891=>4259,28044=>4260,27704=>4261,24703=>4262,21191=>4263,12132=>4264,29992=>4264,24189=>4265,20248=>4266,24736=>4267,24551=>4268,23588=>4269,30001=>4270,37038=>4271,38080=>4272,29369=>4273,27833=>4274,28216=>4275,12195=>4276,37193=>4276,26377=>4277,21451=>4278,21491=>4279,20305=>4280,37321=>4281,35825=>4282,12060=>4283,21448=>4283,24188=>4284,36802=>4285,28132=>4286,20110=>4287,30402=>4288,27014=>4289,34398=>4290,24858=>4291,33286=>4292,20313=>4293,20446=>4294,36926=>4295,40060=>4296,24841=>4297,28189=>4298,28180=>4299,38533=>4300,20104=>4301,23089=>4302,12204=>4303,38632=>4303,19982=>4304,23679=>4305,31161=>4306,23431=>4307,35821=>4308,12155=>4309,32701=>4309,12127=>4310,29577=>4310,22495=>4311,33419=>4312,37057=>4313,21505=>4314,36935=>4315,21947=>4316,23786=>4317,24481=>4318,24840=>4319,27442=>4320,29425=>4321,32946=>4322,35465=>4323,28020=>4324,23507=>4325,35029=>4326,39044=>4327,35947=>4328,39533=>4329,40499=>4330,28170=>4331,20900=>4332,20803=>4333,22435=>4334,34945=>4335,21407=>4336,25588=>4337,36757=>4338,22253=>4339,21592=>4340,22278=>4341,29503=>4342,28304=>4343,32536=>4344,36828=>4345,33489=>4346,24895=>4347,24616=>4348,38498=>4349,12104=>4350,26352=>4350,32422=>4351,36234=>4352,36291=>4353,38053=>4354,23731=>4355,31908=>4356,12105=>4357,26376=>4357,24742=>4358,38405=>4359,32792=>4360,20113=>4361,37095=>4362,21248=>4363,38504=>4364,20801=>4365,36816=>4366,34164=>4367,37213=>4368,26197=>4369,38901=>4370,23381=>4371,21277=>4372,30776=>4373,26434=>4374,26685=>4375,21705=>4376,28798=>4377,23472=>4378,36733=>4379,20877=>4380,22312=>4381,21681=>4382,25874=>4383,26242=>4384,36190=>4385,36163=>4386,33039=>4387,33900=>4388,36973=>4389,31967=>4390,20991=>4391,34299=>4392,26531=>4393,26089=>4394,28577=>4395,34468=>4396,36481=>4397,22122=>4398,36896=>4399,30338=>4400,28790=>4401,29157=>4402,36131=>4403,25321=>4404,21017=>4405,27901=>4406,36156=>4407,24590=>4408,22686=>4409,24974=>4410,26366=>4411,36192=>4412,25166=>4413,21939=>4414,28195=>4415,26413=>4416,36711=>4417,38113=>4418,38392=>4419,30504=>4420,26629=>4421,27048=>4422,21643=>4423,20045=>4424,28856=>4425,35784=>4426,25688=>4427,25995=>4428,23429=>4429,31364=>4430,20538=>4431,23528=>4432,30651=>4433,27617=>4434,35449=>4435,31896=>4436,27838=>4437,30415=>4438,26025=>4439,36759=>4440,23853=>4441,23637=>4442,34360=>4443,26632=>4444,21344=>4445,25112=>4446,31449=>4447,28251=>4448,32509=>4449,27167=>4450,31456=>4451,24432=>4452,28467=>4453,24352=>4454,25484=>4455,28072=>4456,26454=>4457,19976=>4458,24080=>4459,36134=>4460,20183=>4461,32960=>4462,30260=>4463,38556=>4464,25307=>4465,26157=>4466,25214=>4467,27836=>4468,36213=>4469,29031=>4470,32617=>4471,20806=>4472,32903=>4473,21484=>4474,36974=>4475,25240=>4476,21746=>4477,34544=>4478,36761=>4479,32773=>4480,38167=>4481,34071=>4482,36825=>4483,27993=>4484,29645=>4485,26015=>4486,30495=>4487,29956=>4488,30759=>4489,33275=>4490,36126=>4491,38024=>4492,20390=>4493,26517=>4494,30137=>4495,35786=>4496,38663=>4497,25391=>4498,38215=>4499,38453=>4500,33976=>4501,25379=>4502,30529=>4503,24449=>4504,29424=>4505,20105=>4506,24596=>4507,25972=>4508,25327=>4509,27491=>4510,25919=>4511,24103=>4512,30151=>4513,37073=>4514,35777=>4515,33437=>4516,26525=>4517,12096=>4518,25903=>4518,21553=>4519,34584=>4520,30693=>4521,32930=>4522,33026=>4523,27713=>4524,20043=>4525,32455=>4526,32844=>4527,30452=>4528,26893=>4529,27542=>4530,25191=>4531,20540=>4532,20356=>4533,22336=>4534,25351=>4535,12108=>4536,27490=>4536,36286=>4537,21482=>4538,26088=>4539,32440=>4540,24535=>4541,25370=>4542,25527=>4543,12164=>4544,33267=>4544,33268=>4545,32622=>4546,24092=>4547,23769=>4548,21046=>4549,26234=>4550,31209=>4551,31258=>4552,36136=>4553,28825=>4554,30164=>4555,28382=>4556,27835=>4557,31378=>4558,20013=>4559,30405=>4560,24544=>4561,38047=>4562,34935=>4563,32456=>4564,31181=>4565,32959=>4566,37325=>4567,20210=>4568,20247=>4569,12168=>4570,33311=>4570,21608=>4571,24030=>4572,27954=>4573,35788=>4574,31909=>4575,36724=>4576,32920=>4577,24090=>4578,21650=>4579,30385=>4580,23449=>4581,26172=>4582,39588=>4583,29664=>4584,26666=>4585,34523=>4586,26417=>4587,29482=>4588,35832=>4589,35803=>4590,36880=>4591,12149=>4592,31481=>4592,28891=>4593,29038=>4594,25284=>4595,30633=>4596,22065=>4597,20027=>4598,33879=>4599,26609=>4600,21161=>4601,34496=>4602,36142=>4603,38136=>4604,31569=>4605,20303=>4606,27880=>4607,31069=>4608,39547=>4609,25235=>4610,12118=>4611,29226=>4611,25341=>4612,19987=>4613,30742=>4614,36716=>4615,25776=>4616,36186=>4617,31686=>4618,26729=>4619,24196=>4620,35013=>4621,22918=>4622,25758=>4623,22766=>4624,29366=>4625,26894=>4626,38181=>4627,36861=>4628,36184=>4629,22368=>4630,32512=>4631,35846=>4632,20934=>4633,25417=>4634,25305=>4635,21331=>4636,26700=>4637,29730=>4638,33537=>4639,37196=>4640,21828=>4641,30528=>4642,28796=>4643,27978=>4644,20857=>4645,21672=>4646,36164=>4647,23039=>4648,28363=>4649,28100=>4650,23388=>4651,32043=>4652,20180=>4653,31869=>4654,28371=>4655,12070=>4656,23376=>4656,12163=>4657,33258=>4657,28173=>4658,23383=>4659,39683=>4660,26837=>4661,36394=>4662,23447=>4663,32508=>4664,24635=>4665,32437=>4666,37049=>4667,12187=>4668,36208=>4668,22863=>4669,25549=>4670,31199=>4671,12188=>4672,36275=>4672,21330=>4673,26063=>4674,31062=>4675,35781=>4676,38459=>4677,32452=>4678,38075=>4679,32386=>4680,22068=>4681,37257=>4682,26368=>4683,32618=>4684,23562=>4685,36981=>4686,26152=>4687,24038=>4688,20304=>4689,26590=>4690,20570=>4691,20316=>4692,22352=>4693,24231=>4694,20109=>4695,19980=>4696,20800=>4697,64012=>4697,19984=>4698,24319=>4699,21317=>4700,19989=>4701,20120=>4702,19998=>4703,12224=>4704,39730=>4704,23404=>4705,22121=>4706,12033=>4707,20008=>4707,31162=>4708,12035=>4709,20031=>4709,12052=>4710,21269=>4710,20039=>4711,22829=>4712,12120=>4713,29243=>4713,21358=>4714,27664=>4715,22239=>4716,32996=>4717,39319=>4718,27603=>4719,30590=>4720,40727=>4721,12034=>4722,20022=>4722,20127=>4723,40720=>4724,20060=>4725,20073=>4726,20115=>4727,33416=>4728,23387=>4729,21868=>4730,22031=>4731,20164=>4732,21389=>4733,21405=>4734,21411=>4735,21413=>4736,21422=>4737,38757=>4738,36189=>4739,12053=>4740,21274=>4740,21493=>4741,21286=>4742,21294=>4743,21310=>4744,36188=>4745,21350=>4746,21347=>4747,20994=>4748,21000=>4749,21006=>4750,21037=>4751,21043=>4752,21055=>4753,21056=>4754,21068=>4755,21086=>4756,21089=>4757,21084=>4758,33967=>4759,21117=>4760,21122=>4761,21121=>4762,21136=>4763,21139=>4764,12044=>4765,20866=>4765,32596=>4766,20155=>4767,20163=>4768,20169=>4769,20162=>4770,20200=>4771,20193=>4772,20203=>4773,20190=>4774,20251=>4775,20211=>4776,20258=>4777,20324=>4778,20213=>4779,20261=>4780,20263=>4781,20233=>4782,20267=>4783,20318=>4784,20327=>4785,25912=>4786,20314=>4787,20317=>4788,20319=>4789,20311=>4790,20274=>4791,20285=>4792,20342=>4793,20340=>4794,20369=>4795,20361=>4796,20355=>4797,20367=>4798,20350=>4799,20347=>4800,20394=>4801,20348=>4802,20396=>4803,20372=>4804,20454=>4805,20456=>4806,20458=>4807,20421=>4808,20442=>4809,20451=>4810,20444=>4811,20433=>4812,20447=>4813,20472=>4814,20521=>4815,20556=>4816,20467=>4817,20524=>4818,20495=>4819,20526=>4820,20525=>4821,20478=>4822,20508=>4823,20492=>4824,20517=>4825,20520=>4826,20606=>4827,20547=>4828,20565=>4829,20552=>4830,20558=>4831,20588=>4832,20603=>4833,20645=>4834,20647=>4835,20649=>4836,20666=>4837,20694=>4838,20742=>4839,20717=>4840,20716=>4841,20710=>4842,20718=>4843,20743=>4844,20747=>4845,20189=>4846,27709=>4847,20312=>4848,20325=>4849,20430=>4850,12245=>4851,40864=>4851,27718=>4852,31860=>4853,20846=>4854,24061=>4855,40649=>4856,39320=>4857,20865=>4858,22804=>4859,12051=>4860,21241=>4860,21261=>4861,35335=>4862,21264=>4863,20971=>4864,22809=>4865,20821=>4866,12039=>4867,20128=>4867,20822=>4868,20147=>4869,34926=>4870,34980=>4871,20149=>4872,33044=>4873,35026=>4874,31104=>4875,23348=>4876,34819=>4877,32696=>4878,12046=>4879,20907=>4879,20913=>4880,20925=>4881,20924=>4882,20935=>4883,12045=>4884,20886=>4884,20898=>4885,20901=>4886,35744=>4887,35750=>4888,35751=>4889,35754=>4890,35764=>4891,35765=>4892,35767=>4893,35778=>4894,35779=>4895,35787=>4896,35791=>4897,35790=>4898,35794=>4899,35795=>4900,35796=>4901,35798=>4902,35800=>4903,35801=>4904,35804=>4905,35807=>4906,35808=>4907,35812=>4908,35816=>4909,35817=>4910,35822=>4911,35824=>4912,35827=>4913,35830=>4914,35833=>4915,35836=>4916,35839=>4917,35840=>4918,35842=>4919,35844=>4920,35847=>4921,35852=>4922,35855=>4923,35857=>4924,35858=>4925,35860=>4926,35861=>4927,35862=>4928,35865=>4929,35867=>4930,35864=>4931,35869=>4932,35871=>4933,35872=>4934,35873=>4935,35877=>4936,35879=>4937,35882=>4938,35883=>4939,35886=>4940,35887=>4941,35890=>4942,35891=>4943,35893=>4944,35894=>4945,12057=>4946,21353=>4946,21370=>4947,38429=>4948,38434=>4949,38433=>4950,38449=>4951,38442=>4952,38461=>4953,38460=>4954,38466=>4955,38473=>4956,38484=>4957,38495=>4958,38503=>4959,38508=>4960,38514=>4961,38516=>4962,38536=>4963,38541=>4964,38551=>4965,38576=>4966,37015=>4967,37019=>4968,37021=>4969,37017=>4970,37036=>4971,37025=>4972,37044=>4973,37043=>4974,37046=>4975,37050=>4976,37048=>4977,37040=>4978,37071=>4979,37061=>4980,37054=>4981,37072=>4982,37060=>4983,37063=>4984,37075=>4985,37094=>4986,37090=>4987,37084=>4988,37079=>4989,37083=>4990,37099=>4991,37103=>4992,37118=>4993,37124=>4994,37154=>4995,37150=>4996,37155=>4997,37169=>4998,37167=>4999,37177=>5000,37187=>5001,37190=>5002,21005=>5003,22850=>5004,21154=>5005,21164=>5006,21165=>5007,21182=>5008,21759=>5009,21200=>5010,21206=>5011,21232=>5012,21471=>5013,29166=>5014,30669=>5015,12085=>5016,24308=>5016,12048=>5017,20981=>5017,20988=>5018,12223=>5019,39727=>5019,12059=>5020,21430=>5020,24321=>5021,30042=>5022,24047=>5023,22348=>5024,22441=>5025,22433=>5026,22654=>5027,22716=>5028,22725=>5029,22737=>5030,22313=>5031,22316=>5032,22314=>5033,22323=>5034,22329=>5035,22318=>5036,22319=>5037,22364=>5038,22331=>5039,22338=>5040,22377=>5041,22405=>5042,22379=>5043,22406=>5044,22396=>5045,22395=>5046,22376=>5047,22381=>5048,22390=>5049,22387=>5050,22445=>5051,22436=>5052,22412=>5053,22450=>5054,22479=>5055,22439=>5056,22452=>5057,22419=>5058,22432=>5059,22485=>5060,22488=>5061,22490=>5062,22489=>5063,22482=>5064,22456=>5065,22516=>5066,22511=>5067,22520=>5068,22500=>5069,22493=>5070,22539=>5071,22541=>5072,22525=>5073,22509=>5074,22528=>5075,22558=>5076,22553=>5077,22596=>5078,22560=>5079,22629=>5080,22636=>5081,22657=>5082,22665=>5083,22682=>5084,22656=>5085,39336=>5086,40729=>5087,25087=>5088,33401=>5089,33405=>5090,33407=>5091,33423=>5092,33418=>5093,33448=>5094,33412=>5095,33422=>5096,33425=>5097,33431=>5098,33433=>5099,33451=>5100,33464=>5101,33470=>5102,33456=>5103,33480=>5104,33482=>5105,33507=>5106,33432=>5107,33463=>5108,33454=>5109,33483=>5110,33484=>5111,33473=>5112,33449=>5113,33460=>5114,33441=>5115,33450=>5116,33439=>5117,33476=>5118,33486=>5119,33444=>5120,33505=>5121,33545=>5122,33527=>5123,33508=>5124,33551=>5125,33543=>5126,33500=>5127,33524=>5128,33490=>5129,33496=>5130,33548=>5131,33531=>5132,33491=>5133,33553=>5134,33562=>5135,33542=>5136,33556=>5137,33557=>5138,33504=>5139,33493=>5140,33564=>5141,33617=>5142,33627=>5143,33628=>5144,33544=>5145,33682=>5146,33596=>5147,33588=>5148,33585=>5149,33691=>5150,33630=>5151,33583=>5152,33615=>5153,33607=>5154,33603=>5155,33631=>5156,33600=>5157,33559=>5158,33632=>5159,33581=>5160,33594=>5161,33587=>5162,33638=>5163,33637=>5164,33640=>5165,33563=>5166,33641=>5167,33644=>5168,33642=>5169,33645=>5170,33646=>5171,33712=>5172,33656=>5173,33715=>5174,33716=>5175,33696=>5176,33706=>5177,33683=>5178,33692=>5179,33669=>5180,33660=>5181,33718=>5182,33705=>5183,33661=>5184,33720=>5185,33659=>5186,33688=>5187,33694=>5188,33704=>5189,33722=>5190,33724=>5191,33729=>5192,33793=>5193,33765=>5194,33752=>5195,22535=>5196,33816=>5197,33803=>5198,33757=>5199,33789=>5200,33750=>5201,33820=>5202,33848=>5203,33809=>5204,33798=>5205,33748=>5206,33759=>5207,33807=>5208,33795=>5209,33784=>5210,33785=>5211,33770=>5212,33733=>5213,33728=>5214,33830=>5215,33776=>5216,33761=>5217,33884=>5218,33873=>5219,33882=>5220,33881=>5221,33907=>5222,33927=>5223,33928=>5224,33914=>5225,33929=>5226,33912=>5227,33852=>5228,33862=>5229,33897=>5230,33910=>5231,33932=>5232,33934=>5233,33841=>5234,33901=>5235,33985=>5236,33997=>5237,34000=>5238,34022=>5239,33981=>5240,34003=>5241,33994=>5242,33983=>5243,33978=>5244,34016=>5245,33953=>5246,33977=>5247,33972=>5248,33943=>5249,34021=>5250,34019=>5251,34060=>5252,29965=>5253,34104=>5254,34032=>5255,34105=>5256,34079=>5257,34106=>5258,34134=>5259,34107=>5260,34047=>5261,34044=>5262,34137=>5263,34120=>5264,34152=>5265,34148=>5266,34142=>5267,34170=>5268,30626=>5269,34115=>5270,34162=>5271,34171=>5272,34212=>5273,34216=>5274,34183=>5275,34191=>5276,34169=>5277,34222=>5278,34204=>5279,34181=>5280,34233=>5281,34231=>5282,34224=>5283,34259=>5284,34241=>5285,34268=>5286,34303=>5287,34343=>5288,34309=>5289,34345=>5290,34326=>5291,34364=>5292,12086=>5293,24318=>5293,24328=>5294,22844=>5295,22849=>5296,32823=>5297,22869=>5298,22874=>5299,22872=>5300,21263=>5301,12074=>5302,23586=>5302,23589=>5303,23596=>5304,23604=>5305,25164=>5306,25194=>5307,25247=>5308,25275=>5309,25290=>5310,25306=>5311,25303=>5312,25326=>5313,25378=>5314,25334=>5315,25401=>5316,25419=>5317,25411=>5318,25517=>5319,25590=>5320,25457=>5321,25466=>5322,25486=>5323,25524=>5324,25453=>5325,25516=>5326,25482=>5327,25449=>5328,25518=>5329,25532=>5330,25586=>5331,25592=>5332,25568=>5333,25599=>5334,25540=>5335,25566=>5336,25550=>5337,25682=>5338,25542=>5339,25534=>5340,25669=>5341,25665=>5342,25611=>5343,25627=>5344,25632=>5345,25612=>5346,25638=>5347,25633=>5348,25694=>5349,25732=>5350,25709=>5351,25750=>5352,25722=>5353,25783=>5354,25784=>5355,25753=>5356,25786=>5357,25792=>5358,25808=>5359,25815=>5360,25828=>5361,25826=>5362,25865=>5363,25893=>5364,25902=>5365,12087=>5366,24331=>5366,24530=>5367,29977=>5368,24337=>5369,21343=>5370,21489=>5371,21501=>5372,21481=>5373,21480=>5374,21499=>5375,21522=>5376,21526=>5377,21510=>5378,21579=>5379,21586=>5380,21587=>5381,21588=>5382,21590=>5383,21571=>5384,21537=>5385,21591=>5386,21593=>5387,21539=>5388,21554=>5389,21634=>5390,21652=>5391,21623=>5392,21617=>5393,21604=>5394,21658=>5395,21659=>5396,21636=>5397,21622=>5398,21606=>5399,21661=>5400,21712=>5401,21677=>5402,21698=>5403,21684=>5404,21714=>5405,21671=>5406,21670=>5407,21715=>5408,21716=>5409,21618=>5410,21667=>5411,21717=>5412,21691=>5413,21695=>5414,21708=>5415,21721=>5416,21722=>5417,21724=>5418,21673=>5419,21674=>5420,21668=>5421,21725=>5422,21711=>5423,21726=>5424,21787=>5425,21735=>5426,21792=>5427,21757=>5428,21780=>5429,21747=>5430,21794=>5431,21795=>5432,21775=>5433,21777=>5434,21799=>5435,21802=>5436,21863=>5437,21903=>5438,21941=>5439,21833=>5440,21869=>5441,21825=>5442,21845=>5443,21823=>5444,21840=>5445,21820=>5446,21815=>5447,21846=>5448,21877=>5449,21878=>5450,21879=>5451,21811=>5452,21808=>5453,21852=>5454,21899=>5455,21970=>5456,21891=>5457,21937=>5458,21945=>5459,21896=>5460,21889=>5461,21919=>5462,21886=>5463,21974=>5464,21905=>5465,21883=>5466,21983=>5467,21949=>5468,21950=>5469,21908=>5470,21913=>5471,21994=>5472,22007=>5473,21961=>5474,22047=>5475,21969=>5476,21995=>5477,21996=>5478,21972=>5479,21990=>5480,21981=>5481,21956=>5482,21999=>5483,21989=>5484,22002=>5485,22003=>5486,21964=>5487,21965=>5488,21992=>5489,22005=>5490,21988=>5491,36756=>5492,22046=>5493,22024=>5494,22028=>5495,22017=>5496,22052=>5497,22051=>5498,22014=>5499,22016=>5500,22055=>5501,22061=>5502,22104=>5503,22073=>5504,22103=>5505,22060=>5506,22093=>5507,22114=>5508,22105=>5509,22108=>5510,22092=>5511,22100=>5512,22150=>5513,22116=>5514,22129=>5515,22123=>5516,22139=>5517,22140=>5518,22149=>5519,22163=>5520,22191=>5521,22228=>5522,12062=>5523,22231=>5523,22237=>5524,22241=>5525,22261=>5526,22251=>5527,22265=>5528,22271=>5529,22276=>5530,22282=>5531,22281=>5532,22300=>5533,24079=>5534,24089=>5535,24084=>5536,24081=>5537,24113=>5538,24123=>5539,24124=>5540,24119=>5541,24132=>5542,24148=>5543,24155=>5544,24158=>5545,24161=>5546,23692=>5547,23674=>5548,23693=>5549,23696=>5550,23702=>5551,23688=>5552,23704=>5553,23705=>5554,23697=>5555,23706=>5556,23708=>5557,23733=>5558,23714=>5559,23741=>5560,23724=>5561,23723=>5562,23729=>5563,23715=>5564,23745=>5565,23735=>5566,23748=>5567,23762=>5568,23780=>5569,23755=>5570,23781=>5571,23810=>5572,23811=>5573,23847=>5574,23846=>5575,23854=>5576,23844=>5577,23838=>5578,23814=>5579,23835=>5580,23896=>5581,23870=>5582,23860=>5583,23869=>5584,23916=>5585,23899=>5586,23919=>5587,23901=>5588,23915=>5589,23883=>5590,23882=>5591,23913=>5592,23924=>5593,23938=>5594,23961=>5595,23965=>5596,35955=>5597,23991=>5598,24005=>5599,12091=>5600,24435=>5600,24439=>5601,24450=>5602,24455=>5603,24457=>5604,24460=>5605,24469=>5606,24473=>5607,24476=>5608,24488=>5609,24493=>5610,24501=>5611,24508=>5612,34914=>5613,12090=>5614,24417=>5614,29357=>5615,29360=>5616,29364=>5617,29367=>5618,29368=>5619,29379=>5620,29377=>5621,29390=>5622,29389=>5623,29394=>5624,29416=>5625,29423=>5626,29417=>5627,29426=>5628,29428=>5629,29431=>5630,29441=>5631,29427=>5632,29443=>5633,29434=>5634,29435=>5635,29463=>5636,29459=>5637,29473=>5638,29450=>5639,29470=>5640,29469=>5641,29461=>5642,29474=>5643,29497=>5644,29477=>5645,29484=>5646,29496=>5647,29489=>5648,29520=>5649,29517=>5650,29527=>5651,29536=>5652,29548=>5653,29551=>5654,29566=>5655,12167=>5656,33307=>5656,22821=>5657,39143=>5658,22820=>5659,12065=>5660,22786=>5660,39267=>5661,39271=>5662,39272=>5663,39273=>5664,39274=>5665,39275=>5666,39276=>5667,39284=>5668,39287=>5669,39293=>5670,39296=>5671,39300=>5672,39303=>5673,39306=>5674,39309=>5675,39312=>5676,39313=>5677,39315=>5678,39316=>5679,39317=>5680,24192=>5681,24209=>5682,24203=>5683,24214=>5684,24229=>5685,24224=>5686,24249=>5687,24245=>5688,24254=>5689,24243=>5690,36179=>5691,24274=>5692,24273=>5693,24283=>5694,24296=>5695,24298=>5696,33210=>5697,24516=>5698,24521=>5699,24534=>5700,24527=>5701,24579=>5702,24558=>5703,24580=>5704,24545=>5705,24548=>5706,24574=>5707,24581=>5708,24582=>5709,24554=>5710,24557=>5711,24568=>5712,24601=>5713,24629=>5714,24614=>5715,24603=>5716,24591=>5717,24589=>5718,24617=>5719,24619=>5720,24586=>5721,24639=>5722,24609=>5723,24696=>5724,24697=>5725,24699=>5726,24698=>5727,24642=>5728,24682=>5729,24701=>5730,24726=>5731,24730=>5732,24749=>5733,24733=>5734,24707=>5735,24722=>5736,24716=>5737,24731=>5738,24812=>5739,24763=>5740,24753=>5741,24797=>5742,24792=>5743,24774=>5744,24794=>5745,24756=>5746,24864=>5747,24870=>5748,24853=>5749,24867=>5750,24820=>5751,24832=>5752,24846=>5753,24875=>5754,24906=>5755,24949=>5756,25004=>5757,24980=>5758,24999=>5759,25015=>5760,25044=>5761,25077=>5762,24541=>5763,38579=>5764,38377=>5765,38379=>5766,38385=>5767,38387=>5768,38389=>5769,38390=>5770,38396=>5771,38398=>5772,38403=>5773,38404=>5774,38406=>5775,38408=>5776,38410=>5777,38411=>5778,38412=>5779,38413=>5780,38415=>5781,38418=>5782,38421=>5783,38422=>5784,38423=>5785,38425=>5786,38426=>5787,20012=>5788,12121=>5789,29247=>5789,25109=>5790,27701=>5791,27732=>5792,27740=>5793,27722=>5794,27811=>5795,27781=>5796,27792=>5797,27796=>5798,27788=>5799,27752=>5800,27753=>5801,27764=>5802,27766=>5803,27782=>5804,27817=>5805,27856=>5806,27860=>5807,27821=>5808,27895=>5809,27896=>5810,27889=>5811,27863=>5812,27826=>5813,27872=>5814,27862=>5815,27898=>5816,27883=>5817,27886=>5818,27825=>5819,27859=>5820,27887=>5821,27902=>5822,27961=>5823,27943=>5824,27916=>5825,27971=>5826,27976=>5827,27911=>5828,27908=>5829,27929=>5830,27918=>5831,27947=>5832,27981=>5833,27950=>5834,27957=>5835,27930=>5836,27983=>5837,27986=>5838,27988=>5839,27955=>5840,28049=>5841,28015=>5842,28062=>5843,28064=>5844,27998=>5845,28051=>5846,28052=>5847,27996=>5848,28000=>5849,28028=>5850,28003=>5851,28186=>5852,28103=>5853,28101=>5854,28126=>5855,28174=>5856,28095=>5857,28128=>5858,28177=>5859,28134=>5860,28125=>5861,28121=>5862,28182=>5863,28075=>5864,28172=>5865,28078=>5866,28203=>5867,28270=>5868,28238=>5869,28267=>5870,28338=>5871,28255=>5872,28294=>5873,28243=>5874,28244=>5875,28210=>5876,28197=>5877,28228=>5878,28383=>5879,28337=>5880,28312=>5881,28384=>5882,28461=>5883,28386=>5884,28325=>5885,28327=>5886,28349=>5887,28347=>5888,28343=>5889,28375=>5890,28340=>5891,28367=>5892,28303=>5893,28354=>5894,28319=>5895,28514=>5896,28486=>5897,28487=>5898,28452=>5899,28437=>5900,28409=>5901,28463=>5902,28470=>5903,28491=>5904,28532=>5905,28458=>5906,28425=>5907,28457=>5908,28553=>5909,28557=>5910,28556=>5911,28536=>5912,28530=>5913,28540=>5914,28538=>5915,28625=>5916,28617=>5917,28583=>5918,28601=>5919,28598=>5920,28610=>5921,28641=>5922,28654=>5923,28638=>5924,28640=>5925,28655=>5926,28698=>5927,28707=>5928,28699=>5929,28729=>5930,28725=>5931,28751=>5932,28766=>5933,12071=>5934,23424=>5934,23428=>5935,23445=>5936,23443=>5937,23461=>5938,23480=>5939,29999=>5940,39582=>5941,25652=>5942,23524=>5943,23534=>5944,35120=>5945,23536=>5946,36423=>5947,35591=>5948,36790=>5949,36819=>5950,36821=>5951,36837=>5952,36846=>5953,36836=>5954,36841=>5955,36838=>5956,36851=>5957,36840=>5958,36869=>5959,36868=>5960,36875=>5961,36902=>5962,36881=>5963,36877=>5964,36886=>5965,36897=>5966,36917=>5967,36918=>5968,36909=>5969,36911=>5970,36932=>5971,36945=>5972,36946=>5973,36944=>5974,36968=>5975,36952=>5976,36962=>5977,36955=>5978,26297=>5979,36980=>5980,36989=>5981,36994=>5982,37000=>5983,36995=>5984,37003=>5985,12089=>5986,24400=>5986,24407=>5987,24406=>5988,24408=>5989,23611=>5990,21675=>5991,23632=>5992,23641=>5993,23409=>5994,23651=>5995,23654=>5996,32700=>5997,24362=>5998,24361=>5999,24365=>6000,33396=>6001,24380=>6002,39739=>6003,12076=>6004,23662=>6004,22913=>6005,22915=>6006,22925=>6007,22953=>6008,22954=>6009,22947=>6010,22935=>6011,22986=>6012,22955=>6013,22942=>6014,22948=>6015,22994=>6016,22962=>6017,22959=>6018,22999=>6019,22974=>6020,23045=>6021,23046=>6022,23005=>6023,23048=>6024,23011=>6025,23000=>6026,23033=>6027,23052=>6028,23049=>6029,23090=>6030,23092=>6031,23057=>6032,23075=>6033,23059=>6034,23104=>6035,23143=>6036,23114=>6037,23125=>6038,23100=>6039,23138=>6040,23157=>6041,33004=>6042,23210=>6043,23195=>6044,23159=>6045,23162=>6046,23230=>6047,23275=>6048,23218=>6049,23250=>6050,23252=>6051,23224=>6052,23264=>6053,23267=>6054,23281=>6055,23254=>6056,23270=>6057,23256=>6058,23260=>6059,23305=>6060,23319=>6061,23318=>6062,23346=>6063,23351=>6064,23360=>6065,23573=>6066,23580=>6067,23386=>6068,23397=>6069,23411=>6070,23377=>6071,23379=>6072,23394=>6073,39541=>6074,39543=>6075,39544=>6076,39546=>6077,39551=>6078,39549=>6079,39552=>6080,39553=>6081,39557=>6082,39560=>6083,39562=>6084,39568=>6085,39570=>6086,39571=>6087,39574=>6088,39576=>6089,39579=>6090,39580=>6091,39581=>6092,39583=>6093,39584=>6094,39586=>6095,39587=>6096,39589=>6097,39591=>6098,32415=>6099,32417=>6100,32419=>6101,32421=>6102,32424=>6103,32425=>6104,32429=>6105,32432=>6106,32446=>6107,32448=>6108,32449=>6109,32450=>6110,32457=>6111,32459=>6112,32460=>6113,32464=>6114,32468=>6115,32471=>6116,32475=>6117,32480=>6118,32481=>6119,32488=>6120,32491=>6121,32494=>6122,32495=>6123,32497=>6124,32498=>6125,32525=>6126,32502=>6127,32506=>6128,32507=>6129,32510=>6130,32513=>6131,32514=>6132,32515=>6133,32519=>6134,32520=>6135,32523=>6136,32524=>6137,32527=>6138,32529=>6139,32530=>6140,32535=>6141,32537=>6142,32540=>6143,32539=>6144,32543=>6145,32545=>6146,32546=>6147,32547=>6148,32548=>6149,32549=>6150,32550=>6151,32551=>6152,32554=>6153,32555=>6154,32556=>6155,32557=>6156,32559=>6157,32560=>6158,32561=>6159,32562=>6160,32563=>6161,32565=>6162,12083=>6163,24186=>6163,30079=>6164,12078=>6165,24027=>6165,30014=>6166,37013=>6167,29582=>6168,29585=>6169,29614=>6170,29602=>6171,29599=>6172,29647=>6173,29634=>6174,29649=>6175,29623=>6176,29619=>6177,29632=>6178,29641=>6179,29640=>6180,29669=>6181,29657=>6182,39036=>6183,29706=>6184,29673=>6185,29671=>6186,29662=>6187,29626=>6188,29682=>6189,29711=>6190,29738=>6191,29787=>6192,29734=>6193,29733=>6194,29736=>6195,29744=>6196,29742=>6197,29740=>6198,29723=>6199,29722=>6200,29761=>6201,29788=>6202,29783=>6203,29781=>6204,29785=>6205,29815=>6206,29805=>6207,29822=>6208,29852=>6209,29838=>6210,29824=>6211,29825=>6212,29831=>6213,29835=>6214,29854=>6215,29864=>6216,29865=>6217,29840=>6218,29863=>6219,29906=>6220,29882=>6221,38890=>6222,38891=>6223,38892=>6224,26444=>6225,26451=>6226,26462=>6227,26440=>6228,26473=>6229,26533=>6230,26503=>6231,26474=>6232,26483=>6233,26520=>6234,26535=>6235,26485=>6236,26536=>6237,26526=>6238,26541=>6239,26507=>6240,26487=>6241,26492=>6242,26608=>6243,26633=>6244,26584=>6245,26634=>6246,26601=>6247,26544=>6248,26636=>6249,26585=>6250,26549=>6251,26586=>6252,26547=>6253,26589=>6254,26624=>6255,26563=>6256,26552=>6257,26594=>6258,26638=>6259,26561=>6260,26621=>6261,26674=>6262,26675=>6263,26720=>6264,26721=>6265,26702=>6266,26722=>6267,26692=>6268,26724=>6269,26755=>6270,26653=>6271,26709=>6272,26726=>6273,26689=>6274,26727=>6275,26688=>6276,26686=>6277,26698=>6278,26697=>6279,26665=>6280,26805=>6281,26767=>6282,26740=>6283,26743=>6284,26771=>6285,26731=>6286,26818=>6287,26990=>6288,26876=>6289,26911=>6290,26912=>6291,26873=>6292,26916=>6293,26864=>6294,26891=>6295,26881=>6296,26967=>6297,26851=>6298,26896=>6299,26993=>6300,26937=>6301,26976=>6302,26946=>6303,26973=>6304,27012=>6305,26987=>6306,27008=>6307,27032=>6308,27000=>6309,26932=>6310,27084=>6311,27015=>6312,27016=>6313,27086=>6314,27017=>6315,26982=>6316,26979=>6317,27001=>6318,27035=>6319,27047=>6320,27067=>6321,27051=>6322,27053=>6323,27092=>6324,27057=>6325,27073=>6326,27082=>6327,27103=>6328,27029=>6329,27104=>6330,27021=>6331,27135=>6332,27183=>6333,27117=>6334,27159=>6335,27160=>6336,27237=>6337,27122=>6338,27204=>6339,27198=>6340,27296=>6341,27216=>6342,27227=>6343,27189=>6344,27278=>6345,27257=>6346,27197=>6347,27176=>6348,27224=>6349,27260=>6350,27281=>6351,27280=>6352,27305=>6353,27287=>6354,27307=>6355,29495=>6356,29522=>6357,27521=>6358,27522=>6359,27527=>6360,27524=>6361,27538=>6362,27539=>6363,27533=>6364,27546=>6365,27547=>6366,27553=>6367,27562=>6368,36715=>6369,36717=>6370,36721=>6371,36722=>6372,36723=>6373,36725=>6374,36726=>6375,36728=>6376,36727=>6377,36729=>6378,36730=>6379,36732=>6380,36734=>6381,36737=>6382,36738=>6383,36740=>6384,36743=>6385,36747=>6386,36749=>6387,36750=>6388,36751=>6389,36760=>6390,36762=>6391,36558=>6392,25099=>6393,25111=>6394,25115=>6395,25119=>6396,25122=>6397,25121=>6398,25125=>6399,25124=>6400,25132=>6401,33255=>6402,29935=>6403,29940=>6404,29951=>6405,29967=>6406,29969=>6407,29971=>6408,12097=>6409,25908=>6409,26094=>6410,26095=>6411,26096=>6412,26122=>6413,26137=>6414,26482=>6415,26115=>6416,26133=>6417,26112=>6418,28805=>6419,26359=>6420,26141=>6421,26164=>6422,26161=>6423,26166=>6424,26165=>6425,32774=>6426,26207=>6427,26196=>6428,26177=>6429,26191=>6430,26198=>6431,26209=>6432,26199=>6433,26231=>6434,26244=>6435,26252=>6436,26279=>6437,26269=>6438,26302=>6439,26331=>6440,26332=>6441,26342=>6442,26345=>6443,36146=>6444,36147=>6445,36150=>6446,36155=>6447,36157=>6448,36160=>6449,36165=>6450,36166=>6451,36168=>6452,36169=>6453,36167=>6454,36173=>6455,36181=>6456,36185=>6457,35271=>6458,35274=>6459,35275=>6460,35276=>6461,35278=>6462,35279=>6463,35280=>6464,35281=>6465,29294=>6466,29343=>6467,29277=>6468,29286=>6469,29295=>6470,29310=>6471,29311=>6472,29316=>6473,29323=>6474,29325=>6475,29327=>6476,29330=>6477,25352=>6478,25394=>6479,25520=>6480,25663=>6481,25816=>6482,32772=>6483,27626=>6484,27635=>6485,27645=>6486,27637=>6487,27641=>6488,27653=>6489,27655=>6490,27654=>6491,27661=>6492,27669=>6493,27672=>6494,27673=>6495,27674=>6496,27681=>6497,27689=>6498,27684=>6499,27690=>6500,27698=>6501,25909=>6502,25941=>6503,25963=>6504,29261=>6505,29266=>6506,29270=>6507,29232=>6508,34402=>6509,21014=>6510,32927=>6511,32924=>6512,32915=>6513,32956=>6514,26378=>6515,32957=>6516,32945=>6517,32939=>6518,32941=>6519,32948=>6520,32951=>6521,32999=>6522,33000=>6523,33001=>6524,33002=>6525,32987=>6526,32962=>6527,32964=>6528,32985=>6529,32973=>6530,32983=>6531,26384=>6532,32989=>6533,33003=>6534,33009=>6535,33012=>6536,33005=>6537,33037=>6538,33038=>6539,33010=>6540,33020=>6541,26389=>6542,33042=>6543,35930=>6544,33078=>6545,33054=>6546,33068=>6547,33048=>6548,33074=>6549,33096=>6550,33100=>6551,33107=>6552,33140=>6553,33113=>6554,33114=>6555,33137=>6556,33120=>6557,33129=>6558,33148=>6559,33149=>6560,33133=>6561,33127=>6562,22605=>6563,23221=>6564,33160=>6565,33154=>6566,33169=>6567,28373=>6568,33187=>6569,33194=>6570,33228=>6571,26406=>6572,33226=>6573,33211=>6574,33217=>6575,33190=>6576,27428=>6577,27447=>6578,27449=>6579,27459=>6580,27462=>6581,27481=>6582,39121=>6583,39122=>6584,39123=>6585,39125=>6586,39129=>6587,39130=>6588,12110=>6589,27571=>6589,24384=>6590,27586=>6591,35315=>6592,26000=>6593,40785=>6594,26003=>6595,26044=>6596,26054=>6597,26052=>6598,26051=>6599,26060=>6600,26062=>6601,26066=>6602,26070=>6603,28800=>6604,28828=>6605,28822=>6606,28829=>6607,28859=>6608,28864=>6609,28855=>6610,28843=>6611,28849=>6612,28904=>6613,28874=>6614,28944=>6615,28947=>6616,28950=>6617,28975=>6618,28977=>6619,29043=>6620,29020=>6621,29032=>6622,28997=>6623,29042=>6624,29002=>6625,29048=>6626,29050=>6627,29080=>6628,29107=>6629,29109=>6630,29096=>6631,29088=>6632,29152=>6633,29140=>6634,29159=>6635,29177=>6636,29213=>6637,29224=>6638,28780=>6639,28952=>6640,29030=>6641,29113=>6642,25150=>6643,25149=>6644,25155=>6645,25160=>6646,25161=>6647,31035=>6648,31040=>6649,31046=>6650,31049=>6651,31067=>6652,31068=>6653,31059=>6654,31066=>6655,31074=>6656,31063=>6657,31072=>6658,31087=>6659,31079=>6660,31098=>6661,31109=>6662,31114=>6663,31130=>6664,31143=>6665,31155=>6666,24529=>6667,24528=>6668,24636=>6669,24669=>6670,24666=>6671,24679=>6672,24641=>6673,24665=>6674,24675=>6675,24747=>6676,24838=>6677,24845=>6678,24925=>6679,25001=>6680,24989=>6681,25035=>6682,25041=>6683,25094=>6684,32896=>6685,12160=>6686,32895=>6686,27795=>6687,27894=>6688,28156=>6689,30710=>6690,30712=>6691,30720=>6692,30729=>6693,30743=>6694,30744=>6695,30737=>6696,26027=>6697,30765=>6698,30748=>6699,30749=>6700,30777=>6701,30778=>6702,30779=>6703,30751=>6704,30780=>6705,30757=>6706,30764=>6707,30755=>6708,30761=>6709,30798=>6710,30829=>6711,30806=>6712,30807=>6713,30758=>6714,30800=>6715,30791=>6716,30796=>6717,30826=>6718,30875=>6719,30867=>6720,30874=>6721,30855=>6722,30876=>6723,30881=>6724,30883=>6725,30898=>6726,30905=>6727,30885=>6728,30932=>6729,30937=>6730,30921=>6731,30956=>6732,30962=>6733,30981=>6734,30964=>6735,30995=>6736,31012=>6737,31006=>6738,31028=>6739,40859=>6740,12235=>6741,40697=>6741,40699=>6742,40700=>6743,30449=>6744,30468=>6745,30477=>6746,30457=>6747,30471=>6748,30472=>6749,30490=>6750,30498=>6751,30489=>6752,30509=>6753,30502=>6754,30517=>6755,30520=>6756,30544=>6757,30545=>6758,30535=>6759,30531=>6760,30554=>6761,30568=>6762,30562=>6763,30565=>6764,30591=>6765,30605=>6766,30589=>6767,30592=>6768,30604=>6769,30609=>6770,30623=>6771,30624=>6772,30640=>6773,30645=>6774,30653=>6775,30010=>6776,30016=>6777,30030=>6778,30027=>6779,30024=>6780,30043=>6781,30066=>6782,30073=>6783,30083=>6784,32600=>6785,32609=>6786,32607=>6787,35400=>6788,32616=>6789,32628=>6790,32625=>6791,32633=>6792,32641=>6793,32638=>6794,30413=>6795,30437=>6796,34866=>6797,38021=>6798,38022=>6799,38023=>6800,38027=>6801,38026=>6802,38028=>6803,38029=>6804,38031=>6805,38032=>6806,38036=>6807,38039=>6808,38037=>6809,38042=>6810,38043=>6811,38044=>6812,38051=>6813,38052=>6814,38059=>6815,38058=>6816,38061=>6817,38060=>6818,38063=>6819,38064=>6820,38066=>6821,38068=>6822,38070=>6823,38071=>6824,38072=>6825,38073=>6826,38074=>6827,38076=>6828,38077=>6829,38079=>6830,38084=>6831,38088=>6832,38089=>6833,38090=>6834,38091=>6835,38092=>6836,38093=>6837,38094=>6838,38096=>6839,38097=>6840,38098=>6841,38101=>6842,38102=>6843,38103=>6844,38105=>6845,38104=>6846,38107=>6847,38110=>6848,38111=>6849,38112=>6850,38114=>6851,38116=>6852,38117=>6853,38119=>6854,38120=>6855,38122=>6856,38121=>6857,38123=>6858,38126=>6859,38127=>6860,38131=>6861,38132=>6862,38133=>6863,38135=>6864,38137=>6865,38140=>6866,38141=>6867,38143=>6868,38147=>6869,38146=>6870,38150=>6871,38151=>6872,38153=>6873,38154=>6874,38157=>6875,38158=>6876,38159=>6877,38162=>6878,38163=>6879,38164=>6880,38165=>6881,38166=>6882,38168=>6883,38171=>6884,38173=>6885,38174=>6886,38175=>6887,38178=>6888,38186=>6889,38187=>6890,38185=>6891,38188=>6892,38193=>6893,38194=>6894,38196=>6895,38198=>6896,38199=>6897,38200=>6898,38204=>6899,38206=>6900,38207=>6901,38210=>6902,38197=>6903,38212=>6904,38213=>6905,38214=>6906,38217=>6907,38220=>6908,38222=>6909,38223=>6910,38226=>6911,38227=>6912,38228=>6913,38230=>6914,38231=>6915,38232=>6916,38233=>6917,38235=>6918,38238=>6919,38239=>6920,38237=>6921,38241=>6922,38242=>6923,38244=>6924,38245=>6925,38246=>6926,38247=>6927,38248=>6928,38249=>6929,38250=>6930,38251=>6931,38252=>6932,38255=>6933,38257=>6934,38258=>6935,38259=>6936,38202=>6937,30695=>6938,30700=>6939,38601=>6940,31189=>6941,31213=>6942,31203=>6943,31211=>6944,31238=>6945,23879=>6946,31235=>6947,31234=>6948,31262=>6949,31252=>6950,31289=>6951,31287=>6952,31313=>6953,40655=>6954,39333=>6955,31344=>6956,30344=>6957,30350=>6958,30355=>6959,30361=>6960,30372=>6961,29918=>6962,29920=>6963,29996=>6964,40480=>6965,40482=>6966,40488=>6967,40489=>6968,40490=>6969,40491=>6970,40492=>6971,40498=>6972,40497=>6973,40502=>6974,40504=>6975,40503=>6976,40505=>6977,40506=>6978,40510=>6979,40513=>6980,40514=>6981,40516=>6982,40518=>6983,40519=>6984,40520=>6985,40521=>6986,40523=>6987,40524=>6988,40526=>6989,40529=>6990,40533=>6991,40535=>6992,40538=>6993,40539=>6994,40540=>6995,40542=>6996,40547=>6997,40550=>6998,40551=>6999,40552=>7000,40553=>7001,40554=>7002,40555=>7003,40556=>7004,40561=>7005,40557=>7006,40563=>7007,12135=>7008,30098=>7008,30100=>7009,30102=>7010,30112=>7011,30109=>7012,30124=>7013,30115=>7014,30131=>7015,30132=>7016,30136=>7017,30148=>7018,30129=>7019,30128=>7020,30147=>7021,30146=>7022,30166=>7023,30157=>7024,30179=>7025,30184=>7026,30182=>7027,30180=>7028,30187=>7029,30183=>7030,30211=>7031,30193=>7032,30204=>7033,30207=>7034,30224=>7035,30208=>7036,30213=>7037,30220=>7038,30231=>7039,30218=>7040,30245=>7041,30232=>7042,30229=>7043,30233=>7044,30235=>7045,30268=>7046,30242=>7047,30240=>7048,30272=>7049,30253=>7050,30256=>7051,30271=>7052,30261=>7053,30275=>7054,30270=>7055,30259=>7056,30285=>7057,30302=>7058,30292=>7059,30300=>7060,30294=>7061,30315=>7062,30319=>7063,32714=>7064,31462=>7065,31352=>7066,31353=>7067,31360=>7068,31366=>7069,31368=>7070,31381=>7071,31398=>7072,31392=>7073,31404=>7074,31400=>7075,31405=>7076,31411=>7077,34916=>7078,34921=>7079,34930=>7080,34941=>7081,34943=>7082,34946=>7083,34978=>7084,35014=>7085,34999=>7086,35004=>7087,35017=>7088,35042=>7089,35022=>7090,35043=>7091,35045=>7092,35057=>7093,35098=>7094,35068=>7095,35048=>7096,35070=>7097,35056=>7098,35105=>7099,35097=>7100,35091=>7101,35099=>7102,35082=>7103,35124=>7104,35115=>7105,35126=>7106,35137=>7107,35174=>7108,35195=>7109,12134=>7110,30091=>7110,32997=>7111,30386=>7112,30388=>7113,30684=>7114,12158=>7115,32786=>7115,32788=>7116,32790=>7117,32796=>7118,32800=>7119,32802=>7120,32805=>7121,32806=>7122,32807=>7123,32809=>7124,32808=>7125,32817=>7126,32779=>7127,32821=>7128,32835=>7129,32838=>7130,32845=>7131,32850=>7132,32873=>7133,32881=>7134,35203=>7135,39032=>7136,39040=>7137,39043=>7138,39049=>7139,39052=>7140,39053=>7141,39055=>7142,39060=>7143,39066=>7144,39067=>7145,39070=>7146,39071=>7147,39073=>7148,39074=>7149,39077=>7150,39078=>7151,12172=>7152,34381=>7152,34388=>7153,34412=>7154,34414=>7155,34431=>7156,34426=>7157,34428=>7158,34427=>7159,34472=>7160,34445=>7161,34443=>7162,34476=>7163,34461=>7164,34471=>7165,34467=>7166,34474=>7167,34451=>7168,34473=>7169,34486=>7170,34500=>7171,34485=>7172,34510=>7173,34480=>7174,34490=>7175,34481=>7176,34479=>7177,34505=>7178,34511=>7179,34484=>7180,34537=>7181,34545=>7182,34546=>7183,34541=>7184,34547=>7185,34512=>7186,34579=>7187,34526=>7188,34548=>7189,34527=>7190,34520=>7191,34513=>7192,34563=>7193,34567=>7194,34552=>7195,34568=>7196,34570=>7197,34573=>7198,34569=>7199,34595=>7200,34619=>7201,34590=>7202,34597=>7203,34606=>7204,34586=>7205,34622=>7206,34632=>7207,34612=>7208,34609=>7209,34601=>7210,34615=>7211,34623=>7212,34690=>7213,34594=>7214,34685=>7215,34686=>7216,34683=>7217,34656=>7218,34672=>7219,34636=>7220,34670=>7221,34699=>7222,34643=>7223,34659=>7224,34684=>7225,34660=>7226,34649=>7227,34661=>7228,34707=>7229,34735=>7230,34728=>7231,34770=>7232,34758=>7233,34696=>7234,34693=>7235,34733=>7236,34711=>7237,34691=>7238,34731=>7239,34789=>7240,34732=>7241,34741=>7242,34739=>7243,34763=>7244,34771=>7245,34749=>7246,34769=>7247,34752=>7248,34762=>7249,34779=>7250,34794=>7251,34784=>7252,34798=>7253,34838=>7254,34835=>7255,34814=>7256,34826=>7257,34843=>7258,34849=>7259,34873=>7260,34876=>7261,12152=>7262,32566=>7262,32578=>7263,32580=>7264,32581=>7265,33296=>7266,31482=>7267,31485=>7268,31496=>7269,31491=>7270,31492=>7271,31509=>7272,31498=>7273,31531=>7274,31503=>7275,31559=>7276,31544=>7277,31530=>7278,31513=>7279,31534=>7280,31537=>7281,31520=>7282,31525=>7283,31524=>7284,31539=>7285,31550=>7286,31518=>7287,31576=>7288,31578=>7289,31557=>7290,31605=>7291,31564=>7292,31581=>7293,31584=>7294,31598=>7295,31611=>7296,31586=>7297,31602=>7298,31601=>7299,31632=>7300,31654=>7301,31655=>7302,31672=>7303,31660=>7304,31645=>7305,31656=>7306,31621=>7307,31658=>7308,31644=>7309,31650=>7310,31659=>7311,31668=>7312,31697=>7313,31681=>7314,31692=>7315,31709=>7316,31706=>7317,31717=>7318,31718=>7319,31722=>7320,31756=>7321,31742=>7322,31740=>7323,31759=>7324,31766=>7325,31755=>7326,31775=>7327,31786=>7328,31782=>7329,31800=>7330,31809=>7331,31808=>7332,33278=>7333,33281=>7334,33282=>7335,33284=>7336,33260=>7337,34884=>7338,33313=>7339,33314=>7340,33315=>7341,33325=>7342,33327=>7343,33320=>7344,33323=>7345,33336=>7346,33339=>7347,33331=>7348,33332=>7349,33342=>7350,33348=>7351,33353=>7352,33355=>7353,33359=>7354,33370=>7355,33375=>7356,33384=>7357,34942=>7358,34949=>7359,34952=>7360,35032=>7361,35039=>7362,35166=>7363,32669=>7364,32671=>7365,32679=>7366,32687=>7367,32688=>7368,32690=>7369,31868=>7370,25929=>7371,31889=>7372,31901=>7373,31900=>7374,31902=>7375,31906=>7376,31922=>7377,31932=>7378,31933=>7379,31937=>7380,31943=>7381,31948=>7382,31949=>7383,31944=>7384,31941=>7385,31959=>7386,31976=>7387,12169=>7388,33390=>7388,26280=>7389,32703=>7390,32718=>7391,32725=>7392,32741=>7393,32737=>7394,32742=>7395,32745=>7396,32750=>7397,32755=>7398,12151=>7399,31992=>7399,32119=>7400,32166=>7401,32174=>7402,32327=>7403,32411=>7404,40632=>7405,40628=>7406,36211=>7407,36228=>7408,36244=>7409,36241=>7410,36273=>7411,36199=>7412,36205=>7413,35911=>7414,35913=>7415,37194=>7416,37200=>7417,37198=>7418,37199=>7419,37220=>7420,37218=>7421,37217=>7422,37232=>7423,37225=>7424,37231=>7425,37245=>7426,37246=>7427,37234=>7428,37236=>7429,37241=>7430,37260=>7431,37253=>7432,37264=>7433,37261=>7434,37265=>7435,37282=>7436,37283=>7437,37290=>7438,37293=>7439,37294=>7440,37295=>7441,37301=>7442,37300=>7443,37306=>7444,12183=>7445,35925=>7445,40574=>7446,36280=>7447,36331=>7448,36357=>7449,36441=>7450,36457=>7451,36277=>7452,36287=>7453,36284=>7454,36282=>7455,36292=>7456,36310=>7457,36311=>7458,36314=>7459,36318=>7460,36302=>7461,36303=>7462,36315=>7463,36294=>7464,36332=>7465,36343=>7466,36344=>7467,36323=>7468,36345=>7469,36347=>7470,36324=>7471,36361=>7472,36349=>7473,36372=>7474,36381=>7475,36383=>7476,36396=>7477,36398=>7478,36387=>7479,36399=>7480,36410=>7481,36416=>7482,36409=>7483,36405=>7484,36413=>7485,36401=>7486,36425=>7487,36417=>7488,36418=>7489,36433=>7490,36434=>7491,36426=>7492,36464=>7493,36470=>7494,36476=>7495,36463=>7496,36468=>7497,36485=>7498,36495=>7499,36500=>7500,36496=>7501,36508=>7502,36510=>7503,12184=>7504,35960=>7504,35970=>7505,35978=>7506,35973=>7507,35992=>7508,35988=>7509,26011=>7510,35286=>7511,35294=>7512,35290=>7513,35292=>7514,35301=>7515,35307=>7516,35311=>7517,35390=>7518,35622=>7519,38739=>7520,38633=>7521,38643=>7522,38639=>7523,38662=>7524,38657=>7525,38664=>7526,38671=>7527,38670=>7528,38698=>7529,38701=>7530,38704=>7531,38718=>7532,40832=>7533,40835=>7534,40837=>7535,40838=>7536,40839=>7537,40840=>7538,40841=>7539,40842=>7540,40844=>7541,40702=>7542,40715=>7543,40717=>7544,12203=>7545,38585=>7545,38588=>7546,38589=>7547,38606=>7548,38610=>7549,30655=>7550,38624=>7551,37518=>7552,37550=>7553,37576=>7554,37694=>7555,37738=>7556,37834=>7557,37775=>7558,37950=>7559,37995=>7560,40063=>7561,40066=>7562,40069=>7563,40070=>7564,40071=>7565,40072=>7566,31267=>7567,40075=>7568,40078=>7569,40080=>7570,40081=>7571,40082=>7572,40084=>7573,40085=>7574,40090=>7575,40091=>7576,40094=>7577,40095=>7578,40096=>7579,40097=>7580,40098=>7581,40099=>7582,40101=>7583,40102=>7584,40103=>7585,40104=>7586,40105=>7587,40107=>7588,40109=>7589,40110=>7590,40112=>7591,40113=>7592,40114=>7593,40115=>7594,40116=>7595,40117=>7596,40118=>7597,40119=>7598,40122=>7599,40123=>7600,40124=>7601,40125=>7602,40132=>7603,40133=>7604,40134=>7605,40135=>7606,40138=>7607,40139=>7608,40140=>7609,40141=>7610,40142=>7611,40143=>7612,40144=>7613,40147=>7614,40148=>7615,40149=>7616,40151=>7617,40152=>7618,40153=>7619,40156=>7620,40157=>7621,40159=>7622,40162=>7623,38780=>7624,38789=>7625,38801=>7626,38802=>7627,38804=>7628,38831=>7629,38827=>7630,38819=>7631,38834=>7632,38836=>7633,39601=>7634,39600=>7635,39607=>7636,40536=>7637,39606=>7638,39610=>7639,39612=>7640,39617=>7641,39616=>7642,39621=>7643,39618=>7644,39627=>7645,39628=>7646,39633=>7647,39749=>7648,39747=>7649,39751=>7650,39753=>7651,39752=>7652,39757=>7653,39761=>7654,39144=>7655,39181=>7656,39214=>7657,39253=>7658,39252=>7659,12221=>7660,39647=>7660,39649=>7661,39654=>7662,39663=>7663,39659=>7664,39675=>7665,39661=>7666,39673=>7667,39688=>7668,39695=>7669,39699=>7670,39711=>7671,39715=>7672,40637=>7673,40638=>7674,32315=>7675,40578=>7676,40583=>7677,40584=>7678,40587=>7679,40594=>7680,37846=>7681,40605=>7682,40607=>7683,40667=>7684,40668=>7685,40669=>7686,40672=>7687,40671=>7688,40674=>7689,40681=>7690,40679=>7691,40677=>7692,40682=>7693,40687=>7694,40738=>7695,40748=>7696,40751=>7697,40761=>7698,40759=>7699,40765=>7700,40766=>7701,40772=>7702,12295=>7703,30362=>7717,34297=>7718,31001=>7719,24859=>7720,39599=>7721,35158=>7722,22761=>7723,32631=>7724,25850=>7725,25943=>7726,38930=>7727,36774=>7728,32070=>7729,24171=>7730,32129=>7731,37770=>7732,35607=>7733,39165=>7734,23542=>7735,22577=>7736,39825=>7737,36649=>7738,12185=>7739,35997=>7739,37575=>7740,29437=>7741,20633=>7742,24970=>7743,32179=>7744,31558=>7745,30050=>7746,25987=>7747,24163=>7748,38281=>7749,37002=>7750,32232=>7751,36022=>7752,35722=>7753,36783=>7754,36782=>7755,27161=>7756,40009=>7757,30303=>7758,28693=>7759,28657=>7760,36051=>7761,25839=>7762,39173=>7763,25765=>7764,37474=>7765,37457=>7766,39361=>7767,35036=>7768,36001=>7769,21443=>7770,34870=>7771,27544=>7772,24922=>7773,24920=>7774,29158=>7775,33980=>7776,33369=>7777,20489=>7778,28356=>7779,21408=>7780,20596=>7781,28204=>7782,23652=>7783,35435=>7784,25881=>7785,25723=>7786,34796=>7787,39262=>7788,35730=>7789,32399=>7790,37855=>7791,29987=>7792,38369=>7793,39019=>7794,22580=>7795,22039=>7796,12199=>7797,38263=>7797,20767=>7798,33144=>7799,24288=>7800,26274=>7801,37396=>7802,12190=>7803,36554=>7803,24505=>7804,22645=>7805,38515=>7806,35183=>7807,31281=>7808,25074=>7809,35488=>7810,39425=>7811,36978=>7812,39347=>7813,12242=>7814,40786=>7814,29118=>7815,34909=>7816,34802=>7817,23541=>7818,30087=>7819,36490=>7820,31820=>7821,32162=>7822,37276=>7823,37604=>7824,38619=>7825,30990=>7826,20786=>7827,35320=>7828,34389=>7829,20659=>7830,30241=>7831,38358=>7832,21109=>7833,37656=>7834,32020=>7835,32189=>7836,36781=>7837,35422=>7838,36060=>7839,32880=>7840,24478=>7841,21474=>7842,36517=>7843,31428=>7844,37679=>7845,36948=>7846,24118=>7847,36024=>7848,25812=>7849,21934=>7850,37170=>7851,25763=>7852,33213=>7853,24986=>7854,35477=>7855,24392=>7856,30070=>7857,25803=>7858,40680=>7859,34153=>7860,27284=>7861,25623=>7862,23798=>7863,31153=>7864,23566=>7865,29128=>7866,37159=>7867,25973=>7868,28364=>7869,36958=>7870,32224=>7871,39003=>7872,40670=>7873,22666=>7874,38651=>7875,28593=>7876,37347=>7877,35519=>7878,35548=>7879,37336=>7880,38914=>7881,37664=>7882,35330=>7883,26481=>7884,21205=>7885,26847=>7886,20941=>7887,12222=>7888,39717=>7888,29346=>7889,29544=>7890,35712=>7891,36077=>7892,37709=>7893,37723=>7894,26039=>7895,32222=>7896,38538=>7897,23565=>7898,22136=>7899,38931=>7900,37389=>7901,22890=>7902,22702=>7903,40285=>7904,38989=>7905,35355=>7906,24801=>7907,39187=>7908,20818=>7909,29246=>7910,39180=>7911,36019=>7912,30332=>7913,32624=>7914,38309=>7915,31020=>7916,37353=>7917,29033=>7918,31684=>7919,36009=>7920,39151=>7921,35370=>7922,32033=>7923,12214=>7924,39131=>7924,35513=>7925,24290=>7926,36027=>7927,32027=>7928,22707=>7929,22894=>7930,24996=>7931,31966=>7932,35920=>7933,26963=>7934,37586=>7935,12213=>7936,39080=>7936,30219=>7937,39342=>7938,32299=>7939,35575=>7940,40179=>7941,33178=>7942,36667=>7943,25771=>7944,36628=>7945,36070=>7946,24489=>7947,36000=>7948,35331=>7949,23142=>7950,32283=>7951,35442=>7952,37411=>7953,33995=>7954,24185=>7955,36245=>7956,36123=>7957,23713=>7958,21083=>7959,37628=>7960,32177=>7961,23831=>7962,37804=>7963,25841=>7964,40255=>7965,38307=>7966,37499=>7967,20491=>7968,32102=>7969,40852=>7970,38799=>7971,36002=>7972,37390=>7973,28317=>7974,27083=>7975,36092=>7976,34865=>7977,39015=>7978,21102=>7979,38364=>7980,35264=>7981,39208=>7982,24931=>7983,36011=>7984,24291=>7985,35215=>7986,27512=>7987,12244=>7988,40860=>7988,38312=>7989,36556=>7990,35437=>7991,27331=>7992,36020=>7993,21130=>7994,36645=>7995,37707=>7996,22283=>7997,36942=>7998,39405=>7999,38867=>8000,28450=>8001,34399=>8002,38305=>8003,40372=>8004,36032=>8005,36703=>8006,40251=>8007,32005=>8008,22778=>8009,35703=>8010,28396=>8011,22057=>8012,33775=>8013,30059=>8014,21123=>8015,35441=>8016,25079=>8017,22750=>8018,27489=>8019,29872=>8020,36996=>8021,32233=>8022,35594=>8023,25582=>8024,36637=>8025,36036=>8026,31330=>8027,26371=>8028,29172=>8029,21295=>8030,35569=>8031,35496=>8032,32362=>8033,33911=>8034,28222=>8035,29554=>8036,36008=>8037,31117=>8038,25802=>8039,27231=>8040,31309=>8041,39249=>8042,35663=>8043,40388=>8044,32318=>8045,32221=>8046,26997=>8047,36655=>8048,32026=>8049,25824=>8050,24190=>8051,34186=>8052,21137=>8053,28639=>8054,35336=>8055,35352=>8056,38555=>8057,32380=>8058,32000=>8059,22846=>8060,33698=>8061,38960=>8062,36040=>8063,37440=>8064,20729=>8065,39381=>8066,27570=>8067,30435=>8068,22533=>8069,31627=>8070,38291=>8071,33393=>8072,32216=>8073,32365=>8074,27298=>8075,40572=>8076,25536=>8077,25791=>8078,31777=>8079,20745=>8080,34214=>8081,27323=>8082,37970=>8083,36368=>8084,36068=>8085,12178=>8086,35211=>8086,37749=>8087,33382=>8088,21133=>8089,39198=>8090,28472=>8091,28666=>8092,28567=>8093,23559=>8094,28479=>8095,34083=>8096,27123=>8097,22892=>8098,35611=>8099,37292=>8100,33184=>8101,28550=>8102,39509=>8103,23308=>8104,25898=>8105,37496=>8106,30703=>8107,20709=>8108,39171=>8109,32371=>8110,32094=>8111,36686=>8112,36611=>8113,38542=>8114,31680=>8115,28500=>8116,32080=>8117,35489=>8118,32202=>8119,37670=>8120,20677=>8121,35641=>8122,36914=>8123,29180=>8124,30433=>8125,21185=>8126,33686=>8127,39912=>8128,39514=>8129,32147=>8130,38968=>8131,37857=>8132,24465=>8133,30169=>8134,31478=>8135,31998=>8136,33290=>8137,39378=>8138,33289=>8139,25818=>8140,37624=>8141,25084=>8142,21127=>8143,40273=>8144,32121=>8145,35258=>8146,35363=>8147,32118=>8148,37406=>8149,36557=>8150,39423=>8151,38283=>8152,20977=>8153,38982=>8154,27579=>8155,35506=>8156,22718=>8157,25031=>8158,25715=>8159,24235=>8160,35122=>8161,35463=>8162,22602=>8163,20744=>8164,23532=>8165,31014=>8166,26336=>8167,34407=>8168,24011=>8169,31418=>8170,39243=>8171,28528=>8172,25844=>8173,38346=>8174,34847=>8175,33240=>8176,33802=>8177,20358=>8178,36084=>8179,34253=>8180,27396=>8181,25876=>8182,31811=>8183,38348=>8184,34349=>8185,28734=>8186,35733=>8187,25900=>8188,35261=>8189,25078=>8190,32412=>8191,29211=>8192,28651=>8193,25736=>8194,21214=>8195,28551=>8196,27138=>8197,37939=>8198,22744=>8199,39006=>8200,31852=>8201,38626=>8202,28757=>8203,35023=>8204,63975=>8204,39881=>8205,31150=>8206,40599=>8207,21426=>8208,21237=>8209,31019=>8210,27511=>8211,28701=>8212,38584=>8213,20486=>8214,32879=>8215,34030=>8216,36899=>8217,37934=>8218,24976=>8219,28451=>8220,31806=>8221,25986=>8222,33225=>8223,37832=>8224,25088=>8225,29001=>8226,32244=>8227,31975=>8228,20841=>8229,36635=>8230,35538=>8231,30274=>8232,36988=>8233,37904=>8234,29557=>8235,33256=>8236,37168=>8237,40023=>8238,36035=>8239,40801=>8240,37428=>8241,38728=>8242,23994=>8243,38936=>8244,39230=>8245,21129=>8246,12243=>8247,40845=>8247,32894=>8248,22184=>8249,31840=>8250,22751=>8251,25871=>8252,38580=>8253,27155=>8254,23105=>8255,25695=>8256,31757=>8257,34310=>8258,30439=>8259,39025=>8260,24300=>8261,29200=>8262,25796=>8263,28407=>8264,34396=>8265,39791=>8266,36034=>8267,37682=>8268,38520=>8269,39522=>8270,37569=>8271,23650=>8272,32311=>8273,24942=>8274,28670=>8275,32209=>8276,24018=>8277,25891=>8278,23423=>8279,28772=>8280,20098=>8281,25476=>8282,36650=>8283,20523=>8284,20374=>8285,28138=>8286,32184=>8287,35542=>8288,34367=>8289,32645=>8290,37007=>8291,38012=>8292,31854=>8293,39486=>8294,39409=>8295,32097=>8296,23229=>8297,29802=>8298,30908=>8299,34718=>8300,12218=>8301,39340=>8301,39393=>8302,21966=>8303,36023=>8304,12230=>8305,40613=>8305,36067=>8306,36993=>8307,30622=>8308,39237=>8309,34875=>8310,28415=>8311,35646=>8312,37672=>8313,37466=>8314,36031=>8315,37762=>8316,12200=>8317,38272=>8317,24758=>8318,20497=>8319,37683=>8320,22818=>8321,35598=>8322,24396=>8323,35219=>8324,32191=>8325,32236=>8326,24287=>8327,28357=>8328,25003=>8329,38313=>8330,40180=>8331,37528=>8332,35628=>8333,35584=>8334,30045=>8335,37385=>8336,32013=>8337,38627=>8338,25747=>8339,33126=>8340,24817=>8341,39719=>8342,39186=>8343,25836=>8344,33193=>8345,25862=>8346,37312=>8347,12227=>8348,40165=>8348,32886=>8349,22169=>8350,38007=>8351,37811=>8352,27320=>8353,29552=>8354,23527=>8355,25840=>8356,28632=>8357,37397=>8358,32016=>8359,33215=>8360,28611=>8361,36786=>8362,30247=>8363,35582=>8364,27472=>8365,40407=>8366,27590=>8367,22036=>8368,28442=>8369,30436=>8370,40848=>8371,36064=>8372,22132=>8373,40300=>8374,39449=>8375,39108=>8376,38971=>8377,36007=>8378,34315=>8379,24977=>8380,35413=>8381,28497=>8382,38935=>8383,25778=>8384,37610=>8385,20693=>8386,27192=>8387,35676=>8388,33229=>8389,12241=>8390,40778=>8390,39438=>8391,35912=>8392,21843=>8393,27683=>8394,35350=>8395,29309=>8396,37370=>8397,37467=>8398,36983=>8399,31805=>8400,35609=>8401,37666=>8402,37463=>8403,28154=>8404,35700=>8405,22649=>8406,27085=>8407,21958=>8408,22715=>8409,34196=>8410,25654=>8411,37740=>8412,27211=>8413,21932=>8414,20689=>8415,32761=>8416,31429=>8417,31434=>8418,27453=>8419,35242=>8420,23522=>8421,36629=>8422,27691=>8423,20670=>8424,38915=>8425,35531=>8426,24950=>8427,29898=>8428,31406=>8429,36264=>8430,21312=>8431,36544=>8432,39493=>8433,40818=>8434,39028=>8435,27402=>8436,21240=>8437,40306=>8438,30906=>8439,35731=>8440,39250=>8441,25854=>8442,32350=>8443,29105=>8444,38860=>8445,35469=>8446,32009=>8447,27054=>8448,32104=>8449,36575=>8450,37613=>8451,38287=>8452,28516=>8453,28753=>8454,34217=>8455,39955=>8456,36093=>8457,20632=>8458,21930=>8459,39479=>8460,25475=>8461,28544=>8462,27578=>8463,32023=>8464,31721=>8465,26348=>8466,38275=>8467,38493=>8468,36109=>8469,32341=>8470,20663=>8471,36062=>8472,29138=>8473,32057=>8474,36050=>8475,25448=>8476,25885=>8477,25086=>8478,35373=>8479,32051=>8480,23529=>8481,23352=>8482,33102=>8483,28402=>8484,32882=>8485,32361=>8486,21213=>8487,32854=>8488,24107=>8489,29509=>8490,28629=>8491,35433=>8492,26178=>8493,34645=>8494,23526=>8495,35672=>8496,39387=>8497,21218=>8498,36969=>8499,37323=>8500,39166=>8501,35222=>8502,35430=>8503,22781=>8504,29560=>8505,27166=>8506,36664=>8507,26360=>8508,36118=>8509,23660=>8510,34899=>8511,27193=>8512,31466=>8513,25976=>8514,24101=>8515,38617=>8516,35504=>8517,38918=>8518,35500=>8519,30889=>8520,29197=>8521,32114=>8522,39164=>8523,39686=>8524,32883=>8525,24939=>8526,38924=>8527,35359=>8528,35494=>8529,25851=>8530,34311=>8531,35380=>8532,32901=>8533,38614=>8534,38568=>8535,32143=>8536,27506=>8537,23403=>8538,25613=>8539,32302=>8540,29795=>8541,37782=>8542,29562=>8543,25787=>8544,33274=>8545,24907=>8546,25892=>8547,36010=>8548,30321=>8549,28760=>8550,22727=>8551,35674=>8552,35527=>8553,22022=>8554,28271=>8555,29145=>8556,28644=>8557,32295=>8558,35342=>8559,39472=>8560,35588=>8561,37563=>8562,38988=>8563,39636=>8564,26781=>8565,36028=>8566,37941=>8567,24307=>8568,32893=>8569,28916=>8570,37509=>8571,32113=>8572,38957=>8573,22294=>8574,22615=>8575,22296=>8576,38973=>8577,40213=>8578,39345=>8579,39389=>8580,27234=>8581,31402=>8582,35178=>8583,24398=>8584,28771=>8585,38929=>8586,33836=>8587,32178=>8588,12209=>8589,38859=>8589,36949=>8590,22285=>8591,29234=>8592,28656=>8593,32173=>8594,33894=>8595,20553=>8596,20702=>8597,32239=>8598,35586=>8599,34907=>8600,32862=>8601,32011=>8602,31337=>8603,21839=>8604,25790=>8605,34680=>8606,28198=>8607,31401=>8608,21978=>8609,37794=>8610,28879=>8611,35491=>8612,28961=>8613,34154=>8614,22626=>8615,38695=>8616,21209=>8617,35492=>8618,37675=>8619,29351=>8620,35186=>8621,32722=>8622,37521=>8623,25138=>8624,32048=>8625,34662=>8626,36676=>8627,23805=>8628,20448=>8629,29433=>8630,22151=>8631,37697=>8632,39854=>8633,32406=>8634,36066=>8635,37532=>8636,38289=>8637,39023=>8638,38570=>8639,29694=>8640,29563=>8641,32291=>8642,39201=>8643,25010=>8644,32171=>8645,38002=>8646,37129=>8647,35443=>8648,38911=>8649,38917=>8650,34157=>8651,22210=>8652,37559=>8653,26313=>8654,22063=>8655,21332=>8656,25406=>8657,33029=>8658,35559=>8659,23531=>8660,28681=>8661,35613=>8662,37573=>8663,37313=>8664,33288=>8665,37561=>8666,32137=>8667,38920=>8668,35377=>8669,32210=>8670,32396=>8671,36562=>8672,25080=>8673,36984=>8674,30316=>8675,32098=>8676,23416=>8677,21211=>8678,35426=>8679,23563=>8680,39348=>8681,35347=>8682,35338=>8683,36956=>8684,22739=>8685,40201=>8686,40232=>8687,21854=>8688,20126=>8689,35357=>8690,38329=>8691,40573=>8692,22196=>8693,38996=>8694,38331=>8695,33399=>8696,21421=>8697,30831=>8698,35578=>8699,39511=>8700,40230=>8701,26954=>8702,25562=>8703,30221=>8704,38525=>8705,30306=>8706,39178=>8707,27171=>8708,22575=>8709,35617=>8710,34277=>8711,29242=>8712,12212=>8713,38913=>8713,26989=>8714,33865=>8715,37291=>8716,37541=>8717,38948=>8718,36986=>8719,20736=>8720,34811=>8721,34269=>8722,20740=>8723,25014=>8724,32681=>8725,35427=>8726,35696=>8727,35516=>8728,35695=>8729,32377=>8730,34093=>8731,38512=>8732,37504=>8733,39154=>8734,38577=>8735,27387=>8736,23344=>8737,40441=>8738,25033=>8739,32403=>8740,29801=>8741,34722=>8742,29151=>8743,29074=>8744,34821=>8745,36111=>8746,31310=>8747,21938=>8748,25793=>8749,20653=>8750,30320=>8751,36404=>8752,20778=>8753,24962=>8754,37109=>8755,37438=>8756,29494=>8757,35480=>8758,36671=>8759,39192=>8760,12226=>8761,39770=>8761,28417=>8762,33287=>8763,23996=>8764,35486=>8765,39729=>8766,29508=>8767,35709=>8768,38928=>8769,39341=>8770,40219=>8771,28149=>8772,36677=>8773,22290=>8774,21729=>8775,22291=>8776,32227=>8777,36960=>8778,39000=>8779,32004=>8780,36493=>8781,38000=>8782,38322=>8783,38642=>8784,37142=>8785,38549=>8786,36939=>8787,34292=>8788,37270=>8789,26248=>8790,38620=>8791,36617=>8792,25890=>8793,26283=>8794,36106=>8795,36124=>8796,33247=>8797,38015=>8798,26839=>8799,31432=>8800,36012=>8801,25799=>8802,21063=>8803,28580=>8804,36042=>8805,36104=>8806,36555=>8807,37720=>8808,38296=>8809,35408=>8810,40779=>8811,20661=>8812,27656=>8813,30430=>8814,26028=>8815,36670=>8816,23940=>8817,26855=>8818,25136=>8819,32187=>8820,24373=>8821,28466=>8822,24115=>8823,36076=>8824,33081=>8825,36249=>8826,34756=>8827,36685=>8828,37754=>8829,36889=>8830,35998=>8831,37341=>8832,20597=>8833,35386=>8834,37806=>8835,38499=>8836,24128=>8837,30309=>8838,37165=>8839,35657=>8840,32340=>8841,32887=>8842,22519=>8843,34937=>8844,32025=>8845,25711=>8846,25842=>8847,24159=>8848,36074=>8849,28399=>8850,37912=>8851,32066=>8852,31278=>8853,33131=>8854,34886=>8855,35589=>8856,36600=>8857,30394=>8858,26205=>8859,39519=>8860,35576=>8861,35461=>8862,29165=>8863,30682=>8864,22225=>8865,36015=>8866,37956=>8867,31689=>8868,39376=>8869,23560=>8870,30938=>8871,36681=>8872,36090=>8873,27137=>8874,33674=>8875,35037=>8876,22941=>8877,22767=>8878,29376=>8879,37648=>8880,36101=>8881,22684=>8882,32180=>8883,35524=>8884,28310=>8885,28609=>8886,36039=>8887,28460=>8888,32156=>8889,32317=>8890,32305=>8891,37138=>8892,35419=>8893,32068=>8894,38013=>8895,21959=>8896,21401=>8897,21428=>8898,38760=>8899,36107=>8900,21293=>8901,21297=>8902,36094=>8903,21060=>8904,21132=>8905,21108=>8906,20660=>8907,20480=>8908,20630=>8909,20757=>8910,20738=>8911,20756=>8912,20796=>8913,20791=>8914,20712=>8915,20674=>8916,20795=>8917,20752=>8918,20794=>8919,20681=>8920,31988=>8921,40652=>8922,22213=>8923,40172=>8924,35131=>8925,33248=>8926,35329=>8927,35344=>8928,35340=>8929,35349=>8930,35635=>8931,35406=>8932,35365=>8933,35393=>8934,35382=>8935,35398=>8936,35412=>8937,35416=>8938,35410=>8939,35462=>8940,35460=>8941,35455=>8942,35440=>8943,35452=>8944,35445=>8945,35436=>8946,35438=>8947,35533=>8948,35554=>8949,35425=>8950,35482=>8951,35493=>8952,35473=>8953,35474=>8954,35535=>8955,35537=>8956,35529=>8957,35547=>8958,35543=>8959,35522=>8960,35510=>8961,35574=>8962,35563=>8963,35604=>8964,35585=>8965,35556=>8966,35565=>8967,35580=>8968,35571=>8969,35558=>8970,35566=>8971,35550=>8972,35624=>8973,35740=>8974,35606=>8975,35610=>8976,35600=>8977,35627=>8978,35629=>8979,35670=>8980,35673=>8981,35662=>8982,35742=>8983,35691=>8984,35734=>8985,38488=>8986,37178=>8987,37140=>8988,37172=>8989,37087=>8990,37174=>8991,37126=>8992,37192=>8993,33467=>8994,21233=>8995,24048=>8996,22538=>8997,22745=>8998,22754=>8999,22752=>9000,22746=>9001,22497=>9002,22607=>9003,22550=>9004,22610=>9005,22557=>9006,22628=>9007,34188=>9008,34131=>9009,34294=>9010,33703=>9011,33799=>9012,34031=>9013,33511=>9014,34338=>9015,34086=>9016,22603=>9017,29026=>9018,34136=>9019,34045=>9020,34126=>9021,34184=>9022,34234=>9023,29334=>9024,28366=>9025,34113=>9026,34254=>9027,34130=>9028,33984=>9029,33874=>9030,33892=>9031,33940=>9032,33845=>9033,34207=>9034,34133=>9035,40367=>9036,33939=>9037,32264=>9038,34118=>9039,34146=>9040,34078=>9041,39488=>9042,34362=>9043,37795=>9044,34167=>9045,34334=>9046,34298=>9047,34308=>9048,34282=>9049,34330=>9050,22889=>9051,23607=>9052,25451=>9053,25718=>9054,25759=>9055,25681=>9056,25692=>9057,25779=>9058,25860=>9059,25878=>9060,25847=>9061,25852=>9062,25883=>9063,22064=>9064,22072=>9065,22216=>9066,22182=>9067,21764=>9068,21692=>9069,22144=>9070,22109=>9071,22112=>9072,22069=>9073,22006=>9074,22118=>9075,22130=>9076,22156=>9077,22117=>9078,22044=>9079,22062=>9080,21993=>9081,22038=>9082,22208=>9083,22029=>9084,22195=>9085,22209=>9086,22127=>9087,36705=>9088,22198=>9089,22165=>9090,22279=>9091,24131=>9092,24172=>9093,24152=>9094,24151=>9095,23943=>9096,23796=>9097,23888=>9098,23852=>9099,23975=>9100,23968=>9101,23959=>9102,23821=>9103,23992=>9104,23937=>9105,24020=>9106,24480=>9107,29559=>9108,29505=>9109,29546=>9110,29499=>9111,29547=>9112,29568=>9113,29564=>9114,39136=>9115,39219=>9116,39145=>9117,39228=>9118,39146=>9119,39147=>9120,39149=>9121,39156=>9122,39177=>9123,39185=>9124,39195=>9125,39223=>9126,39231=>9127,39235=>9128,39240=>9129,39241=>9130,39242=>9131,39244=>9132,39266=>9133,24289=>9134,36065=>9135,25082=>9136,25006=>9137,24938=>9138,24894=>9139,24757=>9140,24884=>9141,25036=>9142,24927=>9143,25064=>9144,24827=>9145,24887=>9146,24818=>9147,24947=>9148,24860=>9149,24978=>9150,38274=>9151,38278=>9152,38344=>9153,38286=>9154,38292=>9155,38284=>9156,38373=>9157,38317=>9158,38315=>9159,39726=>9160,38316=>9161,38334=>9162,38326=>9163,39721=>9164,38335=>9165,38333=>9166,38332=>9167,38339=>9168,38347=>9169,38356=>9170,38352=>9171,38357=>9172,38366=>9173,28739=>9174,28505=>9175,28711=>9176,28696=>9177,28668=>9178,28039=>9179,28025=>9180,28254=>9181,28590=>9182,28687=>9183,28408=>9184,28527=>9185,28150=>9186,28543=>9187,28678=>9188,28576=>9189,28683=>9190,28775=>9191,28740=>9192,28677=>9193,28535=>9194,28704=>9195,28703=>9196,28722=>9197,28712=>9198,28765=>9199,39467=>9200,36999=>9201,36885=>9202,37008=>9203,23656=>9204,24371=>9205,23285=>9206,23255=>9207,23296=>9208,23149=>9209,23304=>9210,23372=>9211,23207=>9212,23291=>9213,23307=>9214,23329=>9215,23338=>9216,23321=>9217,39380=>9218,39391=>9219,39385=>9220,39478=>9221,39515=>9222,39377=>9223,39384=>9224,39501=>9225,39498=>9226,39394=>9227,39530=>9228,39439=>9229,39437=>9230,39429=>9231,39490=>9232,39469=>9233,39446=>9234,39489=>9235,39470=>9236,39480=>9237,39491=>9238,39492=>9239,39503=>9240,39525=>9241,39524=>9242,31993=>9243,32006=>9244,32002=>9245,32007=>9246,32008=>9247,32394=>9248,32028=>9249,32021=>9250,32019=>9251,32058=>9252,32050=>9253,32049=>9254,32272=>9255,32060=>9256,32064=>9257,32063=>9258,32093=>9259,32078=>9260,32115=>9261,32134=>9262,32131=>9263,32136=>9264,32190=>9265,32186=>9266,32203=>9267,32212=>9268,32196=>9269,32158=>9270,32172=>9271,32185=>9272,32163=>9273,32176=>9274,32199=>9275,32217=>9276,32215=>9277,32249=>9278,32242=>9279,32354=>9280,32230=>9281,32246=>9282,32241=>9283,32267=>9284,32225=>9285,32265=>9286,32285=>9287,32287=>9288,32286=>9289,32301=>9290,32266=>9291,32273=>9292,32381=>9293,32313=>9294,32309=>9295,32306=>9296,32326=>9297,32325=>9298,32392=>9299,32346=>9300,32338=>9301,32366=>9302,32382=>9303,32368=>9304,32367=>9305,32408=>9306,29859=>9307,29771=>9308,29903=>9309,38922=>9310,29885=>9311,29759=>9312,29833=>9313,29862=>9314,29908=>9315,29914=>9316,38873=>9317,38878=>9318,38876=>9319,27050=>9320,27370=>9321,26776=>9322,26838=>9323,27141=>9324,26783=>9325,27355=>9326,27379=>9327,27368=>9328,27359=>9329,27273=>9330,26895=>9331,27208=>9332,26984=>9333,27071=>9334,27194=>9335,27292=>9336,27410=>9337,27422=>9338,27357=>9339,27111=>9340,27407=>9341,27414=>9342,27372=>9343,27354=>9344,27384=>9345,27315=>9346,27367=>9347,27299=>9348,27347=>9349,27358=>9350,27556=>9351,27550=>9352,27566=>9353,27563=>9354,27567=>9355,36564=>9356,36571=>9357,36594=>9358,36603=>9359,36708=>9360,36601=>9361,36604=>9362,36587=>9363,36580=>9364,36706=>9365,36602=>9366,36606=>9367,36618=>9368,36615=>9369,36613=>9370,36626=>9371,36646=>9372,36638=>9373,36639=>9374,36636=>9375,36659=>9376,36678=>9377,36692=>9378,25108=>9379,25127=>9380,29964=>9381,26311=>9382,26308=>9383,26249=>9384,26326=>9385,36033=>9386,36016=>9387,36026=>9388,36029=>9389,36100=>9390,36018=>9391,36037=>9392,36112=>9393,36049=>9394,36058=>9395,36053=>9396,36075=>9397,36071=>9398,36091=>9399,35224=>9400,35244=>9401,35233=>9402,35263=>9403,35238=>9404,35247=>9405,35250=>9406,35255=>9407,27647=>9408,27660=>9409,27692=>9410,29272=>9411,26407=>9412,33110=>9413,33242=>9414,33051=>9415,33214=>9416,33121=>9417,33231=>9418,27487=>9419,39086=>9420,39087=>9421,39094=>9422,39100=>9423,39110=>9424,39112=>9425,36674=>9426,40783=>9427,26005=>9428,29036=>9429,29010=>9430,29079=>9431,29121=>9432,29148=>9433,29182=>9434,31152=>9435,31118=>9436,31146=>9437,25055=>9438,24932=>9439,25059=>9440,25095=>9441,28585=>9442,30959=>9443,30893=>9444,30824=>9445,30904=>9446,31018=>9447,31025=>9448,30820=>9449,30973=>9450,30951=>9451,30947=>9452,40853=>9453,30616=>9454,30558=>9455,30652=>9456,32646=>9457,32648=>9458,37330=>9459,37331=>9460,37332=>9461,37337=>9462,37335=>9463,37333=>9464,37367=>9465,37351=>9466,37348=>9467,37702=>9468,37365=>9469,37369=>9470,37384=>9471,37414=>9472,37445=>9473,37393=>9474,37392=>9475,37377=>9476,37415=>9477,37380=>9478,37413=>9479,37376=>9480,37434=>9481,37478=>9482,37431=>9483,37427=>9484,37461=>9485,37437=>9486,37432=>9487,37470=>9488,37484=>9489,37485=>9490,37439=>9491,37984=>9492,37424=>9493,37449=>9494,37448=>9495,37453=>9496,37422=>9497,37433=>9498,37944=>9499,37548=>9500,37536=>9501,37498=>9502,37546=>9503,37614=>9504,37583=>9505,37891=>9506,37603=>9507,37946=>9508,37553=>9509,37542=>9510,37799=>9511,37526=>9512,37580=>9513,37545=>9514,37877=>9515,37523=>9516,37503=>9517,37801=>9518,37530=>9519,37658=>9520,37547=>9521,37507=>9522,37899=>9523,37544=>9524,37539=>9525,37906=>9526,37688=>9527,37617=>9528,37847=>9529,37605=>9530,37616=>9531,37615=>9532,37608=>9533,37564=>9534,37597=>9535,37622=>9536,37926=>9537,37927=>9538,37571=>9539,37599=>9540,37606=>9541,37650=>9542,37638=>9543,37737=>9544,37659=>9545,37696=>9546,37633=>9547,37653=>9548,37678=>9549,37699=>9550,37639=>9551,37640=>9552,37663=>9553,37657=>9554,37733=>9555,37703=>9556,37750=>9557,37716=>9558,37732=>9559,37802=>9560,37744=>9561,37764=>9562,37860=>9563,37848=>9564,37928=>9565,37767=>9566,37836=>9567,37784=>9568,37816=>9569,37823=>9570,37798=>9571,37808=>9572,37813=>9573,37964=>9574,37858=>9575,37852=>9576,37853=>9577,37837=>9578,37854=>9579,37827=>9580,37831=>9581,37841=>9582,37908=>9583,37917=>9584,37879=>9585,37989=>9586,37907=>9587,37997=>9588,37920=>9589,38009=>9590,37881=>9591,37913=>9592,37962=>9593,37938=>9594,37951=>9595,37972=>9596,37987=>9597,37758=>9598,31329=>9599,40169=>9600,40182=>9601,40199=>9602,40198=>9603,40227=>9604,40327=>9605,40469=>9606,40221=>9607,40223=>9608,40421=>9609,40239=>9610,40409=>9611,40240=>9612,40258=>9613,40478=>9614,40275=>9615,40477=>9616,40288=>9617,40274=>9618,40435=>9619,40284=>9620,40289=>9621,40339=>9622,40298=>9623,40303=>9624,40329=>9625,40344=>9626,40346=>9627,40384=>9628,40357=>9629,40361=>9630,40386=>9631,40380=>9632,40474=>9633,40403=>9634,40410=>9635,40431=>9636,40422=>9637,40434=>9638,40440=>9639,40460=>9640,40442=>9641,40475=>9642,30308=>9643,30296=>9644,30311=>9645,30210=>9646,30278=>9647,30279=>9648,30281=>9649,30238=>9650,30267=>9651,30317=>9652,30318=>9653,30313=>9654,30322=>9655,31431=>9656,31414=>9657,35168=>9658,35123=>9659,35165=>9660,35143=>9661,35128=>9662,35172=>9663,30392=>9664,32814=>9665,32812=>9666,32889=>9667,32885=>9668,38919=>9669,38926=>9670,38927=>9671,38945=>9672,38940=>9673,28481=>9674,38950=>9675,38967=>9676,38990=>9677,38995=>9678,39027=>9679,39010=>9680,39001=>9681,39013=>9682,39020=>9683,39024=>9684,34787=>9685,34822=>9686,34566=>9687,34851=>9688,34806=>9689,34554=>9690,34799=>9691,34692=>9692,34832=>9693,34760=>9694,34833=>9695,34747=>9696,34766=>9697,32588=>9698,31716=>9699,31591=>9700,31849=>9701,31731=>9702,31744=>9703,31691=>9704,31836=>9705,31774=>9706,31787=>9707,31779=>9708,31850=>9709,31839=>9710,33380=>9711,33387=>9712,35018=>9713,32677=>9714,31986=>9715,31990=>9716,31965=>9717,32310=>9718,40617=>9719,36274=>9720,37317=>9721,37315=>9722,40570=>9723,36489=>9724,36428=>9725,36498=>9726,36474=>9727,36437=>9728,36506=>9729,36491=>9730,36499=>9731,36497=>9732,36513=>9733,36451=>9734,36522=>9735,36518=>9736,35316=>9737,35318=>9738,38746=>9739,38722=>9740,38717=>9741,38724=>9742,40788=>9743,40799=>9744,40793=>9745,40800=>9746,40796=>9747,40806=>9748,40812=>9749,40810=>9750,40823=>9751,12236=>9752,40701=>9752,40703=>9753,40713=>9754,35726=>9755,38014=>9756,37864=>9757,39799=>9758,39796=>9759,39809=>9760,39811=>9761,39822=>9762,40056=>9763,31308=>9764,39826=>9765,40031=>9766,39824=>9767,39853=>9768,39834=>9769,39850=>9770,39838=>9771,40045=>9772,39851=>9773,39837=>9774,40024=>9775,39873=>9776,40058=>9777,39985=>9778,39993=>9779,39971=>9780,39991=>9781,39872=>9782,39882=>9783,39879=>9784,39933=>9785,39894=>9786,39914=>9787,39915=>9788,39905=>9789,39908=>9790,39911=>9791,39901=>9792,39906=>9793,39920=>9794,39899=>9795,39924=>9796,39892=>9797,40029=>9798,39944=>9799,39952=>9800,39949=>9801,39954=>9802,39945=>9803,39935=>9804,39968=>9805,39986=>9806,39981=>9807,39976=>9808,39973=>9809,39977=>9810,39987=>9811,39998=>9812,40008=>9813,39995=>9814,39989=>9815,40005=>9816,40022=>9817,40020=>9818,40018=>9819,40039=>9820,38851=>9821,38845=>9822,38857=>9823,40379=>9824,39631=>9825,39638=>9826,39637=>9827,39768=>9828,39758=>9829,39255=>9830,39260=>9831,39714=>9832,40695=>9833,40690=>9834,35180=>9835,38342=>9836,37686=>9837,24390=>9838,34068=>9839,32404=>9840,40803=>9841,22137=>9842,40725=>9843,22081=>9844,39662=>9845,35079=>9846,31296=>9847,39091=>9848,38308=>9849,39693=>9850,36852=>9851,24409=>9852,31339=>9853,39138=>9854,20642=>9855,34193=>9856,20760=>9857,25458=>9858,21067=>9859,30543=>9860,32397=>9861,26310=>9862,30637=>9863,12228=>9864,40565=>9864,22217=>9865,40692=>9866,28635=>9867,25054=>9868,30663=>9869,28720=>9870,40629=>9871,34890=>9872,38370=>9873,38854=>9874,31844=>9875,32308=>9876,38822=>9877,40623=>9878,22220=>9879,39089=>9880,27311=>9881,32590=>9882,31984=>9883,20418=>9884,32363=>9885,40569=>9886,22190=>9887,39706=>9888,33903=>9889,31142=>9890,31858=>9891,39634=>9892,38587=>9893,32251=>9894,35069=>9895,30787=>9896,8560=>9897,8561=>9898,8562=>9899,8563=>9900,8564=>9901,8565=>9902,8566=>9903,8567=>9904,8568=>9905,8569=>9906,714=>9907,715=>9908,729=>9909,8211=>9910,8213=>9911,8229=>9912,8245=>9913,8453=>9914,8457=>9915,8598=>9916,8599=>9917,8600=>9918,8601=>9919,8725=>9920,8735=>9921,8739=>9922,8786=>9923,8806=>9924,8807=>9925,8895=>9926,9552=>9927,9553=>9928,9554=>9929,9555=>9930,9556=>9931,9557=>9932,9558=>9933,9559=>9934,9560=>9935,9561=>9936,9562=>9937,9563=>9938,9564=>9939,9565=>9940,9566=>9941,9567=>9942,9568=>9943,9569=>9944,9570=>9945,9571=>9946,9572=>9947,9573=>9948,9574=>9949,9575=>9950,9576=>9951,9577=>9952,9578=>9953,9579=>9954,9580=>9955,9581=>9956,9582=>9957,9583=>9958,9584=>9959,9585=>9960,9586=>9961,9587=>9962,9601=>9963,9602=>9964,9603=>9965,9604=>9966,9605=>9967,9606=>9968,9607=>9969,9608=>9970,9609=>9971,9610=>9972,9611=>9973,9612=>9974,9613=>9975,9614=>9976,9615=>9977,9619=>9978,9620=>9979,9621=>9980,9660=>9981,9661=>9982,9698=>9983,9699=>9984,9700=>9985,9701=>9986,9737=>9987,8853=>9988,12306=>9989,12317=>9990,12318=>9991,12321=>9992,12322=>9993,12323=>9994,12324=>9995,12325=>9996,12326=>9997,12327=>9998,12328=>9999,12329=>10000,12963=>10001,13198=>10002,13199=>10003,13212=>10004,13213=>10005,13214=>10006,13217=>10007,13252=>10008,13262=>10009,13265=>10010,13266=>10011,13269=>10012,65072=>10013,65506=>10014,65508=>10015,8481=>10016,12849=>10017,8208=>10018,12540=>10019,12443=>10020,12444=>10021,12541=>10022,12542=>10023,12294=>10024,12445=>10025,12446=>10026,65097=>10027,65098=>10028,65099=>10029,65100=>10030,65101=>10031,65102=>10032,65103=>10033,65104=>10034,65105=>10035,65106=>10036,65108=>10037,65109=>10038,65110=>10039,65111=>10040,65113=>10041,65114=>10042,65115=>10043,65116=>10044,65117=>10045,65118=>10046,65119=>10047,65120=>10048,65121=>10049,65122=>10050,65123=>10051,65124=>10052,65125=>10053,65126=>10054,65128=>10055,65129=>10056,65130=>10057,65131=>10058,12350=>10059,59367=>10059,12272=>10060,59368=>10060,12273=>10061,59369=>10061,12274=>10062,59370=>10062,12275=>10063,59371=>10063,12276=>10064,59372=>10064,12277=>10065,59373=>10065,12278=>10066,59374=>10066,12279=>10067,59375=>10067,12280=>10068,59376=>10068,12281=>10069,59377=>10069,12282=>10070,59378=>10070,12283=>10071,59379=>10071,19970=>10072,19972=>10073,19973=>10074,19974=>10075,19983=>10076,19986=>10077,19991=>10078,19999=>10079,20000=>10080,20001=>10081,20003=>10082,20006=>10083,20009=>10084,20014=>10085,20015=>10086,20017=>10087,20019=>10088,20021=>10089,20023=>10090,20028=>10091,20032=>10092,20033=>10093,20034=>10094,20036=>10095,20038=>10096,20042=>10097,20049=>10098,20053=>10099,20055=>10100,20058=>10101,20059=>10102,20066=>10103,20067=>10104,20068=>10105,20069=>10106,20071=>10107,20072=>10108,20074=>10109,20075=>10110,20076=>10111,20077=>10112,20078=>10113,20079=>10114,20082=>10115,20084=>10116,20085=>10117,20086=>10118,20087=>10119,20088=>10120,20089=>10121,20090=>10122,20091=>10123,20092=>10124,20093=>10125,20095=>10126,20096=>10127,20097=>10128,20099=>10129,20100=>10130,12037=>10131,20101=>10131,20103=>10132,20106=>10133,20112=>10134,20118=>10135,20119=>10136,20121=>10137,20124=>10138,20125=>10139,20131=>10140,20138=>10141,20143=>10142,20144=>10143,20145=>10144,20148=>10145,20150=>10146,20151=>10147,20152=>10148,20153=>10149,20156=>10150,20157=>10151,20158=>10152,20168=>10153,20172=>10154,20175=>10155,20176=>10156,20178=>10157,20186=>10158,20187=>10159,20188=>10160,20192=>10161,20194=>10162,20198=>10163,20199=>10164,20201=>10165,20205=>10166,20206=>10167,20207=>10168,20209=>10169,20212=>10170,20216=>10171,20217=>10172,20218=>10173,20220=>10174,20222=>10175,20224=>10176,20226=>10177,20227=>10178,20228=>10179,20229=>10180,20230=>10181,20231=>10182,20232=>10183,20235=>10184,20236=>10185,20242=>10186,20243=>10187,20244=>10188,20245=>10189,20246=>10190,20252=>10191,20253=>10192,20257=>10193,20259=>10194,20264=>10195,20265=>10196,20268=>10197,20269=>10198,20270=>10199,20273=>10200,20275=>10201,20277=>10202,20279=>10203,20281=>10204,20283=>10205,20286=>10206,20287=>10207,20288=>10208,20289=>10209,20290=>10210,20292=>10211,20293=>10212,20295=>10213,20296=>10214,20297=>10215,20298=>10216,20299=>10217,20300=>10218,20306=>10219,20308=>10220,20310=>10221,20321=>10222,20322=>10223,20326=>10224,20328=>10225,20330=>10226,20331=>10227,20333=>10228,20334=>10229,20337=>10230,20338=>10231,20341=>10232,20343=>10233,20344=>10234,20345=>10235,20346=>10236,20349=>10237,20352=>10238,20353=>10239,20354=>10240,20357=>10241,20359=>10242,20362=>10243,20364=>10244,20366=>10245,20368=>10246,20370=>10247,20371=>10248,20373=>10249,20376=>10250,20377=>10251,20378=>10252,20380=>10253,20382=>10254,20383=>10255,20385=>10256,20386=>10257,20388=>10258,20395=>10259,20397=>10260,20400=>10261,20401=>10262,20402=>10263,20403=>10264,20404=>10265,20406=>10266,20407=>10267,20408=>10268,20409=>10269,20410=>10270,20411=>10271,20412=>10272,20413=>10273,20414=>10274,20416=>10275,20417=>10276,20422=>10277,20423=>10278,20424=>10279,20425=>10280,20427=>10281,20428=>10282,20429=>10283,20434=>10284,20435=>10285,20436=>10286,20437=>10287,20438=>10288,20441=>10289,20443=>10290,20450=>10291,20452=>10292,20453=>10293,20455=>10294,20459=>10295,20460=>10296,20464=>10297,20466=>10298,20468=>10299,20469=>10300,20470=>10301,20471=>10302,20473=>10303,20475=>10304,20476=>10305,20477=>10306,20479=>10307,20481=>10308,20482=>10309,20483=>10310,20484=>10311,20485=>10312,20487=>10313,20488=>10314,20490=>10315,20494=>10316,20496=>10317,20499=>10318,20501=>10319,20502=>10320,20503=>10321,20507=>10322,20509=>10323,20510=>10324,20512=>10325,20514=>10326,20515=>10327,20516=>10328,20519=>10329,20527=>10330,20528=>10331,20529=>10332,20530=>10333,20531=>10334,20532=>10335,20533=>10336,20534=>10337,20535=>10338,20536=>10339,20537=>10340,20539=>10341,20541=>10342,20543=>10343,20544=>10344,20545=>10345,20546=>10346,20548=>10347,20549=>10348,20550=>10349,20554=>10350,20555=>10351,20557=>10352,20560=>10353,20561=>10354,20562=>10355,20563=>10356,20564=>10357,20566=>10358,20567=>10359,20568=>10360,20569=>10361,20571=>10362,20573=>10363,20574=>10364,20575=>10365,20576=>10366,20577=>10367,20578=>10368,20579=>10369,20580=>10370,20582=>10371,20583=>10372,20584=>10373,20585=>10374,20586=>10375,20587=>10376,20589=>10377,20590=>10378,20591=>10379,20592=>10380,20593=>10381,20594=>10382,20595=>10383,20600=>10384,20601=>10385,20602=>10386,20604=>10387,20605=>10388,20609=>10389,20610=>10390,20611=>10391,20612=>10392,20614=>10393,20615=>10394,20617=>10395,20618=>10396,20619=>10397,20620=>10398,20622=>10399,20623=>10400,20624=>10401,20625=>10402,20626=>10403,20627=>10404,20628=>10405,20629=>10406,20631=>10407,20634=>10408,20635=>10409,20636=>10410,20637=>10411,20638=>10412,20639=>10413,20640=>10414,20641=>10415,20644=>10416,20646=>10417,20650=>10418,20651=>10419,20654=>10420,20655=>10421,20656=>10422,20657=>10423,20662=>10424,20664=>10425,20665=>10426,20668=>10427,20669=>10428,20671=>10429,20672=>10430,20673=>10431,20675=>10432,20676=>10433,20678=>10434,20679=>10435,20680=>10436,20682=>10437,20683=>10438,20684=>10439,20685=>10440,20686=>10441,20688=>10442,20690=>10443,20691=>10444,20692=>10445,20695=>10446,20696=>10447,20697=>10448,20699=>10449,20700=>10450,20701=>10451,20703=>10452,20704=>10453,20705=>10454,20706=>10455,20707=>10456,20708=>10457,20713=>10458,20714=>10459,20715=>10460,20719=>10461,20720=>10462,20721=>10463,20722=>10464,20724=>10465,20726=>10466,20727=>10467,20728=>10468,20730=>10469,20732=>10470,20733=>10471,20734=>10472,20735=>10473,20737=>10474,20739=>10475,20741=>10476,20746=>10477,20748=>10478,20749=>10479,20750=>10480,20751=>10481,20753=>10482,20755=>10483,20758=>10484,20759=>10485,20761=>10486,20762=>10487,20763=>10488,20764=>10489,20765=>10490,20766=>10491,20768=>10492,20770=>10493,20771=>10494,20772=>10495,20773=>10496,20774=>10497,20775=>10498,20776=>10499,20777=>10500,20779=>10501,20780=>10502,20781=>10503,20782=>10504,20783=>10505,20784=>10506,20785=>10507,20787=>10508,20788=>10509,20789=>10510,20790=>10511,20792=>10512,20793=>10513,20797=>10514,20798=>10515,20802=>10516,20807=>10517,20810=>10518,20812=>10519,20814=>10520,20815=>10521,20816=>10522,20819=>10523,20823=>10524,20824=>10525,20825=>10526,20827=>10527,20829=>10528,20830=>10529,20831=>10530,20832=>10531,20833=>10532,20835=>10533,20836=>10534,20838=>10535,20839=>10536,20842=>10537,20847=>10538,20850=>10539,20858=>10540,20862=>10541,20863=>10542,20867=>10543,20868=>10544,20870=>10545,20871=>10546,20874=>10547,20875=>10548,20878=>10549,20879=>10550,20880=>10551,20881=>10552,20883=>10553,20884=>10554,20888=>10555,20890=>10556,20893=>10557,20894=>10558,20895=>10559,20897=>10560,20899=>10561,20902=>10562,20903=>10563,20904=>10564,20905=>10565,20906=>10566,20909=>10567,20910=>10568,20916=>10569,20920=>10570,20921=>10571,20922=>10572,20926=>10573,20927=>10574,20929=>10575,20930=>10576,20931=>10577,20933=>10578,20936=>10579,20938=>10580,20942=>10581,20944=>10582,20946=>10583,20947=>10584,20948=>10585,20949=>10586,20950=>10587,20951=>10588,20952=>10589,20953=>10590,20954=>10591,20956=>10592,20958=>10593,20959=>10594,20962=>10595,20963=>10596,20965=>10597,20966=>10598,20967=>10599,20968=>10600,20969=>10601,20970=>10602,20972=>10603,20974=>10604,20978=>10605,20980=>10606,20983=>10607,20990=>10608,20996=>10609,20997=>10610,21001=>10611,21003=>10612,21004=>10613,21007=>10614,21008=>10615,21011=>10616,21012=>10617,21013=>10618,21020=>10619,21022=>10620,21023=>10621,21025=>10622,21026=>10623,21027=>10624,21029=>10625,21030=>10626,21031=>10627,21034=>10628,21036=>10629,21039=>10630,21041=>10631,21042=>10632,21044=>10633,21045=>10634,21052=>10635,21054=>10636,21061=>10637,21062=>10638,21064=>10639,21065=>10640,21070=>10641,21071=>10642,21074=>10643,21075=>10644,21077=>10645,21079=>10646,21080=>10647,21081=>10648,21082=>10649,21085=>10650,21087=>10651,21088=>10652,21090=>10653,21091=>10654,21092=>10655,21094=>10656,21096=>10657,21099=>10658,21100=>10659,21101=>10660,21104=>10661,21105=>10662,21107=>10663,21110=>10664,21111=>10665,21112=>10666,21113=>10667,21114=>10668,21115=>10669,21116=>10670,21118=>10671,21120=>10672,21124=>10673,21125=>10674,21126=>10675,21131=>10676,21134=>10677,21135=>10678,21138=>10679,21140=>10680,21141=>10681,21142=>10682,21143=>10683,21144=>10684,21145=>10685,21146=>10686,21148=>10687,21156=>10688,21157=>10689,21158=>10690,21159=>10691,21166=>10692,21167=>10693,21168=>10694,21172=>10695,21173=>10696,21174=>10697,21175=>10698,21176=>10699,21177=>10700,21178=>10701,21179=>10702,21180=>10703,21181=>10704,21184=>10705,21186=>10706,21188=>10707,21189=>10708,21190=>10709,21192=>10710,21194=>10711,21196=>10712,21197=>10713,21198=>10714,21199=>10715,21201=>10716,21203=>10717,21204=>10718,21207=>10719,21210=>10720,21212=>10721,21216=>10722,21217=>10723,21219=>10724,21221=>10725,21222=>10726,21223=>10727,21224=>10728,21225=>10729,21226=>10730,21227=>10731,21228=>10732,21229=>10733,21230=>10734,21231=>10735,21234=>10736,21235=>10737,21236=>10738,21238=>10739,21239=>10740,21243=>10741,21244=>10742,21245=>10743,21249=>10744,21250=>10745,21251=>10746,21252=>10747,21255=>10748,21257=>10749,21258=>10750,21259=>10751,21260=>10752,21262=>10753,21265=>10754,21266=>10755,21267=>10756,21268=>10757,21272=>10758,21275=>10759,21276=>10760,21278=>10761,21279=>10762,21282=>10763,21284=>10764,21285=>10765,21287=>10766,21288=>10767,21289=>10768,21291=>10769,21292=>10770,21296=>10771,21298=>10772,21299=>10773,21300=>10774,21301=>10775,21302=>10776,21303=>10777,12054=>10778,21304=>10778,21308=>10779,21309=>10780,21314=>10781,21316=>10782,21318=>10783,21323=>10784,21324=>10785,21325=>10786,21328=>10787,21336=>10788,21337=>10789,21339=>10790,21341=>10791,21349=>10792,21352=>10793,21354=>10794,21356=>10795,21357=>10796,21362=>10797,21366=>10798,21369=>10799,21371=>10800,21372=>10801,21373=>10802,21374=>10803,21376=>10804,21377=>10805,21379=>10806,21383=>10807,21384=>10808,21386=>10809,21390=>10810,21391=>10811,21392=>10812,21393=>10813,21394=>10814,21395=>10815,21396=>10816,21398=>10817,21399=>10818,21403=>10819,21404=>10820,21406=>10821,21409=>10822,21412=>10823,21415=>10824,21418=>10825,21419=>10826,21420=>10827,21423=>10828,21424=>10829,21425=>10830,21427=>10831,21429=>10832,21431=>10833,21432=>10834,21433=>10835,21434=>10836,21436=>10837,21437=>10838,21438=>10839,21440=>10840,21444=>10841,21445=>10842,21446=>10843,21447=>10844,21454=>10845,21455=>10846,21456=>10847,21458=>10848,21459=>10849,21461=>10850,21466=>10851,21468=>10852,21469=>10853,21470=>10854,21473=>10855,21479=>10856,21492=>10857,21498=>10858,21502=>10859,21503=>10860,21504=>10861,21506=>10862,21509=>10863,21511=>10864,21515=>10865,21524=>10866,21528=>10867,21529=>10868,21530=>10869,21532=>10870,21538=>10871,21540=>10872,21541=>10873,21546=>10874,21552=>10875,21555=>10876,21558=>10877,21559=>10878,21562=>10879,21565=>10880,21567=>10881,21569=>10882,21570=>10883,21572=>10884,21573=>10885,21575=>10886,21577=>10887,21580=>10888,21581=>10889,21582=>10890,21583=>10891,21585=>10892,21594=>10893,21597=>10894,21598=>10895,21599=>10896,21600=>10897,21601=>10898,21603=>10899,21605=>10900,21607=>10901,21609=>10902,21610=>10903,21611=>10904,21612=>10905,21613=>10906,21614=>10907,21615=>10908,21616=>10909,21620=>10910,21625=>10911,21626=>10912,21630=>10913,21631=>10914,21633=>10915,21635=>10916,21637=>10917,21639=>10918,21640=>10919,21641=>10920,21642=>10921,21645=>10922,21649=>10923,21651=>10924,21655=>10925,21656=>10926,21660=>10927,21662=>10928,21663=>10929,21664=>10930,21665=>10931,21666=>10932,21669=>10933,21678=>10934,21680=>10935,21682=>10936,21685=>10937,21686=>10938,21687=>10939,21689=>10940,21690=>10941,21694=>10942,21699=>10943,21701=>10944,21706=>10945,21707=>10946,21718=>10947,21720=>10948,21723=>10949,21728=>10950,21730=>10951,21731=>10952,21732=>10953,21739=>10954,21740=>10955,21743=>10956,21744=>10957,21745=>10958,21748=>10959,21749=>10960,21750=>10961,21751=>10962,21752=>10963,21753=>10964,21755=>10965,21758=>10966,21760=>10967,21762=>10968,21763=>10969,21765=>10970,21768=>10971,21770=>10972,21771=>10973,21772=>10974,21773=>10975,21774=>10976,21778=>10977,21779=>10978,21781=>10979,21782=>10980,21783=>10981,21784=>10982,21785=>10983,21786=>10984,21788=>10985,21789=>10986,21790=>10987,21791=>10988,21793=>10989,21797=>10990,21798=>10991,21800=>10992,21801=>10993,21803=>10994,21805=>10995,21810=>10996,21812=>10997,21813=>10998,21814=>10999,21816=>11000,21817=>11001,21818=>11002,21819=>11003,21821=>11004,21824=>11005,21826=>11006,21829=>11007,21831=>11008,21832=>11009,21835=>11010,21836=>11011,21837=>11012,21838=>11013,21841=>11014,21842=>11015,21844=>11016,21847=>11017,21848=>11018,21849=>11019,21850=>11020,21851=>11021,21853=>11022,21855=>11023,21856=>11024,21858=>11025,21859=>11026,21864=>11027,21865=>11028,21867=>11029,21871=>11030,21872=>11031,21873=>11032,21874=>11033,21875=>11034,21876=>11035,21881=>11036,21882=>11037,21885=>11038,21887=>11039,21893=>11040,21894=>11041,21900=>11042,21901=>11043,21902=>11044,21904=>11045,21906=>11046,21907=>11047,21909=>11048,21910=>11049,21911=>11050,21914=>11051,21915=>11052,21918=>11053,21920=>11054,21921=>11055,21922=>11056,21923=>11057,21924=>11058,21925=>11059,21926=>11060,21928=>11061,21929=>11062,21931=>11063,21933=>11064,21935=>11065,21936=>11066,21940=>11067,21942=>11068,21944=>11069,21946=>11070,21948=>11071,21951=>11072,21952=>11073,21953=>11074,21954=>11075,21955=>11076,21960=>11077,21962=>11078,21963=>11079,21967=>11080,21968=>11081,21973=>11082,21975=>11083,21976=>11084,21977=>11085,21979=>11086,21982=>11087,21984=>11088,21986=>11089,21991=>11090,21997=>11091,21998=>11092,22000=>11093,22001=>11094,22004=>11095,22008=>11096,22009=>11097,22010=>11098,22011=>11099,22012=>11100,22015=>11101,22018=>11102,22019=>11103,22020=>11104,22021=>11105,22023=>11106,22026=>11107,22027=>11108,22032=>11109,22033=>11110,22034=>11111,22035=>11112,22037=>11113,22041=>11114,22042=>11115,22045=>11116,22048=>11117,22049=>11118,22050=>11119,22053=>11120,22054=>11121,22056=>11122,22058=>11123,22059=>11124,22067=>11125,22071=>11126,22074=>11127,22076=>11128,22077=>11129,22078=>11130,22080=>11131,22082=>11132,22083=>11133,22084=>11134,22085=>11135,22086=>11136,22087=>11137,22088=>11138,22089=>11139,22090=>11140,22091=>11141,22095=>11142,22096=>11143,22097=>11144,22098=>11145,22099=>11146,22101=>11147,22102=>11148,22106=>11149,22107=>11150,22110=>11151,22111=>11152,22113=>11153,22115=>11154,22119=>11155,22125=>11156,22126=>11157,22128=>11158,22131=>11159,22133=>11160,22135=>11161,22138=>11162,22141=>11163,22142=>11164,22143=>11165,22145=>11166,22146=>11167,22147=>11168,22148=>11169,22152=>11170,22153=>11171,22154=>11172,22155=>11173,22157=>11174,22160=>11175,22161=>11176,22162=>11177,22164=>11178,22166=>11179,22167=>11180,22168=>11181,22170=>11182,22171=>11183,22172=>11184,22173=>11185,22174=>11186,22175=>11187,22176=>11188,22177=>11189,22178=>11190,22180=>11191,22181=>11192,22183=>11193,22185=>11194,22186=>11195,22187=>11196,22188=>11197,22189=>11198,22192=>11199,22193=>11200,22194=>11201,22197=>11202,22200=>11203,22201=>11204,22202=>11205,22203=>11206,22205=>11207,22206=>11208,22207=>11209,22211=>11210,22212=>11211,22214=>11212,22215=>11213,22219=>11214,22221=>11215,22222=>11216,22223=>11217,22224=>11218,22226=>11219,22227=>11220,22229=>11221,22230=>11222,22232=>11223,22233=>11224,22236=>11225,22243=>11226,22245=>11227,22246=>11228,22247=>11229,22248=>11230,22249=>11231,22250=>11232,22252=>11233,22254=>11234,22255=>11235,22258=>11236,22259=>11237,22262=>11238,22263=>11239,22264=>11240,22267=>11241,22268=>11242,22272=>11243,22273=>11244,22274=>11245,22277=>11246,22284=>11247,22286=>11248,22287=>11249,22288=>11250,22289=>11251,22292=>11252,22293=>11253,22295=>11254,22297=>11255,22298=>11256,22299=>11257,22301=>11258,22302=>11259,22304=>11260,22305=>11261,22306=>11262,22308=>11263,22309=>11264,22310=>11265,22311=>11266,22315=>11267,22321=>11268,22322=>11269,22324=>11270,22325=>11271,22326=>11272,22327=>11273,22328=>11274,22332=>11275,22333=>11276,22335=>11277,22337=>11278,22339=>11279,22340=>11280,22341=>11281,22342=>11282,22344=>11283,22345=>11284,22347=>11285,22354=>11286,22355=>11287,22356=>11288,22357=>11289,22358=>11290,22360=>11291,22361=>11292,22370=>11293,22371=>11294,22373=>11295,22375=>11296,22380=>11297,22382=>11298,22384=>11299,22385=>11300,22386=>11301,22388=>11302,22389=>11303,22392=>11304,22393=>11305,22394=>11306,22397=>11307,22398=>11308,22399=>11309,22400=>11310,22401=>11311,22407=>11312,22408=>11313,22409=>11314,22410=>11315,22413=>11316,22414=>11317,22415=>11318,22416=>11319,22417=>11320,22420=>11321,22421=>11322,22422=>11323,22423=>11324,22424=>11325,22425=>11326,22426=>11327,22428=>11328,22429=>11329,22430=>11330,22431=>11331,22437=>11332,22440=>11333,22442=>11334,22444=>11335,22447=>11336,22448=>11337,22449=>11338,22451=>11339,22453=>11340,22454=>11341,22455=>11342,22457=>11343,22458=>11344,22459=>11345,22460=>11346,22461=>11347,22462=>11348,22463=>11349,22464=>11350,22465=>11351,22468=>11352,22469=>11353,22470=>11354,22471=>11355,22472=>11356,22473=>11357,22474=>11358,22476=>11359,22477=>11360,22480=>11361,22481=>11362,22483=>11363,22486=>11364,22487=>11365,22491=>11366,22492=>11367,22494=>11368,22498=>11369,22499=>11370,22501=>11371,22502=>11372,22503=>11373,22504=>11374,22505=>11375,22506=>11376,22507=>11377,22508=>11378,22510=>11379,22512=>11380,22513=>11381,22514=>11382,22515=>11383,22517=>11384,22518=>11385,22523=>11386,22524=>11387,22526=>11388,22527=>11389,22529=>11390,22531=>11391,22532=>11392,22536=>11393,22537=>11394,22540=>11395,22542=>11396,22543=>11397,22544=>11398,22546=>11399,22547=>11400,22548=>11401,22551=>11402,22552=>11403,22554=>11404,22555=>11405,22556=>11406,22559=>11407,22562=>11408,22563=>11409,22565=>11410,22566=>11411,22567=>11412,22568=>11413,22569=>11414,22571=>11415,22572=>11416,22573=>11417,22574=>11418,22578=>11419,22579=>11420,22582=>11421,22583=>11422,22584=>11423,22585=>11424,22586=>11425,22587=>11426,22588=>11427,22589=>11428,22590=>11429,22591=>11430,22592=>11431,22593=>11432,22594=>11433,22595=>11434,22597=>11435,22598=>11436,22599=>11437,22600=>11438,22601=>11439,22606=>11440,22608=>11441,22611=>11442,22613=>11443,22614=>11444,22617=>11445,22618=>11446,22619=>11447,22620=>11448,22621=>11449,22623=>11450,22624=>11451,22625=>11452,22627=>11453,22630=>11454,22631=>11455,22632=>11456,22633=>11457,22634=>11458,22637=>11459,22638=>11460,22639=>11461,22640=>11462,22641=>11463,22642=>11464,22643=>11465,22644=>11466,22646=>11467,22647=>11468,22648=>11469,22650=>11470,22651=>11471,22652=>11472,22653=>11473,22655=>11474,22658=>11475,22660=>11476,22662=>11477,22663=>11478,22664=>11479,22667=>11480,22668=>11481,22669=>11482,22670=>11483,22671=>11484,22672=>11485,22673=>11486,22676=>11487,22677=>11488,22678=>11489,22679=>11490,22680=>11491,22683=>11492,22685=>11493,22688=>11494,22689=>11495,22690=>11496,22691=>11497,22692=>11498,22693=>11499,22694=>11500,22695=>11501,22698=>11502,22699=>11503,22700=>11504,22701=>11505,22703=>11506,22704=>11507,22705=>11508,22706=>11509,22708=>11510,22709=>11511,22710=>11512,22711=>11513,22712=>11514,22713=>11515,22714=>11516,22717=>11517,22719=>11518,22720=>11519,22722=>11520,22723=>11521,22724=>11522,22726=>11523,22728=>11524,22729=>11525,22730=>11526,22731=>11527,22732=>11528,22733=>11529,22734=>11530,22735=>11531,22736=>11532,22738=>11533,22740=>11534,22742=>11535,22743=>11536,22747=>11537,22748=>11538,22749=>11539,22753=>11540,22755=>11541,22757=>11542,22758=>11543,22759=>11544,22760=>11545,22762=>11546,22765=>11547,22769=>11548,22770=>11549,22772=>11550,22773=>11551,22775=>11552,22776=>11553,22779=>11554,22780=>11555,22782=>11556,22783=>11557,22784=>11558,22785=>11559,22787=>11560,22789=>11561,22790=>11562,22792=>11563,22793=>11564,12066=>11565,22794=>11565,22795=>11566,22796=>11567,22798=>11568,22800=>11569,22801=>11570,22802=>11571,22803=>11572,22807=>11573,22808=>11574,22811=>11575,22813=>11576,22814=>11577,22816=>11578,22817=>11579,22819=>11580,22822=>11581,22824=>11582,22828=>11583,22832=>11584,22834=>11585,22835=>11586,22837=>11587,22838=>11588,22843=>11589,22845=>11590,22847=>11591,22848=>11592,22851=>11593,22853=>11594,22854=>11595,22858=>11596,22860=>11597,22861=>11598,22864=>11599,22866=>11600,22867=>11601,22873=>11602,22875=>11603,22876=>11604,22877=>11605,22878=>11606,22879=>11607,22881=>11608,22883=>11609,22884=>11610,22886=>11611,22887=>11612,22888=>11613,22891=>11614,22893=>11615,22895=>11616,22896=>11617,22897=>11618,22898=>11619,22901=>11620,22903=>11621,22906=>11622,22907=>11623,22908=>11624,22910=>11625,22911=>11626,22912=>11627,22917=>11628,22921=>11629,22923=>11630,22924=>11631,22926=>11632,22927=>11633,22928=>11634,22929=>11635,22932=>11636,22933=>11637,22936=>11638,22938=>11639,22939=>11640,22940=>11641,22943=>11642,22944=>11643,22945=>11644,22946=>11645,22950=>11646,22951=>11647,22956=>11648,22957=>11649,22960=>11650,22961=>11651,22963=>11652,22964=>11653,22965=>11654,22966=>11655,22967=>11656,22968=>11657,22970=>11658,22972=>11659,22973=>11660,22975=>11661,22976=>11662,22977=>11663,22978=>11664,22979=>11665,22980=>11666,22981=>11667,22983=>11668,22984=>11669,22985=>11670,22988=>11671,22989=>11672,22990=>11673,22991=>11674,22997=>11675,22998=>11676,23001=>11677,23003=>11678,23006=>11679,23007=>11680,23008=>11681,23009=>11682,23010=>11683,23012=>11684,23014=>11685,23015=>11686,23017=>11687,23018=>11688,23019=>11689,23021=>11690,23022=>11691,23023=>11692,23024=>11693,23025=>11694,23026=>11695,23027=>11696,23028=>11697,23029=>11698,23030=>11699,23031=>11700,23032=>11701,23034=>11702,23036=>11703,23037=>11704,23038=>11705,23040=>11706,23042=>11707,23050=>11708,23051=>11709,23053=>11710,23054=>11711,23055=>11712,23056=>11713,23058=>11714,23060=>11715,23061=>11716,23062=>11717,23063=>11718,23065=>11719,23066=>11720,23067=>11721,23069=>11722,23070=>11723,23073=>11724,23074=>11725,23076=>11726,23078=>11727,23079=>11728,23080=>11729,23082=>11730,23083=>11731,23084=>11732,23085=>11733,23086=>11734,23087=>11735,23088=>11736,23091=>11737,23093=>11738,23095=>11739,23096=>11740,23097=>11741,23098=>11742,23099=>11743,23101=>11744,23102=>11745,23103=>11746,23106=>11747,23107=>11748,23108=>11749,23109=>11750,23111=>11751,23112=>11752,23115=>11753,23116=>11754,23117=>11755,23118=>11756,23119=>11757,23120=>11758,23121=>11759,23122=>11760,23123=>11761,23124=>11762,23126=>11763,23127=>11764,23128=>11765,23129=>11766,23131=>11767,23132=>11768,23133=>11769,23134=>11770,23135=>11771,23136=>11772,23137=>11773,23139=>11774,23140=>11775,23141=>11776,23144=>11777,23145=>11778,23147=>11779,23148=>11780,23150=>11781,23151=>11782,23152=>11783,23153=>11784,23154=>11785,23155=>11786,23160=>11787,23161=>11788,23163=>11789,23164=>11790,23165=>11791,23166=>11792,23168=>11793,23169=>11794,23170=>11795,23171=>11796,23172=>11797,23173=>11798,23174=>11799,23175=>11800,23176=>11801,23177=>11802,23178=>11803,23179=>11804,23180=>11805,23181=>11806,23182=>11807,23183=>11808,23184=>11809,23185=>11810,23187=>11811,23188=>11812,23189=>11813,23190=>11814,23191=>11815,23192=>11816,23193=>11817,23196=>11818,23197=>11819,23198=>11820,23199=>11821,23200=>11822,23201=>11823,23202=>11824,23203=>11825,23204=>11826,23205=>11827,23206=>11828,23208=>11829,23209=>11830,23211=>11831,23212=>11832,23213=>11833,23214=>11834,23215=>11835,23216=>11836,23217=>11837,23220=>11838,23222=>11839,23223=>11840,23225=>11841,23226=>11842,23227=>11843,23228=>11844,23231=>11845,23232=>11846,23235=>11847,23236=>11848,23237=>11849,23238=>11850,23239=>11851,23240=>11852,23242=>11853,23243=>11854,23245=>11855,23246=>11856,23247=>11857,23248=>11858,23249=>11859,23251=>11860,23253=>11861,23257=>11862,23258=>11863,23259=>11864,23261=>11865,23262=>11866,23263=>11867,23266=>11868,23268=>11869,23269=>11870,23271=>11871,23272=>11872,23274=>11873,23276=>11874,23277=>11875,23278=>11876,23279=>11877,23280=>11878,23282=>11879,23283=>11880,23284=>11881,23286=>11882,23287=>11883,23288=>11884,23289=>11885,23290=>11886,23292=>11887,23293=>11888,23294=>11889,23295=>11890,23297=>11891,23298=>11892,23299=>11893,23300=>11894,23301=>11895,23302=>11896,23303=>11897,23306=>11898,23309=>11899,23310=>11900,23311=>11901,23312=>11902,23313=>11903,23314=>11904,23315=>11905,23316=>11906,23317=>11907,23320=>11908,23322=>11909,23323=>11910,23324=>11911,23325=>11912,23326=>11913,23327=>11914,23328=>11915,23330=>11916,23331=>11917,23332=>11918,23333=>11919,23334=>11920,23335=>11921,23336=>11922,23337=>11923,23339=>11924,23340=>11925,23341=>11926,23342=>11927,23343=>11928,23345=>11929,23347=>11930,23349=>11931,23350=>11932,23353=>11933,23354=>11934,23355=>11935,23356=>11936,23357=>11937,23358=>11938,23359=>11939,23361=>11940,23362=>11941,23363=>11942,23364=>11943,23365=>11944,23366=>11945,23367=>11946,23368=>11947,23369=>11948,23370=>11949,23371=>11950,23373=>11951,23374=>11952,23375=>11953,23378=>11954,23382=>11955,23390=>11956,23392=>11957,23393=>11958,23399=>11959,23400=>11960,23405=>11961,23406=>11962,23407=>11963,23410=>11964,23412=>11965,23414=>11966,23415=>11967,23417=>11968,23419=>11969,23420=>11970,23422=>11971,23426=>11972,23430=>11973,23434=>11974,23437=>11975,23438=>11976,23440=>11977,23441=>11978,23442=>11979,23444=>11980,23446=>11981,23455=>11982,23463=>11983,23464=>11984,23465=>11985,23468=>11986,23469=>11987,23470=>11988,23471=>11989,23473=>11990,23474=>11991,23479=>11992,23482=>11993,23483=>11994,23484=>11995,23488=>11996,23489=>11997,23491=>11998,23496=>11999,23497=>12000,23498=>12001,23499=>12002,23501=>12003,23502=>12004,23503=>12005,23505=>12006,23508=>12007,23509=>12008,23510=>12009,23511=>12010,23512=>12011,23513=>12012,23514=>12013,23515=>12014,23516=>12015,23520=>12016,23523=>12017,23530=>12018,23533=>12019,23535=>12020,23537=>12021,23538=>12022,23539=>12023,23540=>12024,23543=>12025,23549=>12026,23550=>12027,23552=>12028,23554=>12029,23555=>12030,23557=>12031,23564=>12032,23568=>12033,23570=>12034,23571=>12035,23575=>12036,23577=>12037,23579=>12038,23582=>12039,23583=>12040,23584=>12041,23585=>12042,23587=>12043,23590=>12044,23592=>12045,23593=>12046,23594=>12047,23595=>12048,23597=>12049,23598=>12050,23599=>12051,23600=>12052,23602=>12053,23603=>12054,23605=>12055,23606=>12056,23619=>12057,23620=>12058,23622=>12059,23623=>12060,23628=>12061,23629=>12062,23634=>12063,23635=>12064,23636=>12065,23638=>12066,23639=>12067,23640=>12068,23642=>12069,23643=>12070,23644=>12071,23645=>12072,23647=>12073,23655=>12074,23657=>12075,23658=>12076,23659=>12077,23661=>12078,23664=>12079,23666=>12080,23667=>12081,23668=>12082,23669=>12083,23670=>12084,23671=>12085,23672=>12086,23675=>12087,23676=>12088,23677=>12089,23678=>12090,23680=>12091,23683=>12092,23684=>12093,23685=>12094,23686=>12095,23687=>12096,23689=>12097,23690=>12098,23691=>12099,23694=>12100,23695=>12101,23698=>12102,23699=>12103,23701=>12104,23709=>12105,23710=>12106,23711=>12107,23712=>12108,23716=>12109,23717=>12110,23718=>12111,23719=>12112,23720=>12113,23722=>12114,23726=>12115,23727=>12116,23728=>12117,23730=>12118,23732=>12119,23734=>12120,23737=>12121,23738=>12122,23739=>12123,23740=>12124,23742=>12125,23744=>12126,23746=>12127,23747=>12128,23749=>12129,23750=>12130,23751=>12131,23752=>12132,23753=>12133,23754=>12134,23756=>12135,23757=>12136,23758=>12137,23759=>12138,23760=>12139,23761=>12140,23763=>12141,23764=>12142,23765=>12143,23766=>12144,23767=>12145,23768=>12146,23770=>12147,23771=>12148,23772=>12149,23773=>12150,23774=>12151,23775=>12152,23776=>12153,23778=>12154,23779=>12155,23783=>12156,23785=>12157,23787=>12158,23788=>12159,23790=>12160,23791=>12161,23793=>12162,23794=>12163,23795=>12164,23797=>12165,23799=>12166,23800=>12167,23801=>12168,23802=>12169,23804=>12170,23806=>12171,23807=>12172,23808=>12173,23809=>12174,23812=>12175,23813=>12176,23816=>12177,23817=>12178,23818=>12179,23819=>12180,23820=>12181,23823=>12182,23824=>12183,23825=>12184,23826=>12185,23827=>12186,23829=>12187,23832=>12188,23833=>12189,23834=>12190,23836=>12191,23837=>12192,23839=>12193,23840=>12194,23841=>12195,23842=>12196,23843=>12197,23845=>12198,23848=>12199,23850=>12200,23851=>12201,23855=>12202,23856=>12203,23857=>12204,23858=>12205,23859=>12206,23861=>12207,23862=>12208,23863=>12209,23864=>12210,23865=>12211,23866=>12212,23867=>12213,23868=>12214,23871=>12215,23872=>12216,23873=>12217,23874=>12218,23875=>12219,23876=>12220,23877=>12221,23878=>12222,23880=>12223,23881=>12224,23885=>12225,23886=>12226,23887=>12227,23889=>12228,23890=>12229,23891=>12230,23892=>12231,23893=>12232,23894=>12233,23895=>12234,23897=>12235,23898=>12236,23900=>12237,23902=>12238,23903=>12239,23904=>12240,23905=>12241,23906=>12242,23907=>12243,23908=>12244,23909=>12245,23910=>12246,23911=>12247,23912=>12248,23914=>12249,23917=>12250,23918=>12251,23920=>12252,23921=>12253,23922=>12254,23923=>12255,23925=>12256,23926=>12257,23927=>12258,23928=>12259,23929=>12260,23930=>12261,23931=>12262,23932=>12263,23933=>12264,23934=>12265,23935=>12266,23936=>12267,23939=>12268,23941=>12269,23942=>12270,23944=>12271,23945=>12272,23946=>12273,23947=>12274,23948=>12275,23949=>12276,23950=>12277,23951=>12278,23952=>12279,23953=>12280,23954=>12281,23955=>12282,23956=>12283,23957=>12284,23958=>12285,23960=>12286,23962=>12287,23963=>12288,23964=>12289,23966=>12290,23967=>12291,23969=>12292,23970=>12293,23971=>12294,23972=>12295,23973=>12296,23974=>12297,23976=>12298,23977=>12299,23978=>12300,23979=>12301,23980=>12302,23981=>12303,23982=>12304,23983=>12305,23984=>12306,23985=>12307,23986=>12308,23987=>12309,23988=>12310,23989=>12311,23990=>12312,23993=>12313,23995=>12314,23997=>12315,23998=>12316,23999=>12317,24000=>12318,24001=>12319,24002=>12320,24003=>12321,24004=>12322,24006=>12323,24007=>12324,24008=>12325,24009=>12326,24010=>12327,24012=>12328,24014=>12329,24015=>12330,24016=>12331,24017=>12332,24019=>12333,24021=>12334,24022=>12335,24023=>12336,24024=>12337,24025=>12338,24026=>12339,24028=>12340,24031=>12341,24032=>12342,24035=>12343,24036=>12344,24042=>12345,24044=>12346,24045=>12347,24053=>12348,24054=>12349,24056=>12350,24057=>12351,24058=>12352,24059=>12353,24060=>12354,24063=>12355,24064=>12356,24068=>12357,24071=>12358,24073=>12359,24074=>12360,24075=>12361,24077=>12362,24078=>12363,24082=>12364,24083=>12365,24087=>12366,24094=>12367,24095=>12368,24096=>12369,24097=>12370,24098=>12371,24099=>12372,24100=>12373,24104=>12374,24105=>12375,24106=>12376,24108=>12377,24111=>12378,24112=>12379,24114=>12380,24116=>12381,24117=>12382,24121=>12383,24122=>12384,24126=>12385,24127=>12386,24129=>12387,24134=>12388,24135=>12389,24136=>12390,24137=>12391,24138=>12392,24139=>12393,24141=>12394,24142=>12395,24143=>12396,24144=>12397,24145=>12398,24146=>12399,24147=>12400,24150=>12401,24153=>12402,24154=>12403,24156=>12404,24157=>12405,24160=>12406,24164=>12407,24165=>12408,24166=>12409,24167=>12410,24168=>12411,24169=>12412,24170=>12413,24173=>12414,24174=>12415,24175=>12416,24176=>12417,24177=>12418,24181=>12419,24183=>12420,24193=>12421,24194=>12422,24195=>12423,24197=>12424,24200=>12425,24201=>12426,24204=>12427,24205=>12428,24206=>12429,24210=>12430,24216=>12431,24219=>12432,24221=>12433,24225=>12434,24226=>12435,24227=>12436,24228=>12437,24232=>12438,24233=>12439,24234=>12440,24236=>12441,24238=>12442,24239=>12443,24240=>12444,24241=>12445,24242=>12446,24244=>12447,24250=>12448,24251=>12449,24252=>12450,24253=>12451,24255=>12452,24256=>12453,24257=>12454,24258=>12455,24259=>12456,24260=>12457,24261=>12458,24262=>12459,24263=>12460,24264=>12461,24267=>12462,24268=>12463,24269=>12464,24270=>12465,24271=>12466,24272=>12467,24276=>12468,24277=>12469,24279=>12470,24280=>12471,24281=>12472,24282=>12473,24284=>12474,24285=>12475,24286=>12476,24292=>12477,24293=>12478,24294=>12479,24295=>12480,24297=>12481,24299=>12482,24301=>12483,24302=>12484,24303=>12485,24304=>12486,24305=>12487,24306=>12488,24309=>12489,24312=>12490,24313=>12491,24315=>12492,24316=>12493,24317=>12494,24325=>12495,24326=>12496,24327=>12497,24329=>12498,24332=>12499,24333=>12500,24334=>12501,24336=>12502,24338=>12503,24340=>12504,24342=>12505,24345=>12506,24346=>12507,24348=>12508,24349=>12509,24350=>12510,24353=>12511,24354=>12512,24355=>12513,24356=>12514,24360=>12515,24363=>12516,24364=>12517,24366=>12518,24368=>12519,24370=>12520,24372=>12521,24374=>12522,24375=>12523,24376=>12524,24379=>12525,24381=>12526,24382=>12527,24383=>12528,24385=>12529,24386=>12530,24387=>12531,24388=>12532,24389=>12533,24391=>12534,24393=>12535,24394=>12536,24395=>12537,24397=>12538,24399=>12539,24401=>12540,24404=>12541,24410=>12542,24411=>12543,24412=>12544,24414=>12545,24415=>12546,24416=>12547,24419=>12548,24421=>12549,24423=>12550,24424=>12551,24427=>12552,24430=>12553,24431=>12554,24434=>12555,24436=>12556,24437=>12557,24438=>12558,24440=>12559,24442=>12560,24445=>12561,24446=>12562,24447=>12563,24451=>12564,24454=>12565,24461=>12566,24462=>12567,24463=>12568,24467=>12569,24468=>12570,24470=>12571,24474=>12572,24475=>12573,24477=>12574,24479=>12575,24482=>12576,24483=>12577,24484=>12578,24485=>12579,24486=>12580,24487=>12581,24491=>12582,24492=>12583,24495=>12584,24496=>12585,24497=>12586,24498=>12587,24499=>12588,24500=>12589,24502=>12590,24504=>12591,24506=>12592,24507=>12593,24510=>12594,24511=>12595,24512=>12596,24513=>12597,24514=>12598,24519=>12599,24520=>12600,24522=>12601,24523=>12602,24526=>12603,24531=>12604,24532=>12605,24533=>12606,24538=>12607,24539=>12608,24540=>12609,24542=>12610,24543=>12611,24546=>12612,24547=>12613,24549=>12614,24550=>12615,24552=>12616,24553=>12617,24556=>12618,24559=>12619,24560=>12620,24562=>12621,24563=>12622,24564=>12623,24566=>12624,24567=>12625,24569=>12626,24570=>12627,24572=>12628,24583=>12629,24584=>12630,24585=>12631,24587=>12632,24588=>12633,24592=>12634,24593=>12635,24595=>12636,24599=>12637,24600=>12638,24602=>12639,24606=>12640,24607=>12641,24610=>12642,24611=>12643,24612=>12644,24620=>12645,24621=>12646,24622=>12647,24624=>12648,24625=>12649,24626=>12650,24627=>12651,24628=>12652,24630=>12653,24631=>12654,24632=>12655,24633=>12656,24634=>12657,24637=>12658,24638=>12659,24640=>12660,24644=>12661,24645=>12662,24646=>12663,24647=>12664,24648=>12665,24649=>12666,24650=>12667,24652=>12668,24654=>12669,24655=>12670,24657=>12671,24659=>12672,24660=>12673,24662=>12674,24663=>12675,24664=>12676,24667=>12677,24668=>12678,24670=>12679,24671=>12680,24672=>12681,24673=>12682,24677=>12683,24678=>12684,24686=>12685,24689=>12686,24690=>12687,24692=>12688,24693=>12689,24695=>12690,24702=>12691,24704=>12692,24705=>12693,24706=>12694,24709=>12695,24710=>12696,24711=>12697,24712=>12698,24714=>12699,24715=>12700,24718=>12701,24719=>12702,24720=>12703,24721=>12704,24723=>12705,24725=>12706,24727=>12707,24728=>12708,24729=>12709,24732=>12710,24734=>12711,24737=>12712,24738=>12713,24740=>12714,24741=>12715,24743=>12716,24745=>12717,24746=>12718,24750=>12719,24752=>12720,24755=>12721,24759=>12722,24761=>12723,24762=>12724,24765=>12725,24766=>12726,24767=>12727,24768=>12728,24769=>12729,24770=>12730,24771=>12731,24772=>12732,24775=>12733,24776=>12734,24777=>12735,24780=>12736,24781=>12737,24782=>12738,24783=>12739,24784=>12740,24786=>12741,24787=>12742,24788=>12743,24790=>12744,24791=>12745,24793=>12746,24795=>12747,24798=>12748,24802=>12749,24803=>12750,24804=>12751,24805=>12752,24810=>12753,24821=>12754,24823=>12755,24824=>12756,24828=>12757,24829=>12758,24830=>12759,24831=>12760,24834=>12761,24835=>12762,24836=>12763,24837=>12764,24839=>12765,24842=>12766,24843=>12767,24844=>12768,24848=>12769,24849=>12770,24850=>12771,24851=>12772,24852=>12773,24854=>12774,24855=>12775,24856=>12776,24857=>12777,24861=>12778,24862=>12779,24865=>12780,24866=>12781,24869=>12782,24872=>12783,24873=>12784,24874=>12785,24876=>12786,24877=>12787,24878=>12788,24879=>12789,24880=>12790,24881=>12791,24882=>12792,24883=>12793,24885=>12794,24886=>12795,24888=>12796,24889=>12797,24890=>12798,24891=>12799,24892=>12800,24893=>12801,24896=>12802,24897=>12803,24898=>12804,24899=>12805,24900=>12806,24901=>12807,24902=>12808,24903=>12809,24905=>12810,24909=>12811,24911=>12812,24912=>12813,24914=>12814,24915=>12815,24916=>12816,24918=>12817,24919=>12818,24921=>12819,24923=>12820,24924=>12821,24926=>12822,24928=>12823,24929=>12824,24933=>12825,24934=>12826,24937=>12827,24940=>12828,24941=>12829,24943=>12830,24945=>12831,24946=>12832,24948=>12833,24952=>12834,24953=>12835,24954=>12836,24955=>12837,24956=>12838,24957=>12839,24958=>12840,24959=>12841,24960=>12842,24961=>12843,24963=>12844,24964=>12845,24965=>12846,24966=>12847,24967=>12848,24968=>12849,24969=>12850,24972=>12851,24973=>12852,24975=>12853,24979=>12854,24981=>12855,24982=>12856,24983=>12857,24984=>12858,24985=>12859,24987=>12860,24988=>12861,24990=>12862,24991=>12863,24992=>12864,24993=>12865,24994=>12866,24995=>12867,24997=>12868,24998=>12869,25002=>12870,25005=>12871,25007=>12872,25008=>12873,25009=>12874,25011=>12875,25012=>12876,25013=>12877,25016=>12878,25017=>12879,25018=>12880,25019=>12881,25020=>12882,25021=>12883,25023=>12884,25024=>12885,25025=>12886,25027=>12887,25028=>12888,25029=>12889,25030=>12890,25037=>12891,25038=>12892,25039=>12893,25040=>12894,25043=>12895,25045=>12896,25046=>12897,25047=>12898,25048=>12899,25049=>12900,25050=>12901,25051=>12902,25052=>12903,25053=>12904,25056=>12905,25057=>12906,25058=>12907,25060=>12908,25061=>12909,25063=>12910,25065=>12911,25066=>12912,25067=>12913,25068=>12914,25069=>12915,25070=>12916,25071=>12917,25072=>12918,25073=>12919,25075=>12920,25076=>12921,25081=>12922,25083=>12923,25085=>12924,25089=>12925,25090=>12926,25091=>12927,25092=>12928,25093=>12929,25097=>12930,25107=>12931,25113=>12932,25116=>12933,25117=>12934,25118=>12935,25120=>12936,25123=>12937,25126=>12938,25128=>12939,25129=>12940,25131=>12941,25133=>12942,25135=>12943,25137=>12944,25141=>12945,12094=>12946,25142=>12946,25144=>12947,25145=>12948,25146=>12949,25147=>12950,25148=>12951,25154=>12952,25156=>12953,25157=>12954,25158=>12955,25162=>12956,25167=>12957,25168=>12958,25173=>12959,25174=>12960,25175=>12961,25177=>12962,25178=>12963,25180=>12964,25181=>12965,25182=>12966,25183=>12967,25184=>12968,25185=>12969,25186=>12970,25188=>12971,25189=>12972,25192=>12973,25201=>12974,25202=>12975,25204=>12976,25205=>12977,25207=>12978,25208=>12979,25210=>12980,25211=>12981,25213=>12982,25217=>12983,25218=>12984,25219=>12985,25221=>12986,25222=>12987,25223=>12988,25224=>12989,25227=>12990,25228=>12991,25229=>12992,25230=>12993,25231=>12994,25232=>12995,25236=>12996,25241=>12997,25244=>12998,25245=>12999,25246=>13000,25251=>13001,25254=>13002,25255=>13003,25257=>13004,25258=>13005,25261=>13006,25262=>13007,25263=>13008,25264=>13009,25266=>13010,25267=>13011,25268=>13012,25270=>13013,25271=>13014,25272=>13015,25274=>13016,25278=>13017,25280=>13018,25281=>13019,25283=>13020,25291=>13021,25295=>13022,25297=>13023,25301=>13024,25309=>13025,25310=>13026,25312=>13027,25313=>13028,25316=>13029,25322=>13030,25323=>13031,25328=>13032,25330=>13033,25333=>13034,25336=>13035,25337=>13036,25338=>13037,25339=>13038,25344=>13039,25347=>13040,25348=>13041,25349=>13042,25350=>13043,25354=>13044,25355=>13045,25356=>13046,25357=>13047,25359=>13048,25360=>13049,25362=>13050,25363=>13051,25364=>13052,25365=>13053,25367=>13054,25368=>13055,25369=>13056,25372=>13057,25382=>13058,25383=>13059,25385=>13060,25388=>13061,25389=>13062,25390=>13063,25392=>13064,25393=>13065,25395=>13066,25396=>13067,25397=>13068,25398=>13069,25399=>13070,25400=>13071,25403=>13072,25404=>13073,25407=>13074,25408=>13075,25409=>13076,25412=>13077,25415=>13078,25416=>13079,25418=>13080,25425=>13081,25426=>13082,25427=>13083,25428=>13084,25430=>13085,25431=>13086,25432=>13087,25433=>13088,25434=>13089,25435=>13090,25436=>13091,25437=>13092,25440=>13093,25444=>13094,25445=>13095,25446=>13096,25450=>13097,25452=>13098,25455=>13099,25456=>13100,25459=>13101,25460=>13102,25461=>13103,25464=>13104,25465=>13105,25468=>13106,25469=>13107,25470=>13108,25471=>13109,25473=>13110,25477=>13111,25478=>13112,25483=>13113,25485=>13114,25489=>13115,25491=>13116,25492=>13117,25493=>13118,25495=>13119,25497=>13120,25498=>13121,25499=>13122,25500=>13123,25501=>13124,25502=>13125,25503=>13126,25505=>13127,25508=>13128,25510=>13129,25515=>13130,25519=>13131,25521=>13132,25522=>13133,25525=>13134,25526=>13135,25529=>13136,25531=>13137,25533=>13138,25535=>13139,25537=>13140,25538=>13141,25539=>13142,25541=>13143,25543=>13144,25544=>13145,25546=>13146,25547=>13147,25548=>13148,25553=>13149,25555=>13150,25556=>13151,25557=>13152,25559=>13153,25560=>13154,25561=>13155,25563=>13156,25564=>13157,25565=>13158,25567=>13159,25570=>13160,25572=>13161,25573=>13162,25574=>13163,25575=>13164,25576=>13165,25579=>13166,25580=>13167,25583=>13168,25584=>13169,25585=>13170,25587=>13171,25589=>13172,25591=>13173,25593=>13174,25594=>13175,25595=>13176,25596=>13177,25598=>13178,25603=>13179,25604=>13180,25606=>13181,25607=>13182,25608=>13183,25609=>13184,25610=>13185,25614=>13186,25617=>13187,25618=>13188,25621=>13189,25622=>13190,25624=>13191,25625=>13192,25626=>13193,25629=>13194,25631=>13195,25634=>13196,25635=>13197,25636=>13198,25637=>13199,25639=>13200,25640=>13201,25641=>13202,25643=>13203,25646=>13204,25647=>13205,25648=>13206,25649=>13207,25650=>13208,25651=>13209,25653=>13210,25655=>13211,25656=>13212,25657=>13213,25659=>13214,25660=>13215,25662=>13216,25664=>13217,25666=>13218,25667=>13219,25673=>13220,25675=>13221,25676=>13222,25677=>13223,25678=>13224,25679=>13225,25680=>13226,25683=>13227,25685=>13228,25686=>13229,25687=>13230,25689=>13231,25690=>13232,25691=>13233,25693=>13234,25696=>13235,25697=>13236,25698=>13237,25699=>13238,25700=>13239,25701=>13240,25702=>13241,25704=>13242,25706=>13243,25707=>13244,25708=>13245,25710=>13246,25712=>13247,25713=>13248,25714=>13249,25716=>13250,25717=>13251,25719=>13252,25724=>13253,25725=>13254,25726=>13255,25727=>13256,25728=>13257,25729=>13258,25731=>13259,25734=>13260,25737=>13261,25738=>13262,25739=>13263,25740=>13264,25741=>13265,25742=>13266,25743=>13267,25744=>13268,25748=>13269,25751=>13270,25752=>13271,25754=>13272,25755=>13273,25756=>13274,25757=>13275,25760=>13276,25761=>13277,25762=>13278,25766=>13279,25767=>13280,25768=>13281,25770=>13282,25775=>13283,25777=>13284,25780=>13285,25782=>13286,25785=>13287,25789=>13288,25795=>13289,25798=>13290,25800=>13291,25801=>13292,25804=>13293,25807=>13294,25809=>13295,25811=>13296,25813=>13297,25814=>13298,25817=>13299,25819=>13300,25820=>13301,25821=>13302,25823=>13303,25825=>13304,25827=>13305,25829=>13306,25831=>13307,25832=>13308,25833=>13309,25834=>13310,25835=>13311,25837=>13312,25838=>13313,25843=>13314,25845=>13315,25846=>13316,25848=>13317,25849=>13318,25853=>13319,25855=>13320,25857=>13321,25858=>13322,25859=>13323,25861=>13324,25863=>13325,25864=>13326,25866=>13327,25867=>13328,25868=>13329,25869=>13330,25870=>13331,25872=>13332,25873=>13333,25875=>13334,25877=>13335,25879=>13336,25882=>13337,25884=>13338,25886=>13339,25887=>13340,25888=>13341,25889=>13342,25894=>13343,25895=>13344,25896=>13345,25897=>13346,25901=>13347,25904=>13348,25905=>13349,25906=>13350,25907=>13351,25911=>13352,25914=>13353,25916=>13354,25917=>13355,25920=>13356,25921=>13357,25922=>13358,25923=>13359,25924=>13360,25926=>13361,25927=>13362,25930=>13363,25931=>13364,25933=>13365,25934=>13366,25936=>13367,25938=>13368,25939=>13369,25940=>13370,25944=>13371,25946=>13372,25948=>13373,25951=>13374,25952=>13375,25953=>13376,25956=>13377,25957=>13378,25959=>13379,25960=>13380,25961=>13381,25962=>13382,25965=>13383,25966=>13384,25967=>13385,25969=>13386,25971=>13387,25974=>13388,25977=>13389,25978=>13390,25979=>13391,25980=>13392,25981=>13393,25982=>13394,25983=>13395,25984=>13396,25985=>13397,25988=>13398,25989=>13399,25990=>13400,25992=>13401,25993=>13402,25994=>13403,25997=>13404,25998=>13405,25999=>13406,26002=>13407,26004=>13408,26006=>13409,26008=>13410,26010=>13411,26013=>13412,26014=>13413,26016=>13414,26018=>13415,26019=>13416,26022=>13417,26024=>13418,26026=>13419,26030=>13420,26033=>13421,26034=>13422,26035=>13423,26036=>13424,26037=>13425,26038=>13426,26040=>13427,26042=>13428,26043=>13429,26046=>13430,26047=>13431,26048=>13432,26050=>13433,26055=>13434,26056=>13435,26057=>13436,26058=>13437,26061=>13438,26064=>13439,26065=>13440,26067=>13441,26068=>13442,26069=>13443,26072=>13444,26073=>13445,26074=>13446,26075=>13447,26076=>13448,26077=>13449,26078=>13450,26079=>13451,26081=>13452,26083=>13453,26084=>13454,26090=>13455,26091=>13456,26098=>13457,26099=>13458,26100=>13459,26101=>13460,26104=>13461,26105=>13462,26107=>13463,26108=>13464,26109=>13465,26110=>13466,26111=>13467,26113=>13468,26116=>13469,26117=>13470,26119=>13471,26120=>13472,26121=>13473,26123=>13474,26125=>13475,26128=>13476,26129=>13477,26130=>13478,26134=>13479,26135=>13480,26136=>13481,26138=>13482,26139=>13483,26140=>13484,26142=>13485,26145=>13486,26146=>13487,26147=>13488,26148=>13489,26150=>13490,26153=>13491,26154=>13492,26155=>13493,26156=>13494,26158=>13495,26160=>13496,26162=>13497,26163=>13498,26167=>13499,26168=>13500,26169=>13501,26170=>13502,26171=>13503,26173=>13504,26175=>13505,26176=>13506,26180=>13507,26181=>13508,26182=>13509,26183=>13510,26184=>13511,26185=>13512,26186=>13513,26189=>13514,26190=>13515,26192=>13516,26193=>13517,26200=>13518,26201=>13519,26203=>13520,26204=>13521,26206=>13522,26208=>13523,26210=>13524,26211=>13525,26213=>13526,26215=>13527,26217=>13528,26218=>13529,26219=>13530,26220=>13531,26221=>13532,26225=>13533,26226=>13534,26227=>13535,26229=>13536,26232=>13537,26233=>13538,26235=>13539,26236=>13540,26237=>13541,26239=>13542,26240=>13543,26241=>13544,26243=>13545,26245=>13546,26246=>13547,26250=>13548,26251=>13549,26253=>13550,26254=>13551,26255=>13552,26256=>13553,26258=>13554,26259=>13555,26260=>13556,26261=>13557,26264=>13558,26265=>13559,26266=>13560,26267=>13561,26268=>13562,26270=>13563,26271=>13564,26272=>13565,26273=>13566,26275=>13567,26276=>13568,26277=>13569,26278=>13570,26281=>13571,26282=>13572,26284=>13573,26285=>13574,26287=>13575,26288=>13576,26289=>13577,26290=>13578,26291=>13579,26293=>13580,26294=>13581,26295=>13582,26296=>13583,26298=>13584,26299=>13585,26300=>13586,26301=>13587,26303=>13588,26304=>13589,26305=>13590,26306=>13591,26307=>13592,26309=>13593,26312=>13594,26314=>13595,26315=>13596,26316=>13597,26317=>13598,26318=>13599,26319=>13600,26320=>13601,26321=>13602,26322=>13603,26323=>13604,26324=>13605,26325=>13606,26327=>13607,26328=>13608,26330=>13609,26334=>13610,26335=>13611,26337=>13612,26338=>13613,26339=>13614,26340=>13615,26341=>13616,26343=>13617,26344=>13618,26346=>13619,26347=>13620,26349=>13621,26350=>13622,26351=>13623,26353=>13624,26357=>13625,26358=>13626,26362=>13627,26363=>13628,26365=>13629,26369=>13630,26370=>13631,26372=>13632,26373=>13633,26374=>13634,26375=>13635,26380=>13636,26382=>13637,26383=>13638,26385=>13639,26386=>13640,26387=>13641,26390=>13642,26392=>13643,26393=>13644,26394=>13645,26396=>13646,26398=>13647,26400=>13648,26401=>13649,26402=>13650,26403=>13651,26404=>13652,26405=>13653,26409=>13654,26414=>13655,26416=>13656,26418=>13657,26419=>13658,26422=>13659,26423=>13660,26424=>13661,26425=>13662,26427=>13663,26428=>13664,26430=>13665,26431=>13666,26433=>13667,26436=>13668,26437=>13669,26439=>13670,26442=>13671,26443=>13672,26445=>13673,26450=>13674,26452=>13675,26453=>13676,26455=>13677,26456=>13678,26457=>13679,26458=>13680,26459=>13681,26461=>13682,26466=>13683,26467=>13684,26468=>13685,26470=>13686,26471=>13687,26475=>13688,26476=>13689,26478=>13690,26484=>13691,26486=>13692,26488=>13693,26489=>13694,26490=>13695,26491=>13696,26493=>13697,26496=>13698,26498=>13699,26499=>13700,26501=>13701,26502=>13702,26504=>13703,26506=>13704,26508=>13705,26509=>13706,26510=>13707,26511=>13708,26513=>13709,26514=>13710,26515=>13711,26516=>13712,26518=>13713,26521=>13714,26523=>13715,26527=>13716,26528=>13717,26529=>13718,26532=>13719,26534=>13720,26537=>13721,26540=>13722,26542=>13723,26545=>13724,26546=>13725,26548=>13726,26553=>13727,26554=>13728,26555=>13729,26556=>13730,26557=>13731,26558=>13732,26559=>13733,26560=>13734,26562=>13735,26565=>13736,26566=>13737,26567=>13738,26568=>13739,26569=>13740,26570=>13741,26571=>13742,26572=>13743,26573=>13744,26574=>13745,26581=>13746,26582=>13747,26583=>13748,26587=>13749,26591=>13750,26593=>13751,26595=>13752,26596=>13753,26598=>13754,26599=>13755,26600=>13756,26602=>13757,26603=>13758,26605=>13759,26606=>13760,26610=>13761,26613=>13762,26614=>13763,26615=>13764,26616=>13765,26617=>13766,26618=>13767,26619=>13768,26620=>13769,26622=>13770,26625=>13771,26626=>13772,26627=>13773,26628=>13774,26630=>13775,26637=>13776,26640=>13777,26642=>13778,26644=>13779,26645=>13780,26648=>13781,26649=>13782,26650=>13783,26651=>13784,26652=>13785,26654=>13786,26655=>13787,26656=>13788,26658=>13789,26659=>13790,26660=>13791,26661=>13792,26662=>13793,26663=>13794,26664=>13795,26667=>13796,26668=>13797,26669=>13798,26670=>13799,26671=>13800,26672=>13801,26673=>13802,26676=>13803,26677=>13804,26678=>13805,26682=>13806,26683=>13807,26687=>13808,26695=>13809,26699=>13810,26701=>13811,26703=>13812,26706=>13813,26710=>13814,26711=>13815,26712=>13816,26713=>13817,26714=>13818,26715=>13819,26716=>13820,26717=>13821,26718=>13822,26719=>13823,26730=>13824,26732=>13825,26733=>13826,26734=>13827,26735=>13828,26736=>13829,26737=>13830,26738=>13831,26739=>13832,26741=>13833,26744=>13834,26745=>13835,26746=>13836,26747=>13837,26748=>13838,26749=>13839,26750=>13840,26751=>13841,26752=>13842,26754=>13843,26756=>13844,26759=>13845,26760=>13846,26761=>13847,26762=>13848,26763=>13849,26764=>13850,26765=>13851,26766=>13852,26768=>13853,26769=>13854,26770=>13855,26772=>13856,26773=>13857,26774=>13858,26777=>13859,26778=>13860,26779=>13861,26780=>13862,26782=>13863,26784=>13864,26785=>13865,26787=>13866,26788=>13867,26789=>13868,26793=>13869,26794=>13870,26795=>13871,26796=>13872,26798=>13873,26801=>13874,26802=>13875,26804=>13876,26806=>13877,26807=>13878,26808=>13879,26809=>13880,26810=>13881,26811=>13882,26812=>13883,26813=>13884,26814=>13885,26815=>13886,26817=>13887,26819=>13888,26820=>13889,26821=>13890,26822=>13891,26823=>13892,26824=>13893,26826=>13894,26828=>13895,26830=>13896,26831=>13897,26832=>13898,26833=>13899,26835=>13900,26836=>13901,26841=>13902,26843=>13903,26844=>13904,26845=>13905,26846=>13906,26849=>13907,26850=>13908,26852=>13909,26853=>13910,26854=>13911,26856=>13912,26857=>13913,26858=>13914,26859=>13915,26860=>13916,26861=>13917,26863=>13918,26866=>13919,26867=>13920,26868=>13921,26870=>13922,26871=>13923,26872=>13924,26875=>13925,26877=>13926,26878=>13927,26879=>13928,26880=>13929,26882=>13930,26883=>13931,26884=>13932,26886=>13933,26887=>13934,26888=>13935,26889=>13936,26890=>13937,26892=>13938,26897=>13939,26899=>13940,26900=>13941,26901=>13942,26902=>13943,26903=>13944,26904=>13945,26905=>13946,26906=>13947,26907=>13948,26908=>13949,26909=>13950,26910=>13951,26913=>13952,26914=>13953,26915=>13954,26917=>13955,26918=>13956,26919=>13957,26920=>13958,26921=>13959,26922=>13960,26923=>13961,26924=>13962,26926=>13963,26927=>13964,26929=>13965,26930=>13966,26931=>13967,26933=>13968,26934=>13969,26935=>13970,26936=>13971,26938=>13972,26939=>13973,26940=>13974,26942=>13975,26944=>13976,26945=>13977,26947=>13978,26948=>13979,26949=>13980,26950=>13981,26951=>13982,26952=>13983,26953=>13984,26955=>13985,26956=>13986,26957=>13987,26958=>13988,26959=>13989,26960=>13990,26961=>13991,26962=>13992,26965=>13993,26966=>13994,26968=>13995,26969=>13996,26971=>13997,26972=>13998,26975=>13999,26977=>14000,26978=>14001,26980=>14002,26981=>14003,26983=>14004,26985=>14005,26986=>14006,26988=>14007,26991=>14008,26992=>14009,26994=>14010,26995=>14011,26996=>14012,26998=>14013,27002=>14014,27003=>14015,27005=>14016,27006=>14017,27007=>14018,27009=>14019,27011=>14020,27013=>14021,27018=>14022,27019=>14023,27020=>14024,27022=>14025,27023=>14026,27024=>14027,27025=>14028,27026=>14029,27027=>14030,27030=>14031,27031=>14032,27033=>14033,27034=>14034,27037=>14035,27038=>14036,27039=>14037,27040=>14038,27041=>14039,27042=>14040,27043=>14041,27044=>14042,27045=>14043,27046=>14044,27049=>14045,27052=>14046,27055=>14047,27056=>14048,27058=>14049,27059=>14050,27061=>14051,27062=>14052,27064=>14053,27065=>14054,27066=>14055,27068=>14056,27069=>14057,27070=>14058,27072=>14059,27074=>14060,27075=>14061,27076=>14062,27077=>14063,27078=>14064,27079=>14065,27080=>14066,27081=>14067,27087=>14068,27089=>14069,27090=>14070,27091=>14071,27093=>14072,27094=>14073,27095=>14074,27096=>14075,27097=>14076,27098=>14077,27100=>14078,27101=>14079,27102=>14080,27105=>14081,27106=>14082,27107=>14083,27108=>14084,27109=>14085,27110=>14086,27112=>14087,27113=>14088,27114=>14089,27115=>14090,27116=>14091,27118=>14092,27119=>14093,27120=>14094,27121=>14095,27124=>14096,27125=>14097,27126=>14098,27127=>14099,27128=>14100,27129=>14101,27130=>14102,27131=>14103,27132=>14104,27134=>14105,27136=>14106,27139=>14107,27140=>14108,27142=>14109,27143=>14110,27144=>14111,27145=>14112,27147=>14113,27148=>14114,27149=>14115,27150=>14116,27151=>14117,27152=>14118,27153=>14119,27154=>14120,27156=>14121,27157=>14122,27158=>14123,27162=>14124,27163=>14125,27164=>14126,27165=>14127,27168=>14128,27170=>14129,27172=>14130,27173=>14131,27174=>14132,27175=>14133,27177=>14134,27179=>14135,27180=>14136,27181=>14137,27182=>14138,27184=>14139,27186=>14140,27187=>14141,27188=>14142,27190=>14143,27191=>14144,27195=>14145,27196=>14146,27199=>14147,27200=>14148,27201=>14149,27202=>14150,27203=>14151,27205=>14152,27206=>14153,27209=>14154,27210=>14155,27212=>14156,27213=>14157,27214=>14158,27215=>14159,27217=>14160,27218=>14161,27219=>14162,27220=>14163,27221=>14164,27222=>14165,27223=>14166,27226=>14167,27228=>14168,27229=>14169,27230=>14170,27232=>14171,27235=>14172,27236=>14173,27238=>14174,27239=>14175,27240=>14176,27241=>14177,27242=>14178,27243=>14179,27244=>14180,27245=>14181,27246=>14182,27247=>14183,27248=>14184,27250=>14185,27251=>14186,27252=>14187,27253=>14188,27254=>14189,27255=>14190,27256=>14191,27258=>14192,27259=>14193,27261=>14194,27262=>14195,27263=>14196,27265=>14197,27266=>14198,27267=>14199,27269=>14200,27270=>14201,27271=>14202,27272=>14203,27274=>14204,27275=>14205,27276=>14206,27277=>14207,27279=>14208,27282=>14209,27283=>14210,27285=>14211,27286=>14212,27288=>14213,27289=>14214,27290=>14215,27291=>14216,27293=>14217,27294=>14218,27295=>14219,27297=>14220,27300=>14221,27301=>14222,27302=>14223,27303=>14224,27304=>14225,27306=>14226,27309=>14227,27310=>14228,27312=>14229,27313=>14230,27314=>14231,27316=>14232,27317=>14233,27318=>14234,27319=>14235,27321=>14236,27322=>14237,27324=>14238,27325=>14239,27326=>14240,27327=>14241,27328=>14242,27329=>14243,27330=>14244,27332=>14245,27333=>14246,27334=>14247,27335=>14248,27336=>14249,27337=>14250,27338=>14251,27339=>14252,27340=>14253,27341=>14254,27342=>14255,27343=>14256,27344=>14257,27345=>14258,27346=>14259,27348=>14260,27349=>14261,27350=>14262,27351=>14263,27352=>14264,27353=>14265,27356=>14266,27360=>14267,27361=>14268,27362=>14269,27363=>14270,27364=>14271,27365=>14272,27366=>14273,27369=>14274,27371=>14275,27373=>14276,27374=>14277,27375=>14278,27376=>14279,27377=>14280,27378=>14281,27380=>14282,27381=>14283,27382=>14284,27383=>14285,27385=>14286,27386=>14287,27388=>14288,27389=>14289,27390=>14290,27391=>14291,27392=>14292,27393=>14293,27394=>14294,27395=>14295,27397=>14296,27398=>14297,27399=>14298,27400=>14299,27401=>14300,27403=>14301,27404=>14302,27405=>14303,27406=>14304,27408=>14305,27409=>14306,27411=>14307,27412=>14308,27413=>14309,27415=>14310,27416=>14311,27417=>14312,27418=>14313,27419=>14314,27420=>14315,27421=>14316,27423=>14317,27429=>14318,27430=>14319,27432=>14320,27433=>14321,27434=>14322,27435=>14323,27436=>14324,27437=>14325,27438=>14326,27439=>14327,27440=>14328,27441=>14329,27443=>14330,27444=>14331,27445=>14332,27446=>14333,27448=>14334,27451=>14335,27452=>14336,27455=>14337,27456=>14338,27457=>14339,27458=>14340,27460=>14341,27461=>14342,27464=>14343,27466=>14344,27467=>14345,27469=>14346,27470=>14347,27471=>14348,27473=>14349,27474=>14350,27475=>14351,27476=>14352,27477=>14353,27478=>14354,27479=>14355,27480=>14356,27482=>14357,27483=>14358,27484=>14359,27485=>14360,27486=>14361,27488=>14362,27496=>14363,27497=>14364,27499=>14365,27500=>14366,27501=>14367,27502=>14368,27503=>14369,27504=>14370,27505=>14371,27507=>14372,27508=>14373,27509=>14374,27510=>14375,27514=>14376,27517=>14377,27518=>14378,27519=>14379,27520=>14380,27525=>14381,27528=>14382,27532=>14383,27534=>14384,27535=>14385,27536=>14386,27537=>14387,27540=>14388,27541=>14389,27543=>14390,27545=>14391,27548=>14392,27549=>14393,27551=>14394,27552=>14395,27554=>14396,27555=>14397,27557=>14398,27558=>14399,27559=>14400,27560=>14401,27561=>14402,27564=>14403,27565=>14404,27568=>14405,27569=>14406,27574=>14407,27576=>14408,27577=>14409,27580=>14410,27581=>14411,27582=>14412,27584=>14413,27587=>14414,27588=>14415,27591=>14416,27592=>14417,27593=>14418,27594=>14419,27596=>14420,27598=>14421,27600=>14422,27601=>14423,27608=>14424,27610=>14425,27612=>14426,27613=>14427,27614=>14428,27615=>14429,27616=>14430,27618=>14431,27619=>14432,27620=>14433,27621=>14434,27622=>14435,27623=>14436,27624=>14437,27625=>14438,27628=>14439,27629=>14440,27630=>14441,27632=>14442,27633=>14443,27634=>14444,27636=>14445,27638=>14446,27639=>14447,27640=>14448,27642=>14449,27643=>14450,27644=>14451,27646=>14452,27648=>14453,27649=>14454,27650=>14455,27651=>14456,27652=>14457,27657=>14458,27658=>14459,27659=>14460,27662=>14461,27666=>14462,27671=>14463,27676=>14464,27677=>14465,27678=>14466,27680=>14467,27685=>14468,27693=>14469,27697=>14470,27699=>14471,27702=>14472,27703=>14473,27705=>14474,27706=>14475,27707=>14476,27708=>14477,27710=>14478,27711=>14479,27715=>14480,27716=>14481,27717=>14482,27720=>14483,27723=>14484,27724=>14485,27725=>14486,27726=>14487,27727=>14488,27729=>14489,27730=>14490,27731=>14491,27734=>14492,27736=>14493,27737=>14494,27738=>14495,27746=>14496,27747=>14497,27749=>14498,27750=>14499,27751=>14500,27755=>14501,27756=>14502,27757=>14503,27758=>14504,27759=>14505,27761=>14506,27763=>14507,27765=>14508,27767=>14509,27768=>14510,27770=>14511,27771=>14512,27772=>14513,27775=>14514,27776=>14515,27780=>14516,27783=>14517,27786=>14518,27787=>14519,27789=>14520,27790=>14521,27793=>14522,27794=>14523,27797=>14524,27798=>14525,27799=>14526,27800=>14527,27802=>14528,27804=>14529,27805=>14530,27806=>14531,27808=>14532,27810=>14533,27816=>14534,27820=>14535,27823=>14536,27824=>14537,27828=>14538,27829=>14539,27830=>14540,27831=>14541,27834=>14542,27840=>14543,27841=>14544,27842=>14545,27843=>14546,27846=>14547,27847=>14548,27848=>14549,27851=>14550,27853=>14551,27854=>14552,27855=>14553,27857=>14554,27858=>14555,27864=>14556,27865=>14557,27866=>14558,27868=>14559,27869=>14560,27871=>14561,27876=>14562,27878=>14563,27879=>14564,27881=>14565,27884=>14566,27885=>14567,27890=>14568,27892=>14569,27897=>14570,27903=>14571,27904=>14572,27906=>14573,27907=>14574,27909=>14575,27910=>14576,27912=>14577,27913=>14578,27914=>14579,27917=>14580,27919=>14581,27920=>14582,27921=>14583,27923=>14584,27924=>14585,27925=>14586,27926=>14587,27928=>14588,27932=>14589,27933=>14590,27935=>14591,27936=>14592,27937=>14593,27938=>14594,27939=>14595,27940=>14596,27942=>14597,27944=>14598,27945=>14599,27948=>14600,27949=>14601,27951=>14602,27952=>14603,27956=>14604,27958=>14605,27959=>14606,27960=>14607,27962=>14608,27967=>14609,27968=>14610,27970=>14611,27972=>14612,27977=>14613,27980=>14614,27984=>14615,27989=>14616,27990=>14617,27991=>14618,27992=>14619,27995=>14620,27997=>14621,27999=>14622,28001=>14623,28002=>14624,28004=>14625,28005=>14626,28007=>14627,28008=>14628,28011=>14629,28012=>14630,28013=>14631,28016=>14632,28017=>14633,28018=>14634,28019=>14635,28021=>14636,28022=>14637,28026=>14638,28027=>14639,28029=>14640,28030=>14641,28031=>14642,28032=>14643,28033=>14644,28035=>14645,28036=>14646,28038=>14647,28042=>14648,28043=>14649,28045=>14650,28047=>14651,28048=>14652,28050=>14653,28054=>14654,28055=>14655,28056=>14656,28057=>14657,28058=>14658,28060=>14659,28066=>14660,28069=>14661,28076=>14662,28077=>14663,28080=>14664,28081=>14665,28083=>14666,28084=>14667,28086=>14668,28087=>14669,28089=>14670,28090=>14671,28091=>14672,28092=>14673,28093=>14674,28094=>14675,28097=>14676,28098=>14677,28099=>14678,28104=>14679,28105=>14680,28106=>14681,28109=>14682,28110=>14683,28111=>14684,28112=>14685,28114=>14686,28115=>14687,28116=>14688,28117=>14689,28119=>14690,28122=>14691,28123=>14692,28124=>14693,28127=>14694,28130=>14695,28131=>14696,28133=>14697,28135=>14698,28136=>14699,28137=>14700,28141=>14701,28143=>14702,28144=>14703,28146=>14704,28148=>14705,28152=>14706,28157=>14707,28158=>14708,28159=>14709,28160=>14710,28161=>14711,28162=>14712,28163=>14713,28164=>14714,28166=>14715,28167=>14716,28168=>14717,28169=>14718,28171=>14719,28175=>14720,28178=>14721,28179=>14722,28181=>14723,28184=>14724,28185=>14725,28187=>14726,28188=>14727,28190=>14728,28191=>14729,28194=>14730,28199=>14731,28200=>14732,28202=>14733,28206=>14734,28208=>14735,28209=>14736,28211=>14737,28213=>14738,28214=>14739,28215=>14740,28217=>14741,28219=>14742,28220=>14743,28221=>14744,28223=>14745,28224=>14746,28225=>14747,28226=>14748,28229=>14749,28230=>14750,28231=>14751,28232=>14752,28233=>14753,28234=>14754,28235=>14755,28236=>14756,28239=>14757,28240=>14758,28241=>14759,28242=>14760,28245=>14761,28247=>14762,28249=>14763,28250=>14764,28252=>14765,28253=>14766,28256=>14767,28257=>14768,28258=>14769,28259=>14770,28260=>14771,28261=>14772,28262=>14773,28263=>14774,28264=>14775,28265=>14776,28266=>14777,28268=>14778,28269=>14779,28272=>14780,28273=>14781,28274=>14782,28275=>14783,28276=>14784,28277=>14785,28278=>14786,28279=>14787,28280=>14788,28281=>14789,28282=>14790,28283=>14791,28284=>14792,28285=>14793,28288=>14794,28289=>14795,28290=>14796,28292=>14797,28295=>14798,28296=>14799,28298=>14800,28299=>14801,28300=>14802,28301=>14803,28302=>14804,28305=>14805,28306=>14806,28307=>14807,28308=>14808,28309=>14809,28311=>14810,28313=>14811,28314=>14812,28315=>14813,28318=>14814,28320=>14815,28321=>14816,28323=>14817,28324=>14818,28326=>14819,28328=>14820,28329=>14821,28331=>14822,28332=>14823,28333=>14824,28334=>14825,28336=>14826,28339=>14827,28341=>14828,28344=>14829,28345=>14830,28348=>14831,28350=>14832,28351=>14833,28352=>14834,28355=>14835,28358=>14836,28360=>14837,28361=>14838,28362=>14839,28365=>14840,28368=>14841,28370=>14842,28374=>14843,28376=>14844,28377=>14845,28379=>14846,28380=>14847,28381=>14848,28387=>14849,28391=>14850,28394=>14851,28395=>14852,28397=>14853,28398=>14854,28400=>14855,28401=>14856,28403=>14857,28405=>14858,28406=>14859,28410=>14860,28411=>14861,28412=>14862,28413=>14863,28414=>14864,28416=>14865,28419=>14866,28420=>14867,28421=>14868,28423=>14869,28424=>14870,28426=>14871,28427=>14872,28428=>14873,28429=>14874,28430=>14875,28432=>14876,28433=>14877,28434=>14878,28438=>14879,28439=>14880,28440=>14881,28441=>14882,28443=>14883,28444=>14884,28445=>14885,28446=>14886,28447=>14887,28449=>14888,28453=>14889,28454=>14890,28455=>14891,28456=>14892,28462=>14893,28464=>14894,28468=>14895,28469=>14896,28471=>14897,28473=>14898,28474=>14899,28475=>14900,28476=>14901,28477=>14902,28480=>14903,28482=>14904,28483=>14905,28484=>14906,28485=>14907,28488=>14908,28489=>14909,28490=>14910,28492=>14911,28494=>14912,28495=>14913,28496=>14914,28498=>14915,28499=>14916,28501=>14917,28502=>14918,28503=>14919,28506=>14920,28507=>14921,28509=>14922,28511=>14923,28512=>14924,28513=>14925,28515=>14926,28517=>14927,28519=>14928,28520=>14929,28521=>14930,28522=>14931,28523=>14932,28524=>14933,28529=>14934,28531=>14935,28533=>14936,28534=>14937,28537=>14938,28539=>14939,28541=>14940,28542=>14941,28545=>14942,28546=>14943,28547=>14944,28549=>14945,28554=>14946,28555=>14947,28559=>14948,28560=>14949,28561=>14950,28562=>14951,28563=>14952,28564=>14953,28565=>14954,28566=>14955,28568=>14956,28569=>14957,28570=>14958,28571=>14959,28573=>14960,28574=>14961,28575=>14962,28578=>14963,28579=>14964,28581=>14965,28582=>14966,28584=>14967,28586=>14968,28587=>14969,28588=>14970,28589=>14971,28591=>14972,28592=>14973,28594=>14974,28596=>14975,28597=>14976,28599=>14977,28600=>14978,28602=>14979,28603=>14980,28604=>14981,28605=>14982,28606=>14983,28607=>14984,28612=>14985,28613=>14986,28614=>14987,28615=>14988,28616=>14989,28618=>14990,28619=>14991,28620=>14992,28621=>14993,28622=>14994,28623=>14995,28624=>14996,28627=>14997,28628=>14998,28630=>14999,28631=>15000,28633=>15001,28634=>15002,28636=>15003,28637=>15004,28642=>15005,28643=>15006,28645=>15007,28646=>15008,28647=>15009,28648=>15010,28649=>15011,28650=>15012,28652=>15013,28653=>15014,28658=>15015,28659=>15016,28660=>15017,28661=>15018,28662=>15019,28663=>15020,28664=>15021,28665=>15022,28667=>15023,28669=>15024,28671=>15025,28672=>15026,28673=>15027,28674=>15028,28675=>15029,28676=>15030,28679=>15031,28680=>15032,28682=>15033,28684=>15034,28685=>15035,28686=>15036,28688=>15037,28690=>15038,28691=>15039,28692=>15040,28694=>15041,28695=>15042,28697=>15043,28700=>15044,28702=>15045,28705=>15046,28706=>15047,28708=>15048,28709=>15049,28710=>15050,28713=>15051,28714=>15052,28715=>15053,28716=>15054,28717=>15055,28718=>15056,28719=>15057,28721=>15058,28723=>15059,28724=>15060,28726=>15061,28727=>15062,28728=>15063,28730=>15064,28731=>15065,28732=>15066,28733=>15067,28735=>15068,28736=>15069,28737=>15070,28738=>15071,28741=>15072,28742=>15073,28743=>15074,28744=>15075,28745=>15076,28746=>15077,28747=>15078,28749=>15079,28750=>15080,28752=>15081,28754=>15082,28755=>15083,28756=>15084,28758=>15085,28759=>15086,28761=>15087,28762=>15088,28763=>15089,28764=>15090,28767=>15091,28768=>15092,28769=>15093,28770=>15094,28773=>15095,28774=>15096,28776=>15097,28777=>15098,28778=>15099,28782=>15100,28785=>15101,28786=>15102,28787=>15103,28788=>15104,28791=>15105,28793=>15106,28794=>15107,28795=>15108,28797=>15109,28801=>15110,28802=>15111,28803=>15112,28804=>15113,28806=>15114,28807=>15115,28808=>15116,28811=>15117,28812=>15118,28813=>15119,28815=>15120,28816=>15121,28817=>15122,28819=>15123,28823=>15124,28824=>15125,28826=>15126,28827=>15127,28830=>15128,28831=>15129,28832=>15130,28833=>15131,28834=>15132,28835=>15133,28836=>15134,28837=>15135,28838=>15136,28839=>15137,28840=>15138,28841=>15139,28842=>15140,28848=>15141,28850=>15142,28852=>15143,28853=>15144,28854=>15145,28858=>15146,28862=>15147,28863=>15148,28868=>15149,28869=>15150,28870=>15151,28871=>15152,28873=>15153,28875=>15154,28876=>15155,28877=>15156,28878=>15157,28880=>15158,28881=>15159,28882=>15160,28883=>15161,28884=>15162,28885=>15163,28886=>15164,28887=>15165,28890=>15166,28892=>15167,28893=>15168,28894=>15169,28896=>15170,28897=>15171,28898=>15172,28899=>15173,28901=>15174,28906=>15175,28910=>15176,28912=>15177,28913=>15178,28914=>15179,28915=>15180,28917=>15181,28918=>15182,28920=>15183,28922=>15184,28923=>15185,28924=>15186,28926=>15187,28927=>15188,28928=>15189,28929=>15190,28930=>15191,28931=>15192,28932=>15193,28933=>15194,28934=>15195,28935=>15196,28936=>15197,28939=>15198,28940=>15199,28941=>15200,28942=>15201,28943=>15202,28945=>15203,28946=>15204,28948=>15205,28951=>15206,28955=>15207,28956=>15208,28957=>15209,28958=>15210,28959=>15211,28960=>15212,28962=>15213,28963=>15214,28964=>15215,28965=>15216,28967=>15217,28968=>15218,28969=>15219,28970=>15220,28971=>15221,28972=>15222,28973=>15223,28974=>15224,28978=>15225,28979=>15226,28980=>15227,28981=>15228,28983=>15229,28984=>15230,28985=>15231,28986=>15232,28987=>15233,28988=>15234,28989=>15235,28990=>15236,28991=>15237,28992=>15238,28993=>15239,28994=>15240,28995=>15241,28996=>15242,28998=>15243,28999=>15244,29000=>15245,29003=>15246,29005=>15247,29007=>15248,29008=>15249,29009=>15250,29011=>15251,29012=>15252,29013=>15253,29014=>15254,29015=>15255,29016=>15256,29017=>15257,29018=>15258,29019=>15259,29021=>15260,29023=>15261,29024=>15262,29025=>15263,29027=>15264,29029=>15265,29034=>15266,29035=>15267,29037=>15268,29039=>15269,29040=>15270,29041=>15271,29044=>15272,29045=>15273,29046=>15274,29047=>15275,29049=>15276,29051=>15277,29052=>15278,29054=>15279,29055=>15280,29056=>15281,29057=>15282,29058=>15283,29059=>15284,29061=>15285,29062=>15286,29063=>15287,29064=>15288,29065=>15289,29067=>15290,29068=>15291,29069=>15292,29070=>15293,29072=>15294,29073=>15295,29075=>15296,29077=>15297,29078=>15298,29082=>15299,29083=>15300,29084=>15301,29085=>15302,29086=>15303,29089=>15304,29090=>15305,29091=>15306,29092=>15307,29093=>15308,29094=>15309,29095=>15310,29097=>15311,29098=>15312,29099=>15313,29101=>15314,29102=>15315,29103=>15316,29104=>15317,29106=>15318,29108=>15319,29110=>15320,29111=>15321,29112=>15322,29114=>15323,29115=>15324,29116=>15325,29117=>15326,29119=>15327,29120=>15328,29122=>15329,29124=>15330,29125=>15331,29126=>15332,29127=>15333,29129=>15334,29130=>15335,29131=>15336,29132=>15337,29133=>15338,29135=>15339,29136=>15340,29137=>15341,29139=>15342,29142=>15343,29143=>15344,29144=>15345,29146=>15346,29147=>15347,29149=>15348,29150=>15349,29153=>15350,29154=>15351,29155=>15352,29156=>15353,29160=>15354,29161=>15355,29162=>15356,29163=>15357,29164=>15358,29167=>15359,29168=>15360,29169=>15361,29170=>15362,29171=>15363,29173=>15364,29174=>15365,29175=>15366,29176=>15367,29178=>15368,29179=>15369,29181=>15370,29183=>15371,29184=>15372,29185=>15373,29186=>15374,29187=>15375,29188=>15376,29189=>15377,29191=>15378,29192=>15379,29193=>15380,29194=>15381,29195=>15382,29196=>15383,29198=>15384,29199=>15385,29201=>15386,29202=>15387,29203=>15388,29204=>15389,29205=>15390,29206=>15391,29207=>15392,29208=>15393,29209=>15394,29210=>15395,29212=>15396,29214=>15397,29215=>15398,29216=>15399,29217=>15400,29218=>15401,29219=>15402,29220=>15403,29221=>15404,29222=>15405,29223=>15406,29225=>15407,29227=>15408,29229=>15409,29230=>15410,29231=>15411,29235=>15412,29236=>15413,29244=>15414,29248=>15415,29249=>15416,29250=>15417,29251=>15418,29252=>15419,29253=>15420,29254=>15421,29257=>15422,29258=>15423,29259=>15424,29262=>15425,29263=>15426,29264=>15427,29265=>15428,29267=>15429,29268=>15430,29269=>15431,29271=>15432,29274=>15433,29276=>15434,29278=>15435,29280=>15436,29283=>15437,29284=>15438,29285=>15439,29288=>15440,29290=>15441,29291=>15442,29292=>15443,29293=>15444,29296=>15445,29297=>15446,29299=>15447,29300=>15448,29302=>15449,29303=>15450,29304=>15451,29307=>15452,29308=>15453,29314=>15454,29315=>15455,29317=>15456,29318=>15457,29319=>15458,29320=>15459,29321=>15460,29324=>15461,29326=>15462,29328=>15463,29329=>15464,29331=>15465,29332=>15466,29333=>15467,29335=>15468,29336=>15469,29337=>15470,29338=>15471,29339=>15472,29340=>15473,29341=>15474,29342=>15475,29344=>15476,29345=>15477,29347=>15478,29348=>15479,29349=>15480,29350=>15481,29352=>15482,29353=>15483,29354=>15484,29355=>15485,29358=>15486,29361=>15487,29362=>15488,29363=>15489,29365=>15490,29370=>15491,29371=>15492,29372=>15493,29373=>15494,29374=>15495,29375=>15496,29381=>15497,29382=>15498,29383=>15499,29385=>15500,29386=>15501,29387=>15502,29388=>15503,29391=>15504,29393=>15505,29395=>15506,29396=>15507,29397=>15508,29398=>15509,29400=>15510,29402=>15511,29403=>15512,29404=>15513,29405=>15514,29407=>15515,29410=>15516,29411=>15517,29412=>15518,29413=>15519,29414=>15520,29415=>15521,29418=>15522,29419=>15523,29429=>15524,29430=>15525,29438=>15526,29439=>15527,29440=>15528,29442=>15529,29444=>15530,29445=>15531,29446=>15532,29447=>15533,29448=>15534,29449=>15535,29451=>15536,29452=>15537,29453=>15538,29455=>15539,29456=>15540,29457=>15541,29458=>15542,29460=>15543,29464=>15544,29465=>15545,29466=>15546,29471=>15547,29472=>15548,29475=>15549,29476=>15550,29478=>15551,29479=>15552,29480=>15553,29485=>15554,29487=>15555,29488=>15556,29490=>15557,29491=>15558,29493=>15559,29498=>15560,29500=>15561,29501=>15562,29504=>15563,29506=>15564,29507=>15565,29510=>15566,29511=>15567,29512=>15568,29513=>15569,29514=>15570,29515=>15571,29516=>15572,29518=>15573,29519=>15574,29521=>15575,29523=>15576,29524=>15577,29525=>15578,29526=>15579,29528=>15580,29529=>15581,29530=>15582,29531=>15583,29532=>15584,29533=>15585,29534=>15586,29535=>15587,29537=>15588,29538=>15589,29539=>15590,29540=>15591,29541=>15592,29542=>15593,29543=>15594,29545=>15595,29550=>15596,29553=>15597,29555=>15598,29556=>15599,29558=>15600,29561=>15601,29565=>15602,29567=>15603,29569=>15604,29570=>15605,29571=>15606,29573=>15607,29574=>15608,29576=>15609,29578=>15610,29580=>15611,29581=>15612,29583=>15613,29584=>15614,29586=>15615,29587=>15616,29588=>15617,29589=>15618,29591=>15619,29592=>15620,29593=>15621,29594=>15622,29596=>15623,29597=>15624,29598=>15625,29600=>15626,29601=>15627,29603=>15628,29604=>15629,29605=>15630,29606=>15631,29607=>15632,29608=>15633,29610=>15634,29612=>15635,29613=>15636,29617=>15637,29620=>15638,29621=>15639,29622=>15640,29624=>15641,29625=>15642,29628=>15643,29629=>15644,29630=>15645,29631=>15646,29633=>15647,29635=>15648,29636=>15649,29637=>15650,29638=>15651,29639=>15652,29643=>15653,29644=>15654,29646=>15655,29650=>15656,29651=>15657,29652=>15658,29653=>15659,29654=>15660,29655=>15661,29656=>15662,29658=>15663,29659=>15664,29660=>15665,29661=>15666,29663=>15667,29665=>15668,29666=>15669,29667=>15670,29668=>15671,29670=>15672,29672=>15673,29674=>15674,29675=>15675,29676=>15676,29678=>15677,29679=>15678,29680=>15679,29681=>15680,29683=>15681,29684=>15682,29685=>15683,29686=>15684,29687=>15685,29688=>15686,29689=>15687,29690=>15688,29691=>15689,29692=>15690,29693=>15691,29695=>15692,29696=>15693,29697=>15694,29698=>15695,29700=>15696,29703=>15697,29704=>15698,29707=>15699,29708=>15700,29709=>15701,29710=>15702,29713=>15703,29714=>15704,29715=>15705,29716=>15706,29717=>15707,29718=>15708,29719=>15709,29720=>15710,29721=>15711,29724=>15712,29725=>15713,29726=>15714,29727=>15715,29728=>15716,29729=>15717,29731=>15718,29732=>15719,29735=>15720,29737=>15721,29739=>15722,29741=>15723,29743=>15724,29745=>15725,29746=>15726,29751=>15727,29752=>15728,29753=>15729,29754=>15730,29755=>15731,29757=>15732,29758=>15733,29760=>15734,29762=>15735,29763=>15736,29764=>15737,29765=>15738,29766=>15739,29767=>15740,29768=>15741,29769=>15742,29770=>15743,29772=>15744,29773=>15745,29774=>15746,29775=>15747,29776=>15748,29777=>15749,29778=>15750,29779=>15751,29780=>15752,29782=>15753,29784=>15754,29789=>15755,29792=>15756,29793=>15757,29794=>15758,29796=>15759,29797=>15760,29798=>15761,29799=>15762,29800=>15763,29803=>15764,29804=>15765,29806=>15766,29807=>15767,29809=>15768,29810=>15769,29811=>15770,29812=>15771,29813=>15772,29816=>15773,29817=>15774,29818=>15775,29819=>15776,29820=>15777,29821=>15778,29823=>15779,29826=>15780,29828=>15781,29829=>15782,29830=>15783,29832=>15784,29834=>15785,29836=>15786,29837=>15787,29839=>15788,29841=>15789,29842=>15790,29843=>15791,29844=>15792,29845=>15793,29846=>15794,29847=>15795,29848=>15796,29849=>15797,29850=>15798,29851=>15799,29853=>15800,29855=>15801,29856=>15802,29857=>15803,29858=>15804,29860=>15805,29861=>15806,29866=>15807,29867=>15808,29868=>15809,29869=>15810,29870=>15811,29871=>15812,29873=>15813,29874=>15814,29875=>15815,29876=>15816,29877=>15817,29878=>15818,29879=>15819,29880=>15820,29881=>15821,29883=>15822,29884=>15823,29886=>15824,29887=>15825,29888=>15826,29889=>15827,29890=>15828,29891=>15829,29892=>15830,29893=>15831,29894=>15832,29895=>15833,29896=>15834,29897=>15835,29899=>15836,29900=>15837,29901=>15838,29902=>15839,29904=>15840,29905=>15841,29907=>15842,29909=>15843,29910=>15844,29911=>15845,29912=>15846,29913=>15847,29915=>15848,29917=>15849,29919=>15850,29921=>15851,29925=>15852,29927=>15853,29928=>15854,29929=>15855,29930=>15856,29931=>15857,29932=>15858,29933=>15859,29936=>15860,29937=>15861,29938=>15862,29939=>15863,29941=>15864,29944=>15865,29945=>15866,29946=>15867,29947=>15868,29948=>15869,29949=>15870,29950=>15871,29952=>15872,29953=>15873,29954=>15874,29955=>15875,29957=>15876,29958=>15877,29959=>15878,29960=>15879,29961=>15880,29962=>15881,29963=>15882,29966=>15883,29968=>15884,29970=>15885,29972=>15886,29973=>15887,29974=>15888,29975=>15889,29979=>15890,29981=>15891,29982=>15892,29984=>15893,29985=>15894,29986=>15895,29988=>15896,29990=>15897,29991=>15898,29994=>15899,29998=>15900,30004=>15901,30006=>15902,30009=>15903,30012=>15904,30013=>15905,30015=>15906,30017=>15907,30018=>15908,30019=>15909,30020=>15910,30022=>15911,30023=>15912,30025=>15913,30026=>15914,30029=>15915,30032=>15916,30033=>15917,30034=>15918,30035=>15919,30037=>15920,30038=>15921,30039=>15922,30040=>15923,30046=>15924,30047=>15925,30048=>15926,30049=>15927,30051=>15928,30052=>15929,30055=>15930,30056=>15931,30057=>15932,30060=>15933,30061=>15934,30062=>15935,30063=>15936,30064=>15937,30065=>15938,30067=>15939,30069=>15940,30071=>15941,30074=>15942,30075=>15943,30076=>15944,30077=>15945,30078=>15946,30080=>15947,30081=>15948,30082=>15949,30084=>15950,30085=>15951,30088=>15952,30089=>15953,30090=>15954,30092=>15955,30093=>15956,30094=>15957,30096=>15958,30099=>15959,30101=>15960,30104=>15961,30107=>15962,30108=>15963,30110=>15964,30114=>15965,30118=>15966,30119=>15967,30120=>15968,30121=>15969,30122=>15970,30125=>15971,30134=>15972,30135=>15973,30138=>15974,30139=>15975,30143=>15976,30144=>15977,30145=>15978,30150=>15979,30155=>15980,30156=>15981,30158=>15982,30159=>15983,30160=>15984,30161=>15985,30163=>15986,30167=>15987,30170=>15988,30172=>15989,30173=>15990,30175=>15991,30176=>15992,30177=>15993,30181=>15994,30185=>15995,30188=>15996,30189=>15997,30190=>15998,30191=>15999,30194=>16000,30195=>16001,30197=>16002,30198=>16003,30199=>16004,30200=>16005,30202=>16006,30203=>16007,30205=>16008,30206=>16009,30212=>16010,30214=>16011,30215=>16012,30216=>16013,30217=>16014,30222=>16015,30223=>16016,30225=>16017,30226=>16018,30227=>16019,30228=>16020,30230=>16021,30234=>16022,30236=>16023,30237=>16024,30243=>16025,30248=>16026,30252=>16027,30254=>16028,30255=>16029,30257=>16030,30258=>16031,30262=>16032,30263=>16033,30265=>16034,30266=>16035,30269=>16036,30273=>16037,30276=>16038,30277=>16039,30280=>16040,30282=>16041,30283=>16042,30286=>16043,30287=>16044,30288=>16045,30289=>16046,30290=>16047,30291=>16048,30293=>16049,30295=>16050,30297=>16051,30298=>16052,30299=>16053,30301=>16054,30304=>16055,30305=>16056,30310=>16057,30312=>16058,30314=>16059,30323=>16060,30324=>16061,30325=>16062,12136=>16063,30326=>16063,30327=>16064,30329=>16065,30330=>16066,30335=>16067,30336=>16068,30337=>16069,30339=>16070,30341=>16071,30345=>16072,30346=>16073,30348=>16074,30349=>16075,30351=>16076,30352=>16077,30354=>16078,30356=>16079,30357=>16080,30359=>16081,30360=>16082,30363=>16083,30364=>16084,30365=>16085,30366=>16086,30367=>16087,30368=>16088,30369=>16089,30370=>16090,30371=>16091,30373=>16092,30374=>16093,30375=>16094,30376=>16095,30377=>16096,30378=>16097,30379=>16098,30380=>16099,30381=>16100,30383=>16101,30384=>16102,30387=>16103,30389=>16104,30390=>16105,30391=>16106,30393=>16107,30395=>16108,30396=>16109,30397=>16110,30398=>16111,30400=>16112,30401=>16113,30403=>16114,30404=>16115,30407=>16116,30409=>16117,30411=>16118,30412=>16119,30419=>16120,30421=>16121,30425=>16122,30426=>16123,30428=>16124,30429=>16125,30432=>16126,30434=>16127,30438=>16128,30440=>16129,30441=>16130,30442=>16131,30443=>16132,30444=>16133,30445=>16134,30448=>16135,30451=>16136,30453=>16137,30454=>16138,30455=>16139,30458=>16140,30459=>16141,30461=>16142,30463=>16143,30464=>16144,30466=>16145,30467=>16146,30469=>16147,30470=>16148,30474=>16149,30476=>16150,30478=>16151,30479=>16152,30480=>16153,30481=>16154,30482=>16155,30483=>16156,30484=>16157,30485=>16158,30486=>16159,30487=>16160,30488=>16161,30491=>16162,30492=>16163,30493=>16164,30494=>16165,30497=>16166,30499=>16167,30500=>16168,30501=>16169,30503=>16170,30506=>16171,30507=>16172,30508=>16173,30510=>16174,30512=>16175,30513=>16176,30514=>16177,30515=>16178,30516=>16179,30521=>16180,30523=>16181,30525=>16182,30526=>16183,30527=>16184,30530=>16185,30532=>16186,30533=>16187,30534=>16188,30536=>16189,30537=>16190,30538=>16191,30539=>16192,30540=>16193,30541=>16194,30542=>16195,30546=>16196,30547=>16197,30548=>16198,30549=>16199,30550=>16200,30551=>16201,30552=>16202,30553=>16203,30556=>16204,30557=>16205,30559=>16206,30560=>16207,30564=>16208,30567=>16209,30569=>16210,30570=>16211,30573=>16212,30574=>16213,30575=>16214,30576=>16215,30577=>16216,30578=>16217,30579=>16218,30580=>16219,30581=>16220,30582=>16221,30583=>16222,30584=>16223,30586=>16224,30587=>16225,30588=>16226,30593=>16227,30594=>16228,30595=>16229,30598=>16230,30599=>16231,30600=>16232,30601=>16233,30602=>16234,30603=>16235,30607=>16236,30608=>16237,30611=>16238,30612=>16239,30613=>16240,30614=>16241,30615=>16242,30617=>16243,30618=>16244,30619=>16245,30620=>16246,30621=>16247,30625=>16248,30627=>16249,30628=>16250,30630=>16251,30632=>16252,30635=>16253,30638=>16254,30639=>16255,30641=>16256,30642=>16257,30644=>16258,30646=>16259,30647=>16260,30648=>16261,30649=>16262,30650=>16263,30654=>16264,30656=>16265,30657=>16266,30658=>16267,30659=>16268,30660=>16269,30661=>16270,30662=>16271,30664=>16272,30665=>16273,30666=>16274,30667=>16275,30668=>16276,30670=>16277,30671=>16278,30672=>16279,30673=>16280,30674=>16281,30675=>16282,30676=>16283,30677=>16284,30678=>16285,30680=>16286,30681=>16287,30685=>16288,30686=>16289,30687=>16290,30688=>16291,30689=>16292,30692=>16293,30694=>16294,30696=>16295,30698=>16296,30704=>16297,30705=>16298,30706=>16299,30708=>16300,30709=>16301,30711=>16302,30713=>16303,30714=>16304,30715=>16305,30716=>16306,30723=>16307,30724=>16308,30725=>16309,30726=>16310,30727=>16311,30728=>16312,30730=>16313,30731=>16314,30734=>16315,30735=>16316,30736=>16317,30739=>16318,30741=>16319,30745=>16320,30747=>16321,30750=>16322,30752=>16323,30753=>16324,30754=>16325,30756=>16326,30760=>16327,30762=>16328,30763=>16329,30766=>16330,30767=>16331,30769=>16332,30770=>16333,30771=>16334,30773=>16335,30774=>16336,30781=>16337,30783=>16338,30785=>16339,30786=>16340,30788=>16341,30790=>16342,30792=>16343,30793=>16344,30794=>16345,30795=>16346,30797=>16347,30799=>16348,30801=>16349,30803=>16350,30804=>16351,30808=>16352,30809=>16353,30810=>16354,30811=>16355,30812=>16356,30814=>16357,30815=>16358,30816=>16359,30817=>16360,30818=>16361,30819=>16362,30821=>16363,30822=>16364,30823=>16365,30825=>16366,30832=>16367,30833=>16368,30834=>16369,30835=>16370,30836=>16371,30837=>16372,30838=>16373,30840=>16374,30841=>16375,30842=>16376,30843=>16377,30845=>16378,30846=>16379,30847=>16380,30848=>16381,30849=>16382,30850=>16383,30851=>16384,30852=>16385,30853=>16386,30854=>16387,30856=>16388,30858=>16389,30859=>16390,30863=>16391,30864=>16392,30866=>16393,30868=>16394,30869=>16395,30870=>16396,30873=>16397,30877=>16398,30878=>16399,30880=>16400,30882=>16401,30884=>16402,30886=>16403,30888=>16404,30890=>16405,30891=>16406,30892=>16407,30894=>16408,30895=>16409,30901=>16410,30902=>16411,30903=>16412,30907=>16413,30909=>16414,30911=>16415,30912=>16416,30914=>16417,30915=>16418,30916=>16419,30918=>16420,30919=>16421,30920=>16422,30924=>16423,30925=>16424,30926=>16425,30927=>16426,30929=>16427,30930=>16428,30931=>16429,30934=>16430,30935=>16431,30936=>16432,30939=>16433,30940=>16434,30941=>16435,30942=>16436,30943=>16437,30944=>16438,30945=>16439,30946=>16440,30948=>16441,30949=>16442,30950=>16443,30953=>16444,30954=>16445,30955=>16446,30957=>16447,30958=>16448,30960=>16449,30961=>16450,30963=>16451,30965=>16452,30966=>16453,30968=>16454,30969=>16455,30971=>16456,30972=>16457,30974=>16458,30975=>16459,30976=>16460,30978=>16461,30979=>16462,30980=>16463,30982=>16464,30983=>16465,30984=>16466,30985=>16467,30986=>16468,30987=>16469,30988=>16470,30989=>16471,30991=>16472,30992=>16473,30993=>16474,30994=>16475,30996=>16476,30997=>16477,30998=>16478,30999=>16479,31000=>16480,31002=>16481,31003=>16482,31004=>16483,31005=>16484,31007=>16485,31008=>16486,31009=>16487,31010=>16488,31011=>16489,31013=>16490,31015=>16491,31016=>16492,31017=>16493,31021=>16494,31022=>16495,31023=>16496,31024=>16497,31026=>16498,31027=>16499,31029=>16500,31030=>16501,31031=>16502,31032=>16503,31033=>16504,31037=>16505,31039=>16506,31042=>16507,31043=>16508,31044=>16509,31045=>16510,31047=>16511,31050=>16512,31051=>16513,31052=>16514,31053=>16515,31054=>16516,31055=>16517,31056=>16518,31057=>16519,31058=>16520,31060=>16521,31061=>16522,31064=>16523,31065=>16524,31073=>16525,31075=>16526,31076=>16527,31078=>16528,31081=>16529,31082=>16530,31083=>16531,31084=>16532,31086=>16533,31088=>16534,31089=>16535,31090=>16536,31091=>16537,31092=>16538,31093=>16539,31094=>16540,31097=>16541,31099=>16542,31100=>16543,31101=>16544,31102=>16545,31103=>16546,31106=>16547,31107=>16548,31110=>16549,31111=>16550,31112=>16551,31113=>16552,31115=>16553,31116=>16554,31120=>16555,31121=>16556,31122=>16557,31123=>16558,31124=>16559,31125=>16560,31126=>16561,31127=>16562,31128=>16563,31129=>16564,31131=>16565,31132=>16566,31133=>16567,31134=>16568,31135=>16569,31136=>16570,31137=>16571,31138=>16572,31139=>16573,31140=>16574,31141=>16575,31144=>16576,31145=>16577,31147=>16578,31148=>16579,31149=>16580,31151=>16581,31154=>16582,31156=>16583,31157=>16584,31158=>16585,31159=>16586,12145=>16587,31160=>16587,31164=>16588,31167=>16589,31170=>16590,31172=>16591,31173=>16592,31175=>16593,31176=>16594,31178=>16595,63893=>16595,31180=>16596,31182=>16597,31183=>16598,31184=>16599,31187=>16600,31188=>16601,31190=>16602,31191=>16603,31193=>16604,31194=>16605,31195=>16606,31196=>16607,31197=>16608,31198=>16609,31200=>16610,31201=>16611,31202=>16612,31205=>16613,31208=>16614,31210=>16615,31212=>16616,31214=>16617,31217=>16618,31218=>16619,31219=>16620,31220=>16621,31221=>16622,31222=>16623,31223=>16624,31225=>16625,31226=>16626,31228=>16627,31230=>16628,31231=>16629,31233=>16630,31236=>16631,31237=>16632,31239=>16633,31240=>16634,31241=>16635,31242=>16636,31244=>16637,31247=>16638,31248=>16639,31249=>16640,31250=>16641,31251=>16642,31253=>16643,31254=>16644,31256=>16645,31257=>16646,31259=>16647,31260=>16648,31261=>16649,31263=>16650,31265=>16651,31266=>16652,31268=>16653,31269=>16654,31270=>16655,31271=>16656,31272=>16657,31273=>16658,31274=>16659,31275=>16660,31276=>16661,31277=>16662,31279=>16663,31280=>16664,31282=>16665,31284=>16666,31285=>16667,31286=>16668,31288=>16669,31290=>16670,31294=>16671,31297=>16672,31298=>16673,31299=>16674,31300=>16675,31301=>16676,31303=>16677,31304=>16678,31305=>16679,31306=>16680,31307=>16681,31311=>16682,31312=>16683,31314=>16684,31315=>16685,31316=>16686,31317=>16687,31318=>16688,31320=>16689,31321=>16690,31322=>16691,31323=>16692,31324=>16693,31325=>16694,31326=>16695,31327=>16696,31328=>16697,31331=>16698,31332=>16699,31333=>16700,31334=>16701,31335=>16702,31336=>16703,31338=>16704,31340=>16705,31341=>16706,31342=>16707,31343=>16708,31345=>16709,31346=>16710,31347=>16711,31349=>16712,31355=>16713,31356=>16714,31357=>16715,31358=>16716,31362=>16717,31365=>16718,31367=>16719,31369=>16720,31370=>16721,31371=>16722,31372=>16723,31374=>16724,31375=>16725,31376=>16726,31379=>16727,31380=>16728,31385=>16729,31386=>16730,31387=>16731,31390=>16732,31393=>16733,31394=>16734,31395=>16735,31396=>16736,31399=>16737,31403=>16738,31407=>16739,31408=>16740,31409=>16741,31410=>16742,31412=>16743,31413=>16744,31415=>16745,31416=>16746,31417=>16747,31419=>16748,31420=>16749,31421=>16750,31422=>16751,31424=>16752,31425=>16753,31426=>16754,31427=>16755,31430=>16756,31433=>16757,31436=>16758,31437=>16759,31438=>16760,31439=>16761,31440=>16762,31441=>16763,31442=>16764,31443=>16765,31444=>16766,31445=>16767,31447=>16768,31448=>16769,31450=>16770,31451=>16771,31452=>16772,31453=>16773,31457=>16774,31458=>16775,31460=>16776,31463=>16777,31464=>16778,31465=>16779,31467=>16780,31468=>16781,31470=>16782,31472=>16783,31473=>16784,31474=>16785,31475=>16786,31476=>16787,31477=>16788,31479=>16789,31480=>16790,31483=>16791,31484=>16792,31486=>16793,31488=>16794,31489=>16795,31490=>16796,31493=>16797,31495=>16798,31497=>16799,31500=>16800,31501=>16801,31502=>16802,31504=>16803,31506=>16804,31507=>16805,31510=>16806,31511=>16807,31512=>16808,31514=>16809,31516=>16810,31517=>16811,31519=>16812,31521=>16813,31522=>16814,31523=>16815,31527=>16816,31529=>16817,31533=>16818,31535=>16819,31536=>16820,31538=>16821,31540=>16822,31541=>16823,31542=>16824,31543=>16825,31545=>16826,31547=>16827,31549=>16828,31551=>16829,31552=>16830,31553=>16831,31554=>16832,31555=>16833,31556=>16834,31560=>16835,31562=>16836,31565=>16837,31566=>16838,31571=>16839,31573=>16840,31575=>16841,31577=>16842,31580=>16843,31582=>16844,31583=>16845,31585=>16846,31587=>16847,31588=>16848,31589=>16849,31590=>16850,31592=>16851,31593=>16852,31594=>16853,31595=>16854,31596=>16855,31597=>16856,31599=>16857,31600=>16858,31603=>16859,31604=>16860,31606=>16861,31608=>16862,31610=>16863,31612=>16864,31613=>16865,31615=>16866,31617=>16867,31618=>16868,31619=>16869,31620=>16870,31622=>16871,31623=>16872,31624=>16873,31625=>16874,31626=>16875,31628=>16876,31630=>16877,31631=>16878,31633=>16879,31634=>16880,31635=>16881,31638=>16882,31640=>16883,31641=>16884,31642=>16885,31643=>16886,31646=>16887,31647=>16888,31648=>16889,31651=>16890,31652=>16891,31653=>16892,31662=>16893,31663=>16894,31664=>16895,31666=>16896,31667=>16897,31669=>16898,31670=>16899,31671=>16900,31673=>16901,31674=>16902,31675=>16903,31676=>16904,31677=>16905,31678=>16906,31679=>16907,31682=>16908,31683=>16909,31685=>16910,31688=>16911,31690=>16912,31693=>16913,31694=>16914,31695=>16915,31696=>16916,31698=>16917,31700=>16918,31701=>16919,31702=>16920,31703=>16921,31704=>16922,31707=>16923,31708=>16924,31710=>16925,31711=>16926,31712=>16927,31714=>16928,31715=>16929,31719=>16930,31720=>16931,31723=>16932,31724=>16933,31725=>16934,31727=>16935,31728=>16936,31730=>16937,31732=>16938,31733=>16939,31734=>16940,31736=>16941,31737=>16942,31738=>16943,31739=>16944,31741=>16945,31743=>16946,31745=>16947,31746=>16948,31747=>16949,31748=>16950,31749=>16951,31750=>16952,31752=>16953,31753=>16954,31754=>16955,31758=>16956,31760=>16957,31761=>16958,31762=>16959,31763=>16960,31764=>16961,31765=>16962,31767=>16963,31768=>16964,31769=>16965,31770=>16966,31771=>16967,31772=>16968,31773=>16969,31776=>16970,31778=>16971,31780=>16972,31781=>16973,31784=>16974,31785=>16975,31788=>16976,31789=>16977,31790=>16978,31791=>16979,31792=>16980,31793=>16981,31794=>16982,31795=>16983,31796=>16984,31797=>16985,31798=>16986,31799=>16987,31801=>16988,31802=>16989,31803=>16990,31804=>16991,31810=>16992,31812=>16993,31813=>16994,31814=>16995,31815=>16996,31816=>16997,31817=>16998,31818=>16999,31819=>17000,31822=>17001,31823=>17002,31824=>17003,31825=>17004,31826=>17005,31827=>17006,31828=>17007,31829=>17008,31830=>17009,31831=>17010,31832=>17011,31833=>17012,31834=>17013,31835=>17014,31837=>17015,31838=>17016,31841=>17017,31842=>17018,31843=>17019,31845=>17020,31846=>17021,31847=>17022,31848=>17023,31851=>17024,31853=>17025,31855=>17026,31856=>17027,31857=>17028,31861=>17029,31862=>17030,31863=>17031,31864=>17032,31865=>17033,31866=>17034,31870=>17035,31871=>17036,31872=>17037,31873=>17038,31874=>17039,31875=>17040,31876=>17041,31877=>17042,31878=>17043,31879=>17044,31880=>17045,31882=>17046,31883=>17047,31884=>17048,31885=>17049,31886=>17050,31887=>17051,31888=>17052,31891=>17053,31892=>17054,31894=>17055,31897=>17056,31898=>17057,31899=>17058,31904=>17059,31905=>17060,31907=>17061,31910=>17062,31911=>17063,31912=>17064,31913=>17065,31915=>17066,31916=>17067,31917=>17068,31919=>17069,31920=>17070,31924=>17071,31925=>17072,31926=>17073,31927=>17074,31928=>17075,31930=>17076,31931=>17077,31935=>17078,31936=>17079,31938=>17080,31939=>17081,31940=>17082,31942=>17083,31945=>17084,31947=>17085,31950=>17086,31951=>17087,31952=>17088,31953=>17089,31954=>17090,31955=>17091,31956=>17092,31960=>17093,31962=>17094,31963=>17095,31969=>17096,31970=>17097,31971=>17098,31972=>17099,31973=>17100,31974=>17101,31977=>17102,31978=>17103,31979=>17104,31980=>17105,31981=>17106,31982=>17107,31985=>17108,31987=>17109,31989=>17110,31991=>17111,31994=>17112,31996=>17113,31997=>17114,31999=>17115,32001=>17116,32003=>17117,32012=>17118,32014=>17119,32015=>17120,32017=>17121,32018=>17122,32022=>17123,32024=>17124,32029=>17125,32030=>17126,32031=>17127,32035=>17128,32036=>17129,32037=>17130,32038=>17131,32040=>17132,32041=>17133,32042=>17134,32044=>17135,32045=>17136,32046=>17137,32052=>17138,32053=>17139,32054=>17140,32055=>17141,32056=>17142,32059=>17143,32061=>17144,32062=>17145,32065=>17146,32067=>17147,32069=>17148,32071=>17149,32072=>17150,32073=>17151,32074=>17152,32075=>17153,32076=>17154,32077=>17155,32079=>17156,32081=>17157,32082=>17158,32083=>17159,32084=>17160,32085=>17161,32086=>17162,32087=>17163,32088=>17164,32089=>17165,32090=>17166,32091=>17167,32092=>17168,32095=>17169,32096=>17170,32099=>17171,32100=>17172,32101=>17173,32103=>17174,32105=>17175,32106=>17176,32107=>17177,32108=>17178,32109=>17179,32111=>17180,32112=>17181,32116=>17182,32117=>17183,32120=>17184,32122=>17185,32123=>17186,32124=>17187,32125=>17188,32126=>17189,32127=>17190,32128=>17191,32130=>17192,32132=>17193,32133=>17194,32135=>17195,32138=>17196,32139=>17197,32140=>17198,32141=>17199,32142=>17200,32144=>17201,32145=>17202,32146=>17203,32148=>17204,32149=>17205,32150=>17206,32151=>17207,32152=>17208,32153=>17209,32154=>17210,32155=>17211,32157=>17212,32159=>17213,32160=>17214,32161=>17215,32164=>17216,32165=>17217,32167=>17218,32168=>17219,32169=>17220,32170=>17221,32175=>17222,32181=>17223,32182=>17224,32183=>17225,32188=>17226,32192=>17227,32193=>17228,32194=>17229,32195=>17230,32197=>17231,32198=>17232,32200=>17233,32201=>17234,32204=>17235,32205=>17236,32206=>17237,32207=>17238,32208=>17239,32211=>17240,32213=>17241,32214=>17242,32218=>17243,32219=>17244,32220=>17245,32223=>17246,32226=>17247,32228=>17248,32229=>17249,32231=>17250,32234=>17251,32235=>17252,32237=>17253,32238=>17254,32240=>17255,32243=>17256,32245=>17257,32247=>17258,32248=>17259,32250=>17260,32252=>17261,32253=>17262,32254=>17263,32255=>17264,32256=>17265,32257=>17266,32258=>17267,32259=>17268,32260=>17269,32261=>17270,32262=>17271,32263=>17272,32268=>17273,32269=>17274,32270=>17275,32271=>17276,32274=>17277,32275=>17278,32276=>17279,32277=>17280,32278=>17281,32279=>17282,32280=>17283,32281=>17284,32282=>17285,32284=>17286,32288=>17287,32289=>17288,32290=>17289,32292=>17290,32293=>17291,32294=>17292,32296=>17293,32297=>17294,32298=>17295,32300=>17296,32303=>17297,32304=>17298,32307=>17299,32312=>17300,32314=>17301,32316=>17302,32319=>17303,32320=>17304,32322=>17305,32323=>17306,32324=>17307,32328=>17308,32329=>17309,32330=>17310,32331=>17311,32332=>17312,32333=>17313,32334=>17314,32335=>17315,32336=>17316,32337=>17317,32339=>17318,32342=>17319,32343=>17320,32344=>17321,32345=>17322,32347=>17323,32348=>17324,32349=>17325,32351=>17326,32352=>17327,32353=>17328,32355=>17329,32356=>17330,32357=>17331,32358=>17332,32359=>17333,32360=>17334,32364=>17335,32369=>17336,32370=>17337,32372=>17338,32373=>17339,32374=>17340,32375=>17341,32376=>17342,32378=>17343,32379=>17344,32383=>17345,32384=>17346,32385=>17347,32387=>17348,32388=>17349,32389=>17350,32390=>17351,32391=>17352,32393=>17353,32395=>17354,32398=>17355,32400=>17356,32401=>17357,32402=>17358,32405=>17359,32407=>17360,32409=>17361,32410=>17362,32413=>17363,32414=>17364,32430=>17365,32436=>17366,32443=>17367,32444=>17368,32470=>17369,32484=>17370,32492=>17371,32505=>17372,32522=>17373,32528=>17374,32542=>17375,32567=>17376,32569=>17377,32571=>17378,32572=>17379,32573=>17380,32574=>17381,32575=>17382,32576=>17383,32577=>17384,32579=>17385,32582=>17386,32583=>17387,32584=>17388,32585=>17389,32586=>17390,32587=>17391,32589=>17392,32591=>17393,32594=>17394,32595=>17395,32598=>17396,32601=>17397,32603=>17398,32604=>17399,32605=>17400,32606=>17401,32608=>17402,32611=>17403,32612=>17404,32613=>17405,32614=>17406,32615=>17407,32619=>17408,32620=>17409,32621=>17410,32623=>17411,32627=>17412,32629=>17413,32630=>17414,32632=>17415,32634=>17416,32635=>17417,32636=>17418,32637=>17419,32639=>17420,32640=>17421,32642=>17422,32643=>17423,32644=>17424,32647=>17425,32649=>17426,32651=>17427,32653=>17428,32655=>17429,32656=>17430,32657=>17431,32658=>17432,32659=>17433,32661=>17434,32662=>17435,32663=>17436,32664=>17437,32665=>17438,32667=>17439,32668=>17440,32672=>17441,32674=>17442,32675=>17443,32678=>17444,32680=>17445,32682=>17446,32683=>17447,32684=>17448,32685=>17449,32686=>17450,32689=>17451,32691=>17452,32692=>17453,32693=>17454,32694=>17455,32695=>17456,32698=>17457,32699=>17458,32702=>17459,32704=>17460,32706=>17461,32707=>17462,32708=>17463,32710=>17464,32711=>17465,32712=>17466,32713=>17467,32715=>17468,32717=>17469,32719=>17470,32720=>17471,32721=>17472,32723=>17473,32726=>17474,32727=>17475,32729=>17476,32730=>17477,32731=>17478,32732=>17479,32733=>17480,32734=>17481,32738=>17482,32739=>17483,32740=>17484,32743=>17485,32744=>17486,32746=>17487,32747=>17488,32748=>17489,32749=>17490,32751=>17491,32754=>17492,32756=>17493,32757=>17494,32758=>17495,32759=>17496,32760=>17497,32762=>17498,32765=>17499,32766=>17500,32767=>17501,32770=>17502,32775=>17503,32776=>17504,32777=>17505,32778=>17506,32782=>17507,32783=>17508,32785=>17509,32787=>17510,32794=>17511,32795=>17512,32797=>17513,32798=>17514,32799=>17515,32801=>17516,32803=>17517,32804=>17518,32811=>17519,32813=>17520,32815=>17521,32816=>17522,32818=>17523,32820=>17524,32825=>17525,32826=>17526,32828=>17527,32830=>17528,32832=>17529,32833=>17530,32836=>17531,32837=>17532,32839=>17533,32840=>17534,32841=>17535,32846=>17536,32847=>17537,32848=>17538,32849=>17539,32851=>17540,32853=>17541,32855=>17542,32857=>17543,32859=>17544,32860=>17545,32861=>17546,32863=>17547,32864=>17548,32865=>17549,32866=>17550,32867=>17551,32868=>17552,32869=>17553,32870=>17554,32871=>17555,32872=>17556,32875=>17557,32876=>17558,32877=>17559,32878=>17560,32884=>17561,32888=>17562,32890=>17563,32891=>17564,32892=>17565,32897=>17566,32898=>17567,32904=>17568,32906=>17569,32909=>17570,32910=>17571,32911=>17572,32912=>17573,32913=>17574,32914=>17575,32916=>17576,32917=>17577,32919=>17578,32921=>17579,32926=>17580,32931=>17581,32934=>17582,32935=>17583,32936=>17584,32940=>17585,32944=>17586,32947=>17587,32949=>17588,32950=>17589,32952=>17590,32953=>17591,32955=>17592,32965=>17593,32967=>17594,32968=>17595,32969=>17596,32970=>17597,32971=>17598,32975=>17599,32976=>17600,32977=>17601,32978=>17602,32979=>17603,32980=>17604,32981=>17605,32984=>17606,32991=>17607,32992=>17608,32994=>17609,32995=>17610,32998=>17611,33006=>17612,33013=>17613,33015=>17614,33017=>17615,33019=>17616,33022=>17617,33023=>17618,33024=>17619,33025=>17620,33027=>17621,33028=>17622,33031=>17623,33032=>17624,33035=>17625,33036=>17626,33045=>17627,33047=>17628,33049=>17629,33052=>17630,33053=>17631,33055=>17632,33056=>17633,33057=>17634,33058=>17635,33059=>17636,33060=>17637,33061=>17638,33062=>17639,33063=>17640,33064=>17641,33065=>17642,33066=>17643,33067=>17644,33069=>17645,33070=>17646,33072=>17647,33075=>17648,33076=>17649,33077=>17650,33079=>17651,33082=>17652,33083=>17653,33084=>17654,33085=>17655,33087=>17656,33088=>17657,33089=>17658,33090=>17659,33091=>17660,33092=>17661,33093=>17662,33095=>17663,33097=>17664,33101=>17665,33103=>17666,33106=>17667,33111=>17668,33112=>17669,33115=>17670,33116=>17671,33117=>17672,33118=>17673,33119=>17674,33122=>17675,33123=>17676,33124=>17677,33128=>17678,33130=>17679,33132=>17680,33135=>17681,33138=>17682,33139=>17683,33141=>17684,33142=>17685,33143=>17686,33153=>17687,33155=>17688,33156=>17689,33157=>17690,33158=>17691,33159=>17692,33161=>17693,33163=>17694,33164=>17695,33165=>17696,33166=>17697,33168=>17698,33170=>17699,33171=>17700,33172=>17701,33173=>17702,33174=>17703,33175=>17704,33177=>17705,33182=>17706,33183=>17707,33185=>17708,33186=>17709,33188=>17710,33189=>17711,33191=>17712,33195=>17713,33196=>17714,33197=>17715,33198=>17716,33199=>17717,33200=>17718,33201=>17719,33202=>17720,33204=>17721,33205=>17722,33206=>17723,33207=>17724,33208=>17725,33209=>17726,33212=>17727,33220=>17728,33221=>17729,33223=>17730,33224=>17731,33227=>17732,33230=>17733,33232=>17734,33233=>17735,33234=>17736,33235=>17737,33236=>17738,33237=>17739,33238=>17740,33239=>17741,33241=>17742,33243=>17743,33244=>17744,33245=>17745,33246=>17746,33249=>17747,33250=>17748,33252=>17749,33253=>17750,33254=>17751,33257=>17752,33259=>17753,33262=>17754,33263=>17755,33264=>17756,33265=>17757,33266=>17758,33269=>17759,33270=>17760,33271=>17761,33272=>17762,33273=>17763,33277=>17764,33279=>17765,33283=>17766,33291=>17767,33294=>17768,33295=>17769,33297=>17770,33299=>17771,33301=>17772,33302=>17773,33303=>17774,33304=>17775,33305=>17776,33306=>17777,33309=>17778,33312=>17779,33316=>17780,33317=>17781,33318=>17782,33319=>17783,33321=>17784,33326=>17785,33330=>17786,33338=>17787,33340=>17788,33341=>17789,33343=>17790,33344=>17791,33345=>17792,33346=>17793,33347=>17794,33349=>17795,33350=>17796,33352=>17797,33354=>17798,33356=>17799,33357=>17800,33358=>17801,33360=>17802,33361=>17803,33362=>17804,33363=>17805,33364=>17806,33365=>17807,33366=>17808,33367=>17809,33371=>17810,33372=>17811,33373=>17812,33374=>17813,33376=>17814,33377=>17815,33378=>17816,33379=>17817,33381=>17818,33383=>17819,33385=>17820,33386=>17821,33388=>17822,33389=>17823,33397=>17824,33398=>17825,12171=>17826,33400=>17826,33403=>17827,33404=>17828,33408=>17829,33409=>17830,33411=>17831,33413=>17832,33414=>17833,33415=>17834,33417=>17835,33420=>17836,33424=>17837,33427=>17838,33428=>17839,33429=>17840,33430=>17841,33434=>17842,33435=>17843,33438=>17844,33440=>17845,33442=>17846,33443=>17847,33447=>17848,33458=>17849,33461=>17850,33462=>17851,33466=>17852,33468=>17853,33471=>17854,33472=>17855,33474=>17856,33475=>17857,33477=>17858,33478=>17859,33481=>17860,33488=>17861,33494=>17862,33497=>17863,33498=>17864,33501=>17865,33506=>17866,33512=>17867,33513=>17868,33514=>17869,33516=>17870,33517=>17871,33518=>17872,33520=>17873,33522=>17874,33523=>17875,33525=>17876,33526=>17877,33528=>17878,33530=>17879,33532=>17880,33533=>17881,33534=>17882,33535=>17883,33536=>17884,33546=>17885,33547=>17886,33549=>17887,33552=>17888,33554=>17889,33555=>17890,33558=>17891,33560=>17892,33561=>17893,33565=>17894,33566=>17895,33567=>17896,33568=>17897,33569=>17898,33570=>17899,33571=>17900,33572=>17901,33573=>17902,33574=>17903,33577=>17904,33578=>17905,33582=>17906,33584=>17907,33586=>17908,33591=>17909,33595=>17910,33597=>17911,33598=>17912,33599=>17913,33601=>17914,33602=>17915,33604=>17916,33605=>17917,33608=>17918,33610=>17919,33611=>17920,33612=>17921,33613=>17922,33614=>17923,33619=>17924,33621=>17925,33622=>17926,33623=>17927,33624=>17928,33625=>17929,33629=>17930,33634=>17931,33648=>17932,33649=>17933,33650=>17934,33651=>17935,33652=>17936,33653=>17937,33654=>17938,33657=>17939,33658=>17940,33662=>17941,33663=>17942,33664=>17943,33665=>17944,33666=>17945,33667=>17946,33668=>17947,33671=>17948,33672=>17949,33675=>17950,33676=>17951,33677=>17952,33679=>17953,33680=>17954,33681=>17955,33684=>17956,33685=>17957,33687=>17958,33689=>17959,33690=>17960,33693=>17961,33695=>17962,33697=>17963,33699=>17964,33700=>17965,33701=>17966,33702=>17967,33708=>17968,33709=>17969,33710=>17970,33711=>17971,33717=>17972,33723=>17973,33726=>17974,33727=>17975,33730=>17976,33731=>17977,33732=>17978,33734=>17979,33736=>17980,33737=>17981,33739=>17982,33741=>17983,33742=>17984,33744=>17985,33745=>17986,33746=>17987,33747=>17988,33749=>17989,33751=>17990,33753=>17991,33754=>17992,33755=>17993,33758=>17994,33762=>17995,33763=>17996,33764=>17997,33766=>17998,33767=>17999,33768=>18000,33771=>18001,33772=>18002,33773=>18003,33774=>18004,33779=>18005,33780=>18006,33781=>18007,33782=>18008,33783=>18009,33786=>18010,33787=>18011,33788=>18012,33790=>18013,33791=>18014,33792=>18015,33794=>18016,33797=>18017,33800=>18018,33801=>18019,33808=>18020,33810=>18021,33811=>18022,33812=>18023,33813=>18024,33814=>18025,33815=>18026,33817=>18027,33818=>18028,33819=>18029,33822=>18030,33823=>18031,33824=>18032,33825=>18033,33826=>18034,33827=>18035,33833=>18036,33834=>18037,33835=>18038,33837=>18039,33838=>18040,33839=>18041,33840=>18042,33842=>18043,33843=>18044,33844=>18045,33846=>18046,33847=>18047,33849=>18048,33850=>18049,33851=>18050,33854=>18051,33855=>18052,33856=>18053,33857=>18054,33858=>18055,33859=>18056,33860=>18057,33861=>18058,33863=>18059,33864=>18060,33866=>18061,33867=>18062,33868=>18063,33869=>18064,33870=>18065,33871=>18066,33872=>18067,33875=>18068,33876=>18069,33877=>18070,33878=>18071,33880=>18072,33885=>18073,33886=>18074,33887=>18075,33888=>18076,33890=>18077,33893=>18078,33895=>18079,33896=>18080,33898=>18081,33902=>18082,33904=>18083,33906=>18084,33908=>18085,33913=>18086,33915=>18087,33916=>18088,33917=>18089,33918=>18090,33919=>18091,33920=>18092,33921=>18093,33923=>18094,33924=>18095,33925=>18096,33926=>18097,33930=>18098,33933=>18099,33935=>18100,33936=>18101,33937=>18102,33938=>18103,33941=>18104,33942=>18105,33944=>18106,33946=>18107,33947=>18108,33949=>18109,33950=>18110,33951=>18111,33952=>18112,33954=>18113,33955=>18114,33956=>18115,33957=>18116,33958=>18117,33959=>18118,33960=>18119,33961=>18120,33962=>18121,33963=>18122,33964=>18123,33965=>18124,33966=>18125,33968=>18126,33969=>18127,33971=>18128,33973=>18129,33974=>18130,33975=>18131,33979=>18132,33982=>18133,33986=>18134,33987=>18135,33989=>18136,33990=>18137,33991=>18138,33992=>18139,33996=>18140,33998=>18141,33999=>18142,34002=>18143,34004=>18144,34005=>18145,34007=>18146,34008=>18147,34009=>18148,34010=>18149,34011=>18150,34012=>18151,34014=>18152,34017=>18153,34018=>18154,34020=>18155,34023=>18156,34024=>18157,34025=>18158,34026=>18159,34027=>18160,34029=>18161,34033=>18162,34034=>18163,34035=>18164,34036=>18165,34037=>18166,34038=>18167,34039=>18168,34040=>18169,34041=>18170,34042=>18171,34043=>18172,34046=>18173,34048=>18174,34049=>18175,34050=>18176,34051=>18177,34052=>18178,34053=>18179,34054=>18180,34055=>18181,34056=>18182,34057=>18183,34058=>18184,34059=>18185,34061=>18186,34062=>18187,34063=>18188,34064=>18189,34066=>18190,34069=>18191,34070=>18192,34072=>18193,34073=>18194,34075=>18195,34076=>18196,34077=>18197,34080=>18198,34082=>18199,34084=>18200,34085=>18201,34087=>18202,34088=>18203,34089=>18204,34090=>18205,34094=>18206,34095=>18207,34096=>18208,34097=>18209,34098=>18210,34099=>18211,34100=>18212,34101=>18213,34102=>18214,34110=>18215,34111=>18216,34112=>18217,34114=>18218,34116=>18219,34117=>18220,34119=>18221,34123=>18222,34124=>18223,34125=>18224,34127=>18225,34128=>18226,34129=>18227,34132=>18228,34135=>18229,34138=>18230,34139=>18231,34140=>18232,34141=>18233,34143=>18234,34144=>18235,34145=>18236,34147=>18237,34149=>18238,34150=>18239,34151=>18240,34155=>18241,34156=>18242,34158=>18243,34159=>18244,34160=>18245,34161=>18246,34163=>18247,34165=>18248,34166=>18249,34168=>18250,34172=>18251,34173=>18252,34175=>18253,34176=>18254,34177=>18255,34178=>18256,34179=>18257,34182=>18258,34185=>18259,34187=>18260,34189=>18261,34190=>18262,34192=>18263,34194=>18264,34195=>18265,34197=>18266,34198=>18267,34199=>18268,34200=>18269,34201=>18270,34202=>18271,34205=>18272,34206=>18273,34208=>18274,34209=>18275,34210=>18276,34211=>18277,34213=>18278,34215=>18279,34219=>18280,34220=>18281,34221=>18282,34225=>18283,34226=>18284,34227=>18285,34228=>18286,34229=>18287,34230=>18288,34232=>18289,34235=>18290,34236=>18291,34237=>18292,34238=>18293,34239=>18294,34240=>18295,34242=>18296,34243=>18297,34244=>18298,34245=>18299,34246=>18300,34247=>18301,34248=>18302,34250=>18303,34251=>18304,34252=>18305,34257=>18306,34258=>18307,34260=>18308,34262=>18309,34263=>18310,34264=>18311,34265=>18312,34266=>18313,34267=>18314,34270=>18315,34271=>18316,34272=>18317,34273=>18318,34274=>18319,34275=>18320,34278=>18321,34279=>18322,34280=>18323,34283=>18324,34284=>18325,34285=>18326,34286=>18327,34287=>18328,34288=>18329,34289=>18330,34290=>18331,34291=>18332,34293=>18333,34295=>18334,34296=>18335,34300=>18336,34301=>18337,34302=>18338,34304=>18339,34305=>18340,34306=>18341,34307=>18342,34312=>18343,34313=>18344,34314=>18345,34316=>18346,34317=>18347,34318=>18348,34319=>18349,34320=>18350,34322=>18351,34323=>18352,34324=>18353,34325=>18354,34327=>18355,34328=>18356,34329=>18357,34331=>18358,34332=>18359,34333=>18360,34335=>18361,34336=>18362,34337=>18363,34339=>18364,34340=>18365,34341=>18366,34342=>18367,34344=>18368,34346=>18369,34347=>18370,34348=>18371,34350=>18372,34351=>18373,34352=>18374,34353=>18375,34354=>18376,34355=>18377,34356=>18378,34357=>18379,34358=>18380,34359=>18381,34361=>18382,34363=>18383,34365=>18384,34366=>18385,34368=>18386,34369=>18387,34370=>18388,34371=>18389,34372=>18390,34373=>18391,34374=>18392,34375=>18393,34376=>18394,34377=>18395,34378=>18396,34379=>18397,34380=>18398,34386=>18399,34387=>18400,34390=>18401,34391=>18402,34392=>18403,34393=>18404,34395=>18405,34397=>18406,34400=>18407,34401=>18408,34403=>18409,34404=>18410,34405=>18411,34406=>18412,34408=>18413,34409=>18414,34410=>18415,34413=>18416,34415=>18417,34416=>18418,34418=>18419,34419=>18420,34420=>18421,34421=>18422,34422=>18423,34423=>18424,34424=>18425,34435=>18426,34436=>18427,34437=>18428,34438=>18429,34439=>18430,34440=>18431,34441=>18432,34446=>18433,34447=>18434,34448=>18435,34449=>18436,34450=>18437,34452=>18438,34454=>18439,34455=>18440,34456=>18441,34457=>18442,34458=>18443,34459=>18444,34462=>18445,34463=>18446,34464=>18447,34465=>18448,34466=>18449,34469=>18450,34470=>18451,34475=>18452,34477=>18453,34478=>18454,34482=>18455,34483=>18456,34487=>18457,34488=>18458,34489=>18459,34491=>18460,34492=>18461,34493=>18462,34494=>18463,34495=>18464,34497=>18465,34498=>18466,34499=>18467,34501=>18468,34504=>18469,34508=>18470,34509=>18471,34514=>18472,34515=>18473,34517=>18474,34518=>18475,34519=>18476,34522=>18477,34524=>18478,34525=>18479,34528=>18480,34529=>18481,34530=>18482,34531=>18483,34533=>18484,34534=>18485,34535=>18486,34536=>18487,34538=>18488,34539=>18489,34540=>18490,34543=>18491,34549=>18492,34550=>18493,34551=>18494,34555=>18495,34556=>18496,34557=>18497,34559=>18498,34561=>18499,34564=>18500,34565=>18501,34571=>18502,34572=>18503,34574=>18504,34575=>18505,34576=>18506,34577=>18507,34580=>18508,34582=>18509,34585=>18510,34587=>18511,34589=>18512,34591=>18513,34592=>18514,34596=>18515,34598=>18516,34599=>18517,34600=>18518,34602=>18519,34603=>18520,34604=>18521,34605=>18522,34607=>18523,34608=>18524,34610=>18525,34611=>18526,34613=>18527,34614=>18528,34616=>18529,34617=>18530,34618=>18531,34620=>18532,34621=>18533,34624=>18534,34625=>18535,34626=>18536,34627=>18537,34628=>18538,34629=>18539,34630=>18540,34634=>18541,34635=>18542,34637=>18543,34639=>18544,34640=>18545,34641=>18546,34642=>18547,34644=>18548,34646=>18549,34648=>18550,34650=>18551,34651=>18552,34652=>18553,34653=>18554,34654=>18555,34655=>18556,34657=>18557,34658=>18558,34663=>18559,34664=>18560,34665=>18561,34666=>18562,34667=>18563,34668=>18564,34669=>18565,34671=>18566,34673=>18567,34674=>18568,34675=>18569,34677=>18570,34679=>18571,34681=>18572,34682=>18573,34687=>18574,34688=>18575,34689=>18576,34694=>18577,34695=>18578,34697=>18579,34698=>18580,34700=>18581,34702=>18582,34703=>18583,34704=>18584,34705=>18585,34706=>18586,34708=>18587,34709=>18588,34710=>18589,34712=>18590,34713=>18591,34714=>18592,34715=>18593,34716=>18594,34717=>18595,34720=>18596,34721=>18597,34723=>18598,34724=>18599,34725=>18600,34726=>18601,34727=>18602,34729=>18603,34730=>18604,34734=>18605,34736=>18606,34737=>18607,34738=>18608,34740=>18609,34742=>18610,34743=>18611,34744=>18612,34745=>18613,34748=>18614,34750=>18615,34751=>18616,34753=>18617,34754=>18618,34755=>18619,34757=>18620,34759=>18621,34761=>18622,34764=>18623,34765=>18624,34767=>18625,34768=>18626,34772=>18627,34773=>18628,34774=>18629,34775=>18630,34776=>18631,34777=>18632,34778=>18633,34780=>18634,34781=>18635,34782=>18636,34783=>18637,34785=>18638,34786=>18639,34788=>18640,34790=>18641,34791=>18642,34792=>18643,34793=>18644,34795=>18645,34797=>18646,34800=>18647,34801=>18648,34803=>18649,34804=>18650,34805=>18651,34807=>18652,34808=>18653,34810=>18654,34812=>18655,34813=>18656,34815=>18657,34816=>18658,34817=>18659,34818=>18660,34820=>18661,34823=>18662,34824=>18663,34825=>18664,34827=>18665,34828=>18666,34829=>18667,34830=>18668,34831=>18669,34834=>18670,34836=>18671,34839=>18672,34840=>18673,34841=>18674,34842=>18675,34844=>18676,34845=>18677,34846=>18678,34848=>18679,34852=>18680,34853=>18681,34854=>18682,34855=>18683,34856=>18684,34857=>18685,34858=>18686,34859=>18687,34860=>18688,34861=>18689,34862=>18690,34863=>18691,34864=>18692,34867=>18693,34868=>18694,34869=>18695,34871=>18696,34872=>18697,34874=>18698,34877=>18699,34878=>18700,34879=>18701,34881=>18702,34882=>18703,34883=>18704,34887=>18705,34888=>18706,34889=>18707,34891=>18708,34894=>18709,34895=>18710,34896=>18711,34897=>18712,34898=>18713,34901=>18714,34902=>18715,34904=>18716,34906=>18717,34908=>18718,34910=>18719,34911=>18720,34912=>18721,34918=>18722,34919=>18723,34922=>18724,34925=>18725,34927=>18726,34929=>18727,34931=>18728,34932=>18729,34933=>18730,34934=>18731,34936=>18732,34938=>18733,34939=>18734,34940=>18735,34944=>18736,34947=>18737,34950=>18738,34951=>18739,34953=>18740,34954=>18741,34956=>18742,34958=>18743,34959=>18744,34960=>18745,34961=>18746,34963=>18747,34964=>18748,34965=>18749,34967=>18750,34968=>18751,34969=>18752,34970=>18753,34971=>18754,34973=>18755,34974=>18756,34975=>18757,34976=>18758,34977=>18759,34979=>18760,34981=>18761,34982=>18762,34983=>18763,34984=>18764,34985=>18765,34986=>18766,34988=>18767,34990=>18768,34991=>18769,34992=>18770,34994=>18771,34995=>18772,34996=>18773,34997=>18774,34998=>18775,35000=>18776,35001=>18777,35002=>18778,35003=>18779,35005=>18780,35006=>18781,35007=>18782,35008=>18783,35011=>18784,35012=>18785,35015=>18786,35016=>18787,35019=>18788,35020=>18789,35021=>18790,35024=>18791,35025=>18792,35027=>18793,35030=>18794,35031=>18795,35034=>18796,35035=>18797,35038=>18798,35040=>18799,35041=>18800,35046=>18801,35047=>18802,35049=>18803,35050=>18804,35051=>18805,35052=>18806,35053=>18807,35054=>18808,35055=>18809,35058=>18810,35061=>18811,35062=>18812,35063=>18813,35066=>18814,35067=>18815,35071=>18816,35072=>18817,35073=>18818,35075=>18819,35076=>18820,35077=>18821,35078=>18822,35080=>18823,35081=>18824,35083=>18825,35084=>18826,35085=>18827,35086=>18828,35087=>18829,35089=>18830,35092=>18831,35093=>18832,35094=>18833,35095=>18834,35096=>18835,35100=>18836,35101=>18837,35102=>18838,35103=>18839,35104=>18840,35106=>18841,35107=>18842,35108=>18843,35110=>18844,35111=>18845,35112=>18846,35113=>18847,35116=>18848,35117=>18849,35118=>18850,35119=>18851,35121=>18852,35125=>18853,35127=>18854,35129=>18855,35130=>18856,35132=>18857,35133=>18858,35134=>18859,35135=>18860,35136=>18861,35138=>18862,35139=>18863,35141=>18864,35142=>18865,35144=>18866,35145=>18867,35146=>18868,35147=>18869,35148=>18870,35149=>18871,35150=>18872,35151=>18873,35152=>18874,35153=>18875,35154=>18876,35155=>18877,35156=>18878,35157=>18879,35159=>18880,35160=>18881,35161=>18882,35162=>18883,35163=>18884,35164=>18885,35169=>18886,35170=>18887,35171=>18888,35173=>18889,35175=>18890,35176=>18891,35177=>18892,35179=>18893,35181=>18894,35182=>18895,35184=>18896,35185=>18897,35187=>18898,35188=>18899,35189=>18900,35190=>18901,35191=>18902,35192=>18903,35193=>18904,35194=>18905,35196=>18906,35197=>18907,12177=>18908,35198=>18908,35200=>18909,35202=>18910,35204=>18911,35205=>18912,35207=>18913,35208=>18914,35209=>18915,35210=>18916,35212=>18917,35213=>18918,35214=>18919,35216=>18920,35217=>18921,35218=>18922,35220=>18923,35221=>18924,35223=>18925,35225=>18926,35226=>18927,35227=>18928,35228=>18929,35229=>18930,35230=>18931,35231=>18932,35232=>18933,35234=>18934,35235=>18935,35236=>18936,35237=>18937,35239=>18938,35240=>18939,35241=>18940,35243=>18941,35245=>18942,35246=>18943,35248=>18944,35249=>18945,35251=>18946,35252=>18947,35253=>18948,35254=>18949,35256=>18950,35257=>18951,35259=>18952,35260=>18953,35262=>18954,35267=>18955,35277=>18956,35283=>18957,35284=>18958,35285=>18959,35287=>18960,35288=>18961,35289=>18962,35291=>18963,35293=>18964,35295=>18965,35296=>18966,35297=>18967,35298=>18968,35300=>18969,35303=>18970,35304=>18971,35305=>18972,35306=>18973,35308=>18974,35309=>18975,35310=>18976,35312=>18977,35313=>18978,35314=>18979,35317=>18980,35319=>18981,35321=>18982,35322=>18983,35323=>18984,35324=>18985,35325=>18986,35326=>18987,35327=>18988,35332=>18989,35333=>18990,35334=>18991,35337=>18992,35339=>18993,35341=>18994,35343=>18995,35345=>18996,35346=>18997,35348=>18998,35351=>18999,35353=>19000,35354=>19001,35356=>19002,35358=>19003,35360=>19004,35361=>19005,35362=>19006,35364=>19007,35366=>19008,35367=>19009,35368=>19010,35369=>19011,35371=>19012,35372=>19013,35374=>19014,35375=>19015,35376=>19016,35378=>19017,35379=>19018,35381=>19019,35383=>19020,35384=>19021,35385=>19022,35387=>19023,35388=>19024,35389=>19025,35391=>19026,35392=>19027,35394=>19028,35395=>19029,35396=>19030,35397=>19031,35399=>19032,35401=>19033,35402=>19034,35403=>19035,35404=>19036,35405=>19037,35407=>19038,35409=>19039,35411=>19040,35414=>19041,35415=>19042,35417=>19043,35418=>19044,35420=>19045,35421=>19046,35423=>19047,35424=>19048,35428=>19049,35429=>19050,35431=>19051,35432=>19052,35434=>19053,35439=>19054,35444=>19055,35446=>19056,35447=>19057,35448=>19058,35450=>19059,35451=>19060,35453=>19061,35454=>19062,35456=>19063,35457=>19064,35458=>19065,35459=>19066,35464=>19067,35467=>19068,35468=>19069,35470=>19070,35471=>19071,35472=>19072,35476=>19073,35478=>19074,35479=>19075,35481=>19076,35483=>19077,35484=>19078,35485=>19079,35487=>19080,35490=>19081,35495=>19082,35497=>19083,35498=>19084,35499=>19085,35501=>19086,35502=>19087,35503=>19088,35505=>19089,35507=>19090,35508=>19091,35509=>19092,35511=>19093,35512=>19094,35514=>19095,35515=>19096,35517=>19097,35518=>19098,35520=>19099,35521=>19100,35523=>19101,35525=>19102,35526=>19103,35528=>19104,35530=>19105,35532=>19106,35534=>19107,35536=>19108,35539=>19109,35540=>19110,35541=>19111,35544=>19112,35545=>19113,35546=>19114,35549=>19115,35551=>19116,35552=>19117,35553=>19118,35555=>19119,35557=>19120,35560=>19121,35561=>19122,35562=>19123,35564=>19124,35567=>19125,35568=>19126,35570=>19127,35572=>19128,35573=>19129,35577=>19130,35579=>19131,35581=>19132,35583=>19133,35587=>19134,35590=>19135,35592=>19136,35593=>19137,35595=>19138,35596=>19139,35597=>19140,35599=>19141,35601=>19142,35602=>19143,35603=>19144,35605=>19145,35608=>19146,35612=>19147,35614=>19148,35615=>19149,35616=>19150,35618=>19151,35619=>19152,35620=>19153,35621=>19154,35623=>19155,35625=>19156,35626=>19157,35630=>19158,35631=>19159,35632=>19160,35633=>19161,35634=>19162,35636=>19163,35637=>19164,35638=>19165,35639=>19166,35640=>19167,35642=>19168,35643=>19169,35644=>19170,35645=>19171,35647=>19172,35648=>19173,35649=>19174,35650=>19175,35651=>19176,35652=>19177,35653=>19178,35654=>19179,35655=>19180,35656=>19181,35658=>19182,35659=>19183,35660=>19184,35661=>19185,35664=>19186,35665=>19187,35666=>19188,35667=>19189,35668=>19190,35669=>19191,35671=>19192,35675=>19193,35677=>19194,35678=>19195,35679=>19196,35680=>19197,35681=>19198,35682=>19199,35683=>19200,35684=>19201,35685=>19202,35687=>19203,35688=>19204,35689=>19205,35690=>19206,35693=>19207,35694=>19208,35697=>19209,35698=>19210,35699=>19211,35701=>19212,35702=>19213,35704=>19214,35705=>19215,35706=>19216,35707=>19217,35708=>19218,35710=>19219,35711=>19220,35713=>19221,35714=>19222,35715=>19223,35716=>19224,35717=>19225,35718=>19226,35719=>19227,35720=>19228,35721=>19229,35723=>19230,35724=>19231,35725=>19232,35727=>19233,35728=>19234,35729=>19235,35732=>19236,35735=>19237,35736=>19238,35737=>19239,35738=>19240,35739=>19241,35741=>19242,35743=>19243,35756=>19244,35761=>19245,35771=>19246,35783=>19247,35792=>19248,35818=>19249,35849=>19250,35870=>19251,35896=>19252,35897=>19253,35898=>19254,35899=>19255,35900=>19256,35901=>19257,35902=>19258,35903=>19259,35904=>19260,35906=>19261,35907=>19262,35908=>19263,35909=>19264,35914=>19265,35915=>19266,35917=>19267,35918=>19268,35919=>19269,35921=>19270,35922=>19271,35923=>19272,35924=>19273,35926=>19274,35927=>19275,35928=>19276,35929=>19277,35931=>19278,35932=>19279,35933=>19280,35934=>19281,35935=>19282,35936=>19283,35939=>19284,35940=>19285,35941=>19286,35942=>19287,35943=>19288,35944=>19289,35945=>19290,35948=>19291,35949=>19292,35950=>19293,35951=>19294,35952=>19295,35953=>19296,35954=>19297,35956=>19298,35957=>19299,35958=>19300,35959=>19301,35963=>19302,35964=>19303,35965=>19304,35966=>19305,35967=>19306,35968=>19307,35969=>19308,35971=>19309,35972=>19310,35974=>19311,35975=>19312,35976=>19313,35979=>19314,35981=>19315,35982=>19316,35983=>19317,35984=>19318,35985=>19319,35986=>19320,35987=>19321,35989=>19322,35990=>19323,35991=>19324,35993=>19325,35994=>19326,35995=>19327,35996=>19328,35999=>19329,36003=>19330,36004=>19331,36005=>19332,36006=>19333,36013=>19334,36014=>19335,36017=>19336,36021=>19337,36025=>19338,36030=>19339,36038=>19340,36041=>19341,36043=>19342,36044=>19343,36045=>19344,36046=>19345,36047=>19346,36048=>19347,36052=>19348,36054=>19349,36055=>19350,36056=>19351,36057=>19352,36059=>19353,36061=>19354,36063=>19355,36069=>19356,36072=>19357,36073=>19358,36078=>19359,36079=>19360,36080=>19361,36081=>19362,36082=>19363,36083=>19364,36085=>19365,36086=>19366,36087=>19367,36088=>19368,36089=>19369,36095=>19370,36096=>19371,36097=>19372,36098=>19373,36099=>19374,36102=>19375,36103=>19376,36105=>19377,36108=>19378,36110=>19379,36113=>19380,36114=>19381,36115=>19382,36116=>19383,36117=>19384,36119=>19385,36120=>19386,36121=>19387,36122=>19388,36128=>19389,36177=>19390,36178=>19391,36183=>19392,36191=>19393,36197=>19394,36200=>19395,36201=>19396,36202=>19397,36204=>19398,36206=>19399,36207=>19400,36209=>19401,36210=>19402,36216=>19403,36217=>19404,36218=>19405,36219=>19406,36220=>19407,36221=>19408,36222=>19409,36223=>19410,36224=>19411,36226=>19412,36227=>19413,36230=>19414,36231=>19415,36232=>19416,36233=>19417,36236=>19418,36237=>19419,36238=>19420,36239=>19421,36240=>19422,36242=>19423,36243=>19424,36246=>19425,36247=>19426,36248=>19427,36250=>19428,36251=>19429,36252=>19430,36253=>19431,36254=>19432,36256=>19433,36257=>19434,36258=>19435,36260=>19436,36261=>19437,36262=>19438,36263=>19439,36265=>19440,36266=>19441,36267=>19442,36268=>19443,36269=>19444,36270=>19445,36271=>19446,36272=>19447,36278=>19448,36279=>19449,36281=>19450,36283=>19451,36285=>19452,36288=>19453,36289=>19454,36290=>19455,36293=>19456,36295=>19457,36296=>19458,36297=>19459,36298=>19460,36301=>19461,36304=>19462,36306=>19463,36307=>19464,36308=>19465,36309=>19466,36312=>19467,36313=>19468,36316=>19469,36320=>19470,36321=>19471,36322=>19472,36325=>19473,36326=>19474,36327=>19475,36329=>19476,36333=>19477,36334=>19478,36336=>19479,36337=>19480,36338=>19481,36340=>19482,36342=>19483,36348=>19484,36350=>19485,36351=>19486,36352=>19487,36353=>19488,36354=>19489,36355=>19490,36356=>19491,36358=>19492,36359=>19493,36360=>19494,36363=>19495,36365=>19496,36366=>19497,36369=>19498,36370=>19499,36371=>19500,36373=>19501,36374=>19502,36375=>19503,36376=>19504,36377=>19505,36378=>19506,36379=>19507,36380=>19508,36384=>19509,36385=>19510,36388=>19511,36389=>19512,36390=>19513,36391=>19514,36392=>19515,36395=>19516,36397=>19517,36400=>19518,36402=>19519,36403=>19520,36406=>19521,36407=>19522,36408=>19523,36411=>19524,36412=>19525,36414=>19526,36415=>19527,36419=>19528,36421=>19529,36422=>19530,36429=>19531,36430=>19532,36431=>19533,36432=>19534,36435=>19535,36436=>19536,36438=>19537,36439=>19538,36440=>19539,36442=>19540,36443=>19541,36444=>19542,36445=>19543,36446=>19544,36447=>19545,36448=>19546,36449=>19547,36450=>19548,36452=>19549,36453=>19550,36455=>19551,36456=>19552,36458=>19553,36459=>19554,36462=>19555,36465=>19556,36467=>19557,36469=>19558,36471=>19559,36472=>19560,36473=>19561,36475=>19562,36477=>19563,36478=>19564,36480=>19565,36482=>19566,36483=>19567,36484=>19568,36486=>19569,36488=>19570,36492=>19571,36494=>19572,36501=>19573,36502=>19574,36503=>19575,36504=>19576,36505=>19577,36507=>19578,36509=>19579,36511=>19580,36512=>19581,36514=>19582,36515=>19583,36516=>19584,36519=>19585,36520=>19586,36521=>19587,36525=>19588,36526=>19589,36528=>19590,36529=>19591,36531=>19592,36532=>19593,36533=>19594,36534=>19595,36535=>19596,36536=>19597,36537=>19598,36539=>19599,36540=>19600,36541=>19601,36542=>19602,36543=>19603,36545=>19604,36546=>19605,36547=>19606,36548=>19607,36549=>19608,36550=>19609,36551=>19610,36552=>19611,36553=>19612,36559=>19613,36560=>19614,36561=>19615,36563=>19616,36565=>19617,36566=>19618,36567=>19619,36568=>19620,36569=>19621,36570=>19622,36572=>19623,36573=>19624,36574=>19625,36576=>19626,36577=>19627,36578=>19628,36579=>19629,36581=>19630,36582=>19631,36583=>19632,36584=>19633,36585=>19634,36586=>19635,36588=>19636,36589=>19637,36590=>19638,36591=>19639,36592=>19640,36593=>19641,36595=>19642,36596=>19643,36597=>19644,36598=>19645,36599=>19646,36605=>19647,36607=>19648,36608=>19649,36609=>19650,36610=>19651,36612=>19652,36614=>19653,36616=>19654,36619=>19655,36620=>19656,36621=>19657,36622=>19658,36623=>19659,36624=>19660,36625=>19661,36627=>19662,36630=>19663,36631=>19664,36632=>19665,36633=>19666,36634=>19667,36640=>19668,36641=>19669,36642=>19670,36643=>19671,36644=>19672,36647=>19673,36648=>19674,36651=>19675,36652=>19676,36653=>19677,36654=>19678,36656=>19679,36657=>19680,36658=>19681,36660=>19682,36661=>19683,36662=>19684,36663=>19685,36665=>19686,36666=>19687,36668=>19688,36669=>19689,36672=>19690,36673=>19691,36675=>19692,36679=>19693,36680=>19694,36682=>19695,36683=>19696,36684=>19697,36687=>19698,36688=>19699,36689=>19700,36690=>19701,36691=>19702,36693=>19703,36694=>19704,36695=>19705,36696=>19706,36697=>19707,36698=>19708,36699=>19709,36700=>19710,36701=>19711,36702=>19712,36704=>19713,36707=>19714,36709=>19715,36714=>19716,36736=>19717,36748=>19718,36754=>19719,36765=>19720,36768=>19721,36769=>19722,36770=>19723,36772=>19724,36773=>19725,36775=>19726,36778=>19727,36780=>19728,36787=>19729,36788=>19730,12193=>19731,36789=>19731,36791=>19732,36792=>19733,36794=>19734,36795=>19735,36796=>19736,36799=>19737,36800=>19738,36803=>19739,36806=>19740,36809=>19741,36810=>19742,36811=>19743,36812=>19744,36813=>19745,36815=>19746,36818=>19747,36822=>19748,36823=>19749,36826=>19750,36832=>19751,36833=>19752,36835=>19753,36839=>19754,36844=>19755,36847=>19756,36849=>19757,36850=>19758,36853=>19759,36854=>19760,36858=>19761,36859=>19762,36860=>19763,36862=>19764,36863=>19765,36871=>19766,36872=>19767,36876=>19768,36878=>19769,36883=>19770,36888=>19771,36892=>19772,36900=>19773,36901=>19774,36903=>19775,36904=>19776,36905=>19777,36906=>19778,36907=>19779,36908=>19780,36912=>19781,36913=>19782,36915=>19783,36916=>19784,36919=>19785,36921=>19786,36922=>19787,36925=>19788,36927=>19789,36928=>19790,36931=>19791,36933=>19792,36934=>19793,36936=>19794,36937=>19795,36938=>19796,36940=>19797,36950=>19798,36953=>19799,36954=>19800,36957=>19801,36959=>19802,36961=>19803,36964=>19804,36966=>19805,36967=>19806,36970=>19807,36971=>19808,36972=>19809,36975=>19810,36976=>19811,36977=>19812,36979=>19813,36982=>19814,36985=>19815,36987=>19816,36990=>19817,36997=>19818,36998=>19819,37001=>19820,37004=>19821,37005=>19822,37006=>19823,37010=>19824,37012=>19825,37014=>19826,37016=>19827,37018=>19828,37020=>19829,37022=>19830,37023=>19831,37024=>19832,37028=>19833,37029=>19834,37031=>19835,37032=>19836,37033=>19837,37035=>19838,37037=>19839,37042=>19840,37047=>19841,37052=>19842,37053=>19843,37055=>19844,37056=>19845,37058=>19846,37059=>19847,37062=>19848,37064=>19849,37065=>19850,37067=>19851,37068=>19852,37069=>19853,37074=>19854,37076=>19855,37077=>19856,37078=>19857,37080=>19858,37081=>19859,37082=>19860,37086=>19861,37088=>19862,37091=>19863,37092=>19864,37093=>19865,37097=>19866,37098=>19867,37100=>19868,37102=>19869,37104=>19870,37105=>19871,37106=>19872,37107=>19873,37110=>19874,37111=>19875,37113=>19876,37114=>19877,37115=>19878,37116=>19879,37119=>19880,37120=>19881,37121=>19882,37123=>19883,37125=>19884,37127=>19885,37128=>19886,37130=>19887,37131=>19888,37132=>19889,37133=>19890,37134=>19891,37135=>19892,37136=>19893,37137=>19894,37139=>19895,37141=>19896,37143=>19897,37144=>19898,37146=>19899,37147=>19900,37148=>19901,37149=>19902,37151=>19903,37152=>19904,37153=>19905,37156=>19906,37157=>19907,37158=>19908,37160=>19909,37161=>19910,37162=>19911,37163=>19912,37164=>19913,37166=>19914,37171=>19915,37173=>19916,37175=>19917,37176=>19918,37179=>19919,37180=>19920,37181=>19921,37182=>19922,37183=>19923,37184=>19924,37185=>19925,37186=>19926,37188=>19927,37189=>19928,37191=>19929,37201=>19930,37203=>19931,37204=>19932,37205=>19933,37206=>19934,37208=>19935,37209=>19936,37211=>19937,37212=>19938,37215=>19939,37216=>19940,37222=>19941,37223=>19942,37224=>19943,37227=>19944,37229=>19945,37235=>19946,37242=>19947,37243=>19948,37244=>19949,37248=>19950,37249=>19951,37250=>19952,37251=>19953,37252=>19954,37254=>19955,37256=>19956,37258=>19957,37262=>19958,37263=>19959,37267=>19960,37268=>19961,37269=>19962,37271=>19963,37272=>19964,37273=>19965,37277=>19966,37278=>19967,37279=>19968,37280=>19969,37281=>19970,37284=>19971,37285=>19972,37286=>19973,37287=>19974,37288=>19975,37289=>19976,37296=>19977,37297=>19978,37298=>19979,37299=>19980,37302=>19981,37303=>19982,37304=>19983,37305=>19984,37307=>19985,37308=>19986,37309=>19987,37310=>19988,37311=>19989,37314=>19990,37316=>19991,12196=>19992,37318=>19992,37320=>19993,37328=>19994,37334=>19995,37338=>19996,37339=>19997,37342=>19998,37343=>19999,37344=>20000,37345=>20001,37346=>20002,37349=>20003,37350=>20004,37352=>20005,37354=>20006,37355=>20007,37356=>20008,37357=>20009,37358=>20010,37359=>20011,37360=>20012,37361=>20013,37362=>20014,37363=>20015,37364=>20016,37366=>20017,37368=>20018,37371=>20019,37372=>20020,37373=>20021,37374=>20022,37375=>20023,37378=>20024,37379=>20025,37381=>20026,37382=>20027,37383=>20028,37386=>20029,37387=>20030,37388=>20031,37391=>20032,37394=>20033,37395=>20034,37398=>20035,37399=>20036,37400=>20037,37401=>20038,37402=>20039,37403=>20040,37404=>20041,37405=>20042,37407=>20043,37408=>20044,37409=>20045,37410=>20046,37412=>20047,37416=>20048,37417=>20049,37418=>20050,37419=>20051,37420=>20052,37421=>20053,37423=>20054,37425=>20055,37426=>20056,37429=>20057,37430=>20058,37435=>20059,37436=>20060,37441=>20061,37442=>20062,37443=>20063,37444=>20064,37446=>20065,37447=>20066,37450=>20067,37451=>20068,37452=>20069,37454=>20070,37455=>20071,37456=>20072,37458=>20073,37459=>20074,37460=>20075,37462=>20076,37464=>20077,37465=>20078,37468=>20079,37469=>20080,37471=>20081,37472=>20082,37473=>20083,37475=>20084,37476=>20085,37477=>20086,37479=>20087,37480=>20088,37481=>20089,37482=>20090,37483=>20091,37486=>20092,37487=>20093,37488=>20094,37489=>20095,37490=>20096,37491=>20097,37493=>20098,37494=>20099,37495=>20100,37497=>20101,37500=>20102,37501=>20103,37502=>20104,37505=>20105,37506=>20106,37508=>20107,37510=>20108,37511=>20109,37512=>20110,37513=>20111,37514=>20112,37515=>20113,37516=>20114,37517=>20115,37519=>20116,37520=>20117,37522=>20118,37524=>20119,37525=>20120,37527=>20121,37529=>20122,37531=>20123,37533=>20124,37534=>20125,37535=>20126,37537=>20127,37538=>20128,37540=>20129,37543=>20130,37549=>20131,37551=>20132,37552=>20133,37554=>20134,37555=>20135,37556=>20136,37557=>20137,37558=>20138,37560=>20139,37562=>20140,37565=>20141,37566=>20142,37567=>20143,37568=>20144,37570=>20145,37572=>20146,37574=>20147,37577=>20148,37578=>20149,37579=>20150,37581=>20151,37582=>20152,37584=>20153,37585=>20154,37587=>20155,37588=>20156,37589=>20157,37590=>20158,37591=>20159,37592=>20160,37593=>20161,37594=>20162,37595=>20163,37596=>20164,37598=>20165,37600=>20166,37601=>20167,37602=>20168,37607=>20169,37609=>20170,37611=>20171,37612=>20172,37618=>20173,37619=>20174,37620=>20175,37621=>20176,37623=>20177,37625=>20178,37626=>20179,37627=>20180,37629=>20181,37630=>20182,37631=>20183,37632=>20184,37634=>20185,37635=>20186,37636=>20187,37637=>20188,37641=>20189,37642=>20190,37643=>20191,37644=>20192,37645=>20193,37646=>20194,37647=>20195,37649=>20196,37651=>20197,37652=>20198,37654=>20199,37655=>20200,37660=>20201,37661=>20202,37662=>20203,37665=>20204,37667=>20205,37668=>20206,37669=>20207,37671=>20208,37673=>20209,37674=>20210,37676=>20211,37677=>20212,37680=>20213,37681=>20214,37684=>20215,37685=>20216,37687=>20217,37689=>20218,37690=>20219,37691=>20220,37692=>20221,37693=>20222,37695=>20223,37698=>20224,37700=>20225,37701=>20226,37704=>20227,37705=>20228,37706=>20229,37708=>20230,37710=>20231,37711=>20232,37712=>20233,37713=>20234,37714=>20235,37715=>20236,37717=>20237,37718=>20238,37719=>20239,37721=>20240,37722=>20241,37724=>20242,37725=>20243,37726=>20244,37727=>20245,37728=>20246,37729=>20247,37730=>20248,37731=>20249,37734=>20250,37735=>20251,37736=>20252,37739=>20253,37741=>20254,37742=>20255,37743=>20256,37745=>20257,37746=>20258,37747=>20259,37748=>20260,37751=>20261,37752=>20262,37753=>20263,37755=>20264,37756=>20265,37757=>20266,37759=>20267,37760=>20268,37761=>20269,37763=>20270,37765=>20271,37766=>20272,37768=>20273,37769=>20274,37771=>20275,37772=>20276,37773=>20277,37774=>20278,37776=>20279,37777=>20280,37778=>20281,37779=>20282,37780=>20283,37781=>20284,37783=>20285,37785=>20286,37786=>20287,37787=>20288,37788=>20289,37789=>20290,37790=>20291,37791=>20292,37792=>20293,37793=>20294,37796=>20295,37797=>20296,37800=>20297,37803=>20298,37805=>20299,37807=>20300,37809=>20301,37810=>20302,37812=>20303,37814=>20304,37815=>20305,37817=>20306,37818=>20307,37819=>20308,37820=>20309,37821=>20310,37822=>20311,37824=>20312,37825=>20313,37826=>20314,37828=>20315,37829=>20316,37830=>20317,37833=>20318,37835=>20319,37838=>20320,37839=>20321,37840=>20322,37842=>20323,37843=>20324,37844=>20325,37845=>20326,37849=>20327,37850=>20328,37851=>20329,37856=>20330,37859=>20331,37861=>20332,37862=>20333,37863=>20334,37865=>20335,37866=>20336,37867=>20337,37868=>20338,37869=>20339,37870=>20340,37871=>20341,37872=>20342,37873=>20343,37874=>20344,37875=>20345,37876=>20346,37878=>20347,37880=>20348,37882=>20349,37883=>20350,37884=>20351,37885=>20352,37886=>20353,37887=>20354,37888=>20355,37889=>20356,37890=>20357,37892=>20358,37893=>20359,37894=>20360,37895=>20361,37896=>20362,37897=>20363,37898=>20364,37900=>20365,37901=>20366,37902=>20367,37903=>20368,37905=>20369,37909=>20370,37910=>20371,37911=>20372,37914=>20373,37915=>20374,37916=>20375,37918=>20376,37919=>20377,37921=>20378,37922=>20379,37923=>20380,37924=>20381,37925=>20382,37929=>20383,37930=>20384,37931=>20385,37932=>20386,37933=>20387,37935=>20388,37936=>20389,37937=>20390,37940=>20391,37942=>20392,37943=>20393,37945=>20394,37947=>20395,37948=>20396,37949=>20397,37952=>20398,37953=>20399,37954=>20400,37955=>20401,37957=>20402,37958=>20403,37959=>20404,37960=>20405,37961=>20406,37963=>20407,37965=>20408,37966=>20409,37967=>20410,37968=>20411,37969=>20412,37971=>20413,37973=>20414,37974=>20415,37975=>20416,37976=>20417,37977=>20418,37978=>20419,37979=>20420,37980=>20421,37981=>20422,37982=>20423,37983=>20424,37985=>20425,37986=>20426,37988=>20427,37990=>20428,37991=>20429,37992=>20430,37993=>20431,37994=>20432,37996=>20433,37998=>20434,37999=>20435,38001=>20436,38003=>20437,38004=>20438,38005=>20439,38006=>20440,38008=>20441,38010=>20442,38011=>20443,38016=>20444,38017=>20445,38018=>20446,38019=>20447,38020=>20448,38033=>20449,38038=>20450,38040=>20451,38087=>20452,38095=>20453,38099=>20454,38100=>20455,38106=>20456,38118=>20457,38139=>20458,38172=>20459,38176=>20460,38183=>20461,38195=>20462,38205=>20463,38211=>20464,38216=>20465,38219=>20466,38229=>20467,38234=>20468,38240=>20469,38254=>20470,38260=>20471,38261=>20472,38264=>20473,38265=>20474,38266=>20475,38267=>20476,38268=>20477,38269=>20478,38270=>20479,38273=>20480,38276=>20481,38277=>20482,38279=>20483,38280=>20484,38282=>20485,38285=>20486,38288=>20487,38290=>20488,38293=>20489,38294=>20490,38295=>20491,38297=>20492,38298=>20493,38299=>20494,38300=>20495,38301=>20496,38302=>20497,38303=>20498,38304=>20499,38306=>20500,38310=>20501,38311=>20502,38314=>20503,38318=>20504,38319=>20505,38320=>20506,38321=>20507,38323=>20508,38324=>20509,38325=>20510,38327=>20511,38328=>20512,38330=>20513,38336=>20514,38337=>20515,38338=>20516,38340=>20517,38341=>20518,38343=>20519,38345=>20520,38349=>20521,38350=>20522,38351=>20523,38353=>20524,38354=>20525,38355=>20526,38359=>20527,38360=>20528,38361=>20529,38362=>20530,38363=>20531,38365=>20532,38367=>20533,38368=>20534,38371=>20535,38372=>20536,38374=>20537,38375=>20538,38380=>20539,38399=>20540,38407=>20541,38419=>20542,38424=>20543,38427=>20544,38430=>20545,38432=>20546,38435=>20547,38436=>20548,38437=>20549,38438=>20550,38439=>20551,38440=>20552,38441=>20553,38443=>20554,38444=>20555,38445=>20556,38447=>20557,38448=>20558,38455=>20559,38456=>20560,38457=>20561,38458=>20562,38462=>20563,38465=>20564,38467=>20565,38474=>20566,38478=>20567,38479=>20568,38481=>20569,38482=>20570,38483=>20571,38486=>20572,38487=>20573,38489=>20574,38490=>20575,38492=>20576,38494=>20577,38496=>20578,38501=>20579,38502=>20580,38507=>20581,38509=>20582,38510=>20583,38511=>20584,38513=>20585,38521=>20586,38522=>20587,38523=>20588,38524=>20589,38526=>20590,38527=>20591,38528=>20592,38529=>20593,38530=>20594,38531=>20595,38532=>20596,38535=>20597,38537=>20598,38540=>20599,38545=>20600,38546=>20601,38547=>20602,38550=>20603,38554=>20604,38557=>20605,38558=>20606,38559=>20607,38560=>20608,38561=>20609,38562=>20610,63985=>20611,38563=>20611,38564=>20612,38565=>20613,38566=>20614,38569=>20615,38571=>20616,38572=>20617,38573=>20618,38574=>20619,38575=>20620,38578=>20621,38581=>20622,38583=>20623,38586=>20624,38591=>20625,38594=>20626,38595=>20627,38600=>20628,38602=>20629,38603=>20630,38608=>20631,38609=>20632,38611=>20633,38612=>20634,38615=>20635,38616=>20636,38618=>20637,38621=>20638,38622=>20639,38623=>20640,38625=>20641,38628=>20642,38629=>20643,38630=>20644,38631=>20645,38635=>20646,38636=>20647,38637=>20648,38638=>20649,38640=>20650,38641=>20651,38644=>20652,38645=>20653,38648=>20654,38650=>20655,38652=>20656,38653=>20657,38655=>20658,38658=>20659,38659=>20660,38661=>20661,38666=>20662,38667=>20663,38668=>20664,38672=>20665,38673=>20666,38674=>20667,38676=>20668,38677=>20669,38679=>20670,38680=>20671,38681=>20672,38682=>20673,38683=>20674,38685=>20675,38687=>20676,38688=>20677,38689=>20678,38690=>20679,38691=>20680,38692=>20681,38693=>20682,38694=>20683,38696=>20684,38697=>20685,38699=>20686,38700=>20687,38702=>20688,38703=>20689,38705=>20690,38707=>20691,38708=>20692,38709=>20693,38710=>20694,38711=>20695,38714=>20696,38715=>20697,38716=>20698,38719=>20699,38720=>20700,38721=>20701,38723=>20702,38725=>20703,38726=>20704,38727=>20705,38729=>20706,38730=>20707,38731=>20708,38732=>20709,38733=>20710,38734=>20711,38735=>20712,38736=>20713,12205=>20714,38737=>20714,38740=>20715,38741=>20716,38743=>20717,38744=>20718,38748=>20719,38749=>20720,38751=>20721,38755=>20722,38756=>20723,38758=>20724,38759=>20725,38762=>20726,38763=>20727,38764=>20728,38765=>20729,38766=>20730,38767=>20731,38768=>20732,38769=>20733,38770=>20734,38773=>20735,38775=>20736,38776=>20737,38777=>20738,38778=>20739,38779=>20740,38781=>20741,38782=>20742,38783=>20743,38784=>20744,38785=>20745,38786=>20746,38787=>20747,38788=>20748,38790=>20749,38791=>20750,38792=>20751,38793=>20752,38794=>20753,38796=>20754,38798=>20755,38800=>20756,38803=>20757,38805=>20758,38806=>20759,38807=>20760,38809=>20761,38810=>20762,38811=>20763,38812=>20764,38813=>20765,38814=>20766,38815=>20767,38817=>20768,38818=>20769,38820=>20770,38821=>20771,38823=>20772,38824=>20773,38825=>20774,38826=>20775,38828=>20776,38830=>20777,38832=>20778,38833=>20779,38835=>20780,38837=>20781,38838=>20782,38839=>20783,38840=>20784,38841=>20785,38842=>20786,38843=>20787,38844=>20788,38846=>20789,38847=>20790,38848=>20791,38849=>20792,38850=>20793,38852=>20794,38853=>20795,38855=>20796,38856=>20797,38858=>20798,38861=>20799,38862=>20800,38863=>20801,38864=>20802,38865=>20803,38866=>20804,38868=>20805,38869=>20806,38870=>20807,38871=>20808,38872=>20809,38874=>20810,38875=>20811,38877=>20812,38879=>20813,38880=>20814,38881=>20815,38882=>20816,38883=>20817,38884=>20818,38885=>20819,38888=>20820,38894=>20821,38895=>20822,38896=>20823,38897=>20824,38898=>20825,38900=>20826,38903=>20827,38904=>20828,38905=>20829,38906=>20830,38907=>20831,38908=>20832,38909=>20833,38910=>20834,38912=>20835,38916=>20836,38921=>20837,38923=>20838,38925=>20839,38932=>20840,38933=>20841,38934=>20842,38937=>20843,38938=>20844,38939=>20845,38941=>20846,38942=>20847,38943=>20848,38944=>20849,38946=>20850,38947=>20851,38949=>20852,38951=>20853,38952=>20854,38953=>20855,38954=>20856,38955=>20857,38956=>20858,38958=>20859,38959=>20860,38961=>20861,38962=>20862,38963=>20863,38964=>20864,38965=>20865,38966=>20866,38969=>20867,38970=>20868,38972=>20869,38974=>20870,38975=>20871,38976=>20872,38977=>20873,38978=>20874,38979=>20875,38980=>20876,38981=>20877,38983=>20878,38984=>20879,38985=>20880,38986=>20881,38987=>20882,38991=>20883,38992=>20884,38993=>20885,38994=>20886,38997=>20887,38998=>20888,38999=>20889,39002=>20890,39004=>20891,39005=>20892,39007=>20893,39008=>20894,39009=>20895,39011=>20896,39012=>20897,39014=>20898,39016=>20899,39017=>20900,39018=>20901,39021=>20902,39022=>20903,39026=>20904,39051=>20905,39054=>20906,39058=>20907,39061=>20908,39065=>20909,39075=>20910,39081=>20911,39082=>20912,39083=>20913,39084=>20914,39085=>20915,39088=>20916,39090=>20917,39092=>20918,39093=>20919,39095=>20920,39096=>20921,39097=>20922,39098=>20923,39099=>20924,39101=>20925,39102=>20926,39103=>20927,39104=>20928,39105=>20929,39106=>20930,39107=>20931,39109=>20932,39111=>20933,39113=>20934,39114=>20935,39115=>20936,39116=>20937,39117=>20938,39119=>20939,39120=>20940,39124=>20941,39126=>20942,39127=>20943,39132=>20944,39133=>20945,39137=>20946,39139=>20947,39140=>20948,39141=>20949,39142=>20950,39148=>20951,39150=>20952,39152=>20953,39153=>20954,39155=>20955,39157=>20956,39158=>20957,39159=>20958,39160=>20959,39161=>20960,39162=>20961,39163=>20962,39167=>20963,39168=>20964,39169=>20965,39170=>20966,39172=>20967,39174=>20968,39175=>20969,39176=>20970,39179=>20971,39182=>20972,39183=>20973,39188=>20974,39189=>20975,39190=>20976,39191=>20977,39193=>20978,39194=>20979,39196=>20980,39197=>20981,39199=>20982,39200=>20983,39202=>20984,39203=>20985,39204=>20986,39205=>20987,39206=>20988,39207=>20989,39209=>20990,39210=>20991,39211=>20992,39212=>20993,39213=>20994,39215=>20995,39216=>20996,39217=>20997,39218=>20998,39220=>20999,39221=>21000,39222=>21001,39224=>21002,39225=>21003,39226=>21004,39227=>21005,39229=>21006,39232=>21007,39233=>21008,39234=>21009,39236=>21010,39238=>21011,39239=>21012,39245=>21013,39246=>21014,39247=>21015,39248=>21016,39251=>21017,39254=>21018,39256=>21019,39257=>21020,39258=>21021,39259=>21022,39261=>21023,39263=>21024,39264=>21025,39265=>21026,39268=>21027,39270=>21028,39283=>21029,39288=>21030,39289=>21031,39291=>21032,39294=>21033,39298=>21034,39299=>21035,39305=>21036,39308=>21037,39310=>21038,39322=>21039,39323=>21040,39324=>21041,39325=>21042,39326=>21043,39327=>21044,39328=>21045,39329=>21046,39330=>21047,39331=>21048,39332=>21049,39334=>21050,39335=>21051,39337=>21052,39338=>21053,39339=>21054,39343=>21055,39344=>21056,39346=>21057,39349=>21058,39350=>21059,39351=>21060,39352=>21061,39353=>21062,39354=>21063,39355=>21064,39356=>21065,39357=>21066,39358=>21067,39359=>21068,39360=>21069,39362=>21070,39363=>21071,39364=>21072,39365=>21073,39366=>21074,39367=>21075,39368=>21076,39369=>21077,39370=>21078,39371=>21079,39372=>21080,39373=>21081,39374=>21082,39375=>21083,39379=>21084,39382=>21085,39383=>21086,39386=>21087,39388=>21088,39390=>21089,39392=>21090,39395=>21091,39396=>21092,39397=>21093,39398=>21094,39399=>21095,39400=>21096,39401=>21097,39402=>21098,39403=>21099,39404=>21100,39406=>21101,39407=>21102,39408=>21103,39410=>21104,39411=>21105,39412=>21106,39413=>21107,39414=>21108,39415=>21109,39416=>21110,39417=>21111,39418=>21112,39419=>21113,39420=>21114,39421=>21115,39422=>21116,39424=>21117,39426=>21118,39427=>21119,39428=>21120,39430=>21121,39431=>21122,39432=>21123,39433=>21124,39434=>21125,39435=>21126,39436=>21127,39440=>21128,39441=>21129,39442=>21130,39443=>21131,39444=>21132,39445=>21133,39447=>21134,39448=>21135,39450=>21136,39451=>21137,39452=>21138,39453=>21139,39454=>21140,39455=>21141,39456=>21142,39457=>21143,39458=>21144,39459=>21145,39460=>21146,39461=>21147,39462=>21148,39463=>21149,39464=>21150,39465=>21151,39466=>21152,39468=>21153,39471=>21154,39473=>21155,39474=>21156,39475=>21157,39476=>21158,39477=>21159,39481=>21160,39482=>21161,39483=>21162,39484=>21163,39485=>21164,39487=>21165,39494=>21166,39495=>21167,39496=>21168,39497=>21169,39499=>21170,39500=>21171,39502=>21172,39504=>21173,39505=>21174,39506=>21175,39507=>21176,39508=>21177,39510=>21178,39512=>21179,39513=>21180,39516=>21181,39517=>21182,39518=>21183,39520=>21184,39521=>21185,39523=>21186,39526=>21187,39527=>21188,39528=>21189,39529=>21190,39531=>21191,39538=>21192,39555=>21193,39561=>21194,39565=>21195,39566=>21196,39572=>21197,39573=>21198,39577=>21199,39590=>21200,39593=>21201,39594=>21202,39595=>21203,39596=>21204,39597=>21205,39598=>21206,39602=>21207,39603=>21208,39604=>21209,39605=>21210,39609=>21211,39611=>21212,39613=>21213,39614=>21214,39615=>21215,39619=>21216,39620=>21217,39622=>21218,39623=>21219,39624=>21220,39625=>21221,39626=>21222,39629=>21223,39630=>21224,39632=>21225,39639=>21226,39641=>21227,39642=>21228,39643=>21229,39644=>21230,39645=>21231,39646=>21232,39648=>21233,39650=>21234,39651=>21235,39652=>21236,39653=>21237,39655=>21238,39656=>21239,39657=>21240,39658=>21241,39660=>21242,39664=>21243,39665=>21244,39666=>21245,39667=>21246,39668=>21247,39669=>21248,39670=>21249,39671=>21250,39672=>21251,39674=>21252,39676=>21253,39677=>21254,39678=>21255,39679=>21256,39680=>21257,39681=>21258,39682=>21259,39684=>21260,39685=>21261,39687=>21262,39689=>21263,39690=>21264,39691=>21265,39692=>21266,39694=>21267,39696=>21268,39697=>21269,39698=>21270,39700=>21271,39701=>21272,39702=>21273,39703=>21274,39704=>21275,39705=>21276,39707=>21277,39708=>21278,39709=>21279,39710=>21280,39712=>21281,39713=>21282,39716=>21283,39718=>21284,39720=>21285,39722=>21286,39723=>21287,39724=>21288,39725=>21289,39728=>21290,39731=>21291,39732=>21292,39733=>21293,39734=>21294,39735=>21295,39736=>21296,39737=>21297,39738=>21298,39741=>21299,39742=>21300,39743=>21301,39744=>21302,39750=>21303,39754=>21304,39755=>21305,39756=>21306,39760=>21307,39762=>21308,39763=>21309,39765=>21310,39766=>21311,39767=>21312,39769=>21313,39771=>21314,39772=>21315,39773=>21316,39774=>21317,39775=>21318,39776=>21319,39777=>21320,39778=>21321,39779=>21322,39780=>21323,39781=>21324,39782=>21325,39783=>21326,39784=>21327,39785=>21328,39786=>21329,39787=>21330,39788=>21331,39789=>21332,39790=>21333,39792=>21334,39793=>21335,39794=>21336,39795=>21337,39797=>21338,39798=>21339,39800=>21340,39801=>21341,39802=>21342,39803=>21343,39804=>21344,39805=>21345,39806=>21346,39807=>21347,39808=>21348,39810=>21349,39812=>21350,39813=>21351,39814=>21352,39815=>21353,39816=>21354,39817=>21355,39818=>21356,39819=>21357,39820=>21358,39821=>21359,39823=>21360,39827=>21361,39828=>21362,39829=>21363,39830=>21364,39831=>21365,39832=>21366,39833=>21367,39835=>21368,39836=>21369,39839=>21370,39840=>21371,39841=>21372,39842=>21373,39843=>21374,39844=>21375,39845=>21376,39846=>21377,39847=>21378,39848=>21379,39849=>21380,39852=>21381,39855=>21382,39856=>21383,39857=>21384,39858=>21385,39859=>21386,39860=>21387,39861=>21388,39862=>21389,39863=>21390,39864=>21391,39865=>21392,39866=>21393,39867=>21394,39868=>21395,39869=>21396,39870=>21397,39871=>21398,39874=>21399,39875=>21400,39876=>21401,39877=>21402,39878=>21403,39880=>21404,39883=>21405,39884=>21406,39885=>21407,39886=>21408,39887=>21409,39888=>21410,39889=>21411,39890=>21412,39891=>21413,39893=>21414,39895=>21415,39896=>21416,39897=>21417,39898=>21418,39900=>21419,39902=>21420,39903=>21421,39904=>21422,39907=>21423,39909=>21424,39910=>21425,39913=>21426,39916=>21427,39917=>21428,39918=>21429,39919=>21430,39921=>21431,39922=>21432,39923=>21433,39925=>21434,39926=>21435,39927=>21436,39928=>21437,39929=>21438,39930=>21439,39931=>21440,39932=>21441,39934=>21442,39936=>21443,39937=>21444,39938=>21445,39939=>21446,39940=>21447,39941=>21448,39942=>21449,39943=>21450,39946=>21451,39947=>21452,39948=>21453,39950=>21454,39951=>21455,39953=>21456,39956=>21457,39957=>21458,39958=>21459,39959=>21460,39960=>21461,39961=>21462,39962=>21463,39963=>21464,39964=>21465,39965=>21466,39966=>21467,39967=>21468,39969=>21469,39970=>21470,39972=>21471,39974=>21472,39975=>21473,39978=>21474,39979=>21475,39980=>21476,39982=>21477,39983=>21478,39984=>21479,39988=>21480,39990=>21481,39992=>21482,39994=>21483,39996=>21484,39997=>21485,39999=>21486,40000=>21487,40001=>21488,40002=>21489,40003=>21490,40004=>21491,40006=>21492,40007=>21493,40010=>21494,40011=>21495,40012=>21496,40013=>21497,40014=>21498,40015=>21499,40016=>21500,40017=>21501,40019=>21502,40021=>21503,40025=>21504,40026=>21505,40027=>21506,40028=>21507,40030=>21508,40032=>21509,40033=>21510,40034=>21511,40035=>21512,40036=>21513,40037=>21514,40038=>21515,40040=>21516,40041=>21517,40042=>21518,40043=>21519,40044=>21520,40046=>21521,40047=>21522,40048=>21523,40049=>21524,40050=>21525,40051=>21526,40052=>21527,40053=>21528,40054=>21529,40055=>21530,40057=>21531,40059=>21532,40061=>21533,40062=>21534,40064=>21535,40067=>21536,40068=>21537,40073=>21538,40074=>21539,40076=>21540,40079=>21541,40083=>21542,40086=>21543,40087=>21544,40088=>21545,40089=>21546,40093=>21547,40106=>21548,40108=>21549,40111=>21550,40121=>21551,40126=>21552,40127=>21553,40128=>21554,40129=>21555,40130=>21556,40136=>21557,40137=>21558,40145=>21559,40146=>21560,40154=>21561,40155=>21562,40160=>21563,40161=>21564,40163=>21565,40164=>21566,40166=>21567,40167=>21568,40168=>21569,40170=>21570,40171=>21571,40173=>21572,40174=>21573,40175=>21574,40176=>21575,40177=>21576,40178=>21577,40181=>21578,40183=>21579,40184=>21580,40185=>21581,40186=>21582,40187=>21583,40188=>21584,40189=>21585,40190=>21586,40191=>21587,40192=>21588,40193=>21589,40194=>21590,40195=>21591,40196=>21592,40197=>21593,40200=>21594,40202=>21595,40203=>21596,40204=>21597,40205=>21598,40206=>21599,40207=>21600,40208=>21601,40209=>21602,40210=>21603,40211=>21604,40212=>21605,40214=>21606,40215=>21607,40216=>21608,40217=>21609,40218=>21610,40220=>21611,40222=>21612,40224=>21613,40225=>21614,40226=>21615,40228=>21616,40229=>21617,40231=>21618,40233=>21619,40234=>21620,40235=>21621,40236=>21622,40237=>21623,40238=>21624,40241=>21625,40242=>21626,40243=>21627,40244=>21628,40245=>21629,40246=>21630,40247=>21631,40248=>21632,40249=>21633,40250=>21634,40252=>21635,40253=>21636,40254=>21637,40256=>21638,40257=>21639,40259=>21640,40260=>21641,40261=>21642,40262=>21643,40263=>21644,40264=>21645,40265=>21646,40266=>21647,40267=>21648,40268=>21649,40269=>21650,40270=>21651,40271=>21652,40272=>21653,40276=>21654,40277=>21655,40278=>21656,40279=>21657,40280=>21658,40281=>21659,40282=>21660,40283=>21661,40286=>21662,40287=>21663,40290=>21664,40291=>21665,40292=>21666,40293=>21667,40294=>21668,40295=>21669,40296=>21670,40297=>21671,40299=>21672,40301=>21673,40302=>21674,40304=>21675,40305=>21676,40307=>21677,40308=>21678,40309=>21679,40310=>21680,40311=>21681,40312=>21682,40313=>21683,40314=>21684,40315=>21685,40316=>21686,40317=>21687,40318=>21688,40319=>21689,40320=>21690,40321=>21691,40322=>21692,40323=>21693,40324=>21694,40325=>21695,40326=>21696,40328=>21697,40330=>21698,40331=>21699,40332=>21700,40333=>21701,40334=>21702,40335=>21703,40336=>21704,40337=>21705,40338=>21706,40340=>21707,40341=>21708,40342=>21709,40343=>21710,40345=>21711,40347=>21712,40348=>21713,40349=>21714,40350=>21715,40351=>21716,40352=>21717,40353=>21718,40354=>21719,40355=>21720,40356=>21721,40358=>21722,40359=>21723,40360=>21724,40362=>21725,40363=>21726,40364=>21727,40365=>21728,40366=>21729,40368=>21730,40369=>21731,40370=>21732,40371=>21733,40373=>21734,40374=>21735,40375=>21736,40376=>21737,40377=>21738,40378=>21739,40381=>21740,40382=>21741,40383=>21742,40385=>21743,40387=>21744,40389=>21745,40390=>21746,40391=>21747,40392=>21748,40393=>21749,40394=>21750,40395=>21751,40396=>21752,40397=>21753,40398=>21754,40399=>21755,40400=>21756,40401=>21757,40402=>21758,40404=>21759,40405=>21760,40406=>21761,40408=>21762,40411=>21763,40412=>21764,40413=>21765,40414=>21766,40415=>21767,40416=>21768,40417=>21769,40418=>21770,40419=>21771,40420=>21772,40423=>21773,40424=>21774,40425=>21775,40426=>21776,40427=>21777,40428=>21778,40429=>21779,40430=>21780,40432=>21781,40433=>21782,40436=>21783,40437=>21784,40438=>21785,40439=>21786,40443=>21787,40444=>21788,40445=>21789,40446=>21790,40447=>21791,40448=>21792,40449=>21793,40450=>21794,40451=>21795,40452=>21796,40453=>21797,40454=>21798,40455=>21799,40456=>21800,40457=>21801,40458=>21802,40459=>21803,40461=>21804,40462=>21805,40463=>21806,40464=>21807,40465=>21808,40466=>21809,40467=>21810,40468=>21811,40470=>21812,40471=>21813,40472=>21814,40473=>21815,40476=>21816,40484=>21817,40487=>21818,40494=>21819,40496=>21820,40500=>21821,40507=>21822,40508=>21823,40512=>21824,40525=>21825,40528=>21826,40530=>21827,40531=>21828,40532=>21829,40534=>21830,40537=>21831,40541=>21832,40543=>21833,40544=>21834,40545=>21835,40546=>21836,40549=>21837,40558=>21838,40559=>21839,40562=>21840,40564=>21841,40566=>21842,40567=>21843,40568=>21844,40571=>21845,40576=>21846,40577=>21847,40579=>21848,40580=>21849,40581=>21850,40582=>21851,40585=>21852,40586=>21853,40588=>21854,40589=>21855,40590=>21856,40591=>21857,40592=>21858,40593=>21859,40596=>21860,40597=>21861,40598=>21862,40600=>21863,40601=>21864,40602=>21865,40603=>21866,40604=>21867,40606=>21868,40608=>21869,40609=>21870,40610=>21871,40611=>21872,40612=>21873,40615=>21874,40616=>21875,40618=>21876,40619=>21877,40620=>21878,40621=>21879,40622=>21880,40624=>21881,40625=>21882,40626=>21883,40627=>21884,40630=>21885,40631=>21886,40633=>21887,40634=>21888,40636=>21889,40639=>21890,40640=>21891,40641=>21892,40642=>21893,12232=>21894,40643=>21894,40645=>21895,40646=>21896,40647=>21897,40648=>21898,40650=>21899,40651=>21900,40656=>21901,40658=>21902,40659=>21903,40661=>21904,40662=>21905,40663=>21906,40665=>21907,40666=>21908,40673=>21909,40675=>21910,40676=>21911,40678=>21912,40683=>21913,40684=>21914,40685=>21915,40686=>21916,40688=>21917,40689=>21918,40691=>21919,40693=>21920,40694=>21921,40696=>21922,40698=>21923,40704=>21924,40705=>21925,40706=>21926,40707=>21927,40708=>21928,40709=>21929,40710=>21930,40711=>21931,40712=>21932,40714=>21933,40716=>21934,40719=>21935,40721=>21936,40722=>21937,40724=>21938,40726=>21939,40728=>21940,40730=>21941,40731=>21942,40732=>21943,40733=>21944,40734=>21945,40735=>21946,40737=>21947,40739=>21948,40740=>21949,40741=>21950,40742=>21951,40743=>21952,40744=>21953,40745=>21954,40746=>21955,40747=>21956,40749=>21957,40750=>21958,40752=>21959,40753=>21960,40754=>21961,40755=>21962,40756=>21963,40757=>21964,40758=>21965,40760=>21966,40762=>21967,40764=>21968,40767=>21969,40768=>21970,40769=>21971,40770=>21972,40771=>21973,40773=>21974,40774=>21975,40775=>21976,40776=>21977,40777=>21978,40780=>21979,40781=>21980,40782=>21981,40787=>21982,40789=>21983,40790=>21984,40791=>21985,40792=>21986,40794=>21987,40795=>21988,40797=>21989,40798=>21990,40802=>21991,40804=>21992,40805=>21993,40807=>21994,40808=>21995,40809=>21996,40811=>21997,40813=>21998,40814=>21999,40815=>22000,40816=>22001,40817=>22002,40819=>22003,40820=>22004,40821=>22005,40822=>22006,40824=>22007,40825=>22008,40826=>22009,40827=>22010,40828=>22011,40829=>22012,40830=>22013,40833=>22014,40834=>22015,40846=>22016,40847=>22017,40849=>22018,40850=>22019,40851=>22020,40854=>22021,40855=>22022,40856=>22023,40861=>22024,40862=>22025,40865=>22026,40866=>22027,40867=>22028,40868=>22029,40869=>22030,63788=>22031,64013=>22032,64014=>22033,64015=>22034,64017=>22035,64019=>22036,64020=>22037,64024=>22038,64031=>22039,64032=>22040,64033=>22041,64035=>22042,64036=>22043,64039=>22044,64040=>22045,64041=>22046,11905=>22047,59413=>22047,131207=>22048,59414=>22048,131209=>22049,59415=>22049,131276=>22050,59416=>22050,11908=>22051,59417=>22051,13427=>22052,59418=>22052,13383=>22053,59419=>22053,11912=>22054,59420=>22054,11915=>22055,59421=>22055,40884=>22056,59422=>22056,13726=>22057,59423=>22057,13850=>22058,59424=>22058,13838=>22059,59425=>22059,11916=>22060,59426=>22060,11927=>22061,59427=>22061,14702=>22062,59428=>22062,14616=>22063,59429=>22063,40885=>22064,59430=>22064,14799=>22065,59431=>22065,14815=>22066,59432=>22066,14963=>22067,59433=>22067,14800=>22068,59434=>22068,40886=>22069,59435=>22069,40887=>22070,59436=>22070,15182=>22071,59437=>22071,15470=>22072,59438=>22072,15584=>22073,59439=>22073,11943=>22074,59440=>22074,136663=>22075,59441=>22075,40888=>22076,59442=>22076,11946=>22077,59443=>22077,16470=>22078,59444=>22078,16735=>22079,59445=>22079,11950=>22080,59446=>22080,17207=>22081,59447=>22081,11955=>22082,59448=>22082,11958=>22083,59449=>22083,11959=>22084,59450=>22084,141711=>22085,59451=>22085,17329=>22086,59452=>22086,17324=>22087,59453=>22087,11963=>22088,59454=>22088,17373=>22089,59455=>22089,17622=>22090,59456=>22090,18017=>22091,59457=>22091,17996=>22092,59458=>22092,40889=>22093,132361=>22093,59459=>22093,18211=>22094,59460=>22094,18217=>22095,59461=>22095,18300=>22096,59462=>22096,18317=>22097,59463=>22097,11978=>22098,59464=>22098,18759=>22099,59465=>22099,18810=>22100,59466=>22100,18813=>22101,59467=>22101,18818=>22102,59468=>22102,18819=>22103,59469=>22103,18821=>22104,59470=>22104,18822=>22105,59471=>22105,18847=>22106,59472=>22106,18843=>22107,59473=>22107,18871=>22108,59474=>22108,18870=>22109,59475=>22109,40890=>22110,133533=>22110,59476=>22110,147966=>22111,59477=>22111,19619=>22112,59478=>22112,19615=>22113,59479=>22113,19616=>22114,59480=>22114,19617=>22115,59481=>22115,19575=>22116,59482=>22116,19618=>22117,59483=>22117,19731=>22118,59484=>22118,19732=>22119,59485=>22119,19733=>22120,59486=>22120,19734=>22121,59487=>22121,19735=>22122,59488=>22122,19736=>22123,59489=>22123,19737=>22124,59490=>22124,19886=>22125,59491=>22125,40891=>22126,59492=>22126,8364=>22353,59244=>22353,165=>22354,12351=>22357,12436=>22375,12535=>22390,12537=>22391,12536=>22392,12538=>22393,12339=>22395,12340=>22396,12341=>22397,12344=>22398,12345=>22399,12346=>22400,12586=>22401,12587=>22402,12588=>22403,12704=>22404,12705=>22405,12706=>22406,12707=>22407,12708=>22408,12709=>22409,12710=>22410,12711=>22411,12712=>22412,12713=>22413,12714=>22414,12715=>22415,12716=>22416,12717=>22417,12718=>22418,12719=>22419,12720=>22420,12721=>22421,12722=>22422,12723=>22423,12724=>22424,12725=>22425,12726=>22426,12727=>22427,11904=>22428,11906=>22429,11907=>22430,11909=>22431,11910=>22432,11911=>22433,11913=>22434,11914=>22435,11917=>22436,11918=>22437,11919=>22438,11920=>22439,11921=>22440,11922=>22441,11923=>22442,11924=>22443,11925=>22444,11926=>22445,11928=>22446,11929=>22447,11931=>22448,11932=>22449,11933=>22450,11934=>22451,11935=>22452,11936=>22453,11937=>22454,11938=>22455,11939=>22456,11940=>22457,11941=>22458,11942=>22459,11944=>22460,11945=>22461,11947=>22462,11948=>22463,11949=>22464,11951=>22465,11952=>22466,11953=>22467,11954=>22468,11956=>22469,11957=>22470,11960=>22471,11961=>22472,11962=>22473,11964=>22474,11965=>22475,11966=>22476,11967=>22477,11968=>22478,11969=>22479,11970=>22480,11971=>22481,11972=>22482,11973=>22483,11974=>22484,11975=>22485,11976=>22486,11977=>22487,11979=>22488,11980=>22489,11981=>22490,11982=>22491,11983=>22492,11984=>22493,11985=>22494,11986=>22495,11987=>22496,11988=>22497,11989=>22498,11990=>22499,11991=>22500,11992=>22501,11993=>22502,11994=>22503,11995=>22504,11996=>22505,11997=>22506,11998=>22507,11999=>22508,12000=>22509,12001=>22510,12002=>22511,12003=>22512,12004=>22513,12005=>22514,12006=>22515,12007=>22516,12008=>22517,12009=>22518,12010=>22519,12011=>22520,12012=>22521,12013=>22522,12014=>22523,12015=>22524,12016=>22525,12017=>22526,12018=>22527,12019=>22528,13312=>22529,13313=>22530,13314=>22531,13315=>22532,13316=>22533,13317=>22534,13318=>22535,13319=>22536,13320=>22537,13321=>22538,13322=>22539,13323=>22540,13324=>22541,13325=>22542,13326=>22543,13327=>22544,13328=>22545,13329=>22546,13330=>22547,13331=>22548,13332=>22549,13333=>22550,13334=>22551,13335=>22552,13336=>22553,13337=>22554,13338=>22555,13339=>22556,13340=>22557,13341=>22558,13342=>22559,13343=>22560,13344=>22561,13345=>22562,13346=>22563,13347=>22564,13348=>22565,13349=>22566,13350=>22567,13351=>22568,13352=>22569,13353=>22570,13354=>22571,13355=>22572,13356=>22573,13357=>22574,13358=>22575,13359=>22576,13360=>22577,13361=>22578,13362=>22579,13363=>22580,13364=>22581,13365=>22582,13366=>22583,13367=>22584,13368=>22585,13369=>22586,13370=>22587,13371=>22588,13372=>22589,13373=>22590,13374=>22591,13375=>22592,13376=>22593,13377=>22594,13378=>22595,13379=>22596,13380=>22597,13381=>22598,13382=>22599,13384=>22600,13385=>22601,13386=>22602,13387=>22603,13388=>22604,13389=>22605,13390=>22606,13391=>22607,13392=>22608,13393=>22609,13394=>22610,13395=>22611,13396=>22612,13397=>22613,13398=>22614,13399=>22615,13400=>22616,13401=>22617,13402=>22618,13403=>22619,13404=>22620,13405=>22621,13406=>22622,13407=>22623,13408=>22624,13409=>22625,13410=>22626,13411=>22627,13412=>22628,13413=>22629,13414=>22630,13415=>22631,13416=>22632,13417=>22633,13418=>22634,13419=>22635,13420=>22636,13421=>22637,13422=>22638,13423=>22639,13424=>22640,13425=>22641,13426=>22642,13428=>22643,13429=>22644,13430=>22645,13431=>22646,13432=>22647,13433=>22648,13434=>22649,13435=>22650,13436=>22651,13437=>22652,13438=>22653,13439=>22654,13440=>22655,13441=>22656,13442=>22657,13443=>22658,13444=>22659,13445=>22660,13446=>22661,13447=>22662,13448=>22663,13449=>22664,13450=>22665,13451=>22666,13452=>22667,13453=>22668,13454=>22669,13455=>22670,13456=>22671,13457=>22672,13458=>22673,13459=>22674,13460=>22675,13461=>22676,13462=>22677,13463=>22678,13464=>22679,13465=>22680,13466=>22681,13467=>22682,13468=>22683,13469=>22684,13470=>22685,13471=>22686,13472=>22687,13473=>22688,13474=>22689,13475=>22690,13476=>22691,13477=>22692,13478=>22693,13479=>22694,13480=>22695,13481=>22696,13482=>22697,13483=>22698,13484=>22699,13485=>22700,13486=>22701,13487=>22702,13488=>22703,13489=>22704,13490=>22705,13491=>22706,13492=>22707,13493=>22708,13494=>22709,13495=>22710,13496=>22711,13497=>22712,13498=>22713,13499=>22714,13500=>22715,13501=>22716,13502=>22717,13503=>22718,13504=>22719,13505=>22720,13506=>22721,13507=>22722,13508=>22723,13509=>22724,13510=>22725,13511=>22726,13512=>22727,13513=>22728,13514=>22729,13515=>22730,13516=>22731,13517=>22732,13518=>22733,13519=>22734,13520=>22735,13521=>22736,13522=>22737,13523=>22738,13524=>22739,13525=>22740,13526=>22741,13527=>22742,13528=>22743,13529=>22744,13530=>22745,13531=>22746,13532=>22747,13533=>22748,13534=>22749,13535=>22750,13536=>22751,13537=>22752,13538=>22753,13539=>22754,13540=>22755,13541=>22756,13542=>22757,13543=>22758,13544=>22759,13545=>22760,13546=>22761,13547=>22762,13548=>22763,13549=>22764,13550=>22765,13551=>22766,13552=>22767,13553=>22768,13554=>22769,13555=>22770,13556=>22771,13557=>22772,13558=>22773,13559=>22774,13560=>22775,13561=>22776,13562=>22777,13563=>22778,13564=>22779,13565=>22780,13566=>22781,13567=>22782,13568=>22783,13569=>22784,13570=>22785,13571=>22786,13572=>22787,13573=>22788,13574=>22789,13575=>22790,13576=>22791,13577=>22792,13578=>22793,13579=>22794,13580=>22795,13581=>22796,13582=>22797,13583=>22798,13584=>22799,13585=>22800,13586=>22801,13587=>22802,13588=>22803,13589=>22804,13590=>22805,13591=>22806,13592=>22807,13593=>22808,13594=>22809,13595=>22810,13596=>22811,13597=>22812,13598=>22813,13599=>22814,13600=>22815,13601=>22816,13602=>22817,13603=>22818,13604=>22819,13605=>22820,13606=>22821,13607=>22822,13608=>22823,13609=>22824,13610=>22825,13611=>22826,13612=>22827,13613=>22828,13614=>22829,13615=>22830,13616=>22831,13617=>22832,13618=>22833,13619=>22834,13620=>22835,13621=>22836,13622=>22837,13623=>22838,13624=>22839,13625=>22840,13626=>22841,13627=>22842,13628=>22843,13629=>22844,13630=>22845,13631=>22846,13632=>22847,13633=>22848,13634=>22849,13635=>22850,13636=>22851,13637=>22852,13638=>22853,13639=>22854,13640=>22855,13641=>22856,13642=>22857,13643=>22858,13644=>22859,13645=>22860,13646=>22861,13647=>22862,13648=>22863,13649=>22864,13650=>22865,13651=>22866,13652=>22867,13653=>22868,13654=>22869,13655=>22870,13656=>22871,13657=>22872,13658=>22873,13659=>22874,13660=>22875,13661=>22876,13662=>22877,13663=>22878,13664=>22879,13665=>22880,13666=>22881,13667=>22882,13668=>22883,13669=>22884,13670=>22885,13671=>22886,13672=>22887,13673=>22888,13674=>22889,13675=>22890,13676=>22891,13677=>22892,13678=>22893,13679=>22894,13680=>22895,13681=>22896,13682=>22897,13683=>22898,13684=>22899,13685=>22900,13686=>22901,13687=>22902,13688=>22903,13689=>22904,13690=>22905,13691=>22906,13692=>22907,13693=>22908,13694=>22909,13695=>22910,13696=>22911,13697=>22912,13698=>22913,13699=>22914,13700=>22915,13701=>22916,13702=>22917,13703=>22918,13704=>22919,13705=>22920,13706=>22921,13707=>22922,13708=>22923,13709=>22924,13710=>22925,13711=>22926,13712=>22927,13713=>22928,13714=>22929,13715=>22930,13716=>22931,13717=>22932,13718=>22933,13719=>22934,13720=>22935,13721=>22936,13722=>22937,13723=>22938,13724=>22939,13725=>22940,13727=>22941,13728=>22942,13729=>22943,13730=>22944,13731=>22945,13732=>22946,13733=>22947,13734=>22948,13735=>22949,13736=>22950,13737=>22951,13738=>22952,13739=>22953,13740=>22954,13741=>22955,13742=>22956,13743=>22957,13744=>22958,13745=>22959,13746=>22960,13747=>22961,13748=>22962,13749=>22963,13750=>22964,13751=>22965,13752=>22966,13753=>22967,13754=>22968,13755=>22969,13756=>22970,13757=>22971,13758=>22972,13759=>22973,13760=>22974,13761=>22975,13762=>22976,13763=>22977,13764=>22978,13765=>22979,13766=>22980,13767=>22981,13768=>22982,13769=>22983,13770=>22984,13771=>22985,13772=>22986,13773=>22987,13774=>22988,13775=>22989,13776=>22990,13777=>22991,13778=>22992,13779=>22993,13780=>22994,13781=>22995,13782=>22996,13783=>22997,13784=>22998,13785=>22999,13786=>23000,13787=>23001,13788=>23002,13789=>23003,13790=>23004,13791=>23005,13792=>23006,13793=>23007,13794=>23008,13795=>23009,13796=>23010,13797=>23011,13798=>23012,13799=>23013,13800=>23014,13801=>23015,13802=>23016,13803=>23017,13804=>23018,13805=>23019,13806=>23020,13807=>23021,13808=>23022,13809=>23023,13810=>23024,13811=>23025,13812=>23026,13813=>23027,13814=>23028,13815=>23029,13816=>23030,13817=>23031,13818=>23032,13819=>23033,13820=>23034,13821=>23035,13822=>23036,13823=>23037,13824=>23038,13825=>23039,13826=>23040,13827=>23041,13828=>23042,13829=>23043,13830=>23044,13831=>23045,13832=>23046,13833=>23047,13834=>23048,13835=>23049,13836=>23050,13837=>23051,13839=>23052,13840=>23053,13841=>23054,13842=>23055,13843=>23056,13844=>23057,13845=>23058,13846=>23059,13847=>23060,13848=>23061,13849=>23062,13851=>23063,13852=>23064,13853=>23065,13854=>23066,13855=>23067,13856=>23068,13857=>23069,13858=>23070,13859=>23071,13860=>23072,13861=>23073,13862=>23074,13863=>23075,13864=>23076,13865=>23077,13866=>23078,13867=>23079,13868=>23080,13869=>23081,13870=>23082,13871=>23083,13872=>23084,13873=>23085,13874=>23086,13875=>23087,13876=>23088,13877=>23089,13878=>23090,13879=>23091,13880=>23092,13881=>23093,13882=>23094,13883=>23095,13884=>23096,13885=>23097,13886=>23098,13887=>23099,13888=>23100,13889=>23101,13890=>23102,13891=>23103,13892=>23104,13893=>23105,13894=>23106,13895=>23107,13896=>23108,13897=>23109,13898=>23110,13899=>23111,13900=>23112,13901=>23113,13902=>23114,13903=>23115,13904=>23116,13905=>23117,13906=>23118,13907=>23119,13908=>23120,13909=>23121,13910=>23122,13911=>23123,13912=>23124,13913=>23125,13914=>23126,13915=>23127,13916=>23128,13917=>23129,13918=>23130,13919=>23131,13920=>23132,13921=>23133,13922=>23134,13923=>23135,13924=>23136,13925=>23137,13926=>23138,13927=>23139,13928=>23140,13929=>23141,13930=>23142,13931=>23143,13932=>23144,13933=>23145,13934=>23146,13935=>23147,13936=>23148,13937=>23149,13938=>23150,13939=>23151,13940=>23152,13941=>23153,13942=>23154,13943=>23155,13944=>23156,13945=>23157,13946=>23158,13947=>23159,13948=>23160,13949=>23161,13950=>23162,13951=>23163,13952=>23164,13953=>23165,13954=>23166,13955=>23167,13956=>23168,13957=>23169,13958=>23170,13959=>23171,13960=>23172,13961=>23173,13962=>23174,13963=>23175,13964=>23176,13965=>23177,13966=>23178,13967=>23179,13968=>23180,13969=>23181,13970=>23182,13971=>23183,13972=>23184,13973=>23185,13974=>23186,13975=>23187,13976=>23188,13977=>23189,13978=>23190,13979=>23191,13980=>23192,13981=>23193,13982=>23194,13983=>23195,13984=>23196,13985=>23197,13986=>23198,13987=>23199,13988=>23200,13989=>23201,13990=>23202,13991=>23203,13992=>23204,13993=>23205,13994=>23206,13995=>23207,13996=>23208,13997=>23209,13998=>23210,13999=>23211,14000=>23212,14001=>23213,14002=>23214,14003=>23215,14004=>23216,14005=>23217,14006=>23218,14007=>23219,14008=>23220,14009=>23221,14010=>23222,14011=>23223,14012=>23224,14013=>23225,14014=>23226,14015=>23227,14016=>23228,14017=>23229,14018=>23230,14019=>23231,14020=>23232,14021=>23233,14022=>23234,14023=>23235,14024=>23236,14025=>23237,14026=>23238,14027=>23239,14028=>23240,14029=>23241,14030=>23242,14031=>23243,14032=>23244,14033=>23245,14034=>23246,14035=>23247,14036=>23248,14037=>23249,14038=>23250,14039=>23251,14040=>23252,14041=>23253,14042=>23254,14043=>23255,14044=>23256,14045=>23257,14046=>23258,14047=>23259,14048=>23260,14049=>23261,14050=>23262,14051=>23263,14052=>23264,14053=>23265,14054=>23266,14055=>23267,14056=>23268,14057=>23269,14058=>23270,14059=>23271,14060=>23272,14061=>23273,14062=>23274,14063=>23275,14064=>23276,14065=>23277,14066=>23278,14067=>23279,14068=>23280,14069=>23281,14070=>23282,14071=>23283,14072=>23284,14073=>23285,14074=>23286,14075=>23287,14076=>23288,14077=>23289,14078=>23290,14079=>23291,14080=>23292,14081=>23293,14082=>23294,14083=>23295,14084=>23296,14085=>23297,14086=>23298,14087=>23299,14088=>23300,14089=>23301,14090=>23302,14091=>23303,14092=>23304,14093=>23305,14094=>23306,14095=>23307,14096=>23308,14097=>23309,14098=>23310,14099=>23311,14100=>23312,14101=>23313,14102=>23314,14103=>23315,14104=>23316,14105=>23317,14106=>23318,14107=>23319,14108=>23320,14109=>23321,14110=>23322,14111=>23323,14112=>23324,14113=>23325,14114=>23326,14115=>23327,14116=>23328,14117=>23329,14118=>23330,14119=>23331,14120=>23332,14121=>23333,14122=>23334,14123=>23335,14124=>23336,14125=>23337,14126=>23338,14127=>23339,14128=>23340,14129=>23341,14130=>23342,14131=>23343,14132=>23344,14133=>23345,14134=>23346,14135=>23347,14136=>23348,14137=>23349,14138=>23350,14139=>23351,14140=>23352,14141=>23353,14142=>23354,14143=>23355,14144=>23356,14145=>23357,14146=>23358,14147=>23359,14148=>23360,14149=>23361,14150=>23362,14151=>23363,14152=>23364,14153=>23365,14154=>23366,14155=>23367,14156=>23368,14157=>23369,14158=>23370,14159=>23371,14160=>23372,14161=>23373,14162=>23374,14163=>23375,14164=>23376,14165=>23377,14166=>23378,14167=>23379,14168=>23380,14169=>23381,14170=>23382,14171=>23383,14172=>23384,14173=>23385,14174=>23386,14175=>23387,14176=>23388,14177=>23389,14178=>23390,14179=>23391,14180=>23392,14181=>23393,14182=>23394,14183=>23395,14184=>23396,14185=>23397,14186=>23398,14187=>23399,14188=>23400,14189=>23401,14190=>23402,14191=>23403,14192=>23404,14193=>23405,14194=>23406,14195=>23407,14196=>23408,14197=>23409,14198=>23410,14199=>23411,14200=>23412,14201=>23413,14202=>23414,14203=>23415,14204=>23416,14205=>23417,14206=>23418,14207=>23419,14208=>23420,14209=>23421,14210=>23422,14211=>23423,14212=>23424,14213=>23425,14214=>23426,14215=>23427,14216=>23428,14217=>23429,14218=>23430,14219=>23431,14220=>23432,14221=>23433,14222=>23434,14223=>23435,14224=>23436,14225=>23437,14226=>23438,14227=>23439,14228=>23440,14229=>23441,14230=>23442,14231=>23443,14232=>23444,14233=>23445,14234=>23446,14235=>23447,14236=>23448,14237=>23449,14238=>23450,14239=>23451,14240=>23452,14241=>23453,14242=>23454,14243=>23455,14244=>23456,14245=>23457,14246=>23458,14247=>23459,14248=>23460,14249=>23461,14250=>23462,14251=>23463,14252=>23464,14253=>23465,14254=>23466,14255=>23467,14256=>23468,14257=>23469,14258=>23470,14259=>23471,14260=>23472,14261=>23473,14262=>23474,14263=>23475,14264=>23476,14265=>23477,14266=>23478,14267=>23479,14268=>23480,14269=>23481,14270=>23482,14271=>23483,14272=>23484,14273=>23485,14274=>23486,14275=>23487,14276=>23488,14277=>23489,14278=>23490,14279=>23491,14280=>23492,14281=>23493,14282=>23494,14283=>23495,14284=>23496,14285=>23497,14286=>23498,14287=>23499,14288=>23500,14289=>23501,14290=>23502,14291=>23503,14292=>23504,14293=>23505,14294=>23506,14295=>23507,14296=>23508,14297=>23509,14298=>23510,14299=>23511,14300=>23512,14301=>23513,14302=>23514,14303=>23515,14304=>23516,14305=>23517,14306=>23518,14307=>23519,14308=>23520,14309=>23521,14310=>23522,14311=>23523,14312=>23524,14313=>23525,14314=>23526,14315=>23527,14316=>23528,14317=>23529,14318=>23530,14319=>23531,14320=>23532,14321=>23533,14322=>23534,14323=>23535,14324=>23536,14325=>23537,14326=>23538,14327=>23539,14328=>23540,14329=>23541,14330=>23542,14331=>23543,14332=>23544,14333=>23545,14334=>23546,14335=>23547,14336=>23548,14337=>23549,14338=>23550,14339=>23551,14340=>23552,14341=>23553,14342=>23554,14343=>23555,14344=>23556,14345=>23557,14346=>23558,14347=>23559,14348=>23560,14349=>23561,14350=>23562,14351=>23563,14352=>23564,14353=>23565,14354=>23566,14355=>23567,14356=>23568,14357=>23569,14358=>23570,14359=>23571,14360=>23572,14361=>23573,14362=>23574,14363=>23575,14364=>23576,14365=>23577,14366=>23578,14367=>23579,14368=>23580,14369=>23581,14370=>23582,14371=>23583,14372=>23584,14373=>23585,14374=>23586,14375=>23587,14376=>23588,14377=>23589,14378=>23590,14379=>23591,14380=>23592,14381=>23593,14382=>23594,14383=>23595,14384=>23596,14385=>23597,14386=>23598,14387=>23599,14388=>23600,14389=>23601,14390=>23602,14391=>23603,14392=>23604,14393=>23605,14394=>23606,14395=>23607,14396=>23608,14397=>23609,14398=>23610,14399=>23611,14400=>23612,14401=>23613,14402=>23614,14403=>23615,14404=>23616,14405=>23617,14406=>23618,14407=>23619,14408=>23620,14409=>23621,14410=>23622,14411=>23623,14412=>23624,14413=>23625,14414=>23626,14415=>23627,14416=>23628,14417=>23629,14418=>23630,14419=>23631,14420=>23632,14421=>23633,14422=>23634,14423=>23635,14424=>23636,14425=>23637,14426=>23638,14427=>23639,14428=>23640,14429=>23641,14430=>23642,14431=>23643,14432=>23644,14433=>23645,14434=>23646,14435=>23647,14436=>23648,14437=>23649,14438=>23650,14439=>23651,14440=>23652,14441=>23653,14442=>23654,14443=>23655,14444=>23656,14445=>23657,14446=>23658,14447=>23659,14448=>23660,14449=>23661,14450=>23662,14451=>23663,14452=>23664,14453=>23665,14454=>23666,14455=>23667,14456=>23668,14457=>23669,14458=>23670,14459=>23671,14460=>23672,14461=>23673,14462=>23674,14463=>23675,14464=>23676,14465=>23677,14466=>23678,14467=>23679,14468=>23680,14469=>23681,14470=>23682,14471=>23683,14472=>23684,14473=>23685,14474=>23686,14475=>23687,14476=>23688,14477=>23689,14478=>23690,14479=>23691,14480=>23692,14481=>23693,14482=>23694,14483=>23695,14484=>23696,14485=>23697,14486=>23698,14487=>23699,14488=>23700,14489=>23701,14490=>23702,14491=>23703,14492=>23704,14493=>23705,14494=>23706,14495=>23707,14496=>23708,14497=>23709,14498=>23710,14499=>23711,14500=>23712,14501=>23713,14502=>23714,14503=>23715,14504=>23716,14505=>23717,14506=>23718,14507=>23719,14508=>23720,14509=>23721,14510=>23722,14511=>23723,14512=>23724,14513=>23725,14514=>23726,14515=>23727,14516=>23728,14517=>23729,14518=>23730,14519=>23731,14520=>23732,14521=>23733,14522=>23734,14523=>23735,14524=>23736,14525=>23737,14526=>23738,14527=>23739,14528=>23740,14529=>23741,14530=>23742,14531=>23743,14532=>23744,14533=>23745,14534=>23746,14535=>23747,14536=>23748,14537=>23749,14538=>23750,14539=>23751,14540=>23752,14541=>23753,14542=>23754,14543=>23755,14544=>23756,14545=>23757,14546=>23758,14547=>23759,14548=>23760,14549=>23761,14550=>23762,14551=>23763,14552=>23764,14553=>23765,14554=>23766,14555=>23767,14556=>23768,14557=>23769,14558=>23770,14559=>23771,14560=>23772,14561=>23773,14562=>23774,14563=>23775,14564=>23776,14565=>23777,14566=>23778,14567=>23779,14568=>23780,14569=>23781,14570=>23782,14571=>23783,14572=>23784,14573=>23785,14574=>23786,14575=>23787,14576=>23788,14577=>23789,14578=>23790,14579=>23791,14580=>23792,14581=>23793,14582=>23794,14583=>23795,14584=>23796,14585=>23797,14586=>23798,14587=>23799,14588=>23800,14589=>23801,14590=>23802,14591=>23803,14592=>23804,14593=>23805,14594=>23806,14595=>23807,14596=>23808,14597=>23809,14598=>23810,14599=>23811,14600=>23812,14601=>23813,14602=>23814,14603=>23815,14604=>23816,14605=>23817,14606=>23818,14607=>23819,14608=>23820,14609=>23821,14610=>23822,14611=>23823,14612=>23824,14613=>23825,14614=>23826,14615=>23827,14617=>23828,14618=>23829,14619=>23830,14620=>23831,14621=>23832,14622=>23833,14623=>23834,14624=>23835,14625=>23836,14626=>23837,14627=>23838,14628=>23839,14629=>23840,14630=>23841,14631=>23842,14632=>23843,14633=>23844,14634=>23845,14635=>23846,14636=>23847,14637=>23848,14638=>23849,14639=>23850,14640=>23851,14641=>23852,14642=>23853,14643=>23854,14644=>23855,14645=>23856,14646=>23857,14647=>23858,14648=>23859,14649=>23860,14650=>23861,14651=>23862,14652=>23863,14653=>23864,14654=>23865,14655=>23866,14656=>23867,14657=>23868,14658=>23869,14659=>23870,14660=>23871,14661=>23872,14662=>23873,14663=>23874,14664=>23875,14665=>23876,14666=>23877,14667=>23878,14668=>23879,14669=>23880,14670=>23881,14671=>23882,14672=>23883,14673=>23884,14674=>23885,14675=>23886,14676=>23887,14677=>23888,14678=>23889,14679=>23890,14680=>23891,14681=>23892,14682=>23893,14683=>23894,14684=>23895,14685=>23896,14686=>23897,14687=>23898,14688=>23899,14689=>23900,14690=>23901,14691=>23902,14692=>23903,14693=>23904,14694=>23905,14695=>23906,14696=>23907,14697=>23908,14698=>23909,14699=>23910,14700=>23911,14701=>23912,14703=>23913,14704=>23914,14705=>23915,14706=>23916,14707=>23917,14708=>23918,14709=>23919,14710=>23920,14711=>23921,14712=>23922,14713=>23923,14714=>23924,14715=>23925,14716=>23926,14717=>23927,14718=>23928,14719=>23929,14720=>23930,14721=>23931,14722=>23932,14723=>23933,14724=>23934,14725=>23935,14726=>23936,14727=>23937,14728=>23938,14729=>23939,14730=>23940,14731=>23941,14732=>23942,14733=>23943,14734=>23944,14735=>23945,14736=>23946,14737=>23947,14738=>23948,14739=>23949,14740=>23950,14741=>23951,14742=>23952,14743=>23953,14744=>23954,14745=>23955,14746=>23956,14747=>23957,14748=>23958,14749=>23959,14750=>23960,14751=>23961,14752=>23962,14753=>23963,14754=>23964,14755=>23965,14756=>23966,14757=>23967,14758=>23968,14759=>23969,14760=>23970,14761=>23971,14762=>23972,14763=>23973,14764=>23974,14765=>23975,14766=>23976,14767=>23977,14768=>23978,14769=>23979,14770=>23980,14771=>23981,14772=>23982,14773=>23983,14774=>23984,14775=>23985,14776=>23986,14777=>23987,14778=>23988,14779=>23989,14780=>23990,14781=>23991,14782=>23992,14783=>23993,14784=>23994,14785=>23995,14786=>23996,14787=>23997,14788=>23998,14789=>23999,14790=>24000,14791=>24001,14792=>24002,14793=>24003,14794=>24004,14795=>24005,14796=>24006,14797=>24007,14798=>24008,14801=>24009,14802=>24010,14803=>24011,14804=>24012,14805=>24013,14806=>24014,14807=>24015,14808=>24016,14809=>24017,14810=>24018,14811=>24019,14812=>24020,14813=>24021,14814=>24022,14816=>24023,14817=>24024,14818=>24025,14819=>24026,14820=>24027,14821=>24028,14822=>24029,14823=>24030,14824=>24031,14825=>24032,14826=>24033,14827=>24034,14828=>24035,14829=>24036,14830=>24037,14831=>24038,14832=>24039,14833=>24040,14834=>24041,14835=>24042,14836=>24043,14837=>24044,14838=>24045,14839=>24046,14840=>24047,14841=>24048,14842=>24049,14843=>24050,14844=>24051,14845=>24052,14846=>24053,14847=>24054,14848=>24055,14849=>24056,14850=>24057,14851=>24058,14852=>24059,14853=>24060,14854=>24061,14855=>24062,14856=>24063,14857=>24064,14858=>24065,14859=>24066,14860=>24067,14861=>24068,14862=>24069,14863=>24070,14864=>24071,14865=>24072,14866=>24073,14867=>24074,14868=>24075,14869=>24076,14870=>24077,14871=>24078,14872=>24079,14873=>24080,14874=>24081,14875=>24082,14876=>24083,14877=>24084,14878=>24085,14879=>24086,14880=>24087,14881=>24088,14882=>24089,14883=>24090,14884=>24091,14885=>24092,14886=>24093,14887=>24094,14888=>24095,14889=>24096,14890=>24097,14891=>24098,14892=>24099,14893=>24100,14894=>24101,14895=>24102,14896=>24103,14897=>24104,14898=>24105,14899=>24106,14900=>24107,14901=>24108,14902=>24109,14903=>24110,14904=>24111,14905=>24112,14906=>24113,14907=>24114,14908=>24115,14909=>24116,14910=>24117,14911=>24118,14912=>24119,14913=>24120,14914=>24121,14915=>24122,14916=>24123,14917=>24124,14918=>24125,14919=>24126,14920=>24127,14921=>24128,14922=>24129,14923=>24130,14924=>24131,14925=>24132,14926=>24133,14927=>24134,14928=>24135,14929=>24136,14930=>24137,14931=>24138,14932=>24139,14933=>24140,14934=>24141,14935=>24142,14936=>24143,14937=>24144,14938=>24145,14939=>24146,14940=>24147,14941=>24148,14942=>24149,14943=>24150,14944=>24151,14945=>24152,14946=>24153,14947=>24154,14948=>24155,14949=>24156,14950=>24157,14951=>24158,14952=>24159,14953=>24160,14954=>24161,14955=>24162,14956=>24163,14957=>24164,14958=>24165,14959=>24166,14960=>24167,14961=>24168,14962=>24169,14964=>24170,14965=>24171,14966=>24172,14967=>24173,14968=>24174,14969=>24175,14970=>24176,14971=>24177,14972=>24178,14973=>24179,14974=>24180,14975=>24181,14976=>24182,14977=>24183,14978=>24184,14979=>24185,14980=>24186,14981=>24187,14982=>24188,14983=>24189,14984=>24190,14985=>24191,14986=>24192,14987=>24193,14988=>24194,14989=>24195,14990=>24196,14991=>24197,14992=>24198,14993=>24199,14994=>24200,14995=>24201,14996=>24202,14997=>24203,14998=>24204,14999=>24205,15000=>24206,15001=>24207,15002=>24208,15003=>24209,15004=>24210,15005=>24211,15006=>24212,15007=>24213,15008=>24214,15009=>24215,15010=>24216,15011=>24217,15012=>24218,15013=>24219,15014=>24220,15015=>24221,15016=>24222,15017=>24223,15018=>24224,15019=>24225,15020=>24226,15021=>24227,15022=>24228,15023=>24229,15024=>24230,15025=>24231,15026=>24232,15027=>24233,15028=>24234,15029=>24235,15030=>24236,15031=>24237,15032=>24238,15033=>24239,15034=>24240,15035=>24241,15036=>24242,15037=>24243,15038=>24244,15039=>24245,15040=>24246,15041=>24247,15042=>24248,15043=>24249,15044=>24250,15045=>24251,15046=>24252,15047=>24253,15048=>24254,15049=>24255,15050=>24256,15051=>24257,15052=>24258,15053=>24259,15054=>24260,15055=>24261,15056=>24262,15057=>24263,15058=>24264,15059=>24265,15060=>24266,15061=>24267,15062=>24268,15063=>24269,15064=>24270,15065=>24271,15066=>24272,15067=>24273,15068=>24274,15069=>24275,15070=>24276,15071=>24277,15072=>24278,15073=>24279,15074=>24280,15075=>24281,15076=>24282,15077=>24283,15078=>24284,15079=>24285,15080=>24286,15081=>24287,15082=>24288,15083=>24289,15084=>24290,15085=>24291,15086=>24292,15087=>24293,15088=>24294,15089=>24295,15090=>24296,15091=>24297,15092=>24298,15093=>24299,15094=>24300,15095=>24301,15096=>24302,15097=>24303,15098=>24304,15099=>24305,15100=>24306,15101=>24307,15102=>24308,15103=>24309,15104=>24310,15105=>24311,15106=>24312,15107=>24313,15108=>24314,15109=>24315,15110=>24316,15111=>24317,15112=>24318,15113=>24319,15114=>24320,15115=>24321,15116=>24322,15117=>24323,15118=>24324,15119=>24325,15120=>24326,15121=>24327,15122=>24328,15123=>24329,15124=>24330,15125=>24331,15126=>24332,15127=>24333,15128=>24334,15129=>24335,15130=>24336,15131=>24337,15132=>24338,15133=>24339,15134=>24340,15135=>24341,15136=>24342,15137=>24343,15138=>24344,15139=>24345,15140=>24346,15141=>24347,15142=>24348,15143=>24349,15144=>24350,15145=>24351,15146=>24352,15147=>24353,15148=>24354,15149=>24355,15150=>24356,15151=>24357,15152=>24358,15153=>24359,15154=>24360,15155=>24361,15156=>24362,15157=>24363,15158=>24364,15159=>24365,15160=>24366,15161=>24367,15162=>24368,15163=>24369,15164=>24370,15165=>24371,15166=>24372,15167=>24373,15168=>24374,15169=>24375,15170=>24376,15171=>24377,15172=>24378,15173=>24379,15174=>24380,15175=>24381,15176=>24382,15177=>24383,15178=>24384,15179=>24385,15180=>24386,15181=>24387,15183=>24388,15184=>24389,15185=>24390,15186=>24391,15187=>24392,15188=>24393,15189=>24394,15190=>24395,15191=>24396,15192=>24397,15193=>24398,15194=>24399,15195=>24400,15196=>24401,15197=>24402,15198=>24403,15199=>24404,15200=>24405,15201=>24406,15202=>24407,15203=>24408,15204=>24409,15205=>24410,15206=>24411,15207=>24412,15208=>24413,15209=>24414,15210=>24415,15211=>24416,15212=>24417,15213=>24418,15214=>24419,15215=>24420,15216=>24421,15217=>24422,15218=>24423,15219=>24424,15220=>24425,15221=>24426,15222=>24427,15223=>24428,15224=>24429,15225=>24430,15226=>24431,15227=>24432,15228=>24433,15229=>24434,15230=>24435,15231=>24436,15232=>24437,15233=>24438,15234=>24439,15235=>24440,15236=>24441,15237=>24442,15238=>24443,15239=>24444,15240=>24445,15241=>24446,15242=>24447,15243=>24448,15244=>24449,15245=>24450,15246=>24451,15247=>24452,15248=>24453,15249=>24454,15250=>24455,15251=>24456,15252=>24457,15253=>24458,15254=>24459,15255=>24460,15256=>24461,15257=>24462,15258=>24463,15259=>24464,15260=>24465,15261=>24466,15262=>24467,15263=>24468,15264=>24469,15265=>24470,15266=>24471,15267=>24472,15268=>24473,15269=>24474,15270=>24475,15271=>24476,15272=>24477,15273=>24478,15274=>24479,15275=>24480,15276=>24481,15277=>24482,15278=>24483,15279=>24484,15280=>24485,15281=>24486,15282=>24487,15283=>24488,15284=>24489,15285=>24490,15286=>24491,15287=>24492,15288=>24493,15289=>24494,15290=>24495,15291=>24496,15292=>24497,15293=>24498,15294=>24499,15295=>24500,15296=>24501,15297=>24502,15298=>24503,15299=>24504,15300=>24505,15301=>24506,15302=>24507,15303=>24508,15304=>24509,15305=>24510,15306=>24511,15307=>24512,15308=>24513,15309=>24514,15310=>24515,15311=>24516,15312=>24517,15313=>24518,15314=>24519,15315=>24520,15316=>24521,15317=>24522,15318=>24523,15319=>24524,15320=>24525,15321=>24526,15322=>24527,15323=>24528,15324=>24529,15325=>24530,15326=>24531,15327=>24532,15328=>24533,15329=>24534,15330=>24535,15331=>24536,15332=>24537,15333=>24538,15334=>24539,15335=>24540,15336=>24541,15337=>24542,15338=>24543,15339=>24544,15340=>24545,15341=>24546,15342=>24547,15343=>24548,15344=>24549,15345=>24550,15346=>24551,15347=>24552,15348=>24553,15349=>24554,15350=>24555,15351=>24556,15352=>24557,15353=>24558,15354=>24559,15355=>24560,15356=>24561,15357=>24562,15358=>24563,15359=>24564,15360=>24565,15361=>24566,15362=>24567,15363=>24568,15364=>24569,15365=>24570,15366=>24571,15367=>24572,15368=>24573,15369=>24574,15370=>24575,15371=>24576,15372=>24577,15373=>24578,15374=>24579,15375=>24580,15376=>24581,15377=>24582,15378=>24583,15379=>24584,15380=>24585,15381=>24586,15382=>24587,15383=>24588,15384=>24589,15385=>24590,15386=>24591,15387=>24592,15388=>24593,15389=>24594,15390=>24595,15391=>24596,15392=>24597,15393=>24598,15394=>24599,15395=>24600,15396=>24601,15397=>24602,15398=>24603,15399=>24604,15400=>24605,15401=>24606,15402=>24607,15403=>24608,15404=>24609,15405=>24610,15406=>24611,15407=>24612,15408=>24613,15409=>24614,15410=>24615,15411=>24616,15412=>24617,15413=>24618,15414=>24619,15415=>24620,15416=>24621,15417=>24622,15418=>24623,15419=>24624,15420=>24625,15421=>24626,15422=>24627,15423=>24628,15424=>24629,15425=>24630,15426=>24631,15427=>24632,15428=>24633,15429=>24634,15430=>24635,15431=>24636,15432=>24637,15433=>24638,15434=>24639,15435=>24640,15436=>24641,15437=>24642,15438=>24643,15439=>24644,15440=>24645,15441=>24646,15442=>24647,15443=>24648,15444=>24649,15445=>24650,15446=>24651,15447=>24652,15448=>24653,15449=>24654,15450=>24655,15451=>24656,15452=>24657,15453=>24658,15454=>24659,15455=>24660,15456=>24661,15457=>24662,15458=>24663,15459=>24664,15460=>24665,15461=>24666,15462=>24667,15463=>24668,15464=>24669,15465=>24670,15466=>24671,15467=>24672,15468=>24673,15469=>24674,15471=>24675,15472=>24676,15473=>24677,15474=>24678,15475=>24679,15476=>24680,15477=>24681,15478=>24682,15479=>24683,15480=>24684,15481=>24685,15482=>24686,15483=>24687,15484=>24688,15485=>24689,15486=>24690,15487=>24691,15488=>24692,15489=>24693,15490=>24694,15491=>24695,15492=>24696,15493=>24697,15494=>24698,15495=>24699,15496=>24700,15497=>24701,15498=>24702,15499=>24703,15500=>24704,15501=>24705,15502=>24706,15503=>24707,15504=>24708,15505=>24709,15506=>24710,15507=>24711,15508=>24712,15509=>24713,15510=>24714,15511=>24715,15512=>24716,15513=>24717,15514=>24718,15515=>24719,15516=>24720,15517=>24721,15518=>24722,15519=>24723,15520=>24724,15521=>24725,15522=>24726,15523=>24727,15524=>24728,15525=>24729,15526=>24730,15527=>24731,15528=>24732,15529=>24733,15530=>24734,15531=>24735,15532=>24736,15533=>24737,15534=>24738,15535=>24739,15536=>24740,15537=>24741,15538=>24742,15539=>24743,15540=>24744,15541=>24745,15542=>24746,15543=>24747,15544=>24748,15545=>24749,15546=>24750,15547=>24751,15548=>24752,15549=>24753,15550=>24754,15551=>24755,15552=>24756,15553=>24757,15554=>24758,15555=>24759,15556=>24760,15557=>24761,15558=>24762,15559=>24763,15560=>24764,15561=>24765,15562=>24766,15563=>24767,15564=>24768,15565=>24769,15566=>24770,15567=>24771,15568=>24772,15569=>24773,15570=>24774,15571=>24775,15572=>24776,15573=>24777,15574=>24778,15575=>24779,15576=>24780,15577=>24781,15578=>24782,15579=>24783,15580=>24784,15581=>24785,15582=>24786,15583=>24787,15585=>24788,15586=>24789,15587=>24790,15588=>24791,15589=>24792,15590=>24793,15591=>24794,15592=>24795,15593=>24796,15594=>24797,15595=>24798,15596=>24799,15597=>24800,15598=>24801,15599=>24802,15600=>24803,15601=>24804,15602=>24805,15603=>24806,15604=>24807,15605=>24808,15606=>24809,15607=>24810,15608=>24811,15609=>24812,15610=>24813,15611=>24814,15612=>24815,15613=>24816,15614=>24817,15615=>24818,15616=>24819,15617=>24820,15618=>24821,15619=>24822,15620=>24823,15621=>24824,15622=>24825,15623=>24826,15624=>24827,15625=>24828,15626=>24829,15627=>24830,15628=>24831,15629=>24832,15630=>24833,15631=>24834,15632=>24835,15633=>24836,15634=>24837,15635=>24838,15636=>24839,15637=>24840,15638=>24841,15639=>24842,15640=>24843,15641=>24844,15642=>24845,15643=>24846,15644=>24847,15645=>24848,15646=>24849,15647=>24850,15648=>24851,15649=>24852,15650=>24853,15651=>24854,15652=>24855,15653=>24856,15654=>24857,15655=>24858,15656=>24859,15657=>24860,15658=>24861,15659=>24862,15660=>24863,15661=>24864,15662=>24865,15663=>24866,15664=>24867,15665=>24868,15666=>24869,15667=>24870,15668=>24871,15669=>24872,15670=>24873,15671=>24874,15672=>24875,15673=>24876,15674=>24877,15675=>24878,15676=>24879,15677=>24880,15678=>24881,15679=>24882,15680=>24883,15681=>24884,15682=>24885,15683=>24886,15684=>24887,15685=>24888,15686=>24889,15687=>24890,15688=>24891,15689=>24892,15690=>24893,15691=>24894,15692=>24895,15693=>24896,15694=>24897,15695=>24898,15696=>24899,15697=>24900,15698=>24901,15699=>24902,15700=>24903,15701=>24904,15702=>24905,15703=>24906,15704=>24907,15705=>24908,15706=>24909,15707=>24910,15708=>24911,15709=>24912,15710=>24913,15711=>24914,15712=>24915,15713=>24916,15714=>24917,15715=>24918,15716=>24919,15717=>24920,15718=>24921,15719=>24922,15720=>24923,15721=>24924,15722=>24925,15723=>24926,15724=>24927,15725=>24928,15726=>24929,15727=>24930,15728=>24931,15729=>24932,15730=>24933,15731=>24934,15732=>24935,15733=>24936,15734=>24937,15735=>24938,15736=>24939,15737=>24940,15738=>24941,15739=>24942,15740=>24943,15741=>24944,15742=>24945,15743=>24946,15744=>24947,15745=>24948,15746=>24949,15747=>24950,15748=>24951,15749=>24952,15750=>24953,15751=>24954,15752=>24955,15753=>24956,15754=>24957,15755=>24958,15756=>24959,15757=>24960,15758=>24961,15759=>24962,15760=>24963,15761=>24964,15762=>24965,15763=>24966,15764=>24967,15765=>24968,15766=>24969,15767=>24970,15768=>24971,15769=>24972,15770=>24973,15771=>24974,15772=>24975,15773=>24976,15774=>24977,15775=>24978,15776=>24979,15777=>24980,15778=>24981,15779=>24982,15780=>24983,15781=>24984,15782=>24985,15783=>24986,15784=>24987,15785=>24988,15786=>24989,15787=>24990,15788=>24991,15789=>24992,15790=>24993,15791=>24994,15792=>24995,15793=>24996,15794=>24997,15795=>24998,15796=>24999,15797=>25000,15798=>25001,15799=>25002,15800=>25003,15801=>25004,15802=>25005,15803=>25006,15804=>25007,15805=>25008,15806=>25009,15807=>25010,15808=>25011,15809=>25012,15810=>25013,15811=>25014,15812=>25015,15813=>25016,15814=>25017,15815=>25018,15816=>25019,15817=>25020,15818=>25021,15819=>25022,15820=>25023,15821=>25024,15822=>25025,15823=>25026,15824=>25027,15825=>25028,15826=>25029,15827=>25030,15828=>25031,15829=>25032,15830=>25033,15831=>25034,15832=>25035,15833=>25036,15834=>25037,15835=>25038,15836=>25039,15837=>25040,15838=>25041,15839=>25042,15840=>25043,15841=>25044,15842=>25045,15843=>25046,15844=>25047,15845=>25048,15846=>25049,15847=>25050,15848=>25051,15849=>25052,15850=>25053,15851=>25054,15852=>25055,15853=>25056,15854=>25057,15855=>25058,15856=>25059,15857=>25060,15858=>25061,15859=>25062,15860=>25063,15861=>25064,15862=>25065,15863=>25066,15864=>25067,15865=>25068,15866=>25069,15867=>25070,15868=>25071,15869=>25072,15870=>25073,15871=>25074,15872=>25075,15873=>25076,15874=>25077,15875=>25078,15876=>25079,15877=>25080,15878=>25081,15879=>25082,15880=>25083,15881=>25084,15882=>25085,15883=>25086,15884=>25087,15885=>25088,15886=>25089,15887=>25090,15888=>25091,15889=>25092,15890=>25093,15891=>25094,15892=>25095,15893=>25096,15894=>25097,15895=>25098,15896=>25099,15897=>25100,15898=>25101,15899=>25102,15900=>25103,15901=>25104,15902=>25105,15903=>25106,15904=>25107,15905=>25108,15906=>25109,15907=>25110,15908=>25111,15909=>25112,15910=>25113,15911=>25114,15912=>25115,15913=>25116,15914=>25117,15915=>25118,15916=>25119,15917=>25120,15918=>25121,15919=>25122,15920=>25123,15921=>25124,15922=>25125,15923=>25126,15924=>25127,15925=>25128,15926=>25129,15927=>25130,15928=>25131,15929=>25132,15930=>25133,15931=>25134,15932=>25135,15933=>25136,15934=>25137,15935=>25138,15936=>25139,15937=>25140,15938=>25141,15939=>25142,15940=>25143,15941=>25144,15942=>25145,15943=>25146,15944=>25147,15945=>25148,15946=>25149,15947=>25150,15948=>25151,15949=>25152,15950=>25153,15951=>25154,15952=>25155,15953=>25156,15954=>25157,15955=>25158,15956=>25159,15957=>25160,15958=>25161,15959=>25162,15960=>25163,15961=>25164,15962=>25165,15963=>25166,15964=>25167,15965=>25168,15966=>25169,15967=>25170,15968=>25171,15969=>25172,15970=>25173,15971=>25174,15972=>25175,15973=>25176,15974=>25177,15975=>25178,15976=>25179,15977=>25180,15978=>25181,15979=>25182,15980=>25183,15981=>25184,15982=>25185,15983=>25186,15984=>25187,15985=>25188,15986=>25189,15987=>25190,15988=>25191,15989=>25192,15990=>25193,15991=>25194,15992=>25195,15993=>25196,15994=>25197,15995=>25198,15996=>25199,15997=>25200,15998=>25201,15999=>25202,16000=>25203,16001=>25204,16002=>25205,16003=>25206,16004=>25207,16005=>25208,16006=>25209,16007=>25210,16008=>25211,16009=>25212,16010=>25213,16011=>25214,16012=>25215,16013=>25216,16014=>25217,16015=>25218,16016=>25219,16017=>25220,16018=>25221,16019=>25222,16020=>25223,16021=>25224,16022=>25225,16023=>25226,16024=>25227,16025=>25228,16026=>25229,16027=>25230,16028=>25231,16029=>25232,16030=>25233,16031=>25234,16032=>25235,16033=>25236,16034=>25237,16035=>25238,16036=>25239,16037=>25240,16038=>25241,16039=>25242,16040=>25243,16041=>25244,16042=>25245,16043=>25246,16044=>25247,16045=>25248,16046=>25249,16047=>25250,16048=>25251,16049=>25252,16050=>25253,16051=>25254,16052=>25255,16053=>25256,16054=>25257,16055=>25258,16056=>25259,16057=>25260,16058=>25261,16059=>25262,16060=>25263,16061=>25264,16062=>25265,16063=>25266,16064=>25267,16065=>25268,16066=>25269,16067=>25270,16068=>25271,16069=>25272,16070=>25273,16071=>25274,16072=>25275,16073=>25276,16074=>25277,16075=>25278,16076=>25279,16077=>25280,16078=>25281,16079=>25282,16080=>25283,16081=>25284,16082=>25285,16083=>25286,16084=>25287,16085=>25288,16086=>25289,16087=>25290,16088=>25291,16089=>25292,16090=>25293,16091=>25294,16092=>25295,16093=>25296,16094=>25297,16095=>25298,16096=>25299,16097=>25300,16098=>25301,16099=>25302,16100=>25303,16101=>25304,16102=>25305,16103=>25306,16104=>25307,16105=>25308,16106=>25309,16107=>25310,16108=>25311,16109=>25312,16110=>25313,16111=>25314,16112=>25315,16113=>25316,16114=>25317,16115=>25318,16116=>25319,16117=>25320,16118=>25321,16119=>25322,16120=>25323,16121=>25324,16122=>25325,16123=>25326,16124=>25327,16125=>25328,16126=>25329,16127=>25330,16128=>25331,16129=>25332,16130=>25333,16131=>25334,16132=>25335,16133=>25336,16134=>25337,16135=>25338,16136=>25339,16137=>25340,16138=>25341,16139=>25342,16140=>25343,16141=>25344,16142=>25345,16143=>25346,16144=>25347,16145=>25348,16146=>25349,16147=>25350,16148=>25351,16149=>25352,16150=>25353,16151=>25354,16152=>25355,16153=>25356,16154=>25357,16155=>25358,16156=>25359,16157=>25360,16158=>25361,16159=>25362,16160=>25363,16161=>25364,16162=>25365,16163=>25366,16164=>25367,16165=>25368,16166=>25369,16167=>25370,16168=>25371,16169=>25372,16170=>25373,16171=>25374,16172=>25375,16173=>25376,16174=>25377,16175=>25378,16176=>25379,16177=>25380,16178=>25381,16179=>25382,16180=>25383,16181=>25384,16182=>25385,16183=>25386,16184=>25387,16185=>25388,16186=>25389,16187=>25390,16188=>25391,16189=>25392,16190=>25393,16191=>25394,16192=>25395,16193=>25396,16194=>25397,16195=>25398,16196=>25399,16197=>25400,16198=>25401,16199=>25402,16200=>25403,16201=>25404,16202=>25405,16203=>25406,16204=>25407,16205=>25408,16206=>25409,16207=>25410,16208=>25411,16209=>25412,16210=>25413,16211=>25414,16212=>25415,16213=>25416,16214=>25417,16215=>25418,16216=>25419,16217=>25420,16218=>25421,16219=>25422,16220=>25423,16221=>25424,16222=>25425,16223=>25426,16224=>25427,16225=>25428,16226=>25429,16227=>25430,16228=>25431,16229=>25432,16230=>25433,16231=>25434,16232=>25435,16233=>25436,16234=>25437,16235=>25438,16236=>25439,16237=>25440,16238=>25441,16239=>25442,16240=>25443,16241=>25444,16242=>25445,16243=>25446,16244=>25447,16245=>25448,16246=>25449,16247=>25450,16248=>25451,16249=>25452,16250=>25453,16251=>25454,16252=>25455,16253=>25456,16254=>25457,16255=>25458,16256=>25459,16257=>25460,16258=>25461,16259=>25462,16260=>25463,16261=>25464,16262=>25465,16263=>25466,16264=>25467,16265=>25468,16266=>25469,16267=>25470,16268=>25471,16269=>25472,16270=>25473,16271=>25474,16272=>25475,16273=>25476,16274=>25477,16275=>25478,16276=>25479,16277=>25480,16278=>25481,16279=>25482,16280=>25483,16281=>25484,16282=>25485,16283=>25486,16284=>25487,16285=>25488,16286=>25489,16287=>25490,16288=>25491,16289=>25492,16290=>25493,16291=>25494,16292=>25495,16293=>25496,16294=>25497,16295=>25498,16296=>25499,16297=>25500,16298=>25501,16299=>25502,16300=>25503,16301=>25504,16302=>25505,16303=>25506,16304=>25507,16305=>25508,16306=>25509,16307=>25510,16308=>25511,16309=>25512,16310=>25513,16311=>25514,16312=>25515,16313=>25516,16314=>25517,16315=>25518,16316=>25519,16317=>25520,16318=>25521,16319=>25522,16320=>25523,16321=>25524,16322=>25525,16323=>25526,16324=>25527,16325=>25528,16326=>25529,16327=>25530,16328=>25531,16329=>25532,16330=>25533,16331=>25534,16332=>25535,16333=>25536,16334=>25537,16335=>25538,16336=>25539,16337=>25540,16338=>25541,16339=>25542,16340=>25543,16341=>25544,16342=>25545,16343=>25546,16344=>25547,16345=>25548,16346=>25549,16347=>25550,16348=>25551,16349=>25552,16350=>25553,16351=>25554,16352=>25555,16353=>25556,16354=>25557,16355=>25558,16356=>25559,16357=>25560,16358=>25561,16359=>25562,16360=>25563,16361=>25564,16362=>25565,16363=>25566,16364=>25567,16365=>25568,16366=>25569,16367=>25570,16368=>25571,16369=>25572,16370=>25573,16371=>25574,16372=>25575,16373=>25576,16374=>25577,16375=>25578,16376=>25579,16377=>25580,16378=>25581,16379=>25582,16380=>25583,16381=>25584,16382=>25585,16383=>25586,16384=>25587,16385=>25588,16386=>25589,16387=>25590,16388=>25591,16389=>25592,16390=>25593,16391=>25594,16392=>25595,16393=>25596,16394=>25597,16395=>25598,16396=>25599,16397=>25600,16398=>25601,16399=>25602,16400=>25603,16401=>25604,16402=>25605,16403=>25606,16404=>25607,16405=>25608,16406=>25609,16407=>25610,16408=>25611,16409=>25612,16410=>25613,16411=>25614,16412=>25615,16413=>25616,16414=>25617,16415=>25618,16416=>25619,16417=>25620,16418=>25621,16419=>25622,16420=>25623,16421=>25624,16422=>25625,16423=>25626,16424=>25627,16425=>25628,16426=>25629,16427=>25630,16428=>25631,16429=>25632,16430=>25633,16431=>25634,16432=>25635,16433=>25636,16434=>25637,16435=>25638,16436=>25639,16437=>25640,16438=>25641,16439=>25642,16440=>25643,16441=>25644,16442=>25645,16443=>25646,16444=>25647,16445=>25648,16446=>25649,16447=>25650,16448=>25651,16449=>25652,16450=>25653,16451=>25654,16452=>25655,16453=>25656,16454=>25657,16455=>25658,16456=>25659,16457=>25660,16458=>25661,16459=>25662,16460=>25663,16461=>25664,16462=>25665,16463=>25666,16464=>25667,16465=>25668,16466=>25669,16467=>25670,16468=>25671,16469=>25672,16471=>25673,16472=>25674,16473=>25675,16474=>25676,16475=>25677,16476=>25678,16477=>25679,16478=>25680,16479=>25681,16480=>25682,16481=>25683,16482=>25684,16483=>25685,16484=>25686,16485=>25687,16486=>25688,16487=>25689,16488=>25690,16489=>25691,16490=>25692,16491=>25693,16492=>25694,16493=>25695,16494=>25696,16495=>25697,16496=>25698,16497=>25699,16498=>25700,16499=>25701,16500=>25702,16501=>25703,16502=>25704,16503=>25705,16504=>25706,16505=>25707,16506=>25708,16507=>25709,16508=>25710,16509=>25711,16510=>25712,16511=>25713,16512=>25714,16513=>25715,16514=>25716,16515=>25717,16516=>25718,16517=>25719,16518=>25720,16519=>25721,16520=>25722,16521=>25723,16522=>25724,16523=>25725,16524=>25726,16525=>25727,16526=>25728,16527=>25729,16528=>25730,16529=>25731,16530=>25732,16531=>25733,16532=>25734,16533=>25735,16534=>25736,16535=>25737,16536=>25738,16537=>25739,16538=>25740,16539=>25741,16540=>25742,16541=>25743,16542=>25744,16543=>25745,16544=>25746,16545=>25747,16546=>25748,16547=>25749,16548=>25750,16549=>25751,16550=>25752,16551=>25753,16552=>25754,16553=>25755,16554=>25756,16555=>25757,16556=>25758,16557=>25759,16558=>25760,16559=>25761,16560=>25762,16561=>25763,16562=>25764,16563=>25765,16564=>25766,16565=>25767,16566=>25768,16567=>25769,16568=>25770,16569=>25771,16570=>25772,16571=>25773,16572=>25774,16573=>25775,16574=>25776,16575=>25777,16576=>25778,16577=>25779,16578=>25780,16579=>25781,16580=>25782,16581=>25783,16582=>25784,16583=>25785,16584=>25786,16585=>25787,16586=>25788,16587=>25789,16588=>25790,16589=>25791,16590=>25792,16591=>25793,16592=>25794,16593=>25795,16594=>25796,16595=>25797,16596=>25798,16597=>25799,16598=>25800,16599=>25801,16600=>25802,16601=>25803,16602=>25804,16603=>25805,16604=>25806,16605=>25807,16606=>25808,16607=>25809,16608=>25810,16609=>25811,16610=>25812,16611=>25813,16612=>25814,16613=>25815,16614=>25816,16615=>25817,16616=>25818,16617=>25819,16618=>25820,16619=>25821,16620=>25822,16621=>25823,16622=>25824,16623=>25825,16624=>25826,16625=>25827,16626=>25828,16627=>25829,16628=>25830,16629=>25831,16630=>25832,16631=>25833,16632=>25834,16633=>25835,16634=>25836,16635=>25837,16636=>25838,16637=>25839,16638=>25840,16639=>25841,16640=>25842,16641=>25843,16642=>25844,16643=>25845,16644=>25846,16645=>25847,16646=>25848,16647=>25849,16648=>25850,16649=>25851,16650=>25852,16651=>25853,16652=>25854,16653=>25855,16654=>25856,16655=>25857,16656=>25858,16657=>25859,16658=>25860,16659=>25861,16660=>25862,16661=>25863,16662=>25864,16663=>25865,16664=>25866,16665=>25867,16666=>25868,16667=>25869,16668=>25870,16669=>25871,16670=>25872,16671=>25873,16672=>25874,16673=>25875,16674=>25876,16675=>25877,16676=>25878,16677=>25879,16678=>25880,16679=>25881,16680=>25882,16681=>25883,16682=>25884,16683=>25885,16684=>25886,16685=>25887,16686=>25888,16687=>25889,16688=>25890,16689=>25891,16690=>25892,16691=>25893,16692=>25894,16693=>25895,16694=>25896,16695=>25897,16696=>25898,16697=>25899,16698=>25900,16699=>25901,16700=>25902,16701=>25903,16702=>25904,16703=>25905,16704=>25906,16705=>25907,16706=>25908,16707=>25909,16708=>25910,16709=>25911,16710=>25912,16711=>25913,16712=>25914,16713=>25915,16714=>25916,16715=>25917,16716=>25918,16717=>25919,16718=>25920,16719=>25921,16720=>25922,16721=>25923,16722=>25924,16723=>25925,16724=>25926,16725=>25927,16726=>25928,16727=>25929,16728=>25930,16729=>25931,16730=>25932,16731=>25933,16732=>25934,16733=>25935,16734=>25936,16736=>25937,16737=>25938,16738=>25939,16739=>25940,16740=>25941,16741=>25942,16742=>25943,16743=>25944,16744=>25945,16745=>25946,16746=>25947,16747=>25948,16748=>25949,16749=>25950,16750=>25951,16751=>25952,16752=>25953,16753=>25954,16754=>25955,16755=>25956,16756=>25957,16757=>25958,16758=>25959,16759=>25960,16760=>25961,16761=>25962,16762=>25963,16763=>25964,16764=>25965,16765=>25966,16766=>25967,16767=>25968,16768=>25969,16769=>25970,16770=>25971,16771=>25972,16772=>25973,16773=>25974,16774=>25975,16775=>25976,16776=>25977,16777=>25978,16778=>25979,16779=>25980,16780=>25981,16781=>25982,16782=>25983,16783=>25984,16784=>25985,16785=>25986,16786=>25987,16787=>25988,16788=>25989,16789=>25990,16790=>25991,16791=>25992,16792=>25993,16793=>25994,16794=>25995,16795=>25996,16796=>25997,16797=>25998,16798=>25999,16799=>26000,16800=>26001,16801=>26002,16802=>26003,16803=>26004,16804=>26005,16805=>26006,16806=>26007,16807=>26008,16808=>26009,16809=>26010,16810=>26011,16811=>26012,16812=>26013,16813=>26014,16814=>26015,16815=>26016,16816=>26017,16817=>26018,16818=>26019,16819=>26020,16820=>26021,16821=>26022,16822=>26023,16823=>26024,16824=>26025,16825=>26026,16826=>26027,16827=>26028,16828=>26029,16829=>26030,16830=>26031,16831=>26032,16832=>26033,16833=>26034,16834=>26035,16835=>26036,16836=>26037,16837=>26038,16838=>26039,16839=>26040,16840=>26041,16841=>26042,16842=>26043,16843=>26044,16844=>26045,16845=>26046,16846=>26047,16847=>26048,16848=>26049,16849=>26050,16850=>26051,16851=>26052,16852=>26053,16853=>26054,16854=>26055,16855=>26056,16856=>26057,16857=>26058,16858=>26059,16859=>26060,16860=>26061,16861=>26062,16862=>26063,16863=>26064,16864=>26065,16865=>26066,16866=>26067,16867=>26068,16868=>26069,16869=>26070,16870=>26071,16871=>26072,16872=>26073,16873=>26074,16874=>26075,16875=>26076,16876=>26077,16877=>26078,16878=>26079,16879=>26080,16880=>26081,16881=>26082,16882=>26083,16883=>26084,16884=>26085,16885=>26086,16886=>26087,16887=>26088,16888=>26089,16889=>26090,16890=>26091,16891=>26092,16892=>26093,16893=>26094,16894=>26095,16895=>26096,16896=>26097,16897=>26098,16898=>26099,16899=>26100,16900=>26101,16901=>26102,16902=>26103,16903=>26104,16904=>26105,16905=>26106,16906=>26107,16907=>26108,16908=>26109,16909=>26110,16910=>26111,16911=>26112,16912=>26113,16913=>26114,16914=>26115,16915=>26116,16916=>26117,16917=>26118,16918=>26119,16919=>26120,16920=>26121,16921=>26122,16922=>26123,16923=>26124,16924=>26125,16925=>26126,16926=>26127,16927=>26128,16928=>26129,16929=>26130,16930=>26131,16931=>26132,16932=>26133,16933=>26134,16934=>26135,16935=>26136,16936=>26137,16937=>26138,16938=>26139,16939=>26140,16940=>26141,16941=>26142,16942=>26143,16943=>26144,16944=>26145,16945=>26146,16946=>26147,16947=>26148,16948=>26149,16949=>26150,16950=>26151,16951=>26152,16952=>26153,16953=>26154,16954=>26155,16955=>26156,16956=>26157,16957=>26158,16958=>26159,16959=>26160,16960=>26161,16961=>26162,16962=>26163,16963=>26164,16964=>26165,16965=>26166,16966=>26167,16967=>26168,16968=>26169,16969=>26170,16970=>26171,16971=>26172,16972=>26173,16973=>26174,16974=>26175,16975=>26176,16976=>26177,16977=>26178,16978=>26179,16979=>26180,16980=>26181,16981=>26182,16982=>26183,16983=>26184,16984=>26185,16985=>26186,16986=>26187,16987=>26188,16988=>26189,16989=>26190,16990=>26191,16991=>26192,16992=>26193,16993=>26194,16994=>26195,16995=>26196,16996=>26197,16997=>26198,16998=>26199,16999=>26200,17000=>26201,17001=>26202,17002=>26203,17003=>26204,17004=>26205,17005=>26206,17006=>26207,17007=>26208,17008=>26209,17009=>26210,17010=>26211,17011=>26212,17012=>26213,17013=>26214,17014=>26215,17015=>26216,17016=>26217,17017=>26218,17018=>26219,17019=>26220,17020=>26221,17021=>26222,17022=>26223,17023=>26224,17024=>26225,17025=>26226,17026=>26227,17027=>26228,17028=>26229,17029=>26230,17030=>26231,17031=>26232,17032=>26233,17033=>26234,17034=>26235,17035=>26236,17036=>26237,17037=>26238,17038=>26239,17039=>26240,17040=>26241,17041=>26242,17042=>26243,17043=>26244,17044=>26245,17045=>26246,17046=>26247,17047=>26248,17048=>26249,17049=>26250,17050=>26251,17051=>26252,17052=>26253,17053=>26254,17054=>26255,17055=>26256,17056=>26257,17057=>26258,17058=>26259,17059=>26260,17060=>26261,17061=>26262,17062=>26263,17063=>26264,17064=>26265,17065=>26266,17066=>26267,17067=>26268,17068=>26269,17069=>26270,17070=>26271,17071=>26272,17072=>26273,17073=>26274,17074=>26275,17075=>26276,17076=>26277,17077=>26278,17078=>26279,17079=>26280,17080=>26281,17081=>26282,17082=>26283,17083=>26284,17084=>26285,17085=>26286,17086=>26287,17087=>26288,17088=>26289,17089=>26290,17090=>26291,17091=>26292,17092=>26293,17093=>26294,17094=>26295,17095=>26296,17096=>26297,17097=>26298,17098=>26299,17099=>26300,17100=>26301,17101=>26302,17102=>26303,17103=>26304,17104=>26305,17105=>26306,17106=>26307,17107=>26308,17108=>26309,17109=>26310,17110=>26311,17111=>26312,17112=>26313,17113=>26314,17114=>26315,17115=>26316,17116=>26317,17117=>26318,17118=>26319,17119=>26320,17120=>26321,17121=>26322,17122=>26323,17123=>26324,17124=>26325,17125=>26326,17126=>26327,17127=>26328,17128=>26329,17129=>26330,17130=>26331,17131=>26332,17132=>26333,17133=>26334,17134=>26335,17135=>26336,17136=>26337,17137=>26338,17138=>26339,17139=>26340,17140=>26341,17141=>26342,17142=>26343,17143=>26344,17144=>26345,17145=>26346,17146=>26347,17147=>26348,17148=>26349,17149=>26350,17150=>26351,17151=>26352,17152=>26353,17153=>26354,17154=>26355,17155=>26356,17156=>26357,17157=>26358,17158=>26359,17159=>26360,17160=>26361,17161=>26362,17162=>26363,17163=>26364,17164=>26365,17165=>26366,17166=>26367,17167=>26368,17168=>26369,17169=>26370,17170=>26371,17171=>26372,17172=>26373,17173=>26374,17174=>26375,17175=>26376,17176=>26377,17177=>26378,17178=>26379,17179=>26380,17180=>26381,17181=>26382,17182=>26383,17183=>26384,17184=>26385,17185=>26386,17186=>26387,17187=>26388,17188=>26389,17189=>26390,17190=>26391,17191=>26392,17192=>26393,17193=>26394,17194=>26395,17195=>26396,17196=>26397,17197=>26398,17198=>26399,17199=>26400,17200=>26401,17201=>26402,17202=>26403,17203=>26404,17204=>26405,17205=>26406,17206=>26407,17208=>26408,17209=>26409,17210=>26410,17211=>26411,17212=>26412,17213=>26413,17214=>26414,17215=>26415,17216=>26416,17217=>26417,17218=>26418,17219=>26419,17220=>26420,17221=>26421,17222=>26422,17223=>26423,17224=>26424,17225=>26425,17226=>26426,17227=>26427,17228=>26428,17229=>26429,17230=>26430,17231=>26431,17232=>26432,17233=>26433,17234=>26434,17235=>26435,17236=>26436,17237=>26437,17238=>26438,17239=>26439,17240=>26440,17241=>26441,17242=>26442,17243=>26443,17244=>26444,17245=>26445,17246=>26446,17247=>26447,17248=>26448,17249=>26449,17250=>26450,17251=>26451,17252=>26452,17253=>26453,17254=>26454,17255=>26455,17256=>26456,17257=>26457,17258=>26458,17259=>26459,17260=>26460,17261=>26461,17262=>26462,17263=>26463,17264=>26464,17265=>26465,17266=>26466,17267=>26467,17268=>26468,17269=>26469,17270=>26470,17271=>26471,17272=>26472,17273=>26473,17274=>26474,17275=>26475,17276=>26476,17277=>26477,17278=>26478,17279=>26479,17280=>26480,17281=>26481,17282=>26482,17283=>26483,17284=>26484,17285=>26485,17286=>26486,17287=>26487,17288=>26488,17289=>26489,17290=>26490,17291=>26491,17292=>26492,17293=>26493,17294=>26494,17295=>26495,17296=>26496,17297=>26497,17298=>26498,17299=>26499,17300=>26500,17301=>26501,17302=>26502,17303=>26503,17304=>26504,17305=>26505,17306=>26506,17307=>26507,17308=>26508,17309=>26509,17310=>26510,17311=>26511,17312=>26512,17313=>26513,17314=>26514,17315=>26515,17316=>26516,17317=>26517,17318=>26518,17319=>26519,17320=>26520,17321=>26521,17322=>26522,17323=>26523,17325=>26524,17326=>26525,17327=>26526,17328=>26527,17330=>26528,17331=>26529,17332=>26530,17333=>26531,17334=>26532,17335=>26533,17336=>26534,17337=>26535,17338=>26536,17339=>26537,17340=>26538,17341=>26539,17342=>26540,17343=>26541,17344=>26542,17345=>26543,17346=>26544,17347=>26545,17348=>26546,17349=>26547,17350=>26548,17351=>26549,17352=>26550,17353=>26551,17354=>26552,17355=>26553,17356=>26554,17357=>26555,17358=>26556,17359=>26557,17360=>26558,17361=>26559,17362=>26560,17363=>26561,17364=>26562,17365=>26563,17366=>26564,17367=>26565,17368=>26566,17369=>26567,17370=>26568,17371=>26569,17372=>26570,17374=>26571,17375=>26572,17376=>26573,17377=>26574,17378=>26575,17379=>26576,17380=>26577,17381=>26578,17382=>26579,17383=>26580,17384=>26581,17385=>26582,17386=>26583,17387=>26584,17388=>26585,17389=>26586,17390=>26587,17391=>26588,17392=>26589,17393=>26590,17394=>26591,17395=>26592,17396=>26593,17397=>26594,17398=>26595,17399=>26596,17400=>26597,17401=>26598,17402=>26599,17403=>26600,17404=>26601,17405=>26602,17406=>26603,17407=>26604,17408=>26605,17409=>26606,17410=>26607,17411=>26608,17412=>26609,17413=>26610,17414=>26611,17415=>26612,17416=>26613,17417=>26614,17418=>26615,17419=>26616,17420=>26617,17421=>26618,17422=>26619,17423=>26620,17424=>26621,17425=>26622,17426=>26623,17427=>26624,17428=>26625,17429=>26626,17430=>26627,17431=>26628,17432=>26629,17433=>26630,17434=>26631,17435=>26632,17436=>26633,17437=>26634,17438=>26635,17439=>26636,17440=>26637,17441=>26638,17442=>26639,17443=>26640,17444=>26641,17445=>26642,17446=>26643,17447=>26644,17448=>26645,17449=>26646,17450=>26647,17451=>26648,17452=>26649,17453=>26650,17454=>26651,17455=>26652,17456=>26653,17457=>26654,17458=>26655,17459=>26656,17460=>26657,17461=>26658,17462=>26659,17463=>26660,17464=>26661,17465=>26662,17466=>26663,17467=>26664,17468=>26665,17469=>26666,17470=>26667,17471=>26668,17472=>26669,17473=>26670,17474=>26671,17475=>26672,17476=>26673,17477=>26674,17478=>26675,17479=>26676,17480=>26677,17481=>26678,17482=>26679,17483=>26680,17484=>26681,17485=>26682,17486=>26683,17487=>26684,17488=>26685,17489=>26686,17490=>26687,17491=>26688,17492=>26689,17493=>26690,17494=>26691,17495=>26692,17496=>26693,17497=>26694,17498=>26695,17499=>26696,17500=>26697,17501=>26698,17502=>26699,17503=>26700,17504=>26701,17505=>26702,17506=>26703,17507=>26704,17508=>26705,17509=>26706,17510=>26707,17511=>26708,17512=>26709,17513=>26710,17514=>26711,17515=>26712,17516=>26713,17517=>26714,17518=>26715,17519=>26716,17520=>26717,17521=>26718,17522=>26719,17523=>26720,17524=>26721,17525=>26722,17526=>26723,17527=>26724,17528=>26725,17529=>26726,17530=>26727,17531=>26728,17532=>26729,17533=>26730,17534=>26731,17535=>26732,17536=>26733,17537=>26734,17538=>26735,17539=>26736,17540=>26737,17541=>26738,17542=>26739,17543=>26740,17544=>26741,17545=>26742,17546=>26743,17547=>26744,17548=>26745,17549=>26746,17550=>26747,17551=>26748,17552=>26749,17553=>26750,17554=>26751,17555=>26752,17556=>26753,17557=>26754,17558=>26755,17559=>26756,17560=>26757,17561=>26758,17562=>26759,17563=>26760,17564=>26761,17565=>26762,17566=>26763,17567=>26764,17568=>26765,17569=>26766,17570=>26767,17571=>26768,17572=>26769,17573=>26770,17574=>26771,17575=>26772,17576=>26773,17577=>26774,17578=>26775,17579=>26776,17580=>26777,17581=>26778,17582=>26779,17583=>26780,17584=>26781,17585=>26782,17586=>26783,17587=>26784,17588=>26785,17589=>26786,17590=>26787,17591=>26788,17592=>26789,17593=>26790,17594=>26791,17595=>26792,17596=>26793,17597=>26794,17598=>26795,17599=>26796,17600=>26797,17601=>26798,17602=>26799,17603=>26800,17604=>26801,17605=>26802,17606=>26803,17607=>26804,17608=>26805,17609=>26806,17610=>26807,17611=>26808,17612=>26809,17613=>26810,17614=>26811,17615=>26812,17616=>26813,17617=>26814,17618=>26815,17619=>26816,17620=>26817,17621=>26818,17623=>26819,17624=>26820,17625=>26821,17626=>26822,17627=>26823,17628=>26824,17629=>26825,17630=>26826,17631=>26827,17632=>26828,17633=>26829,17634=>26830,17635=>26831,17636=>26832,17637=>26833,17638=>26834,17639=>26835,17640=>26836,17641=>26837,17642=>26838,17643=>26839,17644=>26840,17645=>26841,17646=>26842,17647=>26843,17648=>26844,17649=>26845,17650=>26846,17651=>26847,17652=>26848,17653=>26849,17654=>26850,17655=>26851,17656=>26852,17657=>26853,17658=>26854,17659=>26855,17660=>26856,17661=>26857,17662=>26858,17663=>26859,17664=>26860,17665=>26861,17666=>26862,17667=>26863,17668=>26864,17669=>26865,17670=>26866,17671=>26867,17672=>26868,17673=>26869,17674=>26870,17675=>26871,17676=>26872,17677=>26873,17678=>26874,17679=>26875,17680=>26876,17681=>26877,17682=>26878,17683=>26879,17684=>26880,17685=>26881,17686=>26882,17687=>26883,17688=>26884,17689=>26885,17690=>26886,17691=>26887,17692=>26888,17693=>26889,17694=>26890,17695=>26891,17696=>26892,17697=>26893,17698=>26894,17699=>26895,17700=>26896,17701=>26897,17702=>26898,17703=>26899,17704=>26900,17705=>26901,17706=>26902,17707=>26903,17708=>26904,17709=>26905,17710=>26906,17711=>26907,17712=>26908,17713=>26909,17714=>26910,17715=>26911,17716=>26912,17717=>26913,17718=>26914,17719=>26915,17720=>26916,17721=>26917,17722=>26918,17723=>26919,17724=>26920,17725=>26921,17726=>26922,17727=>26923,17728=>26924,17729=>26925,17730=>26926,17731=>26927,17732=>26928,17733=>26929,17734=>26930,17735=>26931,17736=>26932,17737=>26933,17738=>26934,17739=>26935,17740=>26936,17741=>26937,17742=>26938,17743=>26939,17744=>26940,17745=>26941,17746=>26942,17747=>26943,17748=>26944,17749=>26945,17750=>26946,17751=>26947,17752=>26948,17753=>26949,17754=>26950,17755=>26951,17756=>26952,17757=>26953,17758=>26954,17759=>26955,17760=>26956,17761=>26957,17762=>26958,17763=>26959,17764=>26960,17765=>26961,17766=>26962,17767=>26963,17768=>26964,17769=>26965,17770=>26966,17771=>26967,17772=>26968,17773=>26969,17774=>26970,17775=>26971,17776=>26972,17777=>26973,17778=>26974,17779=>26975,17780=>26976,17781=>26977,17782=>26978,17783=>26979,17784=>26980,17785=>26981,17786=>26982,17787=>26983,17788=>26984,17789=>26985,17790=>26986,17791=>26987,17792=>26988,17793=>26989,17794=>26990,17795=>26991,17796=>26992,17797=>26993,17798=>26994,17799=>26995,17800=>26996,17801=>26997,17802=>26998,17803=>26999,17804=>27000,17805=>27001,17806=>27002,17807=>27003,17808=>27004,17809=>27005,17810=>27006,17811=>27007,17812=>27008,17813=>27009,17814=>27010,17815=>27011,17816=>27012,17817=>27013,17818=>27014,17819=>27015,17820=>27016,17821=>27017,17822=>27018,17823=>27019,17824=>27020,17825=>27021,17826=>27022,17827=>27023,17828=>27024,17829=>27025,17830=>27026,17831=>27027,17832=>27028,17833=>27029,17834=>27030,17835=>27031,17836=>27032,17837=>27033,17838=>27034,17839=>27035,17840=>27036,17841=>27037,17842=>27038,17843=>27039,17844=>27040,17845=>27041,17846=>27042,17847=>27043,17848=>27044,17849=>27045,17850=>27046,17851=>27047,17852=>27048,17853=>27049,17854=>27050,17855=>27051,17856=>27052,17857=>27053,17858=>27054,17859=>27055,17860=>27056,17861=>27057,17862=>27058,17863=>27059,17864=>27060,17865=>27061,17866=>27062,17867=>27063,17868=>27064,17869=>27065,17870=>27066,17871=>27067,17872=>27068,17873=>27069,17874=>27070,17875=>27071,17876=>27072,17877=>27073,17878=>27074,17879=>27075,17880=>27076,17881=>27077,17882=>27078,17883=>27079,17884=>27080,17885=>27081,17886=>27082,17887=>27083,17888=>27084,17889=>27085,17890=>27086,17891=>27087,17892=>27088,17893=>27089,17894=>27090,17895=>27091,17896=>27092,17897=>27093,17898=>27094,17899=>27095,17900=>27096,17901=>27097,17902=>27098,17903=>27099,17904=>27100,17905=>27101,17906=>27102,17907=>27103,17908=>27104,17909=>27105,17910=>27106,17911=>27107,17912=>27108,17913=>27109,17914=>27110,17915=>27111,17916=>27112,17917=>27113,17918=>27114,17919=>27115,17920=>27116,17921=>27117,17922=>27118,17923=>27119,17924=>27120,17925=>27121,17926=>27122,17927=>27123,17928=>27124,17929=>27125,17930=>27126,17931=>27127,17932=>27128,17933=>27129,17934=>27130,17935=>27131,17936=>27132,17937=>27133,17938=>27134,17939=>27135,17940=>27136,17941=>27137,17942=>27138,17943=>27139,17944=>27140,17945=>27141,17946=>27142,17947=>27143,17948=>27144,17949=>27145,17950=>27146,17951=>27147,17952=>27148,17953=>27149,17954=>27150,17955=>27151,17956=>27152,17957=>27153,17958=>27154,17959=>27155,17960=>27156,17961=>27157,17962=>27158,17963=>27159,17964=>27160,17965=>27161,17966=>27162,17967=>27163,17968=>27164,17969=>27165,17970=>27166,17971=>27167,17972=>27168,17973=>27169,17974=>27170,17975=>27171,17976=>27172,17977=>27173,17978=>27174,17979=>27175,17980=>27176,17981=>27177,17982=>27178,17983=>27179,17984=>27180,17985=>27181,17986=>27182,17987=>27183,17988=>27184,17989=>27185,17990=>27186,17991=>27187,17992=>27188,17993=>27189,17994=>27190,17995=>27191,17997=>27192,17998=>27193,17999=>27194,18000=>27195,18001=>27196,18002=>27197,18003=>27198,18004=>27199,18005=>27200,18006=>27201,18007=>27202,18008=>27203,18009=>27204,18010=>27205,18011=>27206,18012=>27207,18013=>27208,18014=>27209,18015=>27210,18016=>27211,18018=>27212,18019=>27213,18020=>27214,18021=>27215,18022=>27216,18023=>27217,18024=>27218,18025=>27219,18026=>27220,18027=>27221,18028=>27222,18029=>27223,18030=>27224,18031=>27225,18032=>27226,18033=>27227,18034=>27228,18035=>27229,18036=>27230,18037=>27231,18038=>27232,18039=>27233,18040=>27234,18041=>27235,18042=>27236,18043=>27237,18044=>27238,18045=>27239,18046=>27240,18047=>27241,18048=>27242,18049=>27243,18050=>27244,18051=>27245,18052=>27246,18053=>27247,18054=>27248,18055=>27249,18056=>27250,18057=>27251,18058=>27252,18059=>27253,18060=>27254,18061=>27255,18062=>27256,18063=>27257,18064=>27258,18065=>27259,18066=>27260,18067=>27261,18068=>27262,18069=>27263,18070=>27264,18071=>27265,18072=>27266,18073=>27267,18074=>27268,18075=>27269,18076=>27270,18077=>27271,18078=>27272,18079=>27273,18080=>27274,18081=>27275,18082=>27276,18083=>27277,18084=>27278,18085=>27279,18086=>27280,18087=>27281,18088=>27282,18089=>27283,18090=>27284,18091=>27285,18092=>27286,18093=>27287,18094=>27288,18095=>27289,18096=>27290,18097=>27291,18098=>27292,18099=>27293,18100=>27294,18101=>27295,18102=>27296,18103=>27297,18104=>27298,18105=>27299,18106=>27300,18107=>27301,18108=>27302,18109=>27303,18110=>27304,18111=>27305,18112=>27306,18113=>27307,18114=>27308,18115=>27309,18116=>27310,18117=>27311,18118=>27312,18119=>27313,18120=>27314,18121=>27315,18122=>27316,18123=>27317,18124=>27318,18125=>27319,18126=>27320,18127=>27321,18128=>27322,18129=>27323,18130=>27324,18131=>27325,18132=>27326,18133=>27327,18134=>27328,18135=>27329,18136=>27330,18137=>27331,18138=>27332,18139=>27333,18140=>27334,18141=>27335,18142=>27336,18143=>27337,18144=>27338,18145=>27339,18146=>27340,18147=>27341,18148=>27342,18149=>27343,18150=>27344,18151=>27345,18152=>27346,18153=>27347,18154=>27348,18155=>27349,18156=>27350,18157=>27351,18158=>27352,18159=>27353,18160=>27354,18161=>27355,18162=>27356,18163=>27357,18164=>27358,18165=>27359,18166=>27360,18167=>27361,18168=>27362,18169=>27363,18170=>27364,18171=>27365,18172=>27366,18173=>27367,18174=>27368,18175=>27369,18176=>27370,18177=>27371,18178=>27372,18179=>27373,18180=>27374,18181=>27375,18182=>27376,18183=>27377,18184=>27378,18185=>27379,18186=>27380,18187=>27381,18188=>27382,18189=>27383,18190=>27384,18191=>27385,18192=>27386,18193=>27387,18194=>27388,18195=>27389,18196=>27390,18197=>27391,18198=>27392,18199=>27393,18200=>27394,18201=>27395,18202=>27396,18203=>27397,18204=>27398,18205=>27399,18206=>27400,18207=>27401,18208=>27402,18209=>27403,18210=>27404,18212=>27405,18213=>27406,18214=>27407,18215=>27408,18216=>27409,18218=>27410,18219=>27411,18220=>27412,18221=>27413,18222=>27414,18223=>27415,18224=>27416,18225=>27417,18226=>27418,18227=>27419,18228=>27420,18229=>27421,18230=>27422,18231=>27423,18232=>27424,18233=>27425,18234=>27426,18235=>27427,18236=>27428,18237=>27429,18238=>27430,18239=>27431,18240=>27432,18241=>27433,18242=>27434,18243=>27435,18244=>27436,18245=>27437,18246=>27438,18247=>27439,18248=>27440,18249=>27441,18250=>27442,18251=>27443,18252=>27444,18253=>27445,18254=>27446,18255=>27447,18256=>27448,18257=>27449,18258=>27450,18259=>27451,18260=>27452,18261=>27453,18262=>27454,18263=>27455,18264=>27456,18265=>27457,18266=>27458,18267=>27459,18268=>27460,18269=>27461,18270=>27462,18271=>27463,18272=>27464,18273=>27465,18274=>27466,18275=>27467,18276=>27468,18277=>27469,18278=>27470,18279=>27471,18280=>27472,18281=>27473,18282=>27474,18283=>27475,18284=>27476,18285=>27477,18286=>27478,18287=>27479,18288=>27480,18289=>27481,18290=>27482,18291=>27483,18292=>27484,18293=>27485,18294=>27486,18295=>27487,18296=>27488,18297=>27489,18298=>27490,18299=>27491,18301=>27492,18302=>27493,18303=>27494,18304=>27495,18305=>27496,18306=>27497,18307=>27498,18308=>27499,18309=>27500,18310=>27501,18311=>27502,18312=>27503,18313=>27504,18314=>27505,18315=>27506,18316=>27507,18318=>27508,18319=>27509,18320=>27510,18321=>27511,18322=>27512,18323=>27513,18324=>27514,18325=>27515,18326=>27516,18327=>27517,18328=>27518,18329=>27519,18330=>27520,18331=>27521,18332=>27522,18333=>27523,18334=>27524,18335=>27525,18336=>27526,18337=>27527,18338=>27528,18339=>27529,18340=>27530,18341=>27531,18342=>27532,18343=>27533,18344=>27534,18345=>27535,18346=>27536,18347=>27537,18348=>27538,18349=>27539,18350=>27540,18351=>27541,18352=>27542,18353=>27543,18354=>27544,18355=>27545,18356=>27546,18357=>27547,18358=>27548,18359=>27549,18360=>27550,18361=>27551,18362=>27552,18363=>27553,18364=>27554,18365=>27555,18366=>27556,18367=>27557,18368=>27558,18369=>27559,18370=>27560,18371=>27561,18372=>27562,18373=>27563,18374=>27564,18375=>27565,18376=>27566,18377=>27567,18378=>27568,18379=>27569,18380=>27570,18381=>27571,18382=>27572,18383=>27573,18384=>27574,18385=>27575,18386=>27576,18387=>27577,18388=>27578,18389=>27579,18390=>27580,18391=>27581,18392=>27582,18393=>27583,18394=>27584,18395=>27585,18396=>27586,18397=>27587,18398=>27588,18399=>27589,18400=>27590,18401=>27591,18402=>27592,18403=>27593,18404=>27594,18405=>27595,18406=>27596,18407=>27597,18408=>27598,18409=>27599,18410=>27600,18411=>27601,18412=>27602,18413=>27603,18414=>27604,18415=>27605,18416=>27606,18417=>27607,18418=>27608,18419=>27609,18420=>27610,18421=>27611,18422=>27612,18423=>27613,18424=>27614,18425=>27615,18426=>27616,18427=>27617,18428=>27618,18429=>27619,18430=>27620,18431=>27621,18432=>27622,18433=>27623,18434=>27624,18435=>27625,18436=>27626,18437=>27627,18438=>27628,18439=>27629,18440=>27630,18441=>27631,18442=>27632,18443=>27633,18444=>27634,18445=>27635,18446=>27636,18447=>27637,18448=>27638,18449=>27639,18450=>27640,18451=>27641,18452=>27642,18453=>27643,18454=>27644,18455=>27645,18456=>27646,18457=>27647,18458=>27648,18459=>27649,18460=>27650,18461=>27651,18462=>27652,18463=>27653,18464=>27654,18465=>27655,18466=>27656,18467=>27657,18468=>27658,18469=>27659,18470=>27660,18471=>27661,18472=>27662,18473=>27663,18474=>27664,18475=>27665,18476=>27666,18477=>27667,18478=>27668,18479=>27669,18480=>27670,18481=>27671,18482=>27672,18483=>27673,18484=>27674,18485=>27675,18486=>27676,18487=>27677,18488=>27678,18489=>27679,18490=>27680,18491=>27681,18492=>27682,18493=>27683,18494=>27684,18495=>27685,18496=>27686,18497=>27687,18498=>27688,18499=>27689,18500=>27690,18501=>27691,18502=>27692,18503=>27693,18504=>27694,18505=>27695,18506=>27696,18507=>27697,18508=>27698,18509=>27699,18510=>27700,18511=>27701,18512=>27702,18513=>27703,18514=>27704,18515=>27705,18516=>27706,18517=>27707,18518=>27708,18519=>27709,18520=>27710,18521=>27711,18522=>27712,18523=>27713,18524=>27714,18525=>27715,18526=>27716,18527=>27717,18528=>27718,18529=>27719,18530=>27720,18531=>27721,18532=>27722,18533=>27723,18534=>27724,18535=>27725,18536=>27726,18537=>27727,18538=>27728,18539=>27729,18540=>27730,18541=>27731,18542=>27732,18543=>27733,18544=>27734,18545=>27735,18546=>27736,18547=>27737,18548=>27738,18549=>27739,18550=>27740,18551=>27741,18552=>27742,18553=>27743,18554=>27744,18555=>27745,18556=>27746,18557=>27747,18558=>27748,18559=>27749,18560=>27750,18561=>27751,18562=>27752,18563=>27753,18564=>27754,18565=>27755,18566=>27756,18567=>27757,18568=>27758,18569=>27759,18570=>27760,18571=>27761,18572=>27762,18573=>27763,18574=>27764,18575=>27765,18576=>27766,18577=>27767,18578=>27768,18579=>27769,18580=>27770,18581=>27771,18582=>27772,18583=>27773,18584=>27774,18585=>27775,18586=>27776,18587=>27777,18588=>27778,18589=>27779,18590=>27780,18591=>27781,18592=>27782,18593=>27783,18594=>27784,18595=>27785,18596=>27786,18597=>27787,18598=>27788,18599=>27789,18600=>27790,18601=>27791,18602=>27792,18603=>27793,18604=>27794,18605=>27795,18606=>27796,18607=>27797,18608=>27798,18609=>27799,18610=>27800,18611=>27801,18612=>27802,18613=>27803,18614=>27804,18615=>27805,18616=>27806,18617=>27807,18618=>27808,18619=>27809,18620=>27810,18621=>27811,18622=>27812,18623=>27813,18624=>27814,18625=>27815,18626=>27816,18627=>27817,18628=>27818,18629=>27819,18630=>27820,18631=>27821,18632=>27822,18633=>27823,18634=>27824,18635=>27825,18636=>27826,18637=>27827,18638=>27828,18639=>27829,18640=>27830,18641=>27831,18642=>27832,18643=>27833,18644=>27834,18645=>27835,18646=>27836,18647=>27837,18648=>27838,18649=>27839,18650=>27840,18651=>27841,18652=>27842,18653=>27843,18654=>27844,18655=>27845,18656=>27846,18657=>27847,18658=>27848,18659=>27849,18660=>27850,18661=>27851,18662=>27852,18663=>27853,18664=>27854,18665=>27855,18666=>27856,18667=>27857,18668=>27858,18669=>27859,18670=>27860,18671=>27861,18672=>27862,18673=>27863,18674=>27864,18675=>27865,18676=>27866,18677=>27867,18678=>27868,18679=>27869,18680=>27870,18681=>27871,18682=>27872,18683=>27873,18684=>27874,18685=>27875,18686=>27876,18687=>27877,18688=>27878,18689=>27879,18690=>27880,18691=>27881,18692=>27882,18693=>27883,18694=>27884,18695=>27885,18696=>27886,18697=>27887,18698=>27888,18699=>27889,18700=>27890,18701=>27891,18702=>27892,18703=>27893,18704=>27894,18705=>27895,18706=>27896,18707=>27897,18708=>27898,18709=>27899,18710=>27900,18711=>27901,18712=>27902,18713=>27903,18714=>27904,18715=>27905,18716=>27906,18717=>27907,18718=>27908,18719=>27909,18720=>27910,18721=>27911,18722=>27912,18723=>27913,18724=>27914,18725=>27915,18726=>27916,18727=>27917,18728=>27918,18729=>27919,18730=>27920,18731=>27921,18732=>27922,18733=>27923,18734=>27924,18735=>27925,18736=>27926,18737=>27927,18738=>27928,18739=>27929,18740=>27930,18741=>27931,18742=>27932,18743=>27933,18744=>27934,18745=>27935,18746=>27936,18747=>27937,18748=>27938,18749=>27939,18750=>27940,18751=>27941,18752=>27942,18753=>27943,18754=>27944,18755=>27945,18756=>27946,18757=>27947,18758=>27948,18760=>27949,18761=>27950,18762=>27951,18763=>27952,18764=>27953,18765=>27954,18766=>27955,18767=>27956,18768=>27957,18769=>27958,18770=>27959,18771=>27960,18772=>27961,18773=>27962,18774=>27963,18775=>27964,18776=>27965,18777=>27966,18778=>27967,18779=>27968,18780=>27969,18781=>27970,18782=>27971,18783=>27972,18784=>27973,18785=>27974,18786=>27975,18787=>27976,18788=>27977,18789=>27978,18790=>27979,18791=>27980,18792=>27981,18793=>27982,18794=>27983,18795=>27984,18796=>27985,18797=>27986,18798=>27987,18799=>27988,18800=>27989,18801=>27990,18802=>27991,18803=>27992,18804=>27993,18805=>27994,18806=>27995,18807=>27996,18808=>27997,18809=>27998,18811=>27999,18812=>28000,18814=>28001,18815=>28002,18816=>28003,18817=>28004,18820=>28005,18823=>28006,18824=>28007,18825=>28008,18826=>28009,18827=>28010,18828=>28011,18829=>28012,18830=>28013,18831=>28014,18832=>28015,18833=>28016,18834=>28017,18835=>28018,18836=>28019,18837=>28020,18838=>28021,18839=>28022,18840=>28023,18841=>28024,18842=>28025,18844=>28026,18845=>28027,18846=>28028,18848=>28029,18849=>28030,18850=>28031,18851=>28032,18852=>28033,18853=>28034,18854=>28035,18855=>28036,18856=>28037,18857=>28038,18858=>28039,18859=>28040,18860=>28041,18861=>28042,18862=>28043,18863=>28044,18864=>28045,18865=>28046,18866=>28047,18867=>28048,18868=>28049,18869=>28050,18872=>28051,18873=>28052,18874=>28053,18875=>28054,18876=>28055,18877=>28056,18878=>28057,18879=>28058,18880=>28059,18881=>28060,18882=>28061,18883=>28062,18884=>28063,18885=>28064,18886=>28065,18887=>28066,18888=>28067,18889=>28068,18890=>28069,18891=>28070,18892=>28071,18893=>28072,18894=>28073,18895=>28074,18896=>28075,18897=>28076,18898=>28077,18899=>28078,18900=>28079,18901=>28080,18902=>28081,18903=>28082,18904=>28083,18905=>28084,18906=>28085,18907=>28086,18908=>28087,18909=>28088,18910=>28089,18911=>28090,18912=>28091,18913=>28092,18914=>28093,18915=>28094,18916=>28095,18917=>28096,18918=>28097,18919=>28098,18920=>28099,18921=>28100,18922=>28101,18923=>28102,18924=>28103,18925=>28104,18926=>28105,18927=>28106,18928=>28107,18929=>28108,18930=>28109,18931=>28110,18932=>28111,18933=>28112,18934=>28113,18935=>28114,18936=>28115,18937=>28116,18938=>28117,18939=>28118,18940=>28119,18941=>28120,18942=>28121,18943=>28122,18944=>28123,18945=>28124,18946=>28125,18947=>28126,18948=>28127,18949=>28128,18950=>28129,18951=>28130,18952=>28131,18953=>28132,18954=>28133,18955=>28134,18956=>28135,18957=>28136,18958=>28137,18959=>28138,18960=>28139,18961=>28140,18962=>28141,18963=>28142,18964=>28143,18965=>28144,18966=>28145,18967=>28146,18968=>28147,18969=>28148,18970=>28149,18971=>28150,18972=>28151,18973=>28152,18974=>28153,18975=>28154,18976=>28155,18977=>28156,18978=>28157,18979=>28158,18980=>28159,18981=>28160,18982=>28161,18983=>28162,18984=>28163,18985=>28164,18986=>28165,18987=>28166,18988=>28167,18989=>28168,18990=>28169,18991=>28170,18992=>28171,18993=>28172,18994=>28173,18995=>28174,18996=>28175,18997=>28176,18998=>28177,18999=>28178,19000=>28179,19001=>28180,19002=>28181,19003=>28182,19004=>28183,19005=>28184,19006=>28185,19007=>28186,19008=>28187,19009=>28188,19010=>28189,19011=>28190,19012=>28191,19013=>28192,19014=>28193,19015=>28194,19016=>28195,19017=>28196,19018=>28197,19019=>28198,19020=>28199,19021=>28200,19022=>28201,19023=>28202,19024=>28203,19025=>28204,19026=>28205,19027=>28206,19028=>28207,19029=>28208,19030=>28209,19031=>28210,19032=>28211,19033=>28212,19034=>28213,19035=>28214,19036=>28215,19037=>28216,19038=>28217,19039=>28218,19040=>28219,19041=>28220,19042=>28221,19043=>28222,19044=>28223,19045=>28224,19046=>28225,19047=>28226,19048=>28227,19049=>28228,19050=>28229,19051=>28230,19052=>28231,19053=>28232,19054=>28233,19055=>28234,19056=>28235,19057=>28236,19058=>28237,19059=>28238,19060=>28239,19061=>28240,19062=>28241,19063=>28242,19064=>28243,19065=>28244,19066=>28245,19067=>28246,19068=>28247,19069=>28248,19070=>28249,19071=>28250,19072=>28251,19073=>28252,19074=>28253,19075=>28254,19076=>28255,19077=>28256,19078=>28257,19079=>28258,19080=>28259,19081=>28260,19082=>28261,19083=>28262,19084=>28263,19085=>28264,19086=>28265,19087=>28266,19088=>28267,19089=>28268,19090=>28269,19091=>28270,19092=>28271,19093=>28272,19094=>28273,19095=>28274,19096=>28275,19097=>28276,19098=>28277,19099=>28278,19100=>28279,19101=>28280,19102=>28281,19103=>28282,19104=>28283,19105=>28284,19106=>28285,19107=>28286,19108=>28287,19109=>28288,19110=>28289,19111=>28290,19112=>28291,19113=>28292,19114=>28293,19115=>28294,19116=>28295,19117=>28296,19118=>28297,19119=>28298,19120=>28299,19121=>28300,19122=>28301,19123=>28302,19124=>28303,19125=>28304,19126=>28305,19127=>28306,19128=>28307,19129=>28308,19130=>28309,19131=>28310,19132=>28311,19133=>28312,19134=>28313,19135=>28314,19136=>28315,19137=>28316,19138=>28317,19139=>28318,19140=>28319,19141=>28320,19142=>28321,19143=>28322,19144=>28323,19145=>28324,19146=>28325,19147=>28326,19148=>28327,19149=>28328,19150=>28329,19151=>28330,19152=>28331,19153=>28332,19154=>28333,19155=>28334,19156=>28335,19157=>28336,19158=>28337,19159=>28338,19160=>28339,19161=>28340,19162=>28341,19163=>28342,19164=>28343,19165=>28344,19166=>28345,19167=>28346,19168=>28347,19169=>28348,19170=>28349,19171=>28350,19172=>28351,19173=>28352,19174=>28353,19175=>28354,19176=>28355,19177=>28356,19178=>28357,19179=>28358,19180=>28359,19181=>28360,19182=>28361,19183=>28362,19184=>28363,19185=>28364,19186=>28365,19187=>28366,19188=>28367,19189=>28368,19190=>28369,19191=>28370,19192=>28371,19193=>28372,19194=>28373,19195=>28374,19196=>28375,19197=>28376,19198=>28377,19199=>28378,19200=>28379,19201=>28380,19202=>28381,19203=>28382,19204=>28383,19205=>28384,19206=>28385,19207=>28386,19208=>28387,19209=>28388,19210=>28389,19211=>28390,19212=>28391,19213=>28392,19214=>28393,19215=>28394,19216=>28395,19217=>28396,19218=>28397,19219=>28398,19220=>28399,19221=>28400,19222=>28401,19223=>28402,19224=>28403,19225=>28404,19226=>28405,19227=>28406,19228=>28407,19229=>28408,19230=>28409,19231=>28410,19232=>28411,19233=>28412,19234=>28413,19235=>28414,19236=>28415,19237=>28416,19238=>28417,19239=>28418,19240=>28419,19241=>28420,19242=>28421,19243=>28422,19244=>28423,19245=>28424,19246=>28425,19247=>28426,19248=>28427,19249=>28428,19250=>28429,19251=>28430,19252=>28431,19253=>28432,19254=>28433,19255=>28434,19256=>28435,19257=>28436,19258=>28437,19259=>28438,19260=>28439,19261=>28440,19262=>28441,19263=>28442,19264=>28443,19265=>28444,19266=>28445,19267=>28446,19268=>28447,19269=>28448,19270=>28449,19271=>28450,19272=>28451,19273=>28452,19274=>28453,19275=>28454,19276=>28455,19277=>28456,19278=>28457,19279=>28458,19280=>28459,19281=>28460,19282=>28461,19283=>28462,19284=>28463,19285=>28464,19286=>28465,19287=>28466,19288=>28467,19289=>28468,19290=>28469,19291=>28470,19292=>28471,19293=>28472,19294=>28473,19295=>28474,19296=>28475,19297=>28476,19298=>28477,19299=>28478,19300=>28479,19301=>28480,19302=>28481,19303=>28482,19304=>28483,19305=>28484,19306=>28485,19307=>28486,19308=>28487,19309=>28488,19310=>28489,19311=>28490,19312=>28491,19313=>28492,19314=>28493,19315=>28494,19316=>28495,19317=>28496,19318=>28497,19319=>28498,19320=>28499,19321=>28500,19322=>28501,19323=>28502,19324=>28503,19325=>28504,19326=>28505,19327=>28506,19328=>28507,19329=>28508,19330=>28509,19331=>28510,19332=>28511,19333=>28512,19334=>28513,19335=>28514,19336=>28515,19337=>28516,19338=>28517,19339=>28518,19340=>28519,19341=>28520,19342=>28521,19343=>28522,19344=>28523,19345=>28524,19346=>28525,19347=>28526,19348=>28527,19349=>28528,19350=>28529,19351=>28530,19352=>28531,19353=>28532,19354=>28533,19355=>28534,19356=>28535,19357=>28536,19358=>28537,19359=>28538,19360=>28539,19361=>28540,19362=>28541,19363=>28542,19364=>28543,19365=>28544,19366=>28545,19367=>28546,19368=>28547,19369=>28548,19370=>28549,19371=>28550,19372=>28551,19373=>28552,19374=>28553,19375=>28554,19376=>28555,19377=>28556,19378=>28557,19379=>28558,19380=>28559,19381=>28560,19382=>28561,19383=>28562,19384=>28563,19385=>28564,19386=>28565,19387=>28566,19388=>28567,19389=>28568,19390=>28569,19391=>28570,19392=>28571,19393=>28572,19394=>28573,19395=>28574,19396=>28575,19397=>28576,19398=>28577,19399=>28578,19400=>28579,19401=>28580,19402=>28581,19403=>28582,19404=>28583,19405=>28584,19406=>28585,19407=>28586,19408=>28587,19409=>28588,19410=>28589,19411=>28590,19412=>28591,19413=>28592,19414=>28593,19415=>28594,19416=>28595,19417=>28596,19418=>28597,19419=>28598,19420=>28599,19421=>28600,19422=>28601,19423=>28602,19424=>28603,19425=>28604,19426=>28605,19427=>28606,19428=>28607,19429=>28608,19430=>28609,19431=>28610,19432=>28611,19433=>28612,19434=>28613,19435=>28614,19436=>28615,19437=>28616,19438=>28617,19439=>28618,19440=>28619,19441=>28620,19442=>28621,19443=>28622,19444=>28623,19445=>28624,19446=>28625,19447=>28626,19448=>28627,19449=>28628,19450=>28629,19451=>28630,19452=>28631,19453=>28632,19454=>28633,19455=>28634,19456=>28635,19457=>28636,19458=>28637,19459=>28638,19460=>28639,19461=>28640,19462=>28641,19463=>28642,19464=>28643,19465=>28644,19466=>28645,19467=>28646,19468=>28647,19469=>28648,19470=>28649,19471=>28650,19472=>28651,19473=>28652,19474=>28653,19475=>28654,19476=>28655,19477=>28656,19478=>28657,19479=>28658,19480=>28659,19481=>28660,19482=>28661,19483=>28662,19484=>28663,19485=>28664,19486=>28665,19487=>28666,19488=>28667,19489=>28668,19490=>28669,19491=>28670,19492=>28671,19493=>28672,19494=>28673,19495=>28674,19496=>28675,19497=>28676,19498=>28677,19499=>28678,19500=>28679,19501=>28680,19502=>28681,19503=>28682,19504=>28683,19505=>28684,19506=>28685,19507=>28686,19508=>28687,19509=>28688,19510=>28689,19511=>28690,19512=>28691,19513=>28692,19514=>28693,19515=>28694,19516=>28695,19517=>28696,19518=>28697,19519=>28698,19520=>28699,19521=>28700,19522=>28701,19523=>28702,19524=>28703,19525=>28704,19526=>28705,19527=>28706,19528=>28707,19529=>28708,19530=>28709,19531=>28710,19532=>28711,19533=>28712,19534=>28713,19535=>28714,19536=>28715,19537=>28716,19538=>28717,19539=>28718,19540=>28719,19541=>28720,19542=>28721,19543=>28722,19544=>28723,19545=>28724,19546=>28725,19547=>28726,19548=>28727,19549=>28728,19550=>28729,19551=>28730,19552=>28731,19553=>28732,19554=>28733,19555=>28734,19556=>28735,19557=>28736,19558=>28737,19559=>28738,19560=>28739,19561=>28740,19562=>28741,19563=>28742,19564=>28743,19565=>28744,19566=>28745,19567=>28746,19568=>28747,19569=>28748,19570=>28749,19571=>28750,19572=>28751,19573=>28752,19574=>28753,19576=>28754,19577=>28755,19578=>28756,19579=>28757,19580=>28758,19581=>28759,19582=>28760,19583=>28761,19584=>28762,19585=>28763,19586=>28764,19587=>28765,19588=>28766,19589=>28767,19590=>28768,19591=>28769,19592=>28770,19593=>28771,19594=>28772,19595=>28773,19596=>28774,19597=>28775,19598=>28776,19599=>28777,19600=>28778,19601=>28779,19602=>28780,19603=>28781,19604=>28782,19605=>28783,19606=>28784,19607=>28785,19608=>28786,19609=>28787,19610=>28788,19611=>28789,19612=>28790,19613=>28791,19614=>28792,19620=>28793,19621=>28794,19622=>28795,19623=>28796,19624=>28797,19625=>28798,19626=>28799,19627=>28800,19628=>28801,19629=>28802,19630=>28803,19631=>28804,19632=>28805,19633=>28806,19634=>28807,19635=>28808,19636=>28809,19637=>28810,19638=>28811,19639=>28812,19640=>28813,19641=>28814,19642=>28815,19643=>28816,19644=>28817,19645=>28818,19646=>28819,19647=>28820,19648=>28821,19649=>28822,19650=>28823,19651=>28824,19652=>28825,19653=>28826,19654=>28827,19655=>28828,19656=>28829,19657=>28830,19658=>28831,19659=>28832,19660=>28833,19661=>28834,19662=>28835,19663=>28836,19664=>28837,19665=>28838,19666=>28839,19667=>28840,19668=>28841,19669=>28842,19670=>28843,19671=>28844,19672=>28845,19673=>28846,19674=>28847,19675=>28848,19676=>28849,19677=>28850,19678=>28851,19679=>28852,19680=>28853,19681=>28854,19682=>28855,19683=>28856,19684=>28857,19685=>28858,19686=>28859,19687=>28860,19688=>28861,19689=>28862,19690=>28863,19691=>28864,19692=>28865,19693=>28866,19694=>28867,19695=>28868,19696=>28869,19697=>28870,19698=>28871,19699=>28872,19700=>28873,19701=>28874,19702=>28875,19703=>28876,19704=>28877,19705=>28878,19706=>28879,19707=>28880,19708=>28881,19709=>28882,19710=>28883,19711=>28884,19712=>28885,19713=>28886,19714=>28887,19715=>28888,19716=>28889,19717=>28890,19718=>28891,19719=>28892,19720=>28893,19721=>28894,19722=>28895,19723=>28896,19724=>28897,19725=>28898,19726=>28899,19727=>28900,19728=>28901,19729=>28902,19730=>28903,19738=>28904,19739=>28905,19740=>28906,19741=>28907,19742=>28908,19743=>28909,19744=>28910,19745=>28911,19746=>28912,19747=>28913,19748=>28914,19749=>28915,19750=>28916,19751=>28917,19752=>28918,19753=>28919,19754=>28920,19755=>28921,19756=>28922,19757=>28923,19758=>28924,19759=>28925,19760=>28926,19761=>28927,19762=>28928,19763=>28929,19764=>28930,19765=>28931,19766=>28932,19767=>28933,19768=>28934,19769=>28935,19770=>28936,19771=>28937,19772=>28938,19773=>28939,19774=>28940,19775=>28941,19776=>28942,19777=>28943,19778=>28944,19779=>28945,19780=>28946,19781=>28947,19782=>28948,19783=>28949,19784=>28950,19785=>28951,19786=>28952,19787=>28953,19788=>28954,19789=>28955,19790=>28956,19791=>28957,19792=>28958,19793=>28959,19794=>28960,19795=>28961,19796=>28962,19797=>28963,19798=>28964,19799=>28965,19800=>28966,19801=>28967,19802=>28968,19803=>28969,19804=>28970,19805=>28971,19806=>28972,19807=>28973,19808=>28974,19809=>28975,19810=>28976,19811=>28977,19812=>28978,19813=>28979,19814=>28980,19815=>28981,19816=>28982,19817=>28983,19818=>28984,19819=>28985,19820=>28986,19821=>28987,19822=>28988,19823=>28989,19824=>28990,19825=>28991,19826=>28992,19827=>28993,19828=>28994,19829=>28995,19830=>28996,19831=>28997,19832=>28998,19833=>28999,19834=>29000,19835=>29001,19836=>29002,19837=>29003,19838=>29004,19839=>29005,19840=>29006,19841=>29007,19842=>29008,19843=>29009,19844=>29010,19845=>29011,19846=>29012,19847=>29013,19848=>29014,19849=>29015,19850=>29016,19851=>29017,19852=>29018,19853=>29019,19854=>29020,19855=>29021,19856=>29022,19857=>29023,19858=>29024,19859=>29025,19860=>29026,19861=>29027,19862=>29028,19863=>29029,19864=>29030,19865=>29031,19866=>29032,19867=>29033,19868=>29034,19869=>29035,19870=>29036,19871=>29037,19872=>29038,19873=>29039,19874=>29040,19875=>29041,19876=>29042,19877=>29043,19878=>29044,19879=>29045,19880=>29046,19881=>29047,19882=>29048,19883=>29049,19884=>29050,19885=>29051,19887=>29052,19888=>29053,19889=>29054,19890=>29055,19891=>29056,19892=>29057,19893=>29058,40960=>29064,40961=>29065,40962=>29066,40963=>29067,40964=>29068,40965=>29069,40966=>29070,40967=>29071,40968=>29072,40969=>29073,40970=>29074,40971=>29075,40972=>29076,40973=>29077,40974=>29078,40975=>29079,40976=>29080,40977=>29081,40978=>29082,40979=>29083,40980=>29084,40981=>29085,40982=>29086,40983=>29087,40984=>29088,40985=>29089,40986=>29090,40987=>29091,40988=>29092,40989=>29093,40990=>29094,40991=>29095,40992=>29096,40993=>29097,40994=>29098,40995=>29099,40996=>29100,40997=>29101,40998=>29102,40999=>29103,41000=>29104,41001=>29105,41002=>29106,41003=>29107,41004=>29108,41005=>29109,41006=>29110,41007=>29111,41008=>29112,41009=>29113,41010=>29114,41011=>29115,41012=>29116,41013=>29117,41014=>29118,41015=>29119,41016=>29120,41017=>29121,41018=>29122,41019=>29123,41020=>29124,41021=>29125,41022=>29126,41023=>29127,41024=>29128,41025=>29129,41026=>29130,41027=>29131,41028=>29132,41029=>29133,41030=>29134,41031=>29135,41032=>29136,41033=>29137,41034=>29138,41035=>29139,41036=>29140,41037=>29141,41038=>29142,41039=>29143,41040=>29144,41041=>29145,41042=>29146,41043=>29147,41044=>29148,41045=>29149,41046=>29150,41047=>29151,41048=>29152,41049=>29153,41050=>29154,41051=>29155,41052=>29156,41053=>29157,41054=>29158,41055=>29159,41056=>29160,41057=>29161,41058=>29162,41059=>29163,41060=>29164,41061=>29165,41062=>29166,41063=>29167,41064=>29168,41065=>29169,41066=>29170,41067=>29171,41068=>29172,41069=>29173,41070=>29174,41071=>29175,41072=>29176,41073=>29177,41074=>29178,41075=>29179,41076=>29180,41077=>29181,41078=>29182,41079=>29183,41080=>29184,41081=>29185,41082=>29186,41083=>29187,41084=>29188,41085=>29189,41086=>29190,41087=>29191,41088=>29192,41089=>29193,41090=>29194,41091=>29195,41092=>29196,41093=>29197,41094=>29198,41095=>29199,41096=>29200,41097=>29201,41098=>29202,41099=>29203,41100=>29204,41101=>29205,41102=>29206,41103=>29207,41104=>29208,41105=>29209,41106=>29210,41107=>29211,41108=>29212,41109=>29213,41110=>29214,41111=>29215,41112=>29216,41113=>29217,41114=>29218,41115=>29219,41116=>29220,41117=>29221,41118=>29222,41119=>29223,41120=>29224,41121=>29225,41122=>29226,41123=>29227,41124=>29228,41125=>29229,41126=>29230,41127=>29231,41128=>29232,41129=>29233,41130=>29234,41131=>29235,41132=>29236,41133=>29237,41134=>29238,41135=>29239,41136=>29240,41137=>29241,41138=>29242,41139=>29243,41140=>29244,41141=>29245,41142=>29246,41143=>29247,41144=>29248,41145=>29249,41146=>29250,41147=>29251,41148=>29252,41149=>29253,41150=>29254,41151=>29255,41152=>29256,41153=>29257,41154=>29258,41155=>29259,41156=>29260,41157=>29261,41158=>29262,41159=>29263,41160=>29264,41161=>29265,41162=>29266,41163=>29267,41164=>29268,41165=>29269,41166=>29270,41167=>29271,41168=>29272,41169=>29273,41170=>29274,41171=>29275,41172=>29276,41173=>29277,41174=>29278,41175=>29279,41176=>29280,41177=>29281,41178=>29282,41179=>29283,41180=>29284,41181=>29285,41182=>29286,41183=>29287,41184=>29288,41185=>29289,41186=>29290,41187=>29291,41188=>29292,41189=>29293,41190=>29294,41191=>29295,41192=>29296,41193=>29297,41194=>29298,41195=>29299,41196=>29300,41197=>29301,41198=>29302,41199=>29303,41200=>29304,41201=>29305,41202=>29306,41203=>29307,41204=>29308,41205=>29309,41206=>29310,41207=>29311,41208=>29312,41209=>29313,41210=>29314,41211=>29315,41212=>29316,41213=>29317,41214=>29318,41215=>29319,41216=>29320,41217=>29321,41218=>29322,41219=>29323,41220=>29324,41221=>29325,41222=>29326,41223=>29327,41224=>29328,41225=>29329,41226=>29330,41227=>29331,41228=>29332,41229=>29333,41230=>29334,41231=>29335,41232=>29336,41233=>29337,41234=>29338,41235=>29339,41236=>29340,41237=>29341,41238=>29342,41239=>29343,41240=>29344,41241=>29345,41242=>29346,41243=>29347,41244=>29348,41245=>29349,41246=>29350,41247=>29351,41248=>29352,41249=>29353,41250=>29354,41251=>29355,41252=>29356,41253=>29357,41254=>29358,41255=>29359,41256=>29360,41257=>29361,41258=>29362,41259=>29363,41260=>29364,41261=>29365,41262=>29366,41263=>29367,41264=>29368,41265=>29369,41266=>29370,41267=>29371,41268=>29372,41269=>29373,41270=>29374,41271=>29375,41272=>29376,41273=>29377,41274=>29378,41275=>29379,41276=>29380,41277=>29381,41278=>29382,41279=>29383,41280=>29384,41281=>29385,41282=>29386,41283=>29387,41284=>29388,41285=>29389,41286=>29390,41287=>29391,41288=>29392,41289=>29393,41290=>29394,41291=>29395,41292=>29396,41293=>29397,41294=>29398,41295=>29399,41296=>29400,41297=>29401,41298=>29402,41299=>29403,41300=>29404,41301=>29405,41302=>29406,41303=>29407,41304=>29408,41305=>29409,41306=>29410,41307=>29411,41308=>29412,41309=>29413,41310=>29414,41311=>29415,41312=>29416,41313=>29417,41314=>29418,41315=>29419,41316=>29420,41317=>29421,41318=>29422,41319=>29423,41320=>29424,41321=>29425,41322=>29426,41323=>29427,41324=>29428,41325=>29429,41326=>29430,41327=>29431,41328=>29432,41329=>29433,41330=>29434,41331=>29435,41332=>29436,41333=>29437,41334=>29438,41335=>29439,41336=>29440,41337=>29441,41338=>29442,41339=>29443,41340=>29444,41341=>29445,41342=>29446,41343=>29447,41344=>29448,41345=>29449,41346=>29450,41347=>29451,41348=>29452,41349=>29453,41350=>29454,41351=>29455,41352=>29456,41353=>29457,41354=>29458,41355=>29459,41356=>29460,41357=>29461,41358=>29462,41359=>29463,41360=>29464,41361=>29465,41362=>29466,41363=>29467,41364=>29468,41365=>29469,41366=>29470,41367=>29471,41368=>29472,41369=>29473,41370=>29474,41371=>29475,41372=>29476,41373=>29477,41374=>29478,41375=>29479,41376=>29480,41377=>29481,41378=>29482,41379=>29483,41380=>29484,41381=>29485,41382=>29486,41383=>29487,41384=>29488,41385=>29489,41386=>29490,41387=>29491,41388=>29492,41389=>29493,41390=>29494,41391=>29495,41392=>29496,41393=>29497,41394=>29498,41395=>29499,41396=>29500,41397=>29501,41398=>29502,41399=>29503,41400=>29504,41401=>29505,41402=>29506,41403=>29507,41404=>29508,41405=>29509,41406=>29510,41407=>29511,41408=>29512,41409=>29513,41410=>29514,41411=>29515,41412=>29516,41413=>29517,41414=>29518,41415=>29519,41416=>29520,41417=>29521,41418=>29522,41419=>29523,41420=>29524,41421=>29525,41422=>29526,41423=>29527,41424=>29528,41425=>29529,41426=>29530,41427=>29531,41428=>29532,41429=>29533,41430=>29534,41431=>29535,41432=>29536,41433=>29537,41434=>29538,41435=>29539,41436=>29540,41437=>29541,41438=>29542,41439=>29543,41440=>29544,41441=>29545,41442=>29546,41443=>29547,41444=>29548,41445=>29549,41446=>29550,41447=>29551,41448=>29552,41449=>29553,41450=>29554,41451=>29555,41452=>29556,41453=>29557,41454=>29558,41455=>29559,41456=>29560,41457=>29561,41458=>29562,41459=>29563,41460=>29564,41461=>29565,41462=>29566,41463=>29567,41464=>29568,41465=>29569,41466=>29570,41467=>29571,41468=>29572,41469=>29573,41470=>29574,41471=>29575,41472=>29576,41473=>29577,41474=>29578,41475=>29579,41476=>29580,41477=>29581,41478=>29582,41479=>29583,41480=>29584,41481=>29585,41482=>29586,41483=>29587,41484=>29588,41485=>29589,41486=>29590,41487=>29591,41488=>29592,41489=>29593,41490=>29594,41491=>29595,41492=>29596,41493=>29597,41494=>29598,41495=>29599,41496=>29600,41497=>29601,41498=>29602,41499=>29603,41500=>29604,41501=>29605,41502=>29606,41503=>29607,41504=>29608,41505=>29609,41506=>29610,41507=>29611,41508=>29612,41509=>29613,41510=>29614,41511=>29615,41512=>29616,41513=>29617,41514=>29618,41515=>29619,41516=>29620,41517=>29621,41518=>29622,41519=>29623,41520=>29624,41521=>29625,41522=>29626,41523=>29627,41524=>29628,41525=>29629,41526=>29630,41527=>29631,41528=>29632,41529=>29633,41530=>29634,41531=>29635,41532=>29636,41533=>29637,41534=>29638,41535=>29639,41536=>29640,41537=>29641,41538=>29642,41539=>29643,41540=>29644,41541=>29645,41542=>29646,41543=>29647,41544=>29648,41545=>29649,41546=>29650,41547=>29651,41548=>29652,41549=>29653,41550=>29654,41551=>29655,41552=>29656,41553=>29657,41554=>29658,41555=>29659,41556=>29660,41557=>29661,41558=>29662,41559=>29663,41560=>29664,41561=>29665,41562=>29666,41563=>29667,41564=>29668,41565=>29669,41566=>29670,41567=>29671,41568=>29672,41569=>29673,41570=>29674,41571=>29675,41572=>29676,41573=>29677,41574=>29678,41575=>29679,41576=>29680,41577=>29681,41578=>29682,41579=>29683,41580=>29684,41581=>29685,41582=>29686,41583=>29687,41584=>29688,41585=>29689,41586=>29690,41587=>29691,41588=>29692,41589=>29693,41590=>29694,41591=>29695,41592=>29696,41593=>29697,41594=>29698,41595=>29699,41596=>29700,41597=>29701,41598=>29702,41599=>29703,41600=>29704,41601=>29705,41602=>29706,41603=>29707,41604=>29708,41605=>29709,41606=>29710,41607=>29711,41608=>29712,41609=>29713,41610=>29714,41611=>29715,41612=>29716,41613=>29717,41614=>29718,41615=>29719,41616=>29720,41617=>29721,41618=>29722,41619=>29723,41620=>29724,41621=>29725,41622=>29726,41623=>29727,41624=>29728,41625=>29729,41626=>29730,41627=>29731,41628=>29732,41629=>29733,41630=>29734,41631=>29735,41632=>29736,41633=>29737,41634=>29738,41635=>29739,41636=>29740,41637=>29741,41638=>29742,41639=>29743,41640=>29744,41641=>29745,41642=>29746,41643=>29747,41644=>29748,41645=>29749,41646=>29750,41647=>29751,41648=>29752,41649=>29753,41650=>29754,41651=>29755,41652=>29756,41653=>29757,41654=>29758,41655=>29759,41656=>29760,41657=>29761,41658=>29762,41659=>29763,41660=>29764,41661=>29765,41662=>29766,41663=>29767,41664=>29768,41665=>29769,41666=>29770,41667=>29771,41668=>29772,41669=>29773,41670=>29774,41671=>29775,41672=>29776,41673=>29777,41674=>29778,41675=>29779,41676=>29780,41677=>29781,41678=>29782,41679=>29783,41680=>29784,41681=>29785,41682=>29786,41683=>29787,41684=>29788,41685=>29789,41686=>29790,41687=>29791,41688=>29792,41689=>29793,41690=>29794,41691=>29795,41692=>29796,41693=>29797,41694=>29798,41695=>29799,41696=>29800,41697=>29801,41698=>29802,41699=>29803,41700=>29804,41701=>29805,41702=>29806,41703=>29807,41704=>29808,41705=>29809,41706=>29810,41707=>29811,41708=>29812,41709=>29813,41710=>29814,41711=>29815,41712=>29816,41713=>29817,41714=>29818,41715=>29819,41716=>29820,41717=>29821,41718=>29822,41719=>29823,41720=>29824,41721=>29825,41722=>29826,41723=>29827,41724=>29828,41725=>29829,41726=>29830,41727=>29831,41728=>29832,41729=>29833,41730=>29834,41731=>29835,41732=>29836,41733=>29837,41734=>29838,41735=>29839,41736=>29840,41737=>29841,41738=>29842,41739=>29843,41740=>29844,41741=>29845,41742=>29846,41743=>29847,41744=>29848,41745=>29849,41746=>29850,41747=>29851,41748=>29852,41749=>29853,41750=>29854,41751=>29855,41752=>29856,41753=>29857,41754=>29858,41755=>29859,41756=>29860,41757=>29861,41758=>29862,41759=>29863,41760=>29864,41761=>29865,41762=>29866,41763=>29867,41764=>29868,41765=>29869,41766=>29870,41767=>29871,41768=>29872,41769=>29873,41770=>29874,41771=>29875,41772=>29876,41773=>29877,41774=>29878,41775=>29879,41776=>29880,41777=>29881,41778=>29882,41779=>29883,41780=>29884,41781=>29885,41782=>29886,41783=>29887,41784=>29888,41785=>29889,41786=>29890,41787=>29891,41788=>29892,41789=>29893,41790=>29894,41791=>29895,41792=>29896,41793=>29897,41794=>29898,41795=>29899,41796=>29900,41797=>29901,41798=>29902,41799=>29903,41800=>29904,41801=>29905,41802=>29906,41803=>29907,41804=>29908,41805=>29909,41806=>29910,41807=>29911,41808=>29912,41809=>29913,41810=>29914,41811=>29915,41812=>29916,41813=>29917,41814=>29918,41815=>29919,41816=>29920,41817=>29921,41818=>29922,41819=>29923,41820=>29924,41821=>29925,41822=>29926,41823=>29927,41824=>29928,41825=>29929,41826=>29930,41827=>29931,41828=>29932,41829=>29933,41830=>29934,41831=>29935,41832=>29936,41833=>29937,41834=>29938,41835=>29939,41836=>29940,41837=>29941,41838=>29942,41839=>29943,41840=>29944,41841=>29945,41842=>29946,41843=>29947,41844=>29948,41845=>29949,41846=>29950,41847=>29951,41848=>29952,41849=>29953,41850=>29954,41851=>29955,41852=>29956,41853=>29957,41854=>29958,41855=>29959,41856=>29960,41857=>29961,41858=>29962,41859=>29963,41860=>29964,41861=>29965,41862=>29966,41863=>29967,41864=>29968,41865=>29969,41866=>29970,41867=>29971,41868=>29972,41869=>29973,41870=>29974,41871=>29975,41872=>29976,41873=>29977,41874=>29978,41875=>29979,41876=>29980,41877=>29981,41878=>29982,41879=>29983,41880=>29984,41881=>29985,41882=>29986,41883=>29987,41884=>29988,41885=>29989,41886=>29990,41887=>29991,41888=>29992,41889=>29993,41890=>29994,41891=>29995,41892=>29996,41893=>29997,41894=>29998,41895=>29999,41896=>30000,41897=>30001,41898=>30002,41899=>30003,41900=>30004,41901=>30005,41902=>30006,41903=>30007,41904=>30008,41905=>30009,41906=>30010,41907=>30011,41908=>30012,41909=>30013,41910=>30014,41911=>30015,41912=>30016,41913=>30017,41914=>30018,41915=>30019,41916=>30020,41917=>30021,41918=>30022,41919=>30023,41920=>30024,41921=>30025,41922=>30026,41923=>30027,41924=>30028,41925=>30029,41926=>30030,41927=>30031,41928=>30032,41929=>30033,41930=>30034,41931=>30035,41932=>30036,41933=>30037,41934=>30038,41935=>30039,41936=>30040,41937=>30041,41938=>30042,41939=>30043,41940=>30044,41941=>30045,41942=>30046,41943=>30047,41944=>30048,41945=>30049,41946=>30050,41947=>30051,41948=>30052,41949=>30053,41950=>30054,41951=>30055,41952=>30056,41953=>30057,41954=>30058,41955=>30059,41956=>30060,41957=>30061,41958=>30062,41959=>30063,41960=>30064,41961=>30065,41962=>30066,41963=>30067,41964=>30068,41965=>30069,41966=>30070,41967=>30071,41968=>30072,41969=>30073,41970=>30074,41971=>30075,41972=>30076,41973=>30077,41974=>30078,41975=>30079,41976=>30080,41977=>30081,41978=>30082,41979=>30083,41980=>30084,41981=>30085,41982=>30086,41983=>30087,41984=>30088,41985=>30089,41986=>30090,41987=>30091,41988=>30092,41989=>30093,41990=>30094,41991=>30095,41992=>30096,41993=>30097,41994=>30098,41995=>30099,41996=>30100,41997=>30101,41998=>30102,41999=>30103,42000=>30104,42001=>30105,42002=>30106,42003=>30107,42004=>30108,42005=>30109,42006=>30110,42007=>30111,42008=>30112,42009=>30113,42010=>30114,42011=>30115,42012=>30116,42013=>30117,42014=>30118,42015=>30119,42016=>30120,42017=>30121,42018=>30122,42019=>30123,42020=>30124,42021=>30125,42022=>30126,42023=>30127,42024=>30128,42025=>30129,42026=>30130,42027=>30131,42028=>30132,42029=>30133,42030=>30134,42031=>30135,42032=>30136,42033=>30137,42034=>30138,42035=>30139,42036=>30140,42037=>30141,42038=>30142,42039=>30143,42040=>30144,42041=>30145,42042=>30146,42043=>30147,42044=>30148,42045=>30149,42046=>30150,42047=>30151,42048=>30152,42049=>30153,42050=>30154,42051=>30155,42052=>30156,42053=>30157,42054=>30158,42055=>30159,42056=>30160,42057=>30161,42058=>30162,42059=>30163,42060=>30164,42061=>30165,42062=>30166,42063=>30167,42064=>30168,42065=>30169,42066=>30170,42067=>30171,42068=>30172,42069=>30173,42070=>30174,42071=>30175,42072=>30176,42073=>30177,42074=>30178,42075=>30179,42076=>30180,42077=>30181,42078=>30182,42079=>30183,42080=>30184,42081=>30185,42082=>30186,42083=>30187,42084=>30188,42085=>30189,42086=>30190,42087=>30191,42088=>30192,42089=>30193,42090=>30194,42091=>30195,42092=>30196,42093=>30197,42094=>30198,42095=>30199,42096=>30200,42097=>30201,42098=>30202,42099=>30203,42100=>30204,42101=>30205,42102=>30206,42103=>30207,42104=>30208,42105=>30209,42106=>30210,42107=>30211,42108=>30212,42109=>30213,42110=>30214,42111=>30215,42112=>30216,42113=>30217,42114=>30218,42115=>30219,42116=>30220,42117=>30221,42118=>30222,42119=>30223,42120=>30224,42121=>30225,42122=>30226,42123=>30227,42124=>30228,42128=>30229,42129=>30230,42130=>30231,42131=>30232,42132=>30233,42133=>30234,42134=>30235,42135=>30236,42136=>30237,42137=>30238,42138=>30239,42139=>30240,42140=>30241,42141=>30242,42142=>30243,42143=>30244,42144=>30245,42145=>30246,42146=>30247,42147=>30248,42148=>30249,42149=>30250,42150=>30251,42151=>30252,42152=>30253,42153=>30254,42154=>30255,42155=>30256,42156=>30257,42157=>30258,42158=>30259,42159=>30260,42160=>30261,42161=>30262,42162=>30263,42163=>30264,42164=>30265,42165=>30266,42166=>30267,42167=>30268,42168=>30269,42169=>30270,42170=>30271,42171=>30272,42172=>30273,42173=>30274,42174=>30275,42175=>30276,42176=>30277,42177=>30278,42178=>30279,42179=>30280,42180=>30281,42181=>30282,42182=>30283); +// --- EOF --- diff --git a/tcpdf/fonts/uni2cid_aj16.php b/tcpdf/fonts/uni2cid_aj16.php new file mode 100644 index 0000000..0c3c148 --- /dev/null +++ b/tcpdf/fonts/uni2cid_aj16.php @@ -0,0 +1,6 @@ +<?php +// unicode to cid conversion table is from +// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ +// cid2code.txt in aj16.tar.Z +$cidinfo['uni2cid'] = array(160=>1,32=>1,33=>2,34=>3,35=>4,36=>5,37=>6,38=>7,39=>8,40=>9,41=>10,42=>11,43=>12,44=>13,8209=>14,45=>14,46=>15,47=>16,48=>17,49=>18,50=>19,51=>20,52=>21,53=>22,54=>23,55=>24,56=>25,57=>26,58=>27,59=>28,60=>29,61=>30,62=>31,63=>32,64=>33,65=>34,66=>35,67=>36,68=>37,69=>38,70=>39,71=>40,72=>41,73=>42,74=>43,75=>44,76=>45,77=>46,78=>47,79=>48,80=>49,81=>50,82=>51,83=>52,84=>53,85=>54,86=>55,87=>56,88=>57,89=>58,90=>59,91=>60,165=>61,93=>62,94=>63,818=>64,95=>64,768=>65,96=>65,97=>66,98=>67,99=>68,100=>69,101=>70,102=>71,103=>72,104=>73,105=>74,106=>75,107=>76,108=>77,109=>78,110=>79,111=>80,112=>81,113=>82,114=>83,115=>84,116=>85,117=>86,118=>87,119=>88,120=>89,121=>90,122=>91,123=>92,166=>93,125=>94,732=>95,771=>95,700=>96,8217=>96,92=>97,699=>98,8216=>98,124=>99,126=>100,8764=>100,161=>101,162=>102,163=>103,8260=>104,402=>105,164=>107,8220=>108,171=>109,8249=>110,8250=>111,64257=>112,64258=>113,8210=>114,8211=>114,183=>117,8729=>117,8226=>119,8218=>120,8222=>121,8221=>122,187=>123,191=>126,769=>127,710=>128,770=>128,175=>129,772=>129,774=>130,775=>131,776=>132,730=>133,778=>133,184=>134,807=>134,779=>135,808=>136,780=>137,822=>138,8212=>138,198=>139,170=>140,321=>141,216=>142,338=>143,186=>144,230=>145,305=>146,322=>147,248=>148,339=>149,223=>150,173=>151,169=>152,172=>153,174=>154,178=>157,179=>158,181=>159,185=>160,188=>161,189=>162,190=>163,192=>164,193=>165,194=>166,195=>167,196=>168,197=>169,199=>170,200=>171,201=>172,202=>173,203=>174,204=>175,205=>176,206=>177,207=>178,208=>179,209=>180,210=>181,211=>182,212=>183,213=>184,214=>185,217=>187,218=>188,219=>189,220=>190,221=>191,222=>192,224=>193,225=>194,226=>195,227=>196,228=>197,229=>198,231=>199,232=>200,233=>201,234=>202,235=>203,236=>204,237=>205,238=>206,239=>207,240=>208,241=>209,242=>210,243=>211,244=>212,245=>213,246=>214,249=>216,250=>217,251=>218,252=>219,253=>220,254=>221,255=>222,352=>223,376=>224,381=>225,773=>226,8254=>226,353=>227,8482=>228,382=>229,8194=>231,65512=>323,65377=>327,65378=>328,65379=>329,65380=>330,65381=>331,65382=>332,65383=>333,65384=>334,65385=>335,65386=>336,65387=>337,65388=>338,65389=>339,65390=>340,65391=>341,65392=>342,65393=>343,65394=>344,65395=>345,65396=>346,65397=>347,65398=>348,65399=>349,65400=>350,65401=>351,65402=>352,65403=>353,65404=>354,65405=>355,65406=>356,65407=>357,65408=>358,65409=>359,65410=>360,65411=>361,65412=>362,65413=>363,65414=>364,65415=>365,65416=>366,65417=>367,65418=>368,65419=>369,65420=>370,65421=>371,65422=>372,65423=>373,65424=>374,65425=>375,65426=>376,65427=>377,65428=>378,65429=>379,65430=>380,65431=>381,65432=>382,65433=>383,65434=>384,65435=>385,65436=>386,65437=>387,65438=>388,65439=>389,8195=>633,12288=>633,12289=>634,12290=>635,65292=>636,65294=>637,12539=>638,65306=>639,65307=>640,65311=>641,65281=>642,12443=>643,12444=>644,180=>645,65344=>646,168=>647,65342=>648,65507=>649,65343=>650,12541=>651,12542=>652,12445=>653,12446=>654,12291=>655,20189=>656,12293=>657,12294=>658,12295=>659,12540=>660,8213=>661,8208=>662,65295=>663,65340=>664,12316=>665,65374=>665,8214=>666,65372=>667,8230=>668,8229=>669,65288=>674,65289=>675,12308=>676,12309=>677,65339=>678,65341=>679,65371=>680,65373=>681,12296=>682,12297=>683,12298=>684,12299=>685,12300=>686,12301=>687,12302=>688,12303=>689,12304=>690,12305=>691,65291=>692,8722=>693,65293=>693,177=>694,215=>695,247=>696,65309=>697,8800=>698,65308=>699,65310=>700,8806=>701,8807=>702,8734=>703,8756=>704,9794=>705,9792=>706,176=>707,8242=>708,8243=>709,8451=>710,65509=>711,65284=>712,65504=>713,65505=>714,65285=>715,65283=>716,65286=>717,65290=>718,65312=>719,167=>720,9734=>721,9733=>722,9675=>723,9679=>724,9678=>725,9671=>726,9670=>727,9633=>728,9632=>729,9651=>730,9650=>731,9661=>732,9660=>733,8251=>734,12306=>735,8594=>736,8592=>737,8593=>738,8595=>739,12307=>740,8712=>741,8715=>742,8838=>743,8839=>744,8834=>745,8835=>746,8746=>747,8745=>748,8743=>749,8744=>750,65506=>751,8658=>752,8660=>753,8704=>754,8707=>755,8736=>756,8869=>757,8978=>758,8706=>759,8711=>760,8801=>761,8786=>762,8810=>763,8811=>764,8730=>765,8765=>766,8733=>767,8757=>768,8747=>769,8748=>770,8491=>771,8240=>772,9839=>773,9837=>774,9834=>775,8224=>776,8225=>777,182=>778,9711=>779,65296=>780,65297=>781,65298=>782,65299=>783,65300=>784,65301=>785,65302=>786,65303=>787,65304=>788,65305=>789,65313=>790,65314=>791,65315=>792,65316=>793,65317=>794,65318=>795,65319=>796,65320=>797,65321=>798,65322=>799,65323=>800,65324=>801,65325=>802,65326=>803,65327=>804,65328=>805,65329=>806,65330=>807,65331=>808,65332=>809,65333=>810,65334=>811,65335=>812,65336=>813,65337=>814,65338=>815,65345=>816,65346=>817,65347=>818,65348=>819,65349=>820,65350=>821,65351=>822,65352=>823,65353=>824,65354=>825,65355=>826,65356=>827,65357=>828,65358=>829,65359=>830,65360=>831,65361=>832,65362=>833,65363=>834,65364=>835,65365=>836,65366=>837,65367=>838,65368=>839,65369=>840,65370=>841,12353=>842,12354=>843,12355=>844,12356=>845,12357=>846,12358=>847,12359=>848,12360=>849,12361=>850,12362=>851,12363=>852,12364=>853,12365=>854,12366=>855,12367=>856,12368=>857,12369=>858,12370=>859,12371=>860,12372=>861,12373=>862,12374=>863,12375=>864,12376=>865,12377=>866,12378=>867,12379=>868,12380=>869,12381=>870,12382=>871,12383=>872,12384=>873,12385=>874,12386=>875,12387=>876,12388=>877,12389=>878,12390=>879,12391=>880,12392=>881,12393=>882,12394=>883,12395=>884,12396=>885,12397=>886,12398=>887,12399=>888,12400=>889,12401=>890,12402=>891,12403=>892,12404=>893,12405=>894,12406=>895,12407=>896,12408=>897,12409=>898,12410=>899,12411=>900,12412=>901,12413=>902,12414=>903,12415=>904,12416=>905,12417=>906,12418=>907,12419=>908,12420=>909,12421=>910,12422=>911,12423=>912,12424=>913,12425=>914,12426=>915,12427=>916,12428=>917,12429=>918,12430=>919,12431=>920,12432=>921,12433=>922,12434=>923,12435=>924,12449=>925,12450=>926,12451=>927,12452=>928,12453=>929,12454=>930,12455=>931,12456=>932,12457=>933,12458=>934,12459=>935,12460=>936,12461=>937,12462=>938,12463=>939,12464=>940,12465=>941,12466=>942,12467=>943,12468=>944,12469=>945,12470=>946,12471=>947,12472=>948,12473=>949,12474=>950,12475=>951,12476=>952,12477=>953,12478=>954,12479=>955,12480=>956,12481=>957,12482=>958,12483=>959,12484=>960,12485=>961,12486=>962,12487=>963,12488=>964,12489=>965,12490=>966,12491=>967,12492=>968,12493=>969,12494=>970,12495=>971,12496=>972,12497=>973,12498=>974,12499=>975,12500=>976,12501=>977,12502=>978,12503=>979,12504=>980,12505=>981,12506=>982,12507=>983,12508=>984,12509=>985,12510=>986,12511=>987,12512=>988,12513=>989,12514=>990,12515=>991,12516=>992,12517=>993,12518=>994,12519=>995,12520=>996,12521=>997,12522=>998,12523=>999,12524=>1000,12525=>1001,12526=>1002,12527=>1003,12528=>1004,12529=>1005,12530=>1006,12531=>1007,12532=>1008,12533=>1009,12534=>1010,913=>1011,914=>1012,915=>1013,916=>1014,917=>1015,918=>1016,919=>1017,920=>1018,921=>1019,922=>1020,923=>1021,924=>1022,925=>1023,926=>1024,927=>1025,928=>1026,929=>1027,931=>1028,932=>1029,933=>1030,934=>1031,935=>1032,936=>1033,937=>1034,945=>1035,946=>1036,947=>1037,948=>1038,949=>1039,950=>1040,951=>1041,952=>1042,953=>1043,954=>1044,955=>1045,956=>1046,957=>1047,958=>1048,959=>1049,960=>1050,961=>1051,963=>1052,964=>1053,965=>1054,966=>1055,967=>1056,968=>1057,969=>1058,1040=>1059,1041=>1060,1042=>1061,1043=>1062,1044=>1063,1045=>1064,1025=>1065,1046=>1066,1047=>1067,1048=>1068,1049=>1069,1050=>1070,1051=>1071,1052=>1072,1053=>1073,1054=>1074,1055=>1075,1056=>1076,1057=>1077,1058=>1078,1059=>1079,1060=>1080,1061=>1081,1062=>1082,1063=>1083,1064=>1084,1065=>1085,1066=>1086,1067=>1087,1068=>1088,1069=>1089,1070=>1090,1071=>1091,1072=>1092,1073=>1093,1074=>1094,1075=>1095,1076=>1096,1077=>1097,1105=>1098,1078=>1099,1079=>1100,1080=>1101,1081=>1102,1082=>1103,1083=>1104,1084=>1105,1085=>1106,1086=>1107,1087=>1108,1088=>1109,1089=>1110,1090=>1111,1091=>1112,1092=>1113,1093=>1114,1094=>1115,1095=>1116,1096=>1117,1097=>1118,1098=>1119,1099=>1120,1100=>1121,1101=>1122,1102=>1123,1103=>1124,20124=>1125,21782=>1126,23043=>1127,38463=>1128,21696=>1129,24859=>1130,25384=>1131,23030=>1132,36898=>1133,33909=>1134,33564=>1135,31312=>1136,24746=>1137,25569=>1138,28197=>1139,26093=>1140,33894=>1141,33446=>1142,39925=>1143,26771=>1144,22311=>1145,26017=>1146,25201=>1147,23451=>1148,22992=>1149,34427=>1150,39156=>1151,32098=>1152,32190=>1153,39822=>1154,25110=>1155,31903=>1156,34999=>1157,23433=>1158,24245=>1159,25353=>1160,26263=>1161,26696=>1162,38343=>1163,38797=>1164,26447=>1165,20197=>1166,20234=>1167,20301=>1168,20381=>1169,20553=>1170,22258=>1171,22839=>1172,22996=>1173,23041=>1174,23561=>1175,24799=>1176,24847=>1177,24944=>1178,26131=>1179,26885=>1180,28858=>1181,30031=>1182,30064=>1183,31227=>1184,32173=>1185,32239=>1186,32963=>1187,33806=>1188,12176=>1189,34915=>1189,35586=>1190,36949=>1191,36986=>1192,21307=>1193,20117=>1194,20133=>1195,22495=>1196,32946=>1197,37057=>1198,30959=>1199,12032=>1200,19968=>1200,22769=>1201,28322=>1202,36920=>1203,31282=>1204,33576=>1205,33419=>1206,39983=>1207,20801=>1208,21360=>1209,21693=>1210,21729=>1211,22240=>1212,23035=>1213,24341=>1214,39154=>1215,28139=>1216,32996=>1217,34093=>1218,38498=>1219,38512=>1220,38560=>1221,38907=>1222,21515=>1223,21491=>1224,23431=>1225,28879=>1226,12155=>1227,32701=>1227,36802=>1228,12204=>1229,38632=>1229,21359=>1230,40284=>1231,31418=>1232,19985=>1233,30867=>1234,12165=>1235,33276=>1235,28198=>1236,22040=>1237,21764=>1238,27421=>1239,34074=>1240,39995=>1241,23013=>1242,21417=>1243,28006=>1244,12128=>1245,29916=>1245,38287=>1246,22082=>1247,20113=>1248,36939=>1249,38642=>1250,33615=>1251,39180=>1252,21473=>1253,21942=>1254,23344=>1255,24433=>1256,26144=>1257,26355=>1258,26628=>1259,27704=>1260,27891=>1261,27945=>1262,29787=>1263,30408=>1264,31310=>1265,38964=>1266,33521=>1267,34907=>1268,35424=>1269,37613=>1270,28082=>1271,30123=>1272,30410=>1273,39365=>1274,24742=>1275,35585=>1276,36234=>1277,38322=>1278,27022=>1279,21421=>1280,20870=>1281,22290=>1282,22576=>1283,22852=>1284,23476=>1285,24310=>1286,24616=>1287,25513=>1288,25588=>1289,27839=>1290,28436=>1291,28814=>1292,28948=>1293,29017=>1294,29141=>1295,29503=>1296,32257=>1297,33398=>1298,33489=>1299,34199=>1300,36960=>1301,37467=>1302,40219=>1303,22633=>1304,26044=>1305,27738=>1306,29989=>1307,20985=>1308,22830=>1309,22885=>1310,24448=>1311,24540=>1312,25276=>1313,26106=>1314,27178=>1315,27431=>1316,27572=>1317,29579=>1318,32705=>1319,35158=>1320,40236=>1321,40206=>1322,12009=>1323,40644=>1323,23713=>1324,27798=>1325,33659=>1326,20740=>1327,23627=>1328,25014=>1329,33222=>1330,26742=>1331,29281=>1332,12036=>1333,20057=>1333,20474=>1334,21368=>1335,24681=>1336,28201=>1337,31311=>1338,12211=>1339,38899=>1339,19979=>1340,21270=>1341,20206=>1342,20309=>1343,20285=>1344,20385=>1345,20339=>1346,21152=>1347,21487=>1348,22025=>1349,22799=>1350,23233=>1351,23478=>1352,23521=>1353,31185=>1354,26247=>1355,26524=>1356,26550=>1357,27468=>1358,27827=>1359,12117=>1360,28779=>1360,29634=>1361,31117=>1362,12146=>1363,31166=>1363,31292=>1364,31623=>1365,33457=>1366,33499=>1367,33540=>1368,33655=>1369,33775=>1370,33747=>1371,34662=>1372,35506=>1373,22057=>1374,36008=>1375,36838=>1376,36942=>1377,38686=>1378,34442=>1379,20420=>1380,23784=>1381,25105=>1382,12123=>1383,29273=>1383,30011=>1384,33253=>1385,33469=>1386,34558=>1387,36032=>1388,38597=>1389,39187=>1390,39381=>1391,20171=>1392,20250=>1393,35299=>1394,22238=>1395,22602=>1396,22730=>1397,24315=>1398,24555=>1399,24618=>1400,24724=>1401,24674=>1402,25040=>1403,25106=>1404,25296=>1405,25913=>1406,39745=>1407,26214=>1408,26800=>1409,28023=>1410,28784=>1411,30028=>1412,30342=>1413,32117=>1414,33445=>1415,34809=>1416,38283=>1417,38542=>1418,12185=>1419,35997=>1419,20977=>1420,21182=>1421,22806=>1422,21683=>1423,23475=>1424,23830=>1425,24936=>1426,27010=>1427,28079=>1428,30861=>1429,33995=>1430,34903=>1431,35442=>1432,37799=>1433,39608=>1434,28012=>1435,39336=>1436,34521=>1437,22435=>1438,26623=>1439,34510=>1440,37390=>1441,21123=>1442,22151=>1443,21508=>1444,24275=>1445,25313=>1446,25785=>1447,26684=>1448,26680=>1449,27579=>1450,29554=>1451,30906=>1452,31339=>1453,35226=>1454,12179=>1455,35282=>1455,36203=>1456,36611=>1457,37101=>1458,38307=>1459,38548=>1460,12208=>1461,38761=>1461,23398=>1462,23731=>1463,27005=>1464,38989=>1465,38990=>1466,25499=>1467,31520=>1468,27179=>1469,27263=>1470,26806=>1471,39949=>1472,28511=>1473,21106=>1474,21917=>1475,24688=>1476,25324=>1477,27963=>1478,28167=>1479,28369=>1480,33883=>1481,35088=>1482,36676=>1483,19988=>1484,39993=>1485,21494=>1486,26907=>1487,27194=>1488,38788=>1489,26666=>1490,20828=>1491,31427=>1492,33970=>1493,37340=>1494,37772=>1495,22107=>1496,40232=>1497,26658=>1498,33541=>1499,33841=>1500,31909=>1501,21000=>1502,33477=>1503,12129=>1504,29926=>1504,20094=>1505,20355=>1506,20896=>1507,23506=>1508,21002=>1509,21208=>1510,21223=>1511,24059=>1512,21914=>1513,22570=>1514,23014=>1515,23436=>1516,23448=>1517,23515=>1518,12082=>1519,24178=>1519,24185=>1520,24739=>1521,24863=>1522,24931=>1523,25022=>1524,25563=>1525,25954=>1526,26577=>1527,26707=>1528,26874=>1529,27454=>1530,27475=>1531,27735=>1532,28450=>1533,28567=>1534,28485=>1535,29872=>1536,12130=>1537,29976=>1537,30435=>1538,30475=>1539,31487=>1540,31649=>1541,31777=>1542,32233=>1543,12152=>1544,32566=>1544,32752=>1545,32925=>1546,33382=>1547,33694=>1548,35251=>1549,35532=>1550,36011=>1551,36996=>1552,37969=>1553,38291=>1554,38289=>1555,38306=>1556,38501=>1557,38867=>1558,39208=>1559,33304=>1560,20024=>1561,21547=>1562,23736=>1563,24012=>1564,29609=>1565,30284=>1566,30524=>1567,23721=>1568,32747=>1569,36107=>1570,38593=>1571,38929=>1572,38996=>1573,39000=>1574,20225=>1575,20238=>1576,21361=>1577,21916=>1578,22120=>1579,22522=>1580,22855=>1581,23305=>1582,23492=>1583,23696=>1584,24076=>1585,24190=>1586,24524=>1587,25582=>1588,26426=>1589,26071=>1590,26082=>1591,26399=>1592,26827=>1593,26820=>1594,27231=>1595,24112=>1596,27589=>1597,27671=>1598,27773=>1599,30079=>1600,31048=>1601,23395=>1602,31232=>1603,32000=>1604,24509=>1605,35215=>1606,35352=>1607,36020=>1608,36215=>1609,36556=>1610,36637=>1611,39138=>1612,39438=>1613,12004=>1614,12225=>1614,39740=>1614,12018=>1615,20096=>1615,20605=>1616,20736=>1617,22931=>1618,23452=>1619,25135=>1620,25216=>1621,25836=>1622,27450=>1623,29344=>1624,30097=>1625,31047=>1626,32681=>1627,34811=>1628,35516=>1629,35696=>1630,25516=>1631,33738=>1632,38816=>1633,21513=>1634,21507=>1635,21931=>1636,26708=>1637,27224=>1638,35440=>1639,30759=>1640,26485=>1641,12233=>1642,40653=>1642,21364=>1643,23458=>1644,33050=>1645,34384=>1646,36870=>1647,19992=>1648,20037=>1649,20167=>1650,20241=>1651,21450=>1652,21560=>1653,23470=>1654,12088=>1655,24339=>1655,24613=>1656,25937=>1657,26429=>1658,27714=>1659,27762=>1660,27875=>1661,28792=>1662,29699=>1663,31350=>1664,31406=>1665,31496=>1666,32026=>1667,31998=>1668,32102=>1669,26087=>1670,12124=>1671,29275=>1671,21435=>1672,23621=>1673,24040=>1674,25298=>1675,25312=>1676,25369=>1677,28192=>1678,34394=>1679,35377=>1680,36317=>1681,37624=>1682,28417=>1683,31142=>1684,12226=>1685,39770=>1685,20136=>1686,20139=>1687,20140=>1688,20379=>1689,20384=>1690,20689=>1691,20807=>1692,31478=>1693,20849=>1694,20982=>1695,21332=>1696,21281=>1697,21375=>1698,21483=>1699,21932=>1700,22659=>1701,23777=>1702,24375=>1703,24394=>1704,24623=>1705,24656=>1706,24685=>1707,25375=>1708,25945=>1709,27211=>1710,27841=>1711,29378=>1712,29421=>1713,30703=>1714,33016=>1715,33029=>1716,33288=>1717,34126=>1718,37111=>1719,37857=>1720,38911=>1721,39255=>1722,39514=>1723,20208=>1724,20957=>1725,23597=>1726,26241=>1727,26989=>1728,23616=>1729,26354=>1730,26997=>1731,12127=>1732,29577=>1732,26704=>1733,31873=>1734,20677=>1735,21220=>1736,22343=>1737,12081=>1738,24062=>1738,37670=>1739,12100=>1740,26020=>1740,27427=>1741,27453=>1742,29748=>1743,31105=>1744,31165=>1745,31563=>1746,32202=>1747,33465=>1748,33740=>1749,34943=>1750,35167=>1751,35641=>1752,36817=>1753,12198=>1754,37329=>1754,21535=>1755,37504=>1756,20061=>1757,20534=>1758,21477=>1759,21306=>1760,29399=>1761,29590=>1762,30697=>1763,33510=>1764,36527=>1765,39366=>1766,39368=>1767,39378=>1768,20855=>1769,24858=>1770,34398=>1771,21936=>1772,31354=>1773,20598=>1774,23507=>1775,36935=>1776,38533=>1777,20018=>1778,27355=>1779,37351=>1780,23633=>1781,23624=>1782,25496=>1783,31391=>1784,27795=>1785,38772=>1786,36705=>1787,31402=>1788,29066=>1789,38536=>1790,31874=>1791,26647=>1792,32368=>1793,26705=>1794,37740=>1795,21234=>1796,21531=>1797,34219=>1798,35347=>1799,32676=>1800,36557=>1801,37089=>1802,21350=>1803,34952=>1804,31041=>1805,20418=>1806,20670=>1807,21009=>1808,20804=>1809,21843=>1810,22317=>1811,29674=>1812,22411=>1813,22865=>1814,24418=>1815,24452=>1816,24693=>1817,24950=>1818,24935=>1819,25001=>1820,25522=>1821,25658=>1822,25964=>1823,26223=>1824,26690=>1825,28179=>1826,30054=>1827,31293=>1828,31995=>1829,32076=>1830,32153=>1831,32331=>1832,32619=>1833,33550=>1834,33610=>1835,34509=>1836,35336=>1837,35427=>1838,35686=>1839,36605=>1840,38938=>1841,40335=>1842,33464=>1843,36814=>1844,39912=>1845,21127=>1846,25119=>1847,25731=>1848,28608=>1849,38553=>1850,26689=>1851,20625=>1852,12107=>1853,27424=>1853,27770=>1854,28500=>1855,12147=>1856,31348=>1856,32080=>1857,12174=>1858,34880=>1858,35363=>1859,12105=>1860,26376=>1860,20214=>1861,20537=>1862,20518=>1863,20581=>1864,20860=>1865,21048=>1866,21091=>1867,21927=>1868,22287=>1869,22533=>1870,23244=>1871,24314=>1872,25010=>1873,25080=>1874,25331=>1875,25458=>1876,26908=>1877,27177=>1878,29309=>1879,12125=>1880,29356=>1880,29486=>1881,30740=>1882,30831=>1883,32121=>1884,30476=>1885,32937=>1886,12178=>1887,35211=>1887,35609=>1888,36066=>1889,36562=>1890,36963=>1891,37749=>1892,38522=>1893,38997=>1894,39443=>1895,40568=>1896,20803=>1897,21407=>1898,21427=>1899,24187=>1900,24358=>1901,28187=>1902,28304=>1903,12126=>1904,29572=>1904,29694=>1905,32067=>1906,33335=>1907,12180=>1908,35328=>1908,35578=>1909,38480=>1910,20046=>1911,20491=>1912,21476=>1913,21628=>1914,22266=>1915,22993=>1916,23396=>1917,12080=>1918,24049=>1918,24235=>1919,24359=>1920,12094=>1921,25144=>1921,25925=>1922,26543=>1923,28246=>1924,29392=>1925,31946=>1926,34996=>1927,32929=>1928,32993=>1929,33776=>1930,11969=>1931,34382=>1931,35463=>1932,36328=>1933,37431=>1934,38599=>1935,39015=>1936,12238=>1937,40723=>1937,20116=>1938,20114=>1939,20237=>1940,21320=>1941,21577=>1942,21566=>1943,23087=>1944,24460=>1945,24481=>1946,24735=>1947,26791=>1948,27278=>1949,29786=>1950,30849=>1951,35486=>1952,35492=>1953,35703=>1954,37264=>1955,20062=>1956,39881=>1957,20132=>1958,20348=>1959,20399=>1960,20505=>1961,20502=>1962,20809=>1963,20844=>1964,21151=>1965,21177=>1966,21246=>1967,21402=>1968,12061=>1969,21475=>1969,21521=>1970,21518=>1971,21897=>1972,22353=>1973,22434=>1974,22909=>1975,23380=>1976,23389=>1977,23439=>1978,12079=>1979,24037=>1979,24039=>1980,24055=>1981,24184=>1982,24195=>1983,24218=>1984,24247=>1985,24344=>1986,24658=>1987,24908=>1988,25239=>1989,25304=>1990,25511=>1991,25915=>1992,26114=>1993,26179=>1994,26356=>1995,26477=>1996,26657=>1997,26775=>1998,27083=>1999,27743=>2000,27946=>2001,28009=>2002,28207=>2003,28317=>2004,30002=>2005,30343=>2006,30828=>2007,31295=>2008,31968=>2009,32005=>2010,32024=>2011,32094=>2012,32177=>2013,32789=>2014,32771=>2015,32943=>2016,32945=>2017,33108=>2018,33167=>2019,33322=>2020,33618=>2021,12175=>2022,34892=>2022,34913=>2023,35611=>2024,36002=>2025,36092=>2026,37066=>2027,37237=>2028,37489=>2029,30783=>2030,37628=>2031,38308=>2032,38477=>2033,38917=>2034,12217=>2035,39321=>2035,12220=>2036,39640=>2036,40251=>2037,21083=>2038,21163=>2039,21495=>2040,21512=>2041,22741=>2042,25335=>2043,28640=>2044,35946=>2045,36703=>2046,40633=>2047,20811=>2048,21051=>2049,21578=>2050,22269=>2051,31296=>2052,37239=>2053,40288=>2054,12234=>2055,40658=>2055,29508=>2056,28425=>2057,33136=>2058,29969=>2059,24573=>2060,24794=>2061,12219=>2062,39592=>2062,29403=>2063,36796=>2064,27492=>2065,38915=>2066,20170=>2067,22256=>2068,22372=>2069,22718=>2070,23130=>2071,24680=>2072,25031=>2073,26127=>2074,26118=>2075,26681=>2076,26801=>2077,28151=>2078,30165=>2079,32058=>2080,12169=>2081,33390=>2081,39746=>2082,20123=>2083,20304=>2084,21449=>2085,21766=>2086,23919=>2087,24038=>2088,24046=>2089,26619=>2090,27801=>2091,29811=>2092,30722=>2093,35408=>2094,37782=>2095,35039=>2096,22352=>2097,24231=>2098,25387=>2099,20661=>2100,20652=>2101,20877=>2102,26368=>2103,21705=>2104,22622=>2105,22971=>2106,23472=>2107,24425=>2108,25165=>2109,25505=>2110,26685=>2111,27507=>2112,28168=>2113,28797=>2114,37319=>2115,29312=>2116,30741=>2117,30758=>2118,31085=>2119,25998=>2120,32048=>2121,33756=>2122,35009=>2123,36617=>2124,38555=>2125,21092=>2126,22312=>2127,26448=>2128,32618=>2129,36001=>2130,20916=>2131,22338=>2132,38442=>2133,22586=>2134,27018=>2135,32948=>2136,21682=>2137,23822=>2138,22524=>2139,30869=>2140,40442=>2141,20316=>2142,21066=>2143,21643=>2144,25662=>2145,26152=>2146,26388=>2147,26613=>2148,31364=>2149,31574=>2150,32034=>2151,37679=>2152,26716=>2153,39853=>2154,31545=>2155,21273=>2156,20874=>2157,21047=>2158,23519=>2159,25334=>2160,25774=>2161,25830=>2162,26413=>2163,27578=>2164,34217=>2165,38609=>2166,30352=>2167,39894=>2168,25420=>2169,37638=>2170,39851=>2171,12139=>2172,30399=>2172,26194=>2173,19977=>2174,20632=>2175,21442=>2176,12077=>2177,23665=>2177,24808=>2178,25746=>2179,25955=>2180,26719=>2181,29158=>2182,29642=>2183,29987=>2184,31639=>2185,32386=>2186,34453=>2187,35715=>2188,36059=>2189,37240=>2190,39184=>2191,26028=>2192,26283=>2193,27531=>2194,20181=>2195,20180=>2196,20282=>2197,20351=>2198,21050=>2199,21496=>2200,21490=>2201,21987=>2202,22235=>2203,12064=>2204,22763=>2204,22987=>2205,22985=>2206,23039=>2207,12070=>2208,23376=>2208,23629=>2209,24066=>2210,24107=>2211,24535=>2212,24605=>2213,25351=>2214,12096=>2215,25903=>2215,23388=>2216,26031=>2217,26045=>2218,26088=>2219,26525=>2220,12108=>2221,27490=>2221,27515=>2222,12114=>2223,27663=>2223,29509=>2224,31049=>2225,31169=>2226,12151=>2227,31992=>2227,32025=>2228,32043=>2229,32930=>2230,33026=>2231,12164=>2232,33267=>2232,35222=>2233,35422=>2234,35433=>2235,35430=>2236,35468=>2237,35566=>2238,36039=>2239,36060=>2240,38604=>2241,39164=>2242,12013=>2243,27503=>2243,20107=>2244,20284=>2245,20365=>2246,20816=>2247,23383=>2248,23546=>2249,24904=>2250,25345=>2251,26178=>2252,27425=>2253,28363=>2254,27835=>2255,29246=>2256,29885=>2257,30164=>2258,30913=>2259,12144=>2260,31034=>2260,12157=>2261,32780=>2261,12159=>2262,32819=>2262,12163=>2263,33258=>2263,33940=>2264,36766=>2265,27728=>2266,12229=>2267,40575=>2267,24335=>2268,35672=>2269,40235=>2270,31482=>2271,36600=>2272,23437=>2273,38635=>2274,19971=>2275,21489=>2276,22519=>2277,22833=>2278,23241=>2279,23460=>2280,24713=>2281,28287=>2282,28422=>2283,30142=>2284,36074=>2285,23455=>2286,34048=>2287,31712=>2288,20594=>2289,26612=>2290,33437=>2291,23649=>2292,34122=>2293,32286=>2294,33294=>2295,20889=>2296,23556=>2297,25448=>2298,36198=>2299,26012=>2300,29038=>2301,31038=>2302,32023=>2303,32773=>2304,35613=>2305,12190=>2306,36554=>2306,36974=>2307,34503=>2308,37034=>2309,20511=>2310,21242=>2311,23610=>2312,26451=>2313,28796=>2314,29237=>2315,37196=>2316,37320=>2317,37675=>2318,33509=>2319,23490=>2320,24369=>2321,24825=>2322,20027=>2323,21462=>2324,23432=>2325,12095=>2326,25163=>2326,26417=>2327,27530=>2328,29417=>2329,29664=>2330,31278=>2331,33131=>2332,36259=>2333,37202=>2334,12216=>2335,39318=>2335,20754=>2336,21463=>2337,21610=>2338,23551=>2339,25480=>2340,27193=>2341,32172=>2342,38656=>2343,22234=>2344,21454=>2345,21608=>2346,23447=>2347,23601=>2348,24030=>2349,20462=>2350,24833=>2351,25342=>2352,27954=>2353,31168=>2354,31179=>2355,32066=>2356,32333=>2357,32722=>2358,33261=>2359,12168=>2360,33311=>2360,33936=>2361,34886=>2362,35186=>2363,35728=>2364,36468=>2365,36655=>2366,36913=>2367,37195=>2368,37228=>2369,38598=>2370,37276=>2371,20160=>2372,20303=>2373,20805=>2374,12055=>2375,21313=>2375,24467=>2376,25102=>2377,26580=>2378,27713=>2379,28171=>2380,29539=>2381,32294=>2382,37325=>2383,37507=>2384,21460=>2385,22809=>2386,23487=>2387,28113=>2388,31069=>2389,32302=>2390,31899=>2391,22654=>2392,29087=>2393,20986=>2394,34899=>2395,36848=>2396,20426=>2397,23803=>2398,26149=>2399,30636=>2400,31459=>2401,33308=>2402,39423=>2403,20934=>2404,24490=>2405,26092=>2406,26991=>2407,27529=>2408,28147=>2409,28310=>2410,28516=>2411,30462=>2412,32020=>2413,24033=>2414,36981=>2415,37255=>2416,38918=>2417,20966=>2418,21021=>2419,25152=>2420,26257=>2421,26329=>2422,28186=>2423,24246=>2424,32210=>2425,32626=>2426,26360=>2427,34223=>2428,34295=>2429,35576=>2430,21161=>2431,21465=>2432,12069=>2433,22899=>2433,24207=>2434,24464=>2435,24661=>2436,37604=>2437,38500=>2438,20663=>2439,20767=>2440,21213=>2441,21280=>2442,21319=>2443,21484=>2444,21736=>2445,21830=>2446,21809=>2447,22039=>2448,22888=>2449,22974=>2450,23100=>2451,23477=>2452,23558=>2453,12073=>2454,23567=>2454,23569=>2455,23578=>2456,24196=>2457,24202=>2458,24288=>2459,24432=>2460,25215=>2461,25220=>2462,25307=>2463,25484=>2464,25463=>2465,26119=>2466,26124=>2467,26157=>2468,26230=>2469,26494=>2470,26786=>2471,27167=>2472,27189=>2473,27836=>2474,28040=>2475,28169=>2476,28248=>2477,28988=>2478,28966=>2479,29031=>2480,30151=>2481,30465=>2482,30813=>2483,30977=>2484,31077=>2485,31216=>2486,31456=>2487,31505=>2488,31911=>2489,32057=>2490,32918=>2491,33750=>2492,33931=>2493,34121=>2494,34909=>2495,35059=>2496,35359=>2497,35388=>2498,35412=>2499,35443=>2500,35937=>2501,36062=>2502,37284=>2503,37478=>2504,37758=>2505,37912=>2506,38556=>2507,38808=>2508,19978=>2509,19976=>2510,19998=>2511,20055=>2512,20887=>2513,21104=>2514,22478=>2515,22580=>2516,22732=>2517,23330=>2518,24120=>2519,24773=>2520,25854=>2521,26465=>2522,26454=>2523,27972=>2524,29366=>2525,30067=>2526,31331=>2527,33976=>2528,35698=>2529,37304=>2530,37664=>2531,22065=>2532,22516=>2533,39166=>2534,25325=>2535,26893=>2536,27542=>2537,29165=>2538,32340=>2539,32887=>2540,12170=>2541,33394=>2541,35302=>2542,12215=>2543,39135=>2543,34645=>2544,36785=>2545,23611=>2546,20280=>2547,20449=>2548,20405=>2549,21767=>2550,23072=>2551,23517=>2552,23529=>2553,12092=>2554,24515=>2554,24910=>2555,25391=>2556,26032=>2557,26187=>2558,26862=>2559,27035=>2560,28024=>2561,28145=>2562,30003=>2563,30137=>2564,30495=>2565,31070=>2566,31206=>2567,32051=>2568,12162=>2569,33251=>2569,33455=>2570,34218=>2571,35242=>2572,35386=>2573,12189=>2574,36523=>2574,12191=>2575,36763=>2575,36914=>2576,37341=>2577,38663=>2578,12040=>2579,20154=>2579,20161=>2580,20995=>2581,22645=>2582,22764=>2583,23563=>2584,29978=>2585,23613=>2586,33102=>2587,35338=>2588,36805=>2589,38499=>2590,38765=>2591,31525=>2592,35535=>2593,38920=>2594,37218=>2595,22259=>2596,21416=>2597,36887=>2598,21561=>2599,22402=>2600,24101=>2601,25512=>2602,12116=>2603,27700=>2603,28810=>2604,30561=>2605,31883=>2606,32736=>2607,34928=>2608,36930=>2609,37204=>2610,37648=>2611,37656=>2612,38543=>2613,29790=>2614,39620=>2615,23815=>2616,23913=>2617,25968=>2618,26530=>2619,36264=>2620,38619=>2621,25454=>2622,26441=>2623,26905=>2624,33733=>2625,38935=>2626,38592=>2627,35070=>2628,28548=>2629,25722=>2630,12072=>2631,23544=>2631,19990=>2632,28716=>2633,30045=>2634,26159=>2635,20932=>2636,21046=>2637,21218=>2638,22995=>2639,24449=>2640,24615=>2641,25104=>2642,25919=>2643,25972=>2644,26143=>2645,26228=>2646,26866=>2647,26646=>2648,27491=>2649,28165=>2650,29298=>2651,12131=>2652,29983=>2652,30427=>2653,31934=>2654,32854=>2655,22768=>2656,35069=>2657,11972=>2658,35199=>2658,35488=>2659,35475=>2660,35531=>2661,36893=>2662,37266=>2663,11992=>2664,38738=>2664,38745=>2665,12011=>2666,25993=>2666,31246=>2667,33030=>2668,38587=>2669,24109=>2670,24796=>2671,25114=>2672,26021=>2673,26132=>2674,26512=>2675,12143=>2676,30707=>2676,31309=>2677,31821=>2678,32318=>2679,33034=>2680,36012=>2681,12186=>2682,36196=>2682,36321=>2683,36447=>2684,30889=>2685,20999=>2686,25305=>2687,25509=>2688,25666=>2689,25240=>2690,35373=>2691,31363=>2692,31680=>2693,35500=>2694,38634=>2695,32118=>2696,12166=>2697,33292=>2697,34633=>2698,20185=>2699,20808=>2700,21315=>2701,21344=>2702,23459=>2703,23554=>2704,23574=>2705,24029=>2706,25126=>2707,25159=>2708,25776=>2709,26643=>2710,26676=>2711,27849=>2712,27973=>2713,27927=>2714,26579=>2715,28508=>2716,29006=>2717,29053=>2718,26059=>2719,31359=>2720,31661=>2721,32218=>2722,32330=>2723,32680=>2724,33146=>2725,12167=>2726,33307=>2726,33337=>2727,34214=>2728,35438=>2729,36046=>2730,36341=>2731,36984=>2732,36983=>2733,37549=>2734,37521=>2735,38275=>2736,39854=>2737,21069=>2738,21892=>2739,28472=>2740,28982=>2741,20840=>2742,31109=>2743,32341=>2744,33203=>2745,31950=>2746,22092=>2747,22609=>2748,23720=>2749,25514=>2750,26366=>2751,26365=>2752,26970=>2753,29401=>2754,30095=>2755,30094=>2756,30990=>2757,31062=>2758,31199=>2759,31895=>2760,32032=>2761,32068=>2762,34311=>2763,35380=>2764,38459=>2765,36961=>2766,12239=>2767,40736=>2767,20711=>2768,21109=>2769,21452=>2770,21474=>2771,20489=>2772,21930=>2773,22766=>2774,22863=>2775,29245=>2776,23435=>2777,23652=>2778,21277=>2779,24803=>2780,24819=>2781,25436=>2782,25475=>2783,25407=>2784,25531=>2785,25805=>2786,26089=>2787,26361=>2788,24035=>2789,27085=>2790,27133=>2791,28437=>2792,29157=>2793,20105=>2794,30185=>2795,30456=>2796,31379=>2797,31967=>2798,32207=>2799,32156=>2800,32865=>2801,33609=>2802,33624=>2803,33900=>2804,33980=>2805,34299=>2806,35013=>2807,12187=>2808,36208=>2808,36865=>2809,36973=>2810,37783=>2811,38684=>2812,39442=>2813,20687=>2814,22679=>2815,24974=>2816,33235=>2817,34101=>2818,36104=>2819,36896=>2820,20419=>2821,20596=>2822,21063=>2823,21363=>2824,24687=>2825,25417=>2826,26463=>2827,28204=>2828,12188=>2829,36275=>2829,36895=>2830,20439=>2831,23646=>2832,36042=>2833,26063=>2834,32154=>2835,21330=>2836,34966=>2837,20854=>2838,25539=>2839,23384=>2840,23403=>2841,23562=>2842,25613=>2843,26449=>2844,36956=>2845,20182=>2846,22810=>2847,22826=>2848,27760=>2849,35409=>2850,21822=>2851,22549=>2852,22949=>2853,24816=>2854,25171=>2855,26561=>2856,33333=>2857,26965=>2858,38464=>2859,39364=>2860,39464=>2861,20307=>2862,22534=>2863,23550=>2864,32784=>2865,23729=>2866,24111=>2867,24453=>2868,24608=>2869,24907=>2870,25140=>2871,26367=>2872,27888=>2873,28382=>2874,32974=>2875,33151=>2876,33492=>2877,34955=>2878,36024=>2879,36864=>2880,36910=>2881,38538=>2882,40667=>2883,39899=>2884,20195=>2885,21488=>2886,12068=>2887,22823=>2887,31532=>2888,37261=>2889,38988=>2890,40441=>2891,28381=>2892,28711=>2893,21331=>2894,21828=>2895,23429=>2896,25176=>2897,25246=>2898,25299=>2899,27810=>2900,28655=>2901,29730=>2902,35351=>2903,37944=>2904,28609=>2905,35582=>2906,33592=>2907,20967=>2908,34552=>2909,21482=>2910,21481=>2911,20294=>2912,36948=>2913,12192=>2914,36784=>2914,22890=>2915,33073=>2916,24061=>2917,31466=>2918,36799=>2919,26842=>2920,12181=>2921,35895=>2921,29432=>2922,40008=>2923,27197=>2924,35504=>2925,20025=>2926,21336=>2927,22022=>2928,22374=>2929,25285=>2930,25506=>2931,26086=>2932,27470=>2933,28129=>2934,28251=>2935,28845=>2936,30701=>2937,31471=>2938,31658=>2939,32187=>2940,32829=>2941,32966=>2942,34507=>2943,35477=>2944,37723=>2945,22243=>2946,22727=>2947,24382=>2948,26029=>2949,26262=>2950,27264=>2951,27573=>2952,30007=>2953,35527=>2954,20516=>2955,30693=>2956,22320=>2957,24347=>2958,24677=>2959,26234=>2960,27744=>2961,30196=>2962,31258=>2963,32622=>2964,33268=>2965,34584=>2966,36933=>2967,39347=>2968,31689=>2969,30044=>2970,12149=>2971,31481=>2971,31569=>2972,33988=>2973,36880=>2974,31209=>2975,31378=>2976,33590=>2977,23265=>2978,30528=>2979,20013=>2980,20210=>2981,23449=>2982,24544=>2983,25277=>2984,26172=>2985,26609=>2986,27880=>2987,12173=>2988,34411=>2988,34935=>2989,35387=>2990,37198=>2991,37619=>2992,39376=>2993,27159=>2994,28710=>2995,29482=>2996,33511=>2997,33879=>2998,36015=>2999,19969=>3000,20806=>3001,20939=>3002,21899=>3003,23541=>3004,24086=>3005,24115=>3006,24193=>3007,24340=>3008,24373=>3009,24427=>3010,24500=>3011,25074=>3012,25361=>3013,26274=>3014,26397=>3015,28526=>3016,29266=>3017,30010=>3018,30522=>3019,32884=>3020,33081=>3021,33144=>3022,34678=>3023,35519=>3024,35548=>3025,36229=>3026,36339=>3027,37530=>3028,11985=>3029,12199=>3029,38263=>3029,38914=>3030,12227=>3031,40165=>3031,21189=>3032,25431=>3033,30452=>3034,26389=>3035,27784=>3036,29645=>3037,36035=>3038,37806=>3039,38515=>3040,27941=>3041,22684=>3042,26894=>3043,27084=>3044,36861=>3045,37786=>3046,30171=>3047,36890=>3048,22618=>3049,26626=>3050,25524=>3051,27131=>3052,20291=>3053,28460=>3054,26584=>3055,36795=>3056,34086=>3057,32180=>3058,37716=>3059,26943=>3060,28528=>3061,22378=>3062,22775=>3063,23340=>3064,32044=>3065,12118=>3066,29226=>3066,21514=>3067,37347=>3068,40372=>3069,20141=>3070,20302=>3071,20572=>3072,20597=>3073,21059=>3074,35998=>3075,21576=>3076,22564=>3077,23450=>3078,24093=>3079,24213=>3080,24237=>3081,24311=>3082,24351=>3083,24716=>3084,25269=>3085,25402=>3086,25552=>3087,26799=>3088,27712=>3089,30855=>3090,31118=>3091,31243=>3092,32224=>3093,33351=>3094,35330=>3095,35558=>3096,36420=>3097,36883=>3098,37048=>3099,37165=>3100,37336=>3101,12237=>3102,40718=>3102,27877=>3103,25688=>3104,25826=>3105,25973=>3106,28404=>3107,30340=>3108,31515=>3109,36969=>3110,37841=>3111,28346=>3112,21746=>3113,24505=>3114,25764=>3115,36685=>3116,36845=>3117,37444=>3118,20856=>3119,22635=>3120,22825=>3121,23637=>3122,24215=>3123,28155=>3124,32399=>3125,29980=>3126,36028=>3127,36578=>3128,39003=>3129,28857=>3130,20253=>3131,27583=>3132,28593=>3133,12133=>3134,30000=>3134,38651=>3135,20814=>3136,21520=>3137,22581=>3138,22615=>3139,22956=>3140,23648=>3141,24466=>3142,12099=>3143,26007=>3143,26460=>3144,28193=>3145,30331=>3146,33759=>3147,36077=>3148,36884=>3149,37117=>3150,37709=>3151,30757=>3152,30778=>3153,21162=>3154,24230=>3155,12063=>3156,22303=>3156,22900=>3157,24594=>3158,20498=>3159,20826=>3160,20908=>3161,20941=>3162,12049=>3163,20992=>3163,21776=>3164,22612=>3165,22616=>3166,22871=>3167,23445=>3168,23798=>3169,23947=>3170,24764=>3171,25237=>3172,25645=>3173,26481=>3174,26691=>3175,26812=>3176,26847=>3177,30423=>3178,28120=>3179,28271=>3180,28059=>3181,28783=>3182,29128=>3183,24403=>3184,30168=>3185,31095=>3186,31561=>3187,31572=>3188,31570=>3189,31958=>3190,32113=>3191,21040=>3192,33891=>3193,34153=>3194,34276=>3195,35342=>3196,35588=>3197,12182=>3198,35910=>3198,36367=>3199,36867=>3200,36879=>3201,37913=>3202,38518=>3203,38957=>3204,39472=>3205,38360=>3206,20685=>3207,21205=>3208,21516=>3209,22530=>3210,23566=>3211,24999=>3212,25758=>3213,27934=>3214,30643=>3215,31461=>3216,33012=>3217,33796=>3218,36947=>3219,37509=>3220,23776=>3221,40199=>3222,21311=>3223,24471=>3224,24499=>3225,28060=>3226,29305=>3227,30563=>3228,31167=>3229,31716=>3230,27602=>3231,29420=>3232,35501=>3233,26627=>3234,27233=>3235,20984=>3236,31361=>3237,26932=>3238,23626=>3239,40182=>3240,33515=>3241,23493=>3242,12195=>3243,37193=>3243,28702=>3244,22136=>3245,23663=>3246,24775=>3247,25958=>3248,27788=>3249,35930=>3250,36929=>3251,38931=>3252,21585=>3253,26311=>3254,37389=>3255,22856=>3256,37027=>3257,20869=>3258,20045=>3259,20970=>3260,34201=>3261,35598=>3262,28760=>3263,25466=>3264,37707=>3265,26978=>3266,39348=>3267,32260=>3268,30071=>3269,21335=>3270,26976=>3271,36575=>3272,38627=>3273,27741=>3274,12038=>3275,20108=>3275,23612=>3276,24336=>3277,36841=>3278,21250=>3279,36049=>3280,12161=>3281,32905=>3281,34425=>3282,24319=>3283,12103=>3284,26085=>3284,20083=>3285,12042=>3286,20837=>3286,22914=>3287,23615=>3288,38894=>3289,20219=>3290,22922=>3291,24525=>3292,35469=>3293,28641=>3294,31152=>3295,31074=>3296,23527=>3297,33905=>3298,29483=>3299,29105=>3300,24180=>3301,24565=>3302,25467=>3303,25754=>3304,29123=>3305,31896=>3306,20035=>3307,24316=>3308,20043=>3309,22492=>3310,22178=>3311,24745=>3312,28611=>3313,32013=>3314,33021=>3315,33075=>3316,33215=>3317,36786=>3318,35223=>3319,34468=>3320,24052=>3321,25226=>3322,25773=>3323,35207=>3324,26487=>3325,27874=>3326,27966=>3327,29750=>3328,30772=>3329,23110=>3330,32629=>3331,33453=>3332,12218=>3333,39340=>3333,20467=>3334,24259=>3335,25309=>3336,25490=>3337,25943=>3338,26479=>3339,30403=>3340,29260=>3341,32972=>3342,32954=>3343,36649=>3344,37197=>3345,20493=>3346,22521=>3347,23186=>3348,26757=>3349,26995=>3350,29028=>3351,29437=>3352,36023=>3353,22770=>3354,36064=>3355,38506=>3356,36889=>3357,34687=>3358,31204=>3359,30695=>3360,33833=>3361,20271=>3362,21093=>3363,21338=>3364,25293=>3365,26575=>3366,27850=>3367,12137=>3368,30333=>3368,31636=>3369,31893=>3370,33334=>3371,34180=>3372,36843=>3373,26333=>3374,28448=>3375,29190=>3376,32283=>3377,33707=>3378,39361=>3379,12008=>3380,40614=>3380,20989=>3381,31665=>3382,30834=>3383,31672=>3384,32903=>3385,31560=>3386,27368=>3387,24161=>3388,32908=>3389,30033=>3390,30048=>3391,12043=>3392,20843=>3392,37474=>3393,28300=>3394,30330=>3395,37271=>3396,39658=>3397,20240=>3398,32624=>3399,25244=>3400,31567=>3401,38309=>3402,40169=>3403,22138=>3404,22617=>3405,34532=>3406,38588=>3407,20276=>3408,21028=>3409,21322=>3410,21453=>3411,21467=>3412,24070=>3413,25644=>3414,26001=>3415,26495=>3416,27710=>3417,27726=>3418,29256=>3419,29359=>3420,29677=>3421,30036=>3422,32321=>3423,33324=>3424,34281=>3425,36009=>3426,31684=>3427,12196=>3428,37318=>3428,29033=>3429,38930=>3430,39151=>3431,25405=>3432,26217=>3433,30058=>3434,30436=>3435,30928=>3436,34115=>3437,34542=>3438,21290=>3439,21329=>3440,21542=>3441,22915=>3442,24199=>3443,24444=>3444,24754=>3445,25161=>3446,25209=>3447,25259=>3448,26000=>3449,12112=>3450,27604=>3450,27852=>3451,30130=>3452,12138=>3453,30382=>3453,30865=>3454,31192=>3455,32203=>3456,32631=>3457,32933=>3458,34987=>3459,35513=>3460,36027=>3461,36991=>3462,12206=>3463,38750=>3463,12214=>3464,39131=>3464,27147=>3465,31800=>3466,20633=>3467,23614=>3468,24494=>3469,26503=>3470,27608=>3471,29749=>3472,30473=>3473,32654=>3474,12240=>3475,40763=>3475,26570=>3476,31255=>3477,21305=>3478,12134=>3479,30091=>3479,39661=>3480,24422=>3481,33181=>3482,33777=>3483,32920=>3484,24380=>3485,24517=>3486,30050=>3487,31558=>3488,36924=>3489,26727=>3490,23019=>3491,23195=>3492,32016=>3493,30334=>3494,35628=>3495,20469=>3496,24426=>3497,27161=>3498,27703=>3499,28418=>3500,29922=>3501,31080=>3502,34920=>3503,35413=>3504,35961=>3505,24287=>3506,25551=>3507,30149=>3508,31186=>3509,33495=>3510,37672=>3511,37618=>3512,33948=>3513,34541=>3514,39981=>3515,21697=>3516,24428=>3517,25996=>3518,27996=>3519,28693=>3520,36007=>3521,36051=>3522,38971=>3523,25935=>3524,29942=>3525,19981=>3526,20184=>3527,22496=>3528,22827=>3529,23142=>3530,23500=>3531,20904=>3532,24067=>3533,24220=>3534,24598=>3535,25206=>3536,25975=>3537,26023=>3538,26222=>3539,28014=>3540,12119=>3541,29238=>3541,31526=>3542,33104=>3543,33178=>3544,33433=>3545,35676=>3546,36000=>3547,36070=>3548,36212=>3549,12201=>3550,38428=>3550,38468=>3551,20398=>3552,25771=>3553,27494=>3554,33310=>3555,33889=>3556,34154=>3557,37096=>3558,23553=>3559,26963=>3560,12213=>3561,39080=>3561,33914=>3562,34135=>3563,20239=>3564,21103=>3565,24489=>3566,24133=>3567,26381=>3568,31119=>3569,33145=>3570,35079=>3571,35206=>3572,28149=>3573,24343=>3574,25173=>3575,27832=>3576,20175=>3577,29289=>3578,39826=>3579,20998=>3580,21563=>3581,22132=>3582,22707=>3583,24996=>3584,25198=>3585,28954=>3586,22894=>3587,31881=>3588,31966=>3589,32027=>3590,38640=>3591,12098=>3592,25991=>3592,32862=>3593,19993=>3594,20341=>3595,20853=>3596,22592=>3597,24163=>3598,24179=>3599,24330=>3600,26564=>3601,20006=>3602,34109=>3603,38281=>3604,38491=>3605,12150=>3606,31859=>3606,12212=>3607,38913=>3607,20731=>3608,22721=>3609,30294=>3610,30887=>3611,21029=>3612,30629=>3613,34065=>3614,31622=>3615,20559=>3616,22793=>3617,12122=>3618,29255=>3618,31687=>3619,32232=>3620,36794=>3621,36820=>3622,36941=>3623,20415=>3624,21193=>3625,23081=>3626,24321=>3627,38829=>3628,20445=>3629,33303=>3630,37610=>3631,22275=>3632,25429=>3633,27497=>3634,29995=>3635,35036=>3636,36628=>3637,31298=>3638,21215=>3639,22675=>3640,24917=>3641,25098=>3642,26286=>3643,11935=>3644,27597=>3644,31807=>3645,33769=>3646,20515=>3647,20472=>3648,21253=>3649,21574=>3650,22577=>3651,22857=>3652,23453=>3653,23792=>3654,23791=>3655,23849=>3656,24214=>3657,25265=>3658,25447=>3659,25918=>3660,12101=>3661,26041=>3661,26379=>3662,27861=>3663,27873=>3664,28921=>3665,30770=>3666,32299=>3667,32990=>3668,33459=>3669,33804=>3670,34028=>3671,34562=>3672,35090=>3673,35370=>3674,35914=>3675,37030=>3676,37586=>3677,39165=>3678,40179=>3679,40300=>3680,20047=>3681,20129=>3682,20621=>3683,21078=>3684,22346=>3685,22952=>3686,24125=>3687,24536=>3688,24537=>3689,25151=>3690,26292=>3691,26395=>3692,26576=>3693,26834=>3694,20882=>3695,32033=>3696,32938=>3697,33192=>3698,35584=>3699,35980=>3700,36031=>3701,37502=>3702,38450=>3703,21536=>3704,38956=>3705,21271=>3706,20693=>3707,12056=>3708,21340=>3708,22696=>3709,25778=>3710,26420=>3711,29287=>3712,30566=>3713,31302=>3714,37350=>3715,21187=>3716,27809=>3717,27526=>3718,22528=>3719,24140=>3720,22868=>3721,26412=>3722,32763=>3723,20961=>3724,30406=>3725,25705=>3726,30952=>3727,39764=>3728,12231=>3729,40635=>3729,22475=>3730,22969=>3731,26151=>3732,26522=>3733,27598=>3734,21737=>3735,27097=>3736,24149=>3737,33180=>3738,26517=>3739,39850=>3740,26622=>3741,40018=>3742,26717=>3743,20134=>3744,20451=>3745,12060=>3746,21448=>3746,25273=>3747,26411=>3748,27819=>3749,36804=>3750,20397=>3751,32365=>3752,40639=>3753,19975=>3754,24930=>3755,28288=>3756,28459=>3757,34067=>3758,21619=>3759,26410=>3760,39749=>3761,11922=>3762,24051=>3762,31637=>3763,23724=>3764,23494=>3765,34588=>3766,28234=>3767,34001=>3768,31252=>3769,33032=>3770,22937=>3771,31885=>3772,11936=>3773,27665=>3773,30496=>3774,21209=>3775,22818=>3776,28961=>3777,29279=>3778,12141=>3779,30683=>3779,38695=>3780,40289=>3781,26891=>3782,23167=>3783,23064=>3784,20901=>3785,21517=>3786,21629=>3787,26126=>3788,30431=>3789,36855=>3790,37528=>3791,40180=>3792,23018=>3793,29277=>3794,28357=>3795,20813=>3796,26825=>3797,32191=>3798,32236=>3799,12207=>3800,38754=>3800,40634=>3801,25720=>3802,27169=>3803,33538=>3804,22916=>3805,23391=>3806,12113=>3807,27611=>3807,29467=>3808,30450=>3809,32178=>3810,32791=>3811,33945=>3812,20786=>3813,12106=>3814,26408=>3814,40665=>3815,12140=>3816,30446=>3816,26466=>3817,21247=>3818,39173=>3819,23588=>3820,25147=>3821,31870=>3822,36016=>3823,21839=>3824,24758=>3825,32011=>3826,12200=>3827,38272=>3827,21249=>3828,20063=>3829,20918=>3830,22812=>3831,29242=>3832,32822=>3833,37326=>3834,24357=>3835,12142=>3836,30690=>3836,21380=>3837,24441=>3838,32004=>3839,34220=>3840,35379=>3841,36493=>3842,38742=>3843,26611=>3844,34222=>3845,37971=>3846,24841=>3847,24840=>3848,27833=>3849,30290=>3850,35565=>3851,36664=>3852,21807=>3853,20305=>3854,20778=>3855,21191=>3856,21451=>3857,23461=>3858,24189=>3859,24736=>3860,24962=>3861,25558=>3862,26377=>3863,26586=>3864,28263=>3865,28044=>3866,29494=>3867,29495=>3868,30001=>3869,31056=>3870,35029=>3871,35480=>3872,36938=>3873,12194=>3874,37009=>3874,37109=>3875,38596=>3876,34701=>3877,12067=>3878,22805=>3878,20104=>3879,20313=>3880,19982=>3881,35465=>3882,36671=>3883,38928=>3884,20653=>3885,24188=>3886,22934=>3887,23481=>3888,24248=>3889,25562=>3890,25594=>3891,25793=>3892,26332=>3893,26954=>3894,27096=>3895,27915=>3896,28342=>3897,29076=>3898,12132=>3899,29992=>3899,31407=>3900,12154=>3901,32650=>3901,32768=>3902,33865=>3903,33993=>3904,35201=>3905,35617=>3906,36362=>3907,36965=>3908,38525=>3909,39178=>3910,24958=>3911,25233=>3912,27442=>3913,27779=>3914,28020=>3915,32716=>3916,32764=>3917,28096=>3918,32645=>3919,34746=>3920,35064=>3921,26469=>3922,33713=>3923,38972=>3924,38647=>3925,27931=>3926,32097=>3927,33853=>3928,37226=>3929,20081=>3930,21365=>3931,23888=>3932,27396=>3933,28651=>3934,34253=>3935,34349=>3936,35239=>3937,21033=>3938,21519=>3939,23653=>3940,26446=>3941,26792=>3942,29702=>3943,29827=>3944,30178=>3945,35023=>3946,35041=>3947,12197=>3948,37324=>3948,38626=>3949,38520=>3950,24459=>3951,29575=>3952,12148=>3953,31435=>3953,33870=>3954,25504=>3955,30053=>3956,21129=>3957,27969=>3958,28316=>3959,29705=>3960,30041=>3961,30827=>3962,31890=>3963,38534=>3964,12015=>3965,31452=>3965,12243=>3966,40845=>3966,20406=>3967,24942=>3968,26053=>3969,34396=>3970,20102=>3971,20142=>3972,20698=>3973,20001=>3974,20940=>3975,23534=>3976,26009=>3977,26753=>3978,28092=>3979,29471=>3980,30274=>3981,30637=>3982,31260=>3983,31975=>3984,33391=>3985,35538=>3986,36988=>3987,37327=>3988,38517=>3989,38936=>3990,12050=>3991,21147=>3991,32209=>3992,20523=>3993,21400=>3994,26519=>3995,28107=>3996,29136=>3997,29747=>3998,33256=>3999,36650=>4000,38563=>4001,40023=>4002,40607=>4003,29792=>4004,22593=>4005,28057=>4006,32047=>4007,39006=>4008,20196=>4009,20278=>4010,20363=>4011,20919=>4012,21169=>4013,23994=>4014,24604=>4015,29618=>4016,31036=>4017,33491=>4018,37428=>4019,38583=>4020,38646=>4021,38666=>4022,40599=>4023,40802=>4024,26278=>4025,27508=>4026,21015=>4027,21155=>4028,28872=>4029,35010=>4030,24265=>4031,24651=>4032,24976=>4033,28451=>4034,29001=>4035,31806=>4036,32244=>4037,32879=>4038,34030=>4039,36899=>4040,37676=>4041,21570=>4042,39791=>4043,27347=>4044,28809=>4045,36034=>4046,36335=>4047,38706=>4048,21172=>4049,23105=>4050,24266=>4051,24324=>4052,26391=>4053,27004=>4054,27028=>4055,28010=>4056,28431=>4057,29282=>4058,29436=>4059,31725=>4060,12156=>4061,32769=>4061,32894=>4062,34635=>4063,37070=>4064,20845=>4065,40595=>4066,31108=>4067,32907=>4068,37682=>4069,35542=>4070,20525=>4071,21644=>4072,35441=>4073,27498=>4074,36036=>4075,33031=>4076,24785=>4077,26528=>4078,40434=>4079,20121=>4080,20120=>4081,39952=>4082,35435=>4083,34241=>4084,34152=>4085,26880=>4086,28286=>4087,30871=>4088,33109=>4089,24332=>4090,19984=>4091,19989=>4092,20010=>4093,20017=>4094,12034=>4095,20022=>4095,20028=>4096,12035=>4097,20031=>4097,20034=>4098,20054=>4099,20056=>4100,20098=>4101,12037=>4102,20101=>4102,35947=>4103,20106=>4104,33298=>4105,24333=>4106,20110=>4107,20126=>4108,20127=>4109,12039=>4110,20128=>4110,20130=>4111,20144=>4112,20147=>4113,20150=>4114,20174=>4115,20173=>4116,20164=>4117,20166=>4118,20162=>4119,20183=>4120,20190=>4121,20205=>4122,20191=>4123,20215=>4124,20233=>4125,20314=>4126,20272=>4127,20315=>4128,20317=>4129,20311=>4130,20295=>4131,20342=>4132,20360=>4133,20367=>4134,20376=>4135,20347=>4136,20329=>4137,20336=>4138,20369=>4139,20335=>4140,20358=>4141,20374=>4142,20760=>4143,20436=>4144,20447=>4145,20430=>4146,20440=>4147,20443=>4148,20433=>4149,20442=>4150,20432=>4151,20452=>4152,20453=>4153,20506=>4154,20520=>4155,20500=>4156,20522=>4157,20517=>4158,20485=>4159,20252=>4160,20470=>4161,20513=>4162,20521=>4163,20524=>4164,20478=>4165,20463=>4166,20497=>4167,20486=>4168,20547=>4169,20551=>4170,26371=>4171,20565=>4172,20560=>4173,20552=>4174,20570=>4175,20566=>4176,20588=>4177,20600=>4178,20608=>4179,20634=>4180,20613=>4181,20660=>4182,20658=>4183,20681=>4184,20682=>4185,20659=>4186,20674=>4187,20694=>4188,20702=>4189,20709=>4190,20717=>4191,20707=>4192,20718=>4193,20729=>4194,20725=>4195,20745=>4196,20737=>4197,20738=>4198,20758=>4199,20757=>4200,20756=>4201,20762=>4202,20769=>4203,20794=>4204,20791=>4205,20796=>4206,20795=>4207,12041=>4208,20799=>4208,11918=>4209,20800=>4209,20818=>4210,20812=>4211,20820=>4212,20834=>4213,31480=>4214,20841=>4215,20842=>4216,20846=>4217,20864=>4218,12044=>4219,20866=>4219,22232=>4220,20876=>4221,20873=>4222,20879=>4223,20881=>4224,20883=>4225,20885=>4226,12045=>4227,20886=>4227,20900=>4228,20902=>4229,20898=>4230,20905=>4231,20906=>4232,12046=>4233,20907=>4233,20915=>4234,20913=>4235,20914=>4236,20912=>4237,20917=>4238,20925=>4239,20933=>4240,20937=>4241,20955=>4242,12047=>4243,20960=>4243,34389=>4244,20969=>4245,20973=>4246,20976=>4247,12048=>4248,20981=>4248,20990=>4249,20996=>4250,21003=>4251,21012=>4252,21006=>4253,21031=>4254,21034=>4255,21038=>4256,21043=>4257,21049=>4258,21071=>4259,21060=>4260,21067=>4261,21068=>4262,21086=>4263,21076=>4264,21098=>4265,21108=>4266,21097=>4267,21107=>4268,21119=>4269,21117=>4270,21133=>4271,21140=>4272,21138=>4273,21105=>4274,21128=>4275,21137=>4276,36776=>4277,36775=>4278,21164=>4279,21165=>4280,21180=>4281,21173=>4282,21185=>4283,21197=>4284,21207=>4285,21214=>4286,21219=>4287,21222=>4288,39149=>4289,21216=>4290,21235=>4291,21237=>4292,21240=>4293,12051=>4294,21241=>4294,21254=>4295,21256=>4296,30008=>4297,21261=>4298,21264=>4299,21263=>4300,21269=>4301,12052=>4301,21274=>4302,12053=>4302,21283=>4303,21295=>4304,21297=>4305,21299=>4306,12054=>4307,21304=>4307,21312=>4308,21318=>4309,21317=>4310,19991=>4311,21321=>4312,21325=>4313,20950=>4314,21342=>4315,12057=>4316,21353=>4316,21358=>4317,22808=>4318,21371=>4319,21367=>4320,12058=>4321,21378=>4321,21398=>4322,21408=>4323,21414=>4324,21413=>4325,21422=>4326,21424=>4327,12059=>4328,21430=>4328,21443=>4329,31762=>4330,38617=>4331,21471=>4332,26364=>4333,29166=>4334,21486=>4335,21480=>4336,21485=>4337,21498=>4338,21505=>4339,21565=>4340,21568=>4341,21548=>4342,21549=>4343,21564=>4344,21550=>4345,21558=>4346,21545=>4347,21533=>4348,21582=>4349,21647=>4350,21621=>4351,21646=>4352,21599=>4353,21617=>4354,21623=>4355,21616=>4356,21650=>4357,21627=>4358,21632=>4359,21622=>4360,21636=>4361,21648=>4362,21638=>4363,21703=>4364,21666=>4365,21688=>4366,21669=>4367,21676=>4368,21700=>4369,21704=>4370,21672=>4371,21675=>4372,21698=>4373,21668=>4374,21694=>4375,21692=>4376,21720=>4377,21733=>4378,21734=>4379,21775=>4380,21780=>4381,21757=>4382,21742=>4383,21741=>4384,21754=>4385,21730=>4386,21817=>4387,21824=>4388,21859=>4389,21836=>4390,21806=>4391,21852=>4392,21829=>4393,21846=>4394,21847=>4395,21816=>4396,21811=>4397,21853=>4398,21913=>4399,21888=>4400,21679=>4401,21898=>4402,21919=>4403,21883=>4404,21886=>4405,21912=>4406,21918=>4407,21934=>4408,21884=>4409,21891=>4410,21929=>4411,21895=>4412,21928=>4413,21978=>4414,21957=>4415,21983=>4416,21956=>4417,21980=>4418,21988=>4419,21972=>4420,22036=>4421,22007=>4422,22038=>4423,22014=>4424,22013=>4425,22043=>4426,22009=>4427,22094=>4428,22096=>4429,29151=>4430,22068=>4431,22070=>4432,22066=>4433,22072=>4434,22123=>4435,22116=>4436,22063=>4437,22124=>4438,22122=>4439,22150=>4440,22144=>4441,22154=>4442,22176=>4443,22164=>4444,22159=>4445,22181=>4446,22190=>4447,22198=>4448,22196=>4449,22210=>4450,22204=>4451,22209=>4452,22211=>4453,22208=>4454,22216=>4455,22222=>4456,22225=>4457,22227=>4458,12062=>4459,22231=>4459,22254=>4460,22265=>4461,22272=>4462,22271=>4463,22276=>4464,22281=>4465,22280=>4466,22283=>4467,22285=>4468,22291=>4469,22296=>4470,22294=>4471,21959=>4472,22300=>4473,22310=>4474,22327=>4475,22328=>4476,22350=>4477,22331=>4478,22336=>4479,22351=>4480,22377=>4481,22464=>4482,22408=>4483,22369=>4484,22399=>4485,22409=>4486,22419=>4487,22432=>4488,22451=>4489,22436=>4490,22442=>4491,22448=>4492,22467=>4493,22470=>4494,22484=>4495,22482=>4496,22483=>4497,22538=>4498,22486=>4499,22499=>4500,22539=>4501,22553=>4502,22557=>4503,22642=>4504,22561=>4505,22626=>4506,22603=>4507,22640=>4508,27584=>4509,22610=>4510,22589=>4511,22649=>4512,22661=>4513,22713=>4514,22687=>4515,22699=>4516,22714=>4517,22750=>4518,22715=>4519,22712=>4520,22702=>4521,22725=>4522,22739=>4523,22737=>4524,22743=>4525,22745=>4526,22744=>4527,22757=>4528,22748=>4529,22756=>4530,22751=>4531,22767=>4532,22778=>4533,22777=>4534,22779=>4535,22780=>4536,22781=>4537,22786=>4538,12065=>4538,22794=>4539,12066=>4539,22800=>4540,22811=>4541,26790=>4542,22821=>4543,22828=>4544,22829=>4545,22834=>4546,22840=>4547,22846=>4548,31442=>4549,22869=>4550,22864=>4551,22862=>4552,22874=>4553,22872=>4554,22882=>4555,22880=>4556,22887=>4557,22892=>4558,22889=>4559,22904=>4560,22913=>4561,22941=>4562,20318=>4563,20395=>4564,22947=>4565,22962=>4566,22982=>4567,23016=>4568,23004=>4569,22925=>4570,23001=>4571,23002=>4572,23077=>4573,23071=>4574,23057=>4575,23068=>4576,23049=>4577,23066=>4578,23104=>4579,23148=>4580,23113=>4581,23093=>4582,23094=>4583,23138=>4584,23146=>4585,23194=>4586,23228=>4587,23230=>4588,23243=>4589,23234=>4590,23229=>4591,23267=>4592,23255=>4593,23270=>4594,23273=>4595,23254=>4596,23290=>4597,23291=>4598,23308=>4599,23307=>4600,23318=>4601,23346=>4602,23248=>4603,23338=>4604,23350=>4605,23358=>4606,23363=>4607,23365=>4608,23360=>4609,23377=>4610,23381=>4611,23386=>4612,23387=>4613,23397=>4614,23401=>4615,23408=>4616,23411=>4617,23413=>4618,23416=>4619,25992=>4620,23418=>4621,12071=>4622,23424=>4622,23427=>4623,23462=>4624,23480=>4625,23491=>4626,23495=>4627,23497=>4628,23508=>4629,23504=>4630,23524=>4631,23526=>4632,23522=>4633,23518=>4634,23525=>4635,23531=>4636,23536=>4637,23542=>4638,23539=>4639,23557=>4640,23559=>4641,23560=>4642,23565=>4643,23571=>4644,23584=>4645,11920=>4646,12074=>4646,23586=>4646,23592=>4647,12075=>4648,23608=>4648,23609=>4649,23617=>4650,23622=>4651,23630=>4652,23635=>4653,23632=>4654,23631=>4655,23409=>4656,23660=>4657,12076=>4658,23662=>4658,20066=>4659,23670=>4660,23673=>4661,23692=>4662,23697=>4663,23700=>4664,22939=>4665,23723=>4666,23739=>4667,23734=>4668,23740=>4669,23735=>4670,23749=>4671,23742=>4672,23751=>4673,23769=>4674,23785=>4675,23805=>4676,23802=>4677,23789=>4678,23948=>4679,23786=>4680,23819=>4681,23829=>4682,23831=>4683,23900=>4684,23839=>4685,23835=>4686,23825=>4687,23828=>4688,23842=>4689,23834=>4690,23833=>4691,23832=>4692,23884=>4693,23890=>4694,23886=>4695,23883=>4696,23916=>4697,23923=>4698,23926=>4699,23943=>4700,23940=>4701,23938=>4702,23970=>4703,23965=>4704,23980=>4705,23982=>4706,23997=>4707,23952=>4708,23991=>4709,23996=>4710,24009=>4711,24013=>4712,24019=>4713,24018=>4714,24022=>4715,12078=>4716,24027=>4716,24043=>4717,24050=>4718,24053=>4719,24075=>4720,24090=>4721,24089=>4722,24081=>4723,24091=>4724,24118=>4725,24119=>4726,24132=>4727,24131=>4728,24128=>4729,24142=>4730,24151=>4731,24148=>4732,24159=>4733,24162=>4734,24164=>4735,24135=>4736,24181=>4737,24182=>4738,11923=>4739,12083=>4739,24186=>4739,40636=>4740,12084=>4741,24191=>4741,24224=>4742,24257=>4743,24258=>4744,24264=>4745,24272=>4746,24271=>4747,24278=>4748,24291=>4749,24285=>4750,24282=>4751,24283=>4752,24290=>4753,24289=>4754,24296=>4755,24297=>4756,24300=>4757,24305=>4758,24307=>4759,24304=>4760,12085=>4761,24308=>4761,24312=>4762,12086=>4763,24318=>4763,24323=>4764,24329=>4765,24413=>4766,24412=>4767,12087=>4768,24331=>4768,24337=>4769,24342=>4770,24361=>4771,24365=>4772,24376=>4773,24385=>4774,24392=>4775,24396=>4776,24398=>4777,24367=>4778,11924=>4779,24401=>4779,24406=>4780,24407=>4781,24409=>4782,12090=>4783,24417=>4783,24429=>4784,12091=>4785,24435=>4785,24439=>4786,24451=>4787,24450=>4788,24447=>4789,24458=>4790,24456=>4791,24465=>4792,24455=>4793,24478=>4794,24473=>4795,24472=>4796,24480=>4797,24488=>4798,24493=>4799,24508=>4800,24534=>4801,24571=>4802,24548=>4803,24568=>4804,24561=>4805,24541=>4806,24755=>4807,24575=>4808,24609=>4809,24672=>4810,24601=>4811,24592=>4812,24617=>4813,24590=>4814,24625=>4815,24603=>4816,24597=>4817,24619=>4818,24614=>4819,24591=>4820,24634=>4821,24666=>4822,24641=>4823,24682=>4824,24695=>4825,24671=>4826,24650=>4827,24646=>4828,24653=>4829,24675=>4830,24643=>4831,24676=>4832,24642=>4833,24684=>4834,24683=>4835,24665=>4836,24705=>4837,24717=>4838,24807=>4839,24707=>4840,24730=>4841,24708=>4842,24731=>4843,24726=>4844,24727=>4845,24722=>4846,24743=>4847,24715=>4848,24801=>4849,24760=>4850,24800=>4851,24787=>4852,24756=>4853,24560=>4854,24765=>4855,24774=>4856,24757=>4857,24792=>4858,24909=>4859,24853=>4860,24838=>4861,24822=>4862,24823=>4863,24832=>4864,24820=>4865,24826=>4866,24835=>4867,24865=>4868,24827=>4869,24817=>4870,24845=>4871,24846=>4872,24903=>4873,24894=>4874,24872=>4875,24871=>4876,24906=>4877,24895=>4878,24892=>4879,24876=>4880,24884=>4881,24893=>4882,24898=>4883,24900=>4884,24947=>4885,24951=>4886,24920=>4887,24921=>4888,24922=>4889,24939=>4890,24948=>4891,24943=>4892,24933=>4893,24945=>4894,24927=>4895,24925=>4896,24915=>4897,24949=>4898,24985=>4899,24982=>4900,24967=>4901,25004=>4902,24980=>4903,24986=>4904,24970=>4905,24977=>4906,25003=>4907,25006=>4908,25036=>4909,25034=>4910,25033=>4911,25079=>4912,25032=>4913,25027=>4914,25030=>4915,25018=>4916,25035=>4917,32633=>4918,25037=>4919,25062=>4920,25059=>4921,25078=>4922,25082=>4923,25076=>4924,25087=>4925,25085=>4926,25084=>4927,25086=>4928,25088=>4929,12093=>4930,25096=>4930,25097=>4931,25101=>4932,25100=>4933,25108=>4934,25115=>4935,25118=>4936,25121=>4937,25130=>4938,25134=>4939,25136=>4940,25138=>4941,25139=>4942,25153=>4943,25166=>4944,25182=>4945,25187=>4946,25179=>4947,25184=>4948,25192=>4949,25212=>4950,25218=>4951,25225=>4952,25214=>4953,25234=>4954,25235=>4955,25238=>4956,25300=>4957,25219=>4958,25236=>4959,25303=>4960,25297=>4961,25275=>4962,25295=>4963,25343=>4964,25286=>4965,25812=>4966,25288=>4967,25308=>4968,25292=>4969,25290=>4970,25282=>4971,25287=>4972,25243=>4973,25289=>4974,25356=>4975,25326=>4976,25329=>4977,25383=>4978,25346=>4979,25352=>4980,25327=>4981,25333=>4982,25424=>4983,25406=>4984,25421=>4985,25628=>4986,25423=>4987,25494=>4988,25486=>4989,25472=>4990,25515=>4991,25462=>4992,25507=>4993,25487=>4994,25481=>4995,25503=>4996,25525=>4997,25451=>4998,25449=>4999,25534=>5000,25577=>5001,25536=>5002,25542=>5003,25571=>5004,25545=>5005,25554=>5006,25590=>5007,25540=>5008,25622=>5009,25652=>5010,25606=>5011,25619=>5012,25638=>5013,25654=>5014,25885=>5015,25623=>5016,25640=>5017,25615=>5018,25703=>5019,25711=>5020,25718=>5021,25678=>5022,25898=>5023,25749=>5024,25747=>5025,25765=>5026,25769=>5027,25736=>5028,25788=>5029,25818=>5030,25810=>5031,25797=>5032,25799=>5033,25787=>5034,25816=>5035,25794=>5036,25841=>5037,25831=>5038,33289=>5039,25824=>5040,25825=>5041,25260=>5042,25827=>5043,25839=>5044,25900=>5045,25846=>5046,25844=>5047,25842=>5048,25850=>5049,25856=>5050,25853=>5051,25880=>5052,25884=>5053,25861=>5054,25892=>5055,25891=>5056,25899=>5057,12097=>5058,25908=>5058,11929=>5059,25909=>5059,25911=>5060,25910=>5061,25912=>5062,30027=>5063,25928=>5064,25942=>5065,25941=>5066,25933=>5067,25944=>5068,25950=>5069,25949=>5070,25970=>5071,25976=>5072,25986=>5073,25987=>5074,35722=>5075,26011=>5076,26015=>5077,26027=>5078,26039=>5079,26051=>5080,26054=>5081,26049=>5082,26052=>5083,26060=>5084,26066=>5085,26075=>5086,26073=>5087,12102=>5088,26080=>5088,11931=>5089,26081=>5089,26097=>5090,26482=>5091,26122=>5092,26115=>5093,26107=>5094,26483=>5095,26165=>5096,26166=>5097,26164=>5098,26140=>5099,26191=>5100,26180=>5101,26185=>5102,26177=>5103,26206=>5104,26205=>5105,26212=>5106,26215=>5107,26216=>5108,26207=>5109,26210=>5110,26224=>5111,26243=>5112,26248=>5113,26254=>5114,26249=>5115,26244=>5116,26264=>5117,26269=>5118,26305=>5119,26297=>5120,26313=>5121,26302=>5122,26300=>5123,26308=>5124,26296=>5125,26326=>5126,26330=>5127,26336=>5128,26175=>5129,26342=>5130,26345=>5131,12104=>5132,26352=>5132,26357=>5133,26359=>5134,26383=>5135,26390=>5136,26398=>5137,26406=>5138,26407=>5139,38712=>5140,26414=>5141,26431=>5142,26422=>5143,26433=>5144,26424=>5145,26423=>5146,26438=>5147,26462=>5148,26464=>5149,26457=>5150,26467=>5151,26468=>5152,26505=>5153,26480=>5154,26537=>5155,26492=>5156,26474=>5157,26508=>5158,26507=>5159,26534=>5160,26529=>5161,26501=>5162,26551=>5163,26607=>5164,26548=>5165,26604=>5166,26547=>5167,26601=>5168,26552=>5169,26596=>5170,26590=>5171,26589=>5172,26594=>5173,26606=>5174,26553=>5175,26574=>5176,26566=>5177,26599=>5178,27292=>5179,26654=>5180,26694=>5181,26665=>5182,26688=>5183,26701=>5184,26674=>5185,26702=>5186,26803=>5187,26667=>5188,26713=>5189,26723=>5190,26743=>5191,26751=>5192,26783=>5193,26767=>5194,26797=>5195,26772=>5196,26781=>5197,26779=>5198,26755=>5199,27310=>5200,26809=>5201,26740=>5202,26805=>5203,26784=>5204,26810=>5205,26895=>5206,26765=>5207,26750=>5208,26881=>5209,26826=>5210,26888=>5211,26840=>5212,26914=>5213,26918=>5214,26849=>5215,26892=>5216,26829=>5217,26836=>5218,26855=>5219,26837=>5220,26934=>5221,26898=>5222,26884=>5223,26839=>5224,26851=>5225,26917=>5226,26873=>5227,26848=>5228,26863=>5229,26920=>5230,26922=>5231,26906=>5232,26915=>5233,26913=>5234,26822=>5235,27001=>5236,26999=>5237,26972=>5238,27000=>5239,26987=>5240,26964=>5241,27006=>5242,26990=>5243,26937=>5244,26996=>5245,26941=>5246,26969=>5247,26928=>5248,26977=>5249,26974=>5250,26973=>5251,27009=>5252,26986=>5253,27058=>5254,27054=>5255,27088=>5256,27071=>5257,27073=>5258,27091=>5259,27070=>5260,27086=>5261,23528=>5262,27082=>5263,27101=>5264,27067=>5265,27075=>5266,27047=>5267,27182=>5268,27025=>5269,27040=>5270,27036=>5271,27029=>5272,27060=>5273,27102=>5274,27112=>5275,27138=>5276,27163=>5277,27135=>5278,27402=>5279,27129=>5280,27122=>5281,27111=>5282,27141=>5283,27057=>5284,27166=>5285,27117=>5286,27156=>5287,27115=>5288,27146=>5289,27154=>5290,27329=>5291,27171=>5292,27155=>5293,27204=>5294,27148=>5295,27250=>5296,27190=>5297,27256=>5298,27207=>5299,27234=>5300,27225=>5301,27238=>5302,27208=>5303,27192=>5304,27170=>5305,27280=>5306,27277=>5307,27296=>5308,27268=>5309,27298=>5310,27299=>5311,27287=>5312,34327=>5313,27323=>5314,27331=>5315,27330=>5316,27320=>5317,27315=>5318,27308=>5319,27358=>5320,27345=>5321,27359=>5322,27306=>5323,27354=>5324,27370=>5325,27387=>5326,27397=>5327,34326=>5328,27386=>5329,27410=>5330,27414=>5331,39729=>5332,27423=>5333,27448=>5334,27447=>5335,30428=>5336,27449=>5337,39150=>5338,27463=>5339,27459=>5340,27465=>5341,27472=>5342,27481=>5343,27476=>5344,27483=>5345,27487=>5346,27489=>5347,27512=>5348,12109=>5349,27513=>5349,27519=>5350,27520=>5351,27524=>5352,27523=>5353,27533=>5354,27544=>5355,27541=>5356,27550=>5357,27556=>5358,27562=>5359,27563=>5360,27567=>5361,27570=>5362,27569=>5363,12110=>5364,27571=>5364,27575=>5365,27580=>5366,27590=>5367,12111=>5368,27595=>5368,27603=>5369,27615=>5370,27628=>5371,27627=>5372,27635=>5373,27631=>5374,40638=>5375,27656=>5376,27667=>5377,12115=>5378,27668=>5378,27675=>5379,27684=>5380,27683=>5381,27742=>5382,27733=>5383,27746=>5384,27754=>5385,27778=>5386,27789=>5387,27802=>5388,27777=>5389,27803=>5390,27774=>5391,27752=>5392,27763=>5393,27794=>5394,27792=>5395,27844=>5396,27889=>5397,27859=>5398,27837=>5399,27863=>5400,27845=>5401,27869=>5402,27822=>5403,27825=>5404,27838=>5405,27834=>5406,27867=>5407,27887=>5408,27865=>5409,27882=>5410,27935=>5411,34893=>5412,27958=>5413,27947=>5414,27965=>5415,27960=>5416,27929=>5417,27957=>5418,27955=>5419,27922=>5420,27916=>5421,28003=>5422,28051=>5423,28004=>5424,27994=>5425,28025=>5426,27993=>5427,28046=>5428,28053=>5429,28644=>5430,28037=>5431,28153=>5432,28181=>5433,28170=>5434,28085=>5435,28103=>5436,28134=>5437,28088=>5438,28102=>5439,28140=>5440,28126=>5441,28108=>5442,28136=>5443,28114=>5444,28101=>5445,28154=>5446,28121=>5447,28132=>5448,28117=>5449,28138=>5450,28142=>5451,28205=>5452,28270=>5453,28206=>5454,28185=>5455,28274=>5456,28255=>5457,28222=>5458,28195=>5459,28267=>5460,28203=>5461,28278=>5462,28237=>5463,28191=>5464,28227=>5465,28218=>5466,28238=>5467,28196=>5468,28415=>5469,28189=>5470,28216=>5471,28290=>5472,28330=>5473,28312=>5474,28361=>5475,28343=>5476,28371=>5477,28349=>5478,28335=>5479,28356=>5480,28338=>5481,28372=>5482,28373=>5483,28303=>5484,28325=>5485,28354=>5486,28319=>5487,28481=>5488,28433=>5489,28748=>5490,28396=>5491,28408=>5492,28414=>5493,28479=>5494,28402=>5495,28465=>5496,28399=>5497,28466=>5498,28364=>5499,28478=>5500,28435=>5501,28407=>5502,28550=>5503,28538=>5504,28536=>5505,28545=>5506,28544=>5507,28527=>5508,28507=>5509,28659=>5510,28525=>5511,28546=>5512,28540=>5513,28504=>5514,28558=>5515,28561=>5516,28610=>5517,28518=>5518,28595=>5519,28579=>5520,28577=>5521,28580=>5522,28601=>5523,28614=>5524,28586=>5525,28639=>5526,28629=>5527,28652=>5528,28628=>5529,28632=>5530,28657=>5531,28654=>5532,28635=>5533,28681=>5534,28683=>5535,28666=>5536,28689=>5537,28673=>5538,28687=>5539,28670=>5540,28699=>5541,28698=>5542,28532=>5543,28701=>5544,28696=>5545,28703=>5546,28720=>5547,28734=>5548,28722=>5549,28753=>5550,28771=>5551,28825=>5552,28818=>5553,28847=>5554,28913=>5555,28844=>5556,28856=>5557,28851=>5558,28846=>5559,28895=>5560,28875=>5561,28893=>5562,28889=>5563,28937=>5564,28925=>5565,28956=>5566,28953=>5567,29029=>5568,29013=>5569,29064=>5570,29030=>5571,29026=>5572,29004=>5573,29014=>5574,29036=>5575,29071=>5576,29179=>5577,29060=>5578,29077=>5579,29096=>5580,29100=>5581,29143=>5582,29113=>5583,29118=>5584,29138=>5585,29129=>5586,29140=>5587,29134=>5588,29152=>5589,29164=>5590,29159=>5591,29173=>5592,29180=>5593,29177=>5594,29183=>5595,29197=>5596,29200=>5597,29211=>5598,29224=>5599,29229=>5600,29228=>5601,29232=>5602,29234=>5603,12120=>5604,29243=>5604,29244=>5605,12121=>5606,29247=>5606,29248=>5607,29254=>5608,29259=>5609,29272=>5610,29300=>5611,29310=>5612,29314=>5613,29313=>5614,29319=>5615,29330=>5616,29334=>5617,29346=>5618,29351=>5619,29369=>5620,29362=>5621,29379=>5622,29382=>5623,29380=>5624,29390=>5625,29394=>5626,29410=>5627,29408=>5628,29409=>5629,29433=>5630,29431=>5631,20495=>5632,29463=>5633,29450=>5634,29468=>5635,29462=>5636,29469=>5637,29492=>5638,29487=>5639,29481=>5640,29477=>5641,29502=>5642,29518=>5643,29519=>5644,40664=>5645,29527=>5646,29546=>5647,29544=>5648,29552=>5649,29560=>5650,29557=>5651,29563=>5652,29562=>5653,29640=>5654,29619=>5655,29646=>5656,29627=>5657,29632=>5658,29669=>5659,29678=>5660,29662=>5661,29858=>5662,29701=>5663,29807=>5664,29733=>5665,29688=>5666,29746=>5667,29754=>5668,29781=>5669,29759=>5670,29791=>5671,29785=>5672,29761=>5673,29788=>5674,29801=>5675,29808=>5676,29795=>5677,29802=>5678,29814=>5679,29822=>5680,29835=>5681,29854=>5682,29863=>5683,29898=>5684,29903=>5685,29908=>5686,29681=>5687,29920=>5688,29923=>5689,29927=>5690,29929=>5691,29934=>5692,29938=>5693,29936=>5694,29937=>5695,29944=>5696,29943=>5697,29956=>5698,29955=>5699,29957=>5700,29964=>5701,29966=>5702,29965=>5703,29973=>5704,29971=>5705,29982=>5706,29990=>5707,29996=>5708,30012=>5709,30020=>5710,30029=>5711,30026=>5712,30025=>5713,30043=>5714,30022=>5715,30042=>5716,30057=>5717,30052=>5718,30055=>5719,30059=>5720,30061=>5721,30072=>5722,30070=>5723,30086=>5724,30087=>5725,30068=>5726,30090=>5727,30089=>5728,30082=>5729,30100=>5730,30106=>5731,30109=>5732,30117=>5733,30115=>5734,30146=>5735,30131=>5736,30147=>5737,30133=>5738,30141=>5739,30136=>5740,30140=>5741,30129=>5742,30157=>5743,30154=>5744,30162=>5745,30169=>5746,30179=>5747,30174=>5748,30206=>5749,30207=>5750,30204=>5751,30209=>5752,30192=>5753,30202=>5754,30194=>5755,30195=>5756,30219=>5757,30221=>5758,30217=>5759,30239=>5760,30247=>5761,30240=>5762,30241=>5763,30242=>5764,30244=>5765,30260=>5766,30256=>5767,30267=>5768,30279=>5769,30280=>5770,30278=>5771,30300=>5772,30296=>5773,30305=>5774,30306=>5775,30312=>5776,30313=>5777,30314=>5778,30311=>5779,30316=>5780,30320=>5781,30322=>5782,12136=>5783,30326=>5783,30328=>5784,30332=>5785,30336=>5786,30339=>5787,30344=>5788,30347=>5789,30350=>5790,30358=>5791,30355=>5792,30361=>5793,30362=>5794,30384=>5795,30388=>5796,30392=>5797,30393=>5798,30394=>5799,30402=>5800,30413=>5801,30422=>5802,30418=>5803,30430=>5804,30433=>5805,30437=>5806,30439=>5807,30442=>5808,34351=>5809,30459=>5810,30472=>5811,30471=>5812,30468=>5813,30505=>5814,30500=>5815,30494=>5816,30501=>5817,30502=>5818,30491=>5819,30519=>5820,30520=>5821,30535=>5822,30554=>5823,30568=>5824,30571=>5825,30555=>5826,30565=>5827,30591=>5828,30590=>5829,30585=>5830,30606=>5831,30603=>5832,30609=>5833,30624=>5834,30622=>5835,30640=>5836,30646=>5837,30649=>5838,30655=>5839,30652=>5840,30653=>5841,30651=>5842,30663=>5843,30669=>5844,30679=>5845,30682=>5846,30684=>5847,30691=>5848,30702=>5849,30716=>5850,30732=>5851,30738=>5852,31014=>5853,30752=>5854,31018=>5855,30789=>5856,30862=>5857,30836=>5858,30854=>5859,30844=>5860,30874=>5861,30860=>5862,30883=>5863,30901=>5864,30890=>5865,30895=>5866,30929=>5867,30918=>5868,30923=>5869,30932=>5870,30910=>5871,30908=>5872,30917=>5873,30922=>5874,30956=>5875,30951=>5876,30938=>5877,30973=>5878,30964=>5879,30983=>5880,30994=>5881,30993=>5882,31001=>5883,31020=>5884,31019=>5885,31040=>5886,31072=>5887,31063=>5888,31071=>5889,31066=>5890,31061=>5891,31059=>5892,31098=>5893,31103=>5894,31114=>5895,31133=>5896,31143=>5897,40779=>5898,31146=>5899,31150=>5900,31155=>5901,31161=>5902,31162=>5903,31177=>5904,31189=>5905,31207=>5906,31212=>5907,31201=>5908,31203=>5909,31240=>5910,31245=>5911,31256=>5912,31257=>5913,31264=>5914,31263=>5915,31104=>5916,31281=>5917,31291=>5918,31294=>5919,31287=>5920,31299=>5921,31319=>5922,31305=>5923,31329=>5924,31330=>5925,31337=>5926,40861=>5927,31344=>5928,31353=>5929,31357=>5930,31368=>5931,31383=>5932,31381=>5933,31384=>5934,31382=>5935,31401=>5936,31432=>5937,31408=>5938,31414=>5939,31429=>5940,31428=>5941,31423=>5942,36995=>5943,31431=>5944,31434=>5945,31437=>5946,31439=>5947,31445=>5948,31443=>5949,31449=>5950,31450=>5951,31453=>5952,31457=>5953,31458=>5954,31462=>5955,31469=>5956,31472=>5957,31490=>5958,31503=>5959,31498=>5960,31494=>5961,31539=>5962,31512=>5963,31513=>5964,31518=>5965,31541=>5966,31528=>5967,31542=>5968,31568=>5969,31610=>5970,31492=>5971,31565=>5972,31499=>5973,31564=>5974,31557=>5975,31605=>5976,31589=>5977,31604=>5978,31591=>5979,31600=>5980,31601=>5981,31596=>5982,31598=>5983,31645=>5984,31640=>5985,31647=>5986,31629=>5987,31644=>5988,31642=>5989,31627=>5990,31634=>5991,31631=>5992,31581=>5993,31641=>5994,31691=>5995,31681=>5996,31692=>5997,31695=>5998,31668=>5999,31686=>6000,31709=>6001,31721=>6002,31761=>6003,31764=>6004,31718=>6005,31717=>6006,31840=>6007,31744=>6008,31751=>6009,31763=>6010,31731=>6011,31735=>6012,31767=>6013,31757=>6014,31734=>6015,31779=>6016,31783=>6017,31786=>6018,31775=>6019,31799=>6020,31787=>6021,31805=>6022,31820=>6023,31811=>6024,31828=>6025,31823=>6026,31808=>6027,31824=>6028,31832=>6029,31839=>6030,31844=>6031,31830=>6032,31845=>6033,31852=>6034,31861=>6035,31875=>6036,31888=>6037,31908=>6038,31917=>6039,31906=>6040,31915=>6041,31905=>6042,31912=>6043,31923=>6044,31922=>6045,31921=>6046,31918=>6047,31929=>6048,31933=>6049,31936=>6050,31941=>6051,31938=>6052,31960=>6053,31954=>6054,31964=>6055,31970=>6056,39739=>6057,31983=>6058,31986=>6059,31988=>6060,31990=>6061,31994=>6062,32006=>6063,32002=>6064,32028=>6065,32021=>6066,32010=>6067,32069=>6068,32075=>6069,32046=>6070,32050=>6071,32063=>6072,32053=>6073,32070=>6074,32115=>6075,32086=>6076,32078=>6077,32114=>6078,32104=>6079,32110=>6080,32079=>6081,32099=>6082,32147=>6083,32137=>6084,32091=>6085,32143=>6086,32125=>6087,32155=>6088,32186=>6089,32174=>6090,32163=>6091,32181=>6092,32199=>6093,32189=>6094,32171=>6095,32317=>6096,32162=>6097,32175=>6098,32220=>6099,32184=>6100,32159=>6101,32176=>6102,32216=>6103,32221=>6104,32228=>6105,32222=>6106,32251=>6107,32242=>6108,32225=>6109,32261=>6110,32266=>6111,32291=>6112,32289=>6113,32274=>6114,32305=>6115,32287=>6116,32265=>6117,32267=>6118,32290=>6119,32326=>6120,32358=>6121,32315=>6122,32309=>6123,32313=>6124,32323=>6125,32311=>6126,32306=>6127,32314=>6128,32359=>6129,32349=>6130,32342=>6131,32350=>6132,32345=>6133,32346=>6134,32377=>6135,32362=>6136,32361=>6137,32380=>6138,32379=>6139,32387=>6140,32213=>6141,32381=>6142,36782=>6143,32383=>6144,32392=>6145,32393=>6146,32396=>6147,32402=>6148,32400=>6149,32403=>6150,32404=>6151,32406=>6152,32398=>6153,32411=>6154,32412=>6155,32568=>6156,32570=>6157,32581=>6158,32588=>6159,32589=>6160,32590=>6161,32592=>6162,12153=>6163,32593=>6163,32597=>6164,32596=>6165,32600=>6166,32607=>6167,32608=>6168,32616=>6169,32617=>6170,32615=>6171,32632=>6172,32642=>6173,32646=>6174,32643=>6175,32648=>6176,32647=>6177,32652=>6178,32660=>6179,32670=>6180,32669=>6181,32666=>6182,32675=>6183,32687=>6184,32690=>6185,32697=>6186,32686=>6187,32694=>6188,32696=>6189,35697=>6190,32709=>6191,32710=>6192,32714=>6193,32725=>6194,32724=>6195,32737=>6196,32742=>6197,32745=>6198,32755=>6199,32761=>6200,39132=>6201,32774=>6202,32772=>6203,32779=>6204,12158=>6205,32786=>6205,32792=>6206,32793=>6207,32796=>6208,32801=>6209,32808=>6210,32831=>6211,32827=>6212,32842=>6213,32838=>6214,32850=>6215,32856=>6216,32858=>6217,32863=>6218,32866=>6219,32872=>6220,32883=>6221,32882=>6222,32880=>6223,32886=>6224,32889=>6225,32893=>6226,12160=>6227,32895=>6227,32900=>6228,32902=>6229,32901=>6230,32923=>6231,32915=>6232,32922=>6233,32941=>6234,20880=>6235,32940=>6236,32987=>6237,32997=>6238,32985=>6239,32989=>6240,32964=>6241,32986=>6242,32982=>6243,33033=>6244,33007=>6245,33009=>6246,33051=>6247,33065=>6248,33059=>6249,33071=>6250,33099=>6251,38539=>6252,33094=>6253,33086=>6254,33107=>6255,33105=>6256,33020=>6257,33137=>6258,33134=>6259,33125=>6260,33126=>6261,33140=>6262,33155=>6263,33160=>6264,33162=>6265,33152=>6266,33154=>6267,33184=>6268,33173=>6269,33188=>6270,33187=>6271,33119=>6272,33171=>6273,33193=>6274,33200=>6275,33205=>6276,33214=>6277,33208=>6278,33213=>6279,33216=>6280,33218=>6281,33210=>6282,33225=>6283,33229=>6284,33233=>6285,33241=>6286,33240=>6287,33224=>6288,33242=>6289,33247=>6290,33248=>6291,33255=>6292,33274=>6293,33275=>6294,33278=>6295,33281=>6296,33282=>6297,33285=>6298,33287=>6299,33290=>6300,33293=>6301,33296=>6302,33302=>6303,33321=>6304,33323=>6305,33336=>6306,33331=>6307,33344=>6308,33369=>6309,33368=>6310,33373=>6311,33370=>6312,33375=>6313,33380=>6314,33378=>6315,33384=>6316,33386=>6317,33387=>6318,33326=>6319,33393=>6320,33399=>6321,12171=>6322,33400=>6322,33406=>6323,33421=>6324,33426=>6325,33451=>6326,33439=>6327,33467=>6328,33452=>6329,33505=>6330,33507=>6331,33503=>6332,33490=>6333,33524=>6334,33523=>6335,33530=>6336,33683=>6337,33539=>6338,33531=>6339,33529=>6340,33502=>6341,33542=>6342,33500=>6343,33545=>6344,33497=>6345,33589=>6346,33588=>6347,33558=>6348,33586=>6349,33585=>6350,33600=>6351,33593=>6352,33616=>6353,33605=>6354,33583=>6355,33579=>6356,33559=>6357,33560=>6358,33669=>6359,33690=>6360,33706=>6361,33695=>6362,33698=>6363,33686=>6364,33571=>6365,33678=>6366,33671=>6367,33674=>6368,33660=>6369,33717=>6370,33651=>6371,33653=>6372,33696=>6373,33673=>6374,33704=>6375,33780=>6376,33811=>6377,33771=>6378,33742=>6379,33789=>6380,33795=>6381,33752=>6382,33803=>6383,33729=>6384,33783=>6385,33799=>6386,33760=>6387,33778=>6388,33805=>6389,33826=>6390,33824=>6391,33725=>6392,33848=>6393,34054=>6394,33787=>6395,33901=>6396,33834=>6397,33852=>6398,34138=>6399,33924=>6400,33911=>6401,33899=>6402,33965=>6403,33902=>6404,33922=>6405,33897=>6406,33862=>6407,33836=>6408,33903=>6409,33913=>6410,33845=>6411,33994=>6412,33890=>6413,33977=>6414,33983=>6415,33951=>6416,34009=>6417,33997=>6418,33979=>6419,34010=>6420,34000=>6421,33985=>6422,33990=>6423,34006=>6424,33953=>6425,34081=>6426,34047=>6427,34036=>6428,34071=>6429,34072=>6430,34092=>6431,34079=>6432,34069=>6433,34068=>6434,34044=>6435,34112=>6436,34147=>6437,34136=>6438,34120=>6439,34113=>6440,34306=>6441,34123=>6442,34133=>6443,34176=>6444,34212=>6445,34184=>6446,34193=>6447,34186=>6448,34216=>6449,34157=>6450,34196=>6451,34203=>6452,34282=>6453,34183=>6454,34204=>6455,34167=>6456,34174=>6457,34192=>6458,34249=>6459,34234=>6460,34255=>6461,34233=>6462,34256=>6463,34261=>6464,34269=>6465,34277=>6466,34268=>6467,34297=>6468,34314=>6469,34323=>6470,34315=>6471,34302=>6472,34298=>6473,34310=>6474,34338=>6475,34330=>6476,34352=>6477,34367=>6478,12172=>6479,34381=>6479,20053=>6480,34388=>6481,34399=>6482,34407=>6483,34417=>6484,34451=>6485,34467=>6486,34473=>6487,34474=>6488,34443=>6489,34444=>6490,34486=>6491,34479=>6492,34500=>6493,34502=>6494,34480=>6495,34505=>6496,34851=>6497,34475=>6498,34516=>6499,34526=>6500,34537=>6501,34540=>6502,34527=>6503,34523=>6504,34543=>6505,34578=>6506,34566=>6507,34568=>6508,34560=>6509,34563=>6510,34555=>6511,34577=>6512,34569=>6513,34573=>6514,34553=>6515,34570=>6516,34612=>6517,34623=>6518,34615=>6519,34619=>6520,34597=>6521,34601=>6522,34586=>6523,34656=>6524,34655=>6525,34680=>6526,34636=>6527,34638=>6528,34676=>6529,34647=>6530,34664=>6531,34670=>6532,34649=>6533,34643=>6534,34659=>6535,34666=>6536,34821=>6537,34722=>6538,34719=>6539,34690=>6540,34735=>6541,34763=>6542,34749=>6543,34752=>6544,34768=>6545,38614=>6546,34731=>6547,34756=>6548,34739=>6549,34759=>6550,34758=>6551,34747=>6552,34799=>6553,34802=>6554,34784=>6555,34831=>6556,34829=>6557,34814=>6558,34806=>6559,34807=>6560,34830=>6561,34770=>6562,34833=>6563,34838=>6564,34837=>6565,34850=>6566,34849=>6567,34865=>6568,34870=>6569,34873=>6570,34855=>6571,34875=>6572,34884=>6573,34882=>6574,34898=>6575,34905=>6576,34910=>6577,34914=>6578,34923=>6579,34945=>6580,34942=>6581,34974=>6582,34933=>6583,34941=>6584,34997=>6585,34930=>6586,34946=>6587,34967=>6588,34962=>6589,34990=>6590,34969=>6591,34978=>6592,34957=>6593,34980=>6594,34992=>6595,35007=>6596,34993=>6597,35011=>6598,35012=>6599,35028=>6600,35032=>6601,35033=>6602,35037=>6603,35065=>6604,35074=>6605,35068=>6606,35060=>6607,35048=>6608,35058=>6609,35076=>6610,35084=>6611,35082=>6612,35091=>6613,35139=>6614,35102=>6615,35109=>6616,35114=>6617,35115=>6618,35137=>6619,35140=>6620,35131=>6621,35126=>6622,35128=>6623,35148=>6624,35101=>6625,35168=>6626,35166=>6627,35174=>6628,35172=>6629,35181=>6630,35178=>6631,35183=>6632,35188=>6633,35191=>6634,12177=>6635,35198=>6635,35203=>6636,35208=>6637,35210=>6638,35219=>6639,35224=>6640,35233=>6641,35241=>6642,35238=>6643,35244=>6644,35247=>6645,35250=>6646,35258=>6647,35261=>6648,35263=>6649,35264=>6650,35290=>6651,35292=>6652,35293=>6653,35303=>6654,35316=>6655,35320=>6656,35331=>6657,35350=>6658,35344=>6659,35340=>6660,35355=>6661,35357=>6662,35365=>6663,35382=>6664,35393=>6665,35419=>6666,35410=>6667,35398=>6668,35400=>6669,35452=>6670,35437=>6671,35436=>6672,35426=>6673,35461=>6674,35458=>6675,35460=>6676,35496=>6677,35489=>6678,35473=>6679,35493=>6680,35494=>6681,35482=>6682,35491=>6683,35524=>6684,35533=>6685,35522=>6686,35546=>6687,35563=>6688,35571=>6689,35559=>6690,35556=>6691,35569=>6692,35604=>6693,35552=>6694,35554=>6695,35575=>6696,35550=>6697,35547=>6698,35596=>6699,35591=>6700,35610=>6701,35553=>6702,35606=>6703,35600=>6704,35607=>6705,35616=>6706,35635=>6707,38827=>6708,35622=>6709,35627=>6710,35646=>6711,35624=>6712,35649=>6713,35660=>6714,35663=>6715,35662=>6716,35657=>6717,35670=>6718,35675=>6719,35674=>6720,35691=>6721,35679=>6722,35692=>6723,35695=>6724,35700=>6725,35709=>6726,35712=>6727,35724=>6728,35726=>6729,35730=>6730,35731=>6731,35734=>6732,35737=>6733,35738=>6734,35898=>6735,35905=>6736,35903=>6737,35912=>6738,35916=>6739,35918=>6740,35920=>6741,12183=>6742,35925=>6742,35938=>6743,35948=>6744,12184=>6745,35960=>6745,35962=>6746,35970=>6747,35977=>6748,35973=>6749,35978=>6750,35981=>6751,35982=>6752,35988=>6753,35964=>6754,35992=>6755,25117=>6756,36013=>6757,36010=>6758,36029=>6759,36018=>6760,36019=>6761,36014=>6762,36022=>6763,36040=>6764,36033=>6765,36068=>6766,36067=>6767,36058=>6768,36093=>6769,36090=>6770,36091=>6771,36100=>6772,36101=>6773,36106=>6774,36103=>6775,36111=>6776,36109=>6777,36112=>6778,40782=>6779,36115=>6780,36045=>6781,36116=>6782,36118=>6783,36199=>6784,36205=>6785,36209=>6786,36211=>6787,36225=>6788,36249=>6789,36290=>6790,36286=>6791,36282=>6792,36303=>6793,36314=>6794,36310=>6795,36300=>6796,36315=>6797,36299=>6798,36330=>6799,36331=>6800,36319=>6801,36323=>6802,36348=>6803,36360=>6804,36361=>6805,36351=>6806,36381=>6807,36382=>6808,36368=>6809,36383=>6810,36418=>6811,36405=>6812,36400=>6813,36404=>6814,36426=>6815,36423=>6816,36425=>6817,36428=>6818,36432=>6819,36424=>6820,36441=>6821,36452=>6822,36448=>6823,36394=>6824,36451=>6825,36437=>6826,36470=>6827,36466=>6828,36476=>6829,36481=>6830,36487=>6831,36485=>6832,36484=>6833,36491=>6834,36490=>6835,36499=>6836,36497=>6837,36500=>6838,36505=>6839,36522=>6840,36513=>6841,36524=>6842,36528=>6843,36550=>6844,36529=>6845,36542=>6846,36549=>6847,36552=>6848,36555=>6849,36571=>6850,36579=>6851,36604=>6852,36603=>6853,36587=>6854,36606=>6855,36618=>6856,36613=>6857,36629=>6858,36626=>6859,36633=>6860,36627=>6861,36636=>6862,36639=>6863,36635=>6864,36620=>6865,36646=>6866,36659=>6867,36667=>6868,36665=>6869,36677=>6870,36674=>6871,36670=>6872,36684=>6873,36681=>6874,36678=>6875,36686=>6876,36695=>6877,36700=>6878,36706=>6879,36707=>6880,36708=>6881,36764=>6882,36767=>6883,36771=>6884,36781=>6885,36783=>6886,36791=>6887,36826=>6888,36837=>6889,36834=>6890,36842=>6891,36847=>6892,36999=>6893,36852=>6894,36869=>6895,36857=>6896,36858=>6897,36881=>6898,36885=>6899,36897=>6900,36877=>6901,36894=>6902,36886=>6903,36875=>6904,36903=>6905,36918=>6906,36917=>6907,36921=>6908,36856=>6909,36943=>6910,36944=>6911,36945=>6912,36946=>6913,36878=>6914,36937=>6915,36926=>6916,36950=>6917,36952=>6918,36958=>6919,36968=>6920,36975=>6921,36982=>6922,38568=>6923,36978=>6924,36994=>6925,36989=>6926,36993=>6927,36992=>6928,37002=>6929,37001=>6930,37007=>6931,37032=>6932,37039=>6933,37041=>6934,37045=>6935,37090=>6936,37092=>6937,25160=>6938,37083=>6939,37122=>6940,37138=>6941,37145=>6942,37170=>6943,37168=>6944,37194=>6945,37206=>6946,37208=>6947,37219=>6948,37221=>6949,37225=>6950,37235=>6951,37234=>6952,37259=>6953,37257=>6954,37250=>6955,37282=>6956,37291=>6957,37295=>6958,37290=>6959,37301=>6960,37300=>6961,37306=>6962,37312=>6963,37313=>6964,37321=>6965,37323=>6966,37328=>6967,37334=>6968,37343=>6969,37345=>6970,37339=>6971,37372=>6972,37365=>6973,37366=>6974,37406=>6975,37375=>6976,37396=>6977,37420=>6978,37397=>6979,37393=>6980,37470=>6981,37463=>6982,37445=>6983,37449=>6984,37476=>6985,37448=>6986,37525=>6987,37439=>6988,37451=>6989,37456=>6990,37532=>6991,37526=>6992,37523=>6993,37531=>6994,37466=>6995,37583=>6996,37561=>6997,37559=>6998,37609=>6999,37647=>7000,37626=>7001,37700=>7002,37678=>7003,37657=>7004,37666=>7005,37658=>7006,37667=>7007,37690=>7008,37685=>7009,37691=>7010,37724=>7011,37728=>7012,37756=>7013,37742=>7014,37718=>7015,37808=>7016,37804=>7017,37805=>7018,37780=>7019,37817=>7020,37846=>7021,37847=>7022,37864=>7023,37861=>7024,37848=>7025,37827=>7026,37853=>7027,37840=>7028,37832=>7029,37860=>7030,37914=>7031,37908=>7032,37907=>7033,37891=>7034,37895=>7035,37904=>7036,37942=>7037,37931=>7038,37941=>7039,37921=>7040,37946=>7041,37953=>7042,37970=>7043,37956=>7044,37979=>7045,37984=>7046,37986=>7047,37982=>7048,37994=>7049,37417=>7050,38000=>7051,38005=>7052,38007=>7053,38013=>7054,37978=>7055,38012=>7056,38014=>7057,38017=>7058,38015=>7059,38274=>7060,38279=>7061,38282=>7062,38292=>7063,38294=>7064,38296=>7065,38297=>7066,38304=>7067,38312=>7068,38311=>7069,38317=>7070,38332=>7071,38331=>7072,38329=>7073,38334=>7074,38346=>7075,28662=>7076,38339=>7077,38349=>7078,38348=>7079,38357=>7080,38356=>7081,38358=>7082,38364=>7083,38369=>7084,38373=>7085,38370=>7086,38433=>7087,38440=>7088,38446=>7089,38447=>7090,38466=>7091,38476=>7092,38479=>7093,38475=>7094,38519=>7095,38492=>7096,38494=>7097,38493=>7098,38495=>7099,38502=>7100,38514=>7101,38508=>7102,38541=>7103,38552=>7104,38549=>7105,38551=>7106,38570=>7107,38567=>7108,38577=>7109,38578=>7110,38576=>7111,38580=>7112,12202=>7113,38582=>7113,38584=>7114,12203=>7115,38585=>7115,38606=>7116,38603=>7117,38601=>7118,38605=>7119,35149=>7120,38620=>7121,38669=>7122,38613=>7123,38649=>7124,38660=>7125,38662=>7126,38664=>7127,38675=>7128,38670=>7129,38673=>7130,38671=>7131,38678=>7132,38681=>7133,38692=>7134,38698=>7135,38704=>7136,38713=>7137,38717=>7138,38718=>7139,38724=>7140,38726=>7141,38728=>7142,38722=>7143,38729=>7144,38748=>7145,38752=>7146,38756=>7147,38758=>7148,38760=>7149,21202=>7150,38763=>7151,38769=>7152,38777=>7153,38789=>7154,38780=>7155,38785=>7156,38778=>7157,38790=>7158,38795=>7159,38799=>7160,38800=>7161,38812=>7162,38824=>7163,38822=>7164,38819=>7165,38835=>7166,38836=>7167,38851=>7168,38854=>7169,38856=>7170,12209=>7171,38859=>7171,38876=>7172,12210=>7173,38893=>7173,40783=>7174,38898=>7175,31455=>7176,38902=>7177,38901=>7178,38927=>7179,38924=>7180,38968=>7181,38948=>7182,38945=>7183,38967=>7184,38973=>7185,38982=>7186,38991=>7187,38987=>7188,39019=>7189,39023=>7190,39024=>7191,39025=>7192,39028=>7193,39027=>7194,39082=>7195,39087=>7196,39089=>7197,39094=>7198,39108=>7199,39107=>7200,39110=>7201,39145=>7202,39147=>7203,39171=>7204,39177=>7205,39186=>7206,39188=>7207,39192=>7208,39201=>7209,39197=>7210,39198=>7211,39204=>7212,39200=>7213,39212=>7214,39214=>7215,39229=>7216,39230=>7217,39234=>7218,39241=>7219,39237=>7220,39248=>7221,39243=>7222,39249=>7223,39250=>7224,39244=>7225,39253=>7226,39319=>7227,39320=>7228,39333=>7229,39341=>7230,39342=>7231,39356=>7232,39391=>7233,39387=>7234,39389=>7235,39384=>7236,39377=>7237,39405=>7238,39406=>7239,39409=>7240,39410=>7241,39419=>7242,39416=>7243,39425=>7244,39439=>7245,39429=>7246,39394=>7247,39449=>7248,39467=>7249,39479=>7250,39493=>7251,39490=>7252,39488=>7253,39491=>7254,39486=>7255,39509=>7256,39501=>7257,39515=>7258,39511=>7259,39519=>7260,39522=>7261,39525=>7262,39524=>7263,39529=>7264,39531=>7265,39530=>7266,39597=>7267,39600=>7268,39612=>7269,39616=>7270,39631=>7271,39633=>7272,39635=>7273,39636=>7274,39646=>7275,12221=>7276,39647=>7276,39650=>7277,39651=>7278,39654=>7279,39663=>7280,39659=>7281,39662=>7282,39668=>7283,39665=>7284,39671=>7285,39675=>7286,39686=>7287,39704=>7288,39706=>7289,39711=>7290,39714=>7291,39715=>7292,12222=>7293,39717=>7293,39719=>7294,39720=>7295,39721=>7296,39722=>7297,39726=>7298,12223=>7299,39727=>7299,39730=>7300,12224=>7300,39748=>7301,39747=>7302,39759=>7303,39757=>7304,39758=>7305,39761=>7306,39768=>7307,39796=>7308,39827=>7309,39811=>7310,39825=>7311,39830=>7312,39831=>7313,39839=>7314,39840=>7315,39848=>7316,39860=>7317,39872=>7318,39882=>7319,39865=>7320,39878=>7321,39887=>7322,39889=>7323,39890=>7324,39907=>7325,39906=>7326,39908=>7327,39892=>7328,39905=>7329,39994=>7330,39922=>7331,39921=>7332,39920=>7333,39957=>7334,39956=>7335,39945=>7336,39955=>7337,39948=>7338,39942=>7339,39944=>7340,39954=>7341,39946=>7342,39940=>7343,39982=>7344,39963=>7345,39973=>7346,39972=>7347,39969=>7348,39984=>7349,40007=>7350,39986=>7351,40006=>7352,39998=>7353,40026=>7354,40032=>7355,40039=>7356,40054=>7357,40056=>7358,40167=>7359,40172=>7360,40176=>7361,40201=>7362,40200=>7363,40171=>7364,40195=>7365,40198=>7366,40234=>7367,40230=>7368,40367=>7369,40227=>7370,40223=>7371,40260=>7372,40213=>7373,40210=>7374,40257=>7375,40255=>7376,40254=>7377,40262=>7378,40264=>7379,40285=>7380,40286=>7381,40292=>7382,40273=>7383,40272=>7384,40281=>7385,40306=>7386,40329=>7387,40327=>7388,40363=>7389,40303=>7390,40314=>7391,40346=>7392,40356=>7393,40361=>7394,40370=>7395,40388=>7396,40385=>7397,40379=>7398,40376=>7399,40378=>7400,40390=>7401,40399=>7402,40386=>7403,40409=>7404,40403=>7405,40440=>7406,40422=>7407,40429=>7408,40431=>7409,40445=>7410,40474=>7411,40475=>7412,40478=>7413,12228=>7414,40565=>7414,40569=>7415,40573=>7416,40577=>7417,40584=>7418,40587=>7419,40588=>7420,40594=>7421,40597=>7422,40593=>7423,40605=>7424,12230=>7425,40613=>7425,40617=>7426,40632=>7427,40618=>7428,40621=>7429,38753=>7430,40652=>7431,40654=>7432,40655=>7433,40656=>7434,40660=>7435,40668=>7436,40670=>7437,40669=>7438,40672=>7439,40677=>7440,40680=>7441,40687=>7442,40692=>7443,40694=>7444,40695=>7445,12235=>7446,40697=>7446,40699=>7447,40700=>7448,12236=>7449,40701=>7449,40711=>7450,40712=>7451,30391=>7452,40725=>7453,40737=>7454,40748=>7455,40766=>7456,40778=>7457,12241=>7457,40786=>7458,12242=>7458,40788=>7459,40803=>7460,40799=>7461,40800=>7462,40801=>7463,40806=>7464,40807=>7465,40812=>7466,40810=>7467,40823=>7468,40818=>7469,40822=>7470,40853=>7471,40860=>7472,12244=>7472,40864=>7473,12245=>7473,22575=>7474,27079=>7475,36953=>7476,29796=>7477,9472=>7479,9473=>7480,9474=>7481,9475=>7482,9476=>7483,9477=>7484,9478=>7485,9479=>7486,9480=>7487,9481=>7488,9482=>7489,9483=>7490,9484=>7491,9485=>7492,9486=>7493,9487=>7494,9488=>7495,9489=>7496,9490=>7497,9491=>7498,9492=>7499,9493=>7500,9494=>7501,9495=>7502,9496=>7503,9497=>7504,9498=>7505,9499=>7506,9500=>7507,9501=>7508,9502=>7509,9503=>7510,9504=>7511,9505=>7512,9506=>7513,9507=>7514,9508=>7515,9509=>7516,9510=>7517,9511=>7518,9512=>7519,9513=>7520,9514=>7521,9515=>7522,9516=>7523,9517=>7524,9518=>7525,9519=>7526,9520=>7527,9521=>7528,9522=>7529,9523=>7530,9524=>7531,9525=>7532,9526=>7533,9527=>7534,9528=>7535,9529=>7536,9530=>7537,9531=>7538,9532=>7539,9533=>7540,9534=>7541,9535=>7542,9536=>7543,9537=>7544,9538=>7545,9539=>7546,9540=>7547,9541=>7548,9542=>7549,9543=>7550,9544=>7551,9545=>7552,9546=>7553,9547=>7554,9312=>7555,9313=>7556,9314=>7557,9315=>7558,9316=>7559,9317=>7560,9318=>7561,9319=>7562,9320=>7563,9321=>7564,9322=>7565,9323=>7566,9324=>7567,9325=>7568,9326=>7569,9327=>7570,9328=>7571,9329=>7572,9330=>7573,9331=>7574,8544=>7575,8545=>7576,8546=>7577,8547=>7578,8548=>7579,8549=>7580,8550=>7581,8551=>7582,8552=>7583,8553=>7584,13129=>7585,13076=>7586,13133=>7588,13095=>7590,13110=>7592,13137=>7593,13069=>7595,13094=>7596,13099=>7598,13130=>7599,13212=>7601,13213=>7602,13214=>7603,13198=>7604,13199=>7605,13252=>7606,13217=>7607,12317=>7608,12319=>7609,8470=>7610,13261=>7611,12964=>7613,12965=>7614,12966=>7615,12967=>7616,12968=>7617,12849=>7618,12850=>7619,12857=>7620,13182=>7621,13181=>7622,13180=>7623,8750=>7624,8721=>7625,8735=>7629,8895=>7630,21854=>7633,167133=>7641,28976=>7644,40407=>7646,64054=>7651,22169=>7654,15694=>7655,20448=>7660,36544=>7663,194797=>7665,153716=>7670,32363=>7671,33606=>7672,167670=>7673,40572=>7677,26171=>7680,40628=>7682,26629=>7687,23650=>7693,194780=>7695,32353=>7697,64070=>7700,34083=>7706,37292=>7707,34796=>7715,25620=>7724,39506=>7727,64074=>7732,194692=>7734,31774=>7739,64016=>7746,25681=>7747,63980=>7750,22625=>7751,39002=>7752,194679=>7754,31153=>7758,28678=>7760,22218=>7770,21085=>7774,28497=>7776,37297=>7777,64106=>7788,38960=>7795,40629=>7797,33802=>7807,63939=>7808,63890=>7809,63891=>7810,63897=>7811,34847=>7813,194575=>7814,194771=>7816,194584=>7817,137754=>7825,23643=>7826,25890=>7831,26618=>7834,26766=>7836,148432=>7838,194848=>7839,34110=>7861,30562=>7877,65041=>7887,65042=>7888,65075=>7890,65073=>7892,65074=>7893,8285=>7897,65049=>7897,8282=>7898,65072=>7898,65077=>7899,65078=>7900,65081=>7901,65082=>7902,65095=>7903,65096=>7904,65079=>7905,65080=>7906,65087=>7907,65088=>7908,65085=>7909,65086=>7910,65089=>7911,65090=>7912,65091=>7913,65092=>7914,65083=>7915,65084=>7916,12436=>7958,12437=>7959,12438=>7960,22099=>7963,65508=>8005,65287=>8006,65282=>8007,9665=>8009,9655=>8010,8681=>8011,8679=>8012,8678=>8013,8680=>8014,9634=>8015,9831=>8016,9825=>8017,9828=>8018,9826=>8019,13216=>8020,13218=>8021,13220=>8022,13221=>8023,13207=>8024,8467=>8025,13208=>8026,13235=>8027,13234=>8028,13233=>8029,13232=>8030,13189=>8031,13190=>8032,13191=>8033,13259=>8034,13200=>8035,13268=>8036,13206=>8037,13090=>8038,13078=>8039,13080=>8040,13077=>8041,13059=>8042,13091=>8043,13143=>8044,13122=>8045,13113=>8046,13115=>8047,13056=>8048,13105=>8049,13127=>8050,13086=>8051,13098=>8052,13183=>8054,8481=>8055,9742=>8056,12342=>8057,12320=>8058,9352=>8062,9353=>8063,9354=>8064,9355=>8065,9356=>8066,9357=>8067,9358=>8068,9359=>8069,9360=>8070,9332=>8071,9333=>8072,9334=>8073,9335=>8074,9336=>8075,9337=>8076,9338=>8077,9339=>8078,9340=>8079,9341=>8080,9342=>8081,9343=>8082,9344=>8083,9345=>8084,9346=>8085,9347=>8086,9348=>8087,9349=>8088,9350=>8089,9351=>8090,12881=>8091,8560=>8092,8561=>8093,8562=>8094,8563=>8095,8564=>8096,8565=>8097,8566=>8098,8567=>8099,8568=>8100,8569=>8101,12882=>8102,12883=>8103,12884=>8104,12885=>8105,12886=>8106,12887=>8107,12888=>8108,12889=>8109,12890=>8110,12891=>8111,9372=>8112,9373=>8113,9374=>8114,9375=>8115,9376=>8116,9377=>8117,9378=>8118,9379=>8119,9380=>8120,9381=>8121,9382=>8122,9383=>8123,9384=>8124,9385=>8125,9386=>8126,9387=>8127,9388=>8128,9389=>8129,9390=>8130,9391=>8131,9392=>8132,9393=>8133,9394=>8134,9395=>8135,9396=>8136,9397=>8137,12867=>8138,12861=>8139,12863=>8140,12852=>8141,12856=>8142,12851=>8143,12860=>8144,12866=>8145,12862=>8146,12854=>8147,12853=>8148,12859=>8149,12864=>8150,12858=>8151,12976=>8152,12973=>8153,12969=>8154,12975=>8155,12948=>8156,12970=>8157,12952=>8158,12971=>8159,12946=>8160,12945=>8161,12947=>8162,12972=>8163,12974=>8164,12950=>8165,9131=>8174,9132=>8175,9133=>8176,9127=>8178,9128=>8179,9129=>8180,13260=>8182,13061=>8183,13215=>8186,13219=>8187,13222=>8188,12958=>8191,13192=>8192,13193=>8193,13256=>8194,8749=>8195,12848=>8197,12842=>8198,12843=>8199,12844=>8200,12845=>8201,12846=>8202,12847=>8203,12855=>8204,12865=>8205,10145=>8206,11013=>8207,11014=>8208,11015=>8209,9673=>8210,9824=>8211,9829=>8212,9827=>8213,9830=>8214,9728=>8215,9729=>8216,9730=>8217,9731=>8218,9758=>8219,9756=>8220,9757=>8221,9759=>8222,12953=>8223,9450=>8224,8554=>8225,8555=>8226,9601=>8230,9602=>8231,9603=>8232,9604=>8233,9605=>8234,9606=>8235,9607=>8236,9608=>8237,9615=>8238,9614=>8239,9613=>8240,9612=>8241,9611=>8242,9610=>8243,9609=>8244,9620=>8245,9621=>8246,9581=>8247,9582=>8248,9584=>8249,9583=>8250,9552=>8251,9566=>8252,9578=>8253,9569=>8254,9698=>8255,9699=>8256,9701=>8257,9700=>8258,9585=>8261,9586=>8262,9587=>8263,65040=>8268,20956=>8284,29081=>8285,10102=>8286,10103=>8287,10104=>8288,10105=>8289,10106=>8290,10107=>8291,10108=>8292,10109=>8293,10110=>8294,8570=>8298,8571=>8299,8575=>8303,8458=>8304,8457=>8305,8507=>8307,12292=>8308,8646=>8309,8644=>8310,8645=>8311,12535=>8313,12536=>8314,12537=>8315,12538=>8316,12957=>8319,13179=>8323,13107=>8327,13134=>8328,32394=>8359,35100=>8360,37704=>8361,37512=>8362,34012=>8363,20425=>8364,28859=>8365,26161=>8366,26824=>8367,37625=>8368,26363=>8369,24389=>8370,12033=>8371,20008=>8371,20193=>8372,20220=>8373,20224=>8374,20227=>8375,20281=>8376,20310=>8377,20370=>8378,20362=>8379,20378=>8380,20372=>8381,20429=>8382,20544=>8383,20514=>8384,20479=>8385,20510=>8386,20550=>8387,20592=>8388,20546=>8389,20628=>8390,20724=>8391,20696=>8392,20810=>8393,20836=>8394,20893=>8395,20926=>8396,20972=>8397,21013=>8398,21148=>8399,21158=>8400,21184=>8401,21211=>8402,21248=>8403,21284=>8405,21362=>8406,21395=>8407,21426=>8408,21469=>8409,64014=>8410,21660=>8411,21642=>8412,21673=>8413,21759=>8414,21894=>8415,22361=>8416,22373=>8417,22444=>8418,22472=>8419,22471=>8420,64015=>8421,22686=>8423,22706=>8424,22795=>8425,22867=>8426,22875=>8427,22877=>8428,22883=>8429,22948=>8430,22970=>8431,23382=>8432,23488=>8433,29999=>8434,23512=>8435,23582=>8437,23718=>8438,23738=>8439,23797=>8440,23847=>8441,23891=>8442,23874=>8444,23917=>8445,23992=>8446,23993=>8447,24016=>8448,24353=>8449,24372=>8450,24423=>8451,24503=>8452,24542=>8453,24669=>8454,24709=>8455,24714=>8456,24798=>8457,24789=>8458,24864=>8459,24818=>8460,24849=>8461,24887=>8462,24880=>8463,24984=>8464,25107=>8465,25254=>8466,25589=>8467,25696=>8468,25757=>8469,25806=>8470,25934=>8471,26112=>8472,26133=>8473,26121=>8474,26158=>8475,26148=>8477,26213=>8478,26199=>8479,26201=>8480,64018=>8481,26227=>8482,26265=>8483,26272=>8484,26290=>8485,26303=>8486,26362=>8487,26382=>8488,26470=>8490,26555=>8491,26706=>8492,26560=>8493,26692=>8495,26831=>8496,64019=>8497,26984=>8498,64020=>8499,27032=>8500,27106=>8501,27184=>8502,27243=>8503,27206=>8504,27251=>8505,27262=>8506,27362=>8507,27364=>8508,27606=>8509,27711=>8510,27740=>8511,27782=>8512,27759=>8513,27866=>8514,27908=>8515,28039=>8516,28015=>8517,28054=>8518,28076=>8519,28111=>8520,28152=>8521,28146=>8522,28156=>8523,28217=>8524,28252=>8525,28199=>8526,28220=>8527,28351=>8528,28552=>8529,28597=>8530,28661=>8531,28677=>8532,28679=>8533,28712=>8534,28805=>8535,28843=>8536,28943=>8537,28932=>8538,29020=>8539,28998=>8540,28999=>8541,29121=>8543,29182=>8544,29361=>8545,29374=>8546,29476=>8547,64022=>8548,29559=>8549,29629=>8550,29641=>8551,29654=>8552,29667=>8553,29650=>8554,29703=>8555,29685=>8556,29734=>8557,29738=>8558,29737=>8559,29742=>8560,29833=>8562,29855=>8563,29953=>8564,30063=>8565,30338=>8566,30364=>8567,30366=>8568,30363=>8569,30374=>8570,64023=>8571,30534=>8572,21167=>8573,30753=>8574,30798=>8575,30820=>8576,30842=>8577,31024=>8578,64024=>8579,64025=>8580,64026=>8581,31124=>8582,64027=>8583,31131=>8584,31441=>8585,31463=>8586,64028=>8587,31467=>8588,31646=>8589,64029=>8590,32072=>8591,32183=>8593,32160=>8594,32214=>8595,32338=>8596,32583=>8597,32673=>8598,64030=>8599,33537=>8600,33634=>8601,33663=>8602,33735=>8603,33782=>8604,33864=>8605,33972=>8606,34131=>8607,34137=>8608,34155=>8609,64031=>8610,34224=>8611,64032=>8612,64033=>8613,34823=>8614,35061=>8615,35346=>8616,35383=>8617,35449=>8618,35495=>8619,35518=>8620,35551=>8621,64034=>8622,35574=>8623,35667=>8624,35711=>8625,36080=>8626,36084=>8627,36114=>8628,36214=>8629,64035=>8630,36559=>8631,64037=>8633,36967=>8634,37086=>8635,64038=>8636,37141=>8637,37159=>8638,37338=>8639,37335=>8640,37342=>8641,37357=>8642,37358=>8643,37348=>8644,37349=>8645,37382=>8646,37392=>8647,37386=>8648,37434=>8649,37440=>8650,37436=>8651,37454=>8652,37465=>8653,37457=>8654,37433=>8655,37479=>8656,37543=>8657,37495=>8658,37496=>8659,37607=>8660,37591=>8661,37593=>8662,37584=>8663,64039=>8664,37589=>8665,37600=>8666,37587=>8667,37669=>8668,37665=>8669,37627=>8670,64040=>8671,37662=>8672,37631=>8673,37661=>8674,37634=>8675,37744=>8676,37719=>8677,37796=>8678,37830=>8679,37854=>8680,37880=>8681,37937=>8682,37957=>8683,37960=>8684,38290=>8685,64041=>8687,38557=>8688,38575=>8689,38707=>8690,38715=>8691,38723=>8692,38733=>8693,38735=>8694,12205=>8695,38737=>8695,38999=>8697,39013=>8698,64042=>8699,64043=>8700,39207=>8701,64044=>8702,39326=>8703,39502=>8704,39641=>8705,39644=>8706,39797=>8707,39794=>8708,39823=>8709,39857=>8710,39867=>8711,39936=>8712,40304=>8713,40299=>8714,64045=>8715,40473=>8716,40657=>8717,8364=>9354,8486=>9355,64256=>9358,64259=>9359,64260=>9360,257=>9361,299=>9362,363=>9363,275=>9364,333=>9365,256=>9366,298=>9367,362=>9368,274=>9369,332=>9370,8539=>9371,8540=>9372,8541=>9373,8542=>9374,8531=>9375,8532=>9376,8304=>9377,8308=>9378,8309=>9379,8310=>9380,8311=>9381,8312=>9382,8313=>9383,8320=>9384,8321=>9385,8322=>9386,8323=>9387,8324=>9388,8325=>9389,8326=>9390,8327=>9391,8328=>9392,8329=>9393,461=>9394,282=>9395,7868=>9397,463=>9398,296=>9400,465=>9401,467=>9403,366=>9404,360=>9405,462=>9406,283=>9407,7869=>9409,464=>9410,297=>9412,466=>9413,468=>9415,367=>9416,361=>9417,593=>9418,8049=>9419,8048=>9420,509=>9421,596=>9423,601=>9426,602=>9429,603=>9432,8051=>9433,8050=>9434,567=>9435,331=>9436,629=>9437,652=>9438,658=>9441,643=>9442,720=>9443,8534=>9785,8535=>9786,8536=>9787,8537=>9788,8538=>9789,12832=>10126,12833=>10127,12834=>10128,12835=>10129,12836=>10130,12837=>10131,12838=>10132,12839=>10133,12840=>10134,12841=>10135,12892=>10244,12893=>10245,12894=>10246,12895=>10247,12977=>10248,12978=>10249,12979=>10250,12980=>10251,12981=>10252,12982=>10253,12983=>10254,12984=>10255,12985=>10256,12986=>10257,12987=>10258,12988=>10259,12989=>10260,12990=>10261,12991=>10262,9424=>10313,9425=>10314,9426=>10315,9427=>10316,9428=>10317,9429=>10318,9430=>10319,9431=>10320,9432=>10321,9433=>10322,9434=>10323,9435=>10324,9436=>10325,9437=>10326,9438=>10327,9439=>10328,9440=>10329,9441=>10330,9442=>10331,9443=>10332,9444=>10333,9445=>10334,9446=>10335,9447=>10336,9448=>10337,9449=>10338,9398=>10339,9399=>10340,9400=>10341,9401=>10342,9402=>10343,9403=>10344,9404=>10345,9405=>10346,9406=>10347,9407=>10348,9408=>10349,9409=>10350,9410=>10351,9411=>10352,9412=>10353,9413=>10354,9414=>10355,9415=>10356,9416=>10357,9417=>10358,9418=>10359,9419=>10360,9420=>10361,9421=>10362,9422=>10363,9423=>10364,13008=>10413,13009=>10414,13010=>10415,13011=>10416,13012=>10417,13013=>10418,13014=>10419,13015=>10420,13016=>10421,13017=>10422,13018=>10423,13019=>10424,13020=>10425,13021=>10426,13022=>10427,13023=>10428,13024=>10429,13025=>10430,13026=>10431,13027=>10432,13028=>10433,13029=>10434,13030=>10435,13031=>10436,13032=>10437,13033=>10438,13034=>10439,13035=>10440,13036=>10441,13037=>10442,13038=>10443,13039=>10444,13040=>10445,13041=>10446,13042=>10447,13043=>10448,13044=>10449,13045=>10450,13046=>10451,13047=>10452,13048=>10453,13049=>10454,13050=>10455,13051=>10456,13052=>10457,13053=>10458,13054=>10459,12928=>10461,12929=>10462,12930=>10463,12931=>10464,12932=>10465,12933=>10466,12934=>10467,12935=>10468,12936=>10469,12937=>10470,12944=>10471,12938=>10472,12939=>10473,12940=>10474,12941=>10475,12942=>10476,12943=>10477,12959=>10479,12960=>10486,12961=>10487,12955=>10488,12954=>10489,12963=>10490,12962=>10491,12951=>10492,12956=>10494,12949=>10495,9676=>10502,9471=>10503,10111=>10514,9451=>10515,9452=>10516,9453=>10517,9454=>10518,9455=>10519,9456=>10520,9457=>10521,9458=>10522,9459=>10523,9460=>10524,8414=>11035,13274=>11851,8448=>11855,13250=>11856,8453=>11859,13169=>11861,13197=>11864,13211=>11865,13271=>11869,13272=>11870,13057=>11874,13058=>11875,13060=>11876,13062=>11877,13064=>11879,13063=>11881,13066=>11882,13065=>11884,13067=>11886,13068=>11888,13070=>11889,13071=>11890,13072=>11891,13073=>11892,13074=>11893,13075=>11894,13079=>11896,13081=>11898,13082=>11900,13083=>11901,13084=>11902,13085=>11903,13087=>11904,13088=>11905,13089=>11906,13092=>11907,13093=>11909,13096=>11912,13097=>11913,13101=>11915,13102=>11918,13103=>11919,13104=>11920,13106=>11921,13108=>11924,13109=>11925,13116=>11926,13111=>11930,13112=>11932,13114=>11933,13117=>11934,13121=>11935,13118=>11936,13119=>11937,13120=>11938,13123=>11939,13124=>11940,13125=>11941,13126=>11942,13128=>11943,13131=>11944,13132=>11945,13135=>11946,13136=>11947,13138=>11950,13140=>11951,13139=>11954,13141=>11955,13142=>11956,8501=>12089,976=>12090,8714=>12091,8463=>12092,981=>12094,987=>12095,977=>12096,9832=>12098,9833=>12099,9836=>12100,12347=>12106,12339=>12108,12340=>12109,12341=>12110,8252=>12111,8265=>12112,8723=>12118,8771=>12120,8818=>12121,8819=>12122,12312=>12129,12313=>12130,65375=>12131,65376=>12132,9115=>12143,9117=>12144,9118=>12145,9120=>12146,9121=>12151,9123=>12152,9124=>12153,9126=>12154,9116=>12167,9119=>12167,9122=>12167,9125=>12167,9130=>12167,9986=>12176,12349=>12179,12447=>12181,8709=>12184,8864=>12185,8854=>12186,8856=>12187,8853=>12188,8855=>12189,9888=>12192,9664=>12194,9654=>12195,8656=>12200,8596=>12201,8600=>12202,8601=>12203,8598=>12204,8599=>12205,8652=>12206,8651=>12207,12336=>12218,8967=>12219,10048=>12228,10047=>12229,9643=>12237,9642=>12239,10010=>12241,9702=>12254,10070=>12259,65093=>12639,65094=>12640,64103=>13320,64098=>13321,32227=>13322,12232=>13323,40643=>13323,28331=>13324,64082=>13325,64061=>13326,64069=>13327,64062=>13328,27114=>13329,28212=>13330,64096=>13331,64071=>13332,64056=>13333,64066=>13334,64078=>13335,34395=>13336,64105=>13337,64052=>13338,64099=>13339,25581=>13340,25802=>13341,30799=>13342,64084=>13343,63856=>13344,64077=>13345,64097=>13346,64072=>13347,64076=>13348,64091=>13349,64092=>13350,64081=>13351,64067=>13352,64090=>13353,28041=>13354,29376=>13355,194885=>13357,64086=>13358,64080=>13359,64049=>13360,64059=>13361,24034=>13362,64063=>13363,64101=>13364,21373=>13365,64055=>13366,64095=>13367,24501=>13368,64064=>13369,64083=>13371,64085=>13373,64104=>13374,64068=>13375,64089=>13376,26202=>13377,64053=>13378,64075=>13379,64100=>13380,64065=>13381,64048=>13382,64057=>13384,64051=>13385,27493=>13386,64058=>13387,27599=>13388,64050=>13389,25150=>13390,64079=>13391,63773=>13392,63964=>13393,63798=>13394,28122=>13395,63952=>13396,26310=>13397,27511=>13398,64087=>13399,37706=>13400,37636=>13402,133390=>13523,35999=>13644,11991=>13645,11965=>13646,158033=>13646,37555=>13652,38321=>13653,194812=>13656,194965=>13670,194794=>13679,26478=>13681,11974=>13682,194594=>13684,156194=>13691,13314=>13698,26083=>13701,134071=>13706,171339=>13717,194611=>13719,24378=>13720,11945=>13729,20465=>13731,63753=>13739,11964=>13747,194732=>13750,26435=>13751,133732=>13755,35329=>13756,25142=>13757,21555=>13760,23067=>13761,25221=>13765,194819=>13768,21567=>13775,27506=>13785,29986=>13790,19256=>13791,24063=>13794,194827=>13801,29626=>13802,134047=>13803,194600=>13807,194849=>13809,194623=>13815,194675=>13832,11916=>13833,11917=>13834,23577=>13835,131083=>13839,23426=>13840,194642=>13841,11997=>13847,11999=>13848,39136=>13848,11998=>13849,169599=>13849,14221=>13850,11927=>13852,14586=>13852,194887=>13854,11909=>13856,20155=>13856,131490=>13857,13599=>13865,194738=>13867,11971=>13870,35200=>13870,31237=>13875,35498=>13880,32085=>13882,28568=>13884,25591=>13892,30246=>13893,11978=>13898,163767=>13898,146686=>13904,13351=>13910,33067=>13913,194842=>13916,11950=>13922,154327=>13922,194714=>13928,194831=>13932,22305=>13952,135741=>13953,194586=>13954,64003=>13956,21534=>13964,15240=>13965,20839=>13966,63839=>13971,20023=>13981,11946=>13995,150804=>13995,24421=>13996,23020=>13997,194658=>13998,24217=>14000,13416=>14047,40884=>14048,21200=>14056,38376=>14061,26625=>14066,195024=>14068,195039=>14069,153215=>14075,11959=>14078,36534=>14083,63775=>14084,63875=>14088,31867=>14094,63906=>14095,63898=>14097,11961=>14099,32770=>14099,157360=>14100,11911=>14105,132648=>14105,131210=>14108,133508=>14109,194604=>14109,11915=>14110,13630=>14110,21589=>14115,22841=>14117,23414=>14120,194669=>14121,23572=>14122,14306=>14123,23782=>14124,20040=>14126,194742=>14129,158105=>14134,25371=>14135,26211=>14138,194779=>14140,27126=>14143,27014=>14144,27596=>14148,28183=>14150,27818=>14153,11942=>14157,20012=>14157,29935=>14160,30069=>14161,30188=>14162,30286=>14163,16305=>14164,30570=>14165,30633=>14166,31571=>14173,16996=>14176,194924=>14180,32328=>14183,132415=>14188,11955=>14189,156266=>14189,33089=>14194,17491=>14195,33401=>14197,11966=>14197,64094=>14198,11967=>14198,64093=>14199,11968=>14199,20857=>14201,33626=>14202,17701=>14206,34292=>14208,131248=>14209,34429=>14214,13358=>14216,35014=>14217,18406=>14224,36808=>14233,166279=>14253,167447=>14256,38969=>14259,39432=>14266,39903=>14271,148206=>14282,21385=>14288,64017=>14290,194785=>14291,146622=>14293,132625=>14294,19972=>14296,19973=>14297,19999=>14298,20011=>14299,20015=>14300,20016=>14301,20032=>14302,20033=>14303,20036=>14304,11907=>14305,20058=>14305,20095=>14306,20109=>14307,20118=>14308,20153=>14309,20176=>14310,20192=>14311,20221=>14312,20223=>14313,20235=>14314,20245=>14315,20320=>14316,20283=>14317,20297=>14318,20308=>14319,20346=>14320,20349=>14321,20350=>14322,20375=>14323,20414=>14324,20431=>14325,20477=>14326,20480=>14327,20481=>14328,20496=>14329,20507=>14330,20519=>14331,20526=>14332,20567=>14333,20582=>14334,20586=>14335,20539=>14336,20623=>14337,20630=>14338,20636=>14339,20684=>14340,20710=>14341,20713=>14342,20719=>14343,20744=>14344,20747=>14345,20752=>14346,20763=>14347,20766=>14348,20831=>14349,20897=>14350,20924=>14351,20974=>14353,20980=>14354,20993=>14355,11913=>14356,20994=>14356,21011=>14357,21065=>14358,21089=>14359,21094=>14360,21139=>14361,21192=>14362,21232=>14363,21258=>14364,21259=>14365,21310=>14366,21324=>14367,21323=>14368,21345=>14369,21356=>14370,21419=>14371,21466=>14372,21478=>14373,21493=>14374,21543=>14375,21581=>14376,21606=>14377,21611=>14378,21620=>14379,21645=>14380,21654=>14381,21665=>14382,21677=>14383,21689=>14384,21695=>14385,21702=>14386,21709=>14387,21774=>14388,21803=>14389,21813=>14390,21834=>14391,21856=>14392,21896=>14394,21902=>14395,22024=>14396,22030=>14397,22031=>14398,22071=>14399,22079=>14400,22089=>14401,22091=>14402,22095=>14403,22118=>14404,22121=>14405,22127=>14406,22129=>14407,22130=>14408,22165=>14409,22170=>14410,22188=>14411,22189=>14412,22193=>14413,22217=>14414,22237=>14415,22244=>14416,22282=>14417,22293=>14418,22307=>14419,22319=>14420,22323=>14421,22324=>14422,22348=>14423,22384=>14424,22412=>14425,22428=>14426,22456=>14427,22502=>14428,22509=>14429,22517=>14430,22518=>14431,22527=>14432,22537=>14433,22560=>14434,22578=>14435,22652=>14436,22656=>14437,22697=>14438,22734=>14439,22736=>14440,22740=>14441,22746=>14442,22761=>14443,22796=>14444,22820=>14445,22831=>14446,22881=>14447,22893=>14448,22986=>14449,22994=>14450,23005=>14451,23011=>14452,23012=>14453,23044=>14454,23052=>14455,23075=>14456,23111=>14457,23125=>14458,23139=>14459,23149=>14460,23166=>14461,23198=>14462,23207=>14463,23212=>14464,23219=>14465,23264=>14466,23296=>14467,23321=>14468,23333=>14469,23341=>14470,23361=>14471,23420=>14472,23422=>14473,23423=>14474,23434=>14475,11919=>14476,23587=>14476,23595=>14477,23600=>14478,23651=>14479,23657=>14480,23676=>14481,23755=>14482,23762=>14483,23796=>14484,23844=>14485,23846=>14486,23875=>14487,23878=>14488,23882=>14489,23954=>14490,23956=>14491,23961=>14492,23968=>14493,24024=>14494,24032=>14495,24056=>14496,24064=>14497,24082=>14498,24084=>14499,24085=>14500,24088=>14501,24110=>14502,24152=>14503,24171=>14504,24172=>14505,24232=>14506,24234=>14507,24254=>14508,24255=>14509,24274=>14511,24327=>14512,24334=>14513,24348=>14514,24349=>14515,24354=>14516,24360=>14517,24374=>14518,24379=>14519,24384=>14520,12089=>14521,24400=>14521,24408=>14522,24420=>14523,24457=>14524,24476=>14525,24487=>14526,24484=>14527,24495=>14528,24504=>14529,11926=>14530,24516=>14530,24521=>14531,24545=>14532,24553=>14533,24557=>14534,24572=>14535,24599=>14536,24602=>14537,24627=>14538,24673=>14539,24703=>14540,24734=>14541,24740=>14542,24752=>14543,24779=>14544,24795=>14545,24824=>14546,24850=>14547,24851=>14548,24852=>14549,24860=>14550,24956=>14551,24973=>14552,24991=>14553,25000=>14554,25026=>14555,25055=>14556,25109=>14557,25129=>14558,25155=>14559,25158=>14560,11928=>14561,25164=>14561,25169=>14562,25174=>14563,25284=>14564,25340=>14565,25354=>14566,25357=>14567,25368=>14568,25401=>14569,25410=>14570,25411=>14571,25445=>14572,25460=>14573,25469=>14574,25476=>14575,25479=>14576,25488=>14577,25502=>14578,25553=>14579,25564=>14580,25609=>14581,25616=>14582,25634=>14583,25684=>14584,25691=>14585,25709=>14586,25723=>14587,25790=>14588,25791=>14589,25829=>14590,25847=>14591,25851=>14592,25860=>14593,25878=>14594,25881=>14595,25927=>14596,25959=>14597,25985=>14598,25989=>14599,26050=>14600,26096=>14601,26098=>14602,26156=>14603,26188=>14604,26203=>14605,26204=>14606,26209=>14607,26219=>14608,26276=>14610,26312=>14611,26348=>14612,26373=>14613,26387=>14614,26419=>14615,26440=>14616,26444=>14617,26486=>14618,26491=>14619,26544=>14620,26546=>14621,26617=>14622,26583=>14623,26585=>14624,26608=>14625,26668=>14626,26672=>14627,26673=>14628,26715=>14629,26738=>14630,26741=>14631,26746=>14632,26756=>14633,26789=>14634,26802=>14635,26832=>14636,26838=>14637,26856=>14638,26861=>14639,26864=>14640,26865=>14641,26876=>14642,26897=>14643,26899=>14644,26933=>14645,26939=>14646,26967=>14647,26979=>14648,26994=>14649,27007=>14650,27008=>14651,27046=>14652,27053=>14653,27063=>14654,27094=>14655,27095=>14656,27137=>14657,27151=>14658,27157=>14659,27176=>14660,27188=>14661,27198=>14662,27205=>14663,27216=>14664,27217=>14665,27222=>14666,27227=>14667,27267=>14668,27273=>14669,27281=>14670,27293=>14671,27294=>14672,27295=>14673,27356=>14674,27367=>14675,27372=>14676,27422=>14677,27428=>14678,27445=>14679,27462=>14680,27478=>14681,27488=>14682,27522=>14683,27582=>14684,27617=>14685,27633=>14686,27664=>14687,27699=>14688,27701=>14689,11937=>14689,11938=>14690,27737=>14691,27766=>14692,27771=>14693,27781=>14694,27797=>14695,27804=>14696,27856=>14697,27860=>14698,27862=>14699,27872=>14700,27883=>14701,27884=>14702,27886=>14703,27914=>14704,27918=>14705,27921=>14706,27950=>14707,27991=>14708,27998=>14709,28005=>14710,28034=>14711,28095=>14712,28100=>14713,28106=>14714,28118=>14715,28137=>14716,28194=>14717,28241=>14718,28359=>14719,28362=>14720,28366=>14721,28413=>14722,28442=>14723,28458=>14724,28463=>14725,28467=>14726,28506=>14727,28510=>14728,28514=>14729,28541=>14730,28555=>14731,28557=>14732,28562=>14733,28564=>14734,28570=>14735,28583=>14736,28584=>14737,28598=>14738,28634=>14739,28638=>14740,28729=>14742,28732=>14743,28756=>14745,28765=>14746,28766=>14747,28772=>14748,11939=>14749,28780=>14749,28798=>14750,28801=>14751,28821=>14752,28855=>14753,28883=>14754,28884=>14755,28888=>14756,28892=>14757,28935=>14758,28960=>14759,28977=>14760,29002=>14761,29010=>14762,29024=>14763,29049=>14764,29074=>14765,29131=>14767,29139=>14768,29142=>14769,29184=>14770,29213=>14771,29227=>14772,29240=>14773,29249=>14774,29267=>14775,29269=>14776,29270=>14777,29276=>14778,29325=>14779,11944=>14780,29357=>14780,29364=>14781,29383=>14782,29435=>14783,29444=>14784,29445=>14785,29480=>14786,29489=>14787,29507=>14788,29548=>14789,29564=>14790,29571=>14791,29573=>14792,29574=>14793,29589=>14794,29598=>14795,29599=>14796,29600=>14797,29606=>14798,29611=>14799,29621=>14800,29623=>14801,29628=>14802,29647=>14803,29657=>14804,29673=>14805,29684=>14806,29693=>14807,29700=>14808,29706=>14809,29722=>14810,29723=>14811,29732=>14812,29736=>14813,29740=>14814,29743=>14815,29744=>14816,29745=>14817,29753=>14818,29764=>14819,29767=>14820,29771=>14821,29773=>14822,29777=>14823,29783=>14824,29798=>14825,29803=>14826,29809=>14827,29824=>14828,29829=>14829,29830=>14830,29831=>14831,29840=>14832,29848=>14833,29852=>14834,29856=>14835,29859=>14836,29864=>14837,29867=>14838,29877=>14839,29887=>14840,29896=>14841,29914=>14842,29918=>14843,30030=>14844,30073=>14845,30081=>14846,30096=>14847,12135=>14848,30098=>14848,30099=>14849,30132=>14850,30180=>14851,30201=>14852,30208=>14853,30218=>14854,30229=>14855,30230=>14856,30233=>14857,30238=>14858,30253=>14859,30261=>14860,30275=>14861,30283=>14862,30309=>14863,30317=>14864,30319=>14865,30321=>14866,30324=>14867,30372=>14868,30373=>14869,30405=>14870,30412=>14871,30444=>14872,30460=>14873,30516=>14874,30518=>14875,30556=>14876,30559=>14877,30560=>14878,30578=>14879,30589=>14880,30613=>14881,30634=>14882,30694=>14883,30704=>14884,30708=>14885,30726=>14886,30754=>14887,30765=>14888,30766=>14889,30768=>14890,30773=>14891,30824=>14892,30878=>14893,30920=>14894,30924=>14895,30926=>14896,30948=>14897,30944=>14898,30945=>14899,30962=>14900,30967=>14901,30971=>14902,31025=>14903,11949=>14905,31035=>14905,31037=>14906,31045=>14907,31067=>14908,31068=>14909,31115=>14910,31126=>14911,31128=>14912,12145=>14913,31160=>14913,31163=>14914,31178=>14915,31194=>14916,31235=>14917,31241=>14918,31249=>14919,31262=>14920,31277=>14921,31289=>14922,31301=>14923,31308=>14924,31325=>14925,31341=>14927,31352=>14928,31392=>14929,31395=>14930,31411=>14931,31419=>14932,31420=>14933,31430=>14934,31495=>14935,31508=>14936,31527=>14937,31537=>14938,31559=>14939,31566=>14940,31584=>14941,31593=>14942,31597=>14943,31602=>14944,31633=>14945,31663=>14946,31703=>14947,31705=>14948,31755=>14949,31759=>14950,31776=>14951,31782=>14952,31793=>14953,31798=>14954,31825=>14955,31833=>14956,31847=>14957,31854=>14958,31856=>14959,31932=>14960,31935=>14961,31944=>14962,31945=>14963,31959=>14964,31961=>14965,31965=>14966,31979=>14967,32007=>14968,32008=>14969,32009=>14970,32019=>14971,32029=>14972,32035=>14973,32065=>14974,32083=>14975,32089=>14976,32093=>14977,32122=>14978,32134=>14979,32139=>14980,32140=>14981,32204=>14982,32235=>14983,32241=>14984,32249=>14985,32264=>14986,32273=>14987,32277=>14988,32288=>14989,32327=>14990,32354=>14991,32366=>14992,32371=>14993,32397=>14994,32401=>14995,32408=>14996,32580=>14997,32591=>14998,11947=>14999,11954=>14999,32594=>14999,11953=>15000,32595=>15000,32609=>15001,32657=>15002,32703=>15003,32718=>15004,32735=>15005,32741=>15006,32748=>15007,32750=>15008,32751=>15009,32762=>15010,32782=>15011,32785=>15012,32788=>15013,32804=>15014,32806=>15015,32826=>15016,32828=>15017,32864=>15018,32881=>15019,32885=>15020,32926=>15021,32934=>15022,32939=>15023,32983=>15024,32984=>15025,33046=>15026,33048=>15027,33082=>15028,33098=>15029,33100=>15030,33153=>15031,33156=>15032,33204=>15033,33231=>15034,33273=>15035,33283=>15036,33313=>15037,33330=>15038,33332=>15039,33350=>15040,33355=>15041,33359=>15042,33422=>15043,33454=>15044,33463=>15045,33470=>15046,33478=>15047,33534=>15048,33603=>15049,33617=>15050,33621=>15051,33670=>15052,33677=>15053,33682=>15054,33688=>15055,33705=>15056,33727=>15057,33728=>15058,33770=>15059,33807=>15060,33809=>15061,33866=>15062,33910=>15063,33960=>15064,33967=>15065,33984=>15066,33986=>15067,34032=>15068,34045=>15069,34060=>15070,34100=>15071,34142=>15072,34191=>15073,34231=>15074,34254=>15075,34221=>15076,34322=>15077,34345=>15078,34386=>15079,34403=>15080,34412=>15081,34415=>15082,34426=>15083,34445=>15084,34449=>15085,34456=>15086,34471=>15087,34472=>15088,34554=>15089,34557=>15090,34571=>15091,34579=>15092,34585=>15093,34590=>15094,34600=>15095,34622=>15096,34673=>15097,34696=>15098,34713=>15099,34732=>15100,34733=>15101,34741=>15102,34774=>15103,34795=>15104,34797=>15105,34817=>15106,34822=>15108,34827=>15109,34836=>15110,34844=>15111,34902=>15112,34911=>15113,11970=>15114,34916=>15114,34968=>15115,34986=>15116,35005=>15117,35006=>15118,35018=>15119,35026=>15120,35035=>15121,35056=>15122,35057=>15123,35078=>15124,35096=>15125,35097=>15126,35098=>15127,35111=>15128,35120=>15129,35134=>15130,35195=>15131,35284=>15132,35286=>15133,35301=>15134,35313=>15135,35335=>15136,35343=>15137,35349=>15138,35362=>15139,35406=>15140,35455=>15141,35572=>15142,35615=>15143,35639=>15144,35651=>15145,35652=>15146,35668=>15147,35740=>15148,35742=>15149,35911=>15150,35924=>15151,35955=>15152,36004=>15153,36057=>15154,36065=>15155,36088=>15156,36094=>15157,36123=>15158,36201=>15159,36204=>15160,36228=>15161,36237=>15162,36245=>15163,36262=>15164,36294=>15165,36302=>15166,36324=>15167,36332=>15168,36384=>15169,36427=>15170,36460=>15171,36464=>15172,36474=>15173,36498=>15174,36526=>15175,36531=>15176,36561=>15177,36564=>15178,36601=>15179,36631=>15180,36662=>15181,36774=>15182,12193=>15183,36789=>15183,11981=>15184,36790=>15184,36832=>15186,36836=>15187,36854=>15188,36866=>15189,36908=>15190,36932=>15191,37000=>15192,37013=>15193,37017=>15194,37019=>15195,37026=>15196,37044=>15197,37079=>15198,37085=>15199,37108=>15200,37143=>15201,37148=>15202,37169=>15203,37178=>15204,37181=>15205,37192=>15206,37211=>15207,37217=>15208,37220=>15209,37262=>15210,37278=>15211,37288=>15212,37293=>15213,37294=>15214,37298=>15215,37308=>15216,37360=>15217,37367=>15218,37371=>15219,37383=>15220,37416=>15221,37427=>15222,37432=>15223,37443=>15224,37447=>15225,37455=>15226,37472=>15227,37570=>15228,37579=>15229,37580=>15230,37599=>15231,37645=>15232,37653=>15233,37663=>15234,37671=>15235,37703=>15236,37714=>15237,37738=>15239,37741=>15240,37787=>15241,37818=>15242,37801=>15243,37825=>15244,37834=>15245,37858=>15246,37882=>15247,37885=>15248,37903=>15249,37940=>15250,37951=>15251,37973=>15252,37995=>15253,38002=>15254,11986=>15255,38264=>15255,38310=>15256,38313=>15257,38324=>15259,38333=>15260,38362=>15261,11983=>15262,11990=>15262,38429=>15262,38465=>15263,38488=>15264,38532=>15265,38564=>15266,38569=>15267,38610=>15268,195060=>15269,38622=>15270,38633=>15271,38641=>15272,38658=>15273,38665=>15274,38746=>15275,38755=>15276,38766=>15277,38771=>15278,38810=>15279,38818=>15280,38837=>15281,38838=>15282,38873=>15283,38878=>15284,38900=>15285,38922=>15286,38926=>15287,38942=>15288,38947=>15289,38955=>15290,38974=>15291,38994=>15292,38995=>15293,39001=>15294,39020=>15295,39096=>15296,39098=>15297,39103=>15298,39112=>15299,39141=>15300,39218=>15301,39219=>15302,39232=>15303,39245=>15304,39260=>15305,39263=>15306,39345=>15307,39353=>15308,39354=>15309,39369=>15310,39426=>15311,39446=>15312,39460=>15313,39463=>15314,39469=>15315,39470=>15316,39478=>15317,39480=>15318,39498=>15319,39510=>15320,39605=>15321,39606=>15322,39673=>15323,39683=>15324,39712=>15325,39731=>15326,39732=>15327,39795=>15328,39801=>15329,39847=>15330,39873=>15331,39879=>15332,39895=>15333,39911=>15334,39915=>15335,39927=>15336,39930=>15337,39933=>15338,39947=>15339,39975=>15340,39978=>15341,39990=>15342,40001=>15343,40019=>15344,40035=>15345,40048=>15346,40055=>15347,40194=>15348,40258=>15349,40263=>15350,40291=>15351,40297=>15352,40316=>15353,40318=>15354,40333=>15355,40369=>15356,40387=>15357,40391=>15358,40406=>15359,40415=>15360,40427=>15361,40436=>15362,40469=>15363,40477=>15364,40612=>15365,40616=>15366,40620=>15367,40679=>15368,40686=>15369,40720=>15370,40722=>15371,40727=>15372,40729=>15373,40751=>15374,40759=>15375,40761=>15376,40769=>15377,40773=>15378,40791=>15379,40808=>15380,40817=>15381,40821=>15382,40848=>15383,40852=>15384,40866=>15385,13317=>15387,194564=>15388,22048=>15389,24267=>15390,11925=>15391,144954=>15393,28665=>15395,28390=>15396,29107=>15397,11940=>15398,64073=>15398,11980=>15403,64102=>15403,23986=>15405,20435=>15407,20697=>15408,20720=>15409,20931=>15410,22134=>15411,27220=>15412,27905=>15413,28112=>15414,28226=>15415,28377=>15416,29668=>15417,29729=>15418,30060=>15419,30801=>15420,34805=>15421,144382=>15422,29608=>15423,15091=>15424,13531=>15425,17420=>15426,16010=>15427,40893=>15429,19432=>15430,40892=>15431,16090=>15432,15138=>15433,40894=>15434,17786=>15435,16531=>15436,18021=>15438,16643=>15439,17043=>15440,18094=>15441,13448=>15442,140809=>15443,63584=>15444,63585=>15445,63586=>15446,63610=>15447,63615=>15448,8836=>15472,8837=>15473,8842=>15474,8843=>15475,8713=>15476,8965=>15478,8966=>15479,8741=>15489,8742=>15490,8802=>15505,8773=>15507,8776=>15508,8822=>15509,8823=>15510,8487=>15515,8922=>15725,8923=>15726,8533=>15727,8984=>15728,7742=>15729,7743=>15730,504=>15731,505=>15732,470=>15733,472=>15734,474=>15735,476=>15736,260=>15737,728=>15738,317=>15739,346=>15740,350=>15741,356=>15742,377=>15743,379=>15744,261=>15745,731=>15746,318=>15747,347=>15748,711=>15749,351=>15750,357=>15751,378=>15752,733=>15753,380=>15754,340=>15755,258=>15756,313=>15757,262=>15758,268=>15759,280=>15760,270=>15761,323=>15762,327=>15763,336=>15764,344=>15765,368=>15766,354=>15767,341=>15768,259=>15769,314=>15770,263=>15771,269=>15772,281=>15773,271=>15774,273=>15775,324=>15776,328=>15777,337=>15778,345=>15779,369=>15780,355=>15781,729=>15782,264=>15783,284=>15784,292=>15785,308=>15786,348=>15787,364=>15788,265=>15789,285=>15790,293=>15791,309=>15792,349=>15793,365=>15794,625=>15795,651=>15796,638=>15797,620=>15798,622=>15799,633=>15800,648=>15801,598=>15802,627=>15803,637=>15804,642=>15805,656=>15806,635=>15807,621=>15808,607=>15809,626=>15810,669=>15811,654=>15812,609=>15813,624=>15814,641=>15815,295=>15816,661=>15817,660=>15818,614=>15819,664=>15820,450=>15821,595=>15822,599=>15823,644=>15824,608=>15825,403=>15826,616=>15827,649=>15828,600=>15829,604=>15830,606=>15831,592=>15832,623=>15833,650=>15834,612=>15835,594=>15836,653=>15837,613=>15838,674=>15839,673=>15840,597=>15841,657=>15842,634=>15843,615=>15844,865=>15845,712=>15846,716=>15847,721=>15848,8255=>15849,783=>15850,741=>15851,742=>15852,743=>15853,744=>15854,745=>15855,805=>15858,812=>15859,825=>15860,796=>15861,799=>15862,800=>15863,829=>15864,809=>15865,815=>15866,734=>15867,804=>15868,816=>15869,828=>15870,820=>15871,797=>15872,798=>15873,792=>15874,793=>15875,810=>15876,826=>15877,827=>15878,794=>15879,610=>15883,611=>15884,618=>15885,628=>15886,630=>15887,632=>15888,640=>15889,655=>15890,665=>15891,668=>15892,671=>15893,688=>15894,690=>15895,695=>15896,705=>15897,736=>15898,737=>15899,8862=>15906,12348=>16194,12543=>16195,12310=>16197,12311=>16198,9838=>16199,9835=>16200,10548=>16201,10549=>16202,10687=>16203,12448=>16205,10746=>16207,10747=>16208,962=>16222,9461=>16223,9462=>16224,9463=>16225,9464=>16226,9465=>16227,9466=>16228,9467=>16229,9468=>16230,9469=>16231,9470=>16232,9750=>16233,9751=>16234,9649=>16235,12784=>16236,12785=>16237,12786=>16238,12787=>16239,12788=>16240,12789=>16241,12790=>16242,12791=>16243,12792=>16244,12793=>16245,12794=>16247,12795=>16248,12796=>16249,12797=>16250,12798=>16251,12799=>16252,9150=>16253,9151=>16254,9152=>16255,9153=>16256,9154=>16257,9155=>16258,9156=>16259,9157=>16260,9158=>16261,9159=>16262,9160=>16263,9161=>16264,9162=>16265,9163=>16266,9164=>16267,10003=>16270,9251=>16272,9166=>16273,9680=>16274,9681=>16275,9682=>16276,9683=>16277,8263=>16278,8264=>16279,8273=>16281,8258=>16282,12688=>16283,12689=>16284,12690=>16285,12691=>16286,12692=>16287,12693=>16288,12694=>16289,12695=>16290,12696=>16291,12697=>16292,12698=>16293,12699=>16294,12700=>16295,12701=>16296,12702=>16297,12703=>16298,9136=>16312,9137=>16313,9842=>16314,9843=>16315,9844=>16316,9845=>16317,9846=>16318,9847=>16319,9848=>16320,9849=>16321,9850=>16322,9851=>16323,9852=>16324,9853=>16325,12441=>16326,12442=>16327,8413=>16328,20296=>16779,20319=>16780,20330=>16781,20332=>16782,20494=>16783,20504=>16784,20545=>16785,20722=>16786,20688=>16787,20742=>16788,20739=>16789,20789=>16790,20821=>16791,20823=>16792,13493=>16793,20938=>16794,20962=>16795,21079=>16796,21196=>16797,21206=>16798,21243=>16799,21276=>16800,21347=>16801,21405=>16802,21522=>16803,21631=>16804,21640=>16805,21840=>16806,21889=>16807,21933=>16808,21966=>16809,22075=>16810,22174=>16811,22185=>16812,22195=>16813,22391=>16814,22396=>16815,135963=>16816,22479=>16817,22500=>16818,22628=>16819,22665=>16820,136302=>16821,22738=>16822,22752=>16823,34369=>16824,22923=>16825,22930=>16826,22979=>16827,23059=>16828,23143=>16829,23159=>16830,23172=>16831,23236=>16832,137405=>16833,23421=>16834,23443=>16835,23570=>16836,64060=>16837,136884=>16838,23674=>16839,23695=>16840,23711=>16841,23715=>16842,23722=>16843,23760=>16844,138804=>16845,23821=>16846,23879=>16847,23937=>16848,23972=>16849,23975=>16850,24011=>16851,24158=>16852,24313=>16853,24320=>16854,24322=>16855,24355=>16856,24381=>16857,24404=>16858,24445=>16859,24589=>16860,24596=>16861,24600=>16862,24629=>16863,24647=>16864,24733=>16865,24788=>16866,24797=>16867,24875=>16868,25020=>16869,25017=>16870,25122=>16871,25178=>16872,25199=>16873,25302=>16874,25468=>16875,25573=>16876,25721=>16877,25796=>16878,25808=>16879,25897=>16880,26013=>16881,26170=>16882,26146=>16883,26155=>16884,26160=>16885,26163=>16886,26184=>16887,143812=>16888,26231=>16889,26232=>16890,26253=>16891,26299=>16892,26331=>16893,26344=>16894,26439=>16895,26497=>16896,26515=>16897,26520=>16898,26523=>16899,26620=>16900,26653=>16901,26787=>16902,26890=>16903,26953=>16904,144836=>16905,26946=>16906,26980=>16907,27045=>16908,27087=>16909,15286=>16910,15299=>16911,27113=>16912,27125=>16913,145215=>16914,27195=>16915,145251=>16916,27284=>16917,27301=>16918,15375=>16919,27419=>16920,27436=>16921,27495=>16922,27561=>16923,27565=>16924,27607=>16925,27647=>16926,27653=>16927,27764=>16928,27800=>16929,27899=>16930,27846=>16931,27953=>16932,27961=>16933,27967=>16934,27992=>16935,28052=>16936,28074=>16937,28123=>16938,28125=>16939,28228=>16940,28254=>16941,28337=>16942,28353=>16943,28432=>16944,28505=>16945,28513=>16946,28542=>16947,28556=>16948,28576=>16949,28604=>16950,28615=>16951,28618=>16952,28656=>16953,28750=>16954,28789=>16955,28836=>16956,28900=>16957,28971=>16958,28958=>16959,28974=>16960,29009=>16961,29032=>16962,29061=>16963,29063=>16964,29114=>16965,29124=>16966,29205=>16967,15935=>16968,29339=>16969,149489=>16970,29479=>16971,29520=>16972,29542=>16973,29602=>16974,29739=>16975,29766=>16976,29794=>16977,29805=>16978,29862=>16979,29865=>16980,29897=>16981,29951=>16982,29975=>16983,16242=>16984,30158=>16985,30210=>16986,30216=>16987,30308=>16988,30337=>16989,30365=>16990,30378=>16991,30390=>16992,30414=>16993,30420=>16994,30438=>16995,30449=>16996,30474=>16997,30489=>16998,30541=>16999,30542=>17000,30586=>17001,30592=>17002,30612=>17003,30688=>17004,152718=>17005,30787=>17006,30830=>17007,30896=>17008,152846=>17009,30893=>17010,30976=>17011,31004=>17012,31022=>17013,31028=>17014,31046=>17015,31097=>17016,31176=>17017,153457=>17018,31188=>17019,31198=>17020,31211=>17021,31213=>17022,31365=>17023,154052=>17024,31438=>17025,31485=>17026,31506=>17027,31533=>17028,31547=>17029,31599=>17030,31745=>17031,31795=>17032,155041=>17033,31853=>17034,31865=>17035,31887=>17036,31892=>17037,31904=>17038,31957=>17039,32049=>17040,32092=>17041,32131=>17042,32166=>17043,32194=>17044,32296=>17045,32663=>17046,32731=>17047,32821=>17048,32823=>17049,32970=>17050,32992=>17051,33011=>17052,33120=>17053,33127=>17054,33128=>17055,33133=>17056,33211=>17057,33226=>17058,33239=>17059,17499=>17060,33376=>17061,33396=>17062,158463=>17063,33441=>17064,33443=>17065,33444=>17066,33449=>17067,33471=>17068,33493=>17069,33533=>17070,33536=>17071,33570=>17072,33581=>17073,33594=>17074,33607=>17075,33661=>17076,33703=>17077,33743=>17078,33745=>17079,33761=>17080,33793=>17081,33798=>17082,33887=>17083,33904=>17084,33907=>17085,33925=>17086,33950=>17087,33978=>17088,159296=>17089,34098=>17090,34078=>17091,34095=>17092,34148=>17093,34170=>17094,34188=>17095,34210=>17096,34251=>17097,34285=>17098,34303=>17099,34308=>17100,34309=>17101,34320=>17102,159988=>17103,34328=>17104,34360=>17105,34391=>17106,34402=>17107,17821=>17108,34421=>17109,34488=>17110,34556=>17111,34695=>17112,17898=>17113,34826=>17114,34832=>17115,35022=>17116,161412=>17117,35122=>17118,35129=>17119,35136=>17120,35220=>17121,35318=>17122,35399=>17123,35421=>17124,35425=>17125,35445=>17126,35536=>17127,35654=>17128,35673=>17129,35689=>17130,35741=>17131,35913=>17132,35944=>17133,36271=>17134,36305=>17135,36311=>17136,36387=>17137,36413=>17138,36475=>17139,164471=>17140,18500=>17141,36602=>17142,36638=>17143,36653=>17144,36692=>17145,164813=>17146,36840=>17147,36846=>17148,36872=>17149,36909=>17150,37015=>17151,37043=>17152,37054=>17153,37060=>17154,37061=>17155,37063=>17156,37103=>17157,37140=>17158,37142=>17159,37154=>17160,37155=>17161,37167=>17162,37172=>17163,37251=>17164,37361=>17165,37705=>17166,37732=>17167,37733=>17168,37795=>17169,37855=>17170,37892=>17171,37939=>17172,37962=>17173,37987=>17174,38001=>17175,38286=>17176,38303=>17177,38316=>17178,38326=>17179,38347=>17180,38352=>17181,38355=>17182,18864=>17183,38366=>17184,38565=>17185,38639=>17186,38734=>17187,38805=>17188,38830=>17189,38842=>17190,38849=>17191,38857=>17192,38875=>17193,38998=>17194,39143=>17195,39256=>17196,39427=>17197,39617=>17198,39619=>17199,39630=>17200,39638=>17201,39682=>17202,39688=>17203,19479=>17204,39725=>17205,39774=>17206,39782=>17207,39812=>17208,39818=>17209,39838=>17210,39886=>17211,39909=>17212,39928=>17213,39971=>17214,40015=>17215,40016=>17216,40037=>17217,40221=>17218,40222=>17219,40259=>17220,40274=>17221,40330=>17222,40342=>17223,40384=>17224,40364=>17225,40380=>17226,172432=>17227,40423=>17228,40455=>17229,40606=>17230,40623=>17231,40855=>17232,131209=>17233,19970=>17234,19983=>17235,19986=>17236,20009=>17237,20014=>17238,20039=>17239,131234=>17240,20049=>17241,13318=>17242,131236=>17243,20073=>17244,20125=>17245,13356=>17246,20156=>17247,20163=>17248,20168=>17249,20203=>17250,20186=>17251,20209=>17252,20213=>17253,20246=>17254,20324=>17255,20279=>17256,20286=>17257,20312=>17258,131603=>17259,20343=>17260,20344=>17261,20354=>17262,20357=>17263,20454=>17264,20402=>17265,20421=>17266,20427=>17267,20434=>17268,13418=>17269,20466=>17270,20499=>17271,20508=>17272,20558=>17273,20563=>17274,20579=>17275,20643=>17276,20616=>17277,20626=>17278,20627=>17279,20629=>17280,20650=>17281,131883=>17282,20657=>17283,20666=>17284,20667=>17285,20676=>17286,20679=>17287,20723=>17288,131969=>17289,20686=>17290,131953=>17291,20692=>17292,20705=>17293,13458=>17294,132089=>17295,20759=>17296,132170=>17297,20832=>17298,132361=>17299,20851=>17300,20867=>17301,20875=>17302,13500=>17303,20888=>17304,20899=>17305,20909=>17306,13511=>17307,132566=>17308,20979=>17309,21010=>17310,21014=>17311,132943=>17312,21077=>17313,21084=>17314,21100=>17315,21111=>17316,21124=>17317,21122=>17318,133127=>17319,21144=>17320,133178=>17321,21156=>17322,21178=>17323,21179=>17324,21194=>17325,21201=>17326,133305=>17327,21239=>17328,21301=>17329,21314=>17330,133500=>17331,133533=>17332,21351=>17333,21370=>17334,21412=>17335,21428=>17336,133843=>17337,21431=>17338,21440=>17339,133917=>17340,13661=>17341,13662=>17342,21461=>17343,13667=>17344,21492=>17345,21540=>17346,21544=>17347,13678=>17348,21571=>17349,21602=>17350,21612=>17351,21653=>17352,21664=>17353,21670=>17354,21678=>17355,21687=>17356,21690=>17357,21699=>17358,134469=>17359,21740=>17360,21743=>17361,21745=>17362,21747=>17363,21760=>17364,21761=>17365,21769=>17366,21820=>17367,21825=>17368,13734=>17369,21831=>17370,13736=>17371,21860=>17372,134625=>17373,21885=>17374,21890=>17375,21905=>17376,13765=>17377,21970=>17378,134805=>17379,134765=>17380,21951=>17381,21961=>17382,21964=>17383,21969=>17384,21981=>17385,13786=>17386,21986=>17387,134756=>17388,21993=>17389,22056=>17390,135007=>17391,22023=>17392,22032=>17393,22064=>17394,13812=>17395,22077=>17396,22080=>17397,22087=>17398,22110=>17399,22112=>17400,22125=>17401,13829=>17402,22152=>17403,22156=>17404,22173=>17405,22184=>17406,22194=>17407,22213=>17408,22221=>17409,22239=>17410,22248=>17411,22262=>17412,22263=>17413,135681=>17414,135765=>17415,22313=>17416,135803=>17417,22341=>17418,22342=>17419,22349=>17420,135796=>17421,22376=>17422,22383=>17423,22387=>17424,22388=>17425,22389=>17426,22395=>17427,135908=>17428,135895=>17429,22426=>17430,22429=>17431,22430=>17432,22440=>17433,22487=>17434,135933=>17435,22476=>17436,135990=>17437,136004=>17438,22494=>17439,22512=>17440,13898=>17441,22520=>17442,22523=>17443,22525=>17444,22532=>17445,22558=>17446,22567=>17447,22585=>17448,136132=>17449,22601=>17450,22604=>17451,22631=>17452,22666=>17453,22667=>17454,22669=>17455,22671=>17456,22672=>17457,22676=>17458,22685=>17459,22698=>17460,22705=>17461,136301=>17462,22723=>17463,22733=>17464,22754=>17465,22771=>17466,22772=>17467,22789=>17468,22790=>17469,22797=>17470,22804=>17471,136663=>17472,13969=>17473,22845=>17474,13977=>17475,22854=>17476,13974=>17477,158761=>17478,22879=>17479,136775=>17480,22901=>17481,22902=>17482,22908=>17483,22943=>17484,22958=>17485,22972=>17486,22984=>17487,22989=>17488,23006=>17489,23015=>17490,23022=>17491,136966=>17492,137026=>17493,14031=>17494,23053=>17495,23063=>17496,23079=>17497,23085=>17498,23141=>17499,23162=>17500,23179=>17501,23196=>17502,23199=>17503,23200=>17504,23202=>17505,23217=>17506,23221=>17507,23226=>17508,23231=>17509,23258=>17510,23260=>17511,23269=>17512,23280=>17513,23278=>17514,23285=>17515,23304=>17516,23319=>17517,23348=>17518,23372=>17519,23378=>17520,23400=>17521,23407=>17522,23425=>17523,23428=>17524,137667=>17525,23446=>17526,23468=>17527,14177=>17528,14178=>17529,23502=>17530,23510=>17531,14188=>17532,14187=>17533,23537=>17534,23549=>17535,14197=>17536,23555=>17537,23593=>17538,138326=>17539,23647=>17540,23655=>17541,23656=>17542,23664=>17543,138541=>17544,138565=>17545,138616=>17546,138594=>17547,23688=>17548,23690=>17549,14273=>17550,138657=>17551,138652=>17552,23712=>17553,23714=>17554,23719=>17555,138642=>17556,23725=>17557,23733=>17558,138679=>17559,23753=>17560,138720=>17561,138803=>17562,23814=>17563,23824=>17564,23851=>17565,23837=>17566,23840=>17567,23857=>17568,23865=>17569,14312=>17570,23905=>17571,23914=>17572,14324=>17573,23920=>17574,139038=>17575,14333=>17576,23944=>17577,14336=>17578,23959=>17579,23984=>17580,23988=>17581,139126=>17582,24017=>17583,24023=>17584,139258=>17585,24036=>17586,24041=>17587,14383=>17588,14390=>17589,14400=>17590,24095=>17591,24126=>17592,24137=>17593,14428=>17594,24150=>17595,14433=>17596,24173=>17597,24174=>17598,139643=>17599,24229=>17600,24236=>17601,24249=>17602,24262=>17603,24281=>17604,140062=>17605,24317=>17606,24328=>17607,140205=>17608,24350=>17609,24391=>17610,24419=>17611,24434=>17612,24446=>17613,24463=>17614,24482=>17615,24519=>17616,24523=>17617,24530=>17618,24531=>17619,24532=>17620,24546=>17621,24558=>17622,24559=>17623,24563=>17624,14615=>17625,24610=>17626,24612=>17627,14618=>17628,24652=>17629,24725=>17630,24744=>17631,141043=>17632,24753=>17633,24766=>17634,24776=>17635,24793=>17636,24814=>17637,24821=>17638,24848=>17639,24857=>17640,24862=>17641,24890=>17642,14703=>17643,24897=>17644,24902=>17645,24928=>17646,141403=>17647,24978=>17648,24979=>17649,24983=>17650,24997=>17651,25005=>17652,141483=>17653,25045=>17654,25053=>17655,25077=>17656,141711=>17657,25123=>17658,25170=>17659,25185=>17660,25188=>17661,25211=>17662,25197=>17663,25203=>17664,25241=>17665,25301=>17666,142008=>17667,25341=>17668,25347=>17669,25360=>17670,142159=>17671,142160=>17672,25394=>17673,25397=>17674,25403=>17675,25404=>17676,25409=>17677,25412=>17678,25422=>17679,142150=>17680,25433=>17681,142365=>17682,142246=>17683,25452=>17684,25497=>17685,142372=>17686,25492=>17687,25533=>17688,25556=>17689,25557=>17690,25568=>17691,25579=>17692,25580=>17693,25586=>17694,25630=>17695,25637=>17696,25641=>17697,25647=>17698,25690=>17699,25693=>17700,25715=>17701,25725=>17702,25735=>17703,25745=>17704,25759=>17705,25803=>17706,25804=>17707,25813=>17708,25815=>17709,142817=>17710,25828=>17711,25855=>17712,14958=>17713,25871=>17714,25876=>17715,14963=>17716,25886=>17717,25906=>17718,25924=>17719,25940=>17720,25963=>17721,25978=>17722,25988=>17723,25994=>17724,26034=>17725,26037=>17726,26040=>17727,26047=>17728,26057=>17729,26068=>17730,15062=>17731,26105=>17732,26108=>17733,26116=>17734,26120=>17735,26145=>17736,26154=>17737,26181=>17738,26193=>17739,26190=>17740,15082=>17741,143811=>17742,143861=>17743,143798=>17744,26218=>17745,26220=>17746,26221=>17747,26235=>17748,26240=>17749,26256=>17750,26258=>17751,15118=>17752,26285=>17753,26289=>17754,26293=>17755,15130=>17756,15132=>17757,15063=>17758,26369=>17759,26386=>17760,144242=>17761,26393=>17762,144339=>17763,144338=>17764,26445=>17765,26452=>17766,26461=>17767,144336=>17768,144356=>17769,144341=>17770,26484=>17771,144346=>17772,26514=>17773,144351=>17774,33635=>17775,26640=>17776,26563=>17777,26568=>17778,26578=>17779,26587=>17780,26615=>17781,144458=>17782,144465=>17783,144459=>17784,26648=>17785,26655=>17786,26669=>17787,144485=>17788,26675=>17789,26683=>17790,26686=>17791,26693=>17792,26697=>17793,26700=>17794,26709=>17795,26711=>17796,15223=>17797,26731=>17798,26734=>17799,26748=>17800,26754=>17801,26768=>17802,26774=>17803,15213=>17804,26776=>17805,26777=>17806,26778=>17807,26780=>17808,26794=>17809,26795=>17810,26804=>17811,26811=>17812,26875=>17813,144612=>17814,144730=>17815,26819=>17816,26821=>17817,26828=>17818,26841=>17819,26852=>17820,26853=>17821,26860=>17822,26871=>17823,26883=>17824,26887=>17825,15239=>17826,144788=>17827,15245=>17828,26950=>17829,26985=>17830,26988=>17831,27002=>17832,27026=>17833,15268=>17834,27030=>17835,27056=>17836,27066=>17837,27068=>17838,27072=>17839,27089=>17840,144953=>17841,144967=>17842,144952=>17843,27107=>17844,27118=>17845,27119=>17846,27123=>17847,15309=>17848,27124=>17849,27134=>17850,27153=>17851,27162=>17852,27165=>17853,145180=>17854,27186=>17855,27187=>17856,27199=>17857,27209=>17858,27258=>17859,27214=>17860,27218=>17861,27236=>17862,145164=>17863,27275=>17864,15344=>17865,27297=>17866,145252=>17867,27307=>17868,27325=>17869,27334=>17870,27348=>17871,27344=>17872,27357=>17873,145407=>17874,145383=>17875,27377=>17876,27378=>17877,27379=>17878,27389=>17879,145444=>17880,27403=>17881,27407=>17882,27408=>17883,27409=>17884,145469=>17885,27415=>17886,15398=>17887,27439=>17888,27466=>17889,27480=>17890,27500=>17891,27509=>17892,11934=>17893,27514=>17893,27521=>17894,27547=>17895,27566=>17896,146072=>17897,27581=>17898,27591=>17899,27592=>17900,27593=>17901,27610=>17902,27622=>17903,27623=>17904,27630=>17905,27650=>17906,27658=>17907,27662=>17908,27702=>17909,146559=>17910,27725=>17911,27739=>17912,27757=>17913,27780=>17914,27785=>17915,15555=>17916,27796=>17917,27799=>17918,27821=>17919,27842=>17920,15570=>17921,27868=>17922,27881=>17923,27885=>17924,146688=>17925,27904=>17926,27940=>17927,27942=>17928,27943=>17929,27751=>17930,27951=>17931,27964=>17932,27995=>17933,28000=>17934,28016=>17935,28032=>17936,28033=>17937,28042=>17938,28045=>17939,28049=>17940,28056=>17941,146752=>17942,146938=>17943,146937=>17944,146899=>17945,28075=>17946,28078=>17947,28084=>17948,28098=>17949,27956=>17950,28104=>17951,28110=>17952,28127=>17953,28150=>17954,28214=>17955,28190=>17956,15633=>17957,28210=>17958,28232=>17959,28233=>17960,28235=>17961,28236=>17962,28239=>17963,28243=>17964,28244=>17965,28247=>17966,28259=>17967,15646=>17968,28307=>17969,28327=>17970,28340=>17971,28355=>17972,28469=>17973,28395=>17974,28409=>17975,28411=>17976,28426=>17977,28428=>17978,28440=>17979,28453=>17980,28470=>17981,28476=>17982,147326=>17983,28498=>17984,28503=>17985,28512=>17986,28520=>17987,28560=>17988,28566=>17989,28606=>17990,28575=>17991,28581=>17992,28591=>17993,15716=>17994,28616=>17995,28617=>17996,28649=>17997,147606=>17998,28668=>17999,28672=>18000,28682=>18001,28707=>18002,147715=>18003,28730=>18004,28739=>18005,28743=>18006,28747=>18007,15770=>18008,28773=>18009,28777=>18010,28782=>18011,28790=>18012,28806=>18013,28823=>18014,147910=>18015,28831=>18016,28849=>18017,147966=>18018,28908=>18019,28874=>18020,28881=>18021,28931=>18022,28934=>18023,28936=>18024,28940=>18025,15808=>18026,28975=>18027,29008=>18028,29011=>18029,29022=>18030,15828=>18031,29078=>18032,29056=>18033,29083=>18034,29088=>18035,29090=>18036,29102=>18037,29103=>18038,148412=>18039,29145=>18040,29148=>18041,29191=>18042,15877=>18043,29236=>18044,29241=>18045,29250=>18046,29271=>18047,29283=>18048,149033=>18049,29294=>18050,29295=>18051,29304=>18052,29311=>18053,29326=>18054,149157=>18055,29358=>18056,29360=>18057,29377=>18058,15968=>18059,29388=>18060,15974=>18061,15976=>18062,29427=>18063,29434=>18064,29447=>18065,29458=>18066,29464=>18067,29465=>18068,16003=>18069,29497=>18070,29484=>18071,29491=>18072,29501=>18073,29522=>18074,16020=>18075,29547=>18076,149654=>18077,29550=>18078,29551=>18079,29553=>18080,29569=>18081,29578=>18082,29588=>18083,29592=>18084,29596=>18085,29605=>18086,29625=>18087,29631=>18088,29637=>18089,29643=>18090,29665=>18091,29671=>18092,29689=>18093,29715=>18094,29690=>18095,29697=>18096,29779=>18097,29760=>18098,29763=>18099,29778=>18100,29789=>18101,29825=>18102,29832=>18103,150093=>18104,29842=>18105,29847=>18106,29849=>18107,29857=>18108,29861=>18109,29866=>18110,29881=>18111,29883=>18112,29882=>18113,29910=>18114,29912=>18115,29931=>18116,150358=>18117,29946=>18118,150383=>18119,29984=>18120,29988=>18121,29994=>18122,16215=>18123,150550=>18124,30013=>18125,30014=>18126,30016=>18127,30024=>18128,30032=>18129,30034=>18130,30066=>18131,30065=>18132,30074=>18133,30077=>18134,30078=>18135,30092=>18136,16245=>18137,30114=>18138,16247=>18139,30128=>18140,30135=>18141,30143=>18142,30144=>18143,30150=>18144,30159=>18145,30163=>18146,30173=>18147,30175=>18148,30176=>18149,30183=>18150,30190=>18151,30193=>18152,30211=>18153,30232=>18154,30215=>18155,30223=>18156,16302=>18157,151054=>18158,30227=>18159,30235=>18160,30236=>18161,151095=>18162,30245=>18163,30248=>18164,30268=>18165,30259=>18166,151146=>18167,16329=>18168,30273=>18169,151179=>18170,30281=>18171,30293=>18172,16343=>18173,30318=>18174,30357=>18175,30369=>18176,30368=>18177,30375=>18178,30376=>18179,30383=>18180,151626=>18181,30409=>18182,151637=>18183,30440=>18184,151842=>18185,30487=>18186,30490=>18187,30509=>18188,30517=>18189,151977=>18190,16441=>18191,152037=>18192,152013=>18193,30552=>18194,152094=>18195,30588=>18196,152140=>18197,16472=>18198,30618=>18199,30623=>18200,30626=>18201,30628=>18202,30686=>18203,30687=>18204,30692=>18205,30698=>18206,30700=>18207,30715=>18208,152622=>18209,30725=>18210,30729=>18211,30733=>18212,30745=>18213,30764=>18214,30791=>18215,30826=>18216,152793=>18217,30858=>18218,30868=>18219,30884=>18220,30877=>18221,30879=>18222,30907=>18223,30933=>18224,30950=>18225,30969=>18226,30970=>18227,30974=>18228,152999=>18229,30992=>18230,31003=>18231,31013=>18232,31050=>18233,31064=>18234,16645=>18235,31079=>18236,31090=>18237,31125=>18238,31137=>18239,31145=>18240,31156=>18241,31170=>18242,31175=>18243,31180=>18244,31181=>18245,31190=>18246,16712=>18247,153513=>18248,153524=>18249,16719=>18250,31242=>18251,31253=>18252,31259=>18253,16739=>18254,31288=>18255,31303=>18256,31318=>18257,31321=>18258,31324=>18259,31327=>18260,31335=>18261,31338=>18262,31349=>18263,31362=>18264,31370=>18265,31376=>18266,31404=>18267,154068=>18268,16820=>18269,31417=>18270,31422=>18271,16831=>18272,31436=>18273,31464=>18274,31476=>18275,154340=>18276,154339=>18277,154353=>18278,31549=>18279,31530=>18280,31534=>18281,31535=>18282,16870=>18283,16883=>18284,31615=>18285,31553=>18286,16878=>18287,31573=>18288,31609=>18289,31588=>18290,31590=>18291,31603=>18292,154546=>18293,16903=>18294,31632=>18295,31643=>18296,16910=>18297,31669=>18298,31676=>18299,31685=>18300,31690=>18301,154699=>18302,154724=>18303,31700=>18304,31702=>18305,31706=>18306,31722=>18307,31728=>18308,31747=>18309,31758=>18310,31813=>18311,31818=>18312,31831=>18313,31838=>18314,31841=>18315,31849=>18316,31855=>18317,155182=>18318,155222=>18319,155237=>18320,31910=>18321,155234=>18322,31926=>18323,31927=>18324,155352=>18325,31940=>18326,155330=>18327,31949=>18328,155368=>18329,155427=>18330,31974=>18331,155484=>18332,31989=>18333,32003=>18334,17094=>18335,32018=>18336,32030=>18337,155616=>18338,155604=>18339,32061=>18340,32062=>18341,32064=>18342,32071=>18343,155660=>18344,155643=>18345,17110=>18346,32090=>18347,32106=>18348,32112=>18349,17117=>18350,32127=>18351,155671=>18352,32136=>18353,32151=>18354,155744=>18355,32157=>18356,32167=>18357,32170=>18358,32182=>18359,32192=>18360,32215=>18361,32217=>18362,32230=>18363,17154=>18364,155885=>18365,64088=>18366,32272=>18367,32279=>18368,32285=>18369,32295=>18370,32300=>18371,32325=>18372,32373=>18373,32382=>18374,32390=>18375,32391=>18376,17195=>18377,32410=>18378,17219=>18379,32572=>18380,32571=>18381,32574=>18382,32579=>18383,13505=>18384,156272=>18385,156294=>18386,32611=>18387,32612=>18388,32621=>18389,32637=>18390,32638=>18391,32656=>18392,20859=>18393,146702=>18394,32662=>18395,32668=>18396,32685=>18397,156674=>18398,32707=>18399,32719=>18400,32739=>18401,32754=>18402,32778=>18403,32776=>18404,32790=>18405,32812=>18406,32816=>18407,32835=>18408,32870=>18409,32891=>18410,32921=>18411,32924=>18412,32932=>18413,32935=>18414,32952=>18415,157310=>18416,32965=>18417,32981=>18418,32998=>18419,33037=>18420,33013=>18421,33019=>18422,17390=>18423,33077=>18424,33054=>18425,17392=>18426,33060=>18427,33063=>18428,33068=>18429,157469=>18430,33085=>18431,17416=>18432,33129=>18433,17431=>18434,17436=>18435,33157=>18436,17442=>18437,33176=>18438,33202=>18439,33217=>18440,33219=>18441,33238=>18442,33243=>18443,157917=>18444,33252=>18445,157930=>18446,33260=>18447,33277=>18448,33279=>18449,158063=>18450,33284=>18451,158173=>18452,33305=>18453,33314=>18454,158238=>18455,33340=>18456,33353=>18457,33349=>18458,158296=>18459,17526=>18460,17530=>18461,33367=>18462,158348=>18463,33372=>18464,33379=>18465,158391=>18466,17553=>18467,33405=>18468,33407=>18469,33411=>18470,33418=>18471,33427=>18472,33447=>18473,33448=>18474,33458=>18475,33460=>18476,33466=>18477,33468=>18478,33506=>18479,33512=>18480,33527=>18481,33543=>18482,33544=>18483,33548=>18484,33620=>18485,33563=>18486,33565=>18487,33584=>18488,33596=>18489,33604=>18490,33623=>18491,17598=>18492,17620=>18493,17587=>18494,33684=>18495,33685=>18496,33691=>18497,33693=>18498,33737=>18499,33744=>18500,33748=>18501,33757=>18502,33765=>18503,33785=>18504,33813=>18505,158835=>18506,33815=>18507,33849=>18508,33871=>18509,33873=>18510,33874=>18511,33881=>18512,33882=>18513,33884=>18514,158941=>18515,33893=>18516,33912=>18517,33916=>18518,33921=>18519,17677=>18520,33943=>18521,33958=>18522,33982=>18523,17672=>18524,33998=>18525,33999=>18526,34003=>18527,159333=>18528,34023=>18529,34026=>18530,34031=>18531,34033=>18532,34042=>18533,34075=>18534,34084=>18535,34085=>18536,34091=>18537,34127=>18538,34159=>18539,17731=>18540,34129=>18541,34145=>18542,34146=>18543,159636=>18544,34171=>18545,34173=>18546,34175=>18547,34177=>18548,34182=>18549,34195=>18550,34205=>18551,34207=>18552,159736=>18553,159734=>18554,159735=>18555,34236=>18556,34247=>18557,34250=>18558,34264=>18559,34265=>18560,34271=>18561,34273=>18562,34278=>18563,34294=>18564,34304=>18565,34321=>18566,34334=>18567,34337=>18568,34340=>18569,34343=>18570,160013=>18571,34361=>18572,34364=>18573,160057=>18574,34368=>18575,34387=>18576,34390=>18577,34423=>18578,34439=>18579,34441=>18580,34460=>18581,34461=>18582,34481=>18583,34483=>18584,34497=>18585,34499=>18586,34513=>18587,34517=>18588,34519=>18589,34531=>18590,34534=>18591,17848=>18592,34565=>18593,34567=>18594,34574=>18595,34576=>18596,34591=>18597,34593=>18598,34595=>18599,34609=>18600,34618=>18601,34624=>18602,34627=>18603,34641=>18604,34648=>18605,34660=>18606,34661=>18607,34674=>18608,34684=>18609,160731=>18610,160730=>18611,34727=>18612,34697=>18613,34699=>18614,34707=>18615,34720=>18616,160766=>18617,17893=>18618,34750=>18619,160784=>18620,34753=>18621,34766=>18622,34783=>18623,160841=>18624,34787=>18625,34789=>18626,34790=>18627,34794=>18628,34835=>18629,34856=>18630,34862=>18631,34866=>18632,34876=>18633,17935=>18634,34890=>18635,34904=>18636,161301=>18637,161300=>18638,34921=>18639,161329=>18640,34927=>18641,34976=>18642,35004=>18643,35008=>18644,161427=>18645,35025=>18646,35027=>18647,17985=>18648,35073=>18649,161550=>18650,35127=>18651,161571=>18652,35138=>18653,35141=>18654,35145=>18655,161618=>18656,35170=>18657,35209=>18658,35216=>18659,35231=>18660,35248=>18661,35255=>18662,35288=>18663,35307=>18664,18081=>18665,35315=>18666,35325=>18667,35327=>18668,18095=>18669,35345=>18670,35348=>18671,162181=>18672,35361=>18673,35381=>18674,35390=>18675,35397=>18676,35405=>18677,35416=>18678,35502=>18679,35472=>18680,35511=>18681,35543=>18682,35580=>18683,162436=>18684,35594=>18685,35589=>18686,35597=>18687,35612=>18688,35629=>18689,18188=>18690,35665=>18691,35678=>18692,35702=>18693,35713=>18694,35723=>18695,35732=>18696,35733=>18697,35897=>18698,162739=>18699,35901=>18700,162750=>18701,162759=>18702,35909=>18703,35919=>18704,35927=>18705,35945=>18706,35949=>18707,163000=>18708,35987=>18709,35986=>18710,35993=>18711,18276=>18712,35995=>18713,36054=>18714,36053=>18715,163232=>18716,36081=>18717,163344=>18718,36105=>18719,36110=>18720,36296=>18721,36313=>18722,36364=>18723,18429=>18724,36349=>18725,36358=>18726,163978=>18727,36372=>18728,36374=>18729,36385=>18730,36386=>18731,36391=>18732,164027=>18733,18454=>18734,36406=>18735,36409=>18736,36436=>18737,36450=>18738,36461=>18739,36463=>18740,36504=>18741,36510=>18742,36533=>18743,36539=>18744,164482=>18745,18510=>18746,164595=>18747,36608=>18748,36616=>18749,36651=>18750,36672=>18751,36682=>18752,36696=>18753,164876=>18754,36772=>18755,36788=>18756,164949=>18757,36801=>18758,36806=>18759,64036=>18760,36810=>18761,36813=>18762,36819=>18763,36821=>18764,36849=>18765,36853=>18766,36859=>18767,36876=>18768,36919=>18769,165227=>18770,36931=>18771,36957=>18772,165320=>18773,165321=>18774,36997=>18775,37004=>18776,37008=>18777,37025=>18778,18613=>18779,37040=>18780,37046=>18781,37059=>18782,37064=>18783,165591=>18784,37084=>18785,37087=>18786,165626=>18787,37110=>18788,37106=>18789,37120=>18790,37099=>18791,37118=>18792,37119=>18793,37124=>18794,37126=>18795,37144=>18796,37150=>18797,37175=>18798,37177=>18799,37190=>18800,37191=>18801,37207=>18802,37209=>18803,37236=>18804,37241=>18805,37253=>18806,37299=>18807,37302=>18808,37315=>18809,37316=>18810,166217=>18811,166214=>18812,37356=>18813,37377=>18814,37398=>18815,37399=>18816,166251=>18817,37442=>18818,37450=>18819,37462=>18820,37473=>18821,37477=>18822,37480=>18823,166280=>18824,37500=>18825,37501=>18826,37503=>18827,37513=>18828,37517=>18829,37527=>18830,37529=>18831,37535=>18832,37547=>18833,166330=>18834,166331=>18835,37554=>18836,37567=>18837,37568=>18838,37574=>18839,37582=>18840,37605=>18841,37649=>18842,166430=>18843,166441=>18844,37623=>18845,37673=>18846,166513=>18847,166467=>18848,37713=>18849,37722=>18850,37739=>18851,37745=>18852,37747=>18853,37793=>18854,166553=>18855,166605=>18856,37768=>18857,37771=>18858,37775=>18859,37790=>18860,37877=>18861,166628=>18862,166621=>18863,37873=>18864,37831=>18865,37852=>18866,37863=>18867,37897=>18868,37910=>18869,37911=>18870,37883=>18871,37938=>18872,37947=>18873,166849=>18874,166895=>18875,37997=>18876,37999=>18877,38265=>18878,38278=>18879,38284=>18880,38285=>18881,167184=>18882,167281=>18883,38344=>18884,167419=>18885,167455=>18886,38444=>18887,38451=>18888,38452=>18889,167478=>18890,38460=>18891,38497=>18892,167561=>18893,38530=>18894,167659=>18895,38554=>18896,167730=>18897,18919=>18898,38579=>18899,38586=>18900,38589=>18901,18938=>18902,167928=>18903,38616=>18904,38618=>18905,38621=>18906,18948=>18907,38676=>18908,38691=>18909,18985=>18910,38710=>18911,38721=>18912,38727=>18913,38743=>18914,38747=>18915,38762=>18916,168608=>18917,168625=>18918,38806=>18919,38814=>18920,38833=>18921,38834=>18922,38846=>18923,38860=>18924,38865=>18925,38868=>18926,38872=>18927,38881=>18928,38897=>18929,38916=>18930,38925=>18931,38932=>18932,38934=>18933,19132=>18934,169104=>18935,38962=>18936,38963=>18937,38949=>18938,38983=>18939,39014=>18940,39083=>18941,39085=>18942,39088=>18943,169423=>18944,39095=>18945,39099=>18946,39100=>18947,39106=>18948,39111=>18949,39115=>18950,39137=>18951,39139=>18952,39146=>18953,39152=>18954,39153=>18955,39155=>18956,39176=>18957,19259=>18958,169712=>18959,39190=>18960,39191=>18961,169753=>18962,39194=>18963,39195=>18964,39196=>18965,169808=>18966,39217=>18967,39226=>18968,39227=>18969,39228=>18970,39233=>18971,39238=>18972,39246=>18973,39264=>18974,39331=>18975,39334=>18976,39357=>18977,39359=>18978,39363=>18979,39380=>18980,39385=>18981,39390=>18982,170182=>18983,39408=>18984,39417=>18985,39420=>18986,39434=>18987,39441=>18988,39450=>18989,39456=>18990,39473=>18991,39492=>18992,39500=>18993,39512=>18994,19394=>18995,39599=>18996,19402=>18997,39607=>18998,19410=>18999,39609=>19000,170610=>19001,39622=>19002,39632=>19003,39634=>19004,39637=>19005,39648=>19006,39653=>19007,39657=>19008,39692=>19009,39696=>19010,39698=>19011,39702=>19012,39708=>19013,39723=>19014,39741=>19015,19488=>19016,39755=>19017,39779=>19018,39781=>19019,39787=>19020,39788=>19021,39798=>19022,39799=>19023,39846=>19024,39852=>19025,171483=>19026,39858=>19027,39864=>19028,39870=>19029,39923=>19030,39896=>19031,39901=>19032,39914=>19033,39919=>19034,39918=>19035,171541=>19036,171658=>19037,171593=>19038,39958=>19039,39960=>19040,39961=>19041,39962=>19042,39965=>19043,39970=>19044,39977=>19045,171716=>19046,39985=>19047,39991=>19048,40005=>19049,40028=>19050,171753=>19051,40009=>19052,40010=>19053,171739=>19054,40020=>19055,40024=>19056,40027=>19057,40029=>19058,40031=>19059,40041=>19060,40042=>19061,40043=>19062,40045=>19063,40046=>19064,40050=>19065,40053=>19066,40058=>19067,40166=>19068,40178=>19069,40203=>19070,171982=>19071,171991=>19071,40209=>19072,40215=>19073,40216=>19074,172079=>19075,19652=>19076,172058=>19077,40242=>19078,19665=>19079,40266=>19080,40287=>19081,40290=>19082,172281=>19083,172162=>19084,40307=>19085,40310=>19086,40311=>19087,40324=>19088,40345=>19089,40353=>19090,40383=>19091,40373=>19092,40377=>19093,40381=>19094,40393=>19095,40410=>19096,40416=>19097,40419=>19098,19719=>19099,40458=>19100,40450=>19101,40461=>19102,40476=>19103,40571=>19104,139800=>19105,40576=>19106,40581=>19107,40603=>19108,172940=>19109,40637=>19110,173111=>19111,40671=>19112,40703=>19113,40706=>19114,19831=>19115,40707=>19116,40762=>19117,40765=>19118,40774=>19119,40787=>19120,40789=>19121,40792=>19122,173553=>19123,40797=>19124,173570=>19125,40809=>19126,40813=>19127,40816=>19128,173746=>19129,11948=>19130,13844=>19131,14509=>19132,15820=>19133,16348=>19134,17854=>19135,17936=>19136,19326=>19137,19512=>19138,19681=>19139,19980=>19140,20003=>19141,20004=>19142,20089=>19143,20211=>19144,20236=>19145,20249=>19146,20267=>19147,20270=>19148,20273=>19149,20356=>19150,20382=>19151,20407=>19152,20484=>19153,20492=>19154,20556=>19155,20575=>19156,20578=>19157,20599=>19158,20622=>19159,20638=>19160,20642=>19161,20675=>19162,20712=>19163,20721=>19164,20734=>19165,20743=>19166,20748=>19167,20749=>19168,20750=>19169,20787=>19170,20792=>19171,20852=>19172,20868=>19173,20920=>19174,20922=>19175,20936=>19176,20943=>19177,20945=>19178,20947=>19179,20948=>19180,20952=>19181,20959=>19182,20997=>19183,21030=>19184,21032=>19185,21035=>19186,21041=>19187,21042=>19188,21045=>19189,21052=>19190,21082=>19191,21088=>19192,21102=>19193,21112=>19194,21113=>19195,21130=>19196,21132=>19197,21217=>19198,21225=>19199,21233=>19200,21251=>19201,21265=>19202,21279=>19203,21293=>19204,21298=>19205,21309=>19206,21349=>19207,21357=>19208,21369=>19209,21374=>19210,21396=>19211,21401=>19212,21418=>19213,21423=>19214,21434=>19215,21441=>19216,21444=>19217,21445=>19218,21472=>19219,21523=>19220,21546=>19221,21553=>19222,21556=>19223,21557=>19224,21580=>19225,21671=>19226,21674=>19227,21681=>19228,21691=>19229,21710=>19230,21738=>19231,21756=>19232,21765=>19233,21768=>19234,21781=>19235,21799=>19236,21802=>19237,21814=>19238,21841=>19239,21862=>19240,21903=>19241,21906=>19242,21908=>19243,21924=>19244,21938=>19245,21955=>19246,21958=>19247,21971=>19248,21979=>19249,21996=>19250,21998=>19251,22001=>19252,22006=>19253,22008=>19254,22021=>19255,22029=>19256,22033=>19257,22034=>19258,22060=>19259,22069=>19260,22073=>19261,22093=>19262,22100=>19263,22149=>19264,22175=>19265,22182=>19266,22199=>19267,22220=>19268,22223=>19269,22233=>19270,22241=>19271,22251=>19272,22253=>19273,22257=>19274,22279=>19275,22284=>19276,22298=>19277,22299=>19278,22301=>19279,22316=>19280,22318=>19281,22333=>19282,22334=>19283,22367=>19284,22379=>19285,22381=>19286,22394=>19287,22403=>19288,22423=>19289,22446=>19290,22485=>19291,22503=>19292,22541=>19293,22566=>19294,22605=>19295,22607=>19296,22623=>19297,22637=>19298,22655=>19299,22657=>19300,22680=>19301,22716=>19302,22815=>19303,22819=>19304,22873=>19305,22905=>19306,22935=>19307,22959=>19308,22963=>19309,23007=>19310,23025=>19311,23032=>19312,23218=>19313,23224=>19314,23274=>19315,23286=>19316,23323=>19317,23325=>19318,23329=>19319,23352=>19320,23479=>19321,23511=>19322,23520=>19323,23583=>19324,23594=>19325,23596=>19326,23606=>19327,23641=>19328,23644=>19329,23661=>19330,23773=>19331,23809=>19332,23860=>19333,23869=>19334,23897=>19335,23934=>19336,23939=>19337,24007=>19338,24057=>19339,24104=>19340,24114=>19341,24117=>19342,24155=>19343,24168=>19344,24170=>19345,24183=>19346,24192=>19347,24203=>19348,24243=>19349,24253=>19350,24273=>19351,24276=>19352,24277=>19353,24397=>19354,24492=>19355,24554=>19356,24583=>19357,24649=>19358,24660=>19359,24679=>19360,24763=>19361,24772=>19362,24829=>19363,24842=>19364,24854=>19365,24874=>19366,24886=>19367,24926=>19368,24932=>19369,24955=>19370,24957=>19371,24959=>19372,24989=>19373,25016=>19374,25052=>19375,25058=>19376,25061=>19377,25064=>19378,25092=>19379,25095=>19380,25137=>19381,25145=>19382,25149=>19383,25210=>19384,25232=>19385,25256=>19386,25306=>19387,25332=>19388,25366=>19389,25386=>19390,25398=>19391,25414=>19392,25419=>19393,25427=>19394,25457=>19395,25461=>19396,25471=>19397,25474=>19398,25482=>19399,25518=>19400,25519=>19401,25578=>19402,25592=>19403,25593=>19404,25618=>19405,25624=>19406,25632=>19407,25636=>19408,25642=>19409,25653=>19410,25661=>19411,25663=>19412,25682=>19413,25695=>19414,25716=>19415,25744=>19416,25752=>19417,25753=>19418,25772=>19419,25779=>19420,25837=>19421,25840=>19422,25883=>19423,25887=>19424,25902=>19425,25929=>19426,25952=>19427,26002=>19428,26005=>19429,26036=>19430,26046=>19431,26056=>19432,26062=>19433,26064=>19434,26079=>19435,26238=>19436,26251=>19437,26252=>19438,26291=>19439,26304=>19440,26319=>19441,26405=>19442,26421=>19443,26453=>19444,26496=>19445,26511=>19446,26513=>19447,26532=>19448,26545=>19449,26549=>19450,26558=>19451,26664=>19452,26758=>19453,26859=>19454,26869=>19455,26903=>19456,26931=>19457,26936=>19458,26971=>19459,26981=>19460,27048=>19461,27051=>19462,27055=>19463,27109=>19464,27121=>19465,27210=>19466,27221=>19467,27239=>19468,27249=>19469,27311=>19470,27336=>19471,27337=>19472,27395=>19473,27451=>19474,27455=>19475,27517=>19476,27518=>19477,27568=>19478,27639=>19479,27641=>19480,27652=>19481,27657=>19482,27661=>19483,27692=>19484,27722=>19485,27730=>19486,27732=>19487,27769=>19488,27820=>19489,27828=>19490,27858=>19491,28001=>19492,28028=>19493,28089=>19494,28144=>19495,28229=>19496,28275=>19497,28283=>19498,28285=>19499,28297=>19500,28348=>19501,28378=>19502,28379=>19503,28454=>19504,28457=>19505,28464=>19506,28551=>19507,28573=>19508,28590=>19509,28599=>19510,28685=>19511,28704=>19512,28745=>19513,28824=>19514,28848=>19515,28885=>19516,28886=>19517,28997=>19518,29106=>19519,29172=>19520,29207=>19521,29215=>19522,29251=>19523,29263=>19524,29264=>19525,29274=>19526,29280=>19527,29288=>19528,29303=>19529,29316=>19530,29385=>19531,29413=>19532,29428=>19533,29442=>19534,29451=>19535,29470=>19536,29474=>19537,29498=>19538,29499=>19539,29517=>19540,29528=>19541,29543=>19542,29810=>19543,29871=>19544,29919=>19545,29924=>19546,29940=>19547,29947=>19548,29974=>19549,29985=>19550,30015=>19551,30046=>19552,30105=>19553,30116=>19554,30145=>19555,30148=>19556,30156=>19557,30167=>19558,30172=>19559,30177=>19560,30191=>19561,30212=>19562,30220=>19563,30237=>19564,30258=>19565,30264=>19566,30277=>19567,30282=>19568,30303=>19569,30381=>19570,30397=>19571,30425=>19572,30443=>19573,30448=>19574,30457=>19575,30464=>19576,30478=>19577,30498=>19578,30504=>19579,30511=>19580,30521=>19581,30526=>19582,30533=>19583,30538=>19584,30543=>19585,30558=>19586,30564=>19587,30567=>19588,30572=>19589,30596=>19590,30604=>19591,30605=>19592,30614=>19593,30631=>19594,30639=>19595,30647=>19596,30654=>19597,30665=>19598,30673=>19599,30681=>19600,30705=>19601,30775=>19602,30812=>19603,30846=>19604,30872=>19605,30881=>19606,30897=>19607,30899=>19608,30921=>19609,30931=>19610,30988=>19611,31007=>19612,31015=>19613,31016=>19614,31039=>19615,31042=>19616,31060=>19617,31083=>19618,31100=>19619,31147=>19620,31172=>19621,31210=>19622,31234=>19623,31244=>19624,31280=>19625,31290=>19626,31300=>19627,31360=>19628,31366=>19629,31380=>19630,31413=>19631,31421=>19632,31486=>19633,31531=>19634,31607=>19635,31648=>19636,31660=>19637,31664=>19638,31720=>19639,31730=>19640,31736=>19641,31740=>19642,31742=>19643,31753=>19644,31784=>19645,31791=>19646,31810=>19647,31826=>19648,31827=>19649,31835=>19650,31836=>19651,31837=>19652,31858=>19653,31869=>19654,31879=>19655,31902=>19656,31930=>19657,31943=>19658,31955=>19659,31962=>19660,32060=>19661,32077=>19662,32130=>19663,32133=>19664,32141=>19665,32145=>19666,32158=>19667,32179=>19668,32185=>19669,32208=>19670,32229=>19671,32245=>19672,32246=>19673,32303=>19674,32310=>19675,32324=>19676,32367=>19677,32376=>19678,32385=>19679,32573=>19680,32603=>19681,32605=>19682,32613=>19683,32625=>19684,32639=>19685,32640=>19686,32651=>19687,32674=>19688,32765=>19689,32766=>19690,32767=>19691,32775=>19692,32781=>19693,32798=>19694,32825=>19695,32904=>19696,32910=>19697,32975=>19698,32980=>19699,33005=>19700,33008=>19701,33015=>19702,33018=>19703,33022=>19704,33027=>19705,33047=>19706,33072=>19707,33111=>19708,33135=>19709,33139=>19710,33163=>19711,33168=>19712,33179=>19713,33182=>19714,33227=>19715,33237=>19716,33245=>19717,33246=>19718,33249=>19719,33263=>19720,33270=>19721,33280=>19722,33291=>19723,33299=>19724,33300=>19725,33306=>19726,33338=>19727,33348=>19728,33389=>19729,33412=>19730,33417=>19731,33425=>19732,33450=>19733,33456=>19734,33488=>19735,33514=>19736,33519=>19737,33526=>19738,33622=>19739,33656=>19740,33784=>19741,33788=>19742,33880=>19743,33939=>19744,33969=>19745,33981=>19746,34043=>19747,34118=>19748,34134=>19749,34141=>19750,34181=>19751,34200=>19752,34370=>19753,34374=>19754,34496=>19755,34580=>19756,34594=>19757,34606=>19758,34617=>19759,34653=>19760,34683=>19761,34700=>19762,34702=>19763,34711=>19764,34712=>19765,34718=>19766,34723=>19767,34734=>19768,34751=>19769,34761=>19770,34778=>19771,34840=>19772,34843=>19773,34861=>19774,34874=>19775,34885=>19776,34891=>19777,34894=>19778,34901=>19779,34906=>19780,34926=>19781,34970=>19782,34971=>19783,34972=>19784,35021=>19785,35040=>19786,35055=>19787,35086=>19788,35087=>19789,35110=>19790,35125=>19791,35162=>19792,35164=>19793,35179=>19794,35184=>19795,35196=>19796,35237=>19797,35253=>19798,35260=>19799,35285=>19800,35401=>19801,35415=>19802,35431=>19803,35454=>19804,35462=>19805,35478=>19806,35510=>19807,35529=>19808,35537=>19809,35549=>19810,35564=>19811,35573=>19812,35590=>19813,35599=>19814,35601=>19815,35653=>19816,35666=>19817,35693=>19818,35704=>19819,35708=>19820,35710=>19821,35717=>19822,35743=>19823,35915=>19824,35923=>19825,35963=>19826,36026=>19827,36037=>19828,36041=>19829,36050=>19830,36076=>19831,36085=>19832,36087=>19833,36097=>19834,36099=>19835,36119=>19836,36124=>19837,36206=>19838,36241=>19839,36255=>19840,36267=>19841,36274=>19842,36309=>19843,36327=>19844,36337=>19845,36338=>19846,36340=>19847,36353=>19848,36363=>19849,36390=>19850,36401=>19851,36416=>19852,36417=>19853,36429=>19854,36431=>19855,36444=>19856,36449=>19857,36457=>19858,36465=>19859,36469=>19860,36471=>19861,36489=>19862,36496=>19863,36501=>19864,36506=>19865,36519=>19866,36521=>19867,36525=>19868,36584=>19869,36592=>19870,36615=>19871,36632=>19872,36645=>19873,36647=>19874,36652=>19875,36661=>19876,36666=>19877,36675=>19878,36679=>19879,36689=>19880,36693=>19881,36768=>19882,36769=>19883,36770=>19884,36773=>19885,36868=>19886,36891=>19887,36911=>19888,36940=>19889,36955=>19890,36976=>19891,36980=>19892,36985=>19893,37003=>19894,37016=>19895,37024=>19896,37042=>19897,37053=>19898,37065=>19899,37104=>19900,37125=>19901,37157=>19902,37210=>19903,37223=>19904,37242=>19905,37258=>19906,37265=>19907,37269=>19908,37296=>19909,37307=>19910,37309=>19911,37314=>19912,37317=>19913,37376=>19914,37385=>19915,37411=>19916,37494=>19917,37518=>19918,37551=>19919,37563=>19920,37564=>19921,37569=>19922,37571=>19923,37573=>19924,37576=>19925,37652=>19926,37683=>19927,37686=>19928,37720=>19929,37759=>19930,37762=>19931,37770=>19932,37819=>19933,37836=>19934,37862=>19935,37881=>19936,37890=>19937,37901=>19938,37902=>19939,37934=>19940,37964=>19941,38280=>19942,38305=>19943,38335=>19944,38342=>19945,38345=>19946,38353=>19947,38354=>19948,38368=>19949,38372=>19950,38374=>19951,38436=>19952,38449=>19953,38456=>19954,38461=>19955,38484=>19956,38516=>19957,38523=>19958,38527=>19959,38529=>19960,38531=>19961,38537=>19962,38550=>19963,38574=>19964,38659=>19965,38683=>19966,38689=>19967,38690=>19968,38696=>19969,38705=>19970,38759=>19971,38774=>19972,38781=>19973,38783=>19974,38809=>19975,38815=>19976,38828=>19977,38841=>19978,38861=>19979,38880=>19980,38895=>19981,38919=>19982,38950=>19983,38958=>19984,39010=>19985,39011=>19986,39092=>19987,39109=>19988,39170=>19989,39185=>19990,39189=>19991,39221=>19992,39240=>19993,39252=>19994,39262=>19995,39393=>19996,39436=>19997,39440=>19998,39459=>19999,39489=>20000,39505=>20001,39613=>20002,39614=>20003,39681=>20004,39689=>20005,39691=>20006,39693=>20007,39694=>20008,39705=>20009,39733=>20010,39752=>20011,39765=>20012,39784=>20013,39808=>20014,39814=>20015,39824=>20016,39837=>20017,39856=>20018,39871=>20019,39880=>20020,39935=>20021,39938=>20022,39964=>20023,39989=>20024,40004=>20025,40022=>20026,40033=>20027,40040=>20028,40240=>20029,40253=>20030,40298=>20031,40315=>20032,40421=>20033,40425=>20034,40435=>20035,40570=>20036,40578=>20037,40579=>20038,40580=>20039,40624=>20040,40676=>20041,40688=>20042,40690=>20043,40713=>20044,40719=>20045,40724=>20046,40731=>20047,40738=>20048,40742=>20049,40746=>20050,40747=>20051,40756=>20052,40794=>20053,40815=>20054,40862=>20055,40869=>20056,131317=>20057,151044=>20058,151538=>20059,163187=>20060,194581=>20061,194630=>20062,194713=>20063,194726=>20064,194789=>20065,195038=>20066,13790=>20067,40895=>20068,40896=>20069,40897=>20070,40898=>20071,172722=>20072,131416=>20075,132529=>20080,132844=>20083,134488=>20090,154060=>20112,14756=>20122,14776=>20123,142914=>20124,14940=>20127,133064=>20128,143339=>20130,162228=>20133,15044=>20135,15051=>20136,14981=>20142,15347=>20151,27384=>20152,15665=>20158,147531=>20168,15936=>20170,14497=>20171,158878=>20206,18207=>20219,162876=>20220,18462=>20225,39709=>20297,39724=>20298,20482=>20299,20958=>20300,21255=>20301,23532=>20302,63784=>20303,26142=>20304,63785=>20305,28746=>20306,64021=>20307,21857=>20308,27706=>20309,31328=>20310,156492=>20311,34819=>20312,38315=>20313,38741=>20314,171581=>20315,173594=>20316,900=>20317,901=>20318,272=>20322,294=>20323,306=>20324,319=>20325,330=>20326,358=>20327,307=>20328,312=>20329,320=>20330,329=>20331,359=>20332,266=>20333,278=>20334,286=>20335,290=>20336,288=>20337,304=>20338,302=>20339,310=>20340,315=>20342,325=>20343,342=>20344,370=>20345,471=>20346,475=>20347,473=>20348,469=>20349,372=>20350,374=>20351,267=>20352,279=>20353,501=>20354,287=>20355,289=>20356,303=>20357,311=>20358,316=>20360,326=>20361,343=>20362,371=>20363,373=>20364,375=>20365,8494=>20366,8710=>20367,8719=>20368,8804=>20369,8805=>20370,9674=>20371,902=>20427,904=>20428,905=>20429,906=>20430,938=>20431,908=>20432,910=>20433,939=>20434,911=>20435,940=>20436,941=>20437,942=>20438,943=>20439,970=>20440,912=>20441,972=>20442,973=>20443,971=>20444,944=>20445,974=>20446,1026=>20447,1027=>20448,1028=>20449,1029=>20450,1030=>20451,1031=>20452,1032=>20453,1033=>20454,1034=>20455,1035=>20456,1036=>20457,1038=>20458,1039=>20459,1106=>20460,1107=>20461,1108=>20462,1109=>20463,1110=>20464,1111=>20465,1112=>20466,1113=>20467,1114=>20468,1115=>20469,1116=>20470,1118=>20471,1119=>20472,9361=>20587,9362=>20588,20021=>21075,20060=>21076,20067=>21077,20072=>21078,20084=>21079,20085=>21080,20119=>21081,20143=>21082,20187=>21083,20194=>21084,20200=>21085,20207=>21086,20222=>21087,20226=>21088,20232=>21089,20242=>21090,20247=>21091,20275=>21092,20277=>21093,20288=>21094,20290=>21095,20299=>21096,20300=>21097,20306=>21098,20323=>21099,20334=>21100,20337=>21101,20345=>21102,20353=>21103,20361=>21104,20364=>21105,20366=>21106,20368=>21107,20371=>21108,20377=>21109,20383=>21110,20409=>21111,20411=>21112,20412=>21113,20413=>21114,20416=>21115,20417=>21116,20422=>21117,20424=>21118,20428=>21119,20444=>21120,20450=>21121,20464=>21122,20476=>21123,20487=>21124,20490=>21125,20503=>21126,20509=>21127,20528=>21128,20530=>21129,20531=>21130,20533=>21131,20549=>21132,20554=>21133,20561=>21134,20562=>21135,20569=>21136,20576=>21137,20583=>21138,20589=>21139,20593=>21140,20609=>21141,20611=>21142,20612=>21143,20614=>21144,20618=>21145,20624=>21146,20635=>21147,20639=>21148,20640=>21149,20641=>21150,20655=>21151,20656=>21152,20665=>21153,20669=>21154,20672=>21155,20691=>21156,20700=>21157,20701=>21158,20703=>21159,20706=>21160,20708=>21161,20726=>21162,20730=>21163,20761=>21165,20764=>21166,20765=>21167,20771=>21168,20775=>21169,20776=>21170,20780=>21171,20781=>21172,20783=>21173,20785=>21174,20788=>21175,20793=>21176,20802=>21177,20815=>21178,20819=>21179,20824=>21180,20838=>21181,20862=>21182,20878=>21183,20927=>21184,20930=>21185,20946=>21186,20949=>21187,20965=>21188,20978=>21189,20983=>21190,21016=>21191,21026=>21192,21061=>21193,21080=>21194,21087=>21195,21120=>21196,21125=>21197,21141=>21198,21142=>21199,21143=>21200,21146=>21201,21157=>21202,21159=>21203,21168=>21204,21174=>21205,21175=>21206,21176=>21207,21181=>21208,21188=>21209,21190=>21210,21199=>21211,21204=>21212,21212=>21213,21221=>21214,21224=>21215,21226=>21216,21228=>21217,21236=>21218,21238=>21219,21260=>21220,21267=>21221,21272=>21222,21275=>21223,21278=>21224,21285=>21225,21287=>21226,21288=>21227,21289=>21228,21291=>21229,21292=>21230,21296=>21231,21308=>21232,21337=>21233,21339=>21234,21379=>21236,21383=>21237,21384=>21238,21390=>21239,21409=>21240,21429=>21241,21432=>21242,21437=>21243,21455=>21244,21458=>21245,21459=>21246,21470=>21247,21479=>21249,21506=>21250,21530=>21251,21537=>21252,21551=>21253,21572=>21254,21575=>21255,21583=>21256,21598=>21257,21604=>21258,21607=>21259,21609=>21260,21613=>21261,21614=>21262,21633=>21263,21635=>21264,21637=>21265,21641=>21266,21649=>21267,21663=>21268,21706=>21269,21728=>21270,21750=>21271,21758=>21272,21772=>21273,21773=>21274,21810=>21275,21819=>21276,21821=>21277,21833=>21278,21837=>21279,21848=>21280,21850=>21281,21851=>21282,21887=>21283,21907=>21284,21911=>21285,21923=>21286,21953=>21287,21963=>21288,21975=>21289,21976=>21290,21982=>21291,22015=>21292,22026=>21294,22041=>21295,22067=>21296,22076=>21297,22081=>21298,22083=>21299,22084=>21300,22086=>21301,22113=>21302,22114=>21303,22115=>21304,22133=>21305,22148=>21306,22155=>21307,22183=>21308,22187=>21309,22206=>21310,22219=>21311,22224=>21312,22236=>21313,22245=>21314,22246=>21315,22247=>21316,22273=>21317,22274=>21318,22289=>21319,22304=>21320,22306=>21321,22308=>21322,22309=>21323,22314=>21324,22335=>21325,22354=>21326,22370=>21327,22375=>21328,22382=>21329,22385=>21330,22393=>21331,22398=>21332,22401=>21333,22420=>21334,22425=>21335,22431=>21336,22433=>21337,22421=>21338,22439=>21339,22441=>21340,22461=>21341,22493=>21342,22505=>21343,22526=>21344,22531=>21345,22536=>21346,22497=>21347,22540=>21348,22555=>21349,22559=>21350,22573=>21351,22591=>21352,22608=>21353,22613=>21354,22632=>21355,22648=>21356,22663=>21357,22664=>21358,22668=>21359,22678=>21360,22688=>21361,22689=>21362,22690=>21363,22694=>21364,22724=>21365,22722=>21366,22728=>21367,22742=>21368,22749=>21369,22753=>21370,22802=>21372,22803=>21373,22813=>21374,22817=>21375,22824=>21376,22832=>21377,22835=>21378,22837=>21379,22838=>21380,22847=>21381,22851=>21382,22866=>21383,22878=>21384,22891=>21385,22895=>21386,22898=>21387,22907=>21388,22924=>21389,22926=>21390,22933=>21391,22951=>21392,22957=>21393,22960=>21394,22967=>21395,22977=>21396,22980=>21397,23023=>21398,23026=>21399,23028=>21400,23031=>21401,23040=>21402,23054=>21403,23058=>21404,23070=>21405,23076=>21406,23080=>21407,23082=>21408,23088=>21409,23108=>21410,23109=>21411,23112=>21412,23116=>21413,23120=>21414,23134=>21415,23163=>21416,23184=>21417,23187=>21418,23190=>21419,23193=>21420,23227=>21421,23238=>21422,23240=>21423,23247=>21424,23293=>21425,23297=>21426,23371=>21427,23390=>21428,23406=>21429,23430=>21430,23438=>21431,23440=>21432,23441=>21433,23444=>21434,23464=>21435,23465=>21436,23469=>21437,23471=>21438,23473=>21439,23474=>21440,23482=>21441,23484=>21442,23489=>21443,23501=>21444,23503=>21445,23513=>21446,23514=>21447,23535=>21448,23540=>21449,23564=>21450,23575=>21451,23590=>21452,23598=>21453,23602=>21454,23605=>21455,23642=>21456,23668=>21457,23669=>21458,23675=>21459,23677=>21460,23687=>21461,23698=>21462,23709=>21463,23730=>21464,23732=>21465,23767=>21466,23790=>21467,23793=>21468,23794=>21469,23826=>21470,23843=>21471,23871=>21472,23880=>21473,23893=>21474,23889=>21475,23903=>21476,23904=>21477,23906=>21478,23908=>21479,23929=>21480,23930=>21481,23935=>21482,23946=>21483,23955=>21484,23957=>21485,23963=>21486,23967=>21487,23979=>21488,24003=>21489,24014=>21490,24025=>21491,24071=>21492,24077=>21493,24096=>21494,24139=>21495,24144=>21496,24145=>21497,24156=>21498,24176=>21499,24206=>21500,24226=>21501,24228=>21502,24241=>21503,24268=>21504,24270=>21505,24284=>21506,24286=>21507,24293=>21508,24299=>21509,24326=>21510,24345=>21511,24356=>21512,24363=>21513,24364=>21514,24366=>21515,24368=>21516,24383=>21517,24388=>21518,24411=>21519,24416=>21520,24431=>21521,24436=>21522,24437=>21523,24440=>21524,24442=>21525,24461=>21526,24470=>21527,24477=>21528,24491=>21529,24496=>21530,24497=>21531,24520=>21532,24528=>21533,24529=>21534,24552=>21535,24556=>21536,24562=>21537,24566=>21538,24570=>21539,24586=>21540,24595=>21541,24607=>21542,24621=>21543,24640=>21544,24648=>21545,24657=>21546,24662=>21547,24663=>21548,24689=>21549,24702=>21550,24706=>21551,24710=>21552,24712=>21553,24718=>21554,24721=>21555,24723=>21556,24728=>21557,24738=>21559,24741=>21560,24759=>21561,24770=>21562,24777=>21563,24778=>21564,24782=>21565,24783=>21566,24802=>21567,24805=>21568,24828=>21569,24834=>21570,24839=>21571,24844=>21572,24855=>21573,24866=>21574,24881=>21575,24885=>21576,24889=>21577,24901=>21578,24905=>21579,24940=>21580,24946=>21581,24952=>21582,24960=>21583,24961=>21584,24963=>21585,24964=>21586,24971=>21587,24988=>21588,24992=>21589,25002=>21590,25024=>21591,25025=>21592,25038=>21593,25039=>21594,25054=>21595,25057=>21596,25063=>21597,25065=>21598,25068=>21599,25069=>21600,25071=>21601,25089=>21602,25091=>21603,25116=>21604,25120=>21605,25127=>21606,25131=>21607,25154=>21608,25156=>21609,25168=>21610,25172=>21611,25180=>21612,25213=>21613,25229=>21614,25230=>21615,25231=>21616,25267=>21617,25270=>21618,25271=>21619,25274=>21620,25278=>21621,25279=>21622,25294=>21623,25322=>21624,25330=>21625,25348=>21626,25355=>21627,25363=>21628,25385=>21629,25389=>21630,25418=>21631,25426=>21632,25428=>21633,25432=>21634,25435=>21635,25446=>21636,25453=>21637,25464=>21638,25493=>21639,25498=>21640,25508=>21641,25510=>21642,25517=>21643,25537=>21644,25541=>21645,25544=>21646,25550=>21647,25555=>21648,25587=>21649,25610=>21650,25648=>21651,25675=>21652,25679=>21653,25683=>21654,25692=>21655,25697=>21656,25699=>21657,25733=>21658,25743=>21659,25755=>21660,25761=>21661,25763=>21662,25766=>21663,25768=>21664,25789=>21665,25801=>21666,25809=>21667,25833=>21668,25834=>21669,25845=>21670,25857=>21671,25864=>21672,25865=>21673,25866=>21674,25875=>21675,25894=>21676,25905=>21677,25914=>21678,25916=>21679,25917=>21680,25923=>21681,25936=>21682,25938=>21683,25951=>21684,25981=>21685,26008=>21686,26016=>21687,26019=>21688,26022=>21689,26030=>21690,26035=>21691,26070=>21692,26072=>21693,26100=>21695,26101=>21696,26110=>21697,26111=>21698,26125=>21699,26129=>21700,26130=>21701,26134=>21702,26141=>21703,26147=>21704,26150=>21705,26153=>21706,26169=>21707,26167=>21708,26176=>21709,26182=>21710,26186=>21711,26200=>21712,26208=>21713,26229=>21714,26239=>21715,26233=>21716,26236=>21717,26266=>21718,26267=>21719,26268=>21720,26271=>21721,26306=>21723,26307=>21724,26316=>21725,26318=>21726,26324=>21727,26335=>21728,26347=>21729,26350=>21730,26375=>21731,26396=>21732,26400=>21733,26402=>21734,26430=>21735,26437=>21736,26476=>21737,26500=>21738,26510=>21739,26518=>21740,26521=>21741,26556=>21742,26557=>21743,26562=>21744,26565=>21745,26569=>21746,26588=>21747,26593=>21748,26598=>21749,26610=>21750,26614=>21751,26644=>21752,26649=>21753,26663=>21754,26671=>21755,26687=>21756,26698=>21757,26712=>21758,26735=>21759,26736=>21760,26737=>21761,26745=>21762,26747=>21763,26760=>21764,26785=>21765,26793=>21766,26798=>21767,26833=>21768,26835=>21769,26844=>21770,26845=>21771,26858=>21772,26870=>21773,26877=>21774,26886=>21775,26889=>21776,26896=>21777,26902=>21778,26929=>21779,26949=>21780,26958=>21781,26982=>21782,26992=>21783,26993=>21784,27003=>21785,27021=>21786,27041=>21787,27064=>21788,27077=>21789,27080=>21790,27136=>21792,27139=>21793,27168=>21794,27172=>21795,27191=>21796,27242=>21798,27265=>21799,27270=>21800,27271=>21801,27291=>21802,27312=>21803,27313=>21804,27316=>21805,27326=>21806,27327=>21807,27340=>21808,27349=>21809,27350=>21810,27376=>21811,27388=>21812,27394=>21813,27398=>21814,27399=>21815,27401=>21816,27432=>21817,27435=>21818,27446=>21819,27469=>21820,27474=>21821,27485=>21822,27499=>21823,27502=>21824,27504=>21825,27525=>21826,27543=>21827,27551=>21828,27552=>21829,27554=>21830,27555=>21831,27560=>21832,27564=>21833,27576=>21834,27577=>21835,27587=>21836,27588=>21837,27619=>21838,27666=>21839,27673=>21840,27679=>21841,27686=>21842,27687=>21843,27688=>21844,27694=>21845,27707=>21846,27723=>21847,27727=>21848,27755=>21849,27768=>21850,27783=>21851,27807=>21852,27824=>21853,27826=>21854,27853=>21855,27855=>21856,27857=>21857,27879=>21858,27890=>21859,27892=>21860,27911=>21861,27919=>21862,27923=>21863,27930=>21864,27944=>21865,27999=>21866,28007=>21867,28050=>21868,28055=>21869,28087=>21870,28093=>21871,28128=>21872,28130=>21873,28133=>21874,28143=>21875,28148=>21876,28160=>21877,28164=>21878,28219=>21879,28242=>21880,28253=>21881,28258=>21882,28264=>21883,28301=>21884,28313=>21885,28320=>21886,28333=>21887,28334=>21888,28339=>21889,28347=>21890,28352=>21891,28360=>21892,28365=>21893,28367=>21894,28397=>21895,28398=>21896,28420=>21897,28424=>21898,28429=>21899,28438=>21900,28443=>21901,28475=>21902,28461=>21903,28495=>21904,28499=>21905,28509=>21906,28524=>21907,28547=>21908,28563=>21909,28582=>21910,28592=>21911,28613=>21912,28648=>21913,28669=>21914,28695=>21915,28719=>21916,28724=>21917,28727=>21918,28740=>21919,28744=>21920,28757=>21921,28820=>21922,28822=>21923,28827=>21924,28852=>21925,28922=>21926,28933=>21927,28939=>21928,28973=>21929,28984=>21930,28993=>21931,29003=>21932,29015=>21934,29018=>21935,29068=>21936,29082=>21937,29104=>21938,29119=>21939,29120=>21940,29132=>21941,29146=>21942,29176=>21943,29192=>21944,29193=>21945,29203=>21946,29210=>21947,29220=>21948,29231=>21949,29253=>21950,29262=>21951,29278=>21952,29291=>21953,29297=>21954,29307=>21955,29308=>21956,29321=>21957,29331=>21958,29352=>21959,29397=>21960,29398=>21961,29400=>21962,29407=>21963,29438=>21964,29453=>21965,29459=>21966,29490=>21967,29493=>21968,29526=>21969,29533=>21970,29534=>21971,29535=>21972,29536=>21973,29545=>21974,29561=>21975,29568=>21976,29582=>21977,29584=>21978,29587=>21979,29591=>21980,29610=>21981,29613=>21982,29638=>21983,29644=>21984,29651=>21985,29661=>21986,29670=>21987,29687=>21988,29691=>21989,29695=>21990,29696=>21991,29713=>21992,29741=>21993,29799=>21994,29800=>21995,29806=>21996,29839=>21997,29841=>21998,29850=>21999,29870=>22000,29873=>22001,29874=>22002,29900=>22003,29904=>22004,29907=>22005,29915=>22007,29928=>22008,29930=>22009,29948=>22011,29958=>22012,29970=>22013,29991=>22014,29993=>22015,30006=>22016,30009=>22017,30019=>22018,30023=>22019,30039=>22020,30047=>22021,30049=>22022,30075=>22023,30076=>22024,30085=>22025,30101=>22026,30108=>22027,30138=>22028,30226=>22029,30243=>22030,30249=>22031,30265=>22032,30266=>22033,30272=>22034,30276=>22035,30297=>22036,30341=>22037,30348=>22038,30349=>22039,30367=>22040,30370=>22041,30371=>22042,30401=>22043,30411=>22044,30432=>22046,30454=>22047,30470=>22048,30482=>22049,30484=>22050,30485=>22051,30492=>22052,30510=>22053,30525=>22054,30530=>22055,30546=>22056,30550=>22057,30551=>22058,30576=>22059,30579=>22060,30580=>22061,30638=>22064,30641=>22065,30645=>22066,30659=>22067,30674=>22068,30677=>22069,30712=>22070,30734=>22071,30737=>22072,30749=>22073,30755=>22074,30788=>22075,30792=>22076,30796=>22077,30802=>22078,30814=>22079,30816=>22080,30817=>22081,30819=>22082,30863=>22083,30888=>22084,30892=>22085,30898=>22086,30909=>22087,30911=>22088,30919=>22089,30930=>22090,30934=>22091,30939=>22092,30943=>22093,30954=>22094,30963=>22095,30966=>22096,30975=>22097,30982=>22098,31002=>22099,31006=>22100,31008=>22101,31017=>22102,31021=>22103,31029=>22104,31044=>22105,31051=>22106,31055=>22107,31057=>22108,31081=>22109,31099=>22110,31102=>22111,31116=>22112,31121=>22113,31123=>22114,31132=>22115,31144=>22116,31151=>22117,31183=>22118,31197=>22119,31200=>22120,31202=>22121,31205=>22122,31217=>22123,31224=>22124,31228=>22125,31239=>22126,31265=>22127,31271=>22128,31275=>22129,31279=>22130,31284=>22131,31285=>22132,31304=>22133,31317=>22134,31333=>22135,31358=>22136,31371=>22137,31377=>22138,31390=>22139,31433=>22140,31451=>22141,31465=>22142,31468=>22143,31473=>22144,31483=>22145,31519=>22146,31523=>22147,31529=>22148,31536=>22149,31540=>22150,31551=>22151,31552=>22152,31594=>22153,31620=>22154,31625=>22155,31630=>22156,31638=>22157,31653=>22158,31666=>22159,31670=>22160,31674=>22161,31675=>22162,31677=>22163,31682=>22164,31688=>22165,31707=>22166,31732=>22167,31733=>22168,31737=>22169,31738=>22170,31746=>22171,31748=>22172,31750=>22173,31756=>22174,31769=>22175,31771=>22176,31781=>22177,31788=>22178,31796=>22179,31801=>22180,31802=>22181,31814=>22182,31829=>22183,31834=>22184,31843=>22185,31868=>22187,31878=>22188,31920=>22189,31931=>22190,31951=>22191,31956=>22192,31977=>22193,32015=>22194,32017=>22195,32022=>22196,32038=>22197,32042=>22198,32045=>22199,32081=>22200,32087=>22201,32101=>22202,32103=>22203,32120=>22204,32123=>22205,32129=>22206,32150=>22207,32195=>22208,32196=>22209,32197=>22210,32198=>22211,32205=>22212,32206=>22213,32256=>22214,32226=>22215,32234=>22216,32237=>22217,32250=>22218,32284=>22219,32301=>22220,32307=>22221,32319=>22222,32334=>22223,32336=>22224,32344=>22225,32351=>22226,32357=>22227,32405=>22228,32413=>22229,32414=>22230,32575=>22231,32604=>22232,32614=>22233,32653=>22235,32655=>22236,32678=>22237,32682=>22238,32692=>22239,32700=>22240,32704=>22241,32712=>22242,32744=>22243,32783=>22244,32787=>22245,32797=>22246,32799=>22247,32800=>22248,32814=>22249,32820=>22250,32830=>22251,32832=>22252,32836=>22253,32868=>22254,32877=>22255,32897=>22256,32953=>22257,32968=>22258,32973=>22259,32978=>22260,33006=>22261,33010=>22262,33014=>22263,33017=>22264,33035=>22265,33052=>22266,33056=>22267,33084=>22268,33093=>22269,33095=>22270,33106=>22271,33121=>22272,33143=>22273,33158=>22274,33166=>22275,33174=>22276,33186=>22277,33198=>22278,33221=>22279,33230=>22280,33259=>22281,33264=>22282,33265=>22283,33266=>22284,33269=>22285,33272=>22286,33295=>22288,33309=>22289,33320=>22290,33347=>22291,33358=>22292,33361=>22293,33366=>22294,33383=>22295,33403=>22296,33408=>22297,33409=>22298,33415=>22299,33428=>22300,33430=>22301,33432=>22302,33434=>22303,33435=>22304,33440=>22305,33498=>22306,33504=>22307,33508=>22308,33517=>22309,33546=>22310,33547=>22311,33566=>22312,33567=>22313,33569=>22314,33580=>22315,33582=>22316,33587=>22317,33591=>22318,33597=>22319,33602=>22320,33613=>22321,33614=>22322,33648=>22323,33664=>22324,33666=>22325,33668=>22326,33689=>22327,33692=>22328,33702=>22329,33708=>22330,33726=>22331,33619=>22332,33768=>22333,33817=>22334,33709=>22335,33839=>22336,33861=>22337,33863=>22338,33869=>22339,33878=>22340,33888=>22342,33892=>22343,33895=>22344,33898=>22345,33908=>22346,33917=>22347,33938=>22348,33941=>22349,33961=>22350,33962=>22351,33991=>22352,33992=>22353,33996=>22354,34034=>22355,34039=>22356,34050=>22357,34051=>22358,34055=>22359,34062=>22360,34064=>22361,34076=>22362,34082=>22363,34087=>22364,34090=>22365,34099=>22366,34102=>22367,34111=>22368,34128=>22369,34130=>22370,34140=>22371,34143=>22373,34144=>22374,34169=>22375,34185=>22376,34187=>22377,34208=>22378,34213=>22379,34215=>22380,34228=>22381,34230=>22382,34232=>22383,34237=>22384,34238=>22385,34239=>22386,34242=>22387,34266=>22388,34272=>22389,34280=>22390,34291=>22391,34300=>22392,34317=>22393,34318=>22394,34329=>22395,34331=>22396,34358=>22397,34362=>22398,34365=>22399,34392=>22400,34393=>22401,34397=>22402,34400=>22403,34401=>22404,34404=>22405,34409=>22406,34422=>22407,34454=>22408,34458=>22409,34465=>22410,34470=>22411,34477=>22412,34484=>22413,34485=>22414,34487=>22415,34489=>22416,34495=>22417,34501=>22418,34514=>22419,34522=>22420,34524=>22421,34528=>22422,34533=>22423,34535=>22424,34440=>22425,34564=>22426,34575=>22427,34607=>22428,34610=>22429,34620=>22430,34621=>22431,34629=>22432,34637=>22433,34657=>22434,34671=>22435,34691=>22436,34692=>22437,34693=>22438,34694=>22439,34704=>22440,34709=>22441,34737=>22443,34760=>22444,34762=>22445,34773=>22446,34777=>22447,34780=>22448,34786=>22449,34788=>22450,34801=>22451,34803=>22452,34808=>22453,34810=>22454,34815=>22455,34825=>22456,34841=>22457,34834=>22458,34842=>22459,34846=>22460,34864=>22461,34869=>22462,34881=>22463,34883=>22464,34888=>22465,34889=>22466,34897=>22468,34908=>22469,34912=>22470,34929=>22471,34937=>22472,34939=>22473,34944=>22474,34975=>22475,34984=>22476,35002=>22477,35019=>22478,35020=>22479,35038=>22480,35047=>22481,35063=>22482,35085=>22483,35093=>22484,35094=>22485,35104=>22486,35112=>22487,35121=>22488,35130=>22489,35142=>22490,35151=>22491,35154=>22492,35159=>22493,35163=>22494,35169=>22495,35171=>22496,35182=>22497,35187=>22498,35189=>22499,35194=>22500,35197=>22501,35213=>22502,35221=>22503,35227=>22504,35228=>22505,35232=>22506,35252=>22507,35254=>22508,35287=>22509,35305=>22510,35309=>22511,35321=>22512,35332=>22513,35333=>22514,35358=>22515,35360=>22516,35364=>22517,35366=>22518,35371=>22519,35372=>22520,35375=>22521,35389=>22522,35392=>22523,35395=>22524,35411=>22525,35414=>22526,35420=>22527,35429=>22528,35446=>22529,35447=>22530,35450=>22531,35451=>22532,35456=>22533,35459=>22534,35467=>22535,35471=>22536,35474=>22537,35479=>22538,35481=>22539,35487=>22540,35497=>22541,35503=>22542,35507=>22543,35515=>22544,35523=>22545,35526=>22546,35528=>22547,35530=>22548,35539=>22549,35540=>22550,35541=>22551,35568=>22552,35583=>22553,35595=>22554,35614=>22555,35632=>22556,35644=>22557,35650=>22558,35656=>22559,35661=>22560,35683=>22561,35705=>22562,35716=>22563,35725=>22564,35727=>22565,35896=>22566,35902=>22567,35921=>22568,35928=>22569,35931=>22570,35933=>22571,35929=>22572,35939=>22573,35940=>22574,35942=>22575,35957=>22576,35958=>22577,35966=>22578,35974=>22579,35975=>22580,35979=>22581,35984=>22582,35996=>22584,36025=>22585,36038=>22586,36043=>22587,36047=>22588,36061=>22589,36072=>22590,36079=>22591,36082=>22592,36095=>22593,36197=>22594,36223=>22595,36226=>22596,36232=>22597,36240=>22598,36254=>22599,36256=>22600,36268=>22601,36277=>22602,36279=>22603,36281=>22604,36283=>22605,36288=>22606,36293=>22607,36295=>22608,36298=>22609,36308=>22610,36325=>22611,36336=>22612,36284=>22613,36356=>22614,36357=>22615,36369=>22616,36403=>22617,36407=>22618,36408=>22619,36430=>22620,36443=>22621,36445=>22622,36446=>22623,36473=>22624,36482=>22625,36483=>22626,36507=>22627,36509=>22628,36514=>22629,36538=>22630,36545=>22631,36547=>22632,36548=>22633,36551=>22634,36572=>22635,36590=>22636,36593=>22637,36599=>22638,36589=>22639,36610=>22640,36623=>22641,36624=>22642,36630=>22643,36640=>22644,36641=>22645,36643=>22646,36648=>22647,36654=>22648,36660=>22649,36663=>22650,36673=>22651,36687=>22652,36690=>22653,36691=>22654,36701=>22655,36702=>22656,36709=>22657,36765=>22658,36792=>22659,36798=>22660,36800=>22661,36811=>22662,36816=>22663,36818=>22664,36835=>22665,36862=>22666,36888=>22667,36904=>22668,36905=>22669,36906=>22670,36915=>22671,36916=>22672,36927=>22673,36962=>22674,36966=>22675,36972=>22676,37006=>22677,37029=>22678,37068=>22679,37077=>22680,37080=>22681,37081=>22682,37093=>22683,37074=>22684,37128=>22685,37133=>22686,37136=>22687,37146=>22688,37152=>22689,37161=>22690,37166=>22691,37174=>22692,37180=>22693,37187=>22694,37199=>22695,37203=>22696,37229=>22697,37243=>22698,37249=>22699,37254=>22700,37267=>22701,37268=>22702,37272=>22703,37281=>22704,37286=>22705,37311=>22706,37331=>22707,37332=>22708,37337=>22709,37353=>22710,37354=>22711,37359=>22712,37369=>22713,37373=>22714,37380=>22715,37381=>22716,37388=>22717,37394=>22718,37395=>22719,37400=>22720,37404=>22721,37405=>22722,37412=>22723,37413=>22724,37414=>22725,37422=>22726,37423=>22727,37424=>22728,37429=>22729,37430=>22730,37438=>22731,37446=>22732,37453=>22733,37464=>22734,37468=>22735,37469=>22736,37481=>22737,37486=>22738,37487=>22739,37488=>22740,37493=>22741,37497=>22742,37499=>22743,37514=>22744,37522=>22745,37536=>22746,37540=>22747,37541=>22748,37544=>22749,37558=>22750,37560=>22751,37562=>22752,37565=>22753,37575=>22754,37581=>22755,37592=>22756,37596=>22757,37597=>22758,37601=>22759,37603=>22760,37608=>22761,37612=>22762,37614=>22763,37616=>22764,37632=>22765,37640=>22766,37660=>22767,37668=>22768,37674=>22769,37684=>22770,37687=>22771,37712=>22772,37717=>22773,37726=>22774,37735=>22775,37737=>22776,37743=>22777,37748=>22778,37750=>22779,37754=>22780,37757=>22781,37760=>22782,37761=>22783,37773=>22784,37778=>22785,37781=>22786,37784=>22787,37798=>22789,37800=>22790,37803=>22791,37812=>22792,37813=>22793,37814=>22794,37828=>22795,37829=>22796,37833=>22797,37835=>22798,37837=>22799,37843=>22800,37849=>22801,37879=>22802,37889=>22803,37896=>22804,37909=>22805,37919=>22806,37935=>22807,37949=>22808,37955=>22809,37977=>22810,37980=>22811,37983=>22812,37985=>22813,37992=>22814,37998=>22815,38020=>22816,38019=>22817,38270=>22818,38276=>22819,38301=>22820,38302=>22821,38330=>22822,38361=>22823,38365=>22824,38367=>22825,38430=>22826,38434=>22827,38437=>22828,38438=>22829,38455=>22830,38457=>22831,38458=>22832,38482=>22833,38486=>22834,38487=>22835,38510=>22836,38524=>22837,38526=>22838,38545=>22839,38559=>22840,38566=>22841,38602=>22842,38623=>22844,38650=>22845,38661=>22846,38682=>22847,38685=>22848,38730=>22850,38744=>22851,38775=>22852,38776=>22853,38779=>22854,38784=>22855,38793=>22856,38807=>22857,38840=>22858,38844=>22859,38847=>22860,38852=>22861,38853=>22862,38855=>22863,38858=>22864,38862=>22865,38864=>22866,38871=>22867,38877=>22868,38884=>22869,38903=>22870,38904=>22871,38906=>22872,38937=>22873,38940=>22874,38944=>22875,38959=>22876,38965=>22877,38980=>22878,38986=>22879,38993=>22880,39018=>22881,39086=>22882,39116=>22883,39142=>22884,39158=>22885,39175=>22886,39199=>22887,39202=>22888,39206=>22889,39211=>22890,39220=>22891,39225=>22892,39239=>22893,39257=>22894,39259=>22895,39323=>22896,39325=>22897,39327=>22898,39344=>22899,39346=>22900,39349=>22901,39379=>22902,39386=>22903,39388=>22904,39399=>22905,39402=>22906,39403=>22907,39404=>22908,39412=>22909,39413=>22910,39421=>22911,39422=>22912,39428=>22913,39435=>22914,39454=>22915,39458=>22916,39475=>22917,39477=>22918,39495=>22919,39499=>22921,39508=>22922,39517=>22923,39594=>22924,39596=>22925,39598=>22926,39602=>22927,39604=>22928,39611=>22929,39615=>22930,39624=>22931,39639=>22932,39643=>22933,39652=>22934,39655=>22935,39660=>22936,39666=>22937,39667=>22938,39669=>22939,39674=>22940,39677=>22941,39679=>22942,39680=>22943,39684=>22944,39685=>22945,39707=>22946,39718=>22947,39735=>22949,39737=>22950,39738=>22951,39756=>22952,39766=>22953,39767=>22954,39771=>22955,39777=>22956,39786=>22957,39789=>22958,39790=>22959,39800=>22960,39807=>22961,39813=>22962,39815=>22963,39817=>22964,39819=>22965,39821=>22966,39828=>22967,39834=>22968,39849=>22969,39863=>22970,39868=>22971,39888=>22972,39929=>22973,39951=>22974,39953=>22975,39966=>22976,39974=>22977,39976=>22978,39997=>22979,40003=>22980,40014=>22981,40030=>22982,40059=>22983,40183=>22984,40185=>22985,40220=>22986,40239=>22987,40243=>22988,40244=>22989,40250=>22990,40252=>22991,40261=>22992,40275=>22993,40276=>22994,40293=>22995,40323=>22996,40326=>22997,40334=>22998,40338=>22999,40339=>23000,40341=>23001,40343=>23002,40344=>23003,40362=>23004,40366=>23005,40394=>23007,40404=>23008,40405=>23009,40414=>23010,40430=>23011,40432=>23012,40446=>23013,40462=>23014,40464=>23015,40465=>23016,40466=>23017,40470=>23018,40583=>23019,40590=>23020,40591=>23021,40598=>23022,40600=>23023,40622=>23024,40627=>23025,40646=>23026,40648=>23027,40651=>23028,40661=>23029,40684=>23030,40685=>23031,40689=>23032,40693=>23033,40696=>23034,40721=>23035,40726=>23036,40730=>23037,40735=>23038,40753=>23039,40754=>23040,40764=>23041,40767=>23042,40771=>23043,40772=>23044,40775=>23045,40790=>23046,40798=>23047,40814=>23048,40819=>23049,40826=>23050,40829=>23051,40847=>23052,40849=>23053,40850=>23054,40854=>23055,40865=>23056,40867=>23057); +// --- EOF --- diff --git a/tcpdf/fonts/uni2cid_ak12.php b/tcpdf/fonts/uni2cid_ak12.php new file mode 100644 index 0000000..6706723 --- /dev/null +++ b/tcpdf/fonts/uni2cid_ak12.php @@ -0,0 +1,6 @@ +<?php +// unicode to cid conversion table is from +// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/ +// cid2code.txt in ak12.tar.Z +$cidinfo['uni2cid'] = array(32=>1,33=>2,34=>3,35=>4,36=>5,37=>6,38=>7,39=>8,40=>9,41=>10,42=>11,43=>12,44=>13,45=>14,46=>15,47=>16,48=>17,49=>18,50=>19,51=>20,52=>21,53=>22,54=>23,55=>24,56=>25,57=>26,58=>27,59=>28,60=>29,61=>30,62=>31,63=>32,64=>33,65=>34,66=>35,67=>36,68=>37,69=>38,70=>39,71=>40,72=>41,73=>42,74=>43,75=>44,76=>45,77=>46,78=>47,79=>48,80=>49,81=>50,82=>51,83=>52,84=>53,85=>54,86=>55,87=>56,88=>57,89=>58,90=>59,91=>60,92=>61,93=>62,94=>63,95=>64,96=>65,97=>66,98=>67,99=>68,100=>69,101=>70,102=>71,103=>72,104=>73,105=>74,106=>75,107=>76,108=>77,109=>78,110=>79,111=>80,112=>81,113=>82,114=>83,115=>84,116=>85,117=>86,118=>87,119=>88,120=>89,121=>90,122=>91,123=>92,124=>93,125=>94,126=>95,8361=>96,8208=>97,169=>98,12644=>101,12288=>101,12289=>102,12290=>103,183=>104,12539=>104,8229=>105,8943=>106,8230=>106,168=>107,12291=>108,8211=>109,8212=>110,8214=>111,65340=>112,65374=>113,8216=>114,8217=>115,8220=>116,8221=>117,12308=>118,12309=>119,12296=>120,12297=>121,12298=>122,12299=>123,12300=>124,12301=>125,12302=>126,12303=>127,12304=>128,12305=>129,177=>130,215=>131,247=>132,8800=>133,8804=>134,8805=>135,8734=>136,8756=>137,176=>138,8242=>139,8243=>140,8451=>141,8491=>142,65504=>143,65505=>144,65509=>145,9794=>146,9792=>147,8736=>148,8869=>149,8978=>150,8706=>151,8711=>152,8801=>153,8786=>154,167=>155,8251=>156,9734=>157,9733=>158,9675=>159,9679=>160,9678=>161,9671=>162,9670=>163,9633=>164,9632=>165,9651=>166,9650=>167,9661=>168,9660=>169,8594=>170,8592=>171,8593=>172,8595=>173,8596=>174,12307=>175,171=>176,187=>177,8730=>178,8765=>179,8733=>180,8757=>181,8747=>182,8748=>183,8712=>184,8715=>185,8838=>186,8839=>187,8834=>188,8835=>189,8746=>190,8745=>191,8743=>192,8744=>193,65506=>194,8658=>195,8660=>196,8704=>197,8707=>198,180=>199,732=>200,711=>201,728=>202,733=>203,730=>204,729=>205,184=>206,731=>207,161=>208,191=>209,8758=>210,8750=>211,8721=>212,8719=>213,164=>214,8457=>215,8240=>216,9665=>217,9664=>218,9655=>219,9654=>220,9828=>221,9824=>222,9825=>223,9829=>224,9831=>225,9827=>226,9673=>227,9672=>228,9635=>229,9680=>230,9681=>231,9618=>232,9636=>233,9637=>234,9640=>235,9639=>236,9638=>237,9641=>238,9832=>239,9743=>240,9742=>241,9756=>242,9758=>243,182=>244,8224=>245,8225=>246,8597=>247,8599=>248,8601=>249,8598=>250,8600=>251,9837=>252,9833=>253,9834=>254,9836=>255,12927=>256,12828=>257,8470=>258,13255=>259,8482=>260,13250=>261,13272=>262,8481=>263,65281=>264,65282=>265,65283=>266,65284=>267,65285=>268,65286=>269,65287=>270,65288=>271,65289=>272,65290=>273,65291=>274,65292=>275,65293=>276,65294=>277,65295=>278,65296=>279,65297=>280,65298=>281,65299=>282,65300=>283,65301=>284,65302=>285,65303=>286,65304=>287,65305=>288,65306=>289,65307=>290,65308=>291,65309=>292,65310=>293,65311=>294,65312=>295,65313=>296,65314=>297,65315=>298,65316=>299,65317=>300,65318=>301,65319=>302,65320=>303,65321=>304,65322=>305,65323=>306,65324=>307,65325=>308,65326=>309,65327=>310,65328=>311,65329=>312,65330=>313,65331=>314,65332=>315,65333=>316,65334=>317,65335=>318,65336=>319,65337=>320,65338=>321,65339=>322,65510=>323,65341=>324,65342=>325,65343=>326,65344=>327,65345=>328,65346=>329,65347=>330,65348=>331,65349=>332,65350=>333,65351=>334,65352=>335,65353=>336,65354=>337,65355=>338,65356=>339,65357=>340,65358=>341,65359=>342,65360=>343,65361=>344,65362=>345,65363=>346,65364=>347,65365=>348,65366=>349,65367=>350,65368=>351,65369=>352,65370=>353,65371=>354,65372=>355,65373=>356,65507=>357,12593=>358,12594=>359,12595=>360,12596=>361,12597=>362,12598=>363,12599=>364,12600=>365,12601=>366,12602=>367,12603=>368,12604=>369,12605=>370,12606=>371,12607=>372,12608=>373,12609=>374,12610=>375,12611=>376,12612=>377,12613=>378,12614=>379,12615=>380,12616=>381,12617=>382,12618=>383,12619=>384,12620=>385,12621=>386,12622=>387,12623=>388,12624=>389,12625=>390,12626=>391,12627=>392,12628=>393,12629=>394,12630=>395,12631=>396,12632=>397,12633=>398,12634=>399,12635=>400,12636=>401,12637=>402,12638=>403,12639=>404,12640=>405,12641=>406,12642=>407,12643=>408,12645=>409,12646=>410,12647=>411,12648=>412,12649=>413,12650=>414,12651=>415,12652=>416,12653=>417,12654=>418,12655=>419,12656=>420,12657=>421,12658=>422,12659=>423,12660=>424,12661=>425,12662=>426,12663=>427,12664=>428,12665=>429,12666=>430,12667=>431,12668=>432,12669=>433,12670=>434,12671=>435,12672=>436,12673=>437,12674=>438,12675=>439,12676=>440,12677=>441,12678=>442,12679=>443,12680=>444,12681=>445,12682=>446,12683=>447,12684=>448,12685=>449,12686=>450,8560=>451,8561=>452,8562=>453,8563=>454,8564=>455,8565=>456,8566=>457,8567=>458,8568=>459,8569=>460,8544=>461,8545=>462,8546=>463,8547=>464,8548=>465,8549=>466,8550=>467,8551=>468,8552=>469,8553=>470,913=>471,914=>472,915=>473,916=>474,917=>475,918=>476,919=>477,920=>478,921=>479,922=>480,923=>481,924=>482,925=>483,926=>484,927=>485,928=>486,929=>487,931=>488,932=>489,933=>490,934=>491,935=>492,936=>493,937=>494,945=>495,946=>496,947=>497,948=>498,949=>499,950=>500,951=>501,952=>502,953=>503,954=>504,955=>505,956=>506,957=>507,958=>508,959=>509,960=>510,961=>511,963=>512,964=>513,965=>514,966=>515,967=>516,968=>517,969=>518,9472=>519,9474=>520,9484=>521,9488=>522,9496=>523,9492=>524,9500=>525,9516=>526,9508=>527,9524=>528,9532=>529,9473=>530,9475=>531,9487=>532,9491=>533,9499=>534,9495=>535,9507=>536,9523=>537,9515=>538,9531=>539,9547=>540,9504=>541,9519=>542,9512=>543,9527=>544,9535=>545,9501=>546,9520=>547,9509=>548,9528=>549,9538=>550,9490=>551,9489=>552,9498=>553,9497=>554,9494=>555,9493=>556,9486=>557,9485=>558,9502=>559,9503=>560,9505=>561,9506=>562,9510=>563,9511=>564,9513=>565,9514=>566,9517=>567,9518=>568,9521=>569,9522=>570,9525=>571,9526=>572,9529=>573,9530=>574,9533=>575,9534=>576,9536=>577,9537=>578,9539=>579,9540=>580,9541=>581,9542=>582,9543=>583,9544=>584,9545=>585,9546=>586,13205=>587,13206=>588,13207=>589,8467=>590,13208=>591,13252=>592,13219=>593,13220=>594,13221=>595,13222=>596,13209=>597,13210=>598,13211=>599,13212=>600,13213=>601,13214=>602,13215=>603,13216=>604,13217=>605,13218=>606,13258=>607,13197=>608,13198=>609,13199=>610,13263=>611,13192=>612,13193=>613,13256=>614,13223=>615,13224=>616,13232=>617,13233=>618,13234=>619,13235=>620,13236=>621,13237=>622,13238=>623,13239=>624,13240=>625,13241=>626,13184=>627,13185=>628,13186=>629,13187=>630,13188=>631,13242=>632,13243=>633,13244=>634,13245=>635,13246=>636,13247=>637,13200=>638,13201=>639,13202=>640,13203=>641,13204=>642,8486=>643,13248=>644,13249=>645,13194=>646,13195=>647,13196=>648,13270=>649,13253=>650,13229=>651,13230=>652,13231=>653,13275=>654,13225=>655,13226=>656,13227=>657,13228=>658,13277=>659,13264=>660,13267=>661,13251=>662,13257=>663,13276=>664,13254=>665,198=>666,208=>667,170=>668,294=>669,306=>670,319=>671,321=>672,216=>673,338=>674,186=>675,222=>676,358=>677,330=>678,12896=>679,12897=>680,12898=>681,12899=>682,12900=>683,12901=>684,12902=>685,12903=>686,12904=>687,12905=>688,12906=>689,12907=>690,12908=>691,12909=>692,12910=>693,12911=>694,12912=>695,12913=>696,12914=>697,12915=>698,12916=>699,12917=>700,12918=>701,12919=>702,12920=>703,12921=>704,12922=>705,12923=>706,9424=>707,9425=>708,9426=>709,9427=>710,9428=>711,9429=>712,9430=>713,9431=>714,9432=>715,9433=>716,9434=>717,9435=>718,9436=>719,9437=>720,9438=>721,9439=>722,9440=>723,9441=>724,9442=>725,9443=>726,9444=>727,9445=>728,9446=>729,9447=>730,9448=>731,9449=>732,9312=>733,9313=>734,9314=>735,9315=>736,9316=>737,9317=>738,9318=>739,9319=>740,9320=>741,9321=>742,9322=>743,9323=>744,9324=>745,9325=>746,9326=>747,189=>748,8531=>749,8532=>750,188=>751,190=>752,8539=>753,8540=>754,8541=>755,8542=>756,230=>757,273=>758,240=>759,295=>760,305=>761,307=>762,312=>763,320=>764,322=>765,248=>766,339=>767,223=>768,254=>769,359=>770,331=>771,329=>772,12800=>773,12801=>774,12802=>775,12803=>776,12804=>777,12805=>778,12806=>779,12807=>780,12808=>781,12809=>782,12810=>783,12811=>784,12812=>785,12813=>786,12814=>787,12815=>788,12816=>789,12817=>790,12818=>791,12819=>792,12820=>793,12821=>794,12822=>795,12823=>796,12824=>797,12825=>798,12826=>799,12827=>800,9372=>801,9373=>802,9374=>803,9375=>804,9376=>805,9377=>806,9378=>807,9379=>808,9380=>809,9381=>810,9382=>811,9383=>812,9384=>813,9385=>814,9386=>815,9387=>816,9388=>817,9389=>818,9390=>819,9391=>820,9392=>821,9393=>822,9394=>823,9395=>824,9396=>825,9397=>826,9332=>827,9333=>828,9334=>829,9335=>830,9336=>831,9337=>832,9338=>833,9339=>834,9340=>835,9341=>836,9342=>837,9343=>838,9344=>839,9345=>840,9346=>841,185=>842,178=>843,179=>844,8308=>845,8319=>846,8321=>847,8322=>848,8323=>849,8324=>850,12353=>851,12354=>852,12355=>853,12356=>854,12357=>855,12358=>856,12359=>857,12360=>858,12361=>859,12362=>860,12363=>861,12364=>862,12365=>863,12366=>864,12367=>865,12368=>866,12369=>867,12370=>868,12371=>869,12372=>870,12373=>871,12374=>872,12375=>873,12376=>874,12377=>875,12378=>876,12379=>877,12380=>878,12381=>879,12382=>880,12383=>881,12384=>882,12385=>883,12386=>884,12387=>885,12388=>886,12389=>887,12390=>888,12391=>889,12392=>890,12393=>891,12394=>892,12395=>893,12396=>894,12397=>895,12398=>896,12399=>897,12400=>898,12401=>899,12402=>900,12403=>901,12404=>902,12405=>903,12406=>904,12407=>905,12408=>906,12409=>907,12410=>908,12411=>909,12412=>910,12413=>911,12414=>912,12415=>913,12416=>914,12417=>915,12418=>916,12419=>917,12420=>918,12421=>919,12422=>920,12423=>921,12424=>922,12425=>923,12426=>924,12427=>925,12428=>926,12429=>927,12430=>928,12431=>929,12432=>930,12433=>931,12434=>932,12435=>933,12449=>934,12450=>935,12451=>936,12452=>937,12453=>938,12454=>939,12455=>940,12456=>941,12457=>942,12458=>943,12459=>944,12460=>945,12461=>946,12462=>947,12463=>948,12464=>949,12465=>950,12466=>951,12467=>952,12468=>953,12469=>954,12470=>955,12471=>956,12472=>957,12473=>958,12474=>959,12475=>960,12476=>961,12477=>962,12478=>963,12479=>964,12480=>965,12481=>966,12482=>967,12483=>968,12484=>969,12485=>970,12486=>971,12487=>972,12488=>973,12489=>974,12490=>975,12491=>976,12492=>977,12493=>978,12494=>979,12495=>980,12496=>981,12497=>982,12498=>983,12499=>984,12500=>985,12501=>986,12502=>987,12503=>988,12504=>989,12505=>990,12506=>991,12507=>992,12508=>993,12509=>994,12510=>995,12511=>996,12512=>997,12513=>998,12514=>999,12515=>1000,12516=>1001,12517=>1002,12518=>1003,12519=>1004,12520=>1005,12521=>1006,12522=>1007,12523=>1008,12524=>1009,12525=>1010,12526=>1011,12527=>1012,12528=>1013,12529=>1014,12530=>1015,12531=>1016,12532=>1017,12533=>1018,12534=>1019,1040=>1020,1041=>1021,1042=>1022,1043=>1023,1044=>1024,1045=>1025,1025=>1026,1046=>1027,1047=>1028,1048=>1029,1049=>1030,1050=>1031,1051=>1032,1052=>1033,1053=>1034,1054=>1035,1055=>1036,1056=>1037,1057=>1038,1058=>1039,1059=>1040,1060=>1041,1061=>1042,1062=>1043,1063=>1044,1064=>1045,1065=>1046,1066=>1047,1067=>1048,1068=>1049,1069=>1050,1070=>1051,1071=>1052,1072=>1053,1073=>1054,1074=>1055,1075=>1056,1076=>1057,1077=>1058,1105=>1059,1078=>1060,1079=>1061,1080=>1062,1081=>1063,1082=>1064,1083=>1065,1084=>1066,1085=>1067,1086=>1068,1087=>1069,1088=>1070,1089=>1071,1090=>1072,1091=>1073,1092=>1074,1093=>1075,1094=>1076,1095=>1077,1096=>1078,1097=>1079,1098=>1080,1099=>1081,1100=>1082,1101=>1083,1102=>1084,1103=>1085,44032=>1086,44033=>1087,44036=>1088,44039=>1089,44040=>1090,44041=>1091,44042=>1092,44048=>1093,44049=>1094,44050=>1095,44051=>1096,44052=>1097,44053=>1098,44054=>1099,44055=>1100,44057=>1101,44058=>1102,44059=>1103,44060=>1104,44061=>1105,44064=>1106,44068=>1107,44076=>1108,44077=>1109,44079=>1110,44080=>1111,44081=>1112,44088=>1113,44089=>1114,44092=>1115,44096=>1116,44107=>1117,44109=>1118,44116=>1119,44120=>1120,44124=>1121,44144=>1122,44145=>1123,44148=>1124,44151=>1125,44152=>1126,44154=>1127,44160=>1128,44161=>1129,44163=>1130,44164=>1131,44165=>1132,44166=>1133,44169=>1134,44170=>1135,44171=>1136,44172=>1137,44176=>1138,44180=>1139,44188=>1140,44189=>1141,44191=>1142,44192=>1143,44193=>1144,44200=>1145,44201=>1146,44202=>1147,44204=>1148,44207=>1149,44208=>1150,44216=>1151,44217=>1152,44219=>1153,44220=>1154,44221=>1155,44225=>1156,44228=>1157,44232=>1158,44236=>1159,44245=>1160,44247=>1161,44256=>1162,44257=>1163,44260=>1164,44263=>1165,44264=>1166,44266=>1167,44268=>1168,44271=>1169,44272=>1170,44273=>1171,44275=>1172,44277=>1173,44278=>1174,44284=>1175,44285=>1176,44288=>1177,44292=>1178,44294=>1179,44300=>1180,44301=>1181,44303=>1182,44305=>1183,44312=>1184,44316=>1185,44320=>1186,44329=>1187,44332=>1188,44333=>1189,44340=>1190,44341=>1191,44344=>1192,44348=>1193,44356=>1194,44357=>1195,44359=>1196,44361=>1197,44368=>1198,44372=>1199,44376=>1200,44385=>1201,44387=>1202,44396=>1203,44397=>1204,44400=>1205,44403=>1206,44404=>1207,44405=>1208,44406=>1209,44411=>1210,44412=>1211,44413=>1212,44415=>1213,44417=>1214,44418=>1215,44424=>1216,44425=>1217,44428=>1218,44432=>1219,44444=>1220,44445=>1221,44452=>1222,44471=>1223,44480=>1224,44481=>1225,44484=>1226,44488=>1227,44496=>1228,44497=>1229,44499=>1230,44508=>1231,44512=>1232,44516=>1233,44536=>1234,44537=>1235,44540=>1236,44543=>1237,44544=>1238,44545=>1239,44552=>1240,44553=>1241,44555=>1242,44557=>1243,44564=>1244,44592=>1245,44593=>1246,44596=>1247,44599=>1248,44600=>1249,44602=>1250,44608=>1251,44609=>1252,44611=>1253,44613=>1254,44614=>1255,44618=>1256,44620=>1257,44621=>1258,44622=>1259,44624=>1260,44628=>1261,44630=>1262,44636=>1263,44637=>1264,44639=>1265,44640=>1266,44641=>1267,44645=>1268,44648=>1269,44649=>1270,44652=>1271,44656=>1272,44664=>1273,44665=>1274,44667=>1275,44668=>1276,44669=>1277,44676=>1278,44677=>1279,44684=>1280,44732=>1281,44733=>1282,44734=>1283,44736=>1284,44740=>1285,44748=>1286,44749=>1287,44751=>1288,44752=>1289,44753=>1290,44760=>1291,44761=>1292,44764=>1293,44776=>1294,44779=>1295,44781=>1296,44788=>1297,44792=>1298,44796=>1299,44807=>1300,44808=>1301,44813=>1302,44816=>1303,44844=>1304,44845=>1305,44848=>1306,44850=>1307,44852=>1308,44860=>1309,44861=>1310,44863=>1311,44865=>1312,44866=>1313,44867=>1314,44872=>1315,44873=>1316,44880=>1317,44892=>1318,44893=>1319,44900=>1320,44901=>1321,44921=>1322,44928=>1323,44932=>1324,44936=>1325,44944=>1326,44945=>1327,44949=>1328,44956=>1329,44984=>1330,44985=>1331,44988=>1332,44992=>1333,44999=>1334,45000=>1335,45001=>1336,45003=>1337,45005=>1338,45006=>1339,45012=>1340,45020=>1341,45032=>1342,45033=>1343,45040=>1344,45041=>1345,45044=>1346,45048=>1347,45056=>1348,45057=>1349,45060=>1350,45068=>1351,45072=>1352,45076=>1353,45084=>1354,45085=>1355,45096=>1356,45124=>1357,45125=>1358,45128=>1359,45130=>1360,45132=>1361,45134=>1362,45139=>1363,45140=>1364,45141=>1365,45143=>1366,45145=>1367,45149=>1368,45180=>1369,45181=>1370,45184=>1371,45188=>1372,45196=>1373,45197=>1374,45199=>1375,45201=>1376,45208=>1377,45209=>1378,45210=>1379,45212=>1380,45215=>1381,45216=>1382,45217=>1383,45218=>1384,45224=>1385,45225=>1386,45227=>1387,45228=>1388,45229=>1389,45230=>1390,45231=>1391,45233=>1392,45235=>1393,45236=>1394,45237=>1395,45240=>1396,45244=>1397,45252=>1398,45253=>1399,45255=>1400,45256=>1401,45257=>1402,45264=>1403,45265=>1404,45268=>1405,45272=>1406,45280=>1407,45285=>1408,45320=>1409,45321=>1410,45323=>1411,45324=>1412,45328=>1413,45330=>1414,45331=>1415,45336=>1416,45337=>1417,45339=>1418,45340=>1419,45341=>1420,45347=>1421,45348=>1422,45349=>1423,45352=>1424,45356=>1425,45364=>1426,45365=>1427,45367=>1428,45368=>1429,45369=>1430,45376=>1431,45377=>1432,45380=>1433,45384=>1434,45392=>1435,45393=>1436,45396=>1437,45397=>1438,45400=>1439,45404=>1440,45408=>1441,45432=>1442,45433=>1443,45436=>1444,45440=>1445,45442=>1446,45448=>1447,45449=>1448,45451=>1449,45453=>1450,45458=>1451,45459=>1452,45460=>1453,45464=>1454,45468=>1455,45480=>1456,45516=>1457,45520=>1458,45524=>1459,45532=>1460,45533=>1461,45535=>1462,45544=>1463,45545=>1464,45548=>1465,45552=>1466,45561=>1467,45563=>1468,45565=>1469,45572=>1470,45573=>1471,45576=>1472,45579=>1473,45580=>1474,45588=>1475,45589=>1476,45591=>1477,45593=>1478,45600=>1479,45620=>1480,45628=>1481,45656=>1482,45660=>1483,45664=>1484,45672=>1485,45673=>1486,45684=>1487,45685=>1488,45692=>1489,45700=>1490,45701=>1491,45705=>1492,45712=>1493,45713=>1494,45716=>1495,45720=>1496,45721=>1497,45722=>1498,45728=>1499,45729=>1500,45731=>1501,45733=>1502,45734=>1503,45738=>1504,45740=>1505,45744=>1506,45748=>1507,45768=>1508,45769=>1509,45772=>1510,45776=>1511,45778=>1512,45784=>1513,45785=>1514,45787=>1515,45789=>1516,45794=>1517,45796=>1518,45797=>1519,45798=>1520,45800=>1521,45803=>1522,45804=>1523,45805=>1524,45806=>1525,45807=>1526,45811=>1527,45812=>1528,45813=>1529,45815=>1530,45816=>1531,45817=>1532,45818=>1533,45819=>1534,45823=>1535,45824=>1536,45825=>1537,45828=>1538,45832=>1539,45840=>1540,45841=>1541,45843=>1542,45844=>1543,45845=>1544,45852=>1545,45908=>1546,45909=>1547,45910=>1548,45912=>1549,45915=>1550,45916=>1551,45918=>1552,45919=>1553,45924=>1554,45925=>1555,45927=>1556,45929=>1557,45931=>1558,45934=>1559,45936=>1560,45937=>1561,45940=>1562,45944=>1563,45952=>1564,45953=>1565,45955=>1566,45956=>1567,45957=>1568,45964=>1569,45968=>1570,45972=>1571,45984=>1572,45985=>1573,45992=>1574,45996=>1575,46020=>1576,46021=>1577,46024=>1578,46027=>1579,46028=>1580,46030=>1581,46032=>1582,46036=>1583,46037=>1584,46039=>1585,46041=>1586,46043=>1587,46045=>1588,46048=>1589,46052=>1590,46056=>1591,46076=>1592,46096=>1593,46104=>1594,46108=>1595,46112=>1596,46120=>1597,46121=>1598,46123=>1599,46132=>1600,46160=>1601,46161=>1602,46164=>1603,46168=>1604,46176=>1605,46177=>1606,46179=>1607,46181=>1608,46188=>1609,46208=>1610,46216=>1611,46237=>1612,46244=>1613,46248=>1614,46252=>1615,46261=>1616,46263=>1617,46265=>1618,46272=>1619,46276=>1620,46280=>1621,46288=>1622,46293=>1623,46300=>1624,46301=>1625,46304=>1626,46307=>1627,46308=>1628,46310=>1629,46316=>1630,46317=>1631,46319=>1632,46321=>1633,46328=>1634,46356=>1635,46357=>1636,46360=>1637,46363=>1638,46364=>1639,46372=>1640,46373=>1641,46375=>1642,46376=>1643,46377=>1644,46378=>1645,46384=>1646,46385=>1647,46388=>1648,46392=>1649,46400=>1650,46401=>1651,46403=>1652,46404=>1653,46405=>1654,46411=>1655,46412=>1656,46413=>1657,46416=>1658,46420=>1659,46428=>1660,46429=>1661,46431=>1662,46432=>1663,46433=>1664,46496=>1665,46497=>1666,46500=>1667,46504=>1668,46506=>1669,46507=>1670,46512=>1671,46513=>1672,46515=>1673,46516=>1674,46517=>1675,46523=>1676,46524=>1677,46525=>1678,46528=>1679,46532=>1680,46540=>1681,46541=>1682,46543=>1683,46544=>1684,46545=>1685,46552=>1686,46572=>1687,46608=>1688,46609=>1689,46612=>1690,46616=>1691,46629=>1692,46636=>1693,46644=>1694,46664=>1695,46692=>1696,46696=>1697,46748=>1698,46749=>1699,46752=>1700,46756=>1701,46763=>1702,46764=>1703,46769=>1704,46804=>1705,46832=>1706,46836=>1707,46840=>1708,46848=>1709,46849=>1710,46853=>1711,46888=>1712,46889=>1713,46892=>1714,46895=>1715,46896=>1716,46904=>1717,46905=>1718,46907=>1719,46916=>1720,46920=>1721,46924=>1722,46932=>1723,46933=>1724,46944=>1725,46948=>1726,46952=>1727,46960=>1728,46961=>1729,46963=>1730,46965=>1731,46972=>1732,46973=>1733,46976=>1734,46980=>1735,46988=>1736,46989=>1737,46991=>1738,46992=>1739,46993=>1740,46994=>1741,46998=>1742,46999=>1743,47000=>1744,47001=>1745,47004=>1746,47008=>1747,47016=>1748,47017=>1749,47019=>1750,47020=>1751,47021=>1752,47028=>1753,47029=>1754,47032=>1755,47047=>1756,47049=>1757,47084=>1758,47085=>1759,47088=>1760,47092=>1761,47100=>1762,47101=>1763,47103=>1764,47104=>1765,47105=>1766,47111=>1767,47112=>1768,47113=>1769,47116=>1770,47120=>1771,47128=>1772,47129=>1773,47131=>1774,47133=>1775,47140=>1776,47141=>1777,47144=>1778,47148=>1779,47156=>1780,47157=>1781,47159=>1782,47160=>1783,47161=>1784,47168=>1785,47172=>1786,47185=>1787,47187=>1788,47196=>1789,47197=>1790,47200=>1791,47204=>1792,47212=>1793,47213=>1794,47215=>1795,47217=>1796,47224=>1797,47228=>1798,47245=>1799,47272=>1800,47280=>1801,47284=>1802,47288=>1803,47296=>1804,47297=>1805,47299=>1806,47301=>1807,47308=>1808,47312=>1809,47316=>1810,47325=>1811,47327=>1812,47329=>1813,47336=>1814,47337=>1815,47340=>1816,47344=>1817,47352=>1818,47353=>1819,47355=>1820,47357=>1821,47364=>1822,47384=>1823,47392=>1824,47420=>1825,47421=>1826,47424=>1827,47428=>1828,47436=>1829,47439=>1830,47441=>1831,47448=>1832,47449=>1833,47452=>1834,47456=>1835,47464=>1836,47465=>1837,47467=>1838,47469=>1839,47476=>1840,47477=>1841,47480=>1842,47484=>1843,47492=>1844,47493=>1845,47495=>1846,47497=>1847,47498=>1848,47501=>1849,47502=>1850,47532=>1851,47533=>1852,47536=>1853,47540=>1854,47548=>1855,47549=>1856,47551=>1857,47553=>1858,47560=>1859,47561=>1860,47564=>1861,47566=>1862,47567=>1863,47568=>1864,47569=>1865,47570=>1866,47576=>1867,47577=>1868,47579=>1869,47581=>1870,47582=>1871,47585=>1872,47587=>1873,47588=>1874,47589=>1875,47592=>1876,47596=>1877,47604=>1878,47605=>1879,47607=>1880,47608=>1881,47609=>1882,47610=>1883,47616=>1884,47617=>1885,47624=>1886,47637=>1887,47672=>1888,47673=>1889,47676=>1890,47680=>1891,47682=>1892,47688=>1893,47689=>1894,47691=>1895,47693=>1896,47694=>1897,47699=>1898,47700=>1899,47701=>1900,47704=>1901,47708=>1902,47716=>1903,47717=>1904,47719=>1905,47720=>1906,47721=>1907,47728=>1908,47729=>1909,47732=>1910,47736=>1911,47747=>1912,47748=>1913,47749=>1914,47751=>1915,47756=>1916,47784=>1917,47785=>1918,47787=>1919,47788=>1920,47792=>1921,47794=>1922,47800=>1923,47801=>1924,47803=>1925,47805=>1926,47812=>1927,47816=>1928,47832=>1929,47833=>1930,47868=>1931,47872=>1932,47876=>1933,47885=>1934,47887=>1935,47889=>1936,47896=>1937,47900=>1938,47904=>1939,47913=>1940,47915=>1941,47924=>1942,47925=>1943,47926=>1944,47928=>1945,47931=>1946,47932=>1947,47933=>1948,47934=>1949,47940=>1950,47941=>1951,47943=>1952,47945=>1953,47949=>1954,47951=>1955,47952=>1956,47956=>1957,47960=>1958,47969=>1959,47971=>1960,47980=>1961,48008=>1962,48012=>1963,48016=>1964,48036=>1965,48040=>1966,48044=>1967,48052=>1968,48055=>1969,48064=>1970,48068=>1971,48072=>1972,48080=>1973,48083=>1974,48120=>1975,48121=>1976,48124=>1977,48127=>1978,48128=>1979,48130=>1980,48136=>1981,48137=>1982,48139=>1983,48140=>1984,48141=>1985,48143=>1986,48145=>1987,48148=>1988,48149=>1989,48150=>1990,48151=>1991,48152=>1992,48155=>1993,48156=>1994,48157=>1995,48158=>1996,48159=>1997,48164=>1998,48165=>1999,48167=>2000,48169=>2001,48173=>2002,48176=>2003,48177=>2004,48180=>2005,48184=>2006,48192=>2007,48193=>2008,48195=>2009,48196=>2010,48197=>2011,48201=>2012,48204=>2013,48205=>2014,48208=>2015,48221=>2016,48260=>2017,48261=>2018,48264=>2019,48267=>2020,48268=>2021,48270=>2022,48276=>2023,48277=>2024,48279=>2025,48281=>2026,48282=>2027,48288=>2028,48289=>2029,48292=>2030,48295=>2031,48296=>2032,48304=>2033,48305=>2034,48307=>2035,48308=>2036,48309=>2037,48316=>2038,48317=>2039,48320=>2040,48324=>2041,48333=>2042,48335=>2043,48336=>2044,48337=>2045,48341=>2046,48344=>2047,48348=>2048,48372=>2049,48373=>2050,48374=>2051,48376=>2052,48380=>2053,48388=>2054,48389=>2055,48391=>2056,48393=>2057,48400=>2058,48404=>2059,48420=>2060,48428=>2061,48448=>2062,48456=>2063,48457=>2064,48460=>2065,48464=>2066,48472=>2067,48473=>2068,48484=>2069,48488=>2070,48512=>2071,48513=>2072,48516=>2073,48519=>2074,48520=>2075,48521=>2076,48522=>2077,48528=>2078,48529=>2079,48531=>2080,48533=>2081,48537=>2082,48538=>2083,48540=>2084,48548=>2085,48560=>2086,48568=>2087,48596=>2088,48597=>2089,48600=>2090,48604=>2091,48617=>2092,48624=>2093,48628=>2094,48632=>2095,48640=>2096,48643=>2097,48645=>2098,48652=>2099,48653=>2100,48656=>2101,48660=>2102,48668=>2103,48669=>2104,48671=>2105,48708=>2106,48709=>2107,48712=>2108,48716=>2109,48718=>2110,48724=>2111,48725=>2112,48727=>2113,48729=>2114,48730=>2115,48731=>2116,48736=>2117,48737=>2118,48740=>2119,48744=>2120,48746=>2121,48752=>2122,48753=>2123,48755=>2124,48756=>2125,48757=>2126,48763=>2127,48764=>2128,48765=>2129,48768=>2130,48772=>2131,48780=>2132,48781=>2133,48783=>2134,48784=>2135,48785=>2136,48792=>2137,48793=>2138,48808=>2139,48848=>2140,48849=>2141,48852=>2142,48855=>2143,48856=>2144,48864=>2145,48867=>2146,48868=>2147,48869=>2148,48876=>2149,48897=>2150,48904=>2151,48905=>2152,48920=>2153,48921=>2154,48923=>2155,48924=>2156,48925=>2157,48960=>2158,48961=>2159,48964=>2160,48968=>2161,48976=>2162,48977=>2163,48981=>2164,49044=>2165,49072=>2166,49093=>2167,49100=>2168,49101=>2169,49104=>2170,49108=>2171,49116=>2172,49119=>2173,49121=>2174,49212=>2175,49233=>2176,49240=>2177,49244=>2178,49248=>2179,49256=>2180,49257=>2181,49296=>2182,49297=>2183,49300=>2184,49304=>2185,49312=>2186,49313=>2187,49315=>2188,49317=>2189,49324=>2190,49325=>2191,49327=>2192,49328=>2193,49331=>2194,49332=>2195,49333=>2196,49334=>2197,49340=>2198,49341=>2199,49343=>2200,49344=>2201,49345=>2202,49349=>2203,49352=>2204,49353=>2205,49356=>2206,49360=>2207,49368=>2208,49369=>2209,49371=>2210,49372=>2211,49373=>2212,49380=>2213,49381=>2214,49384=>2215,49388=>2216,49396=>2217,49397=>2218,49399=>2219,49401=>2220,49408=>2221,49412=>2222,49416=>2223,49424=>2224,49429=>2225,49436=>2226,49437=>2227,49438=>2228,49439=>2229,49440=>2230,49443=>2231,49444=>2232,49446=>2233,49447=>2234,49452=>2235,49453=>2236,49455=>2237,49456=>2238,49457=>2239,49462=>2240,49464=>2241,49465=>2242,49468=>2243,49472=>2244,49480=>2245,49481=>2246,49483=>2247,49484=>2248,49485=>2249,49492=>2250,49493=>2251,49496=>2252,49500=>2253,49508=>2254,49509=>2255,49511=>2256,49512=>2257,49513=>2258,49520=>2259,49524=>2260,49528=>2261,49541=>2262,49548=>2263,49549=>2264,49550=>2265,49552=>2266,49556=>2267,49558=>2268,49564=>2269,49565=>2270,49567=>2271,49569=>2272,49573=>2273,49576=>2274,49577=>2275,49580=>2276,49584=>2277,49597=>2278,49604=>2279,49608=>2280,49612=>2281,49620=>2282,49623=>2283,49624=>2284,49632=>2285,49636=>2286,49640=>2287,49648=>2288,49649=>2289,49651=>2290,49660=>2291,49661=>2292,49664=>2293,49668=>2294,49676=>2295,49677=>2296,49679=>2297,49681=>2298,49688=>2299,49689=>2300,49692=>2301,49695=>2302,49696=>2303,49704=>2304,49705=>2305,49707=>2306,49709=>2307,49711=>2308,49713=>2309,49714=>2310,49716=>2311,49736=>2312,49744=>2313,49745=>2314,49748=>2315,49752=>2316,49760=>2317,49765=>2318,49772=>2319,49773=>2320,49776=>2321,49780=>2322,49788=>2323,49789=>2324,49791=>2325,49793=>2326,49800=>2327,49801=>2328,49808=>2329,49816=>2330,49819=>2331,49821=>2332,49828=>2333,49829=>2334,49832=>2335,49836=>2336,49837=>2337,49844=>2338,49845=>2339,49847=>2340,49849=>2341,49884=>2342,49885=>2343,49888=>2344,49891=>2345,49892=>2346,49899=>2347,49900=>2348,49901=>2349,49903=>2350,49905=>2351,49910=>2352,49912=>2353,49913=>2354,49915=>2355,49916=>2356,49920=>2357,49928=>2358,49929=>2359,49932=>2360,49933=>2361,49939=>2362,49940=>2363,49941=>2364,49944=>2365,49948=>2366,49956=>2367,49957=>2368,49960=>2369,49961=>2370,49989=>2371,50024=>2372,50025=>2373,50028=>2374,50032=>2375,50034=>2376,50040=>2377,50041=>2378,50044=>2379,50045=>2380,50052=>2381,50056=>2382,50060=>2383,50112=>2384,50136=>2385,50137=>2386,50140=>2387,50143=>2388,50144=>2389,50146=>2390,50152=>2391,50153=>2392,50157=>2393,50164=>2394,50165=>2395,50168=>2396,50184=>2397,50192=>2398,50212=>2399,50220=>2400,50224=>2401,50228=>2402,50236=>2403,50237=>2404,50248=>2405,50276=>2406,50277=>2407,50280=>2408,50284=>2409,50292=>2410,50293=>2411,50297=>2412,50304=>2413,50324=>2414,50332=>2415,50360=>2416,50364=>2417,50409=>2418,50416=>2419,50417=>2420,50420=>2421,50424=>2422,50426=>2423,50431=>2424,50432=>2425,50433=>2426,50444=>2427,50448=>2428,50452=>2429,50460=>2430,50472=>2431,50473=>2432,50476=>2433,50480=>2434,50488=>2435,50489=>2436,50491=>2437,50493=>2438,50500=>2439,50501=>2440,50504=>2441,50505=>2442,50506=>2443,50508=>2444,50509=>2445,50510=>2446,50515=>2447,50516=>2448,50517=>2449,50519=>2450,50520=>2451,50521=>2452,50525=>2453,50526=>2454,50528=>2455,50529=>2456,50532=>2457,50536=>2458,50544=>2459,50545=>2460,50547=>2461,50548=>2462,50549=>2463,50556=>2464,50557=>2465,50560=>2466,50564=>2467,50567=>2468,50572=>2469,50573=>2470,50575=>2471,50577=>2472,50581=>2473,50583=>2474,50584=>2475,50588=>2476,50592=>2477,50601=>2478,50612=>2479,50613=>2480,50616=>2481,50617=>2482,50619=>2483,50620=>2484,50621=>2485,50622=>2486,50628=>2487,50629=>2488,50630=>2489,50631=>2490,50632=>2491,50633=>2492,50634=>2493,50636=>2494,50638=>2495,50640=>2496,50641=>2497,50644=>2498,50648=>2499,50656=>2500,50657=>2501,50659=>2502,50661=>2503,50668=>2504,50669=>2505,50670=>2506,50672=>2507,50676=>2508,50678=>2509,50679=>2510,50684=>2511,50685=>2512,50686=>2513,50687=>2514,50688=>2515,50689=>2516,50693=>2517,50694=>2518,50695=>2519,50696=>2520,50700=>2521,50704=>2522,50712=>2523,50713=>2524,50715=>2525,50716=>2526,50724=>2527,50725=>2528,50728=>2529,50732=>2530,50733=>2531,50734=>2532,50736=>2533,50739=>2534,50740=>2535,50741=>2536,50743=>2537,50745=>2538,50747=>2539,50752=>2540,50753=>2541,50756=>2542,50760=>2543,50768=>2544,50769=>2545,50771=>2546,50772=>2547,50773=>2548,50780=>2549,50781=>2550,50784=>2551,50796=>2552,50799=>2553,50801=>2554,50808=>2555,50809=>2556,50812=>2557,50816=>2558,50824=>2559,50825=>2560,50827=>2561,50829=>2562,50836=>2563,50837=>2564,50840=>2565,50844=>2566,50852=>2567,50853=>2568,50855=>2569,50857=>2570,50864=>2571,50865=>2572,50868=>2573,50872=>2574,50873=>2575,50874=>2576,50880=>2577,50881=>2578,50883=>2579,50885=>2580,50892=>2581,50893=>2582,50896=>2583,50900=>2584,50908=>2585,50909=>2586,50912=>2587,50913=>2588,50920=>2589,50921=>2590,50924=>2591,50928=>2592,50936=>2593,50937=>2594,50941=>2595,50948=>2596,50949=>2597,50952=>2598,50956=>2599,50964=>2600,50965=>2601,50967=>2602,50969=>2603,50976=>2604,50977=>2605,50980=>2606,50984=>2607,50992=>2608,50993=>2609,50995=>2610,50997=>2611,50999=>2612,51004=>2613,51005=>2614,51008=>2615,51012=>2616,51018=>2617,51020=>2618,51021=>2619,51023=>2620,51025=>2621,51026=>2622,51027=>2623,51028=>2624,51029=>2625,51030=>2626,51031=>2627,51032=>2628,51036=>2629,51040=>2630,51048=>2631,51051=>2632,51060=>2633,51061=>2634,51064=>2635,51068=>2636,51069=>2637,51070=>2638,51075=>2639,51076=>2640,51077=>2641,51079=>2642,51080=>2643,51081=>2644,51082=>2645,51086=>2646,51088=>2647,51089=>2648,51092=>2649,51094=>2650,51095=>2651,51096=>2652,51098=>2653,51104=>2654,51105=>2655,51107=>2656,51108=>2657,51109=>2658,51110=>2659,51116=>2660,51117=>2661,51120=>2662,51124=>2663,51132=>2664,51133=>2665,51135=>2666,51136=>2667,51137=>2668,51144=>2669,51145=>2670,51148=>2671,51150=>2672,51152=>2673,51160=>2674,51165=>2675,51172=>2676,51176=>2677,51180=>2678,51200=>2679,51201=>2680,51204=>2681,51208=>2682,51210=>2683,51216=>2684,51217=>2685,51219=>2686,51221=>2687,51222=>2688,51228=>2689,51229=>2690,51232=>2691,51236=>2692,51244=>2693,51245=>2694,51247=>2695,51249=>2696,51256=>2697,51260=>2698,51264=>2699,51272=>2700,51273=>2701,51276=>2702,51277=>2703,51284=>2704,51312=>2705,51313=>2706,51316=>2707,51320=>2708,51322=>2709,51328=>2710,51329=>2711,51331=>2712,51333=>2713,51334=>2714,51335=>2715,51339=>2716,51340=>2717,51341=>2718,51348=>2719,51357=>2720,51359=>2721,51361=>2722,51368=>2723,51388=>2724,51389=>2725,51396=>2726,51400=>2727,51404=>2728,51412=>2729,51413=>2730,51415=>2731,51417=>2732,51424=>2733,51425=>2734,51428=>2735,51445=>2736,51452=>2737,51453=>2738,51456=>2739,51460=>2740,51461=>2741,51462=>2742,51468=>2743,51469=>2744,51471=>2745,51473=>2746,51480=>2747,51500=>2748,51508=>2749,51536=>2750,51537=>2751,51540=>2752,51544=>2753,51552=>2754,51553=>2755,51555=>2756,51564=>2757,51568=>2758,51572=>2759,51580=>2760,51592=>2761,51593=>2762,51596=>2763,51600=>2764,51608=>2765,51609=>2766,51611=>2767,51613=>2768,51648=>2769,51649=>2770,51652=>2771,51655=>2772,51656=>2773,51658=>2774,51664=>2775,51665=>2776,51667=>2777,51669=>2778,51670=>2779,51673=>2780,51674=>2781,51676=>2782,51677=>2783,51680=>2784,51682=>2785,51684=>2786,51687=>2787,51692=>2788,51693=>2789,51695=>2790,51696=>2791,51697=>2792,51704=>2793,51705=>2794,51708=>2795,51712=>2796,51720=>2797,51721=>2798,51723=>2799,51724=>2800,51725=>2801,51732=>2802,51736=>2803,51753=>2804,51788=>2805,51789=>2806,51792=>2807,51796=>2808,51804=>2809,51805=>2810,51807=>2811,51808=>2812,51809=>2813,51816=>2814,51837=>2815,51844=>2816,51864=>2817,51900=>2818,51901=>2819,51904=>2820,51908=>2821,51916=>2822,51917=>2823,51919=>2824,51921=>2825,51923=>2826,51928=>2827,51929=>2828,51936=>2829,51948=>2830,51956=>2831,51976=>2832,51984=>2833,51988=>2834,51992=>2835,52000=>2836,52001=>2837,52033=>2838,52040=>2839,52041=>2840,52044=>2841,52048=>2842,52056=>2843,52057=>2844,52061=>2845,52068=>2846,52088=>2847,52089=>2848,52124=>2849,52152=>2850,52180=>2851,52196=>2852,52199=>2853,52201=>2854,52236=>2855,52237=>2856,52240=>2857,52244=>2858,52252=>2859,52253=>2860,52257=>2861,52258=>2862,52263=>2863,52264=>2864,52265=>2865,52268=>2866,52270=>2867,52272=>2868,52280=>2869,52281=>2870,52283=>2871,52284=>2872,52285=>2873,52286=>2874,52292=>2875,52293=>2876,52296=>2877,52300=>2878,52308=>2879,52309=>2880,52311=>2881,52312=>2882,52313=>2883,52320=>2884,52324=>2885,52326=>2886,52328=>2887,52336=>2888,52341=>2889,52376=>2890,52377=>2891,52380=>2892,52384=>2893,52392=>2894,52393=>2895,52395=>2896,52396=>2897,52397=>2898,52404=>2899,52405=>2900,52408=>2901,52412=>2902,52420=>2903,52421=>2904,52423=>2905,52425=>2906,52432=>2907,52436=>2908,52452=>2909,52460=>2910,52464=>2911,52481=>2912,52488=>2913,52489=>2914,52492=>2915,52496=>2916,52504=>2917,52505=>2918,52507=>2919,52509=>2920,52516=>2921,52520=>2922,52524=>2923,52537=>2924,52572=>2925,52576=>2926,52580=>2927,52588=>2928,52589=>2929,52591=>2930,52593=>2931,52600=>2932,52616=>2933,52628=>2934,52629=>2935,52632=>2936,52636=>2937,52644=>2938,52645=>2939,52647=>2940,52649=>2941,52656=>2942,52676=>2943,52684=>2944,52688=>2945,52712=>2946,52716=>2947,52720=>2948,52728=>2949,52729=>2950,52731=>2951,52733=>2952,52740=>2953,52744=>2954,52748=>2955,52756=>2956,52761=>2957,52768=>2958,52769=>2959,52772=>2960,52776=>2961,52784=>2962,52785=>2963,52787=>2964,52789=>2965,52824=>2966,52825=>2967,52828=>2968,52831=>2969,52832=>2970,52833=>2971,52840=>2972,52841=>2973,52843=>2974,52845=>2975,52852=>2976,52853=>2977,52856=>2978,52860=>2979,52868=>2980,52869=>2981,52871=>2982,52873=>2983,52880=>2984,52881=>2985,52884=>2986,52888=>2987,52896=>2988,52897=>2989,52899=>2990,52900=>2991,52901=>2992,52908=>2993,52909=>2994,52929=>2995,52964=>2996,52965=>2997,52968=>2998,52971=>2999,52972=>3000,52980=>3001,52981=>3002,52983=>3003,52984=>3004,52985=>3005,52992=>3006,52993=>3007,52996=>3008,53000=>3009,53008=>3010,53009=>3011,53011=>3012,53013=>3013,53020=>3014,53024=>3015,53028=>3016,53036=>3017,53037=>3018,53039=>3019,53040=>3020,53041=>3021,53048=>3022,53076=>3023,53077=>3024,53080=>3025,53084=>3026,53092=>3027,53093=>3028,53095=>3029,53097=>3030,53104=>3031,53105=>3032,53108=>3033,53112=>3034,53120=>3035,53125=>3036,53132=>3037,53153=>3038,53160=>3039,53168=>3040,53188=>3041,53216=>3042,53217=>3043,53220=>3044,53224=>3045,53232=>3046,53233=>3047,53235=>3048,53237=>3049,53244=>3050,53248=>3051,53252=>3052,53265=>3053,53272=>3054,53293=>3055,53300=>3056,53301=>3057,53304=>3058,53308=>3059,53316=>3060,53317=>3061,53319=>3062,53321=>3063,53328=>3064,53332=>3065,53336=>3066,53344=>3067,53356=>3068,53357=>3069,53360=>3070,53364=>3071,53372=>3072,53373=>3073,53377=>3074,53412=>3075,53413=>3076,53416=>3077,53420=>3078,53428=>3079,53429=>3080,53431=>3081,53433=>3082,53440=>3083,53441=>3084,53444=>3085,53448=>3086,53449=>3087,53456=>3088,53457=>3089,53459=>3090,53460=>3091,53461=>3092,53468=>3093,53469=>3094,53472=>3095,53476=>3096,53484=>3097,53485=>3098,53487=>3099,53488=>3100,53489=>3101,53496=>3102,53517=>3103,53552=>3104,53553=>3105,53556=>3106,53560=>3107,53562=>3108,53568=>3109,53569=>3110,53571=>3111,53572=>3112,53573=>3113,53580=>3114,53581=>3115,53584=>3116,53588=>3117,53596=>3118,53597=>3119,53599=>3120,53601=>3121,53608=>3122,53612=>3123,53628=>3124,53636=>3125,53640=>3126,53664=>3127,53665=>3128,53668=>3129,53672=>3130,53680=>3131,53681=>3132,53683=>3133,53685=>3134,53690=>3135,53692=>3136,53696=>3137,53720=>3138,53748=>3139,53752=>3140,53767=>3141,53769=>3142,53776=>3143,53804=>3144,53805=>3145,53808=>3146,53812=>3147,53820=>3148,53821=>3149,53823=>3150,53825=>3151,53832=>3152,53852=>3153,53860=>3154,53888=>3155,53889=>3156,53892=>3157,53896=>3158,53904=>3159,53905=>3160,53909=>3161,53916=>3162,53920=>3163,53924=>3164,53932=>3165,53937=>3166,53944=>3167,53945=>3168,53948=>3169,53951=>3170,53952=>3171,53954=>3172,53960=>3173,53961=>3174,53963=>3175,53972=>3176,53976=>3177,53980=>3178,53988=>3179,53989=>3180,54000=>3181,54001=>3182,54004=>3183,54008=>3184,54016=>3185,54017=>3186,54019=>3187,54021=>3188,54028=>3189,54029=>3190,54030=>3191,54032=>3192,54036=>3193,54038=>3194,54044=>3195,54045=>3196,54047=>3197,54048=>3198,54049=>3199,54053=>3200,54056=>3201,54057=>3202,54060=>3203,54064=>3204,54072=>3205,54073=>3206,54075=>3207,54076=>3208,54077=>3209,54084=>3210,54085=>3211,54140=>3212,54141=>3213,54144=>3214,54148=>3215,54156=>3216,54157=>3217,54159=>3218,54160=>3219,54161=>3220,54168=>3221,54169=>3222,54172=>3223,54176=>3224,54184=>3225,54185=>3226,54187=>3227,54189=>3228,54196=>3229,54200=>3230,54204=>3231,54212=>3232,54213=>3233,54216=>3234,54217=>3235,54224=>3236,54232=>3237,54241=>3238,54243=>3239,54252=>3240,54253=>3241,54256=>3242,54260=>3243,54268=>3244,54269=>3245,54271=>3246,54273=>3247,54280=>3248,54301=>3249,54336=>3250,54340=>3251,54364=>3252,54368=>3253,54372=>3254,54381=>3255,54383=>3256,54392=>3257,54393=>3258,54396=>3259,54399=>3260,54400=>3261,54402=>3262,54408=>3263,54409=>3264,54411=>3265,54413=>3266,54420=>3267,54441=>3268,54476=>3269,54480=>3270,54484=>3271,54492=>3272,54495=>3273,54504=>3274,54508=>3275,54512=>3276,54520=>3277,54523=>3278,54525=>3279,54532=>3280,54536=>3281,54540=>3282,54548=>3283,54549=>3284,54551=>3285,54588=>3286,54589=>3287,54592=>3288,54596=>3289,54604=>3290,54605=>3291,54607=>3292,54609=>3293,54616=>3294,54617=>3295,54620=>3296,54624=>3297,54629=>3298,54632=>3299,54633=>3300,54635=>3301,54637=>3302,54644=>3303,54645=>3304,54648=>3305,54652=>3306,54660=>3307,54661=>3308,54663=>3309,54664=>3310,54665=>3311,54672=>3312,54693=>3313,54728=>3314,54729=>3315,54732=>3316,54736=>3317,54738=>3318,54744=>3319,54745=>3320,54747=>3321,54749=>3322,54756=>3323,54757=>3324,54760=>3325,54764=>3326,54772=>3327,54773=>3328,54775=>3329,54777=>3330,54784=>3331,54785=>3332,54788=>3333,54792=>3334,54800=>3335,54801=>3336,54803=>3337,54804=>3338,54805=>3339,54812=>3340,54816=>3341,54820=>3342,54829=>3343,54840=>3344,54841=>3345,54844=>3346,54848=>3347,54853=>3348,54856=>3349,54857=>3350,54859=>3351,54861=>3352,54865=>3353,54868=>3354,54869=>3355,54872=>3356,54876=>3357,54887=>3358,54889=>3359,54896=>3360,54897=>3361,54900=>3362,54915=>3363,54917=>3364,54924=>3365,54925=>3366,54928=>3367,54932=>3368,54941=>3369,54943=>3370,54945=>3371,54952=>3372,54956=>3373,54960=>3374,54969=>3375,54971=>3376,54980=>3377,54981=>3378,54984=>3379,54988=>3380,54993=>3381,54996=>3382,54999=>3383,55001=>3384,55008=>3385,55012=>3386,55016=>3387,55024=>3388,55029=>3389,55036=>3390,55037=>3391,55040=>3392,55044=>3393,55057=>3394,55064=>3395,55065=>3396,55068=>3397,55072=>3398,55080=>3399,55081=>3400,55083=>3401,55085=>3402,55092=>3403,55093=>3404,55096=>3405,55100=>3406,55108=>3407,55111=>3408,55113=>3409,55120=>3410,55121=>3411,55124=>3412,55126=>3413,55127=>3414,55128=>3415,55129=>3416,55136=>3417,55137=>3418,55139=>3419,55141=>3420,55145=>3421,55148=>3422,55152=>3423,55156=>3424,55164=>3425,55165=>3426,55169=>3427,55176=>3428,55177=>3429,55180=>3430,55184=>3431,55192=>3432,55193=>3433,55195=>3434,55197=>3435,20285=>3436,20339=>3437,20551=>3438,20729=>3439,21152=>3440,21487=>3441,21621=>3442,21733=>3443,22025=>3444,23233=>3445,23478=>3446,26247=>3447,26550=>3448,26551=>3449,26607=>3450,27468=>3451,29634=>3452,30146=>3453,31292=>3454,33499=>3455,33540=>3456,34903=>3457,34952=>3458,35382=>3459,36040=>3460,63747=>3460,36303=>3461,36603=>3462,36838=>3463,39381=>3464,21051=>3465,21364=>3466,21508=>3467,24682=>3468,24932=>3469,27580=>3470,29647=>3471,33050=>3472,35258=>3473,12179=>3474,35282=>3474,38307=>3475,20355=>3476,21002=>3477,22718=>3478,22904=>3479,23014=>3480,12082=>3481,24178=>3481,24185=>3482,25031=>3483,25536=>3484,26438=>3485,26604=>3486,26751=>3487,28567=>3488,30286=>3489,30475=>3490,30965=>3491,31240=>3492,31487=>3493,31777=>3494,32925=>3495,12169=>3496,33390=>3496,33393=>3497,35563=>3498,38291=>3499,20075=>3500,21917=>3501,26359=>3502,28212=>3503,30883=>3504,31469=>3505,33883=>3506,35088=>3507,34638=>3508,38824=>3509,21208=>3510,22350=>3511,22570=>3512,23884=>3513,24863=>3514,25022=>3515,25121=>3516,25954=>3517,26577=>3518,27204=>3519,28187=>3520,12130=>3521,29976=>3521,30131=>3522,30435=>3523,30640=>3524,32058=>3525,37039=>3526,37969=>3527,37970=>3528,40853=>3529,21283=>3530,23724=>3531,30002=>3532,32987=>3533,37440=>3534,38296=>3535,21083=>3536,22536=>3537,23004=>3538,23713=>3539,23831=>3540,24247=>3541,24378=>3542,24394=>3543,24951=>3544,27743=>3545,30074=>3546,30086=>3547,31968=>3548,32115=>3549,32177=>3550,32652=>3551,33108=>3552,33313=>3553,34193=>3554,35137=>3555,35611=>3556,37628=>3557,38477=>3558,64009=>3558,40007=>3559,20171=>3560,20215=>3561,20491=>3562,20977=>3563,22607=>3564,24887=>3565,24894=>3566,24936=>3567,25913=>3568,27114=>3569,28433=>3570,30117=>3571,30342=>3572,30422=>3573,31623=>3574,33445=>3575,33995=>3576,37799=>3577,38283=>3578,21888=>3579,23458=>3580,22353=>3581,31923=>3582,32697=>3583,37301=>3584,20520=>3585,21435=>3586,23621=>3587,24040=>3588,25298=>3589,25454=>3590,25818=>3591,25831=>3592,28192=>3593,28844=>3594,31067=>3595,36317=>3596,36382=>3597,36989=>3598,37445=>3599,37624=>3600,20094=>3601,20214=>3602,20581=>3603,12081=>3604,24062=>3604,24314=>3605,24838=>3606,26967=>3607,33137=>3608,34388=>3609,36423=>3610,37749=>3611,39467=>3612,20062=>3613,20625=>3614,26480=>3615,26688=>3616,20745=>3617,21133=>3618,21138=>3619,27298=>3620,30652=>3621,37392=>3622,40660=>3623,21163=>3624,24623=>3625,36850=>3626,20552=>3627,25001=>3628,25581=>3629,25802=>3630,26684=>3631,27268=>3632,28608=>3633,33160=>3634,35233=>3635,38548=>3636,22533=>3637,29309=>3638,12125=>3639,29356=>3639,29956=>3640,32121=>3641,32365=>3642,32937=>3643,12178=>3644,35211=>3644,64010=>3644,35700=>3645,36963=>3646,40273=>3647,25225=>3648,27770=>3649,28500=>3650,32080=>3651,32570=>3652,35363=>3653,20860=>3654,24906=>3655,31645=>3656,35609=>3657,37463=>3658,37772=>3659,20140=>3660,20435=>3661,20510=>3662,20670=>3663,20742=>3664,21185=>3665,21197=>3666,21375=>3667,22384=>3668,22659=>3669,24218=>3670,24465=>3671,24950=>3672,25004=>3673,25806=>3674,25964=>3675,26223=>3676,26299=>3677,26356=>3678,63745=>3678,26775=>3679,28039=>3680,28805=>3681,28913=>3682,29855=>3683,29861=>3684,29898=>3685,30169=>3686,30828=>3687,30956=>3688,31455=>3689,31478=>3690,32069=>3691,32147=>3692,32789=>3693,32831=>3694,33051=>3695,33686=>3696,35686=>3697,36629=>3698,36885=>3699,37857=>3700,38915=>3701,38968=>3702,39514=>3703,39912=>3704,20418=>3705,21843=>3706,22586=>3707,22865=>3708,63753=>3708,23395=>3709,23622=>3710,24760=>3711,25106=>3712,26690=>3713,26800=>3714,26856=>3715,28330=>3716,30028=>3717,30328=>3718,30926=>3719,31293=>3720,31995=>3721,32363=>3722,32380=>3723,35336=>3724,35489=>3725,35903=>3726,38542=>3727,40388=>3728,21476=>3729,21481=>3730,21578=>3731,21617=>3732,22266=>3733,22993=>3734,23396=>3735,23611=>3736,24235=>3737,25335=>3738,25911=>3739,25925=>3740,25970=>3741,26272=>3742,26543=>3743,27073=>3744,27837=>3745,30204=>3746,30352=>3747,30590=>3748,31295=>3749,32660=>3750,32771=>3751,32929=>3752,33167=>3753,33510=>3754,33533=>3755,33776=>3756,34241=>3757,34865=>3758,34996=>3759,35493=>3760,36764=>3761,37678=>3762,38599=>3763,39015=>3764,12220=>3765,39640=>3765,12238=>3766,40723=>3766,21741=>3767,26011=>3768,26354=>3769,26767=>3770,31296=>3771,12181=>3772,35895=>3772,40288=>3773,22256=>3774,22372=>3775,23825=>3776,26118=>3777,26801=>3778,26829=>3779,28414=>3780,29736=>3781,34974=>3782,39908=>3783,27752=>3784,12219=>3785,39592=>3785,20379=>3786,20844=>3787,20849=>3788,21151=>3789,23380=>3790,12079=>3791,24037=>3791,24656=>3792,24685=>3793,25329=>3794,25511=>3795,25915=>3796,29657=>3797,31354=>3798,34467=>3799,36002=>3800,38799=>3801,20018=>3802,63749=>3802,23521=>3803,12093=>3804,25096=>3804,26524=>3805,12128=>3806,29916=>3806,31185=>3807,33747=>3808,35463=>3809,35506=>3810,36328=>3811,36942=>3812,37707=>3813,38982=>3814,24275=>3815,64011=>3815,27112=>3816,34303=>3817,37101=>3818,20896=>3819,23448=>3820,23532=>3821,24931=>3822,26874=>3823,27454=>3824,28748=>3825,29743=>3826,29912=>3827,31649=>3828,32592=>3829,33733=>3830,35264=>3831,36011=>3832,38364=>3833,39208=>3834,21038=>3835,24669=>3836,25324=>3837,36866=>3838,20362=>3839,20809=>3840,21281=>3841,22745=>3842,24291=>3843,26336=>3844,27960=>3845,28826=>3846,29378=>3847,29654=>3848,31568=>3849,33009=>3850,37979=>3851,21350=>3852,25499=>3853,32619=>3854,20054=>3855,20608=>3856,22602=>3857,22750=>3858,24618=>3859,24871=>3860,25296=>3861,27088=>3862,39745=>3863,23439=>3864,32024=>3865,32945=>3866,36703=>3867,20132=>3868,20689=>3869,21676=>3870,21932=>3871,23308=>3872,23968=>3873,24039=>3874,25898=>3875,25934=>3876,26657=>3877,27211=>3878,29409=>3879,30350=>3880,30703=>3881,32094=>3882,32761=>3883,33184=>3884,34126=>3885,34527=>3886,36611=>3887,36686=>3888,37066=>3889,39171=>3890,39509=>3891,39851=>3892,19992=>3893,20037=>3894,20061=>3895,20167=>3896,20465=>3897,20855=>3898,21246=>3899,21312=>3900,12061=>3901,21475=>3901,21477=>3902,63750=>3902,21646=>3903,22036=>3904,22389=>3905,22434=>3906,23495=>3907,23943=>3908,24272=>3909,25084=>3910,25304=>3911,25937=>3912,26552=>3913,26601=>3914,27083=>3915,27472=>3916,27590=>3917,27628=>3918,27714=>3919,28317=>3920,28792=>3921,29399=>3922,29590=>3923,29699=>3924,30655=>3925,30697=>3926,31350=>3927,32127=>3928,32777=>3929,12165=>3930,33276=>3930,33285=>3931,33290=>3932,33503=>3933,34914=>3934,35635=>3935,36092=>3936,36544=>3937,36881=>3938,37041=>3939,37476=>3940,37558=>3941,39378=>3942,39493=>3943,40169=>3944,40407=>3945,12244=>3946,40860=>3946,63751=>3946,63752=>3946,22283=>3947,23616=>3948,33738=>3949,38816=>3950,38827=>3951,40628=>3952,21531=>3953,31384=>3954,32676=>3955,35033=>3956,36557=>3957,37089=>3958,22528=>3959,23624=>3960,25496=>3961,31391=>3962,23470=>3963,12088=>3964,24339=>3964,31353=>3965,31406=>3966,33422=>3967,36524=>3968,20518=>3969,21048=>3970,21240=>3971,21367=>3972,22280=>3973,25331=>3974,25458=>3975,27402=>3976,28099=>3977,30519=>3978,21413=>3979,29527=>3980,34152=>3981,36470=>3982,38357=>3983,26426=>3984,27331=>3985,28528=>3986,35437=>3987,36556=>3988,39243=>3989,26231=>3990,27512=>3991,36020=>3992,12225=>3993,39740=>3993,21483=>3994,22317=>3995,22862=>3996,25542=>3997,27131=>3998,29674=>3999,30789=>4000,31418=>4001,31429=>4002,31998=>4003,33909=>4004,35215=>4005,36211=>4006,36917=>4007,38312=>4008,21243=>4009,22343=>4010,30023=>4011,31584=>4012,33740=>4013,37406=>4014,27224=>4015,20811=>4016,21067=>4017,21127=>4018,25119=>4019,26840=>4020,26997=>4021,38553=>4022,20677=>4023,21156=>4024,21220=>4025,25027=>4026,12100=>4027,26020=>4027,26681=>4028,27135=>4029,29822=>4030,31563=>4031,33465=>4032,33771=>4033,35250=>4034,35641=>4035,36817=>4036,39241=>4037,20170=>4038,22935=>4039,25810=>4040,26129=>4041,27278=>4042,29748=>4043,31105=>4044,31165=>4045,33449=>4046,34942=>4047,34943=>4048,35167=>4049,37670=>4050,20235=>4051,21450=>4052,24613=>4053,25201=>4054,27762=>4055,32026=>4056,32102=>4057,20120=>4058,20834=>4059,30684=>4060,32943=>4061,20225=>4062,20238=>4063,20854=>4064,20864=>4065,21980=>4066,22120=>4067,22331=>4068,22522=>4069,22524=>4070,22804=>4071,22855=>4072,22931=>4073,23492=>4074,23696=>4075,23822=>4076,12080=>4077,24049=>4077,24190=>4078,24524=>4079,25216=>4080,26071=>4081,26083=>4082,26398=>4083,26399=>4084,26462=>4085,26827=>4086,26820=>4087,27231=>4088,27450=>4089,27683=>4090,27773=>4091,27778=>4092,28103=>4093,29592=>4094,29734=>4095,29738=>4096,29826=>4097,29859=>4098,30072=>4099,30079=>4100,30849=>4101,30959=>4102,31041=>4103,31047=>4104,31048=>4105,31098=>4106,31637=>4107,32000=>4108,32186=>4109,32648=>4110,32774=>4111,32813=>4112,32908=>4113,35352=>4114,35663=>4115,35912=>4116,63744=>4116,36215=>4117,37665=>4118,37668=>4119,39138=>4120,39249=>4121,39438=>4122,39439=>4123,39525=>4124,40594=>4125,32202=>4126,20342=>4127,21513=>4128,25326=>4129,26708=>4130,12198=>4131,37329=>4131,63754=>4131,21931=>4132,20794=>4133,23068=>4134,25062=>4135,25295=>4136,63835=>4136,25343=>4137,37027=>4138,35582=>4139,63837=>4139,26262=>4140,29014=>4141,38627=>4142,25423=>4143,25466=>4144,21335=>4145,26511=>4146,26976=>4147,28275=>4148,30007=>4149,32013=>4150,34930=>4151,22218=>4152,23064=>4153,20035=>4154,20839=>4155,22856=>4156,63756=>4156,26608=>4157,32784=>4158,12069=>4159,22899=>4159,63873=>4159,24180=>4160,63886=>4160,25754=>4161,63889=>4161,31178=>4162,63893=>4162,24565=>4163,63907=>4163,24684=>4164,25288=>4165,25467=>4166,63908=>4166,23527=>4167,63839=>4167,63914=>4167,23511=>4168,21162=>4169,22900=>4170,24361=>4171,24594=>4172,63840=>4172,29785=>4173,39377=>4174,28611=>4175,33215=>4176,36786=>4177,24817=>4178,33126=>4179,23615=>4180,63933=>4180,23273=>4181,35365=>4182,26491=>4183,63944=>4183,32016=>4184,63951=>4184,33021=>4185,23612=>4186,27877=>4187,63971=>4187,21311=>4188,63979=>4188,28346=>4189,63980=>4189,22810=>4190,33590=>4191,63998=>4191,20025=>4192,63838=>4192,20150=>4193,20294=>4194,21934=>4195,22296=>4196,22727=>4197,24406=>4198,26039=>4199,26086=>4200,27264=>4201,27573=>4202,28237=>4203,30701=>4204,31471=>4205,31774=>4206,32222=>4207,34507=>4208,34962=>4209,37170=>4210,37723=>4211,25787=>4212,28606=>4213,29562=>4214,30136=>4215,36948=>4216,21846=>4217,22349=>4218,25018=>4219,25812=>4220,26311=>4221,28129=>4222,28251=>4223,28525=>4224,28601=>4225,30192=>4226,32835=>4227,33213=>4228,34113=>4229,35203=>4230,35527=>4231,35674=>4232,37663=>4233,27795=>4234,30035=>4235,31572=>4236,36367=>4237,36957=>4238,21776=>4239,22530=>4240,22616=>4241,24162=>4242,25095=>4243,25758=>4244,26848=>4245,30070=>4246,31958=>4247,64003=>4247,34739=>4248,40680=>4249,20195=>4250,22408=>4251,22382=>4252,12068=>4253,22823=>4253,23565=>4254,23729=>4255,24118=>4256,24453=>4257,25140=>4258,25825=>4259,29619=>4260,33274=>4261,34955=>4262,36024=>4263,38538=>4264,40667=>4265,23429=>4266,64004=>4266,24503=>4267,24755=>4268,20498=>4269,12049=>4270,20992=>4270,21040=>4271,22294=>4272,22581=>4273,22615=>4274,23566=>4275,23648=>4276,23798=>4277,23947=>4278,24230=>4279,64001=>4279,24466=>4280,24764=>4281,25361=>4282,25481=>4283,25623=>4284,26691=>4285,26873=>4286,27330=>4287,28120=>4288,28193=>4289,28372=>4290,28644=>4291,29182=>4292,30428=>4293,30585=>4294,31153=>4295,31291=>4296,33796=>4297,35241=>4298,36077=>4299,36339=>4300,36424=>4301,36867=>4302,36884=>4303,36947=>4304,37117=>4305,37709=>4306,38518=>4307,38876=>4308,27602=>4309,28678=>4310,29272=>4311,29346=>4312,29544=>4313,30563=>4314,31167=>4315,31716=>4316,32411=>4317,35712=>4318,63834=>4318,22697=>4319,24775=>4320,25958=>4321,26109=>4322,26302=>4323,27788=>4324,28958=>4325,29129=>4326,35930=>4327,38931=>4328,20077=>4329,31361=>4330,20189=>4331,20908=>4332,20941=>4333,21205=>4334,21516=>4335,24999=>4336,26481=>4337,26704=>4338,26847=>4339,27934=>4340,64005=>4340,28540=>4341,30140=>4342,30643=>4343,31461=>4344,33012=>4345,33891=>4346,37509=>4347,20828=>4348,12099=>4349,26007=>4349,26460=>4350,26515=>4351,30168=>4352,31431=>4353,33651=>4354,12182=>4355,35910=>4355,36887=>4356,38957=>4357,23663=>4358,33216=>4359,33434=>4360,36929=>4361,36975=>4362,37389=>4363,24471=>4364,23965=>4365,27225=>4366,29128=>4367,30331=>4368,31561=>4369,34276=>4370,35588=>4371,37159=>4372,39472=>4373,21895=>4374,63755=>4374,25078=>4375,63757=>4375,30313=>4376,63758=>4376,32645=>4377,63759=>4377,34367=>4378,63760=>4378,34746=>4379,63761=>4379,35064=>4380,63762=>4380,37007=>4381,63763=>4381,27931=>4382,63765=>4382,28889=>4383,63766=>4383,29662=>4384,63767=>4384,32097=>4385,33853=>4386,63768=>4386,37226=>4387,63769=>4387,39409=>4388,63770=>4388,20098=>4389,63771=>4389,21365=>4390,63772=>4390,27396=>4391,63773=>4391,27410=>4392,28734=>4393,29211=>4394,63774=>4394,34349=>4395,63775=>4395,40478=>4396,63776=>4396,21068=>4397,36771=>4398,23888=>4399,63777=>4399,25829=>4400,25900=>4401,27414=>4402,28651=>4403,63778=>4403,31811=>4404,32412=>4405,34253=>4406,63779=>4406,35172=>4407,63780=>4407,35261=>4408,25289=>4409,63781=>4409,33240=>4410,63782=>4410,34847=>4411,63783=>4411,24266=>4412,63784=>4412,26391=>4413,63785=>4413,28010=>4414,63786=>4414,29436=>4415,63787=>4415,29701=>4416,29807=>4417,34690=>4418,37086=>4419,63788=>4419,20358=>4420,63789=>4420,23821=>4421,24480=>4422,33802=>4423,20919=>4424,63790=>4424,25504=>4425,63861=>4425,30053=>4426,63862=>4426,20142=>4427,63863=>4427,20486=>4428,20841=>4429,63864=>4429,20937=>4430,63865=>4430,26753=>4431,63866=>4431,27153=>4432,31918=>4433,31921=>4434,31975=>4435,63867=>4435,33391=>4436,63868=>4436,35538=>4437,63869=>4437,36635=>4438,37327=>4439,63870=>4439,20406=>4440,20791=>4441,21237=>4442,63871=>4442,21570=>4443,63872=>4443,24300=>4444,63874=>4444,24942=>4445,25150=>4446,26053=>4447,63875=>4447,27354=>4448,28670=>4449,63876=>4449,31018=>4450,63877=>4450,34268=>4451,34851=>4452,38317=>4453,63878=>4453,39522=>4454,39530=>4455,63879=>4455,40599=>4456,63880=>4456,40654=>4457,63881=>4457,12050=>4458,21147=>4458,63882=>4458,26310=>4459,63883=>4459,27511=>4460,63884=>4460,28701=>4461,31019=>4462,36706=>4463,63885=>4463,38722=>4464,24976=>4465,63887=>4465,25088=>4466,63888=>4466,25891=>4467,28451=>4468,63890=>4468,29001=>4469,63891=>4469,29833=>4470,63892=>4470,32244=>4471,63894=>4471,32879=>4472,63895=>4472,34030=>4473,63897=>4473,36646=>4474,63896=>4474,36899=>4475,63898=>4475,37706=>4476,63899=>4476,20925=>4477,21015=>4478,63900=>4478,21155=>4479,63901=>4479,27916=>4480,28872=>4481,63903=>4481,35010=>4482,63904=>4482,24265=>4483,63906=>4483,25986=>4484,27566=>4485,63909=>4485,28610=>4486,31806=>4487,63910=>4487,29557=>4488,63911=>4488,20196=>4489,63912=>4489,20278=>4490,22265=>4491,63913=>4491,23738=>4492,23994=>4493,63915=>4493,24604=>4494,63916=>4494,29618=>4495,63917=>4495,31533=>4496,32666=>4497,63919=>4497,32718=>4498,32838=>4499,63920=>4499,36894=>4500,37428=>4501,63921=>4501,38646=>4502,63922=>4502,38728=>4503,63923=>4503,38936=>4504,63924=>4504,40801=>4505,20363=>4506,63925=>4506,28583=>4507,31150=>4508,63926=>4508,37300=>4509,63927=>4509,38583=>4510,63928=>4510,21214=>4511,63791=>4511,25736=>4512,25796=>4513,63792=>4513,27347=>4514,63793=>4514,28510=>4515,28696=>4516,29200=>4517,63794=>4517,30439=>4518,63795=>4518,12156=>4519,32769=>4519,63796=>4519,34310=>4520,63797=>4520,34396=>4521,63798=>4521,36335=>4522,63799=>4522,36613=>4523,38706=>4524,63800=>4524,39791=>4525,63801=>4525,40442=>4526,63802=>4526,12228=>4527,40565=>4527,30860=>4528,63803=>4528,31103=>4529,63804=>4529,32160=>4530,63805=>4530,33737=>4531,63806=>4531,37636=>4532,63807=>4532,12229=>4533,40575=>4533,63808=>4533,40595=>4534,35542=>4535,63809=>4535,22751=>4536,63810=>4536,24324=>4537,63811=>4537,26407=>4538,28711=>4539,29903=>4540,31840=>4541,63812=>4541,32894=>4542,63813=>4542,20769=>4543,28712=>4544,29282=>4545,63814=>4545,30922=>4546,63815=>4546,36034=>4547,63816=>4547,36058=>4548,36084=>4549,38647=>4550,63817=>4550,20102=>4551,63930=>4551,20698=>4552,63931=>4552,23534=>4553,63932=>4553,24278=>4554,26009=>4555,63934=>4555,29134=>4556,63936=>4556,30274=>4557,63937=>4557,30637=>4558,32842=>4559,34044=>4560,63938=>4560,36988=>4561,63939=>4561,39719=>4562,12243=>4563,40845=>4563,63940=>4563,22744=>4564,63818=>4564,23105=>4565,23650=>4566,63819=>4566,27155=>4567,63820=>4567,28122=>4568,63821=>4568,28431=>4569,63822=>4569,30267=>4570,32047=>4571,63823=>4571,32311=>4572,63824=>4572,34078=>4573,35128=>4574,37860=>4575,38475=>4576,63825=>4576,21129=>4577,63943=>4577,26066=>4578,26611=>4579,63945=>4579,27060=>4580,27969=>4581,63946=>4581,28316=>4582,63947=>4582,28687=>4583,29705=>4584,63948=>4584,29792=>4585,30041=>4586,63949=>4586,30244=>4587,30827=>4588,63950=>4588,35628=>4589,39006=>4590,63952=>4590,20845=>4591,63953=>4591,25134=>4592,63954=>4592,38520=>4593,63955=>4593,20374=>4594,20523=>4595,63956=>4595,23833=>4596,63957=>4596,28138=>4597,63958=>4597,32184=>4598,36650=>4599,63959=>4599,24459=>4600,63960=>4600,24900=>4601,63961=>4601,26647=>4602,63962=>4602,38534=>4603,63964=>4603,21202=>4604,63826=>4604,32907=>4605,63827=>4605,20956=>4606,63828=>4606,20940=>4607,63829=>4607,26974=>4608,31260=>4609,63830=>4609,32190=>4610,63831=>4610,33777=>4611,63832=>4611,38517=>4612,63833=>4612,20442=>4613,21033=>4614,63965=>4614,21400=>4615,21519=>4616,63966=>4616,21774=>4617,23653=>4618,63967=>4618,24743=>4619,26446=>4620,63969=>4620,26792=>4621,63970=>4621,28012=>4622,29313=>4623,29432=>4624,29702=>4625,63972=>4625,29827=>4626,30178=>4627,63973=>4627,31852=>4628,32633=>4629,63974=>4629,32696=>4630,33673=>4631,35023=>4632,63975=>4632,35041=>4633,63976=>4633,12197=>4634,37324=>4634,63977=>4634,37328=>4635,38626=>4636,63978=>4636,39881=>4637,21533=>4638,63981=>4638,28542=>4639,29136=>4640,63982=>4640,29848=>4641,63983=>4641,34298=>4642,63984=>4642,36522=>4643,38563=>4644,63985=>4644,40023=>4645,63986=>4645,40607=>4646,63987=>4646,26519=>4647,63988=>4647,28107=>4648,63989=>4648,29747=>4649,33256=>4650,63990=>4650,38678=>4651,30764=>4652,12148=>4653,31435=>4653,63991=>4653,31520=>4654,63992=>4654,31890=>4655,63993=>4655,25705=>4656,29802=>4657,30194=>4658,30908=>4659,30952=>4660,12218=>4661,39340=>4661,39764=>4662,12231=>4663,40635=>4663,23518=>4664,24149=>4665,28448=>4666,33180=>4667,33707=>4668,37000=>4669,19975=>4670,21325=>4671,23081=>4672,24018=>4673,24398=>4674,24930=>4675,25405=>4676,26217=>4677,26364=>4678,28415=>4679,28459=>4680,28771=>4681,30622=>4682,33836=>4683,34067=>4684,34875=>4685,36627=>4686,39237=>4687,39995=>4688,21788=>4689,25273=>4690,26411=>4691,27819=>4692,33545=>4693,35178=>4694,38778=>4695,20129=>4696,22916=>4697,24536=>4698,24537=>4699,26395=>4700,32178=>4701,32596=>4702,33426=>4703,33579=>4704,33725=>4705,36638=>4706,37017=>4707,22475=>4708,22969=>4709,23186=>4710,23504=>4711,26151=>4712,26522=>4713,26757=>4714,27599=>4715,29028=>4716,32629=>4717,36023=>4718,36067=>4719,36993=>4720,39749=>4721,33032=>4722,35978=>4723,38476=>4724,39488=>4725,12230=>4726,40613=>4726,23391=>4727,27667=>4728,29467=>4729,30450=>4730,30431=>4731,33804=>4732,20906=>4733,35219=>4734,20813=>4735,20885=>4736,21193=>4737,26825=>4738,27796=>4739,30468=>4740,30496=>4741,32191=>4742,32236=>4743,12207=>4744,38754=>4744,40629=>4745,28357=>4746,34065=>4747,20901=>4748,21517=>4749,21629=>4750,26126=>4751,26269=>4752,26919=>4753,28319=>4754,12139=>4755,30399=>4755,30609=>4756,33559=>4757,33986=>4758,34719=>4759,37225=>4760,37528=>4761,40180=>4762,34946=>4763,20398=>4764,20882=>4765,21215=>4766,22982=>4767,24125=>4768,24917=>4769,25720=>4770,25721=>4771,26286=>4772,26576=>4773,27169=>4774,27597=>4775,12113=>4776,27611=>4776,29279=>4777,29281=>4778,29761=>4779,30520=>4780,12141=>4781,30683=>4781,32791=>4782,33468=>4783,33541=>4784,35584=>4785,35624=>4786,35980=>4787,12106=>4788,26408=>4788,27792=>4789,29287=>4790,12140=>4791,30446=>4791,30566=>4792,31302=>4793,40361=>4794,27519=>4795,27794=>4796,22818=>4797,26406=>4798,33945=>4799,21359=>4800,22675=>4801,22937=>4802,24287=>4803,25551=>4804,26164=>4805,26483=>4806,28218=>4807,29483=>4808,31447=>4809,33495=>4810,37672=>4811,21209=>4812,24043=>4813,25006=>4814,25035=>4815,25098=>4816,25287=>4817,25771=>4818,12102=>4819,26080=>4819,26969=>4820,27494=>4821,12111=>4822,27595=>4822,28961=>4823,29687=>4824,30045=>4825,32326=>4826,33310=>4827,33538=>4828,34154=>4829,35491=>4830,36031=>4831,38695=>4832,40289=>4833,22696=>4834,40664=>4835,20497=>4836,21006=>4837,21563=>4838,21839=>4839,12098=>4840,25991=>4840,27766=>4841,32010=>4842,32011=>4843,32862=>4844,34442=>4845,12200=>4846,38272=>4846,38639=>4847,21247=>4848,27797=>4849,29289=>4850,21619=>4851,23194=>4852,23614=>4853,23883=>4854,24396=>4855,24494=>4856,26410=>4857,26806=>4858,26979=>4859,28220=>4860,28228=>4861,30473=>4862,12150=>4863,31859=>4863,32654=>4864,34183=>4865,35598=>4866,36855=>4867,38753=>4868,40692=>4869,23735=>4870,24758=>4871,24845=>4872,25003=>4873,25935=>4874,26107=>4875,26108=>4876,27665=>4877,27887=>4878,29599=>4879,29641=>4880,32225=>4881,38292=>4882,23494=>4883,34588=>4884,35600=>4885,21085=>4886,21338=>4887,25293=>4888,25615=>4889,25778=>4890,26420=>4891,27192=>4892,27850=>4893,29632=>4894,29854=>4895,31636=>4896,31893=>4897,32283=>4898,33162=>4899,33334=>4900,34180=>4901,36843=>4902,38649=>4903,39361=>4904,20276=>4905,21322=>4906,21453=>4907,21467=>4908,25292=>4909,25644=>4910,25856=>4911,26001=>4912,27075=>4913,27886=>4914,28504=>4915,29677=>4916,30036=>4917,30242=>4918,30436=>4919,30460=>4920,30928=>4921,30971=>4922,63844=>4922,31020=>4923,32070=>4924,33324=>4925,34784=>4926,36820=>4927,38930=>4928,39151=>4929,21187=>4930,25300=>4931,25765=>4932,28196=>4933,28497=>4934,30332=>4935,36299=>4936,37297=>4937,37474=>4938,39662=>4939,39747=>4940,20515=>4941,20621=>4942,22346=>4943,22952=>4944,23592=>4945,24135=>4946,24439=>4947,25151=>4948,25918=>4949,12101=>4950,26041=>4950,26049=>4951,26121=>4952,26507=>4953,27036=>4954,28354=>4955,30917=>4956,32033=>4957,32938=>4958,33152=>4959,33323=>4960,33459=>4961,33953=>4962,34444=>4963,35370=>4964,35607=>4965,37030=>4966,38450=>4967,40848=>4968,20493=>4969,20467=>4970,22521=>4971,24472=>4972,25308=>4973,25490=>4974,26479=>4975,28227=>4976,28953=>4977,30403=>4978,32972=>4979,32986=>4980,35060=>4981,35061=>4982,35097=>4983,36064=>4984,36649=>4985,37197=>4986,38506=>4987,20271=>4988,20336=>4989,24091=>4990,26575=>4991,26658=>4992,12137=>4993,30333=>4993,30334=>4994,39748=>4995,24161=>4996,27146=>4997,29033=>4998,29140=>4999,30058=>5000,32321=>5001,34115=>5002,34281=>5003,39132=>5004,20240=>5005,31567=>5006,32624=>5007,38309=>5008,20961=>5009,24070=>5010,26805=>5011,27710=>5012,27726=>5013,27867=>5014,29359=>5015,31684=>5016,33539=>5017,27861=>5018,29754=>5019,20731=>5020,21128=>5021,22721=>5022,25816=>5023,27287=>5024,29863=>5025,30294=>5026,30887=>5027,34327=>5028,38370=>5029,38713=>5030,21342=>5031,24321=>5032,35722=>5033,36776=>5034,36783=>5035,37002=>5036,21029=>5037,30629=>5038,40009=>5039,40712=>5040,19993=>5041,20482=>5042,20853=>5043,23643=>5044,24183=>5045,26142=>5046,26170=>5047,26564=>5048,26821=>5049,28851=>5050,29953=>5051,30149=>5052,31177=>5053,31453=>5054,36647=>5055,39200=>5056,39432=>5057,20445=>5058,22561=>5059,22577=>5060,23542=>5061,26222=>5062,27493=>5063,27921=>5064,28282=>5065,28541=>5066,29668=>5067,29995=>5068,33769=>5069,35036=>5070,35091=>5071,35676=>5072,36628=>5073,20239=>5074,20693=>5075,21264=>5076,12056=>5077,21340=>5077,23443=>5078,24489=>5079,63846=>5079,26381=>5080,31119=>5081,33145=>5082,33583=>5083,34068=>5084,35079=>5085,35206=>5086,36665=>5087,36667=>5088,64007=>5088,39333=>5089,39954=>5090,26412=>5091,20086=>5092,20472=>5093,22857=>5094,23553=>5095,23791=>5096,23792=>5097,25447=>5098,26834=>5099,28925=>5100,29090=>5101,29739=>5102,32299=>5103,34028=>5104,34562=>5105,36898=>5106,37586=>5107,40179=>5108,19981=>5109,63847=>5109,20184=>5110,20463=>5111,20613=>5112,21078=>5113,21103=>5114,21542=>5115,21648=>5116,22496=>5117,22827=>5118,23142=>5119,23386=>5120,23413=>5121,23500=>5122,24220=>5123,25206=>5124,25975=>5125,26023=>5126,28014=>5127,28325=>5128,12119=>5129,29238=>5129,31526=>5130,31807=>5131,12152=>5132,32566=>5132,33104=>5133,33105=>5134,33178=>5135,33344=>5136,33433=>5137,33705=>5138,35331=>5139,36000=>5140,36070=>5141,36091=>5142,36212=>5143,36282=>5144,37096=>5145,37340=>5146,12201=>5147,38428=>5147,38468=>5148,39385=>5149,40167=>5150,21271=>5151,63843=>5151,20998=>5152,21545=>5153,22132=>5154,22707=>5155,22868=>5156,22894=>5157,24575=>5158,24996=>5159,25198=>5160,26128=>5161,27774=>5162,28954=>5163,30406=>5164,31881=>5165,31966=>5166,32027=>5167,33452=>5168,36033=>5169,38640=>5170,20315=>5171,24343=>5172,24447=>5173,25282=>5174,23849=>5175,26379=>5176,26842=>5177,30844=>5178,32323=>5179,40300=>5180,19989=>5181,20633=>5182,12052=>5183,21269=>5183,21290=>5184,21329=>5185,22915=>5186,23138=>5187,24199=>5188,24754=>5189,24970=>5190,25161=>5191,25209=>5192,26000=>5193,26503=>5194,27047=>5195,12112=>5196,27604=>5196,27606=>5197,27607=>5198,27608=>5199,27832=>5200,29749=>5201,30202=>5202,30738=>5203,30865=>5204,31189=>5205,31192=>5206,31875=>5207,32203=>5208,32737=>5209,32933=>5210,33086=>5211,33218=>5212,33778=>5213,34586=>5214,35048=>5215,35513=>5216,35692=>5217,36027=>5218,37145=>5219,12206=>5220,38750=>5220,12214=>5221,39131=>5221,12240=>5222,40763=>5222,22188=>5223,23338=>5224,24428=>5225,25996=>5226,27315=>5227,27567=>5228,27996=>5229,28657=>5230,28693=>5231,29277=>5232,29613=>5233,36007=>5234,36051=>5235,38971=>5236,24977=>5237,27703=>5238,32856=>5239,39425=>5240,20045=>5241,20107=>5242,20123=>5243,20181=>5244,20282=>5245,20284=>5246,20351=>5247,20447=>5248,20735=>5249,21490=>5250,21496=>5251,21766=>5252,21987=>5253,22235=>5254,12064=>5255,22763=>5255,22882=>5256,23057=>5257,23531=>5258,23546=>5259,23556=>5260,24051=>5261,24107=>5262,24473=>5263,24605=>5264,25448=>5265,26012=>5266,26031=>5267,26614=>5268,26619=>5269,26797=>5270,27515=>5271,27801=>5272,27863=>5273,28195=>5274,28681=>5275,29509=>5276,30722=>5277,31038=>5278,31040=>5279,31072=>5280,31169=>5281,31721=>5282,32023=>5283,32114=>5284,32902=>5285,33293=>5286,33678=>5287,34001=>5288,34503=>5289,35039=>5290,35408=>5291,35422=>5292,35613=>5293,36060=>5294,36198=>5295,36781=>5296,37034=>5297,39164=>5298,39391=>5299,40605=>5300,21066=>5301,26388=>5302,20632=>5303,21034=>5304,12077=>5305,23665=>5305,25955=>5306,27733=>5307,29642=>5308,29987=>5309,30109=>5310,31639=>5311,33948=>5312,37240=>5313,38704=>5314,20087=>5315,25746=>5316,27578=>5317,63856=>5317,29022=>5318,34217=>5319,19977=>5320,26441=>5321,26862=>5322,28183=>5323,33439=>5324,34072=>5325,34923=>5326,25591=>5327,28545=>5328,37394=>5329,39087=>5330,19978=>5331,20663=>5332,20687=>5333,20767=>5334,21830=>5335,21930=>5336,22039=>5337,23360=>5338,23577=>5339,23776=>5340,24120=>5341,24202=>5342,24224=>5343,24258=>5344,24819=>5345,26705=>5346,27233=>5347,28248=>5348,29245=>5349,29248=>5350,29376=>5351,63994=>5351,30456=>5352,31077=>5353,31665=>5354,32724=>5355,35059=>5356,35316=>5357,35443=>5358,35937=>5359,36062=>5360,38684=>5361,22622=>5362,63852=>5362,29885=>5363,36093=>5364,21959=>5365,31329=>5366,32034=>5367,63850=>5367,12170=>5368,33394=>5368,29298=>5369,12131=>5370,29983=>5370,29989=>5371,31513=>5372,22661=>5373,22779=>5374,23996=>5375,24207=>5376,24246=>5377,24464=>5378,24661=>5379,25234=>5380,25471=>5381,25933=>5382,26257=>5383,26329=>5384,26360=>5385,26646=>5386,26866=>5387,29312=>5388,29790=>5389,31598=>5390,32110=>5391,32214=>5392,32626=>5393,32997=>5394,33298=>5395,34223=>5396,35199=>5397,35475=>5398,36893=>5399,37604=>5400,12233=>5401,40653=>5401,12239=>5402,40736=>5402,12067=>5403,22805=>5403,22893=>5404,24109=>5405,24796=>5406,26132=>5407,26227=>5408,26512=>5409,27728=>5410,28101=>5411,28511=>5412,12143=>5413,30707=>5413,30889=>5414,33990=>5415,37323=>5416,37675=>5417,20185=>5418,20682=>5419,20808=>5420,21892=>5421,23307=>5422,23459=>5423,25159=>5424,25982=>5425,26059=>5426,28210=>5427,29053=>5428,29697=>5429,29764=>5430,29831=>5431,29887=>5432,30316=>5433,31146=>5434,32218=>5435,32341=>5436,32680=>5437,33146=>5438,33203=>5439,33337=>5440,34330=>5441,34796=>5442,35445=>5443,36323=>5444,36984=>5445,37521=>5446,37925=>5447,39245=>5448,39854=>5449,21352=>5450,23633=>5451,26964=>5452,27844=>5453,27945=>5454,28203=>5455,12166=>5456,33292=>5456,34203=>5457,35131=>5458,35373=>5459,35498=>5460,63855=>5460,63905=>5460,38634=>5461,40807=>5462,21089=>5463,26297=>5464,27570=>5465,32406=>5466,34814=>5467,36109=>5468,38275=>5469,38493=>5470,25885=>5471,28041=>5472,29166=>5473,22478=>5474,22995=>5475,23468=>5476,24615=>5477,24826=>5478,25104=>5479,26143=>5480,26207=>5481,29481=>5482,29689=>5483,30427=>5484,30465=>5485,63853=>5485,31596=>5486,32854=>5487,32882=>5488,33125=>5489,35488=>5490,37266=>5491,19990=>5492,21218=>5493,27506=>5494,27927=>5495,31237=>5496,31545=>5497,32048=>5498,36016=>5499,21484=>5500,22063=>5501,22609=>5502,23477=>5503,12073=>5504,23567=>5504,23569=>5505,24034=>5506,25152=>5507,25475=>5508,25620=>5509,26157=>5510,26803=>5511,27836=>5512,28040=>5513,28335=>5514,28703=>5515,28836=>5516,29138=>5517,29990=>5518,30095=>5519,30094=>5520,30233=>5521,31505=>5522,31712=>5523,31787=>5524,32032=>5525,32057=>5526,34092=>5527,34157=>5528,34311=>5529,35380=>5530,36877=>5531,36961=>5532,37045=>5533,37559=>5534,38902=>5535,39479=>5536,20439=>5537,23660=>5538,26463=>5539,28049=>5540,31903=>5541,32396=>5542,35606=>5543,36118=>5544,36895=>5545,23403=>5546,24061=>5547,25613=>5548,33984=>5549,36956=>5550,39137=>5551,29575=>5552,63841=>5552,63963=>5552,23435=>5553,24730=>5554,26494=>5555,28126=>5556,35359=>5557,35494=>5558,36865=>5559,38924=>5560,21047=>5561,28753=>5562,30862=>5563,37782=>5564,34928=>5565,37335=>5566,20462=>5567,21463=>5568,22013=>5569,22234=>5570,22402=>5571,22781=>5572,23234=>5573,23432=>5574,23723=>5575,23744=>5576,24101=>5577,24833=>5578,25101=>5579,12095=>5580,25163=>5580,25480=>5581,25628=>5582,25910=>5583,25976=>5584,63849=>5584,27193=>5585,27530=>5586,12116=>5587,27700=>5587,27929=>5588,28465=>5589,29159=>5590,29417=>5591,29560=>5592,29703=>5593,29874=>5594,30246=>5595,30561=>5596,31168=>5597,31319=>5598,31466=>5599,31929=>5600,32143=>5601,32172=>5602,32353=>5603,32670=>5604,33065=>5605,33585=>5606,33936=>5607,34010=>5608,34282=>5609,34966=>5610,35504=>5611,35728=>5612,36664=>5613,36930=>5614,36995=>5615,37228=>5616,37526=>5617,37561=>5618,38539=>5619,38567=>5620,38568=>5621,38614=>5622,38656=>5623,38920=>5624,12216=>5625,39318=>5625,39635=>5626,39706=>5627,21460=>5628,22654=>5629,22809=>5630,23408=>5631,23487=>5632,28113=>5633,28506=>5634,29087=>5635,29729=>5636,29881=>5637,32901=>5638,33789=>5639,24033=>5640,24455=>5641,24490=>5642,24642=>5643,26092=>5644,26642=>5645,26991=>5646,27219=>5647,27529=>5648,27957=>5649,28147=>5650,29667=>5651,30462=>5652,30636=>5653,31565=>5654,32020=>5655,33059=>5656,33308=>5657,33600=>5658,34036=>5659,34147=>5660,35426=>5661,35524=>5662,37255=>5663,37662=>5664,38918=>5665,39348=>5666,25100=>5667,34899=>5668,36848=>5669,37477=>5670,23815=>5671,23847=>5672,23913=>5673,29791=>5674,33181=>5675,34664=>5676,28629=>5677,25342=>5678,63859=>5678,32722=>5679,35126=>5680,35186=>5681,19998=>5682,20056=>5683,20711=>5684,21213=>5685,21319=>5686,25215=>5687,26119=>5688,32361=>5689,34821=>5690,38494=>5691,20365=>5692,21273=>5693,22070=>5694,22987=>5695,23204=>5696,12075=>5697,23608=>5697,23630=>5698,23629=>5699,24066=>5700,24337=>5701,24643=>5702,26045=>5703,26159=>5704,26178=>5705,26558=>5706,26612=>5707,29468=>5708,12142=>5709,30690=>5709,12144=>5710,31034=>5710,32709=>5711,33940=>5712,33997=>5713,35222=>5714,35430=>5715,35433=>5716,35553=>5717,12183=>5718,35925=>5718,35962=>5719,22516=>5720,23508=>5721,24335=>5722,24687=>5723,25325=>5724,26893=>5725,27542=>5726,28252=>5727,29060=>5728,31698=>5729,34645=>5730,35672=>5731,63996=>5731,36606=>5732,12215=>5733,39135=>5733,39166=>5734,20280=>5735,20353=>5736,20449=>5737,21627=>5738,23072=>5739,23480=>5740,24892=>5741,26032=>5742,26216=>5743,29180=>5744,30003=>5745,31070=>5746,32051=>5747,33102=>5748,12162=>5749,33251=>5749,33688=>5750,34218=>5751,34254=>5752,34563=>5753,35338=>5754,12189=>5755,36523=>5755,12191=>5756,36763=>5756,36805=>5757,22833=>5758,23460=>5759,23526=>5760,24713=>5761,23529=>5762,23563=>5763,12092=>5764,24515=>5764,27777=>5765,28145=>5766,28683=>5767,29978=>5768,33455=>5769,35574=>5770,20160=>5771,63997=>5771,12055=>5772,21313=>5772,38617=>5773,12114=>5774,27663=>5774,20126=>5775,20420=>5776,20818=>5777,21854=>5778,23077=>5779,23784=>5780,25105=>5781,12123=>5782,29273=>5782,33469=>5783,33706=>5784,34558=>5785,34905=>5786,35357=>5787,38463=>5788,38597=>5789,39187=>5790,40201=>5791,40285=>5792,22538=>5793,23731=>5794,23997=>5795,24132=>5796,24801=>5797,63929=>5797,24853=>5798,25569=>5799,27138=>5800,63764=>5800,63836=>5800,63935=>5800,28197=>5801,37122=>5802,37716=>5803,38990=>5804,39952=>5805,40823=>5806,23433=>5807,23736=>5808,25353=>5809,26191=>5810,26696=>5811,30524=>5812,38593=>5813,38797=>5814,38996=>5815,39839=>5816,26017=>5817,35585=>5818,36555=>5819,38332=>5820,21813=>5821,23721=>5822,24022=>5823,24245=>5824,26263=>5825,30284=>5826,33780=>5827,38343=>5828,22739=>5829,25276=>5830,29390=>5831,40232=>5832,20208=>5833,22830=>5834,24591=>5835,26171=>5836,27523=>5837,31207=>5838,40230=>5839,21395=>5840,21696=>5841,22467=>5842,23830=>5843,24859=>5844,26326=>5845,28079=>5846,30861=>5847,33406=>5848,38552=>5849,38724=>5850,21380=>5851,25212=>5852,25494=>5853,28082=>5854,32266=>5855,33099=>5856,38989=>5857,27387=>5858,32588=>5859,40367=>5860,40474=>5861,20063=>5862,20539=>5863,20918=>5864,22812=>5865,24825=>5866,25590=>5867,26928=>5868,29242=>5869,32822=>5870,37326=>5871,24369=>5872,32004=>5873,33509=>5874,63860=>5874,33903=>5875,33979=>5876,34277=>5877,36493=>5878,20335=>5879,22756=>5880,23363=>5881,24665=>5882,25562=>5883,25880=>5884,25965=>5885,26264=>5886,26954=>5887,27171=>5888,27915=>5889,28673=>5890,29036=>5891,30162=>5892,30221=>5893,31155=>5894,31344=>5895,12154=>5896,32650=>5896,35140=>5897,35731=>5898,37312=>5899,38525=>5900,39178=>5901,22276=>5902,24481=>5903,26044=>5904,28417=>5905,30208=>5906,31142=>5907,35486=>5908,39341=>5909,12226=>5910,39770=>5910,40812=>5911,20740=>5912,25014=>5913,25233=>5914,27277=>5915,33222=>5916,20547=>5917,22576=>5918,24422=>5919,28937=>5920,12180=>5921,35328=>5921,35578=>5922,23420=>5923,34326=>5924,20474=>5925,20796=>5926,22196=>5927,22852=>5928,25513=>5929,28153=>5930,23978=>5931,26989=>5932,20870=>5933,20104=>5934,20313=>5935,22914=>5936,27487=>5937,27741=>5938,29877=>5939,30998=>5940,33287=>5941,33349=>5942,33593=>5943,36671=>5944,36701=>5945,39192=>5946,20134=>5947,22495=>5948,24441=>5949,26131=>5950,63968=>5950,30123=>5951,32377=>5952,35695=>5953,36870=>5954,39515=>5955,22181=>5956,22567=>5957,23032=>5958,23071=>5959,23476=>5960,24310=>5961,25424=>5962,25403=>5963,26941=>5964,27783=>5965,27839=>5966,28046=>5967,28051=>5968,28149=>5969,28436=>5970,28895=>5971,28982=>5972,29017=>5973,29123=>5974,29141=>5975,30799=>5976,30831=>5977,31605=>5978,32227=>5979,32303=>5980,34893=>5981,36575=>5982,37467=>5983,40182=>5984,24709=>5985,28037=>5986,29105=>5987,38321=>5988,21421=>5989,26579=>5990,28814=>5991,28976=>5992,29744=>5993,33398=>5994,33490=>5995,38331=>5996,39653=>5997,40573=>5998,26308=>5999,29121=>6000,33865=>6001,63854=>6001,22603=>6002,23992=>6003,24433=>6004,26144=>6005,26254=>6006,27001=>6007,27054=>6008,27704=>6009,27891=>6010,28214=>6011,28481=>6012,28634=>6013,28699=>6014,28719=>6015,29008=>6016,29151=>6017,29552=>6018,29787=>6019,29908=>6020,30408=>6021,31310=>6022,32403=>6023,33521=>6024,35424=>6025,36814=>6026,37704=>6027,38681=>6028,20034=>6029,20522=>6030,21000=>6031,21473=>6032,26355=>6033,27757=>6034,28618=>6035,29450=>6036,30591=>6037,31330=>6038,33454=>6039,34269=>6040,34306=>6041,35028=>6042,35427=>6043,35709=>6044,35947=>6045,37555=>6046,38675=>6047,38928=>6048,20116=>6049,20237=>6050,20425=>6051,20658=>6052,21320=>6053,21566=>6054,21555=>6055,21978=>6056,22626=>6057,22714=>6058,22887=>6059,23067=>6060,23524=>6061,24735=>6062,25034=>6063,25942=>6064,26111=>6065,26212=>6066,26791=>6067,27738=>6068,28595=>6069,28879=>6070,29100=>6071,29522=>6072,31613=>6073,34568=>6074,35492=>6075,39986=>6076,40711=>6077,23627=>6078,27779=>6079,29508=>6080,12127=>6081,29577=>6081,37434=>6082,28331=>6083,29797=>6084,30239=>6085,31337=>6086,32277=>6087,34314=>6088,20800=>6089,22725=>6090,25793=>6091,29934=>6092,29973=>6093,30320=>6094,32705=>6095,37013=>6096,38605=>6097,39252=>6098,28198=>6099,12129=>6100,29926=>6100,31401=>6101,31402=>6102,33253=>6103,34521=>6104,34680=>6105,35355=>6106,23113=>6107,23436=>6108,23451=>6109,26785=>6110,26880=>6111,28003=>6112,29609=>6113,29715=>6114,29740=>6115,30871=>6116,32233=>6117,32747=>6118,33048=>6119,33109=>6120,33694=>6121,35916=>6122,38446=>6123,63942=>6123,38929=>6124,12104=>6125,26352=>6125,24448=>6126,26106=>6127,26505=>6128,27754=>6129,29579=>6130,20525=>6131,23043=>6132,27498=>6133,30702=>6134,22806=>6135,23916=>6136,24013=>6137,29477=>6138,30031=>6139,20709=>6140,20985=>6141,22575=>6142,22829=>6143,22934=>6144,23002=>6145,23525=>6146,23970=>6147,25303=>6148,25622=>6149,25747=>6150,25854=>6151,26332=>6152,27208=>6153,29183=>6154,29796=>6155,31368=>6156,31407=>6157,32327=>6158,32350=>6159,32768=>6160,33136=>6161,34799=>6162,35201=>6163,35616=>6164,36953=>6165,36992=>6166,39250=>6167,24958=>6168,27442=>6169,28020=>6170,32287=>6171,35109=>6172,36785=>6173,20433=>6174,20653=>6175,20887=>6176,21191=>6177,22471=>6178,22665=>6179,23481=>6180,24248=>6181,24898=>6182,27029=>6183,28044=>6184,28263=>6185,28342=>6186,29076=>6187,29794=>6188,12132=>6189,29992=>6189,29996=>6190,32883=>6191,33592=>6192,33993=>6193,36362=>6194,37780=>6195,37854=>6196,20110=>6197,20305=>6198,20598=>6199,20778=>6200,12060=>6201,21448=>6201,21451=>6202,21491=>6203,23431=>6204,23507=>6205,23588=>6206,24858=>6207,24962=>6208,26100=>6209,12124=>6210,29275=>6210,29591=>6211,29760=>6212,30402=>6213,31056=>6214,31121=>6215,31161=>6216,32006=>6217,12155=>6218,32701=>6218,33419=>6219,34261=>6220,34398=>6221,36802=>6222,36935=>6223,37109=>6224,37354=>6225,38533=>6226,12204=>6227,38632=>6227,38633=>6228,21206=>6229,24423=>6230,26093=>6231,26161=>6232,26671=>6233,29020=>6234,31286=>6235,37057=>6236,38922=>6237,20113=>6238,27218=>6239,27550=>6240,28560=>6241,29065=>6242,32792=>6243,33464=>6244,34131=>6245,36939=>6246,38549=>6247,38642=>6248,38907=>6249,34074=>6250,39729=>6251,20112=>6252,29066=>6253,38596=>6254,20803=>6255,21407=>6256,21729=>6257,22291=>6258,22290=>6259,22435=>6260,23195=>6261,23236=>6262,23491=>6263,24616=>6264,24895=>6265,25588=>6266,27781=>6267,27961=>6268,28274=>6269,28304=>6270,29232=>6271,29503=>6272,29783=>6273,33489=>6274,34945=>6275,36677=>6276,36960=>6277,38498=>6278,39000=>6279,40219=>6280,12105=>6281,26376=>6281,36234=>6282,37470=>6283,20301=>6284,20553=>6285,20702=>6286,21361=>6287,22285=>6288,22996=>6289,23041=>6290,23561=>6291,24944=>6292,26256=>6293,28205=>6294,29234=>6295,29771=>6296,32239=>6297,32963=>6298,33806=>6299,33894=>6300,34111=>6301,34655=>6302,34907=>6303,35096=>6304,35586=>6305,36949=>6306,12209=>6307,38859=>6307,39759=>6308,20083=>6309,20369=>6310,20754=>6311,20842=>6312,21807=>6313,21929=>6314,23418=>6315,23461=>6316,24188=>6317,24189=>6318,24254=>6319,24736=>6320,24799=>6321,24840=>6322,24841=>6323,25540=>6324,25912=>6325,26377=>6326,26580=>6327,26586=>6328,26977=>6329,26978=>6330,27833=>6331,27943=>6332,28216=>6333,28641=>6334,29494=>6335,29495=>6336,29788=>6337,30001=>6338,30290=>6339,32173=>6340,33278=>6341,33848=>6342,35029=>6343,35480=>6344,35547=>6345,35565=>6346,36400=>6347,36418=>6348,36938=>6349,36926=>6350,36986=>6351,12195=>6352,37193=>6352,37321=>6353,37742=>6354,22537=>6355,27603=>6356,12161=>6357,32905=>6357,32946=>6358,20801=>6359,22891=>6360,23609=>6361,28516=>6362,29607=>6363,32996=>6364,36103=>6365,37399=>6366,38287=>6367,12160=>6368,32895=>6368,25102=>6369,28700=>6370,32104=>6371,34701=>6372,22432=>6373,24681=>6374,24903=>6375,27575=>6376,35518=>6377,37504=>6378,38577=>6379,12036=>6380,20057=>6380,21535=>6381,28139=>6382,34093=>6383,38512=>6384,12211=>6385,38899=>6385,39150=>6386,25558=>6387,27875=>6388,12194=>6389,37009=>6389,20957=>6390,25033=>6391,33210=>6392,40441=>6393,20381=>6394,20506=>6395,20736=>6396,23452=>6397,24847=>6398,25087=>6399,25836=>6400,26885=>6401,27589=>6402,30097=>6403,30691=>6404,32681=>6405,33380=>6406,34191=>6407,34811=>6408,12176=>6409,34915=>6409,35516=>6410,35696=>6411,37291=>6412,12038=>6413,20108=>6413,20197=>6414,20234=>6415,22839=>6416,23016=>6417,24050=>6418,24347=>6419,24411=>6420,24609=>6421,29246=>6422,29669=>6423,30064=>6424,63842=>6424,30157=>6425,31227=>6426,12157=>6427,32780=>6427,12159=>6428,32819=>6428,32900=>6429,33505=>6430,33617=>6431,36029=>6432,36019=>6433,36999=>6434,39156=>6435,39180=>6436,28727=>6437,30410=>6438,32714=>6439,32716=>6440,32764=>6441,35610=>6442,12040=>6443,20154=>6443,20161=>6444,20995=>6445,21360=>6446,21693=>6447,63902=>6447,22240=>6448,23035=>6449,23493=>6450,24341=>6451,24525=>6452,28270=>6453,32106=>6454,33589=>6455,34451=>6456,35469=>6457,38765=>6458,38775=>6459,12032=>6460,19968=>6460,20314=>6461,20350=>6462,22777=>6463,12103=>6464,26085=>6464,28322=>6465,36920=>6466,37808=>6467,39353=>6468,20219=>6469,22764=>6470,22922=>6471,23001=>6472,24641=>6473,31252=>6474,33615=>6475,36035=>6476,12042=>6477,20837=>6477,21316=>6478,20173=>6479,21097=>6480,23381=>6481,33471=>6482,20180=>6483,21050=>6484,63999=>6484,21672=>6485,22985=>6486,23039=>6487,12070=>6488,23376=>6488,23383=>6489,23388=>6490,24675=>6491,24904=>6492,28363=>6493,28825=>6494,63995=>6494,29038=>6495,29574=>6496,29943=>6497,30133=>6498,30913=>6499,32043=>6500,32773=>6501,12163=>6502,33258=>6502,33576=>6503,34071=>6504,34249=>6505,35566=>6506,36039=>6507,38604=>6508,20316=>6509,21242=>6510,22204=>6511,26027=>6512,26152=>6513,28796=>6514,28856=>6515,29237=>6516,32189=>6517,33421=>6518,37196=>6519,38592=>6520,40306=>6521,23409=>6522,26855=>6523,27544=>6524,28538=>6525,30430=>6526,23697=>6527,26283=>6528,28507=>6529,31668=>6530,31786=>6531,34870=>6532,38620=>6533,19976=>6534,20183=>6535,21280=>6536,22580=>6537,22715=>6538,22767=>6539,22892=>6540,23559=>6541,24115=>6542,24196=>6543,24373=>6544,25484=>6545,26290=>6546,26454=>6547,27167=>6548,27299=>6549,27404=>6550,28479=>6551,29254=>6552,29520=>6553,29835=>6554,31456=>6555,31911=>6556,33144=>6557,33247=>6558,33255=>6559,33674=>6560,33900=>6561,34083=>6562,34196=>6563,34255=>6564,35037=>6565,36115=>6566,37292=>6567,12199=>6568,38263=>6568,38556=>6569,20877=>6570,21705=>6571,22312=>6572,23472=>6573,25165=>6574,26448=>6575,26685=>6576,26771=>6577,28221=>6578,28371=>6579,28797=>6580,32289=>6581,35009=>6582,36001=>6583,36617=>6584,40779=>6585,40782=>6586,29229=>6587,31631=>6588,35533=>6589,37658=>6590,20295=>6591,20302=>6592,20786=>6593,21632=>6594,22992=>6595,24213=>6596,25269=>6597,26485=>6598,26990=>6599,27159=>6600,27822=>6601,28186=>6602,29401=>6603,29482=>6604,30141=>6605,31672=>6606,32053=>6607,33511=>6608,33785=>6609,33879=>6610,34295=>6611,35419=>6612,36015=>6613,36487=>6614,36889=>6615,37048=>6616,38606=>6617,40799=>6618,21219=>6619,21514=>6620,23265=>6621,23490=>6622,25688=>6623,25973=>6624,28404=>6625,29380=>6626,30340=>6627,31309=>6628,31515=>6629,31821=>6630,32318=>6631,32735=>6632,33659=>6633,35627=>6634,36042=>6635,12186=>6636,36196=>6636,36321=>6637,36447=>6638,36842=>6639,36857=>6640,36969=>6641,37841=>6642,20291=>6643,20346=>6644,20659=>6645,20840=>6646,20856=>6647,21069=>6648,21098=>6649,22625=>6650,22652=>6651,22880=>6652,23560=>6653,23637=>6654,24283=>6655,24731=>6656,25136=>6657,26643=>6658,27583=>6659,27656=>6660,28593=>6661,29006=>6662,29728=>6663,12133=>6664,30000=>6664,30008=>6665,30033=>6666,30322=>6667,31564=>6668,31627=>6669,31661=>6670,31686=>6671,32399=>6672,35438=>6673,36670=>6674,36681=>6675,37439=>6676,37523=>6677,37666=>6678,37931=>6679,38651=>6680,39002=>6681,39019=>6682,39198=>6683,20999=>6684,64000=>6684,25130=>6685,25240=>6686,27993=>6687,30308=>6688,31434=>6689,31680=>6690,32118=>6691,21344=>6692,23742=>6693,24215=>6694,28472=>6695,28857=>6696,31896=>6697,38673=>6698,39822=>6699,40670=>6700,25509=>6701,25722=>6702,34678=>6703,19969=>6704,20117=>6705,20141=>6706,20572=>6707,20597=>6708,21576=>6709,22979=>6710,23450=>6711,24128=>6712,24237=>6713,24311=>6714,24449=>6715,24773=>6716,25402=>6717,25919=>6718,25972=>6719,26060=>6720,26230=>6721,26232=>6722,26622=>6723,26984=>6724,27273=>6725,27491=>6726,27712=>6727,28096=>6728,28136=>6729,28191=>6730,28254=>6731,28702=>6732,28833=>6733,29582=>6734,29693=>6735,30010=>6736,30555=>6737,30855=>6738,31118=>6739,31243=>6740,31357=>6741,31934=>6742,32142=>6743,33351=>6744,35330=>6745,35562=>6746,35998=>6747,37165=>6748,37194=>6749,37336=>6750,37478=>6751,37580=>6752,37664=>6753,38662=>6754,38742=>6755,38748=>6756,38914=>6757,12237=>6758,40718=>6758,21046=>6759,21137=>6760,21884=>6761,22564=>6762,24093=>6763,24351=>6764,24716=>6765,25552=>6766,26799=>6767,28639=>6768,31085=>6769,31532=>6770,33229=>6771,34234=>6772,35069=>6773,35576=>6774,36420=>6775,37261=>6776,38500=>6777,38555=>6778,38717=>6779,38988=>6780,12241=>6781,40778=>6781,20430=>6782,20806=>6783,20939=>6784,21161=>6785,22066=>6786,24340=>6787,24427=>6788,25514=>6789,25805=>6790,26089=>6791,26177=>6792,26362=>6793,26361=>6794,26397=>6795,26781=>6796,26839=>6797,27133=>6798,28437=>6799,28526=>6800,29031=>6801,29157=>6802,12118=>6803,29226=>6803,29866=>6804,30522=>6805,31062=>6806,31066=>6807,31199=>6808,31264=>6809,31381=>6810,31895=>6811,31967=>6812,32068=>6813,32368=>6814,32903=>6815,34299=>6816,34468=>6817,35412=>6818,35519=>6819,36249=>6820,36481=>6821,36896=>6822,36973=>6823,37347=>6824,38459=>6825,38613=>6826,12227=>6827,40165=>6827,26063=>6828,31751=>6829,12188=>6830,36275=>6830,37827=>6831,23384=>6832,23562=>6833,21330=>6834,25305=>6835,29469=>6836,20519=>6837,23447=>6838,24478=>6839,24752=>6840,24939=>6841,26837=>6842,28121=>6843,29742=>6844,31278=>6845,32066=>6846,32156=>6847,32305=>6848,33131=>6849,36394=>6850,36405=>6851,37758=>6852,37912=>6853,20304=>6854,22352=>6855,24038=>6856,24231=>6857,25387=>6858,32618=>6859,20027=>6860,20303=>6861,20367=>6862,20570=>6863,23005=>6864,32964=>6865,21610=>6866,21608=>6867,22014=>6868,22863=>6869,23449=>6870,24030=>6871,24282=>6872,26205=>6873,26417=>6874,26609=>6875,26666=>6876,27880=>6877,27954=>6878,28234=>6879,28557=>6880,28855=>6881,29664=>6882,30087=>6883,31820=>6884,32002=>6885,32044=>6886,32162=>6887,12168=>6888,33311=>6888,34523=>6889,35387=>6890,35461=>6891,12187=>6892,36208=>6892,36490=>6893,36659=>6894,36913=>6895,37198=>6896,37202=>6897,37956=>6898,39376=>6899,12149=>6900,31481=>6900,31909=>6901,20426=>6902,20737=>6903,20934=>6904,22472=>6905,23535=>6906,23803=>6907,26201=>6908,27197=>6909,27994=>6910,28310=>6911,28652=>6912,28940=>6913,30063=>6914,31459=>6915,34850=>6916,36897=>6917,36981=>6918,38603=>6919,39423=>6920,33537=>6921,20013=>6922,20210=>6923,34886=>6924,37325=>6925,21373=>6926,27355=>6927,26987=>6928,27713=>6929,33914=>6930,22686=>6931,24974=>6932,26366=>6933,25327=>6934,28893=>6935,29969=>6936,30151=>6937,32338=>6938,33976=>6939,35657=>6940,36104=>6941,20043=>6942,21482=>6943,21675=>6944,22320=>6945,22336=>6946,24535=>6947,25345=>6948,25351=>6949,25711=>6950,12096=>6951,25903=>6951,26088=>6952,26234=>6953,26525=>6954,26547=>6955,12108=>6956,27490=>6956,27744=>6957,27802=>6958,28460=>6959,30693=>6960,30757=>6961,31049=>6962,31063=>6963,32025=>6964,32930=>6965,33026=>6966,12164=>6967,33267=>6967,33437=>6968,33463=>6969,34584=>6970,35468=>6971,36100=>6972,36286=>6973,36978=>6974,30452=>6975,31257=>6976,31287=>6977,32340=>6978,32887=>6979,21767=>6980,21972=>6981,22645=>6982,25391=>6983,25634=>6984,26185=>6985,26187=>6986,26733=>6987,27035=>6988,27524=>6989,27941=>6990,28337=>6991,29645=>6992,29800=>6993,29857=>6994,30043=>6995,30137=>6996,30433=>6997,30494=>6998,30603=>6999,31206=>7000,32265=>7001,32285=>7002,33275=>7003,34095=>7004,34967=>7005,35386=>7006,36049=>7007,36587=>7008,12192=>7009,36784=>7009,63857=>7009,36914=>7010,37805=>7011,38499=>7012,38515=>7013,38663=>7014,20356=>7015,21489=>7016,23018=>7017,23241=>7018,24089=>7019,26702=>7020,29894=>7021,30142=>7022,31209=>7023,31378=>7024,33187=>7025,34541=>7026,36074=>7027,36300=>7028,36845=>7029,26015=>7030,26389=>7031,22519=>7032,28503=>7033,32221=>7034,36655=>7035,37878=>7036,38598=>7037,24501=>7038,25074=>7039,28548=>7040,19988=>7041,20376=>7042,20511=>7043,21449=>7044,21983=>7045,23919=>7046,24046=>7047,27425=>7048,27492=>7049,30923=>7050,31642=>7051,36425=>7052,12190=>7053,36554=>7053,63746=>7053,36974=>7054,25417=>7055,25662=>7056,30528=>7057,31364=>7058,37679=>7059,38015=>7060,40810=>7061,25776=>7062,28591=>7063,29158=>7064,29864=>7065,29914=>7066,31428=>7067,31762=>7068,32386=>7069,31922=>7070,32408=>7071,35738=>7072,36106=>7073,38013=>7074,39184=>7075,39244=>7076,21049=>7077,23519=>7078,25830=>7079,26413=>7080,32046=>7081,20717=>7082,21443=>7083,63851=>7083,22649=>7084,24920=>7085,24921=>7086,25082=>7087,26028=>7088,31449=>7089,35730=>7090,35734=>7091,20489=>7092,20513=>7093,21109=>7094,21809=>7095,23100=>7096,24288=>7097,24432=>7098,24884=>7099,25950=>7100,26124=>7101,26166=>7102,26274=>7103,27085=>7104,28356=>7105,28466=>7106,29462=>7107,30241=>7108,31379=>7109,33081=>7110,33369=>7111,33750=>7112,33980=>7113,20661=>7114,22512=>7115,23488=>7116,23528=>7117,24425=>7118,25505=>7119,30758=>7120,32181=>7121,33756=>7122,34081=>7123,37319=>7124,37365=>7125,20874=>7126,26613=>7127,31574=>7128,36012=>7129,20932=>7130,22971=>7131,24765=>7132,34389=>7133,20508=>7134,21076=>7135,23610=>7136,24957=>7137,25114=>7138,25299=>7139,64002=>7139,25842=>7140,26021=>7141,28364=>7142,30240=>7143,33034=>7144,36448=>7145,38495=>7146,38587=>7147,20191=>7148,21315=>7149,21912=>7150,22825=>7151,24029=>7152,25797=>7153,27849=>7154,28154=>7155,29588=>7156,31359=>7157,12167=>7158,33307=>7158,34214=>7159,36068=>7160,36368=>7161,36983=>7162,37351=>7163,38369=>7164,38433=>7165,38854=>7166,20984=>7167,21746=>7168,21894=>7169,24505=>7170,25764=>7171,28552=>7172,32180=>7173,36639=>7174,36685=>7175,37941=>7176,20681=>7177,23574=>7178,27838=>7179,28155=>7180,29979=>7181,30651=>7182,31805=>7183,31844=>7184,35449=>7185,35522=>7186,22558=>7187,22974=>7188,24086=>7189,25463=>7190,29266=>7191,30090=>7192,30571=>7193,35548=>7194,36028=>7195,36626=>7196,24307=>7197,26228=>7198,28152=>7199,32893=>7200,33729=>7201,35531=>7202,12205=>7203,38737=>7203,39894=>7204,21059=>7205,26367=>7206,28053=>7207,28399=>7208,32224=>7209,35558=>7210,36910=>7211,36958=>7212,39636=>7213,21021=>7214,21119=>7215,21736=>7216,24980=>7217,25220=>7218,25307=>7219,26786=>7220,26898=>7221,26970=>7222,27189=>7223,28818=>7224,28966=>7225,30813=>7226,30977=>7227,30990=>7228,31186=>7229,31245=>7230,32918=>7231,12171=>7232,33400=>7232,33493=>7233,33609=>7234,34121=>7235,35970=>7236,36229=>7237,37218=>7238,37259=>7239,37294=>7240,20419=>7241,22225=>7242,29165=>7243,30679=>7244,34560=>7245,35320=>7246,12072=>7247,23544=>7247,24534=>7248,26449=>7249,37032=>7250,21474=>7251,22618=>7252,23541=>7253,24740=>7254,24961=>7255,25696=>7256,32317=>7257,32880=>7258,34085=>7259,37507=>7260,25774=>7261,20652=>7262,23828=>7263,26368=>7264,22684=>7265,25277=>7266,25512=>7267,26894=>7268,27000=>7269,27166=>7270,28267=>7271,30394=>7272,31179=>7273,33467=>7274,33833=>7275,35535=>7276,36264=>7277,36861=>7278,37138=>7279,37195=>7280,37276=>7281,37648=>7282,37656=>7283,37786=>7284,38619=>7285,39478=>7286,39949=>7287,19985=>7288,30044=>7289,31069=>7290,31482=>7291,31569=>7292,31689=>7293,32302=>7294,33988=>7295,36441=>7296,36468=>7297,36600=>7298,36880=>7299,26149=>7300,26943=>7301,29763=>7302,20986=>7303,26414=>7304,40668=>7305,20805=>7306,24544=>7307,27798=>7308,34802=>7309,34909=>7310,34935=>7311,24756=>7312,33205=>7313,33795=>7314,36101=>7315,21462=>7316,21561=>7317,22068=>7318,23094=>7319,23601=>7320,28810=>7321,32736=>7322,32858=>7323,33030=>7324,33261=>7325,36259=>7326,37257=>7327,39519=>7328,40434=>7329,20596=>7330,20164=>7331,21408=>7332,24827=>7333,28204=>7334,23652=>7335,20360=>7336,20516=>7337,21988=>7338,23769=>7339,24159=>7340,24677=>7341,26772=>7342,27835=>7343,28100=>7344,29118=>7345,30164=>7346,30196=>7347,30305=>7348,31258=>7349,31305=>7350,32199=>7351,32251=>7352,32622=>7353,33268=>7354,34473=>7355,36636=>7356,38601=>7357,39347=>7358,12242=>7359,40786=>7359,21063=>7360,21189=>7361,39149=>7362,35242=>7363,19971=>7364,26578=>7365,28422=>7366,20405=>7367,23522=>7368,26517=>7369,27784=>7370,63858=>7370,28024=>7371,29723=>7372,30759=>7373,37341=>7374,37756=>7375,34756=>7376,31204=>7377,31281=>7378,24555=>7379,20182=>7380,21668=>7381,21822=>7382,22702=>7383,22949=>7384,24816=>7385,25171=>7386,25302=>7387,26422=>7388,26965=>7389,33333=>7390,38464=>7391,39345=>7392,39389=>7393,20524=>7394,21331=>7395,21828=>7396,22396=>7397,25176=>7398,25826=>7399,26219=>7400,26589=>7401,28609=>7402,28655=>7403,29730=>7404,29752=>7405,35351=>7406,37944=>7407,21585=>7408,22022=>7409,22374=>7410,24392=>7411,24986=>7412,27470=>7413,28760=>7414,28845=>7415,32187=>7416,35477=>7417,22890=>7418,33067=>7419,25506=>7420,30472=>7421,32829=>7422,36010=>7423,22612=>7424,25645=>7425,27067=>7426,23445=>7427,24081=>7428,28271=>7429,34153=>7430,20812=>7431,21488=>7432,22826=>7433,24608=>7434,24907=>7435,27526=>7436,27760=>7437,27888=>7438,31518=>7439,32974=>7440,33492=>7441,36294=>7442,37040=>7443,39089=>7444,25799=>7445,28580=>7446,25745=>7447,25860=>7448,20814=>7449,21520=>7450,12063=>7451,22303=>7451,35342=>7452,24927=>7453,26742=>7454,30171=>7455,31570=>7456,32113=>7457,36890=>7458,22534=>7459,27084=>7460,33151=>7461,35114=>7462,36864=>7463,38969=>7464,20600=>7465,22871=>7466,22956=>7467,25237=>7468,36879=>7469,39722=>7470,24925=>7471,29305=>7472,38358=>7473,22369=>7474,23110=>7475,24052=>7476,25226=>7477,25773=>7478,25850=>7479,26487=>7480,27874=>7481,27966=>7482,29228=>7483,29750=>7484,30772=>7485,32631=>7486,33453=>7487,36315=>7488,38935=>7489,21028=>7490,22338=>7491,26495=>7492,29256=>7493,29923=>7494,36009=>7495,36774=>7496,37393=>7497,38442=>7498,12043=>7499,20843=>7499,21485=>7500,25420=>7501,20329=>7502,21764=>7503,24726=>7504,25943=>7505,27803=>7506,28031=>7507,29260=>7508,29437=>7509,31255=>7510,35207=>7511,12185=>7512,35997=>7512,24429=>7513,28558=>7514,28921=>7515,33192=>7516,24846=>7517,20415=>7518,63845=>7518,20559=>7519,25153=>7520,12122=>7521,29255=>7521,31687=>7522,32232=>7523,32745=>7524,36941=>7525,38829=>7526,39449=>7527,36022=>7528,22378=>7529,24179=>7530,26544=>7531,33805=>7532,35413=>7533,21536=>7534,23318=>7535,24163=>7536,24290=>7537,24330=>7538,25987=>7539,32954=>7540,34109=>7541,38281=>7542,38491=>7543,20296=>7544,21253=>7545,21261=>7546,21263=>7547,21638=>7548,21754=>7549,22275=>7550,24067=>7551,24598=>7552,25243=>7553,25265=>7554,25429=>7555,27873=>7556,28006=>7557,30129=>7558,30770=>7559,32990=>7560,33071=>7561,33502=>7562,33889=>7563,33970=>7564,34957=>7565,35090=>7566,36875=>7567,37610=>7568,39165=>7569,39825=>7570,24133=>7571,26292=>7572,64006=>7572,26333=>7573,28689=>7574,29190=>7575,20469=>7576,21117=>7577,24426=>7578,24915=>7579,26451=>7580,27161=>7581,28418=>7582,29922=>7583,31080=>7584,34920=>7585,35961=>7586,39111=>7587,39108=>7588,39491=>7589,21697=>7590,31263=>7591,26963=>7592,35575=>7593,35914=>7594,12213=>7595,39080=>7595,39342=>7596,24444=>7597,25259=>7598,30130=>7599,12138=>7600,30382=>7600,34987=>7601,36991=>7602,38466=>7603,21305=>7604,24380=>7605,24517=>7606,27852=>7607,63848=>7607,29644=>7608,30050=>7609,12134=>7610,30091=>7610,31558=>7611,33534=>7612,39325=>7613,20047=>7614,36924=>7615,19979=>7616,20309=>7617,21414=>7618,22799=>7619,24264=>7620,26160=>7621,27827=>7622,29781=>7623,33655=>7624,34662=>7625,36032=>7626,36944=>7627,38686=>7628,39957=>7629,22737=>7630,23416=>7631,34384=>7632,35604=>7633,40372=>7634,23506=>7635,24680=>7636,24717=>7637,26097=>7638,27735=>7639,28450=>7640,28579=>7641,28698=>7642,32597=>7643,32752=>7644,38289=>7645,38290=>7646,38480=>7647,38867=>7648,21106=>7649,36676=>7650,20989=>7651,21547=>7652,21688=>7653,21859=>7654,21898=>7655,27323=>7656,28085=>7657,32216=>7658,33382=>7659,37532=>7660,38519=>7661,40569=>7662,21512=>7663,21704=>7664,30418=>7665,34532=>7666,38308=>7667,38356=>7668,38492=>7669,20130=>7670,20233=>7671,23022=>7672,23270=>7673,24055=>7674,24658=>7675,25239=>7676,26477=>7677,26689=>7678,27782=>7679,28207=>7680,32568=>7681,32923=>7682,33322=>7683,38917=>7684,20133=>7685,20565=>7686,21683=>7687,22419=>7688,22874=>7689,23401=>7690,23475=>7691,25032=>7692,26999=>7693,28023=>7694,28707=>7695,34809=>7696,35299=>7697,35442=>7698,35559=>7699,36994=>7700,39405=>7701,39608=>7702,21182=>7703,26680=>7704,20502=>7705,24184=>7706,26447=>7707,33607=>7708,12175=>7709,34892=>7709,64008=>7709,20139=>7710,21521=>7711,22190=>7712,29670=>7713,37141=>7714,38911=>7715,39177=>7716,39255=>7717,12217=>7718,39321=>7718,22099=>7719,22687=>7720,34395=>7721,35377=>7722,25010=>7723,27382=>7724,29563=>7725,36562=>7726,27463=>7727,38570=>7728,39511=>7729,22869=>7730,29184=>7731,36203=>7732,12208=>7733,38761=>7733,20436=>7734,23796=>7735,24358=>7736,25080=>7737,26203=>7738,27883=>7739,28843=>7740,12126=>7741,29572=>7741,29625=>7742,29694=>7743,30505=>7744,30541=>7745,32067=>7746,32098=>7747,32291=>7748,33335=>7749,34898=>7750,36066=>7751,37449=>7752,39023=>7753,23377=>7754,12147=>7755,31348=>7755,12174=>7756,34880=>7756,12212=>7757,38913=>7757,23244=>7758,20448=>7759,21332=>7760,22846=>7761,23805=>7762,25406=>7763,28025=>7764,29433=>7765,33029=>7766,33031=>7767,33698=>7768,37583=>7769,38960=>7770,20136=>7771,20804=>7772,21009=>7773,22411=>7774,24418=>7775,27842=>7776,28366=>7777,28677=>7778,28752=>7779,28847=>7780,29074=>7781,29673=>7782,29801=>7783,63918=>7783,33610=>7784,34722=>7785,34913=>7786,36872=>7787,37026=>7788,37795=>7789,39336=>7790,20846=>7791,24407=>7792,24800=>7793,24935=>7794,26291=>7795,34137=>7796,36426=>7797,37295=>7798,38795=>7799,20046=>7800,20114=>7801,21628=>7802,22741=>7803,22778=>7804,22909=>7805,23733=>7806,24359=>7807,12094=>7808,25142=>7808,25160=>7809,26122=>7810,26215=>7811,27627=>7812,28009=>7813,28111=>7814,28246=>7815,28408=>7816,28564=>7817,28640=>7818,28649=>7819,28765=>7820,29392=>7821,29733=>7822,29786=>7823,29920=>7824,30355=>7825,31068=>7826,31946=>7827,32286=>7828,32993=>7829,33446=>7830,33899=>7831,33983=>7832,34382=>7833,34399=>7834,34676=>7835,35703=>7836,35946=>7837,37804=>7838,38912=>7839,39013=>7840,24785=>7841,25110=>7842,37239=>7843,23130=>7844,26127=>7845,28151=>7846,28222=>7847,29759=>7848,39746=>7849,24573=>7850,24794=>7851,31503=>7852,21700=>7853,24344=>7854,27742=>7855,27859=>7856,27946=>7857,28888=>7858,32005=>7859,34425=>7860,35340=>7861,40251=>7862,21270=>7863,21644=>7864,23301=>7865,27194=>7866,12117=>7867,28779=>7867,30069=>7868,31117=>7869,12146=>7870,31166=>7870,33457=>7871,33775=>7872,35441=>7873,35649=>7874,36008=>7875,38772=>7876,25844=>7877,25899=>7878,30906=>7879,30907=>7880,31339=>7881,20024=>7882,21914=>7883,22864=>7884,23462=>7885,24187=>7886,24739=>7887,25563=>7888,27489=>7889,26213=>7890,26707=>7891,28185=>7892,29029=>7893,29872=>7894,32008=>7895,36996=>7896,39529=>7897,39973=>7898,27963=>7899,28369=>7900,63748=>7900,29502=>7901,35905=>7902,38346=>7903,20976=>7904,24140=>7905,24488=>7906,24653=>7907,24822=>7908,24880=>7909,24908=>7910,26179=>7911,26180=>7912,27045=>7913,27841=>7914,28255=>7915,28361=>7916,28514=>7917,29004=>7918,29852=>7919,30343=>7920,31681=>7921,31783=>7922,33618=>7923,34647=>7924,36945=>7925,38541=>7926,12232=>7927,40643=>7927,21295=>7928,22238=>7929,24315=>7930,24458=>7931,24674=>7932,24724=>7933,25079=>7934,26214=>7935,26371=>7936,27292=>7937,28142=>7938,28590=>7939,28784=>7940,29546=>7941,32362=>7942,33214=>7943,33588=>7944,34516=>7945,35496=>7946,36036=>7947,21123=>7948,29554=>7949,23446=>7950,27243=>7951,37892=>7952,21742=>7953,22150=>7954,23389=>7955,25928=>7956,25989=>7957,26313=>7958,26783=>7959,28045=>7960,28102=>7961,12120=>7962,29243=>7962,32948=>7963,37237=>7964,39501=>7965,20399=>7966,20505=>7967,21402=>7968,21518=>7969,21564=>7970,21897=>7971,21957=>7972,24127=>7973,24460=>7974,26429=>7975,29030=>7976,29661=>7977,36869=>7978,21211=>7979,21235=>7980,22628=>7981,22734=>7982,28932=>7983,29071=>7984,29179=>7985,34224=>7986,35347=>7987,26248=>7988,63941=>7988,34216=>7989,21927=>7990,26244=>7991,29002=>7992,33841=>7993,21321=>7994,21913=>7995,27585=>7996,24409=>7997,24509=>7998,25582=>7999,26249=>8000,28999=>8001,35569=>8002,36637=>8003,40638=>8004,20241=>8005,25658=>8006,28875=>8007,30054=>8008,34407=>8009,24676=>8010,35662=>8011,40440=>8012,20807=>8013,20982=>8014,21256=>8015,27958=>8016,33016=>8017,12234=>8018,40657=>8018,26133=>8019,27427=>8020,28824=>8021,30165=>8022,21507=>8023,23673=>8024,32007=>8025,35350=>8026,12107=>8027,27424=>8027,27453=>8028,27462=>8029,21560=>8030,24688=>8031,27965=>8032,32725=>8033,33288=>8034,20694=>8035,20958=>8036,21916=>8037,22123=>8038,22221=>8039,23020=>8040,23305=>8041,24076=>8042,24985=>8043,24984=>8044,25137=>8045,26206=>8046,26342=>8047,29081=>8048,29113=>8049,29114=>8050,29351=>8051,31143=>8052,31232=>8053,32690=>8054,35440=>8055,12310=>8219,12311=>8220,12312=>8221,12313=>8222,8223=>8237,8219=>8238,8314=>8239,8315=>8240,8316=>8248,8317=>8250,8318=>8251,700=>8275,8942=>8320,8759=>8321,10122=>8342,10123=>8343,10124=>8344,10125=>8345,10126=>8346,10127=>8347,10128=>8348,10129=>8349,10130=>8350,10131=>8351,9398=>8388,9399=>8389,9400=>8390,9401=>8391,9402=>8392,9403=>8393,9404=>8394,9405=>8395,9406=>8396,9407=>8397,9408=>8398,9409=>8399,9410=>8400,9411=>8401,9412=>8402,9413=>8403,9414=>8404,9415=>8405,9416=>8406,9417=>8407,9418=>8408,9419=>8409,9420=>8410,9421=>8411,9422=>8412,9423=>8413,8826=>8475,8827=>8476,8910=>8477,8911=>8478,8832=>8479,8833=>8480,8816=>8481,8817=>8482,8818=>8483,8819=>8484,8842=>8486,8843=>8488,8822=>8489,8823=>8490,8825=>8491,8922=>8492,8923=>8493,8773=>8499,8771=>8500,8776=>8501,8868=>8503,8244=>8582,9839=>8594,8258=>8599,10045=>8604,8226=>8607,8249=>8612,8250=>8613,10010=>8630,10006=>8631,9711=>8633,10070=>8637,9676=>8639,9775=>8664,12320=>8671,10102=>8673,10103=>8674,10104=>8675,10105=>8676,10106=>8677,10107=>8678,10108=>8679,10109=>8680,10110=>8681,10111=>8682,12306=>8700,12342=>8701,8710=>8715,8735=>8717,8741=>8719,8742=>8720,8787=>8722,8785=>8723,8806=>8724,8807=>8725,8723=>8726,8853=>8727,8854=>8728,8855=>8729,8980=>8731,8802=>8734,9649=>8736,8738=>8738,8784=>8739,8867=>8742,8814=>8745,8815=>8746,8837=>8747,8836=>8748,8713=>8749,8716=>8750,8891=>8751,8892=>8752,8794=>8753,8966=>8754,12958=>8761,8252=>8763,9702=>8775,9663=>8779,9653=>8780,9657=>8781,9667=>8782,9674=>8787,12849=>8788,12857=>8789,13259=>8790,9327=>8791,9328=>8792,9329=>8793,9330=>8794,9331=>8795,8656=>8814,8655=>8815,8653=>8816,8657=>8854,8659=>8855,8626=>8864,8625=>8865,8628=>8867,8624=>8868,8627=>8869,8636=>8884,8640=>8885,8644=>8896,8645=>8897,9347=>9042,9348=>9043,9349=>9044,9350=>9045,9351=>9046,12948=>9080,12965=>9096,8672=>9190,8674=>9191,8673=>9192,8675=>9193,8678=>9198,8680=>9199,8679=>9200,8681=>9201,9757=>9222,9759=>9223,12944=>9300,12938=>9301,12939=>9302,12940=>9303,12941=>9304,12942=>9305,12943=>9306,12318=>9322,12319=>9323,8246=>9324,8245=>9326,12540=>9330,44034=>9333,44035=>9334,44037=>9335,44038=>9336,44043=>9337,44044=>9338,44045=>9339,44046=>9340,44047=>9341,44056=>9342,44062=>9343,44063=>9344,44065=>9345,44066=>9346,44067=>9347,44069=>9348,44070=>9349,44071=>9350,44072=>9351,44073=>9352,44074=>9353,44075=>9354,44078=>9355,44082=>9356,44083=>9357,44084=>9358,44085=>9359,44086=>9360,44087=>9361,44090=>9362,44091=>9363,44093=>9364,44094=>9365,44095=>9366,44097=>9367,44098=>9368,44099=>9369,44100=>9370,44101=>9371,44102=>9372,44103=>9373,44104=>9374,44105=>9375,44106=>9376,44108=>9377,44110=>9378,44111=>9379,44112=>9380,44113=>9381,44114=>9382,44115=>9383,44117=>9384,44118=>9385,44119=>9386,44121=>9387,44122=>9388,44123=>9389,44125=>9390,44126=>9391,44127=>9392,44128=>9393,44129=>9394,44130=>9395,44131=>9396,44132=>9397,44133=>9398,44134=>9399,44135=>9400,44136=>9401,44137=>9402,44138=>9403,44139=>9404,44140=>9405,44141=>9406,44142=>9407,44143=>9408,44146=>9409,44147=>9410,44149=>9411,44150=>9412,44153=>9413,44155=>9414,44156=>9415,44157=>9416,44158=>9417,44159=>9418,44162=>9419,44167=>9420,44168=>9421,44173=>9422,44174=>9423,44175=>9424,44177=>9425,44178=>9426,44179=>9427,44181=>9428,44182=>9429,44183=>9430,44184=>9431,44185=>9432,44186=>9433,44187=>9434,44190=>9435,44194=>9436,44195=>9437,44196=>9438,44197=>9439,44198=>9440,44199=>9441,44203=>9442,44205=>9443,44206=>9444,44209=>9445,44210=>9446,44211=>9447,44212=>9448,44213=>9449,44214=>9450,44215=>9451,44218=>9452,44222=>9453,44223=>9454,44224=>9455,44226=>9456,44227=>9457,44229=>9458,44230=>9459,44231=>9460,44233=>9461,44234=>9462,44235=>9463,44237=>9464,44238=>9465,44239=>9466,44240=>9467,44241=>9468,44242=>9469,44243=>9470,44244=>9471,44246=>9472,44248=>9473,44249=>9474,44250=>9475,44251=>9476,44252=>9477,44253=>9478,44254=>9479,44255=>9480,44258=>9481,44259=>9482,44261=>9483,44262=>9484,44265=>9485,44267=>9486,44269=>9487,44270=>9488,44274=>9489,44276=>9490,44279=>9491,44280=>9492,44281=>9493,44282=>9494,44283=>9495,44286=>9496,44287=>9497,44289=>9498,44290=>9499,44291=>9500,44293=>9501,44295=>9502,44296=>9503,44297=>9504,44298=>9505,44299=>9506,44302=>9507,44304=>9508,44306=>9509,44307=>9510,44308=>9511,44309=>9512,44310=>9513,44311=>9514,44313=>9515,44314=>9516,44315=>9517,44317=>9518,44318=>9519,44319=>9520,44321=>9521,44322=>9522,44323=>9523,44324=>9524,44325=>9525,44326=>9526,44327=>9527,44328=>9528,44330=>9529,44331=>9530,44334=>9531,44335=>9532,44336=>9533,44337=>9534,44338=>9535,44339=>9536,44342=>9537,44343=>9538,44345=>9539,44346=>9540,44347=>9541,44349=>9542,44350=>9543,44351=>9544,44352=>9545,44353=>9546,44354=>9547,44355=>9548,44358=>9549,44360=>9550,44362=>9551,44363=>9552,44364=>9553,44365=>9554,44366=>9555,44367=>9556,44369=>9557,44370=>9558,44371=>9559,44373=>9560,44374=>9561,44375=>9562,44377=>9563,44378=>9564,44379=>9565,44380=>9566,44381=>9567,44382=>9568,44383=>9569,44384=>9570,44386=>9571,44388=>9572,44389=>9573,44390=>9574,44391=>9575,44392=>9576,44393=>9577,44394=>9578,44395=>9579,44398=>9580,44399=>9581,44401=>9582,44402=>9583,44407=>9584,44408=>9585,44409=>9586,44410=>9587,44414=>9588,44416=>9589,44419=>9590,44420=>9591,44421=>9592,44422=>9593,44423=>9594,44426=>9595,44427=>9596,44429=>9597,44430=>9598,44431=>9599,44433=>9600,44434=>9601,44435=>9602,44436=>9603,44437=>9604,44438=>9605,44439=>9606,44440=>9607,44441=>9608,44442=>9609,44443=>9610,44446=>9611,44447=>9612,44448=>9613,44449=>9614,44450=>9615,44451=>9616,44453=>9617,44454=>9618,44455=>9619,44456=>9620,44457=>9621,44458=>9622,44459=>9623,44460=>9624,44461=>9625,44462=>9626,44463=>9627,44464=>9628,44465=>9629,44466=>9630,44467=>9631,44468=>9632,44469=>9633,44470=>9634,44472=>9635,44473=>9636,44474=>9637,44475=>9638,44476=>9639,44477=>9640,44478=>9641,44479=>9642,44482=>9643,44483=>9644,44485=>9645,44486=>9646,44487=>9647,44489=>9648,44490=>9649,44491=>9650,44492=>9651,44493=>9652,44494=>9653,44495=>9654,44498=>9655,44500=>9656,44501=>9657,44502=>9658,44503=>9659,44504=>9660,44505=>9661,44506=>9662,44507=>9663,44509=>9664,44510=>9665,44511=>9666,44513=>9667,44514=>9668,44515=>9669,44517=>9670,44518=>9671,44519=>9672,44520=>9673,44521=>9674,44522=>9675,44523=>9676,44524=>9677,44525=>9678,44526=>9679,44527=>9680,44528=>9681,44529=>9682,44530=>9683,44531=>9684,44532=>9685,44533=>9686,44534=>9687,44535=>9688,44538=>9689,44539=>9690,44541=>9691,44542=>9692,44546=>9693,44547=>9694,44548=>9695,44549=>9696,44550=>9697,44551=>9698,44554=>9699,44556=>9700,44558=>9701,44559=>9702,44560=>9703,44561=>9704,44562=>9705,44563=>9706,44565=>9707,44566=>9708,44567=>9709,44568=>9710,44569=>9711,44570=>9712,44571=>9713,44572=>9714,44573=>9715,44574=>9716,44575=>9717,44576=>9718,44577=>9719,44578=>9720,44579=>9721,44580=>9722,44581=>9723,44582=>9724,44583=>9725,44584=>9726,44585=>9727,44586=>9728,44587=>9729,44588=>9730,44589=>9731,44590=>9732,44591=>9733,44594=>9734,44595=>9735,44597=>9736,44598=>9737,44601=>9738,44603=>9739,44604=>9740,44605=>9741,44606=>9742,44607=>9743,44610=>9744,44612=>9745,44615=>9746,44616=>9747,44617=>9748,44619=>9749,44623=>9750,44625=>9751,44626=>9752,44627=>9753,44629=>9754,44631=>9755,44632=>9756,44633=>9757,44634=>9758,44635=>9759,44638=>9760,44642=>9761,44643=>9762,44644=>9763,44646=>9764,44647=>9765,44650=>9766,44651=>9767,44653=>9768,44654=>9769,44655=>9770,44657=>9771,44658=>9772,44659=>9773,44660=>9774,44661=>9775,44662=>9776,44663=>9777,44666=>9778,44670=>9779,44671=>9780,44672=>9781,44673=>9782,44674=>9783,44675=>9784,44678=>9785,44679=>9786,44680=>9787,44681=>9788,44682=>9789,44683=>9790,44685=>9791,44686=>9792,44687=>9793,44688=>9794,44689=>9795,44690=>9796,44691=>9797,44692=>9798,44693=>9799,44694=>9800,44695=>9801,44696=>9802,44697=>9803,44698=>9804,44699=>9805,44700=>9806,44701=>9807,44702=>9808,44703=>9809,44704=>9810,44705=>9811,44706=>9812,44707=>9813,44708=>9814,44709=>9815,44710=>9816,44711=>9817,44712=>9818,44713=>9819,44714=>9820,44715=>9821,44716=>9822,44717=>9823,44718=>9824,44719=>9825,44720=>9826,44721=>9827,44722=>9828,44723=>9829,44724=>9830,44725=>9831,44726=>9832,44727=>9833,44728=>9834,44729=>9835,44730=>9836,44731=>9837,44735=>9838,44737=>9839,44738=>9840,44739=>9841,44741=>9842,44742=>9843,44743=>9844,44744=>9845,44745=>9846,44746=>9847,44747=>9848,44750=>9849,44754=>9850,44755=>9851,44756=>9852,44757=>9853,44758=>9854,44759=>9855,44762=>9856,44763=>9857,44765=>9858,44766=>9859,44767=>9860,44768=>9861,44769=>9862,44770=>9863,44771=>9864,44772=>9865,44773=>9866,44774=>9867,44775=>9868,44777=>9869,44778=>9870,44780=>9871,44782=>9872,44783=>9873,44784=>9874,44785=>9875,44786=>9876,44787=>9877,44789=>9878,44790=>9879,44791=>9880,44793=>9881,44794=>9882,44795=>9883,44797=>9884,44798=>9885,44799=>9886,44800=>9887,44801=>9888,44802=>9889,44803=>9890,44804=>9891,44805=>9892,44806=>9893,44809=>9894,44810=>9895,44811=>9896,44812=>9897,44814=>9898,44815=>9899,44817=>9900,44818=>9901,44819=>9902,44820=>9903,44821=>9904,44822=>9905,44823=>9906,44824=>9907,44825=>9908,44826=>9909,44827=>9910,44828=>9911,44829=>9912,44830=>9913,44831=>9914,44832=>9915,44833=>9916,44834=>9917,44835=>9918,44836=>9919,44837=>9920,44838=>9921,44839=>9922,44840=>9923,44841=>9924,44842=>9925,44843=>9926,44846=>9927,44847=>9928,44849=>9929,44851=>9930,44853=>9931,44854=>9932,44855=>9933,44856=>9934,44857=>9935,44858=>9936,44859=>9937,44862=>9938,44864=>9939,44868=>9940,44869=>9941,44870=>9942,44871=>9943,44874=>9944,44875=>9945,44876=>9946,44877=>9947,44878=>9948,44879=>9949,44881=>9950,44882=>9951,44883=>9952,44884=>9953,44885=>9954,44886=>9955,44887=>9956,44888=>9957,44889=>9958,44890=>9959,44891=>9960,44894=>9961,44895=>9962,44896=>9963,44897=>9964,44898=>9965,44899=>9966,44902=>9967,44903=>9968,44904=>9969,44905=>9970,44906=>9971,44907=>9972,44908=>9973,44909=>9974,44910=>9975,44911=>9976,44912=>9977,44913=>9978,44914=>9979,44915=>9980,44916=>9981,44917=>9982,44918=>9983,44919=>9984,44920=>9985,44922=>9986,44923=>9987,44924=>9988,44925=>9989,44926=>9990,44927=>9991,44929=>9992,44930=>9993,44931=>9994,44933=>9995,44934=>9996,44935=>9997,44937=>9998,44938=>9999,44939=>10000,44940=>10001,44941=>10002,44942=>10003,44943=>10004,44946=>10005,44947=>10006,44948=>10007,44950=>10008,44951=>10009,44952=>10010,44953=>10011,44954=>10012,44955=>10013,44957=>10014,44958=>10015,44959=>10016,44960=>10017,44961=>10018,44962=>10019,44963=>10020,44964=>10021,44965=>10022,44966=>10023,44967=>10024,44968=>10025,44969=>10026,44970=>10027,44971=>10028,44972=>10029,44973=>10030,44974=>10031,44975=>10032,44976=>10033,44977=>10034,44978=>10035,44979=>10036,44980=>10037,44981=>10038,44982=>10039,44983=>10040,44986=>10041,44987=>10042,44989=>10043,44990=>10044,44991=>10045,44993=>10046,44994=>10047,44995=>10048,44996=>10049,44997=>10050,44998=>10051,45002=>10052,45004=>10053,45007=>10054,45008=>10055,45009=>10056,45010=>10057,45011=>10058,45013=>10059,45014=>10060,45015=>10061,45016=>10062,45017=>10063,45018=>10064,45019=>10065,45021=>10066,45022=>10067,45023=>10068,45024=>10069,45025=>10070,45026=>10071,45027=>10072,45028=>10073,45029=>10074,45030=>10075,45031=>10076,45034=>10077,45035=>10078,45036=>10079,45037=>10080,45038=>10081,45039=>10082,45042=>10083,45043=>10084,45045=>10085,45046=>10086,45047=>10087,45049=>10088,45050=>10089,45051=>10090,45052=>10091,45053=>10092,45054=>10093,45055=>10094,45058=>10095,45059=>10096,45061=>10097,45062=>10098,45063=>10099,45064=>10100,45065=>10101,45066=>10102,45067=>10103,45069=>10104,45070=>10105,45071=>10106,45073=>10107,45074=>10108,45075=>10109,45077=>10110,45078=>10111,45079=>10112,45080=>10113,45081=>10114,45082=>10115,45083=>10116,45086=>10117,45087=>10118,45088=>10119,45089=>10120,45090=>10121,45091=>10122,45092=>10123,45093=>10124,45094=>10125,45095=>10126,45097=>10127,45098=>10128,45099=>10129,45100=>10130,45101=>10131,45102=>10132,45103=>10133,45104=>10134,45105=>10135,45106=>10136,45107=>10137,45108=>10138,45109=>10139,45110=>10140,45111=>10141,45112=>10142,45113=>10143,45114=>10144,45115=>10145,45116=>10146,45117=>10147,45118=>10148,45119=>10149,45120=>10150,45121=>10151,45122=>10152,45123=>10153,45126=>10154,45127=>10155,45129=>10156,45131=>10157,45133=>10158,45135=>10159,45136=>10160,45137=>10161,45138=>10162,45142=>10163,45144=>10164,45146=>10165,45147=>10166,45148=>10167,45150=>10168,45151=>10169,45152=>10170,45153=>10171,45154=>10172,45155=>10173,45156=>10174,45157=>10175,45158=>10176,45159=>10177,45160=>10178,45161=>10179,45162=>10180,45163=>10181,45164=>10182,45165=>10183,45166=>10184,45167=>10185,45168=>10186,45169=>10187,45170=>10188,45171=>10189,45172=>10190,45173=>10191,45174=>10192,45175=>10193,45176=>10194,45177=>10195,45178=>10196,45179=>10197,45182=>10198,45183=>10199,45185=>10200,45186=>10201,45187=>10202,45189=>10203,45190=>10204,45191=>10205,45192=>10206,45193=>10207,45194=>10208,45195=>10209,45198=>10210,45200=>10211,45202=>10212,45203=>10213,45204=>10214,45205=>10215,45206=>10216,45207=>10217,45211=>10218,45213=>10219,45214=>10220,45219=>10221,45220=>10222,45221=>10223,45222=>10224,45223=>10225,45226=>10226,45232=>10227,45234=>10228,45238=>10229,45239=>10230,45241=>10231,45242=>10232,45243=>10233,45245=>10234,45246=>10235,45247=>10236,45248=>10237,45249=>10238,45250=>10239,45251=>10240,45254=>10241,45258=>10242,45259=>10243,45260=>10244,45261=>10245,45262=>10246,45263=>10247,45266=>10248,45267=>10249,45269=>10250,45270=>10251,45271=>10252,45273=>10253,45274=>10254,45275=>10255,45276=>10256,45277=>10257,45278=>10258,45279=>10259,45281=>10260,45282=>10261,45283=>10262,45284=>10263,45286=>10264,45287=>10265,45288=>10266,45289=>10267,45290=>10268,45291=>10269,45292=>10270,45293=>10271,45294=>10272,45295=>10273,45296=>10274,45297=>10275,45298=>10276,45299=>10277,45300=>10278,45301=>10279,45302=>10280,45303=>10281,45304=>10282,45305=>10283,45306=>10284,45307=>10285,45308=>10286,45309=>10287,45310=>10288,45311=>10289,45312=>10290,45313=>10291,45314=>10292,45315=>10293,45316=>10294,45317=>10295,45318=>10296,45319=>10297,45322=>10298,45325=>10299,45326=>10300,45327=>10301,45329=>10302,45332=>10303,45333=>10304,45334=>10305,45335=>10306,45338=>10307,45342=>10308,45343=>10309,45344=>10310,45345=>10311,45346=>10312,45350=>10313,45351=>10314,45353=>10315,45354=>10316,45355=>10317,45357=>10318,45358=>10319,45359=>10320,45360=>10321,45361=>10322,45362=>10323,45363=>10324,45366=>10325,45370=>10326,45371=>10327,45372=>10328,45373=>10329,45374=>10330,45375=>10331,45378=>10332,45379=>10333,45381=>10334,45382=>10335,45383=>10336,45385=>10337,45386=>10338,45387=>10339,45388=>10340,45389=>10341,45390=>10342,45391=>10343,45394=>10344,45395=>10345,45398=>10346,45399=>10347,45401=>10348,45402=>10349,45403=>10350,45405=>10351,45406=>10352,45407=>10353,45409=>10354,45410=>10355,45411=>10356,45412=>10357,45413=>10358,45414=>10359,45415=>10360,45416=>10361,45417=>10362,45418=>10363,45419=>10364,45420=>10365,45421=>10366,45422=>10367,45423=>10368,45424=>10369,45425=>10370,45426=>10371,45427=>10372,45428=>10373,45429=>10374,45430=>10375,45431=>10376,45434=>10377,45435=>10378,45437=>10379,45438=>10380,45439=>10381,45441=>10382,45443=>10383,45444=>10384,45445=>10385,45446=>10386,45447=>10387,45450=>10388,45452=>10389,45454=>10390,45455=>10391,45456=>10392,45457=>10393,45461=>10394,45462=>10395,45463=>10396,45465=>10397,45466=>10398,45467=>10399,45469=>10400,45470=>10401,45471=>10402,45472=>10403,45473=>10404,45474=>10405,45475=>10406,45476=>10407,45477=>10408,45478=>10409,45479=>10410,45481=>10411,45482=>10412,45483=>10413,45484=>10414,45485=>10415,45486=>10416,45487=>10417,45488=>10418,45489=>10419,45490=>10420,45491=>10421,45492=>10422,45493=>10423,45494=>10424,45495=>10425,45496=>10426,45497=>10427,45498=>10428,45499=>10429,45500=>10430,45501=>10431,45502=>10432,45503=>10433,45504=>10434,45505=>10435,45506=>10436,45507=>10437,45508=>10438,45509=>10439,45510=>10440,45511=>10441,45512=>10442,45513=>10443,45514=>10444,45515=>10445,45517=>10446,45518=>10447,45519=>10448,45521=>10449,45522=>10450,45523=>10451,45525=>10452,45526=>10453,45527=>10454,45528=>10455,45529=>10456,45530=>10457,45531=>10458,45534=>10459,45536=>10460,45537=>10461,45538=>10462,45539=>10463,45540=>10464,45541=>10465,45542=>10466,45543=>10467,45546=>10468,45547=>10469,45549=>10470,45550=>10471,45551=>10472,45553=>10473,45554=>10474,45555=>10475,45556=>10476,45557=>10477,45558=>10478,45559=>10479,45560=>10480,45562=>10481,45564=>10482,45566=>10483,45567=>10484,45568=>10485,45569=>10486,45570=>10487,45571=>10488,45574=>10489,45575=>10490,45577=>10491,45578=>10492,45581=>10493,45582=>10494,45583=>10495,45584=>10496,45585=>10497,45586=>10498,45587=>10499,45590=>10500,45592=>10501,45594=>10502,45595=>10503,45596=>10504,45597=>10505,45598=>10506,45599=>10507,45601=>10508,45602=>10509,45603=>10510,45604=>10511,45605=>10512,45606=>10513,45607=>10514,45608=>10515,45609=>10516,45610=>10517,45611=>10518,45612=>10519,45613=>10520,45614=>10521,45615=>10522,45616=>10523,45617=>10524,45618=>10525,45619=>10526,45621=>10527,45622=>10528,45623=>10529,45624=>10530,45625=>10531,45626=>10532,45627=>10533,45629=>10534,45630=>10535,45631=>10536,45632=>10537,45633=>10538,45634=>10539,45635=>10540,45636=>10541,45637=>10542,45638=>10543,45639=>10544,45640=>10545,45641=>10546,45642=>10547,45643=>10548,45644=>10549,45645=>10550,45646=>10551,45647=>10552,45648=>10553,45649=>10554,45650=>10555,45651=>10556,45652=>10557,45653=>10558,45654=>10559,45655=>10560,45657=>10561,45658=>10562,45659=>10563,45661=>10564,45662=>10565,45663=>10566,45665=>10567,45666=>10568,45667=>10569,45668=>10570,45669=>10571,45670=>10572,45671=>10573,45674=>10574,45675=>10575,45676=>10576,45677=>10577,45678=>10578,45679=>10579,45680=>10580,45681=>10581,45682=>10582,45683=>10583,45686=>10584,45687=>10585,45688=>10586,45689=>10587,45690=>10588,45691=>10589,45693=>10590,45694=>10591,45695=>10592,45696=>10593,45697=>10594,45698=>10595,45699=>10596,45702=>10597,45703=>10598,45704=>10599,45706=>10600,45707=>10601,45708=>10602,45709=>10603,45710=>10604,45711=>10605,45714=>10606,45715=>10607,45717=>10608,45718=>10609,45719=>10610,45723=>10611,45724=>10612,45725=>10613,45726=>10614,45727=>10615,45730=>10616,45732=>10617,45735=>10618,45736=>10619,45737=>10620,45739=>10621,45741=>10622,45742=>10623,45743=>10624,45745=>10625,45746=>10626,45747=>10627,45749=>10628,45750=>10629,45751=>10630,45752=>10631,45753=>10632,45754=>10633,45755=>10634,45756=>10635,45757=>10636,45758=>10637,45759=>10638,45760=>10639,45761=>10640,45762=>10641,45763=>10642,45764=>10643,45765=>10644,45766=>10645,45767=>10646,45770=>10647,45771=>10648,45773=>10649,45774=>10650,45775=>10651,45777=>10652,45779=>10653,45780=>10654,45781=>10655,45782=>10656,45783=>10657,45786=>10658,45788=>10659,45790=>10660,45791=>10661,45792=>10662,45793=>10663,45795=>10664,45799=>10665,45801=>10666,45802=>10667,45808=>10668,45809=>10669,45810=>10670,45814=>10671,45820=>10672,45821=>10673,45822=>10674,45826=>10675,45827=>10676,45829=>10677,45830=>10678,45831=>10679,45833=>10680,45834=>10681,45835=>10682,45836=>10683,45837=>10684,45838=>10685,45839=>10686,45842=>10687,45846=>10688,45847=>10689,45848=>10690,45849=>10691,45850=>10692,45851=>10693,45853=>10694,45854=>10695,45855=>10696,45856=>10697,45857=>10698,45858=>10699,45859=>10700,45860=>10701,45861=>10702,45862=>10703,45863=>10704,45864=>10705,45865=>10706,45866=>10707,45867=>10708,45868=>10709,45869=>10710,45870=>10711,45871=>10712,45872=>10713,45873=>10714,45874=>10715,45875=>10716,45876=>10717,45877=>10718,45878=>10719,45879=>10720,45880=>10721,45881=>10722,45882=>10723,45883=>10724,45884=>10725,45885=>10726,45886=>10727,45887=>10728,45888=>10729,45889=>10730,45890=>10731,45891=>10732,45892=>10733,45893=>10734,45894=>10735,45895=>10736,45896=>10737,45897=>10738,45898=>10739,45899=>10740,45900=>10741,45901=>10742,45902=>10743,45903=>10744,45904=>10745,45905=>10746,45906=>10747,45907=>10748,45911=>10749,45913=>10750,45914=>10751,45917=>10752,45920=>10753,45921=>10754,45922=>10755,45923=>10756,45926=>10757,45928=>10758,45930=>10759,45932=>10760,45933=>10761,45935=>10762,45938=>10763,45939=>10764,45941=>10765,45942=>10766,45943=>10767,45945=>10768,45946=>10769,45947=>10770,45948=>10771,45949=>10772,45950=>10773,45951=>10774,45954=>10775,45958=>10776,45959=>10777,45960=>10778,45961=>10779,45962=>10780,45963=>10781,45965=>10782,45966=>10783,45967=>10784,45969=>10785,45970=>10786,45971=>10787,45973=>10788,45974=>10789,45975=>10790,45976=>10791,45977=>10792,45978=>10793,45979=>10794,45980=>10795,45981=>10796,45982=>10797,45983=>10798,45986=>10799,45987=>10800,45988=>10801,45989=>10802,45990=>10803,45991=>10804,45993=>10805,45994=>10806,45995=>10807,45997=>10808,45998=>10809,45999=>10810,46000=>10811,46001=>10812,46002=>10813,46003=>10814,46004=>10815,46005=>10816,46006=>10817,46007=>10818,46008=>10819,46009=>10820,46010=>10821,46011=>10822,46012=>10823,46013=>10824,46014=>10825,46015=>10826,46016=>10827,46017=>10828,46018=>10829,46019=>10830,46022=>10831,46023=>10832,46025=>10833,46026=>10834,46029=>10835,46031=>10836,46033=>10837,46034=>10838,46035=>10839,46038=>10840,46040=>10841,46042=>10842,46044=>10843,46046=>10844,46047=>10845,46049=>10846,46050=>10847,46051=>10848,46053=>10849,46054=>10850,46055=>10851,46057=>10852,46058=>10853,46059=>10854,46060=>10855,46061=>10856,46062=>10857,46063=>10858,46064=>10859,46065=>10860,46066=>10861,46067=>10862,46068=>10863,46069=>10864,46070=>10865,46071=>10866,46072=>10867,46073=>10868,46074=>10869,46075=>10870,46077=>10871,46078=>10872,46079=>10873,46080=>10874,46081=>10875,46082=>10876,46083=>10877,46084=>10878,46085=>10879,46086=>10880,46087=>10881,46088=>10882,46089=>10883,46090=>10884,46091=>10885,46092=>10886,46093=>10887,46094=>10888,46095=>10889,46097=>10890,46098=>10891,46099=>10892,46100=>10893,46101=>10894,46102=>10895,46103=>10896,46105=>10897,46106=>10898,46107=>10899,46109=>10900,46110=>10901,46111=>10902,46113=>10903,46114=>10904,46115=>10905,46116=>10906,46117=>10907,46118=>10908,46119=>10909,46122=>10910,46124=>10911,46125=>10912,46126=>10913,46127=>10914,46128=>10915,46129=>10916,46130=>10917,46131=>10918,46133=>10919,46134=>10920,46135=>10921,46136=>10922,46137=>10923,46138=>10924,46139=>10925,46140=>10926,46141=>10927,46142=>10928,46143=>10929,46144=>10930,46145=>10931,46146=>10932,46147=>10933,46148=>10934,46149=>10935,46150=>10936,46151=>10937,46152=>10938,46153=>10939,46154=>10940,46155=>10941,46156=>10942,46157=>10943,46158=>10944,46159=>10945,46162=>10946,46163=>10947,46165=>10948,46166=>10949,46167=>10950,46169=>10951,46170=>10952,46171=>10953,46172=>10954,46173=>10955,46174=>10956,46175=>10957,46178=>10958,46180=>10959,46182=>10960,46183=>10961,46184=>10962,46185=>10963,46186=>10964,46187=>10965,46189=>10966,46190=>10967,46191=>10968,46192=>10969,46193=>10970,46194=>10971,46195=>10972,46196=>10973,46197=>10974,46198=>10975,46199=>10976,46200=>10977,46201=>10978,46202=>10979,46203=>10980,46204=>10981,46205=>10982,46206=>10983,46207=>10984,46209=>10985,46210=>10986,46211=>10987,46212=>10988,46213=>10989,46214=>10990,46215=>10991,46217=>10992,46218=>10993,46219=>10994,46220=>10995,46221=>10996,46222=>10997,46223=>10998,46224=>10999,46225=>11000,46226=>11001,46227=>11002,46228=>11003,46229=>11004,46230=>11005,46231=>11006,46232=>11007,46233=>11008,46234=>11009,46235=>11010,46236=>11011,46238=>11012,46239=>11013,46240=>11014,46241=>11015,46242=>11016,46243=>11017,46245=>11018,46246=>11019,46247=>11020,46249=>11021,46250=>11022,46251=>11023,46253=>11024,46254=>11025,46255=>11026,46256=>11027,46257=>11028,46258=>11029,46259=>11030,46260=>11031,46262=>11032,46264=>11033,46266=>11034,46267=>11035,46268=>11036,46269=>11037,46270=>11038,46271=>11039,46273=>11040,46274=>11041,46275=>11042,46277=>11043,46278=>11044,46279=>11045,46281=>11046,46282=>11047,46283=>11048,46284=>11049,46285=>11050,46286=>11051,46287=>11052,46289=>11053,46290=>11054,46291=>11055,46292=>11056,46294=>11057,46295=>11058,46296=>11059,46297=>11060,46298=>11061,46299=>11062,46302=>11063,46303=>11064,46305=>11065,46306=>11066,46309=>11067,46311=>11068,46312=>11069,46313=>11070,46314=>11071,46315=>11072,46318=>11073,46320=>11074,46322=>11075,46323=>11076,46324=>11077,46325=>11078,46326=>11079,46327=>11080,46329=>11081,46330=>11082,46331=>11083,46332=>11084,46333=>11085,46334=>11086,46335=>11087,46336=>11088,46337=>11089,46338=>11090,46339=>11091,46340=>11092,46341=>11093,46342=>11094,46343=>11095,46344=>11096,46345=>11097,46346=>11098,46347=>11099,46348=>11100,46349=>11101,46350=>11102,46351=>11103,46352=>11104,46353=>11105,46354=>11106,46355=>11107,46358=>11108,46359=>11109,46361=>11110,46362=>11111,46365=>11112,46366=>11113,46367=>11114,46368=>11115,46369=>11116,46370=>11117,46371=>11118,46374=>11119,46379=>11120,46380=>11121,46381=>11122,46382=>11123,46383=>11124,46386=>11125,46387=>11126,46389=>11127,46390=>11128,46391=>11129,46393=>11130,46394=>11131,46395=>11132,46396=>11133,46397=>11134,46398=>11135,46399=>11136,46402=>11137,46406=>11138,46407=>11139,46408=>11140,46409=>11141,46410=>11142,46414=>11143,46415=>11144,46417=>11145,46418=>11146,46419=>11147,46421=>11148,46422=>11149,46423=>11150,46424=>11151,46425=>11152,46426=>11153,46427=>11154,46430=>11155,46434=>11156,46435=>11157,46436=>11158,46437=>11159,46438=>11160,46439=>11161,46440=>11162,46441=>11163,46442=>11164,46443=>11165,46444=>11166,46445=>11167,46446=>11168,46447=>11169,46448=>11170,46449=>11171,46450=>11172,46451=>11173,46452=>11174,46453=>11175,46454=>11176,46455=>11177,46456=>11178,46457=>11179,46458=>11180,46459=>11181,46460=>11182,46461=>11183,46462=>11184,46463=>11185,46464=>11186,46465=>11187,46466=>11188,46467=>11189,46468=>11190,46469=>11191,46470=>11192,46471=>11193,46472=>11194,46473=>11195,46474=>11196,46475=>11197,46476=>11198,46477=>11199,46478=>11200,46479=>11201,46480=>11202,46481=>11203,46482=>11204,46483=>11205,46484=>11206,46485=>11207,46486=>11208,46487=>11209,46488=>11210,46489=>11211,46490=>11212,46491=>11213,46492=>11214,46493=>11215,46494=>11216,46495=>11217,46498=>11218,46499=>11219,46501=>11220,46502=>11221,46503=>11222,46505=>11223,46508=>11224,46509=>11225,46510=>11226,46511=>11227,46514=>11228,46518=>11229,46519=>11230,46520=>11231,46521=>11232,46522=>11233,46526=>11234,46527=>11235,46529=>11236,46530=>11237,46531=>11238,46533=>11239,46534=>11240,46535=>11241,46536=>11242,46537=>11243,46538=>11244,46539=>11245,46542=>11246,46546=>11247,46547=>11248,46548=>11249,46549=>11250,46550=>11251,46551=>11252,46553=>11253,46554=>11254,46555=>11255,46556=>11256,46557=>11257,46558=>11258,46559=>11259,46560=>11260,46561=>11261,46562=>11262,46563=>11263,46564=>11264,46565=>11265,46566=>11266,46567=>11267,46568=>11268,46569=>11269,46570=>11270,46571=>11271,46573=>11272,46574=>11273,46575=>11274,46576=>11275,46577=>11276,46578=>11277,46579=>11278,46580=>11279,46581=>11280,46582=>11281,46583=>11282,46584=>11283,46585=>11284,46586=>11285,46587=>11286,46588=>11287,46589=>11288,46590=>11289,46591=>11290,46592=>11291,46593=>11292,46594=>11293,46595=>11294,46596=>11295,46597=>11296,46598=>11297,46599=>11298,46600=>11299,46601=>11300,46602=>11301,46603=>11302,46604=>11303,46605=>11304,46606=>11305,46607=>11306,46610=>11307,46611=>11308,46613=>11309,46614=>11310,46615=>11311,46617=>11312,46618=>11313,46619=>11314,46620=>11315,46621=>11316,46622=>11317,46623=>11318,46624=>11319,46625=>11320,46626=>11321,46627=>11322,46628=>11323,46630=>11324,46631=>11325,46632=>11326,46633=>11327,46634=>11328,46635=>11329,46637=>11330,46638=>11331,46639=>11332,46640=>11333,46641=>11334,46642=>11335,46643=>11336,46645=>11337,46646=>11338,46647=>11339,46648=>11340,46649=>11341,46650=>11342,46651=>11343,46652=>11344,46653=>11345,46654=>11346,46655=>11347,46656=>11348,46657=>11349,46658=>11350,46659=>11351,46660=>11352,46661=>11353,46662=>11354,46663=>11355,46665=>11356,46666=>11357,46667=>11358,46668=>11359,46669=>11360,46670=>11361,46671=>11362,46672=>11363,46673=>11364,46674=>11365,46675=>11366,46676=>11367,46677=>11368,46678=>11369,46679=>11370,46680=>11371,46681=>11372,46682=>11373,46683=>11374,46684=>11375,46685=>11376,46686=>11377,46687=>11378,46688=>11379,46689=>11380,46690=>11381,46691=>11382,46693=>11383,46694=>11384,46695=>11385,46697=>11386,46698=>11387,46699=>11388,46700=>11389,46701=>11390,46702=>11391,46703=>11392,46704=>11393,46705=>11394,46706=>11395,46707=>11396,46708=>11397,46709=>11398,46710=>11399,46711=>11400,46712=>11401,46713=>11402,46714=>11403,46715=>11404,46716=>11405,46717=>11406,46718=>11407,46719=>11408,46720=>11409,46721=>11410,46722=>11411,46723=>11412,46724=>11413,46725=>11414,46726=>11415,46727=>11416,46728=>11417,46729=>11418,46730=>11419,46731=>11420,46732=>11421,46733=>11422,46734=>11423,46735=>11424,46736=>11425,46737=>11426,46738=>11427,46739=>11428,46740=>11429,46741=>11430,46742=>11431,46743=>11432,46744=>11433,46745=>11434,46746=>11435,46747=>11436,46750=>11437,46751=>11438,46753=>11439,46754=>11440,46755=>11441,46757=>11442,46758=>11443,46759=>11444,46760=>11445,46761=>11446,46762=>11447,46765=>11448,46766=>11449,46767=>11450,46768=>11451,46770=>11452,46771=>11453,46772=>11454,46773=>11455,46774=>11456,46775=>11457,46776=>11458,46777=>11459,46778=>11460,46779=>11461,46780=>11462,46781=>11463,46782=>11464,46783=>11465,46784=>11466,46785=>11467,46786=>11468,46787=>11469,46788=>11470,46789=>11471,46790=>11472,46791=>11473,46792=>11474,46793=>11475,46794=>11476,46795=>11477,46796=>11478,46797=>11479,46798=>11480,46799=>11481,46800=>11482,46801=>11483,46802=>11484,46803=>11485,46805=>11486,46806=>11487,46807=>11488,46808=>11489,46809=>11490,46810=>11491,46811=>11492,46812=>11493,46813=>11494,46814=>11495,46815=>11496,46816=>11497,46817=>11498,46818=>11499,46819=>11500,46820=>11501,46821=>11502,46822=>11503,46823=>11504,46824=>11505,46825=>11506,46826=>11507,46827=>11508,46828=>11509,46829=>11510,46830=>11511,46831=>11512,46833=>11513,46834=>11514,46835=>11515,46837=>11516,46838=>11517,46839=>11518,46841=>11519,46842=>11520,46843=>11521,46844=>11522,46845=>11523,46846=>11524,46847=>11525,46850=>11526,46851=>11527,46852=>11528,46854=>11529,46855=>11530,46856=>11531,46857=>11532,46858=>11533,46859=>11534,46860=>11535,46861=>11536,46862=>11537,46863=>11538,46864=>11539,46865=>11540,46866=>11541,46867=>11542,46868=>11543,46869=>11544,46870=>11545,46871=>11546,46872=>11547,46873=>11548,46874=>11549,46875=>11550,46876=>11551,46877=>11552,46878=>11553,46879=>11554,46880=>11555,46881=>11556,46882=>11557,46883=>11558,46884=>11559,46885=>11560,46886=>11561,46887=>11562,46890=>11563,46891=>11564,46893=>11565,46894=>11566,46897=>11567,46898=>11568,46899=>11569,46900=>11570,46901=>11571,46902=>11572,46903=>11573,46906=>11574,46908=>11575,46909=>11576,46910=>11577,46911=>11578,46912=>11579,46913=>11580,46914=>11581,46915=>11582,46917=>11583,46918=>11584,46919=>11585,46921=>11586,46922=>11587,46923=>11588,46925=>11589,46926=>11590,46927=>11591,46928=>11592,46929=>11593,46930=>11594,46931=>11595,46934=>11596,46935=>11597,46936=>11598,46937=>11599,46938=>11600,46939=>11601,46940=>11602,46941=>11603,46942=>11604,46943=>11605,46945=>11606,46946=>11607,46947=>11608,46949=>11609,46950=>11610,46951=>11611,46953=>11612,46954=>11613,46955=>11614,46956=>11615,46957=>11616,46958=>11617,46959=>11618,46962=>11619,46964=>11620,46966=>11621,46967=>11622,46968=>11623,46969=>11624,46970=>11625,46971=>11626,46974=>11627,46975=>11628,46977=>11629,46978=>11630,46979=>11631,46981=>11632,46982=>11633,46983=>11634,46984=>11635,46985=>11636,46986=>11637,46987=>11638,46990=>11639,46995=>11640,46996=>11641,46997=>11642,47002=>11643,47003=>11644,47005=>11645,47006=>11646,47007=>11647,47009=>11648,47010=>11649,47011=>11650,47012=>11651,47013=>11652,47014=>11653,47015=>11654,47018=>11655,47022=>11656,47023=>11657,47024=>11658,47025=>11659,47026=>11660,47027=>11661,47030=>11662,47031=>11663,47033=>11664,47034=>11665,47035=>11666,47036=>11667,47037=>11668,47038=>11669,47039=>11670,47040=>11671,47041=>11672,47042=>11673,47043=>11674,47044=>11675,47045=>11676,47046=>11677,47048=>11678,47050=>11679,47051=>11680,47052=>11681,47053=>11682,47054=>11683,47055=>11684,47056=>11685,47057=>11686,47058=>11687,47059=>11688,47060=>11689,47061=>11690,47062=>11691,47063=>11692,47064=>11693,47065=>11694,47066=>11695,47067=>11696,47068=>11697,47069=>11698,47070=>11699,47071=>11700,47072=>11701,47073=>11702,47074=>11703,47075=>11704,47076=>11705,47077=>11706,47078=>11707,47079=>11708,47080=>11709,47081=>11710,47082=>11711,47083=>11712,47086=>11713,47087=>11714,47089=>11715,47090=>11716,47091=>11717,47093=>11718,47094=>11719,47095=>11720,47096=>11721,47097=>11722,47098=>11723,47099=>11724,47102=>11725,47106=>11726,47107=>11727,47108=>11728,47109=>11729,47110=>11730,47114=>11731,47115=>11732,47117=>11733,47118=>11734,47119=>11735,47121=>11736,47122=>11737,47123=>11738,47124=>11739,47125=>11740,47126=>11741,47127=>11742,47130=>11743,47132=>11744,47134=>11745,47135=>11746,47136=>11747,47137=>11748,47138=>11749,47139=>11750,47142=>11751,47143=>11752,47145=>11753,47146=>11754,47147=>11755,47149=>11756,47150=>11757,47151=>11758,47152=>11759,47153=>11760,47154=>11761,47155=>11762,47158=>11763,47162=>11764,47163=>11765,47164=>11766,47165=>11767,47166=>11768,47167=>11769,47169=>11770,47170=>11771,47171=>11772,47173=>11773,47174=>11774,47175=>11775,47176=>11776,47177=>11777,47178=>11778,47179=>11779,47180=>11780,47181=>11781,47182=>11782,47183=>11783,47184=>11784,47186=>11785,47188=>11786,47189=>11787,47190=>11788,47191=>11789,47192=>11790,47193=>11791,47194=>11792,47195=>11793,47198=>11794,47199=>11795,47201=>11796,47202=>11797,47203=>11798,47205=>11799,47206=>11800,47207=>11801,47208=>11802,47209=>11803,47210=>11804,47211=>11805,47214=>11806,47216=>11807,47218=>11808,47219=>11809,47220=>11810,47221=>11811,47222=>11812,47223=>11813,47225=>11814,47226=>11815,47227=>11816,47229=>11817,47230=>11818,47231=>11819,47232=>11820,47233=>11821,47234=>11822,47235=>11823,47236=>11824,47237=>11825,47238=>11826,47239=>11827,47240=>11828,47241=>11829,47242=>11830,47243=>11831,47244=>11832,47246=>11833,47247=>11834,47248=>11835,47249=>11836,47250=>11837,47251=>11838,47252=>11839,47253=>11840,47254=>11841,47255=>11842,47256=>11843,47257=>11844,47258=>11845,47259=>11846,47260=>11847,47261=>11848,47262=>11849,47263=>11850,47264=>11851,47265=>11852,47266=>11853,47267=>11854,47268=>11855,47269=>11856,47270=>11857,47271=>11858,47273=>11859,47274=>11860,47275=>11861,47276=>11862,47277=>11863,47278=>11864,47279=>11865,47281=>11866,47282=>11867,47283=>11868,47285=>11869,47286=>11870,47287=>11871,47289=>11872,47290=>11873,47291=>11874,47292=>11875,47293=>11876,47294=>11877,47295=>11878,47298=>11879,47300=>11880,47302=>11881,47303=>11882,47304=>11883,47305=>11884,47306=>11885,47307=>11886,47309=>11887,47310=>11888,47311=>11889,47313=>11890,47314=>11891,47315=>11892,47317=>11893,47318=>11894,47319=>11895,47320=>11896,47321=>11897,47322=>11898,47323=>11899,47324=>11900,47326=>11901,47328=>11902,47330=>11903,47331=>11904,47332=>11905,47333=>11906,47334=>11907,47335=>11908,47338=>11909,47339=>11910,47341=>11911,47342=>11912,47343=>11913,47345=>11914,47346=>11915,47347=>11916,47348=>11917,47349=>11918,47350=>11919,47351=>11920,47354=>11921,47356=>11922,47358=>11923,47359=>11924,47360=>11925,47361=>11926,47362=>11927,47363=>11928,47365=>11929,47366=>11930,47367=>11931,47368=>11932,47369=>11933,47370=>11934,47371=>11935,47372=>11936,47373=>11937,47374=>11938,47375=>11939,47376=>11940,47377=>11941,47378=>11942,47379=>11943,47380=>11944,47381=>11945,47382=>11946,47383=>11947,47385=>11948,47386=>11949,47387=>11950,47388=>11951,47389=>11952,47390=>11953,47391=>11954,47393=>11955,47394=>11956,47395=>11957,47396=>11958,47397=>11959,47398=>11960,47399=>11961,47400=>11962,47401=>11963,47402=>11964,47403=>11965,47404=>11966,47405=>11967,47406=>11968,47407=>11969,47408=>11970,47409=>11971,47410=>11972,47411=>11973,47412=>11974,47413=>11975,47414=>11976,47415=>11977,47416=>11978,47417=>11979,47418=>11980,47419=>11981,47422=>11982,47423=>11983,47425=>11984,47426=>11985,47427=>11986,47429=>11987,47430=>11988,47431=>11989,47432=>11990,47433=>11991,47434=>11992,47435=>11993,47437=>11994,47438=>11995,47440=>11996,47442=>11997,47443=>11998,47444=>11999,47445=>12000,47446=>12001,47447=>12002,47450=>12003,47451=>12004,47453=>12005,47454=>12006,47455=>12007,47457=>12008,47458=>12009,47459=>12010,47460=>12011,47461=>12012,47462=>12013,47463=>12014,47466=>12015,47468=>12016,47470=>12017,47471=>12018,47472=>12019,47473=>12020,47474=>12021,47475=>12022,47478=>12023,47479=>12024,47481=>12025,47482=>12026,47483=>12027,47485=>12028,47486=>12029,47487=>12030,47488=>12031,47489=>12032,47490=>12033,47491=>12034,47494=>12035,47496=>12036,47499=>12037,47500=>12038,47503=>12039,47504=>12040,47505=>12041,47506=>12042,47507=>12043,47508=>12044,47509=>12045,47510=>12046,47511=>12047,47512=>12048,47513=>12049,47514=>12050,47515=>12051,47516=>12052,47517=>12053,47518=>12054,47519=>12055,47520=>12056,47521=>12057,47522=>12058,47523=>12059,47524=>12060,47525=>12061,47526=>12062,47527=>12063,47528=>12064,47529=>12065,47530=>12066,47531=>12067,47534=>12068,47535=>12069,47537=>12070,47538=>12071,47539=>12072,47541=>12073,47542=>12074,47543=>12075,47544=>12076,47545=>12077,47546=>12078,47547=>12079,47550=>12080,47552=>12081,47554=>12082,47555=>12083,47556=>12084,47557=>12085,47558=>12086,47559=>12087,47562=>12088,47563=>12089,47565=>12090,47571=>12091,47572=>12092,47573=>12093,47574=>12094,47575=>12095,47578=>12096,47580=>12097,47583=>12098,47584=>12099,47586=>12100,47590=>12101,47591=>12102,47593=>12103,47594=>12104,47595=>12105,47597=>12106,47598=>12107,47599=>12108,47600=>12109,47601=>12110,47602=>12111,47603=>12112,47606=>12113,47611=>12114,47612=>12115,47613=>12116,47614=>12117,47615=>12118,47618=>12119,47619=>12120,47620=>12121,47621=>12122,47622=>12123,47623=>12124,47625=>12125,47626=>12126,47627=>12127,47628=>12128,47629=>12129,47630=>12130,47631=>12131,47632=>12132,47633=>12133,47634=>12134,47635=>12135,47636=>12136,47638=>12137,47639=>12138,47640=>12139,47641=>12140,47642=>12141,47643=>12142,47644=>12143,47645=>12144,47646=>12145,47647=>12146,47648=>12147,47649=>12148,47650=>12149,47651=>12150,47652=>12151,47653=>12152,47654=>12153,47655=>12154,47656=>12155,47657=>12156,47658=>12157,47659=>12158,47660=>12159,47661=>12160,47662=>12161,47663=>12162,47664=>12163,47665=>12164,47666=>12165,47667=>12166,47668=>12167,47669=>12168,47670=>12169,47671=>12170,47674=>12171,47675=>12172,47677=>12173,47678=>12174,47679=>12175,47681=>12176,47683=>12177,47684=>12178,47685=>12179,47686=>12180,47687=>12181,47690=>12182,47692=>12183,47695=>12184,47696=>12185,47697=>12186,47698=>12187,47702=>12188,47703=>12189,47705=>12190,47706=>12191,47707=>12192,47709=>12193,47710=>12194,47711=>12195,47712=>12196,47713=>12197,47714=>12198,47715=>12199,47718=>12200,47722=>12201,47723=>12202,47724=>12203,47725=>12204,47726=>12205,47727=>12206,47730=>12207,47731=>12208,47733=>12209,47734=>12210,47735=>12211,47737=>12212,47738=>12213,47739=>12214,47740=>12215,47741=>12216,47742=>12217,47743=>12218,47744=>12219,47745=>12220,47746=>12221,47750=>12222,47752=>12223,47753=>12224,47754=>12225,47755=>12226,47757=>12227,47758=>12228,47759=>12229,47760=>12230,47761=>12231,47762=>12232,47763=>12233,47764=>12234,47765=>12235,47766=>12236,47767=>12237,47768=>12238,47769=>12239,47770=>12240,47771=>12241,47772=>12242,47773=>12243,47774=>12244,47775=>12245,47776=>12246,47777=>12247,47778=>12248,47779=>12249,47780=>12250,47781=>12251,47782=>12252,47783=>12253,47786=>12254,47789=>12255,47790=>12256,47791=>12257,47793=>12258,47795=>12259,47796=>12260,47797=>12261,47798=>12262,47799=>12263,47802=>12264,47804=>12265,47806=>12266,47807=>12267,47808=>12268,47809=>12269,47810=>12270,47811=>12271,47813=>12272,47814=>12273,47815=>12274,47817=>12275,47818=>12276,47819=>12277,47820=>12278,47821=>12279,47822=>12280,47823=>12281,47824=>12282,47825=>12283,47826=>12284,47827=>12285,47828=>12286,47829=>12287,47830=>12288,47831=>12289,47834=>12290,47835=>12291,47836=>12292,47837=>12293,47838=>12294,47839=>12295,47840=>12296,47841=>12297,47842=>12298,47843=>12299,47844=>12300,47845=>12301,47846=>12302,47847=>12303,47848=>12304,47849=>12305,47850=>12306,47851=>12307,47852=>12308,47853=>12309,47854=>12310,47855=>12311,47856=>12312,47857=>12313,47858=>12314,47859=>12315,47860=>12316,47861=>12317,47862=>12318,47863=>12319,47864=>12320,47865=>12321,47866=>12322,47867=>12323,47869=>12324,47870=>12325,47871=>12326,47873=>12327,47874=>12328,47875=>12329,47877=>12330,47878=>12331,47879=>12332,47880=>12333,47881=>12334,47882=>12335,47883=>12336,47884=>12337,47886=>12338,47888=>12339,47890=>12340,47891=>12341,47892=>12342,47893=>12343,47894=>12344,47895=>12345,47897=>12346,47898=>12347,47899=>12348,47901=>12349,47902=>12350,47903=>12351,47905=>12352,47906=>12353,47907=>12354,47908=>12355,47909=>12356,47910=>12357,47911=>12358,47912=>12359,47914=>12360,47916=>12361,47917=>12362,47918=>12363,47919=>12364,47920=>12365,47921=>12366,47922=>12367,47923=>12368,47927=>12369,47929=>12370,47930=>12371,47935=>12372,47936=>12373,47937=>12374,47938=>12375,47939=>12376,47942=>12377,47944=>12378,47946=>12379,47947=>12380,47948=>12381,47950=>12382,47953=>12383,47954=>12384,47955=>12385,47957=>12386,47958=>12387,47959=>12388,47961=>12389,47962=>12390,47963=>12391,47964=>12392,47965=>12393,47966=>12394,47967=>12395,47968=>12396,47970=>12397,47972=>12398,47973=>12399,47974=>12400,47975=>12401,47976=>12402,47977=>12403,47978=>12404,47979=>12405,47981=>12406,47982=>12407,47983=>12408,47984=>12409,47985=>12410,47986=>12411,47987=>12412,47988=>12413,47989=>12414,47990=>12415,47991=>12416,47992=>12417,47993=>12418,47994=>12419,47995=>12420,47996=>12421,47997=>12422,47998=>12423,47999=>12424,48000=>12425,48001=>12426,48002=>12427,48003=>12428,48004=>12429,48005=>12430,48006=>12431,48007=>12432,48009=>12433,48010=>12434,48011=>12435,48013=>12436,48014=>12437,48015=>12438,48017=>12439,48018=>12440,48019=>12441,48020=>12442,48021=>12443,48022=>12444,48023=>12445,48024=>12446,48025=>12447,48026=>12448,48027=>12449,48028=>12450,48029=>12451,48030=>12452,48031=>12453,48032=>12454,48033=>12455,48034=>12456,48035=>12457,48037=>12458,48038=>12459,48039=>12460,48041=>12461,48042=>12462,48043=>12463,48045=>12464,48046=>12465,48047=>12466,48048=>12467,48049=>12468,48050=>12469,48051=>12470,48053=>12471,48054=>12472,48056=>12473,48057=>12474,48058=>12475,48059=>12476,48060=>12477,48061=>12478,48062=>12479,48063=>12480,48065=>12481,48066=>12482,48067=>12483,48069=>12484,48070=>12485,48071=>12486,48073=>12487,48074=>12488,48075=>12489,48076=>12490,48077=>12491,48078=>12492,48079=>12493,48081=>12494,48082=>12495,48084=>12496,48085=>12497,48086=>12498,48087=>12499,48088=>12500,48089=>12501,48090=>12502,48091=>12503,48092=>12504,48093=>12505,48094=>12506,48095=>12507,48096=>12508,48097=>12509,48098=>12510,48099=>12511,48100=>12512,48101=>12513,48102=>12514,48103=>12515,48104=>12516,48105=>12517,48106=>12518,48107=>12519,48108=>12520,48109=>12521,48110=>12522,48111=>12523,48112=>12524,48113=>12525,48114=>12526,48115=>12527,48116=>12528,48117=>12529,48118=>12530,48119=>12531,48122=>12532,48123=>12533,48125=>12534,48126=>12535,48129=>12536,48131=>12537,48132=>12538,48133=>12539,48134=>12540,48135=>12541,48138=>12542,48142=>12543,48144=>12544,48146=>12545,48147=>12546,48153=>12547,48154=>12548,48160=>12549,48161=>12550,48162=>12551,48163=>12552,48166=>12553,48168=>12554,48170=>12555,48171=>12556,48172=>12557,48174=>12558,48175=>12559,48178=>12560,48179=>12561,48181=>12562,48182=>12563,48183=>12564,48185=>12565,48186=>12566,48187=>12567,48188=>12568,48189=>12569,48190=>12570,48191=>12571,48194=>12572,48198=>12573,48199=>12574,48200=>12575,48202=>12576,48203=>12577,48206=>12578,48207=>12579,48209=>12580,48210=>12581,48211=>12582,48212=>12583,48213=>12584,48214=>12585,48215=>12586,48216=>12587,48217=>12588,48218=>12589,48219=>12590,48220=>12591,48222=>12592,48223=>12593,48224=>12594,48225=>12595,48226=>12596,48227=>12597,48228=>12598,48229=>12599,48230=>12600,48231=>12601,48232=>12602,48233=>12603,48234=>12604,48235=>12605,48236=>12606,48237=>12607,48238=>12608,48239=>12609,48240=>12610,48241=>12611,48242=>12612,48243=>12613,48244=>12614,48245=>12615,48246=>12616,48247=>12617,48248=>12618,48249=>12619,48250=>12620,48251=>12621,48252=>12622,48253=>12623,48254=>12624,48255=>12625,48256=>12626,48257=>12627,48258=>12628,48259=>12629,48262=>12630,48263=>12631,48265=>12632,48266=>12633,48269=>12634,48271=>12635,48272=>12636,48273=>12637,48274=>12638,48275=>12639,48278=>12640,48280=>12641,48283=>12642,48284=>12643,48285=>12644,48286=>12645,48287=>12646,48290=>12647,48291=>12648,48293=>12649,48294=>12650,48297=>12651,48298=>12652,48299=>12653,48300=>12654,48301=>12655,48302=>12656,48303=>12657,48306=>12658,48310=>12659,48311=>12660,48312=>12661,48313=>12662,48314=>12663,48315=>12664,48318=>12665,48319=>12666,48321=>12667,48322=>12668,48323=>12669,48325=>12670,48326=>12671,48327=>12672,48328=>12673,48329=>12674,48330=>12675,48331=>12676,48332=>12677,48334=>12678,48338=>12679,48339=>12680,48340=>12681,48342=>12682,48343=>12683,48345=>12684,48346=>12685,48347=>12686,48349=>12687,48350=>12688,48351=>12689,48352=>12690,48353=>12691,48354=>12692,48355=>12693,48356=>12694,48357=>12695,48358=>12696,48359=>12697,48360=>12698,48361=>12699,48362=>12700,48363=>12701,48364=>12702,48365=>12703,48366=>12704,48367=>12705,48368=>12706,48369=>12707,48370=>12708,48371=>12709,48375=>12710,48377=>12711,48378=>12712,48379=>12713,48381=>12714,48382=>12715,48383=>12716,48384=>12717,48385=>12718,48386=>12719,48387=>12720,48390=>12721,48392=>12722,48394=>12723,48395=>12724,48396=>12725,48397=>12726,48398=>12727,48399=>12728,48401=>12729,48402=>12730,48403=>12731,48405=>12732,48406=>12733,48407=>12734,48408=>12735,48409=>12736,48410=>12737,48411=>12738,48412=>12739,48413=>12740,48414=>12741,48415=>12742,48416=>12743,48417=>12744,48418=>12745,48419=>12746,48421=>12747,48422=>12748,48423=>12749,48424=>12750,48425=>12751,48426=>12752,48427=>12753,48429=>12754,48430=>12755,48431=>12756,48432=>12757,48433=>12758,48434=>12759,48435=>12760,48436=>12761,48437=>12762,48438=>12763,48439=>12764,48440=>12765,48441=>12766,48442=>12767,48443=>12768,48444=>12769,48445=>12770,48446=>12771,48447=>12772,48449=>12773,48450=>12774,48451=>12775,48452=>12776,48453=>12777,48454=>12778,48455=>12779,48458=>12780,48459=>12781,48461=>12782,48462=>12783,48463=>12784,48465=>12785,48466=>12786,48467=>12787,48468=>12788,48469=>12789,48470=>12790,48471=>12791,48474=>12792,48475=>12793,48476=>12794,48477=>12795,48478=>12796,48479=>12797,48480=>12798,48481=>12799,48482=>12800,48483=>12801,48485=>12802,48486=>12803,48487=>12804,48489=>12805,48490=>12806,48491=>12807,48492=>12808,48493=>12809,48494=>12810,48495=>12811,48496=>12812,48497=>12813,48498=>12814,48499=>12815,48500=>12816,48501=>12817,48502=>12818,48503=>12819,48504=>12820,48505=>12821,48506=>12822,48507=>12823,48508=>12824,48509=>12825,48510=>12826,48511=>12827,48514=>12828,48515=>12829,48517=>12830,48518=>12831,48523=>12832,48524=>12833,48525=>12834,48526=>12835,48527=>12836,48530=>12837,48532=>12838,48534=>12839,48535=>12840,48536=>12841,48539=>12842,48541=>12843,48542=>12844,48543=>12845,48544=>12846,48545=>12847,48546=>12848,48547=>12849,48549=>12850,48550=>12851,48551=>12852,48552=>12853,48553=>12854,48554=>12855,48555=>12856,48556=>12857,48557=>12858,48558=>12859,48559=>12860,48561=>12861,48562=>12862,48563=>12863,48564=>12864,48565=>12865,48566=>12866,48567=>12867,48569=>12868,48570=>12869,48571=>12870,48572=>12871,48573=>12872,48574=>12873,48575=>12874,48576=>12875,48577=>12876,48578=>12877,48579=>12878,48580=>12879,48581=>12880,48582=>12881,48583=>12882,48584=>12883,48585=>12884,48586=>12885,48587=>12886,48588=>12887,48589=>12888,48590=>12889,48591=>12890,48592=>12891,48593=>12892,48594=>12893,48595=>12894,48598=>12895,48599=>12896,48601=>12897,48602=>12898,48603=>12899,48605=>12900,48606=>12901,48607=>12902,48608=>12903,48609=>12904,48610=>12905,48611=>12906,48612=>12907,48613=>12908,48614=>12909,48615=>12910,48616=>12911,48618=>12912,48619=>12913,48620=>12914,48621=>12915,48622=>12916,48623=>12917,48625=>12918,48626=>12919,48627=>12920,48629=>12921,48630=>12922,48631=>12923,48633=>12924,48634=>12925,48635=>12926,48636=>12927,48637=>12928,48638=>12929,48639=>12930,48641=>12931,48642=>12932,48644=>12933,48646=>12934,48647=>12935,48648=>12936,48649=>12937,48650=>12938,48651=>12939,48654=>12940,48655=>12941,48657=>12942,48658=>12943,48659=>12944,48661=>12945,48662=>12946,48663=>12947,48664=>12948,48665=>12949,48666=>12950,48667=>12951,48670=>12952,48672=>12953,48673=>12954,48674=>12955,48675=>12956,48676=>12957,48677=>12958,48678=>12959,48679=>12960,48680=>12961,48681=>12962,48682=>12963,48683=>12964,48684=>12965,48685=>12966,48686=>12967,48687=>12968,48688=>12969,48689=>12970,48690=>12971,48691=>12972,48692=>12973,48693=>12974,48694=>12975,48695=>12976,48696=>12977,48697=>12978,48698=>12979,48699=>12980,48700=>12981,48701=>12982,48702=>12983,48703=>12984,48704=>12985,48705=>12986,48706=>12987,48707=>12988,48710=>12989,48711=>12990,48713=>12991,48714=>12992,48715=>12993,48717=>12994,48719=>12995,48720=>12996,48721=>12997,48722=>12998,48723=>12999,48726=>13000,48728=>13001,48732=>13002,48733=>13003,48734=>13004,48735=>13005,48738=>13006,48739=>13007,48741=>13008,48742=>13009,48743=>13010,48745=>13011,48747=>13012,48748=>13013,48749=>13014,48750=>13015,48751=>13016,48754=>13017,48758=>13018,48759=>13019,48760=>13020,48761=>13021,48762=>13022,48766=>13023,48767=>13024,48769=>13025,48770=>13026,48771=>13027,48773=>13028,48774=>13029,48775=>13030,48776=>13031,48777=>13032,48778=>13033,48779=>13034,48782=>13035,48786=>13036,48787=>13037,48788=>13038,48789=>13039,48790=>13040,48791=>13041,48794=>13042,48795=>13043,48796=>13044,48797=>13045,48798=>13046,48799=>13047,48800=>13048,48801=>13049,48802=>13050,48803=>13051,48804=>13052,48805=>13053,48806=>13054,48807=>13055,48809=>13056,48810=>13057,48811=>13058,48812=>13059,48813=>13060,48814=>13061,48815=>13062,48816=>13063,48817=>13064,48818=>13065,48819=>13066,48820=>13067,48821=>13068,48822=>13069,48823=>13070,48824=>13071,48825=>13072,48826=>13073,48827=>13074,48828=>13075,48829=>13076,48830=>13077,48831=>13078,48832=>13079,48833=>13080,48834=>13081,48835=>13082,48836=>13083,48837=>13084,48838=>13085,48839=>13086,48840=>13087,48841=>13088,48842=>13089,48843=>13090,48844=>13091,48845=>13092,48846=>13093,48847=>13094,48850=>13095,48851=>13096,48853=>13097,48854=>13098,48857=>13099,48858=>13100,48859=>13101,48860=>13102,48861=>13103,48862=>13104,48863=>13105,48865=>13106,48866=>13107,48870=>13108,48871=>13109,48872=>13110,48873=>13111,48874=>13112,48875=>13113,48877=>13114,48878=>13115,48879=>13116,48880=>13117,48881=>13118,48882=>13119,48883=>13120,48884=>13121,48885=>13122,48886=>13123,48887=>13124,48888=>13125,48889=>13126,48890=>13127,48891=>13128,48892=>13129,48893=>13130,48894=>13131,48895=>13132,48896=>13133,48898=>13134,48899=>13135,48900=>13136,48901=>13137,48902=>13138,48903=>13139,48906=>13140,48907=>13141,48908=>13142,48909=>13143,48910=>13144,48911=>13145,48912=>13146,48913=>13147,48914=>13148,48915=>13149,48916=>13150,48917=>13151,48918=>13152,48919=>13153,48922=>13154,48926=>13155,48927=>13156,48928=>13157,48929=>13158,48930=>13159,48931=>13160,48932=>13161,48933=>13162,48934=>13163,48935=>13164,48936=>13165,48937=>13166,48938=>13167,48939=>13168,48940=>13169,48941=>13170,48942=>13171,48943=>13172,48944=>13173,48945=>13174,48946=>13175,48947=>13176,48948=>13177,48949=>13178,48950=>13179,48951=>13180,48952=>13181,48953=>13182,48954=>13183,48955=>13184,48956=>13185,48957=>13186,48958=>13187,48959=>13188,48962=>13189,48963=>13190,48965=>13191,48966=>13192,48967=>13193,48969=>13194,48970=>13195,48971=>13196,48972=>13197,48973=>13198,48974=>13199,48975=>13200,48978=>13201,48979=>13202,48980=>13203,48982=>13204,48983=>13205,48984=>13206,48985=>13207,48986=>13208,48987=>13209,48988=>13210,48989=>13211,48990=>13212,48991=>13213,48992=>13214,48993=>13215,48994=>13216,48995=>13217,48996=>13218,48997=>13219,48998=>13220,48999=>13221,49000=>13222,49001=>13223,49002=>13224,49003=>13225,49004=>13226,49005=>13227,49006=>13228,49007=>13229,49008=>13230,49009=>13231,49010=>13232,49011=>13233,49012=>13234,49013=>13235,49014=>13236,49015=>13237,49016=>13238,49017=>13239,49018=>13240,49019=>13241,49020=>13242,49021=>13243,49022=>13244,49023=>13245,49024=>13246,49025=>13247,49026=>13248,49027=>13249,49028=>13250,49029=>13251,49030=>13252,49031=>13253,49032=>13254,49033=>13255,49034=>13256,49035=>13257,49036=>13258,49037=>13259,49038=>13260,49039=>13261,49040=>13262,49041=>13263,49042=>13264,49043=>13265,49045=>13266,49046=>13267,49047=>13268,49048=>13269,49049=>13270,49050=>13271,49051=>13272,49052=>13273,49053=>13274,49054=>13275,49055=>13276,49056=>13277,49057=>13278,49058=>13279,49059=>13280,49060=>13281,49061=>13282,49062=>13283,49063=>13284,49064=>13285,49065=>13286,49066=>13287,49067=>13288,49068=>13289,49069=>13290,49070=>13291,49071=>13292,49073=>13293,49074=>13294,49075=>13295,49076=>13296,49077=>13297,49078=>13298,49079=>13299,49080=>13300,49081=>13301,49082=>13302,49083=>13303,49084=>13304,49085=>13305,49086=>13306,49087=>13307,49088=>13308,49089=>13309,49090=>13310,49091=>13311,49092=>13312,49094=>13313,49095=>13314,49096=>13315,49097=>13316,49098=>13317,49099=>13318,49102=>13319,49103=>13320,49105=>13321,49106=>13322,49107=>13323,49109=>13324,49110=>13325,49111=>13326,49112=>13327,49113=>13328,49114=>13329,49115=>13330,49117=>13331,49118=>13332,49120=>13333,49122=>13334,49123=>13335,49124=>13336,49125=>13337,49126=>13338,49127=>13339,49128=>13340,49129=>13341,49130=>13342,49131=>13343,49132=>13344,49133=>13345,49134=>13346,49135=>13347,49136=>13348,49137=>13349,49138=>13350,49139=>13351,49140=>13352,49141=>13353,49142=>13354,49143=>13355,49144=>13356,49145=>13357,49146=>13358,49147=>13359,49148=>13360,49149=>13361,49150=>13362,49151=>13363,49152=>13364,49153=>13365,49154=>13366,49155=>13367,49156=>13368,49157=>13369,49158=>13370,49159=>13371,49160=>13372,49161=>13373,49162=>13374,49163=>13375,49164=>13376,49165=>13377,49166=>13378,49167=>13379,49168=>13380,49169=>13381,49170=>13382,49171=>13383,49172=>13384,49173=>13385,49174=>13386,49175=>13387,49176=>13388,49177=>13389,49178=>13390,49179=>13391,49180=>13392,49181=>13393,49182=>13394,49183=>13395,49184=>13396,49185=>13397,49186=>13398,49187=>13399,49188=>13400,49189=>13401,49190=>13402,49191=>13403,49192=>13404,49193=>13405,49194=>13406,49195=>13407,49196=>13408,49197=>13409,49198=>13410,49199=>13411,49200=>13412,49201=>13413,49202=>13414,49203=>13415,49204=>13416,49205=>13417,49206=>13418,49207=>13419,49208=>13420,49209=>13421,49210=>13422,49211=>13423,49213=>13424,49214=>13425,49215=>13426,49216=>13427,49217=>13428,49218=>13429,49219=>13430,49220=>13431,49221=>13432,49222=>13433,49223=>13434,49224=>13435,49225=>13436,49226=>13437,49227=>13438,49228=>13439,49229=>13440,49230=>13441,49231=>13442,49232=>13443,49234=>13444,49235=>13445,49236=>13446,49237=>13447,49238=>13448,49239=>13449,49241=>13450,49242=>13451,49243=>13452,49245=>13453,49246=>13454,49247=>13455,49249=>13456,49250=>13457,49251=>13458,49252=>13459,49253=>13460,49254=>13461,49255=>13462,49258=>13463,49259=>13464,49260=>13465,49261=>13466,49262=>13467,49263=>13468,49264=>13469,49265=>13470,49266=>13471,49267=>13472,49268=>13473,49269=>13474,49270=>13475,49271=>13476,49272=>13477,49273=>13478,49274=>13479,49275=>13480,49276=>13481,49277=>13482,49278=>13483,49279=>13484,49280=>13485,49281=>13486,49282=>13487,49283=>13488,49284=>13489,49285=>13490,49286=>13491,49287=>13492,49288=>13493,49289=>13494,49290=>13495,49291=>13496,49292=>13497,49293=>13498,49294=>13499,49295=>13500,49298=>13501,49299=>13502,49301=>13503,49302=>13504,49303=>13505,49305=>13506,49306=>13507,49307=>13508,49308=>13509,49309=>13510,49310=>13511,49311=>13512,49314=>13513,49316=>13514,49318=>13515,49319=>13516,49320=>13517,49321=>13518,49322=>13519,49323=>13520,49326=>13521,49329=>13522,49330=>13523,49335=>13524,49336=>13525,49337=>13526,49338=>13527,49339=>13528,49342=>13529,49346=>13530,49347=>13531,49348=>13532,49350=>13533,49351=>13534,49354=>13535,49355=>13536,49357=>13537,49358=>13538,49359=>13539,49361=>13540,49362=>13541,49363=>13542,49364=>13543,49365=>13544,49366=>13545,49367=>13546,49370=>13547,49374=>13548,49375=>13549,49376=>13550,49377=>13551,49378=>13552,49379=>13553,49382=>13554,49383=>13555,49385=>13556,49386=>13557,49387=>13558,49389=>13559,49390=>13560,49391=>13561,49392=>13562,49393=>13563,49394=>13564,49395=>13565,49398=>13566,49400=>13567,49402=>13568,49403=>13569,49404=>13570,49405=>13571,49406=>13572,49407=>13573,49409=>13574,49410=>13575,49411=>13576,49413=>13577,49414=>13578,49415=>13579,49417=>13580,49418=>13581,49419=>13582,49420=>13583,49421=>13584,49422=>13585,49423=>13586,49425=>13587,49426=>13588,49427=>13589,49428=>13590,49430=>13591,49431=>13592,49432=>13593,49433=>13594,49434=>13595,49435=>13596,49441=>13597,49442=>13598,49445=>13599,49448=>13600,49449=>13601,49450=>13602,49451=>13603,49454=>13604,49458=>13605,49459=>13606,49460=>13607,49461=>13608,49463=>13609,49466=>13610,49467=>13611,49469=>13612,49470=>13613,49471=>13614,49473=>13615,49474=>13616,49475=>13617,49476=>13618,49477=>13619,49478=>13620,49479=>13621,49482=>13622,49486=>13623,49487=>13624,49488=>13625,49489=>13626,49490=>13627,49491=>13628,49494=>13629,49495=>13630,49497=>13631,49498=>13632,49499=>13633,49501=>13634,49502=>13635,49503=>13636,49504=>13637,49505=>13638,49506=>13639,49507=>13640,49510=>13641,49514=>13642,49515=>13643,49516=>13644,49517=>13645,49518=>13646,49519=>13647,49521=>13648,49522=>13649,49523=>13650,49525=>13651,49526=>13652,49527=>13653,49529=>13654,49530=>13655,49531=>13656,49532=>13657,49533=>13658,49534=>13659,49535=>13660,49536=>13661,49537=>13662,49538=>13663,49539=>13664,49540=>13665,49542=>13666,49543=>13667,49544=>13668,49545=>13669,49546=>13670,49547=>13671,49551=>13672,49553=>13673,49554=>13674,49555=>13675,49557=>13676,49559=>13677,49560=>13678,49561=>13679,49562=>13680,49563=>13681,49566=>13682,49568=>13683,49570=>13684,49571=>13685,49572=>13686,49574=>13687,49575=>13688,49578=>13689,49579=>13690,49581=>13691,49582=>13692,49583=>13693,49585=>13694,49586=>13695,49587=>13696,49588=>13697,49589=>13698,49590=>13699,49591=>13700,49592=>13701,49593=>13702,49594=>13703,49595=>13704,49596=>13705,49598=>13706,49599=>13707,49600=>13708,49601=>13709,49602=>13710,49603=>13711,49605=>13712,49606=>13713,49607=>13714,49609=>13715,49610=>13716,49611=>13717,49613=>13718,49614=>13719,49615=>13720,49616=>13721,49617=>13722,49618=>13723,49619=>13724,49621=>13725,49622=>13726,49625=>13727,49626=>13728,49627=>13729,49628=>13730,49629=>13731,49630=>13732,49631=>13733,49633=>13734,49634=>13735,49635=>13736,49637=>13737,49638=>13738,49639=>13739,49641=>13740,49642=>13741,49643=>13742,49644=>13743,49645=>13744,49646=>13745,49647=>13746,49650=>13747,49652=>13748,49653=>13749,49654=>13750,49655=>13751,49656=>13752,49657=>13753,49658=>13754,49659=>13755,49662=>13756,49663=>13757,49665=>13758,49666=>13759,49667=>13760,49669=>13761,49670=>13762,49671=>13763,49672=>13764,49673=>13765,49674=>13766,49675=>13767,49678=>13768,49680=>13769,49682=>13770,49683=>13771,49684=>13772,49685=>13773,49686=>13774,49687=>13775,49690=>13776,49691=>13777,49693=>13778,49694=>13779,49697=>13780,49698=>13781,49699=>13782,49700=>13783,49701=>13784,49702=>13785,49703=>13786,49706=>13787,49708=>13788,49710=>13789,49712=>13790,49715=>13791,49717=>13792,49718=>13793,49719=>13794,49720=>13795,49721=>13796,49722=>13797,49723=>13798,49724=>13799,49725=>13800,49726=>13801,49727=>13802,49728=>13803,49729=>13804,49730=>13805,49731=>13806,49732=>13807,49733=>13808,49734=>13809,49735=>13810,49737=>13811,49738=>13812,49739=>13813,49740=>13814,49741=>13815,49742=>13816,49743=>13817,49746=>13818,49747=>13819,49749=>13820,49750=>13821,49751=>13822,49753=>13823,49754=>13824,49755=>13825,49756=>13826,49757=>13827,49758=>13828,49759=>13829,49761=>13830,49762=>13831,49763=>13832,49764=>13833,49766=>13834,49767=>13835,49768=>13836,49769=>13837,49770=>13838,49771=>13839,49774=>13840,49775=>13841,49777=>13842,49778=>13843,49779=>13844,49781=>13845,49782=>13846,49783=>13847,49784=>13848,49785=>13849,49786=>13850,49787=>13851,49790=>13852,49792=>13853,49794=>13854,49795=>13855,49796=>13856,49797=>13857,49798=>13858,49799=>13859,49802=>13860,49803=>13861,49804=>13862,49805=>13863,49806=>13864,49807=>13865,49809=>13866,49810=>13867,49811=>13868,49812=>13869,49813=>13870,49814=>13871,49815=>13872,49817=>13873,49818=>13874,49820=>13875,49822=>13876,49823=>13877,49824=>13878,49825=>13879,49826=>13880,49827=>13881,49830=>13882,49831=>13883,49833=>13884,49834=>13885,49835=>13886,49838=>13887,49839=>13888,49840=>13889,49841=>13890,49842=>13891,49843=>13892,49846=>13893,49848=>13894,49850=>13895,49851=>13896,49852=>13897,49853=>13898,49854=>13899,49855=>13900,49856=>13901,49857=>13902,49858=>13903,49859=>13904,49860=>13905,49861=>13906,49862=>13907,49863=>13908,49864=>13909,49865=>13910,49866=>13911,49867=>13912,49868=>13913,49869=>13914,49870=>13915,49871=>13916,49872=>13917,49873=>13918,49874=>13919,49875=>13920,49876=>13921,49877=>13922,49878=>13923,49879=>13924,49880=>13925,49881=>13926,49882=>13927,49883=>13928,49886=>13929,49887=>13930,49889=>13931,49890=>13932,49893=>13933,49894=>13934,49895=>13935,49896=>13936,49897=>13937,49898=>13938,49902=>13939,49904=>13940,49906=>13941,49907=>13942,49908=>13943,49909=>13944,49911=>13945,49914=>13946,49917=>13947,49918=>13948,49919=>13949,49921=>13950,49922=>13951,49923=>13952,49924=>13953,49925=>13954,49926=>13955,49927=>13956,49930=>13957,49931=>13958,49934=>13959,49935=>13960,49936=>13961,49937=>13962,49938=>13963,49942=>13964,49943=>13965,49945=>13966,49946=>13967,49947=>13968,49949=>13969,49950=>13970,49951=>13971,49952=>13972,49953=>13973,49954=>13974,49955=>13975,49958=>13976,49959=>13977,49962=>13978,49963=>13979,49964=>13980,49965=>13981,49966=>13982,49967=>13983,49968=>13984,49969=>13985,49970=>13986,49971=>13987,49972=>13988,49973=>13989,49974=>13990,49975=>13991,49976=>13992,49977=>13993,49978=>13994,49979=>13995,49980=>13996,49981=>13997,49982=>13998,49983=>13999,49984=>14000,49985=>14001,49986=>14002,49987=>14003,49988=>14004,49990=>14005,49991=>14006,49992=>14007,49993=>14008,49994=>14009,49995=>14010,49996=>14011,49997=>14012,49998=>14013,49999=>14014,50000=>14015,50001=>14016,50002=>14017,50003=>14018,50004=>14019,50005=>14020,50006=>14021,50007=>14022,50008=>14023,50009=>14024,50010=>14025,50011=>14026,50012=>14027,50013=>14028,50014=>14029,50015=>14030,50016=>14031,50017=>14032,50018=>14033,50019=>14034,50020=>14035,50021=>14036,50022=>14037,50023=>14038,50026=>14039,50027=>14040,50029=>14041,50030=>14042,50031=>14043,50033=>14044,50035=>14045,50036=>14046,50037=>14047,50038=>14048,50039=>14049,50042=>14050,50043=>14051,50046=>14052,50047=>14053,50048=>14054,50049=>14055,50050=>14056,50051=>14057,50053=>14058,50054=>14059,50055=>14060,50057=>14061,50058=>14062,50059=>14063,50061=>14064,50062=>14065,50063=>14066,50064=>14067,50065=>14068,50066=>14069,50067=>14070,50068=>14071,50069=>14072,50070=>14073,50071=>14074,50072=>14075,50073=>14076,50074=>14077,50075=>14078,50076=>14079,50077=>14080,50078=>14081,50079=>14082,50080=>14083,50081=>14084,50082=>14085,50083=>14086,50084=>14087,50085=>14088,50086=>14089,50087=>14090,50088=>14091,50089=>14092,50090=>14093,50091=>14094,50092=>14095,50093=>14096,50094=>14097,50095=>14098,50096=>14099,50097=>14100,50098=>14101,50099=>14102,50100=>14103,50101=>14104,50102=>14105,50103=>14106,50104=>14107,50105=>14108,50106=>14109,50107=>14110,50108=>14111,50109=>14112,50110=>14113,50111=>14114,50113=>14115,50114=>14116,50115=>14117,50116=>14118,50117=>14119,50118=>14120,50119=>14121,50120=>14122,50121=>14123,50122=>14124,50123=>14125,50124=>14126,50125=>14127,50126=>14128,50127=>14129,50128=>14130,50129=>14131,50130=>14132,50131=>14133,50132=>14134,50133=>14135,50134=>14136,50135=>14137,50138=>14138,50139=>14139,50141=>14140,50142=>14141,50145=>14142,50147=>14143,50148=>14144,50149=>14145,50150=>14146,50151=>14147,50154=>14148,50155=>14149,50156=>14150,50158=>14151,50159=>14152,50160=>14153,50161=>14154,50162=>14155,50163=>14156,50166=>14157,50167=>14158,50169=>14159,50170=>14160,50171=>14161,50172=>14162,50173=>14163,50174=>14164,50175=>14165,50176=>14166,50177=>14167,50178=>14168,50179=>14169,50180=>14170,50181=>14171,50182=>14172,50183=>14173,50185=>14174,50186=>14175,50187=>14176,50188=>14177,50189=>14178,50190=>14179,50191=>14180,50193=>14181,50194=>14182,50195=>14183,50196=>14184,50197=>14185,50198=>14186,50199=>14187,50200=>14188,50201=>14189,50202=>14190,50203=>14191,50204=>14192,50205=>14193,50206=>14194,50207=>14195,50208=>14196,50209=>14197,50210=>14198,50211=>14199,50213=>14200,50214=>14201,50215=>14202,50216=>14203,50217=>14204,50218=>14205,50219=>14206,50221=>14207,50222=>14208,50223=>14209,50225=>14210,50226=>14211,50227=>14212,50229=>14213,50230=>14214,50231=>14215,50232=>14216,50233=>14217,50234=>14218,50235=>14219,50238=>14220,50239=>14221,50240=>14222,50241=>14223,50242=>14224,50243=>14225,50244=>14226,50245=>14227,50246=>14228,50247=>14229,50249=>14230,50250=>14231,50251=>14232,50252=>14233,50253=>14234,50254=>14235,50255=>14236,50256=>14237,50257=>14238,50258=>14239,50259=>14240,50260=>14241,50261=>14242,50262=>14243,50263=>14244,50264=>14245,50265=>14246,50266=>14247,50267=>14248,50268=>14249,50269=>14250,50270=>14251,50271=>14252,50272=>14253,50273=>14254,50274=>14255,50275=>14256,50278=>14257,50279=>14258,50281=>14259,50282=>14260,50283=>14261,50285=>14262,50286=>14263,50287=>14264,50288=>14265,50289=>14266,50290=>14267,50291=>14268,50294=>14269,50295=>14270,50296=>14271,50298=>14272,50299=>14273,50300=>14274,50301=>14275,50302=>14276,50303=>14277,50305=>14278,50306=>14279,50307=>14280,50308=>14281,50309=>14282,50310=>14283,50311=>14284,50312=>14285,50313=>14286,50314=>14287,50315=>14288,50316=>14289,50317=>14290,50318=>14291,50319=>14292,50320=>14293,50321=>14294,50322=>14295,50323=>14296,50325=>14297,50326=>14298,50327=>14299,50328=>14300,50329=>14301,50330=>14302,50331=>14303,50333=>14304,50334=>14305,50335=>14306,50336=>14307,50337=>14308,50338=>14309,50339=>14310,50340=>14311,50341=>14312,50342=>14313,50343=>14314,50344=>14315,50345=>14316,50346=>14317,50347=>14318,50348=>14319,50349=>14320,50350=>14321,50351=>14322,50352=>14323,50353=>14324,50354=>14325,50355=>14326,50356=>14327,50357=>14328,50358=>14329,50359=>14330,50361=>14331,50362=>14332,50363=>14333,50365=>14334,50366=>14335,50367=>14336,50368=>14337,50369=>14338,50370=>14339,50371=>14340,50372=>14341,50373=>14342,50374=>14343,50375=>14344,50376=>14345,50377=>14346,50378=>14347,50379=>14348,50380=>14349,50381=>14350,50382=>14351,50383=>14352,50384=>14353,50385=>14354,50386=>14355,50387=>14356,50388=>14357,50389=>14358,50390=>14359,50391=>14360,50392=>14361,50393=>14362,50394=>14363,50395=>14364,50396=>14365,50397=>14366,50398=>14367,50399=>14368,50400=>14369,50401=>14370,50402=>14371,50403=>14372,50404=>14373,50405=>14374,50406=>14375,50407=>14376,50408=>14377,50410=>14378,50411=>14379,50412=>14380,50413=>14381,50414=>14382,50415=>14383,50418=>14384,50419=>14385,50421=>14386,50422=>14387,50423=>14388,50425=>14389,50427=>14390,50428=>14391,50429=>14392,50430=>14393,50434=>14394,50435=>14395,50436=>14396,50437=>14397,50438=>14398,50439=>14399,50440=>14400,50441=>14401,50442=>14402,50443=>14403,50445=>14404,50446=>14405,50447=>14406,50449=>14407,50450=>14408,50451=>14409,50453=>14410,50454=>14411,50455=>14412,50456=>14413,50457=>14414,50458=>14415,50459=>14416,50461=>14417,50462=>14418,50463=>14419,50464=>14420,50465=>14421,50466=>14422,50467=>14423,50468=>14424,50469=>14425,50470=>14426,50471=>14427,50474=>14428,50475=>14429,50477=>14430,50478=>14431,50479=>14432,50481=>14433,50482=>14434,50483=>14435,50484=>14436,50485=>14437,50486=>14438,50487=>14439,50490=>14440,50492=>14441,50494=>14442,50495=>14443,50496=>14444,50497=>14445,50498=>14446,50499=>14447,50502=>14448,50503=>14449,50507=>14450,50511=>14451,50512=>14452,50513=>14453,50514=>14454,50518=>14455,50522=>14456,50523=>14457,50524=>14458,50527=>14459,50530=>14460,50531=>14461,50533=>14462,50534=>14463,50535=>14464,50537=>14465,50538=>14466,50539=>14467,50540=>14468,50541=>14469,50542=>14470,50543=>14471,50546=>14472,50550=>14473,50551=>14474,50552=>14475,50553=>14476,50554=>14477,50555=>14478,50558=>14479,50559=>14480,50561=>14481,50562=>14482,50563=>14483,50565=>14484,50566=>14485,50568=>14486,50569=>14487,50570=>14488,50571=>14489,50574=>14490,50576=>14491,50578=>14492,50579=>14493,50580=>14494,50582=>14495,50585=>14496,50586=>14497,50587=>14498,50589=>14499,50590=>14500,50591=>14501,50593=>14502,50594=>14503,50595=>14504,50596=>14505,50597=>14506,50598=>14507,50599=>14508,50600=>14509,50602=>14510,50603=>14511,50604=>14512,50605=>14513,50606=>14514,50607=>14515,50608=>14516,50609=>14517,50610=>14518,50611=>14519,50614=>14520,50615=>14521,50618=>14522,50623=>14523,50624=>14524,50625=>14525,50626=>14526,50627=>14527,50635=>14528,50637=>14529,50639=>14530,50642=>14531,50643=>14532,50645=>14533,50646=>14534,50647=>14535,50649=>14536,50650=>14537,50651=>14538,50652=>14539,50653=>14540,50654=>14541,50655=>14542,50658=>14543,50660=>14544,50662=>14545,50663=>14546,50664=>14547,50665=>14548,50666=>14549,50667=>14550,50671=>14551,50673=>14552,50674=>14553,50675=>14554,50677=>14555,50680=>14556,50681=>14557,50682=>14558,50683=>14559,50690=>14560,50691=>14561,50692=>14562,50697=>14563,50698=>14564,50699=>14565,50701=>14566,50702=>14567,50703=>14568,50705=>14569,50706=>14570,50707=>14571,50708=>14572,50709=>14573,50710=>14574,50711=>14575,50714=>14576,50717=>14577,50718=>14578,50719=>14579,50720=>14580,50721=>14581,50722=>14582,50723=>14583,50726=>14584,50727=>14585,50729=>14586,50730=>14587,50731=>14588,50735=>14589,50737=>14590,50738=>14591,50742=>14592,50744=>14593,50746=>14594,50748=>14595,50749=>14596,50750=>14597,50751=>14598,50754=>14599,50755=>14600,50757=>14601,50758=>14602,50759=>14603,50761=>14604,50762=>14605,50763=>14606,50764=>14607,50765=>14608,50766=>14609,50767=>14610,50770=>14611,50774=>14612,50775=>14613,50776=>14614,50777=>14615,50778=>14616,50779=>14617,50782=>14618,50783=>14619,50785=>14620,50786=>14621,50787=>14622,50788=>14623,50789=>14624,50790=>14625,50791=>14626,50792=>14627,50793=>14628,50794=>14629,50795=>14630,50797=>14631,50798=>14632,50800=>14633,50802=>14634,50803=>14635,50804=>14636,50805=>14637,50806=>14638,50807=>14639,50810=>14640,50811=>14641,50813=>14642,50814=>14643,50815=>14644,50817=>14645,50818=>14646,50819=>14647,50820=>14648,50821=>14649,50822=>14650,50823=>14651,50826=>14652,50828=>14653,50830=>14654,50831=>14655,50832=>14656,50833=>14657,50834=>14658,50835=>14659,50838=>14660,50839=>14661,50841=>14662,50842=>14663,50843=>14664,50845=>14665,50846=>14666,50847=>14667,50848=>14668,50849=>14669,50850=>14670,50851=>14671,50854=>14672,50856=>14673,50858=>14674,50859=>14675,50860=>14676,50861=>14677,50862=>14678,50863=>14679,50866=>14680,50867=>14681,50869=>14682,50870=>14683,50871=>14684,50875=>14685,50876=>14686,50877=>14687,50878=>14688,50879=>14689,50882=>14690,50884=>14691,50886=>14692,50887=>14693,50888=>14694,50889=>14695,50890=>14696,50891=>14697,50894=>14698,50895=>14699,50897=>14700,50898=>14701,50899=>14702,50901=>14703,50902=>14704,50903=>14705,50904=>14706,50905=>14707,50906=>14708,50907=>14709,50910=>14710,50911=>14711,50914=>14712,50915=>14713,50916=>14714,50917=>14715,50918=>14716,50919=>14717,50922=>14718,50923=>14719,50925=>14720,50926=>14721,50927=>14722,50929=>14723,50930=>14724,50931=>14725,50932=>14726,50933=>14727,50934=>14728,50935=>14729,50938=>14730,50939=>14731,50940=>14732,50942=>14733,50943=>14734,50944=>14735,50945=>14736,50946=>14737,50947=>14738,50950=>14739,50951=>14740,50953=>14741,50954=>14742,50955=>14743,50957=>14744,50958=>14745,50959=>14746,50960=>14747,50961=>14748,50962=>14749,50963=>14750,50966=>14751,50968=>14752,50970=>14753,50971=>14754,50972=>14755,50973=>14756,50974=>14757,50975=>14758,50978=>14759,50979=>14760,50981=>14761,50982=>14762,50983=>14763,50985=>14764,50986=>14765,50987=>14766,50988=>14767,50989=>14768,50990=>14769,50991=>14770,50994=>14771,50996=>14772,50998=>14773,51000=>14774,51001=>14775,51002=>14776,51003=>14777,51006=>14778,51007=>14779,51009=>14780,51010=>14781,51011=>14782,51013=>14783,51014=>14784,51015=>14785,51016=>14786,51017=>14787,51019=>14788,51022=>14789,51024=>14790,51033=>14791,51034=>14792,51035=>14793,51037=>14794,51038=>14795,51039=>14796,51041=>14797,51042=>14798,51043=>14799,51044=>14800,51045=>14801,51046=>14802,51047=>14803,51049=>14804,51050=>14805,51052=>14806,51053=>14807,51054=>14808,51055=>14809,51056=>14810,51057=>14811,51058=>14812,51059=>14813,51062=>14814,51063=>14815,51065=>14816,51066=>14817,51067=>14818,51071=>14819,51072=>14820,51073=>14821,51074=>14822,51078=>14823,51083=>14824,51084=>14825,51085=>14826,51087=>14827,51090=>14828,51091=>14829,51093=>14830,51097=>14831,51099=>14832,51100=>14833,51101=>14834,51102=>14835,51103=>14836,51106=>14837,51111=>14838,51112=>14839,51113=>14840,51114=>14841,51115=>14842,51118=>14843,51119=>14844,51121=>14845,51122=>14846,51123=>14847,51125=>14848,51126=>14849,51127=>14850,51128=>14851,51129=>14852,51130=>14853,51131=>14854,51134=>14855,51138=>14856,51139=>14857,51140=>14858,51141=>14859,51142=>14860,51143=>14861,51146=>14862,51147=>14863,51149=>14864,51151=>14865,51153=>14866,51154=>14867,51155=>14868,51156=>14869,51157=>14870,51158=>14871,51159=>14872,51161=>14873,51162=>14874,51163=>14875,51164=>14876,51166=>14877,51167=>14878,51168=>14879,51169=>14880,51170=>14881,51171=>14882,51173=>14883,51174=>14884,51175=>14885,51177=>14886,51178=>14887,51179=>14888,51181=>14889,51182=>14890,51183=>14891,51184=>14892,51185=>14893,51186=>14894,51187=>14895,51188=>14896,51189=>14897,51190=>14898,51191=>14899,51192=>14900,51193=>14901,51194=>14902,51195=>14903,51196=>14904,51197=>14905,51198=>14906,51199=>14907,51202=>14908,51203=>14909,51205=>14910,51206=>14911,51207=>14912,51209=>14913,51211=>14914,51212=>14915,51213=>14916,51214=>14917,51215=>14918,51218=>14919,51220=>14920,51223=>14921,51224=>14922,51225=>14923,51226=>14924,51227=>14925,51230=>14926,51231=>14927,51233=>14928,51234=>14929,51235=>14930,51237=>14931,51238=>14932,51239=>14933,51240=>14934,51241=>14935,51242=>14936,51243=>14937,51246=>14938,51248=>14939,51250=>14940,51251=>14941,51252=>14942,51253=>14943,51254=>14944,51255=>14945,51257=>14946,51258=>14947,51259=>14948,51261=>14949,51262=>14950,51263=>14951,51265=>14952,51266=>14953,51267=>14954,51268=>14955,51269=>14956,51270=>14957,51271=>14958,51274=>14959,51275=>14960,51278=>14961,51279=>14962,51280=>14963,51281=>14964,51282=>14965,51283=>14966,51285=>14967,51286=>14968,51287=>14969,51288=>14970,51289=>14971,51290=>14972,51291=>14973,51292=>14974,51293=>14975,51294=>14976,51295=>14977,51296=>14978,51297=>14979,51298=>14980,51299=>14981,51300=>14982,51301=>14983,51302=>14984,51303=>14985,51304=>14986,51305=>14987,51306=>14988,51307=>14989,51308=>14990,51309=>14991,51310=>14992,51311=>14993,51314=>14994,51315=>14995,51317=>14996,51318=>14997,51319=>14998,51321=>14999,51323=>15000,51324=>15001,51325=>15002,51326=>15003,51327=>15004,51330=>15005,51332=>15006,51336=>15007,51337=>15008,51338=>15009,51342=>15010,51343=>15011,51344=>15012,51345=>15013,51346=>15014,51347=>15015,51349=>15016,51350=>15017,51351=>15018,51352=>15019,51353=>15020,51354=>15021,51355=>15022,51356=>15023,51358=>15024,51360=>15025,51362=>15026,51363=>15027,51364=>15028,51365=>15029,51366=>15030,51367=>15031,51369=>15032,51370=>15033,51371=>15034,51372=>15035,51373=>15036,51374=>15037,51375=>15038,51376=>15039,51377=>15040,51378=>15041,51379=>15042,51380=>15043,51381=>15044,51382=>15045,51383=>15046,51384=>15047,51385=>15048,51386=>15049,51387=>15050,51390=>15051,51391=>15052,51392=>15053,51393=>15054,51394=>15055,51395=>15056,51397=>15057,51398=>15058,51399=>15059,51401=>15060,51402=>15061,51403=>15062,51405=>15063,51406=>15064,51407=>15065,51408=>15066,51409=>15067,51410=>15068,51411=>15069,51414=>15070,51416=>15071,51418=>15072,51419=>15073,51420=>15074,51421=>15075,51422=>15076,51423=>15077,51426=>15078,51427=>15079,51429=>15080,51430=>15081,51431=>15082,51432=>15083,51433=>15084,51434=>15085,51435=>15086,51436=>15087,51437=>15088,51438=>15089,51439=>15090,51440=>15091,51441=>15092,51442=>15093,51443=>15094,51444=>15095,51446=>15096,51447=>15097,51448=>15098,51449=>15099,51450=>15100,51451=>15101,51454=>15102,51455=>15103,51457=>15104,51458=>15105,51459=>15106,51463=>15107,51464=>15108,51465=>15109,51466=>15110,51467=>15111,51470=>15112,51472=>15113,51474=>15114,51475=>15115,51476=>15116,51477=>15117,51478=>15118,51479=>15119,51481=>15120,51482=>15121,51483=>15122,51484=>15123,51485=>15124,51486=>15125,51487=>15126,51488=>15127,51489=>15128,51490=>15129,51491=>15130,51492=>15131,51493=>15132,51494=>15133,51495=>15134,51496=>15135,51497=>15136,51498=>15137,51499=>15138,51501=>15139,51502=>15140,51503=>15141,51504=>15142,51505=>15143,51506=>15144,51507=>15145,51509=>15146,51510=>15147,51511=>15148,51512=>15149,51513=>15150,51514=>15151,51515=>15152,51516=>15153,51517=>15154,51518=>15155,51519=>15156,51520=>15157,51521=>15158,51522=>15159,51523=>15160,51524=>15161,51525=>15162,51526=>15163,51527=>15164,51528=>15165,51529=>15166,51530=>15167,51531=>15168,51532=>15169,51533=>15170,51534=>15171,51535=>15172,51538=>15173,51539=>15174,51541=>15175,51542=>15176,51543=>15177,51545=>15178,51546=>15179,51547=>15180,51548=>15181,51549=>15182,51550=>15183,51551=>15184,51554=>15185,51556=>15186,51557=>15187,51558=>15188,51559=>15189,51560=>15190,51561=>15191,51562=>15192,51563=>15193,51565=>15194,51566=>15195,51567=>15196,51569=>15197,51570=>15198,51571=>15199,51573=>15200,51574=>15201,51575=>15202,51576=>15203,51577=>15204,51578=>15205,51579=>15206,51581=>15207,51582=>15208,51583=>15209,51584=>15210,51585=>15211,51586=>15212,51587=>15213,51588=>15214,51589=>15215,51590=>15216,51591=>15217,51594=>15218,51595=>15219,51597=>15220,51598=>15221,51599=>15222,51601=>15223,51602=>15224,51603=>15225,51604=>15226,51605=>15227,51606=>15228,51607=>15229,51610=>15230,51612=>15231,51614=>15232,51615=>15233,51616=>15234,51617=>15235,51618=>15236,51619=>15237,51620=>15238,51621=>15239,51622=>15240,51623=>15241,51624=>15242,51625=>15243,51626=>15244,51627=>15245,51628=>15246,51629=>15247,51630=>15248,51631=>15249,51632=>15250,51633=>15251,51634=>15252,51635=>15253,51636=>15254,51637=>15255,51638=>15256,51639=>15257,51640=>15258,51641=>15259,51642=>15260,51643=>15261,51644=>15262,51645=>15263,51646=>15264,51647=>15265,51650=>15266,51651=>15267,51653=>15268,51654=>15269,51657=>15270,51659=>15271,51660=>15272,51661=>15273,51662=>15274,51663=>15275,51666=>15276,51668=>15277,51671=>15278,51672=>15279,51675=>15280,51678=>15281,51679=>15282,51681=>15283,51683=>15284,51685=>15285,51686=>15286,51688=>15287,51689=>15288,51690=>15289,51691=>15290,51694=>15291,51698=>15292,51699=>15293,51700=>15294,51701=>15295,51702=>15296,51703=>15297,51706=>15298,51707=>15299,51709=>15300,51710=>15301,51711=>15302,51713=>15303,51714=>15304,51715=>15305,51716=>15306,51717=>15307,51718=>15308,51719=>15309,51722=>15310,51726=>15311,51727=>15312,51728=>15313,51729=>15314,51730=>15315,51731=>15316,51733=>15317,51734=>15318,51735=>15319,51737=>15320,51738=>15321,51739=>15322,51740=>15323,51741=>15324,51742=>15325,51743=>15326,51744=>15327,51745=>15328,51746=>15329,51747=>15330,51748=>15331,51749=>15332,51750=>15333,51751=>15334,51752=>15335,51754=>15336,51755=>15337,51756=>15338,51757=>15339,51758=>15340,51759=>15341,51760=>15342,51761=>15343,51762=>15344,51763=>15345,51764=>15346,51765=>15347,51766=>15348,51767=>15349,51768=>15350,51769=>15351,51770=>15352,51771=>15353,51772=>15354,51773=>15355,51774=>15356,51775=>15357,51776=>15358,51777=>15359,51778=>15360,51779=>15361,51780=>15362,51781=>15363,51782=>15364,51783=>15365,51784=>15366,51785=>15367,51786=>15368,51787=>15369,51790=>15370,51791=>15371,51793=>15372,51794=>15373,51795=>15374,51797=>15375,51798=>15376,51799=>15377,51800=>15378,51801=>15379,51802=>15380,51803=>15381,51806=>15382,51810=>15383,51811=>15384,51812=>15385,51813=>15386,51814=>15387,51815=>15388,51817=>15389,51818=>15390,51819=>15391,51820=>15392,51821=>15393,51822=>15394,51823=>15395,51824=>15396,51825=>15397,51826=>15398,51827=>15399,51828=>15400,51829=>15401,51830=>15402,51831=>15403,51832=>15404,51833=>15405,51834=>15406,51835=>15407,51836=>15408,51838=>15409,51839=>15410,51840=>15411,51841=>15412,51842=>15413,51843=>15414,51845=>15415,51846=>15416,51847=>15417,51848=>15418,51849=>15419,51850=>15420,51851=>15421,51852=>15422,51853=>15423,51854=>15424,51855=>15425,51856=>15426,51857=>15427,51858=>15428,51859=>15429,51860=>15430,51861=>15431,51862=>15432,51863=>15433,51865=>15434,51866=>15435,51867=>15436,51868=>15437,51869=>15438,51870=>15439,51871=>15440,51872=>15441,51873=>15442,51874=>15443,51875=>15444,51876=>15445,51877=>15446,51878=>15447,51879=>15448,51880=>15449,51881=>15450,51882=>15451,51883=>15452,51884=>15453,51885=>15454,51886=>15455,51887=>15456,51888=>15457,51889=>15458,51890=>15459,51891=>15460,51892=>15461,51893=>15462,51894=>15463,51895=>15464,51896=>15465,51897=>15466,51898=>15467,51899=>15468,51902=>15469,51903=>15470,51905=>15471,51906=>15472,51907=>15473,51909=>15474,51910=>15475,51911=>15476,51912=>15477,51913=>15478,51914=>15479,51915=>15480,51918=>15481,51920=>15482,51922=>15483,51924=>15484,51925=>15485,51926=>15486,51927=>15487,51930=>15488,51931=>15489,51932=>15490,51933=>15491,51934=>15492,51935=>15493,51937=>15494,51938=>15495,51939=>15496,51940=>15497,51941=>15498,51942=>15499,51943=>15500,51944=>15501,51945=>15502,51946=>15503,51947=>15504,51949=>15505,51950=>15506,51951=>15507,51952=>15508,51953=>15509,51954=>15510,51955=>15511,51957=>15512,51958=>15513,51959=>15514,51960=>15515,51961=>15516,51962=>15517,51963=>15518,51964=>15519,51965=>15520,51966=>15521,51967=>15522,51968=>15523,51969=>15524,51970=>15525,51971=>15526,51972=>15527,51973=>15528,51974=>15529,51975=>15530,51977=>15531,51978=>15532,51979=>15533,51980=>15534,51981=>15535,51982=>15536,51983=>15537,51985=>15538,51986=>15539,51987=>15540,51989=>15541,51990=>15542,51991=>15543,51993=>15544,51994=>15545,51995=>15546,51996=>15547,51997=>15548,51998=>15549,51999=>15550,52002=>15551,52003=>15552,52004=>15553,52005=>15554,52006=>15555,52007=>15556,52008=>15557,52009=>15558,52010=>15559,52011=>15560,52012=>15561,52013=>15562,52014=>15563,52015=>15564,52016=>15565,52017=>15566,52018=>15567,52019=>15568,52020=>15569,52021=>15570,52022=>15571,52023=>15572,52024=>15573,52025=>15574,52026=>15575,52027=>15576,52028=>15577,52029=>15578,52030=>15579,52031=>15580,52032=>15581,52034=>15582,52035=>15583,52036=>15584,52037=>15585,52038=>15586,52039=>15587,52042=>15588,52043=>15589,52045=>15590,52046=>15591,52047=>15592,52049=>15593,52050=>15594,52051=>15595,52052=>15596,52053=>15597,52054=>15598,52055=>15599,52058=>15600,52059=>15601,52060=>15602,52062=>15603,52063=>15604,52064=>15605,52065=>15606,52066=>15607,52067=>15608,52069=>15609,52070=>15610,52071=>15611,52072=>15612,52073=>15613,52074=>15614,52075=>15615,52076=>15616,52077=>15617,52078=>15618,52079=>15619,52080=>15620,52081=>15621,52082=>15622,52083=>15623,52084=>15624,52085=>15625,52086=>15626,52087=>15627,52090=>15628,52091=>15629,52092=>15630,52093=>15631,52094=>15632,52095=>15633,52096=>15634,52097=>15635,52098=>15636,52099=>15637,52100=>15638,52101=>15639,52102=>15640,52103=>15641,52104=>15642,52105=>15643,52106=>15644,52107=>15645,52108=>15646,52109=>15647,52110=>15648,52111=>15649,52112=>15650,52113=>15651,52114=>15652,52115=>15653,52116=>15654,52117=>15655,52118=>15656,52119=>15657,52120=>15658,52121=>15659,52122=>15660,52123=>15661,52125=>15662,52126=>15663,52127=>15664,52128=>15665,52129=>15666,52130=>15667,52131=>15668,52132=>15669,52133=>15670,52134=>15671,52135=>15672,52136=>15673,52137=>15674,52138=>15675,52139=>15676,52140=>15677,52141=>15678,52142=>15679,52143=>15680,52144=>15681,52145=>15682,52146=>15683,52147=>15684,52148=>15685,52149=>15686,52150=>15687,52151=>15688,52153=>15689,52154=>15690,52155=>15691,52156=>15692,52157=>15693,52158=>15694,52159=>15695,52160=>15696,52161=>15697,52162=>15698,52163=>15699,52164=>15700,52165=>15701,52166=>15702,52167=>15703,52168=>15704,52169=>15705,52170=>15706,52171=>15707,52172=>15708,52173=>15709,52174=>15710,52175=>15711,52176=>15712,52177=>15713,52178=>15714,52179=>15715,52181=>15716,52182=>15717,52183=>15718,52184=>15719,52185=>15720,52186=>15721,52187=>15722,52188=>15723,52189=>15724,52190=>15725,52191=>15726,52192=>15727,52193=>15728,52194=>15729,52195=>15730,52197=>15731,52198=>15732,52200=>15733,52202=>15734,52203=>15735,52204=>15736,52205=>15737,52206=>15738,52207=>15739,52208=>15740,52209=>15741,52210=>15742,52211=>15743,52212=>15744,52213=>15745,52214=>15746,52215=>15747,52216=>15748,52217=>15749,52218=>15750,52219=>15751,52220=>15752,52221=>15753,52222=>15754,52223=>15755,52224=>15756,52225=>15757,52226=>15758,52227=>15759,52228=>15760,52229=>15761,52230=>15762,52231=>15763,52232=>15764,52233=>15765,52234=>15766,52235=>15767,52238=>15768,52239=>15769,52241=>15770,52242=>15771,52243=>15772,52245=>15773,52246=>15774,52247=>15775,52248=>15776,52249=>15777,52250=>15778,52251=>15779,52254=>15780,52255=>15781,52256=>15782,52259=>15783,52260=>15784,52261=>15785,52262=>15786,52266=>15787,52267=>15788,52269=>15789,52271=>15790,52273=>15791,52274=>15792,52275=>15793,52276=>15794,52277=>15795,52278=>15796,52279=>15797,52282=>15798,52287=>15799,52288=>15800,52289=>15801,52290=>15802,52291=>15803,52294=>15804,52295=>15805,52297=>15806,52298=>15807,52299=>15808,52301=>15809,52302=>15810,52303=>15811,52304=>15812,52305=>15813,52306=>15814,52307=>15815,52310=>15816,52314=>15817,52315=>15818,52316=>15819,52317=>15820,52318=>15821,52319=>15822,52321=>15823,52322=>15824,52323=>15825,52325=>15826,52327=>15827,52329=>15828,52330=>15829,52331=>15830,52332=>15831,52333=>15832,52334=>15833,52335=>15834,52337=>15835,52338=>15836,52339=>15837,52340=>15838,52342=>15839,52343=>15840,52344=>15841,52345=>15842,52346=>15843,52347=>15844,52348=>15845,52349=>15846,52350=>15847,52351=>15848,52352=>15849,52353=>15850,52354=>15851,52355=>15852,52356=>15853,52357=>15854,52358=>15855,52359=>15856,52360=>15857,52361=>15858,52362=>15859,52363=>15860,52364=>15861,52365=>15862,52366=>15863,52367=>15864,52368=>15865,52369=>15866,52370=>15867,52371=>15868,52372=>15869,52373=>15870,52374=>15871,52375=>15872,52378=>15873,52379=>15874,52381=>15875,52382=>15876,52383=>15877,52385=>15878,52386=>15879,52387=>15880,52388=>15881,52389=>15882,52390=>15883,52391=>15884,52394=>15885,52398=>15886,52399=>15887,52400=>15888,52401=>15889,52402=>15890,52403=>15891,52406=>15892,52407=>15893,52409=>15894,52410=>15895,52411=>15896,52413=>15897,52414=>15898,52415=>15899,52416=>15900,52417=>15901,52418=>15902,52419=>15903,52422=>15904,52424=>15905,52426=>15906,52427=>15907,52428=>15908,52429=>15909,52430=>15910,52431=>15911,52433=>15912,52434=>15913,52435=>15914,52437=>15915,52438=>15916,52439=>15917,52440=>15918,52441=>15919,52442=>15920,52443=>15921,52444=>15922,52445=>15923,52446=>15924,52447=>15925,52448=>15926,52449=>15927,52450=>15928,52451=>15929,52453=>15930,52454=>15931,52455=>15932,52456=>15933,52457=>15934,52458=>15935,52459=>15936,52461=>15937,52462=>15938,52463=>15939,52465=>15940,52466=>15941,52467=>15942,52468=>15943,52469=>15944,52470=>15945,52471=>15946,52472=>15947,52473=>15948,52474=>15949,52475=>15950,52476=>15951,52477=>15952,52478=>15953,52479=>15954,52480=>15955,52482=>15956,52483=>15957,52484=>15958,52485=>15959,52486=>15960,52487=>15961,52490=>15962,52491=>15963,52493=>15964,52494=>15965,52495=>15966,52497=>15967,52498=>15968,52499=>15969,52500=>15970,52501=>15971,52502=>15972,52503=>15973,52506=>15974,52508=>15975,52510=>15976,52511=>15977,52512=>15978,52513=>15979,52514=>15980,52515=>15981,52517=>15982,52518=>15983,52519=>15984,52521=>15985,52522=>15986,52523=>15987,52525=>15988,52526=>15989,52527=>15990,52528=>15991,52529=>15992,52530=>15993,52531=>15994,52532=>15995,52533=>15996,52534=>15997,52535=>15998,52536=>15999,52538=>16000,52539=>16001,52540=>16002,52541=>16003,52542=>16004,52543=>16005,52544=>16006,52545=>16007,52546=>16008,52547=>16009,52548=>16010,52549=>16011,52550=>16012,52551=>16013,52552=>16014,52553=>16015,52554=>16016,52555=>16017,52556=>16018,52557=>16019,52558=>16020,52559=>16021,52560=>16022,52561=>16023,52562=>16024,52563=>16025,52564=>16026,52565=>16027,52566=>16028,52567=>16029,52568=>16030,52569=>16031,52570=>16032,52571=>16033,52573=>16034,52574=>16035,52575=>16036,52577=>16037,52578=>16038,52579=>16039,52581=>16040,52582=>16041,52583=>16042,52584=>16043,52585=>16044,52586=>16045,52587=>16046,52590=>16047,52592=>16048,52594=>16049,52595=>16050,52596=>16051,52597=>16052,52598=>16053,52599=>16054,52601=>16055,52602=>16056,52603=>16057,52604=>16058,52605=>16059,52606=>16060,52607=>16061,52608=>16062,52609=>16063,52610=>16064,52611=>16065,52612=>16066,52613=>16067,52614=>16068,52615=>16069,52617=>16070,52618=>16071,52619=>16072,52620=>16073,52621=>16074,52622=>16075,52623=>16076,52624=>16077,52625=>16078,52626=>16079,52627=>16080,52630=>16081,52631=>16082,52633=>16083,52634=>16084,52635=>16085,52637=>16086,52638=>16087,52639=>16088,52640=>16089,52641=>16090,52642=>16091,52643=>16092,52646=>16093,52648=>16094,52650=>16095,52651=>16096,52652=>16097,52653=>16098,52654=>16099,52655=>16100,52657=>16101,52658=>16102,52659=>16103,52660=>16104,52661=>16105,52662=>16106,52663=>16107,52664=>16108,52665=>16109,52666=>16110,52667=>16111,52668=>16112,52669=>16113,52670=>16114,52671=>16115,52672=>16116,52673=>16117,52674=>16118,52675=>16119,52677=>16120,52678=>16121,52679=>16122,52680=>16123,52681=>16124,52682=>16125,52683=>16126,52685=>16127,52686=>16128,52687=>16129,52689=>16130,52690=>16131,52691=>16132,52692=>16133,52693=>16134,52694=>16135,52695=>16136,52696=>16137,52697=>16138,52698=>16139,52699=>16140,52700=>16141,52701=>16142,52702=>16143,52703=>16144,52704=>16145,52705=>16146,52706=>16147,52707=>16148,52708=>16149,52709=>16150,52710=>16151,52711=>16152,52713=>16153,52714=>16154,52715=>16155,52717=>16156,52718=>16157,52719=>16158,52721=>16159,52722=>16160,52723=>16161,52724=>16162,52725=>16163,52726=>16164,52727=>16165,52730=>16166,52732=>16167,52734=>16168,52735=>16169,52736=>16170,52737=>16171,52738=>16172,52739=>16173,52741=>16174,52742=>16175,52743=>16176,52745=>16177,52746=>16178,52747=>16179,52749=>16180,52750=>16181,52751=>16182,52752=>16183,52753=>16184,52754=>16185,52755=>16186,52757=>16187,52758=>16188,52759=>16189,52760=>16190,52762=>16191,52763=>16192,52764=>16193,52765=>16194,52766=>16195,52767=>16196,52770=>16197,52771=>16198,52773=>16199,52774=>16200,52775=>16201,52777=>16202,52778=>16203,52779=>16204,52780=>16205,52781=>16206,52782=>16207,52783=>16208,52786=>16209,52788=>16210,52790=>16211,52791=>16212,52792=>16213,52793=>16214,52794=>16215,52795=>16216,52796=>16217,52797=>16218,52798=>16219,52799=>16220,52800=>16221,52801=>16222,52802=>16223,52803=>16224,52804=>16225,52805=>16226,52806=>16227,52807=>16228,52808=>16229,52809=>16230,52810=>16231,52811=>16232,52812=>16233,52813=>16234,52814=>16235,52815=>16236,52816=>16237,52817=>16238,52818=>16239,52819=>16240,52820=>16241,52821=>16242,52822=>16243,52823=>16244,52826=>16245,52827=>16246,52829=>16247,52830=>16248,52834=>16249,52835=>16250,52836=>16251,52837=>16252,52838=>16253,52839=>16254,52842=>16255,52844=>16256,52846=>16257,52847=>16258,52848=>16259,52849=>16260,52850=>16261,52851=>16262,52854=>16263,52855=>16264,52857=>16265,52858=>16266,52859=>16267,52861=>16268,52862=>16269,52863=>16270,52864=>16271,52865=>16272,52866=>16273,52867=>16274,52870=>16275,52872=>16276,52874=>16277,52875=>16278,52876=>16279,52877=>16280,52878=>16281,52879=>16282,52882=>16283,52883=>16284,52885=>16285,52886=>16286,52887=>16287,52889=>16288,52890=>16289,52891=>16290,52892=>16291,52893=>16292,52894=>16293,52895=>16294,52898=>16295,52902=>16296,52903=>16297,52904=>16298,52905=>16299,52906=>16300,52907=>16301,52910=>16302,52911=>16303,52912=>16304,52913=>16305,52914=>16306,52915=>16307,52916=>16308,52917=>16309,52918=>16310,52919=>16311,52920=>16312,52921=>16313,52922=>16314,52923=>16315,52924=>16316,52925=>16317,52926=>16318,52927=>16319,52928=>16320,52930=>16321,52931=>16322,52932=>16323,52933=>16324,52934=>16325,52935=>16326,52936=>16327,52937=>16328,52938=>16329,52939=>16330,52940=>16331,52941=>16332,52942=>16333,52943=>16334,52944=>16335,52945=>16336,52946=>16337,52947=>16338,52948=>16339,52949=>16340,52950=>16341,52951=>16342,52952=>16343,52953=>16344,52954=>16345,52955=>16346,52956=>16347,52957=>16348,52958=>16349,52959=>16350,52960=>16351,52961=>16352,52962=>16353,52963=>16354,52966=>16355,52967=>16356,52969=>16357,52970=>16358,52973=>16359,52974=>16360,52975=>16361,52976=>16362,52977=>16363,52978=>16364,52979=>16365,52982=>16366,52986=>16367,52987=>16368,52988=>16369,52989=>16370,52990=>16371,52991=>16372,52994=>16373,52995=>16374,52997=>16375,52998=>16376,52999=>16377,53001=>16378,53002=>16379,53003=>16380,53004=>16381,53005=>16382,53006=>16383,53007=>16384,53010=>16385,53012=>16386,53014=>16387,53015=>16388,53016=>16389,53017=>16390,53018=>16391,53019=>16392,53021=>16393,53022=>16394,53023=>16395,53025=>16396,53026=>16397,53027=>16398,53029=>16399,53030=>16400,53031=>16401,53032=>16402,53033=>16403,53034=>16404,53035=>16405,53038=>16406,53042=>16407,53043=>16408,53044=>16409,53045=>16410,53046=>16411,53047=>16412,53049=>16413,53050=>16414,53051=>16415,53052=>16416,53053=>16417,53054=>16418,53055=>16419,53056=>16420,53057=>16421,53058=>16422,53059=>16423,53060=>16424,53061=>16425,53062=>16426,53063=>16427,53064=>16428,53065=>16429,53066=>16430,53067=>16431,53068=>16432,53069=>16433,53070=>16434,53071=>16435,53072=>16436,53073=>16437,53074=>16438,53075=>16439,53078=>16440,53079=>16441,53081=>16442,53082=>16443,53083=>16444,53085=>16445,53086=>16446,53087=>16447,53088=>16448,53089=>16449,53090=>16450,53091=>16451,53094=>16452,53096=>16453,53098=>16454,53099=>16455,53100=>16456,53101=>16457,53102=>16458,53103=>16459,53106=>16460,53107=>16461,53109=>16462,53110=>16463,53111=>16464,53113=>16465,53114=>16466,53115=>16467,53116=>16468,53117=>16469,53118=>16470,53119=>16471,53121=>16472,53122=>16473,53123=>16474,53124=>16475,53126=>16476,53127=>16477,53128=>16478,53129=>16479,53130=>16480,53131=>16481,53133=>16482,53134=>16483,53135=>16484,53136=>16485,53137=>16486,53138=>16487,53139=>16488,53140=>16489,53141=>16490,53142=>16491,53143=>16492,53144=>16493,53145=>16494,53146=>16495,53147=>16496,53148=>16497,53149=>16498,53150=>16499,53151=>16500,53152=>16501,53154=>16502,53155=>16503,53156=>16504,53157=>16505,53158=>16506,53159=>16507,53161=>16508,53162=>16509,53163=>16510,53164=>16511,53165=>16512,53166=>16513,53167=>16514,53169=>16515,53170=>16516,53171=>16517,53172=>16518,53173=>16519,53174=>16520,53175=>16521,53176=>16522,53177=>16523,53178=>16524,53179=>16525,53180=>16526,53181=>16527,53182=>16528,53183=>16529,53184=>16530,53185=>16531,53186=>16532,53187=>16533,53189=>16534,53190=>16535,53191=>16536,53192=>16537,53193=>16538,53194=>16539,53195=>16540,53196=>16541,53197=>16542,53198=>16543,53199=>16544,53200=>16545,53201=>16546,53202=>16547,53203=>16548,53204=>16549,53205=>16550,53206=>16551,53207=>16552,53208=>16553,53209=>16554,53210=>16555,53211=>16556,53212=>16557,53213=>16558,53214=>16559,53215=>16560,53218=>16561,53219=>16562,53221=>16563,53222=>16564,53223=>16565,53225=>16566,53226=>16567,53227=>16568,53228=>16569,53229=>16570,53230=>16571,53231=>16572,53234=>16573,53236=>16574,53238=>16575,53239=>16576,53240=>16577,53241=>16578,53242=>16579,53243=>16580,53245=>16581,53246=>16582,53247=>16583,53249=>16584,53250=>16585,53251=>16586,53253=>16587,53254=>16588,53255=>16589,53256=>16590,53257=>16591,53258=>16592,53259=>16593,53260=>16594,53261=>16595,53262=>16596,53263=>16597,53264=>16598,53266=>16599,53267=>16600,53268=>16601,53269=>16602,53270=>16603,53271=>16604,53273=>16605,53274=>16606,53275=>16607,53276=>16608,53277=>16609,53278=>16610,53279=>16611,53280=>16612,53281=>16613,53282=>16614,53283=>16615,53284=>16616,53285=>16617,53286=>16618,53287=>16619,53288=>16620,53289=>16621,53290=>16622,53291=>16623,53292=>16624,53294=>16625,53295=>16626,53296=>16627,53297=>16628,53298=>16629,53299=>16630,53302=>16631,53303=>16632,53305=>16633,53306=>16634,53307=>16635,53309=>16636,53310=>16637,53311=>16638,53312=>16639,53313=>16640,53314=>16641,53315=>16642,53318=>16643,53320=>16644,53322=>16645,53323=>16646,53324=>16647,53325=>16648,53326=>16649,53327=>16650,53329=>16651,53330=>16652,53331=>16653,53333=>16654,53334=>16655,53335=>16656,53337=>16657,53338=>16658,53339=>16659,53340=>16660,53341=>16661,53342=>16662,53343=>16663,53345=>16664,53346=>16665,53347=>16666,53348=>16667,53349=>16668,53350=>16669,53351=>16670,53352=>16671,53353=>16672,53354=>16673,53355=>16674,53358=>16675,53359=>16676,53361=>16677,53362=>16678,53363=>16679,53365=>16680,53366=>16681,53367=>16682,53368=>16683,53369=>16684,53370=>16685,53371=>16686,53374=>16687,53375=>16688,53376=>16689,53378=>16690,53379=>16691,53380=>16692,53381=>16693,53382=>16694,53383=>16695,53384=>16696,53385=>16697,53386=>16698,53387=>16699,53388=>16700,53389=>16701,53390=>16702,53391=>16703,53392=>16704,53393=>16705,53394=>16706,53395=>16707,53396=>16708,53397=>16709,53398=>16710,53399=>16711,53400=>16712,53401=>16713,53402=>16714,53403=>16715,53404=>16716,53405=>16717,53406=>16718,53407=>16719,53408=>16720,53409=>16721,53410=>16722,53411=>16723,53414=>16724,53415=>16725,53417=>16726,53418=>16727,53419=>16728,53421=>16729,53422=>16730,53423=>16731,53424=>16732,53425=>16733,53426=>16734,53427=>16735,53430=>16736,53432=>16737,53434=>16738,53435=>16739,53436=>16740,53437=>16741,53438=>16742,53439=>16743,53442=>16744,53443=>16745,53445=>16746,53446=>16747,53447=>16748,53450=>16749,53451=>16750,53452=>16751,53453=>16752,53454=>16753,53455=>16754,53458=>16755,53462=>16756,53463=>16757,53464=>16758,53465=>16759,53466=>16760,53467=>16761,53470=>16762,53471=>16763,53473=>16764,53474=>16765,53475=>16766,53477=>16767,53478=>16768,53479=>16769,53480=>16770,53481=>16771,53482=>16772,53483=>16773,53486=>16774,53490=>16775,53491=>16776,53492=>16777,53493=>16778,53494=>16779,53495=>16780,53497=>16781,53498=>16782,53499=>16783,53500=>16784,53501=>16785,53502=>16786,53503=>16787,53504=>16788,53505=>16789,53506=>16790,53507=>16791,53508=>16792,53509=>16793,53510=>16794,53511=>16795,53512=>16796,53513=>16797,53514=>16798,53515=>16799,53516=>16800,53518=>16801,53519=>16802,53520=>16803,53521=>16804,53522=>16805,53523=>16806,53524=>16807,53525=>16808,53526=>16809,53527=>16810,53528=>16811,53529=>16812,53530=>16813,53531=>16814,53532=>16815,53533=>16816,53534=>16817,53535=>16818,53536=>16819,53537=>16820,53538=>16821,53539=>16822,53540=>16823,53541=>16824,53542=>16825,53543=>16826,53544=>16827,53545=>16828,53546=>16829,53547=>16830,53548=>16831,53549=>16832,53550=>16833,53551=>16834,53554=>16835,53555=>16836,53557=>16837,53558=>16838,53559=>16839,53561=>16840,53563=>16841,53564=>16842,53565=>16843,53566=>16844,53567=>16845,53570=>16846,53574=>16847,53575=>16848,53576=>16849,53577=>16850,53578=>16851,53579=>16852,53582=>16853,53583=>16854,53585=>16855,53586=>16856,53587=>16857,53589=>16858,53590=>16859,53591=>16860,53592=>16861,53593=>16862,53594=>16863,53595=>16864,53598=>16865,53600=>16866,53602=>16867,53603=>16868,53604=>16869,53605=>16870,53606=>16871,53607=>16872,53609=>16873,53610=>16874,53611=>16875,53613=>16876,53614=>16877,53615=>16878,53616=>16879,53617=>16880,53618=>16881,53619=>16882,53620=>16883,53621=>16884,53622=>16885,53623=>16886,53624=>16887,53625=>16888,53626=>16889,53627=>16890,53629=>16891,53630=>16892,53631=>16893,53632=>16894,53633=>16895,53634=>16896,53635=>16897,53637=>16898,53638=>16899,53639=>16900,53641=>16901,53642=>16902,53643=>16903,53644=>16904,53645=>16905,53646=>16906,53647=>16907,53648=>16908,53649=>16909,53650=>16910,53651=>16911,53652=>16912,53653=>16913,53654=>16914,53655=>16915,53656=>16916,53657=>16917,53658=>16918,53659=>16919,53660=>16920,53661=>16921,53662=>16922,53663=>16923,53666=>16924,53667=>16925,53669=>16926,53670=>16927,53671=>16928,53673=>16929,53674=>16930,53675=>16931,53676=>16932,53677=>16933,53678=>16934,53679=>16935,53682=>16936,53684=>16937,53686=>16938,53687=>16939,53688=>16940,53689=>16941,53691=>16942,53693=>16943,53694=>16944,53695=>16945,53697=>16946,53698=>16947,53699=>16948,53700=>16949,53701=>16950,53702=>16951,53703=>16952,53704=>16953,53705=>16954,53706=>16955,53707=>16956,53708=>16957,53709=>16958,53710=>16959,53711=>16960,53712=>16961,53713=>16962,53714=>16963,53715=>16964,53716=>16965,53717=>16966,53718=>16967,53719=>16968,53721=>16969,53722=>16970,53723=>16971,53724=>16972,53725=>16973,53726=>16974,53727=>16975,53728=>16976,53729=>16977,53730=>16978,53731=>16979,53732=>16980,53733=>16981,53734=>16982,53735=>16983,53736=>16984,53737=>16985,53738=>16986,53739=>16987,53740=>16988,53741=>16989,53742=>16990,53743=>16991,53744=>16992,53745=>16993,53746=>16994,53747=>16995,53749=>16996,53750=>16997,53751=>16998,53753=>16999,53754=>17000,53755=>17001,53756=>17002,53757=>17003,53758=>17004,53759=>17005,53760=>17006,53761=>17007,53762=>17008,53763=>17009,53764=>17010,53765=>17011,53766=>17012,53768=>17013,53770=>17014,53771=>17015,53772=>17016,53773=>17017,53774=>17018,53775=>17019,53777=>17020,53778=>17021,53779=>17022,53780=>17023,53781=>17024,53782=>17025,53783=>17026,53784=>17027,53785=>17028,53786=>17029,53787=>17030,53788=>17031,53789=>17032,53790=>17033,53791=>17034,53792=>17035,53793=>17036,53794=>17037,53795=>17038,53796=>17039,53797=>17040,53798=>17041,53799=>17042,53800=>17043,53801=>17044,53802=>17045,53803=>17046,53806=>17047,53807=>17048,53809=>17049,53810=>17050,53811=>17051,53813=>17052,53814=>17053,53815=>17054,53816=>17055,53817=>17056,53818=>17057,53819=>17058,53822=>17059,53824=>17060,53826=>17061,53827=>17062,53828=>17063,53829=>17064,53830=>17065,53831=>17066,53833=>17067,53834=>17068,53835=>17069,53836=>17070,53837=>17071,53838=>17072,53839=>17073,53840=>17074,53841=>17075,53842=>17076,53843=>17077,53844=>17078,53845=>17079,53846=>17080,53847=>17081,53848=>17082,53849=>17083,53850=>17084,53851=>17085,53853=>17086,53854=>17087,53855=>17088,53856=>17089,53857=>17090,53858=>17091,53859=>17092,53861=>17093,53862=>17094,53863=>17095,53864=>17096,53865=>17097,53866=>17098,53867=>17099,53868=>17100,53869=>17101,53870=>17102,53871=>17103,53872=>17104,53873=>17105,53874=>17106,53875=>17107,53876=>17108,53877=>17109,53878=>17110,53879=>17111,53880=>17112,53881=>17113,53882=>17114,53883=>17115,53884=>17116,53885=>17117,53886=>17118,53887=>17119,53890=>17120,53891=>17121,53893=>17122,53894=>17123,53895=>17124,53897=>17125,53898=>17126,53899=>17127,53900=>17128,53901=>17129,53902=>17130,53903=>17131,53906=>17132,53907=>17133,53908=>17134,53910=>17135,53911=>17136,53912=>17137,53913=>17138,53914=>17139,53915=>17140,53917=>17141,53918=>17142,53919=>17143,53921=>17144,53922=>17145,53923=>17146,53925=>17147,53926=>17148,53927=>17149,53928=>17150,53929=>17151,53930=>17152,53931=>17153,53933=>17154,53934=>17155,53935=>17156,53936=>17157,53938=>17158,53939=>17159,53940=>17160,53941=>17161,53942=>17162,53943=>17163,53946=>17164,53947=>17165,53949=>17166,53950=>17167,53953=>17168,53955=>17169,53956=>17170,53957=>17171,53958=>17172,53959=>17173,53962=>17174,53964=>17175,53965=>17176,53966=>17177,53967=>17178,53968=>17179,53969=>17180,53970=>17181,53971=>17182,53973=>17183,53974=>17184,53975=>17185,53977=>17186,53978=>17187,53979=>17188,53981=>17189,53982=>17190,53983=>17191,53984=>17192,53985=>17193,53986=>17194,53987=>17195,53990=>17196,53991=>17197,53992=>17198,53993=>17199,53994=>17200,53995=>17201,53996=>17202,53997=>17203,53998=>17204,53999=>17205,54002=>17206,54003=>17207,54005=>17208,54006=>17209,54007=>17210,54009=>17211,54010=>17212,54011=>17213,54012=>17214,54013=>17215,54014=>17216,54015=>17217,54018=>17218,54020=>17219,54022=>17220,54023=>17221,54024=>17222,54025=>17223,54026=>17224,54027=>17225,54031=>17226,54033=>17227,54034=>17228,54035=>17229,54037=>17230,54039=>17231,54040=>17232,54041=>17233,54042=>17234,54043=>17235,54046=>17236,54050=>17237,54051=>17238,54052=>17239,54054=>17240,54055=>17241,54058=>17242,54059=>17243,54061=>17244,54062=>17245,54063=>17246,54065=>17247,54066=>17248,54067=>17249,54068=>17250,54069=>17251,54070=>17252,54071=>17253,54074=>17254,54078=>17255,54079=>17256,54080=>17257,54081=>17258,54082=>17259,54083=>17260,54086=>17261,54087=>17262,54088=>17263,54089=>17264,54090=>17265,54091=>17266,54092=>17267,54093=>17268,54094=>17269,54095=>17270,54096=>17271,54097=>17272,54098=>17273,54099=>17274,54100=>17275,54101=>17276,54102=>17277,54103=>17278,54104=>17279,54105=>17280,54106=>17281,54107=>17282,54108=>17283,54109=>17284,54110=>17285,54111=>17286,54112=>17287,54113=>17288,54114=>17289,54115=>17290,54116=>17291,54117=>17292,54118=>17293,54119=>17294,54120=>17295,54121=>17296,54122=>17297,54123=>17298,54124=>17299,54125=>17300,54126=>17301,54127=>17302,54128=>17303,54129=>17304,54130=>17305,54131=>17306,54132=>17307,54133=>17308,54134=>17309,54135=>17310,54136=>17311,54137=>17312,54138=>17313,54139=>17314,54142=>17315,54143=>17316,54145=>17317,54146=>17318,54147=>17319,54149=>17320,54150=>17321,54151=>17322,54152=>17323,54153=>17324,54154=>17325,54155=>17326,54158=>17327,54162=>17328,54163=>17329,54164=>17330,54165=>17331,54166=>17332,54167=>17333,54170=>17334,54171=>17335,54173=>17336,54174=>17337,54175=>17338,54177=>17339,54178=>17340,54179=>17341,54180=>17342,54181=>17343,54182=>17344,54183=>17345,54186=>17346,54188=>17347,54190=>17348,54191=>17349,54192=>17350,54193=>17351,54194=>17352,54195=>17353,54197=>17354,54198=>17355,54199=>17356,54201=>17357,54202=>17358,54203=>17359,54205=>17360,54206=>17361,54207=>17362,54208=>17363,54209=>17364,54210=>17365,54211=>17366,54214=>17367,54215=>17368,54218=>17369,54219=>17370,54220=>17371,54221=>17372,54222=>17373,54223=>17374,54225=>17375,54226=>17376,54227=>17377,54228=>17378,54229=>17379,54230=>17380,54231=>17381,54233=>17382,54234=>17383,54235=>17384,54236=>17385,54237=>17386,54238=>17387,54239=>17388,54240=>17389,54242=>17390,54244=>17391,54245=>17392,54246=>17393,54247=>17394,54248=>17395,54249=>17396,54250=>17397,54251=>17398,54254=>17399,54255=>17400,54257=>17401,54258=>17402,54259=>17403,54261=>17404,54262=>17405,54263=>17406,54264=>17407,54265=>17408,54266=>17409,54267=>17410,54270=>17411,54272=>17412,54274=>17413,54275=>17414,54276=>17415,54277=>17416,54278=>17417,54279=>17418,54281=>17419,54282=>17420,54283=>17421,54284=>17422,54285=>17423,54286=>17424,54287=>17425,54288=>17426,54289=>17427,54290=>17428,54291=>17429,54292=>17430,54293=>17431,54294=>17432,54295=>17433,54296=>17434,54297=>17435,54298=>17436,54299=>17437,54300=>17438,54302=>17439,54303=>17440,54304=>17441,54305=>17442,54306=>17443,54307=>17444,54308=>17445,54309=>17446,54310=>17447,54311=>17448,54312=>17449,54313=>17450,54314=>17451,54315=>17452,54316=>17453,54317=>17454,54318=>17455,54319=>17456,54320=>17457,54321=>17458,54322=>17459,54323=>17460,54324=>17461,54325=>17462,54326=>17463,54327=>17464,54328=>17465,54329=>17466,54330=>17467,54331=>17468,54332=>17469,54333=>17470,54334=>17471,54335=>17472,54337=>17473,54338=>17474,54339=>17475,54341=>17476,54342=>17477,54343=>17478,54344=>17479,54345=>17480,54346=>17481,54347=>17482,54348=>17483,54349=>17484,54350=>17485,54351=>17486,54352=>17487,54353=>17488,54354=>17489,54355=>17490,54356=>17491,54357=>17492,54358=>17493,54359=>17494,54360=>17495,54361=>17496,54362=>17497,54363=>17498,54365=>17499,54366=>17500,54367=>17501,54369=>17502,54370=>17503,54371=>17504,54373=>17505,54374=>17506,54375=>17507,54376=>17508,54377=>17509,54378=>17510,54379=>17511,54380=>17512,54382=>17513,54384=>17514,54385=>17515,54386=>17516,54387=>17517,54388=>17518,54389=>17519,54390=>17520,54391=>17521,54394=>17522,54395=>17523,54397=>17524,54398=>17525,54401=>17526,54403=>17527,54404=>17528,54405=>17529,54406=>17530,54407=>17531,54410=>17532,54412=>17533,54414=>17534,54415=>17535,54416=>17536,54417=>17537,54418=>17538,54419=>17539,54421=>17540,54422=>17541,54423=>17542,54424=>17543,54425=>17544,54426=>17545,54427=>17546,54428=>17547,54429=>17548,54430=>17549,54431=>17550,54432=>17551,54433=>17552,54434=>17553,54435=>17554,54436=>17555,54437=>17556,54438=>17557,54439=>17558,54440=>17559,54442=>17560,54443=>17561,54444=>17562,54445=>17563,54446=>17564,54447=>17565,54448=>17566,54449=>17567,54450=>17568,54451=>17569,54452=>17570,54453=>17571,54454=>17572,54455=>17573,54456=>17574,54457=>17575,54458=>17576,54459=>17577,54460=>17578,54461=>17579,54462=>17580,54463=>17581,54464=>17582,54465=>17583,54466=>17584,54467=>17585,54468=>17586,54469=>17587,54470=>17588,54471=>17589,54472=>17590,54473=>17591,54474=>17592,54475=>17593,54477=>17594,54478=>17595,54479=>17596,54481=>17597,54482=>17598,54483=>17599,54485=>17600,54486=>17601,54487=>17602,54488=>17603,54489=>17604,54490=>17605,54491=>17606,54493=>17607,54494=>17608,54496=>17609,54497=>17610,54498=>17611,54499=>17612,54500=>17613,54501=>17614,54502=>17615,54503=>17616,54505=>17617,54506=>17618,54507=>17619,54509=>17620,54510=>17621,54511=>17622,54513=>17623,54514=>17624,54515=>17625,54516=>17626,54517=>17627,54518=>17628,54519=>17629,54521=>17630,54522=>17631,54524=>17632,54526=>17633,54527=>17634,54528=>17635,54529=>17636,54530=>17637,54531=>17638,54533=>17639,54534=>17640,54535=>17641,54537=>17642,54538=>17643,54539=>17644,54541=>17645,54542=>17646,54543=>17647,54544=>17648,54545=>17649,54546=>17650,54547=>17651,54550=>17652,54552=>17653,54553=>17654,54554=>17655,54555=>17656,54556=>17657,54557=>17658,54558=>17659,54559=>17660,54560=>17661,54561=>17662,54562=>17663,54563=>17664,54564=>17665,54565=>17666,54566=>17667,54567=>17668,54568=>17669,54569=>17670,54570=>17671,54571=>17672,54572=>17673,54573=>17674,54574=>17675,54575=>17676,54576=>17677,54577=>17678,54578=>17679,54579=>17680,54580=>17681,54581=>17682,54582=>17683,54583=>17684,54584=>17685,54585=>17686,54586=>17687,54587=>17688,54590=>17689,54591=>17690,54593=>17691,54594=>17692,54595=>17693,54597=>17694,54598=>17695,54599=>17696,54600=>17697,54601=>17698,54602=>17699,54603=>17700,54606=>17701,54608=>17702,54610=>17703,54611=>17704,54612=>17705,54613=>17706,54614=>17707,54615=>17708,54618=>17709,54619=>17710,54621=>17711,54622=>17712,54623=>17713,54625=>17714,54626=>17715,54627=>17716,54628=>17717,54630=>17718,54631=>17719,54634=>17720,54636=>17721,54638=>17722,54639=>17723,54640=>17724,54641=>17725,54642=>17726,54643=>17727,54646=>17728,54647=>17729,54649=>17730,54650=>17731,54651=>17732,54653=>17733,54654=>17734,54655=>17735,54656=>17736,54657=>17737,54658=>17738,54659=>17739,54662=>17740,54666=>17741,54667=>17742,54668=>17743,54669=>17744,54670=>17745,54671=>17746,54673=>17747,54674=>17748,54675=>17749,54676=>17750,54677=>17751,54678=>17752,54679=>17753,54680=>17754,54681=>17755,54682=>17756,54683=>17757,54684=>17758,54685=>17759,54686=>17760,54687=>17761,54688=>17762,54689=>17763,54690=>17764,54691=>17765,54692=>17766,54694=>17767,54695=>17768,54696=>17769,54697=>17770,54698=>17771,54699=>17772,54700=>17773,54701=>17774,54702=>17775,54703=>17776,54704=>17777,54705=>17778,54706=>17779,54707=>17780,54708=>17781,54709=>17782,54710=>17783,54711=>17784,54712=>17785,54713=>17786,54714=>17787,54715=>17788,54716=>17789,54717=>17790,54718=>17791,54719=>17792,54720=>17793,54721=>17794,54722=>17795,54723=>17796,54724=>17797,54725=>17798,54726=>17799,54727=>17800,54730=>17801,54731=>17802,54733=>17803,54734=>17804,54735=>17805,54737=>17806,54739=>17807,54740=>17808,54741=>17809,54742=>17810,54743=>17811,54746=>17812,54748=>17813,54750=>17814,54751=>17815,54752=>17816,54753=>17817,54754=>17818,54755=>17819,54758=>17820,54759=>17821,54761=>17822,54762=>17823,54763=>17824,54765=>17825,54766=>17826,54767=>17827,54768=>17828,54769=>17829,54770=>17830,54771=>17831,54774=>17832,54776=>17833,54778=>17834,54779=>17835,54780=>17836,54781=>17837,54782=>17838,54783=>17839,54786=>17840,54787=>17841,54789=>17842,54790=>17843,54791=>17844,54793=>17845,54794=>17846,54795=>17847,54796=>17848,54797=>17849,54798=>17850,54799=>17851,54802=>17852,54806=>17853,54807=>17854,54808=>17855,54809=>17856,54810=>17857,54811=>17858,54813=>17859,54814=>17860,54815=>17861,54817=>17862,54818=>17863,54819=>17864,54821=>17865,54822=>17866,54823=>17867,54824=>17868,54825=>17869,54826=>17870,54827=>17871,54828=>17872,54830=>17873,54831=>17874,54832=>17875,54833=>17876,54834=>17877,54835=>17878,54836=>17879,54837=>17880,54838=>17881,54839=>17882,54842=>17883,54843=>17884,54845=>17885,54846=>17886,54847=>17887,54849=>17888,54850=>17889,54851=>17890,54852=>17891,54854=>17892,54855=>17893,54858=>17894,54860=>17895,54862=>17896,54863=>17897,54864=>17898,54866=>17899,54867=>17900,54870=>17901,54871=>17902,54873=>17903,54874=>17904,54875=>17905,54877=>17906,54878=>17907,54879=>17908,54880=>17909,54881=>17910,54882=>17911,54883=>17912,54884=>17913,54885=>17914,54886=>17915,54888=>17916,54890=>17917,54891=>17918,54892=>17919,54893=>17920,54894=>17921,54895=>17922,54898=>17923,54899=>17924,54901=>17925,54902=>17926,54903=>17927,54904=>17928,54905=>17929,54906=>17930,54907=>17931,54908=>17932,54909=>17933,54910=>17934,54911=>17935,54912=>17936,54913=>17937,54914=>17938,54916=>17939,54918=>17940,54919=>17941,54920=>17942,54921=>17943,54922=>17944,54923=>17945,54926=>17946,54927=>17947,54929=>17948,54930=>17949,54931=>17950,54933=>17951,54934=>17952,54935=>17953,54936=>17954,54937=>17955,54938=>17956,54939=>17957,54940=>17958,54942=>17959,54944=>17960,54946=>17961,54947=>17962,54948=>17963,54949=>17964,54950=>17965,54951=>17966,54953=>17967,54954=>17968,54955=>17969,54957=>17970,54958=>17971,54959=>17972,54961=>17973,54962=>17974,54963=>17975,54964=>17976,54965=>17977,54966=>17978,54967=>17979,54968=>17980,54970=>17981,54972=>17982,54973=>17983,54974=>17984,54975=>17985,54976=>17986,54977=>17987,54978=>17988,54979=>17989,54982=>17990,54983=>17991,54985=>17992,54986=>17993,54987=>17994,54989=>17995,54990=>17996,54991=>17997,54992=>17998,54994=>17999,54995=>18000,54997=>18001,54998=>18002,55000=>18003,55002=>18004,55003=>18005,55004=>18006,55005=>18007,55006=>18008,55007=>18009,55009=>18010,55010=>18011,55011=>18012,55013=>18013,55014=>18014,55015=>18015,55017=>18016,55018=>18017,55019=>18018,55020=>18019,55021=>18020,55022=>18021,55023=>18022,55025=>18023,55026=>18024,55027=>18025,55028=>18026,55030=>18027,55031=>18028,55032=>18029,55033=>18030,55034=>18031,55035=>18032,55038=>18033,55039=>18034,55041=>18035,55042=>18036,55043=>18037,55045=>18038,55046=>18039,55047=>18040,55048=>18041,55049=>18042,55050=>18043,55051=>18044,55052=>18045,55053=>18046,55054=>18047,55055=>18048,55056=>18049,55058=>18050,55059=>18051,55060=>18052,55061=>18053,55062=>18054,55063=>18055,55066=>18056,55067=>18057,55069=>18058,55070=>18059,55071=>18060,55073=>18061,55074=>18062,55075=>18063,55076=>18064,55077=>18065,55078=>18066,55079=>18067,55082=>18068,55084=>18069,55086=>18070,55087=>18071,55088=>18072,55089=>18073,55090=>18074,55091=>18075,55094=>18076,55095=>18077,55097=>18078,55098=>18079,55099=>18080,55101=>18081,55102=>18082,55103=>18083,55104=>18084,55105=>18085,55106=>18086,55107=>18087,55109=>18088,55110=>18089,55112=>18090,55114=>18091,55115=>18092,55116=>18093,55117=>18094,55118=>18095,55119=>18096,55122=>18097,55123=>18098,55125=>18099,55130=>18100,55131=>18101,55132=>18102,55133=>18103,55134=>18104,55135=>18105,55138=>18106,55140=>18107,55142=>18108,55143=>18109,55144=>18110,55146=>18111,55147=>18112,55149=>18113,55150=>18114,55151=>18115,55153=>18116,55154=>18117,55155=>18118,55157=>18119,55158=>18120,55159=>18121,55160=>18122,55161=>18123,55162=>18124,55163=>18125,55166=>18126,55167=>18127,55168=>18128,55170=>18129,55171=>18130,55172=>18131,55173=>18132,55174=>18133,55175=>18134,55178=>18135,55179=>18136,55181=>18137,55182=>18138,55183=>18139,55185=>18140,55186=>18141,55187=>18142,55188=>18143,55189=>18144,55190=>18145,55191=>18146,55194=>18147,55196=>18148,55198=>18149,55199=>18150,55200=>18151,55201=>18152,55202=>18153,55203=>18154); +// --- EOF --- diff --git a/tcpdf/fonts/zapfdingbats.php b/tcpdf/fonts/zapfdingbats.php new file mode 100644 index 0000000..4c0bd75 --- /dev/null +++ b/tcpdf/fonts/zapfdingbats.php @@ -0,0 +1,12 @@ +<?php +// TCPDF FONT FILE DESCRIPTION +$type='core'; +$name='ZapfDingbats'; +$up=-100; +$ut=50; +$dw=746; +$diff=''; +$enc=''; +$desc=array('Flags'=>4,'FontBBox'=>'[-1 -143 981 820]','ItalicAngle'=>0,'Ascent'=>820,'Descent'=>-143,'Leading'=>0,'CapHeight'=>820,'StemV'=>90,'StemH'=>28,'AvgWidth'=>746,'MaxWidth'=>1016,'MissingWidth'=>746); +$cw=array(0=>746,1=>746,2=>746,3=>746,4=>746,5=>746,6=>746,7=>746,8=>746,9=>746,10=>746,11=>746,12=>746,13=>746,14=>746,15=>746,16=>746,17=>746,18=>746,19=>746,20=>746,21=>746,22=>746,23=>746,24=>746,25=>746,26=>746,27=>746,28=>746,29=>746,30=>746,31=>746,32=>278,33=>974,34=>961,35=>974,36=>980,37=>719,38=>789,39=>790,40=>791,41=>690,42=>960,43=>939,44=>549,45=>855,46=>911,47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677,57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786,67=>788,68=>788,69=>790,70=>793,71=>794,72=>816,73=>823,74=>789,75=>841,76=>823,77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695,87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815,97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713,106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759,115=>892,116=>892,117=>788,118=>784,119=>438,120=>138,121=>277,122=>415,123=>392,124=>392,125=>668,126=>668,127=>746,128=>390,129=>390,130=>317,131=>317,132=>276,133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334,142=>746,143=>746,144=>746,145=>746,146=>746,147=>746,148=>746,149=>746,150=>746,151=>746,152=>746,153=>746,154=>746,155=>746,156=>746,157=>746,158=>746,159=>746,160=>746,161=>732,162=>544,163=>544,164=>910,165=>667,166=>760,167=>760,168=>776,169=>595,170=>694,171=>626,172=>788,173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788,182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788,191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788,200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788,209=>788,210=>788,211=>788,212=>894,213=>838,214=>1016,215=>458,216=>748,217=>924,218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924,227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867,236=>867,237=>696,238=>696,239=>874,240=>746,241=>874,242=>760,243=>946,244=>771,245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970,254=>918,255=>746); +// --- EOF --- diff --git a/tcpdf/include/barcodes/datamatrix.php b/tcpdf/include/barcodes/datamatrix.php new file mode 100644 index 0000000..19b46fa --- /dev/null +++ b/tcpdf/include/barcodes/datamatrix.php @@ -0,0 +1,1176 @@ +<?php +//============================================================+ +// File name : datamatrix.php +// Version : 1.0.008 +// Begin : 2010-06-07 +// Last Update : 2014-05-06 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2010-2014 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// DESCRIPTION : +// +// Class to create DataMatrix ECC 200 barcode arrays for TCPDF class. +// DataMatrix (ISO/IEC 16022:2006) is a 2-dimensional bar code. +//============================================================+ + +/** +* @file +* Class to create DataMatrix ECC 200 barcode arrays for TCPDF class. +* DataMatrix (ISO/IEC 16022:2006) is a 2-dimensional bar code. +* +* @package com.tecnick.tcpdf +* @author Nicola Asuni +* @version 1.0.008 +*/ + +// custom definitions +if (!defined('DATAMATRIXDEFS')) { + + /** + * Indicate that definitions for this class are set + */ + define('DATAMATRIXDEFS', true); + + // ----------------------------------------------------- + +} // end of custom definitions + +// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# + + +/** +* ASCII encoding: ASCII character 0 to 127 (1 byte per CW) +*/ +define('ENC_ASCII', 0); + +/** +* C40 encoding: Upper-case alphanumeric (3/2 bytes per CW) +*/ +define('ENC_C40', 1); + +/** +* TEXT encoding: Lower-case alphanumeric (3/2 bytes per CW) +*/ +define('ENC_TXT', 2); + +/** +* X12 encoding: ANSI X12 (3/2 byte per CW) +*/ +define('ENC_X12', 3); + +/** +* EDIFACT encoding: ASCII character 32 to 94 (4/3 bytes per CW) +*/ +define('ENC_EDF', 4); + +/** +* BASE 256 encoding: ASCII character 0 to 255 (1 byte per CW) +*/ +define('ENC_BASE256', 5); + +/** +* ASCII extended encoding: ASCII character 128 to 255 (1/2 byte per CW) +*/ +define('ENC_ASCII_EXT', 6); + +/** +* ASCII number encoding: ASCII digits (2 bytes per CW) +*/ +define('ENC_ASCII_NUM', 7); + +/** +* @class Datamatrix +* Class to create DataMatrix ECC 200 barcode arrays for TCPDF class. +* DataMatrix (ISO/IEC 16022:2006) is a 2-dimensional bar code. +* +* @package com.tecnick.tcpdf +* @author Nicola Asuni +* @version 1.0.004 +*/ +class Datamatrix { + + /** + * Barcode array to be returned which is readable by TCPDF. + * @protected + */ + protected $barcode_array = array(); + + /** + * Store last used encoding for data codewords. + * @protected + */ + protected $last_enc = ENC_ASCII; + + /** + * Table of Data Matrix ECC 200 Symbol Attributes:<ul> + * <li>total matrix rows (including finder pattern)</li> + * <li>total matrix cols (including finder pattern)</li> + * <li>total matrix rows (without finder pattern)</li> + * <li>total matrix cols (without finder pattern)</li> + * <li>region data rows (with finder pattern)</li> + * <li>region data col (with finder pattern)</li> + * <li>region data rows (without finder pattern)</li> + * <li>region data col (without finder pattern)</li> + * <li>horizontal regions</li> + * <li>vertical regions</li> + * <li>regions</li> + * <li>data codewords</li> + * <li>error codewords</li> + * <li>blocks</li> + * <li>data codewords per block</li> + * <li>error codewords per block</li> + * </ul> + * @protected + */ + protected $symbattr = array( + // square form --------------------------------------------------------------------------------------- + array(0x00a,0x00a,0x008,0x008,0x00a,0x00a,0x008,0x008,0x001,0x001,0x001,0x003,0x005,0x001,0x003,0x005), // 10x10 + array(0x00c,0x00c,0x00a,0x00a,0x00c,0x00c,0x00a,0x00a,0x001,0x001,0x001,0x005,0x007,0x001,0x005,0x007), // 12x12 + array(0x00e,0x00e,0x00c,0x00c,0x00e,0x00e,0x00c,0x00c,0x001,0x001,0x001,0x008,0x00a,0x001,0x008,0x00a), // 14x14 + array(0x010,0x010,0x00e,0x00e,0x010,0x010,0x00e,0x00e,0x001,0x001,0x001,0x00c,0x00c,0x001,0x00c,0x00c), // 16x16 + array(0x012,0x012,0x010,0x010,0x012,0x012,0x010,0x010,0x001,0x001,0x001,0x012,0x00e,0x001,0x012,0x00e), // 18x18 + array(0x014,0x014,0x012,0x012,0x014,0x014,0x012,0x012,0x001,0x001,0x001,0x016,0x012,0x001,0x016,0x012), // 20x20 + array(0x016,0x016,0x014,0x014,0x016,0x016,0x014,0x014,0x001,0x001,0x001,0x01e,0x014,0x001,0x01e,0x014), // 22x22 + array(0x018,0x018,0x016,0x016,0x018,0x018,0x016,0x016,0x001,0x001,0x001,0x024,0x018,0x001,0x024,0x018), // 24x24 + array(0x01a,0x01a,0x018,0x018,0x01a,0x01a,0x018,0x018,0x001,0x001,0x001,0x02c,0x01c,0x001,0x02c,0x01c), // 26x26 + array(0x020,0x020,0x01c,0x01c,0x010,0x010,0x00e,0x00e,0x002,0x002,0x004,0x03e,0x024,0x001,0x03e,0x024), // 32x32 + array(0x024,0x024,0x020,0x020,0x012,0x012,0x010,0x010,0x002,0x002,0x004,0x056,0x02a,0x001,0x056,0x02a), // 36x36 + array(0x028,0x028,0x024,0x024,0x014,0x014,0x012,0x012,0x002,0x002,0x004,0x072,0x030,0x001,0x072,0x030), // 40x40 + array(0x02c,0x02c,0x028,0x028,0x016,0x016,0x014,0x014,0x002,0x002,0x004,0x090,0x038,0x001,0x090,0x038), // 44x44 + array(0x030,0x030,0x02c,0x02c,0x018,0x018,0x016,0x016,0x002,0x002,0x004,0x0ae,0x044,0x001,0x0ae,0x044), // 48x48 + array(0x034,0x034,0x030,0x030,0x01a,0x01a,0x018,0x018,0x002,0x002,0x004,0x0cc,0x054,0x002,0x066,0x02a), // 52x52 + array(0x040,0x040,0x038,0x038,0x010,0x010,0x00e,0x00e,0x004,0x004,0x010,0x118,0x070,0x002,0x08c,0x038), // 64x64 + array(0x048,0x048,0x040,0x040,0x012,0x012,0x010,0x010,0x004,0x004,0x010,0x170,0x090,0x004,0x05c,0x024), // 72x72 + array(0x050,0x050,0x048,0x048,0x014,0x014,0x012,0x012,0x004,0x004,0x010,0x1c8,0x0c0,0x004,0x072,0x030), // 80x80 + array(0x058,0x058,0x050,0x050,0x016,0x016,0x014,0x014,0x004,0x004,0x010,0x240,0x0e0,0x004,0x090,0x038), // 88x88 + array(0x060,0x060,0x058,0x058,0x018,0x018,0x016,0x016,0x004,0x004,0x010,0x2b8,0x110,0x004,0x0ae,0x044), // 96x96 + array(0x068,0x068,0x060,0x060,0x01a,0x01a,0x018,0x018,0x004,0x004,0x010,0x330,0x150,0x006,0x088,0x038), // 104x104 + array(0x078,0x078,0x06c,0x06c,0x014,0x014,0x012,0x012,0x006,0x006,0x024,0x41a,0x198,0x006,0x0af,0x044), // 120x120 + array(0x084,0x084,0x078,0x078,0x016,0x016,0x014,0x014,0x006,0x006,0x024,0x518,0x1f0,0x008,0x0a3,0x03e), // 132x132 + array(0x090,0x090,0x084,0x084,0x018,0x018,0x016,0x016,0x006,0x006,0x024,0x616,0x26c,0x00a,0x09c,0x03e), // 144x144 + // rectangular form (currently unused) --------------------------------------------------------------------------- + array(0x008,0x012,0x006,0x010,0x008,0x012,0x006,0x010,0x001,0x001,0x001,0x005,0x007,0x001,0x005,0x007), // 8x18 + array(0x008,0x020,0x006,0x01c,0x008,0x010,0x006,0x00e,0x001,0x002,0x002,0x00a,0x00b,0x001,0x00a,0x00b), // 8x32 + array(0x00c,0x01a,0x00a,0x018,0x00c,0x01a,0x00a,0x018,0x001,0x001,0x001,0x010,0x00e,0x001,0x010,0x00e), // 12x26 + array(0x00c,0x024,0x00a,0x020,0x00c,0x012,0x00a,0x010,0x001,0x002,0x002,0x00c,0x012,0x001,0x00c,0x012), // 12x36 + array(0x010,0x024,0x00e,0x020,0x010,0x012,0x00e,0x010,0x001,0x002,0x002,0x020,0x018,0x001,0x020,0x018), // 16x36 + array(0x010,0x030,0x00e,0x02c,0x010,0x018,0x00e,0x016,0x001,0x002,0x002,0x031,0x01c,0x001,0x031,0x01c) // 16x48 + ); + + /** + * Map encodation modes whit character sets. + * @protected + */ + protected $chset_id = array(ENC_C40 => 'C40', ENC_TXT => 'TXT', ENC_X12 =>'X12'); + + /** + * Basic set of characters for each encodation mode. + * @protected + */ + protected $chset = array( + 'C40' => array( // Basic set for C40 ---------------------------------------------------------------------------- + 'S1'=>0x00,'S2'=>0x01,'S3'=>0x02,0x20=>0x03,0x30=>0x04,0x31=>0x05,0x32=>0x06,0x33=>0x07,0x34=>0x08,0x35=>0x09, // + 0x36=>0x0a,0x37=>0x0b,0x38=>0x0c,0x39=>0x0d,0x41=>0x0e,0x42=>0x0f,0x43=>0x10,0x44=>0x11,0x45=>0x12,0x46=>0x13, // + 0x47=>0x14,0x48=>0x15,0x49=>0x16,0x4a=>0x17,0x4b=>0x18,0x4c=>0x19,0x4d=>0x1a,0x4e=>0x1b,0x4f=>0x1c,0x50=>0x1d, // + 0x51=>0x1e,0x52=>0x1f,0x53=>0x20,0x54=>0x21,0x55=>0x22,0x56=>0x23,0x57=>0x24,0x58=>0x25,0x59=>0x26,0x5a=>0x27),// + 'TXT' => array( // Basic set for TEXT --------------------------------------------------------------------------- + 'S1'=>0x00,'S2'=>0x01,'S3'=>0x02,0x20=>0x03,0x30=>0x04,0x31=>0x05,0x32=>0x06,0x33=>0x07,0x34=>0x08,0x35=>0x09, // + 0x36=>0x0a,0x37=>0x0b,0x38=>0x0c,0x39=>0x0d,0x61=>0x0e,0x62=>0x0f,0x63=>0x10,0x64=>0x11,0x65=>0x12,0x66=>0x13, // + 0x67=>0x14,0x68=>0x15,0x69=>0x16,0x6a=>0x17,0x6b=>0x18,0x6c=>0x19,0x6d=>0x1a,0x6e=>0x1b,0x6f=>0x1c,0x70=>0x1d, // + 0x71=>0x1e,0x72=>0x1f,0x73=>0x20,0x74=>0x21,0x75=>0x22,0x76=>0x23,0x77=>0x24,0x78=>0x25,0x79=>0x26,0x7a=>0x27),// + 'SH1' => array( // Shift 1 set ---------------------------------------------------------------------------------- + 0x00=>0x00,0x01=>0x01,0x02=>0x02,0x03=>0x03,0x04=>0x04,0x05=>0x05,0x06=>0x06,0x07=>0x07,0x08=>0x08,0x09=>0x09, // + 0x0a=>0x0a,0x0b=>0x0b,0x0c=>0x0c,0x0d=>0x0d,0x0e=>0x0e,0x0f=>0x0f,0x10=>0x10,0x11=>0x11,0x12=>0x12,0x13=>0x13, // + 0x14=>0x14,0x15=>0x15,0x16=>0x16,0x17=>0x17,0x18=>0x18,0x19=>0x19,0x1a=>0x1a,0x1b=>0x1b,0x1c=>0x1c,0x1d=>0x1d, // + 0x1e=>0x1e,0x1f=>0x1f), // + 'SH2' => array( // Shift 2 set ---------------------------------------------------------------------------------- + 0x21=>0x00,0x22=>0x01,0x23=>0x02,0x24=>0x03,0x25=>0x04,0x26=>0x05,0x27=>0x06,0x28=>0x07,0x29=>0x08,0x2a=>0x09, // + 0x2b=>0x0a,0x2c=>0x0b,0x2d=>0x0c,0x2e=>0x0d,0x2f=>0x0e,0x3a=>0x0f,0x3b=>0x10,0x3c=>0x11,0x3d=>0x12,0x3e=>0x13, // + 0x3f=>0x14,0x40=>0x15,0x5b=>0x16,0x5c=>0x17,0x5d=>0x18,0x5e=>0x19,0x5f=>0x1a,'F1'=>0x1b,'US'=>0x1e), // + 'S3C' => array( // Shift 3 set for C40 -------------------------------------------------------------------------- + 0x60=>0x00,0x61=>0x01,0x62=>0x02,0x63=>0x03,0x64=>0x04,0x65=>0x05,0x66=>0x06,0x67=>0x07,0x68=>0x08,0x69=>0x09, // + 0x6a=>0x0a,0x6b=>0x0b,0x6c=>0x0c,0x6d=>0x0d,0x6e=>0x0e,0x6f=>0x0f,0x70=>0x10,0x71=>0x11,0x72=>0x12,0x73=>0x13, // + 0x74=>0x14,0x75=>0x15,0x76=>0x16,0x77=>0x17,0x78=>0x18,0x79=>0x19,0x7a=>0x1a,0x7b=>0x1b,0x7c=>0x1c,0x7d=>0x1d, // + 0x7e=>0x1e,0x7f=>0x1f), + 'S3T' => array( // Shift 3 set for TEXT ------------------------------------------------------------------------- + 0x60=>0x00,0x41=>0x01,0x42=>0x02,0x43=>0x03,0x44=>0x04,0x45=>0x05,0x46=>0x06,0x47=>0x07,0x48=>0x08,0x49=>0x09, // + 0x4a=>0x0a,0x4b=>0x0b,0x4c=>0x0c,0x4d=>0x0d,0x4e=>0x0e,0x4f=>0x0f,0x50=>0x10,0x51=>0x11,0x52=>0x12,0x53=>0x13, // + 0x54=>0x14,0x55=>0x15,0x56=>0x16,0x57=>0x17,0x58=>0x18,0x59=>0x19,0x5a=>0x1a,0x7b=>0x1b,0x7c=>0x1c,0x7d=>0x1d, // + 0x7e=>0x1e,0x7f=>0x1f), // + 'X12' => array( // Set for X12 ---------------------------------------------------------------------------------- + 0x0d=>0x00,0x2a=>0x01,0x3e=>0x02,0x20=>0x03,0x30=>0x04,0x31=>0x05,0x32=>0x06,0x33=>0x07,0x34=>0x08,0x35=>0x09, // + 0x36=>0x0a,0x37=>0x0b,0x38=>0x0c,0x39=>0x0d,0x41=>0x0e,0x42=>0x0f,0x43=>0x10,0x44=>0x11,0x45=>0x12,0x46=>0x13, // + 0x47=>0x14,0x48=>0x15,0x49=>0x16,0x4a=>0x17,0x4b=>0x18,0x4c=>0x19,0x4d=>0x1a,0x4e=>0x1b,0x4f=>0x1c,0x50=>0x1d, // + 0x51=>0x1e,0x52=>0x1f,0x53=>0x20,0x54=>0x21,0x55=>0x22,0x56=>0x23,0x57=>0x24,0x58=>0x25,0x59=>0x26,0x5a=>0x27) // + ); + +// ----------------------------------------------------------------------------- + + /** + * This is the class constructor. + * Creates a datamatrix object + * @param $code (string) Code to represent using Datamatrix. + * @public + */ + public function __construct($code) { + $barcode_array = array(); + if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { + return false; + } + // get data codewords + $cw = $this->getHighLevelEncoding($code); + // number of data codewords + $nd = count($cw); + // check size + if ($nd > 1558) { + return false; + } + // get minimum required matrix size. + foreach ($this->symbattr as $params) { + if ($params[11] >= $nd) { + break; + } + } + if ($params[11] < $nd) { + // too much data + return false; + } elseif ($params[11] > $nd) { + // add padding + if ((($params[11] - $nd) > 1) AND ($cw[($nd - 1)] != 254)) { + if ($this->last_enc == ENC_EDF) { + // switch to ASCII encoding + $cw[] = 124; + ++$nd; + } elseif (($this->last_enc != ENC_ASCII) AND ($this->last_enc != ENC_BASE256)) { + // switch to ASCII encoding + $cw[] = 254; + ++$nd; + } + } + if ($params[11] > $nd) { + // add first pad + $cw[] = 129; + ++$nd; + // add remaining pads + for ($i = $nd; $i < $params[11]; ++$i) { + $cw[] = $this->get253StateCodeword(129, $i); + } + } + } + // add error correction codewords + $cw = $this->getErrorCorrection($cw, $params[13], $params[14], $params[15]); + // initialize empty arrays + $grid = array_fill(0, ($params[2] * $params[3]), 0); + // get placement map + $places = $this->getPlacementMap($params[2], $params[3]); + // fill the grid with data + $grid = array(); + $i = 0; + // region data row max index + $rdri = ($params[4] - 1); + // region data column max index + $rdci = ($params[5] - 1); + // for each vertical region + for ($vr = 0; $vr < $params[9]; ++$vr) { + // for each row on region + for ($r = 0; $r < $params[4]; ++$r) { + // get row + $row = (($vr * $params[4]) + $r); + // for each horizontal region + for ($hr = 0; $hr < $params[8]; ++$hr) { + // for each column on region + for ($c = 0; $c < $params[5]; ++$c) { + // get column + $col = (($hr * $params[5]) + $c); + // braw bits by case + if ($r == 0) { + // top finder pattern + if ($c % 2) { + $grid[$row][$col] = 0; + } else { + $grid[$row][$col] = 1; + } + } elseif ($r == $rdri) { + // bottom finder pattern + $grid[$row][$col] = 1; + } elseif ($c == 0) { + // left finder pattern + $grid[$row][$col] = 1; + } elseif ($c == $rdci) { + // right finder pattern + if ($r % 2) { + $grid[$row][$col] = 1; + } else { + $grid[$row][$col] = 0; + } + } else { // data bit + if ($places[$i] < 2) { + $grid[$row][$col] = $places[$i]; + } else { + // codeword ID + $cw_id = (floor($places[$i] / 10) - 1); + // codeword BIT mask + $cw_bit = pow(2, (8 - ($places[$i] % 10))); + $grid[$row][$col] = (($cw[$cw_id] & $cw_bit) == 0) ? 0 : 1; + } + ++$i; + } + } + } + } + } + $this->barcode_array['num_rows'] = $params[0]; + $this->barcode_array['num_cols'] = $params[1]; + $this->barcode_array['bcode'] = $grid; + } + + /** + * Returns a barcode array which is readable by TCPDF + * @return array barcode array readable by TCPDF; + * @public + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Product of two numbers in a Power-of-Two Galois Field + * @param $a (int) first number to multiply. + * @param $b (int) second number to multiply. + * @param $log (array) Log table. + * @param $alog (array) Anti-Log table. + * @param $gf (array) Number of Factors of the Reed-Solomon polynomial. + * @return int product + * @protected + */ + protected function getGFProduct($a, $b, $log, $alog, $gf) { + if (($a == 0) OR ($b == 0)) { + return 0; + } + return ($alog[($log[$a] + $log[$b]) % ($gf - 1)]); + } + + /** + * Add error correction codewords to data codewords array (ANNEX E). + * @param $wd (array) Array of datacodewords. + * @param $nb (int) Number of blocks. + * @param $nd (int) Number of data codewords per block. + * @param $nc (int) Number of correction codewords per block. + * @param $gf (int) numner of fields on log/antilog table (power of 2). + * @param $pp (int) The value of its prime modulus polynomial (301 for ECC200). + * @return array data codewords + error codewords + * @protected + */ + protected function getErrorCorrection($wd, $nb, $nd, $nc, $gf=256, $pp=301) { + // generate the log ($log) and antilog ($alog) tables + $log[0] = 0; + $alog[0] = 1; + for ($i = 1; $i < $gf; ++$i) { + $alog[$i] = ($alog[($i - 1)] * 2); + if ($alog[$i] >= $gf) { + $alog[$i] ^= $pp; + } + $log[$alog[$i]] = $i; + } + ksort($log); + // generate the polynomial coefficients (c) + $c = array_fill(0, ($nc + 1), 0); + $c[0] = 1; + for ($i = 1; $i <= $nc; ++$i) { + $c[$i] = $c[($i-1)]; + for ($j = ($i - 1); $j >= 1; --$j) { + $c[$j] = $c[($j - 1)] ^ $this->getGFProduct($c[$j], $alog[$i], $log, $alog, $gf); + } + $c[0] = $this->getGFProduct($c[0], $alog[$i], $log, $alog, $gf); + } + ksort($c); + // total number of data codewords + $num_wd = ($nb * $nd); + // total number of error codewords + $num_we = ($nb * $nc); + // for each block + for ($b = 0; $b < $nb; ++$b) { + // create interleaved data block + $block = array(); + for ($n = $b; $n < $num_wd; $n += $nb) { + $block[] = $wd[$n]; + } + // initialize error codewords + $we = array_fill(0, ($nc + 1), 0); + // calculate error correction codewords for this block + for ($i = 0; $i < $nd; ++$i) { + $k = ($we[0] ^ $block[$i]); + for ($j = 0; $j < $nc; ++$j) { + $we[$j] = ($we[($j + 1)] ^ $this->getGFProduct($k, $c[($nc - $j - 1)], $log, $alog, $gf)); + } + } + // add error codewords at the end of data codewords + $j = 0; + for ($i = $b; $i < $num_we; $i += $nb) { + $wd[($num_wd + $i)] = $we[$j]; + ++$j; + } + } + // reorder codewords + ksort($wd); + return $wd; + } + + /** + * Return the 253-state codeword + * @param $cwpad (int) Pad codeword. + * @param $cwpos (int) Number of data codewords from the beginning of encoded data. + * @return pad codeword + * @protected + */ + protected function get253StateCodeword($cwpad, $cwpos) { + $pad = ($cwpad + (((149 * $cwpos) % 253) + 1)); + if ($pad > 254) { + $pad -= 254; + } + return $pad; + } + + /** + * Return the 255-state codeword + * @param $cwpad (int) Pad codeword. + * @param $cwpos (int) Number of data codewords from the beginning of encoded data. + * @return pad codeword + * @protected + */ + protected function get255StateCodeword($cwpad, $cwpos) { + $pad = ($cwpad + (((149 * $cwpos) % 255) + 1)); + if ($pad > 255) { + $pad -= 256; + } + return $pad; + } + + /** + * Returns true if the char belongs to the selected mode + * @param $chr (int) Character (byte) to check. + * @param $mode (int) Current encoding mode. + * @return boolean true if the char is of the selected mode. + * @protected + */ + protected function isCharMode($chr, $mode) { + $status = false; + switch ($mode) { + case ENC_ASCII: { // ASCII character 0 to 127 + $status = (($chr >= 0) AND ($chr <= 127)); + break; + } + case ENC_C40: { // Upper-case alphanumeric + $status = (($chr == 32) OR (($chr >= 48) AND ($chr <= 57)) OR (($chr >= 65) AND ($chr <= 90))); + break; + } + case ENC_TXT: { // Lower-case alphanumeric + $status = (($chr == 32) OR (($chr >= 48) AND ($chr <= 57)) OR (($chr >= 97) AND ($chr <= 122))); + break; + } + case ENC_X12: { // ANSI X12 + $status = (($chr == 13) OR ($chr == 42) OR ($chr == 62)); + break; + } + case ENC_EDF: { // ASCII character 32 to 94 + $status = (($chr >= 32) AND ($chr <= 94)); + break; + } + case ENC_BASE256: { // Function character (FNC1, Structured Append, Reader Program, or Code Page) + $status = (($chr == 232) OR ($chr == 233) OR ($chr == 234) OR ($chr == 241)); + break; + } + case ENC_ASCII_EXT: { // ASCII character 128 to 255 + $status = (($chr >= 128) AND ($chr <= 255)); + break; + } + case ENC_ASCII_NUM: { // ASCII digits + $status = (($chr >= 48) AND ($chr <= 57)); + break; + } + } + return $status; + } + + /** + * The look-ahead test scans the data to be encoded to find the best mode (Annex P - steps from J to S). + * @param $data (string) data to encode + * @param $pos (int) current position + * @param $mode (int) current encoding mode + * @return int encoding mode + * @protected + */ + protected function lookAheadTest($data, $pos, $mode) { + $data_length = strlen($data); + if ($pos >= $data_length) { + return $mode; + } + $charscount = 0; // count processed chars + // STEP J + if ($mode == ENC_ASCII) { + $numch = array(0, 1, 1, 1, 1, 1.25); + } else { + $numch = array(1, 2, 2, 2, 2, 2.25); + $numch[$mode] = 0; + } + while (true) { + // STEP K + if (($pos + $charscount) == $data_length) { + if ($numch[ENC_ASCII] <= ceil(min($numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256]))) { + return ENC_ASCII; + } + if ($numch[ENC_BASE256] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF]))) { + return ENC_BASE256; + } + if ($numch[ENC_EDF] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_BASE256]))) { + return ENC_EDF; + } + if ($numch[ENC_TXT] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256]))) { + return ENC_TXT; + } + if ($numch[ENC_X12] < ceil(min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_EDF], $numch[ENC_BASE256]))) { + return ENC_X12; + } + return ENC_C40; + } + // get char + $chr = ord($data[$pos + $charscount]); + $charscount++; + // STEP L + if ($this->isCharMode($chr, ENC_ASCII_NUM)) { + $numch[ENC_ASCII] += (1 / 2); + } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) { + $numch[ENC_ASCII] = ceil($numch[ENC_ASCII]); + $numch[ENC_ASCII] += 2; + } else { + $numch[ENC_ASCII] = ceil($numch[ENC_ASCII]); + $numch[ENC_ASCII] += 1; + } + // STEP M + if ($this->isCharMode($chr, ENC_C40)) { + $numch[ENC_C40] += (2 / 3); + } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) { + $numch[ENC_C40] += (8 / 3); + } else { + $numch[ENC_C40] += (4 / 3); + } + // STEP N + if ($this->isCharMode($chr, ENC_TXT)) { + $numch[ENC_TXT] += (2 / 3); + } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) { + $numch[ENC_TXT] += (8 / 3); + } else { + $numch[ENC_TXT] += (4 / 3); + } + // STEP O + if ($this->isCharMode($chr, ENC_X12) OR $this->isCharMode($chr, ENC_C40)) { + $numch[ENC_X12] += (2 / 3); + } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) { + $numch[ENC_X12] += (13 / 3); + } else { + $numch[ENC_X12] += (10 / 3); + } + // STEP P + if ($this->isCharMode($chr, ENC_EDF)) { + $numch[ENC_EDF] += (3 / 4); + } elseif ($this->isCharMode($chr, ENC_ASCII_EXT)) { + $numch[ENC_EDF] += (17 / 4); + } else { + $numch[ENC_EDF] += (13 / 4); + } + // STEP Q + if ($this->isCharMode($chr, ENC_BASE256)) { + $numch[ENC_BASE256] += 4; + } else { + $numch[ENC_BASE256] += 1; + } + // STEP R + if ($charscount >= 4) { + if (($numch[ENC_ASCII] + 1) <= min($numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256])) { + return ENC_ASCII; + } + if ((($numch[ENC_BASE256] + 1) <= $numch[ENC_ASCII]) + OR (($numch[ENC_BASE256] + 1) < min($numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_EDF]))) { + return ENC_BASE256; + } + if (($numch[ENC_EDF] + 1) < min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_X12], $numch[ENC_BASE256])) { + return ENC_EDF; + } + if (($numch[ENC_TXT] + 1) < min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_X12], $numch[ENC_EDF], $numch[ENC_BASE256])) { + return ENC_TXT; + } + if (($numch[ENC_X12] + 1) < min($numch[ENC_ASCII], $numch[ENC_C40], $numch[ENC_TXT], $numch[ENC_EDF], $numch[ENC_BASE256])) { + return ENC_X12; + } + if (($numch[ENC_C40] + 1) < min($numch[ENC_ASCII], $numch[ENC_TXT], $numch[ENC_EDF], $numch[ENC_BASE256])) { + if ($numch[ENC_C40] < $numch[ENC_X12]) { + return ENC_C40; + } + if ($numch[ENC_C40] == $numch[ENC_X12]) { + $k = ($pos + $charscount + 1); + while ($k < $data_length) { + $tmpchr = ord($data{$k}); + if ($this->isCharMode($tmpchr, ENC_X12)) { + return ENC_X12; + } elseif (!($this->isCharMode($tmpchr, ENC_X12) OR $this->isCharMode($tmpchr, ENC_C40))) { + break; + } + ++$k; + } + return ENC_C40; + } + } + } + } // end of while + } + + /** + * Get the switching codeword to a new encoding mode (latch codeword) + * @param $mode (int) New encoding mode. + * @return (int) Switch codeword. + * @protected + */ + protected function getSwitchEncodingCodeword($mode) { + switch ($mode) { + case ENC_ASCII: { // ASCII character 0 to 127 + $cw = 254; + if ($this->last_enc == ENC_EDF) { + $cw = 124; + } + break; + } + case ENC_C40: { // Upper-case alphanumeric + $cw = 230; + break; + } + case ENC_TXT: { // Lower-case alphanumeric + $cw = 239; + break; + } + case ENC_X12: { // ANSI X12 + $cw = 238; + break; + } + case ENC_EDF: { // ASCII character 32 to 94 + $cw = 240; + break; + } + case ENC_BASE256: { // Function character (FNC1, Structured Append, Reader Program, or Code Page) + $cw = 231; + break; + } + } + return $cw; + } + + /** + * Choose the minimum matrix size and return the max number of data codewords. + * @param $numcw (int) Number of current codewords. + * @return number of data codewords in matrix + * @protected + */ + protected function getMaxDataCodewords($numcw) { + foreach ($this->symbattr as $key => $matrix) { + if ($matrix[11] >= $numcw) { + return $matrix[11]; + } + } + return 0; + } + + /** + * Get high level encoding using the minimum symbol data characters for ECC 200 + * @param $data (string) data to encode + * @return array of codewords + * @protected + */ + protected function getHighLevelEncoding($data) { + // STEP A. Start in ASCII encodation. + $enc = ENC_ASCII; // current encoding mode + $pos = 0; // current position + $cw = array(); // array of codewords to be returned + $cw_num = 0; // number of data codewords + $data_length = strlen($data); // number of chars + while ($pos < $data_length) { + // set last used encoding + $this->last_enc = $enc; + switch ($enc) { + case ENC_ASCII: { // STEP B. While in ASCII encodation + if (($data_length > 1) AND ($pos < ($data_length - 1)) AND ($this->isCharMode(ord($data[$pos]), ENC_ASCII_NUM) AND $this->isCharMode(ord($data[$pos + 1]), ENC_ASCII_NUM))) { + // 1. If the next data sequence is at least 2 consecutive digits, encode the next two digits as a double digit in ASCII mode. + $cw[] = (intval(substr($data, $pos, 2)) + 130); + ++$cw_num; + $pos += 2; + } else { + // 2. If the look-ahead test (starting at step J) indicates another mode, switch to that mode. + $newenc = $this->lookAheadTest($data, $pos, $enc); + if ($newenc != $enc) { + // switch to new encoding + $enc = $newenc; + $cw[] = $this->getSwitchEncodingCodeword($enc); + ++$cw_num; + } else { + // get new byte + $chr = ord($data[$pos]); + ++$pos; + if ($this->isCharMode($chr, ENC_ASCII_EXT)) { + // 3. If the next data character is extended ASCII (greater than 127) encode it in ASCII mode first using the Upper Shift (value 235) character. + $cw[] = 235; + $cw[] = ($chr - 127); + $cw_num += 2; + } else { + // 4. Otherwise process the next data character in ASCII encodation. + $cw[] = ($chr + 1); + ++$cw_num; + } + } + } + break; + } + case ENC_C40 : // Upper-case alphanumeric + case ENC_TXT : // Lower-case alphanumeric + case ENC_X12 : { // ANSI X12 + $temp_cw = array(); + $p = 0; + $epos = $pos; + // get charset ID + $set_id = $this->chset_id[$enc]; + // get basic charset for current encoding + $charset = $this->chset[$set_id]; + do { + // 2. process the next character in C40 encodation. + $chr = ord($data[$epos]); + ++$epos; + // check for extended character + if ($chr & 0x80) { + if ($enc == ENC_X12) { + return false; + } + $chr = ($chr & 0x7f); + $temp_cw[] = 1; // shift 2 + $temp_cw[] = 30; // upper shift + $p += 2; + } + if (isset($charset[$chr])) { + $temp_cw[] = $charset[$chr]; + ++$p; + } else { + if (isset($this->chset['SH1'][$chr])) { + $temp_cw[] = 0; // shift 1 + $shiftset = $this->chset['SH1']; + } elseif (isset($chr, $this->chset['SH2'][$chr])) { + $temp_cw[] = 1; // shift 2 + $shiftset = $this->chset['SH2']; + } elseif (($enc == ENC_C40) AND isset($this->chset['S3C'][$chr])) { + $temp_cw[] = 2; // shift 3 + $shiftset = $this->chset['S3C']; + } elseif (($enc == ENC_TXT) AND isset($this->chset['S3T'][$chr])) { + $temp_cw[] = 2; // shift 3 + $shiftset = $this->chset['S3T']; + } else { + return false; + } + $temp_cw[] = $shiftset[$chr]; + $p += 2; + } + if ($p >= 3) { + $c1 = array_shift($temp_cw); + $c2 = array_shift($temp_cw); + $c3 = array_shift($temp_cw); + $p -= 3; + $tmp = ((1600 * $c1) + (40 * $c2) + $c3 + 1); + $cw[] = ($tmp >> 8); + $cw[] = ($tmp % 256); + $cw_num += 2; + $pos = $epos; + // 1. If the C40 encoding is at the point of starting a new double symbol character and if the look-ahead test (starting at step J) indicates another mode, switch to that mode. + $newenc = $this->lookAheadTest($data, $pos, $enc); + if ($newenc != $enc) { + // switch to new encoding + $enc = $newenc; + if ($enc != ENC_ASCII) { + // set unlatch character + $cw[] = $this->getSwitchEncodingCodeword(ENC_ASCII); + ++$cw_num; + } + $cw[] = $this->getSwitchEncodingCodeword($enc); + ++$cw_num; + $pos -= $p; + $p = 0; + break; + } + } + } while (($p > 0) AND ($epos < $data_length)); + // process last data (if any) + if ($p > 0) { + // get remaining number of data symbols + $cwr = ($this->getMaxDataCodewords($cw_num) - $cw_num); + if (($cwr == 1) AND ($p == 1)) { + // d. If one symbol character remains and one C40 value (data character) remains to be encoded + $c1 = array_shift($temp_cw); + --$p; + $cw[] = ($chr + 1); + ++$cw_num; + $pos = $epos; + $enc = ENC_ASCII; + $this->last_enc = $enc; + } elseif (($cwr == 2) AND ($p == 1)) { + // c. If two symbol characters remain and only one C40 value (data character) remains to be encoded + $c1 = array_shift($temp_cw); + --$p; + $cw[] = 254; + $cw[] = ($chr + 1); + $cw_num += 2; + $pos = $epos; + $enc = ENC_ASCII; + $this->last_enc = $enc; + } elseif (($cwr == 2) AND ($p == 2)) { + // b. If two symbol characters remain and two C40 values remain to be encoded + $c1 = array_shift($temp_cw); + $c2 = array_shift($temp_cw); + $p -= 2; + $tmp = ((1600 * $c1) + (40 * $c2) + 1); + $cw[] = ($tmp >> 8); + $cw[] = ($tmp % 256); + $cw_num += 2; + $pos = $epos; + $enc = ENC_ASCII; + $this->last_enc = $enc; + } else { + // switch to ASCII encoding + if ($enc != ENC_ASCII) { + $enc = ENC_ASCII; + $this->last_enc = $enc; + $cw[] = $this->getSwitchEncodingCodeword($enc); + ++$cw_num; + $pos = ($epos - $p); + } + } + } + break; + } + case ENC_EDF: { // F. While in EDIFACT (EDF) encodation + // initialize temporary array with 0 length + $temp_cw = array(); + $epos = $pos; + $field_length = 0; + $newenc = $enc; + do { + // 2. process the next character in EDIFACT encodation. + $chr = ord($data[$epos]); + if ($this->isCharMode($chr, ENC_EDF)) { + ++$epos; + $temp_cw[] = $chr; + ++$field_length; + } + if (($field_length == 4) OR ($epos == $data_length) OR !$this->isCharMode($chr, ENC_EDF)) { + if (($epos == $data_length) AND ($field_length < 3)) { + $enc = ENC_ASCII; + $cw[] = $this->getSwitchEncodingCodeword($enc); + ++$cw_num; + break; + } + if ($field_length < 4) { + // set unlatch character + $temp_cw[] = 0x1f; + ++$field_length; + // fill empty characters + for ($i = $field_length; $i < 4; ++$i) { + $temp_cw[] = 0; + } + $enc = ENC_ASCII; + $this->last_enc = $enc; + } + // encodes four data characters in three codewords + $tcw = (($temp_cw[0] & 0x3F) << 2) + (($temp_cw[1] & 0x30) >> 4); + if ($tcw > 0) { + $cw[] = $tcw; + $cw_num++; + } + $tcw= (($temp_cw[1] & 0x0F) << 4) + (($temp_cw[2] & 0x3C) >> 2); + if ($tcw > 0) { + $cw[] = $tcw; + $cw_num++; + } + $tcw = (($temp_cw[2] & 0x03) << 6) + ($temp_cw[3] & 0x3F); + if ($tcw > 0) { + $cw[] = $tcw; + $cw_num++; + } + $temp_cw = array(); + $pos = $epos; + $field_length = 0; + if ($enc == ENC_ASCII) { + break; // exit from EDIFACT mode + } + } + } while ($epos < $data_length); + break; + } + case ENC_BASE256: { // G. While in Base 256 (B256) encodation + // initialize temporary array with 0 length + $temp_cw = array(); + $field_length = 0; + while (($pos < $data_length) AND ($field_length <= 1555)) { + $newenc = $this->lookAheadTest($data, $pos, $enc); + if ($newenc != $enc) { + // 1. If the look-ahead test (starting at step J) indicates another mode, switch to that mode. + $enc = $newenc; + break; // exit from B256 mode + } else { + // 2. Otherwise, process the next character in Base 256 encodation. + $chr = ord($data[$pos]); + ++$pos; + $temp_cw[] = $chr; + ++$field_length; + } + } + // set field length + if ($field_length <= 249) { + $cw[] = $this->get255StateCodeword($field_length, ($cw_num + 1)); + ++$cw_num; + } else { + $cw[] = $this->get255StateCodeword((floor($field_length / 250) + 249), ($cw_num + 1)); + $cw[] = $this->get255StateCodeword(($field_length % 250), ($cw_num + 2)); + $cw_num += 2; + } + if (!empty($temp_cw)) { + // add B256 field + foreach ($temp_cw as $p => $cht) { + $cw[] = $this->get255StateCodeword($cht, ($cw_num + $p + 1)); + } + } + break; + } + } // end of switch enc + } // end of while + return $cw; + } + + /** + * Places "chr+bit" with appropriate wrapping within array[]. + * (Annex F - ECC 200 symbol character placement) + * @param $marr (array) Array of symbols. + * @param $nrow (int) Number of rows. + * @param $ncol (int) Number of columns. + * @param $row (int) Row number. + * @param $col (int) Column number. + * @param $chr (int) Char byte. + * @param $bit (int) Bit. + * @return array + * @protected + */ + protected function placeModule($marr, $nrow, $ncol, $row, $col, $chr, $bit) { + if ($row < 0) { + $row += $nrow; + $col += (4 - (($nrow + 4) % 8)); + } + if ($col < 0) { + $col += $ncol; + $row += (4 - (($ncol + 4) % 8)); + } + $marr[(($row * $ncol) + $col)] = ((10 * $chr) + $bit); + return $marr; + } + + /** + * Places the 8 bits of a utah-shaped symbol character. + * (Annex F - ECC 200 symbol character placement) + * @param $marr (array) Array of symbols. + * @param $nrow (int) Number of rows. + * @param $ncol (int) Number of columns. + * @param $row (int) Row number. + * @param $col (int) Column number. + * @param $chr (int) Char byte. + * @return array + * @protected + */ + protected function placeUtah($marr, $nrow, $ncol, $row, $col, $chr) { + $marr = $this->placeModule($marr, $nrow, $ncol, $row-2, $col-2, $chr, 1); + $marr = $this->placeModule($marr, $nrow, $ncol, $row-2, $col-1, $chr, 2); + $marr = $this->placeModule($marr, $nrow, $ncol, $row-1, $col-2, $chr, 3); + $marr = $this->placeModule($marr, $nrow, $ncol, $row-1, $col-1, $chr, 4); + $marr = $this->placeModule($marr, $nrow, $ncol, $row-1, $col, $chr, 5); + $marr = $this->placeModule($marr, $nrow, $ncol, $row, $col-2, $chr, 6); + $marr = $this->placeModule($marr, $nrow, $ncol, $row, $col-1, $chr, 7); + $marr = $this->placeModule($marr, $nrow, $ncol, $row, $col, $chr, 8); + return $marr; + } + + /** + * Places the 8 bits of the first special corner case. + * (Annex F - ECC 200 symbol character placement) + * @param $marr (array) Array of symbols. + * @param $nrow (int) Number of rows. + * @param $ncol (int) Number of columns. + * @param $chr (int) Char byte. + * @return array + * @protected + */ + protected function placeCornerA($marr, $nrow, $ncol, $chr) { + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 1); + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 1, $chr, 2); + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 2, $chr, 3); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 4); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 5); + $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 6); + $marr = $this->placeModule($marr, $nrow, $ncol, 2, $ncol-1, $chr, 7); + $marr = $this->placeModule($marr, $nrow, $ncol, 3, $ncol-1, $chr, 8); + return $marr; + } + + /** + * Places the 8 bits of the second special corner case. + * (Annex F - ECC 200 symbol character placement) + * @param $marr (array) Array of symbols. + * @param $nrow (int) Number of rows. + * @param $ncol (int) Number of columns. + * @param $chr (int) Char byte. + * @return array + * @protected + */ + protected function placeCornerB($marr, $nrow, $ncol, $chr) { + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-3, 0, $chr, 1); + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-2, 0, $chr, 2); + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 3); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-4, $chr, 4); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-3, $chr, 5); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 6); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 7); + $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 8); + return $marr; + } + + /** + * Places the 8 bits of the third special corner case. + * (Annex F - ECC 200 symbol character placement) + * @param $marr (array) Array of symbols. + * @param $nrow (int) Number of rows. + * @param $ncol (int) Number of columns. + * @param $chr (int) Char byte. + * @return array + * @protected + */ + protected function placeCornerC($marr, $nrow, $ncol, $chr) { + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-3, 0, $chr, 1); + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-2, 0, $chr, 2); + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 3); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 4); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 5); + $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 6); + $marr = $this->placeModule($marr, $nrow, $ncol, 2, $ncol-1, $chr, 7); + $marr = $this->placeModule($marr, $nrow, $ncol, 3, $ncol-1, $chr, 8); + return $marr; + } + + /** + * Places the 8 bits of the fourth special corner case. + * (Annex F - ECC 200 symbol character placement) + * @param $marr (array) Array of symbols. + * @param $nrow (int) Number of rows. + * @param $ncol (int) Number of columns. + * @param $chr (int) Char byte. + * @return array + * @protected + */ + protected function placeCornerD($marr, $nrow, $ncol, $chr) { + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, 0, $chr, 1); + $marr = $this->placeModule($marr, $nrow, $ncol, $nrow-1, $ncol-1, $chr, 2); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-3, $chr, 3); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-2, $chr, 4); + $marr = $this->placeModule($marr, $nrow, $ncol, 0, $ncol-1, $chr, 5); + $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-3, $chr, 6); + $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-2, $chr, 7); + $marr = $this->placeModule($marr, $nrow, $ncol, 1, $ncol-1, $chr, 8); + return $marr; + } + + /** + * Build a placement map. + * (Annex F - ECC 200 symbol character placement) + * @param $nrow (int) Number of rows. + * @param $ncol (int) Number of columns. + * @return array + * @protected + */ + protected function getPlacementMap($nrow, $ncol) { + // initialize array with zeros + $marr = array_fill(0, ($nrow * $ncol), 0); + // set starting values + $chr = 1; + $row = 4; + $col = 0; + do { + // repeatedly first check for one of the special corner cases, then + if (($row == $nrow) AND ($col == 0)) { + $marr = $this->placeCornerA($marr, $nrow, $ncol, $chr); + ++$chr; + } + if (($row == ($nrow - 2)) AND ($col == 0) AND ($ncol % 4)) { + $marr = $this->placeCornerB($marr, $nrow, $ncol, $chr); + ++$chr; + } + if (($row == ($nrow - 2)) AND ($col == 0) AND (($ncol % 8) == 4)) { + $marr = $this->placeCornerC($marr, $nrow, $ncol, $chr); + ++$chr; + } + if (($row == ($nrow + 4)) AND ($col == 2) AND (!($ncol % 8))) { + $marr = $this->placeCornerD($marr, $nrow, $ncol, $chr); + ++$chr; + } + // sweep upward diagonally, inserting successive characters, + do { + if (($row < $nrow) AND ($col >= 0) AND (!$marr[(($row * $ncol) + $col)])) { + $marr = $this->placeUtah($marr, $nrow, $ncol, $row, $col, $chr); + ++$chr; + } + $row -= 2; + $col += 2; + } while (($row >= 0) AND ($col < $ncol)); + ++$row; + $col += 3; + // & then sweep downward diagonally, inserting successive characters,... + do { + if (($row >= 0) AND ($col < $ncol) AND (!$marr[(($row * $ncol) + $col)])) { + $marr = $this->placeUtah($marr, $nrow, $ncol, $row, $col, $chr); + ++$chr; + } + $row += 2; + $col -= 2; + } while (($row < $nrow) AND ($col >= 0)); + $row += 3; + ++$col; + // ... until the entire array is scanned + } while (($row < $nrow) OR ($col < $ncol)); + // lastly, if the lower righthand corner is untouched, fill in fixed pattern + if (!$marr[(($nrow * $ncol) - 1)]) { + $marr[(($nrow * $ncol) - 1)] = 1; + $marr[(($nrow * $ncol) - $ncol - 2)] = 1; + } + return $marr; + } + +} // end DataMatrix class +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/barcodes/pdf417.php b/tcpdf/include/barcodes/pdf417.php new file mode 100644 index 0000000..4fbe652 --- /dev/null +++ b/tcpdf/include/barcodes/pdf417.php @@ -0,0 +1,996 @@ +<?php +//============================================================+ +// File name : pdf417.php +// Version : 1.0.005 +// Begin : 2010-06-03 +// Last Update : 2014-04-25 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2010-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// DESCRIPTION : +// +// Class to create PDF417 barcode arrays for TCPDF class. +// PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991. +// It is one of the most popular 2D codes because of its ability to be read with slightly modified handheld laser or linear CCD scanners. +// TECHNICAL DATA / FEATURES OF PDF417: +// Encodable Character Set: All 128 ASCII Characters (including extended) +// Code Type: Continuous, Multi-Row +// Symbol Height: 3 - 90 Rows +// Symbol Width: 90X - 583X +// Bidirectional Decoding: Yes +// Error Correction Characters: 2 - 512 +// Maximum Data Characters: 1850 text, 2710 digits, 1108 bytes +// +//============================================================+ + +/** + * @file + * Class to create PDF417 barcode arrays for TCPDF class. + * PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991. + * (requires PHP bcmath extension) + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.005 + */ + +// definitions +if (!defined('PDF417DEFS')) { + + /** + * Indicate that definitions for this class are set + */ + define('PDF417DEFS', true); + + // ----------------------------------------------------- + + /** + * Row height respect X dimension of single module + */ + define('ROWHEIGHT', 4); + + /** + * Horizontal quiet zone in modules + */ + define('QUIETH', 2); + + /** + * Vertical quiet zone in modules + */ + define('QUIETV', 2); + +} // end of definitions + +// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# + +/** + * @class PDF417 + * Class to create PDF417 barcode arrays for TCPDF class. + * PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991. + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.003 + */ +class PDF417 { + + /** + * Barcode array to be returned which is readable by TCPDF. + * @protected + */ + protected $barcode_array = array(); + + /** + * Start pattern. + * @protected + */ + protected $start_pattern = '11111111010101000'; + + /** + * Stop pattern. + * @protected + */ + protected $stop_pattern = '111111101000101001'; + + /** + * Array of text Compaction Sub-Modes (values 0xFB - 0xFF are used for submode changers). + * @protected + */ + protected $textsubmodes = array( + array(0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x20,0xFD,0xFE,0xFF), // Alpha + array(0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x20,0xFD,0xFE,0xFF), // Lower + array(0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x26,0x0d,0x09,0x2c,0x3a,0x23,0x2d,0x2e,0x24,0x2f,0x2b,0x25,0x2a,0x3d,0x5e,0xFB,0x20,0xFD,0xFE,0xFF), // Mixed + array(0x3b,0x3c,0x3e,0x40,0x5b,0x5c,0x5d,0x5f,0x60,0x7e,0x21,0x0d,0x09,0x2c,0x3a,0x0a,0x2d,0x2e,0x24,0x2f,0x22,0x7c,0x2a,0x28,0x29,0x3f,0x7b,0x7d,0x27,0xFF) // Puntuaction + ); + + /** + * Array of switching codes for Text Compaction Sub-Modes. + * @protected + */ + protected $textlatch = array( + '01' => array(27), '02' => array(28), '03' => array(28,25), // + '10' => array(28,28), '12' => array(28), '13' => array(28,25), // + '20' => array(28), '21' => array(27), '23' => array(25), // + '30' => array(29), '31' => array(29,27), '32' => array(29,28) // + ); + + /** + * Clusters of codewords (0, 3, 6)<br/> + * Values are hex equivalents of binary representation of bars (1 = bar, 0 = space).<br/> + * The codewords numbered from 900 to 928 have special meaning, some enable to switch between modes in order to optimise the code:<ul> + * <li>900 : Switch to "Text" mode</li> + * <li>901 : Switch to "Byte" mode</li> + * <li>902 : Switch to "Numeric" mode</li> + * <li>903 - 912 : Reserved</li> + * <li>913 : Switch to "Octet" only for the next codeword</li> + * <li>914 - 920 : Reserved</li> + * <li>921 : Initialization</li> + * <li>922 : Terminator codeword for Macro PDF control block</li> + * <li>923 : Sequence tag to identify the beginning of optional fields in the Macro PDF control block</li> + * <li>924 : Switch to "Byte" mode (If the total number of byte is multiple of 6)</li> + * <li>925 : Identifier for a user defined Extended Channel Interpretation (ECI)</li> + * <li>926 : Identifier for a general purpose ECI format</li> + * <li>927 : Identifier for an ECI of a character set or code page</li> + * <li>928 : Macro marker codeword to indicate the beginning of a Macro PDF Control Block</li> + * </ul> + * @protected + */ + protected $clusters = array( + array( // cluster 0 ----------------------------------------------------------------------- + 0x1d5c0,0x1eaf0,0x1f57c,0x1d4e0,0x1ea78,0x1f53e,0x1a8c0,0x1d470,0x1a860,0x15040, // 10 + 0x1a830,0x15020,0x1adc0,0x1d6f0,0x1eb7c,0x1ace0,0x1d678,0x1eb3e,0x158c0,0x1ac70, // 20 + 0x15860,0x15dc0,0x1aef0,0x1d77c,0x15ce0,0x1ae78,0x1d73e,0x15c70,0x1ae3c,0x15ef0, // 30 + 0x1af7c,0x15e78,0x1af3e,0x15f7c,0x1f5fa,0x1d2e0,0x1e978,0x1f4be,0x1a4c0,0x1d270, // 40 + 0x1e93c,0x1a460,0x1d238,0x14840,0x1a430,0x1d21c,0x14820,0x1a418,0x14810,0x1a6e0, // 50 + 0x1d378,0x1e9be,0x14cc0,0x1a670,0x1d33c,0x14c60,0x1a638,0x1d31e,0x14c30,0x1a61c, // 60 + 0x14ee0,0x1a778,0x1d3be,0x14e70,0x1a73c,0x14e38,0x1a71e,0x14f78,0x1a7be,0x14f3c, // 70 + 0x14f1e,0x1a2c0,0x1d170,0x1e8bc,0x1a260,0x1d138,0x1e89e,0x14440,0x1a230,0x1d11c, // 80 + 0x14420,0x1a218,0x14410,0x14408,0x146c0,0x1a370,0x1d1bc,0x14660,0x1a338,0x1d19e, // 90 + 0x14630,0x1a31c,0x14618,0x1460c,0x14770,0x1a3bc,0x14738,0x1a39e,0x1471c,0x147bc, // 100 + 0x1a160,0x1d0b8,0x1e85e,0x14240,0x1a130,0x1d09c,0x14220,0x1a118,0x1d08e,0x14210, // 110 + 0x1a10c,0x14208,0x1a106,0x14360,0x1a1b8,0x1d0de,0x14330,0x1a19c,0x14318,0x1a18e, // 120 + 0x1430c,0x14306,0x1a1de,0x1438e,0x14140,0x1a0b0,0x1d05c,0x14120,0x1a098,0x1d04e, // 130 + 0x14110,0x1a08c,0x14108,0x1a086,0x14104,0x141b0,0x14198,0x1418c,0x140a0,0x1d02e, // 140 + 0x1a04c,0x1a046,0x14082,0x1cae0,0x1e578,0x1f2be,0x194c0,0x1ca70,0x1e53c,0x19460, // 150 + 0x1ca38,0x1e51e,0x12840,0x19430,0x12820,0x196e0,0x1cb78,0x1e5be,0x12cc0,0x19670, // 160 + 0x1cb3c,0x12c60,0x19638,0x12c30,0x12c18,0x12ee0,0x19778,0x1cbbe,0x12e70,0x1973c, // 170 + 0x12e38,0x12e1c,0x12f78,0x197be,0x12f3c,0x12fbe,0x1dac0,0x1ed70,0x1f6bc,0x1da60, // 180 + 0x1ed38,0x1f69e,0x1b440,0x1da30,0x1ed1c,0x1b420,0x1da18,0x1ed0e,0x1b410,0x1da0c, // 190 + 0x192c0,0x1c970,0x1e4bc,0x1b6c0,0x19260,0x1c938,0x1e49e,0x1b660,0x1db38,0x1ed9e, // 200 + 0x16c40,0x12420,0x19218,0x1c90e,0x16c20,0x1b618,0x16c10,0x126c0,0x19370,0x1c9bc, // 210 + 0x16ec0,0x12660,0x19338,0x1c99e,0x16e60,0x1b738,0x1db9e,0x16e30,0x12618,0x16e18, // 220 + 0x12770,0x193bc,0x16f70,0x12738,0x1939e,0x16f38,0x1b79e,0x16f1c,0x127bc,0x16fbc, // 230 + 0x1279e,0x16f9e,0x1d960,0x1ecb8,0x1f65e,0x1b240,0x1d930,0x1ec9c,0x1b220,0x1d918, // 240 + 0x1ec8e,0x1b210,0x1d90c,0x1b208,0x1b204,0x19160,0x1c8b8,0x1e45e,0x1b360,0x19130, // 250 + 0x1c89c,0x16640,0x12220,0x1d99c,0x1c88e,0x16620,0x12210,0x1910c,0x16610,0x1b30c, // 260 + 0x19106,0x12204,0x12360,0x191b8,0x1c8de,0x16760,0x12330,0x1919c,0x16730,0x1b39c, // 270 + 0x1918e,0x16718,0x1230c,0x12306,0x123b8,0x191de,0x167b8,0x1239c,0x1679c,0x1238e, // 280 + 0x1678e,0x167de,0x1b140,0x1d8b0,0x1ec5c,0x1b120,0x1d898,0x1ec4e,0x1b110,0x1d88c, // 290 + 0x1b108,0x1d886,0x1b104,0x1b102,0x12140,0x190b0,0x1c85c,0x16340,0x12120,0x19098, // 300 + 0x1c84e,0x16320,0x1b198,0x1d8ce,0x16310,0x12108,0x19086,0x16308,0x1b186,0x16304, // 310 + 0x121b0,0x190dc,0x163b0,0x12198,0x190ce,0x16398,0x1b1ce,0x1638c,0x12186,0x16386, // 320 + 0x163dc,0x163ce,0x1b0a0,0x1d858,0x1ec2e,0x1b090,0x1d84c,0x1b088,0x1d846,0x1b084, // 330 + 0x1b082,0x120a0,0x19058,0x1c82e,0x161a0,0x12090,0x1904c,0x16190,0x1b0cc,0x19046, // 340 + 0x16188,0x12084,0x16184,0x12082,0x120d8,0x161d8,0x161cc,0x161c6,0x1d82c,0x1d826, // 350 + 0x1b042,0x1902c,0x12048,0x160c8,0x160c4,0x160c2,0x18ac0,0x1c570,0x1e2bc,0x18a60, // 360 + 0x1c538,0x11440,0x18a30,0x1c51c,0x11420,0x18a18,0x11410,0x11408,0x116c0,0x18b70, // 370 + 0x1c5bc,0x11660,0x18b38,0x1c59e,0x11630,0x18b1c,0x11618,0x1160c,0x11770,0x18bbc, // 380 + 0x11738,0x18b9e,0x1171c,0x117bc,0x1179e,0x1cd60,0x1e6b8,0x1f35e,0x19a40,0x1cd30, // 390 + 0x1e69c,0x19a20,0x1cd18,0x1e68e,0x19a10,0x1cd0c,0x19a08,0x1cd06,0x18960,0x1c4b8, // 400 + 0x1e25e,0x19b60,0x18930,0x1c49c,0x13640,0x11220,0x1cd9c,0x1c48e,0x13620,0x19b18, // 410 + 0x1890c,0x13610,0x11208,0x13608,0x11360,0x189b8,0x1c4de,0x13760,0x11330,0x1cdde, // 420 + 0x13730,0x19b9c,0x1898e,0x13718,0x1130c,0x1370c,0x113b8,0x189de,0x137b8,0x1139c, // 430 + 0x1379c,0x1138e,0x113de,0x137de,0x1dd40,0x1eeb0,0x1f75c,0x1dd20,0x1ee98,0x1f74e, // 440 + 0x1dd10,0x1ee8c,0x1dd08,0x1ee86,0x1dd04,0x19940,0x1ccb0,0x1e65c,0x1bb40,0x19920, // 450 + 0x1eedc,0x1e64e,0x1bb20,0x1dd98,0x1eece,0x1bb10,0x19908,0x1cc86,0x1bb08,0x1dd86, // 460 + 0x19902,0x11140,0x188b0,0x1c45c,0x13340,0x11120,0x18898,0x1c44e,0x17740,0x13320, // 470 + 0x19998,0x1ccce,0x17720,0x1bb98,0x1ddce,0x18886,0x17710,0x13308,0x19986,0x17708, // 480 + 0x11102,0x111b0,0x188dc,0x133b0,0x11198,0x188ce,0x177b0,0x13398,0x199ce,0x17798, // 490 + 0x1bbce,0x11186,0x13386,0x111dc,0x133dc,0x111ce,0x177dc,0x133ce,0x1dca0,0x1ee58, // 500 + 0x1f72e,0x1dc90,0x1ee4c,0x1dc88,0x1ee46,0x1dc84,0x1dc82,0x198a0,0x1cc58,0x1e62e, // 510 + 0x1b9a0,0x19890,0x1ee6e,0x1b990,0x1dccc,0x1cc46,0x1b988,0x19884,0x1b984,0x19882, // 520 + 0x1b982,0x110a0,0x18858,0x1c42e,0x131a0,0x11090,0x1884c,0x173a0,0x13190,0x198cc, // 530 + 0x18846,0x17390,0x1b9cc,0x11084,0x17388,0x13184,0x11082,0x13182,0x110d8,0x1886e, // 540 + 0x131d8,0x110cc,0x173d8,0x131cc,0x110c6,0x173cc,0x131c6,0x110ee,0x173ee,0x1dc50, // 550 + 0x1ee2c,0x1dc48,0x1ee26,0x1dc44,0x1dc42,0x19850,0x1cc2c,0x1b8d0,0x19848,0x1cc26, // 560 + 0x1b8c8,0x1dc66,0x1b8c4,0x19842,0x1b8c2,0x11050,0x1882c,0x130d0,0x11048,0x18826, // 570 + 0x171d0,0x130c8,0x19866,0x171c8,0x1b8e6,0x11042,0x171c4,0x130c2,0x171c2,0x130ec, // 580 + 0x171ec,0x171e6,0x1ee16,0x1dc22,0x1cc16,0x19824,0x19822,0x11028,0x13068,0x170e8, // 590 + 0x11022,0x13062,0x18560,0x10a40,0x18530,0x10a20,0x18518,0x1c28e,0x10a10,0x1850c, // 600 + 0x10a08,0x18506,0x10b60,0x185b8,0x1c2de,0x10b30,0x1859c,0x10b18,0x1858e,0x10b0c, // 610 + 0x10b06,0x10bb8,0x185de,0x10b9c,0x10b8e,0x10bde,0x18d40,0x1c6b0,0x1e35c,0x18d20, // 620 + 0x1c698,0x18d10,0x1c68c,0x18d08,0x1c686,0x18d04,0x10940,0x184b0,0x1c25c,0x11b40, // 630 + 0x10920,0x1c6dc,0x1c24e,0x11b20,0x18d98,0x1c6ce,0x11b10,0x10908,0x18486,0x11b08, // 640 + 0x18d86,0x10902,0x109b0,0x184dc,0x11bb0,0x10998,0x184ce,0x11b98,0x18dce,0x11b8c, // 650 + 0x10986,0x109dc,0x11bdc,0x109ce,0x11bce,0x1cea0,0x1e758,0x1f3ae,0x1ce90,0x1e74c, // 660 + 0x1ce88,0x1e746,0x1ce84,0x1ce82,0x18ca0,0x1c658,0x19da0,0x18c90,0x1c64c,0x19d90, // 670 + 0x1cecc,0x1c646,0x19d88,0x18c84,0x19d84,0x18c82,0x19d82,0x108a0,0x18458,0x119a0, // 680 + 0x10890,0x1c66e,0x13ba0,0x11990,0x18ccc,0x18446,0x13b90,0x19dcc,0x10884,0x13b88, // 690 + 0x11984,0x10882,0x11982,0x108d8,0x1846e,0x119d8,0x108cc,0x13bd8,0x119cc,0x108c6, // 700 + 0x13bcc,0x119c6,0x108ee,0x119ee,0x13bee,0x1ef50,0x1f7ac,0x1ef48,0x1f7a6,0x1ef44, // 710 + 0x1ef42,0x1ce50,0x1e72c,0x1ded0,0x1ef6c,0x1e726,0x1dec8,0x1ef66,0x1dec4,0x1ce42, // 720 + 0x1dec2,0x18c50,0x1c62c,0x19cd0,0x18c48,0x1c626,0x1bdd0,0x19cc8,0x1ce66,0x1bdc8, // 730 + 0x1dee6,0x18c42,0x1bdc4,0x19cc2,0x1bdc2,0x10850,0x1842c,0x118d0,0x10848,0x18426, // 740 + 0x139d0,0x118c8,0x18c66,0x17bd0,0x139c8,0x19ce6,0x10842,0x17bc8,0x1bde6,0x118c2, // 750 + 0x17bc4,0x1086c,0x118ec,0x10866,0x139ec,0x118e6,0x17bec,0x139e6,0x17be6,0x1ef28, // 760 + 0x1f796,0x1ef24,0x1ef22,0x1ce28,0x1e716,0x1de68,0x1ef36,0x1de64,0x1ce22,0x1de62, // 770 + 0x18c28,0x1c616,0x19c68,0x18c24,0x1bce8,0x19c64,0x18c22,0x1bce4,0x19c62,0x1bce2, // 780 + 0x10828,0x18416,0x11868,0x18c36,0x138e8,0x11864,0x10822,0x179e8,0x138e4,0x11862, // 790 + 0x179e4,0x138e2,0x179e2,0x11876,0x179f6,0x1ef12,0x1de34,0x1de32,0x19c34,0x1bc74, // 800 + 0x1bc72,0x11834,0x13874,0x178f4,0x178f2,0x10540,0x10520,0x18298,0x10510,0x10508, // 810 + 0x10504,0x105b0,0x10598,0x1058c,0x10586,0x105dc,0x105ce,0x186a0,0x18690,0x1c34c, // 820 + 0x18688,0x1c346,0x18684,0x18682,0x104a0,0x18258,0x10da0,0x186d8,0x1824c,0x10d90, // 830 + 0x186cc,0x10d88,0x186c6,0x10d84,0x10482,0x10d82,0x104d8,0x1826e,0x10dd8,0x186ee, // 840 + 0x10dcc,0x104c6,0x10dc6,0x104ee,0x10dee,0x1c750,0x1c748,0x1c744,0x1c742,0x18650, // 850 + 0x18ed0,0x1c76c,0x1c326,0x18ec8,0x1c766,0x18ec4,0x18642,0x18ec2,0x10450,0x10cd0, // 860 + 0x10448,0x18226,0x11dd0,0x10cc8,0x10444,0x11dc8,0x10cc4,0x10442,0x11dc4,0x10cc2, // 870 + 0x1046c,0x10cec,0x10466,0x11dec,0x10ce6,0x11de6,0x1e7a8,0x1e7a4,0x1e7a2,0x1c728, // 880 + 0x1cf68,0x1e7b6,0x1cf64,0x1c722,0x1cf62,0x18628,0x1c316,0x18e68,0x1c736,0x19ee8, // 890 + 0x18e64,0x18622,0x19ee4,0x18e62,0x19ee2,0x10428,0x18216,0x10c68,0x18636,0x11ce8, // 900 + 0x10c64,0x10422,0x13de8,0x11ce4,0x10c62,0x13de4,0x11ce2,0x10436,0x10c76,0x11cf6, // 910 + 0x13df6,0x1f7d4,0x1f7d2,0x1e794,0x1efb4,0x1e792,0x1efb2,0x1c714,0x1cf34,0x1c712, // 920 + 0x1df74,0x1cf32,0x1df72,0x18614,0x18e34,0x18612,0x19e74,0x18e32,0x1bef4), // 929 + array( // cluster 3 ----------------------------------------------------------------------- + 0x1f560,0x1fab8,0x1ea40,0x1f530,0x1fa9c,0x1ea20,0x1f518,0x1fa8e,0x1ea10,0x1f50c, // 10 + 0x1ea08,0x1f506,0x1ea04,0x1eb60,0x1f5b8,0x1fade,0x1d640,0x1eb30,0x1f59c,0x1d620, // 20 + 0x1eb18,0x1f58e,0x1d610,0x1eb0c,0x1d608,0x1eb06,0x1d604,0x1d760,0x1ebb8,0x1f5de, // 30 + 0x1ae40,0x1d730,0x1eb9c,0x1ae20,0x1d718,0x1eb8e,0x1ae10,0x1d70c,0x1ae08,0x1d706, // 40 + 0x1ae04,0x1af60,0x1d7b8,0x1ebde,0x15e40,0x1af30,0x1d79c,0x15e20,0x1af18,0x1d78e, // 50 + 0x15e10,0x1af0c,0x15e08,0x1af06,0x15f60,0x1afb8,0x1d7de,0x15f30,0x1af9c,0x15f18, // 60 + 0x1af8e,0x15f0c,0x15fb8,0x1afde,0x15f9c,0x15f8e,0x1e940,0x1f4b0,0x1fa5c,0x1e920, // 70 + 0x1f498,0x1fa4e,0x1e910,0x1f48c,0x1e908,0x1f486,0x1e904,0x1e902,0x1d340,0x1e9b0, // 80 + 0x1f4dc,0x1d320,0x1e998,0x1f4ce,0x1d310,0x1e98c,0x1d308,0x1e986,0x1d304,0x1d302, // 90 + 0x1a740,0x1d3b0,0x1e9dc,0x1a720,0x1d398,0x1e9ce,0x1a710,0x1d38c,0x1a708,0x1d386, // 100 + 0x1a704,0x1a702,0x14f40,0x1a7b0,0x1d3dc,0x14f20,0x1a798,0x1d3ce,0x14f10,0x1a78c, // 110 + 0x14f08,0x1a786,0x14f04,0x14fb0,0x1a7dc,0x14f98,0x1a7ce,0x14f8c,0x14f86,0x14fdc, // 120 + 0x14fce,0x1e8a0,0x1f458,0x1fa2e,0x1e890,0x1f44c,0x1e888,0x1f446,0x1e884,0x1e882, // 130 + 0x1d1a0,0x1e8d8,0x1f46e,0x1d190,0x1e8cc,0x1d188,0x1e8c6,0x1d184,0x1d182,0x1a3a0, // 140 + 0x1d1d8,0x1e8ee,0x1a390,0x1d1cc,0x1a388,0x1d1c6,0x1a384,0x1a382,0x147a0,0x1a3d8, // 150 + 0x1d1ee,0x14790,0x1a3cc,0x14788,0x1a3c6,0x14784,0x14782,0x147d8,0x1a3ee,0x147cc, // 160 + 0x147c6,0x147ee,0x1e850,0x1f42c,0x1e848,0x1f426,0x1e844,0x1e842,0x1d0d0,0x1e86c, // 170 + 0x1d0c8,0x1e866,0x1d0c4,0x1d0c2,0x1a1d0,0x1d0ec,0x1a1c8,0x1d0e6,0x1a1c4,0x1a1c2, // 180 + 0x143d0,0x1a1ec,0x143c8,0x1a1e6,0x143c4,0x143c2,0x143ec,0x143e6,0x1e828,0x1f416, // 190 + 0x1e824,0x1e822,0x1d068,0x1e836,0x1d064,0x1d062,0x1a0e8,0x1d076,0x1a0e4,0x1a0e2, // 200 + 0x141e8,0x1a0f6,0x141e4,0x141e2,0x1e814,0x1e812,0x1d034,0x1d032,0x1a074,0x1a072, // 210 + 0x1e540,0x1f2b0,0x1f95c,0x1e520,0x1f298,0x1f94e,0x1e510,0x1f28c,0x1e508,0x1f286, // 220 + 0x1e504,0x1e502,0x1cb40,0x1e5b0,0x1f2dc,0x1cb20,0x1e598,0x1f2ce,0x1cb10,0x1e58c, // 230 + 0x1cb08,0x1e586,0x1cb04,0x1cb02,0x19740,0x1cbb0,0x1e5dc,0x19720,0x1cb98,0x1e5ce, // 240 + 0x19710,0x1cb8c,0x19708,0x1cb86,0x19704,0x19702,0x12f40,0x197b0,0x1cbdc,0x12f20, // 250 + 0x19798,0x1cbce,0x12f10,0x1978c,0x12f08,0x19786,0x12f04,0x12fb0,0x197dc,0x12f98, // 260 + 0x197ce,0x12f8c,0x12f86,0x12fdc,0x12fce,0x1f6a0,0x1fb58,0x16bf0,0x1f690,0x1fb4c, // 270 + 0x169f8,0x1f688,0x1fb46,0x168fc,0x1f684,0x1f682,0x1e4a0,0x1f258,0x1f92e,0x1eda0, // 280 + 0x1e490,0x1fb6e,0x1ed90,0x1f6cc,0x1f246,0x1ed88,0x1e484,0x1ed84,0x1e482,0x1ed82, // 290 + 0x1c9a0,0x1e4d8,0x1f26e,0x1dba0,0x1c990,0x1e4cc,0x1db90,0x1edcc,0x1e4c6,0x1db88, // 300 + 0x1c984,0x1db84,0x1c982,0x1db82,0x193a0,0x1c9d8,0x1e4ee,0x1b7a0,0x19390,0x1c9cc, // 310 + 0x1b790,0x1dbcc,0x1c9c6,0x1b788,0x19384,0x1b784,0x19382,0x1b782,0x127a0,0x193d8, // 320 + 0x1c9ee,0x16fa0,0x12790,0x193cc,0x16f90,0x1b7cc,0x193c6,0x16f88,0x12784,0x16f84, // 330 + 0x12782,0x127d8,0x193ee,0x16fd8,0x127cc,0x16fcc,0x127c6,0x16fc6,0x127ee,0x1f650, // 340 + 0x1fb2c,0x165f8,0x1f648,0x1fb26,0x164fc,0x1f644,0x1647e,0x1f642,0x1e450,0x1f22c, // 350 + 0x1ecd0,0x1e448,0x1f226,0x1ecc8,0x1f666,0x1ecc4,0x1e442,0x1ecc2,0x1c8d0,0x1e46c, // 360 + 0x1d9d0,0x1c8c8,0x1e466,0x1d9c8,0x1ece6,0x1d9c4,0x1c8c2,0x1d9c2,0x191d0,0x1c8ec, // 370 + 0x1b3d0,0x191c8,0x1c8e6,0x1b3c8,0x1d9e6,0x1b3c4,0x191c2,0x1b3c2,0x123d0,0x191ec, // 380 + 0x167d0,0x123c8,0x191e6,0x167c8,0x1b3e6,0x167c4,0x123c2,0x167c2,0x123ec,0x167ec, // 390 + 0x123e6,0x167e6,0x1f628,0x1fb16,0x162fc,0x1f624,0x1627e,0x1f622,0x1e428,0x1f216, // 400 + 0x1ec68,0x1f636,0x1ec64,0x1e422,0x1ec62,0x1c868,0x1e436,0x1d8e8,0x1c864,0x1d8e4, // 410 + 0x1c862,0x1d8e2,0x190e8,0x1c876,0x1b1e8,0x1d8f6,0x1b1e4,0x190e2,0x1b1e2,0x121e8, // 420 + 0x190f6,0x163e8,0x121e4,0x163e4,0x121e2,0x163e2,0x121f6,0x163f6,0x1f614,0x1617e, // 430 + 0x1f612,0x1e414,0x1ec34,0x1e412,0x1ec32,0x1c834,0x1d874,0x1c832,0x1d872,0x19074, // 440 + 0x1b0f4,0x19072,0x1b0f2,0x120f4,0x161f4,0x120f2,0x161f2,0x1f60a,0x1e40a,0x1ec1a, // 450 + 0x1c81a,0x1d83a,0x1903a,0x1b07a,0x1e2a0,0x1f158,0x1f8ae,0x1e290,0x1f14c,0x1e288, // 460 + 0x1f146,0x1e284,0x1e282,0x1c5a0,0x1e2d8,0x1f16e,0x1c590,0x1e2cc,0x1c588,0x1e2c6, // 470 + 0x1c584,0x1c582,0x18ba0,0x1c5d8,0x1e2ee,0x18b90,0x1c5cc,0x18b88,0x1c5c6,0x18b84, // 480 + 0x18b82,0x117a0,0x18bd8,0x1c5ee,0x11790,0x18bcc,0x11788,0x18bc6,0x11784,0x11782, // 490 + 0x117d8,0x18bee,0x117cc,0x117c6,0x117ee,0x1f350,0x1f9ac,0x135f8,0x1f348,0x1f9a6, // 500 + 0x134fc,0x1f344,0x1347e,0x1f342,0x1e250,0x1f12c,0x1e6d0,0x1e248,0x1f126,0x1e6c8, // 510 + 0x1f366,0x1e6c4,0x1e242,0x1e6c2,0x1c4d0,0x1e26c,0x1cdd0,0x1c4c8,0x1e266,0x1cdc8, // 520 + 0x1e6e6,0x1cdc4,0x1c4c2,0x1cdc2,0x189d0,0x1c4ec,0x19bd0,0x189c8,0x1c4e6,0x19bc8, // 530 + 0x1cde6,0x19bc4,0x189c2,0x19bc2,0x113d0,0x189ec,0x137d0,0x113c8,0x189e6,0x137c8, // 540 + 0x19be6,0x137c4,0x113c2,0x137c2,0x113ec,0x137ec,0x113e6,0x137e6,0x1fba8,0x175f0, // 550 + 0x1bafc,0x1fba4,0x174f8,0x1ba7e,0x1fba2,0x1747c,0x1743e,0x1f328,0x1f996,0x132fc, // 560 + 0x1f768,0x1fbb6,0x176fc,0x1327e,0x1f764,0x1f322,0x1767e,0x1f762,0x1e228,0x1f116, // 570 + 0x1e668,0x1e224,0x1eee8,0x1f776,0x1e222,0x1eee4,0x1e662,0x1eee2,0x1c468,0x1e236, // 580 + 0x1cce8,0x1c464,0x1dde8,0x1cce4,0x1c462,0x1dde4,0x1cce2,0x1dde2,0x188e8,0x1c476, // 590 + 0x199e8,0x188e4,0x1bbe8,0x199e4,0x188e2,0x1bbe4,0x199e2,0x1bbe2,0x111e8,0x188f6, // 600 + 0x133e8,0x111e4,0x177e8,0x133e4,0x111e2,0x177e4,0x133e2,0x177e2,0x111f6,0x133f6, // 610 + 0x1fb94,0x172f8,0x1b97e,0x1fb92,0x1727c,0x1723e,0x1f314,0x1317e,0x1f734,0x1f312, // 620 + 0x1737e,0x1f732,0x1e214,0x1e634,0x1e212,0x1ee74,0x1e632,0x1ee72,0x1c434,0x1cc74, // 630 + 0x1c432,0x1dcf4,0x1cc72,0x1dcf2,0x18874,0x198f4,0x18872,0x1b9f4,0x198f2,0x1b9f2, // 640 + 0x110f4,0x131f4,0x110f2,0x173f4,0x131f2,0x173f2,0x1fb8a,0x1717c,0x1713e,0x1f30a, // 650 + 0x1f71a,0x1e20a,0x1e61a,0x1ee3a,0x1c41a,0x1cc3a,0x1dc7a,0x1883a,0x1987a,0x1b8fa, // 660 + 0x1107a,0x130fa,0x171fa,0x170be,0x1e150,0x1f0ac,0x1e148,0x1f0a6,0x1e144,0x1e142, // 670 + 0x1c2d0,0x1e16c,0x1c2c8,0x1e166,0x1c2c4,0x1c2c2,0x185d0,0x1c2ec,0x185c8,0x1c2e6, // 680 + 0x185c4,0x185c2,0x10bd0,0x185ec,0x10bc8,0x185e6,0x10bc4,0x10bc2,0x10bec,0x10be6, // 690 + 0x1f1a8,0x1f8d6,0x11afc,0x1f1a4,0x11a7e,0x1f1a2,0x1e128,0x1f096,0x1e368,0x1e124, // 700 + 0x1e364,0x1e122,0x1e362,0x1c268,0x1e136,0x1c6e8,0x1c264,0x1c6e4,0x1c262,0x1c6e2, // 710 + 0x184e8,0x1c276,0x18de8,0x184e4,0x18de4,0x184e2,0x18de2,0x109e8,0x184f6,0x11be8, // 720 + 0x109e4,0x11be4,0x109e2,0x11be2,0x109f6,0x11bf6,0x1f9d4,0x13af8,0x19d7e,0x1f9d2, // 730 + 0x13a7c,0x13a3e,0x1f194,0x1197e,0x1f3b4,0x1f192,0x13b7e,0x1f3b2,0x1e114,0x1e334, // 740 + 0x1e112,0x1e774,0x1e332,0x1e772,0x1c234,0x1c674,0x1c232,0x1cef4,0x1c672,0x1cef2, // 750 + 0x18474,0x18cf4,0x18472,0x19df4,0x18cf2,0x19df2,0x108f4,0x119f4,0x108f2,0x13bf4, // 760 + 0x119f2,0x13bf2,0x17af0,0x1bd7c,0x17a78,0x1bd3e,0x17a3c,0x17a1e,0x1f9ca,0x1397c, // 770 + 0x1fbda,0x17b7c,0x1393e,0x17b3e,0x1f18a,0x1f39a,0x1f7ba,0x1e10a,0x1e31a,0x1e73a, // 780 + 0x1ef7a,0x1c21a,0x1c63a,0x1ce7a,0x1defa,0x1843a,0x18c7a,0x19cfa,0x1bdfa,0x1087a, // 790 + 0x118fa,0x139fa,0x17978,0x1bcbe,0x1793c,0x1791e,0x138be,0x179be,0x178bc,0x1789e, // 800 + 0x1785e,0x1e0a8,0x1e0a4,0x1e0a2,0x1c168,0x1e0b6,0x1c164,0x1c162,0x182e8,0x1c176, // 810 + 0x182e4,0x182e2,0x105e8,0x182f6,0x105e4,0x105e2,0x105f6,0x1f0d4,0x10d7e,0x1f0d2, // 820 + 0x1e094,0x1e1b4,0x1e092,0x1e1b2,0x1c134,0x1c374,0x1c132,0x1c372,0x18274,0x186f4, // 830 + 0x18272,0x186f2,0x104f4,0x10df4,0x104f2,0x10df2,0x1f8ea,0x11d7c,0x11d3e,0x1f0ca, // 840 + 0x1f1da,0x1e08a,0x1e19a,0x1e3ba,0x1c11a,0x1c33a,0x1c77a,0x1823a,0x1867a,0x18efa, // 850 + 0x1047a,0x10cfa,0x11dfa,0x13d78,0x19ebe,0x13d3c,0x13d1e,0x11cbe,0x13dbe,0x17d70, // 860 + 0x1bebc,0x17d38,0x1be9e,0x17d1c,0x17d0e,0x13cbc,0x17dbc,0x13c9e,0x17d9e,0x17cb8, // 870 + 0x1be5e,0x17c9c,0x17c8e,0x13c5e,0x17cde,0x17c5c,0x17c4e,0x17c2e,0x1c0b4,0x1c0b2, // 880 + 0x18174,0x18172,0x102f4,0x102f2,0x1e0da,0x1c09a,0x1c1ba,0x1813a,0x1837a,0x1027a, // 890 + 0x106fa,0x10ebe,0x11ebc,0x11e9e,0x13eb8,0x19f5e,0x13e9c,0x13e8e,0x11e5e,0x13ede, // 900 + 0x17eb0,0x1bf5c,0x17e98,0x1bf4e,0x17e8c,0x17e86,0x13e5c,0x17edc,0x13e4e,0x17ece, // 910 + 0x17e58,0x1bf2e,0x17e4c,0x17e46,0x13e2e,0x17e6e,0x17e2c,0x17e26,0x10f5e,0x11f5c, // 920 + 0x11f4e,0x13f58,0x19fae,0x13f4c,0x13f46,0x11f2e,0x13f6e,0x13f2c,0x13f26), // 929 + array( // cluster 6 ----------------------------------------------------------------------- + 0x1abe0,0x1d5f8,0x153c0,0x1a9f0,0x1d4fc,0x151e0,0x1a8f8,0x1d47e,0x150f0,0x1a87c, // 10 + 0x15078,0x1fad0,0x15be0,0x1adf8,0x1fac8,0x159f0,0x1acfc,0x1fac4,0x158f8,0x1ac7e, // 20 + 0x1fac2,0x1587c,0x1f5d0,0x1faec,0x15df8,0x1f5c8,0x1fae6,0x15cfc,0x1f5c4,0x15c7e, // 30 + 0x1f5c2,0x1ebd0,0x1f5ec,0x1ebc8,0x1f5e6,0x1ebc4,0x1ebc2,0x1d7d0,0x1ebec,0x1d7c8, // 40 + 0x1ebe6,0x1d7c4,0x1d7c2,0x1afd0,0x1d7ec,0x1afc8,0x1d7e6,0x1afc4,0x14bc0,0x1a5f0, // 50 + 0x1d2fc,0x149e0,0x1a4f8,0x1d27e,0x148f0,0x1a47c,0x14878,0x1a43e,0x1483c,0x1fa68, // 60 + 0x14df0,0x1a6fc,0x1fa64,0x14cf8,0x1a67e,0x1fa62,0x14c7c,0x14c3e,0x1f4e8,0x1fa76, // 70 + 0x14efc,0x1f4e4,0x14e7e,0x1f4e2,0x1e9e8,0x1f4f6,0x1e9e4,0x1e9e2,0x1d3e8,0x1e9f6, // 80 + 0x1d3e4,0x1d3e2,0x1a7e8,0x1d3f6,0x1a7e4,0x1a7e2,0x145e0,0x1a2f8,0x1d17e,0x144f0, // 90 + 0x1a27c,0x14478,0x1a23e,0x1443c,0x1441e,0x1fa34,0x146f8,0x1a37e,0x1fa32,0x1467c, // 100 + 0x1463e,0x1f474,0x1477e,0x1f472,0x1e8f4,0x1e8f2,0x1d1f4,0x1d1f2,0x1a3f4,0x1a3f2, // 110 + 0x142f0,0x1a17c,0x14278,0x1a13e,0x1423c,0x1421e,0x1fa1a,0x1437c,0x1433e,0x1f43a, // 120 + 0x1e87a,0x1d0fa,0x14178,0x1a0be,0x1413c,0x1411e,0x141be,0x140bc,0x1409e,0x12bc0, // 130 + 0x195f0,0x1cafc,0x129e0,0x194f8,0x1ca7e,0x128f0,0x1947c,0x12878,0x1943e,0x1283c, // 140 + 0x1f968,0x12df0,0x196fc,0x1f964,0x12cf8,0x1967e,0x1f962,0x12c7c,0x12c3e,0x1f2e8, // 150 + 0x1f976,0x12efc,0x1f2e4,0x12e7e,0x1f2e2,0x1e5e8,0x1f2f6,0x1e5e4,0x1e5e2,0x1cbe8, // 160 + 0x1e5f6,0x1cbe4,0x1cbe2,0x197e8,0x1cbf6,0x197e4,0x197e2,0x1b5e0,0x1daf8,0x1ed7e, // 170 + 0x169c0,0x1b4f0,0x1da7c,0x168e0,0x1b478,0x1da3e,0x16870,0x1b43c,0x16838,0x1b41e, // 180 + 0x1681c,0x125e0,0x192f8,0x1c97e,0x16de0,0x124f0,0x1927c,0x16cf0,0x1b67c,0x1923e, // 190 + 0x16c78,0x1243c,0x16c3c,0x1241e,0x16c1e,0x1f934,0x126f8,0x1937e,0x1fb74,0x1f932, // 200 + 0x16ef8,0x1267c,0x1fb72,0x16e7c,0x1263e,0x16e3e,0x1f274,0x1277e,0x1f6f4,0x1f272, // 210 + 0x16f7e,0x1f6f2,0x1e4f4,0x1edf4,0x1e4f2,0x1edf2,0x1c9f4,0x1dbf4,0x1c9f2,0x1dbf2, // 220 + 0x193f4,0x193f2,0x165c0,0x1b2f0,0x1d97c,0x164e0,0x1b278,0x1d93e,0x16470,0x1b23c, // 230 + 0x16438,0x1b21e,0x1641c,0x1640e,0x122f0,0x1917c,0x166f0,0x12278,0x1913e,0x16678, // 240 + 0x1b33e,0x1663c,0x1221e,0x1661e,0x1f91a,0x1237c,0x1fb3a,0x1677c,0x1233e,0x1673e, // 250 + 0x1f23a,0x1f67a,0x1e47a,0x1ecfa,0x1c8fa,0x1d9fa,0x191fa,0x162e0,0x1b178,0x1d8be, // 260 + 0x16270,0x1b13c,0x16238,0x1b11e,0x1621c,0x1620e,0x12178,0x190be,0x16378,0x1213c, // 270 + 0x1633c,0x1211e,0x1631e,0x121be,0x163be,0x16170,0x1b0bc,0x16138,0x1b09e,0x1611c, // 280 + 0x1610e,0x120bc,0x161bc,0x1209e,0x1619e,0x160b8,0x1b05e,0x1609c,0x1608e,0x1205e, // 290 + 0x160de,0x1605c,0x1604e,0x115e0,0x18af8,0x1c57e,0x114f0,0x18a7c,0x11478,0x18a3e, // 300 + 0x1143c,0x1141e,0x1f8b4,0x116f8,0x18b7e,0x1f8b2,0x1167c,0x1163e,0x1f174,0x1177e, // 310 + 0x1f172,0x1e2f4,0x1e2f2,0x1c5f4,0x1c5f2,0x18bf4,0x18bf2,0x135c0,0x19af0,0x1cd7c, // 320 + 0x134e0,0x19a78,0x1cd3e,0x13470,0x19a3c,0x13438,0x19a1e,0x1341c,0x1340e,0x112f0, // 330 + 0x1897c,0x136f0,0x11278,0x1893e,0x13678,0x19b3e,0x1363c,0x1121e,0x1361e,0x1f89a, // 340 + 0x1137c,0x1f9ba,0x1377c,0x1133e,0x1373e,0x1f13a,0x1f37a,0x1e27a,0x1e6fa,0x1c4fa, // 350 + 0x1cdfa,0x189fa,0x1bae0,0x1dd78,0x1eebe,0x174c0,0x1ba70,0x1dd3c,0x17460,0x1ba38, // 360 + 0x1dd1e,0x17430,0x1ba1c,0x17418,0x1ba0e,0x1740c,0x132e0,0x19978,0x1ccbe,0x176e0, // 370 + 0x13270,0x1993c,0x17670,0x1bb3c,0x1991e,0x17638,0x1321c,0x1761c,0x1320e,0x1760e, // 380 + 0x11178,0x188be,0x13378,0x1113c,0x17778,0x1333c,0x1111e,0x1773c,0x1331e,0x1771e, // 390 + 0x111be,0x133be,0x177be,0x172c0,0x1b970,0x1dcbc,0x17260,0x1b938,0x1dc9e,0x17230, // 400 + 0x1b91c,0x17218,0x1b90e,0x1720c,0x17206,0x13170,0x198bc,0x17370,0x13138,0x1989e, // 410 + 0x17338,0x1b99e,0x1731c,0x1310e,0x1730e,0x110bc,0x131bc,0x1109e,0x173bc,0x1319e, // 420 + 0x1739e,0x17160,0x1b8b8,0x1dc5e,0x17130,0x1b89c,0x17118,0x1b88e,0x1710c,0x17106, // 430 + 0x130b8,0x1985e,0x171b8,0x1309c,0x1719c,0x1308e,0x1718e,0x1105e,0x130de,0x171de, // 440 + 0x170b0,0x1b85c,0x17098,0x1b84e,0x1708c,0x17086,0x1305c,0x170dc,0x1304e,0x170ce, // 450 + 0x17058,0x1b82e,0x1704c,0x17046,0x1302e,0x1706e,0x1702c,0x17026,0x10af0,0x1857c, // 460 + 0x10a78,0x1853e,0x10a3c,0x10a1e,0x10b7c,0x10b3e,0x1f0ba,0x1e17a,0x1c2fa,0x185fa, // 470 + 0x11ae0,0x18d78,0x1c6be,0x11a70,0x18d3c,0x11a38,0x18d1e,0x11a1c,0x11a0e,0x10978, // 480 + 0x184be,0x11b78,0x1093c,0x11b3c,0x1091e,0x11b1e,0x109be,0x11bbe,0x13ac0,0x19d70, // 490 + 0x1cebc,0x13a60,0x19d38,0x1ce9e,0x13a30,0x19d1c,0x13a18,0x19d0e,0x13a0c,0x13a06, // 500 + 0x11970,0x18cbc,0x13b70,0x11938,0x18c9e,0x13b38,0x1191c,0x13b1c,0x1190e,0x13b0e, // 510 + 0x108bc,0x119bc,0x1089e,0x13bbc,0x1199e,0x13b9e,0x1bd60,0x1deb8,0x1ef5e,0x17a40, // 520 + 0x1bd30,0x1de9c,0x17a20,0x1bd18,0x1de8e,0x17a10,0x1bd0c,0x17a08,0x1bd06,0x17a04, // 530 + 0x13960,0x19cb8,0x1ce5e,0x17b60,0x13930,0x19c9c,0x17b30,0x1bd9c,0x19c8e,0x17b18, // 540 + 0x1390c,0x17b0c,0x13906,0x17b06,0x118b8,0x18c5e,0x139b8,0x1189c,0x17bb8,0x1399c, // 550 + 0x1188e,0x17b9c,0x1398e,0x17b8e,0x1085e,0x118de,0x139de,0x17bde,0x17940,0x1bcb0, // 560 + 0x1de5c,0x17920,0x1bc98,0x1de4e,0x17910,0x1bc8c,0x17908,0x1bc86,0x17904,0x17902, // 570 + 0x138b0,0x19c5c,0x179b0,0x13898,0x19c4e,0x17998,0x1bcce,0x1798c,0x13886,0x17986, // 580 + 0x1185c,0x138dc,0x1184e,0x179dc,0x138ce,0x179ce,0x178a0,0x1bc58,0x1de2e,0x17890, // 590 + 0x1bc4c,0x17888,0x1bc46,0x17884,0x17882,0x13858,0x19c2e,0x178d8,0x1384c,0x178cc, // 600 + 0x13846,0x178c6,0x1182e,0x1386e,0x178ee,0x17850,0x1bc2c,0x17848,0x1bc26,0x17844, // 610 + 0x17842,0x1382c,0x1786c,0x13826,0x17866,0x17828,0x1bc16,0x17824,0x17822,0x13816, // 620 + 0x17836,0x10578,0x182be,0x1053c,0x1051e,0x105be,0x10d70,0x186bc,0x10d38,0x1869e, // 630 + 0x10d1c,0x10d0e,0x104bc,0x10dbc,0x1049e,0x10d9e,0x11d60,0x18eb8,0x1c75e,0x11d30, // 640 + 0x18e9c,0x11d18,0x18e8e,0x11d0c,0x11d06,0x10cb8,0x1865e,0x11db8,0x10c9c,0x11d9c, // 650 + 0x10c8e,0x11d8e,0x1045e,0x10cde,0x11dde,0x13d40,0x19eb0,0x1cf5c,0x13d20,0x19e98, // 660 + 0x1cf4e,0x13d10,0x19e8c,0x13d08,0x19e86,0x13d04,0x13d02,0x11cb0,0x18e5c,0x13db0, // 670 + 0x11c98,0x18e4e,0x13d98,0x19ece,0x13d8c,0x11c86,0x13d86,0x10c5c,0x11cdc,0x10c4e, // 680 + 0x13ddc,0x11cce,0x13dce,0x1bea0,0x1df58,0x1efae,0x1be90,0x1df4c,0x1be88,0x1df46, // 690 + 0x1be84,0x1be82,0x13ca0,0x19e58,0x1cf2e,0x17da0,0x13c90,0x19e4c,0x17d90,0x1becc, // 700 + 0x19e46,0x17d88,0x13c84,0x17d84,0x13c82,0x17d82,0x11c58,0x18e2e,0x13cd8,0x11c4c, // 710 + 0x17dd8,0x13ccc,0x11c46,0x17dcc,0x13cc6,0x17dc6,0x10c2e,0x11c6e,0x13cee,0x17dee, // 720 + 0x1be50,0x1df2c,0x1be48,0x1df26,0x1be44,0x1be42,0x13c50,0x19e2c,0x17cd0,0x13c48, // 730 + 0x19e26,0x17cc8,0x1be66,0x17cc4,0x13c42,0x17cc2,0x11c2c,0x13c6c,0x11c26,0x17cec, // 740 + 0x13c66,0x17ce6,0x1be28,0x1df16,0x1be24,0x1be22,0x13c28,0x19e16,0x17c68,0x13c24, // 750 + 0x17c64,0x13c22,0x17c62,0x11c16,0x13c36,0x17c76,0x1be14,0x1be12,0x13c14,0x17c34, // 760 + 0x13c12,0x17c32,0x102bc,0x1029e,0x106b8,0x1835e,0x1069c,0x1068e,0x1025e,0x106de, // 770 + 0x10eb0,0x1875c,0x10e98,0x1874e,0x10e8c,0x10e86,0x1065c,0x10edc,0x1064e,0x10ece, // 780 + 0x11ea0,0x18f58,0x1c7ae,0x11e90,0x18f4c,0x11e88,0x18f46,0x11e84,0x11e82,0x10e58, // 790 + 0x1872e,0x11ed8,0x18f6e,0x11ecc,0x10e46,0x11ec6,0x1062e,0x10e6e,0x11eee,0x19f50, // 800 + 0x1cfac,0x19f48,0x1cfa6,0x19f44,0x19f42,0x11e50,0x18f2c,0x13ed0,0x19f6c,0x18f26, // 810 + 0x13ec8,0x11e44,0x13ec4,0x11e42,0x13ec2,0x10e2c,0x11e6c,0x10e26,0x13eec,0x11e66, // 820 + 0x13ee6,0x1dfa8,0x1efd6,0x1dfa4,0x1dfa2,0x19f28,0x1cf96,0x1bf68,0x19f24,0x1bf64, // 830 + 0x19f22,0x1bf62,0x11e28,0x18f16,0x13e68,0x11e24,0x17ee8,0x13e64,0x11e22,0x17ee4, // 840 + 0x13e62,0x17ee2,0x10e16,0x11e36,0x13e76,0x17ef6,0x1df94,0x1df92,0x19f14,0x1bf34, // 850 + 0x19f12,0x1bf32,0x11e14,0x13e34,0x11e12,0x17e74,0x13e32,0x17e72,0x1df8a,0x19f0a, // 860 + 0x1bf1a,0x11e0a,0x13e1a,0x17e3a,0x1035c,0x1034e,0x10758,0x183ae,0x1074c,0x10746, // 870 + 0x1032e,0x1076e,0x10f50,0x187ac,0x10f48,0x187a6,0x10f44,0x10f42,0x1072c,0x10f6c, // 880 + 0x10726,0x10f66,0x18fa8,0x1c7d6,0x18fa4,0x18fa2,0x10f28,0x18796,0x11f68,0x18fb6, // 890 + 0x11f64,0x10f22,0x11f62,0x10716,0x10f36,0x11f76,0x1cfd4,0x1cfd2,0x18f94,0x19fb4, // 900 + 0x18f92,0x19fb2,0x10f14,0x11f34,0x10f12,0x13f74,0x11f32,0x13f72,0x1cfca,0x18f8a, // 910 + 0x19f9a,0x10f0a,0x11f1a,0x13f3a,0x103ac,0x103a6,0x107a8,0x183d6,0x107a4,0x107a2, // 920 + 0x10396,0x107b6,0x187d4,0x187d2,0x10794,0x10fb4,0x10792,0x10fb2,0x1c7ea) // 929 + ); // end of $clusters array + + /** + * Array of factors of the Reed-Solomon polynomial equations used for error correction; one sub array for each correction level (0-8). + * @protected + */ + protected $rsfactors = array( + array( // ECL 0 (2 factors) ------------------------------------------------------------------------------- + 0x01b,0x395), // 2 + array( // ECL 1 (4 factors) ------------------------------------------------------------------------------- + 0x20a,0x238,0x2d3,0x329), // 4 + array( // ECL 2 (8 factors) ------------------------------------------------------------------------------- + 0x0ed,0x134,0x1b4,0x11c,0x286,0x28d,0x1ac,0x17b), // 8 + array( // ECL 3 (16 factors) ------------------------------------------------------------------------------ + 0x112,0x232,0x0e8,0x2f3,0x257,0x20c,0x321,0x084,0x127,0x074,0x1ba,0x1ac,0x127,0x02a,0x0b0,0x041),// 16 + array( // ECL 4 (32 factors) ------------------------------------------------------------------------------ + 0x169,0x23f,0x39a,0x20d,0x0b0,0x24a,0x280,0x141,0x218,0x2e6,0x2a5,0x2e6,0x2af,0x11c,0x0c1,0x205, // 16 + 0x111,0x1ee,0x107,0x093,0x251,0x320,0x23b,0x140,0x323,0x085,0x0e7,0x186,0x2ad,0x14a,0x03f,0x19a),// 32 + array( // ECL 5 (64 factors) ------------------------------------------------------------------------------ + 0x21b,0x1a6,0x006,0x05d,0x35e,0x303,0x1c5,0x06a,0x262,0x11f,0x06b,0x1f9,0x2dd,0x36d,0x17d,0x264, // 16 + 0x2d3,0x1dc,0x1ce,0x0ac,0x1ae,0x261,0x35a,0x336,0x21f,0x178,0x1ff,0x190,0x2a0,0x2fa,0x11b,0x0b8, // 32 + 0x1b8,0x023,0x207,0x01f,0x1cc,0x252,0x0e1,0x217,0x205,0x160,0x25d,0x09e,0x28b,0x0c9,0x1e8,0x1f6, // 48 + 0x288,0x2dd,0x2cd,0x053,0x194,0x061,0x118,0x303,0x348,0x275,0x004,0x17d,0x34b,0x26f,0x108,0x21f),// 64 + array( // ECL 6 (128 factors) ----------------------------------------------------------------------------- + 0x209,0x136,0x360,0x223,0x35a,0x244,0x128,0x17b,0x035,0x30b,0x381,0x1bc,0x190,0x39d,0x2ed,0x19f, // 16 + 0x336,0x05d,0x0d9,0x0d0,0x3a0,0x0f4,0x247,0x26c,0x0f6,0x094,0x1bf,0x277,0x124,0x38c,0x1ea,0x2c0, // 32 + 0x204,0x102,0x1c9,0x38b,0x252,0x2d3,0x2a2,0x124,0x110,0x060,0x2ac,0x1b0,0x2ae,0x25e,0x35c,0x239, // 48 + 0x0c1,0x0db,0x081,0x0ba,0x0ec,0x11f,0x0c0,0x307,0x116,0x0ad,0x028,0x17b,0x2c8,0x1cf,0x286,0x308, // 64 + 0x0ab,0x1eb,0x129,0x2fb,0x09c,0x2dc,0x05f,0x10e,0x1bf,0x05a,0x1fb,0x030,0x0e4,0x335,0x328,0x382, // 80 + 0x310,0x297,0x273,0x17a,0x17e,0x106,0x17c,0x25a,0x2f2,0x150,0x059,0x266,0x057,0x1b0,0x29e,0x268, // 96 + 0x09d,0x176,0x0f2,0x2d6,0x258,0x10d,0x177,0x382,0x34d,0x1c6,0x162,0x082,0x32e,0x24b,0x324,0x022, // 112 + 0x0d3,0x14a,0x21b,0x129,0x33b,0x361,0x025,0x205,0x342,0x13b,0x226,0x056,0x321,0x004,0x06c,0x21b),// 128 + array( // ECL 7 (256 factors) ----------------------------------------------------------------------------- + 0x20c,0x37e,0x04b,0x2fe,0x372,0x359,0x04a,0x0cc,0x052,0x24a,0x2c4,0x0fa,0x389,0x312,0x08a,0x2d0, // 16 + 0x35a,0x0c2,0x137,0x391,0x113,0x0be,0x177,0x352,0x1b6,0x2dd,0x0c2,0x118,0x0c9,0x118,0x33c,0x2f5, // 32 + 0x2c6,0x32e,0x397,0x059,0x044,0x239,0x00b,0x0cc,0x31c,0x25d,0x21c,0x391,0x321,0x2bc,0x31f,0x089, // 48 + 0x1b7,0x1a2,0x250,0x29c,0x161,0x35b,0x172,0x2b6,0x145,0x0f0,0x0d8,0x101,0x11c,0x225,0x0d1,0x374, // 64 + 0x13b,0x046,0x149,0x319,0x1ea,0x112,0x36d,0x0a2,0x2ed,0x32c,0x2ac,0x1cd,0x14e,0x178,0x351,0x209, // 80 + 0x133,0x123,0x323,0x2c8,0x013,0x166,0x18f,0x38c,0x067,0x1ff,0x033,0x008,0x205,0x0e1,0x121,0x1d6, // 96 + 0x27d,0x2db,0x042,0x0ff,0x395,0x10d,0x1cf,0x33e,0x2da,0x1b1,0x350,0x249,0x088,0x21a,0x38a,0x05a, // 112 + 0x002,0x122,0x2e7,0x0c7,0x28f,0x387,0x149,0x031,0x322,0x244,0x163,0x24c,0x0bc,0x1ce,0x00a,0x086, // 128 + 0x274,0x140,0x1df,0x082,0x2e3,0x047,0x107,0x13e,0x176,0x259,0x0c0,0x25d,0x08e,0x2a1,0x2af,0x0ea, // 144 + 0x2d2,0x180,0x0b1,0x2f0,0x25f,0x280,0x1c7,0x0c1,0x2b1,0x2c3,0x325,0x281,0x030,0x03c,0x2dc,0x26d, // 160 + 0x37f,0x220,0x105,0x354,0x28f,0x135,0x2b9,0x2f3,0x2f4,0x03c,0x0e7,0x305,0x1b2,0x1a5,0x2d6,0x210, // 176 + 0x1f7,0x076,0x031,0x31b,0x020,0x090,0x1f4,0x0ee,0x344,0x18a,0x118,0x236,0x13f,0x009,0x287,0x226, // 192 + 0x049,0x392,0x156,0x07e,0x020,0x2a9,0x14b,0x318,0x26c,0x03c,0x261,0x1b9,0x0b4,0x317,0x37d,0x2f2, // 208 + 0x25d,0x17f,0x0e4,0x2ed,0x2f8,0x0d5,0x036,0x129,0x086,0x036,0x342,0x12b,0x39a,0x0bf,0x38e,0x214, // 224 + 0x261,0x33d,0x0bd,0x014,0x0a7,0x01d,0x368,0x1c1,0x053,0x192,0x029,0x290,0x1f9,0x243,0x1e1,0x0ad, // 240 + 0x194,0x0fb,0x2b0,0x05f,0x1f1,0x22b,0x282,0x21f,0x133,0x09f,0x39c,0x22e,0x288,0x037,0x1f1,0x00a),// 256 + array( // ECL 8 (512 factors) ----------------------------------------------------------------------------- + 0x160,0x04d,0x175,0x1f8,0x023,0x257,0x1ac,0x0cf,0x199,0x23e,0x076,0x1f2,0x11d,0x17c,0x15e,0x1ec, // 16 + 0x0c5,0x109,0x398,0x09b,0x392,0x12b,0x0e5,0x283,0x126,0x367,0x132,0x058,0x057,0x0c1,0x160,0x30d, // 32 + 0x34e,0x04b,0x147,0x208,0x1b3,0x21f,0x0cb,0x29a,0x0f9,0x15a,0x30d,0x26d,0x280,0x10c,0x31a,0x216, // 48 + 0x21b,0x30d,0x198,0x186,0x284,0x066,0x1dc,0x1f3,0x122,0x278,0x221,0x025,0x35a,0x394,0x228,0x029, // 64 + 0x21e,0x121,0x07a,0x110,0x17f,0x320,0x1e5,0x062,0x2f0,0x1d8,0x2f9,0x06b,0x310,0x35c,0x292,0x2e5, // 80 + 0x122,0x0cc,0x2a9,0x197,0x357,0x055,0x063,0x03e,0x1e2,0x0b4,0x014,0x129,0x1c3,0x251,0x391,0x08e, // 96 + 0x328,0x2ac,0x11f,0x218,0x231,0x04c,0x28d,0x383,0x2d9,0x237,0x2e8,0x186,0x201,0x0c0,0x204,0x102, // 112 + 0x0f0,0x206,0x31a,0x18b,0x300,0x350,0x033,0x262,0x180,0x0a8,0x0be,0x33a,0x148,0x254,0x312,0x12f, // 128 + 0x23a,0x17d,0x19f,0x281,0x09c,0x0ed,0x097,0x1ad,0x213,0x0cf,0x2a4,0x2c6,0x059,0x0a8,0x130,0x192, // 144 + 0x028,0x2c4,0x23f,0x0a2,0x360,0x0e5,0x041,0x35d,0x349,0x200,0x0a4,0x1dd,0x0dd,0x05c,0x166,0x311, // 160 + 0x120,0x165,0x352,0x344,0x33b,0x2e0,0x2c3,0x05e,0x008,0x1ee,0x072,0x209,0x002,0x1f3,0x353,0x21f, // 176 + 0x098,0x2d9,0x303,0x05f,0x0f8,0x169,0x242,0x143,0x358,0x31d,0x121,0x033,0x2ac,0x1d2,0x215,0x334, // 192 + 0x29d,0x02d,0x386,0x1c4,0x0a7,0x156,0x0f4,0x0ad,0x023,0x1cf,0x28b,0x033,0x2bb,0x24f,0x1c4,0x242, // 208 + 0x025,0x07c,0x12a,0x14c,0x228,0x02b,0x1ab,0x077,0x296,0x309,0x1db,0x352,0x2fc,0x16c,0x242,0x38f, // 224 + 0x11b,0x2c7,0x1d8,0x1a4,0x0f5,0x120,0x252,0x18a,0x1ff,0x147,0x24d,0x309,0x2bb,0x2b0,0x02b,0x198, // 240 + 0x34a,0x17f,0x2d1,0x209,0x230,0x284,0x2ca,0x22f,0x03e,0x091,0x369,0x297,0x2c9,0x09f,0x2a0,0x2d9, // 256 + 0x270,0x03b,0x0c1,0x1a1,0x09e,0x0d1,0x233,0x234,0x157,0x2b5,0x06d,0x260,0x233,0x16d,0x0b5,0x304, // 272 + 0x2a5,0x136,0x0f8,0x161,0x2c4,0x19a,0x243,0x366,0x269,0x349,0x278,0x35c,0x121,0x218,0x023,0x309, // 288 + 0x26a,0x24a,0x1a8,0x341,0x04d,0x255,0x15a,0x10d,0x2f5,0x278,0x2b7,0x2ef,0x14b,0x0f7,0x0b8,0x02d, // 304 + 0x313,0x2a8,0x012,0x042,0x197,0x171,0x036,0x1ec,0x0e4,0x265,0x33e,0x39a,0x1b5,0x207,0x284,0x389, // 320 + 0x315,0x1a4,0x131,0x1b9,0x0cf,0x12c,0x37c,0x33b,0x08d,0x219,0x17d,0x296,0x201,0x038,0x0fc,0x155, // 336 + 0x0f2,0x31d,0x346,0x345,0x2d0,0x0e0,0x133,0x277,0x03d,0x057,0x230,0x136,0x2f4,0x299,0x18d,0x328, // 352 + 0x353,0x135,0x1d9,0x31b,0x17a,0x01f,0x287,0x393,0x1cb,0x326,0x24e,0x2db,0x1a9,0x0d8,0x224,0x0f9, // 368 + 0x141,0x371,0x2bb,0x217,0x2a1,0x30e,0x0d2,0x32f,0x389,0x12f,0x34b,0x39a,0x119,0x049,0x1d5,0x317, // 384 + 0x294,0x0a2,0x1f2,0x134,0x09b,0x1a6,0x38b,0x331,0x0bb,0x03e,0x010,0x1a9,0x217,0x150,0x11e,0x1b5, // 400 + 0x177,0x111,0x262,0x128,0x0b7,0x39b,0x074,0x29b,0x2ef,0x161,0x03e,0x16e,0x2b3,0x17b,0x2af,0x34a, // 416 + 0x025,0x165,0x2d0,0x2e6,0x14a,0x005,0x027,0x39b,0x137,0x1a8,0x0f2,0x2ed,0x141,0x036,0x29d,0x13c, // 432 + 0x156,0x12b,0x216,0x069,0x29b,0x1e8,0x280,0x2a0,0x240,0x21c,0x13c,0x1e6,0x2d1,0x262,0x02e,0x290, // 448 + 0x1bf,0x0ab,0x268,0x1d0,0x0be,0x213,0x129,0x141,0x2fa,0x2f0,0x215,0x0af,0x086,0x00e,0x17d,0x1b1, // 464 + 0x2cd,0x02d,0x06f,0x014,0x254,0x11c,0x2e0,0x08a,0x286,0x19b,0x36d,0x29d,0x08d,0x397,0x02d,0x30c, // 480 + 0x197,0x0a4,0x14c,0x383,0x0a5,0x2d6,0x258,0x145,0x1f2,0x28f,0x165,0x2f0,0x300,0x0df,0x351,0x287, // 496 + 0x03f,0x136,0x35f,0x0fb,0x16e,0x130,0x11a,0x2e2,0x2a3,0x19a,0x185,0x0f4,0x01f,0x079,0x12f,0x107) // 512 + ); + + /** + * This is the class constructor. + * Creates a PDF417 object + * @param $code (string) code to represent using PDF417 + * @param $ecl (int) error correction level (0-8); default -1 = automatic correction level + * @param $aspectratio (float) the width to height of the symbol (excluding quiet zones) + * @param $macro (array) information for macro block + * @public + */ + public function __construct($code, $ecl=-1, $aspectratio=2, $macro=array()) { + $barcode_array = array(); + if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { + return false; + } + // get the input sequence array + $sequence = $this->getInputSequences($code); + $codewords = array(); // array of code-words + foreach($sequence as $seq) { + $cw = $this->getCompaction($seq[0], $seq[1], true); + $codewords = array_merge($codewords, $cw); + } + if ($codewords[0] == 900) { + // Text Alpha is the default mode, so remove the first code + array_shift($codewords); + } + // count number of codewords + $numcw = count($codewords); + if ($numcw > 925) { + // reached maximum data codeword capacity + return false; + } + // build macro control block codewords + if (!empty($macro)) { + $macrocw = array(); + // beginning of macro control block + $macrocw[] = 928; + // segment index + $cw = $this->getCompaction(902, sprintf('%05d', $macro['segment_index']), false); + $macrocw = array_merge($macrocw, $cw); + // file ID + $cw = $this->getCompaction(900, $macro['file_id'], false); + $macrocw = array_merge($macrocw, $cw); + // optional fields + $optmodes = array(900,902,902,900,900,902,902); + $optsize = array(-1,2,4,-1,-1,-1,2); + foreach ($optmodes as $k => $omode) { + if (isset($macro['option_'.$k])) { + $macrocw[] = 923; + $macrocw[] = $k; + if ($optsize[$k] == 2) { + $macro['option_'.$k] = sprintf('%05d', $macro['option_'.$k]); + } elseif ($optsize[$k] == 4) { + $macro['option_'.$k] = sprintf('%010d', $macro['option_'.$k]); + } + $cw = $this->getCompaction($omode, $macro['option_'.$k], false); + $macrocw = array_merge($macrocw, $cw); + } + } + if ($macro['segment_index'] == ($macro['segment_total'] - 1)) { + // end of control block + $macrocw[] = 922; + } + // update total codewords + $numcw += count($macrocw); + } + // set error correction level + $ecl = $this->getErrorCorrectionLevel($ecl, $numcw); + // number of codewords for error correction + $errsize = (2 << $ecl); + // calculate number of columns (number of codewords per row) and rows + $nce = ($numcw + $errsize + 1); + $cols = round((sqrt(4761 + (68 * $aspectratio * ROWHEIGHT * $nce)) - 69) / 34); + // adjust cols + if ($cols < 1) { + $cols = 1; + } elseif ($cols > 30) { + $cols = 30; + } + $rows = ceil($nce / $cols); + $size = ($cols * $rows); + // adjust rows + if (($rows < 3) OR ($rows > 90)) { + if ($rows < 3) { + $rows = 3; + } elseif ($rows > 90) { + $rows = 90; + } + $cols = ceil($size / $rows); + $size = ($cols * $rows); + } + if ($size > 928) { + // set dimensions to get maximum capacity + if (abs($aspectratio - (17 * 29 / 32)) < abs($aspectratio - (17 * 16 / 58))) { + $cols = 29; + $rows = 32; + } else { + $cols = 16; + $rows = 58; + } + $size = 928; + } + // calculate padding + $pad = ($size - $nce); + if ($pad > 0) { + if (($size - $rows) == $nce) { + --$rows; + $size -= $rows; + } else { + // add pading + $codewords = array_merge($codewords, array_fill(0, $pad, 900)); + } + } + if (!empty($macro)) { + // add macro section + $codewords = array_merge($codewords, $macrocw); + } + // Symbol Length Descriptor (number of data codewords including Symbol Length Descriptor and pad codewords) + $sld = $size - $errsize; + // add symbol length description + array_unshift($codewords, $sld); + // calculate error correction + $ecw = $this->getErrorCorrection($codewords, $ecl); + // add error correction codewords + $codewords = array_merge($codewords, $ecw); + // add horizontal quiet zones to start and stop patterns + $pstart = str_repeat('0', QUIETH).$this->start_pattern; + $pstop = $this->stop_pattern.str_repeat('0', QUIETH); + $barcode_array['num_rows'] = ($rows * ROWHEIGHT) + (2 * QUIETV); + $barcode_array['num_cols'] = (($cols + 2) * 17) + 35 + (2 * QUIETH); + $barcode_array['bcode'] = array(); + // build rows for vertical quiet zone + if (QUIETV > 0) { + $empty_row = array_fill(0, $barcode_array['num_cols'], 0); + for ($i = 0; $i < QUIETV; ++$i) { + // add vertical quiet rows + $barcode_array['bcode'][] = $empty_row; + } + } + $k = 0; // codeword index + $cid = 0; // initial cluster + // for each row + for ($r = 0; $r < $rows; ++$r) { + // row start code + $row = $pstart; + switch ($cid) { + case 0: { + $L = ((30 * intval($r / 3)) + intval(($rows - 1) / 3)); + break; + } + case 1: { + $L = ((30 * intval($r / 3)) + ($ecl * 3) + (($rows - 1) % 3)); + break; + } + case 2: { + $L = ((30 * intval($r / 3)) + ($cols - 1)); + break; + } + } + // left row indicator + $row .= sprintf('%17b', $this->clusters[$cid][$L]); + // for each column + for ($c = 0; $c < $cols; ++$c) { + $row .= sprintf('%17b', $this->clusters[$cid][$codewords[$k]]); + ++$k; + } + switch ($cid) { + case 0: { + $L = ((30 * intval($r / 3)) + ($cols - 1)); + break; + } + case 1: { + $L = ((30 * intval($r / 3)) + intval(($rows - 1) / 3)); + break; + } + case 2: { + $L = ((30 * intval($r / 3)) + ($ecl * 3) + (($rows - 1) % 3)); + break; + } + } + // right row indicator + $row .= sprintf('%17b', $this->clusters[$cid][$L]); + // row stop code + $row .= $pstop; + // convert the string to array + $arow = preg_split('//', $row, -1, PREG_SPLIT_NO_EMPTY); + // duplicate row to get the desired height + for ($h = 0; $h < ROWHEIGHT; ++$h) { + $barcode_array['bcode'][] = $arow; + } + ++$cid; + if ($cid > 2) { + $cid = 0; + } + } + if (QUIETV > 0) { + for ($i = 0; $i < QUIETV; ++$i) { + // add vertical quiet rows + $barcode_array['bcode'][] = $empty_row; + } + } + $this->barcode_array = $barcode_array; + } + + /** + * Returns a barcode array which is readable by TCPDF + * @return array barcode array readable by TCPDF; + * @public + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Returns the error correction level (0-8) to be used + * @param $ecl (int) error correction level + * @param $numcw (int) number of data codewords + * @return int error correction level + * @protected + */ + protected function getErrorCorrectionLevel($ecl, $numcw) { + // get maximum correction level + $maxecl = 8; // starting error level + $maxerrsize = (928 - $numcw); // available codewords for error + while ($maxecl > 0) { + $errsize = (2 << $ecl); + if ($maxerrsize >= $errsize) { + break; + } + --$maxecl; + } + // check for automatic levels + if (($ecl < 0) OR ($ecl > 8)) { + if ($numcw < 41) { + $ecl = 2; + } elseif ($numcw < 161) { + $ecl = 3; + } elseif ($numcw < 321) { + $ecl = 4; + } elseif ($numcw < 864) { + $ecl = 5; + } else { + $ecl = $maxecl; + } + } + if ($ecl > $maxecl) { + $ecl = $maxecl; + } + return $ecl; + } + + /** + * Returns the error correction codewords + * @param $cw (array) array of codewords including Symbol Length Descriptor and pad + * @param $ecl (int) error correction level 0-8 + * @return array of error correction codewords + * @protected + */ + protected function getErrorCorrection($cw, $ecl) { + // get error correction coefficients + $ecc = $this->rsfactors[$ecl]; + // number of error correction factors + $eclsize = (2 << $ecl); + // maximum index for $rsfactors[$ecl] + $eclmaxid = ($eclsize - 1); + // initialize array of error correction codewords + $ecw = array_fill(0, $eclsize, 0); + // for each data codeword + foreach($cw as $k => $d) { + $t1 = ($d + $ecw[$eclmaxid]) % 929; + for ($j = $eclmaxid; $j > 0; --$j) { + $t2 = ($t1 * $ecc[$j]) % 929; + $t3 = 929 - $t2; + $ecw[$j] = ($ecw[($j - 1)] + $t3) % 929; + } + $t2 = ($t1 * $ecc[0]) % 929; + $t3 = 929 - $t2; + $ecw[0] = $t3 % 929; + } + foreach($ecw as $j => $e) { + if ($e != 0) { + $ecw[$j] = 929 - $e; + } + } + $ecw = array_reverse($ecw); + return $ecw; + } + + /** + * Create array of sequences from input + * @param $code (string) code + * @return bidimensional array containing characters and classification + * @protected + */ + protected function getInputSequences($code) { + $sequence_array = array(); // array to be returned + $numseq = array(); + // get numeric sequences + preg_match_all('/([0-9]{13,44})/', $code, $numseq, PREG_OFFSET_CAPTURE); + $numseq[1][] = array('', strlen($code)); + $offset = 0; + foreach($numseq[1] as $seq) { + $seqlen = strlen($seq[0]); + if ($seq[1] > 0) { + // extract text sequence before the number sequence + $prevseq = substr($code, $offset, ($seq[1] - $offset)); + $textseq = array(); + // get text sequences + preg_match_all('/([\x09\x0a\x0d\x20-\x7e]{5,})/', $prevseq, $textseq, PREG_OFFSET_CAPTURE); + $textseq[1][] = array('', strlen($prevseq)); + $txtoffset = 0; + foreach($textseq[1] as $txtseq) { + $txtseqlen = strlen($txtseq[0]); + if ($txtseq[1] > 0) { + // extract byte sequence before the text sequence + $prevtxtseq = substr($prevseq, $txtoffset, ($txtseq[1] - $txtoffset)); + if (strlen($prevtxtseq) > 0) { + // add BYTE sequence + if ((strlen($prevtxtseq) == 1) AND ((count($sequence_array) > 0) AND ($sequence_array[(count($sequence_array) - 1)][0] == 900))) { + $sequence_array[] = array(913, $prevtxtseq); + } elseif ((strlen($prevtxtseq) % 6) == 0) { + $sequence_array[] = array(924, $prevtxtseq); + } else { + $sequence_array[] = array(901, $prevtxtseq); + } + } + } + if ($txtseqlen > 0) { + // add numeric sequence + $sequence_array[] = array(900, $txtseq[0]); + } + $txtoffset = $txtseq[1] + $txtseqlen; + } + } + if ($seqlen > 0) { + // add numeric sequence + $sequence_array[] = array(902, $seq[0]); + } + $offset = $seq[1] + $seqlen; + } + return $sequence_array; + } + + /** + * Compact data by mode. + * @param $mode (int) compaction mode number + * @param $code (string) data to compact + * @param $addmode (boolean) if true add the mode codeword at first position + * @return array of codewords + * @protected + */ + protected function getCompaction($mode, $code, $addmode=true) { + $cw = array(); // array of codewords to return + switch($mode) { + case 900: { // Text Compaction mode latch + $submode = 0; // default Alpha sub-mode + $txtarr = array(); // array of characters and sub-mode switching characters + $codelen = strlen($code); + for ($i = 0; $i < $codelen; ++$i) { + $chval = ord($code{$i}); + if (($k = array_search($chval, $this->textsubmodes[$submode])) !== false) { + // we are on the same sub-mode + $txtarr[] = $k; + } else { + // the sub-mode is changed + for ($s = 0; $s < 4; ++$s) { + // search new sub-mode + if (($s != $submode) AND (($k = array_search($chval, $this->textsubmodes[$s])) !== false)) { + // $s is the new submode + if (((($i + 1) == $codelen) OR ((($i + 1) < $codelen) AND (array_search(ord($code{($i + 1)}), $this->textsubmodes[$submode]) !== false))) AND (($s == 3) OR (($s == 0) AND ($submode == 1)))) { + // shift (temporary change only for this char) + if ($s == 3) { + // shift to puntuaction + $txtarr[] = 29; + } else { + // shift from lower to alpha + $txtarr[] = 27; + } + } else { + // latch + $txtarr = array_merge($txtarr, $this->textlatch[''.$submode.$s]); + // set new submode + $submode = $s; + } + // add characted code to array + $txtarr[] = $k; + break; + } + } + } + } + $txtarrlen = count($txtarr); + if (($txtarrlen % 2) != 0) { + // add padding + $txtarr[] = 29; + ++$txtarrlen; + } + // calculate codewords + for ($i = 0; $i < $txtarrlen; $i += 2) { + $cw[] = (30 * $txtarr[$i]) + $txtarr[($i + 1)]; + } + break; + } + case 901: + case 924: { // Byte Compaction mode latch + while (($codelen = strlen($code)) > 0) { + if ($codelen > 6) { + $rest = substr($code, 6); + $code = substr($code, 0, 6); + $sublen = 6; + } else { + $rest = ''; + $sublen = strlen($code); + } + if ($sublen == 6) { + $t = bcmul(''.ord($code[0]), '1099511627776'); + $t = bcadd($t, bcmul(''.ord($code[1]), '4294967296')); + $t = bcadd($t, bcmul(''.ord($code[2]), '16777216')); + $t = bcadd($t, bcmul(''.ord($code[3]), '65536')); + $t = bcadd($t, bcmul(''.ord($code[4]), '256')); + $t = bcadd($t, ''.ord($code[5])); + // tmp array for the 6 bytes block + $cw6 = array(); + do { + $d = bcmod($t, '900'); + $t = bcdiv($t, '900'); + // prepend the value to the beginning of the array + array_unshift($cw6, $d); + } while ($t != '0'); + // append the result array at the end + $cw = array_merge($cw, $cw6); + } else { + for ($i = 0; $i < $sublen; ++$i) { + $cw[] = ord($code{$i}); + } + } + $code = $rest; + } + break; + } + case 902: { // Numeric Compaction mode latch + while (($codelen = strlen($code)) > 0) { + if ($codelen > 44) { + $rest = substr($code, 44); + $code = substr($code, 0, 44); + } else { + $rest = ''; + } + $t = '1'.$code; + do { + $d = bcmod($t, '900'); + $t = bcdiv($t, '900'); + array_unshift($cw, $d); + } while ($t != '0'); + $code = $rest; + } + break; + } + case 913: { // Byte Compaction mode shift + $cw[] = ord($code); + break; + } + } + if ($addmode) { + // add the compaction mode codeword at the beginning + array_unshift($cw, $mode); + } + return $cw; + } + +} // end PDF417 class + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/barcodes/qrcode.php b/tcpdf/include/barcodes/qrcode.php new file mode 100644 index 0000000..7ef2759 --- /dev/null +++ b/tcpdf/include/barcodes/qrcode.php @@ -0,0 +1,2867 @@ +<?php +//============================================================+ +// File name : qrcode.php +// Version : 1.0.010 +// Begin : 2010-03-22 +// Last Update : 2012-07-25 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2010-2012 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// DESCRIPTION : +// +// Class to create QR-code arrays for TCPDF class. +// QR Code symbol is a 2D barcode that can be scanned by +// handy terminals such as a mobile phone with CCD. +// The capacity of QR Code is up to 7000 digits or 4000 +// characters, and has high robustness. +// This class supports QR Code model 2, described in +// JIS (Japanese Industrial Standards) X0510:2004 +// or ISO/IEC 18004. +// Currently the following features are not supported: +// ECI and FNC1 mode, Micro QR Code, QR Code model 1, +// Structured mode. +// +// This class is derived from the following projects: +// --------------------------------------------------------- +// "PHP QR Code encoder" +// License: GNU-LGPLv3 +// Copyright (C) 2010 by Dominik Dzienia <deltalab at poczta dot fm> +// http://phpqrcode.sourceforge.net/ +// https://sourceforge.net/projects/phpqrcode/ +// +// The "PHP QR Code encoder" is based on +// "C libqrencode library" (ver. 3.1.1) +// License: GNU-LGPL 2.1 +// Copyright (C) 2006-2010 by Kentaro Fukuchi +// http://megaui.net/fukuchi/works/qrencode/index.en.html +// +// Reed-Solomon code encoder is written by Phil Karn, KA9Q. +// Copyright (C) 2002-2006 Phil Karn, KA9Q +// +// QR Code is registered trademark of DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/index-e.html +// --------------------------------------------------------- +//============================================================+ + +/** + * @file + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.010 + */ + +// definitions +if (!defined('QRCODEDEFS')) { + + /** + * Indicate that definitions for this class are set + */ + define('QRCODEDEFS', true); + + // ----------------------------------------------------- + + // Encoding modes (characters which can be encoded in QRcode) + + /** + * Encoding mode + */ + define('QR_MODE_NL', -1); + + /** + * Encoding mode numeric (0-9). 3 characters are encoded to 10bit length. In theory, 7089 characters or less can be stored in a QRcode. + */ + define('QR_MODE_NM', 0); + + /** + * Encoding mode alphanumeric (0-9A-Z $%*+-./:) 45characters. 2 characters are encoded to 11bit length. In theory, 4296 characters or less can be stored in a QRcode. + */ + define('QR_MODE_AN', 1); + + /** + * Encoding mode 8bit byte data. In theory, 2953 characters or less can be stored in a QRcode. + */ + define('QR_MODE_8B', 2); + + /** + * Encoding mode KANJI. A KANJI character (multibyte character) is encoded to 13bit length. In theory, 1817 characters or less can be stored in a QRcode. + */ + define('QR_MODE_KJ', 3); + + /** + * Encoding mode STRUCTURED (currently unsupported) + */ + define('QR_MODE_ST', 4); + + // ----------------------------------------------------- + + // Levels of error correction. + // QRcode has a function of an error correcting for miss reading that white is black. + // Error correcting is defined in 4 level as below. + + /** + * Error correction level L : About 7% or less errors can be corrected. + */ + define('QR_ECLEVEL_L', 0); + + /** + * Error correction level M : About 15% or less errors can be corrected. + */ + define('QR_ECLEVEL_M', 1); + + /** + * Error correction level Q : About 25% or less errors can be corrected. + */ + define('QR_ECLEVEL_Q', 2); + + /** + * Error correction level H : About 30% or less errors can be corrected. + */ + define('QR_ECLEVEL_H', 3); + + // ----------------------------------------------------- + + // Version. Size of QRcode is defined as version. + // Version is from 1 to 40. + // Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. + // So version 40 is 177*177 matrix. + + /** + * Maximum QR Code version. + */ + define('QRSPEC_VERSION_MAX', 40); + + /** + * Maximum matrix size for maximum version (version 40 is 177*177 matrix). + */ + define('QRSPEC_WIDTH_MAX', 177); + + // ----------------------------------------------------- + + /** + * Matrix index to get width from $capacity array. + */ + define('QRCAP_WIDTH', 0); + + /** + * Matrix index to get number of words from $capacity array. + */ + define('QRCAP_WORDS', 1); + + /** + * Matrix index to get remainder from $capacity array. + */ + define('QRCAP_REMINDER', 2); + + /** + * Matrix index to get error correction level from $capacity array. + */ + define('QRCAP_EC', 3); + + // ----------------------------------------------------- + + // Structure (currently usupported) + + /** + * Number of header bits for structured mode + */ + define('STRUCTURE_HEADER_BITS', 20); + + /** + * Max number of symbols for structured mode + */ + define('MAX_STRUCTURED_SYMBOLS', 16); + + // ----------------------------------------------------- + + // Masks + + /** + * Down point base value for case 1 mask pattern (concatenation of same color in a line or a column) + */ + define('N1', 3); + + /** + * Down point base value for case 2 mask pattern (module block of same color) + */ + define('N2', 3); + + /** + * Down point base value for case 3 mask pattern (1:1:3:1:1(dark:bright:dark:bright:dark)pattern in a line or a column) + */ + define('N3', 40); + + /** + * Down point base value for case 4 mask pattern (ration of dark modules in whole) + */ + define('N4', 10); + + // ----------------------------------------------------- + + // Optimization settings + + /** + * if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + */ + define('QR_FIND_BEST_MASK', true); + + /** + * if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + */ + define('QR_FIND_FROM_RANDOM', 2); + + /** + * when QR_FIND_BEST_MASK === false + */ + define('QR_DEFAULT_MASK', 2); + + // ----------------------------------------------------- + +} // end of definitions + +// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# + +// for compatibility with PHP4 +if (!function_exists('str_split')) { + /** + * Convert a string to an array (needed for PHP4 compatibility) + * @param $string (string) The input string. + * @param $split_length (int) Maximum length of the chunk. + * @return If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length. FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string , the entire string is returned as the first (and only) array element. + */ + function str_split($string, $split_length=1) { + if ((strlen($string) > $split_length) OR (!$split_length)) { + do { + $c = strlen($string); + $parts[] = substr($string, 0, $split_length); + $string = substr($string, $split_length); + } while ($string !== false); + } else { + $parts = array($string); + } + return $parts; + } +} + +// ##################################################### + +/** + * @class QRcode + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.010 + */ +class QRcode { + + /** + * Barcode array to be returned which is readable by TCPDF. + * @protected + */ + protected $barcode_array = array(); + + /** + * QR code version. Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix. + * @protected + */ + protected $version = 0; + + /** + * Levels of error correction. See definitions for possible values. + * @protected + */ + protected $level = QR_ECLEVEL_L; + + /** + * Encoding mode. + * @protected + */ + protected $hint = QR_MODE_8B; + + /** + * Boolean flag, if true the input string will be converted to uppercase. + * @protected + */ + protected $casesensitive = true; + + /** + * Structured QR code (not supported yet). + * @protected + */ + protected $structured = 0; + + /** + * Mask data. + * @protected + */ + protected $data; + + // FrameFiller + + /** + * Width. + * @protected + */ + protected $width; + + /** + * Frame. + * @protected + */ + protected $frame; + + /** + * X position of bit. + * @protected + */ + protected $x; + + /** + * Y position of bit. + * @protected + */ + protected $y; + + /** + * Direction. + * @protected + */ + protected $dir; + + /** + * Single bit value. + * @protected + */ + protected $bit; + + // ---- QRrawcode ---- + + /** + * Data code. + * @protected + */ + protected $datacode = array(); + + /** + * Error correction code. + * @protected + */ + protected $ecccode = array(); + + /** + * Blocks. + * @protected + */ + protected $blocks; + + /** + * Reed-Solomon blocks. + * @protected + */ + protected $rsblocks = array(); //of RSblock + + /** + * Counter. + * @protected + */ + protected $count; + + /** + * Data length. + * @protected + */ + protected $dataLength; + + /** + * Error correction length. + * @protected + */ + protected $eccLength; + + /** + * Value b1. + * @protected + */ + protected $b1; + + // ---- QRmask ---- + + /** + * Run length. + * @protected + */ + protected $runLength = array(); + + // ---- QRsplit ---- + + /** + * Input data string. + * @protected + */ + protected $dataStr = ''; + + /** + * Input items. + * @protected + */ + protected $items; + + // Reed-Solomon items + + /** + * Reed-Solomon items. + * @protected + */ + protected $rsitems = array(); + + /** + * Array of frames. + * @protected + */ + protected $frames = array(); + + /** + * Alphabet-numeric convesion table. + * @protected + */ + protected $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, // + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, // + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // + ); + + /** + * Array Table of the capacity of symbols. + * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004. + * @protected + */ + protected $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), // + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), // + array( 29, 70, 7, array( 15, 26, 36, 44)), // + array( 33, 100, 7, array( 20, 36, 52, 64)), // + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), // + array( 45, 196, 0, array( 40, 72, 108, 130)), // + array( 49, 242, 0, array( 48, 88, 132, 156)), // + array( 53, 292, 0, array( 60, 110, 160, 192)), // + array( 57, 346, 0, array( 72, 130, 192, 224)), // 10 + array( 61, 404, 0, array( 80, 150, 224, 264)), // + array( 65, 466, 0, array( 96, 176, 260, 308)), // + array( 69, 532, 0, array( 104, 198, 288, 352)), // + array( 73, 581, 3, array( 120, 216, 320, 384)), // + array( 77, 655, 3, array( 132, 240, 360, 432)), // 15 + array( 81, 733, 3, array( 144, 280, 408, 480)), // + array( 85, 815, 3, array( 168, 308, 448, 532)), // + array( 89, 901, 3, array( 180, 338, 504, 588)), // + array( 93, 991, 3, array( 196, 364, 546, 650)), // + array( 97, 1085, 3, array( 224, 416, 600, 700)), // 20 + array(101, 1156, 4, array( 224, 442, 644, 750)), // + array(105, 1258, 4, array( 252, 476, 690, 816)), // + array(109, 1364, 4, array( 270, 504, 750, 900)), // + array(113, 1474, 4, array( 300, 560, 810, 960)), // + array(117, 1588, 4, array( 312, 588, 870, 1050)), // 25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), // + array(125, 1828, 4, array( 360, 700, 1020, 1200)), // + array(129, 1921, 3, array( 390, 728, 1050, 1260)), // + array(133, 2051, 3, array( 420, 784, 1140, 1350)), // + array(137, 2185, 3, array( 450, 812, 1200, 1440)), // 30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), // + array(145, 2465, 3, array( 510, 924, 1350, 1620)), // + array(149, 2611, 3, array( 540, 980, 1440, 1710)), // + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), // + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), // 35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), // + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), // + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), // + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), // + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) // 40 + ); + + /** + * Array Length indicator. + * @protected + */ + protected $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + /** + * Array Table of the error correction code (Reed-Solomon block). + * See Table 12-16 (pp.30-36), JIS X0510:2004. + * @protected + */ + protected $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), // + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), // + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), // + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), // + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), // + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), // 10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), // + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), // + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), // + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), // + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), // 15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), // + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), // + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), // + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), // + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), // 20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), // + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), // + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), // + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), // + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), // 25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), // + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), // + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), // + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), // + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), // 30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), // + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), // + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), // + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), // + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), // 35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), // + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), // + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), // + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), // + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)) // 40 + ); + + /** + * Array Positions of alignment patterns. + * This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them. + * See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + * @protected + */ + protected $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), // 11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), // 16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), // 21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), // 26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), // 31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58) // 35-40 + ); + + /** + * Array Version information pattern (BCH coded). + * See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + * size: [QRSPEC_VERSION_MAX - 6] + * @protected + */ + protected $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, // + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, // + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, // + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, // + 0x27541, 0x28c69 + ); + + /** + * Array Format information + * @protected + */ + protected $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), // + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), // + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), // + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) // + ); + + + // ------------------------------------------------- + // ------------------------------------------------- + + + /** + * This is the class constructor. + * Creates a QRcode object + * @param $code (string) code to represent using QRcode + * @param $eclevel (string) error level: <ul><li>L : About 7% or less errors can be corrected.</li><li>M : About 15% or less errors can be corrected.</li><li>Q : About 25% or less errors can be corrected.</li><li>H : About 30% or less errors can be corrected.</li></ul> + * @public + * @since 1.0.000 + */ + public function __construct($code, $eclevel = 'L') { + $barcode_array = array(); + if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { + return false; + } + // set error correction level + $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H')); + if ($this->level === false) { + $this->level = QR_ECLEVEL_L; + } + if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) { + return false; + } + if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) { + return false; + } + $this->items = array(); + $this->encodeString($code); + if (is_null($this->data)) { + return false; + } + $qrTab = $this->binarize($this->data); + $size = count($qrTab); + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach (str_split($line) as $char) { + $arrAdd[] = ($char=='1')?1:0; + } + $barcode_array['bcode'][] = $arrAdd; + } + $this->barcode_array = $barcode_array; + } + + /** + * Returns a barcode array which is readable by TCPDF + * @return array barcode array readable by TCPDF; + * @public + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Convert the frame in binary form + * @param $frame (array) array to binarize + * @return array frame in binary form + */ + protected function binarize($frame) { + $len = count($frame); + // the frame is square (width = height) + foreach ($frame as &$frameLine) { + for ($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + return $frame; + } + + /** + * Encode the input string to QR code + * @param $string (string) input string to encode + */ + protected function encodeString($string) { + $this->dataStr = $string; + if (!$this->casesensitive) { + $this->toUpper(); + } + $ret = $this->splitString(); + if ($ret < 0) { + return NULL; + } + $this->encodeMask(-1); + } + + /** + * Encode mask + * @param $mask (int) masking mode + */ + protected function encodeMask($mask) { + $spec = array(0, 0, 0, 0, 0); + $this->datacode = $this->getByteStream($this->items); + + if (is_null($this->datacode)) { + return NULL; + } + $spec = $this->getEccSpec($this->version, $this->level, $spec); + $this->b1 = $this->rsBlockNum1($spec); + $this->dataLength = $this->rsDataLength($spec); + $this->eccLength = $this->rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = $this->rsBlockNum($spec); + $ret = $this->init($spec); + if ($ret < 0) { + return NULL; + } + $this->count = 0; + $this->width = $this->getWidth($this->version); + $this->frame = $this->newFrame($this->version); + $this->x = $this->width - 1; + $this->y = $this->width - 1; + $this->dir = -1; + $this->bit = -1; + // inteleaved data and ecc codes + for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) { + $code = $this->getCode(); + $bit = 0x80; + for ($j=0; $j<8; $j++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + // remainder bits + $j = $this->getRemainder($this->version); + for ($i=0; $i<$j; $i++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02); + } + // masking + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + if ($mask < 0) { + if (QR_FIND_BEST_MASK) { + $masked = $this->mask($this->width, $this->frame, $this->level); + } else { + $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level); + } + } else { + $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level); + } + if ($masked == NULL) { + return NULL; + } + $this->data = $masked; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // FrameFiller + + /** + * Set frame value at specified position + * @param $at (array) x,y position + * @param $val (int) value of the character to set + */ + protected function setFrameAt($at, $val) { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + /** + * Get frame value at specified position + * @param $at (array) x,y position + * @return value at specified position + */ + protected function getFrameAt($at) { + return ord($this->frame[$at['y']][$at['x']]); + } + + /** + * Return the next frame position + * @return array of x,y coordinates + */ + protected function getNextPosition() { + do { + if ($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + $x = $this->x; + $y = $this->y; + $w = $this->width; + if ($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + if ($this->dir < 0) { + if ($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if ($x == 6) { + $x--; + $y = 9; + } + } + } else { + if ($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if ($x == 6) { + $x--; + $y -= 8; + } + } + } + if (($x < 0) OR ($y < 0)) { + return NULL; + } + $this->x = $x; + $this->y = $y; + } while(ord($this->frame[$y][$x]) & 0x80); + return array('x'=>$x, 'y'=>$y); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrawcode + + /** + * Initialize code. + * @param $spec (array) array of ECC specification + * @return 0 in case of success, -1 in case of error + */ + protected function init($spec) { + $dl = $this->rsDataCodes1($spec); + $el = $this->rsEccCodes1($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + $endfor = $this->rsBlockNum1($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + if ($this->rsBlockNum2($spec) == 0) { + return 0; + } + $dl = $this->rsDataCodes2($spec); + $el = $this->rsEccCodes2($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + if ($rs == NULL) { + return -1; + } + $endfor = $this->rsBlockNum2($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + return 0; + } + + /** + * Return Reed-Solomon block code. + * @return array rsblocks + */ + protected function getCode() { + if ($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if ($col >= $this->rsblocks[0]['dataLength']) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]['data'][$col]; + } elseif ($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]['ecc'][$col]; + } else { + return 0; + } + $this->count++; + return $ret; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRmask + + /** + * Write Format Information on frame and returns the number of black bits + * @param $width (int) frame width + * @param $frame (array) frame + * @param $mask (array) masking mode + * @param $level (int) error correction level + * @return int blacks + */ + protected function writeFormatInformation($width, &$frame, $mask, $level) { + $blacks = 0; + $format = $this->getFormatInfo($mask, $level); + for ($i=0; $i<8; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[8][$width - 1 - $i] = chr($v); + if ($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + for ($i=0; $i<7; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[$width - 7 + $i][8] = chr($v); + if ($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + $format = $format >> 1; + } + return $blacks; + } + + /** + * mask0 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask0($x, $y) { + return ($x + $y) & 1; + } + + /** + * mask1 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask1($x, $y) { + return ($y & 1); + } + + /** + * mask2 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask2($x, $y) { + return ($x % 3); + } + + /** + * mask3 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask3($x, $y) { + return ($x + $y) % 3; + } + + /** + * mask4 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask4($x, $y) { + return (((int)($y / 2)) + ((int)($x / 3))) & 1; + } + + /** + * mask5 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask5($x, $y) { + return (($x * $y) & 1) + ($x * $y) % 3; + } + + /** + * mask6 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask6($x, $y) { + return ((($x * $y) & 1) + ($x * $y) % 3) & 1; + } + + /** + * mask7 + * @param $x (int) X position + * @param $y (int) Y position + * @return int mask + */ + protected function mask7($x, $y) { + return ((($x * $y) % 3) + (($x + $y) & 1)) & 1; + } + + /** + * Return bitmask + * @param $maskNo (int) mask number + * @param $width (int) width + * @param $frame (array) frame + * @return array bitmask + */ + protected function generateMaskNo($maskNo, $width, $frame) { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if (ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + } + } + return $bitMask; + } + + /** + * makeMaskNo + * @param $maskNo (int) + * @param $width (int) + * @param $s (int) + * @param $d (int) + * @param $maskGenOnly (boolean) + * @return int b + */ + protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) { + $b = 0; + $bitMask = array(); + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if ($maskGenOnly) { + return; + } + $d = $s; + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if ($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ ((int)($bitMask[$y][$x]))); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + return $b; + } + + /** + * makeMask + * @param $width (int) + * @param $frame (array) + * @param $maskNo (int) + * @param $level (int) + * @return array mask + */ + protected function makeMask($width, $frame, $maskNo, $level) { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + return $masked; + } + + /** + * calcN1N3 + * @param $length (int) + * @return int demerit + */ + protected function calcN1N3($length) { + $demerit = 0; + for ($i=0; $i<$length; ++$i) { + if ($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if ($i & 1) { + if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if (($this->runLength[$i-2] == $fact) + AND ($this->runLength[$i-1] == $fact) + AND ($this->runLength[$i+1] == $fact) + AND ($this->runLength[$i+2] == $fact)) { + if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + /** + * evaluateSymbol + * @param $width (int) + * @param $frame (array) + * @return int demerit + */ + protected function evaluateSymbol($width, $frame) { + $head = 0; + $demerit = 0; + for ($y=0; $y<$width; ++$y) { + $head = 0; + $this->runLength[0] = 1; + $frameY = $frame[$y]; + if ($y > 0) { + $frameYM = $frame[$y-1]; + } + for ($x=0; $x<$width; ++$x) { + if (($x > 0) AND ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + if (($b22 | ($w22 ^ 1)) & 1) { + $demerit += N2; + } + } + if (($x == 0) AND (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($x > 0) { + if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + for ($x=0; $x<$width; ++$x) { + $head = 0; + $this->runLength[0] = 1; + for ($y=0; $y<$width; ++$y) { + if (($y == 0) AND (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($y > 0) { + if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + return $demerit; + } + + /** + * mask + * @param $width (int) + * @param $frame (array) + * @param $level (int) + * @return array best mask + */ + protected function mask($width, $frame, $level) { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7); + if (QR_FIND_FROM_RANDOM !== false) { + $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; ++$i) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + } + $bestMask = $frame; + foreach ($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + if ($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + return $bestMask; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRsplit + + /** + * Return true if the character at specified position is a number + * @param $str (string) string + * @param $pos (int) characted position + * @return boolean true of false + */ + protected function isdigitat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + /** + * Return true if the character at specified position is an alphanumeric character + * @param $str (string) string + * @param $pos (int) characted position + * @return boolean true of false + */ + protected function isalnumat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ($this->lookAnTable(ord($str[$pos])) >= 0); + } + + /** + * identifyMode + * @param $pos (int) + * @return int mode + */ + protected function identifyMode($pos) { + if ($pos >= strlen($this->dataStr)) { + return QR_MODE_NL; + } + $c = $this->dataStr[$pos]; + if ($this->isdigitat($this->dataStr, $pos)) { + return QR_MODE_NM; + } elseif ($this->isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } elseif ($this->hint == QR_MODE_KJ) { + if ($pos+1 < strlen($this->dataStr)) { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KJ; + } + } + } + return QR_MODE_8B; + } + + /** + * eatNum + * @return int run + */ + protected function eatNum() { + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 0; + while($this->isdigitat($this->dataStr, $p)) { + $p++; + } + $run = $p; + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_8B) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + if ($mode == QR_MODE_AN) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsModeAn(1) // + 4 + la + - $this->estimateBitsModeAn($run + 1);// - 4 - la + if ($dif > 0) { + return $this->eatAn(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatAn + * @return int run + */ + protected function eatAn() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p =1 ; + while($this->isalnumat($this->dataStr, $p)) { + if ($this->isdigitat($this->dataStr, $p)) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsModeAn($p) // + 4 + la + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsModeAn($q); // - 4 - la + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + if (!$this->isalnumat($this->dataStr, $p)) { + $dif = $this->estimateBitsModeAn($run) + 4 + $la + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatKanji + * @return int run + */ + protected function eatKanji() { + $p = 0; + while($this->identifyMode($p) == QR_MODE_KJ) { + $p += 2; + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr)); + return $run; + } + + /** + * eat8 + * @return int run + */ + protected function eat8() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 1; + $dataStrLen = strlen($this->dataStr); + while($p < $dataStrLen) { + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_KJ) { + break; + } + if ($mode == QR_MODE_NM) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } elseif ($mode == QR_MODE_AN) { + $q = $p; + while($this->isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeAn($q - $p) + 4 + $la + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr)); + return $run; + } + + /** + * splitString + * @return (int) + */ + protected function splitString() { + while (strlen($this->dataStr) > 0) { + $mode = $this->identifyMode(0); + switch ($mode) { + case QR_MODE_NM: { + $length = $this->eatNum(); + break; + } + case QR_MODE_AN: { + $length = $this->eatAn(); + break; + } + case QR_MODE_KJ: { + if ($hint == QR_MODE_KJ) { + $length = $this->eatKanji(); + } else { + $length = $this->eat8(); + } + break; + } + default: { + $length = $this->eat8(); + break; + } + } + if ($length == 0) { + return 0; + } + if ($length < 0) { + return -1; + } + $this->dataStr = substr($this->dataStr, $length); + } + return 0; + } + + /** + * toUpper + */ + protected function toUpper() { + $stringLen = strlen($this->dataStr); + $p = 0; + while ($p < $stringLen) { + $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint); + if ($mode == QR_MODE_KJ) { + $p += 2; + } else { + if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + return $this->dataStr; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinputItem + + /** + * newInputItem + * @param $mode (int) + * @param $size (int) + * @param $data (array) + * @param $bstream (array) + * @return array input item + */ + protected function newInputItem($mode, $size, $data, $bstream=null) { + $setData = array_slice($data, 0, $size); + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0)); + } + if (!$this->check($mode, $size, $setData)) { + return NULL; + } + $inputitem = array(); + $inputitem['mode'] = $mode; + $inputitem['size'] = $size; + $inputitem['data'] = $setData; + $inputitem['bstream'] = $bstream; + return $inputitem; + } + + /** + * encodeModeNum + * @param $inputitem (array) + * @param $version (int) + * @return array input item + */ + protected function encodeModeNum($inputitem, $version) { + $words = (int)($inputitem['size'] / 3); + $inputitem['bstream'] = array(); + $val = 0x1; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']); + for ($i=0; $i < $words; ++$i) { + $val = (ord($inputitem['data'][$i*3 ]) - ord('0')) * 100; + $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$i*3+2]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val); + } + if ($inputitem['size'] - $words * 3 == 1) { + $val = ord($inputitem['data'][$words*3]) - ord('0'); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + } elseif (($inputitem['size'] - ($words * 3)) == 2) { + $val = (ord($inputitem['data'][$words*3 ]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$words*3+1]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val); + } + return $inputitem; + } + + /** + * encodeModeAn + * @param $inputitem (array) + * @param $version (int) + * @return array input item + */ + protected function encodeModeAn($inputitem, $version) { + $words = (int)($inputitem['size'] / 2); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']); + for ($i=0; $i < $words; ++$i) { + $val = (int)($this->lookAnTable(ord($inputitem['data'][$i*2])) * 45); + $val += (int)($this->lookAnTable(ord($inputitem['data'][($i*2)+1]))); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val); + } + if ($inputitem['size'] & 1) { + $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)])); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val); + } + return $inputitem; + } + + /** + * encodeMode8 + * @param $inputitem (array) + * @param $version (int) + * @return array input item + */ + protected function encodeMode8($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']); + for ($i=0; $i < $inputitem['size']; ++$i) { + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i])); + } + return $inputitem; + } + + /** + * encodeModeKanji + * @param $inputitem (array) + * @param $version (int) + * @return array input item + */ + protected function encodeModeKanji($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2)); + for ($i=0; $i<$inputitem['size']; $i+=2) { + $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]); + if ($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val); + } + return $inputitem; + } + + /** + * encodeModeStructure + * @param $inputitem (array) + * @return array input item + */ + protected function encodeModeStructure($inputitem) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2])); + return $inputitem; + } + + /** + * encodeBitStream + * @param $inputitem (array) + * @param $version (int) + * @return array input item + */ + protected function encodeBitStream($inputitem, $version) { + $inputitem['bstream'] = array(); + $words = $this->maximumWords($inputitem['mode'], $version); + if ($inputitem['size'] > $words) { + $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']); + $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words)); + $st1 = $this->encodeBitStream($st1, $version); + $st2 = $this->encodeBitStream($st2, $version); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']); + } else { + switch($inputitem['mode']) { + case QR_MODE_NM: { + $inputitem = $this->encodeModeNum($inputitem, $version); + break; + } + case QR_MODE_AN: { + $inputitem = $this->encodeModeAn($inputitem, $version); + break; + } + case QR_MODE_8B: { + $inputitem = $this->encodeMode8($inputitem, $version); + break; + } + case QR_MODE_KJ: { + $inputitem = $this->encodeModeKanji($inputitem, $version); + break; + } + case QR_MODE_ST: { + $inputitem = $this->encodeModeStructure($inputitem); + break; + } + default: { + break; + } + } + } + return $inputitem; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinput + + /** + * Append data to an input object. + * The data is copied and appended to the input object. + * @param $items (arrray) input items + * @param $mode (int) encoding mode. + * @param $size (int) size of data (byte). + * @param $data (array) array of input data. + * @return items + * + */ + protected function appendNewInputItem($items, $mode, $size, $data) { + $newitem = $this->newInputItem($mode, $size, $data); + if (!empty($newitem)) { + $items[] = $newitem; + } + return $items; + } + + /** + * insertStructuredAppendHeader + * @param $items (array) + * @param $size (int) + * @param $index (int) + * @param $parity (int) + * @return array items + */ + protected function insertStructuredAppendHeader($items, $size, $index, $parity) { + if ($size > MAX_STRUCTURED_SYMBOLS) { + return -1; + } + if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) { + return -1; + } + $buf = array($size, $index, $parity); + $entry = $this->newInputItem(QR_MODE_ST, 3, buf); + array_unshift($items, $entry); + return $items; + } + + /** + * calcParity + * @param $items (array) + * @return int parity + */ + protected function calcParity($items) { + $parity = 0; + foreach ($items as $item) { + if ($item['mode'] != QR_MODE_ST) { + for ($i=$item['size']-1; $i>=0; --$i) { + $parity ^= $item['data'][$i]; + } + } + } + return $parity; + } + + /** + * checkModeNum + * @param $size (int) + * @param $data (array) + * @return boolean true or false + */ + protected function checkModeNum($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){ + return false; + } + } + return true; + } + + /** + * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19). + * @param $c (int) character value + * @return value + */ + protected function lookAnTable($c) { + return (($c > 127)?-1:$this->anTable[$c]); + } + + /** + * checkModeAn + * @param $size (int) + * @param $data (array) + * @return boolean true or false + */ + protected function checkModeAn($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ($this->lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + return true; + } + + /** + * estimateBitsModeNum + * @param $size (int) + * @return int number of bits + */ + protected function estimateBitsModeNum($size) { + $w = (int)($size / 3); + $bits = ($w * 10); + switch($size - ($w * 3)) { + case 1: { + $bits += 4; + break; + } + case 2: { + $bits += 7; + break; + } + } + return $bits; + } + + /** + * estimateBitsModeAn + * @param $size (int) + * @return int number of bits + */ + protected function estimateBitsModeAn($size) { + $bits = (int)($size * 5.5); // (size / 2 ) * 11 + if ($size & 1) { + $bits += 6; + } + return $bits; + } + + /** + * estimateBitsMode8 + * @param $size (int) + * @return int number of bits + */ + protected function estimateBitsMode8($size) { + return (int)($size * 8); + } + + /** + * estimateBitsModeKanji + * @param $size (int) + * @return int number of bits + */ + protected function estimateBitsModeKanji($size) { + return (int)($size * 6.5); // (size / 2 ) * 13 + } + + /** + * checkModeKanji + * @param $size (int) + * @param $data (array) + * @return boolean true or false + */ + protected function checkModeKanji($size, $data) { + if ($size & 1) { + return false; + } + for ($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) { + return false; + } + } + return true; + } + + /** + * Validate the input data. + * @param $mode (int) encoding mode. + * @param $size (int) size of data (byte). + * @param $data (array) data to validate + * @return boolean true in case of valid data, false otherwise + */ + protected function check($mode, $size, $data) { + if ($size <= 0) { + return false; + } + switch($mode) { + case QR_MODE_NM: { + return $this->checkModeNum($size, $data); + } + case QR_MODE_AN: { + return $this->checkModeAn($size, $data); + } + case QR_MODE_KJ: { + return $this->checkModeKanji($size, $data); + } + case QR_MODE_8B: { + return true; + } + case QR_MODE_ST: { + return true; + } + default: { + break; + } + } + return false; + } + + /** + * estimateBitStreamSize + * @param $items (array) + * @param $version (int) + * @return int bits + */ + protected function estimateBitStreamSize($items, $version) { + $bits = 0; + if ($version == 0) { + $version = 1; + } + foreach ($items as $item) { + switch($item['mode']) { + case QR_MODE_NM: { + $bits = $this->estimateBitsModeNum($item['size']); + break; + } + case QR_MODE_AN: { + $bits = $this->estimateBitsModeAn($item['size']); + break; + } + case QR_MODE_8B: { + $bits = $this->estimateBitsMode8($item['size']); + break; + } + case QR_MODE_KJ: { + $bits = $this->estimateBitsModeKanji($item['size']); + break; + } + case QR_MODE_ST: { + return STRUCTURE_HEADER_BITS; + } + default: { + return 0; + } + } + $l = $this->lengthIndicator($item['mode'], $version); + $m = 1 << $l; + $num = (int)(($item['size'] + $m - 1) / $m); + $bits += $num * (4 + $l); + } + return $bits; + } + + /** + * estimateVersion + * @param $items (array) + * @return int version + */ + protected function estimateVersion($items) { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($items, $prev); + $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + return $version; + } + + /** + * lengthOfCode + * @param $mode (int) + * @param $version (int) + * @param $bits (int) + * @return int size + */ + protected function lengthOfCode($mode, $version, $bits) { + $payload = $bits - 4 - $this->lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NM: { + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if ($remain >= 7) { + $size += 2; + } elseif ($remain >= 4) { + $size += 1; + } + break; + } + case QR_MODE_AN: { + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if ($remain >= 6) { + ++$size; + } + break; + } + case QR_MODE_8B: { + $size = (int)($payload / 8); + break; + } + case QR_MODE_KJ: { + $size = (int)(($payload / 13) * 2); + break; + } + case QR_MODE_ST: { + $size = (int)($payload / 8); + break; + } + default: { + $size = 0; + break; + } + } + $maxsize = $this->maximumWords($mode, $version); + if ($size < 0) { + $size = 0; + } + if ($size > $maxsize) { + $size = $maxsize; + } + return $size; + } + + /** + * createBitStream + * @param $items (array) + * @return array of items and total bits + */ + protected function createBitStream($items) { + $total = 0; + foreach ($items as $key => $item) { + $items[$key] = $this->encodeBitStream($item, $this->version); + $bits = count($items[$key]['bstream']); + $total += $bits; + } + return array($items, $total); + } + + /** + * convertData + * @param $items (array) + * @return array items + */ + protected function convertData($items) { + $ver = $this->estimateVersion($items); + if ($ver > $this->version) { + $this->version = $ver; + } + while (true) { + $cbs = $this->createBitStream($items); + $items = $cbs[0]; + $bits = $cbs[1]; + if ($bits < 0) { + return -1; + } + $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($ver < 0) { + return -1; + } elseif ($ver > $this->version) { + $this->version = $ver; + } else { + break; + } + } + return $items; + } + + /** + * Append Padding Bit to bitstream + * @param $bstream (array) + * @return array bitstream + */ + protected function appendPaddingBit($bstream) { + if (is_null($bstream)) { + return null; + } + $bits = count($bstream); + $maxwords = $this->getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + if ($maxbits == $bits) { + return $bstream; + } + if ($maxbits - $bits < 5) { + return $this->appendNum($bstream, $maxbits - $bits, 0); + } + $bits += 4; + $words = (int)(($bits + 7) / 8); + $padding = array(); + $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0); + $padlen = $maxwords - $words; + if ($padlen > 0) { + $padbuf = array(); + for ($i=0; $i<$padlen; ++$i) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + $padding = $this->appendBytes($padding, $padlen, $padbuf); + } + return $this->appendBitstream($bstream, $padding); + } + + /** + * mergeBitStream + * @param $items (array) items + * @return array bitstream + */ + protected function mergeBitStream($items) { + $items = $this->convertData($items); + if (!is_array($items)) { + return null; + } + $bstream = array(); + foreach ($items as $item) { + $bstream = $this->appendBitstream($bstream, $item['bstream']); + } + return $bstream; + } + + /** + * Returns a stream of bits. + * @param $items (int) + * @return array padded merged byte stream + */ + protected function getBitStream($items) { + $bstream = $this->mergeBitStream($items); + return $this->appendPaddingBit($bstream); + } + + /** + * Pack all bit streams padding bits into a byte array. + * @param $items (int) + * @return array padded merged byte stream + */ + protected function getByteStream($items) { + $bstream = $this->getBitStream($items); + return $this->bitstreamToByte($bstream); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRbitstream + + /** + * Return an array with zeros + * @param $setLength (int) array size + * @return array + */ + protected function allocate($setLength) { + return array_fill(0, $setLength, 0); + } + + /** + * Return new bitstream from number + * @param $bits (int) number of bits + * @param $num (int) number + * @return array bitstream + */ + protected function newFromNum($bits, $num) { + $bstream = $this->allocate($bits); + $mask = 1 << ($bits - 1); + for ($i=0; $i<$bits; ++$i) { + if ($num & $mask) { + $bstream[$i] = 1; + } else { + $bstream[$i] = 0; + } + $mask = $mask >> 1; + } + return $bstream; + } + + /** + * Return new bitstream from bytes + * @param $size (int) size + * @param $data (array) bytes + * @return array bitstream + */ + protected function newFromBytes($size, $data) { + $bstream = $this->allocate($size * 8); + $p=0; + for ($i=0; $i<$size; ++$i) { + $mask = 0x80; + for ($j=0; $j<8; ++$j) { + if ($data[$i] & $mask) { + $bstream[$p] = 1; + } else { + $bstream[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + return $bstream; + } + + /** + * Append one bitstream to another + * @param $bitstream (array) original bitstream + * @param $append (array) bitstream to append + * @return array bitstream + */ + protected function appendBitstream($bitstream, $append) { + if ((!is_array($append)) OR (count($append) == 0)) { + return $bitstream; + } + if (count($bitstream) == 0) { + return $append; + } + return array_values(array_merge($bitstream, $append)); + } + + /** + * Append one bitstream created from number to another + * @param $bitstream (array) original bitstream + * @param $bits (int) number of bits + * @param $num (int) number + * @return array bitstream + */ + protected function appendNum($bitstream, $bits, $num) { + if ($bits == 0) { + return 0; + } + $b = $this->newFromNum($bits, $num); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Append one bitstream created from bytes to another + * @param $bitstream (array) original bitstream + * @param $size (int) size + * @param $data (array) bytes + * @return array bitstream + */ + protected function appendBytes($bitstream, $size, $data) { + if ($size == 0) { + return 0; + } + $b = $this->newFromBytes($size, $data); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Convert bitstream to bytes + * @param $bstream (array) original bitstream + * @return array of bytes + */ + protected function bitstreamToByte($bstream) { + if (is_null($bstream)) { + return null; + } + $size = count($bstream); + if ($size == 0) { + return array(); + } + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + $p = 0; + for ($i=0; $i<$bytes; $i++) { + $v = 0; + for ($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$i] = $v; + } + if ($size & 7) { + $v = 0; + for ($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$bytes] = $v; + } + return $data; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRspec + + /** + * Replace a value on the array at the specified position + * @param $srctab (array) + * @param $x (int) X position + * @param $y (int) Y position + * @param $repl (string) value to replace + * @param $replLen (int) length of the repl string + * @return array srctab + */ + protected function qrstrset($srctab, $x, $y, $repl, $replLen=false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + return $srctab; + } + + /** + * Return maximum data code length (bytes) for the version. + * @param $version (int) version + * @param $level (int) error correction level + * @return int maximum size (bytes) + */ + protected function getDataLength($version, $level) { + return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return maximum error correction code length (bytes) for the version. + * @param $version (int) version + * @param $level (int) error correction level + * @return int ECC size (bytes) + */ + protected function getECCLength($version, $level){ + return $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return the width of the symbol for the version. + * @param $version (int) version + * @return int width + */ + protected function getWidth($version) { + return $this->capacity[$version][QRCAP_WIDTH]; + } + + /** + * Return the numer of remainder bits. + * @param $version (int) version + * @return int number of remainder bits + */ + protected function getRemainder($version) { + return $this->capacity[$version][QRCAP_REMINDER]; + } + + /** + * Return a version number that satisfies the input code length. + * @param $size (int) input code length (bytes) + * @param $level (int) error correction level + * @return int version number + */ + protected function getMinimumVersion($size, $level) { + for ($i = 1; $i <= QRSPEC_VERSION_MAX; ++$i) { + $words = ($this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level]); + if ($words >= $size) { + return $i; + } + } + // the size of input data is greater than QR capacity, try to lover the error correction mode + return -1; + } + + /** + * Return the size of length indicator for the mode and version. + * @param $mode (int) encoding mode + * @param $version (int) version + * @return int the size of the appropriate length indicator (bits). + */ + protected function lengthIndicator($mode, $version) { + if ($mode == QR_MODE_ST) { + return 0; + } + if ($version <= 9) { + $l = 0; + } elseif ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + return $this->lengthTableBits[$mode][$l]; + } + + /** + * Return the maximum length for the mode and version. + * @param $mode (int) encoding mode + * @param $version (int) version + * @return int the maximum length (bytes) + */ + protected function maximumWords($mode, $version) { + if ($mode == QR_MODE_ST) { + return 3; + } + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + $bits = $this->lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + if ($mode == QR_MODE_KJ) { + $words *= 2; // the number of bytes is required + } + return $words; + } + + /** + * Return an array of ECC specification. + * @param $version (int) version + * @param $level (int) error correction level + * @param $spec (array) an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code} + * @return array spec + */ + protected function getEccSpec($version, $level, $spec) { + if (count($spec) < 5) { + $spec = array(0, 0, 0, 0, 0); + } + $b1 = $this->eccTable[$version][$level][0]; + $b2 = $this->eccTable[$version][$level][1]; + $data = $this->getDataLength($version, $level); + $ecc = $this->getECCLength($version, $level); + if ($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + return $spec; + } + + /** + * Put an alignment marker. + * @param $frame (array) frame + * @param $ox (int) X center coordinate of the pattern + * @param $oy (int) Y center coordinate of the pattern + * @return array frame + */ + protected function putAlignmentMarker($frame, $ox, $oy) { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + $yStart = $oy - 2; + $xStart = $ox - 2; + for ($y=0; $y < 5; $y++) { + $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]); + } + return $frame; + } + + /** + * Put an alignment pattern. + * @param $version (int) version + * @param $frame (array) frame + * @param $width (int) width + * @return array frame + */ + protected function putAlignmentPattern($version, $frame, $width) { + if ($version < 2) { + return $frame; + } + $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0]; + if ($d < 0) { + $w = 2; + } else { + $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2); + } + if ($w * $w - 3 == 1) { + $x = $this->alignmentPattern[$version][0]; + $y = $this->alignmentPattern[$version][0]; + $frame = $this->putAlignmentMarker($frame, $x, $y); + return $frame; + } + $cx = $this->alignmentPattern[$version][0]; + $wo = $w - 1; + for ($x=1; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, 6, $cx); + $frame = $this->putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + $cy = $this->alignmentPattern[$version][0]; + for ($y=0; $y < $wo; ++$y) { + $cx = $this->alignmentPattern[$version][0]; + for ($x=0; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + return $frame; + } + + /** + * Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. Use lower 18 bits. + * @param $version (int) version + * @return BCH encoded version information pattern + */ + protected function getVersionPattern($version) { + if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) { + return 0; + } + return $this->versionPattern[($version - 7)]; + } + + /** + * Return BCH encoded format information pattern. + * @param $mask (array) + * @param $level (int) error correction level + * @return BCH encoded format information pattern + */ + protected function getFormatInfo($mask, $level) { + if (($mask < 0) OR ($mask > 7)) { + return 0; + } + if (($level < 0) OR ($level > 3)) { + return 0; + } + return $this->formatInfo[$level][$mask]; + } + + /** + * Put a finder pattern. + * @param $frame (array) frame + * @param $ox (int) X center coordinate of the pattern + * @param $oy (int) Y center coordinate of the pattern + * @return array frame + */ + protected function putFinderPattern($frame, $ox, $oy) { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + for ($y=0; $y < 7; $y++) { + $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]); + } + return $frame; + } + + /** + * Return a copy of initialized frame. + * @param $version (int) version + * @return Array of unsigned char. + */ + protected function createFrame($version) { + $width = $this->capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + // Finder pattern + $frame = $this->putFinderPattern($frame, 0, 0); + $frame = $this->putFinderPattern($frame, $width - 7, 0); + $frame = $this->putFinderPattern($frame, 0, $width - 7); + // Separator + $yOffset = $width - 7; + for ($y=0; $y < 7; ++$y) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + ++$yOffset; + } + $setPattern = str_repeat("\xc0", 8); + $frame = $this->qrstrset($frame, 0, 7, $setPattern); + $frame = $this->qrstrset($frame, $width-8, 7, $setPattern); + $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern); + // Format info + $setPattern = str_repeat("\x84", 9); + $frame = $this->qrstrset($frame, 0, 8, $setPattern); + $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8); + $yOffset = $width - 8; + for ($y=0; $y < 8; ++$y,++$yOffset) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + // Timing pattern + $wo = $width - 15; + for ($i=1; $i < $wo; ++$i) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + // Alignment pattern + $frame = $this->putAlignmentPattern($version, $frame, $width); + // Version information + if ($version >= 7) { + $vinf = $this->getVersionPattern($version); + $v = $vinf; + for ($x=0; $x<6; ++$x) { + for ($y=0; $y<3; ++$y) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + $v = $vinf; + for ($y=0; $y<6; ++$y) { + for ($x=0; $x<3; ++$x) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + // and a little bit... + $frame[$width - 8][8] = "\x81"; + return $frame; + } + + /** + * Set new frame for the specified version. + * @param $version (int) version + * @return Array of unsigned char. + */ + protected function newFrame($version) { + if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) { + return NULL; + } + if (!isset($this->frames[$version])) { + $this->frames[$version] = $this->createFrame($version); + } + if (is_null($this->frames[$version])) { + return NULL; + } + return $this->frames[$version]; + } + + /** + * Return block number 0 + * @param $spec (array) + * @return int value + */ + protected function rsBlockNum($spec) { + return ($spec[0] + $spec[3]); + } + + /** + * Return block number 1 + * @param $spec (array) + * @return int value + */ + protected function rsBlockNum1($spec) { + return $spec[0]; + } + + /** + * Return data codes 1 + * @param $spec (array) + * @return int value + */ + protected function rsDataCodes1($spec) { + return $spec[1]; + } + + /** + * Return ecc codes 1 + * @param $spec (array) + * @return int value + */ + protected function rsEccCodes1($spec) { + return $spec[2]; + } + + /** + * Return block number 2 + * @param $spec (array) + * @return int value + */ + protected function rsBlockNum2($spec) { + return $spec[3]; + } + + /** + * Return data codes 2 + * @param $spec (array) + * @return int value + */ + protected function rsDataCodes2($spec) { + return $spec[4]; + } + + /** + * Return ecc codes 2 + * @param $spec (array) + * @return int value + */ + protected function rsEccCodes2($spec) { + return $spec[2]; + } + + /** + * Return data length + * @param $spec (array) + * @return int value + */ + protected function rsDataLength($spec) { + return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); + } + + /** + * Return ecc length + * @param $spec (array) + * @return int value + */ + protected function rsEccLength($spec) { + return ($spec[0] + $spec[3]) * $spec[2]; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrs + + /** + * Initialize a Reed-Solomon codec and add it to existing rsitems + * @param $symsize (int) symbol size, bits + * @param $gfpoly (int) Field generator polynomial coefficients + * @param $fcr (int) first root of RS code generator polynomial, index form + * @param $prim (int) primitive element to generate polynomial roots + * @param $nroots (int) RS code generator polynomial degree (number of roots) + * @param $pad (int) padding bytes at front of shortened block + * @return array Array of RS values:<ul><li>mm = Bits per symbol;</li><li>nn = Symbols per block;</li><li>alpha_to = log lookup table array;</li><li>index_of = Antilog lookup table array;</li><li>genpoly = Generator polynomial array;</li><li>nroots = Number of generator;</li><li>roots = number of parity symbols;</li><li>fcr = First consecutive root, index form;</li><li>prim = Primitive element, index form;</li><li>iprim = prim-th root of 1, index form;</li><li>pad = Padding bytes in shortened block;</li><li>gfpoly</ul>. + */ + protected function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + foreach ($this->rsitems as $rs) { + if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize) + OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) { + continue; + } + return $rs; + } + $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift($this->rsitems, $rs); + return $rs; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrsItem + + /** + * modnn + * @param $rs (array) RS values + * @param $x (int) X position + * @return int X osition + */ + protected function modnn($rs, $x) { + while ($x >= $rs['nn']) { + $x -= $rs['nn']; + $x = ($x >> $rs['mm']) + ($x & $rs['nn']); + } + return $x; + } + + /** + * Initialize a Reed-Solomon codec and returns an array of values. + * @param $symsize (int) symbol size, bits + * @param $gfpoly (int) Field generator polynomial coefficients + * @param $fcr (int) first root of RS code generator polynomial, index form + * @param $prim (int) primitive element to generate polynomial roots + * @param $nroots (int) RS code generator polynomial degree (number of roots) + * @param $pad (int) padding bytes at front of shortened block + * @return array Array of RS values:<ul><li>mm = Bits per symbol;</li><li>nn = Symbols per block;</li><li>alpha_to = log lookup table array;</li><li>index_of = Antilog lookup table array;</li><li>genpoly = Generator polynomial array;</li><li>nroots = Number of generator;</li><li>roots = number of parity symbols;</li><li>fcr = First consecutive root, index form;</li><li>prim = Primitive element, index form;</li><li>iprim = prim-th root of 1, index form;</li><li>pad = Padding bytes in shortened block;</li><li>gfpoly</ul>. + */ + protected function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2) + $rs = null; + // Check parameter ranges + if (($symsize < 0) OR ($symsize > 8)) { + return $rs; + } + if (($fcr < 0) OR ($fcr >= (1<<$symsize))) { + return $rs; + } + if (($prim <= 0) OR ($prim >= (1<<$symsize))) { + return $rs; + } + if (($nroots < 0) OR ($nroots >= (1<<$symsize))) { + return $rs; + } + if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) { + return $rs; + } + $rs = array(); + $rs['mm'] = $symsize; + $rs['nn'] = (1 << $symsize) - 1; + $rs['pad'] = $pad; + $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0); + $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0); + // PHP style macro replacement ;) + $NN =& $rs['nn']; + $A0 =& $NN; + // Generate Galois field lookup tables + $rs['index_of'][0] = $A0; // log(zero) = -inf + $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0 + $sr = 1; + for ($i=0; $i<$rs['nn']; ++$i) { + $rs['index_of'][$sr] = $i; + $rs['alpha_to'][$i] = $sr; + $sr <<= 1; + if ($sr & (1 << $symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs['nn']; + } + if ($sr != 1) { + // field generator polynomial is not primitive! + return NULL; + } + // Form RS code generator polynomial from its roots + $rs['genpoly'] = array_fill(0, ($nroots + 1), 0); + $rs['fcr'] = $fcr; + $rs['prim'] = $prim; + $rs['nroots'] = $nroots; + $rs['gfpoly'] = $gfpoly; + // Find prim-th root of 1, used in decoding + for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) { + ; // intentional empty-body loop! + } + $rs['iprim'] = (int)($iprim / $prim); + $rs['genpoly'][0] = 1; + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs['genpoly'][$i+1] = 1; + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; --$j) { + if ($rs['genpoly'][$j] != 0) { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)]; + } else { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)]; + } + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; ++$i) { + $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]]; + } + return $rs; + } + + /** + * Encode a Reed-Solomon codec and returns the parity array + * @param $rs (array) RS values + * @param $data (array) data + * @param $parity (array) parity + * @return parity array + */ + protected function encode_rs_char($rs, $data, $parity) { + $MM =& $rs['mm']; // bits per symbol + $NN =& $rs['nn']; // the total number of symbols in a RS block + $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form + $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form + $GENPOLY =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form + $NROOTS =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block + $FCR =& $rs['fcr']; // first consecutive root, index form + $PRIM =& $rs['prim']; // primitive element, index form + $IPRIM =& $rs['iprim']; // prim-th root of 1, index form + $PAD =& $rs['pad']; // the number of pad symbols in a block + $A0 =& $NN; + $parity = array_fill(0, $NROOTS, 0); + for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) { + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if ($feedback != $A0) { + // feedback term is non-zero + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback); + for ($j=1; $j < $NROOTS; ++$j) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])]; + } + } + // Shift + array_shift($parity); + if ($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + return $parity; + } + +} // end QRcode class + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/sRGB.icc b/tcpdf/include/sRGB.icc new file mode 100644 index 0000000..71e3383 Binary files /dev/null and b/tcpdf/include/sRGB.icc differ diff --git a/tcpdf/include/tcpdf_colors.php b/tcpdf/include/tcpdf_colors.php new file mode 100644 index 0000000..77f1c4c --- /dev/null +++ b/tcpdf/include/tcpdf_colors.php @@ -0,0 +1,462 @@ +<?php +//============================================================+ +// File name : tcpdf_colors.php +// Version : 1.0.004 +// Begin : 2002-04-09 +// Last Update : 2014-04-25 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2002-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Array of WEB safe colors +// +//============================================================+ + +/** + * @file + * PHP color class for TCPDF + * @author Nicola Asuni + * @package com.tecnick.tcpdf + */ + +/** + * @class TCPDF_COLORS + * PHP color class for TCPDF + * @package com.tecnick.tcpdf + * @version 1.0.004 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_COLORS { + + /** + * Array of WEB safe colors + * @public static + */ + public static $webcolor = array ( + 'aliceblue' => 'f0f8ff', + 'antiquewhite' => 'faebd7', + 'aqua' => '00ffff', + 'aquamarine' => '7fffd4', + 'azure' => 'f0ffff', + 'beige' => 'f5f5dc', + 'bisque' => 'ffe4c4', + 'black' => '000000', + 'blanchedalmond' => 'ffebcd', + 'blue' => '0000ff', + 'blueviolet' => '8a2be2', + 'brown' => 'a52a2a', + 'burlywood' => 'deb887', + 'cadetblue' => '5f9ea0', + 'chartreuse' => '7fff00', + 'chocolate' => 'd2691e', + 'coral' => 'ff7f50', + 'cornflowerblue' => '6495ed', + 'cornsilk' => 'fff8dc', + 'crimson' => 'dc143c', + 'cyan' => '00ffff', + 'darkblue' => '00008b', + 'darkcyan' => '008b8b', + 'darkgoldenrod' => 'b8860b', + 'dkgray' => 'a9a9a9', + 'darkgray' => 'a9a9a9', + 'darkgrey' => 'a9a9a9', + 'darkgreen' => '006400', + 'darkkhaki' => 'bdb76b', + 'darkmagenta' => '8b008b', + 'darkolivegreen' => '556b2f', + 'darkorange' => 'ff8c00', + 'darkorchid' => '9932cc', + 'darkred' => '8b0000', + 'darksalmon' => 'e9967a', + 'darkseagreen' => '8fbc8f', + 'darkslateblue' => '483d8b', + 'darkslategray' => '2f4f4f', + 'darkslategrey' => '2f4f4f', + 'darkturquoise' => '00ced1', + 'darkviolet' => '9400d3', + 'deeppink' => 'ff1493', + 'deepskyblue' => '00bfff', + 'dimgray' => '696969', + 'dimgrey' => '696969', + 'dodgerblue' => '1e90ff', + 'firebrick' => 'b22222', + 'floralwhite' => 'fffaf0', + 'forestgreen' => '228b22', + 'fuchsia' => 'ff00ff', + 'gainsboro' => 'dcdcdc', + 'ghostwhite' => 'f8f8ff', + 'gold' => 'ffd700', + 'goldenrod' => 'daa520', + 'gray' => '808080', + 'grey' => '808080', + 'green' => '008000', + 'greenyellow' => 'adff2f', + 'honeydew' => 'f0fff0', + 'hotpink' => 'ff69b4', + 'indianred' => 'cd5c5c', + 'indigo' => '4b0082', + 'ivory' => 'fffff0', + 'khaki' => 'f0e68c', + 'lavender' => 'e6e6fa', + 'lavenderblush' => 'fff0f5', + 'lawngreen' => '7cfc00', + 'lemonchiffon' => 'fffacd', + 'lightblue' => 'add8e6', + 'lightcoral' => 'f08080', + 'lightcyan' => 'e0ffff', + 'lightgoldenrodyellow' => 'fafad2', + 'ltgray' => 'd3d3d3', + 'lightgray' => 'd3d3d3', + 'lightgrey' => 'd3d3d3', + 'lightgreen' => '90ee90', + 'lightpink' => 'ffb6c1', + 'lightsalmon' => 'ffa07a', + 'lightseagreen' => '20b2aa', + 'lightskyblue' => '87cefa', + 'lightslategray' => '778899', + 'lightslategrey' => '778899', + 'lightsteelblue' => 'b0c4de', + 'lightyellow' => 'ffffe0', + 'lime' => '00ff00', + 'limegreen' => '32cd32', + 'linen' => 'faf0e6', + 'magenta' => 'ff00ff', + 'maroon' => '800000', + 'mediumaquamarine' => '66cdaa', + 'mediumblue' => '0000cd', + 'mediumorchid' => 'ba55d3', + 'mediumpurple' => '9370d8', + 'mediumseagreen' => '3cb371', + 'mediumslateblue' => '7b68ee', + 'mediumspringgreen' => '00fa9a', + 'mediumturquoise' => '48d1cc', + 'mediumvioletred' => 'c71585', + 'midnightblue' => '191970', + 'mintcream' => 'f5fffa', + 'mistyrose' => 'ffe4e1', + 'moccasin' => 'ffe4b5', + 'navajowhite' => 'ffdead', + 'navy' => '000080', + 'oldlace' => 'fdf5e6', + 'olive' => '808000', + 'olivedrab' => '6b8e23', + 'orange' => 'ffa500', + 'orangered' => 'ff4500', + 'orchid' => 'da70d6', + 'palegoldenrod' => 'eee8aa', + 'palegreen' => '98fb98', + 'paleturquoise' => 'afeeee', + 'palevioletred' => 'd87093', + 'papayawhip' => 'ffefd5', + 'peachpuff' => 'ffdab9', + 'peru' => 'cd853f', + 'pink' => 'ffc0cb', + 'plum' => 'dda0dd', + 'powderblue' => 'b0e0e6', + 'purple' => '800080', + 'red' => 'ff0000', + 'rosybrown' => 'bc8f8f', + 'royalblue' => '4169e1', + 'saddlebrown' => '8b4513', + 'salmon' => 'fa8072', + 'sandybrown' => 'f4a460', + 'seagreen' => '2e8b57', + 'seashell' => 'fff5ee', + 'sienna' => 'a0522d', + 'silver' => 'c0c0c0', + 'skyblue' => '87ceeb', + 'slateblue' => '6a5acd', + 'slategray' => '708090', + 'slategrey' => '708090', + 'snow' => 'fffafa', + 'springgreen' => '00ff7f', + 'steelblue' => '4682b4', + 'tan' => 'd2b48c', + 'teal' => '008080', + 'thistle' => 'd8bfd8', + 'tomato' => 'ff6347', + 'turquoise' => '40e0d0', + 'violet' => 'ee82ee', + 'wheat' => 'f5deb3', + 'white' => 'ffffff', + 'whitesmoke' => 'f5f5f5', + 'yellow' => 'ffff00', + 'yellowgreen' => '9acd32' + ); // end of web colors + + /** + * Array of valid JavaScript color names + * @public static + */ + public static $jscolor = array ('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray'); + + /** + * Array of Spot colors (C,M,Y,K,name) + * Color keys must be in lowercase and without spaces. + * As long as no open standard for spot colours exists, you have to buy a colour book by one of the colour manufacturers and insert the values and names of spot colours directly. + * Common industry standard spot colors are: ANPA-COLOR, DIC, FOCOLTONE, GCMI, HKS, PANTONE, TOYO, TRUMATCH. + * @public static + */ + public static $spotcolor = array ( + // special registration colors + 'none' => array( 0, 0, 0, 0, 'None'), + 'all' => array(100, 100, 100, 100, 'All'), + // standard CMYK colors + 'cyan' => array(100, 0, 0, 0, 'Cyan'), + 'magenta' => array( 0, 100, 0, 0, 'Magenta'), + 'yellow' => array( 0, 0, 100, 0, 'Yellow'), + 'key' => array( 0, 0, 0, 100, 'Key'), + // alias + 'white' => array( 0, 0, 0, 0, 'White'), + 'black' => array( 0, 0, 0, 100, 'Black'), + // standard RGB colors + 'red' => array( 0, 100, 100, 0, 'Red'), + 'green' => array(100, 0, 100, 0, 'Green'), + 'blue' => array(100, 100, 0, 0, 'Blue'), + // Add here standard spot colors or dynamically define them with AddSpotColor() + // ... + ); // end of spot colors + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + /** + * Return the Spot color array. + * @param $name (string) Name of the spot color. + * @param $spotc (array) Reference to an array of spot colors. + * @return (array) Spot color array or false if not defined. + * @since 5.9.125 (2011-10-03) + * @public static + */ + public static function getSpotColor($name, &$spotc) { + if (isset($spotc[$name])) { + return $spotc[$name]; + } + $color = preg_replace('/[\s]*/', '', $name); // remove extra spaces + $color = strtolower($color); + if (isset(self::$spotcolor[$color])) { + if (!isset($spotc[$name])) { + $i = (1 + count($spotc)); + $spotc[$name] = array('C' => self::$spotcolor[$color][0], 'M' => self::$spotcolor[$color][1], 'Y' => self::$spotcolor[$color][2], 'K' => self::$spotcolor[$color][3], 'name' => self::$spotcolor[$color][4], 'i' => $i); + } + return $spotc[self::$spotcolor[$color][4]]; + } + return false; + } + + /** + * Returns an array (RGB or CMYK) from an html color name, or a six-digit (i.e. #3FE5AA), or three-digit (i.e. #7FF) hexadecimal color, or a javascript color array, or javascript color name. + * @param $hcolor (string) HTML color. + * @param $spotc (array) Reference to an array of spot colors. + * @param $defcol (array) Color to return in case of error. + * @return array RGB or CMYK color, or false in case of error. + * @public static + */ + public static function convertHTMLColorToDec($hcolor, &$spotc, $defcol=array('R'=>128,'G'=>128,'B'=>128)) { + $color = preg_replace('/[\s]*/', '', $hcolor); // remove extra spaces + $color = strtolower($color); + // check for javascript color array syntax + if (strpos($color, '[') !== false) { + if (preg_match('/[\[][\"\'](t|g|rgb|cmyk)[\"\'][\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\]]/', $color, $m) > 0) { + $returncolor = array(); + switch ($m[1]) { + case 'cmyk': { + // RGB + $returncolor['C'] = max(0, min(100, (floatval($m[2]) * 100))); + $returncolor['M'] = max(0, min(100, (floatval($m[3]) * 100))); + $returncolor['Y'] = max(0, min(100, (floatval($m[4]) * 100))); + $returncolor['K'] = max(0, min(100, (floatval($m[5]) * 100))); + break; + } + case 'rgb': { + // RGB + $returncolor['R'] = max(0, min(255, (floatval($m[2]) * 255))); + $returncolor['G'] = max(0, min(255, (floatval($m[3]) * 255))); + $returncolor['B'] = max(0, min(255, (floatval($m[4]) * 255))); + break; + } + case 'g': { + // grayscale + $returncolor['G'] = max(0, min(255, (floatval($m[2]) * 255))); + break; + } + case 't': + default: { + // transparent (empty array) + break; + } + } + return $returncolor; + } + } elseif ((substr($color, 0, 4) != 'cmyk') AND (substr($color, 0, 3) != 'rgb') AND (($dotpos = strpos($color, '.')) !== false)) { + // remove class parent (i.e.: color.red) + $color = substr($color, ($dotpos + 1)); + if ($color == 'transparent') { + // transparent (empty array) + return array(); + } + } + if (strlen($color) == 0) { + return $defcol; + } + // RGB ARRAY + if (substr($color, 0, 3) == 'rgb') { + $codes = substr($color, 4); + $codes = str_replace(')', '', $codes); + $returncolor = explode(',', $codes); + foreach ($returncolor as $key => $val) { + if (strpos($val, '%') > 0) { + // percentage + $returncolor[$key] = (255 * intval($val) / 100); + } else { + $returncolor[$key] = intval($val); + } + // normalize value + $returncolor[$key] = max(0, min(255, $returncolor[$key])); + } + return $returncolor; + } + // CMYK ARRAY + if (substr($color, 0, 4) == 'cmyk') { + $codes = substr($color, 5); + $codes = str_replace(')', '', $codes); + $returncolor = explode(',', $codes); + foreach ($returncolor as $key => $val) { + if (strpos($val, '%') !== false) { + // percentage + $returncolor[$key] = (100 * intval($val) / 100); + } else { + $returncolor[$key] = intval($val); + } + // normalize value + $returncolor[$key] = max(0, min(100, $returncolor[$key])); + } + return $returncolor; + } + if ($color[0] != '#') { + // COLOR NAME + if (isset(self::$webcolor[$color])) { + // web color + $color_code = self::$webcolor[$color]; + } else { + // spot color + $returncolor = self::getSpotColor($color, $spotc); + if ($returncolor === false) { + $returncolor = $defcol; + } + return $returncolor; + } + } else { + $color_code = substr($color, 1); + } + // HEXADECIMAL REPRESENTATION + switch (strlen($color_code)) { + case 3: { + // 3-digit RGB hexadecimal representation + $r = substr($color_code, 0, 1); + $g = substr($color_code, 1, 1); + $b = substr($color_code, 2, 1); + $returncolor = array(); + $returncolor['R'] = max(0, min(255, hexdec($r.$r))); + $returncolor['G'] = max(0, min(255, hexdec($g.$g))); + $returncolor['B'] = max(0, min(255, hexdec($b.$b))); + break; + } + case 6: { + // 6-digit RGB hexadecimal representation + $returncolor = array(); + $returncolor['R'] = max(0, min(255, hexdec(substr($color_code, 0, 2)))); + $returncolor['G'] = max(0, min(255, hexdec(substr($color_code, 2, 2)))); + $returncolor['B'] = max(0, min(255, hexdec(substr($color_code, 4, 2)))); + break; + } + case 8: { + // 8-digit CMYK hexadecimal representation + $returncolor = array(); + $returncolor['C'] = max(0, min(100, round(hexdec(substr($color_code, 0, 2)) / 2.55))); + $returncolor['M'] = max(0, min(100, round(hexdec(substr($color_code, 2, 2)) / 2.55))); + $returncolor['Y'] = max(0, min(100, round(hexdec(substr($color_code, 4, 2)) / 2.55))); + $returncolor['K'] = max(0, min(100, round(hexdec(substr($color_code, 6, 2)) / 2.55))); + break; + } + default: { + $returncolor = $defcol; + break; + } + } + return $returncolor; + } + + /** + * Convert a color array into a string representation. + * @param $c (array) Array of colors. + * @return (string) The color array representation. + * @since 5.9.137 (2011-12-01) + * @public static + */ + public static function getColorStringFromArray($c) { + $c = array_values($c); + $color = '['; + switch (count($c)) { + case 4: { + // CMYK + $color .= sprintf('%F %F %F %F', (max(0, min(100, floatval($c[0]))) / 100), (max(0, min(100, floatval($c[1]))) / 100), (max(0, min(100, floatval($c[2]))) / 100), (max(0, min(100, floatval($c[3]))) / 100)); + break; + } + case 3: { + // RGB + $color .= sprintf('%F %F %F', (max(0, min(255, floatval($c[0]))) / 255), (max(0, min(255, floatval($c[1]))) / 255), (max(0, min(255, floatval($c[2]))) / 255)); + break; + } + case 1: { + // grayscale + $color .= sprintf('%F', (max(0, min(255, floatval($c[0]))) / 255)); + break; + } + } + $color .= ']'; + return $color; + } + + /** + * Convert color to javascript color. + * @param $color (string) color name or "#RRGGBB" + * @protected + * @since 2.1.002 (2008-02-12) + * @public static + */ + public static function _JScolor($color) { + if (substr($color, 0, 1) == '#') { + return sprintf("['RGB',%F,%F,%F]", (hexdec(substr($color, 1, 2)) / 255), (hexdec(substr($color, 3, 2)) / 255), (hexdec(substr($color, 5, 2)) / 255)); + } + if (!in_array($color, self::$jscolor)) { + // default transparent color + $color = $jscolor[0]; + } + return 'color.'.$color; + } + + +} // END OF TCPDF_COLORS CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/tcpdf_filters.php b/tcpdf/include/tcpdf_filters.php new file mode 100644 index 0000000..dfb80c5 --- /dev/null +++ b/tcpdf/include/tcpdf_filters.php @@ -0,0 +1,481 @@ +<?php +//============================================================+ +// File name : tcpdf_filters.php +// Version : 1.0.001 +// Begin : 2011-05-23 +// Last Update : 2014-04-25 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2011-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : This is a PHP class for decoding common PDF filters (PDF 32000-2008 - 7.4 Filters). +// +//============================================================+ + +/** + * @file + * This is a PHP class for decoding common PDF filters (PDF 32000-2008 - 7.4 Filters).<br> + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.001 + */ + +/** + * @class TCPDF_FILTERS + * This is a PHP class for decoding common PDF filters (PDF 32000-2008 - 7.4 Filters).<br> + * @package com.tecnick.tcpdf + * @brief This is a PHP class for decoding common PDF filters. + * @version 1.0.001 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_FILTERS { + + /** + * Define a list of available filter decoders. + * @private static + */ + private static $available_filters = array('ASCIIHexDecode', 'ASCII85Decode', 'LZWDecode', 'FlateDecode', 'RunLengthDecode'); + +// ----------------------------------------------------------------------------- + + /** + * Get a list of available decoding filters. + * @return (array) Array of available filter decoders. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function getAvailableFilters() { + return self::$available_filters; + } + + /** + * Decode data using the specified filter type. + * @param $filter (string) Filter name. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilter($filter, $data) { + switch ($filter) { + case 'ASCIIHexDecode': { + return self::decodeFilterASCIIHexDecode($data); + break; + } + case 'ASCII85Decode': { + return self::decodeFilterASCII85Decode($data); + break; + } + case 'LZWDecode': { + return self::decodeFilterLZWDecode($data); + break; + } + case 'FlateDecode': { + return self::decodeFilterFlateDecode($data); + break; + } + case 'RunLengthDecode': { + return self::decodeFilterRunLengthDecode($data); + break; + } + case 'CCITTFaxDecode': { + return self::decodeFilterCCITTFaxDecode($data); + break; + } + case 'JBIG2Decode': { + return self::decodeFilterJBIG2Decode($data); + break; + } + case 'DCTDecode': { + return self::decodeFilterDCTDecode($data); + break; + } + case 'JPXDecode': { + return self::decodeFilterJPXDecode($data); + break; + } + case 'Crypt': { + return self::decodeFilterCrypt($data); + break; + } + default: { + return self::decodeFilterStandard($data); + break; + } + } + } + + // --- FILTERS (PDF 32000-2008 - 7.4 Filters) ------------------------------ + + /** + * Standard + * Default decoding filter (leaves data unchanged). + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterStandard($data) { + return $data; + } + + /** + * ASCIIHexDecode + * Decodes data encoded in an ASCII hexadecimal representation, reproducing the original binary data. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterASCIIHexDecode($data) { + // initialize string to return + $decoded = ''; + // all white-space characters shall be ignored + $data = preg_replace('/[\s]/', '', $data); + // check for EOD character: GREATER-THAN SIGN (3Eh) + $eod = strpos($data, '>'); + if ($eod !== false) { + // remove EOD and extra data (if any) + $data = substr($data, 0, $eod); + $eod = true; + } + // get data length + $data_length = strlen($data); + if (($data_length % 2) != 0) { + // odd number of hexadecimal digits + if ($eod) { + // EOD shall behave as if a 0 (zero) followed the last digit + $data = substr($data, 0, -1).'0'.substr($data, -1); + } else { + self::Error('decodeFilterASCIIHexDecode: invalid code'); + } + } + // check for invalid characters + if (preg_match('/[^a-fA-F\d]/', $data) > 0) { + self::Error('decodeFilterASCIIHexDecode: invalid code'); + } + // get one byte of binary data for each pair of ASCII hexadecimal digits + $decoded = pack('H*', $data); + return $decoded; + } + + /** + * ASCII85Decode + * Decodes data encoded in an ASCII base-85 representation, reproducing the original binary data. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterASCII85Decode($data) { + // initialize string to return + $decoded = ''; + // all white-space characters shall be ignored + $data = preg_replace('/[\s]/', '', $data); + // remove start sequence 2-character sequence <~ (3Ch)(7Eh) + if (strpos($data, '<~') !== false) { + // remove EOD and extra data (if any) + $data = substr($data, 2); + } + // check for EOD: 2-character sequence ~> (7Eh)(3Eh) + $eod = strpos($data, '~>'); + if ($eod !== false) { + // remove EOD and extra data (if any) + $data = substr($data, 0, $eod); + } + // data length + $data_length = strlen($data); + // check for invalid characters + if (preg_match('/[^\x21-\x75,\x74]/', $data) > 0) { + self::Error('decodeFilterASCII85Decode: invalid code'); + } + // z sequence + $zseq = chr(0).chr(0).chr(0).chr(0); + // position inside a group of 4 bytes (0-3) + $group_pos = 0; + $tuple = 0; + $pow85 = array((85*85*85*85), (85*85*85), (85*85), 85, 1); + $last_pos = ($data_length - 1); + // for each byte + for ($i = 0; $i < $data_length; ++$i) { + // get char value + $char = ord($data[$i]); + if ($char == 122) { // 'z' + if ($group_pos == 0) { + $decoded .= $zseq; + } else { + self::Error('decodeFilterASCII85Decode: invalid code'); + } + } else { + // the value represented by a group of 5 characters should never be greater than 2^32 - 1 + $tuple += (($char - 33) * $pow85[$group_pos]); + if ($group_pos == 4) { + $decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8).chr($tuple); + $tuple = 0; + $group_pos = 0; + } else { + ++$group_pos; + } + } + } + if ($group_pos > 1) { + $tuple += $pow85[($group_pos - 1)]; + } + // last tuple (if any) + switch ($group_pos) { + case 4: { + $decoded .= chr($tuple >> 24).chr($tuple >> 16).chr($tuple >> 8); + break; + } + case 3: { + $decoded .= chr($tuple >> 24).chr($tuple >> 16); + break; + } + case 2: { + $decoded .= chr($tuple >> 24); + break; + } + case 1: { + self::Error('decodeFilterASCII85Decode: invalid code'); + break; + } + } + return $decoded; + } + + /** + * LZWDecode + * Decompresses data encoded using the LZW (Lempel-Ziv-Welch) adaptive compression method, reproducing the original text or binary data. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterLZWDecode($data) { + // initialize string to return + $decoded = ''; + // data length + $data_length = strlen($data); + // convert string to binary string + $bitstring = ''; + for ($i = 0; $i < $data_length; ++$i) { + $bitstring .= sprintf('%08b', ord($data{$i})); + } + // get the number of bits + $data_length = strlen($bitstring); + // initialize code length in bits + $bitlen = 9; + // initialize dictionary index + $dix = 258; + // initialize the dictionary (with the first 256 entries). + $dictionary = array(); + for ($i = 0; $i < 256; ++$i) { + $dictionary[$i] = chr($i); + } + // previous val + $prev_index = 0; + // while we encounter EOD marker (257), read code_length bits + while (($data_length > 0) AND (($index = bindec(substr($bitstring, 0, $bitlen))) != 257)) { + // remove read bits from string + $bitstring = substr($bitstring, $bitlen); + // update number of bits + $data_length -= $bitlen; + if ($index == 256) { // clear-table marker + // reset code length in bits + $bitlen = 9; + // reset dictionary index + $dix = 258; + $prev_index = 256; + // reset the dictionary (with the first 256 entries). + $dictionary = array(); + for ($i = 0; $i < 256; ++$i) { + $dictionary[$i] = chr($i); + } + } elseif ($prev_index == 256) { + // first entry + $decoded .= $dictionary[$index]; + $prev_index = $index; + } else { + // check if index exist in the dictionary + if ($index < $dix) { + // index exist on dictionary + $decoded .= $dictionary[$index]; + $dic_val = $dictionary[$prev_index].$dictionary[$index][0]; + // store current index + $prev_index = $index; + } else { + // index do not exist on dictionary + $dic_val = $dictionary[$prev_index].$dictionary[$prev_index][0]; + $decoded .= $dic_val; + } + // update dictionary + $dictionary[$dix] = $dic_val; + ++$dix; + // change bit length by case + if ($dix == 2047) { + $bitlen = 12; + } elseif ($dix == 1023) { + $bitlen = 11; + } elseif ($dix == 511) { + $bitlen = 10; + } + } + } + return $decoded; + } + + /** + * FlateDecode + * Decompresses data encoded using the zlib/deflate compression method, reproducing the original text or binary data. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterFlateDecode($data) { + // initialize string to return + $decoded = @gzuncompress($data); + if ($decoded === false) { + self::Error('decodeFilterFlateDecode: invalid code'); + } + return $decoded; + } + + /** + * RunLengthDecode + * Decompresses data encoded using a byte-oriented run-length encoding algorithm. + * @param $data (string) Data to decode. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterRunLengthDecode($data) { + // initialize string to return + $decoded = ''; + // data length + $data_length = strlen($data); + $i = 0; + while($i < $data_length) { + // get current byte value + $byte = ord($data{$i}); + if ($byte == 128) { + // a length value of 128 denote EOD + break; + } elseif ($byte < 128) { + // if the length byte is in the range 0 to 127 + // the following length + 1 (1 to 128) bytes shall be copied literally during decompression + $decoded .= substr($data, ($i + 1), ($byte + 1)); + // move to next block + $i += ($byte + 2); + } else { + // if length is in the range 129 to 255, + // the following single byte shall be copied 257 - length (2 to 128) times during decompression + $decoded .= str_repeat($data{($i + 1)}, (257 - $byte)); + // move to next block + $i += 2; + } + } + return $decoded; + } + + /** + * CCITTFaxDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) + * Decompresses data encoded using the CCITT facsimile standard, reproducing the original data (typically monochrome image data at 1 bit per pixel). + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterCCITTFaxDecode($data) { + self::Error('~decodeFilterCCITTFaxDecode: this method has not been yet implemented'); + //return $data; + } + + /** + * JBIG2Decode (NOT IMPLEMETED - RETURN AN EXCEPTION) + * Decompresses data encoded using the JBIG2 standard, reproducing the original monochrome (1 bit per pixel) image data (or an approximation of that data). + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterJBIG2Decode($data) { + self::Error('~decodeFilterJBIG2Decode: this method has not been yet implemented'); + //return $data; + } + + /** + * DCTDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) + * Decompresses data encoded using a DCT (discrete cosine transform) technique based on the JPEG standard, reproducing image sample data that approximates the original data. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterDCTDecode($data) { + self::Error('~decodeFilterDCTDecode: this method has not been yet implemented'); + //return $data; + } + + /** + * JPXDecode (NOT IMPLEMETED - RETURN AN EXCEPTION) + * Decompresses data encoded using the wavelet-based JPEG2000 standard, reproducing the original image data. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterJPXDecode($data) { + self::Error('~decodeFilterJPXDecode: this method has not been yet implemented'); + //return $data; + } + + /** + * Crypt (NOT IMPLEMETED - RETURN AN EXCEPTION) + * Decrypts data encrypted by a security handler, reproducing the data as it was before encryption. + * @param $data (string) Data to decode. + * @return Decoded data string. + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function decodeFilterCrypt($data) { + self::Error('~decodeFilterCrypt: this method has not been yet implemented'); + //return $data; + } + + // --- END FILTERS SECTION ------------------------------------------------- + + /** + * Throw an exception. + * @param $msg (string) The error message + * @since 1.0.000 (2011-05-23) + * @public static + */ + public static function Error($msg) { + throw new Exception('TCPDF_PARSER ERROR: '.$msg); + } + +} // END OF TCPDF_FILTERS CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/tcpdf_font_data.php b/tcpdf/include/tcpdf_font_data.php new file mode 100644 index 0000000..974e72e --- /dev/null +++ b/tcpdf/include/tcpdf_font_data.php @@ -0,0 +1,18447 @@ +<?php +//============================================================+ +// File name : tcpdf_font_data.php +// Version : 1.0.001 +// Begin : 2008-01-01 +// Last Update : 2013-04-01 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2008-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Unicode data and encoding maps for TCPDF. +// +//============================================================+ + +/** + * @file + * Unicode data and encoding maps for TCPDF. + * @author Nicola Asuni + * @package com.tecnick.tcpdf + */ + +/** + * @class TCPDF_FONT_DATA + * Unicode data and encoding maps for TCPDF. + * @package com.tecnick.tcpdf + * @version 1.0.001 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_FONT_DATA { + +/** + * Unicode code for Left-to-Right Mark. + * @public + */ +public static $uni_LRM = 8206; + +/** + * Unicode code for Right-to-Left Mark. + * @public + */ +public static $uni_RLM = 8207; + +/** + * Unicode code for Left-to-Right Embedding. + * @public + */ +public static $uni_LRE = 8234; + +/** + * Unicode code for Right-to-Left Embedding. + * @public + */ +public static $uni_RLE = 8235; + +/** + * Unicode code for Pop Directional Format. + * @public + */ +public static $uni_PDF = 8236; + +/** + * Unicode code for Left-to-Right Override. + * @public + */ +public static $uni_LRO = 8237; + +/** + * Unicode code for Right-to-Left Override. + * @public + */ +public static $uni_RLO = 8238; + +/** + * Pattern to test RTL (Righ-To-Left) strings using regular expressions. + * @public + */ +public static $uni_RE_PATTERN_RTL = "/( + \xD6\xBE # R + | \xD7[\x80\x83\x86\x90-\xAA\xB0-\xB4] # R + | \xDF[\x80-\xAA\xB4\xB5\xBA] # R + | \xE2\x80\x8F # R + | \xEF\xAC[\x9D\x9F\xA0-\xA8\xAA-\xB6\xB8-\xBC\xBE] # R + | \xEF\xAD[\x80\x81\x83\x84\x86-\x8F] # R + | \xF0\x90\xA0[\x80-\x85\x88\x8A-\xB5\xB7\xB8\xBC\xBF] # R + | \xF0\x90\xA4[\x80-\x99] # R + | \xF0\x90\xA8[\x80\x90-\x93\x95-\x97\x99-\xB3] # R + | \xF0\x90\xA9[\x80-\x87\x90-\x98] # R + | \xE2\x80[\xAB\xAE] # RLE & RLO + )/x"; + +/** + * Pattern to test Arabic strings using regular expressions. Source: http://www.w3.org/International/questions/qa-forms-utf-8 + * @public + */ +public static $uni_RE_PATTERN_ARABIC = "/( + \xD8[\x80-\x83\x8B\x8D\x9B\x9E\x9F\xA1-\xBA] # AL + | \xD9[\x80-\x8A\xAD-\xAF\xB1-\xBF] # AL + | \xDA[\x80-\xBF] # AL + | \xDB[\x80-\x95\x9D\xA5\xA6\xAE\xAF\xBA-\xBF] # AL + | \xDC[\x80-\x8D\x90\x92-\xAF] # AL + | \xDD[\x8D-\xAD] # AL + | \xDE[\x80-\xA5\xB1] # AL + | \xEF\xAD[\x90-\xBF] # AL + | \xEF\xAE[\x80-\xB1] # AL + | \xEF\xAF[\x93-\xBF] # AL + | \xEF[\xB0-\xB3][\x80-\xBF] # AL + | \xEF\xB4[\x80-\xBD] # AL + | \xEF\xB5[\x90-\xBF] # AL + | \xEF\xB6[\x80-\x8F\x92-\xBF] # AL + | \xEF\xB7[\x80-\x87\xB0-\xBC] # AL + | \xEF\xB9[\xB0-\xB4\xB6-\xBF] # AL + | \xEF\xBA[\x80-\xBF] # AL + | \xEF\xBB[\x80-\xBC] # AL + | \xD9[\xA0-\xA9\xAB\xAC] # AN + )/x"; + +/** + * Array of Unicode types. + * @public + */ +public static $uni_type = array( +0=>'BN', +1=>'BN', +2=>'BN', +3=>'BN', +4=>'BN', +5=>'BN', +6=>'BN', +7=>'BN', +8=>'BN', +9=>'S', +10=>'B', +11=>'S', +12=>'WS', +13=>'B', +14=>'BN', +15=>'BN', +16=>'BN', +17=>'BN', +18=>'BN', +19=>'BN', +20=>'BN', +21=>'BN', +22=>'BN', +23=>'BN', +24=>'BN', +25=>'BN', +26=>'BN', +27=>'BN', +28=>'B', +29=>'B', +30=>'B', +31=>'S', +32=>'WS', +33=>'ON', +34=>'ON', +35=>'ET', +36=>'ET', +37=>'ET', +38=>'ON', +39=>'ON', +40=>'ON', +41=>'ON', +42=>'ON', +43=>'ES', +44=>'CS', +45=>'ES', +46=>'CS', +47=>'CS', +48=>'EN', +49=>'EN', +50=>'EN', +51=>'EN', +52=>'EN', +53=>'EN', +54=>'EN', +55=>'EN', +56=>'EN', +57=>'EN', +58=>'CS', +59=>'ON', +60=>'ON', +61=>'ON', +62=>'ON', +63=>'ON', +64=>'ON', +65=>'L', +66=>'L', +67=>'L', +68=>'L', +69=>'L', +70=>'L', +71=>'L', +72=>'L', +73=>'L', +74=>'L', +75=>'L', +76=>'L', +77=>'L', +78=>'L', +79=>'L', +80=>'L', +81=>'L', +82=>'L', +83=>'L', +84=>'L', +85=>'L', +86=>'L', +87=>'L', +88=>'L', +89=>'L', +90=>'L', +91=>'ON', +92=>'ON', +93=>'ON', +94=>'ON', +95=>'ON', +96=>'ON', +97=>'L', +98=>'L', +99=>'L', +100=>'L', +101=>'L', +102=>'L', +103=>'L', +104=>'L', +105=>'L', +106=>'L', +107=>'L', +108=>'L', +109=>'L', +110=>'L', +111=>'L', +112=>'L', +113=>'L', +114=>'L', +115=>'L', +116=>'L', +117=>'L', +118=>'L', +119=>'L', +120=>'L', +121=>'L', +122=>'L', +123=>'ON', +124=>'ON', +125=>'ON', +126=>'ON', +127=>'BN', +128=>'BN', +129=>'BN', +130=>'BN', +131=>'BN', +132=>'BN', +133=>'B', +134=>'BN', +135=>'BN', +136=>'BN', +137=>'BN', +138=>'BN', +139=>'BN', +140=>'BN', +141=>'BN', +142=>'BN', +143=>'BN', +144=>'BN', +145=>'BN', +146=>'BN', +147=>'BN', +148=>'BN', +149=>'BN', +150=>'BN', +151=>'BN', +152=>'BN', +153=>'BN', +154=>'BN', +155=>'BN', +156=>'BN', +157=>'BN', +158=>'BN', +159=>'BN', +160=>'CS', +161=>'ON', +162=>'ET', +163=>'ET', +164=>'ET', +165=>'ET', +166=>'ON', +167=>'ON', +168=>'ON', +169=>'ON', +170=>'L', +171=>'ON', +172=>'ON', +173=>'BN', +174=>'ON', +175=>'ON', +176=>'ET', +177=>'ET', +178=>'EN', +179=>'EN', +180=>'ON', +181=>'L', +182=>'ON', +183=>'ON', +184=>'ON', +185=>'EN', +186=>'L', +187=>'ON', +188=>'ON', +189=>'ON', +190=>'ON', +191=>'ON', +192=>'L', +193=>'L', +194=>'L', +195=>'L', +196=>'L', +197=>'L', +198=>'L', +199=>'L', +200=>'L', +201=>'L', +202=>'L', +203=>'L', +204=>'L', +205=>'L', +206=>'L', +207=>'L', +208=>'L', +209=>'L', +210=>'L', +211=>'L', +212=>'L', +213=>'L', +214=>'L', +215=>'ON', +216=>'L', +217=>'L', +218=>'L', +219=>'L', +220=>'L', +221=>'L', +222=>'L', +223=>'L', +224=>'L', +225=>'L', +226=>'L', +227=>'L', +228=>'L', +229=>'L', +230=>'L', +231=>'L', +232=>'L', +233=>'L', +234=>'L', +235=>'L', +236=>'L', +237=>'L', +238=>'L', +239=>'L', +240=>'L', +241=>'L', +242=>'L', +243=>'L', +244=>'L', +245=>'L', +246=>'L', +247=>'ON', +248=>'L', +249=>'L', +250=>'L', +251=>'L', +252=>'L', +253=>'L', +254=>'L', +255=>'L', +256=>'L', +257=>'L', +258=>'L', +259=>'L', +260=>'L', +261=>'L', +262=>'L', +263=>'L', +264=>'L', +265=>'L', +266=>'L', +267=>'L', +268=>'L', +269=>'L', +270=>'L', +271=>'L', +272=>'L', +273=>'L', +274=>'L', +275=>'L', +276=>'L', +277=>'L', +278=>'L', +279=>'L', +280=>'L', +281=>'L', +282=>'L', +283=>'L', +284=>'L', +285=>'L', +286=>'L', +287=>'L', +288=>'L', +289=>'L', +290=>'L', +291=>'L', +292=>'L', +293=>'L', +294=>'L', +295=>'L', +296=>'L', +297=>'L', +298=>'L', +299=>'L', +300=>'L', +301=>'L', +302=>'L', +303=>'L', +304=>'L', +305=>'L', +306=>'L', +307=>'L', +308=>'L', +309=>'L', +310=>'L', +311=>'L', +312=>'L', +313=>'L', +314=>'L', +315=>'L', +316=>'L', +317=>'L', +318=>'L', +319=>'L', +320=>'L', +321=>'L', +322=>'L', +323=>'L', +324=>'L', +325=>'L', +326=>'L', +327=>'L', +328=>'L', +329=>'L', +330=>'L', +331=>'L', +332=>'L', +333=>'L', +334=>'L', +335=>'L', +336=>'L', +337=>'L', +338=>'L', +339=>'L', +340=>'L', +341=>'L', +342=>'L', +343=>'L', +344=>'L', +345=>'L', +346=>'L', +347=>'L', +348=>'L', +349=>'L', +350=>'L', +351=>'L', +352=>'L', +353=>'L', +354=>'L', +355=>'L', +356=>'L', +357=>'L', +358=>'L', +359=>'L', +360=>'L', +361=>'L', +362=>'L', +363=>'L', +364=>'L', +365=>'L', +366=>'L', +367=>'L', +368=>'L', +369=>'L', +370=>'L', +371=>'L', +372=>'L', +373=>'L', +374=>'L', +375=>'L', +376=>'L', +377=>'L', +378=>'L', +379=>'L', +380=>'L', +381=>'L', +382=>'L', +383=>'L', +384=>'L', +385=>'L', +386=>'L', +387=>'L', +388=>'L', +389=>'L', +390=>'L', +391=>'L', +392=>'L', +393=>'L', +394=>'L', +395=>'L', +396=>'L', +397=>'L', +398=>'L', +399=>'L', +400=>'L', +401=>'L', +402=>'L', +403=>'L', +404=>'L', +405=>'L', +406=>'L', +407=>'L', +408=>'L', +409=>'L', +410=>'L', +411=>'L', +412=>'L', +413=>'L', +414=>'L', +415=>'L', +416=>'L', +417=>'L', +418=>'L', +419=>'L', +420=>'L', +421=>'L', +422=>'L', +423=>'L', +424=>'L', +425=>'L', +426=>'L', +427=>'L', +428=>'L', +429=>'L', +430=>'L', +431=>'L', +432=>'L', +433=>'L', +434=>'L', +435=>'L', +436=>'L', +437=>'L', +438=>'L', +439=>'L', +440=>'L', +441=>'L', +442=>'L', +443=>'L', +444=>'L', +445=>'L', +446=>'L', +447=>'L', +448=>'L', +449=>'L', +450=>'L', +451=>'L', +452=>'L', +453=>'L', +454=>'L', +455=>'L', +456=>'L', +457=>'L', +458=>'L', +459=>'L', +460=>'L', +461=>'L', +462=>'L', +463=>'L', +464=>'L', +465=>'L', +466=>'L', +467=>'L', +468=>'L', +469=>'L', +470=>'L', +471=>'L', +472=>'L', +473=>'L', +474=>'L', +475=>'L', +476=>'L', +477=>'L', +478=>'L', +479=>'L', +480=>'L', +481=>'L', +482=>'L', +483=>'L', +484=>'L', +485=>'L', +486=>'L', +487=>'L', +488=>'L', +489=>'L', +490=>'L', +491=>'L', +492=>'L', +493=>'L', +494=>'L', +495=>'L', +496=>'L', +497=>'L', +498=>'L', +499=>'L', +500=>'L', +501=>'L', +502=>'L', +503=>'L', +504=>'L', +505=>'L', +506=>'L', +507=>'L', +508=>'L', +509=>'L', +510=>'L', +511=>'L', +512=>'L', +513=>'L', +514=>'L', +515=>'L', +516=>'L', +517=>'L', +518=>'L', +519=>'L', +520=>'L', +521=>'L', +522=>'L', +523=>'L', +524=>'L', +525=>'L', +526=>'L', +527=>'L', +528=>'L', +529=>'L', +530=>'L', +531=>'L', +532=>'L', +533=>'L', +534=>'L', +535=>'L', +536=>'L', +537=>'L', +538=>'L', +539=>'L', +540=>'L', +541=>'L', +542=>'L', +543=>'L', +544=>'L', +545=>'L', +546=>'L', +547=>'L', +548=>'L', +549=>'L', +550=>'L', +551=>'L', +552=>'L', +553=>'L', +554=>'L', +555=>'L', +556=>'L', +557=>'L', +558=>'L', +559=>'L', +560=>'L', +561=>'L', +562=>'L', +563=>'L', +564=>'L', +565=>'L', +566=>'L', +567=>'L', +568=>'L', +569=>'L', +570=>'L', +571=>'L', +572=>'L', +573=>'L', +574=>'L', +575=>'L', +576=>'L', +577=>'L', +578=>'L', +579=>'L', +580=>'L', +581=>'L', +582=>'L', +583=>'L', +584=>'L', +585=>'L', +586=>'L', +587=>'L', +588=>'L', +589=>'L', +590=>'L', +591=>'L', +592=>'L', +593=>'L', +594=>'L', +595=>'L', +596=>'L', +597=>'L', +598=>'L', +599=>'L', +600=>'L', +601=>'L', +602=>'L', +603=>'L', +604=>'L', +605=>'L', +606=>'L', +607=>'L', +608=>'L', +609=>'L', +610=>'L', +611=>'L', +612=>'L', +613=>'L', +614=>'L', +615=>'L', +616=>'L', +617=>'L', +618=>'L', +619=>'L', +620=>'L', +621=>'L', +622=>'L', +623=>'L', +624=>'L', +625=>'L', +626=>'L', +627=>'L', +628=>'L', +629=>'L', +630=>'L', +631=>'L', +632=>'L', +633=>'L', +634=>'L', +635=>'L', +636=>'L', +637=>'L', +638=>'L', +639=>'L', +640=>'L', +641=>'L', +642=>'L', +643=>'L', +644=>'L', +645=>'L', +646=>'L', +647=>'L', +648=>'L', +649=>'L', +650=>'L', +651=>'L', +652=>'L', +653=>'L', +654=>'L', +655=>'L', +656=>'L', +657=>'L', +658=>'L', +659=>'L', +660=>'L', +661=>'L', +662=>'L', +663=>'L', +664=>'L', +665=>'L', +666=>'L', +667=>'L', +668=>'L', +669=>'L', +670=>'L', +671=>'L', +672=>'L', +673=>'L', +674=>'L', +675=>'L', +676=>'L', +677=>'L', +678=>'L', +679=>'L', +680=>'L', +681=>'L', +682=>'L', +683=>'L', +684=>'L', +685=>'L', +686=>'L', +687=>'L', +688=>'L', +689=>'L', +690=>'L', +691=>'L', +692=>'L', +693=>'L', +694=>'L', +695=>'L', +696=>'L', +697=>'ON', +698=>'ON', +699=>'L', +700=>'L', +701=>'L', +702=>'L', +703=>'L', +704=>'L', +705=>'L', +706=>'ON', +707=>'ON', +708=>'ON', +709=>'ON', +710=>'ON', +711=>'ON', +712=>'ON', +713=>'ON', +714=>'ON', +715=>'ON', +716=>'ON', +717=>'ON', +718=>'ON', +719=>'ON', +720=>'L', +721=>'L', +722=>'ON', +723=>'ON', +724=>'ON', +725=>'ON', +726=>'ON', +727=>'ON', +728=>'ON', +729=>'ON', +730=>'ON', +731=>'ON', +732=>'ON', +733=>'ON', +734=>'ON', +735=>'ON', +736=>'L', +737=>'L', +738=>'L', +739=>'L', +740=>'L', +741=>'ON', +742=>'ON', +743=>'ON', +744=>'ON', +745=>'ON', +746=>'ON', +747=>'ON', +748=>'ON', +749=>'ON', +750=>'L', +751=>'ON', +752=>'ON', +753=>'ON', +754=>'ON', +755=>'ON', +756=>'ON', +757=>'ON', +758=>'ON', +759=>'ON', +760=>'ON', +761=>'ON', +762=>'ON', +763=>'ON', +764=>'ON', +765=>'ON', +766=>'ON', +767=>'ON', +768=>'NSM', +769=>'NSM', +770=>'NSM', +771=>'NSM', +772=>'NSM', +773=>'NSM', +774=>'NSM', +775=>'NSM', +776=>'NSM', +777=>'NSM', +778=>'NSM', +779=>'NSM', +780=>'NSM', +781=>'NSM', +782=>'NSM', +783=>'NSM', +784=>'NSM', +785=>'NSM', +786=>'NSM', +787=>'NSM', +788=>'NSM', +789=>'NSM', +790=>'NSM', +791=>'NSM', +792=>'NSM', +793=>'NSM', +794=>'NSM', +795=>'NSM', +796=>'NSM', +797=>'NSM', +798=>'NSM', +799=>'NSM', +800=>'NSM', +801=>'NSM', +802=>'NSM', +803=>'NSM', +804=>'NSM', +805=>'NSM', +806=>'NSM', +807=>'NSM', +808=>'NSM', +809=>'NSM', +810=>'NSM', +811=>'NSM', +812=>'NSM', +813=>'NSM', +814=>'NSM', +815=>'NSM', +816=>'NSM', +817=>'NSM', +818=>'NSM', +819=>'NSM', +820=>'NSM', +821=>'NSM', +822=>'NSM', +823=>'NSM', +824=>'NSM', +825=>'NSM', +826=>'NSM', +827=>'NSM', +828=>'NSM', +829=>'NSM', +830=>'NSM', +831=>'NSM', +832=>'NSM', +833=>'NSM', +834=>'NSM', +835=>'NSM', +836=>'NSM', +837=>'NSM', +838=>'NSM', +839=>'NSM', +840=>'NSM', +841=>'NSM', +842=>'NSM', +843=>'NSM', +844=>'NSM', +845=>'NSM', +846=>'NSM', +847=>'NSM', +848=>'NSM', +849=>'NSM', +850=>'NSM', +851=>'NSM', +852=>'NSM', +853=>'NSM', +854=>'NSM', +855=>'NSM', +856=>'NSM', +857=>'NSM', +858=>'NSM', +859=>'NSM', +860=>'NSM', +861=>'NSM', +862=>'NSM', +863=>'NSM', +864=>'NSM', +865=>'NSM', +866=>'NSM', +867=>'NSM', +868=>'NSM', +869=>'NSM', +870=>'NSM', +871=>'NSM', +872=>'NSM', +873=>'NSM', +874=>'NSM', +875=>'NSM', +876=>'NSM', +877=>'NSM', +878=>'NSM', +879=>'NSM', +884=>'ON', +885=>'ON', +890=>'L', +891=>'L', +892=>'L', +893=>'L', +894=>'ON', +900=>'ON', +901=>'ON', +902=>'L', +903=>'ON', +904=>'L', +905=>'L', +906=>'L', +908=>'L', +910=>'L', +911=>'L', +912=>'L', +913=>'L', +914=>'L', +915=>'L', +916=>'L', +917=>'L', +918=>'L', +919=>'L', +920=>'L', +921=>'L', +922=>'L', +923=>'L', +924=>'L', +925=>'L', +926=>'L', +927=>'L', +928=>'L', +929=>'L', +931=>'L', +932=>'L', +933=>'L', +934=>'L', +935=>'L', +936=>'L', +937=>'L', +938=>'L', +939=>'L', +940=>'L', +941=>'L', +942=>'L', +943=>'L', +944=>'L', +945=>'L', +946=>'L', +947=>'L', +948=>'L', +949=>'L', +950=>'L', +951=>'L', +952=>'L', +953=>'L', +954=>'L', +955=>'L', +956=>'L', +957=>'L', +958=>'L', +959=>'L', +960=>'L', +961=>'L', +962=>'L', +963=>'L', +964=>'L', +965=>'L', +966=>'L', +967=>'L', +968=>'L', +969=>'L', +970=>'L', +971=>'L', +972=>'L', +973=>'L', +974=>'L', +976=>'L', +977=>'L', +978=>'L', +979=>'L', +980=>'L', +981=>'L', +982=>'L', +983=>'L', +984=>'L', +985=>'L', +986=>'L', +987=>'L', +988=>'L', +989=>'L', +990=>'L', +991=>'L', +992=>'L', +993=>'L', +994=>'L', +995=>'L', +996=>'L', +997=>'L', +998=>'L', +999=>'L', +1000=>'L', +1001=>'L', +1002=>'L', +1003=>'L', +1004=>'L', +1005=>'L', +1006=>'L', +1007=>'L', +1008=>'L', +1009=>'L', +1010=>'L', +1011=>'L', +1012=>'L', +1013=>'L', +1014=>'ON', +1015=>'L', +1016=>'L', +1017=>'L', +1018=>'L', +1019=>'L', +1020=>'L', +1021=>'L', +1022=>'L', +1023=>'L', +1024=>'L', +1025=>'L', +1026=>'L', +1027=>'L', +1028=>'L', +1029=>'L', +1030=>'L', +1031=>'L', +1032=>'L', +1033=>'L', +1034=>'L', +1035=>'L', +1036=>'L', +1037=>'L', +1038=>'L', +1039=>'L', +1040=>'L', +1041=>'L', +1042=>'L', +1043=>'L', +1044=>'L', +1045=>'L', +1046=>'L', +1047=>'L', +1048=>'L', +1049=>'L', +1050=>'L', +1051=>'L', +1052=>'L', +1053=>'L', +1054=>'L', +1055=>'L', +1056=>'L', +1057=>'L', +1058=>'L', +1059=>'L', +1060=>'L', +1061=>'L', +1062=>'L', +1063=>'L', +1064=>'L', +1065=>'L', +1066=>'L', +1067=>'L', +1068=>'L', +1069=>'L', +1070=>'L', +1071=>'L', +1072=>'L', +1073=>'L', +1074=>'L', +1075=>'L', +1076=>'L', +1077=>'L', +1078=>'L', +1079=>'L', +1080=>'L', +1081=>'L', +1082=>'L', +1083=>'L', +1084=>'L', +1085=>'L', +1086=>'L', +1087=>'L', +1088=>'L', +1089=>'L', +1090=>'L', +1091=>'L', +1092=>'L', +1093=>'L', +1094=>'L', +1095=>'L', +1096=>'L', +1097=>'L', +1098=>'L', +1099=>'L', +1100=>'L', +1101=>'L', +1102=>'L', +1103=>'L', +1104=>'L', +1105=>'L', +1106=>'L', +1107=>'L', +1108=>'L', +1109=>'L', +1110=>'L', +1111=>'L', +1112=>'L', +1113=>'L', +1114=>'L', +1115=>'L', +1116=>'L', +1117=>'L', +1118=>'L', +1119=>'L', +1120=>'L', +1121=>'L', +1122=>'L', +1123=>'L', +1124=>'L', +1125=>'L', +1126=>'L', +1127=>'L', +1128=>'L', +1129=>'L', +1130=>'L', +1131=>'L', +1132=>'L', +1133=>'L', +1134=>'L', +1135=>'L', +1136=>'L', +1137=>'L', +1138=>'L', +1139=>'L', +1140=>'L', +1141=>'L', +1142=>'L', +1143=>'L', +1144=>'L', +1145=>'L', +1146=>'L', +1147=>'L', +1148=>'L', +1149=>'L', +1150=>'L', +1151=>'L', +1152=>'L', +1153=>'L', +1154=>'L', +1155=>'NSM', +1156=>'NSM', +1157=>'NSM', +1158=>'NSM', +1160=>'NSM', +1161=>'NSM', +1162=>'L', +1163=>'L', +1164=>'L', +1165=>'L', +1166=>'L', +1167=>'L', +1168=>'L', +1169=>'L', +1170=>'L', +1171=>'L', +1172=>'L', +1173=>'L', +1174=>'L', +1175=>'L', +1176=>'L', +1177=>'L', +1178=>'L', +1179=>'L', +1180=>'L', +1181=>'L', +1182=>'L', +1183=>'L', +1184=>'L', +1185=>'L', +1186=>'L', +1187=>'L', +1188=>'L', +1189=>'L', +1190=>'L', +1191=>'L', +1192=>'L', +1193=>'L', +1194=>'L', +1195=>'L', +1196=>'L', +1197=>'L', +1198=>'L', +1199=>'L', +1200=>'L', +1201=>'L', +1202=>'L', +1203=>'L', +1204=>'L', +1205=>'L', +1206=>'L', +1207=>'L', +1208=>'L', +1209=>'L', +1210=>'L', +1211=>'L', +1212=>'L', +1213=>'L', +1214=>'L', +1215=>'L', +1216=>'L', +1217=>'L', +1218=>'L', +1219=>'L', +1220=>'L', +1221=>'L', +1222=>'L', +1223=>'L', +1224=>'L', +1225=>'L', +1226=>'L', +1227=>'L', +1228=>'L', +1229=>'L', +1230=>'L', +1231=>'L', +1232=>'L', +1233=>'L', +1234=>'L', +1235=>'L', +1236=>'L', +1237=>'L', +1238=>'L', +1239=>'L', +1240=>'L', +1241=>'L', +1242=>'L', +1243=>'L', +1244=>'L', +1245=>'L', +1246=>'L', +1247=>'L', +1248=>'L', +1249=>'L', +1250=>'L', +1251=>'L', +1252=>'L', +1253=>'L', +1254=>'L', +1255=>'L', +1256=>'L', +1257=>'L', +1258=>'L', +1259=>'L', +1260=>'L', +1261=>'L', +1262=>'L', +1263=>'L', +1264=>'L', +1265=>'L', +1266=>'L', +1267=>'L', +1268=>'L', +1269=>'L', +1270=>'L', +1271=>'L', +1272=>'L', +1273=>'L', +1274=>'L', +1275=>'L', +1276=>'L', +1277=>'L', +1278=>'L', +1279=>'L', +1280=>'L', +1281=>'L', +1282=>'L', +1283=>'L', +1284=>'L', +1285=>'L', +1286=>'L', +1287=>'L', +1288=>'L', +1289=>'L', +1290=>'L', +1291=>'L', +1292=>'L', +1293=>'L', +1294=>'L', +1295=>'L', +1296=>'L', +1297=>'L', +1298=>'L', +1299=>'L', +1329=>'L', +1330=>'L', +1331=>'L', +1332=>'L', +1333=>'L', +1334=>'L', +1335=>'L', +1336=>'L', +1337=>'L', +1338=>'L', +1339=>'L', +1340=>'L', +1341=>'L', +1342=>'L', +1343=>'L', +1344=>'L', +1345=>'L', +1346=>'L', +1347=>'L', +1348=>'L', +1349=>'L', +1350=>'L', +1351=>'L', +1352=>'L', +1353=>'L', +1354=>'L', +1355=>'L', +1356=>'L', +1357=>'L', +1358=>'L', +1359=>'L', +1360=>'L', +1361=>'L', +1362=>'L', +1363=>'L', +1364=>'L', +1365=>'L', +1366=>'L', +1369=>'L', +1370=>'L', +1371=>'L', +1372=>'L', +1373=>'L', +1374=>'L', +1375=>'L', +1377=>'L', +1378=>'L', +1379=>'L', +1380=>'L', +1381=>'L', +1382=>'L', +1383=>'L', +1384=>'L', +1385=>'L', +1386=>'L', +1387=>'L', +1388=>'L', +1389=>'L', +1390=>'L', +1391=>'L', +1392=>'L', +1393=>'L', +1394=>'L', +1395=>'L', +1396=>'L', +1397=>'L', +1398=>'L', +1399=>'L', +1400=>'L', +1401=>'L', +1402=>'L', +1403=>'L', +1404=>'L', +1405=>'L', +1406=>'L', +1407=>'L', +1408=>'L', +1409=>'L', +1410=>'L', +1411=>'L', +1412=>'L', +1413=>'L', +1414=>'L', +1415=>'L', +1417=>'L', +1418=>'ON', +1425=>'NSM', +1426=>'NSM', +1427=>'NSM', +1428=>'NSM', +1429=>'NSM', +1430=>'NSM', +1431=>'NSM', +1432=>'NSM', +1433=>'NSM', +1434=>'NSM', +1435=>'NSM', +1436=>'NSM', +1437=>'NSM', +1438=>'NSM', +1439=>'NSM', +1440=>'NSM', +1441=>'NSM', +1442=>'NSM', +1443=>'NSM', +1444=>'NSM', +1445=>'NSM', +1446=>'NSM', +1447=>'NSM', +1448=>'NSM', +1449=>'NSM', +1450=>'NSM', +1451=>'NSM', +1452=>'NSM', +1453=>'NSM', +1454=>'NSM', +1455=>'NSM', +1456=>'NSM', +1457=>'NSM', +1458=>'NSM', +1459=>'NSM', +1460=>'NSM', +1461=>'NSM', +1462=>'NSM', +1463=>'NSM', +1464=>'NSM', +1465=>'NSM', +1466=>'NSM', +1467=>'NSM', +1468=>'NSM', +1469=>'NSM', +1470=>'R', +1471=>'NSM', +1472=>'R', +1473=>'NSM', +1474=>'NSM', +1475=>'R', +1476=>'NSM', +1477=>'NSM', +1478=>'R', +1479=>'NSM', +1488=>'R', +1489=>'R', +1490=>'R', +1491=>'R', +1492=>'R', +1493=>'R', +1494=>'R', +1495=>'R', +1496=>'R', +1497=>'R', +1498=>'R', +1499=>'R', +1500=>'R', +1501=>'R', +1502=>'R', +1503=>'R', +1504=>'R', +1505=>'R', +1506=>'R', +1507=>'R', +1508=>'R', +1509=>'R', +1510=>'R', +1511=>'R', +1512=>'R', +1513=>'R', +1514=>'R', +1520=>'R', +1521=>'R', +1522=>'R', +1523=>'R', +1524=>'R', +1536=>'AL', +1537=>'AL', +1538=>'AL', +1539=>'AL', +1547=>'AL', +1548=>'CS', +1549=>'AL', +1550=>'ON', +1551=>'ON', +1552=>'NSM', +1553=>'NSM', +1554=>'NSM', +1555=>'NSM', +1556=>'NSM', +1557=>'NSM', +1563=>'AL', +1566=>'AL', +1567=>'AL', +1569=>'AL', +1570=>'AL', +1571=>'AL', +1572=>'AL', +1573=>'AL', +1574=>'AL', +1575=>'AL', +1576=>'AL', +1577=>'AL', +1578=>'AL', +1579=>'AL', +1580=>'AL', +1581=>'AL', +1582=>'AL', +1583=>'AL', +1584=>'AL', +1585=>'AL', +1586=>'AL', +1587=>'AL', +1588=>'AL', +1589=>'AL', +1590=>'AL', +1591=>'AL', +1592=>'AL', +1593=>'AL', +1594=>'AL', +1600=>'AL', +1601=>'AL', +1602=>'AL', +1603=>'AL', +1604=>'AL', +1605=>'AL', +1606=>'AL', +1607=>'AL', +1608=>'AL', +1609=>'AL', +1610=>'AL', +1611=>'NSM', +1612=>'NSM', +1613=>'NSM', +1614=>'NSM', +1615=>'NSM', +1616=>'NSM', +1617=>'NSM', +1618=>'NSM', +1619=>'NSM', +1620=>'NSM', +1621=>'NSM', +1622=>'NSM', +1623=>'NSM', +1624=>'NSM', +1625=>'NSM', +1626=>'NSM', +1627=>'NSM', +1628=>'NSM', +1629=>'NSM', +1630=>'NSM', +1632=>'AN', +1633=>'AN', +1634=>'AN', +1635=>'AN', +1636=>'AN', +1637=>'AN', +1638=>'AN', +1639=>'AN', +1640=>'AN', +1641=>'AN', +1642=>'ET', +1643=>'AN', +1644=>'AN', +1645=>'AL', +1646=>'AL', +1647=>'AL', +1648=>'NSM', +1649=>'AL', +1650=>'AL', +1651=>'AL', +1652=>'AL', +1653=>'AL', +1654=>'AL', +1655=>'AL', +1656=>'AL', +1657=>'AL', +1658=>'AL', +1659=>'AL', +1660=>'AL', +1661=>'AL', +1662=>'AL', +1663=>'AL', +1664=>'AL', +1665=>'AL', +1666=>'AL', +1667=>'AL', +1668=>'AL', +1669=>'AL', +1670=>'AL', +1671=>'AL', +1672=>'AL', +1673=>'AL', +1674=>'AL', +1675=>'AL', +1676=>'AL', +1677=>'AL', +1678=>'AL', +1679=>'AL', +1680=>'AL', +1681=>'AL', +1682=>'AL', +1683=>'AL', +1684=>'AL', +1685=>'AL', +1686=>'AL', +1687=>'AL', +1688=>'AL', +1689=>'AL', +1690=>'AL', +1691=>'AL', +1692=>'AL', +1693=>'AL', +1694=>'AL', +1695=>'AL', +1696=>'AL', +1697=>'AL', +1698=>'AL', +1699=>'AL', +1700=>'AL', +1701=>'AL', +1702=>'AL', +1703=>'AL', +1704=>'AL', +1705=>'AL', +1706=>'AL', +1707=>'AL', +1708=>'AL', +1709=>'AL', +1710=>'AL', +1711=>'AL', +1712=>'AL', +1713=>'AL', +1714=>'AL', +1715=>'AL', +1716=>'AL', +1717=>'AL', +1718=>'AL', +1719=>'AL', +1720=>'AL', +1721=>'AL', +1722=>'AL', +1723=>'AL', +1724=>'AL', +1725=>'AL', +1726=>'AL', +1727=>'AL', +1728=>'AL', +1729=>'AL', +1730=>'AL', +1731=>'AL', +1732=>'AL', +1733=>'AL', +1734=>'AL', +1735=>'AL', +1736=>'AL', +1737=>'AL', +1738=>'AL', +1739=>'AL', +1740=>'AL', +1741=>'AL', +1742=>'AL', +1743=>'AL', +1744=>'AL', +1745=>'AL', +1746=>'AL', +1747=>'AL', +1748=>'AL', +1749=>'AL', +1750=>'NSM', +1751=>'NSM', +1752=>'NSM', +1753=>'NSM', +1754=>'NSM', +1755=>'NSM', +1756=>'NSM', +1757=>'AL', +1758=>'NSM', +1759=>'NSM', +1760=>'NSM', +1761=>'NSM', +1762=>'NSM', +1763=>'NSM', +1764=>'NSM', +1765=>'AL', +1766=>'AL', +1767=>'NSM', +1768=>'NSM', +1769=>'ON', +1770=>'NSM', +1771=>'NSM', +1772=>'NSM', +1773=>'NSM', +1774=>'AL', +1775=>'AL', +1776=>'EN', +1777=>'EN', +1778=>'EN', +1779=>'EN', +1780=>'EN', +1781=>'EN', +1782=>'EN', +1783=>'EN', +1784=>'EN', +1785=>'EN', +1786=>'AL', +1787=>'AL', +1788=>'AL', +1789=>'AL', +1790=>'AL', +1791=>'AL', +1792=>'AL', +1793=>'AL', +1794=>'AL', +1795=>'AL', +1796=>'AL', +1797=>'AL', +1798=>'AL', +1799=>'AL', +1800=>'AL', +1801=>'AL', +1802=>'AL', +1803=>'AL', +1804=>'AL', +1805=>'AL', +1807=>'BN', +1808=>'AL', +1809=>'NSM', +1810=>'AL', +1811=>'AL', +1812=>'AL', +1813=>'AL', +1814=>'AL', +1815=>'AL', +1816=>'AL', +1817=>'AL', +1818=>'AL', +1819=>'AL', +1820=>'AL', +1821=>'AL', +1822=>'AL', +1823=>'AL', +1824=>'AL', +1825=>'AL', +1826=>'AL', +1827=>'AL', +1828=>'AL', +1829=>'AL', +1830=>'AL', +1831=>'AL', +1832=>'AL', +1833=>'AL', +1834=>'AL', +1835=>'AL', +1836=>'AL', +1837=>'AL', +1838=>'AL', +1839=>'AL', +1840=>'NSM', +1841=>'NSM', +1842=>'NSM', +1843=>'NSM', +1844=>'NSM', +1845=>'NSM', +1846=>'NSM', +1847=>'NSM', +1848=>'NSM', +1849=>'NSM', +1850=>'NSM', +1851=>'NSM', +1852=>'NSM', +1853=>'NSM', +1854=>'NSM', +1855=>'NSM', +1856=>'NSM', +1857=>'NSM', +1858=>'NSM', +1859=>'NSM', +1860=>'NSM', +1861=>'NSM', +1862=>'NSM', +1863=>'NSM', +1864=>'NSM', +1865=>'NSM', +1866=>'NSM', +1869=>'AL', +1870=>'AL', +1871=>'AL', +1872=>'AL', +1873=>'AL', +1874=>'AL', +1875=>'AL', +1876=>'AL', +1877=>'AL', +1878=>'AL', +1879=>'AL', +1880=>'AL', +1881=>'AL', +1882=>'AL', +1883=>'AL', +1884=>'AL', +1885=>'AL', +1886=>'AL', +1887=>'AL', +1888=>'AL', +1889=>'AL', +1890=>'AL', +1891=>'AL', +1892=>'AL', +1893=>'AL', +1894=>'AL', +1895=>'AL', +1896=>'AL', +1897=>'AL', +1898=>'AL', +1899=>'AL', +1900=>'AL', +1901=>'AL', +1920=>'AL', +1921=>'AL', +1922=>'AL', +1923=>'AL', +1924=>'AL', +1925=>'AL', +1926=>'AL', +1927=>'AL', +1928=>'AL', +1929=>'AL', +1930=>'AL', +1931=>'AL', +1932=>'AL', +1933=>'AL', +1934=>'AL', +1935=>'AL', +1936=>'AL', +1937=>'AL', +1938=>'AL', +1939=>'AL', +1940=>'AL', +1941=>'AL', +1942=>'AL', +1943=>'AL', +1944=>'AL', +1945=>'AL', +1946=>'AL', +1947=>'AL', +1948=>'AL', +1949=>'AL', +1950=>'AL', +1951=>'AL', +1952=>'AL', +1953=>'AL', +1954=>'AL', +1955=>'AL', +1956=>'AL', +1957=>'AL', +1958=>'NSM', +1959=>'NSM', +1960=>'NSM', +1961=>'NSM', +1962=>'NSM', +1963=>'NSM', +1964=>'NSM', +1965=>'NSM', +1966=>'NSM', +1967=>'NSM', +1968=>'NSM', +1969=>'AL', +1984=>'R', +1985=>'R', +1986=>'R', +1987=>'R', +1988=>'R', +1989=>'R', +1990=>'R', +1991=>'R', +1992=>'R', +1993=>'R', +1994=>'R', +1995=>'R', +1996=>'R', +1997=>'R', +1998=>'R', +1999=>'R', +2000=>'R', +2001=>'R', +2002=>'R', +2003=>'R', +2004=>'R', +2005=>'R', +2006=>'R', +2007=>'R', +2008=>'R', +2009=>'R', +2010=>'R', +2011=>'R', +2012=>'R', +2013=>'R', +2014=>'R', +2015=>'R', +2016=>'R', +2017=>'R', +2018=>'R', +2019=>'R', +2020=>'R', +2021=>'R', +2022=>'R', +2023=>'R', +2024=>'R', +2025=>'R', +2026=>'R', +2027=>'NSM', +2028=>'NSM', +2029=>'NSM', +2030=>'NSM', +2031=>'NSM', +2032=>'NSM', +2033=>'NSM', +2034=>'NSM', +2035=>'NSM', +2036=>'R', +2037=>'R', +2038=>'ON', +2039=>'ON', +2040=>'ON', +2041=>'ON', +2042=>'R', +2305=>'NSM', +2306=>'NSM', +2307=>'L', +2308=>'L', +2309=>'L', +2310=>'L', +2311=>'L', +2312=>'L', +2313=>'L', +2314=>'L', +2315=>'L', +2316=>'L', +2317=>'L', +2318=>'L', +2319=>'L', +2320=>'L', +2321=>'L', +2322=>'L', +2323=>'L', +2324=>'L', +2325=>'L', +2326=>'L', +2327=>'L', +2328=>'L', +2329=>'L', +2330=>'L', +2331=>'L', +2332=>'L', +2333=>'L', +2334=>'L', +2335=>'L', +2336=>'L', +2337=>'L', +2338=>'L', +2339=>'L', +2340=>'L', +2341=>'L', +2342=>'L', +2343=>'L', +2344=>'L', +2345=>'L', +2346=>'L', +2347=>'L', +2348=>'L', +2349=>'L', +2350=>'L', +2351=>'L', +2352=>'L', +2353=>'L', +2354=>'L', +2355=>'L', +2356=>'L', +2357=>'L', +2358=>'L', +2359=>'L', +2360=>'L', +2361=>'L', +2364=>'NSM', +2365=>'L', +2366=>'L', +2367=>'L', +2368=>'L', +2369=>'NSM', +2370=>'NSM', +2371=>'NSM', +2372=>'NSM', +2373=>'NSM', +2374=>'NSM', +2375=>'NSM', +2376=>'NSM', +2377=>'L', +2378=>'L', +2379=>'L', +2380=>'L', +2381=>'NSM', +2384=>'L', +2385=>'NSM', +2386=>'NSM', +2387=>'NSM', +2388=>'NSM', +2392=>'L', +2393=>'L', +2394=>'L', +2395=>'L', +2396=>'L', +2397=>'L', +2398=>'L', +2399=>'L', +2400=>'L', +2401=>'L', +2402=>'NSM', +2403=>'NSM', +2404=>'L', +2405=>'L', +2406=>'L', +2407=>'L', +2408=>'L', +2409=>'L', +2410=>'L', +2411=>'L', +2412=>'L', +2413=>'L', +2414=>'L', +2415=>'L', +2416=>'L', +2427=>'L', +2428=>'L', +2429=>'L', +2430=>'L', +2431=>'L', +2433=>'NSM', +2434=>'L', +2435=>'L', +2437=>'L', +2438=>'L', +2439=>'L', +2440=>'L', +2441=>'L', +2442=>'L', +2443=>'L', +2444=>'L', +2447=>'L', +2448=>'L', +2451=>'L', +2452=>'L', +2453=>'L', +2454=>'L', +2455=>'L', +2456=>'L', +2457=>'L', +2458=>'L', +2459=>'L', +2460=>'L', +2461=>'L', +2462=>'L', +2463=>'L', +2464=>'L', +2465=>'L', +2466=>'L', +2467=>'L', +2468=>'L', +2469=>'L', +2470=>'L', +2471=>'L', +2472=>'L', +2474=>'L', +2475=>'L', +2476=>'L', +2477=>'L', +2478=>'L', +2479=>'L', +2480=>'L', +2482=>'L', +2486=>'L', +2487=>'L', +2488=>'L', +2489=>'L', +2492=>'NSM', +2493=>'L', +2494=>'L', +2495=>'L', +2496=>'L', +2497=>'NSM', +2498=>'NSM', +2499=>'NSM', +2500=>'NSM', +2503=>'L', +2504=>'L', +2507=>'L', +2508=>'L', +2509=>'NSM', +2510=>'L', +2519=>'L', +2524=>'L', +2525=>'L', +2527=>'L', +2528=>'L', +2529=>'L', +2530=>'NSM', +2531=>'NSM', +2534=>'L', +2535=>'L', +2536=>'L', +2537=>'L', +2538=>'L', +2539=>'L', +2540=>'L', +2541=>'L', +2542=>'L', +2543=>'L', +2544=>'L', +2545=>'L', +2546=>'ET', +2547=>'ET', +2548=>'L', +2549=>'L', +2550=>'L', +2551=>'L', +2552=>'L', +2553=>'L', +2554=>'L', +2561=>'NSM', +2562=>'NSM', +2563=>'L', +2565=>'L', +2566=>'L', +2567=>'L', +2568=>'L', +2569=>'L', +2570=>'L', +2575=>'L', +2576=>'L', +2579=>'L', +2580=>'L', +2581=>'L', +2582=>'L', +2583=>'L', +2584=>'L', +2585=>'L', +2586=>'L', +2587=>'L', +2588=>'L', +2589=>'L', +2590=>'L', +2591=>'L', +2592=>'L', +2593=>'L', +2594=>'L', +2595=>'L', +2596=>'L', +2597=>'L', +2598=>'L', +2599=>'L', +2600=>'L', +2602=>'L', +2603=>'L', +2604=>'L', +2605=>'L', +2606=>'L', +2607=>'L', +2608=>'L', +2610=>'L', +2611=>'L', +2613=>'L', +2614=>'L', +2616=>'L', +2617=>'L', +2620=>'NSM', +2622=>'L', +2623=>'L', +2624=>'L', +2625=>'NSM', +2626=>'NSM', +2631=>'NSM', +2632=>'NSM', +2635=>'NSM', +2636=>'NSM', +2637=>'NSM', +2649=>'L', +2650=>'L', +2651=>'L', +2652=>'L', +2654=>'L', +2662=>'L', +2663=>'L', +2664=>'L', +2665=>'L', +2666=>'L', +2667=>'L', +2668=>'L', +2669=>'L', +2670=>'L', +2671=>'L', +2672=>'NSM', +2673=>'NSM', +2674=>'L', +2675=>'L', +2676=>'L', +2689=>'NSM', +2690=>'NSM', +2691=>'L', +2693=>'L', +2694=>'L', +2695=>'L', +2696=>'L', +2697=>'L', +2698=>'L', +2699=>'L', +2700=>'L', +2701=>'L', +2703=>'L', +2704=>'L', +2705=>'L', +2707=>'L', +2708=>'L', +2709=>'L', +2710=>'L', +2711=>'L', +2712=>'L', +2713=>'L', +2714=>'L', +2715=>'L', +2716=>'L', +2717=>'L', +2718=>'L', +2719=>'L', +2720=>'L', +2721=>'L', +2722=>'L', +2723=>'L', +2724=>'L', +2725=>'L', +2726=>'L', +2727=>'L', +2728=>'L', +2730=>'L', +2731=>'L', +2732=>'L', +2733=>'L', +2734=>'L', +2735=>'L', +2736=>'L', +2738=>'L', +2739=>'L', +2741=>'L', +2742=>'L', +2743=>'L', +2744=>'L', +2745=>'L', +2748=>'NSM', +2749=>'L', +2750=>'L', +2751=>'L', +2752=>'L', +2753=>'NSM', +2754=>'NSM', +2755=>'NSM', +2756=>'NSM', +2757=>'NSM', +2759=>'NSM', +2760=>'NSM', +2761=>'L', +2763=>'L', +2764=>'L', +2765=>'NSM', +2768=>'L', +2784=>'L', +2785=>'L', +2786=>'NSM', +2787=>'NSM', +2790=>'L', +2791=>'L', +2792=>'L', +2793=>'L', +2794=>'L', +2795=>'L', +2796=>'L', +2797=>'L', +2798=>'L', +2799=>'L', +2801=>'ET', +2817=>'NSM', +2818=>'L', +2819=>'L', +2821=>'L', +2822=>'L', +2823=>'L', +2824=>'L', +2825=>'L', +2826=>'L', +2827=>'L', +2828=>'L', +2831=>'L', +2832=>'L', +2835=>'L', +2836=>'L', +2837=>'L', +2838=>'L', +2839=>'L', +2840=>'L', +2841=>'L', +2842=>'L', +2843=>'L', +2844=>'L', +2845=>'L', +2846=>'L', +2847=>'L', +2848=>'L', +2849=>'L', +2850=>'L', +2851=>'L', +2852=>'L', +2853=>'L', +2854=>'L', +2855=>'L', +2856=>'L', +2858=>'L', +2859=>'L', +2860=>'L', +2861=>'L', +2862=>'L', +2863=>'L', +2864=>'L', +2866=>'L', +2867=>'L', +2869=>'L', +2870=>'L', +2871=>'L', +2872=>'L', +2873=>'L', +2876=>'NSM', +2877=>'L', +2878=>'L', +2879=>'NSM', +2880=>'L', +2881=>'NSM', +2882=>'NSM', +2883=>'NSM', +2887=>'L', +2888=>'L', +2891=>'L', +2892=>'L', +2893=>'NSM', +2902=>'NSM', +2903=>'L', +2908=>'L', +2909=>'L', +2911=>'L', +2912=>'L', +2913=>'L', +2918=>'L', +2919=>'L', +2920=>'L', +2921=>'L', +2922=>'L', +2923=>'L', +2924=>'L', +2925=>'L', +2926=>'L', +2927=>'L', +2928=>'L', +2929=>'L', +2946=>'NSM', +2947=>'L', +2949=>'L', +2950=>'L', +2951=>'L', +2952=>'L', +2953=>'L', +2954=>'L', +2958=>'L', +2959=>'L', +2960=>'L', +2962=>'L', +2963=>'L', +2964=>'L', +2965=>'L', +2969=>'L', +2970=>'L', +2972=>'L', +2974=>'L', +2975=>'L', +2979=>'L', +2980=>'L', +2984=>'L', +2985=>'L', +2986=>'L', +2990=>'L', +2991=>'L', +2992=>'L', +2993=>'L', +2994=>'L', +2995=>'L', +2996=>'L', +2997=>'L', +2998=>'L', +2999=>'L', +3000=>'L', +3001=>'L', +3006=>'L', +3007=>'L', +3008=>'NSM', +3009=>'L', +3010=>'L', +3014=>'L', +3015=>'L', +3016=>'L', +3018=>'L', +3019=>'L', +3020=>'L', +3021=>'NSM', +3031=>'L', +3046=>'L', +3047=>'L', +3048=>'L', +3049=>'L', +3050=>'L', +3051=>'L', +3052=>'L', +3053=>'L', +3054=>'L', +3055=>'L', +3056=>'L', +3057=>'L', +3058=>'L', +3059=>'ON', +3060=>'ON', +3061=>'ON', +3062=>'ON', +3063=>'ON', +3064=>'ON', +3065=>'ET', +3066=>'ON', +3073=>'L', +3074=>'L', +3075=>'L', +3077=>'L', +3078=>'L', +3079=>'L', +3080=>'L', +3081=>'L', +3082=>'L', +3083=>'L', +3084=>'L', +3086=>'L', +3087=>'L', +3088=>'L', +3090=>'L', +3091=>'L', +3092=>'L', +3093=>'L', +3094=>'L', +3095=>'L', +3096=>'L', +3097=>'L', +3098=>'L', +3099=>'L', +3100=>'L', +3101=>'L', +3102=>'L', +3103=>'L', +3104=>'L', +3105=>'L', +3106=>'L', +3107=>'L', +3108=>'L', +3109=>'L', +3110=>'L', +3111=>'L', +3112=>'L', +3114=>'L', +3115=>'L', +3116=>'L', +3117=>'L', +3118=>'L', +3119=>'L', +3120=>'L', +3121=>'L', +3122=>'L', +3123=>'L', +3125=>'L', +3126=>'L', +3127=>'L', +3128=>'L', +3129=>'L', +3134=>'NSM', +3135=>'NSM', +3136=>'NSM', +3137=>'L', +3138=>'L', +3139=>'L', +3140=>'L', +3142=>'NSM', +3143=>'NSM', +3144=>'NSM', +3146=>'NSM', +3147=>'NSM', +3148=>'NSM', +3149=>'NSM', +3157=>'NSM', +3158=>'NSM', +3168=>'L', +3169=>'L', +3174=>'L', +3175=>'L', +3176=>'L', +3177=>'L', +3178=>'L', +3179=>'L', +3180=>'L', +3181=>'L', +3182=>'L', +3183=>'L', +3202=>'L', +3203=>'L', +3205=>'L', +3206=>'L', +3207=>'L', +3208=>'L', +3209=>'L', +3210=>'L', +3211=>'L', +3212=>'L', +3214=>'L', +3215=>'L', +3216=>'L', +3218=>'L', +3219=>'L', +3220=>'L', +3221=>'L', +3222=>'L', +3223=>'L', +3224=>'L', +3225=>'L', +3226=>'L', +3227=>'L', +3228=>'L', +3229=>'L', +3230=>'L', +3231=>'L', +3232=>'L', +3233=>'L', +3234=>'L', +3235=>'L', +3236=>'L', +3237=>'L', +3238=>'L', +3239=>'L', +3240=>'L', +3242=>'L', +3243=>'L', +3244=>'L', +3245=>'L', +3246=>'L', +3247=>'L', +3248=>'L', +3249=>'L', +3250=>'L', +3251=>'L', +3253=>'L', +3254=>'L', +3255=>'L', +3256=>'L', +3257=>'L', +3260=>'NSM', +3261=>'L', +3262=>'L', +3263=>'L', +3264=>'L', +3265=>'L', +3266=>'L', +3267=>'L', +3268=>'L', +3270=>'L', +3271=>'L', +3272=>'L', +3274=>'L', +3275=>'L', +3276=>'NSM', +3277=>'NSM', +3285=>'L', +3286=>'L', +3294=>'L', +3296=>'L', +3297=>'L', +3298=>'NSM', +3299=>'NSM', +3302=>'L', +3303=>'L', +3304=>'L', +3305=>'L', +3306=>'L', +3307=>'L', +3308=>'L', +3309=>'L', +3310=>'L', +3311=>'L', +3313=>'ON', +3314=>'ON', +3330=>'L', +3331=>'L', +3333=>'L', +3334=>'L', +3335=>'L', +3336=>'L', +3337=>'L', +3338=>'L', +3339=>'L', +3340=>'L', +3342=>'L', +3343=>'L', +3344=>'L', +3346=>'L', +3347=>'L', +3348=>'L', +3349=>'L', +3350=>'L', +3351=>'L', +3352=>'L', +3353=>'L', +3354=>'L', +3355=>'L', +3356=>'L', +3357=>'L', +3358=>'L', +3359=>'L', +3360=>'L', +3361=>'L', +3362=>'L', +3363=>'L', +3364=>'L', +3365=>'L', +3366=>'L', +3367=>'L', +3368=>'L', +3370=>'L', +3371=>'L', +3372=>'L', +3373=>'L', +3374=>'L', +3375=>'L', +3376=>'L', +3377=>'L', +3378=>'L', +3379=>'L', +3380=>'L', +3381=>'L', +3382=>'L', +3383=>'L', +3384=>'L', +3385=>'L', +3390=>'L', +3391=>'L', +3392=>'L', +3393=>'NSM', +3394=>'NSM', +3395=>'NSM', +3398=>'L', +3399=>'L', +3400=>'L', +3402=>'L', +3403=>'L', +3404=>'L', +3405=>'NSM', +3415=>'L', +3424=>'L', +3425=>'L', +3430=>'L', +3431=>'L', +3432=>'L', +3433=>'L', +3434=>'L', +3435=>'L', +3436=>'L', +3437=>'L', +3438=>'L', +3439=>'L', +3458=>'L', +3459=>'L', +3461=>'L', +3462=>'L', +3463=>'L', +3464=>'L', +3465=>'L', +3466=>'L', +3467=>'L', +3468=>'L', +3469=>'L', +3470=>'L', +3471=>'L', +3472=>'L', +3473=>'L', +3474=>'L', +3475=>'L', +3476=>'L', +3477=>'L', +3478=>'L', +3482=>'L', +3483=>'L', +3484=>'L', +3485=>'L', +3486=>'L', +3487=>'L', +3488=>'L', +3489=>'L', +3490=>'L', +3491=>'L', +3492=>'L', +3493=>'L', +3494=>'L', +3495=>'L', +3496=>'L', +3497=>'L', +3498=>'L', +3499=>'L', +3500=>'L', +3501=>'L', +3502=>'L', +3503=>'L', +3504=>'L', +3505=>'L', +3507=>'L', +3508=>'L', +3509=>'L', +3510=>'L', +3511=>'L', +3512=>'L', +3513=>'L', +3514=>'L', +3515=>'L', +3517=>'L', +3520=>'L', +3521=>'L', +3522=>'L', +3523=>'L', +3524=>'L', +3525=>'L', +3526=>'L', +3530=>'NSM', +3535=>'L', +3536=>'L', +3537=>'L', +3538=>'NSM', +3539=>'NSM', +3540=>'NSM', +3542=>'NSM', +3544=>'L', +3545=>'L', +3546=>'L', +3547=>'L', +3548=>'L', +3549=>'L', +3550=>'L', +3551=>'L', +3570=>'L', +3571=>'L', +3572=>'L', +3585=>'L', +3586=>'L', +3587=>'L', +3588=>'L', +3589=>'L', +3590=>'L', +3591=>'L', +3592=>'L', +3593=>'L', +3594=>'L', +3595=>'L', +3596=>'L', +3597=>'L', +3598=>'L', +3599=>'L', +3600=>'L', +3601=>'L', +3602=>'L', +3603=>'L', +3604=>'L', +3605=>'L', +3606=>'L', +3607=>'L', +3608=>'L', +3609=>'L', +3610=>'L', +3611=>'L', +3612=>'L', +3613=>'L', +3614=>'L', +3615=>'L', +3616=>'L', +3617=>'L', +3618=>'L', +3619=>'L', +3620=>'L', +3621=>'L', +3622=>'L', +3623=>'L', +3624=>'L', +3625=>'L', +3626=>'L', +3627=>'L', +3628=>'L', +3629=>'L', +3630=>'L', +3631=>'L', +3632=>'L', +3633=>'NSM', +3634=>'L', +3635=>'L', +3636=>'NSM', +3637=>'NSM', +3638=>'NSM', +3639=>'NSM', +3640=>'NSM', +3641=>'NSM', +3642=>'NSM', +3647=>'ET', +3648=>'L', +3649=>'L', +3650=>'L', +3651=>'L', +3652=>'L', +3653=>'L', +3654=>'L', +3655=>'NSM', +3656=>'NSM', +3657=>'NSM', +3658=>'NSM', +3659=>'NSM', +3660=>'NSM', +3661=>'NSM', +3662=>'NSM', +3663=>'L', +3664=>'L', +3665=>'L', +3666=>'L', +3667=>'L', +3668=>'L', +3669=>'L', +3670=>'L', +3671=>'L', +3672=>'L', +3673=>'L', +3674=>'L', +3675=>'L', +3713=>'L', +3714=>'L', +3716=>'L', +3719=>'L', +3720=>'L', +3722=>'L', +3725=>'L', +3732=>'L', +3733=>'L', +3734=>'L', +3735=>'L', +3737=>'L', +3738=>'L', +3739=>'L', +3740=>'L', +3741=>'L', +3742=>'L', +3743=>'L', +3745=>'L', +3746=>'L', +3747=>'L', +3749=>'L', +3751=>'L', +3754=>'L', +3755=>'L', +3757=>'L', +3758=>'L', +3759=>'L', +3760=>'L', +3761=>'NSM', +3762=>'L', +3763=>'L', +3764=>'NSM', +3765=>'NSM', +3766=>'NSM', +3767=>'NSM', +3768=>'NSM', +3769=>'NSM', +3771=>'NSM', +3772=>'NSM', +3773=>'L', +3776=>'L', +3777=>'L', +3778=>'L', +3779=>'L', +3780=>'L', +3782=>'L', +3784=>'NSM', +3785=>'NSM', +3786=>'NSM', +3787=>'NSM', +3788=>'NSM', +3789=>'NSM', +3792=>'L', +3793=>'L', +3794=>'L', +3795=>'L', +3796=>'L', +3797=>'L', +3798=>'L', +3799=>'L', +3800=>'L', +3801=>'L', +3804=>'L', +3805=>'L', +3840=>'L', +3841=>'L', +3842=>'L', +3843=>'L', +3844=>'L', +3845=>'L', +3846=>'L', +3847=>'L', +3848=>'L', +3849=>'L', +3850=>'L', +3851=>'L', +3852=>'L', +3853=>'L', +3854=>'L', +3855=>'L', +3856=>'L', +3857=>'L', +3858=>'L', +3859=>'L', +3860=>'L', +3861=>'L', +3862=>'L', +3863=>'L', +3864=>'NSM', +3865=>'NSM', +3866=>'L', +3867=>'L', +3868=>'L', +3869=>'L', +3870=>'L', +3871=>'L', +3872=>'L', +3873=>'L', +3874=>'L', +3875=>'L', +3876=>'L', +3877=>'L', +3878=>'L', +3879=>'L', +3880=>'L', +3881=>'L', +3882=>'L', +3883=>'L', +3884=>'L', +3885=>'L', +3886=>'L', +3887=>'L', +3888=>'L', +3889=>'L', +3890=>'L', +3891=>'L', +3892=>'L', +3893=>'NSM', +3894=>'L', +3895=>'NSM', +3896=>'L', +3897=>'NSM', +3898=>'ON', +3899=>'ON', +3900=>'ON', +3901=>'ON', +3902=>'L', +3903=>'L', +3904=>'L', +3905=>'L', +3906=>'L', +3907=>'L', +3908=>'L', +3909=>'L', +3910=>'L', +3911=>'L', +3913=>'L', +3914=>'L', +3915=>'L', +3916=>'L', +3917=>'L', +3918=>'L', +3919=>'L', +3920=>'L', +3921=>'L', +3922=>'L', +3923=>'L', +3924=>'L', +3925=>'L', +3926=>'L', +3927=>'L', +3928=>'L', +3929=>'L', +3930=>'L', +3931=>'L', +3932=>'L', +3933=>'L', +3934=>'L', +3935=>'L', +3936=>'L', +3937=>'L', +3938=>'L', +3939=>'L', +3940=>'L', +3941=>'L', +3942=>'L', +3943=>'L', +3944=>'L', +3945=>'L', +3946=>'L', +3953=>'NSM', +3954=>'NSM', +3955=>'NSM', +3956=>'NSM', +3957=>'NSM', +3958=>'NSM', +3959=>'NSM', +3960=>'NSM', +3961=>'NSM', +3962=>'NSM', +3963=>'NSM', +3964=>'NSM', +3965=>'NSM', +3966=>'NSM', +3967=>'L', +3968=>'NSM', +3969=>'NSM', +3970=>'NSM', +3971=>'NSM', +3972=>'NSM', +3973=>'L', +3974=>'NSM', +3975=>'NSM', +3976=>'L', +3977=>'L', +3978=>'L', +3979=>'L', +3984=>'NSM', +3985=>'NSM', +3986=>'NSM', +3987=>'NSM', +3988=>'NSM', +3989=>'NSM', +3990=>'NSM', +3991=>'NSM', +3993=>'NSM', +3994=>'NSM', +3995=>'NSM', +3996=>'NSM', +3997=>'NSM', +3998=>'NSM', +3999=>'NSM', +4000=>'NSM', +4001=>'NSM', +4002=>'NSM', +4003=>'NSM', +4004=>'NSM', +4005=>'NSM', +4006=>'NSM', +4007=>'NSM', +4008=>'NSM', +4009=>'NSM', +4010=>'NSM', +4011=>'NSM', +4012=>'NSM', +4013=>'NSM', +4014=>'NSM', +4015=>'NSM', +4016=>'NSM', +4017=>'NSM', +4018=>'NSM', +4019=>'NSM', +4020=>'NSM', +4021=>'NSM', +4022=>'NSM', +4023=>'NSM', +4024=>'NSM', +4025=>'NSM', +4026=>'NSM', +4027=>'NSM', +4028=>'NSM', +4030=>'L', +4031=>'L', +4032=>'L', +4033=>'L', +4034=>'L', +4035=>'L', +4036=>'L', +4037=>'L', +4038=>'NSM', +4039=>'L', +4040=>'L', +4041=>'L', +4042=>'L', +4043=>'L', +4044=>'L', +4047=>'L', +4048=>'L', +4049=>'L', +4096=>'L', +4097=>'L', +4098=>'L', +4099=>'L', +4100=>'L', +4101=>'L', +4102=>'L', +4103=>'L', +4104=>'L', +4105=>'L', +4106=>'L', +4107=>'L', +4108=>'L', +4109=>'L', +4110=>'L', +4111=>'L', +4112=>'L', +4113=>'L', +4114=>'L', +4115=>'L', +4116=>'L', +4117=>'L', +4118=>'L', +4119=>'L', +4120=>'L', +4121=>'L', +4122=>'L', +4123=>'L', +4124=>'L', +4125=>'L', +4126=>'L', +4127=>'L', +4128=>'L', +4129=>'L', +4131=>'L', +4132=>'L', +4133=>'L', +4134=>'L', +4135=>'L', +4137=>'L', +4138=>'L', +4140=>'L', +4141=>'NSM', +4142=>'NSM', +4143=>'NSM', +4144=>'NSM', +4145=>'L', +4146=>'NSM', +4150=>'NSM', +4151=>'NSM', +4152=>'L', +4153=>'NSM', +4160=>'L', +4161=>'L', +4162=>'L', +4163=>'L', +4164=>'L', +4165=>'L', +4166=>'L', +4167=>'L', +4168=>'L', +4169=>'L', +4170=>'L', +4171=>'L', +4172=>'L', +4173=>'L', +4174=>'L', +4175=>'L', +4176=>'L', +4177=>'L', +4178=>'L', +4179=>'L', +4180=>'L', +4181=>'L', +4182=>'L', +4183=>'L', +4184=>'NSM', +4185=>'NSM', +4256=>'L', +4257=>'L', +4258=>'L', +4259=>'L', +4260=>'L', +4261=>'L', +4262=>'L', +4263=>'L', +4264=>'L', +4265=>'L', +4266=>'L', +4267=>'L', +4268=>'L', +4269=>'L', +4270=>'L', +4271=>'L', +4272=>'L', +4273=>'L', +4274=>'L', +4275=>'L', +4276=>'L', +4277=>'L', +4278=>'L', +4279=>'L', +4280=>'L', +4281=>'L', +4282=>'L', +4283=>'L', +4284=>'L', +4285=>'L', +4286=>'L', +4287=>'L', +4288=>'L', +4289=>'L', +4290=>'L', +4291=>'L', +4292=>'L', +4293=>'L', +4304=>'L', +4305=>'L', +4306=>'L', +4307=>'L', +4308=>'L', +4309=>'L', +4310=>'L', +4311=>'L', +4312=>'L', +4313=>'L', +4314=>'L', +4315=>'L', +4316=>'L', +4317=>'L', +4318=>'L', +4319=>'L', +4320=>'L', +4321=>'L', +4322=>'L', +4323=>'L', +4324=>'L', +4325=>'L', +4326=>'L', +4327=>'L', +4328=>'L', +4329=>'L', +4330=>'L', +4331=>'L', +4332=>'L', +4333=>'L', +4334=>'L', +4335=>'L', +4336=>'L', +4337=>'L', +4338=>'L', +4339=>'L', +4340=>'L', +4341=>'L', +4342=>'L', +4343=>'L', +4344=>'L', +4345=>'L', +4346=>'L', +4347=>'L', +4348=>'L', +4352=>'L', +4353=>'L', +4354=>'L', +4355=>'L', +4356=>'L', +4357=>'L', +4358=>'L', +4359=>'L', +4360=>'L', +4361=>'L', +4362=>'L', +4363=>'L', +4364=>'L', +4365=>'L', +4366=>'L', +4367=>'L', +4368=>'L', +4369=>'L', +4370=>'L', +4371=>'L', +4372=>'L', +4373=>'L', +4374=>'L', +4375=>'L', +4376=>'L', +4377=>'L', +4378=>'L', +4379=>'L', +4380=>'L', +4381=>'L', +4382=>'L', +4383=>'L', +4384=>'L', +4385=>'L', +4386=>'L', +4387=>'L', +4388=>'L', +4389=>'L', +4390=>'L', +4391=>'L', +4392=>'L', +4393=>'L', +4394=>'L', +4395=>'L', +4396=>'L', +4397=>'L', +4398=>'L', +4399=>'L', +4400=>'L', +4401=>'L', +4402=>'L', +4403=>'L', +4404=>'L', +4405=>'L', +4406=>'L', +4407=>'L', +4408=>'L', +4409=>'L', +4410=>'L', +4411=>'L', +4412=>'L', +4413=>'L', +4414=>'L', +4415=>'L', +4416=>'L', +4417=>'L', +4418=>'L', +4419=>'L', +4420=>'L', +4421=>'L', +4422=>'L', +4423=>'L', +4424=>'L', +4425=>'L', +4426=>'L', +4427=>'L', +4428=>'L', +4429=>'L', +4430=>'L', +4431=>'L', +4432=>'L', +4433=>'L', +4434=>'L', +4435=>'L', +4436=>'L', +4437=>'L', +4438=>'L', +4439=>'L', +4440=>'L', +4441=>'L', +4447=>'L', +4448=>'L', +4449=>'L', +4450=>'L', +4451=>'L', +4452=>'L', +4453=>'L', +4454=>'L', +4455=>'L', +4456=>'L', +4457=>'L', +4458=>'L', +4459=>'L', +4460=>'L', +4461=>'L', +4462=>'L', +4463=>'L', +4464=>'L', +4465=>'L', +4466=>'L', +4467=>'L', +4468=>'L', +4469=>'L', +4470=>'L', +4471=>'L', +4472=>'L', +4473=>'L', +4474=>'L', +4475=>'L', +4476=>'L', +4477=>'L', +4478=>'L', +4479=>'L', +4480=>'L', +4481=>'L', +4482=>'L', +4483=>'L', +4484=>'L', +4485=>'L', +4486=>'L', +4487=>'L', +4488=>'L', +4489=>'L', +4490=>'L', +4491=>'L', +4492=>'L', +4493=>'L', +4494=>'L', +4495=>'L', +4496=>'L', +4497=>'L', +4498=>'L', +4499=>'L', +4500=>'L', +4501=>'L', +4502=>'L', +4503=>'L', +4504=>'L', +4505=>'L', +4506=>'L', +4507=>'L', +4508=>'L', +4509=>'L', +4510=>'L', +4511=>'L', +4512=>'L', +4513=>'L', +4514=>'L', +4520=>'L', +4521=>'L', +4522=>'L', +4523=>'L', +4524=>'L', +4525=>'L', +4526=>'L', +4527=>'L', +4528=>'L', +4529=>'L', +4530=>'L', +4531=>'L', +4532=>'L', +4533=>'L', +4534=>'L', +4535=>'L', +4536=>'L', +4537=>'L', +4538=>'L', +4539=>'L', +4540=>'L', +4541=>'L', +4542=>'L', +4543=>'L', +4544=>'L', +4545=>'L', +4546=>'L', +4547=>'L', +4548=>'L', +4549=>'L', +4550=>'L', +4551=>'L', +4552=>'L', +4553=>'L', +4554=>'L', +4555=>'L', +4556=>'L', +4557=>'L', +4558=>'L', +4559=>'L', +4560=>'L', +4561=>'L', +4562=>'L', +4563=>'L', +4564=>'L', +4565=>'L', +4566=>'L', +4567=>'L', +4568=>'L', +4569=>'L', +4570=>'L', +4571=>'L', +4572=>'L', +4573=>'L', +4574=>'L', +4575=>'L', +4576=>'L', +4577=>'L', +4578=>'L', +4579=>'L', +4580=>'L', +4581=>'L', +4582=>'L', +4583=>'L', +4584=>'L', +4585=>'L', +4586=>'L', +4587=>'L', +4588=>'L', +4589=>'L', +4590=>'L', +4591=>'L', +4592=>'L', +4593=>'L', +4594=>'L', +4595=>'L', +4596=>'L', +4597=>'L', +4598=>'L', +4599=>'L', +4600=>'L', +4601=>'L', +4608=>'L', +4609=>'L', +4610=>'L', +4611=>'L', +4612=>'L', +4613=>'L', +4614=>'L', +4615=>'L', +4616=>'L', +4617=>'L', +4618=>'L', +4619=>'L', +4620=>'L', +4621=>'L', +4622=>'L', +4623=>'L', +4624=>'L', +4625=>'L', +4626=>'L', +4627=>'L', +4628=>'L', +4629=>'L', +4630=>'L', +4631=>'L', +4632=>'L', +4633=>'L', +4634=>'L', +4635=>'L', +4636=>'L', +4637=>'L', +4638=>'L', +4639=>'L', +4640=>'L', +4641=>'L', +4642=>'L', +4643=>'L', +4644=>'L', +4645=>'L', +4646=>'L', +4647=>'L', +4648=>'L', +4649=>'L', +4650=>'L', +4651=>'L', +4652=>'L', +4653=>'L', +4654=>'L', +4655=>'L', +4656=>'L', +4657=>'L', +4658=>'L', +4659=>'L', +4660=>'L', +4661=>'L', +4662=>'L', +4663=>'L', +4664=>'L', +4665=>'L', +4666=>'L', +4667=>'L', +4668=>'L', +4669=>'L', +4670=>'L', +4671=>'L', +4672=>'L', +4673=>'L', +4674=>'L', +4675=>'L', +4676=>'L', +4677=>'L', +4678=>'L', +4679=>'L', +4680=>'L', +4682=>'L', +4683=>'L', +4684=>'L', +4685=>'L', +4688=>'L', +4689=>'L', +4690=>'L', +4691=>'L', +4692=>'L', +4693=>'L', +4694=>'L', +4696=>'L', +4698=>'L', +4699=>'L', +4700=>'L', +4701=>'L', +4704=>'L', +4705=>'L', +4706=>'L', +4707=>'L', +4708=>'L', +4709=>'L', +4710=>'L', +4711=>'L', +4712=>'L', +4713=>'L', +4714=>'L', +4715=>'L', +4716=>'L', +4717=>'L', +4718=>'L', +4719=>'L', +4720=>'L', +4721=>'L', +4722=>'L', +4723=>'L', +4724=>'L', +4725=>'L', +4726=>'L', +4727=>'L', +4728=>'L', +4729=>'L', +4730=>'L', +4731=>'L', +4732=>'L', +4733=>'L', +4734=>'L', +4735=>'L', +4736=>'L', +4737=>'L', +4738=>'L', +4739=>'L', +4740=>'L', +4741=>'L', +4742=>'L', +4743=>'L', +4744=>'L', +4746=>'L', +4747=>'L', +4748=>'L', +4749=>'L', +4752=>'L', +4753=>'L', +4754=>'L', +4755=>'L', +4756=>'L', +4757=>'L', +4758=>'L', +4759=>'L', +4760=>'L', +4761=>'L', +4762=>'L', +4763=>'L', +4764=>'L', +4765=>'L', +4766=>'L', +4767=>'L', +4768=>'L', +4769=>'L', +4770=>'L', +4771=>'L', +4772=>'L', +4773=>'L', +4774=>'L', +4775=>'L', +4776=>'L', +4777=>'L', +4778=>'L', +4779=>'L', +4780=>'L', +4781=>'L', +4782=>'L', +4783=>'L', +4784=>'L', +4786=>'L', +4787=>'L', +4788=>'L', +4789=>'L', +4792=>'L', +4793=>'L', +4794=>'L', +4795=>'L', +4796=>'L', +4797=>'L', +4798=>'L', +4800=>'L', +4802=>'L', +4803=>'L', +4804=>'L', +4805=>'L', +4808=>'L', +4809=>'L', +4810=>'L', +4811=>'L', +4812=>'L', +4813=>'L', +4814=>'L', +4815=>'L', +4816=>'L', +4817=>'L', +4818=>'L', +4819=>'L', +4820=>'L', +4821=>'L', +4822=>'L', +4824=>'L', +4825=>'L', +4826=>'L', +4827=>'L', +4828=>'L', +4829=>'L', +4830=>'L', +4831=>'L', +4832=>'L', +4833=>'L', +4834=>'L', +4835=>'L', +4836=>'L', +4837=>'L', +4838=>'L', +4839=>'L', +4840=>'L', +4841=>'L', +4842=>'L', +4843=>'L', +4844=>'L', +4845=>'L', +4846=>'L', +4847=>'L', +4848=>'L', +4849=>'L', +4850=>'L', +4851=>'L', +4852=>'L', +4853=>'L', +4854=>'L', +4855=>'L', +4856=>'L', +4857=>'L', +4858=>'L', +4859=>'L', +4860=>'L', +4861=>'L', +4862=>'L', +4863=>'L', +4864=>'L', +4865=>'L', +4866=>'L', +4867=>'L', +4868=>'L', +4869=>'L', +4870=>'L', +4871=>'L', +4872=>'L', +4873=>'L', +4874=>'L', +4875=>'L', +4876=>'L', +4877=>'L', +4878=>'L', +4879=>'L', +4880=>'L', +4882=>'L', +4883=>'L', +4884=>'L', +4885=>'L', +4888=>'L', +4889=>'L', +4890=>'L', +4891=>'L', +4892=>'L', +4893=>'L', +4894=>'L', +4895=>'L', +4896=>'L', +4897=>'L', +4898=>'L', +4899=>'L', +4900=>'L', +4901=>'L', +4902=>'L', +4903=>'L', +4904=>'L', +4905=>'L', +4906=>'L', +4907=>'L', +4908=>'L', +4909=>'L', +4910=>'L', +4911=>'L', +4912=>'L', +4913=>'L', +4914=>'L', +4915=>'L', +4916=>'L', +4917=>'L', +4918=>'L', +4919=>'L', +4920=>'L', +4921=>'L', +4922=>'L', +4923=>'L', +4924=>'L', +4925=>'L', +4926=>'L', +4927=>'L', +4928=>'L', +4929=>'L', +4930=>'L', +4931=>'L', +4932=>'L', +4933=>'L', +4934=>'L', +4935=>'L', +4936=>'L', +4937=>'L', +4938=>'L', +4939=>'L', +4940=>'L', +4941=>'L', +4942=>'L', +4943=>'L', +4944=>'L', +4945=>'L', +4946=>'L', +4947=>'L', +4948=>'L', +4949=>'L', +4950=>'L', +4951=>'L', +4952=>'L', +4953=>'L', +4954=>'L', +4959=>'NSM', +4960=>'L', +4961=>'L', +4962=>'L', +4963=>'L', +4964=>'L', +4965=>'L', +4966=>'L', +4967=>'L', +4968=>'L', +4969=>'L', +4970=>'L', +4971=>'L', +4972=>'L', +4973=>'L', +4974=>'L', +4975=>'L', +4976=>'L', +4977=>'L', +4978=>'L', +4979=>'L', +4980=>'L', +4981=>'L', +4982=>'L', +4983=>'L', +4984=>'L', +4985=>'L', +4986=>'L', +4987=>'L', +4988=>'L', +4992=>'L', +4993=>'L', +4994=>'L', +4995=>'L', +4996=>'L', +4997=>'L', +4998=>'L', +4999=>'L', +5000=>'L', +5001=>'L', +5002=>'L', +5003=>'L', +5004=>'L', +5005=>'L', +5006=>'L', +5007=>'L', +5008=>'ON', +5009=>'ON', +5010=>'ON', +5011=>'ON', +5012=>'ON', +5013=>'ON', +5014=>'ON', +5015=>'ON', +5016=>'ON', +5017=>'ON', +5024=>'L', +5025=>'L', +5026=>'L', +5027=>'L', +5028=>'L', +5029=>'L', +5030=>'L', +5031=>'L', +5032=>'L', +5033=>'L', +5034=>'L', +5035=>'L', +5036=>'L', +5037=>'L', +5038=>'L', +5039=>'L', +5040=>'L', +5041=>'L', +5042=>'L', +5043=>'L', +5044=>'L', +5045=>'L', +5046=>'L', +5047=>'L', +5048=>'L', +5049=>'L', +5050=>'L', +5051=>'L', +5052=>'L', +5053=>'L', +5054=>'L', +5055=>'L', +5056=>'L', +5057=>'L', +5058=>'L', +5059=>'L', +5060=>'L', +5061=>'L', +5062=>'L', +5063=>'L', +5064=>'L', +5065=>'L', +5066=>'L', +5067=>'L', +5068=>'L', +5069=>'L', +5070=>'L', +5071=>'L', +5072=>'L', +5073=>'L', +5074=>'L', +5075=>'L', +5076=>'L', +5077=>'L', +5078=>'L', +5079=>'L', +5080=>'L', +5081=>'L', +5082=>'L', +5083=>'L', +5084=>'L', +5085=>'L', +5086=>'L', +5087=>'L', +5088=>'L', +5089=>'L', +5090=>'L', +5091=>'L', +5092=>'L', +5093=>'L', +5094=>'L', +5095=>'L', +5096=>'L', +5097=>'L', +5098=>'L', +5099=>'L', +5100=>'L', +5101=>'L', +5102=>'L', +5103=>'L', +5104=>'L', +5105=>'L', +5106=>'L', +5107=>'L', +5108=>'L', +5121=>'L', +5122=>'L', +5123=>'L', +5124=>'L', +5125=>'L', +5126=>'L', +5127=>'L', +5128=>'L', +5129=>'L', +5130=>'L', +5131=>'L', +5132=>'L', +5133=>'L', +5134=>'L', +5135=>'L', +5136=>'L', +5137=>'L', +5138=>'L', +5139=>'L', +5140=>'L', +5141=>'L', +5142=>'L', +5143=>'L', +5144=>'L', +5145=>'L', +5146=>'L', +5147=>'L', +5148=>'L', +5149=>'L', +5150=>'L', +5151=>'L', +5152=>'L', +5153=>'L', +5154=>'L', +5155=>'L', +5156=>'L', +5157=>'L', +5158=>'L', +5159=>'L', +5160=>'L', +5161=>'L', +5162=>'L', +5163=>'L', +5164=>'L', +5165=>'L', +5166=>'L', +5167=>'L', +5168=>'L', +5169=>'L', +5170=>'L', +5171=>'L', +5172=>'L', +5173=>'L', +5174=>'L', +5175=>'L', +5176=>'L', +5177=>'L', +5178=>'L', +5179=>'L', +5180=>'L', +5181=>'L', +5182=>'L', +5183=>'L', +5184=>'L', +5185=>'L', +5186=>'L', +5187=>'L', +5188=>'L', +5189=>'L', +5190=>'L', +5191=>'L', +5192=>'L', +5193=>'L', +5194=>'L', +5195=>'L', +5196=>'L', +5197=>'L', +5198=>'L', +5199=>'L', +5200=>'L', +5201=>'L', +5202=>'L', +5203=>'L', +5204=>'L', +5205=>'L', +5206=>'L', +5207=>'L', +5208=>'L', +5209=>'L', +5210=>'L', +5211=>'L', +5212=>'L', +5213=>'L', +5214=>'L', +5215=>'L', +5216=>'L', +5217=>'L', +5218=>'L', +5219=>'L', +5220=>'L', +5221=>'L', +5222=>'L', +5223=>'L', +5224=>'L', +5225=>'L', +5226=>'L', +5227=>'L', +5228=>'L', +5229=>'L', +5230=>'L', +5231=>'L', +5232=>'L', +5233=>'L', +5234=>'L', +5235=>'L', +5236=>'L', +5237=>'L', +5238=>'L', +5239=>'L', +5240=>'L', +5241=>'L', +5242=>'L', +5243=>'L', +5244=>'L', +5245=>'L', +5246=>'L', +5247=>'L', +5248=>'L', +5249=>'L', +5250=>'L', +5251=>'L', +5252=>'L', +5253=>'L', +5254=>'L', +5255=>'L', +5256=>'L', +5257=>'L', +5258=>'L', +5259=>'L', +5260=>'L', +5261=>'L', +5262=>'L', +5263=>'L', +5264=>'L', +5265=>'L', +5266=>'L', +5267=>'L', +5268=>'L', +5269=>'L', +5270=>'L', +5271=>'L', +5272=>'L', +5273=>'L', +5274=>'L', +5275=>'L', +5276=>'L', +5277=>'L', +5278=>'L', +5279=>'L', +5280=>'L', +5281=>'L', +5282=>'L', +5283=>'L', +5284=>'L', +5285=>'L', +5286=>'L', +5287=>'L', +5288=>'L', +5289=>'L', +5290=>'L', +5291=>'L', +5292=>'L', +5293=>'L', +5294=>'L', +5295=>'L', +5296=>'L', +5297=>'L', +5298=>'L', +5299=>'L', +5300=>'L', +5301=>'L', +5302=>'L', +5303=>'L', +5304=>'L', +5305=>'L', +5306=>'L', +5307=>'L', +5308=>'L', +5309=>'L', +5310=>'L', +5311=>'L', +5312=>'L', +5313=>'L', +5314=>'L', +5315=>'L', +5316=>'L', +5317=>'L', +5318=>'L', +5319=>'L', +5320=>'L', +5321=>'L', +5322=>'L', +5323=>'L', +5324=>'L', +5325=>'L', +5326=>'L', +5327=>'L', +5328=>'L', +5329=>'L', +5330=>'L', +5331=>'L', +5332=>'L', +5333=>'L', +5334=>'L', +5335=>'L', +5336=>'L', +5337=>'L', +5338=>'L', +5339=>'L', +5340=>'L', +5341=>'L', +5342=>'L', +5343=>'L', +5344=>'L', +5345=>'L', +5346=>'L', +5347=>'L', +5348=>'L', +5349=>'L', +5350=>'L', +5351=>'L', +5352=>'L', +5353=>'L', +5354=>'L', +5355=>'L', +5356=>'L', +5357=>'L', +5358=>'L', +5359=>'L', +5360=>'L', +5361=>'L', +5362=>'L', +5363=>'L', +5364=>'L', +5365=>'L', +5366=>'L', +5367=>'L', +5368=>'L', +5369=>'L', +5370=>'L', +5371=>'L', +5372=>'L', +5373=>'L', +5374=>'L', +5375=>'L', +5376=>'L', +5377=>'L', +5378=>'L', +5379=>'L', +5380=>'L', +5381=>'L', +5382=>'L', +5383=>'L', +5384=>'L', +5385=>'L', +5386=>'L', +5387=>'L', +5388=>'L', +5389=>'L', +5390=>'L', +5391=>'L', +5392=>'L', +5393=>'L', +5394=>'L', +5395=>'L', +5396=>'L', +5397=>'L', +5398=>'L', +5399=>'L', +5400=>'L', +5401=>'L', +5402=>'L', +5403=>'L', +5404=>'L', +5405=>'L', +5406=>'L', +5407=>'L', +5408=>'L', +5409=>'L', +5410=>'L', +5411=>'L', +5412=>'L', +5413=>'L', +5414=>'L', +5415=>'L', +5416=>'L', +5417=>'L', +5418=>'L', +5419=>'L', +5420=>'L', +5421=>'L', +5422=>'L', +5423=>'L', +5424=>'L', +5425=>'L', +5426=>'L', +5427=>'L', +5428=>'L', +5429=>'L', +5430=>'L', +5431=>'L', +5432=>'L', +5433=>'L', +5434=>'L', +5435=>'L', +5436=>'L', +5437=>'L', +5438=>'L', +5439=>'L', +5440=>'L', +5441=>'L', +5442=>'L', +5443=>'L', +5444=>'L', +5445=>'L', +5446=>'L', +5447=>'L', +5448=>'L', +5449=>'L', +5450=>'L', +5451=>'L', +5452=>'L', +5453=>'L', +5454=>'L', +5455=>'L', +5456=>'L', +5457=>'L', +5458=>'L', +5459=>'L', +5460=>'L', +5461=>'L', +5462=>'L', +5463=>'L', +5464=>'L', +5465=>'L', +5466=>'L', +5467=>'L', +5468=>'L', +5469=>'L', +5470=>'L', +5471=>'L', +5472=>'L', +5473=>'L', +5474=>'L', +5475=>'L', +5476=>'L', +5477=>'L', +5478=>'L', +5479=>'L', +5480=>'L', +5481=>'L', +5482=>'L', +5483=>'L', +5484=>'L', +5485=>'L', +5486=>'L', +5487=>'L', +5488=>'L', +5489=>'L', +5490=>'L', +5491=>'L', +5492=>'L', +5493=>'L', +5494=>'L', +5495=>'L', +5496=>'L', +5497=>'L', +5498=>'L', +5499=>'L', +5500=>'L', +5501=>'L', +5502=>'L', +5503=>'L', +5504=>'L', +5505=>'L', +5506=>'L', +5507=>'L', +5508=>'L', +5509=>'L', +5510=>'L', +5511=>'L', +5512=>'L', +5513=>'L', +5514=>'L', +5515=>'L', +5516=>'L', +5517=>'L', +5518=>'L', +5519=>'L', +5520=>'L', +5521=>'L', +5522=>'L', +5523=>'L', +5524=>'L', +5525=>'L', +5526=>'L', +5527=>'L', +5528=>'L', +5529=>'L', +5530=>'L', +5531=>'L', +5532=>'L', +5533=>'L', +5534=>'L', +5535=>'L', +5536=>'L', +5537=>'L', +5538=>'L', +5539=>'L', +5540=>'L', +5541=>'L', +5542=>'L', +5543=>'L', +5544=>'L', +5545=>'L', +5546=>'L', +5547=>'L', +5548=>'L', +5549=>'L', +5550=>'L', +5551=>'L', +5552=>'L', +5553=>'L', +5554=>'L', +5555=>'L', +5556=>'L', +5557=>'L', +5558=>'L', +5559=>'L', +5560=>'L', +5561=>'L', +5562=>'L', +5563=>'L', +5564=>'L', +5565=>'L', +5566=>'L', +5567=>'L', +5568=>'L', +5569=>'L', +5570=>'L', +5571=>'L', +5572=>'L', +5573=>'L', +5574=>'L', +5575=>'L', +5576=>'L', +5577=>'L', +5578=>'L', +5579=>'L', +5580=>'L', +5581=>'L', +5582=>'L', +5583=>'L', +5584=>'L', +5585=>'L', +5586=>'L', +5587=>'L', +5588=>'L', +5589=>'L', +5590=>'L', +5591=>'L', +5592=>'L', +5593=>'L', +5594=>'L', +5595=>'L', +5596=>'L', +5597=>'L', +5598=>'L', +5599=>'L', +5600=>'L', +5601=>'L', +5602=>'L', +5603=>'L', +5604=>'L', +5605=>'L', +5606=>'L', +5607=>'L', +5608=>'L', +5609=>'L', +5610=>'L', +5611=>'L', +5612=>'L', +5613=>'L', +5614=>'L', +5615=>'L', +5616=>'L', +5617=>'L', +5618=>'L', +5619=>'L', +5620=>'L', +5621=>'L', +5622=>'L', +5623=>'L', +5624=>'L', +5625=>'L', +5626=>'L', +5627=>'L', +5628=>'L', +5629=>'L', +5630=>'L', +5631=>'L', +5632=>'L', +5633=>'L', +5634=>'L', +5635=>'L', +5636=>'L', +5637=>'L', +5638=>'L', +5639=>'L', +5640=>'L', +5641=>'L', +5642=>'L', +5643=>'L', +5644=>'L', +5645=>'L', +5646=>'L', +5647=>'L', +5648=>'L', +5649=>'L', +5650=>'L', +5651=>'L', +5652=>'L', +5653=>'L', +5654=>'L', +5655=>'L', +5656=>'L', +5657=>'L', +5658=>'L', +5659=>'L', +5660=>'L', +5661=>'L', +5662=>'L', +5663=>'L', +5664=>'L', +5665=>'L', +5666=>'L', +5667=>'L', +5668=>'L', +5669=>'L', +5670=>'L', +5671=>'L', +5672=>'L', +5673=>'L', +5674=>'L', +5675=>'L', +5676=>'L', +5677=>'L', +5678=>'L', +5679=>'L', +5680=>'L', +5681=>'L', +5682=>'L', +5683=>'L', +5684=>'L', +5685=>'L', +5686=>'L', +5687=>'L', +5688=>'L', +5689=>'L', +5690=>'L', +5691=>'L', +5692=>'L', +5693=>'L', +5694=>'L', +5695=>'L', +5696=>'L', +5697=>'L', +5698=>'L', +5699=>'L', +5700=>'L', +5701=>'L', +5702=>'L', +5703=>'L', +5704=>'L', +5705=>'L', +5706=>'L', +5707=>'L', +5708=>'L', +5709=>'L', +5710=>'L', +5711=>'L', +5712=>'L', +5713=>'L', +5714=>'L', +5715=>'L', +5716=>'L', +5717=>'L', +5718=>'L', +5719=>'L', +5720=>'L', +5721=>'L', +5722=>'L', +5723=>'L', +5724=>'L', +5725=>'L', +5726=>'L', +5727=>'L', +5728=>'L', +5729=>'L', +5730=>'L', +5731=>'L', +5732=>'L', +5733=>'L', +5734=>'L', +5735=>'L', +5736=>'L', +5737=>'L', +5738=>'L', +5739=>'L', +5740=>'L', +5741=>'L', +5742=>'L', +5743=>'L', +5744=>'L', +5745=>'L', +5746=>'L', +5747=>'L', +5748=>'L', +5749=>'L', +5750=>'L', +5760=>'WS', +5761=>'L', +5762=>'L', +5763=>'L', +5764=>'L', +5765=>'L', +5766=>'L', +5767=>'L', +5768=>'L', +5769=>'L', +5770=>'L', +5771=>'L', +5772=>'L', +5773=>'L', +5774=>'L', +5775=>'L', +5776=>'L', +5777=>'L', +5778=>'L', +5779=>'L', +5780=>'L', +5781=>'L', +5782=>'L', +5783=>'L', +5784=>'L', +5785=>'L', +5786=>'L', +5787=>'ON', +5788=>'ON', +5792=>'L', +5793=>'L', +5794=>'L', +5795=>'L', +5796=>'L', +5797=>'L', +5798=>'L', +5799=>'L', +5800=>'L', +5801=>'L', +5802=>'L', +5803=>'L', +5804=>'L', +5805=>'L', +5806=>'L', +5807=>'L', +5808=>'L', +5809=>'L', +5810=>'L', +5811=>'L', +5812=>'L', +5813=>'L', +5814=>'L', +5815=>'L', +5816=>'L', +5817=>'L', +5818=>'L', +5819=>'L', +5820=>'L', +5821=>'L', +5822=>'L', +5823=>'L', +5824=>'L', +5825=>'L', +5826=>'L', +5827=>'L', +5828=>'L', +5829=>'L', +5830=>'L', +5831=>'L', +5832=>'L', +5833=>'L', +5834=>'L', +5835=>'L', +5836=>'L', +5837=>'L', +5838=>'L', +5839=>'L', +5840=>'L', +5841=>'L', +5842=>'L', +5843=>'L', +5844=>'L', +5845=>'L', +5846=>'L', +5847=>'L', +5848=>'L', +5849=>'L', +5850=>'L', +5851=>'L', +5852=>'L', +5853=>'L', +5854=>'L', +5855=>'L', +5856=>'L', +5857=>'L', +5858=>'L', +5859=>'L', +5860=>'L', +5861=>'L', +5862=>'L', +5863=>'L', +5864=>'L', +5865=>'L', +5866=>'L', +5867=>'L', +5868=>'L', +5869=>'L', +5870=>'L', +5871=>'L', +5872=>'L', +5888=>'L', +5889=>'L', +5890=>'L', +5891=>'L', +5892=>'L', +5893=>'L', +5894=>'L', +5895=>'L', +5896=>'L', +5897=>'L', +5898=>'L', +5899=>'L', +5900=>'L', +5902=>'L', +5903=>'L', +5904=>'L', +5905=>'L', +5906=>'NSM', +5907=>'NSM', +5908=>'NSM', +5920=>'L', +5921=>'L', +5922=>'L', +5923=>'L', +5924=>'L', +5925=>'L', +5926=>'L', +5927=>'L', +5928=>'L', +5929=>'L', +5930=>'L', +5931=>'L', +5932=>'L', +5933=>'L', +5934=>'L', +5935=>'L', +5936=>'L', +5937=>'L', +5938=>'NSM', +5939=>'NSM', +5940=>'NSM', +5941=>'L', +5942=>'L', +5952=>'L', +5953=>'L', +5954=>'L', +5955=>'L', +5956=>'L', +5957=>'L', +5958=>'L', +5959=>'L', +5960=>'L', +5961=>'L', +5962=>'L', +5963=>'L', +5964=>'L', +5965=>'L', +5966=>'L', +5967=>'L', +5968=>'L', +5969=>'L', +5970=>'NSM', +5971=>'NSM', +5984=>'L', +5985=>'L', +5986=>'L', +5987=>'L', +5988=>'L', +5989=>'L', +5990=>'L', +5991=>'L', +5992=>'L', +5993=>'L', +5994=>'L', +5995=>'L', +5996=>'L', +5998=>'L', +5999=>'L', +6000=>'L', +6002=>'NSM', +6003=>'NSM', +6016=>'L', +6017=>'L', +6018=>'L', +6019=>'L', +6020=>'L', +6021=>'L', +6022=>'L', +6023=>'L', +6024=>'L', +6025=>'L', +6026=>'L', +6027=>'L', +6028=>'L', +6029=>'L', +6030=>'L', +6031=>'L', +6032=>'L', +6033=>'L', +6034=>'L', +6035=>'L', +6036=>'L', +6037=>'L', +6038=>'L', +6039=>'L', +6040=>'L', +6041=>'L', +6042=>'L', +6043=>'L', +6044=>'L', +6045=>'L', +6046=>'L', +6047=>'L', +6048=>'L', +6049=>'L', +6050=>'L', +6051=>'L', +6052=>'L', +6053=>'L', +6054=>'L', +6055=>'L', +6056=>'L', +6057=>'L', +6058=>'L', +6059=>'L', +6060=>'L', +6061=>'L', +6062=>'L', +6063=>'L', +6064=>'L', +6065=>'L', +6066=>'L', +6067=>'L', +6068=>'L', +6069=>'L', +6070=>'L', +6071=>'NSM', +6072=>'NSM', +6073=>'NSM', +6074=>'NSM', +6075=>'NSM', +6076=>'NSM', +6077=>'NSM', +6078=>'L', +6079=>'L', +6080=>'L', +6081=>'L', +6082=>'L', +6083=>'L', +6084=>'L', +6085=>'L', +6086=>'NSM', +6087=>'L', +6088=>'L', +6089=>'NSM', +6090=>'NSM', +6091=>'NSM', +6092=>'NSM', +6093=>'NSM', +6094=>'NSM', +6095=>'NSM', +6096=>'NSM', +6097=>'NSM', +6098=>'NSM', +6099=>'NSM', +6100=>'L', +6101=>'L', +6102=>'L', +6103=>'L', +6104=>'L', +6105=>'L', +6106=>'L', +6107=>'ET', +6108=>'L', +6109=>'NSM', +6112=>'L', +6113=>'L', +6114=>'L', +6115=>'L', +6116=>'L', +6117=>'L', +6118=>'L', +6119=>'L', +6120=>'L', +6121=>'L', +6128=>'ON', +6129=>'ON', +6130=>'ON', +6131=>'ON', +6132=>'ON', +6133=>'ON', +6134=>'ON', +6135=>'ON', +6136=>'ON', +6137=>'ON', +6144=>'ON', +6145=>'ON', +6146=>'ON', +6147=>'ON', +6148=>'ON', +6149=>'ON', +6150=>'ON', +6151=>'ON', +6152=>'ON', +6153=>'ON', +6154=>'ON', +6155=>'NSM', +6156=>'NSM', +6157=>'NSM', +6158=>'WS', +6160=>'L', +6161=>'L', +6162=>'L', +6163=>'L', +6164=>'L', +6165=>'L', +6166=>'L', +6167=>'L', +6168=>'L', +6169=>'L', +6176=>'L', +6177=>'L', +6178=>'L', +6179=>'L', +6180=>'L', +6181=>'L', +6182=>'L', +6183=>'L', +6184=>'L', +6185=>'L', +6186=>'L', +6187=>'L', +6188=>'L', +6189=>'L', +6190=>'L', +6191=>'L', +6192=>'L', +6193=>'L', +6194=>'L', +6195=>'L', +6196=>'L', +6197=>'L', +6198=>'L', +6199=>'L', +6200=>'L', +6201=>'L', +6202=>'L', +6203=>'L', +6204=>'L', +6205=>'L', +6206=>'L', +6207=>'L', +6208=>'L', +6209=>'L', +6210=>'L', +6211=>'L', +6212=>'L', +6213=>'L', +6214=>'L', +6215=>'L', +6216=>'L', +6217=>'L', +6218=>'L', +6219=>'L', +6220=>'L', +6221=>'L', +6222=>'L', +6223=>'L', +6224=>'L', +6225=>'L', +6226=>'L', +6227=>'L', +6228=>'L', +6229=>'L', +6230=>'L', +6231=>'L', +6232=>'L', +6233=>'L', +6234=>'L', +6235=>'L', +6236=>'L', +6237=>'L', +6238=>'L', +6239=>'L', +6240=>'L', +6241=>'L', +6242=>'L', +6243=>'L', +6244=>'L', +6245=>'L', +6246=>'L', +6247=>'L', +6248=>'L', +6249=>'L', +6250=>'L', +6251=>'L', +6252=>'L', +6253=>'L', +6254=>'L', +6255=>'L', +6256=>'L', +6257=>'L', +6258=>'L', +6259=>'L', +6260=>'L', +6261=>'L', +6262=>'L', +6263=>'L', +6272=>'L', +6273=>'L', +6274=>'L', +6275=>'L', +6276=>'L', +6277=>'L', +6278=>'L', +6279=>'L', +6280=>'L', +6281=>'L', +6282=>'L', +6283=>'L', +6284=>'L', +6285=>'L', +6286=>'L', +6287=>'L', +6288=>'L', +6289=>'L', +6290=>'L', +6291=>'L', +6292=>'L', +6293=>'L', +6294=>'L', +6295=>'L', +6296=>'L', +6297=>'L', +6298=>'L', +6299=>'L', +6300=>'L', +6301=>'L', +6302=>'L', +6303=>'L', +6304=>'L', +6305=>'L', +6306=>'L', +6307=>'L', +6308=>'L', +6309=>'L', +6310=>'L', +6311=>'L', +6312=>'L', +6313=>'NSM', +6400=>'L', +6401=>'L', +6402=>'L', +6403=>'L', +6404=>'L', +6405=>'L', +6406=>'L', +6407=>'L', +6408=>'L', +6409=>'L', +6410=>'L', +6411=>'L', +6412=>'L', +6413=>'L', +6414=>'L', +6415=>'L', +6416=>'L', +6417=>'L', +6418=>'L', +6419=>'L', +6420=>'L', +6421=>'L', +6422=>'L', +6423=>'L', +6424=>'L', +6425=>'L', +6426=>'L', +6427=>'L', +6428=>'L', +6432=>'NSM', +6433=>'NSM', +6434=>'NSM', +6435=>'L', +6436=>'L', +6437=>'L', +6438=>'L', +6439=>'NSM', +6440=>'NSM', +6441=>'NSM', +6442=>'NSM', +6443=>'NSM', +6448=>'L', +6449=>'L', +6450=>'NSM', +6451=>'L', +6452=>'L', +6453=>'L', +6454=>'L', +6455=>'L', +6456=>'L', +6457=>'NSM', +6458=>'NSM', +6459=>'NSM', +6464=>'ON', +6468=>'ON', +6469=>'ON', +6470=>'L', +6471=>'L', +6472=>'L', +6473=>'L', +6474=>'L', +6475=>'L', +6476=>'L', +6477=>'L', +6478=>'L', +6479=>'L', +6480=>'L', +6481=>'L', +6482=>'L', +6483=>'L', +6484=>'L', +6485=>'L', +6486=>'L', +6487=>'L', +6488=>'L', +6489=>'L', +6490=>'L', +6491=>'L', +6492=>'L', +6493=>'L', +6494=>'L', +6495=>'L', +6496=>'L', +6497=>'L', +6498=>'L', +6499=>'L', +6500=>'L', +6501=>'L', +6502=>'L', +6503=>'L', +6504=>'L', +6505=>'L', +6506=>'L', +6507=>'L', +6508=>'L', +6509=>'L', +6512=>'L', +6513=>'L', +6514=>'L', +6515=>'L', +6516=>'L', +6528=>'L', +6529=>'L', +6530=>'L', +6531=>'L', +6532=>'L', +6533=>'L', +6534=>'L', +6535=>'L', +6536=>'L', +6537=>'L', +6538=>'L', +6539=>'L', +6540=>'L', +6541=>'L', +6542=>'L', +6543=>'L', +6544=>'L', +6545=>'L', +6546=>'L', +6547=>'L', +6548=>'L', +6549=>'L', +6550=>'L', +6551=>'L', +6552=>'L', +6553=>'L', +6554=>'L', +6555=>'L', +6556=>'L', +6557=>'L', +6558=>'L', +6559=>'L', +6560=>'L', +6561=>'L', +6562=>'L', +6563=>'L', +6564=>'L', +6565=>'L', +6566=>'L', +6567=>'L', +6568=>'L', +6569=>'L', +6576=>'L', +6577=>'L', +6578=>'L', +6579=>'L', +6580=>'L', +6581=>'L', +6582=>'L', +6583=>'L', +6584=>'L', +6585=>'L', +6586=>'L', +6587=>'L', +6588=>'L', +6589=>'L', +6590=>'L', +6591=>'L', +6592=>'L', +6593=>'L', +6594=>'L', +6595=>'L', +6596=>'L', +6597=>'L', +6598=>'L', +6599=>'L', +6600=>'L', +6601=>'L', +6608=>'L', +6609=>'L', +6610=>'L', +6611=>'L', +6612=>'L', +6613=>'L', +6614=>'L', +6615=>'L', +6616=>'L', +6617=>'L', +6622=>'ON', +6623=>'ON', +6624=>'ON', +6625=>'ON', +6626=>'ON', +6627=>'ON', +6628=>'ON', +6629=>'ON', +6630=>'ON', +6631=>'ON', +6632=>'ON', +6633=>'ON', +6634=>'ON', +6635=>'ON', +6636=>'ON', +6637=>'ON', +6638=>'ON', +6639=>'ON', +6640=>'ON', +6641=>'ON', +6642=>'ON', +6643=>'ON', +6644=>'ON', +6645=>'ON', +6646=>'ON', +6647=>'ON', +6648=>'ON', +6649=>'ON', +6650=>'ON', +6651=>'ON', +6652=>'ON', +6653=>'ON', +6654=>'ON', +6655=>'ON', +6656=>'L', +6657=>'L', +6658=>'L', +6659=>'L', +6660=>'L', +6661=>'L', +6662=>'L', +6663=>'L', +6664=>'L', +6665=>'L', +6666=>'L', +6667=>'L', +6668=>'L', +6669=>'L', +6670=>'L', +6671=>'L', +6672=>'L', +6673=>'L', +6674=>'L', +6675=>'L', +6676=>'L', +6677=>'L', +6678=>'L', +6679=>'NSM', +6680=>'NSM', +6681=>'L', +6682=>'L', +6683=>'L', +6686=>'L', +6687=>'L', +6912=>'NSM', +6913=>'NSM', +6914=>'NSM', +6915=>'NSM', +6916=>'L', +6917=>'L', +6918=>'L', +6919=>'L', +6920=>'L', +6921=>'L', +6922=>'L', +6923=>'L', +6924=>'L', +6925=>'L', +6926=>'L', +6927=>'L', +6928=>'L', +6929=>'L', +6930=>'L', +6931=>'L', +6932=>'L', +6933=>'L', +6934=>'L', +6935=>'L', +6936=>'L', +6937=>'L', +6938=>'L', +6939=>'L', +6940=>'L', +6941=>'L', +6942=>'L', +6943=>'L', +6944=>'L', +6945=>'L', +6946=>'L', +6947=>'L', +6948=>'L', +6949=>'L', +6950=>'L', +6951=>'L', +6952=>'L', +6953=>'L', +6954=>'L', +6955=>'L', +6956=>'L', +6957=>'L', +6958=>'L', +6959=>'L', +6960=>'L', +6961=>'L', +6962=>'L', +6963=>'L', +6964=>'NSM', +6965=>'L', +6966=>'NSM', +6967=>'NSM', +6968=>'NSM', +6969=>'NSM', +6970=>'NSM', +6971=>'L', +6972=>'NSM', +6973=>'L', +6974=>'L', +6975=>'L', +6976=>'L', +6977=>'L', +6978=>'NSM', +6979=>'L', +6980=>'L', +6981=>'L', +6982=>'L', +6983=>'L', +6984=>'L', +6985=>'L', +6986=>'L', +6987=>'L', +6992=>'L', +6993=>'L', +6994=>'L', +6995=>'L', +6996=>'L', +6997=>'L', +6998=>'L', +6999=>'L', +7000=>'L', +7001=>'L', +7002=>'L', +7003=>'L', +7004=>'L', +7005=>'L', +7006=>'L', +7007=>'L', +7008=>'L', +7009=>'L', +7010=>'L', +7011=>'L', +7012=>'L', +7013=>'L', +7014=>'L', +7015=>'L', +7016=>'L', +7017=>'L', +7018=>'L', +7019=>'NSM', +7020=>'NSM', +7021=>'NSM', +7022=>'NSM', +7023=>'NSM', +7024=>'NSM', +7025=>'NSM', +7026=>'NSM', +7027=>'NSM', +7028=>'L', +7029=>'L', +7030=>'L', +7031=>'L', +7032=>'L', +7033=>'L', +7034=>'L', +7035=>'L', +7036=>'L', +7424=>'L', +7425=>'L', +7426=>'L', +7427=>'L', +7428=>'L', +7429=>'L', +7430=>'L', +7431=>'L', +7432=>'L', +7433=>'L', +7434=>'L', +7435=>'L', +7436=>'L', +7437=>'L', +7438=>'L', +7439=>'L', +7440=>'L', +7441=>'L', +7442=>'L', +7443=>'L', +7444=>'L', +7445=>'L', +7446=>'L', +7447=>'L', +7448=>'L', +7449=>'L', +7450=>'L', +7451=>'L', +7452=>'L', +7453=>'L', +7454=>'L', +7455=>'L', +7456=>'L', +7457=>'L', +7458=>'L', +7459=>'L', +7460=>'L', +7461=>'L', +7462=>'L', +7463=>'L', +7464=>'L', +7465=>'L', +7466=>'L', +7467=>'L', +7468=>'L', +7469=>'L', +7470=>'L', +7471=>'L', +7472=>'L', +7473=>'L', +7474=>'L', +7475=>'L', +7476=>'L', +7477=>'L', +7478=>'L', +7479=>'L', +7480=>'L', +7481=>'L', +7482=>'L', +7483=>'L', +7484=>'L', +7485=>'L', +7486=>'L', +7487=>'L', +7488=>'L', +7489=>'L', +7490=>'L', +7491=>'L', +7492=>'L', +7493=>'L', +7494=>'L', +7495=>'L', +7496=>'L', +7497=>'L', +7498=>'L', +7499=>'L', +7500=>'L', +7501=>'L', +7502=>'L', +7503=>'L', +7504=>'L', +7505=>'L', +7506=>'L', +7507=>'L', +7508=>'L', +7509=>'L', +7510=>'L', +7511=>'L', +7512=>'L', +7513=>'L', +7514=>'L', +7515=>'L', +7516=>'L', +7517=>'L', +7518=>'L', +7519=>'L', +7520=>'L', +7521=>'L', +7522=>'L', +7523=>'L', +7524=>'L', +7525=>'L', +7526=>'L', +7527=>'L', +7528=>'L', +7529=>'L', +7530=>'L', +7531=>'L', +7532=>'L', +7533=>'L', +7534=>'L', +7535=>'L', +7536=>'L', +7537=>'L', +7538=>'L', +7539=>'L', +7540=>'L', +7541=>'L', +7542=>'L', +7543=>'L', +7544=>'L', +7545=>'L', +7546=>'L', +7547=>'L', +7548=>'L', +7549=>'L', +7550=>'L', +7551=>'L', +7552=>'L', +7553=>'L', +7554=>'L', +7555=>'L', +7556=>'L', +7557=>'L', +7558=>'L', +7559=>'L', +7560=>'L', +7561=>'L', +7562=>'L', +7563=>'L', +7564=>'L', +7565=>'L', +7566=>'L', +7567=>'L', +7568=>'L', +7569=>'L', +7570=>'L', +7571=>'L', +7572=>'L', +7573=>'L', +7574=>'L', +7575=>'L', +7576=>'L', +7577=>'L', +7578=>'L', +7579=>'L', +7580=>'L', +7581=>'L', +7582=>'L', +7583=>'L', +7584=>'L', +7585=>'L', +7586=>'L', +7587=>'L', +7588=>'L', +7589=>'L', +7590=>'L', +7591=>'L', +7592=>'L', +7593=>'L', +7594=>'L', +7595=>'L', +7596=>'L', +7597=>'L', +7598=>'L', +7599=>'L', +7600=>'L', +7601=>'L', +7602=>'L', +7603=>'L', +7604=>'L', +7605=>'L', +7606=>'L', +7607=>'L', +7608=>'L', +7609=>'L', +7610=>'L', +7611=>'L', +7612=>'L', +7613=>'L', +7614=>'L', +7615=>'L', +7616=>'NSM', +7617=>'NSM', +7618=>'NSM', +7619=>'NSM', +7620=>'NSM', +7621=>'NSM', +7622=>'NSM', +7623=>'NSM', +7624=>'NSM', +7625=>'NSM', +7626=>'NSM', +7678=>'NSM', +7679=>'NSM', +7680=>'L', +7681=>'L', +7682=>'L', +7683=>'L', +7684=>'L', +7685=>'L', +7686=>'L', +7687=>'L', +7688=>'L', +7689=>'L', +7690=>'L', +7691=>'L', +7692=>'L', +7693=>'L', +7694=>'L', +7695=>'L', +7696=>'L', +7697=>'L', +7698=>'L', +7699=>'L', +7700=>'L', +7701=>'L', +7702=>'L', +7703=>'L', +7704=>'L', +7705=>'L', +7706=>'L', +7707=>'L', +7708=>'L', +7709=>'L', +7710=>'L', +7711=>'L', +7712=>'L', +7713=>'L', +7714=>'L', +7715=>'L', +7716=>'L', +7717=>'L', +7718=>'L', +7719=>'L', +7720=>'L', +7721=>'L', +7722=>'L', +7723=>'L', +7724=>'L', +7725=>'L', +7726=>'L', +7727=>'L', +7728=>'L', +7729=>'L', +7730=>'L', +7731=>'L', +7732=>'L', +7733=>'L', +7734=>'L', +7735=>'L', +7736=>'L', +7737=>'L', +7738=>'L', +7739=>'L', +7740=>'L', +7741=>'L', +7742=>'L', +7743=>'L', +7744=>'L', +7745=>'L', +7746=>'L', +7747=>'L', +7748=>'L', +7749=>'L', +7750=>'L', +7751=>'L', +7752=>'L', +7753=>'L', +7754=>'L', +7755=>'L', +7756=>'L', +7757=>'L', +7758=>'L', +7759=>'L', +7760=>'L', +7761=>'L', +7762=>'L', +7763=>'L', +7764=>'L', +7765=>'L', +7766=>'L', +7767=>'L', +7768=>'L', +7769=>'L', +7770=>'L', +7771=>'L', +7772=>'L', +7773=>'L', +7774=>'L', +7775=>'L', +7776=>'L', +7777=>'L', +7778=>'L', +7779=>'L', +7780=>'L', +7781=>'L', +7782=>'L', +7783=>'L', +7784=>'L', +7785=>'L', +7786=>'L', +7787=>'L', +7788=>'L', +7789=>'L', +7790=>'L', +7791=>'L', +7792=>'L', +7793=>'L', +7794=>'L', +7795=>'L', +7796=>'L', +7797=>'L', +7798=>'L', +7799=>'L', +7800=>'L', +7801=>'L', +7802=>'L', +7803=>'L', +7804=>'L', +7805=>'L', +7806=>'L', +7807=>'L', +7808=>'L', +7809=>'L', +7810=>'L', +7811=>'L', +7812=>'L', +7813=>'L', +7814=>'L', +7815=>'L', +7816=>'L', +7817=>'L', +7818=>'L', +7819=>'L', +7820=>'L', +7821=>'L', +7822=>'L', +7823=>'L', +7824=>'L', +7825=>'L', +7826=>'L', +7827=>'L', +7828=>'L', +7829=>'L', +7830=>'L', +7831=>'L', +7832=>'L', +7833=>'L', +7834=>'L', +7835=>'L', +7840=>'L', +7841=>'L', +7842=>'L', +7843=>'L', +7844=>'L', +7845=>'L', +7846=>'L', +7847=>'L', +7848=>'L', +7849=>'L', +7850=>'L', +7851=>'L', +7852=>'L', +7853=>'L', +7854=>'L', +7855=>'L', +7856=>'L', +7857=>'L', +7858=>'L', +7859=>'L', +7860=>'L', +7861=>'L', +7862=>'L', +7863=>'L', +7864=>'L', +7865=>'L', +7866=>'L', +7867=>'L', +7868=>'L', +7869=>'L', +7870=>'L', +7871=>'L', +7872=>'L', +7873=>'L', +7874=>'L', +7875=>'L', +7876=>'L', +7877=>'L', +7878=>'L', +7879=>'L', +7880=>'L', +7881=>'L', +7882=>'L', +7883=>'L', +7884=>'L', +7885=>'L', +7886=>'L', +7887=>'L', +7888=>'L', +7889=>'L', +7890=>'L', +7891=>'L', +7892=>'L', +7893=>'L', +7894=>'L', +7895=>'L', +7896=>'L', +7897=>'L', +7898=>'L', +7899=>'L', +7900=>'L', +7901=>'L', +7902=>'L', +7903=>'L', +7904=>'L', +7905=>'L', +7906=>'L', +7907=>'L', +7908=>'L', +7909=>'L', +7910=>'L', +7911=>'L', +7912=>'L', +7913=>'L', +7914=>'L', +7915=>'L', +7916=>'L', +7917=>'L', +7918=>'L', +7919=>'L', +7920=>'L', +7921=>'L', +7922=>'L', +7923=>'L', +7924=>'L', +7925=>'L', +7926=>'L', +7927=>'L', +7928=>'L', +7929=>'L', +7936=>'L', +7937=>'L', +7938=>'L', +7939=>'L', +7940=>'L', +7941=>'L', +7942=>'L', +7943=>'L', +7944=>'L', +7945=>'L', +7946=>'L', +7947=>'L', +7948=>'L', +7949=>'L', +7950=>'L', +7951=>'L', +7952=>'L', +7953=>'L', +7954=>'L', +7955=>'L', +7956=>'L', +7957=>'L', +7960=>'L', +7961=>'L', +7962=>'L', +7963=>'L', +7964=>'L', +7965=>'L', +7968=>'L', +7969=>'L', +7970=>'L', +7971=>'L', +7972=>'L', +7973=>'L', +7974=>'L', +7975=>'L', +7976=>'L', +7977=>'L', +7978=>'L', +7979=>'L', +7980=>'L', +7981=>'L', +7982=>'L', +7983=>'L', +7984=>'L', +7985=>'L', +7986=>'L', +7987=>'L', +7988=>'L', +7989=>'L', +7990=>'L', +7991=>'L', +7992=>'L', +7993=>'L', +7994=>'L', +7995=>'L', +7996=>'L', +7997=>'L', +7998=>'L', +7999=>'L', +8000=>'L', +8001=>'L', +8002=>'L', +8003=>'L', +8004=>'L', +8005=>'L', +8008=>'L', +8009=>'L', +8010=>'L', +8011=>'L', +8012=>'L', +8013=>'L', +8016=>'L', +8017=>'L', +8018=>'L', +8019=>'L', +8020=>'L', +8021=>'L', +8022=>'L', +8023=>'L', +8025=>'L', +8027=>'L', +8029=>'L', +8031=>'L', +8032=>'L', +8033=>'L', +8034=>'L', +8035=>'L', +8036=>'L', +8037=>'L', +8038=>'L', +8039=>'L', +8040=>'L', +8041=>'L', +8042=>'L', +8043=>'L', +8044=>'L', +8045=>'L', +8046=>'L', +8047=>'L', +8048=>'L', +8049=>'L', +8050=>'L', +8051=>'L', +8052=>'L', +8053=>'L', +8054=>'L', +8055=>'L', +8056=>'L', +8057=>'L', +8058=>'L', +8059=>'L', +8060=>'L', +8061=>'L', +8064=>'L', +8065=>'L', +8066=>'L', +8067=>'L', +8068=>'L', +8069=>'L', +8070=>'L', +8071=>'L', +8072=>'L', +8073=>'L', +8074=>'L', +8075=>'L', +8076=>'L', +8077=>'L', +8078=>'L', +8079=>'L', +8080=>'L', +8081=>'L', +8082=>'L', +8083=>'L', +8084=>'L', +8085=>'L', +8086=>'L', +8087=>'L', +8088=>'L', +8089=>'L', +8090=>'L', +8091=>'L', +8092=>'L', +8093=>'L', +8094=>'L', +8095=>'L', +8096=>'L', +8097=>'L', +8098=>'L', +8099=>'L', +8100=>'L', +8101=>'L', +8102=>'L', +8103=>'L', +8104=>'L', +8105=>'L', +8106=>'L', +8107=>'L', +8108=>'L', +8109=>'L', +8110=>'L', +8111=>'L', +8112=>'L', +8113=>'L', +8114=>'L', +8115=>'L', +8116=>'L', +8118=>'L', +8119=>'L', +8120=>'L', +8121=>'L', +8122=>'L', +8123=>'L', +8124=>'L', +8125=>'ON', +8126=>'L', +8127=>'ON', +8128=>'ON', +8129=>'ON', +8130=>'L', +8131=>'L', +8132=>'L', +8134=>'L', +8135=>'L', +8136=>'L', +8137=>'L', +8138=>'L', +8139=>'L', +8140=>'L', +8141=>'ON', +8142=>'ON', +8143=>'ON', +8144=>'L', +8145=>'L', +8146=>'L', +8147=>'L', +8150=>'L', +8151=>'L', +8152=>'L', +8153=>'L', +8154=>'L', +8155=>'L', +8157=>'ON', +8158=>'ON', +8159=>'ON', +8160=>'L', +8161=>'L', +8162=>'L', +8163=>'L', +8164=>'L', +8165=>'L', +8166=>'L', +8167=>'L', +8168=>'L', +8169=>'L', +8170=>'L', +8171=>'L', +8172=>'L', +8173=>'ON', +8174=>'ON', +8175=>'ON', +8178=>'L', +8179=>'L', +8180=>'L', +8182=>'L', +8183=>'L', +8184=>'L', +8185=>'L', +8186=>'L', +8187=>'L', +8188=>'L', +8189=>'ON', +8190=>'ON', +8192=>'WS', +8193=>'WS', +8194=>'WS', +8195=>'WS', +8196=>'WS', +8197=>'WS', +8198=>'WS', +8199=>'WS', +8200=>'WS', +8201=>'WS', +8202=>'WS', +8203=>'BN', +8204=>'BN', +8205=>'BN', +8206=>'L', +8207=>'R', +8208=>'ON', +8209=>'ON', +8210=>'ON', +8211=>'ON', +8212=>'ON', +8213=>'ON', +8214=>'ON', +8215=>'ON', +8216=>'ON', +8217=>'ON', +8218=>'ON', +8219=>'ON', +8220=>'ON', +8221=>'ON', +8222=>'ON', +8223=>'ON', +8224=>'ON', +8225=>'ON', +8226=>'ON', +8227=>'ON', +8228=>'ON', +8229=>'ON', +8230=>'ON', +8231=>'ON', +8232=>'WS', +8233=>'B', +8234=>'LRE', +8235=>'RLE', +8236=>'PDF', +8237=>'LRO', +8238=>'RLO', +8239=>'CS', +8240=>'ET', +8241=>'ET', +8242=>'ET', +8243=>'ET', +8244=>'ET', +8245=>'ON', +8246=>'ON', +8247=>'ON', +8248=>'ON', +8249=>'ON', +8250=>'ON', +8251=>'ON', +8252=>'ON', +8253=>'ON', +8254=>'ON', +8255=>'ON', +8256=>'ON', +8257=>'ON', +8258=>'ON', +8259=>'ON', +8260=>'CS', +8261=>'ON', +8262=>'ON', +8263=>'ON', +8264=>'ON', +8265=>'ON', +8266=>'ON', +8267=>'ON', +8268=>'ON', +8269=>'ON', +8270=>'ON', +8271=>'ON', +8272=>'ON', +8273=>'ON', +8274=>'ON', +8275=>'ON', +8276=>'ON', +8277=>'ON', +8278=>'ON', +8279=>'ON', +8280=>'ON', +8281=>'ON', +8282=>'ON', +8283=>'ON', +8284=>'ON', +8285=>'ON', +8286=>'ON', +8287=>'WS', +8288=>'BN', +8289=>'BN', +8290=>'BN', +8291=>'BN', +8298=>'BN', +8299=>'BN', +8300=>'BN', +8301=>'BN', +8302=>'BN', +8303=>'BN', +8304=>'EN', +8305=>'L', +8308=>'EN', +8309=>'EN', +8310=>'EN', +8311=>'EN', +8312=>'EN', +8313=>'EN', +8314=>'ES', +8315=>'ES', +8316=>'ON', +8317=>'ON', +8318=>'ON', +8319=>'L', +8320=>'EN', +8321=>'EN', +8322=>'EN', +8323=>'EN', +8324=>'EN', +8325=>'EN', +8326=>'EN', +8327=>'EN', +8328=>'EN', +8329=>'EN', +8330=>'ES', +8331=>'ES', +8332=>'ON', +8333=>'ON', +8334=>'ON', +8336=>'L', +8337=>'L', +8338=>'L', +8339=>'L', +8340=>'L', +8352=>'ET', +8353=>'ET', +8354=>'ET', +8355=>'ET', +8356=>'ET', +8357=>'ET', +8358=>'ET', +8359=>'ET', +8360=>'ET', +8361=>'ET', +8362=>'ET', +8363=>'ET', +8364=>'ET', +8365=>'ET', +8366=>'ET', +8367=>'ET', +8368=>'ET', +8369=>'ET', +8370=>'ET', +8371=>'ET', +8372=>'ET', +8373=>'ET', +8400=>'NSM', +8401=>'NSM', +8402=>'NSM', +8403=>'NSM', +8404=>'NSM', +8405=>'NSM', +8406=>'NSM', +8407=>'NSM', +8408=>'NSM', +8409=>'NSM', +8410=>'NSM', +8411=>'NSM', +8412=>'NSM', +8413=>'NSM', +8414=>'NSM', +8415=>'NSM', +8416=>'NSM', +8417=>'NSM', +8418=>'NSM', +8419=>'NSM', +8420=>'NSM', +8421=>'NSM', +8422=>'NSM', +8423=>'NSM', +8424=>'NSM', +8425=>'NSM', +8426=>'NSM', +8427=>'NSM', +8428=>'NSM', +8429=>'NSM', +8430=>'NSM', +8431=>'NSM', +8448=>'ON', +8449=>'ON', +8450=>'L', +8451=>'ON', +8452=>'ON', +8453=>'ON', +8454=>'ON', +8455=>'L', +8456=>'ON', +8457=>'ON', +8458=>'L', +8459=>'L', +8460=>'L', +8461=>'L', +8462=>'L', +8463=>'L', +8464=>'L', +8465=>'L', +8466=>'L', +8467=>'L', +8468=>'ON', +8469=>'L', +8470=>'ON', +8471=>'ON', +8472=>'ON', +8473=>'L', +8474=>'L', +8475=>'L', +8476=>'L', +8477=>'L', +8478=>'ON', +8479=>'ON', +8480=>'ON', +8481=>'ON', +8482=>'ON', +8483=>'ON', +8484=>'L', +8485=>'ON', +8486=>'L', +8487=>'ON', +8488=>'L', +8489=>'ON', +8490=>'L', +8491=>'L', +8492=>'L', +8493=>'L', +8494=>'ET', +8495=>'L', +8496=>'L', +8497=>'L', +8498=>'L', +8499=>'L', +8500=>'L', +8501=>'L', +8502=>'L', +8503=>'L', +8504=>'L', +8505=>'L', +8506=>'ON', +8507=>'ON', +8508=>'L', +8509=>'L', +8510=>'L', +8511=>'L', +8512=>'ON', +8513=>'ON', +8514=>'ON', +8515=>'ON', +8516=>'ON', +8517=>'L', +8518=>'L', +8519=>'L', +8520=>'L', +8521=>'L', +8522=>'ON', +8523=>'ON', +8524=>'ON', +8525=>'ON', +8526=>'L', +8531=>'ON', +8532=>'ON', +8533=>'ON', +8534=>'ON', +8535=>'ON', +8536=>'ON', +8537=>'ON', +8538=>'ON', +8539=>'ON', +8540=>'ON', +8541=>'ON', +8542=>'ON', +8543=>'ON', +8544=>'L', +8545=>'L', +8546=>'L', +8547=>'L', +8548=>'L', +8549=>'L', +8550=>'L', +8551=>'L', +8552=>'L', +8553=>'L', +8554=>'L', +8555=>'L', +8556=>'L', +8557=>'L', +8558=>'L', +8559=>'L', +8560=>'L', +8561=>'L', +8562=>'L', +8563=>'L', +8564=>'L', +8565=>'L', +8566=>'L', +8567=>'L', +8568=>'L', +8569=>'L', +8570=>'L', +8571=>'L', +8572=>'L', +8573=>'L', +8574=>'L', +8575=>'L', +8576=>'L', +8577=>'L', +8578=>'L', +8579=>'L', +8580=>'L', +8592=>'ON', +8593=>'ON', +8594=>'ON', +8595=>'ON', +8596=>'ON', +8597=>'ON', +8598=>'ON', +8599=>'ON', +8600=>'ON', +8601=>'ON', +8602=>'ON', +8603=>'ON', +8604=>'ON', +8605=>'ON', +8606=>'ON', +8607=>'ON', +8608=>'ON', +8609=>'ON', +8610=>'ON', +8611=>'ON', +8612=>'ON', +8613=>'ON', +8614=>'ON', +8615=>'ON', +8616=>'ON', +8617=>'ON', +8618=>'ON', +8619=>'ON', +8620=>'ON', +8621=>'ON', +8622=>'ON', +8623=>'ON', +8624=>'ON', +8625=>'ON', +8626=>'ON', +8627=>'ON', +8628=>'ON', +8629=>'ON', +8630=>'ON', +8631=>'ON', +8632=>'ON', +8633=>'ON', +8634=>'ON', +8635=>'ON', +8636=>'ON', +8637=>'ON', +8638=>'ON', +8639=>'ON', +8640=>'ON', +8641=>'ON', +8642=>'ON', +8643=>'ON', +8644=>'ON', +8645=>'ON', +8646=>'ON', +8647=>'ON', +8648=>'ON', +8649=>'ON', +8650=>'ON', +8651=>'ON', +8652=>'ON', +8653=>'ON', +8654=>'ON', +8655=>'ON', +8656=>'ON', +8657=>'ON', +8658=>'ON', +8659=>'ON', +8660=>'ON', +8661=>'ON', +8662=>'ON', +8663=>'ON', +8664=>'ON', +8665=>'ON', +8666=>'ON', +8667=>'ON', +8668=>'ON', +8669=>'ON', +8670=>'ON', +8671=>'ON', +8672=>'ON', +8673=>'ON', +8674=>'ON', +8675=>'ON', +8676=>'ON', +8677=>'ON', +8678=>'ON', +8679=>'ON', +8680=>'ON', +8681=>'ON', +8682=>'ON', +8683=>'ON', +8684=>'ON', +8685=>'ON', +8686=>'ON', +8687=>'ON', +8688=>'ON', +8689=>'ON', +8690=>'ON', +8691=>'ON', +8692=>'ON', +8693=>'ON', +8694=>'ON', +8695=>'ON', +8696=>'ON', +8697=>'ON', +8698=>'ON', +8699=>'ON', +8700=>'ON', +8701=>'ON', +8702=>'ON', +8703=>'ON', +8704=>'ON', +8705=>'ON', +8706=>'ON', +8707=>'ON', +8708=>'ON', +8709=>'ON', +8710=>'ON', +8711=>'ON', +8712=>'ON', +8713=>'ON', +8714=>'ON', +8715=>'ON', +8716=>'ON', +8717=>'ON', +8718=>'ON', +8719=>'ON', +8720=>'ON', +8721=>'ON', +8722=>'ES', +8723=>'ET', +8724=>'ON', +8725=>'ON', +8726=>'ON', +8727=>'ON', +8728=>'ON', +8729=>'ON', +8730=>'ON', +8731=>'ON', +8732=>'ON', +8733=>'ON', +8734=>'ON', +8735=>'ON', +8736=>'ON', +8737=>'ON', +8738=>'ON', +8739=>'ON', +8740=>'ON', +8741=>'ON', +8742=>'ON', +8743=>'ON', +8744=>'ON', +8745=>'ON', +8746=>'ON', +8747=>'ON', +8748=>'ON', +8749=>'ON', +8750=>'ON', +8751=>'ON', +8752=>'ON', +8753=>'ON', +8754=>'ON', +8755=>'ON', +8756=>'ON', +8757=>'ON', +8758=>'ON', +8759=>'ON', +8760=>'ON', +8761=>'ON', +8762=>'ON', +8763=>'ON', +8764=>'ON', +8765=>'ON', +8766=>'ON', +8767=>'ON', +8768=>'ON', +8769=>'ON', +8770=>'ON', +8771=>'ON', +8772=>'ON', +8773=>'ON', +8774=>'ON', +8775=>'ON', +8776=>'ON', +8777=>'ON', +8778=>'ON', +8779=>'ON', +8780=>'ON', +8781=>'ON', +8782=>'ON', +8783=>'ON', +8784=>'ON', +8785=>'ON', +8786=>'ON', +8787=>'ON', +8788=>'ON', +8789=>'ON', +8790=>'ON', +8791=>'ON', +8792=>'ON', +8793=>'ON', +8794=>'ON', +8795=>'ON', +8796=>'ON', +8797=>'ON', +8798=>'ON', +8799=>'ON', +8800=>'ON', +8801=>'ON', +8802=>'ON', +8803=>'ON', +8804=>'ON', +8805=>'ON', +8806=>'ON', +8807=>'ON', +8808=>'ON', +8809=>'ON', +8810=>'ON', +8811=>'ON', +8812=>'ON', +8813=>'ON', +8814=>'ON', +8815=>'ON', +8816=>'ON', +8817=>'ON', +8818=>'ON', +8819=>'ON', +8820=>'ON', +8821=>'ON', +8822=>'ON', +8823=>'ON', +8824=>'ON', +8825=>'ON', +8826=>'ON', +8827=>'ON', +8828=>'ON', +8829=>'ON', +8830=>'ON', +8831=>'ON', +8832=>'ON', +8833=>'ON', +8834=>'ON', +8835=>'ON', +8836=>'ON', +8837=>'ON', +8838=>'ON', +8839=>'ON', +8840=>'ON', +8841=>'ON', +8842=>'ON', +8843=>'ON', +8844=>'ON', +8845=>'ON', +8846=>'ON', +8847=>'ON', +8848=>'ON', +8849=>'ON', +8850=>'ON', +8851=>'ON', +8852=>'ON', +8853=>'ON', +8854=>'ON', +8855=>'ON', +8856=>'ON', +8857=>'ON', +8858=>'ON', +8859=>'ON', +8860=>'ON', +8861=>'ON', +8862=>'ON', +8863=>'ON', +8864=>'ON', +8865=>'ON', +8866=>'ON', +8867=>'ON', +8868=>'ON', +8869=>'ON', +8870=>'ON', +8871=>'ON', +8872=>'ON', +8873=>'ON', +8874=>'ON', +8875=>'ON', +8876=>'ON', +8877=>'ON', +8878=>'ON', +8879=>'ON', +8880=>'ON', +8881=>'ON', +8882=>'ON', +8883=>'ON', +8884=>'ON', +8885=>'ON', +8886=>'ON', +8887=>'ON', +8888=>'ON', +8889=>'ON', +8890=>'ON', +8891=>'ON', +8892=>'ON', +8893=>'ON', +8894=>'ON', +8895=>'ON', +8896=>'ON', +8897=>'ON', +8898=>'ON', +8899=>'ON', +8900=>'ON', +8901=>'ON', +8902=>'ON', +8903=>'ON', +8904=>'ON', +8905=>'ON', +8906=>'ON', +8907=>'ON', +8908=>'ON', +8909=>'ON', +8910=>'ON', +8911=>'ON', +8912=>'ON', +8913=>'ON', +8914=>'ON', +8915=>'ON', +8916=>'ON', +8917=>'ON', +8918=>'ON', +8919=>'ON', +8920=>'ON', +8921=>'ON', +8922=>'ON', +8923=>'ON', +8924=>'ON', +8925=>'ON', +8926=>'ON', +8927=>'ON', +8928=>'ON', +8929=>'ON', +8930=>'ON', +8931=>'ON', +8932=>'ON', +8933=>'ON', +8934=>'ON', +8935=>'ON', +8936=>'ON', +8937=>'ON', +8938=>'ON', +8939=>'ON', +8940=>'ON', +8941=>'ON', +8942=>'ON', +8943=>'ON', +8944=>'ON', +8945=>'ON', +8946=>'ON', +8947=>'ON', +8948=>'ON', +8949=>'ON', +8950=>'ON', +8951=>'ON', +8952=>'ON', +8953=>'ON', +8954=>'ON', +8955=>'ON', +8956=>'ON', +8957=>'ON', +8958=>'ON', +8959=>'ON', +8960=>'ON', +8961=>'ON', +8962=>'ON', +8963=>'ON', +8964=>'ON', +8965=>'ON', +8966=>'ON', +8967=>'ON', +8968=>'ON', +8969=>'ON', +8970=>'ON', +8971=>'ON', +8972=>'ON', +8973=>'ON', +8974=>'ON', +8975=>'ON', +8976=>'ON', +8977=>'ON', +8978=>'ON', +8979=>'ON', +8980=>'ON', +8981=>'ON', +8982=>'ON', +8983=>'ON', +8984=>'ON', +8985=>'ON', +8986=>'ON', +8987=>'ON', +8988=>'ON', +8989=>'ON', +8990=>'ON', +8991=>'ON', +8992=>'ON', +8993=>'ON', +8994=>'ON', +8995=>'ON', +8996=>'ON', +8997=>'ON', +8998=>'ON', +8999=>'ON', +9000=>'ON', +9001=>'ON', +9002=>'ON', +9003=>'ON', +9004=>'ON', +9005=>'ON', +9006=>'ON', +9007=>'ON', +9008=>'ON', +9009=>'ON', +9010=>'ON', +9011=>'ON', +9012=>'ON', +9013=>'ON', +9014=>'L', +9015=>'L', +9016=>'L', +9017=>'L', +9018=>'L', +9019=>'L', +9020=>'L', +9021=>'L', +9022=>'L', +9023=>'L', +9024=>'L', +9025=>'L', +9026=>'L', +9027=>'L', +9028=>'L', +9029=>'L', +9030=>'L', +9031=>'L', +9032=>'L', +9033=>'L', +9034=>'L', +9035=>'L', +9036=>'L', +9037=>'L', +9038=>'L', +9039=>'L', +9040=>'L', +9041=>'L', +9042=>'L', +9043=>'L', +9044=>'L', +9045=>'L', +9046=>'L', +9047=>'L', +9048=>'L', +9049=>'L', +9050=>'L', +9051=>'L', +9052=>'L', +9053=>'L', +9054=>'L', +9055=>'L', +9056=>'L', +9057=>'L', +9058=>'L', +9059=>'L', +9060=>'L', +9061=>'L', +9062=>'L', +9063=>'L', +9064=>'L', +9065=>'L', +9066=>'L', +9067=>'L', +9068=>'L', +9069=>'L', +9070=>'L', +9071=>'L', +9072=>'L', +9073=>'L', +9074=>'L', +9075=>'L', +9076=>'L', +9077=>'L', +9078=>'L', +9079=>'L', +9080=>'L', +9081=>'L', +9082=>'L', +9083=>'ON', +9084=>'ON', +9085=>'ON', +9086=>'ON', +9087=>'ON', +9088=>'ON', +9089=>'ON', +9090=>'ON', +9091=>'ON', +9092=>'ON', +9093=>'ON', +9094=>'ON', +9095=>'ON', +9096=>'ON', +9097=>'ON', +9098=>'ON', +9099=>'ON', +9100=>'ON', +9101=>'ON', +9102=>'ON', +9103=>'ON', +9104=>'ON', +9105=>'ON', +9106=>'ON', +9107=>'ON', +9108=>'ON', +9109=>'L', +9110=>'ON', +9111=>'ON', +9112=>'ON', +9113=>'ON', +9114=>'ON', +9115=>'ON', +9116=>'ON', +9117=>'ON', +9118=>'ON', +9119=>'ON', +9120=>'ON', +9121=>'ON', +9122=>'ON', +9123=>'ON', +9124=>'ON', +9125=>'ON', +9126=>'ON', +9127=>'ON', +9128=>'ON', +9129=>'ON', +9130=>'ON', +9131=>'ON', +9132=>'ON', +9133=>'ON', +9134=>'ON', +9135=>'ON', +9136=>'ON', +9137=>'ON', +9138=>'ON', +9139=>'ON', +9140=>'ON', +9141=>'ON', +9142=>'ON', +9143=>'ON', +9144=>'ON', +9145=>'ON', +9146=>'ON', +9147=>'ON', +9148=>'ON', +9149=>'ON', +9150=>'ON', +9151=>'ON', +9152=>'ON', +9153=>'ON', +9154=>'ON', +9155=>'ON', +9156=>'ON', +9157=>'ON', +9158=>'ON', +9159=>'ON', +9160=>'ON', +9161=>'ON', +9162=>'ON', +9163=>'ON', +9164=>'ON', +9165=>'ON', +9166=>'ON', +9167=>'ON', +9168=>'ON', +9169=>'ON', +9170=>'ON', +9171=>'ON', +9172=>'ON', +9173=>'ON', +9174=>'ON', +9175=>'ON', +9176=>'ON', +9177=>'ON', +9178=>'ON', +9179=>'ON', +9180=>'ON', +9181=>'ON', +9182=>'ON', +9183=>'ON', +9184=>'ON', +9185=>'ON', +9186=>'ON', +9187=>'ON', +9188=>'ON', +9189=>'ON', +9190=>'ON', +9191=>'ON', +9216=>'ON', +9217=>'ON', +9218=>'ON', +9219=>'ON', +9220=>'ON', +9221=>'ON', +9222=>'ON', +9223=>'ON', +9224=>'ON', +9225=>'ON', +9226=>'ON', +9227=>'ON', +9228=>'ON', +9229=>'ON', +9230=>'ON', +9231=>'ON', +9232=>'ON', +9233=>'ON', +9234=>'ON', +9235=>'ON', +9236=>'ON', +9237=>'ON', +9238=>'ON', +9239=>'ON', +9240=>'ON', +9241=>'ON', +9242=>'ON', +9243=>'ON', +9244=>'ON', +9245=>'ON', +9246=>'ON', +9247=>'ON', +9248=>'ON', +9249=>'ON', +9250=>'ON', +9251=>'ON', +9252=>'ON', +9253=>'ON', +9254=>'ON', +9280=>'ON', +9281=>'ON', +9282=>'ON', +9283=>'ON', +9284=>'ON', +9285=>'ON', +9286=>'ON', +9287=>'ON', +9288=>'ON', +9289=>'ON', +9290=>'ON', +9312=>'ON', +9313=>'ON', +9314=>'ON', +9315=>'ON', +9316=>'ON', +9317=>'ON', +9318=>'ON', +9319=>'ON', +9320=>'ON', +9321=>'ON', +9322=>'ON', +9323=>'ON', +9324=>'ON', +9325=>'ON', +9326=>'ON', +9327=>'ON', +9328=>'ON', +9329=>'ON', +9330=>'ON', +9331=>'ON', +9332=>'ON', +9333=>'ON', +9334=>'ON', +9335=>'ON', +9336=>'ON', +9337=>'ON', +9338=>'ON', +9339=>'ON', +9340=>'ON', +9341=>'ON', +9342=>'ON', +9343=>'ON', +9344=>'ON', +9345=>'ON', +9346=>'ON', +9347=>'ON', +9348=>'ON', +9349=>'ON', +9350=>'ON', +9351=>'ON', +9352=>'EN', +9353=>'EN', +9354=>'EN', +9355=>'EN', +9356=>'EN', +9357=>'EN', +9358=>'EN', +9359=>'EN', +9360=>'EN', +9361=>'EN', +9362=>'EN', +9363=>'EN', +9364=>'EN', +9365=>'EN', +9366=>'EN', +9367=>'EN', +9368=>'EN', +9369=>'EN', +9370=>'EN', +9371=>'EN', +9372=>'L', +9373=>'L', +9374=>'L', +9375=>'L', +9376=>'L', +9377=>'L', +9378=>'L', +9379=>'L', +9380=>'L', +9381=>'L', +9382=>'L', +9383=>'L', +9384=>'L', +9385=>'L', +9386=>'L', +9387=>'L', +9388=>'L', +9389=>'L', +9390=>'L', +9391=>'L', +9392=>'L', +9393=>'L', +9394=>'L', +9395=>'L', +9396=>'L', +9397=>'L', +9398=>'L', +9399=>'L', +9400=>'L', +9401=>'L', +9402=>'L', +9403=>'L', +9404=>'L', +9405=>'L', +9406=>'L', +9407=>'L', +9408=>'L', +9409=>'L', +9410=>'L', +9411=>'L', +9412=>'L', +9413=>'L', +9414=>'L', +9415=>'L', +9416=>'L', +9417=>'L', +9418=>'L', +9419=>'L', +9420=>'L', +9421=>'L', +9422=>'L', +9423=>'L', +9424=>'L', +9425=>'L', +9426=>'L', +9427=>'L', +9428=>'L', +9429=>'L', +9430=>'L', +9431=>'L', +9432=>'L', +9433=>'L', +9434=>'L', +9435=>'L', +9436=>'L', +9437=>'L', +9438=>'L', +9439=>'L', +9440=>'L', +9441=>'L', +9442=>'L', +9443=>'L', +9444=>'L', +9445=>'L', +9446=>'L', +9447=>'L', +9448=>'L', +9449=>'L', +9450=>'ON', +9451=>'ON', +9452=>'ON', +9453=>'ON', +9454=>'ON', +9455=>'ON', +9456=>'ON', +9457=>'ON', +9458=>'ON', +9459=>'ON', +9460=>'ON', +9461=>'ON', +9462=>'ON', +9463=>'ON', +9464=>'ON', +9465=>'ON', +9466=>'ON', +9467=>'ON', +9468=>'ON', +9469=>'ON', +9470=>'ON', +9471=>'ON', +9472=>'ON', +9473=>'ON', +9474=>'ON', +9475=>'ON', +9476=>'ON', +9477=>'ON', +9478=>'ON', +9479=>'ON', +9480=>'ON', +9481=>'ON', +9482=>'ON', +9483=>'ON', +9484=>'ON', +9485=>'ON', +9486=>'ON', +9487=>'ON', +9488=>'ON', +9489=>'ON', +9490=>'ON', +9491=>'ON', +9492=>'ON', +9493=>'ON', +9494=>'ON', +9495=>'ON', +9496=>'ON', +9497=>'ON', +9498=>'ON', +9499=>'ON', +9500=>'ON', +9501=>'ON', +9502=>'ON', +9503=>'ON', +9504=>'ON', +9505=>'ON', +9506=>'ON', +9507=>'ON', +9508=>'ON', +9509=>'ON', +9510=>'ON', +9511=>'ON', +9512=>'ON', +9513=>'ON', +9514=>'ON', +9515=>'ON', +9516=>'ON', +9517=>'ON', +9518=>'ON', +9519=>'ON', +9520=>'ON', +9521=>'ON', +9522=>'ON', +9523=>'ON', +9524=>'ON', +9525=>'ON', +9526=>'ON', +9527=>'ON', +9528=>'ON', +9529=>'ON', +9530=>'ON', +9531=>'ON', +9532=>'ON', +9533=>'ON', +9534=>'ON', +9535=>'ON', +9536=>'ON', +9537=>'ON', +9538=>'ON', +9539=>'ON', +9540=>'ON', +9541=>'ON', +9542=>'ON', +9543=>'ON', +9544=>'ON', +9545=>'ON', +9546=>'ON', +9547=>'ON', +9548=>'ON', +9549=>'ON', +9550=>'ON', +9551=>'ON', +9552=>'ON', +9553=>'ON', +9554=>'ON', +9555=>'ON', +9556=>'ON', +9557=>'ON', +9558=>'ON', +9559=>'ON', +9560=>'ON', +9561=>'ON', +9562=>'ON', +9563=>'ON', +9564=>'ON', +9565=>'ON', +9566=>'ON', +9567=>'ON', +9568=>'ON', +9569=>'ON', +9570=>'ON', +9571=>'ON', +9572=>'ON', +9573=>'ON', +9574=>'ON', +9575=>'ON', +9576=>'ON', +9577=>'ON', +9578=>'ON', +9579=>'ON', +9580=>'ON', +9581=>'ON', +9582=>'ON', +9583=>'ON', +9584=>'ON', +9585=>'ON', +9586=>'ON', +9587=>'ON', +9588=>'ON', +9589=>'ON', +9590=>'ON', +9591=>'ON', +9592=>'ON', +9593=>'ON', +9594=>'ON', +9595=>'ON', +9596=>'ON', +9597=>'ON', +9598=>'ON', +9599=>'ON', +9600=>'ON', +9601=>'ON', +9602=>'ON', +9603=>'ON', +9604=>'ON', +9605=>'ON', +9606=>'ON', +9607=>'ON', +9608=>'ON', +9609=>'ON', +9610=>'ON', +9611=>'ON', +9612=>'ON', +9613=>'ON', +9614=>'ON', +9615=>'ON', +9616=>'ON', +9617=>'ON', +9618=>'ON', +9619=>'ON', +9620=>'ON', +9621=>'ON', +9622=>'ON', +9623=>'ON', +9624=>'ON', +9625=>'ON', +9626=>'ON', +9627=>'ON', +9628=>'ON', +9629=>'ON', +9630=>'ON', +9631=>'ON', +9632=>'ON', +9633=>'ON', +9634=>'ON', +9635=>'ON', +9636=>'ON', +9637=>'ON', +9638=>'ON', +9639=>'ON', +9640=>'ON', +9641=>'ON', +9642=>'ON', +9643=>'ON', +9644=>'ON', +9645=>'ON', +9646=>'ON', +9647=>'ON', +9648=>'ON', +9649=>'ON', +9650=>'ON', +9651=>'ON', +9652=>'ON', +9653=>'ON', +9654=>'ON', +9655=>'ON', +9656=>'ON', +9657=>'ON', +9658=>'ON', +9659=>'ON', +9660=>'ON', +9661=>'ON', +9662=>'ON', +9663=>'ON', +9664=>'ON', +9665=>'ON', +9666=>'ON', +9667=>'ON', +9668=>'ON', +9669=>'ON', +9670=>'ON', +9671=>'ON', +9672=>'ON', +9673=>'ON', +9674=>'ON', +9675=>'ON', +9676=>'ON', +9677=>'ON', +9678=>'ON', +9679=>'ON', +9680=>'ON', +9681=>'ON', +9682=>'ON', +9683=>'ON', +9684=>'ON', +9685=>'ON', +9686=>'ON', +9687=>'ON', +9688=>'ON', +9689=>'ON', +9690=>'ON', +9691=>'ON', +9692=>'ON', +9693=>'ON', +9694=>'ON', +9695=>'ON', +9696=>'ON', +9697=>'ON', +9698=>'ON', +9699=>'ON', +9700=>'ON', +9701=>'ON', +9702=>'ON', +9703=>'ON', +9704=>'ON', +9705=>'ON', +9706=>'ON', +9707=>'ON', +9708=>'ON', +9709=>'ON', +9710=>'ON', +9711=>'ON', +9712=>'ON', +9713=>'ON', +9714=>'ON', +9715=>'ON', +9716=>'ON', +9717=>'ON', +9718=>'ON', +9719=>'ON', +9720=>'ON', +9721=>'ON', +9722=>'ON', +9723=>'ON', +9724=>'ON', +9725=>'ON', +9726=>'ON', +9727=>'ON', +9728=>'ON', +9729=>'ON', +9730=>'ON', +9731=>'ON', +9732=>'ON', +9733=>'ON', +9734=>'ON', +9735=>'ON', +9736=>'ON', +9737=>'ON', +9738=>'ON', +9739=>'ON', +9740=>'ON', +9741=>'ON', +9742=>'ON', +9743=>'ON', +9744=>'ON', +9745=>'ON', +9746=>'ON', +9747=>'ON', +9748=>'ON', +9749=>'ON', +9750=>'ON', +9751=>'ON', +9752=>'ON', +9753=>'ON', +9754=>'ON', +9755=>'ON', +9756=>'ON', +9757=>'ON', +9758=>'ON', +9759=>'ON', +9760=>'ON', +9761=>'ON', +9762=>'ON', +9763=>'ON', +9764=>'ON', +9765=>'ON', +9766=>'ON', +9767=>'ON', +9768=>'ON', +9769=>'ON', +9770=>'ON', +9771=>'ON', +9772=>'ON', +9773=>'ON', +9774=>'ON', +9775=>'ON', +9776=>'ON', +9777=>'ON', +9778=>'ON', +9779=>'ON', +9780=>'ON', +9781=>'ON', +9782=>'ON', +9783=>'ON', +9784=>'ON', +9785=>'ON', +9786=>'ON', +9787=>'ON', +9788=>'ON', +9789=>'ON', +9790=>'ON', +9791=>'ON', +9792=>'ON', +9793=>'ON', +9794=>'ON', +9795=>'ON', +9796=>'ON', +9797=>'ON', +9798=>'ON', +9799=>'ON', +9800=>'ON', +9801=>'ON', +9802=>'ON', +9803=>'ON', +9804=>'ON', +9805=>'ON', +9806=>'ON', +9807=>'ON', +9808=>'ON', +9809=>'ON', +9810=>'ON', +9811=>'ON', +9812=>'ON', +9813=>'ON', +9814=>'ON', +9815=>'ON', +9816=>'ON', +9817=>'ON', +9818=>'ON', +9819=>'ON', +9820=>'ON', +9821=>'ON', +9822=>'ON', +9823=>'ON', +9824=>'ON', +9825=>'ON', +9826=>'ON', +9827=>'ON', +9828=>'ON', +9829=>'ON', +9830=>'ON', +9831=>'ON', +9832=>'ON', +9833=>'ON', +9834=>'ON', +9835=>'ON', +9836=>'ON', +9837=>'ON', +9838=>'ON', +9839=>'ON', +9840=>'ON', +9841=>'ON', +9842=>'ON', +9843=>'ON', +9844=>'ON', +9845=>'ON', +9846=>'ON', +9847=>'ON', +9848=>'ON', +9849=>'ON', +9850=>'ON', +9851=>'ON', +9852=>'ON', +9853=>'ON', +9854=>'ON', +9855=>'ON', +9856=>'ON', +9857=>'ON', +9858=>'ON', +9859=>'ON', +9860=>'ON', +9861=>'ON', +9862=>'ON', +9863=>'ON', +9864=>'ON', +9865=>'ON', +9866=>'ON', +9867=>'ON', +9868=>'ON', +9869=>'ON', +9870=>'ON', +9871=>'ON', +9872=>'ON', +9873=>'ON', +9874=>'ON', +9875=>'ON', +9876=>'ON', +9877=>'ON', +9878=>'ON', +9879=>'ON', +9880=>'ON', +9881=>'ON', +9882=>'ON', +9883=>'ON', +9884=>'ON', +9888=>'ON', +9889=>'ON', +9890=>'ON', +9891=>'ON', +9892=>'ON', +9893=>'ON', +9894=>'ON', +9895=>'ON', +9896=>'ON', +9897=>'ON', +9898=>'ON', +9899=>'ON', +9900=>'L', +9901=>'ON', +9902=>'ON', +9903=>'ON', +9904=>'ON', +9905=>'ON', +9906=>'ON', +9985=>'ON', +9986=>'ON', +9987=>'ON', +9988=>'ON', +9990=>'ON', +9991=>'ON', +9992=>'ON', +9993=>'ON', +9996=>'ON', +9997=>'ON', +9998=>'ON', +9999=>'ON', +10000=>'ON', +10001=>'ON', +10002=>'ON', +10003=>'ON', +10004=>'ON', +10005=>'ON', +10006=>'ON', +10007=>'ON', +10008=>'ON', +10009=>'ON', +10010=>'ON', +10011=>'ON', +10012=>'ON', +10013=>'ON', +10014=>'ON', +10015=>'ON', +10016=>'ON', +10017=>'ON', +10018=>'ON', +10019=>'ON', +10020=>'ON', +10021=>'ON', +10022=>'ON', +10023=>'ON', +10025=>'ON', +10026=>'ON', +10027=>'ON', +10028=>'ON', +10029=>'ON', +10030=>'ON', +10031=>'ON', +10032=>'ON', +10033=>'ON', +10034=>'ON', +10035=>'ON', +10036=>'ON', +10037=>'ON', +10038=>'ON', +10039=>'ON', +10040=>'ON', +10041=>'ON', +10042=>'ON', +10043=>'ON', +10044=>'ON', +10045=>'ON', +10046=>'ON', +10047=>'ON', +10048=>'ON', +10049=>'ON', +10050=>'ON', +10051=>'ON', +10052=>'ON', +10053=>'ON', +10054=>'ON', +10055=>'ON', +10056=>'ON', +10057=>'ON', +10058=>'ON', +10059=>'ON', +10061=>'ON', +10063=>'ON', +10064=>'ON', +10065=>'ON', +10066=>'ON', +10070=>'ON', +10072=>'ON', +10073=>'ON', +10074=>'ON', +10075=>'ON', +10076=>'ON', +10077=>'ON', +10078=>'ON', +10081=>'ON', +10082=>'ON', +10083=>'ON', +10084=>'ON', +10085=>'ON', +10086=>'ON', +10087=>'ON', +10088=>'ON', +10089=>'ON', +10090=>'ON', +10091=>'ON', +10092=>'ON', +10093=>'ON', +10094=>'ON', +10095=>'ON', +10096=>'ON', +10097=>'ON', +10098=>'ON', +10099=>'ON', +10100=>'ON', +10101=>'ON', +10102=>'ON', +10103=>'ON', +10104=>'ON', +10105=>'ON', +10106=>'ON', +10107=>'ON', +10108=>'ON', +10109=>'ON', +10110=>'ON', +10111=>'ON', +10112=>'ON', +10113=>'ON', +10114=>'ON', +10115=>'ON', +10116=>'ON', +10117=>'ON', +10118=>'ON', +10119=>'ON', +10120=>'ON', +10121=>'ON', +10122=>'ON', +10123=>'ON', +10124=>'ON', +10125=>'ON', +10126=>'ON', +10127=>'ON', +10128=>'ON', +10129=>'ON', +10130=>'ON', +10131=>'ON', +10132=>'ON', +10136=>'ON', +10137=>'ON', +10138=>'ON', +10139=>'ON', +10140=>'ON', +10141=>'ON', +10142=>'ON', +10143=>'ON', +10144=>'ON', +10145=>'ON', +10146=>'ON', +10147=>'ON', +10148=>'ON', +10149=>'ON', +10150=>'ON', +10151=>'ON', +10152=>'ON', +10153=>'ON', +10154=>'ON', +10155=>'ON', +10156=>'ON', +10157=>'ON', +10158=>'ON', +10159=>'ON', +10161=>'ON', +10162=>'ON', +10163=>'ON', +10164=>'ON', +10165=>'ON', +10166=>'ON', +10167=>'ON', +10168=>'ON', +10169=>'ON', +10170=>'ON', +10171=>'ON', +10172=>'ON', +10173=>'ON', +10174=>'ON', +10176=>'ON', +10177=>'ON', +10178=>'ON', +10179=>'ON', +10180=>'ON', +10181=>'ON', +10182=>'ON', +10183=>'ON', +10184=>'ON', +10185=>'ON', +10186=>'ON', +10192=>'ON', +10193=>'ON', +10194=>'ON', +10195=>'ON', +10196=>'ON', +10197=>'ON', +10198=>'ON', +10199=>'ON', +10200=>'ON', +10201=>'ON', +10202=>'ON', +10203=>'ON', +10204=>'ON', +10205=>'ON', +10206=>'ON', +10207=>'ON', +10208=>'ON', +10209=>'ON', +10210=>'ON', +10211=>'ON', +10212=>'ON', +10213=>'ON', +10214=>'ON', +10215=>'ON', +10216=>'ON', +10217=>'ON', +10218=>'ON', +10219=>'ON', +10224=>'ON', +10225=>'ON', +10226=>'ON', +10227=>'ON', +10228=>'ON', +10229=>'ON', +10230=>'ON', +10231=>'ON', +10232=>'ON', +10233=>'ON', +10234=>'ON', +10235=>'ON', +10236=>'ON', +10237=>'ON', +10238=>'ON', +10239=>'ON', +10240=>'L', +10241=>'L', +10242=>'L', +10243=>'L', +10244=>'L', +10245=>'L', +10246=>'L', +10247=>'L', +10248=>'L', +10249=>'L', +10250=>'L', +10251=>'L', +10252=>'L', +10253=>'L', +10254=>'L', +10255=>'L', +10256=>'L', +10257=>'L', +10258=>'L', +10259=>'L', +10260=>'L', +10261=>'L', +10262=>'L', +10263=>'L', +10264=>'L', +10265=>'L', +10266=>'L', +10267=>'L', +10268=>'L', +10269=>'L', +10270=>'L', +10271=>'L', +10272=>'L', +10273=>'L', +10274=>'L', +10275=>'L', +10276=>'L', +10277=>'L', +10278=>'L', +10279=>'L', +10280=>'L', +10281=>'L', +10282=>'L', +10283=>'L', +10284=>'L', +10285=>'L', +10286=>'L', +10287=>'L', +10288=>'L', +10289=>'L', +10290=>'L', +10291=>'L', +10292=>'L', +10293=>'L', +10294=>'L', +10295=>'L', +10296=>'L', +10297=>'L', +10298=>'L', +10299=>'L', +10300=>'L', +10301=>'L', +10302=>'L', +10303=>'L', +10304=>'L', +10305=>'L', +10306=>'L', +10307=>'L', +10308=>'L', +10309=>'L', +10310=>'L', +10311=>'L', +10312=>'L', +10313=>'L', +10314=>'L', +10315=>'L', +10316=>'L', +10317=>'L', +10318=>'L', +10319=>'L', +10320=>'L', +10321=>'L', +10322=>'L', +10323=>'L', +10324=>'L', +10325=>'L', +10326=>'L', +10327=>'L', +10328=>'L', +10329=>'L', +10330=>'L', +10331=>'L', +10332=>'L', +10333=>'L', +10334=>'L', +10335=>'L', +10336=>'L', +10337=>'L', +10338=>'L', +10339=>'L', +10340=>'L', +10341=>'L', +10342=>'L', +10343=>'L', +10344=>'L', +10345=>'L', +10346=>'L', +10347=>'L', +10348=>'L', +10349=>'L', +10350=>'L', +10351=>'L', +10352=>'L', +10353=>'L', +10354=>'L', +10355=>'L', +10356=>'L', +10357=>'L', +10358=>'L', +10359=>'L', +10360=>'L', +10361=>'L', +10362=>'L', +10363=>'L', +10364=>'L', +10365=>'L', +10366=>'L', +10367=>'L', +10368=>'L', +10369=>'L', +10370=>'L', +10371=>'L', +10372=>'L', +10373=>'L', +10374=>'L', +10375=>'L', +10376=>'L', +10377=>'L', +10378=>'L', +10379=>'L', +10380=>'L', +10381=>'L', +10382=>'L', +10383=>'L', +10384=>'L', +10385=>'L', +10386=>'L', +10387=>'L', +10388=>'L', +10389=>'L', +10390=>'L', +10391=>'L', +10392=>'L', +10393=>'L', +10394=>'L', +10395=>'L', +10396=>'L', +10397=>'L', +10398=>'L', +10399=>'L', +10400=>'L', +10401=>'L', +10402=>'L', +10403=>'L', +10404=>'L', +10405=>'L', +10406=>'L', +10407=>'L', +10408=>'L', +10409=>'L', +10410=>'L', +10411=>'L', +10412=>'L', +10413=>'L', +10414=>'L', +10415=>'L', +10416=>'L', +10417=>'L', +10418=>'L', +10419=>'L', +10420=>'L', +10421=>'L', +10422=>'L', +10423=>'L', +10424=>'L', +10425=>'L', +10426=>'L', +10427=>'L', +10428=>'L', +10429=>'L', +10430=>'L', +10431=>'L', +10432=>'L', +10433=>'L', +10434=>'L', +10435=>'L', +10436=>'L', +10437=>'L', +10438=>'L', +10439=>'L', +10440=>'L', +10441=>'L', +10442=>'L', +10443=>'L', +10444=>'L', +10445=>'L', +10446=>'L', +10447=>'L', +10448=>'L', +10449=>'L', +10450=>'L', +10451=>'L', +10452=>'L', +10453=>'L', +10454=>'L', +10455=>'L', +10456=>'L', +10457=>'L', +10458=>'L', +10459=>'L', +10460=>'L', +10461=>'L', +10462=>'L', +10463=>'L', +10464=>'L', +10465=>'L', +10466=>'L', +10467=>'L', +10468=>'L', +10469=>'L', +10470=>'L', +10471=>'L', +10472=>'L', +10473=>'L', +10474=>'L', +10475=>'L', +10476=>'L', +10477=>'L', +10478=>'L', +10479=>'L', +10480=>'L', +10481=>'L', +10482=>'L', +10483=>'L', +10484=>'L', +10485=>'L', +10486=>'L', +10487=>'L', +10488=>'L', +10489=>'L', +10490=>'L', +10491=>'L', +10492=>'L', +10493=>'L', +10494=>'L', +10495=>'L', +10496=>'ON', +10497=>'ON', +10498=>'ON', +10499=>'ON', +10500=>'ON', +10501=>'ON', +10502=>'ON', +10503=>'ON', +10504=>'ON', +10505=>'ON', +10506=>'ON', +10507=>'ON', +10508=>'ON', +10509=>'ON', +10510=>'ON', +10511=>'ON', +10512=>'ON', +10513=>'ON', +10514=>'ON', +10515=>'ON', +10516=>'ON', +10517=>'ON', +10518=>'ON', +10519=>'ON', +10520=>'ON', +10521=>'ON', +10522=>'ON', +10523=>'ON', +10524=>'ON', +10525=>'ON', +10526=>'ON', +10527=>'ON', +10528=>'ON', +10529=>'ON', +10530=>'ON', +10531=>'ON', +10532=>'ON', +10533=>'ON', +10534=>'ON', +10535=>'ON', +10536=>'ON', +10537=>'ON', +10538=>'ON', +10539=>'ON', +10540=>'ON', +10541=>'ON', +10542=>'ON', +10543=>'ON', +10544=>'ON', +10545=>'ON', +10546=>'ON', +10547=>'ON', +10548=>'ON', +10549=>'ON', +10550=>'ON', +10551=>'ON', +10552=>'ON', +10553=>'ON', +10554=>'ON', +10555=>'ON', +10556=>'ON', +10557=>'ON', +10558=>'ON', +10559=>'ON', +10560=>'ON', +10561=>'ON', +10562=>'ON', +10563=>'ON', +10564=>'ON', +10565=>'ON', +10566=>'ON', +10567=>'ON', +10568=>'ON', +10569=>'ON', +10570=>'ON', +10571=>'ON', +10572=>'ON', +10573=>'ON', +10574=>'ON', +10575=>'ON', +10576=>'ON', +10577=>'ON', +10578=>'ON', +10579=>'ON', +10580=>'ON', +10581=>'ON', +10582=>'ON', +10583=>'ON', +10584=>'ON', +10585=>'ON', +10586=>'ON', +10587=>'ON', +10588=>'ON', +10589=>'ON', +10590=>'ON', +10591=>'ON', +10592=>'ON', +10593=>'ON', +10594=>'ON', +10595=>'ON', +10596=>'ON', +10597=>'ON', +10598=>'ON', +10599=>'ON', +10600=>'ON', +10601=>'ON', +10602=>'ON', +10603=>'ON', +10604=>'ON', +10605=>'ON', +10606=>'ON', +10607=>'ON', +10608=>'ON', +10609=>'ON', +10610=>'ON', +10611=>'ON', +10612=>'ON', +10613=>'ON', +10614=>'ON', +10615=>'ON', +10616=>'ON', +10617=>'ON', +10618=>'ON', +10619=>'ON', +10620=>'ON', +10621=>'ON', +10622=>'ON', +10623=>'ON', +10624=>'ON', +10625=>'ON', +10626=>'ON', +10627=>'ON', +10628=>'ON', +10629=>'ON', +10630=>'ON', +10631=>'ON', +10632=>'ON', +10633=>'ON', +10634=>'ON', +10635=>'ON', +10636=>'ON', +10637=>'ON', +10638=>'ON', +10639=>'ON', +10640=>'ON', +10641=>'ON', +10642=>'ON', +10643=>'ON', +10644=>'ON', +10645=>'ON', +10646=>'ON', +10647=>'ON', +10648=>'ON', +10649=>'ON', +10650=>'ON', +10651=>'ON', +10652=>'ON', +10653=>'ON', +10654=>'ON', +10655=>'ON', +10656=>'ON', +10657=>'ON', +10658=>'ON', +10659=>'ON', +10660=>'ON', +10661=>'ON', +10662=>'ON', +10663=>'ON', +10664=>'ON', +10665=>'ON', +10666=>'ON', +10667=>'ON', +10668=>'ON', +10669=>'ON', +10670=>'ON', +10671=>'ON', +10672=>'ON', +10673=>'ON', +10674=>'ON', +10675=>'ON', +10676=>'ON', +10677=>'ON', +10678=>'ON', +10679=>'ON', +10680=>'ON', +10681=>'ON', +10682=>'ON', +10683=>'ON', +10684=>'ON', +10685=>'ON', +10686=>'ON', +10687=>'ON', +10688=>'ON', +10689=>'ON', +10690=>'ON', +10691=>'ON', +10692=>'ON', +10693=>'ON', +10694=>'ON', +10695=>'ON', +10696=>'ON', +10697=>'ON', +10698=>'ON', +10699=>'ON', +10700=>'ON', +10701=>'ON', +10702=>'ON', +10703=>'ON', +10704=>'ON', +10705=>'ON', +10706=>'ON', +10707=>'ON', +10708=>'ON', +10709=>'ON', +10710=>'ON', +10711=>'ON', +10712=>'ON', +10713=>'ON', +10714=>'ON', +10715=>'ON', +10716=>'ON', +10717=>'ON', +10718=>'ON', +10719=>'ON', +10720=>'ON', +10721=>'ON', +10722=>'ON', +10723=>'ON', +10724=>'ON', +10725=>'ON', +10726=>'ON', +10727=>'ON', +10728=>'ON', +10729=>'ON', +10730=>'ON', +10731=>'ON', +10732=>'ON', +10733=>'ON', +10734=>'ON', +10735=>'ON', +10736=>'ON', +10737=>'ON', +10738=>'ON', +10739=>'ON', +10740=>'ON', +10741=>'ON', +10742=>'ON', +10743=>'ON', +10744=>'ON', +10745=>'ON', +10746=>'ON', +10747=>'ON', +10748=>'ON', +10749=>'ON', +10750=>'ON', +10751=>'ON', +10752=>'ON', +10753=>'ON', +10754=>'ON', +10755=>'ON', +10756=>'ON', +10757=>'ON', +10758=>'ON', +10759=>'ON', +10760=>'ON', +10761=>'ON', +10762=>'ON', +10763=>'ON', +10764=>'ON', +10765=>'ON', +10766=>'ON', +10767=>'ON', +10768=>'ON', +10769=>'ON', +10770=>'ON', +10771=>'ON', +10772=>'ON', +10773=>'ON', +10774=>'ON', +10775=>'ON', +10776=>'ON', +10777=>'ON', +10778=>'ON', +10779=>'ON', +10780=>'ON', +10781=>'ON', +10782=>'ON', +10783=>'ON', +10784=>'ON', +10785=>'ON', +10786=>'ON', +10787=>'ON', +10788=>'ON', +10789=>'ON', +10790=>'ON', +10791=>'ON', +10792=>'ON', +10793=>'ON', +10794=>'ON', +10795=>'ON', +10796=>'ON', +10797=>'ON', +10798=>'ON', +10799=>'ON', +10800=>'ON', +10801=>'ON', +10802=>'ON', +10803=>'ON', +10804=>'ON', +10805=>'ON', +10806=>'ON', +10807=>'ON', +10808=>'ON', +10809=>'ON', +10810=>'ON', +10811=>'ON', +10812=>'ON', +10813=>'ON', +10814=>'ON', +10815=>'ON', +10816=>'ON', +10817=>'ON', +10818=>'ON', +10819=>'ON', +10820=>'ON', +10821=>'ON', +10822=>'ON', +10823=>'ON', +10824=>'ON', +10825=>'ON', +10826=>'ON', +10827=>'ON', +10828=>'ON', +10829=>'ON', +10830=>'ON', +10831=>'ON', +10832=>'ON', +10833=>'ON', +10834=>'ON', +10835=>'ON', +10836=>'ON', +10837=>'ON', +10838=>'ON', +10839=>'ON', +10840=>'ON', +10841=>'ON', +10842=>'ON', +10843=>'ON', +10844=>'ON', +10845=>'ON', +10846=>'ON', +10847=>'ON', +10848=>'ON', +10849=>'ON', +10850=>'ON', +10851=>'ON', +10852=>'ON', +10853=>'ON', +10854=>'ON', +10855=>'ON', +10856=>'ON', +10857=>'ON', +10858=>'ON', +10859=>'ON', +10860=>'ON', +10861=>'ON', +10862=>'ON', +10863=>'ON', +10864=>'ON', +10865=>'ON', +10866=>'ON', +10867=>'ON', +10868=>'ON', +10869=>'ON', +10870=>'ON', +10871=>'ON', +10872=>'ON', +10873=>'ON', +10874=>'ON', +10875=>'ON', +10876=>'ON', +10877=>'ON', +10878=>'ON', +10879=>'ON', +10880=>'ON', +10881=>'ON', +10882=>'ON', +10883=>'ON', +10884=>'ON', +10885=>'ON', +10886=>'ON', +10887=>'ON', +10888=>'ON', +10889=>'ON', +10890=>'ON', +10891=>'ON', +10892=>'ON', +10893=>'ON', +10894=>'ON', +10895=>'ON', +10896=>'ON', +10897=>'ON', +10898=>'ON', +10899=>'ON', +10900=>'ON', +10901=>'ON', +10902=>'ON', +10903=>'ON', +10904=>'ON', +10905=>'ON', +10906=>'ON', +10907=>'ON', +10908=>'ON', +10909=>'ON', +10910=>'ON', +10911=>'ON', +10912=>'ON', +10913=>'ON', +10914=>'ON', +10915=>'ON', +10916=>'ON', +10917=>'ON', +10918=>'ON', +10919=>'ON', +10920=>'ON', +10921=>'ON', +10922=>'ON', +10923=>'ON', +10924=>'ON', +10925=>'ON', +10926=>'ON', +10927=>'ON', +10928=>'ON', +10929=>'ON', +10930=>'ON', +10931=>'ON', +10932=>'ON', +10933=>'ON', +10934=>'ON', +10935=>'ON', +10936=>'ON', +10937=>'ON', +10938=>'ON', +10939=>'ON', +10940=>'ON', +10941=>'ON', +10942=>'ON', +10943=>'ON', +10944=>'ON', +10945=>'ON', +10946=>'ON', +10947=>'ON', +10948=>'ON', +10949=>'ON', +10950=>'ON', +10951=>'ON', +10952=>'ON', +10953=>'ON', +10954=>'ON', +10955=>'ON', +10956=>'ON', +10957=>'ON', +10958=>'ON', +10959=>'ON', +10960=>'ON', +10961=>'ON', +10962=>'ON', +10963=>'ON', +10964=>'ON', +10965=>'ON', +10966=>'ON', +10967=>'ON', +10968=>'ON', +10969=>'ON', +10970=>'ON', +10971=>'ON', +10972=>'ON', +10973=>'ON', +10974=>'ON', +10975=>'ON', +10976=>'ON', +10977=>'ON', +10978=>'ON', +10979=>'ON', +10980=>'ON', +10981=>'ON', +10982=>'ON', +10983=>'ON', +10984=>'ON', +10985=>'ON', +10986=>'ON', +10987=>'ON', +10988=>'ON', +10989=>'ON', +10990=>'ON', +10991=>'ON', +10992=>'ON', +10993=>'ON', +10994=>'ON', +10995=>'ON', +10996=>'ON', +10997=>'ON', +10998=>'ON', +10999=>'ON', +11000=>'ON', +11001=>'ON', +11002=>'ON', +11003=>'ON', +11004=>'ON', +11005=>'ON', +11006=>'ON', +11007=>'ON', +11008=>'ON', +11009=>'ON', +11010=>'ON', +11011=>'ON', +11012=>'ON', +11013=>'ON', +11014=>'ON', +11015=>'ON', +11016=>'ON', +11017=>'ON', +11018=>'ON', +11019=>'ON', +11020=>'ON', +11021=>'ON', +11022=>'ON', +11023=>'ON', +11024=>'ON', +11025=>'ON', +11026=>'ON', +11027=>'ON', +11028=>'ON', +11029=>'ON', +11030=>'ON', +11031=>'ON', +11032=>'ON', +11033=>'ON', +11034=>'ON', +11040=>'ON', +11041=>'ON', +11042=>'ON', +11043=>'ON', +11264=>'L', +11265=>'L', +11266=>'L', +11267=>'L', +11268=>'L', +11269=>'L', +11270=>'L', +11271=>'L', +11272=>'L', +11273=>'L', +11274=>'L', +11275=>'L', +11276=>'L', +11277=>'L', +11278=>'L', +11279=>'L', +11280=>'L', +11281=>'L', +11282=>'L', +11283=>'L', +11284=>'L', +11285=>'L', +11286=>'L', +11287=>'L', +11288=>'L', +11289=>'L', +11290=>'L', +11291=>'L', +11292=>'L', +11293=>'L', +11294=>'L', +11295=>'L', +11296=>'L', +11297=>'L', +11298=>'L', +11299=>'L', +11300=>'L', +11301=>'L', +11302=>'L', +11303=>'L', +11304=>'L', +11305=>'L', +11306=>'L', +11307=>'L', +11308=>'L', +11309=>'L', +11310=>'L', +11312=>'L', +11313=>'L', +11314=>'L', +11315=>'L', +11316=>'L', +11317=>'L', +11318=>'L', +11319=>'L', +11320=>'L', +11321=>'L', +11322=>'L', +11323=>'L', +11324=>'L', +11325=>'L', +11326=>'L', +11327=>'L', +11328=>'L', +11329=>'L', +11330=>'L', +11331=>'L', +11332=>'L', +11333=>'L', +11334=>'L', +11335=>'L', +11336=>'L', +11337=>'L', +11338=>'L', +11339=>'L', +11340=>'L', +11341=>'L', +11342=>'L', +11343=>'L', +11344=>'L', +11345=>'L', +11346=>'L', +11347=>'L', +11348=>'L', +11349=>'L', +11350=>'L', +11351=>'L', +11352=>'L', +11353=>'L', +11354=>'L', +11355=>'L', +11356=>'L', +11357=>'L', +11358=>'L', +11360=>'L', +11361=>'L', +11362=>'L', +11363=>'L', +11364=>'L', +11365=>'L', +11366=>'L', +11367=>'L', +11368=>'L', +11369=>'L', +11370=>'L', +11371=>'L', +11372=>'L', +11380=>'L', +11381=>'L', +11382=>'L', +11383=>'L', +11392=>'L', +11393=>'L', +11394=>'L', +11395=>'L', +11396=>'L', +11397=>'L', +11398=>'L', +11399=>'L', +11400=>'L', +11401=>'L', +11402=>'L', +11403=>'L', +11404=>'L', +11405=>'L', +11406=>'L', +11407=>'L', +11408=>'L', +11409=>'L', +11410=>'L', +11411=>'L', +11412=>'L', +11413=>'L', +11414=>'L', +11415=>'L', +11416=>'L', +11417=>'L', +11418=>'L', +11419=>'L', +11420=>'L', +11421=>'L', +11422=>'L', +11423=>'L', +11424=>'L', +11425=>'L', +11426=>'L', +11427=>'L', +11428=>'L', +11429=>'L', +11430=>'L', +11431=>'L', +11432=>'L', +11433=>'L', +11434=>'L', +11435=>'L', +11436=>'L', +11437=>'L', +11438=>'L', +11439=>'L', +11440=>'L', +11441=>'L', +11442=>'L', +11443=>'L', +11444=>'L', +11445=>'L', +11446=>'L', +11447=>'L', +11448=>'L', +11449=>'L', +11450=>'L', +11451=>'L', +11452=>'L', +11453=>'L', +11454=>'L', +11455=>'L', +11456=>'L', +11457=>'L', +11458=>'L', +11459=>'L', +11460=>'L', +11461=>'L', +11462=>'L', +11463=>'L', +11464=>'L', +11465=>'L', +11466=>'L', +11467=>'L', +11468=>'L', +11469=>'L', +11470=>'L', +11471=>'L', +11472=>'L', +11473=>'L', +11474=>'L', +11475=>'L', +11476=>'L', +11477=>'L', +11478=>'L', +11479=>'L', +11480=>'L', +11481=>'L', +11482=>'L', +11483=>'L', +11484=>'L', +11485=>'L', +11486=>'L', +11487=>'L', +11488=>'L', +11489=>'L', +11490=>'L', +11491=>'L', +11492=>'L', +11493=>'ON', +11494=>'ON', +11495=>'ON', +11496=>'ON', +11497=>'ON', +11498=>'ON', +11513=>'ON', +11514=>'ON', +11515=>'ON', +11516=>'ON', +11517=>'ON', +11518=>'ON', +11519=>'ON', +11520=>'L', +11521=>'L', +11522=>'L', +11523=>'L', +11524=>'L', +11525=>'L', +11526=>'L', +11527=>'L', +11528=>'L', +11529=>'L', +11530=>'L', +11531=>'L', +11532=>'L', +11533=>'L', +11534=>'L', +11535=>'L', +11536=>'L', +11537=>'L', +11538=>'L', +11539=>'L', +11540=>'L', +11541=>'L', +11542=>'L', +11543=>'L', +11544=>'L', +11545=>'L', +11546=>'L', +11547=>'L', +11548=>'L', +11549=>'L', +11550=>'L', +11551=>'L', +11552=>'L', +11553=>'L', +11554=>'L', +11555=>'L', +11556=>'L', +11557=>'L', +11568=>'L', +11569=>'L', +11570=>'L', +11571=>'L', +11572=>'L', +11573=>'L', +11574=>'L', +11575=>'L', +11576=>'L', +11577=>'L', +11578=>'L', +11579=>'L', +11580=>'L', +11581=>'L', +11582=>'L', +11583=>'L', +11584=>'L', +11585=>'L', +11586=>'L', +11587=>'L', +11588=>'L', +11589=>'L', +11590=>'L', +11591=>'L', +11592=>'L', +11593=>'L', +11594=>'L', +11595=>'L', +11596=>'L', +11597=>'L', +11598=>'L', +11599=>'L', +11600=>'L', +11601=>'L', +11602=>'L', +11603=>'L', +11604=>'L', +11605=>'L', +11606=>'L', +11607=>'L', +11608=>'L', +11609=>'L', +11610=>'L', +11611=>'L', +11612=>'L', +11613=>'L', +11614=>'L', +11615=>'L', +11616=>'L', +11617=>'L', +11618=>'L', +11619=>'L', +11620=>'L', +11621=>'L', +11631=>'L', +11648=>'L', +11649=>'L', +11650=>'L', +11651=>'L', +11652=>'L', +11653=>'L', +11654=>'L', +11655=>'L', +11656=>'L', +11657=>'L', +11658=>'L', +11659=>'L', +11660=>'L', +11661=>'L', +11662=>'L', +11663=>'L', +11664=>'L', +11665=>'L', +11666=>'L', +11667=>'L', +11668=>'L', +11669=>'L', +11670=>'L', +11680=>'L', +11681=>'L', +11682=>'L', +11683=>'L', +11684=>'L', +11685=>'L', +11686=>'L', +11688=>'L', +11689=>'L', +11690=>'L', +11691=>'L', +11692=>'L', +11693=>'L', +11694=>'L', +11696=>'L', +11697=>'L', +11698=>'L', +11699=>'L', +11700=>'L', +11701=>'L', +11702=>'L', +11704=>'L', +11705=>'L', +11706=>'L', +11707=>'L', +11708=>'L', +11709=>'L', +11710=>'L', +11712=>'L', +11713=>'L', +11714=>'L', +11715=>'L', +11716=>'L', +11717=>'L', +11718=>'L', +11720=>'L', +11721=>'L', +11722=>'L', +11723=>'L', +11724=>'L', +11725=>'L', +11726=>'L', +11728=>'L', +11729=>'L', +11730=>'L', +11731=>'L', +11732=>'L', +11733=>'L', +11734=>'L', +11736=>'L', +11737=>'L', +11738=>'L', +11739=>'L', +11740=>'L', +11741=>'L', +11742=>'L', +11776=>'ON', +11777=>'ON', +11778=>'ON', +11779=>'ON', +11780=>'ON', +11781=>'ON', +11782=>'ON', +11783=>'ON', +11784=>'ON', +11785=>'ON', +11786=>'ON', +11787=>'ON', +11788=>'ON', +11789=>'ON', +11790=>'ON', +11791=>'ON', +11792=>'ON', +11793=>'ON', +11794=>'ON', +11795=>'ON', +11796=>'ON', +11797=>'ON', +11798=>'ON', +11799=>'ON', +11804=>'ON', +11805=>'ON', +11904=>'ON', +11905=>'ON', +11906=>'ON', +11907=>'ON', +11908=>'ON', +11909=>'ON', +11910=>'ON', +11911=>'ON', +11912=>'ON', +11913=>'ON', +11914=>'ON', +11915=>'ON', +11916=>'ON', +11917=>'ON', +11918=>'ON', +11919=>'ON', +11920=>'ON', +11921=>'ON', +11922=>'ON', +11923=>'ON', +11924=>'ON', +11925=>'ON', +11926=>'ON', +11927=>'ON', +11928=>'ON', +11929=>'ON', +11931=>'ON', +11932=>'ON', +11933=>'ON', +11934=>'ON', +11935=>'ON', +11936=>'ON', +11937=>'ON', +11938=>'ON', +11939=>'ON', +11940=>'ON', +11941=>'ON', +11942=>'ON', +11943=>'ON', +11944=>'ON', +11945=>'ON', +11946=>'ON', +11947=>'ON', +11948=>'ON', +11949=>'ON', +11950=>'ON', +11951=>'ON', +11952=>'ON', +11953=>'ON', +11954=>'ON', +11955=>'ON', +11956=>'ON', +11957=>'ON', +11958=>'ON', +11959=>'ON', +11960=>'ON', +11961=>'ON', +11962=>'ON', +11963=>'ON', +11964=>'ON', +11965=>'ON', +11966=>'ON', +11967=>'ON', +11968=>'ON', +11969=>'ON', +11970=>'ON', +11971=>'ON', +11972=>'ON', +11973=>'ON', +11974=>'ON', +11975=>'ON', +11976=>'ON', +11977=>'ON', +11978=>'ON', +11979=>'ON', +11980=>'ON', +11981=>'ON', +11982=>'ON', +11983=>'ON', +11984=>'ON', +11985=>'ON', +11986=>'ON', +11987=>'ON', +11988=>'ON', +11989=>'ON', +11990=>'ON', +11991=>'ON', +11992=>'ON', +11993=>'ON', +11994=>'ON', +11995=>'ON', +11996=>'ON', +11997=>'ON', +11998=>'ON', +11999=>'ON', +12000=>'ON', +12001=>'ON', +12002=>'ON', +12003=>'ON', +12004=>'ON', +12005=>'ON', +12006=>'ON', +12007=>'ON', +12008=>'ON', +12009=>'ON', +12010=>'ON', +12011=>'ON', +12012=>'ON', +12013=>'ON', +12014=>'ON', +12015=>'ON', +12016=>'ON', +12017=>'ON', +12018=>'ON', +12019=>'ON', +12032=>'ON', +12033=>'ON', +12034=>'ON', +12035=>'ON', +12036=>'ON', +12037=>'ON', +12038=>'ON', +12039=>'ON', +12040=>'ON', +12041=>'ON', +12042=>'ON', +12043=>'ON', +12044=>'ON', +12045=>'ON', +12046=>'ON', +12047=>'ON', +12048=>'ON', +12049=>'ON', +12050=>'ON', +12051=>'ON', +12052=>'ON', +12053=>'ON', +12054=>'ON', +12055=>'ON', +12056=>'ON', +12057=>'ON', +12058=>'ON', +12059=>'ON', +12060=>'ON', +12061=>'ON', +12062=>'ON', +12063=>'ON', +12064=>'ON', +12065=>'ON', +12066=>'ON', +12067=>'ON', +12068=>'ON', +12069=>'ON', +12070=>'ON', +12071=>'ON', +12072=>'ON', +12073=>'ON', +12074=>'ON', +12075=>'ON', +12076=>'ON', +12077=>'ON', +12078=>'ON', +12079=>'ON', +12080=>'ON', +12081=>'ON', +12082=>'ON', +12083=>'ON', +12084=>'ON', +12085=>'ON', +12086=>'ON', +12087=>'ON', +12088=>'ON', +12089=>'ON', +12090=>'ON', +12091=>'ON', +12092=>'ON', +12093=>'ON', +12094=>'ON', +12095=>'ON', +12096=>'ON', +12097=>'ON', +12098=>'ON', +12099=>'ON', +12100=>'ON', +12101=>'ON', +12102=>'ON', +12103=>'ON', +12104=>'ON', +12105=>'ON', +12106=>'ON', +12107=>'ON', +12108=>'ON', +12109=>'ON', +12110=>'ON', +12111=>'ON', +12112=>'ON', +12113=>'ON', +12114=>'ON', +12115=>'ON', +12116=>'ON', +12117=>'ON', +12118=>'ON', +12119=>'ON', +12120=>'ON', +12121=>'ON', +12122=>'ON', +12123=>'ON', +12124=>'ON', +12125=>'ON', +12126=>'ON', +12127=>'ON', +12128=>'ON', +12129=>'ON', +12130=>'ON', +12131=>'ON', +12132=>'ON', +12133=>'ON', +12134=>'ON', +12135=>'ON', +12136=>'ON', +12137=>'ON', +12138=>'ON', +12139=>'ON', +12140=>'ON', +12141=>'ON', +12142=>'ON', +12143=>'ON', +12144=>'ON', +12145=>'ON', +12146=>'ON', +12147=>'ON', +12148=>'ON', +12149=>'ON', +12150=>'ON', +12151=>'ON', +12152=>'ON', +12153=>'ON', +12154=>'ON', +12155=>'ON', +12156=>'ON', +12157=>'ON', +12158=>'ON', +12159=>'ON', +12160=>'ON', +12161=>'ON', +12162=>'ON', +12163=>'ON', +12164=>'ON', +12165=>'ON', +12166=>'ON', +12167=>'ON', +12168=>'ON', +12169=>'ON', +12170=>'ON', +12171=>'ON', +12172=>'ON', +12173=>'ON', +12174=>'ON', +12175=>'ON', +12176=>'ON', +12177=>'ON', +12178=>'ON', +12179=>'ON', +12180=>'ON', +12181=>'ON', +12182=>'ON', +12183=>'ON', +12184=>'ON', +12185=>'ON', +12186=>'ON', +12187=>'ON', +12188=>'ON', +12189=>'ON', +12190=>'ON', +12191=>'ON', +12192=>'ON', +12193=>'ON', +12194=>'ON', +12195=>'ON', +12196=>'ON', +12197=>'ON', +12198=>'ON', +12199=>'ON', +12200=>'ON', +12201=>'ON', +12202=>'ON', +12203=>'ON', +12204=>'ON', +12205=>'ON', +12206=>'ON', +12207=>'ON', +12208=>'ON', +12209=>'ON', +12210=>'ON', +12211=>'ON', +12212=>'ON', +12213=>'ON', +12214=>'ON', +12215=>'ON', +12216=>'ON', +12217=>'ON', +12218=>'ON', +12219=>'ON', +12220=>'ON', +12221=>'ON', +12222=>'ON', +12223=>'ON', +12224=>'ON', +12225=>'ON', +12226=>'ON', +12227=>'ON', +12228=>'ON', +12229=>'ON', +12230=>'ON', +12231=>'ON', +12232=>'ON', +12233=>'ON', +12234=>'ON', +12235=>'ON', +12236=>'ON', +12237=>'ON', +12238=>'ON', +12239=>'ON', +12240=>'ON', +12241=>'ON', +12242=>'ON', +12243=>'ON', +12244=>'ON', +12245=>'ON', +12272=>'ON', +12273=>'ON', +12274=>'ON', +12275=>'ON', +12276=>'ON', +12277=>'ON', +12278=>'ON', +12279=>'ON', +12280=>'ON', +12281=>'ON', +12282=>'ON', +12283=>'ON', +12288=>'WS', +12289=>'ON', +12290=>'ON', +12291=>'ON', +12292=>'ON', +12293=>'L', +12294=>'L', +12295=>'L', +12296=>'ON', +12297=>'ON', +12298=>'ON', +12299=>'ON', +12300=>'ON', +12301=>'ON', +12302=>'ON', +12303=>'ON', +12304=>'ON', +12305=>'ON', +12306=>'ON', +12307=>'ON', +12308=>'ON', +12309=>'ON', +12310=>'ON', +12311=>'ON', +12312=>'ON', +12313=>'ON', +12314=>'ON', +12315=>'ON', +12316=>'ON', +12317=>'ON', +12318=>'ON', +12319=>'ON', +12320=>'ON', +12321=>'L', +12322=>'L', +12323=>'L', +12324=>'L', +12325=>'L', +12326=>'L', +12327=>'L', +12328=>'L', +12329=>'L', +12330=>'NSM', +12331=>'NSM', +12332=>'NSM', +12333=>'NSM', +12334=>'NSM', +12335=>'NSM', +12336=>'ON', +12337=>'L', +12338=>'L', +12339=>'L', +12340=>'L', +12341=>'L', +12342=>'ON', +12343=>'ON', +12344=>'L', +12345=>'L', +12346=>'L', +12347=>'L', +12348=>'L', +12349=>'ON', +12350=>'ON', +12351=>'ON', +12353=>'L', +12354=>'L', +12355=>'L', +12356=>'L', +12357=>'L', +12358=>'L', +12359=>'L', +12360=>'L', +12361=>'L', +12362=>'L', +12363=>'L', +12364=>'L', +12365=>'L', +12366=>'L', +12367=>'L', +12368=>'L', +12369=>'L', +12370=>'L', +12371=>'L', +12372=>'L', +12373=>'L', +12374=>'L', +12375=>'L', +12376=>'L', +12377=>'L', +12378=>'L', +12379=>'L', +12380=>'L', +12381=>'L', +12382=>'L', +12383=>'L', +12384=>'L', +12385=>'L', +12386=>'L', +12387=>'L', +12388=>'L', +12389=>'L', +12390=>'L', +12391=>'L', +12392=>'L', +12393=>'L', +12394=>'L', +12395=>'L', +12396=>'L', +12397=>'L', +12398=>'L', +12399=>'L', +12400=>'L', +12401=>'L', +12402=>'L', +12403=>'L', +12404=>'L', +12405=>'L', +12406=>'L', +12407=>'L', +12408=>'L', +12409=>'L', +12410=>'L', +12411=>'L', +12412=>'L', +12413=>'L', +12414=>'L', +12415=>'L', +12416=>'L', +12417=>'L', +12418=>'L', +12419=>'L', +12420=>'L', +12421=>'L', +12422=>'L', +12423=>'L', +12424=>'L', +12425=>'L', +12426=>'L', +12427=>'L', +12428=>'L', +12429=>'L', +12430=>'L', +12431=>'L', +12432=>'L', +12433=>'L', +12434=>'L', +12435=>'L', +12436=>'L', +12437=>'L', +12438=>'L', +12441=>'NSM', +12442=>'NSM', +12443=>'ON', +12444=>'ON', +12445=>'L', +12446=>'L', +12447=>'L', +12448=>'ON', +12449=>'L', +12450=>'L', +12451=>'L', +12452=>'L', +12453=>'L', +12454=>'L', +12455=>'L', +12456=>'L', +12457=>'L', +12458=>'L', +12459=>'L', +12460=>'L', +12461=>'L', +12462=>'L', +12463=>'L', +12464=>'L', +12465=>'L', +12466=>'L', +12467=>'L', +12468=>'L', +12469=>'L', +12470=>'L', +12471=>'L', +12472=>'L', +12473=>'L', +12474=>'L', +12475=>'L', +12476=>'L', +12477=>'L', +12478=>'L', +12479=>'L', +12480=>'L', +12481=>'L', +12482=>'L', +12483=>'L', +12484=>'L', +12485=>'L', +12486=>'L', +12487=>'L', +12488=>'L', +12489=>'L', +12490=>'L', +12491=>'L', +12492=>'L', +12493=>'L', +12494=>'L', +12495=>'L', +12496=>'L', +12497=>'L', +12498=>'L', +12499=>'L', +12500=>'L', +12501=>'L', +12502=>'L', +12503=>'L', +12504=>'L', +12505=>'L', +12506=>'L', +12507=>'L', +12508=>'L', +12509=>'L', +12510=>'L', +12511=>'L', +12512=>'L', +12513=>'L', +12514=>'L', +12515=>'L', +12516=>'L', +12517=>'L', +12518=>'L', +12519=>'L', +12520=>'L', +12521=>'L', +12522=>'L', +12523=>'L', +12524=>'L', +12525=>'L', +12526=>'L', +12527=>'L', +12528=>'L', +12529=>'L', +12530=>'L', +12531=>'L', +12532=>'L', +12533=>'L', +12534=>'L', +12535=>'L', +12536=>'L', +12537=>'L', +12538=>'L', +12539=>'ON', +12540=>'L', +12541=>'L', +12542=>'L', +12543=>'L', +12549=>'L', +12550=>'L', +12551=>'L', +12552=>'L', +12553=>'L', +12554=>'L', +12555=>'L', +12556=>'L', +12557=>'L', +12558=>'L', +12559=>'L', +12560=>'L', +12561=>'L', +12562=>'L', +12563=>'L', +12564=>'L', +12565=>'L', +12566=>'L', +12567=>'L', +12568=>'L', +12569=>'L', +12570=>'L', +12571=>'L', +12572=>'L', +12573=>'L', +12574=>'L', +12575=>'L', +12576=>'L', +12577=>'L', +12578=>'L', +12579=>'L', +12580=>'L', +12581=>'L', +12582=>'L', +12583=>'L', +12584=>'L', +12585=>'L', +12586=>'L', +12587=>'L', +12588=>'L', +12593=>'L', +12594=>'L', +12595=>'L', +12596=>'L', +12597=>'L', +12598=>'L', +12599=>'L', +12600=>'L', +12601=>'L', +12602=>'L', +12603=>'L', +12604=>'L', +12605=>'L', +12606=>'L', +12607=>'L', +12608=>'L', +12609=>'L', +12610=>'L', +12611=>'L', +12612=>'L', +12613=>'L', +12614=>'L', +12615=>'L', +12616=>'L', +12617=>'L', +12618=>'L', +12619=>'L', +12620=>'L', +12621=>'L', +12622=>'L', +12623=>'L', +12624=>'L', +12625=>'L', +12626=>'L', +12627=>'L', +12628=>'L', +12629=>'L', +12630=>'L', +12631=>'L', +12632=>'L', +12633=>'L', +12634=>'L', +12635=>'L', +12636=>'L', +12637=>'L', +12638=>'L', +12639=>'L', +12640=>'L', +12641=>'L', +12642=>'L', +12643=>'L', +12644=>'L', +12645=>'L', +12646=>'L', +12647=>'L', +12648=>'L', +12649=>'L', +12650=>'L', +12651=>'L', +12652=>'L', +12653=>'L', +12654=>'L', +12655=>'L', +12656=>'L', +12657=>'L', +12658=>'L', +12659=>'L', +12660=>'L', +12661=>'L', +12662=>'L', +12663=>'L', +12664=>'L', +12665=>'L', +12666=>'L', +12667=>'L', +12668=>'L', +12669=>'L', +12670=>'L', +12671=>'L', +12672=>'L', +12673=>'L', +12674=>'L', +12675=>'L', +12676=>'L', +12677=>'L', +12678=>'L', +12679=>'L', +12680=>'L', +12681=>'L', +12682=>'L', +12683=>'L', +12684=>'L', +12685=>'L', +12686=>'L', +12688=>'L', +12689=>'L', +12690=>'L', +12691=>'L', +12692=>'L', +12693=>'L', +12694=>'L', +12695=>'L', +12696=>'L', +12697=>'L', +12698=>'L', +12699=>'L', +12700=>'L', +12701=>'L', +12702=>'L', +12703=>'L', +12704=>'L', +12705=>'L', +12706=>'L', +12707=>'L', +12708=>'L', +12709=>'L', +12710=>'L', +12711=>'L', +12712=>'L', +12713=>'L', +12714=>'L', +12715=>'L', +12716=>'L', +12717=>'L', +12718=>'L', +12719=>'L', +12720=>'L', +12721=>'L', +12722=>'L', +12723=>'L', +12724=>'L', +12725=>'L', +12726=>'L', +12727=>'L', +12736=>'ON', +12737=>'ON', +12738=>'ON', +12739=>'ON', +12740=>'ON', +12741=>'ON', +12742=>'ON', +12743=>'ON', +12744=>'ON', +12745=>'ON', +12746=>'ON', +12747=>'ON', +12748=>'ON', +12749=>'ON', +12750=>'ON', +12751=>'ON', +12784=>'L', +12785=>'L', +12786=>'L', +12787=>'L', +12788=>'L', +12789=>'L', +12790=>'L', +12791=>'L', +12792=>'L', +12793=>'L', +12794=>'L', +12795=>'L', +12796=>'L', +12797=>'L', +12798=>'L', +12799=>'L', +12800=>'L', +12801=>'L', +12802=>'L', +12803=>'L', +12804=>'L', +12805=>'L', +12806=>'L', +12807=>'L', +12808=>'L', +12809=>'L', +12810=>'L', +12811=>'L', +12812=>'L', +12813=>'L', +12814=>'L', +12815=>'L', +12816=>'L', +12817=>'L', +12818=>'L', +12819=>'L', +12820=>'L', +12821=>'L', +12822=>'L', +12823=>'L', +12824=>'L', +12825=>'L', +12826=>'L', +12827=>'L', +12828=>'L', +12829=>'ON', +12830=>'ON', +12832=>'L', +12833=>'L', +12834=>'L', +12835=>'L', +12836=>'L', +12837=>'L', +12838=>'L', +12839=>'L', +12840=>'L', +12841=>'L', +12842=>'L', +12843=>'L', +12844=>'L', +12845=>'L', +12846=>'L', +12847=>'L', +12848=>'L', +12849=>'L', +12850=>'L', +12851=>'L', +12852=>'L', +12853=>'L', +12854=>'L', +12855=>'L', +12856=>'L', +12857=>'L', +12858=>'L', +12859=>'L', +12860=>'L', +12861=>'L', +12862=>'L', +12863=>'L', +12864=>'L', +12865=>'L', +12866=>'L', +12867=>'L', +12880=>'ON', +12881=>'ON', +12882=>'ON', +12883=>'ON', +12884=>'ON', +12885=>'ON', +12886=>'ON', +12887=>'ON', +12888=>'ON', +12889=>'ON', +12890=>'ON', +12891=>'ON', +12892=>'ON', +12893=>'ON', +12894=>'ON', +12895=>'ON', +12896=>'L', +12897=>'L', +12898=>'L', +12899=>'L', +12900=>'L', +12901=>'L', +12902=>'L', +12903=>'L', +12904=>'L', +12905=>'L', +12906=>'L', +12907=>'L', +12908=>'L', +12909=>'L', +12910=>'L', +12911=>'L', +12912=>'L', +12913=>'L', +12914=>'L', +12915=>'L', +12916=>'L', +12917=>'L', +12918=>'L', +12919=>'L', +12920=>'L', +12921=>'L', +12922=>'L', +12923=>'L', +12924=>'ON', +12925=>'ON', +12926=>'ON', +12927=>'L', +12928=>'L', +12929=>'L', +12930=>'L', +12931=>'L', +12932=>'L', +12933=>'L', +12934=>'L', +12935=>'L', +12936=>'L', +12937=>'L', +12938=>'L', +12939=>'L', +12940=>'L', +12941=>'L', +12942=>'L', +12943=>'L', +12944=>'L', +12945=>'L', +12946=>'L', +12947=>'L', +12948=>'L', +12949=>'L', +12950=>'L', +12951=>'L', +12952=>'L', +12953=>'L', +12954=>'L', +12955=>'L', +12956=>'L', +12957=>'L', +12958=>'L', +12959=>'L', +12960=>'L', +12961=>'L', +12962=>'L', +12963=>'L', +12964=>'L', +12965=>'L', +12966=>'L', +12967=>'L', +12968=>'L', +12969=>'L', +12970=>'L', +12971=>'L', +12972=>'L', +12973=>'L', +12974=>'L', +12975=>'L', +12976=>'L', +12977=>'ON', +12978=>'ON', +12979=>'ON', +12980=>'ON', +12981=>'ON', +12982=>'ON', +12983=>'ON', +12984=>'ON', +12985=>'ON', +12986=>'ON', +12987=>'ON', +12988=>'ON', +12989=>'ON', +12990=>'ON', +12991=>'ON', +12992=>'L', +12993=>'L', +12994=>'L', +12995=>'L', +12996=>'L', +12997=>'L', +12998=>'L', +12999=>'L', +13000=>'L', +13001=>'L', +13002=>'L', +13003=>'L', +13004=>'ON', +13005=>'ON', +13006=>'ON', +13007=>'ON', +13008=>'L', +13009=>'L', +13010=>'L', +13011=>'L', +13012=>'L', +13013=>'L', +13014=>'L', +13015=>'L', +13016=>'L', +13017=>'L', +13018=>'L', +13019=>'L', +13020=>'L', +13021=>'L', +13022=>'L', +13023=>'L', +13024=>'L', +13025=>'L', +13026=>'L', +13027=>'L', +13028=>'L', +13029=>'L', +13030=>'L', +13031=>'L', +13032=>'L', +13033=>'L', +13034=>'L', +13035=>'L', +13036=>'L', +13037=>'L', +13038=>'L', +13039=>'L', +13040=>'L', +13041=>'L', +13042=>'L', +13043=>'L', +13044=>'L', +13045=>'L', +13046=>'L', +13047=>'L', +13048=>'L', +13049=>'L', +13050=>'L', +13051=>'L', +13052=>'L', +13053=>'L', +13054=>'L', +13056=>'L', +13057=>'L', +13058=>'L', +13059=>'L', +13060=>'L', +13061=>'L', +13062=>'L', +13063=>'L', +13064=>'L', +13065=>'L', +13066=>'L', +13067=>'L', +13068=>'L', +13069=>'L', +13070=>'L', +13071=>'L', +13072=>'L', +13073=>'L', +13074=>'L', +13075=>'L', +13076=>'L', +13077=>'L', +13078=>'L', +13079=>'L', +13080=>'L', +13081=>'L', +13082=>'L', +13083=>'L', +13084=>'L', +13085=>'L', +13086=>'L', +13087=>'L', +13088=>'L', +13089=>'L', +13090=>'L', +13091=>'L', +13092=>'L', +13093=>'L', +13094=>'L', +13095=>'L', +13096=>'L', +13097=>'L', +13098=>'L', +13099=>'L', +13100=>'L', +13101=>'L', +13102=>'L', +13103=>'L', +13104=>'L', +13105=>'L', +13106=>'L', +13107=>'L', +13108=>'L', +13109=>'L', +13110=>'L', +13111=>'L', +13112=>'L', +13113=>'L', +13114=>'L', +13115=>'L', +13116=>'L', +13117=>'L', +13118=>'L', +13119=>'L', +13120=>'L', +13121=>'L', +13122=>'L', +13123=>'L', +13124=>'L', +13125=>'L', +13126=>'L', +13127=>'L', +13128=>'L', +13129=>'L', +13130=>'L', +13131=>'L', +13132=>'L', +13133=>'L', +13134=>'L', +13135=>'L', +13136=>'L', +13137=>'L', +13138=>'L', +13139=>'L', +13140=>'L', +13141=>'L', +13142=>'L', +13143=>'L', +13144=>'L', +13145=>'L', +13146=>'L', +13147=>'L', +13148=>'L', +13149=>'L', +13150=>'L', +13151=>'L', +13152=>'L', +13153=>'L', +13154=>'L', +13155=>'L', +13156=>'L', +13157=>'L', +13158=>'L', +13159=>'L', +13160=>'L', +13161=>'L', +13162=>'L', +13163=>'L', +13164=>'L', +13165=>'L', +13166=>'L', +13167=>'L', +13168=>'L', +13169=>'L', +13170=>'L', +13171=>'L', +13172=>'L', +13173=>'L', +13174=>'L', +13175=>'ON', +13176=>'ON', +13177=>'ON', +13178=>'ON', +13179=>'L', +13180=>'L', +13181=>'L', +13182=>'L', +13183=>'L', +13184=>'L', +13185=>'L', +13186=>'L', +13187=>'L', +13188=>'L', +13189=>'L', +13190=>'L', +13191=>'L', +13192=>'L', +13193=>'L', +13194=>'L', +13195=>'L', +13196=>'L', +13197=>'L', +13198=>'L', +13199=>'L', +13200=>'L', +13201=>'L', +13202=>'L', +13203=>'L', +13204=>'L', +13205=>'L', +13206=>'L', +13207=>'L', +13208=>'L', +13209=>'L', +13210=>'L', +13211=>'L', +13212=>'L', +13213=>'L', +13214=>'L', +13215=>'L', +13216=>'L', +13217=>'L', +13218=>'L', +13219=>'L', +13220=>'L', +13221=>'L', +13222=>'L', +13223=>'L', +13224=>'L', +13225=>'L', +13226=>'L', +13227=>'L', +13228=>'L', +13229=>'L', +13230=>'L', +13231=>'L', +13232=>'L', +13233=>'L', +13234=>'L', +13235=>'L', +13236=>'L', +13237=>'L', +13238=>'L', +13239=>'L', +13240=>'L', +13241=>'L', +13242=>'L', +13243=>'L', +13244=>'L', +13245=>'L', +13246=>'L', +13247=>'L', +13248=>'L', +13249=>'L', +13250=>'L', +13251=>'L', +13252=>'L', +13253=>'L', +13254=>'L', +13255=>'L', +13256=>'L', +13257=>'L', +13258=>'L', +13259=>'L', +13260=>'L', +13261=>'L', +13262=>'L', +13263=>'L', +13264=>'L', +13265=>'L', +13266=>'L', +13267=>'L', +13268=>'L', +13269=>'L', +13270=>'L', +13271=>'L', +13272=>'L', +13273=>'L', +13274=>'L', +13275=>'L', +13276=>'L', +13277=>'L', +13278=>'ON', +13279=>'ON', +13280=>'L', +13281=>'L', +13282=>'L', +13283=>'L', +13284=>'L', +13285=>'L', +13286=>'L', +13287=>'L', +13288=>'L', +13289=>'L', +13290=>'L', +13291=>'L', +13292=>'L', +13293=>'L', +13294=>'L', +13295=>'L', +13296=>'L', +13297=>'L', +13298=>'L', +13299=>'L', +13300=>'L', +13301=>'L', +13302=>'L', +13303=>'L', +13304=>'L', +13305=>'L', +13306=>'L', +13307=>'L', +13308=>'L', +13309=>'L', +13310=>'L', +13311=>'ON', +13312=>'L', +19893=>'L', +19904=>'ON', +19905=>'ON', +19906=>'ON', +19907=>'ON', +19908=>'ON', +19909=>'ON', +19910=>'ON', +19911=>'ON', +19912=>'ON', +19913=>'ON', +19914=>'ON', +19915=>'ON', +19916=>'ON', +19917=>'ON', +19918=>'ON', +19919=>'ON', +19920=>'ON', +19921=>'ON', +19922=>'ON', +19923=>'ON', +19924=>'ON', +19925=>'ON', +19926=>'ON', +19927=>'ON', +19928=>'ON', +19929=>'ON', +19930=>'ON', +19931=>'ON', +19932=>'ON', +19933=>'ON', +19934=>'ON', +19935=>'ON', +19936=>'ON', +19937=>'ON', +19938=>'ON', +19939=>'ON', +19940=>'ON', +19941=>'ON', +19942=>'ON', +19943=>'ON', +19944=>'ON', +19945=>'ON', +19946=>'ON', +19947=>'ON', +19948=>'ON', +19949=>'ON', +19950=>'ON', +19951=>'ON', +19952=>'ON', +19953=>'ON', +19954=>'ON', +19955=>'ON', +19956=>'ON', +19957=>'ON', +19958=>'ON', +19959=>'ON', +19960=>'ON', +19961=>'ON', +19962=>'ON', +19963=>'ON', +19964=>'ON', +19965=>'ON', +19966=>'ON', +19967=>'ON', +19968=>'L', +40891=>'L', +40960=>'L', +40961=>'L', +40962=>'L', +40963=>'L', +40964=>'L', +40965=>'L', +40966=>'L', +40967=>'L', +40968=>'L', +40969=>'L', +40970=>'L', +40971=>'L', +40972=>'L', +40973=>'L', +40974=>'L', +40975=>'L', +40976=>'L', +40977=>'L', +40978=>'L', +40979=>'L', +40980=>'L', +40981=>'L', +40982=>'L', +40983=>'L', +40984=>'L', +40985=>'L', +40986=>'L', +40987=>'L', +40988=>'L', +40989=>'L', +40990=>'L', +40991=>'L', +40992=>'L', +40993=>'L', +40994=>'L', +40995=>'L', +40996=>'L', +40997=>'L', +40998=>'L', +40999=>'L', +41000=>'L', +41001=>'L', +41002=>'L', +41003=>'L', +41004=>'L', +41005=>'L', +41006=>'L', +41007=>'L', +41008=>'L', +41009=>'L', +41010=>'L', +41011=>'L', +41012=>'L', +41013=>'L', +41014=>'L', +41015=>'L', +41016=>'L', +41017=>'L', +41018=>'L', +41019=>'L', +41020=>'L', +41021=>'L', +41022=>'L', +41023=>'L', +41024=>'L', +41025=>'L', +41026=>'L', +41027=>'L', +41028=>'L', +41029=>'L', +41030=>'L', +41031=>'L', +41032=>'L', +41033=>'L', +41034=>'L', +41035=>'L', +41036=>'L', +41037=>'L', +41038=>'L', +41039=>'L', +41040=>'L', +41041=>'L', +41042=>'L', +41043=>'L', +41044=>'L', +41045=>'L', +41046=>'L', +41047=>'L', +41048=>'L', +41049=>'L', +41050=>'L', +41051=>'L', +41052=>'L', +41053=>'L', +41054=>'L', +41055=>'L', +41056=>'L', +41057=>'L', +41058=>'L', +41059=>'L', +41060=>'L', +41061=>'L', +41062=>'L', +41063=>'L', +41064=>'L', +41065=>'L', +41066=>'L', +41067=>'L', +41068=>'L', +41069=>'L', +41070=>'L', +41071=>'L', +41072=>'L', +41073=>'L', +41074=>'L', +41075=>'L', +41076=>'L', +41077=>'L', +41078=>'L', +41079=>'L', +41080=>'L', +41081=>'L', +41082=>'L', +41083=>'L', +41084=>'L', +41085=>'L', +41086=>'L', +41087=>'L', +41088=>'L', +41089=>'L', +41090=>'L', +41091=>'L', +41092=>'L', +41093=>'L', +41094=>'L', +41095=>'L', +41096=>'L', +41097=>'L', +41098=>'L', +41099=>'L', +41100=>'L', +41101=>'L', +41102=>'L', +41103=>'L', +41104=>'L', +41105=>'L', +41106=>'L', +41107=>'L', +41108=>'L', +41109=>'L', +41110=>'L', +41111=>'L', +41112=>'L', +41113=>'L', +41114=>'L', +41115=>'L', +41116=>'L', +41117=>'L', +41118=>'L', +41119=>'L', +41120=>'L', +41121=>'L', +41122=>'L', +41123=>'L', +41124=>'L', +41125=>'L', +41126=>'L', +41127=>'L', +41128=>'L', +41129=>'L', +41130=>'L', +41131=>'L', +41132=>'L', +41133=>'L', +41134=>'L', +41135=>'L', +41136=>'L', +41137=>'L', +41138=>'L', +41139=>'L', +41140=>'L', +41141=>'L', +41142=>'L', +41143=>'L', +41144=>'L', +41145=>'L', +41146=>'L', +41147=>'L', +41148=>'L', +41149=>'L', +41150=>'L', +41151=>'L', +41152=>'L', +41153=>'L', +41154=>'L', +41155=>'L', +41156=>'L', +41157=>'L', +41158=>'L', +41159=>'L', +41160=>'L', +41161=>'L', +41162=>'L', +41163=>'L', +41164=>'L', +41165=>'L', +41166=>'L', +41167=>'L', +41168=>'L', +41169=>'L', +41170=>'L', +41171=>'L', +41172=>'L', +41173=>'L', +41174=>'L', +41175=>'L', +41176=>'L', +41177=>'L', +41178=>'L', +41179=>'L', +41180=>'L', +41181=>'L', +41182=>'L', +41183=>'L', +41184=>'L', +41185=>'L', +41186=>'L', +41187=>'L', +41188=>'L', +41189=>'L', +41190=>'L', +41191=>'L', +41192=>'L', +41193=>'L', +41194=>'L', +41195=>'L', +41196=>'L', +41197=>'L', +41198=>'L', +41199=>'L', +41200=>'L', +41201=>'L', +41202=>'L', +41203=>'L', +41204=>'L', +41205=>'L', +41206=>'L', +41207=>'L', +41208=>'L', +41209=>'L', +41210=>'L', +41211=>'L', +41212=>'L', +41213=>'L', +41214=>'L', +41215=>'L', +41216=>'L', +41217=>'L', +41218=>'L', +41219=>'L', +41220=>'L', +41221=>'L', +41222=>'L', +41223=>'L', +41224=>'L', +41225=>'L', +41226=>'L', +41227=>'L', +41228=>'L', +41229=>'L', +41230=>'L', +41231=>'L', +41232=>'L', +41233=>'L', +41234=>'L', +41235=>'L', +41236=>'L', +41237=>'L', +41238=>'L', +41239=>'L', +41240=>'L', +41241=>'L', +41242=>'L', +41243=>'L', +41244=>'L', +41245=>'L', +41246=>'L', +41247=>'L', +41248=>'L', +41249=>'L', +41250=>'L', +41251=>'L', +41252=>'L', +41253=>'L', +41254=>'L', +41255=>'L', +41256=>'L', +41257=>'L', +41258=>'L', +41259=>'L', +41260=>'L', +41261=>'L', +41262=>'L', +41263=>'L', +41264=>'L', +41265=>'L', +41266=>'L', +41267=>'L', +41268=>'L', +41269=>'L', +41270=>'L', +41271=>'L', +41272=>'L', +41273=>'L', +41274=>'L', +41275=>'L', +41276=>'L', +41277=>'L', +41278=>'L', +41279=>'L', +41280=>'L', +41281=>'L', +41282=>'L', +41283=>'L', +41284=>'L', +41285=>'L', +41286=>'L', +41287=>'L', +41288=>'L', +41289=>'L', +41290=>'L', +41291=>'L', +41292=>'L', +41293=>'L', +41294=>'L', +41295=>'L', +41296=>'L', +41297=>'L', +41298=>'L', +41299=>'L', +41300=>'L', +41301=>'L', +41302=>'L', +41303=>'L', +41304=>'L', +41305=>'L', +41306=>'L', +41307=>'L', +41308=>'L', +41309=>'L', +41310=>'L', +41311=>'L', +41312=>'L', +41313=>'L', +41314=>'L', +41315=>'L', +41316=>'L', +41317=>'L', +41318=>'L', +41319=>'L', +41320=>'L', +41321=>'L', +41322=>'L', +41323=>'L', +41324=>'L', +41325=>'L', +41326=>'L', +41327=>'L', +41328=>'L', +41329=>'L', +41330=>'L', +41331=>'L', +41332=>'L', +41333=>'L', +41334=>'L', +41335=>'L', +41336=>'L', +41337=>'L', +41338=>'L', +41339=>'L', +41340=>'L', +41341=>'L', +41342=>'L', +41343=>'L', +41344=>'L', +41345=>'L', +41346=>'L', +41347=>'L', +41348=>'L', +41349=>'L', +41350=>'L', +41351=>'L', +41352=>'L', +41353=>'L', +41354=>'L', +41355=>'L', +41356=>'L', +41357=>'L', +41358=>'L', +41359=>'L', +41360=>'L', +41361=>'L', +41362=>'L', +41363=>'L', +41364=>'L', +41365=>'L', +41366=>'L', +41367=>'L', +41368=>'L', +41369=>'L', +41370=>'L', +41371=>'L', +41372=>'L', +41373=>'L', +41374=>'L', +41375=>'L', +41376=>'L', +41377=>'L', +41378=>'L', +41379=>'L', +41380=>'L', +41381=>'L', +41382=>'L', +41383=>'L', +41384=>'L', +41385=>'L', +41386=>'L', +41387=>'L', +41388=>'L', +41389=>'L', +41390=>'L', +41391=>'L', +41392=>'L', +41393=>'L', +41394=>'L', +41395=>'L', +41396=>'L', +41397=>'L', +41398=>'L', +41399=>'L', +41400=>'L', +41401=>'L', +41402=>'L', +41403=>'L', +41404=>'L', +41405=>'L', +41406=>'L', +41407=>'L', +41408=>'L', +41409=>'L', +41410=>'L', +41411=>'L', +41412=>'L', +41413=>'L', +41414=>'L', +41415=>'L', +41416=>'L', +41417=>'L', +41418=>'L', +41419=>'L', +41420=>'L', +41421=>'L', +41422=>'L', +41423=>'L', +41424=>'L', +41425=>'L', +41426=>'L', +41427=>'L', +41428=>'L', +41429=>'L', +41430=>'L', +41431=>'L', +41432=>'L', +41433=>'L', +41434=>'L', +41435=>'L', +41436=>'L', +41437=>'L', +41438=>'L', +41439=>'L', +41440=>'L', +41441=>'L', +41442=>'L', +41443=>'L', +41444=>'L', +41445=>'L', +41446=>'L', +41447=>'L', +41448=>'L', +41449=>'L', +41450=>'L', +41451=>'L', +41452=>'L', +41453=>'L', +41454=>'L', +41455=>'L', +41456=>'L', +41457=>'L', +41458=>'L', +41459=>'L', +41460=>'L', +41461=>'L', +41462=>'L', +41463=>'L', +41464=>'L', +41465=>'L', +41466=>'L', +41467=>'L', +41468=>'L', +41469=>'L', +41470=>'L', +41471=>'L', +41472=>'L', +41473=>'L', +41474=>'L', +41475=>'L', +41476=>'L', +41477=>'L', +41478=>'L', +41479=>'L', +41480=>'L', +41481=>'L', +41482=>'L', +41483=>'L', +41484=>'L', +41485=>'L', +41486=>'L', +41487=>'L', +41488=>'L', +41489=>'L', +41490=>'L', +41491=>'L', +41492=>'L', +41493=>'L', +41494=>'L', +41495=>'L', +41496=>'L', +41497=>'L', +41498=>'L', +41499=>'L', +41500=>'L', +41501=>'L', +41502=>'L', +41503=>'L', +41504=>'L', +41505=>'L', +41506=>'L', +41507=>'L', +41508=>'L', +41509=>'L', +41510=>'L', +41511=>'L', +41512=>'L', +41513=>'L', +41514=>'L', +41515=>'L', +41516=>'L', +41517=>'L', +41518=>'L', +41519=>'L', +41520=>'L', +41521=>'L', +41522=>'L', +41523=>'L', +41524=>'L', +41525=>'L', +41526=>'L', +41527=>'L', +41528=>'L', +41529=>'L', +41530=>'L', +41531=>'L', +41532=>'L', +41533=>'L', +41534=>'L', +41535=>'L', +41536=>'L', +41537=>'L', +41538=>'L', +41539=>'L', +41540=>'L', +41541=>'L', +41542=>'L', +41543=>'L', +41544=>'L', +41545=>'L', +41546=>'L', +41547=>'L', +41548=>'L', +41549=>'L', +41550=>'L', +41551=>'L', +41552=>'L', +41553=>'L', +41554=>'L', +41555=>'L', +41556=>'L', +41557=>'L', +41558=>'L', +41559=>'L', +41560=>'L', +41561=>'L', +41562=>'L', +41563=>'L', +41564=>'L', +41565=>'L', +41566=>'L', +41567=>'L', +41568=>'L', +41569=>'L', +41570=>'L', +41571=>'L', +41572=>'L', +41573=>'L', +41574=>'L', +41575=>'L', +41576=>'L', +41577=>'L', +41578=>'L', +41579=>'L', +41580=>'L', +41581=>'L', +41582=>'L', +41583=>'L', +41584=>'L', +41585=>'L', +41586=>'L', +41587=>'L', +41588=>'L', +41589=>'L', +41590=>'L', +41591=>'L', +41592=>'L', +41593=>'L', +41594=>'L', +41595=>'L', +41596=>'L', +41597=>'L', +41598=>'L', +41599=>'L', +41600=>'L', +41601=>'L', +41602=>'L', +41603=>'L', +41604=>'L', +41605=>'L', +41606=>'L', +41607=>'L', +41608=>'L', +41609=>'L', +41610=>'L', +41611=>'L', +41612=>'L', +41613=>'L', +41614=>'L', +41615=>'L', +41616=>'L', +41617=>'L', +41618=>'L', +41619=>'L', +41620=>'L', +41621=>'L', +41622=>'L', +41623=>'L', +41624=>'L', +41625=>'L', +41626=>'L', +41627=>'L', +41628=>'L', +41629=>'L', +41630=>'L', +41631=>'L', +41632=>'L', +41633=>'L', +41634=>'L', +41635=>'L', +41636=>'L', +41637=>'L', +41638=>'L', +41639=>'L', +41640=>'L', +41641=>'L', +41642=>'L', +41643=>'L', +41644=>'L', +41645=>'L', +41646=>'L', +41647=>'L', +41648=>'L', +41649=>'L', +41650=>'L', +41651=>'L', +41652=>'L', +41653=>'L', +41654=>'L', +41655=>'L', +41656=>'L', +41657=>'L', +41658=>'L', +41659=>'L', +41660=>'L', +41661=>'L', +41662=>'L', +41663=>'L', +41664=>'L', +41665=>'L', +41666=>'L', +41667=>'L', +41668=>'L', +41669=>'L', +41670=>'L', +41671=>'L', +41672=>'L', +41673=>'L', +41674=>'L', +41675=>'L', +41676=>'L', +41677=>'L', +41678=>'L', +41679=>'L', +41680=>'L', +41681=>'L', +41682=>'L', +41683=>'L', +41684=>'L', +41685=>'L', +41686=>'L', +41687=>'L', +41688=>'L', +41689=>'L', +41690=>'L', +41691=>'L', +41692=>'L', +41693=>'L', +41694=>'L', +41695=>'L', +41696=>'L', +41697=>'L', +41698=>'L', +41699=>'L', +41700=>'L', +41701=>'L', +41702=>'L', +41703=>'L', +41704=>'L', +41705=>'L', +41706=>'L', +41707=>'L', +41708=>'L', +41709=>'L', +41710=>'L', +41711=>'L', +41712=>'L', +41713=>'L', +41714=>'L', +41715=>'L', +41716=>'L', +41717=>'L', +41718=>'L', +41719=>'L', +41720=>'L', +41721=>'L', +41722=>'L', +41723=>'L', +41724=>'L', +41725=>'L', +41726=>'L', +41727=>'L', +41728=>'L', +41729=>'L', +41730=>'L', +41731=>'L', +41732=>'L', +41733=>'L', +41734=>'L', +41735=>'L', +41736=>'L', +41737=>'L', +41738=>'L', +41739=>'L', +41740=>'L', +41741=>'L', +41742=>'L', +41743=>'L', +41744=>'L', +41745=>'L', +41746=>'L', +41747=>'L', +41748=>'L', +41749=>'L', +41750=>'L', +41751=>'L', +41752=>'L', +41753=>'L', +41754=>'L', +41755=>'L', +41756=>'L', +41757=>'L', +41758=>'L', +41759=>'L', +41760=>'L', +41761=>'L', +41762=>'L', +41763=>'L', +41764=>'L', +41765=>'L', +41766=>'L', +41767=>'L', +41768=>'L', +41769=>'L', +41770=>'L', +41771=>'L', +41772=>'L', +41773=>'L', +41774=>'L', +41775=>'L', +41776=>'L', +41777=>'L', +41778=>'L', +41779=>'L', +41780=>'L', +41781=>'L', +41782=>'L', +41783=>'L', +41784=>'L', +41785=>'L', +41786=>'L', +41787=>'L', +41788=>'L', +41789=>'L', +41790=>'L', +41791=>'L', +41792=>'L', +41793=>'L', +41794=>'L', +41795=>'L', +41796=>'L', +41797=>'L', +41798=>'L', +41799=>'L', +41800=>'L', +41801=>'L', +41802=>'L', +41803=>'L', +41804=>'L', +41805=>'L', +41806=>'L', +41807=>'L', +41808=>'L', +41809=>'L', +41810=>'L', +41811=>'L', +41812=>'L', +41813=>'L', +41814=>'L', +41815=>'L', +41816=>'L', +41817=>'L', +41818=>'L', +41819=>'L', +41820=>'L', +41821=>'L', +41822=>'L', +41823=>'L', +41824=>'L', +41825=>'L', +41826=>'L', +41827=>'L', +41828=>'L', +41829=>'L', +41830=>'L', +41831=>'L', +41832=>'L', +41833=>'L', +41834=>'L', +41835=>'L', +41836=>'L', +41837=>'L', +41838=>'L', +41839=>'L', +41840=>'L', +41841=>'L', +41842=>'L', +41843=>'L', +41844=>'L', +41845=>'L', +41846=>'L', +41847=>'L', +41848=>'L', +41849=>'L', +41850=>'L', +41851=>'L', +41852=>'L', +41853=>'L', +41854=>'L', +41855=>'L', +41856=>'L', +41857=>'L', +41858=>'L', +41859=>'L', +41860=>'L', +41861=>'L', +41862=>'L', +41863=>'L', +41864=>'L', +41865=>'L', +41866=>'L', +41867=>'L', +41868=>'L', +41869=>'L', +41870=>'L', +41871=>'L', +41872=>'L', +41873=>'L', +41874=>'L', +41875=>'L', +41876=>'L', +41877=>'L', +41878=>'L', +41879=>'L', +41880=>'L', +41881=>'L', +41882=>'L', +41883=>'L', +41884=>'L', +41885=>'L', +41886=>'L', +41887=>'L', +41888=>'L', +41889=>'L', +41890=>'L', +41891=>'L', +41892=>'L', +41893=>'L', +41894=>'L', +41895=>'L', +41896=>'L', +41897=>'L', +41898=>'L', +41899=>'L', +41900=>'L', +41901=>'L', +41902=>'L', +41903=>'L', +41904=>'L', +41905=>'L', +41906=>'L', +41907=>'L', +41908=>'L', +41909=>'L', +41910=>'L', +41911=>'L', +41912=>'L', +41913=>'L', +41914=>'L', +41915=>'L', +41916=>'L', +41917=>'L', +41918=>'L', +41919=>'L', +41920=>'L', +41921=>'L', +41922=>'L', +41923=>'L', +41924=>'L', +41925=>'L', +41926=>'L', +41927=>'L', +41928=>'L', +41929=>'L', +41930=>'L', +41931=>'L', +41932=>'L', +41933=>'L', +41934=>'L', +41935=>'L', +41936=>'L', +41937=>'L', +41938=>'L', +41939=>'L', +41940=>'L', +41941=>'L', +41942=>'L', +41943=>'L', +41944=>'L', +41945=>'L', +41946=>'L', +41947=>'L', +41948=>'L', +41949=>'L', +41950=>'L', +41951=>'L', +41952=>'L', +41953=>'L', +41954=>'L', +41955=>'L', +41956=>'L', +41957=>'L', +41958=>'L', +41959=>'L', +41960=>'L', +41961=>'L', +41962=>'L', +41963=>'L', +41964=>'L', +41965=>'L', +41966=>'L', +41967=>'L', +41968=>'L', +41969=>'L', +41970=>'L', +41971=>'L', +41972=>'L', +41973=>'L', +41974=>'L', +41975=>'L', +41976=>'L', +41977=>'L', +41978=>'L', +41979=>'L', +41980=>'L', +41981=>'L', +41982=>'L', +41983=>'L', +41984=>'L', +41985=>'L', +41986=>'L', +41987=>'L', +41988=>'L', +41989=>'L', +41990=>'L', +41991=>'L', +41992=>'L', +41993=>'L', +41994=>'L', +41995=>'L', +41996=>'L', +41997=>'L', +41998=>'L', +41999=>'L', +42000=>'L', +42001=>'L', +42002=>'L', +42003=>'L', +42004=>'L', +42005=>'L', +42006=>'L', +42007=>'L', +42008=>'L', +42009=>'L', +42010=>'L', +42011=>'L', +42012=>'L', +42013=>'L', +42014=>'L', +42015=>'L', +42016=>'L', +42017=>'L', +42018=>'L', +42019=>'L', +42020=>'L', +42021=>'L', +42022=>'L', +42023=>'L', +42024=>'L', +42025=>'L', +42026=>'L', +42027=>'L', +42028=>'L', +42029=>'L', +42030=>'L', +42031=>'L', +42032=>'L', +42033=>'L', +42034=>'L', +42035=>'L', +42036=>'L', +42037=>'L', +42038=>'L', +42039=>'L', +42040=>'L', +42041=>'L', +42042=>'L', +42043=>'L', +42044=>'L', +42045=>'L', +42046=>'L', +42047=>'L', +42048=>'L', +42049=>'L', +42050=>'L', +42051=>'L', +42052=>'L', +42053=>'L', +42054=>'L', +42055=>'L', +42056=>'L', +42057=>'L', +42058=>'L', +42059=>'L', +42060=>'L', +42061=>'L', +42062=>'L', +42063=>'L', +42064=>'L', +42065=>'L', +42066=>'L', +42067=>'L', +42068=>'L', +42069=>'L', +42070=>'L', +42071=>'L', +42072=>'L', +42073=>'L', +42074=>'L', +42075=>'L', +42076=>'L', +42077=>'L', +42078=>'L', +42079=>'L', +42080=>'L', +42081=>'L', +42082=>'L', +42083=>'L', +42084=>'L', +42085=>'L', +42086=>'L', +42087=>'L', +42088=>'L', +42089=>'L', +42090=>'L', +42091=>'L', +42092=>'L', +42093=>'L', +42094=>'L', +42095=>'L', +42096=>'L', +42097=>'L', +42098=>'L', +42099=>'L', +42100=>'L', +42101=>'L', +42102=>'L', +42103=>'L', +42104=>'L', +42105=>'L', +42106=>'L', +42107=>'L', +42108=>'L', +42109=>'L', +42110=>'L', +42111=>'L', +42112=>'L', +42113=>'L', +42114=>'L', +42115=>'L', +42116=>'L', +42117=>'L', +42118=>'L', +42119=>'L', +42120=>'L', +42121=>'L', +42122=>'L', +42123=>'L', +42124=>'L', +42128=>'ON', +42129=>'ON', +42130=>'ON', +42131=>'ON', +42132=>'ON', +42133=>'ON', +42134=>'ON', +42135=>'ON', +42136=>'ON', +42137=>'ON', +42138=>'ON', +42139=>'ON', +42140=>'ON', +42141=>'ON', +42142=>'ON', +42143=>'ON', +42144=>'ON', +42145=>'ON', +42146=>'ON', +42147=>'ON', +42148=>'ON', +42149=>'ON', +42150=>'ON', +42151=>'ON', +42152=>'ON', +42153=>'ON', +42154=>'ON', +42155=>'ON', +42156=>'ON', +42157=>'ON', +42158=>'ON', +42159=>'ON', +42160=>'ON', +42161=>'ON', +42162=>'ON', +42163=>'ON', +42164=>'ON', +42165=>'ON', +42166=>'ON', +42167=>'ON', +42168=>'ON', +42169=>'ON', +42170=>'ON', +42171=>'ON', +42172=>'ON', +42173=>'ON', +42174=>'ON', +42175=>'ON', +42176=>'ON', +42177=>'ON', +42178=>'ON', +42179=>'ON', +42180=>'ON', +42181=>'ON', +42182=>'ON', +42752=>'ON', +42753=>'ON', +42754=>'ON', +42755=>'ON', +42756=>'ON', +42757=>'ON', +42758=>'ON', +42759=>'ON', +42760=>'ON', +42761=>'ON', +42762=>'ON', +42763=>'ON', +42764=>'ON', +42765=>'ON', +42766=>'ON', +42767=>'ON', +42768=>'ON', +42769=>'ON', +42770=>'ON', +42771=>'ON', +42772=>'ON', +42773=>'ON', +42774=>'ON', +42775=>'ON', +42776=>'ON', +42777=>'ON', +42778=>'ON', +42784=>'ON', +42785=>'ON', +43008=>'L', +43009=>'L', +43010=>'NSM', +43011=>'L', +43012=>'L', +43013=>'L', +43014=>'NSM', +43015=>'L', +43016=>'L', +43017=>'L', +43018=>'L', +43019=>'NSM', +43020=>'L', +43021=>'L', +43022=>'L', +43023=>'L', +43024=>'L', +43025=>'L', +43026=>'L', +43027=>'L', +43028=>'L', +43029=>'L', +43030=>'L', +43031=>'L', +43032=>'L', +43033=>'L', +43034=>'L', +43035=>'L', +43036=>'L', +43037=>'L', +43038=>'L', +43039=>'L', +43040=>'L', +43041=>'L', +43042=>'L', +43043=>'L', +43044=>'L', +43045=>'NSM', +43046=>'NSM', +43047=>'L', +43048=>'ON', +43049=>'ON', +43050=>'ON', +43051=>'ON', +43072=>'L', +43073=>'L', +43074=>'L', +43075=>'L', +43076=>'L', +43077=>'L', +43078=>'L', +43079=>'L', +43080=>'L', +43081=>'L', +43082=>'L', +43083=>'L', +43084=>'L', +43085=>'L', +43086=>'L', +43087=>'L', +43088=>'L', +43089=>'L', +43090=>'L', +43091=>'L', +43092=>'L', +43093=>'L', +43094=>'L', +43095=>'L', +43096=>'L', +43097=>'L', +43098=>'L', +43099=>'L', +43100=>'L', +43101=>'L', +43102=>'L', +43103=>'L', +43104=>'L', +43105=>'L', +43106=>'L', +43107=>'L', +43108=>'L', +43109=>'L', +43110=>'L', +43111=>'L', +43112=>'L', +43113=>'L', +43114=>'L', +43115=>'L', +43116=>'L', +43117=>'L', +43118=>'L', +43119=>'L', +43120=>'L', +43121=>'L', +43122=>'L', +43123=>'L', +43124=>'ON', +43125=>'ON', +43126=>'ON', +43127=>'ON', +44032=>'L', +55203=>'L', +55296=>'L', +56191=>'L', +56192=>'L', +56319=>'L', +56320=>'L', +57343=>'L', +57344=>'L', +63743=>'L', +63744=>'L', +63745=>'L', +63746=>'L', +63747=>'L', +63748=>'L', +63749=>'L', +63750=>'L', +63751=>'L', +63752=>'L', +63753=>'L', +63754=>'L', +63755=>'L', +63756=>'L', +63757=>'L', +63758=>'L', +63759=>'L', +63760=>'L', +63761=>'L', +63762=>'L', +63763=>'L', +63764=>'L', +63765=>'L', +63766=>'L', +63767=>'L', +63768=>'L', +63769=>'L', +63770=>'L', +63771=>'L', +63772=>'L', +63773=>'L', +63774=>'L', +63775=>'L', +63776=>'L', +63777=>'L', +63778=>'L', +63779=>'L', +63780=>'L', +63781=>'L', +63782=>'L', +63783=>'L', +63784=>'L', +63785=>'L', +63786=>'L', +63787=>'L', +63788=>'L', +63789=>'L', +63790=>'L', +63791=>'L', +63792=>'L', +63793=>'L', +63794=>'L', +63795=>'L', +63796=>'L', +63797=>'L', +63798=>'L', +63799=>'L', +63800=>'L', +63801=>'L', +63802=>'L', +63803=>'L', +63804=>'L', +63805=>'L', +63806=>'L', +63807=>'L', +63808=>'L', +63809=>'L', +63810=>'L', +63811=>'L', +63812=>'L', +63813=>'L', +63814=>'L', +63815=>'L', +63816=>'L', +63817=>'L', +63818=>'L', +63819=>'L', +63820=>'L', +63821=>'L', +63822=>'L', +63823=>'L', +63824=>'L', +63825=>'L', +63826=>'L', +63827=>'L', +63828=>'L', +63829=>'L', +63830=>'L', +63831=>'L', +63832=>'L', +63833=>'L', +63834=>'L', +63835=>'L', +63836=>'L', +63837=>'L', +63838=>'L', +63839=>'L', +63840=>'L', +63841=>'L', +63842=>'L', +63843=>'L', +63844=>'L', +63845=>'L', +63846=>'L', +63847=>'L', +63848=>'L', +63849=>'L', +63850=>'L', +63851=>'L', +63852=>'L', +63853=>'L', +63854=>'L', +63855=>'L', +63856=>'L', +63857=>'L', +63858=>'L', +63859=>'L', +63860=>'L', +63861=>'L', +63862=>'L', +63863=>'L', +63864=>'L', +63865=>'L', +63866=>'L', +63867=>'L', +63868=>'L', +63869=>'L', +63870=>'L', +63871=>'L', +63872=>'L', +63873=>'L', +63874=>'L', +63875=>'L', +63876=>'L', +63877=>'L', +63878=>'L', +63879=>'L', +63880=>'L', +63881=>'L', +63882=>'L', +63883=>'L', +63884=>'L', +63885=>'L', +63886=>'L', +63887=>'L', +63888=>'L', +63889=>'L', +63890=>'L', +63891=>'L', +63892=>'L', +63893=>'L', +63894=>'L', +63895=>'L', +63896=>'L', +63897=>'L', +63898=>'L', +63899=>'L', +63900=>'L', +63901=>'L', +63902=>'L', +63903=>'L', +63904=>'L', +63905=>'L', +63906=>'L', +63907=>'L', +63908=>'L', +63909=>'L', +63910=>'L', +63911=>'L', +63912=>'L', +63913=>'L', +63914=>'L', +63915=>'L', +63916=>'L', +63917=>'L', +63918=>'L', +63919=>'L', +63920=>'L', +63921=>'L', +63922=>'L', +63923=>'L', +63924=>'L', +63925=>'L', +63926=>'L', +63927=>'L', +63928=>'L', +63929=>'L', +63930=>'L', +63931=>'L', +63932=>'L', +63933=>'L', +63934=>'L', +63935=>'L', +63936=>'L', +63937=>'L', +63938=>'L', +63939=>'L', +63940=>'L', +63941=>'L', +63942=>'L', +63943=>'L', +63944=>'L', +63945=>'L', +63946=>'L', +63947=>'L', +63948=>'L', +63949=>'L', +63950=>'L', +63951=>'L', +63952=>'L', +63953=>'L', +63954=>'L', +63955=>'L', +63956=>'L', +63957=>'L', +63958=>'L', +63959=>'L', +63960=>'L', +63961=>'L', +63962=>'L', +63963=>'L', +63964=>'L', +63965=>'L', +63966=>'L', +63967=>'L', +63968=>'L', +63969=>'L', +63970=>'L', +63971=>'L', +63972=>'L', +63973=>'L', +63974=>'L', +63975=>'L', +63976=>'L', +63977=>'L', +63978=>'L', +63979=>'L', +63980=>'L', +63981=>'L', +63982=>'L', +63983=>'L', +63984=>'L', +63985=>'L', +63986=>'L', +63987=>'L', +63988=>'L', +63989=>'L', +63990=>'L', +63991=>'L', +63992=>'L', +63993=>'L', +63994=>'L', +63995=>'L', +63996=>'L', +63997=>'L', +63998=>'L', +63999=>'L', +64000=>'L', +64001=>'L', +64002=>'L', +64003=>'L', +64004=>'L', +64005=>'L', +64006=>'L', +64007=>'L', +64008=>'L', +64009=>'L', +64010=>'L', +64011=>'L', +64012=>'L', +64013=>'L', +64014=>'L', +64015=>'L', +64016=>'L', +64017=>'L', +64018=>'L', +64019=>'L', +64020=>'L', +64021=>'L', +64022=>'L', +64023=>'L', +64024=>'L', +64025=>'L', +64026=>'L', +64027=>'L', +64028=>'L', +64029=>'L', +64030=>'L', +64031=>'L', +64032=>'L', +64033=>'L', +64034=>'L', +64035=>'L', +64036=>'L', +64037=>'L', +64038=>'L', +64039=>'L', +64040=>'L', +64041=>'L', +64042=>'L', +64043=>'L', +64044=>'L', +64045=>'L', +64048=>'L', +64049=>'L', +64050=>'L', +64051=>'L', +64052=>'L', +64053=>'L', +64054=>'L', +64055=>'L', +64056=>'L', +64057=>'L', +64058=>'L', +64059=>'L', +64060=>'L', +64061=>'L', +64062=>'L', +64063=>'L', +64064=>'L', +64065=>'L', +64066=>'L', +64067=>'L', +64068=>'L', +64069=>'L', +64070=>'L', +64071=>'L', +64072=>'L', +64073=>'L', +64074=>'L', +64075=>'L', +64076=>'L', +64077=>'L', +64078=>'L', +64079=>'L', +64080=>'L', +64081=>'L', +64082=>'L', +64083=>'L', +64084=>'L', +64085=>'L', +64086=>'L', +64087=>'L', +64088=>'L', +64089=>'L', +64090=>'L', +64091=>'L', +64092=>'L', +64093=>'L', +64094=>'L', +64095=>'L', +64096=>'L', +64097=>'L', +64098=>'L', +64099=>'L', +64100=>'L', +64101=>'L', +64102=>'L', +64103=>'L', +64104=>'L', +64105=>'L', +64106=>'L', +64112=>'L', +64113=>'L', +64114=>'L', +64115=>'L', +64116=>'L', +64117=>'L', +64118=>'L', +64119=>'L', +64120=>'L', +64121=>'L', +64122=>'L', +64123=>'L', +64124=>'L', +64125=>'L', +64126=>'L', +64127=>'L', +64128=>'L', +64129=>'L', +64130=>'L', +64131=>'L', +64132=>'L', +64133=>'L', +64134=>'L', +64135=>'L', +64136=>'L', +64137=>'L', +64138=>'L', +64139=>'L', +64140=>'L', +64141=>'L', +64142=>'L', +64143=>'L', +64144=>'L', +64145=>'L', +64146=>'L', +64147=>'L', +64148=>'L', +64149=>'L', +64150=>'L', +64151=>'L', +64152=>'L', +64153=>'L', +64154=>'L', +64155=>'L', +64156=>'L', +64157=>'L', +64158=>'L', +64159=>'L', +64160=>'L', +64161=>'L', +64162=>'L', +64163=>'L', +64164=>'L', +64165=>'L', +64166=>'L', +64167=>'L', +64168=>'L', +64169=>'L', +64170=>'L', +64171=>'L', +64172=>'L', +64173=>'L', +64174=>'L', +64175=>'L', +64176=>'L', +64177=>'L', +64178=>'L', +64179=>'L', +64180=>'L', +64181=>'L', +64182=>'L', +64183=>'L', +64184=>'L', +64185=>'L', +64186=>'L', +64187=>'L', +64188=>'L', +64189=>'L', +64190=>'L', +64191=>'L', +64192=>'L', +64193=>'L', +64194=>'L', +64195=>'L', +64196=>'L', +64197=>'L', +64198=>'L', +64199=>'L', +64200=>'L', +64201=>'L', +64202=>'L', +64203=>'L', +64204=>'L', +64205=>'L', +64206=>'L', +64207=>'L', +64208=>'L', +64209=>'L', +64210=>'L', +64211=>'L', +64212=>'L', +64213=>'L', +64214=>'L', +64215=>'L', +64216=>'L', +64217=>'L', +64256=>'L', +64257=>'L', +64258=>'L', +64259=>'L', +64260=>'L', +64261=>'L', +64262=>'L', +64275=>'L', +64276=>'L', +64277=>'L', +64278=>'L', +64279=>'L', +64285=>'R', +64286=>'NSM', +64287=>'R', +64288=>'R', +64289=>'R', +64290=>'R', +64291=>'R', +64292=>'R', +64293=>'R', +64294=>'R', +64295=>'R', +64296=>'R', +64297=>'ES', +64298=>'R', +64299=>'R', +64300=>'R', +64301=>'R', +64302=>'R', +64303=>'R', +64304=>'R', +64305=>'R', +64306=>'R', +64307=>'R', +64308=>'R', +64309=>'R', +64310=>'R', +64312=>'R', +64313=>'R', +64314=>'R', +64315=>'R', +64316=>'R', +64318=>'R', +64320=>'R', +64321=>'R', +64323=>'R', +64324=>'R', +64326=>'R', +64327=>'R', +64328=>'R', +64329=>'R', +64330=>'R', +64331=>'R', +64332=>'R', +64333=>'R', +64334=>'R', +64335=>'R', +64336=>'AL', +64337=>'AL', +64338=>'AL', +64339=>'AL', +64340=>'AL', +64341=>'AL', +64342=>'AL', +64343=>'AL', +64344=>'AL', +64345=>'AL', +64346=>'AL', +64347=>'AL', +64348=>'AL', +64349=>'AL', +64350=>'AL', +64351=>'AL', +64352=>'AL', +64353=>'AL', +64354=>'AL', +64355=>'AL', +64356=>'AL', +64357=>'AL', +64358=>'AL', +64359=>'AL', +64360=>'AL', +64361=>'AL', +64362=>'AL', +64363=>'AL', +64364=>'AL', +64365=>'AL', +64366=>'AL', +64367=>'AL', +64368=>'AL', +64369=>'AL', +64370=>'AL', +64371=>'AL', +64372=>'AL', +64373=>'AL', +64374=>'AL', +64375=>'AL', +64376=>'AL', +64377=>'AL', +64378=>'AL', +64379=>'AL', +64380=>'AL', +64381=>'AL', +64382=>'AL', +64383=>'AL', +64384=>'AL', +64385=>'AL', +64386=>'AL', +64387=>'AL', +64388=>'AL', +64389=>'AL', +64390=>'AL', +64391=>'AL', +64392=>'AL', +64393=>'AL', +64394=>'AL', +64395=>'AL', +64396=>'AL', +64397=>'AL', +64398=>'AL', +64399=>'AL', +64400=>'AL', +64401=>'AL', +64402=>'AL', +64403=>'AL', +64404=>'AL', +64405=>'AL', +64406=>'AL', +64407=>'AL', +64408=>'AL', +64409=>'AL', +64410=>'AL', +64411=>'AL', +64412=>'AL', +64413=>'AL', +64414=>'AL', +64415=>'AL', +64416=>'AL', +64417=>'AL', +64418=>'AL', +64419=>'AL', +64420=>'AL', +64421=>'AL', +64422=>'AL', +64423=>'AL', +64424=>'AL', +64425=>'AL', +64426=>'AL', +64427=>'AL', +64428=>'AL', +64429=>'AL', +64430=>'AL', +64431=>'AL', +64432=>'AL', +64433=>'AL', +64467=>'AL', +64468=>'AL', +64469=>'AL', +64470=>'AL', +64471=>'AL', +64472=>'AL', +64473=>'AL', +64474=>'AL', +64475=>'AL', +64476=>'AL', +64477=>'AL', +64478=>'AL', +64479=>'AL', +64480=>'AL', +64481=>'AL', +64482=>'AL', +64483=>'AL', +64484=>'AL', +64485=>'AL', +64486=>'AL', +64487=>'AL', +64488=>'AL', +64489=>'AL', +64490=>'AL', +64491=>'AL', +64492=>'AL', +64493=>'AL', +64494=>'AL', +64495=>'AL', +64496=>'AL', +64497=>'AL', +64498=>'AL', +64499=>'AL', +64500=>'AL', +64501=>'AL', +64502=>'AL', +64503=>'AL', +64504=>'AL', +64505=>'AL', +64506=>'AL', +64507=>'AL', +64508=>'AL', +64509=>'AL', +64510=>'AL', +64511=>'AL', +64512=>'AL', +64513=>'AL', +64514=>'AL', +64515=>'AL', +64516=>'AL', +64517=>'AL', +64518=>'AL', +64519=>'AL', +64520=>'AL', +64521=>'AL', +64522=>'AL', +64523=>'AL', +64524=>'AL', +64525=>'AL', +64526=>'AL', +64527=>'AL', +64528=>'AL', +64529=>'AL', +64530=>'AL', +64531=>'AL', +64532=>'AL', +64533=>'AL', +64534=>'AL', +64535=>'AL', +64536=>'AL', +64537=>'AL', +64538=>'AL', +64539=>'AL', +64540=>'AL', +64541=>'AL', +64542=>'AL', +64543=>'AL', +64544=>'AL', +64545=>'AL', +64546=>'AL', +64547=>'AL', +64548=>'AL', +64549=>'AL', +64550=>'AL', +64551=>'AL', +64552=>'AL', +64553=>'AL', +64554=>'AL', +64555=>'AL', +64556=>'AL', +64557=>'AL', +64558=>'AL', +64559=>'AL', +64560=>'AL', +64561=>'AL', +64562=>'AL', +64563=>'AL', +64564=>'AL', +64565=>'AL', +64566=>'AL', +64567=>'AL', +64568=>'AL', +64569=>'AL', +64570=>'AL', +64571=>'AL', +64572=>'AL', +64573=>'AL', +64574=>'AL', +64575=>'AL', +64576=>'AL', +64577=>'AL', +64578=>'AL', +64579=>'AL', +64580=>'AL', +64581=>'AL', +64582=>'AL', +64583=>'AL', +64584=>'AL', +64585=>'AL', +64586=>'AL', +64587=>'AL', +64588=>'AL', +64589=>'AL', +64590=>'AL', +64591=>'AL', +64592=>'AL', +64593=>'AL', +64594=>'AL', +64595=>'AL', +64596=>'AL', +64597=>'AL', +64598=>'AL', +64599=>'AL', +64600=>'AL', +64601=>'AL', +64602=>'AL', +64603=>'AL', +64604=>'AL', +64605=>'AL', +64606=>'AL', +64607=>'AL', +64608=>'AL', +64609=>'AL', +64610=>'AL', +64611=>'AL', +64612=>'AL', +64613=>'AL', +64614=>'AL', +64615=>'AL', +64616=>'AL', +64617=>'AL', +64618=>'AL', +64619=>'AL', +64620=>'AL', +64621=>'AL', +64622=>'AL', +64623=>'AL', +64624=>'AL', +64625=>'AL', +64626=>'AL', +64627=>'AL', +64628=>'AL', +64629=>'AL', +64630=>'AL', +64631=>'AL', +64632=>'AL', +64633=>'AL', +64634=>'AL', +64635=>'AL', +64636=>'AL', +64637=>'AL', +64638=>'AL', +64639=>'AL', +64640=>'AL', +64641=>'AL', +64642=>'AL', +64643=>'AL', +64644=>'AL', +64645=>'AL', +64646=>'AL', +64647=>'AL', +64648=>'AL', +64649=>'AL', +64650=>'AL', +64651=>'AL', +64652=>'AL', +64653=>'AL', +64654=>'AL', +64655=>'AL', +64656=>'AL', +64657=>'AL', +64658=>'AL', +64659=>'AL', +64660=>'AL', +64661=>'AL', +64662=>'AL', +64663=>'AL', +64664=>'AL', +64665=>'AL', +64666=>'AL', +64667=>'AL', +64668=>'AL', +64669=>'AL', +64670=>'AL', +64671=>'AL', +64672=>'AL', +64673=>'AL', +64674=>'AL', +64675=>'AL', +64676=>'AL', +64677=>'AL', +64678=>'AL', +64679=>'AL', +64680=>'AL', +64681=>'AL', +64682=>'AL', +64683=>'AL', +64684=>'AL', +64685=>'AL', +64686=>'AL', +64687=>'AL', +64688=>'AL', +64689=>'AL', +64690=>'AL', +64691=>'AL', +64692=>'AL', +64693=>'AL', +64694=>'AL', +64695=>'AL', +64696=>'AL', +64697=>'AL', +64698=>'AL', +64699=>'AL', +64700=>'AL', +64701=>'AL', +64702=>'AL', +64703=>'AL', +64704=>'AL', +64705=>'AL', +64706=>'AL', +64707=>'AL', +64708=>'AL', +64709=>'AL', +64710=>'AL', +64711=>'AL', +64712=>'AL', +64713=>'AL', +64714=>'AL', +64715=>'AL', +64716=>'AL', +64717=>'AL', +64718=>'AL', +64719=>'AL', +64720=>'AL', +64721=>'AL', +64722=>'AL', +64723=>'AL', +64724=>'AL', +64725=>'AL', +64726=>'AL', +64727=>'AL', +64728=>'AL', +64729=>'AL', +64730=>'AL', +64731=>'AL', +64732=>'AL', +64733=>'AL', +64734=>'AL', +64735=>'AL', +64736=>'AL', +64737=>'AL', +64738=>'AL', +64739=>'AL', +64740=>'AL', +64741=>'AL', +64742=>'AL', +64743=>'AL', +64744=>'AL', +64745=>'AL', +64746=>'AL', +64747=>'AL', +64748=>'AL', +64749=>'AL', +64750=>'AL', +64751=>'AL', +64752=>'AL', +64753=>'AL', +64754=>'AL', +64755=>'AL', +64756=>'AL', +64757=>'AL', +64758=>'AL', +64759=>'AL', +64760=>'AL', +64761=>'AL', +64762=>'AL', +64763=>'AL', +64764=>'AL', +64765=>'AL', +64766=>'AL', +64767=>'AL', +64768=>'AL', +64769=>'AL', +64770=>'AL', +64771=>'AL', +64772=>'AL', +64773=>'AL', +64774=>'AL', +64775=>'AL', +64776=>'AL', +64777=>'AL', +64778=>'AL', +64779=>'AL', +64780=>'AL', +64781=>'AL', +64782=>'AL', +64783=>'AL', +64784=>'AL', +64785=>'AL', +64786=>'AL', +64787=>'AL', +64788=>'AL', +64789=>'AL', +64790=>'AL', +64791=>'AL', +64792=>'AL', +64793=>'AL', +64794=>'AL', +64795=>'AL', +64796=>'AL', +64797=>'AL', +64798=>'AL', +64799=>'AL', +64800=>'AL', +64801=>'AL', +64802=>'AL', +64803=>'AL', +64804=>'AL', +64805=>'AL', +64806=>'AL', +64807=>'AL', +64808=>'AL', +64809=>'AL', +64810=>'AL', +64811=>'AL', +64812=>'AL', +64813=>'AL', +64814=>'AL', +64815=>'AL', +64816=>'AL', +64817=>'AL', +64818=>'AL', +64819=>'AL', +64820=>'AL', +64821=>'AL', +64822=>'AL', +64823=>'AL', +64824=>'AL', +64825=>'AL', +64826=>'AL', +64827=>'AL', +64828=>'AL', +64829=>'AL', +64830=>'ON', +64831=>'ON', +64848=>'AL', +64849=>'AL', +64850=>'AL', +64851=>'AL', +64852=>'AL', +64853=>'AL', +64854=>'AL', +64855=>'AL', +64856=>'AL', +64857=>'AL', +64858=>'AL', +64859=>'AL', +64860=>'AL', +64861=>'AL', +64862=>'AL', +64863=>'AL', +64864=>'AL', +64865=>'AL', +64866=>'AL', +64867=>'AL', +64868=>'AL', +64869=>'AL', +64870=>'AL', +64871=>'AL', +64872=>'AL', +64873=>'AL', +64874=>'AL', +64875=>'AL', +64876=>'AL', +64877=>'AL', +64878=>'AL', +64879=>'AL', +64880=>'AL', +64881=>'AL', +64882=>'AL', +64883=>'AL', +64884=>'AL', +64885=>'AL', +64886=>'AL', +64887=>'AL', +64888=>'AL', +64889=>'AL', +64890=>'AL', +64891=>'AL', +64892=>'AL', +64893=>'AL', +64894=>'AL', +64895=>'AL', +64896=>'AL', +64897=>'AL', +64898=>'AL', +64899=>'AL', +64900=>'AL', +64901=>'AL', +64902=>'AL', +64903=>'AL', +64904=>'AL', +64905=>'AL', +64906=>'AL', +64907=>'AL', +64908=>'AL', +64909=>'AL', +64910=>'AL', +64911=>'AL', +64914=>'AL', +64915=>'AL', +64916=>'AL', +64917=>'AL', +64918=>'AL', +64919=>'AL', +64920=>'AL', +64921=>'AL', +64922=>'AL', +64923=>'AL', +64924=>'AL', +64925=>'AL', +64926=>'AL', +64927=>'AL', +64928=>'AL', +64929=>'AL', +64930=>'AL', +64931=>'AL', +64932=>'AL', +64933=>'AL', +64934=>'AL', +64935=>'AL', +64936=>'AL', +64937=>'AL', +64938=>'AL', +64939=>'AL', +64940=>'AL', +64941=>'AL', +64942=>'AL', +64943=>'AL', +64944=>'AL', +64945=>'AL', +64946=>'AL', +64947=>'AL', +64948=>'AL', +64949=>'AL', +64950=>'AL', +64951=>'AL', +64952=>'AL', +64953=>'AL', +64954=>'AL', +64955=>'AL', +64956=>'AL', +64957=>'AL', +64958=>'AL', +64959=>'AL', +64960=>'AL', +64961=>'AL', +64962=>'AL', +64963=>'AL', +64964=>'AL', +64965=>'AL', +64966=>'AL', +64967=>'AL', +65008=>'AL', +65009=>'AL', +65010=>'AL', +65011=>'AL', +65012=>'AL', +65013=>'AL', +65014=>'AL', +65015=>'AL', +65016=>'AL', +65017=>'AL', +65018=>'AL', +65019=>'AL', +65020=>'AL', +65021=>'ON', +65024=>'NSM', +65025=>'NSM', +65026=>'NSM', +65027=>'NSM', +65028=>'NSM', +65029=>'NSM', +65030=>'NSM', +65031=>'NSM', +65032=>'NSM', +65033=>'NSM', +65034=>'NSM', +65035=>'NSM', +65036=>'NSM', +65037=>'NSM', +65038=>'NSM', +65039=>'NSM', +65040=>'ON', +65041=>'ON', +65042=>'ON', +65043=>'ON', +65044=>'ON', +65045=>'ON', +65046=>'ON', +65047=>'ON', +65048=>'ON', +65049=>'ON', +65056=>'NSM', +65057=>'NSM', +65058=>'NSM', +65059=>'NSM', +65072=>'ON', +65073=>'ON', +65074=>'ON', +65075=>'ON', +65076=>'ON', +65077=>'ON', +65078=>'ON', +65079=>'ON', +65080=>'ON', +65081=>'ON', +65082=>'ON', +65083=>'ON', +65084=>'ON', +65085=>'ON', +65086=>'ON', +65087=>'ON', +65088=>'ON', +65089=>'ON', +65090=>'ON', +65091=>'ON', +65092=>'ON', +65093=>'ON', +65094=>'ON', +65095=>'ON', +65096=>'ON', +65097=>'ON', +65098=>'ON', +65099=>'ON', +65100=>'ON', +65101=>'ON', +65102=>'ON', +65103=>'ON', +65104=>'CS', +65105=>'ON', +65106=>'CS', +65108=>'ON', +65109=>'CS', +65110=>'ON', +65111=>'ON', +65112=>'ON', +65113=>'ON', +65114=>'ON', +65115=>'ON', +65116=>'ON', +65117=>'ON', +65118=>'ON', +65119=>'ET', +65120=>'ON', +65121=>'ON', +65122=>'ES', +65123=>'ES', +65124=>'ON', +65125=>'ON', +65126=>'ON', +65128=>'ON', +65129=>'ET', +65130=>'ET', +65131=>'ON', +65136=>'AL', +65137=>'AL', +65138=>'AL', +65139=>'AL', +65140=>'AL', +65142=>'AL', +65143=>'AL', +65144=>'AL', +65145=>'AL', +65146=>'AL', +65147=>'AL', +65148=>'AL', +65149=>'AL', +65150=>'AL', +65151=>'AL', +65152=>'AL', +65153=>'AL', +65154=>'AL', +65155=>'AL', +65156=>'AL', +65157=>'AL', +65158=>'AL', +65159=>'AL', +65160=>'AL', +65161=>'AL', +65162=>'AL', +65163=>'AL', +65164=>'AL', +65165=>'AL', +65166=>'AL', +65167=>'AL', +65168=>'AL', +65169=>'AL', +65170=>'AL', +65171=>'AL', +65172=>'AL', +65173=>'AL', +65174=>'AL', +65175=>'AL', +65176=>'AL', +65177=>'AL', +65178=>'AL', +65179=>'AL', +65180=>'AL', +65181=>'AL', +65182=>'AL', +65183=>'AL', +65184=>'AL', +65185=>'AL', +65186=>'AL', +65187=>'AL', +65188=>'AL', +65189=>'AL', +65190=>'AL', +65191=>'AL', +65192=>'AL', +65193=>'AL', +65194=>'AL', +65195=>'AL', +65196=>'AL', +65197=>'AL', +65198=>'AL', +65199=>'AL', +65200=>'AL', +65201=>'AL', +65202=>'AL', +65203=>'AL', +65204=>'AL', +65205=>'AL', +65206=>'AL', +65207=>'AL', +65208=>'AL', +65209=>'AL', +65210=>'AL', +65211=>'AL', +65212=>'AL', +65213=>'AL', +65214=>'AL', +65215=>'AL', +65216=>'AL', +65217=>'AL', +65218=>'AL', +65219=>'AL', +65220=>'AL', +65221=>'AL', +65222=>'AL', +65223=>'AL', +65224=>'AL', +65225=>'AL', +65226=>'AL', +65227=>'AL', +65228=>'AL', +65229=>'AL', +65230=>'AL', +65231=>'AL', +65232=>'AL', +65233=>'AL', +65234=>'AL', +65235=>'AL', +65236=>'AL', +65237=>'AL', +65238=>'AL', +65239=>'AL', +65240=>'AL', +65241=>'AL', +65242=>'AL', +65243=>'AL', +65244=>'AL', +65245=>'AL', +65246=>'AL', +65247=>'AL', +65248=>'AL', +65249=>'AL', +65250=>'AL', +65251=>'AL', +65252=>'AL', +65253=>'AL', +65254=>'AL', +65255=>'AL', +65256=>'AL', +65257=>'AL', +65258=>'AL', +65259=>'AL', +65260=>'AL', +65261=>'AL', +65262=>'AL', +65263=>'AL', +65264=>'AL', +65265=>'AL', +65266=>'AL', +65267=>'AL', +65268=>'AL', +65269=>'AL', +65270=>'AL', +65271=>'AL', +65272=>'AL', +65273=>'AL', +65274=>'AL', +65275=>'AL', +65276=>'AL', +65279=>'BN', +65281=>'ON', +65282=>'ON', +65283=>'ET', +65284=>'ET', +65285=>'ET', +65286=>'ON', +65287=>'ON', +65288=>'ON', +65289=>'ON', +65290=>'ON', +65291=>'ES', +65292=>'CS', +65293=>'ES', +65294=>'CS', +65295=>'CS', +65296=>'EN', +65297=>'EN', +65298=>'EN', +65299=>'EN', +65300=>'EN', +65301=>'EN', +65302=>'EN', +65303=>'EN', +65304=>'EN', +65305=>'EN', +65306=>'CS', +65307=>'ON', +65308=>'ON', +65309=>'ON', +65310=>'ON', +65311=>'ON', +65312=>'ON', +65313=>'L', +65314=>'L', +65315=>'L', +65316=>'L', +65317=>'L', +65318=>'L', +65319=>'L', +65320=>'L', +65321=>'L', +65322=>'L', +65323=>'L', +65324=>'L', +65325=>'L', +65326=>'L', +65327=>'L', +65328=>'L', +65329=>'L', +65330=>'L', +65331=>'L', +65332=>'L', +65333=>'L', +65334=>'L', +65335=>'L', +65336=>'L', +65337=>'L', +65338=>'L', +65339=>'ON', +65340=>'ON', +65341=>'ON', +65342=>'ON', +65343=>'ON', +65344=>'ON', +65345=>'L', +65346=>'L', +65347=>'L', +65348=>'L', +65349=>'L', +65350=>'L', +65351=>'L', +65352=>'L', +65353=>'L', +65354=>'L', +65355=>'L', +65356=>'L', +65357=>'L', +65358=>'L', +65359=>'L', +65360=>'L', +65361=>'L', +65362=>'L', +65363=>'L', +65364=>'L', +65365=>'L', +65366=>'L', +65367=>'L', +65368=>'L', +65369=>'L', +65370=>'L', +65371=>'ON', +65372=>'ON', +65373=>'ON', +65374=>'ON', +65375=>'ON', +65376=>'ON', +65377=>'ON', +65378=>'ON', +65379=>'ON', +65380=>'ON', +65381=>'ON', +65382=>'L', +65383=>'L', +65384=>'L', +65385=>'L', +65386=>'L', +65387=>'L', +65388=>'L', +65389=>'L', +65390=>'L', +65391=>'L', +65392=>'L', +65393=>'L', +65394=>'L', +65395=>'L', +65396=>'L', +65397=>'L', +65398=>'L', +65399=>'L', +65400=>'L', +65401=>'L', +65402=>'L', +65403=>'L', +65404=>'L', +65405=>'L', +65406=>'L', +65407=>'L', +65408=>'L', +65409=>'L', +65410=>'L', +65411=>'L', +65412=>'L', +65413=>'L', +65414=>'L', +65415=>'L', +65416=>'L', +65417=>'L', +65418=>'L', +65419=>'L', +65420=>'L', +65421=>'L', +65422=>'L', +65423=>'L', +65424=>'L', +65425=>'L', +65426=>'L', +65427=>'L', +65428=>'L', +65429=>'L', +65430=>'L', +65431=>'L', +65432=>'L', +65433=>'L', +65434=>'L', +65435=>'L', +65436=>'L', +65437=>'L', +65438=>'L', +65439=>'L', +65440=>'L', +65441=>'L', +65442=>'L', +65443=>'L', +65444=>'L', +65445=>'L', +65446=>'L', +65447=>'L', +65448=>'L', +65449=>'L', +65450=>'L', +65451=>'L', +65452=>'L', +65453=>'L', +65454=>'L', +65455=>'L', +65456=>'L', +65457=>'L', +65458=>'L', +65459=>'L', +65460=>'L', +65461=>'L', +65462=>'L', +65463=>'L', +65464=>'L', +65465=>'L', +65466=>'L', +65467=>'L', +65468=>'L', +65469=>'L', +65470=>'L', +65474=>'L', +65475=>'L', +65476=>'L', +65477=>'L', +65478=>'L', +65479=>'L', +65482=>'L', +65483=>'L', +65484=>'L', +65485=>'L', +65486=>'L', +65487=>'L', +65490=>'L', +65491=>'L', +65492=>'L', +65493=>'L', +65494=>'L', +65495=>'L', +65498=>'L', +65499=>'L', +65500=>'L', +65504=>'ET', +65505=>'ET', +65506=>'ON', +65507=>'ON', +65508=>'ON', +65509=>'ET', +65510=>'ET', +65512=>'ON', +65513=>'ON', +65514=>'ON', +65515=>'ON', +65516=>'ON', +65517=>'ON', +65518=>'ON', +65529=>'ON', +65530=>'ON', +65531=>'ON', +65532=>'ON', +65533=>'ON', +65536=>'L', +65537=>'L', +65538=>'L', +65539=>'L', +65540=>'L', +65541=>'L', +65542=>'L', +65543=>'L', +65544=>'L', +65545=>'L', +65546=>'L', +65547=>'L', +65549=>'L', +65550=>'L', +65551=>'L', +65552=>'L', +65553=>'L', +65554=>'L', +65555=>'L', +65556=>'L', +65557=>'L', +65558=>'L', +65559=>'L', +65560=>'L', +65561=>'L', +65562=>'L', +65563=>'L', +65564=>'L', +65565=>'L', +65566=>'L', +65567=>'L', +65568=>'L', +65569=>'L', +65570=>'L', +65571=>'L', +65572=>'L', +65573=>'L', +65574=>'L', +65576=>'L', +65577=>'L', +65578=>'L', +65579=>'L', +65580=>'L', +65581=>'L', +65582=>'L', +65583=>'L', +65584=>'L', +65585=>'L', +65586=>'L', +65587=>'L', +65588=>'L', +65589=>'L', +65590=>'L', +65591=>'L', +65592=>'L', +65593=>'L', +65594=>'L', +65596=>'L', +65597=>'L', +65599=>'L', +65600=>'L', +65601=>'L', +65602=>'L', +65603=>'L', +65604=>'L', +65605=>'L', +65606=>'L', +65607=>'L', +65608=>'L', +65609=>'L', +65610=>'L', +65611=>'L', +65612=>'L', +65613=>'L', +65616=>'L', +65617=>'L', +65618=>'L', +65619=>'L', +65620=>'L', +65621=>'L', +65622=>'L', +65623=>'L', +65624=>'L', +65625=>'L', +65626=>'L', +65627=>'L', +65628=>'L', +65629=>'L', +65664=>'L', +65665=>'L', +65666=>'L', +65667=>'L', +65668=>'L', +65669=>'L', +65670=>'L', +65671=>'L', +65672=>'L', +65673=>'L', +65674=>'L', +65675=>'L', +65676=>'L', +65677=>'L', +65678=>'L', +65679=>'L', +65680=>'L', +65681=>'L', +65682=>'L', +65683=>'L', +65684=>'L', +65685=>'L', +65686=>'L', +65687=>'L', +65688=>'L', +65689=>'L', +65690=>'L', +65691=>'L', +65692=>'L', +65693=>'L', +65694=>'L', +65695=>'L', +65696=>'L', +65697=>'L', +65698=>'L', +65699=>'L', +65700=>'L', +65701=>'L', +65702=>'L', +65703=>'L', +65704=>'L', +65705=>'L', +65706=>'L', +65707=>'L', +65708=>'L', +65709=>'L', +65710=>'L', +65711=>'L', +65712=>'L', +65713=>'L', +65714=>'L', +65715=>'L', +65716=>'L', +65717=>'L', +65718=>'L', +65719=>'L', +65720=>'L', +65721=>'L', +65722=>'L', +65723=>'L', +65724=>'L', +65725=>'L', +65726=>'L', +65727=>'L', +65728=>'L', +65729=>'L', +65730=>'L', +65731=>'L', +65732=>'L', +65733=>'L', +65734=>'L', +65735=>'L', +65736=>'L', +65737=>'L', +65738=>'L', +65739=>'L', +65740=>'L', +65741=>'L', +65742=>'L', +65743=>'L', +65744=>'L', +65745=>'L', +65746=>'L', +65747=>'L', +65748=>'L', +65749=>'L', +65750=>'L', +65751=>'L', +65752=>'L', +65753=>'L', +65754=>'L', +65755=>'L', +65756=>'L', +65757=>'L', +65758=>'L', +65759=>'L', +65760=>'L', +65761=>'L', +65762=>'L', +65763=>'L', +65764=>'L', +65765=>'L', +65766=>'L', +65767=>'L', +65768=>'L', +65769=>'L', +65770=>'L', +65771=>'L', +65772=>'L', +65773=>'L', +65774=>'L', +65775=>'L', +65776=>'L', +65777=>'L', +65778=>'L', +65779=>'L', +65780=>'L', +65781=>'L', +65782=>'L', +65783=>'L', +65784=>'L', +65785=>'L', +65786=>'L', +65792=>'L', +65793=>'ON', +65794=>'L', +65799=>'L', +65800=>'L', +65801=>'L', +65802=>'L', +65803=>'L', +65804=>'L', +65805=>'L', +65806=>'L', +65807=>'L', +65808=>'L', +65809=>'L', +65810=>'L', +65811=>'L', +65812=>'L', +65813=>'L', +65814=>'L', +65815=>'L', +65816=>'L', +65817=>'L', +65818=>'L', +65819=>'L', +65820=>'L', +65821=>'L', +65822=>'L', +65823=>'L', +65824=>'L', +65825=>'L', +65826=>'L', +65827=>'L', +65828=>'L', +65829=>'L', +65830=>'L', +65831=>'L', +65832=>'L', +65833=>'L', +65834=>'L', +65835=>'L', +65836=>'L', +65837=>'L', +65838=>'L', +65839=>'L', +65840=>'L', +65841=>'L', +65842=>'L', +65843=>'L', +65847=>'L', +65848=>'L', +65849=>'L', +65850=>'L', +65851=>'L', +65852=>'L', +65853=>'L', +65854=>'L', +65855=>'L', +65856=>'ON', +65857=>'ON', +65858=>'ON', +65859=>'ON', +65860=>'ON', +65861=>'ON', +65862=>'ON', +65863=>'ON', +65864=>'ON', +65865=>'ON', +65866=>'ON', +65867=>'ON', +65868=>'ON', +65869=>'ON', +65870=>'ON', +65871=>'ON', +65872=>'ON', +65873=>'ON', +65874=>'ON', +65875=>'ON', +65876=>'ON', +65877=>'ON', +65878=>'ON', +65879=>'ON', +65880=>'ON', +65881=>'ON', +65882=>'ON', +65883=>'ON', +65884=>'ON', +65885=>'ON', +65886=>'ON', +65887=>'ON', +65888=>'ON', +65889=>'ON', +65890=>'ON', +65891=>'ON', +65892=>'ON', +65893=>'ON', +65894=>'ON', +65895=>'ON', +65896=>'ON', +65897=>'ON', +65898=>'ON', +65899=>'ON', +65900=>'ON', +65901=>'ON', +65902=>'ON', +65903=>'ON', +65904=>'ON', +65905=>'ON', +65906=>'ON', +65907=>'ON', +65908=>'ON', +65909=>'ON', +65910=>'ON', +65911=>'ON', +65912=>'ON', +65913=>'ON', +65914=>'ON', +65915=>'ON', +65916=>'ON', +65917=>'ON', +65918=>'ON', +65919=>'ON', +65920=>'ON', +65921=>'ON', +65922=>'ON', +65923=>'ON', +65924=>'ON', +65925=>'ON', +65926=>'ON', +65927=>'ON', +65928=>'ON', +65929=>'ON', +65930=>'ON', +66304=>'L', +66305=>'L', +66306=>'L', +66307=>'L', +66308=>'L', +66309=>'L', +66310=>'L', +66311=>'L', +66312=>'L', +66313=>'L', +66314=>'L', +66315=>'L', +66316=>'L', +66317=>'L', +66318=>'L', +66319=>'L', +66320=>'L', +66321=>'L', +66322=>'L', +66323=>'L', +66324=>'L', +66325=>'L', +66326=>'L', +66327=>'L', +66328=>'L', +66329=>'L', +66330=>'L', +66331=>'L', +66332=>'L', +66333=>'L', +66334=>'L', +66336=>'L', +66337=>'L', +66338=>'L', +66339=>'L', +66352=>'L', +66353=>'L', +66354=>'L', +66355=>'L', +66356=>'L', +66357=>'L', +66358=>'L', +66359=>'L', +66360=>'L', +66361=>'L', +66362=>'L', +66363=>'L', +66364=>'L', +66365=>'L', +66366=>'L', +66367=>'L', +66368=>'L', +66369=>'L', +66370=>'L', +66371=>'L', +66372=>'L', +66373=>'L', +66374=>'L', +66375=>'L', +66376=>'L', +66377=>'L', +66378=>'L', +66432=>'L', +66433=>'L', +66434=>'L', +66435=>'L', +66436=>'L', +66437=>'L', +66438=>'L', +66439=>'L', +66440=>'L', +66441=>'L', +66442=>'L', +66443=>'L', +66444=>'L', +66445=>'L', +66446=>'L', +66447=>'L', +66448=>'L', +66449=>'L', +66450=>'L', +66451=>'L', +66452=>'L', +66453=>'L', +66454=>'L', +66455=>'L', +66456=>'L', +66457=>'L', +66458=>'L', +66459=>'L', +66460=>'L', +66461=>'L', +66463=>'L', +66464=>'L', +66465=>'L', +66466=>'L', +66467=>'L', +66468=>'L', +66469=>'L', +66470=>'L', +66471=>'L', +66472=>'L', +66473=>'L', +66474=>'L', +66475=>'L', +66476=>'L', +66477=>'L', +66478=>'L', +66479=>'L', +66480=>'L', +66481=>'L', +66482=>'L', +66483=>'L', +66484=>'L', +66485=>'L', +66486=>'L', +66487=>'L', +66488=>'L', +66489=>'L', +66490=>'L', +66491=>'L', +66492=>'L', +66493=>'L', +66494=>'L', +66495=>'L', +66496=>'L', +66497=>'L', +66498=>'L', +66499=>'L', +66504=>'L', +66505=>'L', +66506=>'L', +66507=>'L', +66508=>'L', +66509=>'L', +66510=>'L', +66511=>'L', +66512=>'L', +66513=>'L', +66514=>'L', +66515=>'L', +66516=>'L', +66517=>'L', +66560=>'L', +66561=>'L', +66562=>'L', +66563=>'L', +66564=>'L', +66565=>'L', +66566=>'L', +66567=>'L', +66568=>'L', +66569=>'L', +66570=>'L', +66571=>'L', +66572=>'L', +66573=>'L', +66574=>'L', +66575=>'L', +66576=>'L', +66577=>'L', +66578=>'L', +66579=>'L', +66580=>'L', +66581=>'L', +66582=>'L', +66583=>'L', +66584=>'L', +66585=>'L', +66586=>'L', +66587=>'L', +66588=>'L', +66589=>'L', +66590=>'L', +66591=>'L', +66592=>'L', +66593=>'L', +66594=>'L', +66595=>'L', +66596=>'L', +66597=>'L', +66598=>'L', +66599=>'L', +66600=>'L', +66601=>'L', +66602=>'L', +66603=>'L', +66604=>'L', +66605=>'L', +66606=>'L', +66607=>'L', +66608=>'L', +66609=>'L', +66610=>'L', +66611=>'L', +66612=>'L', +66613=>'L', +66614=>'L', +66615=>'L', +66616=>'L', +66617=>'L', +66618=>'L', +66619=>'L', +66620=>'L', +66621=>'L', +66622=>'L', +66623=>'L', +66624=>'L', +66625=>'L', +66626=>'L', +66627=>'L', +66628=>'L', +66629=>'L', +66630=>'L', +66631=>'L', +66632=>'L', +66633=>'L', +66634=>'L', +66635=>'L', +66636=>'L', +66637=>'L', +66638=>'L', +66639=>'L', +66640=>'L', +66641=>'L', +66642=>'L', +66643=>'L', +66644=>'L', +66645=>'L', +66646=>'L', +66647=>'L', +66648=>'L', +66649=>'L', +66650=>'L', +66651=>'L', +66652=>'L', +66653=>'L', +66654=>'L', +66655=>'L', +66656=>'L', +66657=>'L', +66658=>'L', +66659=>'L', +66660=>'L', +66661=>'L', +66662=>'L', +66663=>'L', +66664=>'L', +66665=>'L', +66666=>'L', +66667=>'L', +66668=>'L', +66669=>'L', +66670=>'L', +66671=>'L', +66672=>'L', +66673=>'L', +66674=>'L', +66675=>'L', +66676=>'L', +66677=>'L', +66678=>'L', +66679=>'L', +66680=>'L', +66681=>'L', +66682=>'L', +66683=>'L', +66684=>'L', +66685=>'L', +66686=>'L', +66687=>'L', +66688=>'L', +66689=>'L', +66690=>'L', +66691=>'L', +66692=>'L', +66693=>'L', +66694=>'L', +66695=>'L', +66696=>'L', +66697=>'L', +66698=>'L', +66699=>'L', +66700=>'L', +66701=>'L', +66702=>'L', +66703=>'L', +66704=>'L', +66705=>'L', +66706=>'L', +66707=>'L', +66708=>'L', +66709=>'L', +66710=>'L', +66711=>'L', +66712=>'L', +66713=>'L', +66714=>'L', +66715=>'L', +66716=>'L', +66717=>'L', +66720=>'L', +66721=>'L', +66722=>'L', +66723=>'L', +66724=>'L', +66725=>'L', +66726=>'L', +66727=>'L', +66728=>'L', +66729=>'L', +67584=>'R', +67585=>'R', +67586=>'R', +67587=>'R', +67588=>'R', +67589=>'R', +67592=>'R', +67594=>'R', +67595=>'R', +67596=>'R', +67597=>'R', +67598=>'R', +67599=>'R', +67600=>'R', +67601=>'R', +67602=>'R', +67603=>'R', +67604=>'R', +67605=>'R', +67606=>'R', +67607=>'R', +67608=>'R', +67609=>'R', +67610=>'R', +67611=>'R', +67612=>'R', +67613=>'R', +67614=>'R', +67615=>'R', +67616=>'R', +67617=>'R', +67618=>'R', +67619=>'R', +67620=>'R', +67621=>'R', +67622=>'R', +67623=>'R', +67624=>'R', +67625=>'R', +67626=>'R', +67627=>'R', +67628=>'R', +67629=>'R', +67630=>'R', +67631=>'R', +67632=>'R', +67633=>'R', +67634=>'R', +67635=>'R', +67636=>'R', +67637=>'R', +67639=>'R', +67640=>'R', +67644=>'R', +67647=>'R', +67840=>'R', +67841=>'R', +67842=>'R', +67843=>'R', +67844=>'R', +67845=>'R', +67846=>'R', +67847=>'R', +67848=>'R', +67849=>'R', +67850=>'R', +67851=>'R', +67852=>'R', +67853=>'R', +67854=>'R', +67855=>'R', +67856=>'R', +67857=>'R', +67858=>'R', +67859=>'R', +67860=>'R', +67861=>'R', +67862=>'R', +67863=>'R', +67864=>'R', +67865=>'R', +67871=>'ON', +68096=>'R', +68097=>'NSM', +68098=>'NSM', +68099=>'NSM', +68101=>'NSM', +68102=>'NSM', +68108=>'NSM', +68109=>'NSM', +68110=>'NSM', +68111=>'NSM', +68112=>'R', +68113=>'R', +68114=>'R', +68115=>'R', +68117=>'R', +68118=>'R', +68119=>'R', +68121=>'R', +68122=>'R', +68123=>'R', +68124=>'R', +68125=>'R', +68126=>'R', +68127=>'R', +68128=>'R', +68129=>'R', +68130=>'R', +68131=>'R', +68132=>'R', +68133=>'R', +68134=>'R', +68135=>'R', +68136=>'R', +68137=>'R', +68138=>'R', +68139=>'R', +68140=>'R', +68141=>'R', +68142=>'R', +68143=>'R', +68144=>'R', +68145=>'R', +68146=>'R', +68147=>'R', +68152=>'NSM', +68153=>'NSM', +68154=>'NSM', +68159=>'NSM', +68160=>'R', +68161=>'R', +68162=>'R', +68163=>'R', +68164=>'R', +68165=>'R', +68166=>'R', +68167=>'R', +68176=>'R', +68177=>'R', +68178=>'R', +68179=>'R', +68180=>'R', +68181=>'R', +68182=>'R', +68183=>'R', +68184=>'R', +73728=>'L', +73729=>'L', +73730=>'L', +73731=>'L', +73732=>'L', +73733=>'L', +73734=>'L', +73735=>'L', +73736=>'L', +73737=>'L', +73738=>'L', +73739=>'L', +73740=>'L', +73741=>'L', +73742=>'L', +73743=>'L', +73744=>'L', +73745=>'L', +73746=>'L', +73747=>'L', +73748=>'L', +73749=>'L', +73750=>'L', +73751=>'L', +73752=>'L', +73753=>'L', +73754=>'L', +73755=>'L', +73756=>'L', +73757=>'L', +73758=>'L', +73759=>'L', +73760=>'L', +73761=>'L', +73762=>'L', +73763=>'L', +73764=>'L', +73765=>'L', +73766=>'L', +73767=>'L', +73768=>'L', +73769=>'L', +73770=>'L', +73771=>'L', +73772=>'L', +73773=>'L', +73774=>'L', +73775=>'L', +73776=>'L', +73777=>'L', +73778=>'L', +73779=>'L', +73780=>'L', +73781=>'L', +73782=>'L', +73783=>'L', +73784=>'L', +73785=>'L', +73786=>'L', +73787=>'L', +73788=>'L', +73789=>'L', +73790=>'L', +73791=>'L', +73792=>'L', +73793=>'L', +73794=>'L', +73795=>'L', +73796=>'L', +73797=>'L', +73798=>'L', +73799=>'L', +73800=>'L', +73801=>'L', +73802=>'L', +73803=>'L', +73804=>'L', +73805=>'L', +73806=>'L', +73807=>'L', +73808=>'L', +73809=>'L', +73810=>'L', +73811=>'L', +73812=>'L', +73813=>'L', +73814=>'L', +73815=>'L', +73816=>'L', +73817=>'L', +73818=>'L', +73819=>'L', +73820=>'L', +73821=>'L', +73822=>'L', +73823=>'L', +73824=>'L', +73825=>'L', +73826=>'L', +73827=>'L', +73828=>'L', +73829=>'L', +73830=>'L', +73831=>'L', +73832=>'L', +73833=>'L', +73834=>'L', +73835=>'L', +73836=>'L', +73837=>'L', +73838=>'L', +73839=>'L', +73840=>'L', +73841=>'L', +73842=>'L', +73843=>'L', +73844=>'L', +73845=>'L', +73846=>'L', +73847=>'L', +73848=>'L', +73849=>'L', +73850=>'L', +73851=>'L', +73852=>'L', +73853=>'L', +73854=>'L', +73855=>'L', +73856=>'L', +73857=>'L', +73858=>'L', +73859=>'L', +73860=>'L', +73861=>'L', +73862=>'L', +73863=>'L', +73864=>'L', +73865=>'L', +73866=>'L', +73867=>'L', +73868=>'L', +73869=>'L', +73870=>'L', +73871=>'L', +73872=>'L', +73873=>'L', +73874=>'L', +73875=>'L', +73876=>'L', +73877=>'L', +73878=>'L', +73879=>'L', +73880=>'L', +73881=>'L', +73882=>'L', +73883=>'L', +73884=>'L', +73885=>'L', +73886=>'L', +73887=>'L', +73888=>'L', +73889=>'L', +73890=>'L', +73891=>'L', +73892=>'L', +73893=>'L', +73894=>'L', +73895=>'L', +73896=>'L', +73897=>'L', +73898=>'L', +73899=>'L', +73900=>'L', +73901=>'L', +73902=>'L', +73903=>'L', +73904=>'L', +73905=>'L', +73906=>'L', +73907=>'L', +73908=>'L', +73909=>'L', +73910=>'L', +73911=>'L', +73912=>'L', +73913=>'L', +73914=>'L', +73915=>'L', +73916=>'L', +73917=>'L', +73918=>'L', +73919=>'L', +73920=>'L', +73921=>'L', +73922=>'L', +73923=>'L', +73924=>'L', +73925=>'L', +73926=>'L', +73927=>'L', +73928=>'L', +73929=>'L', +73930=>'L', +73931=>'L', +73932=>'L', +73933=>'L', +73934=>'L', +73935=>'L', +73936=>'L', +73937=>'L', +73938=>'L', +73939=>'L', +73940=>'L', +73941=>'L', +73942=>'L', +73943=>'L', +73944=>'L', +73945=>'L', +73946=>'L', +73947=>'L', +73948=>'L', +73949=>'L', +73950=>'L', +73951=>'L', +73952=>'L', +73953=>'L', +73954=>'L', +73955=>'L', +73956=>'L', +73957=>'L', +73958=>'L', +73959=>'L', +73960=>'L', +73961=>'L', +73962=>'L', +73963=>'L', +73964=>'L', +73965=>'L', +73966=>'L', +73967=>'L', +73968=>'L', +73969=>'L', +73970=>'L', +73971=>'L', +73972=>'L', +73973=>'L', +73974=>'L', +73975=>'L', +73976=>'L', +73977=>'L', +73978=>'L', +73979=>'L', +73980=>'L', +73981=>'L', +73982=>'L', +73983=>'L', +73984=>'L', +73985=>'L', +73986=>'L', +73987=>'L', +73988=>'L', +73989=>'L', +73990=>'L', +73991=>'L', +73992=>'L', +73993=>'L', +73994=>'L', +73995=>'L', +73996=>'L', +73997=>'L', +73998=>'L', +73999=>'L', +74000=>'L', +74001=>'L', +74002=>'L', +74003=>'L', +74004=>'L', +74005=>'L', +74006=>'L', +74007=>'L', +74008=>'L', +74009=>'L', +74010=>'L', +74011=>'L', +74012=>'L', +74013=>'L', +74014=>'L', +74015=>'L', +74016=>'L', +74017=>'L', +74018=>'L', +74019=>'L', +74020=>'L', +74021=>'L', +74022=>'L', +74023=>'L', +74024=>'L', +74025=>'L', +74026=>'L', +74027=>'L', +74028=>'L', +74029=>'L', +74030=>'L', +74031=>'L', +74032=>'L', +74033=>'L', +74034=>'L', +74035=>'L', +74036=>'L', +74037=>'L', +74038=>'L', +74039=>'L', +74040=>'L', +74041=>'L', +74042=>'L', +74043=>'L', +74044=>'L', +74045=>'L', +74046=>'L', +74047=>'L', +74048=>'L', +74049=>'L', +74050=>'L', +74051=>'L', +74052=>'L', +74053=>'L', +74054=>'L', +74055=>'L', +74056=>'L', +74057=>'L', +74058=>'L', +74059=>'L', +74060=>'L', +74061=>'L', +74062=>'L', +74063=>'L', +74064=>'L', +74065=>'L', +74066=>'L', +74067=>'L', +74068=>'L', +74069=>'L', +74070=>'L', +74071=>'L', +74072=>'L', +74073=>'L', +74074=>'L', +74075=>'L', +74076=>'L', +74077=>'L', +74078=>'L', +74079=>'L', +74080=>'L', +74081=>'L', +74082=>'L', +74083=>'L', +74084=>'L', +74085=>'L', +74086=>'L', +74087=>'L', +74088=>'L', +74089=>'L', +74090=>'L', +74091=>'L', +74092=>'L', +74093=>'L', +74094=>'L', +74095=>'L', +74096=>'L', +74097=>'L', +74098=>'L', +74099=>'L', +74100=>'L', +74101=>'L', +74102=>'L', +74103=>'L', +74104=>'L', +74105=>'L', +74106=>'L', +74107=>'L', +74108=>'L', +74109=>'L', +74110=>'L', +74111=>'L', +74112=>'L', +74113=>'L', +74114=>'L', +74115=>'L', +74116=>'L', +74117=>'L', +74118=>'L', +74119=>'L', +74120=>'L', +74121=>'L', +74122=>'L', +74123=>'L', +74124=>'L', +74125=>'L', +74126=>'L', +74127=>'L', +74128=>'L', +74129=>'L', +74130=>'L', +74131=>'L', +74132=>'L', +74133=>'L', +74134=>'L', +74135=>'L', +74136=>'L', +74137=>'L', +74138=>'L', +74139=>'L', +74140=>'L', +74141=>'L', +74142=>'L', +74143=>'L', +74144=>'L', +74145=>'L', +74146=>'L', +74147=>'L', +74148=>'L', +74149=>'L', +74150=>'L', +74151=>'L', +74152=>'L', +74153=>'L', +74154=>'L', +74155=>'L', +74156=>'L', +74157=>'L', +74158=>'L', +74159=>'L', +74160=>'L', +74161=>'L', +74162=>'L', +74163=>'L', +74164=>'L', +74165=>'L', +74166=>'L', +74167=>'L', +74168=>'L', +74169=>'L', +74170=>'L', +74171=>'L', +74172=>'L', +74173=>'L', +74174=>'L', +74175=>'L', +74176=>'L', +74177=>'L', +74178=>'L', +74179=>'L', +74180=>'L', +74181=>'L', +74182=>'L', +74183=>'L', +74184=>'L', +74185=>'L', +74186=>'L', +74187=>'L', +74188=>'L', +74189=>'L', +74190=>'L', +74191=>'L', +74192=>'L', +74193=>'L', +74194=>'L', +74195=>'L', +74196=>'L', +74197=>'L', +74198=>'L', +74199=>'L', +74200=>'L', +74201=>'L', +74202=>'L', +74203=>'L', +74204=>'L', +74205=>'L', +74206=>'L', +74207=>'L', +74208=>'L', +74209=>'L', +74210=>'L', +74211=>'L', +74212=>'L', +74213=>'L', +74214=>'L', +74215=>'L', +74216=>'L', +74217=>'L', +74218=>'L', +74219=>'L', +74220=>'L', +74221=>'L', +74222=>'L', +74223=>'L', +74224=>'L', +74225=>'L', +74226=>'L', +74227=>'L', +74228=>'L', +74229=>'L', +74230=>'L', +74231=>'L', +74232=>'L', +74233=>'L', +74234=>'L', +74235=>'L', +74236=>'L', +74237=>'L', +74238=>'L', +74239=>'L', +74240=>'L', +74241=>'L', +74242=>'L', +74243=>'L', +74244=>'L', +74245=>'L', +74246=>'L', +74247=>'L', +74248=>'L', +74249=>'L', +74250=>'L', +74251=>'L', +74252=>'L', +74253=>'L', +74254=>'L', +74255=>'L', +74256=>'L', +74257=>'L', +74258=>'L', +74259=>'L', +74260=>'L', +74261=>'L', +74262=>'L', +74263=>'L', +74264=>'L', +74265=>'L', +74266=>'L', +74267=>'L', +74268=>'L', +74269=>'L', +74270=>'L', +74271=>'L', +74272=>'L', +74273=>'L', +74274=>'L', +74275=>'L', +74276=>'L', +74277=>'L', +74278=>'L', +74279=>'L', +74280=>'L', +74281=>'L', +74282=>'L', +74283=>'L', +74284=>'L', +74285=>'L', +74286=>'L', +74287=>'L', +74288=>'L', +74289=>'L', +74290=>'L', +74291=>'L', +74292=>'L', +74293=>'L', +74294=>'L', +74295=>'L', +74296=>'L', +74297=>'L', +74298=>'L', +74299=>'L', +74300=>'L', +74301=>'L', +74302=>'L', +74303=>'L', +74304=>'L', +74305=>'L', +74306=>'L', +74307=>'L', +74308=>'L', +74309=>'L', +74310=>'L', +74311=>'L', +74312=>'L', +74313=>'L', +74314=>'L', +74315=>'L', +74316=>'L', +74317=>'L', +74318=>'L', +74319=>'L', +74320=>'L', +74321=>'L', +74322=>'L', +74323=>'L', +74324=>'L', +74325=>'L', +74326=>'L', +74327=>'L', +74328=>'L', +74329=>'L', +74330=>'L', +74331=>'L', +74332=>'L', +74333=>'L', +74334=>'L', +74335=>'L', +74336=>'L', +74337=>'L', +74338=>'L', +74339=>'L', +74340=>'L', +74341=>'L', +74342=>'L', +74343=>'L', +74344=>'L', +74345=>'L', +74346=>'L', +74347=>'L', +74348=>'L', +74349=>'L', +74350=>'L', +74351=>'L', +74352=>'L', +74353=>'L', +74354=>'L', +74355=>'L', +74356=>'L', +74357=>'L', +74358=>'L', +74359=>'L', +74360=>'L', +74361=>'L', +74362=>'L', +74363=>'L', +74364=>'L', +74365=>'L', +74366=>'L', +74367=>'L', +74368=>'L', +74369=>'L', +74370=>'L', +74371=>'L', +74372=>'L', +74373=>'L', +74374=>'L', +74375=>'L', +74376=>'L', +74377=>'L', +74378=>'L', +74379=>'L', +74380=>'L', +74381=>'L', +74382=>'L', +74383=>'L', +74384=>'L', +74385=>'L', +74386=>'L', +74387=>'L', +74388=>'L', +74389=>'L', +74390=>'L', +74391=>'L', +74392=>'L', +74393=>'L', +74394=>'L', +74395=>'L', +74396=>'L', +74397=>'L', +74398=>'L', +74399=>'L', +74400=>'L', +74401=>'L', +74402=>'L', +74403=>'L', +74404=>'L', +74405=>'L', +74406=>'L', +74407=>'L', +74408=>'L', +74409=>'L', +74410=>'L', +74411=>'L', +74412=>'L', +74413=>'L', +74414=>'L', +74415=>'L', +74416=>'L', +74417=>'L', +74418=>'L', +74419=>'L', +74420=>'L', +74421=>'L', +74422=>'L', +74423=>'L', +74424=>'L', +74425=>'L', +74426=>'L', +74427=>'L', +74428=>'L', +74429=>'L', +74430=>'L', +74431=>'L', +74432=>'L', +74433=>'L', +74434=>'L', +74435=>'L', +74436=>'L', +74437=>'L', +74438=>'L', +74439=>'L', +74440=>'L', +74441=>'L', +74442=>'L', +74443=>'L', +74444=>'L', +74445=>'L', +74446=>'L', +74447=>'L', +74448=>'L', +74449=>'L', +74450=>'L', +74451=>'L', +74452=>'L', +74453=>'L', +74454=>'L', +74455=>'L', +74456=>'L', +74457=>'L', +74458=>'L', +74459=>'L', +74460=>'L', +74461=>'L', +74462=>'L', +74463=>'L', +74464=>'L', +74465=>'L', +74466=>'L', +74467=>'L', +74468=>'L', +74469=>'L', +74470=>'L', +74471=>'L', +74472=>'L', +74473=>'L', +74474=>'L', +74475=>'L', +74476=>'L', +74477=>'L', +74478=>'L', +74479=>'L', +74480=>'L', +74481=>'L', +74482=>'L', +74483=>'L', +74484=>'L', +74485=>'L', +74486=>'L', +74487=>'L', +74488=>'L', +74489=>'L', +74490=>'L', +74491=>'L', +74492=>'L', +74493=>'L', +74494=>'L', +74495=>'L', +74496=>'L', +74497=>'L', +74498=>'L', +74499=>'L', +74500=>'L', +74501=>'L', +74502=>'L', +74503=>'L', +74504=>'L', +74505=>'L', +74506=>'L', +74507=>'L', +74508=>'L', +74509=>'L', +74510=>'L', +74511=>'L', +74512=>'L', +74513=>'L', +74514=>'L', +74515=>'L', +74516=>'L', +74517=>'L', +74518=>'L', +74519=>'L', +74520=>'L', +74521=>'L', +74522=>'L', +74523=>'L', +74524=>'L', +74525=>'L', +74526=>'L', +74527=>'L', +74528=>'L', +74529=>'L', +74530=>'L', +74531=>'L', +74532=>'L', +74533=>'L', +74534=>'L', +74535=>'L', +74536=>'L', +74537=>'L', +74538=>'L', +74539=>'L', +74540=>'L', +74541=>'L', +74542=>'L', +74543=>'L', +74544=>'L', +74545=>'L', +74546=>'L', +74547=>'L', +74548=>'L', +74549=>'L', +74550=>'L', +74551=>'L', +74552=>'L', +74553=>'L', +74554=>'L', +74555=>'L', +74556=>'L', +74557=>'L', +74558=>'L', +74559=>'L', +74560=>'L', +74561=>'L', +74562=>'L', +74563=>'L', +74564=>'L', +74565=>'L', +74566=>'L', +74567=>'L', +74568=>'L', +74569=>'L', +74570=>'L', +74571=>'L', +74572=>'L', +74573=>'L', +74574=>'L', +74575=>'L', +74576=>'L', +74577=>'L', +74578=>'L', +74579=>'L', +74580=>'L', +74581=>'L', +74582=>'L', +74583=>'L', +74584=>'L', +74585=>'L', +74586=>'L', +74587=>'L', +74588=>'L', +74589=>'L', +74590=>'L', +74591=>'L', +74592=>'L', +74593=>'L', +74594=>'L', +74595=>'L', +74596=>'L', +74597=>'L', +74598=>'L', +74599=>'L', +74600=>'L', +74601=>'L', +74602=>'L', +74603=>'L', +74604=>'L', +74605=>'L', +74606=>'L', +74752=>'L', +74753=>'L', +74754=>'L', +74755=>'L', +74756=>'L', +74757=>'L', +74758=>'L', +74759=>'L', +74760=>'L', +74761=>'L', +74762=>'L', +74763=>'L', +74764=>'L', +74765=>'L', +74766=>'L', +74767=>'L', +74768=>'L', +74769=>'L', +74770=>'L', +74771=>'L', +74772=>'L', +74773=>'L', +74774=>'L', +74775=>'L', +74776=>'L', +74777=>'L', +74778=>'L', +74779=>'L', +74780=>'L', +74781=>'L', +74782=>'L', +74783=>'L', +74784=>'L', +74785=>'L', +74786=>'L', +74787=>'L', +74788=>'L', +74789=>'L', +74790=>'L', +74791=>'L', +74792=>'L', +74793=>'L', +74794=>'L', +74795=>'L', +74796=>'L', +74797=>'L', +74798=>'L', +74799=>'L', +74800=>'L', +74801=>'L', +74802=>'L', +74803=>'L', +74804=>'L', +74805=>'L', +74806=>'L', +74807=>'L', +74808=>'L', +74809=>'L', +74810=>'L', +74811=>'L', +74812=>'L', +74813=>'L', +74814=>'L', +74815=>'L', +74816=>'L', +74817=>'L', +74818=>'L', +74819=>'L', +74820=>'L', +74821=>'L', +74822=>'L', +74823=>'L', +74824=>'L', +74825=>'L', +74826=>'L', +74827=>'L', +74828=>'L', +74829=>'L', +74830=>'L', +74831=>'L', +74832=>'L', +74833=>'L', +74834=>'L', +74835=>'L', +74836=>'L', +74837=>'L', +74838=>'L', +74839=>'L', +74840=>'L', +74841=>'L', +74842=>'L', +74843=>'L', +74844=>'L', +74845=>'L', +74846=>'L', +74847=>'L', +74848=>'L', +74849=>'L', +74850=>'L', +74864=>'L', +74865=>'L', +74866=>'L', +74867=>'L', +118784=>'L', +118785=>'L', +118786=>'L', +118787=>'L', +118788=>'L', +118789=>'L', +118790=>'L', +118791=>'L', +118792=>'L', +118793=>'L', +118794=>'L', +118795=>'L', +118796=>'L', +118797=>'L', +118798=>'L', +118799=>'L', +118800=>'L', +118801=>'L', +118802=>'L', +118803=>'L', +118804=>'L', +118805=>'L', +118806=>'L', +118807=>'L', +118808=>'L', +118809=>'L', +118810=>'L', +118811=>'L', +118812=>'L', +118813=>'L', +118814=>'L', +118815=>'L', +118816=>'L', +118817=>'L', +118818=>'L', +118819=>'L', +118820=>'L', +118821=>'L', +118822=>'L', +118823=>'L', +118824=>'L', +118825=>'L', +118826=>'L', +118827=>'L', +118828=>'L', +118829=>'L', +118830=>'L', +118831=>'L', +118832=>'L', +118833=>'L', +118834=>'L', +118835=>'L', +118836=>'L', +118837=>'L', +118838=>'L', +118839=>'L', +118840=>'L', +118841=>'L', +118842=>'L', +118843=>'L', +118844=>'L', +118845=>'L', +118846=>'L', +118847=>'L', +118848=>'L', +118849=>'L', +118850=>'L', +118851=>'L', +118852=>'L', +118853=>'L', +118854=>'L', +118855=>'L', +118856=>'L', +118857=>'L', +118858=>'L', +118859=>'L', +118860=>'L', +118861=>'L', +118862=>'L', +118863=>'L', +118864=>'L', +118865=>'L', +118866=>'L', +118867=>'L', +118868=>'L', +118869=>'L', +118870=>'L', +118871=>'L', +118872=>'L', +118873=>'L', +118874=>'L', +118875=>'L', +118876=>'L', +118877=>'L', +118878=>'L', +118879=>'L', +118880=>'L', +118881=>'L', +118882=>'L', +118883=>'L', +118884=>'L', +118885=>'L', +118886=>'L', +118887=>'L', +118888=>'L', +118889=>'L', +118890=>'L', +118891=>'L', +118892=>'L', +118893=>'L', +118894=>'L', +118895=>'L', +118896=>'L', +118897=>'L', +118898=>'L', +118899=>'L', +118900=>'L', +118901=>'L', +118902=>'L', +118903=>'L', +118904=>'L', +118905=>'L', +118906=>'L', +118907=>'L', +118908=>'L', +118909=>'L', +118910=>'L', +118911=>'L', +118912=>'L', +118913=>'L', +118914=>'L', +118915=>'L', +118916=>'L', +118917=>'L', +118918=>'L', +118919=>'L', +118920=>'L', +118921=>'L', +118922=>'L', +118923=>'L', +118924=>'L', +118925=>'L', +118926=>'L', +118927=>'L', +118928=>'L', +118929=>'L', +118930=>'L', +118931=>'L', +118932=>'L', +118933=>'L', +118934=>'L', +118935=>'L', +118936=>'L', +118937=>'L', +118938=>'L', +118939=>'L', +118940=>'L', +118941=>'L', +118942=>'L', +118943=>'L', +118944=>'L', +118945=>'L', +118946=>'L', +118947=>'L', +118948=>'L', +118949=>'L', +118950=>'L', +118951=>'L', +118952=>'L', +118953=>'L', +118954=>'L', +118955=>'L', +118956=>'L', +118957=>'L', +118958=>'L', +118959=>'L', +118960=>'L', +118961=>'L', +118962=>'L', +118963=>'L', +118964=>'L', +118965=>'L', +118966=>'L', +118967=>'L', +118968=>'L', +118969=>'L', +118970=>'L', +118971=>'L', +118972=>'L', +118973=>'L', +118974=>'L', +118975=>'L', +118976=>'L', +118977=>'L', +118978=>'L', +118979=>'L', +118980=>'L', +118981=>'L', +118982=>'L', +118983=>'L', +118984=>'L', +118985=>'L', +118986=>'L', +118987=>'L', +118988=>'L', +118989=>'L', +118990=>'L', +118991=>'L', +118992=>'L', +118993=>'L', +118994=>'L', +118995=>'L', +118996=>'L', +118997=>'L', +118998=>'L', +118999=>'L', +119000=>'L', +119001=>'L', +119002=>'L', +119003=>'L', +119004=>'L', +119005=>'L', +119006=>'L', +119007=>'L', +119008=>'L', +119009=>'L', +119010=>'L', +119011=>'L', +119012=>'L', +119013=>'L', +119014=>'L', +119015=>'L', +119016=>'L', +119017=>'L', +119018=>'L', +119019=>'L', +119020=>'L', +119021=>'L', +119022=>'L', +119023=>'L', +119024=>'L', +119025=>'L', +119026=>'L', +119027=>'L', +119028=>'L', +119029=>'L', +119040=>'L', +119041=>'L', +119042=>'L', +119043=>'L', +119044=>'L', +119045=>'L', +119046=>'L', +119047=>'L', +119048=>'L', +119049=>'L', +119050=>'L', +119051=>'L', +119052=>'L', +119053=>'L', +119054=>'L', +119055=>'L', +119056=>'L', +119057=>'L', +119058=>'L', +119059=>'L', +119060=>'L', +119061=>'L', +119062=>'L', +119063=>'L', +119064=>'L', +119065=>'L', +119066=>'L', +119067=>'L', +119068=>'L', +119069=>'L', +119070=>'L', +119071=>'L', +119072=>'L', +119073=>'L', +119074=>'L', +119075=>'L', +119076=>'L', +119077=>'L', +119078=>'L', +119082=>'L', +119083=>'L', +119084=>'L', +119085=>'L', +119086=>'L', +119087=>'L', +119088=>'L', +119089=>'L', +119090=>'L', +119091=>'L', +119092=>'L', +119093=>'L', +119094=>'L', +119095=>'L', +119096=>'L', +119097=>'L', +119098=>'L', +119099=>'L', +119100=>'L', +119101=>'L', +119102=>'L', +119103=>'L', +119104=>'L', +119105=>'L', +119106=>'L', +119107=>'L', +119108=>'L', +119109=>'L', +119110=>'L', +119111=>'L', +119112=>'L', +119113=>'L', +119114=>'L', +119115=>'L', +119116=>'L', +119117=>'L', +119118=>'L', +119119=>'L', +119120=>'L', +119121=>'L', +119122=>'L', +119123=>'L', +119124=>'L', +119125=>'L', +119126=>'L', +119127=>'L', +119128=>'L', +119129=>'L', +119130=>'L', +119131=>'L', +119132=>'L', +119133=>'L', +119134=>'L', +119135=>'L', +119136=>'L', +119137=>'L', +119138=>'L', +119139=>'L', +119140=>'L', +119141=>'L', +119142=>'L', +119143=>'NSM', +119144=>'NSM', +119145=>'NSM', +119146=>'L', +119147=>'L', +119148=>'L', +119149=>'L', +119150=>'L', +119151=>'L', +119152=>'L', +119153=>'L', +119154=>'L', +119155=>'BN', +119156=>'BN', +119157=>'BN', +119158=>'BN', +119159=>'BN', +119160=>'BN', +119161=>'BN', +119162=>'BN', +119163=>'NSM', +119164=>'NSM', +119165=>'NSM', +119166=>'NSM', +119167=>'NSM', +119168=>'NSM', +119169=>'NSM', +119170=>'NSM', +119171=>'L', +119172=>'L', +119173=>'NSM', +119174=>'NSM', +119175=>'NSM', +119176=>'NSM', +119177=>'NSM', +119178=>'NSM', +119179=>'NSM', +119180=>'L', +119181=>'L', +119182=>'L', +119183=>'L', +119184=>'L', +119185=>'L', +119186=>'L', +119187=>'L', +119188=>'L', +119189=>'L', +119190=>'L', +119191=>'L', +119192=>'L', +119193=>'L', +119194=>'L', +119195=>'L', +119196=>'L', +119197=>'L', +119198=>'L', +119199=>'L', +119200=>'L', +119201=>'L', +119202=>'L', +119203=>'L', +119204=>'L', +119205=>'L', +119206=>'L', +119207=>'L', +119208=>'L', +119209=>'L', +119210=>'NSM', +119211=>'NSM', +119212=>'NSM', +119213=>'NSM', +119214=>'L', +119215=>'L', +119216=>'L', +119217=>'L', +119218=>'L', +119219=>'L', +119220=>'L', +119221=>'L', +119222=>'L', +119223=>'L', +119224=>'L', +119225=>'L', +119226=>'L', +119227=>'L', +119228=>'L', +119229=>'L', +119230=>'L', +119231=>'L', +119232=>'L', +119233=>'L', +119234=>'L', +119235=>'L', +119236=>'L', +119237=>'L', +119238=>'L', +119239=>'L', +119240=>'L', +119241=>'L', +119242=>'L', +119243=>'L', +119244=>'L', +119245=>'L', +119246=>'L', +119247=>'L', +119248=>'L', +119249=>'L', +119250=>'L', +119251=>'L', +119252=>'L', +119253=>'L', +119254=>'L', +119255=>'L', +119256=>'L', +119257=>'L', +119258=>'L', +119259=>'L', +119260=>'L', +119261=>'L', +119296=>'ON', +119297=>'ON', +119298=>'ON', +119299=>'ON', +119300=>'ON', +119301=>'ON', +119302=>'ON', +119303=>'ON', +119304=>'ON', +119305=>'ON', +119306=>'ON', +119307=>'ON', +119308=>'ON', +119309=>'ON', +119310=>'ON', +119311=>'ON', +119312=>'ON', +119313=>'ON', +119314=>'ON', +119315=>'ON', +119316=>'ON', +119317=>'ON', +119318=>'ON', +119319=>'ON', +119320=>'ON', +119321=>'ON', +119322=>'ON', +119323=>'ON', +119324=>'ON', +119325=>'ON', +119326=>'ON', +119327=>'ON', +119328=>'ON', +119329=>'ON', +119330=>'ON', +119331=>'ON', +119332=>'ON', +119333=>'ON', +119334=>'ON', +119335=>'ON', +119336=>'ON', +119337=>'ON', +119338=>'ON', +119339=>'ON', +119340=>'ON', +119341=>'ON', +119342=>'ON', +119343=>'ON', +119344=>'ON', +119345=>'ON', +119346=>'ON', +119347=>'ON', +119348=>'ON', +119349=>'ON', +119350=>'ON', +119351=>'ON', +119352=>'ON', +119353=>'ON', +119354=>'ON', +119355=>'ON', +119356=>'ON', +119357=>'ON', +119358=>'ON', +119359=>'ON', +119360=>'ON', +119361=>'ON', +119362=>'NSM', +119363=>'NSM', +119364=>'NSM', +119365=>'ON', +119552=>'ON', +119553=>'ON', +119554=>'ON', +119555=>'ON', +119556=>'ON', +119557=>'ON', +119558=>'ON', +119559=>'ON', +119560=>'ON', +119561=>'ON', +119562=>'ON', +119563=>'ON', +119564=>'ON', +119565=>'ON', +119566=>'ON', +119567=>'ON', +119568=>'ON', +119569=>'ON', +119570=>'ON', +119571=>'ON', +119572=>'ON', +119573=>'ON', +119574=>'ON', +119575=>'ON', +119576=>'ON', +119577=>'ON', +119578=>'ON', +119579=>'ON', +119580=>'ON', +119581=>'ON', +119582=>'ON', +119583=>'ON', +119584=>'ON', +119585=>'ON', +119586=>'ON', +119587=>'ON', +119588=>'ON', +119589=>'ON', +119590=>'ON', +119591=>'ON', +119592=>'ON', +119593=>'ON', +119594=>'ON', +119595=>'ON', +119596=>'ON', +119597=>'ON', +119598=>'ON', +119599=>'ON', +119600=>'ON', +119601=>'ON', +119602=>'ON', +119603=>'ON', +119604=>'ON', +119605=>'ON', +119606=>'ON', +119607=>'ON', +119608=>'ON', +119609=>'ON', +119610=>'ON', +119611=>'ON', +119612=>'ON', +119613=>'ON', +119614=>'ON', +119615=>'ON', +119616=>'ON', +119617=>'ON', +119618=>'ON', +119619=>'ON', +119620=>'ON', +119621=>'ON', +119622=>'ON', +119623=>'ON', +119624=>'ON', +119625=>'ON', +119626=>'ON', +119627=>'ON', +119628=>'ON', +119629=>'ON', +119630=>'ON', +119631=>'ON', +119632=>'ON', +119633=>'ON', +119634=>'ON', +119635=>'ON', +119636=>'ON', +119637=>'ON', +119638=>'ON', +119648=>'L', +119649=>'L', +119650=>'L', +119651=>'L', +119652=>'L', +119653=>'L', +119654=>'L', +119655=>'L', +119656=>'L', +119657=>'L', +119658=>'L', +119659=>'L', +119660=>'L', +119661=>'L', +119662=>'L', +119663=>'L', +119664=>'L', +119665=>'L', +119808=>'L', +119809=>'L', +119810=>'L', +119811=>'L', +119812=>'L', +119813=>'L', +119814=>'L', +119815=>'L', +119816=>'L', +119817=>'L', +119818=>'L', +119819=>'L', +119820=>'L', +119821=>'L', +119822=>'L', +119823=>'L', +119824=>'L', +119825=>'L', +119826=>'L', +119827=>'L', +119828=>'L', +119829=>'L', +119830=>'L', +119831=>'L', +119832=>'L', +119833=>'L', +119834=>'L', +119835=>'L', +119836=>'L', +119837=>'L', +119838=>'L', +119839=>'L', +119840=>'L', +119841=>'L', +119842=>'L', +119843=>'L', +119844=>'L', +119845=>'L', +119846=>'L', +119847=>'L', +119848=>'L', +119849=>'L', +119850=>'L', +119851=>'L', +119852=>'L', +119853=>'L', +119854=>'L', +119855=>'L', +119856=>'L', +119857=>'L', +119858=>'L', +119859=>'L', +119860=>'L', +119861=>'L', +119862=>'L', +119863=>'L', +119864=>'L', +119865=>'L', +119866=>'L', +119867=>'L', +119868=>'L', +119869=>'L', +119870=>'L', +119871=>'L', +119872=>'L', +119873=>'L', +119874=>'L', +119875=>'L', +119876=>'L', +119877=>'L', +119878=>'L', +119879=>'L', +119880=>'L', +119881=>'L', +119882=>'L', +119883=>'L', +119884=>'L', +119885=>'L', +119886=>'L', +119887=>'L', +119888=>'L', +119889=>'L', +119890=>'L', +119891=>'L', +119892=>'L', +119894=>'L', +119895=>'L', +119896=>'L', +119897=>'L', +119898=>'L', +119899=>'L', +119900=>'L', +119901=>'L', +119902=>'L', +119903=>'L', +119904=>'L', +119905=>'L', +119906=>'L', +119907=>'L', +119908=>'L', +119909=>'L', +119910=>'L', +119911=>'L', +119912=>'L', +119913=>'L', +119914=>'L', +119915=>'L', +119916=>'L', +119917=>'L', +119918=>'L', +119919=>'L', +119920=>'L', +119921=>'L', +119922=>'L', +119923=>'L', +119924=>'L', +119925=>'L', +119926=>'L', +119927=>'L', +119928=>'L', +119929=>'L', +119930=>'L', +119931=>'L', +119932=>'L', +119933=>'L', +119934=>'L', +119935=>'L', +119936=>'L', +119937=>'L', +119938=>'L', +119939=>'L', +119940=>'L', +119941=>'L', +119942=>'L', +119943=>'L', +119944=>'L', +119945=>'L', +119946=>'L', +119947=>'L', +119948=>'L', +119949=>'L', +119950=>'L', +119951=>'L', +119952=>'L', +119953=>'L', +119954=>'L', +119955=>'L', +119956=>'L', +119957=>'L', +119958=>'L', +119959=>'L', +119960=>'L', +119961=>'L', +119962=>'L', +119963=>'L', +119964=>'L', +119966=>'L', +119967=>'L', +119970=>'L', +119973=>'L', +119974=>'L', +119977=>'L', +119978=>'L', +119979=>'L', +119980=>'L', +119982=>'L', +119983=>'L', +119984=>'L', +119985=>'L', +119986=>'L', +119987=>'L', +119988=>'L', +119989=>'L', +119990=>'L', +119991=>'L', +119992=>'L', +119993=>'L', +119995=>'L', +119997=>'L', +119998=>'L', +119999=>'L', +120000=>'L', +120001=>'L', +120002=>'L', +120003=>'L', +120005=>'L', +120006=>'L', +120007=>'L', +120008=>'L', +120009=>'L', +120010=>'L', +120011=>'L', +120012=>'L', +120013=>'L', +120014=>'L', +120015=>'L', +120016=>'L', +120017=>'L', +120018=>'L', +120019=>'L', +120020=>'L', +120021=>'L', +120022=>'L', +120023=>'L', +120024=>'L', +120025=>'L', +120026=>'L', +120027=>'L', +120028=>'L', +120029=>'L', +120030=>'L', +120031=>'L', +120032=>'L', +120033=>'L', +120034=>'L', +120035=>'L', +120036=>'L', +120037=>'L', +120038=>'L', +120039=>'L', +120040=>'L', +120041=>'L', +120042=>'L', +120043=>'L', +120044=>'L', +120045=>'L', +120046=>'L', +120047=>'L', +120048=>'L', +120049=>'L', +120050=>'L', +120051=>'L', +120052=>'L', +120053=>'L', +120054=>'L', +120055=>'L', +120056=>'L', +120057=>'L', +120058=>'L', +120059=>'L', +120060=>'L', +120061=>'L', +120062=>'L', +120063=>'L', +120064=>'L', +120065=>'L', +120066=>'L', +120067=>'L', +120068=>'L', +120069=>'L', +120071=>'L', +120072=>'L', +120073=>'L', +120074=>'L', +120077=>'L', +120078=>'L', +120079=>'L', +120080=>'L', +120081=>'L', +120082=>'L', +120083=>'L', +120084=>'L', +120086=>'L', +120087=>'L', +120088=>'L', +120089=>'L', +120090=>'L', +120091=>'L', +120092=>'L', +120094=>'L', +120095=>'L', +120096=>'L', +120097=>'L', +120098=>'L', +120099=>'L', +120100=>'L', +120101=>'L', +120102=>'L', +120103=>'L', +120104=>'L', +120105=>'L', +120106=>'L', +120107=>'L', +120108=>'L', +120109=>'L', +120110=>'L', +120111=>'L', +120112=>'L', +120113=>'L', +120114=>'L', +120115=>'L', +120116=>'L', +120117=>'L', +120118=>'L', +120119=>'L', +120120=>'L', +120121=>'L', +120123=>'L', +120124=>'L', +120125=>'L', +120126=>'L', +120128=>'L', +120129=>'L', +120130=>'L', +120131=>'L', +120132=>'L', +120134=>'L', +120138=>'L', +120139=>'L', +120140=>'L', +120141=>'L', +120142=>'L', +120143=>'L', +120144=>'L', +120146=>'L', +120147=>'L', +120148=>'L', +120149=>'L', +120150=>'L', +120151=>'L', +120152=>'L', +120153=>'L', +120154=>'L', +120155=>'L', +120156=>'L', +120157=>'L', +120158=>'L', +120159=>'L', +120160=>'L', +120161=>'L', +120162=>'L', +120163=>'L', +120164=>'L', +120165=>'L', +120166=>'L', +120167=>'L', +120168=>'L', +120169=>'L', +120170=>'L', +120171=>'L', +120172=>'L', +120173=>'L', +120174=>'L', +120175=>'L', +120176=>'L', +120177=>'L', +120178=>'L', +120179=>'L', +120180=>'L', +120181=>'L', +120182=>'L', +120183=>'L', +120184=>'L', +120185=>'L', +120186=>'L', +120187=>'L', +120188=>'L', +120189=>'L', +120190=>'L', +120191=>'L', +120192=>'L', +120193=>'L', +120194=>'L', +120195=>'L', +120196=>'L', +120197=>'L', +120198=>'L', +120199=>'L', +120200=>'L', +120201=>'L', +120202=>'L', +120203=>'L', +120204=>'L', +120205=>'L', +120206=>'L', +120207=>'L', +120208=>'L', +120209=>'L', +120210=>'L', +120211=>'L', +120212=>'L', +120213=>'L', +120214=>'L', +120215=>'L', +120216=>'L', +120217=>'L', +120218=>'L', +120219=>'L', +120220=>'L', +120221=>'L', +120222=>'L', +120223=>'L', +120224=>'L', +120225=>'L', +120226=>'L', +120227=>'L', +120228=>'L', +120229=>'L', +120230=>'L', +120231=>'L', +120232=>'L', +120233=>'L', +120234=>'L', +120235=>'L', +120236=>'L', +120237=>'L', +120238=>'L', +120239=>'L', +120240=>'L', +120241=>'L', +120242=>'L', +120243=>'L', +120244=>'L', +120245=>'L', +120246=>'L', +120247=>'L', +120248=>'L', +120249=>'L', +120250=>'L', +120251=>'L', +120252=>'L', +120253=>'L', +120254=>'L', +120255=>'L', +120256=>'L', +120257=>'L', +120258=>'L', +120259=>'L', +120260=>'L', +120261=>'L', +120262=>'L', +120263=>'L', +120264=>'L', +120265=>'L', +120266=>'L', +120267=>'L', +120268=>'L', +120269=>'L', +120270=>'L', +120271=>'L', +120272=>'L', +120273=>'L', +120274=>'L', +120275=>'L', +120276=>'L', +120277=>'L', +120278=>'L', +120279=>'L', +120280=>'L', +120281=>'L', +120282=>'L', +120283=>'L', +120284=>'L', +120285=>'L', +120286=>'L', +120287=>'L', +120288=>'L', +120289=>'L', +120290=>'L', +120291=>'L', +120292=>'L', +120293=>'L', +120294=>'L', +120295=>'L', +120296=>'L', +120297=>'L', +120298=>'L', +120299=>'L', +120300=>'L', +120301=>'L', +120302=>'L', +120303=>'L', +120304=>'L', +120305=>'L', +120306=>'L', +120307=>'L', +120308=>'L', +120309=>'L', +120310=>'L', +120311=>'L', +120312=>'L', +120313=>'L', +120314=>'L', +120315=>'L', +120316=>'L', +120317=>'L', +120318=>'L', +120319=>'L', +120320=>'L', +120321=>'L', +120322=>'L', +120323=>'L', +120324=>'L', +120325=>'L', +120326=>'L', +120327=>'L', +120328=>'L', +120329=>'L', +120330=>'L', +120331=>'L', +120332=>'L', +120333=>'L', +120334=>'L', +120335=>'L', +120336=>'L', +120337=>'L', +120338=>'L', +120339=>'L', +120340=>'L', +120341=>'L', +120342=>'L', +120343=>'L', +120344=>'L', +120345=>'L', +120346=>'L', +120347=>'L', +120348=>'L', +120349=>'L', +120350=>'L', +120351=>'L', +120352=>'L', +120353=>'L', +120354=>'L', +120355=>'L', +120356=>'L', +120357=>'L', +120358=>'L', +120359=>'L', +120360=>'L', +120361=>'L', +120362=>'L', +120363=>'L', +120364=>'L', +120365=>'L', +120366=>'L', +120367=>'L', +120368=>'L', +120369=>'L', +120370=>'L', +120371=>'L', +120372=>'L', +120373=>'L', +120374=>'L', +120375=>'L', +120376=>'L', +120377=>'L', +120378=>'L', +120379=>'L', +120380=>'L', +120381=>'L', +120382=>'L', +120383=>'L', +120384=>'L', +120385=>'L', +120386=>'L', +120387=>'L', +120388=>'L', +120389=>'L', +120390=>'L', +120391=>'L', +120392=>'L', +120393=>'L', +120394=>'L', +120395=>'L', +120396=>'L', +120397=>'L', +120398=>'L', +120399=>'L', +120400=>'L', +120401=>'L', +120402=>'L', +120403=>'L', +120404=>'L', +120405=>'L', +120406=>'L', +120407=>'L', +120408=>'L', +120409=>'L', +120410=>'L', +120411=>'L', +120412=>'L', +120413=>'L', +120414=>'L', +120415=>'L', +120416=>'L', +120417=>'L', +120418=>'L', +120419=>'L', +120420=>'L', +120421=>'L', +120422=>'L', +120423=>'L', +120424=>'L', +120425=>'L', +120426=>'L', +120427=>'L', +120428=>'L', +120429=>'L', +120430=>'L', +120431=>'L', +120432=>'L', +120433=>'L', +120434=>'L', +120435=>'L', +120436=>'L', +120437=>'L', +120438=>'L', +120439=>'L', +120440=>'L', +120441=>'L', +120442=>'L', +120443=>'L', +120444=>'L', +120445=>'L', +120446=>'L', +120447=>'L', +120448=>'L', +120449=>'L', +120450=>'L', +120451=>'L', +120452=>'L', +120453=>'L', +120454=>'L', +120455=>'L', +120456=>'L', +120457=>'L', +120458=>'L', +120459=>'L', +120460=>'L', +120461=>'L', +120462=>'L', +120463=>'L', +120464=>'L', +120465=>'L', +120466=>'L', +120467=>'L', +120468=>'L', +120469=>'L', +120470=>'L', +120471=>'L', +120472=>'L', +120473=>'L', +120474=>'L', +120475=>'L', +120476=>'L', +120477=>'L', +120478=>'L', +120479=>'L', +120480=>'L', +120481=>'L', +120482=>'L', +120483=>'L', +120484=>'L', +120485=>'L', +120488=>'L', +120489=>'L', +120490=>'L', +120491=>'L', +120492=>'L', +120493=>'L', +120494=>'L', +120495=>'L', +120496=>'L', +120497=>'L', +120498=>'L', +120499=>'L', +120500=>'L', +120501=>'L', +120502=>'L', +120503=>'L', +120504=>'L', +120505=>'L', +120506=>'L', +120507=>'L', +120508=>'L', +120509=>'L', +120510=>'L', +120511=>'L', +120512=>'L', +120513=>'L', +120514=>'L', +120515=>'L', +120516=>'L', +120517=>'L', +120518=>'L', +120519=>'L', +120520=>'L', +120521=>'L', +120522=>'L', +120523=>'L', +120524=>'L', +120525=>'L', +120526=>'L', +120527=>'L', +120528=>'L', +120529=>'L', +120530=>'L', +120531=>'L', +120532=>'L', +120533=>'L', +120534=>'L', +120535=>'L', +120536=>'L', +120537=>'L', +120538=>'L', +120539=>'L', +120540=>'L', +120541=>'L', +120542=>'L', +120543=>'L', +120544=>'L', +120545=>'L', +120546=>'L', +120547=>'L', +120548=>'L', +120549=>'L', +120550=>'L', +120551=>'L', +120552=>'L', +120553=>'L', +120554=>'L', +120555=>'L', +120556=>'L', +120557=>'L', +120558=>'L', +120559=>'L', +120560=>'L', +120561=>'L', +120562=>'L', +120563=>'L', +120564=>'L', +120565=>'L', +120566=>'L', +120567=>'L', +120568=>'L', +120569=>'L', +120570=>'L', +120571=>'L', +120572=>'L', +120573=>'L', +120574=>'L', +120575=>'L', +120576=>'L', +120577=>'L', +120578=>'L', +120579=>'L', +120580=>'L', +120581=>'L', +120582=>'L', +120583=>'L', +120584=>'L', +120585=>'L', +120586=>'L', +120587=>'L', +120588=>'L', +120589=>'L', +120590=>'L', +120591=>'L', +120592=>'L', +120593=>'L', +120594=>'L', +120595=>'L', +120596=>'L', +120597=>'L', +120598=>'L', +120599=>'L', +120600=>'L', +120601=>'L', +120602=>'L', +120603=>'L', +120604=>'L', +120605=>'L', +120606=>'L', +120607=>'L', +120608=>'L', +120609=>'L', +120610=>'L', +120611=>'L', +120612=>'L', +120613=>'L', +120614=>'L', +120615=>'L', +120616=>'L', +120617=>'L', +120618=>'L', +120619=>'L', +120620=>'L', +120621=>'L', +120622=>'L', +120623=>'L', +120624=>'L', +120625=>'L', +120626=>'L', +120627=>'L', +120628=>'L', +120629=>'L', +120630=>'L', +120631=>'L', +120632=>'L', +120633=>'L', +120634=>'L', +120635=>'L', +120636=>'L', +120637=>'L', +120638=>'L', +120639=>'L', +120640=>'L', +120641=>'L', +120642=>'L', +120643=>'L', +120644=>'L', +120645=>'L', +120646=>'L', +120647=>'L', +120648=>'L', +120649=>'L', +120650=>'L', +120651=>'L', +120652=>'L', +120653=>'L', +120654=>'L', +120655=>'L', +120656=>'L', +120657=>'L', +120658=>'L', +120659=>'L', +120660=>'L', +120661=>'L', +120662=>'L', +120663=>'L', +120664=>'L', +120665=>'L', +120666=>'L', +120667=>'L', +120668=>'L', +120669=>'L', +120670=>'L', +120671=>'L', +120672=>'L', +120673=>'L', +120674=>'L', +120675=>'L', +120676=>'L', +120677=>'L', +120678=>'L', +120679=>'L', +120680=>'L', +120681=>'L', +120682=>'L', +120683=>'L', +120684=>'L', +120685=>'L', +120686=>'L', +120687=>'L', +120688=>'L', +120689=>'L', +120690=>'L', +120691=>'L', +120692=>'L', +120693=>'L', +120694=>'L', +120695=>'L', +120696=>'L', +120697=>'L', +120698=>'L', +120699=>'L', +120700=>'L', +120701=>'L', +120702=>'L', +120703=>'L', +120704=>'L', +120705=>'L', +120706=>'L', +120707=>'L', +120708=>'L', +120709=>'L', +120710=>'L', +120711=>'L', +120712=>'L', +120713=>'L', +120714=>'L', +120715=>'L', +120716=>'L', +120717=>'L', +120718=>'L', +120719=>'L', +120720=>'L', +120721=>'L', +120722=>'L', +120723=>'L', +120724=>'L', +120725=>'L', +120726=>'L', +120727=>'L', +120728=>'L', +120729=>'L', +120730=>'L', +120731=>'L', +120732=>'L', +120733=>'L', +120734=>'L', +120735=>'L', +120736=>'L', +120737=>'L', +120738=>'L', +120739=>'L', +120740=>'L', +120741=>'L', +120742=>'L', +120743=>'L', +120744=>'L', +120745=>'L', +120746=>'L', +120747=>'L', +120748=>'L', +120749=>'L', +120750=>'L', +120751=>'L', +120752=>'L', +120753=>'L', +120754=>'L', +120755=>'L', +120756=>'L', +120757=>'L', +120758=>'L', +120759=>'L', +120760=>'L', +120761=>'L', +120762=>'L', +120763=>'L', +120764=>'L', +120765=>'L', +120766=>'L', +120767=>'L', +120768=>'L', +120769=>'L', +120770=>'L', +120771=>'L', +120772=>'L', +120773=>'L', +120774=>'L', +120775=>'L', +120776=>'L', +120777=>'L', +120778=>'L', +120779=>'L', +120782=>'EN', +120783=>'EN', +120784=>'EN', +120785=>'EN', +120786=>'EN', +120787=>'EN', +120788=>'EN', +120789=>'EN', +120790=>'EN', +120791=>'EN', +120792=>'EN', +120793=>'EN', +120794=>'EN', +120795=>'EN', +120796=>'EN', +120797=>'EN', +120798=>'EN', +120799=>'EN', +120800=>'EN', +120801=>'EN', +120802=>'EN', +120803=>'EN', +120804=>'EN', +120805=>'EN', +120806=>'EN', +120807=>'EN', +120808=>'EN', +120809=>'EN', +120810=>'EN', +120811=>'EN', +120812=>'EN', +120813=>'EN', +120814=>'EN', +120815=>'EN', +120816=>'EN', +120817=>'EN', +120818=>'EN', +120819=>'EN', +120820=>'EN', +120821=>'EN', +120822=>'EN', +120823=>'EN', +120824=>'EN', +120825=>'EN', +120826=>'EN', +120827=>'EN', +120828=>'EN', +120829=>'EN', +120830=>'EN', +120831=>'EN', +131072=>'L', +173782=>'L', +194560=>'L', +194561=>'L', +194562=>'L', +194563=>'L', +194564=>'L', +194565=>'L', +194566=>'L', +194567=>'L', +194568=>'L', +194569=>'L', +194570=>'L', +194571=>'L', +194572=>'L', +194573=>'L', +194574=>'L', +194575=>'L', +194576=>'L', +194577=>'L', +194578=>'L', +194579=>'L', +194580=>'L', +194581=>'L', +194582=>'L', +194583=>'L', +194584=>'L', +194585=>'L', +194586=>'L', +194587=>'L', +194588=>'L', +194589=>'L', +194590=>'L', +194591=>'L', +194592=>'L', +194593=>'L', +194594=>'L', +194595=>'L', +194596=>'L', +194597=>'L', +194598=>'L', +194599=>'L', +194600=>'L', +194601=>'L', +194602=>'L', +194603=>'L', +194604=>'L', +194605=>'L', +194606=>'L', +194607=>'L', +194608=>'L', +194609=>'L', +194610=>'L', +194611=>'L', +194612=>'L', +194613=>'L', +194614=>'L', +194615=>'L', +194616=>'L', +194617=>'L', +194618=>'L', +194619=>'L', +194620=>'L', +194621=>'L', +194622=>'L', +194623=>'L', +194624=>'L', +194625=>'L', +194626=>'L', +194627=>'L', +194628=>'L', +194629=>'L', +194630=>'L', +194631=>'L', +194632=>'L', +194633=>'L', +194634=>'L', +194635=>'L', +194636=>'L', +194637=>'L', +194638=>'L', +194639=>'L', +194640=>'L', +194641=>'L', +194642=>'L', +194643=>'L', +194644=>'L', +194645=>'L', +194646=>'L', +194647=>'L', +194648=>'L', +194649=>'L', +194650=>'L', +194651=>'L', +194652=>'L', +194653=>'L', +194654=>'L', +194655=>'L', +194656=>'L', +194657=>'L', +194658=>'L', +194659=>'L', +194660=>'L', +194661=>'L', +194662=>'L', +194663=>'L', +194664=>'L', +194665=>'L', +194666=>'L', +194667=>'L', +194668=>'L', +194669=>'L', +194670=>'L', +194671=>'L', +194672=>'L', +194673=>'L', +194674=>'L', +194675=>'L', +194676=>'L', +194677=>'L', +194678=>'L', +194679=>'L', +194680=>'L', +194681=>'L', +194682=>'L', +194683=>'L', +194684=>'L', +194685=>'L', +194686=>'L', +194687=>'L', +194688=>'L', +194689=>'L', +194690=>'L', +194691=>'L', +194692=>'L', +194693=>'L', +194694=>'L', +194695=>'L', +194696=>'L', +194697=>'L', +194698=>'L', +194699=>'L', +194700=>'L', +194701=>'L', +194702=>'L', +194703=>'L', +194704=>'L', +194705=>'L', +194706=>'L', +194707=>'L', +194708=>'L', +194709=>'L', +194710=>'L', +194711=>'L', +194712=>'L', +194713=>'L', +194714=>'L', +194715=>'L', +194716=>'L', +194717=>'L', +194718=>'L', +194719=>'L', +194720=>'L', +194721=>'L', +194722=>'L', +194723=>'L', +194724=>'L', +194725=>'L', +194726=>'L', +194727=>'L', +194728=>'L', +194729=>'L', +194730=>'L', +194731=>'L', +194732=>'L', +194733=>'L', +194734=>'L', +194735=>'L', +194736=>'L', +194737=>'L', +194738=>'L', +194739=>'L', +194740=>'L', +194741=>'L', +194742=>'L', +194743=>'L', +194744=>'L', +194745=>'L', +194746=>'L', +194747=>'L', +194748=>'L', +194749=>'L', +194750=>'L', +194751=>'L', +194752=>'L', +194753=>'L', +194754=>'L', +194755=>'L', +194756=>'L', +194757=>'L', +194758=>'L', +194759=>'L', +194760=>'L', +194761=>'L', +194762=>'L', +194763=>'L', +194764=>'L', +194765=>'L', +194766=>'L', +194767=>'L', +194768=>'L', +194769=>'L', +194770=>'L', +194771=>'L', +194772=>'L', +194773=>'L', +194774=>'L', +194775=>'L', +194776=>'L', +194777=>'L', +194778=>'L', +194779=>'L', +194780=>'L', +194781=>'L', +194782=>'L', +194783=>'L', +194784=>'L', +194785=>'L', +194786=>'L', +194787=>'L', +194788=>'L', +194789=>'L', +194790=>'L', +194791=>'L', +194792=>'L', +194793=>'L', +194794=>'L', +194795=>'L', +194796=>'L', +194797=>'L', +194798=>'L', +194799=>'L', +194800=>'L', +194801=>'L', +194802=>'L', +194803=>'L', +194804=>'L', +194805=>'L', +194806=>'L', +194807=>'L', +194808=>'L', +194809=>'L', +194810=>'L', +194811=>'L', +194812=>'L', +194813=>'L', +194814=>'L', +194815=>'L', +194816=>'L', +194817=>'L', +194818=>'L', +194819=>'L', +194820=>'L', +194821=>'L', +194822=>'L', +194823=>'L', +194824=>'L', +194825=>'L', +194826=>'L', +194827=>'L', +194828=>'L', +194829=>'L', +194830=>'L', +194831=>'L', +194832=>'L', +194833=>'L', +194834=>'L', +194835=>'L', +194836=>'L', +194837=>'L', +194838=>'L', +194839=>'L', +194840=>'L', +194841=>'L', +194842=>'L', +194843=>'L', +194844=>'L', +194845=>'L', +194846=>'L', +194847=>'L', +194848=>'L', +194849=>'L', +194850=>'L', +194851=>'L', +194852=>'L', +194853=>'L', +194854=>'L', +194855=>'L', +194856=>'L', +194857=>'L', +194858=>'L', +194859=>'L', +194860=>'L', +194861=>'L', +194862=>'L', +194863=>'L', +194864=>'L', +194865=>'L', +194866=>'L', +194867=>'L', +194868=>'L', +194869=>'L', +194870=>'L', +194871=>'L', +194872=>'L', +194873=>'L', +194874=>'L', +194875=>'L', +194876=>'L', +194877=>'L', +194878=>'L', +194879=>'L', +194880=>'L', +194881=>'L', +194882=>'L', +194883=>'L', +194884=>'L', +194885=>'L', +194886=>'L', +194887=>'L', +194888=>'L', +194889=>'L', +194890=>'L', +194891=>'L', +194892=>'L', +194893=>'L', +194894=>'L', +194895=>'L', +194896=>'L', +194897=>'L', +194898=>'L', +194899=>'L', +194900=>'L', +194901=>'L', +194902=>'L', +194903=>'L', +194904=>'L', +194905=>'L', +194906=>'L', +194907=>'L', +194908=>'L', +194909=>'L', +194910=>'L', +194911=>'L', +194912=>'L', +194913=>'L', +194914=>'L', +194915=>'L', +194916=>'L', +194917=>'L', +194918=>'L', +194919=>'L', +194920=>'L', +194921=>'L', +194922=>'L', +194923=>'L', +194924=>'L', +194925=>'L', +194926=>'L', +194927=>'L', +194928=>'L', +194929=>'L', +194930=>'L', +194931=>'L', +194932=>'L', +194933=>'L', +194934=>'L', +194935=>'L', +194936=>'L', +194937=>'L', +194938=>'L', +194939=>'L', +194940=>'L', +194941=>'L', +194942=>'L', +194943=>'L', +194944=>'L', +194945=>'L', +194946=>'L', +194947=>'L', +194948=>'L', +194949=>'L', +194950=>'L', +194951=>'L', +194952=>'L', +194953=>'L', +194954=>'L', +194955=>'L', +194956=>'L', +194957=>'L', +194958=>'L', +194959=>'L', +194960=>'L', +194961=>'L', +194962=>'L', +194963=>'L', +194964=>'L', +194965=>'L', +194966=>'L', +194967=>'L', +194968=>'L', +194969=>'L', +194970=>'L', +194971=>'L', +194972=>'L', +194973=>'L', +194974=>'L', +194975=>'L', +194976=>'L', +194977=>'L', +194978=>'L', +194979=>'L', +194980=>'L', +194981=>'L', +194982=>'L', +194983=>'L', +194984=>'L', +194985=>'L', +194986=>'L', +194987=>'L', +194988=>'L', +194989=>'L', +194990=>'L', +194991=>'L', +194992=>'L', +194993=>'L', +194994=>'L', +194995=>'L', +194996=>'L', +194997=>'L', +194998=>'L', +194999=>'L', +195000=>'L', +195001=>'L', +195002=>'L', +195003=>'L', +195004=>'L', +195005=>'L', +195006=>'L', +195007=>'L', +195008=>'L', +195009=>'L', +195010=>'L', +195011=>'L', +195012=>'L', +195013=>'L', +195014=>'L', +195015=>'L', +195016=>'L', +195017=>'L', +195018=>'L', +195019=>'L', +195020=>'L', +195021=>'L', +195022=>'L', +195023=>'L', +195024=>'L', +195025=>'L', +195026=>'L', +195027=>'L', +195028=>'L', +195029=>'L', +195030=>'L', +195031=>'L', +195032=>'L', +195033=>'L', +195034=>'L', +195035=>'L', +195036=>'L', +195037=>'L', +195038=>'L', +195039=>'L', +195040=>'L', +195041=>'L', +195042=>'L', +195043=>'L', +195044=>'L', +195045=>'L', +195046=>'L', +195047=>'L', +195048=>'L', +195049=>'L', +195050=>'L', +195051=>'L', +195052=>'L', +195053=>'L', +195054=>'L', +195055=>'L', +195056=>'L', +195057=>'L', +195058=>'L', +195059=>'L', +195060=>'L', +195061=>'L', +195062=>'L', +195063=>'L', +195064=>'L', +195065=>'L', +195066=>'L', +195067=>'L', +195068=>'L', +195069=>'L', +195070=>'L', +195071=>'L', +195072=>'L', +195073=>'L', +195074=>'L', +195075=>'L', +195076=>'L', +195077=>'L', +195078=>'L', +195079=>'L', +195080=>'L', +195081=>'L', +195082=>'L', +195083=>'L', +195084=>'L', +195085=>'L', +195086=>'L', +195087=>'L', +195088=>'L', +195089=>'L', +195090=>'L', +195091=>'L', +195092=>'L', +195093=>'L', +195094=>'L', +195095=>'L', +195096=>'L', +195097=>'L', +195098=>'L', +195099=>'L', +195100=>'L', +195101=>'L', +917505=>'BN', +917536=>'BN', +917537=>'BN', +917538=>'BN', +917539=>'BN', +917540=>'BN', +917541=>'BN', +917542=>'BN', +917543=>'BN', +917544=>'BN', +917545=>'BN', +917546=>'BN', +917547=>'BN', +917548=>'BN', +917549=>'BN', +917550=>'BN', +917551=>'BN', +917552=>'BN', +917553=>'BN', +917554=>'BN', +917555=>'BN', +917556=>'BN', +917557=>'BN', +917558=>'BN', +917559=>'BN', +917560=>'BN', +917561=>'BN', +917562=>'BN', +917563=>'BN', +917564=>'BN', +917565=>'BN', +917566=>'BN', +917567=>'BN', +917568=>'BN', +917569=>'BN', +917570=>'BN', +917571=>'BN', +917572=>'BN', +917573=>'BN', +917574=>'BN', +917575=>'BN', +917576=>'BN', +917577=>'BN', +917578=>'BN', +917579=>'BN', +917580=>'BN', +917581=>'BN', +917582=>'BN', +917583=>'BN', +917584=>'BN', +917585=>'BN', +917586=>'BN', +917587=>'BN', +917588=>'BN', +917589=>'BN', +917590=>'BN', +917591=>'BN', +917592=>'BN', +917593=>'BN', +917594=>'BN', +917595=>'BN', +917596=>'BN', +917597=>'BN', +917598=>'BN', +917599=>'BN', +917600=>'BN', +917601=>'BN', +917602=>'BN', +917603=>'BN', +917604=>'BN', +917605=>'BN', +917606=>'BN', +917607=>'BN', +917608=>'BN', +917609=>'BN', +917610=>'BN', +917611=>'BN', +917612=>'BN', +917613=>'BN', +917614=>'BN', +917615=>'BN', +917616=>'BN', +917617=>'BN', +917618=>'BN', +917619=>'BN', +917620=>'BN', +917621=>'BN', +917622=>'BN', +917623=>'BN', +917624=>'BN', +917625=>'BN', +917626=>'BN', +917627=>'BN', +917628=>'BN', +917629=>'BN', +917630=>'BN', +917631=>'BN', +917760=>'NSM', +917761=>'NSM', +917762=>'NSM', +917763=>'NSM', +917764=>'NSM', +917765=>'NSM', +917766=>'NSM', +917767=>'NSM', +917768=>'NSM', +917769=>'NSM', +917770=>'NSM', +917771=>'NSM', +917772=>'NSM', +917773=>'NSM', +917774=>'NSM', +917775=>'NSM', +917776=>'NSM', +917777=>'NSM', +917778=>'NSM', +917779=>'NSM', +917780=>'NSM', +917781=>'NSM', +917782=>'NSM', +917783=>'NSM', +917784=>'NSM', +917785=>'NSM', +917786=>'NSM', +917787=>'NSM', +917788=>'NSM', +917789=>'NSM', +917790=>'NSM', +917791=>'NSM', +917792=>'NSM', +917793=>'NSM', +917794=>'NSM', +917795=>'NSM', +917796=>'NSM', +917797=>'NSM', +917798=>'NSM', +917799=>'NSM', +917800=>'NSM', +917801=>'NSM', +917802=>'NSM', +917803=>'NSM', +917804=>'NSM', +917805=>'NSM', +917806=>'NSM', +917807=>'NSM', +917808=>'NSM', +917809=>'NSM', +917810=>'NSM', +917811=>'NSM', +917812=>'NSM', +917813=>'NSM', +917814=>'NSM', +917815=>'NSM', +917816=>'NSM', +917817=>'NSM', +917818=>'NSM', +917819=>'NSM', +917820=>'NSM', +917821=>'NSM', +917822=>'NSM', +917823=>'NSM', +917824=>'NSM', +917825=>'NSM', +917826=>'NSM', +917827=>'NSM', +917828=>'NSM', +917829=>'NSM', +917830=>'NSM', +917831=>'NSM', +917832=>'NSM', +917833=>'NSM', +917834=>'NSM', +917835=>'NSM', +917836=>'NSM', +917837=>'NSM', +917838=>'NSM', +917839=>'NSM', +917840=>'NSM', +917841=>'NSM', +917842=>'NSM', +917843=>'NSM', +917844=>'NSM', +917845=>'NSM', +917846=>'NSM', +917847=>'NSM', +917848=>'NSM', +917849=>'NSM', +917850=>'NSM', +917851=>'NSM', +917852=>'NSM', +917853=>'NSM', +917854=>'NSM', +917855=>'NSM', +917856=>'NSM', +917857=>'NSM', +917858=>'NSM', +917859=>'NSM', +917860=>'NSM', +917861=>'NSM', +917862=>'NSM', +917863=>'NSM', +917864=>'NSM', +917865=>'NSM', +917866=>'NSM', +917867=>'NSM', +917868=>'NSM', +917869=>'NSM', +917870=>'NSM', +917871=>'NSM', +917872=>'NSM', +917873=>'NSM', +917874=>'NSM', +917875=>'NSM', +917876=>'NSM', +917877=>'NSM', +917878=>'NSM', +917879=>'NSM', +917880=>'NSM', +917881=>'NSM', +917882=>'NSM', +917883=>'NSM', +917884=>'NSM', +917885=>'NSM', +917886=>'NSM', +917887=>'NSM', +917888=>'NSM', +917889=>'NSM', +917890=>'NSM', +917891=>'NSM', +917892=>'NSM', +917893=>'NSM', +917894=>'NSM', +917895=>'NSM', +917896=>'NSM', +917897=>'NSM', +917898=>'NSM', +917899=>'NSM', +917900=>'NSM', +917901=>'NSM', +917902=>'NSM', +917903=>'NSM', +917904=>'NSM', +917905=>'NSM', +917906=>'NSM', +917907=>'NSM', +917908=>'NSM', +917909=>'NSM', +917910=>'NSM', +917911=>'NSM', +917912=>'NSM', +917913=>'NSM', +917914=>'NSM', +917915=>'NSM', +917916=>'NSM', +917917=>'NSM', +917918=>'NSM', +917919=>'NSM', +917920=>'NSM', +917921=>'NSM', +917922=>'NSM', +917923=>'NSM', +917924=>'NSM', +917925=>'NSM', +917926=>'NSM', +917927=>'NSM', +917928=>'NSM', +917929=>'NSM', +917930=>'NSM', +917931=>'NSM', +917932=>'NSM', +917933=>'NSM', +917934=>'NSM', +917935=>'NSM', +917936=>'NSM', +917937=>'NSM', +917938=>'NSM', +917939=>'NSM', +917940=>'NSM', +917941=>'NSM', +917942=>'NSM', +917943=>'NSM', +917944=>'NSM', +917945=>'NSM', +917946=>'NSM', +917947=>'NSM', +917948=>'NSM', +917949=>'NSM', +917950=>'NSM', +917951=>'NSM', +917952=>'NSM', +917953=>'NSM', +917954=>'NSM', +917955=>'NSM', +917956=>'NSM', +917957=>'NSM', +917958=>'NSM', +917959=>'NSM', +917960=>'NSM', +917961=>'NSM', +917962=>'NSM', +917963=>'NSM', +917964=>'NSM', +917965=>'NSM', +917966=>'NSM', +917967=>'NSM', +917968=>'NSM', +917969=>'NSM', +917970=>'NSM', +917971=>'NSM', +917972=>'NSM', +917973=>'NSM', +917974=>'NSM', +917975=>'NSM', +917976=>'NSM', +917977=>'NSM', +917978=>'NSM', +917979=>'NSM', +917980=>'NSM', +917981=>'NSM', +917982=>'NSM', +917983=>'NSM', +917984=>'NSM', +917985=>'NSM', +917986=>'NSM', +917987=>'NSM', +917988=>'NSM', +917989=>'NSM', +917990=>'NSM', +917991=>'NSM', +917992=>'NSM', +917993=>'NSM', +917994=>'NSM', +917995=>'NSM', +917996=>'NSM', +917997=>'NSM', +917998=>'NSM', +917999=>'NSM', +983040=>'L', +1048573=>'L', +1048576=>'L', +1114109=>'L' +); + +/** + * Mirror unicode characters. For information on bidi mirroring, see UAX #9: Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/ + * @public + */ +public static $uni_mirror = array ( +0x0028=>0x0029, +0x0029=>0x0028, +0x003C=>0x003E, +0x003E=>0x003C, +0x005B=>0x005D, +0x005D=>0x005B, +0x007B=>0x007D, +0x007D=>0x007B, +0x00AB=>0x00BB, +0x00BB=>0x00AB, +0x0F3A=>0x0F3B, +0x0F3B=>0x0F3A, +0x0F3C=>0x0F3D, +0x0F3D=>0x0F3C, +0x169B=>0x169C, +0x169C=>0x169B, +0x2018=>0x2019, +0x2019=>0x2018, +0x201C=>0x201D, +0x201D=>0x201C, +0x2039=>0x203A, +0x203A=>0x2039, +0x2045=>0x2046, +0x2046=>0x2045, +0x207D=>0x207E, +0x207E=>0x207D, +0x208D=>0x208E, +0x208E=>0x208D, +0x2208=>0x220B, +0x2209=>0x220C, +0x220A=>0x220D, +0x220B=>0x2208, +0x220C=>0x2209, +0x220D=>0x220A, +0x2215=>0x29F5, +0x223C=>0x223D, +0x223D=>0x223C, +0x2243=>0x22CD, +0x2252=>0x2253, +0x2253=>0x2252, +0x2254=>0x2255, +0x2255=>0x2254, +0x2264=>0x2265, +0x2265=>0x2264, +0x2266=>0x2267, +0x2267=>0x2266, +0x2268=>0x2269, +0x2269=>0x2268, +0x226A=>0x226B, +0x226B=>0x226A, +0x226E=>0x226F, +0x226F=>0x226E, +0x2270=>0x2271, +0x2271=>0x2270, +0x2272=>0x2273, +0x2273=>0x2272, +0x2274=>0x2275, +0x2275=>0x2274, +0x2276=>0x2277, +0x2277=>0x2276, +0x2278=>0x2279, +0x2279=>0x2278, +0x227A=>0x227B, +0x227B=>0x227A, +0x227C=>0x227D, +0x227D=>0x227C, +0x227E=>0x227F, +0x227F=>0x227E, +0x2280=>0x2281, +0x2281=>0x2280, +0x2282=>0x2283, +0x2283=>0x2282, +0x2284=>0x2285, +0x2285=>0x2284, +0x2286=>0x2287, +0x2287=>0x2286, +0x2288=>0x2289, +0x2289=>0x2288, +0x228A=>0x228B, +0x228B=>0x228A, +0x228F=>0x2290, +0x2290=>0x228F, +0x2291=>0x2292, +0x2292=>0x2291, +0x2298=>0x29B8, +0x22A2=>0x22A3, +0x22A3=>0x22A2, +0x22A6=>0x2ADE, +0x22A8=>0x2AE4, +0x22A9=>0x2AE3, +0x22AB=>0x2AE5, +0x22B0=>0x22B1, +0x22B1=>0x22B0, +0x22B2=>0x22B3, +0x22B3=>0x22B2, +0x22B4=>0x22B5, +0x22B5=>0x22B4, +0x22B6=>0x22B7, +0x22B7=>0x22B6, +0x22C9=>0x22CA, +0x22CA=>0x22C9, +0x22CB=>0x22CC, +0x22CC=>0x22CB, +0x22CD=>0x2243, +0x22D0=>0x22D1, +0x22D1=>0x22D0, +0x22D6=>0x22D7, +0x22D7=>0x22D6, +0x22D8=>0x22D9, +0x22D9=>0x22D8, +0x22DA=>0x22DB, +0x22DB=>0x22DA, +0x22DC=>0x22DD, +0x22DD=>0x22DC, +0x22DE=>0x22DF, +0x22DF=>0x22DE, +0x22E0=>0x22E1, +0x22E1=>0x22E0, +0x22E2=>0x22E3, +0x22E3=>0x22E2, +0x22E4=>0x22E5, +0x22E5=>0x22E4, +0x22E6=>0x22E7, +0x22E7=>0x22E6, +0x22E8=>0x22E9, +0x22E9=>0x22E8, +0x22EA=>0x22EB, +0x22EB=>0x22EA, +0x22EC=>0x22ED, +0x22ED=>0x22EC, +0x22F0=>0x22F1, +0x22F1=>0x22F0, +0x22F2=>0x22FA, +0x22F3=>0x22FB, +0x22F4=>0x22FC, +0x22F6=>0x22FD, +0x22F7=>0x22FE, +0x22FA=>0x22F2, +0x22FB=>0x22F3, +0x22FC=>0x22F4, +0x22FD=>0x22F6, +0x22FE=>0x22F7, +0x2308=>0x2309, +0x2309=>0x2308, +0x230A=>0x230B, +0x230B=>0x230A, +0x2329=>0x232A, +0x232A=>0x2329, +0x2768=>0x2769, +0x2769=>0x2768, +0x276A=>0x276B, +0x276B=>0x276A, +0x276C=>0x276D, +0x276D=>0x276C, +0x276E=>0x276F, +0x276F=>0x276E, +0x2770=>0x2771, +0x2771=>0x2770, +0x2772=>0x2773, +0x2773=>0x2772, +0x2774=>0x2775, +0x2775=>0x2774, +0x27C3=>0x27C4, +0x27C4=>0x27C3, +0x27C5=>0x27C6, +0x27C6=>0x27C5, +0x27D5=>0x27D6, +0x27D6=>0x27D5, +0x27DD=>0x27DE, +0x27DE=>0x27DD, +0x27E2=>0x27E3, +0x27E3=>0x27E2, +0x27E4=>0x27E5, +0x27E5=>0x27E4, +0x27E6=>0x27E7, +0x27E7=>0x27E6, +0x27E8=>0x27E9, +0x27E9=>0x27E8, +0x27EA=>0x27EB, +0x27EB=>0x27EA, +0x2983=>0x2984, +0x2984=>0x2983, +0x2985=>0x2986, +0x2986=>0x2985, +0x2987=>0x2988, +0x2988=>0x2987, +0x2989=>0x298A, +0x298A=>0x2989, +0x298B=>0x298C, +0x298C=>0x298B, +0x298D=>0x2990, +0x298E=>0x298F, +0x298F=>0x298E, +0x2990=>0x298D, +0x2991=>0x2992, +0x2992=>0x2991, +0x2993=>0x2994, +0x2994=>0x2993, +0x2995=>0x2996, +0x2996=>0x2995, +0x2997=>0x2998, +0x2998=>0x2997, +0x29B8=>0x2298, +0x29C0=>0x29C1, +0x29C1=>0x29C0, +0x29C4=>0x29C5, +0x29C5=>0x29C4, +0x29CF=>0x29D0, +0x29D0=>0x29CF, +0x29D1=>0x29D2, +0x29D2=>0x29D1, +0x29D4=>0x29D5, +0x29D5=>0x29D4, +0x29D8=>0x29D9, +0x29D9=>0x29D8, +0x29DA=>0x29DB, +0x29DB=>0x29DA, +0x29F5=>0x2215, +0x29F8=>0x29F9, +0x29F9=>0x29F8, +0x29FC=>0x29FD, +0x29FD=>0x29FC, +0x2A2B=>0x2A2C, +0x2A2C=>0x2A2B, +0x2A2D=>0x2A2E, +0x2A2E=>0x2A2D, +0x2A34=>0x2A35, +0x2A35=>0x2A34, +0x2A3C=>0x2A3D, +0x2A3D=>0x2A3C, +0x2A64=>0x2A65, +0x2A65=>0x2A64, +0x2A79=>0x2A7A, +0x2A7A=>0x2A79, +0x2A7D=>0x2A7E, +0x2A7E=>0x2A7D, +0x2A7F=>0x2A80, +0x2A80=>0x2A7F, +0x2A81=>0x2A82, +0x2A82=>0x2A81, +0x2A83=>0x2A84, +0x2A84=>0x2A83, +0x2A8B=>0x2A8C, +0x2A8C=>0x2A8B, +0x2A91=>0x2A92, +0x2A92=>0x2A91, +0x2A93=>0x2A94, +0x2A94=>0x2A93, +0x2A95=>0x2A96, +0x2A96=>0x2A95, +0x2A97=>0x2A98, +0x2A98=>0x2A97, +0x2A99=>0x2A9A, +0x2A9A=>0x2A99, +0x2A9B=>0x2A9C, +0x2A9C=>0x2A9B, +0x2AA1=>0x2AA2, +0x2AA2=>0x2AA1, +0x2AA6=>0x2AA7, +0x2AA7=>0x2AA6, +0x2AA8=>0x2AA9, +0x2AA9=>0x2AA8, +0x2AAA=>0x2AAB, +0x2AAB=>0x2AAA, +0x2AAC=>0x2AAD, +0x2AAD=>0x2AAC, +0x2AAF=>0x2AB0, +0x2AB0=>0x2AAF, +0x2AB3=>0x2AB4, +0x2AB4=>0x2AB3, +0x2ABB=>0x2ABC, +0x2ABC=>0x2ABB, +0x2ABD=>0x2ABE, +0x2ABE=>0x2ABD, +0x2ABF=>0x2AC0, +0x2AC0=>0x2ABF, +0x2AC1=>0x2AC2, +0x2AC2=>0x2AC1, +0x2AC3=>0x2AC4, +0x2AC4=>0x2AC3, +0x2AC5=>0x2AC6, +0x2AC6=>0x2AC5, +0x2ACD=>0x2ACE, +0x2ACE=>0x2ACD, +0x2ACF=>0x2AD0, +0x2AD0=>0x2ACF, +0x2AD1=>0x2AD2, +0x2AD2=>0x2AD1, +0x2AD3=>0x2AD4, +0x2AD4=>0x2AD3, +0x2AD5=>0x2AD6, +0x2AD6=>0x2AD5, +0x2ADE=>0x22A6, +0x2AE3=>0x22A9, +0x2AE4=>0x22A8, +0x2AE5=>0x22AB, +0x2AEC=>0x2AED, +0x2AED=>0x2AEC, +0x2AF7=>0x2AF8, +0x2AF8=>0x2AF7, +0x2AF9=>0x2AFA, +0x2AFA=>0x2AF9, +0x2E02=>0x2E03, +0x2E03=>0x2E02, +0x2E04=>0x2E05, +0x2E05=>0x2E04, +0x2E09=>0x2E0A, +0x2E0A=>0x2E09, +0x2E0C=>0x2E0D, +0x2E0D=>0x2E0C, +0x2E1C=>0x2E1D, +0x2E1D=>0x2E1C, +0x3008=>0x3009, +0x3009=>0x3008, +0x300A=>0x300B, +0x300B=>0x300A, +0x300C=>0x300D, +0x300D=>0x300C, +0x300E=>0x300F, +0x300F=>0x300E, +0x3010=>0x3011, +0x3011=>0x3010, +0x3014=>0x3015, +0x3015=>0x3014, +0x3016=>0x3017, +0x3017=>0x3016, +0x3018=>0x3019, +0x3019=>0x3018, +0x301A=>0x301B, +0x301B=>0x301A, +0x301D=>0x301E, +0x301E=>0x301D, +0xFE59=>0xFE5A, +0xFE5A=>0xFE59, +0xFE5B=>0xFE5C, +0xFE5C=>0xFE5B, +0xFE5D=>0xFE5E, +0xFE5E=>0xFE5D, +0xFE64=>0xFE65, +0xFE65=>0xFE64, +0xFF08=>0xFF09, +0xFF09=>0xFF08, +0xFF1C=>0xFF1E, +0xFF1E=>0xFF1C, +0xFF3B=>0xFF3D, +0xFF3D=>0xFF3B, +0xFF5B=>0xFF5D, +0xFF5D=>0xFF5B, +0xFF5F=>0xFF60, +0xFF60=>0xFF5F, +0xFF62=>0xFF63, +0xFF63=>0xFF62); + +/** + * Arabic shape substitutions: char code => (isolated, final, initial, medial). + * @public + */ +public static $uni_arabicsubst = array( +1569=>array(65152), +1570=>array(65153, 65154, 65153, 65154), +1571=>array(65155, 65156, 65155, 65156), +1572=>array(65157, 65158), +1573=>array(65159, 65160, 65159, 65160), +1574=>array(65161, 65162, 65163, 65164), +1575=>array(65165, 65166, 65165, 65166), +1576=>array(65167, 65168, 65169, 65170), +1577=>array(65171, 65172), +1578=>array(65173, 65174, 65175, 65176), +1579=>array(65177, 65178, 65179, 65180), +1580=>array(65181, 65182, 65183, 65184), +1581=>array(65185, 65186, 65187, 65188), +1582=>array(65189, 65190, 65191, 65192), +1583=>array(65193, 65194, 65193, 65194), +1584=>array(65195, 65196, 65195, 65196), +1585=>array(65197, 65198, 65197, 65198), +1586=>array(65199, 65200, 65199, 65200), +1587=>array(65201, 65202, 65203, 65204), +1588=>array(65205, 65206, 65207, 65208), +1589=>array(65209, 65210, 65211, 65212), +1590=>array(65213, 65214, 65215, 65216), +1591=>array(65217, 65218, 65219, 65220), +1592=>array(65221, 65222, 65223, 65224), +1593=>array(65225, 65226, 65227, 65228), +1594=>array(65229, 65230, 65231, 65232), +1601=>array(65233, 65234, 65235, 65236), +1602=>array(65237, 65238, 65239, 65240), +1603=>array(65241, 65242, 65243, 65244), +1604=>array(65245, 65246, 65247, 65248), +1605=>array(65249, 65250, 65251, 65252), +1606=>array(65253, 65254, 65255, 65256), +1607=>array(65257, 65258, 65259, 65260), +1608=>array(65261, 65262, 65261, 65262), +1609=>array(65263, 65264, 64488, 64489), +1610=>array(65265, 65266, 65267, 65268), +1649=>array(64336, 64337), +1655=>array(64477), +1657=>array(64358, 64359, 64360, 64361), +1658=>array(64350, 64351, 64352, 64353), +1659=>array(64338, 64339, 64340, 64341), +1662=>array(64342, 64343, 64344, 64345), +1663=>array(64354, 64355, 64356, 64357), +1664=>array(64346, 64347, 64348, 64349), +1667=>array(64374, 64375, 64376, 64377), +1668=>array(64370, 64371, 64372, 64373), +1670=>array(64378, 64379, 64380, 64381), +1671=>array(64382, 64383, 64384, 64385), +1672=>array(64392, 64393), +1676=>array(64388, 64389), +1677=>array(64386, 64387), +1678=>array(64390, 64391), +1681=>array(64396, 64397), +1688=>array(64394, 64395, 64394, 64395), +1700=>array(64362, 64363, 64364, 64365), +1702=>array(64366, 64367, 64368, 64369), +1705=>array(64398, 64399, 64400, 64401), +1709=>array(64467, 64468, 64469, 64470), +1711=>array(64402, 64403, 64404, 64405), +1713=>array(64410, 64411, 64412, 64413), +1715=>array(64406, 64407, 64408, 64409), +1722=>array(64414, 64415), +1723=>array(64416, 64417, 64418, 64419), +1726=>array(64426, 64427, 64428, 64429), +1728=>array(64420, 64421), +1729=>array(64422, 64423, 64424, 64425), +1733=>array(64480, 64481), +1734=>array(64473, 64474), +1735=>array(64471, 64472), +1736=>array(64475, 64476), +1737=>array(64482, 64483), +1739=>array(64478, 64479), +1740=>array(64508, 64509, 64510, 64511), +1744=>array(64484, 64485, 64486, 64487), +1746=>array(64430, 64431), +1747=>array(64432, 64433) +); + +/** + * Arabic laa letter: (char code => isolated, final, initial, medial). + * @public + */ +public static $uni_laa_array = array ( +1570 =>array(65269, 65270, 65269, 65270), +1571 =>array(65271, 65272, 65271, 65272), +1573 =>array(65273, 65274, 65273, 65274), +1575 =>array(65275, 65276, 65275, 65276) +); + +/** + * Array of character substitutions for sequences of two diacritics symbols. + * Putting the combining mark and character in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner. + * second NSM char code => substitution char + * @public + */ +public static $uni_diacritics = array ( +1612=>64606, # Shadda + Dammatan +1613=>64607, # Shadda + Kasratan +1614=>64608, # Shadda + Fatha +1615=>64609, # Shadda + Damma +1616=>64610 # Shadda + Kasra +); + +/** + * Array of character substitutions from UTF-8 Unicode to Latin1. + * @public + */ +public static $uni_utf8tolatin = array ( +8364=>128, # Euro1 +338=>140, # OE +352=>138, # Scaron +376=>159, # Ydieresis +381=>142, # Zcaron2 +8226=>149, # bullet3 +710=>136, # circumflex +8224=>134, # dagger +8225=>135, # daggerdbl +8230=>133, # ellipsis +8212=>151, # emdash +8211=>150, # endash +402=>131, # florin +8249=>139, # guilsinglleft +8250=>155, # guilsinglright +339=>156, # oe +8240=>137, # perthousand +8222=>132, # quotedblbase +8220=>147, # quotedblleft +8221=>148, # quotedblright +8216=>145, # quoteleft +8217=>146, # quoteright +8218=>130, # quotesinglbase +353=>154, # scaron +732=>152, # tilde +8482=>153, # trademark +382=>158 # zcaron2 +); + +/** + * Array of Encoding Maps. + * @public static + */ +public static $encmap = array( + +// encoding map for: cp874 +'cp874' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'ellipsis',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'), + +// encoding map for: cp1250 +'cp1250' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'Sacute',141=>'Tcaron',142=>'Zcaron',143=>'Zacute',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'sacute',157=>'tcaron',158=>'zcaron',159=>'zacute',160=>'space',161=>'caron',162=>'breve',163=>'Lslash',164=>'currency',165=>'Aogonek',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'Scedilla',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'Zdotaccent',176=>'degree',177=>'plusminus',178=>'ogonek',179=>'lslash',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'aogonek',186=>'scedilla',187=>'guillemotright',188=>'Lcaron',189=>'hungarumlaut',190=>'lcaron',191=>'zdotaccent',192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'), + +// encoding map for: cp1251 +'cp1251' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'afii10051',129=>'afii10052',130=>'quotesinglbase',131=>'afii10100',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'Euro',137=>'perthousand',138=>'afii10058',139=>'guilsinglleft',140=>'afii10059',141=>'afii10061',142=>'afii10060',143=>'afii10145',144=>'afii10099',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'afii10106',155=>'guilsinglright',156=>'afii10107',157=>'afii10109',158=>'afii10108',159=>'afii10193',160=>'space',161=>'afii10062',162=>'afii10110',163=>'afii10057',164=>'currency',165=>'afii10050',166=>'brokenbar',167=>'section',168=>'afii10023',169=>'copyright',170=>'afii10053',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii10056',176=>'degree',177=>'plusminus',178=>'afii10055',179=>'afii10103',180=>'afii10098',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'afii10071',185=>'afii61352',186=>'afii10101',187=>'guillemotright',188=>'afii10105',189=>'afii10054',190=>'afii10102',191=>'afii10104',192=>'afii10017',193=>'afii10018',194=>'afii10019',195=>'afii10020',196=>'afii10021',197=>'afii10022',198=>'afii10024',199=>'afii10025',200=>'afii10026',201=>'afii10027',202=>'afii10028',203=>'afii10029',204=>'afii10030',205=>'afii10031',206=>'afii10032',207=>'afii10033',208=>'afii10034',209=>'afii10035',210=>'afii10036',211=>'afii10037',212=>'afii10038',213=>'afii10039',214=>'afii10040',215=>'afii10041',216=>'afii10042',217=>'afii10043',218=>'afii10044',219=>'afii10045',220=>'afii10046',221=>'afii10047',222=>'afii10048',223=>'afii10049',224=>'afii10065',225=>'afii10066',226=>'afii10067',227=>'afii10068',228=>'afii10069',229=>'afii10070',230=>'afii10072',231=>'afii10073',232=>'afii10074',233=>'afii10075',234=>'afii10076',235=>'afii10077',236=>'afii10078',237=>'afii10079',238=>'afii10080',239=>'afii10081',240=>'afii10082',241=>'afii10083',242=>'afii10084',243=>'afii10085',244=>'afii10086',245=>'afii10087',246=>'afii10088',247=>'afii10089',248=>'afii10090',249=>'afii10091',250=>'afii10092',251=>'afii10093',252=>'afii10094',253=>'afii10095',254=>'afii10096',255=>'afii10097'), + +// encoding map for: cp1252 +'cp1252' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'Zcaron',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'zcaron',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), + +// encoding map for: cp1253 +'cp1253' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'dieresistonos',162=>'Alphatonos',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii00208',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'), + +// encoding map for: cp1254 +'cp1254' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'), + +// encoding map for: cp1255 +'cp1255' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'afii57636',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'multiply',171=>'guillemotleft',172=>'logicalnot',173=>'sfthyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'middot',184=>'cedilla',185=>'onesuperior',186=>'divide',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'afii57799',193=>'afii57801',194=>'afii57800',195=>'afii57802',196=>'afii57793',197=>'afii57794',198=>'afii57795',199=>'afii57798',200=>'afii57797',201=>'afii57806',202=>'.notdef',203=>'afii57796',204=>'afii57807',205=>'afii57839',206=>'afii57645',207=>'afii57841',208=>'afii57842',209=>'afii57804',210=>'afii57803',211=>'afii57658',212=>'afii57716',213=>'afii57717',214=>'afii57718',215=>'gereshhebrew',216=>'gershayimhebrew',217=>'.notdef',218=>'.notdef',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'.notdef',224=>'afii57664',225=>'afii57665',226=>'afii57666',227=>'afii57667',228=>'afii57668',229=>'afii57669',230=>'afii57670',231=>'afii57671',232=>'afii57672',233=>'afii57673',234=>'afii57674',235=>'afii57675',236=>'afii57676',237=>'afii57677',238=>'afii57678',239=>'afii57679',240=>'afii57680',241=>'afii57681',242=>'afii57682',243=>'afii57683',244=>'afii57684',245=>'afii57685',246=>'afii57686',247=>'afii57687',248=>'afii57688',249=>'afii57689',250=>'afii57690',251=>'.notdef',252=>'.notdef',253=>'afii299',254=>'afii300',255=>'.notdef'), + +// encoding map for: cp1256 +'cp1256' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'afii57506',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'afii57511',139=>'guilsinglleft',140=>'OE',141=>'afii57507',142=>'afii57508',143=>'afii57512',144=>'afii57509',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'afii57513',155=>'guilsinglright',156=>'oe',157=>'afii61664',158=>'afii301',159=>'afii57514',160=>'space',161=>'afii57388',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'afii57403',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'afii57407',192=>'.notdef',193=>'afii57409',194=>'afii57410',195=>'afii57411',196=>'afii57412',197=>'afii57413',198=>'afii57414',199=>'afii57415',200=>'afii57416',201=>'afii57417',202=>'afii57418',203=>'afii57419',204=>'afii57420',205=>'afii57421',206=>'afii57422',207=>'afii57423',208=>'afii57424',209=>'afii57425',210=>'afii57426',211=>'afii57427',212=>'afii57428',213=>'afii57429',214=>'afii57430',215=>'multiply',216=>'afii57431',217=>'afii57432',218=>'afii57433',219=>'afii57434',220=>'afii57440',221=>'afii57441',222=>'afii57442',223=>'afii57443',224=>'agrave',225=>'afii57444',226=>'acircumflex',227=>'afii57445',228=>'afii57446',229=>'afii57470',230=>'afii57448',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'afii57449',237=>'afii57450',238=>'icircumflex',239=>'idieresis',240=>'afii57451',241=>'afii57452',242=>'afii57453',243=>'afii57454',244=>'ocircumflex',245=>'afii57455',246=>'afii57456',247=>'divide',248=>'afii57457',249=>'ugrave',250=>'afii57458',251=>'ucircumflex',252=>'udieresis',253=>'afii299',254=>'afii300',255=>'afii57519'), + +// encoding map for: cp1257 +'cp1257' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'dieresis',142=>'caron',143=>'cedilla',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'macron',158=>'ogonek',159=>'.notdef',160=>'space',161=>'.notdef',162=>'cent',163=>'sterling',164=>'currency',165=>'.notdef',166=>'brokenbar',167=>'section',168=>'Oslash',169=>'copyright',170=>'Rcommaaccent',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'AE',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'oslash',185=>'onesuperior',186=>'rcommaaccent',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'ae',192=>'Aogonek',193=>'Iogonek',194=>'Amacron',195=>'Cacute',196=>'Adieresis',197=>'Aring',198=>'Eogonek',199=>'Emacron',200=>'Ccaron',201=>'Eacute',202=>'Zacute',203=>'Edotaccent',204=>'Gcommaaccent',205=>'Kcommaaccent',206=>'Imacron',207=>'Lcommaaccent',208=>'Scaron',209=>'Nacute',210=>'Ncommaaccent',211=>'Oacute',212=>'Omacron',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Uogonek',217=>'Lslash',218=>'Sacute',219=>'Umacron',220=>'Udieresis',221=>'Zdotaccent',222=>'Zcaron',223=>'germandbls',224=>'aogonek',225=>'iogonek',226=>'amacron',227=>'cacute',228=>'adieresis',229=>'aring',230=>'eogonek',231=>'emacron',232=>'ccaron',233=>'eacute',234=>'zacute',235=>'edotaccent',236=>'gcommaaccent',237=>'kcommaaccent',238=>'imacron',239=>'lcommaaccent',240=>'scaron',241=>'nacute',242=>'ncommaaccent',243=>'oacute',244=>'omacron',245=>'otilde',246=>'odieresis',247=>'divide',248=>'uogonek',249=>'lslash',250=>'sacute',251=>'umacron',252=>'udieresis',253=>'zdotaccent',254=>'zcaron',255=>'dotaccent'), + +// encoding map for: cp1258 +'cp1258' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'gravecomb',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Dcroat',209=>'Ntilde',210=>'hookabovecomb',211=>'Oacute',212=>'Ocircumflex',213=>'Ohorn',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Uhorn',222=>'tildecomb',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'acutecomb',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'dcroat',241=>'ntilde',242=>'dotbelowcomb',243=>'oacute',244=>'ocircumflex',245=>'ohorn',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'uhorn',254=>'dong',255=>'ydieresis'), + +// encoding map for: iso-8859-1 +'iso-8859-1' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), + +// encoding map for: iso-8859-2 +'iso-8859-2' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'breve',163=>'Lslash',164=>'currency',165=>'Lcaron',166=>'Sacute',167=>'section',168=>'dieresis',169=>'Scaron',170=>'Scedilla',171=>'Tcaron',172=>'Zacute',173=>'hyphen',174=>'Zcaron',175=>'Zdotaccent',176=>'degree',177=>'aogonek',178=>'ogonek',179=>'lslash',180=>'acute',181=>'lcaron',182=>'sacute',183=>'caron',184=>'cedilla',185=>'scaron',186=>'scedilla',187=>'tcaron',188=>'zacute',189=>'hungarumlaut',190=>'zcaron',191=>'zdotaccent',192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'), + +// encoding map for: iso-8859-4 +'iso-8859-4' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'kgreenlandic',163=>'Rcommaaccent',164=>'currency',165=>'Itilde',166=>'Lcommaaccent',167=>'section',168=>'dieresis',169=>'Scaron',170=>'Emacron',171=>'Gcommaaccent',172=>'Tbar',173=>'hyphen',174=>'Zcaron',175=>'macron',176=>'degree',177=>'aogonek',178=>'ogonek',179=>'rcommaaccent',180=>'acute',181=>'itilde',182=>'lcommaaccent',183=>'caron',184=>'cedilla',185=>'scaron',186=>'emacron',187=>'gcommaaccent',188=>'tbar',189=>'Eng',190=>'zcaron',191=>'eng',192=>'Amacron',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Iogonek',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Edotaccent',205=>'Iacute',206=>'Icircumflex',207=>'Imacron',208=>'Dcroat',209=>'Ncommaaccent',210=>'Omacron',211=>'Kcommaaccent',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Uogonek',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Utilde',222=>'Umacron',223=>'germandbls',224=>'amacron',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'iogonek',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'edotaccent',237=>'iacute',238=>'icircumflex',239=>'imacron',240=>'dcroat',241=>'ncommaaccent',242=>'omacron',243=>'kcommaaccent',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'uogonek',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'utilde',254=>'umacron',255=>'dotaccent'), + +// encoding map for: iso-8859-5 +'iso-8859-5' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'afii10023',162=>'afii10051',163=>'afii10052',164=>'afii10053',165=>'afii10054',166=>'afii10055',167=>'afii10056',168=>'afii10057',169=>'afii10058',170=>'afii10059',171=>'afii10060',172=>'afii10061',173=>'hyphen',174=>'afii10062',175=>'afii10145',176=>'afii10017',177=>'afii10018',178=>'afii10019',179=>'afii10020',180=>'afii10021',181=>'afii10022',182=>'afii10024',183=>'afii10025',184=>'afii10026',185=>'afii10027',186=>'afii10028',187=>'afii10029',188=>'afii10030',189=>'afii10031',190=>'afii10032',191=>'afii10033',192=>'afii10034',193=>'afii10035',194=>'afii10036',195=>'afii10037',196=>'afii10038',197=>'afii10039',198=>'afii10040',199=>'afii10041',200=>'afii10042',201=>'afii10043',202=>'afii10044',203=>'afii10045',204=>'afii10046',205=>'afii10047',206=>'afii10048',207=>'afii10049',208=>'afii10065',209=>'afii10066',210=>'afii10067',211=>'afii10068',212=>'afii10069',213=>'afii10070',214=>'afii10072',215=>'afii10073',216=>'afii10074',217=>'afii10075',218=>'afii10076',219=>'afii10077',220=>'afii10078',221=>'afii10079',222=>'afii10080',223=>'afii10081',224=>'afii10082',225=>'afii10083',226=>'afii10084',227=>'afii10085',228=>'afii10086',229=>'afii10087',230=>'afii10088',231=>'afii10089',232=>'afii10090',233=>'afii10091',234=>'afii10092',235=>'afii10093',236=>'afii10094',237=>'afii10095',238=>'afii10096',239=>'afii10097',240=>'afii61352',241=>'afii10071',242=>'afii10099',243=>'afii10100',244=>'afii10101',245=>'afii10102',246=>'afii10103',247=>'afii10104',248=>'afii10105',249=>'afii10106',250=>'afii10107',251=>'afii10108',252=>'afii10109',253=>'section',254=>'afii10110',255=>'afii10193'), + +// encoding map for: iso-8859-7 +'iso-8859-7' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'quoteleft',162=>'quoteright',163=>'sterling',164=>'.notdef',165=>'.notdef',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'.notdef',175=>'afii00208',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'dieresistonos',182=>'Alphatonos',183=>'periodcentered',184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'), + +// encoding map for: iso-8859-9 +'iso-8859-9' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'), + +// encoding map for: iso-8859-11 +'iso-8859-11' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'), + +// encoding map for: iso-8859-15 +'iso-8859-15' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'Euro',165=>'yen',166=>'Scaron',167=>'section',168=>'scaron',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'Zcaron',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'zcaron',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), + +// encoding map for: iso-8859-16 +'iso-8859-16' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'aogonek',163=>'Lslash',164=>'Euro',165=>'quotedblbase',166=>'Scaron',167=>'section',168=>'scaron',169=>'copyright',170=>'Scommaaccent',171=>'guillemotleft',172=>'Zacute',173=>'hyphen',174=>'zacute',175=>'Zdotaccent',176=>'degree',177=>'plusminus',178=>'Ccaron',179=>'lslash',180=>'Zcaron',181=>'quotedblright',182=>'paragraph',183=>'periodcentered',184=>'zcaron',185=>'ccaron',186=>'scommaaccent',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'zdotaccent',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Cacute',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Dcroat',209=>'Nacute',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'Sacute',216=>'Uhungarumlaut',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Eogonek',222=>'Tcommaaccent',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'cacute',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'dcroat',241=>'nacute',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'sacute',248=>'uhungarumlaut',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'eogonek',254=>'tcommaaccent',255=>'ydieresis'), + +// encoding map for: koi8-r +'koi8-r' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'periodcentered',150=>'radical',151=>'approxequal',152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'SF520000',165=>'SF390000',166=>'SF220000',167=>'SF210000',168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'SF270000',174=>'SF260000',175=>'SF360000',176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'SF200000',181=>'SF230000',182=>'SF470000',183=>'SF480000',184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'SF530000',190=>'SF440000',191=>'copyright',192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'), + +// encoding map for: koi8-u +'koi8-u' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'bullet',150=>'radical',151=>'approxequal',152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'afii10101',165=>'SF390000',166=>'afii10103',167=>'afii10104',168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'afii10098',174=>'SF260000',175=>'SF360000',176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'afii10053',181=>'SF230000',182=>'afii10055',183=>'afii10056',184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'afii10050',190=>'SF440000',191=>'copyright',192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'), + +// encoding map for: symbol +'symbol' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'universal',35=>'numbersign',36=>'existential',37=>'percent',38=>'ampersand',39=>'suchthat',40=>'parenleft',41=>'parenright',42=>'asteriskmath',43=>'plus',44=>'comma',45=>'minus',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'congruent',65=>'Alpha',66=>'Beta',67=>'Chi',68=>'Delta',69=>'Epsilon',70=>'Phi',71=>'Gamma',72=>'Eta',73=>'Iota',74=>'theta1',75=>'Kappa',76=>'Lambda',77=>'Mu',78=>'Nu',79=>'Omicron',80=>'Pi',81=>'Theta',82=>'Rho',83=>'Sigma',84=>'Tau',85=>'Upsilon',86=>'sigma1',87=>'Omega',88=>'Xi',89=>'Psi',90=>'Zeta',91=>'bracketleft',92=>'therefore',93=>'bracketright',94=>'perpendicular',95=>'underscore',96=>'radicalex',97=>'alpha',98=>'beta',99=>'chi',100=>'delta',101=>'epsilon',102=>'phi',103=>'gamma',104=>'eta',105=>'iota',106=>'phi1',107=>'kappa',108=>'lambda',109=>'mu',110=>'nu',111=>'omicron',112=>'pi',113=>'theta',114=>'rho',115=>'sigma',116=>'tau',117=>'upsilon',118=>'omega1',119=>'omega',120=>'xi',121=>'psi',122=>'zeta',123=>'braceleft',124=>'bar',125=>'braceright',126=>'similar',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'Euro',161=>'Upsilon1',162=>'minute',163=>'lessequal',164=>'fraction',165=>'infinity',166=>'florin',167=>'club',168=>'diamond',169=>'heart',170=>'spade',171=>'arrowboth',172=>'arrowleft',173=>'arrowup',174=>'arrowright',175=>'arrowdown',176=>'degree',177=>'plusminus',178=>'second',179=>'greaterequal',180=>'multiply',181=>'proportional',182=>'partialdiff',183=>'bullet',184=>'divide',185=>'notequal',186=>'equivalence',187=>'approxequal',188=>'ellipsis',189=>'arrowvertex',190=>'arrowhorizex',191=>'carriagereturn',192=>'aleph',193=>'Ifraktur',194=>'Rfraktur',195=>'weierstrass',196=>'circlemultiply',197=>'circleplus',198=>'emptyset',199=>'intersection',200=>'union',201=>'propersuperset',202=>'reflexsuperset',203=>'notsubset',204=>'propersubset',205=>'reflexsubset',206=>'element',207=>'notelement',208=>'angle',209=>'gradient',210=>'registerserif',211=>'copyrightserif',212=>'trademarkserif',213=>'product',214=>'radical',215=>'dotmath',216=>'logicalnot',217=>'logicaland',218=>'logicalor',219=>'arrowdblboth',220=>'arrowdblleft',221=>'arrowdblup',222=>'arrowdblright',223=>'arrowdbldown',224=>'lozenge',225=>'angleleft',226=>'registersans',227=>'copyrightsans',228=>'trademarksans',229=>'summation',230=>'parenlefttp',231=>'parenleftex',232=>'parenleftbt',233=>'bracketlefttp',234=>'bracketleftex',235=>'bracketleftbt',236=>'bracelefttp',237=>'braceleftmid',238=>'braceleftbt',239=>'braceex',240=>'.notdef',241=>'angleright',242=>'integral',243=>'integraltp',244=>'integralex',245=>'integralbt',246=>'parenrighttp',247=>'parenrightex',248=>'parenrightbt',249=>'bracketrighttp',250=>'bracketrightex',251=>'bracketrightbt',252=>'bracerighttp',253=>'bracerightmid',254=>'bracerightbt',255=>'.notdef',1226=>'registered',1227=>'copyright',1228=>'trademark') + +); // end of encoding maps + +/** + * ToUnicode map for Identity-H stream + * @public static + */ +public static $uni_identity_h = "/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n/WMode 0 def\n1 begincodespacerange\n<0000> <FFFF>\nendcodespacerange\n100 beginbfrange\n<0000> <00ff> <0000>\n<0100> <01ff> <0100>\n<0200> <02ff> <0200>\n<0300> <03ff> <0300>\n<0400> <04ff> <0400>\n<0500> <05ff> <0500>\n<0600> <06ff> <0600>\n<0700> <07ff> <0700>\n<0800> <08ff> <0800>\n<0900> <09ff> <0900>\n<0a00> <0aff> <0a00>\n<0b00> <0bff> <0b00>\n<0c00> <0cff> <0c00>\n<0d00> <0dff> <0d00>\n<0e00> <0eff> <0e00>\n<0f00> <0fff> <0f00>\n<1000> <10ff> <1000>\n<1100> <11ff> <1100>\n<1200> <12ff> <1200>\n<1300> <13ff> <1300>\n<1400> <14ff> <1400>\n<1500> <15ff> <1500>\n<1600> <16ff> <1600>\n<1700> <17ff> <1700>\n<1800> <18ff> <1800>\n<1900> <19ff> <1900>\n<1a00> <1aff> <1a00>\n<1b00> <1bff> <1b00>\n<1c00> <1cff> <1c00>\n<1d00> <1dff> <1d00>\n<1e00> <1eff> <1e00>\n<1f00> <1fff> <1f00>\n<2000> <20ff> <2000>\n<2100> <21ff> <2100>\n<2200> <22ff> <2200>\n<2300> <23ff> <2300>\n<2400> <24ff> <2400>\n<2500> <25ff> <2500>\n<2600> <26ff> <2600>\n<2700> <27ff> <2700>\n<2800> <28ff> <2800>\n<2900> <29ff> <2900>\n<2a00> <2aff> <2a00>\n<2b00> <2bff> <2b00>\n<2c00> <2cff> <2c00>\n<2d00> <2dff> <2d00>\n<2e00> <2eff> <2e00>\n<2f00> <2fff> <2f00>\n<3000> <30ff> <3000>\n<3100> <31ff> <3100>\n<3200> <32ff> <3200>\n<3300> <33ff> <3300>\n<3400> <34ff> <3400>\n<3500> <35ff> <3500>\n<3600> <36ff> <3600>\n<3700> <37ff> <3700>\n<3800> <38ff> <3800>\n<3900> <39ff> <3900>\n<3a00> <3aff> <3a00>\n<3b00> <3bff> <3b00>\n<3c00> <3cff> <3c00>\n<3d00> <3dff> <3d00>\n<3e00> <3eff> <3e00>\n<3f00> <3fff> <3f00>\n<4000> <40ff> <4000>\n<4100> <41ff> <4100>\n<4200> <42ff> <4200>\n<4300> <43ff> <4300>\n<4400> <44ff> <4400>\n<4500> <45ff> <4500>\n<4600> <46ff> <4600>\n<4700> <47ff> <4700>\n<4800> <48ff> <4800>\n<4900> <49ff> <4900>\n<4a00> <4aff> <4a00>\n<4b00> <4bff> <4b00>\n<4c00> <4cff> <4c00>\n<4d00> <4dff> <4d00>\n<4e00> <4eff> <4e00>\n<4f00> <4fff> <4f00>\n<5000> <50ff> <5000>\n<5100> <51ff> <5100>\n<5200> <52ff> <5200>\n<5300> <53ff> <5300>\n<5400> <54ff> <5400>\n<5500> <55ff> <5500>\n<5600> <56ff> <5600>\n<5700> <57ff> <5700>\n<5800> <58ff> <5800>\n<5900> <59ff> <5900>\n<5a00> <5aff> <5a00>\n<5b00> <5bff> <5b00>\n<5c00> <5cff> <5c00>\n<5d00> <5dff> <5d00>\n<5e00> <5eff> <5e00>\n<5f00> <5fff> <5f00>\n<6000> <60ff> <6000>\n<6100> <61ff> <6100>\n<6200> <62ff> <6200>\n<6300> <63ff> <6300>\nendbfrange\n100 beginbfrange\n<6400> <64ff> <6400>\n<6500> <65ff> <6500>\n<6600> <66ff> <6600>\n<6700> <67ff> <6700>\n<6800> <68ff> <6800>\n<6900> <69ff> <6900>\n<6a00> <6aff> <6a00>\n<6b00> <6bff> <6b00>\n<6c00> <6cff> <6c00>\n<6d00> <6dff> <6d00>\n<6e00> <6eff> <6e00>\n<6f00> <6fff> <6f00>\n<7000> <70ff> <7000>\n<7100> <71ff> <7100>\n<7200> <72ff> <7200>\n<7300> <73ff> <7300>\n<7400> <74ff> <7400>\n<7500> <75ff> <7500>\n<7600> <76ff> <7600>\n<7700> <77ff> <7700>\n<7800> <78ff> <7800>\n<7900> <79ff> <7900>\n<7a00> <7aff> <7a00>\n<7b00> <7bff> <7b00>\n<7c00> <7cff> <7c00>\n<7d00> <7dff> <7d00>\n<7e00> <7eff> <7e00>\n<7f00> <7fff> <7f00>\n<8000> <80ff> <8000>\n<8100> <81ff> <8100>\n<8200> <82ff> <8200>\n<8300> <83ff> <8300>\n<8400> <84ff> <8400>\n<8500> <85ff> <8500>\n<8600> <86ff> <8600>\n<8700> <87ff> <8700>\n<8800> <88ff> <8800>\n<8900> <89ff> <8900>\n<8a00> <8aff> <8a00>\n<8b00> <8bff> <8b00>\n<8c00> <8cff> <8c00>\n<8d00> <8dff> <8d00>\n<8e00> <8eff> <8e00>\n<8f00> <8fff> <8f00>\n<9000> <90ff> <9000>\n<9100> <91ff> <9100>\n<9200> <92ff> <9200>\n<9300> <93ff> <9300>\n<9400> <94ff> <9400>\n<9500> <95ff> <9500>\n<9600> <96ff> <9600>\n<9700> <97ff> <9700>\n<9800> <98ff> <9800>\n<9900> <99ff> <9900>\n<9a00> <9aff> <9a00>\n<9b00> <9bff> <9b00>\n<9c00> <9cff> <9c00>\n<9d00> <9dff> <9d00>\n<9e00> <9eff> <9e00>\n<9f00> <9fff> <9f00>\n<a000> <a0ff> <a000>\n<a100> <a1ff> <a100>\n<a200> <a2ff> <a200>\n<a300> <a3ff> <a300>\n<a400> <a4ff> <a400>\n<a500> <a5ff> <a500>\n<a600> <a6ff> <a600>\n<a700> <a7ff> <a700>\n<a800> <a8ff> <a800>\n<a900> <a9ff> <a900>\n<aa00> <aaff> <aa00>\n<ab00> <abff> <ab00>\n<ac00> <acff> <ac00>\n<ad00> <adff> <ad00>\n<ae00> <aeff> <ae00>\n<af00> <afff> <af00>\n<b000> <b0ff> <b000>\n<b100> <b1ff> <b100>\n<b200> <b2ff> <b200>\n<b300> <b3ff> <b300>\n<b400> <b4ff> <b400>\n<b500> <b5ff> <b500>\n<b600> <b6ff> <b600>\n<b700> <b7ff> <b700>\n<b800> <b8ff> <b800>\n<b900> <b9ff> <b900>\n<ba00> <baff> <ba00>\n<bb00> <bbff> <bb00>\n<bc00> <bcff> <bc00>\n<bd00> <bdff> <bd00>\n<be00> <beff> <be00>\n<bf00> <bfff> <bf00>\n<c000> <c0ff> <c000>\n<c100> <c1ff> <c100>\n<c200> <c2ff> <c200>\n<c300> <c3ff> <c300>\n<c400> <c4ff> <c400>\n<c500> <c5ff> <c500>\n<c600> <c6ff> <c600>\n<c700> <c7ff> <c700>\nendbfrange\n56 beginbfrange\n<c800> <c8ff> <c800>\n<c900> <c9ff> <c900>\n<ca00> <caff> <ca00>\n<cb00> <cbff> <cb00>\n<cc00> <ccff> <cc00>\n<cd00> <cdff> <cd00>\n<ce00> <ceff> <ce00>\n<cf00> <cfff> <cf00>\n<d000> <d0ff> <d000>\n<d100> <d1ff> <d100>\n<d200> <d2ff> <d200>\n<d300> <d3ff> <d300>\n<d400> <d4ff> <d400>\n<d500> <d5ff> <d500>\n<d600> <d6ff> <d600>\n<d700> <d7ff> <d700>\n<d800> <d8ff> <d800>\n<d900> <d9ff> <d900>\n<da00> <daff> <da00>\n<db00> <dbff> <db00>\n<dc00> <dcff> <dc00>\n<dd00> <ddff> <dd00>\n<de00> <deff> <de00>\n<df00> <dfff> <df00>\n<e000> <e0ff> <e000>\n<e100> <e1ff> <e100>\n<e200> <e2ff> <e200>\n<e300> <e3ff> <e300>\n<e400> <e4ff> <e400>\n<e500> <e5ff> <e500>\n<e600> <e6ff> <e600>\n<e700> <e7ff> <e700>\n<e800> <e8ff> <e800>\n<e900> <e9ff> <e900>\n<ea00> <eaff> <ea00>\n<eb00> <ebff> <eb00>\n<ec00> <ecff> <ec00>\n<ed00> <edff> <ed00>\n<ee00> <eeff> <ee00>\n<ef00> <efff> <ef00>\n<f000> <f0ff> <f000>\n<f100> <f1ff> <f100>\n<f200> <f2ff> <f200>\n<f300> <f3ff> <f300>\n<f400> <f4ff> <f400>\n<f500> <f5ff> <f500>\n<f600> <f6ff> <f600>\n<f700> <f7ff> <f700>\n<f800> <f8ff> <f800>\n<f900> <f9ff> <f900>\n<fa00> <faff> <fa00>\n<fb00> <fbff> <fb00>\n<fc00> <fcff> <fc00>\n<fd00> <fdff> <fd00>\n<fe00> <feff> <fe00>\n<ff00> <ffff> <ff00>\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"; + +} // END OF TCPDF_FONT_DATA CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/tcpdf_fonts.php b/tcpdf/include/tcpdf_fonts.php new file mode 100644 index 0000000..70ca893 --- /dev/null +++ b/tcpdf/include/tcpdf_fonts.php @@ -0,0 +1,2649 @@ +<?php +//============================================================+ +// File name : tcpdf_fonts.php +// Version : 1.1.0 +// Begin : 2008-01-01 +// Last Update : 2014-12-10 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2008-2014 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description :Font methods for TCPDF library. +// +//============================================================+ + +/** + * @file + * Unicode data and font methods for TCPDF library. + * @author Nicola Asuni + * @package com.tecnick.tcpdf + */ + +/** + * @class TCPDF_FONTS + * Font methods for TCPDF library. + * @package com.tecnick.tcpdf + * @version 1.1.0 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_FONTS { + + /** + * Static cache used for speed up uniord performances + * @protected + */ + protected static $cache_uniord = array(); + + /** + * Convert and add the selected TrueType or Type1 font to the fonts folder (that must be writeable). + * @param $fontfile (string) Font file (full path). + * @param $fonttype (string) Font type. Leave empty for autodetect mode. Valid values are: TrueTypeUnicode, TrueType, Type1, CID0JP = CID-0 Japanese, CID0KR = CID-0 Korean, CID0CS = CID-0 Chinese Simplified, CID0CT = CID-0 Chinese Traditional. + * @param $enc (string) Name of the encoding table to use. Leave empty for default mode. Omit this parameter for TrueType Unicode and symbolic fonts like Symbol or ZapfDingBats. + * @param $flags (int) Unsigned 32-bit integer containing flags specifying various characteristics of the font (PDF32000:2008 - 9.8.2 Font Descriptor Flags): +1 for fixed font; +4 for symbol or +32 for non-symbol; +64 for italic. Fixed and Italic mode are generally autodetected so you have to set it to 32 = non-symbolic font (default) or 4 = symbolic font. + * @param $outpath (string) Output path for generated font files (must be writeable by the web server). Leave empty for default font folder. + * @param $platid (int) Platform ID for CMAP table to extract (when building a Unicode font for Windows this value should be 3, for Macintosh should be 1). + * @param $encid (int) Encoding ID for CMAP table to extract (when building a Unicode font for Windows this value should be 1, for Macintosh should be 0). When Platform ID is 3, legal values for Encoding ID are: 0=Symbol, 1=Unicode, 2=ShiftJIS, 3=PRC, 4=Big5, 5=Wansung, 6=Johab, 7=Reserved, 8=Reserved, 9=Reserved, 10=UCS-4. + * @param $addcbbox (boolean) If true includes the character bounding box information on the php font file. + * @param $link (boolean) If true link to system font instead of copying the font data (not transportable) - Note: do not work with Type1 fonts. + * @return (string) TCPDF font name or boolean false in case of error. + * @author Nicola Asuni + * @since 5.9.123 (2010-09-30) + * @public static + */ + public static function addTTFfont($fontfile, $fonttype='', $enc='', $flags=32, $outpath='', $platid=3, $encid=1, $addcbbox=false, $link=false) { + if (!file_exists($fontfile)) { + // Could not find file + return false; + } + // font metrics + $fmetric = array(); + // build new font name for TCPDF compatibility + $font_path_parts = pathinfo($fontfile); + if (!isset($font_path_parts['filename'])) { + $font_path_parts['filename'] = substr($font_path_parts['basename'], 0, -(strlen($font_path_parts['extension']) + 1)); + } + $font_name = strtolower($font_path_parts['filename']); + $font_name = preg_replace('/[^a-z0-9_]/', '', $font_name); + $search = array('bold', 'oblique', 'italic', 'regular'); + $replace = array('b', 'i', 'i', ''); + $font_name = str_replace($search, $replace, $font_name); + if (empty($font_name)) { + // set generic name + $font_name = 'tcpdffont'; + } + // set output path + if (empty($outpath)) { + $outpath = self::_getfontpath(); + } + // check if this font already exist + if (@file_exists($outpath.$font_name.'.php')) { + // this font already exist (delete it from fonts folder to rebuild it) + return $font_name; + } + $fmetric['file'] = $font_name; + $fmetric['ctg'] = $font_name.'.ctg.z'; + // get font data + $font = file_get_contents($fontfile); + $fmetric['originalsize'] = strlen($font); + // autodetect font type + if (empty($fonttype)) { + if (TCPDF_STATIC::_getULONG($font, 0) == 0x10000) { + // True Type (Unicode or not) + $fonttype = 'TrueTypeUnicode'; + } elseif (substr($font, 0, 4) == 'OTTO') { + // Open Type (Unicode or not) + //Unsupported font format: OpenType with CFF data + return false; + } else { + // Type 1 + $fonttype = 'Type1'; + } + } + // set font type + switch ($fonttype) { + case 'CID0CT': + case 'CID0CS': + case 'CID0KR': + case 'CID0JP': { + $fmetric['type'] = 'cidfont0'; + break; + } + case 'Type1': { + $fmetric['type'] = 'Type1'; + if (empty($enc) AND (($flags & 4) == 0)) { + $enc = 'cp1252'; + } + break; + } + case 'TrueType': { + $fmetric['type'] = 'TrueType'; + break; + } + case 'TrueTypeUnicode': + default: { + $fmetric['type'] = 'TrueTypeUnicode'; + break; + } + } + // set encoding maps (if any) + $fmetric['enc'] = preg_replace('/[^A-Za-z0-9_\-]/', '', $enc); + $fmetric['diff'] = ''; + if (($fmetric['type'] == 'TrueType') OR ($fmetric['type'] == 'Type1')) { + if (!empty($enc) AND ($enc != 'cp1252') AND isset(TCPDF_FONT_DATA::$encmap[$enc])) { + // build differences from reference encoding + $enc_ref = TCPDF_FONT_DATA::$encmap['cp1252']; + $enc_target = TCPDF_FONT_DATA::$encmap[$enc]; + $last = 0; + for ($i = 32; $i <= 255; ++$i) { + if ($enc_target[$i] != $enc_ref[$i]) { + if ($i != ($last + 1)) { + $fmetric['diff'] .= $i.' '; + } + $last = $i; + $fmetric['diff'] .= '/'.$enc_target[$i].' '; + } + } + } + } + // parse the font by type + if ($fmetric['type'] == 'Type1') { + // ---------- TYPE 1 ---------- + // read first segment + $a = unpack('Cmarker/Ctype/Vsize', substr($font, 0, 6)); + if ($a['marker'] != 128) { + // Font file is not a valid binary Type1 + return false; + } + $fmetric['size1'] = $a['size']; + $data = substr($font, 6, $fmetric['size1']); + // read second segment + $a = unpack('Cmarker/Ctype/Vsize', substr($font, (6 + $fmetric['size1']), 6)); + if ($a['marker'] != 128) { + // Font file is not a valid binary Type1 + return false; + } + $fmetric['size2'] = $a['size']; + $encrypted = substr($font, (12 + $fmetric['size1']), $fmetric['size2']); + $data .= $encrypted; + // store compressed font + $fmetric['file'] .= '.z'; + $fp = TCPDF_STATIC::fopenLocal($outpath.$fmetric['file'], 'wb'); + fwrite($fp, gzcompress($data)); + fclose($fp); + // get font info + $fmetric['Flags'] = $flags; + preg_match ('#/FullName[\s]*\(([^\)]*)#', $font, $matches); + $fmetric['name'] = preg_replace('/[^a-zA-Z0-9_\-]/', '', $matches[1]); + preg_match('#/FontBBox[\s]*{([^}]*)#', $font, $matches); + $fmetric['bbox'] = trim($matches[1]); + $bv = explode(' ', $fmetric['bbox']); + $fmetric['Ascent'] = intval($bv[3]); + $fmetric['Descent'] = intval($bv[1]); + preg_match('#/ItalicAngle[\s]*([0-9\+\-]*)#', $font, $matches); + $fmetric['italicAngle'] = intval($matches[1]); + if ($fmetric['italicAngle'] != 0) { + $fmetric['Flags'] |= 64; + } + preg_match('#/UnderlinePosition[\s]*([0-9\+\-]*)#', $font, $matches); + $fmetric['underlinePosition'] = intval($matches[1]); + preg_match('#/UnderlineThickness[\s]*([0-9\+\-]*)#', $font, $matches); + $fmetric['underlineThickness'] = intval($matches[1]); + preg_match('#/isFixedPitch[\s]*([^\s]*)#', $font, $matches); + if ($matches[1] == 'true') { + $fmetric['Flags'] |= 1; + } + // get internal map + $imap = array(); + if (preg_match_all('#dup[\s]([0-9]+)[\s]*/([^\s]*)[\s]put#sU', $font, $fmap, PREG_SET_ORDER) > 0) { + foreach ($fmap as $v) { + $imap[$v[2]] = $v[1]; + } + } + // decrypt eexec encrypted part + $r = 55665; // eexec encryption constant + $c1 = 52845; + $c2 = 22719; + $elen = strlen($encrypted); + $eplain = ''; + for ($i = 0; $i < $elen; ++$i) { + $chr = ord($encrypted[$i]); + $eplain .= chr($chr ^ ($r >> 8)); + $r = ((($chr + $r) * $c1 + $c2) % 65536); + } + if (preg_match('#/ForceBold[\s]*([^\s]*)#', $eplain, $matches) > 0) { + if ($matches[1] == 'true') { + $fmetric['Flags'] |= 0x40000; + } + } + if (preg_match('#/StdVW[\s]*\[([^\]]*)#', $eplain, $matches) > 0) { + $fmetric['StemV'] = intval($matches[1]); + } else { + $fmetric['StemV'] = 70; + } + if (preg_match('#/StdHW[\s]*\[([^\]]*)#', $eplain, $matches) > 0) { + $fmetric['StemH'] = intval($matches[1]); + } else { + $fmetric['StemH'] = 30; + } + if (preg_match('#/BlueValues[\s]*\[([^\]]*)#', $eplain, $matches) > 0) { + $bv = explode(' ', $matches[1]); + if (count($bv) >= 6) { + $v1 = intval($bv[2]); + $v2 = intval($bv[4]); + if ($v1 <= $v2) { + $fmetric['XHeight'] = $v1; + $fmetric['CapHeight'] = $v2; + } else { + $fmetric['XHeight'] = $v2; + $fmetric['CapHeight'] = $v1; + } + } else { + $fmetric['XHeight'] = 450; + $fmetric['CapHeight'] = 700; + } + } else { + $fmetric['XHeight'] = 450; + $fmetric['CapHeight'] = 700; + } + // get the number of random bytes at the beginning of charstrings + if (preg_match('#/lenIV[\s]*([0-9]*)#', $eplain, $matches) > 0) { + $lenIV = intval($matches[1]); + } else { + $lenIV = 4; + } + $fmetric['Leading'] = 0; + // get charstring data + $eplain = substr($eplain, (strpos($eplain, '/CharStrings') + 1)); + preg_match_all('#/([A-Za-z0-9\.]*)[\s][0-9]+[\s]RD[\s](.*)[\s]ND#sU', $eplain, $matches, PREG_SET_ORDER); + if (!empty($enc) AND isset(TCPDF_FONT_DATA::$encmap[$enc])) { + $enc_map = TCPDF_FONT_DATA::$encmap[$enc]; + } else { + $enc_map = false; + } + $fmetric['cw'] = ''; + $fmetric['MaxWidth'] = 0; + $cwidths = array(); + foreach ($matches as $k => $v) { + $cid = 0; + if (isset($imap[$v[1]])) { + $cid = $imap[$v[1]]; + } elseif ($enc_map !== false) { + $cid = array_search($v[1], $enc_map); + if ($cid === false) { + $cid = 0; + } elseif ($cid > 1000) { + $cid -= 1000; + } + } + // decrypt charstring encrypted part + $r = 4330; // charstring encryption constant + $c1 = 52845; + $c2 = 22719; + $cd = $v[2]; + $clen = strlen($cd); + $ccom = array(); + for ($i = 0; $i < $clen; ++$i) { + $chr = ord($cd[$i]); + $ccom[] = ($chr ^ ($r >> 8)); + $r = ((($chr + $r) * $c1 + $c2) % 65536); + } + // decode numbers + $cdec = array(); + $ck = 0; + $i = $lenIV; + while ($i < $clen) { + if ($ccom[$i] < 32) { + $cdec[$ck] = $ccom[$i]; + if (($ck > 0) AND ($cdec[$ck] == 13)) { + // hsbw command: update width + $cwidths[$cid] = $cdec[($ck - 1)]; + } + ++$i; + } elseif (($ccom[$i] >= 32) AND ($ccom[$i] <= 246)) { + $cdec[$ck] = ($ccom[$i] - 139); + ++$i; + } elseif (($ccom[$i] >= 247) AND ($ccom[$i] <= 250)) { + $cdec[$ck] = ((($ccom[$i] - 247) * 256) + $ccom[($i + 1)] + 108); + $i += 2; + } elseif (($ccom[$i] >= 251) AND ($ccom[$i] <= 254)) { + $cdec[$ck] = ((-($ccom[$i] - 251) * 256) - $ccom[($i + 1)] - 108); + $i += 2; + } elseif ($ccom[$i] == 255) { + $sval = chr($ccom[($i + 1)]).chr($ccom[($i + 2)]).chr($ccom[($i + 3)]).chr($ccom[($i + 4)]); + $vsval = unpack('li', $sval); + $cdec[$ck] = $vsval['i']; + $i += 5; + } + ++$ck; + } + } // end for each matches + $fmetric['MissingWidth'] = $cwidths[0]; + $fmetric['MaxWidth'] = $fmetric['MissingWidth']; + $fmetric['AvgWidth'] = 0; + // set chars widths + for ($cid = 0; $cid <= 255; ++$cid) { + if (isset($cwidths[$cid])) { + if ($cwidths[$cid] > $fmetric['MaxWidth']) { + $fmetric['MaxWidth'] = $cwidths[$cid]; + } + $fmetric['AvgWidth'] += $cwidths[$cid]; + $fmetric['cw'] .= ','.$cid.'=>'.$cwidths[$cid]; + } else { + $fmetric['cw'] .= ','.$cid.'=>'.$fmetric['MissingWidth']; + } + } + $fmetric['AvgWidth'] = round($fmetric['AvgWidth'] / count($cwidths)); + } else { + // ---------- TRUE TYPE ---------- + $offset = 0; // offset position of the font data + if (TCPDF_STATIC::_getULONG($font, $offset) != 0x10000) { + // sfnt version must be 0x00010000 for TrueType version 1.0. + return false; + } + if ($fmetric['type'] != 'cidfont0') { + if ($link) { + // creates a symbolic link to the existing font + symlink($fontfile, $outpath.$fmetric['file']); + } else { + // store compressed font + $fmetric['file'] .= '.z'; + $fp = TCPDF_STATIC::fopenLocal($outpath.$fmetric['file'], 'wb'); + fwrite($fp, gzcompress($font)); + fclose($fp); + } + } + $offset += 4; + // get number of tables + $numTables = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + // skip searchRange, entrySelector and rangeShift + $offset += 6; + // tables array + $table = array(); + // ---------- get tables ---------- + for ($i = 0; $i < $numTables; ++$i) { + // get table info + $tag = substr($font, $offset, 4); + $offset += 4; + $table[$tag] = array(); + $table[$tag]['checkSum'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $table[$tag]['offset'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $table[$tag]['length'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + } + // check magicNumber + $offset = $table['head']['offset'] + 12; + if (TCPDF_STATIC::_getULONG($font, $offset) != 0x5F0F3CF5) { + // magicNumber must be 0x5F0F3CF5 + return false; + } + $offset += 4; + $offset += 2; // skip flags + // get FUnits + $fmetric['unitsPerEm'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + // units ratio constant + $urk = (1000 / $fmetric['unitsPerEm']); + $offset += 16; // skip created, modified + $xMin = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + $yMin = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + $xMax = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + $yMax = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + $fmetric['bbox'] = ''.$xMin.' '.$yMin.' '.$xMax.' '.$yMax.''; + $macStyle = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + // PDF font flags + $fmetric['Flags'] = $flags; + if (($macStyle & 2) == 2) { + // italic flag + $fmetric['Flags'] |= 64; + } + // get offset mode (indexToLocFormat : 0 = short, 1 = long) + $offset = $table['head']['offset'] + 50; + $short_offset = (TCPDF_STATIC::_getSHORT($font, $offset) == 0); + $offset += 2; + // get the offsets to the locations of the glyphs in the font, relative to the beginning of the glyphData table + $indexToLoc = array(); + $offset = $table['loca']['offset']; + if ($short_offset) { + // short version + $tot_num_glyphs = floor($table['loca']['length'] / 2); // numGlyphs + 1 + for ($i = 0; $i < $tot_num_glyphs; ++$i) { + $indexToLoc[$i] = TCPDF_STATIC::_getUSHORT($font, $offset) * 2; + if (isset($indexToLoc[($i - 1)]) && ($indexToLoc[$i] == $indexToLoc[($i - 1)])) { + // the last glyph didn't have an outline + unset($indexToLoc[($i - 1)]); + } + $offset += 2; + } + } else { + // long version + $tot_num_glyphs = floor($table['loca']['length'] / 4); // numGlyphs + 1 + for ($i = 0; $i < $tot_num_glyphs; ++$i) { + $indexToLoc[$i] = TCPDF_STATIC::_getULONG($font, $offset); + if (isset($indexToLoc[($i - 1)]) && ($indexToLoc[$i] == $indexToLoc[($i - 1)])) { + // the last glyph didn't have an outline + unset($indexToLoc[($i - 1)]); + } + $offset += 4; + } + } + // get glyphs indexes of chars from cmap table + $offset = $table['cmap']['offset'] + 2; + $numEncodingTables = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $encodingTables = array(); + for ($i = 0; $i < $numEncodingTables; ++$i) { + $encodingTables[$i]['platformID'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $encodingTables[$i]['encodingID'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $encodingTables[$i]['offset'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + } + // ---------- get os/2 metrics ---------- + $offset = $table['OS/2']['offset']; + $offset += 2; // skip version + // xAvgCharWidth + $fmetric['AvgWidth'] = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + // usWeightClass + $usWeightClass = round(TCPDF_STATIC::_getUFWORD($font, $offset) * $urk); + // estimate StemV and StemH (400 = usWeightClass for Normal - Regular font) + $fmetric['StemV'] = round((70 * $usWeightClass) / 400); + $fmetric['StemH'] = round((30 * $usWeightClass) / 400); + $offset += 2; + $offset += 2; // usWidthClass + $fsType = TCPDF_STATIC::_getSHORT($font, $offset); + $offset += 2; + if ($fsType == 2) { + // This Font cannot be modified, embedded or exchanged in any manner without first obtaining permission of the legal owner. + return false; + } + // ---------- get font name ---------- + $fmetric['name'] = ''; + $offset = $table['name']['offset']; + $offset += 2; // skip Format selector (=0). + // Number of NameRecords that follow n. + $numNameRecords = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + // Offset to start of string storage (from start of table). + $stringStorageOffset = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + for ($i = 0; $i < $numNameRecords; ++$i) { + $offset += 6; // skip Platform ID, Platform-specific encoding ID, Language ID. + // Name ID. + $nameID = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + if ($nameID == 6) { + // String length (in bytes). + $stringLength = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + // String offset from start of storage area (in bytes). + $stringOffset = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $offset = ($table['name']['offset'] + $stringStorageOffset + $stringOffset); + $fmetric['name'] = substr($font, $offset, $stringLength); + $fmetric['name'] = preg_replace('/[^a-zA-Z0-9_\-]/', '', $fmetric['name']); + break; + } else { + $offset += 4; // skip String length, String offset + } + } + if (empty($fmetric['name'])) { + $fmetric['name'] = $font_name; + } + // ---------- get post data ---------- + $offset = $table['post']['offset']; + $offset += 4; // skip Format Type + $fmetric['italicAngle'] = TCPDF_STATIC::_getFIXED($font, $offset); + $offset += 4; + $fmetric['underlinePosition'] = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + $fmetric['underlineThickness'] = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + $isFixedPitch = (TCPDF_STATIC::_getULONG($font, $offset) == 0) ? false : true; + $offset += 2; + if ($isFixedPitch) { + $fmetric['Flags'] |= 1; + } + // ---------- get hhea data ---------- + $offset = $table['hhea']['offset']; + $offset += 4; // skip Table version number + // Ascender + $fmetric['Ascent'] = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + // Descender + $fmetric['Descent'] = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + // LineGap + $fmetric['Leading'] = round(TCPDF_STATIC::_getFWORD($font, $offset) * $urk); + $offset += 2; + // advanceWidthMax + $fmetric['MaxWidth'] = round(TCPDF_STATIC::_getUFWORD($font, $offset) * $urk); + $offset += 2; + $offset += 22; // skip some values + // get the number of hMetric entries in hmtx table + $numberOfHMetrics = TCPDF_STATIC::_getUSHORT($font, $offset); + // ---------- get maxp data ---------- + $offset = $table['maxp']['offset']; + $offset += 4; // skip Table version number + // get the the number of glyphs in the font. + $numGlyphs = TCPDF_STATIC::_getUSHORT($font, $offset); + // ---------- get CIDToGIDMap ---------- + $ctg = array(); + foreach ($encodingTables as $enctable) { + // get only specified Platform ID and Encoding ID + if (($enctable['platformID'] == $platid) AND ($enctable['encodingID'] == $encid)) { + $offset = $table['cmap']['offset'] + $enctable['offset']; + $format = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + switch ($format) { + case 0: { // Format 0: Byte encoding table + $offset += 4; // skip length and version/language + for ($c = 0; $c < 256; ++$c) { + $g = TCPDF_STATIC::_getBYTE($font, $offset); + $ctg[$c] = $g; + ++$offset; + } + break; + } + case 2: { // Format 2: High-byte mapping through table + $offset += 4; // skip length and version/language + $numSubHeaders = 0; + for ($i = 0; $i < 256; ++$i) { + // Array that maps high bytes to subHeaders: value is subHeader index * 8. + $subHeaderKeys[$i] = (TCPDF_STATIC::_getUSHORT($font, $offset) / 8); + $offset += 2; + if ($numSubHeaders < $subHeaderKeys[$i]) { + $numSubHeaders = $subHeaderKeys[$i]; + } + } + // the number of subHeaders is equal to the max of subHeaderKeys + 1 + ++$numSubHeaders; + // read subHeader structures + $subHeaders = array(); + $numGlyphIndexArray = 0; + for ($k = 0; $k < $numSubHeaders; ++$k) { + $subHeaders[$k]['firstCode'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['entryCount'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['idDelta'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['idRangeOffset'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['idRangeOffset'] -= (2 + (($numSubHeaders - $k - 1) * 8)); + $subHeaders[$k]['idRangeOffset'] /= 2; + $numGlyphIndexArray += $subHeaders[$k]['entryCount']; + } + for ($k = 0; $k < $numGlyphIndexArray; ++$k) { + $glyphIndexArray[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + for ($i = 0; $i < 256; ++$i) { + $k = $subHeaderKeys[$i]; + if ($k == 0) { + // one byte code + $c = $i; + $g = $glyphIndexArray[0]; + $ctg[$c] = $g; + } else { + // two bytes code + $start_byte = $subHeaders[$k]['firstCode']; + $end_byte = $start_byte + $subHeaders[$k]['entryCount']; + for ($j = $start_byte; $j < $end_byte; ++$j) { + // combine high and low bytes + $c = (($i << 8) + $j); + $idRangeOffset = ($subHeaders[$k]['idRangeOffset'] + $j - $subHeaders[$k]['firstCode']); + $g = ($glyphIndexArray[$idRangeOffset] + $subHeaders[$k]['idDelta']) % 65536; + if ($g < 0) { + $g = 0; + } + $ctg[$c] = $g; + } + } + } + break; + } + case 4: { // Format 4: Segment mapping to delta values + $length = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $offset += 2; // skip version/language + $segCount = floor(TCPDF_STATIC::_getUSHORT($font, $offset) / 2); + $offset += 2; + $offset += 6; // skip searchRange, entrySelector, rangeShift + $endCount = array(); // array of end character codes for each segment + for ($k = 0; $k < $segCount; ++$k) { + $endCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $offset += 2; // skip reservedPad + $startCount = array(); // array of start character codes for each segment + for ($k = 0; $k < $segCount; ++$k) { + $startCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $idDelta = array(); // delta for all character codes in segment + for ($k = 0; $k < $segCount; ++$k) { + $idDelta[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $idRangeOffset = array(); // Offsets into glyphIdArray or 0 + for ($k = 0; $k < $segCount; ++$k) { + $idRangeOffset[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $gidlen = (floor($length / 2) - 8 - (4 * $segCount)); + $glyphIdArray = array(); // glyph index array + for ($k = 0; $k < $gidlen; ++$k) { + $glyphIdArray[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + for ($k = 0; $k < $segCount; ++$k) { + for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) { + if ($idRangeOffset[$k] == 0) { + $g = ($idDelta[$k] + $c) % 65536; + } else { + $gid = (floor($idRangeOffset[$k] / 2) + ($c - $startCount[$k]) - ($segCount - $k)); + $g = ($glyphIdArray[$gid] + $idDelta[$k]) % 65536; + } + if ($g < 0) { + $g = 0; + } + $ctg[$c] = $g; + } + } + break; + } + case 6: { // Format 6: Trimmed table mapping + $offset += 4; // skip length and version/language + $firstCode = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $entryCount = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + for ($k = 0; $k < $entryCount; ++$k) { + $c = ($k + $firstCode); + $g = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $ctg[$c] = $g; + } + break; + } + case 8: { // Format 8: Mixed 16-bit and 32-bit coverage + $offset += 10; // skip reserved, length and version/language + for ($k = 0; $k < 8192; ++$k) { + $is32[$k] = TCPDF_STATIC::_getBYTE($font, $offset); + ++$offset; + } + $nGroups = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($i = 0; $i < $nGroups; ++$i) { + $startCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $endCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $startGlyphID = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($k = $startCharCode; $k <= $endCharCode; ++$k) { + $is32idx = floor($c / 8); + if ((isset($is32[$is32idx])) AND (($is32[$is32idx] & (1 << (7 - ($c % 8)))) == 0)) { + $c = $k; + } else { + // 32 bit format + // convert to decimal (http://www.unicode.org/faq//utf_bom.html#utf16-4) + //LEAD_OFFSET = (0xD800 - (0x10000 >> 10)) = 55232 + //SURROGATE_OFFSET = (0x10000 - (0xD800 << 10) - 0xDC00) = -56613888 + $c = ((55232 + ($k >> 10)) << 10) + (0xDC00 + ($k & 0x3FF)) -56613888; + } + $ctg[$c] = 0; + ++$startGlyphID; + } + } + break; + } + case 10: { // Format 10: Trimmed array + $offset += 10; // skip reserved, length and version/language + $startCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $numChars = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($k = 0; $k < $numChars; ++$k) { + $c = ($k + $startCharCode); + $g = TCPDF_STATIC::_getUSHORT($font, $offset); + $ctg[$c] = $g; + $offset += 2; + } + break; + } + case 12: { // Format 12: Segmented coverage + $offset += 10; // skip length and version/language + $nGroups = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($k = 0; $k < $nGroups; ++$k) { + $startCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $endCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $startGlyphCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($c = $startCharCode; $c <= $endCharCode; ++$c) { + $ctg[$c] = $startGlyphCode; + ++$startGlyphCode; + } + } + break; + } + case 13: { // Format 13: Many-to-one range mappings + // to be implemented ... + break; + } + case 14: { // Format 14: Unicode Variation Sequences + // to be implemented ... + break; + } + } + } + } + if (!isset($ctg[0])) { + $ctg[0] = 0; + } + // get xHeight (height of x) + $offset = ($table['glyf']['offset'] + $indexToLoc[$ctg[120]] + 4); + $yMin = TCPDF_STATIC::_getFWORD($font, $offset); + $offset += 4; + $yMax = TCPDF_STATIC::_getFWORD($font, $offset); + $offset += 2; + $fmetric['XHeight'] = round(($yMax - $yMin) * $urk); + // get CapHeight (height of H) + $offset = ($table['glyf']['offset'] + $indexToLoc[$ctg[72]] + 4); + $yMin = TCPDF_STATIC::_getFWORD($font, $offset); + $offset += 4; + $yMax = TCPDF_STATIC::_getFWORD($font, $offset); + $offset += 2; + $fmetric['CapHeight'] = round(($yMax - $yMin) * $urk); + // ceate widths array + $cw = array(); + $offset = $table['hmtx']['offset']; + for ($i = 0 ; $i < $numberOfHMetrics; ++$i) { + $cw[$i] = round(TCPDF_STATIC::_getUFWORD($font, $offset) * $urk); + $offset += 4; // skip lsb + } + if ($numberOfHMetrics < $numGlyphs) { + // fill missing widths with the last value + $cw = array_pad($cw, $numGlyphs, $cw[($numberOfHMetrics - 1)]); + } + $fmetric['MissingWidth'] = $cw[0]; + $fmetric['cw'] = ''; + $fmetric['cbbox'] = ''; + for ($cid = 0; $cid <= 65535; ++$cid) { + if (isset($ctg[$cid])) { + if (isset($cw[$ctg[$cid]])) { + $fmetric['cw'] .= ','.$cid.'=>'.$cw[$ctg[$cid]]; + } + if ($addcbbox AND isset($indexToLoc[$ctg[$cid]])) { + $offset = ($table['glyf']['offset'] + $indexToLoc[$ctg[$cid]]); + $xMin = round(TCPDF_STATIC::_getFWORD($font, $offset + 2) * $urk); + $yMin = round(TCPDF_STATIC::_getFWORD($font, $offset + 4) * $urk); + $xMax = round(TCPDF_STATIC::_getFWORD($font, $offset + 6) * $urk); + $yMax = round(TCPDF_STATIC::_getFWORD($font, $offset + 8) * $urk); + $fmetric['cbbox'] .= ','.$cid.'=>array('.$xMin.','.$yMin.','.$xMax.','.$yMax.')'; + } + } + } + } // end of true type + if (($fmetric['type'] == 'TrueTypeUnicode') AND (count($ctg) == 256)) { + $fmetric['type'] = 'TrueType'; + } + // ---------- create php font file ---------- + $pfile = '<'.'?'.'php'."\n"; + $pfile .= '// TCPDF FONT FILE DESCRIPTION'."\n"; + $pfile .= '$type=\''.$fmetric['type'].'\';'."\n"; + $pfile .= '$name=\''.$fmetric['name'].'\';'."\n"; + $pfile .= '$up='.$fmetric['underlinePosition'].';'."\n"; + $pfile .= '$ut='.$fmetric['underlineThickness'].';'."\n"; + if ($fmetric['MissingWidth'] > 0) { + $pfile .= '$dw='.$fmetric['MissingWidth'].';'."\n"; + } else { + $pfile .= '$dw='.$fmetric['AvgWidth'].';'."\n"; + } + $pfile .= '$diff=\''.$fmetric['diff'].'\';'."\n"; + if ($fmetric['type'] == 'Type1') { + // Type 1 + $pfile .= '$enc=\''.$fmetric['enc'].'\';'."\n"; + $pfile .= '$file=\''.$fmetric['file'].'\';'."\n"; + $pfile .= '$size1='.$fmetric['size1'].';'."\n"; + $pfile .= '$size2='.$fmetric['size2'].';'."\n"; + } else { + $pfile .= '$originalsize='.$fmetric['originalsize'].';'."\n"; + if ($fmetric['type'] == 'cidfont0') { + // CID-0 + switch ($fonttype) { + case 'CID0JP': { + $pfile .= '// Japanese'."\n"; + $pfile .= '$enc=\'UniJIS-UTF16-H\';'."\n"; + $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'Japan1\',\'Supplement\'=>5);'."\n"; + $pfile .= 'include(dirname(__FILE__).\'/uni2cid_aj16.php\');'."\n"; + break; + } + case 'CID0KR': { + $pfile .= '// Korean'."\n"; + $pfile .= '$enc=\'UniKS-UTF16-H\';'."\n"; + $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'Korea1\',\'Supplement\'=>0);'."\n"; + $pfile .= 'include(dirname(__FILE__).\'/uni2cid_ak12.php\');'."\n"; + break; + } + case 'CID0CS': { + $pfile .= '// Chinese Simplified'."\n"; + $pfile .= '$enc=\'UniGB-UTF16-H\';'."\n"; + $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'GB1\',\'Supplement\'=>2);'."\n"; + $pfile .= 'include(dirname(__FILE__).\'/uni2cid_ag15.php\');'."\n"; + break; + } + case 'CID0CT': + default: { + $pfile .= '// Chinese Traditional'."\n"; + $pfile .= '$enc=\'UniCNS-UTF16-H\';'."\n"; + $pfile .= '$cidinfo=array(\'Registry\'=>\'Adobe\', \'Ordering\'=>\'CNS1\',\'Supplement\'=>0);'."\n"; + $pfile .= 'include(dirname(__FILE__).\'/uni2cid_aj16.php\');'."\n"; + break; + } + } + } else { + // TrueType + $pfile .= '$enc=\''.$fmetric['enc'].'\';'."\n"; + $pfile .= '$file=\''.$fmetric['file'].'\';'."\n"; + $pfile .= '$ctg=\''.$fmetric['ctg'].'\';'."\n"; + // create CIDToGIDMap + $cidtogidmap = str_pad('', 131072, "\x00"); // (256 * 256 * 2) = 131072 + foreach ($ctg as $cid => $gid) { + $cidtogidmap = self::updateCIDtoGIDmap($cidtogidmap, $cid, $ctg[$cid]); + } + // store compressed CIDToGIDMap + $fp = TCPDF_STATIC::fopenLocal($outpath.$fmetric['ctg'], 'wb'); + fwrite($fp, gzcompress($cidtogidmap)); + fclose($fp); + } + } + $pfile .= '$desc=array('; + $pfile .= '\'Flags\'=>'.$fmetric['Flags'].','; + $pfile .= '\'FontBBox\'=>\'['.$fmetric['bbox'].']\','; + $pfile .= '\'ItalicAngle\'=>'.$fmetric['italicAngle'].','; + $pfile .= '\'Ascent\'=>'.$fmetric['Ascent'].','; + $pfile .= '\'Descent\'=>'.$fmetric['Descent'].','; + $pfile .= '\'Leading\'=>'.$fmetric['Leading'].','; + $pfile .= '\'CapHeight\'=>'.$fmetric['CapHeight'].','; + $pfile .= '\'XHeight\'=>'.$fmetric['XHeight'].','; + $pfile .= '\'StemV\'=>'.$fmetric['StemV'].','; + $pfile .= '\'StemH\'=>'.$fmetric['StemH'].','; + $pfile .= '\'AvgWidth\'=>'.$fmetric['AvgWidth'].','; + $pfile .= '\'MaxWidth\'=>'.$fmetric['MaxWidth'].','; + $pfile .= '\'MissingWidth\'=>'.$fmetric['MissingWidth'].''; + $pfile .= ');'."\n"; + if (!empty($fmetric['cbbox'])) { + $pfile .= '$cbbox=array('.substr($fmetric['cbbox'], 1).');'."\n"; + } + $pfile .= '$cw=array('.substr($fmetric['cw'], 1).');'."\n"; + $pfile .= '// --- EOF ---'."\n"; + // store file + $fp = TCPDF_STATIC::fopenLocal($outpath.$font_name.'.php', 'w'); + fwrite($fp, $pfile); + fclose($fp); + // return TCPDF font name + return $font_name; + } + + /** + * Returs the checksum of a TTF table. + * @param $table (string) table to check + * @param $length (int) length of table in bytes + * @return int checksum + * @author Nicola Asuni + * @since 5.2.000 (2010-06-02) + * @public static + */ + public static function _getTTFtableChecksum($table, $length) { + $sum = 0; + $tlen = ($length / 4); + $offset = 0; + for ($i = 0; $i < $tlen; ++$i) { + $v = unpack('Ni', substr($table, $offset, 4)); + $sum += $v['i']; + $offset += 4; + } + $sum = unpack('Ni', pack('N', $sum)); + return $sum['i']; + } + + /** + * Returns a subset of the TrueType font data without the unused glyphs. + * @param $font (string) TrueType font data. + * @param $subsetchars (array) Array of used characters (the glyphs to keep). + * @return (string) A subset of TrueType font data without the unused glyphs. + * @author Nicola Asuni + * @since 5.2.000 (2010-06-02) + * @public static + */ + public static function _getTrueTypeFontSubset($font, $subsetchars) { + ksort($subsetchars); + $offset = 0; // offset position of the font data + if (TCPDF_STATIC::_getULONG($font, $offset) != 0x10000) { + // sfnt version must be 0x00010000 for TrueType version 1.0. + return $font; + } + $offset += 4; + // get number of tables + $numTables = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + // skip searchRange, entrySelector and rangeShift + $offset += 6; + // tables array + $table = array(); + // for each table + for ($i = 0; $i < $numTables; ++$i) { + // get table info + $tag = substr($font, $offset, 4); + $offset += 4; + $table[$tag] = array(); + $table[$tag]['checkSum'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $table[$tag]['offset'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $table[$tag]['length'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + } + // check magicNumber + $offset = $table['head']['offset'] + 12; + if (TCPDF_STATIC::_getULONG($font, $offset) != 0x5F0F3CF5) { + // magicNumber must be 0x5F0F3CF5 + return $font; + } + $offset += 4; + // get offset mode (indexToLocFormat : 0 = short, 1 = long) + $offset = $table['head']['offset'] + 50; + $short_offset = (TCPDF_STATIC::_getSHORT($font, $offset) == 0); + $offset += 2; + // get the offsets to the locations of the glyphs in the font, relative to the beginning of the glyphData table + $indexToLoc = array(); + $offset = $table['loca']['offset']; + if ($short_offset) { + // short version + $tot_num_glyphs = floor($table['loca']['length'] / 2); // numGlyphs + 1 + for ($i = 0; $i < $tot_num_glyphs; ++$i) { + $indexToLoc[$i] = TCPDF_STATIC::_getUSHORT($font, $offset) * 2; + $offset += 2; + } + } else { + // long version + $tot_num_glyphs = ($table['loca']['length'] / 4); // numGlyphs + 1 + for ($i = 0; $i < $tot_num_glyphs; ++$i) { + $indexToLoc[$i] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + } + } + // get glyphs indexes of chars from cmap table + $subsetglyphs = array(); // glyph IDs on key + $subsetglyphs[0] = true; // character codes that do not correspond to any glyph in the font should be mapped to glyph index 0 + $offset = $table['cmap']['offset'] + 2; + $numEncodingTables = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $encodingTables = array(); + for ($i = 0; $i < $numEncodingTables; ++$i) { + $encodingTables[$i]['platformID'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $encodingTables[$i]['encodingID'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $encodingTables[$i]['offset'] = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + } + foreach ($encodingTables as $enctable) { + // get all platforms and encodings + $offset = $table['cmap']['offset'] + $enctable['offset']; + $format = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + switch ($format) { + case 0: { // Format 0: Byte encoding table + $offset += 4; // skip length and version/language + for ($c = 0; $c < 256; ++$c) { + if (isset($subsetchars[$c])) { + $g = TCPDF_STATIC::_getBYTE($font, $offset); + $subsetglyphs[$g] = true; + } + ++$offset; + } + break; + } + case 2: { // Format 2: High-byte mapping through table + $offset += 4; // skip length and version/language + $numSubHeaders = 0; + for ($i = 0; $i < 256; ++$i) { + // Array that maps high bytes to subHeaders: value is subHeader index * 8. + $subHeaderKeys[$i] = (TCPDF_STATIC::_getUSHORT($font, $offset) / 8); + $offset += 2; + if ($numSubHeaders < $subHeaderKeys[$i]) { + $numSubHeaders = $subHeaderKeys[$i]; + } + } + // the number of subHeaders is equal to the max of subHeaderKeys + 1 + ++$numSubHeaders; + // read subHeader structures + $subHeaders = array(); + $numGlyphIndexArray = 0; + for ($k = 0; $k < $numSubHeaders; ++$k) { + $subHeaders[$k]['firstCode'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['entryCount'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['idDelta'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['idRangeOffset'] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $subHeaders[$k]['idRangeOffset'] -= (2 + (($numSubHeaders - $k - 1) * 8)); + $subHeaders[$k]['idRangeOffset'] /= 2; + $numGlyphIndexArray += $subHeaders[$k]['entryCount']; + } + for ($k = 0; $k < $numGlyphIndexArray; ++$k) { + $glyphIndexArray[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + for ($i = 0; $i < 256; ++$i) { + $k = $subHeaderKeys[$i]; + if ($k == 0) { + // one byte code + $c = $i; + if (isset($subsetchars[$c])) { + $g = $glyphIndexArray[0]; + $subsetglyphs[$g] = true; + } + } else { + // two bytes code + $start_byte = $subHeaders[$k]['firstCode']; + $end_byte = $start_byte + $subHeaders[$k]['entryCount']; + for ($j = $start_byte; $j < $end_byte; ++$j) { + // combine high and low bytes + $c = (($i << 8) + $j); + if (isset($subsetchars[$c])) { + $idRangeOffset = ($subHeaders[$k]['idRangeOffset'] + $j - $subHeaders[$k]['firstCode']); + $g = ($glyphIndexArray[$idRangeOffset] + $subHeaders[$k]['idDelta']) % 65536; + if ($g < 0) { + $g = 0; + } + $subsetglyphs[$g] = true; + } + } + } + } + break; + } + case 4: { // Format 4: Segment mapping to delta values + $length = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $offset += 2; // skip version/language + $segCount = floor(TCPDF_STATIC::_getUSHORT($font, $offset) / 2); + $offset += 2; + $offset += 6; // skip searchRange, entrySelector, rangeShift + $endCount = array(); // array of end character codes for each segment + for ($k = 0; $k < $segCount; ++$k) { + $endCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $offset += 2; // skip reservedPad + $startCount = array(); // array of start character codes for each segment + for ($k = 0; $k < $segCount; ++$k) { + $startCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $idDelta = array(); // delta for all character codes in segment + for ($k = 0; $k < $segCount; ++$k) { + $idDelta[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $idRangeOffset = array(); // Offsets into glyphIdArray or 0 + for ($k = 0; $k < $segCount; ++$k) { + $idRangeOffset[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + $gidlen = (floor($length / 2) - 8 - (4 * $segCount)); + $glyphIdArray = array(); // glyph index array + for ($k = 0; $k < $gidlen; ++$k) { + $glyphIdArray[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + } + for ($k = 0; $k < $segCount; ++$k) { + for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) { + if (isset($subsetchars[$c])) { + if ($idRangeOffset[$k] == 0) { + $g = ($idDelta[$k] + $c) % 65536; + } else { + $gid = (floor($idRangeOffset[$k] / 2) + ($c - $startCount[$k]) - ($segCount - $k)); + $g = ($glyphIdArray[$gid] + $idDelta[$k]) % 65536; + } + if ($g < 0) { + $g = 0; + } + $subsetglyphs[$g] = true; + } + } + } + break; + } + case 6: { // Format 6: Trimmed table mapping + $offset += 4; // skip length and version/language + $firstCode = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $entryCount = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + for ($k = 0; $k < $entryCount; ++$k) { + $c = ($k + $firstCode); + if (isset($subsetchars[$c])) { + $g = TCPDF_STATIC::_getUSHORT($font, $offset); + $subsetglyphs[$g] = true; + } + $offset += 2; + } + break; + } + case 8: { // Format 8: Mixed 16-bit and 32-bit coverage + $offset += 10; // skip reserved, length and version/language + for ($k = 0; $k < 8192; ++$k) { + $is32[$k] = TCPDF_STATIC::_getBYTE($font, $offset); + ++$offset; + } + $nGroups = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($i = 0; $i < $nGroups; ++$i) { + $startCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $endCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $startGlyphID = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($k = $startCharCode; $k <= $endCharCode; ++$k) { + $is32idx = floor($c / 8); + if ((isset($is32[$is32idx])) AND (($is32[$is32idx] & (1 << (7 - ($c % 8)))) == 0)) { + $c = $k; + } else { + // 32 bit format + // convert to decimal (http://www.unicode.org/faq//utf_bom.html#utf16-4) + //LEAD_OFFSET = (0xD800 - (0x10000 >> 10)) = 55232 + //SURROGATE_OFFSET = (0x10000 - (0xD800 << 10) - 0xDC00) = -56613888 + $c = ((55232 + ($k >> 10)) << 10) + (0xDC00 + ($k & 0x3FF)) -56613888; + } + if (isset($subsetchars[$c])) { + $subsetglyphs[$startGlyphID] = true; + } + ++$startGlyphID; + } + } + break; + } + case 10: { // Format 10: Trimmed array + $offset += 10; // skip reserved, length and version/language + $startCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $numChars = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($k = 0; $k < $numChars; ++$k) { + $c = ($k + $startCharCode); + if (isset($subsetchars[$c])) { + $g = TCPDF_STATIC::_getUSHORT($font, $offset); + $subsetglyphs[$g] = true; + } + $offset += 2; + } + break; + } + case 12: { // Format 12: Segmented coverage + $offset += 10; // skip length and version/language + $nGroups = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($k = 0; $k < $nGroups; ++$k) { + $startCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $endCharCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + $startGlyphCode = TCPDF_STATIC::_getULONG($font, $offset); + $offset += 4; + for ($c = $startCharCode; $c <= $endCharCode; ++$c) { + if (isset($subsetchars[$c])) { + $subsetglyphs[$startGlyphCode] = true; + } + ++$startGlyphCode; + } + } + break; + } + case 13: { // Format 13: Many-to-one range mappings + // to be implemented ... + break; + } + case 14: { // Format 14: Unicode Variation Sequences + // to be implemented ... + break; + } + } + } + // include all parts of composite glyphs + $new_sga = $subsetglyphs; + while (!empty($new_sga)) { + $sga = $new_sga; + $new_sga = array(); + foreach ($sga as $key => $val) { + if (isset($indexToLoc[$key])) { + $offset = ($table['glyf']['offset'] + $indexToLoc[$key]); + $numberOfContours = TCPDF_STATIC::_getSHORT($font, $offset); + $offset += 2; + if ($numberOfContours < 0) { // composite glyph + $offset += 8; // skip xMin, yMin, xMax, yMax + do { + $flags = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + $glyphIndex = TCPDF_STATIC::_getUSHORT($font, $offset); + $offset += 2; + if (!isset($subsetglyphs[$glyphIndex])) { + // add missing glyphs + $new_sga[$glyphIndex] = true; + } + // skip some bytes by case + if ($flags & 1) { + $offset += 4; + } else { + $offset += 2; + } + if ($flags & 8) { + $offset += 2; + } elseif ($flags & 64) { + $offset += 4; + } elseif ($flags & 128) { + $offset += 8; + } + } while ($flags & 32); + } + } + } + $subsetglyphs += $new_sga; + } + // sort glyphs by key (and remove duplicates) + ksort($subsetglyphs); + // build new glyf and loca tables + $glyf = ''; + $loca = ''; + $offset = 0; + $glyf_offset = $table['glyf']['offset']; + for ($i = 0; $i < $tot_num_glyphs; ++$i) { + if (isset($subsetglyphs[$i])) { + $length = ($indexToLoc[($i + 1)] - $indexToLoc[$i]); + $glyf .= substr($font, ($glyf_offset + $indexToLoc[$i]), $length); + } else { + $length = 0; + } + if ($short_offset) { + $loca .= pack('n', floor($offset / 2)); + } else { + $loca .= pack('N', $offset); + } + $offset += $length; + } + // array of table names to preserve (loca and glyf tables will be added later) + // the cmap table is not needed and shall not be present, since the mapping from character codes to glyph descriptions is provided separately + $table_names = array ('head', 'hhea', 'hmtx', 'maxp', 'cvt ', 'fpgm', 'prep'); // minimum required table names + // get the tables to preserve + $offset = 12; + foreach ($table as $tag => $val) { + if (in_array($tag, $table_names)) { + $table[$tag]['data'] = substr($font, $table[$tag]['offset'], $table[$tag]['length']); + if ($tag == 'head') { + // set the checkSumAdjustment to 0 + $table[$tag]['data'] = substr($table[$tag]['data'], 0, 8)."\x0\x0\x0\x0".substr($table[$tag]['data'], 12); + } + $pad = 4 - ($table[$tag]['length'] % 4); + if ($pad != 4) { + // the length of a table must be a multiple of four bytes + $table[$tag]['length'] += $pad; + $table[$tag]['data'] .= str_repeat("\x0", $pad); + } + $table[$tag]['offset'] = $offset; + $offset += $table[$tag]['length']; + // check sum is not changed (so keep the following line commented) + //$table[$tag]['checkSum'] = self::_getTTFtableChecksum($table[$tag]['data'], $table[$tag]['length']); + } else { + unset($table[$tag]); + } + } + // add loca + $table['loca']['data'] = $loca; + $table['loca']['length'] = strlen($loca); + $pad = 4 - ($table['loca']['length'] % 4); + if ($pad != 4) { + // the length of a table must be a multiple of four bytes + $table['loca']['length'] += $pad; + $table['loca']['data'] .= str_repeat("\x0", $pad); + } + $table['loca']['offset'] = $offset; + $table['loca']['checkSum'] = self::_getTTFtableChecksum($table['loca']['data'], $table['loca']['length']); + $offset += $table['loca']['length']; + // add glyf + $table['glyf']['data'] = $glyf; + $table['glyf']['length'] = strlen($glyf); + $pad = 4 - ($table['glyf']['length'] % 4); + if ($pad != 4) { + // the length of a table must be a multiple of four bytes + $table['glyf']['length'] += $pad; + $table['glyf']['data'] .= str_repeat("\x0", $pad); + } + $table['glyf']['offset'] = $offset; + $table['glyf']['checkSum'] = self::_getTTFtableChecksum($table['glyf']['data'], $table['glyf']['length']); + // rebuild font + $font = ''; + $font .= pack('N', 0x10000); // sfnt version + $numTables = count($table); + $font .= pack('n', $numTables); // numTables + $entrySelector = floor(log($numTables, 2)); + $searchRange = pow(2, $entrySelector) * 16; + $rangeShift = ($numTables * 16) - $searchRange; + $font .= pack('n', $searchRange); // searchRange + $font .= pack('n', $entrySelector); // entrySelector + $font .= pack('n', $rangeShift); // rangeShift + $offset = ($numTables * 16); + foreach ($table as $tag => $data) { + $font .= $tag; // tag + $font .= pack('N', $data['checkSum']); // checkSum + $font .= pack('N', ($data['offset'] + $offset)); // offset + $font .= pack('N', $data['length']); // length + } + foreach ($table as $data) { + $font .= $data['data']; + } + // set checkSumAdjustment on head table + $checkSumAdjustment = 0xB1B0AFBA - self::_getTTFtableChecksum($font, strlen($font)); + $font = substr($font, 0, $table['head']['offset'] + 8).pack('N', $checkSumAdjustment).substr($font, $table['head']['offset'] + 12); + return $font; + } + + /** + * Outputs font widths + * @param $font (array) font data + * @param $cidoffset (int) offset for CID values + * @return PDF command string for font widths + * @author Nicola Asuni + * @since 4.4.000 (2008-12-07) + * @public static + */ + public static function _putfontwidths($font, $cidoffset=0) { + ksort($font['cw']); + $rangeid = 0; + $range = array(); + $prevcid = -2; + $prevwidth = -1; + $interval = false; + // for each character + foreach ($font['cw'] as $cid => $width) { + $cid -= $cidoffset; + if ($font['subset'] AND (!isset($font['subsetchars'][$cid]))) { + // ignore the unused characters (font subsetting) + continue; + } + if ($width != $font['dw']) { + if ($cid == ($prevcid + 1)) { + // consecutive CID + if ($width == $prevwidth) { + if ($width == $range[$rangeid][0]) { + $range[$rangeid][] = $width; + } else { + array_pop($range[$rangeid]); + // new range + $rangeid = $prevcid; + $range[$rangeid] = array(); + $range[$rangeid][] = $prevwidth; + $range[$rangeid][] = $width; + } + $interval = true; + $range[$rangeid]['interval'] = true; + } else { + if ($interval) { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + } else { + $range[$rangeid][] = $width; + } + $interval = false; + } + } else { + // new range + $rangeid = $cid; + $range[$rangeid] = array(); + $range[$rangeid][] = $width; + $interval = false; + } + $prevcid = $cid; + $prevwidth = $width; + } + } + // optimize ranges + $prevk = -1; + $nextk = -1; + $prevint = false; + foreach ($range as $k => $ws) { + $cws = count($ws); + if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) { + if (isset($range[$k]['interval'])) { + unset($range[$k]['interval']); + } + $range[$prevk] = array_merge($range[$prevk], $range[$k]); + unset($range[$k]); + } else { + $prevk = $k; + } + $nextk = $k + $cws; + if (isset($ws['interval'])) { + if ($cws > 3) { + $prevint = true; + } else { + $prevint = false; + } + if (isset($range[$k]['interval'])) { + unset($range[$k]['interval']); + } + --$nextk; + } else { + $prevint = false; + } + } + // output data + $w = ''; + foreach ($range as $k => $ws) { + if (count(array_count_values($ws)) == 1) { + // interval mode is more compact + $w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0]; + } else { + // range mode + $w .= ' '.$k.' [ '.implode(' ', $ws).' ]'; + } + } + return '/W ['.$w.' ]'; + } + + + + + /** + * Update the CIDToGIDMap string with a new value. + * @param $map (string) CIDToGIDMap. + * @param $cid (int) CID value. + * @param $gid (int) GID value. + * @return (string) CIDToGIDMap. + * @author Nicola Asuni + * @since 5.9.123 (2011-09-29) + * @public static + */ + public static function updateCIDtoGIDmap($map, $cid, $gid) { + if (($cid >= 0) AND ($cid <= 0xFFFF) AND ($gid >= 0)) { + if ($gid > 0xFFFF) { + $gid -= 0x10000; + } + $map[($cid * 2)] = chr($gid >> 8); + $map[(($cid * 2) + 1)] = chr($gid & 0xFF); + } + return $map; + } + + /** + * Return fonts path + * @return string + * @public static + */ + public static function _getfontpath() { + if (!defined('K_PATH_FONTS') AND is_dir($fdir = realpath(dirname(__FILE__).'/../fonts'))) { + if (substr($fdir, -1) != '/') { + $fdir .= '/'; + } + define('K_PATH_FONTS', $fdir); + } + return defined('K_PATH_FONTS') ? K_PATH_FONTS : ''; + } + + + + /** + * Return font full path + * @param $file (string) Font file name. + * @param $fontdir (string) Font directory (set to false fto search on default directories) + * @return string Font full path or empty string + * @author Nicola Asuni + * @since 6.0.025 + * @public static + */ + public static function getFontFullPath($file, $fontdir=false) { + $fontfile = ''; + // search files on various directories + if (($fontdir !== false) AND @file_exists($fontdir.$file)) { + $fontfile = $fontdir.$file; + } elseif (@file_exists(self::_getfontpath().$file)) { + $fontfile = self::_getfontpath().$file; + } elseif (@file_exists($file)) { + $fontfile = $file; + } + return $fontfile; + } + + + + + /** + * Get a reference font size. + * @param $size (string) String containing font size value. + * @param $refsize (float) Reference font size in points. + * @return float value in points + * @public static + */ + public static function getFontRefSize($size, $refsize=12) { + switch ($size) { + case 'xx-small': { + $size = ($refsize - 4); + break; + } + case 'x-small': { + $size = ($refsize - 3); + break; + } + case 'small': { + $size = ($refsize - 2); + break; + } + case 'medium': { + $size = $refsize; + break; + } + case 'large': { + $size = ($refsize + 2); + break; + } + case 'x-large': { + $size = ($refsize + 4); + break; + } + case 'xx-large': { + $size = ($refsize + 6); + break; + } + case 'smaller': { + $size = ($refsize - 3); + break; + } + case 'larger': { + $size = ($refsize + 3); + break; + } + } + return $size; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// ==================================================================================================================== +// REIMPLEMENTED +// ==================================================================================================================== + + + + + + + + + /** + * Returns the unicode caracter specified by the value + * @param $c (int) UTF-8 value + * @param $unicode (boolean) True if we are in unicode mode, false otherwise. + * @return Returns the specified character. + * @since 2.3.000 (2008-03-05) + * @public static + */ + public static function unichr($c, $unicode=true) { + if (!$unicode) { + return chr($c); + } elseif ($c <= 0x7F) { + // one byte + return chr($c); + } elseif ($c <= 0x7FF) { + // two bytes + return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F); + } elseif ($c <= 0xFFFF) { + // three bytes + return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F); + } elseif ($c <= 0x10FFFF) { + // four bytes + return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F); + } else { + return ''; + } + } + + /** + * Returns the unicode caracter specified by UTF-8 value + * @param $c (int) UTF-8 value + * @return Returns the specified character. + * @public static + */ + public static function unichrUnicode($c) { + return self::unichr($c, true); + } + + /** + * Returns the unicode caracter specified by ASCII value + * @param $c (int) UTF-8 value + * @return Returns the specified character. + * @public static + */ + public static function unichrASCII($c) { + return self::unichr($c, false); + } + + /** + * Converts array of UTF-8 characters to UTF16-BE string.<br> + * Based on: http://www.faqs.org/rfcs/rfc2781.html + * <pre> + * Encoding UTF-16: + * + * Encoding of a single character from an ISO 10646 character value to + * UTF-16 proceeds as follows. Let U be the character number, no greater + * than 0x10FFFF. + * + * 1) If U < 0x10000, encode U as a 16-bit unsigned integer and + * terminate. + * + * 2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF, + * U' must be less than or equal to 0xFFFFF. That is, U' can be + * represented in 20 bits. + * + * 3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and + * 0xDC00, respectively. These integers each have 10 bits free to + * encode the character value, for a total of 20 bits. + * + * 4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order + * bits of W1 and the 10 low-order bits of U' to the 10 low-order + * bits of W2. Terminate. + * + * Graphically, steps 2 through 4 look like: + * U' = yyyyyyyyyyxxxxxxxxxx + * W1 = 110110yyyyyyyyyy + * W2 = 110111xxxxxxxxxx + * </pre> + * @param $unicode (array) array containing UTF-8 unicode values + * @param $setbom (boolean) if true set the Byte Order Mark (BOM = 0xFEFF) + * @return string + * @protected + * @author Nicola Asuni + * @since 2.1.000 (2008-01-08) + * @public static + */ + public static function arrUTF8ToUTF16BE($unicode, $setbom=false) { + $outstr = ''; // string to be returned + if ($setbom) { + $outstr .= "\xFE\xFF"; // Byte Order Mark (BOM) + } + foreach ($unicode as $char) { + if ($char == 0x200b) { + // skip Unicode Character 'ZERO WIDTH SPACE' (DEC:8203, U+200B) + } elseif ($char == 0xFFFD) { + $outstr .= "\xFF\xFD"; // replacement character + } elseif ($char < 0x10000) { + $outstr .= chr($char >> 0x08); + $outstr .= chr($char & 0xFF); + } else { + $char -= 0x10000; + $w1 = 0xD800 | ($char >> 0x0a); + $w2 = 0xDC00 | ($char & 0x3FF); + $outstr .= chr($w1 >> 0x08); + $outstr .= chr($w1 & 0xFF); + $outstr .= chr($w2 >> 0x08); + $outstr .= chr($w2 & 0xFF); + } + } + return $outstr; + } + + /** + * Convert an array of UTF8 values to array of unicode characters + * @param $ta (array) The input array of UTF8 values. + * @param $isunicode (boolean) True for Unicode mode, false otherwise. + * @return Return array of unicode characters + * @since 4.5.037 (2009-04-07) + * @public static + */ + public static function UTF8ArrayToUniArray($ta, $isunicode=true) { + if ($isunicode) { + return array_map(array('TCPDF_FONTS', 'unichrUnicode'), $ta); + } + return array_map(array('TCPDF_FONTS', 'unichrASCII'), $ta); + } + + /** + * Extract a slice of the $strarr array and return it as string. + * @param $strarr (string) The input array of characters. + * @param $start (int) the starting element of $strarr. + * @param $end (int) first element that will not be returned. + * @param $unicode (boolean) True if we are in unicode mode, false otherwise. + * @return Return part of a string + * @public static + */ + public static function UTF8ArrSubString($strarr, $start='', $end='', $unicode=true) { + if (strlen($start) == 0) { + $start = 0; + } + if (strlen($end) == 0) { + $end = count($strarr); + } + $string = ''; + for ($i = $start; $i < $end; ++$i) { + $string .= self::unichr($strarr[$i], $unicode); + } + return $string; + } + + /** + * Extract a slice of the $uniarr array and return it as string. + * @param $uniarr (string) The input array of characters. + * @param $start (int) the starting element of $strarr. + * @param $end (int) first element that will not be returned. + * @return Return part of a string + * @since 4.5.037 (2009-04-07) + * @public static + */ + public static function UniArrSubString($uniarr, $start='', $end='') { + if (strlen($start) == 0) { + $start = 0; + } + if (strlen($end) == 0) { + $end = count($uniarr); + } + $string = ''; + for ($i=$start; $i < $end; ++$i) { + $string .= $uniarr[$i]; + } + return $string; + } + + /** + * Converts UTF-8 characters array to array of Latin1 characters array<br> + * @param $unicode (array) array containing UTF-8 unicode values + * @return array + * @author Nicola Asuni + * @since 4.8.023 (2010-01-15) + * @public static + */ + public static function UTF8ArrToLatin1Arr($unicode) { + $outarr = array(); // array to be returned + foreach ($unicode as $char) { + if ($char < 256) { + $outarr[] = $char; + } elseif (array_key_exists($char, TCPDF_FONT_DATA::$uni_utf8tolatin)) { + // map from UTF-8 + $outarr[] = TCPDF_FONT_DATA::$uni_utf8tolatin[$char]; + } elseif ($char == 0xFFFD) { + // skip + } else { + $outarr[] = 63; // '?' character + } + } + return $outarr; + } + + /** + * Converts UTF-8 characters array to array of Latin1 string<br> + * @param $unicode (array) array containing UTF-8 unicode values + * @return array + * @author Nicola Asuni + * @since 4.8.023 (2010-01-15) + * @public static + */ + public static function UTF8ArrToLatin1($unicode) { + $outstr = ''; // string to be returned + foreach ($unicode as $char) { + if ($char < 256) { + $outstr .= chr($char); + } elseif (array_key_exists($char, TCPDF_FONT_DATA::$uni_utf8tolatin)) { + // map from UTF-8 + $outstr .= chr(TCPDF_FONT_DATA::$uni_utf8tolatin[$char]); + } elseif ($char == 0xFFFD) { + // skip + } else { + $outstr .= '?'; + } + } + return $outstr; + } + + /** + * Converts UTF-8 character to integer value.<br> + * Uses the getUniord() method if the value is not cached. + * @param $uch (string) character string to process. + * @return integer Unicode value + * @public static + */ + public static function uniord($uch) { + if (!isset(self::$cache_uniord[$uch])) { + self::$cache_uniord[$uch] = self::getUniord($uch); + } + return self::$cache_uniord[$uch]; + } + + /** + * Converts UTF-8 character to integer value.<br> + * Invalid byte sequences will be replaced with 0xFFFD (replacement character)<br> + * Based on: http://www.faqs.org/rfcs/rfc3629.html + * <pre> + * Char. number range | UTF-8 octet sequence + * (hexadecimal) | (binary) + * --------------------+----------------------------------------------- + * 0000 0000-0000 007F | 0xxxxxxx + * 0000 0080-0000 07FF | 110xxxxx 10xxxxxx + * 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx + * 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + * --------------------------------------------------------------------- + * + * ABFN notation: + * --------------------------------------------------------------------- + * UTF8-octets = *( UTF8-char ) + * UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 + * UTF8-1 = %x00-7F + * UTF8-2 = %xC2-DF UTF8-tail + * + * UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) / + * %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail ) + * UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) / + * %xF4 %x80-8F 2( UTF8-tail ) + * UTF8-tail = %x80-BF + * --------------------------------------------------------------------- + * </pre> + * @param $uch (string) character string to process. + * @return integer Unicode value + * @author Nicola Asuni + * @public static + */ + public static function getUniord($uch) { + if (function_exists('mb_convert_encoding')) { + list(, $char) = @unpack('N', mb_convert_encoding($uch, 'UCS-4BE', 'UTF-8')); + if ($char >= 0) { + return $char; + } + } + $bytes = array(); // array containing single character byte sequences + $countbytes = 0; + $numbytes = 1; // number of octetc needed to represent the UTF-8 character + $length = strlen($uch); + for ($i = 0; $i < $length; ++$i) { + $char = ord($uch[$i]); // get one string character at time + if ($countbytes == 0) { // get starting octect + if ($char <= 0x7F) { + return $char; // use the character "as is" because is ASCII + } elseif (($char >> 0x05) == 0x06) { // 2 bytes character (0x06 = 110 BIN) + $bytes[] = ($char - 0xC0) << 0x06; + ++$countbytes; + $numbytes = 2; + } elseif (($char >> 0x04) == 0x0E) { // 3 bytes character (0x0E = 1110 BIN) + $bytes[] = ($char - 0xE0) << 0x0C; + ++$countbytes; + $numbytes = 3; + } elseif (($char >> 0x03) == 0x1E) { // 4 bytes character (0x1E = 11110 BIN) + $bytes[] = ($char - 0xF0) << 0x12; + ++$countbytes; + $numbytes = 4; + } else { + // use replacement character for other invalid sequences + return 0xFFFD; + } + } elseif (($char >> 0x06) == 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN + $bytes[] = $char - 0x80; + ++$countbytes; + if ($countbytes == $numbytes) { + // compose UTF-8 bytes to a single unicode value + $char = $bytes[0]; + for ($j = 1; $j < $numbytes; ++$j) { + $char += ($bytes[$j] << (($numbytes - $j - 1) * 0x06)); + } + if ((($char >= 0xD800) AND ($char <= 0xDFFF)) OR ($char >= 0x10FFFF)) { + // The definition of UTF-8 prohibits encoding character numbers between + // U+D800 and U+DFFF, which are reserved for use with the UTF-16 + // encoding form (as surrogate pairs) and do not directly represent + // characters. + return 0xFFFD; // use replacement character + } else { + return $char; + } + } + } else { + // use replacement character for other invalid sequences + return 0xFFFD; + } + } + return 0xFFFD; + } + + /** + * Converts UTF-8 strings to codepoints array.<br> + * Invalid byte sequences will be replaced with 0xFFFD (replacement character)<br> + * @param $str (string) string to process. + * @param $isunicode (boolean) True when the documetn is in Unicode mode, false otherwise. + * @param $currentfont (array) Reference to current font array. + * @return array containing codepoints (UTF-8 characters values) + * @author Nicola Asuni + * @public static + */ + public static function UTF8StringToArray($str, $isunicode=true, &$currentfont) { + if ($isunicode) { + // requires PCRE unicode support turned on + $chars = TCPDF_STATIC::pregSplit('//','u', $str, -1, PREG_SPLIT_NO_EMPTY); + $carr = array_map(array('TCPDF_FONTS', 'uniord'), $chars); + } else { + $chars = str_split($str); + $carr = array_map('ord', $chars); + } + $currentfont['subsetchars'] += array_fill_keys($carr, true); + return $carr; + } + + /** + * Converts UTF-8 strings to Latin1 when using the standard 14 core fonts.<br> + * @param $str (string) string to process. + * @param $isunicode (boolean) True when the documetn is in Unicode mode, false otherwise. + * @param $currentfont (array) Reference to current font array. + * @return string + * @since 3.2.000 (2008-06-23) + * @public static + */ + public static function UTF8ToLatin1($str, $isunicode=true, &$currentfont) { + $unicode = self::UTF8StringToArray($str, $isunicode, $currentfont); // array containing UTF-8 unicode values + return self::UTF8ArrToLatin1($unicode); + } + + /** + * Converts UTF-8 strings to UTF16-BE.<br> + * @param $str (string) string to process. + * @param $setbom (boolean) if true set the Byte Order Mark (BOM = 0xFEFF) + * @param $isunicode (boolean) True when the documetn is in Unicode mode, false otherwise. + * @param $currentfont (array) Reference to current font array. + * @return string + * @author Nicola Asuni + * @since 1.53.0.TC005 (2005-01-05) + * @public static + */ + public static function UTF8ToUTF16BE($str, $setbom=false, $isunicode=true, &$currentfont) { + if (!$isunicode) { + return $str; // string is not in unicode + } + $unicode = self::UTF8StringToArray($str, $isunicode, $currentfont); // array containing UTF-8 unicode values + return self::arrUTF8ToUTF16BE($unicode, $setbom); + } + + /** + * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param $str (string) string to manipulate. + * @param $setbom (bool) if true set the Byte Order Mark (BOM = 0xFEFF) + * @param $forcertl (bool) if true forces RTL text direction + * @param $isunicode (boolean) True if the document is in Unicode mode, false otherwise. + * @param $currentfont (array) Reference to current font array. + * @return string + * @author Nicola Asuni + * @since 2.1.000 (2008-01-08) + * @public static + */ + public static function utf8StrRev($str, $setbom=false, $forcertl=false, $isunicode=true, &$currentfont) { + return self::utf8StrArrRev(self::UTF8StringToArray($str, $isunicode, $currentfont), $str, $setbom, $forcertl, $isunicode, $currentfont); + } + + /** + * Reverse the RLT substrings array using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param $arr (array) array of unicode values. + * @param $str (string) string to manipulate (or empty value). + * @param $setbom (bool) if true set the Byte Order Mark (BOM = 0xFEFF) + * @param $forcertl (bool) if true forces RTL text direction + * @param $isunicode (boolean) True if the document is in Unicode mode, false otherwise. + * @param $currentfont (array) Reference to current font array. + * @return string + * @author Nicola Asuni + * @since 4.9.000 (2010-03-27) + * @public static + */ + public static function utf8StrArrRev($arr, $str='', $setbom=false, $forcertl=false, $isunicode=true, &$currentfont) { + return self::arrUTF8ToUTF16BE(self::utf8Bidi($arr, $str, $forcertl, $isunicode, $currentfont), $setbom); + } + + /** + * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/). + * @param $ta (array) array of characters composing the string. + * @param $str (string) string to process + * @param $forcertl (bool) if 'R' forces RTL, if 'L' forces LTR + * @param $isunicode (boolean) True if the document is in Unicode mode, false otherwise. + * @param $currentfont (array) Reference to current font array. + * @return array of unicode chars + * @author Nicola Asuni + * @since 2.4.000 (2008-03-06) + * @public static + */ + public static function utf8Bidi($ta, $str='', $forcertl=false, $isunicode=true, &$currentfont) { + // paragraph embedding level + $pel = 0; + // max level + $maxlevel = 0; + if (TCPDF_STATIC::empty_string($str)) { + // create string from array + $str = self::UTF8ArrSubString($ta, '', '', $isunicode); + } + // check if string contains arabic text + if (preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC, $str)) { + $arabic = true; + } else { + $arabic = false; + } + // check if string contains RTL text + if (!($forcertl OR $arabic OR preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL, $str))) { + return $ta; + } + + // get number of chars + $numchars = count($ta); + + if ($forcertl == 'R') { + $pel = 1; + } elseif ($forcertl == 'L') { + $pel = 0; + } else { + // P2. In each paragraph, find the first character of type L, AL, or R. + // P3. If a character is found in P2 and it is of type AL or R, then set the paragraph embedding level to one; otherwise, set it to zero. + for ($i=0; $i < $numchars; ++$i) { + $type = TCPDF_FONT_DATA::$uni_type[$ta[$i]]; + if ($type == 'L') { + $pel = 0; + break; + } elseif (($type == 'AL') OR ($type == 'R')) { + $pel = 1; + break; + } + } + } + + // Current Embedding Level + $cel = $pel; + // directional override status + $dos = 'N'; + $remember = array(); + // start-of-level-run + $sor = $pel % 2 ? 'R' : 'L'; + $eor = $sor; + + // Array of characters data + $chardata = Array(); + + // X1. Begin by setting the current embedding level to the paragraph embedding level. Set the directional override status to neutral. Process each character iteratively, applying rules X2 through X9. Only embedding levels from 0 to 61 are valid in this phase. + // In the resolution of levels in rules I1 and I2, the maximum embedding level of 62 can be reached. + for ($i=0; $i < $numchars; ++$i) { + if ($ta[$i] == TCPDF_FONT_DATA::$uni_RLE) { + // X2. With each RLE, compute the least greater odd embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + ($cel % 2) + 1; + if ($next_level < 62) { + $remember[] = array('num' => TCPDF_FONT_DATA::$uni_RLE, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'N'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == TCPDF_FONT_DATA::$uni_LRE) { + // X3. With each LRE, compute the least greater even embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + 2 - ($cel % 2); + if ( $next_level < 62 ) { + $remember[] = array('num' => TCPDF_FONT_DATA::$uni_LRE, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'N'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == TCPDF_FONT_DATA::$uni_RLO) { + // X4. With each RLO, compute the least greater odd embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to right-to-left. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + ($cel % 2) + 1; + if ($next_level < 62) { + $remember[] = array('num' => TCPDF_FONT_DATA::$uni_RLO, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'R'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == TCPDF_FONT_DATA::$uni_LRO) { + // X5. With each LRO, compute the least greater even embedding level. + // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to left-to-right. + // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status. + $next_level = $cel + 2 - ($cel % 2); + if ( $next_level < 62 ) { + $remember[] = array('num' => TCPDF_FONT_DATA::$uni_LRO, 'cel' => $cel, 'dos' => $dos); + $cel = $next_level; + $dos = 'L'; + $sor = $eor; + $eor = $cel % 2 ? 'R' : 'L'; + } + } elseif ($ta[$i] == TCPDF_FONT_DATA::$uni_PDF) { + // X7. With each PDF, determine the matching embedding or override code. If there was a valid matching code, restore (pop) the last remembered (pushed) embedding level and directional override. + if (count($remember)) { + $last = count($remember ) - 1; + if (($remember[$last]['num'] == TCPDF_FONT_DATA::$uni_RLE) OR + ($remember[$last]['num'] == TCPDF_FONT_DATA::$uni_LRE) OR + ($remember[$last]['num'] == TCPDF_FONT_DATA::$uni_RLO) OR + ($remember[$last]['num'] == TCPDF_FONT_DATA::$uni_LRO)) { + $match = array_pop($remember); + $cel = $match['cel']; + $dos = $match['dos']; + $sor = $eor; + $eor = ($cel > $match['cel'] ? $cel : $match['cel']) % 2 ? 'R' : 'L'; + } + } + } elseif (($ta[$i] != TCPDF_FONT_DATA::$uni_RLE) AND + ($ta[$i] != TCPDF_FONT_DATA::$uni_LRE) AND + ($ta[$i] != TCPDF_FONT_DATA::$uni_RLO) AND + ($ta[$i] != TCPDF_FONT_DATA::$uni_LRO) AND + ($ta[$i] != TCPDF_FONT_DATA::$uni_PDF)) { + // X6. For all types besides RLE, LRE, RLO, LRO, and PDF: + // a. Set the level of the current character to the current embedding level. + // b. Whenever the directional override status is not neutral, reset the current character type to the directional override status. + if ($dos != 'N') { + $chardir = $dos; + } else { + if (isset(TCPDF_FONT_DATA::$uni_type[$ta[$i]])) { + $chardir = TCPDF_FONT_DATA::$uni_type[$ta[$i]]; + } else { + $chardir = 'L'; + } + } + // stores string characters and other information + $chardata[] = array('char' => $ta[$i], 'level' => $cel, 'type' => $chardir, 'sor' => $sor, 'eor' => $eor); + } + } // end for each char + + // X8. All explicit directional embeddings and overrides are completely terminated at the end of each paragraph. Paragraph separators are not included in the embedding. + // X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes. + // X10. The remaining rules are applied to each run of characters at the same level. For each run, determine the start-of-level-run (sor) and end-of-level-run (eor) type, either L or R. This depends on the higher of the two levels on either side of the boundary (at the start or end of the paragraph, the level of the 'other' run is the base embedding level). If the higher level is odd, the type is R; otherwise, it is L. + + // 3.3.3 Resolving Weak Types + // Weak types are now resolved one level run at a time. At level run boundaries where the type of the character on the other side of the boundary is required, the type assigned to sor or eor is used. + // Nonspacing marks are now resolved based on the previous characters. + $numchars = count($chardata); + + // W1. Examine each nonspacing mark (NSM) in the level run, and change the type of the NSM to the type of the previous character. If the NSM is at the start of the level run, it will get the type of sor. + $prevlevel = -1; // track level changes + $levcount = 0; // counts consecutive chars at the same level + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'NSM') { + if ($levcount) { + $chardata[$i]['type'] = $chardata[$i]['sor']; + } elseif ($i > 0) { + $chardata[$i]['type'] = $chardata[($i-1)]['type']; + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sor) is found. If an AL is found, change the type of the European number to Arabic number. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['char'] == 'EN') { + for ($j=$levcount; $j >= 0; $j--) { + if ($chardata[$j]['type'] == 'AL') { + $chardata[$i]['type'] = 'AN'; + } elseif (($chardata[$j]['type'] == 'L') OR ($chardata[$j]['type'] == 'R')) { + break; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W3. Change all ALs to R. + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'AL') { + $chardata[$i]['type'] = 'R'; + } + } + + // W4. A single European separator between two European numbers changes to a European number. A single common separator between two numbers of the same type changes to that type. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + if (($chardata[$i]['type'] == 'ES') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'AN') AND ($chardata[($i+1)]['type'] == 'AN')) { + $chardata[$i]['type'] = 'AN'; + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['type'] == 'ET') { + if (($levcount > 0) AND ($chardata[($i-1)]['type'] == 'EN')) { + $chardata[$i]['type'] = 'EN'; + } else { + $j = $i+1; + while (($j < $numchars) AND ($chardata[$j]['level'] == $prevlevel)) { + if ($chardata[$j]['type'] == 'EN') { + $chardata[$i]['type'] = 'EN'; + break; + } elseif ($chardata[$j]['type'] != 'ET') { + break; + } + ++$j; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // W6. Otherwise, separators and terminators change to Other Neutral. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($chardata[$i]['type'] == 'ET') OR ($chardata[$i]['type'] == 'ES') OR ($chardata[$i]['type'] == 'CS')) { + $chardata[$i]['type'] = 'ON'; + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + //W7. Search backward from each instance of a European number until the first strong type (R, L, or sor) is found. If an L is found, then change the type of the European number to L. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['char'] == 'EN') { + for ($j=$levcount; $j >= 0; $j--) { + if ($chardata[$j]['type'] == 'L') { + $chardata[$i]['type'] = 'L'; + } elseif ($chardata[$j]['type'] == 'R') { + break; + } + } + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // N1. A sequence of neutrals takes the direction of the surrounding strong text if the text on both sides has the same direction. European and Arabic numbers act as if they were R in terms of their influence on neutrals. Start-of-level-run (sor) and end-of-level-run (eor) are used at level run boundaries. + $prevlevel = -1; + $levcount = 0; + for ($i=0; $i < $numchars; ++$i) { + if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND + (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif (($levcount == 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) { + // first char + if (($chardata[$i]['type'] == 'N') AND ($chardata[$i]['sor'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[$i]['sor'] == 'R') OR ($chardata[$i]['sor'] == 'EN') OR ($chardata[$i]['sor'] == 'AN')) AND + (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif (($levcount > 0) AND ((($i+1) == $numchars) OR (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] != $prevlevel))) { + //last char + if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[$i]['eor'] == 'L')) { + $chardata[$i]['type'] = 'L'; + } elseif (($chardata[$i]['type'] == 'N') AND + (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND + (($chardata[$i]['eor'] == 'R') OR ($chardata[$i]['eor'] == 'EN') OR ($chardata[$i]['eor'] == 'AN'))) { + $chardata[$i]['type'] = 'R'; + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + } elseif ($chardata[$i]['type'] == 'N') { + // N2. Any remaining neutrals take the embedding direction + $chardata[$i]['type'] = $chardata[$i]['sor']; + } + if ($chardata[$i]['level'] != $prevlevel) { + $levcount = 0; + } else { + ++$levcount; + } + $prevlevel = $chardata[$i]['level']; + } + + // I1. For all characters with an even (left-to-right) embedding direction, those of type R go up one level and those of type AN or EN go up two levels. + // I2. For all characters with an odd (right-to-left) embedding direction, those of type L, EN or AN go up one level. + for ($i=0; $i < $numchars; ++$i) { + $odd = $chardata[$i]['level'] % 2; + if ($odd) { + if (($chardata[$i]['type'] == 'L') OR ($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) { + $chardata[$i]['level'] += 1; + } + } else { + if ($chardata[$i]['type'] == 'R') { + $chardata[$i]['level'] += 1; + } elseif (($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) { + $chardata[$i]['level'] += 2; + } + } + $maxlevel = max($chardata[$i]['level'],$maxlevel); + } + + // L1. On each line, reset the embedding level of the following characters to the paragraph embedding level: + // 1. Segment separators, + // 2. Paragraph separators, + // 3. Any sequence of whitespace characters preceding a segment separator or paragraph separator, and + // 4. Any sequence of white space characters at the end of the line. + for ($i=0; $i < $numchars; ++$i) { + if (($chardata[$i]['type'] == 'B') OR ($chardata[$i]['type'] == 'S')) { + $chardata[$i]['level'] = $pel; + } elseif ($chardata[$i]['type'] == 'WS') { + $j = $i+1; + while ($j < $numchars) { + if ((($chardata[$j]['type'] == 'B') OR ($chardata[$j]['type'] == 'S')) OR + (($j == ($numchars-1)) AND ($chardata[$j]['type'] == 'WS'))) { + $chardata[$i]['level'] = $pel; + break; + } elseif ($chardata[$j]['type'] != 'WS') { + break; + } + ++$j; + } + } + } + + // Arabic Shaping + // Cursively connected scripts, such as Arabic or Syriac, require the selection of positional character shapes that depend on adjacent characters. Shaping is logically applied after the Bidirectional Algorithm is used and is limited to characters within the same directional run. + if ($arabic) { + $endedletter = array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688); + $alfletter = array(1570,1571,1573,1575); + $chardata2 = $chardata; + $laaletter = false; + $charAL = array(); + $x = 0; + for ($i=0; $i < $numchars; ++$i) { + if ((TCPDF_FONT_DATA::$uni_type[$chardata[$i]['char']] == 'AL') OR ($chardata[$i]['char'] == 32) OR ($chardata[$i]['char'] == 8204)) { + $charAL[$x] = $chardata[$i]; + $charAL[$x]['i'] = $i; + $chardata[$i]['x'] = $x; + ++$x; + } + } + $numAL = $x; + for ($i=0; $i < $numchars; ++$i) { + $thischar = $chardata[$i]; + if ($i > 0) { + $prevchar = $chardata[($i-1)]; + } else { + $prevchar = false; + } + if (($i+1) < $numchars) { + $nextchar = $chardata[($i+1)]; + } else { + $nextchar = false; + } + if (TCPDF_FONT_DATA::$uni_type[$thischar['char']] == 'AL') { + $x = $thischar['x']; + if ($x > 0) { + $prevchar = $charAL[($x-1)]; + } else { + $prevchar = false; + } + if (($x+1) < $numAL) { + $nextchar = $charAL[($x+1)]; + } else { + $nextchar = false; + } + // if laa letter + if (($prevchar !== false) AND ($prevchar['char'] == 1604) AND (in_array($thischar['char'], $alfletter))) { + $arabicarr = TCPDF_FONT_DATA::$uni_laa_array; + $laaletter = true; + if ($x > 1) { + $prevchar = $charAL[($x-2)]; + } else { + $prevchar = false; + } + } else { + $arabicarr = TCPDF_FONT_DATA::$uni_arabicsubst; + $laaletter = false; + } + if (($prevchar !== false) AND ($nextchar !== false) AND + ((TCPDF_FONT_DATA::$uni_type[$prevchar['char']] == 'AL') OR (TCPDF_FONT_DATA::$uni_type[$prevchar['char']] == 'NSM')) AND + ((TCPDF_FONT_DATA::$uni_type[$nextchar['char']] == 'AL') OR (TCPDF_FONT_DATA::$uni_type[$nextchar['char']] == 'NSM')) AND + ($prevchar['type'] == $thischar['type']) AND + ($nextchar['type'] == $thischar['type']) AND + ($nextchar['char'] != 1567)) { + if (in_array($prevchar['char'], $endedletter)) { + if (isset($arabicarr[$thischar['char']][2])) { + // initial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2]; + } + } else { + if (isset($arabicarr[$thischar['char']][3])) { + // medial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][3]; + } + } + } elseif (($nextchar !== false) AND + ((TCPDF_FONT_DATA::$uni_type[$nextchar['char']] == 'AL') OR (TCPDF_FONT_DATA::$uni_type[$nextchar['char']] == 'NSM')) AND + ($nextchar['type'] == $thischar['type']) AND + ($nextchar['char'] != 1567)) { + if (isset($arabicarr[$chardata[$i]['char']][2])) { + // initial + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2]; + } + } elseif ((($prevchar !== false) AND + ((TCPDF_FONT_DATA::$uni_type[$prevchar['char']] == 'AL') OR (TCPDF_FONT_DATA::$uni_type[$prevchar['char']] == 'NSM')) AND + ($prevchar['type'] == $thischar['type'])) OR + (($nextchar !== false) AND ($nextchar['char'] == 1567))) { + // final + if (($i > 1) AND ($thischar['char'] == 1607) AND + ($chardata[$i-1]['char'] == 1604) AND + ($chardata[$i-2]['char'] == 1604)) { + //Allah Word + // mark characters to delete with false + $chardata2[$i-2]['char'] = false; + $chardata2[$i-1]['char'] = false; + $chardata2[$i]['char'] = 65010; + } else { + if (($prevchar !== false) AND in_array($prevchar['char'], $endedletter)) { + if (isset($arabicarr[$thischar['char']][0])) { + // isolated + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0]; + } + } else { + if (isset($arabicarr[$thischar['char']][1])) { + // final + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][1]; + } + } + } + } elseif (isset($arabicarr[$thischar['char']][0])) { + // isolated + $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0]; + } + // if laa letter + if ($laaletter) { + // mark characters to delete with false + $chardata2[($charAL[($x-1)]['i'])]['char'] = false; + } + } // end if AL (Arabic Letter) + } // end for each char + /* + * Combining characters that can occur with Arabic Shadda (0651 HEX, 1617 DEC) are replaced. + * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner. + */ + for ($i = 0; $i < ($numchars-1); ++$i) { + if (($chardata2[$i]['char'] == 1617) AND (isset(TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1]['char'])]))) { + // check if the subtitution font is defined on current font + if (isset($currentfont['cw'][(TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1]['char'])])])) { + $chardata2[$i]['char'] = false; + $chardata2[$i+1]['char'] = TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1]['char'])]; + } + } + } + // remove marked characters + foreach ($chardata2 as $key => $value) { + if ($value['char'] === false) { + unset($chardata2[$key]); + } + } + $chardata = array_values($chardata2); + $numchars = count($chardata); + unset($chardata2); + unset($arabicarr); + unset($laaletter); + unset($charAL); + } + + // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher. + for ($j=$maxlevel; $j > 0; $j--) { + $ordarray = Array(); + $revarr = Array(); + $onlevel = false; + for ($i=0; $i < $numchars; ++$i) { + if ($chardata[$i]['level'] >= $j) { + $onlevel = true; + if (isset(TCPDF_FONT_DATA::$uni_mirror[$chardata[$i]['char']])) { + // L4. A character is depicted by a mirrored glyph if and only if (a) the resolved directionality of that character is R, and (b) the Bidi_Mirrored property value of that character is true. + $chardata[$i]['char'] = TCPDF_FONT_DATA::$uni_mirror[$chardata[$i]['char']]; + } + $revarr[] = $chardata[$i]; + } else { + if ($onlevel) { + $revarr = array_reverse($revarr); + $ordarray = array_merge($ordarray, $revarr); + $revarr = Array(); + $onlevel = false; + } + $ordarray[] = $chardata[$i]; + } + } + if ($onlevel) { + $revarr = array_reverse($revarr); + $ordarray = array_merge($ordarray, $revarr); + } + $chardata = $ordarray; + } + $ordarray = array(); + foreach ($chardata as $cd) { + $ordarray[] = $cd['char']; + // store char values for subsetting + $currentfont['subsetchars'][$cd['char']] = true; + } + return $ordarray; + } + +} // END OF TCPDF_FONTS CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/tcpdf_images.php b/tcpdf/include/tcpdf_images.php new file mode 100644 index 0000000..c2e3c36 --- /dev/null +++ b/tcpdf/include/tcpdf_images.php @@ -0,0 +1,364 @@ +<?php +//============================================================+ +// File name : tcpdf_images.php +// Version : 1.0.005 +// Begin : 2002-08-03 +// Last Update : 2014-11-15 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2002-2014 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : +// Static image methods used by the TCPDF class. +// +//============================================================+ + +/** + * @file + * This is a PHP class that contains static image methods for the TCPDF class.<br> + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.005 + */ + +/** + * @class TCPDF_IMAGES + * Static image methods used by the TCPDF class. + * @package com.tecnick.tcpdf + * @brief PHP class for generating PDF documents without requiring external extensions. + * @version 1.0.005 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_IMAGES { + + /** + * Array of hinheritable SVG properties. + * @since 5.0.000 (2010-05-02) + * @public static + */ + public static $svginheritprop = array('clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cursor', 'direction', 'display', 'fill', 'fill-opacity', 'fill-rule', 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning', 'letter-spacing', 'marker', 'marker-end', 'marker-mid', 'marker-start', 'pointer-events', 'shape-rendering', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-rendering', 'visibility', 'word-spacing', 'writing-mode'); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + /** + * Return the image type given the file name or array returned by getimagesize() function. + * @param $imgfile (string) image file name + * @param $iminfo (array) array of image information returned by getimagesize() function. + * @return string image type + * @since 4.8.017 (2009-11-27) + * @public static + */ + public static function getImageFileType($imgfile, $iminfo=array()) { + $type = ''; + if (isset($iminfo['mime']) AND !empty($iminfo['mime'])) { + $mime = explode('/', $iminfo['mime']); + if ((count($mime) > 1) AND ($mime[0] == 'image') AND (!empty($mime[1]))) { + $type = strtolower(trim($mime[1])); + } + } + if (empty($type)) { + $fileinfo = pathinfo($imgfile); + if (isset($fileinfo['extension']) AND (!TCPDF_STATIC::empty_string($fileinfo['extension']))) { + $type = strtolower(trim($fileinfo['extension'])); + } + } + if ($type == 'jpg') { + $type = 'jpeg'; + } + return $type; + } + + /** + * Set the transparency for the given GD image. + * @param $new_image (image) GD image object + * @param $image (image) GD image object. + * return GD image object. + * @since 4.9.016 (2010-04-20) + * @public static + */ + public static function setGDImageTransparency($new_image, $image) { + // default transparency color (white) + $tcol = array('red' => 255, 'green' => 255, 'blue' => 255); + // transparency index + $tid = imagecolortransparent($image); + $palletsize = imagecolorstotal($image); + if (($tid >= 0) AND ($tid < $palletsize)) { + // get the colors for the transparency index + $tcol = imagecolorsforindex($image, $tid); + } + $tid = imagecolorallocate($new_image, $tcol['red'], $tcol['green'], $tcol['blue']); + imagefill($new_image, 0, 0, $tid); + imagecolortransparent($new_image, $tid); + return $new_image; + } + + /** + * Convert the loaded image to a PNG and then return a structure for the PDF creator. + * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant. + * @param $image (image) Image object. + * @param $tempfile (string) Temporary file name. + * return image PNG image object. + * @since 4.9.016 (2010-04-20) + * @public static + */ + public static function _toPNG($image, $tempfile) { + // turn off interlaced mode + imageinterlace($image, 0); + // create temporary PNG image + imagepng($image, $tempfile); + // remove image from memory + imagedestroy($image); + // get PNG image data + $retvars = self::_parsepng($tempfile); + // tidy up by removing temporary image + unlink($tempfile); + return $retvars; + } + + /** + * Convert the loaded image to a JPEG and then return a structure for the PDF creator. + * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant. + * @param $image (image) Image object. + * @param $quality (int) JPEG quality. + * @param $tempfile (string) Temporary file name. + * return image JPEG image object. + * @public static + */ + public static function _toJPEG($image, $quality, $tempfile) { + imagejpeg($image, $tempfile, $quality); + imagedestroy($image); + $retvars = self::_parsejpeg($tempfile); + // tidy up by removing temporary image + unlink($tempfile); + return $retvars; + } + + /** + * Extract info from a JPEG file without using the GD library. + * @param $file (string) image file to parse + * @return array structure containing the image data + * @public static + */ + public static function _parsejpeg($file) { + // check if is a local file + if (!@file_exists($file)) { + // try to encode spaces on filename + $tfile = str_replace(' ', '%20', $file); + if (@file_exists($tfile)) { + $file = $tfile; + } + } + $a = getimagesize($file); + if (empty($a)) { + //Missing or incorrect image file + return false; + } + if ($a[2] != 2) { + // Not a JPEG file + return false; + } + // bits per pixel + $bpc = isset($a['bits']) ? intval($a['bits']) : 8; + // number of image channels + if (!isset($a['channels'])) { + $channels = 3; + } else { + $channels = intval($a['channels']); + } + // default colour space + switch ($channels) { + case 1: { + $colspace = 'DeviceGray'; + break; + } + case 3: { + $colspace = 'DeviceRGB'; + break; + } + case 4: { + $colspace = 'DeviceCMYK'; + break; + } + default: { + $channels = 3; + $colspace = 'DeviceRGB'; + break; + } + } + // get file content + $data = file_get_contents($file); + // check for embedded ICC profile + $icc = array(); + $offset = 0; + while (($pos = strpos($data, "ICC_PROFILE\0", $offset)) !== false) { + // get ICC sequence length + $length = (TCPDF_STATIC::_getUSHORT($data, ($pos - 2)) - 16); + // marker sequence number + $msn = max(1, ord($data[($pos + 12)])); + // number of markers (total of APP2 used) + $nom = max(1, ord($data[($pos + 13)])); + // get sequence segment + $icc[($msn - 1)] = substr($data, ($pos + 14), $length); + // move forward to next sequence + $offset = ($pos + 14 + $length); + } + // order and compact ICC segments + if (count($icc) > 0) { + ksort($icc); + $icc = implode('', $icc); + if ((ord($icc[36]) != 0x61) OR (ord($icc[37]) != 0x63) OR (ord($icc[38]) != 0x73) OR (ord($icc[39]) != 0x70)) { + // invalid ICC profile + $icc = false; + } + } else { + $icc = false; + } + return array('w' => $a[0], 'h' => $a[1], 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data); + } + + /** + * Extract info from a PNG file without using the GD library. + * @param $file (string) image file to parse + * @return array structure containing the image data + * @public static + */ + public static function _parsepng($file) { + $f = @fopen($file, 'rb'); + if ($f === false) { + // Can't open image file + return false; + } + //Check signature + if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) { + // Not a PNG file + return false; + } + //Read header chunk + fread($f, 4); + if (fread($f, 4) != 'IHDR') { + //Incorrect PNG file + return false; + } + $w = TCPDF_STATIC::_freadint($f); + $h = TCPDF_STATIC::_freadint($f); + $bpc = ord(fread($f, 1)); + $ct = ord(fread($f, 1)); + if ($ct == 0) { + $colspace = 'DeviceGray'; + } elseif ($ct == 2) { + $colspace = 'DeviceRGB'; + } elseif ($ct == 3) { + $colspace = 'Indexed'; + } else { + // alpha channel + fclose($f); + return 'pngalpha'; + } + if (ord(fread($f, 1)) != 0) { + // Unknown compression method + fclose($f); + return false; + } + if (ord(fread($f, 1)) != 0) { + // Unknown filter method + fclose($f); + return false; + } + if (ord(fread($f, 1)) != 0) { + // Interlacing not supported + fclose($f); + return false; + } + fread($f, 4); + $channels = ($ct == 2 ? 3 : 1); + $parms = '/DecodeParms << /Predictor 15 /Colors '.$channels.' /BitsPerComponent '.$bpc.' /Columns '.$w.' >>'; + //Scan chunks looking for palette, transparency and image data + $pal = ''; + $trns = ''; + $data = ''; + $icc = false; + $n = TCPDF_STATIC::_freadint($f); + do { + $type = fread($f, 4); + if ($type == 'PLTE') { + // read palette + $pal = TCPDF_STATIC::rfread($f, $n); + fread($f, 4); + } elseif ($type == 'tRNS') { + // read transparency info + $t = TCPDF_STATIC::rfread($f, $n); + if ($ct == 0) { // DeviceGray + $trns = array(ord($t[1])); + } elseif ($ct == 2) { // DeviceRGB + $trns = array(ord($t[1]), ord($t[3]), ord($t[5])); + } else { // Indexed + if ($n > 0) { + $trns = array(); + for ($i = 0; $i < $n; ++ $i) { + $trns[] = ord($t{$i}); + } + } + } + fread($f, 4); + } elseif ($type == 'IDAT') { + // read image data block + $data .= TCPDF_STATIC::rfread($f, $n); + fread($f, 4); + } elseif ($type == 'iCCP') { + // skip profile name + $len = 0; + while ((ord(fread($f, 1)) != 0) AND ($len < 80)) { + ++$len; + } + // get compression method + if (ord(fread($f, 1)) != 0) { + // Unknown filter method + fclose($f); + return false; + } + // read ICC Color Profile + $icc = TCPDF_STATIC::rfread($f, ($n - $len - 2)); + // decompress profile + $icc = gzuncompress($icc); + fread($f, 4); + } elseif ($type == 'IEND') { + break; + } else { + TCPDF_STATIC::rfread($f, $n + 4); + } + $n = TCPDF_STATIC::_freadint($f); + } while ($n); + if (($colspace == 'Indexed') AND (empty($pal))) { + // Missing palette + fclose($f); + return false; + } + fclose($f); + return array('w' => $w, 'h' => $h, 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data); + } + +} // END OF TCPDF_IMAGES CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/include/tcpdf_static.php b/tcpdf/include/tcpdf_static.php new file mode 100644 index 0000000..f6d4d2b --- /dev/null +++ b/tcpdf/include/tcpdf_static.php @@ -0,0 +1,2606 @@ +<?php +//============================================================+ +// File name : tcpdf_static.php +// Version : 1.1.3 +// Begin : 2002-08-03 +// Last Update : 2015-04-28 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2002-2015 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : +// Static methods used by the TCPDF class. +// +//============================================================+ + +/** + * @file + * This is a PHP class that contains static methods for the TCPDF class.<br> + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.1.2 + */ + +/** + * @class TCPDF_STATIC + * Static methods used by the TCPDF class. + * @package com.tecnick.tcpdf + * @brief PHP class for generating PDF documents without requiring external extensions. + * @version 1.1.1 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_STATIC { + + /** + * Current TCPDF version. + * @private static + */ + private static $tcpdf_version = '6.2.12'; + + /** + * String alias for total number of pages. + * @public static + */ + public static $alias_tot_pages = '{:ptp:}'; + + /** + * String alias for page number. + * @public static + */ + public static $alias_num_page = '{:pnp:}'; + + /** + * String alias for total number of pages in a single group. + * @public static + */ + public static $alias_group_tot_pages = '{:ptg:}'; + + /** + * String alias for group page number. + * @public static + */ + public static $alias_group_num_page = '{:png:}'; + + /** + * String alias for right shift compensation used to correctly align page numbers on the right. + * @public static + */ + public static $alias_right_shift = '{rsc:'; + + /** + * Encryption padding string. + * @public static + */ + public static $enc_padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A"; + + /** + * ByteRange placemark used during digital signature process. + * @since 4.6.028 (2009-08-25) + * @public static + */ + public static $byterange_string = '/ByteRange[0 ********** ********** **********]'; + + /** + * Array page boxes names + * @public static + */ + public static $pageboxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'); + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + /** + * Return the current TCPDF version. + * @return TCPDF version string + * @since 5.9.012 (2010-11-10) + * @public static + */ + public static function getTCPDFVersion() { + return self::$tcpdf_version; + } + + /** + * Return the current TCPDF producer. + * @return TCPDF producer string + * @since 6.0.000 (2013-03-16) + * @public static + */ + public static function getTCPDFProducer() { + return "\x54\x43\x50\x44\x46\x20".self::getTCPDFVersion()."\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29"; + } + + /** + * Sets the current active configuration setting of magic_quotes_runtime (if the set_magic_quotes_runtime function exist) + * @param $mqr (boolean) FALSE for off, TRUE for on. + * @since 4.6.025 (2009-08-17) + * @public static + */ + public static function set_mqr($mqr) { + if (!defined('PHP_VERSION_ID')) { + $version = PHP_VERSION; + define('PHP_VERSION_ID', (($version[0] * 10000) + ($version[2] * 100) + $version[4])); + } + if (PHP_VERSION_ID < 50300) { + @set_magic_quotes_runtime($mqr); + } + } + + /** + * Gets the current active configuration setting of magic_quotes_runtime (if the get_magic_quotes_runtime function exist) + * @return Returns 0 if magic quotes runtime is off or get_magic_quotes_runtime doesn't exist, 1 otherwise. + * @since 4.6.025 (2009-08-17) + * @public static + */ + public static function get_mqr() { + if (!defined('PHP_VERSION_ID')) { + $version = PHP_VERSION; + define('PHP_VERSION_ID', (($version[0] * 10000) + ($version[2] * 100) + $version[4])); + } + if (PHP_VERSION_ID < 50300) { + return @get_magic_quotes_runtime(); + } + return 0; + } + + /** + * Check if the URL exist. + * @param $url (string) URL to check. + * @return Boolean true if the URl exist, false otherwise. + * @since 5.9.204 (2013-01-28) + * @public static + */ + public static function isValidURL($url) { + $headers = @get_headers($url); + return (strpos($headers[0], '200') !== false); + } + + /** + * Removes SHY characters from text. + * Unicode Data:<ul> + * <li>Name : SOFT HYPHEN, commonly abbreviated as SHY</li> + * <li>HTML Entity (decimal): "&amp;#173;"</li> + * <li>HTML Entity (hex): "&amp;#xad;"</li> + * <li>HTML Entity (named): "&amp;shy;"</li> + * <li>How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173]</li> + * <li>UTF-8 (hex): 0xC2 0xAD (c2ad)</li> + * <li>UTF-8 character: chr(194).chr(173)</li> + * </ul> + * @param $txt (string) input string + * @param $unicode (boolean) True if we are in unicode mode, false otherwise. + * @return string without SHY characters. + * @since (4.5.019) 2009-02-28 + * @public static + */ + public static function removeSHY($txt='', $unicode=true) { + $txt = preg_replace('/([\\xc2]{1}[\\xad]{1})/', '', $txt); + if (!$unicode) { + $txt = preg_replace('/([\\xad]{1})/', '', $txt); + } + return $txt; + } + + + /** + * Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages) + * @param $brd (mixed) Indicates if borders must be drawn around the cell block. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $position (string) multicell position: 'start', 'middle', 'end' + * @param $opencell (boolean) True when the cell is left open at the page bottom, false otherwise. + * @return border mode array + * @since 4.4.002 (2008-12-09) + * @public static + */ + public static function getBorderMode($brd, $position='start', $opencell=true) { + if ((!$opencell) OR empty($brd)) { + return $brd; + } + if ($brd == 1) { + $brd = 'LTRB'; + } + if (is_string($brd)) { + // convert string to array + $slen = strlen($brd); + $newbrd = array(); + for ($i = 0; $i < $slen; ++$i) { + $newbrd[$brd[$i]] = array('cap' => 'square', 'join' => 'miter'); + } + $brd = $newbrd; + } + foreach ($brd as $border => $style) { + switch ($position) { + case 'start': { + if (strpos($border, 'B') !== false) { + // remove bottom line + $newkey = str_replace('B', '', $border); + if (strlen($newkey) > 0) { + $brd[$newkey] = $style; + } + unset($brd[$border]); + } + break; + } + case 'middle': { + if (strpos($border, 'B') !== false) { + // remove bottom line + $newkey = str_replace('B', '', $border); + if (strlen($newkey) > 0) { + $brd[$newkey] = $style; + } + unset($brd[$border]); + $border = $newkey; + } + if (strpos($border, 'T') !== false) { + // remove bottom line + $newkey = str_replace('T', '', $border); + if (strlen($newkey) > 0) { + $brd[$newkey] = $style; + } + unset($brd[$border]); + } + break; + } + case 'end': { + if (strpos($border, 'T') !== false) { + // remove bottom line + $newkey = str_replace('T', '', $border); + if (strlen($newkey) > 0) { + $brd[$newkey] = $style; + } + unset($brd[$border]); + } + break; + } + } + } + return $brd; + } + + /** + * Determine whether a string is empty. + * @param $str (string) string to be checked + * @return boolean true if string is empty + * @since 4.5.044 (2009-04-16) + * @public static + */ + public static function empty_string($str) { + return (is_null($str) OR (is_string($str) AND (strlen($str) == 0))); + } + + /** + * Returns a temporary filename for caching object on filesystem. + * @param $type (string) Type of file (name of the subdir on the tcpdf cache folder). + * @param $file_id (string) TCPDF file_id. + * @return string filename. + * @since 4.5.000 (2008-12-31) + * @public static + */ + public static function getObjFilename($type='tmp', $file_id='') { + return tempnam(K_PATH_CACHE, '__tcpdf_'.$file_id.'_'.$type.'_'.md5(TCPDF_STATIC::getRandomSeed()).'_'); + } + + /** + * Add "\" before "\", "(" and ")" + * @param $s (string) string to escape. + * @return string escaped string. + * @public static + */ + public static function _escape($s) { + // the chr(13) substitution fixes the Bugs item #1421290. + return strtr($s, array(')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r')); + } + + /** + * Escape some special characters (&lt; &gt; &amp;) for XML output. + * @param $str (string) Input string to convert. + * @return converted string + * @since 5.9.121 (2011-09-28) + * @public static + */ + public static function _escapeXML($str) { + $replaceTable = array("\0" => '', '&' => '&amp;', '<' => '&lt;', '>' => '&gt;'); + $str = strtr($str, $replaceTable); + return $str; + } + + /** + * Creates a copy of a class object + * @param $object (object) class object to be cloned + * @return cloned object + * @since 4.5.029 (2009-03-19) + * @public static + */ + public static function objclone($object) { + if (($object instanceof Imagick) AND (version_compare(phpversion('imagick'), '3.0.1') !== 1)) { + // on the versions after 3.0.1 the clone() method was deprecated in favour of clone keyword + return @$object->clone(); + } + return @clone($object); + } + + /** + * Output input data and compress it if possible. + * @param $data (string) Data to output. + * @param $length (int) Data length in bytes. + * @since 5.9.086 + * @public static + */ + public static function sendOutputData($data, $length) { + if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) { + // the content length may vary if the server is using compression + header('Content-Length: '.$length); + } + echo $data; + } + + /** + * Replace page number aliases with number. + * @param $page (string) Page content. + * @param $replace (array) Array of replacements (array keys are replacement strings, values are alias arrays). + * @param $diff (int) If passed, this will be set to the total char number difference between alias and replacements. + * @return replaced page content and updated $diff parameter as array. + * @public static + */ + public static function replacePageNumAliases($page, $replace, $diff=0) { + foreach ($replace as $rep) { + foreach ($rep[3] as $a) { + if (strpos($page, $a) !== false) { + $page = str_replace($a, $rep[0], $page); + $diff += ($rep[2] - $rep[1]); + } + } + } + return array($page, $diff); + } + + /** + * Returns timestamp in seconds from formatted date-time. + * @param $date (string) Formatted date-time. + * @return int seconds. + * @since 5.9.152 (2012-03-23) + * @public static + */ + public static function getTimestamp($date) { + if (($date[0] == 'D') AND ($date[1] == ':')) { + // remove date prefix if present + $date = substr($date, 2); + } + return strtotime($date); + } + + /** + * Returns a formatted date-time. + * @param $time (int) Time in seconds. + * @return string escaped date string. + * @since 5.9.152 (2012-03-23) + * @public static + */ + public static function getFormattedDate($time) { + return substr_replace(date('YmdHisO', intval($time)), '\'', (0 - 2), 0).'\''; + } + + /** + * Returns a string containing random data to be used as a seed for encryption methods. + * @param $seed (string) starting seed value + * @return string containing random data + * @author Nicola Asuni + * @since 5.9.006 (2010-10-19) + * @public static + */ + public static function getRandomSeed($seed='') { + $rnd = uniqid(rand().microtime(true), true); + if (function_exists('posix_getpid')) { + $rnd .= posix_getpid(); + } + if (function_exists('openssl_random_pseudo_bytes') AND (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')) { + // this is not used on windows systems because it is very slow for a know bug + $rnd .= openssl_random_pseudo_bytes(512); + } else { + for ($i = 0; $i < 23; ++$i) { + $rnd .= uniqid('', true); + } + } + return $rnd.$seed.__FILE__.serialize($_SERVER).microtime(true); + } + + /** + * Encrypts a string using MD5 and returns it's value as a binary string. + * @param $str (string) input string + * @return String MD5 encrypted binary string + * @since 2.0.000 (2008-01-02) + * @public static + */ + public static function _md5_16($str) { + return pack('H*', md5($str)); + } + + /** + * Returns the input text exrypted using AES algorithm and the specified key. + * This method requires openssl or mcrypt. Text is padded to 16bytes blocks + * @param $key (string) encryption key + * @param $text (String) input text to be encrypted + * @return String encrypted text + * @author Nicola Asuni + * @since 5.0.005 (2010-05-11) + * @public static + */ + public static function _AES($key, $text) { + // padding (RFC 2898, PKCS #5: Password-Based Cryptography Specification Version 2.0) + $padding = 16 - (strlen($text) % 16); + $text .= str_repeat(chr($padding), $padding); + if (extension_loaded('openssl')) { + $iv = openssl_random_pseudo_bytes (openssl_cipher_iv_length('aes-256-cbc')); + $text = openssl_encrypt($text, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); + return $iv.substr($text, 0, -16); + } + $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND); + $text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv); + $text = $iv.$text; + return $text; + } + + /** + * Returns the input text exrypted using AES algorithm and the specified key. + * This method requires openssl or mcrypt. Text is not padded + * @param $key (string) encryption key + * @param $text (String) input text to be encrypted + * @return String encrypted text + * @author Nicola Asuni + * @since TODO + * @public static + */ + public static function _AESnopad($key, $text) { + if (extension_loaded('openssl')) { + $iv = str_repeat("\x00", openssl_cipher_iv_length('aes-256-cbc')); + $text = openssl_encrypt($text, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); + return substr($text, 0, -16); + } + $iv = str_repeat("\x00", mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); + $text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv); + return $text; + } + + /** + * Returns the input text encrypted using RC4 algorithm and the specified key. + * RC4 is the standard encryption algorithm used in PDF format + * @param $key (string) Encryption key. + * @param $text (String) Input text to be encrypted. + * @param $last_enc_key (String) Reference to last RC4 key encrypted. + * @param $last_enc_key_c (String) Reference to last RC4 computed key. + * @return String encrypted text + * @since 2.0.000 (2008-01-02) + * @author Klemen Vodopivec, Nicola Asuni + * @public static + */ + public static function _RC4($key, $text, &$last_enc_key, &$last_enc_key_c) { + if (function_exists('mcrypt_encrypt') AND ($out = @mcrypt_encrypt(MCRYPT_ARCFOUR, $key, $text, MCRYPT_MODE_STREAM, ''))) { + // try to use mcrypt function if exist + return $out; + } + if ($last_enc_key != $key) { + $k = str_repeat($key, ((256 / strlen($key)) + 1)); + $rc4 = range(0, 255); + $j = 0; + for ($i = 0; $i < 256; ++$i) { + $t = $rc4[$i]; + $j = ($j + $t + ord($k[$i])) % 256; + $rc4[$i] = $rc4[$j]; + $rc4[$j] = $t; + } + $last_enc_key = $key; + $last_enc_key_c = $rc4; + } else { + $rc4 = $last_enc_key_c; + } + $len = strlen($text); + $a = 0; + $b = 0; + $out = ''; + for ($i = 0; $i < $len; ++$i) { + $a = ($a + 1) % 256; + $t = $rc4[$a]; + $b = ($b + $t) % 256; + $rc4[$a] = $rc4[$b]; + $rc4[$b] = $t; + $k = $rc4[($rc4[$a] + $rc4[$b]) % 256]; + $out .= chr(ord($text[$i]) ^ $k); + } + return $out; + } + + /** + * Return the permission code used on encryption (P value). + * @param $permissions (Array) the set of permissions (specify the ones you want to block). + * @param $mode (int) encryption strength: 0 = RC4 40 bit; 1 = RC4 128 bit; 2 = AES 128 bit; 3 = AES 256 bit. + * @since 5.0.005 (2010-05-12) + * @author Nicola Asuni + * @public static + */ + public static function getUserPermissionCode($permissions, $mode=0) { + $options = array( + 'owner' => 2, // bit 2 -- inverted logic: cleared by default + 'print' => 4, // bit 3 + 'modify' => 8, // bit 4 + 'copy' => 16, // bit 5 + 'annot-forms' => 32, // bit 6 + 'fill-forms' => 256, // bit 9 + 'extract' => 512, // bit 10 + 'assemble' => 1024,// bit 11 + 'print-high' => 2048 // bit 12 + ); + $protection = 2147422012; // 32 bit: (01111111 11111111 00001111 00111100) + foreach ($permissions as $permission) { + if (isset($options[$permission])) { + if (($mode > 0) OR ($options[$permission] <= 32)) { + // set only valid permissions + if ($options[$permission] == 2) { + // the logic for bit 2 is inverted (cleared by default) + $protection += $options[$permission]; + } else { + $protection -= $options[$permission]; + } + } + } + } + return $protection; + } + + /** + * Convert hexadecimal string to string + * @param $bs (string) byte-string to convert + * @return String + * @since 5.0.005 (2010-05-12) + * @author Nicola Asuni + * @public static + */ + public static function convertHexStringToString($bs) { + $string = ''; // string to be returned + $bslength = strlen($bs); + if (($bslength % 2) != 0) { + // padding + $bs .= '0'; + ++$bslength; + } + for ($i = 0; $i < $bslength; $i += 2) { + $string .= chr(hexdec($bs[$i].$bs[($i + 1)])); + } + return $string; + } + + /** + * Convert string to hexadecimal string (byte string) + * @param $s (string) string to convert + * @return byte string + * @since 5.0.010 (2010-05-17) + * @author Nicola Asuni + * @public static + */ + public static function convertStringToHexString($s) { + $bs = ''; + $chars = preg_split('//', $s, -1, PREG_SPLIT_NO_EMPTY); + foreach ($chars as $c) { + $bs .= sprintf('%02s', dechex(ord($c))); + } + return $bs; + } + + /** + * Convert encryption P value to a string of bytes, low-order byte first. + * @param $protection (string) 32bit encryption permission value (P value) + * @return String + * @since 5.0.005 (2010-05-12) + * @author Nicola Asuni + * @public static + */ + public static function getEncPermissionsString($protection) { + $binprot = sprintf('%032b', $protection); + $str = chr(bindec(substr($binprot, 24, 8))); + $str .= chr(bindec(substr($binprot, 16, 8))); + $str .= chr(bindec(substr($binprot, 8, 8))); + $str .= chr(bindec(substr($binprot, 0, 8))); + return $str; + } + + /** + * Encode a name object. + * @param $name (string) Name object to encode. + * @return (string) Encoded name object. + * @author Nicola Asuni + * @since 5.9.097 (2011-06-23) + * @public static + */ + public static function encodeNameObject($name) { + $escname = ''; + $length = strlen($name); + for ($i = 0; $i < $length; ++$i) { + $chr = $name[$i]; + if (preg_match('/[0-9a-zA-Z#_=-]/', $chr) == 1) { + $escname .= $chr; + } else { + $escname .= sprintf('#%02X', ord($chr)); + } + } + return $escname; + } + + /** + * Convert JavaScript form fields properties array to Annotation Properties array. + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param $spot_colors (array) Reference to spot colors array. + * @param $rtl (boolean) True if in Right-To-Left text direction mode, false otherwise. + * @return array of annotation properties + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + * @public static + */ + public static function getAnnotOptFromJSProp($prop, &$spot_colors, $rtl=false) { + if (isset($prop['aopt']) AND is_array($prop['aopt'])) { + // the annotation options area lready defined + return $prop['aopt']; + } + $opt = array(); // value to be returned + // alignment: Controls how the text is laid out within the text field. + if (isset($prop['alignment'])) { + switch ($prop['alignment']) { + case 'left': { + $opt['q'] = 0; + break; + } + case 'center': { + $opt['q'] = 1; + break; + } + case 'right': { + $opt['q'] = 2; + break; + } + default: { + $opt['q'] = ($rtl)?2:0; + break; + } + } + } + // lineWidth: Specifies the thickness of the border when stroking the perimeter of a field's rectangle. + if (isset($prop['lineWidth'])) { + $linewidth = intval($prop['lineWidth']); + } else { + $linewidth = 1; + } + // borderStyle: The border style for a field. + if (isset($prop['borderStyle'])) { + switch ($prop['borderStyle']) { + case 'border.d': + case 'dashed': { + $opt['border'] = array(0, 0, $linewidth, array(3, 2)); + $opt['bs'] = array('w'=>$linewidth, 's'=>'D', 'd'=>array(3, 2)); + break; + } + case 'border.b': + case 'beveled': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'B'); + break; + } + case 'border.i': + case 'inset': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'I'); + break; + } + case 'border.u': + case 'underline': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'U'); + break; + } + case 'border.s': + case 'solid': { + $opt['border'] = array(0, 0, $linewidth); + $opt['bs'] = array('w'=>$linewidth, 's'=>'S'); + break; + } + default: { + break; + } + } + } + if (isset($prop['border']) AND is_array($prop['border'])) { + $opt['border'] = $prop['border']; + } + if (!isset($opt['mk'])) { + $opt['mk'] = array(); + } + if (!isset($opt['mk']['if'])) { + $opt['mk']['if'] = array(); + } + $opt['mk']['if']['a'] = array(0.5, 0.5); + // buttonAlignX: Controls how space is distributed from the left of the button face with respect to the icon. + if (isset($prop['buttonAlignX'])) { + $opt['mk']['if']['a'][0] = $prop['buttonAlignX']; + } + // buttonAlignY: Controls how unused space is distributed from the bottom of the button face with respect to the icon. + if (isset($prop['buttonAlignY'])) { + $opt['mk']['if']['a'][1] = $prop['buttonAlignY']; + } + // buttonFitBounds: If true, the extent to which the icon may be scaled is set to the bounds of the button field. + if (isset($prop['buttonFitBounds']) AND ($prop['buttonFitBounds'] == 'true')) { + $opt['mk']['if']['fb'] = true; + } + // buttonScaleHow: Controls how the icon is scaled (if necessary) to fit inside the button face. + if (isset($prop['buttonScaleHow'])) { + switch ($prop['buttonScaleHow']) { + case 'scaleHow.proportional': { + $opt['mk']['if']['s'] = 'P'; + break; + } + case 'scaleHow.anamorphic': { + $opt['mk']['if']['s'] = 'A'; + break; + } + } + } + // buttonScaleWhen: Controls when an icon is scaled to fit inside the button face. + if (isset($prop['buttonScaleWhen'])) { + switch ($prop['buttonScaleWhen']) { + case 'scaleWhen.always': { + $opt['mk']['if']['sw'] = 'A'; + break; + } + case 'scaleWhen.never': { + $opt['mk']['if']['sw'] = 'N'; + break; + } + case 'scaleWhen.tooBig': { + $opt['mk']['if']['sw'] = 'B'; + break; + } + case 'scaleWhen.tooSmall': { + $opt['mk']['if']['sw'] = 'S'; + break; + } + } + } + // buttonPosition: Controls how the text and the icon of the button are positioned with respect to each other within the button face. + if (isset($prop['buttonPosition'])) { + switch ($prop['buttonPosition']) { + case 0: + case 'position.textOnly': { + $opt['mk']['tp'] = 0; + break; + } + case 1: + case 'position.iconOnly': { + $opt['mk']['tp'] = 1; + break; + } + case 2: + case 'position.iconTextV': { + $opt['mk']['tp'] = 2; + break; + } + case 3: + case 'position.textIconV': { + $opt['mk']['tp'] = 3; + break; + } + case 4: + case 'position.iconTextH': { + $opt['mk']['tp'] = 4; + break; + } + case 5: + case 'position.textIconH': { + $opt['mk']['tp'] = 5; + break; + } + case 6: + case 'position.overlay': { + $opt['mk']['tp'] = 6; + break; + } + } + } + // fillColor: Specifies the background color for a field. + if (isset($prop['fillColor'])) { + if (is_array($prop['fillColor'])) { + $opt['mk']['bg'] = $prop['fillColor']; + } else { + $opt['mk']['bg'] = TCPDF_COLORS::convertHTMLColorToDec($prop['fillColor'], $spot_colors); + } + } + // strokeColor: Specifies the stroke color for a field that is used to stroke the rectangle of the field with a line as large as the line width. + if (isset($prop['strokeColor'])) { + if (is_array($prop['strokeColor'])) { + $opt['mk']['bc'] = $prop['strokeColor']; + } else { + $opt['mk']['bc'] = TCPDF_COLORS::convertHTMLColorToDec($prop['strokeColor'], $spot_colors); + } + } + // rotation: The rotation of a widget in counterclockwise increments. + if (isset($prop['rotation'])) { + $opt['mk']['r'] = $prop['rotation']; + } + // charLimit: Limits the number of characters that a user can type into a text field. + if (isset($prop['charLimit'])) { + $opt['maxlen'] = intval($prop['charLimit']); + } + if (!isset($ff)) { + $ff = 0; // default value + } + // readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it. + if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) { + $ff += 1 << 0; + } + // required: Specifies whether a field requires a value. + if (isset($prop['required']) AND ($prop['required'] == 'true')) { + $ff += 1 << 1; + } + // multiline: Controls how text is wrapped within the field. + if (isset($prop['multiline']) AND ($prop['multiline'] == 'true')) { + $ff += 1 << 12; + } + // password: Specifies whether the field should display asterisks when data is entered in the field. + if (isset($prop['password']) AND ($prop['password'] == 'true')) { + $ff += 1 << 13; + } + // NoToggleToOff: If set, exactly one radio button shall be selected at all times; selecting the currently selected button has no effect. + if (isset($prop['NoToggleToOff']) AND ($prop['NoToggleToOff'] == 'true')) { + $ff += 1 << 14; + } + // Radio: If set, the field is a set of radio buttons. + if (isset($prop['Radio']) AND ($prop['Radio'] == 'true')) { + $ff += 1 << 15; + } + // Pushbutton: If set, the field is a pushbutton that does not retain a permanent value. + if (isset($prop['Pushbutton']) AND ($prop['Pushbutton'] == 'true')) { + $ff += 1 << 16; + } + // Combo: If set, the field is a combo box; if clear, the field is a list box. + if (isset($prop['Combo']) AND ($prop['Combo'] == 'true')) { + $ff += 1 << 17; + } + // editable: Controls whether a combo box is editable. + if (isset($prop['editable']) AND ($prop['editable'] == 'true')) { + $ff += 1 << 18; + } + // Sort: If set, the field's option items shall be sorted alphabetically. + if (isset($prop['Sort']) AND ($prop['Sort'] == 'true')) { + $ff += 1 << 19; + } + // fileSelect: If true, sets the file-select flag in the Options tab of the text field (Field is Used for File Selection). + if (isset($prop['fileSelect']) AND ($prop['fileSelect'] == 'true')) { + $ff += 1 << 20; + } + // multipleSelection: If true, indicates that a list box allows a multiple selection of items. + if (isset($prop['multipleSelection']) AND ($prop['multipleSelection'] == 'true')) { + $ff += 1 << 21; + } + // doNotSpellCheck: If true, spell checking is not performed on this editable text field. + if (isset($prop['doNotSpellCheck']) AND ($prop['doNotSpellCheck'] == 'true')) { + $ff += 1 << 22; + } + // doNotScroll: If true, the text field does not scroll and the user, therefore, is limited by the rectangular region designed for the field. + if (isset($prop['doNotScroll']) AND ($prop['doNotScroll'] == 'true')) { + $ff += 1 << 23; + } + // comb: If set to true, the field background is drawn as series of boxes (one for each character in the value of the field) and each character of the content is drawn within those boxes. The number of boxes drawn is determined from the charLimit property. It applies only to text fields. The setter will also raise if any of the following field properties are also set multiline, password, and fileSelect. A side-effect of setting this property is that the doNotScroll property is also set. + if (isset($prop['comb']) AND ($prop['comb'] == 'true')) { + $ff += 1 << 24; + } + // radiosInUnison: If false, even if a group of radio buttons have the same name and export value, they behave in a mutually exclusive fashion, like HTML radio buttons. + if (isset($prop['radiosInUnison']) AND ($prop['radiosInUnison'] == 'true')) { + $ff += 1 << 25; + } + // richText: If true, the field allows rich text formatting. + if (isset($prop['richText']) AND ($prop['richText'] == 'true')) { + $ff += 1 << 25; + } + // commitOnSelChange: Controls whether a field value is committed after a selection change. + if (isset($prop['commitOnSelChange']) AND ($prop['commitOnSelChange'] == 'true')) { + $ff += 1 << 26; + } + $opt['ff'] = $ff; + // defaultValue: The default value of a field - that is, the value that the field is set to when the form is reset. + if (isset($prop['defaultValue'])) { + $opt['dv'] = $prop['defaultValue']; + } + $f = 4; // default value for annotation flags + // readonly: The read-only characteristic of a field. If a field is read-only, the user can see the field but cannot change it. + if (isset($prop['readonly']) AND ($prop['readonly'] == 'true')) { + $f += 1 << 6; + } + // display: Controls whether the field is hidden or visible on screen and in print. + if (isset($prop['display'])) { + if ($prop['display'] == 'display.visible') { + // + } elseif ($prop['display'] == 'display.hidden') { + $f += 1 << 1; + } elseif ($prop['display'] == 'display.noPrint') { + $f -= 1 << 2; + } elseif ($prop['display'] == 'display.noView') { + $f += 1 << 5; + } + } + $opt['f'] = $f; + // currentValueIndices: Reads and writes single or multiple values of a list box or combo box. + if (isset($prop['currentValueIndices']) AND is_array($prop['currentValueIndices'])) { + $opt['i'] = $prop['currentValueIndices']; + } + // value: The value of the field data that the user has entered. + if (isset($prop['value'])) { + if (is_array($prop['value'])) { + $opt['opt'] = array(); + foreach ($prop['value'] AS $key => $optval) { + // exportValues: An array of strings representing the export values for the field. + if (isset($prop['exportValues'][$key])) { + $opt['opt'][$key] = array($prop['exportValues'][$key], $prop['value'][$key]); + } else { + $opt['opt'][$key] = $prop['value'][$key]; + } + } + } else { + $opt['v'] = $prop['value']; + } + } + // richValue: This property specifies the text contents and formatting of a rich text field. + if (isset($prop['richValue'])) { + $opt['rv'] = $prop['richValue']; + } + // submitName: If nonempty, used during form submission instead of name. Only applicable if submitting in HTML format (that is, URL-encoded). + if (isset($prop['submitName'])) { + $opt['tm'] = $prop['submitName']; + } + // name: Fully qualified field name. + if (isset($prop['name'])) { + $opt['t'] = $prop['name']; + } + // userName: The user name (short description string) of the field. + if (isset($prop['userName'])) { + $opt['tu'] = $prop['userName']; + } + // highlight: Defines how a button reacts when a user clicks it. + if (isset($prop['highlight'])) { + switch ($prop['highlight']) { + case 'none': + case 'highlight.n': { + $opt['h'] = 'N'; + break; + } + case 'invert': + case 'highlight.i': { + $opt['h'] = 'i'; + break; + } + case 'push': + case 'highlight.p': { + $opt['h'] = 'P'; + break; + } + case 'outline': + case 'highlight.o': { + $opt['h'] = 'O'; + break; + } + } + } + // Unsupported options: + // - calcOrderIndex: Changes the calculation order of fields in the document. + // - delay: Delays the redrawing of a field's appearance. + // - defaultStyle: This property defines the default style attributes for the form field. + // - style: Allows the user to set the glyph style of a check box or radio button. + // - textColor, textFont, textSize + return $opt; + } + + /** + * Format the page numbers. + * This method can be overriden for custom formats. + * @param $num (int) page number + * @since 4.2.005 (2008-11-06) + * @public static + */ + public static function formatPageNumber($num) { + return number_format((float)$num, 0, '', '.'); + } + + /** + * Format the page numbers on the Table Of Content. + * This method can be overriden for custom formats. + * @param $num (int) page number + * @since 4.5.001 (2009-01-04) + * @see addTOC(), addHTMLTOC() + * @public static + */ + public static function formatTOCPageNumber($num) { + return number_format((float)$num, 0, '', '.'); + } + + /** + * Extracts the CSS properties from a CSS string. + * @param $cssdata (string) string containing CSS definitions. + * @return An array where the keys are the CSS selectors and the values are the CSS properties. + * @author Nicola Asuni + * @since 5.1.000 (2010-05-25) + * @public static + */ + public static function extractCSSproperties($cssdata) { + if (empty($cssdata)) { + return array(); + } + // remove comments + $cssdata = preg_replace('/\/\*[^\*]*\*\//', '', $cssdata); + // remove newlines and multiple spaces + $cssdata = preg_replace('/[\s]+/', ' ', $cssdata); + // remove some spaces + $cssdata = preg_replace('/[\s]*([;:\{\}]{1})[\s]*/', '\\1', $cssdata); + // remove empty blocks + $cssdata = preg_replace('/([^\}\{]+)\{\}/', '', $cssdata); + // replace media type parenthesis + $cssdata = preg_replace('/@media[\s]+([^\{]*)\{/i', '@media \\1§', $cssdata); + $cssdata = preg_replace('/\}\}/si', '}§', $cssdata); + // trim string + $cssdata = trim($cssdata); + // find media blocks (all, braille, embossed, handheld, print, projection, screen, speech, tty, tv) + $cssblocks = array(); + $matches = array(); + if (preg_match_all('/@media[\s]+([^\§]*)§([^§]*)§/i', $cssdata, $matches) > 0) { + foreach ($matches[1] as $key => $type) { + $cssblocks[$type] = $matches[2][$key]; + } + // remove media blocks + $cssdata = preg_replace('/@media[\s]+([^\§]*)§([^§]*)§/i', '', $cssdata); + } + // keep 'all' and 'print' media, other media types are discarded + if (isset($cssblocks['all']) AND !empty($cssblocks['all'])) { + $cssdata .= $cssblocks['all']; + } + if (isset($cssblocks['print']) AND !empty($cssblocks['print'])) { + $cssdata .= $cssblocks['print']; + } + // reset css blocks array + $cssblocks = array(); + $matches = array(); + // explode css data string into array + if (substr($cssdata, -1) == '}') { + // remove last parethesis + $cssdata = substr($cssdata, 0, -1); + } + $matches = explode('}', $cssdata); + foreach ($matches as $key => $block) { + // index 0 contains the CSS selector, index 1 contains CSS properties + $cssblocks[$key] = explode('{', $block); + if (!isset($cssblocks[$key][1])) { + // remove empty definitions + unset($cssblocks[$key]); + } + } + // split groups of selectors (comma-separated list of selectors) + foreach ($cssblocks as $key => $block) { + if (strpos($block[0], ',') > 0) { + $selectors = explode(',', $block[0]); + foreach ($selectors as $sel) { + $cssblocks[] = array(0 => trim($sel), 1 => $block[1]); + } + unset($cssblocks[$key]); + } + } + // covert array to selector => properties + $cssdata = array(); + foreach ($cssblocks as $block) { + $selector = $block[0]; + // calculate selector's specificity + $matches = array(); + $a = 0; // the declaration is not from is a 'style' attribute + $b = intval(preg_match_all('/[\#]/', $selector, $matches)); // number of ID attributes + $c = intval(preg_match_all('/[\[\.]/', $selector, $matches)); // number of other attributes + $c += intval(preg_match_all('/[\:]link|visited|hover|active|focus|target|lang|enabled|disabled|checked|indeterminate|root|nth|first|last|only|empty|contains|not/i', $selector, $matches)); // number of pseudo-classes + $d = intval(preg_match_all('/[\>\+\~\s]{1}[a-zA-Z0-9]+/', ' '.$selector, $matches)); // number of element names + $d += intval(preg_match_all('/[\:][\:]/', $selector, $matches)); // number of pseudo-elements + $specificity = $a.$b.$c.$d; + // add specificity to the beginning of the selector + $cssdata[$specificity.' '.$selector] = $block[1]; + } + // sort selectors alphabetically to account for specificity + ksort($cssdata, SORT_STRING); + // return array + return $cssdata; + } + + /** + * Cleanup HTML code (requires HTML Tidy library). + * @param $html (string) htmlcode to fix + * @param $default_css (string) CSS commands to add + * @param $tagvs (array) parameters for setHtmlVSpace method + * @param $tidy_options (array) options for tidy_parse_string function + * @param $tagvspaces (array) Array of vertical spaces for tags. + * @return string XHTML code cleaned up + * @author Nicola Asuni + * @since 5.9.017 (2010-11-16) + * @see setHtmlVSpace() + * @public static + */ + public static function fixHTMLCode($html, $default_css='', $tagvs='', $tidy_options='', &$tagvspaces) { + // configure parameters for HTML Tidy + if ($tidy_options === '') { + $tidy_options = array ( + 'clean' => 1, + 'drop-empty-paras' => 0, + 'drop-proprietary-attributes' => 1, + 'fix-backslash' => 1, + 'hide-comments' => 1, + 'join-styles' => 1, + 'lower-literals' => 1, + 'merge-divs' => 1, + 'merge-spans' => 1, + 'output-xhtml' => 1, + 'word-2000' => 1, + 'wrap' => 0, + 'output-bom' => 0, + //'char-encoding' => 'utf8', + //'input-encoding' => 'utf8', + //'output-encoding' => 'utf8' + ); + } + // clean up the HTML code + $tidy = tidy_parse_string($html, $tidy_options); + // fix the HTML + $tidy->cleanRepair(); + // get the CSS part + $tidy_head = tidy_get_head($tidy); + $css = $tidy_head->value; + $css = preg_replace('/<style([^>]+)>/ims', '<style>', $css); + $css = preg_replace('/<\/style>(.*)<style>/ims', "\n", $css); + $css = str_replace('/*<![CDATA[*/', '', $css); + $css = str_replace('/*]]>*/', '', $css); + preg_match('/<style>(.*)<\/style>/ims', $css, $matches); + if (isset($matches[1])) { + $css = strtolower($matches[1]); + } else { + $css = ''; + } + // include default css + $css = '<style>'.$default_css.$css.'</style>'; + // get the body part + $tidy_body = tidy_get_body($tidy); + $html = $tidy_body->value; + // fix some self-closing tags + $html = str_replace('<br>', '<br />', $html); + // remove some empty tag blocks + $html = preg_replace('/<div([^\>]*)><\/div>/', '', $html); + $html = preg_replace('/<p([^\>]*)><\/p>/', '', $html); + if ($tagvs !== '') { + // set vertical space for some XHTML tags + $tagvspaces = $tagvs; + } + // return the cleaned XHTML code + CSS + return $css.$html; + } + + /** + * Returns true if the CSS selector is valid for the selected HTML tag + * @param $dom (array) array of HTML tags and properties + * @param $key (int) key of the current HTML tag + * @param $selector (string) CSS selector string + * @return true if the selector is valid, false otherwise + * @since 5.1.000 (2010-05-25) + * @public static + */ + public static function isValidCSSSelectorForTag($dom, $key, $selector) { + $valid = false; // value to be returned + $tag = $dom[$key]['value']; + $class = array(); + if (isset($dom[$key]['attribute']['class']) AND !empty($dom[$key]['attribute']['class'])) { + $class = explode(' ', strtolower($dom[$key]['attribute']['class'])); + } + $id = ''; + if (isset($dom[$key]['attribute']['id']) AND !empty($dom[$key]['attribute']['id'])) { + $id = strtolower($dom[$key]['attribute']['id']); + } + $selector = preg_replace('/([\>\+\~\s]{1})([\.]{1})([^\>\+\~\s]*)/si', '\\1*.\\3', $selector); + $matches = array(); + if (preg_match_all('/([\>\+\~\s]{1})([a-zA-Z0-9\*]+)([^\>\+\~\s]*)/si', $selector, $matches, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE) > 0) { + $parentop = array_pop($matches[1]); + $operator = $parentop[0]; + $offset = $parentop[1]; + $lasttag = array_pop($matches[2]); + $lasttag = strtolower(trim($lasttag[0])); + if (($lasttag == '*') OR ($lasttag == $tag)) { + // the last element on selector is our tag or 'any tag' + $attrib = array_pop($matches[3]); + $attrib = strtolower(trim($attrib[0])); + if (!empty($attrib)) { + // check if matches class, id, attribute, pseudo-class or pseudo-element + switch ($attrib[0]) { + case '.': { // class + if (in_array(substr($attrib, 1), $class)) { + $valid = true; + } + break; + } + case '#': { // ID + if (substr($attrib, 1) == $id) { + $valid = true; + } + break; + } + case '[': { // attribute + $attrmatch = array(); + if (preg_match('/\[([a-zA-Z0-9]*)[\s]*([\~\^\$\*\|\=]*)[\s]*["]?([^"\]]*)["]?\]/i', $attrib, $attrmatch) > 0) { + $att = strtolower($attrmatch[1]); + $val = $attrmatch[3]; + if (isset($dom[$key]['attribute'][$att])) { + switch ($attrmatch[2]) { + case '=': { + if ($dom[$key]['attribute'][$att] == $val) { + $valid = true; + } + break; + } + case '~=': { + if (in_array($val, explode(' ', $dom[$key]['attribute'][$att]))) { + $valid = true; + } + break; + } + case '^=': { + if ($val == substr($dom[$key]['attribute'][$att], 0, strlen($val))) { + $valid = true; + } + break; + } + case '$=': { + if ($val == substr($dom[$key]['attribute'][$att], -strlen($val))) { + $valid = true; + } + break; + } + case '*=': { + if (strpos($dom[$key]['attribute'][$att], $val) !== false) { + $valid = true; + } + break; + } + case '|=': { + if ($dom[$key]['attribute'][$att] == $val) { + $valid = true; + } elseif (preg_match('/'.$val.'[\-]{1}/i', $dom[$key]['attribute'][$att]) > 0) { + $valid = true; + } + break; + } + default: { + $valid = true; + } + } + } + } + break; + } + case ':': { // pseudo-class or pseudo-element + if ($attrib[1] == ':') { // pseudo-element + // pseudo-elements are not supported! + // (::first-line, ::first-letter, ::before, ::after) + } else { // pseudo-class + // pseudo-classes are not supported! + // (:root, :nth-child(n), :nth-last-child(n), :nth-of-type(n), :nth-last-of-type(n), :first-child, :last-child, :first-of-type, :last-of-type, :only-child, :only-of-type, :empty, :link, :visited, :active, :hover, :focus, :target, :lang(fr), :enabled, :disabled, :checked) + } + break; + } + } // end of switch + } else { + $valid = true; + } + if ($valid AND ($offset > 0)) { + $valid = false; + // check remaining selector part + $selector = substr($selector, 0, $offset); + switch ($operator) { + case ' ': { // descendant of an element + while ($dom[$key]['parent'] > 0) { + if (self::isValidCSSSelectorForTag($dom, $dom[$key]['parent'], $selector)) { + $valid = true; + break; + } else { + $key = $dom[$key]['parent']; + } + } + break; + } + case '>': { // child of an element + $valid = self::isValidCSSSelectorForTag($dom, $dom[$key]['parent'], $selector); + break; + } + case '+': { // immediately preceded by an element + for ($i = ($key - 1); $i > $dom[$key]['parent']; --$i) { + if ($dom[$i]['tag'] AND $dom[$i]['opening']) { + $valid = self::isValidCSSSelectorForTag($dom, $i, $selector); + break; + } + } + break; + } + case '~': { // preceded by an element + for ($i = ($key - 1); $i > $dom[$key]['parent']; --$i) { + if ($dom[$i]['tag'] AND $dom[$i]['opening']) { + if (self::isValidCSSSelectorForTag($dom, $i, $selector)) { + break; + } + } + } + break; + } + } + } + } + } + return $valid; + } + + /** + * Returns the styles array that apply for the selected HTML tag. + * @param $dom (array) array of HTML tags and properties + * @param $key (int) key of the current HTML tag + * @param $css (array) array of CSS properties + * @return array containing CSS properties + * @since 5.1.000 (2010-05-25) + * @public static + */ + public static function getCSSdataArray($dom, $key, $css) { + $cssarray = array(); // style to be returned + // get parent CSS selectors + $selectors = array(); + if (isset($dom[($dom[$key]['parent'])]['csssel'])) { + $selectors = $dom[($dom[$key]['parent'])]['csssel']; + } + // get all styles that apply + foreach($css as $selector => $style) { + $pos = strpos($selector, ' '); + // get specificity + $specificity = substr($selector, 0, $pos); + // remove specificity + $selector = substr($selector, $pos); + // check if this selector apply to current tag + if (self::isValidCSSSelectorForTag($dom, $key, $selector)) { + if (!in_array($selector, $selectors)) { + // add style if not already added on parent selector + $cssarray[] = array('k' => $selector, 's' => $specificity, 'c' => $style); + $selectors[] = $selector; + } + } + } + if (isset($dom[$key]['attribute']['style'])) { + // attach inline style (latest properties have high priority) + $cssarray[] = array('k' => '', 's' => '1000', 'c' => $dom[$key]['attribute']['style']); + } + // order the css array to account for specificity + $cssordered = array(); + foreach ($cssarray as $key => $val) { + $skey = sprintf('%04d', $key); + $cssordered[$val['s'].'_'.$skey] = $val; + } + // sort selectors alphabetically to account for specificity + ksort($cssordered, SORT_STRING); + return array($selectors, $cssordered); + } + + /** + * Compact CSS data array into single string. + * @param $css (array) array of CSS properties + * @return string containing merged CSS properties + * @since 5.9.070 (2011-04-19) + * @public static + */ + public static function getTagStyleFromCSSarray($css) { + $tagstyle = ''; // value to be returned + foreach ($css as $style) { + // split single css commands + $csscmds = explode(';', $style['c']); + foreach ($csscmds as $cmd) { + if (!empty($cmd)) { + $pos = strpos($cmd, ':'); + if ($pos !== false) { + $cmd = substr($cmd, 0, ($pos + 1)); + if (strpos($tagstyle, $cmd) !== false) { + // remove duplicate commands (last commands have high priority) + $tagstyle = preg_replace('/'.$cmd.'[^;]+/i', '', $tagstyle); + } + } + } + } + $tagstyle .= ';'.$style['c']; + } + // remove multiple semicolons + $tagstyle = preg_replace('/[;]+/', ';', $tagstyle); + return $tagstyle; + } + + /** + * Returns the Roman representation of an integer number + * @param $number (int) number to convert + * @return string roman representation of the specified number + * @since 4.4.004 (2008-12-10) + * @public static + */ + public static function intToRoman($number) { + $roman = ''; + while ($number >= 1000) { + $roman .= 'M'; + $number -= 1000; + } + while ($number >= 900) { + $roman .= 'CM'; + $number -= 900; + } + while ($number >= 500) { + $roman .= 'D'; + $number -= 500; + } + while ($number >= 400) { + $roman .= 'CD'; + $number -= 400; + } + while ($number >= 100) { + $roman .= 'C'; + $number -= 100; + } + while ($number >= 90) { + $roman .= 'XC'; + $number -= 90; + } + while ($number >= 50) { + $roman .= 'L'; + $number -= 50; + } + while ($number >= 40) { + $roman .= 'XL'; + $number -= 40; + } + while ($number >= 10) { + $roman .= 'X'; + $number -= 10; + } + while ($number >= 9) { + $roman .= 'IX'; + $number -= 9; + } + while ($number >= 5) { + $roman .= 'V'; + $number -= 5; + } + while ($number >= 4) { + $roman .= 'IV'; + $number -= 4; + } + while ($number >= 1) { + $roman .= 'I'; + --$number; + } + return $roman; + } + + /** + * Find position of last occurrence of a substring in a string + * @param $haystack (string) The string to search in. + * @param $needle (string) substring to search. + * @param $offset (int) May be specified to begin searching an arbitrary number of characters into the string. + * @return Returns the position where the needle exists. Returns FALSE if the needle was not found. + * @since 4.8.038 (2010-03-13) + * @public static + */ + public static function revstrpos($haystack, $needle, $offset = 0) { + $length = strlen($haystack); + $offset = ($offset > 0)?($length - $offset):abs($offset); + $pos = strpos(strrev($haystack), strrev($needle), $offset); + return ($pos === false)?false:($length - $pos - strlen($needle)); + } + + /** + * Returns an array of hyphenation patterns. + * @param $file (string) TEX file containing hypenation patterns. TEX pattrns can be downloaded from http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ + * @return array of hyphenation patterns + * @author Nicola Asuni + * @since 4.9.012 (2010-04-12) + * @public static + */ + public static function getHyphenPatternsFromTEX($file) { + // TEX patterns are available at: + // http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ + $data = file_get_contents($file); + $patterns = array(); + // remove comments + $data = preg_replace('/\%[^\n]*/', '', $data); + // extract the patterns part + preg_match('/\\\\patterns\{([^\}]*)\}/i', $data, $matches); + $data = trim(substr($matches[0], 10, -1)); + // extract each pattern + $patterns_array = preg_split('/[\s]+/', $data); + // create new language array of patterns + $patterns = array(); + foreach($patterns_array as $val) { + if (!TCPDF_STATIC::empty_string($val)) { + $val = trim($val); + $val = str_replace('\'', '\\\'', $val); + $key = preg_replace('/[0-9]+/', '', $val); + $patterns[$key] = $val; + } + } + return $patterns; + } + + /** + * Get the Path-Painting Operators. + * @param $style (string) Style of rendering. Possible values are: + * <ul> + * <li>S or D: Stroke the path.</li> + * <li>s or d: Close and stroke the path.</li> + * <li>f or F: Fill the path, using the nonzero winding number rule to determine the region to fill.</li> + * <li>f* or F*: Fill the path, using the even-odd rule to determine the region to fill.</li> + * <li>B or FD or DF: Fill and then stroke the path, using the nonzero winding number rule to determine the region to fill.</li> + * <li>B* or F*D or DF*: Fill and then stroke the path, using the even-odd rule to determine the region to fill.</li> + * <li>b or fd or df: Close, fill, and then stroke the path, using the nonzero winding number rule to determine the region to fill.</li> + * <li>b or f*d or df*: Close, fill, and then stroke the path, using the even-odd rule to determine the region to fill.</li> + * <li>CNZ: Clipping mode using the even-odd rule to determine which regions lie inside the clipping path.</li> + * <li>CEO: Clipping mode using the nonzero winding number rule to determine which regions lie inside the clipping path</li> + * <li>n: End the path object without filling or stroking it.</li> + * </ul> + * @param $default (string) default style + * @author Nicola Asuni + * @since 5.0.000 (2010-04-30) + * @public static + */ + public static function getPathPaintOperator($style, $default='S') { + $op = ''; + switch($style) { + case 'S': + case 'D': { + $op = 'S'; + break; + } + case 's': + case 'd': { + $op = 's'; + break; + } + case 'f': + case 'F': { + $op = 'f'; + break; + } + case 'f*': + case 'F*': { + $op = 'f*'; + break; + } + case 'B': + case 'FD': + case 'DF': { + $op = 'B'; + break; + } + case 'B*': + case 'F*D': + case 'DF*': { + $op = 'B*'; + break; + } + case 'b': + case 'fd': + case 'df': { + $op = 'b'; + break; + } + case 'b*': + case 'f*d': + case 'df*': { + $op = 'b*'; + break; + } + case 'CNZ': { + $op = 'W n'; + break; + } + case 'CEO': { + $op = 'W* n'; + break; + } + case 'n': { + $op = 'n'; + break; + } + default: { + if (!empty($default)) { + $op = self::getPathPaintOperator($default, ''); + } else { + $op = ''; + } + } + } + return $op; + } + + /** + * Get the product of two SVG tranformation matrices + * @param $ta (array) first SVG tranformation matrix + * @param $tb (array) second SVG tranformation matrix + * @return transformation array + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @public static + */ + public static function getTransformationMatrixProduct($ta, $tb) { + $tm = array(); + $tm[0] = ($ta[0] * $tb[0]) + ($ta[2] * $tb[1]); + $tm[1] = ($ta[1] * $tb[0]) + ($ta[3] * $tb[1]); + $tm[2] = ($ta[0] * $tb[2]) + ($ta[2] * $tb[3]); + $tm[3] = ($ta[1] * $tb[2]) + ($ta[3] * $tb[3]); + $tm[4] = ($ta[0] * $tb[4]) + ($ta[2] * $tb[5]) + $ta[4]; + $tm[5] = ($ta[1] * $tb[4]) + ($ta[3] * $tb[5]) + $ta[5]; + return $tm; + } + + /** + * Get the tranformation matrix from SVG transform attribute + * @param $attribute (string) transformation + * @return array of transformations + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @public static + */ + public static function getSVGTransformMatrix($attribute) { + // identity matrix + $tm = array(1, 0, 0, 1, 0, 0); + $transform = array(); + if (preg_match_all('/(matrix|translate|scale|rotate|skewX|skewY)[\s]*\(([^\)]+)\)/si', $attribute, $transform, PREG_SET_ORDER) > 0) { + foreach ($transform as $key => $data) { + if (!empty($data[2])) { + $a = 1; + $b = 0; + $c = 0; + $d = 1; + $e = 0; + $f = 0; + $regs = array(); + switch ($data[1]) { + case 'matrix': { + if (preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) { + $a = $regs[1]; + $b = $regs[2]; + $c = $regs[3]; + $d = $regs[4]; + $e = $regs[5]; + $f = $regs[6]; + } + break; + } + case 'translate': { + if (preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) { + $e = $regs[1]; + $f = $regs[2]; + } elseif (preg_match('/([a-z0-9\-\.]+)/si', $data[2], $regs)) { + $e = $regs[1]; + } + break; + } + case 'scale': { + if (preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) { + $a = $regs[1]; + $d = $regs[2]; + } elseif (preg_match('/([a-z0-9\-\.]+)/si', $data[2], $regs)) { + $a = $regs[1]; + $d = $a; + } + break; + } + case 'rotate': { + if (preg_match('/([0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si', $data[2], $regs)) { + $ang = deg2rad($regs[1]); + $x = $regs[2]; + $y = $regs[3]; + $a = cos($ang); + $b = sin($ang); + $c = -$b; + $d = $a; + $e = ($x * (1 - $a)) - ($y * $c); + $f = ($y * (1 - $d)) - ($x * $b); + } elseif (preg_match('/([0-9\-\.]+)/si', $data[2], $regs)) { + $ang = deg2rad($regs[1]); + $a = cos($ang); + $b = sin($ang); + $c = -$b; + $d = $a; + $e = 0; + $f = 0; + } + break; + } + case 'skewX': { + if (preg_match('/([0-9\-\.]+)/si', $data[2], $regs)) { + $c = tan(deg2rad($regs[1])); + } + break; + } + case 'skewY': { + if (preg_match('/([0-9\-\.]+)/si', $data[2], $regs)) { + $b = tan(deg2rad($regs[1])); + } + break; + } + } + $tm = self::getTransformationMatrixProduct($tm, array($a, $b, $c, $d, $e, $f)); + } + } + } + return $tm; + } + + /** + * Returns the angle in radiants between two vectors + * @param $x1 (int) X coordinate of first vector point + * @param $y1 (int) Y coordinate of first vector point + * @param $x2 (int) X coordinate of second vector point + * @param $y2 (int) Y coordinate of second vector point + * @author Nicola Asuni + * @since 5.0.000 (2010-05-04) + * @public static + */ + public static function getVectorsAngle($x1, $y1, $x2, $y2) { + $dprod = ($x1 * $x2) + ($y1 * $y2); + $dist1 = sqrt(($x1 * $x1) + ($y1 * $y1)); + $dist2 = sqrt(($x2 * $x2) + ($y2 * $y2)); + $angle = acos($dprod / ($dist1 * $dist2)); + if (is_nan($angle)) { + $angle = M_PI; + } + if ((($x1 * $y2) - ($x2 * $y1)) < 0) { + $angle *= -1; + } + return $angle; + } + + + + + + + + + + + + + + + + + +// ==================================================================================================================== +// REIMPLEMENTED +// ==================================================================================================================== + + + + + + + + + + + + + + + /** + * Split string by a regular expression. + * This is a wrapper for the preg_split function to avoid the bug: https://bugs.php.net/bug.php?id=45850 + * @param $pattern (string) The regular expression pattern to search for without the modifiers, as a string. + * @param $modifiers (string) The modifiers part of the pattern, + * @param $subject (string) The input string. + * @param $limit (int) If specified, then only substrings up to limit are returned with the rest of the string being placed in the last substring. A limit of -1, 0 or NULL means "no limit" and, as is standard across PHP, you can use NULL to skip to the flags parameter. + * @param $flags (int) The flags as specified on the preg_split PHP function. + * @return Returns an array containing substrings of subject split along boundaries matched by pattern.modifier + * @author Nicola Asuni + * @since 6.0.023 + * @public static + */ + public static function pregSplit($pattern, $modifiers, $subject, $limit=NULL, $flags=NULL) { + // the bug only happens on PHP 5.2 when using the u modifier + if ((strpos($modifiers, 'u') === FALSE) OR (count(preg_split('//u', "\n\t", -1, PREG_SPLIT_NO_EMPTY)) == 2)) { + return preg_split($pattern.$modifiers, $subject, $limit, $flags); + } + // preg_split is bugged - try alternative solution + $ret = array(); + while (($nl = strpos($subject, "\n")) !== FALSE) { + $ret = array_merge($ret, preg_split($pattern.$modifiers, substr($subject, 0, $nl), $limit, $flags)); + $ret[] = "\n"; + $subject = substr($subject, ($nl + 1)); + } + if (strlen($subject) > 0) { + $ret = array_merge($ret, preg_split($pattern.$modifiers, $subject, $limit, $flags)); + } + return $ret; + } + + /** + * Wrapper to use fopen only with local files + * @param filename (string) Name of the file to open + * @param $mode (string) + * @return Returns a file pointer resource on success, or FALSE on error. + * @public static + */ + public static function fopenLocal($filename, $mode) { + if (strpos($filename, '://') === false) { + $filename = 'file://'.$filename; + } elseif (stream_is_local($filename) !== true) { + return false; + } + return fopen($filename, $mode); + } + + /** + * Reads entire file into a string. + * The file can be also an URL. + * @param $file (string) Name of the file or URL to read. + * @return The function returns the read data or FALSE on failure. + * @author Nicola Asuni + * @since 6.0.025 + * @public static + */ + public static function fileGetContents($file) { + $alt = array($file); + // + if ((strlen($file) > 1) + && ($file[0] === '/') + && ($file[1] !== '/') + && !empty($_SERVER['DOCUMENT_ROOT']) + && ($_SERVER['DOCUMENT_ROOT'] !== '/') + ) { + $findroot = strpos($file, $_SERVER['DOCUMENT_ROOT']); + if (($findroot === false) || ($findroot > 1)) { + $alt[] = htmlspecialchars_decode(urldecode($_SERVER['DOCUMENT_ROOT'].$file)); + } + } + // + $protocol = 'http'; + if (!empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) { + $protocol .= 's'; + } + // + $url = $file; + if (preg_match('%^//%', $url) && !empty($_SERVER['HTTP_HOST'])) { + $url = $protocol.':'.str_replace(' ', '%20', $url); + } + $url = htmlspecialchars_decode($url); + $alt[] = $url; + // + if (preg_match('%^(https?)://%', $url) + && empty($_SERVER['HTTP_HOST']) + && empty($_SERVER['DOCUMENT_ROOT']) + ) { + $urldata = parse_url($url); + if (empty($urldata['query'])) { + $host = $protocol.'://'.$_SERVER['HTTP_HOST']; + if (strpos($url, $host) === 0) { + // convert URL to full server path + $tmp = str_replace($host, $_SERVER['DOCUMENT_ROOT'], $url); + $alt[] = htmlspecialchars_decode(urldecode($tmp)); + } + } + } + // + if (isset($_SERVER['SCRIPT_URI']) + && !preg_match('%^(https?|ftp)://%', $file) + && !preg_match('%^//%', $file) + ) { + $urldata = @parse_url($_SERVER['SCRIPT_URI']); + return $urldata['scheme'].'://'.$urldata['host'].(($file[0] == '/') ? '' : '/').$file; + } + // + $alt = array_unique($alt); + //var_dump($alt);exit;//DEBUG + foreach ($alt as $path) { + $ret = @file_get_contents($path); + if ($ret !== false) { + return $ret; + } + // try to use CURL for URLs + if (!ini_get('allow_url_fopen') + && function_exists('curl_init') + && preg_match('%^(https?|ftp)://%', $path) + ) { + // try to get remote file data using cURL + $crs = curl_init(); + curl_setopt($crs, CURLOPT_URL, $path); + curl_setopt($crs, CURLOPT_BINARYTRANSFER, true); + curl_setopt($crs, CURLOPT_FAILONERROR, true); + curl_setopt($crs, CURLOPT_RETURNTRANSFER, true); + if ((ini_get('open_basedir') == '') && (!ini_get('safe_mode'))) { + curl_setopt($crs, CURLOPT_FOLLOWLOCATION, true); + } + curl_setopt($crs, CURLOPT_CONNECTTIMEOUT, 5); + curl_setopt($crs, CURLOPT_TIMEOUT, 30); + curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file'); + $ret = curl_exec($crs); + curl_close($crs); + if ($ret !== false) { + return $ret; + } + } + } + return false; + } + + + + /** + * Get ULONG from string (Big Endian 32-bit unsigned integer). + * @param $str (string) string from where to extract value + * @param $offset (int) point from where to read the data + * @return int 32 bit value + * @author Nicola Asuni + * @since 5.2.000 (2010-06-02) + * @public static + */ + public static function _getULONG($str, $offset) { + $v = unpack('Ni', substr($str, $offset, 4)); + return $v['i']; + } + + /** + * Get USHORT from string (Big Endian 16-bit unsigned integer). + * @param $str (string) string from where to extract value + * @param $offset (int) point from where to read the data + * @return int 16 bit value + * @author Nicola Asuni + * @since 5.2.000 (2010-06-02) + * @public static + */ + public static function _getUSHORT($str, $offset) { + $v = unpack('ni', substr($str, $offset, 2)); + return $v['i']; + } + + /** + * Get SHORT from string (Big Endian 16-bit signed integer). + * @param $str (string) String from where to extract value. + * @param $offset (int) Point from where to read the data. + * @return int 16 bit value + * @author Nicola Asuni + * @since 5.2.000 (2010-06-02) + * @public static + */ + public static function _getSHORT($str, $offset) { + $v = unpack('si', substr($str, $offset, 2)); + return $v['i']; + } + + /** + * Get FWORD from string (Big Endian 16-bit signed integer). + * @param $str (string) String from where to extract value. + * @param $offset (int) Point from where to read the data. + * @return int 16 bit value + * @author Nicola Asuni + * @since 5.9.123 (2011-09-30) + * @public static + */ + public static function _getFWORD($str, $offset) { + $v = self::_getUSHORT($str, $offset); + if ($v > 0x7fff) { + $v -= 0x10000; + } + return $v; + } + + /** + * Get UFWORD from string (Big Endian 16-bit unsigned integer). + * @param $str (string) string from where to extract value + * @param $offset (int) point from where to read the data + * @return int 16 bit value + * @author Nicola Asuni + * @since 5.9.123 (2011-09-30) + * @public static + */ + public static function _getUFWORD($str, $offset) { + $v = self::_getUSHORT($str, $offset); + return $v; + } + + /** + * Get FIXED from string (32-bit signed fixed-point number (16.16). + * @param $str (string) string from where to extract value + * @param $offset (int) point from where to read the data + * @return int 16 bit value + * @author Nicola Asuni + * @since 5.9.123 (2011-09-30) + * @public static + */ + public static function _getFIXED($str, $offset) { + // mantissa + $m = self::_getFWORD($str, $offset); + // fraction + $f = self::_getUSHORT($str, ($offset + 2)); + $v = floatval(''.$m.'.'.$f.''); + return $v; + } + + /** + * Get BYTE from string (8-bit unsigned integer). + * @param $str (string) String from where to extract value. + * @param $offset (int) Point from where to read the data. + * @return int 8 bit value + * @author Nicola Asuni + * @since 5.2.000 (2010-06-02) + * @public static + */ + public static function _getBYTE($str, $offset) { + $v = unpack('Ci', substr($str, $offset, 1)); + return $v['i']; + } + /** + * Binary-safe and URL-safe file read. + * Reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met: length bytes have been read; EOF (end of file) is reached. + * @param $handle (resource) + * @param $length (int) + * @return Returns the read string or FALSE in case of error. + * @author Nicola Asuni + * @since 4.5.027 (2009-03-16) + * @public static + */ + public static function rfread($handle, $length) { + $data = fread($handle, $length); + if ($data === false) { + return false; + } + $rest = ($length - strlen($data)); + if (($rest > 0) && !feof($handle)) { + $data .= self::rfread($handle, $rest); + } + return $data; + } + + /** + * Read a 4-byte (32 bit) integer from file. + * @param $f (string) file name. + * @return 4-byte integer + * @public static + */ + public static function _freadint($f) { + $a = unpack('Ni', fread($f, 4)); + return $a['i']; + } + + + /** + * Array of page formats + * measures are calculated in this way: (inches * 72) or (millimeters * 72 / 25.4) + * @public static + */ + public static $page_formats = array( + // ISO 216 A Series + 2 SIS 014711 extensions + 'A0' => array( 2383.937, 3370.394), // = ( 841 x 1189 ) mm = ( 33.11 x 46.81 ) in + 'A1' => array( 1683.780, 2383.937), // = ( 594 x 841 ) mm = ( 23.39 x 33.11 ) in + 'A2' => array( 1190.551, 1683.780), // = ( 420 x 594 ) mm = ( 16.54 x 23.39 ) in + 'A3' => array( 841.890, 1190.551), // = ( 297 x 420 ) mm = ( 11.69 x 16.54 ) in + 'A4' => array( 595.276, 841.890), // = ( 210 x 297 ) mm = ( 8.27 x 11.69 ) in + 'A5' => array( 419.528, 595.276), // = ( 148 x 210 ) mm = ( 5.83 x 8.27 ) in + 'A6' => array( 297.638, 419.528), // = ( 105 x 148 ) mm = ( 4.13 x 5.83 ) in + 'A7' => array( 209.764, 297.638), // = ( 74 x 105 ) mm = ( 2.91 x 4.13 ) in + 'A8' => array( 147.402, 209.764), // = ( 52 x 74 ) mm = ( 2.05 x 2.91 ) in + 'A9' => array( 104.882, 147.402), // = ( 37 x 52 ) mm = ( 1.46 x 2.05 ) in + 'A10' => array( 73.701, 104.882), // = ( 26 x 37 ) mm = ( 1.02 x 1.46 ) in + 'A11' => array( 51.024, 73.701), // = ( 18 x 26 ) mm = ( 0.71 x 1.02 ) in + 'A12' => array( 36.850, 51.024), // = ( 13 x 18 ) mm = ( 0.51 x 0.71 ) in + // ISO 216 B Series + 2 SIS 014711 extensions + 'B0' => array( 2834.646, 4008.189), // = ( 1000 x 1414 ) mm = ( 39.37 x 55.67 ) in + 'B1' => array( 2004.094, 2834.646), // = ( 707 x 1000 ) mm = ( 27.83 x 39.37 ) in + 'B2' => array( 1417.323, 2004.094), // = ( 500 x 707 ) mm = ( 19.69 x 27.83 ) in + 'B3' => array( 1000.630, 1417.323), // = ( 353 x 500 ) mm = ( 13.90 x 19.69 ) in + 'B4' => array( 708.661, 1000.630), // = ( 250 x 353 ) mm = ( 9.84 x 13.90 ) in + 'B5' => array( 498.898, 708.661), // = ( 176 x 250 ) mm = ( 6.93 x 9.84 ) in + 'B6' => array( 354.331, 498.898), // = ( 125 x 176 ) mm = ( 4.92 x 6.93 ) in + 'B7' => array( 249.449, 354.331), // = ( 88 x 125 ) mm = ( 3.46 x 4.92 ) in + 'B8' => array( 175.748, 249.449), // = ( 62 x 88 ) mm = ( 2.44 x 3.46 ) in + 'B9' => array( 124.724, 175.748), // = ( 44 x 62 ) mm = ( 1.73 x 2.44 ) in + 'B10' => array( 87.874, 124.724), // = ( 31 x 44 ) mm = ( 1.22 x 1.73 ) in + 'B11' => array( 62.362, 87.874), // = ( 22 x 31 ) mm = ( 0.87 x 1.22 ) in + 'B12' => array( 42.520, 62.362), // = ( 15 x 22 ) mm = ( 0.59 x 0.87 ) in + // ISO 216 C Series + 2 SIS 014711 extensions + 5 EXTENSION + 'C0' => array( 2599.370, 3676.535), // = ( 917 x 1297 ) mm = ( 36.10 x 51.06 ) in + 'C1' => array( 1836.850, 2599.370), // = ( 648 x 917 ) mm = ( 25.51 x 36.10 ) in + 'C2' => array( 1298.268, 1836.850), // = ( 458 x 648 ) mm = ( 18.03 x 25.51 ) in + 'C3' => array( 918.425, 1298.268), // = ( 324 x 458 ) mm = ( 12.76 x 18.03 ) in + 'C4' => array( 649.134, 918.425), // = ( 229 x 324 ) mm = ( 9.02 x 12.76 ) in + 'C5' => array( 459.213, 649.134), // = ( 162 x 229 ) mm = ( 6.38 x 9.02 ) in + 'C6' => array( 323.150, 459.213), // = ( 114 x 162 ) mm = ( 4.49 x 6.38 ) in + 'C7' => array( 229.606, 323.150), // = ( 81 x 114 ) mm = ( 3.19 x 4.49 ) in + 'C8' => array( 161.575, 229.606), // = ( 57 x 81 ) mm = ( 2.24 x 3.19 ) in + 'C9' => array( 113.386, 161.575), // = ( 40 x 57 ) mm = ( 1.57 x 2.24 ) in + 'C10' => array( 79.370, 113.386), // = ( 28 x 40 ) mm = ( 1.10 x 1.57 ) in + 'C11' => array( 56.693, 79.370), // = ( 20 x 28 ) mm = ( 0.79 x 1.10 ) in + 'C12' => array( 39.685, 56.693), // = ( 14 x 20 ) mm = ( 0.55 x 0.79 ) in + 'C76' => array( 229.606, 459.213), // = ( 81 x 162 ) mm = ( 3.19 x 6.38 ) in + 'DL' => array( 311.811, 623.622), // = ( 110 x 220 ) mm = ( 4.33 x 8.66 ) in + 'DLE' => array( 323.150, 637.795), // = ( 114 x 225 ) mm = ( 4.49 x 8.86 ) in + 'DLX' => array( 340.158, 666.142), // = ( 120 x 235 ) mm = ( 4.72 x 9.25 ) in + 'DLP' => array( 280.630, 595.276), // = ( 99 x 210 ) mm = ( 3.90 x 8.27 ) in (1/3 A4) + // SIS 014711 E Series + 'E0' => array( 2491.654, 3517.795), // = ( 879 x 1241 ) mm = ( 34.61 x 48.86 ) in + 'E1' => array( 1757.480, 2491.654), // = ( 620 x 879 ) mm = ( 24.41 x 34.61 ) in + 'E2' => array( 1247.244, 1757.480), // = ( 440 x 620 ) mm = ( 17.32 x 24.41 ) in + 'E3' => array( 878.740, 1247.244), // = ( 310 x 440 ) mm = ( 12.20 x 17.32 ) in + 'E4' => array( 623.622, 878.740), // = ( 220 x 310 ) mm = ( 8.66 x 12.20 ) in + 'E5' => array( 439.370, 623.622), // = ( 155 x 220 ) mm = ( 6.10 x 8.66 ) in + 'E6' => array( 311.811, 439.370), // = ( 110 x 155 ) mm = ( 4.33 x 6.10 ) in + 'E7' => array( 221.102, 311.811), // = ( 78 x 110 ) mm = ( 3.07 x 4.33 ) in + 'E8' => array( 155.906, 221.102), // = ( 55 x 78 ) mm = ( 2.17 x 3.07 ) in + 'E9' => array( 110.551, 155.906), // = ( 39 x 55 ) mm = ( 1.54 x 2.17 ) in + 'E10' => array( 76.535, 110.551), // = ( 27 x 39 ) mm = ( 1.06 x 1.54 ) in + 'E11' => array( 53.858, 76.535), // = ( 19 x 27 ) mm = ( 0.75 x 1.06 ) in + 'E12' => array( 36.850, 53.858), // = ( 13 x 19 ) mm = ( 0.51 x 0.75 ) in + // SIS 014711 G Series + 'G0' => array( 2715.591, 3838.110), // = ( 958 x 1354 ) mm = ( 37.72 x 53.31 ) in + 'G1' => array( 1919.055, 2715.591), // = ( 677 x 958 ) mm = ( 26.65 x 37.72 ) in + 'G2' => array( 1357.795, 1919.055), // = ( 479 x 677 ) mm = ( 18.86 x 26.65 ) in + 'G3' => array( 958.110, 1357.795), // = ( 338 x 479 ) mm = ( 13.31 x 18.86 ) in + 'G4' => array( 677.480, 958.110), // = ( 239 x 338 ) mm = ( 9.41 x 13.31 ) in + 'G5' => array( 479.055, 677.480), // = ( 169 x 239 ) mm = ( 6.65 x 9.41 ) in + 'G6' => array( 337.323, 479.055), // = ( 119 x 169 ) mm = ( 4.69 x 6.65 ) in + 'G7' => array( 238.110, 337.323), // = ( 84 x 119 ) mm = ( 3.31 x 4.69 ) in + 'G8' => array( 167.244, 238.110), // = ( 59 x 84 ) mm = ( 2.32 x 3.31 ) in + 'G9' => array( 119.055, 167.244), // = ( 42 x 59 ) mm = ( 1.65 x 2.32 ) in + 'G10' => array( 82.205, 119.055), // = ( 29 x 42 ) mm = ( 1.14 x 1.65 ) in + 'G11' => array( 59.528, 82.205), // = ( 21 x 29 ) mm = ( 0.83 x 1.14 ) in + 'G12' => array( 39.685, 59.528), // = ( 14 x 21 ) mm = ( 0.55 x 0.83 ) in + // ISO Press + 'RA0' => array( 2437.795, 3458.268), // = ( 860 x 1220 ) mm = ( 33.86 x 48.03 ) in + 'RA1' => array( 1729.134, 2437.795), // = ( 610 x 860 ) mm = ( 24.02 x 33.86 ) in + 'RA2' => array( 1218.898, 1729.134), // = ( 430 x 610 ) mm = ( 16.93 x 24.02 ) in + 'RA3' => array( 864.567, 1218.898), // = ( 305 x 430 ) mm = ( 12.01 x 16.93 ) in + 'RA4' => array( 609.449, 864.567), // = ( 215 x 305 ) mm = ( 8.46 x 12.01 ) in + 'SRA0' => array( 2551.181, 3628.346), // = ( 900 x 1280 ) mm = ( 35.43 x 50.39 ) in + 'SRA1' => array( 1814.173, 2551.181), // = ( 640 x 900 ) mm = ( 25.20 x 35.43 ) in + 'SRA2' => array( 1275.591, 1814.173), // = ( 450 x 640 ) mm = ( 17.72 x 25.20 ) in + 'SRA3' => array( 907.087, 1275.591), // = ( 320 x 450 ) mm = ( 12.60 x 17.72 ) in + 'SRA4' => array( 637.795, 907.087), // = ( 225 x 320 ) mm = ( 8.86 x 12.60 ) in + // German DIN 476 + '4A0' => array( 4767.874, 6740.787), // = ( 1682 x 2378 ) mm = ( 66.22 x 93.62 ) in + '2A0' => array( 3370.394, 4767.874), // = ( 1189 x 1682 ) mm = ( 46.81 x 66.22 ) in + // Variations on the ISO Standard + 'A2_EXTRA' => array( 1261.417, 1754.646), // = ( 445 x 619 ) mm = ( 17.52 x 24.37 ) in + 'A3+' => array( 932.598, 1369.134), // = ( 329 x 483 ) mm = ( 12.95 x 19.02 ) in + 'A3_EXTRA' => array( 912.756, 1261.417), // = ( 322 x 445 ) mm = ( 12.68 x 17.52 ) in + 'A3_SUPER' => array( 864.567, 1440.000), // = ( 305 x 508 ) mm = ( 12.01 x 20.00 ) in + 'SUPER_A3' => array( 864.567, 1380.472), // = ( 305 x 487 ) mm = ( 12.01 x 19.17 ) in + 'A4_EXTRA' => array( 666.142, 912.756), // = ( 235 x 322 ) mm = ( 9.25 x 12.68 ) in + 'A4_SUPER' => array( 649.134, 912.756), // = ( 229 x 322 ) mm = ( 9.02 x 12.68 ) in + 'SUPER_A4' => array( 643.465, 1009.134), // = ( 227 x 356 ) mm = ( 8.94 x 14.02 ) in + 'A4_LONG' => array( 595.276, 986.457), // = ( 210 x 348 ) mm = ( 8.27 x 13.70 ) in + 'F4' => array( 595.276, 935.433), // = ( 210 x 330 ) mm = ( 8.27 x 12.99 ) in + 'SO_B5_EXTRA' => array( 572.598, 782.362), // = ( 202 x 276 ) mm = ( 7.95 x 10.87 ) in + 'A5_EXTRA' => array( 490.394, 666.142), // = ( 173 x 235 ) mm = ( 6.81 x 9.25 ) in + // ANSI Series + 'ANSI_E' => array( 2448.000, 3168.000), // = ( 864 x 1118 ) mm = ( 34.00 x 44.00 ) in + 'ANSI_D' => array( 1584.000, 2448.000), // = ( 559 x 864 ) mm = ( 22.00 x 34.00 ) in + 'ANSI_C' => array( 1224.000, 1584.000), // = ( 432 x 559 ) mm = ( 17.00 x 22.00 ) in + 'ANSI_B' => array( 792.000, 1224.000), // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in + 'ANSI_A' => array( 612.000, 792.000), // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in + // Traditional 'Loose' North American Paper Sizes + 'USLEDGER' => array( 1224.000, 792.000), // = ( 432 x 279 ) mm = ( 17.00 x 11.00 ) in + 'LEDGER' => array( 1224.000, 792.000), // = ( 432 x 279 ) mm = ( 17.00 x 11.00 ) in + 'ORGANIZERK' => array( 792.000, 1224.000), // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in + 'BIBLE' => array( 792.000, 1224.000), // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in + 'USTABLOID' => array( 792.000, 1224.000), // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in + 'TABLOID' => array( 792.000, 1224.000), // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in + 'ORGANIZERM' => array( 612.000, 792.000), // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in + 'USLETTER' => array( 612.000, 792.000), // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in + 'LETTER' => array( 612.000, 792.000), // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in + 'USLEGAL' => array( 612.000, 1008.000), // = ( 216 x 356 ) mm = ( 8.50 x 14.00 ) in + 'LEGAL' => array( 612.000, 1008.000), // = ( 216 x 356 ) mm = ( 8.50 x 14.00 ) in + 'GOVERNMENTLETTER' => array( 576.000, 756.000), // = ( 203 x 267 ) mm = ( 8.00 x 10.50 ) in + 'GLETTER' => array( 576.000, 756.000), // = ( 203 x 267 ) mm = ( 8.00 x 10.50 ) in + 'JUNIORLEGAL' => array( 576.000, 360.000), // = ( 203 x 127 ) mm = ( 8.00 x 5.00 ) in + 'JLEGAL' => array( 576.000, 360.000), // = ( 203 x 127 ) mm = ( 8.00 x 5.00 ) in + // Other North American Paper Sizes + 'QUADDEMY' => array( 2520.000, 3240.000), // = ( 889 x 1143 ) mm = ( 35.00 x 45.00 ) in + 'SUPER_B' => array( 936.000, 1368.000), // = ( 330 x 483 ) mm = ( 13.00 x 19.00 ) in + 'QUARTO' => array( 648.000, 792.000), // = ( 229 x 279 ) mm = ( 9.00 x 11.00 ) in + 'GOVERNMENTLEGAL' => array( 612.000, 936.000), // = ( 216 x 330 ) mm = ( 8.50 x 13.00 ) in + 'FOLIO' => array( 612.000, 936.000), // = ( 216 x 330 ) mm = ( 8.50 x 13.00 ) in + 'MONARCH' => array( 522.000, 756.000), // = ( 184 x 267 ) mm = ( 7.25 x 10.50 ) in + 'EXECUTIVE' => array( 522.000, 756.000), // = ( 184 x 267 ) mm = ( 7.25 x 10.50 ) in + 'ORGANIZERL' => array( 396.000, 612.000), // = ( 140 x 216 ) mm = ( 5.50 x 8.50 ) in + 'STATEMENT' => array( 396.000, 612.000), // = ( 140 x 216 ) mm = ( 5.50 x 8.50 ) in + 'MEMO' => array( 396.000, 612.000), // = ( 140 x 216 ) mm = ( 5.50 x 8.50 ) in + 'FOOLSCAP' => array( 595.440, 936.000), // = ( 210 x 330 ) mm = ( 8.27 x 13.00 ) in + 'COMPACT' => array( 306.000, 486.000), // = ( 108 x 171 ) mm = ( 4.25 x 6.75 ) in + 'ORGANIZERJ' => array( 198.000, 360.000), // = ( 70 x 127 ) mm = ( 2.75 x 5.00 ) in + // Canadian standard CAN 2-9.60M + 'P1' => array( 1587.402, 2437.795), // = ( 560 x 860 ) mm = ( 22.05 x 33.86 ) in + 'P2' => array( 1218.898, 1587.402), // = ( 430 x 560 ) mm = ( 16.93 x 22.05 ) in + 'P3' => array( 793.701, 1218.898), // = ( 280 x 430 ) mm = ( 11.02 x 16.93 ) in + 'P4' => array( 609.449, 793.701), // = ( 215 x 280 ) mm = ( 8.46 x 11.02 ) in + 'P5' => array( 396.850, 609.449), // = ( 140 x 215 ) mm = ( 5.51 x 8.46 ) in + 'P6' => array( 303.307, 396.850), // = ( 107 x 140 ) mm = ( 4.21 x 5.51 ) in + // North American Architectural Sizes + 'ARCH_E' => array( 2592.000, 3456.000), // = ( 914 x 1219 ) mm = ( 36.00 x 48.00 ) in + 'ARCH_E1' => array( 2160.000, 3024.000), // = ( 762 x 1067 ) mm = ( 30.00 x 42.00 ) in + 'ARCH_D' => array( 1728.000, 2592.000), // = ( 610 x 914 ) mm = ( 24.00 x 36.00 ) in + 'BROADSHEET' => array( 1296.000, 1728.000), // = ( 457 x 610 ) mm = ( 18.00 x 24.00 ) in + 'ARCH_C' => array( 1296.000, 1728.000), // = ( 457 x 610 ) mm = ( 18.00 x 24.00 ) in + 'ARCH_B' => array( 864.000, 1296.000), // = ( 305 x 457 ) mm = ( 12.00 x 18.00 ) in + 'ARCH_A' => array( 648.000, 864.000), // = ( 229 x 305 ) mm = ( 9.00 x 12.00 ) in + // -- North American Envelope Sizes + // - Announcement Envelopes + 'ANNENV_A2' => array( 314.640, 414.000), // = ( 111 x 146 ) mm = ( 4.37 x 5.75 ) in + 'ANNENV_A6' => array( 342.000, 468.000), // = ( 121 x 165 ) mm = ( 4.75 x 6.50 ) in + 'ANNENV_A7' => array( 378.000, 522.000), // = ( 133 x 184 ) mm = ( 5.25 x 7.25 ) in + 'ANNENV_A8' => array( 396.000, 584.640), // = ( 140 x 206 ) mm = ( 5.50 x 8.12 ) in + 'ANNENV_A10' => array( 450.000, 692.640), // = ( 159 x 244 ) mm = ( 6.25 x 9.62 ) in + 'ANNENV_SLIM' => array( 278.640, 638.640), // = ( 98 x 225 ) mm = ( 3.87 x 8.87 ) in + // - Commercial Envelopes + 'COMMENV_N6_1/4' => array( 252.000, 432.000), // = ( 89 x 152 ) mm = ( 3.50 x 6.00 ) in + 'COMMENV_N6_3/4' => array( 260.640, 468.000), // = ( 92 x 165 ) mm = ( 3.62 x 6.50 ) in + 'COMMENV_N8' => array( 278.640, 540.000), // = ( 98 x 191 ) mm = ( 3.87 x 7.50 ) in + 'COMMENV_N9' => array( 278.640, 638.640), // = ( 98 x 225 ) mm = ( 3.87 x 8.87 ) in + 'COMMENV_N10' => array( 296.640, 684.000), // = ( 105 x 241 ) mm = ( 4.12 x 9.50 ) in + 'COMMENV_N11' => array( 324.000, 746.640), // = ( 114 x 263 ) mm = ( 4.50 x 10.37 ) in + 'COMMENV_N12' => array( 342.000, 792.000), // = ( 121 x 279 ) mm = ( 4.75 x 11.00 ) in + 'COMMENV_N14' => array( 360.000, 828.000), // = ( 127 x 292 ) mm = ( 5.00 x 11.50 ) in + // - Catalogue Envelopes + 'CATENV_N1' => array( 432.000, 648.000), // = ( 152 x 229 ) mm = ( 6.00 x 9.00 ) in + 'CATENV_N1_3/4' => array( 468.000, 684.000), // = ( 165 x 241 ) mm = ( 6.50 x 9.50 ) in + 'CATENV_N2' => array( 468.000, 720.000), // = ( 165 x 254 ) mm = ( 6.50 x 10.00 ) in + 'CATENV_N3' => array( 504.000, 720.000), // = ( 178 x 254 ) mm = ( 7.00 x 10.00 ) in + 'CATENV_N6' => array( 540.000, 756.000), // = ( 191 x 267 ) mm = ( 7.50 x 10.50 ) in + 'CATENV_N7' => array( 576.000, 792.000), // = ( 203 x 279 ) mm = ( 8.00 x 11.00 ) in + 'CATENV_N8' => array( 594.000, 810.000), // = ( 210 x 286 ) mm = ( 8.25 x 11.25 ) in + 'CATENV_N9_1/2' => array( 612.000, 756.000), // = ( 216 x 267 ) mm = ( 8.50 x 10.50 ) in + 'CATENV_N9_3/4' => array( 630.000, 810.000), // = ( 222 x 286 ) mm = ( 8.75 x 11.25 ) in + 'CATENV_N10_1/2' => array( 648.000, 864.000), // = ( 229 x 305 ) mm = ( 9.00 x 12.00 ) in + 'CATENV_N12_1/2' => array( 684.000, 900.000), // = ( 241 x 318 ) mm = ( 9.50 x 12.50 ) in + 'CATENV_N13_1/2' => array( 720.000, 936.000), // = ( 254 x 330 ) mm = ( 10.00 x 13.00 ) in + 'CATENV_N14_1/4' => array( 810.000, 882.000), // = ( 286 x 311 ) mm = ( 11.25 x 12.25 ) in + 'CATENV_N14_1/2' => array( 828.000, 1044.000), // = ( 292 x 368 ) mm = ( 11.50 x 14.50 ) in + // Japanese (JIS P 0138-61) Standard B-Series + 'JIS_B0' => array( 2919.685, 4127.244), // = ( 1030 x 1456 ) mm = ( 40.55 x 57.32 ) in + 'JIS_B1' => array( 2063.622, 2919.685), // = ( 728 x 1030 ) mm = ( 28.66 x 40.55 ) in + 'JIS_B2' => array( 1459.843, 2063.622), // = ( 515 x 728 ) mm = ( 20.28 x 28.66 ) in + 'JIS_B3' => array( 1031.811, 1459.843), // = ( 364 x 515 ) mm = ( 14.33 x 20.28 ) in + 'JIS_B4' => array( 728.504, 1031.811), // = ( 257 x 364 ) mm = ( 10.12 x 14.33 ) in + 'JIS_B5' => array( 515.906, 728.504), // = ( 182 x 257 ) mm = ( 7.17 x 10.12 ) in + 'JIS_B6' => array( 362.835, 515.906), // = ( 128 x 182 ) mm = ( 5.04 x 7.17 ) in + 'JIS_B7' => array( 257.953, 362.835), // = ( 91 x 128 ) mm = ( 3.58 x 5.04 ) in + 'JIS_B8' => array( 181.417, 257.953), // = ( 64 x 91 ) mm = ( 2.52 x 3.58 ) in + 'JIS_B9' => array( 127.559, 181.417), // = ( 45 x 64 ) mm = ( 1.77 x 2.52 ) in + 'JIS_B10' => array( 90.709, 127.559), // = ( 32 x 45 ) mm = ( 1.26 x 1.77 ) in + 'JIS_B11' => array( 62.362, 90.709), // = ( 22 x 32 ) mm = ( 0.87 x 1.26 ) in + 'JIS_B12' => array( 45.354, 62.362), // = ( 16 x 22 ) mm = ( 0.63 x 0.87 ) in + // PA Series + 'PA0' => array( 2381.102, 3174.803), // = ( 840 x 1120 ) mm = ( 33.07 x 44.09 ) in + 'PA1' => array( 1587.402, 2381.102), // = ( 560 x 840 ) mm = ( 22.05 x 33.07 ) in + 'PA2' => array( 1190.551, 1587.402), // = ( 420 x 560 ) mm = ( 16.54 x 22.05 ) in + 'PA3' => array( 793.701, 1190.551), // = ( 280 x 420 ) mm = ( 11.02 x 16.54 ) in + 'PA4' => array( 595.276, 793.701), // = ( 210 x 280 ) mm = ( 8.27 x 11.02 ) in + 'PA5' => array( 396.850, 595.276), // = ( 140 x 210 ) mm = ( 5.51 x 8.27 ) in + 'PA6' => array( 297.638, 396.850), // = ( 105 x 140 ) mm = ( 4.13 x 5.51 ) in + 'PA7' => array( 198.425, 297.638), // = ( 70 x 105 ) mm = ( 2.76 x 4.13 ) in + 'PA8' => array( 147.402, 198.425), // = ( 52 x 70 ) mm = ( 2.05 x 2.76 ) in + 'PA9' => array( 99.213, 147.402), // = ( 35 x 52 ) mm = ( 1.38 x 2.05 ) in + 'PA10' => array( 73.701, 99.213), // = ( 26 x 35 ) mm = ( 1.02 x 1.38 ) in + // Standard Photographic Print Sizes + 'PASSPORT_PHOTO' => array( 99.213, 127.559), // = ( 35 x 45 ) mm = ( 1.38 x 1.77 ) in + 'E' => array( 233.858, 340.157), // = ( 82 x 120 ) mm = ( 3.25 x 4.72 ) in + 'L' => array( 252.283, 360.000), // = ( 89 x 127 ) mm = ( 3.50 x 5.00 ) in + '3R' => array( 252.283, 360.000), // = ( 89 x 127 ) mm = ( 3.50 x 5.00 ) in + 'KG' => array( 289.134, 430.866), // = ( 102 x 152 ) mm = ( 4.02 x 5.98 ) in + '4R' => array( 289.134, 430.866), // = ( 102 x 152 ) mm = ( 4.02 x 5.98 ) in + '4D' => array( 340.157, 430.866), // = ( 120 x 152 ) mm = ( 4.72 x 5.98 ) in + '2L' => array( 360.000, 504.567), // = ( 127 x 178 ) mm = ( 5.00 x 7.01 ) in + '5R' => array( 360.000, 504.567), // = ( 127 x 178 ) mm = ( 5.00 x 7.01 ) in + '8P' => array( 430.866, 575.433), // = ( 152 x 203 ) mm = ( 5.98 x 7.99 ) in + '6R' => array( 430.866, 575.433), // = ( 152 x 203 ) mm = ( 5.98 x 7.99 ) in + '6P' => array( 575.433, 720.000), // = ( 203 x 254 ) mm = ( 7.99 x 10.00 ) in + '8R' => array( 575.433, 720.000), // = ( 203 x 254 ) mm = ( 7.99 x 10.00 ) in + '6PW' => array( 575.433, 864.567), // = ( 203 x 305 ) mm = ( 7.99 x 12.01 ) in + 'S8R' => array( 575.433, 864.567), // = ( 203 x 305 ) mm = ( 7.99 x 12.01 ) in + '4P' => array( 720.000, 864.567), // = ( 254 x 305 ) mm = ( 10.00 x 12.01 ) in + '10R' => array( 720.000, 864.567), // = ( 254 x 305 ) mm = ( 10.00 x 12.01 ) in + '4PW' => array( 720.000, 1080.000), // = ( 254 x 381 ) mm = ( 10.00 x 15.00 ) in + 'S10R' => array( 720.000, 1080.000), // = ( 254 x 381 ) mm = ( 10.00 x 15.00 ) in + '11R' => array( 790.866, 1009.134), // = ( 279 x 356 ) mm = ( 10.98 x 14.02 ) in + 'S11R' => array( 790.866, 1224.567), // = ( 279 x 432 ) mm = ( 10.98 x 17.01 ) in + '12R' => array( 864.567, 1080.000), // = ( 305 x 381 ) mm = ( 12.01 x 15.00 ) in + 'S12R' => array( 864.567, 1292.598), // = ( 305 x 456 ) mm = ( 12.01 x 17.95 ) in + // Common Newspaper Sizes + 'NEWSPAPER_BROADSHEET' => array( 2125.984, 1700.787), // = ( 750 x 600 ) mm = ( 29.53 x 23.62 ) in + 'NEWSPAPER_BERLINER' => array( 1332.283, 892.913), // = ( 470 x 315 ) mm = ( 18.50 x 12.40 ) in + 'NEWSPAPER_TABLOID' => array( 1218.898, 793.701), // = ( 430 x 280 ) mm = ( 16.93 x 11.02 ) in + 'NEWSPAPER_COMPACT' => array( 1218.898, 793.701), // = ( 430 x 280 ) mm = ( 16.93 x 11.02 ) in + // Business Cards + 'CREDIT_CARD' => array( 153.014, 242.646), // = ( 54 x 86 ) mm = ( 2.13 x 3.37 ) in + 'BUSINESS_CARD' => array( 153.014, 242.646), // = ( 54 x 86 ) mm = ( 2.13 x 3.37 ) in + 'BUSINESS_CARD_ISO7810' => array( 153.014, 242.646), // = ( 54 x 86 ) mm = ( 2.13 x 3.37 ) in + 'BUSINESS_CARD_ISO216' => array( 147.402, 209.764), // = ( 52 x 74 ) mm = ( 2.05 x 2.91 ) in + 'BUSINESS_CARD_IT' => array( 155.906, 240.945), // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in + 'BUSINESS_CARD_UK' => array( 155.906, 240.945), // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in + 'BUSINESS_CARD_FR' => array( 155.906, 240.945), // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in + 'BUSINESS_CARD_DE' => array( 155.906, 240.945), // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in + 'BUSINESS_CARD_ES' => array( 155.906, 240.945), // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in + 'BUSINESS_CARD_CA' => array( 144.567, 252.283), // = ( 51 x 89 ) mm = ( 2.01 x 3.50 ) in + 'BUSINESS_CARD_US' => array( 144.567, 252.283), // = ( 51 x 89 ) mm = ( 2.01 x 3.50 ) in + 'BUSINESS_CARD_JP' => array( 155.906, 257.953), // = ( 55 x 91 ) mm = ( 2.17 x 3.58 ) in + 'BUSINESS_CARD_HK' => array( 153.071, 255.118), // = ( 54 x 90 ) mm = ( 2.13 x 3.54 ) in + 'BUSINESS_CARD_AU' => array( 155.906, 255.118), // = ( 55 x 90 ) mm = ( 2.17 x 3.54 ) in + 'BUSINESS_CARD_DK' => array( 155.906, 255.118), // = ( 55 x 90 ) mm = ( 2.17 x 3.54 ) in + 'BUSINESS_CARD_SE' => array( 155.906, 255.118), // = ( 55 x 90 ) mm = ( 2.17 x 3.54 ) in + 'BUSINESS_CARD_RU' => array( 141.732, 255.118), // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in + 'BUSINESS_CARD_CZ' => array( 141.732, 255.118), // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in + 'BUSINESS_CARD_FI' => array( 141.732, 255.118), // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in + 'BUSINESS_CARD_HU' => array( 141.732, 255.118), // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in + 'BUSINESS_CARD_IL' => array( 141.732, 255.118), // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in + // Billboards + '4SHEET' => array( 2880.000, 4320.000), // = ( 1016 x 1524 ) mm = ( 40.00 x 60.00 ) in + '6SHEET' => array( 3401.575, 5102.362), // = ( 1200 x 1800 ) mm = ( 47.24 x 70.87 ) in + '12SHEET' => array( 8640.000, 4320.000), // = ( 3048 x 1524 ) mm = (120.00 x 60.00 ) in + '16SHEET' => array( 5760.000, 8640.000), // = ( 2032 x 3048 ) mm = ( 80.00 x 120.00) in + '32SHEET' => array(11520.000, 8640.000), // = ( 4064 x 3048 ) mm = (160.00 x 120.00) in + '48SHEET' => array(17280.000, 8640.000), // = ( 6096 x 3048 ) mm = (240.00 x 120.00) in + '64SHEET' => array(23040.000, 8640.000), // = ( 8128 x 3048 ) mm = (320.00 x 120.00) in + '96SHEET' => array(34560.000, 8640.000), // = (12192 x 3048 ) mm = (480.00 x 120.00) in + // -- Old European Sizes + // - Old Imperial English Sizes + 'EN_EMPEROR' => array( 3456.000, 5184.000), // = ( 1219 x 1829 ) mm = ( 48.00 x 72.00 ) in + 'EN_ANTIQUARIAN' => array( 2232.000, 3816.000), // = ( 787 x 1346 ) mm = ( 31.00 x 53.00 ) in + 'EN_GRAND_EAGLE' => array( 2070.000, 3024.000), // = ( 730 x 1067 ) mm = ( 28.75 x 42.00 ) in + 'EN_DOUBLE_ELEPHANT' => array( 1926.000, 2880.000), // = ( 679 x 1016 ) mm = ( 26.75 x 40.00 ) in + 'EN_ATLAS' => array( 1872.000, 2448.000), // = ( 660 x 864 ) mm = ( 26.00 x 34.00 ) in + 'EN_COLOMBIER' => array( 1692.000, 2484.000), // = ( 597 x 876 ) mm = ( 23.50 x 34.50 ) in + 'EN_ELEPHANT' => array( 1656.000, 2016.000), // = ( 584 x 711 ) mm = ( 23.00 x 28.00 ) in + 'EN_DOUBLE_DEMY' => array( 1620.000, 2556.000), // = ( 572 x 902 ) mm = ( 22.50 x 35.50 ) in + 'EN_IMPERIAL' => array( 1584.000, 2160.000), // = ( 559 x 762 ) mm = ( 22.00 x 30.00 ) in + 'EN_PRINCESS' => array( 1548.000, 2016.000), // = ( 546 x 711 ) mm = ( 21.50 x 28.00 ) in + 'EN_CARTRIDGE' => array( 1512.000, 1872.000), // = ( 533 x 660 ) mm = ( 21.00 x 26.00 ) in + 'EN_DOUBLE_LARGE_POST' => array( 1512.000, 2376.000), // = ( 533 x 838 ) mm = ( 21.00 x 33.00 ) in + 'EN_ROYAL' => array( 1440.000, 1800.000), // = ( 508 x 635 ) mm = ( 20.00 x 25.00 ) in + 'EN_SHEET' => array( 1404.000, 1692.000), // = ( 495 x 597 ) mm = ( 19.50 x 23.50 ) in + 'EN_HALF_POST' => array( 1404.000, 1692.000), // = ( 495 x 597 ) mm = ( 19.50 x 23.50 ) in + 'EN_SUPER_ROYAL' => array( 1368.000, 1944.000), // = ( 483 x 686 ) mm = ( 19.00 x 27.00 ) in + 'EN_DOUBLE_POST' => array( 1368.000, 2196.000), // = ( 483 x 775 ) mm = ( 19.00 x 30.50 ) in + 'EN_MEDIUM' => array( 1260.000, 1656.000), // = ( 445 x 584 ) mm = ( 17.50 x 23.00 ) in + 'EN_DEMY' => array( 1260.000, 1620.000), // = ( 445 x 572 ) mm = ( 17.50 x 22.50 ) in + 'EN_LARGE_POST' => array( 1188.000, 1512.000), // = ( 419 x 533 ) mm = ( 16.50 x 21.00 ) in + 'EN_COPY_DRAUGHT' => array( 1152.000, 1440.000), // = ( 406 x 508 ) mm = ( 16.00 x 20.00 ) in + 'EN_POST' => array( 1116.000, 1386.000), // = ( 394 x 489 ) mm = ( 15.50 x 19.25 ) in + 'EN_CROWN' => array( 1080.000, 1440.000), // = ( 381 x 508 ) mm = ( 15.00 x 20.00 ) in + 'EN_PINCHED_POST' => array( 1062.000, 1332.000), // = ( 375 x 470 ) mm = ( 14.75 x 18.50 ) in + 'EN_BRIEF' => array( 972.000, 1152.000), // = ( 343 x 406 ) mm = ( 13.50 x 16.00 ) in + 'EN_FOOLSCAP' => array( 972.000, 1224.000), // = ( 343 x 432 ) mm = ( 13.50 x 17.00 ) in + 'EN_SMALL_FOOLSCAP' => array( 954.000, 1188.000), // = ( 337 x 419 ) mm = ( 13.25 x 16.50 ) in + 'EN_POTT' => array( 900.000, 1080.000), // = ( 318 x 381 ) mm = ( 12.50 x 15.00 ) in + // - Old Imperial Belgian Sizes + 'BE_GRAND_AIGLE' => array( 1984.252, 2948.031), // = ( 700 x 1040 ) mm = ( 27.56 x 40.94 ) in + 'BE_COLOMBIER' => array( 1757.480, 2409.449), // = ( 620 x 850 ) mm = ( 24.41 x 33.46 ) in + 'BE_DOUBLE_CARRE' => array( 1757.480, 2607.874), // = ( 620 x 920 ) mm = ( 24.41 x 36.22 ) in + 'BE_ELEPHANT' => array( 1746.142, 2182.677), // = ( 616 x 770 ) mm = ( 24.25 x 30.31 ) in + 'BE_PETIT_AIGLE' => array( 1700.787, 2381.102), // = ( 600 x 840 ) mm = ( 23.62 x 33.07 ) in + 'BE_GRAND_JESUS' => array( 1559.055, 2069.291), // = ( 550 x 730 ) mm = ( 21.65 x 28.74 ) in + 'BE_JESUS' => array( 1530.709, 2069.291), // = ( 540 x 730 ) mm = ( 21.26 x 28.74 ) in + 'BE_RAISIN' => array( 1417.323, 1842.520), // = ( 500 x 650 ) mm = ( 19.69 x 25.59 ) in + 'BE_GRAND_MEDIAN' => array( 1303.937, 1714.961), // = ( 460 x 605 ) mm = ( 18.11 x 23.82 ) in + 'BE_DOUBLE_POSTE' => array( 1233.071, 1601.575), // = ( 435 x 565 ) mm = ( 17.13 x 22.24 ) in + 'BE_COQUILLE' => array( 1218.898, 1587.402), // = ( 430 x 560 ) mm = ( 16.93 x 22.05 ) in + 'BE_PETIT_MEDIAN' => array( 1176.378, 1502.362), // = ( 415 x 530 ) mm = ( 16.34 x 20.87 ) in + 'BE_RUCHE' => array( 1020.472, 1303.937), // = ( 360 x 460 ) mm = ( 14.17 x 18.11 ) in + 'BE_PROPATRIA' => array( 977.953, 1218.898), // = ( 345 x 430 ) mm = ( 13.58 x 16.93 ) in + 'BE_LYS' => array( 898.583, 1125.354), // = ( 317 x 397 ) mm = ( 12.48 x 15.63 ) in + 'BE_POT' => array( 870.236, 1088.504), // = ( 307 x 384 ) mm = ( 12.09 x 15.12 ) in + 'BE_ROSETTE' => array( 765.354, 983.622), // = ( 270 x 347 ) mm = ( 10.63 x 13.66 ) in + // - Old Imperial French Sizes + 'FR_UNIVERS' => array( 2834.646, 3685.039), // = ( 1000 x 1300 ) mm = ( 39.37 x 51.18 ) in + 'FR_DOUBLE_COLOMBIER' => array( 2551.181, 3571.654), // = ( 900 x 1260 ) mm = ( 35.43 x 49.61 ) in + 'FR_GRANDE_MONDE' => array( 2551.181, 3571.654), // = ( 900 x 1260 ) mm = ( 35.43 x 49.61 ) in + 'FR_DOUBLE_SOLEIL' => array( 2267.717, 3401.575), // = ( 800 x 1200 ) mm = ( 31.50 x 47.24 ) in + 'FR_DOUBLE_JESUS' => array( 2154.331, 3174.803), // = ( 760 x 1120 ) mm = ( 29.92 x 44.09 ) in + 'FR_GRAND_AIGLE' => array( 2125.984, 3004.724), // = ( 750 x 1060 ) mm = ( 29.53 x 41.73 ) in + 'FR_PETIT_AIGLE' => array( 1984.252, 2664.567), // = ( 700 x 940 ) mm = ( 27.56 x 37.01 ) in + 'FR_DOUBLE_RAISIN' => array( 1842.520, 2834.646), // = ( 650 x 1000 ) mm = ( 25.59 x 39.37 ) in + 'FR_JOURNAL' => array( 1842.520, 2664.567), // = ( 650 x 940 ) mm = ( 25.59 x 37.01 ) in + 'FR_COLOMBIER_AFFICHE' => array( 1785.827, 2551.181), // = ( 630 x 900 ) mm = ( 24.80 x 35.43 ) in + 'FR_DOUBLE_CAVALIER' => array( 1757.480, 2607.874), // = ( 620 x 920 ) mm = ( 24.41 x 36.22 ) in + 'FR_CLOCHE' => array( 1700.787, 2267.717), // = ( 600 x 800 ) mm = ( 23.62 x 31.50 ) in + 'FR_SOLEIL' => array( 1700.787, 2267.717), // = ( 600 x 800 ) mm = ( 23.62 x 31.50 ) in + 'FR_DOUBLE_CARRE' => array( 1587.402, 2551.181), // = ( 560 x 900 ) mm = ( 22.05 x 35.43 ) in + 'FR_DOUBLE_COQUILLE' => array( 1587.402, 2494.488), // = ( 560 x 880 ) mm = ( 22.05 x 34.65 ) in + 'FR_JESUS' => array( 1587.402, 2154.331), // = ( 560 x 760 ) mm = ( 22.05 x 29.92 ) in + 'FR_RAISIN' => array( 1417.323, 1842.520), // = ( 500 x 650 ) mm = ( 19.69 x 25.59 ) in + 'FR_CAVALIER' => array( 1303.937, 1757.480), // = ( 460 x 620 ) mm = ( 18.11 x 24.41 ) in + 'FR_DOUBLE_COURONNE' => array( 1303.937, 2040.945), // = ( 460 x 720 ) mm = ( 18.11 x 28.35 ) in + 'FR_CARRE' => array( 1275.591, 1587.402), // = ( 450 x 560 ) mm = ( 17.72 x 22.05 ) in + 'FR_COQUILLE' => array( 1247.244, 1587.402), // = ( 440 x 560 ) mm = ( 17.32 x 22.05 ) in + 'FR_DOUBLE_TELLIERE' => array( 1247.244, 1927.559), // = ( 440 x 680 ) mm = ( 17.32 x 26.77 ) in + 'FR_DOUBLE_CLOCHE' => array( 1133.858, 1700.787), // = ( 400 x 600 ) mm = ( 15.75 x 23.62 ) in + 'FR_DOUBLE_POT' => array( 1133.858, 1757.480), // = ( 400 x 620 ) mm = ( 15.75 x 24.41 ) in + 'FR_ECU' => array( 1133.858, 1474.016), // = ( 400 x 520 ) mm = ( 15.75 x 20.47 ) in + 'FR_COURONNE' => array( 1020.472, 1303.937), // = ( 360 x 460 ) mm = ( 14.17 x 18.11 ) in + 'FR_TELLIERE' => array( 963.780, 1247.244), // = ( 340 x 440 ) mm = ( 13.39 x 17.32 ) in + 'FR_POT' => array( 878.740, 1133.858), // = ( 310 x 400 ) mm = ( 12.20 x 15.75 ) in + ); + + + /** + * Get page dimensions from format name. + * @param $format (mixed) The format name @see self::$page_format<ul> + * @return array containing page width and height in points + * @since 5.0.010 (2010-05-17) + * @public static + */ + public static function getPageSizeFromFormat($format) { + if (isset(self::$page_formats[$format])) { + return self::$page_formats[$format]; + } + return self::$page_formats['A4']; + } + + /** + * Set page boundaries. + * @param $page (int) page number + * @param $type (string) valid values are: <ul><li>'MediaBox' : the boundaries of the physical medium on which the page shall be displayed or printed;</li><li>'CropBox' : the visible region of default user space;</li><li>'BleedBox' : the region to which the contents of the page shall be clipped when output in a production environment;</li><li>'TrimBox' : the intended dimensions of the finished page after trimming;</li><li>'ArtBox' : the page's meaningful content (including potential white space).</li></ul> + * @param $llx (float) lower-left x coordinate in user units. + * @param $lly (float) lower-left y coordinate in user units. + * @param $urx (float) upper-right x coordinate in user units. + * @param $ury (float) upper-right y coordinate in user units. + * @param $points (boolean) If true uses user units as unit of measure, otherwise uses PDF points. + * @param $k (float) Scale factor (number of points in user unit). + * @param $pagedim (array) Array of page dimensions. + * @return pagedim array of page dimensions. + * @since 5.0.010 (2010-05-17) + * @public static + */ + public static function setPageBoxes($page, $type, $llx, $lly, $urx, $ury, $points=false, $k, $pagedim=array()) { + if (!isset($pagedim[$page])) { + // initialize array + $pagedim[$page] = array(); + } + if (!in_array($type, self::$pageboxes)) { + return; + } + if ($points) { + $k = 1; + } + $pagedim[$page][$type]['llx'] = ($llx * $k); + $pagedim[$page][$type]['lly'] = ($lly * $k); + $pagedim[$page][$type]['urx'] = ($urx * $k); + $pagedim[$page][$type]['ury'] = ($ury * $k); + return $pagedim; + } + + /** + * Swap X and Y coordinates of page boxes (change page boxes orientation). + * @param $page (int) page number + * @param $pagedim (array) Array of page dimensions. + * @return pagedim array of page dimensions. + * @since 5.0.010 (2010-05-17) + * @public static + */ + public static function swapPageBoxCoordinates($page, $pagedim) { + foreach (self::$pageboxes as $type) { + // swap X and Y coordinates + if (isset($pagedim[$page][$type])) { + $tmp = $pagedim[$page][$type]['llx']; + $pagedim[$page][$type]['llx'] = $pagedim[$page][$type]['lly']; + $pagedim[$page][$type]['lly'] = $tmp; + $tmp = $pagedim[$page][$type]['urx']; + $pagedim[$page][$type]['urx'] = $pagedim[$page][$type]['ury']; + $pagedim[$page][$type]['ury'] = $tmp; + } + } + return $pagedim; + } + + /** + * Get the canonical page layout mode. + * @param $layout (string) The page layout. Possible values are:<ul><li>SinglePage Display one page at a time</li><li>OneColumn Display the pages in one column</li><li>TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left</li><li>TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right</li><li>TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left</li><li>TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right</li></ul> + * @return (string) Canonical page layout name. + * @public static + */ + public static function getPageLayoutMode($layout='SinglePage') { + switch ($layout) { + case 'default': + case 'single': + case 'SinglePage': { + $layout_mode = 'SinglePage'; + break; + } + case 'continuous': + case 'OneColumn': { + $layout_mode = 'OneColumn'; + break; + } + case 'two': + case 'TwoColumnLeft': { + $layout_mode = 'TwoColumnLeft'; + break; + } + case 'TwoColumnRight': { + $layout_mode = 'TwoColumnRight'; + break; + } + case 'TwoPageLeft': { + $layout_mode = 'TwoPageLeft'; + break; + } + case 'TwoPageRight': { + $layout_mode = 'TwoPageRight'; + break; + } + default: { + $layout_mode = 'SinglePage'; + } + } + return $layout_mode; + } + + /** + * Get the canonical page layout mode. + * @param $mode (string) A name object specifying how the document should be displayed when opened:<ul><li>UseNone Neither document outline nor thumbnail images visible</li><li>UseOutlines Document outline visible</li><li>UseThumbs Thumbnail images visible</li><li>FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible</li><li>UseOC (PDF 1.5) Optional content group panel visible</li><li>UseAttachments (PDF 1.6) Attachments panel visible</li></ul> + * @return (string) Canonical page mode name. + * @public static + */ + public static function getPageMode($mode='UseNone') { + switch ($mode) { + case 'UseNone': { + $page_mode = 'UseNone'; + break; + } + case 'UseOutlines': { + $page_mode = 'UseOutlines'; + break; + } + case 'UseThumbs': { + $page_mode = 'UseThumbs'; + break; + } + case 'FullScreen': { + $page_mode = 'FullScreen'; + break; + } + case 'UseOC': { + $page_mode = 'UseOC'; + break; + } + case '': { + $page_mode = 'UseAttachments'; + break; + } + default: { + $page_mode = 'UseNone'; + } + } + return $page_mode; + } + + +} // END OF TCPDF_STATIC CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/tcpdf.php b/tcpdf/tcpdf.php new file mode 100644 index 0000000..599a3f8 --- /dev/null +++ b/tcpdf/tcpdf.php @@ -0,0 +1,24479 @@ +<?php +//============================================================+ +// File name : tcpdf.php +// Version : 6.2.12 +// Begin : 2002-08-03 +// Last Update : 2015-06-18 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2002-2015 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : +// This is a PHP class for generating PDF documents without requiring external extensions. +// +// NOTE: +// This class was originally derived in 2002 from the Public +// Domain FPDF class by Olivier Plathey (http://www.fpdf.org), +// but now is almost entirely rewritten and contains thousands of +// new lines of code and hundreds new features. +// +// Main features: +// * no external libraries are required for the basic functions; +// * all standard page formats, custom page formats, custom margins and units of measure; +// * UTF-8 Unicode and Right-To-Left languages; +// * TrueTypeUnicode, TrueType, Type1 and CID-0 fonts; +// * font subsetting; +// * methods to publish some XHTML + CSS code, Javascript and Forms; +// * images, graphic (geometric figures) and transformation methods; +// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html) +// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417; +// * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies; +// * automatic page header and footer management; +// * document encryption up to 256 bit and digital signature certifications; +// * transactions to UNDO commands; +// * PDF annotations, including links, text and file attachments; +// * text rendering modes (fill, stroke and clipping); +// * multiple columns mode; +// * no-write page regions; +// * bookmarks, named destinations and table of content; +// * text hyphenation; +// * text stretching and spacing (tracking); +// * automatic page break, line break and text alignments including justification; +// * automatic page numbering and page groups; +// * move and delete pages; +// * page compression (requires php-zlib extension); +// * XOBject Templates; +// * Layers and object visibility. +// * PDF/A-1b support +//============================================================+ + +/** + * @file + * This is a PHP class for generating PDF documents without requiring external extensions.<br> + * TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br> + * <h3>TCPDF main features are:</h3> + * <ul> + * <li>no external libraries are required for the basic functions;</li> + * <li>all standard page formats, custom page formats, custom margins and units of measure;</li> + * <li>UTF-8 Unicode and Right-To-Left languages;</li> + * <li>TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;</li> + * <li>font subsetting;</li> + * <li>methods to publish some XHTML + CSS code, Javascript and Forms;</li> + * <li>images, graphic (geometric figures) and transformation methods; + * <li>supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/www/formats.html)</li> + * <li>1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;</li> + * <li>JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;</li> + * <li>automatic page header and footer management;</li> + * <li>document encryption up to 256 bit and digital signature certifications;</li> + * <li>transactions to UNDO commands;</li> + * <li>PDF annotations, including links, text and file attachments;</li> + * <li>text rendering modes (fill, stroke and clipping);</li> + * <li>multiple columns mode;</li> + * <li>no-write page regions;</li> + * <li>bookmarks, named destinations and table of content;</li> + * <li>text hyphenation;</li> + * <li>text stretching and spacing (tracking);</li> + * <li>automatic page break, line break and text alignments including justification;</li> + * <li>automatic page numbering and page groups;</li> + * <li>move and delete pages;</li> + * <li>page compression (requires php-zlib extension);</li> + * <li>XOBject Templates;</li> + * <li>Layers and object visibility;</li> + * <li>PDF/A-1b support.</li> + * </ul> + * Tools to encode your unicode fonts are on fonts/utils directory.</p> + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 6.2.8 + */ + +// TCPDF configuration +require_once(dirname(__FILE__).'/tcpdf_autoconfig.php'); +// TCPDF static font methods and data +require_once(dirname(__FILE__).'/include/tcpdf_font_data.php'); +// TCPDF static font methods and data +require_once(dirname(__FILE__).'/include/tcpdf_fonts.php'); +// TCPDF static color methods and data +require_once(dirname(__FILE__).'/include/tcpdf_colors.php'); +// TCPDF static image methods and data +require_once(dirname(__FILE__).'/include/tcpdf_images.php'); +// TCPDF static methods and data +require_once(dirname(__FILE__).'/include/tcpdf_static.php'); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +/** + * @class TCPDF + * PHP class for generating PDF documents without requiring external extensions. + * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br> + * @package com.tecnick.tcpdf + * @brief PHP class for generating PDF documents without requiring external extensions. + * @version 6.2.8 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF { + + // Protected properties + + /** + * Current page number. + * @protected + */ + protected $page; + + /** + * Current object number. + * @protected + */ + protected $n; + + /** + * Array of object offsets. + * @protected + */ + protected $offsets = array(); + + /** + * Array of object IDs for each page. + * @protected + */ + protected $pageobjects = array(); + + /** + * Buffer holding in-memory PDF. + * @protected + */ + protected $buffer; + + /** + * Array containing pages. + * @protected + */ + protected $pages = array(); + + /** + * Current document state. + * @protected + */ + protected $state; + + /** + * Compression flag. + * @protected + */ + protected $compress; + + /** + * Current page orientation (P = Portrait, L = Landscape). + * @protected + */ + protected $CurOrientation; + + /** + * Page dimensions. + * @protected + */ + protected $pagedim = array(); + + /** + * Scale factor (number of points in user unit). + * @protected + */ + protected $k; + + /** + * Width of page format in points. + * @protected + */ + protected $fwPt; + + /** + * Height of page format in points. + * @protected + */ + protected $fhPt; + + /** + * Current width of page in points. + * @protected + */ + protected $wPt; + + /** + * Current height of page in points. + * @protected + */ + protected $hPt; + + /** + * Current width of page in user unit. + * @protected + */ + protected $w; + + /** + * Current height of page in user unit. + * @protected + */ + protected $h; + + /** + * Left margin. + * @protected + */ + protected $lMargin; + + /** + * Right margin. + * @protected + */ + protected $rMargin; + + /** + * Cell left margin (used by regions). + * @protected + */ + protected $clMargin; + + /** + * Cell right margin (used by regions). + * @protected + */ + protected $crMargin; + + /** + * Top margin. + * @protected + */ + protected $tMargin; + + /** + * Page break margin. + * @protected + */ + protected $bMargin; + + /** + * Array of cell internal paddings ('T' => top, 'R' => right, 'B' => bottom, 'L' => left). + * @since 5.9.000 (2010-10-03) + * @protected + */ + protected $cell_padding = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0); + + /** + * Array of cell margins ('T' => top, 'R' => right, 'B' => bottom, 'L' => left). + * @since 5.9.000 (2010-10-04) + * @protected + */ + protected $cell_margin = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0); + + /** + * Current horizontal position in user unit for cell positioning. + * @protected + */ + protected $x; + + /** + * Current vertical position in user unit for cell positioning. + * @protected + */ + protected $y; + + /** + * Height of last cell printed. + * @protected + */ + protected $lasth; + + /** + * Line width in user unit. + * @protected + */ + protected $LineWidth; + + /** + * Array of standard font names. + * @protected + */ + protected $CoreFonts; + + /** + * Array of used fonts. + * @protected + */ + protected $fonts = array(); + + /** + * Array of font files. + * @protected + */ + protected $FontFiles = array(); + + /** + * Array of encoding differences. + * @protected + */ + protected $diffs = array(); + + /** + * Array of used images. + * @protected + */ + protected $images = array(); + + /** + * Depth of the svg tag, to keep track if the svg tag is a subtag or the root tag. + * @protected + */ + protected $svg_tag_depth = 0; + + /** + * Array of Annotations in pages. + * @protected + */ + protected $PageAnnots = array(); + + /** + * Array of internal links. + * @protected + */ + protected $links = array(); + + /** + * Current font family. + * @protected + */ + protected $FontFamily; + + /** + * Current font style. + * @protected + */ + protected $FontStyle; + + /** + * Current font ascent (distance between font top and baseline). + * @protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontAscent; + + /** + * Current font descent (distance between font bottom and baseline). + * @protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontDescent; + + /** + * Underlining flag. + * @protected + */ + protected $underline; + + /** + * Overlining flag. + * @protected + */ + protected $overline; + + /** + * Current font info. + * @protected + */ + protected $CurrentFont; + + /** + * Current font size in points. + * @protected + */ + protected $FontSizePt; + + /** + * Current font size in user unit. + * @protected + */ + protected $FontSize; + + /** + * Commands for drawing color. + * @protected + */ + protected $DrawColor; + + /** + * Commands for filling color. + * @protected + */ + protected $FillColor; + + /** + * Commands for text color. + * @protected + */ + protected $TextColor; + + /** + * Indicates whether fill and text colors are different. + * @protected + */ + protected $ColorFlag; + + /** + * Automatic page breaking. + * @protected + */ + protected $AutoPageBreak; + + /** + * Threshold used to trigger page breaks. + * @protected + */ + protected $PageBreakTrigger; + + /** + * Flag set when processing page header. + * @protected + */ + protected $InHeader = false; + + /** + * Flag set when processing page footer. + * @protected + */ + protected $InFooter = false; + + /** + * Zoom display mode. + * @protected + */ + protected $ZoomMode; + + /** + * Layout display mode. + * @protected + */ + protected $LayoutMode; + + /** + * If true set the document information dictionary in Unicode. + * @protected + */ + protected $docinfounicode = true; + + /** + * Document title. + * @protected + */ + protected $title = ''; + + /** + * Document subject. + * @protected + */ + protected $subject = ''; + + /** + * Document author. + * @protected + */ + protected $author = ''; + + /** + * Document keywords. + * @protected + */ + protected $keywords = ''; + + /** + * Document creator. + * @protected + */ + protected $creator = ''; + + /** + * Starting page number. + * @protected + */ + protected $starting_page_number = 1; + + /** + * The right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image. + * @since 2002-07-31 + * @author Nicola Asuni + * @protected + */ + protected $img_rb_x; + + /** + * The right-bottom corner Y coordinate of last inserted image. + * @since 2002-07-31 + * @author Nicola Asuni + * @protected + */ + protected $img_rb_y; + + /** + * Adjusting factor to convert pixels to user units. + * @since 2004-06-14 + * @author Nicola Asuni + * @protected + */ + protected $imgscale = 1; + + /** + * Boolean flag set to true when the input text is unicode (require unicode fonts). + * @since 2005-01-02 + * @author Nicola Asuni + * @protected + */ + protected $isunicode = false; + + /** + * PDF version. + * @since 1.5.3 + * @protected + */ + protected $PDFVersion = '1.7'; + + /** + * ID of the stored default header template (-1 = not set). + * @protected + */ + protected $header_xobjid = false; + + /** + * If true reset the Header Xobject template at each page + * @protected + */ + protected $header_xobj_autoreset = false; + + /** + * Minimum distance between header and top page margin. + * @protected + */ + protected $header_margin; + + /** + * Minimum distance between footer and bottom page margin. + * @protected + */ + protected $footer_margin; + + /** + * Original left margin value. + * @protected + * @since 1.53.0.TC013 + */ + protected $original_lMargin; + + /** + * Original right margin value. + * @protected + * @since 1.53.0.TC013 + */ + protected $original_rMargin; + + /** + * Default font used on page header. + * @protected + */ + protected $header_font; + + /** + * Default font used on page footer. + * @protected + */ + protected $footer_font; + + /** + * Language templates. + * @protected + */ + protected $l; + + /** + * Barcode to print on page footer (only if set). + * @protected + */ + protected $barcode = false; + + /** + * Boolean flag to print/hide page header. + * @protected + */ + protected $print_header = true; + + /** + * Boolean flag to print/hide page footer. + * @protected + */ + protected $print_footer = true; + + /** + * Header image logo. + * @protected + */ + protected $header_logo = ''; + + /** + * Width of header image logo in user units. + * @protected + */ + protected $header_logo_width = 30; + + /** + * Title to be printed on default page header. + * @protected + */ + protected $header_title = ''; + + /** + * String to pring on page header after title. + * @protected + */ + protected $header_string = ''; + + /** + * Color for header text (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + */ + protected $header_text_color = array(0,0,0); + + /** + * Color for header line (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + */ + protected $header_line_color = array(0,0,0); + + /** + * Color for footer text (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + */ + protected $footer_text_color = array(0,0,0); + + /** + * Color for footer line (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + */ + protected $footer_line_color = array(0,0,0); + + /** + * Text shadow data array. + * @since 5.9.174 (2012-07-25) + * @protected + */ + protected $txtshadow = array('enabled'=>false, 'depth_w'=>0, 'depth_h'=>0, 'color'=>false, 'opacity'=>1, 'blend_mode'=>'Normal'); + + /** + * Default number of columns for html table. + * @protected + */ + protected $default_table_columns = 4; + + // variables for html parser + + /** + * HTML PARSER: array to store current link and rendering styles. + * @protected + */ + protected $HREF = array(); + + /** + * List of available fonts on filesystem. + * @protected + */ + protected $fontlist = array(); + + /** + * Current foreground color. + * @protected + */ + protected $fgcolor; + + /** + * HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise. + * @protected + */ + protected $listordered = array(); + + /** + * HTML PARSER: array count list items on nested lists. + * @protected + */ + protected $listcount = array(); + + /** + * HTML PARSER: current list nesting level. + * @protected + */ + protected $listnum = 0; + + /** + * HTML PARSER: indent amount for lists. + * @protected + */ + protected $listindent = 0; + + /** + * HTML PARSER: current list indententation level. + * @protected + */ + protected $listindentlevel = 0; + + /** + * Current background color. + * @protected + */ + protected $bgcolor; + + /** + * Temporary font size in points. + * @protected + */ + protected $tempfontsize = 10; + + /** + * Spacer string for LI tags. + * @protected + */ + protected $lispacer = ''; + + /** + * Default encoding. + * @protected + * @since 1.53.0.TC010 + */ + protected $encoding = 'UTF-8'; + + /** + * PHP internal encoding. + * @protected + * @since 1.53.0.TC016 + */ + protected $internal_encoding; + + /** + * Boolean flag to indicate if the document language is Right-To-Left. + * @protected + * @since 2.0.000 + */ + protected $rtl = false; + + /** + * Boolean flag used to force RTL or LTR string direction. + * @protected + * @since 2.0.000 + */ + protected $tmprtl = false; + + // --- Variables used for document encryption: + + /** + * IBoolean flag indicating whether document is protected. + * @protected + * @since 2.0.000 (2008-01-02) + */ + protected $encrypted; + + /** + * Array containing encryption settings. + * @protected + * @since 5.0.005 (2010-05-11) + */ + protected $encryptdata = array(); + + /** + * Last RC4 key encrypted (cached for optimisation). + * @protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_enc_key; + + /** + * Last RC4 computed key. + * @protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_enc_key_c; + + /** + * File ID (used on document trailer). + * @protected + * @since 5.0.005 (2010-05-12) + */ + protected $file_id; + + // --- bookmark --- + + /** + * Outlines for bookmark. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $outlines = array(); + + /** + * Outline root for bookmark. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $OutlineRoot; + + // --- javascript and form --- + + /** + * Javascript code. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $javascript = ''; + + /** + * Javascript counter. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $n_js; + + /** + * line through state + * @protected + * @since 2.8.000 (2008-03-19) + */ + protected $linethrough; + + /** + * Array with additional document-wide usage rights for the document. + * @protected + * @since 5.8.014 (2010-08-23) + */ + protected $ur = array(); + + /** + * DPI (Dot Per Inch) Document Resolution (do not change). + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $dpi = 72; + + /** + * Array of page numbers were a new page group was started (the page numbers are the keys of the array). + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $newpagegroup = array(); + + /** + * Array that contains the number of pages in each page group. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $pagegroups = array(); + + /** + * Current page group number. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $currpagegroup = 0; + + /** + * Array of transparency objects and parameters. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $extgstates; + + /** + * Set the default JPEG compression quality (1-100). + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $jpeg_quality; + + /** + * Default cell height ratio. + * @protected + * @since 3.0.014 (2008-05-23) + */ + protected $cell_height_ratio = K_CELL_HEIGHT_RATIO; + + /** + * PDF viewer preferences. + * @protected + * @since 3.1.000 (2008-06-09) + */ + protected $viewer_preferences; + + /** + * A name object specifying how the document should be displayed when opened. + * @protected + * @since 3.1.000 (2008-06-09) + */ + protected $PageMode; + + /** + * Array for storing gradient information. + * @protected + * @since 3.1.000 (2008-06-09) + */ + protected $gradients = array(); + + /** + * Array used to store positions inside the pages buffer (keys are the page numbers). + * @protected + * @since 3.2.000 (2008-06-26) + */ + protected $intmrk = array(); + + /** + * Array used to store positions inside the pages buffer (keys are the page numbers). + * @protected + * @since 5.7.000 (2010-08-03) + */ + protected $bordermrk = array(); + + /** + * Array used to store page positions to track empty pages (keys are the page numbers). + * @protected + * @since 5.8.007 (2010-08-18) + */ + protected $emptypagemrk = array(); + + /** + * Array used to store content positions inside the pages buffer (keys are the page numbers). + * @protected + * @since 4.6.021 (2009-07-20) + */ + protected $cntmrk = array(); + + /** + * Array used to store footer positions of each page. + * @protected + * @since 3.2.000 (2008-07-01) + */ + protected $footerpos = array(); + + /** + * Array used to store footer length of each page. + * @protected + * @since 4.0.014 (2008-07-29) + */ + protected $footerlen = array(); + + /** + * Boolean flag to indicate if a new line is created. + * @protected + * @since 3.2.000 (2008-07-01) + */ + protected $newline = true; + + /** + * End position of the latest inserted line. + * @protected + * @since 3.2.000 (2008-07-01) + */ + protected $endlinex = 0; + + /** + * PDF string for width value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleWidth = ''; + + /** + * PDF string for CAP value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleCap = '0 J'; + + /** + * PDF string for join value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleJoin = '0 j'; + + /** + * PDF string for dash value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleDash = '[] 0 d'; + + /** + * Boolean flag to indicate if marked-content sequence is open. + * @protected + * @since 4.0.013 (2008-07-28) + */ + protected $openMarkedContent = false; + + /** + * Count the latest inserted vertical spaces on HTML. + * @protected + * @since 4.0.021 (2008-08-24) + */ + protected $htmlvspace = 0; + + /** + * Array of Spot colors. + * @protected + * @since 4.0.024 (2008-09-12) + */ + protected $spot_colors = array(); + + /** + * Symbol used for HTML unordered list items. + * @protected + * @since 4.0.028 (2008-09-26) + */ + protected $lisymbol = ''; + + /** + * String used to mark the beginning and end of EPS image blocks. + * @protected + * @since 4.1.000 (2008-10-18) + */ + protected $epsmarker = 'x#!#EPS#!#x'; + + /** + * Array of transformation matrix. + * @protected + * @since 4.2.000 (2008-10-29) + */ + protected $transfmatrix = array(); + + /** + * Current key for transformation matrix. + * @protected + * @since 4.8.005 (2009-09-17) + */ + protected $transfmatrix_key = 0; + + /** + * Booklet mode for double-sided pages. + * @protected + * @since 4.2.000 (2008-10-29) + */ + protected $booklet = false; + + /** + * Epsilon value used for float calculations. + * @protected + * @since 4.2.000 (2008-10-29) + */ + protected $feps = 0.005; + + /** + * Array used for custom vertical spaces for HTML tags. + * @protected + * @since 4.2.001 (2008-10-30) + */ + protected $tagvspaces = array(); + + /** + * HTML PARSER: custom indent amount for lists. Negative value means disabled. + * @protected + * @since 4.2.007 (2008-11-12) + */ + protected $customlistindent = -1; + + /** + * Boolean flag to indicate if the border of the cell sides that cross the page should be removed. + * @protected + * @since 4.2.010 (2008-11-14) + */ + protected $opencell = true; + + /** + * Array of files to embedd. + * @protected + * @since 4.4.000 (2008-12-07) + */ + protected $embeddedfiles = array(); + + /** + * Boolean flag to indicate if we are inside a PRE tag. + * @protected + * @since 4.4.001 (2008-12-08) + */ + protected $premode = false; + + /** + * Array used to store positions of graphics transformation blocks inside the page buffer. + * keys are the page numbers + * @protected + * @since 4.4.002 (2008-12-09) + */ + protected $transfmrk = array(); + + /** + * Default color for html links. + * @protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkColorArray = array(0, 0, 255); + + /** + * Default font style to add to html links. + * @protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkFontStyle = 'U'; + + /** + * Counts the number of pages. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $numpages = 0; + + /** + * Array containing page lengths in bytes. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $pagelen = array(); + + /** + * Counts the number of pages. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $numimages = 0; + + /** + * Store the image keys. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $imagekeys = array(); + + /** + * Length of the buffer in bytes. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $bufferlen = 0; + + /** + * Counts the number of fonts. + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected $numfonts = 0; + + /** + * Store the font keys. + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected $fontkeys = array(); + + /** + * Store the font object IDs. + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $font_obj_ids = array(); + + /** + * Store the fage status (true when opened, false when closed). + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected $pageopen = array(); + + /** + * Default monospace font. + * @protected + * @since 4.5.025 (2009-03-10) + */ + protected $default_monospaced_font = 'courier'; + + /** + * Cloned copy of the current class object. + * @protected + * @since 4.5.029 (2009-03-19) + */ + protected $objcopy; + + /** + * Array used to store the lengths of cache files. + * @protected + * @since 4.5.029 (2009-03-19) + */ + protected $cache_file_length = array(); + + /** + * Table header content to be repeated on each new page. + * @protected + * @since 4.5.030 (2009-03-20) + */ + protected $thead = ''; + + /** + * Margins used for table header. + * @protected + * @since 4.5.030 (2009-03-20) + */ + protected $theadMargins = array(); + + /** + * Boolean flag to enable document digital signature. + * @protected + * @since 4.6.005 (2009-04-24) + */ + protected $sign = false; + + /** + * Digital signature data. + * @protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_data = array(); + + /** + * Digital signature max length. + * @protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_max_length = 11742; + + /** + * Data for digital signature appearance. + * @protected + * @since 5.3.011 (2010-06-16) + */ + protected $signature_appearance = array('page' => 1, 'rect' => '0 0 0 0'); + + /** + * Array of empty digital signature appearances. + * @protected + * @since 5.9.101 (2011-07-06) + */ + protected $empty_signature_appearance = array(); + + /** + * Boolean flag to enable document timestamping with TSA. + * @protected + * @since 6.0.085 (2014-06-19) + */ + protected $tsa_timestamp = false; + + /** + * Timestamping data. + * @protected + * @since 6.0.085 (2014-06-19) + */ + protected $tsa_data = array(); + + /** + * Regular expression used to find blank characters (required for word-wrapping). + * @protected + * @since 4.6.006 (2009-04-28) + */ + protected $re_spaces = '/[^\S\xa0]/'; + + /** + * Array of $re_spaces parts. + * @protected + * @since 5.5.011 (2010-07-09) + */ + protected $re_space = array('p' => '[^\S\xa0]', 'm' => ''); + + /** + * Digital signature object ID. + * @protected + * @since 4.6.022 (2009-06-23) + */ + protected $sig_obj_id = 0; + + /** + * ID of page objects. + * @protected + * @since 4.7.000 (2009-08-29) + */ + protected $page_obj_id = array(); + + /** + * List of form annotations IDs. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_obj_id = array(); + + /** + * Deafult Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + + /** + * Javascript objects array. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_objects = array(); + + /** + * Current form action (used during XHTML rendering). + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_action = ''; + + /** + * Current form encryption type (used during XHTML rendering). + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_enctype = 'application/x-www-form-urlencoded'; + + /** + * Current method to submit forms. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_mode = 'post'; + + /** + * List of fonts used on form fields (fontname => fontkey). + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $annotation_fonts = array(); + + /** + * List of radio buttons parent objects. + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $radiobutton_groups = array(); + + /** + * List of radio group objects IDs. + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $radio_groups = array(); + + /** + * Text indentation value (used for text-indent CSS attribute). + * @protected + * @since 4.8.006 (2009-09-23) + */ + protected $textindent = 0; + + /** + * Store page number when startTransaction() is called. + * @protected + * @since 4.8.006 (2009-09-23) + */ + protected $start_transaction_page = 0; + + /** + * Store Y position when startTransaction() is called. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $start_transaction_y = 0; + + /** + * True when we are printing the thead section on a new page. + * @protected + * @since 4.8.027 (2010-01-25) + */ + protected $inthead = false; + + /** + * Array of column measures (width, space, starting Y position). + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $columns = array(); + + /** + * Number of colums. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $num_columns = 1; + + /** + * Current column number. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $current_column = 0; + + /** + * Starting page for columns. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $column_start_page = 0; + + /** + * Maximum page and column selected. + * @protected + * @since 5.8.000 (2010-08-11) + */ + protected $maxselcol = array('page' => 0, 'column' => 0); + + /** + * Array of: X difference between table cell x start and starting page margin, cellspacing, cellpadding. + * @protected + * @since 5.8.000 (2010-08-11) + */ + protected $colxshift = array('x' => 0, 's' => array('H' => 0, 'V' => 0), 'p' => array('L' => 0, 'T' => 0, 'R' => 0, 'B' => 0)); + + /** + * Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping. + * @protected + * @since 4.9.008 (2010-04-03) + */ + protected $textrendermode = 0; + + /** + * Text stroke width in doc units. + * @protected + * @since 4.9.008 (2010-04-03) + */ + protected $textstrokewidth = 0; + + /** + * Current stroke color. + * @protected + * @since 4.9.008 (2010-04-03) + */ + protected $strokecolor; + + /** + * Default unit of measure for document. + * @protected + * @since 5.0.000 (2010-04-22) + */ + protected $pdfunit = 'mm'; + + /** + * Boolean flag true when we are on TOC (Table Of Content) page. + * @protected + */ + protected $tocpage = false; + + /** + * Boolean flag: if true convert vector images (SVG, EPS) to raster image using GD or ImageMagick library. + * @protected + * @since 5.0.000 (2010-04-26) + */ + protected $rasterize_vector_images = false; + + /** + * Boolean flag: if true enables font subsetting by default. + * @protected + * @since 5.3.002 (2010-06-07) + */ + protected $font_subsetting = true; + + /** + * Array of default graphic settings. + * @protected + * @since 5.5.008 (2010-07-02) + */ + protected $default_graphic_vars = array(); + + /** + * Array of XObjects. + * @protected + * @since 5.8.014 (2010-08-23) + */ + protected $xobjects = array(); + + /** + * Boolean value true when we are inside an XObject. + * @protected + * @since 5.8.017 (2010-08-24) + */ + protected $inxobj = false; + + /** + * Current XObject ID. + * @protected + * @since 5.8.017 (2010-08-24) + */ + protected $xobjid = ''; + + /** + * Percentage of character stretching. + * @protected + * @since 5.9.000 (2010-09-29) + */ + protected $font_stretching = 100; + + /** + * Increases or decreases the space between characters in a text by the specified amount (tracking). + * @protected + * @since 5.9.000 (2010-09-29) + */ + protected $font_spacing = 0; + + /** + * Array of no-write regions. + * ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right) + * @protected + * @since 5.9.003 (2010-10-14) + */ + protected $page_regions = array(); + + /** + * Boolean value true when page region check is active. + * @protected + */ + protected $check_page_regions = true; + + /** + * Array of PDF layers data. + * @protected + * @since 5.9.102 (2011-07-13) + */ + protected $pdflayers = array(); + + /** + * A dictionary of names and corresponding destinations (Dests key on document Catalog). + * @protected + * @since 5.9.097 (2011-06-23) + */ + protected $dests = array(); + + /** + * Object ID for Named Destinations + * @protected + * @since 5.9.097 (2011-06-23) + */ + protected $n_dests; + + /** + * Embedded Files Names + * @protected + * @since 5.9.204 (2013-01-23) + */ + protected $efnames = array(); + + /** + * Directory used for the last SVG image. + * @protected + * @since 5.0.000 (2010-05-05) + */ + protected $svgdir = ''; + + /** + * Deafult unit of measure for SVG. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgunit = 'px'; + + /** + * Array of SVG gradients. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradients = array(); + + /** + * ID of last SVG gradient. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradientid = 0; + + /** + * Boolean value true when in SVG defs group. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefsmode = false; + + /** + * Array of SVG defs. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefs = array(); + + /** + * Boolean value true when in SVG clipPath tag. + * @protected + * @since 5.0.000 (2010-04-26) + */ + protected $svgclipmode = false; + + /** + * Array of SVG clipPath commands. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclippaths = array(); + + /** + * Array of SVG clipPath tranformation matrix. + * @protected + * @since 5.8.022 (2010-08-31) + */ + protected $svgcliptm = array(); + + /** + * ID of last SVG clipPath. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclipid = 0; + + /** + * SVG text. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgtext = ''; + + /** + * SVG text properties. + * @protected + * @since 5.8.013 (2010-08-23) + */ + protected $svgtextmode = array(); + + /** + * Array of SVG properties. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgstyles = array(array( + 'alignment-baseline' => 'auto', + 'baseline-shift' => 'baseline', + 'clip' => 'auto', + 'clip-path' => 'none', + 'clip-rule' => 'nonzero', + 'color' => 'black', + 'color-interpolation' => 'sRGB', + 'color-interpolation-filters' => 'linearRGB', + 'color-profile' => 'auto', + 'color-rendering' => 'auto', + 'cursor' => 'auto', + 'direction' => 'ltr', + 'display' => 'inline', + 'dominant-baseline' => 'auto', + 'enable-background' => 'accumulate', + 'fill' => 'black', + 'fill-opacity' => 1, + 'fill-rule' => 'nonzero', + 'filter' => 'none', + 'flood-color' => 'black', + 'flood-opacity' => 1, + 'font' => '', + 'font-family' => 'helvetica', + 'font-size' => 'medium', + 'font-size-adjust' => 'none', + 'font-stretch' => 'normal', + 'font-style' => 'normal', + 'font-variant' => 'normal', + 'font-weight' => 'normal', + 'glyph-orientation-horizontal' => '0deg', + 'glyph-orientation-vertical' => 'auto', + 'image-rendering' => 'auto', + 'kerning' => 'auto', + 'letter-spacing' => 'normal', + 'lighting-color' => 'white', + 'marker' => '', + 'marker-end' => 'none', + 'marker-mid' => 'none', + 'marker-start' => 'none', + 'mask' => 'none', + 'opacity' => 1, + 'overflow' => 'auto', + 'pointer-events' => 'visiblePainted', + 'shape-rendering' => 'auto', + 'stop-color' => 'black', + 'stop-opacity' => 1, + 'stroke' => 'none', + 'stroke-dasharray' => 'none', + 'stroke-dashoffset' => 0, + 'stroke-linecap' => 'butt', + 'stroke-linejoin' => 'miter', + 'stroke-miterlimit' => 4, + 'stroke-opacity' => 1, + 'stroke-width' => 1, + 'text-anchor' => 'start', + 'text-decoration' => 'none', + 'text-rendering' => 'auto', + 'unicode-bidi' => 'normal', + 'visibility' => 'visible', + 'word-spacing' => 'normal', + 'writing-mode' => 'lr-tb', + 'text-color' => 'black', + 'transfmatrix' => array(1, 0, 0, 1, 0, 0) + )); + + /** + * If true force sRGB color profile for all document. + * @protected + * @since 5.9.121 (2011-09-28) + */ + protected $force_srgb = false; + + /** + * If true set the document to PDF/A mode. + * @protected + * @since 5.9.121 (2011-09-27) + */ + protected $pdfa_mode = false; + + /** + * Document creation date-time + * @protected + * @since 5.9.152 (2012-03-22) + */ + protected $doc_creation_timestamp; + + /** + * Document modification date-time + * @protected + * @since 5.9.152 (2012-03-22) + */ + protected $doc_modification_timestamp; + + /** + * Custom XMP data. + * @protected + * @since 5.9.128 (2011-10-06) + */ + protected $custom_xmp = ''; + + /** + * Overprint mode array. + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @protected + * @since 5.9.152 (2012-03-23) + */ + protected $overprint = array('OP' => false, 'op' => false, 'OPM' => 0); + + /** + * Alpha mode array. + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @protected + * @since 5.9.152 (2012-03-23) + */ + protected $alpha = array('CA' => 1, 'ca' => 1, 'BM' => '/Normal', 'AIS' => false); + + /** + * Define the page boundaries boxes to be set on document. + * @protected + * @since 5.9.152 (2012-03-23) + */ + protected $page_boxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'); + + /** + * If true print TCPDF meta link. + * @protected + * @since 5.9.152 (2012-03-23) + */ + protected $tcpdflink = true; + + /** + * Cache array for computed GD gamma values. + * @protected + * @since 5.9.1632 (2012-06-05) + */ + protected $gdgammacache = array(); + + //------------------------------------------------------------ + // METHODS + //------------------------------------------------------------ + + /** + * This is the class constructor. + * It allows to set up the page format, the orientation and the measure unit used in all the methods (except for the font sizes). + * + * IMPORTANT: Please note that this method sets the mb_internal_encoding to ASCII, so if you are using the mbstring module functions with TCPDF you need to correctly set/unset the mb_internal_encoding when needed. + * + * @param $orientation (string) page orientation. Possible values are (case insensitive):<ul><li>P or Portrait (default)</li><li>L or Landscape</li><li>'' (empty string) for automatic orientation</li></ul> + * @param $unit (string) User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param $unicode (boolean) TRUE means that the input text is unicode (default = true) + * @param $encoding (string) Charset encoding (used only when converting back html entities); default is UTF-8. + * @param $diskcache (boolean) DEPRECATED FEATURE + * @param $pdfa (boolean) If TRUE set the document to PDF/A mode. + * @public + * @see getPageSizeFromFormat(), setPageFormat() + */ + public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false, $pdfa=false) { + /* Set internal character encoding to ASCII */ + if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) { + $this->internal_encoding = mb_internal_encoding(); + mb_internal_encoding('ASCII'); + } + // set file ID for trailer + $serformat = (is_array($format) ? json_encode($format) : $format); + $this->file_id = md5(TCPDF_STATIC::getRandomSeed('TCPDF'.$orientation.$unit.$serformat.$encoding)); + $this->font_obj_ids = array(); + $this->page_obj_id = array(); + $this->form_obj_id = array(); + // set pdf/a mode + $this->pdfa_mode = $pdfa; + $this->force_srgb = false; + // set language direction + $this->rtl = false; + $this->tmprtl = false; + // some checks + $this->_dochecks(); + // initialization of properties + $this->isunicode = $unicode; + $this->page = 0; + $this->transfmrk[0] = array(); + $this->pagedim = array(); + $this->n = 2; + $this->buffer = ''; + $this->pages = array(); + $this->state = 0; + $this->fonts = array(); + $this->FontFiles = array(); + $this->diffs = array(); + $this->images = array(); + $this->links = array(); + $this->gradients = array(); + $this->InFooter = false; + $this->lasth = 0; + $this->FontFamily = defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica'; + $this->FontStyle = ''; + $this->FontSizePt = 12; + $this->underline = false; + $this->overline = false; + $this->linethrough = false; + $this->DrawColor = '0 G'; + $this->FillColor = '0 g'; + $this->TextColor = '0 g'; + $this->ColorFlag = false; + $this->pdflayers = array(); + // encryption values + $this->encrypted = false; + $this->last_enc_key = ''; + // standard Unicode fonts + $this->CoreFonts = array( + 'courier'=>'Courier', + 'courierB'=>'Courier-Bold', + 'courierI'=>'Courier-Oblique', + 'courierBI'=>'Courier-BoldOblique', + 'helvetica'=>'Helvetica', + 'helveticaB'=>'Helvetica-Bold', + 'helveticaI'=>'Helvetica-Oblique', + 'helveticaBI'=>'Helvetica-BoldOblique', + 'times'=>'Times-Roman', + 'timesB'=>'Times-Bold', + 'timesI'=>'Times-Italic', + 'timesBI'=>'Times-BoldItalic', + 'symbol'=>'Symbol', + 'zapfdingbats'=>'ZapfDingbats' + ); + // set scale factor + $this->setPageUnit($unit); + // set page format and orientation + $this->setPageFormat($format, $orientation); + // page margins (1 cm) + $margin = 28.35 / $this->k; + $this->SetMargins($margin, $margin); + $this->clMargin = $this->lMargin; + $this->crMargin = $this->rMargin; + // internal cell padding + $cpadding = $margin / 10; + $this->setCellPaddings($cpadding, 0, $cpadding, 0); + // cell margins + $this->setCellMargins(0, 0, 0, 0); + // line width (0.2 mm) + $this->LineWidth = 0.57 / $this->k; + $this->linestyleWidth = sprintf('%F w', ($this->LineWidth * $this->k)); + $this->linestyleCap = '0 J'; + $this->linestyleJoin = '0 j'; + $this->linestyleDash = '[] 0 d'; + // automatic page break + $this->SetAutoPageBreak(true, (2 * $margin)); + // full width display mode + $this->SetDisplayMode('fullwidth'); + // compression + $this->SetCompression(); + // set default PDF version number + $this->setPDFVersion(); + $this->tcpdflink = true; + $this->encoding = $encoding; + $this->HREF = array(); + $this->getFontsList(); + $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->strokecolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255); + $this->extgstates = array(); + $this->setTextShadow(); + // signature + $this->sign = false; + $this->tsa_timestamp = false; + $this->tsa_data = array(); + $this->signature_appearance = array('page' => 1, 'rect' => '0 0 0 0', 'name' => 'Signature'); + $this->empty_signature_appearance = array(); + // user's rights + $this->ur['enabled'] = false; + $this->ur['document'] = '/FullSave'; + $this->ur['annots'] = '/Create/Delete/Modify/Copy/Import/Export'; + $this->ur['form'] = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate'; + $this->ur['signature'] = '/Modify'; + $this->ur['ef'] = '/Create/Delete/Modify/Import'; + $this->ur['formex'] = ''; + // set default JPEG quality + $this->jpeg_quality = 75; + // initialize some settings + TCPDF_FONTS::utf8Bidi(array(''), '', false, $this->isunicode, $this->CurrentFont); + // set default font + $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); + $this->setHeaderFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt)); + $this->setFooterFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt)); + // check if PCRE Unicode support is enabled + if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) { + // PCRE unicode support is turned ON + // \s : any whitespace character + // \p{Z} : any separator + // \p{Lo} : Unicode letter or ideograph that does not have lowercase and uppercase variants. Is used to chunk chinese words. + // \xa0 : Unicode Character 'NO-BREAK SPACE' (U+00A0) + //$this->setSpacesRE('/(?!\xa0)[\s\p{Z}\p{Lo}]/u'); + $this->setSpacesRE('/(?!\xa0)[\s\p{Z}]/u'); + } else { + // PCRE unicode support is turned OFF + $this->setSpacesRE('/[^\S\xa0]/'); + } + $this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + // set document creation and modification timestamp + $this->doc_creation_timestamp = time(); + $this->doc_modification_timestamp = $this->doc_creation_timestamp; + // get default graphic vars + $this->default_graphic_vars = $this->getGraphicVars(); + $this->header_xobj_autoreset = false; + $this->custom_xmp = ''; + // Call cleanup method after script execution finishes or exit() is called. + // NOTE: This will not be executed if the process is killed with a SIGTERM or SIGKILL signal. + register_shutdown_function(array($this, '_destroy'), true); + } + + /** + * Default destructor. + * @public + * @since 1.53.0.TC016 + */ + public function __destruct() { + // restore internal encoding + if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) { + mb_internal_encoding($this->internal_encoding); + } + // cleanup + $this->_destroy(true); + } + + /** + * Set the units of measure for the document. + * @param $unit (string) User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @public + * @since 3.0.015 (2008-06-06) + */ + public function setPageUnit($unit) { + $unit = strtolower($unit); + //Set scale factor + switch ($unit) { + // points + case 'px': + case 'pt': { + $this->k = 1; + break; + } + // millimeters + case 'mm': { + $this->k = $this->dpi / 25.4; + break; + } + // centimeters + case 'cm': { + $this->k = $this->dpi / 2.54; + break; + } + // inches + case 'in': { + $this->k = $this->dpi; + break; + } + // unsupported unit + default : { + $this->Error('Incorrect unit: '.$unit); + break; + } + } + $this->pdfunit = $unit; + if (isset($this->CurOrientation)) { + $this->setPageOrientation($this->CurOrientation); + } + } + + /** + * Change the format of the current page + * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() documentation or an array of two numbers (width, height) or an array containing the following measures and options:<ul> + * <li>['format'] = page format name (one of the above);</li> + * <li>['Rotate'] : The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.</li> + * <li>['PZ'] : The page's preferred zoom (magnification) factor.</li> + * <li>['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed:</li> + * <li>['MediaBox']['llx'] : lower-left x coordinate</li> + * <li>['MediaBox']['lly'] : lower-left y coordinate</li> + * <li>['MediaBox']['urx'] : upper-right x coordinate</li> + * <li>['MediaBox']['ury'] : upper-right y coordinate</li> + * <li>['CropBox'] : the visible region of default user space:</li> + * <li>['CropBox']['llx'] : lower-left x coordinate</li> + * <li>['CropBox']['lly'] : lower-left y coordinate</li> + * <li>['CropBox']['urx'] : upper-right x coordinate</li> + * <li>['CropBox']['ury'] : upper-right y coordinate</li> + * <li>['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment:</li> + * <li>['BleedBox']['llx'] : lower-left x coordinate</li> + * <li>['BleedBox']['lly'] : lower-left y coordinate</li> + * <li>['BleedBox']['urx'] : upper-right x coordinate</li> + * <li>['BleedBox']['ury'] : upper-right y coordinate</li> + * <li>['TrimBox'] : the intended dimensions of the finished page after trimming:</li> + * <li>['TrimBox']['llx'] : lower-left x coordinate</li> + * <li>['TrimBox']['lly'] : lower-left y coordinate</li> + * <li>['TrimBox']['urx'] : upper-right x coordinate</li> + * <li>['TrimBox']['ury'] : upper-right y coordinate</li> + * <li>['ArtBox'] : the extent of the page's meaningful content:</li> + * <li>['ArtBox']['llx'] : lower-left x coordinate</li> + * <li>['ArtBox']['lly'] : lower-left y coordinate</li> + * <li>['ArtBox']['urx'] : upper-right x coordinate</li> + * <li>['ArtBox']['ury'] : upper-right y coordinate</li> + * <li>['BoxColorInfo'] :specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for each of the possible page boundaries other than the MediaBox:</li> + * <li>['BoxColorInfo'][BOXTYPE]['C'] : an array of three numbers in the range 0-255, representing the components in the DeviceRGB colour space.</li> + * <li>['BoxColorInfo'][BOXTYPE]['W'] : the guideline width in default user units</li> + * <li>['BoxColorInfo'][BOXTYPE]['S'] : the guideline style: S = Solid; D = Dashed</li> + * <li>['BoxColorInfo'][BOXTYPE]['D'] : dash array defining a pattern of dashes and gaps to be used in drawing dashed guidelines</li> + * <li>['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation</li> + * <li>['trans']['Dur'] : The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.</li> + * <li>['trans']['S'] : transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade</li> + * <li>['trans']['D'] : The duration of the transition effect, in seconds.</li> + * <li>['trans']['Dm'] : (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.</li> + * <li>['trans']['M'] : (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.</li> + * <li>['trans']['Di'] : (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.</li> + * <li>['trans']['SS'] : (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.</li> + * <li>['trans']['B'] : (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.</li> + * </ul> + * @param $orientation (string) page orientation. Possible values are (case insensitive):<ul> + * <li>P or Portrait (default)</li> + * <li>L or Landscape</li> + * <li>'' (empty string) for automatic orientation</li> + * </ul> + * @protected + * @since 3.0.015 (2008-06-06) + * @see getPageSizeFromFormat() + */ + protected function setPageFormat($format, $orientation='P') { + if (!empty($format) AND isset($this->pagedim[$this->page])) { + // remove inherited values + unset($this->pagedim[$this->page]); + } + if (is_string($format)) { + // get page measures from format name + $pf = TCPDF_STATIC::getPageSizeFromFormat($format); + $this->fwPt = $pf[0]; + $this->fhPt = $pf[1]; + } else { + // the boundaries of the physical medium on which the page shall be displayed or printed + if (isset($format['MediaBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', $format['MediaBox']['llx'], $format['MediaBox']['lly'], $format['MediaBox']['urx'], $format['MediaBox']['ury'], false, $this->k, $this->pagedim); + $this->fwPt = (($format['MediaBox']['urx'] - $format['MediaBox']['llx']) * $this->k); + $this->fhPt = (($format['MediaBox']['ury'] - $format['MediaBox']['lly']) * $this->k); + } else { + if (isset($format[0]) AND is_numeric($format[0]) AND isset($format[1]) AND is_numeric($format[1])) { + $pf = array(($format[0] * $this->k), ($format[1] * $this->k)); + } else { + if (!isset($format['format'])) { + // default value + $format['format'] = 'A4'; + } + $pf = TCPDF_STATIC::getPageSizeFromFormat($format['format']); + } + $this->fwPt = $pf[0]; + $this->fhPt = $pf[1]; + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true, $this->k, $this->pagedim); + } + // the visible region of default user space + if (isset($format['CropBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'CropBox', $format['CropBox']['llx'], $format['CropBox']['lly'], $format['CropBox']['urx'], $format['CropBox']['ury'], false, $this->k, $this->pagedim); + } + // the region to which the contents of the page shall be clipped when output in a production environment + if (isset($format['BleedBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'BleedBox', $format['BleedBox']['llx'], $format['BleedBox']['lly'], $format['BleedBox']['urx'], $format['BleedBox']['ury'], false, $this->k, $this->pagedim); + } + // the intended dimensions of the finished page after trimming + if (isset($format['TrimBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'TrimBox', $format['TrimBox']['llx'], $format['TrimBox']['lly'], $format['TrimBox']['urx'], $format['TrimBox']['ury'], false, $this->k, $this->pagedim); + } + // the page's meaningful content (including potential white space) + if (isset($format['ArtBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'ArtBox', $format['ArtBox']['llx'], $format['ArtBox']['lly'], $format['ArtBox']['urx'], $format['ArtBox']['ury'], false, $this->k, $this->pagedim); + } + // specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for the various page boundaries + if (isset($format['BoxColorInfo'])) { + $this->pagedim[$this->page]['BoxColorInfo'] = $format['BoxColorInfo']; + } + if (isset($format['Rotate']) AND (($format['Rotate'] % 90) == 0)) { + // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90. + $this->pagedim[$this->page]['Rotate'] = intval($format['Rotate']); + } + if (isset($format['PZ'])) { + // The page's preferred zoom (magnification) factor + $this->pagedim[$this->page]['PZ'] = floatval($format['PZ']); + } + if (isset($format['trans'])) { + // The style and duration of the visual transition to use when moving from another page to the given page during a presentation + if (isset($format['trans']['Dur'])) { + // The page's display duration + $this->pagedim[$this->page]['trans']['Dur'] = floatval($format['trans']['Dur']); + } + $stansition_styles = array('Split', 'Blinds', 'Box', 'Wipe', 'Dissolve', 'Glitter', 'R', 'Fly', 'Push', 'Cover', 'Uncover', 'Fade'); + if (isset($format['trans']['S']) AND in_array($format['trans']['S'], $stansition_styles)) { + // The transition style that shall be used when moving to this page from another during a presentation + $this->pagedim[$this->page]['trans']['S'] = $format['trans']['S']; + $valid_effect = array('Split', 'Blinds'); + $valid_vals = array('H', 'V'); + if (isset($format['trans']['Dm']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['Dm'], $valid_vals)) { + $this->pagedim[$this->page]['trans']['Dm'] = $format['trans']['Dm']; + } + $valid_effect = array('Split', 'Box', 'Fly'); + $valid_vals = array('I', 'O'); + if (isset($format['trans']['M']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['M'], $valid_vals)) { + $this->pagedim[$this->page]['trans']['M'] = $format['trans']['M']; + } + $valid_effect = array('Wipe', 'Glitter', 'Fly', 'Cover', 'Uncover', 'Push'); + if (isset($format['trans']['Di']) AND in_array($format['trans']['S'], $valid_effect)) { + if (((($format['trans']['Di'] == 90) OR ($format['trans']['Di'] == 180)) AND ($format['trans']['S'] == 'Wipe')) + OR (($format['trans']['Di'] == 315) AND ($format['trans']['S'] == 'Glitter')) + OR (($format['trans']['Di'] == 0) OR ($format['trans']['Di'] == 270))) { + $this->pagedim[$this->page]['trans']['Di'] = intval($format['trans']['Di']); + } + } + if (isset($format['trans']['SS']) AND ($format['trans']['S'] == 'Fly')) { + $this->pagedim[$this->page]['trans']['SS'] = floatval($format['trans']['SS']); + } + if (isset($format['trans']['B']) AND ($format['trans']['B'] === true) AND ($format['trans']['S'] == 'Fly')) { + $this->pagedim[$this->page]['trans']['B'] = 'true'; + } + } else { + $this->pagedim[$this->page]['trans']['S'] = 'R'; + } + if (isset($format['trans']['D'])) { + // The duration of the transition effect, in seconds + $this->pagedim[$this->page]['trans']['D'] = floatval($format['trans']['D']); + } else { + $this->pagedim[$this->page]['trans']['D'] = 1; + } + } + } + $this->setPageOrientation($orientation); + } + + /** + * Set page orientation. + * @param $orientation (string) page orientation. Possible values are (case insensitive):<ul><li>P or Portrait (default)</li><li>L or Landscape</li><li>'' (empty string) for automatic orientation</li></ul> + * @param $autopagebreak (boolean) Boolean indicating if auto-page-break mode should be on or off. + * @param $bottommargin (float) bottom margin of the page. + * @public + * @since 3.0.015 (2008-06-06) + */ + public function setPageOrientation($orientation, $autopagebreak='', $bottommargin='') { + if (!isset($this->pagedim[$this->page]['MediaBox'])) { + // the boundaries of the physical medium on which the page shall be displayed or printed + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['CropBox'])) { + // the visible region of default user space + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'CropBox', $this->pagedim[$this->page]['MediaBox']['llx'], $this->pagedim[$this->page]['MediaBox']['lly'], $this->pagedim[$this->page]['MediaBox']['urx'], $this->pagedim[$this->page]['MediaBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['BleedBox'])) { + // the region to which the contents of the page shall be clipped when output in a production environment + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'BleedBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['TrimBox'])) { + // the intended dimensions of the finished page after trimming + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'TrimBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['ArtBox'])) { + // the page's meaningful content (including potential white space) + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'ArtBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['Rotate'])) { + // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90. + $this->pagedim[$this->page]['Rotate'] = 0; + } + if (!isset($this->pagedim[$this->page]['PZ'])) { + // The page's preferred zoom (magnification) factor + $this->pagedim[$this->page]['PZ'] = 1; + } + if ($this->fwPt > $this->fhPt) { + // landscape + $default_orientation = 'L'; + } else { + // portrait + $default_orientation = 'P'; + } + $valid_orientations = array('P', 'L'); + if (empty($orientation)) { + $orientation = $default_orientation; + } else { + $orientation = strtoupper($orientation[0]); + } + if (in_array($orientation, $valid_orientations) AND ($orientation != $default_orientation)) { + $this->CurOrientation = $orientation; + $this->wPt = $this->fhPt; + $this->hPt = $this->fwPt; + } else { + $this->CurOrientation = $default_orientation; + $this->wPt = $this->fwPt; + $this->hPt = $this->fhPt; + } + if ((abs($this->pagedim[$this->page]['MediaBox']['urx'] - $this->hPt) < $this->feps) AND (abs($this->pagedim[$this->page]['MediaBox']['ury'] - $this->wPt) < $this->feps)){ + // swap X and Y coordinates (change page orientation) + $this->pagedim = TCPDF_STATIC::swapPageBoxCoordinates($this->page, $this->pagedim); + } + $this->w = ($this->wPt / $this->k); + $this->h = ($this->hPt / $this->k); + if (TCPDF_STATIC::empty_string($autopagebreak)) { + if (isset($this->AutoPageBreak)) { + $autopagebreak = $this->AutoPageBreak; + } else { + $autopagebreak = true; + } + } + if (TCPDF_STATIC::empty_string($bottommargin)) { + if (isset($this->bMargin)) { + $bottommargin = $this->bMargin; + } else { + // default value = 2 cm + $bottommargin = 2 * 28.35 / $this->k; + } + } + $this->SetAutoPageBreak($autopagebreak, $bottommargin); + // store page dimensions + $this->pagedim[$this->page]['w'] = $this->wPt; + $this->pagedim[$this->page]['h'] = $this->hPt; + $this->pagedim[$this->page]['wk'] = $this->w; + $this->pagedim[$this->page]['hk'] = $this->h; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->pagedim[$this->page]['bm'] = $bottommargin; + $this->pagedim[$this->page]['lm'] = $this->lMargin; + $this->pagedim[$this->page]['rm'] = $this->rMargin; + $this->pagedim[$this->page]['pb'] = $autopagebreak; + $this->pagedim[$this->page]['or'] = $this->CurOrientation; + $this->pagedim[$this->page]['olm'] = $this->original_lMargin; + $this->pagedim[$this->page]['orm'] = $this->original_rMargin; + } + + /** + * Set regular expression to detect withespaces or word separators. + * The pattern delimiter must be the forward-slash character "/". + * Some example patterns are: + * <pre> + * Non-Unicode or missing PCRE unicode support: "/[^\S\xa0]/" + * Unicode and PCRE unicode support: "/(?!\xa0)[\s\p{Z}]/u" + * Unicode and PCRE unicode support in Chinese mode: "/(?!\xa0)[\s\p{Z}\p{Lo}]/u" + * if PCRE unicode support is turned ON ("\P" is the negate class of "\p"): + * \s : any whitespace character + * \p{Z} : any separator + * \p{Lo} : Unicode letter or ideograph that does not have lowercase and uppercase variants. Is used to chunk chinese words. + * \xa0 : Unicode Character 'NO-BREAK SPACE' (U+00A0) + * </pre> + * @param $re (string) regular expression (leave empty for default). + * @public + * @since 4.6.016 (2009-06-15) + */ + public function setSpacesRE($re='/[^\S\xa0]/') { + $this->re_spaces = $re; + $re_parts = explode('/', $re); + // get pattern parts + $this->re_space = array(); + if (isset($re_parts[1]) AND !empty($re_parts[1])) { + $this->re_space['p'] = $re_parts[1]; + } else { + $this->re_space['p'] = '[\s]'; + } + // set pattern modifiers + if (isset($re_parts[2]) AND !empty($re_parts[2])) { + $this->re_space['m'] = $re_parts[2]; + } else { + $this->re_space['m'] = ''; + } + } + + /** + * Enable or disable Right-To-Left language mode + * @param $enable (Boolean) if true enable Right-To-Left language mode. + * @param $resetx (Boolean) if true reset the X position on direction change. + * @public + * @since 2.0.000 (2008-01-03) + */ + public function setRTL($enable, $resetx=true) { + $enable = $enable ? true : false; + $resetx = ($resetx AND ($enable != $this->rtl)); + $this->rtl = $enable; + $this->tmprtl = false; + if ($resetx) { + $this->Ln(0); + } + } + + /** + * Return the RTL status + * @return boolean + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getRTL() { + return $this->rtl; + } + + /** + * Force temporary RTL language direction + * @param $mode (mixed) can be false, 'L' for LTR or 'R' for RTL + * @public + * @since 2.1.000 (2008-01-09) + */ + public function setTempRTL($mode) { + $newmode = false; + switch (strtoupper($mode)) { + case 'LTR': + case 'L': { + if ($this->rtl) { + $newmode = 'L'; + } + break; + } + case 'RTL': + case 'R': { + if (!$this->rtl) { + $newmode = 'R'; + } + break; + } + case false: + default: { + $newmode = false; + break; + } + } + $this->tmprtl = $newmode; + } + + /** + * Return the current temporary RTL status + * @return boolean + * @public + * @since 4.8.014 (2009-11-04) + */ + public function isRTLTextDir() { + return ($this->rtl OR ($this->tmprtl == 'R')); + } + + /** + * Set the last cell height. + * @param $h (float) cell height. + * @author Nicola Asuni + * @public + * @since 1.53.0.TC034 + */ + public function setLastH($h) { + $this->lasth = $h; + } + + /** + * Return the cell height + * @param $fontsize (int) Font size in internal units + * @param $padding (boolean) If true add cell padding + * @public + */ + public function getCellHeight($fontsize, $padding=TRUE) { + $height = ($fontsize * $this->cell_height_ratio); + if ($padding) { + $height += ($this->cell_padding['T'] + $this->cell_padding['B']); + } + return round($height, 6); + } + + /** + * Reset the last cell height. + * @public + * @since 5.9.000 (2010-10-03) + */ + public function resetLastH() { + $this->lasth = $this->getCellHeight($this->FontSize); + } + + /** + * Get the last cell height. + * @return last cell height + * @public + * @since 4.0.017 (2008-08-05) + */ + public function getLastH() { + return $this->lasth; + } + + /** + * Set the adjusting factor to convert pixels to user units. + * @param $scale (float) adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @public + * @since 1.5.2 + */ + public function setImageScale($scale) { + $this->imgscale = $scale; + } + + /** + * Returns the adjusting factor to convert pixels to user units. + * @return float adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @public + * @since 1.5.2 + */ + public function getImageScale() { + return $this->imgscale; + } + + /** + * Returns an array of page dimensions: + * <ul><li>$this->pagedim[$this->page]['w'] = page width in points</li><li>$this->pagedim[$this->page]['h'] = height in points</li><li>$this->pagedim[$this->page]['wk'] = page width in user units</li><li>$this->pagedim[$this->page]['hk'] = page height in user units</li><li>$this->pagedim[$this->page]['tm'] = top margin</li><li>$this->pagedim[$this->page]['bm'] = bottom margin</li><li>$this->pagedim[$this->page]['lm'] = left margin</li><li>$this->pagedim[$this->page]['rm'] = right margin</li><li>$this->pagedim[$this->page]['pb'] = auto page break</li><li>$this->pagedim[$this->page]['or'] = page orientation</li><li>$this->pagedim[$this->page]['olm'] = original left margin</li><li>$this->pagedim[$this->page]['orm'] = original right margin</li><li>$this->pagedim[$this->page]['Rotate'] = The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.</li><li>$this->pagedim[$this->page]['PZ'] = The page's preferred zoom (magnification) factor.</li><li>$this->pagedim[$this->page]['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation<ul><li>$this->pagedim[$this->page]['trans']['Dur'] = The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.</li><li>$this->pagedim[$this->page]['trans']['S'] = transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade</li><li>$this->pagedim[$this->page]['trans']['D'] = The duration of the transition effect, in seconds.</li><li>$this->pagedim[$this->page]['trans']['Dm'] = (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.</li><li>$this->pagedim[$this->page]['trans']['M'] = (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.</li><li>$this->pagedim[$this->page]['trans']['Di'] = (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.</li><li>$this->pagedim[$this->page]['trans']['SS'] = (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0. </li><li>$this->pagedim[$this->page]['trans']['B'] = (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.</li></ul></li><li>$this->pagedim[$this->page]['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed<ul><li>$this->pagedim[$this->page]['MediaBox']['llx'] = lower-left x coordinate in points</li><li>$this->pagedim[$this->page]['MediaBox']['lly'] = lower-left y coordinate in points</li><li>$this->pagedim[$this->page]['MediaBox']['urx'] = upper-right x coordinate in points</li><li>$this->pagedim[$this->page]['MediaBox']['ury'] = upper-right y coordinate in points</li></ul></li><li>$this->pagedim[$this->page]['CropBox'] : the visible region of default user space<ul><li>$this->pagedim[$this->page]['CropBox']['llx'] = lower-left x coordinate in points</li><li>$this->pagedim[$this->page]['CropBox']['lly'] = lower-left y coordinate in points</li><li>$this->pagedim[$this->page]['CropBox']['urx'] = upper-right x coordinate in points</li><li>$this->pagedim[$this->page]['CropBox']['ury'] = upper-right y coordinate in points</li></ul></li><li>$this->pagedim[$this->page]['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment<ul><li>$this->pagedim[$this->page]['BleedBox']['llx'] = lower-left x coordinate in points</li><li>$this->pagedim[$this->page]['BleedBox']['lly'] = lower-left y coordinate in points</li><li>$this->pagedim[$this->page]['BleedBox']['urx'] = upper-right x coordinate in points</li><li>$this->pagedim[$this->page]['BleedBox']['ury'] = upper-right y coordinate in points</li></ul></li><li>$this->pagedim[$this->page]['TrimBox'] : the intended dimensions of the finished page after trimming<ul><li>$this->pagedim[$this->page]['TrimBox']['llx'] = lower-left x coordinate in points</li><li>$this->pagedim[$this->page]['TrimBox']['lly'] = lower-left y coordinate in points</li><li>$this->pagedim[$this->page]['TrimBox']['urx'] = upper-right x coordinate in points</li><li>$this->pagedim[$this->page]['TrimBox']['ury'] = upper-right y coordinate in points</li></ul></li><li>$this->pagedim[$this->page]['ArtBox'] : the extent of the page's meaningful content<ul><li>$this->pagedim[$this->page]['ArtBox']['llx'] = lower-left x coordinate in points</li><li>$this->pagedim[$this->page]['ArtBox']['lly'] = lower-left y coordinate in points</li><li>$this->pagedim[$this->page]['ArtBox']['urx'] = upper-right x coordinate in points</li><li>$this->pagedim[$this->page]['ArtBox']['ury'] = upper-right y coordinate in points</li></ul></li></ul> + * @param $pagenum (int) page number (empty = current page) + * @return array of page dimensions. + * @author Nicola Asuni + * @public + * @since 4.5.027 (2009-03-16) + */ + public function getPageDimensions($pagenum='') { + if (empty($pagenum)) { + $pagenum = $this->page; + } + return $this->pagedim[$pagenum]; + } + + /** + * Returns the page width in units. + * @param $pagenum (int) page number (empty = current page) + * @return int page width. + * @author Nicola Asuni + * @public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageWidth($pagenum='') { + if (empty($pagenum)) { + return $this->w; + } + return $this->pagedim[$pagenum]['w']; + } + + /** + * Returns the page height in units. + * @param $pagenum (int) page number (empty = current page) + * @return int page height. + * @author Nicola Asuni + * @public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageHeight($pagenum='') { + if (empty($pagenum)) { + return $this->h; + } + return $this->pagedim[$pagenum]['h']; + } + + /** + * Returns the page break margin. + * @param $pagenum (int) page number (empty = current page) + * @return int page break margin. + * @author Nicola Asuni + * @public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getBreakMargin($pagenum='') { + if (empty($pagenum)) { + return $this->bMargin; + } + return $this->pagedim[$pagenum]['bm']; + } + + /** + * Returns the scale factor (number of points in user unit). + * @return int scale factor. + * @author Nicola Asuni + * @public + * @since 1.5.2 + */ + public function getScaleFactor() { + return $this->k; + } + + /** + * Defines the left, top and right margins. + * @param $left (float) Left margin. + * @param $top (float) Top margin. + * @param $right (float) Right margin. Default value is the left one. + * @param $keepmargins (boolean) if true overwrites the default page margins + * @public + * @since 1.0 + * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak() + */ + public function SetMargins($left, $top, $right=-1, $keepmargins=false) { + //Set left, top and right margins + $this->lMargin = $left; + $this->tMargin = $top; + if ($right == -1) { + $right = $left; + } + $this->rMargin = $right; + if ($keepmargins) { + // overwrite original values + $this->original_lMargin = $this->lMargin; + $this->original_rMargin = $this->rMargin; + } + } + + /** + * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin. + * @param $margin (float) The margin. + * @public + * @since 1.4 + * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetLeftMargin($margin) { + //Set left margin + $this->lMargin = $margin; + if (($this->page > 0) AND ($this->x < $margin)) { + $this->x = $margin; + } + } + + /** + * Defines the top margin. The method can be called before creating the first page. + * @param $margin (float) The margin. + * @public + * @since 1.5 + * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetTopMargin($margin) { + //Set top margin + $this->tMargin = $margin; + if (($this->page > 0) AND ($this->y < $margin)) { + $this->y = $margin; + } + } + + /** + * Defines the right margin. The method can be called before creating the first page. + * @param $margin (float) The margin. + * @public + * @since 1.5 + * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() + */ + public function SetRightMargin($margin) { + $this->rMargin = $margin; + if (($this->page > 0) AND ($this->x > ($this->w - $margin))) { + $this->x = $this->w - $margin; + } + } + + /** + * Set the same internal Cell padding for top, right, bottom, left- + * @param $pad (float) internal padding. + * @public + * @since 2.1.000 (2008-01-09) + * @see getCellPaddings(), setCellPaddings() + */ + public function SetCellPadding($pad) { + if ($pad >= 0) { + $this->cell_padding['L'] = $pad; + $this->cell_padding['T'] = $pad; + $this->cell_padding['R'] = $pad; + $this->cell_padding['B'] = $pad; + } + } + + /** + * Set the internal Cell paddings. + * @param $left (float) left padding + * @param $top (float) top padding + * @param $right (float) right padding + * @param $bottom (float) bottom padding + * @public + * @since 5.9.000 (2010-10-03) + * @see getCellPaddings(), SetCellPadding() + */ + public function setCellPaddings($left='', $top='', $right='', $bottom='') { + if (($left !== '') AND ($left >= 0)) { + $this->cell_padding['L'] = $left; + } + if (($top !== '') AND ($top >= 0)) { + $this->cell_padding['T'] = $top; + } + if (($right !== '') AND ($right >= 0)) { + $this->cell_padding['R'] = $right; + } + if (($bottom !== '') AND ($bottom >= 0)) { + $this->cell_padding['B'] = $bottom; + } + } + + /** + * Get the internal Cell padding array. + * @return array of padding values + * @public + * @since 5.9.000 (2010-10-03) + * @see setCellPaddings(), SetCellPadding() + */ + public function getCellPaddings() { + return $this->cell_padding; + } + + /** + * Set the internal Cell margins. + * @param $left (float) left margin + * @param $top (float) top margin + * @param $right (float) right margin + * @param $bottom (float) bottom margin + * @public + * @since 5.9.000 (2010-10-03) + * @see getCellMargins() + */ + public function setCellMargins($left='', $top='', $right='', $bottom='') { + if (($left !== '') AND ($left >= 0)) { + $this->cell_margin['L'] = $left; + } + if (($top !== '') AND ($top >= 0)) { + $this->cell_margin['T'] = $top; + } + if (($right !== '') AND ($right >= 0)) { + $this->cell_margin['R'] = $right; + } + if (($bottom !== '') AND ($bottom >= 0)) { + $this->cell_margin['B'] = $bottom; + } + } + + /** + * Get the internal Cell margin array. + * @return array of margin values + * @public + * @since 5.9.000 (2010-10-03) + * @see setCellMargins() + */ + public function getCellMargins() { + return $this->cell_margin; + } + + /** + * Adjust the internal Cell padding array to take account of the line width. + * @param $brd (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return array of adjustments + * @public + * @since 5.9.000 (2010-10-03) + */ + protected function adjustCellPadding($brd=0) { + if (empty($brd)) { + return; + } + if (is_string($brd)) { + // convert string to array + $slen = strlen($brd); + $newbrd = array(); + for ($i = 0; $i < $slen; ++$i) { + $newbrd[$brd[$i]] = true; + } + $brd = $newbrd; + } elseif (($brd === 1) OR ($brd === true) OR (is_numeric($brd) AND (intval($brd) > 0))) { + $brd = array('LRTB' => true); + } + if (!is_array($brd)) { + return; + } + // store current cell padding + $cp = $this->cell_padding; + // select border mode + if (isset($brd['mode'])) { + $mode = $brd['mode']; + unset($brd['mode']); + } else { + $mode = 'normal'; + } + // process borders + foreach ($brd as $border => $style) { + $line_width = $this->LineWidth; + if (is_array($style) AND isset($style['width'])) { + // get border width + $line_width = $style['width']; + } + $adj = 0; // line width inside the cell + switch ($mode) { + case 'ext': { + $adj = 0; + break; + } + case 'int': { + $adj = $line_width; + break; + } + case 'normal': + default: { + $adj = ($line_width / 2); + break; + } + } + // correct internal cell padding if required to avoid overlap between text and lines + if ((strpos($border,'T') !== false) AND ($this->cell_padding['T'] < $adj)) { + $this->cell_padding['T'] = $adj; + } + if ((strpos($border,'R') !== false) AND ($this->cell_padding['R'] < $adj)) { + $this->cell_padding['R'] = $adj; + } + if ((strpos($border,'B') !== false) AND ($this->cell_padding['B'] < $adj)) { + $this->cell_padding['B'] = $adj; + } + if ((strpos($border,'L') !== false) AND ($this->cell_padding['L'] < $adj)) { + $this->cell_padding['L'] = $adj; + } + } + return array('T' => ($this->cell_padding['T'] - $cp['T']), 'R' => ($this->cell_padding['R'] - $cp['R']), 'B' => ($this->cell_padding['B'] - $cp['B']), 'L' => ($this->cell_padding['L'] - $cp['L'])); + } + + /** + * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm. + * @param $auto (boolean) Boolean indicating if mode should be on or off. + * @param $margin (float) Distance from the bottom of the page. + * @public + * @since 1.0 + * @see Cell(), MultiCell(), AcceptPageBreak() + */ + public function SetAutoPageBreak($auto, $margin=0) { + $this->AutoPageBreak = $auto ? true : false; + $this->bMargin = $margin; + $this->PageBreakTrigger = $this->h - $margin; + } + + /** + * Return the auto-page-break mode (true or false). + * @return boolean auto-page-break mode + * @public + * @since 5.9.088 + */ + public function getAutoPageBreak() { + return $this->AutoPageBreak; + } + + /** + * Defines the way the document is to be displayed by the viewer. + * @param $zoom (mixed) The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use. <ul><li>fullpage: displays the entire page on screen </li><li>fullwidth: uses maximum width of window</li><li>real: uses real size (equivalent to 100% zoom)</li><li>default: uses viewer default mode</li></ul> + * @param $layout (string) The page layout. Possible values are:<ul><li>SinglePage Display one page at a time</li><li>OneColumn Display the pages in one column</li><li>TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left</li><li>TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right</li><li>TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left</li><li>TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right</li></ul> + * @param $mode (string) A name object specifying how the document should be displayed when opened:<ul><li>UseNone Neither document outline nor thumbnail images visible</li><li>UseOutlines Document outline visible</li><li>UseThumbs Thumbnail images visible</li><li>FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible</li><li>UseOC (PDF 1.5) Optional content group panel visible</li><li>UseAttachments (PDF 1.6) Attachments panel visible</li></ul> + * @public + * @since 1.2 + */ + public function SetDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') { + if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) { + $this->ZoomMode = $zoom; + } else { + $this->Error('Incorrect zoom display mode: '.$zoom); + } + $this->LayoutMode = TCPDF_STATIC::getPageLayoutMode($layout); + $this->PageMode = TCPDF_STATIC::getPageMode($mode); + } + + /** + * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default. + * Note: the Zlib extension is required for this feature. If not present, compression will be turned off. + * @param $compress (boolean) Boolean indicating if compression must be enabled. + * @public + * @since 1.4 + */ + public function SetCompression($compress=true) { + if (function_exists('gzcompress')) { + $this->compress = $compress ? true : false; + } else { + $this->compress = false; + } + } + + /** + * Set flag to force sRGB_IEC61966-2.1 black scaled ICC color profile for the whole document. + * @param $mode (boolean) If true force sRGB output intent. + * @public + * @since 5.9.121 (2011-09-28) + */ + public function setSRGBmode($mode=false) { + $this->force_srgb = $mode ? true : false; + } + + /** + * Turn on/off Unicode mode for document information dictionary (meta tags). + * This has effect only when unicode mode is set to false. + * @param $unicode (boolean) if true set the meta information in Unicode + * @since 5.9.027 (2010-12-01) + * @public + */ + public function SetDocInfoUnicode($unicode=true) { + $this->docinfounicode = $unicode ? true : false; + } + + /** + * Defines the title of the document. + * @param $title (string) The title. + * @public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject() + */ + public function SetTitle($title) { + $this->title = $title; + } + + /** + * Defines the subject of the document. + * @param $subject (string) The subject. + * @public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle() + */ + public function SetSubject($subject) { + $this->subject = $subject; + } + + /** + * Defines the author of the document. + * @param $author (string) The name of the author. + * @public + * @since 1.2 + * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle() + */ + public function SetAuthor($author) { + $this->author = $author; + } + + /** + * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'. + * @param $keywords (string) The list of keywords. + * @public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle() + */ + public function SetKeywords($keywords) { + $this->keywords = $keywords; + } + + /** + * Defines the creator of the document. This is typically the name of the application that generates the PDF. + * @param $creator (string) The name of the creator. + * @public + * @since 1.2 + * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle() + */ + public function SetCreator($creator) { + $this->creator = $creator; + } + + /** + * Throw an exception or print an error message and die if the K_TCPDF_PARSER_THROW_EXCEPTION_ERROR constant is set to true. + * @param $msg (string) The error message + * @public + * @since 1.0 + */ + public function Error($msg) { + // unset all class variables + $this->_destroy(true); + if (defined('K_TCPDF_THROW_EXCEPTION_ERROR') AND !K_TCPDF_THROW_EXCEPTION_ERROR) { + die('<strong>TCPDF ERROR: </strong>'.$msg); + } else { + throw new Exception('TCPDF ERROR: '.$msg); + } + } + + /** + * This method begins the generation of the PDF document. + * It is not necessary to call it explicitly because AddPage() does it automatically. + * Note: no page is created by this method + * @public + * @since 1.0 + * @see AddPage(), Close() + */ + public function Open() { + $this->state = 1; + } + + /** + * Terminates the PDF document. + * It is not necessary to call this method explicitly because Output() does it automatically. + * If the document contains no page, AddPage() is called to prevent from getting an invalid document. + * @public + * @since 1.0 + * @see Open(), Output() + */ + public function Close() { + if ($this->state == 3) { + return; + } + if ($this->page == 0) { + $this->AddPage(); + } + $this->endLayer(); + if ($this->tcpdflink) { + // save current graphic settings + $gvars = $this->getGraphicVars(); + $this->setEqualColumns(); + $this->lastpage(true); + $this->SetAutoPageBreak(false); + $this->x = 0; + $this->y = $this->h - (1 / $this->k); + $this->lMargin = 0; + $this->_outSaveGraphicsState(); + $font = defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica'; + $this->SetFont($font, '', 1); + $this->setTextRenderingMode(0, false, false); + $msg = "\x50\x6f\x77\x65\x72\x65\x64\x20\x62\x79\x20\x54\x43\x50\x44\x46\x20\x28\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29"; + $lnk = "\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67"; + $this->Cell(0, 0, $msg, 0, 0, 'L', 0, $lnk, 0, false, 'D', 'B'); + $this->_outRestoreGraphicsState(); + // restore graphic settings + $this->setGraphicVars($gvars); + } + // close page + $this->endPage(); + // close document + $this->_enddoc(); + // unset all class variables (except critical ones) + $this->_destroy(false); + } + + /** + * Move pointer at the specified document page and update page dimensions. + * @param $pnum (int) page number (1 ... numpages) + * @param $resetmargins (boolean) if true reset left, right, top margins and Y position. + * @public + * @since 2.1.000 (2008-01-07) + * @see getPage(), lastpage(), getNumPages() + */ + public function setPage($pnum, $resetmargins=false) { + if (($pnum == $this->page) AND ($this->state == 2)) { + return; + } + if (($pnum > 0) AND ($pnum <= $this->numpages)) { + $this->state = 2; + // save current graphic settings + //$gvars = $this->getGraphicVars(); + $oldpage = $this->page; + $this->page = $pnum; + $this->wPt = $this->pagedim[$this->page]['w']; + $this->hPt = $this->pagedim[$this->page]['h']; + $this->w = $this->pagedim[$this->page]['wk']; + $this->h = $this->pagedim[$this->page]['hk']; + $this->tMargin = $this->pagedim[$this->page]['tm']; + $this->bMargin = $this->pagedim[$this->page]['bm']; + $this->original_lMargin = $this->pagedim[$this->page]['olm']; + $this->original_rMargin = $this->pagedim[$this->page]['orm']; + $this->AutoPageBreak = $this->pagedim[$this->page]['pb']; + $this->CurOrientation = $this->pagedim[$this->page]['or']; + $this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin); + // restore graphic settings + //$this->setGraphicVars($gvars); + if ($resetmargins) { + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + $this->SetY($this->tMargin); + } else { + // account for booklet mode + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm']; + $this->lMargin += $deltam; + $this->rMargin -= $deltam; + } + } + } else { + $this->Error('Wrong page number on setPage() function: '.$pnum); + } + } + + /** + * Reset pointer to the last document page. + * @param $resetmargins (boolean) if true reset left, right, top margins and Y position. + * @public + * @since 2.0.000 (2008-01-04) + * @see setPage(), getPage(), getNumPages() + */ + public function lastPage($resetmargins=false) { + $this->setPage($this->getNumPages(), $resetmargins); + } + + /** + * Get current document page number. + * @return int page number + * @public + * @since 2.1.000 (2008-01-07) + * @see setPage(), lastpage(), getNumPages() + */ + public function getPage() { + return $this->page; + } + + /** + * Get the total number of insered pages. + * @return int number of pages + * @public + * @since 2.1.000 (2008-01-07) + * @see setPage(), getPage(), lastpage() + */ + public function getNumPages() { + return $this->numpages; + } + + /** + * Adds a new TOC (Table Of Content) page to the document. + * @param $orientation (string) page orientation. + * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param $keepmargins (boolean) if true overwrites the default page margins with the current margins + * @public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), endTOCPage() + */ + public function addTOCPage($orientation='', $format='', $keepmargins=false) { + $this->AddPage($orientation, $format, $keepmargins, true); + } + + /** + * Terminate the current TOC (Table Of Content) page + * @public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), addTOCPage() + */ + public function endTOCPage() { + $this->endPage(true); + } + + /** + * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled). + * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards. + * @param $orientation (string) page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul> + * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param $keepmargins (boolean) if true overwrites the default page margins with the current margins + * @param $tocpage (boolean) if true set the tocpage state to true (the added page will be used to display Table Of Content). + * @public + * @since 1.0 + * @see startPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat() + */ + public function AddPage($orientation='', $format='', $keepmargins=false, $tocpage=false) { + if ($this->inxobj) { + // we are inside an XObject template + return; + } + if (!isset($this->original_lMargin) OR $keepmargins) { + $this->original_lMargin = $this->lMargin; + } + if (!isset($this->original_rMargin) OR $keepmargins) { + $this->original_rMargin = $this->rMargin; + } + // terminate previous page + $this->endPage(); + // start new page + $this->startPage($orientation, $format, $tocpage); + } + + /** + * Terminate the current page + * @param $tocpage (boolean) if true set the tocpage state to false (end the page used to display Table Of Content). + * @public + * @since 4.2.010 (2008-11-14) + * @see AddPage(), startPage(), addTOCPage(), endTOCPage() + */ + public function endPage($tocpage=false) { + // check if page is already closed + if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) { + return; + } + // print page footer + $this->setFooter(); + // close page + $this->_endpage(); + // mark page as closed + $this->pageopen[$this->page] = false; + if ($tocpage) { + $this->tocpage = false; + } + } + + /** + * Starts a new page to the document. The page must be closed using the endPage() function. + * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards. + * @param $orientation (string) page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul> + * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param $tocpage (boolean) if true the page is designated to contain the Table-Of-Content. + * @since 4.2.010 (2008-11-14) + * @see AddPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat() + * @public + */ + public function startPage($orientation='', $format='', $tocpage=false) { + if ($tocpage) { + $this->tocpage = true; + } + // move page numbers of documents to be attached + if ($this->tocpage) { + // move reference to unexistent pages (used for page attachments) + // adjust outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if (!$outline['f'] AND ($outline['p'] > $this->numpages)) { + $this->outlines[$key]['p'] = ($outline['p'] + 1); + } + } + // adjust dests + $tmpdests = $this->dests; + foreach ($tmpdests as $key => $dest) { + if (!$dest['f'] AND ($dest['p'] > $this->numpages)) { + $this->dests[$key]['p'] = ($dest['p'] + 1); + } + } + // adjust links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if (!$link['f'] AND ($link['p'] > $this->numpages)) { + $this->links[$key]['p'] = ($link['p'] + 1); + } + } + } + if ($this->numpages > $this->page) { + // this page has been already added + $this->setPage($this->page + 1); + $this->SetY($this->tMargin); + return; + } + // start a new page + if ($this->state == 0) { + $this->Open(); + } + ++$this->numpages; + $this->swapMargins($this->booklet); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // start new page + $this->_beginpage($orientation, $format); + // mark page as open + $this->pageopen[$this->page] = true; + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print page header + $this->setHeader(); + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print table header (if any) + $this->setTableHeader(); + // set mark for empty page check + $this->emptypagemrk[$this->page]= $this->pagelen[$this->page]; + } + + /** + * Set start-writing mark on current page stream used to put borders and fills. + * Borders and fills are always created after content and inserted on the position marked by this method. + * This function must be called after calling Image() function for a background image. + * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions. + * @public + * @since 4.0.016 (2008-07-30) + */ + public function setPageMark() { + $this->intmrk[$this->page] = $this->pagelen[$this->page]; + $this->bordermrk[$this->page] = $this->intmrk[$this->page]; + $this->setContentMark(); + } + + /** + * Set start-writing mark on selected page. + * Borders and fills are always created after content and inserted on the position marked by this method. + * @param $page (int) page number (default is the current page) + * @protected + * @since 4.6.021 (2009-07-20) + */ + protected function setContentMark($page=0) { + if ($page <= 0) { + $page = $this->page; + } + if (isset($this->footerlen[$page])) { + $this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page]; + } else { + $this->cntmrk[$page] = $this->pagelen[$page]; + } + } + + /** + * Set header data. + * @param $ln (string) header image logo + * @param $lw (string) header image logo width in mm + * @param $ht (string) string to print as title on document header + * @param $hs (string) string to print on document header + * @param $tc (array) RGB array color for text. + * @param $lc (array) RGB array color for line. + * @public + */ + public function setHeaderData($ln='', $lw=0, $ht='', $hs='', $tc=array(0,0,0), $lc=array(0,0,0)) { + $this->header_logo = $ln; + $this->header_logo_width = $lw; + $this->header_title = $ht; + $this->header_string = $hs; + $this->header_text_color = $tc; + $this->header_line_color = $lc; + } + + /** + * Set footer data. + * @param $tc (array) RGB array color for text. + * @param $lc (array) RGB array color for line. + * @public + */ + public function setFooterData($tc=array(0,0,0), $lc=array(0,0,0)) { + $this->footer_text_color = $tc; + $this->footer_line_color = $lc; + } + + /** + * Returns header data: + * <ul><li>$ret['logo'] = logo image</li><li>$ret['logo_width'] = width of the image logo in user units</li><li>$ret['title'] = header title</li><li>$ret['string'] = header description string</li></ul> + * @return array() + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderData() { + $ret = array(); + $ret['logo'] = $this->header_logo; + $ret['logo_width'] = $this->header_logo_width; + $ret['title'] = $this->header_title; + $ret['string'] = $this->header_string; + $ret['text_color'] = $this->header_text_color; + $ret['line_color'] = $this->header_line_color; + return $ret; + } + + /** + * Set header margin. + * (minimum distance between header and top page margin) + * @param $hm (int) distance in user units + * @public + */ + public function setHeaderMargin($hm=10) { + $this->header_margin = $hm; + } + + /** + * Returns header margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @public + */ + public function getHeaderMargin() { + return $this->header_margin; + } + + /** + * Set footer margin. + * (minimum distance between footer and bottom page margin) + * @param $fm (int) distance in user units + * @public + */ + public function setFooterMargin($fm=10) { + $this->footer_margin = $fm; + } + + /** + * Returns footer margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @public + */ + public function getFooterMargin() { + return $this->footer_margin; + } + /** + * Set a flag to print page header. + * @param $val (boolean) set to true to print the page header (default), false otherwise. + * @public + */ + public function setPrintHeader($val=true) { + $this->print_header = $val ? true : false; + } + + /** + * Set a flag to print page footer. + * @param $val (boolean) set to true to print the page footer (default), false otherwise. + * @public + */ + public function setPrintFooter($val=true) { + $this->print_footer = $val ? true : false; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image + * @return float + * @public + */ + public function getImageRBX() { + return $this->img_rb_x; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image + * @return float + * @public + */ + public function getImageRBY() { + return $this->img_rb_y; + } + + /** + * Reset the xobject template used by Header() method. + * @public + */ + public function resetHeaderTemplate() { + $this->header_xobjid = false; + } + + /** + * Set a flag to automatically reset the xobject template used by Header() method at each page. + * @param $val (boolean) set to true to reset Header xobject template at each page, false otherwise. + * @public + */ + public function setHeaderTemplateAutoreset($val=true) { + $this->header_xobj_autoreset = $val ? true : false; + } + + /** + * This method is used to render the page header. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @public + */ + public function Header() { + if ($this->header_xobjid === false) { + // start a new XObject Template + $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin); + $headerfont = $this->getHeaderFont(); + $headerdata = $this->getHeaderData(); + $this->y = $this->header_margin; + if ($this->rtl) { + $this->x = $this->w - $this->original_rMargin; + } else { + $this->x = $this->original_lMargin; + } + if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { + $imgtype = TCPDF_IMAGES::getImageFileType(K_PATH_IMAGES.$headerdata['logo']); + if (($imgtype == 'eps') OR ($imgtype == 'ai')) { + $this->ImageEps(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); + } elseif ($imgtype == 'svg') { + $this->ImageSVG(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); + } else { + $this->Image(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); + } + $imgy = $this->getImageRBY(); + } else { + $imgy = $this->y; + } + $cell_height = $this->getCellHeight($headerfont[2] / $this->k); + // set starting margin for text data cell + if ($this->getRTL()) { + $header_x = $this->original_rMargin + ($headerdata['logo_width'] * 1.1); + } else { + $header_x = $this->original_lMargin + ($headerdata['logo_width'] * 1.1); + } + $cw = $this->w - $this->original_lMargin - $this->original_rMargin - ($headerdata['logo_width'] * 1.1); + $this->SetTextColorArray($this->header_text_color); + // header title + $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1); + $this->SetX($header_x); + $this->Cell($cw, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0); + // header string + $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]); + $this->SetX($header_x); + $this->MultiCell($cw, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false, true, 0, 'T', false); + // print an ending header line + $this->SetLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $headerdata['line_color'])); + $this->SetY((2.835 / $this->k) + max($imgy, $this->y)); + if ($this->rtl) { + $this->SetX($this->original_rMargin); + } else { + $this->SetX($this->original_lMargin); + } + $this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C'); + $this->endTemplate(); + } + // print header template + $x = 0; + $dx = 0; + if (!$this->header_xobj_autoreset AND $this->booklet AND (($this->page % 2) == 0)) { + // adjust margins for booklet mode + $dx = ($this->original_lMargin - $this->original_rMargin); + } + if ($this->rtl) { + $x = $this->w + $dx; + } else { + $x = 0 + $dx; + } + $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false); + if ($this->header_xobj_autoreset) { + // reset header xobject template at each page + $this->header_xobjid = false; + } + } + + /** + * This method is used to render the page footer. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @public + */ + public function Footer() { + $cur_y = $this->y; + $this->SetTextColorArray($this->footer_text_color); + //set style for cell border + $line_width = (0.85 / $this->k); + $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $this->footer_line_color)); + //print document barcode + $barcode = $this->getBarcode(); + if (!empty($barcode)) { + $this->Ln($line_width); + $barcode_width = round(($this->w - $this->original_lMargin - $this->original_rMargin) / 3); + $style = array( + 'position' => $this->rtl?'R':'L', + 'align' => $this->rtl?'R':'L', + 'stretch' => false, + 'fitwidth' => true, + 'cellfitalign' => '', + 'border' => false, + 'padding' => 0, + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'text' => false + ); + $this->write1DBarcode($barcode, 'C128', '', $cur_y + $line_width, '', (($this->footer_margin / 3) - $line_width), 0.3, $style, ''); + } + $w_page = isset($this->l['w_page']) ? $this->l['w_page'].' ' : ''; + if (empty($this->pagegroups)) { + $pagenumtxt = $w_page.$this->getAliasNumPage().' / '.$this->getAliasNbPages(); + } else { + $pagenumtxt = $w_page.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias(); + } + $this->SetY($cur_y); + //Print page number + if ($this->getRTL()) { + $this->SetX($this->original_rMargin); + $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L'); + } else { + $this->SetX($this->original_lMargin); + $this->Cell(0, 0, $this->getAliasRightShift().$pagenumtxt, 'T', 0, 'R'); + } + } + + /** + * This method is used to render the page header. + * @protected + * @since 4.0.012 (2008-07-24) + */ + protected function setHeader() { + if (!$this->print_header OR ($this->state != 2)) { + return; + } + $this->InHeader = true; + $this->setGraphicVars($this->default_graphic_vars); + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $newline = $this->newline; + $this->_outSaveGraphicsState(); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->SetCellPadding(0); + //set current position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->header_margin); + } else { + $this->SetXY($this->original_lMargin, $this->header_margin); + } + $this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]); + $this->Header(); + //restore position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->tMargin); + } else { + $this->SetXY($this->original_lMargin, $this->tMargin); + } + $this->_outRestoreGraphicsState(); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + $this->newline = $newline; + $this->InHeader = false; + } + + /** + * This method is used to render the page footer. + * @protected + * @since 4.0.012 (2008-07-24) + */ + protected function setFooter() { + if ($this->state != 2) { + return; + } + $this->InFooter = true; + // save current graphic settings + $gvars = $this->getGraphicVars(); + // mark this point + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + $this->_out("\n"); + if ($this->print_footer) { + $this->setGraphicVars($this->default_graphic_vars); + $this->current_column = 0; + $this->num_columns = 1; + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $this->_outSaveGraphicsState(); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->SetCellPadding(0); + //set current position + $footer_y = $this->h - $this->footer_margin; + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $footer_y); + } else { + $this->SetXY($this->original_lMargin, $footer_y); + } + $this->SetFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]); + $this->Footer(); + //restore position + if ($this->rtl) { + $this->SetXY($this->original_rMargin, $this->tMargin); + } else { + $this->SetXY($this->original_lMargin, $this->tMargin); + } + $this->_outRestoreGraphicsState(); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + } + // restore graphic settings + $this->setGraphicVars($gvars); + $this->current_column = $gvars['current_column']; + $this->num_columns = $gvars['num_columns']; + // calculate footer length + $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1; + $this->InFooter = false; + } + + /** + * Check if we are on the page body (excluding page header and footer). + * @return true if we are not in page header nor in page footer, false otherwise. + * @protected + * @since 5.9.091 (2011-06-15) + */ + protected function inPageBody() { + return (($this->InHeader === false) AND ($this->InFooter === false)); + } + + /** + * This method is used to render the table header on new page (if any). + * @protected + * @since 4.5.030 (2009-03-25) + */ + protected function setTableHeader() { + if ($this->num_columns > 1) { + // multi column mode + return; + } + if (isset($this->theadMargins['top'])) { + // restore the original top-margin + $this->tMargin = $this->theadMargins['top']; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->y = $this->tMargin; + } + if (!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)) { + // set margins + $prev_lMargin = $this->lMargin; + $prev_rMargin = $this->rMargin; + $prev_cell_padding = $this->cell_padding; + $this->lMargin = $this->theadMargins['lmargin'] + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$this->theadMargins['page']]['olm']); + $this->rMargin = $this->theadMargins['rmargin'] + ($this->pagedim[$this->page]['orm'] - $this->pagedim[$this->theadMargins['page']]['orm']); + $this->cell_padding = $this->theadMargins['cell_padding']; + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + // account for special "cell" mode + if ($this->theadMargins['cell']) { + if ($this->rtl) { + $this->x -= $this->cell_padding['R']; + } else { + $this->x += $this->cell_padding['L']; + } + } + $gvars = $this->getGraphicVars(); + if (!empty($this->theadMargins['gvars'])) { + // set the correct graphic style + $this->setGraphicVars($this->theadMargins['gvars']); + $this->rMargin = $gvars['rMargin']; + $this->lMargin = $gvars['lMargin']; + } + // print table header + $this->writeHTML($this->thead, false, false, false, false, ''); + $this->setGraphicVars($gvars); + // set new top margin to skip the table headers + if (!isset($this->theadMargins['top'])) { + $this->theadMargins['top'] = $this->tMargin; + } + // store end of header position + if (!isset($this->columns[0]['th'])) { + $this->columns[0]['th'] = array(); + } + $this->columns[0]['th']['\''.$this->page.'\''] = $this->y; + $this->tMargin = $this->y; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->lasth = 0; + $this->lMargin = $prev_lMargin; + $this->rMargin = $prev_rMargin; + $this->cell_padding = $prev_cell_padding; + } + } + + /** + * Returns the current page number. + * @return int page number + * @public + * @since 1.0 + * @see getAliasNbPages() + */ + public function PageNo() { + return $this->page; + } + + /** + * Returns the array of spot colors. + * @return (array) Spot colors array. + * @public + * @since 6.0.038 (2013-09-30) + */ + public function getAllSpotColors() { + return $this->spot_colors; + } + + /** + * Defines a new spot color. + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param $name (string) Full name of the spot color. + * @param $c (float) Cyan color for CMYK. Value between 0 and 100. + * @param $m (float) Magenta color for CMYK. Value between 0 and 100. + * @param $y (float) Yellow color for CMYK. Value between 0 and 100. + * @param $k (float) Key (Black) color for CMYK. Value between 0 and 100. + * @public + * @since 4.0.024 (2008-09-12) + * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function AddSpotColor($name, $c, $m, $y, $k) { + if (!isset($this->spot_colors[$name])) { + $i = (1 + count($this->spot_colors)); + $this->spot_colors[$name] = array('C' => $c, 'M' => $m, 'Y' => $y, 'K' => $k, 'name' => $name, 'i' => $i); + } + } + + /** + * Set the spot color for the specified type ('draw', 'fill', 'text'). + * @param $type (string) Type of object affected by this color: ('draw', 'fill', 'text'). + * @param $name (string) Name of the spot color. + * @param $tint (float) Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @return (string) PDF color command. + * @public + * @since 5.9.125 (2011-10-03) + */ + public function setSpotColor($type, $name, $tint=100) { + $spotcolor = TCPDF_COLORS::getSpotColor($name, $this->spot_colors); + if ($spotcolor === false) { + $this->Error('Undefined spot color: '.$name.', you must add it using the AddSpotColor() method.'); + } + $tint = (max(0, min(100, $tint)) / 100); + $pdfcolor = sprintf('/CS%d ', $this->spot_colors[$name]['i']); + switch ($type) { + case 'draw': { + $pdfcolor .= sprintf('CS %F SCN', $tint); + $this->DrawColor = $pdfcolor; + $this->strokecolor = $spotcolor; + break; + } + case 'fill': { + $pdfcolor .= sprintf('cs %F scn', $tint); + $this->FillColor = $pdfcolor; + $this->bgcolor = $spotcolor; + break; + } + case 'text': { + $pdfcolor .= sprintf('cs %F scn', $tint); + $this->TextColor = $pdfcolor; + $this->fgcolor = $spotcolor; + break; + } + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->state == 2) { + $this->_out($pdfcolor); + } + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['spot_colors'][$name] = $this->spot_colors[$name]; + } + return $pdfcolor; + } + + /** + * Defines the spot color used for all drawing operations (lines, rectangles and cell borders). + * @param $name (string) Name of the spot color. + * @param $tint (float) Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function SetDrawSpotColor($name, $tint=100) { + $this->setSpotColor('draw', $name, $tint); + } + + /** + * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds). + * @param $name (string) Name of the spot color. + * @param $tint (float) Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor() + */ + public function SetFillSpotColor($name, $tint=100) { + $this->setSpotColor('fill', $name, $tint); + } + + /** + * Defines the spot color used for text. + * @param $name (string) Name of the spot color. + * @param $tint (int) Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor() + */ + public function SetTextSpotColor($name, $tint=100) { + $this->setSpotColor('text', $name, $tint); + } + + /** + * Set the color array for the specified type ('draw', 'fill', 'text'). + * It can be expressed in RGB, CMYK or GRAY SCALE components. + * The method can be called before the first page is created and the value is retained from page to page. + * @param $type (string) Type of object affected by this color: ('draw', 'fill', 'text'). + * @param $color (array) Array of colors (1=gray, 3=RGB, 4=CMYK or 5=spotcolor=CMYK+name values). + * @param $ret (boolean) If true do not send the PDF command. + * @return (string) The PDF command or empty string. + * @public + * @since 3.1.000 (2008-06-11) + */ + public function setColorArray($type, $color, $ret=false) { + if (is_array($color)) { + $color = array_values($color); + // component: grey, RGB red or CMYK cyan + $c = isset($color[0]) ? $color[0] : -1; + // component: RGB green or CMYK magenta + $m = isset($color[1]) ? $color[1] : -1; + // component: RGB blue or CMYK yellow + $y = isset($color[2]) ? $color[2] : -1; + // component: CMYK black + $k = isset($color[3]) ? $color[3] : -1; + // color name + $name = isset($color[4]) ? $color[4] : ''; + if ($c >= 0) { + return $this->setColor($type, $c, $m, $y, $k, $ret, $name); + } + } + return ''; + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). + * It can be expressed in RGB, CMYK or GRAY SCALE components. + * The method can be called before the first page is created and the value is retained from page to page. + * @param $color (array) Array of colors (1, 3 or 4 values). + * @param $ret (boolean) If true do not send the PDF command. + * @return string the PDF command + * @public + * @since 3.1.000 (2008-06-11) + * @see SetDrawColor() + */ + public function SetDrawColorArray($color, $ret=false) { + return $this->setColorArray('draw', $color, $ret); + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). + * It can be expressed in RGB, CMYK or GRAY SCALE components. + * The method can be called before the first page is created and the value is retained from page to page. + * @param $color (array) Array of colors (1, 3 or 4 values). + * @param $ret (boolean) If true do not send the PDF command. + * @public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function SetFillColorArray($color, $ret=false) { + return $this->setColorArray('fill', $color, $ret); + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param $color (array) Array of colors (1, 3 or 4 values). + * @param $ret (boolean) If true do not send the PDF command. + * @public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function SetTextColorArray($color, $ret=false) { + return $this->setColorArray('text', $color, $ret); + } + + /** + * Defines the color used by the specified type ('draw', 'fill', 'text'). + * @param $type (string) Type of object affected by this color: ('draw', 'fill', 'text'). + * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param $col4 (float) KEY (BLACK) color for CMYK (0-100). + * @param $ret (boolean) If true do not send the command. + * @param $name (string) spot color name (if any) + * @return (string) The PDF command or empty string. + * @public + * @since 5.9.125 (2011-10-03) + */ + public function setColor($type, $col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + // set color by case + $suffix = ''; + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $col1 = max(0, min(255, $col1)); + $intcolor = array('G' => $col1); + $pdfcolor = sprintf('%F ', ($col1 / 255)); + $suffix = 'g'; + } elseif ($col4 == -1) { + // RGB + $col1 = max(0, min(255, $col1)); + $col2 = max(0, min(255, $col2)); + $col3 = max(0, min(255, $col3)); + $intcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + $pdfcolor = sprintf('%F %F %F ', ($col1 / 255), ($col2 / 255), ($col3 / 255)); + $suffix = 'rg'; + } else { + $col1 = max(0, min(100, $col1)); + $col2 = max(0, min(100, $col2)); + $col3 = max(0, min(100, $col3)); + $col4 = max(0, min(100, $col4)); + if (empty($name)) { + // CMYK + $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + $pdfcolor = sprintf('%F %F %F %F ', ($col1 / 100), ($col2 / 100), ($col3 / 100), ($col4 / 100)); + $suffix = 'k'; + } else { + // SPOT COLOR + $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4, 'name' => $name); + $this->AddSpotColor($name, $col1, $col2, $col3, $col4); + $pdfcolor = $this->setSpotColor($type, $name, 100); + } + } + switch ($type) { + case 'draw': { + $pdfcolor .= strtoupper($suffix); + $this->DrawColor = $pdfcolor; + $this->strokecolor = $intcolor; + break; + } + case 'fill': { + $pdfcolor .= $suffix; + $this->FillColor = $pdfcolor; + $this->bgcolor = $intcolor; + break; + } + case 'text': { + $pdfcolor .= $suffix; + $this->TextColor = $pdfcolor; + $this->fgcolor = $intcolor; + break; + } + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if (($type != 'text') AND ($this->state == 2)) { + if (!$ret) { + $this->_out($pdfcolor); + } + return $pdfcolor; + } + return ''; + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param $col4 (float) KEY (BLACK) color for CMYK (0-100). + * @param $ret (boolean) If true do not send the command. + * @param $name (string) spot color name (if any) + * @return string the PDF command + * @public + * @since 1.3 + * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell() + */ + public function SetDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + return $this->setColor('draw', $col1, $col2, $col3, $col4, $ret, $name); + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param $col4 (float) KEY (BLACK) color for CMYK (0-100). + * @param $ret (boolean) If true do not send the command. + * @param $name (string) Spot color name (if any). + * @return (string) The PDF command. + * @public + * @since 1.3 + * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell() + */ + public function SetFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + return $this->setColor('fill', $col1, $col2, $col3, $col4, $ret, $name); + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param $col1 (float) GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param $col2 (float) GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param $col3 (float) BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param $col4 (float) KEY (BLACK) color for CMYK (0-100). + * @param $ret (boolean) If true do not send the command. + * @param $name (string) Spot color name (if any). + * @return (string) Empty string. + * @public + * @since 1.3 + * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell() + */ + public function SetTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + return $this->setColor('text', $col1, $col2, $col3, $col4, $ret, $name); + } + + /** + * Returns the length of a string in user unit. A font must be selected.<br> + * @param $s (string) The string whose length is to be computed + * @param $fontname (string) Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param $fontstyle (string) Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line-through</li><li>O: overline</li></ul> or any combination. The default value is regular. + * @param $fontsize (float) Font size in points. The default value is the current size. + * @param $getarray (boolean) if true returns an array of characters widths, if false returns the total length. + * @return mixed int total string length or array of characted widths + * @author Nicola Asuni + * @public + * @since 1.2 + */ + public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + return $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont), $s, $this->tmprtl, $this->isunicode, $this->CurrentFont), $fontname, $fontstyle, $fontsize, $getarray); + } + + /** + * Returns the string length of an array of chars in user unit or an array of characters widths. A font must be selected.<br> + * @param $sa (string) The array of chars whose total length is to be computed + * @param $fontname (string) Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param $fontstyle (string) Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line through</li><li>O: overline</li></ul> or any combination. The default value is regular. + * @param $fontsize (float) Font size in points. The default value is the current size. + * @param $getarray (boolean) if true returns an array of characters widths, if false returns the total length. + * @return mixed int total string length or array of characted widths + * @author Nicola Asuni + * @public + * @since 2.4.000 (2008-03-06) + */ + public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + // store current values + if (!TCPDF_STATIC::empty_string($fontname)) { + $prev_FontFamily = $this->FontFamily; + $prev_FontStyle = $this->FontStyle; + $prev_FontSizePt = $this->FontSizePt; + $this->SetFont($fontname, $fontstyle, $fontsize, '', 'default', false); + } + // convert UTF-8 array to Latin1 if required + if ($this->isunicode AND (!$this->isUnicodeFont())) { + $sa = TCPDF_FONTS::UTF8ArrToLatin1Arr($sa); + } + $w = 0; // total width + $wa = array(); // array of characters widths + foreach ($sa as $ck => $char) { + // character width + $cw = $this->GetCharWidth($char, isset($sa[($ck + 1)])); + $wa[] = $cw; + $w += $cw; + } + // restore previous values + if (!TCPDF_STATIC::empty_string($fontname)) { + $this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt, '', 'default', false); + } + if ($getarray) { + return $wa; + } + return $w; + } + + /** + * Returns the length of the char in user unit for the current font considering current stretching and spacing (tracking). + * @param $char (int) The char code whose length is to be returned + * @param $notlast (boolean) If false ignore the font-spacing. + * @return float char width + * @author Nicola Asuni + * @public + * @since 2.4.000 (2008-03-06) + */ + public function GetCharWidth($char, $notlast=true) { + // get raw width + $chw = $this->getRawCharWidth($char); + if (($this->font_spacing < 0) OR (($this->font_spacing > 0) AND $notlast)) { + // increase/decrease font spacing + $chw += $this->font_spacing; + } + if ($this->font_stretching != 100) { + // fixed stretching mode + $chw *= ($this->font_stretching / 100); + } + return $chw; + } + + /** + * Returns the length of the char in user unit for the current font. + * @param $char (int) The char code whose length is to be returned + * @return float char width + * @author Nicola Asuni + * @public + * @since 5.9.000 (2010-09-28) + */ + public function getRawCharWidth($char) { + if ($char == 173) { + // SHY character will not be printed + return (0); + } + if (isset($this->CurrentFont['cw'][$char])) { + $w = $this->CurrentFont['cw'][$char]; + } elseif (isset($this->CurrentFont['dw'])) { + // default width + $w = $this->CurrentFont['dw']; + } elseif (isset($this->CurrentFont['cw'][32])) { + // default width + $w = $this->CurrentFont['cw'][32]; + } else { + $w = 600; + } + return $this->getAbsFontMeasure($w); + } + + /** + * Returns the numbero of characters in a string. + * @param $s (string) The input string. + * @return int number of characters + * @public + * @since 2.0.0001 (2008-01-07) + */ + public function GetNumChars($s) { + if ($this->isUnicodeFont()) { + return count(TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont)); + } + return strlen($s); + } + + /** + * Fill the list of available fonts ($this->fontlist). + * @protected + * @since 4.0.013 (2008-07-28) + */ + protected function getFontsList() { + if (($fontsdir = opendir(TCPDF_FONTS::_getfontpath())) !== false) { + while (($file = readdir($fontsdir)) !== false) { + if (substr($file, -4) == '.php') { + array_push($this->fontlist, strtolower(basename($file, '.php'))); + } + } + closedir($fontsdir); + } + } + + /** + * Imports a TrueType, Type1, core, or CID0 font and makes it available. + * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT). + * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated. + * @param $family (string) Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font. + * @param $style (string) Font style. Possible values are (case insensitive):<ul><li>empty string: regular (default)</li><li>B: bold</li><li>I: italic</li><li>BI or IB: bold italic</li></ul> + * @param $fontfile (string) The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @return array containing the font data, or false in case of error. + * @param $subset (mixed) if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. + * @public + * @since 1.5 + * @see SetFont(), setFontSubsetting() + */ + public function AddFont($family, $style='', $fontfile='', $subset='default') { + if ($subset === 'default') { + $subset = $this->font_subsetting; + } + if ($this->pdfa_mode) { + $subset = false; + } + if (TCPDF_STATIC::empty_string($family)) { + if (!TCPDF_STATIC::empty_string($this->FontFamily)) { + $family = $this->FontFamily; + } else { + $this->Error('Empty font family'); + } + } + // move embedded styles on $style + if (substr($family, -1) == 'I') { + $style .= 'I'; + $family = substr($family, 0, -1); + } + if (substr($family, -1) == 'B') { + $style .= 'B'; + $family = substr($family, 0, -1); + } + // normalize family name + $family = strtolower($family); + if ((!$this->isunicode) AND ($family == 'arial')) { + $family = 'helvetica'; + } + if (($family == 'symbol') OR ($family == 'zapfdingbats')) { + $style = ''; + } + if ($this->pdfa_mode AND (isset($this->CoreFonts[$family]))) { + // all fonts must be embedded + $family = 'pdfa'.$family; + } + $tempstyle = strtoupper($style); + $style = ''; + // underline + if (strpos($tempstyle, 'U') !== false) { + $this->underline = true; + } else { + $this->underline = false; + } + // line-through (deleted) + if (strpos($tempstyle, 'D') !== false) { + $this->linethrough = true; + } else { + $this->linethrough = false; + } + // overline + if (strpos($tempstyle, 'O') !== false) { + $this->overline = true; + } else { + $this->overline = false; + } + // bold + if (strpos($tempstyle, 'B') !== false) { + $style .= 'B'; + } + // oblique + if (strpos($tempstyle, 'I') !== false) { + $style .= 'I'; + } + $bistyle = $style; + $fontkey = $family.$style; + $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '').($this->overline ? 'O' : ''); + $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style); + // check if the font has been already added + $fb = $this->getFontBuffer($fontkey); + if ($fb !== false) { + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $fb['i']; + } + return $fontdata; + } + // get specified font directory (if any) + $fontdir = false; + if (!TCPDF_STATIC::empty_string($fontfile)) { + $fontdir = dirname($fontfile); + if (TCPDF_STATIC::empty_string($fontdir) OR ($fontdir == '.')) { + $fontdir = ''; + } else { + $fontdir .= '/'; + } + } + // true when the font style variation is missing + $missing_style = false; + // search and include font file + if (TCPDF_STATIC::empty_string($fontfile) OR (!@file_exists($fontfile))) { + // build a standard filenames for specified font + $tmp_fontfile = str_replace(' ', '', $family).strtolower($style).'.php'; + $fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir); + if (TCPDF_STATIC::empty_string($fontfile)) { + $missing_style = true; + // try to remove the style part + $tmp_fontfile = str_replace(' ', '', $family).'.php'; + $fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir); + } + } + // include font file + if (!TCPDF_STATIC::empty_string($fontfile) AND (@file_exists($fontfile))) { + include($fontfile); + } else { + $this->Error('Could not include font definition file: '.$family.''); + } + // check font parameters + if ((!isset($type)) OR (!isset($cw))) { + $this->Error('The font definition file has a bad format: '.$fontfile.''); + } + // SET default parameters + if (!isset($file) OR TCPDF_STATIC::empty_string($file)) { + $file = ''; + } + if (!isset($enc) OR TCPDF_STATIC::empty_string($enc)) { + $enc = ''; + } + if (!isset($cidinfo) OR TCPDF_STATIC::empty_string($cidinfo)) { + $cidinfo = array('Registry'=>'Adobe', 'Ordering'=>'Identity', 'Supplement'=>0); + $cidinfo['uni2cid'] = array(); + } + if (!isset($ctg) OR TCPDF_STATIC::empty_string($ctg)) { + $ctg = ''; + } + if (!isset($desc) OR TCPDF_STATIC::empty_string($desc)) { + $desc = array(); + } + if (!isset($up) OR TCPDF_STATIC::empty_string($up)) { + $up = -100; + } + if (!isset($ut) OR TCPDF_STATIC::empty_string($ut)) { + $ut = 50; + } + if (!isset($cw) OR TCPDF_STATIC::empty_string($cw)) { + $cw = array(); + } + if (!isset($dw) OR TCPDF_STATIC::empty_string($dw)) { + // set default width + if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) { + $dw = $desc['MissingWidth']; + } elseif (isset($cw[32])) { + $dw = $cw[32]; + } else { + $dw = 600; + } + } + ++$this->numfonts; + if ($type == 'core') { + $name = $this->CoreFonts[$fontkey]; + $subset = false; + } elseif (($type == 'TrueType') OR ($type == 'Type1')) { + $subset = false; + } elseif ($type == 'TrueTypeUnicode') { + $enc = 'Identity-H'; + } elseif ($type == 'cidfont0') { + if ($this->pdfa_mode) { + $this->Error('All fonts must be embedded in PDF/A mode!'); + } + } else { + $this->Error('Unknow font type: '.$type.''); + } + // set name if unset + if (!isset($name) OR empty($name)) { + $name = $fontkey; + } + // create artificial font style variations if missing (only works with non-embedded fonts) + if (($type != 'core') AND $missing_style) { + // style variations + $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic'); + $name .= $styles[$bistyle]; + // artificial bold + if (strpos($bistyle, 'B') !== false) { + if (isset($desc['StemV'])) { + // from normal to bold + $desc['StemV'] = round($desc['StemV'] * 1.75); + } else { + // bold + $desc['StemV'] = 123; + } + } + // artificial italic + if (strpos($bistyle, 'I') !== false) { + if (isset($desc['ItalicAngle'])) { + $desc['ItalicAngle'] -= 11; + } else { + $desc['ItalicAngle'] = -11; + } + if (isset($desc['Flags'])) { + $desc['Flags'] |= 64; //bit 7 + } else { + $desc['Flags'] = 64; + } + } + } + // check if the array of characters bounding boxes is defined + if (!isset($cbbox)) { + $cbbox = array(); + } + // initialize subsetchars + $subsetchars = array_fill(0, 255, true); + $this->setFontBuffer($fontkey, array('fontkey' => $fontkey, 'i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'cbbox' => $cbbox, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg, 'subset' => $subset, 'subsetchars' => $subsetchars)); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $this->numfonts; + } + if (isset($diff) AND (!empty($diff))) { + //Search existing encodings + $d = 0; + $nb = count($this->diffs); + for ($i=1; $i <= $nb; ++$i) { + if ($this->diffs[$i] == $diff) { + $d = $i; + break; + } + } + if ($d == 0) { + $d = $nb + 1; + $this->diffs[$d] = $diff; + } + $this->setFontSubBuffer($fontkey, 'diff', $d); + } + if (!TCPDF_STATIC::empty_string($file)) { + if (!isset($this->FontFiles[$file])) { + if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) { + $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey)); + } elseif ($type != 'core') { + $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey)); + } + } else { + // update fontkeys that are sharing this font file + $this->FontFiles[$file]['subset'] = ($this->FontFiles[$file]['subset'] AND $subset); + if (!in_array($fontkey, $this->FontFiles[$file]['fontkeys'])) { + $this->FontFiles[$file]['fontkeys'][] = $fontkey; + } + } + } + return $fontdata; + } + + /** + * Sets the font used to print character strings. + * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe). + * The method can be called before the first page is created and the font is retained from page to page. + * If you just wish to change the current font size, it is simpler to call SetFontSize(). + * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:<ul><li>They are in the current directory (the one where the running script lies)</li><li>They are in one of the directories defined by the include_path parameter</li><li>They are in the directory defined by the K_PATH_FONTS constant</li></ul><br /> + * @param $family (string) Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):<ul><li>times (Times-Roman)</li><li>timesb (Times-Bold)</li><li>timesi (Times-Italic)</li><li>timesbi (Times-BoldItalic)</li><li>helvetica (Helvetica)</li><li>helveticab (Helvetica-Bold)</li><li>helveticai (Helvetica-Oblique)</li><li>helveticabi (Helvetica-BoldOblique)</li><li>courier (Courier)</li><li>courierb (Courier-Bold)</li><li>courieri (Courier-Oblique)</li><li>courierbi (Courier-BoldOblique)</li><li>symbol (Symbol)</li><li>zapfdingbats (ZapfDingbats)</li></ul> It is also possible to pass an empty string. In that case, the current family is retained. + * @param $style (string) Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line through</li><li>O: overline</li></ul> or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined. + * @param $size (float) Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12 + * @param $fontfile (string) The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @param $subset (mixed) if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. + * @param $out (boolean) if true output the font size command, otherwise only set the font properties. + * @author Nicola Asuni + * @public + * @since 1.0 + * @see AddFont(), SetFontSize() + */ + public function SetFont($family, $style='', $size=null, $fontfile='', $subset='default', $out=true) { + //Select a font; size given in points + if ($size === null) { + $size = $this->FontSizePt; + } + if ($size < 0) { + $size = 0; + } + // try to add font (if not already added) + $fontdata = $this->AddFont($family, $style, $fontfile, $subset); + $this->FontFamily = $fontdata['family']; + $this->FontStyle = $fontdata['style']; + if (isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])) { + // save subset chars of the previous font + $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); + } + $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']); + $this->SetFontSize($size, $out); + } + + /** + * Defines the size of the current font. + * @param $size (float) The font size in points. + * @param $out (boolean) if true output the font size command, otherwise only set the font properties. + * @public + * @since 1.0 + * @see SetFont() + */ + public function SetFontSize($size, $out=true) { + // font size in points + $this->FontSizePt = $size; + // font size in user units + $this->FontSize = $size / $this->k; + // calculate some font metrics + if (isset($this->CurrentFont['desc']['FontBBox'])) { + $bbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1)); + $font_height = ((intval($bbox[3]) - intval($bbox[1])) * $size / 1000); + } else { + $font_height = $size * 1.219; + } + if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) { + $font_ascent = ($this->CurrentFont['desc']['Ascent'] * $size / 1000); + } + if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] <= 0)) { + $font_descent = (- $this->CurrentFont['desc']['Descent'] * $size / 1000); + } + if (!isset($font_ascent) AND !isset($font_descent)) { + // core font + $font_ascent = 0.76 * $font_height; + $font_descent = $font_height - $font_ascent; + } elseif (!isset($font_descent)) { + $font_descent = $font_height - $font_ascent; + } elseif (!isset($font_ascent)) { + $font_ascent = $font_height - $font_descent; + } + $this->FontAscent = ($font_ascent / $this->k); + $this->FontDescent = ($font_descent / $this->k); + if ($out AND ($this->page > 0) AND (isset($this->CurrentFont['i'])) AND ($this->state == 2)) { + $this->_out(sprintf('BT /F%d %F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + } + } + + /** + * Returns the bounding box of the current font in user units. + * @return array + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getFontBBox() { + $fbbox = array(); + if (isset($this->CurrentFont['desc']['FontBBox'])) { + $tmpbbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1)); + $fbbox = array_map(array($this,'getAbsFontMeasure'), $tmpbbox); + } else { + // Find max width + if (isset($this->CurrentFont['desc']['MaxWidth'])) { + $maxw = $this->getAbsFontMeasure(intval($this->CurrentFont['desc']['MaxWidth'])); + } else { + $maxw = 0; + if (isset($this->CurrentFont['desc']['MissingWidth'])) { + $maxw = max($maxw, $this->CurrentFont['desc']['MissingWidth']); + } + if (isset($this->CurrentFont['desc']['AvgWidth'])) { + $maxw = max($maxw, $this->CurrentFont['desc']['AvgWidth']); + } + if (isset($this->CurrentFont['dw'])) { + $maxw = max($maxw, $this->CurrentFont['dw']); + } + foreach ($this->CurrentFont['cw'] as $char => $w) { + $maxw = max($maxw, $w); + } + if ($maxw == 0) { + $maxw = 600; + } + $maxw = $this->getAbsFontMeasure($maxw); + } + $fbbox = array(0, (0 - $this->FontDescent), $maxw, $this->FontAscent); + } + return $fbbox; + } + + /** + * Convert a relative font measure into absolute value. + * @param $s (int) Font measure. + * @return float Absolute measure. + * @since 5.9.186 (2012-09-13) + */ + public function getAbsFontMeasure($s) { + return ($s * $this->FontSize / 1000); + } + + /** + * Returns the glyph bounding box of the specified character in the current font in user units. + * @param $char (int) Input character code. + * @return mixed array(xMin, yMin, xMax, yMax) or FALSE if not defined. + * @since 5.9.186 (2012-09-13) + */ + public function getCharBBox($char) { + $c = intval($char); + if (isset($this->CurrentFont['cw'][$c])) { + // glyph is defined ... use zero width & height for glyphs without outlines + $result = array(0,0,0,0); + if (isset($this->CurrentFont['cbbox'][$c])) { + $result = $this->CurrentFont['cbbox'][$c]; + } + return array_map(array($this,'getAbsFontMeasure'), $result); + } + return false; + } + + /** + * Return the font descent value + * @param $font (string) font name + * @param $style (string) font style + * @param $size (float) The size (in points) + * @return int font descent + * @public + * @author Nicola Asuni + * @since 4.9.003 (2010-03-30) + */ + public function getFontDescent($font, $style='', $size=0) { + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + if (isset($fontinfo['desc']['Descent']) AND ($fontinfo['desc']['Descent'] <= 0)) { + $descent = (- $fontinfo['desc']['Descent'] * $size / 1000); + } else { + $descent = (1.219 * 0.24 * $size); + } + return ($descent / $this->k); + } + + /** + * Return the font ascent value. + * @param $font (string) font name + * @param $style (string) font style + * @param $size (float) The size (in points) + * @return int font ascent + * @public + * @author Nicola Asuni + * @since 4.9.003 (2010-03-30) + */ + public function getFontAscent($font, $style='', $size=0) { + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + if (isset($fontinfo['desc']['Ascent']) AND ($fontinfo['desc']['Ascent'] > 0)) { + $ascent = ($fontinfo['desc']['Ascent'] * $size / 1000); + } else { + $ascent = 1.219 * 0.76 * $size; + } + return ($ascent / $this->k); + } + + /** + * Return true in the character is present in the specified font. + * @param $char (mixed) Character to check (integer value or string) + * @param $font (string) Font name (family name). + * @param $style (string) Font style. + * @return (boolean) true if the char is defined, false otherwise. + * @public + * @since 5.9.153 (2012-03-28) + */ + public function isCharDefined($char, $font='', $style='') { + if (is_string($char)) { + // get character code + $char = TCPDF_FONTS::UTF8StringToArray($char, $this->isunicode, $this->CurrentFont); + $char = $char[0]; + } + if (TCPDF_STATIC::empty_string($font)) { + if (TCPDF_STATIC::empty_string($style)) { + return (isset($this->CurrentFont['cw'][intval($char)])); + } + $font = $this->FontFamily; + } + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + return (isset($fontinfo['cw'][intval($char)])); + } + + /** + * Replace missing font characters on selected font with specified substitutions. + * @param $text (string) Text to process. + * @param $font (string) Font name (family name). + * @param $style (string) Font style. + * @param $subs (array) Array of possible character substitutions. The key is the character to check (integer value) and the value is a single intege value or an array of possible substitutes. + * @return (string) Processed text. + * @public + * @since 5.9.153 (2012-03-28) + */ + public function replaceMissingChars($text, $font='', $style='', $subs=array()) { + if (empty($subs)) { + return $text; + } + if (TCPDF_STATIC::empty_string($font)) { + $font = $this->FontFamily; + } + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + $uniarr = TCPDF_FONTS::UTF8StringToArray($text, $this->isunicode, $this->CurrentFont); + foreach ($uniarr as $k => $chr) { + if (!isset($fontinfo['cw'][$chr])) { + // this character is missing on the selected font + if (isset($subs[$chr])) { + // we have available substitutions + if (is_array($subs[$chr])) { + foreach($subs[$chr] as $s) { + if (isset($fontinfo['cw'][$s])) { + $uniarr[$k] = $s; + break; + } + } + } elseif (isset($fontinfo['cw'][$subs[$chr]])) { + $uniarr[$k] = $subs[$chr]; + } + } + } + } + return TCPDF_FONTS::UniArrSubString(TCPDF_FONTS::UTF8ArrayToUniArray($uniarr, $this->isunicode)); + } + + /** + * Defines the default monospaced font. + * @param $font (string) Font name. + * @public + * @since 4.5.025 + */ + public function SetDefaultMonospacedFont($font) { + $this->default_monospaced_font = $font; + } + + /** + * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.<br /> + * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink(). + * @public + * @since 1.5 + * @see Cell(), Write(), Image(), Link(), SetLink() + */ + public function AddLink() { + // create a new internal link + $n = count($this->links) + 1; + $this->links[$n] = array('p' => 0, 'y' => 0, 'f' => false); + return $n; + } + + /** + * Defines the page and position a link points to. + * @param $link (int) The link identifier returned by AddLink() + * @param $y (float) Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page) + * @param $page (int) Number of target page; -1 indicates the current page (default value). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @public + * @since 1.5 + * @see AddLink() + */ + public function SetLink($link, $y=0, $page=-1) { + $fixed = false; + if (!empty($page) AND ($page[0] == '*')) { + $page = intval(substr($page, 1)); + // this page number will not be changed when moving/add/deleting pages + $fixed = true; + } + if ($page < 0) { + $page = $this->page; + } + if ($y == -1) { + $y = $this->y; + } + $this->links[$link] = array('p' => $page, 'y' => $y, 'f' => $fixed); + } + + /** + * Puts a link on a rectangular area of the page. + * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image. + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $w (float) Width of the rectangle + * @param $h (float) Height of the rectangle + * @param $link (mixed) URL or identifier returned by AddLink() + * @param $spaces (int) number of spaces on the text to link + * @public + * @since 1.5 + * @see AddLink(), Annotation(), Cell(), Write(), Image() + */ + public function Link($x, $y, $w, $h, $link, $spaces=0) { + $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces); + } + + /** + * Puts a markup annotation on a rectangular area of the page. + * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!! + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $w (float) Width of the rectangle + * @param $h (float) Height of the rectangle + * @param $text (string) annotation text or alternate content + * @param $opt (array) array of options (see section 8.4 of PDF reference 1.7). + * @param $spaces (int) number of spaces on the text to link + * @public + * @since 4.0.018 (2008-08-06) + */ + public function Annotation($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) { + if ($this->inxobj) { + // store parameters for later use on template + $this->xobjects[$this->xobjid]['annotations'][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'text' => $text, 'opt' => $opt, 'spaces' => $spaces); + return; + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + // recalculate coordinates to account for graphic transformations + if (isset($this->transfmatrix) AND !empty($this->transfmatrix)) { + for ($i=$this->transfmatrix_key; $i > 0; --$i) { + $maxid = count($this->transfmatrix[$i]) - 1; + for ($j=$maxid; $j >= 0; --$j) { + $ctm = $this->transfmatrix[$i][$j]; + if (isset($ctm['a'])) { + $x = $x * $this->k; + $y = ($this->h - $y) * $this->k; + $w = $w * $this->k; + $h = $h * $this->k; + // top left + $xt = $x; + $yt = $y; + $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // top right + $xt = $x + $w; + $yt = $y; + $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom left + $xt = $x; + $yt = $y - $h; + $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom right + $xt = $x + $w; + $yt = $y - $h; + $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // new coordinates (rectangle area) + $x = min($x1, $x2, $x3, $x4); + $y = max($y1, $y2, $y3, $y4); + $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k; + $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k; + $x = $x / $this->k; + $y = $this->h - ($y / $this->k); + } + } + } + } + if ($this->page <= 0) { + $page = 1; + } else { + $page = $this->page; + } + if (!isset($this->PageAnnots[$page])) { + $this->PageAnnots[$page] = array(); + } + $this->PageAnnots[$page][] = array('n' => ++$this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces); + if (!$this->pdfa_mode) { + if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS'])) + AND (@file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS'])) + AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) { + $this->embeddedfiles[basename($opt['FS'])] = array('f' => ++$this->n, 'n' => ++$this->n, 'file' => $opt['FS']); + } + } + // Add widgets annotation's icons + if (isset($opt['mk']['i']) AND @file_exists($opt['mk']['i'])) { + $this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ri']) AND @file_exists($opt['mk']['ri'])) { + $this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ix']) AND @file_exists($opt['mk']['ix'])) { + $this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + } + + /** + * Embedd the attached files. + * @since 4.4.000 (2008-12-07) + * @protected + * @see Annotation() + */ + protected function _putEmbeddedFiles() { + if ($this->pdfa_mode) { + // embedded files are not allowed in PDF/A mode + return; + } + reset($this->embeddedfiles); + foreach ($this->embeddedfiles as $filename => $filedata) { + $data = TCPDF_STATIC::fileGetContents($filedata['file']); + if ($data !== FALSE) { + $rawsize = strlen($data); + if ($rawsize > 0) { + // update name tree + $this->efnames[$filename] = $filedata['f'].' 0 R'; + // embedded file specification object + $out = $this->_getobj($filedata['f'])."\n"; + $out .= '<</Type /Filespec /F '.$this->_datastring($filename, $filedata['f']).' /EF <</F '.$filedata['n'].' 0 R>> >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // embedded file object + $filter = ''; + if ($this->compress) { + $data = gzcompress($data); + $filter = ' /Filter /FlateDecode'; + } + $stream = $this->_getrawstream($data, $filedata['n']); + $out = $this->_getobj($filedata['n'])."\n"; + $out .= '<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' /Params <</Size '.$rawsize.'>> >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + } + } + + /** + * Prints a text cell at the specified position. + * This method allows to place a string precisely on the page. + * @param $x (float) Abscissa of the cell origin + * @param $y (float) Ordinate of the cell origin + * @param $txt (string) String to print + * @param $fstroke (int) outline size in user units (false = disable) + * @param $fclip (boolean) if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation). + * @param $ffill (boolean) if true fills the text + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $ln (int) Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param $align (string) Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul> + * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false). + * @param $link (mixed) URL or identifier returned by AddLink(). + * @param $stretch (int) font stretch mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if text is larger than cell width</li><li>2 = forced horizontal scaling to fit cell width</li><li>3 = character spacing only if text is larger than cell width</li><li>4 = forced character spacing to fit cell width</li></ul> General font stretching and scaling values will be preserved when possible. + * @param $ignore_min_height (boolean) if true ignore automatic minimum height value. + * @param $calign (string) cell vertical alignment relative to the specified Y value. Possible values are:<ul><li>T : cell top</li><li>A : font top</li><li>L : font baseline</li><li>D : font bottom</li><li>B : cell bottom</li></ul> + * @param $valign (string) text vertical alignment inside the cell. Possible values are:<ul><li>T : top</li><li>C : center</li><li>B : bottom</li></ul> + * @param $rtloff (boolean) if true uses the page top-left corner as origin of axis for $x and $y initial position. + * @public + * @since 1.0 + * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell() + */ + public function Text($x, $y, $txt, $fstroke=false, $fclip=false, $ffill=true, $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M', $rtloff=false) { + $textrendermode = $this->textrendermode; + $textstrokewidth = $this->textstrokewidth; + $this->setTextRenderingMode($fstroke, $ffill, $fclip); + $this->SetXY($x, $y, $rtloff); + $this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign); + // restore previous rendering mode + $this->textrendermode = $textrendermode; + $this->textstrokewidth = $textstrokewidth; + } + + /** + * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value. + * The default implementation returns a value according to the mode selected by SetAutoPageBreak().<br /> + * This method is called automatically and should not be called directly by the application. + * @return boolean + * @public + * @since 1.4 + * @see SetAutoPageBreak() + */ + public function AcceptPageBreak() { + if ($this->num_columns > 1) { + // multi column mode + if ($this->current_column < ($this->num_columns - 1)) { + // go to next column + $this->selectColumn($this->current_column + 1); + } elseif ($this->AutoPageBreak) { + // add a new page + $this->AddPage(); + // set first column + $this->selectColumn(0); + } + // avoid page breaking from checkPageBreak() + return false; + } + return $this->AutoPageBreak; + } + + /** + * Add page if needed. + * @param $h (float) Cell height. Default value: 0. + * @param $y (mixed) starting y position, leave empty for current position. + * @param $addpage (boolean) if true add a page, otherwise only return the true/false state + * @return boolean true in case of page break, false otherwise. + * @since 3.2.000 (2008-07-01) + * @protected + */ + protected function checkPageBreak($h=0, $y='', $addpage=true) { + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + $current_page = $this->page; + if ((($y + $h) > $this->PageBreakTrigger) AND ($this->inPageBody()) AND ($this->AcceptPageBreak())) { + if ($addpage) { + //Automatic page break + $x = $this->x; + $this->AddPage($this->CurOrientation); + $this->y = $this->tMargin; + $oldpage = $this->page - 1; + if ($this->rtl) { + if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) { + $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']); + } else { + $this->x = $x; + } + } else { + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']); + } else { + $this->x = $x; + } + } + } + return true; + } + if ($current_page != $this->page) { + // account for columns mode + return true; + } + return false; + } + + /** + * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br /> + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param $w (float) Cell width. If 0, the cell extends up to the right margin. + * @param $h (float) Cell height. Default value: 0. + * @param $txt (string) String to print. Default value: empty string. + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $ln (int) Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul> Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param $align (string) Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul> + * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false). + * @param $link (mixed) URL or identifier returned by AddLink(). + * @param $stretch (int) font stretch mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if text is larger than cell width</li><li>2 = forced horizontal scaling to fit cell width</li><li>3 = character spacing only if text is larger than cell width</li><li>4 = forced character spacing to fit cell width</li></ul> General font stretching and scaling values will be preserved when possible. + * @param $ignore_min_height (boolean) if true ignore automatic minimum height value. + * @param $calign (string) cell vertical alignment relative to the specified Y value. Possible values are:<ul><li>T : cell top</li><li>C : center</li><li>B : cell bottom</li><li>A : font top</li><li>L : font baseline</li><li>D : font bottom</li></ul> + * @param $valign (string) text vertical alignment inside the cell. Possible values are:<ul><li>T : top</li><li>C : center</li><li>B : bottom</li></ul> + * @public + * @since 1.0 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak() + */ + public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + $prev_cell_margin = $this->cell_margin; + $prev_cell_padding = $this->cell_padding; + $this->adjustCellPadding($border); + if (!$ignore_min_height) { + $min_cell_height = $this->getCellHeight($this->FontSize); + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $this->checkPageBreak($h + $this->cell_margin['T'] + $this->cell_margin['B']); + // apply text shadow if enabled + if ($this->txtshadow['enabled']) { + // save data + $x = $this->x; + $y = $this->y; + $bc = $this->bgcolor; + $fc = $this->fgcolor; + $sc = $this->strokecolor; + $alpha = $this->alpha; + // print shadow + $this->x += $this->txtshadow['depth_w']; + $this->y += $this->txtshadow['depth_h']; + $this->SetFillColorArray($this->txtshadow['color']); + $this->SetTextColorArray($this->txtshadow['color']); + $this->SetDrawColorArray($this->txtshadow['color']); + if ($this->txtshadow['opacity'] != $alpha['CA']) { + $this->setAlpha($this->txtshadow['opacity'], $this->txtshadow['blend_mode']); + } + if ($this->state == 2) { + $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign)); + } + //restore data + $this->x = $x; + $this->y = $y; + $this->SetFillColorArray($bc); + $this->SetTextColorArray($fc); + $this->SetDrawColorArray($sc); + if ($this->txtshadow['opacity'] != $alpha['CA']) { + $this->setAlpha($alpha['CA'], $alpha['BM'], $alpha['ca'], $alpha['AIS']); + } + } + if ($this->state == 2) { + $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign)); + } + $this->cell_padding = $prev_cell_padding; + $this->cell_margin = $prev_cell_margin; + } + + /** + * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br /> + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param $w (float) Cell width. If 0, the cell extends up to the right margin. + * @param $h (float) Cell height. Default value: 0. + * @param $txt (string) String to print. Default value: empty string. + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $ln (int) Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param $align (string) Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul> + * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false). + * @param $link (mixed) URL or identifier returned by AddLink(). + * @param $stretch (int) font stretch mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if text is larger than cell width</li><li>2 = forced horizontal scaling to fit cell width</li><li>3 = character spacing only if text is larger than cell width</li><li>4 = forced character spacing to fit cell width</li></ul> General font stretching and scaling values will be preserved when possible. + * @param $ignore_min_height (boolean) if true ignore automatic minimum height value. + * @param $calign (string) cell vertical alignment relative to the specified Y value. Possible values are:<ul><li>T : cell top</li><li>C : center</li><li>B : cell bottom</li><li>A : font top</li><li>L : font baseline</li><li>D : font bottom</li></ul> + * @param $valign (string) text vertical alignment inside the cell. Possible values are:<ul><li>T : top</li><li>M : middle</li><li>B : bottom</li></ul> + * @return string containing cell code + * @protected + * @since 1.0 + * @see Cell() + */ + protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + // replace 'NO-BREAK SPACE' (U+00A0) character with a simple space + $txt = str_replace(TCPDF_FONTS::unichr(160, $this->isunicode), ' ', $txt); + $prev_cell_margin = $this->cell_margin; + $prev_cell_padding = $this->cell_padding; + $txt = TCPDF_STATIC::removeSHY($txt, $this->isunicode); + $rs = ''; //string to be returned + $this->adjustCellPadding($border); + if (!$ignore_min_height) { + $min_cell_height = $this->getCellHeight($this->FontSize); + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $k = $this->k; + // check page for no-write regions and adapt page margins if necessary + list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y); + if ($this->rtl) { + $x = $this->x - $this->cell_margin['R']; + } else { + $x = $this->x + $this->cell_margin['L']; + } + $y = $this->y + $this->cell_margin['T']; + $prev_font_stretching = $this->font_stretching; + $prev_font_spacing = $this->font_spacing; + // cell vertical alignment + switch ($calign) { + case 'A': { + // font top + switch ($valign) { + case 'T': { + // top + $y -= $this->cell_padding['T']; + break; + } + case 'B': { + // bottom + $y -= ($h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent); + break; + } + default: + case 'C': + case 'M': { + // center + $y -= (($h - $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'L': { + // font baseline + switch ($valign) { + case 'T': { + // top + $y -= ($this->cell_padding['T'] + $this->FontAscent); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->cell_padding['B'] - $this->FontDescent); + break; + } + default: + case 'C': + case 'M': { + // center + $y -= (($h + $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'D': { + // font bottom + switch ($valign) { + case 'T': { + // top + $y -= ($this->cell_padding['T'] + $this->FontAscent + $this->FontDescent); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->cell_padding['B']); + break; + } + default: + case 'C': + case 'M': { + // center + $y -= (($h + $this->FontAscent + $this->FontDescent) / 2); + break; + } + } + break; + } + case 'B': { + // cell bottom + $y -= $h; + break; + } + case 'C': + case 'M': { + // cell center + $y -= ($h / 2); + break; + } + default: + case 'T': { + // cell top + break; + } + } + // text vertical alignment + switch ($valign) { + case 'T': { + // top + $yt = $y + $this->cell_padding['T']; + break; + } + case 'B': { + // bottom + $yt = $y + $h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent; + break; + } + default: + case 'C': + case 'M': { + // center + $yt = $y + (($h - $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + $basefonty = $yt + $this->FontAscent; + if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + $s = ''; + // fill and borders + if (is_string($border) AND (strlen($border) == 4)) { + // full border + $border = 1; + } + if ($fill OR ($border == 1)) { + if ($fill) { + $op = ($border == 1) ? 'B' : 'f'; + } else { + $op = 'S'; + } + if ($this->rtl) { + $xk = (($x - $w) * $k); + } else { + $xk = ($x * $k); + } + $s .= sprintf('%F %F %F %F re %s ', $xk, (($this->h - $y) * $k), ($w * $k), (-$h * $k), $op); + } + // draw borders + $s .= $this->getCellBorder($x, $y, $w, $h, $border); + if ($txt != '') { + $txt2 = $txt; + if ($this->isunicode) { + if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) { + $txt2 = TCPDF_FONTS::UTF8ToLatin1($txt2, $this->isunicode, $this->CurrentFont); + } else { + $unicode = TCPDF_FONTS::UTF8StringToArray($txt, $this->isunicode, $this->CurrentFont); // array of UTF-8 unicode values + $unicode = TCPDF_FONTS::utf8Bidi($unicode, '', $this->tmprtl, $this->isunicode, $this->CurrentFont); + // replace thai chars (if any) + if (defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS == true)) { + // number of chars + $numchars = count($unicode); + // po pla, for far, for fan + $longtail = array(0x0e1b, 0x0e1d, 0x0e1f); + // do chada, to patak + $lowtail = array(0x0e0e, 0x0e0f); + // mai hun arkad, sara i, sara ii, sara ue, sara uee + $upvowel = array(0x0e31, 0x0e34, 0x0e35, 0x0e36, 0x0e37); + // mai ek, mai tho, mai tri, mai chattawa, karan + $tonemark = array(0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c); + // sara u, sara uu, pinthu + $lowvowel = array(0x0e38, 0x0e39, 0x0e3a); + $output = array(); + for ($i = 0; $i < $numchars; $i++) { + if (($unicode[$i] >= 0x0e00) && ($unicode[$i] <= 0x0e5b)) { + $ch0 = $unicode[$i]; + $ch1 = ($i > 0) ? $unicode[($i - 1)] : 0; + $ch2 = ($i > 1) ? $unicode[($i - 2)] : 0; + $chn = ($i < ($numchars - 1)) ? $unicode[($i + 1)] : 0; + if (in_array($ch0, $tonemark)) { + if ($chn == 0x0e33) { + // sara um + if (in_array($ch1, $longtail)) { + // tonemark at upper left + $output[] = $this->replaceChar($ch0, (0xf713 + $ch0 - 0x0e48)); + } else { + // tonemark at upper right (normal position) + $output[] = $ch0; + } + } elseif (in_array($ch1, $longtail) OR (in_array($ch2, $longtail) AND in_array($ch1, $lowvowel))) { + // tonemark at lower left + $output[] = $this->replaceChar($ch0, (0xf705 + $ch0 - 0x0e48)); + } elseif (in_array($ch1, $upvowel)) { + if (in_array($ch2, $longtail)) { + // tonemark at upper left + $output[] = $this->replaceChar($ch0, (0xf713 + $ch0 - 0x0e48)); + } else { + // tonemark at upper right (normal position) + $output[] = $ch0; + } + } else { + // tonemark at lower right + $output[] = $this->replaceChar($ch0, (0xf70a + $ch0 - 0x0e48)); + } + } elseif (($ch0 == 0x0e33) AND (in_array($ch1, $longtail) OR (in_array($ch2, $longtail) AND in_array($ch1, $tonemark)))) { + // add lower left nikhahit and sara aa + if ($this->isCharDefined(0xf711) AND $this->isCharDefined(0x0e32)) { + $output[] = 0xf711; + $this->CurrentFont['subsetchars'][0xf711] = true; + $output[] = 0x0e32; + $this->CurrentFont['subsetchars'][0x0e32] = true; + } else { + $output[] = $ch0; + } + } elseif (in_array($ch1, $longtail)) { + if ($ch0 == 0x0e31) { + // lower left mai hun arkad + $output[] = $this->replaceChar($ch0, 0xf710); + } elseif (in_array($ch0, $upvowel)) { + // lower left + $output[] = $this->replaceChar($ch0, (0xf701 + $ch0 - 0x0e34)); + } elseif ($ch0 == 0x0e47) { + // lower left mai tai koo + $output[] = $this->replaceChar($ch0, 0xf712); + } else { + // normal character + $output[] = $ch0; + } + } elseif (in_array($ch1, $lowtail) AND in_array($ch0, $lowvowel)) { + // lower vowel + $output[] = $this->replaceChar($ch0, (0xf718 + $ch0 - 0x0e38)); + } elseif (($ch0 == 0x0e0d) AND in_array($chn, $lowvowel)) { + // yo ying without lower part + $output[] = $this->replaceChar($ch0, 0xf70f); + } elseif (($ch0 == 0x0e10) AND in_array($chn, $lowvowel)) { + // tho santan without lower part + $output[] = $this->replaceChar($ch0, 0xf700); + } else { + $output[] = $ch0; + } + } else { + // non-thai character + $output[] = $unicode[$i]; + } + } + $unicode = $output; + // update font subsetchars + $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); + } // end of K_THAI_TOPCHARS + $txt2 = TCPDF_FONTS::arrUTF8ToUTF16BE($unicode, false); + } + } + $txt2 = TCPDF_STATIC::_escape($txt2); + // get current text width (considering general font stretching and spacing) + $txwidth = $this->GetStringWidth($txt); + $width = $txwidth; + // check for stretch mode + if ($stretch > 0) { + // calculate ratio between cell width and text width + if ($width <= 0) { + $ratio = 1; + } else { + $ratio = (($w - $this->cell_padding['L'] - $this->cell_padding['R']) / $width); + } + // check if stretching is required + if (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0))) { + // the text will be stretched to fit cell width + if ($stretch > 2) { + // set new character spacing + $this->font_spacing += ($w - $this->cell_padding['L'] - $this->cell_padding['R'] - $width) / (max(($this->GetNumChars($txt) - 1), 1) * ($this->font_stretching / 100)); + } else { + // set new horizontal stretching + $this->font_stretching *= $ratio; + } + // recalculate text width (the text fills the entire cell) + $width = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + // reset alignment + $align = ''; + } + } + if ($this->font_stretching != 100) { + // apply font stretching + $rs .= sprintf('BT %F Tz ET ', $this->font_stretching); + } + if ($this->font_spacing != 0) { + // increase/decrease font spacing + $rs .= sprintf('BT %F Tc ET ', ($this->font_spacing * $this->k)); + } + if ($this->ColorFlag AND ($this->textrendermode < 4)) { + $s .= 'q '.$this->TextColor.' '; + } + // rendering mode + $s .= sprintf('BT %d Tr %F w ET ', $this->textrendermode, ($this->textstrokewidth * $this->k)); + // count number of spaces + $ns = substr_count($txt, chr(32)); + // Justification + $spacewidth = 0; + if (($align == 'J') AND ($ns > 0)) { + if ($this->isUnicodeFont()) { + // get string width without spaces + $width = $this->GetStringWidth(str_replace(' ', '', $txt)); + // calculate average space width + $spacewidth = -1000 * ($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1) / ($this->FontSize?$this->FontSize:1); + if ($this->font_stretching != 100) { + // word spacing is affected by stretching + $spacewidth /= ($this->font_stretching / 100); + } + // set word position to be used with TJ operator + $txt2 = str_replace(chr(0).chr(32), ') '.sprintf('%F', $spacewidth).' (', $txt2); + $unicode_justification = true; + } else { + // get string width + $width = $txwidth; + // new space width + $spacewidth = (($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)) * $this->k; + if ($this->font_stretching != 100) { + // word spacing (Tw) is affected by stretching + $spacewidth /= ($this->font_stretching / 100); + } + // set word spacing + $rs .= sprintf('BT %F Tw ET ', $spacewidth); + } + $width = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + } + // replace carriage return characters + $txt2 = str_replace("\r", ' ', $txt2); + switch ($align) { + case 'C': { + $dx = ($w - $width) / 2; + break; + } + case 'R': { + if ($this->rtl) { + $dx = $this->cell_padding['R']; + } else { + $dx = $w - $width - $this->cell_padding['R']; + } + break; + } + case 'L': { + if ($this->rtl) { + $dx = $w - $width - $this->cell_padding['L']; + } else { + $dx = $this->cell_padding['L']; + } + break; + } + case 'J': + default: { + if ($this->rtl) { + $dx = $this->cell_padding['R']; + } else { + $dx = $this->cell_padding['L']; + } + break; + } + } + if ($this->rtl) { + $xdx = $x - $dx - $width; + } else { + $xdx = $x + $dx; + } + $xdk = $xdx * $k; + // print text + $s .= sprintf('BT %F %F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2); + if (isset($uniblock)) { + // print overlapping characters as separate string + $xshift = 0; // horizontal shift + $ty = (($this->h - $basefonty + (0.2 * $this->FontSize)) * $k); + $spw = (($w - $txwidth - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)); + foreach ($uniblock as $uk => $uniarr) { + if (($uk % 2) == 0) { + // x space to skip + if ($spacewidth != 0) { + // justification shift + $xshift += (count(array_keys($uniarr, 32)) * $spw); + } + $xshift += $this->GetArrStringWidth($uniarr); // + shift justification + } else { + // character to print + $topchr = TCPDF_FONTS::arrUTF8ToUTF16BE($uniarr, false); + $topchr = TCPDF_STATIC::_escape($topchr); + $s .= sprintf(' BT %F %F Td [(%s)] TJ ET', ($xdk + ($xshift * $k)), $ty, $topchr); + } + } + } + if ($this->underline) { + $s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width); + } + if ($this->linethrough) { + $s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width); + } + if ($this->overline) { + $s .= ' '.$this->_dooverlinew($xdx, $basefonty, $width); + } + if ($this->ColorFlag AND ($this->textrendermode < 4)) { + $s .= ' Q'; + } + if ($link) { + $this->Link($xdx, $yt, $width, ($this->FontAscent + $this->FontDescent), $link, $ns); + } + } + // output cell + if ($s) { + // output cell + $rs .= $s; + if ($this->font_spacing != 0) { + // reset font spacing mode + $rs .= ' BT 0 Tc ET'; + } + if ($this->font_stretching != 100) { + // reset font stretching mode + $rs .= ' BT 100 Tz ET'; + } + } + // reset word spacing + if (!$this->isUnicodeFont() AND ($align == 'J')) { + $rs .= ' BT 0 Tw ET'; + } + // reset stretching and spacing + $this->font_stretching = $prev_font_stretching; + $this->font_spacing = $prev_font_spacing; + $this->lasth = $h; + if ($ln > 0) { + //Go to the beginning of the next line + $this->y = $y + $h + $this->cell_margin['B']; + if ($ln == 1) { + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + } else { + // go left or right by case + if ($this->rtl) { + $this->x = $x - $w - $this->cell_margin['L']; + } else { + $this->x = $x + $w + $this->cell_margin['R']; + } + } + $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n"; + $rs = $gstyles.$rs; + $this->cell_padding = $prev_cell_padding; + $this->cell_margin = $prev_cell_margin; + return $rs; + } + + /** + * Replace a char if is defined on the current font. + * @param $oldchar (int) Integer code (unicode) of the character to replace. + * @param $newchar (int) Integer code (unicode) of the new character. + * @return int the replaced char or the old char in case the new char i not defined + * @protected + * @since 5.9.167 (2012-06-22) + */ + protected function replaceChar($oldchar, $newchar) { + if ($this->isCharDefined($newchar)) { + // add the new char on the subset list + $this->CurrentFont['subsetchars'][$newchar] = true; + // return the new character + return $newchar; + } + // return the old char + return $oldchar; + } + + /** + * Returns the code to draw the cell border + * @param $x (float) X coordinate. + * @param $y (float) Y coordinate. + * @param $w (float) Cell width. + * @param $h (float) Cell height. + * @param $brd (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return string containing cell border code + * @protected + * @see SetLineStyle() + * @since 5.7.000 (2010-08-02) + */ + protected function getCellBorder($x, $y, $w, $h, $brd) { + $s = ''; // string to be returned + if (empty($brd)) { + return $s; + } + if ($brd == 1) { + $brd = array('LRTB' => true); + } + // calculate coordinates for border + $k = $this->k; + if ($this->rtl) { + $xeL = ($x - $w) * $k; + $xeR = $x * $k; + } else { + $xeL = $x * $k; + $xeR = ($x + $w) * $k; + } + $yeL = (($this->h - ($y + $h)) * $k); + $yeT = (($this->h - $y) * $k); + $xeT = $xeL; + $xeB = $xeR; + $yeR = $yeT; + $yeB = $yeL; + if (is_string($brd)) { + // convert string to array + $slen = strlen($brd); + $newbrd = array(); + for ($i = 0; $i < $slen; ++$i) { + $newbrd[$brd[$i]] = array('cap' => 'square', 'join' => 'miter'); + } + $brd = $newbrd; + } + if (isset($brd['mode'])) { + $mode = $brd['mode']; + unset($brd['mode']); + } else { + $mode = 'normal'; + } + foreach ($brd as $border => $style) { + if (is_array($style) AND !empty($style)) { + // apply border style + $prev_style = $this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '; + $s .= $this->SetLineStyle($style, true)."\n"; + } + switch ($mode) { + case 'ext': { + $off = (($this->LineWidth / 2) * $k); + $xL = $xeL - $off; + $xR = $xeR + $off; + $yT = $yeT + $off; + $yL = $yeL - $off; + $xT = $xL; + $xB = $xR; + $yR = $yT; + $yB = $yL; + $w += $this->LineWidth; + $h += $this->LineWidth; + break; + } + case 'int': { + $off = ($this->LineWidth / 2) * $k; + $xL = $xeL + $off; + $xR = $xeR - $off; + $yT = $yeT - $off; + $yL = $yeL + $off; + $xT = $xL; + $xB = $xR; + $yR = $yT; + $yB = $yL; + $w -= $this->LineWidth; + $h -= $this->LineWidth; + break; + } + case 'normal': + default: { + $xL = $xeL; + $xT = $xeT; + $xB = $xeB; + $xR = $xeR; + $yL = $yeL; + $yT = $yeT; + $yB = $yeB; + $yR = $yeR; + break; + } + } + // draw borders by case + if (strlen($border) == 4) { + $s .= sprintf('%F %F %F %F re S ', $xT, $yT, ($w * $k), (-$h * $k)); + } elseif (strlen($border) == 3) { + if (strpos($border,'B') === false) { // LTR + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif (strpos($border,'L') === false) { // TRB + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } elseif (strpos($border,'T') === false) { // RBL + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + } elseif (strpos($border,'R') === false) { // BLT + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + } + } elseif (strlen($border) == 2) { + if ((strpos($border,'L') !== false) AND (strpos($border,'T') !== false)) { // LT + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + } elseif ((strpos($border,'T') !== false) AND (strpos($border,'R') !== false)) { // TR + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif ((strpos($border,'R') !== false) AND (strpos($border,'B') !== false)) { // RB + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } elseif ((strpos($border,'B') !== false) AND (strpos($border,'L') !== false)) { // BL + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + } elseif ((strpos($border,'L') !== false) AND (strpos($border,'R') !== false)) { // LR + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif ((strpos($border,'T') !== false) AND (strpos($border,'B') !== false)) { // TB + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } + } else { // strlen($border) == 1 + if (strpos($border,'L') !== false) { // L + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + } elseif (strpos($border,'T') !== false) { // T + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + } elseif (strpos($border,'R') !== false) { // R + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif (strpos($border,'B') !== false) { // B + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } + } + if (is_array($style) AND !empty($style)) { + // reset border style to previous value + $s .= "\n".$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor."\n"; + } + } + return $s; + } + + /** + * This method allows printing text with line breaks. + * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.<br /> + * Text can be aligned, centered or justified. The cell block can be framed and the background painted. + * @param $w (float) Width of cells. If 0, they extend up to the right margin of the page. + * @param $h (float) Cell minimum height. The cell extends automatically if needed. + * @param $txt (string) String to print + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $align (string) Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align</li><li>C: center</li><li>R: right align</li><li>J: justification (default value when $ishtml=false)</li></ul> + * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false). + * @param $ln (int) Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right</li><li>1: to the beginning of the next line [DEFAULT]</li><li>2: below</li></ul> + * @param $x (float) x position in user units + * @param $y (float) y position in user units + * @param $reseth (boolean) if true reset the last cell height (default true). + * @param $stretch (int) font stretch mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if text is larger than cell width</li><li>2 = forced horizontal scaling to fit cell width</li><li>3 = character spacing only if text is larger than cell width</li><li>4 = forced character spacing to fit cell width</li></ul> General font stretching and scaling values will be preserved when possible. + * @param $ishtml (boolean) INTERNAL USE ONLY -- set to true if $txt is HTML content (default = false). Never set this parameter to true, use instead writeHTMLCell() or writeHTML() methods. + * @param $autopadding (boolean) if true, uses internal padding and automatically adjust it to account for line width. + * @param $maxh (float) maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false. + * @param $valign (string) Vertical alignment of text (requires $maxh = $h > 0). Possible values are:<ul><li>T: TOP</li><li>M: middle</li><li>B: bottom</li></ul>. This feature works only when $ishtml=false and the cell must fit in a single page. + * @param $fitcell (boolean) if true attempt to fit all the text within the cell by reducing the font size (do not work in HTML mode). $maxh must be greater than 0 and equal to $h. + * @return int Return the number of cells or 1 for html mode. + * @public + * @since 1.3 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak() + */ + public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0, $valign='T', $fitcell=false) { + $prev_cell_margin = $this->cell_margin; + $prev_cell_padding = $this->cell_padding; + // adjust internal padding + $this->adjustCellPadding($border); + $mc_padding = $this->cell_padding; + $mc_margin = $this->cell_margin; + $this->cell_padding['T'] = 0; + $this->cell_padding['B'] = 0; + $this->setCellMargins(0, 0, 0, 0); + if (TCPDF_STATIC::empty_string($this->lasth) OR $reseth) { + // reset row height + $this->resetLastH(); + } + if (!TCPDF_STATIC::empty_string($y)) { + $this->SetY($y); + } else { + $y = $this->GetY(); + } + $resth = 0; + if (($h > 0) AND $this->inPageBody() AND (($y + $h + $mc_margin['T'] + $mc_margin['B']) > $this->PageBreakTrigger)) { + // spit cell in more pages/columns + $newh = ($this->PageBreakTrigger - $y); + $resth = ($h - $newh); // cell to be printed on the next page/column + $h = $newh; + } + // get current page number + $startpage = $this->page; + // get current column + $startcolumn = $this->current_column; + if (!TCPDF_STATIC::empty_string($x)) { + $this->SetX($x); + } else { + $x = $this->GetX(); + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions(0, $x, $y); + // apply margins + $oy = $y + $mc_margin['T']; + if ($this->rtl) { + $ox = ($this->w - $x - $mc_margin['R']); + } else { + $ox = ($x + $mc_margin['L']); + } + $this->x = $ox; + $this->y = $oy; + // set width + if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = ($this->x - $this->lMargin - $mc_margin['L']); + } else { + $w = ($this->w - $this->x - $this->rMargin - $mc_margin['R']); + } + } + // store original margin values + $lMargin = $this->lMargin; + $rMargin = $this->rMargin; + if ($this->rtl) { + $this->rMargin = ($this->w - $this->x); + $this->lMargin = ($this->x - $w); + } else { + $this->lMargin = ($this->x); + $this->rMargin = ($this->w - $this->x - $w); + } + $this->clMargin = $this->lMargin; + $this->crMargin = $this->rMargin; + if ($autopadding) { + // add top padding + $this->y += $mc_padding['T']; + } + if ($ishtml) { // ******* Write HTML text + $this->writeHTML($txt, true, false, $reseth, true, $align); + $nl = 1; + } else { // ******* Write simple text + $prev_FontSizePt = $this->FontSizePt; + if ($fitcell) { + // ajust height values + $tobottom = ($this->h - $this->y - $this->bMargin - $this->cell_padding['T'] - $this->cell_padding['B']); + $h = $maxh = max(min($h, $tobottom), min($maxh, $tobottom)); + } + // vertical alignment + if ($maxh > 0) { + // get text height + $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); + if ($fitcell AND ($text_height > $maxh) AND ($this->FontSizePt > 1)) { + // try to reduce font size to fit text on cell (use a quick search algorithm) + $fmin = 1; + $fmax = $this->FontSizePt; + $diff_epsilon = (1 / $this->k); // one point (min resolution) + $maxit = (2 * min(100, max(10, intval($fmax)))); // max number of iterations + while ($maxit >= 0) { + $fmid = (($fmax + $fmin) / 2); + $this->SetFontSize($fmid, false); + $this->resetLastH(); + $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); + $diff = ($maxh - $text_height); + if ($diff >= 0) { + if ($diff <= $diff_epsilon) { + break; + } + $fmin = $fmid; + } else { + $fmax = $fmid; + } + --$maxit; + } + if ($maxit < 0) { + // premature exit, we get the minimum font value to fit the cell + $this->SetFontSize($fmin); + $this->resetLastH(); + $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); + } else { + $this->SetFontSize($fmid); + $this->resetLastH(); + } + } + if ($text_height < $maxh) { + if ($valign == 'M') { + // text vertically centered + $this->y += (($maxh - $text_height) / 2); + } elseif ($valign == 'B') { + // text vertically aligned on bottom + $this->y += ($maxh - $text_height); + } + } + } + $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, true, $maxh, 0, $mc_margin); + if ($fitcell) { + // restore font size + $this->SetFontSize($prev_FontSizePt); + } + } + if ($autopadding) { + // add bottom padding + $this->y += $mc_padding['B']; + } + // Get end-of-text Y position + $currentY = $this->y; + // get latest page number + $endpage = $this->page; + if ($resth > 0) { + $skip = ($endpage - $startpage); + $tmpresth = $resth; + while ($tmpresth > 0) { + if ($skip <= 0) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + if ($this->num_columns > 1) { + $tmpresth -= ($this->h - $this->y - $this->bMargin); + } else { + $tmpresth -= ($this->h - $this->tMargin - $this->bMargin); + } + --$skip; + } + $currentY = $this->y; + $endpage = $this->page; + } + // get latest column + $endcolumn = $this->current_column; + if ($this->num_columns == 0) { + $this->num_columns = 1; + } + // disable page regions check + $check_page_regions = $this->check_page_regions; + $this->check_page_regions = false; + // get border modes + $border_start = TCPDF_STATIC::getBorderMode($border, $position='start', $this->opencell); + $border_end = TCPDF_STATIC::getBorderMode($border, $position='end', $this->opencell); + $border_middle = TCPDF_STATIC::getBorderMode($border, $position='middle', $this->opencell); + // design borders around HTML cells. + for ($page = $startpage; $page <= $endpage; ++$page) { // for each page + $ccode = ''; + $this->setPage($page); + if ($this->num_columns < 2) { + // single-column mode + $this->SetX($x); + $this->y = $this->tMargin; + } + // account for margin changes + if ($page > $startpage) { + if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { + $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) { + $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + if ($startpage == $endpage) { + // single page + for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column + $this->selectColumn($column); + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + if ($startcolumn == $endcolumn) { // single column + $cborder = $border; + $h = max($h, ($currentY - $oy)); + $this->y = $oy; + } elseif ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $oy; + $h = $this->h - $this->y - $this->bMargin; + } elseif ($column == $endcolumn) { // end column + $cborder = $border_end; + $h = $currentY - $this->y; + if ($resth > $h) { + $h = $resth; + } + } else { // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $startpage) { // first page + for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column + $this->selectColumn($column); + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + if ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $oy; + $h = $this->h - $this->y - $this->bMargin; + } else { // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $endpage) { // last page + for ($column = 0; $column <= $endcolumn; ++$column) { // for each column + $this->selectColumn($column); + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + if ($column == $endcolumn) { + // end column + $cborder = $border_end; + $h = $currentY - $this->y; + if ($resth > $h) { + $h = $resth; + } + } else { + // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } else { // middle page + for ($column = 0; $column < $this->num_columns; ++$column) { // for each column + $this->selectColumn($column); + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } + if ($cborder OR $fill) { + $offsetlen = strlen($ccode); + // draw border and fill + if ($this->inxobj) { + // we are inside an XObject template + if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { + $pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']); + $pagemark = $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]; + $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey] += $offsetlen; + } else { + $pagemark = $this->xobjects[$this->xobjid]['intmrk']; + $this->xobjects[$this->xobjid]['intmrk'] += $offsetlen; + } + $pagebuff = $this->xobjects[$this->xobjid]['outdata']; + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend; + } else { + if (end($this->transfmrk[$this->page]) !== false) { + $pagemarkkey = key($this->transfmrk[$this->page]); + $pagemark = $this->transfmrk[$this->page][$pagemarkkey]; + $this->transfmrk[$this->page][$pagemarkkey] += $offsetlen; + } elseif ($this->InFooter) { + $pagemark = $this->footerpos[$this->page]; + $this->footerpos[$this->page] += $offsetlen; + } else { + $pagemark = $this->intmrk[$this->page]; + $this->intmrk[$this->page] += $offsetlen; + } + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->setPageBuffer($this->page, $pstart.$ccode.$pend); + } + } + } // end for each page + // restore page regions check + $this->check_page_regions = $check_page_regions; + // Get end-of-cell Y position + $currentY = $this->GetY(); + // restore previous values + if ($this->num_columns > 1) { + $this->selectColumn(); + } else { + // restore original margins + $this->lMargin = $lMargin; + $this->rMargin = $rMargin; + if ($this->page > $startpage) { + // check for margin variations between pages (i.e. booklet mode) + $dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$startpage]['olm']); + $dr = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$startpage]['orm']); + if (($dl != 0) OR ($dr != 0)) { + $this->lMargin += $dl; + $this->rMargin += $dr; + } + } + } + if ($ln > 0) { + //Go to the beginning of the next line + $this->SetY($currentY + $mc_margin['B']); + if ($ln == 2) { + $this->SetX($x + $w + $mc_margin['L'] + $mc_margin['R']); + } + } else { + // go left or right by case + $this->setPage($startpage); + $this->y = $y; + $this->SetX($x + $w + $mc_margin['L'] + $mc_margin['R']); + } + $this->setContentMark(); + $this->cell_padding = $prev_cell_padding; + $this->cell_margin = $prev_cell_margin; + $this->clMargin = $this->lMargin; + $this->crMargin = $this->rMargin; + return $nl; + } + + /** + * This method return the estimated number of lines for print a simple text string using Multicell() method. + * @param $txt (string) String for calculating his height + * @param $w (float) Width of cells. If 0, they extend up to the right margin of the page. + * @param $reseth (boolean) if true reset the last cell height (default false). + * @param $autopadding (boolean) if true, uses internal padding and automatically adjust it to account for line width (default true). + * @param $cellpadding (float) Internal cell padding, if empty uses default cell padding. + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return float Return the minimal height needed for multicell method for printing the $txt param. + * @author Alexander Escalona Fern\E1ndez, Nicola Asuni + * @public + * @since 4.5.011 + */ + public function getNumLines($txt, $w=0, $reseth=false, $autopadding=true, $cellpadding='', $border=0) { + if ($txt === NULL) { + return 0; + } + if ($txt === '') { + // empty string + return 1; + } + // adjust internal padding + $prev_cell_padding = $this->cell_padding; + $prev_lasth = $this->lasth; + if (is_array($cellpadding)) { + $this->cell_padding = $cellpadding; + } + $this->adjustCellPadding($border); + if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + if ($reseth) { + // reset row height + $this->resetLastH(); + } + $lines = 1; + $sum = 0; + $chars = TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($txt, $this->isunicode, $this->CurrentFont), $txt, $this->tmprtl, $this->isunicode, $this->CurrentFont); + $charsWidth = $this->GetArrStringWidth($chars, '', '', 0, true); + $length = count($chars); + $lastSeparator = -1; + for ($i = 0; $i < $length; ++$i) { + $c = $chars[$i]; + $charWidth = $charsWidth[$i]; + if (($c != 160) + AND (($c == 173) + OR preg_match($this->re_spaces, TCPDF_FONTS::unichr($c, $this->isunicode)) + OR (($c == 45) + AND ($i > 0) AND ($i < ($length - 1)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i - 1)], $this->isunicode)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode)) + ) + ) + ) { + $lastSeparator = $i; + } + if ((($sum + $charWidth) > $wmax) OR ($c == 10)) { + ++$lines; + if ($c == 10) { + $lastSeparator = -1; + $sum = 0; + } elseif ($lastSeparator != -1) { + $i = $lastSeparator; + $lastSeparator = -1; + $sum = 0; + } else { + $sum = $charWidth; + } + } else { + $sum += $charWidth; + } + } + if ($chars[($length - 1)] == 10) { + --$lines; + } + $this->cell_padding = $prev_cell_padding; + $this->lasth = $prev_lasth; + return $lines; + } + + /** + * This method return the estimated height needed for printing a simple text string using the Multicell() method. + * Generally, if you want to know the exact height for a block of content you can use the following alternative technique: + * @pre + * // store current object + * $pdf->startTransaction(); + * // store starting values + * $start_y = $pdf->GetY(); + * $start_page = $pdf->getPage(); + * // call your printing functions with your parameters + * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + * $pdf->MultiCell($w=0, $h=0, $txt, $border=1, $align='L', $fill=false, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0); + * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + * // get the new Y + * $end_y = $pdf->GetY(); + * $end_page = $pdf->getPage(); + * // calculate height + * $height = 0; + * if ($end_page == $start_page) { + * $height = $end_y - $start_y; + * } else { + * for ($page=$start_page; $page <= $end_page; ++$page) { + * $this->setPage($page); + * if ($page == $start_page) { + * // first page + * $height = $this->h - $start_y - $this->bMargin; + * } elseif ($page == $end_page) { + * // last page + * $height = $end_y - $this->tMargin; + * } else { + * $height = $this->h - $this->tMargin - $this->bMargin; + * } + * } + * } + * // restore previous object + * $pdf = $pdf->rollbackTransaction(); + * + * @param $w (float) Width of cells. If 0, they extend up to the right margin of the page. + * @param $txt (string) String for calculating his height + * @param $reseth (boolean) if true reset the last cell height (default false). + * @param $autopadding (boolean) if true, uses internal padding and automatically adjust it to account for line width (default true). + * @param $cellpadding (float) Internal cell padding, if empty uses default cell padding. + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return float Return the minimal height needed for multicell method for printing the $txt param. + * @author Nicola Asuni, Alexander Escalona Fern\E1ndez + * @public + */ + public function getStringHeight($w, $txt, $reseth=false, $autopadding=true, $cellpadding='', $border=0) { + // adjust internal padding + $prev_cell_padding = $this->cell_padding; + $prev_lasth = $this->lasth; + if (is_array($cellpadding)) { + $this->cell_padding = $cellpadding; + } + $this->adjustCellPadding($border); + $lines = $this->getNumLines($txt, $w, $reseth, $autopadding, $cellpadding, $border); + $height = $this->getCellHeight(($lines * $this->FontSize), $autopadding); + $this->cell_padding = $prev_cell_padding; + $this->lasth = $prev_lasth; + return $height; + } + + /** + * This method prints text from the current position.<br /> + * @param $h (float) Line height + * @param $txt (string) String to print + * @param $link (mixed) URL or identifier returned by AddLink() + * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false). + * @param $align (string) Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul> + * @param $ln (boolean) if true set cursor at the bottom of the line, otherwise set cursor at the top of the line. + * @param $stretch (int) font stretch mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if text is larger than cell width</li><li>2 = forced horizontal scaling to fit cell width</li><li>3 = character spacing only if text is larger than cell width</li><li>4 = forced character spacing to fit cell width</li></ul> General font stretching and scaling values will be preserved when possible. + * @param $firstline (boolean) if true prints only the first line and return the remaining string. + * @param $firstblock (boolean) if true the string is the starting of a line. + * @param $maxh (float) maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. + * @param $wadj (float) first line width will be reduced by this amount (used in HTML mode). + * @param $margin (array) margin array of the parent container + * @return mixed Return the number of cells or the remaining string if $firstline = true. + * @public + * @since 1.5 + */ + public function Write($h, $txt, $link='', $fill=false, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0, $wadj=0, $margin='') { + // check page for no-write regions and adapt page margins if necessary + list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y); + if (strlen($txt) == 0) { + // fix empty text + $txt = ' '; + } + if ($margin === '') { + // set default margins + $margin = $this->cell_margin; + } + // remove carriage returns + $s = str_replace("\r", '', $txt); + // check if string contains arabic text + if (preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC, $s)) { + $arabic = true; + } else { + $arabic = false; + } + // check if string contains RTL text + if ($arabic OR ($this->tmprtl == 'R') OR preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL, $s)) { + $rtlmode = true; + } else { + $rtlmode = false; + } + // get a char width + $chrwidth = $this->GetCharWidth(46); // dot character + // get array of unicode values + $chars = TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont); + // calculate maximum width for a single character on string + $chrw = $this->GetArrStringWidth($chars, '', '', 0, true); + array_walk($chrw, array($this, 'getRawCharWidth')); + $maxchwidth = max($chrw); + // get array of chars + $uchars = TCPDF_FONTS::UTF8ArrayToUniArray($chars, $this->isunicode); + // get the number of characters + $nb = count($chars); + // replacement for SHY character (minus symbol) + $shy_replacement = 45; + $shy_replacement_char = TCPDF_FONTS::unichr($shy_replacement, $this->isunicode); + // widht for SHY replacement + $shy_replacement_width = $this->GetCharWidth($shy_replacement); + // page width + $pw = $w = $this->w - $this->lMargin - $this->rMargin; + // calculate remaining line width ($w) + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + // max column width + $wmax = ($w - $wadj); + if (!$firstline) { + $wmax -= ($this->cell_padding['L'] + $this->cell_padding['R']); + } + if ((!$firstline) AND (($chrwidth > $wmax) OR ($maxchwidth > $wmax))) { + // the maximum width character do not fit on column + return ''; + } + // minimum row height + $row_height = max($h, $this->getCellHeight($this->FontSize)); + // max Y + $maxy = $this->y + $maxh - max($row_height, $h); + $start_page = $this->page; + $i = 0; // character position + $j = 0; // current starting position + $sep = -1; // position of the last blank space + $prevsep = $sep; // previous separator + $shy = false; // true if the last blank is a soft hypen (SHY) + $prevshy = $shy; // previous shy mode + $l = 0; // current string length + $nl = 0; //number of lines + $linebreak = false; + $pc = 0; // previous character + // for each character + while ($i < $nb) { + if (($maxh > 0) AND ($this->y > $maxy) ) { + break; + } + //Get the current character + $c = $chars[$i]; + if ($c == 10) { // 10 = "\n" = new line + //Explicit line break + if ($align == 'J') { + if ($this->rtl) { + $talign = 'R'; + } else { + $talign = 'L'; + } + } else { + $talign = $align; + } + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->SetCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + // Skip newlines at the beginning of a page or column + if (!empty($tmpstr) OR ($this->y < ($this->PageBreakTrigger - $row_height))) { + $this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch); + } + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $i)); + } + ++$nl; + $j = $i + 1; + $l = 0; + $sep = -1; + $prevsep = $sep; + $shy = false; + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) { + $this->AcceptPageBreak(); + if ($this->rtl) { + $this->x -= $margin['R']; + } else { + $this->x += $margin['L']; + } + $this->lMargin += $margin['L']; + $this->rMargin += $margin['R']; + } + $w = $this->getRemainingWidth(); + $wmax = ($w - $this->cell_padding['L'] - $this->cell_padding['R']); + } else { + // 160 is the non-breaking space. + // 173 is SHY (Soft Hypen). + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + if (($c != 160) + AND (($c == 173) + OR preg_match($this->re_spaces, TCPDF_FONTS::unichr($c, $this->isunicode)) + OR (($c == 45) + AND ($i < ($nb - 1)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($pc, $this->isunicode)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode)) + ) + ) + ) { + // update last blank space position + $prevsep = $sep; + $sep = $i; + // check if is a SHY + if (($c == 173) OR ($c == 45)) { + $prevshy = $shy; + $shy = true; + if ($pc == 45) { + $tmp_shy_replacement_width = 0; + $tmp_shy_replacement_char = ''; + } else { + $tmp_shy_replacement_width = $shy_replacement_width; + $tmp_shy_replacement_char = $shy_replacement_char; + } + } else { + $shy = false; + } + } + // update string length + if ($this->isUnicodeFont() AND ($arabic)) { + // with bidirectional algorithm some chars may be changed affecting the line length + // *** very slow *** + $l = $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl, $this->isunicode, $this->CurrentFont)); + } else { + $l += $this->GetCharWidth($c); + } + if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) >= $wmax))) { + if (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) { + $sep = $prevsep; + $shy = $prevshy; + } + // we have reached the end of column + if ($sep == -1) { + // check if the line was already started + if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $this->cell_padding['R'] - $margin['R'] - $chrwidth))) + OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $this->cell_padding['L'] + $margin['L'] + $chrwidth)))) { + // print a void cell and go to next line + $this->Cell($w, $h, '', 0, 1); + $linebreak = true; + if ($firstline) { + return (TCPDF_FONTS::UniArrSubString($uchars, $j)); + } + } else { + // truncate the word because do not fit on column + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->SetCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $i)); + } + $j = $i; + --$i; + } + } else { + // word wrapping + if ($this->rtl AND (!$firstblock) AND ($sep < $i)) { + $endspace = 1; + } else { + $endspace = 0; + } + // check the length of the next string + $strrest = TCPDF_FONTS::UniArrSubString($uchars, ($sep + $endspace)); + $nextstr = TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'/', $this->re_space['m'], $this->stringTrim($strrest)); + if (isset($nextstr[0]) AND ($this->GetStringWidth($nextstr[0]) > $pw)) { + // truncate the word because do not fit on a full page width + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = ($startx - $linew); + } else { + $this->endlinex = ($startx + $linew); + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->SetCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $i)); + } + $j = $i; + --$i; + } else { + // word wrapping + if ($shy) { + // add hypen (minus symbol) at the end of the line + $shy_width = $tmp_shy_replacement_width; + if ($this->rtl) { + $shy_char_left = $tmp_shy_replacement_char; + $shy_char_right = ''; + } else { + $shy_char_left = ''; + $shy_char_right = $tmp_shy_replacement_char; + } + } else { + $shy_width = 0; + $shy_char_left = ''; + $shy_char_right = ''; + } + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, ($sep + $endspace)); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, (($sep + $endspace) - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew - $shy_width; + } else { + $this->endlinex = $startx + $linew + $shy_width; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->SetCellPadding(0); + } + } + // print the line + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $shy_char_left.$tmpstr.$shy_char_right, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + if ($chars[$sep] == 45) { + $endspace += 1; + } + // return the remaining text + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, ($sep + $endspace))); + } + $i = $sep; + $sep = -1; + $shy = false; + $j = ($i + 1); + } + } + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) { + $this->AcceptPageBreak(); + if ($this->rtl) { + $this->x -= $margin['R']; + } else { + $this->x += $margin['L']; + } + $this->lMargin += $margin['L']; + $this->rMargin += $margin['R']; + } + $w = $this->getRemainingWidth(); + $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + if ($linebreak) { + $linebreak = false; + } else { + ++$nl; + $l = 0; + } + } + } + // save last character + $pc = $c; + ++$i; + } // end while i < nb + // print last substring (if any) + if ($l > 0) { + switch ($align) { + case 'J': + case 'C': { + $w = $w; + break; + } + case 'L': { + if ($this->rtl) { + $w = $w; + } else { + $w = $l; + } + break; + } + case 'R': { + if ($this->rtl) { + $w = $l; + } else { + $w = $w; + } + break; + } + default: { + $w = $l; + break; + } + } + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $nb); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($nb - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->SetCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $nb)); + } + ++$nl; + } + if ($firstline) { + return ''; + } + return $nl; + } + + /** + * Returns the remaining width between the current position and margins. + * @return int Return the remaining width + * @protected + */ + protected function getRemainingWidth() { + list($this->x, $this->y) = $this->checkPageRegions(0, $this->x, $this->y); + if ($this->rtl) { + return ($this->x - $this->lMargin); + } else { + return ($this->w - $this->rMargin - $this->x); + } + } + + /** + * Set the block dimensions accounting for page breaks and page/column fitting + * @param $w (float) width + * @param $h (float) height + * @param $x (float) X coordinate + * @param $y (float) Y coodiante + * @param $fitonpage (boolean) if true the block is resized to not exceed page dimensions. + * @return array($w, $h, $x, $y) + * @protected + * @since 5.5.009 (2010-07-05) + */ + protected function fitBlock($w, $h, $x, $y, $fitonpage=false) { + if ($w <= 0) { + // set maximum width + $w = ($this->w - $this->lMargin - $this->rMargin); + if ($w <= 0) { + $w = 1; + } + } + if ($h <= 0) { + // set maximum height + $h = ($this->PageBreakTrigger - $this->tMargin); + if ($h <= 0) { + $h = 1; + } + } + // resize the block to be vertically contained on a single page or single column + if ($fitonpage OR $this->AutoPageBreak) { + $ratio_wh = ($w / $h); + if ($h > ($this->PageBreakTrigger - $this->tMargin)) { + $h = $this->PageBreakTrigger - $this->tMargin; + $w = ($h * $ratio_wh); + } + // resize the block to be horizontally contained on a single page or single column + if ($fitonpage) { + $maxw = ($this->w - $this->lMargin - $this->rMargin); + if ($w > $maxw) { + $w = $maxw; + $h = ($w / $ratio_wh); + } + } + } + // Check whether we need a new page or new column first as this does not fit + $prev_x = $this->x; + $prev_y = $this->y; + if ($this->checkPageBreak($h, $y) OR ($this->y < $prev_y)) { + $y = $this->y; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + $this->newline = true; + } + // resize the block to be contained on the remaining available page or column space + if ($fitonpage) { + $ratio_wh = ($w / $h); + if (($y + $h) > $this->PageBreakTrigger) { + $h = $this->PageBreakTrigger - $y; + $w = ($h * $ratio_wh); + } + if ((!$this->rtl) AND (($x + $w) > ($this->w - $this->rMargin))) { + $w = $this->w - $this->rMargin - $x; + $h = ($w / $ratio_wh); + } elseif (($this->rtl) AND (($x - $w) < ($this->lMargin))) { + $w = $x - $this->lMargin; + $h = ($w / $ratio_wh); + } + } + return array($w, $h, $x, $y); + } + + /** + * Puts an image in the page. + * The upper-left corner must be given. + * The dimensions can be specified in different ways:<ul> + * <li>explicit width and height (expressed in user unit)</li> + * <li>one explicit dimension, the other being calculated automatically in order to keep the original proportions</li> + * <li>no explicit dimension, in which case the image is put at 72 dpi</li></ul> + * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM; + * The format can be specified explicitly or inferred from the file extension.<br /> + * It is possible to put a link on the image.<br /> + * Remark: if an image is used several times, only one copy will be embedded in the file.<br /> + * @param $file (string) Name of the file containing the image or a '@' character followed by the image data string. To link an image without embedding it on the document, set an asterisk character before the URL (i.e.: '*http://www.example.com/image.jpg'). + * @param $x (float) Abscissa of the upper-left corner (LTR) or upper-right corner (RTL). + * @param $y (float) Ordinate of the upper-left corner (LTR) or upper-right corner (RTL). + * @param $w (float) Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $h (float) Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $type (string) Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param $link (mixed) URL or identifier returned by AddLink(). + * @param $align (string) Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> + * @param $resize (mixed) If true resize (reduce) the image to fit $w and $h (requires GD or ImageMagick library); if false do not resize; if 2 force resize in all cases (upscaling and downscaling). + * @param $dpi (int) dot-per-inch resolution used on resize + * @param $palign (string) Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul> + * @param $ismask (boolean) true if this image is a mask, false otherwise + * @param $imgmask (mixed) image object returned by this function or false + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $fitbox (mixed) If not false scale image dimensions proportionally to fit within the ($w, $h) box. $fitbox can be true or a 2 characters string indicating the image alignment inside the box. The first character indicate the horizontal alignment (L = left, C = center, R = right) the second character indicate the vertical algnment (T = top, M = middle, B = bottom). + * @param $hidden (boolean) If true do not display the image. + * @param $fitonpage (boolean) If true the image is resized to not exceed page dimensions. + * @param $alt (boolean) If true the image will be added as alternative and not directly printed (the ID of the image will be returned). + * @param $altimgs (array) Array of alternate images IDs. Each alternative image must be an array with two values: an integer representing the image ID (the value returned by the Image method) and a boolean value to indicate if the image is the default for printing. + * @return image information + * @public + * @since 1.1 + */ + public function Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false, $alt=false, $altimgs=array()) { + if ($this->state != 2) { + return; + } + if (strcmp($x, '') === 0) { + $x = $this->x; + } + if (strcmp($y, '') === 0) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + $exurl = ''; // external streams + $imsize = FALSE; + // check if we are passing an image as file or string + if ($file[0] === '@') { + // image from string + $imgdata = substr($file, 1); + } else { // image file + if ($file[0] === '*') { + // image as external stream + $file = substr($file, 1); + $exurl = $file; + } + // check if is a local file + if (!@file_exists($file)) { + // try to encode spaces on filename + $tfile = str_replace(' ', '%20', $file); + if (@file_exists($tfile)) { + $file = $tfile; + } + } + if (($imsize = @getimagesize($file)) === FALSE) { + if (in_array($file, $this->imagekeys)) { + // get existing image data + $info = $this->getImageBuffer($file); + $imsize = array($info['w'], $info['h']); + } elseif (strpos($file, '__tcpdf_'.$this->file_id.'_img') === FALSE) { + $imgdata = TCPDF_STATIC::fileGetContents($file); + } + } + } + if (!empty($imgdata)) { + // copy image to cache + $original_file = $file; + $file = TCPDF_STATIC::getObjFilename('img', $this->file_id); + $fp = TCPDF_STATIC::fopenLocal($file, 'w'); + if (!$fp) { + $this->Error('Unable to write file: '.$file); + } + fwrite($fp, $imgdata); + fclose($fp); + unset($imgdata); + $imsize = @getimagesize($file); + if ($imsize === FALSE) { + unlink($file); + $file = $original_file; + } + } + if ($imsize === FALSE) { + if (($w > 0) AND ($h > 0)) { + // get measures from specified data + $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $imsize = array($pw, $ph); + } else { + $this->Error('[Image] Unable to get the size of the image: '.$file); + } + } + // file hash + $filehash = md5($file); + // get original image width and height in pixels + list($pixw, $pixh) = $imsize; + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + // convert image size to document unit + $w = $this->pixelsToUnits($pixw); + $h = $this->pixelsToUnits($pixh); + } elseif ($w <= 0) { + $w = $h * $pixw / $pixh; + } elseif ($h <= 0) { + $h = $w * $pixh / $pixw; + } elseif (($fitbox !== false) AND ($w > 0) AND ($h > 0)) { + if (strlen($fitbox) !== 2) { + // set default alignment + $fitbox = '--'; + } + // scale image dimensions proportionally to fit within the ($w, $h) box + if ((($w * $pixh) / ($h * $pixw)) < 1) { + // store current height + $oldh = $h; + // calculate new height + $h = $w * $pixh / $pixw; + // height difference + $hdiff = ($oldh - $h); + // vertical alignment + switch (strtoupper($fitbox[1])) { + case 'T': { + break; + } + case 'M': { + $y += ($hdiff / 2); + break; + } + case 'B': { + $y += $hdiff; + break; + } + } + } else { + // store current width + $oldw = $w; + // calculate new width + $w = $h * $pixw / $pixh; + // width difference + $wdiff = ($oldw - $w); + // horizontal alignment + switch (strtoupper($fitbox[0])) { + case 'L': { + if ($this->rtl) { + $x -= $wdiff; + } + break; + } + case 'C': { + if ($this->rtl) { + $x -= ($wdiff / 2); + } else { + $x += ($wdiff / 2); + } + break; + } + case 'R': { + if (!$this->rtl) { + $x += $wdiff; + } + break; + } + } + } + } + // fit the image on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); + // calculate new minimum dimensions in pixels + $neww = round($w * $this->k * $dpi / $this->dpi); + $newh = round($h * $this->k * $dpi / $this->dpi); + // check if resize is necessary (resize is used only to reduce the image) + $newsize = ($neww * $newh); + $pixsize = ($pixw * $pixh); + if (intval($resize) == 2) { + $resize = true; + } elseif ($newsize >= $pixsize) { + $resize = false; + } + // check if image has been already added on document + $newimage = true; + if (in_array($file, $this->imagekeys)) { + $newimage = false; + // get existing image data + $info = $this->getImageBuffer($file); + if (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE) { + // check if the newer image is larger + $oldsize = ($info['w'] * $info['h']); + if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { + $newimage = true; + } + } + } elseif (($ismask === false) AND ($imgmask === false) AND (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE)) { + // create temp image file (without alpha channel) + $tempfile_plain = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash; + // create temp alpha file + $tempfile_alpha = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash; + // check for cached images + if (in_array($tempfile_plain, $this->imagekeys)) { + // get existing image data + $info = $this->getImageBuffer($tempfile_plain); + // check if the newer image is larger + $oldsize = ($info['w'] * $info['h']); + if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { + $newimage = true; + } else { + $newimage = false; + // embed mask image + $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); + // embed image, masked with previously embedded mask + return $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); + } + } + } + if ($newimage) { + //First use of image, get info + $type = strtolower($type); + if ($type == '') { + $type = TCPDF_IMAGES::getImageFileType($file, $imsize); + } elseif ($type == 'jpg') { + $type = 'jpeg'; + } + $mqr = TCPDF_STATIC::get_mqr(); + TCPDF_STATIC::set_mqr(false); + // Specific image handlers (defined on TCPDF_IMAGES CLASS) + $mtd = '_parse'.$type; + // GD image handler function + $gdfunction = 'imagecreatefrom'.$type; + $info = false; + if ((method_exists('TCPDF_IMAGES', $mtd)) AND (!($resize AND (function_exists($gdfunction) OR extension_loaded('imagick'))))) { + // TCPDF image functions + $info = TCPDF_IMAGES::$mtd($file); + if (($ismask === false) AND ($imgmask === false) AND (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE) + AND (($info === 'pngalpha') OR (isset($info['trns']) AND !empty($info['trns'])))) { + return $this->ImagePngAlpha($file, $x, $y, $pixw, $pixh, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign, $filehash); + } + } + if (($info === false) AND function_exists($gdfunction)) { + try { + // GD library + $img = $gdfunction($file); + if ($img !== false) { + if ($resize) { + $imgr = imagecreatetruecolor($neww, $newh); + if (($type == 'gif') OR ($type == 'png')) { + $imgr = TCPDF_IMAGES::setGDImageTransparency($imgr, $img); + } + imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh); + $img = $imgr; + } + if (($type == 'gif') OR ($type == 'png')) { + $info = TCPDF_IMAGES::_toPNG($img, TCPDF_STATIC::getObjFilename('img', $this->file_id)); + } else { + $info = TCPDF_IMAGES::_toJPEG($img, $this->jpeg_quality, TCPDF_STATIC::getObjFilename('img', $this->file_id)); + } + } + } catch(Exception $e) { + $info = false; + } + } + if (($info === false) AND extension_loaded('imagick')) { + try { + // ImageMagick library + $img = new Imagick(); + if ($type == 'svg') { + if ($file[0] === '@') { + // image from string + $svgimg = substr($file, 1); + } else { + // get SVG file content + $svgimg = TCPDF_STATIC::fileGetContents($file); + } + if ($svgimg !== FALSE) { + // get width and height + $regs = array(); + if (preg_match('/<svg([^\>]*)>/si', $svgimg, $regs)) { + $svgtag = $regs[1]; + $tmp = array(); + if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) { + $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + $owu = sprintf('%F', ($ow * $dpi / 72)).$this->pdfunit; + $svgtag = preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si', ' width="'.$owu.'"', $svgtag, 1); + } else { + $ow = $w; + } + $tmp = array(); + if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) { + $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + $ohu = sprintf('%F', ($oh * $dpi / 72)).$this->pdfunit; + $svgtag = preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si', ' height="'.$ohu.'"', $svgtag, 1); + } else { + $oh = $h; + } + $tmp = array(); + if (!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $svgtag, $tmp)) { + $vbw = ($ow * $this->imgscale * $this->k); + $vbh = ($oh * $this->imgscale * $this->k); + $vbox = sprintf(' viewBox="0 0 %F %F" ', $vbw, $vbh); + $svgtag = $vbox.$svgtag; + } + $svgimg = preg_replace('/<svg([^\>]*)>/si', '<svg'.$svgtag.'>', $svgimg, 1); + } + $img->readImageBlob($svgimg); + } + } else { + $img->readImage($file); + } + if ($resize) { + $img->resizeImage($neww, $newh, 10, 1, false); + } + $img->setCompressionQuality($this->jpeg_quality); + $img->setImageFormat('jpeg'); + $tempname = TCPDF_STATIC::getObjFilename('img', $this->file_id); + $img->writeImage($tempname); + $info = TCPDF_IMAGES::_parsejpeg($tempname); + unlink($tempname); + $img->destroy(); + } catch(Exception $e) { + $info = false; + } + } + if ($info === false) { + // unable to process image + return; + } + TCPDF_STATIC::set_mqr($mqr); + if ($ismask) { + // force grayscale + $info['cs'] = 'DeviceGray'; + } + if ($imgmask !== false) { + $info['masked'] = $imgmask; + } + if (!empty($exurl)) { + $info['exurl'] = $exurl; + } + // array of alternative images + $info['altimgs'] = $altimgs; + // add image to document + $info['i'] = $this->setImageBuffer($file, $info); + } + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + if ($ismask OR $hidden) { + // image is not displayed + return $info['i']; + } + $xkimg = $ximg * $this->k; + if (!$alt) { + // only non-alternative immages will be set + $this->_out(sprintf('q %F 0 0 %F %F %F cm /I%u Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i'])); + } + if (!empty($border)) { + $bx = $this->x; + $by = $this->y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the next text/objects + switch($align) { + case 'T': { + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M': { + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B': { + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N': { + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['images'][] = $info['i']; + } + return $info['i']; + } + + /** + * Extract info from a PNG image with alpha channel using the Imagick or GD library. + * @param $file (string) Name of the file containing the image. + * @param $x (float) Abscissa of the upper-left corner. + * @param $y (float) Ordinate of the upper-left corner. + * @param $wpx (float) Original width of the image in pixels. + * @param $hpx (float) original height of the image in pixels. + * @param $w (float) Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $h (float) Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $type (string) Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param $link (mixed) URL or identifier returned by AddLink(). + * @param $align (string) Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> + * @param $resize (boolean) If true resize (reduce) the image to fit $w and $h (requires GD library). + * @param $dpi (int) dot-per-inch resolution used on resize + * @param $palign (string) Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul> + * @param $filehash (string) File hash used to build unique file names. + * @author Nicola Asuni + * @protected + * @since 4.3.007 (2008-12-04) + * @see Image() + */ + protected function ImagePngAlpha($file, $x, $y, $wpx, $hpx, $w, $h, $type, $link, $align, $resize, $dpi, $palign, $filehash='') { + // create temp images + if (empty($filehash)) { + $filehash = md5($file); + } + // create temp image file (without alpha channel) + $tempfile_plain = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash; + // create temp alpha file + $tempfile_alpha = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash; + $parsed = false; + $parse_error = ''; + // ImageMagick extension + if (($parsed === false) AND extension_loaded('imagick')) { + try { + // ImageMagick library + $img = new Imagick(); + $img->readImage($file); + // clone image object + $imga = TCPDF_STATIC::objclone($img); + // extract alpha channel + if (method_exists($img, 'setImageAlphaChannel') AND defined('Imagick::ALPHACHANNEL_EXTRACT')) { + $img->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT); + } else { + $img->separateImageChannel(8); // 8 = (imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE); + $img->negateImage(true); + } + $img->setImageFormat('png'); + $img->writeImage($tempfile_alpha); + // remove alpha channel + if (method_exists($imga, 'setImageMatte')) { + $imga->setImageMatte(false); + } else { + $imga->separateImageChannel(39); // 39 = (imagick::CHANNEL_ALL & ~(imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE)); + } + $imga->setImageFormat('png'); + $imga->writeImage($tempfile_plain); + $parsed = true; + } catch (Exception $e) { + // Imagemagick fails, try with GD + $parse_error = 'Imagick library error: '.$e->getMessage(); + } + } + // GD extension + if (($parsed === false) AND function_exists('imagecreatefrompng')) { + try { + // generate images + $img = imagecreatefrompng($file); + $imgalpha = imagecreate($wpx, $hpx); + // generate gray scale palette (0 -> 255) + for ($c = 0; $c < 256; ++$c) { + ImageColorAllocate($imgalpha, $c, $c, $c); + } + // extract alpha channel + for ($xpx = 0; $xpx < $wpx; ++$xpx) { + for ($ypx = 0; $ypx < $hpx; ++$ypx) { + $color = imagecolorat($img, $xpx, $ypx); + // get and correct gamma color + $alpha = $this->getGDgamma($img, $color); + imagesetpixel($imgalpha, $xpx, $ypx, $alpha); + } + } + imagepng($imgalpha, $tempfile_alpha); + imagedestroy($imgalpha); + // extract image without alpha channel + $imgplain = imagecreatetruecolor($wpx, $hpx); + imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx); + imagepng($imgplain, $tempfile_plain); + imagedestroy($imgplain); + $parsed = true; + } catch (Exception $e) { + // GD fails + $parse_error = 'GD library error: '.$e->getMessage(); + } + } + if ($parsed === false) { + if (empty($parse_error)) { + $this->Error('TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.'); + } else { + $this->Error($parse_error); + } + } + // embed mask image + $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); + // embed image, masked with previously embedded mask + $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); + } + + /** + * Get the GD-corrected PNG gamma value from alpha color + * @param $img (int) GD image Resource ID. + * @param $c (int) alpha color + * @protected + * @since 4.3.007 (2008-12-04) + */ + protected function getGDgamma($img, $c) { + if (!isset($this->gdgammacache['#'.$c])) { + $colors = imagecolorsforindex($img, $c); + // GD alpha is only 7 bit (0 -> 127) + $this->gdgammacache['#'.$c] = (((127 - $colors['alpha']) / 127) * 255); + // correct gamma + $this->gdgammacache['#'.$c] = (pow(($this->gdgammacache['#'.$c] / 255), 2.2) * 255); + // store the latest values on cache to improve performances + if (count($this->gdgammacache) > 8) { + // remove one element from the cache array + array_shift($this->gdgammacache); + } + } + return $this->gdgammacache['#'.$c]; + } + + /** + * Performs a line break. + * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter. + * @param $h (float) The height of the break. By default, the value equals the height of the last printed cell. + * @param $cell (boolean) if true add the current left (or right o for RTL) padding to the X coordinate + * @public + * @since 1.0 + * @see Cell() + */ + public function Ln($h='', $cell=false) { + if (($this->num_columns > 1) AND ($this->y == $this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x == $this->columns[$this->current_column]['x'])) { + // revove vertical space from the top of the column + return; + } + if ($cell) { + if ($this->rtl) { + $cellpadding = $this->cell_padding['R']; + } else { + $cellpadding = $this->cell_padding['L']; + } + } else { + $cellpadding = 0; + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin - $cellpadding; + } else { + $this->x = $this->lMargin + $cellpadding; + } + if (is_string($h)) { + $h = $this->lasth; + } + $this->y += $h; + $this->newline = true; + } + + /** + * Returns the relative X value of current position. + * The value is relative to the left border for LTR languages and to the right border for RTL languages. + * @return float + * @public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetX() { + //Get x position + if ($this->rtl) { + return ($this->w - $this->x); + } else { + return $this->x; + } + } + + /** + * Returns the absolute X value of current position. + * @return float + * @public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetAbsX() { + return $this->x; + } + + /** + * Returns the ordinate of the current position. + * @return float + * @public + * @since 1.0 + * @see SetY(), GetX(), SetX() + */ + public function GetY() { + return $this->y; + } + + /** + * Defines the abscissa of the current position. + * If the passed value is negative, it is relative to the right of the page (or left if language is RTL). + * @param $x (float) The value of the abscissa in user units. + * @param $rtloff (boolean) if true always uses the page top-left corner as origin of axis. + * @public + * @since 1.2 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function SetX($x, $rtloff=false) { + $x = floatval($x); + if (!$rtloff AND $this->rtl) { + if ($x >= 0) { + $this->x = $this->w - $x; + } else { + $this->x = abs($x); + } + } else { + if ($x >= 0) { + $this->x = $x; + } else { + $this->x = $this->w + $x; + } + } + if ($this->x < 0) { + $this->x = 0; + } + if ($this->x > $this->w) { + $this->x = $this->w; + } + } + + /** + * Moves the current abscissa back to the left margin and sets the ordinate. + * If the passed value is negative, it is relative to the bottom of the page. + * @param $y (float) The value of the ordinate in user units. + * @param $resetx (bool) if true (default) reset the X position. + * @param $rtloff (boolean) if true always uses the page top-left corner as origin of axis. + * @public + * @since 1.0 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function SetY($y, $resetx=true, $rtloff=false) { + $y = floatval($y); + if ($resetx) { + //reset x + if (!$rtloff AND $this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + if ($y >= 0) { + $this->y = $y; + } else { + $this->y = $this->h + $y; + } + if ($this->y < 0) { + $this->y = 0; + } + if ($this->y > $this->h) { + $this->y = $this->h; + } + } + + /** + * Defines the abscissa and ordinate of the current position. + * If the passed values are negative, they are relative respectively to the right and bottom of the page. + * @param $x (float) The value of the abscissa. + * @param $y (float) The value of the ordinate. + * @param $rtloff (boolean) if true always uses the page top-left corner as origin of axis. + * @public + * @since 1.2 + * @see SetX(), SetY() + */ + public function SetXY($x, $y, $rtloff=false) { + $this->SetY($y, false, $rtloff); + $this->SetX($x, $rtloff); + } + + /** + * Set the absolute X coordinate of the current pointer. + * @param $x (float) The value of the abscissa in user units. + * @public + * @since 5.9.186 (2012-09-13) + * @see setAbsX(), setAbsY(), SetAbsXY() + */ + public function SetAbsX($x) { + $this->x = floatval($x); + } + + /** + * Set the absolute Y coordinate of the current pointer. + * @param $y (float) (float) The value of the ordinate in user units. + * @public + * @since 5.9.186 (2012-09-13) + * @see setAbsX(), setAbsY(), SetAbsXY() + */ + public function SetAbsY($y) { + $this->y = floatval($y); + } + + /** + * Set the absolute X and Y coordinates of the current pointer. + * @param $x (float) The value of the abscissa in user units. + * @param $y (float) (float) The value of the ordinate in user units. + * @public + * @since 5.9.186 (2012-09-13) + * @see setAbsX(), setAbsY(), SetAbsXY() + */ + public function SetAbsXY($x, $y) { + $this->SetAbsX($x); + $this->SetAbsY($y); + } + + /** + * Send the document to a given destination: string, local file or browser. + * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.<br /> + * The method first calls Close() if necessary to terminate the document. + * @param $name (string) The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character. + * @param $dest (string) Destination where to send the document. It can take one of the following values:<ul><li>I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.</li><li>D: send to the browser and force a file download with the name given by name.</li><li>F: save to a local server file with the name given by name.</li><li>S: return the document as a string (name is ignored).</li><li>FI: equivalent to F + I option</li><li>FD: equivalent to F + D option</li><li>E: return the document as base64 mime multi-part email attachment (RFC 2045)</li></ul> + * @return string + * @public + * @since 1.0 + * @see Close() + */ + public function Output($name='doc.pdf', $dest='I') { + //Output PDF to some destination + //Finish document if necessary + if ($this->state < 3) { + $this->Close(); + } + //Normalize parameters + if (is_bool($dest)) { + $dest = $dest ? 'D' : 'F'; + } + $dest = strtoupper($dest); + if ($dest[0] != 'F') { + $name = preg_replace('/[\s]+/', '_', $name); + $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name); + } + if ($this->sign) { + // *** apply digital signature to the document *** + // get the document content + $pdfdoc = $this->getBuffer(); + // remove last newline + $pdfdoc = substr($pdfdoc, 0, -1); + // remove filler space + $byterange_string_len = strlen(TCPDF_STATIC::$byterange_string); + // define the ByteRange + $byte_range = array(); + $byte_range[0] = 0; + $byte_range[1] = strpos($pdfdoc, TCPDF_STATIC::$byterange_string) + $byterange_string_len + 10; + $byte_range[2] = $byte_range[1] + $this->signature_max_length + 2; + $byte_range[3] = strlen($pdfdoc) - $byte_range[2]; + $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]); + // replace the ByteRange + $byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]); + $byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange))); + $pdfdoc = str_replace(TCPDF_STATIC::$byterange_string, $byterange, $pdfdoc); + // write the document to a temporary folder + $tempdoc = TCPDF_STATIC::getObjFilename('doc', $this->file_id); + $f = TCPDF_STATIC::fopenLocal($tempdoc, 'wb'); + if (!$f) { + $this->Error('Unable to create temporary file: '.$tempdoc); + } + $pdfdoc_length = strlen($pdfdoc); + fwrite($f, $pdfdoc, $pdfdoc_length); + fclose($f); + // get digital signature via openssl library + $tempsign = TCPDF_STATIC::getObjFilename('sig', $this->file_id); + if (empty($this->signature_data['extracerts'])) { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED); + } else { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']); + } + // read signature + $signature = file_get_contents($tempsign); + // extract signature + $signature = substr($signature, $pdfdoc_length); + $signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13)); + $tmparr = explode("\n\n", $signature); + $signature = $tmparr[1]; + // decode signature + $signature = base64_decode(trim($signature)); + // add TSA timestamp to signature + $signature = $this->applyTSA($signature); + // convert signature to hex + $signature = current(unpack('H*', $signature)); + $signature = str_pad($signature, $this->signature_max_length, '0'); + // Add signature to the document + $this->buffer = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, $byte_range[1]); + $this->bufferlen = strlen($this->buffer); + } + switch($dest) { + case 'I': { + // Send PDF to the standard output + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + if (php_sapi_name() != 'cli') { + // send output to a browser + header('Content-Type: application/pdf'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Disposition: inline; filename="'.basename($name).'"'); + TCPDF_STATIC::sendOutputData($this->getBuffer(), $this->bufferlen); + } else { + echo $this->getBuffer(); + } + break; + } + case 'D': { + // download PDF as file + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + if (strpos(php_sapi_name(), 'cgi') === false) { + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + } else { + header('Content-Type: application/pdf'); + } + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'"'); + header('Content-Transfer-Encoding: binary'); + TCPDF_STATIC::sendOutputData($this->getBuffer(), $this->bufferlen); + break; + } + case 'F': + case 'FI': + case 'FD': { + // save PDF to a local file + $f = TCPDF_STATIC::fopenLocal($name, 'wb'); + if (!$f) { + $this->Error('Unable to create output file: '.$name); + } + fwrite($f, $this->getBuffer(), $this->bufferlen); + fclose($f); + if ($dest == 'FI') { + // send headers to browser + header('Content-Type: application/pdf'); + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Disposition: inline; filename="'.basename($name).'"'); + TCPDF_STATIC::sendOutputData(file_get_contents($name), filesize($name)); + } elseif ($dest == 'FD') { + // send headers to browser + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + if (strpos(php_sapi_name(), 'cgi') === false) { + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + } else { + header('Content-Type: application/pdf'); + } + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'"'); + header('Content-Transfer-Encoding: binary'); + TCPDF_STATIC::sendOutputData(file_get_contents($name), filesize($name)); + } + break; + } + case 'E': { + // return PDF as base64 mime multi-part email attachment (RFC 2045) + $retval = 'Content-Type: application/pdf;'."\r\n"; + $retval .= ' name="'.$name.'"'."\r\n"; + $retval .= 'Content-Transfer-Encoding: base64'."\r\n"; + $retval .= 'Content-Disposition: attachment;'."\r\n"; + $retval .= ' filename="'.$name.'"'."\r\n\r\n"; + $retval .= chunk_split(base64_encode($this->getBuffer()), 76, "\r\n"); + return $retval; + } + case 'S': { + // returns PDF as a string + return $this->getBuffer(); + } + default: { + $this->Error('Incorrect output destination: '.$dest); + } + } + return ''; + } + + /** + * Unset all class variables except the following critical variables. + * @param $destroyall (boolean) if true destroys all class variables, otherwise preserves critical variables. + * @param $preserve_objcopy (boolean) if true preserves the objcopy variable + * @public + * @since 4.5.016 (2009-02-24) + */ + public function _destroy($destroyall=false, $preserve_objcopy=false) { + if ($destroyall AND !$preserve_objcopy) { + // remove all temporary files + $tmpfiles = glob(K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_*'); + if (!empty($tmpfiles)) { + array_map('unlink', $tmpfiles); + } + } + $preserve = array( + 'file_id', + 'internal_encoding', + 'state', + 'bufferlen', + 'buffer', + 'cached_files', + 'sign', + 'signature_data', + 'signature_max_length', + 'byterange_string', + 'tsa_timestamp', + 'tsa_data' + ); + foreach (array_keys(get_object_vars($this)) as $val) { + if ($destroyall OR !in_array($val, $preserve)) { + if ((!$preserve_objcopy OR ($val != 'objcopy')) AND ($val != 'file_id') AND isset($this->$val)) { + unset($this->$val); + } + } + } + } + + /** + * Check for locale-related bug + * @protected + */ + protected function _dochecks() { + //Check for locale-related bug + if (1.1 == 1) { + $this->Error('Don\'t alter the locale before including class file'); + } + //Check for decimal separator + if (sprintf('%.1F', 1.0) != '1.0') { + setlocale(LC_NUMERIC, 'C'); + } + } + + /** + * Return an array containing variations for the basic page number alias. + * @param $a (string) Base alias. + * @return array of page number aliases + * @protected + */ + protected function getInternalPageNumberAliases($a= '') { + $alias = array(); + // build array of Unicode + ASCII variants (the order is important) + $alias = array('u' => array(), 'a' => array()); + $u = '{'.$a.'}'; + $alias['u'][] = TCPDF_STATIC::_escape($u); + if ($this->isunicode) { + $alias['u'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($u, $this->isunicode, $this->CurrentFont)); + $alias['u'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($u, false, $this->tmprtl, $this->isunicode, $this->CurrentFont)); + $alias['a'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($a, $this->isunicode, $this->CurrentFont)); + $alias['a'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($a, false, $this->tmprtl, $this->isunicode, $this->CurrentFont)); + } + $alias['a'][] = TCPDF_STATIC::_escape($a); + return $alias; + } + + /** + * Return an array containing all internal page aliases. + * @return array of page number aliases + * @protected + */ + protected function getAllInternalPageNumberAliases() { + $basic_alias = array(TCPDF_STATIC::$alias_tot_pages, TCPDF_STATIC::$alias_num_page, TCPDF_STATIC::$alias_group_tot_pages, TCPDF_STATIC::$alias_group_num_page, TCPDF_STATIC::$alias_right_shift); + $pnalias = array(); + foreach($basic_alias as $k => $a) { + $pnalias[$k] = $this->getInternalPageNumberAliases($a); + } + return $pnalias; + } + + /** + * Replace right shift page number aliases with spaces to correct right alignment. + * This works perfectly only when using monospaced fonts. + * @param $page (string) Page content. + * @param $aliases (array) Array of page aliases. + * @param $diff (int) initial difference to add. + * @return replaced page content. + * @protected + */ + protected function replaceRightShiftPageNumAliases($page, $aliases, $diff) { + foreach ($aliases as $type => $alias) { + foreach ($alias as $a) { + // find position of compensation factor + $startnum = (strpos($a, ':') + 1); + $a = substr($a, 0, $startnum); + if (($pos = strpos($page, $a)) !== false) { + // end of alias + $endnum = strpos($page, '}', $pos); + // string to be replaced + $aa = substr($page, $pos, ($endnum - $pos + 1)); + // get compensation factor + $ratio = substr($page, ($pos + $startnum), ($endnum - $pos - $startnum)); + $ratio = preg_replace('/[^0-9\.]/', '', $ratio); + $ratio = floatval($ratio); + if ($type == 'u') { + $chrdiff = floor(($diff + 12) * $ratio); + $shift = str_repeat(' ', $chrdiff); + $shift = TCPDF_FONTS::UTF8ToUTF16BE($shift, false, $this->isunicode, $this->CurrentFont); + } else { + $chrdiff = floor(($diff + 11) * $ratio); + $shift = str_repeat(' ', $chrdiff); + } + $page = str_replace($aa, $shift, $page); + } + } + } + return $page; + } + + /** + * Set page boxes to be included on page descriptions. + * @param $boxes (array) Array of page boxes to set on document: ('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'). + * @protected + */ + protected function setPageBoxTypes($boxes) { + $this->page_boxes = array(); + foreach ($boxes as $box) { + if (in_array($box, TCPDF_STATIC::$pageboxes)) { + $this->page_boxes[] = $box; + } + } + } + + /** + * Output pages (and replace page number aliases). + * @protected + */ + protected function _putpages() { + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + // get internal aliases for page numbers + $pnalias = $this->getAllInternalPageNumberAliases(); + $num_pages = $this->numpages; + $ptpa = TCPDF_STATIC::formatPageNumber(($this->starting_page_number + $num_pages - 1)); + $ptpu = TCPDF_FONTS::UTF8ToUTF16BE($ptpa, false, $this->isunicode, $this->CurrentFont); + $ptp_num_chars = $this->GetNumChars($ptpa); + $pagegroupnum = 0; + $groupnum = 0; + $ptgu = 1; + $ptga = 1; + $ptg_num_chars = 1; + for ($n = 1; $n <= $num_pages; ++$n) { + // get current page + $temppage = $this->getPageBuffer($n); + $pagelen = strlen($temppage); + // set replacements for total pages number + $pnpa = TCPDF_STATIC::formatPageNumber(($this->starting_page_number + $n - 1)); + $pnpu = TCPDF_FONTS::UTF8ToUTF16BE($pnpa, false, $this->isunicode, $this->CurrentFont); + $pnp_num_chars = $this->GetNumChars($pnpa); + $pdiff = 0; // difference used for right shift alignment of page numbers + $gdiff = 0; // difference used for right shift alignment of page group numbers + if (!empty($this->pagegroups)) { + if (isset($this->newpagegroup[$n])) { + $pagegroupnum = 0; + ++$groupnum; + $ptga = TCPDF_STATIC::formatPageNumber($this->pagegroups[$groupnum]); + $ptgu = TCPDF_FONTS::UTF8ToUTF16BE($ptga, false, $this->isunicode, $this->CurrentFont); + $ptg_num_chars = $this->GetNumChars($ptga); + } + ++$pagegroupnum; + $pnga = TCPDF_STATIC::formatPageNumber($pagegroupnum); + $pngu = TCPDF_FONTS::UTF8ToUTF16BE($pnga, false, $this->isunicode, $this->CurrentFont); + $png_num_chars = $this->GetNumChars($pnga); + // replace page numbers + $replace = array(); + $replace[] = array($ptgu, $ptg_num_chars, 9, $pnalias[2]['u']); + $replace[] = array($ptga, $ptg_num_chars, 7, $pnalias[2]['a']); + $replace[] = array($pngu, $png_num_chars, 9, $pnalias[3]['u']); + $replace[] = array($pnga, $png_num_chars, 7, $pnalias[3]['a']); + list($temppage, $gdiff) = TCPDF_STATIC::replacePageNumAliases($temppage, $replace, $gdiff); + } + // replace page numbers + $replace = array(); + $replace[] = array($ptpu, $ptp_num_chars, 9, $pnalias[0]['u']); + $replace[] = array($ptpa, $ptp_num_chars, 7, $pnalias[0]['a']); + $replace[] = array($pnpu, $pnp_num_chars, 9, $pnalias[1]['u']); + $replace[] = array($pnpa, $pnp_num_chars, 7, $pnalias[1]['a']); + list($temppage, $pdiff) = TCPDF_STATIC::replacePageNumAliases($temppage, $replace, $pdiff); + // replace right shift alias + $temppage = $this->replaceRightShiftPageNumAliases($temppage, $pnalias[4], max($pdiff, $gdiff)); + // replace EPS marker + $temppage = str_replace($this->epsmarker, '', $temppage); + //Page + $this->page_obj_id[$n] = $this->_newobj(); + $out = '<<'; + $out .= ' /Type /Page'; + $out .= ' /Parent 1 0 R'; + if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { + $out .= ' /LastModified '.$this->_datestring(0, $this->doc_modification_timestamp); + } + $out .= ' /Resources 2 0 R'; + foreach ($this->page_boxes as $box) { + $out .= ' /'.$box; + $out .= sprintf(' [%F %F %F %F]', $this->pagedim[$n][$box]['llx'], $this->pagedim[$n][$box]['lly'], $this->pagedim[$n][$box]['urx'], $this->pagedim[$n][$box]['ury']); + } + if (isset($this->pagedim[$n]['BoxColorInfo']) AND !empty($this->pagedim[$n]['BoxColorInfo'])) { + $out .= ' /BoxColorInfo <<'; + foreach ($this->page_boxes as $box) { + if (isset($this->pagedim[$n]['BoxColorInfo'][$box])) { + $out .= ' /'.$box.' <<'; + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['C'])) { + $color = $this->pagedim[$n]['BoxColorInfo'][$box]['C']; + $out .= ' /C ['; + $out .= sprintf(' %F %F %F', ($color[0] / 255), ($color[1] / 255), ($color[2] / 255)); + $out .= ' ]'; + } + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['W'])) { + $out .= ' /W '.($this->pagedim[$n]['BoxColorInfo'][$box]['W'] * $this->k); + } + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['S'])) { + $out .= ' /S /'.$this->pagedim[$n]['BoxColorInfo'][$box]['S']; + } + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['D'])) { + $dashes = $this->pagedim[$n]['BoxColorInfo'][$box]['D']; + $out .= ' /D ['; + foreach ($dashes as $dash) { + $out .= sprintf(' %F', ($dash * $this->k)); + } + $out .= ' ]'; + } + $out .= ' >>'; + } + } + $out .= ' >>'; + } + $out .= ' /Contents '.($this->n + 1).' 0 R'; + $out .= ' /Rotate '.$this->pagedim[$n]['Rotate']; + if (!$this->pdfa_mode) { + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>'; + } + if (isset($this->pagedim[$n]['trans']) AND !empty($this->pagedim[$n]['trans'])) { + // page transitions + if (isset($this->pagedim[$n]['trans']['Dur'])) { + $out .= ' /Dur '.$this->pagedim[$n]['trans']['Dur']; + } + $out .= ' /Trans <<'; + $out .= ' /Type /Trans'; + if (isset($this->pagedim[$n]['trans']['S'])) { + $out .= ' /S /'.$this->pagedim[$n]['trans']['S']; + } + if (isset($this->pagedim[$n]['trans']['D'])) { + $out .= ' /D '.$this->pagedim[$n]['trans']['D']; + } + if (isset($this->pagedim[$n]['trans']['Dm'])) { + $out .= ' /Dm /'.$this->pagedim[$n]['trans']['Dm']; + } + if (isset($this->pagedim[$n]['trans']['M'])) { + $out .= ' /M /'.$this->pagedim[$n]['trans']['M']; + } + if (isset($this->pagedim[$n]['trans']['Di'])) { + $out .= ' /Di '.$this->pagedim[$n]['trans']['Di']; + } + if (isset($this->pagedim[$n]['trans']['SS'])) { + $out .= ' /SS '.$this->pagedim[$n]['trans']['SS']; + } + if (isset($this->pagedim[$n]['trans']['B'])) { + $out .= ' /B '.$this->pagedim[$n]['trans']['B']; + } + $out .= ' >>'; + } + $out .= $this->_getannotsrefs($n); + $out .= ' /PZ '.$this->pagedim[$n]['PZ']; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + //Page content + $p = ($this->compress) ? gzcompress($temppage) : $temppage; + $this->_newobj(); + $p = $this->_getrawstream($p); + $this->_out('<<'.$filter.'/Length '.strlen($p).'>> stream'."\n".$p."\n".'endstream'."\n".'endobj'); + } + //Pages root + $out = $this->_getobj(1)."\n"; + $out .= '<< /Type /Pages /Kids ['; + foreach($this->page_obj_id as $page_obj) { + $out .= ' '.$page_obj.' 0 R'; + } + $out .= ' ] /Count '.$num_pages.' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Get references to page annotations. + * @param $n (int) page number + * @return string + * @protected + * @author Nicola Asuni + * @since 5.0.010 (2010-05-17) + */ + protected function _getannotsrefs($n) { + if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) { + return ''; + } + $out = ' /Annots ['; + if (isset($this->PageAnnots[$n])) { + foreach ($this->PageAnnots[$n] as $key => $val) { + if (!in_array($val['n'], $this->radio_groups)) { + $out .= ' '.$val['n'].' 0 R'; + } + } + // add radiobutton groups + if (isset($this->radiobutton_groups[$n])) { + foreach ($this->radiobutton_groups[$n] as $key => $data) { + if (isset($data['n'])) { + $out .= ' '.$data['n'].' 0 R'; + } + } + } + } + if ($this->sign AND ($n == $this->signature_appearance['page']) AND isset($this->signature_data['cert_type'])) { + // set reference for signature object + $out .= ' '.$this->sig_obj_id.' 0 R'; + } + if (!empty($this->empty_signature_appearance)) { + foreach ($this->empty_signature_appearance as $esa) { + if ($esa['page'] == $n) { + // set reference for empty signature objects + $out .= ' '.$esa['objid'].' 0 R'; + } + } + } + $out .= ' ]'; + return $out; + } + + /** + * Output annotations objects for all pages. + * !!! THIS METHOD IS NOT YET COMPLETED !!! + * See section 12.5 of PDF 32000_2008 reference. + * @protected + * @author Nicola Asuni + * @since 4.0.018 (2008-08-06) + */ + protected function _putannotsobjs() { + // reset object counter + for ($n=1; $n <= $this->numpages; ++$n) { + if (isset($this->PageAnnots[$n])) { + // set page annotations + foreach ($this->PageAnnots[$n] as $key => $pl) { + $annot_obj_id = $this->PageAnnots[$n][$key]['n']; + // create annotation object for grouping radiobuttons + if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) { + $radio_button_obj_id = $this->radiobutton_groups[$n][$pl['txt']]['n']; + $annots = '<<'; + $annots .= ' /Type /Annot'; + $annots .= ' /Subtype /Widget'; + $annots .= ' /Rect [0 0 0 0]'; + if ($this->radiobutton_groups[$n][$pl['txt']]['#readonly#']) { + // read only + $annots .= ' /F 68'; + $annots .= ' /Ff 49153'; + } else { + $annots .= ' /F 4'; // default print for PDF/A + $annots .= ' /Ff 49152'; + } + $annots .= ' /T '.$this->_datastring($pl['txt'], $radio_button_obj_id); + if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { + $annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $radio_button_obj_id); + } + $annots .= ' /FT /Btn'; + $annots .= ' /Kids ['; + $defval = ''; + foreach ($this->radiobutton_groups[$n][$pl['txt']] as $key => $data) { + if (isset($data['kid'])) { + $annots .= ' '.$data['kid'].' 0 R'; + if ($data['def'] !== 'Off') { + $defval = $data['def']; + } + } + } + $annots .= ' ]'; + if (!empty($defval)) { + $annots .= ' /V /'.$defval; + } + $annots .= ' >>'; + $this->_out($this->_getobj($radio_button_obj_id)."\n".$annots."\n".'endobj'); + $this->form_obj_id[] = $radio_button_obj_id; + // store object id to be used on Parent entry of Kids + $this->radiobutton_groups[$n][$pl['txt']] = $radio_button_obj_id; + } + $formfield = false; + $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER); + $a = $pl['x'] * $this->k; + $b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k); + $c = $pl['w'] * $this->k; + $d = $pl['h'] * $this->k; + $rect = sprintf('%F %F %F %F', $a, $b, $a+$c, $b+$d); + // create new annotation object + $annots = '<</Type /Annot'; + $annots .= ' /Subtype /'.$pl['opt']['subtype']; + $annots .= ' /Rect ['.$rect.']'; + $ft = array('Btn', 'Tx', 'Ch', 'Sig'); + if (isset($pl['opt']['ft']) AND in_array($pl['opt']['ft'], $ft)) { + $annots .= ' /FT /'.$pl['opt']['ft']; + $formfield = true; + } + $annots .= ' /Contents '.$this->_textstring($pl['txt'], $annot_obj_id); + $annots .= ' /P '.$this->page_obj_id[$n].' 0 R'; + $annots .= ' /NM '.$this->_datastring(sprintf('%04u-%04u', $n, $key), $annot_obj_id); + $annots .= ' /M '.$this->_datestring($annot_obj_id, $this->doc_modification_timestamp); + if (isset($pl['opt']['f'])) { + $fval = 0; + if (is_array($pl['opt']['f'])) { + foreach ($pl['opt']['f'] as $f) { + switch (strtolower($f)) { + case 'invisible': { + $fval += 1 << 0; + break; + } + case 'hidden': { + $fval += 1 << 1; + break; + } + case 'print': { + $fval += 1 << 2; + break; + } + case 'nozoom': { + $fval += 1 << 3; + break; + } + case 'norotate': { + $fval += 1 << 4; + break; + } + case 'noview': { + $fval += 1 << 5; + break; + } + case 'readonly': { + $fval += 1 << 6; + break; + } + case 'locked': { + $fval += 1 << 8; + break; + } + case 'togglenoview': { + $fval += 1 << 9; + break; + } + case 'lockedcontents': { + $fval += 1 << 10; + break; + } + default: { + break; + } + } + } + } else { + $fval = intval($pl['opt']['f']); + } + } else { + $fval = 4; + } + if ($this->pdfa_mode) { + // force print flag for PDF/A mode + $fval |= 4; + } + $annots .= ' /F '.intval($fval); + if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) { + $annots .= ' /AS /'.$pl['opt']['as']; + } + if (isset($pl['opt']['ap'])) { + // appearance stream + $annots .= ' /AP <<'; + if (is_array($pl['opt']['ap'])) { + foreach ($pl['opt']['ap'] as $apmode => $apdef) { + // $apmode can be: n = normal; r = rollover; d = down; + $annots .= ' /'.strtoupper($apmode); + if (is_array($apdef)) { + $annots .= ' <<'; + foreach ($apdef as $apstate => $stream) { + // reference to XObject that define the appearance for this mode-state + $apsobjid = $this->_putAPXObject($c, $d, $stream); + $annots .= ' /'.$apstate.' '.$apsobjid.' 0 R'; + } + $annots .= ' >>'; + } else { + // reference to XObject that define the appearance for this mode + $apsobjid = $this->_putAPXObject($c, $d, $apdef); + $annots .= ' '.$apsobjid.' 0 R'; + } + } + } else { + $annots .= $pl['opt']['ap']; + } + $annots .= ' >>'; + } + if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) { + $annots .= ' /BS <<'; + $annots .= ' /Type /Border'; + if (isset($pl['opt']['bs']['w'])) { + $annots .= ' /W '.intval($pl['opt']['bs']['w']); + } + $bstyles = array('S', 'D', 'B', 'I', 'U'); + if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } + if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) { + $annots .= ' /D ['; + foreach ($pl['opt']['bs']['d'] as $cord) { + $annots .= ' '.intval($cord); + } + $annots .= ']'; + } + $annots .= ' >>'; + } else { + $annots .= ' /Border ['; + if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) { + $annots .= intval($pl['opt']['border'][0]).' '; + $annots .= intval($pl['opt']['border'][1]).' '; + $annots .= intval($pl['opt']['border'][2]); + if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) { + $annots .= ' ['; + foreach ($pl['opt']['border'][3] as $dash) { + $annots .= intval($dash).' '; + } + $annots .= ']'; + } + } else { + $annots .= '0 0 0'; + } + $annots .= ']'; + } + if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) { + $annots .= ' /BE <<'; + $bstyles = array('S', 'C'); + if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $bstyles)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } else { + $annots .= ' /S /S'; + } + if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) { + $annots .= ' /I '.sprintf(' %F', $pl['opt']['be']['i']); + } + $annots .= '>>'; + } + if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) { + $annots .= ' /C '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['c']); + } + //$annots .= ' /StructParent '; + //$annots .= ' /OC '; + $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound'); + if (in_array(strtolower($pl['opt']['subtype']), $markups)) { + // this is a markup type + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_textstring($pl['opt']['t'], $annot_obj_id); + } + //$annots .= ' /Popup '; + if (isset($pl['opt']['ca'])) { + $annots .= ' /CA '.sprintf('%F', floatval($pl['opt']['ca'])); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id); + } + $annots .= ' /CreationDate '.$this->_datestring($annot_obj_id, $this->doc_creation_timestamp); + //$annots .= ' /IRT '; + if (isset($pl['opt']['subj'])) { + $annots .= ' /Subj '.$this->_textstring($pl['opt']['subj'], $annot_obj_id); + } + //$annots .= ' /RT '; + //$annots .= ' /IT '; + //$annots .= ' /ExData '; + } + $lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash'); + // Annotation types + switch (strtolower($pl['opt']['subtype'])) { + case 'text': { + if (isset($pl['opt']['open'])) { + $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false'); + } + $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Note'; + } + $statemodels = array('Marked', 'Review'); + if (isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'], $statemodels)) { + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } else { + $pl['opt']['statemodel'] = 'Marked'; + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } + if ($pl['opt']['statemodel'] == 'Marked') { + $states = array('Accepted', 'Unmarked'); + } else { + $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None'); + } + if (isset($pl['opt']['state']) AND in_array($pl['opt']['state'], $states)) { + $annots .= ' /State /'.$pl['opt']['state']; + } else { + if ($pl['opt']['statemodel'] == 'Marked') { + $annots .= ' /State /Unmarked'; + } else { + $annots .= ' /State /None'; + } + } + break; + } + case 'link': { + if (is_string($pl['txt'])) { + if ($pl['txt'][0] == '#') { + // internal destination + $annots .= ' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($pl['txt'], 1)); + } elseif ($pl['txt'][0] == '%') { + // embedded PDF file + $filename = basename(substr($pl['txt'], 1)); + $annots .= ' /A << /S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P '.($n - 1).' /A '.$this->embeddedfiles[$filename]['a'].' >> >>'; + } elseif ($pl['txt'][0] == '*') { + // embedded generic file + $filename = basename(substr($pl['txt'], 1)); + $jsa = 'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});'; + $annots .= ' /A << /S /JavaScript /JS '.$this->_textstring($jsa, $annot_obj_id).'>>'; + } else { + $parsedUrl = parse_url($pl['txt']); + if (empty($parsedUrl['scheme']) AND (strtolower(substr($parsedUrl['path'], -4)) == '.pdf')) { + // relative link to a PDF file + $dest = '[0 /Fit]'; // default page 0 + if (!empty($parsedUrl['fragment'])) { + // check for named destination + $tmp = explode('=', $parsedUrl['fragment']); + $dest = '('.((count($tmp) == 2) ? $tmp[1] : $tmp[0]).')'; + } + $annots .= ' /A <</S /GoToR /D '.$dest.' /F '.$this->_datastring($this->unhtmlentities($parsedUrl['path']), $annot_obj_id).' /NewWindow true>>'; + } else { + // external URI link + $annots .= ' /A <</S /URI /URI '.$this->_datastring($this->unhtmlentities($pl['txt']), $annot_obj_id).'>>'; + } + } + } elseif (isset($this->links[$pl['txt']])) { + // internal link ID + $l = $this->links[$pl['txt']]; + if (isset($this->page_obj_id[($l['p'])])) { + $annots .= sprintf(' /Dest [%u 0 R /XYZ 0 %F null]', $this->page_obj_id[($l['p'])], ($this->pagedim[$l['p']]['h'] - ($l['y'] * $this->k))); + } + } + $hmodes = array('N', 'I', 'O', 'P'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) { + $annots .= ' /H /'.$pl['opt']['h']; + } else { + $annots .= ' /H /I'; + } + //$annots .= ' /PA '; + //$annots .= ' /Quadpoints '; + break; + } + case 'freetext': { + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id); + } + if (isset($pl['opt']['ds'])) { + $annots .= ' /DS '.$this->_textstring($pl['opt']['ds'], $annot_obj_id); + } + if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) { + $annots .= ' /CL ['; + foreach ($pl['opt']['cl'] as $cl) { + $annots .= sprintf('%F ', $cl * $this->k); + } + $annots .= ']'; + } + $tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter'); + if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) { + $annots .= ' /IT /'.$pl['opt']['it']; + } + if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) { + $l = $pl['opt']['rd'][0] * $this->k; + $r = $pl['opt']['rd'][1] * $this->k; + $t = $pl['opt']['rd'][2] * $this->k; + $b = $pl['opt']['rd'][3] * $this->k; + $annots .= ' /RD ['.sprintf('%F %F %F %F', $l, $r, $t, $b).']'; + } + if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) { + $annots .= ' /LE /'.$pl['opt']['le']; + } + break; + } + case 'line': { + break; + } + case 'square': { + break; + } + case 'circle': { + break; + } + case 'polygon': { + break; + } + case 'polyline': { + break; + } + case 'highlight': { + break; + } + case 'underline': { + break; + } + case 'squiggly': { + break; + } + case 'strikeout': { + break; + } + case 'stamp': { + break; + } + case 'caret': { + break; + } + case 'ink': { + break; + } + case 'popup': { + break; + } + case 'fileattachment': { + if ($this->pdfa_mode) { + // embedded files are not allowed in PDF/A mode + break; + } + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['f'])) { + $annots .= ' /FS '.$this->embeddedfiles[$filename]['f'].' 0 R'; + $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /PushPin'; + } + // index (zero-based) of the annotation in the Annots array of this page + $this->embeddedfiles[$filename]['a'] = $key; + } + break; + } + case 'sound': { + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['f'])) { + // ... TO BE COMPLETED ... + // /R /C /B /E /CO /CP + $annots .= ' /Sound '.$this->embeddedfiles[$filename]['f'].' 0 R'; + $iconsapp = array('Speaker', 'Mic'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Speaker'; + } + } + break; + } + case 'movie': { + break; + } + case 'widget': { + $hmode = array('N', 'I', 'O', 'P', 'T'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) { + $annots .= ' /H /'.$pl['opt']['h']; + } + if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) { + $annots .= ' /MK <<'; + if (isset($pl['opt']['mk']['r'])) { + $annots .= ' /R '.$pl['opt']['mk']['r']; + } + if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) { + $annots .= ' /BC '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bc']); + } + if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) { + $annots .= ' /BG '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bg']); + } + if (isset($pl['opt']['mk']['ca'])) { + $annots .= ' /CA '.$pl['opt']['mk']['ca']; + } + if (isset($pl['opt']['mk']['rc'])) { + $annots .= ' /RC '.$pl['opt']['mk']['rc']; + } + if (isset($pl['opt']['mk']['ac'])) { + $annots .= ' /AC '.$pl['opt']['mk']['ac']; + } + if (isset($pl['opt']['mk']['i'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['i']); + if ($info !== false) { + $annots .= ' /I '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ri'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ri']); + if ($info !== false) { + $annots .= ' /RI '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ix'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ix']); + if ($info !== false) { + $annots .= ' /IX '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) { + $annots .= ' /IF <<'; + $if_sw = array('A', 'B', 'S', 'N'); + if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) { + $annots .= ' /SW /'.$pl['opt']['mk']['if']['sw']; + } + $if_s = array('A', 'P'); + if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) { + $annots .= ' /S /'.$pl['opt']['mk']['if']['s']; + } + if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) { + $annots .= sprintf(' /A [%F %F]', $pl['opt']['mk']['if']['a'][0], $pl['opt']['mk']['if']['a'][1]); + } + if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) { + $annots .= ' /FB true'; + } + $annots .= '>>'; + } + if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) { + $annots .= ' /TP '.intval($pl['opt']['mk']['tp']); + } + $annots .= '>>'; + } // end MK + // --- Entries for field dictionaries --- + if (isset($this->radiobutton_groups[$n][$pl['txt']])) { + // set parent + $annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R'; + } + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_datastring($pl['opt']['t'], $annot_obj_id); + } + if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { + $annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $annot_obj_id); + } + if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) { + $annots .= ' /TM '.$this->_datastring($pl['opt']['tm'], $annot_obj_id); + } + if (isset($pl['opt']['ff'])) { + if (is_array($pl['opt']['ff'])) { + // array of bit settings + $flag = 0; + foreach($pl['opt']['ff'] as $val) { + $flag += 1 << ($val - 1); + } + } else { + $flag = intval($pl['opt']['ff']); + } + $annots .= ' /Ff '.$flag; + } + if (isset($pl['opt']['maxlen'])) { + $annots .= ' /MaxLen '.intval($pl['opt']['maxlen']); + } + if (isset($pl['opt']['v'])) { + $annots .= ' /V'; + if (is_array($pl['opt']['v'])) { + foreach ($pl['opt']['v'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textstring($pl['opt']['v'], $annot_obj_id); + } + } + if (isset($pl['opt']['dv'])) { + $annots .= ' /DV'; + if (is_array($pl['opt']['dv'])) { + foreach ($pl['opt']['dv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textstring($pl['opt']['dv'], $annot_obj_id); + } + } + if (isset($pl['opt']['rv'])) { + $annots .= ' /RV'; + if (is_array($pl['opt']['rv'])) { + foreach ($pl['opt']['rv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textstring($pl['opt']['rv'], $annot_obj_id); + } + } + if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) { + $annots .= ' /A << '.$pl['opt']['a'].' >>'; + } + if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) { + $annots .= ' /AA << '.$pl['opt']['aa'].' >>'; + } + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) { + $annots .= ' /Opt ['; + foreach($pl['opt']['opt'] AS $copt) { + if (is_array($copt)) { + $annots .= ' ['.$this->_textstring($copt[0], $annot_obj_id).' '.$this->_textstring($copt[1], $annot_obj_id).']'; + } else { + $annots .= ' '.$this->_textstring($copt, $annot_obj_id); + } + } + $annots .= ']'; + } + if (isset($pl['opt']['ti'])) { + $annots .= ' /TI '.intval($pl['opt']['ti']); + } + if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) { + $annots .= ' /I ['; + foreach($pl['opt']['i'] AS $copt) { + $annots .= intval($copt).' '; + } + $annots .= ']'; + } + break; + } + case 'screen': { + break; + } + case 'printermark': { + break; + } + case 'trapnet': { + break; + } + case 'watermark': { + break; + } + case '3d': { + break; + } + default: { + break; + } + } + $annots .= '>>'; + // create new annotation object + $this->_out($this->_getobj($annot_obj_id)."\n".$annots."\n".'endobj'); + if ($formfield AND !isset($this->radiobutton_groups[$n][$pl['txt']])) { + // store reference of form object + $this->form_obj_id[] = $annot_obj_id; + } + } + } + } // end for each page + } + + /** + * Put appearance streams XObject used to define annotation's appearance states. + * @param $w (int) annotation width + * @param $h (int) annotation height + * @param $stream (string) appearance stream + * @return int object ID + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected function _putAPXObject($w=0, $h=0, $stream='') { + $stream = trim($stream); + $out = $this->_getobj()."\n"; + $this->xobjects['AX'.$this->n] = array('n' => $this->n); + $out .= '<<'; + $out .= ' /Type /XObject'; + $out .= ' /Subtype /Form'; + $out .= ' /FormType 1'; + if ($this->compress) { + $stream = gzcompress($stream); + $out .= ' /Filter /FlateDecode'; + } + $rect = sprintf('%F %F', $w, $h); + $out .= ' /BBox [0 0 '.$rect.']'; + $out .= ' /Matrix [1 0 0 1 0 0]'; + $out .= ' /Resources 2 0 R'; + $stream = $this->_getrawstream($stream); + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + return $this->n; + } + + /** + * Output fonts. + * @author Nicola Asuni + * @protected + */ + protected function _putfonts() { + $nf = $this->n; + foreach ($this->diffs as $diff) { + //Encodings + $this->_newobj(); + $this->_out('<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.'] >>'."\n".'endobj'); + } + $mqr = TCPDF_STATIC::get_mqr(); + TCPDF_STATIC::set_mqr(false); + foreach ($this->FontFiles as $file => $info) { + // search and get font file to embedd + $fontfile = TCPDF_FONTS::getFontFullPath($file, $info['fontdir']); + if (!TCPDF_STATIC::empty_string($fontfile)) { + $font = file_get_contents($fontfile); + $compressed = (substr($file, -2) == '.z'); + if ((!$compressed) AND (isset($info['length2']))) { + $header = (ord($font[0]) == 128); + if ($header) { + // strip first binary header + $font = substr($font, 6); + } + if ($header AND (ord($font[$info['length1']]) == 128)) { + // strip second binary header + $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6)); + } + } elseif ($info['subset'] AND ((!$compressed) OR ($compressed AND function_exists('gzcompress')))) { + if ($compressed) { + // uncompress font + $font = gzuncompress($font); + } + // merge subset characters + $subsetchars = array(); // used chars + foreach ($info['fontkeys'] as $fontkey) { + $fontinfo = $this->getFontBuffer($fontkey); + $subsetchars += $fontinfo['subsetchars']; + } + // rebuild a font subset + $font = TCPDF_FONTS::_getTrueTypeFontSubset($font, $subsetchars); + // calculate new font length + $info['length1'] = strlen($font); + if ($compressed) { + // recompress font + $font = gzcompress($font); + } + } + $this->_newobj(); + $this->FontFiles[$file]['n'] = $this->n; + $stream = $this->_getrawstream($font); + $out = '<< /Length '.strlen($stream); + if ($compressed) { + $out .= ' /Filter /FlateDecode'; + } + $out .= ' /Length1 '.$info['length1']; + if (isset($info['length2'])) { + $out .= ' /Length2 '.$info['length2'].' /Length3 0'; + } + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + TCPDF_STATIC::set_mqr($mqr); + foreach ($this->fontkeys as $k) { + //Font objects + $font = $this->getFontBuffer($k); + $type = $font['type']; + $name = $font['name']; + if ($type == 'core') { + // standard core font + $out = $this->_getobj($this->font_obj_ids[$k])."\n"; + $out .= '<</Type /Font'; + $out .= ' /Subtype /Type1'; + $out .= ' /BaseFont /'.$name; + $out .= ' /Name /F'.$font['i']; + if ((strtolower($name) != 'symbol') AND (strtolower($name) != 'zapfdingbats')) { + $out .= ' /Encoding /WinAnsiEncoding'; + } + if ($k == 'helvetica') { + // add default font for annotations + $this->annotation_fonts[$k] = $font['i']; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } elseif (($type == 'Type1') OR ($type == 'TrueType')) { + // additional Type1 or TrueType font + $out = $this->_getobj($this->font_obj_ids[$k])."\n"; + $out .= '<</Type /Font'; + $out .= ' /Subtype /'.$type; + $out .= ' /BaseFont /'.$name; + $out .= ' /Name /F'.$font['i']; + $out .= ' /FirstChar 32 /LastChar 255'; + $out .= ' /Widths '.($this->n + 1).' 0 R'; + $out .= ' /FontDescriptor '.($this->n + 2).' 0 R'; + if ($font['enc']) { + if (isset($font['diff'])) { + $out .= ' /Encoding '.($nf + $font['diff']).' 0 R'; + } else { + $out .= ' /Encoding /WinAnsiEncoding'; + } + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // Widths + $this->_newobj(); + $s = '['; + for ($i = 32; $i < 256; ++$i) { + if (isset($font['cw'][$i])) { + $s .= $font['cw'][$i].' '; + } else { + $s .= $font['dw'].' '; + } + } + $s .= ']'; + $s .= "\n".'endobj'; + $this->_out($s); + //Descriptor + $this->_newobj(); + $s = '<</Type /FontDescriptor /FontName /'.$name; + foreach ($font['desc'] as $fdk => $fdv) { + if (is_float($fdv)) { + $fdv = sprintf('%F', $fdv); + } + $s .= ' /'.$fdk.' '.$fdv.''; + } + if (!TCPDF_STATIC::empty_string($font['file'])) { + $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R'; + } + $s .= '>>'; + $s .= "\n".'endobj'; + $this->_out($s); + } else { + // additional types + $mtd = '_put'.strtolower($type); + if (!method_exists($this, $mtd)) { + $this->Error('Unsupported font type: '.$type); + } + $this->$mtd($font); + } + } + } + + /** + * Adds unicode fonts.<br> + * Based on PDF Reference 1.3 (section 5) + * @param $font (array) font data + * @protected + * @author Nicola Asuni + * @since 1.52.0.TC005 (2005-01-05) + */ + protected function _puttruetypeunicode($font) { + $fontname = ''; + if ($font['subset']) { + // change name for font subsetting + $subtag = sprintf('%06u', $font['i']); + $subtag = strtr($subtag, '0123456789', 'ABCDEFGHIJ'); + $fontname .= $subtag.'+'; + } + $fontname .= $font['name']; + // Type0 Font + // A composite font composed of other fonts, organized hierarchically + $out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n"; + $out .= '<< /Type /Font'; + $out .= ' /Subtype /Type0'; + $out .= ' /BaseFont /'.$fontname; + $out .= ' /Name /F'.$font['i']; + $out .= ' /Encoding /'.$font['enc']; + $out .= ' /ToUnicode '.($this->n + 1).' 0 R'; + $out .= ' /DescendantFonts ['.($this->n + 2).' 0 R]'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // ToUnicode map for Identity-H + $stream = TCPDF_FONT_DATA::$uni_identity_h; + // ToUnicode Object + $this->_newobj(); + $stream = ($this->compress) ? gzcompress($stream) : $stream; + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + $stream = $this->_getrawstream($stream); + $this->_out('<<'.$filter.'/Length '.strlen($stream).'>> stream'."\n".$stream."\n".'endstream'."\n".'endobj'); + // CIDFontType2 + // A CIDFont whose glyph descriptions are based on TrueType font technology + $oid = $this->_newobj(); + $out = '<< /Type /Font'; + $out .= ' /Subtype /CIDFontType2'; + $out .= ' /BaseFont /'.$fontname; + // A dictionary containing entries that define the character collection of the CIDFont. + $cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry'], $oid); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo << '.$cidinfo.' >>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; // default width + $out .= "\n".TCPDF_FONTS::_putfontwidths($font, 0); + if (isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))) { + $out .= "\n".'/CIDToGIDMap '.($this->n + 2).' 0 R'; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // Font descriptor + // A font descriptor describing the CIDFont default metrics other than its glyph widths + $this->_newobj(); + $out = '<< /Type /FontDescriptor'; + $out .= ' /FontName /'.$fontname; + foreach ($font['desc'] as $key => $value) { + if (is_float($value)) { + $value = sprintf('%F', $value); + } + $out .= ' /'.$key.' '.$value; + } + $fontdir = false; + if (!TCPDF_STATIC::empty_string($font['file'])) { + // A stream containing a TrueType font + $out .= ' /FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R'; + $fontdir = $this->FontFiles[$font['file']]['fontdir']; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + if (isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))) { + $this->_newobj(); + // Embed CIDToGIDMap + // A specification of the mapping from CIDs to glyph indices + // search and get CTG font file to embedd + $ctgfile = strtolower($font['ctg']); + // search and get ctg font file to embedd + $fontfile = TCPDF_FONTS::getFontFullPath($ctgfile, $fontdir); + if (TCPDF_STATIC::empty_string($fontfile)) { + $this->Error('Font file not found: '.$ctgfile); + } + $stream = $this->_getrawstream(file_get_contents($fontfile)); + $out = '<< /Length '.strlen($stream).''; + if (substr($fontfile, -2) == '.z') { // check file extension + // Decompresses data encoded using the public-domain + // zlib/deflate compression method, reproducing the + // original text or binary data + $out .= ' /Filter /FlateDecode'; + } + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Output CID-0 fonts. + * A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format + * @param $font (array) font data + * @protected + * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira + * @since 3.2.000 (2008-06-23) + */ + protected function _putcidfont0($font) { + $cidoffset = 0; + if (!isset($font['cw'][1])) { + $cidoffset = 31; + } + if (isset($font['cidinfo']['uni2cid'])) { + // convert unicode to cid. + $uni2cid = $font['cidinfo']['uni2cid']; + $cw = array(); + foreach ($font['cw'] as $uni => $width) { + if (isset($uni2cid[$uni])) { + $cw[($uni2cid[$uni] + $cidoffset)] = $width; + } elseif ($uni < 256) { + $cw[$uni] = $width; + } // else unknown character + } + $font = array_merge($font, array('cw' => $cw)); + } + $name = $font['name']; + $enc = $font['enc']; + if ($enc) { + $longname = $name.'-'.$enc; + } else { + $longname = $name; + } + $out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n"; + $out .= '<</Type /Font'; + $out .= ' /Subtype /Type0'; + $out .= ' /BaseFont /'.$longname; + $out .= ' /Name /F'.$font['i']; + if ($enc) { + $out .= ' /Encoding /'.$enc; + } + $out .= ' /DescendantFonts ['.($this->n + 1).' 0 R]'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $oid = $this->_newobj(); + $out = '<</Type /Font'; + $out .= ' /Subtype /CIDFontType0'; + $out .= ' /BaseFont /'.$name; + $cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry'], $oid); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo <<'.$cidinfo.'>>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; + $out .= "\n".TCPDF_FONTS::_putfontwidths($font, $cidoffset); + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $this->_newobj(); + $s = '<</Type /FontDescriptor /FontName /'.$name; + foreach ($font['desc'] as $k => $v) { + if ($k != 'Style') { + if (is_float($v)) { + $v = sprintf('%F', $v); + } + $s .= ' /'.$k.' '.$v.''; + } + } + $s .= '>>'; + $s .= "\n".'endobj'; + $this->_out($s); + } + + /** + * Output images. + * @protected + */ + protected function _putimages() { + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + foreach ($this->imagekeys as $file) { + $info = $this->getImageBuffer($file); + // set object for alternate images array + if ((!$this->pdfa_mode) AND isset($info['altimgs']) AND !empty($info['altimgs'])) { + $altoid = $this->_newobj(); + $out = '['; + foreach ($info['altimgs'] as $altimage) { + if (isset($this->xobjects['I'.$altimage[0]]['n'])) { + $out .= ' << /Image '.$this->xobjects['I'.$altimage[0]]['n'].' 0 R'; + $out .= ' /DefaultForPrinting'; + if ($altimage[1] === true) { + $out .= ' true'; + } else { + $out .= ' false'; + } + $out .= ' >>'; + } + } + $out .= ' ]'; + $out .= "\n".'endobj'; + $this->_out($out); + } + // set image object + $oid = $this->_newobj(); + $this->xobjects['I'.$info['i']] = array('n' => $oid); + $this->setImageSubBuffer($file, 'n', $this->n); + $out = '<</Type /XObject'; + $out .= ' /Subtype /Image'; + $out .= ' /Width '.$info['w']; + $out .= ' /Height '.$info['h']; + if (array_key_exists('masked', $info)) { + $out .= ' /SMask '.($this->n - 1).' 0 R'; + } + // set color space + $icc = false; + if (isset($info['icc']) AND ($info['icc'] !== false)) { + // ICC Colour Space + $icc = true; + $out .= ' /ColorSpace [/ICCBased '.($this->n + 1).' 0 R]'; + } elseif ($info['cs'] == 'Indexed') { + // Indexed Colour Space + $out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]'; + } else { + // Device Colour Space + $out .= ' /ColorSpace /'.$info['cs']; + } + if ($info['cs'] == 'DeviceCMYK') { + $out .= ' /Decode [1 0 1 0 1 0 1 0]'; + } + $out .= ' /BitsPerComponent '.$info['bpc']; + if (isset($altoid) AND ($altoid > 0)) { + // reference to alternate images dictionary + $out .= ' /Alternates '.$altoid.' 0 R'; + } + if (isset($info['exurl']) AND !empty($info['exurl'])) { + // external stream + $out .= ' /Length 0'; + $out .= ' /F << /FS /URL /F '.$this->_datastring($info['exurl'], $oid).' >>'; + if (isset($info['f'])) { + $out .= ' /FFilter /'.$info['f']; + } + $out .= ' >>'; + $out .= ' stream'."\n".'endstream'; + } else { + if (isset($info['f'])) { + $out .= ' /Filter /'.$info['f']; + } + if (isset($info['parms'])) { + $out .= ' '.$info['parms']; + } + if (isset($info['trns']) AND is_array($info['trns'])) { + $trns = ''; + $count_info = count($info['trns']); + if ($info['cs'] == 'Indexed') { + $maxval =(pow(2, $info['bpc']) - 1); + for ($i = 0; $i < $count_info; ++$i) { + if (($info['trns'][$i] != 0) AND ($info['trns'][$i] != $maxval)) { + // this is not a binary type mask @TODO: create a SMask + $trns = ''; + break; + } elseif (empty($trns) AND ($info['trns'][$i] == 0)) { + // store the first fully transparent value + $trns .= $i.' '.$i.' '; + } + } + } else { + // grayscale or RGB + for ($i = 0; $i < $count_info; ++$i) { + if ($info['trns'][$i] == 0) { + $trns .= $info['trns'][$i].' '.$info['trns'][$i].' '; + } + } + } + // Colour Key Masking + if (!empty($trns)) { + $out .= ' /Mask ['.$trns.']'; + } + } + $stream = $this->_getrawstream($info['data']); + $out .= ' /Length '.strlen($stream).' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + } + $out .= "\n".'endobj'; + $this->_out($out); + if ($icc) { + // ICC colour profile + $this->_newobj(); + $icc = ($this->compress) ? gzcompress($info['icc']) : $info['icc']; + $icc = $this->_getrawstream($icc); + $this->_out('<</N '.$info['ch'].' /Alternate /'.$info['cs'].' '.$filter.'/Length '.strlen($icc).'>> stream'."\n".$icc."\n".'endstream'."\n".'endobj'); + } elseif ($info['cs'] == 'Indexed') { + // colour palette + $this->_newobj(); + $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal']; + $pal = $this->_getrawstream($pal); + $this->_out('<<'.$filter.'/Length '.strlen($pal).'>> stream'."\n".$pal."\n".'endstream'."\n".'endobj'); + } + } + } + + /** + * Output Form XObjects Templates. + * @author Nicola Asuni + * @since 5.8.017 (2010-08-24) + * @protected + * @see startTemplate(), endTemplate(), printTemplate() + */ + protected function _putxobjects() { + foreach ($this->xobjects as $key => $data) { + if (isset($data['outdata'])) { + $stream = str_replace($this->epsmarker, '', trim($data['outdata'])); + $out = $this->_getobj($data['n'])."\n"; + $out .= '<<'; + $out .= ' /Type /XObject'; + $out .= ' /Subtype /Form'; + $out .= ' /FormType 1'; + if ($this->compress) { + $stream = gzcompress($stream); + $out .= ' /Filter /FlateDecode'; + } + $out .= sprintf(' /BBox [%F %F %F %F]', ($data['x'] * $this->k), (-$data['y'] * $this->k), (($data['w'] + $data['x']) * $this->k), (($data['h'] - $data['y']) * $this->k)); + $out .= ' /Matrix [1 0 0 1 0 0]'; + $out .= ' /Resources <<'; + $out .= ' /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; + if (!$this->pdfa_mode) { + // transparency + if (isset($data['extgstates']) AND !empty($data['extgstates'])) { + $out .= ' /ExtGState <<'; + foreach ($data['extgstates'] as $k => $extgstate) { + if (isset($this->extgstates[$k]['name'])) { + $out .= ' /'.$this->extgstates[$k]['name']; + } else { + $out .= ' /GS'.$k; + } + $out .= ' '.$this->extgstates[$k]['n'].' 0 R'; + } + $out .= ' >>'; + } + if (isset($data['gradients']) AND !empty($data['gradients'])) { + $gp = ''; + $gs = ''; + foreach ($data['gradients'] as $id => $grad) { + // gradient patterns + $gp .= ' /p'.$id.' '.$this->gradients[$id]['pattern'].' 0 R'; + // gradient shadings + $gs .= ' /Sh'.$id.' '.$this->gradients[$id]['id'].' 0 R'; + } + $out .= ' /Pattern <<'.$gp.' >>'; + $out .= ' /Shading <<'.$gs.' >>'; + } + } + // spot colors + if (isset($data['spot_colors']) AND !empty($data['spot_colors'])) { + $out .= ' /ColorSpace <<'; + foreach ($data['spot_colors'] as $name => $color) { + $out .= ' /CS'.$color['i'].' '.$this->spot_colors[$name]['n'].' 0 R'; + } + $out .= ' >>'; + } + // fonts + if (!empty($data['fonts'])) { + $out .= ' /Font <<'; + foreach ($data['fonts'] as $fontkey => $fontid) { + $out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R'; + } + $out .= ' >>'; + } + // images or nested xobjects + if (!empty($data['images']) OR !empty($data['xobjects'])) { + $out .= ' /XObject <<'; + foreach ($data['images'] as $imgid) { + $out .= ' /I'.$imgid.' '.$this->xobjects['I'.$imgid]['n'].' 0 R'; + } + foreach ($data['xobjects'] as $sub_id => $sub_objid) { + $out .= ' /'.$sub_id.' '.$sub_objid['n'].' 0 R'; + } + $out .= ' >>'; + } + $out .= ' >>'; //end resources + if (isset($data['group']) AND ($data['group'] !== false)) { + // set transparency group + $out .= ' /Group << /Type /Group /S /Transparency'; + if (is_array($data['group'])) { + if (isset($data['group']['CS']) AND !empty($data['group']['CS'])) { + $out .= ' /CS /'.$data['group']['CS']; + } + if (isset($data['group']['I'])) { + $out .= ' /I /'.($data['group']['I']===true?'true':'false'); + } + if (isset($data['group']['K'])) { + $out .= ' /K /'.($data['group']['K']===true?'true':'false'); + } + } + $out .= ' >>'; + } + $stream = $this->_getrawstream($stream, $data['n']); + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + } + + /** + * Output Spot Colors Resources. + * @protected + * @since 4.0.024 (2008-09-12) + */ + protected function _putspotcolors() { + foreach ($this->spot_colors as $name => $color) { + $this->_newobj(); + $this->spot_colors[$name]['n'] = $this->n; + $out = '[/Separation /'.str_replace(' ', '#20', $name); + $out .= ' /DeviceCMYK <<'; + $out .= ' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]'; + $out .= ' '.sprintf('/C1 [%F %F %F %F] ', ($color['C'] / 100), ($color['M'] / 100), ($color['Y'] / 100), ($color['K'] / 100)); + $out .= ' /FunctionType 2 /Domain [0 1] /N 1>>]'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Return XObjects Dictionary. + * @return string XObjects dictionary + * @protected + * @since 5.8.014 (2010-08-23) + */ + protected function _getxobjectdict() { + $out = ''; + foreach ($this->xobjects as $id => $objid) { + $out .= ' /'.$id.' '.$objid['n'].' 0 R'; + } + return $out; + } + + /** + * Output Resources Dictionary. + * @protected + */ + protected function _putresourcedict() { + $out = $this->_getobj(2)."\n"; + $out .= '<< /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; + $out .= ' /Font <<'; + foreach ($this->fontkeys as $fontkey) { + $font = $this->getFontBuffer($fontkey); + $out .= ' /F'.$font['i'].' '.$font['n'].' 0 R'; + } + $out .= ' >>'; + $out .= ' /XObject <<'; + $out .= $this->_getxobjectdict(); + $out .= ' >>'; + // layers + if (!empty($this->pdflayers)) { + $out .= ' /Properties <<'; + foreach ($this->pdflayers as $layer) { + $out .= ' /'.$layer['layer'].' '.$layer['objid'].' 0 R'; + } + $out .= ' >>'; + } + if (!$this->pdfa_mode) { + // transparency + if (isset($this->extgstates) AND !empty($this->extgstates)) { + $out .= ' /ExtGState <<'; + foreach ($this->extgstates as $k => $extgstate) { + if (isset($extgstate['name'])) { + $out .= ' /'.$extgstate['name']; + } else { + $out .= ' /GS'.$k; + } + $out .= ' '.$extgstate['n'].' 0 R'; + } + $out .= ' >>'; + } + if (isset($this->gradients) AND !empty($this->gradients)) { + $gp = ''; + $gs = ''; + foreach ($this->gradients as $id => $grad) { + // gradient patterns + $gp .= ' /p'.$id.' '.$grad['pattern'].' 0 R'; + // gradient shadings + $gs .= ' /Sh'.$id.' '.$grad['id'].' 0 R'; + } + $out .= ' /Pattern <<'.$gp.' >>'; + $out .= ' /Shading <<'.$gs.' >>'; + } + } + // spot colors + if (isset($this->spot_colors) AND !empty($this->spot_colors)) { + $out .= ' /ColorSpace <<'; + foreach ($this->spot_colors as $color) { + $out .= ' /CS'.$color['i'].' '.$color['n'].' 0 R'; + } + $out .= ' >>'; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Output Resources. + * @protected + */ + protected function _putresources() { + $this->_putextgstates(); + $this->_putocg(); + $this->_putfonts(); + $this->_putimages(); + $this->_putspotcolors(); + $this->_putshaders(); + $this->_putxobjects(); + $this->_putresourcedict(); + $this->_putdests(); + $this->_putEmbeddedFiles(); + $this->_putannotsobjs(); + $this->_putjavascript(); + $this->_putbookmarks(); + $this->_putencryption(); + } + + /** + * Adds some Metadata information (Document Information Dictionary) + * (see Chapter 14.3.3 Document Information Dictionary of PDF32000_2008.pdf Reference) + * @return int object id + * @protected + */ + protected function _putinfo() { + $oid = $this->_newobj(); + $out = '<<'; + // store current isunicode value + $prev_isunicode = $this->isunicode; + if ($this->docinfounicode) { + $this->isunicode = true; + } + if (!TCPDF_STATIC::empty_string($this->title)) { + // The document's title. + $out .= ' /Title '.$this->_textstring($this->title, $oid); + } + if (!TCPDF_STATIC::empty_string($this->author)) { + // The name of the person who created the document. + $out .= ' /Author '.$this->_textstring($this->author, $oid); + } + if (!TCPDF_STATIC::empty_string($this->subject)) { + // The subject of the document. + $out .= ' /Subject '.$this->_textstring($this->subject, $oid); + } + if (!TCPDF_STATIC::empty_string($this->keywords)) { + // Keywords associated with the document. + $out .= ' /Keywords '.$this->_textstring($this->keywords, $oid); + } + if (!TCPDF_STATIC::empty_string($this->creator)) { + // If the document was converted to PDF from another format, the name of the conforming product that created the original document from which it was converted. + $out .= ' /Creator '.$this->_textstring($this->creator, $oid); + } + // restore previous isunicode value + $this->isunicode = $prev_isunicode; + // default producer + $out .= ' /Producer '.$this->_textstring(TCPDF_STATIC::getTCPDFProducer(), $oid); + // The date and time the document was created, in human-readable form + $out .= ' /CreationDate '.$this->_datestring(0, $this->doc_creation_timestamp); + // The date and time the document was most recently modified, in human-readable form + $out .= ' /ModDate '.$this->_datestring(0, $this->doc_modification_timestamp); + // A name object indicating whether the document has been modified to include trapping information + $out .= ' /Trapped /False'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + return $oid; + } + + /** + * Set additional XMP data to be added on the default XMP data just before the end of "x:xmpmeta" tag. + * IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method! + * @param $xmp (string) Custom XMP data. + * @since 5.9.128 (2011-10-06) + * @public + */ + public function setExtraXMP($xmp) { + $this->custom_xmp = $xmp; + } + + /** + * Put XMP data object and return ID. + * @return (int) The object ID. + * @since 5.9.121 (2011-09-28) + * @protected + */ + protected function _putXMP() { + $oid = $this->_newobj(); + // store current isunicode value + $prev_isunicode = $this->isunicode; + $this->isunicode = true; + $prev_encrypted = $this->encrypted; + $this->encrypted = false; + // set XMP data + $xmp = '<?xpacket begin="'.TCPDF_FONTS::unichr(0xfeff, $this->isunicode).'" id="W5M0MpCehiHzreSzNTczkc9d"?>'."\n"; + $xmp .= '<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04">'."\n"; + $xmp .= "\t".'<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'."\n"; + $xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">'."\n"; + $xmp .= "\t\t\t".'<dc:format>application/pdf</dc:format>'."\n"; + $xmp .= "\t\t\t".'<dc:title>'."\n"; + $xmp .= "\t\t\t\t".'<rdf:Alt>'."\n"; + $xmp .= "\t\t\t\t\t".'<rdf:li xml:lang="x-default">'.TCPDF_STATIC::_escapeXML($this->title).'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t".'</rdf:Alt>'."\n"; + $xmp .= "\t\t\t".'</dc:title>'."\n"; + $xmp .= "\t\t\t".'<dc:creator>'."\n"; + $xmp .= "\t\t\t\t".'<rdf:Seq>'."\n"; + $xmp .= "\t\t\t\t\t".'<rdf:li>'.TCPDF_STATIC::_escapeXML($this->author).'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t".'</rdf:Seq>'."\n"; + $xmp .= "\t\t\t".'</dc:creator>'."\n"; + $xmp .= "\t\t\t".'<dc:description>'."\n"; + $xmp .= "\t\t\t\t".'<rdf:Alt>'."\n"; + $xmp .= "\t\t\t\t\t".'<rdf:li xml:lang="x-default">'.TCPDF_STATIC::_escapeXML($this->subject).'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t".'</rdf:Alt>'."\n"; + $xmp .= "\t\t\t".'</dc:description>'."\n"; + $xmp .= "\t\t\t".'<dc:subject>'."\n"; + $xmp .= "\t\t\t\t".'<rdf:Bag>'."\n"; + $xmp .= "\t\t\t\t\t".'<rdf:li>'.TCPDF_STATIC::_escapeXML($this->keywords).'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t".'</rdf:Bag>'."\n"; + $xmp .= "\t\t\t".'</dc:subject>'."\n"; + $xmp .= "\t\t".'</rdf:Description>'."\n"; + // convert doc creation date format + $dcdate = TCPDF_STATIC::getFormattedDate($this->doc_creation_timestamp); + $doccreationdate = substr($dcdate, 0, 4).'-'.substr($dcdate, 4, 2).'-'.substr($dcdate, 6, 2); + $doccreationdate .= 'T'.substr($dcdate, 8, 2).':'.substr($dcdate, 10, 2).':'.substr($dcdate, 12, 2); + $doccreationdate .= substr($dcdate, 14, 3).':'.substr($dcdate, 18, 2); + $doccreationdate = TCPDF_STATIC::_escapeXML($doccreationdate); + // convert doc modification date format + $dmdate = TCPDF_STATIC::getFormattedDate($this->doc_modification_timestamp); + $docmoddate = substr($dmdate, 0, 4).'-'.substr($dmdate, 4, 2).'-'.substr($dmdate, 6, 2); + $docmoddate .= 'T'.substr($dmdate, 8, 2).':'.substr($dmdate, 10, 2).':'.substr($dmdate, 12, 2); + $docmoddate .= substr($dmdate, 14, 3).':'.substr($dmdate, 18, 2); + $docmoddate = TCPDF_STATIC::_escapeXML($docmoddate); + $xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">'."\n"; + $xmp .= "\t\t\t".'<xmp:CreateDate>'.$doccreationdate.'</xmp:CreateDate>'."\n"; + $xmp .= "\t\t\t".'<xmp:CreatorTool>'.$this->creator.'</xmp:CreatorTool>'."\n"; + $xmp .= "\t\t\t".'<xmp:ModifyDate>'.$docmoddate.'</xmp:ModifyDate>'."\n"; + $xmp .= "\t\t\t".'<xmp:MetadataDate>'.$doccreationdate.'</xmp:MetadataDate>'."\n"; + $xmp .= "\t\t".'</rdf:Description>'."\n"; + $xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">'."\n"; + $xmp .= "\t\t\t".'<pdf:Keywords>'.TCPDF_STATIC::_escapeXML($this->keywords).'</pdf:Keywords>'."\n"; + $xmp .= "\t\t\t".'<pdf:Producer>'.TCPDF_STATIC::_escapeXML(TCPDF_STATIC::getTCPDFProducer()).'</pdf:Producer>'."\n"; + $xmp .= "\t\t".'</rdf:Description>'."\n"; + $xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">'."\n"; + $uuid = 'uuid:'.substr($this->file_id, 0, 8).'-'.substr($this->file_id, 8, 4).'-'.substr($this->file_id, 12, 4).'-'.substr($this->file_id, 16, 4).'-'.substr($this->file_id, 20, 12); + $xmp .= "\t\t\t".'<xmpMM:DocumentID>'.$uuid.'</xmpMM:DocumentID>'."\n"; + $xmp .= "\t\t\t".'<xmpMM:InstanceID>'.$uuid.'</xmpMM:InstanceID>'."\n"; + $xmp .= "\t\t".'</rdf:Description>'."\n"; + if ($this->pdfa_mode) { + $xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">'."\n"; + $xmp .= "\t\t\t".'<pdfaid:part>1</pdfaid:part>'."\n"; + $xmp .= "\t\t\t".'<pdfaid:conformance>B</pdfaid:conformance>'."\n"; + $xmp .= "\t\t".'</rdf:Description>'."\n"; + } + // XMP extension schemas + $xmp .= "\t\t".'<rdf:Description rdf:about="" xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#">'."\n"; + $xmp .= "\t\t\t".'<pdfaExtension:schemas>'."\n"; + $xmp .= "\t\t\t\t".'<rdf:Bag>'."\n"; + $xmp .= "\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:namespaceURI>http://ns.adobe.com/pdf/1.3/</pdfaSchema:namespaceURI>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:prefix>pdf</pdfaSchema:prefix>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:schema>Adobe PDF Schema</pdfaSchema:schema>'."\n"; + $xmp .= "\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:namespaceURI>http://ns.adobe.com/xap/1.0/mm/</pdfaSchema:namespaceURI>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:prefix>xmpMM</pdfaSchema:prefix>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:schema>XMP Media Management Schema</pdfaSchema:schema>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:property>'."\n"; + $xmp .= "\t\t\t\t\t\t\t".'<rdf:Seq>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:category>internal</pdfaProperty:category>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:description>UUID based identifier for specific incarnation of a document</pdfaProperty:description>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:name>InstanceID</pdfaProperty:name>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:valueType>URI</pdfaProperty:valueType>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t\t\t\t".'</rdf:Seq>'."\n"; + $xmp .= "\t\t\t\t\t\t".'</pdfaSchema:property>'."\n"; + $xmp .= "\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:namespaceURI>http://www.aiim.org/pdfa/ns/id/</pdfaSchema:namespaceURI>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:prefix>pdfaid</pdfaSchema:prefix>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:schema>PDF/A ID Schema</pdfaSchema:schema>'."\n"; + $xmp .= "\t\t\t\t\t\t".'<pdfaSchema:property>'."\n"; + $xmp .= "\t\t\t\t\t\t\t".'<rdf:Seq>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:category>internal</pdfaProperty:category>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:description>Part of PDF/A standard</pdfaProperty:description>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:name>part</pdfaProperty:name>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:valueType>Integer</pdfaProperty:valueType>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:category>internal</pdfaProperty:category>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:description>Amendment of PDF/A standard</pdfaProperty:description>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:name>amd</pdfaProperty:name>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:valueType>Text</pdfaProperty:valueType>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'<rdf:li rdf:parseType="Resource">'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:category>internal</pdfaProperty:category>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:description>Conformance level of PDF/A standard</pdfaProperty:description>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:name>conformance</pdfaProperty:name>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'<pdfaProperty:valueType>Text</pdfaProperty:valueType>'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t\t\t\t".'</rdf:Seq>'."\n"; + $xmp .= "\t\t\t\t\t\t".'</pdfaSchema:property>'."\n"; + $xmp .= "\t\t\t\t\t".'</rdf:li>'."\n"; + $xmp .= "\t\t\t\t".'</rdf:Bag>'."\n"; + $xmp .= "\t\t\t".'</pdfaExtension:schemas>'."\n"; + $xmp .= "\t\t".'</rdf:Description>'."\n"; + $xmp .= "\t".'</rdf:RDF>'."\n"; + $xmp .= $this->custom_xmp; + $xmp .= '</x:xmpmeta>'."\n"; + $xmp .= '<?xpacket end="w"?>'; + $out = '<< /Type /Metadata /Subtype /XML /Length '.strlen($xmp).' >> stream'."\n".$xmp."\n".'endstream'."\n".'endobj'; + // restore previous isunicode value + $this->isunicode = $prev_isunicode; + $this->encrypted = $prev_encrypted; + $this->_out($out); + return $oid; + } + + /** + * Output Catalog. + * @return int object id + * @protected + */ + protected function _putcatalog() { + // put XMP + $xmpobj = $this->_putXMP(); + // if required, add standard sRGB_IEC61966-2.1 blackscaled ICC colour profile + if ($this->pdfa_mode OR $this->force_srgb) { + $iccobj = $this->_newobj(); + $icc = file_get_contents(dirname(__FILE__).'/include/sRGB.icc'); + $filter = ''; + if ($this->compress) { + $filter = ' /Filter /FlateDecode'; + $icc = gzcompress($icc); + } + $icc = $this->_getrawstream($icc); + $this->_out('<</N 3 '.$filter.'/Length '.strlen($icc).'>> stream'."\n".$icc."\n".'endstream'."\n".'endobj'); + } + // start catalog + $oid = $this->_newobj(); + $out = '<< /Type /Catalog'; + $out .= ' /Version /'.$this->PDFVersion; + //$out .= ' /Extensions <<>>'; + $out .= ' /Pages 1 0 R'; + //$out .= ' /PageLabels ' //...; + $out .= ' /Names <<'; + if ((!$this->pdfa_mode) AND !empty($this->n_js)) { + $out .= ' /JavaScript '.$this->n_js; + } + if (!empty($this->efnames)) { + $out .= ' /EmbeddedFiles <</Names ['; + foreach ($this->efnames AS $fn => $fref) { + $out .= ' '.$this->_datastring($fn).' '.$fref; + } + $out .= ' ]>>'; + } + $out .= ' >>'; + if (!empty($this->dests)) { + $out .= ' /Dests '.($this->n_dests).' 0 R'; + } + $out .= $this->_putviewerpreferences(); + if (isset($this->LayoutMode) AND (!TCPDF_STATIC::empty_string($this->LayoutMode))) { + $out .= ' /PageLayout /'.$this->LayoutMode; + } + if (isset($this->PageMode) AND (!TCPDF_STATIC::empty_string($this->PageMode))) { + $out .= ' /PageMode /'.$this->PageMode; + } + if (count($this->outlines) > 0) { + $out .= ' /Outlines '.$this->OutlineRoot.' 0 R'; + $out .= ' /PageMode /UseOutlines'; + } + //$out .= ' /Threads []'; + if ($this->ZoomMode == 'fullpage') { + $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /Fit]'; + } elseif ($this->ZoomMode == 'fullwidth') { + $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /FitH null]'; + } elseif ($this->ZoomMode == 'real') { + $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null 1]'; + } elseif (!is_string($this->ZoomMode)) { + $out .= sprintf(' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null %F]', ($this->ZoomMode / 100)); + } + //$out .= ' /AA <<>>'; + //$out .= ' /URI <<>>'; + $out .= ' /Metadata '.$xmpobj.' 0 R'; + //$out .= ' /StructTreeRoot <<>>'; + //$out .= ' /MarkInfo <<>>'; + if (isset($this->l['a_meta_language'])) { + $out .= ' /Lang '.$this->_textstring($this->l['a_meta_language'], $oid); + } + //$out .= ' /SpiderInfo <<>>'; + // set OutputIntent to sRGB IEC61966-2.1 if required + if ($this->pdfa_mode OR $this->force_srgb) { + $out .= ' /OutputIntents [<<'; + $out .= ' /Type /OutputIntent'; + $out .= ' /S /GTS_PDFA1'; + $out .= ' /OutputCondition '.$this->_textstring('sRGB IEC61966-2.1', $oid); + $out .= ' /OutputConditionIdentifier '.$this->_textstring('sRGB IEC61966-2.1', $oid); + $out .= ' /RegistryName '.$this->_textstring('http://www.color.org', $oid); + $out .= ' /Info '.$this->_textstring('sRGB IEC61966-2.1', $oid); + $out .= ' /DestOutputProfile '.$iccobj.' 0 R'; + $out .= ' >>]'; + } + //$out .= ' /PieceInfo <<>>'; + if (!empty($this->pdflayers)) { + $lyrobjs = ''; + $lyrobjs_off = ''; + $lyrobjs_lock = ''; + foreach ($this->pdflayers as $layer) { + $layer_obj_ref = ' '.$layer['objid'].' 0 R'; + $lyrobjs .= $layer_obj_ref; + if ($layer['view'] === false) { + $lyrobjs_off .= $layer_obj_ref; + } + if ($layer['lock']) { + $lyrobjs_lock .= $layer_obj_ref; + } + } + $out .= ' /OCProperties << /OCGs ['.$lyrobjs.']'; + $out .= ' /D <<'; + $out .= ' /Name '.$this->_textstring('Layers', $oid); + $out .= ' /Creator '.$this->_textstring('TCPDF', $oid); + $out .= ' /BaseState /ON'; + $out .= ' /OFF ['.$lyrobjs_off.']'; + $out .= ' /Locked ['.$lyrobjs_lock.']'; + $out .= ' /Intent /View'; + $out .= ' /AS ['; + $out .= ' << /Event /Print /OCGs ['.$lyrobjs.'] /Category [/Print] >>'; + $out .= ' << /Event /View /OCGs ['.$lyrobjs.'] /Category [/View] >>'; + $out .= ' ]'; + $out .= ' /Order ['.$lyrobjs.']'; + $out .= ' /ListMode /AllPages'; + //$out .= ' /RBGroups ['..']'; + //$out .= ' /Locked ['..']'; + $out .= ' >>'; + $out .= ' >>'; + } + // AcroForm + if (!empty($this->form_obj_id) + OR ($this->sign AND isset($this->signature_data['cert_type'])) + OR !empty($this->empty_signature_appearance)) { + $out .= ' /AcroForm <<'; + $objrefs = ''; + if ($this->sign AND isset($this->signature_data['cert_type'])) { + // set reference for signature object + $objrefs .= $this->sig_obj_id.' 0 R'; + } + if (!empty($this->empty_signature_appearance)) { + foreach ($this->empty_signature_appearance as $esa) { + // set reference for empty signature objects + $objrefs .= ' '.$esa['objid'].' 0 R'; + } + } + if (!empty($this->form_obj_id)) { + foreach($this->form_obj_id as $objid) { + $objrefs .= ' '.$objid.' 0 R'; + } + } + $out .= ' /Fields ['.$objrefs.']'; + // It's better to turn off this value and set the appearance stream for each annotation (/AP) to avoid conflicts with signature fields. + if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { + $out .= ' /NeedAppearances false'; + } + if ($this->sign AND isset($this->signature_data['cert_type'])) { + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /SigFlags 3'; + } else { + $out .= ' /SigFlags 1'; + } + } + //$out .= ' /CO '; + if (isset($this->annotation_fonts) AND !empty($this->annotation_fonts)) { + $out .= ' /DR <<'; + $out .= ' /Font <<'; + foreach ($this->annotation_fonts as $fontkey => $fontid) { + $out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R'; + } + $out .= ' >> >>'; + } + $font = $this->getFontBuffer('helvetica'); + $out .= ' /DA (/F'.$font['i'].' 0 Tf 0 g)'; + $out .= ' /Q '.(($this->rtl)?'2':'0'); + //$out .= ' /XFA '; + $out .= ' >>'; + // signatures + if ($this->sign AND isset($this->signature_data['cert_type']) + AND (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A'))) { + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /Perms << /DocMDP '.($this->sig_obj_id + 1).' 0 R >>'; + } else { + $out .= ' /Perms << /UR3 '.($this->sig_obj_id + 1).' 0 R >>'; + } + } + } + //$out .= ' /Legal <<>>'; + //$out .= ' /Requirements []'; + //$out .= ' /Collection <<>>'; + //$out .= ' /NeedsRendering true'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + return $oid; + } + + /** + * Output viewer preferences. + * @return string for viewer preferences + * @author Nicola asuni + * @since 3.1.000 (2008-06-09) + * @protected + */ + protected function _putviewerpreferences() { + $vp = $this->viewer_preferences; + $out = ' /ViewerPreferences <<'; + if ($this->rtl) { + $out .= ' /Direction /R2L'; + } else { + $out .= ' /Direction /L2R'; + } + if (isset($vp['HideToolbar']) AND ($vp['HideToolbar'])) { + $out .= ' /HideToolbar true'; + } + if (isset($vp['HideMenubar']) AND ($vp['HideMenubar'])) { + $out .= ' /HideMenubar true'; + } + if (isset($vp['HideWindowUI']) AND ($vp['HideWindowUI'])) { + $out .= ' /HideWindowUI true'; + } + if (isset($vp['FitWindow']) AND ($vp['FitWindow'])) { + $out .= ' /FitWindow true'; + } + if (isset($vp['CenterWindow']) AND ($vp['CenterWindow'])) { + $out .= ' /CenterWindow true'; + } + if (isset($vp['DisplayDocTitle']) AND ($vp['DisplayDocTitle'])) { + $out .= ' /DisplayDocTitle true'; + } + if (isset($vp['NonFullScreenPageMode'])) { + $out .= ' /NonFullScreenPageMode /'.$vp['NonFullScreenPageMode']; + } + if (isset($vp['ViewArea'])) { + $out .= ' /ViewArea /'.$vp['ViewArea']; + } + if (isset($vp['ViewClip'])) { + $out .= ' /ViewClip /'.$vp['ViewClip']; + } + if (isset($vp['PrintArea'])) { + $out .= ' /PrintArea /'.$vp['PrintArea']; + } + if (isset($vp['PrintClip'])) { + $out .= ' /PrintClip /'.$vp['PrintClip']; + } + if (isset($vp['PrintScaling'])) { + $out .= ' /PrintScaling /'.$vp['PrintScaling']; + } + if (isset($vp['Duplex']) AND (!TCPDF_STATIC::empty_string($vp['Duplex']))) { + $out .= ' /Duplex /'.$vp['Duplex']; + } + if (isset($vp['PickTrayByPDFSize'])) { + if ($vp['PickTrayByPDFSize']) { + $out .= ' /PickTrayByPDFSize true'; + } else { + $out .= ' /PickTrayByPDFSize false'; + } + } + if (isset($vp['PrintPageRange'])) { + $PrintPageRangeNum = ''; + foreach ($vp['PrintPageRange'] as $k => $v) { + $PrintPageRangeNum .= ' '.($v - 1).''; + } + $out .= ' /PrintPageRange ['.substr($PrintPageRangeNum,1).']'; + } + if (isset($vp['NumCopies'])) { + $out .= ' /NumCopies '.intval($vp['NumCopies']); + } + $out .= ' >>'; + return $out; + } + + /** + * Output PDF File Header (7.5.2). + * @protected + */ + protected function _putheader() { + $this->_out('%PDF-'.$this->PDFVersion); + $this->_out('%'.chr(0xe2).chr(0xe3).chr(0xcf).chr(0xd3)); + } + + /** + * Output end of document (EOF). + * @protected + */ + protected function _enddoc() { + if (isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])) { + // save subset chars of the previous font + $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); + } + $this->state = 1; + $this->_putheader(); + $this->_putpages(); + $this->_putresources(); + // empty signature fields + if (!empty($this->empty_signature_appearance)) { + foreach ($this->empty_signature_appearance as $key => $esa) { + // widget annotation for empty signature + $out = $this->_getobj($esa['objid'])."\n"; + $out .= '<< /Type /Annot'; + $out .= ' /Subtype /Widget'; + $out .= ' /Rect ['.$esa['rect'].']'; + $out .= ' /P '.$this->page_obj_id[($esa['page'])].' 0 R'; // link to signature appearance page + $out .= ' /F 4'; + $out .= ' /FT /Sig'; + $signame = $esa['name'].sprintf(' [%03d]', ($key + 1)); + $out .= ' /T '.$this->_textstring($signame, $esa['objid']); + $out .= ' /Ff 0'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + // Signature + if ($this->sign AND isset($this->signature_data['cert_type'])) { + // widget annotation for signature + $out = $this->_getobj($this->sig_obj_id)."\n"; + $out .= '<< /Type /Annot'; + $out .= ' /Subtype /Widget'; + $out .= ' /Rect ['.$this->signature_appearance['rect'].']'; + $out .= ' /P '.$this->page_obj_id[($this->signature_appearance['page'])].' 0 R'; // link to signature appearance page + $out .= ' /F 4'; + $out .= ' /FT /Sig'; + $out .= ' /T '.$this->_textstring($this->signature_appearance['name'], $this->sig_obj_id); + $out .= ' /Ff 0'; + $out .= ' /V '.($this->sig_obj_id + 1).' 0 R'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // signature + $this->_putsignature(); + } + // Info + $objid_info = $this->_putinfo(); + // Catalog + $objid_catalog = $this->_putcatalog(); + // Cross-ref + $o = $this->bufferlen; + // XREF section + $this->_out('xref'); + $this->_out('0 '.($this->n + 1)); + $this->_out('0000000000 65535 f '); + $freegen = ($this->n + 2); + for ($i=1; $i <= $this->n; ++$i) { + if (!isset($this->offsets[$i]) AND ($i > 1)) { + $this->_out(sprintf('0000000000 %05d f ', $freegen)); + ++$freegen; + } else { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + // TRAILER + $out = 'trailer'."\n"; + $out .= '<<'; + $out .= ' /Size '.($this->n + 1); + $out .= ' /Root '.$objid_catalog.' 0 R'; + $out .= ' /Info '.$objid_info.' 0 R'; + if ($this->encrypted) { + $out .= ' /Encrypt '.$this->encryptdata['objid'].' 0 R'; + } + $out .= ' /ID [ <'.$this->file_id.'> <'.$this->file_id.'> ]'; + $out .= ' >>'; + $this->_out($out); + $this->_out('startxref'); + $this->_out($o); + $this->_out('%%EOF'); + $this->state = 3; // end-of-doc + } + + /** + * Initialize a new page. + * @param $orientation (string) page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul> + * @param $format (mixed) The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @protected + * @see getPageSizeFromFormat(), setPageFormat() + */ + protected function _beginpage($orientation='', $format='') { + ++$this->page; + $this->pageobjects[$this->page] = array(); + $this->setPageBuffer($this->page, ''); + // initialize array for graphics tranformation positions inside a page buffer + $this->transfmrk[$this->page] = array(); + $this->state = 2; + if (TCPDF_STATIC::empty_string($orientation)) { + if (isset($this->CurOrientation)) { + $orientation = $this->CurOrientation; + } elseif ($this->fwPt > $this->fhPt) { + // landscape + $orientation = 'L'; + } else { + // portrait + $orientation = 'P'; + } + } + if (TCPDF_STATIC::empty_string($format)) { + $this->pagedim[$this->page] = $this->pagedim[($this->page - 1)]; + $this->setPageOrientation($orientation); + } else { + $this->setPageFormat($format, $orientation); + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + $this->y = $this->tMargin; + if (isset($this->newpagegroup[$this->page])) { + // start a new group + $this->currpagegroup = $this->newpagegroup[$this->page]; + $this->pagegroups[$this->currpagegroup] = 1; + } elseif (isset($this->currpagegroup) AND ($this->currpagegroup > 0)) { + ++$this->pagegroups[$this->currpagegroup]; + } + } + + /** + * Mark end of page. + * @protected + */ + protected function _endpage() { + $this->setVisibility('all'); + $this->state = 1; + } + + /** + * Begin a new object and return the object number. + * @return int object number + * @protected + */ + protected function _newobj() { + $this->_out($this->_getobj()); + return $this->n; + } + + /** + * Return the starting object string for the selected object ID. + * @param $objid (int) Object ID (leave empty to get a new ID). + * @return string the starting object string + * @protected + * @since 5.8.009 (2010-08-20) + */ + protected function _getobj($objid='') { + if ($objid === '') { + ++$this->n; + $objid = $this->n; + } + $this->offsets[$objid] = $this->bufferlen; + $this->pageobjects[$this->page][] = $objid; + return $objid.' 0 obj'; + } + + /** + * Underline text. + * @param $x (int) X coordinate + * @param $y (int) Y coordinate + * @param $txt (string) text to underline + * @protected + */ + protected function _dounderline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dounderlinew($x, $y, $w); + } + + /** + * Underline for rectangular text area. + * @param $x (int) X coordinate + * @param $y (int) Y coordinate + * @param $w (int) width to underline + * @protected + * @since 4.8.008 (2009-09-29) + */ + protected function _dounderlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%F %F %F %F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew), $w * $this->k, $linew); + } + + /** + * Line through text. + * @param $x (int) X coordinate + * @param $y (int) Y coordinate + * @param $txt (string) text to linethrough + * @protected + */ + protected function _dolinethrough($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dolinethroughw($x, $y, $w); + } + + /** + * Line through for rectangular text area. + * @param $x (int) X coordinate + * @param $y (int) Y coordinate + * @param $w (int) line length (width) + * @protected + * @since 4.9.008 (2009-09-29) + */ + protected function _dolinethroughw($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%F %F %F %F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew + ($this->FontSizePt / 3)), $w * $this->k, $linew); + } + + /** + * Overline text. + * @param $x (int) X coordinate + * @param $y (int) Y coordinate + * @param $txt (string) text to overline + * @protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dooverlinew($x, $y, $w); + } + + /** + * Overline for rectangular text area. + * @param $x (int) X coordinate + * @param $y (int) Y coordinate + * @param $w (int) width to overline + * @protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%F %F %F %F re f', $x * $this->k, (($this->h - $y + $this->FontAscent) * $this->k) - $linew, $w * $this->k, $linew); + + } + + /** + * Format a data string for meta information + * @param $s (string) data string to escape. + * @param $n (int) object ID + * @return string escaped string. + * @protected + */ + protected function _datastring($s, $n=0) { + if ($n == 0) { + $n = $this->n; + } + $s = $this->_encrypt_data($n, $s); + return '('. TCPDF_STATIC::_escape($s).')'; + } + + /** + * Set the document creation timestamp + * @param $time (mixed) Document creation timestamp in seconds or date-time string. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function setDocCreationTimestamp($time) { + if (is_string($time)) { + $time = TCPDF_STATIC::getTimestamp($time); + } + $this->doc_creation_timestamp = intval($time); + } + + /** + * Set the document modification timestamp + * @param $time (mixed) Document modification timestamp in seconds or date-time string. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function setDocModificationTimestamp($time) { + if (is_string($time)) { + $time = TCPDF_STATIC::getTimestamp($time); + } + $this->doc_modification_timestamp = intval($time); + } + + /** + * Returns document creation timestamp in seconds. + * @return (int) Creation timestamp in seconds. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getDocCreationTimestamp() { + return $this->doc_creation_timestamp; + } + + /** + * Returns document modification timestamp in seconds. + * @return (int) Modfication timestamp in seconds. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getDocModificationTimestamp() { + return $this->doc_modification_timestamp; + } + + /** + * Returns a formatted date for meta information + * @param $n (int) Object ID. + * @param $timestamp (int) Timestamp to convert. + * @return string escaped date string. + * @protected + * @since 4.6.028 (2009-08-25) + */ + protected function _datestring($n=0, $timestamp=0) { + if ((empty($timestamp)) OR ($timestamp < 0)) { + $timestamp = $this->doc_creation_timestamp; + } + return $this->_datastring('D:'.TCPDF_STATIC::getFormattedDate($timestamp), $n); + } + + /** + * Format a text string for meta information + * @param $s (string) string to escape. + * @param $n (int) object ID + * @return string escaped string. + * @protected + */ + protected function _textstring($s, $n=0) { + if ($this->isunicode) { + //Convert string to UTF-16BE + $s = TCPDF_FONTS::UTF8ToUTF16BE($s, true, $this->isunicode, $this->CurrentFont); + } + return $this->_datastring($s, $n); + } + + /** + * get raw output stream. + * @param $s (string) string to output. + * @param $n (int) object reference for encryption mode + * @protected + * @author Nicola Asuni + * @since 5.5.000 (2010-06-22) + */ + protected function _getrawstream($s, $n=0) { + if ($n <= 0) { + // default to current object + $n = $this->n; + } + return $this->_encrypt_data($n, $s); + } + + /** + * Output a string to the document. + * @param $s (string) string to output. + * @protected + */ + protected function _out($s) { + if ($this->state == 2) { + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['outdata'] .= $s."\n"; + } elseif ((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) { + // puts data before page footer + $pagebuff = $this->getPageBuffer($this->page); + $page = substr($pagebuff, 0, -$this->footerlen[$this->page]); + $footer = substr($pagebuff, -$this->footerlen[$this->page]); + $this->setPageBuffer($this->page, $page.$s."\n".$footer); + // update footer position + $this->footerpos[$this->page] += strlen($s."\n"); + } else { + // set page data + $this->setPageBuffer($this->page, $s."\n", true); + } + } elseif ($this->state > 0) { + // set general data + $this->setBuffer($s."\n"); + } + } + + /** + * Set header font. + * @param $font (array) Array describing the basic font parameters: (family, style, size). + * @public + * @since 1.1 + */ + public function setHeaderFont($font) { + $this->header_font = $font; + } + + /** + * Get header font. + * @return array() Array describing the basic font parameters: (family, style, size). + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderFont() { + return $this->header_font; + } + + /** + * Set footer font. + * @param $font (array) Array describing the basic font parameters: (family, style, size). + * @public + * @since 1.1 + */ + public function setFooterFont($font) { + $this->footer_font = $font; + } + + /** + * Get Footer font. + * @return array() Array describing the basic font parameters: (family, style, size). + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getFooterFont() { + return $this->footer_font; + } + + /** + * Set language array. + * @param $language (array) + * @public + * @since 1.1 + */ + public function setLanguageArray($language) { + $this->l = $language; + if (isset($this->l['a_meta_dir'])) { + $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false; + } else { + $this->rtl = false; + } + } + + /** + * Returns the PDF data. + * @public + */ + public function getPDFData() { + if ($this->state < 3) { + $this->Close(); + } + return $this->buffer; + } + + /** + * Output anchor link. + * @param $url (string) link URL or internal link (i.e.: &lt;a href="#23,4.5"&gt;link to page 23 at 4.5 Y position&lt;/a&gt;) + * @param $name (string) link name + * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false). + * @param $firstline (boolean) if true prints only the first line and return the remaining string. + * @param $color (array) array of RGB text color + * @param $style (string) font style (U, D, B, I) + * @param $firstblock (boolean) if true the string is the starting of a line. + * @return the number of cells used or the remaining text if $firstline = true; + * @public + */ + public function addHtmlLink($url, $name, $fill=false, $firstline=false, $color='', $style=-1, $firstblock=false) { + if (isset($url[1]) AND ($url[0] == '#') AND is_numeric($url[1])) { + // convert url to internal link + $lnkdata = explode(',', $url); + if (isset($lnkdata[0]) ) { + $page = substr($lnkdata[0], 1); + if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) { + $lnky = floatval($lnkdata[1]); + } else { + $lnky = 0; + } + $url = $this->AddLink(); + $this->SetLink($url, $lnky, $page); + } + } + // store current settings + $prevcolor = $this->fgcolor; + $prevstyle = $this->FontStyle; + if (empty($color)) { + $this->SetTextColorArray($this->htmlLinkColorArray); + } else { + $this->SetTextColorArray($color); + } + if ($style == -1) { + $this->SetFont('', $this->FontStyle.$this->htmlLinkFontStyle); + } else { + $this->SetFont('', $this->FontStyle.$style); + } + $ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline, $firstblock, 0); + // restore settings + $this->SetFont('', $prevstyle); + $this->SetTextColorArray($prevcolor); + return $ret; + } + + /** + * Converts pixels to User's Units. + * @param $px (int) pixels + * @return float value in user's unit + * @public + * @see setImageScale(), getImageScale() + */ + public function pixelsToUnits($px) { + return ($px / ($this->imgscale * $this->k)); + } + + /** + * Reverse function for htmlentities. + * Convert entities in UTF-8. + * @param $text_to_convert (string) Text to convert. + * @return string converted text string + * @public + */ + public function unhtmlentities($text_to_convert) { + return @html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding); + } + + // ENCRYPTION METHODS ---------------------------------- + + /** + * Compute encryption key depending on object number where the encrypted data is stored. + * This is used for all strings and streams without crypt filter specifier. + * @param $n (int) object number + * @return int object key + * @protected + * @author Nicola Asuni + * @since 2.0.000 (2008-01-02) + */ + protected function _objectkey($n) { + $objkey = $this->encryptdata['key'].pack('VXxx', $n); + if ($this->encryptdata['mode'] == 2) { // AES-128 + // AES padding + $objkey .= "\x73\x41\x6C\x54"; // sAlT + } + $objkey = substr(TCPDF_STATIC::_md5_16($objkey), 0, (($this->encryptdata['Length'] / 8) + 5)); + $objkey = substr($objkey, 0, 16); + return $objkey; + } + + /** + * Encrypt the input string. + * @param $n (int) object number + * @param $s (string) data string to encrypt + * @return encrypted string + * @protected + * @author Nicola Asuni + * @since 5.0.005 (2010-05-11) + */ + protected function _encrypt_data($n, $s) { + if (!$this->encrypted) { + return $s; + } + switch ($this->encryptdata['mode']) { + case 0: // RC4-40 + case 1: { // RC4-128 + $s = TCPDF_STATIC::_RC4($this->_objectkey($n), $s, $this->last_enc_key, $this->last_enc_key_c); + break; + } + case 2: { // AES-128 + $s = TCPDF_STATIC::_AES($this->_objectkey($n), $s); + break; + } + case 3: { // AES-256 + $s = TCPDF_STATIC::_AES($this->encryptdata['key'], $s); + break; + } + } + return $s; + } + + /** + * Put encryption on PDF document. + * @protected + * @author Nicola Asuni + * @since 2.0.000 (2008-01-02) + */ + protected function _putencryption() { + if (!$this->encrypted) { + return; + } + $this->encryptdata['objid'] = $this->_newobj(); + $out = '<<'; + if (!isset($this->encryptdata['Filter']) OR empty($this->encryptdata['Filter'])) { + $this->encryptdata['Filter'] = 'Standard'; + } + $out .= ' /Filter /'.$this->encryptdata['Filter']; + if (isset($this->encryptdata['SubFilter']) AND !empty($this->encryptdata['SubFilter'])) { + $out .= ' /SubFilter /'.$this->encryptdata['SubFilter']; + } + if (!isset($this->encryptdata['V']) OR empty($this->encryptdata['V'])) { + $this->encryptdata['V'] = 1; + } + // V is a code specifying the algorithm to be used in encrypting and decrypting the document + $out .= ' /V '.$this->encryptdata['V']; + if (isset($this->encryptdata['Length']) AND !empty($this->encryptdata['Length'])) { + // The length of the encryption key, in bits. The value shall be a multiple of 8, in the range 40 to 256 + $out .= ' /Length '.$this->encryptdata['Length']; + } else { + $out .= ' /Length 40'; + } + if ($this->encryptdata['V'] >= 4) { + if (!isset($this->encryptdata['StmF']) OR empty($this->encryptdata['StmF'])) { + $this->encryptdata['StmF'] = 'Identity'; + } + if (!isset($this->encryptdata['StrF']) OR empty($this->encryptdata['StrF'])) { + // The name of the crypt filter that shall be used when decrypting all strings in the document. + $this->encryptdata['StrF'] = 'Identity'; + } + // A dictionary whose keys shall be crypt filter names and whose values shall be the corresponding crypt filter dictionaries. + if (isset($this->encryptdata['CF']) AND !empty($this->encryptdata['CF'])) { + $out .= ' /CF <<'; + $out .= ' /'.$this->encryptdata['StmF'].' <<'; + $out .= ' /Type /CryptFilter'; + if (isset($this->encryptdata['CF']['CFM']) AND !empty($this->encryptdata['CF']['CFM'])) { + // The method used + $out .= ' /CFM /'.$this->encryptdata['CF']['CFM']; + if ($this->encryptdata['pubkey']) { + $out .= ' /Recipients ['; + foreach ($this->encryptdata['Recipients'] as $rec) { + $out .= ' <'.$rec.'>'; + } + $out .= ' ]'; + if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) { + $out .= ' /EncryptMetadata false'; + } else { + $out .= ' /EncryptMetadata true'; + } + } + } else { + $out .= ' /CFM /None'; + } + if (isset($this->encryptdata['CF']['AuthEvent']) AND !empty($this->encryptdata['CF']['AuthEvent'])) { + // The event to be used to trigger the authorization that is required to access encryption keys used by this filter. + $out .= ' /AuthEvent /'.$this->encryptdata['CF']['AuthEvent']; + } else { + $out .= ' /AuthEvent /DocOpen'; + } + if (isset($this->encryptdata['CF']['Length']) AND !empty($this->encryptdata['CF']['Length'])) { + // The bit length of the encryption key. + $out .= ' /Length '.$this->encryptdata['CF']['Length']; + } + $out .= ' >> >>'; + } + // The name of the crypt filter that shall be used by default when decrypting streams. + $out .= ' /StmF /'.$this->encryptdata['StmF']; + // The name of the crypt filter that shall be used when decrypting all strings in the document. + $out .= ' /StrF /'.$this->encryptdata['StrF']; + if (isset($this->encryptdata['EFF']) AND !empty($this->encryptdata['EFF'])) { + // The name of the crypt filter that shall be used when encrypting embedded file streams that do not have their own crypt filter specifier. + $out .= ' /EFF /'.$this->encryptdata['']; + } + } + // Additional encryption dictionary entries for the standard security handler + if ($this->encryptdata['pubkey']) { + if (($this->encryptdata['V'] < 4) AND isset($this->encryptdata['Recipients']) AND !empty($this->encryptdata['Recipients'])) { + $out .= ' /Recipients ['; + foreach ($this->encryptdata['Recipients'] as $rec) { + $out .= ' <'.$rec.'>'; + } + $out .= ' ]'; + } + } else { + $out .= ' /R'; + if ($this->encryptdata['V'] == 5) { // AES-256 + $out .= ' 5'; + $out .= ' /OE ('.TCPDF_STATIC::_escape($this->encryptdata['OE']).')'; + $out .= ' /UE ('.TCPDF_STATIC::_escape($this->encryptdata['UE']).')'; + $out .= ' /Perms ('.TCPDF_STATIC::_escape($this->encryptdata['perms']).')'; + } elseif ($this->encryptdata['V'] == 4) { // AES-128 + $out .= ' 4'; + } elseif ($this->encryptdata['V'] < 2) { // RC-40 + $out .= ' 2'; + } else { // RC-128 + $out .= ' 3'; + } + $out .= ' /O ('.TCPDF_STATIC::_escape($this->encryptdata['O']).')'; + $out .= ' /U ('.TCPDF_STATIC::_escape($this->encryptdata['U']).')'; + $out .= ' /P '.$this->encryptdata['P']; + if (isset($this->encryptdata['EncryptMetadata']) AND (!$this->encryptdata['EncryptMetadata'])) { + $out .= ' /EncryptMetadata false'; + } else { + $out .= ' /EncryptMetadata true'; + } + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Compute U value (used for encryption) + * @return string U value + * @protected + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + protected function _Uvalue() { + if ($this->encryptdata['mode'] == 0) { // RC4-40 + return TCPDF_STATIC::_RC4($this->encryptdata['key'], TCPDF_STATIC::$enc_padding, $this->last_enc_key, $this->last_enc_key_c); + } elseif ($this->encryptdata['mode'] < 3) { // RC4-128, AES-128 + $tmp = TCPDF_STATIC::_md5_16(TCPDF_STATIC::$enc_padding.$this->encryptdata['fileid']); + $enc = TCPDF_STATIC::_RC4($this->encryptdata['key'], $tmp, $this->last_enc_key, $this->last_enc_key_c); + $len = strlen($tmp); + for ($i = 1; $i <= 19; ++$i) { + $ek = ''; + for ($j = 0; $j < $len; ++$j) { + $ek .= chr(ord($this->encryptdata['key'][$j]) ^ $i); + } + $enc = TCPDF_STATIC::_RC4($ek, $enc, $this->last_enc_key, $this->last_enc_key_c); + } + $enc .= str_repeat("\x00", 16); + return substr($enc, 0, 32); + } elseif ($this->encryptdata['mode'] == 3) { // AES-256 + $seed = TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed()); + // User Validation Salt + $this->encryptdata['UVS'] = substr($seed, 0, 8); + // User Key Salt + $this->encryptdata['UKS'] = substr($seed, 8, 16); + return hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UVS'], true).$this->encryptdata['UVS'].$this->encryptdata['UKS']; + } + } + + /** + * Compute UE value (used for encryption) + * @return string UE value + * @protected + * @since 5.9.006 (2010-10-19) + * @author Nicola Asuni + */ + protected function _UEvalue() { + $hashkey = hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UKS'], true); + return TCPDF_STATIC::_AESnopad($hashkey, $this->encryptdata['key']); + } + + /** + * Compute O value (used for encryption) + * @return string O value + * @protected + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + protected function _Ovalue() { + if ($this->encryptdata['mode'] < 3) { // RC4-40, RC4-128, AES-128 + $tmp = TCPDF_STATIC::_md5_16($this->encryptdata['owner_password']); + if ($this->encryptdata['mode'] > 0) { + for ($i = 0; $i < 50; ++$i) { + $tmp = TCPDF_STATIC::_md5_16($tmp); + } + } + $owner_key = substr($tmp, 0, ($this->encryptdata['Length'] / 8)); + $enc = TCPDF_STATIC::_RC4($owner_key, $this->encryptdata['user_password'], $this->last_enc_key, $this->last_enc_key_c); + if ($this->encryptdata['mode'] > 0) { + $len = strlen($owner_key); + for ($i = 1; $i <= 19; ++$i) { + $ek = ''; + for ($j = 0; $j < $len; ++$j) { + $ek .= chr(ord($owner_key[$j]) ^ $i); + } + $enc = TCPDF_STATIC::_RC4($ek, $enc, $this->last_enc_key, $this->last_enc_key_c); + } + } + return $enc; + } elseif ($this->encryptdata['mode'] == 3) { // AES-256 + $seed = TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed()); + // Owner Validation Salt + $this->encryptdata['OVS'] = substr($seed, 0, 8); + // Owner Key Salt + $this->encryptdata['OKS'] = substr($seed, 8, 16); + return hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OVS'].$this->encryptdata['U'], true).$this->encryptdata['OVS'].$this->encryptdata['OKS']; + } + } + + /** + * Compute OE value (used for encryption) + * @return string OE value + * @protected + * @since 5.9.006 (2010-10-19) + * @author Nicola Asuni + */ + protected function _OEvalue() { + $hashkey = hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OKS'].$this->encryptdata['U'], true); + return TCPDF_STATIC::_AESnopad($hashkey, $this->encryptdata['key']); + } + + /** + * Convert password for AES-256 encryption mode + * @param $password (string) password + * @return string password + * @protected + * @since 5.9.006 (2010-10-19) + * @author Nicola Asuni + */ + protected function _fixAES256Password($password) { + $psw = ''; // password to be returned + $psw_array = TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($password, $this->isunicode, $this->CurrentFont), $password, $this->rtl, $this->isunicode, $this->CurrentFont); + foreach ($psw_array as $c) { + $psw .= TCPDF_FONTS::unichr($c, $this->isunicode); + } + return substr($psw, 0, 127); + } + + /** + * Compute encryption key + * @protected + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + protected function _generateencryptionkey() { + $keybytelen = ($this->encryptdata['Length'] / 8); + if (!$this->encryptdata['pubkey']) { // standard mode + if ($this->encryptdata['mode'] == 3) { // AES-256 + // generate 256 bit random key + $this->encryptdata['key'] = substr(hash('sha256', TCPDF_STATIC::getRandomSeed(), true), 0, $keybytelen); + // truncate passwords + $this->encryptdata['user_password'] = $this->_fixAES256Password($this->encryptdata['user_password']); + $this->encryptdata['owner_password'] = $this->_fixAES256Password($this->encryptdata['owner_password']); + // Compute U value + $this->encryptdata['U'] = $this->_Uvalue(); + // Compute UE value + $this->encryptdata['UE'] = $this->_UEvalue(); + // Compute O value + $this->encryptdata['O'] = $this->_Ovalue(); + // Compute OE value + $this->encryptdata['OE'] = $this->_OEvalue(); + // Compute P value + $this->encryptdata['P'] = $this->encryptdata['protection']; + // Computing the encryption dictionary's Perms (permissions) value + $perms = TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']); // bytes 0-3 + $perms .= chr(255).chr(255).chr(255).chr(255); // bytes 4-7 + if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) { // byte 8 + $perms .= 'F'; + } else { + $perms .= 'T'; + } + $perms .= 'adb'; // bytes 9-11 + $perms .= 'nick'; // bytes 12-15 + $this->encryptdata['perms'] = TCPDF_STATIC::_AESnopad($this->encryptdata['key'], $perms); + } else { // RC4-40, RC4-128, AES-128 + // Pad passwords + $this->encryptdata['user_password'] = substr($this->encryptdata['user_password'].TCPDF_STATIC::$enc_padding, 0, 32); + $this->encryptdata['owner_password'] = substr($this->encryptdata['owner_password'].TCPDF_STATIC::$enc_padding, 0, 32); + // Compute O value + $this->encryptdata['O'] = $this->_Ovalue(); + // get default permissions (reverse byte order) + $permissions = TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']); + // Compute encryption key + $tmp = TCPDF_STATIC::_md5_16($this->encryptdata['user_password'].$this->encryptdata['O'].$permissions.$this->encryptdata['fileid']); + if ($this->encryptdata['mode'] > 0) { + for ($i = 0; $i < 50; ++$i) { + $tmp = TCPDF_STATIC::_md5_16(substr($tmp, 0, $keybytelen)); + } + } + $this->encryptdata['key'] = substr($tmp, 0, $keybytelen); + // Compute U value + $this->encryptdata['U'] = $this->_Uvalue(); + // Compute P value + $this->encryptdata['P'] = $this->encryptdata['protection']; + } + } else { // Public-Key mode + // random 20-byte seed + $seed = sha1(TCPDF_STATIC::getRandomSeed(), true); + $recipient_bytes = ''; + foreach ($this->encryptdata['pubkeys'] as $pubkey) { + // for each public certificate + if (isset($pubkey['p'])) { + $pkprotection = TCPDF_STATIC::getUserPermissionCode($pubkey['p'], $this->encryptdata['mode']); + } else { + $pkprotection = $this->encryptdata['protection']; + } + // get default permissions (reverse byte order) + $pkpermissions = TCPDF_STATIC::getEncPermissionsString($pkprotection); + // envelope data + $envelope = $seed.$pkpermissions; + // write the envelope data to a temporary file + $tempkeyfile = TCPDF_STATIC::getObjFilename('key', $this->file_id); + $f = TCPDF_STATIC::fopenLocal($tempkeyfile, 'wb'); + if (!$f) { + $this->Error('Unable to create temporary key file: '.$tempkeyfile); + } + $envelope_length = strlen($envelope); + fwrite($f, $envelope, $envelope_length); + fclose($f); + $tempencfile = TCPDF_STATIC::getObjFilename('enc', $this->file_id); + if (!openssl_pkcs7_encrypt($tempkeyfile, $tempencfile, $pubkey['c'], array(), PKCS7_BINARY | PKCS7_DETACHED)) { + $this->Error('Unable to encrypt the file: '.$tempkeyfile); + } + // read encryption signature + $signature = file_get_contents($tempencfile, false, null, $envelope_length); + // extract signature + $signature = substr($signature, strpos($signature, 'Content-Disposition')); + $tmparr = explode("\n\n", $signature); + $signature = trim($tmparr[1]); + unset($tmparr); + // decode signature + $signature = base64_decode($signature); + // convert signature to hex + $hexsignature = current(unpack('H*', $signature)); + // store signature on recipients array + $this->encryptdata['Recipients'][] = $hexsignature; + // The bytes of each item in the Recipients array of PKCS#7 objects in the order in which they appear in the array + $recipient_bytes .= $signature; + } + // calculate encryption key + if ($this->encryptdata['mode'] == 3) { // AES-256 + $this->encryptdata['key'] = substr(hash('sha256', $seed.$recipient_bytes, true), 0, $keybytelen); + } else { // RC4-40, RC4-128, AES-128 + $this->encryptdata['key'] = substr(sha1($seed.$recipient_bytes, true), 0, $keybytelen); + } + } + } + + /** + * Set document protection + * Remark: the protection against modification is for people who have the full Acrobat product. + * If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access. + * Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts. + * @param $permissions (Array) the set of permissions (specify the ones you want to block):<ul><li>print : Print the document;</li><li>modify : Modify the contents of the document by operations other than those controlled by 'fill-forms', 'extract' and 'assemble';</li><li>copy : Copy or otherwise extract text and graphics from the document;</li><li>annot-forms : Add or modify text annotations, fill in interactive form fields, and, if 'modify' is also set, create or modify interactive form fields (including signature fields);</li><li>fill-forms : Fill in existing interactive form fields (including signature fields), even if 'annot-forms' is not specified;</li><li>extract : Extract text and graphics (in support of accessibility to users with disabilities or for other purposes);</li><li>assemble : Assemble the document (insert, rotate, or delete pages and create bookmarks or thumbnail images), even if 'modify' is not set;</li><li>print-high : Print the document to a representation from which a faithful digital copy of the PDF content could be generated. When this is not set, printing is limited to a low-level representation of the appearance, possibly of degraded quality.</li><li>owner : (inverted logic - only for public-key) when set permits change of encryption and enables all other permissions.</li></ul> + * @param $user_pass (String) user password. Empty by default. + * @param $owner_pass (String) owner password. If not specified, a random value is used. + * @param $mode (int) encryption strength: 0 = RC4 40 bit; 1 = RC4 128 bit; 2 = AES 128 bit; 3 = AES 256 bit. + * @param $pubkeys (String) array of recipients containing public-key certificates ('c') and permissions ('p'). For example: array(array('c' => 'file://../examples/data/cert/tcpdf.crt', 'p' => array('print'))) + * @public + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + public function SetProtection($permissions=array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble', 'print-high'), $user_pass='', $owner_pass=null, $mode=0, $pubkeys=null) { + if ($this->pdfa_mode) { + // encryption is not allowed in PDF/A mode + return; + } + $this->encryptdata['protection'] = TCPDF_STATIC::getUserPermissionCode($permissions, $mode); + if (($pubkeys !== null) AND (is_array($pubkeys))) { + // public-key mode + $this->encryptdata['pubkeys'] = $pubkeys; + if ($mode == 0) { + // public-Key Security requires at least 128 bit + $mode = 1; + } + if (!function_exists('openssl_pkcs7_encrypt')) { + $this->Error('Public-Key Security requires openssl library.'); + } + // Set Public-Key filter (available are: Entrust.PPKEF, Adobe.PPKLite, Adobe.PubSec) + $this->encryptdata['pubkey'] = true; + $this->encryptdata['Filter'] = 'Adobe.PubSec'; + $this->encryptdata['StmF'] = 'DefaultCryptFilter'; + $this->encryptdata['StrF'] = 'DefaultCryptFilter'; + } else { + // standard mode (password mode) + $this->encryptdata['pubkey'] = false; + $this->encryptdata['Filter'] = 'Standard'; + $this->encryptdata['StmF'] = 'StdCF'; + $this->encryptdata['StrF'] = 'StdCF'; + } + if ($mode > 1) { // AES + if (!extension_loaded('openssl') && !extension_loaded('mcrypt')) { + $this->Error('AES encryption requires openssl or mcrypt extension (http://www.php.net/manual/en/mcrypt.requirements.php).'); + } + if (extension_loaded('openssl') && !in_array('aes-256-cbc', openssl_get_cipher_methods())) { + $this->Error('AES encryption requires openssl/aes-256-cbc cypher.'); + } + if (extension_loaded('mcrypt') && mcrypt_get_cipher_name(MCRYPT_RIJNDAEL_128) === false) { + $this->Error('AES encryption requires MCRYPT_RIJNDAEL_128 cypher.'); + } + if (($mode == 3) AND !function_exists('hash')) { + // the Hash extension requires no external libraries and is enabled by default as of PHP 5.1.2. + $this->Error('AES 256 encryption requires HASH Message Digest Framework (http://www.php.net/manual/en/book.hash.php).'); + } + } + if ($owner_pass === null) { + $owner_pass = md5(TCPDF_STATIC::getRandomSeed()); + } + $this->encryptdata['user_password'] = $user_pass; + $this->encryptdata['owner_password'] = $owner_pass; + $this->encryptdata['mode'] = $mode; + switch ($mode) { + case 0: { // RC4 40 bit + $this->encryptdata['V'] = 1; + $this->encryptdata['Length'] = 40; + $this->encryptdata['CF']['CFM'] = 'V2'; + break; + } + case 1: { // RC4 128 bit + $this->encryptdata['V'] = 2; + $this->encryptdata['Length'] = 128; + $this->encryptdata['CF']['CFM'] = 'V2'; + if ($this->encryptdata['pubkey']) { + $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s4'; + $this->encryptdata['Recipients'] = array(); + } + break; + } + case 2: { // AES 128 bit + $this->encryptdata['V'] = 4; + $this->encryptdata['Length'] = 128; + $this->encryptdata['CF']['CFM'] = 'AESV2'; + $this->encryptdata['CF']['Length'] = 128; + if ($this->encryptdata['pubkey']) { + $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5'; + $this->encryptdata['Recipients'] = array(); + } + break; + } + case 3: { // AES 256 bit + $this->encryptdata['V'] = 5; + $this->encryptdata['Length'] = 256; + $this->encryptdata['CF']['CFM'] = 'AESV3'; + $this->encryptdata['CF']['Length'] = 256; + if ($this->encryptdata['pubkey']) { + $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5'; + $this->encryptdata['Recipients'] = array(); + } + break; + } + } + $this->encrypted = true; + $this->encryptdata['fileid'] = TCPDF_STATIC::convertHexStringToString($this->file_id); + $this->_generateencryptionkey(); + } + + // END OF ENCRYPTION FUNCTIONS ------------------------- + + // START TRANSFORMATIONS SECTION ----------------------- + + /** + * Starts a 2D tranformation saving current graphic state. + * This function must be called before scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StartTransform() { + if ($this->state != 2) { + return; + } + $this->_outSaveGraphicsState(); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['transfmrk'][] = strlen($this->xobjects[$this->xobjid]['outdata']); + } else { + $this->transfmrk[$this->page][] = $this->pagelen[$this->page]; + } + ++$this->transfmatrix_key; + $this->transfmatrix[$this->transfmatrix_key] = array(); + } + + /** + * Stops a 2D tranformation restoring previous graphic state. + * This function must be called after scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StopTransform() { + if ($this->state != 2) { + return; + } + $this->_outRestoreGraphicsState(); + if (isset($this->transfmatrix[$this->transfmatrix_key])) { + array_pop($this->transfmatrix[$this->transfmatrix_key]); + --$this->transfmatrix_key; + } + if ($this->inxobj) { + // we are inside an XObject template + array_pop($this->xobjects[$this->xobjid]['transfmrk']); + } else { + array_pop($this->transfmrk[$this->page]); + } + } + /** + * Horizontal Scaling. + * @param $s_x (float) scaling factor for width as percent. 0 is not allowed. + * @param $x (int) abscissa of the scaling center. Default is current x position + * @param $y (int) ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleX($s_x, $x='', $y='') { + $this->Scale($s_x, 100, $x, $y); + } + + /** + * Vertical Scaling. + * @param $s_y (float) scaling factor for height as percent. 0 is not allowed. + * @param $x (int) abscissa of the scaling center. Default is current x position + * @param $y (int) ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleY($s_y, $x='', $y='') { + $this->Scale(100, $s_y, $x, $y); + } + + /** + * Vertical and horizontal proportional Scaling. + * @param $s (float) scaling factor for width and height as percent. 0 is not allowed. + * @param $x (int) abscissa of the scaling center. Default is current x position + * @param $y (int) ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleXY($s, $x='', $y='') { + $this->Scale($s, $s, $x, $y); + } + + /** + * Vertical and horizontal non-proportional Scaling. + * @param $s_x (float) scaling factor for width as percent. 0 is not allowed. + * @param $s_y (float) scaling factor for height as percent. 0 is not allowed. + * @param $x (int) abscissa of the scaling center. Default is current x position + * @param $y (int) ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Scale($s_x, $s_y, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if (($s_x == 0) OR ($s_y == 0)) { + $this->Error('Please do not use values equal to zero for scaling'); + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $s_x /= 100; + $s_y /= 100; + $tm = array(); + $tm[0] = $s_x; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = $s_y; + $tm[4] = $x * (1 - $s_x); + $tm[5] = $y * (1 - $s_y); + //scale the coordinate system + $this->Transform($tm); + } + + /** + * Horizontal Mirroring. + * @param $x (int) abscissa of the point. Default is current x position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorH($x='') { + $this->Scale(-100, 100, $x); + } + + /** + * Verical Mirroring. + * @param $y (int) ordinate of the point. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorV($y='') { + $this->Scale(100, -100, '', $y); + } + + /** + * Point reflection mirroring. + * @param $x (int) abscissa of the point. Default is current x position + * @param $y (int) ordinate of the point. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorP($x='',$y='') { + $this->Scale(-100, -100, $x, $y); + } + + /** + * Reflection against a straight line through point (x, y) with the gradient angle (angle). + * @param $angle (float) gradient angle of the straight line. Default is 0 (horizontal line). + * @param $x (int) abscissa of the point. Default is current x position + * @param $y (int) ordinate of the point. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorL($angle=0, $x='',$y='') { + $this->Scale(-100, 100, $x, $y); + $this->Rotate(-2*($angle-90), $x, $y); + } + + /** + * Translate graphic object horizontally. + * @param $t_x (int) movement to the right (or left for RTL) + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateX($t_x) { + $this->Translate($t_x, 0); + } + + /** + * Translate graphic object vertically. + * @param $t_y (int) movement to the bottom + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateY($t_y) { + $this->Translate(0, $t_y); + } + + /** + * Translate graphic object horizontally and vertically. + * @param $t_x (int) movement to the right + * @param $t_y (int) movement to the bottom + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Translate($t_x, $t_y) { + //calculate elements of transformation matrix + $tm = array(); + $tm[0] = 1; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = 1; + $tm[4] = $t_x * $this->k; + $tm[5] = -$t_y * $this->k; + //translate the coordinate system + $this->Transform($tm); + } + + /** + * Rotate object. + * @param $angle (float) angle in degrees for counter-clockwise rotation + * @param $x (int) abscissa of the rotation center. Default is current x position + * @param $y (int) ordinate of the rotation center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Rotate($angle, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $tm = array(); + $tm[0] = cos(deg2rad($angle)); + $tm[1] = sin(deg2rad($angle)); + $tm[2] = -$tm[1]; + $tm[3] = $tm[0]; + $tm[4] = $x + ($tm[1] * $y) - ($tm[0] * $x); + $tm[5] = $y - ($tm[0] * $y) - ($tm[1] * $x); + //rotate the coordinate system around ($x,$y) + $this->Transform($tm); + } + + /** + * Skew horizontally. + * @param $angle_x (float) angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param $x (int) abscissa of the skewing center. default is current x position + * @param $y (int) ordinate of the skewing center. default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewX($angle_x, $x='', $y='') { + $this->Skew($angle_x, 0, $x, $y); + } + + /** + * Skew vertically. + * @param $angle_y (float) angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param $x (int) abscissa of the skewing center. default is current x position + * @param $y (int) ordinate of the skewing center. default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewY($angle_y, $x='', $y='') { + $this->Skew(0, $angle_y, $x, $y); + } + + /** + * Skew. + * @param $angle_x (float) angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param $angle_y (float) angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param $x (int) abscissa of the skewing center. default is current x position + * @param $y (int) ordinate of the skewing center. default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Skew($angle_x, $angle_y, $x='', $y='') { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) { + $this->Error('Please use values between -90 and +90 degrees for Skewing.'); + } + $x *= $this->k; + $y = ($this->h - $y) * $this->k; + //calculate elements of transformation matrix + $tm = array(); + $tm[0] = 1; + $tm[1] = tan(deg2rad($angle_y)); + $tm[2] = tan(deg2rad($angle_x)); + $tm[3] = 1; + $tm[4] = -$tm[2] * $y; + $tm[5] = -$tm[1] * $x; + //skew the coordinate system + $this->Transform($tm); + } + + /** + * Apply graphic transformations. + * @param $tm (array) transformation matrix + * @protected + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + protected function Transform($tm) { + if ($this->state != 2) { + return; + } + $this->_out(sprintf('%F %F %F %F %F %F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); + // add tranformation matrix + $this->transfmatrix[$this->transfmatrix_key][] = array('a' => $tm[0], 'b' => $tm[1], 'c' => $tm[2], 'd' => $tm[3], 'e' => $tm[4], 'f' => $tm[5]); + // update transformation mark + if ($this->inxobj) { + // we are inside an XObject template + if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { + $key = key($this->xobjects[$this->xobjid]['transfmrk']); + $this->xobjects[$this->xobjid]['transfmrk'][$key] = strlen($this->xobjects[$this->xobjid]['outdata']); + } + } elseif (end($this->transfmrk[$this->page]) !== false) { + $key = key($this->transfmrk[$this->page]); + $this->transfmrk[$this->page][$key] = $this->pagelen[$this->page]; + } + } + + // END TRANSFORMATIONS SECTION ------------------------- + + // START GRAPHIC FUNCTIONS SECTION --------------------- + // The following section is based on the code provided by David Hernandez Sanz + + /** + * Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page. + * @param $width (float) The width. + * @public + * @since 1.0 + * @see Line(), Rect(), Cell(), MultiCell() + */ + public function SetLineWidth($width) { + //Set line width + $this->LineWidth = $width; + $this->linestyleWidth = sprintf('%F w', ($width * $this->k)); + if ($this->state == 2) { + $this->_out($this->linestyleWidth); + } + } + + /** + * Returns the current the line width. + * @return int Line width + * @public + * @since 2.1.000 (2008-01-07) + * @see Line(), SetLineWidth() + */ + public function GetLineWidth() { + return $this->LineWidth; + } + + /** + * Set line style. + * @param $style (array) Line style. Array with keys among the following: + * <ul> + * <li>width (float): Width of the line in user units.</li> + * <li>cap (string): Type of cap to put on the line. Possible values are: + * butt, round, square. The difference between "square" and "butt" is that + * "square" projects a flat end past the end of the line.</li> + * <li>join (string): Type of join. Possible values are: miter, round, + * bevel.</li> + * <li>dash (mixed): Dash pattern. Is 0 (without dash) or string with + * series of length values, which are the lengths of the on and off dashes. + * For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on, + * 1 off, 2 on, 1 off, ...</li> + * <li>phase (integer): Modifier on the dash pattern which is used to shift + * the point at which the pattern starts.</li> + * <li>color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName).</li> + * </ul> + * @param $ret (boolean) if true do not send the command. + * @return string the PDF command + * @public + * @since 2.1.000 (2008-01-08) + */ + public function SetLineStyle($style, $ret=false) { + $s = ''; // string to be returned + if (!is_array($style)) { + return; + } + if (isset($style['width'])) { + $this->LineWidth = $style['width']; + $this->linestyleWidth = sprintf('%F w', ($style['width'] * $this->k)); + $s .= $this->linestyleWidth.' '; + } + if (isset($style['cap'])) { + $ca = array('butt' => 0, 'round'=> 1, 'square' => 2); + if (isset($ca[$style['cap']])) { + $this->linestyleCap = $ca[$style['cap']].' J'; + $s .= $this->linestyleCap.' '; + } + } + if (isset($style['join'])) { + $ja = array('miter' => 0, 'round' => 1, 'bevel' => 2); + if (isset($ja[$style['join']])) { + $this->linestyleJoin = $ja[$style['join']].' j'; + $s .= $this->linestyleJoin.' '; + } + } + if (isset($style['dash'])) { + $dash_string = ''; + if ($style['dash']) { + if (preg_match('/^.+,/', $style['dash']) > 0) { + $tab = explode(',', $style['dash']); + } else { + $tab = array($style['dash']); + } + $dash_string = ''; + foreach ($tab as $i => $v) { + if ($i) { + $dash_string .= ' '; + } + $dash_string .= sprintf('%F', $v); + } + } + if (!isset($style['phase']) OR !$style['dash']) { + $style['phase'] = 0; + } + $this->linestyleDash = sprintf('[%s] %F d', $dash_string, $style['phase']); + $s .= $this->linestyleDash.' '; + } + if (isset($style['color'])) { + $s .= $this->SetDrawColorArray($style['color'], true).' '; + } + if (!$ret AND ($this->state == 2)) { + $this->_out($s); + } + return $s; + } + + /** + * Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment. + * @param $x (float) Abscissa of point. + * @param $y (float) Ordinate of point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outPoint($x, $y) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F m', ($x * $this->k), (($this->h - $y) * $this->k))); + } + } + + /** + * Append a straight line segment from the current point to the point (x, y). + * The new current point shall be (x, y). + * @param $x (float) Abscissa of end point. + * @param $y (float) Ordinate of end point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outLine($x, $y) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F l', ($x * $this->k), (($this->h - $y) * $this->k))); + } + } + + /** + * Append a rectangle to the current path as a complete subpath, with lower-left corner (x, y) and dimensions widthand height in user space. + * @param $x (float) Abscissa of upper-left corner. + * @param $y (float) Ordinate of upper-left corner. + * @param $w (float) Width. + * @param $h (float) Height. + * @param $op (string) options + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outRect($x, $y, $w, $h, $op) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F re %s', ($x * $this->k), (($this->h - $y) * $this->k), ($w * $this->k), (-$h * $this->k), $op)); + } + } + + /** + * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x2, y2) as the Bezier control points. + * The new current point shall be (x3, y3). + * @param $x1 (float) Abscissa of control point 1. + * @param $y1 (float) Ordinate of control point 1. + * @param $x2 (float) Abscissa of control point 2. + * @param $y2 (float) Ordinate of control point 2. + * @param $x3 (float) Abscissa of end point. + * @param $y3 (float) Ordinate of end point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurve($x1, $y1, $x2, $y2, $x3, $y3) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F %F %F c', ($x1 * $this->k), (($this->h - $y1) * $this->k), ($x2 * $this->k), (($this->h - $y2) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); + } + } + + /** + * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using the current point and (x2, y2) as the Bezier control points. + * The new current point shall be (x3, y3). + * @param $x2 (float) Abscissa of control point 2. + * @param $y2 (float) Ordinate of control point 2. + * @param $x3 (float) Abscissa of end point. + * @param $y3 (float) Ordinate of end point. + * @protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outCurveV($x2, $y2, $x3, $y3) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F v', ($x2 * $this->k), (($this->h - $y2) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); + } + } + + /** + * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x3, y3) as the Bezier control points. + * The new current point shall be (x3, y3). + * @param $x1 (float) Abscissa of control point 1. + * @param $y1 (float) Ordinate of control point 1. + * @param $x3 (float) Abscissa of end point. + * @param $y3 (float) Ordinate of end point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurveY($x1, $y1, $x3, $y3) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F y', ($x1 * $this->k), (($this->h - $y1) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); + } + } + + /** + * Draws a line between two points. + * @param $x1 (float) Abscissa of first point. + * @param $y1 (float) Ordinate of first point. + * @param $x2 (float) Abscissa of second point. + * @param $y2 (float) Ordinate of second point. + * @param $style (array) Line style. Array like for SetLineStyle(). Default value: default line style (empty array). + * @public + * @since 1.0 + * @see SetLineWidth(), SetDrawColor(), SetLineStyle() + */ + public function Line($x1, $y1, $x2, $y2, $style=array()) { + if ($this->state != 2) { + return; + } + if (is_array($style)) { + $this->SetLineStyle($style); + } + $this->_outPoint($x1, $y1); + $this->_outLine($x2, $y2); + $this->_out('S'); + } + + /** + * Draws a rectangle. + * @param $x (float) Abscissa of upper-left corner. + * @param $y (float) Ordinate of upper-left corner. + * @param $w (float) Width. + * @param $h (float) Height. + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $border_style (array) Border style of rectangle. Array with keys among the following: + * <ul> + * <li>all: Line style of all borders. Array like for SetLineStyle().</li> + * <li>L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for SetLineStyle().</li> + * </ul> + * If a key is not present or is null, the correspondent border is not drawn. Default value: default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @since 1.0 + * @see SetLineStyle() + */ + public function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (empty($style)) { + $style = 'S'; + } + if (!(strpos($style, 'F') === false) AND !empty($fill_color)) { + // set background color + $this->SetFillColorArray($fill_color); + } + if (!empty($border_style)) { + if (isset($border_style['all']) AND !empty($border_style['all'])) { + //set global style for border + $this->SetLineStyle($border_style['all']); + $border_style = array(); + } else { + // remove stroke operator from style + $opnostroke = array('S' => '', 'D' => '', 's' => '', 'd' => '', 'B' => 'F', 'FD' => 'F', 'DF' => 'F', 'B*' => 'F*', 'F*D' => 'F*', 'DF*' => 'F*', 'b' => 'f', 'fd' => 'f', 'df' => 'f', 'b*' => 'f*', 'f*d' => 'f*', 'df*' => 'f*' ); + if (isset($opnostroke[$style])) { + $style = $opnostroke[$style]; + } + } + } + if (!empty($style)) { + $op = TCPDF_STATIC::getPathPaintOperator($style); + $this->_outRect($x, $y, $w, $h, $op); + } + if (!empty($border_style)) { + $border_style2 = array(); + foreach ($border_style as $line => $value) { + $length = strlen($line); + for ($i = 0; $i < $length; ++$i) { + $border_style2[$line[$i]] = $value; + } + } + $border_style = $border_style2; + if (isset($border_style['L']) AND $border_style['L']) { + $this->Line($x, $y, $x, $y + $h, $border_style['L']); + } + if (isset($border_style['T']) AND $border_style['T']) { + $this->Line($x, $y, $x + $w, $y, $border_style['T']); + } + if (isset($border_style['R']) AND $border_style['R']) { + $this->Line($x + $w, $y, $x + $w, $y + $h, $border_style['R']); + } + if (isset($border_style['B']) AND $border_style['B']) { + $this->Line($x, $y + $h, $x + $w, $y + $h, $border_style['B']); + } + } + } + + /** + * Draws a Bezier curve. + * The Bezier curve is a tangent to the line between the control points at + * either end of the curve. + * @param $x0 (float) Abscissa of start point. + * @param $y0 (float) Ordinate of start point. + * @param $x1 (float) Abscissa of control point 1. + * @param $y1 (float) Ordinate of control point 1. + * @param $x2 (float) Abscissa of control point 2. + * @param $y2 (float) Ordinate of control point 2. + * @param $x3 (float) Abscissa of end point. + * @param $y3 (float) Ordinate of end point. + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of curve. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @see SetLineStyle() + * @since 2.1.000 (2008-01-08) + */ + public function Curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style='', $line_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + $this->_out($op); + } + + /** + * Draws a poly-Bezier curve. + * Each Bezier curve segment is a tangent to the line between the control points at + * either end of the curve. + * @param $x0 (float) Abscissa of start point. + * @param $y0 (float) Ordinate of start point. + * @param $segments (float) An array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3). + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of curve. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @see SetLineStyle() + * @since 3.0008 (2008-05-12) + */ + public function Polycurve($x0, $y0, $segments, $style='', $line_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + foreach ($segments as $segment) { + list($x1, $y1, $x2, $y2, $x3, $y3) = $segment; + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + } + $this->_out($op); + } + + /** + * Draws an ellipse. + * An ellipse is formed from n Bezier curves. + * @param $x0 (float) Abscissa of center point. + * @param $y0 (float) Ordinate of center point. + * @param $rx (float) Horizontal radius. + * @param $ry (float) Vertical radius (if ry = 0 then is a circle, see Circle()). Default value: 0. + * @param $angle: (float) Angle oriented (anti-clockwise). Default value: 0. + * @param $astart: (float) Angle start of draw line. Default value: 0. + * @param $afinish: (float) Angle finish of draw line. Default value: 360. + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of ellipse. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @param $nc (integer) Number of curves used to draw a 90 degrees portion of ellipse. + * @author Nicola Asuni + * @public + * @since 2.1.000 (2008-01-08) + */ + public function Ellipse($x0, $y0, $rx, $ry='', $angle=0, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + if ($this->state != 2) { + return; + } + if (TCPDF_STATIC::empty_string($ry) OR ($ry == 0)) { + $ry = $rx; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->SetLineStyle($line_style); + } + $this->_outellipticalarc($x0, $y0, $rx, $ry, $angle, $astart, $afinish, false, $nc, true, true, false); + $this->_out($op); + } + + /** + * Append an elliptical arc to the current path. + * An ellipse is formed from n Bezier curves. + * @param $xc (float) Abscissa of center point. + * @param $yc (float) Ordinate of center point. + * @param $rx (float) Horizontal radius. + * @param $ry (float) Vertical radius (if ry = 0 then is a circle, see Circle()). Default value: 0. + * @param $xang: (float) Angle between the X-axis and the major axis of the ellipse. Default value: 0. + * @param $angs: (float) Angle start of draw line. Default value: 0. + * @param $angf: (float) Angle finish of draw line. Default value: 360. + * @param $pie (boolean) if true do not mark the border point (used to draw pie sectors). + * @param $nc (integer) Number of curves used to draw a 90 degrees portion of ellipse. + * @param $startpoint (boolean) if true output a starting point. + * @param $ccw (boolean) if true draws in counter-clockwise. + * @param $svg (boolean) if true the angles are in svg mode (already calculated). + * @return array bounding box coordinates (x min, y min, x max, y max) + * @author Nicola Asuni + * @protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outellipticalarc($xc, $yc, $rx, $ry, $xang=0, $angs=0, $angf=360, $pie=false, $nc=2, $startpoint=true, $ccw=true, $svg=false) { + if (($rx <= 0) OR ($ry < 0)) { + return; + } + $k = $this->k; + if ($nc < 2) { + $nc = 2; + } + $xmin = 2147483647; + $ymin = 2147483647; + $xmax = 0; + $ymax = 0; + if ($pie) { + // center of the arc + $this->_outPoint($xc, $yc); + } + $xang = deg2rad((float) $xang); + $angs = deg2rad((float) $angs); + $angf = deg2rad((float) $angf); + if ($svg) { + $as = $angs; + $af = $angf; + } else { + $as = atan2((sin($angs) / $ry), (cos($angs) / $rx)); + $af = atan2((sin($angf) / $ry), (cos($angf) / $rx)); + } + if ($as < 0) { + $as += (2 * M_PI); + } + if ($af < 0) { + $af += (2 * M_PI); + } + if ($ccw AND ($as > $af)) { + // reverse rotation + $as -= (2 * M_PI); + } elseif (!$ccw AND ($as < $af)) { + // reverse rotation + $af -= (2 * M_PI); + } + $total_angle = ($af - $as); + if ($nc < 2) { + $nc = 2; + } + // total arcs to draw + $nc *= (2 * abs($total_angle) / M_PI); + $nc = round($nc) + 1; + // angle of each arc + $arcang = ($total_angle / $nc); + // center point in PDF coordinates + $x0 = $xc; + $y0 = ($this->h - $yc); + // starting angle + $ang = $as; + $alpha = sin($arcang) * ((sqrt(4 + (3 * pow(tan(($arcang) / 2), 2))) - 1) / 3); + $cos_xang = cos($xang); + $sin_xang = sin($xang); + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // first arc point + $px1 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py1 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // first Bezier control point + $qx1 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy1 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + if ($pie) { + // line from center to arc starting point + $this->_outLine($px1, $this->h - $py1); + } elseif ($startpoint) { + // arc starting point + $this->_outPoint($px1, $this->h - $py1); + } + // draw arcs + for ($i = 1; $i <= $nc; ++$i) { + // starting angle + $ang = $as + ($i * $arcang); + if ($i == $nc) { + $ang = $af; + } + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // second arc point + $px2 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py2 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // second Bezier control point + $qx2 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy2 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + // draw arc + $cx1 = ($px1 + $qx1); + $cy1 = ($this->h - ($py1 + $qy1)); + $cx2 = ($px2 - $qx2); + $cy2 = ($this->h - ($py2 - $qy2)); + $cx3 = $px2; + $cy3 = ($this->h - $py2); + $this->_outCurve($cx1, $cy1, $cx2, $cy2, $cx3, $cy3); + // get bounding box coordinates + $xmin = min($xmin, $cx1, $cx2, $cx3); + $ymin = min($ymin, $cy1, $cy2, $cy3); + $xmax = max($xmax, $cx1, $cx2, $cx3); + $ymax = max($ymax, $cy1, $cy2, $cy3); + // move to next point + $px1 = $px2; + $py1 = $py2; + $qx1 = $qx2; + $qy1 = $qy2; + } + if ($pie) { + $this->_outLine($xc, $yc); + // get bounding box coordinates + $xmin = min($xmin, $xc); + $ymin = min($ymin, $yc); + $xmax = max($xmax, $xc); + $ymax = max($ymax, $yc); + } + return array($xmin, $ymin, $xmax, $ymax); + } + + /** + * Draws a circle. + * A circle is formed from n Bezier curves. + * @param $x0 (float) Abscissa of center point. + * @param $y0 (float) Ordinate of center point. + * @param $r (float) Radius. + * @param $angstr: (float) Angle start of draw line. Default value: 0. + * @param $angend: (float) Angle finish of draw line. Default value: 360. + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of circle. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param $nc (integer) Number of curves used to draw a 90 degrees portion of circle. + * @public + * @since 2.1.000 (2008-01-08) + */ + public function Circle($x0, $y0, $r, $angstr=0, $angend=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + $this->Ellipse($x0, $y0, $r, $r, 0, $angstr, $angend, $style, $line_style, $fill_color, $nc); + } + + /** + * Draws a polygonal line + * @param $p (array) Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of polygon. Array with keys among the following: + * <ul> + * <li>all: Line style of all lines. Array like for SetLineStyle().</li> + * <li>0 to ($np - 1): Line style of each line. Array like for SetLineStyle().</li> + * </ul> + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @since 4.8.003 (2009-09-15) + * @public + */ + public function PolyLine($p, $style='', $line_style=array(), $fill_color=array()) { + $this->Polygon($p, $style, $line_style, $fill_color, false); + } + + /** + * Draws a polygon. + * @param $p (array) Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of polygon. Array with keys among the following: + * <ul> + * <li>all: Line style of all lines. Array like for SetLineStyle().</li> + * <li>0 to ($np - 1): Line style of each line. Array like for SetLineStyle().</li> + * </ul> + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @param $closed (boolean) if true the polygon is closes, otherwise will remain open + * @public + * @since 2.1.000 (2008-01-08) + */ + public function Polygon($p, $style='', $line_style=array(), $fill_color=array(), $closed=true) { + if ($this->state != 2) { + return; + } + $nc = count($p); // number of coordinates + $np = $nc / 2; // number of points + if ($closed) { + // close polygon by adding the first 2 points at the end (one line) + for ($i = 0; $i < 4; ++$i) { + $p[$nc + $i] = $p[$i]; + } + // copy style for the last added line + if (isset($line_style[0])) { + $line_style[$np] = $line_style[0]; + } + $nc += 4; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + $draw = true; + if ($line_style) { + if (isset($line_style['all'])) { + $this->SetLineStyle($line_style['all']); + } else { + $draw = false; + if ($op == 'B') { + // draw fill + $op = 'f'; + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + // draw outline + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $line_num = ($i / 2) - 1; + if (isset($line_style[$line_num])) { + if ($line_style[$line_num] != 0) { + if (is_array($line_style[$line_num])) { + $this->_out('S'); + $this->SetLineStyle($line_style[$line_num]); + $this->_outPoint($p[$i - 2], $p[$i - 1]); + $this->_outLine($p[$i], $p[$i + 1]); + $this->_out('S'); + $this->_outPoint($p[$i], $p[$i + 1]); + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + $this->_out($op); + } + } + if ($draw) { + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + } + + /** + * Draws a regular polygon. + * @param $x0 (float) Abscissa of center point. + * @param $y0 (float) Ordinate of center point. + * @param $r: (float) Radius of inscribed circle. + * @param $ns (integer) Number of sides. + * @param $angle (float) Angle oriented (anti-clockwise). Default value: 0. + * @param $draw_circle (boolean) Draw inscribed circle or not. Default value: false. + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of polygon sides. Array with keys among the following: + * <ul> + * <li>all: Line style of all sides. Array like for SetLineStyle().</li> + * <li>0 to ($ns - 1): Line style of each side. Array like for SetLineStyle().</li> + * </ul> + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param $circle_style (string) Style of rendering of inscribed circle (if draws). Possible values are: + * <ul> + * <li>D or empty string: Draw (default).</li> + * <li>F: Fill.</li> + * <li>DF or FD: Draw and fill.</li> + * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li> + * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li> + * </ul> + * @param $circle_outLine_style (array) Line style of inscribed circle (if draws). Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $circle_fill_color (array) Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @public + * @since 2.1.000 (2008-01-08) + */ + public function RegularPolygon($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if (3 > $ns) { + $ns = 3; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p = array(); + for ($i = 0; $i < $ns; ++$i) { + $a = $angle + ($i * 360 / $ns); + $a_rad = deg2rad((float) $a); + $p[] = $x0 + ($r * sin($a_rad)); + $p[] = $y0 + ($r * cos($a_rad)); + } + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a star polygon + * @param $x0 (float) Abscissa of center point. + * @param $y0 (float) Ordinate of center point. + * @param $r (float) Radius of inscribed circle. + * @param $nv (integer) Number of vertices. + * @param $ng (integer) Number of gap (if ($ng % $nv = 1) then is a regular polygon). + * @param $angle: (float) Angle oriented (anti-clockwise). Default value: 0. + * @param $draw_circle: (boolean) Draw inscribed circle or not. Default value is false. + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $line_style (array) Line style of polygon sides. Array with keys among the following: + * <ul> + * <li>all: Line style of all sides. Array like for + * SetLineStyle().</li> + * <li>0 to (n - 1): Line style of each side. Array like for SetLineStyle().</li> + * </ul> + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param $circle_style (string) Style of rendering of inscribed circle (if draws). Possible values are: + * <ul> + * <li>D or empty string: Draw (default).</li> + * <li>F: Fill.</li> + * <li>DF or FD: Draw and fill.</li> + * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li> + * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li> + * </ul> + * @param $circle_outLine_style (array) Line style of inscribed circle (if draws). Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $circle_fill_color (array) Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @public + * @since 2.1.000 (2008-01-08) + */ + public function StarPolygon($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if ($nv < 2) { + $nv = 2; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p2 = array(); + $visited = array(); + for ($i = 0; $i < $nv; ++$i) { + $a = $angle + ($i * 360 / $nv); + $a_rad = deg2rad((float) $a); + $p2[] = $x0 + ($r * sin($a_rad)); + $p2[] = $y0 + ($r * cos($a_rad)); + $visited[] = false; + } + $p = array(); + $i = 0; + do { + $p[] = $p2[$i * 2]; + $p[] = $p2[($i * 2) + 1]; + $visited[$i] = true; + $i += $ng; + $i %= $nv; + } while (!$visited[$i]); + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param $x (float) Abscissa of upper-left corner. + * @param $y (float) Ordinate of upper-left corner. + * @param $w (float) Width. + * @param $h (float) Height. + * @param $r (float) the radius of the circle used to round off the corners of the rectangle. + * @param $round_corner (string) Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top right, bottom right, bottom left and top left. Default value: all rounded corner ("1111"). + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $border_style (array) Border style of rectangle. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @since 2.1.000 (2008-01-08) + */ + public function RoundedRect($x, $y, $w, $h, $r, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + $this->RoundedRectXY($x, $y, $w, $h, $r, $r, $round_corner, $style, $border_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param $x (float) Abscissa of upper-left corner. + * @param $y (float) Ordinate of upper-left corner. + * @param $w (float) Width. + * @param $h (float) Height. + * @param $rx (float) the x-axis radius of the ellipse used to round off the corners of the rectangle. + * @param $ry (float) the y-axis radius of the ellipse used to round off the corners of the rectangle. + * @param $round_corner (string) Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top right, bottom right, bottom left and top left. Default value: all rounded corner ("1111"). + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $border_style (array) Border style of rectangle. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param $fill_color (array) Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @since 4.9.019 (2010-04-22) + */ + public function RoundedRectXY($x, $y, $w, $h, $rx, $ry, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (($round_corner == '0000') OR (($rx == $ry) AND ($rx == 0))) { + // Not rounded + $this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color); + return; + } + // Rounded + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->SetFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $border_style = array(); + } + if ($border_style) { + $this->SetLineStyle($border_style); + } + $MyArc = 4 / 3 * (sqrt(2) - 1); + $this->_outPoint($x + $rx, $y); + $xc = $x + $w - $rx; + $yc = $y + $ry; + $this->_outLine($xc, $y); + if ($round_corner[0]) { + $this->_outCurve($xc + ($rx * $MyArc), $yc - $ry, $xc + $rx, $yc - ($ry * $MyArc), $xc + $rx, $yc); + } else { + $this->_outLine($x + $w, $y); + } + $xc = $x + $w - $rx; + $yc = $y + $h - $ry; + $this->_outLine($x + $w, $yc); + if ($round_corner[1]) { + $this->_outCurve($xc + $rx, $yc + ($ry * $MyArc), $xc + ($rx * $MyArc), $yc + $ry, $xc, $yc + $ry); + } else { + $this->_outLine($x + $w, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $h - $ry; + $this->_outLine($xc, $y + $h); + if ($round_corner[2]) { + $this->_outCurve($xc - ($rx * $MyArc), $yc + $ry, $xc - $rx, $yc + ($ry * $MyArc), $xc - $rx, $yc); + } else { + $this->_outLine($x, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $ry; + $this->_outLine($x, $yc); + if ($round_corner[3]) { + $this->_outCurve($xc - $rx, $yc - ($ry * $MyArc), $xc - ($rx * $MyArc), $yc - $ry, $xc, $yc - $ry); + } else { + $this->_outLine($x, $y); + $this->_outLine($x + $rx, $y); + } + $this->_out($op); + } + + /** + * Draws a grahic arrow. + * @param $x0 (float) Abscissa of first point. + * @param $y0 (float) Ordinate of first point. + * @param $x1 (float) Abscissa of second point. + * @param $y1 (float) Ordinate of second point. + * @param $head_style (int) (0 = draw only arrowhead arms, 1 = draw closed arrowhead, but no fill, 2 = closed and filled arrowhead, 3 = filled arrowhead) + * @param $arm_size (float) length of arrowhead arms + * @param $arm_angle (int) angle between an arm and the shaft + * @author Piotr Galecki, Nicola Asuni, Andy Meier + * @since 4.6.018 (2009-07-10) + */ + public function Arrow($x0, $y0, $x1, $y1, $head_style=0, $arm_size=5, $arm_angle=15) { + // getting arrow direction angle + // 0 deg angle is when both arms go along X axis. angle grows clockwise. + $dir_angle = atan2(($y0 - $y1), ($x0 - $x1)); + if ($dir_angle < 0) { + $dir_angle += (2 * M_PI); + } + $arm_angle = deg2rad($arm_angle); + $sx1 = $x1; + $sy1 = $y1; + if ($head_style > 0) { + // calculate the stopping point for the arrow shaft + $sx1 = $x1 + (($arm_size - $this->LineWidth) * cos($dir_angle)); + $sy1 = $y1 + (($arm_size - $this->LineWidth) * sin($dir_angle)); + } + // main arrow line / shaft + $this->Line($x0, $y0, $sx1, $sy1); + // left arrowhead arm tip + $x2L = $x1 + ($arm_size * cos($dir_angle + $arm_angle)); + $y2L = $y1 + ($arm_size * sin($dir_angle + $arm_angle)); + // right arrowhead arm tip + $x2R = $x1 + ($arm_size * cos($dir_angle - $arm_angle)); + $y2R = $y1 + ($arm_size * sin($dir_angle - $arm_angle)); + $mode = 'D'; + $style = array(); + switch ($head_style) { + case 0: { + // draw only arrowhead arms + $mode = 'D'; + $style = array(1, 1, 0); + break; + } + case 1: { + // draw closed arrowhead, but no fill + $mode = 'D'; + break; + } + case 2: { + // closed and filled arrowhead + $mode = 'DF'; + break; + } + case 3: { + // filled arrowhead + $mode = 'F'; + break; + } + } + $this->Polygon(array($x2L, $y2L, $x1, $y1, $x2R, $y2R), $mode, $style, array()); + } + + // END GRAPHIC FUNCTIONS SECTION ----------------------- + + /** + * Add a Named Destination. + * NOTE: destination names are unique, so only last entry will be saved. + * @param $name (string) Destination name. + * @param $y (float) Y position in user units of the destiantion on the selected page (default = -1 = current position; 0 = page start;). + * @param $page (int|string) Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @param $x (float) X position in user units of the destiantion on the selected page (default = -1 = current position;). + * @return (string) Stripped named destination identifier or false in case of error. + * @public + * @author Christian Deligant, Nicola Asuni + * @since 5.9.097 (2011-06-23) + */ + public function setDestination($name, $y=-1, $page='', $x=-1) { + // remove unsupported characters + $name = TCPDF_STATIC::encodeNameObject($name); + if (TCPDF_STATIC::empty_string($name)) { + return false; + } + if ($y == -1) { + $y = $this->GetY(); + } elseif ($y < 0) { + $y = 0; + } elseif ($y > $this->h) { + $y = $this->h; + } + if ($x == -1) { + $x = $this->GetX(); + } elseif ($x < 0) { + $x = 0; + } elseif ($x > $this->w) { + $x = $this->w; + } + $fixed = false; + if (!empty($page) AND ($page[0] == '*')) { + $page = intval(substr($page, 1)); + // this page number will not be changed when moving/add/deleting pages + $fixed = true; + } + if (empty($page)) { + $page = $this->PageNo(); + if (empty($page)) { + return; + } + } + $this->dests[$name] = array('x' => $x, 'y' => $y, 'p' => $page, 'f' => $fixed); + return $name; + } + + /** + * Return the Named Destination array. + * @return (array) Named Destination array. + * @public + * @author Nicola Asuni + * @since 5.9.097 (2011-06-23) + */ + public function getDestination() { + return $this->dests; + } + + /** + * Insert Named Destinations. + * @protected + * @author Johannes G\FCntert, Nicola Asuni + * @since 5.9.098 (2011-06-23) + */ + protected function _putdests() { + if (empty($this->dests)) { + return; + } + $this->n_dests = $this->_newobj(); + $out = ' <<'; + foreach($this->dests as $name => $o) { + $out .= ' /'.$name.' '.sprintf('[%u 0 R /XYZ %F %F null]', $this->page_obj_id[($o['p'])], ($o['x'] * $this->k), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Adds a bookmark - alias for Bookmark(). + * @param $txt (string) Bookmark description. + * @param $level (int) Bookmark level (minimum value is 0). + * @param $y (float) Y position in user units of the bookmark on the selected page (default = -1 = current position; 0 = page start;). + * @param $page (int|string) Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @param $style (string) Font style: B = Bold, I = Italic, BI = Bold + Italic. + * @param $color (array) RGB color array (values from 0 to 255). + * @param $x (float) X position in user units of the bookmark on the selected page (default = -1 = current position;). + * @param $link (mixed) URL, or numerical link ID, or named destination (# character followed by the destination name), or embedded file (* character followed by the file name). + * @public + */ + public function setBookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0), $x=-1, $link='') { + $this->Bookmark($txt, $level, $y, $page, $style, $color, $x, $link); + } + + /** + * Adds a bookmark. + * @param $txt (string) Bookmark description. + * @param $level (int) Bookmark level (minimum value is 0). + * @param $y (float) Y position in user units of the bookmark on the selected page (default = -1 = current position; 0 = page start;). + * @param $page (int|string) Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @param $style (string) Font style: B = Bold, I = Italic, BI = Bold + Italic. + * @param $color (array) RGB color array (values from 0 to 255). + * @param $x (float) X position in user units of the bookmark on the selected page (default = -1 = current position;). + * @param $link (mixed) URL, or numerical link ID, or named destination (# character followed by the destination name), or embedded file (* character followed by the file name). + * @public + * @since 2.1.002 (2008-02-12) + */ + public function Bookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0), $x=-1, $link='') { + if ($level < 0) { + $level = 0; + } + if (isset($this->outlines[0])) { + $lastoutline = end($this->outlines); + $maxlevel = $lastoutline['l'] + 1; + } else { + $maxlevel = 0; + } + if ($level > $maxlevel) { + $level = $maxlevel; + } + if ($y == -1) { + $y = $this->GetY(); + } elseif ($y < 0) { + $y = 0; + } elseif ($y > $this->h) { + $y = $this->h; + } + if ($x == -1) { + $x = $this->GetX(); + } elseif ($x < 0) { + $x = 0; + } elseif ($x > $this->w) { + $x = $this->w; + } + $fixed = false; + if (!empty($page) AND ($page[0] == '*')) { + $page = intval(substr($page, 1)); + // this page number will not be changed when moving/add/deleting pages + $fixed = true; + } + if (empty($page)) { + $page = $this->PageNo(); + if (empty($page)) { + return; + } + } + $this->outlines[] = array('t' => $txt, 'l' => $level, 'x' => $x, 'y' => $y, 'p' => $page, 'f' => $fixed, 's' => strtoupper($style), 'c' => $color, 'u' => $link); + } + + /** + * Sort bookmarks for page and key. + * @protected + * @since 5.9.119 (2011-09-19) + */ + protected function sortBookmarks() { + // get sorting columns + $outline_p = array(); + $outline_y = array(); + foreach ($this->outlines as $key => $row) { + $outline_p[$key] = $row['p']; + $outline_k[$key] = $key; + } + // sort outlines by page and original position + array_multisort($outline_p, SORT_NUMERIC, SORT_ASC, $outline_k, SORT_NUMERIC, SORT_ASC, $this->outlines); + } + + /** + * Create a bookmark PDF string. + * @protected + * @author Olivier Plathey, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putbookmarks() { + $nb = count($this->outlines); + if ($nb == 0) { + return; + } + // sort bookmarks + $this->sortBookmarks(); + $lru = array(); + $level = 0; + foreach ($this->outlines as $i => $o) { + if ($o['l'] > 0) { + $parent = $lru[($o['l'] - 1)]; + //Set parent and last pointers + $this->outlines[$i]['parent'] = $parent; + $this->outlines[$parent]['last'] = $i; + if ($o['l'] > $level) { + //Level increasing: set first pointer + $this->outlines[$parent]['first'] = $i; + } + } else { + $this->outlines[$i]['parent'] = $nb; + } + if (($o['l'] <= $level) AND ($i > 0)) { + //Set prev and next pointers + $prev = $lru[$o['l']]; + $this->outlines[$prev]['next'] = $i; + $this->outlines[$i]['prev'] = $prev; + } + $lru[$o['l']] = $i; + $level = $o['l']; + } + //Outline items + $n = $this->n + 1; + $nltags = '/<br[\s]?\/>|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si'; + foreach ($this->outlines as $i => $o) { + $oid = $this->_newobj(); + // covert HTML title to string + $title = preg_replace($nltags, "\n", $o['t']); + $title = preg_replace("/[\r]+/si", '', $title); + $title = preg_replace("/[\n]+/si", "\n", $title); + $title = strip_tags($title); + $title = $this->stringTrim($title); + $out = '<</Title '.$this->_textstring($title, $oid); + $out .= ' /Parent '.($n + $o['parent']).' 0 R'; + if (isset($o['prev'])) { + $out .= ' /Prev '.($n + $o['prev']).' 0 R'; + } + if (isset($o['next'])) { + $out .= ' /Next '.($n + $o['next']).' 0 R'; + } + if (isset($o['first'])) { + $out .= ' /First '.($n + $o['first']).' 0 R'; + } + if (isset($o['last'])) { + $out .= ' /Last '.($n + $o['last']).' 0 R'; + } + if (isset($o['u']) AND !empty($o['u'])) { + // link + if (is_string($o['u'])) { + if ($o['u'][0] == '#') { + // internal destination + $out .= ' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($o['u'], 1)); + } elseif ($o['u'][0] == '%') { + // embedded PDF file + $filename = basename(substr($o['u'], 1)); + $out .= ' /A <</S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P '.($o['p'] - 1).' /A '.$this->embeddedfiles[$filename]['a'].' >> >>'; + } elseif ($o['u'][0] == '*') { + // embedded generic file + $filename = basename(substr($o['u'], 1)); + $jsa = 'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});'; + $out .= ' /A <</S /JavaScript /JS '.$this->_textstring($jsa, $oid).'>>'; + } else { + // external URI link + $out .= ' /A <</S /URI /URI '.$this->_datastring($this->unhtmlentities($o['u']), $oid).'>>'; + } + } elseif (isset($this->links[$o['u']])) { + // internal link ID + $l = $this->links[$o['u']]; + if (isset($this->page_obj_id[($l['p'])])) { + $out .= sprintf(' /Dest [%u 0 R /XYZ 0 %F null]', $this->page_obj_id[($l['p'])], ($this->pagedim[$l['p']]['h'] - ($l['y'] * $this->k))); + } + } + } elseif (isset($this->page_obj_id[($o['p'])])) { + // link to a page + $out .= ' '.sprintf('/Dest [%u 0 R /XYZ %F %F null]', $this->page_obj_id[($o['p'])], ($o['x'] * $this->k), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); + } + // set font style + $style = 0; + if (!empty($o['s'])) { + // bold + if (strpos($o['s'], 'B') !== false) { + $style |= 2; + } + // oblique + if (strpos($o['s'], 'I') !== false) { + $style |= 1; + } + } + $out .= sprintf(' /F %d', $style); + // set bookmark color + if (isset($o['c']) AND is_array($o['c']) AND (count($o['c']) == 3)) { + $color = array_values($o['c']); + $out .= sprintf(' /C [%F %F %F]', ($color[0] / 255), ($color[1] / 255), ($color[2] / 255)); + } else { + // black + $out .= ' /C [0.0 0.0 0.0]'; + } + $out .= ' /Count 0'; // normally closed item + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + //Outline root + $this->OutlineRoot = $this->_newobj(); + $this->_out('<< /Type /Outlines /First '.$n.' 0 R /Last '.($n + $lru[0]).' 0 R >>'."\n".'endobj'); + } + + // --- JAVASCRIPT ------------------------------------------------------ + + /** + * Adds a javascript + * @param $script (string) Javascript code + * @public + * @author Johannes G\FCntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + public function IncludeJS($script) { + $this->javascript .= $script; + } + + /** + * Adds a javascript object and return object ID + * @param $script (string) Javascript code + * @param $onload (boolean) if true executes this object when opening the document + * @return int internal object ID + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function addJavascriptObject($script, $onload=false) { + if ($this->pdfa_mode) { + // javascript is not allowed in PDF/A mode + return false; + } + ++$this->n; + $this->js_objects[$this->n] = array('n' => $this->n, 'js' => $script, 'onload' => $onload); + return $this->n; + } + + /** + * Create a javascript PDF string. + * @protected + * @author Johannes G\FCntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putjavascript() { + if ($this->pdfa_mode OR (empty($this->javascript) AND empty($this->js_objects))) { + return; + } + if (strpos($this->javascript, 'this.addField') > 0) { + if (!$this->ur['enabled']) { + //$this->setUserRights(); + } + // the following two lines are used to avoid form fields duplication after saving + // The addField method only works when releasing user rights (UR3) + $jsa = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%F,%F,%F,%F]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1); + $jsb = "getField('tcpdfdocsaved').value='saved';"; + $this->javascript = $jsa."\n".$this->javascript."\n".$jsb; + } + // name tree for javascript + $this->n_js = '<< /Names ['; + if (!empty($this->javascript)) { + $this->n_js .= ' (EmbeddedJS) '.($this->n + 1).' 0 R'; + } + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + if ($val['onload']) { + $this->n_js .= ' (JS'.$key.') '.$key.' 0 R'; + } + } + } + $this->n_js .= ' ] >>'; + // default Javascript object + if (!empty($this->javascript)) { + $obj_id = $this->_newobj(); + $out = '<< /S /JavaScript'; + $out .= ' /JS '.$this->_textstring($this->javascript, $obj_id); + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + // additional Javascript objects + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + $out = $this->_getobj($key)."\n".' << /S /JavaScript /JS '.$this->_textstring($val['js'], $key).' >>'."\n".'endobj'; + $this->_out($out); + } + } + } + + /** + * Adds a javascript form field. + * @param $type (string) field type + * @param $name (string) field name + * @param $x (int) horizontal position + * @param $y (int) vertical position + * @param $w (int) width + * @param $h (int) height + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @protected + * @author Denis Van Nuffelen, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _addfield($type, $name, $x, $y, $w, $h, $prop) { + if ($this->rtl) { + $x = $x - $w; + } + // the followind avoid fields duplication after saving the document + $this->javascript .= "if (getField('tcpdfdocsaved').value != 'saved') {"; + $k = $this->k; + $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%u,[%F,%F,%F,%F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n"; + $this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n"; + while (list($key, $val) = each($prop)) { + if (strcmp(substr($key, -5), 'Color') == 0) { + $val = TCPDF_COLORS::_JScolor($val); + } else { + $val = "'".$val."'"; + } + $this->javascript .= 'f'.$name.'.'.$key.'='.$val.";\n"; + } + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + $this->javascript .= '}'; + } + + // --- FORM FIELDS ----------------------------------------------------- + + + + /** + * Set default properties for form fields. + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function setFormDefaultProp($prop=array()) { + $this->default_form_prop = $prop; + } + + /** + * Return the default properties for form fields. + * @return array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function getFormDefaultProp() { + return $this->default_form_prop; + } + + /** + * Creates a text field + * @param $name (string) field name + * @param $w (float) Width of the rectangle + * @param $h (float) Height of the rectangle + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param $opt (array) annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $js (boolean) if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function TextField($name, $w, $h, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('text', $name, $x, $y, $w, $h, $prop); + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set default appearance stream + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $text = ''; + if (isset($prop['value']) AND !empty($prop['value'])) { + $text = $prop['value']; + } elseif (isset($opt['v']) AND !empty($opt['v'])) { + $text = $opt['v']; + } + $tmpid = $this->startTemplate($w, $h, false); + $align = ''; + if (isset($popt['q'])) { + switch ($popt['q']) { + case 0: { + $align = 'L'; + break; + } + case 1: { + $align = 'C'; + break; + } + case 2: { + $align = 'R'; + break; + } + default: { + $align = ''; + break; + } + } + } + $this->MultiCell($w, $h, $text, 0, $align, false, 0, 0, 0, true, 0, false, true, 0, 'T', false); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // merge options + $opt = array_merge($popt, $opt); + // remove some conflicting options + unset($opt['bs']); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Tx'; + $opt['t'] = $name; + // Additional annotation's parameters (check _putannotsobj() method): + //$opt['f'] + //$opt['as'] + //$opt['bs'] + //$opt['be'] + //$opt['c'] + //$opt['border'] + //$opt['h'] + //$opt['mk']; + //$opt['mk']['r'] + //$opt['mk']['bc']; + //$opt['mk']['bg']; + unset($opt['mk']['ca']); + unset($opt['mk']['rc']); + unset($opt['mk']['ac']); + unset($opt['mk']['i']); + unset($opt['mk']['ri']); + unset($opt['mk']['ix']); + unset($opt['mk']['if']); + //$opt['mk']['if']['sw']; + //$opt['mk']['if']['s']; + //$opt['mk']['if']['a']; + //$opt['mk']['if']['fb']; + unset($opt['mk']['tp']); + //$opt['tu'] + //$opt['tm'] + //$opt['ff'] + //$opt['v'] + //$opt['dv'] + //$opt['a'] + //$opt['aa'] + //$opt['q'] + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a RadioButton field. + * @param $name (string) Field name. + * @param $w (int) Width of the radio button. + * @param $prop (array) Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param $opt (array) Annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param $onvalue (string) Value to be returned if selected. + * @param $checked (boolean) Define the initial state. + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $js (boolean) If true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function RadioButton($name, $w, $prop=array(), $opt=array(), $onvalue='On', $checked=false, $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($w, $x, $y); + if ($js) { + $this->_addfield('radiobutton', $name, $x, $y, $w, $w, $prop); + return; + } + if (TCPDF_STATIC::empty_string($onvalue)) { + $onvalue = 'On'; + } + if ($checked) { + $defval = $onvalue; + } else { + $defval = 'Off'; + } + // set font + $font = 'zapfdingbats'; + if ($this->pdfa_mode) { + // all fonts must be embedded + $font = 'pdfa'.$font; + } + $this->AddFont($font); + $tmpfont = $this->getFontBuffer($font); + // set data for parent group + if (!isset($this->radiobutton_groups[$this->page])) { + $this->radiobutton_groups[$this->page] = array(); + } + if (!isset($this->radiobutton_groups[$this->page][$name])) { + $this->radiobutton_groups[$this->page][$name] = array(); + ++$this->n; + $this->radiobutton_groups[$this->page][$name]['n'] = $this->n; + $this->radio_groups[] = $this->n; + } + $kid = ($this->n + 1); + // save object ID to be added on Kids entry on parent object + $this->radiobutton_groups[$this->page][$name][] = array('kid' => $kid, 'def' => $defval); + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['NoToggleToOff'] = 'true'; + $prop['Radio'] = 'true'; + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default options + $this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $fx = ((($w - $this->getAbsFontMeasure($tmpfont['cw'][108])) / 2) * $this->k); + $fy = (($w - ((($tmpfont['desc']['Ascent'] - $tmpfont['desc']['Descent']) * $this->FontSizePt / 1000) / $this->k)) * $this->k); + $popt['ap']['n'][$onvalue] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(108).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + $popt['ap']['n']['Off'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(109).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $popt['mk']['ca'] = '(l)'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + if ($checked) { + $opt['v'] = array('/'.$onvalue); + $opt['as'] = $onvalue; + } else { + $opt['as'] = 'Off'; + } + // store readonly flag + if (!isset($this->radiobutton_groups[$this->page][$name]['#readonly#'])) { + $this->radiobutton_groups[$this->page][$name]['#readonly#'] = false; + } + $this->radiobutton_groups[$this->page][$name]['#readonly#'] |= ($opt['f'] & 64); + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a List-box field + * @param $name (string) field name + * @param $w (int) width + * @param $h (int) height + * @param $values (array) array containing the list of values. + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param $opt (array) annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $js (boolean) if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ListBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('listbox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + if (is_array($value)) { + $s .= ',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']'; + } else { + $s .= ',[\''.addslashes($value).'\',\''.addslashes($value).'\']'; + } + } + $this->javascript .= 'f'.$name.'.setItems('.substr($s, 1).');'."\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default values + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $text = ''; + foreach($values as $item) { + if (is_array($item)) { + $text .= $item[1]."\n"; + } else { + $text .= $item."\n"; + } + } + $tmpid = $this->startTemplate($w, $h, false); + $this->MultiCell($w, $h, $text, 0, '', false, 0, 0, 0, true, 0, false, true, 0, 'T', false); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + unset($opt['mk']['ca']); + unset($opt['mk']['rc']); + unset($opt['mk']['ac']); + unset($opt['mk']['i']); + unset($opt['mk']['ri']); + unset($opt['mk']['ix']); + unset($opt['mk']['if']); + unset($opt['mk']['tp']); + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a Combo-box field + * @param $name (string) field name + * @param $w (int) width + * @param $h (int) height + * @param $values (array) array containing the list of values. + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param $opt (array) annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $js (boolean) if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ComboBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('combobox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + if (is_array($value)) { + $s .= ',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']'; + } else { + $s .= ',[\''.addslashes($value).'\',\''.addslashes($value).'\']'; + } + } + $this->javascript .= 'f'.$name.'.setItems('.substr($s, 1).');'."\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Combo'] = true; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default options + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $text = ''; + foreach($values as $item) { + if (is_array($item)) { + $text .= $item[1]."\n"; + } else { + $text .= $item."\n"; + } + } + $tmpid = $this->startTemplate($w, $h, false); + $this->MultiCell($w, $h, $text, 0, '', false, 0, 0, 0, true, 0, false, true, 0, 'T', false); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + unset($opt['mk']['ca']); + unset($opt['mk']['rc']); + unset($opt['mk']['ac']); + unset($opt['mk']['i']); + unset($opt['mk']['ri']); + unset($opt['mk']['ix']); + unset($opt['mk']['if']); + unset($opt['mk']['tp']); + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a CheckBox field + * @param $name (string) field name + * @param $w (int) width + * @param $checked (boolean) define the initial state. + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param $opt (array) annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param $onvalue (string) value to be returned if selected. + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $js (boolean) if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function CheckBox($name, $w, $checked=false, $prop=array(), $opt=array(), $onvalue='Yes', $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($w, $x, $y); + if ($js) { + $this->_addfield('checkbox', $name, $x, $y, $w, $w, $prop); + return; + } + if (!isset($prop['value'])) { + $prop['value'] = array('Yes'); + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default options + $font = 'zapfdingbats'; + if ($this->pdfa_mode) { + // all fonts must be embedded + $font = 'pdfa'.$font; + } + $this->AddFont($font); + $tmpfont = $this->getFontBuffer($font); + $this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $fx = ((($w - $this->getAbsFontMeasure($tmpfont['cw'][110])) / 2) * $this->k); + $fy = (($w - ((($tmpfont['desc']['Ascent'] - $tmpfont['desc']['Descent']) * $this->FontSizePt / 1000) / $this->k)) * $this->k); + $popt['ap']['n']['Yes'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(110).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + $popt['ap']['n']['Off'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(111).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $name; + if (TCPDF_STATIC::empty_string($onvalue)) { + $onvalue = 'Yes'; + } + $opt['opt'] = array($onvalue); + if ($checked) { + $opt['v'] = array('/Yes'); + $opt['as'] = 'Yes'; + } else { + $opt['v'] = array('/Off'); + $opt['as'] = 'Off'; + } + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a button field + * @param $name (string) field name + * @param $w (int) width + * @param $h (int) height + * @param $caption (string) caption. + * @param $action (mixed) action triggered by pressing the button. Use a string to specify a javascript action. Use an array to specify a form action options as on section 12.7.5 of PDF32000_2008. + * @param $prop (array) javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param $opt (array) annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param $x (float) Abscissa of the upper-left corner of the rectangle + * @param $y (float) Ordinate of the upper-left corner of the rectangle + * @param $js (boolean) if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function Button($name, $w, $h, $caption, $action, $prop=array(), $opt=array(), $x='', $y='', $js=false) { + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop); + $this->javascript .= 'f'.$name.".buttonSetCaption('".addslashes($caption)."');\n"; + $this->javascript .= 'f'.$name.".setAction('MouseUp','".addslashes($action)."');\n"; + $this->javascript .= 'f'.$name.".highlight='push';\n"; + $this->javascript .= 'f'.$name.".print=false;\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Pushbutton'] = 'true'; + $prop['highlight'] = 'push'; + $prop['display'] = 'display.noPrint'; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $tmpid = $this->startTemplate($w, $h, false); + $bw = (2 / $this->k); // border width + $border = array( + 'L' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(231)), + 'R' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(51)), + 'T' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(231)), + 'B' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(51))); + $this->SetFillColor(204); + $this->Cell($w, $h, $caption, $border, 0, 'C', true, '', 1, false, 'T', 'M'); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // set additional default options + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $ann_obj_id = ($this->n + 1); + if (!empty($action) AND !is_array($action)) { + $ann_obj_id = ($this->n + 2); + } + $popt['mk']['ca'] = $this->_textstring($caption, $ann_obj_id); + $popt['mk']['rc'] = $this->_textstring($caption, $ann_obj_id); + $popt['mk']['ac'] = $this->_textstring($caption, $ann_obj_id); + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $caption; + $opt['v'] = $name; + if (!empty($action)) { + if (is_array($action)) { + // form action options as on section 12.7.5 of PDF32000_2008. + $opt['aa'] = '/D <<'; + $bmode = array('SubmitForm', 'ResetForm', 'ImportData'); + foreach ($action AS $key => $val) { + if (($key == 'S') AND in_array($val, $bmode)) { + $opt['aa'] .= ' /S /'.$val; + } elseif (($key == 'F') AND (!empty($val))) { + $opt['aa'] .= ' /F '.$this->_datastring($val, $ann_obj_id); + } elseif (($key == 'Fields') AND is_array($val) AND !empty($val)) { + $opt['aa'] .= ' /Fields ['; + foreach ($val AS $field) { + $opt['aa'] .= ' '.$this->_textstring($field, $ann_obj_id); + } + $opt['aa'] .= ']'; + } elseif (($key == 'Flags')) { + $ff = 0; + if (is_array($val)) { + foreach ($val AS $flag) { + switch ($flag) { + case 'Include/Exclude': { + $ff += 1 << 0; + break; + } + case 'IncludeNoValueFields': { + $ff += 1 << 1; + break; + } + case 'ExportFormat': { + $ff += 1 << 2; + break; + } + case 'GetMethod': { + $ff += 1 << 3; + break; + } + case 'SubmitCoordinates': { + $ff += 1 << 4; + break; + } + case 'XFDF': { + $ff += 1 << 5; + break; + } + case 'IncludeAppendSaves': { + $ff += 1 << 6; + break; + } + case 'IncludeAnnotations': { + $ff += 1 << 7; + break; + } + case 'SubmitPDF': { + $ff += 1 << 8; + break; + } + case 'CanonicalFormat': { + $ff += 1 << 9; + break; + } + case 'ExclNonUserAnnots': { + $ff += 1 << 10; + break; + } + case 'ExclFKey': { + $ff += 1 << 11; + break; + } + case 'EmbedForm': { + $ff += 1 << 13; + break; + } + } + } + } else { + $ff = intval($val); + } + $opt['aa'] .= ' /Flags '.$ff; + } + } + $opt['aa'] .= ' >>'; + } else { + // Javascript action or raw action command + $js_obj_id = $this->addJavascriptObject($action); + $opt['aa'] = '/D '.$js_obj_id.' 0 R'; + } + } + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + // --- END FORMS FIELDS ------------------------------------------------ + + /** + * Add certification signature (DocMDP or UR3) + * You can set only one signature type + * @protected + * @author Nicola Asuni + * @since 4.6.008 (2009-05-07) + */ + protected function _putsignature() { + if ((!$this->sign) OR (!isset($this->signature_data['cert_type']))) { + return; + } + $sigobjid = ($this->sig_obj_id + 1); + $out = $this->_getobj($sigobjid)."\n"; + $out .= '<< /Type /Sig'; + $out .= ' /Filter /Adobe.PPKLite'; + $out .= ' /SubFilter /adbe.pkcs7.detached'; + $out .= ' '.TCPDF_STATIC::$byterange_string; + $out .= ' /Contents<'.str_repeat('0', $this->signature_max_length).'>'; + if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { + $out .= ' /Reference ['; // array of signature reference dictionaries + $out .= ' << /Type /SigRef'; + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /TransformMethod /DocMDP'; + $out .= ' /TransformParams <<'; + $out .= ' /Type /TransformParams'; + $out .= ' /P '.$this->signature_data['cert_type']; + $out .= ' /V /1.2'; + } else { + $out .= ' /TransformMethod /UR3'; + $out .= ' /TransformParams <<'; + $out .= ' /Type /TransformParams'; + $out .= ' /V /2.2'; + if (!TCPDF_STATIC::empty_string($this->ur['document'])) { + $out .= ' /Document['.$this->ur['document'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['form'])) { + $out .= ' /Form['.$this->ur['form'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['signature'])) { + $out .= ' /Signature['.$this->ur['signature'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['annots'])) { + $out .= ' /Annots['.$this->ur['annots'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['ef'])) { + $out .= ' /EF['.$this->ur['ef'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['formex'])) { + $out .= ' /FormEX['.$this->ur['formex'].']'; + } + } + $out .= ' >>'; // close TransformParams + // optional digest data (values must be calculated and replaced later) + //$out .= ' /Data ********** 0 R'; + //$out .= ' /DigestMethod/MD5'; + //$out .= ' /DigestLocation[********** 34]'; + //$out .= ' /DigestValue<********************************>'; + $out .= ' >>'; + $out .= ' ]'; // end of reference + } + if (isset($this->signature_data['info']['Name']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Name'])) { + $out .= ' /Name '.$this->_textstring($this->signature_data['info']['Name'], $sigobjid); + } + if (isset($this->signature_data['info']['Location']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Location'])) { + $out .= ' /Location '.$this->_textstring($this->signature_data['info']['Location'], $sigobjid); + } + if (isset($this->signature_data['info']['Reason']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Reason'])) { + $out .= ' /Reason '.$this->_textstring($this->signature_data['info']['Reason'], $sigobjid); + } + if (isset($this->signature_data['info']['ContactInfo']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['ContactInfo'])) { + $out .= ' /ContactInfo '.$this->_textstring($this->signature_data['info']['ContactInfo'], $sigobjid); + } + $out .= ' /M '.$this->_datestring($sigobjid, $this->doc_modification_timestamp); + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Set User's Rights for PDF Reader + * WARNING: This is experimental and currently do not work. + * Check the PDF Reference 8.7.1 Transform Methods, + * Table 8.105 Entries in the UR transform parameters dictionary + * @param $enable (boolean) if true enable user's rights on PDF reader + * @param $document (string) Names specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data. + * @param $annots (string) Names specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations. + * @param $form (string) Names specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate + * @param $signature (string) Names specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field. + * @param $ef (string) Names specifying additional usage rights for named embedded files in the document. Valid names are /Create/Delete/Modify/Import, which permit the user to perform the named operation on named embedded files + Names specifying additional embedded-files-related usage rights for the document. + * @param $formex (string) Names specifying additional form-field-related usage rights. The only valid name is BarcodePlaintext, which permits text form field data to be encoded as a plaintext two-dimensional barcode. + * @public + * @author Nicola Asuni + * @since 2.9.000 (2008-03-26) + */ + public function setUserRights( + $enable=true, + $document='/FullSave', + $annots='/Create/Delete/Modify/Copy/Import/Export', + $form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate', + $signature='/Modify', + $ef='/Create/Delete/Modify/Import', + $formex='') { + $this->ur['enabled'] = $enable; + $this->ur['document'] = $document; + $this->ur['annots'] = $annots; + $this->ur['form'] = $form; + $this->ur['signature'] = $signature; + $this->ur['ef'] = $ef; + $this->ur['formex'] = $formex; + if (!$this->sign) { + $this->setSignature('', '', '', '', 0, array()); + } + } + + /** + * Enable document signature (requires the OpenSSL Library). + * The digital signature improve document authenticity and integrity and allows o enable extra features on Acrobat Reader. + * To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + * To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 + * To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes + * @param $signing_cert (mixed) signing certificate (string or filename prefixed with 'file://') + * @param $private_key (mixed) private key (string or filename prefixed with 'file://') + * @param $private_key_password (string) password + * @param $extracerts (string) specifies the name of a file containing a bunch of extra certificates to include in the signature which can for example be used to help the recipient to verify the certificate that you used. + * @param $cert_type (int) The access permissions granted for this document. Valid values shall be: 1 = No changes to the document shall be permitted; any change to the document shall invalidate the signature; 2 = Permitted changes shall be filling in forms, instantiating page templates, and signing; other changes shall invalidate the signature; 3 = Permitted changes shall be the same as for 2, as well as annotation creation, deletion, and modification; other changes shall invalidate the signature. + * @param $info (array) array of option information: Name, Location, Reason, ContactInfo. + * @param $approval (string) Enable approval signature eg. for PDF incremental update + * @public + * @author Nicola Asuni + * @since 4.6.005 (2009-04-24) + */ + public function setSignature($signing_cert='', $private_key='', $private_key_password='', $extracerts='', $cert_type=2, $info=array(), $approval='') { + // to create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + // to export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 + // to convert pfx certificate to pem: openssl + // OpenSSL> pkcs12 -in <cert.pfx> -out <cert.crt> -nodes + $this->sign = true; + ++$this->n; + $this->sig_obj_id = $this->n; // signature widget + ++$this->n; // signature object ($this->sig_obj_id + 1) + $this->signature_data = array(); + if (strlen($signing_cert) == 0) { + $this->Error('Please provide a certificate file and password!'); + } + if (strlen($private_key) == 0) { + $private_key = $signing_cert; + } + $this->signature_data['signcert'] = $signing_cert; + $this->signature_data['privkey'] = $private_key; + $this->signature_data['password'] = $private_key_password; + $this->signature_data['extracerts'] = $extracerts; + $this->signature_data['cert_type'] = $cert_type; + $this->signature_data['info'] = $info; + $this->signature_data['approval'] = $approval; + } + + /** + * Set the digital signature appearance (a cliccable rectangle area to get signature properties) + * @param $x (float) Abscissa of the upper-left corner. + * @param $y (float) Ordinate of the upper-left corner. + * @param $w (float) Width of the signature area. + * @param $h (float) Height of the signature area. + * @param $page (int) option page number (if < 0 the current page is used). + * @param $name (string) Name of the signature. + * @public + * @author Nicola Asuni + * @since 5.3.011 (2010-06-17) + */ + public function setSignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { + $this->signature_appearance = $this->getSignatureAppearanceArray($x, $y, $w, $h, $page, $name); + } + + /** + * Add an empty digital signature appearance (a cliccable rectangle area to get signature properties) + * @param $x (float) Abscissa of the upper-left corner. + * @param $y (float) Ordinate of the upper-left corner. + * @param $w (float) Width of the signature area. + * @param $h (float) Height of the signature area. + * @param $page (int) option page number (if < 0 the current page is used). + * @param $name (string) Name of the signature. + * @public + * @author Nicola Asuni + * @since 5.9.101 (2011-07-06) + */ + public function addEmptySignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { + ++$this->n; + $this->empty_signature_appearance[] = array('objid' => $this->n) + $this->getSignatureAppearanceArray($x, $y, $w, $h, $page, $name); + } + + /** + * Get the array that defines the signature appearance (page and rectangle coordinates). + * @param $x (float) Abscissa of the upper-left corner. + * @param $y (float) Ordinate of the upper-left corner. + * @param $w (float) Width of the signature area. + * @param $h (float) Height of the signature area. + * @param $page (int) option page number (if < 0 the current page is used). + * @param $name (string) Name of the signature. + * @return (array) Array defining page and rectangle coordinates of signature appearance. + * @protected + * @author Nicola Asuni + * @since 5.9.101 (2011-07-06) + */ + protected function getSignatureAppearanceArray($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { + $sigapp = array(); + if (($page < 1) OR ($page > $this->numpages)) { + $sigapp['page'] = $this->page; + } else { + $sigapp['page'] = intval($page); + } + if (empty($name)) { + $sigapp['name'] = 'Signature'; + } else { + $sigapp['name'] = $name; + } + $a = $x * $this->k; + $b = $this->pagedim[($sigapp['page'])]['h'] - (($y + $h) * $this->k); + $c = $w * $this->k; + $d = $h * $this->k; + $sigapp['rect'] = sprintf('%F %F %F %F', $a, $b, ($a + $c), ($b + $d)); + return $sigapp; + } + + /** + * Enable document timestamping (requires the OpenSSL Library). + * The trusted timestamping improve document security that means that no one should be able to change the document once it has been recorded. + * Use with digital signature only! + * @param $tsa_host (string) Time Stamping Authority (TSA) server (prefixed with 'https://') + * @param $tsa_username (string) Specifies the username for TSA authorization (optional) OR specifies the TSA authorization PEM file (see: example_66.php, optional) + * @param $tsa_password (string) Specifies the password for TSA authorization (optional) + * @param $tsa_cert (string) Specifies the location of TSA certificate for authorization (optional for cURL) + * @public + * @author Richard Stockinger + * @since 6.0.090 (2014-06-16) + */ + public function setTimeStamp($tsa_host='', $tsa_username='', $tsa_password='', $tsa_cert='') { + $this->tsa_data = array(); + if (!function_exists('curl_init')) { + $this->Error('Please enable cURL PHP extension!'); + } + if (strlen($tsa_host) == 0) { + $this->Error('Please specify the host of Time Stamping Authority (TSA)!'); + } + $this->tsa_data['tsa_host'] = $tsa_host; + if (is_file($tsa_username)) { + $this->tsa_data['tsa_auth'] = $tsa_username; + } else { + $this->tsa_data['tsa_username'] = $tsa_username; + } + $this->tsa_data['tsa_password'] = $tsa_password; + $this->tsa_data['tsa_cert'] = $tsa_cert; + $this->tsa_timestamp = true; + } + + /** + * NOT YET IMPLEMENTED + * Request TSA for a timestamp + * @param $signature (string) Digital signature as binary string + * @return (string) Timestamped digital signature + * @protected + * @author Richard Stockinger + * @since 6.0.090 (2014-06-16) + */ + protected function applyTSA($signature) { + if (!$this->tsa_timestamp) { + return $signature; + } + //@TODO: implement this feature + return $signature; + } + + /** + * Create a new page group. + * NOTE: call this function before calling AddPage() + * @param $page (int) starting group page (leave empty for next page). + * @public + * @since 3.0.000 (2008-03-27) + */ + public function startPageGroup($page='') { + if (empty($page)) { + $page = $this->page + 1; + } + $this->newpagegroup[$page] = sizeof($this->newpagegroup) + 1; + } + + /** + * Set the starting page number. + * @param $num (int) Starting page number. + * @since 5.9.093 (2011-06-16) + * @public + */ + public function setStartingPageNumber($num=1) { + $this->starting_page_number = max(0, intval($num)); + } + + /** + * Returns the string alias used right align page numbers. + * If the current font is unicode type, the returned string wil contain an additional open curly brace. + * @return string + * @since 5.9.099 (2011-06-27) + * @public + */ + public function getAliasRightShift() { + // calculate aproximatively the ratio between widths of aliases and replacements. + $ref = '{'.TCPDF_STATIC::$alias_right_shift.'}{'.TCPDF_STATIC::$alias_tot_pages.'}{'.TCPDF_STATIC::$alias_num_page.'}'; + $rep = str_repeat(' ', $this->GetNumChars($ref)); + $wrep = $this->GetStringWidth($rep); + if ($wrep > 0) { + $wdiff = max(1, ($this->GetStringWidth($ref) / $wrep)); + } else { + $wdiff = 1; + } + $sdiff = sprintf('%F', $wdiff); + $alias = TCPDF_STATIC::$alias_right_shift.$sdiff.'}'; + if ($this->isUnicodeFont()) { + $alias = '{'.$alias; + } + return $alias; + } + + /** + * Returns the string alias used for the total number of pages. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the total number of pages in the document. + * @return string + * @since 4.0.018 (2008-08-08) + * @public + */ + public function getAliasNbPages() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_tot_pages.'}'; + } + return TCPDF_STATIC::$alias_tot_pages; + } + + /** + * Returns the string alias used for the page number. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the page number. + * @return string + * @since 4.5.000 (2009-01-02) + * @public + */ + public function getAliasNumPage() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_num_page.'}'; + } + return TCPDF_STATIC::$alias_num_page; + } + + /** + * Return the alias for the total number of pages in the current page group. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the total number of pages in this group. + * @return alias of the current page group + * @public + * @since 3.0.000 (2008-03-27) + */ + public function getPageGroupAlias() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_group_tot_pages.'}'; + } + return TCPDF_STATIC::$alias_group_tot_pages; + } + + /** + * Return the alias for the page number on the current page group. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the page number (relative to the belonging group). + * @return alias of the current page group + * @public + * @since 4.5.000 (2009-01-02) + */ + public function getPageNumGroupAlias() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_group_num_page.'}'; + } + return TCPDF_STATIC::$alias_group_num_page; + } + + /** + * Return the current page in the group. + * @return current page in the group + * @public + * @since 3.0.000 (2008-03-27) + */ + public function getGroupPageNo() { + return $this->pagegroups[$this->currpagegroup]; + } + + /** + * Returns the current group page number formatted as a string. + * @public + * @since 4.3.003 (2008-11-18) + * @see PaneNo(), formatPageNumber() + */ + public function getGroupPageNoFormatted() { + return TCPDF_STATIC::formatPageNumber($this->getGroupPageNo()); + } + + /** + * Returns the current page number formatted as a string. + * @public + * @since 4.2.005 (2008-11-06) + * @see PaneNo(), formatPageNumber() + */ + public function PageNoFormatted() { + return TCPDF_STATIC::formatPageNumber($this->PageNo()); + } + + /** + * Put pdf layers. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putocg() { + if (empty($this->pdflayers)) { + return; + } + foreach ($this->pdflayers as $key => $layer) { + $this->pdflayers[$key]['objid'] = $this->_newobj(); + $out = '<< /Type /OCG'; + $out .= ' /Name '.$this->_textstring($layer['name'], $this->pdflayers[$key]['objid']); + $out .= ' /Usage <<'; + if (isset($layer['print']) AND ($layer['print'] !== NULL)) { + $out .= ' /Print <</PrintState /'.($layer['print']?'ON':'OFF').'>>'; + } + $out .= ' /View <</ViewState /'.($layer['view']?'ON':'OFF').'>>'; + $out .= ' >> >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Start a new pdf layer. + * @param $name (string) Layer name (only a-z letters and numbers). Leave empty for automatic name. + * @param $print (boolean|null) Set to TRUE to print this layer, FALSE to not print and NULL to not set this option + * @param $view (boolean) Set to true to view this layer. + * @param $lock (boolean) If true lock the layer + * @public + * @since 5.9.102 (2011-07-13) + */ + public function startLayer($name='', $print=true, $view=true, $lock=true) { + if ($this->state != 2) { + return; + } + $layer = sprintf('LYR%03d', (count($this->pdflayers) + 1)); + if (empty($name)) { + $name = $layer; + } else { + $name = preg_replace('/[^a-zA-Z0-9_\-]/', '', $name); + } + $this->pdflayers[] = array('layer' => $layer, 'name' => $name, 'print' => $print, 'view' => $view, 'lock' => $lock); + $this->openMarkedContent = true; + $this->_out('/OC /'.$layer.' BDC'); + } + + /** + * End the current PDF layer. + * @public + * @since 5.9.102 (2011-07-13) + */ + public function endLayer() { + if ($this->state != 2) { + return; + } + if ($this->openMarkedContent) { + // close existing open marked-content layer + $this->_out('EMC'); + $this->openMarkedContent = false; + } + } + + /** + * Set the visibility of the successive elements. + * This can be useful, for instance, to put a background + * image or color that will show on screen but won't print. + * @param $v (string) visibility mode. Legal values are: all, print, screen or view. + * @public + * @since 3.0.000 (2008-03-27) + */ + public function setVisibility($v) { + if ($this->state != 2) { + return; + } + $this->endLayer(); + switch($v) { + case 'print': { + $this->startLayer('Print', true, false); + break; + } + case 'view': + case 'screen': { + $this->startLayer('View', false, true); + break; + } + case 'all': { + $this->_out(''); + break; + } + default: { + $this->Error('Incorrect visibility: '.$v); + break; + } + } + } + + /** + * Add transparency parameters to the current extgstate + * @param $parms (array) parameters + * @return the number of extgstates + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function addExtGState($parms) { + if ($this->pdfa_mode) { + // transparencies are not allowed in PDF/A mode + return; + } + // check if this ExtGState already exist + foreach ($this->extgstates as $i => $ext) { + if ($ext['parms'] == $parms) { + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['extgstates'][$i] = $ext; + } + // return reference to existing ExtGState + return $i; + } + } + $n = (count($this->extgstates) + 1); + $this->extgstates[$n] = array('parms' => $parms); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['extgstates'][$n] = $this->extgstates[$n]; + } + return $n; + } + + /** + * Add an extgstate + * @param $gs (array) extgstate + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function setExtGState($gs) { + if ($this->pdfa_mode OR ($this->state != 2)) { + // transparency is not allowed in PDF/A mode + return; + } + $this->_out(sprintf('/GS%d gs', $gs)); + } + + /** + * Put extgstates for object transparency + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putextgstates() { + foreach ($this->extgstates as $i => $ext) { + $this->extgstates[$i]['n'] = $this->_newobj(); + $out = '<< /Type /ExtGState'; + foreach ($ext['parms'] as $k => $v) { + if (is_float($v)) { + $v = sprintf('%F', $v); + } elseif ($v === true) { + $v = 'true'; + } elseif ($v === false) { + $v = 'false'; + } + $out .= ' /'.$k.' '.$v; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Set overprint mode for stroking (OP) and non-stroking (op) painting operations. + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @param $stroking (boolean) If true apply overprint for stroking operations. + * @param $nonstroking (boolean) If true apply overprint for painting operations other than stroking. + * @param $mode (integer) Overprint mode: (0 = each source colour component value replaces the value previously painted for the corresponding device colorant; 1 = a tint value of 0.0 for a source colour component shall leave the corresponding component of the previously painted colour unchanged). + * @public + * @since 5.9.152 (2012-03-23) + */ + public function setOverprint($stroking=true, $nonstroking='', $mode=0) { + if ($this->state != 2) { + return; + } + $stroking = $stroking ? true : false; + if (TCPDF_STATIC::empty_string($nonstroking)) { + // default value if not set + $nonstroking = $stroking; + } else { + $nonstroking = $nonstroking ? true : false; + } + if (($mode != 0) AND ($mode != 1)) { + $mode = 0; + } + $this->overprint = array('OP' => $stroking, 'op' => $nonstroking, 'OPM' => $mode); + $gs = $this->addExtGState($this->overprint); + $this->setExtGState($gs); + } + + /** + * Get the overprint mode array (OP, op, OPM). + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @return array. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getOverprint() { + return $this->overprint; + } + + /** + * Set alpha for stroking (CA) and non-stroking (ca) operations. + * @param $stroking (float) Alpha value for stroking operations: real value from 0 (transparent) to 1 (opaque). + * @param $bm (string) blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity + * @param $nonstroking (float) Alpha value for non-stroking operations: real value from 0 (transparent) to 1 (opaque). + * @param $ais (boolean) + * @public + * @since 3.0.000 (2008-03-27) + */ + public function setAlpha($stroking=1, $bm='Normal', $nonstroking='', $ais=false) { + if ($this->pdfa_mode) { + // transparency is not allowed in PDF/A mode + return; + } + $stroking = floatval($stroking); + if (TCPDF_STATIC::empty_string($nonstroking)) { + // default value if not set + $nonstroking = $stroking; + } else { + $nonstroking = floatval($nonstroking); + } + if ($bm[0] == '/') { + // remove trailing slash + $bm = substr($bm, 1); + } + if (!in_array($bm, array('Normal', 'Multiply', 'Screen', 'Overlay', 'Darken', 'Lighten', 'ColorDodge', 'ColorBurn', 'HardLight', 'SoftLight', 'Difference', 'Exclusion', 'Hue', 'Saturation', 'Color', 'Luminosity'))) { + $bm = 'Normal'; + } + $ais = $ais ? true : false; + $this->alpha = array('CA' => $stroking, 'ca' => $nonstroking, 'BM' => '/'.$bm, 'AIS' => $ais); + $gs = $this->addExtGState($this->alpha); + $this->setExtGState($gs); + } + + /** + * Get the alpha mode array (CA, ca, BM, AIS). + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @return array. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getAlpha() { + return $this->alpha; + } + + /** + * Set the default JPEG compression quality (1-100) + * @param $quality (int) JPEG quality, integer between 1 and 100 + * @public + * @since 3.0.000 (2008-03-27) + */ + public function setJPEGQuality($quality) { + if (($quality < 1) OR ($quality > 100)) { + $quality = 75; + } + $this->jpeg_quality = intval($quality); + } + + /** + * Set the default number of columns in a row for HTML tables. + * @param $cols (int) number of columns + * @public + * @since 3.0.014 (2008-06-04) + */ + public function setDefaultTableColumns($cols=4) { + $this->default_table_columns = intval($cols); + } + + /** + * Set the height of the cell (line height) respect the font height. + * @param $h (int) cell proportion respect font height (typical value = 1.25). + * @public + * @since 3.0.014 (2008-06-04) + */ + public function setCellHeightRatio($h) { + $this->cell_height_ratio = $h; + } + + /** + * return the height of cell repect font height. + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getCellHeightRatio() { + return $this->cell_height_ratio; + } + + /** + * Set the PDF version (check PDF reference for valid values). + * @param $version (string) PDF document version. + * @public + * @since 3.1.000 (2008-06-09) + */ + public function setPDFVersion($version='1.7') { + if ($this->pdfa_mode) { + // PDF/A mode + $this->PDFVersion = '1.4'; + } else { + $this->PDFVersion = $version; + } + } + + /** + * Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print. + * (see Section 8.1 of PDF reference, "Viewer Preferences"). + * <ul><li>HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.</li><li>HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.</li><li>HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.</li><li>FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.</li><li>CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.</li><li>DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.</li><li>NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:<ul><li>UseNone Neither document outline nor thumbnail images visible</li><li>UseOutlines Document outline visible</li><li>UseThumbs Thumbnail images visible</li><li>UseOC Optional content group panel visible</li></ul>This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.</li><li>ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li><li>ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li><li>PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li><li>PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li><li>PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are: <ul><li>None, which indicates that the print dialog should reflect no page scaling</li><li>AppDefault (default), which indicates that applications should use the current print scaling</li></ul></li><li>Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:<ul><li>Simplex - Print single-sided</li><li>DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet</li><li>DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet</li></ul>Default value: none</li><li>PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.</li><li>PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application</li><li>NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1</li></ul> + * @param $preferences (array) array of options. + * @author Nicola Asuni + * @public + * @since 3.1.000 (2008-06-09) + */ + public function setViewerPreferences($preferences) { + $this->viewer_preferences = $preferences; + } + + /** + * Paints color transition registration bars + * @param $x (float) abscissa of the top left corner of the rectangle. + * @param $y (float) ordinate of the top left corner of the rectangle. + * @param $w (float) width of the rectangle. + * @param $h (float) height of the rectangle. + * @param $transition (boolean) if true prints tcolor transitions to white. + * @param $vertical (boolean) if true prints bar vertically. + * @param $colors (string) colors to print separated by comma. Valid values are: A,W,R,G,B,C,M,Y,K,RGB,CMYK,ALL,ALLSPOT,<SPOT_COLOR_NAME>. Where: A = grayscale black, W = grayscale white, R = RGB red, G RGB green, B RGB blue, C = CMYK cyan, M = CMYK magenta, Y = CMYK yellow, K = CMYK key/black, RGB = RGB registration color, CMYK = CMYK registration color, ALL = Spot registration color, ALLSPOT = print all defined spot colors, <SPOT_COLOR_NAME> = name of the spot color to print. + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @public + */ + public function colorRegistrationBar($x, $y, $w, $h, $transition=true, $vertical=false, $colors='A,R,G,B,C,M,Y,K') { + if (strpos($colors, 'ALLSPOT') !== false) { + // expand spot colors + $spot_colors = ''; + foreach ($this->spot_colors as $spot_color_name => $v) { + $spot_colors .= ','.$spot_color_name; + } + if (!empty($spot_colors)) { + $spot_colors = substr($spot_colors, 1); + $colors = str_replace('ALLSPOT', $spot_colors, $colors); + } else { + $colors = str_replace('ALLSPOT', 'NONE', $colors); + } + } + $bars = explode(',', $colors); + $numbars = count($bars); // number of bars to print + if ($numbars <= 0) { + return; + } + // set bar measures + if ($vertical) { + $coords = array(0, 0, 0, 1); + $wb = $w / $numbars; // bar width + $hb = $h; // bar height + $xd = $wb; // delta x + $yd = 0; // delta y + } else { + $coords = array(1, 0, 0, 0); + $wb = $w; // bar width + $hb = $h / $numbars; // bar height + $xd = 0; // delta x + $yd = $hb; // delta y + } + $xb = $x; + $yb = $y; + foreach ($bars as $col) { + switch ($col) { + // set transition colors + case 'A': { // BLACK (GRAYSCALE) + $col_a = array(255); + $col_b = array(0); + break; + } + case 'W': { // WHITE (GRAYSCALE) + $col_a = array(0); + $col_b = array(255); + break; + } + case 'R': { // RED (RGB) + $col_a = array(255,255,255); + $col_b = array(255,0,0); + break; + } + case 'G': { // GREEN (RGB) + $col_a = array(255,255,255); + $col_b = array(0,255,0); + break; + } + case 'B': { // BLUE (RGB) + $col_a = array(255,255,255); + $col_b = array(0,0,255); + break; + } + case 'C': { // CYAN (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(100,0,0,0); + break; + } + case 'M': { // MAGENTA (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(0,100,0,0); + break; + } + case 'Y': { // YELLOW (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(0,0,100,0); + break; + } + case 'K': { // KEY - BLACK (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(0,0,0,100); + break; + } + case 'RGB': { // BLACK REGISTRATION (RGB) + $col_a = array(255,255,255); + $col_b = array(0,0,0); + break; + } + case 'CMYK': { // BLACK REGISTRATION (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(100,100,100,100); + break; + } + case 'ALL': { // SPOT COLOR REGISTRATION + $col_a = array(0,0,0,0,'None'); + $col_b = array(100,100,100,100,'All'); + break; + } + case 'NONE': { // SKIP THIS COLOR + $col_a = array(0,0,0,0,'None'); + $col_b = array(0,0,0,0,'None'); + break; + } + default: { // SPECIFIC SPOT COLOR NAME + $col_a = array(0,0,0,0,'None'); + $col_b = TCPDF_COLORS::getSpotColor($col, $this->spot_colors); + if ($col_b === false) { + // in case of error defaults to the registration color + $col_b = array(100,100,100,100,'All'); + } + break; + } + } + if ($col != 'NONE') { + if ($transition) { + // color gradient + $this->LinearGradient($xb, $yb, $wb, $hb, $col_a, $col_b, $coords); + } else { + $this->SetFillColorArray($col_b); + // colored rectangle + $this->Rect($xb, $yb, $wb, $hb, 'F', array()); + } + $xb += $xd; + $yb += $yd; + } + } + } + + /** + * Paints crop marks. + * @param $x (float) abscissa of the crop mark center. + * @param $y (float) ordinate of the crop mark center. + * @param $w (float) width of the crop mark. + * @param $h (float) height of the crop mark. + * @param $type (string) type of crop mark, one symbol per type separated by comma: T = TOP, F = BOTTOM, L = LEFT, R = RIGHT, TL = A = TOP-LEFT, TR = B = TOP-RIGHT, BL = C = BOTTOM-LEFT, BR = D = BOTTOM-RIGHT. + * @param $color (array) crop mark color (default spot registration color). + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @public + */ + public function cropMark($x, $y, $w, $h, $type='T,R,B,L', $color=array(100,100,100,100,'All')) { + $this->SetLineStyle(array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $color)); + $type = strtoupper($type); + $type = preg_replace('/[^A-Z\-\,]*/', '', $type); + // split type in single components + $type = str_replace('-', ',', $type); + $type = str_replace('TL', 'T,L', $type); + $type = str_replace('TR', 'T,R', $type); + $type = str_replace('BL', 'F,L', $type); + $type = str_replace('BR', 'F,R', $type); + $type = str_replace('A', 'T,L', $type); + $type = str_replace('B', 'T,R', $type); + $type = str_replace('T,RO', 'BO', $type); + $type = str_replace('C', 'F,L', $type); + $type = str_replace('D', 'F,R', $type); + $crops = explode(',', strtoupper($type)); + // remove duplicates + $crops = array_unique($crops); + $dw = ($w / 4); // horizontal space to leave before the intersection point + $dh = ($h / 4); // vertical space to leave before the intersection point + foreach ($crops as $crop) { + switch ($crop) { + case 'T': + case 'TOP': { + $x1 = $x; + $y1 = ($y - $h); + $x2 = $x; + $y2 = ($y - $dh); + break; + } + case 'F': + case 'BOTTOM': { + $x1 = $x; + $y1 = ($y + $dh); + $x2 = $x; + $y2 = ($y + $h); + break; + } + case 'L': + case 'LEFT': { + $x1 = ($x - $w); + $y1 = $y; + $x2 = ($x - $dw); + $y2 = $y; + break; + } + case 'R': + case 'RIGHT': { + $x1 = ($x + $dw); + $y1 = $y; + $x2 = ($x + $w); + $y2 = $y; + break; + } + } + $this->Line($x1, $y1, $x2, $y2); + } + } + + /** + * Paints a registration mark + * @param $x (float) abscissa of the registration mark center. + * @param $y (float) ordinate of the registration mark center. + * @param $r (float) radius of the crop mark. + * @param $double (boolean) if true print two concentric crop marks. + * @param $cola (array) crop mark color (default spot registration color 'All'). + * @param $colb (array) second crop mark color (default spot registration color 'None'). + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @public + */ + public function registrationMark($x, $y, $r, $double=false, $cola=array(100,100,100,100,'All'), $colb=array(0,0,0,0,'None')) { + $line_style = array('width' => max((0.5 / $this->k),($r / 30)), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $cola); + $this->SetFillColorArray($cola); + $this->PieSector($x, $y, $r, 90, 180, 'F'); + $this->PieSector($x, $y, $r, 270, 360, 'F'); + $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); + if ($double) { + $ri = $r * 0.5; + $this->SetFillColorArray($colb); + $this->PieSector($x, $y, $ri, 90, 180, 'F'); + $this->PieSector($x, $y, $ri, 270, 360, 'F'); + $this->SetFillColorArray($cola); + $this->PieSector($x, $y, $ri, 0, 90, 'F'); + $this->PieSector($x, $y, $ri, 180, 270, 'F'); + $this->Circle($x, $y, $ri, 0, 360, 'C', $line_style, array(), 8); + } + } + + /** + * Paints a CMYK registration mark + * @param $x (float) abscissa of the registration mark center. + * @param $y (float) ordinate of the registration mark center. + * @param $r (float) radius of the crop mark. + * @author Nicola Asuni + * @since 6.0.038 (2013-09-30) + * @public + */ + public function registrationMarkCMYK($x, $y, $r) { + // line width + $lw = max((0.5 / $this->k),($r / 8)); + // internal radius + $ri = ($r * 0.6); + // external radius + $re = ($r * 1.3); + // Cyan + $this->SetFillColorArray(array(100,0,0,0)); + $this->PieSector($x, $y, $ri, 270, 360, 'F'); + // Magenta + $this->SetFillColorArray(array(0,100,0,0)); + $this->PieSector($x, $y, $ri, 0, 90, 'F'); + // Yellow + $this->SetFillColorArray(array(0,0,100,0)); + $this->PieSector($x, $y, $ri, 90, 180, 'F'); + // Key - black + $this->SetFillColorArray(array(0,0,0,100)); + $this->PieSector($x, $y, $ri, 180, 270, 'F'); + // registration color + $line_style = array('width' => $lw, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(100,100,100,100,'All')); + $this->SetFillColorArray(array(100,100,100,100,'All')); + // external circle + $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); + // cross lines + $this->Line($x, ($y - $re), $x, ($y - $ri)); + $this->Line($x, ($y + $ri), $x, ($y + $re)); + $this->Line(($x - $re), $y, ($x - $ri), $y); + $this->Line(($x + $ri), $y, ($x + $re), $y); + } + + /** + * Paints a linear colour gradient. + * @param $x (float) abscissa of the top left corner of the rectangle. + * @param $y (float) ordinate of the top left corner of the rectangle. + * @param $w (float) width of the rectangle. + * @param $h (float) height of the rectangle. + * @param $col1 (array) first color (Grayscale, RGB or CMYK components). + * @param $col2 (array) second color (Grayscale, RGB or CMYK components). + * @param $coords (array) array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0). + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function LinearGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0,0,1,0)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(2, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a radial colour gradient. + * @param $x (float) abscissa of the top left corner of the rectangle. + * @param $y (float) ordinate of the top left corner of the rectangle. + * @param $w (float) width of the rectangle. + * @param $h (float) height of the rectangle. + * @param $col1 (array) first color (Grayscale, RGB or CMYK components). + * @param $col2 (array) second color (Grayscale, RGB or CMYK components). + * @param $coords (array) array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined. + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function RadialGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5,0.5,0.5,0.5,1)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(3, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a coons patch mesh. + * @param $x (float) abscissa of the top left corner of the rectangle. + * @param $y (float) ordinate of the top left corner of the rectangle. + * @param $w (float) width of the rectangle. + * @param $h (float) height of the rectangle. + * @param $col1 (array) first color (lower left corner) (RGB components). + * @param $col2 (array) second color (lower right corner) (RGB components). + * @param $col3 (array) third color (upper right corner) (RGB components). + * @param $col4 (array) fourth color (upper left corner) (RGB components). + * @param $coords (array) <ul><li>for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bezier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).</li><li>for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bezier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches</li></ul> + * @param $coords_min (array) minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0 + * @param $coords_max (array) maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1 + * @param $antialias (boolean) A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function CoonsPatchMesh($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33), $coords_min=0, $coords_max=1, $antialias=false) { + if ($this->pdfa_mode OR ($this->state != 2)) { + return; + } + $this->Clip($x, $y, $w, $h); + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = 6; //coons patch mesh + $this->gradients[$n]['coords'] = array(); + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + //check the coords array if it is the simple array or the multi patch array + if (!isset($coords[0]['f'])) { + //simple array -> convert to multi patch array + if (!isset($col1[1])) { + $col1[1] = $col1[2] = $col1[0]; + } + if (!isset($col2[1])) { + $col2[1] = $col2[2] = $col2[0]; + } + if (!isset($col3[1])) { + $col3[1] = $col3[2] = $col3[0]; + } + if (!isset($col4[1])) { + $col4[1] = $col4[2] = $col4[0]; + } + $patch_array[0]['f'] = 0; + $patch_array[0]['points'] = $coords; + $patch_array[0]['colors'][0]['r'] = $col1[0]; + $patch_array[0]['colors'][0]['g'] = $col1[1]; + $patch_array[0]['colors'][0]['b'] = $col1[2]; + $patch_array[0]['colors'][1]['r'] = $col2[0]; + $patch_array[0]['colors'][1]['g'] = $col2[1]; + $patch_array[0]['colors'][1]['b'] = $col2[2]; + $patch_array[0]['colors'][2]['r'] = $col3[0]; + $patch_array[0]['colors'][2]['g'] = $col3[1]; + $patch_array[0]['colors'][2]['b'] = $col3[2]; + $patch_array[0]['colors'][3]['r'] = $col4[0]; + $patch_array[0]['colors'][3]['g'] = $col4[1]; + $patch_array[0]['colors'][3]['b'] = $col4[2]; + } else { + //multi patch array + $patch_array = $coords; + } + $bpcd = 65535; //16 bits per coordinate + //build the data stream + $this->gradients[$n]['stream'] = ''; + $count_patch = count($patch_array); + for ($i=0; $i < $count_patch; ++$i) { + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit + $count_points = count($patch_array[$i]['points']); + for ($j=0; $j < $count_points; ++$j) { + //each point as 16 bit + $patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j] - $coords_min) / ($coords_max - $coords_min)) * $bpcd; + if ($patch_array[$i]['points'][$j] < 0) { + $patch_array[$i]['points'][$j] = 0; + } + if ($patch_array[$i]['points'][$j] > $bpcd) { + $patch_array[$i]['points'][$j] = $bpcd; + } + $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] / 256)); + $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] % 256)); + } + $count_cols = count($patch_array[$i]['colors']); + for ($j=0; $j < $count_cols; ++$j) { + //each color component as 8 bit + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']); + } + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_outRestoreGraphicsState(); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['gradients'][$n] = $this->gradients[$n]; + } + } + + /** + * Set a rectangular clipping area. + * @param $x (float) abscissa of the top left corner of the rectangle (or top right corner for RTL mode). + * @param $y (float) ordinate of the top left corner of the rectangle. + * @param $w (float) width of the rectangle. + * @param $h (float) height of the rectangle. + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @protected + */ + protected function Clip($x, $y, $w, $h) { + if ($this->state != 2) { + return; + } + if ($this->rtl) { + $x = $this->w - $x - $w; + } + //save current Graphic State + $s = 'q'; + //set clipping area + $s .= sprintf(' %F %F %F %F re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k); + //set up transformation matrix for gradient + $s .= sprintf(' %F 0 0 %F %F %F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k); + $this->_out($s); + } + + /** + * Output gradient. + * @param $type (int) type of gradient (1 Function-based shading; 2 Axial shading; 3 Radial shading; 4 Free-form Gouraud-shaded triangle mesh; 5 Lattice-form Gouraud-shaded triangle mesh; 6 Coons patch mesh; 7 Tensor-product patch mesh). (Not all types are currently supported) + * @param $coords (array) array of coordinates. + * @param $stops (array) array gradient color components: color = array of GRAY, RGB or CMYK color components; offset = (0 to 1) represents a location along the gradient vector; exponent = exponent of the exponential interpolation function (default = 1). + * @param $background (array) An array of colour components appropriate to the colour space, specifying a single background colour value. + * @param $antialias (boolean) A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function Gradient($type, $coords, $stops, $background=array(), $antialias=false) { + if ($this->pdfa_mode OR ($this->state != 2)) { + return; + } + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = $type; + $this->gradients[$n]['coords'] = $coords; + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + // color space + $numcolspace = count($stops[0]['color']); + $bcolor = array_values($background); + switch($numcolspace) { + case 5: // SPOT + case 4: { // CMYK + $this->gradients[$n]['colspace'] = 'DeviceCMYK'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%F %F %F %F', $bcolor[0]/100, $bcolor[1]/100, $bcolor[2]/100, $bcolor[3]/100); + } + break; + } + case 3: { // RGB + $this->gradients[$n]['colspace'] = 'DeviceRGB'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%F %F %F', $bcolor[0]/255, $bcolor[1]/255, $bcolor[2]/255); + } + break; + } + case 1: { // GRAY SCALE + $this->gradients[$n]['colspace'] = 'DeviceGray'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%F', $bcolor[0]/255); + } + break; + } + } + $num_stops = count($stops); + $last_stop_id = $num_stops - 1; + foreach ($stops as $key => $stop) { + $this->gradients[$n]['colors'][$key] = array(); + // offset represents a location along the gradient vector + if (isset($stop['offset'])) { + $this->gradients[$n]['colors'][$key]['offset'] = $stop['offset']; + } else { + if ($key == 0) { + $this->gradients[$n]['colors'][$key]['offset'] = 0; + } elseif ($key == $last_stop_id) { + $this->gradients[$n]['colors'][$key]['offset'] = 1; + } else { + $offsetstep = (1 - $this->gradients[$n]['colors'][($key - 1)]['offset']) / ($num_stops - $key); + $this->gradients[$n]['colors'][$key]['offset'] = $this->gradients[$n]['colors'][($key - 1)]['offset'] + $offsetstep; + } + } + if (isset($stop['opacity'])) { + $this->gradients[$n]['colors'][$key]['opacity'] = $stop['opacity']; + if ((!$this->pdfa_mode) AND ($stop['opacity'] < 1)) { + $this->gradients[$n]['transparency'] = true; + } + } else { + $this->gradients[$n]['colors'][$key]['opacity'] = 1; + } + // exponent for the exponential interpolation function + if (isset($stop['exponent'])) { + $this->gradients[$n]['colors'][$key]['exponent'] = $stop['exponent']; + } else { + $this->gradients[$n]['colors'][$key]['exponent'] = 1; + } + // set colors + $color = array_values($stop['color']); + switch($numcolspace) { + case 5: // SPOT + case 4: { // CMYK + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F %F %F %F', $color[0]/100, $color[1]/100, $color[2]/100, $color[3]/100); + break; + } + case 3: { // RGB + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F %F %F', $color[0]/255, $color[1]/255, $color[2]/255); + break; + } + case 1: { // GRAY SCALE + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F', $color[0]/255); + break; + } + } + } + if ($this->gradients[$n]['transparency']) { + // paint luminosity gradient + $this->_out('/TGS'.$n.' gs'); + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_outRestoreGraphicsState(); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['gradients'][$n] = $this->gradients[$n]; + } + } + + /** + * Output gradient shaders. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @protected + */ + function _putshaders() { + if ($this->pdfa_mode) { + return; + } + $idt = count($this->gradients); //index for transparency gradients + foreach ($this->gradients as $id => $grad) { + if (($grad['type'] == 2) OR ($grad['type'] == 3)) { + $fc = $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $bounds = ''; + $encode = ''; + $i = 1; + $num_cols = count($grad['colors']); + $lastcols = $num_cols - 1; + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($fc + $i).' 0 R '; + if ($i < $lastcols) { + $bounds .= sprintf('%F ', $grad['colors'][$i]['offset']); + } + $encode .= '0 1 '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['color'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['color'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + // set transparency functions + if ($grad['transparency']) { + $ft = $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $i = 1; + $num_cols = count($grad['colors']); + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($ft + $i).' 0 R '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['opacity'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['opacity'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + } + // set shading object + $this->_newobj(); + $out = '<< /ShadingType '.$grad['type']; + if (isset($grad['colspace'])) { + $out .= ' /ColorSpace /'.$grad['colspace']; + } else { + $out .= ' /ColorSpace /DeviceRGB'; + } + if (isset($grad['background']) AND !empty($grad['background'])) { + $out .= ' /Background ['.$grad['background'].']'; + } + if (isset($grad['antialias']) AND ($grad['antialias'] === true)) { + $out .= ' /AntiAlias true'; + } + if ($grad['type'] == 2) { + $out .= ' '.sprintf('/Coords [%F %F %F %F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 3) { + //x0, y0, r0, x1, y1, r1 + //at this this time radius of inner circle is 0 + $out .= ' '.sprintf('/Coords [%F %F 0 %F %F %F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 6) { + $out .= ' /BitsPerCoordinate 16'; + $out .= ' /BitsPerComponent 8'; + $out .= ' /Decode[0 1 0 1 0 1 0 1 0 1]'; + $out .= ' /BitsPerFlag 8'; + $stream = $this->_getrawstream($grad['stream']); + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + } + $out .= "\n".'endobj'; + $this->_out($out); + if ($grad['transparency']) { + $shading_transparency = preg_replace('/\/ColorSpace \/[^\s]+/si', '/ColorSpace /DeviceGray', $out); + $shading_transparency = preg_replace('/\/Function [0-9]+ /si', '/Function '.$ft.' ', $shading_transparency); + } + $this->gradients[$id]['id'] = $this->n; + // set pattern object + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$id]['id'].' 0 R'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $this->gradients[$id]['pattern'] = $this->n; + // set shading and pattern for transparency mask + if ($grad['transparency']) { + // luminosity pattern + $idgs = $id + $idt; + $this->_newobj(); + $this->_out($shading_transparency); + $this->gradients[$idgs]['id'] = $this->n; + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$idgs]['id'].' 0 R'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $this->gradients[$idgs]['pattern'] = $this->n; + // luminosity XObject + $oid = $this->_newobj(); + $this->xobjects['LX'.$oid] = array('n' => $oid); + $filter = ''; + $stream = 'q /a0 gs /Pattern cs /p'.$idgs.' scn 0 0 '.$this->wPt.' '.$this->hPt.' re f Q'; + if ($this->compress) { + $filter = ' /Filter /FlateDecode'; + $stream = gzcompress($stream); + } + $stream = $this->_getrawstream($stream); + $out = '<< /Type /XObject /Subtype /Form /FormType 1'.$filter; + $out .= ' /Length '.strlen($stream); + $rect = sprintf('%F %F', $this->wPt, $this->hPt); + $out .= ' /BBox [0 0 '.$rect.']'; + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>'; + $out .= ' /Resources <<'; + $out .= ' /ExtGState << /a0 << /ca 1 /CA 1 >> >>'; + $out .= ' /Pattern << /p'.$idgs.' '.$this->gradients[$idgs]['pattern'].' 0 R >>'; + $out .= ' >>'; + $out .= ' >> '; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + // SMask + $this->_newobj(); + $out = '<< /Type /Mask /S /Luminosity /G '.($this->n - 1).' 0 R >>'."\n".'endobj'; + $this->_out($out); + // ExtGState + $this->_newobj(); + $out = '<< /Type /ExtGState /SMask '.($this->n - 1).' 0 R /AIS false >>'."\n".'endobj'; + $this->_out($out); + $this->extgstates[] = array('n' => $this->n, 'name' => 'TGS'.$id); + } + } + } + + /** + * Draw the sector of a circle. + * It can be used for instance to render pie charts. + * @param $xc (float) abscissa of the center. + * @param $yc (float) ordinate of the center. + * @param $r (float) radius. + * @param $a (float) start angle (in degrees). + * @param $b (float) end angle (in degrees). + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $cw: (float) indicates whether to go clockwise (default: true). + * @param $o: (float) origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function PieSector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) { + $this->PieSectorXY($xc, $yc, $r, $r, $a, $b, $style, $cw, $o); + } + + /** + * Draw the sector of an ellipse. + * It can be used for instance to render pie charts. + * @param $xc (float) abscissa of the center. + * @param $yc (float) ordinate of the center. + * @param $rx (float) the x-axis radius. + * @param $ry (float) the y-axis radius. + * @param $a (float) start angle (in degrees). + * @param $b (float) end angle (in degrees). + * @param $style (string) Style of rendering. See the getPathPaintOperator() function for more information. + * @param $cw: (float) indicates whether to go clockwise. + * @param $o: (float) origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). + * @param $nc (integer) Number of curves used to draw a 90 degrees portion of arc. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function PieSectorXY($xc, $yc, $rx, $ry, $a, $b, $style='FD', $cw=false, $o=0, $nc=2) { + if ($this->state != 2) { + return; + } + if ($this->rtl) { + $xc = ($this->w - $xc); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($cw) { + $d = $b; + $b = (360 - $a + $o); + $a = (360 - $d + $o); + } else { + $b += $o; + $a += $o; + } + $this->_outellipticalarc($xc, $yc, $rx, $ry, 0, $a, $b, true, $nc); + $this->_out($op); + } + + /** + * Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. + * NOTE: EPS is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of vector images using ImageMagick library. + * Only vector drawing is supported, not text or bitmap. + * Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). + * @param $file (string) Name of the file containing the image or a '@' character followed by the EPS/AI data string. + * @param $x (float) Abscissa of the upper-left corner. + * @param $y (float) Ordinate of the upper-left corner. + * @param $w (float) Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $h (float) Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $link (mixed) URL or identifier returned by AddLink(). + * @param $useBoundingBox (boolean) specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true. + * @param $align (string) Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> + * @param $palign (string) Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul> + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $fitonpage (boolean) if true the image is resized to not exceed page dimensions. + * @param $fixoutvals (boolean) if true remove values outside the bounding box. + * @author Valentin Schmidt, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function ImageEps($file, $x='', $y='', $w=0, $h=0, $link='', $useBoundingBox=true, $align='', $palign='', $border=0, $fitonpage=false, $fixoutvals=false) { + if ($this->state != 2) { + return; + } + if ($this->rasterize_vector_images AND ($w > 0) AND ($h > 0)) { + // convert EPS to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + $k = $this->k; + if ($file[0] === '@') { // image from string + $data = substr($file, 1); + } else { // EPS/AI file + $data = TCPDF_STATIC::fileGetContents($file); + } + if ($data === FALSE) { + $this->Error('EPS file not found: '.$file); + } + $regs = array(); + // EPS/AI compatibility check (only checks files created by Adobe Illustrator!) + preg_match("/%%Creator:([^\r\n]+)/", $data, $regs); # find Creator + if (count($regs) > 1) { + $version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0" + if (strpos($version_str, 'Adobe Illustrator') !== false) { + $versexp = explode(' ', $version_str); + $version = (float)array_pop($versexp); + if ($version >= 9) { + $this->Error('This version of Adobe Illustrator file is not supported: '.$file); + } + } + } + // strip binary bytes in front of PS-header + $start = strpos($data, '%!PS-Adobe'); + if ($start > 0) { + $data = substr($data, $start); + } + // find BoundingBox params + preg_match("/%%BoundingBox:([^\r\n]+)/", $data, $regs); + if (count($regs) > 1) { + list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1])); + } else { + $this->Error('No BoundingBox found in EPS/AI file: '.$file); + } + $start = strpos($data, '%%EndSetup'); + if ($start === false) { + $start = strpos($data, '%%EndProlog'); + } + if ($start === false) { + $start = strpos($data, '%%BoundingBox'); + } + $data = substr($data, $start); + $end = strpos($data, '%%PageTrailer'); + if ($end===false) { + $end = strpos($data, 'showpage'); + } + if ($end) { + $data = substr($data, 0, $end); + } + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + $w = ($x2 - $x1) / $k; + $h = ($y2 - $y1) / $k; + } elseif ($w <= 0) { + $w = ($x2-$x1) / $k * ($h / (($y2 - $y1) / $k)); + } elseif ($h <= 0) { + $h = ($y2 - $y1) / $k * ($w / (($x2 - $x1) / $k)); + } + // fit the image on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); + if ($this->rasterize_vector_images) { + // convert EPS to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); + } + // set scaling factors + $scale_x = $w / (($x2 - $x1) / $k); + $scale_y = $h / (($y2 - $y1) / $k); + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + if ($useBoundingBox) { + $dx = $ximg * $k - $x1; + $dy = $y * $k - $y1; + } else { + $dx = $ximg * $k; + $dy = $y * $k; + } + // save the current graphic state + $this->_out('q'.$this->epsmarker); + // translate + $this->_out(sprintf('%F %F %F %F %F %F cm', 1, 0, 0, 1, $dx, $dy + ($this->hPt - (2 * $y * $k) - ($y2 - $y1)))); + // scale + if (isset($scale_x)) { + $this->_out(sprintf('%F %F %F %F %F %F cm', $scale_x, 0, 0, $scale_y, $x1 * (1 - $scale_x), $y2 * (1 - $scale_y))); + } + // handle pc/unix/mac line endings + $lines = preg_split('/[\r\n]+/si', $data, -1, PREG_SPLIT_NO_EMPTY); + $u=0; + $cnt = count($lines); + for ($i=0; $i < $cnt; ++$i) { + $line = $lines[$i]; + if (($line == '') OR ($line[0] == '%')) { + continue; + } + $len = strlen($line); + // check for spot color names + $color_name = ''; + if (strcasecmp('x', substr(trim($line), -1)) == 0) { + if (preg_match('/\([^\)]*\)/', $line, $matches) > 0) { + // extract spot color name + $color_name = $matches[0]; + // remove color name from string + $line = str_replace(' '.$color_name, '', $line); + // remove pharentesis from color name + $color_name = substr($color_name, 1, -1); + } + } + $chunks = explode(' ', $line); + $cmd = trim(array_pop($chunks)); + // RGB + if (($cmd == 'Xa') OR ($cmd == 'XA')) { + $b = array_pop($chunks); + $g = array_pop($chunks); + $r = array_pop($chunks); + $this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG')); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg! + continue; + } + $skip = false; + if ($fixoutvals) { + // check for values outside the bounding box + switch ($cmd) { + case 'm': + case 'l': + case 'L': { + // skip values outside bounding box + foreach ($chunks as $key => $val) { + if ((($key % 2) == 0) AND (($val < $x1) OR ($val > $x2))) { + $skip = true; + } elseif ((($key % 2) != 0) AND (($val < $y1) OR ($val > $y2))) { + $skip = true; + } + } + } + } + } + switch ($cmd) { + case 'm': + case 'l': + case 'v': + case 'y': + case 'c': + case 'k': + case 'K': + case 'g': + case 'G': + case 's': + case 'S': + case 'J': + case 'j': + case 'w': + case 'M': + case 'd': + case 'n': { + if ($skip) { + break; + } + $this->_out($line); + break; + } + case 'x': {// custom fill color + if (empty($color_name)) { + // CMYK color + list($col_c, $col_m, $col_y, $col_k) = $chunks; + $this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' k'); + } else { + // Spot Color (CMYK + tint) + list($col_c, $col_m, $col_y, $col_k, $col_t) = $chunks; + $this->AddSpotColor($color_name, ($col_c * 100), ($col_m * 100), ($col_y * 100), ($col_k * 100)); + $color_cmd = sprintf('/CS%d cs %F scn', $this->spot_colors[$color_name]['i'], (1 - $col_t)); + $this->_out($color_cmd); + } + break; + } + case 'X': { // custom stroke color + if (empty($color_name)) { + // CMYK color + list($col_c, $col_m, $col_y, $col_k) = $chunks; + $this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' K'); + } else { + // Spot Color (CMYK + tint) + list($col_c, $col_m, $col_y, $col_k, $col_t) = $chunks; + $this->AddSpotColor($color_name, ($col_c * 100), ($col_m * 100), ($col_y * 100), ($col_k * 100)); + $color_cmd = sprintf('/CS%d CS %F SCN', $this->spot_colors[$color_name]['i'], (1 - $col_t)); + $this->_out($color_cmd); + } + break; + } + case 'Y': + case 'N': + case 'V': + case 'L': + case 'C': { + if ($skip) { + break; + } + $line[($len - 1)] = strtolower($cmd); + $this->_out($line); + break; + } + case 'b': + case 'B': { + $this->_out($cmd . '*'); + break; + } + case 'f': + case 'F': { + if ($u > 0) { + $isU = false; + $max = min(($i + 5), $cnt); + for ($j = ($i + 1); $j < $max; ++$j) { + $isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U'))); + } + if ($isU) { + $this->_out('f*'); + } + } else { + $this->_out('f*'); + } + break; + } + case '*u': { + ++$u; + break; + } + case '*U': { + --$u; + break; + } + } + } + // restore previous graphic state + $this->_out($this->epsmarker.'Q'); + if (!empty($border)) { + $bx = $this->x; + $by = $this->y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the next text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Set document barcode. + * @param $bc (string) barcode + * @public + */ + public function setBarcode($bc='') { + $this->barcode = $bc; + } + + /** + * Get current barcode. + * @return string + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getBarcode() { + return $this->barcode; + } + + /** + * Print a Linear Barcode. + * @param $code (string) code to print + * @param $type (string) type of barcode (see tcpdf_barcodes_1d.php for supported formats). + * @param $x (int) x position in user units (empty string = current x position) + * @param $y (int) y position in user units (empty string = current y position) + * @param $w (int) width in user units (empty string = remaining page width) + * @param $h (int) height in user units (empty string = remaining page height) + * @param $xres (float) width of the smallest bar in user units (empty string = default value = 0.4mm) + * @param $style (array) array of options:<ul> + * <li>boolean $style['border'] if true prints a border</li> + * <li>int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)</li> + * <li>int $style['hpadding'] horizontal padding in user units (set to 'auto' for automatic padding)</li> + * <li>int $style['vpadding'] vertical padding in user units (set to 'auto' for automatic padding)</li> + * <li>array $style['fgcolor'] color array for bars and text</li> + * <li>mixed $style['bgcolor'] color array for background (set to false for transparent)</li> + * <li>boolean $style['text'] if true prints text below the barcode</li> + * <li>string $style['label'] override default label</li> + * <li>string $style['font'] font name for text</li><li>int $style['fontsize'] font size for text</li> + * <li>int $style['stretchtext']: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing.</li> + * <li>string $style['position'] horizontal position of the containing barcode cell on the page: L = left margin; C = center; R = right margin.</li> + * <li>string $style['align'] horizontal position of the barcode on the containing rectangle: L = left; C = center; R = right.</li> + * <li>string $style['stretch'] if true stretch the barcode to best fit the available width, otherwise uses $xres resolution for a single bar.</li> + * <li>string $style['fitwidth'] if true reduce the width to fit the barcode width + padding. When this option is enabled the 'stretch' option is automatically disabled.</li> + * <li>string $style['cellfitalign'] this option works only when 'fitwidth' is true and 'position' is unset or empty. Set the horizontal position of the containing barcode cell inside the specified rectangle: L = left; C = center; R = right.</li></ul> + * @param $align (string) Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function write1DBarcode($code, $type, $x='', $y='', $w='', $h='', $xres='', $style='', $align='') { + if (TCPDF_STATIC::empty_string(trim($code))) { + return; + } + require_once(dirname(__FILE__).'/tcpdf_barcodes_1d.php'); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // create new barcode object + $barcodeobj = new TCPDFBarcode($code, $type); + $arrcode = $barcodeobj->getBarcodeArray(); + if (($arrcode === false) OR empty($arrcode) OR ($arrcode['maxw'] <= 0)) { + $this->Error('Error in 1D barcode string'); + } + if ($arrcode['maxh'] <= 0) { + $arrcode['maxh'] = 1; + } + // set default values + if (!isset($style['position'])) { + $style['position'] = ''; + } elseif ($style['position'] == 'S') { + // keep this for backward compatibility + $style['position'] = ''; + $style['stretch'] = true; + } + if (!isset($style['fitwidth'])) { + if (!isset($style['stretch'])) { + $style['fitwidth'] = true; + } else { + $style['fitwidth'] = false; + } + } + if ($style['fitwidth']) { + // disable stretch + $style['stretch'] = false; + } + if (!isset($style['stretch'])) { + if (($w === '') OR ($w <= 0)) { + $style['stretch'] = false; + } else { + $style['stretch'] = true; + } + } + if (!isset($style['fgcolor'])) { + $style['fgcolor'] = array(0,0,0); // default black + } + if (!isset($style['bgcolor'])) { + $style['bgcolor'] = false; // default transparent + } + if (!isset($style['border'])) { + $style['border'] = false; + } + $fontsize = 0; + if (!isset($style['text'])) { + $style['text'] = false; + } + if ($style['text'] AND isset($style['font'])) { + if (isset($style['fontsize'])) { + $fontsize = $style['fontsize']; + } + $this->SetFont($style['font'], '', $fontsize); + } + if (!isset($style['stretchtext'])) { + $style['stretchtext'] = 4; + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if (($w === '') OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + // padding + if (!isset($style['padding'])) { + $padding = 0; + } elseif ($style['padding'] === 'auto') { + $padding = 10 * ($w / ($arrcode['maxw'] + 20)); + } else { + $padding = floatval($style['padding']); + } + // horizontal padding + if (!isset($style['hpadding'])) { + $hpadding = $padding; + } elseif ($style['hpadding'] === 'auto') { + $hpadding = 10 * ($w / ($arrcode['maxw'] + 20)); + } else { + $hpadding = floatval($style['hpadding']); + } + // vertical padding + if (!isset($style['vpadding'])) { + $vpadding = $padding; + } elseif ($style['vpadding'] === 'auto') { + $vpadding = ($hpadding / 2); + } else { + $vpadding = floatval($style['vpadding']); + } + // calculate xres (single bar width) + $max_xres = ($w - (2 * $hpadding)) / $arrcode['maxw']; + if ($style['stretch']) { + $xres = $max_xres; + } else { + if (TCPDF_STATIC::empty_string($xres)) { + $xres = (0.141 * $this->k); // default bar width = 0.4 mm + } + if ($xres > $max_xres) { + // correct xres to fit on $w + $xres = $max_xres; + } + if ((isset($style['padding']) AND ($style['padding'] === 'auto')) + OR (isset($style['hpadding']) AND ($style['hpadding'] === 'auto'))) { + $hpadding = 10 * $xres; + if (isset($style['vpadding']) AND ($style['vpadding'] === 'auto')) { + $vpadding = ($hpadding / 2); + } + } + } + if ($style['fitwidth']) { + $wold = $w; + $w = (($arrcode['maxw'] * $xres) + (2 * $hpadding)); + if (isset($style['cellfitalign'])) { + switch ($style['cellfitalign']) { + case 'L': { + if ($this->rtl) { + $x -= ($wold - $w); + } + break; + } + case 'R': { + if (!$this->rtl) { + $x += ($wold - $w); + } + break; + } + case 'C': { + if ($this->rtl) { + $x -= (($wold - $w) / 2); + } else { + $x += (($wold - $w) / 2); + } + break; + } + default : { + break; + } + } + } + } + $text_height = $this->getCellHeight($fontsize / $this->k); + // height + if (($h === '') OR ($h <= 0)) { + // set default height + $h = (($arrcode['maxw'] * $xres) / 3) + (2 * $vpadding) + $text_height; + } + $barh = $h - $text_height - (2 * $vpadding); + if ($barh <=0) { + // try to reduce font or padding to fit barcode on available height + if ($text_height > $h) { + $fontsize = (($h * $this->k) / (4 * $this->cell_height_ratio)); + $text_height = $this->getCellHeight($fontsize / $this->k); + $this->SetFont($style['font'], '', $fontsize); + } + if ($vpadding > 0) { + $vpadding = (($h - $text_height) / 4); + } + $barh = $h - $text_height - (2 * $vpadding); + } + // fit the barcode on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, false); + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($style['position'] == 'L') { + $xpos = $this->lMargin; + } elseif ($style['position'] == 'C') { + $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($style['position'] == 'R') { + $xpos = $this->w - $this->rMargin - $w; + } else { + $xpos = $x - $w; + } + $this->img_rb_x = $xpos; + } else { + if ($style['position'] == 'L') { + $xpos = $this->lMargin; + } elseif ($style['position'] == 'C') { + $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($style['position'] == 'R') { + $xpos = $this->w - $this->rMargin - $w; + } else { + $xpos = $x; + } + $this->img_rb_x = $xpos + $w; + } + $xpos_rect = $xpos; + if (!isset($style['align'])) { + $style['align'] = 'C'; + } + switch ($style['align']) { + case 'L': { + $xpos = $xpos_rect + $hpadding; + break; + } + case 'R': { + $xpos = $xpos_rect + ($w - ($arrcode['maxw'] * $xres)) - $hpadding; + break; + } + case 'C': + default : { + $xpos = $xpos_rect + (($w - ($arrcode['maxw'] * $xres)) / 2); + break; + } + } + $xpos_text = $xpos; + // barcode is always printed in LTR direction + $tempRTL = $this->rtl; + $this->rtl = false; + // print background color + if ($style['bgcolor']) { + $this->Rect($xpos_rect, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); + } elseif ($style['border']) { + $this->Rect($xpos_rect, $y, $w, $h, 'D'); + } + // set foreground color + $this->SetDrawColorArray($style['fgcolor']); + $this->SetTextColorArray($style['fgcolor']); + // print bars + foreach ($arrcode['bcode'] as $k => $v) { + $bw = ($v['w'] * $xres); + if ($v['t']) { + // draw a vertical bar + $ypos = $y + $vpadding + ($v['p'] * $barh / $arrcode['maxh']); + $this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'F', array(), $style['fgcolor']); + } + $xpos += $bw; + } + // print text + if ($style['text']) { + if (isset($style['label']) AND !TCPDF_STATIC::empty_string($style['label'])) { + $label = $style['label']; + } else { + $label = $code; + } + $txtwidth = ($arrcode['maxw'] * $xres); + if ($this->GetStringWidth($label) > $txtwidth) { + $style['stretchtext'] = 2; + } + // print text + $this->x = $xpos_text; + $this->y = $y + $vpadding + $barh; + $cellpadding = $this->cell_padding; + $this->SetCellPadding(0); + $this->Cell($txtwidth, '', $label, 0, 0, 'C', false, '', $style['stretchtext'], false, 'T', 'T'); + $this->cell_padding = $cellpadding; + } + // restore original direction + $this->rtl = $tempRTL; + // restore previous settings + $this->setGraphicVars($gvars); + // set pointer to align the next text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h / 2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Print 2D Barcode. + * @param $code (string) code to print + * @param $type (string) type of barcode (see tcpdf_barcodes_2d.php for supported formats). + * @param $x (int) x position in user units + * @param $y (int) y position in user units + * @param $w (int) width in user units + * @param $h (int) height in user units + * @param $style (array) array of options:<ul> + * <li>boolean $style['border'] if true prints a border around the barcode</li> + * <li>int $style['padding'] padding to leave around the barcode in barcode units (set to 'auto' for automatic padding)</li> + * <li>int $style['hpadding'] horizontal padding in barcode units (set to 'auto' for automatic padding)</li> + * <li>int $style['vpadding'] vertical padding in barcode units (set to 'auto' for automatic padding)</li> + * <li>int $style['module_width'] width of a single module in points</li> + * <li>int $style['module_height'] height of a single module in points</li> + * <li>array $style['fgcolor'] color array for bars and text</li> + * <li>mixed $style['bgcolor'] color array for background or false for transparent</li> + * <li>string $style['position'] barcode position on the page: L = left margin; C = center; R = right margin; S = stretch</li><li>$style['module_width'] width of a single module in points</li> + * <li>$style['module_height'] height of a single module in points</li></ul> + * @param $align (string) Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> + * @param $distort (boolean) if true distort the barcode to fit width and height, otherwise preserve aspect ratio + * @author Nicola Asuni + * @since 4.5.037 (2009-04-07) + * @public + */ + public function write2DBarcode($code, $type, $x='', $y='', $w='', $h='', $style='', $align='', $distort=false) { + if (TCPDF_STATIC::empty_string(trim($code))) { + return; + } + require_once(dirname(__FILE__).'/tcpdf_barcodes_2d.php'); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // create new barcode object + $barcodeobj = new TCPDF2DBarcode($code, $type); + $arrcode = $barcodeobj->getBarcodeArray(); + if (($arrcode === false) OR empty($arrcode) OR !isset($arrcode['num_rows']) OR ($arrcode['num_rows'] == 0) OR !isset($arrcode['num_cols']) OR ($arrcode['num_cols'] == 0)) { + $this->Error('Error in 2D barcode string'); + } + // set default values + if (!isset($style['position'])) { + $style['position'] = ''; + } + if (!isset($style['fgcolor'])) { + $style['fgcolor'] = array(0,0,0); // default black + } + if (!isset($style['bgcolor'])) { + $style['bgcolor'] = false; // default transparent + } + if (!isset($style['border'])) { + $style['border'] = false; + } + // padding + if (!isset($style['padding'])) { + $style['padding'] = 0; + } elseif ($style['padding'] === 'auto') { + $style['padding'] = 4; + } + if (!isset($style['hpadding'])) { + $style['hpadding'] = $style['padding']; + } elseif ($style['hpadding'] === 'auto') { + $style['hpadding'] = 4; + } + if (!isset($style['vpadding'])) { + $style['vpadding'] = $style['padding']; + } elseif ($style['vpadding'] === 'auto') { + $style['vpadding'] = 4; + } + $hpad = (2 * $style['hpadding']); + $vpad = (2 * $style['vpadding']); + // cell (module) dimension + if (!isset($style['module_width'])) { + $style['module_width'] = 1; // width of a single module in points + } + if (!isset($style['module_height'])) { + $style['module_height'] = 1; // height of a single module in points + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + // number of barcode columns and rows + $rows = $arrcode['num_rows']; + $cols = $arrcode['num_cols']; + if (($rows <= 0) || ($cols <= 0)){ + $this->Error('Error in 2D barcode string'); + } + // module width and height + $mw = $style['module_width']; + $mh = $style['module_height']; + if (($mw <= 0) OR ($mh <= 0)) { + $this->Error('Error in 2D barcode string'); + } + // get max dimensions + if ($this->rtl) { + $maxw = $x - $this->lMargin; + } else { + $maxw = $this->w - $this->rMargin - $x; + } + $maxh = ($this->h - $this->tMargin - $this->bMargin); + $ratioHW = ((($rows * $mh) + $hpad) / (($cols * $mw) + $vpad)); + $ratioWH = ((($cols * $mw) + $vpad) / (($rows * $mh) + $hpad)); + if (!$distort) { + if (($maxw * $ratioHW) > $maxh) { + $maxw = $maxh * $ratioWH; + } + if (($maxh * $ratioWH) > $maxw) { + $maxh = $maxw * $ratioHW; + } + } + // set maximum dimensions + if ($w > $maxw) { + $w = $maxw; + } + if ($h > $maxh) { + $h = $maxh; + } + // set dimensions + if ((($w === '') OR ($w <= 0)) AND (($h === '') OR ($h <= 0))) { + $w = ($cols + $hpad) * ($mw / $this->k); + $h = ($rows + $vpad) * ($mh / $this->k); + } elseif (($w === '') OR ($w <= 0)) { + $w = $h * $ratioWH; + } elseif (($h === '') OR ($h <= 0)) { + $h = $w * $ratioHW; + } + // barcode size (excluding padding) + $bw = ($w * $cols) / ($cols + $hpad); + $bh = ($h * $rows) / ($rows + $vpad); + // dimension of single barcode cell unit + $cw = $bw / $cols; + $ch = $bh / $rows; + if (!$distort) { + if (($cw / $ch) > ($mw / $mh)) { + // correct horizontal distortion + $cw = $ch * $mw / $mh; + $bw = $cw * $cols; + $style['hpadding'] = ($w - $bw) / (2 * $cw); + } else { + // correct vertical distortion + $ch = $cw * $mh / $mw; + $bh = $ch * $rows; + $style['vpadding'] = ($h - $bh) / (2 * $ch); + } + } + // fit the barcode on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, false); + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($style['position'] == 'L') { + $xpos = $this->lMargin; + } elseif ($style['position'] == 'C') { + $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($style['position'] == 'R') { + $xpos = $this->w - $this->rMargin - $w; + } else { + $xpos = $x - $w; + } + $this->img_rb_x = $xpos; + } else { + if ($style['position'] == 'L') { + $xpos = $this->lMargin; + } elseif ($style['position'] == 'C') { + $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($style['position'] == 'R') { + $xpos = $this->w - $this->rMargin - $w; + } else { + $xpos = $x; + } + $this->img_rb_x = $xpos + $w; + } + $xstart = $xpos + ($style['hpadding'] * $cw); + $ystart = $y + ($style['vpadding'] * $ch); + // barcode is always printed in LTR direction + $tempRTL = $this->rtl; + $this->rtl = false; + // print background color + if ($style['bgcolor']) { + $this->Rect($xpos, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); + } elseif ($style['border']) { + $this->Rect($xpos, $y, $w, $h, 'D'); + } + // set foreground color + $this->SetDrawColorArray($style['fgcolor']); + // print barcode cells + // for each row + for ($r = 0; $r < $rows; ++$r) { + $xr = $xstart; + // for each column + for ($c = 0; $c < $cols; ++$c) { + if ($arrcode['bcode'][$r][$c] == 1) { + // draw a single barcode cell + $this->Rect($xr, $ystart, $cw, $ch, 'F', array(), $style['fgcolor']); + } + $xr += $cw; + } + $ystart += $ch; + } + // restore original direction + $this->rtl = $tempRTL; + // restore previous settings + $this->setGraphicVars($gvars); + // set pointer to align the next text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Returns an array containing current margins: + * <ul> + <li>$ret['left'] = left margin</li> + <li>$ret['right'] = right margin</li> + <li>$ret['top'] = top margin</li> + <li>$ret['bottom'] = bottom margin</li> + <li>$ret['header'] = header margin</li> + <li>$ret['footer'] = footer margin</li> + <li>$ret['cell'] = cell padding array</li> + <li>$ret['padding_left'] = cell left padding</li> + <li>$ret['padding_top'] = cell top padding</li> + <li>$ret['padding_right'] = cell right padding</li> + <li>$ret['padding_bottom'] = cell bottom padding</li> + * </ul> + * @return array containing all margins measures + * @public + * @since 3.2.000 (2008-06-23) + */ + public function getMargins() { + $ret = array( + 'left' => $this->lMargin, + 'right' => $this->rMargin, + 'top' => $this->tMargin, + 'bottom' => $this->bMargin, + 'header' => $this->header_margin, + 'footer' => $this->footer_margin, + 'cell' => $this->cell_padding, + 'padding_left' => $this->cell_padding['L'], + 'padding_top' => $this->cell_padding['T'], + 'padding_right' => $this->cell_padding['R'], + 'padding_bottom' => $this->cell_padding['B'] + ); + return $ret; + } + + /** + * Returns an array containing original margins: + * <ul> + <li>$ret['left'] = left margin</li> + <li>$ret['right'] = right margin</li> + * </ul> + * @return array containing all margins measures + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getOriginalMargins() { + $ret = array( + 'left' => $this->original_lMargin, + 'right' => $this->original_rMargin + ); + return $ret; + } + + /** + * Returns the current font size. + * @return current font size + * @public + * @since 3.2.000 (2008-06-23) + */ + public function getFontSize() { + return $this->FontSize; + } + + /** + * Returns the current font size in points unit. + * @return current font size in points unit + * @public + * @since 3.2.000 (2008-06-23) + */ + public function getFontSizePt() { + return $this->FontSizePt; + } + + /** + * Returns the current font family name. + * @return string current font family name + * @public + * @since 4.3.008 (2008-12-05) + */ + public function getFontFamily() { + return $this->FontFamily; + } + + /** + * Returns the current font style. + * @return string current font style + * @public + * @since 4.3.008 (2008-12-05) + */ + public function getFontStyle() { + return $this->FontStyle; + } + + /** + * Cleanup HTML code (requires HTML Tidy library). + * @param $html (string) htmlcode to fix + * @param $default_css (string) CSS commands to add + * @param $tagvs (array) parameters for setHtmlVSpace method + * @param $tidy_options (array) options for tidy_parse_string function + * @return string XHTML code cleaned up + * @author Nicola Asuni + * @public + * @since 5.9.017 (2010-11-16) + * @see setHtmlVSpace() + */ + public function fixHTMLCode($html, $default_css='', $tagvs='', $tidy_options='') { + return TCPDF_STATIC::fixHTMLCode($html, $default_css, $tagvs, $tidy_options, $this->tagvspaces); + } + + /** + * Returns the border width from CSS property + * @param $width (string) border width + * @return int with in user units + * @protected + * @since 5.7.000 (2010-08-02) + */ + protected function getCSSBorderWidth($width) { + if ($width == 'thin') { + $width = (2 / $this->k); + } elseif ($width == 'medium') { + $width = (4 / $this->k); + } elseif ($width == 'thick') { + $width = (6 / $this->k); + } else { + $width = $this->getHTMLUnitToUnits($width, 1, 'px', false); + } + return $width; + } + + /** + * Returns the border dash style from CSS property + * @param $style (string) border style to convert + * @return int sash style (return -1 in case of none or hidden border) + * @protected + * @since 5.7.000 (2010-08-02) + */ + protected function getCSSBorderDashStyle($style) { + switch (strtolower($style)) { + case 'none': + case 'hidden': { + $dash = -1; + break; + } + case 'dotted': { + $dash = 1; + break; + } + case 'dashed': { + $dash = 3; + break; + } + case 'double': + case 'groove': + case 'ridge': + case 'inset': + case 'outset': + case 'solid': + default: { + $dash = 0; + break; + } + } + return $dash; + } + + /** + * Returns the border style array from CSS border properties + * @param $cssborder (string) border properties + * @return array containing border properties + * @protected + * @since 5.7.000 (2010-08-02) + */ + protected function getCSSBorderStyle($cssborder) { + $bprop = preg_split('/[\s]+/', trim($cssborder)); + $border = array(); // value to be returned + switch (count($bprop)) { + case 3: { + $width = $bprop[0]; + $style = $bprop[1]; + $color = $bprop[2]; + break; + } + case 2: { + $width = 'medium'; + $style = $bprop[0]; + $color = $bprop[1]; + break; + } + case 1: { + $width = 'medium'; + $style = $bprop[0]; + $color = 'black'; + break; + } + default: { + $width = 'medium'; + $style = 'solid'; + $color = 'black'; + break; + } + } + if ($style == 'none') { + return array(); + } + $border['cap'] = 'square'; + $border['join'] = 'miter'; + $border['dash'] = $this->getCSSBorderDashStyle($style); + if ($border['dash'] < 0) { + return array(); + } + $border['width'] = $this->getCSSBorderWidth($width); + $border['color'] = TCPDF_COLORS::convertHTMLColorToDec($color, $this->spot_colors); + return $border; + } + + /** + * Get the internal Cell padding from CSS attribute. + * @param $csspadding (string) padding properties + * @param $width (float) width of the containing element + * @return array of cell paddings + * @public + * @since 5.9.000 (2010-10-04) + */ + public function getCSSPadding($csspadding, $width=0) { + $padding = preg_split('/[\s]+/', trim($csspadding)); + $cell_padding = array(); // value to be returned + switch (count($padding)) { + case 4: { + $cell_padding['T'] = $padding[0]; + $cell_padding['R'] = $padding[1]; + $cell_padding['B'] = $padding[2]; + $cell_padding['L'] = $padding[3]; + break; + } + case 3: { + $cell_padding['T'] = $padding[0]; + $cell_padding['R'] = $padding[1]; + $cell_padding['B'] = $padding[2]; + $cell_padding['L'] = $padding[1]; + break; + } + case 2: { + $cell_padding['T'] = $padding[0]; + $cell_padding['R'] = $padding[1]; + $cell_padding['B'] = $padding[0]; + $cell_padding['L'] = $padding[1]; + break; + } + case 1: { + $cell_padding['T'] = $padding[0]; + $cell_padding['R'] = $padding[0]; + $cell_padding['B'] = $padding[0]; + $cell_padding['L'] = $padding[0]; + break; + } + default: { + return $this->cell_padding; + } + } + if ($width == 0) { + $width = $this->w - $this->lMargin - $this->rMargin; + } + $cell_padding['T'] = $this->getHTMLUnitToUnits($cell_padding['T'], $width, 'px', false); + $cell_padding['R'] = $this->getHTMLUnitToUnits($cell_padding['R'], $width, 'px', false); + $cell_padding['B'] = $this->getHTMLUnitToUnits($cell_padding['B'], $width, 'px', false); + $cell_padding['L'] = $this->getHTMLUnitToUnits($cell_padding['L'], $width, 'px', false); + return $cell_padding; + } + + /** + * Get the internal Cell margin from CSS attribute. + * @param $cssmargin (string) margin properties + * @param $width (float) width of the containing element + * @return array of cell margins + * @public + * @since 5.9.000 (2010-10-04) + */ + public function getCSSMargin($cssmargin, $width=0) { + $margin = preg_split('/[\s]+/', trim($cssmargin)); + $cell_margin = array(); // value to be returned + switch (count($margin)) { + case 4: { + $cell_margin['T'] = $margin[0]; + $cell_margin['R'] = $margin[1]; + $cell_margin['B'] = $margin[2]; + $cell_margin['L'] = $margin[3]; + break; + } + case 3: { + $cell_margin['T'] = $margin[0]; + $cell_margin['R'] = $margin[1]; + $cell_margin['B'] = $margin[2]; + $cell_margin['L'] = $margin[1]; + break; + } + case 2: { + $cell_margin['T'] = $margin[0]; + $cell_margin['R'] = $margin[1]; + $cell_margin['B'] = $margin[0]; + $cell_margin['L'] = $margin[1]; + break; + } + case 1: { + $cell_margin['T'] = $margin[0]; + $cell_margin['R'] = $margin[0]; + $cell_margin['B'] = $margin[0]; + $cell_margin['L'] = $margin[0]; + break; + } + default: { + return $this->cell_margin; + } + } + if ($width == 0) { + $width = $this->w - $this->lMargin - $this->rMargin; + } + $cell_margin['T'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['T']), $width, 'px', false); + $cell_margin['R'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['R']), $width, 'px', false); + $cell_margin['B'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['B']), $width, 'px', false); + $cell_margin['L'] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $cell_margin['L']), $width, 'px', false); + return $cell_margin; + } + + /** + * Get the border-spacing from CSS attribute. + * @param $cssbspace (string) border-spacing CSS properties + * @param $width (float) width of the containing element + * @return array of border spacings + * @public + * @since 5.9.010 (2010-10-27) + */ + public function getCSSBorderMargin($cssbspace, $width=0) { + $space = preg_split('/[\s]+/', trim($cssbspace)); + $border_spacing = array(); // value to be returned + switch (count($space)) { + case 2: { + $border_spacing['H'] = $space[0]; + $border_spacing['V'] = $space[1]; + break; + } + case 1: { + $border_spacing['H'] = $space[0]; + $border_spacing['V'] = $space[0]; + break; + } + default: { + return array('H' => 0, 'V' => 0); + } + } + if ($width == 0) { + $width = $this->w - $this->lMargin - $this->rMargin; + } + $border_spacing['H'] = $this->getHTMLUnitToUnits($border_spacing['H'], $width, 'px', false); + $border_spacing['V'] = $this->getHTMLUnitToUnits($border_spacing['V'], $width, 'px', false); + return $border_spacing; + } + + /** + * Returns the letter-spacing value from CSS value + * @param $spacing (string) letter-spacing value + * @param $parent (float) font spacing (tracking) value of the parent element + * @return float quantity to increases or decreases the space between characters in a text. + * @protected + * @since 5.9.000 (2010-10-02) + */ + protected function getCSSFontSpacing($spacing, $parent=0) { + $val = 0; // value to be returned + $spacing = trim($spacing); + switch ($spacing) { + case 'normal': { + $val = 0; + break; + } + case 'inherit': { + if ($parent == 'normal') { + $val = 0; + } else { + $val = $parent; + } + break; + } + default: { + $val = $this->getHTMLUnitToUnits($spacing, 0, 'px', false); + } + } + return $val; + } + + /** + * Returns the percentage of font stretching from CSS value + * @param $stretch (string) stretch mode + * @param $parent (float) stretch value of the parent element + * @return float font stretching percentage + * @protected + * @since 5.9.000 (2010-10-02) + */ + protected function getCSSFontStretching($stretch, $parent=100) { + $val = 100; // value to be returned + $stretch = trim($stretch); + switch ($stretch) { + case 'ultra-condensed': { + $val = 40; + break; + } + case 'extra-condensed': { + $val = 55; + break; + } + case 'condensed': { + $val = 70; + break; + } + case 'semi-condensed': { + $val = 85; + break; + } + case 'normal': { + $val = 100; + break; + } + case 'semi-expanded': { + $val = 115; + break; + } + case 'expanded': { + $val = 130; + break; + } + case 'extra-expanded': { + $val = 145; + break; + } + case 'ultra-expanded': { + $val = 160; + break; + } + case 'wider': { + $val = ($parent + 10); + break; + } + case 'narrower': { + $val = ($parent - 10); + break; + } + case 'inherit': { + if ($parent == 'normal') { + $val = 100; + } else { + $val = $parent; + } + break; + } + default: { + $val = $this->getHTMLUnitToUnits($stretch, 100, '%', false); + } + } + return $val; + } + + /** + * Convert HTML string containing font size value to points + * @param $val (string) String containing font size value and unit. + * @param $refsize (float) Reference font size in points. + * @param $parent_size (float) Parent font size in points. + * @param $defaultunit (string) Default unit (can be one of the following: %, em, ex, px, in, mm, pc, pt). + * @return float value in points + * @public + */ + public function getHTMLFontUnits($val, $refsize=12, $parent_size=12, $defaultunit='pt') { + $refsize = TCPDF_FONTS::getFontRefSize($refsize); + $parent_size = TCPDF_FONTS::getFontRefSize($parent_size, $refsize); + switch ($val) { + case 'xx-small': { + $size = ($refsize - 4); + break; + } + case 'x-small': { + $size = ($refsize - 3); + break; + } + case 'small': { + $size = ($refsize - 2); + break; + } + case 'medium': { + $size = $refsize; + break; + } + case 'large': { + $size = ($refsize + 2); + break; + } + case 'x-large': { + $size = ($refsize + 4); + break; + } + case 'xx-large': { + $size = ($refsize + 6); + break; + } + case 'smaller': { + $size = ($parent_size - 3); + break; + } + case 'larger': { + $size = ($parent_size + 3); + break; + } + default: { + $size = $this->getHTMLUnitToUnits($val, $parent_size, $defaultunit, true); + } + } + return $size; + } + + /** + * Returns the HTML DOM array. + * @param $html (string) html code + * @return array + * @protected + * @since 3.2.000 (2008-06-20) + */ + protected function getHtmlDomArray($html) { + // array of CSS styles ( selector => properties). + $css = array(); + // get CSS array defined at previous call + $matches = array(); + if (preg_match_all('/<cssarray>([^\<]*)<\/cssarray>/isU', $html, $matches) > 0) { + if (isset($matches[1][0])) { + $css = array_merge($css, json_decode($this->unhtmlentities($matches[1][0]), true)); + } + $html = preg_replace('/<cssarray>(.*?)<\/cssarray>/isU', '', $html); + } + // extract external CSS files + $matches = array(); + if (preg_match_all('/<link([^\>]*)>/isU', $html, $matches) > 0) { + foreach ($matches[1] as $key => $link) { + $type = array(); + if (preg_match('/type[\s]*=[\s]*"text\/css"/', $link, $type)) { + $type = array(); + preg_match('/media[\s]*=[\s]*"([^"]*)"/', $link, $type); + // get 'all' and 'print' media, other media types are discarded + // (all, braille, embossed, handheld, print, projection, screen, speech, tty, tv) + if (empty($type) OR (isset($type[1]) AND (($type[1] == 'all') OR ($type[1] == 'print')))) { + $type = array(); + if (preg_match('/href[\s]*=[\s]*"([^"]*)"/', $link, $type) > 0) { + // read CSS data file + $cssdata = TCPDF_STATIC::fileGetContents(trim($type[1])); + if (($cssdata !== FALSE) AND (strlen($cssdata) > 0)) { + $css = array_merge($css, TCPDF_STATIC::extractCSSproperties($cssdata)); + } + } + } + } + } + } + // extract style tags + $matches = array(); + if (preg_match_all('/<style([^\>]*)>([^\<]*)<\/style>/isU', $html, $matches) > 0) { + foreach ($matches[1] as $key => $media) { + $type = array(); + preg_match('/media[\s]*=[\s]*"([^"]*)"/', $media, $type); + // get 'all' and 'print' media, other media types are discarded + // (all, braille, embossed, handheld, print, projection, screen, speech, tty, tv) + if (empty($type) OR (isset($type[1]) AND (($type[1] == 'all') OR ($type[1] == 'print')))) { + $cssdata = $matches[2][$key]; + $css = array_merge($css, TCPDF_STATIC::extractCSSproperties($cssdata)); + } + } + } + // create a special tag to contain the CSS array (used for table content) + $csstagarray = '<cssarray>'.htmlentities(json_encode($css)).'</cssarray>'; + // remove head and style blocks + $html = preg_replace('/<head([^\>]*)>(.*?)<\/head>/siU', '', $html); + $html = preg_replace('/<style([^\>]*)>([^\<]*)<\/style>/isU', '', $html); + // define block tags + $blocktags = array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table','tr','td'); + // define self-closing tags + $selfclosingtags = array('area','base','basefont','br','hr','input','img','link','meta'); + // remove all unsupported tags (the line below lists all supported tags) + $html = strip_tags($html, '<marker/><a><b><blockquote><body><br><br/><dd><del><div><dl><dt><em><font><form><h1><h2><h3><h4><h5><h6><hr><hr/><i><img><input><label><li><ol><option><p><pre><s><select><small><span><strike><strong><sub><sup><table><tablehead><tcpdf><td><textarea><th><thead><tr><tt><u><ul>'); + //replace some blank characters + $html = preg_replace('/<pre/', '<xre', $html); // preserve pre tag + $html = preg_replace('/<(table|tr|td|th|tcpdf|blockquote|dd|div|dl|dt|form|h1|h2|h3|h4|h5|h6|br|hr|li|ol|ul|p)([^\>]*)>[\n\r\t]+/', '<\\1\\2>', $html); + $html = preg_replace('@(\r\n|\r)@', "\n", $html); + $repTable = array("\t" => ' ', "\0" => ' ', "\x0B" => ' ', "\\" => "\\\\"); + $html = strtr($html, $repTable); + $offset = 0; + while (($offset < strlen($html)) AND ($pos = strpos($html, '</pre>', $offset)) !== false) { + $html_a = substr($html, 0, $offset); + $html_b = substr($html, $offset, ($pos - $offset + 6)); + while (preg_match("'<xre([^\>]*)>(.*?)\n(.*?)</pre>'si", $html_b)) { + // preserve newlines on <pre> tag + $html_b = preg_replace("'<xre([^\>]*)>(.*?)\n(.*?)</pre>'si", "<xre\\1>\\2<br />\\3</pre>", $html_b); + } + while (preg_match("'<xre([^\>]*)>(.*?)".$this->re_space['p']."(.*?)</pre>'".$this->re_space['m'], $html_b)) { + // preserve spaces on <pre> tag + $html_b = preg_replace("'<xre([^\>]*)>(.*?)".$this->re_space['p']."(.*?)</pre>'".$this->re_space['m'], "<xre\\1>\\2&nbsp;\\3</pre>", $html_b); + } + $html = $html_a.$html_b.substr($html, $pos + 6); + $offset = strlen($html_a.$html_b); + } + $offset = 0; + while (($offset < strlen($html)) AND ($pos = strpos($html, '</textarea>', $offset)) !== false) { + $html_a = substr($html, 0, $offset); + $html_b = substr($html, $offset, ($pos - $offset + 11)); + while (preg_match("'<textarea([^\>]*)>(.*?)\n(.*?)</textarea>'si", $html_b)) { + // preserve newlines on <textarea> tag + $html_b = preg_replace("'<textarea([^\>]*)>(.*?)\n(.*?)</textarea>'si", "<textarea\\1>\\2<TBR>\\3</textarea>", $html_b); + $html_b = preg_replace("'<textarea([^\>]*)>(.*?)[\"](.*?)</textarea>'si", "<textarea\\1>\\2''\\3</textarea>", $html_b); + } + $html = $html_a.$html_b.substr($html, $pos + 11); + $offset = strlen($html_a.$html_b); + } + $html = preg_replace('/([\s]*)<option/si', '<option', $html); + $html = preg_replace('/<\/option>([\s]*)/si', '</option>', $html); + $offset = 0; + while (($offset < strlen($html)) AND ($pos = strpos($html, '</option>', $offset)) !== false) { + $html_a = substr($html, 0, $offset); + $html_b = substr($html, $offset, ($pos - $offset + 9)); + while (preg_match("'<option([^\>]*)>(.*?)</option>'si", $html_b)) { + $html_b = preg_replace("'<option([\s]+)value=\"([^\"]*)\"([^\>]*)>(.*?)</option>'si", "\\2#!TaB!#\\4#!NwL!#", $html_b); + $html_b = preg_replace("'<option([^\>]*)>(.*?)</option>'si", "\\2#!NwL!#", $html_b); + } + $html = $html_a.$html_b.substr($html, $pos + 9); + $offset = strlen($html_a.$html_b); + } + if (preg_match("'</select'si", $html)) { + $html = preg_replace("'<select([^\>]*)>'si", "<select\\1 opt=\"", $html); + $html = preg_replace("'#!NwL!#</select>'si", "\" />", $html); + } + $html = str_replace("\n", ' ', $html); + // restore textarea newlines + $html = str_replace('<TBR>', "\n", $html); + // remove extra spaces from code + $html = preg_replace('/[\s]+<\/(table|tr|ul|ol|dl)>/', '</\\1>', $html); + $html = preg_replace('/'.$this->re_space['p'].'+<\/(td|th|li|dt|dd)>/'.$this->re_space['m'], '</\\1>', $html); + $html = preg_replace('/[\s]+<(tr|td|th|li|dt|dd)/', '<\\1', $html); + $html = preg_replace('/'.$this->re_space['p'].'+<(ul|ol|dl|br)/'.$this->re_space['m'], '<\\1', $html); + $html = preg_replace('/<\/(table|tr|td|th|blockquote|dd|dt|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|ul|p)>[\s]+</', '</\\1><', $html); + $html = preg_replace('/<\/(td|th)>/', '<marker style="font-size:0"/></\\1>', $html); + $html = preg_replace('/<\/table>([\s]*)<marker style="font-size:0"\/>/', '</table>', $html); + $html = preg_replace('/'.$this->re_space['p'].'+<img/'.$this->re_space['m'], chr(32).'<img', $html); + $html = preg_replace('/<img([^\>]*)>[\s]+([^\<])/xi', '<img\\1>&nbsp;\\2', $html); + $html = preg_replace('/<img([^\>]*)>/xi', '<img\\1><span><marker style="font-size:0"/></span>', $html); + $html = preg_replace('/<xre/', '<pre', $html); // restore pre tag + $html = preg_replace('/<textarea([^\>]*)>([^\<]*)<\/textarea>/xi', '<textarea\\1 value="\\2" />', $html); + $html = preg_replace('/<li([^\>]*)><\/li>/', '<li\\1>&nbsp;</li>', $html); + $html = preg_replace('/<li([^\>]*)>'.$this->re_space['p'].'*<img/'.$this->re_space['m'], '<li\\1><font size="1">&nbsp;</font><img', $html); + $html = preg_replace('/<([^\>\/]*)>[\s]/', '<\\1>&nbsp;', $html); // preserve some spaces + $html = preg_replace('/[\s]<\/([^\>]*)>/', '&nbsp;</\\1>', $html); // preserve some spaces + $html = preg_replace('/<su([bp])/', '<zws/><su\\1', $html); // fix sub/sup alignment + $html = preg_replace('/<\/su([bp])>/', '</su\\1><zws/>', $html); // fix sub/sup alignment + $html = preg_replace('/'.$this->re_space['p'].'+/'.$this->re_space['m'], chr(32), $html); // replace multiple spaces with a single space + // trim string + $html = $this->stringTrim($html); + // fix br tag after li + $html = preg_replace('/<li><br([^\>]*)>/', '<li> <br\\1>', $html); + // fix first image tag alignment + $html = preg_replace('/^<img/', '<span style="font-size:0"><br /></span> <img', $html, 1); + // pattern for generic tag + $tagpattern = '/(<[^>]+>)/'; + // explodes the string + $a = preg_split($tagpattern, $html, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); + // count elements + $maxel = count($a); + $elkey = 0; + $key = 0; + // create an array of elements + $dom = array(); + $dom[$key] = array(); + // set inheritable properties fot the first void element + // possible inheritable properties are: azimuth, border-collapse, border-spacing, caption-side, color, cursor, direction, empty-cells, font, font-family, font-stretch, font-size, font-size-adjust, font-style, font-variant, font-weight, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, orphans, page, page-break-inside, quotes, speak, speak-header, text-align, text-indent, text-transform, volume, white-space, widows, word-spacing + $dom[$key]['tag'] = false; + $dom[$key]['block'] = false; + $dom[$key]['value'] = ''; + $dom[$key]['parent'] = 0; + $dom[$key]['hide'] = false; + $dom[$key]['fontname'] = $this->FontFamily; + $dom[$key]['fontstyle'] = $this->FontStyle; + $dom[$key]['fontsize'] = $this->FontSizePt; + $dom[$key]['font-stretch'] = $this->font_stretching; + $dom[$key]['letter-spacing'] = $this->font_spacing; + $dom[$key]['stroke'] = $this->textstrokewidth; + $dom[$key]['fill'] = (($this->textrendermode % 2) == 0); + $dom[$key]['clip'] = ($this->textrendermode > 3); + $dom[$key]['line-height'] = $this->cell_height_ratio; + $dom[$key]['bgcolor'] = false; + $dom[$key]['fgcolor'] = $this->fgcolor; // color + $dom[$key]['strokecolor'] = $this->strokecolor; + $dom[$key]['align'] = ''; + $dom[$key]['listtype'] = ''; + $dom[$key]['text-indent'] = 0; + $dom[$key]['text-transform'] = ''; + $dom[$key]['border'] = array(); + $dom[$key]['dir'] = $this->rtl?'rtl':'ltr'; + $thead = false; // true when we are inside the THEAD tag + ++$key; + $level = array(); + array_push($level, 0); // root + while ($elkey < $maxel) { + $dom[$key] = array(); + $element = $a[$elkey]; + $dom[$key]['elkey'] = $elkey; + if (preg_match($tagpattern, $element)) { + // html tag + $element = substr($element, 1, -1); + // get tag name + preg_match('/[\/]?([a-zA-Z0-9]*)/', $element, $tag); + $tagname = strtolower($tag[1]); + // check if we are inside a table header + if ($tagname == 'thead') { + if ($element[0] == '/') { + $thead = false; + } else { + $thead = true; + } + ++$elkey; + continue; + } + $dom[$key]['tag'] = true; + $dom[$key]['value'] = $tagname; + if (in_array($dom[$key]['value'], $blocktags)) { + $dom[$key]['block'] = true; + } else { + $dom[$key]['block'] = false; + } + if ($element[0] == '/') { + // *** closing html tag + $dom[$key]['opening'] = false; + $dom[$key]['parent'] = end($level); + array_pop($level); + $dom[$key]['hide'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['hide']; + $dom[$key]['fontname'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontname']; + $dom[$key]['fontstyle'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontstyle']; + $dom[$key]['fontsize'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontsize']; + $dom[$key]['font-stretch'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['font-stretch']; + $dom[$key]['letter-spacing'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['letter-spacing']; + $dom[$key]['stroke'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['stroke']; + $dom[$key]['fill'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fill']; + $dom[$key]['clip'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['clip']; + $dom[$key]['line-height'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['line-height']; + $dom[$key]['bgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['bgcolor']; + $dom[$key]['fgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fgcolor']; + $dom[$key]['strokecolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['strokecolor']; + $dom[$key]['align'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['align']; + $dom[$key]['text-transform'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['text-transform']; + $dom[$key]['dir'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['dir']; + if (isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'])) { + $dom[$key]['listtype'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype']; + } + // set the number of columns in table tag + if (($dom[$key]['value'] == 'tr') AND (!isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['cols']))) { + $dom[($dom[($dom[$key]['parent'])]['parent'])]['cols'] = $dom[($dom[$key]['parent'])]['cols']; + } + if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) { + $dom[($dom[$key]['parent'])]['content'] = $csstagarray; + for ($i = ($dom[$key]['parent'] + 1); $i < $key; ++$i) { + $dom[($dom[$key]['parent'])]['content'] .= stripslashes($a[$dom[$i]['elkey']]); + } + $key = $i; + // mark nested tables + $dom[($dom[$key]['parent'])]['content'] = str_replace('<table', '<table nested="true"', $dom[($dom[$key]['parent'])]['content']); + // remove thead sections from nested tables + $dom[($dom[$key]['parent'])]['content'] = str_replace('<thead>', '', $dom[($dom[$key]['parent'])]['content']); + $dom[($dom[$key]['parent'])]['content'] = str_replace('</thead>', '', $dom[($dom[$key]['parent'])]['content']); + } + // store header rows on a new table + if (($dom[$key]['value'] == 'tr') AND ($dom[($dom[$key]['parent'])]['thead'] === true)) { + if (TCPDF_STATIC::empty_string($dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'])) { + $dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] = $csstagarray.$a[$dom[($dom[($dom[$key]['parent'])]['parent'])]['elkey']]; + } + for ($i = $dom[$key]['parent']; $i <= $key; ++$i) { + $dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] .= $a[$dom[$i]['elkey']]; + } + if (!isset($dom[($dom[$key]['parent'])]['attribute'])) { + $dom[($dom[$key]['parent'])]['attribute'] = array(); + } + // header elements must be always contained in a single page + $dom[($dom[$key]['parent'])]['attribute']['nobr'] = 'true'; + } + if (($dom[$key]['value'] == 'table') AND (!TCPDF_STATIC::empty_string($dom[($dom[$key]['parent'])]['thead']))) { + // remove the nobr attributes from the table header + $dom[($dom[$key]['parent'])]['thead'] = str_replace(' nobr="true"', '', $dom[($dom[$key]['parent'])]['thead']); + $dom[($dom[$key]['parent'])]['thead'] .= '</tablehead>'; + } + } else { + // *** opening or self-closing html tag + $dom[$key]['opening'] = true; + $dom[$key]['parent'] = end($level); + if ((substr($element, -1, 1) == '/') OR (in_array($dom[$key]['value'], $selfclosingtags))) { + // self-closing tag + $dom[$key]['self'] = true; + } else { + // opening tag + array_push($level, $key); + $dom[$key]['self'] = false; + } + // copy some values from parent + $parentkey = 0; + if ($key > 0) { + $parentkey = $dom[$key]['parent']; + $dom[$key]['hide'] = $dom[$parentkey]['hide']; + $dom[$key]['fontname'] = $dom[$parentkey]['fontname']; + $dom[$key]['fontstyle'] = $dom[$parentkey]['fontstyle']; + $dom[$key]['fontsize'] = $dom[$parentkey]['fontsize']; + $dom[$key]['font-stretch'] = $dom[$parentkey]['font-stretch']; + $dom[$key]['letter-spacing'] = $dom[$parentkey]['letter-spacing']; + $dom[$key]['stroke'] = $dom[$parentkey]['stroke']; + $dom[$key]['fill'] = $dom[$parentkey]['fill']; + $dom[$key]['clip'] = $dom[$parentkey]['clip']; + $dom[$key]['line-height'] = $dom[$parentkey]['line-height']; + $dom[$key]['bgcolor'] = $dom[$parentkey]['bgcolor']; + $dom[$key]['fgcolor'] = $dom[$parentkey]['fgcolor']; + $dom[$key]['strokecolor'] = $dom[$parentkey]['strokecolor']; + $dom[$key]['align'] = $dom[$parentkey]['align']; + $dom[$key]['listtype'] = $dom[$parentkey]['listtype']; + $dom[$key]['text-indent'] = $dom[$parentkey]['text-indent']; + $dom[$key]['text-transform'] = $dom[$parentkey]['text-transform']; + $dom[$key]['border'] = array(); + $dom[$key]['dir'] = $dom[$parentkey]['dir']; + } + // get attributes + preg_match_all('/([^=\s]*)[\s]*=[\s]*"([^"]*)"/', $element, $attr_array, PREG_PATTERN_ORDER); + $dom[$key]['attribute'] = array(); // reset attribute array + while (list($id, $name) = each($attr_array[1])) { + $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id]; + } + if (!empty($css)) { + // merge CSS style to current style + list($dom[$key]['csssel'], $dom[$key]['cssdata']) = TCPDF_STATIC::getCSSdataArray($dom, $key, $css); + $dom[$key]['attribute']['style'] = TCPDF_STATIC::getTagStyleFromCSSarray($dom[$key]['cssdata']); + } + // split style attributes + if (isset($dom[$key]['attribute']['style']) AND !empty($dom[$key]['attribute']['style'])) { + // get style attributes + preg_match_all('/([^;:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER); + $dom[$key]['style'] = array(); // reset style attribute array + while (list($id, $name) = each($style_array[1])) { + // in case of duplicate attribute the last replace the previous + $dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]); + } + // --- get some style attributes --- + // text direction + if (isset($dom[$key]['style']['direction'])) { + $dom[$key]['dir'] = $dom[$key]['style']['direction']; + } + // display + if (isset($dom[$key]['style']['display'])) { + $dom[$key]['hide'] = (trim(strtolower($dom[$key]['style']['display'])) == 'none'); + } + // font family + if (isset($dom[$key]['style']['font-family'])) { + $dom[$key]['fontname'] = $this->getFontFamilyName($dom[$key]['style']['font-family']); + } + // list-style-type + if (isset($dom[$key]['style']['list-style-type'])) { + $dom[$key]['listtype'] = trim(strtolower($dom[$key]['style']['list-style-type'])); + if ($dom[$key]['listtype'] == 'inherit') { + $dom[$key]['listtype'] = $dom[$parentkey]['listtype']; + } + } + // text-indent + if (isset($dom[$key]['style']['text-indent'])) { + $dom[$key]['text-indent'] = $this->getHTMLUnitToUnits($dom[$key]['style']['text-indent']); + if ($dom[$key]['text-indent'] == 'inherit') { + $dom[$key]['text-indent'] = $dom[$parentkey]['text-indent']; + } + } + // text-transform + if (isset($dom[$key]['style']['text-transform'])) { + $dom[$key]['text-transform'] = $dom[$key]['style']['text-transform']; + } + // font size + if (isset($dom[$key]['style']['font-size'])) { + $fsize = trim($dom[$key]['style']['font-size']); + $dom[$key]['fontsize'] = $this->getHTMLFontUnits($fsize, $dom[0]['fontsize'], $dom[$parentkey]['fontsize'], 'pt'); + } + // font-stretch + if (isset($dom[$key]['style']['font-stretch'])) { + $dom[$key]['font-stretch'] = $this->getCSSFontStretching($dom[$key]['style']['font-stretch'], $dom[$parentkey]['font-stretch']); + } + // letter-spacing + if (isset($dom[$key]['style']['letter-spacing'])) { + $dom[$key]['letter-spacing'] = $this->getCSSFontSpacing($dom[$key]['style']['letter-spacing'], $dom[$parentkey]['letter-spacing']); + } + // line-height (internally is the cell height ratio) + if (isset($dom[$key]['style']['line-height'])) { + $lineheight = trim($dom[$key]['style']['line-height']); + switch ($lineheight) { + // A normal line height. This is default + case 'normal': { + $dom[$key]['line-height'] = $dom[0]['line-height']; + break; + } + case 'inherit': { + $dom[$key]['line-height'] = $dom[$parentkey]['line-height']; + } + default: { + if (is_numeric($lineheight)) { + // convert to percentage of font height + $lineheight = ($lineheight * 100).'%'; + } + $dom[$key]['line-height'] = $this->getHTMLUnitToUnits($lineheight, 1, '%', true); + if (substr($lineheight, -1) !== '%') { + if ($dom[$key]['fontsize'] <= 0) { + $dom[$key]['line-height'] = 1; + } else { + $dom[$key]['line-height'] = (($dom[$key]['line-height'] - $this->cell_padding['T'] - $this->cell_padding['B']) / $dom[$key]['fontsize']); + } + } + } + } + } + // font style + if (isset($dom[$key]['style']['font-weight'])) { + if (strtolower($dom[$key]['style']['font-weight'][0]) == 'n') { + if (strpos($dom[$key]['fontstyle'], 'B') !== false) { + $dom[$key]['fontstyle'] = str_replace('B', '', $dom[$key]['fontstyle']); + } + } elseif (strtolower($dom[$key]['style']['font-weight'][0]) == 'b') { + $dom[$key]['fontstyle'] .= 'B'; + } + } + if (isset($dom[$key]['style']['font-style']) AND (strtolower($dom[$key]['style']['font-style'][0]) == 'i')) { + $dom[$key]['fontstyle'] .= 'I'; + } + // font color + if (isset($dom[$key]['style']['color']) AND (!TCPDF_STATIC::empty_string($dom[$key]['style']['color']))) { + $dom[$key]['fgcolor'] = TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['style']['color'], $this->spot_colors); + } elseif ($dom[$key]['value'] == 'a') { + $dom[$key]['fgcolor'] = $this->htmlLinkColorArray; + } + // background color + if (isset($dom[$key]['style']['background-color']) AND (!TCPDF_STATIC::empty_string($dom[$key]['style']['background-color']))) { + $dom[$key]['bgcolor'] = TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['style']['background-color'], $this->spot_colors); + } + // text-decoration + if (isset($dom[$key]['style']['text-decoration'])) { + $decors = explode(' ', strtolower($dom[$key]['style']['text-decoration'])); + foreach ($decors as $dec) { + $dec = trim($dec); + if (!TCPDF_STATIC::empty_string($dec)) { + if ($dec[0] == 'u') { + // underline + $dom[$key]['fontstyle'] .= 'U'; + } elseif ($dec[0] == 'l') { + // line-through + $dom[$key]['fontstyle'] .= 'D'; + } elseif ($dec[0] == 'o') { + // overline + $dom[$key]['fontstyle'] .= 'O'; + } + } + } + } elseif ($dom[$key]['value'] == 'a') { + $dom[$key]['fontstyle'] = $this->htmlLinkFontStyle; + } + // check for width attribute + if (isset($dom[$key]['style']['width'])) { + $dom[$key]['width'] = $dom[$key]['style']['width']; + } + // check for height attribute + if (isset($dom[$key]['style']['height'])) { + $dom[$key]['height'] = $dom[$key]['style']['height']; + } + // check for text alignment + if (isset($dom[$key]['style']['text-align'])) { + $dom[$key]['align'] = strtoupper($dom[$key]['style']['text-align'][0]); + } + // check for CSS border properties + if (isset($dom[$key]['style']['border'])) { + $borderstyle = $this->getCSSBorderStyle($dom[$key]['style']['border']); + if (!empty($borderstyle)) { + $dom[$key]['border']['LTRB'] = $borderstyle; + } + } + if (isset($dom[$key]['style']['border-color'])) { + $brd_colors = preg_split('/[\s]+/', trim($dom[$key]['style']['border-color'])); + if (isset($brd_colors[3])) { + $dom[$key]['border']['L']['color'] = TCPDF_COLORS::convertHTMLColorToDec($brd_colors[3], $this->spot_colors); + } + if (isset($brd_colors[1])) { + $dom[$key]['border']['R']['color'] = TCPDF_COLORS::convertHTMLColorToDec($brd_colors[1], $this->spot_colors); + } + if (isset($brd_colors[0])) { + $dom[$key]['border']['T']['color'] = TCPDF_COLORS::convertHTMLColorToDec($brd_colors[0], $this->spot_colors); + } + if (isset($brd_colors[2])) { + $dom[$key]['border']['B']['color'] = TCPDF_COLORS::convertHTMLColorToDec($brd_colors[2], $this->spot_colors); + } + } + if (isset($dom[$key]['style']['border-width'])) { + $brd_widths = preg_split('/[\s]+/', trim($dom[$key]['style']['border-width'])); + if (isset($brd_widths[3])) { + $dom[$key]['border']['L']['width'] = $this->getCSSBorderWidth($brd_widths[3]); + } + if (isset($brd_widths[1])) { + $dom[$key]['border']['R']['width'] = $this->getCSSBorderWidth($brd_widths[1]); + } + if (isset($brd_widths[0])) { + $dom[$key]['border']['T']['width'] = $this->getCSSBorderWidth($brd_widths[0]); + } + if (isset($brd_widths[2])) { + $dom[$key]['border']['B']['width'] = $this->getCSSBorderWidth($brd_widths[2]); + } + } + if (isset($dom[$key]['style']['border-style'])) { + $brd_styles = preg_split('/[\s]+/', trim($dom[$key]['style']['border-style'])); + if (isset($brd_styles[3]) AND ($brd_styles[3]!='none')) { + $dom[$key]['border']['L']['cap'] = 'square'; + $dom[$key]['border']['L']['join'] = 'miter'; + $dom[$key]['border']['L']['dash'] = $this->getCSSBorderDashStyle($brd_styles[3]); + if ($dom[$key]['border']['L']['dash'] < 0) { + $dom[$key]['border']['L'] = array(); + } + } + if (isset($brd_styles[1])) { + $dom[$key]['border']['R']['cap'] = 'square'; + $dom[$key]['border']['R']['join'] = 'miter'; + $dom[$key]['border']['R']['dash'] = $this->getCSSBorderDashStyle($brd_styles[1]); + if ($dom[$key]['border']['R']['dash'] < 0) { + $dom[$key]['border']['R'] = array(); + } + } + if (isset($brd_styles[0])) { + $dom[$key]['border']['T']['cap'] = 'square'; + $dom[$key]['border']['T']['join'] = 'miter'; + $dom[$key]['border']['T']['dash'] = $this->getCSSBorderDashStyle($brd_styles[0]); + if ($dom[$key]['border']['T']['dash'] < 0) { + $dom[$key]['border']['T'] = array(); + } + } + if (isset($brd_styles[2])) { + $dom[$key]['border']['B']['cap'] = 'square'; + $dom[$key]['border']['B']['join'] = 'miter'; + $dom[$key]['border']['B']['dash'] = $this->getCSSBorderDashStyle($brd_styles[2]); + if ($dom[$key]['border']['B']['dash'] < 0) { + $dom[$key]['border']['B'] = array(); + } + } + } + $cellside = array('L' => 'left', 'R' => 'right', 'T' => 'top', 'B' => 'bottom'); + foreach ($cellside as $bsk => $bsv) { + if (isset($dom[$key]['style']['border-'.$bsv])) { + $borderstyle = $this->getCSSBorderStyle($dom[$key]['style']['border-'.$bsv]); + if (!empty($borderstyle)) { + $dom[$key]['border'][$bsk] = $borderstyle; + } + } + if (isset($dom[$key]['style']['border-'.$bsv.'-color'])) { + $dom[$key]['border'][$bsk]['color'] = TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['style']['border-'.$bsv.'-color'], $this->spot_colors); + } + if (isset($dom[$key]['style']['border-'.$bsv.'-width'])) { + $dom[$key]['border'][$bsk]['width'] = $this->getCSSBorderWidth($dom[$key]['style']['border-'.$bsv.'-width']); + } + if (isset($dom[$key]['style']['border-'.$bsv.'-style'])) { + $dom[$key]['border'][$bsk]['dash'] = $this->getCSSBorderDashStyle($dom[$key]['style']['border-'.$bsv.'-style']); + if ($dom[$key]['border'][$bsk]['dash'] < 0) { + $dom[$key]['border'][$bsk] = array(); + } + } + } + // check for CSS padding properties + if (isset($dom[$key]['style']['padding'])) { + $dom[$key]['padding'] = $this->getCSSPadding($dom[$key]['style']['padding']); + } else { + $dom[$key]['padding'] = $this->cell_padding; + } + foreach ($cellside as $psk => $psv) { + if (isset($dom[$key]['style']['padding-'.$psv])) { + $dom[$key]['padding'][$psk] = $this->getHTMLUnitToUnits($dom[$key]['style']['padding-'.$psv], 0, 'px', false); + } + } + // check for CSS margin properties + if (isset($dom[$key]['style']['margin'])) { + $dom[$key]['margin'] = $this->getCSSMargin($dom[$key]['style']['margin']); + } else { + $dom[$key]['margin'] = $this->cell_margin; + } + foreach ($cellside as $psk => $psv) { + if (isset($dom[$key]['style']['margin-'.$psv])) { + $dom[$key]['margin'][$psk] = $this->getHTMLUnitToUnits(str_replace('auto', '0', $dom[$key]['style']['margin-'.$psv]), 0, 'px', false); + } + } + // check for CSS border-spacing properties + if (isset($dom[$key]['style']['border-spacing'])) { + $dom[$key]['border-spacing'] = $this->getCSSBorderMargin($dom[$key]['style']['border-spacing']); + } + // page-break-inside + if (isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside'] == 'avoid')) { + $dom[$key]['attribute']['nobr'] = 'true'; + } + // page-break-before + if (isset($dom[$key]['style']['page-break-before'])) { + if ($dom[$key]['style']['page-break-before'] == 'always') { + $dom[$key]['attribute']['pagebreak'] = 'true'; + } elseif ($dom[$key]['style']['page-break-before'] == 'left') { + $dom[$key]['attribute']['pagebreak'] = 'left'; + } elseif ($dom[$key]['style']['page-break-before'] == 'right') { + $dom[$key]['attribute']['pagebreak'] = 'right'; + } + } + // page-break-after + if (isset($dom[$key]['style']['page-break-after'])) { + if ($dom[$key]['style']['page-break-after'] == 'always') { + $dom[$key]['attribute']['pagebreakafter'] = 'true'; + } elseif ($dom[$key]['style']['page-break-after'] == 'left') { + $dom[$key]['attribute']['pagebreakafter'] = 'left'; + } elseif ($dom[$key]['style']['page-break-after'] == 'right') { + $dom[$key]['attribute']['pagebreakafter'] = 'right'; + } + } + } + if (isset($dom[$key]['attribute']['display'])) { + $dom[$key]['hide'] = (trim(strtolower($dom[$key]['attribute']['display'])) == 'none'); + } + if (isset($dom[$key]['attribute']['border']) AND ($dom[$key]['attribute']['border'] != 0)) { + $borderstyle = $this->getCSSBorderStyle($dom[$key]['attribute']['border'].' solid black'); + if (!empty($borderstyle)) { + $dom[$key]['border']['LTRB'] = $borderstyle; + } + } + // check for font tag + if ($dom[$key]['value'] == 'font') { + // font family + if (isset($dom[$key]['attribute']['face'])) { + $dom[$key]['fontname'] = $this->getFontFamilyName($dom[$key]['attribute']['face']); + } + // font size + if (isset($dom[$key]['attribute']['size'])) { + if ($key > 0) { + if ($dom[$key]['attribute']['size'][0] == '+') { + $dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] + intval(substr($dom[$key]['attribute']['size'], 1)); + } elseif ($dom[$key]['attribute']['size'][0] == '-') { + $dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] - intval(substr($dom[$key]['attribute']['size'], 1)); + } else { + $dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']); + } + } else { + $dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']); + } + } + } + // force natural alignment for lists + if ((($dom[$key]['value'] == 'ul') OR ($dom[$key]['value'] == 'ol') OR ($dom[$key]['value'] == 'dl')) + AND (!isset($dom[$key]['align']) OR TCPDF_STATIC::empty_string($dom[$key]['align']) OR ($dom[$key]['align'] != 'J'))) { + if ($this->rtl) { + $dom[$key]['align'] = 'R'; + } else { + $dom[$key]['align'] = 'L'; + } + } + if (($dom[$key]['value'] == 'small') OR ($dom[$key]['value'] == 'sup') OR ($dom[$key]['value'] == 'sub')) { + if (!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])) { + $dom[$key]['fontsize'] = $dom[$key]['fontsize'] * K_SMALL_RATIO; + } + } + if (($dom[$key]['value'] == 'strong') OR ($dom[$key]['value'] == 'b')) { + $dom[$key]['fontstyle'] .= 'B'; + } + if (($dom[$key]['value'] == 'em') OR ($dom[$key]['value'] == 'i')) { + $dom[$key]['fontstyle'] .= 'I'; + } + if ($dom[$key]['value'] == 'u') { + $dom[$key]['fontstyle'] .= 'U'; + } + if (($dom[$key]['value'] == 'del') OR ($dom[$key]['value'] == 's') OR ($dom[$key]['value'] == 'strike')) { + $dom[$key]['fontstyle'] .= 'D'; + } + if (!isset($dom[$key]['style']['text-decoration']) AND ($dom[$key]['value'] == 'a')) { + $dom[$key]['fontstyle'] = $this->htmlLinkFontStyle; + } + if (($dom[$key]['value'] == 'pre') OR ($dom[$key]['value'] == 'tt')) { + $dom[$key]['fontname'] = $this->default_monospaced_font; + } + if (!empty($dom[$key]['value']) AND ($dom[$key]['value'][0] == 'h') AND (intval($dom[$key]['value']{1}) > 0) AND (intval($dom[$key]['value']{1}) < 7)) { + // headings h1, h2, h3, h4, h5, h6 + if (!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])) { + $headsize = (4 - intval($dom[$key]['value']{1})) * 2; + $dom[$key]['fontsize'] = $dom[0]['fontsize'] + $headsize; + } + if (!isset($dom[$key]['style']['font-weight'])) { + $dom[$key]['fontstyle'] .= 'B'; + } + } + if (($dom[$key]['value'] == 'table')) { + $dom[$key]['rows'] = 0; // number of rows + $dom[$key]['trids'] = array(); // IDs of TR elements + $dom[$key]['thead'] = ''; // table header rows + } + if (($dom[$key]['value'] == 'tr')) { + $dom[$key]['cols'] = 0; + if ($thead) { + $dom[$key]['thead'] = true; + // rows on thead block are printed as a separate table + } else { + $dom[$key]['thead'] = false; + // store the number of rows on table element + ++$dom[($dom[$key]['parent'])]['rows']; + // store the TR elements IDs on table element + array_push($dom[($dom[$key]['parent'])]['trids'], $key); + } + } + if (($dom[$key]['value'] == 'th') OR ($dom[$key]['value'] == 'td')) { + if (isset($dom[$key]['attribute']['colspan'])) { + $colspan = intval($dom[$key]['attribute']['colspan']); + } else { + $colspan = 1; + } + $dom[$key]['attribute']['colspan'] = $colspan; + $dom[($dom[$key]['parent'])]['cols'] += $colspan; + } + // text direction + if (isset($dom[$key]['attribute']['dir'])) { + $dom[$key]['dir'] = $dom[$key]['attribute']['dir']; + } + // set foreground color attribute + if (isset($dom[$key]['attribute']['color']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['color']))) { + $dom[$key]['fgcolor'] = TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['attribute']['color'], $this->spot_colors); + } elseif (!isset($dom[$key]['style']['color']) AND ($dom[$key]['value'] == 'a')) { + $dom[$key]['fgcolor'] = $this->htmlLinkColorArray; + } + // set background color attribute + if (isset($dom[$key]['attribute']['bgcolor']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['bgcolor']))) { + $dom[$key]['bgcolor'] = TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['attribute']['bgcolor'], $this->spot_colors); + } + // set stroke color attribute + if (isset($dom[$key]['attribute']['strokecolor']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['strokecolor']))) { + $dom[$key]['strokecolor'] = TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['attribute']['strokecolor'], $this->spot_colors); + } + // check for width attribute + if (isset($dom[$key]['attribute']['width'])) { + $dom[$key]['width'] = $dom[$key]['attribute']['width']; + } + // check for height attribute + if (isset($dom[$key]['attribute']['height'])) { + $dom[$key]['height'] = $dom[$key]['attribute']['height']; + } + // check for text alignment + if (isset($dom[$key]['attribute']['align']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['align'])) AND ($dom[$key]['value'] !== 'img')) { + $dom[$key]['align'] = strtoupper($dom[$key]['attribute']['align'][0]); + } + // check for text rendering mode (the following attributes do not exist in HTML) + if (isset($dom[$key]['attribute']['stroke'])) { + // font stroke width + $dom[$key]['stroke'] = $this->getHTMLUnitToUnits($dom[$key]['attribute']['stroke'], $dom[$key]['fontsize'], 'pt', true); + } + if (isset($dom[$key]['attribute']['fill'])) { + // font fill + if ($dom[$key]['attribute']['fill'] == 'true') { + $dom[$key]['fill'] = true; + } else { + $dom[$key]['fill'] = false; + } + } + if (isset($dom[$key]['attribute']['clip'])) { + // clipping mode + if ($dom[$key]['attribute']['clip'] == 'true') { + $dom[$key]['clip'] = true; + } else { + $dom[$key]['clip'] = false; + } + } + } // end opening tag + } else { + // text + $dom[$key]['tag'] = false; + $dom[$key]['block'] = false; + $dom[$key]['parent'] = end($level); + $dom[$key]['dir'] = $dom[$dom[$key]['parent']]['dir']; + if (!empty($dom[$dom[$key]['parent']]['text-transform'])) { + // text-transform for unicode requires mb_convert_case (Multibyte String Functions) + if (function_exists('mb_convert_case')) { + $ttm = array('capitalize' => MB_CASE_TITLE, 'uppercase' => MB_CASE_UPPER, 'lowercase' => MB_CASE_LOWER); + if (isset($ttm[$dom[$dom[$key]['parent']]['text-transform']])) { + $element = mb_convert_case($element, $ttm[$dom[$dom[$key]['parent']]['text-transform']], $this->encoding); + } + } elseif (!$this->isunicode) { + switch ($dom[$dom[$key]['parent']]['text-transform']) { + case 'capitalize': { + $element = ucwords(strtolower($element)); + break; + } + case 'uppercase': { + $element = strtoupper($element); + break; + } + case 'lowercase': { + $element = strtolower($element); + break; + } + } + } + } + $dom[$key]['value'] = stripslashes($this->unhtmlentities($element)); + } + ++$elkey; + ++$key; + } + return $dom; + } + + /** + * Returns the string used to find spaces + * @return string + * @protected + * @author Nicola Asuni + * @since 4.8.024 (2010-01-15) + */ + protected function getSpaceString() { + $spacestr = chr(32); + if ($this->isUnicodeFont()) { + $spacestr = chr(0).chr(32); + } + return $spacestr; + } + + /** + * Return an hash code used to ensure that the serialized data has been generated by this TCPDF instance. + * @param $data (string) serialized data + * @return string + * @public static + */ + protected function getHashForTCPDFtagParams($data) { + return md5(strlen($data).$this->file_id.$data); + } + + /** + * Serialize an array of parameters to be used with TCPDF tag in HTML code. + * @param $data (array) parameters array + * @return string containing serialized data + * @public static + */ + public function serializeTCPDFtagParameters($data) { + $encoded = urlencode(json_encode($data)); + return $this->getHashForTCPDFtagParams($encoded).$encoded; + } + + /** + * Unserialize parameters to be used with TCPDF tag in HTML code. + * @param $data (string) serialized data + * @return array containing unserialized data + * @protected static + */ + protected function unserializeTCPDFtagParameters($data) { + $hash = substr($data, 0, 32); + $encoded = substr($data, 32); + if ($hash != $this->getHashForTCPDFtagParams($encoded)) { + $this->Error('Invalid parameters'); + } + return json_decode(urldecode($encoded), true); + } + + /** + * Prints a cell (rectangular area) with optional borders, background color and html text string. + * The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.<br /> + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * IMPORTANT: The HTML must be well formatted - try to clean-up it using an application like HTML-Tidy before submitting. + * Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, small, span, strong, sub, sup, table, tcpdf, td, th, thead, tr, tt, u, ul + * NOTE: all the HTML attributes must be enclosed in double-quote. + * @param $w (float) Cell width. If 0, the cell extends up to the right margin. + * @param $h (float) Cell minimum height. The cell extends automatically if needed. + * @param $x (float) upper-left corner X coordinate + * @param $y (float) upper-left corner Y coordinate + * @param $html (string) html text to print. Default value: empty string. + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $ln (int) Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul> +Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param $fill (boolean) Indicates if the cell background must be painted (true) or transparent (false). + * @param $reseth (boolean) if true reset the last cell height (default true). + * @param $align (string) Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul> + * @param $autopadding (boolean) if true, uses internal padding and automatically adjust it to account for line width. + * @see Multicell(), writeHTML() + * @public + */ + public function writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true) { + return $this->MultiCell($w, $h, $html, $border, $align, $fill, $ln, $x, $y, $reseth, 0, true, $autopadding, 0, 'T', false); + } + + /** + * Allows to preserve some HTML formatting (limited support).<br /> + * IMPORTANT: The HTML must be well formatted - try to clean-up it using an application like HTML-Tidy before submitting. + * Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, small, span, strong, sub, sup, table, tcpdf, td, th, thead, tr, tt, u, ul + * NOTE: all the HTML attributes must be enclosed in double-quote. + * @param $html (string) text to display + * @param $ln (boolean) if true add a new line after text (default = true) + * @param $fill (boolean) Indicates if the background must be painted (true) or transparent (false). + * @param $reseth (boolean) if true reset the last cell height (default false). + * @param $cell (boolean) if true add the current left (or right for RTL) padding to each Write (default false). + * @param $align (string) Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul> + * @public + */ + public function writeHTML($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='') { + $gvars = $this->getGraphicVars(); + // store current values + $prev_cell_margin = $this->cell_margin; + $prev_cell_padding = $this->cell_padding; + $prevPage = $this->page; + $prevlMargin = $this->lMargin; + $prevrMargin = $this->rMargin; + $curfontname = $this->FontFamily; + $curfontstyle = $this->FontStyle; + $curfontsize = $this->FontSizePt; + $curfontascent = $this->getFontAscent($curfontname, $curfontstyle, $curfontsize); + $curfontdescent = $this->getFontDescent($curfontname, $curfontstyle, $curfontsize); + $curfontstretcing = $this->font_stretching; + $curfonttracking = $this->font_spacing; + $this->newline = true; + $newline = true; + $startlinepage = $this->page; + $minstartliney = $this->y; + $maxbottomliney = 0; + $startlinex = $this->x; + $startliney = $this->y; + $yshift = 0; + $loop = 0; + $curpos = 0; + $this_method_vars = array(); + $undo = false; + $fontaligned = false; + $reverse_dir = false; // true when the text direction is reversed + $this->premode = false; + if ($this->inxobj) { + // we are inside an XObject template + $pask = count($this->xobjects[$this->xobjid]['annotations']); + } elseif (isset($this->PageAnnots[$this->page])) { + $pask = count($this->PageAnnots[$this->page]); + } else { + $pask = 0; + } + if ($this->inxobj) { + // we are inside an XObject template + $startlinepos = strlen($this->xobjects[$this->xobjid]['outdata']); + } elseif (!$this->InFooter) { + if (isset($this->footerlen[$this->page])) { + $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page]; + } else { + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + } + $startlinepos = $this->footerpos[$this->page]; + } else { + // we are inside the footer + $startlinepos = $this->pagelen[$this->page]; + } + $lalign = $align; + $plalign = $align; + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + $w -= ($this->cell_padding['L'] + $this->cell_padding['R']); + if ($cell) { + if ($this->rtl) { + $this->x -= $this->cell_padding['R']; + $this->lMargin += $this->cell_padding['R']; + } else { + $this->x += $this->cell_padding['L']; + $this->rMargin += $this->cell_padding['L']; + } + } + if ($this->customlistindent >= 0) { + $this->listindent = $this->customlistindent; + } else { + $this->listindent = $this->GetStringWidth('000000'); + } + $this->listindentlevel = 0; + // save previous states + $prev_cell_height_ratio = $this->cell_height_ratio; + $prev_listnum = $this->listnum; + $prev_listordered = $this->listordered; + $prev_listcount = $this->listcount; + $prev_lispacer = $this->lispacer; + $this->listnum = 0; + $this->listordered = array(); + $this->listcount = array(); + $this->lispacer = ''; + if ((TCPDF_STATIC::empty_string($this->lasth)) OR ($reseth)) { + // reset row height + $this->resetLastH(); + } + $dom = $this->getHtmlDomArray($html); + $maxel = count($dom); + $key = 0; + while ($key < $maxel) { + if ($dom[$key]['tag'] AND $dom[$key]['opening'] AND $dom[$key]['hide']) { + // store the node key + $hidden_node_key = $key; + if ($dom[$key]['self']) { + // skip just this self-closing tag + ++$key; + } else { + // skip this and all children tags + while (($key < $maxel) AND (!$dom[$key]['tag'] OR $dom[$key]['opening'] OR ($dom[$key]['parent'] != $hidden_node_key))) { + // skip hidden objects + ++$key; + } + ++$key; + } + } + if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) { + // check for pagebreak + if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + $this->htmlvspace = ($this->PageBreakTrigger + 1); + } + if ((($dom[$key]['attribute']['pagebreak'] == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0)))) + OR (($dom[$key]['attribute']['pagebreak'] == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + $this->htmlvspace = ($this->PageBreakTrigger + 1); + } + } + if ($dom[$key]['tag'] AND $dom[$key]['opening'] AND isset($dom[$key]['attribute']['nobr']) AND ($dom[$key]['attribute']['nobr'] == 'true')) { + if (isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr'] == 'true')) { + $dom[$key]['attribute']['nobr'] = false; + } else { + // store current object + $this->startTransaction(); + // save this method vars + $this_method_vars['html'] = $html; + $this_method_vars['ln'] = $ln; + $this_method_vars['fill'] = $fill; + $this_method_vars['reseth'] = $reseth; + $this_method_vars['cell'] = $cell; + $this_method_vars['align'] = $align; + $this_method_vars['gvars'] = $gvars; + $this_method_vars['prevPage'] = $prevPage; + $this_method_vars['prev_cell_margin'] = $prev_cell_margin; + $this_method_vars['prev_cell_padding'] = $prev_cell_padding; + $this_method_vars['prevlMargin'] = $prevlMargin; + $this_method_vars['prevrMargin'] = $prevrMargin; + $this_method_vars['curfontname'] = $curfontname; + $this_method_vars['curfontstyle'] = $curfontstyle; + $this_method_vars['curfontsize'] = $curfontsize; + $this_method_vars['curfontascent'] = $curfontascent; + $this_method_vars['curfontdescent'] = $curfontdescent; + $this_method_vars['curfontstretcing'] = $curfontstretcing; + $this_method_vars['curfonttracking'] = $curfonttracking; + $this_method_vars['minstartliney'] = $minstartliney; + $this_method_vars['maxbottomliney'] = $maxbottomliney; + $this_method_vars['yshift'] = $yshift; + $this_method_vars['startlinepage'] = $startlinepage; + $this_method_vars['startlinepos'] = $startlinepos; + $this_method_vars['startlinex'] = $startlinex; + $this_method_vars['startliney'] = $startliney; + $this_method_vars['newline'] = $newline; + $this_method_vars['loop'] = $loop; + $this_method_vars['curpos'] = $curpos; + $this_method_vars['pask'] = $pask; + $this_method_vars['lalign'] = $lalign; + $this_method_vars['plalign'] = $plalign; + $this_method_vars['w'] = $w; + $this_method_vars['prev_cell_height_ratio'] = $prev_cell_height_ratio; + $this_method_vars['prev_listnum'] = $prev_listnum; + $this_method_vars['prev_listordered'] = $prev_listordered; + $this_method_vars['prev_listcount'] = $prev_listcount; + $this_method_vars['prev_lispacer'] = $prev_lispacer; + $this_method_vars['fontaligned'] = $fontaligned; + $this_method_vars['key'] = $key; + $this_method_vars['dom'] = $dom; + } + } + // print THEAD block + if (($dom[$key]['value'] == 'tr') AND isset($dom[$key]['thead']) AND $dom[$key]['thead']) { + if (isset($dom[$key]['parent']) AND isset($dom[$dom[$key]['parent']]['thead']) AND !TCPDF_STATIC::empty_string($dom[$dom[$key]['parent']]['thead'])) { + $this->inthead = true; + // print table header (thead) + $this->writeHTML($this->thead, false, false, false, false, ''); + // check if we are on a new page or on a new column + if (($this->y < $this->start_transaction_y) OR ($this->checkPageBreak($this->lasth, '', false))) { + // we are on a new page or on a new column and the total object height is less than the available vertical space. + // restore previous object + $this->rollbackTransaction(true); + // restore previous values + foreach ($this_method_vars as $vkey => $vval) { + $$vkey = $vval; + } + // disable table header + $tmp_thead = $this->thead; + $this->thead = ''; + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $pre_y = $this->y; + if ((!$this->checkPageBreak($this->PageBreakTrigger + 1)) AND ($this->y < $pre_y)) { + // fix for multicolumn mode + $startliney = $this->y; + } + $this->start_transaction_page = $this->page; + $this->start_transaction_y = $this->y; + // restore table header + $this->thead = $tmp_thead; + // fix table border properties + if (isset($dom[$dom[$key]['parent']]['attribute']['cellspacing'])) { + $tmp_cellspacing = $this->getHTMLUnitToUnits($dom[$dom[$key]['parent']]['attribute']['cellspacing'], 1, 'px'); + } elseif (isset($dom[$dom[$key]['parent']]['border-spacing'])) { + $tmp_cellspacing = $dom[$dom[$key]['parent']]['border-spacing']['V']; + } else { + $tmp_cellspacing = 0; + } + $dom[$dom[$key]['parent']]['borderposition']['page'] = $this->page; + $dom[$dom[$key]['parent']]['borderposition']['column'] = $this->current_column; + $dom[$dom[$key]['parent']]['borderposition']['y'] = $this->y + $tmp_cellspacing; + $xoffset = ($this->x - $dom[$dom[$key]['parent']]['borderposition']['x']); + $dom[$dom[$key]['parent']]['borderposition']['x'] += $xoffset; + $dom[$dom[$key]['parent']]['borderposition']['xmax'] += $xoffset; + // print table header (thead) + $this->writeHTML($this->thead, false, false, false, false, ''); + } + } + // move $key index forward to skip THEAD block + while ( ($key < $maxel) AND (!( + ($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value'] == 'tr') AND (!isset($dom[$key]['thead']) OR !$dom[$key]['thead'])) + OR ($dom[$key]['tag'] AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == 'table'))) )) { + ++$key; + } + } + if ($dom[$key]['tag'] OR ($key == 0)) { + if ((($dom[$key]['value'] == 'table') OR ($dom[$key]['value'] == 'tr')) AND (isset($dom[$key]['align']))) { + $dom[$key]['align'] = ($this->rtl) ? 'R' : 'L'; + } + // vertically align image in line + if ((!$this->newline) AND ($dom[$key]['value'] == 'img') AND (isset($dom[$key]['height'])) AND ($dom[$key]['height'] > 0)) { + // get image height + $imgh = $this->getHTMLUnitToUnits($dom[$key]['height'], ($dom[$key]['fontsize'] / $this->k), 'px'); + $autolinebreak = false; + if (!empty($dom[$key]['width'])) { + $imgw = $this->getHTMLUnitToUnits($dom[$key]['width'], ($dom[$key]['fontsize'] / $this->k), 'px', false); + if (($imgw <= ($this->w - $this->lMargin - $this->rMargin - $this->cell_padding['L'] - $this->cell_padding['R'])) + AND ((($this->rtl) AND (($this->x - $imgw) < ($this->lMargin + $this->cell_padding['L']))) + OR ((!$this->rtl) AND (($this->x + $imgw) > ($this->w - $this->rMargin - $this->cell_padding['R']))))) { + // add automatic line break + $autolinebreak = true; + $this->Ln('', $cell); + if ((!$dom[($key-1)]['tag']) AND ($dom[($key-1)]['value'] == ' ')) { + // go back to evaluate this line break + --$key; + } + } + } + if (!$autolinebreak) { + if ($this->inPageBody()) { + $pre_y = $this->y; + // check for page break + if ((!$this->checkPageBreak($imgh)) AND ($this->y < $pre_y)) { + // fix for multicolumn mode + $startliney = $this->y; + } + } + if ($this->page > $startlinepage) { + // fix line splitted over two pages + if (isset($this->footerlen[$startlinepage])) { + $curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + } + // line to be moved one page forward + $pagebuff = $this->getPageBuffer($startlinepage); + $linebeg = substr($pagebuff, $startlinepos, ($curpos - $startlinepos)); + $tstart = substr($pagebuff, 0, $startlinepos); + $tend = substr($this->getPageBuffer($startlinepage), $curpos); + // remove line from previous page + $this->setPageBuffer($startlinepage, $tstart.''.$tend); + $pagebuff = $this->getPageBuffer($this->page); + $tstart = substr($pagebuff, 0, $this->cntmrk[$this->page]); + $tend = substr($pagebuff, $this->cntmrk[$this->page]); + // add line start to current page + $yshift = ($minstartliney - $this->y); + if ($fontaligned) { + $yshift += ($curfontsize / $this->k); + } + $try = sprintf('1 0 0 1 0 %F cm', ($yshift * $this->k)); + $this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + $next_pask = count($this->PageAnnots[$this->page]); + } else { + $next_pask = 0; + } + if (isset($this->PageAnnots[$startlinepage])) { + foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][] = $pac; + unset($this->PageAnnots[$startlinepage][$pak]); + $npak = count($this->PageAnnots[$this->page]) - 1; + $this->PageAnnots[$this->page][$npak]['y'] -= $yshift; + } + } + } + $pask = $next_pask; + $startlinepos = $this->cntmrk[$this->page]; + $startlinepage = $this->page; + $startliney = $this->y; + $this->newline = false; + } + $this->y += ($this->getCellHeight($curfontsize / $this->k) - ($curfontdescent * $this->cell_height_ratio) - $imgh); + $minstartliney = min($this->y, $minstartliney); + $maxbottomliney = ($startliney + $this->getCellHeight($curfontsize / $this->k)); + } + } elseif (isset($dom[$key]['fontname']) OR isset($dom[$key]['fontstyle']) OR isset($dom[$key]['fontsize']) OR isset($dom[$key]['line-height'])) { + // account for different font size + $pfontname = $curfontname; + $pfontstyle = $curfontstyle; + $pfontsize = $curfontsize; + $fontname = (isset($dom[$key]['fontname']) ? $dom[$key]['fontname'] : $curfontname); + $fontstyle = (isset($dom[$key]['fontstyle']) ? $dom[$key]['fontstyle'] : $curfontstyle); + $fontsize = (isset($dom[$key]['fontsize']) ? $dom[$key]['fontsize'] : $curfontsize); + $fontascent = $this->getFontAscent($fontname, $fontstyle, $fontsize); + $fontdescent = $this->getFontDescent($fontname, $fontstyle, $fontsize); + if (($fontname != $curfontname) OR ($fontstyle != $curfontstyle) OR ($fontsize != $curfontsize) + OR ($this->cell_height_ratio != $dom[$key]['line-height']) + OR ($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value'] == 'li')) ) { + if (($key < ($maxel - 1)) AND ( + ($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value'] == 'li')) + OR ($this->cell_height_ratio != $dom[$key]['line-height']) + OR (!$this->newline AND is_numeric($fontsize) AND is_numeric($curfontsize) + AND ($fontsize >= 0) AND ($curfontsize >= 0) + AND (($fontsize != $curfontsize) OR ($fontstyle != $curfontstyle) OR ($fontname != $curfontname))) + )) { + if ($this->page > $startlinepage) { + // fix lines splitted over two pages + if (isset($this->footerlen[$startlinepage])) { + $curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + } + // line to be moved one page forward + $pagebuff = $this->getPageBuffer($startlinepage); + $linebeg = substr($pagebuff, $startlinepos, ($curpos - $startlinepos)); + $tstart = substr($pagebuff, 0, $startlinepos); + $tend = substr($this->getPageBuffer($startlinepage), $curpos); + // remove line start from previous page + $this->setPageBuffer($startlinepage, $tstart.''.$tend); + $pagebuff = $this->getPageBuffer($this->page); + $tstart = substr($pagebuff, 0, $this->cntmrk[$this->page]); + $tend = substr($pagebuff, $this->cntmrk[$this->page]); + // add line start to current page + $yshift = ($minstartliney - $this->y); + $try = sprintf('1 0 0 1 0 %F cm', ($yshift * $this->k)); + $this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + $next_pask = count($this->PageAnnots[$this->page]); + } else { + $next_pask = 0; + } + if (isset($this->PageAnnots[$startlinepage])) { + foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][] = $pac; + unset($this->PageAnnots[$startlinepage][$pak]); + $npak = count($this->PageAnnots[$this->page]) - 1; + $this->PageAnnots[$this->page][$npak]['y'] -= $yshift; + } + } + } + $pask = $next_pask; + $startlinepos = $this->cntmrk[$this->page]; + $startlinepage = $this->page; + $startliney = $this->y; + } + if (!isset($dom[$key]['line-height'])) { + $dom[$key]['line-height'] = $this->cell_height_ratio; + } + if (!$dom[$key]['block']) { + if (!(isset($dom[($key + 1)]) AND $dom[($key + 1)]['tag'] AND (!$dom[($key + 1)]['opening']) AND ($dom[($key + 1)]['value'] != 'li') AND $dom[$key]['tag'] AND (!$dom[$key]['opening']))) { + $this->y += (((($curfontsize * $this->cell_height_ratio) - ($fontsize * $dom[$key]['line-height'])) / $this->k) + $curfontascent - $fontascent - $curfontdescent + $fontdescent) / 2; + } + if (($dom[$key]['value'] != 'sup') AND ($dom[$key]['value'] != 'sub')) { + $current_line_align_data = array($key, $minstartliney, $maxbottomliney); + if (isset($line_align_data) AND (($line_align_data[0] == ($key - 1)) OR (($line_align_data[0] == ($key - 2)) AND (isset($dom[($key - 1)])) AND (preg_match('/^([\s]+)$/', $dom[($key - 1)]['value']) > 0)))) { + $minstartliney = min($this->y, $line_align_data[1]); + $maxbottomliney = max(($this->y + $this->getCellHeight($fontsize / $this->k)), $line_align_data[2]); + } else { + $minstartliney = min($this->y, $minstartliney); + $maxbottomliney = max(($this->y + $this->getCellHeight($fontsize / $this->k)), $maxbottomliney); + } + $line_align_data = $current_line_align_data; + } + } + $this->cell_height_ratio = $dom[$key]['line-height']; + $fontaligned = true; + } + $this->SetFont($fontname, $fontstyle, $fontsize); + // reset row height + $this->resetLastH(); + $curfontname = $fontname; + $curfontstyle = $fontstyle; + $curfontsize = $fontsize; + $curfontascent = $fontascent; + $curfontdescent = $fontdescent; + } + } + // set text rendering mode + $textstroke = isset($dom[$key]['stroke']) ? $dom[$key]['stroke'] : $this->textstrokewidth; + $textfill = isset($dom[$key]['fill']) ? $dom[$key]['fill'] : (($this->textrendermode % 2) == 0); + $textclip = isset($dom[$key]['clip']) ? $dom[$key]['clip'] : ($this->textrendermode > 3); + $this->setTextRenderingMode($textstroke, $textfill, $textclip); + if (isset($dom[$key]['font-stretch']) AND ($dom[$key]['font-stretch'] !== false)) { + $this->setFontStretching($dom[$key]['font-stretch']); + } + if (isset($dom[$key]['letter-spacing']) AND ($dom[$key]['letter-spacing'] !== false)) { + $this->setFontSpacing($dom[$key]['letter-spacing']); + } + if (($plalign == 'J') AND $dom[$key]['block']) { + $plalign = ''; + } + // get current position on page buffer + $curpos = $this->pagelen[$startlinepage]; + if (isset($dom[$key]['bgcolor']) AND ($dom[$key]['bgcolor'] !== false)) { + $this->SetFillColorArray($dom[$key]['bgcolor']); + $wfill = true; + } else { + $wfill = $fill | false; + } + if (isset($dom[$key]['fgcolor']) AND ($dom[$key]['fgcolor'] !== false)) { + $this->SetTextColorArray($dom[$key]['fgcolor']); + } + if (isset($dom[$key]['strokecolor']) AND ($dom[$key]['strokecolor'] !== false)) { + $this->SetDrawColorArray($dom[$key]['strokecolor']); + } + if (isset($dom[$key]['align'])) { + $lalign = $dom[$key]['align']; + } + if (TCPDF_STATIC::empty_string($lalign)) { + $lalign = $align; + } + } + // align lines + if ($this->newline AND (strlen($dom[$key]['value']) > 0) AND ($dom[$key]['value'] != 'td') AND ($dom[$key]['value'] != 'th')) { + $newline = true; + $fontaligned = false; + // we are at the beginning of a new line + if (isset($startlinex)) { + $yshift = ($minstartliney - $startliney); + if (($yshift > 0) OR ($this->page > $startlinepage)) { + $yshift = 0; + } + $t_x = 0; + // the last line must be shifted to be aligned as requested + $linew = abs($this->endlinex - $startlinex); + if ($this->inxobj) { + // we are inside an XObject template + $pstart = substr($this->xobjects[$this->xobjid]['outdata'], 0, $startlinepos); + if (isset($opentagpos)) { + $midpos = $opentagpos; + } else { + $midpos = 0; + } + if ($midpos > 0) { + $pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos, ($midpos - $startlinepos)); + $pend = substr($this->xobjects[$this->xobjid]['outdata'], $midpos); + } else { + $pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos); + $pend = ''; + } + } else { + $pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos); + if (isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = min($opentagpos, $this->footerpos[$startlinepage]); + } elseif (isset($opentagpos)) { + $midpos = $opentagpos; + } elseif (isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = $this->footerpos[$startlinepage]; + } else { + $midpos = 0; + } + if ($midpos > 0) { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos)); + $pend = substr($this->getPageBuffer($startlinepage), $midpos); + } else { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos); + $pend = ''; + } + } + if ((isset($plalign) AND ((($plalign == 'C') OR ($plalign == 'J') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl)))))) { + // calculate shifting amount + $tw = $w; + if (($plalign == 'J') AND $this->isRTLTextDir() AND ($this->num_columns > 1)) { + $tw += $this->cell_padding['R']; + } + if ($this->lMargin != $prevlMargin) { + $tw += ($prevlMargin - $this->lMargin); + } + if ($this->rMargin != $prevrMargin) { + $tw += ($prevrMargin - $this->rMargin); + } + $one_space_width = $this->GetStringWidth(chr(32)); + $no = 0; // number of spaces on a line contained on a single block + if ($this->isRTLTextDir()) { // RTL + // remove left space if exist + $pos1 = TCPDF_STATIC::revstrpos($pmid, '[('); + if ($pos1 > 0) { + $pos1 = intval($pos1); + if ($this->isUnicodeFont()) { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, '[('.chr(0).chr(32))); + $spacelen = 2; + } else { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, '[('.chr(32))); + $spacelen = 1; + } + if ($pos1 == $pos2) { + $pmid = substr($pmid, 0, ($pos1 + 2)).substr($pmid, ($pos1 + 2 + $spacelen)); + if (substr($pmid, $pos1, 4) == '[()]') { + $linew -= $one_space_width; + } elseif ($pos1 == strpos($pmid, '[(')) { + $no = 1; + } + } + } + } else { // LTR + // remove right space if exist + $pos1 = TCPDF_STATIC::revstrpos($pmid, ')]'); + if ($pos1 > 0) { + $pos1 = intval($pos1); + if ($this->isUnicodeFont()) { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, chr(0).chr(32).')]')) + 2; + $spacelen = 2; + } else { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, chr(32).')]')) + 1; + $spacelen = 1; + } + if ($pos1 == $pos2) { + $pmid = substr($pmid, 0, ($pos1 - $spacelen)).substr($pmid, $pos1); + $linew -= $one_space_width; + } + } + } + $mdiff = ($tw - $linew); + if ($plalign == 'C') { + if ($this->rtl) { + $t_x = -($mdiff / 2); + } else { + $t_x = ($mdiff / 2); + } + } elseif ($plalign == 'R') { + // right alignment on LTR document + $t_x = $mdiff; + } elseif ($plalign == 'L') { + // left alignment on RTL document + $t_x = -$mdiff; + } elseif (($plalign == 'J') AND ($plalign == $lalign)) { + // Justification + if ($this->isRTLTextDir()) { + // align text on the left + $t_x = -$mdiff; + } + $ns = 0; // number of spaces + $pmidtemp = $pmid; + // escape special characters + $pmidtemp = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmidtemp); + $pmidtemp = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmidtemp); + // search spaces + if (preg_match_all('/\[\(([^\)]*)\)\]/x', $pmidtemp, $lnstring, PREG_PATTERN_ORDER)) { + $spacestr = $this->getSpaceString(); + $maxkk = count($lnstring[1]) - 1; + for ($kk=0; $kk <= $maxkk; ++$kk) { + // restore special characters + $lnstring[1][$kk] = str_replace('#!#OP#!#', '(', $lnstring[1][$kk]); + $lnstring[1][$kk] = str_replace('#!#CP#!#', ')', $lnstring[1][$kk]); + // store number of spaces on the strings + $lnstring[2][$kk] = substr_count($lnstring[1][$kk], $spacestr); + // count total spaces on line + $ns += $lnstring[2][$kk]; + $lnstring[3][$kk] = $ns; + } + if ($ns == 0) { + $ns = 1; + } + // calculate additional space to add to each existing space + $spacewidth = ($mdiff / ($ns - $no)) * $this->k; + if ($this->FontSize <= 0) { + $this->FontSize = 1; + } + $spacewidthu = -1000 * ($mdiff + (($ns + $no) * $one_space_width)) / $ns / $this->FontSize; + if ($this->font_spacing != 0) { + // fixed spacing mode + $osw = -1000 * $this->font_spacing / $this->FontSize; + $spacewidthu += $osw; + } + $nsmax = $ns; + $ns = 0; + reset($lnstring); + $offset = 0; + $strcount = 0; + $prev_epsposbeg = 0; + $textpos = 0; + if ($this->isRTLTextDir()) { + $textpos = $this->wPt; + } + while (preg_match('/([0-9\.\+\-]*)[\s](Td|cm|m|l|c|re)[\s]/x', $pmid, $strpiece, PREG_OFFSET_CAPTURE, $offset) == 1) { + // check if we are inside a string section '[( ... )]' + $stroffset = strpos($pmid, '[(', $offset); + if (($stroffset !== false) AND ($stroffset <= $strpiece[2][1])) { + // set offset to the end of string section + $offset = strpos($pmid, ')]', $stroffset); + while (($offset !== false) AND ($pmid[($offset - 1)] == '\\')) { + $offset = strpos($pmid, ')]', ($offset + 1)); + } + if ($offset === false) { + $this->Error('HTML Justification: malformed PDF code.'); + } + continue; + } + if ($this->isRTLTextDir()) { + $spacew = ($spacewidth * ($nsmax - $ns)); + } else { + $spacew = ($spacewidth * $ns); + } + $offset = $strpiece[2][1] + strlen($strpiece[2][0]); + $epsposend = strpos($pmid, $this->epsmarker.'Q', $offset); + if ($epsposend !== null) { + $epsposend += strlen($this->epsmarker.'Q'); + $epsposbeg = strpos($pmid, 'q'.$this->epsmarker, $offset); + if ($epsposbeg === null) { + $epsposbeg = strpos($pmid, 'q'.$this->epsmarker, ($prev_epsposbeg - 6)); + $prev_epsposbeg = $epsposbeg; + } + if (($epsposbeg > 0) AND ($epsposend > 0) AND ($offset > $epsposbeg) AND ($offset < $epsposend)) { + // shift EPS images + $trx = sprintf('1 0 0 1 %F 0 cm', $spacew); + $pmid_b = substr($pmid, 0, $epsposbeg); + $pmid_m = substr($pmid, $epsposbeg, ($epsposend - $epsposbeg)); + $pmid_e = substr($pmid, $epsposend); + $pmid = $pmid_b."\nq\n".$trx."\n".$pmid_m."\nQ\n".$pmid_e; + $offset = $epsposend; + continue; + } + } + $currentxpos = 0; + // shift blocks of code + switch ($strpiece[2][0]) { + case 'Td': + case 'cm': + case 'm': + case 'l': { + // get current X position + preg_match('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', $pmid, $xmatches); + if (!isset($xmatches[1])) { + break; + } + $currentxpos = $xmatches[1]; + $textpos = $currentxpos; + if (($strcount <= $maxkk) AND ($strpiece[2][0] == 'Td')) { + $ns = $lnstring[3][$strcount]; + if ($this->isRTLTextDir()) { + $spacew = ($spacewidth * ($nsmax - $ns)); + } + ++$strcount; + } + // justify block + if (preg_match('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', $pmid, $pmatch) == 1) { + $newpmid = sprintf('%F',(floatval($pmatch[1]) + $spacew)).' '.$pmatch[2].' x*#!#*x'.$pmatch[3].$pmatch[4]; + $pmid = str_replace($pmatch[0], $newpmid, $pmid); + unset($pmatch, $newpmid); + } + break; + } + case 're': { + // justify block + if (!TCPDF_STATIC::empty_string($this->lispacer)) { + $this->lispacer = ''; + continue; + } + preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $xmatches); + if (!isset($xmatches[1])) { + break; + } + $currentxpos = $xmatches[1]; + $x_diff = 0; + $w_diff = 0; + if ($this->isRTLTextDir()) { // RTL + if ($currentxpos < $textpos) { + $x_diff = ($spacewidth * ($nsmax - $lnstring[3][$strcount])); + $w_diff = ($spacewidth * $lnstring[2][$strcount]); + } else { + if ($strcount > 0) { + $x_diff = ($spacewidth * ($nsmax - $lnstring[3][($strcount - 1)])); + $w_diff = ($spacewidth * $lnstring[2][($strcount - 1)]); + } + } + } else { // LTR + if ($currentxpos > $textpos) { + if ($strcount > 0) { + $x_diff = ($spacewidth * $lnstring[3][($strcount - 1)]); + } + $w_diff = ($spacewidth * $lnstring[2][$strcount]); + } else { + if ($strcount > 1) { + $x_diff = ($spacewidth * $lnstring[3][($strcount - 2)]); + } + if ($strcount > 0) { + $w_diff = ($spacewidth * $lnstring[2][($strcount - 1)]); + } + } + } + if (preg_match('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $pmatch) == 1) { + $newx = sprintf('%F',(floatval($pmatch[1]) + $x_diff)); + $neww = sprintf('%F',(floatval($pmatch[3]) + $w_diff)); + $newpmid = $newx.' '.$pmatch[2].' '.$neww.' '.$pmatch[4].' x*#!#*x'.$pmatch[5].$pmatch[6]; + $pmid = str_replace($pmatch[0], $newpmid, $pmid); + unset($pmatch, $newpmid, $newx, $neww); + } + break; + } + case 'c': { + // get current X position + preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x', $pmid, $xmatches); + if (!isset($xmatches[1])) { + break; + } + $currentxpos = $xmatches[1]; + // justify block + if (preg_match('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$xmatches[4].')[\s]('.$xmatches[5].')[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x', $pmid, $pmatch) == 1) { + $newx1 = sprintf('%F',(floatval($pmatch[1]) + $spacew)); + $newx2 = sprintf('%F',(floatval($pmatch[3]) + $spacew)); + $newx3 = sprintf('%F',(floatval($pmatch[5]) + $spacew)); + $newpmid = $newx1.' '.$pmatch[2].' '.$newx2.' '.$pmatch[4].' '.$newx3.' '.$pmatch[6].' x*#!#*x'.$pmatch[7].$pmatch[8]; + $pmid = str_replace($pmatch[0], $newpmid, $pmid); + unset($pmatch, $newpmid, $newx1, $newx2, $newx3); + } + break; + } + } + // shift the annotations and links + $cxpos = ($currentxpos / $this->k); + $lmpos = ($this->lMargin + $this->cell_padding['L'] + $this->feps); + if ($this->inxobj) { + // we are inside an XObject template + foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) { + if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) { + if ($cxpos > $lmpos) { + $this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += ($spacew / $this->k); + $this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k); + } else { + $this->xobjects[$this->xobjid]['annotations'][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k); + } + break; + } + } + } elseif (isset($this->PageAnnots[$this->page])) { + foreach ($this->PageAnnots[$this->page] as $pak => $pac) { + if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) { + if ($cxpos > $lmpos) { + $this->PageAnnots[$this->page][$pak]['x'] += ($spacew / $this->k); + $this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k); + } else { + $this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k); + } + break; + } + } + } + } // end of while + // remove markers + $pmid = str_replace('x*#!#*x', '', $pmid); + if ($this->isUnicodeFont()) { + // multibyte characters + $spacew = $spacewidthu; + if ($this->font_stretching != 100) { + // word spacing is affected by stretching + $spacew /= ($this->font_stretching / 100); + } + // escape special characters + $pos = 0; + $pmid = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmid); + $pmid = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmid); + if (preg_match_all('/\[\(([^\)]*)\)\]/x', $pmid, $pamatch) > 0) { + foreach($pamatch[0] as $pk => $pmatch) { + $replace = $pamatch[1][$pk]; + $replace = str_replace('#!#OP#!#', '(', $replace); + $replace = str_replace('#!#CP#!#', ')', $replace); + $newpmid = '[('.str_replace(chr(0).chr(32), ') '.sprintf('%F', $spacew).' (', $replace).')]'; + $pos = strpos($pmid, $pmatch, $pos); + if ($pos !== FALSE) { + $pmid = substr_replace($pmid, $newpmid, $pos, strlen($pmatch)); + } + ++$pos; + } + unset($pamatch); + } + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['outdata'] = $pstart."\n".$pmid."\n".$pend; + } else { + $this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\n".$pend); + } + $endlinepos = strlen($pstart."\n".$pmid."\n"); + } else { + // non-unicode (single-byte characters) + if ($this->font_stretching != 100) { + // word spacing (Tw) is affected by stretching + $spacewidth /= ($this->font_stretching / 100); + } + $rs = sprintf('%F Tw', $spacewidth); + $pmid = preg_replace("/\[\(/x", $rs.' [(', $pmid); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['outdata'] = $pstart."\n".$pmid."\nBT 0 Tw ET\n".$pend; + } else { + $this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\nBT 0 Tw ET\n".$pend); + } + $endlinepos = strlen($pstart."\n".$pmid."\nBT 0 Tw ET\n"); + } + } + } // end of J + } // end if $startlinex + if (($t_x != 0) OR ($yshift < 0)) { + // shift the line + $trx = sprintf('1 0 0 1 %F %F cm', ($t_x * $this->k), ($yshift * $this->k)); + $pstart .= "\nq\n".$trx."\n".$pmid."\nQ\n"; + $endlinepos = strlen($pstart); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['outdata'] = $pstart.$pend; + foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) { + if ($pak >= $pask) { + $this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += $t_x; + $this->xobjects[$this->xobjid]['annotations'][$pak]['y'] -= $yshift; + } + } + } else { + $this->setPageBuffer($startlinepage, $pstart.$pend); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + foreach ($this->PageAnnots[$this->page] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][$pak]['x'] += $t_x; + $this->PageAnnots[$this->page][$pak]['y'] -= $yshift; + } + } + } + } + $this->y -= $yshift; + } + } + $pbrk = $this->checkPageBreak($this->lasth); + $this->newline = false; + $startlinex = $this->x; + $startliney = $this->y; + if ($dom[$dom[$key]['parent']]['value'] == 'sup') { + $startliney -= ((0.3 * $this->FontSizePt) / $this->k); + } elseif ($dom[$dom[$key]['parent']]['value'] == 'sub') { + $startliney -= (($this->FontSizePt / 0.7) / $this->k); + } else { + $minstartliney = $startliney; + $maxbottomliney = ($this->y + $this->getCellHeight($fontsize / $this->k)); + } + $startlinepage = $this->page; + if (isset($endlinepos) AND (!$pbrk)) { + $startlinepos = $endlinepos; + } else { + if ($this->inxobj) { + // we are inside an XObject template + $startlinepos = strlen($this->xobjects[$this->xobjid]['outdata']); + } elseif (!$this->InFooter) { + if (isset($this->footerlen[$this->page])) { + $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page]; + } else { + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + } + $startlinepos = $this->footerpos[$this->page]; + } else { + $startlinepos = $this->pagelen[$this->page]; + } + } + unset($endlinepos); + $plalign = $lalign; + if (isset($this->PageAnnots[$this->page])) { + $pask = count($this->PageAnnots[$this->page]); + } else { + $pask = 0; + } + if (!($dom[$key]['tag'] AND !$dom[$key]['opening'] AND ($dom[$key]['value'] == 'table') + AND (isset($this->emptypagemrk[$this->page])) + AND ($this->emptypagemrk[$this->page] == $this->pagelen[$this->page]))) { + $this->SetFont($fontname, $fontstyle, $fontsize); + if ($wfill) { + $this->SetFillColorArray($this->bgcolor); + } + } + } // end newline + if (isset($opentagpos)) { + unset($opentagpos); + } + if ($dom[$key]['tag']) { + if ($dom[$key]['opening']) { + // get text indentation (if any) + if (isset($dom[$key]['text-indent']) AND $dom[$key]['block']) { + $this->textindent = $dom[$key]['text-indent']; + $this->newline = true; + } + // table + if (($dom[$key]['value'] == 'table') AND isset($dom[$key]['cols']) AND ($dom[$key]['cols'] > 0)) { + // available page width + if ($this->rtl) { + $wtmp = $this->x - $this->lMargin; + } else { + $wtmp = $this->w - $this->rMargin - $this->x; + } + // get cell spacing + if (isset($dom[$key]['attribute']['cellspacing'])) { + $clsp = $this->getHTMLUnitToUnits($dom[$key]['attribute']['cellspacing'], 1, 'px'); + $cellspacing = array('H' => $clsp, 'V' => $clsp); + } elseif (isset($dom[$key]['border-spacing'])) { + $cellspacing = $dom[$key]['border-spacing']; + } else { + $cellspacing = array('H' => 0, 'V' => 0); + } + // table width + if (isset($dom[$key]['width'])) { + $table_width = $this->getHTMLUnitToUnits($dom[$key]['width'], $wtmp, 'px'); + } else { + $table_width = $wtmp; + } + $table_width -= (2 * $cellspacing['H']); + if (!$this->inthead) { + $this->y += $cellspacing['V']; + } + if ($this->rtl) { + $cellspacingx = -$cellspacing['H']; + } else { + $cellspacingx = $cellspacing['H']; + } + // total table width without cellspaces + $table_columns_width = ($table_width - ($cellspacing['H'] * ($dom[$key]['cols'] - 1))); + // minimum column width + $table_min_column_width = ($table_columns_width / $dom[$key]['cols']); + // array of custom column widths + $table_colwidths = array_fill(0, $dom[$key]['cols'], $table_min_column_width); + } + // table row + if ($dom[$key]['value'] == 'tr') { + // reset column counter + $colid = 0; + } + // table cell + if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) { + $trid = $dom[$key]['parent']; + $table_el = $dom[$trid]['parent']; + if (!isset($dom[$table_el]['cols'])) { + $dom[$table_el]['cols'] = $dom[$trid]['cols']; + } + // store border info + $tdborder = 0; + if (isset($dom[$key]['border']) AND !empty($dom[$key]['border'])) { + $tdborder = $dom[$key]['border']; + } + $colspan = intval($dom[$key]['attribute']['colspan']); + if ($colspan <= 0) { + $colspan = 1; + } + $old_cell_padding = $this->cell_padding; + if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'])) { + $crclpd = $this->getHTMLUnitToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'], 1, 'px'); + $current_cell_padding = array('L' => $crclpd, 'T' => $crclpd, 'R' => $crclpd, 'B' => $crclpd); + } elseif (isset($dom[($dom[$trid]['parent'])]['padding'])) { + $current_cell_padding = $dom[($dom[$trid]['parent'])]['padding']; + } else { + $current_cell_padding = array('L' => 0, 'T' => 0, 'R' => 0, 'B' => 0); + } + $this->cell_padding = $current_cell_padding; + if (isset($dom[$key]['height'])) { + // minimum cell height + $cellh = $this->getHTMLUnitToUnits($dom[$key]['height'], 0, 'px'); + } else { + $cellh = 0; + } + if (isset($dom[$key]['content'])) { + $cell_content = $dom[$key]['content']; + } else { + $cell_content = '&nbsp;'; + } + $tagtype = $dom[$key]['value']; + $parentid = $key; + while (($key < $maxel) AND (!(($dom[$key]['tag']) AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == $tagtype) AND ($dom[$key]['parent'] == $parentid)))) { + // move $key index forward + ++$key; + } + if (!isset($dom[$trid]['startpage'])) { + $dom[$trid]['startpage'] = $this->page; + } else { + $this->setPage($dom[$trid]['startpage']); + } + if (!isset($dom[$trid]['startcolumn'])) { + $dom[$trid]['startcolumn'] = $this->current_column; + } elseif ($this->current_column != $dom[$trid]['startcolumn']) { + $tmpx = $this->x; + $this->selectColumn($dom[$trid]['startcolumn']); + $this->x = $tmpx; + } + if (!isset($dom[$trid]['starty'])) { + $dom[$trid]['starty'] = $this->y; + } else { + $this->y = $dom[$trid]['starty']; + } + if (!isset($dom[$trid]['startx'])) { + $dom[$trid]['startx'] = $this->x; + $this->x += $cellspacingx; + } else { + $this->x += ($cellspacingx / 2); + } + if (isset($dom[$parentid]['attribute']['rowspan'])) { + $rowspan = intval($dom[$parentid]['attribute']['rowspan']); + } else { + $rowspan = 1; + } + // skip row-spanned cells started on the previous rows + if (isset($dom[$table_el]['rowspans'])) { + $rsk = 0; + $rskmax = count($dom[$table_el]['rowspans']); + while ($rsk < $rskmax) { + $trwsp = $dom[$table_el]['rowspans'][$rsk]; + $rsstartx = $trwsp['startx']; + $rsendx = $trwsp['endx']; + // account for margin changes + if ($trwsp['startpage'] < $this->page) { + if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$trwsp['startpage']]['orm'])) { + $dl = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$trwsp['startpage']]['orm']); + $rsstartx -= $dl; + $rsendx -= $dl; + } elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$trwsp['startpage']]['olm'])) { + $dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$trwsp['startpage']]['olm']); + $rsstartx += $dl; + $rsendx += $dl; + } + } + if (($trwsp['rowspan'] > 0) + AND ($rsstartx > ($this->x - $cellspacing['H'] - $current_cell_padding['L'] - $this->feps)) + AND ($rsstartx < ($this->x + $cellspacing['H'] + $current_cell_padding['R'] + $this->feps)) + AND (($trwsp['starty'] < ($this->y - $this->feps)) OR ($trwsp['startpage'] < $this->page) OR ($trwsp['startcolumn'] < $this->current_column))) { + // set the starting X position of the current cell + $this->x = $rsendx + $cellspacingx; + // increment column indicator + $colid += $trwsp['colspan']; + if (($trwsp['rowspan'] == 1) + AND (isset($dom[$trid]['endy'])) + AND (isset($dom[$trid]['endpage'])) + AND (isset($dom[$trid]['endcolumn'])) + AND ($trwsp['endpage'] == $dom[$trid]['endpage']) + AND ($trwsp['endcolumn'] == $dom[$trid]['endcolumn'])) { + // set ending Y position for row + $dom[$table_el]['rowspans'][$rsk]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']); + $dom[$trid]['endy'] = $dom[$table_el]['rowspans'][$rsk]['endy']; + } + $rsk = 0; + } else { + ++$rsk; + } + } + } + if (isset($dom[$parentid]['width'])) { + // user specified width + $cellw = $this->getHTMLUnitToUnits($dom[$parentid]['width'], $table_columns_width, 'px'); + $tmpcw = ($cellw / $colspan); + for ($i = 0; $i < $colspan; ++$i) { + $table_colwidths[($colid + $i)] = $tmpcw; + } + } else { + // inherit column width + $cellw = 0; + for ($i = 0; $i < $colspan; ++$i) { + $cellw += (isset($table_colwidths[($colid + $i)]) ? $table_colwidths[($colid + $i)] : 0); + } + } + $cellw += (($colspan - 1) * $cellspacing['H']); + // increment column indicator + $colid += $colspan; + // add rowspan information to table element + if ($rowspan > 1) { + $trsid = array_push($dom[$table_el]['rowspans'], array('trid' => $trid, 'rowspan' => $rowspan, 'mrowspan' => $rowspan, 'colspan' => $colspan, 'startpage' => $this->page, 'startcolumn' => $this->current_column, 'startx' => $this->x, 'starty' => $this->y)); + } + $cellid = array_push($dom[$trid]['cellpos'], array('startx' => $this->x)); + if ($rowspan > 1) { + $dom[$trid]['cellpos'][($cellid - 1)]['rowspanid'] = ($trsid - 1); + } + // push background colors + if (isset($dom[$parentid]['bgcolor']) AND ($dom[$parentid]['bgcolor'] !== false)) { + $dom[$trid]['cellpos'][($cellid - 1)]['bgcolor'] = $dom[$parentid]['bgcolor']; + } + // store border info + if (isset($tdborder) AND !empty($tdborder)) { + $dom[$trid]['cellpos'][($cellid - 1)]['border'] = $tdborder; + } + $prevLastH = $this->lasth; + // store some info for multicolumn mode + if ($this->rtl) { + $this->colxshift['x'] = $this->w - $this->x - $this->rMargin; + } else { + $this->colxshift['x'] = $this->x - $this->lMargin; + } + $this->colxshift['s'] = $cellspacing; + $this->colxshift['p'] = $current_cell_padding; + // ****** write the cell content ****** + $this->MultiCell($cellw, $cellh, $cell_content, false, $lalign, false, 2, '', '', true, 0, true, true, 0, 'T', false); + // restore some values + $this->colxshift = array('x' => 0, 's' => array('H' => 0, 'V' => 0), 'p' => array('L' => 0, 'T' => 0, 'R' => 0, 'B' => 0)); + $this->lasth = $prevLastH; + $this->cell_padding = $old_cell_padding; + $dom[$trid]['cellpos'][($cellid - 1)]['endx'] = $this->x; + // update the end of row position + if ($rowspan <= 1) { + if (isset($dom[$trid]['endy'])) { + if (($this->page == $dom[$trid]['endpage']) AND ($this->current_column == $dom[$trid]['endcolumn'])) { + $dom[$trid]['endy'] = max($this->y, $dom[$trid]['endy']); + } elseif (($this->page > $dom[$trid]['endpage']) OR ($this->current_column > $dom[$trid]['endcolumn'])) { + $dom[$trid]['endy'] = $this->y; + } + } else { + $dom[$trid]['endy'] = $this->y; + } + if (isset($dom[$trid]['endpage'])) { + $dom[$trid]['endpage'] = max($this->page, $dom[$trid]['endpage']); + } else { + $dom[$trid]['endpage'] = $this->page; + } + if (isset($dom[$trid]['endcolumn'])) { + $dom[$trid]['endcolumn'] = max($this->current_column, $dom[$trid]['endcolumn']); + } else { + $dom[$trid]['endcolumn'] = $this->current_column; + } + } else { + // account for row-spanned cells + $dom[$table_el]['rowspans'][($trsid - 1)]['endx'] = $this->x; + $dom[$table_el]['rowspans'][($trsid - 1)]['endy'] = $this->y; + $dom[$table_el]['rowspans'][($trsid - 1)]['endpage'] = $this->page; + $dom[$table_el]['rowspans'][($trsid - 1)]['endcolumn'] = $this->current_column; + } + if (isset($dom[$table_el]['rowspans'])) { + // update endy and endpage on rowspanned cells + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + if ($trwsp['rowspan'] > 0) { + if (isset($dom[$trid]['endpage'])) { + if (($trwsp['endpage'] == $dom[$trid]['endpage']) AND ($trwsp['endcolumn'] == $dom[$trid]['endcolumn'])) { + $dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']); + } elseif (($trwsp['endpage'] < $dom[$trid]['endpage']) OR ($trwsp['endcolumn'] < $dom[$trid]['endcolumn'])) { + $dom[$table_el]['rowspans'][$k]['endy'] = $dom[$trid]['endy']; + $dom[$table_el]['rowspans'][$k]['endpage'] = $dom[$trid]['endpage']; + $dom[$table_el]['rowspans'][$k]['endcolumn'] = $dom[$trid]['endcolumn']; + } else { + $dom[$trid]['endy'] = $this->pagedim[$dom[$trid]['endpage']]['hk'] - $this->pagedim[$dom[$trid]['endpage']]['bm']; + } + } + } + } + } + $this->x += ($cellspacingx / 2); + } else { + // opening tag (or self-closing tag) + if (!isset($opentagpos)) { + if ($this->inxobj) { + // we are inside an XObject template + $opentagpos = strlen($this->xobjects[$this->xobjid]['outdata']); + } elseif (!$this->InFooter) { + if (isset($this->footerlen[$this->page])) { + $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page]; + } else { + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + } + $opentagpos = $this->footerpos[$this->page]; + } + } + $dom = $this->openHTMLTagHandler($dom, $key, $cell); + } + } else { // closing tag + $prev_numpages = $this->numpages; + $old_bordermrk = $this->bordermrk[$this->page]; + $dom = $this->closeHTMLTagHandler($dom, $key, $cell, $maxbottomliney); + if ($this->bordermrk[$this->page] > $old_bordermrk) { + $startlinepos += ($this->bordermrk[$this->page] - $old_bordermrk); + } + if ($prev_numpages > $this->numpages) { + $startlinepage = $this->page; + } + } + } elseif (strlen($dom[$key]['value']) > 0) { + // print list-item + if (!TCPDF_STATIC::empty_string($this->lispacer) AND ($this->lispacer != '^')) { + $this->SetFont($pfontname, $pfontstyle, $pfontsize); + $this->resetLastH(); + $minstartliney = $this->y; + $maxbottomliney = ($startliney + $this->getCellHeight($this->FontSize)); + if (is_numeric($pfontsize) AND ($pfontsize > 0)) { + $this->putHtmlListBullet($this->listnum, $this->lispacer, $pfontsize); + } + $this->SetFont($curfontname, $curfontstyle, $curfontsize); + $this->resetLastH(); + if (is_numeric($pfontsize) AND ($pfontsize > 0) AND is_numeric($curfontsize) AND ($curfontsize > 0) AND ($pfontsize != $curfontsize)) { + $pfontascent = $this->getFontAscent($pfontname, $pfontstyle, $pfontsize); + $pfontdescent = $this->getFontDescent($pfontname, $pfontstyle, $pfontsize); + $this->y += ($this->getCellHeight(($pfontsize - $curfontsize) / $this->k) + $pfontascent - $curfontascent - $pfontdescent + $curfontdescent) / 2; + $minstartliney = min($this->y, $minstartliney); + $maxbottomliney = max(($this->y + $this->getCellHeight($pfontsize / $this->k)), $maxbottomliney); + } + } + // text + $this->htmlvspace = 0; + if ((!$this->premode) AND $this->isRTLTextDir()) { + // reverse spaces order + $lsp = ''; // left spaces + $rsp = ''; // right spaces + if (preg_match('/^('.$this->re_space['p'].'+)/'.$this->re_space['m'], $dom[$key]['value'], $matches)) { + $lsp = $matches[1]; + } + if (preg_match('/('.$this->re_space['p'].'+)$/'.$this->re_space['m'], $dom[$key]['value'], $matches)) { + $rsp = $matches[1]; + } + $dom[$key]['value'] = $rsp.$this->stringTrim($dom[$key]['value']).$lsp; + } + if ($newline) { + if (!$this->premode) { + $prelen = strlen($dom[$key]['value']); + if ($this->isRTLTextDir()) { + // right trim except non-breaking space + $dom[$key]['value'] = $this->stringRightTrim($dom[$key]['value']); + } else { + // left trim except non-breaking space + $dom[$key]['value'] = $this->stringLeftTrim($dom[$key]['value']); + } + $postlen = strlen($dom[$key]['value']); + if (($postlen == 0) AND ($prelen > 0)) { + $dom[$key]['trimmed_space'] = true; + } + } + $newline = false; + $firstblock = true; + } else { + $firstblock = false; + // replace empty multiple spaces string with a single space + $dom[$key]['value'] = preg_replace('/^'.$this->re_space['p'].'+$/'.$this->re_space['m'], chr(32), $dom[$key]['value']); + } + $strrest = ''; + if ($this->rtl) { + $this->x -= $this->textindent; + } else { + $this->x += $this->textindent; + } + if (!isset($dom[$key]['trimmed_space']) OR !$dom[$key]['trimmed_space']) { + $strlinelen = $this->GetStringWidth($dom[$key]['value']); + if (!empty($this->HREF) AND (isset($this->HREF['url']))) { + // HTML <a> Link + $hrefcolor = ''; + if (isset($dom[($dom[$key]['parent'])]['fgcolor']) AND ($dom[($dom[$key]['parent'])]['fgcolor'] !== false)) { + $hrefcolor = $dom[($dom[$key]['parent'])]['fgcolor']; + } + $hrefstyle = -1; + if (isset($dom[($dom[$key]['parent'])]['fontstyle']) AND ($dom[($dom[$key]['parent'])]['fontstyle'] !== false)) { + $hrefstyle = $dom[($dom[$key]['parent'])]['fontstyle']; + } + $strrest = $this->addHtmlLink($this->HREF['url'], $dom[$key]['value'], $wfill, true, $hrefcolor, $hrefstyle, true); + } else { + $wadj = 0; // space to leave for block continuity + if ($this->rtl) { + $cwa = ($this->x - $this->lMargin); + } else { + $cwa = ($this->w - $this->rMargin - $this->x); + } + if (($strlinelen < $cwa) AND (isset($dom[($key + 1)])) AND ($dom[($key + 1)]['tag']) AND (!$dom[($key + 1)]['block'])) { + // check the next text blocks for continuity + $nkey = ($key + 1); + $write_block = true; + $same_textdir = true; + $tmp_fontname = $this->FontFamily; + $tmp_fontstyle = $this->FontStyle; + $tmp_fontsize = $this->FontSizePt; + while ($write_block AND isset($dom[$nkey])) { + if ($dom[$nkey]['tag']) { + if ($dom[$nkey]['block']) { + // end of block + $write_block = false; + } + $tmp_fontname = isset($dom[$nkey]['fontname']) ? $dom[$nkey]['fontname'] : $this->FontFamily; + $tmp_fontstyle = isset($dom[$nkey]['fontstyle']) ? $dom[$nkey]['fontstyle'] : $this->FontStyle; + $tmp_fontsize = isset($dom[$nkey]['fontsize']) ? $dom[$nkey]['fontsize'] : $this->FontSizePt; + $same_textdir = ($dom[$nkey]['dir'] == $dom[$key]['dir']); + } else { + $nextstr = TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'+/', $this->re_space['m'], $dom[$nkey]['value']); + if (isset($nextstr[0]) AND $same_textdir) { + $wadj += $this->GetStringWidth($nextstr[0], $tmp_fontname, $tmp_fontstyle, $tmp_fontsize); + if (isset($nextstr[1])) { + $write_block = false; + } + } + } + ++$nkey; + } + } + if (($wadj > 0) AND (($strlinelen + $wadj) >= $cwa)) { + $wadj = 0; + $nextstr = TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'/', $this->re_space['m'], $dom[$key]['value']); + $numblks = count($nextstr); + if ($numblks > 1) { + // try to split on blank spaces + $wadj = ($cwa - $strlinelen + $this->GetStringWidth($nextstr[($numblks - 1)])); + } else { + // set the entire block on new line + $wadj = $this->GetStringWidth($nextstr[0]); + } + } + // check for reversed text direction + if (($wadj > 0) AND (($this->rtl AND ($this->tmprtl === 'L')) OR (!$this->rtl AND ($this->tmprtl === 'R')))) { + // LTR text on RTL direction or RTL text on LTR direction + $reverse_dir = true; + $this->rtl = !$this->rtl; + $revshift = ($strlinelen + $wadj + 0.000001); // add little quantity for rounding problems + if ($this->rtl) { + $this->x += $revshift; + } else { + $this->x -= $revshift; + } + $xws = $this->x; + } + // ****** write only until the end of the line and get the rest ****** + $strrest = $this->Write($this->lasth, $dom[$key]['value'], '', $wfill, '', false, 0, true, $firstblock, 0, $wadj); + // restore default direction + if ($reverse_dir AND ($wadj == 0)) { + $this->x = $xws; + $this->rtl = !$this->rtl; + $reverse_dir = false; + } + } + } + $this->textindent = 0; + if (strlen($strrest) > 0) { + // store the remaining string on the previous $key position + $this->newline = true; + if ($strrest == $dom[$key]['value']) { + // used to avoid infinite loop + ++$loop; + } else { + $loop = 0; + } + $dom[$key]['value'] = $strrest; + if ($cell) { + if ($this->rtl) { + $this->x -= $this->cell_padding['R']; + } else { + $this->x += $this->cell_padding['L']; + } + } + if ($loop < 3) { + --$key; + } + } else { + $loop = 0; + // add the positive font spacing of the last character (if any) + if ($this->font_spacing > 0) { + if ($this->rtl) { + $this->x -= $this->font_spacing; + } else { + $this->x += $this->font_spacing; + } + } + } + } + ++$key; + if (isset($dom[$key]['tag']) AND $dom[$key]['tag'] AND (!isset($dom[$key]['opening']) OR !$dom[$key]['opening']) AND isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr'] == 'true')) { + // check if we are on a new page or on a new column + if ((!$undo) AND (($this->y < $this->start_transaction_y) OR (($dom[$key]['value'] == 'tr') AND ($dom[($dom[$key]['parent'])]['endy'] < $this->start_transaction_y)))) { + // we are on a new page or on a new column and the total object height is less than the available vertical space. + // restore previous object + $this->rollbackTransaction(true); + // restore previous values + foreach ($this_method_vars as $vkey => $vval) { + $$vkey = $vval; + } + if (!empty($dom[$key]['thead'])) { + $this->inthead = true; + } + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $pre_y = $this->y; + if ((!$this->checkPageBreak($this->PageBreakTrigger + 1)) AND ($this->y < $pre_y)) { + $startliney = $this->y; + } + $undo = true; // avoid infinite loop + } else { + $undo = false; + } + } + } // end for each $key + // align the last line + if (isset($startlinex)) { + $yshift = ($minstartliney - $startliney); + if (($yshift > 0) OR ($this->page > $startlinepage)) { + $yshift = 0; + } + $t_x = 0; + // the last line must be shifted to be aligned as requested + $linew = abs($this->endlinex - $startlinex); + if ($this->inxobj) { + // we are inside an XObject template + $pstart = substr($this->xobjects[$this->xobjid]['outdata'], 0, $startlinepos); + if (isset($opentagpos)) { + $midpos = $opentagpos; + } else { + $midpos = 0; + } + if ($midpos > 0) { + $pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos, ($midpos - $startlinepos)); + $pend = substr($this->xobjects[$this->xobjid]['outdata'], $midpos); + } else { + $pmid = substr($this->xobjects[$this->xobjid]['outdata'], $startlinepos); + $pend = ''; + } + } else { + $pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos); + if (isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = min($opentagpos, $this->footerpos[$startlinepage]); + } elseif (isset($opentagpos)) { + $midpos = $opentagpos; + } elseif (isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)) { + $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage]; + $midpos = $this->footerpos[$startlinepage]; + } else { + $midpos = 0; + } + if ($midpos > 0) { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos)); + $pend = substr($this->getPageBuffer($startlinepage), $midpos); + } else { + $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos); + $pend = ''; + } + } + if ((isset($plalign) AND ((($plalign == 'C') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl)))))) { + // calculate shifting amount + $tw = $w; + if ($this->lMargin != $prevlMargin) { + $tw += ($prevlMargin - $this->lMargin); + } + if ($this->rMargin != $prevrMargin) { + $tw += ($prevrMargin - $this->rMargin); + } + $one_space_width = $this->GetStringWidth(chr(32)); + $no = 0; // number of spaces on a line contained on a single block + if ($this->isRTLTextDir()) { // RTL + // remove left space if exist + $pos1 = TCPDF_STATIC::revstrpos($pmid, '[('); + if ($pos1 > 0) { + $pos1 = intval($pos1); + if ($this->isUnicodeFont()) { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, '[('.chr(0).chr(32))); + $spacelen = 2; + } else { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, '[('.chr(32))); + $spacelen = 1; + } + if ($pos1 == $pos2) { + $pmid = substr($pmid, 0, ($pos1 + 2)).substr($pmid, ($pos1 + 2 + $spacelen)); + if (substr($pmid, $pos1, 4) == '[()]') { + $linew -= $one_space_width; + } elseif ($pos1 == strpos($pmid, '[(')) { + $no = 1; + } + } + } + } else { // LTR + // remove right space if exist + $pos1 = TCPDF_STATIC::revstrpos($pmid, ')]'); + if ($pos1 > 0) { + $pos1 = intval($pos1); + if ($this->isUnicodeFont()) { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, chr(0).chr(32).')]')) + 2; + $spacelen = 2; + } else { + $pos2 = intval(TCPDF_STATIC::revstrpos($pmid, chr(32).')]')) + 1; + $spacelen = 1; + } + if ($pos1 == $pos2) { + $pmid = substr($pmid, 0, ($pos1 - $spacelen)).substr($pmid, $pos1); + $linew -= $one_space_width; + } + } + } + $mdiff = ($tw - $linew); + if ($plalign == 'C') { + if ($this->rtl) { + $t_x = -($mdiff / 2); + } else { + $t_x = ($mdiff / 2); + } + } elseif ($plalign == 'R') { + // right alignment on LTR document + $t_x = $mdiff; + } elseif ($plalign == 'L') { + // left alignment on RTL document + $t_x = -$mdiff; + } + } // end if startlinex + if (($t_x != 0) OR ($yshift < 0)) { + // shift the line + $trx = sprintf('1 0 0 1 %F %F cm', ($t_x * $this->k), ($yshift * $this->k)); + $pstart .= "\nq\n".$trx."\n".$pmid."\nQ\n"; + $endlinepos = strlen($pstart); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['outdata'] = $pstart.$pend; + foreach ($this->xobjects[$this->xobjid]['annotations'] as $pak => $pac) { + if ($pak >= $pask) { + $this->xobjects[$this->xobjid]['annotations'][$pak]['x'] += $t_x; + $this->xobjects[$this->xobjid]['annotations'][$pak]['y'] -= $yshift; + } + } + } else { + $this->setPageBuffer($startlinepage, $pstart.$pend); + // shift the annotations and links + if (isset($this->PageAnnots[$this->page])) { + foreach ($this->PageAnnots[$this->page] as $pak => $pac) { + if ($pak >= $pask) { + $this->PageAnnots[$this->page][$pak]['x'] += $t_x; + $this->PageAnnots[$this->page][$pak]['y'] -= $yshift; + } + } + } + } + $this->y -= $yshift; + $yshift = 0; + } + } + // restore previous values + $this->setGraphicVars($gvars); + if ($this->num_columns > 1) { + $this->selectColumn(); + } elseif ($this->page > $prevPage) { + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + } + // restore previous list state + $this->cell_height_ratio = $prev_cell_height_ratio; + $this->listnum = $prev_listnum; + $this->listordered = $prev_listordered; + $this->listcount = $prev_listcount; + $this->lispacer = $prev_lispacer; + if ($ln AND (!($cell AND ($dom[$key-1]['value'] == 'table')))) { + $this->Ln($this->lasth); + if (($this->y < $maxbottomliney) AND ($startlinepage == $this->page)) { + $this->y = $maxbottomliney; + } + } + unset($dom); + } + + /** + * Process opening tags. + * @param $dom (array) html dom array + * @param $key (int) current element id + * @param $cell (boolean) if true add the default left (or right if RTL) padding to each new line (default false). + * @return $dom array + * @protected + */ + protected function openHTMLTagHandler($dom, $key, $cell) { + $tag = $dom[$key]; + $parent = $dom[($dom[$key]['parent'])]; + $firsttag = ($key == 1); + // check for text direction attribute + if (isset($tag['dir'])) { + $this->setTempRTL($tag['dir']); + } else { + $this->tmprtl = false; + } + if ($tag['block']) { + $hbz = 0; // distance from y to line bottom + $hb = 0; // vertical space between block tags + // calculate vertical space for block tags + if (isset($this->tagvspaces[$tag['value']][0]['h']) AND ($this->tagvspaces[$tag['value']][0]['h'] >= 0)) { + $cur_h = $this->tagvspaces[$tag['value']][0]['h']; + } elseif (isset($tag['fontsize'])) { + $cur_h = $this->getCellHeight($tag['fontsize'] / $this->k); + } else { + $cur_h = $this->getCellHeight($this->FontSize); + } + if (isset($this->tagvspaces[$tag['value']][0]['n'])) { + $on = $this->tagvspaces[$tag['value']][0]['n']; + } elseif (preg_match('/[h][0-9]/', $tag['value']) > 0) { + $on = 0.6; + } else { + $on = 1; + } + if ((!isset($this->tagvspaces[$tag['value']])) AND (in_array($tag['value'], array('div', 'dt', 'dd', 'li', 'br', 'hr')))) { + $hb = 0; + } else { + $hb = ($on * $cur_h); + } + if (($this->htmlvspace <= 0) AND ($on > 0)) { + if (isset($parent['fontsize'])) { + $hbz = (($parent['fontsize'] / $this->k) * $this->cell_height_ratio); + } else { + $hbz = $this->getCellHeight($this->FontSize); + } + } + if (isset($dom[($key - 1)]) AND ($dom[($key - 1)]['value'] == 'table')) { + // fix vertical space after table + $hbz = 0; + } + // closing vertical space + $hbc = 0; + if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) { + $pre_h = $this->tagvspaces[$tag['value']][1]['h']; + } elseif (isset($parent['fontsize'])) { + $pre_h = $this->getCellHeight($parent['fontsize'] / $this->k); + } else { + $pre_h = $this->getCellHeight($this->FontSize); + } + if (isset($this->tagvspaces[$tag['value']][1]['n'])) { + $cn = $this->tagvspaces[$tag['value']][1]['n']; + } elseif (preg_match('/[h][0-9]/', $tag['value']) > 0) { + $cn = 0.6; + } else { + $cn = 1; + } + if (isset($this->tagvspaces[$tag['value']][1])) { + $hbc = ($cn * $pre_h); + } + } + // Opening tag + switch($tag['value']) { + case 'table': { + $cp = 0; + $cs = 0; + $dom[$key]['rowspans'] = array(); + if (!isset($dom[$key]['attribute']['nested']) OR ($dom[$key]['attribute']['nested'] != 'true')) { + $this->htmlvspace = 0; + // set table header + if (!TCPDF_STATIC::empty_string($dom[$key]['thead'])) { + // set table header + $this->thead = $dom[$key]['thead']; + if (!isset($this->theadMargins) OR (empty($this->theadMargins))) { + $this->theadMargins = array(); + $this->theadMargins['cell_padding'] = $this->cell_padding; + $this->theadMargins['lmargin'] = $this->lMargin; + $this->theadMargins['rmargin'] = $this->rMargin; + $this->theadMargins['page'] = $this->page; + $this->theadMargins['cell'] = $cell; + $this->theadMargins['gvars'] = $this->getGraphicVars(); + } + } + } + // store current margins and page + $dom[$key]['old_cell_padding'] = $this->cell_padding; + if (isset($tag['attribute']['cellpadding'])) { + $pad = $this->getHTMLUnitToUnits($tag['attribute']['cellpadding'], 1, 'px'); + $this->SetCellPadding($pad); + } elseif (isset($tag['padding'])) { + $this->cell_padding = $tag['padding']; + } + if (isset($tag['attribute']['cellspacing'])) { + $cs = $this->getHTMLUnitToUnits($tag['attribute']['cellspacing'], 1, 'px'); + } elseif (isset($tag['border-spacing'])) { + $cs = $tag['border-spacing']['V']; + } + $prev_y = $this->y; + if ($this->checkPageBreak(((2 * $cp) + (2 * $cs) + $this->lasth), '', false) OR ($this->y < $prev_y)) { + $this->inthead = true; + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + break; + } + case 'tr': { + // array of columns positions + $dom[$key]['cellpos'] = array(); + break; + } + case 'hr': { + if ((isset($tag['height'])) AND ($tag['height'] != '')) { + $hrHeight = $this->getHTMLUnitToUnits($tag['height'], 1, 'px'); + } else { + $hrHeight = $this->GetLineWidth(); + } + $this->addHTMLVertSpace($hbz, max($hb, ($hrHeight / 2)), $cell, $firsttag); + $x = $this->GetX(); + $y = $this->GetY(); + $wtmp = $this->w - $this->lMargin - $this->rMargin; + if ($cell) { + $wtmp -= ($this->cell_padding['L'] + $this->cell_padding['R']); + } + if ((isset($tag['width'])) AND ($tag['width'] != '')) { + $hrWidth = $this->getHTMLUnitToUnits($tag['width'], $wtmp, 'px'); + } else { + $hrWidth = $wtmp; + } + $prevlinewidth = $this->GetLineWidth(); + $this->SetLineWidth($hrHeight); + $this->Line($x, $y, $x + $hrWidth, $y); + $this->SetLineWidth($prevlinewidth); + $this->addHTMLVertSpace(max($hbc, ($hrHeight / 2)), 0, $cell, !isset($dom[($key + 1)])); + break; + } + case 'a': { + if (array_key_exists('href', $tag['attribute'])) { + $this->HREF['url'] = $tag['attribute']['href']; + } + break; + } + case 'img': { + if (!empty($tag['attribute']['src'])) { + if ($tag['attribute']['src'][0] === '@') { + // data stream + $tag['attribute']['src'] = '@'.base64_decode(substr($tag['attribute']['src'], 1)); + $type = ''; + } else { + // get image type + $type = TCPDF_IMAGES::getImageFileType($tag['attribute']['src']); + } + if (!isset($tag['width'])) { + $tag['width'] = 0; + } + if (!isset($tag['height'])) { + $tag['height'] = 0; + } + //if (!isset($tag['attribute']['align'])) { + // the only alignment supported is "bottom" + // further development is required for other modes. + $tag['attribute']['align'] = 'bottom'; + //} + switch($tag['attribute']['align']) { + case 'top': { + $align = 'T'; + break; + } + case 'middle': { + $align = 'M'; + break; + } + case 'bottom': { + $align = 'B'; + break; + } + default: { + $align = 'B'; + break; + } + } + $prevy = $this->y; + $xpos = $this->x; + $imglink = ''; + if (isset($this->HREF['url']) AND !TCPDF_STATIC::empty_string($this->HREF['url'])) { + $imglink = $this->HREF['url']; + if ($imglink[0] == '#') { + // convert url to internal link + $lnkdata = explode(',', $imglink); + if (isset($lnkdata[0])) { + $page = intval(substr($lnkdata[0], 1)); + if (empty($page) OR ($page <= 0)) { + $page = $this->page; + } + if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) { + $lnky = floatval($lnkdata[1]); + } else { + $lnky = 0; + } + $imglink = $this->AddLink(); + $this->SetLink($imglink, $lnky, $page); + } + } + } + $border = 0; + if (isset($tag['border']) AND !empty($tag['border'])) { + // currently only support 1 (frame) or a combination of 'LTRB' + $border = $tag['border']; + } + $iw = ''; + if (isset($tag['width'])) { + $iw = $this->getHTMLUnitToUnits($tag['width'], ($tag['fontsize'] / $this->k), 'px', false); + } + $ih = ''; + if (isset($tag['height'])) { + $ih = $this->getHTMLUnitToUnits($tag['height'], ($tag['fontsize'] / $this->k), 'px', false); + } + if (($type == 'eps') OR ($type == 'ai')) { + $this->ImageEps($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, true, $align, '', $border, true); + } elseif ($type == 'svg') { + $this->ImageSVG($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, $align, '', $border, true); + } else { + $this->Image($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, '', $imglink, $align, false, 300, '', false, false, $border, false, false, true); + } + switch($align) { + case 'T': { + $this->y = $prevy; + break; + } + case 'M': { + $this->y = (($this->img_rb_y + $prevy - ($this->getCellHeight($tag['fontsize'] / $this->k))) / 2); + break; + } + case 'B': { + $this->y = $this->img_rb_y - ($this->getCellHeight($tag['fontsize'] / $this->k) - ($this->getFontDescent($tag['fontname'], $tag['fontstyle'], $tag['fontsize']) * $this->cell_height_ratio)); + break; + } + } + } + break; + } + case 'dl': { + ++$this->listnum; + if ($this->listnum == 1) { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + } else { + $this->addHTMLVertSpace(0, 0, $cell, $firsttag); + } + break; + } + case 'dt': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + break; + } + case 'dd': { + if ($this->rtl) { + $this->rMargin += $this->listindent; + } else { + $this->lMargin += $this->listindent; + } + ++$this->listindentlevel; + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + break; + } + case 'ul': + case 'ol': { + ++$this->listnum; + if ($tag['value'] == 'ol') { + $this->listordered[$this->listnum] = true; + } else { + $this->listordered[$this->listnum] = false; + } + if (isset($tag['attribute']['start'])) { + $this->listcount[$this->listnum] = intval($tag['attribute']['start']) - 1; + } else { + $this->listcount[$this->listnum] = 0; + } + if ($this->rtl) { + $this->rMargin += $this->listindent; + $this->x -= $this->listindent; + } else { + $this->lMargin += $this->listindent; + $this->x += $this->listindent; + } + ++$this->listindentlevel; + if ($this->listnum == 1) { + if ($key > 1) { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + } + } else { + $this->addHTMLVertSpace(0, 0, $cell, $firsttag); + } + break; + } + case 'li': { + if ($key > 2) { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + } + if ($this->listordered[$this->listnum]) { + // ordered item + if (isset($parent['attribute']['type']) AND !TCPDF_STATIC::empty_string($parent['attribute']['type'])) { + $this->lispacer = $parent['attribute']['type']; + } elseif (isset($parent['listtype']) AND !TCPDF_STATIC::empty_string($parent['listtype'])) { + $this->lispacer = $parent['listtype']; + } elseif (isset($this->lisymbol) AND !TCPDF_STATIC::empty_string($this->lisymbol)) { + $this->lispacer = $this->lisymbol; + } else { + $this->lispacer = '#'; + } + ++$this->listcount[$this->listnum]; + if (isset($tag['attribute']['value'])) { + $this->listcount[$this->listnum] = intval($tag['attribute']['value']); + } + } else { + // unordered item + if (isset($parent['attribute']['type']) AND !TCPDF_STATIC::empty_string($parent['attribute']['type'])) { + $this->lispacer = $parent['attribute']['type']; + } elseif (isset($parent['listtype']) AND !TCPDF_STATIC::empty_string($parent['listtype'])) { + $this->lispacer = $parent['listtype']; + } elseif (isset($this->lisymbol) AND !TCPDF_STATIC::empty_string($this->lisymbol)) { + $this->lispacer = $this->lisymbol; + } else { + $this->lispacer = '!'; + } + } + break; + } + case 'blockquote': { + if ($this->rtl) { + $this->rMargin += $this->listindent; + } else { + $this->lMargin += $this->listindent; + } + ++$this->listindentlevel; + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + break; + } + case 'br': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + break; + } + case 'div': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + break; + } + case 'p': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + break; + } + case 'pre': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + $this->premode = true; + break; + } + case 'sup': { + $this->SetXY($this->GetX(), $this->GetY() - ((0.7 * $this->FontSizePt) / $this->k)); + break; + } + case 'sub': { + $this->SetXY($this->GetX(), $this->GetY() + ((0.3 * $this->FontSizePt) / $this->k)); + break; + } + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': { + $this->addHTMLVertSpace($hbz, $hb, $cell, $firsttag); + break; + } + // Form fields (since 4.8.000 - 2009-09-07) + case 'form': { + if (isset($tag['attribute']['action'])) { + $this->form_action = $tag['attribute']['action']; + } else { + $this->Error('Please explicitly set action attribute path!'); + } + if (isset($tag['attribute']['enctype'])) { + $this->form_enctype = $tag['attribute']['enctype']; + } else { + $this->form_enctype = 'application/x-www-form-urlencoded'; + } + if (isset($tag['attribute']['method'])) { + $this->form_mode = $tag['attribute']['method']; + } else { + $this->form_mode = 'post'; + } + break; + } + case 'input': { + if (isset($tag['attribute']['name']) AND !TCPDF_STATIC::empty_string($tag['attribute']['name'])) { + $name = $tag['attribute']['name']; + } else { + break; + } + $prop = array(); + $opt = array(); + if (isset($tag['attribute']['readonly']) AND !TCPDF_STATIC::empty_string($tag['attribute']['readonly'])) { + $prop['readonly'] = true; + } + if (isset($tag['attribute']['value']) AND !TCPDF_STATIC::empty_string($tag['attribute']['value'])) { + $value = $tag['attribute']['value']; + } + if (isset($tag['attribute']['maxlength']) AND !TCPDF_STATIC::empty_string($tag['attribute']['maxlength'])) { + $opt['maxlen'] = intval($tag['attribute']['maxlength']); + } + $h = $this->getCellHeight($this->FontSize); + if (isset($tag['attribute']['size']) AND !TCPDF_STATIC::empty_string($tag['attribute']['size'])) { + $w = intval($tag['attribute']['size']) * $this->GetStringWidth(chr(32)) * 2; + } else { + $w = $h; + } + if (isset($tag['attribute']['checked']) AND (($tag['attribute']['checked'] == 'checked') OR ($tag['attribute']['checked'] == 'true'))) { + $checked = true; + } else { + $checked = false; + } + if (isset($tag['align'])) { + switch ($tag['align']) { + case 'C': { + $opt['q'] = 1; + break; + } + case 'R': { + $opt['q'] = 2; + break; + } + case 'L': + default: { + break; + } + } + } + switch ($tag['attribute']['type']) { + case 'text': { + if (isset($value)) { + $opt['v'] = $value; + } + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + break; + } + case 'password': { + if (isset($value)) { + $opt['v'] = $value; + } + $prop['password'] = 'true'; + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + break; + } + case 'checkbox': { + if (!isset($value)) { + break; + } + $this->CheckBox($name, $w, $checked, $prop, $opt, $value, '', '', false); + break; + } + case 'radio': { + if (!isset($value)) { + break; + } + $this->RadioButton($name, $w, $prop, $opt, $value, $checked, '', '', false); + break; + } + case 'submit': { + if (!isset($value)) { + $value = 'submit'; + } + $w = $this->GetStringWidth($value) * 1.5; + $h *= 1.6; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + $action = array(); + $action['S'] = 'SubmitForm'; + $action['F'] = $this->form_action; + if ($this->form_enctype != 'FDF') { + $action['Flags'] = array('ExportFormat'); + } + if ($this->form_mode == 'get') { + $action['Flags'] = array('GetMethod'); + } + $this->Button($name, $w, $h, $value, $action, $prop, $opt, '', '', false); + break; + } + case 'reset': { + if (!isset($value)) { + $value = 'reset'; + } + $w = $this->GetStringWidth($value) * 1.5; + $h *= 1.6; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + $this->Button($name, $w, $h, $value, array('S'=>'ResetForm'), $prop, $opt, '', '', false); + break; + } + case 'file': { + $prop['fileSelect'] = 'true'; + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + if (!isset($value)) { + $value = '*'; + } + $w = $this->GetStringWidth($value) * 2; + $h *= 1.2; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + $jsaction = 'var f=this.getField(\''.$name.'\'); f.browseForFileToSubmit();'; + $this->Button('FB_'.$name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false); + break; + } + case 'hidden': { + if (isset($value)) { + $opt['v'] = $value; + } + $opt['f'] = array('invisible', 'hidden'); + $this->TextField($name, 0, 0, $prop, $opt, '', '', false); + break; + } + case 'image': { + // THIS TYPE MUST BE FIXED + if (isset($tag['attribute']['src']) AND !TCPDF_STATIC::empty_string($tag['attribute']['src'])) { + $img = $tag['attribute']['src']; + } else { + break; + } + $value = 'img'; + //$opt['mk'] = array('i'=>$img, 'tp'=>1, 'if'=>array('sw'=>'A', 's'=>'A', 'fb'=>false)); + if (isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])) { + $jsaction = $tag['attribute']['onclick']; + } else { + $jsaction = ''; + } + $this->Button($name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false); + break; + } + case 'button': { + if (!isset($value)) { + $value = ' '; + } + $w = $this->GetStringWidth($value) * 1.5; + $h *= 1.6; + $prop = array('lineWidth'=>1, 'borderStyle'=>'beveled', 'fillColor'=>array(196, 196, 196), 'strokeColor'=>array(255, 255, 255)); + if (isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])) { + $jsaction = $tag['attribute']['onclick']; + } else { + $jsaction = ''; + } + $this->Button($name, $w, $h, $value, $jsaction, $prop, $opt, '', '', false); + break; + } + } + break; + } + case 'textarea': { + $prop = array(); + $opt = array(); + if (isset($tag['attribute']['readonly']) AND !TCPDF_STATIC::empty_string($tag['attribute']['readonly'])) { + $prop['readonly'] = true; + } + if (isset($tag['attribute']['name']) AND !TCPDF_STATIC::empty_string($tag['attribute']['name'])) { + $name = $tag['attribute']['name']; + } else { + break; + } + if (isset($tag['attribute']['value']) AND !TCPDF_STATIC::empty_string($tag['attribute']['value'])) { + $opt['v'] = $tag['attribute']['value']; + } + if (isset($tag['attribute']['cols']) AND !TCPDF_STATIC::empty_string($tag['attribute']['cols'])) { + $w = intval($tag['attribute']['cols']) * $this->GetStringWidth(chr(32)) * 2; + } else { + $w = 40; + } + if (isset($tag['attribute']['rows']) AND !TCPDF_STATIC::empty_string($tag['attribute']['rows'])) { + $h = intval($tag['attribute']['rows']) * $this->getCellHeight($this->FontSize); + } else { + $h = 10; + } + $prop['multiline'] = 'true'; + $this->TextField($name, $w, $h, $prop, $opt, '', '', false); + break; + } + case 'select': { + $h = $this->getCellHeight($this->FontSize); + if (isset($tag['attribute']['size']) AND !TCPDF_STATIC::empty_string($tag['attribute']['size'])) { + $h *= ($tag['attribute']['size'] + 1); + } + $prop = array(); + $opt = array(); + if (isset($tag['attribute']['name']) AND !TCPDF_STATIC::empty_string($tag['attribute']['name'])) { + $name = $tag['attribute']['name']; + } else { + break; + } + $w = 0; + if (isset($tag['attribute']['opt']) AND !TCPDF_STATIC::empty_string($tag['attribute']['opt'])) { + $options = explode('#!NwL!#', $tag['attribute']['opt']); + $values = array(); + foreach ($options as $val) { + if (strpos($val, '#!TaB!#') !== false) { + $opts = explode('#!TaB!#', $val); + $values[] = $opts; + $w = max($w, $this->GetStringWidth($opts[1])); + } else { + $values[] = $val; + $w = max($w, $this->GetStringWidth($val)); + } + } + } else { + break; + } + $w *= 2; + if (isset($tag['attribute']['multiple']) AND ($tag['attribute']['multiple']='multiple')) { + $prop['multipleSelection'] = 'true'; + $this->ListBox($name, $w, $h, $values, $prop, $opt, '', '', false); + } else { + $this->ComboBox($name, $w, $h, $values, $prop, $opt, '', '', false); + } + break; + } + case 'tcpdf': { + if (defined('K_TCPDF_CALLS_IN_HTML') AND (K_TCPDF_CALLS_IN_HTML === true)) { + // Special tag used to call TCPDF methods + if (isset($tag['attribute']['method'])) { + $tcpdf_method = $tag['attribute']['method']; + if (method_exists($this, $tcpdf_method)) { + if (isset($tag['attribute']['params']) AND (!empty($tag['attribute']['params']))) { + $params = $this->unserializeTCPDFtagParameters($tag['attribute']['params']); + call_user_func_array(array($this, $tcpdf_method), $params); + } else { + $this->$tcpdf_method(); + } + $this->newline = true; + } + } + } + break; + } + default: { + break; + } + } + // define tags that support borders and background colors + $bordertags = array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table'); + if (in_array($tag['value'], $bordertags)) { + // set border + $dom[$key]['borderposition'] = $this->getBorderStartPosition(); + } + if ($dom[$key]['self'] AND isset($dom[$key]['attribute']['pagebreakafter'])) { + $pba = $dom[$key]['attribute']['pagebreakafter']; + // check for pagebreak + if (($pba == 'true') OR ($pba == 'left') OR ($pba == 'right')) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + if ((($pba == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0)))) + OR (($pba == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + } + return $dom; + } + + /** + * Process closing tags. + * @param $dom (array) html dom array + * @param $key (int) current element id + * @param $cell (boolean) if true add the default left (or right if RTL) padding to each new line (default false). + * @param $maxbottomliney (int) maximum y value of current line + * @return $dom array + * @protected + */ + protected function closeHTMLTagHandler($dom, $key, $cell, $maxbottomliney=0) { + $tag = $dom[$key]; + $parent = $dom[($dom[$key]['parent'])]; + $lasttag = ((!isset($dom[($key + 1)])) OR ((!isset($dom[($key + 2)])) AND ($dom[($key + 1)]['value'] == 'marker'))); + $in_table_head = false; + // maximum x position (used to draw borders) + if ($this->rtl) { + $xmax = $this->w; + } else { + $xmax = 0; + } + if ($tag['block']) { + $hbz = 0; // distance from y to line bottom + $hb = 0; // vertical space between block tags + // calculate vertical space for block tags + if (isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h'] >= 0)) { + $pre_h = $this->tagvspaces[$tag['value']][1]['h']; + } elseif (isset($parent['fontsize'])) { + $pre_h = $this->getCellHeight($parent['fontsize'] / $this->k); + } else { + $pre_h = $this->getCellHeight($this->FontSize); + } + if (isset($this->tagvspaces[$tag['value']][1]['n'])) { + $cn = $this->tagvspaces[$tag['value']][1]['n']; + } elseif (preg_match('/[h][0-9]/', $tag['value']) > 0) { + $cn = 0.6; + } else { + $cn = 1; + } + if ((!isset($this->tagvspaces[$tag['value']])) AND ($tag['value'] == 'div')) { + $hb = 0; + } else { + $hb = ($cn * $pre_h); + } + if ($maxbottomliney > $this->PageBreakTrigger) { + $hbz = $this->getCellHeight($this->FontSize); + } elseif ($this->y < $maxbottomliney) { + $hbz = ($maxbottomliney - $this->y); + } + } + // Closing tag + switch($tag['value']) { + case 'tr': { + $table_el = $dom[($dom[$key]['parent'])]['parent']; + if (!isset($parent['endy'])) { + $dom[($dom[$key]['parent'])]['endy'] = $this->y; + $parent['endy'] = $this->y; + } + if (!isset($parent['endpage'])) { + $dom[($dom[$key]['parent'])]['endpage'] = $this->page; + $parent['endpage'] = $this->page; + } + if (!isset($parent['endcolumn'])) { + $dom[($dom[$key]['parent'])]['endcolumn'] = $this->current_column; + $parent['endcolumn'] = $this->current_column; + } + // update row-spanned cells + if (isset($dom[$table_el]['rowspans'])) { + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + $dom[$table_el]['rowspans'][$k]['rowspan'] -= 1; + if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) { + if (($dom[$table_el]['rowspans'][$k]['endpage'] == $parent['endpage']) AND ($dom[$table_el]['rowspans'][$k]['endcolumn'] == $parent['endcolumn'])) { + $dom[($dom[$key]['parent'])]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $parent['endy']); + } elseif (($dom[$table_el]['rowspans'][$k]['endpage'] > $parent['endpage']) OR ($dom[$table_el]['rowspans'][$k]['endcolumn'] > $parent['endcolumn'])) { + $dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy']; + $dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage']; + $dom[($dom[$key]['parent'])]['endcolumn'] = $dom[$table_el]['rowspans'][$k]['endcolumn']; + } + } + } + // report new endy and endpage to the rowspanned cells + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) { + $dom[$table_el]['rowspans'][$k]['endpage'] = max($dom[$table_el]['rowspans'][$k]['endpage'], $dom[($dom[$key]['parent'])]['endpage']); + $dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage']; + $dom[$table_el]['rowspans'][$k]['endcolumn'] = max($dom[$table_el]['rowspans'][$k]['endcolumn'], $dom[($dom[$key]['parent'])]['endcolumn']); + $dom[($dom[$key]['parent'])]['endcolumn'] = $dom[$table_el]['rowspans'][$k]['endcolumn']; + $dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $dom[($dom[$key]['parent'])]['endy']); + $dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy']; + } + } + // update remaining rowspanned cells + foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) { + if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) { + $dom[$table_el]['rowspans'][$k]['endpage'] = $dom[($dom[$key]['parent'])]['endpage']; + $dom[$table_el]['rowspans'][$k]['endcolumn'] = $dom[($dom[$key]['parent'])]['endcolumn']; + $dom[$table_el]['rowspans'][$k]['endy'] = $dom[($dom[$key]['parent'])]['endy']; + } + } + } + $prev_page = $this->page; + $this->setPage($dom[($dom[$key]['parent'])]['endpage']); + if ($this->num_columns > 1) { + if (($prev_page < $this->page) + AND ((($this->current_column == 0) AND ($dom[($dom[$key]['parent'])]['endcolumn'] == ($this->num_columns - 1))) + OR ($this->current_column == $dom[($dom[$key]['parent'])]['endcolumn']))) { + // page jump + $this->selectColumn(0); + $dom[($dom[$key]['parent'])]['endcolumn'] = 0; + $dom[($dom[$key]['parent'])]['endy'] = $this->y; + } else { + $this->selectColumn($dom[($dom[$key]['parent'])]['endcolumn']); + $this->y = $dom[($dom[$key]['parent'])]['endy']; + } + } else { + $this->y = $dom[($dom[$key]['parent'])]['endy']; + } + if (isset($dom[$table_el]['attribute']['cellspacing'])) { + $this->y += $this->getHTMLUnitToUnits($dom[$table_el]['attribute']['cellspacing'], 1, 'px'); + } elseif (isset($dom[$table_el]['border-spacing'])) { + $this->y += $dom[$table_el]['border-spacing']['V']; + } + $this->Ln(0, $cell); + if ($this->current_column == $parent['startcolumn']) { + $this->x = $parent['startx']; + } + // account for booklet mode + if ($this->page > $parent['startpage']) { + if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$parent['startpage']]['orm'])) { + $this->x -= ($this->pagedim[$this->page]['orm'] - $this->pagedim[$parent['startpage']]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$parent['startpage']]['olm'])) { + $this->x += ($this->pagedim[$this->page]['olm'] - $this->pagedim[$parent['startpage']]['olm']); + } + } + break; + } + case 'tablehead': + // closing tag used for the thead part + $in_table_head = true; + $this->inthead = false; + case 'table': { + $table_el = $parent; + // set default border + if (isset($table_el['attribute']['border']) AND ($table_el['attribute']['border'] > 0)) { + // set default border + $border = array('LTRB' => array('width' => $this->getCSSBorderWidth($table_el['attribute']['border']), 'cap'=>'square', 'join'=>'miter', 'dash'=> 0, 'color'=>array(0,0,0))); + } else { + $border = 0; + } + $default_border = $border; + // fix bottom line alignment of last line before page break + foreach ($dom[($dom[$key]['parent'])]['trids'] as $j => $trkey) { + // update row-spanned cells + if (isset($dom[($dom[$key]['parent'])]['rowspans'])) { + foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) { + if (isset($prevtrkey) AND ($trwsp['trid'] == $prevtrkey) AND ($trwsp['mrowspan'] > 0)) { + $dom[($dom[$key]['parent'])]['rowspans'][$k]['trid'] = $trkey; + } + if ($dom[($dom[$key]['parent'])]['rowspans'][$k]['trid'] == $trkey) { + $dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] -= 1; + } + } + } + if (isset($prevtrkey) AND ($dom[$trkey]['startpage'] > $dom[$prevtrkey]['endpage'])) { + $pgendy = $this->pagedim[$dom[$prevtrkey]['endpage']]['hk'] - $this->pagedim[$dom[$prevtrkey]['endpage']]['bm']; + $dom[$prevtrkey]['endy'] = $pgendy; + // update row-spanned cells + if (isset($dom[($dom[$key]['parent'])]['rowspans'])) { + foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) { + if (($trwsp['trid'] == $prevtrkey) AND ($trwsp['mrowspan'] >= 0) AND ($trwsp['endpage'] == $dom[$prevtrkey]['endpage'])) { + $dom[($dom[$key]['parent'])]['rowspans'][$k]['endy'] = $pgendy; + $dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] = -1; + } + } + } + } + $prevtrkey = $trkey; + $table_el = $dom[($dom[$key]['parent'])]; + } + // for each row + if (count($table_el['trids']) > 0) { + unset($xmax); + } + foreach ($table_el['trids'] as $j => $trkey) { + $parent = $dom[$trkey]; + if (!isset($xmax)) { + $xmax = $parent['cellpos'][(count($parent['cellpos']) - 1)]['endx']; + } + // for each cell on the row + foreach ($parent['cellpos'] as $k => $cellpos) { + if (isset($cellpos['rowspanid']) AND ($cellpos['rowspanid'] >= 0)) { + $cellpos['startx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['startx']; + $cellpos['endx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['endx']; + $endy = $table_el['rowspans'][($cellpos['rowspanid'])]['endy']; + $startpage = $table_el['rowspans'][($cellpos['rowspanid'])]['startpage']; + $endpage = $table_el['rowspans'][($cellpos['rowspanid'])]['endpage']; + $startcolumn = $table_el['rowspans'][($cellpos['rowspanid'])]['startcolumn']; + $endcolumn = $table_el['rowspans'][($cellpos['rowspanid'])]['endcolumn']; + } else { + $endy = $parent['endy']; + $startpage = $parent['startpage']; + $endpage = $parent['endpage']; + $startcolumn = $parent['startcolumn']; + $endcolumn = $parent['endcolumn']; + } + if ($this->num_columns == 0) { + $this->num_columns = 1; + } + if (isset($cellpos['border'])) { + $border = $cellpos['border']; + } + if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) { + $this->SetFillColorArray($cellpos['bgcolor']); + $fill = true; + } else { + $fill = false; + } + $x = $cellpos['startx']; + $y = $parent['starty']; + $starty = $y; + $w = abs($cellpos['endx'] - $cellpos['startx']); + // get border modes + $border_start = TCPDF_STATIC::getBorderMode($border, $position='start', $this->opencell); + $border_end = TCPDF_STATIC::getBorderMode($border, $position='end', $this->opencell); + $border_middle = TCPDF_STATIC::getBorderMode($border, $position='middle', $this->opencell); + // design borders around HTML cells. + for ($page = $startpage; $page <= $endpage; ++$page) { // for each page + $ccode = ''; + $this->setPage($page); + if ($this->num_columns < 2) { + // single-column mode + $this->x = $x; + $this->y = $this->tMargin; + } + // account for margin changes + if ($page > $startpage) { + if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { + $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) { + $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + if ($startpage == $endpage) { // single page + $deltacol = 0; + $deltath = 0; + for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column + $this->selectColumn($column); + if ($startcolumn == $endcolumn) { // single column + $cborder = $border; + $h = $endy - $parent['starty']; + $this->y = $y; + $this->x = $x; + } elseif ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $starty; + $this->x = $x; + $h = $this->h - $this->y - $this->bMargin; + if ($this->rtl) { + $deltacol = $this->x + $this->rMargin - $this->w; + } else { + $deltacol = $this->x - $this->lMargin; + } + } elseif ($column == $endcolumn) { // end column + $cborder = $border_end; + if (isset($this->columns[$column]['th']['\''.$page.'\''])) { + $this->y = $this->columns[$column]['th']['\''.$page.'\'']; + } + $this->x += $deltacol; + $h = $endy - $this->y; + } else { // middle column + $cborder = $border_middle; + if (isset($this->columns[$column]['th']['\''.$page.'\''])) { + $this->y = $this->columns[$column]['th']['\''.$page.'\'']; + } + $this->x += $deltacol; + $h = $this->h - $this->y - $this->bMargin; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $startpage) { // first page + $deltacol = 0; + $deltath = 0; + for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column + $this->selectColumn($column); + if ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $starty; + $this->x = $x; + $h = $this->h - $this->y - $this->bMargin; + if ($this->rtl) { + $deltacol = $this->x + $this->rMargin - $this->w; + } else { + $deltacol = $this->x - $this->lMargin; + } + } else { // middle column + $cborder = $border_middle; + if (isset($this->columns[$column]['th']['\''.$page.'\''])) { + $this->y = $this->columns[$column]['th']['\''.$page.'\'']; + } + $this->x += $deltacol; + $h = $this->h - $this->y - $this->bMargin; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $endpage) { // last page + $deltacol = 0; + $deltath = 0; + for ($column = 0; $column <= $endcolumn; ++$column) { // for each column + $this->selectColumn($column); + if ($column == $endcolumn) { // end column + $cborder = $border_end; + if (isset($this->columns[$column]['th']['\''.$page.'\''])) { + $this->y = $this->columns[$column]['th']['\''.$page.'\'']; + } + $this->x += $deltacol; + $h = $endy - $this->y; + } else { // middle column + $cborder = $border_middle; + if (isset($this->columns[$column]['th']['\''.$page.'\''])) { + $this->y = $this->columns[$column]['th']['\''.$page.'\'']; + } + $this->x += $deltacol; + $h = $this->h - $this->y - $this->bMargin; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } else { // middle page + $deltacol = 0; + $deltath = 0; + for ($column = 0; $column < $this->num_columns; ++$column) { // for each column + $this->selectColumn($column); + $cborder = $border_middle; + if (isset($this->columns[$column]['th']['\''.$page.'\''])) { + $this->y = $this->columns[$column]['th']['\''.$page.'\'']; + } + $this->x += $deltacol; + $h = $this->h - $this->y - $this->bMargin; + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } + if (!empty($cborder) OR !empty($fill)) { + $offsetlen = strlen($ccode); + // draw border and fill + if ($this->inxobj) { + // we are inside an XObject template + if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { + $pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']); + $pagemark = $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]; + $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey] += $offsetlen; + } else { + $pagemark = $this->xobjects[$this->xobjid]['intmrk']; + $this->xobjects[$this->xobjid]['intmrk'] += $offsetlen; + } + $pagebuff = $this->xobjects[$this->xobjid]['outdata']; + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend; + } else { + // draw border and fill + if (end($this->transfmrk[$this->page]) !== false) { + $pagemarkkey = key($this->transfmrk[$this->page]); + $pagemark = $this->transfmrk[$this->page][$pagemarkkey]; + } elseif ($this->InFooter) { + $pagemark = $this->footerpos[$this->page]; + } else { + $pagemark = $this->intmrk[$this->page]; + } + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->setPageBuffer($this->page, $pstart.$ccode.$pend); + } + } + } // end for each page + // restore default border + $border = $default_border; + } // end for each cell on the row + if (isset($table_el['attribute']['cellspacing'])) { + $this->y += $this->getHTMLUnitToUnits($table_el['attribute']['cellspacing'], 1, 'px'); + } elseif (isset($table_el['border-spacing'])) { + $this->y += $table_el['border-spacing']['V']; + } + $this->Ln(0, $cell); + $this->x = $parent['startx']; + if ($endpage > $startpage) { + if (($this->rtl) AND ($this->pagedim[$endpage]['orm'] != $this->pagedim[$startpage]['orm'])) { + $this->x += ($this->pagedim[$endpage]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$endpage]['olm'] != $this->pagedim[$startpage]['olm'])) { + $this->x += ($this->pagedim[$endpage]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + } + if (!$in_table_head) { // we are not inside a thead section + $this->cell_padding = $table_el['old_cell_padding']; + // reset row height + $this->resetLastH(); + if (($this->page == ($this->numpages - 1)) AND ($this->pageopen[$this->numpages])) { + $plendiff = ($this->pagelen[$this->numpages] - $this->emptypagemrk[$this->numpages]); + if (($plendiff > 0) AND ($plendiff < 60)) { + $pagediff = substr($this->getPageBuffer($this->numpages), $this->emptypagemrk[$this->numpages], $plendiff); + if (substr($pagediff, 0, 5) == 'BT /F') { + // the difference is only a font setting + $plendiff = 0; + } + } + if ($plendiff == 0) { + // remove last blank page + $this->deletePage($this->numpages); + } + } + if (isset($this->theadMargins['top'])) { + // restore top margin + $this->tMargin = $this->theadMargins['top']; + } + if (!isset($table_el['attribute']['nested']) OR ($table_el['attribute']['nested'] != 'true')) { + // reset main table header + $this->thead = ''; + $this->theadMargins = array(); + $this->pagedim[$this->page]['tm'] = $this->tMargin; + } + } + $parent = $table_el; + break; + } + case 'a': { + $this->HREF = ''; + break; + } + case 'sup': { + $this->SetXY($this->GetX(), $this->GetY() + ((0.7 * $parent['fontsize']) / $this->k)); + break; + } + case 'sub': { + $this->SetXY($this->GetX(), $this->GetY() - ((0.3 * $parent['fontsize']) / $this->k)); + break; + } + case 'div': { + $this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag); + break; + } + case 'blockquote': { + if ($this->rtl) { + $this->rMargin -= $this->listindent; + } else { + $this->lMargin -= $this->listindent; + } + --$this->listindentlevel; + $this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag); + break; + } + case 'p': { + $this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag); + break; + } + case 'pre': { + $this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag); + $this->premode = false; + break; + } + case 'dl': { + --$this->listnum; + if ($this->listnum <= 0) { + $this->listnum = 0; + $this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag); + } else { + $this->addHTMLVertSpace(0, 0, $cell, false, $lasttag); + } + $this->resetLastH(); + break; + } + case 'dt': { + $this->lispacer = ''; + $this->addHTMLVertSpace(0, 0, $cell, false, $lasttag); + break; + } + case 'dd': { + $this->lispacer = ''; + if ($this->rtl) { + $this->rMargin -= $this->listindent; + } else { + $this->lMargin -= $this->listindent; + } + --$this->listindentlevel; + $this->addHTMLVertSpace(0, 0, $cell, false, $lasttag); + break; + } + case 'ul': + case 'ol': { + --$this->listnum; + $this->lispacer = ''; + if ($this->rtl) { + $this->rMargin -= $this->listindent; + } else { + $this->lMargin -= $this->listindent; + } + --$this->listindentlevel; + if ($this->listnum <= 0) { + $this->listnum = 0; + $this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag); + } else { + $this->addHTMLVertSpace(0, 0, $cell, false, $lasttag); + } + $this->resetLastH(); + break; + } + case 'li': { + $this->lispacer = ''; + $this->addHTMLVertSpace(0, 0, $cell, false, $lasttag); + break; + } + case 'h1': + case 'h2': + case 'h3': + case 'h4': + case 'h5': + case 'h6': { + $this->addHTMLVertSpace($hbz, $hb, $cell, false, $lasttag); + break; + } + // Form fields (since 4.8.000 - 2009-09-07) + case 'form': { + $this->form_action = ''; + $this->form_enctype = 'application/x-www-form-urlencoded'; + break; + } + default : { + break; + } + } + // draw border and background (if any) + $this->drawHTMLTagBorder($parent, $xmax); + if (isset($dom[($dom[$key]['parent'])]['attribute']['pagebreakafter'])) { + $pba = $dom[($dom[$key]['parent'])]['attribute']['pagebreakafter']; + // check for pagebreak + if (($pba == 'true') OR ($pba == 'left') OR ($pba == 'right')) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + if ((($pba == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0)))) + OR (($pba == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + } + $this->tmprtl = false; + return $dom; + } + + /** + * Add vertical spaces if needed. + * @param $hbz (string) Distance between current y and line bottom. + * @param $hb (string) The height of the break. + * @param $cell (boolean) if true add the default left (or right if RTL) padding to each new line (default false). + * @param $firsttag (boolean) set to true when the tag is the first. + * @param $lasttag (boolean) set to true when the tag is the last. + * @protected + */ + protected function addHTMLVertSpace($hbz=0, $hb=0, $cell=false, $firsttag=false, $lasttag=false) { + if ($firsttag) { + $this->Ln(0, $cell); + $this->htmlvspace = 0; + return; + } + if ($lasttag) { + $this->Ln($hbz, $cell); + $this->htmlvspace = 0; + return; + } + if ($hb < $this->htmlvspace) { + $hd = 0; + } else { + $hd = $hb - $this->htmlvspace; + $this->htmlvspace = $hb; + } + $this->Ln(($hbz + $hd), $cell); + } + + /** + * Return the starting coordinates to draw an html border + * @return array containing top-left border coordinates + * @protected + * @since 5.7.000 (2010-08-03) + */ + protected function getBorderStartPosition() { + if ($this->rtl) { + $xmax = $this->lMargin; + } else { + $xmax = $this->w - $this->rMargin; + } + return array('page' => $this->page, 'column' => $this->current_column, 'x' => $this->x, 'y' => $this->y, 'xmax' => $xmax); + } + + /** + * Draw an HTML block border and fill + * @param $tag (array) array of tag properties. + * @param $xmax (int) end X coordinate for border. + * @protected + * @since 5.7.000 (2010-08-03) + */ + protected function drawHTMLTagBorder($tag, $xmax) { + if (!isset($tag['borderposition'])) { + // nothing to draw + return; + } + $prev_x = $this->x; + $prev_y = $this->y; + $prev_lasth = $this->lasth; + $border = 0; + $fill = false; + $this->lasth = 0; + if (isset($tag['border']) AND !empty($tag['border'])) { + // get border style + $border = $tag['border']; + if (!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)) { + // border for table header + $border = TCPDF_STATIC::getBorderMode($border, $position='middle', $this->opencell); + } + } + if (isset($tag['bgcolor']) AND ($tag['bgcolor'] !== false)) { + // get background color + $old_bgcolor = $this->bgcolor; + $this->SetFillColorArray($tag['bgcolor']); + $fill = true; + } + if (!$border AND !$fill) { + // nothing to draw + return; + } + if (isset($tag['attribute']['cellspacing'])) { + $clsp = $this->getHTMLUnitToUnits($tag['attribute']['cellspacing'], 1, 'px'); + $cellspacing = array('H' => $clsp, 'V' => $clsp); + } elseif (isset($tag['border-spacing'])) { + $cellspacing = $tag['border-spacing']; + } else { + $cellspacing = array('H' => 0, 'V' => 0); + } + if (($tag['value'] != 'table') AND (is_array($border)) AND (!empty($border))) { + // draw the border externally respect the sqare edge. + $border['mode'] = 'ext'; + } + if ($this->rtl) { + if ($xmax >= $tag['borderposition']['x']) { + $xmax = $tag['borderposition']['xmax']; + } + $w = ($tag['borderposition']['x'] - $xmax); + } else { + if ($xmax <= $tag['borderposition']['x']) { + $xmax = $tag['borderposition']['xmax']; + } + $w = ($xmax - $tag['borderposition']['x']); + } + if ($w <= 0) { + return; + } + $w += $cellspacing['H']; + $startpage = $tag['borderposition']['page']; + $startcolumn = $tag['borderposition']['column']; + $x = $tag['borderposition']['x']; + $y = $tag['borderposition']['y']; + $endpage = $this->page; + $starty = $tag['borderposition']['y'] - $cellspacing['V']; + $currentY = $this->y; + $this->x = $x; + // get latest column + $endcolumn = $this->current_column; + if ($this->num_columns == 0) { + $this->num_columns = 1; + } + // get border modes + $border_start = TCPDF_STATIC::getBorderMode($border, $position='start', $this->opencell); + $border_end = TCPDF_STATIC::getBorderMode($border, $position='end', $this->opencell); + $border_middle = TCPDF_STATIC::getBorderMode($border, $position='middle', $this->opencell); + // temporary disable page regions + $temp_page_regions = $this->page_regions; + $this->page_regions = array(); + // design borders around HTML cells. + for ($page = $startpage; $page <= $endpage; ++$page) { // for each page + $ccode = ''; + $this->setPage($page); + if ($this->num_columns < 2) { + // single-column mode + $this->x = $x; + $this->y = $this->tMargin; + } + // account for margin changes + if ($page > $startpage) { + if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { + $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) { + $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + if ($startpage == $endpage) { + // single page + for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column + $this->selectColumn($column); + if ($startcolumn == $endcolumn) { // single column + $cborder = $border; + $h = ($currentY - $y) + $cellspacing['V']; + $this->y = $starty; + } elseif ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $starty; + $h = $this->h - $this->y - $this->bMargin; + } elseif ($column == $endcolumn) { // end column + $cborder = $border_end; + $h = $currentY - $this->y; + } else { // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $startpage) { // first page + for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column + $this->selectColumn($column); + if ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $starty; + $h = $this->h - $this->y - $this->bMargin; + } else { // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $endpage) { // last page + for ($column = 0; $column <= $endcolumn; ++$column) { // for each column + $this->selectColumn($column); + if ($column == $endcolumn) { + // end column + $cborder = $border_end; + $h = $currentY - $this->y; + } else { + // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } else { // middle page + for ($column = 0; $column < $this->num_columns; ++$column) { // for each column + $this->selectColumn($column); + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } + if ($cborder OR $fill) { + $offsetlen = strlen($ccode); + // draw border and fill + if ($this->inxobj) { + // we are inside an XObject template + if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { + $pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']); + $pagemark = $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]; + $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey] += $offsetlen; + } else { + $pagemark = $this->xobjects[$this->xobjid]['intmrk']; + $this->xobjects[$this->xobjid]['intmrk'] += $offsetlen; + } + $pagebuff = $this->xobjects[$this->xobjid]['outdata']; + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend; + } else { + if (end($this->transfmrk[$this->page]) !== false) { + $pagemarkkey = key($this->transfmrk[$this->page]); + $pagemark = $this->transfmrk[$this->page][$pagemarkkey]; + } elseif ($this->InFooter) { + $pagemark = $this->footerpos[$this->page]; + } else { + $pagemark = $this->intmrk[$this->page]; + } + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->setPageBuffer($this->page, $pstart.$ccode.$pend); + $this->bordermrk[$this->page] += $offsetlen; + $this->cntmrk[$this->page] += $offsetlen; + } + } + } // end for each page + // restore page regions + $this->page_regions = $temp_page_regions; + if (isset($old_bgcolor)) { + // restore background color + $this->SetFillColorArray($old_bgcolor); + } + // restore pointer position + $this->x = $prev_x; + $this->y = $prev_y; + $this->lasth = $prev_lasth; + } + + /** + * Set the default bullet to be used as LI bullet symbol + * @param $symbol (string) character or string to be used (legal values are: '' = automatic, '!' = auto bullet, '#' = auto numbering, 'disc', 'disc', 'circle', 'square', '1', 'decimal', 'decimal-leading-zero', 'i', 'lower-roman', 'I', 'upper-roman', 'a', 'lower-alpha', 'lower-latin', 'A', 'upper-alpha', 'upper-latin', 'lower-greek', 'img|type|width|height|image.ext') + * @public + * @since 4.0.028 (2008-09-26) + */ + public function setLIsymbol($symbol='!') { + // check for custom image symbol + if (substr($symbol, 0, 4) == 'img|') { + $this->lisymbol = $symbol; + return; + } + $symbol = strtolower($symbol); + $valid_symbols = array('!', '#', 'disc', 'circle', 'square', '1', 'decimal', 'decimal-leading-zero', 'i', 'lower-roman', 'I', 'upper-roman', 'a', 'lower-alpha', 'lower-latin', 'A', 'upper-alpha', 'upper-latin', 'lower-greek'); + if (in_array($symbol, $valid_symbols)) { + $this->lisymbol = $symbol; + } else { + $this->lisymbol = ''; + } + } + + /** + * Set the booklet mode for double-sided pages. + * @param $booklet (boolean) true set the booklet mode on, false otherwise. + * @param $inner (float) Inner page margin. + * @param $outer (float) Outer page margin. + * @public + * @since 4.2.000 (2008-10-29) + */ + public function SetBooklet($booklet=true, $inner=-1, $outer=-1) { + $this->booklet = $booklet; + if ($inner >= 0) { + $this->lMargin = $inner; + } + if ($outer >= 0) { + $this->rMargin = $outer; + } + } + + /** + * Swap the left and right margins. + * @param $reverse (boolean) if true swap left and right margins. + * @protected + * @since 4.2.000 (2008-10-29) + */ + protected function swapMargins($reverse=true) { + if ($reverse) { + // swap left and right margins + $mtemp = $this->original_lMargin; + $this->original_lMargin = $this->original_rMargin; + $this->original_rMargin = $mtemp; + $deltam = $this->original_lMargin - $this->original_rMargin; + $this->lMargin += $deltam; + $this->rMargin -= $deltam; + } + } + + /** + * Set the vertical spaces for HTML tags. + * The array must have the following structure (example): + * $tagvs = array('h1' => array(0 => array('h' => '', 'n' => 2), 1 => array('h' => 1.3, 'n' => 1))); + * The first array level contains the tag names, + * the second level contains 0 for opening tags or 1 for closing tags, + * the third level contains the vertical space unit (h) and the number spaces to add (n). + * If the h parameter is not specified, default values are used. + * @param $tagvs (array) array of tags and relative vertical spaces. + * @public + * @since 4.2.001 (2008-10-30) + */ + public function setHtmlVSpace($tagvs) { + $this->tagvspaces = $tagvs; + } + + /** + * Set custom width for list indentation. + * @param $width (float) width of the indentation. Use negative value to disable it. + * @public + * @since 4.2.007 (2008-11-12) + */ + public function setListIndentWidth($width) { + return $this->customlistindent = floatval($width); + } + + /** + * Set the top/bottom cell sides to be open or closed when the cell cross the page. + * @param $isopen (boolean) if true keeps the top/bottom border open for the cell sides that cross the page. + * @public + * @since 4.2.010 (2008-11-14) + */ + public function setOpenCell($isopen) { + $this->opencell = $isopen; + } + + /** + * Set the color and font style for HTML links. + * @param $color (array) RGB array of colors + * @param $fontstyle (string) additional font styles to add + * @public + * @since 4.4.003 (2008-12-09) + */ + public function setHtmlLinksStyle($color=array(0,0,255), $fontstyle='U') { + $this->htmlLinkColorArray = $color; + $this->htmlLinkFontStyle = $fontstyle; + } + + /** + * Convert HTML string containing value and unit of measure to user's units or points. + * @param $htmlval (string) String containing values and unit. + * @param $refsize (string) Reference value in points. + * @param $defaultunit (string) Default unit (can be one of the following: %, em, ex, px, in, mm, pc, pt). + * @param $points (boolean) If true returns points, otherwise returns value in user's units. + * @return float value in user's unit or point if $points=true + * @public + * @since 4.4.004 (2008-12-10) + */ + public function getHTMLUnitToUnits($htmlval, $refsize=1, $defaultunit='px', $points=false) { + $supportedunits = array('%', 'em', 'ex', 'px', 'in', 'cm', 'mm', 'pc', 'pt'); + $retval = 0; + $value = 0; + $unit = 'px'; + if ($points) { + $k = 1; + } else { + $k = $this->k; + } + if (in_array($defaultunit, $supportedunits)) { + $unit = $defaultunit; + } + if (is_numeric($htmlval)) { + $value = floatval($htmlval); + } elseif (preg_match('/([0-9\.\-\+]+)/', $htmlval, $mnum)) { + $value = floatval($mnum[1]); + if (preg_match('/([a-z%]+)/', $htmlval, $munit)) { + if (in_array($munit[1], $supportedunits)) { + $unit = $munit[1]; + } + } + } + switch ($unit) { + // percentage + case '%': { + $retval = (($value * $refsize) / 100); + break; + } + // relative-size + case 'em': { + $retval = ($value * $refsize); + break; + } + // height of lower case 'x' (about half the font-size) + case 'ex': { + $retval = ($value * ($refsize / 2)); + break; + } + // absolute-size + case 'in': { + $retval = (($value * $this->dpi) / $k); + break; + } + // centimeters + case 'cm': { + $retval = (($value / 2.54 * $this->dpi) / $k); + break; + } + // millimeters + case 'mm': { + $retval = (($value / 25.4 * $this->dpi) / $k); + break; + } + // one pica is 12 points + case 'pc': { + $retval = (($value * 12) / $k); + break; + } + // points + case 'pt': { + $retval = ($value / $k); + break; + } + // pixels + case 'px': { + $retval = $this->pixelsToUnits($value); + if ($points) { + $retval *= $this->k; + } + break; + } + } + return $retval; + } + + /** + * Output an HTML list bullet or ordered item symbol + * @param $listdepth (int) list nesting level + * @param $listtype (string) type of list + * @param $size (float) current font size + * @protected + * @since 4.4.004 (2008-12-10) + */ + protected function putHtmlListBullet($listdepth, $listtype='', $size=10) { + if ($this->state != 2) { + return; + } + $size /= $this->k; + $fill = ''; + $bgcolor = $this->bgcolor; + $color = $this->fgcolor; + $strokecolor = $this->strokecolor; + $width = 0; + $textitem = ''; + $tmpx = $this->x; + $lspace = $this->GetStringWidth(' '); + if ($listtype == '^') { + // special symbol used for avoid justification of rect bullet + $this->lispacer = ''; + return; + } elseif ($listtype == '!') { + // set default list type for unordered list + $deftypes = array('disc', 'circle', 'square'); + $listtype = $deftypes[($listdepth - 1) % 3]; + } elseif ($listtype == '#') { + // set default list type for ordered list + $listtype = 'decimal'; + } elseif (substr($listtype, 0, 4) == 'img|') { + // custom image type ('img|type|width|height|image.ext') + $img = explode('|', $listtype); + $listtype = 'img'; + } + switch ($listtype) { + // unordered types + case 'none': { + break; + } + case 'disc': { + $r = $size / 6; + $lspace += (2 * $r); + if ($this->rtl) { + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $this->Circle(($this->x + $r), ($this->y + ($this->lasth / 2)), $r, 0, 360, 'F', array(), $color, 8); + break; + } + case 'circle': { + $r = $size / 6; + $lspace += (2 * $r); + if ($this->rtl) { + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $prev_line_style = $this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor; + $new_line_style = array('width' => ($r / 3), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'phase' => 0, 'color'=>$color); + $this->Circle(($this->x + $r), ($this->y + ($this->lasth / 2)), ($r * (1 - (1/6))), 0, 360, 'D', $new_line_style, array(), 8); + $this->_out($prev_line_style); // restore line settings + break; + } + case 'square': { + $l = $size / 3; + $lspace += $l; + if ($this->rtl) {; + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $this->Rect($this->x, ($this->y + (($this->lasth - $l) / 2)), $l, $l, 'F', array(), $color); + break; + } + case 'img': { + // 1=>type, 2=>width, 3=>height, 4=>image.ext + $lspace += $img[2]; + if ($this->rtl) {; + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $imgtype = strtolower($img[1]); + $prev_y = $this->y; + switch ($imgtype) { + case 'svg': { + $this->ImageSVG($img[4], $this->x, ($this->y + (($this->lasth - $img[3]) / 2)), $img[2], $img[3], '', 'T', '', 0, false); + break; + } + case 'ai': + case 'eps': { + $this->ImageEps($img[4], $this->x, ($this->y + (($this->lasth - $img[3]) / 2)), $img[2], $img[3], '', true, 'T', '', 0, false); + break; + } + default: { + $this->Image($img[4], $this->x, ($this->y + (($this->lasth - $img[3]) / 2)), $img[2], $img[3], $img[1], '', 'T', false, 300, '', false, false, 0, false, false, false); + break; + } + } + $this->y = $prev_y; + break; + } + // ordered types + // $this->listcount[$this->listnum]; + // $textitem + case '1': + case 'decimal': { + $textitem = $this->listcount[$this->listnum]; + break; + } + case 'decimal-leading-zero': { + $textitem = sprintf('%02d', $this->listcount[$this->listnum]); + break; + } + case 'i': + case 'lower-roman': { + $textitem = strtolower(TCPDF_STATIC::intToRoman($this->listcount[$this->listnum])); + break; + } + case 'I': + case 'upper-roman': { + $textitem = TCPDF_STATIC::intToRoman($this->listcount[$this->listnum]); + break; + } + case 'a': + case 'lower-alpha': + case 'lower-latin': { + $textitem = chr(97 + $this->listcount[$this->listnum] - 1); + break; + } + case 'A': + case 'upper-alpha': + case 'upper-latin': { + $textitem = chr(65 + $this->listcount[$this->listnum] - 1); + break; + } + case 'lower-greek': { + $textitem = TCPDF_FONTS::unichr((945 + $this->listcount[$this->listnum] - 1), $this->isunicode); + break; + } + /* + // Types to be implemented (special handling) + case 'hebrew': { + break; + } + case 'armenian': { + break; + } + case 'georgian': { + break; + } + case 'cjk-ideographic': { + break; + } + case 'hiragana': { + break; + } + case 'katakana': { + break; + } + case 'hiragana-iroha': { + break; + } + case 'katakana-iroha': { + break; + } + */ + default: { + $textitem = $this->listcount[$this->listnum]; + } + } + if (!TCPDF_STATIC::empty_string($textitem)) { + // Check whether we need a new page or new column + $prev_y = $this->y; + $h = $this->getCellHeight($this->FontSize); + if ($this->checkPageBreak($h) OR ($this->y < $prev_y)) { + $tmpx = $this->x; + } + // print ordered item + if ($this->rtl) { + $textitem = '.'.$textitem; + } else { + $textitem = $textitem.'.'; + } + $lspace += $this->GetStringWidth($textitem); + if ($this->rtl) { + $this->x += $lspace; + } else { + $this->x -= $lspace; + } + $this->Write($this->lasth, $textitem, '', false, '', false, 0, false); + } + $this->x = $tmpx; + $this->lispacer = '^'; + // restore colors + $this->SetFillColorArray($bgcolor); + $this->SetDrawColorArray($strokecolor); + $this->SettextColorArray($color); + } + + /** + * Returns current graphic variables as array. + * @return array of graphic variables + * @protected + * @since 4.2.010 (2008-11-14) + */ + protected function getGraphicVars() { + $grapvars = array( + 'FontFamily' => $this->FontFamily, + 'FontStyle' => $this->FontStyle, + 'FontSizePt' => $this->FontSizePt, + 'rMargin' => $this->rMargin, + 'lMargin' => $this->lMargin, + 'cell_padding' => $this->cell_padding, + 'cell_margin' => $this->cell_margin, + 'LineWidth' => $this->LineWidth, + 'linestyleWidth' => $this->linestyleWidth, + 'linestyleCap' => $this->linestyleCap, + 'linestyleJoin' => $this->linestyleJoin, + 'linestyleDash' => $this->linestyleDash, + 'textrendermode' => $this->textrendermode, + 'textstrokewidth' => $this->textstrokewidth, + 'DrawColor' => $this->DrawColor, + 'FillColor' => $this->FillColor, + 'TextColor' => $this->TextColor, + 'ColorFlag' => $this->ColorFlag, + 'bgcolor' => $this->bgcolor, + 'fgcolor' => $this->fgcolor, + 'htmlvspace' => $this->htmlvspace, + 'listindent' => $this->listindent, + 'listindentlevel' => $this->listindentlevel, + 'listnum' => $this->listnum, + 'listordered' => $this->listordered, + 'listcount' => $this->listcount, + 'lispacer' => $this->lispacer, + 'cell_height_ratio' => $this->cell_height_ratio, + 'font_stretching' => $this->font_stretching, + 'font_spacing' => $this->font_spacing, + 'alpha' => $this->alpha, + // extended + 'lasth' => $this->lasth, + 'tMargin' => $this->tMargin, + 'bMargin' => $this->bMargin, + 'AutoPageBreak' => $this->AutoPageBreak, + 'PageBreakTrigger' => $this->PageBreakTrigger, + 'x' => $this->x, + 'y' => $this->y, + 'w' => $this->w, + 'h' => $this->h, + 'wPt' => $this->wPt, + 'hPt' => $this->hPt, + 'fwPt' => $this->fwPt, + 'fhPt' => $this->fhPt, + 'page' => $this->page, + 'current_column' => $this->current_column, + 'num_columns' => $this->num_columns + ); + return $grapvars; + } + + /** + * Set graphic variables. + * @param $gvars (array) array of graphic variablesto restore + * @param $extended (boolean) if true restore extended graphic variables + * @protected + * @since 4.2.010 (2008-11-14) + */ + protected function setGraphicVars($gvars, $extended=false) { + if ($this->state != 2) { + return; + } + $this->FontFamily = $gvars['FontFamily']; + $this->FontStyle = $gvars['FontStyle']; + $this->FontSizePt = $gvars['FontSizePt']; + $this->rMargin = $gvars['rMargin']; + $this->lMargin = $gvars['lMargin']; + $this->cell_padding = $gvars['cell_padding']; + $this->cell_margin = $gvars['cell_margin']; + $this->LineWidth = $gvars['LineWidth']; + $this->linestyleWidth = $gvars['linestyleWidth']; + $this->linestyleCap = $gvars['linestyleCap']; + $this->linestyleJoin = $gvars['linestyleJoin']; + $this->linestyleDash = $gvars['linestyleDash']; + $this->textrendermode = $gvars['textrendermode']; + $this->textstrokewidth = $gvars['textstrokewidth']; + $this->DrawColor = $gvars['DrawColor']; + $this->FillColor = $gvars['FillColor']; + $this->TextColor = $gvars['TextColor']; + $this->ColorFlag = $gvars['ColorFlag']; + $this->bgcolor = $gvars['bgcolor']; + $this->fgcolor = $gvars['fgcolor']; + $this->htmlvspace = $gvars['htmlvspace']; + $this->listindent = $gvars['listindent']; + $this->listindentlevel = $gvars['listindentlevel']; + $this->listnum = $gvars['listnum']; + $this->listordered = $gvars['listordered']; + $this->listcount = $gvars['listcount']; + $this->lispacer = $gvars['lispacer']; + $this->cell_height_ratio = $gvars['cell_height_ratio']; + $this->font_stretching = $gvars['font_stretching']; + $this->font_spacing = $gvars['font_spacing']; + $this->alpha = $gvars['alpha']; + if ($extended) { + // restore extended values + $this->lasth = $gvars['lasth']; + $this->tMargin = $gvars['tMargin']; + $this->bMargin = $gvars['bMargin']; + $this->AutoPageBreak = $gvars['AutoPageBreak']; + $this->PageBreakTrigger = $gvars['PageBreakTrigger']; + $this->x = $gvars['x']; + $this->y = $gvars['y']; + $this->w = $gvars['w']; + $this->h = $gvars['h']; + $this->wPt = $gvars['wPt']; + $this->hPt = $gvars['hPt']; + $this->fwPt = $gvars['fwPt']; + $this->fhPt = $gvars['fhPt']; + $this->page = $gvars['page']; + $this->current_column = $gvars['current_column']; + $this->num_columns = $gvars['num_columns']; + } + $this->_out(''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor.''); + if (!TCPDF_STATIC::empty_string($this->FontFamily)) { + $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); + } + } + + /** + * Outputs the "save graphics state" operator 'q' + * @protected + */ + protected function _outSaveGraphicsState() { + $this->_out('q'); + } + + /** + * Outputs the "restore graphics state" operator 'Q' + * @protected + */ + protected function _outRestoreGraphicsState() { + $this->_out('Q'); + } + + /** + * Set buffer content (always append data). + * @param $data (string) data + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected function setBuffer($data) { + $this->bufferlen += strlen($data); + $this->buffer .= $data; + } + + /** + * Replace the buffer content + * @param $data (string) data + * @protected + * @since 5.5.000 (2010-06-22) + */ + protected function replaceBuffer($data) { + $this->bufferlen = strlen($data); + $this->buffer = $data; + } + + /** + * Get buffer content. + * @return string buffer content + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected function getBuffer() { + return $this->buffer; + } + + /** + * Set page buffer content. + * @param $page (int) page number + * @param $data (string) page data + * @param $append (boolean) if true append data, false replace. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected function setPageBuffer($page, $data, $append=false) { + if ($append) { + $this->pages[$page] .= $data; + } else { + $this->pages[$page] = $data; + } + if ($append AND isset($this->pagelen[$page])) { + $this->pagelen[$page] += strlen($data); + } else { + $this->pagelen[$page] = strlen($data); + } + } + + /** + * Get page buffer content. + * @param $page (int) page number + * @return string page buffer content or false in case of error + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected function getPageBuffer($page) { + if (isset($this->pages[$page])) { + return $this->pages[$page]; + } + return false; + } + + /** + * Set image buffer content. + * @param $image (string) image key + * @param $data (array) image data + * @return int image index number + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected function setImageBuffer($image, $data) { + if (($data['i'] = array_search($image, $this->imagekeys)) === FALSE) { + $this->imagekeys[$this->numimages] = $image; + $data['i'] = $this->numimages; + ++$this->numimages; + } + $this->images[$image] = $data; + return $data['i']; + } + + /** + * Set image buffer content for a specified sub-key. + * @param $image (string) image key + * @param $key (string) image sub-key + * @param $data (array) image data + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected function setImageSubBuffer($image, $key, $data) { + if (!isset($this->images[$image])) { + $this->setImageBuffer($image, array()); + } + $this->images[$image][$key] = $data; + } + + /** + * Get image buffer content. + * @param $image (string) image key + * @return string image buffer content or false in case of error + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected function getImageBuffer($image) { + if (isset($this->images[$image])) { + return $this->images[$image]; + } + return false; + } + + /** + * Set font buffer content. + * @param $font (string) font key + * @param $data (array) font data + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected function setFontBuffer($font, $data) { + $this->fonts[$font] = $data; + if (!in_array($font, $this->fontkeys)) { + $this->fontkeys[] = $font; + // store object ID for current font + ++$this->n; + $this->font_obj_ids[$font] = $this->n; + $this->setFontSubBuffer($font, 'n', $this->n); + } + } + + /** + * Set font buffer content. + * @param $font (string) font key + * @param $key (string) font sub-key + * @param $data (array) font data + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected function setFontSubBuffer($font, $key, $data) { + if (!isset($this->fonts[$font])) { + $this->setFontBuffer($font, array()); + } + $this->fonts[$font][$key] = $data; + } + + /** + * Get font buffer content. + * @param $font (string) font key + * @return string font buffer content or false in case of error + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected function getFontBuffer($font) { + if (isset($this->fonts[$font])) { + return $this->fonts[$font]; + } + return false; + } + + /** + * Move a page to a previous position. + * @param $frompage (int) number of the source page + * @param $topage (int) number of the destination page (must be less than $frompage) + * @return true in case of success, false in case of error. + * @public + * @since 4.5.000 (2009-01-02) + */ + public function movePage($frompage, $topage) { + if (($frompage > $this->numpages) OR ($frompage <= $topage)) { + return false; + } + if ($frompage == $this->page) { + // close the page before moving it + $this->endPage(); + } + // move all page-related states + $tmppage = $this->getPageBuffer($frompage); + $tmppagedim = $this->pagedim[$frompage]; + $tmppagelen = $this->pagelen[$frompage]; + $tmpintmrk = $this->intmrk[$frompage]; + $tmpbordermrk = $this->bordermrk[$frompage]; + $tmpcntmrk = $this->cntmrk[$frompage]; + $tmppageobjects = $this->pageobjects[$frompage]; + if (isset($this->footerpos[$frompage])) { + $tmpfooterpos = $this->footerpos[$frompage]; + } + if (isset($this->footerlen[$frompage])) { + $tmpfooterlen = $this->footerlen[$frompage]; + } + if (isset($this->transfmrk[$frompage])) { + $tmptransfmrk = $this->transfmrk[$frompage]; + } + if (isset($this->PageAnnots[$frompage])) { + $tmpannots = $this->PageAnnots[$frompage]; + } + if (isset($this->newpagegroup) AND !empty($this->newpagegroup)) { + for ($i = $frompage; $i > $topage; --$i) { + if (isset($this->newpagegroup[$i]) AND (($i + $this->pagegroups[$this->newpagegroup[$i]]) > $frompage)) { + --$this->pagegroups[$this->newpagegroup[$i]]; + break; + } + } + for ($i = $topage; $i > 0; --$i) { + if (isset($this->newpagegroup[$i]) AND (($i + $this->pagegroups[$this->newpagegroup[$i]]) > $topage)) { + ++$this->pagegroups[$this->newpagegroup[$i]]; + break; + } + } + } + for ($i = $frompage; $i > $topage; --$i) { + $j = $i - 1; + // shift pages down + $this->setPageBuffer($i, $this->getPageBuffer($j)); + $this->pagedim[$i] = $this->pagedim[$j]; + $this->pagelen[$i] = $this->pagelen[$j]; + $this->intmrk[$i] = $this->intmrk[$j]; + $this->bordermrk[$i] = $this->bordermrk[$j]; + $this->cntmrk[$i] = $this->cntmrk[$j]; + $this->pageobjects[$i] = $this->pageobjects[$j]; + if (isset($this->footerpos[$j])) { + $this->footerpos[$i] = $this->footerpos[$j]; + } elseif (isset($this->footerpos[$i])) { + unset($this->footerpos[$i]); + } + if (isset($this->footerlen[$j])) { + $this->footerlen[$i] = $this->footerlen[$j]; + } elseif (isset($this->footerlen[$i])) { + unset($this->footerlen[$i]); + } + if (isset($this->transfmrk[$j])) { + $this->transfmrk[$i] = $this->transfmrk[$j]; + } elseif (isset($this->transfmrk[$i])) { + unset($this->transfmrk[$i]); + } + if (isset($this->PageAnnots[$j])) { + $this->PageAnnots[$i] = $this->PageAnnots[$j]; + } elseif (isset($this->PageAnnots[$i])) { + unset($this->PageAnnots[$i]); + } + if (isset($this->newpagegroup[$j])) { + $this->newpagegroup[$i] = $this->newpagegroup[$j]; + unset($this->newpagegroup[$j]); + } + if ($this->currpagegroup == $j) { + $this->currpagegroup = $i; + } + } + $this->setPageBuffer($topage, $tmppage); + $this->pagedim[$topage] = $tmppagedim; + $this->pagelen[$topage] = $tmppagelen; + $this->intmrk[$topage] = $tmpintmrk; + $this->bordermrk[$topage] = $tmpbordermrk; + $this->cntmrk[$topage] = $tmpcntmrk; + $this->pageobjects[$topage] = $tmppageobjects; + if (isset($tmpfooterpos)) { + $this->footerpos[$topage] = $tmpfooterpos; + } elseif (isset($this->footerpos[$topage])) { + unset($this->footerpos[$topage]); + } + if (isset($tmpfooterlen)) { + $this->footerlen[$topage] = $tmpfooterlen; + } elseif (isset($this->footerlen[$topage])) { + unset($this->footerlen[$topage]); + } + if (isset($tmptransfmrk)) { + $this->transfmrk[$topage] = $tmptransfmrk; + } elseif (isset($this->transfmrk[$topage])) { + unset($this->transfmrk[$topage]); + } + if (isset($tmpannots)) { + $this->PageAnnots[$topage] = $tmpannots; + } elseif (isset($this->PageAnnots[$topage])) { + unset($this->PageAnnots[$topage]); + } + // adjust outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if (!$outline['f']) { + if (($outline['p'] >= $topage) AND ($outline['p'] < $frompage)) { + $this->outlines[$key]['p'] = ($outline['p'] + 1); + } elseif ($outline['p'] == $frompage) { + $this->outlines[$key]['p'] = $topage; + } + } + } + // adjust dests + $tmpdests = $this->dests; + foreach ($tmpdests as $key => $dest) { + if (!$dest['f']) { + if (($dest['p'] >= $topage) AND ($dest['p'] < $frompage)) { + $this->dests[$key]['p'] = ($dest['p'] + 1); + } elseif ($dest['p'] == $frompage) { + $this->dests[$key]['p'] = $topage; + } + } + } + // adjust links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if (!$link['f']) { + if (($link['p'] >= $topage) AND ($link['p'] < $frompage)) { + $this->links[$key]['p'] = ($link['p'] + 1); + } elseif ($link['p'] == $frompage) { + $this->links[$key]['p'] = $topage; + } + } + } + // adjust javascript + $jfrompage = $frompage; + $jtopage = $topage; + if (preg_match_all('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/', $this->javascript, $pamatch) > 0) { + foreach($pamatch[0] as $pk => $pmatch) { + $pagenum = intval($pamatch[3][$pk]) + 1; + if (($pagenum >= $jtopage) AND ($pagenum < $jfrompage)) { + $newpage = ($pagenum + 1); + } elseif ($pagenum == $jfrompage) { + $newpage = $jtopage; + } else { + $newpage = $pagenum; + } + --$newpage; + $newjs = "this.addField(\'".$pamatch[1][$pk]."\',\'".$pamatch[2][$pk]."\',".$newpage; + $this->javascript = str_replace($pmatch, $newjs, $this->javascript); + } + unset($pamatch); + } + // return to last page + $this->lastPage(true); + return true; + } + + /** + * Remove the specified page. + * @param $page (int) page to remove + * @return true in case of success, false in case of error. + * @public + * @since 4.6.004 (2009-04-23) + */ + public function deletePage($page) { + if (($page < 1) OR ($page > $this->numpages)) { + return false; + } + // delete current page + unset($this->pages[$page]); + unset($this->pagedim[$page]); + unset($this->pagelen[$page]); + unset($this->intmrk[$page]); + unset($this->bordermrk[$page]); + unset($this->cntmrk[$page]); + foreach ($this->pageobjects[$page] as $oid) { + if (isset($this->offsets[$oid])){ + unset($this->offsets[$oid]); + } + } + unset($this->pageobjects[$page]); + if (isset($this->footerpos[$page])) { + unset($this->footerpos[$page]); + } + if (isset($this->footerlen[$page])) { + unset($this->footerlen[$page]); + } + if (isset($this->transfmrk[$page])) { + unset($this->transfmrk[$page]); + } + if (isset($this->PageAnnots[$page])) { + unset($this->PageAnnots[$page]); + } + if (isset($this->newpagegroup) AND !empty($this->newpagegroup)) { + for ($i = $page; $i > 0; --$i) { + if (isset($this->newpagegroup[$i]) AND (($i + $this->pagegroups[$this->newpagegroup[$i]]) > $page)) { + --$this->pagegroups[$this->newpagegroup[$i]]; + break; + } + } + } + if (isset($this->pageopen[$page])) { + unset($this->pageopen[$page]); + } + if ($page < $this->numpages) { + // update remaining pages + for ($i = $page; $i < $this->numpages; ++$i) { + $j = $i + 1; + // shift pages + $this->setPageBuffer($i, $this->getPageBuffer($j)); + $this->pagedim[$i] = $this->pagedim[$j]; + $this->pagelen[$i] = $this->pagelen[$j]; + $this->intmrk[$i] = $this->intmrk[$j]; + $this->bordermrk[$i] = $this->bordermrk[$j]; + $this->cntmrk[$i] = $this->cntmrk[$j]; + $this->pageobjects[$i] = $this->pageobjects[$j]; + if (isset($this->footerpos[$j])) { + $this->footerpos[$i] = $this->footerpos[$j]; + } elseif (isset($this->footerpos[$i])) { + unset($this->footerpos[$i]); + } + if (isset($this->footerlen[$j])) { + $this->footerlen[$i] = $this->footerlen[$j]; + } elseif (isset($this->footerlen[$i])) { + unset($this->footerlen[$i]); + } + if (isset($this->transfmrk[$j])) { + $this->transfmrk[$i] = $this->transfmrk[$j]; + } elseif (isset($this->transfmrk[$i])) { + unset($this->transfmrk[$i]); + } + if (isset($this->PageAnnots[$j])) { + $this->PageAnnots[$i] = $this->PageAnnots[$j]; + } elseif (isset($this->PageAnnots[$i])) { + unset($this->PageAnnots[$i]); + } + if (isset($this->newpagegroup[$j])) { + $this->newpagegroup[$i] = $this->newpagegroup[$j]; + unset($this->newpagegroup[$j]); + } + if ($this->currpagegroup == $j) { + $this->currpagegroup = $i; + } + if (isset($this->pageopen[$j])) { + $this->pageopen[$i] = $this->pageopen[$j]; + } elseif (isset($this->pageopen[$i])) { + unset($this->pageopen[$i]); + } + } + // remove last page + unset($this->pages[$this->numpages]); + unset($this->pagedim[$this->numpages]); + unset($this->pagelen[$this->numpages]); + unset($this->intmrk[$this->numpages]); + unset($this->bordermrk[$this->numpages]); + unset($this->cntmrk[$this->numpages]); + foreach ($this->pageobjects[$this->numpages] as $oid) { + if (isset($this->offsets[$oid])){ + unset($this->offsets[$oid]); + } + } + unset($this->pageobjects[$this->numpages]); + if (isset($this->footerpos[$this->numpages])) { + unset($this->footerpos[$this->numpages]); + } + if (isset($this->footerlen[$this->numpages])) { + unset($this->footerlen[$this->numpages]); + } + if (isset($this->transfmrk[$this->numpages])) { + unset($this->transfmrk[$this->numpages]); + } + if (isset($this->PageAnnots[$this->numpages])) { + unset($this->PageAnnots[$this->numpages]); + } + if (isset($this->newpagegroup[$this->numpages])) { + unset($this->newpagegroup[$this->numpages]); + } + if ($this->currpagegroup == $this->numpages) { + $this->currpagegroup = ($this->numpages - 1); + } + if (isset($this->pagegroups[$this->numpages])) { + unset($this->pagegroups[$this->numpages]); + } + if (isset($this->pageopen[$this->numpages])) { + unset($this->pageopen[$this->numpages]); + } + } + --$this->numpages; + $this->page = $this->numpages; + // adjust outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if (!$outline['f']) { + if ($outline['p'] > $page) { + $this->outlines[$key]['p'] = $outline['p'] - 1; + } elseif ($outline['p'] == $page) { + unset($this->outlines[$key]); + } + } + } + // adjust dests + $tmpdests = $this->dests; + foreach ($tmpdests as $key => $dest) { + if (!$dest['f']) { + if ($dest['p'] > $page) { + $this->dests[$key]['p'] = $dest['p'] - 1; + } elseif ($dest['p'] == $page) { + unset($this->dests[$key]); + } + } + } + // adjust links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if (!$link['f']) { + if ($link['p'] > $page) { + $this->links[$key]['p'] = $link['p'] - 1; + } elseif ($link['p'] == $page) { + unset($this->links[$key]); + } + } + } + // adjust javascript + $jpage = $page; + if (preg_match_all('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/', $this->javascript, $pamatch) > 0) { + foreach($pamatch[0] as $pk => $pmatch) { + $pagenum = intval($pamatch[3][$pk]) + 1; + if ($pagenum >= $jpage) { + $newpage = ($pagenum - 1); + } elseif ($pagenum == $jpage) { + $newpage = 1; + } else { + $newpage = $pagenum; + } + --$newpage; + $newjs = "this.addField(\'".$pamatch[1][$pk]."\',\'".$pamatch[2][$pk]."\',".$newpage; + $this->javascript = str_replace($pmatch, $newjs, $this->javascript); + } + unset($pamatch); + } + // return to last page + if ($this->numpages > 0) { + $this->lastPage(true); + } + return true; + } + + /** + * Clone the specified page to a new page. + * @param $page (int) number of page to copy (0 = current page) + * @return true in case of success, false in case of error. + * @public + * @since 4.9.015 (2010-04-20) + */ + public function copyPage($page=0) { + if ($page == 0) { + // default value + $page = $this->page; + } + if (($page < 1) OR ($page > $this->numpages)) { + return false; + } + // close the last page + $this->endPage(); + // copy all page-related states + ++$this->numpages; + $this->page = $this->numpages; + $this->setPageBuffer($this->page, $this->getPageBuffer($page)); + $this->pagedim[$this->page] = $this->pagedim[$page]; + $this->pagelen[$this->page] = $this->pagelen[$page]; + $this->intmrk[$this->page] = $this->intmrk[$page]; + $this->bordermrk[$this->page] = $this->bordermrk[$page]; + $this->cntmrk[$this->page] = $this->cntmrk[$page]; + $this->pageobjects[$this->page] = $this->pageobjects[$page]; + $this->pageopen[$this->page] = false; + if (isset($this->footerpos[$page])) { + $this->footerpos[$this->page] = $this->footerpos[$page]; + } + if (isset($this->footerlen[$page])) { + $this->footerlen[$this->page] = $this->footerlen[$page]; + } + if (isset($this->transfmrk[$page])) { + $this->transfmrk[$this->page] = $this->transfmrk[$page]; + } + if (isset($this->PageAnnots[$page])) { + $this->PageAnnots[$this->page] = $this->PageAnnots[$page]; + } + if (isset($this->newpagegroup[$page])) { + // start a new group + $this->newpagegroup[$this->page] = sizeof($this->newpagegroup) + 1; + $this->currpagegroup = $this->newpagegroup[$this->page]; + $this->pagegroups[$this->currpagegroup] = 1; + } elseif (isset($this->currpagegroup) AND ($this->currpagegroup > 0)) { + ++$this->pagegroups[$this->currpagegroup]; + } + // copy outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if ($outline['p'] == $page) { + $this->outlines[] = array('t' => $outline['t'], 'l' => $outline['l'], 'x' => $outline['x'], 'y' => $outline['y'], 'p' => $this->page, 'f' => $outline['f'], 's' => $outline['s'], 'c' => $outline['c']); + } + } + // copy links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if ($link['p'] == $page) { + $this->links[] = array('p' => $this->page, 'y' => $link['y'], 'f' => $link['f']); + } + } + // return to last page + $this->lastPage(true); + return true; + } + + /** + * Output a Table of Content Index (TOC). + * This method must be called after all Bookmarks were set. + * Before calling this method you have to open the page using the addTOCPage() method. + * After calling this method you have to call endTOCPage() to close the TOC page. + * You can override this method to achieve different styles. + * @param $page (int) page number where this TOC should be inserted (leave empty for current page). + * @param $numbersfont (string) set the font for page numbers (please use monospaced font for better alignment). + * @param $filler (string) string used to fill the space between text and page number. + * @param $toc_name (string) name to use for TOC bookmark. + * @param $style (string) Font style for title: B = Bold, I = Italic, BI = Bold + Italic. + * @param $color (array) RGB color array for bookmark title (values from 0 to 255). + * @public + * @author Nicola Asuni + * @since 4.5.000 (2009-01-02) + * @see addTOCPage(), endTOCPage(), addHTMLTOC() + */ + public function addTOC($page='', $numbersfont='', $filler='.', $toc_name='TOC', $style='', $color=array(0,0,0)) { + $fontsize = $this->FontSizePt; + $fontfamily = $this->FontFamily; + $fontstyle = $this->FontStyle; + $w = $this->w - $this->lMargin - $this->rMargin; + $spacer = $this->GetStringWidth(chr(32)) * 4; + $lmargin = $this->lMargin; + $rmargin = $this->rMargin; + $x_start = $this->GetX(); + $page_first = $this->page; + $current_page = $this->page; + $page_fill_start = false; + $page_fill_end = false; + $current_column = $this->current_column; + if (TCPDF_STATIC::empty_string($numbersfont)) { + $numbersfont = $this->default_monospaced_font; + } + if (TCPDF_STATIC::empty_string($filler)) { + $filler = ' '; + } + if (TCPDF_STATIC::empty_string($page)) { + $gap = ' '; + } else { + $gap = ''; + if ($page < 1) { + $page = 1; + } + } + $this->SetFont($numbersfont, $fontstyle, $fontsize); + $numwidth = $this->GetStringWidth('00000'); + $maxpage = 0; //used for pages on attached documents + foreach ($this->outlines as $key => $outline) { + // check for extra pages (used for attachments) + if (($this->page > $page_first) AND ($outline['p'] >= $this->numpages)) { + $outline['p'] += ($this->page - $page_first); + } + if ($this->rtl) { + $aligntext = 'R'; + $alignnum = 'L'; + } else { + $aligntext = 'L'; + $alignnum = 'R'; + } + if ($outline['l'] == 0) { + $this->SetFont($fontfamily, $outline['s'].'B', $fontsize); + } else { + $this->SetFont($fontfamily, $outline['s'], $fontsize - $outline['l']); + } + $this->SetTextColorArray($outline['c']); + // check for page break + $this->checkPageBreak(2 * $this->getCellHeight($this->FontSize)); + // set margins and X position + if (($this->page == $current_page) AND ($this->current_column == $current_column)) { + $this->lMargin = $lmargin; + $this->rMargin = $rmargin; + } else { + if ($this->current_column != $current_column) { + if ($this->rtl) { + $x_start = $this->w - $this->columns[$this->current_column]['x']; + } else { + $x_start = $this->columns[$this->current_column]['x']; + } + } + $lmargin = $this->lMargin; + $rmargin = $this->rMargin; + $current_page = $this->page; + $current_column = $this->current_column; + } + $this->SetX($x_start); + $indent = ($spacer * $outline['l']); + if ($this->rtl) { + $this->x -= $indent; + $this->rMargin = $this->w - $this->x; + } else { + $this->x += $indent; + $this->lMargin = $this->x; + } + $link = $this->AddLink(); + $this->SetLink($link, $outline['y'], $outline['p']); + // write the text + if ($this->rtl) { + $txt = ' '.$outline['t']; + } else { + $txt = $outline['t'].' '; + } + $this->Write(0, $txt, $link, false, $aligntext, false, 0, false, false, 0, $numwidth, ''); + if ($this->rtl) { + $tw = $this->x - $this->lMargin; + } else { + $tw = $this->w - $this->rMargin - $this->x; + } + $this->SetFont($numbersfont, $fontstyle, $fontsize); + if (TCPDF_STATIC::empty_string($page)) { + $pagenum = $outline['p']; + } else { + // placemark to be replaced with the correct number + $pagenum = '{#'.($outline['p']).'}'; + if ($this->isUnicodeFont()) { + $pagenum = '{'.$pagenum.'}'; + } + $maxpage = max($maxpage, $outline['p']); + } + $fw = ($tw - $this->GetStringWidth($pagenum.$filler)); + $wfiller = $this->GetStringWidth($filler); + if ($wfiller > 0) { + $numfills = floor($fw / $wfiller); + } else { + $numfills = 0; + } + if ($numfills > 0) { + $rowfill = str_repeat($filler, $numfills); + } else { + $rowfill = ''; + } + if ($this->rtl) { + $pagenum = $pagenum.$gap.$rowfill; + } else { + $pagenum = $rowfill.$gap.$pagenum; + } + // write the number + $this->Cell($tw, 0, $pagenum, 0, 1, $alignnum, 0, $link, 0); + } + $page_last = $this->getPage(); + $numpages = ($page_last - $page_first + 1); + // account for booklet mode + if ($this->booklet) { + // check if a blank page is required before TOC + $page_fill_start = ((($page_first % 2) == 0) XOR (($page % 2) == 0)); + $page_fill_end = (!((($numpages % 2) == 0) XOR ($page_fill_start))); + if ($page_fill_start) { + // add a page at the end (to be moved before TOC) + $this->addPage(); + ++$page_last; + ++$numpages; + } + if ($page_fill_end) { + // add a page at the end + $this->addPage(); + ++$page_last; + ++$numpages; + } + } + $maxpage = max($maxpage, $page_last); + if (!TCPDF_STATIC::empty_string($page)) { + for ($p = $page_first; $p <= $page_last; ++$p) { + // get page data + $temppage = $this->getPageBuffer($p); + for ($n = 1; $n <= $maxpage; ++$n) { + // update page numbers + $a = '{#'.$n.'}'; + // get page number aliases + $pnalias = $this->getInternalPageNumberAliases($a); + // calculate replacement number + if (($n >= $page) AND ($n <= $this->numpages)) { + $np = $n + $numpages; + } else { + $np = $n; + } + $na = TCPDF_STATIC::formatTOCPageNumber(($this->starting_page_number + $np - 1)); + $nu = TCPDF_FONTS::UTF8ToUTF16BE($na, false, $this->isunicode, $this->CurrentFont); + // replace aliases with numbers + foreach ($pnalias['u'] as $u) { + $sfill = str_repeat($filler, max(0, (strlen($u) - strlen($nu.' ')))); + if ($this->rtl) { + $nr = $nu.TCPDF_FONTS::UTF8ToUTF16BE(' '.$sfill, false, $this->isunicode, $this->CurrentFont); + } else { + $nr = TCPDF_FONTS::UTF8ToUTF16BE($sfill.' ', false, $this->isunicode, $this->CurrentFont).$nu; + } + $temppage = str_replace($u, $nr, $temppage); + } + foreach ($pnalias['a'] as $a) { + $sfill = str_repeat($filler, max(0, (strlen($a) - strlen($na.' ')))); + if ($this->rtl) { + $nr = $na.' '.$sfill; + } else { + $nr = $sfill.' '.$na; + } + $temppage = str_replace($a, $nr, $temppage); + } + } + // save changes + $this->setPageBuffer($p, $temppage); + } + // move pages + $this->Bookmark($toc_name, 0, 0, $page_first, $style, $color); + if ($page_fill_start) { + $this->movePage($page_last, $page_first); + } + for ($i = 0; $i < $numpages; ++$i) { + $this->movePage($page_last, $page); + } + } + } + + /** + * Output a Table Of Content Index (TOC) using HTML templates. + * This method must be called after all Bookmarks were set. + * Before calling this method you have to open the page using the addTOCPage() method. + * After calling this method you have to call endTOCPage() to close the TOC page. + * @param $page (int) page number where this TOC should be inserted (leave empty for current page). + * @param $toc_name (string) name to use for TOC bookmark. + * @param $templates (array) array of html templates. Use: "#TOC_DESCRIPTION#" for bookmark title, "#TOC_PAGE_NUMBER#" for page number. + * @param $correct_align (boolean) if true correct the number alignment (numbers must be in monospaced font like courier and right aligned on LTR, or left aligned on RTL) + * @param $style (string) Font style for title: B = Bold, I = Italic, BI = Bold + Italic. + * @param $color (array) RGB color array for title (values from 0 to 255). + * @public + * @author Nicola Asuni + * @since 5.0.001 (2010-05-06) + * @see addTOCPage(), endTOCPage(), addTOC() + */ + public function addHTMLTOC($page='', $toc_name='TOC', $templates=array(), $correct_align=true, $style='', $color=array(0,0,0)) { + $filler = ' '; + $prev_htmlLinkColorArray = $this->htmlLinkColorArray; + $prev_htmlLinkFontStyle = $this->htmlLinkFontStyle; + // set new style for link + $this->htmlLinkColorArray = array(); + $this->htmlLinkFontStyle = ''; + $page_first = $this->getPage(); + $page_fill_start = false; + $page_fill_end = false; + // get the font type used for numbers in each template + $current_font = $this->FontFamily; + foreach ($templates as $level => $html) { + $dom = $this->getHtmlDomArray($html); + foreach ($dom as $key => $value) { + if ($value['value'] == '#TOC_PAGE_NUMBER#') { + $this->SetFont($dom[($key - 1)]['fontname']); + $templates['F'.$level] = $this->isUnicodeFont(); + } + } + } + $this->SetFont($current_font); + $maxpage = 0; //used for pages on attached documents + foreach ($this->outlines as $key => $outline) { + // get HTML template + $row = $templates[$outline['l']]; + if (TCPDF_STATIC::empty_string($page)) { + $pagenum = $outline['p']; + } else { + // placemark to be replaced with the correct number + $pagenum = '{#'.($outline['p']).'}'; + if ($templates['F'.$outline['l']]) { + $pagenum = '{'.$pagenum.'}'; + } + $maxpage = max($maxpage, $outline['p']); + } + // replace templates with current values + $row = str_replace('#TOC_DESCRIPTION#', $outline['t'], $row); + $row = str_replace('#TOC_PAGE_NUMBER#', $pagenum, $row); + // add link to page + $row = '<a href="#'.$outline['p'].','.$outline['y'].'">'.$row.'</a>'; + // write bookmark entry + $this->writeHTML($row, false, false, true, false, ''); + } + // restore link styles + $this->htmlLinkColorArray = $prev_htmlLinkColorArray; + $this->htmlLinkFontStyle = $prev_htmlLinkFontStyle; + // move TOC page and replace numbers + $page_last = $this->getPage(); + $numpages = ($page_last - $page_first + 1); + // account for booklet mode + if ($this->booklet) { + // check if a blank page is required before TOC + $page_fill_start = ((($page_first % 2) == 0) XOR (($page % 2) == 0)); + $page_fill_end = (!((($numpages % 2) == 0) XOR ($page_fill_start))); + if ($page_fill_start) { + // add a page at the end (to be moved before TOC) + $this->addPage(); + ++$page_last; + ++$numpages; + } + if ($page_fill_end) { + // add a page at the end + $this->addPage(); + ++$page_last; + ++$numpages; + } + } + $maxpage = max($maxpage, $page_last); + if (!TCPDF_STATIC::empty_string($page)) { + for ($p = $page_first; $p <= $page_last; ++$p) { + // get page data + $temppage = $this->getPageBuffer($p); + for ($n = 1; $n <= $maxpage; ++$n) { + // update page numbers + $a = '{#'.$n.'}'; + // get page number aliases + $pnalias = $this->getInternalPageNumberAliases($a); + // calculate replacement number + if ($n >= $page) { + $np = $n + $numpages; + } else { + $np = $n; + } + $na = TCPDF_STATIC::formatTOCPageNumber(($this->starting_page_number + $np - 1)); + $nu = TCPDF_FONTS::UTF8ToUTF16BE($na, false, $this->isunicode, $this->CurrentFont); + // replace aliases with numbers + foreach ($pnalias['u'] as $u) { + if ($correct_align) { + $sfill = str_repeat($filler, (strlen($u) - strlen($nu.' '))); + if ($this->rtl) { + $nr = $nu.TCPDF_FONTS::UTF8ToUTF16BE(' '.$sfill, false, $this->isunicode, $this->CurrentFont); + } else { + $nr = TCPDF_FONTS::UTF8ToUTF16BE($sfill.' ', false, $this->isunicode, $this->CurrentFont).$nu; + } + } else { + $nr = $nu; + } + $temppage = str_replace($u, $nr, $temppage); + } + foreach ($pnalias['a'] as $a) { + if ($correct_align) { + $sfill = str_repeat($filler, (strlen($a) - strlen($na.' '))); + if ($this->rtl) { + $nr = $na.' '.$sfill; + } else { + $nr = $sfill.' '.$na; + } + } else { + $nr = $na; + } + $temppage = str_replace($a, $nr, $temppage); + } + } + // save changes + $this->setPageBuffer($p, $temppage); + } + // move pages + $this->Bookmark($toc_name, 0, 0, $page_first, $style, $color); + if ($page_fill_start) { + $this->movePage($page_last, $page_first); + } + for ($i = 0; $i < $numpages; ++$i) { + $this->movePage($page_last, $page); + } + } + } + + /** + * Stores a copy of the current TCPDF object used for undo operation. + * @public + * @since 4.5.029 (2009-03-19) + */ + public function startTransaction() { + if (isset($this->objcopy)) { + // remove previous copy + $this->commitTransaction(); + } + // record current page number and Y position + $this->start_transaction_page = $this->page; + $this->start_transaction_y = $this->y; + // clone current object + $this->objcopy = TCPDF_STATIC::objclone($this); + } + + /** + * Delete the copy of the current TCPDF object used for undo operation. + * @public + * @since 4.5.029 (2009-03-19) + */ + public function commitTransaction() { + if (isset($this->objcopy)) { + $this->objcopy->_destroy(true, true); + unset($this->objcopy); + } + } + + /** + * This method allows to undo the latest transaction by returning the latest saved TCPDF object with startTransaction(). + * @param $self (boolean) if true restores current class object to previous state without the need of reassignment via the returned value. + * @return TCPDF object. + * @public + * @since 4.5.029 (2009-03-19) + */ + public function rollbackTransaction($self=false) { + if (isset($this->objcopy)) { + $this->_destroy(true, true); + if ($self) { + $objvars = get_object_vars($this->objcopy); + foreach ($objvars as $key => $value) { + $this->$key = $value; + } + } + return $this->objcopy; + } + return $this; + } + + // --- MULTI COLUMNS METHODS ----------------------- + + /** + * Set multiple columns of the same size + * @param $numcols (int) number of columns (set to zero to disable columns mode) + * @param $width (int) column width + * @param $y (int) column starting Y position (leave empty for current Y position) + * @public + * @since 4.9.001 (2010-03-28) + */ + public function setEqualColumns($numcols=0, $width=0, $y='') { + $this->columns = array(); + if ($numcols < 2) { + $numcols = 0; + $this->columns = array(); + } else { + // maximum column width + $maxwidth = ($this->w - $this->original_lMargin - $this->original_rMargin) / $numcols; + if (($width == 0) OR ($width > $maxwidth)) { + $width = $maxwidth; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // space between columns + $space = (($this->w - $this->original_lMargin - $this->original_rMargin - ($numcols * $width)) / ($numcols - 1)); + // fill the columns array (with, space, starting Y position) + for ($i = 0; $i < $numcols; ++$i) { + $this->columns[$i] = array('w' => $width, 's' => $space, 'y' => $y); + } + } + $this->num_columns = $numcols; + $this->current_column = 0; + $this->column_start_page = $this->page; + $this->selectColumn(0); + } + + /** + * Remove columns and reset page margins. + * @public + * @since 5.9.072 (2011-04-26) + */ + public function resetColumns() { + $this->lMargin = $this->original_lMargin; + $this->rMargin = $this->original_rMargin; + $this->setEqualColumns(); + } + + /** + * Set columns array. + * Each column is represented by an array of arrays with the following keys: (w = width, s = space between columns, y = column top position). + * @param $columns (array) + * @public + * @since 4.9.001 (2010-03-28) + */ + public function setColumnsArray($columns) { + $this->columns = $columns; + $this->num_columns = count($columns); + $this->current_column = 0; + $this->column_start_page = $this->page; + $this->selectColumn(0); + } + + /** + * Set position at a given column + * @param $col (int) column number (from 0 to getNumberOfColumns()-1); empty string = current column. + * @public + * @since 4.9.001 (2010-03-28) + */ + public function selectColumn($col='') { + if (is_string($col)) { + $col = $this->current_column; + } elseif ($col >= $this->num_columns) { + $col = 0; + } + $xshift = array('x' => 0, 's' => array('H' => 0, 'V' => 0), 'p' => array('L' => 0, 'T' => 0, 'R' => 0, 'B' => 0)); + $enable_thead = false; + if ($this->num_columns > 1) { + if ($col != $this->current_column) { + // move Y pointer at the top of the column + if ($this->column_start_page == $this->page) { + $this->y = $this->columns[$col]['y']; + } else { + $this->y = $this->tMargin; + } + // Avoid to write table headers more than once + if (($this->page > $this->maxselcol['page']) OR (($this->page == $this->maxselcol['page']) AND ($col > $this->maxselcol['column']))) { + $enable_thead = true; + $this->maxselcol['page'] = $this->page; + $this->maxselcol['column'] = $col; + } + } + $xshift = $this->colxshift; + // set X position of the current column by case + $listindent = ($this->listindentlevel * $this->listindent); + // calculate column X position + $colpos = 0; + for ($i = 0; $i < $col; ++$i) { + $colpos += ($this->columns[$i]['w'] + $this->columns[$i]['s']); + } + if ($this->rtl) { + $x = $this->w - $this->original_rMargin - $colpos; + $this->rMargin = ($this->w - $x + $listindent); + $this->lMargin = ($x - $this->columns[$col]['w']); + $this->x = $x - $listindent; + } else { + $x = $this->original_lMargin + $colpos; + $this->lMargin = ($x + $listindent); + $this->rMargin = ($this->w - $x - $this->columns[$col]['w']); + $this->x = $x + $listindent; + } + $this->columns[$col]['x'] = $x; + } + $this->current_column = $col; + // fix for HTML mode + $this->newline = true; + // print HTML table header (if any) + if ((!TCPDF_STATIC::empty_string($this->thead)) AND (!$this->inthead)) { + if ($enable_thead) { + // print table header + $this->writeHTML($this->thead, false, false, false, false, ''); + $this->y += $xshift['s']['V']; + // store end of header position + if (!isset($this->columns[$col]['th'])) { + $this->columns[$col]['th'] = array(); + } + $this->columns[$col]['th']['\''.$this->page.'\''] = $this->y; + $this->lasth = 0; + } elseif (isset($this->columns[$col]['th']['\''.$this->page.'\''])) { + $this->y = $this->columns[$col]['th']['\''.$this->page.'\'']; + } + } + // account for an html table cell over multiple columns + if ($this->rtl) { + $this->rMargin += $xshift['x']; + $this->x -= ($xshift['x'] + $xshift['p']['R']); + } else { + $this->lMargin += $xshift['x']; + $this->x += $xshift['x'] + $xshift['p']['L']; + } + } + + /** + * Return the current column number + * @return int current column number + * @public + * @since 5.5.011 (2010-07-08) + */ + public function getColumn() { + return $this->current_column; + } + + /** + * Return the current number of columns. + * @return int number of columns + * @public + * @since 5.8.018 (2010-08-25) + */ + public function getNumberOfColumns() { + return $this->num_columns; + } + + /** + * Set Text rendering mode. + * @param $stroke (int) outline size in user units (0 = disable). + * @param $fill (boolean) if true fills the text (default). + * @param $clip (boolean) if true activate clipping mode + * @public + * @since 4.9.008 (2009-04-02) + */ + public function setTextRenderingMode($stroke=0, $fill=true, $clip=false) { + // Ref.: PDF 32000-1:2008 - 9.3.6 Text Rendering Mode + // convert text rendering parameters + if ($stroke < 0) { + $stroke = 0; + } + if ($fill === true) { + if ($stroke > 0) { + if ($clip === true) { + // Fill, then stroke text and add to path for clipping + $textrendermode = 6; + } else { + // Fill, then stroke text + $textrendermode = 2; + } + $textstrokewidth = $stroke; + } else { + if ($clip === true) { + // Fill text and add to path for clipping + $textrendermode = 4; + } else { + // Fill text + $textrendermode = 0; + } + } + } else { + if ($stroke > 0) { + if ($clip === true) { + // Stroke text and add to path for clipping + $textrendermode = 5; + } else { + // Stroke text + $textrendermode = 1; + } + $textstrokewidth = $stroke; + } else { + if ($clip === true) { + // Add text to path for clipping + $textrendermode = 7; + } else { + // Neither fill nor stroke text (invisible) + $textrendermode = 3; + } + } + } + $this->textrendermode = $textrendermode; + $this->textstrokewidth = $stroke; + } + + /** + * Set parameters for drop shadow effect for text. + * @param $params (array) Array of parameters: enabled (boolean) set to true to enable shadow; depth_w (float) shadow width in user units; depth_h (float) shadow height in user units; color (array) shadow color or false to use the stroke color; opacity (float) Alpha value: real value from 0 (transparent) to 1 (opaque); blend_mode (string) blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity. + * @since 5.9.174 (2012-07-25) + * @public + */ + public function setTextShadow($params=array('enabled'=>false, 'depth_w'=>0, 'depth_h'=>0, 'color'=>false, 'opacity'=>1, 'blend_mode'=>'Normal')) { + if (isset($params['enabled'])) { + $this->txtshadow['enabled'] = $params['enabled']?true:false; + } else { + $this->txtshadow['enabled'] = false; + } + if (isset($params['depth_w'])) { + $this->txtshadow['depth_w'] = floatval($params['depth_w']); + } else { + $this->txtshadow['depth_w'] = 0; + } + if (isset($params['depth_h'])) { + $this->txtshadow['depth_h'] = floatval($params['depth_h']); + } else { + $this->txtshadow['depth_h'] = 0; + } + if (isset($params['color']) AND ($params['color'] !== false) AND is_array($params['color'])) { + $this->txtshadow['color'] = $params['color']; + } else { + $this->txtshadow['color'] = $this->strokecolor; + } + if (isset($params['opacity'])) { + $this->txtshadow['opacity'] = min(1, max(0, floatval($params['opacity']))); + } else { + $this->txtshadow['opacity'] = 1; + } + if (isset($params['blend_mode']) AND in_array($params['blend_mode'], array('Normal', 'Multiply', 'Screen', 'Overlay', 'Darken', 'Lighten', 'ColorDodge', 'ColorBurn', 'HardLight', 'SoftLight', 'Difference', 'Exclusion', 'Hue', 'Saturation', 'Color', 'Luminosity'))) { + $this->txtshadow['blend_mode'] = $params['blend_mode']; + } else { + $this->txtshadow['blend_mode'] = 'Normal'; + } + if ((($this->txtshadow['depth_w'] == 0) AND ($this->txtshadow['depth_h'] == 0)) OR ($this->txtshadow['opacity'] == 0)) { + $this->txtshadow['enabled'] = false; + } + } + + /** + * Return the text shadow parameters array. + * @return Array of parameters. + * @since 5.9.174 (2012-07-25) + * @public + */ + public function getTextShadow() { + return $this->txtshadow; + } + + /** + * Returns an array of chars containing soft hyphens. + * @param $word (array) array of chars + * @param $patterns (array) Array of hypenation patterns. + * @param $dictionary (array) Array of words to be returned without applying the hyphenation algorithm. + * @param $leftmin (int) Minimum number of character to leave on the left of the word without applying the hyphens. + * @param $rightmin (int) Minimum number of character to leave on the right of the word without applying the hyphens. + * @param $charmin (int) Minimum word length to apply the hyphenation algorithm. + * @param $charmax (int) Maximum length of broken piece of word. + * @return array text with soft hyphens + * @author Nicola Asuni + * @since 4.9.012 (2010-04-12) + * @protected + */ + protected function hyphenateWord($word, $patterns, $dictionary=array(), $leftmin=1, $rightmin=2, $charmin=1, $charmax=8) { + $hyphenword = array(); // hyphens positions + $numchars = count($word); + if ($numchars <= $charmin) { + return $word; + } + $word_string = TCPDF_FONTS::UTF8ArrSubString($word, '', '', $this->isunicode); + // some words will be returned as-is + $pattern = '/^([a-zA-Z0-9_\.\-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/'; + if (preg_match($pattern, $word_string) > 0) { + // email + return $word; + } + $pattern = '/(([a-zA-Z0-9\-]+\.)?)((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/'; + if (preg_match($pattern, $word_string) > 0) { + // URL + return $word; + } + if (isset($dictionary[$word_string])) { + return TCPDF_FONTS::UTF8StringToArray($dictionary[$word_string], $this->isunicode, $this->CurrentFont); + } + // surround word with '_' characters + $tmpword = array_merge(array(46), $word, array(46)); + $tmpnumchars = $numchars + 2; + $maxpos = $tmpnumchars - 1; + for ($pos = 0; $pos < $maxpos; ++$pos) { + $imax = min(($tmpnumchars - $pos), $charmax); + for ($i = 1; $i <= $imax; ++$i) { + $subword = strtolower(TCPDF_FONTS::UTF8ArrSubString($tmpword, $pos, ($pos + $i), $this->isunicode)); + if (isset($patterns[$subword])) { + $pattern = TCPDF_FONTS::UTF8StringToArray($patterns[$subword], $this->isunicode, $this->CurrentFont); + $pattern_length = count($pattern); + $digits = 1; + for ($j = 0; $j < $pattern_length; ++$j) { + // check if $pattern[$j] is a number = hyphenation level (only numbers from 1 to 5 are valid) + if (($pattern[$j] >= 48) AND ($pattern[$j] <= 57)) { + if ($j == 0) { + $zero = $pos - 1; + } else { + $zero = $pos + $j - $digits; + } + // get hyphenation level + $level = ($pattern[$j] - 48); + // if two levels from two different patterns match at the same point, the higher one is selected. + if (!isset($hyphenword[$zero]) OR ($hyphenword[$zero] < $level)) { + $hyphenword[$zero] = $level; + } + ++$digits; + } + } + } + } + } + $inserted = 0; + $maxpos = $numchars - $rightmin; + for ($i = $leftmin; $i <= $maxpos; ++$i) { + // only odd levels indicate allowed hyphenation points + if (isset($hyphenword[$i]) AND (($hyphenword[$i] % 2) != 0)) { + // 173 = soft hyphen character + array_splice($word, $i + $inserted, 0, 173); + ++$inserted; + } + } + return $word; + } + + /** + * Returns text with soft hyphens. + * @param $text (string) text to process + * @param $patterns (mixed) Array of hypenation patterns or a TEX file containing hypenation patterns. TEX patterns can be downloaded from http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ + * @param $dictionary (array) Array of words to be returned without applying the hyphenation algorithm. + * @param $leftmin (int) Minimum number of character to leave on the left of the word without applying the hyphens. + * @param $rightmin (int) Minimum number of character to leave on the right of the word without applying the hyphens. + * @param $charmin (int) Minimum word length to apply the hyphenation algorithm. + * @param $charmax (int) Maximum length of broken piece of word. + * @return array text with soft hyphens + * @author Nicola Asuni + * @since 4.9.012 (2010-04-12) + * @public + */ + public function hyphenateText($text, $patterns, $dictionary=array(), $leftmin=1, $rightmin=2, $charmin=1, $charmax=8) { + $text = $this->unhtmlentities($text); + $word = array(); // last word + $txtarr = array(); // text to be returned + $intag = false; // true if we are inside an HTML tag + $skip = false; // true to skip hyphenation + if (!is_array($patterns)) { + $patterns = TCPDF_STATIC::getHyphenPatternsFromTEX($patterns); + } + // get array of characters + $unichars = TCPDF_FONTS::UTF8StringToArray($text, $this->isunicode, $this->CurrentFont); + // for each char + foreach ($unichars as $char) { + if ((!$intag) AND (!$skip) AND TCPDF_FONT_DATA::$uni_type[$char] == 'L') { + // letter character + $word[] = $char; + } else { + // other type of character + if (!TCPDF_STATIC::empty_string($word)) { + // hypenate the word + $txtarr = array_merge($txtarr, $this->hyphenateWord($word, $patterns, $dictionary, $leftmin, $rightmin, $charmin, $charmax)); + $word = array(); + } + $txtarr[] = $char; + if (chr($char) == '<') { + // we are inside an HTML tag + $intag = true; + } elseif ($intag AND (chr($char) == '>')) { + // end of HTML tag + $intag = false; + // check for style tag + $expected = array(115, 116, 121, 108, 101); // = 'style' + $current = array_slice($txtarr, -6, 5); // last 5 chars + $compare = array_diff($expected, $current); + if (empty($compare)) { + // check if it is a closing tag + $expected = array(47); // = '/' + $current = array_slice($txtarr, -7, 1); + $compare = array_diff($expected, $current); + if (empty($compare)) { + // closing style tag + $skip = false; + } else { + // opening style tag + $skip = true; + } + } + } + } + } + if (!TCPDF_STATIC::empty_string($word)) { + // hypenate the word + $txtarr = array_merge($txtarr, $this->hyphenateWord($word, $patterns, $dictionary, $leftmin, $rightmin, $charmin, $charmax)); + } + // convert char array to string and return + return TCPDF_FONTS::UTF8ArrSubString($txtarr, '', '', $this->isunicode); + } + + /** + * Enable/disable rasterization of vector images using ImageMagick library. + * @param $mode (boolean) if true enable rasterization, false otherwise. + * @public + * @since 5.0.000 (2010-04-27) + */ + public function setRasterizeVectorImages($mode) { + $this->rasterize_vector_images = $mode; + } + + /** + * Enable or disable default option for font subsetting. + * @param $enable (boolean) if true enable font subsetting by default. + * @author Nicola Asuni + * @public + * @since 5.3.002 (2010-06-07) + */ + public function setFontSubsetting($enable=true) { + if ($this->pdfa_mode) { + $this->font_subsetting = false; + } else { + $this->font_subsetting = $enable ? true : false; + } + } + + /** + * Return the default option for font subsetting. + * @return boolean default font subsetting state. + * @author Nicola Asuni + * @public + * @since 5.3.002 (2010-06-07) + */ + public function getFontSubsetting() { + return $this->font_subsetting; + } + + /** + * Left trim the input string + * @param $str (string) string to trim + * @param $replace (string) string that replace spaces. + * @return left trimmed string + * @author Nicola Asuni + * @public + * @since 5.8.000 (2010-08-11) + */ + public function stringLeftTrim($str, $replace='') { + return preg_replace('/^'.$this->re_space['p'].'+/'.$this->re_space['m'], $replace, $str); + } + + /** + * Right trim the input string + * @param $str (string) string to trim + * @param $replace (string) string that replace spaces. + * @return right trimmed string + * @author Nicola Asuni + * @public + * @since 5.8.000 (2010-08-11) + */ + public function stringRightTrim($str, $replace='') { + return preg_replace('/'.$this->re_space['p'].'+$/'.$this->re_space['m'], $replace, $str); + } + + /** + * Trim the input string + * @param $str (string) string to trim + * @param $replace (string) string that replace spaces. + * @return trimmed string + * @author Nicola Asuni + * @public + * @since 5.8.000 (2010-08-11) + */ + public function stringTrim($str, $replace='') { + $str = $this->stringLeftTrim($str, $replace); + $str = $this->stringRightTrim($str, $replace); + return $str; + } + + /** + * Return true if the current font is unicode type. + * @return true for unicode font, false otherwise. + * @author Nicola Asuni + * @public + * @since 5.8.002 (2010-08-14) + */ + public function isUnicodeFont() { + return (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')); + } + + /** + * Return normalized font name + * @param $fontfamily (string) property string containing font family names + * @return string normalized font name + * @author Nicola Asuni + * @public + * @since 5.8.004 (2010-08-17) + */ + public function getFontFamilyName($fontfamily) { + // remove spaces and symbols + $fontfamily = preg_replace('/[^a-z0-9_\,]/', '', strtolower($fontfamily)); + // extract all font names + $fontslist = preg_split('/[,]/', $fontfamily); + // find first valid font name + foreach ($fontslist as $font) { + // replace font variations + $font = preg_replace('/regular$/', '', $font); + $font = preg_replace('/italic$/', 'I', $font); + $font = preg_replace('/oblique$/', 'I', $font); + $font = preg_replace('/bold([I]?)$/', 'B\\1', $font); + // replace common family names and core fonts + $pattern = array(); + $replacement = array(); + $pattern[] = '/^serif|^cursive|^fantasy|^timesnewroman/'; + $replacement[] = 'times'; + $pattern[] = '/^sansserif/'; + $replacement[] = 'helvetica'; + $pattern[] = '/^monospace/'; + $replacement[] = 'courier'; + $font = preg_replace($pattern, $replacement, $font); + if (in_array(strtolower($font), $this->fontlist) OR in_array($font, $this->fontkeys)) { + return $font; + } + } + // return current font as default + return $this->CurrentFont['fontkey']; + } + + /** + * Start a new XObject Template. + * An XObject Template is a PDF block that is a self-contained description of any sequence of graphics objects (including path objects, text objects, and sampled images). + * An XObject Template may be painted multiple times, either on several pages or at several locations on the same page and produces the same results each time, subject only to the graphics state at the time it is invoked. + * Note: X,Y coordinates will be reset to 0,0. + * @param $w (int) Template width in user units (empty string or zero = page width less margins). + * @param $h (int) Template height in user units (empty string or zero = page height less margins). + * @param $group (mixed) Set transparency group. Can be a boolean value or an array specifying optional parameters: 'CS' (solour space name), 'I' (boolean flag to indicate isolated group) and 'K' (boolean flag to indicate knockout group). + * @return int the XObject Template ID in case of success or false in case of error. + * @author Nicola Asuni + * @public + * @since 5.8.017 (2010-08-24) + * @see endTemplate(), printTemplate() + */ + public function startTemplate($w=0, $h=0, $group=false) { + if ($this->inxobj) { + // we are already inside an XObject template + return false; + } + $this->inxobj = true; + ++$this->n; + // XObject ID + $this->xobjid = 'XT'.$this->n; + // object ID + $this->xobjects[$this->xobjid] = array('n' => $this->n); + // store current graphic state + $this->xobjects[$this->xobjid]['gvars'] = $this->getGraphicVars(); + // initialize data + $this->xobjects[$this->xobjid]['intmrk'] = 0; + $this->xobjects[$this->xobjid]['transfmrk'] = array(); + $this->xobjects[$this->xobjid]['outdata'] = ''; + $this->xobjects[$this->xobjid]['xobjects'] = array(); + $this->xobjects[$this->xobjid]['images'] = array(); + $this->xobjects[$this->xobjid]['fonts'] = array(); + $this->xobjects[$this->xobjid]['annotations'] = array(); + $this->xobjects[$this->xobjid]['extgstates'] = array(); + $this->xobjects[$this->xobjid]['gradients'] = array(); + $this->xobjects[$this->xobjid]['spot_colors'] = array(); + // set new environment + $this->num_columns = 1; + $this->current_column = 0; + $this->SetAutoPageBreak(false); + if (($w === '') OR ($w <= 0)) { + $w = $this->w - $this->lMargin - $this->rMargin; + } + if (($h === '') OR ($h <= 0)) { + $h = $this->h - $this->tMargin - $this->bMargin; + } + $this->xobjects[$this->xobjid]['x'] = 0; + $this->xobjects[$this->xobjid]['y'] = 0; + $this->xobjects[$this->xobjid]['w'] = $w; + $this->xobjects[$this->xobjid]['h'] = $h; + $this->w = $w; + $this->h = $h; + $this->wPt = $this->w * $this->k; + $this->hPt = $this->h * $this->k; + $this->fwPt = $this->wPt; + $this->fhPt = $this->hPt; + $this->x = 0; + $this->y = 0; + $this->lMargin = 0; + $this->rMargin = 0; + $this->tMargin = 0; + $this->bMargin = 0; + // set group mode + $this->xobjects[$this->xobjid]['group'] = $group; + return $this->xobjid; + } + + /** + * End the current XObject Template started with startTemplate() and restore the previous graphic state. + * An XObject Template is a PDF block that is a self-contained description of any sequence of graphics objects (including path objects, text objects, and sampled images). + * An XObject Template may be painted multiple times, either on several pages or at several locations on the same page and produces the same results each time, subject only to the graphics state at the time it is invoked. + * @return int the XObject Template ID in case of success or false in case of error. + * @author Nicola Asuni + * @public + * @since 5.8.017 (2010-08-24) + * @see startTemplate(), printTemplate() + */ + public function endTemplate() { + if (!$this->inxobj) { + // we are not inside a template + return false; + } + $this->inxobj = false; + // restore previous graphic state + $this->setGraphicVars($this->xobjects[$this->xobjid]['gvars'], true); + return $this->xobjid; + } + + /** + * Print an XObject Template. + * You can print an XObject Template inside the currently opened Template. + * An XObject Template is a PDF block that is a self-contained description of any sequence of graphics objects (including path objects, text objects, and sampled images). + * An XObject Template may be painted multiple times, either on several pages or at several locations on the same page and produces the same results each time, subject only to the graphics state at the time it is invoked. + * @param $id (string) The ID of XObject Template to print. + * @param $x (int) X position in user units (empty string = current x position) + * @param $y (int) Y position in user units (empty string = current y position) + * @param $w (int) Width in user units (zero = remaining page width) + * @param $h (int) Height in user units (zero = remaining page height) + * @param $align (string) Indicates the alignment of the pointer next to template insertion relative to template height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> + * @param $palign (string) Allows to center or align the template on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul> + * @param $fitonpage (boolean) If true the template is resized to not exceed page dimensions. + * @author Nicola Asuni + * @public + * @since 5.8.017 (2010-08-24) + * @see startTemplate(), endTemplate() + */ + public function printTemplate($id, $x='', $y='', $w=0, $h=0, $align='', $palign='', $fitonpage=false) { + if ($this->state != 2) { + return; + } + if (!isset($this->xobjects[$id])) { + $this->Error('The XObject Template \''.$id.'\' doesn\'t exist!'); + } + if ($this->inxobj) { + if ($id == $this->xobjid) { + // close current template + $this->endTemplate(); + } else { + // use the template as resource for the template currently opened + $this->xobjects[$this->xobjid]['xobjects'][$id] = $this->xobjects[$id]; + } + } + // set default values + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + $ow = $this->xobjects[$id]['w']; + if ($ow <= 0) { + $ow = 1; + } + $oh = $this->xobjects[$id]['h']; + if ($oh <= 0) { + $oh = 1; + } + // calculate template width and height on document + if (($w <= 0) AND ($h <= 0)) { + $w = $ow; + $h = $oh; + } elseif ($w <= 0) { + $w = $h * $ow / $oh; + } elseif ($h <= 0) { + $h = $w * $oh / $ow; + } + // fit the template on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); + // set page alignment + $rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $xt = $this->lMargin; + } elseif ($palign == 'C') { + $xt = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $xt = $this->w - $this->rMargin - $w; + } else { + $xt = $x - $w; + } + $rb_x = $xt; + } else { + if ($palign == 'L') { + $xt = $this->lMargin; + } elseif ($palign == 'C') { + $xt = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $xt = $this->w - $this->rMargin - $w; + } else { + $xt = $x; + } + $rb_x = $xt + $w; + } + // print XObject Template + Transformation matrix + $this->StartTransform(); + // translate and scale + $sx = ($w / $ow); + $sy = ($h / $oh); + $tm = array(); + $tm[0] = $sx; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = $sy; + $tm[4] = $xt * $this->k; + $tm[5] = ($this->h - $h - $y) * $this->k; + $this->Transform($tm); + // set object + $this->_out('/'.$id.' Do'); + $this->StopTransform(); + // add annotations + if (!empty($this->xobjects[$id]['annotations'])) { + foreach ($this->xobjects[$id]['annotations'] as $annot) { + // transform original coordinates + $coordlt = TCPDF_STATIC::getTransformationMatrixProduct($tm, array(1, 0, 0, 1, ($annot['x'] * $this->k), (-$annot['y'] * $this->k))); + $ax = ($coordlt[4] / $this->k); + $ay = ($this->h - $h - ($coordlt[5] / $this->k)); + $coordrb = TCPDF_STATIC::getTransformationMatrixProduct($tm, array(1, 0, 0, 1, (($annot['x'] + $annot['w']) * $this->k), ((-$annot['y'] - $annot['h']) * $this->k))); + $aw = ($coordrb[4] / $this->k) - $ax; + $ah = ($this->h - $h - ($coordrb[5] / $this->k)) - $ay; + $this->Annotation($ax, $ay, $aw, $ah, $annot['text'], $annot['opt'], $annot['spaces']); + } + } + // set pointer to align the next text/objects + switch($align) { + case 'T': { + $this->y = $y; + $this->x = $rb_x; + break; + } + case 'M': { + $this->y = $y + round($h/2); + $this->x = $rb_x; + break; + } + case 'B': { + $this->y = $rb_y; + $this->x = $rb_x; + break; + } + case 'N': { + $this->SetY($rb_y); + break; + } + default:{ + break; + } + } + } + + /** + * Set the percentage of character stretching. + * @param $perc (int) percentage of stretching (100 = no stretching) + * @author Nicola Asuni + * @public + * @since 5.9.000 (2010-09-29) + */ + public function setFontStretching($perc=100) { + $this->font_stretching = $perc; + } + + /** + * Get the percentage of character stretching. + * @return float stretching value + * @author Nicola Asuni + * @public + * @since 5.9.000 (2010-09-29) + */ + public function getFontStretching() { + return $this->font_stretching; + } + + /** + * Set the amount to increase or decrease the space between characters in a text. + * @param $spacing (float) amount to increase or decrease the space between characters in a text (0 = default spacing) + * @author Nicola Asuni + * @public + * @since 5.9.000 (2010-09-29) + */ + public function setFontSpacing($spacing=0) { + $this->font_spacing = $spacing; + } + + /** + * Get the amount to increase or decrease the space between characters in a text. + * @return int font spacing (tracking) value + * @author Nicola Asuni + * @public + * @since 5.9.000 (2010-09-29) + */ + public function getFontSpacing() { + return $this->font_spacing; + } + + /** + * Return an array of no-write page regions + * @return array of no-write page regions + * @author Nicola Asuni + * @public + * @since 5.9.003 (2010-10-13) + * @see setPageRegions(), addPageRegion() + */ + public function getPageRegions() { + return $this->page_regions; + } + + /** + * Set no-write regions on page. + * A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. + * A region is always aligned on the left or right side of the page ad is defined using a vertical segment. + * You can set multiple regions for the same page. + * @param $regions (array) array of no-write regions. For each region you can define an array as follow: ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right). Omit this parameter to remove all regions. + * @author Nicola Asuni + * @public + * @since 5.9.003 (2010-10-13) + * @see addPageRegion(), getPageRegions() + */ + public function setPageRegions($regions=array()) { + // empty current regions array + $this->page_regions = array(); + // add regions + foreach ($regions as $data) { + $this->addPageRegion($data); + } + } + + /** + * Add a single no-write region on selected page. + * A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. + * A region is always aligned on the left or right side of the page ad is defined using a vertical segment. + * You can set multiple regions for the same page. + * @param $region (array) array of a single no-write region array: ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right). + * @author Nicola Asuni + * @public + * @since 5.9.003 (2010-10-13) + * @see setPageRegions(), getPageRegions() + */ + public function addPageRegion($region) { + if (!isset($region['page']) OR empty($region['page'])) { + $region['page'] = $this->page; + } + if (isset($region['xt']) AND isset($region['xb']) AND ($region['xt'] > 0) AND ($region['xb'] > 0) + AND isset($region['yt']) AND isset($region['yb']) AND ($region['yt'] >= 0) AND ($region['yt'] < $region['yb']) + AND isset($region['side']) AND (($region['side'] == 'L') OR ($region['side'] == 'R'))) { + $this->page_regions[] = $region; + } + } + + /** + * Remove a single no-write region. + * @param $key (int) region key + * @author Nicola Asuni + * @public + * @since 5.9.003 (2010-10-13) + * @see setPageRegions(), getPageRegions() + */ + public function removePageRegion($key) { + if (isset($this->page_regions[$key])) { + unset($this->page_regions[$key]); + } + } + + /** + * Check page for no-write regions and adapt current coordinates and page margins if necessary. + * A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. + * A region is always aligned on the left or right side of the page ad is defined using a vertical segment. + * @param $h (float) height of the text/image/object to print in user units + * @param $x (float) current X coordinate in user units + * @param $y (float) current Y coordinate in user units + * @return array($x, $y) + * @author Nicola Asuni + * @protected + * @since 5.9.003 (2010-10-13) + */ + protected function checkPageRegions($h, $x, $y) { + // set default values + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + if (!$this->check_page_regions OR empty($this->page_regions)) { + // no page regions defined + return array($x, $y); + } + if (empty($h)) { + $h = $this->getCellHeight($this->FontSize); + } + // check for page break + if ($this->checkPageBreak($h, $y)) { + // the content will be printed on a new page + $x = $this->x; + $y = $this->y; + } + if ($this->num_columns > 1) { + if ($this->rtl) { + $this->lMargin = ($this->columns[$this->current_column]['x'] - $this->columns[$this->current_column]['w']); + } else { + $this->rMargin = ($this->w - $this->columns[$this->current_column]['x'] - $this->columns[$this->current_column]['w']); + } + } else { + if ($this->rtl) { + $this->lMargin = max($this->clMargin, $this->original_lMargin); + } else { + $this->rMargin = max($this->crMargin, $this->original_rMargin); + } + } + // adjust coordinates and page margins + foreach ($this->page_regions as $regid => $regdata) { + if ($regdata['page'] == $this->page) { + // check region boundaries + if (($y > ($regdata['yt'] - $h)) AND ($y <= $regdata['yb'])) { + // Y is inside the region + $minv = ($regdata['xb'] - $regdata['xt']) / ($regdata['yb'] - $regdata['yt']); // inverse of angular coefficient + $yt = max($y, $regdata['yt']); + $yb = min(($yt + $h), $regdata['yb']); + $xt = (($yt - $regdata['yt']) * $minv) + $regdata['xt']; + $xb = (($yb - $regdata['yt']) * $minv) + $regdata['xt']; + if ($regdata['side'] == 'L') { // left side + $new_margin = max($xt, $xb); + if ($this->lMargin < $new_margin) { + if ($this->rtl) { + // adjust left page margin + $this->lMargin = max(0, $new_margin); + } + if ($x < $new_margin) { + // adjust x position + $x = $new_margin; + if ($new_margin > ($this->w - $this->rMargin)) { + // adjust y position + $y = $regdata['yb'] - $h; + } + } + } + } elseif ($regdata['side'] == 'R') { // right side + $new_margin = min($xt, $xb); + if (($this->w - $this->rMargin) > $new_margin) { + if (!$this->rtl) { + // adjust right page margin + $this->rMargin = max(0, ($this->w - $new_margin)); + } + if ($x > $new_margin) { + // adjust x position + $x = $new_margin; + if ($new_margin > $this->lMargin) { + // adjust y position + $y = $regdata['yb'] - $h; + } + } + } + } + } + } + } + return array($x, $y); + } + + // --- SVG METHODS --------------------------------------------------------- + + /** + * Embedd a Scalable Vector Graphics (SVG) image. + * NOTE: SVG standard is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of vector images using ImageMagick library. + * @param $file (string) Name of the SVG file or a '@' character followed by the SVG data string. + * @param $x (float) Abscissa of the upper-left corner. + * @param $y (float) Ordinate of the upper-left corner. + * @param $w (float) Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $h (float) Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param $link (mixed) URL or identifier returned by AddLink(). + * @param $align (string) Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul> If the alignment is an empty string, then the pointer will be restored on the starting SVG position. + * @param $palign (string) Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul> + * @param $border (mixed) Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param $fitonpage (boolean) if true the image is resized to not exceed page dimensions. + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @public + */ + public function ImageSVG($file, $x='', $y='', $w=0, $h=0, $link='', $align='', $palign='', $border=0, $fitonpage=false) { + if ($this->state != 2) { + return; + } + // reset SVG vars + $this->svggradients = array(); + $this->svggradientid = 0; + $this->svgdefsmode = false; + $this->svgdefs = array(); + $this->svgclipmode = false; + $this->svgclippaths = array(); + $this->svgcliptm = array(); + $this->svgclipid = 0; + $this->svgtext = ''; + $this->svgtextmode = array(); + if ($this->rasterize_vector_images AND ($w > 0) AND ($h > 0)) { + // convert SVG to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'SVG', $link, $align, true, 300, $palign, false, false, $border, false, false, false); + } + if ($file[0] === '@') { // image from string + $this->svgdir = ''; + $svgdata = substr($file, 1); + } else { // SVG file + $this->svgdir = dirname($file); + $svgdata = TCPDF_STATIC::fileGetContents($file); + } + if ($svgdata === FALSE) { + $this->Error('SVG file not found: '.$file); + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + $k = $this->k; + $ox = 0; + $oy = 0; + $ow = $w; + $oh = $h; + $aspect_ratio_align = 'xMidYMid'; + $aspect_ratio_ms = 'meet'; + $regs = array(); + // get original image width and height + preg_match('/<svg([^\>]*)>/si', $svgdata, $regs); + if (isset($regs[1]) AND !empty($regs[1])) { + $tmp = array(); + if (preg_match('/[\s]+x[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $ox = $this->getHTMLUnitToUnits($tmp[1], 0, $this->svgunit, false); + } + $tmp = array(); + if (preg_match('/[\s]+y[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $oy = $this->getHTMLUnitToUnits($tmp[1], 0, $this->svgunit, false); + } + $tmp = array(); + if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + } + $tmp = array(); + if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + } + $tmp = array(); + $view_box = array(); + if (preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.\-]+)[\s]+([0-9\.\-]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $regs[1], $tmp)) { + if (count($tmp) == 5) { + array_shift($tmp); + foreach ($tmp as $key => $val) { + $view_box[$key] = $this->getHTMLUnitToUnits($val, 0, $this->svgunit, false); + } + $ox = $view_box[0]; + $oy = $view_box[1]; + } + // get aspect ratio + $tmp = array(); + if (preg_match('/[\s]+preserveAspectRatio[\s]*=[\s]*"([^"]*)"/si', $regs[1], $tmp)) { + $aspect_ratio = preg_split('/[\s]+/si', $tmp[1]); + switch (count($aspect_ratio)) { + case 3: { + $aspect_ratio_align = $aspect_ratio[1]; + $aspect_ratio_ms = $aspect_ratio[2]; + break; + } + case 2: { + $aspect_ratio_align = $aspect_ratio[0]; + $aspect_ratio_ms = $aspect_ratio[1]; + break; + } + case 1: { + $aspect_ratio_align = $aspect_ratio[0]; + $aspect_ratio_ms = 'meet'; + break; + } + } + } + } + } + if ($ow <= 0) { + $ow = 1; + } + if ($oh <= 0) { + $oh = 1; + } + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + // convert image size to document unit + $w = $ow; + $h = $oh; + } elseif ($w <= 0) { + $w = $h * $ow / $oh; + } elseif ($h <= 0) { + $h = $w * $oh / $ow; + } + // fit the image on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); + if ($this->rasterize_vector_images) { + // convert SVG to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'SVG', $link, $align, true, 300, $palign, false, false, $border, false, false, false); + } + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + // store current graphic vars + $gvars = $this->getGraphicVars(); + // store SVG position and scale factors + $svgoffset_x = ($ximg - $ox) * $this->k; + $svgoffset_y = -($y - $oy) * $this->k; + if (isset($view_box[2]) AND ($view_box[2] > 0) AND ($view_box[3] > 0)) { + $ow = $view_box[2]; + $oh = $view_box[3]; + } else { + if ($ow <= 0) { + $ow = $w; + } + if ($oh <= 0) { + $oh = $h; + } + } + $svgscale_x = $w / $ow; + $svgscale_y = $h / $oh; + // scaling and alignment + if ($aspect_ratio_align != 'none') { + // store current scaling values + $svgscale_old_x = $svgscale_x; + $svgscale_old_y = $svgscale_y; + // force uniform scaling + if ($aspect_ratio_ms == 'slice') { + // the entire viewport is covered by the viewBox + if ($svgscale_x > $svgscale_y) { + $svgscale_y = $svgscale_x; + } elseif ($svgscale_x < $svgscale_y) { + $svgscale_x = $svgscale_y; + } + } else { // meet + // the entire viewBox is visible within the viewport + if ($svgscale_x < $svgscale_y) { + $svgscale_y = $svgscale_x; + } elseif ($svgscale_x > $svgscale_y) { + $svgscale_x = $svgscale_y; + } + } + // correct X alignment + switch (substr($aspect_ratio_align, 1, 3)) { + case 'Min': { + // do nothing + break; + } + case 'Max': { + $svgoffset_x += (($w * $this->k) - ($ow * $this->k * $svgscale_x)); + break; + } + default: + case 'Mid': { + $svgoffset_x += ((($w * $this->k) - ($ow * $this->k * $svgscale_x)) / 2); + break; + } + } + // correct Y alignment + switch (substr($aspect_ratio_align, 5)) { + case 'Min': { + // do nothing + break; + } + case 'Max': { + $svgoffset_y -= (($h * $this->k) - ($oh * $this->k * $svgscale_y)); + break; + } + default: + case 'Mid': { + $svgoffset_y -= ((($h * $this->k) - ($oh * $this->k * $svgscale_y)) / 2); + break; + } + } + } + // store current page break mode + $page_break_mode = $this->AutoPageBreak; + $page_break_margin = $this->getBreakMargin(); + $cell_padding = $this->cell_padding; + $this->SetCellPadding(0); + $this->SetAutoPageBreak(false); + // save the current graphic state + $this->_out('q'.$this->epsmarker); + // set initial clipping mask + $this->Rect($ximg, $y, $w, $h, 'CNZ', array(), array()); + // scale and translate + $e = $ox * $this->k * (1 - $svgscale_x); + $f = ($this->h - $oy) * $this->k * (1 - $svgscale_y); + $this->_out(sprintf('%F %F %F %F %F %F cm', $svgscale_x, 0, 0, $svgscale_y, ($e + $svgoffset_x), ($f + $svgoffset_y))); + // creates a new XML parser to be used by the other XML functions + $this->parser = xml_parser_create('UTF-8'); + // the following function allows to use parser inside object + xml_set_object($this->parser, $this); + // disable case-folding for this XML parser + xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); + // sets the element handler functions for the XML parser + xml_set_element_handler($this->parser, 'startSVGElementHandler', 'endSVGElementHandler'); + // sets the character data handler function for the XML parser + xml_set_character_data_handler($this->parser, 'segSVGContentHandler'); + // start parsing an XML document + if (!xml_parse($this->parser, $svgdata)) { + $error_message = sprintf('SVG Error: %s at line %d', xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)); + $this->Error($error_message); + } + // free this XML parser + xml_parser_free($this->parser); + // restore previous graphic state + $this->_out($this->epsmarker.'Q'); + // restore graphic vars + $this->setGraphicVars($gvars); + $this->lasth = $gvars['lasth']; + if (!empty($border)) { + $bx = $this->x; + $by = $this->y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the next text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->SetY($this->img_rb_y); + break; + } + default:{ + // restore pointer to starting position + $this->x = $gvars['x']; + $this->y = $gvars['y']; + $this->page = $gvars['page']; + $this->current_column = $gvars['current_column']; + $this->tMargin = $gvars['tMargin']; + $this->bMargin = $gvars['bMargin']; + $this->w = $gvars['w']; + $this->h = $gvars['h']; + $this->wPt = $gvars['wPt']; + $this->hPt = $gvars['hPt']; + $this->fwPt = $gvars['fwPt']; + $this->fhPt = $gvars['fhPt']; + break; + } + } + $this->endlinex = $this->img_rb_x; + // restore page break + $this->SetAutoPageBreak($page_break_mode, $page_break_margin); + $this->cell_padding = $cell_padding; + } + + /** + * Convert SVG transformation matrix to PDF. + * @param $tm (array) original SVG transformation matrix + * @return array transformation matrix + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected function convertSVGtMatrix($tm) { + $a = $tm[0]; + $b = -$tm[1]; + $c = -$tm[2]; + $d = $tm[3]; + $e = $this->getHTMLUnitToUnits($tm[4], 1, $this->svgunit, false) * $this->k; + $f = -$this->getHTMLUnitToUnits($tm[5], 1, $this->svgunit, false) * $this->k; + $x = 0; + $y = $this->h * $this->k; + $e = ($x * (1 - $a)) - ($y * $c) + $e; + $f = ($y * (1 - $d)) - ($x * $b) + $f; + return array($a, $b, $c, $d, $e, $f); + } + + /** + * Apply SVG graphic transformation matrix. + * @param $tm (array) original SVG transformation matrix + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected function SVGTransform($tm) { + $this->Transform($this->convertSVGtMatrix($tm)); + } + + /** + * Apply the requested SVG styles (*** TO BE COMPLETED ***) + * @param $svgstyle (array) array of SVG styles to apply + * @param $prevsvgstyle (array) array of previous SVG style + * @param $x (int) X origin of the bounding box + * @param $y (int) Y origin of the bounding box + * @param $w (int) width of the bounding box + * @param $h (int) height of the bounding box + * @param $clip_function (string) clip function + * @param $clip_params (array) array of parameters for clipping function + * @return object style + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @protected + */ + protected function setSVGStyles($svgstyle, $prevsvgstyle, $x=0, $y=0, $w=1, $h=1, $clip_function='', $clip_params=array()) { + if ($this->state != 2) { + return; + } + $objstyle = ''; + $minlen = (0.01 / $this->k); // minimum acceptable length + if (!isset($svgstyle['opacity'])) { + return $objstyle; + } + // clip-path + $regs = array(); + if (preg_match('/url\([\s]*\#([^\)]*)\)/si', $svgstyle['clip-path'], $regs)) { + $clip_path = $this->svgclippaths[$regs[1]]; + foreach ($clip_path as $cp) { + $this->startSVGElementHandler('clip-path', $cp['name'], $cp['attribs'], $cp['tm']); + } + } + // opacity + if ($svgstyle['opacity'] != 1) { + $this->setAlpha($svgstyle['opacity'], 'Normal', $svgstyle['opacity'], false); + } + // color + $fill_color = TCPDF_COLORS::convertHTMLColorToDec($svgstyle['color'], $this->spot_colors); + $this->SetFillColorArray($fill_color); + // text color + $text_color = TCPDF_COLORS::convertHTMLColorToDec($svgstyle['text-color'], $this->spot_colors); + $this->SetTextColorArray($text_color); + // clip + if (preg_match('/rect\(([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)[\s]*([a-z0-9\-\.]*)\)/si', $svgstyle['clip'], $regs)) { + $top = (isset($regs[1])?$this->getHTMLUnitToUnits($regs[1], 0, $this->svgunit, false):0); + $right = (isset($regs[2])?$this->getHTMLUnitToUnits($regs[2], 0, $this->svgunit, false):0); + $bottom = (isset($regs[3])?$this->getHTMLUnitToUnits($regs[3], 0, $this->svgunit, false):0); + $left = (isset($regs[4])?$this->getHTMLUnitToUnits($regs[4], 0, $this->svgunit, false):0); + $cx = $x + $left; + $cy = $y + $top; + $cw = $w - $left - $right; + $ch = $h - $top - $bottom; + if ($svgstyle['clip-rule'] == 'evenodd') { + $clip_rule = 'CNZ'; + } else { + $clip_rule = 'CEO'; + } + $this->Rect($cx, $cy, $cw, $ch, $clip_rule, array(), array()); + } + // fill + $regs = array(); + if (preg_match('/url\([\s]*\#([^\)]*)\)/si', $svgstyle['fill'], $regs)) { + // gradient + $gradient = $this->svggradients[$regs[1]]; + if (isset($gradient['xref'])) { + // reference to another gradient definition + $newgradient = $this->svggradients[$gradient['xref']]; + $newgradient['coords'] = $gradient['coords']; + $newgradient['mode'] = $gradient['mode']; + $newgradient['type'] = $gradient['type']; + $newgradient['gradientUnits'] = $gradient['gradientUnits']; + if (isset($gradient['gradientTransform'])) { + $newgradient['gradientTransform'] = $gradient['gradientTransform']; + } + $gradient = $newgradient; + } + //save current Graphic State + $this->_outSaveGraphicsState(); + //set clipping area + if (!empty($clip_function) AND method_exists($this, $clip_function)) { + $bbox = call_user_func_array(array($this, $clip_function), $clip_params); + if ((!isset($gradient['type']) OR ($gradient['type'] != 3)) AND is_array($bbox) AND (count($bbox) == 4)) { + list($x, $y, $w, $h) = $bbox; + } + } + if ($gradient['mode'] == 'measure') { + if (!isset($gradient['coords'][4])) { + $gradient['coords'][4] = 0.5; + } + if (isset($gradient['gradientTransform']) AND !empty($gradient['gradientTransform'])) { + $gtm = $gradient['gradientTransform']; + // apply transformation matrix + $xa = ($gtm[0] * $gradient['coords'][0]) + ($gtm[2] * $gradient['coords'][1]) + $gtm[4]; + $ya = ($gtm[1] * $gradient['coords'][0]) + ($gtm[3] * $gradient['coords'][1]) + $gtm[5]; + $xb = ($gtm[0] * $gradient['coords'][2]) + ($gtm[2] * $gradient['coords'][3]) + $gtm[4]; + $yb = ($gtm[1] * $gradient['coords'][2]) + ($gtm[3] * $gradient['coords'][3]) + $gtm[5]; + $r = sqrt(pow(($gtm[0] * $gradient['coords'][4]), 2) + pow(($gtm[1] * $gradient['coords'][4]), 2)); + $gradient['coords'][0] = $xa; + $gradient['coords'][1] = $ya; + $gradient['coords'][2] = $xb; + $gradient['coords'][3] = $yb; + $gradient['coords'][4] = $r; + } + // convert SVG coordinates to user units + $gradient['coords'][0] = $this->getHTMLUnitToUnits($gradient['coords'][0], 0, $this->svgunit, false); + $gradient['coords'][1] = $this->getHTMLUnitToUnits($gradient['coords'][1], 0, $this->svgunit, false); + $gradient['coords'][2] = $this->getHTMLUnitToUnits($gradient['coords'][2], 0, $this->svgunit, false); + $gradient['coords'][3] = $this->getHTMLUnitToUnits($gradient['coords'][3], 0, $this->svgunit, false); + $gradient['coords'][4] = $this->getHTMLUnitToUnits($gradient['coords'][4], 0, $this->svgunit, false); + if ($w <= $minlen) { + $w = $minlen; + } + if ($h <= $minlen) { + $h = $minlen; + } + // shift units + if ($gradient['gradientUnits'] == 'objectBoundingBox') { + // convert to SVG coordinate system + $gradient['coords'][0] += $x; + $gradient['coords'][1] += $y; + $gradient['coords'][2] += $x; + $gradient['coords'][3] += $y; + } + // calculate percentages + $gradient['coords'][0] = (($gradient['coords'][0] - $x) / $w); + $gradient['coords'][1] = (($gradient['coords'][1] - $y) / $h); + $gradient['coords'][2] = (($gradient['coords'][2] - $x) / $w); + $gradient['coords'][3] = (($gradient['coords'][3] - $y) / $h); + $gradient['coords'][4] /= $w; + } elseif ($gradient['mode'] == 'percentage') { + foreach($gradient['coords'] as $key => $val) { + $gradient['coords'][$key] = (intval($val) / 100); + if ($val < 0) { + $gradient['coords'][$key] = 0; + } elseif ($val > 1) { + $gradient['coords'][$key] = 1; + } + } + } + if (($gradient['type'] == 2) AND ($gradient['coords'][0] == $gradient['coords'][2]) AND ($gradient['coords'][1] == $gradient['coords'][3])) { + // single color (no shading) + $gradient['coords'][0] = 1; + $gradient['coords'][1] = 0; + $gradient['coords'][2] = 0.999; + $gradient['coords'][3] = 0; + } + // swap Y coordinates + $tmp = $gradient['coords'][1]; + $gradient['coords'][1] = $gradient['coords'][3]; + $gradient['coords'][3] = $tmp; + // set transformation map for gradient + $cy = ($this->h - $y); + if ($gradient['type'] == 3) { + // circular gradient + $cy -= ($gradient['coords'][1] * ($w + $h)); + $h = $w = max($w, $h); + } else { + $cy -= $h; + } + $this->_out(sprintf('%F 0 0 %F %F %F cm', ($w * $this->k), ($h * $this->k), ($x * $this->k), ($cy * $this->k))); + if (count($gradient['stops']) > 1) { + $this->Gradient($gradient['type'], $gradient['coords'], $gradient['stops'], array(), false); + } + } elseif ($svgstyle['fill'] != 'none') { + $fill_color = TCPDF_COLORS::convertHTMLColorToDec($svgstyle['fill'], $this->spot_colors); + if ($svgstyle['fill-opacity'] != 1) { + $this->setAlpha($this->alpha['CA'], 'Normal', $svgstyle['fill-opacity'], false); + } + $this->SetFillColorArray($fill_color); + if ($svgstyle['fill-rule'] == 'evenodd') { + $objstyle .= 'F*'; + } else { + $objstyle .= 'F'; + } + } + // stroke + if ($svgstyle['stroke'] != 'none') { + if ($svgstyle['stroke-opacity'] != 1) { + $this->setAlpha($svgstyle['stroke-opacity'], 'Normal', $this->alpha['ca'], false); + } elseif (preg_match('/rgba\(\d+%?,\s*\d+%?,\s*\d+%?,\s*(\d+(?:\.\d+)?)\)/i', $svgstyle['stroke'], $rgba_matches)) { + $this->setAlpha($rgba_matches[1], 'Normal', $this->alpha['ca'], false); + } + $stroke_style = array( + 'color' => TCPDF_COLORS::convertHTMLColorToDec($svgstyle['stroke'], $this->spot_colors), + 'width' => $this->getHTMLUnitToUnits($svgstyle['stroke-width'], 0, $this->svgunit, false), + 'cap' => $svgstyle['stroke-linecap'], + 'join' => $svgstyle['stroke-linejoin'] + ); + if (isset($svgstyle['stroke-dasharray']) AND !empty($svgstyle['stroke-dasharray']) AND ($svgstyle['stroke-dasharray'] != 'none')) { + $stroke_style['dash'] = $svgstyle['stroke-dasharray']; + } + $this->SetLineStyle($stroke_style); + $objstyle .= 'D'; + } + // font + $regs = array(); + if (!empty($svgstyle['font'])) { + if (preg_match('/font-family[\s]*:[\s]*([^\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_family = $this->getFontFamilyName($regs[1]); + } else { + $font_family = $svgstyle['font-family']; + } + if (preg_match('/font-size[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_size = trim($regs[1]); + } else { + $font_size = $svgstyle['font-size']; + } + if (preg_match('/font-style[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_style = trim($regs[1]); + } else { + $font_style = $svgstyle['font-style']; + } + if (preg_match('/font-weight[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_weight = trim($regs[1]); + } else { + $font_weight = $svgstyle['font-weight']; + } + if (preg_match('/font-stretch[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_stretch = trim($regs[1]); + } else { + $font_stretch = $svgstyle['font-stretch']; + } + if (preg_match('/letter-spacing[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { + $font_spacing = trim($regs[1]); + } else { + $font_spacing = $svgstyle['letter-spacing']; + } + } else { + $font_family = $this->getFontFamilyName($svgstyle['font-family']); + $font_size = $svgstyle['font-size']; + $font_style = $svgstyle['font-style']; + $font_weight = $svgstyle['font-weight']; + $font_stretch = $svgstyle['font-stretch']; + $font_spacing = $svgstyle['letter-spacing']; + } + $font_size = $this->getHTMLFontUnits($font_size, $this->svgstyles[0]['font-size'], $prevsvgstyle['font-size'], $this->svgunit); + $font_stretch = $this->getCSSFontStretching($font_stretch, $svgstyle['font-stretch']); + $font_spacing = $this->getCSSFontSpacing($font_spacing, $svgstyle['letter-spacing']); + switch ($font_style) { + case 'italic': { + $font_style = 'I'; + break; + } + case 'oblique': { + $font_style = 'I'; + break; + } + default: + case 'normal': { + $font_style = ''; + break; + } + } + switch ($font_weight) { + case 'bold': + case 'bolder': { + $font_style .= 'B'; + break; + } + case 'normal': { + if ((substr($font_family, -1) == 'I') AND (substr($font_family, -2, 1) == 'B')) { + $font_family = substr($font_family, 0, -2).'I'; + } elseif (substr($font_family, -1) == 'B') { + $font_family = substr($font_family, 0, -1); + } + break; + } + } + switch ($svgstyle['text-decoration']) { + case 'underline': { + $font_style .= 'U'; + break; + } + case 'overline': { + $font_style .= 'O'; + break; + } + case 'line-through': { + $font_style .= 'D'; + break; + } + default: + case 'none': { + break; + } + } + $this->SetFont($font_family, $font_style, $font_size); + $this->setFontStretching($font_stretch); + $this->setFontSpacing($font_spacing); + return $objstyle; + } + + /** + * Draws an SVG path + * @param $d (string) attribute d of the path SVG element + * @param $style (string) Style of rendering. Possible values are: + * <ul> + * <li>D or empty string: Draw (default).</li> + * <li>F: Fill.</li> + * <li>F*: Fill using the even-odd rule to determine which regions lie inside the clipping path.</li> + * <li>DF or FD: Draw and fill.</li> + * <li>DF* or FD*: Draw and fill using the even-odd rule to determine which regions lie inside the clipping path.</li> + * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li> + * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li> + * </ul> + * @return array of container box measures (x, y, w, h) + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @protected + */ + protected function SVGPath($d, $style='') { + if ($this->state != 2) { + return; + } + // set fill/stroke style + $op = TCPDF_STATIC::getPathPaintOperator($style, ''); + if (empty($op)) { + return; + } + $paths = array(); + $d = preg_replace('/([0-9ACHLMQSTVZ])([\-\+])/si', '\\1 \\2', $d); + preg_match_all('/([ACHLMQSTVZ])[\s]*([^ACHLMQSTVZ\"]*)/si', $d, $paths, PREG_SET_ORDER); + $x = 0; + $y = 0; + $x1 = 0; + $y1 = 0; + $x2 = 0; + $y2 = 0; + $xmin = 2147483647; + $xmax = 0; + $ymin = 2147483647; + $ymax = 0; + $relcoord = false; + $minlen = (0.01 / $this->k); // minimum acceptable length (3 point) + $firstcmd = true; // used to print first point + // draw curve pieces + foreach ($paths as $key => $val) { + // get curve type + $cmd = trim($val[1]); + if (strtolower($cmd) == $cmd) { + // use relative coordinated instead of absolute + $relcoord = true; + $xoffset = $x; + $yoffset = $y; + } else { + $relcoord = false; + $xoffset = 0; + $yoffset = 0; + } + $params = array(); + if (isset($val[2])) { + // get curve parameters + $rawparams = preg_split('/([\,\s]+)/si', trim($val[2])); + $params = array(); + foreach ($rawparams as $ck => $cp) { + $params[$ck] = $this->getHTMLUnitToUnits($cp, 0, $this->svgunit, false); + if (abs($params[$ck]) < $minlen) { + // approximate little values to zero + $params[$ck] = 0; + } + } + } + // store current origin point + $x0 = $x; + $y0 = $y; + switch (strtoupper($cmd)) { + case 'M': { // moveto + foreach ($params as $ck => $cp) { + if (($ck % 2) == 0) { + $x = $cp + $xoffset; + } else { + $y = $cp + $yoffset; + if ($firstcmd OR (abs($x0 - $x) >= $minlen) OR (abs($y0 - $y) >= $minlen)) { + if ($ck == 1) { + $this->_outPoint($x, $y); + $firstcmd = false; + } else { + $this->_outLine($x, $y); + } + $x0 = $x; + $y0 = $y; + } + $xmin = min($xmin, $x); + $ymin = min($ymin, $y); + $xmax = max($xmax, $x); + $ymax = max($ymax, $y); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'L': { // lineto + foreach ($params as $ck => $cp) { + if (($ck % 2) == 0) { + $x = $cp + $xoffset; + } else { + $y = $cp + $yoffset; + if ((abs($x0 - $x) >= $minlen) OR (abs($y0 - $y) >= $minlen)) { + $this->_outLine($x, $y); + $x0 = $x; + $y0 = $y; + } + $xmin = min($xmin, $x); + $ymin = min($ymin, $y); + $xmax = max($xmax, $x); + $ymax = max($ymax, $y); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'H': { // horizontal lineto + foreach ($params as $ck => $cp) { + $x = $cp + $xoffset; + if ((abs($x0 - $x) >= $minlen) OR (abs($y0 - $y) >= $minlen)) { + $this->_outLine($x, $y); + $x0 = $x; + $y0 = $y; + } + $xmin = min($xmin, $x); + $xmax = max($xmax, $x); + if ($relcoord) { + $xoffset = $x; + } + } + break; + } + case 'V': { // vertical lineto + foreach ($params as $ck => $cp) { + $y = $cp + $yoffset; + if ((abs($x0 - $x) >= $minlen) OR (abs($y0 - $y) >= $minlen)) { + $this->_outLine($x, $y); + $x0 = $x; + $y0 = $y; + } + $ymin = min($ymin, $y); + $ymax = max($ymax, $y); + if ($relcoord) { + $yoffset = $y; + } + } + break; + } + case 'C': { // curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 6) == 0) { + $x1 = $params[($ck - 5)] + $xoffset; + $y1 = $params[($ck - 4)] + $yoffset; + $x2 = $params[($ck - 3)] + $xoffset; + $y2 = $params[($ck - 2)] + $yoffset; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $this->_outCurve($x1, $y1, $x2, $y2, $x, $y); + $xmin = min($xmin, $x, $x1, $x2); + $ymin = min($ymin, $y, $y1, $y2); + $xmax = max($xmax, $x, $x1, $x2); + $ymax = max($ymax, $y, $y1, $y2); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'S': { // shorthand/smooth curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 4) == 0) { + if (($key > 0) AND ((strtoupper($paths[($key - 1)][1]) == 'C') OR (strtoupper($paths[($key - 1)][1]) == 'S'))) { + $x1 = (2 * $x) - $x2; + $y1 = (2 * $y) - $y2; + } else { + $x1 = $x; + $y1 = $y; + } + $x2 = $params[($ck - 3)] + $xoffset; + $y2 = $params[($ck - 2)] + $yoffset; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $this->_outCurve($x1, $y1, $x2, $y2, $x, $y); + $xmin = min($xmin, $x, $x1, $x2); + $ymin = min($ymin, $y, $y1, $y2); + $xmax = max($xmax, $x, $x1, $x2); + $ymax = max($ymax, $y, $y1, $y2); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'Q': { // quadratic Bezier curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 4) == 0) { + // convert quadratic points to cubic points + $x1 = $params[($ck - 3)] + $xoffset; + $y1 = $params[($ck - 2)] + $yoffset; + $xa = ($x + (2 * $x1)) / 3; + $ya = ($y + (2 * $y1)) / 3; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $xb = ($x + (2 * $x1)) / 3; + $yb = ($y + (2 * $y1)) / 3; + $this->_outCurve($xa, $ya, $xb, $yb, $x, $y); + $xmin = min($xmin, $x, $xa, $xb); + $ymin = min($ymin, $y, $ya, $yb); + $xmax = max($xmax, $x, $xa, $xb); + $ymax = max($ymax, $y, $ya, $yb); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'T': { // shorthand/smooth quadratic Bezier curveto + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if (($ck % 2) != 0) { + if (($key > 0) AND ((strtoupper($paths[($key - 1)][1]) == 'Q') OR (strtoupper($paths[($key - 1)][1]) == 'T'))) { + $x1 = (2 * $x) - $x1; + $y1 = (2 * $y) - $y1; + } else { + $x1 = $x; + $y1 = $y; + } + // convert quadratic points to cubic points + $xa = ($x + (2 * $x1)) / 3; + $ya = ($y + (2 * $y1)) / 3; + $x = $params[($ck - 1)] + $xoffset; + $y = $params[($ck)] + $yoffset; + $xb = ($x + (2 * $x1)) / 3; + $yb = ($y + (2 * $y1)) / 3; + $this->_outCurve($xa, $ya, $xb, $yb, $x, $y); + $xmin = min($xmin, $x, $xa, $xb); + $ymin = min($ymin, $y, $ya, $yb); + $xmax = max($xmax, $x, $xa, $xb); + $ymax = max($ymax, $y, $ya, $yb); + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'A': { // elliptical arc + foreach ($params as $ck => $cp) { + $params[$ck] = $cp; + if ((($ck + 1) % 7) == 0) { + $x0 = $x; + $y0 = $y; + $rx = abs($params[($ck - 6)]); + $ry = abs($params[($ck - 5)]); + $ang = -$rawparams[($ck - 4)]; + $angle = deg2rad($ang); + $fa = $rawparams[($ck - 3)]; // large-arc-flag + $fs = $rawparams[($ck - 2)]; // sweep-flag + $x = $params[($ck - 1)] + $xoffset; + $y = $params[$ck] + $yoffset; + if ((abs($x0 - $x) < $minlen) AND (abs($y0 - $y) < $minlen)) { + // endpoints are almost identical + $xmin = min($xmin, $x); + $ymin = min($ymin, $y); + $xmax = max($xmax, $x); + $ymax = max($ymax, $y); + } else { + $cos_ang = cos($angle); + $sin_ang = sin($angle); + $a = (($x0 - $x) / 2); + $b = (($y0 - $y) / 2); + $xa = ($a * $cos_ang) - ($b * $sin_ang); + $ya = ($a * $sin_ang) + ($b * $cos_ang); + $rx2 = $rx * $rx; + $ry2 = $ry * $ry; + $xa2 = $xa * $xa; + $ya2 = $ya * $ya; + $delta = ($xa2 / $rx2) + ($ya2 / $ry2); + if ($delta > 1) { + $rx *= sqrt($delta); + $ry *= sqrt($delta); + $rx2 = $rx * $rx; + $ry2 = $ry * $ry; + } + $numerator = (($rx2 * $ry2) - ($rx2 * $ya2) - ($ry2 * $xa2)); + if ($numerator < 0) { + $root = 0; + } else { + $root = sqrt($numerator / (($rx2 * $ya2) + ($ry2 * $xa2))); + } + if ($fa == $fs){ + $root *= -1; + } + $cax = $root * (($rx * $ya) / $ry); + $cay = -$root * (($ry * $xa) / $rx); + // coordinates of ellipse center + $cx = ($cax * $cos_ang) - ($cay * $sin_ang) + (($x0 + $x) / 2); + $cy = ($cax * $sin_ang) + ($cay * $cos_ang) + (($y0 + $y) / 2); + // get angles + $angs = TCPDF_STATIC::getVectorsAngle(1, 0, (($xa - $cax) / $rx), (($cay - $ya) / $ry)); + $dang = TCPDF_STATIC::getVectorsAngle((($xa - $cax) / $rx), (($ya - $cay) / $ry), ((-$xa - $cax) / $rx), ((-$ya - $cay) / $ry)); + if (($fs == 0) AND ($dang > 0)) { + $dang -= (2 * M_PI); + } elseif (($fs == 1) AND ($dang < 0)) { + $dang += (2 * M_PI); + } + $angf = $angs - $dang; + if ((($fs == 0) AND ($angs > $angf)) OR (($fs == 1) AND ($angs < $angf))) { + // reverse angles + $tmp = $angs; + $angs = $angf; + $angf = $tmp; + } + $angs = round(rad2deg($angs), 6); + $angf = round(rad2deg($angf), 6); + // covent angles to positive values + if (($angs < 0) AND ($angf < 0)) { + $angs += 360; + $angf += 360; + } + $pie = false; + if (($key == 0) AND (isset($paths[($key + 1)][1])) AND (trim($paths[($key + 1)][1]) == 'z')) { + $pie = true; + } + list($axmin, $aymin, $axmax, $aymax) = $this->_outellipticalarc($cx, $cy, $rx, $ry, $ang, $angs, $angf, $pie, 2, false, ($fs == 0), true); + $xmin = min($xmin, $x, $axmin); + $ymin = min($ymin, $y, $aymin); + $xmax = max($xmax, $x, $axmax); + $ymax = max($ymax, $y, $aymax); + } + if ($relcoord) { + $xoffset = $x; + $yoffset = $y; + } + } + } + break; + } + case 'Z': { + $this->_out('h'); + break; + } + } + $firstcmd = false; + } // end foreach + if (!empty($op)) { + $this->_out($op); + } + return array($xmin, $ymin, ($xmax - $xmin), ($ymax - $ymin)); + } + + /** + * Return the tag name without the namespace + * @param $name (string) Tag name + * @protected + */ + protected function removeTagNamespace($name) { + if(strpos($name, ':') !== false) { + $parts = explode(':', $name); + return $parts[(sizeof($parts) - 1)]; + } + return $name; + } + + /** + * Sets the opening SVG element handler function for the XML parser. (*** TO BE COMPLETED ***) + * @param $parser (resource) The first parameter, parser, is a reference to the XML parser calling the handler. + * @param $name (string) The second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters. + * @param $attribs (array) The third parameter, attribs, contains an associative array with the element's attributes (if any). The keys of this array are the attribute names, the values are the attribute values. Attribute names are case-folded on the same criteria as element names. Attribute values are not case-folded. The original order of the attributes can be retrieved by walking through attribs the normal way, using each(). The first key in the array was the first attribute, and so on. + * @param $ctm (array) tranformation matrix for clipping mode (starting transformation matrix). + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @protected + */ + protected function startSVGElementHandler($parser, $name, $attribs, $ctm=array()) { + $name = $this->removeTagNamespace($name); + // check if we are in clip mode + if ($this->svgclipmode) { + $this->svgclippaths[$this->svgclipid][] = array('name' => $name, 'attribs' => $attribs, 'tm' => $this->svgcliptm[$this->svgclipid]); + return; + } + if ($this->svgdefsmode AND !in_array($name, array('clipPath', 'linearGradient', 'radialGradient', 'stop'))) { + if (isset($attribs['id'])) { + $attribs['child_elements'] = array(); + $this->svgdefs[$attribs['id']] = array('name' => $name, 'attribs' => $attribs); + return; + } + if (end($this->svgdefs) !== FALSE) { + $last_svgdefs_id = key($this->svgdefs); + if (isset($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'])) { + $attribs['id'] = 'DF_'.(count($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements']) + 1); + $this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'][$attribs['id']] = array('name' => $name, 'attribs' => $attribs); + return; + } + } + return; + } + $clipping = false; + if ($parser == 'clip-path') { + // set clipping mode + $clipping = true; + } + // get styling properties + $prev_svgstyle = $this->svgstyles[max(0,(count($this->svgstyles) - 1))]; // previous style + $svgstyle = $this->svgstyles[0]; // set default style + if ($clipping AND !isset($attribs['fill']) AND (!isset($attribs['style']) OR (!preg_match('/[;\"\s]{1}fill[\s]*:[\s]*([^;\"]*)/si', $attribs['style'], $attrval)))) { + // default fill attribute for clipping + $attribs['fill'] = 'none'; + } + if (isset($attribs['style']) AND !TCPDF_STATIC::empty_string($attribs['style']) AND ($attribs['style'][0] != ';')) { + // fix style for regular expression + $attribs['style'] = ';'.$attribs['style']; + } + foreach ($prev_svgstyle as $key => $val) { + if (in_array($key, TCPDF_IMAGES::$svginheritprop)) { + // inherit previous value + $svgstyle[$key] = $val; + } + if (isset($attribs[$key]) AND !TCPDF_STATIC::empty_string($attribs[$key])) { + // specific attribute settings + if ($attribs[$key] == 'inherit') { + $svgstyle[$key] = $val; + } else { + $svgstyle[$key] = $attribs[$key]; + } + } elseif (isset($attribs['style']) AND !TCPDF_STATIC::empty_string($attribs['style'])) { + // CSS style syntax + $attrval = array(); + if (preg_match('/[;\"\s]{1}'.$key.'[\s]*:[\s]*([^;\"]*)/si', $attribs['style'], $attrval) AND isset($attrval[1])) { + if ($attrval[1] == 'inherit') { + $svgstyle[$key] = $val; + } else { + $svgstyle[$key] = $attrval[1]; + } + } + } + } + // transformation matrix + if (!empty($ctm)) { + $tm = $ctm; + } else { + $tm = array(1,0,0,1,0,0); + } + if (isset($attribs['transform']) AND !empty($attribs['transform'])) { + $tm = TCPDF_STATIC::getTransformationMatrixProduct($tm, TCPDF_STATIC::getSVGTransformMatrix($attribs['transform'])); + } + $svgstyle['transfmatrix'] = $tm; + $invisible = false; + if (($svgstyle['visibility'] == 'hidden') OR ($svgstyle['visibility'] == 'collapse') OR ($svgstyle['display'] == 'none')) { + // the current graphics element is invisible (nothing is painted) + $invisible = true; + } + // process tag + switch($name) { + case 'defs': { + $this->svgdefsmode = true; + break; + } + // clipPath + case 'clipPath': { + if ($invisible) { + break; + } + $this->svgclipmode = true; + if (!isset($attribs['id'])) { + $attribs['id'] = 'CP_'.(count($this->svgcliptm) + 1); + } + $this->svgclipid = $attribs['id']; + $this->svgclippaths[$this->svgclipid] = array(); + $this->svgcliptm[$this->svgclipid] = $tm; + break; + } + case 'svg': { + // start of SVG object + if(++$this->svg_tag_depth <= 1) { + break; + } + // inner SVG + array_push($this->svgstyles, $svgstyle); + $this->StartTransform(); + $svgX = (isset($attribs['x'])?$attribs['x']:0); + $svgY = (isset($attribs['y'])?$attribs['y']:0); + $svgW = (isset($attribs['width'])?$attribs['width']:0); + $svgH = (isset($attribs['height'])?$attribs['height']:0); + // set x, y position using transform matrix + $tm = TCPDF_STATIC::getTransformationMatrixProduct($tm, array( 1, 0, 0, 1, $svgX, $svgY)); + $this->SVGTransform($tm); + // set clipping for width and height + $x = 0; + $y = 0; + $w = (isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'], 0, $this->svgunit, false):$this->w); + $h = (isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'], 0, $this->svgunit, false):$this->h); + // draw clipping rect + $this->Rect($x, $y, $w, $h, 'CNZ', array(), array()); + // parse viewbox, calculate extra transformation matrix + if (isset($attribs['viewBox'])) { + $tmp = array(); + preg_match_all("/[0-9]+/", $attribs['viewBox'], $tmp); + $tmp = $tmp[0]; + if (sizeof($tmp) == 4) { + $vx = $tmp[0]; + $vy = $tmp[1]; + $vw = $tmp[2]; + $vh = $tmp[3]; + // get aspect ratio + $tmp = array(); + $aspectX = 'xMid'; + $aspectY = 'YMid'; + $fit = 'meet'; + if (isset($attribs['preserveAspectRatio'])) { + if($attribs['preserveAspectRatio'] == 'none') { + $fit = 'none'; + } else { + preg_match_all('/[a-zA-Z]+/', $attribs['preserveAspectRatio'], $tmp); + $tmp = $tmp[0]; + if ((sizeof($tmp) == 2) AND (strlen($tmp[0]) == 8) AND (in_array($tmp[1], array('meet', 'slice', 'none')))) { + $aspectX = substr($tmp[0], 0, 4); + $aspectY = substr($tmp[0], 4, 4); + $fit = $tmp[1]; + } + } + } + $wr = ($svgW / $vw); + $hr = ($svgH / $vh); + $ax = $ay = 0; + if ((($fit == 'meet') AND ($hr < $wr)) OR (($fit == 'slice') AND ($hr > $wr))) { + if ($aspectX == 'xMax') { + $ax = (($vw * ($wr / $hr)) - $vw); + } + if ($aspectX == 'xMid') { + $ax = ((($vw * ($wr / $hr)) - $vw) / 2); + } + $wr = $hr; + } elseif ((($fit == 'meet') AND ($hr > $wr)) OR (($fit == 'slice') AND ($hr < $wr))) { + if ($aspectY == 'YMax') { + $ay = (($vh * ($hr / $wr)) - $vh); + } + if ($aspectY == 'YMid') { + $ay = ((($vh * ($hr / $wr)) - $vh) / 2); + } + $hr = $wr; + } + $newtm = array($wr, 0, 0, $hr, (($wr * ($ax - $vx)) - $svgX), (($hr * ($ay - $vy)) - $svgY)); + $tm = TCPDF_STATIC::getTransformationMatrixProduct($tm, $newtm); + $this->SVGTransform($tm); + } + } + $this->setSVGStyles($svgstyle, $prev_svgstyle); + break; + } + case 'g': { + // group together related graphics elements + array_push($this->svgstyles, $svgstyle); + $this->StartTransform(); + $x = (isset($attribs['x'])?$attribs['x']:0); + $y = (isset($attribs['y'])?$attribs['y']:0); + $w = 1;//(isset($attribs['width'])?$attribs['width']:1); + $h = 1;//(isset($attribs['height'])?$attribs['height']:1); + $tm = TCPDF_STATIC::getTransformationMatrixProduct($tm, array($w, 0, 0, $h, $x, $y)); + $this->SVGTransform($tm); + $this->setSVGStyles($svgstyle, $prev_svgstyle); + break; + } + case 'linearGradient': { + if ($this->pdfa_mode) { + break; + } + if (!isset($attribs['id'])) { + $attribs['id'] = 'GR_'.(count($this->svggradients) + 1); + } + $this->svggradientid = $attribs['id']; + $this->svggradients[$this->svggradientid] = array(); + $this->svggradients[$this->svggradientid]['type'] = 2; + $this->svggradients[$this->svggradientid]['stops'] = array(); + if (isset($attribs['gradientUnits'])) { + $this->svggradients[$this->svggradientid]['gradientUnits'] = $attribs['gradientUnits']; + } else { + $this->svggradients[$this->svggradientid]['gradientUnits'] = 'objectBoundingBox'; + } + //$attribs['spreadMethod'] + if (((!isset($attribs['x1'])) AND (!isset($attribs['y1'])) AND (!isset($attribs['x2'])) AND (!isset($attribs['y2']))) + OR ((isset($attribs['x1']) AND (substr($attribs['x1'], -1) == '%')) + OR (isset($attribs['y1']) AND (substr($attribs['y1'], -1) == '%')) + OR (isset($attribs['x2']) AND (substr($attribs['x2'], -1) == '%')) + OR (isset($attribs['y2']) AND (substr($attribs['y2'], -1) == '%')))) { + $this->svggradients[$this->svggradientid]['mode'] = 'percentage'; + } else { + $this->svggradients[$this->svggradientid]['mode'] = 'measure'; + } + $x1 = (isset($attribs['x1'])?$attribs['x1']:'0'); + $y1 = (isset($attribs['y1'])?$attribs['y1']:'0'); + $x2 = (isset($attribs['x2'])?$attribs['x2']:'100'); + $y2 = (isset($attribs['y2'])?$attribs['y2']:'0'); + if (isset($attribs['gradientTransform'])) { + $this->svggradients[$this->svggradientid]['gradientTransform'] = TCPDF_STATIC::getSVGTransformMatrix($attribs['gradientTransform']); + } + $this->svggradients[$this->svggradientid]['coords'] = array($x1, $y1, $x2, $y2); + if (isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])) { + // gradient is defined on another place + $this->svggradients[$this->svggradientid]['xref'] = substr($attribs['xlink:href'], 1); + } + break; + } + case 'radialGradient': { + if ($this->pdfa_mode) { + break; + } + if (!isset($attribs['id'])) { + $attribs['id'] = 'GR_'.(count($this->svggradients) + 1); + } + $this->svggradientid = $attribs['id']; + $this->svggradients[$this->svggradientid] = array(); + $this->svggradients[$this->svggradientid]['type'] = 3; + $this->svggradients[$this->svggradientid]['stops'] = array(); + if (isset($attribs['gradientUnits'])) { + $this->svggradients[$this->svggradientid]['gradientUnits'] = $attribs['gradientUnits']; + } else { + $this->svggradients[$this->svggradientid]['gradientUnits'] = 'objectBoundingBox'; + } + //$attribs['spreadMethod'] + if (((!isset($attribs['cx'])) AND (!isset($attribs['cy']))) + OR ((isset($attribs['cx']) AND (substr($attribs['cx'], -1) == '%')) + OR (isset($attribs['cy']) AND (substr($attribs['cy'], -1) == '%')))) { + $this->svggradients[$this->svggradientid]['mode'] = 'percentage'; + } elseif (isset($attribs['r']) AND is_numeric($attribs['r']) AND ($attribs['r']) <= 1) { + $this->svggradients[$this->svggradientid]['mode'] = 'ratio'; + } else { + $this->svggradients[$this->svggradientid]['mode'] = 'measure'; + } + $cx = (isset($attribs['cx']) ? $attribs['cx'] : 0.5); + $cy = (isset($attribs['cy']) ? $attribs['cy'] : 0.5); + $fx = (isset($attribs['fx']) ? $attribs['fx'] : $cx); + $fy = (isset($attribs['fy']) ? $attribs['fy'] : $cy); + $r = (isset($attribs['r']) ? $attribs['r'] : 0.5); + if (isset($attribs['gradientTransform'])) { + $this->svggradients[$this->svggradientid]['gradientTransform'] = TCPDF_STATIC::getSVGTransformMatrix($attribs['gradientTransform']); + } + $this->svggradients[$this->svggradientid]['coords'] = array($cx, $cy, $fx, $fy, $r); + if (isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])) { + // gradient is defined on another place + $this->svggradients[$this->svggradientid]['xref'] = substr($attribs['xlink:href'], 1); + } + break; + } + case 'stop': { + // gradient stops + if (substr($attribs['offset'], -1) == '%') { + $offset = floatval(substr($attribs['offset'], -1)) / 100; + } else { + $offset = floatval($attribs['offset']); + if ($offset > 1) { + $offset /= 100; + } + } + $stop_color = isset($svgstyle['stop-color'])?TCPDF_COLORS::convertHTMLColorToDec($svgstyle['stop-color'], $this->spot_colors):'black'; + $opacity = isset($svgstyle['stop-opacity'])?$svgstyle['stop-opacity']:1; + $this->svggradients[$this->svggradientid]['stops'][] = array('offset' => $offset, 'color' => $stop_color, 'opacity' => $opacity); + break; + } + // paths + case 'path': { + if ($invisible) { + break; + } + if (isset($attribs['d'])) { + $d = trim($attribs['d']); + if (!empty($d)) { + $x = (isset($attribs['x'])?$attribs['x']:0); + $y = (isset($attribs['y'])?$attribs['y']:0); + $w = (isset($attribs['width'])?$attribs['width']:1); + $h = (isset($attribs['height'])?$attribs['height']:1); + $tm = TCPDF_STATIC::getTransformationMatrixProduct($tm, array($w, 0, 0, $h, $x, $y)); + if ($clipping) { + $this->SVGTransform($tm); + $this->SVGPath($d, 'CNZ'); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'SVGPath', array($d, 'CNZ')); + if (!empty($obstyle)) { + $this->SVGPath($d, $obstyle); + } + $this->StopTransform(); + } + } + } + break; + } + // shapes + case 'rect': { + if ($invisible) { + break; + } + $x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):0); + $y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):0); + $w = (isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'], 0, $this->svgunit, false):0); + $h = (isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'], 0, $this->svgunit, false):0); + $rx = (isset($attribs['rx'])?$this->getHTMLUnitToUnits($attribs['rx'], 0, $this->svgunit, false):0); + $ry = (isset($attribs['ry'])?$this->getHTMLUnitToUnits($attribs['ry'], 0, $this->svgunit, false):$rx); + if ($clipping) { + $this->SVGTransform($tm); + $this->RoundedRectXY($x, $y, $w, $h, $rx, $ry, '1111', 'CNZ', array(), array()); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'RoundedRectXY', array($x, $y, $w, $h, $rx, $ry, '1111', 'CNZ')); + if (!empty($obstyle)) { + $this->RoundedRectXY($x, $y, $w, $h, $rx, $ry, '1111', $obstyle, array(), array()); + } + $this->StopTransform(); + } + break; + } + case 'circle': { + if ($invisible) { + break; + } + $r = (isset($attribs['r']) ? $this->getHTMLUnitToUnits($attribs['r'], 0, $this->svgunit, false) : 0); + $cx = (isset($attribs['cx']) ? $this->getHTMLUnitToUnits($attribs['cx'], 0, $this->svgunit, false) : (isset($attribs['x']) ? $this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false) : 0)); + $cy = (isset($attribs['cy']) ? $this->getHTMLUnitToUnits($attribs['cy'], 0, $this->svgunit, false) : (isset($attribs['y']) ? $this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false) : 0)); + $x = ($cx - $r); + $y = ($cy - $r); + $w = (2 * $r); + $h = $w; + if ($clipping) { + $this->SVGTransform($tm); + $this->Circle($cx, $cy, $r, 0, 360, 'CNZ', array(), array(), 8); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Circle', array($cx, $cy, $r, 0, 360, 'CNZ')); + if (!empty($obstyle)) { + $this->Circle($cx, $cy, $r, 0, 360, $obstyle, array(), array(), 8); + } + $this->StopTransform(); + } + break; + } + case 'ellipse': { + if ($invisible) { + break; + } + $rx = (isset($attribs['rx']) ? $this->getHTMLUnitToUnits($attribs['rx'], 0, $this->svgunit, false) : 0); + $ry = (isset($attribs['ry']) ? $this->getHTMLUnitToUnits($attribs['ry'], 0, $this->svgunit, false) : 0); + $cx = (isset($attribs['cx']) ? $this->getHTMLUnitToUnits($attribs['cx'], 0, $this->svgunit, false) : (isset($attribs['x']) ? $this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false) : 0)); + $cy = (isset($attribs['cy']) ? $this->getHTMLUnitToUnits($attribs['cy'], 0, $this->svgunit, false) : (isset($attribs['y']) ? $this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false) : 0)); + $x = ($cx - $rx); + $y = ($cy - $ry); + $w = (2 * $rx); + $h = (2 * $ry); + if ($clipping) { + $this->SVGTransform($tm); + $this->Ellipse($cx, $cy, $rx, $ry, 0, 0, 360, 'CNZ', array(), array(), 8); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Ellipse', array($cx, $cy, $rx, $ry, 0, 0, 360, 'CNZ')); + if (!empty($obstyle)) { + $this->Ellipse($cx, $cy, $rx, $ry, 0, 0, 360, $obstyle, array(), array(), 8); + } + $this->StopTransform(); + } + break; + } + case 'line': { + if ($invisible) { + break; + } + $x1 = (isset($attribs['x1'])?$this->getHTMLUnitToUnits($attribs['x1'], 0, $this->svgunit, false):0); + $y1 = (isset($attribs['y1'])?$this->getHTMLUnitToUnits($attribs['y1'], 0, $this->svgunit, false):0); + $x2 = (isset($attribs['x2'])?$this->getHTMLUnitToUnits($attribs['x2'], 0, $this->svgunit, false):0); + $y2 = (isset($attribs['y2'])?$this->getHTMLUnitToUnits($attribs['y2'], 0, $this->svgunit, false):0); + $x = $x1; + $y = $y1; + $w = abs($x2 - $x1); + $h = abs($y2 - $y1); + if (!$clipping) { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Line', array($x1, $y1, $x2, $y2)); + $this->Line($x1, $y1, $x2, $y2); + $this->StopTransform(); + } + break; + } + case 'polyline': + case 'polygon': { + if ($invisible) { + break; + } + $points = (isset($attribs['points'])?$attribs['points']:'0 0'); + $points = trim($points); + // note that point may use a complex syntax not covered here + $points = preg_split('/[\,\s]+/si', $points); + if (count($points) < 4) { + break; + } + $p = array(); + $xmin = 2147483647; + $xmax = 0; + $ymin = 2147483647; + $ymax = 0; + foreach ($points as $key => $val) { + $p[$key] = $this->getHTMLUnitToUnits($val, 0, $this->svgunit, false); + if (($key % 2) == 0) { + // X coordinate + $xmin = min($xmin, $p[$key]); + $xmax = max($xmax, $p[$key]); + } else { + // Y coordinate + $ymin = min($ymin, $p[$key]); + $ymax = max($ymax, $p[$key]); + } + } + $x = $xmin; + $y = $ymin; + $w = ($xmax - $xmin); + $h = ($ymax - $ymin); + if ($name == 'polyline') { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'PolyLine', array($p, 'CNZ')); + if (!empty($obstyle)) { + $this->PolyLine($p, $obstyle, array(), array()); + } + $this->StopTransform(); + } else { // polygon + if ($clipping) { + $this->SVGTransform($tm); + $this->Polygon($p, 'CNZ', array(), array(), true); + } else { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h, 'Polygon', array($p, 'CNZ')); + if (!empty($obstyle)) { + $this->Polygon($p, $obstyle, array(), array(), true); + } + $this->StopTransform(); + } + } + break; + } + // image + case 'image': { + if ($invisible) { + break; + } + if (!isset($attribs['xlink:href']) OR empty($attribs['xlink:href'])) { + break; + } + $x = (isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false):0); + $y = (isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false):0); + $w = (isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'], 0, $this->svgunit, false):0); + $h = (isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'], 0, $this->svgunit, false):0); + $img = $attribs['xlink:href']; + if (!$clipping) { + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, $w, $h); + if (preg_match('/^data:image\/[^;]+;base64,/', $img, $m) > 0) { + // embedded image encoded as base64 + $img = '@'.base64_decode(substr($img, strlen($m[0]))); + } else { + // fix image path + if (!TCPDF_STATIC::empty_string($this->svgdir) AND (($img[0] == '.') OR (basename($img) == $img))) { + // replace relative path with full server path + $img = $this->svgdir.'/'.$img; + } + if (($img[0] == '/') AND !empty($_SERVER['DOCUMENT_ROOT']) AND ($_SERVER['DOCUMENT_ROOT'] != '/')) { + $findroot = strpos($img, $_SERVER['DOCUMENT_ROOT']); + if (($findroot === false) OR ($findroot > 1)) { + if (substr($_SERVER['DOCUMENT_ROOT'], -1) == '/') { + $img = substr($_SERVER['DOCUMENT_ROOT'], 0, -1).$img; + } else { + $img = $_SERVER['DOCUMENT_ROOT'].$img; + } + } + } + $img = urldecode($img); + $testscrtype = @parse_url($img); + if (!isset($testscrtype['query']) OR empty($testscrtype['query'])) { + // convert URL to server path + $img = str_replace(K_PATH_URL, K_PATH_MAIN, $img); + } + } + // get image type + $imgtype = TCPDF_IMAGES::getImageFileType($img); + if (($imgtype == 'eps') OR ($imgtype == 'ai')) { + $this->ImageEps($img, $x, $y, $w, $h); + } elseif ($imgtype == 'svg') { + // store SVG vars + $svggradients = $this->svggradients; + $svggradientid = $this->svggradientid; + $svgdefsmode = $this->svgdefsmode; + $svgdefs = $this->svgdefs; + $svgclipmode = $this->svgclipmode; + $svgclippaths = $this->svgclippaths; + $svgcliptm = $this->svgcliptm; + $svgclipid = $this->svgclipid; + $svgtext = $this->svgtext; + $svgtextmode = $this->svgtextmode; + $this->ImageSVG($img, $x, $y, $w, $h); + // restore SVG vars + $this->svggradients = $svggradients; + $this->svggradientid = $svggradientid; + $this->svgdefsmode = $svgdefsmode; + $this->svgdefs = $svgdefs; + $this->svgclipmode = $svgclipmode; + $this->svgclippaths = $svgclippaths; + $this->svgcliptm = $svgcliptm; + $this->svgclipid = $svgclipid; + $this->svgtext = $svgtext; + $this->svgtextmode = $svgtextmode; + } else { + $this->Image($img, $x, $y, $w, $h); + } + $this->StopTransform(); + } + break; + } + // text + case 'text': + case 'tspan': { + if (isset($this->svgtextmode['text-anchor']) AND !empty($this->svgtext)) { + // @TODO: unsupported feature + } + // only basic support - advanced features must be implemented + $this->svgtextmode['invisible'] = $invisible; + if ($invisible) { + break; + } + array_push($this->svgstyles, $svgstyle); + if (isset($attribs['x'])) { + $x = $this->getHTMLUnitToUnits($attribs['x'], 0, $this->svgunit, false); + } elseif ($name == 'tspan') { + $x = $this->x; + } else { + $x = 0; + } + if (isset($attribs['dx'])) { + $x += $this->getHTMLUnitToUnits($attribs['dx'], 0, $this->svgunit, false); + } + if (isset($attribs['y'])) { + $y = $this->getHTMLUnitToUnits($attribs['y'], 0, $this->svgunit, false); + } elseif ($name == 'tspan') { + $y = $this->y; + } else { + $y = 0; + } + if (isset($attribs['dy'])) { + $y += $this->getHTMLUnitToUnits($attribs['dy'], 0, $this->svgunit, false); + } + $svgstyle['text-color'] = $svgstyle['fill']; + $this->svgtext = ''; + if (isset($svgstyle['text-anchor'])) { + $this->svgtextmode['text-anchor'] = $svgstyle['text-anchor']; + } else { + $this->svgtextmode['text-anchor'] = 'start'; + } + if (isset($svgstyle['direction'])) { + if ($svgstyle['direction'] == 'rtl') { + $this->svgtextmode['rtl'] = true; + } else { + $this->svgtextmode['rtl'] = false; + } + } else { + $this->svgtextmode['rtl'] = false; + } + if (isset($svgstyle['stroke']) AND ($svgstyle['stroke'] != 'none') AND isset($svgstyle['stroke-width']) AND ($svgstyle['stroke-width'] > 0)) { + $this->svgtextmode['stroke'] = $this->getHTMLUnitToUnits($svgstyle['stroke-width'], 0, $this->svgunit, false); + } else { + $this->svgtextmode['stroke'] = false; + } + $this->StartTransform(); + $this->SVGTransform($tm); + $obstyle = $this->setSVGStyles($svgstyle, $prev_svgstyle, $x, $y, 1, 1); + $this->x = $x; + $this->y = $y; + break; + } + // use + case 'use': { + if (isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])) { + $svgdefid = substr($attribs['xlink:href'], 1); + if (isset($this->svgdefs[$svgdefid])) { + $use = $this->svgdefs[$svgdefid]; + if (isset($attribs['xlink:href'])) { + unset($attribs['xlink:href']); + } + if (isset($attribs['id'])) { + unset($attribs['id']); + } + if (isset($use['attribs']['x']) AND isset($attribs['x'])) { + $attribs['x'] += $use['attribs']['x']; + } + if (isset($use['attribs']['y']) AND isset($attribs['y'])) { + $attribs['y'] += $use['attribs']['y']; + } + if (empty($attribs['style'])) { + $attribs['style'] = ''; + } + if (!empty($use['attribs']['style'])) { + // merge styles + $attribs['style'] = str_replace(';;',';',';'.$use['attribs']['style'].$attribs['style']); + } + $attribs = array_merge($use['attribs'], $attribs); + $this->startSVGElementHandler($parser, $use['name'], $attribs); + return; + } + } + break; + } + default: { + break; + } + } // end of switch + // process child elements + if (!empty($attribs['child_elements'])) { + $child_elements = $attribs['child_elements']; + unset($attribs['child_elements']); + foreach($child_elements as $child_element) { + if (empty($child_element['attribs']['closing_tag'])) { + $this->startSVGElementHandler('child-tag', $child_element['name'], $child_element['attribs']); + } else { + if (isset($child_element['attribs']['content'])) { + $this->svgtext = $child_element['attribs']['content']; + } + $this->endSVGElementHandler('child-tag', $child_element['name']); + } + } + } + } + + /** + * Sets the closing SVG element handler function for the XML parser. + * @param $parser (resource) The first parameter, parser, is a reference to the XML parser calling the handler. + * @param $name (string) The second parameter, name, contains the name of the element for which this handler is called. If case-folding is in effect for this parser, the element name will be in uppercase letters. + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @protected + */ + protected function endSVGElementHandler($parser, $name) { + $name = $this->removeTagNamespace($name); + if ($this->svgdefsmode AND !in_array($name, array('defs', 'clipPath', 'linearGradient', 'radialGradient', 'stop'))) {; + if (end($this->svgdefs) !== FALSE) { + $last_svgdefs_id = key($this->svgdefs); + if (isset($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'])) { + foreach($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'] as $child_element) { + if (isset($child_element['attribs']['id']) AND ($child_element['name'] == $name)) { + $this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'][$child_element['attribs']['id'].'_CLOSE'] = array('name' => $name, 'attribs' => array('closing_tag' => TRUE, 'content' => $this->svgtext)); + return; + } + } + if ($this->svgdefs[$last_svgdefs_id]['name'] == $name) { + $this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'][$last_svgdefs_id.'_CLOSE'] = array('name' => $name, 'attribs' => array('closing_tag' => TRUE, 'content' => $this->svgtext)); + return; + } + } + } + return; + } + switch($name) { + case 'defs': { + $this->svgdefsmode = false; + break; + } + // clipPath + case 'clipPath': { + $this->svgclipmode = false; + break; + } + case 'svg': { + if (--$this->svg_tag_depth <= 0) { + break; + } + } + case 'g': { + // ungroup: remove last style from array + array_pop($this->svgstyles); + $this->StopTransform(); + break; + } + case 'text': + case 'tspan': { + if ($this->svgtextmode['invisible']) { + // This implementation must be fixed to following the rule: + // If the 'visibility' property is set to hidden on a 'tspan', 'tref' or 'altGlyph' element, then the text is invisible but still takes up space in text layout calculations. + break; + } + // print text + $text = $this->svgtext; + //$text = $this->stringTrim($text); + $textlen = $this->GetStringWidth($text); + if ($this->svgtextmode['text-anchor'] != 'start') { + // check if string is RTL text + if ($this->svgtextmode['text-anchor'] == 'end') { + if ($this->svgtextmode['rtl']) { + $this->x += $textlen; + } else { + $this->x -= $textlen; + } + } elseif ($this->svgtextmode['text-anchor'] == 'middle') { + if ($this->svgtextmode['rtl']) { + $this->x += ($textlen / 2); + } else { + $this->x -= ($textlen / 2); + } + } + } + $textrendermode = $this->textrendermode; + $textstrokewidth = $this->textstrokewidth; + $this->setTextRenderingMode($this->svgtextmode['stroke'], true, false); + if ($name == 'text') { + // store current coordinates + $tmpx = $this->x; + $tmpy = $this->y; + } + // print the text + $this->Cell($textlen, 0, $text, 0, 0, '', false, '', 0, false, 'L', 'T'); + if ($name == 'text') { + // restore coordinates + $this->x = $tmpx; + $this->y = $tmpy; + } + // restore previous rendering mode + $this->textrendermode = $textrendermode; + $this->textstrokewidth = $textstrokewidth; + $this->svgtext = ''; + $this->StopTransform(); + if (!$this->svgdefsmode) { + array_pop($this->svgstyles); + } + break; + } + default: { + break; + } + } + } + + /** + * Sets the character data handler function for the XML parser. + * @param $parser (resource) The first parameter, parser, is a reference to the XML parser calling the handler. + * @param $data (string) The second parameter, data, contains the character data as a string. + * @author Nicola Asuni + * @since 5.0.000 (2010-05-02) + * @protected + */ + protected function segSVGContentHandler($parser, $data) { + $this->svgtext .= $data; + } + + // --- END SVG METHODS ----------------------------------------------------- + +} // END OF TCPDF CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/tcpdf_autoconfig.php b/tcpdf/tcpdf_autoconfig.php new file mode 100644 index 0000000..6ec9ce8 --- /dev/null +++ b/tcpdf/tcpdf_autoconfig.php @@ -0,0 +1,241 @@ +<?php +//============================================================+ +// File name : tcpdf_autoconfig.php +// Version : 1.1.1 +// Begin : 2013-05-16 +// Last Update : 2014-12-18 +// Authors : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2011-2014 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Try to automatically configure some TCPDF +// constants if not defined. +// +//============================================================+ + +/** + * @file + * Try to automatically configure some TCPDF constants if not defined. + * @package com.tecnick.tcpdf + * @version 1.1.1 + */ + +// DOCUMENT_ROOT fix for IIS Webserver +if ((!isset($_SERVER['DOCUMENT_ROOT'])) OR (empty($_SERVER['DOCUMENT_ROOT']))) { + if(isset($_SERVER['SCRIPT_FILENAME'])) { + $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0-strlen($_SERVER['PHP_SELF']))); + } elseif(isset($_SERVER['PATH_TRANSLATED'])) { + $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0-strlen($_SERVER['PHP_SELF']))); + } else { + // define here your DOCUMENT_ROOT path if the previous fails (e.g. '/var/www') + $_SERVER['DOCUMENT_ROOT'] = '/'; + } +} +$_SERVER['DOCUMENT_ROOT'] = str_replace('//', '/', $_SERVER['DOCUMENT_ROOT']); +if (substr($_SERVER['DOCUMENT_ROOT'], -1) != '/') { + $_SERVER['DOCUMENT_ROOT'] .= '/'; +} + +// Load main configuration file only if the K_TCPDF_EXTERNAL_CONFIG constant is set to false. +if (!defined('K_TCPDF_EXTERNAL_CONFIG') OR !K_TCPDF_EXTERNAL_CONFIG) { + // define a list of default config files in order of priority + $tcpdf_config_files = array(dirname(__FILE__).'/config/tcpdf_config.php', '/etc/php-tcpdf/tcpdf_config.php', '/etc/tcpdf/tcpdf_config.php', '/etc/tcpdf_config.php'); + foreach ($tcpdf_config_files as $tcpdf_config) { + if (@file_exists($tcpdf_config) AND is_readable($tcpdf_config)) { + require_once($tcpdf_config); + break; + } + } +} + +if (!defined('K_PATH_MAIN')) { + define ('K_PATH_MAIN', dirname(__FILE__).'/'); +} + +if (!defined('K_PATH_FONTS')) { + define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/'); +} + +if (!defined('K_PATH_URL')) { + $k_path_url = K_PATH_MAIN; // default value for console mode + if (isset($_SERVER['HTTP_HOST']) AND (!empty($_SERVER['HTTP_HOST']))) { + if(isset($_SERVER['HTTPS']) AND (!empty($_SERVER['HTTPS'])) AND (strtolower($_SERVER['HTTPS']) != 'off')) { + $k_path_url = 'https://'; + } else { + $k_path_url = 'http://'; + } + $k_path_url .= $_SERVER['HTTP_HOST']; + $k_path_url .= str_replace( '\\', '/', substr(K_PATH_MAIN, (strlen($_SERVER['DOCUMENT_ROOT']) - 1))); + } + define ('K_PATH_URL', $k_path_url); +} + +if (!defined('K_PATH_IMAGES')) { + $tcpdf_images_dirs = array(K_PATH_MAIN.'examples/images/', K_PATH_MAIN.'images/', '/usr/share/doc/php-tcpdf/examples/images/', '/usr/share/doc/tcpdf/examples/images/', '/usr/share/doc/php/tcpdf/examples/images/', '/var/www/tcpdf/images/', '/var/www/html/tcpdf/images/', '/usr/local/apache2/htdocs/tcpdf/images/', K_PATH_MAIN); + foreach ($tcpdf_images_dirs as $tcpdf_images_path) { + if (@file_exists($tcpdf_images_path)) { + define ('K_PATH_IMAGES', $tcpdf_images_path); + break; + } + } +} + +if (!defined('PDF_HEADER_LOGO')) { + $tcpdf_header_logo = ''; + if (@file_exists(K_PATH_IMAGES.'tcpdf_logo.jpg')) { + $tcpdf_header_logo = 'tcpdf_logo.jpg'; + } + define ('PDF_HEADER_LOGO', $tcpdf_header_logo); +} + +if (!defined('PDF_HEADER_LOGO_WIDTH')) { + if (!empty($tcpdf_header_logo)) { + define ('PDF_HEADER_LOGO_WIDTH', 30); + } else { + define ('PDF_HEADER_LOGO_WIDTH', 0); + } +} + +if (!defined('K_PATH_CACHE')) { + $K_PATH_CACHE = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir(); + if (substr($K_PATH_CACHE, -1) != '/') { + $K_PATH_CACHE .= '/'; + } + define ('K_PATH_CACHE', $K_PATH_CACHE); +} + +if (!defined('K_BLANK_IMAGE')) { + define ('K_BLANK_IMAGE', '_blank.png'); +} + +if (!defined('PDF_PAGE_FORMAT')) { + define ('PDF_PAGE_FORMAT', 'A4'); +} + +if (!defined('PDF_PAGE_ORIENTATION')) { + define ('PDF_PAGE_ORIENTATION', 'P'); +} + +if (!defined('PDF_CREATOR')) { + define ('PDF_CREATOR', 'TCPDF'); +} + +if (!defined('PDF_AUTHOR')) { + define ('PDF_AUTHOR', 'TCPDF'); +} + +if (!defined('PDF_HEADER_TITLE')) { + define ('PDF_HEADER_TITLE', 'TCPDF Example'); +} + +if (!defined('PDF_HEADER_STRING')) { + define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org"); +} + +if (!defined('PDF_UNIT')) { + define ('PDF_UNIT', 'mm'); +} + +if (!defined('PDF_MARGIN_HEADER')) { + define ('PDF_MARGIN_HEADER', 5); +} + +if (!defined('PDF_MARGIN_FOOTER')) { + define ('PDF_MARGIN_FOOTER', 10); +} + +if (!defined('PDF_MARGIN_TOP')) { + define ('PDF_MARGIN_TOP', 27); +} + +if (!defined('PDF_MARGIN_BOTTOM')) { + define ('PDF_MARGIN_BOTTOM', 25); +} + +if (!defined('PDF_MARGIN_LEFT')) { + define ('PDF_MARGIN_LEFT', 15); +} + +if (!defined('PDF_MARGIN_RIGHT')) { + define ('PDF_MARGIN_RIGHT', 15); +} + +if (!defined('PDF_FONT_NAME_MAIN')) { + define ('PDF_FONT_NAME_MAIN', 'helvetica'); +} + +if (!defined('PDF_FONT_SIZE_MAIN')) { + define ('PDF_FONT_SIZE_MAIN', 10); +} + +if (!defined('PDF_FONT_NAME_DATA')) { + define ('PDF_FONT_NAME_DATA', 'helvetica'); +} + +if (!defined('PDF_FONT_SIZE_DATA')) { + define ('PDF_FONT_SIZE_DATA', 8); +} + +if (!defined('PDF_FONT_MONOSPACED')) { + define ('PDF_FONT_MONOSPACED', 'courier'); +} + +if (!defined('PDF_IMAGE_SCALE_RATIO')) { + define ('PDF_IMAGE_SCALE_RATIO', 1.25); +} + +if (!defined('HEAD_MAGNIFICATION')) { + define('HEAD_MAGNIFICATION', 1.1); +} + +if (!defined('K_CELL_HEIGHT_RATIO')) { + define('K_CELL_HEIGHT_RATIO', 1.25); +} + +if (!defined('K_TITLE_MAGNIFICATION')) { + define('K_TITLE_MAGNIFICATION', 1.3); +} + +if (!defined('K_SMALL_RATIO')) { + define('K_SMALL_RATIO', 2/3); +} + +if (!defined('K_THAI_TOPCHARS')) { + define('K_THAI_TOPCHARS', true); +} + +if (!defined('K_TCPDF_CALLS_IN_HTML')) { + define('K_TCPDF_CALLS_IN_HTML', false); +} + +if (!defined('K_TCPDF_THROW_EXCEPTION_ERROR')) { + define('K_TCPDF_THROW_EXCEPTION_ERROR', false); +} + +if (!defined('K_TIMEZONE')) { + define('K_TIMEZONE', @date_default_timezone_get()); +} + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/tcpdf_barcodes_1d.php b/tcpdf/tcpdf_barcodes_1d.php new file mode 100644 index 0000000..0c389ae --- /dev/null +++ b/tcpdf/tcpdf_barcodes_1d.php @@ -0,0 +1,2357 @@ +<?php +//============================================================+ +// File name : tcpdf_barcodes_1d.php +// Version : 1.0.027 +// Begin : 2008-06-09 +// Last Update : 2014-10-20 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2008-2014 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : PHP class to creates array representations for +// common 1D barcodes to be used with TCPDF. +// +//============================================================+ + +/** + * @file + * PHP class to creates array representations for common 1D barcodes to be used with TCPDF. + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.027 + */ + +/** + * @class TCPDFBarcode + * PHP class to creates array representations for common 1D barcodes to be used with TCPDF (http://www.tcpdf.org).<br> + * @package com.tecnick.tcpdf + * @version 1.0.027 + * @author Nicola Asuni + */ +class TCPDFBarcode { + + /** + * Array representation of barcode. + * @protected + */ + protected $barcode_array; + + /** + * This is the class constructor. + * Return an array representations for common 1D barcodes:<ul> + * <li>$arrcode['code'] code to be printed on text label</li> + * <li>$arrcode['maxh'] max barcode height</li> + * <li>$arrcode['maxw'] max barcode width</li> + * <li>$arrcode['bcode'][$k] single bar or space in $k position</li> + * <li>$arrcode['bcode'][$k]['t'] bar type: true = bar, false = space.</li> + * <li>$arrcode['bcode'][$k]['w'] bar width in units.</li> + * <li>$arrcode['bcode'][$k]['h'] bar height in units.</li> + * <li>$arrcode['bcode'][$k]['p'] bar top position (0 = top, 1 = middle)</li></ul> + * @param $code (string) code to print + * @param $type (string) type of barcode: <ul><li>C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.</li><li>C39+ : CODE 39 with checksum</li><li>C39E : CODE 39 EXTENDED</li><li>C39E+ : CODE 39 EXTENDED + CHECKSUM</li><li>C93 : CODE 93 - USS-93</li><li>S25 : Standard 2 of 5</li><li>S25+ : Standard 2 of 5 + CHECKSUM</li><li>I25 : Interleaved 2 of 5</li><li>I25+ : Interleaved 2 of 5 + CHECKSUM</li><li>C128 : CODE 128</li><li>C128A : CODE 128 A</li><li>C128B : CODE 128 B</li><li>C128C : CODE 128 C</li><li>EAN2 : 2-Digits UPC-Based Extension</li><li>EAN5 : 5-Digits UPC-Based Extension</li><li>EAN8 : EAN 8</li><li>EAN13 : EAN 13</li><li>UPCA : UPC-A</li><li>UPCE : UPC-E</li><li>MSI : MSI (Variation of Plessey code)</li><li>MSI+ : MSI + CHECKSUM (modulo 11)</li><li>POSTNET : POSTNET</li><li>PLANET : PLANET</li><li>RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)</li><li>KIX : KIX (Klant index - Customer index)</li><li>IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200</li><li>CODABAR : CODABAR</li><li>CODE11 : CODE 11</li><li>PHARMA : PHARMACODE</li><li>PHARMA2T : PHARMACODE TWO-TRACKS</li></ul> + * @public + */ + public function __construct($code, $type) { + $this->setBarcode($code, $type); + } + + /** + * Return an array representations of barcode. + * @return array + * @public + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Send barcode as SVG image object to the standard output. + * @param $w (int) Minimum width of a single bar in user units. + * @param $h (int) Height of barcode in user units. + * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent). + * @public + */ + public function getBarcodeSVG($w=2, $h=30, $color='black') { + // send headers + $code = $this->getBarcodeSVGcode($w, $h, $color); + header('Content-Type: application/svg+xml'); + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Disposition: inline; filename="'.md5($code).'.svg";'); + //header('Content-Length: '.strlen($code)); + echo $code; + } + + /** + * Return a SVG string representation of barcode. + * @param $w (int) Minimum width of a single bar in user units. + * @param $h (int) Height of barcode in user units. + * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent). + * @return string SVG code. + * @public + */ + public function getBarcodeSVGcode($w=2, $h=30, $color='black') { + // replace table for special characters + $repstr = array("\0" => '', '&' => '&amp;', '<' => '&lt;', '>' => '&gt;'); + $svg = '<'.'?'.'xml version="1.0" standalone="no"'.'?'.'>'."\n"; + $svg .= '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'."\n"; + $svg .= '<svg width="'.round(($this->barcode_array['maxw'] * $w), 3).'" height="'.$h.'" version="1.1" xmlns="http://www.w3.org/2000/svg">'."\n"; + $svg .= "\t".'<desc>'.strtr($this->barcode_array['code'], $repstr).'</desc>'."\n"; + $svg .= "\t".'<g id="bars" fill="'.$color.'" stroke="none">'."\n"; + // print bars + $x = 0; + foreach ($this->barcode_array['bcode'] as $k => $v) { + $bw = round(($v['w'] * $w), 3); + $bh = round(($v['h'] * $h / $this->barcode_array['maxh']), 3); + if ($v['t']) { + $y = round(($v['p'] * $h / $this->barcode_array['maxh']), 3); + // draw a vertical bar + $svg .= "\t\t".'<rect x="'.$x.'" y="'.$y.'" width="'.$bw.'" height="'.$bh.'" />'."\n"; + } + $x += $bw; + } + $svg .= "\t".'</g>'."\n"; + $svg .= '</svg>'."\n"; + return $svg; + } + + /** + * Return an HTML representation of barcode. + * @param $w (int) Width of a single bar element in pixels. + * @param $h (int) Height of a single bar element in pixels. + * @param $color (string) Foreground color for bar elements (background is transparent). + * @return string HTML code. + * @public + */ + public function getBarcodeHTML($w=2, $h=30, $color='black') { + $html = '<div style="font-size:0;position:relative;width:'.($this->barcode_array['maxw'] * $w).'px;height:'.($h).'px;">'."\n"; + // print bars + $x = 0; + foreach ($this->barcode_array['bcode'] as $k => $v) { + $bw = round(($v['w'] * $w), 3); + $bh = round(($v['h'] * $h / $this->barcode_array['maxh']), 3); + if ($v['t']) { + $y = round(($v['p'] * $h / $this->barcode_array['maxh']), 3); + // draw a vertical bar + $html .= '<div style="background-color:'.$color.';width:'.$bw.'px;height:'.$bh.'px;position:absolute;left:'.$x.'px;top:'.$y.'px;">&nbsp;</div>'."\n"; + } + $x += $bw; + } + $html .= '</div>'."\n"; + return $html; + } + + /** + * Send a PNG image representation of barcode (requires GD or Imagick library). + * @param $w (int) Width of a single bar element in pixels. + * @param $h (int) Height of a single bar element in pixels. + * @param $color (array) RGB (0-255) foreground color for bar elements (background is transparent). + * @public + */ + public function getBarcodePNG($w=2, $h=30, $color=array(0,0,0)) { + $data = $this->getBarcodePngData($w, $h, $color); + // send headers + header('Content-Type: image/png'); + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + //header('Content-Length: '.strlen($data)); + echo $data; + } + + /** + * Return a PNG image representation of barcode (requires GD or Imagick library). + * @param $w (int) Width of a single bar element in pixels. + * @param $h (int) Height of a single bar element in pixels. + * @param $color (array) RGB (0-255) foreground color for bar elements (background is transparent). + * @return image or false in case of error. + * @public + */ + public function getBarcodePngData($w=2, $h=30, $color=array(0,0,0)) { + // calculate image size + $width = ($this->barcode_array['maxw'] * $w); + $height = $h; + if (function_exists('imagecreate')) { + // GD library + $imagick = false; + $png = imagecreate($width, $height); + $bgcol = imagecolorallocate($png, 255, 255, 255); + imagecolortransparent($png, $bgcol); + $fgcol = imagecolorallocate($png, $color[0], $color[1], $color[2]); + } elseif (extension_loaded('imagick')) { + $imagick = true; + $bgcol = new imagickpixel('rgb(255,255,255'); + $fgcol = new imagickpixel('rgb('.$color[0].','.$color[1].','.$color[2].')'); + $png = new Imagick(); + $png->newImage($width, $height, 'none', 'png'); + $bar = new imagickdraw(); + $bar->setfillcolor($fgcol); + } else { + return false; + } + // print bars + $x = 0; + foreach ($this->barcode_array['bcode'] as $k => $v) { + $bw = round(($v['w'] * $w), 3); + $bh = round(($v['h'] * $h / $this->barcode_array['maxh']), 3); + if ($v['t']) { + $y = round(($v['p'] * $h / $this->barcode_array['maxh']), 3); + // draw a vertical bar + if ($imagick) { + $bar->rectangle($x, $y, ($x + $bw - 1), ($y + $bh - 1)); + } else { + imagefilledrectangle($png, $x, $y, ($x + $bw - 1), ($y + $bh - 1), $fgcol); + } + } + $x += $bw; + } + if ($imagick) { + $png->drawimage($bar); + return $png; + } else { + ob_start(); + imagepng($png); + $imagedata = ob_get_clean(); + imagedestroy($png); + return $imagedata; + } + } + + /** + * Set the barcode. + * @param $code (string) code to print + * @param $type (string) type of barcode: <ul><li>C39 : CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9.</li><li>C39+ : CODE 39 with checksum</li><li>C39E : CODE 39 EXTENDED</li><li>C39E+ : CODE 39 EXTENDED + CHECKSUM</li><li>C93 : CODE 93 - USS-93</li><li>S25 : Standard 2 of 5</li><li>S25+ : Standard 2 of 5 + CHECKSUM</li><li>I25 : Interleaved 2 of 5</li><li>I25+ : Interleaved 2 of 5 + CHECKSUM</li><li>C128 : CODE 128</li><li>C128A : CODE 128 A</li><li>C128B : CODE 128 B</li><li>C128C : CODE 128 C</li><li>EAN2 : 2-Digits UPC-Based Extension</li><li>EAN5 : 5-Digits UPC-Based Extension</li><li>EAN8 : EAN 8</li><li>EAN13 : EAN 13</li><li>UPCA : UPC-A</li><li>UPCE : UPC-E</li><li>MSI : MSI (Variation of Plessey code)</li><li>MSI+ : MSI + CHECKSUM (modulo 11)</li><li>POSTNET : POSTNET</li><li>PLANET : PLANET</li><li>RMS4CC : RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)</li><li>KIX : KIX (Klant index - Customer index)</li><li>IMB: Intelligent Mail Barcode - Onecode - USPS-B-3200</li><li>IMBPRE: Pre-processed Intelligent Mail Barcode - Onecode - USPS-B-3200, using only F,A,D,T letters</li><li>CODABAR : CODABAR</li><li>CODE11 : CODE 11</li><li>PHARMA : PHARMACODE</li><li>PHARMA2T : PHARMACODE TWO-TRACKS</li></ul> + * @return array barcode array + * @public + */ + public function setBarcode($code, $type) { + switch (strtoupper($type)) { + case 'C39': { // CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. + $arrcode = $this->barcode_code39($code, false, false); + break; + } + case 'C39+': { // CODE 39 with checksum + $arrcode = $this->barcode_code39($code, false, true); + break; + } + case 'C39E': { // CODE 39 EXTENDED + $arrcode = $this->barcode_code39($code, true, false); + break; + } + case 'C39E+': { // CODE 39 EXTENDED + CHECKSUM + $arrcode = $this->barcode_code39($code, true, true); + break; + } + case 'C93': { // CODE 93 - USS-93 + $arrcode = $this->barcode_code93($code); + break; + } + case 'S25': { // Standard 2 of 5 + $arrcode = $this->barcode_s25($code, false); + break; + } + case 'S25+': { // Standard 2 of 5 + CHECKSUM + $arrcode = $this->barcode_s25($code, true); + break; + } + case 'I25': { // Interleaved 2 of 5 + $arrcode = $this->barcode_i25($code, false); + break; + } + case 'I25+': { // Interleaved 2 of 5 + CHECKSUM + $arrcode = $this->barcode_i25($code, true); + break; + } + case 'C128': { // CODE 128 + $arrcode = $this->barcode_c128($code, ''); + break; + } + case 'C128A': { // CODE 128 A + $arrcode = $this->barcode_c128($code, 'A'); + break; + } + case 'C128B': { // CODE 128 B + $arrcode = $this->barcode_c128($code, 'B'); + break; + } + case 'C128C': { // CODE 128 C + $arrcode = $this->barcode_c128($code, 'C'); + break; + } + case 'EAN2': { // 2-Digits UPC-Based Extension + $arrcode = $this->barcode_eanext($code, 2); + break; + } + case 'EAN5': { // 5-Digits UPC-Based Extension + $arrcode = $this->barcode_eanext($code, 5); + break; + } + case 'EAN8': { // EAN 8 + $arrcode = $this->barcode_eanupc($code, 8); + break; + } + case 'EAN13': { // EAN 13 + $arrcode = $this->barcode_eanupc($code, 13); + break; + } + case 'UPCA': { // UPC-A + $arrcode = $this->barcode_eanupc($code, 12); + break; + } + case 'UPCE': { // UPC-E + $arrcode = $this->barcode_eanupc($code, 6); + break; + } + case 'MSI': { // MSI (Variation of Plessey code) + $arrcode = $this->barcode_msi($code, false); + break; + } + case 'MSI+': { // MSI + CHECKSUM (modulo 11) + $arrcode = $this->barcode_msi($code, true); + break; + } + case 'POSTNET': { // POSTNET + $arrcode = $this->barcode_postnet($code, false); + break; + } + case 'PLANET': { // PLANET + $arrcode = $this->barcode_postnet($code, true); + break; + } + case 'RMS4CC': { // RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) + $arrcode = $this->barcode_rms4cc($code, false); + break; + } + case 'KIX': { // KIX (Klant index - Customer index) + $arrcode = $this->barcode_rms4cc($code, true); + break; + } + case 'IMB': { // IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 + $arrcode = $this->barcode_imb($code); + break; + } + case 'IMBPRE': { // IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200- pre-processed + $arrcode = $this->barcode_imb_pre($code); + break; + } + case 'CODABAR': { // CODABAR + $arrcode = $this->barcode_codabar($code); + break; + } + case 'CODE11': { // CODE 11 + $arrcode = $this->barcode_code11($code); + break; + } + case 'PHARMA': { // PHARMACODE + $arrcode = $this->barcode_pharmacode($code); + break; + } + case 'PHARMA2T': { // PHARMACODE TWO-TRACKS + $arrcode = $this->barcode_pharmacode2t($code); + break; + } + default: { + $this->barcode_array = false; + $arrcode = false; + break; + } + } + $this->barcode_array = $arrcode; + } + + /** + * CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. + * General-purpose code in very wide use world-wide + * @param $code (string) code to represent. + * @param $extended (boolean) if true uses the extended mode. + * @param $checksum (boolean) if true add a checksum to the code. + * @return array barcode representation. + * @protected + */ + protected function barcode_code39($code, $extended=false, $checksum=false) { + $chr['0'] = '111331311'; + $chr['1'] = '311311113'; + $chr['2'] = '113311113'; + $chr['3'] = '313311111'; + $chr['4'] = '111331113'; + $chr['5'] = '311331111'; + $chr['6'] = '113331111'; + $chr['7'] = '111311313'; + $chr['8'] = '311311311'; + $chr['9'] = '113311311'; + $chr['A'] = '311113113'; + $chr['B'] = '113113113'; + $chr['C'] = '313113111'; + $chr['D'] = '111133113'; + $chr['E'] = '311133111'; + $chr['F'] = '113133111'; + $chr['G'] = '111113313'; + $chr['H'] = '311113311'; + $chr['I'] = '113113311'; + $chr['J'] = '111133311'; + $chr['K'] = '311111133'; + $chr['L'] = '113111133'; + $chr['M'] = '313111131'; + $chr['N'] = '111131133'; + $chr['O'] = '311131131'; + $chr['P'] = '113131131'; + $chr['Q'] = '111111333'; + $chr['R'] = '311111331'; + $chr['S'] = '113111331'; + $chr['T'] = '111131331'; + $chr['U'] = '331111113'; + $chr['V'] = '133111113'; + $chr['W'] = '333111111'; + $chr['X'] = '131131113'; + $chr['Y'] = '331131111'; + $chr['Z'] = '133131111'; + $chr['-'] = '131111313'; + $chr['.'] = '331111311'; + $chr[' '] = '133111311'; + $chr['$'] = '131313111'; + $chr['/'] = '131311131'; + $chr['+'] = '131113131'; + $chr['%'] = '111313131'; + $chr['*'] = '131131311'; + $code = strtoupper($code); + if ($extended) { + // extended mode + $code = $this->encode_code39_ext($code); + } + if ($code === false) { + return false; + } + if ($checksum) { + // checksum + $code .= $this->checksum_code39($code); + } + // add start and stop codes + $code = '*'.$code.'*'; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $char = $code{$i}; + if(!isset($chr[$char])) { + // invalid character + return false; + } + for ($j = 0; $j < 9; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $chr[$char]{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + // intercharacter gap + $bararray['bcode'][$k] = array('t' => false, 'w' => 1, 'h' => 1, 'p' => 0); + $bararray['maxw'] += 1; + ++$k; + } + return $bararray; + } + + /** + * Encode a string to be used for CODE 39 Extended mode. + * @param $code (string) code to represent. + * @return encoded string. + * @protected + */ + protected function encode_code39_ext($code) { + $encode = array( + chr(0) => '%U', chr(1) => '$A', chr(2) => '$B', chr(3) => '$C', + chr(4) => '$D', chr(5) => '$E', chr(6) => '$F', chr(7) => '$G', + chr(8) => '$H', chr(9) => '$I', chr(10) => '$J', chr(11) => '£K', + chr(12) => '$L', chr(13) => '$M', chr(14) => '$N', chr(15) => '$O', + chr(16) => '$P', chr(17) => '$Q', chr(18) => '$R', chr(19) => '$S', + chr(20) => '$T', chr(21) => '$U', chr(22) => '$V', chr(23) => '$W', + chr(24) => '$X', chr(25) => '$Y', chr(26) => '$Z', chr(27) => '%A', + chr(28) => '%B', chr(29) => '%C', chr(30) => '%D', chr(31) => '%E', + chr(32) => ' ', chr(33) => '/A', chr(34) => '/B', chr(35) => '/C', + chr(36) => '/D', chr(37) => '/E', chr(38) => '/F', chr(39) => '/G', + chr(40) => '/H', chr(41) => '/I', chr(42) => '/J', chr(43) => '/K', + chr(44) => '/L', chr(45) => '-', chr(46) => '.', chr(47) => '/O', + chr(48) => '0', chr(49) => '1', chr(50) => '2', chr(51) => '3', + chr(52) => '4', chr(53) => '5', chr(54) => '6', chr(55) => '7', + chr(56) => '8', chr(57) => '9', chr(58) => '/Z', chr(59) => '%F', + chr(60) => '%G', chr(61) => '%H', chr(62) => '%I', chr(63) => '%J', + chr(64) => '%V', chr(65) => 'A', chr(66) => 'B', chr(67) => 'C', + chr(68) => 'D', chr(69) => 'E', chr(70) => 'F', chr(71) => 'G', + chr(72) => 'H', chr(73) => 'I', chr(74) => 'J', chr(75) => 'K', + chr(76) => 'L', chr(77) => 'M', chr(78) => 'N', chr(79) => 'O', + chr(80) => 'P', chr(81) => 'Q', chr(82) => 'R', chr(83) => 'S', + chr(84) => 'T', chr(85) => 'U', chr(86) => 'V', chr(87) => 'W', + chr(88) => 'X', chr(89) => 'Y', chr(90) => 'Z', chr(91) => '%K', + chr(92) => '%L', chr(93) => '%M', chr(94) => '%N', chr(95) => '%O', + chr(96) => '%W', chr(97) => '+A', chr(98) => '+B', chr(99) => '+C', + chr(100) => '+D', chr(101) => '+E', chr(102) => '+F', chr(103) => '+G', + chr(104) => '+H', chr(105) => '+I', chr(106) => '+J', chr(107) => '+K', + chr(108) => '+L', chr(109) => '+M', chr(110) => '+N', chr(111) => '+O', + chr(112) => '+P', chr(113) => '+Q', chr(114) => '+R', chr(115) => '+S', + chr(116) => '+T', chr(117) => '+U', chr(118) => '+V', chr(119) => '+W', + chr(120) => '+X', chr(121) => '+Y', chr(122) => '+Z', chr(123) => '%P', + chr(124) => '%Q', chr(125) => '%R', chr(126) => '%S', chr(127) => '%T'); + $code_ext = ''; + $clen = strlen($code); + for ($i = 0 ; $i < $clen; ++$i) { + if (ord($code{$i}) > 127) { + return false; + } + $code_ext .= $encode[$code{$i}]; + } + return $code_ext; + } + + /** + * Calculate CODE 39 checksum (modulo 43). + * @param $code (string) code to represent. + * @return char checksum. + * @protected + */ + protected function checksum_code39($code) { + $chars = array( + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%'); + $sum = 0; + $clen = strlen($code); + for ($i = 0 ; $i < $clen; ++$i) { + $k = array_keys($chars, $code{$i}); + $sum += $k[0]; + } + $j = ($sum % 43); + return $chars[$j]; + } + + /** + * CODE 93 - USS-93 + * Compact code similar to Code 39 + * @param $code (string) code to represent. + * @return array barcode representation. + * @protected + */ + protected function barcode_code93($code) { + $chr[48] = '131112'; // 0 + $chr[49] = '111213'; // 1 + $chr[50] = '111312'; // 2 + $chr[51] = '111411'; // 3 + $chr[52] = '121113'; // 4 + $chr[53] = '121212'; // 5 + $chr[54] = '121311'; // 6 + $chr[55] = '111114'; // 7 + $chr[56] = '131211'; // 8 + $chr[57] = '141111'; // 9 + $chr[65] = '211113'; // A + $chr[66] = '211212'; // B + $chr[67] = '211311'; // C + $chr[68] = '221112'; // D + $chr[69] = '221211'; // E + $chr[70] = '231111'; // F + $chr[71] = '112113'; // G + $chr[72] = '112212'; // H + $chr[73] = '112311'; // I + $chr[74] = '122112'; // J + $chr[75] = '132111'; // K + $chr[76] = '111123'; // L + $chr[77] = '111222'; // M + $chr[78] = '111321'; // N + $chr[79] = '121122'; // O + $chr[80] = '131121'; // P + $chr[81] = '212112'; // Q + $chr[82] = '212211'; // R + $chr[83] = '211122'; // S + $chr[84] = '211221'; // T + $chr[85] = '221121'; // U + $chr[86] = '222111'; // V + $chr[87] = '112122'; // W + $chr[88] = '112221'; // X + $chr[89] = '122121'; // Y + $chr[90] = '123111'; // Z + $chr[45] = '121131'; // - + $chr[46] = '311112'; // . + $chr[32] = '311211'; // + $chr[36] = '321111'; // $ + $chr[47] = '112131'; // / + $chr[43] = '113121'; // + + $chr[37] = '211131'; // % + $chr[128] = '121221'; // ($) + $chr[129] = '311121'; // (/) + $chr[130] = '122211'; // (+) + $chr[131] = '312111'; // (%) + $chr[42] = '111141'; // start-stop + $code = strtoupper($code); + $encode = array( + chr(0) => chr(131).'U', chr(1) => chr(128).'A', chr(2) => chr(128).'B', chr(3) => chr(128).'C', + chr(4) => chr(128).'D', chr(5) => chr(128).'E', chr(6) => chr(128).'F', chr(7) => chr(128).'G', + chr(8) => chr(128).'H', chr(9) => chr(128).'I', chr(10) => chr(128).'J', chr(11) => '£K', + chr(12) => chr(128).'L', chr(13) => chr(128).'M', chr(14) => chr(128).'N', chr(15) => chr(128).'O', + chr(16) => chr(128).'P', chr(17) => chr(128).'Q', chr(18) => chr(128).'R', chr(19) => chr(128).'S', + chr(20) => chr(128).'T', chr(21) => chr(128).'U', chr(22) => chr(128).'V', chr(23) => chr(128).'W', + chr(24) => chr(128).'X', chr(25) => chr(128).'Y', chr(26) => chr(128).'Z', chr(27) => chr(131).'A', + chr(28) => chr(131).'B', chr(29) => chr(131).'C', chr(30) => chr(131).'D', chr(31) => chr(131).'E', + chr(32) => ' ', chr(33) => chr(129).'A', chr(34) => chr(129).'B', chr(35) => chr(129).'C', + chr(36) => chr(129).'D', chr(37) => chr(129).'E', chr(38) => chr(129).'F', chr(39) => chr(129).'G', + chr(40) => chr(129).'H', chr(41) => chr(129).'I', chr(42) => chr(129).'J', chr(43) => chr(129).'K', + chr(44) => chr(129).'L', chr(45) => '-', chr(46) => '.', chr(47) => chr(129).'O', + chr(48) => '0', chr(49) => '1', chr(50) => '2', chr(51) => '3', + chr(52) => '4', chr(53) => '5', chr(54) => '6', chr(55) => '7', + chr(56) => '8', chr(57) => '9', chr(58) => chr(129).'Z', chr(59) => chr(131).'F', + chr(60) => chr(131).'G', chr(61) => chr(131).'H', chr(62) => chr(131).'I', chr(63) => chr(131).'J', + chr(64) => chr(131).'V', chr(65) => 'A', chr(66) => 'B', chr(67) => 'C', + chr(68) => 'D', chr(69) => 'E', chr(70) => 'F', chr(71) => 'G', + chr(72) => 'H', chr(73) => 'I', chr(74) => 'J', chr(75) => 'K', + chr(76) => 'L', chr(77) => 'M', chr(78) => 'N', chr(79) => 'O', + chr(80) => 'P', chr(81) => 'Q', chr(82) => 'R', chr(83) => 'S', + chr(84) => 'T', chr(85) => 'U', chr(86) => 'V', chr(87) => 'W', + chr(88) => 'X', chr(89) => 'Y', chr(90) => 'Z', chr(91) => chr(131).'K', + chr(92) => chr(131).'L', chr(93) => chr(131).'M', chr(94) => chr(131).'N', chr(95) => chr(131).'O', + chr(96) => chr(131).'W', chr(97) => chr(130).'A', chr(98) => chr(130).'B', chr(99) => chr(130).'C', + chr(100) => chr(130).'D', chr(101) => chr(130).'E', chr(102) => chr(130).'F', chr(103) => chr(130).'G', + chr(104) => chr(130).'H', chr(105) => chr(130).'I', chr(106) => chr(130).'J', chr(107) => chr(130).'K', + chr(108) => chr(130).'L', chr(109) => chr(130).'M', chr(110) => chr(130).'N', chr(111) => chr(130).'O', + chr(112) => chr(130).'P', chr(113) => chr(130).'Q', chr(114) => chr(130).'R', chr(115) => chr(130).'S', + chr(116) => chr(130).'T', chr(117) => chr(130).'U', chr(118) => chr(130).'V', chr(119) => chr(130).'W', + chr(120) => chr(130).'X', chr(121) => chr(130).'Y', chr(122) => chr(130).'Z', chr(123) => chr(131).'P', + chr(124) => chr(131).'Q', chr(125) => chr(131).'R', chr(126) => chr(131).'S', chr(127) => chr(131).'T'); + $code_ext = ''; + $clen = strlen($code); + for ($i = 0 ; $i < $clen; ++$i) { + if (ord($code{$i}) > 127) { + return false; + } + $code_ext .= $encode[$code{$i}]; + } + // checksum + $code_ext .= $this->checksum_code93($code_ext); + // add start and stop codes + $code = '*'.$code_ext.'*'; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $char = ord($code{$i}); + if(!isset($chr[$char])) { + // invalid character + return false; + } + for ($j = 0; $j < 6; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $chr[$char]{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + $bararray['bcode'][$k] = array('t' => true, 'w' => 1, 'h' => 1, 'p' => 0); + $bararray['maxw'] += 1; + ++$k; + return $bararray; + } + + /** + * Calculate CODE 93 checksum (modulo 47). + * @param $code (string) code to represent. + * @return string checksum code. + * @protected + */ + protected function checksum_code93($code) { + $chars = array( + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%', + '<', '=', '>', '?'); + // translate special characters + $code = strtr($code, chr(128).chr(131).chr(129).chr(130), '<=>?'); + $len = strlen($code); + // calculate check digit C + $p = 1; + $check = 0; + for ($i = ($len - 1); $i >= 0; --$i) { + $k = array_keys($chars, $code{$i}); + $check += ($k[0] * $p); + ++$p; + if ($p > 20) { + $p = 1; + } + } + $check %= 47; + $c = $chars[$check]; + $code .= $c; + // calculate check digit K + $p = 1; + $check = 0; + for ($i = $len; $i >= 0; --$i) { + $k = array_keys($chars, $code{$i}); + $check += ($k[0] * $p); + ++$p; + if ($p > 15) { + $p = 1; + } + } + $check %= 47; + $k = $chars[$check]; + $checksum = $c.$k; + // resto respecial characters + $checksum = strtr($checksum, '<=>?', chr(128).chr(131).chr(129).chr(130)); + return $checksum; + } + + /** + * Checksum for standard 2 of 5 barcodes. + * @param $code (string) code to process. + * @return int checksum. + * @protected + */ + protected function checksum_s25($code) { + $len = strlen($code); + $sum = 0; + for ($i = 0; $i < $len; $i+=2) { + $sum += $code{$i}; + } + $sum *= 3; + for ($i = 1; $i < $len; $i+=2) { + $sum += ($code{$i}); + } + $r = $sum % 10; + if($r > 0) { + $r = (10 - $r); + } + return $r; + } + + /** + * MSI. + * Variation of Plessey code, with similar applications + * Contains digits (0 to 9) and encodes the data only in the width of bars. + * @param $code (string) code to represent. + * @param $checksum (boolean) if true add a checksum to the code (modulo 11) + * @return array barcode representation. + * @protected + */ + protected function barcode_msi($code, $checksum=false) { + $chr['0'] = '100100100100'; + $chr['1'] = '100100100110'; + $chr['2'] = '100100110100'; + $chr['3'] = '100100110110'; + $chr['4'] = '100110100100'; + $chr['5'] = '100110100110'; + $chr['6'] = '100110110100'; + $chr['7'] = '100110110110'; + $chr['8'] = '110100100100'; + $chr['9'] = '110100100110'; + $chr['A'] = '110100110100'; + $chr['B'] = '110100110110'; + $chr['C'] = '110110100100'; + $chr['D'] = '110110100110'; + $chr['E'] = '110110110100'; + $chr['F'] = '110110110110'; + if ($checksum) { + // add checksum + $clen = strlen($code); + $p = 2; + $check = 0; + for ($i = ($clen - 1); $i >= 0; --$i) { + $check += (hexdec($code{$i}) * $p); + ++$p; + if ($p > 7) { + $p = 2; + } + } + $check %= 11; + if ($check > 0) { + $check = 11 - $check; + } + $code .= $check; + } + $seq = '110'; // left guard + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $digit = $code{$i}; + if (!isset($chr[$digit])) { + // invalid character + return false; + } + $seq .= $chr[$digit]; + } + $seq .= '1001'; // right guard + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * Standard 2 of 5 barcodes. + * Used in airline ticket marking, photofinishing + * Contains digits (0 to 9) and encodes the data only in the width of bars. + * @param $code (string) code to represent. + * @param $checksum (boolean) if true add a checksum to the code + * @return array barcode representation. + * @protected + */ + protected function barcode_s25($code, $checksum=false) { + $chr['0'] = '10101110111010'; + $chr['1'] = '11101010101110'; + $chr['2'] = '10111010101110'; + $chr['3'] = '11101110101010'; + $chr['4'] = '10101110101110'; + $chr['5'] = '11101011101010'; + $chr['6'] = '10111011101010'; + $chr['7'] = '10101011101110'; + $chr['8'] = '10101110111010'; + $chr['9'] = '10111010111010'; + if ($checksum) { + // add checksum + $code .= $this->checksum_s25($code); + } + if((strlen($code) % 2) != 0) { + // add leading zero if code-length is odd + $code = '0'.$code; + } + $seq = '11011010'; + $clen = strlen($code); + for ($i = 0; $i < $clen; ++$i) { + $digit = $code{$i}; + if (!isset($chr[$digit])) { + // invalid character + return false; + } + $seq .= $chr[$digit]; + } + $seq .= '1101011'; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * Convert binary barcode sequence to TCPDF barcode array. + * @param $seq (string) barcode as binary sequence. + * @param $bararray (array) barcode array. + * òparam array $bararray TCPDF barcode array to fill up + * @return array barcode representation. + * @protected + */ + protected function binseq_to_array($seq, $bararray) { + $len = strlen($seq); + $w = 0; + $k = 0; + for ($i = 0; $i < $len; ++$i) { + $w += 1; + if (($i == ($len - 1)) OR (($i < ($len - 1)) AND ($seq{$i} != $seq{($i+1)}))) { + if ($seq{$i} == '1') { + $t = true; // bar + } else { + $t = false; // space + } + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + $w = 0; + } + } + return $bararray; + } + + /** + * Interleaved 2 of 5 barcodes. + * Compact numeric code, widely used in industry, air cargo + * Contains digits (0 to 9) and encodes the data in the width of both bars and spaces. + * @param $code (string) code to represent. + * @param $checksum (boolean) if true add a checksum to the code + * @return array barcode representation. + * @protected + */ + protected function barcode_i25($code, $checksum=false) { + $chr['0'] = '11221'; + $chr['1'] = '21112'; + $chr['2'] = '12112'; + $chr['3'] = '22111'; + $chr['4'] = '11212'; + $chr['5'] = '21211'; + $chr['6'] = '12211'; + $chr['7'] = '11122'; + $chr['8'] = '21121'; + $chr['9'] = '12121'; + $chr['A'] = '11'; + $chr['Z'] = '21'; + if ($checksum) { + // add checksum + $code .= $this->checksum_s25($code); + } + if((strlen($code) % 2) != 0) { + // add leading zero if code-length is odd + $code = '0'.$code; + } + // add start and stop codes + $code = 'AA'.strtolower($code).'ZA'; + + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $clen = strlen($code); + for ($i = 0; $i < $clen; $i = ($i + 2)) { + $char_bar = $code{$i}; + $char_space = $code{$i+1}; + if((!isset($chr[$char_bar])) OR (!isset($chr[$char_space]))) { + // invalid character + return false; + } + // create a bar-space sequence + $seq = ''; + $chrlen = strlen($chr[$char_bar]); + for ($s = 0; $s < $chrlen; $s++){ + $seq .= $chr[$char_bar]{$s} . $chr[$char_space]{$s}; + } + $seqlen = strlen($seq); + for ($j = 0; $j < $seqlen; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + return $bararray; + } + + /** + * C128 barcodes. + * Very capable code, excellent density, high reliability; in very wide use world-wide + * @param $code (string) code to represent. + * @param $type (string) barcode type: A, B, C or empty for automatic switch (AUTO mode) + * @return array barcode representation. + * @protected + */ + protected function barcode_c128($code, $type='') { + $chr = array( + '212222', /* 00 */ + '222122', /* 01 */ + '222221', /* 02 */ + '121223', /* 03 */ + '121322', /* 04 */ + '131222', /* 05 */ + '122213', /* 06 */ + '122312', /* 07 */ + '132212', /* 08 */ + '221213', /* 09 */ + '221312', /* 10 */ + '231212', /* 11 */ + '112232', /* 12 */ + '122132', /* 13 */ + '122231', /* 14 */ + '113222', /* 15 */ + '123122', /* 16 */ + '123221', /* 17 */ + '223211', /* 18 */ + '221132', /* 19 */ + '221231', /* 20 */ + '213212', /* 21 */ + '223112', /* 22 */ + '312131', /* 23 */ + '311222', /* 24 */ + '321122', /* 25 */ + '321221', /* 26 */ + '312212', /* 27 */ + '322112', /* 28 */ + '322211', /* 29 */ + '212123', /* 30 */ + '212321', /* 31 */ + '232121', /* 32 */ + '111323', /* 33 */ + '131123', /* 34 */ + '131321', /* 35 */ + '112313', /* 36 */ + '132113', /* 37 */ + '132311', /* 38 */ + '211313', /* 39 */ + '231113', /* 40 */ + '231311', /* 41 */ + '112133', /* 42 */ + '112331', /* 43 */ + '132131', /* 44 */ + '113123', /* 45 */ + '113321', /* 46 */ + '133121', /* 47 */ + '313121', /* 48 */ + '211331', /* 49 */ + '231131', /* 50 */ + '213113', /* 51 */ + '213311', /* 52 */ + '213131', /* 53 */ + '311123', /* 54 */ + '311321', /* 55 */ + '331121', /* 56 */ + '312113', /* 57 */ + '312311', /* 58 */ + '332111', /* 59 */ + '314111', /* 60 */ + '221411', /* 61 */ + '431111', /* 62 */ + '111224', /* 63 */ + '111422', /* 64 */ + '121124', /* 65 */ + '121421', /* 66 */ + '141122', /* 67 */ + '141221', /* 68 */ + '112214', /* 69 */ + '112412', /* 70 */ + '122114', /* 71 */ + '122411', /* 72 */ + '142112', /* 73 */ + '142211', /* 74 */ + '241211', /* 75 */ + '221114', /* 76 */ + '413111', /* 77 */ + '241112', /* 78 */ + '134111', /* 79 */ + '111242', /* 80 */ + '121142', /* 81 */ + '121241', /* 82 */ + '114212', /* 83 */ + '124112', /* 84 */ + '124211', /* 85 */ + '411212', /* 86 */ + '421112', /* 87 */ + '421211', /* 88 */ + '212141', /* 89 */ + '214121', /* 90 */ + '412121', /* 91 */ + '111143', /* 92 */ + '111341', /* 93 */ + '131141', /* 94 */ + '114113', /* 95 */ + '114311', /* 96 */ + '411113', /* 97 */ + '411311', /* 98 */ + '113141', /* 99 */ + '114131', /* 100 */ + '311141', /* 101 */ + '411131', /* 102 */ + '211412', /* 103 START A */ + '211214', /* 104 START B */ + '211232', /* 105 START C */ + '233111', /* STOP */ + '200000' /* END */ + ); + // ASCII characters for code A (ASCII 00 - 95) + $keys_a = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_'; + $keys_a .= chr(0).chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8).chr(9); + $keys_a .= chr(10).chr(11).chr(12).chr(13).chr(14).chr(15).chr(16).chr(17).chr(18).chr(19); + $keys_a .= chr(20).chr(21).chr(22).chr(23).chr(24).chr(25).chr(26).chr(27).chr(28).chr(29); + $keys_a .= chr(30).chr(31); + // ASCII characters for code B (ASCII 32 - 127) + $keys_b = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'.chr(127); + // special codes + $fnc_a = array(241 => 102, 242 => 97, 243 => 96, 244 => 101); + $fnc_b = array(241 => 102, 242 => 97, 243 => 96, 244 => 100); + // array of symbols + $code_data = array(); + // length of the code + $len = strlen($code); + switch(strtoupper($type)) { + case 'A': { // MODE A + $startid = 103; + for ($i = 0; $i < $len; ++$i) { + $char = $code{$i}; + $char_id = ord($char); + if (($char_id >= 241) AND ($char_id <= 244)) { + $code_data[] = $fnc_a[$char_id]; + } elseif (($char_id >= 0) AND ($char_id <= 95)) { + $code_data[] = strpos($keys_a, $char); + } else { + return false; + } + } + break; + } + case 'B': { // MODE B + $startid = 104; + for ($i = 0; $i < $len; ++$i) { + $char = $code{$i}; + $char_id = ord($char); + if (($char_id >= 241) AND ($char_id <= 244)) { + $code_data[] = $fnc_b[$char_id]; + } elseif (($char_id >= 32) AND ($char_id <= 127)) { + $code_data[] = strpos($keys_b, $char); + } else { + return false; + } + } + break; + } + case 'C': { // MODE C + $startid = 105; + if (ord($code[0]) == 241) { + $code_data[] = 102; + $code = substr($code, 1); + --$len; + } + if (($len % 2) != 0) { + // the length must be even + return false; + } + for ($i = 0; $i < $len; $i+=2) { + $chrnum = $code{$i}.$code{$i+1}; + if (preg_match('/([0-9]{2})/', $chrnum) > 0) { + $code_data[] = intval($chrnum); + } else { + return false; + } + } + break; + } + default: { // MODE AUTO + // split code into sequences + $sequence = array(); + // get numeric sequences (if any) + $numseq = array(); + preg_match_all('/([0-9]{4,})/', $code, $numseq, PREG_OFFSET_CAPTURE); + if (isset($numseq[1]) AND !empty($numseq[1])) { + $end_offset = 0; + foreach ($numseq[1] as $val) { + $offset = $val[1]; + if ($offset > $end_offset) { + // non numeric sequence + $sequence = array_merge($sequence, $this->get128ABsequence(substr($code, $end_offset, ($offset - $end_offset)))); + } + // numeric sequence + $slen = strlen($val[0]); + if (($slen % 2) != 0) { + // the length must be even + --$slen; + } + $sequence[] = array('C', substr($code, $offset, $slen), $slen); + $end_offset = $offset + $slen; + } + if ($end_offset < $len) { + $sequence = array_merge($sequence, $this->get128ABsequence(substr($code, $end_offset))); + } + } else { + // text code (non C mode) + $sequence = array_merge($sequence, $this->get128ABsequence($code)); + } + // process the sequence + foreach ($sequence as $key => $seq) { + switch($seq[0]) { + case 'A': { + if ($key == 0) { + $startid = 103; + } elseif ($sequence[($key - 1)][0] != 'A') { + if (($seq[2] == 1) AND ($key > 0) AND ($sequence[($key - 1)][0] == 'B') AND (!isset($sequence[($key - 1)][3]))) { + // single character shift + $code_data[] = 98; + // mark shift + $sequence[$key][3] = true; + } elseif (!isset($sequence[($key - 1)][3])) { + $code_data[] = 101; + } + } + for ($i = 0; $i < $seq[2]; ++$i) { + $char = $seq[1]{$i}; + $char_id = ord($char); + if (($char_id >= 241) AND ($char_id <= 244)) { + $code_data[] = $fnc_a[$char_id]; + } else { + $code_data[] = strpos($keys_a, $char); + } + } + break; + } + case 'B': { + if ($key == 0) { + $tmpchr = ord($seq[1][0]); + if (($seq[2] == 1) AND ($tmpchr >= 241) AND ($tmpchr <= 244) AND isset($sequence[($key + 1)]) AND ($sequence[($key + 1)][0] != 'B')) { + switch ($sequence[($key + 1)][0]) { + case 'A': { + $startid = 103; + $sequence[$key][0] = 'A'; + $code_data[] = $fnc_a[$tmpchr]; + break; + } + case 'C': { + $startid = 105; + $sequence[$key][0] = 'C'; + $code_data[] = $fnc_a[$tmpchr]; + break; + } + } + break; + } else { + $startid = 104; + } + } elseif ($sequence[($key - 1)][0] != 'B') { + if (($seq[2] == 1) AND ($key > 0) AND ($sequence[($key - 1)][0] == 'A') AND (!isset($sequence[($key - 1)][3]))) { + // single character shift + $code_data[] = 98; + // mark shift + $sequence[$key][3] = true; + } elseif (!isset($sequence[($key - 1)][3])) { + $code_data[] = 100; + } + } + for ($i = 0; $i < $seq[2]; ++$i) { + $char = $seq[1]{$i}; + $char_id = ord($char); + if (($char_id >= 241) AND ($char_id <= 244)) { + $code_data[] = $fnc_b[$char_id]; + } else { + $code_data[] = strpos($keys_b, $char); + } + } + break; + } + case 'C': { + if ($key == 0) { + $startid = 105; + } elseif ($sequence[($key - 1)][0] != 'C') { + $code_data[] = 99; + } + for ($i = 0; $i < $seq[2]; $i+=2) { + $chrnum = $seq[1]{$i}.$seq[1]{$i+1}; + $code_data[] = intval($chrnum); + } + break; + } + } + } + } + } + // calculate check character + $sum = $startid; + foreach ($code_data as $key => $val) { + $sum += ($val * ($key + 1)); + } + // add check character + $code_data[] = ($sum % 103); + // add stop sequence + $code_data[] = 106; + $code_data[] = 107; + // add start code at the beginning + array_unshift($code_data, $startid); + // build barcode array + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + foreach ($code_data as $val) { + $seq = $chr[$val]; + for ($j = 0; $j < 6; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + } + } + return $bararray; + } + + /** + * Split text code in A/B sequence for 128 code + * @param $code (string) code to split. + * @return array sequence + * @protected + */ + protected function get128ABsequence($code) { + $len = strlen($code); + $sequence = array(); + // get A sequences (if any) + $numseq = array(); + preg_match_all('/([\0-\31])/', $code, $numseq, PREG_OFFSET_CAPTURE); + if (isset($numseq[1]) AND !empty($numseq[1])) { + $end_offset = 0; + foreach ($numseq[1] as $val) { + $offset = $val[1]; + if ($offset > $end_offset) { + // B sequence + $sequence[] = array('B', substr($code, $end_offset, ($offset - $end_offset)), ($offset - $end_offset)); + } + // A sequence + $slen = strlen($val[0]); + $sequence[] = array('A', substr($code, $offset, $slen), $slen); + $end_offset = $offset + $slen; + } + if ($end_offset < $len) { + $sequence[] = array('B', substr($code, $end_offset), ($len - $end_offset)); + } + } else { + // only B sequence + $sequence[] = array('B', $code, $len); + } + return $sequence; + } + + /** + * EAN13 and UPC-A barcodes. + * EAN13: European Article Numbering international retail product code + * UPC-A: Universal product code seen on almost all retail products in the USA and Canada + * UPC-E: Short version of UPC symbol + * @param $code (string) code to represent. + * @param $len (string) barcode type: 6 = UPC-E, 8 = EAN8, 13 = EAN13, 12 = UPC-A + * @return array barcode representation. + * @protected + */ + protected function barcode_eanupc($code, $len=13) { + $upce = false; + if ($len == 6) { + $len = 12; // UPC-A + $upce = true; // UPC-E mode + } + $data_len = $len - 1; + //Padding + $code = str_pad($code, $data_len, '0', STR_PAD_LEFT); + $code_len = strlen($code); + // calculate check digit + $sum_a = 0; + for ($i = 1; $i < $data_len; $i+=2) { + $sum_a += $code{$i}; + } + if ($len > 12) { + $sum_a *= 3; + } + $sum_b = 0; + for ($i = 0; $i < $data_len; $i+=2) { + $sum_b += ($code{$i}); + } + if ($len < 13) { + $sum_b *= 3; + } + $r = ($sum_a + $sum_b) % 10; + if($r > 0) { + $r = (10 - $r); + } + if ($code_len == $data_len) { + // add check digit + $code .= $r; + } elseif ($r !== intval($code{$data_len})) { + // wrong checkdigit + return false; + } + if ($len == 12) { + // UPC-A + $code = '0'.$code; + ++$len; + } + if ($upce) { + // convert UPC-A to UPC-E + $tmp = substr($code, 4, 3); + if (($tmp == '000') OR ($tmp == '100') OR ($tmp == '200')) { + // manufacturer code ends in 000, 100, or 200 + $upce_code = substr($code, 2, 2).substr($code, 9, 3).substr($code, 4, 1); + } else { + $tmp = substr($code, 5, 2); + if ($tmp == '00') { + // manufacturer code ends in 00 + $upce_code = substr($code, 2, 3).substr($code, 10, 2).'3'; + } else { + $tmp = substr($code, 6, 1); + if ($tmp == '0') { + // manufacturer code ends in 0 + $upce_code = substr($code, 2, 4).substr($code, 11, 1).'4'; + } else { + // manufacturer code does not end in zero + $upce_code = substr($code, 2, 5).substr($code, 11, 1); + } + } + } + } + //Convert digits to bars + $codes = array( + 'A'=>array( // left odd parity + '0'=>'0001101', + '1'=>'0011001', + '2'=>'0010011', + '3'=>'0111101', + '4'=>'0100011', + '5'=>'0110001', + '6'=>'0101111', + '7'=>'0111011', + '8'=>'0110111', + '9'=>'0001011'), + 'B'=>array( // left even parity + '0'=>'0100111', + '1'=>'0110011', + '2'=>'0011011', + '3'=>'0100001', + '4'=>'0011101', + '5'=>'0111001', + '6'=>'0000101', + '7'=>'0010001', + '8'=>'0001001', + '9'=>'0010111'), + 'C'=>array( // right + '0'=>'1110010', + '1'=>'1100110', + '2'=>'1101100', + '3'=>'1000010', + '4'=>'1011100', + '5'=>'1001110', + '6'=>'1010000', + '7'=>'1000100', + '8'=>'1001000', + '9'=>'1110100') + ); + $parities = array( + '0'=>array('A','A','A','A','A','A'), + '1'=>array('A','A','B','A','B','B'), + '2'=>array('A','A','B','B','A','B'), + '3'=>array('A','A','B','B','B','A'), + '4'=>array('A','B','A','A','B','B'), + '5'=>array('A','B','B','A','A','B'), + '6'=>array('A','B','B','B','A','A'), + '7'=>array('A','B','A','B','A','B'), + '8'=>array('A','B','A','B','B','A'), + '9'=>array('A','B','B','A','B','A') + ); + $upce_parities = array(); + $upce_parities[0] = array( + '0'=>array('B','B','B','A','A','A'), + '1'=>array('B','B','A','B','A','A'), + '2'=>array('B','B','A','A','B','A'), + '3'=>array('B','B','A','A','A','B'), + '4'=>array('B','A','B','B','A','A'), + '5'=>array('B','A','A','B','B','A'), + '6'=>array('B','A','A','A','B','B'), + '7'=>array('B','A','B','A','B','A'), + '8'=>array('B','A','B','A','A','B'), + '9'=>array('B','A','A','B','A','B') + ); + $upce_parities[1] = array( + '0'=>array('A','A','A','B','B','B'), + '1'=>array('A','A','B','A','B','B'), + '2'=>array('A','A','B','B','A','B'), + '3'=>array('A','A','B','B','B','A'), + '4'=>array('A','B','A','A','B','B'), + '5'=>array('A','B','B','A','A','B'), + '6'=>array('A','B','B','B','A','A'), + '7'=>array('A','B','A','B','A','B'), + '8'=>array('A','B','A','B','B','A'), + '9'=>array('A','B','B','A','B','A') + ); + $k = 0; + $seq = '101'; // left guard bar + if ($upce) { + $bararray = array('code' => $upce_code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $p = $upce_parities[$code[1]][$r]; + for ($i = 0; $i < 6; ++$i) { + $seq .= $codes[$p[$i]][$upce_code{$i}]; + } + $seq .= '010101'; // right guard bar + } else { + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $half_len = intval(ceil($len / 2)); + if ($len == 8) { + for ($i = 0; $i < $half_len; ++$i) { + $seq .= $codes['A'][$code{$i}]; + } + } else { + $p = $parities[$code[0]]; + for ($i = 1; $i < $half_len; ++$i) { + $seq .= $codes[$p[$i-1]][$code{$i}]; + } + } + $seq .= '01010'; // center guard bar + for ($i = $half_len; $i < $len; ++$i) { + $seq .= $codes['C'][$code{$i}]; + } + $seq .= '101'; // right guard bar + } + $clen = strlen($seq); + $w = 0; + for ($i = 0; $i < $clen; ++$i) { + $w += 1; + if (($i == ($clen - 1)) OR (($i < ($clen - 1)) AND ($seq{$i} != $seq{($i+1)}))) { + if ($seq{$i} == '1') { + $t = true; // bar + } else { + $t = false; // space + } + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + $w = 0; + } + } + return $bararray; + } + + /** + * UPC-Based Extensions + * 2-Digit Ext.: Used to indicate magazines and newspaper issue numbers + * 5-Digit Ext.: Used to mark suggested retail price of books + * @param $code (string) code to represent. + * @param $len (string) barcode type: 2 = 2-Digit, 5 = 5-Digit + * @return array barcode representation. + * @protected + */ + protected function barcode_eanext($code, $len=5) { + //Padding + $code = str_pad($code, $len, '0', STR_PAD_LEFT); + // calculate check digit + if ($len == 2) { + $r = $code % 4; + } elseif ($len == 5) { + $r = (3 * ($code[0] + $code[2] + $code[4])) + (9 * ($code[1] + $code[3])); + $r %= 10; + } else { + return false; + } + //Convert digits to bars + $codes = array( + 'A'=>array( // left odd parity + '0'=>'0001101', + '1'=>'0011001', + '2'=>'0010011', + '3'=>'0111101', + '4'=>'0100011', + '5'=>'0110001', + '6'=>'0101111', + '7'=>'0111011', + '8'=>'0110111', + '9'=>'0001011'), + 'B'=>array( // left even parity + '0'=>'0100111', + '1'=>'0110011', + '2'=>'0011011', + '3'=>'0100001', + '4'=>'0011101', + '5'=>'0111001', + '6'=>'0000101', + '7'=>'0010001', + '8'=>'0001001', + '9'=>'0010111') + ); + $parities = array(); + $parities[2] = array( + '0'=>array('A','A'), + '1'=>array('A','B'), + '2'=>array('B','A'), + '3'=>array('B','B') + ); + $parities[5] = array( + '0'=>array('B','B','A','A','A'), + '1'=>array('B','A','B','A','A'), + '2'=>array('B','A','A','B','A'), + '3'=>array('B','A','A','A','B'), + '4'=>array('A','B','B','A','A'), + '5'=>array('A','A','B','B','A'), + '6'=>array('A','A','A','B','B'), + '7'=>array('A','B','A','B','A'), + '8'=>array('A','B','A','A','B'), + '9'=>array('A','A','B','A','B') + ); + $p = $parities[$len][$r]; + $seq = '1011'; // left guard bar + $seq .= $codes[$p[0]][$code[0]]; + for ($i = 1; $i < $len; ++$i) { + $seq .= '01'; // separator + $seq .= $codes[$p[$i]][$code{$i}]; + } + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * POSTNET and PLANET barcodes. + * Used by U.S. Postal Service for automated mail sorting + * @param $code (string) zip code to represent. Must be a string containing a zip code of the form DDDDD or DDDDD-DDDD. + * @param $planet (boolean) if true print the PLANET barcode, otherwise print POSTNET + * @return array barcode representation. + * @protected + */ + protected function barcode_postnet($code, $planet=false) { + // bar length + if ($planet) { + $barlen = Array( + 0 => Array(1,1,2,2,2), + 1 => Array(2,2,2,1,1), + 2 => Array(2,2,1,2,1), + 3 => Array(2,2,1,1,2), + 4 => Array(2,1,2,2,1), + 5 => Array(2,1,2,1,2), + 6 => Array(2,1,1,2,2), + 7 => Array(1,2,2,2,1), + 8 => Array(1,2,2,1,2), + 9 => Array(1,2,1,2,2) + ); + } else { + $barlen = Array( + 0 => Array(2,2,1,1,1), + 1 => Array(1,1,1,2,2), + 2 => Array(1,1,2,1,2), + 3 => Array(1,1,2,2,1), + 4 => Array(1,2,1,1,2), + 5 => Array(1,2,1,2,1), + 6 => Array(1,2,2,1,1), + 7 => Array(2,1,1,1,2), + 8 => Array(2,1,1,2,1), + 9 => Array(2,1,2,1,1) + ); + } + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 2, 'bcode' => array()); + $k = 0; + $code = str_replace('-', '', $code); + $code = str_replace(' ', '', $code); + $len = strlen($code); + // calculate checksum + $sum = 0; + for ($i = 0; $i < $len; ++$i) { + $sum += intval($code{$i}); + } + $chkd = ($sum % 10); + if($chkd > 0) { + $chkd = (10 - $chkd); + } + $code .= $chkd; + $len = strlen($code); + // start bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + for ($i = 0; $i < $len; ++$i) { + for ($j = 0; $j < 5; ++$j) { + $h = $barlen[$code{$i}][$j]; + $p = floor(1 / $h); + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + } + // end bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 1; + return $bararray; + } + + /** + * RMS4CC - CBC - KIX + * RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) - KIX (Klant index - Customer index) + * RM4SCC is the name of the barcode symbology used by the Royal Mail for its Cleanmail service. + * @param $code (string) code to print + * @param $kix (boolean) if true prints the KIX variation (doesn't use the start and end symbols, and the checksum) - in this case the house number must be sufficed with an X and placed at the end of the code. + * @return array barcode representation. + * @protected + */ + protected function barcode_rms4cc($code, $kix=false) { + $notkix = !$kix; + // bar mode + // 1 = pos 1, length 2 + // 2 = pos 1, length 3 + // 3 = pos 2, length 1 + // 4 = pos 2, length 2 + $barmode = array( + '0' => array(3,3,2,2), + '1' => array(3,4,1,2), + '2' => array(3,4,2,1), + '3' => array(4,3,1,2), + '4' => array(4,3,2,1), + '5' => array(4,4,1,1), + '6' => array(3,1,4,2), + '7' => array(3,2,3,2), + '8' => array(3,2,4,1), + '9' => array(4,1,3,2), + 'A' => array(4,1,4,1), + 'B' => array(4,2,3,1), + 'C' => array(3,1,2,4), + 'D' => array(3,2,1,4), + 'E' => array(3,2,2,3), + 'F' => array(4,1,1,4), + 'G' => array(4,1,2,3), + 'H' => array(4,2,1,3), + 'I' => array(1,3,4,2), + 'J' => array(1,4,3,2), + 'K' => array(1,4,4,1), + 'L' => array(2,3,3,2), + 'M' => array(2,3,4,1), + 'N' => array(2,4,3,1), + 'O' => array(1,3,2,4), + 'P' => array(1,4,1,4), + 'Q' => array(1,4,2,3), + 'R' => array(2,3,1,4), + 'S' => array(2,3,2,3), + 'T' => array(2,4,1,3), + 'U' => array(1,1,4,4), + 'V' => array(1,2,3,4), + 'W' => array(1,2,4,3), + 'X' => array(2,1,3,4), + 'Y' => array(2,1,4,3), + 'Z' => array(2,2,3,3) + ); + $code = strtoupper($code); + $len = strlen($code); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 3, 'bcode' => array()); + if ($notkix) { + // table for checksum calculation (row,col) + $checktable = array( + '0' => array(1,1), + '1' => array(1,2), + '2' => array(1,3), + '3' => array(1,4), + '4' => array(1,5), + '5' => array(1,0), + '6' => array(2,1), + '7' => array(2,2), + '8' => array(2,3), + '9' => array(2,4), + 'A' => array(2,5), + 'B' => array(2,0), + 'C' => array(3,1), + 'D' => array(3,2), + 'E' => array(3,3), + 'F' => array(3,4), + 'G' => array(3,5), + 'H' => array(3,0), + 'I' => array(4,1), + 'J' => array(4,2), + 'K' => array(4,3), + 'L' => array(4,4), + 'M' => array(4,5), + 'N' => array(4,0), + 'O' => array(5,1), + 'P' => array(5,2), + 'Q' => array(5,3), + 'R' => array(5,4), + 'S' => array(5,5), + 'T' => array(5,0), + 'U' => array(0,1), + 'V' => array(0,2), + 'W' => array(0,3), + 'X' => array(0,4), + 'Y' => array(0,5), + 'Z' => array(0,0) + ); + $row = 0; + $col = 0; + for ($i = 0; $i < $len; ++$i) { + $row += $checktable[$code{$i}][0]; + $col += $checktable[$code{$i}][1]; + } + $row %= 6; + $col %= 6; + $chk = array_keys($checktable, array($row,$col)); + $code .= $chk[0]; + ++$len; + } + $k = 0; + if ($notkix) { + // start bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + for ($i = 0; $i < $len; ++$i) { + for ($j = 0; $j < 4; ++$j) { + switch ($barmode[$code{$i}][$j]) { + case 1: { + $p = 0; + $h = 2; + break; + } + case 2: { + $p = 0; + $h = 3; + break; + } + case 3: { + $p = 1; + $h = 1; + break; + } + case 4: { + $p = 1; + $h = 2; + break; + } + } + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + } + if ($notkix) { + // stop bar + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => 3, 'p' => 0); + $bararray['maxw'] += 1; + } + return $bararray; + } + + /** + * CODABAR barcodes. + * Older code often used in library systems, sometimes in blood banks + * @param $code (string) code to represent. + * @return array barcode representation. + * @protected + */ + protected function barcode_codabar($code) { + $chr = array( + '0' => '11111221', + '1' => '11112211', + '2' => '11121121', + '3' => '22111111', + '4' => '11211211', + '5' => '21111211', + '6' => '12111121', + '7' => '12112111', + '8' => '12211111', + '9' => '21121111', + '-' => '11122111', + '$' => '11221111', + ':' => '21112121', + '/' => '21211121', + '.' => '21212111', + '+' => '11222221', + 'A' => '11221211', + 'B' => '12121121', + 'C' => '11121221', + 'D' => '11122211' + ); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $w = 0; + $seq = ''; + $code = 'A'.strtoupper($code).'A'; + $len = strlen($code); + for ($i = 0; $i < $len; ++$i) { + if (!isset($chr[$code{$i}])) { + return false; + } + $seq = $chr[$code{$i}]; + for ($j = 0; $j < 8; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + return $bararray; + } + + /** + * CODE11 barcodes. + * Used primarily for labeling telecommunications equipment + * @param $code (string) code to represent. + * @return array barcode representation. + * @protected + */ + protected function barcode_code11($code) { + $chr = array( + '0' => '111121', + '1' => '211121', + '2' => '121121', + '3' => '221111', + '4' => '112121', + '5' => '212111', + '6' => '122111', + '7' => '111221', + '8' => '211211', + '9' => '211111', + '-' => '112111', + 'S' => '112211' + ); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + $k = 0; + $w = 0; + $seq = ''; + $len = strlen($code); + // calculate check digit C + $p = 1; + $check = 0; + for ($i = ($len - 1); $i >= 0; --$i) { + $digit = $code{$i}; + if ($digit == '-') { + $dval = 10; + } else { + $dval = intval($digit); + } + $check += ($dval * $p); + ++$p; + if ($p > 10) { + $p = 1; + } + } + $check %= 11; + if ($check == 10) { + $check = '-'; + } + $code .= $check; + if ($len > 10) { + // calculate check digit K + $p = 1; + $check = 0; + for ($i = $len; $i >= 0; --$i) { + $digit = $code{$i}; + if ($digit == '-') { + $dval = 10; + } else { + $dval = intval($digit); + } + $check += ($dval * $p); + ++$p; + if ($p > 9) { + $p = 1; + } + } + $check %= 11; + $code .= $check; + ++$len; + } + $code = 'S'.$code.'S'; + $len += 3; + for ($i = 0; $i < $len; ++$i) { + if (!isset($chr[$code{$i}])) { + return false; + } + $seq = $chr[$code{$i}]; + for ($j = 0; $j < 6; ++$j) { + if (($j % 2) == 0) { + $t = true; // bar + } else { + $t = false; // space + } + $w = $seq{$j}; + $bararray['bcode'][$k] = array('t' => $t, 'w' => $w, 'h' => 1, 'p' => 0); + $bararray['maxw'] += $w; + ++$k; + } + } + return $bararray; + } + + /** + * Pharmacode + * Contains digits (0 to 9) + * @param $code (string) code to represent. + * @return array barcode representation. + * @protected + */ + protected function barcode_pharmacode($code) { + $seq = ''; + $code = intval($code); + while ($code > 0) { + if (($code % 2) == 0) { + $seq .= '11100'; + $code -= 2; + } else { + $seq .= '100'; + $code -= 1; + } + $code /= 2; + } + $seq = substr($seq, 0, -2); + $seq = strrev($seq); + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 1, 'bcode' => array()); + return $this->binseq_to_array($seq, $bararray); + } + + /** + * Pharmacode two-track + * Contains digits (0 to 9) + * @param $code (string) code to represent. + * @return array barcode representation. + * @protected + */ + protected function barcode_pharmacode2t($code) { + $seq = ''; + $code = intval($code); + do { + switch ($code % 3) { + case 0: { + $seq .= '3'; + $code = ($code - 3) / 3; + break; + } + case 1: { + $seq .= '1'; + $code = ($code - 1) / 3; + break; + } + case 2: { + $seq .= '2'; + $code = ($code - 2) / 3; + break; + } + } + } while($code != 0); + $seq = strrev($seq); + $k = 0; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 2, 'bcode' => array()); + $len = strlen($seq); + for ($i = 0; $i < $len; ++$i) { + switch ($seq{$i}) { + case '1': { + $p = 1; + $h = 1; + break; + } + case '2': { + $p = 0; + $h = 1; + break; + } + case '3': { + $p = 0; + $h = 2; + break; + } + } + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + unset($bararray['bcode'][($k - 1)]); + --$bararray['maxw']; + return $bararray; + } + + /** + * IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 + * (requires PHP bcmath extension) + * Intelligent Mail barcode is a 65-bar code for use on mail in the United States. + * The fields are described as follows:<ul><li>The Barcode Identifier shall be assigned by USPS to encode the presort identification that is currently printed in human readable form on the optional endorsement line (OEL) as well as for future USPS use. This shall be two digits, with the second digit in the range of 0–4. The allowable encoding ranges shall be 00–04, 10–14, 20–24, 30–34, 40–44, 50–54, 60–64, 70–74, 80–84, and 90–94.</li><li>The Service Type Identifier shall be assigned by USPS for any combination of services requested on the mailpiece. The allowable encoding range shall be 000http://it2.php.net/manual/en/function.dechex.php–999. Each 3-digit value shall correspond to a particular mail class with a particular combination of service(s). Each service program, such as OneCode Confirm and OneCode ACS, shall provide the list of Service Type Identifier values.</li><li>The Mailer or Customer Identifier shall be assigned by USPS as a unique, 6 or 9 digit number that identifies a business entity. The allowable encoding range for the 6 digit Mailer ID shall be 000000- 899999, while the allowable encoding range for the 9 digit Mailer ID shall be 900000000-999999999.</li><li>The Serial or Sequence Number shall be assigned by the mailer for uniquely identifying and tracking mailpieces. The allowable encoding range shall be 000000000–999999999 when used with a 6 digit Mailer ID and 000000-999999 when used with a 9 digit Mailer ID. e. The Delivery Point ZIP Code shall be assigned by the mailer for routing the mailpiece. This shall replace POSTNET for routing the mailpiece to its final delivery point. The length may be 0, 5, 9, or 11 digits. The allowable encoding ranges shall be no ZIP Code, 00000–99999, 000000000–999999999, and 00000000000–99999999999.</li></ul> + * @param $code (string) code to print, separate the ZIP (routing code) from the rest using a minus char '-' (BarcodeID_ServiceTypeID_MailerID_SerialNumber-RoutingCode) + * @return array barcode representation. + * @protected + */ + protected function barcode_imb($code) { + $asc_chr = array(4,0,2,6,3,5,1,9,8,7,1,2,0,6,4,8,2,9,5,3,0,1,3,7,4,6,8,9,2,0,5,1,9,4,3,8,6,7,1,2,4,3,9,5,7,8,3,0,2,1,4,0,9,1,7,0,2,4,6,3,7,1,9,5,8); + $dsc_chr = array(7,1,9,5,8,0,2,4,6,3,5,8,9,7,3,0,6,1,7,4,6,8,9,2,5,1,7,5,4,3,8,7,6,0,2,5,4,9,3,0,1,6,8,2,0,4,5,9,6,7,5,2,6,3,8,5,1,9,8,7,4,0,2,6,3); + $asc_pos = array(3,0,8,11,1,12,8,11,10,6,4,12,2,7,9,6,7,9,2,8,4,0,12,7,10,9,0,7,10,5,7,9,6,8,2,12,1,4,2,0,1,5,4,6,12,1,0,9,4,7,5,10,2,6,9,11,2,12,6,7,5,11,0,3,2); + $dsc_pos = array(2,10,12,5,9,1,5,4,3,9,11,5,10,1,6,3,4,1,10,0,2,11,8,6,1,12,3,8,6,4,4,11,0,6,1,9,11,5,3,7,3,10,7,11,8,2,10,3,5,8,0,3,12,11,8,4,5,1,3,0,7,12,9,8,10); + $code_arr = explode('-', $code); + $tracking_number = $code_arr[0]; + if (isset($code_arr[1])) { + $routing_code = $code_arr[1]; + } else { + $routing_code = ''; + } + // Conversion of Routing Code + switch (strlen($routing_code)) { + case 0: { + $binary_code = 0; + break; + } + case 5: { + $binary_code = bcadd($routing_code, '1'); + break; + } + case 9: { + $binary_code = bcadd($routing_code, '100001'); + break; + } + case 11: { + $binary_code = bcadd($routing_code, '1000100001'); + break; + } + default: { + return false; + break; + } + } + $binary_code = bcmul($binary_code, 10); + $binary_code = bcadd($binary_code, $tracking_number[0]); + $binary_code = bcmul($binary_code, 5); + $binary_code = bcadd($binary_code, $tracking_number[1]); + $binary_code .= substr($tracking_number, 2, 18); + // convert to hexadecimal + $binary_code = $this->dec_to_hex($binary_code); + // pad to get 13 bytes + $binary_code = str_pad($binary_code, 26, '0', STR_PAD_LEFT); + // convert string to array of bytes + $binary_code_arr = chunk_split($binary_code, 2, "\r"); + $binary_code_arr = substr($binary_code_arr, 0, -1); + $binary_code_arr = explode("\r", $binary_code_arr); + // calculate frame check sequence + $fcs = $this->imb_crc11fcs($binary_code_arr); + // exclude first 2 bits from first byte + $first_byte = sprintf('%2s', dechex((hexdec($binary_code_arr[0]) << 2) >> 2)); + $binary_code_102bit = $first_byte.substr($binary_code, 2); + // convert binary data to codewords + $codewords = array(); + $data = $this->hex_to_dec($binary_code_102bit); + $codewords[0] = bcmod($data, 636) * 2; + $data = bcdiv($data, 636); + for ($i = 1; $i < 9; ++$i) { + $codewords[$i] = bcmod($data, 1365); + $data = bcdiv($data, 1365); + } + $codewords[9] = $data; + if (($fcs >> 10) == 1) { + $codewords[9] += 659; + } + // generate lookup tables + $table2of13 = $this->imb_tables(2, 78); + $table5of13 = $this->imb_tables(5, 1287); + // convert codewords to characters + $characters = array(); + $bitmask = 512; + foreach($codewords as $k => $val) { + if ($val <= 1286) { + $chrcode = $table5of13[$val]; + } else { + $chrcode = $table2of13[($val - 1287)]; + } + if (($fcs & $bitmask) > 0) { + // bitwise invert + $chrcode = ((~$chrcode) & 8191); + } + $characters[] = $chrcode; + $bitmask /= 2; + } + $characters = array_reverse($characters); + // build bars + $k = 0; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 3, 'bcode' => array()); + for ($i = 0; $i < 65; ++$i) { + $asc = (($characters[$asc_chr[$i]] & pow(2, $asc_pos[$i])) > 0); + $dsc = (($characters[$dsc_chr[$i]] & pow(2, $dsc_pos[$i])) > 0); + if ($asc AND $dsc) { + // full bar (F) + $p = 0; + $h = 3; + } elseif ($asc) { + // ascender (A) + $p = 0; + $h = 2; + } elseif ($dsc) { + // descender (D) + $p = 1; + $h = 2; + } else { + // tracker (T) + $p = 1; + $h = 1; + } + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + unset($bararray['bcode'][($k - 1)]); + --$bararray['maxw']; + return $bararray; + } + + /** + * IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 + * + * @param $code (string) pre-formatted IMB barcode (65 chars "FADT") + * @return array barcode representation. + * @protected + */ + protected function barcode_imb_pre($code) { + if (!preg_match('/^[fadtFADT]{65}$/', $code) == 1) { + return false; + } + $characters = str_split(strtolower($code), 1); + // build bars + $k = 0; + $bararray = array('code' => $code, 'maxw' => 0, 'maxh' => 3, 'bcode' => array()); + for ($i = 0; $i < 65; ++$i) { + switch($characters[$i]) { + case 'f': { + // full bar + $p = 0; + $h = 3; + break; + } + case 'a': { + // ascender + $p = 0; + $h = 2; + break; + } + case 'd': { + // descender + $p = 1; + $h = 2; + break; + } + case 't': { + // tracker (short) + $p = 1; + $h = 1; + break; + } + } + $bararray['bcode'][$k++] = array('t' => 1, 'w' => 1, 'h' => $h, 'p' => $p); + $bararray['bcode'][$k++] = array('t' => 0, 'w' => 1, 'h' => 2, 'p' => 0); + $bararray['maxw'] += 2; + } + unset($bararray['bcode'][($k - 1)]); + --$bararray['maxw']; + return $bararray; + } + + /** + * Convert large integer number to hexadecimal representation. + * (requires PHP bcmath extension) + * @param $number (string) number to convert specified as a string + * @return string hexadecimal representation + */ + public function dec_to_hex($number) { + $i = 0; + $hex = array(); + if($number == 0) { + return '00'; + } + while($number > 0) { + if($number == 0) { + array_push($hex, '0'); + } else { + array_push($hex, strtoupper(dechex(bcmod($number, '16')))); + $number = bcdiv($number, '16', 0); + } + } + $hex = array_reverse($hex); + return implode($hex); + } + + /** + * Convert large hexadecimal number to decimal representation (string). + * (requires PHP bcmath extension) + * @param $hex (string) hexadecimal number to convert specified as a string + * @return string hexadecimal representation + */ + public function hex_to_dec($hex) { + $dec = 0; + $bitval = 1; + $len = strlen($hex); + for($pos = ($len - 1); $pos >= 0; --$pos) { + $dec = bcadd($dec, bcmul(hexdec($hex{$pos}), $bitval)); + $bitval = bcmul($bitval, 16); + } + return $dec; + } + + /** + * Intelligent Mail Barcode calculation of Frame Check Sequence + * @param $code_arr (string) array of hexadecimal values (13 bytes holding 102 bits right justified). + * @return int 11 bit Frame Check Sequence as integer (decimal base) + * @protected + */ + protected function imb_crc11fcs($code_arr) { + $genpoly = 0x0F35; // generator polynomial + $fcs = 0x07FF; // Frame Check Sequence + // do most significant byte skipping the 2 most significant bits + $data = hexdec($code_arr[0]) << 5; + for ($bit = 2; $bit < 8; ++$bit) { + if (($fcs ^ $data) & 0x400) { + $fcs = ($fcs << 1) ^ $genpoly; + } else { + $fcs = ($fcs << 1); + } + $fcs &= 0x7FF; + $data <<= 1; + } + // do rest of bytes + for ($byte = 1; $byte < 13; ++$byte) { + $data = hexdec($code_arr[$byte]) << 3; + for ($bit = 0; $bit < 8; ++$bit) { + if (($fcs ^ $data) & 0x400) { + $fcs = ($fcs << 1) ^ $genpoly; + } else { + $fcs = ($fcs << 1); + } + $fcs &= 0x7FF; + $data <<= 1; + } + } + return $fcs; + } + + /** + * Reverse unsigned short value + * @param $num (int) value to reversr + * @return int reversed value + * @protected + */ + protected function imb_reverse_us($num) { + $rev = 0; + for ($i = 0; $i < 16; ++$i) { + $rev <<= 1; + $rev |= ($num & 1); + $num >>= 1; + } + return $rev; + } + + /** + * generate Nof13 tables used for Intelligent Mail Barcode + * @param $n (int) is the type of table: 2 for 2of13 table, 5 for 5of13table + * @param $size (int) size of table (78 for n=2 and 1287 for n=5) + * @return array requested table + * @protected + */ + protected function imb_tables($n, $size) { + $table = array(); + $lli = 0; // LUT lower index + $lui = $size - 1; // LUT upper index + for ($count = 0; $count < 8192; ++$count) { + $bit_count = 0; + for ($bit_index = 0; $bit_index < 13; ++$bit_index) { + $bit_count += intval(($count & (1 << $bit_index)) != 0); + } + // if we don't have the right number of bits on, go on to the next value + if ($bit_count == $n) { + $reverse = ($this->imb_reverse_us($count) >> 3); + // if the reverse is less than count, we have already visited this pair before + if ($reverse >= $count) { + // If count is symmetric, place it at the first free slot from the end of the list. + // Otherwise, place it at the first free slot from the beginning of the list AND place $reverse ath the next free slot from the beginning of the list + if ($reverse == $count) { + $table[$lui] = $count; + --$lui; + } else { + $table[$lli] = $count; + ++$lli; + $table[$lli] = $reverse; + ++$lli; + } + } + } + } + return $table; + } + +} // end of class +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/tcpdf_barcodes_2d.php b/tcpdf/tcpdf_barcodes_2d.php new file mode 100644 index 0000000..13e2365 --- /dev/null +++ b/tcpdf/tcpdf_barcodes_2d.php @@ -0,0 +1,349 @@ +<?php +//============================================================+ +// File name : tcpdf_barcodes_2d.php +// Version : 1.0.015 +// Begin : 2009-04-07 +// Last Update : 2014-05-20 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2009-2014 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : PHP class to creates array representations for +// 2D barcodes to be used with TCPDF. +// +//============================================================+ + +/** + * @file + * PHP class to creates array representations for 2D barcodes to be used with TCPDF. + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.015 + */ + +/** + * @class TCPDF2DBarcode + * PHP class to creates array representations for 2D barcodes to be used with TCPDF (http://www.tcpdf.org). + * @package com.tecnick.tcpdf + * @version 1.0.015 + * @author Nicola Asuni + */ +class TCPDF2DBarcode { + + /** + * Array representation of barcode. + * @protected + */ + protected $barcode_array = false; + + /** + * This is the class constructor. + * Return an array representations for 2D barcodes:<ul> + * <li>$arrcode['code'] code to be printed on text label</li> + * <li>$arrcode['num_rows'] required number of rows</li> + * <li>$arrcode['num_cols'] required number of columns</li> + * <li>$arrcode['bcode'][$r][$c] value of the cell is $r row and $c column (0 = transparent, 1 = black)</li></ul> + * @param $code (string) code to print + * @param $type (string) type of barcode: <ul><li>DATAMATRIX : Datamatrix (ISO/IEC 16022)</li><li>PDF417 : PDF417 (ISO/IEC 15438:2006)</li><li>PDF417,a,e,t,s,f,o0,o1,o2,o3,o4,o5,o6 : PDF417 with parameters: a = aspect ratio (width/height); e = error correction level (0-8); t = total number of macro segments; s = macro segment index (0-99998); f = file ID; o0 = File Name (text); o1 = Segment Count (numeric); o2 = Time Stamp (numeric); o3 = Sender (text); o4 = Addressee (text); o5 = File Size (numeric); o6 = Checksum (numeric). NOTES: Parameters t, s and f are required for a Macro Control Block, all other parametrs are optional. To use a comma character ',' on text options, replace it with the character 255: "\xff".</li><li>QRCODE : QRcode Low error correction</li><li>QRCODE,L : QRcode Low error correction</li><li>QRCODE,M : QRcode Medium error correction</li><li>QRCODE,Q : QRcode Better error correction</li><li>QRCODE,H : QR-CODE Best error correction</li><li>RAW: raw mode - comma-separad list of array rows</li><li>RAW2: raw mode - array rows are surrounded by square parenthesis.</li><li>TEST : Test matrix</li></ul> + */ + public function __construct($code, $type) { + $this->setBarcode($code, $type); + } + + /** + * Return an array representations of barcode. + * @return array + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Send barcode as SVG image object to the standard output. + * @param $w (int) Width of a single rectangle element in user units. + * @param $h (int) Height of a single rectangle element in user units. + * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent). + * @public + */ + public function getBarcodeSVG($w=3, $h=3, $color='black') { + // send headers + $code = $this->getBarcodeSVGcode($w, $h, $color); + header('Content-Type: application/svg+xml'); + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Disposition: inline; filename="'.md5($code).'.svg";'); + //header('Content-Length: '.strlen($code)); + echo $code; + } + + /** + * Return a SVG string representation of barcode. + * @param $w (int) Width of a single rectangle element in user units. + * @param $h (int) Height of a single rectangle element in user units. + * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent). + * @return string SVG code. + * @public + */ + public function getBarcodeSVGcode($w=3, $h=3, $color='black') { + // replace table for special characters + $repstr = array("\0" => '', '&' => '&amp;', '<' => '&lt;', '>' => '&gt;'); + $svg = '<'.'?'.'xml version="1.0" standalone="no"'.'?'.'>'."\n"; + $svg .= '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'."\n"; + $svg .= '<svg width="'.round(($this->barcode_array['num_cols'] * $w), 3).'" height="'.round(($this->barcode_array['num_rows'] * $h), 3).'" version="1.1" xmlns="http://www.w3.org/2000/svg">'."\n"; + $svg .= "\t".'<desc>'.strtr($this->barcode_array['code'], $repstr).'</desc>'."\n"; + $svg .= "\t".'<g id="elements" fill="'.$color.'" stroke="none">'."\n"; + // print barcode elements + $y = 0; + // for each row + for ($r = 0; $r < $this->barcode_array['num_rows']; ++$r) { + $x = 0; + // for each column + for ($c = 0; $c < $this->barcode_array['num_cols']; ++$c) { + if ($this->barcode_array['bcode'][$r][$c] == 1) { + // draw a single barcode cell + $svg .= "\t\t".'<rect x="'.$x.'" y="'.$y.'" width="'.$w.'" height="'.$h.'" />'."\n"; + } + $x += $w; + } + $y += $h; + } + $svg .= "\t".'</g>'."\n"; + $svg .= '</svg>'."\n"; + return $svg; + } + + /** + * Return an HTML representation of barcode. + * @param $w (int) Width of a single rectangle element in pixels. + * @param $h (int) Height of a single rectangle element in pixels. + * @param $color (string) Foreground color for bar elements (background is transparent). + * @return string HTML code. + * @public + */ + public function getBarcodeHTML($w=10, $h=10, $color='black') { + $html = '<div style="font-size:0;position:relative;width:'.($w * $this->barcode_array['num_cols']).'px;height:'.($h * $this->barcode_array['num_rows']).'px;">'."\n"; + // print barcode elements + $y = 0; + // for each row + for ($r = 0; $r < $this->barcode_array['num_rows']; ++$r) { + $x = 0; + // for each column + for ($c = 0; $c < $this->barcode_array['num_cols']; ++$c) { + if ($this->barcode_array['bcode'][$r][$c] == 1) { + // draw a single barcode cell + $html .= '<div style="background-color:'.$color.';width:'.$w.'px;height:'.$h.'px;position:absolute;left:'.$x.'px;top:'.$y.'px;">&nbsp;</div>'."\n"; + } + $x += $w; + } + $y += $h; + } + $html .= '</div>'."\n"; + return $html; + } + + /** + * Send a PNG image representation of barcode (requires GD or Imagick library). + * @param $w (int) Width of a single rectangle element in pixels. + * @param $h (int) Height of a single rectangle element in pixels. + * @param $color (array) RGB (0-255) foreground color for bar elements (background is transparent). + * @public + */ + public function getBarcodePNG($w=3, $h=3, $color=array(0,0,0)) { + $data = $this->getBarcodePngData($w, $h, $color); + // send headers + header('Content-Type: image/png'); + header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + //header('Content-Length: '.strlen($data)); + echo $data; + + } + + /** + * Return a PNG image representation of barcode (requires GD or Imagick library). + * @param $w (int) Width of a single rectangle element in pixels. + * @param $h (int) Height of a single rectangle element in pixels. + * @param $color (array) RGB (0-255) foreground color for bar elements (background is transparent). + * @return image or false in case of error. + * @public + */ + public function getBarcodePngData($w=3, $h=3, $color=array(0,0,0)) { + // calculate image size + $width = ($this->barcode_array['num_cols'] * $w); + $height = ($this->barcode_array['num_rows'] * $h); + if (function_exists('imagecreate')) { + // GD library + $imagick = false; + $png = imagecreate($width, $height); + $bgcol = imagecolorallocate($png, 255, 255, 255); + imagecolortransparent($png, $bgcol); + $fgcol = imagecolorallocate($png, $color[0], $color[1], $color[2]); + } elseif (extension_loaded('imagick')) { + $imagick = true; + $bgcol = new imagickpixel('rgb(255,255,255'); + $fgcol = new imagickpixel('rgb('.$color[0].','.$color[1].','.$color[2].')'); + $png = new Imagick(); + $png->newImage($width, $height, 'none', 'png'); + $bar = new imagickdraw(); + $bar->setfillcolor($fgcol); + } else { + return false; + } + // print barcode elements + $y = 0; + // for each row + for ($r = 0; $r < $this->barcode_array['num_rows']; ++$r) { + $x = 0; + // for each column + for ($c = 0; $c < $this->barcode_array['num_cols']; ++$c) { + if ($this->barcode_array['bcode'][$r][$c] == 1) { + // draw a single barcode cell + if ($imagick) { + $bar->rectangle($x, $y, ($x + $w - 1), ($y + $h - 1)); + } else { + imagefilledrectangle($png, $x, $y, ($x + $w - 1), ($y + $h - 1), $fgcol); + } + } + $x += $w; + } + $y += $h; + } + if ($imagick) { + $png->drawimage($bar); + return $png; + } else { + ob_start(); + imagepng($png); + $imagedata = ob_get_clean(); + imagedestroy($png); + return $imagedata; + } + } + + /** + * Set the barcode. + * @param $code (string) code to print + * @param $type (string) type of barcode: <ul><li>DATAMATRIX : Datamatrix (ISO/IEC 16022)</li><li>PDF417 : PDF417 (ISO/IEC 15438:2006)</li><li>PDF417,a,e,t,s,f,o0,o1,o2,o3,o4,o5,o6 : PDF417 with parameters: a = aspect ratio (width/height); e = error correction level (0-8); t = total number of macro segments; s = macro segment index (0-99998); f = file ID; o0 = File Name (text); o1 = Segment Count (numeric); o2 = Time Stamp (numeric); o3 = Sender (text); o4 = Addressee (text); o5 = File Size (numeric); o6 = Checksum (numeric). NOTES: Parameters t, s and f are required for a Macro Control Block, all other parametrs are optional. To use a comma character ',' on text options, replace it with the character 255: "\xff".</li><li>QRCODE : QRcode Low error correction</li><li>QRCODE,L : QRcode Low error correction</li><li>QRCODE,M : QRcode Medium error correction</li><li>QRCODE,Q : QRcode Better error correction</li><li>QRCODE,H : QR-CODE Best error correction</li><li>RAW: raw mode - comma-separad list of array rows</li><li>RAW2: raw mode - array rows are surrounded by square parenthesis.</li><li>TEST : Test matrix</li></ul> + * @return array + */ + public function setBarcode($code, $type) { + $mode = explode(',', $type); + $qrtype = strtoupper($mode[0]); + switch ($qrtype) { + case 'DATAMATRIX': { // DATAMATRIX (ISO/IEC 16022) + require_once(dirname(__FILE__).'/include/barcodes/datamatrix.php'); + $qrcode = new Datamatrix($code); + $this->barcode_array = $qrcode->getBarcodeArray(); + $this->barcode_array['code'] = $code; + break; + } + case 'PDF417': { // PDF417 (ISO/IEC 15438:2006) + require_once(dirname(__FILE__).'/include/barcodes/pdf417.php'); + if (!isset($mode[1]) OR ($mode[1] === '')) { + $aspectratio = 2; // default aspect ratio (width / height) + } else { + $aspectratio = floatval($mode[1]); + } + if (!isset($mode[2]) OR ($mode[2] === '')) { + $ecl = -1; // default error correction level (auto) + } else { + $ecl = intval($mode[2]); + } + // set macro block + $macro = array(); + if (isset($mode[3]) AND ($mode[3] !== '') AND isset($mode[4]) AND ($mode[4] !== '') AND isset($mode[5]) AND ($mode[5] !== '')) { + $macro['segment_total'] = intval($mode[3]); + $macro['segment_index'] = intval($mode[4]); + $macro['file_id'] = strtr($mode[5], "\xff", ','); + for ($i = 0; $i < 7; ++$i) { + $o = $i + 6; + if (isset($mode[$o]) AND ($mode[$o] !== '')) { + // add option + $macro['option_'.$i] = strtr($mode[$o], "\xff", ','); + } + } + } + $qrcode = new PDF417($code, $ecl, $aspectratio, $macro); + $this->barcode_array = $qrcode->getBarcodeArray(); + $this->barcode_array['code'] = $code; + break; + } + case 'QRCODE': { // QR-CODE + require_once(dirname(__FILE__).'/include/barcodes/qrcode.php'); + if (!isset($mode[1]) OR (!in_array($mode[1],array('L','M','Q','H')))) { + $mode[1] = 'L'; // Ddefault: Low error correction + } + $qrcode = new QRcode($code, strtoupper($mode[1])); + $this->barcode_array = $qrcode->getBarcodeArray(); + $this->barcode_array['code'] = $code; + break; + } + case 'RAW': + case 'RAW2': { // RAW MODE + // remove spaces + $code = preg_replace('/[\s]*/si', '', $code); + if (strlen($code) < 3) { + break; + } + if ($qrtype == 'RAW') { + // comma-separated rows + $rows = explode(',', $code); + } else { // RAW2 + // rows enclosed in square parentheses + $code = substr($code, 1, -1); + $rows = explode('][', $code); + } + $this->barcode_array['num_rows'] = count($rows); + $this->barcode_array['num_cols'] = strlen($rows[0]); + $this->barcode_array['bcode'] = array(); + foreach ($rows as $r) { + $this->barcode_array['bcode'][] = str_split($r, 1); + } + $this->barcode_array['code'] = $code; + break; + } + case 'TEST': { // TEST MODE + $this->barcode_array['num_rows'] = 5; + $this->barcode_array['num_cols'] = 15; + $this->barcode_array['bcode'] = array( + array(1,1,1,0,1,1,1,0,1,1,1,0,1,1,1), + array(0,1,0,0,1,0,0,0,1,0,0,0,0,1,0), + array(0,1,0,0,1,1,0,0,1,1,1,0,0,1,0), + array(0,1,0,0,1,0,0,0,0,0,1,0,0,1,0), + array(0,1,0,0,1,1,1,0,1,1,1,0,0,1,0)); + $this->barcode_array['code'] = $code; + break; + } + default: { + $this->barcode_array = false; + } + } + } +} // end of class + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/tcpdf_import.php b/tcpdf/tcpdf_import.php new file mode 100644 index 0000000..09d726b --- /dev/null +++ b/tcpdf/tcpdf_import.php @@ -0,0 +1,104 @@ +<?php +//============================================================+ +// File name : tcpdf_import.php +// Version : 1.0.001 +// Begin : 2011-05-23 +// Last Update : 2013-09-17 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2011-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : This is a PHP class extension of the TCPDF library to +// import existing PDF documents. +// +//============================================================+ + +/** + * @file + * !!! THIS CLASS IS UNDER DEVELOPMENT !!! + * This is a PHP class extension of the TCPDF (http://www.tcpdf.org) library to import existing PDF documents.<br> + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.001 + */ + +// include the TCPDF class +require_once(dirname(__FILE__).'/tcpdf.php'); +// include PDF parser class +require_once(dirname(__FILE__).'/tcpdf_parser.php'); + +/** + * @class TCPDF_IMPORT + * !!! THIS CLASS IS UNDER DEVELOPMENT !!! + * PHP class extension of the TCPDF (http://www.tcpdf.org) library to import existing PDF documents.<br> + * @package com.tecnick.tcpdf + * @brief PHP class extension of the TCPDF library to import existing PDF documents. + * @version 1.0.001 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_IMPORT extends TCPDF { + + /** + * Import an existing PDF document + * @param $filename (string) Filename of the PDF document to import. + * @return true in case of success, false otherwise + * @public + * @since 1.0.000 (2011-05-24) + */ + public function importPDF($filename) { + // load document + $rawdata = file_get_contents($filename); + if ($rawdata === false) { + $this->Error('Unable to get the content of the file: '.$filename); + } + // configuration parameters for parser + $cfg = array( + 'die_for_errors' => false, + 'ignore_filter_decoding_errors' => true, + 'ignore_missing_filter_decoders' => true, + ); + try { + // parse PDF data + $pdf = new TCPDF_PARSER($rawdata, $cfg); + } catch (Exception $e) { + die($e->getMessage()); + } + // get the parsed data + $data = $pdf->getParsedData(); + // release some memory + unset($rawdata); + + // ... + + + print_r($data); // DEBUG + + + unset($pdf); + } + +} // END OF CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/tcpdf_parser.php b/tcpdf/tcpdf_parser.php new file mode 100644 index 0000000..780ec21 --- /dev/null +++ b/tcpdf/tcpdf_parser.php @@ -0,0 +1,815 @@ +<?php +//============================================================+ +// File name : tcpdf_parser.php +// Version : 1.0.16 +// Begin : 2011-05-23 +// Last Update : 2015-04-28 +// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// License : http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT GNU-LGPLv3 +// ------------------------------------------------------------------- +// Copyright (C) 2011-2015 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : This is a PHP class for parsing PDF documents. +// +//============================================================+ + +/** + * @file + * This is a PHP class for parsing PDF documents.<br> + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 1.0.15 + */ + +// include class for decoding filters +require_once(dirname(__FILE__).'/include/tcpdf_filters.php'); + +/** + * @class TCPDF_PARSER + * This is a PHP class for parsing PDF documents.<br> + * @package com.tecnick.tcpdf + * @brief This is a PHP class for parsing PDF documents.. + * @version 1.0.15 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_PARSER { + + /** + * Raw content of the PDF document. + * @private + */ + private $pdfdata = ''; + + /** + * XREF data. + * @protected + */ + protected $xref = array(); + + /** + * Array of PDF objects. + * @protected + */ + protected $objects = array(); + + /** + * Class object for decoding filters. + * @private + */ + private $FilterDecoders; + + /** + * Array of configuration parameters. + * @private + */ + private $cfg = array( + 'die_for_errors' => false, + 'ignore_filter_decoding_errors' => true, + 'ignore_missing_filter_decoders' => true, + ); + +// ----------------------------------------------------------------------------- + + /** + * Parse a PDF document an return an array of objects. + * @param $data (string) PDF data to parse. + * @param $cfg (array) Array of configuration parameters: + * 'die_for_errors' : if true termitate the program execution in case of error, otherwise thows an exception; + * 'ignore_filter_decoding_errors' : if true ignore filter decoding errors; + * 'ignore_missing_filter_decoders' : if true ignore missing filter decoding errors. + * @public + * @since 1.0.000 (2011-05-24) + */ + public function __construct($data, $cfg=array()) { + if (empty($data)) { + $this->Error('Empty PDF data.'); + } + // find the pdf header starting position + if (($trimpos = strpos($data, '%PDF-')) === FALSE) { + $this->Error('Invalid PDF data: missing %PDF header.'); + } + // get PDF content string + $this->pdfdata = substr($data, $trimpos); + // get length + $pdflen = strlen($this->pdfdata); + // set configuration parameters + $this->setConfig($cfg); + // get xref and trailer data + $this->xref = $this->getXrefData(); + // parse all document objects + $this->objects = array(); + foreach ($this->xref['xref'] as $obj => $offset) { + if (!isset($this->objects[$obj]) AND ($offset > 0)) { + // decode objects with positive offset + $this->objects[$obj] = $this->getIndirectObject($obj, $offset, true); + } + } + // release some memory + unset($this->pdfdata); + $this->pdfdata = ''; + } + + /** + * Set the configuration parameters. + * @param $cfg (array) Array of configuration parameters: + * 'die_for_errors' : if true termitate the program execution in case of error, otherwise thows an exception; + * 'ignore_filter_decoding_errors' : if true ignore filter decoding errors; + * 'ignore_missing_filter_decoders' : if true ignore missing filter decoding errors. + * @public + */ + protected function setConfig($cfg) { + if (isset($cfg['die_for_errors'])) { + $this->cfg['die_for_errors'] = !!$cfg['die_for_errors']; + } + if (isset($cfg['ignore_filter_decoding_errors'])) { + $this->cfg['ignore_filter_decoding_errors'] = !!$cfg['ignore_filter_decoding_errors']; + } + if (isset($cfg['ignore_missing_filter_decoders'])) { + $this->cfg['ignore_missing_filter_decoders'] = !!$cfg['ignore_missing_filter_decoders']; + } + } + + /** + * Return an array of parsed PDF document objects. + * @return (array) Array of parsed PDF document objects. + * @public + * @since 1.0.000 (2011-06-26) + */ + public function getParsedData() { + return array($this->xref, $this->objects); + } + + /** + * Get Cross-Reference (xref) table and trailer data from PDF document data. + * @param $offset (int) xref offset (if know). + * @param $xref (array) previous xref array (if any). + * @return Array containing xref and trailer data. + * @protected + * @since 1.0.000 (2011-05-24) + */ + protected function getXrefData($offset=0, $xref=array()) { + if ($offset == 0) { + // find last startxref + if (preg_match_all('/[\r\n]startxref[\s]*[\r\n]+([0-9]+)[\s]*[\r\n]+%%EOF/i', $this->pdfdata, $matches, PREG_SET_ORDER, $offset) == 0) { + $this->Error('Unable to find startxref'); + } + $matches = array_pop($matches); + $startxref = $matches[1]; + } elseif (strpos($this->pdfdata, 'xref', $offset) == $offset) { + // Already pointing at the xref table + $startxref = $offset; + } elseif (preg_match('/([0-9]+[\s][0-9]+[\s]obj)/i', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset)) { + // Cross-Reference Stream object + $startxref = $offset; + } elseif (preg_match('/[\r\n]startxref[\s]*[\r\n]+([0-9]+)[\s]*[\r\n]+%%EOF/i', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset)) { + // startxref found + $startxref = $matches[1][0]; + } else { + $this->Error('Unable to find startxref'); + } + // check xref position + if (strpos($this->pdfdata, 'xref', $startxref) == $startxref) { + // Cross-Reference + $xref = $this->decodeXref($startxref, $xref); + } else { + // Cross-Reference Stream + $xref = $this->decodeXrefStream($startxref, $xref); + } + if (empty($xref)) { + $this->Error('Unable to find xref'); + } + return $xref; + } + + /** + * Decode the Cross-Reference section + * @param $startxref (int) Offset at which the xref section starts (position of the 'xref' keyword). + * @param $xref (array) Previous xref array (if any). + * @return Array containing xref and trailer data. + * @protected + * @since 1.0.000 (2011-06-20) + */ + protected function decodeXref($startxref, $xref=array()) { + $startxref += 4; // 4 is the length of the word 'xref' + // skip initial white space chars: \x00 null (NUL), \x09 horizontal tab (HT), \x0A line feed (LF), \x0C form feed (FF), \x0D carriage return (CR), \x20 space (SP) + $offset = $startxref + strspn($this->pdfdata, "\x00\x09\x0a\x0c\x0d\x20", $startxref); + // initialize object number + $obj_num = 0; + // search for cross-reference entries or subsection + while (preg_match('/([0-9]+)[\x20]([0-9]+)[\x20]?([nf]?)(\r\n|[\x20]?[\r\n])/', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { + if ($matches[0][1] != $offset) { + // we are on another section + break; + } + $offset += strlen($matches[0][0]); + if ($matches[3][0] == 'n') { + // create unique object index: [object number]_[generation number] + $index = $obj_num.'_'.intval($matches[2][0]); + // check if object already exist + if (!isset($xref['xref'][$index])) { + // store object offset position + $xref['xref'][$index] = intval($matches[1][0]); + } + ++$obj_num; + } elseif ($matches[3][0] == 'f') { + ++$obj_num; + } else { + // object number (index) + $obj_num = intval($matches[1][0]); + } + } + // get trailer data + if (preg_match('/trailer[\s]*<<(.*)>>/isU', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { + $trailer_data = $matches[1][0]; + if (!isset($xref['trailer']) OR empty($xref['trailer'])) { + // get only the last updated version + $xref['trailer'] = array(); + // parse trailer_data + if (preg_match('/Size[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) { + $xref['trailer']['size'] = intval($matches[1]); + } + if (preg_match('/Root[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { + $xref['trailer']['root'] = intval($matches[1]).'_'.intval($matches[2]); + } + if (preg_match('/Encrypt[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { + $xref['trailer']['encrypt'] = intval($matches[1]).'_'.intval($matches[2]); + } + if (preg_match('/Info[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { + $xref['trailer']['info'] = intval($matches[1]).'_'.intval($matches[2]); + } + if (preg_match('/ID[\s]*[\[][\s]*[<]([^>]*)[>][\s]*[<]([^>]*)[>]/i', $trailer_data, $matches) > 0) { + $xref['trailer']['id'] = array(); + $xref['trailer']['id'][0] = $matches[1]; + $xref['trailer']['id'][1] = $matches[2]; + } + } + if (preg_match('/Prev[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) { + // get previous xref + $xref = $this->getXrefData(intval($matches[1]), $xref); + } + } else { + $this->Error('Unable to find trailer'); + } + return $xref; + } + + /** + * Decode the Cross-Reference Stream section + * @param $startxref (int) Offset at which the xref section starts. + * @param $xref (array) Previous xref array (if any). + * @return Array containing xref and trailer data. + * @protected + * @since 1.0.003 (2013-03-16) + */ + protected function decodeXrefStream($startxref, $xref=array()) { + // try to read Cross-Reference Stream + $xrefobj = $this->getRawObject($startxref); + $xrefcrs = $this->getIndirectObject($xrefobj[1], $startxref, true); + if (!isset($xref['trailer']) OR empty($xref['trailer'])) { + // get only the last updated version + $xref['trailer'] = array(); + $filltrailer = true; + } else { + $filltrailer = false; + } + if (!isset($xref['xref'])) { + $xref['xref'] = array(); + } + $valid_crs = false; + $columns = 0; + $sarr = $xrefcrs[0][1]; + if (!is_array($sarr)) { + $sarr = array(); + } + foreach ($sarr as $k => $v) { + if (($v[0] == '/') AND ($v[1] == 'Type') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == '/') AND ($sarr[($k +1)][1] == 'XRef'))) { + $valid_crs = true; + } elseif (($v[0] == '/') AND ($v[1] == 'Index') AND (isset($sarr[($k +1)]))) { + // first object number in the subsection + $index_first = intval($sarr[($k +1)][1][0][1]); + // number of entries in the subsection + $index_entries = intval($sarr[($k +1)][1][1][1]); + } elseif (($v[0] == '/') AND ($v[1] == 'Prev') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'numeric'))) { + // get previous xref offset + $prevxref = intval($sarr[($k +1)][1]); + } elseif (($v[0] == '/') AND ($v[1] == 'W') AND (isset($sarr[($k +1)]))) { + // number of bytes (in the decoded stream) of the corresponding field + $wb = array(); + $wb[0] = intval($sarr[($k +1)][1][0][1]); + $wb[1] = intval($sarr[($k +1)][1][1][1]); + $wb[2] = intval($sarr[($k +1)][1][2][1]); + } elseif (($v[0] == '/') AND ($v[1] == 'DecodeParms') AND (isset($sarr[($k +1)][1]))) { + $decpar = $sarr[($k +1)][1]; + foreach ($decpar as $kdc => $vdc) { + if (($vdc[0] == '/') AND ($vdc[1] == 'Columns') AND (isset($decpar[($kdc +1)]) AND ($decpar[($kdc +1)][0] == 'numeric'))) { + $columns = intval($decpar[($kdc +1)][1]); + } elseif (($vdc[0] == '/') AND ($vdc[1] == 'Predictor') AND (isset($decpar[($kdc +1)]) AND ($decpar[($kdc +1)][0] == 'numeric'))) { + $predictor = intval($decpar[($kdc +1)][1]); + } + } + } elseif ($filltrailer) { + if (($v[0] == '/') AND ($v[1] == 'Size') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'numeric'))) { + $xref['trailer']['size'] = $sarr[($k +1)][1]; + } elseif (($v[0] == '/') AND ($v[1] == 'Root') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'objref'))) { + $xref['trailer']['root'] = $sarr[($k +1)][1]; + } elseif (($v[0] == '/') AND ($v[1] == 'Info') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'objref'))) { + $xref['trailer']['info'] = $sarr[($k +1)][1]; + } elseif (($v[0] == '/') AND ($v[1] == 'Encrypt') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'objref'))) { + $xref['trailer']['encrypt'] = $sarr[($k +1)][1]; + } elseif (($v[0] == '/') AND ($v[1] == 'ID') AND (isset($sarr[($k +1)]))) { + $xref['trailer']['id'] = array(); + $xref['trailer']['id'][0] = $sarr[($k +1)][1][0][1]; + $xref['trailer']['id'][1] = $sarr[($k +1)][1][1][1]; + } + } + } + // decode data + if ($valid_crs AND isset($xrefcrs[1][3][0])) { + // number of bytes in a row + $rowlen = ($columns + 1); + // convert the stream into an array of integers + $sdata = unpack('C*', $xrefcrs[1][3][0]); + // split the rows + $sdata = array_chunk($sdata, $rowlen); + // initialize decoded array + $ddata = array(); + // initialize first row with zeros + $prev_row = array_fill (0, $rowlen, 0); + // for each row apply PNG unpredictor + foreach ($sdata as $k => $row) { + // initialize new row + $ddata[$k] = array(); + // get PNG predictor value + $predictor = (10 + $row[0]); + // for each byte on the row + for ($i=1; $i<=$columns; ++$i) { + // new index + $j = ($i - 1); + $row_up = $prev_row[$j]; + if ($i == 1) { + $row_left = 0; + $row_upleft = 0; + } else { + $row_left = $row[($i - 1)]; + $row_upleft = $prev_row[($j - 1)]; + } + switch ($predictor) { + case 10: { // PNG prediction (on encoding, PNG None on all rows) + $ddata[$k][$j] = $row[$i]; + break; + } + case 11: { // PNG prediction (on encoding, PNG Sub on all rows) + $ddata[$k][$j] = (($row[$i] + $row_left) & 0xff); + break; + } + case 12: { // PNG prediction (on encoding, PNG Up on all rows) + $ddata[$k][$j] = (($row[$i] + $row_up) & 0xff); + break; + } + case 13: { // PNG prediction (on encoding, PNG Average on all rows) + $ddata[$k][$j] = (($row[$i] + (($row_left + $row_up) / 2)) & 0xff); + break; + } + case 14: { // PNG prediction (on encoding, PNG Paeth on all rows) + // initial estimate + $p = ($row_left + $row_up - $row_upleft); + // distances + $pa = abs($p - $row_left); + $pb = abs($p - $row_up); + $pc = abs($p - $row_upleft); + $pmin = min($pa, $pb, $pc); + // return minimum distance + switch ($pmin) { + case $pa: { + $ddata[$k][$j] = (($row[$i] + $row_left) & 0xff); + break; + } + case $pb: { + $ddata[$k][$j] = (($row[$i] + $row_up) & 0xff); + break; + } + case $pc: { + $ddata[$k][$j] = (($row[$i] + $row_upleft) & 0xff); + break; + } + } + break; + } + default: { // PNG prediction (on encoding, PNG optimum) + $this->Error('Unknown PNG predictor'); + break; + } + } + } + $prev_row = $ddata[$k]; + } // end for each row + // complete decoding + $sdata = array(); + // for every row + foreach ($ddata as $k => $row) { + // initialize new row + $sdata[$k] = array(0, 0, 0); + if ($wb[0] == 0) { + // default type field + $sdata[$k][0] = 1; + } + $i = 0; // count bytes in the row + // for every column + for ($c = 0; $c < 3; ++$c) { + // for every byte on the column + for ($b = 0; $b < $wb[$c]; ++$b) { + if (isset($row[$i])) { + $sdata[$k][$c] += ($row[$i] << (($wb[$c] - 1 - $b) * 8)); + } + ++$i; + } + } + } + $ddata = array(); + // fill xref + if (isset($index_first)) { + $obj_num = $index_first; + } else { + $obj_num = 0; + } + foreach ($sdata as $k => $row) { + switch ($row[0]) { + case 0: { // (f) linked list of free objects + break; + } + case 1: { // (n) objects that are in use but are not compressed + // create unique object index: [object number]_[generation number] + $index = $obj_num.'_'.$row[2]; + // check if object already exist + if (!isset($xref['xref'][$index])) { + // store object offset position + $xref['xref'][$index] = $row[1]; + } + break; + } + case 2: { // compressed objects + // $row[1] = object number of the object stream in which this object is stored + // $row[2] = index of this object within the object stream + $index = $row[1].'_0_'.$row[2]; + $xref['xref'][$index] = -1; + break; + } + default: { // null objects + break; + } + } + ++$obj_num; + } + } // end decoding data + if (isset($prevxref)) { + // get previous xref + $xref = $this->getXrefData($prevxref, $xref); + } + return $xref; + } + + /** + * Get object type, raw value and offset to next object + * @param $offset (int) Object offset. + * @return array containing object type, raw value and offset to next object + * @protected + * @since 1.0.000 (2011-06-20) + */ + protected function getRawObject($offset=0) { + $objtype = ''; // object type to be returned + $objval = ''; // object value to be returned + // skip initial white space chars: \x00 null (NUL), \x09 horizontal tab (HT), \x0A line feed (LF), \x0C form feed (FF), \x0D carriage return (CR), \x20 space (SP) + $offset += strspn($this->pdfdata, "\x00\x09\x0a\x0c\x0d\x20", $offset); + // get first char + $char = $this->pdfdata[$offset]; + // get object type + switch ($char) { + case '%': { // \x25 PERCENT SIGN + // skip comment and search for next token + $next = strcspn($this->pdfdata, "\r\n", $offset); + if ($next > 0) { + $offset += $next; + return $this->getRawObject($offset); + } + break; + } + case '/': { // \x2F SOLIDUS + // name object + $objtype = $char; + ++$offset; + if (preg_match('/^([^\x00\x09\x0a\x0c\x0d\x20\s\x28\x29\x3c\x3e\x5b\x5d\x7b\x7d\x2f\x25]+)/', substr($this->pdfdata, $offset, 256), $matches) == 1) { + $objval = $matches[1]; // unescaped value + $offset += strlen($objval); + } + break; + } + case '(': // \x28 LEFT PARENTHESIS + case ')': { // \x29 RIGHT PARENTHESIS + // literal string object + $objtype = $char; + ++$offset; + $strpos = $offset; + if ($char == '(') { + $open_bracket = 1; + while ($open_bracket > 0) { + if (!isset($this->pdfdata{$strpos})) { + break; + } + $ch = $this->pdfdata{$strpos}; + switch ($ch) { + case '\\': { // REVERSE SOLIDUS (5Ch) (Backslash) + // skip next character + ++$strpos; + break; + } + case '(': { // LEFT PARENHESIS (28h) + ++$open_bracket; + break; + } + case ')': { // RIGHT PARENTHESIS (29h) + --$open_bracket; + break; + } + } + ++$strpos; + } + $objval = substr($this->pdfdata, $offset, ($strpos - $offset - 1)); + $offset = $strpos; + } + break; + } + case '[': // \x5B LEFT SQUARE BRACKET + case ']': { // \x5D RIGHT SQUARE BRACKET + // array object + $objtype = $char; + ++$offset; + if ($char == '[') { + // get array content + $objval = array(); + do { + // get element + $element = $this->getRawObject($offset); + $offset = $element[2]; + $objval[] = $element; + } while ($element[0] != ']'); + // remove closing delimiter + array_pop($objval); + } + break; + } + case '<': // \x3C LESS-THAN SIGN + case '>': { // \x3E GREATER-THAN SIGN + if (isset($this->pdfdata{($offset + 1)}) AND ($this->pdfdata{($offset + 1)} == $char)) { + // dictionary object + $objtype = $char.$char; + $offset += 2; + if ($char == '<') { + // get array content + $objval = array(); + do { + // get element + $element = $this->getRawObject($offset); + $offset = $element[2]; + $objval[] = $element; + } while ($element[0] != '>>'); + // remove closing delimiter + array_pop($objval); + } + } else { + // hexadecimal string object + $objtype = $char; + ++$offset; + if (($char == '<') AND (preg_match('/^([0-9A-Fa-f\x09\x0a\x0c\x0d\x20]+)>/iU', substr($this->pdfdata, $offset), $matches) == 1)) { + // remove white space characters + $objval = strtr($matches[1], "\x09\x0a\x0c\x0d\x20", ''); + $offset += strlen($matches[0]); + } elseif (($endpos = strpos($this->pdfdata, '>', $offset)) !== FALSE) { + $offset = $endpos + 1; + } + } + break; + } + default: { + if (substr($this->pdfdata, $offset, 6) == 'endobj') { + // indirect object + $objtype = 'endobj'; + $offset += 6; + } elseif (substr($this->pdfdata, $offset, 4) == 'null') { + // null object + $objtype = 'null'; + $offset += 4; + $objval = 'null'; + } elseif (substr($this->pdfdata, $offset, 4) == 'true') { + // boolean true object + $objtype = 'boolean'; + $offset += 4; + $objval = 'true'; + } elseif (substr($this->pdfdata, $offset, 5) == 'false') { + // boolean false object + $objtype = 'boolean'; + $offset += 5; + $objval = 'false'; + } elseif (substr($this->pdfdata, $offset, 6) == 'stream') { + // start stream object + $objtype = 'stream'; + $offset += 6; + if (preg_match('/^([\r]?[\n])/isU', substr($this->pdfdata, $offset), $matches) == 1) { + $offset += strlen($matches[0]); + if (preg_match('/(endstream)[\x09\x0a\x0c\x0d\x20]/isU', substr($this->pdfdata, $offset), $matches, PREG_OFFSET_CAPTURE) == 1) { + $objval = substr($this->pdfdata, $offset, $matches[0][1]); + $offset += $matches[1][1]; + } + } + } elseif (substr($this->pdfdata, $offset, 9) == 'endstream') { + // end stream object + $objtype = 'endstream'; + $offset += 9; + } elseif (preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+R/iU', substr($this->pdfdata, $offset, 33), $matches) == 1) { + // indirect object reference + $objtype = 'objref'; + $offset += strlen($matches[0]); + $objval = intval($matches[1]).'_'.intval($matches[2]); + } elseif (preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+obj/iU', substr($this->pdfdata, $offset, 33), $matches) == 1) { + // object start + $objtype = 'obj'; + $objval = intval($matches[1]).'_'.intval($matches[2]); + $offset += strlen ($matches[0]); + } elseif (($numlen = strspn($this->pdfdata, '+-.0123456789', $offset)) > 0) { + // numeric object + $objtype = 'numeric'; + $objval = substr($this->pdfdata, $offset, $numlen); + $offset += $numlen; + } + break; + } + } + return array($objtype, $objval, $offset); + } + + /** + * Get content of indirect object. + * @param $obj_ref (string) Object number and generation number separated by underscore character. + * @param $offset (int) Object offset. + * @param $decoding (boolean) If true decode streams. + * @return array containing object data. + * @protected + * @since 1.0.000 (2011-05-24) + */ + protected function getIndirectObject($obj_ref, $offset=0, $decoding=true) { + $obj = explode('_', $obj_ref); + if (($obj === false) OR (count($obj) != 2)) { + $this->Error('Invalid object reference: '.$obj); + return; + } + $objref = $obj[0].' '.$obj[1].' obj'; + // ignore leading zeros + $offset += strspn($this->pdfdata, '0', $offset); + if (strpos($this->pdfdata, $objref, $offset) != $offset) { + // an indirect reference to an undefined object shall be considered a reference to the null object + return array('null', 'null', $offset); + } + // starting position of object content + $offset += strlen($objref); + // get array of object content + $objdata = array(); + $i = 0; // object main index + do { + $oldoffset = $offset; + // get element + $element = $this->getRawObject($offset); + $offset = $element[2]; + // decode stream using stream's dictionary information + if ($decoding AND ($element[0] == 'stream') AND (isset($objdata[($i - 1)][0])) AND ($objdata[($i - 1)][0] == '<<')) { + $element[3] = $this->decodeStream($objdata[($i - 1)][1], $element[1]); + } + $objdata[$i] = $element; + ++$i; + } while (($element[0] != 'endobj') AND ($offset != $oldoffset)); + // remove closing delimiter + array_pop($objdata); + // return raw object content + return $objdata; + } + + /** + * Get the content of object, resolving indect object reference if necessary. + * @param $obj (string) Object value. + * @return array containing object data. + * @protected + * @since 1.0.000 (2011-06-26) + */ + protected function getObjectVal($obj) { + if ($obj[0] == 'objref') { + // reference to indirect object + if (isset($this->objects[$obj[1]])) { + // this object has been already parsed + return $this->objects[$obj[1]]; + } elseif (isset($this->xref[$obj[1]])) { + // parse new object + $this->objects[$obj[1]] = $this->getIndirectObject($obj[1], $this->xref[$obj[1]], false); + return $this->objects[$obj[1]]; + } + } + return $obj; + } + + /** + * Decode the specified stream. + * @param $sdic (array) Stream's dictionary array. + * @param $stream (string) Stream to decode. + * @return array containing decoded stream data and remaining filters. + * @protected + * @since 1.0.000 (2011-06-22) + */ + protected function decodeStream($sdic, $stream) { + // get stream length and filters + $slength = strlen($stream); + if ($slength <= 0) { + return array('', array()); + } + $filters = array(); + foreach ($sdic as $k => $v) { + if ($v[0] == '/') { + if (($v[1] == 'Length') AND (isset($sdic[($k + 1)])) AND ($sdic[($k + 1)][0] == 'numeric')) { + // get declared stream length + $declength = intval($sdic[($k + 1)][1]); + if ($declength < $slength) { + $stream = substr($stream, 0, $declength); + $slength = $declength; + } + } elseif (($v[1] == 'Filter') AND (isset($sdic[($k + 1)]))) { + // resolve indirect object + $objval = $this->getObjectVal($sdic[($k + 1)]); + if ($objval[0] == '/') { + // single filter + $filters[] = $objval[1]; + } elseif ($objval[0] == '[') { + // array of filters + foreach ($objval[1] as $flt) { + if ($flt[0] == '/') { + $filters[] = $flt[1]; + } + } + } + } + } + } + // decode the stream + $remaining_filters = array(); + foreach ($filters as $filter) { + if (in_array($filter, TCPDF_FILTERS::getAvailableFilters())) { + try { + $stream = TCPDF_FILTERS::decodeFilter($filter, $stream); + } catch (Exception $e) { + $emsg = $e->getMessage(); + if ((($emsg[0] == '~') AND !$this->cfg['ignore_missing_filter_decoders']) + OR (($emsg[0] != '~') AND !$this->cfg['ignore_filter_decoding_errors'])) { + $this->Error($e->getMessage()); + } + } + } else { + // add missing filter to array + $remaining_filters[] = $filter; + } + } + return array($stream, $remaining_filters); + } + + /** + * Throw an exception or print an error message and die if the K_TCPDF_PARSER_THROW_EXCEPTION_ERROR constant is set to true. + * @param $msg (string) The error message + * @public + * @since 1.0.000 (2011-05-23) + */ + public function Error($msg) { + if ($this->cfg['die_for_errors']) { + die('<strong>TCPDF_PARSER ERROR: </strong>'.$msg); + } else { + throw new Exception('TCPDF_PARSER ERROR: '.$msg); + } + } + +} // END OF TCPDF_PARSER CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/tcpdf/tools/.htaccess b/tcpdf/tools/.htaccess new file mode 100644 index 0000000..8d2f256 --- /dev/null +++ b/tcpdf/tools/.htaccess @@ -0,0 +1 @@ +deny from all diff --git a/tcpdf/tools/convert_fonts_examples.txt b/tcpdf/tools/convert_fonts_examples.txt new file mode 100644 index 0000000..d5f8a4e --- /dev/null +++ b/tcpdf/tools/convert_fonts_examples.txt @@ -0,0 +1,28 @@ +./tcpdf_addfont.php -b -t Type1 -f 4 -e symbol -i pdfasymbol.pfb +./tcpdf_addfont.php -b -t Type1 -f 4 -i pdfazapfdingbats.pfb +./tcpdf_addfont.php -b -t Type1 -f 32 -e cp1252 -i pdfatimes.pfb,pdfatimesb.pfb,pdfahelvetica.pfb,pdfahelveticab.pfb +./tcpdf_addfont.php -b -t Type1 -f 33 -e cp1252 -i pdfacourier.pfb,pdfacourierb.pfb +./tcpdf_addfont.php -b -t Type1 -f 96 -e cp1252 -i pdfahelveticabi.pfb,pdfahelveticai.pfb,pdfatimesi.pfb,pdfatimesbi.pfb +./tcpdf_addfont.php -b -t Type1 -f 97 -e cp1252 -i pdfacourieri.pfb,pdfacourierbi.pfb + + +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -i DejaVuSans.ttf,DejaVuSans-Bold.ttf,DejaVuSansCondensed.ttf,DejaVuSansCondensed-Bold.ttf,DejaVuSans-ExtraLight.ttf,DejaVuSerif.ttf,DejaVuSerif-Bold.ttf,DejaVuSerifCondensed.ttf,DejaVuSerifCondensed-Bold.ttf +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 33 -i DejaVuSansMono.ttf,DejaVuSansMono-Bold.ttf +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 96 -i DejaVuSans-BoldOblique.ttf,DejaVuSansCondensed-BoldOblique.ttf,DejaVuSansCondensed-Oblique.ttf,DejaVuSerifCondensed-BoldItalic.ttf,DejaVuSerifCondensed-Italic.ttf,DejaVuSerif-Italic.ttf,DejaVuSerif-BoldItalic.ttf,DejaVuSans-Oblique.ttf +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 97 -i DejaVuSansMono-BoldOblique.ttf,DejaVuSansMono-Oblique.ttf + + + +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -i FreeSans.ttf,FreeSansBold.ttf,FreeSerif.ttf,FreeSerifBold.ttf +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 33 -i FreeMono.ttf,FreeMonoBold.ttf +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 96 -i FreeSansBoldOblique.ttf,FreeSansOblique.ttf,FreeSerifBoldItalic.ttf,FreeSerifItalic.ttf +./tcpdf_addfont.php -b -t TrueTypeUnicode -f 97 -i FreeMonoBoldOblique.ttf,FreeMonoOblique.ttf + + +./tcpdf_addfont.php -b -t TrueTypeUnicode -i aeAlArabiya.ttf,aeFurat.ttf + + +./tcpdf_addfont.php -b -t CID0JP -f 32 -i cid0jp.ttf +./tcpdf_addfont.php -b -t CID0KR -f 32 -i cid0kr.ttf +./tcpdf_addfont.php -b -t CID0CS -f 32 -i cid0cs.ttf +./tcpdf_addfont.php -b -t CID0CT -f 32 -i cid0ct.ttf diff --git a/tcpdf/tools/tcpdf_addfont.php b/tcpdf/tools/tcpdf_addfont.php new file mode 100644 index 0000000..c0b258e --- /dev/null +++ b/tcpdf/tools/tcpdf_addfont.php @@ -0,0 +1,269 @@ +#!/usr/bin/php -q +<?php +//============================================================+ +// File name : tcpdf_addfont.php +// Version : 1.0.002 +// Begin : 2013-05-13 +// Last Update : 2013-08-05 +// Authors : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com +// Remi Collet +// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// ------------------------------------------------------------------- +// Copyright (C) 2011-2013 Nicola Asuni - Tecnick.com LTD +// +// This file is part of TCPDF software library. +// +// TCPDF is free software: you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// TCPDF is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the License +// along with TCPDF. If not, see +// <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : This is a command line script to generate TCPDF fonts. +// +//============================================================+ + +/** + * @file + * This is a command line script to generate TCPDF fonts.<br> + * @package com.tecnick.tcpdf + * @version 1.0.000 + */ + +if (php_sapi_name() != 'cli') { + echo 'You need to run this command from console.'; + exit(1); +} + +$tcpdf_include_dirs = array(realpath(dirname(__FILE__).'/../tcpdf.php'), '/usr/share/php/tcpdf/tcpdf.php', '/usr/share/tcpdf/tcpdf.php', '/usr/share/php-tcpdf/tcpdf.php', '/var/www/tcpdf/tcpdf.php', '/var/www/html/tcpdf/tcpdf.php', '/usr/local/apache2/htdocs/tcpdf/tcpdf.php'); +foreach ($tcpdf_include_dirs as $tcpdf_include_path) { + if (@file_exists($tcpdf_include_path)) { + require_once($tcpdf_include_path); + break; + } +} + +/** + * Display help guide for this command. + */ +function showHelp() { + $help = <<<EOD +tcpdf_addfont - command line tool to convert fonts for the TCPDF library. + +Usage: tcpdf_addfont.php [ options ] -i fontfile[,fontfile]... + +Options: + + -t + --type Font type. Leave empty for autodetect mode. + Valid values are: + TrueTypeUnicode + TrueType + Type1 + CID0JP = CID-0 Japanese + CID0KR = CID-0 Korean + CID0CS = CID-0 Chinese Simplified + CID0CT = CID-0 Chinese Traditional + + -e + --enc Name of the encoding table to use. Leave empty for + default mode. Omit this parameter for TrueType Unicode + and symbolic fonts like Symbol or ZapfDingBats. + + -f + --flags Unsigned 32-bit integer containing flags specifying + various characteristics of the font (PDF32000:2008 - + 9.8.2 Font Descriptor Flags): +1 for fixed font; +4 for + symbol or +32 for non-symbol; +64 for italic. Fixed and + Italic mode are generally autodetected so you have to + set it to 32 = non-symbolic font (default) or 4 = + symbolic font. + + -o + --outpath Output path for generated font files (must be writeable + by the web server). Leave empty for default font folder. + + -p + --platid Platform ID for CMAP table to extract (when building a + Unicode font for Windows this value should be 3, for + Macintosh should be 1). + + -n + --encid Encoding ID for CMAP table to extract (when building a + Unicode font for Windows this value should be 1, for + Macintosh should be 0). When Platform ID is 3, legal + values for Encoding ID are: 0=Symbol, 1=Unicode, + 2=ShiftJIS, 3=PRC, 4=Big5, 5=Wansung, 6=Johab, + 7=Reserved, 8=Reserved, 9=Reserved, 10=UCS-4. + + -b + --addcbbox Includes the character bounding box information on the + php font file. + + -l + --link Link to system font instead of copying the font data # + (not transportable) - Note: do not work with Type1 fonts. + + -i + --fonts Comma-separated list of input font files. + + -h + --help Display this help and exit. +EOD; + echo $help."\n\n"; + exit(0); +} + +// remove the name of the executing script +array_shift($argv); + +// no options chosen +if (!is_array($argv)) { + showHelp(); +} + +// initialize the array of options +$options = array('type'=>'', 'enc'=>'', 'flags'=>32, 'outpath'=>K_PATH_FONTS, 'platid'=>3, 'encid'=>1, 'addcbbox'=>false, 'link'=>false); + +// short input options +$sopt = ''; +$sopt .= 't:'; +$sopt .= 'e:'; +$sopt .= 'f:'; +$sopt .= 'o:'; +$sopt .= 'p:'; +$sopt .= 'n:'; +$sopt .= 'b'; +$sopt .= 'l'; +$sopt .= 'i:'; +$sopt .= 'h'; + +// long input options +$lopt = array(); +$lopt[] = 'type:'; +$lopt[] = 'enc:'; +$lopt[] = 'flags:'; +$lopt[] = 'outpath:'; +$lopt[] = 'platid:'; +$lopt[] = 'encid:'; +$lopt[] = 'addcbbox'; +$lopt[] = 'link'; +$lopt[] = 'fonts:'; +$lopt[] = 'help'; + +// parse input options +$inopt = getopt($sopt, $lopt); + +// import options (with some sanitization) +foreach ($inopt as $opt => $val) { + switch ($opt) { + case 't': + case 'type': { + if (in_array($val, array('TrueTypeUnicode', 'TrueType', 'Type1', 'CID0JP', 'CID0KR', 'CID0CS', 'CID0CT'))) { + $options['type'] = $val; + } + break; + } + case 'e': + case 'enc': { + $options['enc'] = $val; + break; + } + case 'f': + case 'flags': { + $options['flags'] = intval($val); + break; + } + case 'o': + case 'outpath': { + $options['outpath'] = realpath($val); + if (substr($options['outpath'], -1) != '/') { + $options['outpath'] .= '/'; + } + break; + } + case 'p': + case 'platid': { + $options['platid'] = min(max(1, intval($val)), 3); + break; + } + case 'n': + case 'encid': { + $options['encid'] = min(max(0, intval($val)), 10); + break; + } + case 'b': + case 'addcbbox': { + $options['addcbbox'] = true; + break; + } + case 'l': + case 'link': { + $options['link'] = true; + break; + } + case 'i': + case 'fonts': { + $options['fonts'] = explode(',', $val); + break; + } + case 'h': + case 'help': + default: { + showHelp(); + break; + } + } // end of switch +} // end of while loop + +if (empty($options['fonts'])) { + echo "ERROR: missing input fonts (try --help for usage)\n\n"; + exit(2); +} + +// check the output path +if (!is_dir($options['outpath']) OR !is_writable($options['outpath'])) { + echo "ERROR: Can't write to ".$options['outpath']."\n\n"; + exit(3); +} + +echo "\n>>> Converting fonts for TCPDF:\n"; + +echo '*** Output dir set to '.$options['outpath']."\n"; + +// check if there are conversion errors +$errors = false; + +foreach ($options['fonts'] as $font) { + $fontfile = realpath($font); + $fontname = TCPDF_FONTS::addTTFfont($fontfile, $options['type'], $options['enc'], $options['flags'], $options['outpath'], $options['platid'], $options['encid'], $options['addcbbox'], $options['link']); + if ($fontname === false) { + $errors = true; + echo "--- ERROR: can't add ".$font."\n"; + } else { + echo "+++ OK : ".$fontfile.' added as '.$fontname."\n"; + } +} + +if ($errors) { + echo "--- Process completed with ERRORS!\n\n"; + exit(4); +} + +echo ">>> Process successfully completed!\n\n"; +exit(0); + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/test.php b/test.php new file mode 100644 index 0000000..0fe4e43 --- /dev/null +++ b/test.php @@ -0,0 +1,50 @@ +<?php +/** + * Created by PhpStorm. + * User: Przemek + * Date: 2015-10-15 + * Time: 11:13 + */ + +date_default_timezone_set('Europe/Warsaw'); +require_once("func.php"); +require_once("dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + +echo"Start: ".date('H:i:s:u')."<br/>"; + +$result = mysql_query("select * from rep_his_data_everyday where RHD_DATE>(select DATE_SUB(sysdate(), INTERVAL 90 DAY)) and RHD_DRS_ID=3143"); +while ($row = mysql_fetch_array($result, MYSQL_NUM)) { + $res[] = array( + 'id'=> $row[0], + 'dev_id'=> $row[1], + 'date'=>$row[2], + 'hst'=>$row[3], + 'hd'=>$row[4], + 'q'=>$row[5], + 'p1'=>$row[6], + 'p2'=>$row[7], + 'i'=>$row[8], + 'u'=>$row[9], + 'pe'=>$row[10], + 'cos'=>$row[11], + 'pp'=>$row[12], + 'hh'=>$row[13], + 'dgn'=>$row[14], + 'work_time'=>$row[15], + 'audit_date'=>$row[16] + ); +} +mysql_free_result($result); +echo"Stop: ".date('H:i:s:u')."<br/>"; + +print_r($res); + +mysql_close($polacz); + + + +?> diff --git a/test_dat.php b/test_dat.php new file mode 100644 index 0000000..a278284 --- /dev/null +++ b/test_dat.php @@ -0,0 +1,78 @@ +<?php @ob_start(); ?> +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Bootstrap 101 Template</title> + + <!-- Bootstrap --> + <link href="css/bootstrap.min.css" rel="stylesheet"> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + + <style type="text/css"> + #loader { + border: 16px solid #f3f3f3; /* Light grey */ + border-top: 16px solid #3498db; /* Blue */ + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + + position:absolute; + left:50%; /* wyśrodkowujemy w poziomie */ + top:50%; /* wyśrodkowujemy w pionie */ + background-position:center; + margin:-64px 0 0 -64px; /* no bo chcemy idealnie wycentrować, nie? */ + } + + @keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + </style> + + + + </head> + <body> + + <div id="loader"></div> + + + + <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> + <!-- Include all compiled plugins (below), or include individual files as needed --> + <script src="js/bootstrap.min.js"></script> + + <script type="text/javascript"> + + $(window).load(function() { + // Animate loader off screen + //$('#preloader').hide(); + //$('#loader').hide(); + + $.post( "./ajax_func.php", { post_action: "rep006", done: "create", dep: "Bełchatów" }).done(function(data) + { + $('#loader').hide(); + } + ); + }); + </script> + + + + </body> +</html> +<?php +ob_end_flush(); +?> diff --git a/time_water.php b/time_water.php new file mode 100644 index 0000000..38bdb1d --- /dev/null +++ b/time_water.php @@ -0,0 +1,143 @@ +<!DOCTYPE html> +<html lang="pl"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="shortcut icon" href="../images/SoftSPM.ico"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <title>Bad SYNDIS to SoftSPM</title> + + <!-- Bootstrap --> + <link href="bootstrap.min.css" rel="stylesheet"> + +<meta http-equiv="Refresh" content="1" /> + +</head> +<body> +<?php + +date_default_timezone_set('Europe/Warsaw'); +require_once("./func.php"); +require_once("./dbaccess.php"); +require_once('./polynomial/PolynomialRegression.php' ); + +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + +?> + +<h1>Przeliczanie czasu pracy oraz ilości wypompowanej wody dla studni</h1> + +<?php + +//studnie +//$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday,seg_dev_resources where DRS_ID=RHD_DRS_ID and DRS_DEPARTMENT='Dębina' and (RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) limit 300"); +//$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday,seg_dev_resources where DRS_ID=RHD_DRS_ID and DRS_DEPARTMENT='Dębina' and RHD_Q_VAL>0 and RHD_DATE>=ADDDATE(now(), INTERVAL -12 HOUR) and (RHD_SPM_WT=0 or RHD_SPM_WT is null or RHD_WORK_TIME_VAL=0 or RHD_WORK_TIME_VAL is null) limit 100"); +//$wellArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DATE>='2016-09-01 00:00:00' and RHD_DATE<=ADDDATE(now(), INTERVAL -2 HOUR) and (RHD_SPM_WT is null or RHD_WORK_TIME_VAL is null) order by RHD_DATE desc limit 100"); +unset($ileNowychWpisow); +$ileNowychWpisow = sqlGetResAsArray("select count(*) as ile from softspm_rep.rep_002_is_set_new_onoff_signals"); + +if ($ileNowychWpisow[0]['ile']==0) +{ + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DATE>='2016-09-01 00:00:00' and (RHD_SPM_WT is null or RHD_WORK_TIME_VAL is null) order by RHD_DATE desc limit 100"); + echo'przelicza <br/>'; +} +else +{ + unset($wellArray); + $wellArray = sqlGetResAsArray("select * from rep_his_data_everyday where RHD_Q_VAL>9000 and RHD_DATE>='5000-12-31' limit 0"); + echo'pomija <br/>'; +} + +for($i=0; $i<count($wellArray); $i++) +{ + if ($wellArray[$i]['RHD_Q_VAL']>0 || $wellArray[$i]['RHD_I_VAL']>0) + { + unset($czasArray); + $czasArray = sqlGetResAsArray("select WLE_DATE_FROM,WLE_DATE_TO from seg_wells_exchanged,seg_dev_resources where WLE_WLL_ID=DRS_DEV_ID and DRS_DEV_TYPE=12 and DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and WLE_DATE_FROM<='".$wellArray[$i]['RHD_DATE']."' and (WLE_DATE_TO>='".$wellArray[$i]['RHD_DATE']."' or WLE_DATE_TO is null)"); + unset($czas); + if (strlen($czasArray[0]['WLE_DATE_TO']>8)) + { + if ( (strtotime($wellArray[$i]['RHD_DATE']) - strtotime($czasArray[0]['WLE_DATE_TO']))>0 ) + $wellArray[$i]['RHD_DATE'] = $czasArray[0]['WLE_DATE_TO']; + } + + $czas = fCzas($wellArray[$i]['RHD_DRS_ID'], $czasArray[0]['WLE_DATE_FROM'], $wellArray[$i]['RHD_DATE']); + $czas = round($czas/3600,2); + + //echo "Studnia: ".$wellArray[$i]['RHD_DRS_ID'].", data: ".$wellArray[$i]['RHD_DATE'].", CZAS=".$czas."<br>"; + + $woda=0; + if($czas>0) + { + //$woda=sqlStringValue("select AVG(RHD_Q_VAL) RHD_Q_VAL from softspm_rep.".$tbaName." where RHD_Q_VAL>0 and RHD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and RHD_DATE>='".$czasArray[0]['WLE_DATE_FROM']."' and RHD_DATE<='".$wellArray[$i]['RHD_DATE']."'", "RHD_Q_VAL"); + //if (empty($woda) || $woda<=0) + // $woda=sqlStringValue("select RHD_Q_VAL from rep_his_data_everyday where RHD_ID=(select max(RHD_ID) from rep_his_data_everyday where RHD_Q_VAL>0 and RHD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and RHD_DATE<='".$wellArray[$i]['RHD_DATE']."')", "RHD_Q_VAL"); + + //$woda=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and AVG_DATE>='".$czasArray[0]['WLE_DATE_FROM']."' and AVG_DATE<='".$wellArray[$i]['RHD_DATE']."'", "AVG_Q_VAL"); + $woda=sqlStringValue("select AVG(AVG_Q_VAL) AVG_Q_VAL from softspm_rep.rep_002_avg_efficiency where AVG_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']." and AVG_DATE>=ADDDATE('".$czasArray[0]['WLE_DATE_FROM']."', INTERVAL -1 DAY) and AVG_DATE<='".$wellArray[$i]['RHD_DATE']."'", "AVG_Q_VAL"); + } + + //echo "Studnia: ".$wellArray[$i]['RHD_DRS_ID'].", data: ".$wellArray[$i]['RHD_DATE'].", WODA=".($woda*$czas)."<br><br>"; + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.", RHD_VM3_VAL=".($woda*$czas).",RHD_SPM_WT=".$czas.",RHD_SPM_PW=".($woda*$czas)." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo"<br>"; + + //czas + //mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + //mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=round(".$czas.",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + + //woda + //mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + //mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=round(".($woda*$czas).",2),DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water',DRD_AUDIT_DATE='".$insDate."'"); + + + +/* + * + * +//UPDATE rep_his_data_everyday SET RHD_VM3_VAL=NULL,RHD_WORK_TIME_VAL=NULL, RHD_SPM_WT=NULL,RHD_SPM_PW=NULL WHERE RHD_DRS_ID in (select DRS_ID from seg_dev_resources where DRS_DEPARTMENT='Dębina' and DRS_DEV_TYPE=12) + unset($woda); + $woda = getGlobalPumpedWaterRangeDate($wellArray[$i]['RHD_DRS_ID'], $wellArray[$i]['RHD_DATE']); + + mysql_query("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.",RHD_VM3_VAL=".$woda." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo("UPDATE rep_his_data_everyday SET RHD_WORK_TIME_VAL=".$czas.",RHD_VM3_VAL=".$woda." WHERE RHD_ID=".$wellArray[$i]['RHD_ID']); + echo"<br>"; + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=230 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=".$woda.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=230,DRD_VALUE=".$woda.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo"<br>"; + + + mysql_query("delete FROM seg_dev_resources_det WHERE DRD_RESOURCES_DETAIL=290 and DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID']); + mysql_query("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=".$czas.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo("insert INTO seg_dev_resources_det SET DRD_DRS_ID=".$wellArray[$i]['RHD_DRS_ID'].",DRD_RESOURCES_DETAIL=290,DRD_VALUE=".$czas.",DRD_EXPORT_SEGAP='1',DRD_AUDIT_USR='debina_time_water.php',DRD_AUDIT_DATE=now()"); + echo"<br>"; + echo"<br>"; +*/ + + + + } +} + + +?> + + + + +<?php +mysql_close($polacz); + +?> +</body> +</html> \ No newline at end of file diff --git a/trzeciCloude_v1.code-workspace b/trzeciCloude_v1.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/trzeciCloude_v1.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/webservice/class.complextypes.php b/webservice/class.complextypes.php new file mode 100644 index 0000000..22418f4 --- /dev/null +++ b/webservice/class.complextypes.php @@ -0,0 +1,128 @@ +<?php + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +/** + * @pw_set nillable=false + * @pw_element string $RYGStatus + * @pw_set nillable=false + * @pw_element string $url + * @pw_complex GetWellRYGResponse GetWellRYG response object + */ +class GetWellRYGResponse{ + public $RYGStatus='G'; + public $url=null; +} + +/** + * @pw_set nillable=false + * @pw_element string $WellId Well Id as string in ex. Q50 + * @pw_complex GetWellRYGRequest GetWellRYG request object + */ +class GetWellRYGRequest{ + public $WellId; +} + +/** + * @pw_set nillable=false + * @pw_element string $PumpId Pump Id as string in ex. Q50 + * @pw_complex GetPumpParametersRequest GetPumpParameters request object + */ +class GetPumpParametersRequest { + public $PumpId; +} + +/** + * @pw_set nillable=false + * @pw_element string $PumpType + * @pw_set nillable=false + * @pw_element string $PumpNumber + * @pw_complex GetPumpParametersResponse GetPumpParameters response object + */ +class GetPumpParametersResponse{ + public $PumpType; + public $PumpNumber; +} + +/** + * @pw_set nillable=false + * @pw_element string $EngineId Engine Id as string in ex. Q50 + * @pw_complex GetEngineParametersRequest GetEngineParameters request object + */ +class GetEngineParametersRequest { + public $EngineId; +} + +/** + * @pw_set nillable=false + * @pw_element string $EngineType + * @pw_set nillable=false + * @pw_element string $EngineNumber + * @pw_complex GetEngineParametersResponse GetEngineParameters response object + */ +class GetEngineParametersResponse{ + public $EngineType; + public $EngineNumber; +} + +/** + * @pw_set nillable=false + * @pw_element string $WellId Well Id as string in ex. Q50 + * @pw_complex GetWellParametersRequest GetWellParameters request object + */ +class GetWellParametersRequest { + public $WellId; +} + +/** + * @pw_set nillable=false + * @pw_element string $WellDepth + * @pw_complex GetWellParametersResponse GetWellParameters response object + */ +class GetWellParametersResponse{ + public $WellDepth; +} + +/** + * @pw_set nillable=false + * @pw_element string $WellId Well Id as string in ex. Q50 + * @pw_complex GetWellOrdinateRequest GetWellOrdinate request object + */ +class GetWellOrdinateRequest { + public $WellId; +} + +/** + * @pw_set nillable=false + * @pw_element string $HoleX + * @pw_set nillable=false + * @pw_element string $HoleY + * @pw_set nillable=false + * @pw_element string $HoleOrdinate + * @pw_set nillable=false + * @pw_element string $HoleDepth + * @pw_set nillable=false + * @pw_element string $PrimaryTerrainOrdinate + * @pw_complex GetWellOrdinateResponse GetWellOrdinate response object + */ +class GetWellOrdinateResponse{ + public $HoleX; + public $HoleY; + public $HoleOrdinate; + public $HoleDepth; + public $PrimaryTerrainOrdinate; +} + +// syndis przesyła aktualny status załączenia - wyłączenia +class SetWellOnOffStatusRequest { + public $WellId; + public $OnOff; + public $DateOnOff; + public $OnOffReason; +} + +class SetWellOnOffStatusResponse{ + public $OnOffStatus; +} + diff --git a/webservice/class.soap.php b/webservice/class.soap.php new file mode 100644 index 0000000..a083487 --- /dev/null +++ b/webservice/class.soap.php @@ -0,0 +1,187 @@ +<?php + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +/** + * This webservice provides status and url of well + * + * @service SoapRYG + */ +class SoapRYG{ + /** + * Return status (red/yellow/green) and url of well + * @param GetWellRYGRequest $WellId + * @return GetWellRYGResponse + */ + public function GetWellRYG($WellId) { + $pumpIdentifier = $WellId->WellId; //zmienna $pumpIdentifier zawierac bedze identyfikator pompy PUMP1234 + $wynik = mysql_query("select SWE_DRS_ID,SWE_VALUE from rep_soap_well_energy where SWE_NAME='".$pumpIdentifier."'"); + $devID=null; $well_ID=null; + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $devID = $r["SWE_DRS_ID"]; + $engStat = $r["SWE_VALUE"]; + } + + $returnObject = new GetWellRYGResponse(); + $returnObject->RYGStatus=$engStat; // do tej zmiennej trzeba przypisac R/Y/G + $returnObject->url = 'http://172.21.11.101/?pg=site401mark&dev='.$devID; // do tej zmiennej trzeba przypisac URL + return $returnObject; + } + + + + /** + * Returns pump type and pump number + * @param GetPumpParametersRequest $Pump + * @return GetPumpParametersResponse + */ + public function GetPumpParameters($Pump) { + $pumpIdentifier = $Pump->PumpId; //zmienna $pumpIdentifier zawierac bedze identyfikator pompy PUMP1234 + //select RWL_PUP_DRS_ID,RWL_ENG_DRS_ID from seg_wells left join seg_well_pump_eng_rel on WLL_ID=RWL_WLL_ID where WLL_NAME='G50' + $wynik = mysql_query("select RWL_PUP_DRS_ID from seg_wells left join seg_well_pump_eng_rel on WLL_ID=RWL_WLL_ID where WLL_NAME='".$pumpIdentifier."'"); + $devID=null; + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $devID = $r["RWL_PUP_DRS_ID"]; + } + + $wynik = mysql_query("select PUP_NAME,DRS_SN_NUMBER from seg_dev_resources left join seg_pumps on PUP_ID=DRS_DEV_ID and DRS_DEV_TYPE=10 where DRS_ID=".$devID); + $pName=null;$pNo=null; + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $pName = $r["PUP_NAME"]; + $pNo = $r["DRS_SN_NUMBER"]; + } + + $returnObject = new GetPumpParametersResponse(); + $returnObject->PumpType = $pName; // do tej zmiennej trzeba przypisac typ pompy + $returnObject->PumpNumber = $pNo; //do tej zmiennej trzeba przypisać numer pompy + return $returnObject; + } + + + /** + * Returns engine type and pump number + * @param GetEngineParametersRequest $Engine + * @return GetEngineParametersResponse + */ + public function GetEngineParameters($Engine) { + $engineIdentifier = $Engine->EngineId; //zmienna $engineIdentifier zawierac bedze identyfikator silnika SILNIK12 + + //select RWL_PUP_DRS_ID,RWL_ENG_DRS_ID from seg_wells left join seg_well_pump_eng_rel on WLL_ID=RWL_WLL_ID where WLL_NAME='G50' + $wynik = mysql_query("select RWL_ENG_DRS_ID from seg_wells left join seg_well_pump_eng_rel on WLL_ID=RWL_WLL_ID where WLL_NAME='".$engineIdentifier."'"); + $devID=null; + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $devID = $r["RWL_ENG_DRS_ID"]; + } + + $wynik = mysql_query("select ENG_NAME,DRS_SN_NUMBER from seg_dev_resources left join seg_engines on DRS_DEV_ID=ENG_ID and DRS_DEV_TYPE=11 where DRS_ID=".$devID); + $eName=null;$eNo=null; + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $eName = $r["ENG_NAME"]; + $eNo = $r["DRS_SN_NUMBER"]; + } + + + $returnObject = new GetEngineParametersResponse(); + $returnObject->EngineType = $eName; // do tej zmiennej trzeba przypisac typ silnika + $returnObject->EngineNumber = $eNo; //do tej zmiennej trzeba przypisać numer silnika + return $returnObject; + } + + + /** + * Returns depth of well + * @param GetWellParametersRequest $Well + * @return GetWellParametersResponse + */ + public function GetWellParameters($Well) { + $wellIdentifier = $Well->WellId; //zmienna $wellIdentifier zawierac bedze identyfkator studni + $drsID=sqlValue("select DRS_ID from seg_wells left join seg_dev_resources on DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 where WLL_NAME='".$wellIdentifier."'"); + + $returnObject = new GetWellParametersResponse(); + $returnObject->WellDepth=getLastValueFromDevResourceDetail('WELL_PARAMETERS','LPM',$drsID); // do tej zmiennej trzeba przypisac glebokosc studni + return $returnObject; + } + + + /** + * Returns hole data of well + * @param GetWellOrdinateRequest $Well + * @return GetWellOrdinateResponse + */ + public function GetWellOrdinate($Well) { + $wellIdentifier = $Well->WellId; //zmienna $wellIdentifier zawierac bedze identyfkator studni + + $wynik = mysql_query("select OHC_GLEB_OSTAT,OHC_RZEDNA_TERENU_ACT,OHC_DL_GEOGR,OHC_SZER_GEOGR,OHC_RZEDNA_TEREN from seg_object_hole_cards where OHC_NAME='".$wellIdentifier."'"); + $eName=null;$eNo=null; + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $wHoleDepth = $r["OHC_GLEB_OSTAT"]; + $wHoleOrdinate = $r["OHC_RZEDNA_TERENU_ACT"]; + $wHoleY = $r["OHC_DL_GEOGR"]; + $wHoleX = $r["OHC_SZER_GEOGR"]; + $wHoleOryginal = $r["OHC_RZEDNA_TEREN"]; + } + + $returnObject = new GetWellOrdinateResponse(); + $returnObject->HoleX=$wHoleX; // do tej zmiennej trzeba przypisac x otworu + $returnObject->HoleY=$wHoleY; // do tej zmiennej trzeba przypisac y otworu + $returnObject->HoleOrdinate=$wHoleOrdinate; // do tej zmiennej trzeba przypisac rzedna otworu + $returnObject->HoleDepth=$wHoleDepth; // do tej zmiennej trzeba przypisac glebokosc otworu + $returnObject->PrimaryTerrainOrdinate=$wHoleOryginal; // do tej zmiennej trzeba przypisac rzedna pierwotna + return $returnObject; + } + + /** + * Insert new status of OnOff for Well + * @param SetWellOnOffStatusRequest $Well, $Status, $Date + * @return SetWellOnOffStatusResponse OnOffStatus + */ + public function SetWellOnOffStatus($Well, $Status, $Date, $Reason) + { + $wellIdentifier = $Well->WellId; //zmienna $wellIdentifier zawierac bedze identyfkator studni + $wellStatus = $Status->OnOff; //zmienna $wellStatus zawierac bedze identyfkator studni + $wellDate = $Date->DateOnOff; //zmienna $wellDate zawierac bedze datę + $wellReason = $Reason->OnOffReason; //zmienna $wellReason - przyczyna wyłącenia + + + $wynik = mysql_query("select DRS_ID from seg_dev_resources,seg_wells where DRS_DEV_ID=WLL_ID and DRS_DEV_TYPE=12 and WLL_NAME='".$wellIdentifier."'"); + $devID=null; $well_status=null; + if($wynik)while ($r = mysql_fetch_array($wynik)) + { + $devID = $r["DRS_ID"]; + } + + if ($devID>0) + { + if ($wellStatus==1) $well_status='ON'; + else $well_status='OFF'; + + $wellDate = date('Y-m-d H:i:s', strtotime($wellDate)); + mysql_query("INSERT INTO seg_dev_resources_det SET DRD_DRS_ID=".$devID.",DRD_RESOURCES_DETAIL=507,DRD_VALUE='".$well_status."',DRD_DESCRIPTION='".$wellReason."',DRD_AUDIT_USR='SYNDIS',DRD_AUDIT_DATE='".$wellDate."'"); + } + + $returnObject = new SetWellOnOffStatusResponse(); + $returnObject->OnOffStatus=$well_status; // aktualny status + return $returnObject; + + } + + + /** + * This method should not be visible in WSDL - but notice: + * If the PHP SoapServer doesn't know the WSDL, this method is still accessable for SOAP requests! + * + * @ignore + * @param unknown_type $var + * @return string + */ + public function PrintVariable($var){ + return print_r($var,true); + } +} \ No newline at end of file diff --git a/webservice/lib/class.phpwsdl.php b/webservice/lib/class.phpwsdl.php new file mode 100644 index 0000000..71d3b22 --- /dev/null +++ b/webservice/lib/class.phpwsdl.php @@ -0,0 +1,2443 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +// Debugging +/*PhpWsdl::$Debugging=true;// Enable debugging +PhpWsdl::$DebugFile='./cache/debug.log';// The logfile to write the debugging messages to +PhpWsdl::$DebugBackTrace=false;// Include backtrace information in debugging messages?*/ + +// Initialize PhpWsdl +PhpWsdl::Init(); + +// You don't require class.phpwsdlelement.php and class.phpwsdlcomplex.php, +// as long as you don't use complex types. So you may comment those two +// requires out. +// You may also disable loading the class.phpwsdlproxy.php, if you don't plan +// to use the proxy class for your webservice. +require_once(dirname(__FILE__).'/class.phpwsdlformatter.php'); +require_once(dirname(__FILE__).'/class.phpwsdlobject.php'); +require_once(dirname(__FILE__).'/class.phpwsdlparser.php'); +require_once(dirname(__FILE__).'/class.phpwsdlproxy.php'); +require_once(dirname(__FILE__).'/class.phpwsdlparam.php'); +require_once(dirname(__FILE__).'/class.phpwsdlmethod.php'); +require_once(dirname(__FILE__).'/class.phpwsdlelement.php'); +require_once(dirname(__FILE__).'/class.phpwsdlcomplex.php'); + +// Do things after the environment is configured +PhpWsdl::PostInit(); + +/** + * PhpWsdl class + * + * @author Andreas Zimmermann + * @copyright 2011 Andreas Zimmermann, wan24.de + * @version 2.3 + */ +class PhpWsdl{ + /** + * The version number + * + * @var string + */ + public static $VERSION='2.3'; + /** + * Set this to TRUE to enable the autorun in quick mode + * + * @var boolean + */ + public static $AutoRun=false; + /** + * Global static configuration + * + * @var array + */ + public static $Config=Array(); + /** + * The webservice handler object + * + * @var object + */ + public static $ProxyObject=null; + /** + * The current PhpWsdl server + * + * @var PhpWsdl + */ + public static $ProxyServer=null; + /** + * Use WSDL with the proxy + * + * @var boolean + */ + public static $UseProxyWsdl=false; + /** + * The name + * + * @var string + */ + public $Name; + /** + * Documentation + * + * @var string + */ + public $Docs=null; + /** + * The namespace + * + * @var string + */ + public $NameSpace=null; + /** + * The SOAP endpoint URI + * + * @var string + */ + public $EndPoint=null; + /** + * Set this to the WSDL URI, if it's different from your SOAP endpoint + "?WSDL" + * + * @var string + */ + public $WsdlUri=null; + /** + * Set this to the PHP URI, if it's different from your SOAP endpoint + "?PHPSOAPCLIENT" + * + * @var string + */ + public $PhpUri=null; + /** + * Set this to the HTML documentation URI, if it's different from your SOAP endpoint + * + * @var string + */ + public $DocUri=null; + /** + * The options for the PHP SoapServer + * Note: "actor" and "uri" will be set at runtime + * + * @var array + */ + public $SoapServerOptions=null; + /** + * An array of file names to parse + * + * @var string[] + */ + public $Files=Array(); + /** + * An array of complex types + * + * @var PhpWsdlComplex[] + */ + public $Types=null; + /** + * An array of method + * + * @var PhpWsdlMethod[] + */ + public $Methods=null; + /** + * Remove tabs and line breaks? + * Note: Unoptimized WSDL won't be cached + * + * @var boolean + */ + public $Optimize=true; + /** + * UTF-8 encoded WSDL from the last CreateWsdl method call + * + * @var string + */ + public $WSDL=null; + /** + * UTF-8 encoded HTML from the last OutputHtml method call + * + * @var string + */ + public $HTML=null; + /** + * UTF-8 encoded PHP from the last OutputPhp method call + * + * @var string + */ + public $PHP=null; + /** + * An array of basic types (these are just some of the XSD defined types + * (see http://www.w3.org/TR/2001/PR-xmlschema-2-20010330/) + * + * @var string[] + */ + public static $BasicTypes=Array( + 'anyType', + 'anyURI', + 'base64Binary', + 'boolean', + 'byte', + 'date', + 'decimal', + 'double', + 'duration', + 'dateTime', + 'float', + 'gDay', + 'gMonthDay', + 'gYearMonth', + 'gYear', + 'hexBinary', + 'int', + 'integer', + 'long', + 'NOTATION', + 'number', + 'QName', + 'short', + 'string', + 'time' + ); + /** + * A list of non-nillable types + * + * @var string[] + */ + public static $NonNillable=Array( + 'boolean', + 'decimal', + 'double', + 'float', + 'int', + 'integer', + 'long', + 'number', + 'short' + ); + /** + * Set this to a writeable folder to enable caching the WSDL in files + * + * @var string + */ + public static $CacheFolder=null; + /** + * Is the cache folder writeable? + * + * @var boolean|NULL + */ + public static $CacheFolderWriteAble=null; + /** + * The cache timeout in seconds (set to zero to disable caching, too) + * If you set the value to -1, the cache will never expire. Then you have + * to use the PhpWsdl->TidyCache method for cleaning up the cache once + * you've made changes to your webservice. + * + * @var int + */ + public static $CacheTime=3600; + /** + * Write even unoptimized and/or documented XML to the cache? + * + * @var boolean + */ + public static $CacheAllWsdl=false; + /** + * Parse documentation? + * + * @var boolean + */ + public $ParseDocs=true; + /** + * Include documentation tags in WSDL, if the optimizer is disabled? + * + * @var boolean + */ + public $IncludeDocs=true; + /** + * Force sending WSDL (has a higher priority than PhpWsdl->ForceNotOutputWsdl) + * + * @var boolean + */ + public $ForceOutputWsdl=false; + /** + * Force NOT sending WSDL (disable sending WSDL, has a higher priority than ?WSDL f.e.) + * + * @var boolean + */ + public $ForceNotOutputWsdl=false; + /** + * Force sending HTML (has a higher priority than PhpWsdl->ForceNotOutputHtml) + * + * @var boolean + */ + public $ForceOutputHtml=false; + /** + * Force NOT sending HTML (disable sending HTML) + * + * @var boolean + */ + public $ForceNotOutputHtml=false; + /** + * The headline for the HTML output or NULL to use the default + * + * @var string + */ + public $HtmlHeadLine=null; + /** + * Force sending PHP (has a higher priority than PhpWsdl->ForceNotOutputPhp) + * + * @var boolean + */ + public $ForceOutputPhp=false; + /** + * Force NOT sending PHP (disable sending PHP) + * + * @var boolean + */ + public $ForceNotOutputPhp=false; + /** + * Regular expression parse a class name + * + * @var string + */ + public static $classRx='/^.*class\s+([^\s]+)\s*\{.*$/is'; + /** + * The HTML2PDF license key (see www.htmltopdf.de) + * + * @var string + */ + public static $HTML2PDFLicenseKey=null; + /** + * The URI to the HTML2PDF http API + * + * @var string + */ + public static $HTML2PDFAPI='http://online.htmltopdf.de/'; + /** + * The HTML2PDF settings (only available when using a valid license key) + * + * @var array + */ + public static $HTML2PDFSettings=Array(); + /** + * Saves if the sources have been parsed + * + * @var boolean + */ + public $SourcesParsed=false; + /** + * Saves if the configuration has already been determined + * + * @var boolean + */ + public $ConfigurationDetermined=false; + /** + * The current PHP SoapServer object + * + * @var SoapServer + */ + public $SoapServer=null; + /** + * Is a http Auth login required to run the SOAP server? + * + * @var boolean + */ + public $RequireLogin=false; + /** + * Debugging messages + * + * @var string[] + */ + public static $DebugInfo=Array(); + /** + * En- / Disable the debugging mode + * + * @var boolean + */ + public static $Debugging=false; + /** + * The debug file to write to + * + * @var string + */ + public static $DebugFile=null; + /** + * Put backtrace information in debugging messages + * + * @var boolean + */ + public static $DebugBackTrace=false; + /** + * WSDL namespaces + * + * @var array + */ + public static $NameSpaces=null; + + /** + * PhpWsdl constructor + * Note: The quick mode by giving TRUE as first parameter is deprecated and will be removed from version 3.0. + * Use PhpWsdl::RunQuickMode() instead + * + * @param string|boolean $nameSpace Namespace or NULL to let PhpWsdl determine it, or TRUE to run everything by determining all configuration -> quick mode (default: NULL) + * @param string|string[] $endPoint Endpoint URI or NULL to let PhpWsdl determine it - or, in quick mode, the webservice class filename(s) (default: NULL) + * @param string $cacheFolder The folder for caching WSDL or NULL to use the systems default (default: NULL) + * @param string|string[] $file Filename or array of filenames or NULL (default: NULL) + * @param string $name Webservice name or NULL to let PhpWsdl determine it (default: NULL) + * @param PhpWsdlMethod[] $methods Array of methods or NULL (default: NULL) + * @param PhpWsdlComplex[] $types Array of complex types or NULL (default: NULL) + * @param boolean $outputOnRequest Output WSDL on request? (default: FALSE) + * @param boolean|string|object|array $runServer Run SOAP server? (default: FALSE) + */ + public function PhpWsdl( + $nameSpace=null, + $endPoint=null, + $cacheFolder=null, + $file=null, + $name=null, + $methods=null, + $types=null, + $outputOnRequest=false, + $runServer=false + ){ + // Quick mode + self::Debug('PhpWsdl constructor called'); + $quickRun=false; + if($nameSpace===true){ + self::Debug('Quick mode detected'); + $quickRun=true; + $nameSpace=null; + if(!is_null($endPoint)){ + if(self::$Debugging) + self::Debug('Filename(s): '.print_r($endPoint,true)); + $endPoint=null; + } + } + // SOAP server options + $this->SoapServerOptions=Array( + 'soap_version' => SOAP_1_1|SOAP_1_2, + 'encoding' => 'UTF-8', + 'compression' => SOAP_COMPRESSION_ACCEPT|SOAP_COMPRESSION_GZIP|9 + ); + // Optimizer settings + $this->Optimize=!isset($_GET['readable']);// Call with "?WSDL&readable" to get human readable WSDL + self::Debug('Optimizer is '.(($this->Optimize)?'enabled':'disabled')); + // Cache settings + if(!is_null($cacheFolder)){ + self::Debug('Cache folder is '.$cacheFolder); + self::$CacheFolder=$cacheFolder; + } + // Namespace + $this->NameSpace=(is_null($nameSpace))?$this->DetermineNameSpace():$nameSpace; + self::Debug('Namespace is '.$this->NameSpace); + // Endpoint + $this->EndPoint=((!is_null($endPoint)))?$endPoint:$this->DetermineEndPoint(); + self::Debug('Endpoint is '.$this->EndPoint); + // Name + if(!is_null($name)){ + self::Debug('Name is '.$name); + $this->Name=$name; + } + // Source files + if(!is_null($file)){ + if(self::$Debugging) + self::Debug('Filename(s): '.print_r($file,true)); + $this->Files=array_merge($this->Files,(is_array($file))?$file:Array($file)); + } + // Methods + $this->Methods=(!is_null($methods))?$methods:Array(); + if(sizeof($this->Methods)>0&&self::$Debugging) + self::Debug('Methods: '.print_r($this->Methods,true)); + // Types + $this->Types=(!is_null($types))?$types:Array(); + if(sizeof($this->Types)>0&&self::$Debugging) + self::Debug('Types: '.print_r($this->Types,true)); + // Constructor hook + self::CallHook( + 'ConstructorHook', + Array( + 'server' => $this, + 'output' => &$outputOnRequest, + 'run' => &$runServer, + 'quickmode' => &$quickRun + ) + ); + // WSDL output + if($outputOnRequest&&!$runServer) + $this->OutputWsdlOnRequest(); + // Run the server + if($quickRun||$runServer) + $this->RunServer(null,(is_bool($runServer))?null:$runServer); + } + + /** + * Create an instance of PhpWsdl + * Note: The quick mode by giving TRUE as first parameter is deprecated and will be removed from version 3.0. + * Use PhpWsdl::RunQuickMode() instead + * + * @param string|boolean $nameSpace Namespace or NULL to let PhpWsdl determine it, or TRUE to run everything by determining all configuration -> quick mode (default: NULL) + * @param string|string[] $endPoint Endpoint URI or NULL to let PhpWsdl determine it - or, in quick mode, the webservice class filename(s) (default: NULL) + * @param string $cacheFolder The folder for caching WSDL or NULL to use the systems default (default: NULL) + * @param string|string[] $file Filename or array of filenames or NULL (default: NULL) + * @param string $name Webservice name or NULL to let PhpWsdl determine it (default: NULL) + * @param PhpWsdlMethod[] $methods Array of methods or NULL (default: NULL) + * @param PhpWsdlComplex[] $types Array of complex types or NULL (default: NULL) + * @param boolean $outputOnRequest Output WSDL on request? (default: FALSE) + * @param boolean|string|object|array $runServer Run SOAP server? (default: FALSE) + * @return PhpWsdl The PhpWsdl object + */ + public static function CreateInstance( + $nameSpace=null, + $endPoint=null, + $cacheFolder=null, + $file=null, + $name=null, + $methods=null, + $types=null, + $outputOnRequest=false, + $runServer=false + ){ + self::Debug('Create new PhpWsdl instance'); + $obj=null; + self::CallHook( + 'BeforeCreateInstanceHook', + Array( + 'server' => &$obj, + 'namespace' => &$nameSpace, + 'endpoint' => &$endPoint, + 'cachefolder' => &$cacheFolder, + 'file' => &$file, + 'name' => &$name, + 'methods' => &$methods, + 'types' => &$types, + 'outputonrequest'=> &$outputOnRequest, + 'runserver' => &$runServer + ) + ); + if(is_null($obj)) + $obj=new PhpWsdl($nameSpace,$endPoint,$cacheFolder,$file,$name,$methods,$types,$outputOnRequest,$runServer); + self::CallHook( + 'CreateInstanceHook', + Array( + 'server' => &$obj + ) + ); + return $obj; + } + + /** + * Run the PhpWsdl SOAP server in quick mode + * + * @param string|string[] $file The webservice handler class file or a list of files or NULL (default: NULL) + */ + public static function RunQuickMode($file=null){ + self::Debug('Run quick mode'); + $server=self::CreateInstance(); + if(!is_null($file)) + $server->Files=(is_array($file))?$file:Array($file); + $server->RunServer(); + } + + /** + * Determine if WSDL was requested by the client + * + * @return boolean WSDL requested? + */ + public function IsWsdlRequested(){ + return $this->ForceOutputWsdl||((isset($_GET['wsdl'])||isset($_GET['WSDL']))&&!$this->ForceNotOutputWsdl); + } + + /** + * Determine if HTML was requested by the client + * + * @return boolean HTML requested? + */ + public function IsHtmlRequested(){ + return $this->ForceOutputHtml||(strlen(file_get_contents('php://input'))<1&&!$this->ForceNotOutputHtml); + } + + /** + * Determine if PHP was requested by the client + * + * @return boolean PHP requested? + */ + public function IsPhpRequested(){ + return $this->ForceOutputPhp||((isset($_GET['phpsoapclient'])||isset($_GET['PHPSOAPCLIENT']))&&!$this->ForceNotOutputPhp); + } + + /** + * Determine if this request is a SOAP request + * + * @return boolean + */ + public function IsSoapRequest(){ + return !$this->IsHtmlRequested()&&!$this->IsWsdlRequested()&&!$this->IsPhpRequested(); + } + + /** + * Determine if only global methods are served + * + * @return boolean Only global methods? + */ + public function IsOnlyGlobal(){ + $res=true; + $i=-1; + $len=sizeof($this->Methods); + while(++$i<$len) + if(!$this->Methods[$i]->IsGlobal){ + $res=false; + break; + } + return $res; + } + + /** + * Disble caching + * + * @param bool $allCaching Do not only set the timeout to zero? (default: TRUE) + */ + public static function DisableCache($allCaching=true){ + self::Debug('Disable '.(($allCaching)?'all':'this').' caching'); + if($allCaching) + self::$CacheFolder=null; + if(!$allCaching) + self::$CacheTime=0; + } + + /** + * Enable caching + * + * @param string $folder The cache folder or NULL to use a system temporary directory (default: NULL) + * @param int $timeout The caching timeout in seconds or NULL to use the previous value or the default (3600) (default: NULL) + */ + public static function EnableCache($folder=null,$timeout=null){ + if(is_null($folder)){ + if(self::IsCacheFolderWriteAble('./cache')){ + $folder='./cache'; + }else if(self::IsCacheFolderWriteAble(dirname(__FILE__).'/cache')){ + $folder=dirname(__FILE__).'/cache'; + }else if(self::IsCacheFolderWriteAble(sys_get_temp_dir())){ + $folder=sys_get_temp_dir(); + }else{ + self::Debug('Could not find a cache folder'); + } + } + if(is_null($timeout)) + $timeout=(self::$CacheTime!=0)?self::$CacheTime:3600; + self::Debug('Enable cache in folder "'.((is_null($folder))?'(none)':$folder).'" with timeout '.$timeout.' seconds'); + self::$CacheFolder=$folder; + self::$CacheTime=$timeout; + } + + /** + * Determine the configuration + * + * @return boolean Succeed? + */ + public function DetermineConfiguration(){ + if(!is_null($this->GetWsdlFromCache())) + return true; + $this->ParseSource(); + $mLen=sizeof($this->Methods); + $tLen=sizeof($this->Types); + $fLen=sizeof($this->Files); + if($this->ConfigurationDetermined) + return ($mLen>0||$tLen>0)&&!is_null($this->Name); + self::Debug('Determine configuration'); + $this->ConfigurationDetermined=true; + $tryWebService= + !$this->IsFileInList('class.webservice.php')&& + ( + file_exists('class.webservice.php')|| + file_exists(dirname(__FILE__).'/class.webservice.php') + ); + // No methods or types? Try to parse them from the current script + if($mLen<1&&$tLen<1){ + $tryFiles=Array(); + if($tryWebService){ + if(file_exists('class.webservice.php')) + $tryFiles[]='class.webservice.php'; + if(file_exists(dirname(__FILE__).'/class.webservice.php')) + $tryFiles[]=dirname(__FILE__).'/class.webservice.php'; + } + if(!$this->IsFileInList($_SERVER['SCRIPT_FILENAME'])) + $tryFiles[]=$_SERVER['SCRIPT_FILENAME']; + $i=-1; + $len=sizeof($tryFiles); + while(++$i<$len){ + $file=$tryFiles[$i]; + self::Debug('Try to load objects from '.$file); + $this->ParseSource(false,file_get_contents($file)); + $mLen=sizeof($this->Methods); + $tLen=sizeof($this->Types); + if($mLen<1&&$tLen<1) + continue; + self::Debug('Found objects, adding the file to list'); + $this->Files[]=$file; + $fLen++; + break; + } + if($mLen<1&&$tLen<1) + return false; + } + // No class name? Try to parse one from the current files + if(!is_null($this->Name)) + return true; + $tryFiles=Array(); + if(!$this->IsFileInList($_SERVER['SCRIPT_FILENAME'])) + $tryFiles[]=$_SERVER['SCRIPT_FILENAME']; + if($tryWebService){ + if(file_exists('class.webservice.php')) + $tryFiles[]='class.webservice.php'; + if(file_exists(dirname(__FILE__).'/class.webservice.php')) + $tryFiles[]=dirname(__FILE__).'/class.webservice.php'; + } + $tryFiles=array_merge($this->Files,$tryFiles); + $i=-1; + $len=sizeof($tryFiles); + while(++$i<$len){ + $file=$tryFiles[$i]; + self::Debug('Try to determine the class name from '.$file); + $temp=file_get_contents($file); + if(!preg_match(self::$classRx,$temp)) + continue; + $class=preg_replace(self::$classRx,"$1",$temp); + self::Debug('Found class name '.$class); + break; + } + // No class name yet? Use the default if only global methods are present + if(is_null($class)&&$this->IsOnlyGlobal()){ + self::Debug('Using default webservice name'); + $class='SoapWebService'; + } + $this->Name=$class; + return !is_null($class); + } + + /** + * Determine the endpoint URI + */ + public function DetermineEndPoint(){ + return ((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']=='on')?'https':'http').'://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']; + } + + /** + * Determine the namespace + */ + public function DetermineNameSpace(){ + return 'http://'.$_SERVER['SERVER_NAME'].str_replace(basename($_SERVER['SCRIPT_NAME']),'',$_SERVER['SCRIPT_NAME']); + } + + /** + * Determine if a file is included in the list of files + * + * @param string $file The filename + * @return boolean In the list? + */ + public function IsFileInList($file){ + $file=preg_quote(basename($file)); + $i=-1; + $fLen=sizeof($this->Files); + while(++$i<$fLen) + if(preg_match('/^(.*\/)?'.$file.'$/i',$this->Files[$i])) + return true; + return false; + } + + /** + * Create the WSDL + * + * @param boolean $reCreate Don't use the cached WSDL? (default: FALSE) + * @param boolean $optimize If TRUE, override the PhpWsdl->Optimizer property and force optimizing (default: FALSE) + * @return string The UTF-8 encoded WSDL as string + */ + public function CreateWsdl($reCreate=false,$optimizer=false){ + self::Debug('Create WSDL'); + // Ask the cache + if(!$reCreate&&(self::$CacheAllWsdl||!$this->IncludeDocs||$optimizer||$this->Optimize)){ + self::Debug('Try to get WSDL from the cache'); + $wsdl=$this->GetWsdlFromCache(); + if(!is_null($wsdl)){ + self::Debug('Using cached WSDL'); + return (!$optimizer&&!$this->Optimize)?self::FormatXml($wsdl):$wsdl; + } + } + // Prepare the WSDL generator + if(!$this->DetermineConfiguration()){ + $mLen=sizeof($this->Methods); + $tLen=sizeof($this->Types); + if($mLen<1&&$tLen<1){ + self::Debug('No methods and types'); + throw(new Exception('No methods and no complex types are available')); + } + if(is_null($this->Name)){ + self::Debug('No name'); + throw(new Exception('Could not determine webservice handler class name')); + } + } + $res=Array(); + // Create the XML Header + self::CallHook( + 'CreateWsdlHeaderHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Create types + self::CallHook( + 'CreateWsdlTypeSchemaHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Create messages + self::CallHook( + 'CreateWsdlMessagesHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Create port types + self::CallHook( + 'CreateWsdlPortsHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Create bindings + self::CallHook( + 'CreateWsdlBindingsHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Create the service + self::CallHook( + 'CreateWsdlServiceHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Finish the WSDL XML string + self::CallHook( + 'CreateWsdlFooterHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Run the optimizer + self::CallHook( + 'CreateWsdlOptimizeHook', + Array( + 'server' => $this, + 'res' => &$res, + 'optimizer' => &$optimizer + ) + ); + // Fill the cache + if(self::$CacheAllWsdl||!$this->IncludeDocs||$optimizer||$this->Optimize){ + self::Debug('Cache created WSDL'); + $this->WriteWsdlToCache( + ( + !self::$CacheAllWsdl&& + !$optimizer&& + !$this->Optimize + ) + ?self::OptimizeXml($res) + :$res + , + null, + null, + true + ); + } + return $this->WSDL; + } + + /** + * Create header + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlHeader($data){ + self::Debug('CreateWsdlHeader'); + $res=&$data['res']; + $server=$data['server']; + $res[]='<?xml version="1.0" encoding="UTF-8"?>'; + $temp=Array(); + $keys=array_keys(self::$NameSpaces); + $i=-1; + $len=sizeof($keys); + while(++$i<$len) + $temp[]='xmlns:'.$keys[$i].'="'.self::$NameSpaces[$keys[$i]].'"'; + $res[]='<wsdl:definitions xmlns:tns="'.$server->NameSpace.'" targetNamespace="'.$server->NameSpace.'" '.implode(' ',$temp).'>'; + return true; + } + + /** + * Create type schema + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlTypeSchema($data){ + self::Debug('CreateWsdlTypeSchema'); + $res=&$data['res']; + $server=$data['server']; + $tLen=sizeof($server->Types); + if($tLen>0){ + $res[]='<wsdl:types>'; + $res[]='<s:schema targetNamespace="'.$server->NameSpace.'">'; + $i=-1; + while(++$i<$tLen) + $res[]=$server->Types[$i]->CreateType($server); + self::CallHook( + 'CreateWsdlTypesHook', + $data + ); + $res[]='</s:schema>'; + $res[]='</wsdl:types>'; + } + return true; + } + + /** + * Create messages + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlMessages($data){ + self::Debug('CreateWsdlMessages'); + $res=&$data['res']; + $server=$data['server']; + $i=-1; + $mLen=sizeof($server->Methods); + while(++$i<$mLen) + $res[]=$server->Methods[$i]->CreateMessages($server); + return true; + } + + /** + * Create port types + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlPorts($data){ + self::Debug('CreateWsdlPorts'); + $res=&$data['res']; + $server=$data['server']; + $res[]='<wsdl:portType name="'.$server->Name.'Soap">'; + $i=-1; + $mLen=sizeof($server->Methods); + while(++$i<$mLen) + $res[]=$server->Methods[$i]->CreatePortType($server); + self::CallHook( + 'CreateWsdlPortsAddHook', + $data + ); + $res[]='</wsdl:portType>'; + return true; + } + + /** + * Create bindings + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlBindings($data){ + self::Debug('CreateWsdlBindings'); + $res=&$data['res']; + $server=$data['server']; + $res[]='<wsdl:binding name="'.$server->Name.'Soap" type="tns:'.$server->Name.'Soap">'; + $res[]='<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" />'; + $i=-1; + $mLen=sizeof($server->Methods); + while(++$i<$mLen) + $res[]=$server->Methods[$i]->CreateBinding($server); + self::CallHook( + 'CreateWsdlBindingsAddHook', + $data + ); + $res[]='</wsdl:binding>'; + return true; + } + + /** + * Create service port + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlService($data){ + self::Debug('CreateWsdlService'); + $res=&$data['res']; + $server=$data['server']; + $res[]='<wsdl:service name="'.$server->Name.'">'; + if($server->IncludeDocs&&!$server->Optimize&&!is_null($server->Docs)) + $res[]='<wsdl:documentation><![CDATA['.$server->Docs.']]></wsdl:documentation>'; + $res[]='<wsdl:port name="'.$server->Name.'Soap" binding="tns:'.$server->Name.'Soap">'; + $res[]='<soap:address location="'.$server->EndPoint.'" />'; + $res[]='</wsdl:port>'; + self::CallHook( + 'CreateWsdlServiceAddHook', + $data + ); + $res[]='</wsdl:service>'; + return true; + } + + /** + * Create footer + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlFooter($data){ + self::Debug('CreateWsdlFooter'); + $res=&$data['res']; + $res[]='</wsdl:definitions>'; + return true; + } + + /** + * Optimize WSDL + * + * @param array $data Data array + * @return boolean Response + */ + public static function CreateWsdlOptimize($data){ + self::Debug('CreateWsdlOptimize'); + $res=&$data['res']; + $server=$data['server']; + $optimizer=&$data['optimizer']; + $res=utf8_encode(implode('',$res)); + $res=(!$optimizer&&!$server->Optimize) + ?self::FormatXml($res) + :self::OptimizeXml($res); + $server->WSDL=$res; + return true; + } + + /** + * Remove tabs and newline from XML + * + * @param string $xml The unoptimized XML + * @return string The optimized XML + */ + public static function OptimizeXml($xml){ + self::Debug('Optimize XML'); + return preg_replace('/[\n|\t]/','',$xml); + } + + /** + * Format XML human readable + * + * @param string $xml The XML + * @return string Human readable XML + */ + public static function FormatXml($xml){ + self::Debug('Produce human readable XML'); + $input=fopen('data://text/plain,'.$xml,'r'); + $output=fopen('php://temp','w'); + $xf=new PhpWsdlFormatter($input,$output); + $xf->format(); + rewind($output); + $xml=stream_get_contents($output); + fclose($input); + fclose($output); + return $xml; + } + + /** + * Interpret the @service keyword + * + * @param $data The parser data + * @return boolean Response + */ + public static function InterpretService($data){ + self::Debug('Interpret service'); + $server=$data['server']; + $info=explode(' ',$data['keyword'][1],2); + if(sizeof($info)<1){ + self::Debug('WARNING: Invalid service definition'); + return true; + } + $server->Name=$info[0]; + if($server->ParseDocs&&sizeof($info)>1&&is_null($server->Docs)) + $server->Docs=$info[1]; + return true; + } + + /** + * Parse source files for WSDL definitions in comments + * + * @param boolean $init Empty the Methods and the Types properties? (default: FALSE) + * @param string $str Source string or NULL to parse the defined files (default: NULL) + */ + public function ParseSource($init=false,$str=null){ + self::Debug('Parse the source'); + if($init){ + self::Debug('Init methods and types'); + $this->Methods=Array(); + $this->Types=Array(); + $this->SourcesParsed=false; + } + if(is_null($str)){ + if($this->SourcesParsed) + return; + self::Debug('Load source files'); + $this->SourcesParsed=true; + $fLen=sizeof($this->Files); + if($fLen<1) + return; + // Load the source + $src=Array(); + $i=-1; + while(++$i<$fLen) + $src[]=trim(file_get_contents($this->Files[$i])); + }else{ + self::Debug('Use given string'); + $src=Array($str); + } + // Parse the source + self::Debug('Run the parser'); + $parser=new PhpWsdlParser($this); + $parser->Parse(implode("\n",$src)); + } + + /** + * Output the WSDL to the client + * + * @param boolean $withHeaders Output XML headers? (default: TRUE) + */ + public function OutputWsdl($withHeaders=true){ + if(!self::CallHook( + 'OutputWsdlHook', + Array( + 'server' => $this + ) + ) + ) + return; + self::Debug('Output WSDL'); + if($withHeaders) + header('Content-Type: text/xml; charset=UTF-8',true); + echo $this->CreateWsdl(); + } + + /** + * Output the WSDL to the client, if requested + * + * @param boolean $andExit Exit after sending WSDL? (default: TRUE) + * @return boolean Has the WSDL been sent to the client? + */ + public function OutputWsdlOnRequest($andExit=true){ + if(!$this->IsWsdlRequested()) + return false; + $this->OutputWsdl(); + if($andExit){ + self::Debug('Exit script execution'); + exit; + } + return true; + } + + /** + * Output the HTML to the client + * + * @param boolean $withHeaders Send HTML headers? (default: TRUE) + * @param boolean $echo Print HTML (default: TRUE) + * @param boolean $cache Cache the result (default: TRUE); + * @return string The HTML + */ + public function OutputHtml($withHeaders=true,$echo=true,$cache=true){ + self::Debug('Output HTML'); + if(sizeof($this->Methods)<1) + $this->CreateWsdl(); + if(!self::CallHook( + 'OutputHtmlHook', + Array( + 'server' => $this + ) + ) + ) + return; + // Header + if($withHeaders) + header('Content-Type: text/html; charset=UTF-8',true); + $this->GetWsdlFromCache(); + if(!is_null($this->HTML)){ + if($echo) + echo $this->HTML; + return $this->HTML; + } + $res=Array(); + $res[]='<html>'; + $res[]='<head>'; + $res[]='<title>'.((is_null($this->HtmlHeadLine))?$this->Name.' interface description':nl2br(htmlentities($this->HtmlHeadLine))).'</title>'; + $res[]='<style type="text/css" media="all">'; + $res[]='body{font-family:Calibri,Arial;background-color:#fefefe;}'; + $res[]='.pre{font-family:Courier;}'; + $res[]='.normal{font-family:Calibri,Arial;}'; + $res[]='.bold{font-weight:bold;}'; + $res[]='h1,h2,h3{font-family:Verdana,Times;}'; + $res[]='h1{border-bottom:1px solid gray;}'; + $res[]='h2{border-bottom:1px solid silver;}'; + $res[]='h3{border-bottom:1px dashed silver;}'; + $res[]='a{text-decoration:none;}'; + $res[]='a:hover{text-decoration:underline;}'; + $res[]='.blue{color:#3400FF;}'; + $res[]='.lightBlue{color:#5491AF;}'; + if(!is_null(self::$HTML2PDFLicenseKey)&&self::$HTML2PDFSettings['attachments']=='1') + $res[]='.print{display:none;}'; + self::CallHook( + 'CreateHtmlCssHook', + Array( + 'server' => $this, + 'res' => &$res + ) + ); + $res[]='</style>'; + $res[]='<style type="text/css" media="print">'; + $res[]='.noprint{display:none;}'; + if(!is_null(self::$HTML2PDFLicenseKey)&&self::$HTML2PDFSettings['attachments']=='1') + $res[]='.print{display:block;}'; + self::CallHook( + 'CreateHtmlCssPrintHook', + Array( + 'server' => $this, + 'res' => &$res + ) + ); + $res[]='</style>'; + $res[]='</head>'; + $res[]='<body>'; + $types=$this->SortObjectsByName($this->Types); + $methods=$this->SortObjectsByName($this->Methods); + // General information + self::CallHook( + 'CreateHtmlGeneralHook', + Array( + 'server' => $this, + 'res' => &$res, + 'methods' => &$methods, + 'types' => &$types + ) + ); + // Index + self::CallHook( + 'CreateHtmlIndexHook', + Array( + 'server' => $this, + 'res' => &$res, + 'methods' => &$methods, + 'types' => &$types + ) + ); + // Complex types + self::CallHook( + 'CreateHtmlComplexTypesHook', + Array( + 'server' => $this, + 'res' => &$res, + 'methods' => &$methods, + 'types' => &$types + ) + ); + // Methods + self::CallHook( + 'CreateHtmlMethodsHook', + Array( + 'server' => $this, + 'res' => &$res, + 'methods' => &$methods, + 'types' => &$types + ) + ); + // HTML2PDF link + $param=Array( + 'plain' => '1', + 'filename' => $this->Name.'-webservices.pdf', + 'print' => '1' + ); + if(!is_null(self::$HTML2PDFLicenseKey)){ + // Use advanced HTML2PDF API + $temp=array_merge(self::$HTML2PDFSettings,Array( + 'url' => $this->GetDocUri() + )); + if($temp['attachments']=='1'){ + $temp['attachment_1']=$this->Name.'.wsdl:'.$this->GetWsdlUri(); + $cnt=1; + if($this->ParseDocs&&$this->IncludeDocs){ + $cnt=2; + $temp['attachment_2']=$this->Name.'-doc.wsdl:'.$this->GetWsdlUri().'&readable'; + } + $cnt++; + $temp['attachment_'.$cnt]=$this->Name.'.soapclient.php:'.$this->GetPhpUri(); + self::CallHook( + 'PdfAttachmentHook', + Array( + 'server' => $this, + 'cnt' => &$cnt, + 'param' => &$temp, + 'res' => &$res, + 'methods' => &$methods, + 'types' => &$types + ) + ); + } + $options=Array(); + $keys=array_keys($temp); + $i=-1; + $len=sizeof($keys); + while(++$i<$len) + $options[]=$keys[$i].'='.$temp[$keys[$i]]; + $options='$'.base64_encode(implode("\n",$options)); + $license=sha1(self::$HTML2PDFLicenseKey.self::$HTML2PDFLicenseKey).'-'.sha1($options.self::$HTML2PDFLicenseKey); + $param['url']=$options; + $param['license']=$license; + } + $temp=$param; + $param=Array(); + $keys=array_keys($temp); + $i=-1; + $len=sizeof($keys); + while(++$i<$len) + $param[]=urlencode($keys[$i]).'='.urlencode($temp[$keys[$i]]); + $pdfLink=self::$HTML2PDFAPI.'?'.implode('&',$param); + // Footer + $res[]='<hr>'; + $res[]='<p><small>Powered by <a href="http://code.google.com/p/php-wsdl-creator/">PhpWsdl</a><span class="noprint"> - PDF download: <a href="'.$pdfLink.'">Download this page as PDF</a></span></small></p>'; + $res[]='</body>'; + $res[]='</html>'; + // Clean up the generated HTML and send it + $res=implode("\n",$res); + $res=str_replace('<br />','<br>',$res);// Because nl2br will produce XHTML (and nothing if the second parameter is FALSE!?) + if(!self::CallHook( + 'SendHtmlHook', + Array( + 'server' => $this, + 'res' => &$res + ) + ) + ) + return; + $res=utf8_encode($res); + $this->HTML=$res; + if($cache) + $this->WriteWsdlToCache(null,null,null,true); + if($echo) + echo $res; + return $res; + } + + /** + * Create general information + * + * @param array $data The information object + * @return boolean Response + */ + public static function CreateHtmlGeneral($data){ + self::Debug('CreateHtmlGeneral'); + $res=&$data['res']; + $server=$data['server']; + $res[]='<h1>'.$server->Name.' SOAP WebService interface description</h1>'; + $res[]='<p>Endpoint URI: <span class="pre">'.$server->EndPoint.'</span></p>'; + $res[]='<p>WSDL URI: <span class="pre"><a href="'.$server->GetWsdlUri().'&readable">'.$server->GetWsdlUri().'</a></span></p>'; + $res[]='<p>PHP SOAP client download URI: <span class="pre"><a href="'.$server->GetPhpUri().'">'.$server->GetPhpUri().'</a></span></p>'; + if(self::$HTML2PDFSettings['attachments']=='1'&&!is_null(self::$HTML2PDFLicenseKey)) + $res[]='<p class="print">The WSDL files and client proxy class(es) are attached to this PDF documentation.</p>'; + if(!is_null($server->Docs)) + $res[]='<p>'.nl2br(htmlentities($server->Docs)).'</p>'; + return true; + } + + /** + * Create table of contents + * + * @param array $data The information object + * @return boolean Response + */ + public static function CreateHtmlIndex($data){ + self::Debug('CreateHtmlIndex'); + $res=&$data['res']; + $types=&$data['types']; + $methods=&$data['methods']; + $tLen=sizeof($types); + $mLen=sizeof($methods); + $res[]='<div class="noprint">'; + $res[]='<h2>Index</h2>'; + if($tLen>0){ + $res[]='<p>Complex types:</p>'; + $i=-1; + $res[]='<ul>'; + while(++$i<$tLen) + $res[]='<li><a href="#'.$types[$i]->Name.'"><span class="pre">'.$types[$i]->Name.'</span></a></li>'; + $res[]='</ul>'; + } + if($mLen>0){ + $res[]='<p>Public methods:</p>'; + $i=-1; + $res[]='<ul>'; + while(++$i<$mLen) + $res[]='<li><a href="#'.$methods[$i]->Name.'"><span class="pre">'.$methods[$i]->Name.'</span></a></li>'; + $res[]='</ul>'; + } + $res[]='</div>'; + return true; + } + + /** + * Create method list + * + * @param array $data The information object + * @return boolean Response + */ + public static function CreateHtmlMethods($data){ + self::Debug('CreateHtmlMethods'); + $res=&$data['res']; + $methods=&$data['methods']; + $mLen=sizeof($methods); + if($mLen>0){ + $res[]='<h2>Public methods</h2>'; + $i=-1; + while(++$i<$mLen) + $methods[$i]->CreateMethodHtml(array_merge( + $data, + Array( + 'method' => $methods[$i] + ) + )); + } + return true; + } + + /** + * Create complex types list + * + * @param array $data The information object + * @return boolean Response + */ + public static function CreateHtmlComplexTypes($data){ + self::Debug('CreateHtmlComplexTypes'); + $res=&$data['res']; + $types=&$data['types']; + $server=$data['server']; + $tLen=sizeof($server->Types); + if($tLen>0){ + $res[]='<h2>Complex types</h2>'; + $i=-1; + while(++$i<$tLen) + $types[$i]->CreateTypeHtml(array_merge( + $data, + Array( + 'type' => $types[$i] + ) + )); + } + return true; + } + + /** + * Sort objects by name + * + * @param PhpWsdlComplex[]|PhpWsdlMethod[] $obj + * @return PhpWsdlComplex[]|PhpWsdlMethod[] Sorted objects + */ + public function SortObjectsByName($obj){ + self::Debug('Sort objects by name'); + $temp=Array(); + $i=-1; + $len=sizeof($obj); + while(++$i<$len) + $temp[$obj[$i]->Name]=$obj[$i]; + $keys=array_keys($temp); + sort($keys); + $res=Array(); + $i=-1; + while(++$i<$len) + $res[]=$temp[$keys[$i]]; + return $res; + } + + /** + * Output the HTML to the client, if requested + * + * @param boolean $andExit Exit after sending HTML? (default: TRUE) + * @return boolean Has the HTML been sent to the client? + */ + public function OutputHtmlOnRequest($andExit=true){ + if(!$this->IsHtmlRequested()) + return false; + $this->OutputHtml(); + if($andExit){ + self::Debug('Exit script execution'); + exit; + } + return true; + } + + /** + * Output the PHP SOAP client source for this webservice + * + * @param boolean $withHeaders Send text headers? (default: TRUE) + * @param boolean $echo Print source (default: TRUE) + * @param array $options Options array (default: array) + * @param boolean $cache Cache the result (default: TRUE); + * @return string PHP source + */ + public function OutputPhp($withHeaders=true,$echo=true,$options=Array(),$cache=true){ + self::Debug('Output PHP'); + if(sizeof($this->Methods)<1) + $this->CreateWsdl(); + if(!self::CallHook( + 'OutputPhpHook', + Array( + 'server' => $this, + 'withHeaders' => &$withHeaders, + 'echo' => &$echo, + 'options' => &$options + ) + ) + ) + return ''; + // Options + $hasOptions=sizeof(array_keys($options))>0; + if(!isset($options['class'])) + $options['class']=$this->Name.'SoapClient'; + if(!isset($options['openphp'])) + $options['openphp']=true; + if(!isset($options['phpclient'])) + $options['phpclient']=true; + $data=Array( + 'server' => $this, + 'withHeaders' => &$withHeaders, + 'echo' => &$echo, + 'options' => &$options, + 'res' => &$res + ); + // Header + if($withHeaders){ + header('Content-Type: text/plain; charset=UTF-8',true); + header('Content-Disposition: attachment; filename='.$options['class'].'.php'); + } + if(!$hasOptions){ + if(is_null($this->PHP)) + $this->GetWsdlFromCache(); + if(!is_null($this->PHP)){ + if($echo) + echo $this->PHP; + return $this->PHP; + } + }else if(isset($options['php'])&&!is_null($options['php'])){ + echo $options['php']; + return $options['php']; + } + $res=Array(); + if($options['openphp']) + $res[]="<?php"; + $res[]="/**"; + if(!is_null($this->Docs)){ + $res[]=" * ".implode("\n * ",explode("\n",$this->Docs)); + $res[]=" *"; + } + $res[]=" * @service ".$options['class']; + $res[]=" */"; + $res[]="class ".$options['class']."{"; + $res[]="\t/**"; + $res[]="\t * The WSDL URI"; + $res[]="\t *"; + $res[]="\t * @var string"; + $res[]="\t */"; + $res[]="\tpublic static \$_WsdlUri='".(!is_null($this->WsdlUri)?$this->WsdlUri:$this->EndPoint.'?WSDL')."';"; + $res[]="\t/**"; + $res[]="\t * The PHP SoapClient object"; + $res[]="\t *"; + $res[]="\t * @var object"; + $res[]="\t */"; + $res[]="\tpublic static \$_Server=null;"; + self::CallHook('BeginCreatePhpHook',$data); + $res[]=''; + $res[]="\t/**"; + $res[]="\t * Send a SOAP request to the server"; + $res[]="\t *"; + $res[]="\t * @param string \$method The method name"; + $res[]="\t * @param array \$param The parameters"; + $res[]="\t * @return mixed The server response"; + $res[]="\t */"; + $res[]="\tpublic static function _Call(\$method,\$param){"; + if(self::CallHook('CreatePhpCallHook',$data)){ + $res[]="\t\tif(is_null(self::\$_Server))"; + if($options['phpclient']){ + $res[]="\t\t\tself::\$_Server=new SoapClient(self::\$_WsdlUri);"; + $res[]="\t\treturn self::\$_Server->__soapCall(\$method,\$param);"; + }else{ + $res[]="\t\t\tself::\$_Server=new PhpWsdlClient(self::\$_WsdlUri);"; + $res[]="\t\treturn self::\$_Server->DoRequest(\$method,\$param);"; + } + } + $res[]="\t}"; + // Methods + $i=-1; + $len=sizeof($this->Methods); + while(++$i<$len){ + $res[]=''; + $this->Methods[$i]->CreateMethodPhp($data); + } + $res[]="}"; + // Types + $i=-1; + $len=sizeof($this->Types); + while(++$i<$len){ + $res[]=''; + $this->Types[$i]->CreateTypePhp($data); + } + self::CallHook('EndCreatePhpHook',$data); + $res=utf8_encode(implode("\n",$res)); + if(!$hasOptions){ + if(is_null($this->PHP)) + $this->PHP=$res; + if($cache) + $this->WriteWsdlToCache(null,null,null,true); + } + if($echo) + echo $res; + return $res; + } + + /** + * Output the PHP SOAP client source for this webservice, if requested + * + * @param boolean $andExit Exit after sending the PHP source? + * @return boolean PHP sent? + */ + public function OutputPhpOnRequest($andExit=true){ + if(!$this->IsPhpRequested()) + return false; + $this->OutputPhp(); + if($andExit){ + self::Debug('Exit script execution'); + exit; + } + return true; + } + + /** + * Run the PHP SoapServer + * + * @param string $wsdlFile The WSDL file name or NULL to let PhpWsdl decide (default: NULL) + * @param string|object|array $class The class name to serve, the classname and class as array or NULL (default: NULL) + * @param boolean $andExit Exit after running the server? (default: TRUE) + * @param boolean $forceNoWsdl Force no WSDL usage? (default: FALSE); + * @return boolean Did the server run? + */ + public function RunServer($wsdlFile=null,$class=null,$andExit=true,$forceNoWsdl=false){ + self::Debug('Run the server'); + if($forceNoWsdl) + self::Debug('Forced non-WSDL mode'); + if(self::CallHook( + 'BeforeRunServerHook', + Array( + 'server' => $this, + 'wsdlfile' => &$wsdlFile, + 'class' => &$class, + 'andexit' => &$andExit, + 'forcenowsdl' => &$forceNoWsdl + ) + ) + ){ + // WSDL requested? + if($this->OutputWsdlOnRequest($andExit)) + return false; + // PHP requested? + if($this->OutputPhpOnRequest($andExit)) + return false; + // HTML requested? + if($this->OutputHtmlOnRequest($andExit)) + return false; + } + // Login + $user=null; + $password=null; + if($this->RequireLogin){ + if(isset($_SERVER['PHP_AUTH_USER'])||isset($_SERVER['PHP_AUTH_PW'])){ + $user=(isset($_SERVER['PHP_AUTH_USER']))?$_SERVER['PHP_AUTH_USER']:null; + $password=(isset($_SERVER['PHP_AUTH_PW']))?$_SERVER['PHP_AUTH_PW']:null; + } + self::Debug('Check login '.$user.':'.str_repeat('*',strlen($password))); + if(!self::CallHook( + 'LoginHook', + Array( + 'server' => $this, + 'user' => &$user, + 'password' => &$password + ) + ) + ){ + self::Debug('Login required'); + header('WWW-Authenticate: Basic realm="SOAP webservice login required"'); + header('HTTP/1.0 401 Unauthorized'); + if($andExit){ + self::Debug('Exit script execution'); + exit; + } + return false; + } + } + // Load the proxy + $useProxy=false; + if(is_array($class)){ + self::Debug('Use the proxy for '.$class[0]); + self::$ProxyObject=$class[1]; + self::$ProxyServer=$this; + $class=$class[0]; + $useProxy=true; + } + // Ensure a webservice name + if(is_null($class)){ + self::Debug('No webservice name yet'); + if(!$this->DetermineConfiguration()) + throw(new Exception('Invalid configuration')); + if(!is_null($this->Name)) + $class=$this->Name; + }else if(is_string($class)){ + self::Debug('Using '.$class.' as webservice name'); + $this->Name=$class; + } + self::Debug('Use class '.((!is_object($class))?$class:get_class($class))); + // Load WSDL + if(!$forceNoWsdl&&(!$useProxy||self::$UseProxyWsdl)){ + self::Debug('Load WSDL'); + $this->CreateWsdl(false,true); + if(is_null($wsdlFile)) + $wsdlFile=$this->GetCacheFileName(); + if(!is_null($wsdlFile)) + if(!file_exists($wsdlFile)){ + self::Debug('WSDL file "'.$wsdlFile.'" does not exists'); + $wsdlFile=null; + } + } + // Load the files, if the webservice handler class doesn't exist + if(!is_object($class)) + if(!class_exists($class)&&!$this->IsOnlyGlobal()){ + self::Debug('Try to load the webservice handler class'); + $i=-1; + $len=sizeof($this->Files); + while(++$i<$len){ + self::Debug('Load '.$this->Files[$i]); + require_once($this->Files[$i]); + } + if(!class_exists($class)){ + // Try class.webservice.php + if(file_exists('class.webservice.php')){ + self::Debug('Try to load class.webservice.php'); + require_once('class.webservice.php'); + if(class_exists($class)) + $this->Files[]='class.webservice.php'; + } + if(!class_exists($class)) + if(file_exists(dirname(__FILE__).'/class.webservice.php')){ + self::Debug('Try to load '.dirname(__FILE__).'/class.webservice.php'); + require_once(dirname(__FILE__).'/class.webservice.php'); + if(class_exists($class)) + $this->Files[]=dirname(__FILE__).'/class.webservice.php'; + } + if(!class_exists($class)) + // A handler class or object is required when using non-global methods! + throw(new Exception('Webservice handler class not present')); + } + } + // Prepare the SOAP server + $this->SoapServer=null; + if(self::CallHook( + 'PrepareServerHook', + Array( + 'server' => $this, + 'soapserver' => &$this->SoapServer, + 'wsdlfile' => &$wsdlFile, + 'class' => &$class, + 'useproxy' => &$useProxy, + 'forcenowsdl' => &$forceNoWsdl, + 'andexit' => &$andExit, + 'user' => &$user, + 'password' => &$password + ) + ) + ){ + self::Debug('Prepare the SOAP server'); + // WSDL file + $wsdlFile=($forceNoWsdl||($useProxy&&!self::$UseProxyWsdl))?null:$wsdlFile; + if(!is_null($wsdlFile)){ + self::Debug('Using WSDL file '.$wsdlFile); + }else{ + self::Debug('No WSDL file'); + } + // Server options + $temp=Array( + 'actor' => $this->EndPoint, + 'uri' => $this->NameSpace, + ); + $temp=array_merge($this->SoapServerOptions,$temp); + if(self::$Debugging) + self::Debug('Server options: '.print_r($temp,true)); + // Create the server object + self::Debug('Creating PHP SoapServer object'); + $this->SoapServer=new SoapServer( + $wsdlFile, + $temp + ); + // Set the handler class or object + if($useProxy||!is_object($class)){ + $temp=($useProxy)?'PhpWsdlProxy':$class; + if(!is_null($temp)){ + self::Debug('Setting server class '.$temp); + $this->SoapServer->setClass($temp); + }else{ + self::Debug('No server class or object'); + } + }else{ + self::Debug('Setting server object '.get_class($class)); + $this->SoapServer->setObject($class); + } + // Add global methods + $i=-1; + $len=sizeof($this->Methods); + while(++$i<$len) + if($this->Methods[$i]->IsGlobal){ + self::Debug('Adding global method '.$this->Methods[$i]->Name); + $this->SoapServer->addFunction($this->Methods[$i]->Name); + } + } + // Run the SOAP server + if(self::CallHook( + 'RunServerHook', + Array( + 'server' => $this, + 'soapserver' => &$this->SoapServer, + 'wsdlfile' => &$wsdlFile, + 'class' => &$class, + 'useproxy' => &$useProxy, + 'forcenowsdl' => &$forceNoWsdl, + 'andexit' => &$andExit, + 'user' => &$user, + 'password' => &$password + ) + ) + ){ + self::Debug('Run the SOAP server'); + $this->SoapServer->handle(); + if($andExit){ + self::Debug('Exit script execution'); + exit; + } + } + return true; + } + + /** + * Get the WSDL download URI + * + * @return string The Uri + */ + public function GetWsdlUri(){ + return ((is_null($this->WsdlUri))?$this->EndPoint:$this->WsdlUri).'?WSDL'; + } + + /** + * Get the PHP download URI + * + * @return string The URI + */ + public function GetPhpUri(){ + return ((is_null($this->PhpUri))?$this->EndPoint:$this->PhpUri).'?PHPSOAPCLIENT'; + } + + /** + * Get the HTML documentation URI + * + * @return string The Uri + */ + public function GetDocUri(){ + return (is_null($this->PhpUri))?$this->EndPoint:$this->DocUri; + } + + /** + * Find a method + * + * @param string $name The method name + * @return PhpWsdlMethod The method object or NULL + */ + public function GetMethod($name){ + self::Debug('Find method '.$name); + $i=-1; + $len=sizeof($this->Methods); + while(++$i<$len) + if($this->Methods[$i]->Name==$name){ + self::Debug('Found method at index '.$i); + return $this->Methods[$i]; + } + return null; + } + + /** + * Find a complex type + * + * @param string $name The type name + * @return PhpWsdlComplex The type object or NULL + */ + public function GetType($name){ + self::Debug('Find type '.$name); + $i=-1; + $len=sizeof($this->Types); + while(++$i<$len) + if($this->Types[$i]->Name==$name){ + self::Debug('Found type at index '.$i); + return $this->Types[$i]; + } + return null; + } + + /** + * Get the cache filename + * + * @param string $endpoint The endpoint URI or NULL to use the PhpWsdl->EndPoint property (default: NULL) + * @return string The cache filename or NULL, if caching is disabled + */ + public function GetCacheFileName($endpoint=null){ + $data=Array( + 'server' => $this, + 'endpoint' => $endpoint, + 'filename' => (is_null(self::$CacheFolder))?null:self::$CacheFolder.'/'.sha1((is_null($endpoint))?$this->EndPoint:$endpoint).'.wsdl' + ); + self::CallHook( + 'CacheFileNameHook', + $data + ); + return $data['filename']; + } + + /** + * Determine if the cache file exists + * + * @param string $file The WSDL cache filename or NULL to use the default (default: NULL) + * @return boolean Are the cache files present? + */ + public function CacheFileExists($file=null){ + if(is_null($file)) + $file=$this->GetCacheFileName(); + self::Debug('Check cache file exists '.$file); + return file_exists($file)&&file_exists($file.'.cache'); + } + + /** + * Determine if the existing cache files are still valid + * + * @param string $file The WSDL cache filename or NULL to use the default (default: NULL) + * @return boolean Valid? + */ + public function IsCacheValid($file=null){ + self::Debug('Check cache valid'); + if(is_null($file)) + $file=$this->GetCacheFileName(); + if(!$this->CacheFileExists($file)) + return false; + return self::$CacheTime<0||time()-file_get_contents($file.'.cache')<=self::$CacheTime; + } + + /** + * Get the WSDL from the cache + * + * @param string $file The WSDL cache filename or NULL to use the default (default: NULL) + * @param boolean $force Force this even if the cache is timed out? (default: FALSE) + * @param boolean $nounserialize Don't unserialize the PhpWsdl* objects? (default: FALSE) + * @return string The cached WSDL + */ + public function GetWsdlFromCache($file=null,$force=false,$nounserialize=false){ + self::Debug('Get WSDL from cache'); + if(!is_null($this->WSDL)) + return $this->WSDL; + if(is_null($file)) + $file=$this->GetCacheFileName(); + if(!$force){ + if(!$this->IsCacheValid($file)) + return null; + }else if(!$this->CacheFileExists($file)){ + return null; + } + $this->WSDL=file_get_contents($file); + if(!$nounserialize){ + self::Debug('Unserialize methods, types and files'); + $data=unserialize(file_get_contents($file.'.obj')); + $this->Methods=$data['methods']; + $this->Types=$data['types']; + $this->Files=$data['files']; + $this->Name=$data['name']; + $this->Docs=$data['docs']; + $this->HTML=$data['html']; + $this->PHP=$data['php']; + $this->WsdlUri=$data['wsdluri']; + $this->PhpUri=$data['phpuri']; + $this->DocUri=$data['docuri']; + self::CallHook( + 'ReadCacheHook', + Array( + 'server' => $this, + 'data' => &$data + ) + ); + if($data['version']!=self::$VERSION){ + self::Debug('Could not use cache from version '.$data['version']); + $this->Methods=Array(); + $this->Types=Array(); + $this->Files=Array(); + $this->Name=null; + $this->Docs=null; + $this->HTML=null; + $this->PHP=null; + $this->WsdlUri=null; + $this->PhpUri=null; + $this->DocUri=null; + $this->WSDL=null; + $this->TidyCacheFolder(true); + return null; + } + } + $this->ConfigurationDetermined=true; + $this->SourcesParsed=true; + return $this->WSDL; + } + + /** + * Write WSDL to cache + * + * @param string $wsdl The UTF-8 encoded WSDL string (default: NULL) + * @param string $endpoint The SOAP endpoint or NULL to use the default (default: NULL) + * @param string $file The target filename or NULL to use the default (default: NULL) + * @param boolean $force Force refresh (default: FALSE) + * @return boolean Succeed? + */ + public function WriteWsdlToCache($wsdl=null,$endpoint=null,$file=null,$force=false){ + self::Debug('Write WSDL to the cache'); + if(is_null($endpoint)) + $endpoint=$this->EndPoint; + if($endpoint==$this->EndPoint&&!is_null($wsdl)) + $this->WSDL=$wsdl; + if(is_null($wsdl)){ + if(is_null($this->WSDL)){ + self::Debug('No WSDL'); + return false;// WSDL not defined + } + $wsdl=$this->WSDL; + } + if(is_null($file)){ + $file=$this->GetCacheFileName($endpoint); + if(is_null($file)){ + self::Debug('No cache file'); + return false;// No cache file + } + } + $temp=substr($file,0,1); + if($temp!='/'&&$temp!='.'){ + if(is_null(self::$CacheFolder)){ + self::Debug('No cache folder'); + return false;// No cache folder + } + $file=self::$CacheFolder.'/'.$file; + } + if(!$force) + if($this->IsCacheValid($file)){ + self::Debug('Cache is still valid'); + return true;// Existing cache is still valid + } + self::Debug('Write to '.$file); + if(file_put_contents($file,$wsdl)===false){ + self::Debug('Could not write to cache'); + return false;// Error writing to cache + } + if(file_put_contents($file.'.cache',time())===false){ + self::Debug('Could not write cache time file'); + return false;// Error writing to cache + } + $data=Array( + 'version' => self::$VERSION, + 'methods' => $this->Methods, + 'types' => $this->Types, + 'files' => $this->Files, + 'name' => $this->Name, + 'docs' => $this->Docs, + 'html' => $this->HTML, + 'php' => $this->PHP, + 'wsdluri' => $this->WsdlUri, + 'phpuri' => $this->PhpUri, + 'docuri' => $this->DocUri + ); + self::CallHook( + 'WriteCacheHook', + Array( + 'server' => $this, + 'data' => &$data + ) + ); + if(file_put_contents($file.'.obj',serialize($data))===false){ + self::Debug('Could not write serialized cache'); + return false;// Error writing to cache + } + return true; + } + + /** + * Determine if the cache folder is writeable + * + * @param string $folder The folder or NULL to use the static property CacheFolder (default: NULL) + * @return boolean Writeable? + */ + public static function IsCacheFolderWriteAble($folder=null){ + if(!is_null(self::$CacheFolderWriteAble)) + return self::$CacheFolderWriteAble; + if(is_null($folder)) + $folder=self::$CacheFolder; + if(is_null($folder)){ + self::$CacheFolderWriteAble=false; + return false; + } + if(!is_dir($folder)){ + self::Debug('Invalid cache folder (not a directory?)'); + self::$CacheFolderWriteAble=false; + return; + } + $file=uniqid(); + while(file_exists($folder.'/'.$file)) + $file=uniqid(); + $file=$folder.'/'.$file; + $temp=uniqid(); + if(file_put_contents($file,$temp)===false){ + self::$CacheFolderWriteAble=false; + return false; + } + $res=file_get_contents($file)===$temp; + unlink($file); + self::$CacheFolderWriteAble=$res; + return $res; + } + + /** + * Determine if the cache is different from the current version of your webservice handler class. + * Status: Untested + * + * @return boolean Differences detected? + */ + public function IsCacheDifferent(){ + self::Debug('Determine if the cache is different from this instance'); + // Load the cache + $temp=new PhpWsdl(null,$this->EndPoint); + $temp->GetWsdlFromCache(); + if(is_null($temp->WSDL)) + return true;// Not cached yet + // Initialize this instance + $this->DetermineConfiguration(); + $this->ParseSource(); + // Compare the cache with this instance + $res=serialize( + Array( + $this->Methods, + $this->Types + ) + )!=serialize( + Array( + $temp->Methods, + $temp->Types + ) + ); + self::Debug('Cache is '.(($res)?'equal':'different')); + return $res; + } + + /** + * Delete cache files from the cache folder + * + * @param boolean $mineOnly Only delete the cache files for this definition? (default: FALSE) + * @param boolean $cleanUp Only delete the cache files that are timed out? (default: FALSE) + * @param string $wsdlFile The WSDL filename (default: NULL) + * @return string[] The deleted filenames + */ + public function TidyCacheFolder($mineOnly=false,$cleanUp=false,$wsdlFile=null){ + if(is_null(self::$CacheFolder)) + return Array(); + $deleted=Array(); + if($cleanUp){ + self::Debug('Cleanup cache'); + }else if($mineOnly){ + self::Debug('Clean own cache'); + }else{ + self::Debug('Clean all cache'); + } + if($mineOnly){ + self::Debug('Delete own cache'); + $file=(is_null($wsdlFile))?$this->GetCacheFileName():$wsdlFile; + if($cleanUp) + if($this->IsCacheValid($file)) + return $deleted; + if(file_exists($file)) + if(unlink($file)) + $deleted[]=$file; + if(file_exists($file.'.cache')) + if(unlink($file.'.cache')) + $deleted[]=$file.'.cache'; + if(file_exists($file.'.obj')) + if(unlink($file.'.obj')) + $deleted[]=$file.'.obj'; + self::Debug(sizeof($deleted).' files deleted'); + }else{ + self::Debug('Delete whole cache'); + $files=glob(self::$CacheFolder.(($cleanUp)?'/*.wsdl':'/*.wsd*')); + if($files!==false){ + $toDelete=Array(); + $i=-1; + $len=sizeof($files); + while(++$i<$len){ + $file=$files[$i]; + if($cleanUp){ + if(!$this->IsCacheValid($file)) + continue; + $toDelete[]=$file; + $toDelete[]=$file.'.cache'; + $toDelete[]=$file.'.obj'; + }else{ + if(!preg_match('/\.wsdl(\.cache|\.obj)?$/',$file)) + continue; + if(unlink($files[$i])) + $deleted[]=$files[$i]; + } + } + if($cleanUp){ + $i=-1; + $len=sizeof($toDelete); + while(++$i<$len) + if(file_exists($toDelete[$i])) + if(unlink($toDelete[$i])) + $deleted[]=$toDelete[$i]; + } + self::Debug(sizeof($deleted).' files deleted'); + }else{ + self::Debug('"glob" failed'); + } + } + return $deleted; + } + + /** + * Translate a type name for WSDL + * + * @param string $type The type name + * @return string The translates type name + */ + public static function TranslateType($type){ + if(!self::CallHook( + 'TranslateTypeHook', + Array( + 'type' => &$type + ) + ) + ) + return $type; + return ((in_array($type,self::$BasicTypes))?self::$Config['xsd']:self::$Config['tns']).':'.$type; + } + + /** + * Call a hook function + * + * @param string $name The hook name + * @param mixed $data The parameter (default: NULL) + * @return boolean Response + */ + public static function CallHook($name,$data=null){ + self::Debug('Call hook '.$name); + if(!self::HasHookHandler($name)) + return true; + $keys=array_keys(self::$Config['extensions'][$name]); + $i=-1; + $len=sizeof($keys); + while(++$i<$len){ + self::Debug('Call '.self::$Config['extensions'][$name][$keys[$i]]); + if(!call_user_func(self::$Config['extensions'][$name][$keys[$i]],$data)){ + self::Debug('Handler stopped hook execution'); + return false; + } + } + return true; + } + + /** + * Register a hook + * + * @param string $hook The hook name + * @param string $name The call name + * @param mixed $data The hook call data + */ + public static function RegisterHook($hook,$name,$data){ + if(!self::HasHookHandler($hook)) + self::$Config['extensions'][$hook]=Array(); + if(self::$Debugging){ + $handler=$data; + if(is_array($handler)){ + $class=$handler[0]; + $method=$handler[1]; + if(is_object($class)) + $class=get_class($class); + $handler=$class.'.'.$method; + } + self::Debug('Register hook '.$hook.' handler '.$name.': '.$handler); + } + self::$Config['extensions'][$hook][$name]=$data; + } + + /** + * Unregister a hook + * + * @param string $hook The hook name + * @param string $name The call name or NULL to unregister the whole hook + */ + public static function UnregisterHook($hook,$name=null){ + if(!self::HasHookHandler($hook)) + return; + if(!is_null($name)){ + if(!isset(self::$Config['extensions'][$hook][$name])) + return; + }else{ + unset(self::$Config['extensions'][$hook]); + return; + } + unset(self::$Config['extensions'][$hook][$name]); + if(self::$Debugging) + self::Debug('Unregister hook '.$hook.' handler '.$name); + if(sizeof(self::$Config['extensions'][$hook])<1) + unset(self::$Config['extensions'][$hook]); + } + + /** + * Determine if a hook has a registered handler + * + * @param string $hook The hook name + * @return boolean Has handler? + */ + public static function HasHookHandler($hook){ + return isset(self::$Config['extensions'][$hook]); + } + + /** + * Add a debugging message + * + * @param string $str The message to add to the debug protocol + */ + public static function Debug($str){ + if(!self::$Debugging) + return; + $temp=date('Y-m-d H:i:s')."\t".$str; + if(self::$DebugBackTrace){ + $trace=debug_backtrace(); + $temp.=" ('".$trace[1]['function']."' in '".basename($trace[1]['file'])."' at line #".$trace[1]['line'].")"; + } + self::$DebugInfo[]=$temp; + if(!is_null(self::$DebugFile)) + if(file_put_contents(self::$DebugFile,$temp."\n",FILE_APPEND)===false){ + self::Debug('Could not write to debug file '.self::$DebugFile); + self::$DebugFile=null; + } + } + + /** + * Initialize PhpWsdl + */ + public static function Init(){ + self::Debug('Init'); + // Configuration + self::$HTML2PDFSettings=Array( + 'attachments' => '1', + 'outline' => '1' + ); + self::$NameSpaces=Array( + 'soap' => 'http://schemas.xmlsoap.org/wsdl/soap/', + 's' => 'http://www.w3.org/2001/XMLSchema', + 'wsdl' => 'http://schemas.xmlsoap.org/wsdl/', + 'soapenc' => 'http://schemas.xmlsoap.org/soap/encoding/' + ); + self::EnableCache(); + self::$Config['extensions']=Array();// A configuration space for extensions + self::$Config['tns']='tns'; // The xmlns name for the target namespace + self::$Config['xsd']='s'; // The xmlns name for the XSD namespace + // Parser hooks + self::RegisterHook('InterpretKeywordserviceHook','internal','PhpWsdl::InterpretService'); + // WSDL hooks + self::RegisterHook('CreateWsdlHeaderHook','internal','PhpWsdl::CreateWsdlHeader'); + self::RegisterHook('CreateWsdlTypeSchemaHook','internal','PhpWsdl::CreateWsdlTypeSchema'); + self::RegisterHook('CreateWsdlMessagesHook','internal','PhpWsdl::CreateWsdlMessages'); + self::RegisterHook('CreateWsdlPortsHook','internal','PhpWsdl::CreateWsdlPorts'); + self::RegisterHook('CreateWsdlBindingsHook','internal','PhpWsdl::CreateWsdlBindings'); + self::RegisterHook('CreateWsdlServiceHook','internal','PhpWsdl::CreateWsdlService'); + self::RegisterHook('CreateWsdlFooterHook','internal','PhpWsdl::CreateWsdlFooter'); + self::RegisterHook('CreateWsdlOptimizeHook','internal','PhpWsdl::CreateWsdlOptimize'); + // HTML hooks + self::RegisterHook('CreateHtmlGeneralHook','internal','PhpWsdl::CreateHtmlGeneral'); + self::RegisterHook('CreateHtmlIndexHook','internal','PhpWsdl::CreateHtmlIndex'); + self::RegisterHook('CreateHtmlMethodsHook','internal','PhpWsdl::CreateHtmlMethods'); + self::RegisterHook('CreateHtmlComplexTypesHook','internal','PhpWsdl::CreateHtmlComplexTypes'); + // Extensions + self::Debug('Load extensions'); + $files=glob(dirname(__FILE__).'/'.'class.phpwsdl.*.php'); + if($files!==false){ + $i=-1; + $len=sizeof($files); + while(++$i<$len){ + self::Debug('Load '.$files[$i]); + require_once($files[$i]); + } + }else{ + self::Debug('"glob" failed'); + } + } + + /** + * Do things after the environment is configured + */ + public static function PostInit(){ + self::CallHook('PostInitHook'); + // Autorun + global $PhpWsdlAutoRun; + if(self::$AutoRun||$PhpWsdlAutoRun) + self::RunQuickMode(); + } +} diff --git a/webservice/lib/class.phpwsdlclient.php b/webservice/lib/class.phpwsdlclient.php new file mode 100644 index 0000000..097e4c4 --- /dev/null +++ b/webservice/lib/class.phpwsdlclient.php @@ -0,0 +1,662 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +// To use PhpWsdlClient, you need to load it seperatly from PhpWsdl. Or you +// just load this class and let it autoload PhpWsdl + +require_once(dirname(__FILE__).'/class.phpwsdl.php'); + +/** + * A SOAP client class for PhpWsdl + * + * @author Andreas Zimmermann, wan24.de + * @version 2.2 + */ +class PhpWsdlClient{ + /** + * The version number + * + * @var string + */ + public static $VERSION='2.2'; + /** + * Parse a method + * 1: Type + * 2: Method + * 3: Parameters + * + * @var string + */ + public static $methodRx='/^([^\s]+)\s+([^\(]+)\(([^\)]+)?\).*$/'; + /** + * Parse a type + * 1: Type + * 2: Name + * + * @var string + */ + public static $typeRx='/^([^\s]+)\s([^\[|\{|\s]+)[\[|\{|\s].*$/s'; + /** + * Parse an element + * 1: Type + * 2: Name + * + * @var string + */ + public static $elementRx='/^\s*([^\s]+)\s+([^\s|;]+);.*$/'; + /** + * The WSDL URI + * + * @var string + */ + public $WsdlUri; + /** + * The PHP SoapClient object + * + * @var SoapClient + */ + public $Client=null; + /** + * SOAP call options + * + * @var array + */ + public $Options; + /** + * SOAP call request headers + * + * @var array + */ + public $RequestHeaders; + /** + * PHP SoapClient options array + * + * @var array + */ + public $ClientOptions; + /** + * The webservice name + * + * @var string + */ + public $ServiceName=null; + /** + * The SOAP endpoint + * + * @var string + */ + public $EndPoint=null; + /** + * The SOAP namespace + * + * @var string + */ + public $NameSpace=null; + /** + * A PhpWsdl object + * + * @var PhpWsdl + */ + public $Server=null; + /** + * The WSDL + * + * @var string + */ + public $WSDL=null; + /** + * A list of warnings + * + * @var string[] + */ + public $Warnings=Array(); + /** + * The http Auth username for fetching the WSDL (and sending SOAP requests, if PhpWsdlClient->UseSoapHttpAuth is TRUE) + * If you need a different login for SOAP requests, use the PhpWsdlClient->ClientOptions array fro the SOAP request + * authentification values (login/password) + * + * @var string + */ + public $HttpUser=null; + /** + * The http Auth password + * + * @var string + */ + public $HttpPassword=null; + /** + * Use http Auth for SOAP requests, too? If FALSE, the login will only be used to fetch the WSDL from the given URI + * + * @var boolean + */ + public $UseSoapHttpAuth=true; + /** + * Enable debugging of the RAW request/response? + * + * @var boolean + */ + public $Debugging=false; + + /** + * Constructor + * + * @param string $wsdlUri The WSDL URI + * @param array $options SOAP call options (default: NULL) + * @param array $requestHeaders SOAP call request headers (default: NULL) + */ + public function PhpWsdlClient($wsdlUri,$options=null,$requestHeaders=null,$clientOptions=Array()){ + PhpWsdl::Debug('New PhpWsdlClient '.$wsdlUri); + $this->WsdlUri=$wsdlUri; + $this->Options=$options; + $this->RequestHeaders=$requestHeaders; + $this->ClientOptions=array_merge( + Array( + 'soap_version' => SOAP_1_1|SOAP_1_2, + 'encoding' => 'UTF-8', + 'compression' => SOAP_COMPRESSION_ACCEPT|SOAP_COMPRESSION_GZIP|9, + 'connection_timeout'=>5 + ), + $clientOptions + ); + $this->GetWsdlFromCache(); + } + + /** + * Fetch the WSDL (supports http Auth if CURL is enabled) + * + * @param string $wsdlUri The WSDL URI or NULL to use the PhpWsdlClient->WaslUri property (default: NULL) + * @param array $options The CURL options (default: array) + * @return string The WSDL XML + */ + public function FetchWsdl($wsdlUri=null,$options=Array()){ + if(is_null($wsdlUri)) + $wsdlUri=$this->WsdlUri; + PhpWsdl::Debug('Fetch WSDL from '.$wsdlUri); + if(!is_file($wsdlUri)&&function_exists('curl_init')&&!is_null($this->HttpUser)){ + // Fetch with http Auth (credits to faebu :) + PhpWsdl::Debug('Try CURL for http Auth'); + $ch=curl_init(); + $credit=($this->HttpUser.':'.$this->HttpPassword); + curl_setopt_array($ch,array_merge( + Array( + CURLOPT_URL => $wsdlUri, + CURLOPT_HTTPAUTH => CURLAUTH_BASIC, + CURLOPT_USERPWD => $credit, + CURLOPT_TIMEOUT => 10, + CURLOPT_RETURNTRANSFER => 1 + ), + $options + )); + $wsdl=curl_exec($ch); + if($wsdl===false){ + PhpWsdl::Debug('Could not fetch WSDL with CURL: '.curl_error($ch)); + @curl_close($ch); + }else{ + curl_close($ch); + return $wsdl; + } + } + // Fetch without authentification + return file_get_contents($wsdlUri); + } + + /** + * Do a SOAP request + * + * @param string $method The method name + * @param array $param The method parameters + * @param array $options The call options (default: array) + * @param array $requestHeaders The request headers (default: array) + * @return mixed The server response + */ + public function DoRequest($method,$param,$options=Array(),$requestHeaders=Array()){ + PhpWsdl::Debug('Sending request '.$method); + $options=array_merge($this->Options,$options); + $requestHeaders=array_merge($this->RequestHeaders,$requestHeaders); + $client=$this->GetClient(); + $res=$client->__soapCall($method,$param,$options,$requestHeaders); + if(is_soap_fault($res)) + PhpWsdl::Debug('SOAP error #'.$res->faultcode.': '.$res->faultstring); + if($this->Debugging){ + PhpWsdl::Debug('Parameters: '.print_r($param,true)); + PhpWsdl::Debug('Options: '.print_r($options,true)); + PhpWsdl::Debug('Headers: '.print_r($requestHeaders,true)); + PhpWsdl::Debug('Result: '.print_r($res,true)); + PhpWsdl::Debug('Request: '.$client->__getLastRequest()); + PhpWsdl::Debug('Request headers: '.$client->__getLastRequestHeaders()); + PhpWsdl::Debug('Response: '.$client->__getLastResponse()); + PhpWsdl::Debug('Response headers: '.$client->__getLastResponseHeaders()); + } + return $res; + } + + /** + * Get the PHP SoapClient object + * + * @param string $uri The WSDL URI or NULL to use the PhpWsdlClient->WsdlUri property (default: NULL) + * @param array $options The additional PHP SoapClient options (default: array) + * @return SoapClient The PHP SoapClient object + */ + public function GetClient($uri=null,$options=Array()){ + if(is_null($this->Client)){ + if(is_null($uri)) + $uri=$this->WsdlUri; + PhpWsdl::Debug('Create a PHP SoapClient object in PhpWsdlClient from '.$uri); + if(!is_null(PhpWsdl::$CacheFolder)){ + $wsdlFile=$this->GetCacheFileName($uri); + if(!is_null($this->GetWsdlFromCache($wsdlFile))){ + PhpWsdl::Debug('Use cached WSDL from '.$wsdlFile); + $uri=$wsdlFile; + }else{ + $wsdl=$this->FetchWsdl($uri); + if($wsdl!==false) + if($this->WriteWsdlToCache($wsdl,$uri,$wsdlFile,true)){ + PhpWsdl::Debug('Using cached WSDL from '.$wsdlFile); + $uri=$wsdlFile; + } + } + } + if( + !is_null($this->HttpUser)&& + !isset($this->ClientOptions['login'])&& + !isset($options['login'])&& + $this->UseSoapHttpAuth + ){ + PhpWsdl::Debug('Using http Auth options'); + $options['login']=$this->HttpUser; + $options['password']=$this->HttpPassword; + } + if($this->Debugging){ + PhpWsdl::Debug('Debugging enabled'); + $options['trace']=true; + } + $this->Client=new SoapClient($uri,array_merge( + $this->ClientOptions, + $options + )); + } + return $this->Client; + } + + /** + * Create/Fill a PhpWsdl object from WSDL + * + * @param PhpWsdl An existing PhpWsdl object (default: NULL) + * @return PhpWsdl The PhpWsdl object + */ + public function CreateServerFromWsdl($soap=null){ + PhpWsdl::Debug('Create/Fill a PhpWsdl object from WSDL'); + if(is_null($soap)){ + if(!is_null($this->Server)){ + PhpWsdl::Debug('Return existing object'); + return $this->Server; + } + $soap=PhpWsdl::CreateInstance(); + }else{ + PhpWsdl::Debug('Use existing object'); + } + if(!is_null($soap->GetWsdlFromCache())){ + PhpWsdl::Debug('Server created from cached values'); + if(is_null($this->Server)) + $this->Server=$soap; + return $soap; + } + // Configuration + $soap->WsdlUri=$this->WsdlUri; + $this->ParseWsdl(); + if(!is_null($this->ServiceName)) + $soap->Name=$this->ServiceName; + if(!is_null($this->NameSpace)) + $soap->NameSpace=$this->NameSpace; + $client=$this->GetClient(); + // Methods + $fnc=$client->__getFunctions(); + $i=-1; + $len=sizeof($fnc); + while(++$i<$len){ + $f=$fnc[$i]; + list( + $type, + $method, + $temp + )=explode("\t",preg_replace(self::$methodRx,"$1\t$2\t$3",$f)); + PhpWsdl::Debug('Found method #'.$i.' '.$method); + if(!is_null($soap->GetMethod($method))){ + $this->Warn('WARNING: Double method detected!'); + continue; + } + $m=new PhpWsdlMethod($method); + $temp=explode(' ',$temp); + $pLen=sizeof($temp); + for($j=0;$j<$pLen-1;$j++){ + list( + $t, + $n + )=Array( + $temp[$j], + $temp[$j+1] + ); + PhpWsdl::Debug('Found parameter #'.$j.' '.$n.' type of '.$t); + $m->Param[]=new PhpWsdlParam(substr($n,1),$t); + } + if($type!='void') + $m->Return=new PhpWsdlParam('return',$type); + $soap->Methods[]=$m; + } + // Types + $typ=$client->__getTypes(); + $i=-1; + $len=sizeof($typ); + while(++$i<$len){ + $t=$typ[$i]; + list( + $type, + $name + )=explode("\t",preg_replace(self::$typeRx,"$1\t$2",$t)); + PhpWsdl::Debug('Found type #'.$i.' '.$name.' type of '.$type); + if(!is_null($soap->GetType($name))){ + $this->Warn('WARNING: Double type detected!'); + continue; + } + $arr=strpos($t,'[]')>-1; + if($arr){ + PhpWsdl::Debug('Array type'); + $y=new PhpWsdlComplex($name); + $y->Type=$type; + $y->IsArray=true; + $soap->Types[]=$y; + }else if($type=='struct'){ + PhpWsdl::Debug('Complex type'); + $el=Array(); + $temp=explode("\n",$t); + $j=0; + $eLen=sizeof($temp)-1; + while(++$j<$eLen){ + list( + $p, + $n + )=explode("\t",preg_replace(self::$elementRx,"$1\t$2",$temp[$j]),2); + PhpWsdl::Debug('Found element #'.$j.' '.$n.' type of '.$p); + $el[]=new PhpWsdlElement($n,$p); + } + $y=new PhpWsdlComplex($name,$el); + $y->IsArray=false; + $soap->Types[]=$y; + }else{ + $this->Warn('WARNING: Could not create type '.$t); + } + } + if(is_null($this->Server)) + $this->Server=$soap; + return $soap; + } + + /** + * Parse the WSDL for webservice name, namespace and endpoint URI + */ + public function ParseWsdl(){ + if(!is_null($this->ServiceName)&&!is_null($this->EndPoint)&&!is_null($this->NameSpace)) + return; + PhpWsdl::Debug('Parse WSDL'); + $wsdl=$this->WSDL; + $writeCache=false; + if(is_null($wsdl)){ + $wsdl=$this->FetchWsdl(); + if($wsdl===false) + throw(new Exception('Could not fetch WSDL')); + $writeCache=true; + } + $xml=new DOMDocument(); + if(!$xml->loadXML($wsdl)) + throw(new Exception('Invalid WSDL')); + $x=new DOMXPath($xml); + // Namespace + $temp=$x->query("/*[local-name()='definitions']/@targetNamespace"); + if($temp->length>0){ + $temp=$temp->item(0); + PhpWsdl::Debug('Namespace '.$temp->value); + $this->NameSpace=$temp->value; + }else{ + $this->Warn('WARNING: No namespace found'); + } + // Webservice name + $temp=$x->query("/*[local-name()='definitions']/*[local-name()='service']/@name"); + if($temp->length>0){ + $temp=$temp->item(0); + PhpWsdl::Debug('Name '.$temp->value); + $this->ServiceName=$temp->value; + }else{ + $this->Warn('WARNING: No name found'); + } + // Endpoint URI + $temp=$x->query("/*[local-name()='definitions']/*[local-name()='service']/*[local-name()='port']/*[local-name()='address']/@location"); + if($temp->length>0){ + $temp=$temp->item(0); + PhpWsdl::Debug('Endpoint '.$temp->value); + $this->EndPoint=$temp->value; + }else{ + $this->Warn('WARNING: No endpoint found'); + } + // Caching + $this->WriteWsdlToCache($wsdl,null,null,$writeCache); + } + + /** + * Create a PHP SOAP client for this webservice + * + * @param string $filename Name of the file to save the PHP code (default: NULL) + * @param array $options The options array for the PhpWsdl->OutputPhp method (default: array) + * @return string The UTF-8 encoded PHP code of the SOAP client + */ + public function CreatePhpSoapClient($filename=null,$options=Array()){ + $php=$this->CreateServerFromWsdl()->OutputPhp(false,false,$options); + if(!is_null($filename)) + if(file_put_contents($filename,$php)===false) + PhpWsdl::Debug('Could not write file '.$filename); + return $php; + } + + /** + * Add a warning message + * + * @param string $str The message + */ + private function Warn($str){ + $this->Warnings[]=$str; + PhpWsdl::Debug($str); + } + + /** + * Get the cache filename + * + * @param string $wsdluri The WSDL URI or NULL to use the PhpWsdlAjax->WsdlUri property (default: NULL) + * @return string The cache filename or NULL, if caching is disabled + */ + public function GetCacheFileName($wsdluri=null){ + $data=Array( + 'client' => $this, + 'wsdluri' => $wsdluri, + 'filename' => (is_null(PhpWsdl::$CacheFolder))?null:PhpWsdl::$CacheFolder.'/client-'.sha1((is_null($wsdluri))?$this->WsdlUri:$wsdluri).'.wsdl' + ); + PhpWsdl::CallHook( + 'ClientCacheFileNameHook', + $data + ); + return $data['filename']; + } + + /** + * Determine if the cache file exists + * + * @param string $file The WSDL cache filename or NULL to use the default (default: NULL) + * @return boolean Are the cache files present? + */ + public function CacheFileExists($file=null){ + if(is_null($file)) + $file=$this->GetCacheFileName(); + PhpWsdl::Debug('Check cache file exists '.$file); + return file_exists($file)&&file_exists($file.'.cache'); + } + + /** + * Determine if the existing cache files are still valid + * + * @param string $file The WSDL cache filename or NULL to use the default (default: NULL) + * @return boolean Valid? + */ + public function IsCacheValid($file=null){ + PhpWsdl::Debug('Check cache valid'); + if(is_null($file)) + $file=$this->GetCacheFileName(); + if(!$this->CacheFileExists($file)) + return false; + return PhpWsdl::$CacheTime<0||time()-file_get_contents($file.'.cache')<=PhpWsdl::$CacheTime; + } + + /** + * Get the WSDL from the cache + * + * @param string $file The WSDL cache filename or NULL to use the default (default: NULL) + * @param boolean $force Force this even if the cache is timed out? (default: FALSE) + * @param boolean $nounserialize Don't unserialize the PhpWsdl* objects? (default: FALSE) + * @return string The cached WSDL + */ + public function GetWsdlFromCache($file=null,$force=false,$nounserialize=false){ + PhpWsdl::Debug('Get WSDL from cache'); + if(!is_null($this->WSDL)) + return $this->WSDL; + if(is_null($file)) + $file=$this->GetCacheFileName(); + if(!$force){ + if(!$this->IsCacheValid($file)) + return null; + }else if(!$this->CacheFileExists($file)){ + return null; + } + $this->WSDL=file_get_contents($file); + if(!$nounserialize){ + PhpWsdl::Debug('Unserialize data'); + $data=unserialize(file_get_contents($file.'.obj')); + $this->ServiceName=$data['servicename']; + $this->EndPoint=$data['endpoint']; + $this->NameSpace=$data['namespace']; + PhpWsdl::CallHook( + 'ClientReadCacheHook', + Array( + 'client' => $this, + 'data' => &$data + ) + ); + if($data['version']!=self::$VERSION){ + PhpWsdl::Debug('Could not use cache from version '.$data['version']); + $this->ServiceName=null; + $this->EndPoint=null; + $this->NameSpace=null; + $this->WSDL=null; + return null; + } + } + return $this->WSDL; + } + + /** + * Write WSDL to cache + * + * @param string $wsdl The UTF-8 encoded WSDL string (default: NULL) + * @param string $wsdluri The SOAP WSDL URI or NULL to use the default (default: NULL) + * @param string $file The target filename or NULL to use the default (default: NULL) + * @param boolean $force Force refresh (default: FALSE) + * @return boolean Succeed? + */ + public function WriteWsdlToCache($wsdl=null,$wsdluri=null,$file=null,$force=false){ + PhpWsdl::Debug('Write WSDL to the cache'); + if(is_null($wsdluri)) + $wsdluri=$this->WsdlUri; + if($wsdluri==$this->WsdlUri&&!is_null($wsdl)) + $this->WSDL=$wsdl; + if(is_null($wsdl)){ + if(is_null($this->WSDL)){ + PhpWsdl::Debug('No WSDL'); + return false;// WSDL not defined + } + $wsdl=$this->WSDL; + } + if(is_null($file)){ + $file=$this->GetCacheFileName($wsdluri); + if(is_null($file)){ + PhpWsdl::Debug('No cache file'); + return false;// No cache file + } + } + $temp=substr($file,0,1); + if($temp!='/'&&$temp!='.'){ + if(is_null(PhpWsdl::$CacheFolder)){ + PhpWsdl::Debug('No cache folder'); + return false;// No cache folder + } + $file=PhpWsdl::$CacheFolder.'/'.$file; + } + if(!$force) + if($this->IsCacheValid($file)){ + PhpWsdl::Debug('Cache is still valid'); + return true;// Existing cache is still valid + } + PhpWsdl::Debug('Write to '.$file); + if(file_put_contents($file,$wsdl)===false){ + PhpWsdl::Debug('Could not write to cache'); + return false;// Error writing to cache + } + if(file_put_contents($file.'.cache',time())===false){ + PhpWsdl::Debug('Could not write cache time file'); + return false;// Error writing to cache + } + $data=Array( + 'version' => self::$VERSION, + 'servicename' => $this->ServiceName, + 'endpoint' => $this->EndPoint, + 'namespace' => $this->NameSpace + ); + PhpWsdl::CallHook( + 'ClientWriteCacheHook', + Array( + 'client' => $this, + 'data' => &$data + ) + ); + if(file_put_contents($file.'.obj',serialize($data))===false){ + PhpWsdl::Debug('Could not write serialized cache'); + return false; + } + return true; + } + + /** + * SOAP method call proxy method + * + * @param string $method The method name + * @param array $param The method parameters + * @return mixed The server response + */ + public function __call($method,$param){ + return $this->DoRequest($method,$param); + } +} diff --git a/webservice/lib/class.phpwsdlcomplex.php b/webservice/lib/class.phpwsdlcomplex.php new file mode 100644 index 0000000..6e712cd --- /dev/null +++ b/webservice/lib/class.phpwsdlcomplex.php @@ -0,0 +1,305 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +PhpWsdl::RegisterHook('InterpretKeywordpw_complexHook','internal','PhpWsdlComplex::InterpretComplex'); +PhpWsdl::RegisterHook('CreateObjectHook','internalcomplex','PhpWsdlComplex::CreateComplexTypeObject'); + +/** + * This class creates complex types (classes or arrays) + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlComplex extends PhpWsdlObject{ + /** + * The array type + * + * @var string + */ + public $Type=null; + /** + * A list of elements, if this type is a class + * + * @var PhpWsdlElement[] + */ + public $Elements; + /** + * Is this type an array? + * + * @var boolean + */ + public $IsArray; + /** + * Disable definition of arrays with the "Array" postfix in the type name? + * + * @var boolean + */ + public static $DisableArrayPostfix=false; + + /** + * Constructor + * + * @param string $name The name + * @param PhpWsdlElement[] $el Optional a list of elements + * @param array $settings Optional the settings hash array (default: NULL) + */ + public function PhpWsdlComplex($name,$el=Array(),$settings=null){ + PhpWsdl::Debug('New complex type '.$name); + parent::PhpWsdlObject($name,$settings); + if(!self::$DisableArrayPostfix){ + $this->IsArray=substr($name,strlen($name)-5,5)=='Array'; + if($this->IsArray) + $this->Type=substr($this->Name,0,strlen($this->Name)-5); + } + $this->Elements=$el; + if(!is_null($settings)) + if(isset($settings['isarray'])) + $this->IsArray=$settings['isarray']; + } + + /** + * Create WSDL for the type + * + * @param PhpWsdl $pw The PhpWsdl object + * @return string The WSDL + */ + public function CreateType($pw){ + $res=Array(); + $res[]='<s:complexType name="'.$this->Name.'">'; + if($pw->IncludeDocs&&!$pw->Optimize&&!is_null($this->Docs)){ + $res[]='<s:annotation>'; + $res[]='<s:documentation><![CDATA['.$this->Docs.']]></s:documentation>'; + $res[]='</s:annotation>'; + } + if(!$this->IsArray){ + PhpWsdl::Debug('Create WSDL definition for type '.$this->Name.' as type'); + $res[]='<s:sequence>'; + $i=-1; + $len=sizeof($this->Elements); + while(++$i<$len) + $res[]=$this->Elements[$i]->CreateElement($pw); + $res[]='</s:sequence>'; + }else{ + PhpWsdl::Debug('Create WSDL definition for type '.$this->Name.' as array'); + $res[]='<s:complexContent>'; + $res[]='<s:restriction base="soapenc:Array">'; + $res[]='<s:attribute ref="soapenc:arrayType" wsdl:arrayType="'; + $res[sizeof($res)-1].=(in_array($this->Type,PhpWsdl::$BasicTypes))?'s':'tns'; + $res[sizeof($res)-1].=':'.$this->Type.'[]" />'; + $res[]='</s:restriction>'; + $res[]='</s:complexContent>'; + } + $res[]='</s:complexType>'; + return implode('',$res); + } + + /** + * Find an element within this type + * + * @param string $name The name + * @return PhpWsdlElement The element or NULL, if not found + */ + public function GetElement($name){ + PhpWsdl::Debug('Find element '.$name); + $i=-1; + $len=sizeof($this->Elements); + while(++$i<$len) + if($this->Elements[$i]->Name==$name){ + PhpWsdl::Debug('Found element at index '.$i); + return $this->Elements[$i]; + } + return null; + } + + /** + * Create the HTML documentation for a complex type + * + * @param array $data + */ + public function CreateTypeHtml($data){ + PhpWsdl::Debug('CreateTypeHtml for '.$data['type']->Name); + $res=&$data['res']; + $t=&$data['type']; + $res[]='<h3>'.$t->Name.'</h3>'; + $res[]='<a name="'.$t->Name.'"></a>'; + $eLen=sizeof($t->Elements); + if($t->IsArray){ + // Array type + $res[]='<p>This is an array type of <span class="pre">'; + $o=sizeof($res)-1; + if(in_array($t->Type,PhpWsdl::$BasicTypes)){ + $res[$o].='<span class="blue">'.$t->Type.'</span>'; + }else{ + $res[$o].='<a href="#'.$t->Type.'"><span class="lightBlue">'.$t->Type.'</span></a>'; + } + $res[$o].='</span>.</p>'; + if(!is_null($t->Docs)) + $res[]='<p>'.nl2br(htmlentities($t->Docs)).'</p>'; + }else if($eLen>0){ + // Complex type with elements + if(!is_null($t->Docs)) + $res[]='<p>'.nl2br(htmlentities($t->Docs)).'</p>'; + $res[]='<ul class="pre">'; + $j=-1; + while(++$j<$eLen) + $t->Elements[$j]->CreateElementHtml(array_merge( + $data, + Array( + 'element' => $t->Elements[$j] + ) + )); + $res[]='</ul>'; + }else{ + // Complex type without elements + $res[]='<p>This type has no elements.</p>'; + } + PhpWsdl::CallHook( + 'CreateTypeHtmlHook', + $data + ); + } + + /** + * Create type PHP code + * + * @param array $data The event data + */ + public function CreateTypePhp($data){ + if($this->IsArray) + return; + $server=$data['server']; + $res=&$data['res']; + $res[]="/**"; + if(!is_null($this->Docs)){ + $res[]=" * ".implode("\n * ",explode("\n",$this->Docs)); + $res[]=" *"; + } + $i=-1; + $eLen=sizeof($this->Elements); + while(++$i<$eLen){ + $e=$this->Elements[$i]; + $res[]=" * @pw_element ".$e->Type." \$".$e->Name.((!is_null($e->Docs))?" ".implode("\n\t * ",explode("\n",$e->Docs)):""); + } + $res[]=" * @pw_complex ".$this->Name; + $res[]=" */"; + $res[]="class ".$this->Name."{"; + $i=-1; + while(++$i<$eLen){ + $e=$this->Elements[$i]; + $res[]="\t/**"; + if(!is_null($e->Docs)){ + $res[]="\t * ".implode("\n\t * ",explode("\n",$e->Docs)); + $res[]="\t *"; + } + $res[]="\t * @var ".$e->Type; + $res[]="\t */"; + $res[]="\tpublic \$".$this->Elements[$i]->Name.";"; + } + $res[]="}"; + } + + /** + * Interpret a complex type + * + * @param array $data The parser data + * @return boolean Response + */ + public static function InterpretComplex($data){ + $info=explode(' ',$data['keyword'][1],3); + if(sizeof($info)<1) + return true; + $server=$data['server']; + $name=$info[0]; + PhpWsdl::Debug('Interpret complex type "'.$name.'"'); + $type=null; + $docs=null; + if(strpos($name,'[]')>-1){ + if(sizeof($info)<2){ + PhpWsdl::Debug('WARNING: Invalid array definition!'); + return true; + } + $name=substr($name,0,strlen($name)-2); + if(!is_null($server->GetType($name))){ + PhpWsdl::Debug('WARNING: Double type detected!'); + return true; + } + $type=$info[1]; + if($server->ParseDocs) + if(sizeof($info)>2) + $docs=$info[2]; + PhpWsdl::Debug('Array "'.$name.'" type of "'.$type.'" definition'); + }else{ + if(!is_null($server->GetType($name))){ + PhpWsdl::Debug('WARNING: Double type detected!'); + return true; + } + if(!self::$DisableArrayPostfix&&substr($name,strlen($name)-5)=='Array'){ + $type=substr($name,0,strlen($name)-5); + PhpWsdl::Debug('Array "'.$name.'" type of "'.$type.'" definition'); + }else{ + PhpWsdl::Debug('Complex type definition'); + } + if($server->ParseDocs){ + $temp=sizeof($info); + if($temp>1) + $docs=($temp>2)?$info[1].' '.$info[2]:$info[1]; + } + } + $data['type']=Array( + 'id' => 'complex', + 'name' => $name, + 'type' => $type, + 'docs' => $docs + ); + return false; + } + + /** + * Create complex type object + * + * @param array $data The parser data + * @return boolean Response + */ + public static function CreateComplexTypeObject($data){ + if($data['method']!='') + return true; + if(!is_null($data['obj'])) + return true; + if(!is_array($data['type'])) + return true; + if(!isset($data['type']['id'])) + return true; + if($data['type']['id']!='complex') + return true; + if(!is_null($data['docs'])){ + $data['settings']['docs']=$data['docs']; + }else{ + $data['settings']['docs']=$data['type']['docs']; + } + PhpWsdl::Debug('Add complex type '.$data['type']['name']); + $data['settings']['isarray']=!is_null($data['type']['type']); + $data['obj']=new PhpWsdlComplex($data['type']['name'],$data['elements'],$data['settings']); + $data['obj']->Type=$data['type']['type']; + $data['settings']=Array(); + $data['server']->Types[]=$data['obj']; + return true; + } +} diff --git a/webservice/lib/class.phpwsdlelement.php b/webservice/lib/class.phpwsdlelement.php new file mode 100644 index 0000000..2b1d6a6 --- /dev/null +++ b/webservice/lib/class.phpwsdlelement.php @@ -0,0 +1,144 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +PhpWsdl::RegisterHook('InterpretKeywordpw_elementHook','internal','PhpWsdlElement::InterpretElement'); + +/** + * An element of a complex type + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlElement extends PhpWsdlParam{ + /** + * Can the value be NULL? + * + * @var boolean + */ + public $NillAble=true; + /** + * Minimum number of elements + * + * @var int + */ + public $MinOccurs=1; + /** + * Maximum number of elements + * + * @var int|string + */ + public $MaxOccurs=1; + + /** + * Constructor + * + * @param string $name The name + * @param string $type The type name + * @param array $settings Optional the settings hash array (default: NULL) + */ + public function PhpWsdlElement($name,$type,$settings=null){ + PhpWsdl::Debug('New complex type element '.$name); + parent::PhpWsdlParam($name,$type,$settings); + $this->NillAble=!in_array($type,PhpWsdl::$NonNillable); + if(!is_null($settings)){ + if(isset($settings['nillable'])) + $this->NillAble=$settings['nillable']=='1'||$settings['nillable']=='true'; + if(isset($settings['minoccurs'])) + $this->MinOccurs=$settings['minoccurs']; + if(isset($settings['maxoccurs'])) + $this->MaxOccurs=$settings['maxoccurs']; + } + } + + /** + * Create the WSDL + * + * @param PhpWsdl $pw The PhpWsdl object + * @return string The WSDL + */ + public function CreateElement($pw){ + PhpWsdl::Debug('Create WSDL definition for element '.$this->Name); + $res='<s:element minOccurs="'.$this->MinOccurs.'" maxOccurs="'.$this->MaxOccurs.'" nillable="'.(($this->NillAble)?'true':'false').'" name="'.$this->Name.'" type="'; + $res.=PhpWsdl::TranslateType($this->Type).'"'; + if($pw->IncludeDocs&&!$pw->Optimize&&!is_null($this->Docs)){ + $res.='>'."\n"; + $res.='<s:annotation>'."\n"; + $res.='<s:documentation><![CDATA['.$this->Docs.']]></s:documentation>'."\n"; + $res.='</s:annotation>'."\n"; + $res.='</s:element>'; + }else{ + $res.=' />'; + } + return $res; + } + + /** + * Create the HTML documentation for a complex type element + * + * @param array $data + */ + public function CreateElementHtml($data){ + PhpWsdl::Debug('CreateElementHtml for '.$data['element']->Name); + $res=&$data['res']; + $e=&$data['element']; + if(in_array($e->Type,PhpWsdl::$BasicTypes)){ + $res[]='<li><span class="blue">'.$e->Type.'</span> <span class="bold">'.$e->Name.'</span>'; + }else{ + $res[]='<li><a href="#'.$e->Type.'"><span class="lightBlue">'.$e->Type.'</span></a> <span class="bold">'.$e->Name.'</span>'; + } + $o=sizeof($res)-1; + $temp=Array( + 'nillable = <span class="blue">'.(($e->NillAble)?'true':'false').'</span>', + 'minoccurs = <span class="blue">'.$e->MinOccurs.'</span>', + 'maxoccurs = <span class="blue">'.$e->MaxOccurs.'</span>', + ); + $res[$o].=' ('.implode(', ',$temp).')'; + if(!is_null($e->Docs)) + $res[$o].='<br><span class="normal">'.nl2br(htmlentities($e->Docs)).'</span>'; + $res[$o].='</li>'; + PhpWsdl::CallHook( + 'CreateElementHtmlHook', + $data + ); + } + + /** + * Interpret a element keyword + * + * @param array $data The parser data + * @return boolean Response + */ + public static function InterpretElement($data){ + $info=explode(' ',$data['keyword'][1],3); + if(sizeof($info)<2) + return true; + $name=substr($info[1],1); + if(substr($name,strlen($name)-1,1)==';') + $name=substr($name,0,strlen($name)-1); + PhpWsdl::Debug('Interpret element '.$name); + if($data['server']->ParseDocs) + if(sizeof($info)>2) + $data['settings']['docs']=trim($info[2]); + $data['elements'][]=new PhpWsdlElement($name,$info[0],$data['settings']); + $data['settings']=Array(); + return false; + } +} diff --git a/webservice/lib/class.phpwsdlformatter.php b/webservice/lib/class.phpwsdlformatter.php new file mode 100644 index 0000000..41310af --- /dev/null +++ b/webservice/lib/class.phpwsdlformatter.php @@ -0,0 +1,245 @@ +<?php +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; +/** + * XML Formatter + * + * @author Zilvinas Saltys <zilvinas.saltys@gmail.com> + * @url http://www.thedeveloperday.com/ + * @version 0.3.0 + * @package XML_Formatter + */ + +/** + * XML_Formatter class responsible for formatting an XML stream + * to an indented human readable format. + * + * @package XML_Formatter + */ +class PhpWsdlFormatter +{ + /** + * XML parser + * + * @var resource xml parser + */ + protected $_parser = null; + + /** + * Unformatted XML input stream + * + * @var resource input stream + */ + protected $_input = null; + + /** + * Formatted XML output stream + * + * @var resource output stream + */ + protected $_output = null; + + /** + * Input stream offset index + * + * @var int stream offset index + */ + protected $_offset = 0; + + /** + * XML depth index + * + * @var int XML depth index + */ + protected $_depth = 0; + + /** + * Closed XML element type flag + * + * @var boolean closed XML element type flag + */ + protected $_empty = false; + + /** + * Input stream buffer + * + * @var string input stream buffer + */ + protected $_buffer = ""; + + /** + * Formatter options + * + * =====> (int) bufferSize: + * - Buffer size in kilobytes + * + * =====> (string) paddingString: + * - Padding string used for indentation + * + * =====> (int) paddingMultiplier: + * - Padding multiplier used to multiply padding string + * + * =====> (boolean) formatCData: + * - Flag whether to format character data. May be useful in some cases. + * + * =====> (boolean) multipleLineCData: + * - Flag whether character data consists of multiple lines. + * + * =====> (int|false) wordwrapCData: + * - Character data wordwrap length + * - If false does not wordwrap character data + * + * =====> (string) inputEOL: + * - Input stream character data end of line string + * + * =====> (string) outputEOL: + * - Output stream character data end of line string + * + * @var array formatter options + */ + protected $_options = array( + "bufferSize" => 4096, + "paddingString" => " ", + "paddingMultiplier" => 4, + "formatCData" => true, + "multipleLineCData" => true, + "wordwrapCData" => 75, + "inputEOL" => "\n", + "outputEOL" => "\n" + ); + + /** + * Constructor + * + * @param resource $input Input stream + * @param resource $output Output stream + * @return void + */ + public function __construct($input, $output, Array $options = array()) + { + $this->_input = $input; + $this->_output = $output; + $this->_options = array_merge($this->_options, $options); + + $this->_parser = xml_parser_create(); + + xml_set_object($this->_parser, $this); + + xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false); + xml_parser_set_option($this->_parser, XML_OPTION_SKIP_WHITE, 0); + + xml_set_element_handler($this->_parser, "_cbElementStart", "_cbElementEnd"); + xml_set_character_data_handler($this->_parser, "_cbCharacterData"); + } + + /** + * Get padding string relative to XML depth index + * + * @param void + * @return string padding string + */ + protected function _getPaddingStr() + { + return str_repeat($this->_options["paddingString"], $this->_depth * $this->_options["paddingMultiplier"]); + } + + /** + * Element start callback + * + * @param resource $parser xml parser + * @param string $name element name + * @param array $attributes element attributes + * @return void + */ + protected function _cbElementStart($parser, $name, Array $attributes) + { + $idx = xml_get_current_byte_index($this->_parser); + + $this->_empty = $this->_buffer[$idx - $this->_offset] == '/'; + + $attrs = ""; + foreach ($attributes as $key => $val) { + $attrs .= " " . $key . "=\"" . $val . "\""; + } + + fwrite($this->_output, $this->_getPaddingStr() . "<" . $name . $attrs . ($this->_empty ? ' />' : '>') . "\n"); + + if (!$this->_empty) ++$this->_depth; + } + + /** + * Element end callback + * + * @param resource $parser xml parser + * @param string $name element name + * @return void + */ + protected function _cbElementEnd($parser, $name) + { + if (!$this->_empty) { + --$this->_depth; + + fwrite($this->_output, $this->_getPaddingStr() . "</" . $name . ">" . "\n"); + } else { + $this->_empty = false; + } + } + + /** + * Character data callback + * + * @param resource $parser xml parser + * @param string $data character data + * @return void + */ + protected function _cbCharacterData($parser, $data) + { + if (!$this->_options["formatCData"]) { + return; + } + + $data = trim($data); + + if (strlen($data)) { + $pad = $this->_getPaddingStr(); + + if ($this->_options["multipleLineCData"]) { + + // remove all tabs + $data = str_replace("\t", "", $data); + + // append each line with a padding string + $data = implode($this->_options["inputEOL"] . $pad, explode($this->_options["inputEOL"], $data)); + } + + if ($this->_options["wordwrapCData"]) { + $data = wordwrap($data, $this->_options["wordwrapCData"], $this->_options["outputEOL"] . $pad, false); + } + + fwrite($this->_output, $pad . $data . "\n"); + } + } + + /** + * Main format method + * + * @param void + * @throws Exception + * @return void + */ + public function format() + { + while ($this->_buffer = fread($this->_input, $this->_options["bufferSize"])) { + if (!xml_parse($this->_parser, $this->_buffer, feof($this->_input))) { + throw new Exception(sprintf("XML error: %s at line %d", + xml_error_string(xml_get_error_code($this->_parser)), + xml_get_current_line_number($this->_parser))); + return; + } + + $this->_offset += strlen($this->_buffer); + } + + xml_parser_free($this->_parser); + } +} \ No newline at end of file diff --git a/webservice/lib/class.phpwsdlhash.php b/webservice/lib/class.phpwsdlhash.php new file mode 100644 index 0000000..133a605 --- /dev/null +++ b/webservice/lib/class.phpwsdlhash.php @@ -0,0 +1,180 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +// This is my solution to swap hash arrays between client/server. The receiver +// has to rebuild the hash object in the way his programming language supports +// hash arrays. It's just an example solution. To use the types defined here, +// you have to include this file in your source using "require". This file has +// also to be in the list of files that are parsed by PhpWsdl. +// +// A sample unserialized PHP hash array (use the "Serialize" method on this): +// +// Array( +// 'a' => 'Value of a', +// 'b' => 'Value of b' +// ) +// +// The resulting serialized array (return this): +// +// Array( +// PhpWsdlHash( +// 'key' => 'a', +// 'value' => 'Value of a' +// ), +// PhpWsdlHash( +// 'key' => 'b', +// 'value' => 'Value of b' +// ) +// ) +// +// The received serialized array (use the "Deserialize" method on this): +// +// Array( +// object( +// 'key' => 'a', +// 'value' => 'Value of a' +// ), +// object( +// 'key' => 'b', +// 'value' => 'Value of b' +// ) +// ) +// +// The value type must be unique within an hash array. You can return prepared +// types like StringHashArray, or you define your own ones. To serialize an +// hash array to the target type, use the PhpWsdlHashArrayBuilder class: +// +// return PhpWsdlHashArrayBuilder::Serialize($yourHashVariable); +// +// To deserialize an received object: +// +// $yourHashVariable=PhpWsdlHashArrayBuilder::Deserialize($receivedHashVariable); +// +// Tip: I prefer converting hashes into an INI formatted string. The string +// type is primitive, but it can contain complex information. In nearly every +// programming language you can work with the INI format with predefined +// classes - or it's very easy to write your own. + +/** + * Key/Value pair types for string value type + * + * @pw_element string $key Key + * @pw_element string $value Value + * @pw_complex StringHash String hash array type + */ +/** + * @pw_complex StringHashArray Array of string hash array types + */ +/** + * Key/Value pair types for int value type + * + * @pw_element string $key Key + * @pw_element int $value Value + * @pw_complex IntHash Int hash array type + */ +/** + * @pw_complex IntHashArray Array of int hash array types + */ +/** + * Key/Value pair types for boolean value type + * + * @pw_element string $key Key + * @pw_element boolean $value Value + * @pw_complex BooleanHash Boolean hash array type + */ +/** + * @pw_complex BooleanHashArray Array of boolean hash array types + */ + +/** + * This class contains static methods to (de)serialize hash arrays + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlHashArrayBuilder{ + /** + * Serialize an hash array + * + * @param array $hash The PHP hash array + * @return PhpWsdlHash[] The serialized array + */ + public static function Serialize($hash){ + if(is_null($hash)) + return null; + $res=Array(); + $keys=array_keys($hash); + $i=-1; + $len=sizeof($keys); + while(++$i<$len) + $res[]=new PhpWsdlHash($keys[$i],$hash[$keys[$i]]); + return $res; + } + + /** + * Deserialize an hash array + * + * @param array $arr The serialized array + * @return array The deserialized PHP hash array + */ + public static function Deserialize($arr){ + if(is_null($arr)) + return null; + $res=Array(); + $i=-1; + $len=sizeof($arr); + while(++$i<$len) + $res[$arr[$i]->Key]=$arr[$i]->Value; + return $res; + } +} + +/** + * This class simply holds a key/value pair + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlHash{ + /** + * The key + * + * @var string + */ + public $Key; + /** + * The value + * + * @var mixed + */ + public $Value; + + /** + * Constructor + * + * @ignore + * @param string $key The key + * @param mixed $value The value + */ + public function PhpWsdlHash($key,$value){ + $this->Key=$key; + $this->Value=$value; + } +} diff --git a/webservice/lib/class.phpwsdlmethod.php b/webservice/lib/class.phpwsdlmethod.php new file mode 100644 index 0000000..693a200 --- /dev/null +++ b/webservice/lib/class.phpwsdlmethod.php @@ -0,0 +1,369 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +PhpWsdl::RegisterHook('InterpretKeywordpw_omitfncHook','internal','PhpWsdlMethod::InterpretOmit'); +PhpWsdl::RegisterHook('InterpretKeywordignoreHook','internal','PhpWsdlMethod::InterpretOmit'); +PhpWsdl::RegisterHook('InterpretKeywordpw_setHook','internal','PhpWsdlMethod::InterpretSetting'); +PhpWsdl::RegisterHook('CreateObjectHook','internalmethod','PhpWsdlMethod::CreateMethodObject'); + +/** + * A method definition object + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlMethod extends PhpWsdlObject{ + /** + * A list of parameters + * + * @var PhpWsdlParam[] + */ + public $Param=Array(); + /** + * The return value + * + * @var PhpWsdlParam + */ + public $Return=null; + /** + * A global method? + * + * @var boolean + */ + public $IsGlobal=false; + /** + * A new method is global per default? + * + * @var boolean + */ + public static $IsGlobalDefault=false; + + /** + * Constructor + * + * @param string $name The name + * @param PhpWsdlParam[] $param Optional the list of parameters (default: NULL) + * @param PhpWsdlParam $return Optional the return value (default: NULL) + * @param array $settings Optional the settings hash array (default: NULL) + */ + public function PhpWsdlMethod($name,$param=null,$return=null,$settings=null){ + PhpWsdl::Debug('New method '.$name); + parent::PhpWsdlObject($name,$settings); + if(!is_null($param)) + $this->Param=$param; + $this->Return=$return; + $this->IsGlobal=self::$IsGlobalDefault; + if(!is_null($settings)) + if(isset($settings['global'])) + $this->IsGlobal=$settings['global']=='true'||$settings['global']=='1'; + } + + /** + * Create the port type WSDL + * + * @param PhpWsdl $pw The PhpWsdl object + * @return string The WSDL + */ + public function CreatePortType($pw){ + PhpWsdl::Debug('Create WSDL port type for method '.$this->Name); + $res=Array(); + $res[]='<wsdl:operation name="'.$this->Name.'"'; + $o=sizeof($res)-1; + $pLen=sizeof($this->Param); + if($pLen>1){ + $temp=Array(); + $i=-1; + while(++$i<$pLen) + $temp[]=$this->Param[$i]->Name; + $res[$o].=' parameterOrder="'.implode(' ',$temp).'"'; + } + $res[$o].='>'; + if($pw->IncludeDocs&&!$pw->Optimize&&!is_null($this->Docs)) + $res[]='<wsdl:documentation><![CDATA['.$this->Docs.']]></wsdl:documentation>'; + $res[]='<wsdl:input message="tns:'.$this->Name.'SoapIn" />'; + $res[]='<wsdl:output message="tns:'.$this->Name.'SoapOut" />'; + $res[]='</wsdl:operation>'; + return implode('',$res); + } + + /** + * Create the binding WSDL + * + * @param PhpWsdl $pw The PhpWsdl object + * @return string The WSDL + */ + public function CreateBinding($pw){ + PhpWsdl::Debug('Create WSDL binding for method '.$this->Name); + $res=Array(); + $res[]='<wsdl:operation name="'.$this->Name.'">'; + $res[]='<soap:operation soapAction="'.$pw->NameSpace.$this->Name.'" />'; + $res[]='<wsdl:input>'; + $res[]='<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="'.$pw->NameSpace.'"'; + $pLen=sizeof($this->Param); + if($pLen>0){ + $temp=Array(); + $i=-1; + while(++$i<$pLen) + $temp[]=$this->Param[$i]->Name; + $res[sizeof($res)-1].=' parts="'.implode(' ',$temp).'"'; + } + $res[sizeof($res)-1].=' />'; + $res[]='</wsdl:input>'; + $res[]='<wsdl:output>'; + $res[]='<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="'.$pw->NameSpace.'"'; + if(!is_null($this->Return)) + $res[sizeof($res)-1].=' parts="'.$this->Return->Name.'"'; + $res[sizeof($res)-1].=' />'; + $res[]='</wsdl:output>'; + $res[]='</wsdl:operation>'; + return implode('',$res); + } + + /** + * Create the input/output messages WSDL + * + * @param PhpWsdl $pw The PhpWsdl object + * @return string The WSDL + */ + public function CreateMessages($pw){ + PhpWsdl::Debug('Create WSDL message for method '.$this->Name); + $pLen=sizeof($this->Param); + $res=Array(); + // Request + if($pLen<1){ + $res[]='<wsdl:message name="'.$this->Name.'SoapIn" />'; + }else{ + $res[]='<wsdl:message name="'.$this->Name.'SoapIn">'; + $i=-1; + while(++$i<$pLen) + $res[]=$this->Param[$i]->CreatePart($pw); + $res[]='</wsdl:message>'; + } + // Response + if(is_null($this->Return)){ + $res[]='<wsdl:message name="'.$this->Name.'SoapOut" />'; + }else{ + $res[]='<wsdl:message name="'.$this->Name.'SoapOut">'; + $res[]=$this->Return->CreatePart($pw); + $res[]='</wsdl:message>'; + } + return implode('',$res); + } + + /** + * Find a parameter of this method + * + * @param string $name The parameter name + * @return PhpWsdlParam The parameter or NULL, if not found + */ + public function GetParam($name){ + PhpWsdl::Debug('Find parameter '.$name); + $i=-1; + $len=sizeof($this->Param); + while(++$i<$len) + if($this->Param[$i]->Name==$name){ + PhpWsdl::Debug('Found parameter at index '.$i); + return $this->Param[$i]; + } + return null; + } + + /** + * Create HTML docs + * + * @param array $data Some data + */ + public function CreateMethodHtml($data){ + PhpWsdl::Debug('CreateMethodHtml for '.$data['method']->Name); + $res=&$data['res']; + $m=&$data['method']; + $res[]='<h3>'.$m->Name.'</h3>'; + $res[]='<a name="'.$m->Name.'"></a>'; + $res[]='<p class="pre">'; + $o=sizeof($res)-1; + if(!is_null($m->Return)){ + $type=$m->Return->Type; + if(in_array($type,PhpWsdl::$BasicTypes)){ + $res[$o].='<span class="blue">'.$type.'</span>'; + }else{ + $res[$o].='<a href="#'.$type.'"><span class="lightBlue">'.$type.'</span></a>'; + } + }else{ + $res[$o].='void'; + } + $res[$o].=' <span class="bold">'.$m->Name.'</span> ('; + $pLen=sizeof($m->Param); + $spacer=''; + if($pLen>1){ + $res[$o].='<br>'; + $spacer='&nbsp;&nbsp;&nbsp;&nbsp;'; + } + $hasDocs=false; + if($pLen>0){ + $j=-1; + while(++$j<$pLen){ + $p=$m->Param[$j]; + if(in_array($p->Type,PhpWsdl::$BasicTypes)){ + $res[]=$spacer.'<span class="blue">'.$p->Type.'</span> <span class="bold">'.$p->Name.'</span>'; + }else{ + $res[]=$spacer.'<a href="#'.$p->Type.'"><span class="lightBlue">'.$p->Type.'</span></a> <span class="bold">'.$p->Name.'</span>'; + } + $o=sizeof($res)-1; + if($j<$pLen-1) + $res[$o].=', '; + if($pLen>1) + $res[$o].='<br>'; + if(!$hasDocs) + if(!is_null($p->Docs)) + $hasDocs=true; + } + } + $res[].=')</p>'; + // Method documentation + if(!is_null($m->Docs)) + $res[]='<p>'.nl2br(htmlentities($m->Docs)).'</p>'; + // Parameters documentation + if($hasDocs){ + $res[]='<ul>'; + $j=-1; + while(++$j<$pLen) + $m->Param[$j]->CreateParamHtml(array_merge( + $data, + Array( + 'param' => $m->Param[$j] + ) + ) + ); + $res[]='</ul>'; + } + // Return value documentation + if(!is_null($m->Return)&&!is_null($m->Return->Docs)) + $m->Return->CreateReturnHtml($data); + PhpWsdl::CallHook( + 'CreateMethodHtmlHook', + $data + ); + } + + /** + * Create method PHP + * + * @param array $data The event data + */ + public function CreateMethodPhp($data){ + $server=$data['server']; + $res=&$data['res']; + $res[]="\t/**"; + if(!is_null($this->Docs)){ + $res[]="\t * ".implode("\n\t * ",explode("\n",$this->Docs)); + $res[]="\t *"; + } + $param=Array(); + $i=-1; + $pLen=sizeof($this->Param); + while(++$i<$pLen){ + $p=$this->Param[$i]; + $param[]='$'.$p->Name; + $res[]="\t * @param ".$p->Type." \$".$p->Name.((!is_null($p->Docs))?" ".implode("\n\t * ",explode("\n",$p->Docs)):""); + } + if(!is_null($this->Return)){ + $res[]="\t * @return ".$this->Return->Type.((!is_null($this->Return->Docs))?" ".implode("\n\t * ",explode("\n",$this->Return->Docs)):""); + } + $res[]="\t */"; + $res[]="\tpublic function ".$this->Name."(".implode(',',$param)."){"; + if(PhpWsdl::CallHook( + 'CreateMethodPhpHook', + array_merge( + $data, + Array( + 'method' => $this + ) + ) + ) + ){ + $res[]="\t\treturn self::_Call('".$this->Name."',Array("; + if($pLen>0) + $res[]="\t\t\t".implode(",\n\t\t\t",$param); + $res[]="\t\t));"; + } + $res[]="\t}"; + } + + /** + * Interpret a setting + * + * @param array $data The parser data + * @return boolean Response + */ + public static function InterpretSetting($data){ + $info=explode(' ',$data['keyword'][1],2); + if(sizeof($info)<1) + return true; + PhpWsdl::Debug('Interpret setting '.$info[0]); + $info=explode('=',$info[0],2); + if(sizeof($info)>1){ + $data['settings'][$info[0]]=$info[1]; + }else if(isset($data['settings'][$info[0]])){ + unset($data['settings'][$info[0]]); + } + return false; + } + + /** + * Interpret omit keyword + * + * @param array $data The parser data + * @return boolean Response + */ + public static function InterpretOmit($data){ + PhpWsdl::Debug('Interpret omitfnc/ignore'); + $data['omit']=true; + return true; + } + + /** + * Create method object + * + * @param array $data The parser data + * @return boolean Response + */ + public static function CreateMethodObject($data){ + if(!is_null($data['obj'])) + return true; + if($data['method']=='') + return true; + if(!is_null($data['type'])) + return true; + PhpWsdl::Debug('Add method '.$data['method']); + $server=$data['server']; + if(!is_null($server->GetMethod($data['method']))){ + PhpWsdl::Debug('WARNING: Double method detected!'); + return true; + } + if($server->ParseDocs) + if(!is_null($data['docs'])) + $data['settings']['docs']=$data['docs']; + $data['obj']=new PhpWsdlMethod($data['method'],$data['param'],$data['return'],$data['settings']); + $data['settings']=Array(); + $server->Methods[]=$data['obj']; + return true; + } +} diff --git a/webservice/lib/class.phpwsdlobject.php b/webservice/lib/class.phpwsdlobject.php new file mode 100644 index 0000000..9eab7a8 --- /dev/null +++ b/webservice/lib/class.phpwsdlobject.php @@ -0,0 +1,71 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +/** + * PhpWsdl element object base + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlObject{ + /** + * The GUID + * + * @var string + */ + public $GUID; + /** + * The name + * + * @var string + */ + public $Name; + /** + * Documentation + * + * @var string + */ + public $Docs=null; + /** + * Other settings + * + * @var array + */ + public $Settings=null; + + /** + * Constructor + * + * @param string $name The name + * @param array $settings Settings array (default: NULL) + */ + public function PhpWsdlObject($name,$settings=null){ + $this->GUID=uniqid(); + PhpWsdl::Debug('New PhpWsdlObject "'.$name.'" with GUID "'.$this->GUID.'"'); + $this->Name=$name; + if(!is_null($settings)){ + if(isset($settings['docs'])) + $this->Docs=$settings['docs']; + if(isset($settings['settings'])) + $this->Settings=$settings['settings']; + } + } +} diff --git a/webservice/lib/class.phpwsdlparam.php b/webservice/lib/class.phpwsdlparam.php new file mode 100644 index 0000000..605ff97 --- /dev/null +++ b/webservice/lib/class.phpwsdlparam.php @@ -0,0 +1,176 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +PhpWsdl::RegisterHook('InterpretKeywordparamHook','internal','PhpWsdlParam::InterpretParam'); +PhpWsdl::RegisterHook('InterpretKeywordreturnHook','internal','PhpWsdlParam::InterpretReturn'); + +/** + * A parameter or return value definition for a method + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlParam extends PhpWsdlObject{ + /** + * The parameter type name + * + * @var string + */ + public $Type; + /** + * Documentation + * + * @var string + */ + public $Docs=null; + /** + * The default name for the return value object + * Use %method% as placeholder for the method name + * + * @var string + */ + public static $DefaultReturnName='return'; + + /** + * Constructor + * + * @param string $name The name + * @param string $type Optional the type name (default: string) + * @param array $settings Optional the settings hash array (default: NULL) + */ + public function PhpWsdlParam($name,$type='string',$settings=null){ + PhpWsdl::Debug('New parameter '.$name); + parent::PhpWsdlObject($name,$settings); + $this->Type=$type; + } + + /** + * Create the part WSDL + * + * @param PhpWsdl $pw The PhpWsdl object + * @return string The WSDL + */ + public function CreatePart($pw){ + PhpWsdl::Debug('Create WSDL definition for parameter part '.$this->Name); + $res='<wsdl:part name="'.$this->Name.'" type="'; + $res.=PhpWsdl::TranslateType($this->Type).'"'; + if($pw->IncludeDocs&&!$pw->Optimize&&!is_null($this->Docs)){ + $res.='>'."\n"; + $res.='<s:documentation><![CDATA['.$this->Docs.']]></s:documentation>'."\n"; + $res.='</wsdl:part>'; + }else{ + $res.=' />'; + } + return $res; + } + + /** + * Create parameter HTML documentation + * + * @param array $data Some data + */ + public function CreateParamHtml($data){ + PhpWsdl::Debug('CreateParamHtml for '.$data['param']->Name); + $res=&$data['res']; + $p=&$data['param']; + if(is_null($p->Docs)) + return; + if(in_array($p->Type,PhpWsdl::$BasicTypes)){ + $res[]='<li class="pre"><span class="blue">'.$p->Type.'</span> <span class="bold">'.$p->Name.'</span>'; + }else{ + $res[]='<li class="pre"><a href="#'.$p->Type.'"><span class="lightBlue">'.$p->Type.'</span></a> <span class="bold">'.$p->Name.'</span>'; + } + $res[sizeof($res)-1].='<br><span class="normal">'.nl2br(htmlentities($p->Docs)).'</span></li>'; + PhpWsdl::CallHook( + 'CreateParameterHtmlHook', + $data + ); + } + + /** + * Create return value HTML documentation + * + * @param array $data Some data + */ + public function CreateReturnHtml($data){ + PhpWsdl::Debug('CreateReturnHtml for '.$data['method']->Return->Name); + $res=&$data['res']; + $m=&$data['method']; + $res[]='<p>Return value <span class="pre">'; + $o=sizeof($res)-1; + $type=$m->Return->Type; + if(in_array($type,PhpWsdl::$BasicTypes)){ + $res[$o].='<span class="blue">'.$type.'</span>'; + }else{ + $res[$o].='<a href="#'.$type.'"><span class="lightBlue">'.$type.'</span></a>'; + } + $res[$o].='</span>'.((!is_null($m->Return->Docs))?': '.nl2br(htmlentities($m->Return->Docs)):'').'</p>'; + PhpWsdl::CallHook( + 'CreateReturnHtmlHook', + $data + ); + } + + /** + * Interpret a parameter keyword + * + * @param array $data The parser data + * @return boolean Response + */ + public static function InterpretParam($data){ + if($data['method']=='') + return true; + $info=explode(' ',$data['keyword'][1],3); + if(sizeof($info)<2) + return true; + $name=substr($info[1],1); + if(substr($name,strlen($name)-1,1)==';') + $name=substr($name,0,strlen($name)-1); + PhpWsdl::Debug('Interpret parameter '.$name); + if($data['server']->ParseDocs) + if(sizeof($info)>2) + $data['settings']['docs']=trim($info[2]); + $data['param'][]=new PhpWsdlParam($name,$info[0],$data['settings']); + $data['settings']=Array(); + return false; + } + + /** + * Interpret a return value + * + * @param array $data The parser data + * @return boolean Response + */ + public static function InterpretReturn($data){ + if($data['method']=='') + return true; + $info=explode(' ',$data['keyword'][1],2); + if(sizeof($info)<1) + return true; + PhpWsdl::Debug('Interpret return'); + if($data['server']->ParseDocs) + if(sizeof($info)>1) + $data['settings']['docs']=trim($info[1]); + $data['return']=new PhpWsdlParam(str_replace('%method%',$data['method'],self::$DefaultReturnName),$info[0],$data['settings']); + $data['settings']=Array(); + return false; + } +} diff --git a/webservice/lib/class.phpwsdlparser.php b/webservice/lib/class.phpwsdlparser.php new file mode 100644 index 0000000..b7370e7 --- /dev/null +++ b/webservice/lib/class.phpwsdlparser.php @@ -0,0 +1,276 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +/** + * This class will parse the WSDL definitions from PHP source (or any other string) + * + * @author Andreas Zimmermann, wan24.de + */ +class PhpWsdlParser{ + /** + * The PhpWsdl object + * + * @var PhpWsdl + */ + public $Server; + /** + * Regular expression to parse the relevant data from a string + * 1: Comment block + * 4: Method name + * + * @var string + */ + public static $ParseRelevantRx='/\/\*\*([^\*]*\*+(?:[^\*\/][^\*]*\*+)*)\/(\s*(public\s+)?function\s+([^\s|\(]+)\s*\()?/is'; + /** + * Regular expression to parse keywords from a string + * 1: Whole line + * 2: Keyword + * 3: Parameters + * + * @var string + */ + public static $ParseKeywordsRx='/^(\s*\*\s*\@([^\s|\n]+)([^\n]*))$/m'; + /** + * Regular expression to parse the documentation from the bottom of a comment block string + * 1: Documentation + * + * @var string + */ + public static $ParseDocsRx='/^[^\*|\n]*\*[ |\t]+([^\*|\s|\@|\/|\n][^\n]*)?$/m'; + + /** + * Constructor + * + * @param PhpWsdl $server The PhpWsdl object + */ + public function PhpWsdlParser($server){ + PhpWsdl::Debug('New PhpWsdlParser'); + $this->Server=$server; + } + + /** + * Parse a string + * + * @param string $str The string to parse + */ + public function Parse($str){ + PhpWsdl::Debug('Parse a string'); + if(!PhpWsdl::CallHook( + 'BeforeParseHook', + Array( + 'sender' => $this, + 'server' => $this->Server, + 'str' => &$str + ) + ) + ) + return; + // Match all relevant strings + $defs=Array(); + preg_match_all(PhpWsdlParser::$ParseRelevantRx,$str,$defs); + $i=-1; + $len=sizeof($defs[0]); + PhpWsdl::Debug('Matched '.$len.' relevant strings to parse'); + while(++$i<$len){ + $def=$defs[1][$i]; + $method=$defs[4][$i]; + if($method!='') + PhpWsdl::Debug('Method: "'.$method.'"'); + // Parse keywords + $keywords=Array(); + $temp=Array(); + preg_match_all(PhpWsdlParser::$ParseKeywordsRx,$def,$temp); + $j=-1; + $tLen=sizeof($temp[0]); + while(++$j<$tLen) + $keywords[]=Array( + $temp[2][$j], + trim($temp[3][$j]) + ); + if(PhpWsdl::$Debugging) + PhpWsdl::Debug('Keywords: '.print_r($keywords,true)); + // Parse documentation + if($this->Server->ParseDocs){ + $docs=Array(); + $temp=Array(); + preg_match_all(PhpWsdlParser::$ParseDocsRx,$def,$temp); + $j=-1; + $tLen=sizeof($temp[0]); + while(++$j<$tLen) + $docs[]=trim($temp[1][$j]); + $docs=trim(implode("\n",$docs)); + if($docs=='') + $docs=null; + if(!is_null($docs)) + PhpWsdl::Debug('Docs: '.$docs); + }else{ + $docs=null; + } + // Create objects + $this->InterpretDefinition($def,$method,$keywords,$docs); + } + PhpWsdl::CallHook( + 'AfterParseHook', + Array( + 'sender' => $this, + 'server' => $this->Server, + 'str' => &$str + ) + ); + } + + /** + * Interpret a WSDL definition + * + * @param string $def WSDL definition + * @param string $method Method name + */ + public function InterpretDefinition($def,$method,$keywords,$docs){ + PhpWsdl::Debug('Interpret definition'); + if(!PhpWsdl::CallHook( + 'BeforeInterpretDefinitionHook', + Array( + 'sender' => $this, + 'server' => $this->Server, + 'def' => &$def, + 'method' => &$method, + 'keywords' => &$keywords, + 'docs' => &$docs + ) + ) + ) + return null; + // Initialize some variables + $param=Array(); // List ob parameter objects + $return=null; // The return value object + $elements=Array(); // List of element objects + $settings=Array(); // Settings hash + $omit=false; // Omit the object + $type=null; // Type identifier + $buffer=Array(); // Other data + // Interpret keywords + $i=-1; + $len=sizeof($keywords); + while(++$i<$len){ + $keyword=$keywords[$i]; + if(PhpWsdl::$Debugging) + PhpWsdl::Debug('Interpret keyword '.print_r($keyword,true)); + // Call the global keyword handler + if(!PhpWsdl::CallHook( + 'InterpretKeywordHook', + Array( + 'sender' => $this, + 'server' => $this->Server, + 'def' => &$def, + 'method' => &$method, + 'keywords' => &$keywords, + 'docs' => &$docs, + 'param' => &$param, + 'elements' => &$elements, + 'return' => &$return, + 'settings' => &$settings, + 'omit' => &$omit, + 'keyword' => &$keyword, + 'type' => &$type, + 'buffer' => &$buffer, + 'newkeyword' => &$newkeyword + ) + ) + ) + continue; + if($omit) + return null; + // Call the keyword handler + if(!PhpWsdl::CallHook( + 'InterpretKeyword'.$keyword[0].'Hook', + Array( + 'sender' => $this, + 'server' => $this->Server, + 'def' => &$def, + 'method' => &$method, + 'keywords' => &$keywords, + 'docs' => &$docs, + 'param' => &$param, + 'elements' => &$elements, + 'return' => &$return, + 'settings' => &$settings, + 'omit' => &$omit, + 'keyword' => &$keyword, + 'type' => &$type, + 'buffer' => &$buffer, + 'newkeyword' => &$newkeyword + ) + ) + ) + continue; + if($omit) + return null; + PhpWsdl::Debug('Keyword not handled'); + } + // Create object + $obj=null; + if(!PhpWsdl::CallHook( + 'CreateObjectHook', + Array( + 'sender' => $this, + 'server' => $this->Server, + 'def' => &$def, + 'method' => &$method, + 'keywords' => &$keywords, + 'docs' => &$docs, + 'param' => &$param, + 'elements' => &$elements, + 'return' => &$return, + 'settings' => &$settings, + 'omit' => &$omit, + 'type' => &$type, + 'buffer' => &$buffer, + 'obj' => &$obj + ) + ) + ) + return null; + if(!PhpWsdl::CallHook( + 'AfterInterpretDefinitionHook', + Array( + 'sender' => $this, + 'server' => $this->Server, + 'def' => &$def, + 'method' => &$method, + 'keywords' => &$keywords, + 'docs' => &$docs, + 'param' => &$param, + 'elements' => &$elements, + 'return' => &$return, + 'settings' => &$settings, + 'omit' => &$omit, + 'type' => &$type, + 'buffer' => &$buffer, + 'obj' => &$obj + ) + ) + ) + return null; + PhpWsdl::Debug('Object '.((is_null($obj))?'not created':'created')); + return $obj; + } +} diff --git a/webservice/lib/class.phpwsdlproxy.php b/webservice/lib/class.phpwsdlproxy.php new file mode 100644 index 0000000..2380da3 --- /dev/null +++ b/webservice/lib/class.phpwsdlproxy.php @@ -0,0 +1,83 @@ +<?php + +/* +PhpWsdl - Generate WSDL from PHP +Copyright (C) 2011 Andreas Zimmermann, wan24.de + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +if(basename($_SERVER['SCRIPT_FILENAME'])==basename(__FILE__)) + exit; + +// This proxy can handle missing parameters with NULL values. This will only +// work, if the PhpWsdl class doesn't promote the WSDL to the SoapServer. But +// then returning complex types won't be easy anymore: You have to encode the +// return value with PHPs SoapVar object by yourself. + +class PhpWsdlProxy{ + public function __call($method,$param){ + if(PhpWsdl::$Debugging) + PhpWsdl::Debug('Proxy call method '.$method.': '.print_r($param,true)); + PhpWsdl::$ProxyServer->CreateWsdl(); + $m=PhpWsdl::$ProxyServer->GetMethod($method); + if(is_null($m)) + throw(new SoapFault('MissingMethod','Method "'.$method.'" not found')); + // Try to fix the missing parameters issue if the SoapServer is not running in WSDL mode + if(!PhpWsdl::$UseProxyWsdl){ + $pLen=sizeof($m->Param); + $temp=sizeof($param); + if($pLen!=$temp){ + PhpWsdl::Debug('Wrong parameter count ('.$temp.'/'.$pLen.')'); + $req=new DOMDocument(); + if($req->loadXml(file_get_contents('php://input'))){ + $x=new DOMXPath($req); + $temp=$param; + $param=Array(); + $pos=0;// Current index in the received parameter array + $i=-1; + while(++$i<$pLen){ + $p=$m->Param[$i]; + if($x->query("/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='".$m->Name."']/*[local-name()='".$p->Name."']")->length>0){ + PhpWsdl::Debug('Parameter "'.$p->Name.'" was received'); + $param[]=$temp[$pos]; + $pos++; + }else{ + PhpWsdl::Debug('Parameter "'.$p->Name.'" was missing'); + $param[]=null; + } + } + }else{ + PhpWsdl::Debug('Could not parse SOAP request XML'); + } + } + } + // Prepare the method call + $call=($m->IsGlobal) + ?$method // Global method + :Array( // Class method + PhpWsdl::$ProxyObject, + $method + ); + // Call the target method and return the response + PhpWsdl::Debug('Call the target method'); + return (sizeof($param)<1) + ?call_user_func( + $call + ) + :call_user_func_array( + $call, + $param + ); + } +} diff --git a/webservice/readme.txt b/webservice/readme.txt new file mode 100644 index 0000000..d98aed7 --- /dev/null +++ b/webservice/readme.txt @@ -0,0 +1,8 @@ +Jedyny plik jaki wymaga podyfikacji to class.soap.php - tam wkleic w miejsce komentarza cala wiedze biznesowa. +Zaznaczylem tez ktore zmienne przechowuja jakies dane i za co odpowiadaja. + +INSTALACJA +Wszystkie pliki z paczki wkleic do jednego folderu. +Nadaæ folderowi cache uprawnienia 777 (lub odznaczyc w windows tylko do odczytu). +By uruchomic serwis wystarczy z przegladarki uruchomic plik webservice.php. +By pobrac WSDL'a z serwera nalezy odwolac sie do webservice.php?WSDL (tak powinien laczyc sie syndis). diff --git a/webservice/webservice.php b/webservice/webservice.php new file mode 100644 index 0000000..cd6f756 --- /dev/null +++ b/webservice/webservice.php @@ -0,0 +1,44 @@ +<?php +require_once("../func.php"); +require_once("../dbaccess.php"); +$polacz = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + +require_once('class.soap.php'); +require_once('class.complextypes.php'); + +// Initialize the PhpWsdl class +require_once('lib/class.phpwsdl.php'); +$soap=PhpWsdl::CreateInstance( + null, // PhpWsdl will determine a good namespace + null, // Change this to your SOAP endpoint URI (or keep it NULL and PhpWsdl will determine it) + './cache', // Change this to a folder with write access + Array( // All files with WSDL definitions in comments + 'class.soap.php', + 'class.complextypes.php' + ), + null, // The name of the class that serves the webservice will be determined by PhpWsdl + null, // This demo contains all method definitions in comments + null, // This demo contains all complex types in comments + false, // Don't send WSDL right now + false); // Don't start the SOAP server right now + +ini_set('soap.wsdl_cache_enabled',1); // Disable caching in PHP +PhpWsdl::$CacheTime=86400; // Disable caching in PhpWsdl + +// Run the SOAP server +if($soap->IsWsdlRequested()) // WSDL requested by the client? + $soap->Optimize=false; // Don't optimize WSDL to send it human readable to the browser +$soap->ParseDocs=false; // Uncomment this line to disable the whole documentation features +$soap->SoapServerOptions = ['soap_version' => SOAP_1_2]; // Setting proper soap_server version +//$soap->IncludeDocs=false; // Uncomment this line to disable writing the documentation in WSDL XML +//$wsdl=$soap->CreateWsdl(); // This would save the WSDL XML string in $wsdl +//$php=$soap->OutputPhp(false,false); // This would save a PHP SOAP client as PHP source code string in $php +//$html=$soap->OutputHtml(false,false); // This would save the HTML documentation string in $html +$soap->RunServer(); // Finally, run the server + +mysql_close($polacz); \ No newline at end of file diff --git a/wykres.php b/wykres.php new file mode 100644 index 0000000..46ff941 --- /dev/null +++ b/wykres.php @@ -0,0 +1,424 @@ +<?php session_start();?> +<?php +require_once'./func.php'; +require_once("./dbaccess.php"); +require_once('./polynomial/math.php'); + +$con = mysql_connect($db_host, $db_user, $db_user_pass) or die ('cannot connect to db'); +mysql_select_db($db_name); +mysql_query("SET NAMES utf8"); +mysql_query("SET CHARACTER_SET utf8_general_ci"); + + + + +function createHandPChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0, $point=0) +{ + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwyśszaą wartość dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + $font = './fonts/calibri.ttf'; + $fontBold = './fonts/Calibri_b.ttf'; + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-4,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + if ($i<=$pupData[2]) $color = $red; + else if ($i>$pupData[2] && $i<=$pupData[3]) $color = $yellow; + else if ($i>$pupData[3] && $i<=$pupData[5]) $color = $green; + else if ($i>$pupData[5] && $i<=$pupData[6]) $color = $yellow; + else $color = $red; + + $yLineTo = $polynomial->get_y($i+1); + if ($yLineTo>0) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+1), ($imgHeight-30)-$wspY*$yLineTo, $color); + + + } + // ======================================================================================================================== + + + // rysuje kropkę + // 0 nie rysuje, 1 - zielona, 2 - żółta, 3 - czerwona, 4 - biała + // ======================================================================================================================== + if ($point==1) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $green); + elseif ($point==2) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-28)-$wspY*$polynomial->get_y($qVal), 10, 10, $yellow); + elseif ($point==3) + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-25)-$wspY*$polynomial->get_y($qVal), 10, 10, $red); + elseif ($point==4) + { + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $background_color); + imageellipse($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $black); + } + + // ======================================================================================================================== + + return imagepng($im,$imgFileName); + +} +function createEtaChart($pupData, $tstData, $qVal, $imgFileName, $imgWidth=420, $imgHeight=330, $xDiv=10, $yDiv=10, $m3min=0) +{ + $max_XVal=0; + $max_YVal=0; + + $polynomial = new zc_math_polynomial($tstData); + $polynomial->calculate_coefficients(); + + // ustanawia najwyśszaą wartość dla X i Y + for($i=0; $i<count($tstData); $i++) + { + if ($tstData[$i][0]>$max_XVal) $max_XVal=$tstData[$i][0]; + if ($tstData[$i][1]>$max_YVal) $max_YVal=$tstData[$i][1]; + } + + $max_XVal = ceil($max_XVal+($max_XVal*0.1)); + $max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + + //sprawdza, czy m3/min, czy m3/h + if ($m3min==1) + { + $m3h = 1/60; + $ilosc_po_przecinku = 3; + $m3Desc = 'Q[m3/min]'; + } + else + { + $m3h = 1; + $ilosc_po_przecinku = 2; + $m3Desc = 'Q[m3/h]'; + } + + $font = './fonts/calibri.ttf'; + $fontBold = './fonts/Calibri_b.ttf'; + $im = imagecreate($imgWidth, $imgHeight) or die("Cannot Initialize new GD image stream"); + $background_color = imagecolorallocate($im, 255, 255, 255); + $black = imagecolorallocate($im, 0, 0, 0); + $gray = imagecolorallocate($im, 200, 200, 200); + $dark_gray = imagecolorallocate($im, 180, 180, 180); + $red = imagecolorallocate($im, 235, 0, 0); + $yellow = imagecolorallocate($im, 240, 240, 0); + $green = imagecolorallocate($im, 34, 177, 76); + $blue = imagecolorallocate($im, 0, 0, 200); + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + + if ($qVal<=$pupData[2]) imagefilledrectangle($im, 40, 30, 40+$wspX*$pupData[2], $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 240)); + elseif ($qVal>$pupData[2] && $qVal<=$pupData[3]) imagefilledrectangle($im, 40+$wspX*$pupData[2], 30, 40+$wspX*$pupData[3], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 240)); + elseif ($qVal>$pupData[3] && $qVal<=$pupData[5]) imagefilledrectangle($im, 40+$wspX*$pupData[3], 30, 40+$wspX*$pupData[5], $imgHeight-30, imagecolorallocatealpha($im, 0, 255, 0, 240)); + elseif ($qVal>$pupData[5] && $qVal<=$pupData[6]) imagefilledrectangle($im, 40+$wspX*$pupData[5], 30, 40+$wspX*$pupData[6], $imgHeight-30, imagecolorallocatealpha($im, 255, 255, 0, 240)); + else $color = imagefilledrectangle($im, 40+$wspX*$pupData[6], 30, $imgWidth-30, $imgHeight-30, imagecolorallocatealpha($im, 255, 0, 0, 240)); + + + + + imagerectangle ($im , 40, 30, $imgWidth-30, $imgHeight-30, $gray); + + // pionowa skala [X] + imagettftext($im, 10, 0, $imgWidth-61, $imgHeight-4,$black, $fontBold, $m3Desc); + // ======================================================================================================================== + // ======================================================================================================================== + for ($i=1; $i<$xDiv; $i++) + { + $szer=(($imgWidth-70)/$xDiv)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$imgHeight-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $imgHeight-15,$black, $font, number_format((($max_XVal/$xDiv)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + } + // ======================================================================================================================== + + // pozioma skala [Y] + imagettftext($im, 10, 0, 2, 12,$black, $fontBold, 'H[m]'); + // ======================================================================================================================== + for ($i=0; $i<=$yDiv; $i++) + { + $wys=($imgHeight-60)-(($imgHeight-60)/$yDiv)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $imgWidth-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$yDiv)*$i, 2, ',', '')); + } + // ======================================================================================================================== + + + + $wspX = ($imgWidth-70)/$max_XVal; + $wspY = ($imgHeight-60)/$max_YVal; + + // rysuje punkty + // ======================================================================================================================== + for ($i=0; $i<count($tstData); $i++) + imagefilledellipse ($im, 40+$wspX*$tstData[$i][0],($imgHeight-30)-$wspY*$tstData[$i][1], 5, 5, $blue); + // ======================================================================================================================== + + // rysuje linie + // ======================================================================================================================== + $step = round(1/$wspX,2); + for ($i=0; $i<$max_XVal; $i+=$step) + { + if ($i<=$pupData[2]) $color = $red; + else if ($i>$pupData[2] && $i<=$pupData[3]) $color = $yellow; + else if ($i>$pupData[3] && $i<=$pupData[5]) $color = $green; + else if ($i>$pupData[5] && $i<=$pupData[6]) $color = $yellow; + else $color = $red; + + $yLineTo = $polynomial->get_y($i+1); + if ($yLineTo>0) + imageline($im, 40+$wspX*$i, ($imgHeight-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+1), ($imgHeight-30)-$wspY*$yLineTo, $color); + + } + // ======================================================================================================================== + + + // rysuje kropkę + // ======================================================================================================================== + imagefilledellipse ($im, 40+$wspX*$qVal,($imgHeight-30)-$wspY*$polynomial->get_y($qVal), 10, 10, $gray); + // ======================================================================================================================== + + return imagepng($im,$imgFileName); + +} + + + + + + + +//$data = array(array(0,176.12),array(8.25,176.12), array(15.00, 150.00), array(20.25, 92.78)); +unset($testArray); unset($pupArray); +$testArray = sqlGetResAsArray("select TSD_VAL_04,TSD_VAL_08,TSD_VAL_14,TSD_VAL_18 from tst_tests left join tst_test_details on TSD_TST_ID=TST_ID where TST_ID=13112 order by TSD_MSR_STEP"); +$pupArray = sqlGetResAsArray("select PEP_X_PARAM from seg_pump_eng_param where PEP_TYPE='H' and PEP_PUP_ID=88 order by PEP_X_PARAM "); + +for ($i=0; $i<count($testArray); $i++) +{ + $dataH[] = array( + $testArray[$i]['TSD_VAL_04'], + $testArray[$i]['TSD_VAL_08'], + ); + $dataEta[] = array( + $testArray[$i]['TSD_VAL_04'], + $testArray[$i]['TSD_VAL_18'], + ); + + +} + +for ($i=0; $i<count($pupArray); $i++) + $dataP[] = $pupArray[$i]['PEP_X_PARAM']; + + + +createHandPChart($dataP, $dataH, 19.5, 'testHP.png', 420, 330, 10, 10, 0, 4); + +createEtaChart($dataP, $dataEta, 32, 'testETA.png', 420, 330, 10, 10, 0); + + + + + +/* + +$polynomial = new zc_math_polynomial($dataH); +$polynomial->calculate_coefficients(); + + +$width = 570; +$height = 400; + +$max_YVal=250; +$max_XVal=35; + +$y_Split = 10; +$x_Split = 10; + + +$max_XVal = ceil($max_XVal+($max_XVal*0.1)); +$max_YVal = ceil($max_YVal+($max_YVal*0.1)); + + +// czy m3/h, czy m3/min +//$m3h = 1; +//$ilosc_po_przecinku = 2; +$m3h = 1/60; +$ilosc_po_przecinku = 3; + + +$font = './fonts/calibri.ttf'; +$im = imagecreate($width, $height) or die("Cannot Initialize new GD image stream"); +$background_color = imagecolorallocate($im, 255, 255, 255); +$black = imagecolorallocate($im, 0, 0, 0); +$gray = imagecolorallocate($im, 200, 200, 200); +$dark_gray = imagecolorallocate($im, 180, 180, 180); +$red = imagecolorallocate($im, 235, 0, 0); +$yellow = imagecolorallocate($im, 240, 240, 0); +$green = imagecolorallocate($im, 34, 177, 76); +$blue = imagecolorallocate($im, 0, 0, 200); + + +//imagerectangle ($im , 1, 1, $width-1, $height-1, $black); +imagerectangle ($im , 40, 30, $width-30, $height-30, $gray); + + +// pionowa skala [X] +imagettftext($im, 10, 0, $width-61, $height-4,$black, $font, 'Q[m3/min]'); +// ======================================================================================================================== +// ======================================================================================================================== +for ($i=1; $i<$x_Split; $i++) +{ + $szer=(($width-70)/$x_Split)*$i; + imageline($im, 40+$szer, 30, 40+$szer,$height-29, $gray); + + list($left,,$right) = imageftbbox( 8, 0, $font, number_format((($max_XVal/$x_Split)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); + $xMove = 15 + ($right - $left)/2; + imagettftext($im, 8, 0, $xMove+$szer, $height-15,$black, $font, number_format((($max_XVal/$x_Split)*$i)*$m3h, $ilosc_po_przecinku, ',', '')); +} +// ======================================================================================================================== + +// pozioma skala [Y] +imagettftext($im, 10, 0, 2, 12,$black, $font, 'H[m]'); +// ======================================================================================================================== +for ($i=0; $i<=$y_Split; $i++) +{ + $wys=($height-60)-(($height-60)/$y_Split)*$i; + list($left,,$right) = imageftbbox( 8, 0, $font, number_format(($max_YVal/$y_Split)*$i, 2, ',', '')); + $xPos = 36 - ($right - $left); + imageline($im, 39, 30+$wys, $width-31, 30+$wys, $gray); + imagettftext($im, 8, 0, $xPos, 34+$wys,$black, $font, number_format(($max_YVal/$y_Split)*$i, 2, ',', '')); +} +// ======================================================================================================================== + + +$wspX = ($width-70)/$max_XVal; +$wspY = ($height-60)/$max_YVal; + +// rysuje punkty +// ======================================================================================================================== +for ($i=0; $i<count($dataH); $i++) + imagefilledellipse ($im, 40+$wspX*$dataH[$i][0],($height-30)-$wspY*$dataH[$i][1], 5, 5, $blue); +// ======================================================================================================================== + + + +// rysuje linie +// ======================================================================================================================== +for ($i=0; $i<35; $i++) +{ + if ($i<=$pupArray[2]['PEP_X_PARAM']) $color = $red; + else if ($i>$pupArray[2]['PEP_X_PARAM'] && $i<=$pupArray[3]['PEP_X_PARAM']) $color = $yellow; + else if ($i>$pupArray[3]['PEP_X_PARAM'] && $i<=$pupArray[5]['PEP_X_PARAM']) $color = $green; + else if ($i>$pupArray[5]['PEP_X_PARAM'] && $i<=$pupArray[6]['PEP_X_PARAM']) $color = $yellow; + else $color = $red; + + imageline($im, 40+$wspX*$i, ($height-30)-$wspY*$polynomial->get_y($i), 40+$wspX*($i+1), ($height-30)-$wspY*$polynomial->get_y($i+1), $color); +} +// ======================================================================================================================== + + + +// rysuje kropkę +// ======================================================================================================================== +//imagefilledellipse ($im, 40+$wspX*23.4,($height-30)-$wspY*$polynomial->get_y(23.4), 10, 10, $green); +imageellipse($im, 40+$wspX*23.4,($height-30)-$wspY*$polynomial->get_y(23.4), 10, 10, $black); +// ======================================================================================================================== + + + +imagepng($im,'test.png'); + +*/ + + +mysql_close($con); +?> + +<img src="testHP.png"> +<br/> +<img src="testETA.png">